pax_global_header00006660000000000000000000000064150630311030014502gustar00rootroot0000000000000052 comment=dbb48b0fd0e10e943ecd9bab7439701842894733 leptonica-1.86.0/000077500000000000000000000000001506303110300135545ustar00rootroot00000000000000leptonica-1.86.0/.github/000077500000000000000000000000001506303110300151145ustar00rootroot00000000000000leptonica-1.86.0/.github/workflows/000077500000000000000000000000001506303110300171515ustar00rootroot00000000000000leptonica-1.86.0/.github/workflows/autotools-macos.yml000066400000000000000000000024271506303110300230320ustar00rootroot00000000000000name: autotools-macos # autotools build and unit tests of Leptonica on macOS Homebrew. on: pull_request: branches: [ master ] paths: - '**.c' - '**.h' - 'm4/*.m4' - 'Makefile.am' - 'autogen.sh' - 'configure.ac' push: branches: - master paths-ignore: - '**/CMakeLists.txt' - '.github/*' # Trigger workflow in GitHub web frontend or from API. workflow_dispatch: jobs: brew: runs-on: ${{ matrix.config.os }} strategy: fail-fast: false matrix: config: - { os: macos-13, cc: clang } - { os: macos-latest, cc: clang } steps: - uses: actions/checkout@v4 - name: Display compiler version and latest Git history run: | ${{ matrix.config.cc }} --version git log -3 --pretty=format:'%h %ad %s | %an' - name: Install dependencies run: | brew install automake gnuplot libtool || true - name: Setup Leptonica run: | ./autogen.sh - name: Configure Leptonica run: | ./configure 'CC=${{ matrix.config.cc }}' - name: Make and install Leptonica run: | make sudo make install - name: Make and run unit tests run: | make check leptonica-1.86.0/.github/workflows/cifuzz.yml000066400000000000000000000015151506303110300212100ustar00rootroot00000000000000name: CIFuzz # OSS-Fuzz CI # See https://google.github.io/oss-fuzz/getting-started/continuous-integration/ on: pull_request: branches: - main paths: - '**.c' - '**.h' jobs: Fuzzing: runs-on: ubuntu-latest steps: - name: Build Fuzzers id: build uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master with: oss-fuzz-project-name: 'leptonica' language: c dry-run: false - name: Run Fuzzers uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: oss-fuzz-project-name: 'leptonica' fuzz-seconds: 600 dry-run: false - name: Upload Crash uses: actions/upload-artifact@v4 if: failure() && steps.build.outcome == 'success' with: name: artifacts path: ./out/artifacts leptonica-1.86.0/.github/workflows/cmake-win64.yml000066400000000000000000000156541506303110300217340ustar00rootroot00000000000000name: cmake-win64 on: push: branches: [ "master" ] paths-ignore: - '.github/*' pull_request: branches: [ "master" ] workflow_dispatch: env: ILOC: d:/a/local jobs: build: name: cmake-win64 runs-on: windows-latest steps: - uses: ilammy/setup-nasm@v1 - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" uses: actions/checkout@v4 with: submodules: recursive - run: git fetch --prune --unshallow --tags - name: Get the version id: get_version run: | $git_info=$(git describe --tags HEAD) echo "version=${git_info}" >> $env:GITHUB_OUTPUT - name: Setup Installation Location run: | mkdir ${{env.ILOC}} - name: Uninstall Perl run: | choco uninstall strawberryperl - name: Build and Install zlib-ng shell: cmd run: | git clone --depth 1 https://github.com/zlib-ng/zlib-ng.git cd zlib-ng cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_SHARED_LIBS=OFF -DZLIB_COMPAT=ON -DZLIB_ENABLE_TESTS=OFF -DINSTALL_UTILS=OFF cmake --build build --config Release --target install cd .. - name: Build and Install libpng shell: cmd run: | curl -sSL https://download.sourceforge.net/libpng/lpng1644.zip -o lpng1644.zip unzip.exe -qq lpng1644.zip cd lpng1644 cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DPNG_TESTS=OFF -DPNG_SHARED=OFF cmake --build build --config Release --target install cd .. - name: Build and Install giflib shell: cmd run: | git clone --depth 1 https://github.com/xbmc/giflib.git cd giflib cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} cmake --build build --config Release --target install cd .. - name: Build and Install libjpeg shell: cmd run: | git clone --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo.git cd libjpeg-turbo cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DWITH_TURBOJPEG=OFF cmake --build build --config Release --target install cd .. - name: Build and Install openjpeg shell: cmd run: | git clone --depth 1 https://github.com/uclouvain/openjpeg.git cd openjpeg cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} cmake --build build --config Release --target install cd .. - name: Build and Install webp shell: cmd run: | git clone --depth 1 https://chromium.googlesource.com/webm/libwebp cd libwebp cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_SHARED_LIBS=ON -DWEBP_BUILD_WEBP_JS=OFF -DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DWEBP_BUILD_WEBP_JS=OFF cmake --build build --config Release --target install cd .. - name: Build and Install jbigkit shell: cmd run: | git clone --depth 1 https://github.com/zdenop/jbigkit.git cd jbigkit cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_PROGRAMS=OFF -DBUILD_TOOLS=OFF -DCMAKE_WARN_DEPRECATED=OFF cmake --build build --config Release --target install cd .. - name: Build and Install zstd shell: cmd run: | git clone --depth 1 https://github.com/facebook/zstd.git cd zstd\build\cmake cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} cmake --build build --config Release --target install cd ../../.. - name: Build and Install lzma shell: cmd run: | ; curl -sSL https://sourceforge.net/projects/lzmautils/files/xz-5.4.3.tar.zst/download -o xz-5.4.5.tar.zst ; zstd -d xz-5.4.5.tar.zst ; tar xf xz-5.4.5.tar ; cd xz-5.4.5 git clone --depth 1 https://github.com/tukaani-project/xz.git cd xz cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON cmake --build build --config Release --target install cd .. - name: Build and Install libdeflate shell: cmd run: | git clone --depth 1 https://github.com/ebiggers/libdeflate.git cd libdeflate cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} cmake --build build --config Release --target install cd .. - name: Build and Install lerc shell: cmd run: | git clone --depth 1 https://github.com/Esri/lerc.git cd lerc cmake -Bbuild -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} cmake --build build --config Release --target install cd .. - name: Build and Install libtiff shell: cmd run: | git clone --depth 1 https://gitlab.com/libtiff/libtiff.git cd libtiff cmake -Bbuild_cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -Dtiff-tools=OFF -Dtiff-tests=OFF -Dtiff-contrib=OFF -Dtiff-docs=OFF cmake --build build_cmake --config Release --target install cd .. - name: Build and Install leptonica shell: cmd run: | cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DSW_BUILD=OFF -DBUILD_PROG=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_PROG=ON cmake --build build --config Release --target install - name: Test leptonica shell: cmd run: | echo "Testing leptonica..." ${{env.ILOC}}/bin/fileinfo ${GITHUB_WORKSPACE}/prog/test-rgb.png - name: Remove not needed tools shell: cmd run: > rm -Rf ${{env.ILOC}}/bin/*.exe - name: Upload Build Results uses: actions/upload-artifact@v4 with: name: leptonica-${{ steps.get_version.outputs.version }}-VS2019_win64 path: ${{env.ILOC}} retention-days: 5 leptonica-1.86.0/.github/workflows/cmake.yml000066400000000000000000000037111506303110300207560ustar00rootroot00000000000000name: CMake on: push: branches: [ "master" ] paths-ignore: - '.github/*' pull_request: branches: [ "master" ] workflow_dispatch: env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release jobs: build: # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. # You can convert this to a matrix build if you need cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 - name: Install dependencies on Linux if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y ninja-build sudo apt-get install -y libwebpdemux2 libwebp-dev sudo apt-get install -y libopenjp2-7 libopenjp2-7-dev libopenjp2-tools sudo apt-get install -y libgif-dev cmake --version - name: Install dependencies on macOS if: runner.os == 'macOS' run: | # brew install ninja brew install openjpeg brew install webp cmake --version - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -G Ninja -DSW_BUILD=OFF -DBUILD_PROG=ON -DBUILD_SHARED_LIBS=ON - name: Build # Build your program with the given configuration run: sudo cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install leptonica-1.86.0/.github/workflows/codeql-analysis.yml000066400000000000000000000047441506303110300227750ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ master ] pull_request: # The branches below must be a subset of the branches above branches: [ master ] schedule: - cron: '34 13 * * 4' jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'cpp' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - name: Checkout repository uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) # - name: Autobuild # uses: github/codeql-action/autobuild@v2 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language - name: Build run: | ./autogen.sh ./configure make #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 leptonica-1.86.0/.github/workflows/sw.yml000066400000000000000000000024311506303110300203250ustar00rootroot00000000000000name: sw on: push: branches: - master paths-ignore: - '**/CMakeLists.txt' - '.github/*' pull_request: branches: - master paths-ignore: - '**/CMakeLists.txt' - '.github/*' workflow_dispatch: jobs: windows: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: egorpugin/sw-action@master - run: ./sw build -static -shared -config d,r linux: runs-on: ubuntu-22.04 container: fedora:latest steps: - uses: actions/checkout@v4 - name: prepare run: | sudo dnf -y update sudo dnf -y install cmake which g++ clang clang-tools-extra lld - uses: egorpugin/sw-action@master - run: ./sw build -static -shared -config d,r macos: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: egorpugin/sw-action@master - name: install run: | brew update brew install flex bison gcc llvm - name: build run: | export PATH="/opt/homebrew/opt/bison/bin:$PATH" export PATH="/opt/homebrew/opt/flex/bin:$PATH" export PATH="/opt/homebrew/opt/llvm/bin:$PATH" export PATH="/opt/homebrew/opt/gcc/bin:$PATH" ./sw build -static -shared -config d,r -compiler gcc leptonica-1.86.0/.gitignore000066400000000000000000000011301506303110300155370ustar00rootroot00000000000000# backup files *~ # build directories /build* /.cppan* /.sw* /win* /bin # files in prog without a . /prog/* !/prog/*/ !/prog/*.* # files generated by build *.exe *.la *.lo *.log *.o *.pc *.lnk .deps .libs makefile Makefile Makefile.in /aclocal.m4 /autom4te.cache /config/ /config.status /config_auto.h /configure /lib/ /libtool /m4/ /obj/ /src/endianness.h /stamp-h1 cmake/templates/LeptonicaConfig-version.cmake cmake/templates/LeptonicaConfig.cmake # files generated by compiling conv2doxy conv2doxy # files generated by doxygen /doxygen.log /doc/*.tmp /doc/html/* # test results /prog/*.trs leptonica-1.86.0/CMakeLists.txt000066400000000000000000000264521506303110300163250ustar00rootroot00000000000000# # leptonica # # ############################################################################## # # cmake settings # # ############################################################################## cmake_minimum_required(VERSION 3.10) cmake_policy(SET CMP0054 NEW) # In-source builds are disabled. if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") message( FATAL_ERROR "CMake generation is not possible within the source directory!" "\n Remove the CMakeCache.txt file and try again from another folder" ", e.g.:\n " "\n rm CMakeCache.txt" "\n mkdir build" "\n cd build" "\n cmake ..") endif() set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}") # Use solution folders. set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake Targets") # ############################################################################## # # project settings # # ############################################################################## project( leptonica LANGUAGES C VERSION 1.86.0) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) # Standard installation paths include(GNUInstallDirs) set(MINIMUM_WEBPMUX_VERSION 0.5.0) option(BUILD_PROG "Build utility programs" OFF) if(WIN32) option(SW_BUILD "Build with sw" ON) else() option(SW_BUILD "Build with sw" OFF) endif() if(UNIX OR MINGW) option(SYM_LINK "Create symlink leptonica -> lept on UNIX" OFF) endif() option(STRICT_CONF "Strict configuration - fail when the optional library is not found" OFF) option(ENABLE_ZLIB "Enable ZLIB support" ON) option(ENABLE_PNG "Enable PNG support" ON) option(ENABLE_GIF "Enable GIF support" ON) option(ENABLE_JPEG "Enable JPEG support" ON) option(ENABLE_TIFF "Enable TIFF support" ON) option(ENABLE_WEBP "Enable WebP support" ON) option(ENABLE_OPENJPEG "Enable OpenJPEG support" ON) set(leptonica_INSTALL_CMAKE_DIR "lib/cmake/leptonica" CACHE STRING "Install destination for CMake package files") include(LeptonicaFunc) if(NOT SW_BUILD) find_package(PkgConfig QUIET) set(pkgs_private "") set(libs_private "") find_and_handle_library(ZLIB ENABLE_ZLIB ZLIB) find_and_handle_library(PNG ENABLE_PNG PNG) find_and_handle_library(JPEG ENABLE_JPEG JPEG) find_and_handle_library(TIFF ENABLE_TIFF TIFF) if(ENABLE_GIF) find_package(GIF 5) if(GIF_FOUND) set(libs_private "${libs_private} -lgif") else() if(STRICT_CONF) message( FATAL_ERROR "Could not find GIF 5 libs. Use -DENABLE_GIF=OFF to disable GIF support." ) endif() endif() endif() if(ENABLE_WEBP) find_package(WebP ${MINIMUM_WEBPMUX_VERSION} CONFIG) set(pkgs_private "${pkgs_private} libwebp libwebpmux") if(NOT TARGET WebP::webp) find_path(WebP_INCLUDE_DIR NAMES webp/decode.h) find_path(WebP_MUX_INCLUDE_DIR NAMES webp/mux.h) find_library(WebP_LIBRARY NAMES webp) find_library(WebP_MUX_LIBRARY NAMES webpmux) if(WebP_INCLUDE_DIR AND WebP_MUX_INCLUDE_DIR AND WebP_LIBRARY) message(STATUS "Found non-cmake WebP: ${WebP_LIBRARY}") set(WebP_INCLUDE_DIR "${WebP_INCLUDE_DIR};${WebP_MUX_INCLUDE_DIR}") set(WebP_LIBRARIES "${WebP_LIBRARY}") if(WebP_MUX_LIBRARY) list(APPEND WebP_LIBRARIES "${WebP_MUX_LIBRARY}") else() message(STATUS "Library webpmux not found!") endif() set(WebP_FOUND 1) endif() endif() if(WebP_FOUND) set(HAVE_LIBWEBP 1) set(HAVE_LIBWEBP_ANIM 1) include_directories(${WebP_INCLUDE_DIR}) include_directories(${WebP_MUX_INCLUDE_DIR}) message(STATUS "Found WebP: ${WebP_LIBRARIES} (${WebP_VERSION})") else() if(STRICT_CONF) message( FATAL_ERROR "Could not find WebP libs. Use -DENABLE_WEBP=OFF to disable WebP support." ) endif() endif() endif() if(ENABLE_OPENJPEG) find_package(OpenJPEG CONFIG) if(OpenJPEG_FOUND) set(OPENJPEG_VERSION "${OPENJPEG_MAJOR_VERSION}.${OPENJPEG_MINOR_VERSION}") if(${OPENJPEG_VERSION} VERSION_LESS "2.1") message(STATUS "Your libopenjp version is too old ${OPENJPEG_VERSION}") set(HAVE_LIBJP2K 0) else() set(pkgs_private "${pkgs_private} libopenjp2") set(HAVE_LIBJP2K 1) include_directories(${OPENJPEG_INCLUDE_DIRS}) if(WIN32) if(BUILD_SHARED_LIBS) add_definitions(-DOPJ_EXPORTS) else() add_definitions(-DOPJ_STATIC) endif() endif() message( STATUS "Found OpenJPEG: ${OPENJPEG_LIBRARIES} (${OPENJPEG_VERSION}.${OPENJPEG_BUILD_VERSION})" ) endif() else() if(STRICT_CONF) message( FATAL_ERROR "Could not find OpenJPEG libs. Use -DENABLE_OPENJPEG=OFF to disable OpenJPEG support." ) endif() endif() endif() else() find_package(SW REQUIRED) sw_add_package( org.sw.demo.gif org.sw.demo.jpeg org.sw.demo.glennrp.png org.sw.demo.tiff org.sw.demo.webmproject.webp org.sw.demo.uclouvain.openjpeg.openjp2) sw_execute() add_definitions( -DHAVE_LIBGIF=1 -DHAVE_LIBJPEG=1 -DHAVE_LIBPNG=1 -DHAVE_LIBTIFF=1 -DHAVE_LIBWEBP=1 -DHAVE_LIBWEBP_ANIM=1 -DHAVE_LIBZ=1 -DHAVE_LIBJP2K=1) endif() include(CheckLibraryExists) check_library_exists(m sin "" HAVE_LIBM) if(HAVE_LIBM) set(libs_private "${libs_private} -lm") endif(HAVE_LIBM) if(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") set(FREEBSD ON) endif(${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD.*|DragonFly.*|FreeBSD") # ############################################################################## # # compiler and linker # # ############################################################################## if(CMAKE_C_COMPILER_ID MATCHES "Clang") set(CLANG 1) endif() if(NOT CMAKE_BUILD_TYPE) message(STATUS "Setting build type to 'Release' as none was specified.") set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") else() message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") endif() include(CheckCCompilerFlag) macro(CHECK_CCXX_COMPILER_FLAG flag_ result_) check_c_compiler_flag(${flag_} C_HAS${result_}) endmacro() if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_compile_options("$<$:/W1;/Ox>") add_compile_options("$<$:/W4;/DDEBUG>") if(NOT CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") endif() else() if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") set(debug_flags -Wall -Wextra -Werror=format-security -pedantic -Og -g3) list(APPEND debug_flags "-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=${CMAKE_BINARY_DIR}") foreach(flag_ IN LISTS debug_flags) string(REGEX REPLACE "[^A-Za-z0-9]" "_" flag_var "${flag_}") check_c_compiler_flag(${flag_} ${flag_var}) if(C_HAS${flag_var}) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${flag_}") endif() endforeach() add_definitions(-DDEBUG) endif() endif() # ############################################################################## # # configure # # ############################################################################## set(AUTOCONFIG_SRC ${CMAKE_CURRENT_BINARY_DIR}/config_auto.h.in) set(AUTOCONFIG ${CMAKE_CURRENT_BINARY_DIR}/src/config_auto.h) if(HAVE_LIBJP2K) set(ADDITIONAL_INCLUDE_DIRS "${JP2K_INCLUDE_DIR}") endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${CMAKE_PREFIX_PATH}/include" "${CMAKE_INSTALL_PREFIX}/include" "${ADDITIONAL_INCLUDE_DIRS}") include(Configure) configure_file(${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY) set(INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" "${CMAKE_INSTALL_PREFIX}/include/leptonica") # ############################################################################## # # Show summary # # ############################################################################## message(STATUS) message(STATUS "General configuration for Leptonica ${PROJECT_VERSION}") message(STATUS "--------------------------------------------------------") message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "Compiler: ${CMAKE_C_COMPILER_ID}") message( STATUS "C compiler options: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}") message( STATUS "Linker options: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE}}" ) message(STATUS "Install directory: ${CMAKE_INSTALL_PREFIX}") message(STATUS) message(STATUS "Build with sw [SW_BUILD]: ${SW_BUILD}") message(STATUS "Build utility programs [BUILD_PROG]: ${BUILD_PROG}") if(NOT SW_BUILD) message(STATUS "Used ZLIB library: ${ZLIB_LIBRARIES}") message(STATUS "Used PNG library: ${PNG_LIBRARIES}") message(STATUS "Used JPEG library: ${JPEG_LIBRARIES}") message(STATUS "Used OpenJPEG library: ${OPENJPEG_LIBRARIES}") message(STATUS "Used TIFF library: ${TIFF_LIBRARIES}") message(STATUS "Used GIF library: ${GIF_LIBRARIES}") message(STATUS "Used WebP library: ${WebP_LIBRARIES}") endif() message(STATUS "--------------------------------------------------------") message(STATUS) # ############################################################################## # # build # # ############################################################################## add_definitions(-DHAVE_CONFIG_H) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${CMAKE_CURRENT_BINARY_DIR}/src) if(BUILD_PROG) add_subdirectory(prog) endif() add_subdirectory(src) get_target_property(leptonica_NAME leptonica NAME) get_target_property(leptonica_OUTPUT_NAME leptonica OUTPUT_NAME) configure_file(lept.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in @ONLY) # to resolve generator expression in OUTPUT_NAME set(pkg_conf_name lept.pc) if(WIN32) set(pkg_conf_name lept_$.pc) endif(WIN32) file( GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${pkg_conf_name} INPUT ${CMAKE_CURRENT_BINARY_DIR}/lept.pc.in) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig-version.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake @ONLY) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/LeptonicaConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${pkg_conf_name} DESTINATION lib/pkgconfig) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/LeptonicaConfig-version.cmake DESTINATION ${leptonica_INSTALL_CMAKE_DIR}) # ############################################################################## # uninstall target # ############################################################################## if(NOT TARGET uninstall) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target( uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() # ############################################################################## leptonica-1.86.0/Doxyfile000066400000000000000000003201741506303110300152710ustar00rootroot00000000000000# Doxyfile 1.8.14 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = Leptonica # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = 1.86.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Image processing and image analysis suite" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = moller52.jpg # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = doc # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = NO # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = inc=C # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 0. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = YES # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = doxygen.log #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = *.c \ *.h \ mainpage.txt # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = prog # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = *.c \ *.h # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = prog # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = moller52.jpg # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 60 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via Javascript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have Javascript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = YES # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: https://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. # The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /> stream H‰Áš€0 ĀVŽ >[9 !5{úOØũ°BĨ=<˜âŪmTņŲ^rĩ°|’‰SKFa¸TrYâŲ8Ž­8_Üø{ÂU endstream endobj 4 0 obj <> stream Â˙ũ˙ūūū´´“ûV= fũô ™û„A”^lčÎú¤ˆŦBžAįES|¤Ŧ‘žMVœČA˙VēZđ!#qiûęˇŅŽĶodÍ–úcė-ŠĪL¯vU;p|L\ą‹)[;æ@û‡‚Ø€KÃûy-MģGÛ|įLC˙ ÷đ…Ļī›ĩ{Rôj‚Víéũ&į¸ÃNÂ^x}+^€ŽœnáœfŋN“įŽwŸl˙;=ū‡qíĨŪÔnéëJ:i´~ûnôõé˛;ŧŦø~ۃŦDWáLâę˜*˙y „“ČŧēNe´d€d;šŲüyH:ãw´—9ÖɅ| ^ī7YQē5×O“F˜číãHD{\ķ͓ōFĩC%™Ø›üĪÔÆ_O=~njĐķ¤~~ŋl+dHäHôĪ,öäȀŊG1ƒ7:C`Q`”<7ŋ…Zo:Õą-ÁŽ'áĢ]> LŠ‚ Į2æCÉüēp›„b 'Ũ&Īãâ]oÜ&ŽōČúÕ°ßËkVČpÁd&/DD_Táĸ…Ø%íŖ2pŽMĖzÆõÛbˆĢļ“ŲÁøKŸŦģlˆ>Ä ŌŲîŖ=/Č­įĮ1N‚앺žŽÎüŽūû-ũî0Kôme?'ˆÚTĪ%á×LŽæ1ēCY2üËŸÄŗæüˆŋlˇōw%úõĻ…7Ôk¤:rrˆ ŒIÚƒ2›ë4 ’ĀŒöČiŦ_rŠĢAŋĮë8ĩĪXõķ ŗFØ Zj'Ų›|!t´2ˇ<"hœÆˆÂ>Á‚ßĮŅÃ3ē-OHLdm˜dT´ĖÍĄƒZ‹&tZ-Ų›0ļÍOЏąPéˆĩĪÜķõIĻ|žövÄĻ~vÅ@*¨ĄŨ3œ,v}ōÎC™QO €ŗõ,ŲŊ6ƒ$ˇ„/Ŗ)éž7ė-Øp7ĶŦŪ 9ŒV•n‰öŒ‚n¨Ļęue"íÕĪÄHŋūo`hbÜWĄ™Ú<¨’tĐ(č_ážļĀkâ)ŠfhođŒĘĮU(&‹7ā)N‚1CÎÆ x’1z0ŗÁO.ŸSK H›¯ō TuAn9Ô_v^2¯ÚAhdíũ0TŲFø/ŠWJ#VĪS~ģ#Ąū×FĩĮ)PĶ æ<˙qlĖŋKä~k3t)'0ĸôUŲĪt“‚u÷ŨR‹#اķÚ>ŠÕˤ“pQ)Xãk3<;"!ĀS#Ļ ؑb™”h_¯ōW†žD˜k-Ú´ļšā,úRᖈ1)ÜÔlĖĩĢ€I` Kæå'XΊÎŨÂÁ栗ÎÂw^ĶƒôFÂSú¤epXã@ōĀ,H%“”ŗ‘‘hÉáɖæđ`…g–āƒRg‹>î]l(ûxÖ6äŨRv°2K‹RN Ǝ1“ŧa"‹]î\[GIkļ/r>.ŋ´ "„ŧĩ¨Cīɐ o›Ŧūk@LQl\8k,Ņ9u:ęŋ€š]ũ#h%[Ō4ĩ˜úĸCˇ_^zęædĩØÅĀ{˜hną€ņ˜`ˆŊûōˆŠ¸J)ũkË{Õ' Ėpxûk~ítißĸˇ.üׂ͒8Åhđ826Į_9Ggz­ĒéˇĮ"Ŗw‰Ë3¯į×ál:ķCÂJú/YÂ_vGo\’|jDŠ_0fZ;ߒ ‡éãŸŲ.ĪkKj{äXgÜjew:ņ3x›‘c j¯FØķ[`˙ įūg}îZˆtũžÅŒygN<åĐĀĶŠÎ›ˆ'šā7˙}ŠhÜ3Ղ/ŲÉÉmQ āvPPCÉڄ}=~wu}äû i?s´-â ûĩŽųI5 ΐU‘ŨüR°­›QKËGƟŖT~g¯=c0ĻÎQ}ōXz#ũ]ŦIDLëYƒÃˆč)| rŽúēÍ=¤Ž˙D Ą?SęíÕMZŌ}Š…ö›ĩōŨ.ų!ŦHęŖ[oõŒŲâŪŦܖŋæ"~īZdôzøm ŠšˇčéŗÄpõR+øÆB°ááL\HĖNÜuÆy4f‹PŧŦËSZ"& 3ŊUoëUÂĄ:aOgj/ž$ōĶ„brŒXŽIĢņSˇˆœ÷8‘€7(ĨD÷ę“Á<&˙؊}n|M‚å3GZ׸ ÍÚLZ]‚ >Âė2Ŗ*ˇE^7rc“ÛdČaW{€fâ Zsũ‡n§\*2˜ÍW8ŌĻŦŖhvĪrßēĄgūīĸŲ’v‘^3kĐQüÉņ”CB QäŲyš”„pũ¸ˆü˙zcԃÕZŦ†—čĪHã+Hö~yŪ#MH ĪĶČ` ķ01id`GQūą€ŌÄIj5O} IōŽ/7˛Öå ¤š kųWō^xTļvņ{æĻ^XxR oĩōˆbhhäü]:ų/1ƒNZŗ„ũ“âwak…VH¸ C5ÃĖĀŲÆĮ8n|s깍ÅfųŖÁA2™ã†qˇÅí @H|OũŨ{ÕQ/Å$V_ŽdÎ7ŅŦc2€\§ėC&Z&ĘQĢeōĨėŨļTĖ¸ûˇ†ãėøŠû( xŗ&ĢĀŽclQûˤžø@ņūĨĢĸwųŸ%ž<_Éî1HŒö¸k^ɂ\b]åĻTWS’r'˛Y˛Qœī3ąËA§ÍĪđÕ{ÉđŊ§ĖbŗĮĩ6ŽxōngŗZí-K}b9›ÖÛ t(ĶŽŠč ÷ë?ØÁQø[ĩŦ‘‡ĐÕĩM8}@ëŨåĮÄņŒÔ˙{Ÿ>{ŠŲQÔÆ&¯’qcļyΈTŦû›œd{Qx-}‡žk´|šŦÅ SÎKąųŽĀ‡W>E÷ …šO´zҘ A \qa?|ž‹ŋ_$+ÉÕ×T‡­áÔųģc%;—ĢūZ-ŽTĶyŗÁŗb]ēeb˛Ää=ŠTU;@B,HËępę’$Ĩ™3ÕN<Ė™ 3ájŽ™ Ã=•Ê´Ē?šDœ g#n›ÜŠâ^øÖô­ĩ—‰Öc0š øØVF’¨$­A€ĸąĻVœđÍĮw˝&í /?ĸŽŊí!=hēfĮŊ˙vX”§ũûį•xŖ÷*ČJ ę÷€&DmŠŪz“Sø›JÛģ‚;Hõa'kBē‡ÛtčnZVƂĪãXÛpÄáŪŅX3|•ŖqÄōf‡DLšŌ@ęō4œŒÜ@`ŲīíŦ…iÆœiœŠĐÆåâp‚ zl~Ģ)íHrcāŪúEÛ?×Ā[a6^-  Đ2_n^/ak>c€Aø+Bjw5´5% ”5pJŲŊn‚yh§įņTęŸ~bÜĶPúökÆM~ę\øgdķ˜zGAPbŽYxŽ:°b-‚}5~‚ę5†LQ¤röÅųŊÚ#š [ )Œū§˙rCrĒsŨXįĒu.ēŨE4mãīĐ;žV܏ ühq‘Ž´ŗūoHX´ˆÁlŌlČRŸ?¸ˆĸˇDVWË”â–ūĨ,mš­-ߗ™~r­I^ķ7ũīŌcŪį]"KX leĨŊ%ÜͨoÕFš„›õcÔØî&:įQĨx]1=é#Å*Hž°ŲČm……Ø\÷ĐŌâõšWmg6ģE,ÅĸŲŠ‚6-3 Íŋãēb)?á/ũxūAQË`éX|Õ;°aēÂ:~ßωļ :§315 §ôą„F†ÚŦJĩ÷ X%)Ú$‚Y5åĢÄvČ[jŠqkÖĒC14Žņ(Ú#8īČķ¤q8(¤‚yËžĨ#ĸėÄë+TZHļךÉŊÛ/}˛Ë=6GAîĨdp“†Ę&ŧ]č˛"[Î ų}ĄŖčˆ1›õ´õũę­øefĢ6ōø ĩĀėmgßūŪKdtR]ßĀ{pŽXĄU¯T‰WŸ¯$k­AĻe“â5ڇČíÎs5 ĶžÔEëKõ$ͤŽÕŊvãôļîՏšÔĖÖ5€}ĶkėĪÖFįÛۈ7¤ByŧB ‡…ö&ŽI‚ŖúYWNIÅĘ$'ų‹õ ĩ}<ē-i%ô ĒŊä­SjâĪIĢkFū"Šöc9œpt:eãĮI_ÜĻÆ› ´>.ŽîĒ,#úo #s$S đ-˙ Ž}X%ûK,–#Œ›íÅN8Å„Ā&Åžž"w­s$€ĻĮ¯¸§¤æ[>œæŗ”kœYuēŸVd˛âT†įũû>šÁÅĘ}â5Ŧߡę­ÆĩęCæēā§¸bW9îw'ŨĄRΒKRÄû*¯ĻPĐémuÁŧé5ūJųŒP¤šÉ hËÉE{éŪ×WūĻFœõ Bf D]Ÿ\°¸˜Ī–đ4š§ĪŲ\ÕĐÁ Đ„t 'rŨÕiĀpŽb/X”I™2 RŪ*'ēSšíe§~ŪrÖA!A*ÂRŗÁk€;UģÖįŅŽÖQ2áŪpôõÆˇ„ÜÍq/ŽT.ßsSü €é˜”øÂ×ĐåŌ%fqĶ~ëÅRķ ˛$Ûyęīfž5éŪ>—ŗGĸdī>Ņ0ûîdÅ|Ņ ÕÚsÍÄÛ{¯Ärå›O3éŖÂ¸6„.†¨Ŧ°ÍÎ]˙8„„ʧ…‹ŧAņĻĖņ™i Ī%¤đ%)FKî&š6­An|CÚĻ€î­áŠT4ĨęËė•į0Š—AÛMŲįX’<ļ`žĻBéįˇmŠ9zŠîÚŪox÷ɜhŽPŽ^iρŅī§ĪœčīlŖã˒ljcûõŨq˛ĪųžŠđŌ’ß>âi˜˙G6ģH#eĻĨ MžTd0§„4ŠØ(lXéûŠ•ūCkÜ%Y`Ēĩ÷UŅļÃ) õCëS)ãx;Įiˆ.ø/ą@–<…‚§’,j . %i?ĖiŪ~…ėn‡ą¯gĨFũxÄ1ŋ#vi?;ŽIB— WLÜÔ-ωÄPģÛé”ÚR¯Ÿ÷Ü/WJ{bęDœŗčrH /Ā~%c˙:Oi>­d°ĸŪ1čMoØVķé1#fÍ˙!ËÆšīˇ}?œG)S¯.!u:zRļr#’\Ę 0§7eŗtņ{ÆhĻq°| Ģü˙ū”ÍđëŽqíāų ã7^Ū$đä¤+x1GPžs÷š´Ûž^'¤¨Kėá å˛÷´ lnŸļ~¤¸äŅ`Y!n‘đõ•B™1ûIY9ț2:a“eœ­˜?˙aitwf }ĶaĨŠ˙tt, Š­€ˆ[ mŦ[Æ ¤ĖšÛÖOZÜ ŖÅø<-žåIÁ!Čmŗļ<ÁbeI/õPá Đ|ĨŽzHy"ČLüŨj€îĐīŠÚ‡T÷TĶĐ!ĀAęŧLEWjzˆz‹ˆ+~Tš…ôĒåqûAQeÆåĒžo–Hĩbˇ]›z¤Ņ…”• .?¤ĩvGŽˆēH.iîb—z[™wO&xĘۀĘŊī<ūH%Ųį\vd‹ Á,㠖›Dv‚;zfÉhÔF˛0PØHg5$Eūz•UÎA¯ÖĐĪ[t7…Ž2Š—‡ÜŖëÛz<ģĨ€Đâ¨ßK…23Ė`4ázõfįJ.¨GbûÖôtü‰‹ޝĩ‹5 !1™ÜöXrƒŋtÄg9t0íhp,•§c’ä\Ōp˛f_—=õ˜Œw“ö+u€. ,đ­ž>ĩIÎß?îéqš¯ëqY ž…û:ū¸/cüĪë´ŨĀԍx ˆŅŦÚæZ^^÷ŒÂOt¯ÄPžXY+I8úĪ1"M‰lė,öNgA>hמŗ¯ô~Ŋ–ũ:ÕŽÅÃKy'b!ŲT3ŌI Ä!ųĘuWūÍŗíĩ…Íķn“‘d`N`[€S´āšĘn›āe„VžE° {WÉüËĄąÕHī! ČEbN ôžJ]~ƒõz}˛|0)ÆŪK3”â\ÍŨ;Ĩu›Íõö´o6ŲQ>¨L]Y ”ö.Ųķø•ŋVŨŨúZL·hxģ†oÔC1¯ø‡ß~}žH.ĸœKĐŽžÍņPVnAQO¯ļ ?TÅ2mY–âķ~Á^iÆkúÂ|éEÆ×/rwúúųĨ2ÂÜãŅŗáz­GŊ3WŽ‹ŒŪŸOžfUsČēwCšrÉųÕBcÄŠĩīŽ„L…Ē""ēö+uX%ˆ(l€‡“bRg“c´GõËėäAūˆÁ1kÖüéŒD*SˆōŪcØCœtjš`vU4ˆ5–į}=4˙1RžįŠČ@â3I¨nõ pŨņāũČ×LÍgåAtH)"Sûé* 2†AĮGuĒŧęÅF5P!A¤xjŧ F7ƒb­RoĻōGm Ї2äTĘîÕuĖŲ~ĮčŽŅ7úDl´|]økƒÂFÔ, ĢĶy;Fāŧlĩ"V’įrĐz(øôf]„)ņBąÕ˜cšzā…ÍĶ0EWdH—đBˇÔø3bą #F‚Ä`dû-íßlĐ)…¤uĨėxáE1'ē2=>cfw qŲĩ‹Šę_ōYķ%EbĢ1*jVsîC“ÉG´Gn Õq\]'o‚ėj>—ZˆÃ^ ?a ÎīÆžWÆI"œŅ[”\,ņuåTsļ ÍŅy‰ ĩŠĀæŊÖéžėŨʕģļœÕ§ŧ3Ŧęį_ØQü˛rr]¸mŪ|÷CS€ē_ķׯUÜĨ’Ļū~]’éžVjSԘ0g‘ŨØš4čšČą4[—Ŗs›ƒŽ'Ü)ŋ ˛ô‚×%š .›øû" H~{‘!´+›ÆÚĨ7ŧíՉoŅ-\÷ŋā¯ļZŌqĐ딸wŊģR0ŌĨĩ';÷ oÅâã(oōLŠÅˇ-^MmBvÄňîTĻЎoæ’Ī2y˜ā`Â˙ĩØļ†č—Ft^Č&};H6Č­šŽLKŦ'ą OÚÉĒĀ5TæõÍ_oúDȲйņElļĖIYô Nad8'<į?dnÚ+”PōiMŠŒĶüŖQm럝‚‰ą˛5jÂÜŦŅx^Nž:d'3Q3Đå=&9Ŗ×Ŧč%Á0;$? !Ŧ~ ˇ•ŪXtķJns˜\-0ÎAßJ…†¤¸ėžŲĻŠ¯:įbĒĮUÂ6>ļkg~ÁÎVĻ™5–ūpJņǜ×/įŖ4n"đOķQ¯=čą_ôŽå#Å7א(†,‘ŠYÁĀē‚%Ä jŦžĻįŧ¯Ë‰vu‰š÷CH,ũû„|Đ`šmķŒCœÃ3@oĐ+Ŧ_ŧˆ\ŧ Jô“`ŽŋE1ņĖ'!vsΖmEˇs„ė°}ŸN–té3§nŸkë°RDũ#>`ĘJš 㛞C^+…÷×uŲ`œØMęQv´âUŽeg{%Ŧŧd­ō–EŊûwØ9PΙ9ĸĨh–:돱œ‡KWķŦ¨g‰õĪ玄ĪWŨĪ~Øķø+ +š_×Ũb}+qŨ $ÔķJ%īļ§ĨģÄo-đ:ēōÕŌE<ág0B‹ŲßÄÉōtAßūîc8| đ‡ßvŲ0ĢKLÚR1‰-ƒ Ņ–Zzįūģs/š4"vžī5Ã[ëVË/¯Éj}mŸ=īę­0QĒåWĀŨ„>ēåąēRá´dĢđÜ'ŽP-ÉPû{Ļōg?ŋŨn6H-_5đĻt/ižfÆė[tcĒĘI^™€ĢÃfž@S!PíKˆÄ—X1îŧQÕ=Ņߏß0m¯™ZÛ Ģ‘’1Bw#†ú‘ûĘ$Ņ\ų˜ZŒĩ†€‰į-,hgVā¸hCÛøÄē^šâĪ=it@Û¯!›„×~€ ‰Z.jÃIl ŖgŠ5RæĐ·×<Ģæ(­\9íū%“ČcÄ]EĀĢĘ~Ų˙wÄCįėq-˜E$šŲ{öˆÚe=$S˙wŲÃŧLĻ,wČē&J‘Qpå˛[B‡ŠDĐVˆ)šáŽnS˙˙hK°ō0.8õC/P}—<ŧ˜VĖÕÍē‚Šę5<”)ÃtƒÜÖ(Øšä! šŖRj ‡LõŅ9ōqŒp> 'šO§wđv wAū?2w›Ę¸šÚY=X‰įÚYdR×~ 8Ŗƒ˙1žŅßĮGÂC ė.Së|ĀáėĻX-€ûQ; Qđņv—|xOT.IÛPM[ˇ ’vDh˙u¨˜Īé2[~˙+ÃnBWãĪ.Ķp šŠŽoö'ģAŲgĢ? g0Uxt>âŲДĩŧbĩPĄÉĩ/G †ūîbYyÂgŠŠ›™M*Ž.I­Éû_ĨĨ•ļDhņ0ģ˛Đļžš'ōØ/ŠŪ"ŋyKPŊ¯ęDČV0gž×;ŸĢ°æĄ•č'ÔĶ-FZæßŠÆ˙'°|Ų\>[üá j&+ÍPƒŲû*ĄW‘Öe¨6LđÃí#—)- .yZ‘‘|ÂE§ŦÁbëĐž•ŦN!ģú˙wßVųôNÁ7œ}Ûeļ‹AÛßíS‚?ڌ>ŗą‡ÎĮ‡įW pđŠfÎÛúāFWėOFoSI“×gô %ׁšˇRY>Í{įŊá6÷ũ"č×AÂmÅÚįŧ‹į/ŸĨŽ{Tp`[2Ę&.˜ūg§`’ū@Ę*WÆƈ&„Ë" ŋ@ā2XZkØæĸŲ}~9=üƒ*‰¨f{z•N¯ eSÉŨÕ§w)8˙û^:6”ļ/‹ZØŧ‡1)ĒģÁlrtĮÄfŊúeǃaĻDl6SBZZ^oø6&…$1Úŗ˙ŪŨÜ2 Đ.ȈÖÖßĖ/[?nōˇ …{Mpĩ/žrú Y÷ͧ¨Ø*~× ßÉŖsFĮē´Mä˛ÍŌôŠ˜ĻŠŧÚˆÆĄˆo Š åvâí/Í÷ĸ|/Œ¤t_ąįYĸš÷z¤œørÛŽž ”Õš5:˙pûܟ]ŽÔ͈9Ŧ j\¸öĖwėbø‘Ū6î›)]ĖrŖÍL$Ŧ^ *į]ųš´+ÂlĀOÃZąę“ã–‘PÚī[Ōô/¯úh¨r•..ōMÎW€—JĀB-eöŪ5–Of.QpŅžęsß =&Ļ4vå`öą !§“‚HĄķ4SŌĘi¤Fą$ņƃ€Ä’ÛĐ:ī >ŦÛŪĪ‚đ:áû˜q’‚püũáOLq´Žī–ūöí$ÜĄ¯*Ž•‰„’ūšĀl0.m¯åÁđŒ Gˇ^„h.S‚TœEåã@—Û8pÖĀjåÃNˇ×ÛŪEQZ+FüTž!Æ™ę†–qÆŋ6]ĀM}"čÛ=ŨĨxņ ´ëŠäR–5Ö~knë„;“Ė,æ ÷æ˜ޚ45…LÂsĶ'Ĩĸuõšļ5u9Gã#`å6t”H]õIJj÷nä96ųŖ ĄÄPԟ4æöOXĸl˛•.§€ËŖŠžô×$tÅÄX…Bæ=kúįÛīÍ:ԚpI‚XÂԊhx6â‰Ŗ(AƤÔRÚ´ŠúÄh>^&"Š[ûö͍Ôt”ĶũcôGĶ<+Yi•:$Š“ ĘsēŊĢہ-Ÿ—øĸuíč]˜t¨Ā{6ĄĻ‡\ úÂŅŨEū”Š‹°^ˇ‹÷Ģ-SĢ—ķR+Á–9Ãv\”3úŒlgąō0¤’ÎøŽ.íAi‡đ4Ļá8Áŧ͇k2œ+Î%ĩŖ Gu°s˙&RÃĪL›*îũ  m$›Š¯ŒûĻ•:0Dˇpl ƒĶíŊālųØä2ââ =˙#Āy–ĄoΘâv”Y9ĐåįĖ(‡2LK”ÜOĒ˜­˛–†9Zøˆ ˇqįGė)L@*WŗRÄ#{ŽZ/öÚl(oņō$Y‚ą*:ōƒ™G+éb ģį–Đt™|H^ŖÃG ’æŧYBąĀTįDWæÚ!HuŋŦæ¨v˙9˙g™\\AcÔŋVąüåf*jFŪ'(õ¯D[ĐDßÔiēãj,§mŅj̇ŅËxQ‡QaŦN€ĖÖĸŒHPeSŠ=ĐOŨĒy„[ī[ĄĸĮōŽ 1'æËį„Īĩü0n3į –æČŅAîēĄtøęÄŽŖÖUŽ;q€+žh~ÛpH°uŌrcyq ?ú)Á{ãGH3R‘‚+p„eÆc#ø”úÚnāPōÜđ_ö›PĸÛ&<ÁƒņũęLģw,îrRŖdí&z1F‹Ž…-l/Õ÷Xʎ}–í*Î•Ž ÉSŗö7ėä*ž”û,˙e•j–W€ËFÖĮÚ¤ļlY:§°{™ #lˆØ ŧÚ¯:Ļ‘ˆÃ™žīĖM= ‡Ĩ}ÆjMĒĶÜz !‚Ü#ßa{ūé˜Ä°éÛjĄû\Ŧ~k:¨ÂÛ*ųÄŖMĻ Š1đü~Ôæ× (&âÕÍæ–ÚûÁÉ_Ö6ŸđŒ}dÚ wyAÆøüsZŊÚCīČø†-Ņõ ‰}ŗoûŽú‹ú‘ú÷ŖĖ+˜Ô_Oū›˛å"ƒ˜ūĪķ×í^qi6‡EÖ¸NīĪXJ*‡"Cø_î¨ Ũ3Â} âCéfOU_Đ _ôÃLåīlč÷"Ë~‹?ãüYãâIėRĮTØė=aĖy‚} ōĨ™.<5žĮåDĶÔIĒQášĻÖZ‰KĻLŨÕ$!(ĐįjHļfJ§BŪīÆ%EC ŠlmĒĮ@‚ B/ģÄüc—ųÃP h$|NŅÂRČ/ŧá톈 ZUØÆĒ¯Ŧū/BņD Hk’ÕΊģߙ¤–{D ~ R šöģŽ<ˇ4;@ã™đN)Î}ÛL ‚Ũ´¨œā•†č"Š*2`÷sܜ3Ę"JĮOgpQ˜Œˇ8aZSVČu,Q†ģŋYDé<Gq9 ž%úbÉP˙7¤NžĩŖˇÅN?Î?wTzQÚõdęü~ĢdvHQĪ\ĩJCMLˍhíYĘ&@ŖË[Ķ‘xt•4z0o”1hÎjpŅ•Î[œCrM<ø—™7ąäMuÂmŸ‘Ē"˛v™Âņí8ĀHĄ>įŲ˙(õŠūë$SE%ė*ģžAb_%ôdÅ­ąD šŲĻSŒˆŸĐÂڜvŸĒ=ã—Q“~ULeGė2Ōmü)Â_Ž2čNgšūJ/뗎V9ŖäQÄųŠI´¤Z3Į`bk3wžXÔ2{H5:?ašyÍy3¨˙|øJ9…ę¤)ˆēŨž‰Ŧ‘Ÿėŋ€Å,yęČŖtõˆëÅģŒQëeí‹TE>Nˇ"+Īu #ĸ__ė;,Úۊiūw鋨ŊÁŊׇ@"€´ļq8öŨÎ ŋËŖqŨ,Å3ãõj7%áŊ=H˙h_‡4 ;˙-‘f˛é¨:Áą ~ĀÂŌqcāųmn b:”ofĒ?%kŽÆöé{ķƒd@EliēÕ–Ė™d‘\CŸëÉįEBøh08Xgäģ×xíÅå#RĐ[ģ¯ÉŠLgŌQM$™…ífŊ*ÃŗéAũŽ× €Ĩ  A+jU}"ĢÍĢ?•¯Ŧ<ķ?§="a7dō-įԖķģĪĐ™ÃtĪ—ÁuãÕY‘Åā‰ĄŊÃą‘ R!ąT‡Eø×LĄz“A´RėN+Ŋ˙; ˜Ą W3`ŦģųV¯XBx^uÍĪy‘hŨ#JKfV¨‹A‰>â†đ „˜Š¤”ÛŅ}šiēÕa”‰ÂNĸÄŪų+kûfG#×J5ÂV3Āüb} gŌzįp8mlÛ"ņ<;ĸŠ˙ŋÁOk=×luhø9îŨģĨzuÜ|ŗA‹K`PMo¤Mč/^§ū;W÷ŸąĩVÚ&6čî‡>’ÔŌbŅ+=ÜKty˜M1H…¯{Ô§ĩŅ4Ãûī¨ô‰aŨÉĄ/‡ûüü]äR-ÉÔv:Ø;įõėyeˇ;xB)‰NÎČŧŗM×ä˙H–čKŊ“Æ‚æa­ČāŨĒÛjUCŸ8ęGģfp /ĖvĀnėš|ßãđA÷ž/SU•ü/ŲQ'J­Aî¸öåāā+cœofkî´šÉ\Å (ō0âČ5 ¸ßé;#ercdŪ ‹¨ ûŌžö%ŠËëŊ}Ŗ3]ŅJGo€ü4ĐúÖXŗß#¸gIßė‚“Ÿßą2,ŖOŨI'ßÚųˆN´˛Sģ÷yą#øŦKzC’m”‹“.¨ŋĀYuęôpŖŽ‚ķuŸđŅ™XOŋUpä°˛ÅÔÎŋÚoDC+CöĘŧDA 0ú{›\ÍäãōÚK™•œĒŦŊŒ} ōÆYK€Ęō˛ĸaÎ)īũ2îyhŠiÉ(ųipPķĢ •UK! ›ås"Rę€+×ë(éØĩ›1ÜŌ˙OŸY97ƒ{¸œäîÅđO$ŠūI}YiβÎu|Cma˛÷c””OķVåö˙+5Ÿ'áŽŌ°hžîŽ.g›kP_ļģDqxČSÎŨŌ÷ \ĄMr]gZ3Ūąë*G`X*8ŧ ŠdÕØŽūklfĘw lo€“HÆJāÚ|ŋjSã˜ųeŠ5,Íz_{/VŦÛ+ģô3Į̈́{€î?ŗÅ"T“v–jĻ\ĒXė=vŌ‡‡.aėŲL >"G(ĮŖ­by䘈ÉxÍwŦDš&šO–ĸHːÅđhÚmƒ”ũĒĮnV(S´ĒQ”oapH˜Ęëœŗ‰@õ/qŖagŪ…'IžL14G—‡ÁˇŦĐnA¸‹ 9š´īœ ÄՀņŠP–‰ĢØ “SãĻX‰"–=ŠéB~r!NŨĩŅNUP“čžšQ[ŋÁ,×ā:ɛũ.ÆÆ„‘ļr;¨KöeF*TĶīq*ĨFnāōõ§ŅØŲ×q\CŽÜvhĐ?1Æ\OQA7‘Aûöāôud –..D)Ü÷ŸļzĻ{/Ŧ $”šÚŠĢ™‰ÎĄ˜IÖOIų­~]žÜ $`ķV’ĢÛį+uwØĮī‘?@Ę{J ĒfČLk,VõÁ[ŲÔ+ŗ)XîÆ/ŌEđ]…+Yę˙ZmęŋŅ,^ᝑpqF*įŅí¯@ )hšmčž#\[ļĄB'ėņ¯! ö?ük?UŲÚąĩšŧHųČŗ‚ģ–Â+Ķ–~[r{čœ.Æ^Č^Ā$thV o)žd8mRh mzîęHGĶĸ^ĨÂ:.„ÆeDsŦ¨JꏟēŨ‰î'Í{ÜŧKėÕ÷ЎēwqÕ¸ ĪC#Įō”°ÍŦæEôk‡čėũø$ÔÆt}âjķ@‰\š…¸ëĒøę Ē ˙+9á´$ZÆ˙#ģôčJ*¯úĀēÛŦaÜ~^hT daÜßU7Ŧԗ֐[€˜‰â,Œ9îVëqmQWŧ._Š™›ŊwIāÆģS›lŊ6ĶÔY`áēkh`ŊëŠYP­ŠÜ´oiŽx“ (Šzbũ-"õ×vqŨŪF÷_rŋ‰rų™Á;øÄƒ´*Ģ˙Z Á™pÔđB„­‡p†'ŒúŪg㸃O/ĻķœčĘŌÍ.>íGF+-lÅWZútÅ.gg53ŖÚÉXVā ÚŖQâsš“Y*ŋ"ԃëi(sˇ|˙ ō<ĩ4#܊Ąs×yX1Æ>}âÎØö`ô)i,ž#)‚‚á]ŊĮ_ŅŊˎūÎũ,ôl6ˇ˙?jūãĄÉč.´`ėHČD¯än U¯ÄŪļÖH(ōÆmE4p“8:LT˜õ˙&#|ŽĨ}ō=~yŽ!›ēHÜ/fēΕÔx]ÜC‹ú¤ķ6‘.7āF0ēŅ_ÆĢ×ûŖüt|øöU}kk]ėßjsũaylŠú\˜~ą(¨,ŨA‘Ö”*°?ķdî“ŗBaåyŅûü€‚ˇû˛‚FũÁĖˆ‡ûͤÅēĨn‘—]ĀŽgמp[q“WŒw”—‘.QØĄ*\;~‰uę™9ĀzũeĀāÅļwXũNy‰Û¸ƒ•īŅdG[o{Ņh4Ck|¤~ôJ̊ác"Έŋŋ œtČõōmGōÆCŽņąbIëŲ>Ĩ¯ŖĐO"aēî1$‘¨Ø*ã?‚íe]bŪRl@$ĀĩáÜžg(ÍųŽ åe?.%°Û€,°‹k_d 1<č˜n…ĐSĒ õ&5m†˛īí^úŒWX]‰qZÁí=^.q`Rû„Äs¤ã⠎Eėų˛RĘđŨßsŊ=‚–’´Uø^˜{;úœg‘ĪžøCõ<âåäą xļ‚— ´ęŌbžÄqšögŧu âˆg4šūr˒~ÖWp’&{& ūŪËķČpš’ô++ČZV厏×vIaę8€“6īØÅpâ㟨’ë@9¯ļŽĻOLųDMT4u?ŠIīÚzŨ"ņŋÎu°8VÛ*g+Âs-öIĮõOEA*āūÄø/lũnĘØŠé⠑Ļ.ÖG@Ģ$IizÖčZŋ•øŠÚÃ–÷HÚkR8ā6K2éøũĐiøŗhbŦB˛ē|ôS•sAfÍu†EŲzNKĨęė¯:Œōn‰Qųæ¤j% œHãu˛ĢA`ķ1fã"R4ā˛äėļ(O0úŧ?"ŧ[‹60]īTÂ7čš_ËUŧŠ,öƒJß9+>Љ­j%o†s•üIž˛YĄc­ĸ?ŗ^×$‰*USÕ≄ę&­< ķ?Øŋœ†^ģwí¸ sʤ^Ų‘j1 ģõWō'ĖZåCzm<ʑ—jÚÖ Ž Dƒú… Ģ÷ĢQ™ģB# 2ëÖh<蒷pטđkū6 #ĮYx`ayOĒÖå­qŊô¨e°vU‡8P—#Wķ$H4ŪCÕ¸VŽcÎæ’—NČš&˜ēšĸâM*bÔãĨŦ'wh¯_s{Šū6ÉAË d›°ņá—@̇˛W qdVģ(3l“ÅäŌĢØ4D+= °ĐäŌ&ĸSÂüļŖvJīɡ8táR GŲmîĨ‡"Gˆ‡M…#ecäŨče†O5ßH°Alą ĻŦŅ^l9z!äŠ`æ‰GDETBa%p|ØÖiÄ? ß%`™pÅLtĩô뚸^p¤f ØėC˙9§Tnh•ŋĐąë 9ádĨäŠ Ûw÷Ē=Z ŅŊßPŊÁ°_įaËę;’íí{  b*áAÖ{û+Ŗ‘ÎĮŸEšĩČîįT YSNkXS“Ū”Š;?š˛īŲpĘH7öŸ`äû/ŅS!8mƒŧķOõÅvvEļæ eäĩAÍQ}ŸōĪ×į°l[~Ŗh•[ÄęM“¸ōŊ€øÜ?ЏxŅB79ÁŨŽŒŠhDË×]cēŦŋ8‡H\ļŒj&žķßaĘz´ŽŌnnāŗ-ˆŲÜŋA`@mæŅqŁē$€RQ$0‹ēKû‡€ŦĄĢ\čÖ:™~ˆ¤=Ξu.%é΅yü+ĢDA…ęFū3FÕe&Wú],ŽW%eŌKQ€™ §üû¨@;e†`̍ę&t[^‡i2_žXCôz‰– -ī~k(Â5EĨži|F äAŲĸ0)>LQĩ*%%Ņ*ÍNJƒģõĖ$ė~T+‹ãųœŅpß÷ĘĒၚ]o°g]nū†LPˆ•`zœ‰}TūM¯GƒŽ*GlvēgqÎöĩĒ^cŠĸĐÛ8¤ Í7›ßĨnŦ“e7­üŧQln§õ‚Äæã@Ú=蔨ã‡ŅɅP é¯'ĀÎũąäŅōÉ ÄÉL˛×ÅjŠ*R1¤č7/íåļ×Ũë[ķîĄŨ‡Ë6wSŪø–(Ŋr:Ën­%. 6`¤Ą‰0éj’šnÂÄJMôĪ/“Ôš>TÆéōī jjĶøgŌėį%z%ã1ëa;eūø7­Tx,ÚmÛÖSÔV*ô$/Á‹&ß,dŖzq藑ž2­ĪÎųØĨOęäj­” ˆ ˛VâÂ<ŨDWU°ž(ŧ âJŨĢ“#ŦG÷ŒÕéÆ õqÂģŦЎĶ#îIs¸Ĩá9đŌ388›ž'™DÖnūKĸ~>Ĩy(UĐJtļPY[œÄžjCØma&˜o^ļ—ŗÛBsņķęŧ!‡ BYā•7ūpÁŨpo8ģsŒ‹ų:ƒ\$Ą§Ũƒw‚äī„äÆÛļāŽ™đÃ9:νõûŖŲžš˜ÍĻ $Ο‡uo´Ž_ƒy"$­ēFŧ,B¸ĩdŋOŽ—*Č;õNDd ’1čSiÔĒ ;ŅS”ĸÍ Y@xJąūˆ!Cĩ8ūĘ.ƒ‡’ųĢÆg),Zš<ņ;ŪūQfĪzpC~#˜’†år.´ā;gÖBM¸3qøãž(Ÿ)˛ĪWâ€÷ŪæŗœUIYŧē}Ā[Ú>˜8ˆ‚)/íJÉšPŊ$­˙w­t>bĀ ũžŦÉũ!‰X.ŗŪ4Zuū›å ´š^!!ÅļúįøÛ´ÁJhŠAž,˙yOfŽĢÂ8Œ—ļ€Ģ&´Å!ŧĨŦüÕSí$Ä˙hK):ęĩΞ˛')-gÂv#ŲÅ ”ēɄ#&ĻGú- ŊXÔëq#™„3B ?Ûü҆LžQÚ´ė´Ļ>Îę0ũŒQŠwpú›{Cø2ĪĒ‘&S΄ ĸ3EZåä*×o.$bY°ĒbUʈO&+ŸúiŸĐ´õŨxÚJžtU ¸/ŽžNÄ,ė…Ž¸ûy]NGō0ērÄ¯÷ ēW%3™ÁĶT^SĮ†ƒr5ۂyč}ĢpGĶūč)Yiåp•ŲáCņeqEđā|_Ķlŗˆģŋuę-d3_ÎÔ>øųB( ,F¯Ō¸ũĨŠãŅ*‹Á2sAMLĀ5<}YHæĩ-ŠJžUZKžH$ÉvHož1íՊž`#-YW:‡rÔ­Ÿ#øü—íYƒt¸&ÃaC'ØPÉũÂHŽî{ŧ{B7á1^ö˜Ų”Ę‰ūŦ’:+h•v?0…Ũ .ŲZM9[ĻŽ|ÂÕ¯(— mXCr šSžUiđO—ž iœä ĩ  'ũˆ TUl Ô˙'ÁÕēĶbŽ€Ĩ% ûe„iQšLˏPdíd~2÷MāęUp„j÷rŲ–ŗm7ļH‘ØcŽ lpīÔ:C› †ú!Ũo’2ąmŗ°ÁŊDŽĀgL‹?‚(īġ[˜-š<´Ämĸcj‚+Žháđââ×nyZ„é1XĐß?ę¤Ė'ÎņBâsßaUZķ 9Ō ˜ëņ@{oĀīŠUüqŽM>?ÖŋŧNڐ=ķĶ”Åühr÷ŲrĢôJBK/Ķ ËV÷Nˆ1 ļ߸@Ī}?b ;ũ‘°-†•)ö¤Í§˜ÁņšBŒâÅū%° RxsĄ˛Bm”ŨíĄč'ũ\>@Eāõøë*­ōÄŽˇâKd !i‡ęP§É'Ą^ÛÂ7ķ.Ĩ¸AÁcąŠĄĶΑ )Vƛa'>ÎÖĨ&ʎEÖ9?­0ĒŖrE‚9w‘0ßĢ{Š9h*\âBvē!†;É]ÉkgÚ0kŒ‹HˇPōę_jŌZ1 Ãö’Ģ‘D¸Ēõۊô8ÍáŲÚYî8Ķ6ņ@Ä<ĄĘB)ƒ€ 7—öėD–7GhņŌ%ŽšbŋLķĶfČæ ĐL­FÆBåƒ{ÚŦĮ¨ÖôGČaCōH”× ŖčŒT˜lŲī%ÜļžūFŸ’„^aüP‡p5ƒ@Ø“IžŒéIĂ>šuÏBģæ0´§h, ō›<‡0j Ü ’čYņčžAFnŗ\”ׯ‘`­uÉōÂaĸO¸÷\Â5T†3PއĢöÔWƒ(oJtü÷ŧŠb…ązdnîNņÜøėuĢkׂ)ĶRžÅÛ@pæ%XGuūŊ’Ā~ÅYŌæY:hĢ“‰"+E9äį¯@ļōŽk.u˙0­V;ÃĻĄá2ZŠ”įUÔšČÖ+’Ę>â­Ö(Û4ā$Of~ĩĸŪ÷Î#žG×ųP,}   ŧë–ô:Ėc€.ã"„“âļ„ĪčS¸aņ$üâû‹ˆfųÉ/Ž@ĶŦŊq3K aŽ,DĪßgø˜\¨‰maž<Â>k9 '͉Äå"Â娗˙ Įƒœv0vKĖuĨMĸ÷.ļĶQ(,ΗIrg…rŪ"0ēšX F˜6D—šę×`ģĮ“|kļ7ū ˙UoÂĸ^îvå ˙l†)éÎãĮåĻ5ˆö š]œ$S”Ŋ;ÔŲ•ĮĒRB–ŧ#™JĻ[œád“Q0ˆb%ņ^})ØņĀc#Ę ĢB¸ZZ8)hëiUtĨ۠8“ŋė ÜēEĮ,ŠžęlĐŨũušŽĪN; cēö°Fėō…RĒąæ'ōé…y΅ÚėU{Õ)Ķ*õĢ„Sđ›Z(ûĪ1ˆį ūË,Đ"LæKŅKÕ]fôĐj€„ Č9Ģ$Ã#§éš˛‰ŊŅîQļJ鴑ˆH˙\a&i‘=^a äÄeËfŲÁ=M2ląƒ/5XĶ.Ɨ_GųÕÜÛeūžs¸\ŊĶą/ĖáyĸJk#`ĖÆŗßÃ<Ú[âN*ĒtƒĀHËÆE[Ŧ-›„uŖŽ9SųĄŠZ=įœ/Ž@~ü‡ą‰y#reoē?ŠF*7%]Ū,ŖB{–Í u˜å“î°‰xĪ:#Ū°D:}(o–†8t|ÛL”ŲH…J ˜Č€Ķƒ¸ģ‘÷Ú}=ƒoŋ÷ -y)Í­Ģžî0郍Â3eN1¨đæ‚_:iWîŊkʁĀYqcø(Ͳ¯´âo‹:Ũ¨6æ_ũËĸSYŪ,,ĢĶ[j• ÂáÆ…ļ)xÂŌ¸ŅYVMŠ1̌e+ŋvĘĖĪÅ}‰aęm-QmŖMZŒãØļsŊŠ!ėĻĘP€hŅŪ˙`?œå´Y̞bkö¯eB‰:vļŋžXĻŌ—^åS˜ĐņÔ.ƒĢK¤LĐz’8/žļĘ Ú§–ÅÃDfĐČzX‰BÔ÷ …ĖHRŲžĶí1^ÉOāÆIvé1Ũēo HԈėg„^Ə OWŲ}ķi’;œĖlˆ›Ö)îûԓˇm)ã Wb„Un.ˆŸŅØĖéĐØbįā]Eæš ōĸÍÃäV^&94QA‚âæå4KL÷ũervZáƒiņ†1Û[û&]eD‰qA]hŧķDņ÷f=ņ}ŅCō”RԚBŦ„Á#Ģ‚=Ō)$3•sÍCԔų†Ī§# 2aî0—Q3;V‰ÅėqW‹Š#j”ĮIWŽČaļŸC¤›ĐũŸ,ŗ´2Qm:;ė@ÄĢ!eíGNŽŨ“0XdoĖMŅ”$ŋVĀũ2ŋ&īļ…•Į#p¯ŅĀä͸ǝ—{É{ŒLˇ‡­€§ 5loėčF÷Z|°: ‰īÛŧéáüĨ’¤Ä“ļ Š ?ū˝ÄŌ0\Éwžĩũ‹ļ°Tü[æ!ė!į)š’’Lŧ]÷W´•I˙L-ŖoS‘ēŊfhõnĶ‡†ŧäYŊŊŠß'üōZŌą@•;Ų0›āôÃĪË^˜d^¤ŒÎÚr÷R$ąööV8öę­˛§RĒ0a´ :ũ.G~¸Ģ- ?ׇ+Ÿ4ĩK* zūÂi[ĸŠâ3 ŧvųEŋ˜)ÎdŽ wFÄ+Ĩâx&–=°4ŪĐ¸Ą’ÅĪ˙uB]pU —ļ$ūĄ=ÕXh#ˆžōüŗ {@E&‚R_ŠeŠ3ž?L#M^Ąâ\ŋ­ q$؞øä$‰=ŖŽni+§ĪĀ@d95,÷¯‰ĸŌęYJQåx́'é–DÉ2jãŒũŠĀE1ĀW7s@đnšRÎĐIēŽúˇ¸žß@jLWƒø”ëį—>žĪx:10) â=cP§ÃØęļÃȐ‘zķúkžÉ€:.OĄo† ÖŽ+âĸ6Pˇ/ßzpmVģ&]m7hĘļ ũÆķā“Î_RŊ ’앸37‰ŲHôû­:m|Fĸė4ĀËØ˛Ÿ(4ŠųQŦ\ę ä^tUųRã…E´ėų×ĪZx ÕŪy¤8ÉŨ(ĸô‹šÁžĩFxØ™ņ2ķƒ,ZĨJ *¨Ļëa‡O^Ą×†YĮ‹ë“ģĒXƒÂ-+K?ã [*C=wƙ/8×ŧ÷Y2Ūeč/Í 1īå¸aĐŨkBxˇMĪş Tũđ(éÍW)ФJˇĻö#Œ~z\v`øU….F Ã-ß\Tˇ‚'´ąĀ™ēu(ǟ mĒŌK‡lüˆ ¤uĩšƒÃŜTëSܯ6ķKx5Įxg“ąãYW* í.—WŪŊđļPđ}øLuBI–n_žM×ĮˇĸLÔ>ŖF˜Ŋ¸8Ũņ? BâöVÉØ@(h×`p GøNzī9+pAëƒe…%bĪIĀ”Ą~| ˜ 4ßåėšŽáOxāF'ˆI€ȡčmôÅx„&­yę:ŌY”×u@r`Š5?¸ŪũĶ`Ģ [Ρ}ÛÃZƒ•š%ãÜp¨"gŦ( ŽŨ Æ]ŒW ˙;ŒB†—0Ēgy”,üôĐL9Ξ„-Ą˙?ßNmë vēŨĀâ#RŖębá ÂQô]9M93Ūq͸đÃį‰L>[áŲöŲ}‚Ũēų=FŸģĖJˆŊ§å‘o°Ôhɒ}ßkĒlÄMpˆ‡ī2"E]ÎĄÖčŋĸæ‘k •æž[ĩŦEƒđŗŋ6ÅđÖŌ4ëFėĀQh[B3”χ+r÷-ģūåģßéHnČ7€ĐáMßYŠIˇĢ‡—ôˇÖ-@ĢzˇwÃК~ØĸÖ‡>O€0–>ŪvušHØÚ •Â8¯úhŅT.$)f|.D?‡æN]LšE•Ö [> qöųV¤X2_ĢcŠ.ŨõęÃĘ5¯+<ët<{G Ü1Đ}[}ÆĨÜx’´ÃŠĢIž%ö`įę[EzŊ`ķ{E埋ŗA’-1“Ũņād5ę<ą$ęmŪGæÅČ$<e!2JŗđDŗä ôoĮ ŅĒˇŧ -āĐūōl>ūUdX š"H!>ũĒ– v(ąÛ`˛ÆöoĮ|ŠÖN@ŊÛXXÔ¯§Ĩššg„sg¯HLHŠ]åŗ˜Q“413æË­=l‹€„ |3Tuąėo´“@ښs‰Ų°w#•ÕÔ@P\*É–6§Ķ?Eė”PÔ¯ëN§ü>DR )4ĖÆ8Ÿ{°6Lé0ŒAÄŋ)’į”Y‡¨Ę˜Š2xĨ“›ī&öëŦõ_˛˜XéjuŒēØpĒ”Ŧļõ%ęÔSé%1’XVmrÛÛ@…ØÉqDũGHũ|\Ÿ=3 f’N4}d„ÂnÕ"Ô͌ŒĮWėDã>>IēŪŗčÂPöŧãf›9 ‡U$Øqŗ—'rŦĻŌĶ€ „Ô(´…ē|‡¸H˜1*øĄÔõ‰øŋâzŧ¤(KOģ¨ę¯iOą)r?ĒĐĀX%Ân˙Z_­Rã{ĀõYzÅ:ī3ĮÂĪΡ…§U2G|ąģÍĩf˜ „ņaæ6āJë&éXnyl<Îa “qUÕgĸ‘sËPļ›Ž><(ØT¸vv)fÁ 0-]pôpŽũ÷Ŗūs$˙÷ā5ķu“göŒHX.¸MģCR`‰ūōPŦ Cíą;ŋŖy ÂšŪ5<—Đ,įečl2o:ÁJ!tr,čG=Bʒ.Ņ€õŲ‚õŸÕîX0S­×3h[6ÆáTŊVŽ~ŋĐ;^•ũ§^îM%ą¤}3]$ĄWHC˛ÚŦv'Z0|(<ÔãRéõÉRh&"0t@Fāųx•7ëÂi„ķQĢ*š¯SÕ‚ ^‘AŨĀųI͊‹%EÅn 9W,hˇLŋ=NRSä_ũ›įŽÃI €Á~ûū:KĢÉ~?fgĖsäž3ŧšI[WÃN1.ˇ‰YkĄGg×§?ŲdY†JĐ:{ĀV[UÂÉŨ\ß6"ąßrCžÅú*Ķ¯Zņ„kģ‘OđēÎ(ŽJ¤™kŋ¸ ”ÖĻÅC=÷Bčŧĸ€KĒãPk M\.MĪŊ2ˇ}:˙U>ĀāĻnBE‡K bËĖŊcəŋ*'€ķbÜĒP% /vÅ'‚.+ŊፕT¨Hˇw0Æė ŠƒWŲmd€QŋžOÛĨ5|k7|üäũ™5{”)ƒl?å"Š•m~╌XÎrĒ {=kwLÅõĻÁį Ät IlŌ›dϚ2˙$Ė^b˜”ëÆ<âœw‡uĐpëīžOú%§…%įv*%Uūũ- 4šŽ/ĩÍåĻęØ`É˙6oIr1Ī–6D$pMŊYEãO¤‡Hr,ÖvĐl\ĄÃļaY‚ė|›Š8ûŅBĀŠÄg†8øĩ…sm,¨WNoÃæXšąŠßļž×HŋY•r3ŧË(~Œō4?|ŗ|RĐöģAáÚYö0dšBģÁ]OZPh>ī¨ŊÚļŋ!åØĻæ@Īü‚ؐÃ/¤ĪOVæ_es‡íũA°{°uO„$ˇœ{?—`Ųŋ‚,…?ČŦGav'8"!ÆÄGMßôáÄĢáíŖÚrŅR7Ų#Ë×.tģŅܐ=ÉąÖn•ŠkÆ2ĐTW/ü‡ú'ÆpU–pŖFēĶĒÅ %‹H“ķT„ė8ž29†ŠXJļŲĘîFSPwud %ė´sU.&õË@ŒÄ]ƒÚ4Á”ąķB"îŊņĮŪŋ˙khĀÆeũOįZœļu­´z{0€Õ"ģGžíSŦ3ĸkíáŨģ#$ éy•ĩ0Kf,!ä‡ŦGP’œÉģs7ŪiQÂņ§Ŧ~ĨÂ#h…Ą˙ęßFYŠEŒŪ¸ŒŽHü¸Ļ‚Ē}à Ōũ‘Ŧ|&‘g †…S6ņŽūļéû÷ũë nŠy~/]-Žž§kļ‡ļ¤¸°:NI˛Îvŋ Đũjæ7¨+X´ü‹˜rŠ7éĖĄI;§›`Yļulégo|ŦŋZļc—ūāņ)V(˙›a†ÉŒržvŨ,ũM(Ķ˰VsŌ8ßĪžHTÅúõa5%$Ѓ¯ØĸÎā…žgYëįWk°ÃžŨ‚$ ŦräÖäb˜­\'ã'ūFBéûIūëoFŒäë!|.ģ™éŒ~îONˤ¸üŌŌbëFĖ}I‘øNûæ.MÄV>{Â×LĢs´¯UŋĢ<,`…Š&ēG͝4ŊT—wrŊ>î†gĨayņ" —ëéîęŽ8˙L{Ų6wl ŖeTŖ€Úˇy!˜ô.ą†F T Ęr"Ŋ*XŠ!D!ÃFËF7;UF]NŠÃoĒČ4 ŽfŋŲ} @¤?=S8a[Č'đ•č_ÕĄgR„°Ė˄š ဠ#rÛė¨íi ĐŊôcŨ…Øų")Vŋvēåoš1îɏö[É2zäŲBeŅ­m%\>P+AOąuŅÎ=ņ ;Ēoü%ÛB÷ŨL‰ĩRķÍÎ g&*DJ÷FžŊpƒiõ-9–,*åweą›1‘3moÎũˇeŽ”žöŽ~ú×ëUanLŖU •wRĪkļ/žn: ›ŠŨ¸\^|Šģ‹I5l5šRŸ ōQåA•äĪ h§ōsŊyØČĢMۖũ1ãđ€úŒŦ˛zÅÖËF¤x1íV\ t6ū GoPp/åTú`y€+Ķ)õÂ#Ÿįuú÷ͤŌÛßŖ[dtœ ȇšīŦŦ’[pŗĪDBÔԁC`Tc؉ŗ] W?NÁ#˙[ΚåņËp 6ĸ§RHČgEMV?-)AŗŌa×ĸöĀC2ÄĒ­ ÅCˆU–°ôģ A¨j]€;ÄfÄw{šĐŒGՊ ö×îc3qƒMáėÆuĪmįdÚˇÁ†DV(ĻA>Ÿ{*DÁp$‰ÍVQŌÜ<ĀŖā”SWŨM‘W­mɀėÛĀÍ0‘ō•õėĄ¨O–Ģšy8DPŽ“@Îŧā͍:˙2h\Üŧ„Å'VFrjŨ#žĪąs›’ DņÔ>ķ1š=¯$<ÂuąĪ”]“×ß8+ÕĀ…ųxvFõŅ”ģ$2ōŽšLRĄJj•‰„+@ɧ™w˙/v—C+äk ˜cÁcgŠ'Ú-VØ5„ \ÜÔ.Ė(iŪČËr‹WEE˜ž›z.+_ÖÕB+›ĖOö,J "K—é5÷3Ķ‘¨ÃD9dÂX dĐŽp+ŋB6_Šßđ\Z@É+{QÔsžMđÍī¤]sö¯ÅĶvdTG_) UŧŦÔYĪ‘&WöEO.Čž÷ĶÁļ Íū(18Ę2 ųú×)īX–ŅpۀöØ Æ߉J˜Č3sޞ@][đo‹'ķV1T%í"OƒfųS'[úTNbú‚đFÍjŗágę¯ÛôËWoíhŪÎĪŦˇ\$ Ά÷놀¯¸š‡ĘOavĒ °RZVĘG÷/Ƨ”Ú įM˜ø-ø €›‘æ0&HҍģGŪzķ'ƒ›ˇl‰RtŠÎ7R#ĩ‹#}Žn-…Ō‹6D5z÷úcÔoƒúĸ?%ôfbģ=Ļ?ˆč ķ­ôVēהūųĨŲB”ŅžÕԘ’ŋ¯Nūˆ![(G&ĸoužtįZ.ėÚ~B‘˜@f'ŠÜ+P ķæ™Xļ`#š­Œ“É:OF”Ŧ7ܒG雴ßPÜKsOđöyÛũ(ą7 °9ƒøų’ĒŅ.ĩn‹tĒSÄžXņĂ1úaĸ„ŧ§ršäŸ'ë9’c (õN›žeÅâŧ™‰š*T€ÜЌöŧa81Aä!So(ØdėÃ)ũ>­#f$ą“Įôķ™ČáqW9Š5O0 ÁņItC~ãģtø€¨é Î2ƃ˙Ąŗ$ßŌ-ķ<Ēīëjlŋ"f:’›bëō‘.ËĐbaüûœ¤˙›’ũ˙=¤éˆ~§0…"ŅŊŽĨ,ƁéHķfĸIÆĘ0SF]ęSWyÖv­îHúŅPVsŲ‡ę$qgÉDÖĻIī˙SseräiÃŋū6$~žÅ59ĸŨĪ chpņž"‡dlė¯Č¤Ä âÕC­‹ūØ›6 ŗîaˇkûĀ_ęÁō/wÃä|`âdT€(k’nâ•ō=ĨˆB„~;•^ĒWۜˆHœBŅÁr~N dŧH)°$+Ēkõ¨$™ë6°¤j‚č ?QŨ¸ŧ&IÎÎÛk&g!čÖĒģ˙BŊU†?Ŧu×hŌÍøûŽVÄŌ2ē”ą°Z%8ü%&B“Ë-Rĸˆm7ŸĄĩqˇ\ǟ>–ˇ.ęՓkÁsKZ,6™Q)§C­°ōZ„ē×b)acdŲ -UƏƒų5ŽÃDõž0OÎÂđķCôÅĄsAôڑü wÁ0ĻŠbl„÷i,åcâî˙4Ŋ•)Āb[Ēõ°ß‹C;p ´_É^ˆūä-߲bH‚"å\Ŗų:¯tä^,QŒōbuî랯Rˇ€Ė˜Ûņ„4pi7ęĐŪ íÔa(ĘâûIfú.ÆBÔŠŗšė$ė†]ē’OĀŌÄ|úļ"SÛY <÷Š H“ß&Ä ŊœˇŊīŲkČÂ6Î{m4j/Á¤MńCXyzŖ˙ č %_’Ę)Úë >¯Ļ[›ęŸ‚/ĘÖXĐĸɞ—•¯!”™ļl,Ŋú;ņģĩôĢ‹hD˙$i›āg͚Eq™oT†HąÃ˙"MÄčŧ…6GEI2ŋÚī™Ā0õ¤6ŋöøZc$lô„xļķ19y!Ą+G'M€Íģ?æāÚZČ}÷?ڇVÁvŧōÖUaAeļ>0˛*Xūŧ ¯B/īĒĐTWʉí¯ĐĘČ­kXŨ˜,˙:Ģ.úĀ˞OŗoĶi@$y‘ä-uG8Õ´5Ëį{2/M—ĸž6úôæyOéë[/ŊĮĪŽFåŽŌ-Ccš›Sų4gB§%q+¯™}[Ž6ģwĒRsĸčAx …ČOЌIUči#&r'ØTųŋĀ’øZĢoUļ;‹ųE†c„Ŧ[{Ņm]uˇwGv&ĀŦMgüúÉ ĖĩĘ(,˙&6ÔܑkáĖéËĩFUˇ€ŧf¨r5•–kdANģ¤mōÁM:ZIĸ{Ú?×ŗv~ÕŪ'ŽË hĀú/˛„iŪ&ØjN^™vyÜŗœaÖĨ[ųNVđųXgĄf*^ XŊŦhônŖŠd Ę-LûĮ—ĩŧĩĮ‘r–2ŲdÃ#wo˜ Pچ §kø§3žxJæé\h„Î,ąŠŽ\˜ĄMõį0Á רm^ÍŧĄ0„á¯×÷& AÚ´ƒ|đXƒÍĸ=mJŨuü`¨0^9š`É8VĖ?†™ i‡8 •8Ō¤ņÜ$žŖŠ;`%4õŠĢ!Đħ´ę÷˙tœí‹ÉæčLLilĶīNŖƒ„\ĄÁQܓgáˇĢb_7z”+’[§ŧIQŒČļ}žĻ?ŲÉמ‰gž ÃëJ¯Ā öä8@z7íâu8˙k啖|ŖlFŪ&>ˇÖN× ´~˛ļ9ĢŖČIÚqf…<¨Ŗ°&ƒpĪąZ K„aú;ßš:rîR%Ę-Éē }0ƒ§ĸé߁HÅ˙gÕ0V@'î%ōu‘ˆøa"„1‚¯ú n+#†PhšD!‰#¨˛ä7ú…öZ?‹_bwßoōd.zö„* ԃ!¨ņ?4DrŊ¸Ē§‹„…Öéō…!k#Ň`ŲųR ē8YÚdˆW|ŧz¤×›ŌoBށĀEÎÖS:ޘŒh}rąrčēVĢĻ/Ínj-°ąĻĩØOģ„üMڙ>2âkŖģe”5aÅcD U­ôŨÉt.(lIĸJč7¯đJwCP ë—rõf­ â"€¸ ō§S¤ŠFNBī3wÉĸ,¸‹Û[_ĮÛ 3šDÛ~ô< FøÂ˙¨ĩ¨ŌSdį;OP("yB¯>˛ÂP˙%zËÚ]ú§öۚާØĸ:Î 9&à É,˛d3`/hė*n‰˙B´_6ĶÛčRÅá:ŋá0 ?đÕęFrčĨ؉ŋÍëHŪŽBƒi@2­NˇĻ(4jë\ÚՙHa¨ūøŅõWĩLgåNō÷~ ČŅZiš _Qōūūlčn7ŖĘE˜"ˇ}#ģ§ÛJ=^Āe¨âTĄš NG „šIYRÚ#Ā’˛—Ž:Å’_Íí\ņōŌΒkŋ†@äQF<ŋƒr5ņæ _C$ˆĶđ8Ō ŗb!ž¤rDėX¨rįĖWĩŅ@5Į$Åm;{r°›J×Cķ`Ũš%Ą™įũcûīi̓réėČE^žÎî0Í5ąŌŗÉ7û]…‡Čڐ׍īĻWŽ…ƒQl0Ŗ2iÄãeX˛ÁG€]1rĩ΅n˛ĢDÆĻ7°įUGāgĩ4䭞čė¨^Š{—\•ęšæ ^¸Q MKŧŅũŒŸ„˜0~Œ]Õjž)øÅZ’˙aˆ„SŠ!zŦi܌ÛiŲ!Ąœßś_˙v „6TžT­Y¤•åt_÷߆Ëjūéσo$,+hâ–Y <>äDŋÅ\päílz.mmˇ ƒÂR˛XR>%JƒühF/bÕŽQsõKgÆįŊkfŒIŧWūˆĖŧĩ\Qį;ô ;žÎ ×ŌōĄ• ŗĪÅ!“1Z\ŋėę!DæFŽa” sî˨ŧ˜…”Bé ;ОÃ5ųĶėKpúm;üZĒë%%"õ.Ä”ą“hūŽ!SĀUœđŧHJmū|Žî1ĢÍäŠųᏐũŠq ÚÆĩŌ+Abšr'‚ŽĶŖ\‚GĖeæ~zÉkŠ‚×TĀ*ļ‘OÉĻkõ¸jđĢ߇ž‚°ëfÄÍé_oSĮœGi‰¯MEĨŠU%ė#Ī|kÁ'ɓjcĻą’Ļ&eūëšVŪŧũ˙ÁˆŅ10ŸĢ‘R/Žđ˜pōUūŦŅ5‘%3 >rŧž´Ëpɰā):ƒ_$RķĨŽÚŪ/|đÖ¸ŪÖÍ ČMžØ‘ÜBę7f8ú.:4ƒh:îÖ+•¯æ~lŋ>"ø[I;ĩŠŌJM>č I)$ūMō9Ú 4ū&ÅŊË1ŠđˆC äĨ ,Bm{˛īaȧ˙cõ¯| 9ũŌ|ju¨‡Đ„9ƒūˆüÛ­ÍûkHõ)&*r§û͝įŲÚõƒ`™äÜ_˙NîåāĶŨ*)*ŠsČ>%ë­Ô"aŠ °īÜ/-`ŨšMHΗ¨ëøĪ˙ĸxēëxWZŧˆ˙;eŧ•ČŗũÕ(BDĀĖčŪÄ!@(ecėZŖ(ūĮ¤¨[’ž]œÛ‘ēp?^@ƒđÄÄå8õ8Š{9+Āę?€;ūå3Ūņ.voKËQ ĮÅ5ÅIŪ­7ŲáԚíí*āA7š˛f1=š}°g9bwŠ¤qģ42Ą˛w7Œ":X“K/wŦŽž;bÂ×đÛ4šžíÖá;Ø $Páų=^ËÍÖyĨī xDy;eVnr“qŲ"ęNĩî}Č?vÚR˜ ŸæėE@1Â둨sÜú u57FAß ¤FÔ_žŖ¨1~’›û†áŊQ'‰œĘ`[įÃÃ%g>Ģŋ(t–ØmŸšÃ(ü™vÃ)i[ƒˆOŠēņĝ6ԇ, ŖÕÍ-‘{n.¨™KīÛ—Lƒë$”XÁ ø~j3ˇF J ü‹ž€ģYējtŖ§–ĩžĀĸÉá‡EņŸOÜvéĢåŌûRŖ}Ŗ#dC褰Âh? Û?j{~Ãwģúž…åĸĨ÷ģd:\!˜Ž°ĸū÷¸áø§5ĖąE!ĸŦ‰Ū"ĩV†i&ˇÁIiö‰ÃtÅņiÚŖī`P}Ĩ͟}$,3BUM›sÕQÖ*ÍĨ8GœķāĒŊ×CÁ‘Ų: ”F™÷îCŅá“Ģl›AΈ…HXIž%:}¨SČ<û—°; i]Qôüē9mâ]Ŋ"—y’a—RI¤ˆ|ƖŅEˆæjFŠČÎÍå# ,”ä^G¤îĢí_\úYS’:{o1Ŋ Ī^>ŪÔËÉÃŦlĘ˙%°ŠĐ´ĒhŠUB”‘‡=tškĖ<ōĄÃO“‚ČĻÔ$™ŗøß8ŋŪt“c×ķ5—ģÎâãĨ<ĒÍĻ)ވ~ÃĪuĀ*p‡ŋ|ˆÅŧũžW“‡ŲWōC#4Oī/ΚO¸õR CМ E:čžQ2‚(FwŨz||!€r’•eä+SGLe„xC–X$F&ī9đĄŠaĸt#˛2'Î3–šœˇ[Čî鹲žšŸ`uԚ>˛Ū´B.’ģj^ĩVÍF¯åbĸŋuüégR(Ļ—ÚāDņŽĘ9FŪcĸĄfՒ˙XŦ>˜ą•3†ĨíéšeĢ_øY߄|Kī/šž/‚Āĩˑ‘KbP62üPf\šķ˜ƒō,ëi˙Eļuģ;Ÿ§ā%4đWR% “ö"Ņ~6ž+ũl-Š™qĘĮŧ[¸oMUfk hŲˇÚ~4Âæôm ú‰0˙deGRN‚×dMŌįMԚ˜úëN6}j„A­XÆ-ĸ~ ŽFŗTz ŸHād–ôĩ–vŗŠ3ĪŽŌ𴊐ō1ĢŠˆ|Fđ7V?ÚĮ *:k ¨hđ9›E:;ķv‰ŠĻßJ`‹aŠĶ IíG\ĩņũĸ+Uß.…š6GU0TÁ5•zė˙_†ôėQÖúēĄTūáč Ptžü×؟ž|Ļ bÉ+;I•_ J˜üV xÔÜ‚Õ×ŗa&dbYų )î˜@f~G-úŠ|ņ ęreôōD6%¨‘ãÚgF1€85]~ķáö@Bb~C圸é¤QēÄFŽW‰5šÛ÷t`^÷bT)wƌéäî?ŗœ.ĖuXļHOQŗôW†°Ņ63•DĮ`îz4Ūśßį’omŪ÷Ɔ;ۚĻ8-XĶņ'11œ˙PßÚî‘ņ œZc1fÜáí|ÜļãQēâ€Míęe‡Á¤ËŠ ZĐ-1°zšsš AXĘYŽë‚'?õP…é=ŅÔøÍ&Lqi‹ręKhžÆ{Ėãí3Zŗ¤5~†Pļt­’&tŊ]ÅRQ€Žƒĩļy˜Ŋļ›ōŸŌžŨŪˇ 6øˇ/Äj mcw–cbßčsM˜ 0̧GˆCÉTē.ڜ)ʀ{ō$ĩQ…4^ų¤ū6kA ŽMÔJ&ŌÃEk•ąîB´V ŌŅžyŅ‘´ˆX4ĶĢŪí`āh͚Ŗj-åÜ<ŸQūśÄY„r~§üLYãæ9˙@a’ŗ€7ōí$[ˆ3¯ęEzœ¯ÎüKč›IĪđ,Áco+Īq$!ŸēĻ##Ô • ;jÆ)&•dé!8žĮаEN÷¸°6׍‰€ãÛCÜY)AgōA˜øĩ35XTˆœõœ‡ŒŽõĩ.ōvwVįļ‰P ¨xD%ä3Dû;ƒŌēĩōÖ{ÕPķĖąVŠvjXĒ?ÛĨD?Žm ōƒDÆ0ģĄ¤|î˜9´"šëy×ĀķJké|Mī ÕĪ2Ŧ7ō*דUšWÕŠM[õj¤œ— Ä0ČŸķĄĨĄ¯ËˆgR“¨NËįĸqä܋ō+æ™ĖúAƒđƒŒƒŒŽUŅî=ŦōUĮK=ÂåGÁyxßÅŦlŪíJáđTÜĶ˙Sėųūš¨¨^œSyÔ#ĩöBgB•в˛wŊ Hœ>î74ųM_lŖÕÚ˙ ą‚Ņ@՟ۃąCŽ›>J ‘].–õėI[Ž h˜Ķ9˜=)¸!XQĮPvõ=šŧ*=!Œ˜64€|šU S7Ü[Ž^čÅÚ1}™¯v¸ ”Ú:›ã$¸ō&@É(øŒŽ¸SÖfw×ä§ë*†ŒbüŪŋ‘+ųWĸŊƒ]ü|u›Ķᓉ!æ_ų›Ē}ˇeŦĄsĒõ4ZOبkôí:eŗ„;kļ‡ŨR0˙pœ_ØŖ7¸Ü.|CLhøIE&Ï˛ rõŦRÆ Đ”$D‰Ú@ŖbÖíˇę”Îp&sũÍØOČĪÚ-•;ĘĸĸÂį:OŸí8.ÖŨ.¤æČ2ÍĮî _kВ(Ķ1?­ŦŅŌoM *ęîɁ„ü*"~9V׊Ŧ,×ā˜îŗ~¸ÉG‹ž@2ŧG[,bŠ _„‘h9U˙kR4j:0ˆw9U´Ümœ#Š/K8°ānÍéÆxúҰōg§Å ŗ8›ôy6ŽO9ŗĒYF9Y¸Š­ÃE4‚L%ŗUnpc>ØÆī•zĘ8Qņ" 5ˇ0Pŋžŋ‡ã>ãôĩÎÁ­Õō7îšĻɏ‹]„eŽŗĸ0ø¯¤ĒËéšÉ+φ_ÚõãIȐŽÔžĒĪCŸĪr•ŠpÉŖ~ĨJ ÆŲpy<ŦÂû|TpmÉą%åČÆŸ†Ëúlą$‘:ūŌĀ<|ä&JDÁ,Ī~ŽŠw0øĘūĻu‡;‹Ąž¯Ķ)ĸEÜÕ¸XФāq÷ãļQŲX=ŖIĩõžČ¸;[+:;ŒVo‰76îŊ&+ũÉfØļ5>niüƒŖ÷PÄŒE8^Üä+š^ ĩ-åAˇŋi˙öuųé.Ũyķn}ãÜ z}ʙ9l_†>ų“#‹ĩ“ S˛p4-Ŗ ŊP뒐ÎyũLJÎo¨V^ãÁÅ{{;ą‚åF‹0{žķ“vˇg1‹ybNŽxXa`Ķ‘ÅŅ3i{\"āü{étŠŲ,ŋ#gģ5v_{IĪžŸā÷ŸōŒĸLy$uÉmI`‚¸Ŗ[y1N¨\ĩe˜ËĀG͆ũX™h1¤Įō:‡ZmŦ€ŧÉ!Ä|“¯Ŗ)Ŗ;gq ‘ĩRێöSN#ķü˛„9ėŒ2ŠDČ ¤næ-ļ {ë"BĻ å€ĶRœ3ˆŸŖ×8Ā ž€Mƒ@ÎÂkŽW>NģÆ'sîÍ,``*ŋŪ ÆJŽlĐâ3~RģøĪˡËšÚŗKyûRKča˙\tY™ĘŌC“ūb‹ĘîĩTH˛ļv.)"˜K)üÑHpéä@žÕŪ…‡cöN <đœK`KPˇŨvÉņ|‰q˙1å]§‡ŧUî,‚õŧ'ŧߨ\“āU4—5[ļU.˜Ā¤+Ķ)ģį¤ųexÛŧJõî8C-ßŪe"–9ũū‘n¤Q^2t6ĄƒVežwM¨,ģ},Z*5WaÅÎPÜđ•Utƒ; Õņ*šŨ€_ü v šîĨNĸŠúĄ‰|šú ā΀(8 ĶŨĪâĮ]sŌd“pĄŠžëãŸŊœĸ÷ŲG– ¯¨™Vq+\Žģ$Yb¸]öŒ!ˇŋm°bcsŧ~YŽÉņÉōcˆ5:LÃ>…øŗ¤Ã]LH‘Ū‰†UŠËŽÍēĩFšÂ6‹ÚíNlr¯ÁË'BVŋõÜÖéKWIęG\“JmBÖŨĮ LūG˙H€ëõ×>üķ!B¨mŠÔøķgՃ%¯% cėP°yũ'Š—ŠŨĨŪ‹`Ą[~B—ü ]kLøÆ|úMę0ĸ|ug•îŲjĒÛ!y:i÷$°´Ī-õ¸ū.{‡”‘Ie[áå–_î`ş v9číx×HëģüsLST"ÚĐ?ëx—ĀôYŪ1/̌üō+oŅl ūäåImĘ{ų˜ŗ ŋėīĻŌgO›ƒ•↞§@Xíeb–GĸgBOXâ ÷ČdežŊ“Ŗ†žŨ3˛a.\sŽŅJAĄáâÂ=æĪøTģc4ú+Ŋ]ŨéŖ?áI¨QjMô VIt -Ģ?ļŋ/=žB~kJâ1÷f ÆK™]^i;Éũ}ƒIšŪ öōČõ$%2ūļ6§ÂE@ΆgĪŋ6 Ûí ;H™¯¸ü~øŋzßĨ™I%%œO˛‰ˆd!„ "|Kāv_Ôi~Cöéš[)üx8$ĖižBkáZš“Âō`ūų˙XģĸŠsų‹ļ9ÛÜŠNōØ˛sq6É{įÎ-š“Ņí˙5?’?~ĻQŧâ=î>¤öšørö1kl@iŨūxŪȐprgąÛ ߘå"—ąßäJīaOŨs‹Đ€7ÍÖæPôGē`-‡¯bxÉķ–<,‹Äļ>Š˜õ=âÆ˙P˜@ēF"u|)IË<'Fęë“$ŽÛ’TŊ¨˙Ģa‚Æį[ŔgÂ'…ˆJž´ŌŲ l*&—>ĻE+Ķ,ŧPŋjb$Úf˯°­ĖIŖmUʏv)x­aįdĢWŖVÄēkˇŧÜŋnҧĒ+ˇy\§ @*3‚ödˇĶc$į¯F5lŽyÃLZĻU‘|ęKęē~ž˙&JÛaîPĖŨ—"ËVî”6öŠÎˤA„ŠTā:Ŗ=qFD4ąņbâĐĄ$i&?b”ät˙o=ĢĘ÷¸JŽĄeŸk™š24ésĘŊRŠžTŊKDntÔ6Ė`ëÃfŒĖx†”žF– æœMčM6ÛÂĒׇŋĄū,a Ößé•ÎQ†ag5¨ĻPcÖū`I:@ ĄSz˜D¡uX•€†z¤?õ—|ū |e , ī5õÛQĪ`Û\;ö-b:éyÍŅøķcuœs,—úkęo…d‹>…¸…s äŨtgŽüÉOlI =WŠ~)ΚUŽ ]^iIŨl|GÁBŒŒxū0-t2#TK8 TģyacĪ}ĘÛ°EPĄdšōœzđ n÷›}vx?B^֑Ō.¸0ƒ-˙3"éÁ'ķB5ĮEžĖ(§¤R˜ÅZ`Álˆ´O“ĘpËŌ×;Á]ˆēēqĻn”pžƒ)xeēæO<˜TI5˙}Ē—(`wŖkƒ˙YĸT1ą~hĸōǎ¤=mƟ 4kąĪZP§­“m™ÖĪ’&HčGšÖæj™BĒZ…>\.$f;ø™[]LÜĻæ`WĄæ„Šƒŗ€|‰&wĐ&-]É?VeֈsŒĸ Y”Ŗm–•ā#ąŪ[ŠyP~ņôôI" #ô8YŗŧîūRÎÅd~-yī  ëíE+8ËĪäAQĪķb)ˆ/CēZD”ę\/XĄĢõfŊąĩÜ=ëZ­üv˙×}‰„[NY~$3ģr5.čdÎdŌaüÛmŦœĪŨ?ãbĨ‡…ŌÁę˙2_ŋ~Ö9ŌXÃVũō… ī,•æn@1r&ģS¨:OŌ^Ô0SēJ\Ę+ī}šYÛÁÍįvŽÉaÕPkcŠ}"sĨÃ4˛¯{Á¤ôäÖ.`ũxÅÁú†ã=ƒ’âëf'´x†8egPŨÕ(‰Î™ōT°}녎‚l‰TxŸO™G `:ŌŽ}Ųõ¤>Į´īW˙!І.(ĸÍøĘ@÷\,2Š-“tbžŦŋ×ęå@!]æÔāŦ*å/+ËhX?ú§H!¸IŠjLĪâÖ\•_33ũ8‹†U÷gŊ)–Ë <˛áožĐĮ5iđĮ@8åsŸ‚^ÆĢĶ'ŌēÉKâÉžąÉ@{ä=† Z3%gĻĩáŽpqØīínYÎUîrčoøÅ$…jģO°rmŠwkÃb˛ü5c™*+ gzå %öTȆ†ÅOCˇ4UĶÂ;†Ļoãė*§đöĶ5¤h@Eؗ]mŊū šĩßí-MõŦtÜhoųS+gģ…bĮėOeoũZ=—´6‹ü¯nŸdŌļw˜D"7Q}úYBÁđ8B Ą˜áa?|æž™ąÅ{.7ŧ|Åīą8ĄXÉ'A^ûĀ/š+ÛĨ§ķ™į5΁ãđfûķ”` ĶoŊģétŖĢWū7Mø<ĨÁ䭃¤™´im㙃8˜‹Û3ØÃ1(<;ųíˇāk Õļ“õņõwú9D;žÆ’Ÿz‡Ę™#-X 5hƒ×čo†ūǚȯ2Г°.(ÎņVņ<'Mú^Á-52ōmÔnMá ײšE’Íģ›f;$ ÂM^yųŽÍS6ą%Ô=‡Û/Ÿ}iÎXœÕaąpėG.=5&“ÛŪqD”˙$§(ÎÆ>Qļ˛Qs@YŠƒÂŊ&īCĸaĖfEŧpYŸ’üVPQą˛CWĻKȅ"ôBæĀŠhN,ûž~bęX}>¤ bĩæíRˆöë5=țĒxæî’īcFw“ŋtĒAŸ“âs•ļmVŒPU6ŊŠirŨŸT[.Ø˙r4ĸNéŗ4õ¯ŧöÉŲÃĄō‡ŠIā ū7n`×zÁøûel=ĒÌĨz1(Ļ’žįu‘ühĀnâīÅé3lPQcÃØAŽ @ÔŅ#ņeT“Ë?Ž—/vü8Jää&Č2˙CÛ.ˇM!{û¯l!Ûįūų@:sŊÔ¸Č ØˆmãüN6c˛ę¸čf|męúIŦ‹—?'ŠžŽ­įsī4˛ûĄß*vÄiž-‰į|V2,ĶmoACĨĶĻCŽ˙fŖŽīOĄp1kYؐ‘M!,XĮ9˙´›s~į‰jã‘ū;$ߚ”fSb|˜u>ŸI’hl¯ˇÁ%øå;ĖĄÚOČ.Ëq0e瞊"J}A °ä^Z3˛plnÔž,Úî^oō”ÁnÎ˙\oT­Ŧ1ȚD6Ŗ ;ېņ,÷ßĶnđ°bdyī 0Ũ7â.9G†Ā~/%y)lh•WŅ›4Šŋ›iˇ4$“r- Ֆ§“%h˛Ĩ‡qˇû6M‚õēĨDVĒĶž#wÔ¨tn„ČéNß8Ռąō™Ĩbáé'1 gk¤ŪĒku*CŨtē¸}ÁÍ­ŽEĸDiÜV`"ŧũ“xĶž}pŽ„Ŋ˛Re4•n)2íë * š0ÎOŽVÜĻuÉũŋĶi Zévŧ…Đĩ‰HŒ-Ã{t4ʗcn'ė3Âõ[—(,×§j-˛ĮGDqŠ}÷ēį>YĪ­Õ ŠmgąWUž ;†ŽČšŅ`úû,įØôjŠP3“pi4ke{žpSüœ—ÃŊˆ_ĐéÎ? dD˙5RâÎ|rövž @å‡ī×ú[4{ŽåØNëĒöäbäŊ4+ö?ˇ l@ÁįM“)ƒg-“e劆ČÖDĢĀ„˛-‡ ƒ0ŗp´ŧ+ĸļĪ@¨æ¤“-elîe8[I)X¨oPë¤PYĢ´%ĘŅ|B]KģV^~ŽÃãøŗˆ x‹WÛņūK}áĻp0ZoąđäMį­úv‡ôÛ@}ų‘ÎzŽ,SĄē‘fWÉ6~ō ŖIže e} &D"žŸ§a•AšŅļ˙s s$O@ĩļĄÎíMíyfĶōŠ—Õˆq€,ēœģÚ;ķ!tß>Ë(Hč]‹ŋŌgōkÃ@ĐāãnhSûBVŽÚ¤ĄK“å‚SZÚ𲑓3Քj­Cŋĩ ˙/–§Ŗ›vk‘ÕėvoŅ?F¯Œ…\æPwģ9;_’e+¯‰`ÎļY2ģQՓčHU\ŽŨ¨ ˆúãŠ0ŅŪIǤĮG^!žO#OúŠö‚j5l^ör‰Î¸#­jnčE8Í@6ķĐĪ>íMĸÅjÖÁÁúÁÍͤG¤H%o;[ίuáģp@Đ~fÄtĻbsHlihTŗToš5 —„Ą˜ÃhS9ÆÆ8įšRĒė7ČuäK„ėpPfŧŌ…ķs(˜õž˛+.ā($-ÖĮĻZ/`9xą$Ô+rŨû,ķ…šwÜņ@ ZÄsˆ÷ŽÎ˜MĀU=Ųô\šã“ŋxõ[“ŊvŠ6īŖ:ōzOˇ G"DY$1C–ĩDk]“MœŖÚŦœáʂ~Ŗ.ČČ(×TuņlüȁRÄū/ ņe"ā5>¨}WrHĒÂF –V_QÍz<"lˆ]ĒÄ]\*ÚĖM!NdŦe•ɨŌ3ŗˇ]2!ūęVS1Ĩ뜭ÖWö;+Ø<Æ~PŽa(YRÅÎZŽģísÛFč,žÂÍÛŖší5GuŋÂߡ~ ÎH€ËÁ‚aŧYv%Üû#AôŒ.wŊL?—ĸÂvœØƒėãhDžęāėwÄ w*2Jo>܈ršG ‹ |(L$K•°Á§`˙]B[é, :b•Ô,#Ë20°kWąNüĐŪzX4tsœ‡û§÷E§ôÁ @ļšÎ=ŸdiT1TāeĻ—›|žS=&!ŋ,ÚäÂHV~B‚I);Ęf-P­¸\¸Pm‹JôŠRû‹ŸéI› ?#^ĢKЉåŠ9ĄG^ī¤a¯U‰Ų‚Î'UŨ%NßĘĖNGå5ŅN+z]”õ]IĒå‘Īy)RWž”Ë-c™%H§öšûTīäō(ˆœį!Īv™údÅ-QÜļÔ5Œ–VHĐĘ~ō¤xĮ_ÖųĄ˜Ĩ]yNøJe›yî|Ū›ØY:čŒ``3–‰P#ęz“Í×2–ißL>– >Å:qáÎöĘh›÷ū2´œ×Ļ^ŠĀ5ĸš; sŧ[ĮÃ$}RËÆFžYŽ}æŠ4Į˛Âäxrn6lgšųvtbûđ#g‹āŋTF(ūēŠ=\TÖäVLc—2Ū==č-Å`kN(đU‘4ĶnÍŪ­"aÕGŽSA%ÄBŲ“ûo CéMŠЌĨM§ëã×~NË€×§AG4TĄ¤Ōķ'ŖbÚ§Đr‰ŌSØļņÄéąŨLŖ˙DI÷5kÛHŗV_,‰}œ’'í¤KČŠV[šá×´Š@ ÎKeo;RC ÉrĸOƒ~l›ûéPCmfņ)לž‡e1×{ģĻDPpL<üޔŗö3æ\Cų4eh8!MeųvNíŅáēĘr)3ņ&np |ōˇÕõÄE¤ÄbđUŗP}ŋdi2ë)ÄåŌ>‚Ļ,ÉM´Â@Ÿ%qī[Ņ&51ŗđ´Ū@NĩÆč=cŌš$ųēf’Öƒ‹â>h–Jޚnžō>7æ´[Æwĩ$žÚD %TJx ]õ¸då|äyíI8†ôĐŠ5U ­,-é]/bMėÅ͸˙V'ŧÃĨÛP L„ 2ãQgkųÖZWØđz}îĪR4~´1H36hę› É+væ¸ZŋB†d—’­z&ĒJë"3ÅÅ­Ÿ^Ņû3§ĢųëMU @g‹‚…9Ø:Ëx€ å–Ē?zŖ¸ˆŽ}Ä´ÁāŗÁߎi֎„ĄPbīn(jæļވĩ„‚ŽŨÖgĘŽĶÚÄĖ~š`ʡa¸…ŠĄĮēžĸ­ûUžâ†Œ’Šŋ–^Āuvuâx(k ü—!-ČŨÅ|YZŋ4qû„5„ëԞÜ%bão%~ČĶ”k#É;ßRa¤Ë.Šûy‚Ģƒ<€8ëE윟8`ôĄÉ׃Y×Î9įáîđĀ– _ōbÅycQ•EôŽ–Ē Ŗ,ƒcá4Ūą9kw‚ų–rSđÆŦ˜ũuč@`°ŠŽú å‰$÷R>äpĐ%}œSXxrÁåocÃū"2„ʧķĒąŊģŨŸÜ_Y˜t>8S1 č?i—rv“">8Ęįā ÖM[[âåŖ›‚>Yqq"~ŌŪh¯1Eˇú'daŠčāĢ…0WŽēŊ^“æ…QӏsSDķšnÎÎ*jv›Ž(ä& U+xX8í ˛e^Ú@bKhTįōdÔáqõįUÃč6ķë֑×Až^û7lúūôëÔgrTIKã•x9B[oōHŊBeÜ|–g(Ṓ2ãŽü0ȞŋɄÚ5ˆ™‹ŗWVÛGOšdd–šzûSÅũ2HÍs!Ņ–7Íī™ÚK¸VŽÕ %YÖãČF#Dwp[%æŅ´ēųzėaŲ…ŧ8Ža8iŊnMđ:õbÉ%f¨C^eúŅvˇŸ Õõˆ‰^bZlîŧLé™Aųa†Hg˛>ę­ÚũĄׯulqŗÆ4Ōōa×Ä ģŸŌ%Ѓ)Ŧ(ãĒDąˇ—še“o˜ߎėHK–´Nú°Ö#”B9nīíĢdE˝bkũĻũãĕ‰WħL.šĮ÷ĸš.ęVéõNPzŋÕ4^Į­ŽûĮŦņĖ*í".žÅˆü–„9ŧŒ)ĮâÚŖŗ@üXãŅŧ5x+1xĘa/Š.¨KÎ9Čĩ€‰Î¯*™ /Ô áæR)î3ĀyWē2ļO#w¸ļōį÷g2˙|4bwđDą¯$L¨ĘjĄĮsUŖfÛęšÃgPÃ?œÛ1\áįĶ5%U‚™VІ,üŒ=ī‚y–ķđ…a4Šrž„M XœwĻßņÌ HŽø (“ĸ=cûF˙XÚ'`ŨŒėÅ KUM'/TĨģĸ´ÉđIÆ?[G°­¯ūXīiU6Æx×s2:ČCb‚Č)"@ +Q?b|.Å4ÜW ŽN!˛‘ŗčÖ!– ”æ ˜Ũû§)W<Æb=ˇ#øĮct-2")ļŸ‹˙mî;Îđ˙4˛Ā%Ī>%ÄSk¤ūXH´aĐãĘrû…™ŅŨŏp‡BgvIņĖÚš:÷›Ų!øâ'*UnÕ&čI6ox˛–w>_Ë▓ °™SYLāČ [Ė5đ‡{ôũÜkĨÖzÖÍŧú Čũëɧd—fr^Ëz\û…wjÉ0ÂėūMČną=÷rĮ “,“îu6Ķ´‘…a8xdx¤ ?9Å0WŠĐ8˛Į%ü÷íģf"eÄ*ggœÂJp§Ĩˆ†éãdú–¸KyX[…ˆc?8‡Ŋã4 éËAîķŪŽ‰ähhäŦŗ' 4ŧu ŗ ˆ%ėõ(C#‰yÍ, HO…Öa;–âIoûC—¸‚]:Ž–ä”’Ķđ@e•ôZv Cœ- y˛We›ĘVŅŠsëHĻ3ŦŅąåųĖžĩKb }ŪG—Ü4ŧėåĻŗQ˛6… &šA(‹‘•(v\ëoŨf°ßRņąrŦa#F% 7@SŌ“Ú^¤ĩ&āÂâʃ­-Ü,„JP‰ -‘7ã@üŅĒ܂ßÔžpßöŋV`5L›„šÉĖPûFKÁ÷ÄßL|ԟņī,îģ> Hįŗļ¸ÎJ8\žXĀ㏒Cĩ-<ģSšōđĸķKTiSĐĩ¤}Dđܐn5-‰īG†BƸcIÚW°Äۇ’1í  be×=GsC RžWĢB#Ž€NĀB¤ ŪãLP.\2ÃExpîŦūzE [PVĄJ„8×w—6^%2×Ë œĩ"ȘdnŅb C œNTW`ĨÜØ¯,;Á9°¯Ķ ]?SÖE¨z¸ŲÄŖžc…RthÚdkøū÷žĖîŒ I6â|CĘIÔHJ> ÃnGƒ¸s™‚ųZņą•}ļīŌÄŊjDļĀIcŋ,ႁ‰r"pÜ´Ũũŗ ĸ….RęžÚėx7:Ô_Ë>ŗņŲläčúÕ_yhÃVbŊ§lun¯g˜Ųނގ§˙GågÁáŽÎ+|kÍŠ0*E ‚˛™>cƒŽE§æ…2ŠÅÅų2“éÔĄĐ~9N1Āôü8|UÆúō™Ē)á¸8‚M­ŦA–S xÍ-ŗõĀ‹ ŊÃM“…°BymĒɧųvR.l¨âāį•ąEĐú.ôŲ„7Đ)č#iąžP'Á%'ßičÙõéĢrqjˆ–Ts$íw92vB AÔė˛ųįINļSƒ’DcģiŌ•4߯Ųt‚Lã/ēÚ5ßsĮĘDŽÉãü×üĖ—vļđΊĪũĮd´(ˆ"¤ž@ßPŅ0˙_۝u$´ĪŖ0*ģ ĸksj?e&XÜM ŅIZ œŌ@ŦöĸŲ¸eZ)/҉´3å4@yRÂ*Ëę 6×kswžęæJŽ=ˇo‚#2ŊVÛĐŠ8ÎĢÔë. #i—[L,Râū§%0Ûąž|nÃ<Ô+ļ|˙ ŅF{‚į‚'.ÚĮqgÆF 'kE T˙ü`•ZŌŧ‘ĘOŠmjô/Ō¸I›@ŲpyÜÃ@å™áhūâ"ēZÎ/õRe‘h—°3Ēfõ–?2áHëųŗŊNÅ=wEÛ ˙zfPĮLSmą.z„J㈁‘sŲU>°RyZą\ų=ßŅH˙e6UĮÔū{Ϛĩ› .ŪĨé4u3†Öa39Ōc ’WI 6bŊŦOR>™é×ې§„íI÷4¸œ^i%Ŧ• †¯"} _g ˜B@ûi–}˙Ё\tō3ÛōרtøķÚš{fÜ->y\Å,YĨs,Tė3QöƒŠŅč×Ũ,SüŖ(FüÉ-e ų†ũ“t› 1m9cj8?ķJ'voČÆ|9ėChÃVå˛ũšƒjšvKÛĄ’ņķŠūžâđÛÍíĪŪįÁ˙d_čdBX%™€Ÿ˜Č¨r{#Ŗe‘N¨ŨFŧÉã֌ēĸZ'2ԃ¸ĨŦs ƯķG •6Ŧĩæu`ˇZîąWЧ”ZsÛËļ:L‹\v ȨA¨ÃéĶRÎÕÊâ9#Ŗ"M$~Åa.ĸZAYvhnĮž}čaØąûGŠââā 6Ž!]“Ūh Ē3¤LlĢÍmGíĨĒĸ÷wÅņ2#ôß ųîlcûtUËâc åŦ]Ūā9:*IíËúž‚Áßå=>(QáŠg:čīС€Xd fåŗ‰rärD\Ė Î07IãĪ/"{šė-Æ_fēKôßwųlēZžäFë–rßŨŠ?Vi~ãåK)ā×3Ŗ|diu.ĀāŒ1Å"\G×ųá/ëŪ/‹FV]˙Í^ĒÛ}Ī l}h“K<4íwIįŠįV§:ÉÎ|y <îä˜)Ņä̐˛ ŽŅ6ëSSsbq–ē ˆ˜—ˇī_;úßž\ņ öŧü qÕĢ….|cŊOk HqEū"Åsƒ9Ÿh9úĒAúfnƒÖŖĻÍ´ĸŗąŅ1ifJ+˛ĒéŒ`Ûŗč*:kĶPÂü"P5.›ĸ^úŊLˆJŠ9‰/K‘ä,œ–{¤üũûD'¤D&}ē‡ŲHZŗ–”f܍ŸBĘŧ;ĄĪ‘ˇ{Ģ]!Ū|Ģ^Q—I?°qļ°Ĩë >}*ä‰Ŋ+åIƒRŸ§Â@LcäPÔ9ķOË7´ Í4:ĢāQŧߒ"Ũˆ á=¤Wl0Ö Ŧ’BnÔ~V}ąö˜[ŠęˇbÁŖ !ÁíK.ž"šžđ옺r Ey >Ѥøx}ÂRB<+čšĐ(įĖČĄę$3^´NBX.€Ä„â"ŽpũÛ?(ķ —u›œ…z ƒĪS<úߟĘ+Aõy[ģ?ƒÜ”hĒKĖęôaDŅ#žœ=ĖRŋí&;™Ĩôw¸ąk(ü€ŧ´NÖ+Í7āb ÃG å))/,/Ą›Ü×° ‹ĩ‚K4Ԃąí_9ēL°{uK]øč˜ÆÎÜ>~ŋc^;ĮÕČD6_Ę-ŧv7Õ=„?Ɖsû¨fŠŽ´ŧtéCŌÛëüzˇųĖ1 ڐ‹rŠël‘OņÎnĐW.‚•p[lšk_aÅʐÁ:p™YŠØˆB2ËF6DĒÉŋ’ģŦuˆė pĒDŽn”}:„×Č ) ĄáS‡KD‚ú3švLĩËŊUį;ã Đ "žö’‰\ˇ[YöÖÍîîú¸Ŗ{Ļå\WmĖņôWÆZĩ0ŪĐ1ļ4ļĢžđž0wģQvŗü{9 ˇ‘ ôLŠ7ÅššíúģšöúÆéé¨`ĀÉē‡R,]Ú+du/:€t$aÎĮüéŲ(ŽDU˙ fQ ˙JGzS…Đā’ä&2Š ŗIRÚ}Š<úŸė|•m¨Œë5؂•ĀįŠyęȂuÛîÜšaYNôˆ0;Ę—ķô†î8Ŋ×)g4ß]Ę÷Ö˙2KÖûŋ&ą …ІH­ôt>œsō öŽ!`øGôrBr… \Ôwi '— ô‚ZåķŌi,۝7•įOônŨ¸¸våü…ÆmŨ —+%ąíÅNš­“úîžlv*ŖĒ|0Ē”b­=ëĖŌ÷6B:V`ß|ĶĀĒ­ĢŽaÁŽņ49t-q›2ášĘqÍYlƒŖ€@čũ{K%÷Ķö[ûÎZHŒlv ~%H!Ŧ?ßT•Ãĩáôhā^dšEV*ÉãĄķÜũ&ƒā{§åۀsîwčÉ& m˙#u‘Œl[Ęf ڔēĒÜȧT4Km+\ūĐ. ȔūTļ9ÁÎ9“ČŒÖĆgũŽeƒčœŧũ¯"Ŗˇ÷šŊâßķUđļm@č2Ī#QLļĶb¨ΎĶņļvÂÆeæÎ¸“ĸŌõŲÚQĒygŸõō_&Ģ—ŗ{mqo. -Ŧö|ˇ<Ųú]6ÃĖᎠ59ōī1øƒVi{ߝęku)f{5äûžũŽũÎă6ü犧ĖCōdˇãlVa9åÎ. `‹ÚŸšW†ķäA† ÜG5IQ -˙1°&™E7û65äŗKÖ#ũ%˜áˇĶæļnH6j?uKŸ‚dų—ŗ?VâE”+Ėõ ĄUņÔüKõ(Šōu)‰3`Ū~¤\Ģ܎žAĘ ¯Ŗ‚.(§70ƒ=úž¸pzĮcd) Gšö¸ ķ:Û*+ˇ„ÛA1’Ÿ‹%ŽŪücųYßBÁŪĐĘÜ6Ø~yãb‰ rģÉ<ΚA-ŊĪ$1ĮCx†0ü<.Pûũ&C\ø+ļŅöáDĻ5Sę"šEûZ{6­’˛›”ØÄ *û{ÂMtũûŦōû%ĀSīáĢ{^/ˆî˙WÍäĐÉX4gqsCtėâčŅ5‡SĶ1Ã˛„%ä_‚š ˆ‡)mI•ÛkĢd]b|rŧËOúī8éŅNĨCĒ‘ĄļKVz .=hëīLAIē‘ė4ÉiĩÅ")ãUs°†,‘m°ÄFÂxI;w ōŪÜ$ƒJ§!ë•ŗ§ÃáŦ‰šKÁān(ãâŖIä,°§ųģ…•×û ‚‚ —gU?„=/ũ@_VJ  ôčEö@@ĻŅÆk`āöŸŸ$_ļIb™2WĒđŅÜ Jœ§‚ģč¸{<ŽVØĻíJz¯cˇĄäĖßā’RCÔQLēėé1×MgJäÂ/ė1;_ ”h˜dhä•%îŪŲ€)& „Đ#OBōĖ…āDŠYnWĖ&íEâÁbWDUÔĻŪÃKMī 0ē˛č8¸ EÂÆ„0Ē:=W´q7%dŦ–‹ī/;˜rŅqa*öˆ”@×"YųŅVKįâJ)ĀÛŋ4ē›ģGHĪ,yí‹gšĒ‚ūĄĸxī&ß6¨§ēĪ혊ÜúĻXåųÃÆĻGĨšģ|ŽëûÍ!–‹Éq~ƒÃ´bš›I|ŠŖÛĐĨ6Ô@“‚^/KŽzģĪú_Ŋ}h 4LÖ æZ˙|íū,ėzMąY"†K9útHÔÃÁ䤤zģ;’‘ōž:ļņėîŲI9íÁ‰,Đ <ÜŪ§JBlšë¨žB+sį­š¸ Í ›C=ŗ— ũį*Ī6„¤[ũEÅĀ|č…`O1kc÷X$aö™æ¨k)†Ž$Ä\Ž‚äœū|†|Ŋ/ͰE䭈Õ8ov3k8°m͏Ŋ+ҍYęŗ~˙PŖ;yh‹ãØ ŽÆ'Ėar —1eœÂ˛*ú;ļķ=š>1#g’Á6äŖŒe,ę0 WĢĀ&+ĩu‘§ŗ4 9¯ŽáL/7ķS|fálŋÅee…¸núÉ#ˆB.`۟rÁŋŗÄå/•9”ķ!>˛…ųŠXĐëî/dŨą>Vû}R/€ĨĘč?C–žtĖdŋ^-ąÍĮįĤ0]U&Ô wL°zÂkŠ xcčĨ{oŠF>N*ü6}LīV:6ę|ÜĨZÃ9ÁĻųö„™$!Ä1›T4}×áō´ķô–8ŠÖĢÉĒN3ū‹ŒŸŗĄųŧĖxËßûų֖NyŦĨĨFɛm=šū9J¤Û{›6?ŽtæˇBÂæđ˜åÆ6ŦdOHŗXŦ%¸ņųō@ScT^E8ķkH0{] kõË´Ēåė;ÁLÆŋn+#slŠQG]a9ķÃJÛØíÃ'| ˜üŊq/õ›¯å#sáåiØÚąĀˆ\‡­ŽŅ(qVXüˆÍŠĒôâ\̓ę{žŪUXž6"JNíēŨĘ6xĢņw]0˙´^ĻEø— 4Žĩ#…$øˇčú ؐ~FQߟaîāÆjŽNg7cÔ?÷%ڈu‘Ũx¤*Á‘Õ[~ŽSũ:XŋķQ dVŅ‡ĩ˜ŖŲ-ž˙gEBbųЁĄ˜Pl˙\ XåŲ<2Ąwž~_ŖF‹^ųz tk{0))°ˇwoĻXPB#§E‡ĻĒXFVRk"÷,#Ū4ūšARAúdJĩ;"ų’˜#Л-^ˆp‰Đd(E L××t>¨'k¸°n¸mŸŪ@JŽ˙5ÜTĮЕЂˇƒŗĢnšļ•'"e8˛ā9Ô.ˆķîmŨĪ ˆųĸy:ë͔đĩÕōˆ‡‡…š(MVčVųaōæžŖ‚l`ėËa>VjT›š ǧäĒ;k đĪbļ’ßLЧŋ— Å Ą˛ĒÔŖWŪ<ŊgéVåûƒßaK¨××Ķ`æ#Éĩ´ČûąÎ¨įŌĘÚ$’ŋ´q]vēbž síDqZˇĸĐĀ3Aĩ&ėū'ŗ4ëéķÕ)ĢáŨęņʉøēú,Ɗĩ į1SåŽˇ@gĩ ɑI2(‚…-%â * ŧ Č"ō äô˛QšŗZvÔoŋ‰6Ų–aÚY,ĸŨ9™Ø=LŊ6‹Ķr5ÉÁpo+). EŠÁ~Õr¤ĘŦiėæÂzÎ: åĨ,yŪŅĐą˙G´ĮJ/ôā4@ōŅfØmŗyNĐā*]hSɕ?ÄR;Ĩ™ĄjĀ0˜ÜOm`dHŽŌÅgųĒĮ<ĘŌ÷Ž1$t@xIFzŌ4ās("§Æ8N~Ļ6ÆGBĐĮiŲ9Sp°Äģ]¸ē …3oqHi“Š$[ĮК†ļ‘ŌہGÖbšøí÷5ôƒ`Ãĸ(3ō‹xĀ%â‚éYéÜBBë;Õä)ˆƒÂWFŦ?ŠĒ9à ĢîŗĶ úÄ/ŽM˙7ŗeĘZA|ę’QI¨'w$IĄ÷VôÛK’„ú:6ģD|~sŋĖ€W.jQ pÔü%uyyî>v–¨į˙Aöpâ`(÷Z A{]ŽâD]R^Müɡ+“&#Ī HĮ˜Y<#”év Eåâ4*ĪWoD@Ķ“Ģn:4˜ŋŧāĘËĄägöŊųūÛYdĻüÄ!öĒj™Y{Ü$…§”RÔņÆ5™~KNž—kxb9Ą0ņ_dšĶCŽn–…‡(¯8Ų2nv˜ZoâßŸQđČôu}ŋ”BqŸž¸+Įtĸōũ:īÆp"õënw"mŠ]G…ēŲīö"'æ 2í6éš Q˜E6øō%[ŋŨėBO{[QV> Ą°Ķ¸gŽdvjEåuézgtqeŲbŸ)ąÛŪh}"SoŸ&‘ā˜¤5ĐH\ÃDŎ9?4†Ų‘8ĸčüđ&*MŊūvXŪ‡ö…2’ōˇöŸŽĪ4”'ÜĪˆÉŋŨ gų’¸€ŗã¯ß&7Š0(=a-|c[ĢQ×S ,Ø ÁŒÖėEs.lĐd8—%īF?Ļ­kŪ–Ŗ•ÃW>$ŲP‘Aņˆ†į÷8‘ŋôëpĨĢ~É:Ûŋã~CW ûũ´§ôú”ŅT¸,ö” ¯ĢŪS`də’¸ŸÍNŒ2đxŪ^ .ĸH†[C ™rËîČIôU F‚9Úŋ„•ڏmWæz˜•܇Ô,ē#ģ €s0ƒˆ—&čg¤„áZ!–sæøÄĐˀâC*H´ĒIxÜēŪHģ–äFŗŸCЎøĮĩ×höU˜,°@Uû|ß}=åŽm¯ūæŽT߲éáDķ{7Ė”Č'Á"YHĮ>#šÎŗMšĮĢšÉž0ā˜ÂRĮvjįŗRėvęHÕÁIvž C{˜Įˇ˜&ˇEŽLÚ^^M0UkaâA×îŨbŽ €€ /cĻÄDą’ČÎĨ3˙dė™á Îĩq{ČÄUH'öŖčŲ ž‰'ĄõšrãŨpˇ™Ûŗ5ŲiR€ËQÖÍb2K'‚%ŸēęÖ}.˜šŽ`ƒ8/ëųĻ@÷ʐą¨˜Íą*ąâÅGb-Pu¸üP['tfŒĐÔHÆoUt ™€v&†H¤tøLhZÛ ÷?Ē›*WķD’u+`ũ<Ž] (,99áEԑbb†zˆ˜2Ŋ<ĐųL…Ü|Ęq¤‘Šúd&i‰üĒŠŊĄL?.Íh!3ąhf¯L,I;nˆĖœâäp‘‰—ĐĀąSķ`Ѝų=ģļRt Ķä•ÕTJmšŸÁĸáŽRn“Û0 ¸I {[`OŨo¯ŠŦˆ˙N€=PšAŲķž<:ö:ĢžÍŪŽkŊąļW&TÜŽ&%æ] üÛ?ö@…ûyŨY&Gâ9]]dˉqmÖįJAÔ.öOÄj"Ö>15‰b7C6—BÔTmō9,ēŋB€ĶâĪû-ÉņK1’‚Ņõĩ‰æéĸú;l?€°˙œÕ[ëĢĘēė/>És āĪ\Ā×Qqĩ•¸`U@ŗ(į ĖKĀ([\‰Š ķËX>´´÷=ųÜIe¤‰ČįÖSŽjx>1Ü ēLb%o‡§Ĩ$gŪęņüfŲŽ.ž.ŗ™Ū?đĩŧ@ÃåĨ×Îy;˛Îj°Ķv÷rĀNØĸdc€\í͇į€Ĩ+đܐˇKã#Îų/wD>?T„Ķ•V ŲotÖæŦ˜Čão۔ ‹Ģd?\)€Ī˛iâS¯k‡|› ŦŠW}~xWmšđ‡čeķxÉë­ Øŗë~æ)eûāŽjFáˇábVĻ;H0j[N`c˜ČIˇj`Ī×Í+žžÍ2ŅÁœ ”ĻŦŊKc_ø›Úī˙w5Ū;ˆū§ ˇŋŗ´ _&Ԝ'Ĩ‰Š…M™š]¤ęĶjąøačņ2–Ώũʏ!/ i{*R)žîޏ„°0,&ĸģęgķ Îr¸ÍCŗy$Ž"ĄbŲ‰W}}ņqšÂžBRxIōRŠøæ2õ*Иų'T8›šcč<9AĘVÄ:ŸßÁčŽ ž7XÚŅėYl87ŧΈŸ‘į#A§6ŧ"IŖ ’/dÛÂO’ž””A8¸z8ãhęŋĶd|E$Ŗ^šJŗ~’đDdįˆ&/z¯ŪČĘ =Ŗ™ ą2蝸שž‚g;gę,占ę”6’¤ŗŠČYŌęÜJŖ—ąši0‹ ŲA”K“ŧÍ F=čB BÉĢAr„+hGŽfT¸`$Å/ϰÎ?1É:`ˆ—ˆĖŠUü”ZĄģé=€Yʂ˛/ÖTĐԛô}ĩØŌčĪ; „Ņd!Î[…1$l#âˆK-”ŒÃjƒŠs‚uh_;k„ôč"Å4Νßq§ģ{u›V$Twũ)x Ė×ʉøLŖ“ŦĐ?PânRyž7ą;™ŒĪRnī0K÷Ī–É’U[…_3"Ō+Ė~1B:Ēø,ŧŽâ•NŒŒ*|É*š¯Ä—p'oĮ܁tƒúŗ.EŊŅSģ+U–ˆwĮ¸Ë‘Ōp‚ŪųÅÉN:Hí´ˆō&͒ŧ‹6 "Š}@…TM‚•z¤:ģNŧ™-NFņDķÃ_BÚx)ą&‚éohŨ?-°Ew͍Qaž eāAj¤Xcü×Õ;˙tuĄ÷47$ !NāyžVšˆĨSáŲĖŠT­ÕF)Ļ]žŗîqAâŽņYô*ā„r‰ŊõgˇéūGŪ÷aĸŠ8˜E#•L)Ã˙ TÛæöTņ B \^ŪeĨi=šũo43¸ßÃą z|"žIbęfĄ=Y;]Ûģ(~úqCáônĪÕAč.ûu‡đŊ˜ŽĖ'ūVeÕë#ųOȞ:Ŗī3éxk:ĩŪ@ɒK eÂQ: 'ø:ˊ'žĢŦĀ;gŲ+‘÷øŒnŦå~e…éƒFËį[-Ą˜3ŗ\˜Î2ę \Ėí°ŅÄVl?‰üz¨ŪS9Š1j+îÕ߆|ķH”bC†$@5ūú}V´ †Î @öUÅŧ‡š6eÛF cHŨũž÷WÃK›ÄéVĘålŒÚ×ęōiŽÖæKđķcđ$|(Ø;Ęåøzˇ0ôw9ž)Ĩ,=÷ÖäqŽ'Îß9Ū[á9™ ,˛öbX@RPûû.Œœä^æˆSg$ÅÚÍX8ēoNōn6CžŒPGŽeKcîĐßIėˆļcčŗ‚6cl”ĄúaĄbŌcXŪʀ’.НÂ:+šĻ~CŸ…Sč‰ ø 6MhUfk<_!==’H4yGÄJŌÔĘøā˙}”ĮŽĘÔĄžT}UĄpe]´Ėm-<—ĩî8ŽųžŠŅŌ¯Í¤=ŅtSZ‘WáŦÆ*mĢã2"ŊYëûģõƧ~—.ųíĶ´˛DJö8˜~=™“Ôe8{‘v Z§^Š?$b—öǟ¸āÃÄ­Ž”¨˜^”k6\ž}_î'M›äŠ”æĒ/ lr^Wuw Ž0fôĄâŌoō‡V YŊMĩ¸aaE÷)@ų$žųŠŠ°pč„âg#6ÍŊ< ° ŨJqŌGO)'O=°äģīôb˛Žg›ŨoŽž°ãoĀ˙H“Šđ:mé'2ÚéėąîķÔ녱Ōę‡)–|ŦĩcŦĐ(Û_…ņĩ] ēl’oŽ‹šYbgLxÉ;ö~”đ/ßq˜=°lŽgŊå›ÎĶ ÄŨ“šˇŋ—SI/ˇÕČÕÅīöWÜšúʧ[yƀŦqĐ [9ŗŒ0ņđâ ËķzõĘW”xë]5Č8€&žü¨_2`‹JZqīœÄÍ Tm‰ãj-é Ä/C€kn˛€n˖NÃLvģ†GĘĶtDÚwõí_RŒK!ĀĨ§˙;¤qĀV˙6 |Rw‚á\QXī¤،žOgē…[Œ<÷¸Ÿ€eņŠ3ŠˇĀžŧb^ũô͜C$\ŽfÂZ&Ą]K0­ÚĘ_‡ųjžYŌ4ÍüV4e0ÆdÚh{MÂvWBÕĀ@uÃå'ÔҞCCfÔqC Y$čûHˆT”’Ž6,´~[vVĩSõ5”ūÛGüt7÷%Aq¤Tk9áW\$Cã̞ņÎėA Ę Žíî9éįRĸøöŲĘÎĮ^Sĩëx˛đÕųæqI÷%ÃYĒĻM™ŠųÖŲSĸgķAlJĨįl5ļ¤Ĩäå’o@ZĒnĄąœ‡4–ząDÄõą]&°Ü‚ |š)ÉÆ+mRh]Ī“^Z€åŠļ:•}ôšV‡-ßÚÆÁs:}u­˛L Bßd)K´Đņē{rQƒ˙2#k}„_ˆļ>GWīĨ˛?wy‘ žG .ĸoD$čO\n Ih“¤4ö*ÃFÙã,šŧR›øúa 7ÔQ–û˙!tD¨/¨šEæŖP‘tIIî÷Öĩ‚ˇ“¸i÷`˙8ē-ŧŠDtøŽ„ƒgöøF$+sEČE'•\ˆ— Ųé¸˙ÎökŰwėŸ%™‡Ö‡…Ę¸Û¨E„Č?žõ™iW$lKdũGø“pœp€™.3†Y/š­dR‡'DäĻ˙[ãzH'°ôjnÔ°žV?Ÿ@kbTŸ“5}IĮëļš¯A3:‹D~ˇ#•õ&ķÄhuÕpIk}\JtŠo){Q¨ƒÉ”~‡KßhãĀׁŪ‰‡6Ë×ĸ¸qôŸM3Õô,YTZÉ됑sÎLŌßd"­g‡ˇQŽ'žr}֖dĻö´ Č+’“)–6‡īn¨.ūÚN^Y§VæY†ĀYķXë"pjQˆ‡^Ēöە˙'O"IJģP° mĶ{Ąo¸AŗŨD¨ąO(;„÷šTRžôĮ#õƇK{"˛F7 t4ŽMŧę­m'įđXiG¤U˙GŨ“ņbŲ\¨Ą8ÎÃ3öt,ĒĢŲ”ÂE‡^õ_GņUôŧœ?ëg€Dč­Ëö‡ũĶéÛ]Τֈ3¨0ģ šlt2+Á;LL“žÆŖå-Âã.G0AįŠŦņʎÅ$Ŋ¯,0ŨÚ[BWPäXAH­ôâ\!ŠĪÄŧFĘ:jqU\N5§ũ‚8ŋ‰f× ŖĒ°˜ŸŽĸ Š•?_?;!Ļ‘ļmgœdMŋ sOČ'āĐøĖWgl-RĨ0…ĢĘ* Õ™Ĩ'Zė“ ƒÁķ2n&•÷—8ž/oMü ÷ĸĶCäŊ¨1+ΠØáŲ'“ē\•BR_Į…Č5‰Z­áOߔĪõ ¯č(Ā˙ Š•{ĩëiÃEFėššą8ļ†āXĨ?=•ņ1Ei{`ėĪ8ÉTo(‰ŠQŋhĶ„‚p饘˜=­į]“Ų-/œtö“ŲO@oōw’ĘÜŪq0ˆl“Ą‡^]Šû˙x,|XģqÁ☠SŋĐ:āä3T…uĩ>‰ eSåŠo—z‹ĮĒ+ÂÉkˇķƒ˛âîP[u§\Ū|üęk \”´.9WÍĄ°ĻŋĨt‰Wx˙Q#2đŸšcEânxQië,ĀŧPųĻKŪø0ęēųî,<ūåT:clU~ŨķNŲ61xF/ßđ[ä1uŗŠËb^/š~MËįĸ¸”ķü/Sæ Jî˜?]–ŧëkcƒ÷rŽ-ƒ{ķ+Ä—P^ŋlŦ*wöĮC¨íOŊ^ēŋŌ›žAeŅ[Bl]-ޤΉĸē•jibĘÜęĘĐeJáqgn§ĸ´R”ū†ķŊāĢMSOUsžęK¤‹vødį=ŠĨoŗ8&¨ũ1‘"CĒNETKúm:jĻĀ8&)đĐĘËöG v Wģß~QāņŸ{UÕ5ßg f|MÛRú“ץ˛§—Îë,… ÄąVļöĩ8ՖŅĩ-Ø,F RĸčGÆnÃȨ´˛ŋƒÔAÛ?‡,‰đ)P')ܯ•–Ÿ>)ŗugą#ãC1/Â,? Ĩ^øq6ŊYqĖ“Ÿ\ŠˆŽįøôǧ}FŠ÷ŪŠ(ĖöåšÕUôŪ¯@õyû(BĄtŖ]&&Y[ƒ¤ˇ.S?o‰ælæ9ŽļDĀR„˜„ž+ūhvOoQÍ— ÄëÎö âwŨCƒ/Ķ\ĸ(v(]ū¸ĀNO ŋŋY‘ß!Á,ętAŽĢʑ—\Čō ´†6ĨĪļĸčĨK‘Īƒƒ°@[ŧg!‰Öˇõ<ė‰ļ:6}Ũ(F¸NjÃdčŋ¤oŠ™s˙F°¨œ{ÎũT­‡­jĮs-2Hî.éESa_ņ34DÁ ßTĢĀėbšåmņ:ŸÂž×“PŠœ­ģōÜ,úđ{LT‰ÔĶv#Ŧ˙o׸÷zė ŠƒĖ“ C‚Éhh—ođ´āË1ĪDß˙nŊ—TYÉ4î:Ô°x#…ŨÆ:š#‰w(’(0^CŠs(õõ&‰^…â!ö•Ū6DĐÄ(UHD1 âać—Ęíu’yjšķûXÉü>ŊžĨÜÜYF|Ū”$|FÜ1ŪwfˇĒzķĒŊ*WÄ&IŦ0l~U¯UEĸaûg܏™ķŦQÆÜžĐĶr)M@q*ũvÄē¤ŪŦęiXrķīųÎIk[aļõâÉļË3Voŗwk°ĒŋŋŦ‘Gēũåũđ÷ôÎØáx6kLôW™Ļë{ÃŊ~QžāL؂ —´+0ŋ‚Oy¯úIzĖĨëŨ˙QâA~Ŗtëę~œ—”>GĘ*:īd–GčSUäčÕī’Äø2ŗ<ÄøēRä‚1ē&’ōž!­Ū¤dˇ4öŖ=›g‚Ô„F‘ÃMŌÕ(c€œb;LŖÖŒd8ĩ\ŅËėŨË Ø(‘QēŪxYâGŖCĶļ-í&ę6Ͳi#•Bfgĩoæ$ ŧ1œõFzŧV&6Āģ•Ēˆ„8›~ĸ[”ēk¤×K{T{šēwh,€îųÅ´Ÿ ­öŧęÛŗĻy…Ѝ0ô‚ n—Wė~ތüLí˛†Nëĩ<×q“—Žy‡ëWD\—Ā Č­ūžOË4Ošeˇ2%‡‘Š7!˙kЕ]HJYfHĮXÁ˜qŨøČâĨbųč_I¯#T0dKZņ PĘ?Eųáöüņđ0•‘Û™>'Ęn=Ą]æh]o~üuƒe`ŪPa3uĨ;đx‹f€Øļ+›ũ>Ōiޞõįjčá&‰ˇBS45ĮWãˇ0Né´ûũĮķ,C˜mCõ2@° :Åą„āÔ{Bƒ´skÎPŪÛŠŒzƒ‚œÕ°–ĸlZZ‚Á’^g›k6lb4?ÚLOÚFr°„ëĨ~ņää^‚\áØfJÂÄw':)įCÖCÆurņa”IļpōėœK &ŲÁ!-?Ėų–Ņß>›I[cĄ°l ÍÁŗÚáq=ĢˆHíĮyŦ„¤:Ō9âT>0KōģéėĀŲĘŅ^&Įšį!–wÉ]^ ×U‘íŨ~áŖĶS9âĸlųČĶP×át™¤;ĐæøČyČ`ąbu3ļŦۍŒÅ~–FШ–…îØķŨ÷D¯[ėDŗ„ąå]MËdKeä/lŋtībŪ,)Î~šúA×^×#ņöŽ[¸8H;ĢÖMé#ĒäSĮCĶ$_ ĩ@Á×ĸĢx¤eģMÖ7]ÎĒG%™9*ö–Č~ˇ ‹šD.ú;ĒÔ0–ũ%ė€[ÂҤ;^Į§˙eu6ēTg&ô˛K˜—|U4n°Ei˙k~+.xi„Qŧ| ų7ŊC_aČÈnSM2ÜAØ3â mč÷#¨UUčDĄĀéøÖĪčM”"Wwŧ: ÍššŠ’ĒkVš¯K{“†)iĖĄĖë˙yɟ ˛ņŖÔ§ƒáĀŪ–o•&¨]ų_UWĩŸ˛ČkJŪüÅ!‘ĀņúzžYËEv¤¨Ņ nĩ˛Ŧ§sūštŌՖœKįĩ['ƒqʼn)IÁÕäØČ‚‚]čʄŲ1ž˛–“đi]54Q“Âņø:]iŖ õđ”ėPTē‚ <vG ¨Ļާ3ŧé˜3´îĪB N€Ģā!€÷ōZk9ˇēĻgƒųb% {OX>ĪI-9ļXĨ Ŧâ@c™į%‘ˇĪ—.Ė :OPɈã!Ö#JŸ˙ä?ŽT`W¸ģD.^•0c”ŸĪŠēŨ˜”ČAyî7éŪ8‡%fÔĘ$ž–ßņö^"Še1í¤ â ë/ōŸ´[YÆĶãr:9æ—,šj†cTW‰Ã­gb}MâUgŋč™ėŋváWęöņÆģŌbņSŽgö˜ŊbfjFå‰oAŧ&”VNô‡Px›ŧ”vPsX`OhW°'+-ī§Ô?ĒîžlšņĐļû÷Öū´ōÍC[ĩ›ø4ŠÜ—8(Í(č-cĐÜJĸ€Ōœ°dŧWa,)Ņ 9áąU3ü~Ösļ ‰ī–B2øf <“ŌįĐ0&Î9ČyŽÆĖøWšš!ļ§Š×ål¨—ķ‹mxEÉ>ŋx$5Ōˇ4ˆ:ŨĪdá\–Ŧîēoŋ&Z:™oߚ÷2p_cĪûŗ§Éˇ.ŽŪ,žˆV _ÄȋĮáåŠÕÄâ‹Ā?Ž‹wĖ鐐ĢŊQøî…ė…ÅeīéëķÎļzųĮO+–˛Ņ3lEL(Ž4§}‡ mėļēgŊM¨KÛØüå„ÛgS†ŅŠųá&V|$έ9FĘęeŠŠh%æ\īšŪ>ēžˇßUõkxžēĩļlLDō™öhû4Y $”zy*qdi!ˇVųš< Ãv˛xK,GWšmßâFŗ˙'Ä ĩ>IY: Aži‰&ŦŠ)ėš …Õ§xžtԌ¯ˇ,”9ĩ‘´TŌ¤î÷ƓŅēfz|Ėåŧš?}kDb"dxm7f¤Čų–öaHšQŗíáKáœ1îņ­€ņY#ô­ƒ˜øiÅ9sw.\t~(]RÆv63Sl~ÃĖSēŲŪ}¤ŗTjNKH/5‹ųõ‘¨Õįģ€Įđ€w)éú¨ķ‘fēėqš{ŖFAļ”;7Č1G˜wOsƒ‘@i $[q|'I•S˙?Ņ›IķņlI¸´Ŋ]Nü>›×*ÔҌK7ųNĩĪŧę§r 6Ãí@˃Ë[2 ^Á•,ŒčíiuØ]Uė ÃíĘĻUONõzâE SŊëyŅ37ßח0ÆĪÖjKŒĻBäæ$XOvHŽ\ÍUũ`Ö4[9†wĐ $Ųë_i~xęōėÄrĄ\Č7Öx_Ũžŋ1Aųō ;„Ę(ŅĘ÷ 믏Cœ‘ĸvs¨¯ëŌh‹>MŌlÜ[Š æ S‡ D › ]§QryНę;ílfÄO灊“õ*V]Î(Ņ §žC ٖ:foqkJ8ÎîČ´ī=¯É-ŧĸ =kÎ?\Ē—$4ŧw+‹,`ŖĢŋũ Ų#GĐpGÍŠU“û˛į6įŸ‹}VÜRéjĐS1p}úҟŸ-Åc1_VpôȔ.ō†ˆ=ŠĒŸOú—,L%-fUėváZsÁŪņhŌĐ Ī/T+ļ RPĖuŅ=Œâ~žÉõņęÃĩöLžcvĢxŧį8ũöTš’C Ōü8L”÷!ņŨ‹CáŨ_xĖ^B_sË˙|ˆAã䒯Čô–ˆ´}IœâŅwÆ4Ēāc3 W‰(Dˁ'|lRvö&,!V:[Ŧut^ĢÆrŽöŦCŪ5=;™+¯ Õyō˜æÕPP¤_˙~ŧSŌåøb/DŲ¨­-I"ōâēŅ|‘ŠRõå;uMœ˙7TOčõtL´YŽvú™§TņŖv—­Ž1Ųå%’ĩĩCeĨqb>#Ž…bŲˁĀęÁzG¤2$)Ŋ×Pæ[Č)Œˇ ƒĶ}/]2į]ŅÃ4­îéxĐ"üT¤yˆĩ*ũÂR~ZÁ‹Ģ|a3†ĪØ,†Û¤Ú~'^Lk˃à ēIR§(- š?<°áĢvÍōÃ1ķLÅ=$úėīÕ1Ą7€øHCW:0õ (`pŠ/ėV:ĀEx†ę†;ϰ$}ö&Å Ē‹CõĐ ŗZ4ë­ZN”wGäķVaÂ~W;uąo¨ŋ¨Œöė%Į2~wߨ \íŗ?čĨĢĮ@%š!oŠĄNÂOpŨ=`b׌<‡Å!VŽķâŲļq ŌϞŒ˙˙˙˙˙˙˙˙˙˙üÕ'˙Ŧ0 Ú}@  Ú}ߊ5ÅöCŊM\™Ûvž_= ˇF(–’ųŌí|āĢ%˛ĸĻ 7™žs1"Ú˙‚•yU3€ŊĀîėF˙4 )t5ĐaąÚÎ?̊öŽ•}OÅ- –Č­°œÎ¨Û€B0§OÕMŨ>WĪHe×ŅĘĒöÛû–Šu樈ÛõõĪÃņ HÃ÷Ō§cp\äÁūĩMk?Ų*ČÄÖV§ĪĩÁ|xžËt÷/QÆŠúņYīJL7Ŗ4'ÁWļRüĐŖãŧi“Ge6#÷o{ܞˆ ’õíÔĮR\2Ņd‡Î‰Đķw05FõRžu0ūE;ŧŠ˙3¨yņˆ*Õą¯ˇšĶâZ ÕŗËūŧ #Ä]&uãļāÖYŲp#žė0!lDN%kÔs5ˆŸëX¤Ōģĩa§mm9…ŠLŦƒU—Ÿ§´´2*ķģ9ˆ˛n[ˇi%ų…ķOã}ō1\“j~F‚SöjÝxĪsŠ?ų+¯=LŸá 9Ķ} ץÂĸiĮgâãŠö(,°€ŠNüךÚn°}ũføX ŧļ밈F’Y‡Ö›÷oÂŦŲ'fBKϊ"fž´2dāØׂĶ߀ 明ˆ^žŌМŦĖ qwSätú¸ēFÛˇ8"ČĨffpĨ/ €Ę‹Á Ģ˜Å‘27t`ĸ›˙dÖ_ĸvįŒjzķĩ•ũ¤Ā į¨ņ­@4!žYÚ@ĩú?š–"ƒpÎIZ…¯i=(‘8YL‹ b§DŽRęj“Zĩ´EĒZ(_Zrˇ6ƒŪ˜Íęãc%fĐfųsåĀũLĨ0üsũōË~Ē5[Äu_&ĸßķęŲ–ÚjãA™_Ĩ„_˙Ŧ endstream endobj 5 0 obj <>>>/MediaBox[0 0 840.96 1189.2]/CropBox[15.5964 346.995 636.852 1177.5]/Rotate 0/Parent 2 0 R>> endobj 6 0 obj <> stream H‰Áą€@ĀVށGxŽrCk0ūqė?q÷CQĨN#R”Ėb`´ôš:ĩaV-ļ<Í”n/b¸„rFN<Įĩį‹ŋ¯K endstream endobj 7 0 obj <> stream ŊŲ˙ũ˙ūūū§§”kwÃ.Ÿ!Eæ‡×$ȏĖ[ŋÎRš9üČĀÛö€/zFëå8Žĩ1Tt5dŽCÆeÎđöėøĄ˛˙=ZnY ũÃ2<CšXžNņƒ îUĈzŅŦ z5s騗Æ'ĒS;~†yķˇnKU¯ Øâsų›ZŲ-°ök\JEs‡åĢážËå žģBėĻęS ąâåŨģOŲČXĶ"éÄŪ7Ÿ\čųëĖ n™Ž‚ã>ū%Š_\ŦSQ?QÖ;„Ë !Ö^Ū•†’:~ô7mē‡ÂŲHđ­bŋOĘNĘÁ¤k‘ŠÆpĐ{cėPē-QCņqŧ÷:*ĀKĖÎë'L§kt ĸˇōg?˜u•˜¸|Š´dķŽûD†Aļ=&Rļ)ĶÅÁûÛtŖĶŗOĀãĐĶKqí˙z2$ũi2 Īi GžĘ[íRc` 3~/!ƒ’Ôs9YFeĄ?ĨŖˇ™ãõdíLQ¤UĒĤ̌ÜĮ‚˜ž‹õ7K*Ļ¤Ë¯­0ģdš?­"fzÅMÖ ø1MÆ"ƒÁķĪĀŅtßáãķ3öëēVl™ōŊō!ÖSŨ ΃Ŋ€ Ö”Å.q’Ņ:Q¯ßëėĐeíĻÜ_jĐļ]4ɞn‚z@HPŒƒjČĨÁ9'×0Y ¸”@¤‚QC{"Ķßڏ˜Q{˜AzôI4ųzË#úņŌ=ąb4ŊŒĪĘ^rB.Ķ ęP!üO¨jœV`„ŦŖL æ\Sũ, ŅīÁZRĮáš]0§JáĐhĢļãÔ(*›û'R¯Ú8ÚÃŗĄôļŦp†‘‚=÷2ü™~Ø<CĄŊœV$CÛ;įIKļ e3NĐáäĮ@ųmc;.­Îå\+Vģ.à°đļ ĶXúHÛå;ß!N¸´$ ˆS’ˇŖ¯­ÁīDšIȡ=…í‰>éOŖ8\•/?!Î@+ĨNRx*K­¨h“ûYvi[Æ #´ŊÍžŊÁ‡Bš äŗĶĄœ#bአ­=gÜŊˇÉ…ūŸ’%ßÃWúĪú ÚhÕ4;$:9Í#ëŨO˙:‚ĸå\3ëŅĀ F$ĐhéTƒč¸.xÃĄJhÎ/` چW¤Wwpx3ŅũDĻJíq;Nëūúiąâˇ0jVtN˙ë‘Ҥuļ°jķ#„´œ¯í(De‡ŠÃ\¨žzúy#ÚíĀq |Œw ū‹\-Čm'¤eqī!DC"ãō‰^šŸžp:Ēđˇ‚ĩ‰—E§U4–úNŗJßŨ{ŅøoĐaí~Ģ=šĀۊ„b‡‘f<ˇī4Ņ5רÉĪ˙zlēĶëíúh2kļeÄęžÄ7ÂĮĄ-œPŦ%žûxQeÉŊČŧihpø`ĪÖ#>•í¯‡)CŖŒßú´ôaEšŠęåø?("ÉiáHdĨî|KəâČpa^6čŽozīNķR‚m3öƒsßw&U!ą[;É`› ĩĸšôGû§Ŧeŋé}ūÄ´/ágŊBāą{CđFŊZtŠģĀj”ŦíČėˆ=>”BˆëÖÄ]đ ÆwņŧŧdVä/@Y†úĶ—}Õ{åŧ™ĀIjöĩŨM>ÖĘôßŦ-0KM‘?x(gĪĪ’ûfDÚŧ^XRNav[*Ú;E(¯šl­¸ PmÅKIœ–TSCUqĨ­úhœ}Â1$˙¯õbØ '¤YŊÜ^ģs=Â'¸=`~'R~Fp`ŠüĮ‡]!ŦüYÔbËwßķŋë+ <"Ŧ<Ÿ5& äū™ĮQ"kuņflF@K0hžÍ‚čJš%īē#ģI¨ qrLbî‰g¸˛DΆÍ Buš}ô“xxāéŲ`D™qˆ ō˙-g­;Â÷9ļ ĶXą{(€q ?åÜzGÖīš†Yá[ËŊÎ̚3´‘  &B^ÖÅ6•LĖ Čâ} ĖmöJ…˙Lšu´DĄ |Ä=ĩ¤)oFā[ŽÆŽČpÂÉĸË8žÆD?yÃģeáe^ׯ+ėr LāËä&5ėv#0^v%•ܯt~{ēxs´˙ 3h”’jyczkĖI…Á‹âqŸ_%?§HĘąR  Ŧ:eÔ;Yد۠G{’‘ŗ÷FX =Č­ßy<%sĒÛų 'n^5ĨsIõ†  &iĪŖˇ´ŗcģjéā ėĮÕL…”ƒJõĮÚcY[RņUO›i¤ÕŪi1āņ­ē‡ÕM|Á…ÔAܤõ/OWu÷`Ír[Ÿ:™¸īhŒ!āĩƒ]ÕäLƒéEDė +‰‡ū˒¸Ā @ÎģŨ§ˇ\.EœÁĻ^j02AHŗgã΄#ÕAá׎ABLH{@b'BéĻžWIˇR–.#LĄŌā#_Ž(üĐ}ī÷đ^ƒS0bBøE89—ƒg‹*ė6ėęB0…4¤€8L .„émˇĢô+‹æÅŒN/h!Ĩ.x€˜Ų)ԎôÉÅĨJIŽÂ.Į—Đ)}gˆų‚U~Æ;„S]$Gú281@QŽ`Œ% @’Öą;Ņí0kõš)…2Ųn˜tųr$"XÜ*t€ļ„žú’%&78؉c˙%ÔKÖŧc7Â) öGž.ŋÔeäÚx–ŗ<-ÕÕŦņāĮ¨ëL^<ŒŅ('`–KiːFą?îķķ\ÖÖģ*ĨŗMņ=ķgg€×'ū”jXēR‡˜¯¨Ėü@Ø"4Õ (§Âq¯I÷möX-ĸ/‹?DUCōî<. ÎÎ5,š‰˙`ÔAH:ĢfCę4„Ņ^Ŧač įČîüÕĢôÂSáã×OÆ;íš]Ôɗ øjŖ:Qâš˙Z`zúĒũčM)röÆŦā5➕yūˇŅ'1č…S#ŨZ ƒ¯ŸŲ@ŖBŧ Ü`Ëxė>o¨ĄŪ>PsėÖī"ŖÆæÔL ũ‘ûŌŠ‚Ķ5œV  GÍ÷t\uĪqēŨ 2‚á˜G˜„í<‹”ō-˜hûŠ|ß1J÷Įęē Ē}~:;n˛KũgÃŧqi2su„/’Y4ĸfŠzäV.M˙œŨģŲXĀŽK))vFy~úf8*‘7U>tljeŲ‚7Ų—™%§Ĩ!\žÅ$NųPtk†bnNü›WąŪP#Gûü_õÛǟü臯4Ķ´xÉŨ”˙?ļY#ōN{L2=Ÿ‡7ōBK‚Đ åQ0g!]¨ŧ/]p"ƍĮ_‚ĘIûgF?§“CxEÂß˙~ų$øBŸP›* ė]9&ī åŅô§Ü@šā˜ē× ßĘLķC,Ļņ6IĮũ4Ŗß}ãĖû`ČLS¸m <Ąg8• .Ŋ šø5dƒeĀŖĩ50Ũ”lvéœÎ.Č ˙!Žåđ¸XkaʤũeU!yÅÃ'|ÄąēŽsdAqâ'yZfĻíŊ8lŦvЌ H2čhēčD÷ŋũÁ5}1wœĩ&NgÔ'¯É™Č€į9ĩX8œąo¤§ģŪõclŧŧŪម"9Sü9FMÍ(|‚RlŋĶGTPŒc"Ņ„ÕOBˆHGi['dŽĀ¸sœ´=ĘM_ÆBŌAÛđĻ´ö9GŊÖvH< ņĻõļ:0įl\ĒŨ'y¸ā• ŨP@ĐnSņS¸ :\†'$Ķø”Îö Ņ>ģøÚ‰Û´hŗĒ˛ƒ*LĻ6j̝|ĢIC7 CbŧžD i•‘ ŽĀŲÂé˙|@dÅ“7>z*Áúzb 2Lč—5žŠ$-Ģv‚Į­pÂÆœTŅũCŒ˙Gž%Kŧĸ"ōq8–ÔvÄėxDą'áŸhIČĸu„ūČ­ųcTÁĩÔęđ†hg—/úTΔJ?Oš¤tˆåãũxãjŗ!˜Ã^Ų MÊYäl>Ɵ†õÜâ@šá|âÜJ1z|fŌNäYÆũ{ūž?üňŋĄ€”ôhi[K{÷caDĸL8՝)™’%] …j´2Ų&šŨ‚°qŋlÖĨvėv~¯ą %Wwšų¤Œ–[Ģ9”DĪgmĩãŧ€Ō\tūÜ#ņ$Įo؃â´ÕĒVÁÔ-öfĒ͐ ø~gáįųu}Ž/Úņ9|ŗ˙ų´ 0„¸/ūüŖ›ĘHÚņoÉFäČ ž=K8´ 0ũ\Ž{Hü'sQ7?Uh/x´‚R1oĮ–ãáI’÷ͯËúę]’ļJŗĢˇÛéGÚ$Ģ Šį¤Ũ9™ėÁQ•`rÂĻÚ=ŧS¨+{ķ"˙o1vÜgsÄeĩ/l…< sq …\i˙Xräƒ=ņįĮÃ_•­ÉĢ(ĮũĮ&*ßë#Z€EO`ėo0A'p*Ģg֊ Ą1¤žÎ\ĩĀ~ĻkĨ‚ŲS‰Žé™jIēkB÷[ÅŽĒãZ.ĘsũrSSĮČ­{™fH0˙Rü`íD<šã_Į„Û€OÜ1'Ų€j,ä/#}€y'$į:.zgŋôIčáo%Į›ÎjG‡oû¤Z†ƒ7pŠ)$GūĻũČōéƒ$;įmxãF`3ĸ,²ëîy:;Ąz}q$§ūĸ đ§ēŗÄ-˛J4QĀ;pŧŊåjh—0/ ŗˆzé€>U‚K cKÄnÕÛRø ĒĶ"ʝUoėģ‘yÃP$ 0ÍoŊ‡ $Ķ3Å&ķ,€Ø×]ŸLČ_Op] Ĩ.1Wûg{ŋ=7‹‚ŧ?ö-ĐúT/ĮJ°}(ë~É'txšĖėájs °Ũãā.Š/zšqÖ1.ŠÕ ĨÕÄ˙$)YßԊmŪæk%ņę-Ũž€ˆ,tQ:×°–ŋ8/ū;EķÎ+/ČÁ“”G'[#cŽhËWbW´-Į kRT”ÉÖĘ<•ėöNYģ'6:ŸmIu‡ĘÁ7Ø ¸ũß?ŧН:€Āw9pŗJožÆ*]{ŒŸģdcá…@r­L¨F†AģYĢÉ ]Ώ™UÜ“mØÆË}į0oĪåČ|迌Ž˙-=|LÜ"ß*¯Û|íąąŠXĪ‹—Á2Ā–F3iŊŅDNԀÚ4/CĸKéŪō!MĘGi}%;ĐɓUšĩ;Üä ī!4ņ9jĨ*Y]LLO8•ĀgģȝĒũŋé19 Ŋ|' AŊȅD2ÚéÕf@€¨\ză۴u"Y€]Ũ™“Ņ ėČī3zŸ*H‹MõV!Wš¨§W=ŲPîŖ¤Ú°yčĘîÂČڐ|Ãc_¤rĨ/dŌÎą>HĄ?ÆŅû›`dPŅŗZ8ŸøNė.tíA‘ōŒåDÛe sĨ05{õčĪē°ŽaMvPúA *“…™œWá5ÖŁ=„°Â4Ø:ęÄ‰ȐÔķÚrÖ=Ļ1ÛŦJōū÷ ž÷+5Yj*ŸŋüøŪsdŋ¤•v9ƒúôl3Ĩcđ –ũß+•Ņ:šáy„‡ÛKB• Ē,’R"c÷¤ōRy‡"‘Ū¸Š/šs–€\d÷ŨĨ×Č ßî›Q•piņ9…˜ņ‚ĶE‹9P Ͱ’û=˛MhiĄ•r€‡‹XåŲŽˇëUI‡ss{+Ĩ’EŲķÄUtĮžtĖĨ=¨‡tײ1+ŗU —46›´lĮžƒ“ķjŠĻ…?ŦĸV˜“ēŲüĔ!–ũĒHžU"““‚øM—Ŋ ˙CʆM‰u~ÜÄôSނ¨įģųyæ7š’Ûf&€ēEP ÛÁÉ úHķĮQbŲŽ?%Ŗ0Pņzŋ+O[Đ‘~¨bFčcå5†ŋ|1]ųû—Z¸œÕ%9’c|š6‹~fÚÎŽ%I‡bY™Ä Č@N8ԚÛÍËQ?žLȇqõÍŅpM?7 žŽAXę§I”,I*6>õxé?ËĶzˆ[ū,ûŋÍË\áa6ģ S+ę\„ĢF°õĐbˇąáĐRJ¯LŸ2v…eī:Äã&-P°ĩä—7o`bíBҊ*õ5X™Hq¨, ‹ēQ…ģ´ÎŒ)œš\‚ĩĸ§#°e%ŽĮގ0ĄöůEĨ8Ģîx`O*éœ\ îŨđŠēü+Ϛ5´NúĸŒÉĄx€ĀV!Ui”æä4āæM)Õ~+T‘ÃäzÅr;— ŅÁŲ‹HƒâößOå1ķƒ)đqud€Æéæ—ančŪx|x˛=§wr¸i‘ņ¯ęÔΘ/­ú‰Î˜EžČōFũžę)ũÖJޞ‰zĖéPę1īŖ¨[ââr­-)a!!$jߖĀĒôߜ8m÷qduĐWŨלˆCôŊ˛‰TÃÚô5ķũ%`$GŽEÛëҟ˛áG] §įģ_‚ĖŠÃŊĐ!ūß~îß~IüɉÅĸ>ā!J š玄ŧ8ƒ@ꇍôĸéZã#– “$.ŗ.hØũ ˰jčŦ釡æZûCHĸ°˙FN[š˙(÷RzŲĩ˜¯6Í^5V8q94Yąė›’Ĩ°¨3_ŗųЛžû*ƒ“SXRŒž@jī•/ũÃdäPwO#w0:\ũD(:ĮsQtžY'‚9Õ wÃ~XúD9ōéčÛßÉ=,„öp´Ĩ]˛_Ž’ĘôŋņZ,N\‘˙rĮ´¯@™œēvöūD÷z(PsДˍúUīPČ-8 í@?ļxƒeßöŪLbOŗoPZŦs5€ØŪÃØBžÔ] ŊZņŽ æŒÚ–LņԀSČUŖ –ž ũmWo—ŗŪˆOrj}Æ)˙3ĩ' Ą#`.>—j†ī B‹¸õŸ˛Ŋ–fų hTĻŊ|…ČkrAĨ†€zĶ ĐŪΈ˙~/sÆÎŪ@ÅûĩbFÆ4sØ,x5\Ėúf‰ãīÛiՏ‡Ü?CpŌ‘8œtPæÔČcD43ĖĐF’õŽƒ’Č37ŲĖXiL°ô<\+íO˛C§˛ę>r•$i(g™l+}ÚĪō˜ôE¨{ķĨfčVœOiųŽ’×IbļPNВhčąkGˇ4]hÍ÷ūũT0œaĄLĪøŅÍļ8˙=ŖC„ˆžT˜æh2cŸŅ‘#ĮŽf/pz÷WÜĶv˛ })9ø€ŖÜßŪņĀ‹ˆwģĶÔûˇÕõ§š:ûõ Wv;° Ōģl?ų[Y“Wš?×Ĩ 8ÁKú  :›¯qyžcŽŅA×Ō9GT1HėZŨ{&Ę`1ž*™2ųĮß6éĮŅŽ.ĄČíŠĶvŨ*\”ēaCŪS̎Į~ûĪũíGöė@oЛ 0<™úĸ‚*‘‡ŌkØōč qÍõŒ1?Īa8ģ¤!›Õ˙sžî3GēŪB ĨpH°Ŗ¤Ŗ ã-úęWqƒ\Ō#ēŧ{ŧÚ¸Kš5¯åŽC˙~üH‰,đƒÕp_§Ē‡I˛î^JĻ;¨ķŠRZíãkœØ,:NëkyÖėÜX-üŋür‰ˇS"Ŧ˛‡Ģ⠄ģøāŖ°ŋßĮļFļ›$63VTO ž°ß8Éé͌ÅbWx@œËDSĻ{#|UįŖ4ˇū:Ģ†ÂŒQaåĻßA™vÄ„ĒËYJûǟ>ÅįB’a[%*ģLČúz úJĸĢ?š"ũ˜T>ÉĀ,ķškņx…Y›JÉé?Áx8UėJķÕĪ?ąÔPyŌLwŲųüør…Ī~Uā#ÂÉŌYŦŪIĸa°vûܝx¸1Ŋúō’Œ:ÛLj¸3g*ōœߕv>Tú'öE/CŽ *U͐Ö ¨ĒDY˛đ–ŦHžĸËa2ÎŊÎF‰-wZŲ/3 džSßēÁ,|âgé/ĩ @žĨr'V(”騃r”ĶDÂg$2 ŌOYōtkĖãÛ.ėZ‡ãŠJ¸Ųω¯ÆĖvÂblĘjĀ8ŠHaZ­Bâáūž("ˆ¨SŽÁ¯œÁ?1Û$āõi˜ŲĐúīa66.Ņjacú˙EÅp ˇĖjæöĮØ ø … Ž”¤Ũ~ !­=œÎˆ €ëp0h*lNˇ1†ģŦđēq+SZôAV攨‡ĸĩ:ÖÆu÷vŧčĻLĨ?OĻĶėîw\Ŋõ&ŗ&č)•Y Ÿ úÚŋOwíÚëWûņ˙^Bōg‰w ¯‰MŒˇmAđîå÷8 ›ēbÄŧ)ÃˇŧKšâˆ>ībÂL¨æ­ēũü} %Oh šGšƒO4nÄVãUSH¤ŅnĒeŌj.ƒĄôÜŌ$0~;fI-īw˂ öBŌPnÆ. 2TŨ—|cyfn˛)G n[čĩheÛĩŪy-0j˜nKà ÛPZ×Nĩˇ—ĮŪērRĒkr(L8„nøî„1ΉÍyõö×Ģ‘§=šj‰R°ĢĪX:ļœ[]ã˜ĶÚ1ë^kīC.écíjį>ĘOĮ‹ÍڈŠlÄ/… ˜kīČUĖYŠÆ&"•C›mūKčåŦÖû*——I.ĨëĸA€^_.¨˙Fę‹i—}Hĸ7Äxî^wæ“á?˙yÅGÕ đ)[ÕVúåļģäą"ŠHŽ‹î Ŧ/ˇĪąŗåĒ Ŗ]ú§öęø°ršÉãĩˆojœ1 Ī! $õ÷‚NRemÚ]ģJC"ÆÖu´Ž`|?Š|—Ņ^-€Ŋ?’[ęÂIņT‘siLÛËԟßö¤æđœŠ+Ģ1ŲĶā‘rŌđĸir´°uÚ õlŽ_ ‡í^ĶûzœoŨ…re,b’÷œ­Lßžl>$Ø>˜íõ߲cõ3\iTœû¨Õ ĨJ“¯c†W ų…V¸åŧ$‘6īi,"|§@^0vPäI"Åô Q^å.x—ž,ÕŨĮãhķŋ叅XPIREōxv…Ĩ †6.'ãĘũ‹;B~īÕu:›CœČ3 B|ę`ɟāÔX‘oß~Y8cļĩߡKbqZTĢŖī1Oo4:ŧZaŧ žŨ’ ØŠã ĄŸEÁéį Bcˇq›ĀFÖrÜ1Į\âĸ‹¯w%; §v^^H–!°–ģēÎ;¯ū!įl^köQ< vqĮÉš§rĨ&ŪŲadŊpsҏÜ&į“^‹¯Î­oũŅ0§ŋ6ĄĢĢČ(e+ÚīæËnõšEmķ‘uôÄvT!)4ĮĮŅivC]ō—‹ĸÎŲYƒž ÉķÚK›…U¤L‹`b˜"ŖœĀ CŖ>Ô@÷ÄąŒũ‘clĐ *ņš{Ŧ+D*Ōˇ­öGŽvf!ƒ˛b$˙S/{úØĪž)6” ŽčD?ÉĄĐOl˙ģ•÷ÁtTeo=Ņ>­„ôĮ˜ļ"yâC4Ņ㙚û‚"5ō0åú‡KC>ü°õ¯ÅĨIĒ+cm2Ž­1/¯}cJBÕĒUMęæÔî€yĩl@<]\Ņ$H[ôŋ÷.Å\4ŽĖŠŨiü}Aé d˙'@q…ĒIâTN]Ęåĸ}Ŗ‰ĐĄRBŽ.úį͕GiĨ œûééK .ĀĘ˙Iîxj*fēđT5#Â!ûtũ đoķ[ÕhÜ1hZf ÜJR-—ĩn˕¯éœƒ'6ĀÖöO2“á–m˙RdŦj-Až_cÆKÃēE™TužG×3'+´qđoz*íb$6p<tņiN'˙a‡e•Ms끜šx%(#•j§!­˙NÜũ^ˇŊįĘŪ‘ŠĶlp"gÂyĒŖc´įd,čÄc߈ŒaĄZN‘ņ—jÆē[!RúĀĻ=AōV@s{ˆŗ?ž}4 UÎ0-N,û&zŋÖ.9Ģ<›ė­…Ō¸;W´jīWØĶe@ ÆduJĮŒĖøwGFŨŊˇ¨h!—)ˇPYž1p1kŲB÷ÃRtI kEß5¯!5Ĩ.BŖ#4Ļ[k— îi–˜Zvx( Ö*š~jĨ÷ãâŠr:ēß>&ĒĖĶÍë7ĖHN>R‰Šŋ bm3CYüN-vWČÖFwPYp¨¯”]Ģ”Â¤+ƒ1Ŧøč"ÃÚū…ŊŨ‡ø7pĸ˙ā¯`ūņG7(ë‰û&8|¸Ŧ}î”dēOÂæCШpßŦÜķŖ]u¤ę™M]Zåčē홊(DÁBčU&Sn/~*€uššG(&Ĩ’— z;ÄmĩxoÛĮo%~)oÕ#Ä[bŸ`ŨˆrNrūAîzô=ËMÚž ˛5VŦ2¤‰QŠŊä:ę•ÍąČ¨ÕΉöūÚÜA‘" l¨Čųõđ+ûÁiˆvÁBõ×ņ8ŧ¤…˛ņŸĻšĐę§ÎÃírēÎRyĢŠ"Ë8kÖqĮœŌĢy‰îGd^ˇ˛K̓.Nia_Öŧz'ŧŖœĶëw59Ä×įIä÷áŨk!Īs ˇĀS ߎ°ėļ€í¯˛­Á~92žˇ˜Ąüz|Ņŋ ‚–wå¨>rŠKÔ˙ŌĮeîõ03Ņ6IænZúšaˆYOĖŠØ´=ĸuEƒ'īáŋ]zžŧ °@Ķ˙GÎY°ī…ÄÖŗžŨ¸.ã 8ļiūĩ; QÍlnÁ`û0pØ`ínõ Ö9›‡QĢ™'ĢŪ`U‰˜Đ0ēc]Î圅|kÃ>-Æ?FÛ•īWôæcÛĄsŠ{ÆŨQDĢa9ÆĻˆŒ˜īįß JF$@•gQr˛"Li.ë/OUԎ>–ëΟK Ø]/­ŠVŲM„\ū„ú”Õī.+é“(˜Š+ĪEŽ36Ē„œ]]b9|éŠGž‘“arŽ;Û"L˙:’XÃėJWŗ3¯~ņœZrî ĖH⍰-ßä‡HEļÚ|ŅęwųāZz÷NtwQ"åÉK˛Ģžō7nP:P]ĩt3€ģV?EŋR´JČj™<Ŗ´T„ÎYq4ąō_˙X‡xęūyŖŅb6ĮVwV ˆ‰*Đ aĀ0ļđ‡ōė7jXŦ&ĮÂņ$!ĨŠæ'z[˙o{yF|šSą ģcgĶ–Ö3af=IM˙Mü ļ¨ —2éŠ×ŸōĢŖÚũÁЉB}ØķÃ×ë8šsärZ×Qß æœtL…Ûfŋz Eí2Ĩô'l•ĘOU#oõkZ)0n€úͯÄå=Ú˙ūú ’Rˇū.7xļOŅ#¸p?\7“õÎÉwFÕä“ĩē—Íįg#žlVä'}āÅ3å0JŲ÷ĸ^GN}dÁâ<—‡Rz‘ú‡Ä¯ąÄɟrŸ_†ÂÚZ’hûëāÔh#GuôæU&Do— ÅâgË8ĮaĘ$åˇŒˆ÷/…Ø%XׯąÖg"íáņNN†šI4tūŦ|jÅ!°”ZbLR>>ōGZŠēL1įŖđnq e§ÅJĩâOc¤éО2Ũ€Ū/ ‘ĖYÜ\kjÎ×#´‚e9˛t| 4'[Œ°ĒŨč—ĮķÛR(`˜(”æÂüEqĀį˙~zʑČzÃ˙NôW÷"đx+/Ĩ¯ŊœZM:õ‹"Ģáŧ6Ļ•šœîü¯"Xy‡ŗ@š×äÛÄø wjq\(ē“Œø¸˙eŸÚõÁč?ãļΏuÃGÂj"ÜXĀ‘ Ž!lx{ü莁œÚ5ķ훉%¯msōÎÂËĐ\ˇÜ øėß 2ü6Č/˙vėÖđãuŊĸĻž.ņĖâåėáŖL…¤âëŠM‹ŖúãØĄģ:V ŋLņ›˜ĩUÚfúÉĮnS˛qÜŋ8PĐ}Sdt?Q%â+~ŲuáĄõˇ€eŋ˜„ňlĻ}„+,ŦĐãĶ÷úĨU/ģąÂ'Ų–Ō˙Ė•Dŧí‘ŧŅĻlüĸŨ -Ōx=Ø-3Ô`;—f‹Suâx,Ö(ߨČÍėž0ûmÄtĸVD΂AiZdRą ÆÂ¯ƒîŲQ ~Ō}„<ë.ŋÚN´Ū¸&W&õNÎæ™ßûÆ\ĩZĩ3ōn,úk,ļ@˙tjã„ã6Éļ´×Ü;ž„R¸ņĩ!Ë1ûXGāĸe{¨@”b”ĮÍLj€ļ$øŠzq#÷|I<ØŅj†,N#GIyŽ åowx i’G˛[×ī¯ũ?mąFN|dÉIdxŨ{E*j˜vŗŽáOäB$B čĢv!Ã\ōxL<,[‹j?(~ā#ÚB4—ôâzžĐäĒVčŗKŌåōž ŋ’ōˇ‚Õí€PđQSė5)^Ũ&`íŪZZQW3KržpJ0§*(šĨü8:/Āīb„ûەˆkl /ū˙|@ Ëĸĩ¸ęņ‰ŽtĩĘzËF ŠęåÔæŧkÚ'ޝN] wz_V8,%Æ §a9Ņ*?OfûЊcG,wĐ1Æ)rRLe[Ŗ@5[+õ8uŨ%Ę Ī†|eņvEŗ3ŽhJ0.Fk}`Īk“{wø;,[\SƒPCī-/l\ΰ´Ûž ûOĐEPĻąQĮ‹xČ)mŽŌũƒ6ØsëâĐä)…ĪÜUĨįŨûÄŽ$¤Ū+pŌĨâ’Ųvę—Ø3¸°7[# Ō,ŨâÄ_ŗĩ¸ąČ.ę(ƒ´ÍÍĀęŋ‰ q’CB“Ø˛›ÃFsÄEØô™‡\‚ß6ĸP~}ŽæCą1õŒÂāē“L¸yŪ8”ō€ŲH…/ß\3å•%˜WZÖÛŋË!ˇ`ŗ$čãPãžôrúmm+Uãd\ŽĀ‡‚ÔQÖsŅüˆéCžJ?"ŗXŠ(ž ą#™ČˆD¸îŲū„ę-ōÄdBˇ@-F3 vę,­Í\ €Ō5vNŪb4âŠģNlž1Úđ:}xŦ”|ĐFũ|ĨüÁ)„ŅãÆ‹åĮIāWú˜ÛåĄ‘jōåÂĒÄßŌsīŽŲ9j[ėŧÅđ"Ŗ9ˇmĖĄZƒ$–%Ų?ûVDĀ1yÜAģä‰Mš:Ũj?ŗ|ĸb=¸œ†ŧĩ9ūŽÍĨ˜”IĮ‹kõbæ­Ī%:ŧ­wØ2ŌāĨīŽ‘f9ŗčÔį<×ļŸŽäŧFGFWXN€|(f_ 3`˜ĩ@|*3å„gËY~Nįmˇdx–šŧ‘…ÜģŠ[_æöĖŠá@ņp<•˜>íšRڂS[âų˜MŸ´™ŊYŽsåŋŦŪ”ĸ¨Ņ>ŪØ¨t‚Á'   ;į#ė”b(bo;Dl:Ķ?îĜc-ÍŽ˛åEsAbļąhč׉“XûI‰ķ9ņõ^_á‚öđ$ueÜFĘ&Ѕ,ÔmÅÚÝüHhĸ´ąĮ@ĄŋāŅĻ9}DķĖÄFH㠚ÛĪ,øZr[č0Nm‡NC;7Ŧ6HÆ7e×ĒôÂŧ †@ŠlcÄn›÷Pßt>™:Ģî*…y…¤ŋąl ZčíÉvŅáĢ_öÅ.ûô8cq‰?åüčüƒëī´a6}ųO–n˛ŒĖÔŌôžŠ‰­/ŋ+ÄŊ)ָР+`yli ülģÄîÃĘôÚט4e<°Zįųųĩ;Ęz–hžÖ˙WÚÃįįs‚ ÃW‰wƄĩM=ЏWé×­šŸģˆÍxĢ×WxjœZ ŋ˜ˇ Yą€ŸąĐHbE,Qåķ\[´Ÿ; >ŦûGļõU‹„Û`NāĪâcMÂ7ŊÄũIr-›šš~@-¯„15H›ąĐ¸Ų:;jT<áz?dü^˜ŖQÜŦÎ-ĘšŪ"ÔÁ LĄįå)ģĘ+vM…X ÉûüÖ¤UA-ģĐ) C(8C0û‡į ZtîĒĸ%C˜1š°ÛtĪ ´Wņ+5ôÕÍ(m„ČRŲæ~^äd`OÄĘā'˜Mē!aî˛OŊąSúČå~ë)DōFoHvāķ“÷Ž…ĨÅŧŪŽ_āßčã,‡ƒ’åBŊ=Fī6õŊ’ũ( s‘ŦŠøuŖĸœōģøÎæíĢĮŗčįĖTūÃ_ô슪O­!Ú¤ –w҇ēŌĻÛn•aˇ:~,ËâgūŊ Ĩŧ ŌØS¤J`ŌßË#߄±KXæ7BĪY›\ūÉ\šU3ĢŦ˝Ė$ēW"ánŽÔōyV4ÛÍ íŗŽ7Ik{Nõ}ôØŖ„‡™ O)Dûöbøž9ĶŦųÅËõ!Ā4ų¸ÔoįrüŦō3„p5Xž ,-ĸķVoŠlÚĐē@ÉQÃËī`ŽMæĪk›w„{…ÄAõ Ēąį™ÖÖ̟6§ßPš!ė8:]i¨Áw˜6ŋjŸļãúĖ{í¨qĀŠ•Äšjv'æõˆQI?Lđ)ß#>‰°û}îĘļ+nÜJ´ŲŦ–4|ŋ˙i֎>?Č8:+Ģ%Ɛ rŒmcưĢSõ\¯!ËTÄ`õĶ 07sa|–I\~Ø9$f‹§)Q#ZšãKĨo˛…Räëøã#ŒTÖá<ɄÛē ´JÅŧ3 X{Ѐ}#T‡ÖÅUÅ4Iƒ.Ä“yî͉ ÅJÛØ`‘āĸž †0°—^vۅ˙:âíiâ¸šVŗúÎY ÛIũ•Â)Ü\t–>ĄQķå2}Zh9Ī„xy[Ąâ ƒÔRŒ˙JQ”Đ&:Ā÷r¸eĒ?ūQŸČ,&ļfē$jCE]2ô;]ׁ_Ęx‹āmrģon͘°ĐŠīŽKBĖ)q_]KĸįßķāSLīļ–<Âė7PL4¸$•s´ÔM°E'0 ģšĮ¨˛;ÜĪöx§%įüO–ZAÜ÷iŸˆÁNNŗÍnŧaæéÔ^;ņ]ëˆ$î'GÃÆÕ))^Ģ€S‚žKyëņëÂ#‹.†/ˆāÕŋuí}Ũ÷ĩ}ZOāĩûÉrZįuĪh_Ô!õˇôĮ¨õē{Īډ ‚Ĩ–Ŋúá$XSe;čÅT G˛É$ŖOeyzœ§ķÒ\Įøn!Yži Ęß0O“ú‚Á*8ĻG{5]’v˛ĮsŽĮš˜2VėŽm}â^‘Ŗ]s™_ĩĶų_x㊋œëÉõązŊÔ×Ļjãb‡7\\×/ē hÁmn#Š\č,Zô‹Åá2í„$~Ŋ ‚đŒ§}{ĩ‰ ¨ëÁ÷vˆzS°ÕŸA3kR#  „čԊ[aĄšÆ%ŗq"Ü8ØBģ :Ô`v6Ē_ac¯‹,Ĩ›ŪP‚Œ.ȘaãũÌÔ6=ĖæķÃz1ŽĢŽ‹Ëq8˙~IOO€õō9°ŽfĮÍĢåZāˇ44rˆū†Ū žrQ— ņÛņ´ß¤Ā=jĨBÔ1ÄŊĩcĪ áīœ ’mpäq ×ȆęÃF ĩ ņ›Ŗ )Q{hFâI‰2™7OsöWŠSå–$ßī0=¯ĐĩĒ@VkČUĪ ī||P&ąZČũ€!å~Uģō‘™Š ¸ t2õšiņޘöŒ•!Qđ|ŨĄždmĶÅBœáđŧā'š ‚[j *^ũ1ŠĮ@+0§cĐÜ)“Ÿ4RP§d–.õCf›uTĶ_īļą1ŗîŗphŖĻžôĄ€Ū+îô`Ŋ"%¸PC^›‰ĒGÚ2nVí~ĖžMŨķ`$ŒH˛Aü Eœ, l `ō@ŽŖôģhøÖ—v¸,ƒīŌ3ŦnO›bFJšŧŊ“]-§RŠ7| Ëäŋ˙įŠ4Īčö¨ø='JpÄ ũėŠāę0ā0 1<ŨUßDQEÁĨ„+dĒÁ[xđ%+€„›>V!luÜî“ōžvÕĖjĐa‰ąĻWęm3Ī*īX娉ëÍøˆÚ,§N[PAnčTßôú‡°”`§M.÷_?o‡(‚›­’ú@Wđ…OąË1ÍaõÆ9ĨSbČÎyĘgFķÖéšRtŌY$ Ķt˛WhĄŠö§áAxU†Įí'}ˇ(†Ÿy ėŗĐY>Ŗû7ÁiÛØÎ KĄ‹ŅđŪk˛'bą@ÉhŦü9ûõôŗ€‡Œk ĻÛM-ė¤7_ŧŗŒbcQ=dÜ@\Į¨öûfĩ;z čžf˙tŪM{z}į9æz!sąÁũdį/đęŠĐåvˇVēŲPäq’vwĶB˜pYŋ›˙pcšņēîĸŠĨšœkä‡éîjq6'cFŠß1ŋä)¨įxÕRĒ—ĖĮ¨(¸õüáĐrZ >z•~glŖ\Y“Y@Îķ퐔.Ú|e68đļ'ĩSAb‘oĄŠJU…D#-°î›ūiB~´Ô˜sČzG?ˆcā0ûČ[îģ”g9}Ĩi”ŪS×õۓcÔŊ˙bByΨI–Ą.@Ĩ†MčŖø „ąÄW.âŗ˙$%0hzXņ k[lĢšŸs Gģ:už˛ģBřĪÛŅķüÜã37¤…|dxÂxO ũNōKŲOÕ÷īz2˜žMû.Ũ™B[͐ˇ4rˆŨå[}mS,Ņžîd’xķ E˛ÆHDŖ\ļx›Vpx"]™š~×īk>ĪŨ{ŗšGŊā­Ķį–ßčn{°$šō7ˇ„Āŧbt}˙¯ķų`|s ¤Ų›Nų%Ŧ€ĩ4ßYĮ9šđ›6¯—†dåØ)šĸ‡ÁÁQj Ā Á1•Í–ŖĖāu’ ¤,ˆj÷åBîqĶųŦ,Ōˇģē킆ÛKŒ™×=ŖË|RK ę4*æõ›dæ˛Â‚W_|)âÖjVü¸Á^qrŊjW*ōV˙^“Ã@.ŠZvŗqÁ[c.5ú¸_–+… 3ŠSŗŖ¸”1v#Ũ§ŊÍŽpÁ´ Á@;tLŠa|q”EėÄ mŒßØė:Möą1ךįâ2ƒā™ßČŧlŖŠ(ۗī -_{õã3 °Įú< Dy Ƒ7[-Õ\íg“d˙(:S˙E•ŨVåōĘGô-8j”˛{Žŗ ‰hJÛĄåú&õ.+Ų*5åđlÄjg4c­Ÿ-6øŦūē›.ëō‡ĩ†Ëꆇ=Ķ@†s„ĶŅēÖ YQhæĨ§§S˜Ex!ņyK|Ø˙+˜z6Úđ Œ'Ôķ~;€\ä‘ábköŲŠ uXR6i]°ˆ‡šŠ;E†cĮÛÂĸįîģĀë’÷ëÆP¨c~#Ųä‡ā0BĮ’-„ąíŠa—° ĒrũCņ:?÷¸ÄgĢ)ŒĨ¯œĻíˇZöBš ņũæĮ#+ĶJVT\N–S“O]_,@6ĻĶ&î SĩS,Ûʑ„Ōî{Ŧã‹: Ú:@Đn<ģW¸@QĖ‘‹Øįú6a?{ã"įĄäËž ˇŗ™?ôeg;rˆ6U’8Ø6’_͞öũ¤ÕŪOųd'đ˜§˜}8ķŠ>7ˇ(>ŧ9azõ)aôķ%bifæožģ@8Î)úuĪ=€0_nÜčVšFk#{ĒĨYTK("ņ˛.F‡%ü8]ûÛ¸[ YA™tæsätŠÆiPãD˙MÁJÛ-Ģą Õø/éä âPN|(˛ûŗÜË>N7tĩšQ&’Ū,J‰2{HļÖ`Í^9G_1ÖÅĮKꞟ֊i4­€čnÉĘ6đ<€öx'ŒV‹.ō_Íž{Œ$Ŋ”ZG¯ņÕĢ ø¯ÚBQÅÂØŠމˆĘzHÖnúÆŨNTę™ĸ9bv >÷‚|ÖyīXz9@áāÄ ļ˙M´-Úí  ė"ŗ‰ž&)¨ĮzęOwE2øœĄ~ƒCæŌ8ž.!4”nŋ°÷øˆ! J)!g—ôKezūšXƒŠf—Ämfΰ­5faĘŖõå‚åĒ‘ X$* In­ėėžiß!ĘW „ z”]=}š2íųX1•ķ‡Š7h¸tAq™Z2ÆSŧdœđa]É Ļ 8vY‘ą ’š˙}Š˜\P˜C]‰˙ĒĒ‹đÆ3ĨŊū6|‡46ĸAč}i Ĩ^ĒaHT9v}ŠwšoV}lK3Ÿ fT‹Čo‘F$íÎ y8ÄjYũī){ßOī='¯čŨÍԌ 1F§ ”ÕęBVÂ!Ø‹ãÛõĸ1Ŗ“ ttn ilÅ)”Į(öŲ2T_°ĢĸīĨšá™ūהķQ;V—L 5 Šŋ-Pú4Ð΍ãËv–ņ,3–š€ĐįĢhĪūĒ›$Ļ!•üŊm†îÛŋŊÃ Ę w‘zŦíuŧŽâčĻŨpĒeŖ&æ•+ģ„-ü‡ŨŨW¯|6Qõŋö‰×5¤cŲ ,ørŠ\Æņ1>bˇ~Švž™~ė/]pWjų5T @‰ (ē° œĻ˜č`úŲ]Ŋ-¯Ū‘I‰0ËšĘĢŌBõtɨí÷ˇôu6{ô^Ĩ‹K谉7ŨJúCJÎä1 ĄÛ8’[Š2Ÿĸ_•Čéū~]ŠCžųtT8ąYČE[ģ#ĶiĘPu¤Ā\{ę–7×ŧųgĶGâ ÎÉjú#| ֓n„ŗ˙ŠFEWÚGsIQAļGŅ|vcáúäõœŗqyûą’sɨßDkv.ZÅÕkPôUYE”šĢ ãÍĄŪÜ<ŖŽ| āHb.Oü­â™›…yN¨rąŽŨBŧ¨S‡d{Eú%žëķWģÂ͒ĻEŖĮ˜Ą €Î—¤ "HõĶyžËŋҜ$îy@eƒ*ČŪSov‘fuŠoĶã€@ÅđŊęæ–Oü °_…÷ģ=_įqú‚ZŋvJaåˆtđ ŸwޜŦÆ,S‚íGk<†Üâ9{ŨĨrî.ŋôåŋȔLåŲ›#°ú‡†īö¯(‡ļgÛĘáœÂŦüŽÃAŅĸŊüoL^É–üUāÖīĮxMĪSŒđ‡Hk ĀÎhÛŽôėÍ^´Ų3Ÿã˛mnÃ}å`Mܧ”ŗŠļ娐nÔ´)]Ŧ´ė]Aļ_yļ8ŲK*ÔĨ7 'ÉŧUÖã3Aôßȗ‹<™Æ%}Šã9}!“ÁŌîk_ˡ"° ĨXíōūœéšoëNíļkcŋöÛtãNAĨ:>wBRĘī;ęžÚ*-l6é20ų§čkA#z>ÅÜŗ”cˆ˜eŊė'{ëo¤FųÜ_ŸQ/Ĩųž'o6ļÛ;, âN‹ô!„ūšxL•i>=ŋ ­€’fĘ÷Ym䏏Œ`[AšŦļ*ŋžúÆā ĻúđĶUОžjÃD—Eķfč]‹„\”'— ų ž*“_& „ÜČ ĮĀŌü?YŧBsë\ Hķ~Qøã]*˙=TjâGÍ 7d Ęį‹Œ)ڋyķK–ŌÂYMūJVWn€ šnVx XÜ{āH•cš3i•"€qņ‚č‹éÃäÚØ™×ί”Ų‚uĸ÷ÉæļŽ­STķsÃ˛Æ$ܲœČŧžļdô.ĘžęÕhČdávļxâæ ¯9~EOq\yrB‰Õ‚Įŋ0Ž1מė<ģ3ËÔˇ2†Mph™Py(͸:E+ Ņ>TašJlhVîōŊ!“[f~ēõŖ^ŋž]č͟_p°MåŲãWB­ĸĪ\˙>ö-Ļ’q‹ļŊRöŧ ãØ¸đ"“ô7ëtcå<J¸ĘgĨáÜ"ũą¤đ¸R NŦÂ×éū!Ķ=d0iđ‹LLše„+ƒ]Q-ōدíkŗōĘ5$āŧhĄaS>?VCË׃EP@¨Ĩ–ëēĐī^/\Kû°ÎĩžĨ<+–$ÍdzÆbÚĩē‰ëņNåU;ĪļĀ”õƒ$ęÉg0ēõgķA˜Ģč´3\ކÆUGpĖÍč­*”%‡Ė‰„…čÃø2kÍ3Āŗī9ĸ >Øj†ļÁ‡Zmėh‰ØōĢĒŖ“6ß~ š _™‡HG2E”‚@•Ô܅í›axuí5 Ü.ęÛ9…RŖ>’ŖŨzäTĻ"s°>ņīĖŪ…éuߞđEû4Ĩiëöˆ›&¯{IŒķ°*ûoQa$Il/K& ĀągGøŖ‘ˆÛ‚pĮ„×)ĩķhg^ÍK ßŪíc´EGxR$fēØŒ!‹;}m/“Ũ¯MO&1ģŨĨQE•j(uœų/ XÁ‡ū;U_ĩ˙^Ĩ”ō§e"yRŖüßĀę¤N,ëÛR$¸O0ÖzŌŸ¨Ž9å͇‡Qô…s„ã–”ÜęuĀâ§s*ųâ,å[Ųrņßõ2‰cO:_ŋsĮ†‚c,ŸĩXÃ{˜6Å—îŌMŸGS‡˙`wQä'ßą°šŽFO­ íūƒb2ēâØÛFq ĢB‡"süQ˙TxiŠââéæŖØ{ÆéĸkŧČaĢø%h†BȚØRŒ‹°_vuß˙ c’ŸÁ>-yíŸģvV‘šPÍG‚áŊūå !dŸēĄ~1úĘ-¤Įę9}ĄÚČ]rę`Ņáõ—‰ęúÂÁ“ÄŪsŋeĄōE+’=$ņÃ@Ī™*tHÅ{"ÕĄE$­ŗYcp{Ą”¨ Į§āoā<*ruZDŌ-ô,ÆŅĘõâ–Öķdlœ-°T¨iÅ\ëŦ[dÂ_Œ#n]Øö°€¨Á—iÂ/–!ĪÖĀ5^š€zF>ãs­Čū6{…éŪļÉœL˙80*xĸšáŦduÅė˙cƒfhņ7Šũ×BÂ=ßšđ%~˛Ī÷ ÷#ŌĶŌ{9"Ž@•įQWۛ˛°unT%†O‚o7đ'ĮĀ+“ŖJ¨Tß+ZgĨŦ‚QĻ˙`ÜĩĒ-Ž•!ˆņˇ’ú6SÂĂĻrÉ4ĘäcƒŒé"ØîÕ•ÕÚÍ~ŠI×Í-&8“,–mq)Ŧk“uįX ]‚=ŊUD?eüxAÁ†Eˆ?Dטx^ŦąHČSϞė{™PVõ3eA€,y׊wV'>8å |ēųv62BĒļʆŠŌY@Ā~A­ãnēÃSĢ\‚}ˇQVnũÉ?qu<Ē ŖCWųđŅ|aâOGŽ" ŽÛĸ]“ Ę ôe‡yŽEĶnyQ)>ž°Ø$G‡ŽJRPuüš%¯œŌŒCŅ „;õrˆplyÜ˙‚ū‡u^ĸŒZRÚߚĖ)HŊ/PŅ/™™ÆNB;ąhšû— h(XävcßnŒˆ“W;8ęâ%Ļæ2˛Ąā Ŗķ >Į¨ŸDļRyäčÕW' 7r>ž ųĖĀõúĄVVN:îÉGĻmø]ë´äöÉXöĄš161ę,™G!ļ ay~ĻŽ†° 8sŋuZÉ’öc28¯9Ķ|ĩ$ߟą`„kIC/{h?[ōĘĸ`Âoŋ˜ÛåŲOÜoLÅšf“ŪĄē×fÄØéyTt\Mo0X4ļd¸C8+,íÅwRŗ^˜U˛ē@ęĶ mä1Ē(qá)ZÉ`•ķÃÁäĐ0)‰Ú˛īIZŨ’Y3‚Ö`ĩā*ä9unãpëŒKÍ×sé™œĮ",ŧ5-†=Gg(Ã֚iAˆ—bø‘VĀ–\t)xįh¨ Q|Yˆšūâ8H$ØC6ö d8ũ˙UũÛ鏪˙2› •Ŧވ5øÛkfüa¸-ø<'o`šWyzĩÛ"~Ÿ;Žn=Í\M6 ŗ-=“é­ę]ėQ^t’ÉÁ{Āü1¸š3 :–5ßÁ|L•+Ķ<°ą–Ān?@¨uČÖôUú÷D :#—o3Æá­¸ Ũ`F;Õ&pt°ČņŽßī°Ŗ)ŗ+Rgō5~“Č v†\xJåÜâú@yžv*õuŊCV(áeđKōOüWölPF l|kU…-čØÍē§Yī,-eā'-ƒž¸MįAÛ]l@ÕõũÆ}+F ˙nkôzLˇ.Gņ‡‚Ú~ŠÄ%ŗÕ0]ÚWūvxÜdøÍYēĄE´!$Û1qˇųÅæ\éĮíû†‚ÖąD˛b ĪNP2ŸášÆ1‚D/¤Ëæ?ĘÂ.ųp# z?đ'rņ÷ā~âÂåHÍėD§IŽ-Hģ€wNr™r|V‘›€¨L=-Čë s“Ę*H/“øü=—4 ‰QĩWēØ?uwŌt—ũˇĨj~öZXΎ=m4˙ ΁Nšę:Œ7HŠŊa÷~Ęņx™o@j´EJ2pą•Mk^F-"ķ\‚gíÖrāWĨčHäCufēČ\ö-yX­nEW,~'ÎĪ/ŊŽ|ÃëmB˛ŽXĄŽõZt’Ę’X€ųæ…kq@? Ū $Ž—uëfMvœHŖÃ}uĩPHșîaCë#,یÎJFÚø FZ}†˛Ÿœc!1ĸ]IŊ4ŗgđ]ų9ПäR>ã’ekf¨ī ķĩ ˇZŖ.5ĀQđÖŌ˙ °Y GÖT‚ÂĻž˛Š 'ÂŖ’d[0—øfŠę¤ ¯€n)˛#ø%M?’v)T6›•"UĢĖņÛÂų!>xĨ ŦuķXŖ}-8ËgĨF‡ü}Ĩ?RüôčŗËĻņ37bėqL¤|ķ>>õc€|‚/}ÔķÔBŒbŸ˜vb ēEj^ú@öģjã¸`JHXĪpÂNŌ¸qĖ QëŖėŪQØ2˛?ņâ( B§WŦ%– ęh€ Ē´A}ļžūˁ“U@­—14á’ŧėĮäfŧēRęg=?‹ūd2e•—&ztŗĸ (9”WoLĪéëôÍ; qįÖhviÚŊoüžZĸDOc d =ŋg.>ņą.AšĢ6ōėŤ6øšô†8^ŽWĻbúī-ãĐü`Ķ0Ÿ’E  ēĄU0Ą]fH>!—n+‹Ĩ:2áLȑĻä}]ŽčA„>íwq{6ęôüɖ,ė›ÉĸxH¸ėüErÂl5 įōU‚æĐ|Á@gÖÜbMšúHņõ؂jw§øM÷’œŽ4\ŅžD=(EFZā2EĨ’s=T.˙tßÅ´g*ÍÎwđMėvåÔۏũ¯ˇžļ"Za6žĮiŦ`˛ ÎBÅ`O¤Žļ°bË]ŦîėšøųŒŗjķ&ĮzÄEúø]ÄĀĮTú āī•cKĄ¤\ƒo !Į§, ŋ,ąÃ7I 1ŋ×ũWh("ÃÎâYô7];¸ŗXŦpčĶ|ũ< ĨlįËô`CÂē|“,ĒŪ<V|‹c‚6›ûŗPI…$ŅYj—zŦXíæzŪų–ŠiR›ŪųčDMx˜:jŨ–2ƒW´€đG89I^ŧė´ÉÁ/Č5üW›C抯ũ5Ū¨*Ô¨S3Ǟ´W ztÅ ›‰ČˇŨBo…¯‡sįâÃ^ĶīļR~Ŗß4)úāít´\ÄĨu˛É—Õ?žO?ōč‚g›˙N´//ÛōdRũTQ~Ũ\{&߀…НåUyPKÉDuA‚Øß88J}ˇØŋÛÂÎUŽéŌWhÎqũwî]?{ĻŌ„]ō_ŸU¯n´Čųæ[Ž,—„‚úrŗĄ´Û÷`*õõEP;Ē$yU{Øö B4~w]öQ|%:níū.‡ė:‡A2‘xAģŕ–úYd1ĀyD ~/ËnqN}šTę m=qXQ+],ĄûN Žäâō÷–“jly˙ Cæ q2v×ĸAÄúģƒ=8'­scTÉÚd8’("b™§ü;Û:^žĩįĩķ"˙g¨,%ķCKũ0œđØķĖ€tJĢ‹~Žoî's9¸-VP¸d•ŠfTü\E”žģbp0UlÛ4ŊįČ*åūoFá(p€™™á¸Ži |S ŠtЧYūgލZŀ˜ų`ē+áŪJģLyėŪY@åĪ(QŅ_¸'ÎĘZŽ€mÚ"I Ë,ŗiÂ֗ģ\äšU[cß ëÄįsÅo§ƒŪĀVˇ‹ĐČķ(w°Ž3.¯ą›čRgéeŪ=˝ķæŋôé˙dš›/Ë ŽĘ€S°ĩBΝlVT‘yÆC“¨xO“š ãĩtoĘ.‡Pã WlâÁYiŌɞą+­HÆū§ž°ŊKRĩCvtᛅm#%øR×-¸Ļo“¨‚Į'wĐįÆk?-~å‡oģ(_‰YÜÂÞp§'p7ˇumrlÉ.įnļÚ"!¤f‘ “Bk¨Ū+[mŖ#¸<˙'p„>ņõ:īNA`JH2fž*Īm\ę2ĩ6c‚#ÚĨ8 ‹bį•ÖŠ"‹‘}K¨v'Ū7Đĩ”ØSÄp>3éVš§ÔūØÄ %ŽÜQøã)‘ą‚ é™ÍOV/pHëĸA@Õ˛Pš¤ŌՀ„F7Ų¨ÂÃũŸ Á,´†v>S]Åą ˛ĸmâ­WzQ‚ë%Ë˙TŧLbV_0–U ēđjĨ5gŠč~Š–ÔÛģ"ßHG„î˛ß¸\ŗÆëMÕÕ;m‘ū_°Z æ1ŖØŧhÛ2’˛Ô.:}N<,œo8)Ö¨mHÕ#InIßt1|ē„ŧОÂe–bCŸMËd†k~ë$ãũëSnĪęϧĮ‰Ļ@u†[ąHūHQíÜäÃö,!ž–QXÜzÜ+J9˛ūņęĀŖ÷¤\jG͆h‡BMˇ%ų5EԞúŧ*ā„ąš¯cXtąÉâÉMšåģ>¯å†æŧĪTôŠH û$Æ1ŗčʙŽJ}—uL{ÅÅTG–Â~m`RÖĒŖY•™”zCįąümɅ,8s>ōŽ@]c{ŸoAZ*ĮßY&#u´‰QSm’‘5ũČüj?q˙šĮSû]4nxîԄoˆ¸Šâ@!›öiôėi˙˙ķŊ-ģĘą|žŒę‚ūvÍUįՎë"yPŠĐÕŦ}u}KÚšžöŲzŊŋĨäDņNå4āvžF›Átᯠ#î@îā1i-<@{}™ŅXUX]lžhƒ—ôÄûQž˜o ĩeĢvåtĄéÁØĖinLŧúĀt™ÉM‚0ŧĖø9bˆUz‚ŅŪžaĩĶ8ę ôMîL`Ģ„|s]‹˛Üã'Ög¯gĘtÁ)īĻ$žĀū€â"ęŋ–›Ôz¨†ėŌī&wPüahĘāŨNrP~˜úŅN`CJüZOĒ GÕ3UV2•‰ZFĀAģ:÷Zhq˙X7ŊŽGu¨Šęo#SĨ`xrr\ų4éҞĶ4Ŧ=ļųĶjž'č"*ĩø–⛁•aü¸`,˜A“q‹Úøe.Đmø*§ˇõ%ą;nĄ÷4>ļŪ88ÁP H+$÷ƒ°~ūOįÎ{Ãīqî ˜%5ô˜ļ[¨ÛēWAĻ‹_übī~ĮŽ*’_ڏĀgĄ’T„JjÃėÂTčŽ ,ī%&xž51,LėhRōÖāH”ŗeH1Á}ž§š>˙pĩ§â8A÷˜úŽwßw÷,’?ŖŒYÃq­Ĩæ2œBÕK7æS:ŠÔU]Cũ;m}‰ö 09Ŗ8Ęcåh‹xčrš‰yŖüek€ũũ!ۆŋ“ø“Eē3Ķķß&ũÛĪ–đĮGnÖ2 Ŗ}ļ€*øâäCĪWϞ”¨/‚BК`ķüĩc8ņíĖ–ģîQ¨ŽÃš!€ÁT ģÁ%NÅjĘŖjbŖáWoÅ#e™´Ž†ļŊBī§ÄlöëQôßÍ1å_,&nƒÛ‘€í‚w"|–%‘3!`ˆŖû¸žf÷QØW—ÁhHͧÚøŅâATŠĻžŸOa˜O7͇\*Ŧî J’Æ*~MíËÜãEāŽÕ›‡Âëš+ˇ’5p.Dgã˲K*eīüO|:NÍzÃŲ„ƒ”AXšzáš] T–V™1#}ĄĀ5FrÕę}ČÁ`ߨŪo‘Îč ‡ĸÆA ;S¸Ē´E+üŲ>oTĩ°ß;$EäI‡1ˆ"UgÎĶ =x˛~G,¸=Hlæôvf*ĩSÚĮ8ŒđS쟏¨ĨŅ"ģÛh—_G>(îũšQąŌ•9*Œ/!Ģk~ČĄeQ‡*õ=hĻ´ęVBęqĄD“úqéec@hŖĨæøŅSsÖ`´”× X‚ÖÚƒŦa)ķ=á˙y›}–ö,‘Ā8ˀbCIËȆ­UÛ#wn°íR įE’Æpļģ­É,Rrt žŨéÕ3Ĩ›%œĩäĩ€“ŖÛ%ŌũĨĖī?BGQ"C¸gš™ĄE" OA˜Ģh3؛Āųņ-vW9ø+ÚēQĖõģ‚Îp,ŗ+čyHNY(õüˆŨ&ĨÕũĒpŧĒlá¯oŠu%5@Fģ!˛ÆąŋVsûĀÃōX]GŠ/âZČÖÅ;ŒļQxãËėF菆áJ2( ĘtB–4 Ú?P;Îų/ˆū?ČdUîŧJˆ,Ÿ(|.•ÚpˆEuģ Āģ„-*ąģČCÔ\H2žÃāđ–)›ŗéˆ>ė:ęa˛q"įøuĢŽI`×!Q˛(ų ˆ VāIAšĄ!7ōš¨]ËD¨ąøĀ5܈Ī—b9 $áBˆˇJ2Š*Å äZü2(˛ÛíÄ2øÉEŌ0†yōLJaCƒ#‰‘Aq>íņŨdP“$Ut[–ái9‡HxÉü—Ûž ęšĀ.ŋĮą=¨Æë'26†Öƨ-ŠØ=1ņåŠ÷ŠCë¨˙b„¨Ų_š˜EBjœŒË-éÍĘ Y‚KĶj;Úû1—7.Ú¯ŊšC”ī‡C+ŸÖuãąbņãS%2mjéeTãœKŊˆ`ŽŽFdAŸûß^oÁ‚ų#F÷a6†d ÷ÜUŋI›šÁ¸׉JésCé7˙FŠŲz.HÅŽZT•š‚Ģī “t´l˜6Â{œGā•q7ŋÂdm\¸ gML¯Īú‡öŪ„­´aŅ„ÃõĢ2°JąöÚįTw]MÃUš6$VQå’X=gpËGĐv‰åLč,4ČėÔūƒĻėĢT /°U›k(čãyFžŲ´*8Ū§.Ŧ.t•ŊDąļØüe€&›í#ą ĒÖĘ7Ōģf{üX D–5fĢŋ0tu‡– ÍJ šĄâ]Rˆë•đÔ÷ DUŅ ~â“|&σG į ŲÄūä ?<ôS§Øt ąĩßDžŲ˙2â]Ô?˛_*˛ÁįY•čžššå†cyŗÎLĶ+>Â^!“ŒĻÜ´@ũŒ PŖ*č•ĘÆ\`Ō¤Žā| ēr"’ŋ›dkL02,Ŧ>€Ŗ$ T AcNę]öįjxxí0>Ų=Ą”ŠĘŒĮTĶo6“,jĒpŗ¸­Áŗö|Š•I€ˇHđTM1īp üŠFĄoÅĄĩyÛŽėģ—m˝ŋw–Ú–î IųGîÅäōåX^ÚE5ޏøƒ8Į×­‰QëA"fŽĘ â;Å"ėĪŅŅ=…šŽ:kęD§hnû¸˙-ˆ(ėAá ĢĘČ5ÍĒĘũŗĪôÖš:*7ÂÂģĖnį•›ŗ‰nžú„÷Ōš^$ÖG0™Ōn1͓_uĘĻÄ}Á‡æ‡adK#tÎŅ`˛LÕ–žŒ@!~KNŽԋį€Đ23’}cŽE&øf•ÚĖjŨzgĄ;˙?ĪfcđŖŪ6Hۍ“ŋÕ gËŅjG;…Âؒ8Hš9FSėŠ­,Y(ƒ„˜÷0@yĪx %âĘLunÂ%˜…^‚âˇįÜôéÄ zų§MĨžIųętĖcƒČî†đ#ÅvŽŽPī‚kÖđ:+”lLŗöĖôļë„Ŧĩ´No)‚.’īē!×ĖDF¨ŅUF_gāˇ:›ZŅ;9Õ|cRSGØäĮ†$¨ÎƓŪĩ!Ēų7 폴v#ŋ?wúņŠ &Ôb=Pē+VģIÄ'e^đÃē^Ščãj§4T÷Ū2Ũy+Į÷ĄlD /. ûébĘ^ī 4ëĨ؁ü0JTyVsö… ˜Cą–Ļ{ájíųA5œP”—]īküĖÍĢ€ ’Ą¤0ü;ĻԭްĨŅđ¤ŅFÎ,øé!Ķĸf3>€×ĢŲ§ž!‹c˙V”€oĨ—r”[Ļ —ų]üŗC$Ģ@Ĩ s/} ūw#Ö8|fęCŪáã”dåđr ĖÆAÍbj•:¸”ĀQâŗæaĄâą)lž*[lšĀˆo؍-'Zx,@×VAŌsÆOLņĢĪŅl ør Ģ—ŅÚ &¯~”?čÔ æ)„ņJâtÄ|Ĩ˝f•‰K7ė ]ƒŧDž€ÃAÛrËĨX]›}ā*wŨ4+#œn†ˆ×ŠW[pķ7Áúc‘ŨZ-›ā§11Áâ[¸fÃI°ž'Ŋ'ú6œŧjõžŖŠė,Ί.ãõ!¤GW;;5ũp‡Y;ir^â+Ũjųŋ˙PDXŖZY&­2@¨´Mīę^]mO,bĮy‰ÍąÖî*Ēé ˙˙ū¤öĀÛü‡ ‚Ŗ‚Ô y#îeN]’˙C[ŋ(2üЅY›æQŊķá7ߜËßŊˆŨá_Vq”QSö-í(Ÿ™s#Ŗ ÔĮö0øØ*­ ä‡Ōīf$N5´eŠa@~ėËËŗĩ,M T*čũj@x“}ÄŪ9īî?=įOē0ĄĀĖķ`6ĀĄzûnQûĩĨĢ/ēՆ<”ĶĐž­t9Ā ģ ßŠ´†¨ô#ô’ Cņ›PŧÆ8-ŽŋĩfÆfnŧôēÄ4<4öâ˙T΋ÅqŠīüa:¨°Ú)gV/ãÉ}‹1õ8´ēi Vw*Gj˙VKÎÜžVδm[AuĒ 5F†?^zB^{ˆY+§U3؉Ұŋ+øÜųÎĐŖŠĀDV8•%8™KcÅ™˛Eëtåę9}î›cˇÄāĸHĄ˙F9 Ɂ}1(!U5҃`;đkâHņŌ'ÜT‘Ļ|kfû‘EÎsíŊ°ĖŨ•]~Aˆ×āCA]‰š}aĄŌíÂÛZ§ÂëĨ€ä‡€Tt|âČŌđ0!œA•ēB„Œs]}ÊãąyOZ`mF0Ŋ!&™ĻTšėŖæ\=â#˙JŽŋ'ķšÖķ˜ÕĨ´ŖKĩÔ˙Í=S°Ÿ,”l› ;'wĐsŽMūûļúÎŊRøÎ`G˘ë@vvI)wōœÉa øÅlĐqŽÁ—)Ÿ¸BN!ōƒŽO¨ûˆ&n•ĀŲv›ŗWĒĄR‘û6ŧCĸŅŋúžŽ7Ņ?S%>qu"”ļm@ÜEU,l/ģ\î¯0ŲíûōҎ°ĘÁXŧõÆëâäQŪŠ¤l` 0M´sĸPЁj´ģV°‘Cš˙(Õąq*F5˜"(SÛ?•Ĩû™Lą€˙]`zA.2}õl(e7ũš jUq—vŖ~Į‹XP˙ )9ĩĢę›íu)Œ‹ƒąG˜÷n‰ÉōTTvz\veIÄā¨xâ¸t)tđĨkOŧ‘¯˙Bx:)ģū4傌Oŧ™ģáfNƜ‡ē›C9JÃ<:ŧÂ+Â8$Á/râ]ĒĘMģÛ.•“v‘ÉĪ<ŪņŸųÄC˜Ī&æˆĢôÜÄ9¯GđÕēw•×IōKŽŦ…ˇĢPę ‡9">\ģīléčA#ã­¯ÔæW$mĮ‰yäųÚļ?ŽHøĻœ?FÄU9+6¯01Qœrیß.ĘBĪ@-ō͜ō”ū›ŋ  Ô€ĶĶШ1jJŖÕ°NåsŒÃđš,yų hßĸ4€Í-ĩH˜TCÜu Á™NɆOļ˛k)ë ÞÕ/( uáĄV@U’GĒáJšc˙l';5eŦ>ĢŠoZ/€š.•ΚĀŨüd螁ŊÕ­mw($ŗšØŠß”:^zŠģ5„á#‚CK'ŦƒĘ—Fr?ŋ˙’ ×Iᤠ0U,;˜'a-¯ž å wŌ$…RĮŨUfÂ2AĢWålŪoĸ—0’)<ģËėåq:VŪÎŽŦ:–( /ēJŪė ņÕãe7övú0#hK‹‰-Âwŋŗbž†ÕeCȅΤļŠū;Ök1_˜>h/8Ī˜9,yūČđtDWŽøŠųģ$”Ōũ[ÂVfŸWPkˆgüYž5Kˇ(;ÆĐ¯ƒōώoīŗÕx•¯÷Č{į@…úg*ŖĒO=ģûäÎĐĻ1ī˙5¯ļEFąGUFw} ‰jtŌ!4Ÿ—œĀŖ!˙"ĶÂ)‘,YÎhŠQ(ętd™… kė %gcnečŸ+f™Ú`PŖ›˛æ$ąŨ§ĪsD”^øĪ­sōÆZ#Ķ\W9­­b[ÚH?.¤†ŲāF.=ķv0CķtM“US ĸŽ×R˙tšŗX‹D4 BX‡ģãŦ2B ͉wMßužĐ{ÛģBë‡Å˜H> kņŪ˙Hƒ4uq‘ĢįL!/Gëķ%{›„•V¸ ÕŖZ3§m ze°*}Do†•g§wJōøÖx"u$ņÍ},<Û$ȲfBc!Z4f?Ō™QĀ]æ°WΧĐ"¸:Į ¤’,šÄÜ^Ī”GYŋöJ’č7č5ë'Åīqũ­&]Y˙]*|vÔ^1•7šÆīøũĒßŪtę}¯"Ë–ŠôÚ#uØõ‘W(j.‹ŌbD(ú8/hyLúD°Û&ƒī„ôcã:"Ēđˆĩ€ba¸5ŽÎ-Âo\ŋPR°avÅC ėKPĢfQ‡ĮŪySŒ[KR^X+f™l¤æå4’…BĐNā} |CbÃ;a#o]ūō" —_rrHU¤ģėĘ.čæōˆ’MmĨÍųāš…IŦ˙^™& å0T<ãŊ´˛ā-ÁŖÅÂ2ž;ŠV¨ÁDę{lg‰Ÿ§Ąėđ Y­ēj<9g! 4­ãyĪ9e×Ųf×Õ°ˇåēŠMl×ōP‡ Šn•ąEÍgG‚š_Š€uV<|)ąŧ;ß~ĻcĖyŊ>Š/°}–…@_2€ˇ¤‰!ĮãšneB3Øˇų..8Úm@y0æm‹k9„ Æ)l–=ë°Ōj^eí€1˛3.Qūg^ZŲFl^dZŊ‹nˆFcXÜ—Åü&:ZËū‹3`ߖš_‚Yæ>æŸ/#ã×HPSûĪiĻĖf ÜåG¨ ˇ°'pĶSņN‚pûŽBœką å >ëÔnOlöBŅģrą6ĸ€JQdįĀæŋx ¸÷û¯āD" î0Ԇ9GSZP›ÍŸŦÔī,1Ύ4íRģž–Ú=LG3$đ$˜Ŋ^HŲÄŋūkĢ^”e;’ŊmVŸ'_ŗ4]ųĻ~ᤤŊZ éā8?"ˆ‘ũÉ­Ąķ#…ˇî+ėcÖWr.•bCâMåįĸú“VÉm;ėqÆĐ먓öaāŠVX;ÚhĨÛÁu=ØŲ Å`ũ›Ķ—ŪąéōĻ4w ˙SAąÖÚÉÆŦ ė,-mĶŨy]Ī=ˇ1#Ļ^`†lM šãÚi4´íô–íöq ĪĐd”uGbÉwūSJŽ/uU$¨Ũ'ŧ|^;Hqį™jԏÛYāĐĪĐÄíĖgčp$lᙚąoÕßYŠz"âhŌÜ2¨7”šĀ°|jÂhGRF”áŽŋD˙oŋú_ųÉúę§FĸNG "{pyW슐Œ_‹€GĐ"jŗ|/˛Ŗ*BNŌĢCĩSųũą–ģ6i™ŌęYĢ$ĪâĨ‚yä–ĸŧÂĸK‰Ũü Éč~kSaē¸s ÔFQnųÛŪÎØĒQ=6Œ|eÛĢZÆŧgąo’+Māz[ũÜC ŧ˛y b’ĶÖt%¯5ŗk=G†˜"šZéĖxn•5õķŅ^į‰ĒŗL†õĻ6ĮĀÛ+ŋå“B<1íļ*-­ĘOšsÂąÄIĸÜuđ,tĸ¸y­€ō-2BJŠ6ˆIaF¯Ŧ5’R†ĸÕÁ o<-ÉŧÄÎ[iåũä<5 ļ#œTCeš`D‚TųŽ/đŠV%ˆž=]ø8ī;m ÷:7ĘqÆ ĮģmkÕjn@'h=ßq Û˛(öāŋÅa6&âŧų-éc k덄š„é ƒ'ˆA,%ļR f{ ~`ĶŪ=ģĒ‘›uˇ“zQÎ\ÚĘāŠĀķ Ąŗ'ÜīûēģÖˇŨ"§ÄĄfNcÂĨ@[yé͝ęË+@Ŋ ˙+\iiŪ%d,’w‰-š4û¨ÍpV‡ÍKUN]")ŠĶnēŨŽųœ¯­YEAŌänM3רcš€Ą¤b‡Nw§F›Ųɯ2(ī,ßŨōĻ7ŲĢDģ–+1$a°ķáØ‹0ÍēōÕ”ųĨę&Üŗ’' ’”Ŗ2sßÉåqd(šôÅS˜Ŋ"ҝÆ"65úƒĩŪ{.!C~j87wĘ­hy=W{$nzæxãuÁÆ:øf†ŋx0¤9QPJdš_ĢNAĸŠīco‰¤¨Ũj˛øõĩE5˜ã;AIėALKä,5˙cįõϘذK„Ķė<íãũ%áÛ!ö$ÖēRĢdÎŗĻÔŖ3Ŋr{õętĪāÂE/€šĢJzG$› ķN”xųSÂËÉŪ‡ -gĀ$éŪ?ÃúS+ ž7Cäģš•˙gLĻ%‘:7vŧÄŦHĄgø •íūíßvÃō<2JØFÅjOhĪŽķ|ƒŦsėÃmņˆÖw…=ˆvē•ž¤ÂŨU•¤U6œđî†9WĒl˛cv šd{ŸĪ3éuŸ­ ßDÕ7q(raĢqō–cjÉ:mĐĢlOncŪ"L2pŠ_ 1É:]?mpü€ ĒmŽÚŸ†īsvđÖ~ĒA—€ËûFMŪŽš‚¸õļÔžĮ뀸™˜q˜ą‘Į2 '´#gaî˙iŪ/ž[!8kÉŲđŒÍy Ÿ‚$ÔQbWGPĩGĢ~ę|˛B,7ėĩVr}Á<ČpjĢÖEîáōh–NŪ8ęĻsģŠoņ‹’M\YrĮ; WÆīüüV&ĮtHÖUx4F1ņzi~/X—*“åķ°•nˆ{ÜhŨĻ4ĸëqy-˛īēl,^Xfēöđۚ= wųJû)rũ)Õ2åb˜Š`zWŽŗÔ!¸øĨúM§”?įÉs_Dņr  i7âD=ʋ%õ”Á’ĪOkĖŦ<Ÿsį%,dKGžNŠÆsIi|Ãë{ØaZū-ėZ ļ8Āøá§&uė[[u.ŖŦ‘^BPh‰ųGЈnŅ¨ÖīŸ÷¸čõŅ9ĒÃJcūų5æē•ųÎÕÄGũ¸Ëų†ôŗŋjÃ^IÃ3Õ3„œ)ęą_TIz ŌŅâƒL´YY%&øY™ EYŌ¤îîU-N$Ä%&û˙¯Y/ōq2‚×BŽv-°ŪøéÄžŒÛÜÁ'Q˙pķFÕi\–đÍB?äÛäús7āß_(Ō iõæ˛Fvz‰N]:ŦĄz3ōôÕüÎ/‹VÉ^Îčē*ĸeÚĪ9 ˜>%rmņĢžSB(ž Xĸ,NTz˛nōIibL™§>°Ö$­Lß*ē‘üCsl4Ķͯ–ßQFČ ËV5Jû•‡°€üŧ°_4;`—eß_"đ˛á—˛4īH+f57ŦĀ>Ō÷)¯úpôŽž•ã=ŽōĢQ–ĸõÃŲū„b0tõnxŦŗâĪF“Ž÷:G"ŠL.#ĩryäžČTÄפÆWÎv âŸå=䄸įĖ;ŗ¤Y<Ûä8}ũØYMWW ÍRŋIô'ą“h\õŽĄm•ĘĄģ+ķ’2`dŽ‘Œ ÁMÁ˛cZͤÅhKųš?鞘Ÿ/-ĸŌ1ØW#î™+Ü Ys‹†yĮr:=ŋ|€ie‰rÜ´uŦ樭ŖÍȃ ÕaĩëŦrūsXSÅe9ķq´lUŦķc3åĮ—<ÚgËTe1:T:\Đ;Q‹ˆŊĀ”5r}ØL¯Ņ4${< ĢC:ƒŌ7D^Ž&lĻz8ĩĀĪZčÛáé#Ų&āĮáXD᯺ڔŠY–6€#īPŗą|Ŋ˙n|8pŠ×0o Ļ˙Oā˜eՀGī‘ÅĨüģˆJ˛$ˆqŠŧø/’ų>q˛ąŪ#˙ Úfą(R ôĩ°V|¨>ˆCgoJš(j̰îyoQĐfĒl—ŠŽ&]ˆœÃذ7K ×5žŧŊĄ/ŠĩŲĸ™O_Nĸßm:4XJjØ›ĮHĀ X5A|*˙-ë‰õyRm›qŗ7×eō™Ž„‚bvĒ ^įāø ĨĻōSXx 2ļüŅ˛ÛßŧÍĻ&´ÔįYŊÜ(œ¯–S™Ãv5@ö2ĖGXÕÁåÅeŸWoO`~ã…dmĀoŠs-’–¨›ztŨģWVwŗŅˆpŠĒb?Š"üÕJJSŠ#hBāú ßÚ¨lŽ4§Ĩ{Ĩ¸įŒá=8ú|“EmĖÁÃŗDņ ccĶoĻŗƒĖũŲÚˡž+A-øEí쁝“âʝ{R˛Î=ČMęv€ËĖBō˜ģčcĪō’\Ų–Ûa:QBj|æĢ°*Ēī\š`¨<xWŅVƒvz˙a.Ŧˇ×QĖ{‡7ãh@†¤$pX1iÚįÂ8F‹BnŽęĀô[ÂŨīDõ70I‰L x?éöæö?ü4¨ĶÖÅN§ų(΂-ē7 Wž#Âh`}}Ĩ?Žĸ,āiQiüĖ7ŧå^k§Ü*ž^—›fôžÂŋ7QÛlĩČs*o:ģwIy'Ā51C¯: y÷^¨yZûČ ?¤üë/}‡A 䮆5ūv?GĮX**$đ$ɝzֈ„Ÿ `FŌÔĢ‘(&xlfˆ[aXīčîŧm'ĶÚ_™ŒhoÛŖņ(ĖzĒŸÅ”•ôÖä7_˙0€ž‰$ŋdōŪÎWCdÒÂÌE˛1F2Z€QŅŗ/˙NôÚĮ3‰!sĖŅŘé_–û~f^ŐIŧŌkú}L˛Q žŸ+ØÎčŲôĻŋ^āæ˙eĪJéíŗčĒFŨƑ÷sízˇ3—č1 žĐ…ŅÍ[~ļ6Ō<ī3ȁŸjąĶ‹ycŧáĐ۝dS×Ū]jŒa4ą˜AOâ?Š=ƒ(/š$IŠKˆœą˛3ד’˛S´“€ĀPz§ÜÎģ˛”äwא C6 sĶĸbNmܔ}ķß"Ļ>^-‹ĘIjDbŦĄ üXļBRŋņ]yîSėa-EzoāTËR÷ÄõiöŅŧG}9E#Uw|#8 >0ęvˇí•}Ą/BW…úŽĻŋZ5ŖĄeĀC]N6‘”œ /āŌ—hpļA,ģÄpâ¤:JLŲJ”Ô;ō‰Ąn|ö¤z‰-ƒĶ˛,ívÁ hxŖ—~ȐĮã4¯Y/Æō¤Íbá—ģ<Ķjˇl (ŋÅüs‡KŖ‚ēą•žeΉ)– Ų9Ü;ČŽćlœ—8ķ/‰“OĘé"ëžĸjD‚v@ 9Ę+ģŗčZaPš@Â..*Œ@r9’ĢŒ\ÎZHq?ÜúâäL-ndlX&B|;*ßãΨ`Û&¯UáڊęšV…Ģƒ°OEéŪ<PMđ>´/§‰eÔĒ›šy ”5@l‚tDôúüø¨”ĩĘÁ~@æ%4IWKFæQQ#bđŨS1aÁŋdm”üHijP3_…čÛV€ŽąM}sŠ8.aÆ`āSQ.ŠŒÅVÕ˜č E"é kÛ4/_ÎĨ> !Y‘Š vŨØÉ,ASŨd`ā´gŽĘĩ<s?§Z.ņM´} ´b{ÁrĮy1Ļ”/õ‰ ŊŦ¨‹á’ût˨ĩ9€(͘ŸBŠ„R>AģÕ‘QédË,ļyîRą3ŪŨ] ũ$ĩįøé5~˛Y]ŌeŽĮĀ›yī›(*’šÉZژũëü@”˛æS'I=HËĄŊĒw_1hV<hMYŌÔ Īūķģ%ÅŠœŋl‹øfä=•åËCęĩGSĩ-Âļ‡3ĨĮ–}°Ņ:ÕL(šōûEZæ ˜ņė§t7^ČüļE$Åĩ ƒZβę•=Ię쀴ĮėÚ c`ÕÍÜ'—RģNá‰üæX~ō(­é6ĨŲ§‹ęVvU¯†ÄZŒ]0Į›'ÉS$„ü1Å#gŽ`ė§1kˆ JÁĩ×Ė×(+Â͇øÉ?fƒ:ė~†]tPšëaÚrKúNzŋzÃëá[“eáų}•mƒįŗ“†\#ĶöĪTq ãV…•ˇŸŌ/Ôß<ûęōß˙54*1+ģŊM{}J'[.ė‹Š US&.AF§PVckî(ųĸQ'Zž: =YGús>Noē“ŽrŌ“LTęŧŪ”Š÷‚bú‰ĸ~†•đ<9Äų})†b¯%p(5 RŲŧƒ{Hx9iB&˜ô9āø%Ų`AĸßZŖ†ZŠĸŅåđkÎ˙†Ø…ˉFÂĢ#ŠëH܍NãģĨî‰ĀŠŠh‰=K Ôa{ =ĐZz; fjĢŪF3hČÚJÕ< ÉīöSi¤áÃÕ{ĸ•˙2­ŋížĪŗ3 {îTKRꏛÍ=ķKėcaSD†Å؇,S€„ÃXb…ĀgD¤õQņ|]Ņ`fÉËįĻÍû+ læ‘ŧJUå„U ‹'ōĐN—’È2bÃ8n%7!Bí”Vc(Ėãõ'Mu6>xĩUE”GfÍĖ&W$Fäŋ?8͏„Ž˜} ã??3îQ,ķĨԘĄD ĪuõŨ$îVŽđ!’ Ũs'°Î•į™ŽÛÎMr)ŗN[ę“MŌ xŗáäíáÖŗ+cĢ&C›š5#Ņe؇ OSŒxj᠏ÔšAđãcăũmXėVuO{ˇ°}ĻnžVÚáŧ{GU×ĸ FDT‹Öŗßēm’Dí•@ĸĒP\T‡JŨ>q?MĶ´A:$MÜŠ?9K 8…ĮĻ*X>íę$yDĸ¯~ЃS”˝}ąs¨~{ ˙:X˙!HĶĶ2™‰<*9Ž|{aøWŧøKDŊôCĩaAZ8ž˛FzŲȡĀŅm)ŸĀŽSDÚ‹„-Cš|9{Y…抛ö)–q›9ꉄéz`˙Ã0Æ'ŽÎžē¨ú°,?E ÅČ! 2ØáÔp¤×…"-vĄrƒčw¤ĐæŸüĶåkŦĪkĩųFtŒY¨eÛ-§čÚĸÕ ķa'Ό;™ĩsž}Hcá6e’íŸ –1Ėŋ$ą¸‚ú3”>>ˇV4sĘ2ԏļ+ŦJW ĐĻUšČd­öoļGC O…@ Qz)#\둍?ëūĻQėŧáφūâU~!—†ÉbģܗģŊN⇝厞{Ÿ=…˙ Žü4Ép’¯zĨ“ÃzŲé ąņGũIOM&XÆ/ûäëįGHUšũnNCnūÃnĄŦÅCÃˇdųÍ6‡ė¸ūđB&u o "qæĨÖÔ7ë‡§ĪŽŨ¨™áĮ˜#ásJ}Äŋ‚ŦKO`P3Rq‡ŦnjĄÅš‚{âŸōR0N‡vVė3NęŪŧ˛•9@Ė üĪ5Ģē YwÕ­*pã /H˙)ü,PjoJWNØ˛'^x´Q Ėĸ 9đÍcZĨ g8sŗN cq be)([Ūŧ¸ģí°fˇPiēĢ’ÅÉ1jĪDĒvŽŧ3E15ۏ ąŒÂÂ+ĸôk5oqiĸšYŧ°ō8ÍfãGŠyūųæ-ô–¨ŖđÎum—`:w ô^ˇ™^FŽØąš ģi„îÆŖˆŠĖ\6oĢn  œ€č–¯ÎaĖ4‘dA—ŠaF~%ˇÃųŪC€`ö[™k%ęī[__¯Úyz¤B¤:ëŸvcIg=B ĘčĻzœx,é9ū2-[ĀR•€’j‡7öĸĨōĸ-&ëģWĩ×_*à ;ËJˆ Á/Ÿē}āzKĒ[9 ŠđW)#ˆw(,PGdm>ļčâĸ×Ũ÷Cô{§8 Š}@įT.uRDÔ8ĸ X÷‚ ZÅ'šĀ`Ņ øĶWôņW‚ö—Kĩ:—úqĸ$G⛠{ÅAøĒe‹õnčĩ¯†ŸŌĪdÉ4æĀ4al{SÔČęĒCãũ~&­ÅÍLsđd/,öÖˇnč°{=]fg8Ŋ“Œ/J0â_7ãŗĀ`^MÜŅå{E3]`Šeö‚jM‚da~ōtL Æab}ĢlŅŨ“kJ_!ؔ­Q7´ŽæÁ˜ÛüÃbí@>Zō~/ûYKÜmSLžz')œ9ûÕT)ģ›éãvŧsCLa‚Yš.ɑPB3Ė õšōgW{šãDÕáąZT1ú'ą‘Acđyõ2Ŋ ēî×Ûņr…tēŠ×iJ.ü˙5ÃęķˆPg'V~Šį Z+“Ļ.\ģĨ‘XģJĸėœ<#n◁–mŽqĪĪ•ŧ‡Āj ë7ōŽ^>õ†~HV)ŧĄāNđ°N’–˛Ēˇm)ĀąŽëcŠãÔ°‡md"õ9tíëî&ō˜ĀÃGū“-Ö)aŨˇWôÕōacŸ[-ųƒ™lūĘã8gKoÚüšln Đäʰ…Kˇ<î(ƒÃ žųg•nRĶā™¯Ú­rū •ˆõĘĢTq# af•Ą‡ŠRÕŠKáÁnĀĖyÁîô!H—ĖBSæē<§r(¤ŋ†$‰Ž{ąîŨšCL’&bû^cīfŨ ëŋ.b˙uœŊ÷c˙4įFˇûHzū UÎ,Ž­*ĮonČ"õĸJ„WĨHņļī~ikų¨’/)Ķc ņ-ŦÜ÷[0SÔkšDhlvkŦSØú-~vËlN {N›/ƒ´rŽZíjū,a~HmʈaC`8'pWøkKvĐp`į ĖLÔ-ÆŌSXÁ=%)L„á[] f˅ĶÂŪčėC*—ôaô1>č_Ā{Üą'ė+™lf°'yLŠŲÁĨ ŠÄ33Šĸ1+HÛn‹†sØ$šē)âúîŧBîsmB& ëôR^ŦbąW8P#Ûā vÁDgP˛)$zŋ„Ųh`Yׄ9ÔãũŪ`‘R˛dæ‚ûS˙~Mˇ&<_5–'VŅãSw3Brv!ôƙYWyšqp?ûˆ­ÉœD~rLYØë;8kÖGĪæŌŌTę™ŧ)z{Ī҇đįsū’!Y`Vĸ†ÖŸĖ˜Č˜Ō%â>šŠe‘Åų44}M"Ũf…žŊemÆ79ÂAã>IVŋ7Xkž;wķ ô¯ēūD}æ}J—ČP˜@B7ØĨDH”qwpŗœ0c°?ŲŅAֆ–$û}Κ ÕZ´üÅ9BTķ›7ë}OōraāļĢ n6TUpņĪ×ŲËĘ" °ķŲV­ š$‘ųæYY„Ä!7Ž„œ K3*+{ũ‡uôUãđ@ōaŖÚÄG¨ŠÉb8ėü,Šuk‰?ÖCėÉYw‚Ą]ë!ōĀ0œ;gÅLĀÁxĐ˙ō2ÍôÛԎOÉ€ú;˜K3üįˆJ"H™& 5ū™wQ=ŗ¨k Pđąí™`Æ ŊūĐ#yp.؛}*]ĸūn¨[cîSŸ“Ũ›î2FĶ}r{vFŽĶxĄ[+ØFŊ':#üÕįÅãįhĒÔCü Ä=•ãŠē š ¸fŽúŨŲ õúrwظRĘ;8\uįąCė*ŦĐGM7‡c^yČķ­Ë K§I×ëđĶÎÔë ° „DķyULĮN<Ž—9đ2ÄžCAÄ ĪDײSĨ/{”ADX“2`M´kš´â˜jhPßĶ5)g$uˇRŅ1ȞũŪaŽĪbŅž"WRcūC<0ûŗ×~ ēgž}坔RĘl‹ZØÃ4˛ß=GæĶĶ?ØgbF9‡šĮÛ­iؐą> Ą”&÷ų ȞôIņ˙yŨ)~[Ŋ|¸˛šËŧ&Ȍ88ˆž:ŒPŗ7ŋŊuQa^š„yHzģų|ĘĖō @{bđf0‡ĩ^Ô/į%ŒÜ0 b•ŲiGããXāą& ƒ_•]ČĮaÆBŌ¨ ú8˛ŅĖyU™\q úEP@å/Û 4à ÛĀ|ađBK†SÜv)>$MÎ,E†­Úåë˙Ĩl ËAnZč¤xOö@ATԝŸüû9Ž;ę$Š>qhŠØī¸RÁ°Ō¯&]ĐŖ…[Wž,ĨÁĘw80ĮE™m¤8nREËĮmü2{+Œ€Ig{ČĶôōkĄlũ°J ‚č?t:éÔÁßõ¤ėĒÂO…ųYcĄ.‡Žē)—¸cŗEr3Šo§ĸë÷‘#ŲŊ>ŋ„ķ\yŖgŦåŒú™Ømá¸č€]vrÃÕÉåõ“Ž˙vŽ‹pĢÔ>ĸÔáĘzēž˙5ŗʏŽ=b^Hv?3č‚ō =\1k@Ųųi7´?VŧįEˇ†0âßč¸iŠsŌ°Ą"^@!ŠQÆ@ķxtōķ{fąz¨ūȕfÖēËļcą9{2ī†5ÄĨüň“˙kŗ“I߸‡;l&ĩâ9Zs"F3)b,ÃÉ?õ4Åˎ’XfP3IŧeXtĮ{' Q^“RãuǝKĖã4fļ6čyģmĻtĨCäŌķæē'.ũŽu ]ŗ‹ŒN0î_üSG’¸ƒģmž°l&Ÿ3í)?DáSOķąĀņJ.tļG­z>Įú0v=ītāG8ø/Ė,õÁ¸@ō¨§"RdėØÁ#÷ÆFö•Õˆtčlëė\åųÅ]ũ3‹45ĶLÉĀīw‡Ņú´*MįŒė\Z ÖŽ#=ĘđĄ2°Īpá¯ÁsįۘNaí'ėÄCØ,é-ÂĘ 0#ē1úúķņ÷Žšú­œpŦˆĶ‡g]Ķ0úÂŨŒ/íāß藎Šáš~ÆbxŽi‚q‚ęBOūCĩaāņMŲOŖøŗ°žŠjY˙||ú´¸ûZ?ŲAkPDFõâØ$ōíÂļrXgœ…~ÅĸĪcņÆcÜĘdĩ'zfËØss -ũō3Aä"5チ2ąM˜™Qũ ÍßôTë})ř4^8‡`戛*î¨ ŠjųZūM%ãUW?eõŠzeėę¸Å=a÷C‡øí–m€1Jƙųņdãĸđ˙9 Ëũ 2RĄXü™˙pЃ õi*Ÿ-]õNÍĮA@†•ëqņŊ^^~īÄŨ4¨ĨĄĸkRÔŋØčÁHëŖFō h!tÂÕzW‡í’8¯(".B^ƒĢŒÎ~T2†˛|yīĩV%ÃČå})Ûa9&ĪĮoš1ÔB `ū›AŋŠû~I|  ‘­DÄĒŌ׊ÕɲVß}(7+Ōa1Uî´ķŠõ¯â—9›ÄŊ;IėØ0EWŧĐÉŋ­Üqį=Mr8Sm–Úx@Åū҉º`5ģ*Ŧc\[FZë€ģÎkeO wĢāĨm“†ë‹ÍZ´ 8Uņwd¨P'šņ=SļFvŠĪiMrĻĮ‰FŸ÷ÜĮ%x‘ÜŅikßUf͙ĸaPŧPŪ-|´ZøîÎ÷*ą ĄąˆÃĸ¯ŒL'_”ˇ(áÜĻŨĄ}ëíSûo B χ%Ø3o3äŋ˙~^ { ×Ü;‹6Ŧ\ą  5ũēÔ° KqũĢB)Ė_Ø:ÚDrÆžQO[Õ ?”‡¯ß*æ7Õwõ “Žömo@6įzĢܐ l°ąūõŽ*ģņXëŗ•lŠ>e–š. °øžņ!e)yũ"ĘãRc17ĻJÉEK¸  °š/ÂJfëۅ(SũēÂ"č[÷Bö2Ãs@6îaú°ĐEqĢąœ˛J­§õãü>ž‘õ™8ŊĪáöu˜qäîĩä˙MRæĪũwģ`4OđøŗŨŠ|čĪ˙t‘ÍĸM†á­-R)˙Jë Ŧ>ãēxyŒ ģlá–Ôâ >ūHøwÃë‚}ƒ:A˙@#›z;TÛoh0ōą jø°ßõ]8“PˇņqiŦë†Ŧo#IJ1x‘d/ëĘÚl'ÖL>æRsz ]Āæ{4đ0&øRŖõî̝ø|8JKNú*ĒB¤îôČ,ˆYŌÖ{|VLå>Yąēu•^â­0‚'ŅÁLŦØöėß+Á.ųßCŦĨx´<Ûẃčߒwî~EŨr{?•YnŅ˙€XåvsãÕ3 Iséņ=ŐeÖ+Žfu!Ū.Íß$WB} ŗũ‰ĀxE#|Ä|Ī5\5%O‚„Šå"J!”š7„5Á:Ŋ°ūOa=ūo |ŌŌŧd—á-Ķmųí…oøsë혈æWsdļįkÚŗK$įĖ({6{U fC¨IЇųq!ÃŽĨ7ˆžHĄąĮ™ÔiqV>úyōĻiÃÄÁjŗŸ4Ŗ—TŒ*„ąV>ļōķDڝ‚f_šĖķeSŲÕô¯üŧ *Ok åĖx;“ūåđį0:˜+áˆŧkfļčœi(°˛XësîĢBh:ĀŊŗũ“t=‡CāÁ^ž´&Uá‡ÃežQ ŦĄ4íĘTŊ*æ\2eØĩÍķĖĪ2™Áoj3…kU¤´åéwÛ/Ø{vØmmmo}ak0nĄ¸­—U˜ĖœQ1˛š‘ÅŸëƒĘĘ=ĪČņ}m<Ŧ\Ÿ% ?z ÚÍa¯ƒ¸I—y ą+Õ ~z-5Tqœ ŅbĪā,´ O+›Xčmļ’Ŋ*ˇGx˜lHĶÖX;gŊŠĢŅøuĘĮYūRHėcšŗõY6^› „JŽßwˇBÜĄ ÜtLjūŽÔ3íĢ;Aĩ1Hë˙{’o>aˆHõžĢ8Ÿø¤€ÄķjŦ{_A[ēūhP$îQ…<čŗ‹‰"}Ŋ WPđčÕFL⁉IŨSļ˙8;#ÕSũ†­Ķī šUY>9´“V<Ž5ō!>č•ßZž…ûžĖ$úˇ˛ļ( î>Öž˙f#šđ—k nP šÛėáHĒép\ąvN}–øˆ-Ņ™úĐÖՋ—ŸĐ˙~Ĩ‰ĸdሑ qÍÕ#FŠÛũ‰0"đbSs%ОĻIˆ*yķ01:˧öM1Ëp™Ëõĩ„ČÛH“pOÚ?„ˇŸĨ”$"yÚĮŅP°Ļķņ\S_spë“î4Ëü4Gkc–…(Ē8Ī€ė }ü§Ã;sp›öˍSõ-áđnŊģm$îärĢ~Ĩ ÕĄ"ˆŌUjÆ{Ü ‚€{‚/ŦĒu ęôŅJ¸ũø` Ņ–—ĐW>‹˛ĩâĀPúĘ$B&ž^“œiG–S%5#cųåeÛÅĪ'I-0YƌģCĨœ+ņ&í2ŖüMŗlqŗ´œm›w€\¯î•‚ˆ{zö‹ĩ;~ÖĒGÃS~p¸í”YYčĢØV32ė9|, A *¤ŧ– ŖAhČ:dä:ÖXÁõĻė›'ĖĪāˆí֝ÕŦ;ž‘’x‰pMÃÉ:]Ƀg˜‡ÎÆėĸ„Τīmeū6ôO2w@Â6?…û “}Ĩ€ŨAmiĄ@]ŗ’šß_Õđ×e~[˙4ƒ`•:.MPgnŽČ–ƒŽ iĻöŅ 6ÍÁ^C˙HĒŲâĮĐ42^%í3M|ZĘhĩ÷ˆ(Cp<°o:ķw­ąÉŋēĪ—„vō@sļ˜āaƒöļŠĄ\ÄĐ៚ā€j[w&qÃø(•Ë=ÍŦdãāœ`žRžã Ų?ķĻģ w„VĻɎ˙.Đy(íˆ8úÉJŧËJVę‡+ĒĨ'Fø ƒÉjø sŲ~ĻŦu°^˛%Ā‹ ˛•yVŽĖAÚÍĄ=Č0H§ĄÃsōĨ”cēzėÔåîīúŨŧėû?"ÆĖ }ƒ;‹š¨ll1ÄFžpßAh3Aø¯Õ­5é,eIÎsī˛{‹–F/ܡƒž’”¸!p¨úPŠČĪŽÄxML’]!š„ŋiĢÉdĄĮëHéŠŅÍuėNk…Å$ĻÔ1 tžx ęĨÉ įRöo‹Ģ4íˆB \cIąĘé[ˇ;˙24KÕĩ‘wQūéÛlh†ˆüŖ­v ú  %áp_r¸ūŦüäJØG9á%ōwgt= HÃ5}Ģáāš§ˆvĀÆá€÷ķˇ#röŦš>'–\U ¯žÍĮâyš.…ō´ˆ8÷ÆOIM~E4zøČGō J)Á=:oūœ­æåYŸŌ™?˙Ŧ5. —ˆ‘¸ĻĩÉOĖliX+ã q`ŅÂR*ņbÎxF éXw‹)ĮŊęũf•#(?ÛŋdųŋOĶbļ`éNƝôb•KRVšË–î‰ ‚Á`NÁ‡†h;U6yæš Iė˙ŦŽ˙2°ō:Đd†ŧÜ"ŗĖkUøė€:. ō¸TŽÄÄÄ4ĒX‘´‹>Ū ­*°~Õf3iŠpÂū)v™vã]Íė…Ģ’Ėa8\/dyœE™”:ˆV>đocjđwÔÁ˜Ō`ruŧá.âėā˙PDUN ĶŗXqŠQæQņ*Srņ~ /Cß}‘pķ+ÕtČ%kü1kĀ]ļĸĖ?ûšXZה9qô~6BUÛÅUįqįY´ØŦV$M1$Mîī)ZGZwĖė1!=É?%Đ×Iáė*ĸ9$ëšŦYĄdéãC­Īp, ™3ŦHî`‚^a~Ą•@\§Š8Ü[Ü^ņâĄ-ƒáĨíØŽ, !tJéÅ3ĒĮĀ´˙ Ņ:°æ#ō=áđĄ=îú Æj‰Ųč Û¸Ŗč@Žlđ””›ch—aûbIÙ ­ą‰ŧ#ÛN작 æ^˛ˇÎs–€5KoM3ŗ {Jå $*LŅd˙hOvxF¨:ysŨÜÚđå…ŋ~  *QÄk5žÔ>}° ‡˙{˜aÛ×ÕĄ%M9eî6Ÿk+‘zøTŽ—rĀwŸŠY:…Ķ/%v”Ļ™PļĪí;ĸ ņ—VFSė{6ŌhâļŸÕ陈ŧ˜îˇAliÅûėŊĐŲŦĻsvŨų'Ė”ũh¤@7aQAƒÆTãų3áčڂ*ՖTøáč5rōŌ=$.ƊLZVA <$"ÍりŒš4ŖúkS?'S:äņ+”%HWVĻķQÅúēÂÃÚmˇĢĘÅŖ‹=LhØSPIjC÷_y[šU ”gôˆŌƒÚ:b4XFŖ\æ\ĒÛԔ›øAŊ§ "R0d}[Ф$[ĀŽOúÛųĐ#‹q9ø¯vŠÚčswM°-ŠsT í4‹&?ޞAúĀāžĐB $ņ í×f"sēĢĀ'¸|Ў’ļ‹Á,ÄTúē‹ņ”Ã\ĩ¤ ĶÆA$ŲgNw ‰>+„ĒTEj/ Ũĸ’ ĪbY hĢøÂvbgųŅų8j}4đ˜'ŲŖ˛åŗp߯ÖĪd §°đS+üĨ$įājÕEO.)¤õ‡ÜؐûCéė7Ūׁ ŠS‘î—|ŖG“ÖÍûI¨¸āH–Ú•ŧtqËC­-ˆTIÉļ@˙d}SĄšX…ŲXĀļĮÅ`(Hū[¨˜ADy:œĘĐP—ŌÅOøĸ.Ķ-_ĻŲ89÷w(­O8‘ŧ pnÁė €ŦŖü=Ÿ ĀRĒŦæÖZ §Q…Sūk_Ũvīĸ @×´cΌoåÛv×|@di! ĻōMę€ sŧ:ÅÖ§RËSdûĸŖ8ĀÕ Uƒ™ĻŪ4ŊĮĶxžO¤S.&¯Đ[†Í}+Ž#ŊĐrØ´÷G˜öģVsse,U´—įbĪŽ{ä}ō’Ŗ (ļ­2āŌ­ß‹Ņ&ņÁ˙4Oë/ŪČÚfKõÆ˛€§?ZËč>b!GM˙“â˛Ųõāˆą+ŲÖz#U˙y Ä/Ē1$Lb2?t¸-ũ~|-oôGîˆ.$Ë´4ũ“›šTVPĻũüÄÕpzÂčÁ™‹QšŌQ`$‡T-ŗO`øÂŊ~‹+Œ@;8†#'ĨIMŖ˛ČŖÉԑ€P â˜Č…q•&y•ōŲ@˙ģÕaĖMƒH7Āæ9VŖ‰–Áē.’f4ĮEĘOÆzŽP3 d7–īDcS}Öûļč‹âŌķŊ‹Ø€_Z#/č§m,përVQĄ-H  f:Lž]41æxiHWhßÅĻqĩO@\č6ķːN“kx¸Ō’æt3Âļ.ôm[Ėo8ՆņzTÃcîéäŽÃÁ^Ųx-†L˜(dr0‰ųˇ-’ŲWžč”"ãMΔÂâO7gũ'5:ųæĀĒÂ%ĩĶ&pû>į)›7åŠvCI7ƒ5hũ û×.(ō3RËgž7´ v;XsZnHHŽ‹ģnYĐ9ØÁŧņūŸûfž›ujĶØ6máŒ89\>Ē&.P s“^™J׌,fۊ֨Ävsyä0ė´Û—•A Š„gØJí=,Üũ´qˆŪ›ßuę–ģMpPHĀĻ3Ų`ĶėĻB,pbēxŋ k¯´ ˛‰G[˛ \UGЇÄFM"+1KöåOn|v¤€˙Š‘úžæžŨNŗÄ\āäĖĀšÁŋë‘aŗÖ}eåyŖ>/Áę ĄßcÍúŖŸ’˛˙Qų#ööt…ŋũQ xũ´ĸđ į –ZģÖĢ|ÍáqsŅzŗģ÷˙'YŖ÷Hiī aŲŨ¤uĄAöí€%ŊøŸŅŒSŸæÆŲõ™ɒëTÅĒT‹Žã‡ŦšžpUĀîQ ĐŌÕåטIđĀA—•N„$Á)<›dō'oßEĖą^ãÔ^1ėāė˰Äģų˙\O}Š"Ŧ_íQs¤—NQŌh2r—1K˙/x¨ €ŋ}ĒŦßčz÷ë.lÔTŸ4N > ĮŪ™ģõč{ÆÍųÚvbî`øhzE ×kDģ]ąČ˜‚)×4ߎēKũã['īë2ÖĒE“/ßåWîĶķĐf(Ėõ‰ũyķZ›qVõ¸ ›™œ….ˆ.ã`Žéũd𠗘á¤O‹&/ūę×sˆlrlÖīoĒbcÎ4ž™ˇgÁąíˆû¸<7hØЉb¨ėßz•–in““âPE`ĶkøÆ˙z"wÅÕe†BÁĨ‹ŒŗyäųķļGƒY¸Ö7kvKĶęäŌ1A#;`ÍÉJ[Ō–%N+!fÜŅgŠø2bFĸ ‰lXĨÍä”÷RĨo\X.†ŧOŅĮIĄ[îGô“Į͒ Ol7Čį5gÍĨĄ?ŧYąÂ/ĸ˛īĸ??—ŋoįáKÅy&`Í3ßõÎ-AÉō—Ōš€ģõ‰š'įo‰C¤Y_WcŽĒkgīi U•*CŲ įčũ#ßV„4›Y9 ÎdŨ‹c ž›ĶąY|¨KČēdŅŽÅL—@–Møp)+œą˛Ö]oåHīá ˛˛/ŧ›~-ĪĄąw52čdI€ū)FmųĘãEēÁ‡”Šå`ô{ҘX[zČBÉî Āo _ §Ōø‡™LķF ŲqöÜEŊĨōæ:G0– ¯ą-›Tų”)7õyāG˛0ōÛöĀTY Ū8ēkķ„No/GēYZ˛L)ŌÄL†VCôöÜ­ĸlĸņ Ã+ÁOžâ1šŖésŒpÃ^ƒ-Ę Bš˜)Hh͌´FDY3kœVįˆb ŌŨYīŊöˇ•xJŅĸ‘W†´hLúûląbËĀtyļķŅh°Â ģœIû´U7œ €¯‹oÎĖ­A\T÷J ¨Įn )MØë~ĸ“ĢdĻŨ+BŠā=ˆ‰ŠǟŽDƅÚQ砃ĩ“i6éF™ĢãĀcÖ1÷} Kô˜G™-mbâdéļÅŲF’ʧ܊L\ĸ"ǚ™Ÿ{‡äˇē„\ëϲ‚@ZûDZv|Q}ō@wœķ Чžôĩc^v5Ĩīuĸ&0¤ĶįŠkv„ŒAé ˇ‡ÂƒŨˇEŧH?𿏺'UTúk3#>ǏŽę‹-?œH ļ]$†KĨH l„ŦĀ 8Ķ^Š›8nî°fģÍĻ„‡ū™Ā¤5œ Éü–Ė ;eõžšw€õiOD7@NŊŌK# Đ$đr$Ĩ\Ÿ:_ųmŠ0° 1äÆHPˆ14Įō¨Šn2,ŧžÛ×Qæî“I+~Ī?á!X‡Ģđô„S"—`C.l͏ZÜdąæęHŠ*´y˛×Ãf¸ēsÚŊ‡ŋņ4ĻPĐŌ'ē)Ŧėĸ P/]ŧî+_ I¸qĘ÷[&Ü;˛ĖҌØŠ–ÚĀË™ƒ6DÉ"Wî˙2%7ÖsN Ģæ›Bõ;V8˙2”U$öAlOR‡ŨāĒpÁ;ÆCIëŋ2ã]œ/ˇĀŎŨģoæS.9ķĐU uđ’MʎA2ÄÆÖH¸•…kōčĢļ ¯ķ°ŦC A/“ũ3 JM`š'ÖŌĐméŨjר‚ŸØlkæ1Í kĄ_ĨáŗŖ%:ˆIO׍[øi+ĩ‡T1™$ZōĨN ~Z;üyķÁ0“č-qQˆŊį ž:‡OŖâ1­_?$j+˛؁ cą‡ęŒ†V÷€PÆä´a?oĩULŌ~ā§Āšûô*'ė"æ3'†ŨģuĶ wÎ*Ē^ë{N:pbK Š[^ JŅĪo_M%ŧoĀόũ/å7ËA8m˜d´š§"Ō^%cč$9ū/WÉë&%î}ËuŊ~[9Ũ6čöąkƒũ WŠŊú×dH'Û •g؈…C^A.-e°š–Ąkĩ~&HtĀvAĖMí"ŒÁ~ũx;M€ŌI~^š-žwōRß,”^Z!ÕĢÄKBâÆÁ¸00Ētdžh/ØŠkî7ĒÁá/’" ĢQh§ļ“zđEÆ7쨁užĘōE§]¸ŧôĶú¸ŖTīCŒ˜˙7 K‡đLŽZæ†â_đ$™Pæ\LL7˙LŦ%ŗP[Ԝ)^~7ëĀųŠ$)›†Ģ#@f÷˚7÷Ĩ\’”:§Š’Ęmˆ„B ÂS,fdŽķĮîBC†ACĪæ?™ ƒ# YģđaõŨ›Ämũ c 4¤…Į´Œ{×úMY.ŊBū’*Ūv¨1X bBW§_ŨÆ4Ĩō,ˆ Æ ŖÃA–“/# ëø}*\)Û~‘Å i>DįĩZ&"‘Ŗ Ī֓NŲ6~A{,M’Ö)îûõXũ>ŊüĨmÅōZ¤EK+ĘŪQ3Ļ.„Ē ŒCé‰!ttKâ'Žņ|yú"Žđ´C2!zh\-Õ(û8ƒ4g­ˆReŽę Ļķ4}_Ą1†Ä´u¸@™Ĩŗ9ž$ņpnāŅqÂ~|k'ˇöƒ–ąZŸgį{NEŽrUIk-ƒ’#žÆD[’}ũĮXw0ÍRžÃŸĘp”pB(=žČßâ‹Ũ3TWƒÃĢŨ?žđŖj ü(ÆėkPDF^Uįœģ#MQ āĐ ę 8dî5č¨(öģö…F%­ĄAĮŽÁīĸ.jĸ2Acâ†QÚhâŸä„ķ†ZIƒ8MŠ.TĪĄ›&z^÷Øį ×ã#ė#œŌļŸN„L4!Ûa_‘XĀEĶrZ/k ŖŖaLī đNŨn䯴œ5d—‚¤Ģîô÷å9Q¸&$î׎câiÁM}ëø,´ÆŽˇp@ũ^Q1’§=[5|ŨMũ:n;{ĘŪ¨>ΕĐq"ķ•Ŋ0ūÔ "D#ԟĶqWí¯aĮũōŧۏO[㠖Ëúƒ=w1]ģ 51ގŦ´54`–`:hÁĩĨ=šØáŨ•Ôã oˇöģYuLĒN~[Ø_lÂ#fÜĐÜ;ŠäYP„Œ[”Éyœ‹”ŠĢRĨŖö=ÅĩRĄāŦ-ũ?ũwPí@L./Úã ų(uSsbŧ^Á”’Iĸ‡w8ė#Ŋ;‡¸oōĒųP˙'<‹ŲWŦ<•‰~įœÜDS=É ´û ˇã’ų8pi×&ž#ÛKqbK(^žāÃÃj3;ēQV—ė”âĮcžŠŽŠ%âšé<É֛Aãjāë‘Jˇ‰0ĩ”FķØk ŨߎʖcÁõ5DË(¨¤I`{ЃXūaŠFĶÔå˛"JŠI*cZŌųXÛa1c×zăāw´2”MÔ[ø‘ÕōA6 ˙´ČŌī'“{r °—ēĢdË<Š`ö܎Œķë ‰¯Ģė2ážKEļū™pŨ!YŒ[ņąËįŽzgđĖļ™iŲ5 Ę äü–3ÕˇĮwuÄ0EüĸœšūT Ÿf˛ä$¯k…"$AÖßú|Úf“…˙4ŸÎ€ ΘėÆp6¯šĢ–nCäGßÕÚ#Á¨Ú`âåuˆ‡d`Ŗ)­ŅĨĀ*ÕÉčeŌnŒxÖtb(#g‡•íÕąxë?Hô!Ä|¤Íļå’. qĐ*0I,Ą+›]´hqĢō4˛EˇíãkL,Û[h}Ø?Jcõ:̇HÖun8'‰Ã;ŋõ Ų|áŽ4ĐÍ5=VđΌH0‚M*ģ õáÛĀĶ‹„€K.ĮÃÖ憜ė”ãģÚYÔøƒ?WˆŒ^}‚b/-¯üx˜ §ČČ­ŽŪõÅÜĪÍZú—(Ōļ¤ojJá!L)˙5íãŊĢEƯīΑa´#?OÃũŒG!&×uĨ_ŽS §"4ĶģNg<†L°­ú܎I’Ŋą?īZü6ôjõg¤ņ…ÂJûí[WÔ`LoH ’ÃŌmđÃ;Õe`­Wf,ūÛé Z úYm´Ë}ēĶ%?;ÔîU/Ô#ĸ fPo/ĩÚžVl‹Ėus¯ŊŨjhGzÚŠ7F^úÃvÁ ēëĻĢL—)•ûvˆ{ކU;~.SuCzqÃŅyŊLg—ũŸú+Q$Û"(™Œ{Āō lƒE(šŠĐ Įb{OK`Ä%-ÏØ]ũmž`ų4qģJ'@y‡ŒĐ‰˜.˛BizL°âuX´ˆĪû„ü2}͔ “öP¸á둏äMāĘ )LqWĩ,ĀŖ%lŽFcfįuq^ūÍ66ܘūFZYˆ[o÷qÂnŅ.÷ ÚFxy|zžŽJŖ|œĮb8˛MŊ¤Ļ đŠÂŠž!ōųzy铰ÂŋElHmXžfÚ!ŠXŨ?Ņ€ŌqLt2õđ:—“”Œ(´âlũ¸†—šĮiŠ…‚ų#ö*ld#R=ŲaÉöyēg|[ŲĨĮÉøKÖ G™3‰­æ÷ &åQËęĮ€WHæ4)Ã$¸ĒĘ5KĄčjcr¯Đ—-1ë…“4š;4æ:‹¤ŌFh0ŧŲX9œsŸyũ0\¤lp7Rt' yŗ‡Ŗ,ĻĻe@i‰õ‚ÍRå}㤨š?’^ûę­­ũ´7|Š”Iī/Wf”%Ī0ļ–Нđå„Ļ›ßv &큝žâĸ†K’¯ÆHTL ô‡ Ö ˆÎ’¤_Ųžą[âĀ9Ė›:<Ī`Å_̰bzčā„2Ág™¨ W ĮGU)€fR:Ū%œ„éˇFûķo‘u+ŒžôÁ*i§•.',OÂ…<īöRŦú‰,BôąË&éü(ũ¯3¯@čĀÔ3V)—(’ ‡ߚ…ŽcŅΐ_‰I˜Fī×õ‹RĄÉdŊ˛›,‡jˆ>ēūĨÄÄFFfī[7‡Ũũ)œ^ܨAn‡x”ŸôVÔD|Ō÷ˇ đŗļە“~Dw[°xē+) °ĶŖ9zdiĪģE=f@ĖSJ¯ũ.o„ņ`EãĐ HQŌë+ŖuV4Fg[„õCãĖ%BÂę‚îT‘Sx8y~ęLģ—f8&CËg[Āõ˙ĒĶÚiķz&ĀØCRŗŽÜúPaŅmĘgŽž™Š%.mYsž¤âK*5_ĘĀ{uSņ†ųtäD¸8kÜãy;JtčŒS‡SŦaĶž?1J¸¤YË`Ļã=ÚHŊ­Œ™îvŅĢ›´‡Ũƒø!÷œ'ãä~<žLcĨH7ÕXBphõ3ũn—Û)–†ëŦ]ƒ-]ĀCxÜŽâŋcõũœMÃęSģŲ*¸ž •…JtņŒŧDLâéâžÃđ2déãp6m}€F|Ü$Ė&ŦFZ6øđpŲ} áÀėpSx€WŽUļrHĪw2BܝvK ˜/îcKŽæĖH¤ŨĖ&É\ ÔaĮ›ņ¯~ƒÍ›õPę%†€n hĶŨŽŧŧōŲ@ylöDģeŅd‘A¤ōâŽ+\vWZ˜æßllĩŽaļAg}"r ՚nŗ ļOõ˜|Hî“E.OܡëF%fxX˙WžŽŠ`6j\| ŲÎö¤Ë×-›ģ5™ęŠ#&’o…Qą1ķŋP7”YLc°aMč0™ãĐiÂΘH?¤ Q‘Ęæ>[)#g¤FŌ ĸšÄQ6üķá|ė'JwY° ÄÜæMTÁ\ę}¸`1Ķ_ôâ‹Ō +hĮ\õTŨVō6 ŲFVí&žÆæH7ZŪŽŅiÜ{ŸS›,jđuxbn,29hXƒs"yqv“-KdČKē õTaÕ Å•ÅĮ–ō*y¸ĶĶB”Á—hčVEËÛÛUŪO-lĐnâŠsåöu(JM´4J‘î&ÃÜ>yå~[ƒDĶOĨ}ŽúĖp™Ž@ĢāÃč§p­;b!Н˜č=e!`x°U:d|ÄËØ^â[ %S!T37z˛]}öīī ËG—W™õ’ ¤ãX–xE ËŸĪžuŅo’× ›N|,z¨EāTÂ:IëĐqÁ"L–I×­áŋŨ„ĸõO›Cüú;d’¯Ã´›œ ģ”Ôė~.ZŽē” lš”=ÜŪØ¤ĩũ´ƒ]Ây‘;’ˇˆûæĪžÚŊ&ŧf¯Į’ņ“ĄWU*ŦîiĻ[ų,ļįCšÕW=Äįn'" WđĒiŸëē™@ŠÂŦÜø‘’“–ËĮĻ*ĐxÛRJ”+öPĸšSÅ"üuīô^ĩ%^¯GÜÕÚŖË"pų™„ŲöéôFŠ@!E[m[¤@÷AáZĢÜ ŋUÆęxڅ&žkžëpĖŠ? ō=ĒĒĒbŖīÃ),Õ‚ŌŊ@ŊļˉåŌņ-rø /Ŧ,_QšáIlOŦž;UēĨ–ĮūüÍØÉŖčdIšLB(…ķZ]šŅ K8v1÷âTßiŒ€ĮĸõĪdŽJöÃBöÃRn7?ą)hߋC›ā¯leĻ.?{ŽĐÖŦ-Ŋ`’§‚ā >(đœÔĖ´Ä×!=GÛv0Uœ‹|Vî7B¨OŽKŠ™>đ¸•øZđk]ė#gû ¸ŨuŋꈎoōKYu‚ۍá9Ÿ3c<í“ęŊë‚ׅžxĶīnÂgÎŠÃ ĘŠaĄo7ąË?Îô1• ĪúßieF:ÔĄĒ,œžŽ´Ŗ2Īãü%§ŸLü–ÉŗüürąÍ?į=¯˛ao Æ-Ām„Īį0íwĸë˙?d ļ3‚aæ?“­8ÂW/˜āŠŅé/ Įn÷!đd.Āč[0‘Iî¸æk›Û°VetÖŲÁ<%Ō 5V"Ž´dĮŧâÆ›Žđâ¸Ŧ)žˇaYĐąÛîŠư4b[¸­¸?YΊ´WDkoGą+}.…čôČstq˜l!ÁP\B0rĸLhbا6Ü÷Uņ˜ôAG8đUˆö@]DŖaŊ­˙jČø**âŊkž{憺†Y ø>GsúÔË@ūZNüĶzŽj#Ÿ'Ŧž[„ęË­‹]I}›Ã„\ivËę>ÆX´Ë@"ûå\•á?÷P 9‹ö\^gË-¨bú”SL¤Ä d ˜Op\l(N?(­tų&Ę õĸëz/×&_đ˜ļ[šÆ ËåOĩĖr ė^šđE‰sĀÍĸǰ# ŽĻ‘+}¤ßÛažįŊŊ˛}eLNF‚KDœEø>ô;vY'úа9EJ~žXŠTuët^ĢÃ_‹ s÷>fCØĨāLNÚ6ž‘rüˇžÂ$2H…æŽŅ]ôk°_1ĄČ°Ņ˛‰ųUí§+ 0De˸ų•îŒíBíņ‘OËę[†đMœk¯éXųPА$Î D:)Ú\…8Ē”ąĩoÕ*IõSÕČŦš9%Û4L\Ŧ€ģw ˙4ø<2¸ ¤•{5D?UĘQdFöp.F‚æ[Eâú`ŧëŒ<¸Ģdĩ”KĘqWA[ôũ¸$1aY%¯ÂZŦæYĘ0§Ø3V[ēô’qGpĸiŧŨ+k_iöeÛē"ų4ū‹kįÔꗞ¸GvėŲoú ;  Iô’¤Å‡9ƒ"?ĪÆ tË˙d–Á[™$švDÅcŗgIU/ø ^G1[Ûq…ŖˆßžĮēY{–{šōÚ?´7Eۀ’!Éq ™Âä•7Ë‘ÂØxÅŊB_uÎö†|ãƒˇNš.üÄ}Ĩ<==2K'*ö:D˛¤ˆÜ†ĀDĪ™&š]NĀ ĖE)ôņŒ{v:ķ-åOđC…ōY5:•jÆŠZšAP"¤Ā‚ŋĻúŦčNlX(đ­?ˇō…á;ÔąJūIÍR ĮŗküW°eØTT˛"ä—@Ođ‚BsI‘1>W¤+*œdŦšģüŦŊ|¤ ŋ âé&–QŽzÔ_˛Č—ķ|q°ĄKnJŧõT܆fą“zá’VķL‰Z›ÚÁoØH§÷ī)¯VÁC?ŊĨŋÔÍŦûՅ˛duÎrŊŝ-Eƒ%BĢ…8ķčĸú(ŠôÎĩvR¨0|X…)ĀŊ/ ĒM„ĄaâÉ˙ģ4åځōÎĮYpR­ŽæüņĐt˙eƒDŲ÷ h'Œ–Û–&ÕÚx!5u¤/I;v‚!)Ë÷jEÆëļpaC„yAĮnEšėîŅG3š!úŪĨŠŪÚīîō18ôÅ#(—Ā˙1åÜ2ƒÛü 4rvŽ43åō ÎXüÎ*M‡'Ũˇiúå”É{=qŠíĨ|šŨėČ—w[ū¯kŠ“š•÷g„>PđÚ_&§uÎj'úöėöãÆÜŊ2â3īņÅĸĘxÔ¯|ÔĮ ^ģëģ'BļĩUßÅ9ļÅŲđÁĨŦ)ë™:#KwR9MD^y|Ĩ1öD[{ŪąÍ0čúB¡ĄĄ}›×ŗT=[z5ƒaô҈-íLŅ ¸ÖÜÚõŨ¤ž-ī%ļŸGmmrÆx0+RųTŧ\šŖ%/ž[, Ĩ%“ģė9ڜ™Ēž‚yj!.Ā€ŊŽbŦÉŧ3ÄĶËņŲüųØļEZTũđH'@‡Évm_){BS`ĄŸ~ä‰]9Š|ÚhQpãō¤ĢE/ļéˇ˙G IĩKy§ã"÷š‚Ŧ€ ~į~Ҙ Õø‘ųš;ēíuō ĨCĩ”ėíĀ gŧļõ%p_vː„&)-yŖZ4ôđu vs ´ão.B?Kđæ Āãcā+DŸĢąČJ˛BÚdŽ~Ģ3ß –a÷ׄYÁ‹”Ãnud9Ą ČŨĻ@ĄHi3ŦŪ´[UÅËĐÂĸČĀÖ¸BDæ Nm›k_•äcœĖЀžî5“ŧ”_ãŊOœH‰ŗž(Æ}šŠ!ō˛ -J4Ö@Ã0K`Ȃn÷ôTítã¤-âšÉtœgđú)—õOENÔŨÂisž; Ūō×xx­>ÆÅ`vāP!(ôᙨ1 Ãܯ `Ģļ ŦVԟWDV§ÎŊ\‡MRBGd'ÁQļ-+OŋViø—‹¯rĨ$ßc˛ÖAĩyLė^˙¸A“ĀœÉA,áŌ2f95í:ŧQEFIĩr.˜íŽ"ØrshJęli™ˆ)ä¨čIŦ1få~­`Gŗ c%¨ėmš{jY2āĸšš•ģũ5žķ<ûũ?aō’ēīŊēˇ"õ{zō?™Ūg õŅ”…R0āŖŗi<Í"ôĩÛ÷Q%=pšÁÆēÅĖų™no4LÂæ=iÁé$é:ĩ‡ņšĒ7áū;~äɤsũŧHBæ ˆÚ>GŧÛK2Ŗrŗ|+fžt‚QALīФD ;äŌáä%HĘuAë|Ė\†čķfæ¨ú2ü™ú°šG7Ė͐ūĩæ´:e›uãŅÉwi>¯MrS×IL)%› 8°$‰EŌÎ߈é7ānZ-ineR1Sņ[Ų$ĪL@[Á5ĀÁ[ō ũ:™ôĖđĮžĨ+ˇ'Ôķm ‘Îã^“UĖúŒˆ¸ŗ('M’éÕŋm¤˛šAR’„K 8'ûęéU‰wŠCôüÆžQ÷•>`VÜöp%˜DP}ĒÕ1ų˙=Šė&á´t{ĩ2Ęšä ĢJá,cŽ ¸‡ā,".I. M~šIfåå—ęY*^đ=$)ō6 ˙"§ž'áœļyz ôžB6vĖē¸ä¸Ä9Gd!Č Ļw›×ipHîYÁ‡Ą%^ ˆcƒAMá<ĻGCaĮđyžúqõ"˜y>Vøt’yŅģ'¤ŲfēĨŨÁ(˙kģla‰›IãJƔ‘¯ņļāĐŲŽÉ/Ãät@ū éō^?´2Č>Ŗ`{ĒštŲp,.Æ+×ō`—%.ë¯ą} L+Ũ`ÃHî›ÛáČtIĘqņgčG˙]ŌÍ=YÉjāåK?Z‰“ Jõ x_˛ėžÕčž6‡ĢŲ]NūõĩŽũŲĨęeęo8ÛZ/ˆíęŒX<:yãŠâÍH™ˇ%šc‰4ōO=7ĢŽ+ļ¯xĸyT%ÅĄRŽ­*E~ y|ĀŨƒ#¨¸<Ģ^ԌYÁĖæ•ķžk9ĨūEˆĶ>HxLUŦšG}ÅæÍŠõdßå‹2[-Ģ&ŋgψĮŪIÖķ¸¨Ô†Å3.”sc3ã húByô@X}œˆíĘeír GčÆ wr°l8[€%uĨ{ÍË X׹†öÜq;;ƋG1†¨ų˙?‹„›šøHîâōĶr:Gö֞>ŖŧWé™0,ZĶĩŒ“q˙(í˜ęøŒw‚›3e"}{ļ~đƒģCt-—ĀÆV‡3 Uĸ˜YáŖ€‚ØĨŊšHVf7÷ûz×ŖÃ. ĩFŅŽ4ĄŖ65Üđ߇\ņFusÂÄJ3ųÖę šÉĻ[Š7Ėŧ,XĪį¯ĸ֐âčöĶĻąÁÜãjOy<ąąÖ]^î…(3ŋŸ3 UQ´j•ãĩU‚’S”6'{ôč^å@I ¯ÎˆķĐŠ!Ö>3=TÅ/m/Që0÷?Ķ^ĻdŲ.Rß1sQ;ķ;R5ßūß#žÆ&°â¨ėvE]& ė>ßaŅĪ™\Øvˆ*™Žē;sbP ‡'Üžė•4HÎw‚ÚXBlæˇ_N‘ē4Ž!1Γ:­VpĘĖ{B8‘h~ČŖŦüĢɀé$:K"Ŧú`š)EĩuiBēŋyč§#ĶĨ-â K#ų8íķĶwČ%áŠĮ$m–Ío莆ŦÚ]Jj~’Â7€ü02úƒĨTdŖžû6ŦX‰ˇšn,_Ũ•ņ‡ŧÂë:3‹ŧúëDß~ŋčAmĻŪWŊū ÷RR,ž%25d0ˆ{uHf.á_B0ˇá’yŧ—` 6?)õũrē8&ēîWŨĶST_ÄŲäĶvģÔvDÎĶĘh*Äî~܊Šd\Rī€ú<Œy0•—JÔÃ2jUIãØžž0W€¨÷´JGä,6i¯ ëGā€˙l4ĩ”.LšßE#ŲÛŋ;†õZÃem[šîģßęŋ`@% ĶUžzpÛ-:¯ ū&L¯ĸĢtĘ,B?Üul㘯:šÃm–Ä÷Ä(IcÛËÛNNŸOQÕR¸ ēēbبđpąyCL˜Ú{VR HŒ D”ģ㜠JÛō1?ˆJükÎRcezŲÜĀÄM ŌCUŪEŪôfžį¸ ÍXfp˙8øŽa# ȗˆŗÜvRãŽˇ‡ģí*WáLKoą˛}ËVŲ93ũėU˛ī^4ļ ã°ųĮ{ˆŊHLČįa8ÎëúŒ€<ÁÔÛĒÖBöOŅŗÄ MŅ#” üĶĘ…ځæ¯ŧmzÛ_å1HOvĶ—'ũͯ+Ũ\¸ĩ9ŧfĻĀD~ oМ] „ĨÁËQģĒŊÂäZÃvŠ‚Ålū*MŽw)ƒúzŲž{î3´Æd(ÔĘ >|ĄÖ„ô9ŋĪ$#ÃĮXú´?›N—ĨŽŽŸ/øęŨƒ < øOiœĩΜ-6ž )ŊjŪrûÃH[9ũõ  í<Ī× ôcāXöoĩķƒA‡ÛīBíĢvÅÁņîšÛ2D‡čV‹XįÃbđc€9îqÛÁęŸrRcMs ‚¸@ —ļMxģä-¨ éÔûŽURÎ|1ũ@áN;Œ‘g‹0¸!ã›fëį•“TËŧäĨŋpüОĢw.ãüRŖŧ(å[ôGĒÔųáiVī āJ† GH“´Ę?@ į˜Í=椝Z>:dî0ōętq`ø”)ĩˆŠüôw=ÖÚĒl_=LŠˆ€Žŗk”h×]#mļ÷>Š}%lsŨ EyG#å=š•û;_Íæ’ėtáŠ=ļ_$ˇu9čMŽ<ŠÉÚh°x ˇZ0F0ˆÂÆŠ;Š€ôB‡´Z°6˜Ô OY"Fą™JÆ#d|<%¯˛Ę|gĀŨ,ĸœČ˙IHKīÃØG(Œ, yr_ŊŪXģšüņŸTI˙W‹œũĸ”ÜĖŌÔXkžäW# qįé (–PáOū„×jæō/˚™âNbxGNį4üS7Éũâ@ëPžÍ+!Å9¤ŒōI—ę6“E9æQü I&bÄīëI“bŪæ š1=[ĀdāØÅ^ ‹éĨCsž Žá4!Ĩ/q5YkHĻĩãYæåāø­IŖĻɞLԁ˛í<öŨ@NÄGgBŧΒ˙+Ņ6M6Øˇčˆk,6ž‹Dž+ŖD9Š@‘Iû†iŌ˙%׉ .~#ö¤<20äd)ČēOęwžũ‹íųūļˆđžu÷˜ŪN˜g{FH^Đm¯úĨģ#āX‚ÖbBDĀ6U9īÁ^Ē #GÂ:˛:’õc(ą"ŠŠS‹”Âflzō•„ũ"\ņUĶådĐųZМáŧ­ÃNJÖ$ŪĒr.øŋ÷ņ÷vė”Ē[JRü_k!BĨnŗ ũ@Ô¤ŗŠ´ÍÄ{—E šã $˛Ë]Šĩē*zYŒ<›āU5Ļ›fŲčW Ŧĩ”:ČQč_âbīĻŨœ”„fG„avYįŒ×°tēčŸĒNBæÂĘʀ=ÆåŖmFÜ×:{Eˇ4MK@!˛ų`k fl¤w]C0‹¸Ā?Ą/ôũN¤ ŠåmsĀŠ˛āR/Ú^bš M¸$íM¤ŸWÉKë;€sĸák!.äLfķ’ÁžAŧBãUĮ‹DúŊjŖ%NI˜žūī—3 ˜žĘ Bų4Ë7ÆuA^ĢÚL…RoĶVC!kļ^N“)žŽîmõˆk2út¸~ā—ž 6JHŊmˆ p:Z­ük8<lzÛÕWW¯”–Swíüˇ†ū&ÁC2Jznũ=Ęq{3jŌį^ą $4T€pÔ$Ŗ1† q)¤ÖŖôõĖiŋü‚qŽÜzĶ,`¸nÅ5ÔäųČt+l$UF§4ŽĄ –úBˆaõžqSÎ ų=`anUJB€Ō¨Đã4ė†ņAÛwōƯų pYxn:ŲP&‡Sč.\˙L`Š–`Á>Ÿ@´ãĨŊĄ>›‡¸mÅ}ņøITßĒ)ŋœDĒøĐl‹PˇauCNnĸ¤})î¯^TŠÂ…PÅ*T<ϝĩYņuËWXܖsb°ĩâ6Û­‹įSKŠX° ˙u1ŊaũōČ´×ŗ8‡Õûpg† ‹nš~…đu¸ÜŪĒÛaiˇ‡ÛĒ‚#%FĒķ]0åŅ\ܓË2ڄ㠰}|a $dÍÂî8¸b#”TŊ@ ÛjŽl€0ϟļ{Îøq‘$ËđĐŊöƒ’2|ŧáHŞĻ@N}šū>”õĨĒÍĻäaüĩĒļ#Šb\äSc‘ ž´áŦJA•¤ŗ ˰ūĀüŋžØst4īōˆGŽׯ 2ēL¸|<•~3´ŠĀA]s…$ģ<Ā_‘NZmø16øGWŽ›ČpŸ\ķTÆÅxų°´jÍßŪĐŌrļęΤÔH+ĸՓ8ŊDäû|Äø66ZŽŨV cÁØKâ[lŒĩy¯ĀËŊ|#›CģØ+SßmÂ֕nŅI|\ŸFCs" DC˙-I–'†UxÜOÍãŠŋ~6Y‘ĶŖĒV“?"ņ>ҜĩëjpÚũĐDš†˜RŌŗGēŊ™,Ô3Ĩ×°z˙,ēēJ[VZ̰ß=,=˛>Ģ\ÖįAI;Ã*wÖ],Ëī7ŽsUéE‚,äUá‹É!¨­TsDhīä7`ãŊ<ˆŒ•ōNgkąˆ%C*ĨĨĐUü“[-†íh/ ”đĖU7‰¯Ģ °'l˙ûÔĮcŲhĘ1b‘™ß;ģ‚šQØ1c Æųĩ@ĩĨ8JŠŧËčĨ'ÅŊÆŅGŖ+?ĩÂcŅD‡Mŗˆ-āč$TC 3;W?i˜ģ…ŨĖ‚ …ĘŦ~vxÚōi#äÄO=éD°ŽĖ×ūøĶ#;ŽúŠw—”ĻSŗO]!-, ”$ÆäĮą&ė4—fËģĄ–ō~ÖZĐ­õúŗ”Ā™-¯­&΍†K„[ŦēīĶ+í1ūųģ,ˆVrtTᏛŽôŅŗį ũŪ–¯r 0&cÕ­ķ{f+6“ŖƒŅĀ*Lŧ^@pŠĖh>†–üäCą*ĻTũE„î…•tĶė䌱PŨŌ⯃ZLŪå3Ŧ\A=”eģÕ•?œâîģô‰\¨ķ-€hLpqĸjŠÛĮĸ^§ļ*cА$ē†hĮîÉĻØŨT:2R3ŽHVXÛ­î´ž„ß< °žëúŠæS6G,3÷„JFo>u@ŗj Ab–ÁÍũīĨ  ( wĖÎųKÉdĨE;uĀMŗ_Ōŋ|ĐÉKy€Đģ¯'ˇÆ?.ÕË5šEƒ?~ĖŧĶdų{j˛ņŠuíĐAŽRÄų†ÆNūųB?ÖBŽmö‚Yčky܋`˛9úā„āŒÕœŽ!ĶÚčüŌsq؊ŗW߆”ÍüųÍĸ}P¨mOŧdø]Yq¸öĒžĖ^ˇģ82 ]ԗ^T‚‡÷ę–DpšØJ” 4Õ<āœ1B:šu<ĩt]d§ W,íå˛ĨU™į]9;d •ë—Š)™;p’Ą’4ž††Ņ˛ņ‘úČMÁž'ą_O ė?†j+WéŊLŠ„„ SnŋĢÚ1–}:ŌČVČ{ˇƒ\ÉĩáŒn^ÉĨkҐ´ÔžĄ7^į,I{ēԈj]g2īņ—7I›mä×ĀJ8,n×DNÔÎūŒÁ(ÆÂÔĢ?&r!r•m´Ã/ ŋŌ& V/ĶASõA;ĄKîčÕK÷ųO?.šĀG^< jļ4 8ޚ)|Evđ QŅpî(=eŠXaíŽ9ą“ãļŽä4ú &ۙ9¤ZĢˆ ÷3ļČāܗą 5EnÍ>Đ[!J0˜&XN`\gĩōĖfØōCÜ0ëÎŊĪũĸ%úv€^¨ޜ\āā8Ëņų>ˇGæb6_<ĸ’ZŠi2ĨIž,¤¨u°Ģä†×Ģ•Ķö˛ãW”¯ÕĨ>adÔīք|>#Ā}-Cŗ=LFœČQ*ž$ēr€ŠâåÕ6Č=Įˇ{?4vۍyį< HY6‚_n ÜP{‹ÃéJŠ\öá¸ŋ5øĖÃëĪĀáœŋ:ięŦØ)̚|ŌFûˆb`‹‹…Ú_L(msŋyų•IA8ī)¤M%ø õ‹6ßj%Ōáēp˛b Å áŸæ˜I8xh}ĘĩHƒÖAėÎjģŠuąˇŽCä‰&[€é˛)5‹´čZÍrŸtyÁ|Æ ›8flŠ}e!h’îrcxq 1~ŅW˛”ņœü[˜lĖ‘a,uocˇīe= hã§ŖHBŲÕ+>iĸiĪ쑞ũŠq"0ƒpŽ ĶۘúëũhÜ1+9ļ:0‡.ã¯˛2)9\zŌIė˜Ī^(Ëá#ą§fԅÚ@ĸ‘ĶSßB÷(jŠŨģTŧIöĨP¤&jŗu[R•(Ĩ^sÍúsĄÜŨpZÛRœ4čđ‘qĖ™ëŠŅųĪ,ס×õÆoˇ.˜ūģų8—ÍpBÚŗC~0?+Ø ø Œq0ßfJũw’ΐC…–ˇ,ũeĸÖ­1Į8ÖMZ†ī—ė™<~_KG͉Gī(ĻÕĨQ‚ÂúęÜDé¸6ąū^ŅėŸÕēJhoė-ŋĻŗķ@ĸŨ;Ü)Đy3w°O]0ÄÕļ„3Ė‰Í„šųHđnTĨū*Āēĩæ?mšļ Ž ũ˙]ąC2ęËLāŏaŊķ …‚@Đä zîąīŦI•ũr26”Q|éŧŌ8ØZ†×öđõ°#Úĸ‹fČßļ9vøĮü\ã"Ĩ}NæPlÍ}ßđUš=āíž+gV}Øėn, #iąÜ9j”Ũža9(VĸåœR; ûE÷FĘ´Ž„ģz´ˆ ¨ü¯ë„Īĸļˇ,^mS¯5㨁[ônD†ĩČjxúÄ%Ŗ…;ččw)*¯Č­U!H710ą(eÂL`Û{ĄÆ‰÷@*‘t mVæÁî3ą#ķ3ģgĢy×Z1ˇ:í[īyo?˜wih Ī/UĪ\KnjfcŌé­7 rįū06üÔRĶÉÖWTĩâŋĖVĘÅēŽpßē@˛MĮčėĻæYŋF×Îĩ/ŧmÕŊI#ØNÜĄWïÃč>n]‹ŸŲštđ´d,R(N¸y,|P.Ũr'!RŠŽĻļŌĢŌ=Āû~q;yŧ¯‚ņ6á ōíđ”ŋÉVFœhB äҝVÉZhŅ.WOfø˙"sfŊ]UdWđķ``*}\361ʕåîâķ`W„؝ ĮfæÃĶõîę†Aļ7Û+Š Wiē38äūcŅŦYÅꋕ¨Ę€ė§‰­Ŗ†+EžP3wâŖŅØ.å/ėÖGjŧēÃ! ’5„/ĀŊ7X€N<ŋ“rûŦœnC'ŖĶQú¤B”öׄ†1jBļĒŲÁĪcÖ>]{ögYE;Dŋ[pßČϰ#k"5Šp˙MųâÆo Ū„šRčo‘TēŪ܇ä"š;=AJz¨’ŋÄ^^PĶpO,‚ÕԘķøD:č‚$ĩQü„šžtˆ[=MRØJ„UͨŪÔ$eU¯Už?LŲë&ŦMleNw“mûu„(­PÉá\Ž }Kš1X)ĨZ§ÔKįuŅÛąķ 0îī>{;Ǎņƒ…Chc[uĩœąlžįžŠb,Û"†,õÅUס%@- +xGõv–ĘŪ{ˆ {Ŧ‹ė/.ãôēEė…ųÃëžܗ/])¤äI;mŠī•ÉË=û8ŽÜ0^Ŗ_lex˜ŧ@Áâė•šxÖ!–Ą’¤ģWĩÚ`áÕZįåĘĀ–ūa¸`{°(č— •ėît”>*DwOÖĪí­-Ņđ„ žûøĶīâ+čŧŊz‚Îb™’KúW67,ú]XqPsžøũĘ×īũėą•TFÛæ¨*ŗp€šĨg÷‹ÕGiķÛ åõrŖ“ˇGˇĮUĐfq?ÕĪû ŲV1 >åÆ&ÃâdVQIī&×Á^Ŋmš:ÆÅI›%<~|!.Ã}ãfm”į¯ZęPĐHĄ~s|›PHÁÅšŒLâ!ŲîVŗ01vŖ35;°āá;zB"îŖČU;ÔJíf čË͈ęŋd‹ʘϤíŠev•>HnĻ>ŒĸĘ]˜J-WĖ\@fÉbī ŖdļĢ‘įÖˇûë0Žķđp‘†"0{;žėiCŅŊŖ$c]ĘsĖ7˙‚ËwgKŸg'ö}ņql7,Účß@û5‡Ķ̀p%WëâK^_Õ'̍2ųąå#eDžÉÚ[ĐŽøš|ĸÄÛ ãoGߨ™×'55s>Ū–‹;>0āMËš{1qȆĖí…'-ŠDũĀ&ézáĪņSžį9 Q;ŠU6R쯭;6ЁkĄžáŗŽˇ˙@ŅŲå—æôĮ_›ŗ•ŸĘÍĒhtŠlŸÁR,ö1ÕØĸ¯ ļÎ#CŽįÚy}ō„l{gā’U,¯cY@ ļfÔ Į‡~d{DžļĸpPļ‰˜úSÆ Õi3Œ!OЉŸr3°ÚAÍŦųŨ_2ˇeÎ˙C.$|Ëa ÜhÆį,įÖĒË:?¸D›|×xYĻôŽ_,[ĢrV}üW™‘$Î+ĸNōxøņ ũ䎚ß0 SĨO)„qUäF`ËT㊇S˛YâûâO„'“ÅŠĖÉ˙§Ņ`ú īƌ§—čBÉ*;MŠŋԇ%‘J]@PåĘ΁1žęņü§I,|û˛J 3tģF|ĨĘ„ bĒĪDW\J6dĮƒ2aÖ(n5vŧ‘Ž ˆÅ’Û4§’ƒvčWu•Iëe ûđ%Ã0íīƒ0c'6Æ(Ahi:ŗĒ‰V×H2”ˆŧxûã&æîļ‘>gų¤|˛aBw…ũúõ‡ynkĶ)Î`/˜iđ\–#8!‡É a,é ŖķëOŌļ|ĨëTY?šV |÷™@…Â.=ĘHĄeĩH č(õįĮKp¯ŋL[ëžn˜|ߓ˙<2wSŽ@åzā˜Ļ\á ,-S0—YŖ× ŊîëÚĄ9Îw0CņEō Āc8 ĀŲū4v¤.Zū¤pۍ˛‘áĶ’ëī^Ė"}[CP€‚*hį.í,Ô-螟ņ%šŠŨĐ~qpDū öŖr"b—°^†ÂŠ]J‡kÚĄģœÜÕĀ“¯™>ŪíY=Eŋ—„žøÜæįŖ8ū,åõ>X/‘`X@!/‰ģOŌ)ŦwĄ#,Ôb!“h›…Ģĩė°)ÆųÂÜīx˜ãW›ŗí~Ģ0ĨQ“‚Pz1ŋˇũįŅ0ąķ]ŅåR|‹WU9ž¤:§+˙ĖZi7üC':˙KnvG~æ™'§b+•”>?[]ōĨz _ü@ nļ;ĘJŒÃÔū¤Ŧ˛I'f‡Ī ÅĨ“ķģ/ŗúÎÁúŖā¸Æ'#•°Ö0|ĨĪŪq7™BF_I@øģgëĀ ˜ĖÕyĩnr+ëvˇ03ž9C‚ōĀé?mÜ@Ą~´3ĐFšūq Ļ öŲõč-°Xíåėĩ Âu"Εwf/„ŋÛNžœ÷gÎlēPŠ"?ä€]™Ņ‚ˆ'ũˍĶ[ãĢĶŨÖ=z$H°‚b9jrksČR`ĄŦŧT_Mø"ŋ•ÁģYß°›Ū~Ķņ˜ŪõJī•: ēKā`@܃l(üšíOŦĻ >PĻv˜QüžZK¤Øž›ŊPBV:í$Ģ1JÅ4hŨʃŊëņŊˆ‘”2“æP§Btn°b¸ÚƒDhĩ,§ŅЧ­HšMĩ'xˇąÃĶĀ1qxĸ+ ÆwNˆÁæĨ?ĢË ŋŧeīšįzC9ëå3NÜÉŨ¤4‘ķŸt3ęašjŧ˙ ÄnŌ@ŗ‹”.ƒŠÁŠy [_<ŌĄ}ĄÛύ^A q/Tt2§ëƒû-:ōŧJ7Í|MÁŽxmãŌסˇÔëúô+É$5į¸Ú´ÄũÜVöÆ RėíķÁī–ÃŽūw[߆°€ˆ|ÍĖ †UĸšÖŌewõkå1˙j’æąŦQęē`ĘBy×`m =cœk´ĸöÚÕÔũ E†ŋÕŅmÖĸ:’g’a‰EÖ}Nąga¸ôūÂíĶĒwwW‰Ã­›XŌ|GFŸ€~Ú˛B -.0CíâŠCĢČ) ;ØMtœj Kue *ŲwÛwrÔSž8ą ~JCD"síŅÜ Bõ—Č&nrd0tFŨ$ĮuĖéjčHüĶû]Đ.•˛uĖlk Ļųúy2­šėąĸ¸25[PwÔ?šĢ†ĢaC}bB,<–šbĒ}÷L SWuڀfĒ`æŠ'ÔŊ:ģ.!Ë2<ßŪčfģŖ j9()ŽcÚ­ŨŒčKQ<ôŌ؁X{ĖOœ(+ ´ŸãÜ%ÉŲģƒSéMJ/š 5˜”Šy6š×`9IÃ8ŊĻbõé YEû ŊÛ‹ĐŗšÚ´Ü]¨Ht¨įrŽ^*¸ ŧweŒˇ%ĘQAcđ˜¸ĒąP™Ekg\ßqöđBâ27 "ƒ‘Ëo-`ĖŲÜÛįZ’‘%ƒü)bøĶL‘ÉĀrúˇĢ(*?bzŗ9´ø@=ņõ Ût uĮúOGęŲ…O‹<æšĪM°+Į†äGŊÛ3ęcÆtŒA‘æWÍõäĩõÃŨ9ĸšpÃ:.ų‡Wđ3}õi/BûĢ`*m˙2…}' <ÔR›h/fÂu…Í˙#‰ö-sZ Ņə^^Į7ŎsŊ˙GÔ÷ë§ÕĢMŽ”ķb_R34Į įE).zŨD ŒâąˆĒĩ:×ŋyÔVÄį4ÛĖöŽ"\&ŠÁ(āüâåpÁ°Ø. …Ŗĩہ ú¯ŋûkl‚|;Οv\o2ŖU2hņ:z0ėU.öÔøĪô]Ŗ–CŅÂ^S#5JXIqôDXŠâfd،0üSĪÚBDœĶĶæ]­ØØŧK¤BíĨž¤ĄV ZC ĪHDˇû¯Ī… D| Šä‚Đa9ė"`ŌO'ąē­`ŸŊ–úúĖSŠŠ/ų[Ęn2Ũ*t~´ŸBøÜx° a­—Ąō?øÖ0˙82ÎĪÅäÕR!ĶK [úú "*Yi÷§Cdoß5@˜¸6Žx–5Ė=Tēv.öŋÄđiŽč[áFņøK%0¸é ĩŲh Ŗßx1ŗÍîÍzĩŇOųl€úĨM.åĀ÷Z¤|ĩ¨¯>æÁzdt>Ė‘öEÔĖIųƒŸ-GzwØ%ÉjŸšhH0WL…l(éæĻĖæšPåub3‚ėųdğjbLā ÁI`n|ãöŋū axųļ-ĸ æĩq1Ŗ~ŲŲŽę‚zģō;„a“SÉúF<€6ķ}ē6Ô¨bŨ@Ļę‚7$ .~ō< –h,%@p[žũ\NÃü`=ö¤ ¸ îžk`ûPŦ6æšw͊“âÂ^Aę\04‚|9_ätąĀ{“ĸë0Ž´æļ_œˆ˛ėՂ{(ņžPQ‚†œÅŨē N‚Ŗæ"TYĒÜÛņã8X 6œø{i]ũ‡ĸfˇæƒņdcŪŊØč˙.¤PÚnl ߉Š?X'KJIũ Ų URņ ôIy>vTäËÕCøŲT¯jc%ä˛ ē¸ÃΘ^G†îŗ cĀö@‘Õká']ŽãJG˜á€ŲĻ‘†QžLō5‹$]ƒĢ=ÎŌŪ+N“¸×^Ōt 0íáHēŪ äp‰‹ĖĢĸÃIŽƒĸŋ§į[ÕËPĀ„6vrį“ß§5 û”Ļ!† úâė’¨n†u;ä,ˇ rĸ››ĖŌ| *|ôˆŦļkė˜wNJ>—*tmĒL’wrJ?_Ò^ˆœ Ü5¤zĀÜÎ'1íŠ|AŨJŠ—ūĸäâæÃ‚t™9 •#†)NáÕ˛ßhē0ÃŧGGF-šũ†Š}öĶ`”jŠá ƒ(G22Y-ŠëŊTßáuô\›ĮŌ™`>& Ũ$Û3cÔSļžšölá¯æa„ąM;˜'“ō­Ja°w“y%”Î+ųbČHô”-ʒlΞ^×#™t,Ā įö{bĒ’ĒũųÂh˙$.#j…HĶĻē¤û0uĻeŊZoƌVéf‚xˆų,E÷Ÿá1§|–F‘]ķœáŲoߘĀš‰ßm%VÄ•œvö{˛m ÁųÛLâ¸Éļßj Ē,Ōüöã‰ō*Ö AFĩë“ ĩK°-|ā˛Č˙%Ŗå^ü*\>͚’˙‰Vî6ĨãŨˇ¸ú8˜ 0"Lŧš^†}ÂĖBáÛ qîĐũÅ"âMp´ĮáCæ=‚A!›äå.7'™ŊŦå ūŊJÍØå´=€ÁĪŸējg;OĄŧĨæSØŽ ŅRŊ‡k“GÎøēđŅ0ꊲZÂĒ5{ųTĒíJæsáPđĩ€ctÅâ9l‚zé×Ãw…ĘęXÜ÷ųž•BG|ū`âÚPÃ|ëE—h4ƒå¨Aú@îöôiĄ >n'›ŨÎí›ōĪIØZÖ; Áíú+€ØíąŪ+Nƒ‘7Ė'dŗž˜ˇ zŖ.!GŽ]0>Dč+éüq H|`=YI}…õ:2úéĨŸVËŦ"˝BąFMÜ3˛(vH%ûLMC)ôĮō8Ũ]zûž$čæĩų"lEÍ+Üjˇu\¸}u)ų6`rųp¨Ī×0ÎöŊ įā$TđpúS%ņÔZY‡Ģˆ*ĐdS{rA¯š ōîĨĸ7 žŖęņ Ē—ÄbūÁŅëJĩ´ė HyÕʤ˛ŧؐ° Ļ'×ôFēhę„úį’üBī`šŅEėt6}ˇžFo“zĶVž}ú ^G>cåĐu¯4 ‡Ú6mí@čz5qC­81“Ž‹å? ūēĻWŽį?m:,ˇ›5Ą Ķې3ŽüāänNd€ Åû„č“čĩ‰ņˀĘîl—W”Ž: €‘ĨëŠÔļoâõFķŋŒ…œ’ŸŗiG†v͇DĮkvëፒKķL gš!ģĸøŗČžęJ]ėČsJķAŽīāH|ãĶ  ?ë Öh˙ ´/Ŧĩ=¨/{oTáL›&΍¨¯ūéSô‘Įė‚ģī$—ŽDÁ€­Liz|ø{V;Ũ—Âōe_‘˙niŧ†Á BĖBÕæŪčÖŋ!™„ųäÂŋōØLõŌŖ×=Ā/Hz¨ŨĖed”Ô`ŪˇZ’GE>^Ū)ŨrĘjNۚb™hØc@úÉt'SĨŠÉîu€U° É2ÜŲ*ŧÖ+Ūúx•Ņt+ FžaEQ¤ø„aÅ`ęNü)Az7LV/6§ˇXcņÉO ŠÂN ’gĻxŦi~`íŽę›ķ& ÍÚĖLŨ+÷ĖũM¸W…?ēsŊĶh´œ|…ē]ë0Ŗ(ileĨŠ4\?ü‚0ŲXëėd?tÜ'××ŦĮõ Xŋ>ͧ8 ęŗS÷Ŧ{ÖúëÉ å!Ļ8\$H9â>ĖųiŠ4=¨É°ƒā>ĐßŨr]öfi%įļšŊU+rį’ŽĪ>"šOÄÔ!E%+ŋBS+Ģjƒ;3D‰ô_Ļ*1JÄI;’WĢ X‡[gh—?h§TđŸLorö„ūĸŨĖ")ŧģŨ8ŋkŧnPđzxeĖÍīG›ÚwÂ6t˜ō = ęm4`JnP9ßlãZ˙v€ëų"‚ĨÄŌ<šĘdyĖNœ_Ĩm);ŨdÄČUĮũ2Ø.ۖŽ/Ήđ˙Of9š…Ķ YĨŒņ`đŽaÕû1ũt\čŖ7žÅ(åđUOüeļMã6^er„a^Ĩ˜ŠņxV¤&<$<GØi? â‚Íp—íŧÂÔBÄNMbæßÄĮąaˇÅ{ˆ%D 2ÅžĒšū…oÍąŅčT vz“ŽėfL;ƒ:ĒbPČ+Ô[pĶåæF¸ág‡/ŒŌée€葝Fú;īlę|´ODø9ŒCŠŲ@8Áz HßZ~Ô`ŗÉ›ęėÂ?lØaTMĄŸé|+ĮjžuU=>ၐā¨eÁĄuÃb ͰŸ'žļŲdĮDm7r7ęP‹°ÍđĶšk!XˇŨF‡ŪÔpĒԀčĶĶ[‡ëŗú˛F}Ŋ‘ŗĄ‰ AœZĶ7œpë;æĸėoĐš ĐB¨‹ŋgU…ŗŌ Čĸ Q< ŊŒV=Ûē ‹„´Ôör-ÍE^؂P„h@ ŠyWq€§94%°ƒæĒšĩÉ[ȝ%v †VĸíCöPų\k˛Ęéb5Ī(pŠI> `QđļRôŽ1ū-ŧd$#*næôĻ CŒXø– Ž˙%Ŋ›8”ŖzĮ¨ļ)˙ ĀO˙BpŌŗŨî‹ ŋoŨž›ĩÅ ¸˙U+ŧũėušãŨ Ѝ1Ŗ–+éŨ]ĖŦ‹ąe“›ŪØÅŠ'đ6zŗ5,˛ ‰ČlЇ1‡î‚ũINį<įŽđg=ëŧ8Ųđ**×aŦë;b‘•59‘Nđĩž @pÎųy*ƒā‡õ{TWÄÁ0îk‚ŨžĐmaŒœĀ—¸—0ŠŽę‚?DCŠž‘"ų„ŗY”hĖBt?ã6ķd,Ū$Œ”ĀÂTûđš]ÅĮâ<‰Ē­¤…Hŋūģ„/ÕAWĀąļ …ítHĩLč%=^ą |m†Â1JøxåL‡Û“ÂŦE mũ]T)›oÃyˆļzᐜR:žÅ¸%hĒú+€ãŠÉÅßž0—Ÿs†õRãÁ÷%h×ĢĘ €cļU1,ԏ¤°A ĮCá÷¸cĖ‚ã§a"gũĩáÍŨ¯39=Ô#îæ`>AÖäëdÄ4ķ•2`•i˜ŗhķŠEĸúŋŠŋÉÂÜUS…Aę+ŅOJm\¸Î–iģČ2‚‰‘[VŊeƒ˙kcø?pXÉįŧaLųÜ4ü[yŸōąĻLbjëŸ'šÁfÖ#ãV‚/ŸŪ“qX&ERhZ ođŋÍ.Xa Æ65wÂÕZ6 НUo”4U˙܍¨ĩ´8*:Į,Ä>Ö 2Ė›ä˛$GŲ —ų,û;Ę-)ëÎįōŧ˜,ô†ōoDÛÄĖ?x"Ī;áČT¸˜ÃKf¤Ņ‹X”Ęļā‚ŨUÃE¯ˇ9\ já<˙X­ELeAÖãˆO/÷DᎰ'ßĖH—&ØĖŲ Ą: 0yNĩßUą¯T8pĸŸ *_ZTzˤđĐ1nÉeĪ÷’Ã@\įīčq$p*čÃÂä+„–4=ņM¸(c%3ČÛīrÚëļJ-ƒÉ' ÎŋĐyėw˙Iŗ-mčĻx;xV}&ÉūøØæA6Ģ\đƒ6Ŗô‹ãX‰^˛jÚæoˆƒ×⒏­ž9+āž3õâŗIz>Š,qRáĨJlÆėņn/%-hxģwh PŠ\e{ÃæŦÉ31‘¨>o•uz ‰˜Ō¸éRáNĖģārš [쀠ŒKr€đ‰k—X5Ļ+žˇq< lւļˇ7“NČ@‹ (ÉŦĸM0풃Č9ˇ;ķōĻw<ŠÉ*i_ųëtjŲCŽdúØĒmhĻAŖĘuh'j6æāŒO9¸ÖîHNˇMĩ߆°dŲ2ĶŲ#+tfŠõtVסČ:/Ī”SL÷Fŧú6áŠÍh}â!ÁĐ19ĒÂĨ 7ÁãwM${ŽĀ …ŒĖUá{2ÁÛtžČV^‹q‚ˇ_ˇfNŗēXBŽfŅøV"0ŽšX@ĩŦŲ,Še`âyėimN q΋,df›0­ãUF{sQæälB?å9ŋØĮuN,ŲĀČ{Š÷ҐŅcéŽÎF#Ō„ä,˛„€Ēē˜Š˛%’ ‹šs•Ũ7‹)ŋ{krķŅĄü0ĨÕöē<^f´ûn°qWm̀EßvæC!ƒ?ېpF8Íx˙Wn^õĪšũ+ô™@2^r´øļũ^8†)iŨ…Ŧ >5ü÷iÔĪžÁ HúuŠÂöÛŲÃē&™īî7L ÚVʼn|ĮTnŋChûšEõg_ĢUŋsÖīívdēĸĩ•Ë@ģ“ĸ‡ú:ã'ŋКŌÛt5ī/Yb€æQQZgöŌâp ›vŲĒ:ūuaDî\ ´īšh|ŸČ-hRF't˙ajv›œxąĨYiL’ũōeM"!ĪÃĒŅÞ^VₐËÎãõMØéŪ ˛ëw¨œ‚bœ kĸáĮ n‰ķįX>,×m\d' 7÷Ė3!% ̝,íTĘXIēË(ôËD)QÜŽƒcRŧm)qcŌM•—ŧg‰)—Év0“=Hą‡m i ’B'#ÕÁGāë‚Ã\F5<Ū‡cĀr„QMĄVđëĸ…6č1RwÜwųņęD[å@?TwNúc lŋY$ĮHą˜‡WG*6„oš×XΆ1Į|*=z*ŸEąüp%˙ėų /WÕnMÍü.Ų;&éË9ÉévËwŪŦwØyD}ekßfeŠ˙I `~X ܘOÕÕ÷?ŊqW–Š…ŸĖ07øl š ‰1Œ &ŌĒrRāA.*tmqĩ0#âÁ,Ē$^ÆGˇlFĀxzS1ŧĸŨ`z§°Ā5ģô~¸J˛_„&‡Ã[ā ĻЍ’ĩŗĢHŨÃÍÁęĨаôÉG&o>PĮ äR^Ļ•‚ĩŖrî$w†@TdšnÜŨą[ZāĮjˇvëŅĖmގ§<*˙X ŨgŸĨq]0L€8ķāōA¨­ÜˆÎč Ŗ"a(oā¤) ß3(éB+îžm'ĘÔžwxh 6  n~Ë6ãë…ĒLb*v4į‡4¤0aΞžę}ųĸ;[ģę @ƒĶQÁ#’„{vøl}HWĐÃ_íČũ‡ģ“ßwĒę6ųĒhޜô,ÃU[DÔĄk°uū‡ŗÃāú˜4`?$ĨؐeÉŦmvė€ūã'ĩKGXײ6™ÉNr˛¨Ē…Đią$íDˆ>õÉËģۛxĶ|‡>Ö‰ŠŽ× Ũ-ã_8vĐŲ€FŒa\zíņ¯ÜW¸Œf?“€{ Sq—¤Ø”¨á i˙nžZ¸M¤ mL€įSë] ĩP–)p‡ņĶ\Á΃Äl;nHoÕЕĨnEĢZŒ5XŅĩOd˛<_^ƒ11~ᑁųdŠĢ.ĩzÍ6ĖjŽÍT°{E4SįɓãĒ??xƒ¤(Zœ…ÆĨ“6ķ•ųr^uŌ ,Ũ•5ėsO?(ƒđS—†ƒ}€?R!Čá+?œQü0§Q•@o ŊĀ[ āŨbėĄ^ä Da“ņ@ĪÎPŽéZžˇĮ˜4ņ ŧ ūÕČ:.‹É´ĄD ¯¸mĮ÷LŠĘz/f€`ÕV¨žV°ÜC¸c sGOų#fGMtöŖ’50’ŠéIķŦõųņmRĸÆüTäē8¨ķČu+2=”2§”TÂF;ná’ēmˆKĖÆĨōb.ۇXÃIÁ.!4yTąĖK‘gÉâĄ]LxĒąëk3M,Pâû4wÅAÜ­Įž+‘sЊũšāŦ÷׌ãËûč17ēsОãČn–€lŪŽĐÅz}éôŠn:ģ‹<(ĘRöĐĸē…đ˛’áŠŦōüžq{Œdģō;íg=z&]ÜSF üøļŠ!ØPĐfēģ.ĩ’Ģ{xĮ9Á†“ˇ%_æ‰$+Ayå¤%āXü+ԚDÖ*ü{—3dØLă =€u(ĮŪœ™ĨŌĸ¯:-ĀÖÎĖf§&–‘#ą ×•čŦ:“ ´ĀąIÆ7­f'éæĒŊ7‹’+cĶYá1ĀrßĒäë :õØÃŋŠŪ׃ŪÅĪ4v1ųa> Nų!îSf-ú”Æ˛Ä„§ōüž‰ë™•Īą g"včގŒ„Ĩ”’'ˆ<āØŪ¸m„ōșæ…ģtĒ-0K …Š(z¯Dvđ¯sæÆ€;MúēEUOMt+~!ŽÁÛםSĄ?fĀTˆ ûRY´pé¯ –„z•˜ļ*fņŊ]LÂFŲŽõG€3SŒXTqÉJĮŪČũK[0ČŽĮvéSšásÔ~˙A&Č@œÎÍ%íĒË°áDÚt %ŨDAÃKōZ1/YPRšZ‡Ač>˛ŨûšĖM”E:$Fd' ę¤fîū„Ļ5r0:æŲ cĐĐ^ˇ°čd2š#Ŋ %u¯6Ņ™­pž3TīģÜtŽp ß\ŠÆ4:Aqƒą"€,%X¨‡Xb „–c›Ęb†¤‡ē,mų˙€>į4Á ë| ¸ŠÚa cčĒ1 šŅé“Ģ•:ZČą=ųņ€P:/ØD"aˇk’ØéÄYč2~ģ‚-sŪHbgÄNŨOá?$­$x"ŧr Ŋš´ĨvSnlPĒxž¨ “”ŸŊL5§?NųļęP 7øą–œŌāÂįo~`ĘPxø›' ™7„Ą FôČüĄ(\”Ckę U2•˛l‰[”ÜY‹ūī‰mķ g ÉЅß8žæœV´2 ėqø›!Ø:’ąŒ‚áq× ¨ũ˙pqRSØ čŽģlĒ“§5'Ų>ô~BŧĸZ4¸Žš@íŊ“å&ȡũŌ}ã܏_勞‡ę‡=ú/HĪ%ņîTé7Ļļ×#(Ųå/čš0ĖÃ5æŲ›#æöCŠ i92¸i%Ž\oBî6Sž?Č|Ķ<–Ņ>J€,/nwUāR™ļMüŋų >1}—WÚq;cŖÕ\oŸfn ŋæīúípÎj^đ.Ũ†ÅH¨Î%E ‘ bå8‡ūô‘-ß!wO­O¯€]Š„`ēŌdæÎf¸Ŧڝrģ˙\ŋÃ]Dė°cž”hŌÎۊi‚é3䐎ƒā`.UģŽ4úÍt)–•įq™œĶ2õ’™’õJuĒĪõ-ī[;Qwpâä†Å‚ma—†ąq3Â9í į•šŦ˙LCœ‡3pž#:”lŨŦ´˜ÎEÚĻtáĢYÉ~<ŧMr¯ (ãSaŒŠÜO&x*‡ũFüîÔĀ€ŌQîŽdŲúíßŖÔæÔ‡7H2É~û€í˙Z’&ūÃu˜;y[™Š?|¸ãŽ 1k‰ĸĶm÷é$TöĀ;•ÖjÛÁ'NÉėûBečŖEõąá{ķ9Kö'đn.w%˛Đ˛™Ž¯šj€Ŧ-nĘׯ)IG’Ÿå1Š@ōĖúĻ˙m8my™}Zu‚…\Iŧ2ģmHņ,¨…vën€W­[ũcĩkwpĀĄžˆČÚs-¤į‹¤ŖÆŋ›A9 x_›>ŗî"ļūēæv•.Üp.ĩyžđŖ3¸§ŊŒRŌā=Š™JÜvõ‘‹iɕ@Zm˜” đ*ƒž=˙,Ã˙Æē~’0Ãļ¯ûŲÆ˜C2]ˇ^E_ÉüllÁCküžĘ?•ˇúå“õĶ%H7˙6éûķkR7`´7Įåĸ\}ŖčļŽ´sĄŨx1Ŗ@&;äį“&ŸtŕëNę…!ņ§/Ē*â[‹ntv)0ÕéîAčQŗinsčhĻëī6“}mf‹>8†‘IĨ.pō¸‰ķ—A1Ņ4åŽˇb´kl¯ Ā߸ M nŌ‹Vë úå R¯Åøƒgšb ‹Ĩ‰đo!NĄQŗíÎA(8ųá"7Wå{ÜŊÄô稸%~˛D%:2áŧī÷_"Ä×Öģ,Á0ņ7#ŗNü‰ŽP˙_×R°bÆö÷ÄĐ0F„[ ūvą"É…t>P¤ģįÄĐcĪĨœ—ČKŨږz§[Ëö†!Ná‘â-"~*åZņéŧúŠg™ũTy–Đ掞 ¤K=Å~u’\Hˆ$:ûgĩÃ2ûTœĨĮœáĸv>§c3,Lųī …€V5 z ˛ÎŸė\œgx5 kN›ņ Ņ=Ķĩģ‚ųÂXģŽo?ÕJOīž lEŽĮ‰?ĩ @iW‡)rT2HMĐšO=Nœ™ŖŽž_oRa”Î 1ø­pš°~7ŧ7vá-ŋ.^[ .3Y…!Ꭷ<^^ˇ*üůâĢõÖˇZ|ʓé8Į]ņ´áâ16A–ģN„éĪi› %û ŗ3Æņļ­§¨ĮUˆY\3œT÷ėĀÜ ŋāš€ģÆŨžbDį­ĸ’î ŧÛHôU§~_=ëĀ]ŗ_#‚SĪII ĶŖŌ~é‘+AÃYwCˆÚˆ80Rd<ļôĪųą4ĢíÆãÎ!ô%›Ÿ=ĸÛģRČûF#ĨĒ?aís āHđ!Š„ØŪãb` o[é´+ŽŖ¨ˆB‹ma&LŃ,Æ-lfĀÎ=‹ķė´1ũÆWQŽzÁ¸eŌö/Cí:>ĄũaÖéš! ŦvŽ@SŒĸ5]’Íĩ—\VŖĖ ÉS[Ōg‹Í$\%éôKžŽøĒ…ū5Xå“iËģø=öR/Aņė,ÚIËūöge;ĸ™~ŦØ"6įČûļä}:BDuÄkũķž ‡1ļƒĐE¸|čxĘQ§ÂŠLC_÷b{Dwŧ_öÚEˆÔm?­Û%ôđ‘|ÜfB˜ß6#Œ‹GŌĀ~!öE€ũ$,ĨoS‘Ø|ŨÜ&‡!č°ęTæÔ]œnŧÆš?zgâæÆŦŋ1u/¤'e—ø–„ÕÃã ͍_‘ŌūčeŲ6ƒŌūšƒÁ317aQpīW#ņÛ¯Ë-„ęq Ę™1˛ú`X,?ȝ˜‡ņqzØŠcčŖ:üėh8‡ēœ•įĸũŅ÷nšõ˛hŸÆŠ;+oeŊ?Õ6sOā*Éߐ`žįt‘+ũIwX5˙‰™!‰äō÷Ŋ§Ÿ˙Ĩ_2l‹­!r5#Ģ#“ū””$Ļ8ĩ`—åõ=+Ŧē5ģ#ãē˙chi”ŠeÁ7e{ ˆm7ĸ‚LÅ^bæQ˜:ėpŨ‚€Í‰æô9•ZYuMīpŌqÆhī­Ī…ĸÃlúŦ.Ë&ej3s ‚˙h•AŠYt(Ąŗîi†5Ļy˜‡ßd˛­žÔ ŊŨķ o5īÜHMĒėŽšŗÁEČ^Æ[$ ĻÅô ‡Įŋ|Ŋ°&Ëō Ô`üĘ má—ęĄÅŒËŲVé‰ö5p´jNy˙-đu#§$ pŦĀ€ėQ2Ļqĸ“xėģĒSŅ_ÁŅP›°kû¸Ņ=Āæđ … .^øZã¯Åj7ΨĘĮĀ•Ëv:/žķÃw˙máģzslˆķHë8(••á5ūœãÍĀ'€r{ēØÚ ¨îS)CøĘĻG)Ķ ŽĢžĖ}dSŨ¯„q¨V_]ģõŌ:X)Î?ļYÜS,Ŗ•ƒM‹ąę6%´´Pŗ‚ŗ*ŧ8Š+)äąŽšBüZ…ĻĨZ Ų(Ņ`2rŊ~\b¨í̟æf:ŖŪŊtŸE¸Nīņ‡×!‘Ū&ãZ Ôc#".)úˆ ÷ôÃ<ø¸~ifwRâPÁÖ8Ö7ŽBG É2k¯10͈`Ô(!ø‡īū&Œõ{îZ㗠ÂNŖbP0‘. ĀāĐ`đŖIĒäëčõ°fhFåq÷ZOč(\ũliwë\ŧHöTāëüež7øčrŌ) ˇ>„(–ž@‰āĪÜr­ĩų̌_jļyz´“ĨAĨGŲ'Ôöĸė?J-Ū9Đ6.ãįÖ.o*å.ÎéÍ(ŪiYQĨĪ_A‰ëeŽ"ÇU’ĮÜ:īŗĪĀb €°ˇōĸvôŨõ‘Ά¨|:ĒŅĘÍĖh"lÂeÍ;dķ.íņpé˛k¯ zöcĪęŋᝠ+Lpî%ëė>Wġ‰-+w¯~:JŌ̌ė—ĨCäûØm<”ÉΟ6"†Om}ģ44'UĸĐk 0–@zëTēę]˛<Š-ĸéãŊBķdpœG dÁ֌mÕŒņũ8ø íŪesî"/ĩĶڍØļĀGāāƒX‹:đ{JsZéū­Ū“yÁäą'/nã„ƒcgKÛ;ōģôí‘k.Ū{‹h¤”ĨëĢÃā)Ųgv]ĨÅâ=¤4Վ¨PĘŇ[QI´z¸­iŪå!O.ÁĻca•5@}ŲÎ •mĀ:x’šEø˜Ha2í™ē€ĨpS6*cPŨ:šŧĘĖ‹)—ņ،RˇüfMa˛ZYÕôKļŌ1"6A#čkÖ8rų3ŋ¤ôŸ´… dkŽ3db—V‹Ž\” …Q1ię!žüiž eäšûԝųõQo‡ϓđs˙+oą?yŽ)1Wgo7KpŽh~ō:gƒÛņžƒķP@ËđåĩƒĐ:ˇBP{!j?QFe38´kĘŠmm;Ą2JéiŦ‰h\Á]OPûõÎZYûCÅ=Ķ-ĐL†R„Ųë9Hũš×úá —™'9 „hŖĢâÎnqŋ Õ.Ųá´ÃÕOĶ\ÜF?˜r×E}ĶÄš+Ã0 Ōŧ”QŒFN*Á Ōpœ‚¸o:øõÎw”fõ`ŒwDŠĢĐŪŨ*7žWHx%ŌײŠĨ9z Â‰–wq—…514aŧ*,@ÁŪŧÔXķéiëū"BFw#~¯|{>^ĸÖĮ¨žWß­Ą\¸puãˇø–šÛhŖĸ ‘JsĶČ]Ēw-ĀTö(CäĢÅôĪôk?Kīķ.¯ŗœ´ ^$EaÎf ļiXJ˛JåfD@7j’Fņ––œŪƃ—‰Ų&„=+“ŗ6>[”ZäZ• xŊė¤ŨéNŧ!ÖfåqڔÄHãzbaĮŗŗl„\ˆü?D mĶB“Ą3hTîŒDdJ@÷ģ(ūĒ׸ģ†!9ĩë~eŽÖŸ5§ANIYÖæÍa™éÁ:â/€×ä]å ˜ížCŦŦŠÕz—ú•ų´G&–׌pŊæķk<¨EĢs2{,/ēOŅÎ]t}Ļžöl‡ŋSRS5Ũ „Ž­$KS-Ô`ų_üĶYõV4'.pSĘ]|ŪēcOM1ƒŠO”¸$aŲ¯÷Ī-=ųĨ{fļÁ”‚”ā÷Āj×ŨąC^Dé$ŗēļß qÖX$ņ>ԈYžQÅÕŋķ‹Š1{šy8 g\ dJ\û#4šį8čŽLĨėÚėģŌÆd*ÃĮLŲžą´Xn2¸ĶŸd?bQTÔīƒ*÷úÂ!¸p$\ûO>”&"ZÅB‰ŊØ!Ĩ7ŗúÃė›㌭rŸģû$úY=ëŠČĪĘė]ˇ0w!劝Nė[¤ lü=öcŋč9%åŒÂ†>GÉüb6AXŅ÷ˆŦ+‡‡ļfĮŽ ĸ™&[šO+8V~]™4Ŗļ?L<=]O+Lŗ˛ņ~ ĻĖßļ‹čDļ}N’°Ĩpå˜|B FšAPėōc3@Ö!™Đk5rRŅÕŅvŒäŪNĮŖ4ˇTvDb–ކÃîƒm|>Ij'ĪâIķ]ÆÉŪb 4á3u0ß7t’sX/E $p¸—?Aœ1ÔRÉ šį#>¤ë#!Úĩ ÚLÛŽŽ|,ŗ$ƒÃoˇ6ãDæčLO´y ßb`ᨋôkĄō]— y¨ôú“=1čđHhoøW~uˆõŋSĸü#G2ĶęŽđĶÚ°XģN  ĐĪĖ8aTŪ!į\ī<~FŠŧöč\ŽĨŠÉûô€,˙E‚Q*qŠĸ‹ō~˙#Rv Įũ–=ģ÷ÍÔ Ôš RâMîÖŋŠą0zH§% ūŲxĐXú0O4´ŊŲŲĨūŪ3X Šä„coܠ˰DčHÕ ô=A/ÛFdČ"Ø{÷ą$;ņڅEÚÖbqŧügVoäXOYN+tš•P‡éޤ¤~LˆĄˆÔķ(ŧo˛œ--,„b6NF7ęČģđæŦ̟ tyŪ"–ÜRg3íDvļôËTōŨîĮAųƒ|ĐįY˜ĸÉÅ×%ÕŊ<ĩŌeéU("íĢ\ ”¯4IYËOžS‘f§\SõMw„•!JįTAãŋ–ãħÁėå ĻÂĖ; ĻÁ`Íš5ē,…IpK~õcNhĸ_#į\°ŽėĶĨj ZęÖĘ&t€ļyV‹}Kxgh”aÅ=ŋē‰Īģ™L0ļږ›2 4Eīđúa+p˙m„!Dŧ‹‰Ø=Čk$ áS„"đÄX)āüé}FÍ+ąãg,ĶšB_ED‹!‹ üβßå/'¨>GŽ(#L–øŋŒ†A⯁`@ĸÁĸëJ-@î`ú†žĩ˙,w={ŲŗīãđįŧOâžÔÚĶü­ĐęĖī^¸d‰ĻÖNŗ"Jŋ›ÎĮ]ˇ cÄËŊM/)´n6+ÍÅáäI ÛD¯c^”ãųˇŊÅ=û’HĘĐoy:‚éj[J{đ+ÃņŦS}q˛x’¯fĶ%ÆQʀ k ĶÕ=10ŗ†ÜßG'„ĸsē/?m–™5N]1ÂŪŧ}Ŧ ÎēĢ1 ū`3Č8cq䕕ŗ@ʘ ‰ãÔŊŒĪÑŨ‘t¯™‘ÃLÅâ?=]ņ{Fæ@R-ĶBbÅZĒxi’-ļÁģļđ4ޝ|Įb64š0wü˛Ÿj’:(!7ˆę<Æ)Ļ ĸ|ëĸî Aö˙pHs~næėßĒ7 ˇ+ØßԏūĪ'Cmv°ë)\ŽŽŒņzTYy#@lŪ‡éF˜DÉi#}ŧ%šHœõü'Ģ•Íj°&ũĒš uąâ!ėIčĸ˛Ļū]n_?{ÛövžŊō~ũ&Ŧu\øm”“)ˆC|l¸F>u˙x,í’%FĐōdwIŒ’s´÷čÆŽĩ0,÷q~ŖY žēہ8Ē!FË\î•OŠ{0xtZžøGN—ŌČzš‹-s]ÉV•Øa ä\´‹ŗA9xų ŧYˇĐ~úۅ¨Ÿ™Ä•…›ąÂ™RDvxœD#>–† ÍßTieũĪTĖ3Â~@ûØlũĶ$Āæŋ(Bâ}//EĮĻ÷L! #œdÜ{žÕvŋšÜZˇ5JJ*ŋųgĀMXØį9b-ûao9lm/h EĢß*üq?žũˆ`øį­Yŗ5J€ūč2´žÛ†ƒâ°&ƒAek†- 1Eō†O´Wh˛ĩûÎųÔ#Ī@gŒF]ĻØu3ŌܘW 0Dߖkb@bŧŪ ­å‹+Þ"I› –šv)^<5¨ž›Î œâ‰ŗž0+`ŠØ‚xčīPÖ-AŽĸŠ$8p ę ĸ'rĪį ČėˆüŖ;N ĀīüŽ?HëÔ<ōˇö'ŠpÁđQ:m=Ę`žēĻ÷įļNŋJÍĶđ†ęŌbw“'9ƒkė.Ÿ´!v;H!i"¨ d‚[ę™}­dŪíŋ„y:r¯køÁf÷2;ŧˆ2W…XAC+~Ē>ÁēĻ ÕyžpÛä=+Iú$įđ| él„ušEu[Æ03Øũ^Ģ˙QÄĖ$@×ę/ÖΘ­~‘>ŖąžMũ‹¸”$Š#=ņRléÎĻ‘šE#,ĢįŽę-Š$à Gw/Eãũ•aRBzũž#\@ébéQ–– čŨ%úûáÆ¯ŲfŠ×MË%ûŧģ:aCÕÜÜŊü>Xų[Š@Ųū8´íÖÁ}äķōĀ\`TPˇŖåāoŧ–m…l™ģÜ Ú¨;˜ ™hH8[Y›dnp ĻH6Ūcz0™Ęl=)O,Ėb‚Ií3äĮûži kTčĮč†~lŲĄę‰*ĩÍČčá×Īšĩ­ŅķĄX, ˆJ‡­ĶDŦ Í­­ĩ`dūäW!ßX¸ē!iÃ^7Ÿ9„ü@÷M‹šúÔ<Īōö¸–) ‚QÜog^ĖŪÃ˙<­fēßü‘ė0VŌ N^“\Y.Ļ5%ŸÚˆ‡¤ą‰mKęBíãâuÕoŊĻsô/ũ_ˇƒ—ŧ|¤MÍ4äĸ ˆQ=øëxĄ‡}6Sá—rRŒ8FÍšôk™€áĮ]:'€ ^LwL^ũ# )‡I…<ÂŊ5Õ†Û̞ƒ9K&úyp—„c†§]…›ā0ĩ™â,cQ˛RmäP‰&Œ"Ø$#˛Ų-WpO–=Ōų…Ã"”Ļšeëk'IEīaÅšŌ9ÍH(=ąģ`œÕŠËē ąĸ Šā­—Ģ7ycqÕÍÖ Ēĸ‰d1đá+(oeY'žB~Öß˙&˙}8œ'Ę/z§%”NûDkļkš*Û„ĪŽ¨‡2ߌÛûm)jåu÷vZĩ9B{ž[ĮÍØæãúlųôKŽĩ ¸Ÿ+•ąÆÎė ¤°0ôۊĮ|Ķ€ãvŠÖEbĩŧ?Ąéßs}ŋ]|)ŽĖ.<éröFX™{V Á{FÆäėx‹ĢŸ‚r‰œČ˜ŊƍŖ[3Ė*ŧ¯”ŧļûu°)ƒåī:ėŊdģĘŅ?*ķ) ?ãęe-œá[Nĸwpēšųö ˜´“Â÷§?áS*°ėđŧ]āĮķ‚,Fģl˙jį’zîôŽĒxøæĨŗø•3Ã#¤jĀÔ'×Áūų>ĸ“ĄŧL{°ˇÁōXŌוKR&ļdŅZŪÄüßßHr6ŽépĸM+ûÍíŋōË!ŗ9â–s€ lF'ÆfOR(đ’9ŗ‰îąūO|.žĀė:2CÕ'øô:ΧŠ"’čKšzBū~¯´ÖōÅ ‚'û;ŠXŸŅ$‰Ú ’ų˛Ŗ€JW~Ĩæ QČiyōŧŨĸM9Q?¸Jār2¤Šū ••všĮņú&Ywi+ēģrY‰CäPÚ\ėošī¯ąŽ\B÷ČYĮåĄ†ˇYŋZŒz;sž‡.ŋO2šœ:ģÍ™įŨB ŠŅíÂWŠôÆĀ_A>ēQ;žŨímđGxĘuęjTĸÅßé?j5.…ˆ}ŗIZ0€ Õ´LJÂĻ÷ŋ•ŽlÁЇS‰{ ~`Y&TÜ*â­Ė˜úh™ēŦDq Ŧ´đŠģ*ŪĨ×tg”œĄÁ…;°.+ūOE¯”aă!ŧEØÚë7v DYz{Æō…•œ#ÔGqFæē™ŧ.žŸÄô_Ö´Â5h€´"—FY]BĒBč~} yˇ:ŒˆĻ/áNāŪVŌĀŽ­š´ßw€Ŋ ¸´ĸSĄ_#Ä3“)Lû­œ‰G`uK9/ÃˍeļįŽ~TPO×&9A”Ë’žo‰nĨA˜D@xé}RŨ+Ž€¤¨I°`îtC# FĮæFÍvTųģrܧē…"ėL Aæ"ė=-čșEjW”w¤ž:1*§y˜qšá9šđnŽ$+íÚE#Ė–Šąárž…Ė’hÉ>‘EXnA įÍ3Iu ptäÃę6qĮëš4[Â1ĒÜef3<á0O+Ö_o˙jR+ĩŒ Ģ.økIč­‰Šę(Ŧ"īÔËéS ëo†V€5S5žŨūpÆ6ą>w‡÷ `ŧXũEãŋä3~¯ŧsē!^ÅÜī•Áŧg3sœöũđ ‹ 6â›^Ŧb&ŨØxáŌ]Sž‰Geą ÚŦĻeí= P dŧ´į¯láRõzVą(Ôŗ˙Õđ÷Ô§'zŊ¸Ą˛ŠÂ€Ū­÷u{ŸĻ Š;üבVōE€5Â;mõ7ÍĐy¯šm"ņŦd|Ė1ôlP9iMdōLØr)kMĢpû¤°=Ûë1ŲŊU1EfÚĸ:uĀįį;).†ęŗp3G'۟:XņbįœÜĩ„..Ĩ°hNTš ōX¸Ŗbē‰ÖOGi—nĩŨęDŖÔ™Ë´šã(n/Њæ‘jiT,ážŲīĩg*ŝ0ÆM>ΙWMĀąí*ÁATuņGĒD2xÜúąØq5č‰„ŋĻ8ē îDŠÚ—I‡ŋ]AS(ŠRʀÛmĶ=m>™!;—“…ôœE^šėøđy.hˇÉ2æŽŧ‡O7ЏHŨøžHd•¯*åÁø“ l đI 2Ÿâvŋ–‰ûÉ|ԘĖ1.ÁÅø‚`MâęC" pīÔ@’[Ģ›!áņdņÅú—ZŋÍķuc=Z°æų'„/•8ž“ߤƒ 4¸ø.čēÂÕ9TqOŌדú1ry/eĩØ–ĒØZ1ĨĘ/–ÉÍé—=2bw<3 {>ēēĮÚÚÆ'zؐÎbëđŽ~Æí§n}f„đēVLäZY>?ŌAB} dpr°ˆĒ}&%Ž4•l° zV’„ +Ø÷'|~y´Ģn `Ÿ¤Ŗęĩĸ&‰‚˛“^Q9ąUî…ø1Âp¸ViMî ĐS2j•Ä 6՜J°rÎ2čÍ­]wĒ”:ŋ‰J–ÜŅÄđ;xĶx°üĪcžŅL%˙ ŸŊŅfÉŸŅēúí7vé@X%˜p6cl(Ÿ>KrS‹ûú b|ÖÔ.û(’õõlxđ2î¸`!šÄ~đĨԕ?˙$UķoŪáyŠüŋ§ž˛Æģy——Cuyƒ¯=ë‚ū†ûú•¤q\ōÃĪôŨ‰QˇpÁâ;4÷Ėbö˙#Žé­‹ôdíVŽuÍ|‘*菹45Ņ`ō:T–02ûwįQŪ’÷F>KķáU•”ģ5šŨ–@(ãĶÛvK°¯7„Z--UG K<¨Ø5äiu|AyŽÉqk>:ņŲåŌZJ˜y&'¨Ũpq`p.ɗ0…œÜŗ…z;lû&ĸX.œy- 15å7Ë5ĘYŒ…öÎŖ}ôwW 'Ë'tr5ĪHŧÖŋJüŒ¨X<ßãFķųņņe+~­=;)ÍÖˉÕk@G¸.aĻĸĩČh9~u7$/`ĩ˙Ięëų˛IŪZÂSbLl]wÁ‘¤üaL̞=áXŗĖDÖ߈~ÖiÉõÆ4¯åž=iÂÅ 4ˇ ˚ōëđųš•†ûõîdŌ˙Sáëæ SŠũˆqÅí捌֤… +ya,°é'„ēA9mՊņĈŨøŦCÚčGŽ”7¸˜ėaK’ĮĩBõ>cíg!×!€.eP9YŽúæĶøGÕÔ Ŗ6qˇŋ rŪ~ģĘEzŠ īÁZ=\đ÷˜é¯fĒ—ķÜráËđ™Ũ™#.Ŧ'æõ†q~%áīôĘ{q%0] MøpāœáŽö˛ģŗ?Œá{CĀÂīeĒß$F/ |Á4_;tq,Ūs#h”ēQ(1kŊ;z(ÍCÔī5L8/ēËF)-ķPŧļ@Ķž=Í-ŗ(!'ÂeÜnšIø øæŽķĸB=Üëˇ.g¤0 jŽ9ã˝ų¨'œbˆ_¯’KÚgJŊ'ķ/Wō<^ĻD™Ãķäĸ÷~5´H'/øm‰ēĶY84Ę{ŪĘ#ēDsú!2fCЍOËÅS'ƒItT6‚hl{Čû˜ãņĒÎ.sî$ĩŠ9—§•ÉQÂu'Čũ4„;į`ņH=4ũ‘ÔI"[ŗđ§õl9ÄS•ĮĘ˙;Ū?'lxŖrQßxR2§É(8G-C}ÄĀËL?îôÛŧnܖ'åÃfŅEĶ÷ą•Ãeˆđœnî<ãhČÁŽiōTi¨Ē÷¨Ø6n{)ˇõL§6 'MŲúŽž@Ą ų겹ũ=Í?™˛NŦ‰ˇ5Ō’ŒŌŋÃæÎââ\`Q(a aļîo=[6¨n’ãä7¯xĘēĸõßH1d ›ÃŽV6!ž\’Ž/å&?M&ĄŠ+i˜üéĖn{‹/†qČŗ,õQõD…€aä×Î2—Įæ€7šÜ…‰•î:‹’h…R˙‘ÚTæėCŧØ/¯î1"Ü\ËÎÍü{Ī;e!ãôFĒĮFÂY=ŒPHú$Ŗ¨ÄfmēIŗ 5Џ,“;U9z”  i5˛ßī ę KF8En^ēA-úGzpŧ8fÎäa˙Ueņ‹h„âō}ƒ~EŪ˙=åģ¤ļ*CŨÅįT^”Z'Sæš+eX]E÷Düũ–W&!†•?0” Lšō]>ä] fÂ%‘4véNFÄfĢh-"ė h_&O‰Š–†kė {+Uę)qŨĄ…?Î#¤2՞'ņųwc_'¤Ĩ„püĩīD`#ģŊ!˜VLH-3ĢgŧˆĮĄĀęB¯Ÿ—x!B<ąuL@Z/[â•~Žô}¤î%یķwŽH$ĸī]Ë'SąrFCŋ6N&ĐĪÁĮŠ yhlH\ÚôÁ†§ C<äY_Y w˜ûŠ)kĶ:D7‚Ē”c%ÉŽĢĢĩÉG6ũMŠfœ*~[IŗOØ×g)ĩtŸ…˛YŊųGˈ˛e&UîLé|ŸiôL뿀Ŋ_íxŋũŦM¨ČULᏐ¤â Ā=’™2ōyõ\r5jÃųËŧėUæ~ęë:øķč ļÕבúĻ3›/ąÚö¸ -ąŲøæ˜üˆr¸Ē^k˛äāŧŠėŽWA1&|Ë|1×7âA4ˇq§_ÁcGlņnĒõ–S'.*aû !_˜ˆÕ@1BŽB7ÛPå1ļĒâu!4 ]î]QĘļ˙AÂ4wãl!‘#d˛§úØRÎ`ęSŠUHԟM`šËŠŅ˜‚ŠzŽŒ{“Ö+Ũž.¸c.y]ôā•QxwԈƒĨGÉ2)×$A]?ËĢģ_<4e8h=›NWpŪ˙0[˛ž{x/ä-f3GņĒŽíßcŌX‘D7I|'ö‚=Xm5{-}gŸ¨};4UmŊ=j‰Šun"Qvŋ‡JxqPNÛđoyO0—+$Ŧ­Éäʈímā ė#-aŖÃwz)vÍĻ Ī6†úæŖņlÉxu|ĐéŠ4š䪜wGņ֐qĖCã)Īyh\ÂWé˜Ņvk&íY%æš.CŊOŌĘę›CJL´ĐĶŽLi‘{nąpkkv 6EvFW+šK`‹ĨœYSėLĖ2Q ūXåœįąDĘ÷͚IYL@ü'jšč@ÄĻŽč=\N*ɓÜ×U=â“íę0ŗ6-ƒęŖöČđ ē*¤k8$ĩņj3†>+vjnŋ ÃÕLé… yŊL4~$9˛WƌF˜×7ĩmŽĢ ÃģdĶ+ö5#Ô˙‘)%¤ĩKĐÅØ„n‰í×~ÜųĮķIQm…éVœI&ŗÅhŠ-u“87IŖpąˇ­•ËĻá˜ŌķnîũÉl¸ĒyĒ@ĄÕɍbbã,ērÅs‹J.ÛØ_;Í _ĨÛõx õ”_°žƒ:(ØĢĢšlˆ…āEd……'MtŦ%tލ`ãū=år֚°ú.؁?füäŒėvw°-^w,nĸë:ĻÃĨŦgĀŨØf@ÎyØWšzTU-VĨŊTQb‰øŌžrŸ 4)hĐö45ŽÚ|žWûC­ĐÂâōáJŅoßDZ.qŠkŨ÷õ5ĖųØņųz¤JŒáSzōá'‹ĒĒõ?Y0¤Ģ6¨PLB ņˆ™#AŦāĐb`Ė€#ՒE˛o€ā+ōZôLgLīY6WN^ëmCX€žÜĻŖ'ĒIŒ–;ļ pœ›wÆn7šhĪ|¯—Į“Š!îBŒˇąŨöûy1¯vėŊ´p ŽSįŒĖ3 tÚ=P;dø3Dåõ*–’˙C kÍÁ‡Yâ›%vŖŠ™^P(ĒĸJĨ .=Ûđ™sķ°~mÂBĮŅg2ōI•nž¤7ū^Lt¤‰9eŠ3ĒŖ×ėÃRwAÂēŸVĐ<^˜™ƒŽD ėŲցŅŌä눜í‡söå0AÄĄˆWŨhr}qfv›Ā6fĩéfFË­ö 2Į<å™MFų'l`īp#‡BĀ Ą™y„w§yš%ŅÖlž|ŗĐtdjeŪķFG†oé}vWz)Ū֐‹B4†ŅϐWáø|„¸T†x{Ę{ĸŨd†œÕ÷ŋŪ7Ú#]ŠÛ ÎCž…K t܅J‘EŒŌospÔíÁN @Ę^ãØ<Ø.[ ”&đíf…‰Ŋg į•œ$_N‹9ũmø@Ŧy>u@Á4–¤oCšš!cqÔtōiše2¸ˇ}ĀųųˇÚ.ycëČn=đ§^…?VåJˇŽbˑmE¤íķV ´‘ąTiœ—×ŋFš_īPpßŦ䝷 …[i˛tÎ/î÷ž_6#\8-™ ,Ÿ~ÂĄÉŽhH‡ÛW÷”öŅ吿čėķʆÖ(”‡d€d‡n/ŗPņ4ŠāBŪAŋí4Š*xo%k€Ļßģ‰/ÚŊ%žĐĖÜÍfĢëUéFÂų Éë$+# šėhß ĖlēÜ%ŽTƒ•:>jÁaûē­ÐĨøg†›^Ũ% åKJ~Gd_˛—ŠŦäoÂDÅ_‘lÍé€1ëāüĖŲ€a´ĻŅ[EŖË÷ŽAôޞđ­æOpĀ;ƒQŨ¨­‹28.„û× Cy;%.ŲÔŖĨĩcåÆU~é•P bΤ§-gÆ÷„úCŨŅ“4ĀÆÂ/GÎĄŲō1˙ PÆJzÜyžĮũõzcĐ>ā ō˜En:ÎĩĖ#ĸüŠ3üŨ8–ūČkŊjķžwûŗ];RüļF ™\›„ĒĮ´<¤Ŧ”aôú0Ģåh}–Öiˇ•}˛?*˙sģl (å7~’ēŖt Gqá/‹UFČĖ,Œ0âŖåÖŦvįP2Rę:ž ķZsúųÖ|Ή žX@2^Jŧ›TtY–†ũËļmĨëĢ?‘ÚĨ—ž¨AßšĪā}•đņ]Ņ!8{/(ˆã&+ˆûĶĘē¯}˛Ĩ/ļĻ$ûŸüjÃíæōûĢb5†PX=ĀxĮ7’219 úÃx˃BĐI ËE•7~Mg lŒŸÃĄ3ĖŽ_U˙ ¤÷0īJ: Č𴍭<ĸøŅâ{&Z}šeXdmīq÷efë+ĒĪŨöŌŽŪ-zWQĻQ–ú(ä_píĘôˇ81˛Z0Ö~›ļZüpØĐŖË×ÜO|dãmĄ:ČĀÃJÖŗŸáķĩTĮtlˇ‘l´‰C>ëČĶP´:ڏиuã’ĀķŨ tœ8›įŪÍ>ȐûlŪ÷\=ģb]-…˜€Īãķn2a*׋2<6ÔŲą=ÉûģkRPų­zQbķ˙gđ‘‰ÚãÄŅoSzčšŌ€2“Z >)OĢē.ŗąkúĮO}ÃgRžWl‚ÜØ>K÷•÷Üá*Āek8ÕsčČ-ÆN§eūX}É/‘-ĻŠ§ęY*áČģqˇÉØÆĸĀė%šEâō=ŦËAÔK”Ø˛/ÂĨÁDQŸ3đ_wødKõ˛M_Üę™>¤† ­û‡hŊÉÆiÕüŧÉOã6įļÔ oūš!:"x@FGOĩe´*Ŋ æŠ.čŊ~lĄĨd5i‚c÷4.Ļm J5LV*;oEĒpiŲû{\ŧũWS!ãÜĀ0(ˇÆ:h%_įČf ´HÚFƒBFâ{/ڑڒ+yîęWâ30A˜Ö(ļLčĶa~ܐ_'pfkOŠžW=ņ]×č3+y¨–šŽō1™HÎį;dß~­āžˇoÂæÄ‡ƒŋķ åi_¤ˇqOđDbų‘žš}ÆWžōŧĄ6?â…9ß^oC1 $ĩˆ˙€ŧ`ļOĄ4˛0[ĀFÂrA“v ¯(7gųËí–HbúōæV #ōCĪ.ŗOĪŨ/ÎÖc9ëīE>?[|æ0BŘĪ@ yî2öXė„Ģāu͉l¤üģˆ›ŠŲÔD4æ5§t’”<Ĩ›ĸ =@¯`IŌR—˙t×Ŧ ņūGųΟVžë9yσįŪ†Ņˆ´ā•Ū*ôÔ7€‘! šd+.īæYĻ)Lv~vĘSĄģšÕJģPŒLž™kÄ Āg×~äÂō”fZŲŠ–bŌvįÂŊ#Ką´Tž„lx¯qŊÎ ĶžÎ?Ãq‡å†ĶŊ]Hōk˙Xî§SƒžĒˆR Ë07Nא2­üjúA”$HĶËėz`17C°ÔžĘíÄĸČ'Ũe¸vq âĘžŅ‘œ+ĒũĨĄŠfđp(÷>W›čČsņTRĩaŐį1XÉ âœ„D2Xš×ŽĘNļŦ‘Žā °Q8ļNļiwJÚrÁ̃nØôe:cmūĮ žÛakĢTÕ?•æ4üDąĩ I˛×Æūčf`^@ ø`_Ÿ"Î ųđöûõ\ũ‹•n/ÚÃđĪ}ĒĀ4uŌ@L–Gk8Â&ižƒf˜÷ĶfŲtüeM|a¤č{o™čōBņžã$ßËYؔ,WIkbÉąR+.|ŽĶ_*:”פÛõcĖĨ…“LH†_qŪ6W…8D›ßVi”dëy{üŸ––ô˛âõ ˛ÄyÚWŒ‚ېĀ5<ĻãPĩ|õ;}ašÃ}Îės6…Áa&Ŋ¯t“1x!e„–a;kl1ØCĜĘ%_Œ}øŽffƁ›t¯Iģ%ʂ0O% ŪmåõßeŽûßŲZļĸ ‘ķŋ_ÎķU,ūëŲ>Ā ‹ĄØ|øPy{q˃> ¤†—=I’¸N(”EΜØÛ,ĸŧ‰ļ}q[ O1ëqCƒ_;KI ųO°įąÔÕ×îœÅ‡&Á¸Ŗ—°‚ė´ęŋ‡e)Äá†&•8TvÂlmĘũŊ5~ÔXk‹`!ičHQ51ōŗŗGȒ´}Čá|JH\ˆ4”ļ×§÷3¸ĻĩV}å‹ëĢÄÖVœvŌAŧE˜æÚhMLN…ČĢ!!!ūua¤Y3ģ˜ī9ĸEhaPh Áaüī}'įĩĀđĘež•ŽÔˇe¨Ü0;ΨĖÄōę;¸Ĩpcu—ęĀ6Ŗ=_ĀA‹UÛ˛ŽvšĖĀ*}!l)—ˆ8HČL‚Ë^dîÅļũŒŧķęSÖ?ĄĐ˰䧇uōˇ5÷o1jã+z „áNÕ¯>ĀÕŊÉķۍíڋå{]P­–yģ˛ũŦ„ZÕņĐugˆJ2 ¤œHp(Ę/AÕ%˙=ˏƒOpTĻŨ+\ƒl°ĩˇ¯Cd^oôö a €q‚ŠÜ^+?%ŋÉCvÛ˛ˇŦGĒ›ÜĩW ŪØŨE~¨*Žđ a™Š aMĘå}ōĨ†…´6lĀ~P'p̓õ ãĮąN<;ēíÜĖåÄLņ~ŽTë1¯ĪW*Kįそ=BhÃ&› t“.¤ëÚ /|‰ŌYö—Ŗzn;Įΐm 7*&Ŧô~xl˙R3Ú*ę%‚$ßĪąš¨[Š-> ÎpiöoG˛˛"m4%‰ÎIkÔg†.+įu‹k“ø‡ŽĒbĻ 'MuL‰Č„ŸYk“[čÄm\ˇ;ČąéĢŪ Sƒe™§6—j{xL¤T‡úU+ÛŅH"áė5ÕÍ×÷QŊ'V ‡-i≖i×|)ä6írûĪ*z"#VaaafĩĚčž1cŌā9éä(îP×ßQûy{ŲLųYüúö#7ĸŽ}FŸ].6Æl-n6,č.q“RGUn1ÛLŦ7¯/bm¤AėúGk Iĩ}kå(ÄExŦŅĩėģ8´7*(lčË?ũ(°°Š=“ŌŽä⧆Úxë-ŗ ¸-(' eĢJ?Č% 1 -)=ä=Á„‚%vY÷.ë+tųƒ_#„rKēQyƒKg†Ą&UØÜ+ LRļ2ÁÃ/r–Á›ŠåqWēĘ5ŒõžņŽ/*ˆ î¨ļj–eíCs|v&:ũØ0A‡Zé>ßN3¯äē†6‚Ŋ/€×_n<ŦܝÔĶ0<>đs,€FqČ\‡HŠË$~ÁO+:ØÆ,9§÷ëĂY'@ĮžĊŗ9WjN7˜[­Č’ˇ ŋ€r¯čh$dpMSö–ܧâĢBdHSĨ"ŧ­ ĩ’`™:u|‚^VģíĀÚGÁŒM Ŋß(Y›ąnũÅ :%+ĩ§ÄtŸÎ(äų–éÃd@ 2Ō @†ÎĄCY æ {¸D‚•Mčŧˆ¨ÍÁŧQ[Xąz(@Ė‘<Ÿ<0idU+ˆö‹oãī($>苒._üϤ‡›šĢhŗqĀäųīų ;^"‰T‹ÍØ1ĖQ™˙|äjâÚ “ŦQō‹Ü1?•W°Ÿ€ũ1f§"_–ˇärú$™ƒbŗ7+l™Ņö\ķTĄÄ¨ !č\0v ī_ŲFés5h´ĨéîÃDõ-@ØMqÍ˙*ŋĻ;ĪŊŧ‹P‡7`ąUō?K`åáJÔ5Ž‹NĻ6=ųžĄŦ+fn‹‡¤oŖ02n‚ņ•ãWALŨwžj9#ƒžąiá( ÅH•šQP;č@@ÖĩíŽ2Ė~5Ą%ŸÎĐlŸm0j •Čđ{ĀĻīy3Kč 'MˆFá›ŖŋJdVøéũmŗķB‰ÆŠ.”Szڝ†ÄY&¸Æ&ÄžØ2ÂĀž}D6Ɵ2_V2d[`“ČŗJ&DÚ|nZ§XhNTãr7t|mļ"Įidkŋd=*ú}Ÿŗ{ķĖ^åÛĶ*ßũe4ˆŠĶžց — :‚Øė‰›‹q>ų*>ÄEuĒBN˛ÃØÕ0é‹Ú%7•g°ÄŦÕÎā5Qā™Q-P†úˇ~Đ ĘFöŌĖ÷DN„6ųoŲUoŽ›Īڃ$ņ+Sˆ “f7Eu5}]ĐuøÁGd`ÆđŅC8Hs‡¸M$ČßMlēĐũAc3ôŸ Į¨Ž–)PMPlõÅû(ČN¤3¸Áø4ŽI-čEáYŅ@[/Ž49ō„Ÿ0šõÉē.qÉs!ßē<†°¯š—âV¤4„ČŪU{e˙1{bLŒ¤œtv,I‘„™>ęrF]uÂØ3oÍ<ä:\P¤Įr‡FvŨhr~J7=ņģt”|ŗÁ;t~ã2YģÎO}rīxL52?Â*e49„§ô ‘J?ãģ+„ûq˗¸ü_߂Ž%eL(”‹'S`ÆdØhŌØQ!ä) Ą7‡ĘÉ•Ė˜5Zõ÷+`Ō8ŗŒ¸>^+‹ũug@ë: ‡ÜÅå(æĩø&|͘aߐĀČ ŧ´ũ՜ŌųЧHoiŗ)ũãûA5r,hŧŦÍīšÂŖâ3ÖSūfLöŨū†ÔmĘO#jmqĘĘMŨëøí?ų*Œ#ÔZõ†u#ÛŽO¨x‹O Œ×¯]ŦōDKH ŗ×G”ā*q¤04”ÃĨŊái:ãæķŽš"ÛĶ‘ŨՐ8•ĸŽpúĮ*1<‡ŦąÅ˔ü9‹EÄĪē”7§|DŌ=JČo)7 ˆœ~pļɛŠZAÎúNÄQ€¯ø}Ģs(m€ÉŲ&Š`/l“Ú׀œõ Īčīš0í ܅ޚtˆ2‡…7ĩŦī”ĮÜīŋĨŊ )ŽÜ42mŋíŧŧ¨ÂíčlÚ{ŽĀ Ęųqā:ĶŐ†2ƒbÂ!OåCČņûzQËģÍś[/›)0Ē‚¸¸0A+wK6/:JŨJ+Sšž˙t;Öx"9}•ĸ’ØX´ĮKoŧØāהB7ãõ(rFŗãí9–ŊĸięÜĩ&†áNĢ3…Ûs­ŋG¨,\íŽŪ)ģ JY|˛×xÚiß>ģß>>R_vøG댐@)ˇ@”j1•­›Ųėg6æÆ? ˘ƒ7Ǟ˛UÖ ņ¤q÷j–ÂhŲhģ?ũĄŖtŠ…×4įČ}䆤­ÛŖëŋĶ=ČD%\*Âg΄ôÂ"†>Fŗ Ŋ„NÆŊ č4œœEkZž-cΗānVĻa´ʄļŲŅ ā I+š´Đŗ„âÕ:ą˙kŖûŒ¯‡É>āîļuŽ(Ų’Ú ËĀĖ  ĸĒŪõ.ßKСXŋo’ëÄí•xb6W†÷h –ሚ˙='-v;a§]š¤@˛œ 5EApāËm§`gįx†DR™ÄmĀß˙Jō‰‚CøˆWøbķå§ĘŨāzįŨæĶø ŦĪ4ufš-¯īąŊM‰Û›â›%I—"ëq”SOĨȆ‘앍CĄ—sķČnTøk 7šŽÕA‚,Uo*^ēāiö€[ex.ú>V8—:Cn´ ŗ°ģ÷ ã×í:€k§€kāX5Ÿ¯Ąmn˙#~’X’6_5%į3Á#QČÄf_iüå–_`Hunĸ}wëJ ”ÍäHâŽų`=dãŠtÉŅOíc ôÅH_§ĪN´Žéļ§"‘9!"ˇĪí%øčM#ß Ųij™ėÅŪ_˙_PĶ*oĒüׄĪŊŌt&ė† ÖÜJ멕ŧ8Ķō„'A­[–“Q3Ĩ/Ô­î„Mø@đd*ø–Ė™ŸŋŠwĖiJķŅWdÃZRYĨíÔnŲGųJߓ%Ų–‘txƆˆ)…ų€ĖŪ÷€‹h+yęĘ>:{.NhhŪ˙.Ĩbq­PJÕå¨bE})fķkÚ7CũđØSĻ^"^ ›ĐhV~ĻjŦG*. ¨Ø„•ĖĶJ0ô?°ąŧ„¨Îîßkd­k–Ę(;§Vį˛3ŪĻåt'[B¸e´˙+VĪ*TÍįSšŪöWø.ŽĪcĪŪĢ‹ä‡ÖV{Ø2váƒuÚlņ÷OcŽž0oÕû#S!9ŒB>Xãße"0É5¨×ūöŋeUŽoCĪ›ymä‰ ˜Ĩũ\I"îi^ØmŲR›A2å=ēŗęÅ jãå—N= dƒ /ŖãįÔūœL[_ē9Š'ÛÎ[ĩ$bÛĢÃís¨ĨY…‡Ņ$ŽĄß ‰žœĩ˛™‰ YĀŋĨģc W‡(>ŌÜ&ŧ‚´2 ž ŋ“ę¯KÕ%íĖŌĶ€Ô,ŸW.§ bĖsûV5⛆sEØĒÚ īöŅAM'Mķū°>œã-¯{Ņ %ęy|čĢļ95s÷;’āÂ2î@•= úoĖõ‹,`$ÂŨ Ã)2^V‘č’ĮŲåwdtXˋ$ÃĮ˛Õ[^–ĄšK)ĮģĶj ÄšøĘøxBæíôiĩŨ§ Ã@įvxŪoXĩpm8åĨ~lúƧZ9^ŲkIũbĄ ´į¤o4æīWŦ W˜UmËaŽ%*g ˆūąmĸĢ Ö(Áĸ†ūBÉõā„îÁ“qĸ@ôbnå)ŋūy&×Ŗa–?ÚĄŖ.-¤ëŒš€_ũKe/ܚŊéŠā÷:ƒď…$:žPeŊO_†û€™)ú)¯p„Ķz@õ1‹đž…„î†GÖķ3"uü@ŸØĘíĒ1xŋr˛Kį°/wö:ˆbju=!žzũã5öŊĐd=Ŗüíw#2+ų~wŽâe@§^{ú~?…¸úäÅĢå+Ŗ´9ˇë;–?rëqÅNM1uũ šOX\FWāŽ5ąÍôkÛĖU˛Qņņšir¤=Î_ĪáĄoEēŠ’bĀn„>HōĨ°ÔĪĮr÷~å/Xöߨ$ÄģŌ0ļDsÃ܍.é 9)į…CŒbvlšsФĖpđĶCy &#¸°Ã9ōÔE)h4 ¯}DÔĖžĶbôtÃlY\ĀS¯w4âūĸė3R‘HúÜL(vä´*Ĩ­ėDqįe#0ßķn3_ЧĘú%˜ Äķnj %#/ŽŅū ‡]œÄB›;oO:ėĩŋŦ×ڇ§˙DƒŒ^¯:°:Á$hļR ƒģ;™ķ‚ųæfŲ>wŌ›úßMā˛VŊČVoĄŪ’ŧ|}˜Ŗn×ũû†āëšNč4:ŠŌlwzō6UÚĒ<ģC9Ú™•­w]Ņø\•Š?8“ˆ>œ@PS"’ÛĒâ“§VÚWˆDÜQ쨇Ū“GŗļxÎBö–yĸʘ[0ĸ=O‹IØĄ€8đķĘ c~ûzo¯Ķ­Ū–OŠą>vîįėÆ˙VXāũĘúÛ%Ļ¸÷g]DĄ˜Īō×dyŽĮfĪÖļh“•W3čĪ qę_h (L¸Ÿ—zĄÎŋØp´Ĩą ˜g+é?&ųj×"ųY$ĄsĸēûLĐHR¨Đ=ĀÍq˙OI”—ŒzŠ"ãŊvĐi„ãŧ`ŽôūÛžpļŠ‘Ä×ũėÛ[0ƒ¸.aļ­ĖGvĮöne9oÅŠÆyŸ˙1í<ĶĻJŊÜ?ęČh4Ņĩ¯î7 j͆šų{h̓ĄúÉŗúJģznzoŋđ›Ų'&ŲØĒÅW_ļiû)w9(UbĪâī˛ÜŸ|I~6Kžxx=Ū:ž\ ízĖūŦ€ÂP¤-ß%¸;N>mÑwVÂ˙›ŧĢ\៭ŌoÂ\ēÛũ!ķ“ZšœÜōū$?­ŽSõ\L|E`‡Dרķö eŊņ) ķ´Ãį1y‹2Ÿõ†,HlD¤ŒÛüYÖ26*t=2Ø`J†™Žĸ7ûĖOžTSP @$r7ŖŅĮí0Td÷; á)wĮ0˜w,ŲžŗĀŨĩ o M–GxüZáĐŖ“Õš°ŦFaĸktץģÎœŽÆö_¯ hTã‰ļ’$Ũƒ¤ņ6m9i¸[Ëąå?ʎĀUˆö<h3@"Ę`9ÜšYuÆT"ZÂ"Ģ3)/öi6 ėāŊŒ’ŗš°q¸ž]qwŨ=eDmãV{ךzÉÂÉQVu@:˙&J6qPƒƒ ,>ňX%jD—bm†I-ĨWĮ @aÛĩ%E‘ŽÅzį1R]…ūWŌ>Đmû;÷¯™AŊ}ÕSedū"F¨đŪų&:Î4‡ĐŒj•,Ádf@6š{–Sį˙< Ō Ũt˙0īoĪPŦ7-iCā7 ˇ`,RœĶDÛa¯pŨˆ˜ė\ëfų#ʃŨ52Ī‚đMä†×ŒęÚĻSX2zŠÍt€Č 1Ëô3šncin6L’y÷ˆUb7ÄâũÍėkĻåđϜŋ ŗ[ÕDFę×5h[ōÜHŦęfôž‘…†ĘRįa2ė9ÂÅô¯)8x~Gޝ˛„Į"›hÁpžIŊ AM:M*iŧĢé<áDŽâįĄT蹌€ØkÅNķ&čŋ]” ņZJ9Ÿb˜œÔ}‹ũäĘãũ×Č­ŦŌ?ãĀφš:ëĈE“đ5+#íS+NŅÂ÷ķį|Ė|öœÄą×˜C"Ė‹i:ĸŧÆ ƒŪ‹%p(ņ‡JĄī1ŊãĘû¯ų#„o–Ē`…Ÿ8Åv"Ä:#ÄgŌ-fÅ`ĄwN=ƒmÜu÷Ûė]ž bbčû‚čŒëU MiĀVĨzáŪRCyH)PNŠF/•BÆËž‹õũį č¯Ęû™ƒíÕ]k~6GUYt1—h˙ “û ë”n•‚ZÁEļᷚ^Jˆø8šÎ)Q•-Bz 溑́4ˆ^x`­Lzŗeŧ °ŸGö~ŨGFŠđ "ĪžjĨ‚¯#eIËī4fļC<Í:kĮô9ŗÎŽČĩx§ģ\Ū|4kFÖ\Ú¯HÚ~1ĮíUœ…˙4TpEIĀLęŠL#iî!frš8_­ØŌîP!ˇ7tĩŌFŗôSȅH.mFqŒÚxcô÷n};ËĒKÃĀųšd¸m¯v?˛&M LĄc1 ļ’Âü•|¯tۖƒe~ąqƒ #VI¤Ē¤hË)ķ;ЧZę„*ũÖkČ˙Kq i•´°TļJˇp0n ¤Ž’ģč#[œ 3˛÷ž?īü‘RV ä\ā•âßY€€)ōeMeÎ* ›´ˆ‡ŒÆüd/Mō'#÷FˆŨEN(s9ÆŠŋS;áĶҟÛK͝d4rÖ ã¯ÁûfVX]K/ø•îâ›ĀQZدÕTŨŸ=÷qž}úô“ŗÁjįtcQ[ĶEŒĐzßëwş_W¨›ļ¯Â×\ī‡šqčú]ų.ŸÍĮ¯˛“ĢXČ~AG’;Ģd̊'ą=UhÄm8°ŠÍ7cå؁ų•†=í–˙ĸ"ų„ĩ8Q įRƧqäÃąû¸îáAŖ5üëĨÄS&˙!ϐMĖzGg0qÄģ/Ë3EyƒÆN§¤­ã*{ÁĸBDųFņ°c?4bü­]¸/G"2ŗá&cYK>„ŽŸÂ?Š ,ėTČ5MFq3—ôûs˙SZũD´Âq’ x“U‰×oNÁÎ#˙aČ`đŸģĐņnßLŠCŊÍY ÚÍė5Ë)đääãK…<@I<˜<{oIlˇÛ"DLˇWsŦH(ģozEsΰ{eēÃJ‹&¯ŲÖ]—&67tÔũJėq‰ķ­’(˜T×ÚÍÆîžž?<Ü9¯ŧ -ú‘ˆĄzŠ M 'V)(ģESC´æĢδ5›CėæįáÍ},_ąEãÎ8y„]W š-^Ũ&ņÉ”đā“?§7ĨūÆ`¯€žN˜đē ž”–2oÔĢą{ÚĨ[Ž5ę :'šųŽē۝y‘jÛãf™îH@›MbĘĮÕ´Ŧ;mŠĻ|žw’âąĻīlđ<#,øOŠx.˜â.ą…ËŦÅn_($Æčp>9WJČ5Ō˜æNjĸC­Ãq(Nīi5FgnØ×Õ\ėuÃLÁ į%įĪ>ĸ„õī †gWđ7į*Ƅ7ūP†RÛ.ƒwHŅ´‘eYęēWÁßé{ĸ›;Û~Û|‹ÜÅÁۊôíŠÄKŨŌáÛöE7‰×“ĩ~rëAæˆR.pā˛=č<[od‘(ÔۏšŗĻĀYšÖßO+ÛZS|˜œąxKú {OŠä;číT ˛GXŊ ņ –´§ ņ7\ ¸VŨî°#VîFĀúŖāõø1$C…ØF.&*ŊÖw-g(6ˇęîMõ—°ĩjõôs<˙ëpĮSHl†&˓pøw$ū?āĶ—¯aÎŪ"ģ $qĀđ”6W wĻá|ĨY¸ObĢN~L)e÷ßwüįRCJnWXL_ĩȁd:¤Bŋ'GZL)†Ԁûõ‡ ,ī’ž˜†eN䖜`Đ ĸĨåVŌ82Ō^‡@§v°Å{k6sō——Š(€Q”Ü4 œĮ ‡‚K/ŖáXäî ^¯Ō"]¤Đ‹ĢŪ@)|q~‚„Û‚f•Ŗf&ĀÚ;[+Ĩųö´*™›ËyåU/ၙXĖjĒČį´cŋƗb’iϜ_šxizĩe8t‰<Ž÷Œč}õÎh'Ŗ°{ÄCĸE¸œųŦ3ī|fWžOMļˆ_č\”ANôH­Đuš˙"DŨ™sž´§Q Á9ŖšāˆŠbd_­ÍžR 7(wōŨĄK/9y°TJwn~Ē“íŌŗ,à &eƒrSš˛Íä]N¤E?UkŨ8xŅ_äË0€Ān3ŖŽs—Š×)4đ‡ŊĻIø-e„_ĨƖüÃYļÃŧēŦĮ zkQL;vVxoõ—îĀ_ ZYžU03vUg-'Ģž€;ĩŦļNā':Xofj^mŽ'Ŗßū 8| āQ¤.f!Ũ (Ų´?Ž)/ĀbdCULĄø"¤å¯ī#ŒŠ@pO Ŗâ+Ōû^˛ŲzjĘÂeIsp}ąDũ…Ŗ,Éd ūũ@õŊđ-?&K3ķĻ­ųE%`•„%=ʕĩS|'BÚĨF#u,ãÁƒsÉF…TeŊ¯/˙Pn•Ÿ]Ā;}&-/…]) ÍŨšWEN–õ˛…$ž<•g1Ää ĢÖK–w1[/‡y7@ęãn‚–^ׅ%cũ¯œ#‰ü`uôa'™ÖúŸ„ ĪvZ7ĸeé.ÆkâļxĨX;šÆÕš¨_Ꚋũ€ õK…ÎåÚÃEįÉDžĩ?f§­Y]Žđ%ác¸øËûî+ce0†Dīđ Å$ƒŗs›ģųČžH“ *Ŧž3×f„ž8´AĐZ*bPä$e4ڛHMB‡NŊĩ@’ąuˇ¨OV)ÆīÁ.IΘFÜ+˜ä6âĢ"čŅ2uLƒÎá5;‹ ž0†:5ŌŖptŲځŌEĒ—ßĸī Î/UΌę8™Æ&†)16˜ķG ˙fx…ļ7ÛÂfÂ Ę eÛÖtJShœ6\(ĩ{s´Å›}t‘˛­ķ—7Ŗ ÛįŨDˆ[ģņmĖf ´*{fĄŊĢ—Üô.{Ē>Ą¨Į1Âø'%­žšņ$Ļ:;¤Ų4ĮkķƒĮЉĐ.Û9G‘pg8(&!ÖÎWEũ0ČOX\qnhGpŽH4‹h%ŦÖÅĩŸ*§™!…#Zú",Ī7ƒųģQ\voŒôjŅ×Öã&ôԔ˛Ī•,KŠģÛiv"œp÷^ϧPQI,ÁÎfė6ž˜æūŽ­m‡ā§Q.ĪmŊPYP%ÖGŗl˜äĐuŽÉŗežô‰Ezžŗ-ŗ:>ĶĀAô–¸_jí‹`ʍČâÂŲ|ĪđĢÂDųN/—ū¸î 1ˆäአPž ˙€{ΚkĨÜŽmÅŌīG°4^wŲųiÁũ'9`jJdų”ŧmrqû–ˤ˙]´ą-V<ôÁĮS†”ZKyÅÛûw.Ļ4įQƒŪ¤ũxG‘‡šũÖĘ4Ē•÷XĄ]×_tëĻ“5Ėū‹1Ŋɀ}Á,v¸†Õ"܎ÆQ%NoIĪe [o]@v;j[=}–ęe“sŨf…yĀxČä¤?§{Ė ×WSŒꎰ—ī(’úäēõ}Å}Ŧ/öŠŽ.qŌu¯RŲ˙7°áBU”ŗ`äÖ¸Ÿv>(YB°ņ°ž,^C…Ēx׃ %Âi^Ę6WL†_MÖ2’V›×5¨ŽĀž •ĄĻœ—žpN°ĶŖ0ĸ@ŗĄI€qŊÛQt,Ú3g͓€xõ^ÜÆši÷ņŒģ?5 ¯Ę6tÆËpfÚČĖzjN’Ų'Bļ¸Ļ׊¯ŪΌ]1 y΅Ũg|~ļkc’~Ų.p>ē´x-KôéeAWÕ×Bޏ¨Z æ÷Ôõ¯[˙Y™ašIZ9;1-@×ibCBLx?Ø+Ir˜\€˙*vųŦĀØkõ*á.[̎Zq‘ë/ũR3EbÕZ¤w  ÅĪÚÛz~,לXöcŠXķúk|ũ8¸rķ™A¤ĘR;ët‚m›ˇNōCÍ"h…Nv8Ą‹arR˙B§āzˇ-~á˜KĢŧcÂ`Z‘"Ū"Ü[Üz”3ƒ`žŖyíí­§î”ˇëļkBg]\ļžnhk‚SPBėU*OĘ‹]ã5õ=íä'aLĪ ËtÚ˙Y†‰–֍v` "Â)ĢúĒčĪ2ŅõŪ É$7]ŗfÖú÷IäIÜRp2čTmgëx’1{Ūôuũ‰ōtÕړYÖ'¯ĐnčĶM.š0A—$­ø´‘EĪyys´w´…›Sž(ĖpäÆZĖ}ĨŦŋ#[ř“ÂõųĀÚ7Yį¤éˆķDihŸ”ļ.¨k_čķ[ĐķN˜ųžõũpĄ@Öڍh¤ÅāÕ˛žÚP@˙LĘ" ÉáËBĩ´E9ŽĪëv§Â˙zm”G@ãĘ/–ß ÖúíĮŖ.KđÁhM ũŗ7ƒe­ė[7[EljXæšēl\4€üī_GÁŸIN x‹kņםäڒã„b õ­ųéĸŽߙ¯€'ÛũČŊíīL×›TVÕ0jDđŠ2æ…(ÄOž¨ đúøČ­ŗēŊø(Ĩ<”‚Q›ŸŸ+‘áD÷Ø^^įŋ?´D J‘‚Zĸ;뿘{ lSĒb—'jŐã |Ū9 €zūåƒJLœô˛%u”>ŒaKËE,l1­åš"˛=kÂEi‚C1‘ŒĢŅeŋ4…aņüük•0>¸ō_ôŊąmMę2&Z)ĀČPļÉáŠûüČģi×cXø×) pæĮ›í›ąĄA–ōæM^ۈ¯ÜĮ‘ZöMZD_öĪÁl=~„S„ēŌöã/ŨëwÄ981 îW Ņ îvN†Å֝=ū]ĮĖ˙tūn­Ü¯<*[ÛCK0ĄáĒbōå|(/ϏztŽúØPí]@˜Žĩۋcg gEëRļˆÎō4„"ßĶôĄž9Ú´#Ũ(ČČâi§–=~‰ōhŲŠĮ՜NĢ´|ë ;2ļ7ņ’´ÂsNĀtÉbÅ‚•tÁW‡ŖÂ/Ą9`[åBE61Ū(íēŠp|KB=îÖy’ËųŽmįī|$Y:ÎŧŌLYT’Šîū;ÂßÂJÚŧaIށXųi›æ0j˙bŠ00øælŧ'-G\đà ŦDžiėŅ^<ķæ.š×‚_ē<5āœLÆŧQŗî„?ä F|ŋIŖ÷<Ã×%Ž Č ŊéŅ?ˇåcxÚØ‰ĩw°uˇ–Z“ŧ`Ū%îįRjz};Öe–îŨ:Ō#ŊíŌ ác:ēsá7ˇyŽēvŸ Ņt_Ų^ƒņœØ§ãw긔ąØû†G:xEõ.=¨ AdĨŌ€r°âšÜŦ8ˇˆĒq´y¯fŧ´ŊéĒse<-(Kw•iœuØüM}T%OČ-IģB iUc'æ¯*ü#RŠ_Mŗ‰0’ˇ$Ŋ‰Øå3m úî(5Ž=v¸°Z?a0)¸ü4Ā=hāēaI+­\Œ§Ŋ˜čË´Ã tFö`ÜųāztÄĄŨŒēŲálˍ˛VišÂZ QAā5mW Ũ› wBßötj—œú´“!č%įé™G‡91Į ˆá#L\Įla˜ËļH~ĘÅhJ9‡ÆŌj{ŧ5/§Á™ē(’į)úW+vé‰Å:ŠæŗW€sIž@,đ1Ä÷ģÍf_Üãī sˇŨ,]At'ä´ūj8 í}É ĩŦąéj˙'5E‰ēģ…Rô9cE¤ËuŖ6ãË1WÛėz;c…ƒ#Īúk—KûNU•-2´’^dÁ´ąĻŨ˙Ö%œ˜1w\€ZÉ­ †jD:û‡á‹k…™Íbė}š˙Bĸ€0ÕōĮe 1–§ ž–5U jØ!Z’¸u°æÉŦ‘í ‰ūíۜŗĢPži‹%}ŋžIh ŠŅģ €´x¸´ Ō2đ˜4m*Éĩ*Áį$ŌuīP¯|ÅĒ”Ūũ›J?ü&FP˛œ YĪÚeíõÂs'Ļ&3 DŪEĄ‹@[V§‚ņƒE03( b‚˙^mQĶšĐ€ ’īR°˛TDYø)j‹‡$Ī@xãŗ¨ûVS„bíŅ~‚ēĒ;æ%†z ę|ܧ:˛Ē U\Ģ}^WbNčđ‡RNo¨ēs…Ā5ų‰âŖ 9h›–2Q×^wØ@•,é[•fXĒXŽQŽd|MĶü@ŠwwD2īRá Š*ÅāĘU™ė;˜ãq"ĨŽ25N:ßQô_Ÿņäz&2ēė§m_ŨsD)Ęā"Ļ]Ē•øÍˆbXuQZ@–tP ŦK¸‰¨¨$F}ÁXĄfÂķ‹ŧŗBīoį×ĮęV|âûUī6'<;´2(…Ôו K fwƒÅâķŧĨČ:pwŒīSĀÔŦ]ËÉg ūi.yĻ0eÎę„T%Žãõ˛7TøöŦēaRŽUŧŊÚigōãÆˇ4¯—“õ\ĘŨ—_D'}KT:Ķƒ#…*~Pc§Ä‡ôí÷ŧà ”ęŪJ}!…{į‡9īƯV[|č­¤XeČü?Ž8TĀÕ^}´Žđ;…–tžvÖbArŒ=W´.ŧū5ēŲ,Ņ.%§L9Ģ, '0’ö‚+9ā×d2Ž´p%g–ƒŠģ~}ĩ´&ŽJæŖåđáėl8ĖĪŅAÉ<Ä÷ņ´ĻʀŽcoŧEŗEšĐT-øģCv¸ámĄŲŪŊņįtÍÎv@åJįôĮp>ņE8@XBų[ҍ"€č- &5öŽŧ!ŧéøĢyíĩĖč| õu|“3  ėÃS ūķŌˇÁ×ŧ3GÜ]íg†éŊY#$B7Ž?JvaĻd—H +îļ)G 4Ÿzāâ-s[ęÉ^O*2+F"ĖĻ?Ÿ~ôĄh/]NäyŗĖéčæ’Fį=/‡ũ‘YįÄXŠĒ¨’Ķū‚WНˇ9T–'Ū‚_Ķ´kģSÅč°cgh>îØ)Ÿ$ßfßRy .‹–•0XPģōXNJtsŨúM ļRģ9:ĖŊ!4ë—{?ëÚe‹[.ĒôMč}‚#C_t ”äČĐ`n“š Íčå…|4ĶrAä`7…mē=ĻPřQĘKn{C؉ߖA0…ęÍj™û yX.ä ¤{5x]ŗũû[‘?ōŲ÷Հk n2ˇNaH5_āŠ÷Đuôķ’ęŖœcŽM1ß4eTŗ īÍŽ5áĮgsčåėNO*2knëäęG惉ɉNß(GNKVíŌDŦ…ÛX[šœ?}n ¯CÔÔėI–<5HzŽ0[ˆ´DaŠÄķÆ9ÎbZ_d3ƒÉčŌÁeœÜkgüUÆĄ˜ž~˜´Û'gS2kTi¨,Â(M§‚ÜBx›š?#ĻM”dË3Eįč=.4Wkw›Ô<O•掤_EęÜ2âE€|RĄäëړ~9Ĩ"ĨCĐLøģēaVL–ŨPcæ‰Ņ0ĄhĮhô‚wō˙.ØNû|đgÉíš6Ę`¸}üziĨQæ3ŧVžkj0"8´î:11#ŊŪáŦqŒUÜûN4"”›k§wķ„Īt<Í^B:Îa͐weö§p<ÂúMÛNŒnOyž‹Í¨čl°sœ•ËeĐ{ߍiģĩŨņĸ­înW§$׏ŊčŨæĐošķ ė͔=Ö×uz$ļzũA’žfšēNSßŧŦšÛH˜‘0ÜÕ]oÕ.Ôõuē,hāOäE“Pėŧ$(‘I^|BÃ’°Ø*ÕČūęŋ•RãŊwMø§Xālu“\ŨÉAIÁ-hųV*sjĮî÷ ūē‚Ú)äžĸY%ĐåĻÛĸN_nŗÉ[¤ĄÆČ,ķĀw4ûĢđ]Û×CÛ+ ąHˆč×ßZã…†Ģ_*Á†ß“$uÅ J3ŖÃqģxt?ĐD<Ȁ!Ø#Rŋ“ŨģX¯öí—đOô¤Ü4°>Ė×ĨįSęŪy+> WÎn5žxa2ĸkÆšlI†5ķ¯cõí#ēSŸŒ—×AözƒĖŒqüē[đx{*öذ(ÕFŅ%…Áž(#ôü'¯–…ČŠĻaÆ,ÍA(Ô\`cW$ƒ4–!l$‚TpūCšēúÆõ–^ø2wúÍĸõúLg7âųÃĢzúÁiJŗŽv¤CC¤Hŗ â1 ښPí"ËPE.üvö¸są?Ã(2ËÉ ڙœ<Ĩ­{uÜ!•—FkžŊsyŅĆÁôKsKŗN€júĐ)Õ*ŋvŽŽR>úĄÜûefƜ4A¸˛’ĐôíN:ÜEŌä9˜…I<&į>ˆÁŲá†\ ˜wrŨƒ7ĸ\Ę6,BŪ[Z~sÛ´@ąmÄqöŌęĮPU´6ô÷ĨRîzNē[ŽåWyÔĪđāOĘ5¸œĨV“› ŌŌ3JÉq\°yŗå|)Ũü!Kj‘”âķ4n.ĩš .€N æ×ĻeTA¤?ÚdyŖĖZœ—˛,ŸŽHäjŽŗ‰9ércÃÝ\ÑMWõI‚ũĻyŖ$“K™Ę­ŠGÚWØ´ôō KšöZáPhvsi˙~•YļctNįúRĨ3—"ųO$}ŖŊŸQSŽe•zâōęŦņĒ˛qÉņahŧûN2g^ß-^–mæl%œŠRéĀtēĐ(>ÜĀlR­l7g˙8(\˜}įZëßÜæĻŠpGú!TjAÄ̆4ãzäãŧ¤R4ŧ+–:’Ę…e‚8ú­;"&㠗LŌÔęņ5ÛŸˆEÎôīŖíVįI‚5'ôZŨËĸā ŽRáAo=tŒŠßËîŖ1ƒ;ĶĸëĮhJėËč%Ą-ąĀKŸGDÁ?5âĪ]įE†Ú/aIõ^šnOĮīĀhī}Ā)úi&Ęqļ)Â`ô"톲X5”{vJš~­$7Flõ'ØŽåֈŖęŠ;=¯Ø$ĀļnÖAċ“ ü4Ž/ų~Û`ĶĒ åŠ‘ô&ŌNGH6×ã„ĒÜW%/FĨĶlO ,5)<“ ūÔŠ™’æŊb훀rˇÜaü¤ņžS”Į†ŖW€ĖޚčÃđÁä”į? BÉfŗ1ƒĩĩŽÎNEgēęŧžLuWĒ–Ž‡­XÖfōâĩuŗ=n°DÂĖā’÷wđ1‘.éØEÜ2ķ™š™4č žŋļh ŸZÖgR(^"GI›ÁĶâO[\> ¸ÂũäĻ_ũš‹öÄ„ļšŊˇģz҃PŠÖīžîŽG:ŲŠB)›Ę͋ŌzĮÄ^÷XJf‡×_äSĶÚú¯ŸûŦ¨Ō‹%ũˈȝet7=Xī4ŊwÚ[>ĘA9/•ĨmĖžQÜÕŊ…r˜8PŦéÍ•p ØsŌ:`ĸũaoÖ} +YŅ#ЊÖ/(~Ō6ɜŅÖ]Á{‘j$lĄ*Ÿhœ…i%ߟ7­)SÂá ÜÂU4„ō%ß۟bL2§Hls‰:+jí$ré˜Ēü(NаžX3F(™aŅ^ŽBDDČļ¸+p* ü\ë.˙_@SÄdĐĩ°ã †Å  `ĒZí˙go´€/–wV† ´ —û(“ąûę’XvĖA€}Ī4]Ž×¤Ôē'Éã.ĮĨĐÛūŽ; ŒËč‡mÂDĘ0œm#ÁȰĩb¤Ļ ķO7Zs´K¯äļæ„ÃwŦŲpęúö{Øu™×ņ’bŪI,t Ë֋Šëï4xmČâ&7ĄŒŌ••3+ō:g"ųeŊ]•„\ņ‘/´âûā„Đs§å4`ŠČôuNŧÚrœ"G˛Ä¸#Ö ÚDĮuŊÉ!@lÁÃ0ĻŪ˜WžA„ĪÉ(~›…•ĨŠ ˇFĄSJú ÜöŽâ>v´ŒÂbØ)§žé[¤œŸöÎÚÉŨž–ßYAŽ&ÛI$ļ}Æ_ĪW%<9ŊKi0ā¨Aķ;í‘ׄė( õp#&gÕJFĩ,’U•—ŊäaBö—Č.õ߈ˇŧ)Į`hõ÷ A…OāŪL %ƒS6Ã^;ôŠkÃrfæ/ϝ+.ŦŽž×Î Lˆhpęi´3‡4ŋķņŦ]œjÁˇ4§Ļ}Ãôę%“ˆƒkÁ,“ąM€ 8€'Š}$ŌN'ŲÂ;2ąš5āR!„y ž.w¸[Q@/ “žĪˆëÛ˙ˆbļT’ŠĄ‹VŽ1}6Ę|åĐ0›^ÁoØâÄØ`BąŌsåúbOųezEīrß]ãmPb,ēĒäĪ2čŊ \Á¨š ƒ2}|YĢŲÃíü‰bŲ88ËYđ“kŋÃúŲQ\'-{ N Ąęۅ_Ũ͟bëczn(*H5÷Fh%LͧŽ_(Ŧį;s Å`˜NÄ6"œüĸ­&o-ŌĄŌ ÚŸüˆšžŅ5)›[JÃ⍸œÕÆü€åkĒŊáŸÚ´OK_×äHÖēAãĮķ8ÔĘĩÛŗxģTˆŲhŠö/(’†w5Čzė´¤Á4ā*‡AË\hÖôXãėjŧœĒėø÷´)ą#ĖĨC8Ô67aĐãĪZËĩ˜›4æ‘ÛÕÃRÛ¯Ö=“—Ô@—ü¤?D0¤qŲ†ę•åĄÄ¯2"(“"dAf~3¯Ļ…Š"[ŒĐ“Ķũßo÷Y0[i´ŧ: 'z´‚X8!˛>y7Z`Ąã¸Ø!“ũaS.–ąø,˛ąō#ŪôP 4Į§fjŦe$sÎ~Š *"įĖ‹nž€Ę ŸīÖXFC|E3ëĶ ¨ !¯Š.Aą @U>Č`)Ēž]å)}ÅqCā Ōϝũ:rĩŦ bŨzWCŧ”×čxu;07Ō‹.Ėø•*éÛ(ÂK{ŽČÔ)ØĨį@āÍŲŠ<}iîâg{ĪGĢƒ›˙ņięmįJ0éØā†Ŗ[„¸žŦˇĢ{RU ûąŖ‡:ûA—€6OæÁ‡}ĩĪzötĸ Ę[ŠiNęū5{ÄYĘßųĖU4/i&•ų3@‚ņoĄžwĒuævÁ)ŖĀDLh!†xöƒqs›ĮÂÁÕlK–TíÖQx6šr×rž‚L#ĖÔXIŊΊ‹ ÚīĄâØ7ō¸›Uņ…~…ä¤8¨ßâaņÜ ķé;ãÎōķ 7ˆ@­SļÎk$Ū#˜ 1VŦ&ڐyFT o˜X™ļąôÄ´ÂÃ4ũåãĢŧ Ōö6ŨėÚ+7cY÷7ĩĸŖfq•ŨÆ7zFˇŠā*b†ū3”ĢÚ[Ķ wŦĒnî'žŦU™UŠö=ÁČĐ 8AŠËŦ8"ãۖÍEī~„I„į̇ĖEŽœco”áŗf×øŽqôŸ čūŌ…ü'!ĄGŽ^Ãb˙0•ž5DTŋdŽYų”Āãa×īķ_ÕJ°Eīv+rA¨ wâĢ$VRˇË†ëZRÖņ\ĨˆŨŸ r7âߔA1€Ļđįhßííļt~ŗö[ŊČáGUqų-NÅßõĒŅGƒU3…Zh/ęōP2w # ŋáēĩĒÁÁų§cfÆžAQˆŊ=.ĻNôŪÔ’\Íû’7ŖūŸX)kŠKĒ›0ŸfŸŲyx*úÎ 3(‚ûGƒōH+’ė2Ö/}S6A¯ĐHVYĩĘ6/.Ŧ{øjëŧė$ƒŦŪo~ĘlĶ,ÉîĨâ­NâOŗ)ˆžmoqÅékkrŽĄ”\!ŲXpqy[OŠŸŲ"÷†IœBÉĘÕ­ĸ ŋЊö!€D„hŨ(+•Oī­˙0ŗíK@ƒmÜ1”™ū¨(ŖI~÷ÛKHā°"qęĸĮCDšSß˨ ™¤Ãũ÷r“vją‚;°ĢntK§„ōi`Dŗ—¤R1 ŋˆh‘H÷"ėÎ8ŽCFVÚøÖĮuĘŋzÅqåÄoE6Ô͡§FÆũˇ×UĶ–ãB°+ö°\ō˛čŖ8Tی’Cü2vé\õŪ;;[ÔÂĖŨkŖ*¨ˇ÷62ĮĄÛ wBŨrJjĪÁJųī‘xŲ×NE='o}ĻŨÔęKŠOü~Čh„’šæFš&QŊ5„ÅšmÔ#úU1‡•a_I͟˛ÖÂíũMNOî§ōâũ^3P=.•7ŽŽxŲéüęߨã+ Lŋ÷ļ'›FGõGKq—ŗ{Ôí€Ø•!Ë•ķąePîŦĩ÷uUÕYä#ĖZˇ€šŅHâVPtCڍȎõĘŗÖ zßs/‡˜lēŪOöë°"˧Īuė̤ƒĢS<"¯!¤ĮŨęšÜŨ€Zŧ˛Jģ†ûŸ/Ĩ¨Šû]Tû:ÄĘĘbƒ…4z[gEŅDfΈŽ1[ŗmˆBH¨^÷lÅņAÍ ũãüęc>(Øw¸bũˆÜ‘$^>š¤ĩ!%]˛Bg<÷§= ĖoFŦ؆ã3Ų­Éģy5ŒújÉ.ņ ´‰Ņ@ ˇŠR•dhdR“”zÅf =5ŨĶ<>ˇŸ§7ũé”MEŌßģģÖ_ĪúÅU‰ŊžĘ^3ŠAõčŧkŒ6ŸG‡á!Ô×°‹?fŅ`°7‘Ŋ  –•FГ!°‘;hSÅ%›H[öÂ~<7Ę”ÂâˆÔpō 1/.ÕVyi×SüČĶĄ¤:Į˜ōė­e09ã˛ĒÁh OĨ ĖÉūQX•ŽZUę<3(ijBŖå¸ŖĢnŧ SLeéŊč#Оã¯Ģv|ęŽ}^2ņ+māûä¤_O™#0} kú´Bßôņ/œ3ŸÂÍĮ‘ę§ō ™GĮdßEoŗ%ėeVũĸ_wVČėŧ7´`:Y6%@> ŋ"€YuŒJCI“œË‹šg|K`œød_ļ/bT+Ũ0?ˆÛxęģ!>Ü´Ã2÷hE—Ã2Ĕā6…íâ;š›Lņņ~î‡3o-ŋwTE՛üŧđ;ÆĩÄ!ÅdØĄe띚ļ ='ãOGĻ^UŅ[ŲÉ9Ö=~âĖ*•ø#PŽH' }‡ÎDčš[ÁjĪŊĢGŌ“"¯ëŊąEéĨ‘Í펰sGė„dmDoŦFĻ6ããŊ'ë;nœ×EĩWÁ ŸŸØšj7zžƒÂ;‰õhMĩŸ„†ëøįđ‚2›Ö€ĻŒŽQRa؃ Ņn]”Ī1ū•7ŗũ4'Ę ä° c^ĩŽtzTŸVd`ŨŒ˛9i05J ŧ§nVHb}1Š$Ĩ#úÍ7ā5 …Īv‰ä?)ąĢĶ˙z+ũŦۊTčSf͈ZhȟÄü™ĐĮ‹T?'Ęn]e[…Ŧlh]AJσšŪ75´JŒŲ—™G2đˇk]äø4ĀB!õąŊũäģú%áä‘UdFuŽëíúŦĒv~ĒUøXÁwf@â cXá•Sčm(*ųhŋ*„ø„ã9ļ>Ęƒ[üĻO‚ēŦkf…‹“×ŦĀÃOqŨíW4Û3j‰á?§š Ī<=lg“G¸Ä }ĩ7ÁĐĻķAĀÆ:KąT,ņ4;ē[×ō7l›Épą&1äKÉĘ˰V‚ë|˜:$YŅåíŗ7ĄĨātk ¯K‚I•-ķōĒ!ÆŠÅŗĶCxœ@å‘d?đķĖ>âzøBQn#Ô`ˆĀžĄoc:O< G~ČÕ_>6>õ^nēņ'†ûƈ °?s_mËxū‰9ôų8xÜ?Ė] !ÃuÔĀDöÕ0ėwÅs;59Ŗ>XŊcĮTV˜$Õ#\k„€‰ŋ7!.*dr´ ĻJģ¤×Š8ŠÆsîĀÛÔēÉ/WUĮT ûK¤^d3Ņ8åĮÕŽ4ÛcԈ„ËČ˙”ĢCØÄ@oĖčA„ĐÄã´G”•ŠVqī‘ŲΈ…ũ9°NŦAĖÄ*'nČL˜æÎ™Å¤û SÂļSYšŅũjãY$ÅŅ‘´ 7];đKĖ$Üģ(/ēvZh$Ā´ŗŸATv}ø5~”SĶTæōĒ—žƒĢQ#ŪúŨx6~‚úm`JĖ`Lxڅ¸}áĀ?Å ^š\G–fMSeų9M4âB×#Ŧ›ĐÉc`īx¨Ū?ƒ åü­Ãˌŧ]fė%?#O-§Ģmnz õėđ*ąģ‚’ģjéZģ:Ozi͙˙JjĻâ@RĻīŊûwĻÁ=Į[‰ū1ŋČ߆/ŨãJģ{“˜oCąˇĘĄQ„ÁEÉūŗVŽ‚°¸ĘÎą—×e)ũŖiāe1‰"€a™­á:ĘÍø<ȟd’įšÅ+8-’Ė•G¤Eɇ–“É&E+ĩ0ƒf ÎÛ}$ëĘH¸Đ{¨mžķ$Ē/0ŽĢMũ‰ãD„Ao¯.į>q3^ãú˙/ÖN.1UDRdįY,3ƒWĩŊ+ zíŊ™aiUĐÚlƒß+˜N˙vfY7ĸ'G”Ëyč(¯lŪR%ÁSڝ¤™ĀŧÃrKJV>a˜G“žŒķ8i’úšŖÅVĐrŅoFZŌ‹ođ ķk-´:87Q{jæēâBLš|Öf`4\Ųf`rĄÚęŸwíÍīEܲß'T@ė˛29Š€^ĒÆ<)pŒ‚sȞíf%ŒėYŸ›‚k!Ōߗ*ßíĮXŠęŠžėÆēEĖõä ēU!’YĀ%ĄĀ‚Į{[åĖwIžpKXv’‹aSg‰2{ō >Hø ĻķƒE‡–ĻÁå ?ĸŪFZŧŦ(ЗÛÕ8›^/Š;9"Á2Z˛îې'gņžNRî­gRčŖ‹ŗP“ļáģ5Đ@ĄqØĨtŽÕš:eôq˛ûˆ~ ˙}OĀīßÕ_¨Cí%hšiNf\}!aÜäM¨Ā̚“māKfCāâGz9͸艪õ|-é,}~[!ņ°e]ŌĪÁho—PŦ0˙¤pYhoد¸ŪLsDŧå-ėĘE)Ģ›ō4sö›§oÆú”¤DIšõ09ôŋ(JÜsũåm>ą< YwNV@ļÄN/íÂ|iÁÎđõ­Ąđŗ„Mą¨čOįĸë¨Ā šŠÎ`ÉiNĸ é´f)\1”ĪS™Q eųŸŨ¯ËŖ1/î΅ÅsĮĀĨŦFŠ ÎÂV˛¯ĻrF+œ¯j–tĸé§ß"Æī ōĩ`ëŲy6Cč-Ô_ĩ5š0ųČÛŨQJD_'”ôå*˛iâ6Ā!7éēÎuüaÎÖkšt,{DK؆0OĘHģž›ÉĖx§Đ:ÖX\”ŗHÁģ=›†č…^&ā0臃äÜόmŧŽœŠ¯ĩŊZr´”HŨjre*ĩdč¨TģĪljŅé5ĪĘŅCIĄ]Аäk„hė_-%æŧá~äĐō9“dP7WLhŎäÚĘ(¤Æ¯7§BĒTų9*÷™ë°FûL)šĀ8>sĩVw;ĻŨ‹pQéļK'ĘčzæIĄS?ô’¤k‹ˆãP 4Aî°Ëg’Ã!œ( 7‹;MˇJ,YHČ ]ŅģæąYŧĩA bxäĄá^h™€vK˙Œ†€‰xđĄcqXąĐYV?jŊRkĸúõ^WÍ^ āû ˆëž•ĸ[ĪĒBŊ2œ¨–áÎČL/3rfŧčūfą!XńsW”ĒDį5ö oķ)†ŨaÎi?cUųŗįōаp„ô1ŲöĻVyCĮĩ ˛7jO…ÔÆߛ7ÅėEá÷ĀŽ°đ/Å—ŽpÂ7šįâ¤[ŋ}¯†€.ؤĄ8GÎdërˆ”ŧl-Y–ė8ũFX&EQg‰Dî`Ë"6æöeBj,É'3éŗ8ãÍĮJ$ę€9ģ7ß_÷Á`÷†d)¨ßöņ~H/ÆIb. ĻG‘ íí×Î.MÆzŧ›ō†ImÍĸ%.8]áüšÛq‚ĸ8#J6°m(Ûz´Ë$Mo3"*,—2zĮ)Ũķ*i„Kč°N‚Û@ŒH×`éŨŨČ[ûæ˜ˇLæi”Î2Áž÷˅d)L"wŊ|š'Ë&ĖҎÆŗRJąW7Į1ށjža …’˙eKĶøÜ !ĸŠc­ãhņjßĪü—ÉŨ´ŠėáYŋĄkŅÆUĨ{Uu€ÕG(Ŋĸ%ė˜“ô™Öl%*{ė5ũ-mŅ͆äq?XÎíUnÆ?ü/ ôļū\GĢĶXšĐuúŦ<ˆ<Î?øSåڂŒJŌŌîšÖķŨdĮIUɯ ,ãeđ“4 „_1CQĐræ깟Z“˙s^Ōžx;'˙RũJ~Ö˙ÖTØZ:*†S”E&ĩÁ Úëb¨Ķ\ ÎJLiА.eĘ āy×O$Cq–{ĶTÚÛnßĐ~ÆS‚ĻĪ7Qg_Ė Ļ…%Ŗ‹¸Ņ¯éßHČß;}€HÕģ-üŪ€?'¯üKsž“š1÷ņU‰æĢéYU˜ŋ–uîûtD‹Ĩčā#Sã‘ŋØŧĶƒåŊ¨>ŸS†X˜­ųüéˆX4>]Ļ”'đ‰…8í?ēĮŌz/ ČŪy!ëîĪ€ OūgĐm¤;á™ļ×(Đļđc§§!öbËŊ)Ë`"eeVˆŸĒ.ÔëŒĨT‚!/4pˇ‘ʐ'uđM-^#'e0’Đ;ø¨ĖQ'—ŋ;§‡đ*ßXҍWŠļŖĸ@9ŗÂū{ŦÔ0*°MĀ4õ)ķgēÁŒĪ |S§đųĪI¤D~^¤û‹Â”TëÎķúHķĖ€&b@ŧø˜ņ\„ÚŠem|øH-v¯éą- †ō%[ՄˆhÕN/{oŲKú¯N¯6zá€MQøÜQüë™ŊWÎõĮdb!ˇ4™+ÜáŋÍ{‚ķzē¸AjF:öËĢĀuAŠüæ"uVtÛ˙3{˛ēW3ŨŋHz[Š*ÆS’;įķxB3]=3Š\ŅÆÆģķVāķßßũŲl€ŌÁ›ÎO)c‘˙oE¨üŽ—|ĢŊ _&â×쀧–âMôÅ ŨU)iŧšWU†ĩ”FäĖ=aƒ Gŋ,ūÄf‹qØĢĀS G9ZvŦ6B\lQî;PË(Ĩ€^…GxS/ú¨Ũ\ŌŅmÃ|ę×T*én‹‹oų_ã€M2KæåúǿɸTX]W(–c›„~v¤my¸ŠŖZy¯H%×ŊņŨŊ‰ŠQmn¤Ų5õQá>ô ÔIŋųc,VĸĨoŸŦ÷.,ā^Ą)mīˆåĮĄôÖ×åZ\dû)(Ņîr ËU&ų=øš ™(īd­Dá~ןĘđDÄ4wŊū&K3>oĒmŪtĀ. Ŗ”ų8ž¤M}t­™Í†ÁVws˙øÆ„Ģa•õ„˛5^ã Yđ1žwM̆č¤O:[¯ūŅ ’ŅØ#W>OōŠ ūUcĩ`ĻøšHJ Ŋąž!Î`Tfē°'0&§7Ũ.Ä,°DRNä$tĐIŧtĒž;‰Ũâ¸jŨs5ųJ7~_č~čŒo¯&¯ÛPĢÅ?$ äqKÖT@9ôhL´‹ãî5ƌt‚¤VũæŪbō‰ĩ˙N˜l`æĐKJFFbēĻėČl 7Õ ÅÄū °-_”†¨0&î€Ŗ*Í'wLļqķĮų@¸‰P)ÍJ!ÛĐnū]N˛ cĸhИˇÂĻ‘`īšôåEņøˇüBÚĪmœ-Ūwōeŗ.“ŧÃ.H3\ԃ_sߚŖfZ}|fįĩ$“Īļf‡‡wüi; zÎ(e…Ē+j(TAՇ/ęŗs˜}PŋƒËœ4IđĄoyrÅMDÅ ÆūƒĢäCĄé[$ôĄ#/"d˛ŽÆĸį,2å ŋĨīLĩÔ8dįŊÆÁ)„&UxKL.ËE#.ĻĀņ×ÅD—Ēpļa(#ŌËCYčŅĮ;ŪÕÉ­Ö ¸ē]ˇÅĀiĒĩĶdšÂiëĄR„ŗč’ÅbPÄKŽ–wŲ~ąRU {y<9:Ĩm3,Ã+ĄGŲĒwRāž•ÅH€×ũsēFm¯.4!8„ŽĀ_‘ÁîÂ0ÂÜ<˛kö—kqÆYoÚĪÜ1lp^;Žīf˜1´m]=]ējsfäāŖ'Ēģ\ ĖUŦЁRR¤‡Ü^Ķųa0UåA>ĒĄ˙pĢ㏆Į_^ß}‡q‘Šĩ_Ŧ <5h1˜Y÷qūwĨlÚ@%A%Ąuŧl9d‚”ĢĪ’2ͨ§ęĮM–4SŌké‰˙*–8ŒŠ/âĀĮ˜ÆUsm€Tyčd}oaEyqéx@ÍØâąĢīo$~$\ =ƒ ĐĐfš!’59Šü0 Ĩ9~‡ĮŅũÚ]ąų%1n ÆŊâ‘Ņ˜+öƙģâ @%¯čŧ …ĸŠŧ¨" =4§o„ĩĩôž"ũ(“冝pöæ^œY°{ķ5{ŧ’!H-ėJ‰"ģˆ$!qOäĄd|åŠaF‰­P@aÜęĢ+)5ÄŠX$Aŋ_ጡ Į÷˛ŠY3 ë/N€ãLk™īĪŋĀŽŽŊƒ´7^ŋcōv1+Ķz›ĪÔeœĮÄæĄ÷jŋęˆ:2A|]B„ ¸_Š%HÁuēY0mÛK+˜Y ų[ŦÆÖBK]Oo[¸"’žDž LŨÆũĶjj9ÚĒ(ázÄDˇ4*–îæƒĒ ņ}“ūÆ.†6ĘíŌqõwīĢĩ×ĮÅ˙Ēh”1g¯rŨĸfɁĨĄS<ƒEB]äÚÔ‘Ū }†`œ {DwŖÔ ?ˆũėú2ÁīJÕBđüKË"ZG2fUã—2ĐÁ”čąßN%Ĩ}švÕŠl@˜õbM¨.š2Ķ8Ņ­bž[üwXåĪ“åŠ t€ ļ3Z>°H큎 ŧ~q´Åŋ;Ž ;ɍ0—ĐĒéZä؝Œ¨Jĩ’ø7aEĘjGl&ŧĮۚ“ØáRpr•€>Ášâl쌸qe[ä`aģã&RŅ”°6šráA<æ@Zō.hŅŪ&đ$|ČCaüŽ9åPôb‚’' ‚DYË&y|4äE…ø¸Š“9ë0—ō$ôĄ hŋ AÆÁō §ŦĀ„YM:úŨ” EËBŖĶåIsBgZ”ŒŽ,ĢQA]*|ôĘē,šGsÕõcƒOƊī­qŖËÚH ÉáŽ30”ĩQ*ô‰ejC„û&ĻĐÍhQĘŗˆGƒtëŖ|…˙'’`gãđĢōy(ĄīŧԘ~ģĐ‘Ö Ÿ¤õbŗjUáĢS^ņ,"Pˇ'^RŪHa…ō’Ęŋ#EˆņĄ@uāˆ‹EōžŧRvœEjާÂ[cÄj´.k$0F‡+D˙!ʕd¨œųŲõ)Ú{ęsÅė§xģL¸“Y:šĖ–îKõŧÁqĀŦŽ÷õ-8X"ũ0ÄjāQķ)MÖßU]Ž*Ĩ€Ķ,ÜΘ]˗ĒžÕ”ęKSl!l”¤Ö?ČĢKæķBbÃ)x¨eXČZ¤eFW(Â*'Í+‹\Í¨Ų”Ą4#lönyúŅ@$⨸rCų„öļ3ĩ‚7Įí1yúĸ;GoFaä—ũãWŲĄ):tÖbš¸Gí7Ų’C–ÁŌwPæ€G¯Ë[gŅŊĘ0g­ŊÍ÷š¯E$púkxœ–+\B¯d)i\šęM@ŋ\AÍbø1™t Ms<žĻĪ!D/ŧ,Îtz_Ũ)ūŲmbŠE&ĄusĪØöŖ%Ĩ#:L’f<‚hŨJ)û›]k 1âI8Kö¸˜b“Ļ|¤ũā +b> ×@ŠoĘž,ų2>Ĩh‘ qœTˇŌ-˛›eNp+QxäũŠVđ}ž™ôaōm÷ŗŪÉ@XūkËØģLŌéâVÄ9Û°$Ëķۄ˙/äWˇ/Ÿģũf[æhŌūājØL8\Å|æîÂn!Ķģ°Ŗ–ąxŽßŊ¯oÂŪËŅĨ…áži|číƒJØ}e@ëfĶ|ž†ú$ŠvVĶiz7`qBÆņILlĀÅ"7ē0ægŠpå˙IEtĐb%Āˉo7†ŧ™˛$\xH¯đ#͒ļz¤ °ÍíNæ“&Ø}DN“Ģ 1 ĮÃģū ņĮž”"ĩĐĨē˛įÂngÉTcšQUĨîF ĩ~RŌ{ŗüŗ.PōÁW˛AĀz3wG"Ėĸ‹+ë!ĐĶҐC "Ņå*ėõģu‰Īm@v;qų|?,מĖZÁČāí+œû=§đ™t̓ī.Ëxbj‡ß˙'xü6õÂŧŽ](5rꌡxîÃKqHÜP€‘Žsō“a˙xRĪwf¯­]ϧājĶŅæŠ.%sz&ØJĩëiWˆ„&ã˜MÚcâĩsBÜKF_)ČŦŋK4v/̓'§Üü>øŽ=ņsåÜô\5iTãÚ¯ëŖ{˙ %ŅwKÉÁ%‰ŧcãŠíĮڎY9ęŽIJĄx]zĪåʨęĖw”Īk×ßĖ-į‘‹y ?šãJ¤’Å=ФH‡ F_܃Ízˆ5¯öb‘é§Ü(ŧjŦE%ąFŦrúIķ¯Ų@¤ŽTF,O!Ū0ķņ–¨ĸS"n˜ŊÉQ—áãæŲ- [ĖíMsāî’ãūČ÷ÂķĪôǎ…(mãŖtąIŗŸĸ0#ײCΤū6úq%.ĮøŅšĒĘ7:Š´XŊ5ŦåšNuiHÅ>ŠūZŧ.öĒu掭'vs–uŌļB¯Ũ:ĪÚ"\Á‹e@S´÷™ļWģĐák[¤9îŲ냧¤X4…Põ—ã´! ÜŒä‡ōƒz¯Šģ'Ų’§e…Œs7Ü^Ō D đyFß*/d7pÉPG}ŪķãgüŨąWYđÍšJ­ĒI—Đ8ØĒš˜ yū[ ÖzņúUķ‚úl­[5‰QĄ[Ŧ!š7ôāT¤‘ŐÅz,šB.MŠnrË2Ž‘ũŽßīũ2܇îÜÔuh§z-–ļ­žū>âb]ãÁŦ6qķ%íĖeˆHŪ(‰TCđš”ĀüqŨ_V&™-¯:pJđgUŽdagŲ!&[­EžŒ”öŨP8c<3–=ø5pČãˇlž9”øoéÛŅ‹Ēû×`ĩĩJ4ēj2ŲYqˇĪŊæŋ˙bŖ]Hã˛ĘĮK”{đš@úãn nĢŗ"Ģą÷‡ø­˜L=˛ ”˜ŧ­Ī=oĩßLōzģŋW˛íí2Gˆë* %š¯<ˇkķŪôžĮ•úŗ™ōK63^8Ū☖› ž9z“Cˇ‡Âgv+¨‚TœīЕÍ÷$TlOô .‚ļøļtŠ\ؘzĖÎNĐyj<…¨äŖĨ€IíŗÅĢÄë=lįĶ.b–}^$7ŲžĐ•ŒC¨q~%ģ+ŲŠ‚ÍËUĐ"2o;ŨÎŗ×Žáæžg@ĸ¯ŠŖx+úīļŊÆÄܘ:Ēb0,Ÿåqu^Eú*%›o´{ Šéĸ–tQøˇT‡ŽĄÂ‡ÔŊôĄ„ލbbŽzFûēdeĶÖe“”ŸhYú ūå†3ҧ;ĒEųŪHįVņ’į?gågK Tˇ„” ĮžÛ Ēģ\Rēkz­5†oTŦu<ŲSö•Uâž Õ:ŽpÁ{HM´]wŸĶĻoX€Sī­áīY†ôŌwįōžÖOŒy:Ķɔ/6 \üļa´a÷ļņQŋeĸŨJ"W<~ë“Í>“Ú Œų´[ ķüešŦ;$I_pČĢŽ@Ŗžˇˇ~Ā §ņpTŠO}Đžŧíŧ6j>Œ iM=ŒÉf–?RĶø[G Ys†¸Y”L˛!́åXæĸĮŗū~Øaī/nÅOsÂv0Á'ĀŌxIŦŅá ¤æč.{ôWøúáŅN7ŽČ€0¤Ņ& 77AĐ.fց-<ŗhžeŒ!ąpqzaƒš”hđdŋc~ËÍ2xBáYŖ6QķËĸ`éŧ=ĨņŖC¨øi&ŧ’øę؅ Äå<”N›P‰UĪĐF/Ļ!̟1†Ü÷ū؈"löĢ ’&—HCMÚ§ÛBLÉs ZaådŸÉDš IÕŊŌ6y Ģ8˛Ú‡­ŖMéĩzG?qū„~ģ{‹Ëá˜ŋZe[ uÎĨjĩDYM;+RŌėH蹞Ō;fåc4@Giøˆ…Îw2™Æz…ė‘%E7e€n‡ëœÃ9ņˇ]W„øÔTuFyמw0EĩnŲŸ‘aqŪŦ—6ļĘŠĀ@ļĸŅ|Î:y~G€PŗSîÚJm†oFvEiOgŒrŽ#îQ‰ T"\Ãąĩ߄;8ZsH”Lؿ׉j}lDĒÉ§Ü—× ŧ… .áļûċÉĪßZ:5ŗkāi ilÎû.ėĻoŧLrPW_ŅIFÔßū5ņ āˇG(€qûēú>éBˇ;‰ōū%XuМdsËų™Ö@īŅKŨ <{>Ķ ˜đ–sȏQmŦúFn&žiėjūƒ(ķJ_øÔܛÚĶOoîĶדOŅyč„xD–†įČîÂyą[ņđĘu{ĐĖîęØ+ģW wĘ^clbōq Ôwåę—#ˆU#mæx,#š5gū(<:ŅÎų)÷ō՗ÅŋC3á(÷ãĐZFs1Ā(ÉA=­ÚR(íą¯Ėиô`k¸™^<|ėĖ-éUw‹C‚ØÕũĪŠ5N„ŧ bdlĮŨŽžY ßĮŖŋäÆĄ8“1€JÉ˙áŋ%ˇĪ6įEÛ]]Š€iˆu’x™#lär=€˙Y…ĐˆrũĪ|H|iũ›ĮVĸč¯Ū"ūĻ‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙KÆ?˙Ŧ0 Ú}@ Š Ú}˙Š:#÷×Ļ' 5¤ ģBÍ9kɕ}"5B.ŋĶ2lnģŗLõ]YZXLÆž‘“˛ąū5ų&XcĮ!šßß9=`4:R4š-I^ŲŌÍ;Ķ€æ¨¯Sq@ãL+Vxwë)`Ô*ŨĪĘ ‚|ce3íͧĶÕ°H\‡ÁaFö‘Eī)Í\/ŽqŽîl° šßŅåy*´BĖ#ŌWQÄ!aÁļ¯8øŖ?gœxđœ dD>ķ ÁËŠ—Oį7íŦīę0 RmhÁ§ ËÕ1ŋ*gę  úą‡Œēĸ#Ũ[š†”[,ÂTS¤ō„ēb-ēTiZé8+žø§-+’Ž˜,Īî˜û1˙eÍĨ‹‡?WĒ‘Ē|™Ŋ–öŋUDĻw‹2Đ ä;/ėĸDRNTXbéd Nđ[šĢH *Ûė[ĸ[øŧķE‚šĸQÃ/= N¨§Įžct,˛Đ}Ū–#œJ1Ķ<Kė“ĩƒwî•iõ$÷ۚ>]V-k<ŜHXҚÚČkëlŨQ.Ļšķŗō~Þx&Õ#nQįņĪ_CÍ]'Eæ!v6Bö‘Ü=JĻtĖĒčąĒmbŠXĐĄwEų{Iģv­w_ĘI˙¤īno‘ĢáÖϊõšĐÄ)Î#ŋŨ›{[û{÷™ëRíî[P¨!>ûƒ'Ķ _LmKTŋuÅj Áûȡtî˙č ËQ͐°%!_8Ąį5ŋ:"QAŠĀģį›ėöüēaÁ|đ^ļ˙64Ō/vė\Û.?ûŋė0‹I ­˜cũKWÜÍ~Ē<ŋã~„%mß˙Ŧ endstream endobj 8 0 obj <>>>/MediaBox[0 0 840.96 1189.2]/CropBox[10.9871 369.239 634.909 1171.81]/Rotate 0/Parent 2 0 R>> endobj xref 0 9 0000000000 65536 f 0000000016 00000 n 0000000062 00000 n 0000000120 00000 n 0000000264 00000 n 0000050841 00000 n 0000051034 00000 n 0000051180 00000 n 0000166202 00000 n trailer <> startxref 166396 %%EOF leptonica-1.86.0/prog/barcode-128-300.png000066400000000000000000000051531506303110300174440ustar00rootroot00000000000000‰PNG  IHDR­‹GÛgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I ŸIDATxœíœOn$ˇ‡ŲaBV•$æ5˛\Gņb ›Đp•  ¯ú>JJ-įaC‹,ÃΊļ)2$ë˙Ģ›ŲÄÕ#ŒĻͧ7ßûŊGJ3=@ü/ėØģcwėŽŨą;öėe|ß7–Ā‚FŋĢôĪgj ÚĮą ÔúũPbÅAEÆOô–‚8aa,‡Ë*ö[ˆčq,ūjĀęšûŠÕĖJ`›nÁvEΘĀöōny)ÔØæųZ Û!!9 Ø×"ØgšĘ*Äō#šĒļˆÛgA˜ UÕĢ)yx&ĮØ] `¯âĒą%ĻLae¨ž`G,,2ŧKĐs˙]õ,•ōJž™2+Ō<÷ŧz°ŦÂÂöŊ€j,ŠûcŦ”€[‰­€*˛õŦ.ˆílßöŧ ŽÕvâĩVNŲ„USÆa1,ŅÔ “ØĒ VŽ•_Ô3šoE‘–iŦÜą:ˇ ûSOQl:ā|Ļ*ˇúã€Áūî€˙eŅ—9"ånQ‹Ë ŖąE6˜2Pk\(lÎE(įú!Ov€TĀûËtex ËĨÉŽQĢk=V°âēļ{×ã׌}-‡åíZw-Ͱû°Ÿû”Įć8ĩ40"•Â~U߅ũų¯â{*gŽš@%îʁe›°?rÁ!A´fm€h,´í$ö°Ë˙ņĨoy#čN-‡¸&ōR×dyr+hŦpąRBÄíŋÄMیŪ>Z5Ac-;āšÎXЈũX$ÔēZKĐ‚ÉHlÄĘ*g hŽvÍ-Fĩ í›\¤:kėeÁōÃ$ÁpëaCIPXĻąSĩËV6‡É§J%DąžŒĐX­!5ōč^ÜZI8Únĩ¨Va?´„÷EŸ$ ģ´ė¨6„]ÜÚ-fD, Qˇ‹ģe`N‚×2›’ ąĀ’āēIĩŦļZ†5-s%CS•‡S8ˇmnnŠž2; õ€%֘2šįöfˇŒX@‚]Ÿ2ŧ ī"›Xo1†°Dc—UcaŲ ĄÅ+IŗÆÁ“ā$Ą ¸ĖiY(`4Rm|1šûölē%VËļŒSfW &ŦÛĐ8„æíÛEqܒ`ĀRĖÄ"S€ĨŠ ˜?ŧHŒkܑpÛ°`ËϺ˘˛Û°Œ ÆŦj/ņ$čĐĘ[X^:"mė0ŧ÷¸ ,=eN‡¨Õä,ávX5˙™˛ø8”oƒ‰5l¨eM: 9kÜŲˇãɋxdx•[÷ڜ>Ëhõæ¯#ᖋ$`Û¸;ÁĖ-°I°‡÷2í„ČĒÉL‚ģÆ#,•Û¸sÕ4Ë­fēąehÆžé$œ] ĖiY~nũá}Đ­)ámš1 ëVƒ7įÖ<Ūü“×ÁŪȆUcoĀ­—„lˇÉÜŽIØ6Ž5ŨzXš–ĀšŧUC7¯qæ´ŦqąØŧ~ nelNBdˆŲ˛UŦšo#XēLÚŧÁĀ´k3ˇĄ€ĩYn‰ã6°.tũhØÆ^5MhÕI@÷å6ŽÕ-ëCØtĀ€šÆ›D uŦZœ[m;V[G%,ˇƒ{š(ļąsģ‚ NYDqÜϰĄq¸[4’ ž?”l™)!×í‚ŨÆvÂ5ˇeø>ˇÖđ6+I˜%’Pģš=÷A,q°“Ûžln'ˇ}OBŽ[âcS&?.$aÁ‚%`§‹nb-CnÔ´áj7aoÜhYÜ­Hˆ$!˛jjOB8`)CęûĨ uŽhŦšKƀŨëvJqZVO؄[—‚ Šã>RmíCØíҍöf`ģ\ áj l3aÉ\햀ųØaĘF XCŸ›„ļâ>6ívĩe:ˇ<Ø˛Ä8äaáõĒõą[B•’ā$ÔŅqpą^ĩpÂI8åå6wĻ€™-#Ų-Ŗ öÉÁrkxĮjad˛Z6aoŪ”ÁÕjŨ–=™IčLˇˇ-VZļŅ­™âŦJĩ į úĀėļ3ąÄ¨6Ö˛û‘˜˛Žc–„1 īNĩpZãÜkŲŧĒtˈS-0ŨōÆĄØ”Ų¨—[čWëo°tĩ! lŽ„1ˇbÁNÕvū™+á#:ŧ˃š}Ø-õX-Q[kŽÃJĀ|lpxo#vnY{ņŨjl?TË`1 ˛eGB ˜Üˇ"-ÁukĖÅ­j3$ŧ÷m7ĩ,7ˇ6VŸebl™X‘@& Éqø˜6˜3Č:"Ģe™n O“[ ûÔvÂĒ[ĀÚ§Cc­qÞ fËzw'ŒÕļy.>vr+BؐÛõ$Xœ$Ôū”eT;ŒÃ€ŊŒÃëˇĖY5Ü ŗe•ÆÎÕįjĶ-›Ēe:ˇÖđĘßíKhŦjŗÜb?`Ė9tžBØŧ܊i1:ĢĻöŨfŒZûvœ2R Ķž•X1H@ÜŽV{öĢ×øâv‘ĐXûvHÂ9Žeđjƒ–@ƒX¯ZųUũZĀfė×KĄÛܖˇ$ŧ/nÅ؝ŦjģL,•Õ.ĢÃ-°ØOBŌíP훉 HܞōZF͖Iė9ęÖkYKGė›vĢąbH‚5yšĨ†Û ‹ĻáÜúØŧ–ŨŒ$ ØŲí„=EŨÆZϰtnŲėvÂō•–Ĩ’`cŅ„ ė^,˛sË]ˇuž[3ˇĮ1ˇ–„Ų-[ļR-ÕØÛœ„ã"!0Û'†×™˛¯ÕŌqx‡jiÍ*܈ŋŖ˙"BšŊ9šM`ŋk1úIô\„€]Gˇh^۟ č“ũ1‚‹aÛ;¸Å[ķJ´iRKũqļ~_Ä&ZËĢ_Äį7÷ ‚Ø/’BØŌûĢĀūŗVŪ0(’[Oũ-jŠx‘WvcyúĘũ5– sū€ëĶAŅ$sÄöe^s*Ā‹€¸­€Ügr͉—WB `y}å5im‹ķõÆ `YCX#™ŦQX .äƚ"ØS#™|ÂŌ"ؖ[Žf,’ØöqŦx˛s„Ž tIMEØ 4˜=  tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-2of5-300.png000066400000000000000000000046161506303110300177100ustar00rootroot00000000000000‰PNG  IHDR• kō“gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IÂIDATxœí›?Žä6ÆYą lX l˛Á`čĀ˜ †›íœ-°X›80†*Ë@…}OčcX Î ŧjtĐĄŲp°XCš¤T%RzüŖ’"[…ééĻúWī{ß÷ŲĶŨHnūāhgîĖš3wæÎ´6bū¨˙ęrķqKeyXÃ,ąyW™§ö¤šJ´†)P_[f DÔŧĖJf‡˛ąÎ‘-˜lølÃŦ{Ļúx%ŗ˙gSmÍđĀ,‚Čŗ%åXį=Įš~\ÉŦiMŸĨW2i=0Õ.Ō ’kfą&ķj's|doĖ•jæëWø¨WĀæ'ˆ˙åĀūšĩ¯&Âkwˆ:ã:ŗëę™jį)ŨĢvĸŠĸ†Ŧ™ęŊbÖxŗCš@…@æėĐĖŽŋ=ĐLŠÖ{IôQVģˆŲĻÜã2ozėĖ•÷,s.Ël5ķŖ|÷Aĸ‚#zâåęí&æ/RVVÁÔ|2Y0u%aˇ1˙+ņ¯‚¨ŨyĐLá0Yķã—ô=§ĒMˆÔH⁛9ŗ5Ld~üAŪqy§^úN?U?#|aō‘ŲÚLŸvõ4¤´hÕī./ev@šÕĪlÆÔ/ÕN™÷n“~‚uΘ'€é÷(Â<9L푗IÖ9ë'¨=čQķfí6“oÄ<ų=šiĪÛUYŠÖ™ĘŒh_ęûŠg–­ō(ĸũZg`æŦ:MæņēyŋĖ‘UįŊ]§´˜Cãib˛…ųŦ"uÂų,Ff;ö3ŋ‰Y:Ėk?sˇŸ!.ĖQģ›ĨˆGą~N|/ŒG& iĪŊ™ŋj3R'ņäĶŌŽVyŠ“Ļhˇ<|7™ˇ˜ü2›$2GđŊõeŪÔÉ{féįPg5e‚žķ¨v› õŗ÷¨‡Mû ֙_}'|ĸéĄ>fn1'ĩf°ÎŠī`>[3īȒOģ‡iÕŲ^ú90šŸ™û™ƒöÛ#yõˆûķ™{|īÜ~ÎįˆûįŨÔŲ˙{že~æŅĸ,…wōyī:jw3ß.csâ‘wöHĻäĘ<¤]ØžGö| ÎÁ÷öāzÄũ;˜Í `.ōŨe&퐕LlæāQL{ī{>2‘5Gp<ēëhĪôöS2ŋdŽ<Ė´=ožžgúëWīlÎëTŸĶDî!v–ŧ{ŪÕ~aF´“ëÍwŨ|.9€]'f{>žĪÔŗCZ_#ī!ķ|†™ ˛tJķ=ŪOČww6/w04=ŧsdžĪŖĨ{>>G֝aœŖH>ž;_w,ígŪ÷üMÚķ īíl×-ÛÉÄsnæÖNԙ;į;ņŸG­÷ܜ÷“Ųsō}ļëRæ(4›!üw0Ö˙Ÿĸ÷ėp<’QîÜ:ĢpN?Ëȝ!ąŸ <â–īP–ĻĖ´û|žÆ}ozíĄĖŸĸy´æÉÚķÜwŸoÁ9R/Næu˛Ų=šqĩ{ędíãÃãŨ&…ÉĮũ9Õ^\´s×Ŗ.čģ´ķ9ī§ūtˇŸaßŗ‘ô;ž7ŽGĶęg3O|2›—:ß2č§1č§G;…ú ų>Ég“ęQ3äĶ[į°ëøß{í&ˇf“ÄæČwīlLGûÜ#šÄĩ;Lī€GAíėŅŊšwÃũ$1fxÔöu"Ī‘°G č§aŪ{ĩ'Ô9Î&Ĩb‰īķ:Ģšīhdf“:ģx ŗEĢ´Ī|/&YĘĻÚAæp‘ v—™8īž9*zíČ$Ū3n’Ī9ķö:ᙎ˜}8;nđŊ˜dię{0KdŌĪÂĘüŧŸŲĨÎS˜ĻÎéŧßčģūæcyp˜ßoĘüŒIí^æ4ķc?ßs”æ´Ī2¯Ūd˙ (ÛŖĨžģMĩûûōŊ¸‘™ÚO—yŠk†đĒ:A&Mę'Č|;eō„,I_>×~w]lŽˆ) í)ųŦ ssvÆņEũôfÉŅžœųI–đČTžËŅ# z”žĨÅéķ=e/UžĖcH{¨NÖîöSŽĨÎŅpGž0%0Géu™‡˜×,uŪ9"n?q`Ž–j§p?ûcūÆ|zæ}ø!Š^{ ŸĖ|€´;ũLŌîf^BũäŠs4õhܟÅtŽ™'×#‡šLģwŽ.ڙÔãéķ(’y7Kõ•) ŊôŨ›OĪŨäûLģĩKhĪâũ<‡™Ë2?÷ō¨¯ŗ˛˜ķ:#ũė™Āū4ß\ČŦÃũtĩב,5SĻĨBːG6ŗƒ™`!fci_ČôjoâžËū‡kĻōčąŖu&čũ§afã2s€ŲŅŗūųių7*ŨĮ‚~>›ģ|Áuōį÷Ō÷™Üe2ÃÄäģ_yA!fsešœÎ$Ââ?)$ķÜé7Õ&DŸ]‚˜úûĪO7c@斏š3˙™ŋÅD˙ĸØ&Ėwé_6Ô;`ø%æ ˜jX陑߅MfbŽŪ BVüŸ´8mØû†R]ĩ>oÃd˜‰—äNdŠI6bļøYž įžųËĻĖîßĪ2iĢĻ0ÕLyĮŲSˇSbũG19ęūE6c "Šį†Ą×˙Ā›1;ÂđcÃ^ŊF›e^rj˜Ũ‹­2¯˜­äÅųé7ųbĢ|*æQĘĶ:V?ێ)r)Īß§˜ôq+Ļūmí3BtK&'l4ķsÚlƤmJô ?ߎŸĪRŨĸäųA­§M™'ųÄÁ›å“Ą—¸ęęˇŨ)Ļ‚5ęXÚėŒSwnŦθ'q›ÅĒΟÔY,å˙åo O˙ƒŨmvæÎܙ;sgîĖš3wæÎüs1ɄÂÄļŖÉtIMEØ1*”$ŨŠ tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-39-300.png000066400000000000000000000070301506303110300173610ustar00rootroot00000000000000‰PNG  IHDRSõn’_gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I LIDATxœíœŋŽÛĘÆGPĻ2Ģ . MĒ<ƒ |”÷\Ē V4T°ģz?Fē˜‚ )î#xnG1đ\Mæ‡3gūP”ŊÜäZ_Øwqīę§ķī|sFëb¯öAЃõ`=Xփõ`=XŋUV÷jŦgõG%OŨÎČBXūąŋĩ VĻķąŽ(1,Šļũ§ŗ°Z´4,‚žúOgaQ´0ŦzfVŠ ë#]§įc‘ŧ4Ŧ]쯇ųXõ–l cÉîē”Ŧ|N#Ûw‹]‹Ģž“EŸPĘŨČũÎYīįdX[ „ŗĘšSfe}”#FҞBŠšYé‚Ŧ—uĮY¨ÃåŦ,Š?’L˛Ž¨Kgfå%Ų.]*Xčžé~VÍY9‹ĄlnÖļ&lWĸT¤ČĖ,„-%‹âōÕX-æ%ÎČĸz 1_=0›‘Å3ę'ÁZŠŗdĮYŗæ!umĢ]Í|Ļ|ž?\?qÖģtF?+ynP‘)?—ß%ģYŋG<éÛeŊáŊú)›yˇiÅ?üLÁrˇ™wgëĐR+9˙Ę-šqíPÂ×Q‰ãEōŊ7Ÿuå… |]¯|Oŧ&ėręÎ}žŪ2ĘØ—ûßÉúą˙/ÖߡųĖŦ´ Ģ––exÖŋŸģûvš´í‚.YUą¤\Ŋ(ĢûüšĖ1ĘÛbZ>y§ĨÔfå?ĖznØW’4 +ąĐŠgmĢ]ÉJŋŸĩͯO9*PÛ!ūÔŲąN*ÅZ­8k#ęZÖū.Ößžņ.7MC’_3Ü­3ÎÚ´šĩkx’¤‹×uN­k{}B]ØåŸāI(ä[ĻוdɇÔŦŖŌPŗŠčWœEķOû_j˝Xk´)Ô3TŦbŠēŪ[u ‹Ą_tˇgÖđGÃiZ•)ÂmĪ: Q,>*=k 5,ę~}xf•xæ=KÔĨžaÛŗø3Š•†+á S—Ŗá˛‚9+ŦŊÍēhVu$‚•ņŠ%kã°r›åöËÕđÄxAž†­aÃYRCÅÚ¸Ū4ė´Gúubģ@ŋî+í|ĪËēŦ~ö|5a Ī’åö ú,Ū¯žį ŋ_UĖ)`vŋÄ|ņYĖ—•QĀZÃ@Ο<ļ̆čY^Ī÷‚ēo4*ŖüųĒ‚ũĸ–į­ŒÚ8u­ŧėUŦ‘ųÂ^ŋÚa–k–…†­É ūēŽbÂ,‡5´úEĖ,r>tŊč—īÃÖYŊ†$îC:ÆR>Üû,ãųŪ‡^n¤e؇M47œ~oHĪ›<äļVΧ2Ļ †ŖšfYZį—åÃ#ôFŸQ›>7ĒxFscč—ōĄã Ų¯2ŧo4ņ~% _ Ŗ@nxŲkųpznD5ŗX-8+1Ôp4įĪŖuíœsYÜŋZ;7°ŖáčYé{cmû°gá˜7r'7nô+4_ōpÔåŸ_p–ÛIŪ÷kÎe3Ëdđ†īųÅČųåökmĪ×Îņ|ī ÍBĢÔķFœĨ}¸ŗėö‹ŗ˛•Å {žÕMŸ¯ĖxƒxŪPļ 7z–ŪˆîœeÃZ„ŧŅÚũ2žķ5YCŅ/؋‹åCa™ŒyŨŖü~)¯_ˇ2ŠNÔПe‡ĩ‚uíŦ]4ĻaaUPC'Ŗ´†íÆÍ(gŸŋq_>z>TŦ`ŋÜYÎŧ=Š,FōаJPņÎe?­×ˆ&)ކĄYv}hō0ílņē8_āü*˞el˛wڙ=+õ¨RßķŪ|ž–ŨEMŋ˛,ēGY;€žîQ°_YŽėØÁģų]ģ _îYš˛ûE_d°ĪęíûōÄ<´sÛ¯æF _wŸ)áŊ×ģÃöũ˛}ˆîŌ0žcί•QëŽŨ&¸€]”¸įō¤ŨÆö|)ŗ×ģ§”ÖųU¸įrúCwí ÎC ī•oŧ}~q͇ãũÂÖš|KÃûöđ6Ŧ!x~w‡įÕn3ļcF÷Ūôž}cÚ7tš†bF|wl›åzžöîDâ;>´UķÅkž|.ŗa?ôvļÂŨąSÅęú¯â,ąÁN<+‹Đ(ēÛhÖ°Ī[ŗĐĐõŧî ŗD]bËذÚ˛ŽcÔą›„æKy>ƯĨČ.OÚŲø%KŗNâFúekˆõ=å2h(žųt;×=kĐđėílJÝéW}¸÷|me¯`]ŪX…û%Ŋ‘é~Ņ)ũJĒĒV;ö !°6+UŠē´{mVˇ’5ėØå s×Ã)č—ÅŠĨ4ė3ę+¨Ąņ†åÍøŽ5YÚCŋŦYŽiX‹ēkČŪŗįyéÃĨҐŗ˛^C‹U‡g™(–ÔpeĪĐĐô q —NŋĪũš;ô,Ģ. 5ÔŦĮjí~YFûĩ‡ķÕŗvYî}xæŦũĀ*€įŖyčzžŽø?Ēôa­sc §ƒíy÷FHÃÁŠĨáBkˆá|‰v™ēĻ{žõ<ΎNKCČĘ 7vãBÖ)žû%<ŪčėųęëÕpx€ČĀhX€YļX°_SXi_õ<įëōĐĢë†įunŦ fožeáÃÂÕ°ŽŗĒĒņ!Ãø s^öË÷!`{>íëōs#ĩ˛×Ôĩ>¤Ž†!ąÎJ—u8[ŦLĪ—ōF=䯠áÍų"RC=˛ž_°ú~&ĪŪYIîė×ā~q冟ķīüÜí—f­{ÖÂb1,â×h¨Īe͝Š>$–7ŧ3Eŗ€†§^CÍZAoÄXÕ/=ËFÃEHCĀĒĶt´Ž˜†Uĩ“éĘe`]›kđáxŋŦŒrûՙ~ +Û[×ņ~9,íyū° xž†ŪđXąYVĻ!.ë„úutY“=_UGËķ—đ| íųšČ|ØXuÖAįáÕõŧS×ZąŠ›,U—x&ĶƒEŋRØ/wžÖAVĖŠe{~ĐpI+āų;ûuąû5Ėr;°Nƒ†^]`–E]­aíFX}ŋ„†™ŌĐÎy^—Į˛ûeÔíKQ-s>ąŊŅ ŨėUŦĶíųJ,Ķ/ŖaĄ5¤6‹?d1°Ę€ų÷–“Ū‡ĸŽLõkĄûĨsãß¯=ą^Ãjë—Ēk˜¯Lû°5ž×u­Ã>ôYA / _W“Q=ËĶ0Ú/áÃv‚†6KiØYžOšēg÷\u5aÖAÕu´|h{ä<`ÉēöŊ†OjžnfÔrđ†Ņ°pΨ!õrc­Y#‚Œ˛ŧŅƒáŦĪož”†é=ķEĩ7žįŪHÂŪxžÄ ĖĐPx#Ŧƒđa3ęvŋÖ,Úķ2įE]on˛¨é×ntžŽÁų:Vp–Ĩ†™íųv<7|ÖĐ¯Ķ™.íœ_ƒYŽäāįü9<_TÎWPÃPöŽÁ|UÆ@ÃsLÃhŋä3<ĪûŗėäĄöá1Ū/w–[3ËÔf3xŪ÷ayŖ_[—åCŒVnöVQÖ.Ċõ̟¯“+WÃŪķâÛĻÔ0čC*û•VMãi¨į jčWfräáø|yyčôkíž_×g¯ËšŽĄí`F}oÜÚ¨įyāÓÉCxĻNĐķĖˆįÁܰ4$ɰc¯ĪšaiØLceKy>ŦĄčWæzūķŧÚŲŸõÁ×đŊį Ûķ­É¨fĖ–ęW¯áUü …Å:8ŗlŗÎgöË??}a,¨aâíQŊ††%5|ŋvYZà ą_ģțāĀēFú5ė6Š•ķzˇŠņžĖ¯Ûí§0$Đ/Ár4ÜXķ%ęÚ÷Ŧ§ūÕņäüũk`ųgeHCŧũĘŅ[LD5 åF+ģü&ôžŸŒžĖÂ艺Úįîú§į$øŦ ;Š~}%iŋØÃGXgšNîōą^ããÁz°Ŧ˙iÖיY ûÄp‰ž"ĶßđãNVŊUomƒØ^°˛yXŊAˆ!HäûĀņ…ÍĘēĸD˛ČŸsÎúŨ_ŽXŧ22ĢÃÉqų…?~‡š†{vÍÅOJŧ8ësŋčrž6ķOÎW,–ĒšXlΏŨž%ë(Šš›%~Ž˙{Ã>ÍŠ!û™k(Xd}ž_CɲWč—zI"YûÍõíb6–xK1QÁŦD|–yFÍÄŗŦX”'ČÜ,ņæ˜BÎīôHfī\rV¨7üŦįžež˛Ũ’U-gvsŗ0oKØŋ‰Ííy‘ęœÅ/_ûYsC°~åw ҝũ+°.ü—đ|%YķjH{Vķ uQņŗ‘Läa*2ęųé-ÚžësˆÕn‹lÄų%÷—`å> ĄâK•‡(O_ŽuŨ†XâŲĢE[šŗåôūˇcmyū"ūë÷ŧŧq‡7ž°ŋ>‹72ûūßØŨáÁúīąĻæŗšWdÍúņ`=XQÖä2Áf‚ątIMEØ(^Iöh tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-93-300.png000066400000000000000000000045451506303110300173710ustar00rootroot00000000000000‰PNG  IHDR=įŨĐÚĖgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I™IDATxœí›Īnë6ÆéjPŖĀ Dwˇ@aŊ@]zaXķHéN@P^dƒúōŗčT ā]ķ•āE—Ĩp—A ą$õ—â?™žŨ´NŦ_Î÷}įjöi.Ū@o 7ĐčĪÛoOŨËßCA ņBųbÍō8„A2‚ĘˆĘÛ;[PžjĀ:”ĩwļ  4 ”`(hEŖáCü> ÔD,b?2ēƒ<1ļÆÛ@Ü`„˙ yb”„‚Öė=q `ø ˛ Ņ5+° Ā JØ1ÄM–å@ЂšĀÔ$čŨ:+áĒDÜŖ6¤=ŦßČ!<ūøPÎĸˆŪ ČoǍE÷ ‘„ŦnžrŗOŠy~z@ø]0HtvįŅ/âŨÛäfL ß :R(@'>ũĄ žFō&:ɆLã, čō‡u†ųˆ$l•>Œ_ėėŦ39ũü ŪŲÔŽžä) âˆvą•\SÎĪĩĐãˆ73 ūb^ ŸØ< ņß7€ŅX|ą&a¯Ž7ē/.åŖį-Ë@K¯ŋ"¨ųī¯7^YÆIĶDÅÕ Öė÷ ŽĒ 3ĖÃøĐī,yå=füŽfŋ“ R‚ēŠŽvĐ/gFIqaU× bFî;ĐN€ę„mŌ~âwa~z|düyÁR¤™<*.%ØoâR€°ŅÔpN[mĨÕP‘ƒÍTP%AFifP)@ÕrKë@øŪ mŦˆ(Ii=¨•V{¤íGĐq’õŠŌRĢ´Ō"­7ģī#l]JŨl‚-Hņ¨ŽeEČԐ3Đq?Q*ꤙAĒGēøk‡´‰GDmH=ūNšˇ!•Š ZQ'MT”!߈8âo+*]Ō.Š´ã\šZ‘ß#l‰4{?Hfi¯čė”ÖUdõȝÚq.Íbļ)5h¯ČŅ Í J÷‘iÖTō… iŠĪGd‰ŲcqJģF4ŗ9ČېX÷wŌŽ†ø= i6{ rmHOõfoæ#rX˛üGČr ›Ų&iūéW=Ētŗ7„Đayj3$¨\œšaŌJ|Gą $**¯hČyg Đ(mRŅA_÷čYíė|YgëÅΆ>ÚlÆÔ–ÎZ,ãŸKÛ eKú荟kZCfČĶGˆƒ =ū"gm"Ía6šÆĪŒŠaībs™Īú(ŗ›}§Tä[l™ŊFĐŖ^Q‘ņģú¨ęGä^•6Ÿ~ë‘CÚ<~ÃŲĪ=ōŒČŅڐ„íŗö\@ę†ĖMŌ´†|–ÁiCšA{ÛéG‹Ļß$m4ģö™-㟤V™ã/Ŋ#ĸ6¤Œ>"û €ŨĒu4¤”v?zÔWDŗĄĶėļ!a'íl6xK×Ē•ņßMÍŪK›{ÄSk=ęR3ƧîŖg[CNGDķHVĩégsi=ˆX@“ÎĖϟ˜:™SĨõŠíí}äMR+2ƒā´ŗ-Š  ÉĐęĮQå2{‰øĪ˛ĸĒßØ.ÆĄuKs‚ôøGĐ,5Œ]§ˆÁö‰z:"Úšļ(ūqhåˆpjà ĨŲÄ)-öĮŋ÷U4Æī3{IgkD_?¯(6€ ąķ€Ŧæ}´OÔĄKc–}¤ŒČščRs€lC{éûh4ģpvļķiDZKCÂĘŌĨ™ŖeûhØŲN”øwū}49Ef <ŲŲK7dmÚGĶ>rT„õŠ\#˛[bļEZé~8•ÖŽ͈øAzEĩWšŨėt0ģrIķ7dę‹?ÆŖ´ínk_#Š´N‘Ôâ‘Ålwüí͈Ķ#(†PŲGjgĪG$$ūk*ĒéČICÚ§ģ ĸŊ­!§Ōļvŗ‰ß#ŋŲúō÷š­­‘ĒeDė ė“64äŪ:k~ &M=úČîQz­GĢĢA+ƒ´UšŒŋā Í˙ēM¤!¨rÄ/A‰ŠĸƒDéf ÁŖūa49KičĸIÛ-ŠŌļfŗS;Č m}MjÕ´"4—†tö¤†đŋĢ!'YV­* O=2Ļ6īėJ™+Z鉥õ€še ģ4ÜW4Jƒ]g›Öˆ=5ĸ€jAąÆO6]EiDĒéIĻ ļļbhĢ… qÕĒú†\ŧFziIĄŒČcŠæ ¯Gš4[ürņB=š=xdî#dīl"=’ Aņ¤f‘ÖĮUŒÍ¤ÉÅVYĨY@Ģų†¤úŠQVí`ļqCRÃĒU@H¯HxdÛŲÕuiŨĒEÚ>šz¤Iƒƒ´Ž!ëqDzbCŲĨ%Ã>ę†Ö:"˛ĸ˂øë”@ôp8<€?:+RĖî@üOĮ1‘WÂ(S/ģGĶaô ĖūĀė—5ĩFšũʞŦ˙pfõQôëeŲŨ&PŋüééęÛuĐÍ×čĪ=Ū #E­˙|ėAöcO Œ‰˙Ҥí‡#Ž5ˆFŒŋbđ eDÚG\Â+Q,9(gū9DQ Č줁å7|er§ëúį8DPEŌ&Ąđ™D>ŧrTДÅDčÄAI(Cgú‹É‰ƒÄëũđbŠ}¨A߅(}ĪâËé_?JĐ}(ˆ5TFu.@$ĩ|¨f ˆ? œrP‹>z$Ë ~æŅNųŋîAĖXQ>„u6•T{Ґ9@–Oų@ {ĪĘ8>ũFŋE_Pūũ? „ØšŸĶɉŅoŲŋ _ŖŗÛ^øėÁŨW+úøĸ9°@P‚Ú˛“øÁååâO$?Œ  BâŅæ|qnAgü!TÚE<#ąĶ™Ļ PļFøŦņŽŒīŖC yEÂE˙ËŌ•€ŠÎŪŲå`Ëo=aņÉĒNšä`Įo=y˜0™å3 ŪS$˙ É#ņŠ˙QØ>2\įOúdYŽ7Đč ôˇũX@Ŧ(Āī¯?tIMEØ XTc tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-codabar-300.png000066400000000000000000000055611506303110300205300ustar00rootroot00000000000000‰PNG  IHDRV-õĮ%gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I ĨIDATxœí›ąŽŦČ… #]’V“v€šuH€.‰dW~&kËWÖHĶYķģ~‹á~ÁM,tsĩ,åĒĸ€Ēĸ ˜f$[vˇvuwĨéoĪ9˙ųfV=~ØĢփõ`=Xփõ`ũ¯°j›üQĸŋo[YĄNūȂíŦhÆjø0V @đQŦīÃXvFYŋÁ[kŖą‚{Y™WzĨ ãāŨ ÍÁģ›ÔvŦÃđ‡g`ÆĀŽÁlb…Z Ã@Ŧ|šŸĐŗĖ0v7°p]‘p>ącęĨĢŠŋxˈŋ˜Ąīqk –ą…ÕĨcĮį@G,Xēæ&–‰XYĐøV¨ß ‘}ë`V¸™U#Öšcļ°‚Æ%,_×o­ĄmÉõŪ"}O!îÄąZÃØÄōĐģK׎}Ô¯įm,tŋ\3ÃŊÖŅŲÖīĀg-Dûčt´Û`K'đŊ'wˆeobáįųëŒY^xØĀÂĪĮXƒā‡ŗö‚ntė~ļīfA`Ā Ũû?ŖŊ†üuök—XĨ[oūKVŗŪķz°Ŧ˙3VfndũõšūÃŖ]ylÜÁzß3#jŨ§<…Ā:į0Üŋ“õ/øÜ?Áä-đ”éQëø„å¯e…ASk0=ēāŠ€W⸈ÕR–‹X-8,ąJķíčÕZ‘ģökoôžÕP]rmP¯áŪ:ÃLŋX^ŠŨ.=KĸĢ™õØx%LËéXĩ–PÖEÉjUē+ĀŦŒõW–%×åÎyÄē ÂĘt{ÄŦ†°āĢXj…Ėã ë@Y>Ķ ĩŽ„ę<6*íR^ęė‘Į×Ų9VĘŧ8V‚uåkž÷ũ9]ŊGÂZ5G§ī*›}×ûĶŦpŦš~™˛ŧxˇ!/‹ņ(Ü uī'ũbōē ũBŦ‹Čšęâû†x$Ŧ¨cuē.­0GYöŸ˜ėSĘ2-žĢŦGgfŽŸØŧBę‘öūĀvÂĸŦŸæöQ`žÕu"e<&ŗ]•įeZLŋ ĀRéâ=’įЙé}?Gq[Â2iØõëJY|ŋN\ösēlĖBΌG‡í„u˛WåõIČ yLM—aõy1s”˛ē9]ī‰ŽšëŊ 6¯%Æ˜WŽ÷yL†Ž"]é0ĮwåuŖũJû9ZŦGĘZĶ/ģģ¤Ģ‘Ëī6įq&{ļ÷tŽC^ĒėWt•ėĐČz:1¯ĢŠØėæHzßīcß/ôŸŗGũJ™ģ:aĀyåôæĐŪ_pö…˜ũŒ.fŽZžR&3ĮTØm•.Ú¯žĢŸ×Ĩc;T­čDĪÎãÁazofuQ\^g6{IW§Učw{ôčLûEnĄšØÕü"t•aE+į8éÄpŖģŊbގžWKrī×íaĄ~ŨRš×UšíÄĖnĶ{ŋÃ7‡÷øŠ;1ãŠNôsô…ŪËvhÁ#ÉõžVökE^sWÅė…~UKsdvčÖ÷ža“NŦč×Đ{~ˇ fŽīĘ+]¸…j]-›×Žc™ân3ˇæõ4ĶûcßÕî™Æ˛ĢuV<ö~dIî×b^5ß â‘<ĨpF]ō›ÃęnĄÁŪhaGēōNôs<ķēPŋv ?Įzë2°œÅŽĸ9B%‹ÛĮ1{cM^â3 eŸˆŸË+go!ŲíZôø"Ķ…<–˛ŧŽKŲ¨ØNˆ,fŽûžåpw" ŦËĸg:ÁąL†•Ā=eyu]Õ§s”wâÔ{LøNėč=i^ ũbXŊŽeī•Ų„Ķė‰ĮíŖCY“Ŋ˜—ItM<ÆŧŽŽuYČfi=kGŗĘLŸz”w‚Ék/zėXĶŧbcĪzėX’WJ;ąNĮ*GVđIŋ„ŧ(ëØŗ°ĮŊ´_B^ļ¨+ŗwÆ~á9ryÅSVËfŋŗg;<ĸo[§žxŽÕ4û‰GgčW:črJ./™.{`iŨ…ĮSļČb;!æÕ{Ė Ģ$q^{:GOč—-zäģJ<"Öą÷č]>îŊ‚ĩ?Ėdûĩį’Ÿ#aMķ tiīƒ\Čk7x”uB˛ÛŧĮ‘U@pTtu`• ëĖívw 1{kô¨ØGíEdYN—WIįØuB•Ŋ6fúÕ{Ü÷7‡ÉKÁ:NYhˇO,‹z,Į}œtBrs†ėĪ{'J-úĩČzûuŽX]ĮžĢŠŧrËįYz¯k¯Đ5ɞņxdž9îûģę/æÕŨ‰I^ÜĮ}œŅ•ĶŪŋđŦŖā‘f_°7Gš×A6Į;G”}:xTf?í=e9Õ´ĢūLīŊ™›ã×eOX“ŧøŪwŅŗ#TąÆŧ$ķŠ.üÚģŗũšĖąčz™Ė‘äå/°4!¯#ßUf\če5ŗŲ¯đ¨îŊȂŨÍ™Ņ…Y–ĖãŠu×ÜhwMŋ(keŋØŧöōŧ–=bV:;ĮĶ*VEōB¯Œ.Y'höáâ%;„b‘˛hWį:qīĒSŠ]=ŌŨ^b鉄•H˛_ŌeakķZėjŠ%û)+š#/Ę<„åKtåkōâ<ĘY8û|VWEYɕë=éD‚ŽÂ{Į÷ëI’×ĘėąĮl`íÉ…ÖaÚ/Š$yy¤ĢžlŽ${ ŗŽĮĨėŊ\ėD7ĮŸŲė¯ŌŧĻ,Ž_?˛}ü™ÃĀZҝjĖž? ,°;°ē yqē*ē9õrũÚ=ęcö~ōr‡ŨNÂŖ;°./….Í+&ŲҎ@9ų<ŒØ¯HŪ{Ļb^áĀZ“W0˛L”ōظ ‹éW2äušõØëĘh^yJY;žä# ø#qFÔzMmĖÍ1Cy5\^ãņg÷ü ÆļŲ—<{ŗëj—ũu˜cUĀ|iTŋJĄôøTÄØ#ü–FĀ…đŸ˙đĢÁ#ĸ+˛[P}ÍlˏZÁ‚vT™ņËßŪķfë^˙!Ö¯ˆ2¯5á_îeĩ|ƒ! õøĀ íÚPŋcžÂŌ†o-B-Ã,`fZĶũfØģY ˆ 5Ā õ Ôŋ?ڗ<¯ŋx÷°Z1 Ų<Û,Đŋí4)ëįģXÍgû’Ôf )ëŗW¤uŨÚwą;*JĖúŗZ7@Ŧ ŪÉ2͜°lĖjž`ÖĶ}ŦFvõ=úNXltũ›-,Ąe6ēœ5bE[Y Œ ĀĒņ’Íē˛˙ÖIđ­ĩoÛYž™$ePĀOúfViÛųWô3!úæŧĐģsØx) ˙¸ÁаĘčDĮB˙pī)ĢâXßīÛĮuõĒ7Ė ŧÛŪ=ŦąĐãĩ„W;ŋ EoŊ´(īeá;Ŗîí"ŠËž9Úđ{Y b=ÛÆ Ú!ŗŧ÷FˇŽ÷rÁ7ڍLC,ôėĐÛ;ŸĀËLĄS›ĩŽXqИđå>V”&zĻXzĘ&ŦeũūļHXËzßëÁz°ŦëÁz°ŦëÁz°ŦëÁú/cũLõXļ‘F÷ÉtIMEØ,}žå tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-digits.png000066400000000000000000000011531506303110300201110ustar00rootroot00000000000000‰PNG  IHDRÜ)v~z†gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IžIDAT8ŨĶ=ŽÔ0pgƒH‡[Šī áåÔ+.Ũh^VS¸1G"KŠ”{[š€#š‡düøgf2 Q"$"%Jō“÷Ŗ>’ų÷øg`!=\0ķ|ŅļÎM2ļuĄ)Õŋk°RĢp[§hlWgsÆIģ&U'Ŧ’ĄįļÃ'ŒØ/Üjb˙>&ÕWäũ$Ų-hû1IGŅōÖ VŌ‚•Ú8‚$íœĘ sĨ4 ÂpøŠyëŌË÷3ĒJYcy§¨{~ÉG¤ƒ•;Ĩ% d#ēacŋ4¸5ö œfØė+”¤%Ÿâje¯Uyŗ5uktÔÖî¸B¯UūŧĨŨCŪ4YaąÚIfwĸC!žŨ]ŋ‰É=ZƒZđ€TŌæĶuepš?Šf>d7j^ōvčækƒ4ŽČŖ^Š€m{}ú Ũ‚^ā 7oKōOéĮ-Qņ8 z/ũœŲŠĸTŦ˙ö˜īyÁÍCLœųĻNˇÄذšĄbĒ€Öq‹Qﴚž1`™;Â:íŠâWˆˇxpí¯ü+˙-ūcvĢ´fg”tIME؁ŦÁ"!tEXtSoftwareESP Ghostscript 815.02 ÉÅŪ3IENDŽB`‚leptonica-1.86.0/prog/barcode-i2of5-300.png000066400000000000000000000044251506303110300200570ustar00rootroot00000000000000‰PNG  IHDRõŸiâŽgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IIIDATxœíšŋŽ#šÆŲnāx€á9ģ`-žÂN& īM ĮNö)Ô-°B=‚eģOÂ /Ü81Œ60 ,ģĨžūC˛I­đęÅėvųSU}õUQ;/z$yđūÁ?ø˙āüWæ?ŪşęĖ|Ŗ)<š/rfžQi(OGOō*+ņh‚ÉT$ķÄ'd‰ŋÄo(-ČĪkFđ͙ 6?Aũ*"ŧü3ų@xū ō¯lS­XRHvåyŪđÜËŋę;–?Ņŧ~aeĩzJĢ>•<­2ēŅtĢŪ‰MŊlxė=ļŗō0˴çŠë¤~^Ōđ53üyíᙉMK‹D>ŋōŪđ•Ā2Ë7ų„nžôø<ģåīO{ü‚$ęy}Í?‡~˙-Õû5û„ēų¯ú>ũÚúš%PŦTß­ny32”œ"ä%ŽÁl%ōĘđĖøĪŧ†;Úņ[õÂ7ČĶzÉq~pÉoZ˙{ø&~ĨMũų=O4´Z™ųkžfį§åW†G˙cĖ1Ŧ™Aœgiögæ×?Š CžĀI"ȉžō@.•€›7ņqūųV7ûÃđîŖĖî@4•§3|ž"ããū"ŒņKp?~û>bĮÎĘ7O ĮÎÍĮ=ŋ>ūŸ T"cyŊ…Š ž"ä’ņŋāÛ%´ž”Y-ņ\Aw9czž˙Ŗĸg8žŅox:Ģ—AüĮŋį‚ë×W’ɤNO°=@sÚ°æ+1|Á˜+ÎȂ̖¯Ō˛åųˆĪ™Ģ~Ŋ¸ņÂđØ!Īy—˙’´ņįųŦåßō_.{ü|ūb’˙˛ĶĪ˙Ę/†|Oŋ@~Ņę?å“ ūuŅÖßö¯í“˙2Œŋåré7Ÿŋ˜äß鷝Õŋ?äÛū'-ŋģō™ŋ˙ŪōßÍÄįÖúe—˙õ7úÍöõøjʏõwÔŋôŋĢ_Î÷ĪÄgŊüŖøÉ°~k|抟ĖķüZ?ŠũūSNũô-ūП˙ęÆoķŽŸÄgŊūø.ūÍ+ŸūãüåŌæ?WüÅ͇Ą˙–qūÖ/ę!?“2Ę?¨ūĢø„¯—ĒÍŋōÖĪY>ācëĮøœŲõīįīë?ëĪ˙ŌßĒëö÷[ūĸī?¯~yo~NÃøCķ¯ũũKN–üĢšúŨú_ã<õ7ŧîírĒßÁß>¨˙_õô÷ΟUŋŠÔŦ_Ũōw˙ų×ŪĄ_nôã˜ōžûëę˙éü õķúßÁOôķøĮîßa˙úį7˙ ęŊü3ûĮē˙ģųŠzķãœŋŠ˙{üÁ[>ÔĪâßĀųī¯ ˙_ųÖ?ŖųrPŋÛ3ķwđęG¸­˙Ļ"¨˙ČëYũũūąįßßūũk­˙W1ĸ˙[ũŗų_ũŖZžû˙ÍŋNžÉ_ ęīķ3ņYW˙Đ?˜˙2,˙ž˙Ęģø…­ūûãÍ_ŨÁã´vũ‹āÕd÷ŋŋ˙Ë ?į?ĢūņúŠļ˙§~_? ͟uúŨôwä˙2wÚũšŌņû(ũ‡ųŸúū‰­ŋëŋ ¨ęߎū˙Qo˙büķæßŊŨ˙ų÷xŋHÃø;÷đEÔüŲôÛGÍߨ˙ˇŸ–Åίmú‡[ößj2?/d9ßŋŠ˙ãõëüä_æöæĪÜû7H˙ÅH˙ąúĮ˙ų[ũ?Ō?¨wŪ?S˙eQûw~˙ßßĖ>?Áû'n˙zô—Ŗųqņܑ˙÷Üũ3×?ũÔÆƒĩ˙~1Õúûk~¨Ņūų’ũ}Šößt˙8öˇß?V˙FøOēî/äŠOËũ3¨˙ǝ˜Įģũ3öŋ=ž˙ūqž˙ōī?oũũûĶŸŪæWėŸ™û§ËŦ÷¯˙ūëÕ?ŅûŸûōÕOoüę÷Ö?ÚßûQüŠēëˇåŋĮ÷úg¨˙”ëßP˙QũņQ?J]ü*,ūNGęįĘ˙Žūšø ˙TPÚųcËĪÕ_Ųû_Íå?ŦŸNü[ŋæ_yōßMķĮ/+våÃüKcúˇķõ_úonūÜõīCōīôSũŋņ5=ũ~pƒįôģū´-”Ö`ŦúÉäįĪpųôÉAYø}ķáÎs™Ĩ,üĪƒđ_•ogUĻE 1ŋ}քÕŧ ¯§^RÛ9;˙3äĸbpBž`æ“x_(ĩ´ķGÜrmyZÕ÷‚Ņ*ą´ķxī˛M ĨūũŸvPËõ‚Īĩí¤ƒW‚íPâšÛŸAJx'·p^Q%vü äŲ?JËI;_S•ų äųŋá‚|†|ÎKÃë?āË˙‡*8ō3ōnųõ‹8íē?ËÃδđŦ~Täõ™Ã˙§}4/ą•Č/ŪSøY“5?DÆgŠĘ‹$O$|đĘļ1ņw šĸ—‹\?ŅėÕˇœ¤qŧž/ ū†ũįrÍķßÅäÄy…͇p‡6āxņã1*~Ž#|¨ō-jØÃįˆū#o>¯\ėá/ČĮøķg &ŧí¤ƒ×8ōĪ&•I؋Ã?bx%€_Ėāėö'äŗ'ž‹™ŖuÃglwFū•˙–^N1ü_鮄‹ú–•ŠĖyÜū“„æ)\´Yƒ2Ķ$‹Ûŋ†Įũy’ULŗ˙y_™Ī™€Júž˙ûûīÁ?ø˙āü×á˙ {÷˜i˛2‚tIMEØ)­Zđü tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcode-upc-300.png000066400000000000000000000123471506303110300177240ustar00rootroot00000000000000‰PNG  IHDRÍ™ZÃ1PgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IIDATxœíŋ#ÉuĮģÕÆ`l‡Đle }™' §mĀČ œRƒÁ6‰6Р͟ā?Á˙€kšÁ8ģPiC\‚ępŊ]~UũĢ~ŧĒng!Yē›Ŋå~öíį}ßĢ"ąâDâK=xôŽ~GŋŖßŅīčwô;úOũ×C˙øåĐoņøŖGķümŅ´õ›ĄyNāŸå[ĄĪB¤đ¯ī>Ë'ßKôņG-Eā éž.E+ŋĒŖžŧQUķjt“ķ<ŠŠ&‚gōÍ>Yč#‚ÎįĐ<įYe<ÜöUzņ,IĢ?‹:tŨĨ% áË(zhrø:‹ëûô4‹ÎŅĄéßučãay„æčēGŗû$zH#–“C“&l“ŌB)<~„2YFĘ}€?Då¤ŪĨ2×Gž%õ>=°<96+ÂîŗzZ5›Ō]¯"šCÅB$tCŽ\ĄKžMé>ĢYQ› a™šāy×=ē”­ä:f=šŨ“c“ĘAŅĒjžąų6fēžĐ  AJK`ĐË&=˛~įmF÷9…čĐwšč†¨Á‚‚ŨAŠ;4”ÚĄ[…æ w:å›hË’*ôxėã @Ÿ|Yą\Ą“VšĻŅŨ„Ū~ÍĩąôdD˙üWöK›ÂQĐŖëMz=>…Î:4ĪēœĐ TĄAČaך†J×ëŲđe˛…BĮ ũĪŲ€æ†Ču&ĸĐ)aÛl~sØ3‰ŧ‰–;¤Uč¤ÎģĒ[‰—čcĻ÷äđ@".˙ H\Ά¯CtčŪ5Ģ1…e$]į°ųRøÍęh>דčē8ŠúĨŖ“b!×°X*ŋTûēQh č3č´CßĮĸIáŽčĸ jĐåRŨ čZî8 `mÆūꡋÖeĒ´<;4‘č•DËĨĒŽ‚Ÿthō×Åá{yÁ¯sš6ËPŗ¨)d°ÃĮ]ËßrūUz†ŸƒNÎŪîm´čŅ<ëŅ%O /KûģÂ}:‡DŅō hy{4\ŋ_fü‚ö•蚨{¨ŧÎx‡×Ąy6÷üÃüSpôüŖŽō/…Ļ_͖?˙Ztûŗ/†žâņ˙ũC+ä|~;ôg¸×ņĨR¯’“{Æ^ƒ†×‰UUŠ&kS¸5ščãĢПŋũxØæMLSA4Κ=V].G˙øXš)KœŦäŨ­ēM­W=Ą—ģ>ՂÂ=€Žĸģ­‰†ÃĪD¯D§Œ UoíĒß}ךNßĀuNŨĒ+´ę+ÂOõ É­áS衍=ēžĒ…ˆW¸ž(4Ņ™æÚQčķ•Ž5ô:÷Ą¯âMîúš6^\×!!§ĢrÍt4‰TB-^)„LB֙DÃzĒL!âBė6fũæKđĨz šĸhÛ5]ŋ-‚áSBö^ו Úhj%Ä@ˇ˙žŗŽúą8äK]:YāîĖuÆI¯>2Lˆ \Ņ 7âÁĒ–īšĨ4f_JS ­WŊõĄÛŪĩÎIu9ąæ>{ô IgÂ7ē6ÛØ";Ÿ_^ÚûüÉ'$ĩ֓“k|dxMr~âąÍŋ Š´A‡6&Ĩ5č"Ú\<ņgąņWmˇŅFĢ‘qŅ\ĸ+…öētĨĄ[č⒄đįöoÅ#˙Gą '„k›¸UcĶČŖv—?6?Y ×Ö4zŅVÕŅöcúØüĸÍZík.]šŽ— ÖyäģESím#žŪŽĶę‘ī#Ôum…o@—8ÚtũƒXeįĮf{ÂGeÕ}ƒŽīëUūüØ|JÖŪ\Bbŧ8úW€æ…X!te&Ä#A?qD÷Ž'!Ĩ› ŊRč6Œ6\§•sėbB^:ôKģ ´qrŨĸŽņ\3™§ÖlķĘS5\k ąŅØ4˛6KĢį Û}ŠĐ\ŽđU¤:ĪīkåBŪÂŨŗ1ąŅč)‡Œ% ~ĸOûÚ ß’„´‘ šzķîŋ„ƒŽ§i æ? įņ÷üBá[˜ßcD“ŠcÕvŽ}#3ƒ6Ģn‡ĒŅ6žÍm!†ëh¨:ž]ĶņØ5N™ YOģúŋ‹âīųđvíژÆjŅ)#~÷ÂüT ŖˇŪD EÛšŽ‚šūüųŸę.z‚RĘ ‰>ēčÚŧâč;älģžÚČvÉ!oÖ M‹(‘Uoq4Ž8ž6ÚUĶ Í4*Û!X÷ZÕĐ[…î„ hoÕÁiԄ\ƒn‡Ē×{=ŲāB˜ƒģîĐŖÜĩ¯jSˆ[5™b­']Čl;ô.T5ĒŽgŖm šæîą‹l>ŊPšŅu~\VuXˆžž&!3č ëĄęěë{ÚRĄ;ÄĸĐe(|lrņĄ„XŽ×3šFÛx KĐzÕ§Šø‘GëŪX\†î\—ŖëÜ‹ŪŒ ņŖ+4×X=áķĸĶŲ6FĒwzŋ`Đ}Ž'!“ëģĸvĒVŽņ6R  މB÷mĖ5!5>õ^|¸ę’'u_5QBŽ.zĘõÂAw„cĐ'!š+$0čĩ6čžrô%d3æzÖĩ§åTõ(d¯įzvdJCHŠ/U:„¯F\3_Žé¸TK)Û!G$×H#ŖÎÆupĐ­‘Ųčh:wėęŽO#ē˛G„,jc9L‡>ĒŋÎÁōķ$¤vnOlÉ ;Ž•bn>Ī™]Ēsšļ×ĶLø¨3č 6¯qíÍuŌíb ņđičĖFOGÁzc`˛Åy™ÂFëĶŅ'ĶõÚ=s‰F]ΌŒģ¯ĮͧĒÖG›Fļ]N—2L㈞ڈēö'¤ŌGFß|jdNÚČ ›/°žœSÆh#œ2_O3!Ģ™lĶ !ē롍ž›ę‚‚?ĀöæČĖ\qĖ‚ŖÍcwņíIÛ|nøXŊ`‡táĶŅ™•k3!KvHeĖ> j|Н\īf„ ŽŅcwtßQ`\ˍ“ã˛ ŸכpŽ}BĒiĐą}Ŋ_:2Õ8J#:ēĀÖÖF{ЍĨZ›ÉĩÛFfî,āzƒßCl×:]˜ks_k›ī„lžũ€Î]qÖČR5… áë]ī !Öžv֓GTaŽ—L_u'„Ī g^Ë8 Ņ0Ž]Ũ—ël\oœđĄ;dŋ !TÛ| rĸB ]Uį}ÕYįĸšv‚9!özŌ^’öާŒzĐԙFl‡X 9á qĒÎŽ'_øj=|éÂ÷CŒ\WžĒk+!t‚ĸK,|į“hÍũš^ō2 E§ģ˜ščbÎõŲ@ë)s×Ķ<ĒŽ°Kp0!žĨŠēļųâāą;ûâŽė_H#GÁxÅņ`¨ëu#v`Ww|wŗ¯ ˜q,°Sfož–™}ÁŨųüGÁėģ85vYHËÂÉxĢ…bûú´āĮ˜üD÷]ĖNKnOö=DâÍõxYđĩąšÛ|ᑑBöÖž.Ü×2u­ÖS=ēÎė+8Ā2Ÿ_ŽKué ã§Ėҏ˜uč;ä(^'_íZžcĻNt¯ÚZO­žÚ?2éĩg#¸ŋÚÅnĒ˄čwžĶ°ž!Ĩ{ÅŠ|h=|ЁN\ģŽģĒĪįņŠƒ­§Ú _ŠUmģFŽ8v ôNß×Ē‹ŌF%„KtĢ\īēëdĄcwģŅÛØēUĶadęžj…>Iô×ũ‰.Ģ6ēß!z¸Īģ–čBkˇ'…NL´áúԍ Rĩ _n'¤4ĐĸGĶ!|õ>ŋå:AÂ'ŅŽËĐÆ:Ķ^œē6ÚBLô:UčNˆtÍŊŽÛNČūʑq] !zķΡ2ŅÂÛÆÎ5ĶÂįäš-EëĶČĮđąíĢZ[OksUBÚ%š.ą\ŸP!Ô:†\×ō”AÂW.‚¸îŅĢš6néúl)×ĸņ6ZŽ™BŸ/ËF&äZĄ§đ‰žęđ ĮVÕÁ6ž\Ÿ—ļ1€ĻcՍ%dv‡Ŧ´„\CՍ1Į“ãz‹ \û7ߨF1„/ˆv…¤ūđ•vøtôŽGGzÕĢŲ6r­ęŠ§kĢv…ėÆ\›Ž‘SÆFwUßy…ėF!ázfãhŋkėb]72ú§ņlĸ÷v“Ĩmėrƒî&äC0!!Hg˛ÍôyĒēlD„ čDUmíë“ᙹqĐu“Íŗņj!.z×UÍķcc$ä¤ éŅëĖEīÃ#Ķ 1ЖŽęl˛•čtžjb !ĩæĪ„īė’MhY5ŗ…¨ŋ$1'$ÆŅ'÷‡īÎ[õˆ.CmTU¯sj Sc=-p­Ŗ‰åšmR‡Ã‡ k{=aá[$ÄAŸ„mLgĐã ÃČĐ }ÔÛ8¸ļr=$D™­úÔŖģ\ŸĖđí-ô˜>|™§€Ļ]5tNcwÕ{–a×'Û5ÕrŨ‡ot=ĸ÷K\;hgמiô Ųė į˜ë킄0MHŒ ŅĻ1sGfQŽOvûiÔ\gŽëļ‘y֓•ŠÚ4NmœIˆB¯ĸB jj´Qåēė\ī-רČlķMB4üÄ>Ëuē(×z™Ä¨Úwôm|đ ĪRHžd¨ÚF[BH0|Ôt­ĐûĄB%„. Ÿrįo#I]´?×DĄ3ÕFYõUu>šĻēs}™„PŊÖ\gÚČ8UOčĒ:™rH!ÔqŊVč;@÷:čxBē šî…ÔCˇĄĒ5!NB:ôsŨĄaô âVŊFfŽę“)dD‹ ZXh7|šŗC |g•@—…F„Č˙gĨjãÖėBēđ•ŽëĸCĢtŅ2īēßŲ×F6 ]!ä€LŖÕÆŨ€–Žm!z‰™ëÃÃUhÛ5“Ž-šndF4¸Ū!BÜA] åZĄsĶõzt}§Ą‘„„rŨ h´Ą\#UÛŽ;!|ÂīúĒ'¤t]ĮÍfŦēÚČG!ÚBôđihØ÷šfkē^´ž&´)$7sŊ6]ÃSæ]¯ė„āmėvˆDo'4.$v§ß!ĖtÍBŽ÷EŖ„d¸ąę:6ęčKpdLôŅu‡G&āzŽj˛Á„ Ž‘Ē÷šDOމ›Ž)’ëđ Ë6ŪyĒFÂ7;2˛ęėF›mœÂw7'dtí "ÄŨ|ē5ڈ ņ ˇ\į  ãvtŌŖkkdęDląAĖāzBī;ô‹üö2úGfĩŪ\_‚á›\ö-žÃ>ĩ§5—ęŦ띒´ųŗ(4ĖŠvŅM¸Zĩ‹ÁĐ­†Ž†\ĻqįA#˙­ÁFfnЗĄÛ€l_Ģđ]‹vÃw‚ĩ‘ŧMՈÔõĢ…nĐ՛qė˛Į_Ã3;ôŨkŌWŠĻuŸ&Œ‘AĐÁ\ˇų7(ŌD_!DäA‚^,dų#čúļGPČ ųCņÖÜũeīčץ3ų˙tŋį× č–°(­sFDŦžˇČÍh–7™āB~ë“Ї”&mt+Z~ۑīEB™ō¯Ž ęŽųŨĩnHņ,"(ŗCĶÆ24%šķIPŲģ b“=Uœˇ7Ŗa“œåG,ŋˆZ~÷—3/Ä}ūôČüč6ôųE4   søq#äD§üū Ųmh&ŅōŖhÅ/ÛŧÉæTŨüĀ››ĐOŧG3ņĄGķ6ëŅæĮĨž-žÛâYHô_âÛō’GŽĐ7…¯‚ļ=ː\ÚģĒü—DŧˆCZ:ŊũØĄĪ"nö-äú—q‡f˛jäÛä]ƒnē‚×5ûæu ?<¤§HĸŗËíč6mΛŧG?LĢ:’BÄmh%„gĸ~áŌËSS<ĩų™ūÅ UÕō;ēéčįf+…v;îcœB>ē’¯pš—7B—đß?F)ÄЏ-ŊÍ_nA?)לŒV:f˛Ŋ-!jĄc|÷ĶmĄ„¤€~brŠžZŽf^đßægņĖ ¨ļ<_øC.â›Ļq@WLđßf•¸°vé0r úų"ŅQr>.?šEŒîØ-āČŧ}9)t\Į‚ˆf1 ëŦģ,ČoŌ÷z4¨ŽŨF~0tCāEûu™ķĄå7•ũžū†_÷g_‚n˙õv¤ũ–wô;úũŽ~GŋŖ˙„Đø;™ėč7yüaĐŋųrč[tņ}ëãũŽ~GŋŖoB˙/%$@ŽJC`tIMEØ Č į tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚leptonica-1.86.0/prog/barcodetest.c000066400000000000000000000057471506303110300172030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * barcodetest.c * * barcodetest filein * * For each barcode in the image, if the barcode format is supported, * this deskews and crops it, and then decodes it twice: * (1) as is (deskewed) * (2) after 180 degree rotation */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "readbarcode.h" int main(int argc, char **argv) { char *filein; PIX *pixs; SARRAY *saw1, *saw2, *sad1, *sad2; if (argc != 2) return ERROR_INT(" Syntax: barcodetest filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); lept_mkdir("lept/barc"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); sad1 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WIDTHS, &saw1, 0); sarrayWrite("/tmp/lept/barc/saw1.sa", saw1); sarrayWrite("/tmp/lept/barc/sad1.sa", sad1); sarrayDestroy(&saw1); sarrayDestroy(&sad1); pixRotate180(pixs, pixs); sad2 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WIDTHS, &saw2, 0); sarrayWrite("/tmp/lept/barc/saw2.sa", saw2); sarrayWrite("/tmp/lept/barc/sad2.sa", sad2); sarrayDestroy(&saw2); sarrayDestroy(&sad2); /* { SARRAY *saw3, *sad3; sad3 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WINDOW, &saw3, 1); sarrayWrite("/tmp/lept/barc/saw3.sa", saw3); sarrayWrite("/tmp/lept/barc/sad3.sa", sad3); sarrayDestroy(&saw3); sarrayDestroy(&sad3); } */ pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/barcodetest1.jpg000066400000000000000000000466261506303110300176230ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀŽ‹"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷J);ŌĶ,;Đi(í@Å;ō¨×īšwņPĐZJ(ÃĨ7ŊPŌQGj)Z(  NôRjmPEŠ(hŖŊ€ ķA4čn´ĻŠ( ƒŠĸŪ€–ŽÂ“øÍ-Qš(Ŗ4PKIš(h¤Ŗ´”b–€Gz)E!ĨíIüTƒ­:Š(  âû”úd_rŸH€ĸŠ(ĨQL íIKJ:PhĨčÅ´v bQ@Ĩ Bv¤īN¤ ĩ%-”wĨíBô aۃGqJzĐ!3Å%) LĐsF(z€“øÍ:”t Ņ@ęhí@ Eu Đ:Ņß´ wjeĸ)hĨÅ4Ԋ( aš(Ĩ€ )qE%´P!(ĨíIŪ€֗Q@Éâû”úd_rŸH€ĸŠ(ĨîҊ)”QF8 ĸŠ(Ĩ¤ĸ€īE(éMī@…Ŗĩv Ĩ¤Ĩī@Jgš1EHhīKڀŠ( Š( <Điæ—PE%´QEQEšĸĐ撎Ô@ÃŊ.i1E;4RGN(hë@éøŅÜĐ ÍR÷ QAá¨Å'‹îSé‘}Ę}"Š(  ™Ŗ4cŠNôËisÅ#zŌŌ{QČë@ÅíIیZ&€ )[¸ĄrGC÷hĪËFëHXQa‹š3Í%(šŖ4 1× 3EöŖ884PM Œri´„Ĩ¤ã֔S¤Ŗ4„ķ@ÅŖĩPš;QŠLP æŠ2=hę))2=hėŅڒŠ€(ęi2=ii€Qš;Ōä2(ÍQ@ š)ZSŌ€ (ČdRĐ!WĨ!ĸŠMÜŠ)‘}Ę}"Š(  ””´vĻX)ģ‡<Ō“ëXzŸˆãĶu+[3c9#u6ŗžõËxŸÄséSÃgcw1ųAn\ˇņ$wôšZÄC"dŊs—2-×Ĉc>TdķCčƒĨś\ņ]œFyė"0“ąšŊuē°šÖÜc¸#ĐÔڌBK—\ŋ€¤ōí/"+͏šÍí]‹CĶŪy@/ü*[Š4žŋŧÔ´ĩēŧ€BīʍŨĢÎ!Ô#k­?M&ÜŒˇQZ~>ˇ–ëC %ƒ>ۘÍ]Đum=ôHLrÆĄTR–ƒę3Þ+]bFĩ¸ˆÃußOZÄ^)—MšK +o:îO盏Ėi÷ŨüG‘ėˆdUäĢqZ:Ōž“ã }Rtjãk7e÷§Ōāˇd˛kž&˛‰nŽ´øŧ÷—w WSĸjé­iés<Xú߈tīė‰Ög‘v…VÎIéÅ/ƒė%Ķtôƒåģ’ûvôŸVÄ[ņ/ˆ—E´ųtėvƋÜÕÍęæīL†{´)#ŽY y÷ˆãžņ‹Ë-´—1[Ũĸ!ë]χã=FajĐĩŦŎDÆjWv3O]ŸT†Ķv™Ë7uvâš_ío)Ütø‡üÜ ī™ãŲ“€+‹ņ/‹Ŗ‰ÎaûÛļų@UéīTü€<'â­GVÕŽloR4hFNÚíÁœ×āŨ}2 /oqöšÎö5Ŗ‰•ĩyė|ŗēŧŸZ[ jo3 ūĩĘkž0]6ėYZ@×WG)â¯čúúkV÷P§”Æ?ĮËxA ojtβu~Ã4uÔ̤jž&ģŋFēĶã†Øõ%šŽŧ°XžįڑH ozįüe­ŽĸK"$aĩ=yĸM[AĸŗøžâįÄŠĻØF%÷Ž{WW’$vÉö¯!đ¯ˆŖŌaiäĶį‘ĨlË9^+ŌôŊZÛZŗZČHĮŪäSōg?ĢxĒôkNŌ-|ųWØˇJãÄŪ#Ņ‚Í¨iņ´‘šZŽ9Ãū/¸–ølˇē?,­ü&¯ø§Ä63ieˇ‘gšqļ4_į@%žąmyĨ øĪîĘnĮ~•É/‰ŧAĒË)Ō- ŒFëVŖ´—JđÅ0Ų"ÂxĢ^…SÃpļ1ŋ$ü´­­‚åm'̔z˛iúŊ˛ÄŌ}ÆUāÖˇ‰“´DÎkĄ¸C ĘÄrOĩy˙…a}CÅڎĒ~hÁڄP÷ėĪF(Ī5åȲĩ–b 3ų ƒÅŅž‹.Ŗåą6í÷ĄîQœ~5ōˆbgbTdÕM#R]SLK W\é\ĮÄlØéĢk :áļāzRleŊ#ġzÆģ5ŊŧCėq ‡šŽ°ņÖŧËÃū&‹EŗŠ)tŲ’,|ĶíČ'ë^‰§ß[ę6É=š Z);ŌŅLdņ}Ę}GŨ§æ‘ŅM.ŖĢ ošŸŪ  ŌcŠŠĻX•įū0$xŖHãøÍwæ¸/sâm'ŲÍ Ok‘é‡ū.-ÎA˙T).‡Ų~#C3Ģ$xôŨ5ĀņũÉ'ūYŽ­ŌļõÍ5đ“Y\ˆî! ‡´—pZŖrūUK‰éąĢđdnúmüŠÆų[mPžĮ^lÚÜk1čß7$wŽĪB˛ļ°Ķ#ˇˇpáG'w_ZkQŊÎcĀö–ëq|÷;ZëÍmãĨZņŧ6ÂÖZÜ WcäÔēŽ‡į_Ëw¤Ū­ŊČ9|7PąŅRkøîĩ}N;“Ę o”: c¯ŗ‡íT1L›Ë Ũš}Ģ‹ņ7‡ôm&Î[ŗ+F[‘ą?Jīâ Đ,åBđ7W/ĢxpjÂŨßŨ)ĩŒ‚‘nĪŊ'}€Ëøwáö´‰õŅ„“}ĀWĩ[ņŗ=ÔļēR€ĸåžgîŠë!kh8ƒF Œ*ĢV_ˆtDÔĄGySEķ$…ģÕn c’Ôŧ§-õ¤Ė&€åō­uVĶj^ķđĻG‹ĩc WÕĸ\ęˆlÁÁØ>fú×SĻÃmoh--™  ÚÜôĨ{ŋŦí„Îęsæ3åÔ>1†ŪBÂKEEš3qŽã5b˙@¸ŠūY´}@[;s${¸¨t­"uĢjBæá~č,0­+Ũ Ėšã=NįOđßîC‡cũÜ÷Ļø;@ąĩąKÉΚ•w g¯ĩojv6ÚĻ•$sņ°ûŲÆ+†ˇŅ5KG6úf¸ŋgįäÎâĸšĐOsŌ<Ȏåbjā-É˙„×T'Ũ+SÃö1é’ŧ—zŖÜŨH0rŲĮáÚ˛­Ûwu3œâHw/ø Ąōđnøh×|'q.ŖũŖĨŨ›{’9xn*/LąZßÉ#* œäŗT×Ö^!ēēyŦo‘`qōsēŸPFD7~ Ķ|Oek¨yąÉÔ*֗Ž ûDÚy”fßÎPųūĩFßEžOAuĒęp3DxRšëu•ĶnėÍŊÜą…qōÃB(ļ—ÄVöi§l •°đļ+˜đrų:î§ņė*ļ9Ēkĸjr#[[kš´ĮMß0ÕxsIĩŌôí°Č%-ËĘ9§ģs&ˇ“Ä!‡Fųc@wel}jžŗāûoŦ:ŒŽ$ˆÁßvA­ĪYZŨ\}ĒßP÷‘đ>īĀÕ¤ßępŖjz´OhŒmŌģŠ1Ô|',€ĪJ¯ā9ŗáčаßÁ¯X= IT‰ƒ†é\HŌgŗģ•´­b(ĸį`č ĨÖã4ģë÷ۯև¨lw^ ãÃvūZÃņŦrøŪÁŽ×÷ģŊksÁÃū)Û^ÃmZÖt(uk`ŦÛd)"¯JHrD—–ļŲΌˆ#95Īør[]Ŧnín'!=¨dđžĩsļ õw6 ō6õÕé:TZ]ŠZŐĒŧ“ßŪ›xgŒõÅ:Š(eS‰<’iė?vĄĻb øRŌŅ@hÍŠ#WâĀá'Ō°8ķ+ž<æ¸å|KĨY({‰ėSļų|uxz~ë°ĮëZ>foíI?ŋl|ûŊk:ÜgÆ÷€đ|šģāD*ē—?ōŲ¨@yĮī%O܁3Į•čŸ æi|2KĮ'ûĢÍŧpŋņTÜąę1^đÅ xeū­R7šSO”W_Žyā}yŒ3L5>e3ŨĮZôÍ9Bjž näŸä+Ëã`ÚŽr%éøŌ—A#čí#qŌmÎ@ũØčŪՁã÷ė´äfEÉ ī[Ú7:Uą˙ĻcųW=ãíßŲQ ũę˙ŊPŌČĮÅzBųŽI' ÁŽÛRcũ›pÃ#äjáĻ_øĒôv?ķÎģ}LgJŸũƧŌāŒČ[ÃîrIŪÕ„Yŋ´5Rr|zˇĩIāŦ.€øūûfĸđ‘ÎŖĒŽŪaūT[VŠČÍâm`q'ûĮŽ+Ęî'ˇĘ<×Į˜ßÅĮZõ˙„ŖYôōĢÉîÛŒĘŊL͟ÎĨü(îq3˜IōzĨyĮžw×.A• Ägę+Ņm˙äKQéô¯6đ3ŸøHnF?…ę÷!Ņ'•üváåržiã°æģ+Cę?õËükŠĐĮüW‡ūģWofü%ú—?ōËüit…ƒøEĩ\ą_Ūļ1õŪxUŸūÛLą'`ë\’‘á}WķԚîü*IđŨŠ˙ĻkTƒĸ<ŋâ˛¯‹c ä;tęhņԒ-ÚLjr3ÍGņ •ņr§ū…G3öM5h‡ō¨ĩÕÆ×ŊbĮ§•āÔIrvxôŽÛÁ.ĪáÆ$îÆî­\€ßt:€˙ĻFģĪžaîßŌŠ nyˆg˜j÷ĄfuO0đXū•ÕĮ$Ÿđ­÷o9Ü9Üs\o‰H"ŧ9˙–? ëclü5'ũĄRāé¤ojMæą!VŽ:Æi_RSæ9O7Ļīzę<âÕĄØk˛uFņŸ7úĶėqņ”đ{2ą\D:ÖK&ũČū.ŧV˙ˆī°˙Ļk\ë|=ø:}ZC{Æ Â]7o¸\íozęË´$āĮŊr^.gĶũ7_į]^Џû´ÕŽØŲáWW.ž8)ŊņöŽ•kâËŽŽ$ŲûĩãqôĒ@7Nr?V~ ˆ×\ˆ9, cųT; 6iøi&Ķõ0îYĢöū({ŋ÷šŗü"k @ +„=~ĩ§bŋņD^cŸ™ŠĮ§ĖOŠÜø;ūEÛ_÷k|W=āî<=j?ŲŽ‡ĸ; ‹J)´´Ä)”´P1āfQTč2Ļ =MAKE”ŖĨ%Ō+‚ņp˙Š—JãøÍwĮ¯á\‹äcŌŋß4=Áíb¤*?á6ģ8˙–U{Āåq¨āËfĒ0Ÿø­î˙ë•]đ9$ę?õØĐˇaÔķ?Ū)¸ö"Ŋáˇü‹Më“^qãus⋓ž8âŊáąĮ†nMLF÷(iįū&Ú˙nŧ~ŧÎ4Oívķæ˙ZôÛ¯¯P¯3.ĄŒķæ˙Z%ĐHú+FŌmŋë˜ūUãÃŗLOyųÖî‰˙ k_úæ?•axôĨ'ũt_įTTĮ(ŅĮũ3ŽÛTĶ&˙q̈˜øJ4~åw:üƒ'˙qŠ=…Ôį|¸ĐŸũöĒū˙žĢ˙]*ׂ˙ä˙īĩWđ‘˙‰žĢ˙]OōĒ[‡c6?ųõŽ˙šū•å2˙iÎc÷‡˙B¯W‹ūF_×Ęū•åČ´æ8?ëųÔt+šíđøĸ—ū¸JķoøŸ\˙ēÕéP˙Ȗ Īé^iāDeņ ÖOđĩPt!Ō&˙‘Žđ€Ö~ZėĶáąÂäd×âF?đ_cŸŪ×]sđäāžŖŠ–;‚Š˙Â?ĒqĪ–kŗMÚŦ$˙ĪQüëąđ^G‡5váŽ>Ҙjqdu:]l{Žē?âŽlŽ‘ Āf_ø§øôūuŊ¯7üQÎ?é’Ö˙™{ũáMnÅĶī6ü`3.šé°Ž§?čŖũŅ\¯‹˙ÖiŋõŨuMşüŠnÆ÷G…](˙„įqęgŠū" ŧyëå ĢtÄøė¯ũ*Ÿ#+Ō>|ž r2yüjbs>ĮO^ĮLä+ĖoÔxč%ūĩę68]O\9Čæŧŧø˜ƒÍįķĨ.Œqę}ĸø”[×1üĢĮüi1úhŋΡôOų[×1üĢâü‚ųčŋÎŦ] ™—*Ōū™Wm¨Č.÷¸—$øŸHĪüķŽãS˙mÁ˙aŠ=…Ôįü˙ '˙y˙•Aá%˙‰žĢ˙]MMāÝO÷ÚĄđ‰˙‰žĢ˙]OōĒęĄŸQâ}_ū¸˙Jō›Š1¨M’īø×ǧ>(Տ*ŧšđgT”ŸųčßÎĄėŠî{¸˙Š)ë‡ô¯5đ>ˆ'ėĩzD?& 1Į’•wū epvæšÜ•ēÂ[ã¯|øũPŦ8Oŧ?•tîWÁ§Ž|ąX €IÜ)õbé÷›>1˙[Ļ×uūuÕä}“ū\§ŒÖéŋõŨuōč1ũÚaŊŅā×Já?s‚GŸÖŦ|HPuxA˙žBĢ]˙„éŽr<úšãņŋWˆ?v*XüĐĩ :l?Ęĩ´âÁ7€yĢ'Ā+ļ×Qļ5liø˙„*īũãüčO˜w;ķáëQūÍt W;āīųmŨފœvŊ- ĸ˜…íIKI@E÷iŗ†Ũ¤˜e  ]HSF)OZ)”!4f“Ŋ„¯á\‹äcŌũ4Žķĩp^/˙‘‹Kãøč{ƒØŖ˙Šâëū¸ZŊālyšžįŊQ„cĮ—Gˇ™ĢŪųĨÔĪo>…ģšį8ŋá%ēlüĩßü2xcū#üëņšđ“]ĒHü+Đ~2˙Â8Ę9PqŸÆ”PŪå;W\ĐטĄ˙‰_I­zu™Æ§ŽķØ×–†˙‰ ˙ޟÖĻ]nĪŖ4Nt›c˙LÅsū>oø”GĪü´_į]ˆâSiīŽâ ˙ęëĸ˙:ļ#.FΉôúį]žĨ˙ é˙Ũoå\4Ÿō4h˙õÎģOūA“žŋ#Rˇē sžđF?°$įøÚĄđ˜ښ§9ũīôĢ `Ú Ÿ.0íPøUvęēĄõ”Õ-ÅĐ͇ūFŊXôX¯&ŧÉÕ#Ė<ū5ęęOü%:ˇp"¯,–G:œĘĀeoįPöEw=ļ  ˙Īé^iā\ÂAqČ?+WĻB?â‹ū˜˙Jķ:˙ÂGrÉÚüū"…Đ‹H|xđ¯ŦÆģkCߏúeū5ÄiI˙ŪãĪī?vö¸˙„ĮPĮüō˙ÁÔΰ˙‘oW˙Ž­]ׅOüS–™˙žb¸}?ūE­`“˙-Zģ ˙åŽ:ykUÅØō߈„ÅĪa˙ĄSŦ—ąģãõšoũw_į]IæĪŸîW/ãn›Įüˇ_į]I胞ŠBî7šáx˙„á€˙žõoâ #UB?įRŊŒ¯YāÍVž"ļŨbņûē–‡€˜C'ĩŠĻ Ū ģí5dü>pöZËŸ˙3Zúo ģ#ûÍG`îvŪ?ņOZökĸZį<wx~Ô˙ŗ]ž)ĮaąOZZm9zS‡­-Š(xūí>CIŨ§žTŠDõ*Å-&0HŖ5E ŠŨĨíIH?v¸ļßi?õŌģķĶįū/ņ.’?éĨp{­ųņÅŪx>U\đ@Ãę@õķۚŠøMîyęM\đ[6¤ž“ÔᛸŲūĢŦ˜É¯Bøj˜đۃĶ'į>9¯‹. ú+Ņžļ˙ žF94Ūå+ģY×A˙ŋČW— OyŋÖĨôę}Ą˙Č×ūš­ax˙ū@ë˙]ųÖæ‰ėk\tōĮōŦˆčÉ˙]ųÕô*Oųôúå]žŠ˙ ûŸúæÕÄL6øŸF˙ŽuÛęéķįûG@[œ˙‚GüH¤íˇô¨ŧ+ƧĒ/¤•7‚”.…&?įŖJ¯á#ģVÕŗ˙=E?´%ąEá(ÕŊD?ŌŧĻđfö\ŽH‘ŋzœ`jãÖ*ōĢíŅßN đdoįPúÜöû~|žžGô¯6đ T×îNߘ†æŊ&ߏŽü°ū•æ>ÜŪ%¸ÉūĒBļ\ü@e'äĩwV‹˙Žĸ鑮Hų|{Į9”ķø×khū=Cž<š•°te;˙Ö°;y­]ŋ„F|5h?阎#OÁđŪļO5ĢšđĮ†ėĀybŽ#ėywÄQŸÄė?ô*‹Į¸R‘Ī–?•Xø†ãū¸ūƒ˙BĒū?æËI?ėåRž[’|<ƒPęwž ņOšûíĀü+ø|ÄÅ~?éŸôŽķĀęG‡_æū6Ē[“‡x•ÉņØ#ŧéøWa?á\>HŽOÄ`Ū‚@ũáūuÕ ŨđŪLsȤÆ7Á˙ Ož×!hDšŒy‹¤ƒŪõÕø##Ãú =×#a)7čŖĄ”:]‡Đ÷ }ļø5ÛÖ%Ž|WÃĮԏå]ˆGüQŽ=bČW;÷ađđô#ųСdËc{Æ+ûŨ4zNŋÎē“˙CũÚåŧ_÷ôßúî+Š?ņé˙Kv6xeûãr$ųÔ˙ˆŋō ŨŽ´Ë˜›ū—bp<ū”īˆälDŊ?v8ü*XžŸô-Gü§ųVžšü!WdŒ|ÍY_vũŠøãøMkéüø2ķĶsR]šÛx9Gü#ÖäõÛ]ŽsÁßō.Ú˙ģ]ôĻ†ÂœŊ)´´Ä-撖€&îSēĶbû´úD•$‘Šĩ,ãįúÔ[NJôRŅHšāü^?âŖŌëĨwg­pž/˙‘‹K˙~€{"9ņÍÉ˙Ļ5oĀĖģĩŽ|ãTá˙‘ōëū¸Šĩā_õú§ũvj`ˇ<ĪĮ$˙Â]v>•é? øđë y׎ÂYrI‘^‹đĖ˙Å:øūķT!Ŋʖ?&­Ždã#ČW“ŋR÷˙Zõ{Cc^ÎųW•|ĢŠd09—úŌ}-ĪŖ´/ųZįūy­`|@ņ&LĪEūuŋĄ˙Č"×ūšåX>?˙R×Eūu}dO˙#F˙\ĢšÔŽ4É˙Üjá¤ņSčŲ˙žuŨjCū%—îįIė sœđCnĐd˙Žũ*Č_U˙ŽĸĻđ@AļßĖÔ^˙žĒ?éĩWÚØĪūF­WŽ?ŌŧĻöUmEĀ˙ž§ų×ĒÆ@ņnŦ_$ב]‚ēŧĖ:y§ųÔ>…w=ÖߟŽ?å‡ô¯2đÄwĻCq^hsā G_#úWšx ŗø’ãp…~UÔ]4—_øOƒæĩvļ§ū+}@ĶņŽ7I<|Ä 8Œū5ØÚķã{˙úãū5(:2•‚mđÖ°éĢWsá?ų­ÜZâ4â†ĩqž’5wņNZįû‹WėyWÄvÅņ@?ô*oqö $äsūU/Ä §ÆpOOũ ›ã͆ĮMÜ8ō×ųVdkq>|°ß˙×üĢŊđ?Íáļ?íˇôŽáé]ē€)ĢŊđ8ïīˇô­ä­Ņä^!(ÚũęāgyüëŠ@?á\žãŪš/’ž#ŊãŸ6ēÔü6rp)2†x< đūĨŽŅžĩÃZ<ŠD ũāĪį]¯‚đt O×!fŦ5(ˆG›ũivCÛõ˙ųߏųb+ž•ŋwáß­tz˙ü‰˛×%ŽlŨøwũáü¨[ą=˙’Nœ?éē×SŌ˜ũĘå|`vžī:×U˙.Ã?ŨĒÜđËŠb6nN|ėSž#2rqÄUZíâ琑˙-ęīÄ ĢA¸€|ąüĒX"×ÃŪlu9]§ųVžšøđEîxųš˛ŧģmur6šÕ°Ãx"ûęÔģšÜx4ƒáÛ\vē5é\΃<;l;mŽ”u8§…QLC—Ĩ!Í/đĐ(XžåILîSéC0ČÍAVdûĩ\õĻR ;QEž+‚ņsÅI¤˙×Jī5ĀxŊqâ-+ūēĐ÷Ø­ĪŽ.°úЎāPV]Lųî•U‹ܐ?åĢž ÍĒ˙=š˜-Ī5ņĘÅOs’1‘Íz'ÃEQáˇÁĪĖÜלøëqņuĀ'Ž+Ņū€<<ØūņŠC{™öëZđ#×ų ķˆhp¤ū÷Žßzôũ=HÖuķœdtüyŒrmŋl|Ü~ĩ/ 'Ģ>ˆŅ8ŅíGû X?üI”÷/ķ­Ũū@ÖŋõĪúVĝ?ëĸ˙:ž‚čdĖwxŖF˙ŽuŨjCū%ŗ˙¸ÕÃH?â§ŅŋëwZ—eĀ˙`˙3Iė s›đP˙‰˙žÕ„Ā][UįŦĸĨđC É˙]ųš‡ÂgvąĢ˙×_éTˇØÍâ­Õ[Ō#^Q~¸Ôd|ËFįņ¯XˆÅYĢúcũ+ÉīՍüĮ9k:‡ą]Yî6§ū(é‡ô¯6đ&?á#¸9ū¯Hļ˙‘)s×Čū•æ~;|G>}Šn&3Kų|zēg5ÚZŸø­ĩ˙Lk‡Ō_wÜöšîmá3Ô_ųcũ*b>Ĩ ¯‡5Ž?åŖWoá<˙Â7i˙\Åqū)Ícūē7ķŽãÂō.Ú˙šWv<Ãâ! âˆÆFâ?­GãßøņŌûüƒųSž"¨˙„Ž2zāčU‹ 'ķĖ*…đn/ÃÜųWø˙ž'ųWāŖ˙ûįŋĨy˙ÃŗûCū¸“úWārO‡äĪ?;côĢ[’´ąä>!*ž!ŧØA%Íu€đâPEqž$|C|H#÷§Ú[Ÿøˇ,Xd“IŒ‡ÁeWÃú˜ ŒFkŗ?ņ1U?ķĐ:ëü?âEŠú5ĮZ‚ē’'LČ1ųŌėoņđ†žįĮä+@1čë‘üë]Ëx%ķ˙<–šãōÅ qüę—Ä'ąŊãŊĻ˙×a]Rņh?ŨËxģŽ˙]×ų×R8ŗĀÁDwc{žzŖūBŲ˙–õ/ÄP?ĩā ˙Ë5ūU^ųˆņĶúmV~ Ļíf{F?KËŋ‰6ˇųūéūĩĢĨ< {ūûVO€qöMDîækWJx&÷ĶsRėŠÜø4¯ü#– /đ×FŊ+œđiÃÖ¸éļē1֜v(("Ö”Ķ$?†’Gj–/šOĻE÷iô‰à Õ\UÃŪǰųÖ™HJ(íIL`xĀøÁü$zOŪW}ÛÁxŧÅG¤˙×JOq=Šp17šã¸5{ÁMēMS<Ÿ8Õä{¸˙ŽoÁëĩ<ĪfώaÔķŋm&šc8¯CøkáÏZķooÜuę+ŅžÆWÃĪ“˜ņR†÷)Xgû[]Āíũ+ĘÔãPoúëũkÕŦ‡üMĩī§ūË^XĀAÃĪ^?:—ĐKv}ĄČ×ūšåX_9Ņ×?ķŅnč'ū$ļŲ˙žcųVÄų¯ũt_įWĐ:2ŸøĒ4úį]ÆĸsĻÍūãW 0˙Š›E?ôÎģ­DgOŸũƤē‚Üį<?âDųūûT>\júˇũuŠŧŸėIëŖJ‡Âg:ļĢ˙]*–â[ąøĒõN˙š˙ō̜ļĄ6F‘ąų×ĢÅĪ‹ua˙LĨy-ė¤j3ã'÷Ŧ?Z‡ą]YîV„˙¤ų`•y—TŸNHāĢ#^j?â‹Sëô¯5đ1˙Š’s×Ē–÷"ŌcŒxí¤ŦĮÆģ[RŸđš_qƒåtüë‡ŌüWĨ=%?Îģ;^|o~ŋôÆĨh‡ÔŖdâÖëŖ1]Ī…üSļŋîW`?âœÖŋëŖWoá1˙Ũ¯ĀĩhKĄæBŸÆIüę‘ö ,˙Ķ/ũ–Ļø3âØ”œ.ū…MņĖaŦtąÛËĘĄí øzw@v5z˙ä[÷›Ĩp_¯öķČ×wā’O‡Ÿ?ßoéVˇ'ąä>(8×ī4âēĢ`ßđ­['æ +•ņ(ßâ ĖtkĢđ­Ÿ)1ø,ƒáũPõ; rm›øģ~÷ú×_āŖAÕp:ĄŽ2ĐãQQ˙MGķĨØ:é¯˙k×%Ŧ‡A$ō téđ…??ōČ!\ú€`đūHę?Rø…-ßtīúîĩԃū‡˙ĘxĮīiü˙ËuŽąqö1ŸîŠ#ģÚGƒŪ:ˇŽœ›īT˙ ūՃūYÔ…á:eĮüˇŠū"Č­Įü˛˜Š6š†xųō­K<z:üÍY~$Û_ãûĩŠĻ˙ȓūķTރîvž ˙‘n×ũÚé;W7āŋų-ŨތõĒCč8QŪ’ŠbJ)­Ú—Ŋ &‹îū4úd_vŸH‘*_˜ÔôŌš4VŒqENJŽ ÆX>#Ņ˙ë­w™â¸/Œø‡J>’Ō{ƒØŠcĮ×8éäæj߁Néĩ?úėÕZ5Į3æŗāU .§Ÿųėi­Øu<ëĮ'o‹n ôO†­ŸˇûÕæžĨ[g]íōזŲĩ&9ČķųרéĖNŗŽŠČČū•åŦ˜ÔYwųŸÖ“Ų nĪŖ40?ąíqĶËʰū ˙Čëĸ˙:ÜĐä k˙\Ö°~ dčĢ˙]ųÕ=ƒtdË˙#.‹ūīôŽęøgM˜îå\$ÄhŸųg]ŪŖōéĶcûIlÁw9Ī+ QœfFū•_ÂōՇ¤ĸŦx “ĸ˟ųčßŌĢøP­jßõ×úU-Äļ(CĮŒunyō?ĨyŌĢJäŽeoį^ŧ„ęœg÷ ō;˙ų Ėzūô˙:‡ą]Īt´Įü!J:ūãúWšxPÍT)l†i ŖĮ.qɕą]•¯üŽ÷ųōƸŨ5sãÃũŅ+WimøM/OęŠ-‡ÔŖ§˙ČŊŦöÛų×qáSŸ ڟö+‡ĶüSÚÉĪüĩoæ+ĩđ‘ŨáĢLŸāū•I t<ŋâN[ÅPũū…KãˆĪØ4Ŧ‘ŒūTŸ”˙Â]9éüéŪ7`–^p3ūUö†ü?o’˙ū¸šîü3áį˙}ŋĨp~ -ö?į‰ūUŨø˙Å9'ûíV‰[ŖČŧ@1âŅÛĖūĩÕD1đâa\ŋ‰~]~ôᆐ×U˙‹q#ReüÆŠö q–Ŗū&q‘˙=GķŽĶĀø:&ĨČû‡ųWjÔį•—úŌė.‡¸k ˇ‚Ũ{˜ũsäf ûŠčuŅ˙[Ÿúeũs¤ūãAĮ­WÚļ7|g÷´īúîĩÕ˙ˈįøk”ņŸüÃëē×UŒŲ÷hŽėivŦ|})ĪüŧUŸˆČÍŦ[ßōČTWĘWĮoß÷Õcâ;*搜såįIˆŋđųHˇÔ᝜üÕ¯§œø*ųAÎĢáën‚˙?Ü­}4Å}ūķR]Đíŧ˙"åˇûĩŌ÷ŽoÁō.Z˙ģ]8§žÃģĶ—Ĩ74šĻH^ԙŖ¸¤ŅũĘ}2>‡ëO¤H”gQ@(ĮQTPÜWã"WÄ:Hõ–ģĶÅp^1ŧC¤ŸIi0čP‹yņåÆOE^đAn­Īüļ5^%Įn¯î XđIįU;q‰šŸpęyˇ?ämšĮN+Đū˙Čŧ˙īķĪ|ž)šqÅzÂî|8įącR‡ÔЧ˙Čo]öå^`͋ėȗ“ø×ŠXũĩŽqü#ųW—>>Ü[?ō×îū5/ —Sč ×ŋîĮōŦ_ũŠ8˙–‹üëkBįHŗ?ôĖV'Ücūz/ķ­:p?âĨŅëw:Æ/û‡ų× +gÄē7ũsŽëQ˙|ßõĖÔŽ ģį‚üHå˙ŽüÍAá@ĩĢ×_éRø?Ø2˙×FūfĸđŸü†u÷ę–â[øK5LĪé^I~qĒJüõoį^ŗ'ÅúŽ?įô¯#ŋV:ŦĞ<ĶüęÅugšŲœx%ë‡ô¯6đĮ‰&nä5z]˜˙Š!ë‡ô¯4đ7>#¸č¯¨ē Ķ]GŽöîüķ‘ųWelOü&×ŖōƸ­-WūÖ8äĖyŽŪÔÅk}ųãQęféŖū)­o=|Įū•ÜxDcÃv™ūįôŽ+O˙‘Z˙ޝũ+ļđü‹vƒũЏ‹ąå˙c2xž=§nãņ¨ū ũ—ĨüÃũXū/jŗņF3ÉĮEãÅؚVx;…GŲ)nGđđŒ_úˆOōŽ÷ĀÜørBzījāžGōž!<íŽûĀÜxyķũöĢ[’ˇGø”ŸøHo¸˙–Ļē¸~I\—‰˜^ã?ëēģPĮᤤŸâ¤ÆÆx cEÔČōˊãlđ5÷ųj?v~˙&Ļ?陮>ØgQ‰OQ ĪįK°-q×9đdœg÷_ĐW3ôoŊ]6ģōø)ņĶĘÍĄ7¸ūu_h]>ķwÆ_N˙Žë]V?Ņo–šOîßĻúyë]n1iöhŽėotx& ?âŧ›?ŋĢĸ-Ŧ[ļ8ōĮķĒZ‡?ÚjŌø‡ŸíˆĪŠ–Ÿ‡¨~΁ü'úÖŽ•˙"UøôvŦ·Á„7ų=T˙ZÔĶüQ—ūģš…˛ĩđY·mĪąŽ‘GË\į‚ä\ĩĪ÷kĸhOAąH斊3ÍPƒ´RŠ@KŨ§Ķ"ûŋ>‘!EP>ԔĸŠĸ†‘Åp^1Č×´ŦtW|Mp~19×ô¯úëIƒØĢøN'@8ō*ׂÁjgū›ĢGįā˙ŠĢ^ æmSūģĄÖį™xø–ņLãĶčŋ ?ä]÷p>9@|Oužšß|5đûũM%¸Ūåm?ūCzāöū•å’.u6īûß˚õ;>5ŊwũÚō—“ū&„Ō˙Z™t´>ŽĐ¸Ņ­ëšÖmåĸ˙:ÛŅ :Eļį˜ūU‰ãßųúčŋί ™“p¸ņ.‹˙\ë¸ÔŋãÂúæk‡œ˙ÅIŖ×:íõųÍūãR]Ansžû _účßĖÔ>CũąĢāy*oœh’˙×F¨|*ÛĩXzKũ*–â[ņ˛¯‹5B'ÉëøW‘ęFÕ%sŒy­üë×ūFŊLôĖ?Ōŧžū5ūАäįÎ9˙žĒČŽŦöë˙JúųŌŧ×ĀJOˆŽF¯J˛ū¤îųį^B?,Güļ?Îģ{qŪãūy • w(XcūũkũöūuÚøKūEģ_úį\Uއõwoį]ˇ…8đå¨ôJ¸‡cĖū"qâ„úZ‡Į˞ôĪúæ?•Iņ˙ÅO>ƒųÔ^=˙^—ūāūU [‹đøūîôú•wžņO8˙mŋĨp_[r_ÚüĢŊđ9˙Š~SūÛUĸņ2â+˛?xxü+ŦĩĪü+YAîk•ņ1Ũâ+ŋ_4×YËđâR{TąŒđRãBÕ1˙<ÍqvÁŋ´ã9˙–ƒų×oāšö&ĨĮüŗ5ÄÛH?´ĐcūZįK°ÖĮšë7‚ÛĶÉū•͐ĸßÃøų‡?t:Î?á úä+Ÿ8û6€=ęūŅ=>ķwÆY#N8?ëÖē•9ĩîŠåüeōũƒūģ­uŋŅAõQDwc<QūķĮüˇÍ_ø‚âmČÆ3ųU=IļøåŊæĢ?ä-n3ŸŨŽ?–4^đđ#oâ­=7ūDÛōŊ75d|>č÷ãū™ĩkiĀ/„/ųčZ…˛™Ûx3ūEÛo÷kŖŽkÁŽ[ÖäõÛ] 4E ŽĸŒŅšĄ Š(Í€š/ģOĻE÷iô‰ (ĸ€)âĀ"—ĩ%2Ƒ\'Œ†uí'ķÖģÃ\'Œs˙ ’üõĄˆ§7ü'?ōĀÕ߯Õ:“æšĨoøNfį#Ўā“ûíP˙- {ķ˙ UÆF:WĄ|5Įü#ĪīķŋdøĻāČȝCøfü#Īõ5=J{”ėŋä=ŽņÎҌũ+Ë>í37yŋÖŊVĮw]˙súW•˙i?ō×úŌ}uGŅÚ˙‰E¯û‚°ü˙ a˙]ķ­Ŋ ū@ļŋõĖ*Âø…˙ Q˙]ųÕôæ4ŋō2čŸîWy¨Į„˙õĖ× (˙Š›F˙p*î532c˙LÍ%ŗ§;āųK˙]ųš‹Âcū'¯ũuū•7‚rt9q˙=ųš‡Â`cVįūZ˙Jk¸–Å˙‘ŋTīûé^Sw)„čP ĘÜū5ęˆOü%ē¨˙Ļ ō‹ļc:ŸįRúēžád1ā¸Č˙ž5į^ Čņė:Ų¯Fą˙‘-qĮî?Ĩy¯‚7˙ÂK8ĪfĒę.„:\L||Ė:yÆģ[a˙įũrŽ'Irž:eĪËæĩvĐ7üVWŲ˙ž5+T.ŒÎĶÎt dzHÕÛøSŸ Úā˙Ë:â4ņŸk\ËFŽãÂ|xvа*Ŗ¸v<¯âBŸøJáį¨ú'¸Ķ4°Oü˛˙ŲjOˆĘá+‡Ķ˙BĻøügMŌũ*]B|=˙hcūy5wŪ_ø§ß<üíũ+‚øtģVø˙Ķ#]÷‚üH%˙}ŋĨR'ąãž(ĩÛÅQ´ų]Ež˙øV˛mØjæŧLI×ī92ęa]ŋ ¤=Á¨‚#?ØZ™'ģ5ĮZ.u%˙ރų×eā˙Ø:Ą'Œ×gÆĻ€õY?>Āļ=Ī]ņFŋũqČW:ßęŧ?ūđއ[$ø1ø?ę…sd‘‡ŋŪūŅ=ƒÆ§×tūuÔøô rŪ1ûÚoũw_į]H˙!ūí8îÁ¨‚|xŲōÚ­üD8Õ`ė|ē‚ũˇxŲÉí=Yø‹˙!8N8ōęYHšđü˙ŖęŪÛZzhĪ‚īŋŪjÍø|ęm¯đ?‚´ôŗŸ^ƒũæĄl'ąŲø,Å;kūítÉĐ×7āŋųmĮĩt”âSôā)Ŗ­:˜ƒb–Š@KŨ§Ķ#û”úDQ@3IEĪ4Ë×ã+â #ŪZīÂxĖÄûI˙Ž´1ã?ņ]O˙\*ׂx¸Õ?ëšūUR1˙ܧū˜UŋôSūģâ<ÛĮn‹.rŧņ^…đĀąđķŸöÍy÷\ž?‡šô?†dÂ='9ųēŌ‰Ŗ*XČk^ūč+ËSSlœ~÷§ã^ĨdH×ĩÎ:¯¯+hØj%™€ũīOƓčJę}ĄČ×ūš˙JÂøƒÎˆ8įĖ_į[ēü­ë˜ūU‡ņ}|ÅūuOaŌ˙ČÉĸ˙×:îõųÍūáūf¸y×ū*=ūš×q¨ŒØL?Øj:Üæü âG/.ÕAã÷ŌŧŠø(Õ'Ÿõ­üë×ŋâ¯Õå‡ô¯%ŋU:”ÍßÍ?ÎĄėŠî{…˙Š)Gũ;Ÿå^mā–˙Š–tˇWĨXķā”˙ŽŌŧĪĀÃ%¸ėÜÕu…m(cĮĮūģí­[ū+kî˙šŽCL@Į™|GãÅq×˙BĻxčĶ´˛ĮŸ,*>$ĩā•?Øē™ c5ÆÛŽ5(˙ë¨ūuÚø cFÔÆsōJãíĶū&P˙ŋũiöąíēŅĪ‚ßÚ!ü…s’œÅáæíŧWK­qā×˙Ž"šˇėū˙|U}Ą=‘šãšv?įē×V?ãĖc'äŽ[ÆC?ūģ­u_ōįũĪéBŨ‰¨‚­üD ępúyUGWķ?á>eÚ&â Χ?ōĖ:–R,|<˙MC ‡ųšÖŌ¸đU÷ûÍYWũQ˙rĩt¯ų¯ĮûMIl'Ôí|sáģo÷kĨÍx$mđ͡Đ×H*ĸ6-RĶKšmé<_wņ§Ķ"ûŋ>‘!EP3E;Ōb™C[Ĩp~1ëēWũaŽõ‡VVĨ ÁŠ^C<ĖA„îP:f€8ÔĪü's‚1ûЎāŽnuQŸųlÕŅ[]õ æFM„Sô­ &k‰!$™Ü— G‰øöøĸä–ĮN+ŋø`¸đķŽÛhęŪĶĩ{æŧšYƒŋŪÚÕŗĄø~ ĶėĐäŠîzЕ†ŨŲÆŲ.5Ũpąũ+ĘÛ)ŠļõÎeã흠ĶÃpGwu8$ŊĪĘØŦđĶMyŧâîíØŨÆiXŌĮM cû͟ųf8Ŧ?.t @˙–‹üë§ŗ´–‘ÛŠĘĸāU}[I‡Vĩō%b0#ÔÚˆ¸V˙„‹DmßōÎģ­CN›?Ü?؟ Z5Ũ­ÎķēŨp™īZŗÄ%‰÷ž˜ĸŽ9_œčr˙×W¨|,âsĒúi]“ŖE¤Z5ŧ$•/¸g¨ĪZ4í >îææ&%Žs†öĻ lŽ5/Õ~o#úW’ŨÆĩgųžS+:úūØSž˙wī&BŒĨs˛|1ŌdĻÁŪå›īRåēAähXøĸĐ[÷?Ōŧ×ĀëˇÄ÷áŋĨ{$:TPé_a |°ģxúV6™āk*øŨÂīŊ˛>ôĀōŨ9Oü'ăĮœvļų>6ŧãūYVÄôø5c¨‰dķKîÅiÅáĢeÕĨÔ79–T*i%dnpē~FƒŽ ËFŽßÂū)ĢAūÍ6? ZGgwm— tK9úÖŽ›§ĮĻXĨŦLJ īL;?ņ%1â˜ķũŅÎ“Æä+KĀ9ōŋĨz.ĩāĢ-rū;ŠŨÁ€Lõ¤Õ|eĒÛÁÎv6ŌÃoŪšį?ÉÍđ?ķÄ˙*ī< ?âC(ķŅŋĨZŌ|eŖ‰<–9‘vœúVļ‘ĸAĨYĩ´DíbIŨũ*‘,đ/#/ˆŽņ˙=MuP)˙…k)ÁŽŌ˙áŪ›w%Ã<ÜäúUÕđm¤z+iÜÂŨéXg›ø?ؚ¯cå×#°ŋRNx{ž—āĢ-"Ō{x]ĘÎģNzÕømĨ‰MīÛ€ĸČ.]ÖĮüQŦ鈎iĮú.ūõw÷:LW:AĶÎ|˛ģ9ëTá´ōėĶ{‘jŲ\ĶûWÕž1ißõŨ?u bĶĶäǚž¨°‰‰S_­hˆĮ—ĩŗõü(ĩ‡Öįęlßđœ0#?­[ø‰¸ęp€3ûĄ^‡7Ãí>ãV:w–Ũ~ĩ6ąāk-jd–gpʸ╂įŸ|=B‘_äã)Ōļ´ÆÁz†;šē­'ÁVZ?š v>hÃgĶb Ú[é˛Ų);%%‰ôXŖ|sáĢoĨtÂŗô6-"Æ;HX”N™Ģô%d6î-ĢԊ†–ŒPą}ʒ™Ũ§Ō$(ĸŠĢڒ”ŅڙAHE„…ū­@ Š*(Ž –gEugN vŠŠ4Šrž1I8Ļą ’œĩ8ŠB+5uí5Ž<t…ÉĀģրa´ļx$Ķę;VcëÚlS˜ ÔaÉÆ VŠĘ˛ u`ĘzŌ’ÔV}æĩce!Šæâ4ö5fÖîŪî?2Ū@ˏīQq–;ŅÆhvĻŗ¤œqÎM09ŖžÚöœŗ˜ Ėķ€ wĢÆEX‹–] dÜQp¸üRbŗ[^Ķí71øXļŋļģ öYUĘõÃP"Ö(âĒ]ęļ–Cũ"a;ĨŗÔm/Q´‚LuÃR¸Ë4§ ¨Ž.ĸˇŒÉ#Ē ’ÂĢYęöwŽR ”úŊŽi6â™=ÔV°™e`IjĄm¯i×Rųp܆cځš€q@ë@ūt‡Žŋú-ŠŪjV– ™+z°§YęVˇĘ^Ú`āvŗŽ´KMwX×sä’1@ĮIŪĢÁymx7A0|uÚŨ)īus,e‘Yžî[“@AĮ¨¨å¸Ž‹š žĨǃkú`l¨˙īĒSK­-E Ä7Q‰bddėCT7šĨĨ‘ÅÕÂFLŅp-ŌÖ}ļŗcvû š jŋ¸Īîz~´ú€´īJ†¨Ž˜Ø>>WŨŠ™zRL,-&(Ĩī@ N^”˜æ”PąũĘ}2?ē~´úD…Q@hĨ¤ĻXw¨/d–+WxS{…ā­OHüŠž”Äy†¨ęéŽj2ElŒÄüČ_Ĩu~׎ĩ9ŽbšØG䜖ļ}Ģ•KšĶÄú•ŦdË;ÎŪ‚ģŨ+M‹NŗXĀųŪ!zžô€Ī“ÅvËvm|ŠÃîÛūŦ¨¨_(~īŪÍhi„Eáhū×er¸ÜqŠ`fhúV›7‡Vi•Yt’ ÔžŊi´û˜D…Ö) Ą žœôĒ?ŲúmŃ]E},0rZ0Ũ=ąÛéW|gö}2i6•ŽI PW’8Ĩk *萨Ī~ڒ+ÎãÍ=¤Ņ<¸õ{š4ē|W3"Æķ„ Œ­SđŠŲ­œ—%īy23ã"ļôMaõ9îvĮûˆ› ũ44`éC¨øšũ¯öģÂq3vëšÖļŅí-5ĩšÖę5ãæ„6* _Gą’ûí]‹kŒ|Û[nk?ÖĀxĻr—r\„N\žęVQ|]¨Dú͝ĨȐ\*ũīj[TŌŽĩ+°–ˇš3Ĩ1ŧ}iší´ ãĢĩÄM‘–Æ3RxˆZ›ũ9mBũ ČŧÆŨŋ„€›Æ.Ūm’HÍö6”y¤wõOÄvúTZ\ooą.7,ÄŨxĢū6i‘[@YCļĩ"ÆÂ++›9|Ʉ‹€_;‡ŌŽĄ}Đjk§čĐĪvŽ[o8ŽiÚvšoĢ3˜VQˇŸ™6ÕØãY­P¸^@Čuâž-Ņ„hĢ‘ü+L>ÖÚ=cÅ7v…âƒäU-Į4Ų /‹lÚØlŠį*č­ÅIĨH4ß_Å9Øŗč͎qFĄ2ę^-°†0ƒ,äR´tU=W#MœŒPũGmՊ§ĒŸø–ÍœŸĐ3Ī|%u>‰*M$ŒöˇRÉūĪĐkŽ_ÄēS p¤œáĒ#NMKÂ^VÂd>âą­¯å¸ņŸi1"{bC{Ž”%v.—5üZLڝ…ŦĖņŲŗ|íģöĢWz&‡—)†(Ų‚ĨŸ'ëQøßoŲ-Ą`É*†œZ¯7†ŦIsĖ­ĩ23&áÔPˇe3GÁD'‡”+‚ßũjÆąû%Έ¯Æ¯ĩ¤Ũûĩ•žP+cĀÜxz?cÁõ¤ē‡FÖõ)Ŧό¤đžšÚh$‹Vđí­Äi>“˛;„ ‚ŧĪ­oČ&]$‰›2„ųˆ=ņ\fĨϟOÖrå¤ĘgŨ‘]Ĩěô–s÷Œ`Ÿ­A˜>-ö+ŒČ[÷ÍÁú×aÜ×ā͍Īũvoé]ŸĨ$0=)qÅ%*õ5@´‡Ĩ€š?ē~´úd_vŸH€ĸŠ(ĩv¤ĻP´Ž¤¯Ž})iGJ͡ŅŦ­oĨŧŠ™ܧŌ$(ĸŠ­HFyĨīJzS(AԊC֖€ø¨īAb€ôQEŠ)h īKE†’”ĐzSWĨ%*ô¤ī@û´wĨÅ%čĸŠ@†—ĩ%0íKŪ“Ŋ- ŽôRĐQKڒ˜ (Å%;øh))h ĨīEéwĸ–ŒS1E-¤RŅGz\ŌZ;SWĨƒÖœ9Ō(ī@éGz–?ģøĶé‰÷O֟HĸŠ(ąé@ëHŨiAĻX7Z;Rž””JZ( aڒ–’€ JpéI@‚Š)h))ԔĀLŅKŠ1@%.(éÅ'zZ( ĸ–ŠJ)qÅ%QŪâ¤ESīKE”QŠ1ŠQGz´Q@ ۃ@Ĩ4€n(Å-ĀŠĨĸ -v ŠĀ–?šOĻG÷)õ$…Q@¨ĸŠe… ëE(  (ĸ€ (ĸ€Ԕš¤ AEv aEĸ˜ƒŊ/j;ĐŨi JZJQLBLŌŌb‡^hĪ4Q@…ĸĀ¤¤‡Jm(éI@ŠSڊbŌ’—ĩ% ’–ŠĸŠ;Đ ĸ”õ Đ0R´´ÄQŠ(b—øh))ęCÍ%( AéNjozZ’/ģøĶé‘ũĘ}"BŠ(  ÔQE2ÃQۊ(īIN^”†ÖƒE+uĻ˙ĸ€ Z;Ōâ€))hí@„īA Rž” CŌ•zQI@(ĸŠ(Å'ZQ@û´ (í@ KŠĨQڊ(ū1E-&(Ĩ¤ ŒsE/đĐJSAé@ E*ôĸ€ 1ÍPãŠ;Ō¯JOâ Ŋ õĨ Æ(ĨĨ(ņũĘ}2?ģøĶéQE˙Ųleptonica-1.86.0/prog/barcodetest2.jpg000066400000000000000000000202001506303110300176000ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀPŌ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷^i1KGje EP0ŖqEŠ(ĸ€ (ĸībŠL⿀ԊN( c&”uĻž)hАõŖžh<ŠSĪJ9¤—ĩčīA –Š(æŽhĨÍ%qE-%P0ĸŠCÔPž”€ŅE/jJ3I@ ځHz -%q@‚–’Š\QÍ4d⁅™ĨÅéOJNÔdĐ â”āĶyĸ€z %ŧŅŽ(Éĸ‰EPŠZZJ ŽÔf€QF}(÷ ”ŊZCր (撀bŽ´bKžh) )␐hŧQIE@ëŠAHx ĨiŊŠEŌ SŠNô´´™æŠRŌRŒPE-”Rd§Ž)EŪĮ¤šOķŠ7!O?¯?Ę€Û‡üë/ÄwSZhˇ3C#Į"Ą îéųU- Pžīà <ōnĄ;ŽsŪ…¨Žo™s͝­.sÉuœu¯Ôŧ]­C¨ĪzƒíW`9ŽÚĪZŊo5ĶÎÍ>>÷z–ėė7ĩĪFŪ>uĮ֓wGâkÍu}QƒÁ1]Ŧė%oâĪ5â Fo A,ˇ.di‚äŲâîŽŪĮ¨u¸4…ĐŧŖļIĒÉ;˙g,€üÛ3“ŸJá­5Ûų4­YÚã&9R{Sz ė™č%Æ2X}(ܞߝyޝŽęPø6Öî;‰ėĀXūUÅ˙Âo­ÛöéRmsč Ã?|LŠ cøĐúķ^wuŽßĮá{ …Ÿ÷˛8âŗŧmâ=OO{!ktčlŸj.ĀõmßíʁĪWˇ"ŧ¯_ņĨiá;+¸ndYŸŠ#9­˙‡úŊÖĢĸŧ÷“™eÉä QqŠ#‘ĶķúR†užr+‚ąÖī%Ôõˆšā•„ƒ'å­¯_Ü_hŪeĖģ¤ÜÃ$qօ̰8ŽŋîĐ$N›ĢĪ>"xƒRŌ&ĩ[KŠÄä¯z†˙Ä‚x2Åēu™ą“ˇŪ‹é[”ķĐúfŲ8ä}G5æžņŠuáģųåšÜč V#§•ÖøJūkŨ Ļ”ŧ‡9cŸSBŋG8 tĨÍ0&Š8ĸ€8¯ ø›UÖĩ `¸ˇHã‹!Ø7ŽÛĩsŪŅ˙ŗ4ą¸6cæ>}kĄĻôBBPiqņ`xŦcÃ×dqō•CÃ˙Â%'”?Ö´|VâžģėÎđĐĮ„S×aĮëN;“ÔđũPíkžšôŸ‡įŨæŧ˙VEūÕšÃrd?ÎŊNĪü 1Ž?ĨDž!ŋ•õĪų'ļøõ—Į„-ũ7_įSk||?€{ÔZo>ļ?ôŲjĄ¤_Č'ņ¯ëĄęČĮû-y?ęĮjķŊ9OöF¸÷Ûú×ĸ Ųi˙\˙ĨyΞsĨk~Ō57¸–Ö3ü@6ü?´ ōāƒ‘ÅyęĄÁgpzfŊ_R~ÛsĪõ¯7‹ ørĨL†RŧČđvœI#÷‹Žk+â+ú~y&1ZׄiŲéæ.++â$j[OmŲÄc•'°ú â\/´ūØĮJęž ž|“Įžk–ņBįĀÚå]?ÂāWÃ.'qȧÔ]ôčąĢkŋ7ZŪđ#Aۓ÷Ûų֝˙!msžÆˇ|ΈßoįN?ēœÅŊÆk\Á5[TĪü+›~æ­|W?é6ƒą8¨5%ÛđæÜžqŠHor?–>ÔI6ŪŋwūĪü#VĮ=Ģ‚đyĪ…u qō˙wūãÃvÃڄ éGJQŌ’–˜´PQB¨SÆ)ô‡š(h=);Ņ@Ņƒâąī|†¨økæđ¤`ņōëWüVâCv?Ø5á¯ŸÂ1û#S‰+sÄ5ĄVåSœČkŋĶAČ>ŸŌ¸]\*j×8?ōÔ˙3]å‰˙Šˆūífßŧ†ūWÖō~B@įĩEĨ’<l1˙-×ųԚÁĮÃČ 3J;ŧ!lé˛ÕCgō ŸõØõuņ*^yØ?•yņH×Ŋë҇üƒWũÁüĢÎ,äŽ˙žõRŨú‰lQ×܇ö‡ļFkĪoš3~9Ž˙Ä?7Ãë]Ŗ¸¯?€Ģ( ÷éЉl4z}ëøC´áūÚ˙:Éø†YŸOĮîÆ*Õŧ?ņGéßõŅk7âbM<˙Ķ1G@â!ģÁ:x÷ē†K@ŧk˜ņá °lWMđŅËhĒę>„Z{(ÕĩÎ=kgĀ,C8˙žüëOįV×sס<Ɔq˙=ųŅÉęrŋŲėÉėÄæĢjxo‡0įî÷öĢ?ĐÉ5Ž20MA¨œü=ƒ<úŌC{‘ø(áMDÎ̓^ƒā˙äÃúšāüķx[Pø×wāųmųĄ:^ô´E0 (ĸ€AéGjJ(íEĨŒ?ũvØ5›áž<$ž›´|W˙"õßû†ŗŧ5˙"zgŸ‘ŠÄOsÂõĩgÖŽ€$4˙:ôM7ūIųŌŧ˙XeÕÎΘkŋĶŋäAcÛmg/‰_"֔‡ĐķPč˙ō'Û÷z˙:›[?ņ@DŪ†ĄŌųđuž8ũō˙:Ē{?TøŋŽĮ̝:bŸúgũ+Îl8Ō5ĖķûÃ^ŒŸō Oúæ?•y֟“ĨkŸīšŠ|OÔKá(ë ŸYƒÁ$s^vUC1‘^‡­6ßZ“í^vg#8J‰•Ķ/3˙v›˙]ųŠĖø‰ĶNĮ]ƒ?•j^˙fŽxĩ™ņOú3ūŦ*:_š_i˙…u |?&3Ô×%â3éėyé]WÃ,ŸɂzšŽŖčCbvęēā˙gúVį€xЏ¯˜ßΚëo^ãē‡ã˙ŽüčŽäõ9oŠįl֘ë“Uu,‡U¯‹+ûûBzdÕmSūIÜēRę67Á¤Ÿ j˙ø×{ā~|7o\ƒAÔ{ Ÿã]÷ä[ˇúP@Ĩ#šhíN&˜ æŠ\Ņ@Í%PA4RÃņY˙ŠzīũÃYŪ?ņGĮî5hx¯ūEëŦtØxŦß |ãî54.§†ëvŋuŽŌšôM ļ#ë×§ÖĨ֕á_Ā2–Wūë|ĪeūuTūōũSâ=]1ũ–ŸõĪúWœé¯˙ÍtĶFūUčŅ‚tÄãūYå^sb›ts¸ŪÕRø|&oˆI˙…}k_ë^pe P)`A¯IÖøđ¯Š=ķårĖĀ~*$8ž™vŒŪ Ķ€?Æŋβū#ƒ˙î€*ÖģmžĶÉ?ōŅsųÖOÄS¸iĮļÁG@â@ƒĀļ$œãĶü/a˙ėžėq\ŋˆ“>°_Zéž.<9/¨cUÔ}tīųëÃØÖ˙€?äs˙=ųÖŸŸíÍwčk{Ā °›ūē7ķĸ;“Ôæ>+¨y­~lüÕWP?ņn įŌŦ|Y’×šĒš‰áÄ8éHl<§ū]@ŗũ+ŋđ(Į†āĪĨp^ oøĨ5ūĪø×{āfŨáÛLP8č)){RsLAE- Z9ŖŠ\Đ1) v FŠŗũwūáĒ ø=?Üjŋâŗ˙ũįũs5™ás˙zcŸ‘Š­ÅÔņ ]?â{t}%5čškÅŪģzWŸkA—Vģ;ŋåŠūuč:bįáķäT?ˆrøY[YÂü=„š‹K9đ…š˙ĻËüę]mOü+¸GĨEĨŽ<oųėŋΜ>ęŋAOâ=b3-?ë˜ūUįZnN•ŽƒĶĖzôhųŌĶūšå^u§gû/]˙ތJŠüAĐËņÉđōØúÎŧáefaŽžĩčúū[áõžGë^tŋ)ãĻE-OŧūŊ?ŪEŦ߈)Ķŋ똭KĻ ā­;ūē-eüD˙˜qė*:—ÄdŸXqÅtŋ ä_“Ũ̚ņ nđ.žÚÅtŸ |;/ą§Ôob?ūCšđ†ˇ|˙ ?éŖ:ÁĶĪüOuīĄ­ī‡˙ō$˙ĪFĮįDw'ŠËüY\=¯ÔÕ[ņ‡ÍXøŊ##YĒŽA|fĒßøˇ/¨Ō[ ‡ƒļ˙Â)Š˙ôŽ˙˜>ˇ5įŪ įšô_ņŽ˙œxjÜvĄ:ŽôŊŠZ)° (ĸ€E%- ) ”‡âŗ˙ũŪį™Ŧŋ ø=01ō6+OŃū)Û¯÷ fx\gÂŽŸ#S[“ÔđígiÖŽ@bzsų×ĸéŸ/€ îyæ´¨šÍŅnķOčZcøWįéPū"ŸÂC­ü:ˆûÕm,āû~åē˙:ąŦŸøˇįÖĸŌÕGƒ`ÃËuūuPø_Ëô"=b?ųĻ?įŸô¯8ĶÆ4­tŸīˇō¯G‹ūA‹˙\Įō¯8ąoø”ëãŅۜž!ô35æ˙‹qjG$‘^h…÷í#Šô­xnøsj0¯<#Ë952)lz}ĘgÁw¯˜šĒ?0ŸØ3ųV…ŅđƒéÄw‘k7âãOĪüķtī.< cƒĮZé>œø~_MŨ+ņ>°õŌ|.ĮöŸī}GĐ­`TëÚčPsƒ[˙ųĐ˙ĻüëO˙î¸=ox+ĄˇũtoįN;“Ôåū-)wļ?xšĨ¨|ŋ āúUŋ‹aˇÚH95SP?ņn!ĘÔ­†÷ÁEáԈŊ˙ī| Άíņ^ā’_Âē˜˙gúWĄxvønßք'šĶ™ĨĸŠlaE-ϊ aHh ô  /sáûąūÁūU›áų#=üļ­/Čŋy˙\Ífx[Ÿ§ûMnOSÄ5pNšxéŠí^…ρ˙c°ū•ĀëåĀāŸ0×{§ø T?ˆ§đ‘k_ōOĄ[I$x:?åē˙:ŸXl|<…ģÔzcāč6˙ĪeūuPø_ȉüHõˆ˙äŸîå^mc˙ Ŋ{ßjôxÉūËC˙LĮō¯:°#û/^Ī÷ۜž&5ą›ŽķđîÔ'cßë^yÁm§æjô=pãáõļ?ŧ+Î}ëÚĻE#Ôîïƒ4á´`:˙:ËøŽĖɧœûąZˇLÍā­<÷2/ZÎø…•OÉ÷cš:oˆ˙„ĀgŽk§ø`6č˙Ŋ\ΈÆ| §ķõޟá—:™é¸ŅÔ} öxƒ]úå[Ū?ņ"oúčßÎą4ķs\úJÛđΆßõŅŋTw'ŠĘü\Ë5ļ98ǎŲ íÆy5sâĐĮŲ=2jŊëøWPgĨ î3Á /…õ.?‡úWāS˙äōŽÁģÂÚŽĶŸ˙Zī<⛷Ąn&uR ZĻ4QE!ޤ b”ô¤ŠJJZ\ PŠŋäw˙\Ífx\Å ƒũ†­OøŨĪČk7Ç…cqōëMnKÜđg?Ûw˜<ų†ŊNįáķģĪå\௺tÄu× iƒ?\tųjÄ7đ•õu-đî EĨ.ßĀ:feūu&ŗ•øuRZ›Ĩ6ī[ÚeūuPøËôž$z´Cū%i˙\Įō¯9°éē÷ûÍ^“ü‚ã˙p*ķ}??^_öÍTž [ZéáÕ¯#¨¯9R ˇ5čúâmøol¨î=kÍüŊ­Ž ÷¨Ņęˇ i˙ī­f|Fá4ã˙LÅi^ xO˙Ž‹Yŋ~eĶĪũ3tŪ!ņCiã×ē†ūÁ—ũã\ΈÛū(;¨Ž§áˆ˙‰Ÿī:Ąžŋņ;×?Ũ5ĩā ˙b6xũáëõ5‹a˙!ílvÚ•mü?˙žŌ7ķĒÄOS–ø´ o›zUKũŖáŦ@œÕ‹Ä)ĩÁĮ'ĨVŋņláį&Ĩ ‡Ā>ÔŋŨ˙īŧ1á¸>ĩÁxáMDį#o?­wŪįÃp}h[ˆęJ;QEWQĄ(ĸŠq<âŽÔsE Š\RС18ôZá5PƒXšķæækŊĶ| õZ‡ņü%M`˙Ÿ‰išHĮƒ ˙ŽËüę]`Åģˆ÷˙"l?õŲT~ōž$zÔ_ō ‹ũÁüĢÎ4Ņū¯öÍz4ō ũÁüĢÍôã˙ũxú;*Š|BZDĄŦ0mP@aÆ+Î]ŧɲ^‹ŽÉ:ļqɡÖŧá$Ųü$ëQ"ãąé÷láĶØŒūņxük;â!ũۜ@ꂴŽ<`O?Ŋ_įY˙˙‰pĪXÅ/ˆ0< b{dWOđĀ˙Ď\˙zš­}Uŧdšî+Ĩød¸ĐeõŨGÚB˙‰ūšô5ˇā  ÆåŖ:Âą˙ūē3Žō­Ī‡ŧčO˙]ųÕGâ'ŠÍ|Z+ūŠHMRžq˙ ÚØv̟Č?ew5JôÅļˆzR⪟ ę?î˙w~Īü#v˙Zāü Ī…ĩ{¯ø×{āOų ü™¤ˇ:Š))jēŒZ)9ĸ€E'zZ@%R”0üS΅wūåfxPgÂ1õåĩ†^š‘đęŨ‡"ŧî1Ÿ— “ÚŊ[˙’wl}bŧö‰Įz‰LēP<`?éĒ˙:Íøˆ2ēēåZˇ8oØq˙-ņõŦΈLŖû79ËëéÅ/ˆ2<`:k§ødsĄĘÚŽo^;ŧ `v“Čī]/ÃLLxŅöėë§ØÖį€_v†ä 1ŋbX€uũsŨOō­ŋ.47˙ŽüęŖņ ŠËü]LũŽģSŊņmaĩ^øŗĪŲGxÕ+ßų&ŅũjF÷␅uŸáū•ŨxūE¸?æk€đ@˙ŠWQöZô˙ȡ q3§Šh(íUÔaE%ę){RRi Ņڀ0üO˙ +Ą˙LÍfxW‰ūéūfĩbôúÖwÄ.!ĶÉūį_´Ĩmž ĶÉ˯ķŦ߈ƒ)§Ÿö…ĐMtø@ė:Gję>4IčĨs^ Īü –]ą]Âņ˙)NsÉŖ¨ú °į^Öģe?\V׀:#ķ˙-ųÖ%™ÎŊ­z)­¯˙Č˙ëŖ:iûÄu9Ί§æĩÎ>ņĒü|8O­h|UMÆ×ũãToĐˇÃ”¸üélS܏Áū)}GĶmwŪČđäõŽÁHSÃz'ĸ˙wŪ;ŧ;8˙3M÷:zQF(æ˜ĐQIÍ€’’Š(R:sKI@#W}č*åŠY~†Eđē$ˆU‚ u Ē˙+r=ë ]ņ–‡WČ~ę%4ė++ŦéwīĒĪ$v˛°.z)æģ2ĘuđL‘$cî‘ZxƒVž4+„čK€3]­¤{íĐË–ÄršŠûW+ėžcĒŲ\ŋ€RŲÁûOJJŗšOÑ q0ʕ5ëRˇ˜Ŧëqh°F‘*4Ō63ÜĶøWŠ-_S^%`‰H9)ŌŧúÂÖqc­ŠŠLŗŋ/Zô[Ik(¤•v3(%}*AŒá@ÉÁ÷Ē{Š;MŦØ\Éā( H˜ēļJ…>ĩÁމ¨ąĖ?āŊËĞ#ļĐãX6i>äkŠįŖņ.ފ&“A}GŌĨę=Ўw āË(„[ĖŽâŗüye4écåC#˛ĮÎõÅz~“*ę|S=¸ˆ°ûŒŧŠąwaf‡eä cųĐ”kvsø&Î! åBščūÛMiĸȒÂĘĞH¨į×|F&1ފ Į#\xĪUĶēĶŧ•‘ąģ~QœŖumw˙ ō(Ä,Ō‚>]§5ŋqã'Ŋ•“MĶdēQÆYkĄĐfēžĩ?n˛û9åZ:ŊNÁö7qxsSÛē;)Úë]ŋ‚ ’(Ū6FđOjčŊ@ö""¨Uô (íGq@ÄĸŠ(ÔP( ĸƒÖ’€ąŽŊ+Í!Š;ˆŌ­áÜqŋ5釜ņÖ¸īxZKÛÄÔ4ųžĪxƒķųPT¨ˆĄT(`b¤ã<…üĢÍ5-KŚŸq,LŠĀekŊŅ.åžŌážAķ:äœÔˇi$ ˛ēĸ—'’N+ÉîŧGk?‹^{ˆ¤™-ō¨Ē™¯OÔ÷6Ÿ6ÂŲŲÆĩr>ĶlΟ,ė“4„Éģ¨įü)ĨÍ17mŅhzũžąû;č>hČä}k\ōzņ\#A—ā‡ "0/OÆģ°8˙iķ!yo­ĸĮãëG¸ äíųI ô„R÷ĀfšŸÚiī§™ī@ÜŖ*ČA5‰ā]^[‡ŧēš‘-AĖjä’E&3ŅÕp8ĀúR°-€yúŒŌŽ1Ô †ęf‚ÚGÉČŊ03ĩbĮGĩinTúϏ]>ŪķÆ Žöd1XÂŲ@Ë֗Eŗok“Ũę Ub­zE´0ÚF% Ŗ €'H„KĶĨqß<Īė0 ÜöŽĖN3ØÖv­ĨĮĒØIm n‡WÃÖö°höūB& GRkir:Îŧâ3Åz<6ˇI, rĄēŠÜđ^ŗ}ĒGpˇÁ ‘>>C@n(įdæŠNhĨ¤4QE´wĨíI@ĀõĸŠ(>Ã'ĩsâø‰ŽGöi‡ËĮ9āæēsëI@q¨čž'Õ­ü‹Ļ„'_”×mŖYŊŽ›A(¸â´6AųRⓍåpĘ …#đŽ*÷@Öl/e—FģTIŽYšíų¤Į úzSŲŨåü;áÉŦîÚūūq5Ķ p0tøĮN~´ī¯?Z=iéĐÆ^Ö5ĢčŦ‘ˆSœÆj M;ÆVqĒ,ļáUpĄ3^Œ89 qŌ€3tUŋ[%ūБ Ųį¯Č—dšŠJJ@pWžÕ,ĩ nô{Ī)d9d|ōj[-ėWQÉ}¨í‰:ŦYģœSqĮ΀41¨ÎSU5Qzl›ė;EĮđ‰:~•|tŖ×Ū€8I"ņŒ‘´dÛ|ŪõĄāũ÷HŠá¯ bI›qØ+ŠÚ=)Ũ=hŖžÔ´´”Ŗ­&(īKڀQE-%(ĸ…'4ĻŽh(Å-”S°1MĻGj(¤RŅJ:Đ!)9§RSĸ–ŠNԂÚ€ņEéh´sKJ:Ō´Ŋ¨=h šSGz(ĀĸŠ(ĸ–’….h¤=hĸ”t¤ Š( AEPGzJpéšCAĸĐŌQE-vŖ­0H)MĨ'wĸŽô€ZSŌŽôQ@ E-sIÍ-!4 ^ÔŪM-(ë@ Í´†'z8ŒĐQIK@”ĸ€փ֎3E'4wĨâŠ(íš(â€ϊ)h(īE´Q“š(ŖĩPQKE˙Ųleptonica-1.86.0/prog/baseline1.png000066400000000000000000000044761506303110300171070ustar00rootroot00000000000000‰PNG  IHDRטÜ>|D pHYsb&2đIDATxœí×MjÛP@Ņ”. (x´4S:č°[*dŨB—aFî¤VqidÎ}<Ūą,ëįá¸ŲƇ[ ŽĮÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[‹­ÅÖbkąĩØZl-ļ[kf;<Üžl)ļ[‹­ÅÖbkąĩØZl­kļããņ]úųž"8¯øâ8˙˙˙˙_ú˙÷˙õ_×ßõúĒúŽ?¯* Ą˜Š;6Ėâŗl†dņ›3Ž3뉞ä6HÄÃ!ŗlÎ50ˆR˛zA°°ÉšG'Ą?!ÎNd/—3YËŗ˜-98™Æqŗ(dėÂ(dņ›6ÎŦÛ)gC­ÍfOgŲC6ÍfPĖDS6S˛{3‰Ėē<ČĖāˆvQ˜G°Â EđF€Â„x " 0ĄB<𸅠ā0‚5˜ƒYĮ‚5›á#Ā†œ#Āa‚4`†ŗĐÖyÂ<ō 0g™´4g‚„Ä L0f ÖS„Â3†ōˆ(P„x&ė F<& Û5„h (G€Â<#Āaà Á—Cáˆb …ų #[*Œ$I4ƒ`č&ÂM‡i‚th ÚAĐA°õi6‚l$ÚAˇA6‚a‡A: ĐM ›ĐM´‚l- ÃA8pÄ Ø:AĐA°āč&Ōi ‚aáũØt ›a Ø:I´“h Ø|: Á ‡‡Ž“vé]ôÛĶi~Íմ[aÕˇ}6•é&“l;WVŌOVũŌ{ĶŌwa7֒Ŋ樤ûúļÍ鴛ˇí´•÷WŌ}˙W>ßĶ~ũUĨii]íôúęŨ~“¯¤˙­ãēŋŪ›¤žé}˙¤õWMÕãúK˙ũ˙Õē[¯ûˇ˙÷ũ˙¯[ÕĒūūÕ¯ŋÕö­/ßũúũ/˙ŋûVëũ˙ŋK˙˙˙ûÃëJ×Jņ˙ū…oáŠô:˙×C˙ŪÃ˙õú÷˙Gøcī˙!Ĩõú˙dTūŋÂõ¯ûû"úūŋûÁūEš˙˙ūŋũ _˛)˙˙˙˙Ø˙˙äI‡ū?˙aĮņ˙DŲ‰|0īĄ˙Į˙˙’ö‡˙ûå§˙āß˙˙øAËO˙ÃsUæų“Â˙øoūęZķ ˙÷á˙†ųi˙ūŋ˙É˙˙ũ˙įūuųåū–˙ųŅ˙ļ“˙˙˙^‚˙ίĪ/˙˙ų„˙ū˙Ō˙˙×Ī'ŋ9ß˙Ĩ˙Žqīôš˙œû˙˙ŌīķÉ˙˙Ģû˙ëūŪûæī÷×î÷īúúX"Ÿũvīū?ū˙ę˙ø"Ŗū˙˙ũ/(_ũo˙é~—˙ųB÷'M˙~Pœu”/öÉ˙]ŋ˙ōũ˛uũyB˙­/˙'˙ŋlõoÛ_ũ.­n›Û¯˙Û_?7ē_í¤ßíĨ}ëéwˇ_ß˙ŸļŌ˙Iŋ˙nŋ˙ũ×ĢimĨßÚVŋû¤Úē^˙Ŋ´ŊtŽžéĩŌomt=´ļô›^Ōô›KîB˜i{}í¯ö“i~ũ´ŋēÛKîĒ 6‚M´“TĶĸ>•ŌM„qÁ­Ļà 6Įà &ÚV’j›i6•†H0ÂKv´ƒ %¤ÚM­Ĩa+l#ģÛGtGI' &ÂIĻŦ %kĨĻÚKiŅI´iØI4Ͱļà Zļ°C •†Kà Á†0ƒ'‚ Ã'Ä †JØA‚a’ †L1 `ƒ‚0A’ ˜`Ã$ ÉB P a“Æ(@ƒØA`Ã0ƒ 2~A†‰X./0ƒÃ2Td­†(a8#0dü0ƒaÄDDDqqDDDEHÄDDDDqū“˙ú_˙í/ĨļŊ5L0 8AĐA†FžÄDG˙˙ü˛ÔfŒû3ĐgČPĄ#Ђl88zēIžÃ¯ũ *˙˙ú˙˙ŋ˙˙ũ˛u˙]rm.ôė4›㆟L2qQ˙˙ųh˜!nc,„#%ŒŽŠ•ŦėŋÎŌŅ’B,“#DD˛ŽÂĸ;pĘ|–#äh‰<–ĸ–‚L8M0˜:rüšŌL&&˜:ßũ8[ĨīúˈFBH‰/ũĸ…īĩ˙´PģZūĶMmuô-m5ĩņõņÅĮĮ˙˙˙ú˙×˙ŋ˙Ēūž˙¯ÕWÔqũyPe ÄPÉŲļg8͛d3'ŒŲœqŸdM”ī!˛Dn& ›fqŠ„B•“в …†MĘ9= ųrs!|š˜‚Î]œÁiÉÄÎ3™C'fC'ŒŲļufŲHķ8"nk2xã>Ęļk2†b ™˛“ŲœNeŅæ@ŪgC˛ŒÂ=†/‚4#Āa… ā0…Ä(P„x ŦÄÎ<Ŧß|4ᨠ 0Ë5ž†ŗÎā0„k<ÍĄ 0Ë< F Ąa„{0f˛ž&œ0 @ŒAB„x #Á7a1á0fŲŦ#@aB<ā0ĄöTž ē @#\(GČPđ˜2ŲTa Ø:I¤A6l80ÛH888t ›AŌ‚ ‡ĢI°ta&Ō ē ´ : ĐN‚mŪ‚m pt`éi Æ!ÁŌ‚ ‡A6“Mč&àØ0Û ÁŌM¤›AÃáĐNL<=t›ˇJīĻŪ›Kön­¤ęÛ­ģé´¯I4›aÚēļ’zˇî“Ūž“ģ ž´•īVÅ'ßÕļoM¤Ũŋm¤¯ēž“īúŧiöū›÷ę­+KJčo§×Vëô}'ũoÕūôŨ%÷Kīũ'Ēēn¯Ō_˙īū­ŌŨŨŋ˙ŋīũzŪ­W÷ö­}ū¯ĩi~˙ī×éũ˙Úˇ_īũú_˙˙˙Ū˙ZVēW˙ô+ WĄ×ūēūö¨˙û˙¯×ŋøę?Ãų /¯×û"Ŗ˙õū­ßŲ×õ˙Ū ˙ō,×˙˙õ˙ëøZũ‘O˙˙üūÃ˙˙˙"L?ņ˙û?øō&ĖKûáƒ˙}ū?˙üÃ˙°ô?˙ß-?˙˙˙˙ ūZūš¯0ĪĖž/˙Ã÷RĶ˙˜g˙ŋ/ü7ËO˙õ˙ūH˙˙č/˙8ŋķĢ˙Ī/ôˇ˙Ώũ´Ÿ˙˙úôūu{ūy˙˙Ė ß˙÷ū—˙ūžy=ųÎ˙ũ/ũsˆ7 EĪüįß˙ū—žO˙ũ_ß˙[˙ö÷Û˙0ŋžŋwŋ×ŌÁ˙ëˇņ˙÷˙W˙Á÷˙˙éyB˙ë˙Kôŋ˙Ęš:oûō„äëŦĄļOúí˙˙“˙퓯ëĘũių?ũûdë˙Ģ~Ú˙éukûtŪŨūÚųųŊŌ˙m&˙m+ûë˙_KŊēū˙üũļ—úM˙ûu˙˙îŊ[Km.ūŌĩ˙Ũ&ÕŌôũíĨëĨu÷MŽ“{k¤čĄíĨˇ¤Úö—¤Ú_rÃKÛīm´›KôíĨũÖÚ_uPI´m¤šĻô¨Ž’l#Ž m6I°Ž86I6Ō´“TÛI´Ŧ0ÂA†[°­¤a-&Ōmm(0à [aŪÚ8āĶĸ:I8i6M5`Øa+]-6Ō[NˆúM “M´­&ÂIĻ…ļJÕĩ‚d¨ 2^ a<0Š„8„ a„8†! 2V 0ƒ `Ü2aˆA‚ dà ÅJb ž0ÉBÂ8# A„ hØÁ“đ 0tJÁpÉx0A„A’ 0@Ã%l1@ƒ0AÁ Aƒ'á„"""#ˆˆˆˆˆˆˆˆˆˆƒˆˆˆˆˆˆˆˆˆˆâ"""("F""""#ˆˆˆˆˆˆˆˆô›˙˙Ō˙˙i}-ĩéĒa†I‚ 25ô""?˙˙å–Ŗ4g؜n'fˇÖ|… "<øbĄØppõi6‚n’o°ęÛI˙ô>ˇJŋõ~?_ü/uüęÃĮ˙.`]˙Aũ/˙ø"Ÿlûd˙]úļ—~ũ´Ŧ4›㆛iZA†ƒ&8„ 2VÃ˙˙--Ėe„dą•Õ2ĩ—ųÚZ2HE’dhˆ–AØB4Gn@‚/’Ä|'’Â4RĐC ƒ‡ ĻN_—:I„ÄĶOû˙§ tŊ˙Oų‘ČI%˙´PŊöŋöŠk_Úi­Žž…­Ļļž>ž"8¯øâ8˙˙˙˙_ú˙÷˙õ_×ßõúĒúŽ?¯* Ą˜Š;6Ėâŗl†dņ›3Ž3뉞ä6HÄÃ!ŗlÎ50ˆR˛zA°°ÉšG'Ą?!ÎNd/—3YËŗ˜-98™Æqŗ(dėÂ(dņ›6ÎŦÛ)gC­ÍfOgŲC6ÍfPĖDS6S˛{3‰Ėē<ČĖāˆvQ˜G°Â EđF€Â„x " 0ĄB<𸅠ā0‚5˜ƒYĮ‚5›á#Ā†œ#Āa‚4`†ŗĐÖyÂ<ō 0g™´4g‚„Ä L0f ÖS„Â3†ōˆ(P„x&ė F<& Û5„h (G€Â<#Āaà Á—Cáˆb …ų #[*Œ$I4ƒ`č&ÂM‡i‚th ÚAĐA°õi6‚l$ÚAˇA6‚a‡A: ĐM ›ĐM´‚l- ÃA8pÄ Ø:AĐA°āč&Ōi ‚aáũØt ›a Ø:I´“h Ø|: Á ‡‡Ž“vé]ôÛĶi~Íմ[aÕˇ}6•é&“l;WVŌOVũŌ{ĶŌwa7֒Ŋ樤ûúļÍ鴛ˇí´•÷WŌ}˙W>ßĶ~ũUĨii]íôúęŨ~“¯¤˙­ãēŋŪ›¤žé}˙¤õWMÕãúK˙ũ˙Õē[¯ûˇ˙÷ũ˙¯[ÕĒūūÕ¯ŋÕö­/ßũúũ/˙ŋûVëũ˙ŋK˙˙˙ûÃëJ×Jņ˙ū…oáŠô:˙×C˙ŪÃ˙õú÷˙Gøcī˙!Ĩõú˙dTūŋÂõ¯ûû"úūŋûÁūEš˙˙ūŋũ _˛)˙˙˙˙Ø˙˙äI‡ū?˙aĮņ˙DŲ‰|0īĄ˙Į˙˙’ö‡˙ûå§˙āß˙˙øAËO˙ÃsUæų“Â˙øoūęZķ ˙÷á˙†ųi˙ūŋ˙É˙˙ũ˙įūuųåū–˙ųŅ˙ļ“˙˙˙^‚˙ίĪ/˙˙ų„˙ū˙Ō˙˙×Ī'ŋ9ß˙Ĩ˙Žqīôš˙œû˙˙ŌīķÉ˙˙Ģû˙ëūŪûæī÷×î÷īúúX"Ÿũvīū?ū˙ę˙ø"Ŗū˙˙ũ/(_ũo˙é~—˙ųB÷'M˙~Pœu”/öÉ˙]ŋ˙ōũ˛uũyB˙­/˙'˙ŋlõoÛ_ũ.­n›Û¯˙Û_?7ē_í¤ßíĨ}ëéwˇ_ß˙ŸļŌ˙Iŋ˙nŋ˙ũ×ĢimĨßÚVŋû¤Úē^˙Ŋ´ŊtŽžéĩŌomt=´ļô›^Ōô›KîB˜i{}í¯ö“i~ũ´ŋēÛKîĒ 6‚M´“TĶĸ>•ŌM„qÁ­Ļà 6Įà &ÚV’j›i6•†H0ÂKv´ƒ %¤ÚM­Ĩa+l#ģÛGtGI' &ÂIĻŦ %kĨĻÚKiŅI´iØI4Ͱļà Zļ°C •†Kà Á†0ƒ'‚ Ã'Ä †JØA‚a’ †L1 `ƒ‚0A’ ˜`Ã$ ÉB P a“Æ(@ƒØA`Ã0ƒ 2~A†‰X./0ƒÃ2Td­†(a8#0dü0ƒaÄDDDqqDDDEHÄDDDDqū“˙ú_˙í/ĨļŊ5L0 8AĐA†FžÄDG˙åŸ( ‹˛PĄNMô˜}]­65ēOīōËQš3ėÎ7ŗ[K?ŗ8œËĸ†yfláΐĄBG @#‚… ō#… Đ ›­&ĐMöéSÁ䤛ė:ļŌ}ũÕŌ}Ōŋũ­ę˙éOJŋõūõ[ãøõõü1¯˙ūļ˙ŲׯįV?ũ†ŋĮ˙.a­~˙–ÂĢū‚÷_έ˙˙é}ŸëķÉ˙˙˙‚)îEõ˙÷ļNŋũ˛}ē ¨_ŪߎPēë˙ĶcĨkū¯ļļŌīĐ"?ļ“eÔW÷M­ĸ‡ļ•†“apĶm+H0ÂAØGv´SŨ(6ԃ&8„ 2VÃĪ ÉÄpF2Qdĸ& DDDD”xˆˆŽ"=}ũ†ņ˙´ ƒˆ˙ü´Lˇ1–B’ÆWTĘÖv_įihÉ!I‘ĸ"YGaҏežKō4DžKŅKA &&˜L9~\é&L?īūœ-Ō÷ũ?æD#!$D—ūŅB÷Ú˙Ú(]­iĻļēúļšÚøúøˆâŋãˆã˙˙˙ũë˙ß˙Õ_×ęĢę8ūŧ¨2†b(dėÛ3ˆfͲ“ÆlÎ8Ξ&ĘwŲ"7 †Íŗ8ÔÂ!JÉčYÂÃ&åž„ü‡99ž\ĖAg.Î`´äâgÆĖĄ“ŗĄ“ÆlÛ:ŗl¤yœˇ5™p„TĐe‚ĪCYįđGČF€Â5žfĐĐež #P0Â=˜3YO ÎPGČ F ĄB<ā›°đ˜3lÖ 0ĄđP„{ *_]† ˆ.#ä(@ŒxLlĒ0l$Ō ƒ › 6m¤: ĐM ƒiAÃÕ¤Ø: °“iŨÚ †č'A6‚oA6Đ8: °t´ƒ áÃ`éAà›IĻ‚ ‡‡ôaĐN‚lm„ƒ`é&ŌM ƒađč'&ēMÛĨwĶoMĨû7VŌum‡VŨôÚW¤šM°í][I=[÷IīOIŨ„ßZJ÷Ģb“īęÛ7ĻŌnßļŌWŨ_I÷ũ^4ûMûõV•ĨĨt?ˇĶëĢuúNž“ūˇŽę˙zn’ûĨ÷ū“Õ]7Wé/˙÷˙Vénŋîß˙ß÷ūŊoVĢûûVž˙WÚ´ŋ÷ëôŋū˙í[¯÷ūũ/˙˙˙ī ­+]+Į˙úŋ†+Đë˙]˙{ Tũ˙×ëßüuáŋü†—×ëũ‘Q˙ú˙ Öŋīė‹ëú˙ī˙ųk˙˙ú˙õü-~ȧ˙˙ū?˙a˙˙˙‘&ø˙ũ‡Įüyf%ũđÁ˙ž‡˙˙ūHa˙Øz˙ī–Ÿ˙ƒ˙˙á˙-?˙ ÍW˜gæO˙áŋûŠi˙Ė3˙߄ūå§˙ú˙˙$?˙˙ô˙œ_ųÕ˙į—ú[˙įGūÚO˙˙ũz ˙:Ŋ˙<ŋ˙˙æo˙û˙K˙˙_<žüįū—ūšÄŋĐ"įūsī˙˙KŋĪ'˙ū¯ī˙­˙û{í˙˜_ŋß_ģßŋëé`ŠõÛŋø˙û˙Ģ˙āŠû˙˙ôŧĄõŋ˙Ĩú_˙å ܝ7ũųBruÖPŋÛ'ũv˙˙É˙öÉ×õå ū´ŋüŸūũ˛u˙Õŋmôēĩũēonŋ˙m|üŪéļ“ļ•ũõ˙¯ĨŪŨū~ÛKũ&˙ũē˙˙÷^­Ĩļ—iZ˙î“jézGūöŌõŌēûĻ×IŊĩŌtPöŌÛŌm{KŌm/š aĨí÷ļŋÚMĨúGöŌūëm/ē¨$Ú 6ŌMSNˆúTGI6Įļ› $ØG $›iZIĒm¤ÚVa à -ØVŌ 0–“i6ļ”a„­°ŽīmpiŅ$œ4› &š°l0•Ž–›i-§D}&ĐIĻÚV“a$ĶNÂÛ %jÚÁ 2T/ 0ƒT œB0ƒ B œC‚+aA†H0n0Ä ‚ÁH2aƒ bƒ%1@†OdĄaƒ P  4l`Éøa:%`¸dŧ  ÉP a’ļ A„ āŒ Á“đ ‡ÄDDDDDDDDDAÄDDDDDDDDDq#ÄDDDDDDDGúM˙˙é˙´ž–ÚôÕ0Ã$áAú˙–| ‚.ÉB2áM8A7ô˜Wi­6#[¤ū˙,ĩŖ>Ėãq;5´ŗņ›3‰Ėē(g‘æfÉ “fĄãlÉ ›pgČPĄ#Ā† ‹ÁB…ųB…h ˛ė0PÂ‚4#Āp‚l88z´›A7Ø88t¤On¤`à ƒ¤A7I7Øum¤ûṳ̂ûĨjöí7Ĩw˙č}oW˙Kú[ī§Ū•ę˙ũęūˇīī­×Įņëëøc_ü1˙˙ø^Û˙dY˙]‘j÷¯õüęÃĮ˙°×øØdėÅü˙.a­~˙–$Â˙-?ŋč/uüęßü‹´ŋ˙˙Ĩö¯Ī'˙Čtžŋ˙ū§¸A×ũ˙ßuĖ/ß퓯˙lŸnƒ*÷ˇë”/˙_(_×_ū›+_õ}ĩŋ_­ĩûiwčÛI˛ę+ûĻÖŅCÛJéāˆ˙imĨŨ†“apĶm+H0ÂAØGv´SŨ(6Ō°“iZTGI&ÚIŦ0ÉÄ a’ļ Æ}N ƒ‚0A’‹%É`ƒ%oadŧ0@â"""JB‚…đE@`f k7ÂG‚=šp„x #@`Ë(böP„|/Í‚bXf€Ã,đĄö`ÁđĄ0Œá…|‚b #Āa ģĐ2Õ`…đG€Â„x #@aBÃ]a„k>p Ą†YƒYō  DxđÄ1tl=Z °č'A6 6AÁÁÁĐM„›AÂ:6­ ÃI´h&é ÁĐM¤ Ú7IÜ: °t“a8bl č Ø8: ´šiŪ֐l: ĐMƒ †‚ 0tēH0ĐMƒāđœŪĐA6­&ĐMõm‡JÛ7éē÷ž›VŌum‡IīL=[ŌT›÷KJŌ]+÷VßĶm'v}i/zļ*ßúVÍ鴛ŋˇI?Õõoô“Ũ‡VÚOŌēžĒútßöô޴އ{Ũ'ŌZģŋ§IzŌ{¯īMŌ_t´ŸūžĒéŌ|uĩ˙ũ'˙ū‡Öū˙ũ˙×Õõ÷î­ũēŪúßũõĢû˙ŋ_÷ūˇ˙k~úĩ˙ũū•ęũ+×ë÷aū•úWúú× }G˙×Å˙īaŠūŋ˙õīõCü1×˙Į¯õ˙üŠ×ëū ]×ŌūČŋë_úđU˙äY¯ūŋõ˙ūüũ‘O¯˙đŊ˙ø˙û ˙˙ųf/ã˙öņŅeī÷Ãūüņ˙ÚūHf/öëųՇ˙Ė3˙†˙˙˙Â˙2߃rõōĶūa?˙†˙îĻūZ˙ø@ŋđß0Ī˙„3(˙˙ôH˙˙éųåõįGųåįøAūtíĨūyũ?éįW˙žOú ú˙ūa˙˙ôŋīīüâ ÷˙ũëŋëœAģũ.w˙˙˙^—ūy?˙éÛ÷˙û}oöũ,ÂũũßûŨũ˙ßĨ0ŋëˇņũ˙˙õÁīũ÷˙õüOéiyB˙Ō˙˙K]/_üĄ~Oé~ųBÉ˙Ęë”/ũ˙'˙ō…˙å ũ'˙÷'_˙”/öÉ×˙ļOũēÛKūûûũēonŋ˙m'SÍēoū›VéÕĩ÷ÛKũŋŌīnŋļŌûĪÛkũö—ëˇ˙~Ú_~Ŋ˙õÕŌÛ_ûKIŅCûŨ&Ķtļô—Û[­´›Kí[I´Ž›Kí=ĩôm§Ú^“i}ČU IU´ŋ´›KŪú_Ũm¯é6“ĸ‡úGöŌĻ Ã &ÚKi§„4­(4Õ6I´S†Ã &ØGwÚjÚM­ļmiŅ$ÚM„›VŌm'J ´“mumá§Dt’pŌl%iĢÚKmރm%´áđ‚ ĨvÚVa„­nÂVÚKmĢ +J 6Ō´ƒ %,´áˆA —ƒA„PF 2P‚ 0ƒ B Ã‚<`„ a’ 7 Pd¨AĶ2AŠa†H0l”C%ĀÃ%‚ƒ'pAė ƒ‚0aŠA‚Œ2^ aŠr —ƒAá„@‚+a“đÂ8#0Éx0A†(0ÉBd­†*"""#ˆˆˆˆˆˆˆˆˆˆƒˆˆˆˆˆˆˆˆˆˆâ"""("F""""#ˆˆˆˆˆˆˆˆˆˆˆˆ˙IŋĨ˙˙˙ö—ŌÛ^šI†A'10ČädDG˙Ë(JYF2ė”(@† ÃNm­[Tœkznŋûg™ög™Ö<Ælū(L#ásž ĄAŽ:AĐA”đptƒzßt´ŸŌŊ˙úNũ?˙ˇ_Öī˙ ˙Ĩû"Í~ŋ˙a˙ĮđoūXēüč˙ûŸ—ķˆ7˙í0Ģûī÷ēL¨_î˙å ßĨ¯ĶkjÚØ{]öēûiC‚l#ŽŅ$hãÛãƒm(1ŸA“ˆAĶ2q œC$S""#ˆŽūëá…ņ_í'h â?˙,§[ˆÉš–d¨Šâ™ZGi×;Yˁ‘7Z"tD˛[Œ#<’€AâWŸ#<“ÉAđdö”ÁÁÂiĻ9ŧŸĐZaĶL:vˇßĻ}ũ˙æ^ŒŒ"&ŋü%Ŋ?˙“Ž×ë´Ķ[_Ū-m5ĩņ˙ÄGŊGĮú¯˙ŋ˙˙õ˙õúĒ˙˙˙ÕWÔqũyVɸœÉãŒû*Ųöm„y™ÆlÛ3ˆ)ŪCdˆÜB3¤m™ŗŠ„C‹Ą4e†OBõ/Čt2˙h&sY‚œģšFqŗ(dėÂ(fŒÍ›gVmgŸaĄR“ĮöPÍŗY”3x"ÉÖN…Ō}“ŗķ*Ī>Â!U“Ąs4Íf9u–Ęk7ÂG‚4#Āa #Ā` ĄB<P#YƒcÁÍđāfœ#ĀaĐ2Ę‚=†#Āa ķ@`– 0Ë<(F€ÁBG‚=˜0F<(L#8aA ‚…đG‚nÂ4… ĩX#@aB<ā0ĄĐP0Á—CØaΜ(#d(F€đĄ–`Ö|‚…|1Œ]V‚l: ĐMƒƒ †pppta&ĐA°‚‚ ‡ĢH0ÁŌmÚ ēAÂA°tiH6‚ ŌAˇ‚l¤ØA„H:6‚m&šA7ƒĩ¤‚t`Ãa ƒ .’ 4`ø<'A7ƒ´Mƒƒ‡ĢI´}[aŌļÍúnŊīĻÕ´[aŌ{ĶVô•&ũŌŌ´—JũÕˇôÛIŨ„ßZKۭЎū•°ãzm&īíŌOõ}[ũ$÷aÕļ“ôŽ…'Ēž7ũŊ+­+ĄŪ÷Iô–ŽīéŌ^ŸôžĮëûĶt—Ũ-'˙§ĒētŸm˙I˙˙Ąõŋŋß˙õûĢīĩ}}ûĢnˇžˇ˙}jū˙ī×ũ˙­˙Úßž­˙Ĩ_úŋJõúũØc˙Ĩ~•ãūžŖõÃQ˙õņûØbŖ˙¯˙ũ{ũcĐ˙ u˙ĮņëįEũ˙"Ŗõú˙‚×uôŋ˛/ú×ūŧųk˙¯ũ˙ŋ˙dSë˙ü/ū?ūÃ˙˙ū@™‹ø˙ũ‡Įüt@Ų{ũđÁ˙ŋüöŋ’‹ũ‡Įúūuaã˙ķ ˙áŋ˙˙đ˟÷āÜŊ|´˙˜d O˙áŋûІ–Ÿ˙ū/ü7Ė3˙áĖĘ˙˙ũ˙˙ú_ūy}yŅūyyÅū_˙ûiž_˙Oú_ųÕ˙į“ū‚ūŋß˙˜Aŋ˙ßũ/ûû˙8ƒ}˙˙zīúįn˙@‹˙˙˙×Ĩ˙žOß˙ú_öũ˙ūß_ÛũŋK0ŋwū÷÷éL/úíßü_˙˙ũpE;˙}˙ũSúZ^Pŋôŋ˙Ō×K×˙(_“ú_žP˛ō…úå ˙_˙É˙üĄųB˙I˙ũÉ×˙å ũ˛u˙í“˙nļŌ˙žū˙n›Û¯˙ÛIÔķn›˙ĻÕēum}öŌ˙oôģÛ¯í´žķöÚ˙}Ĩúí˙ßļ—߯ũutļ×ūŌŌtPū÷I´Ũ-Ŋ%öÖëm&ŌûVŌm+ĻŌûEm}#Ûiö—¤Ú_rC_ŌUm/í&Ō÷‚#ū—÷[kúM¤čĄūũ´Š‚°ÂIļ’ÚiÂ#á +J 5M†má°ÂIļŨöšļ“km„›AZtGI6“a&Õ´›Iԃm$Û][E8iŅ$œ4› ZjÁļ’Ûk ÛIm8D| ƒi]a+[°•ļ’ÛjÃJԃM´­ à K-¸b@Ã%āÁa†ƒ ” ƒ Ã'pÄ †O adˆ Ã*t b˜a’ %Ép0É` ÉÜ{ āŒb`Ŗc —ƒbœ†%āÁxa `†JØdü0‚Á 2^ aŠL2P‚+aŠˆˆˆˆâ""""""""" â"""""""""8ˆˆˆŠ‘ˆˆˆˆˆâ"""""""""""?Ōoé˙˙ũĨôļ×Ļ’a†I B 29˙ųe8rÜFMĖŗ%DWĘŌ;NšÚÎd ‰ēŅĸ%’Üėaä” ŧųäžJ΃'´ĻM0éÍäū‚ĶšaĶĩģūũ4ëīī˙2ôda5˙äé-é˙üvŋ]ϚÚūņki­¯ū"8õę8Ž?Õũ˙˙˙¯˙¯ÕW˙˙ūĒžŖëĘļHÄæOgŲVĪŗlčĖ#ĖÎ3f؜@ŲNō$Fâ#l͝L"XŊ  ģ,2zŠ~C šž\ËA3šĖ´åÜŌ3™C'fC4flÛ:ŗlƒ<û… ”ėž8Ξ†mšĖĄ›ÁžN˛t.“ė˜G™Vyö Ŧ ™Ļk1ËŦļP˜#Yž"< 0ĄđPĄ|… ā0Š€ÁĖ#Öo„{4áđF€Á–PÄė0Ąø_šÄ °Í†YáB4 "<ėÁ‚1áBaà ųÄ(G€Â<v <(eĒÁ ā0…đF€Â„ † ēÃÖ|áA!B4… ŗŗä(@ˆđ#áˆbč Øz´aĐN‚ll4ƒƒƒƒ › 6‚ „tl=ZA†“h&ĐMŌ6 ƒ ›H:A´n’ ¸8t`č-&Â8pÄ Ø:AĐA°pti4Ō ŧ­ Øt › `éta ›Áá8: ŧ ‚l=ZM ›ęÛ•ļoĶuī}6­¤ęÛ“Ū˜zˇ¤Š7¤ēWî­ŋĻÚNė&úŌ^õlUŋô­‡Ķi7n’Ģęßé'ģ­´ŸĨt)=Uôéŋíé]i]÷ēO¤ĩwN’ô˙¤ö?_Ū›¤žéi?ũ=Uͤøëk˙úO˙ũ­ũū˙û˙¯Ũ_}ĢëīŨ[ûuŊõŋûëW÷˙~ŋīũoūÖũõk˙ûũ*˙ÕúW¯×îÃũ+ô¯õõŽú˙¯‹˙ŪÃũ˙ëßë‡øc¯ū?_:/ë˙ų¯×üģ¯Ĩũ‘ÖŋõāĢ˙Čŗ_ũë˙ũø/û"Ÿ_˙á{˙ņ˙ö?˙˙ōĖ_Į˙ė8ū?ãĸËßī†ũø˙ã˙ĩüĖ_ė>?×ķĢ˙˜g˙ ˙˙˙„ ūd˙ŋåëå§üÃ!˙ ˙ŨL3ü´˙˙đážaŸ˙.fP?˙˙č˙˙˙Ō˙ķËëΏķËÎ/đ‚˙üč˙ÛKüō˙úŌ˙ί˙<Ÿôõū˙ü ˙ū˙éßßųÄī˙û××8ƒwú\ī˙˙ūŊ/üō~˙˙Ō˙ˇī˙öúūßíúY…ûûŋ÷ģû˙ŋJa×n˙â˙û˙˙ë‚)ßûī˙ëø"ŸŌŌō…˙Ĩ˙ū–ē^ŋųBüŸŌũō…“˙”/×(_ú˙ūO˙å ˙ĘúO˙îNŋ˙(_퓯˙lŸûuļ—ũ÷÷ûtŪŨūÚN§›tßũ6­ĶĢkīļ—ûĨŪŨmĨ÷Ÿļ×ûí/×oūũ´žũ{˙ëĢĨļŋö–“ĸ‡÷ēMĻémé/ļˇ[i6—Úļ“i]6—Ú({kčÛO´Ŋ&ŌûĒū’Ģii6—ŧôŋēÛ_Ōm'EôíĨL†M´–ĶN(iZPiĒl0“h§ †M°Žī´Õ´›[l$Ú Ķĸ:I´› 6­¤ÚN”i&ÚęÚ)ÃNˆé$á¤ØJĶV ´–Û]ÚKiÂ#áJí´­ à ZŨ„­´–ÛVV”mĨiJYh Â/0ƒ<0 ŒdĄ a„;†! 2xÁ0@Ã$@n ÉP0ƒĻdƒà `Ų(†K†KN⃨A`Ã0ƒ dŧ Ãä 0/0ƒÃ0 2VÃ'ᄠpFa’đ`ƒ P2a’„0É[ TDDDGÄDDDPDŒDDDDGū“K˙˙˙í/ĨļŊ4“ 0‚Nba‘ČČ8ˆ˙Ë(JYF2ė”(@† ÃNm­[Tœkznŋûg™ög™Ö<Ælū(L#ásž ĄAŽ:AĐA”đptƒzßt´ŸŌŊ˙úNũ?˙ˇ_Öī˙ ˙Ĩû"Í~ŋ˙a˙ĮđoūXēüč˙ûŸ—ķˆ7˙í0Ģûī÷ēL¨_î˙å ßĨ¯ĶkjÚØ{]öēûiC‚l#ŽŅ$hãÛãƒm(1ŸA“ˆAĶ2q œC$S""#ˆŽūëá…ņ_í'h â?˙,§[ˆÉš–d¨Šâ™ZGi×;Yˁ‘7Z"tD˛[Œ#<’€AâWŸ#<“ÉAđdö”ÁÁÂiĻ9ŧŸĐZaĶL:vˇßĻ}ũ˙æ^ŒŒ"&ŋü%Ŋ?˙“Ž×ë´Ķ[_Ū-m5ĩņ˙ÄGŊGĮú¯˙ŋ˙˙õ˙õúĒ˙˙˙ÕWÔqũyVɸœÉãŒû*Ųöm„y™ÆlÛ3ˆ)ŪCdˆÜB3¤m™ŗŠ„C‹Ą4e†OBõ/Čt2˙h&sY‚œģšFqŗ(dėÂ(fŒÍ›gVmgŸaĄR“ĮöPÍŗY”3x"ÉÖN…Ō}“ŗķ*Ī>Â!U“Ąs4Íf9u–Ęk7ÂG‚4#Āa #Ā` ĄB<P#YƒcÁÍđāfœ#ĀaĐ2Ę‚=†#Āa ķ@`– 0Ë<(F€ÁBG‚=˜0F<(L#8aA ‚…đG‚nÂ4… ĩX#@aB<ā0ĄĐP0Á—CØaΜ(#d(F€đĄ–`Ö|‚…|1Œ]V‚l: ĐMƒƒ †pppta&ĐA°‚‚ ‡ĢH0ÁŌmÚ ēAÂA°tiH6‚ ŌAˇ‚l¤ØA„H:6‚m&šA7ƒĩ¤‚t`Ãa ƒ .’ 4`ø<'A7ƒ´Mƒƒ‡ĢI´}[aŌļÍúnŊīĻÕ´[aŌ{ĶVô•&ũŌŌ´—JũÕˇôÛIŨ„ßZKۭЎū•°ãzm&īíŌOõ}[ũ$÷aÕļ“ôŽ…'Ēž7ũŊ+­+ĄŪ÷Iô–ŽīéŌ^ŸôžĮëûĶt—Ũ-'˙§ĒētŸm˙I˙˙Ąõŋŋß˙õûĢīĩ}}ûĢnˇžˇ˙}jū˙ī×ũ˙­˙Úßž­˙Ĩ_úŋJõúũØc˙Ĩ~•ãūžŖõÃQ˙õņûØbŖ˙¯˙ũ{ũcĐ˙ u˙ĮņëįEũ˙"Ŗõú˙‚×uôŋ˛/ú×ūŧųk˙¯ũ˙ŋ˙dSë˙ü/ū?ūÃ˙˙ū@™‹ø˙ũ‡Įüt@Ų{ũđÁ˙ŋüöŋ’‹ũ‡Įúūuaã˙ķ ˙áŋ˙˙đ˟÷āÜŊ|´˙˜d O˙áŋûІ–Ÿ˙ū/ü7Ė3˙áĖĘ˙˙ũ˙˙ú_ūy}yŅūyyÅū_˙ûiž_˙Oú_ųÕ˙į“ū‚ūŋß˙˜Aŋ˙ßũ/ûû˙8ƒ}˙˙zīúįn˙@‹˙˙˙×Ĩ˙žOß˙ú_öũ˙ūß_ÛũŋK0ŋwū÷÷éL/úíßü_˙˙ũpE;˙}˙ũSúZ^Pŋôŋ˙Ō×K×˙(_“ú_žP˛ō…úå ˙_˙É˙üĄųB˙I˙ũÉ×˙å ũ˛u˙í“˙nļŌ˙žū˙n›Û¯˙ÛIÔķn›˙ĻÕēum}öŌ˙oôģÛ¯í´žķöÚ˙}Ĩúí˙ßļ—߯ũutļ×ūŌŌtPū÷I´Ũ-Ŋ%öÖëm&ŌûVŌm+ĻŌûEm}#Ûiö—¤Ú_rC_ŌUm/í&Ō÷‚#ū—÷[kúM¤čĄūũ´Š‚°ÂIļ’ÚiÂ#á +J 5M†má°ÂIļŨöšļ“km„›AZtGI6“a&Õ´›Iԃm$Û][E8iŅ$œ4› ZjÁļ’Ûk ÛIm8D| ƒi]a+[°•ļ’ÛjÃJԃM´­ à K-¸b@Ã%āÁa†ƒ ” ƒ Ã'pÄ †O adˆ Ã*t b˜a’ %Ép0É` ÉÜ{ āŒb`Ŗc —ƒbœ†%āÁxa `†JØdü0‚Á 2^ aŠL2P‚+aŠˆˆˆˆâ""""""""" â"""""""""8ˆˆˆŠ‘ˆˆˆˆˆâ"""""""""""?Ōoé˙˙ũĨôļ×Ļ’a†I B 29˙ųe K(Æ]’„d+ 4ͤiđ“mzâ5Ŋ7_ũŗĖû3‰ĖëGã6Hd™—Dė‡2†HdėÛøPĄ0…Ė"ú‚…h #äđĶaà ĐP× č Ęx8:A´¤Øbl Ø: ŊoēZOéZŊļÂoJīß˙¤īĶ˙÷Ķī˙í×õģ˙}nģ˙Ã˙†#÷˙ôŋdY¯×dZ˙¯˙ũ‡˙ ‡ßīū ˙Ëa˙-?Ũ~tųh/˙î~_Î ßū@“Ĩë˙´¯īŋß0ēßî“*ûŋųBŋ˙ō…öũ-~›[V×˙ŌÛ_°öģíuöŌēĐ"?Ú[iw Z °Ž8kDtaŖl#Ž ´Ŧ+iZTGI&ÚIŦĪ ÉÄ é„8†N!’.ÁJŪÂ0Éx`Ë)ÄDDG˙uü0ŋŠ˙ö“NĐA„Dü´LˇEŒÉc;'"ĨŖ#Y<2%’Üė!#˛Ėĩ#…-4ÃƒĻš`é„\Îđāũ7ôĐLoöŗ$#!4D—ūŅBIüĒ.ׯ´Ķ[ZOëĮ˙U_˙ŽŋĨ˙˙˙ß˙ǝĒ_¯ÕW×ũyPe ÄPÉŲļg8͛gFag؜qŸdLÍg’ Ą˜‰†tŗ6uaåečLƒYzŊIų ‚æCų~Yœ¸1‚Ķ—s6g2†NĖ"s4fqÆufŲHķ8"J'›>Íäė§dÄlÍGä†NͰˆT ¸)á^\ĖAlĄ0a…@‹ā…đE@a0Ą|… #ĀaöF˛žė0¨|#Ų§đG€ÂbYh#F€ÁB<Ųˆ#YüŊ–xP Eđf  ÎPGČFŗä(G€Â<v#eˆPĄBÃöb „Â3† ?Œ(G€Ã/C@`@ŒxPP¸H6’iÁĐM„› 6Ō: ĐM„ƒh' ÁŌM ÃI´h&éA:MÂtaÛ › āáÃI4› āáˆA°tƒ ›‚tšh ˜x}AÃĨ¤iÃh&ü ˜`č&ŨÜ'A6 āč&úMÛĨwĶoMÖû7I´&íĶۘzO¤Š6ôÚēN’zOž“ÛĻÚO°›ëI=‡jؤûū÷§Ĩl&ÕŋIũõm]&=ŌW>ßĶiŋÕ]ZŊ^;ŪëzZO­ūˇ˙xũznŋZ_˙Žôũ¤˙ŨŪ“úŋ­õn–ëū˙˙VŌÕējúÕ˙[˙WJĩŌęĩÕ¯ũ/÷ũĢ[ßŋK˙ŋ¯Õ˙˙˙ģ ¯˙ņ˙¯Įū׏_ûâ˙÷°Æ‡˙ß˙číŪŊxbŋ×Či}~ŋäT×õđZīŊ{­‘ß˙‚¯˙"Ī˙˙˙āĢũ˙ÖČŋ˙ŋ˙˙†˙õ˙"lÅü~ŋ°ã^?Đō&Ëßī†ũô?ō3üÔĖQīĄ˙ŋũōĶ˙đß˙ß÷„ ūd˙ü76žd˙–ž'˙đßũÔ´˙nŋ,WĖ3ËOų„?ų™@˙¯˙ōC˙ú­/˙<ˇüę÷Î/<Ŋđ‚˙üč˙ÛI˙˙Ō˙ũ˙8˛­ß˙˙˙ü ˙˙˙Ĩ˙ûõį“˙˙ūģūšÄ˙@‹ŸųÍ˙Ōũo˙û:§˙úŋŋūļ˙ûūū–a˙˙ŋ˙˙ôĻũv÷ū?ũĨúXE?§˙ũ÷_ú^Pŋú˙˙IŋK×ũ˛ō„˙ûdûdëÛ'˙Û'_ú˙û“¯öÉ×ôÚëëå ō…퓯üĄûd˙Vũĩ˙Ōŋ_Ûõo˙˙§SĶiZ_Z˙Nē˙ûĨŪßũ˙ųų´Ÿ˙mt›K˙ũ´¯m{ëĢimĨßÚZ]ūÚMĢimé/ļ•Õļ­¤ŊĶi6—ļ•×mĨčÛO´Ŋ-/ä)†—ˇØm+EÛŌm+IĩöŌ˙mn›Ũ=´Ē 6‚M´“TֈúPŌl#ŽÚm ›Gh$ÛîûMC $Úí¤JͰa„˜i6a„›VÂ8á°ÂIļēļŠpîˆé$á¤a+[`Øa+]-ƒĨm„w{iQ$ÚKl0•ĻÚMĨa&Â8ûJ 0ÂPC •†Kà  (#8„ a*‰B •†O ab˜xdƒ0ƒ‚0AŠL0aŠa†N Éø0É` ÉÜ{ āŒdü0‚ 2~A†ˆL”A ž0ɰƒ%āÁ Ÿ†aƒ —‚0A“ˆdĄ*"""#ˆˆˆˆˆˆˆˆˆˆƒˆˆˆˆˆˆˆˆˆˆâ"""("F"""""#ˆˆˆˆˆˆâ#ũ&˙˙˙˙ū—iö×餘a„i ƒ s0Â""#˙ōĖ­år’R'ÎÅŅ‘žvY™ N)ŲfKįcōĘĩ™'#„W™‘Â4D ˛4Gb3ĩdvPD/"KÉFLČÖDȍ0āáÃƒĻ˜pš`āéĻ `“>ûžšoîúo[ģ§üĒ,ėŠ{M/;Åū×˙´P­zëí5í+^ĶMĶ_ĩĮ˙ņĮņüW˙˙ūë˙˙˙˙ē˙úëë¯ëúũuõ×Û¯ÖYjg‘æfΞs.ŠÄ}™˛ƒ$ãfj?$2vm„B ™ÁH/ ōæb Hk,9C)ŲŅ“Æâv .\‚Ãæq “Áūi–A8™ÆlÛ#l"ËAz˙ce܆e Û:™Đōƒ5™Ŗ3Ž2ˆü Čq¸ķ3ŒŲ;0ŗo(2qšžgC˛ŒB… ō#(F€ÂaÃĐ„Æ#Āa—Ą 0FČ F<((@Œ@Ąā† ˆ 0Ą#Ā†9e&Č#YŅÂ`‚`ĖxPe<(P‚4g„{4áđ@ŒxG°Â„x #@aÎŽė0gČP„Á ĢPa‚„ ŲÁÃÂ=†#Ā`gfUiSÁàœ$%‚l16‚o †‚mĐMÂtj‚laŊ&ĐA´ƒaęŌmá: ‡áĐA°ø8: à›H6āé:M › á Ø: ´h&ôƒ Ø8t‡Iļé ÃA`āāđž(7¤aĐN‚¤ûęč(÷VØMĢ~“ûęÚēL{¤í7Ûi*VÃĢoWIŋt•˙IßŨ+ô÷Ļ“¤ßēļ’}ēIė;{o[w˙ÕéžŨ‡jīŌ˙ũũ'í'ūîôŸÕũoŋŌéčõoôŋ}_ģ§ũīzęîŌuõĩú˙z[ąßúŊn´ŋĢ˙z_÷ŋ~—˙_Ģī˙­˙ũ˙ú_ë~ÕõĢĢÚĩž­ũī˙˙{ūŋëūīëöŋī^ŧ1_ëü|†+ã˙ũã˙˙Zô8ô?ãę?ü1ßë˙ūČŋūŋ¯˙úŲ˙÷ŪWÂė‹÷ũ˙õüģ]¯Áđ­Đ/û"“ø/˙×ũ‡˙ņúņ°ëø˙'aøķ̰˙˙ũãō†b˙˙ãō†b˙ÉØ:3~ÃüĄ˜ŋ˙˙†˙æķ ōĶūaūaO„ËO/ ˙˙˙˙-?˙÷ķUÂ˙áē„ ˙ ū/˙īūu˙ū˙œYVī˙ôú Î"V˙˙ũ˙üâŌ˙ūŋôŋũŨ%˙_é˙˙Ī'ī[˙ūΊ˙ū´ˇôŋ"Iõũüį˙˙ú_ī˙ßĨ˙ézĨ˙žOú_˙œ˙ū˙īĶ˙ūûŋ¯˙˜[ūa~ũ˙˙ûū–aīûŪ¸"˙ų„Å.aīúæ˙öũ{íuĘå Û'_ųB˙öÉũō…”/˙ö˙ō…õí˙å ũõŌüĄ9:˙ru˙˙˙˙éû×W˙}öŌŌm/˙öŌŊĩīŽŋÛIĩ˙ķõî—íĨũŽŋļŋ˙û{ļ“Žß˙ųË×û[úõũ×ûkhĄũĶkhĄí­¤ÚûiļˇMîŠÚV— Dm[KĐ"?úwW_ļģļŋļ—íé/ļ›i{kĨŧôŋôęĶÁ˙ūęŌŪ˙~ßm÷Jė+h§ēPmĨDt“i-°ÂV›i6•„›ãí(0à Q$­Ĩi6“i&ÚV“iv 0’Úļ’é6ĮÚ8āĶ´ÛI´“l#ģí5máļ‚´ÛH0ÂIa+[VŌ´Ŋ´­$Ķl#ŽÂP‹¤“m+Il6ĮēPÉE’ˆ āŒdîÉD2Dė Éx0Aƒ'á„`Ã%āŒdâ(AŠØA •°ÉKÁ†JØ`ŪÁ! a/ 0a“ˆdĄ a Á„dņ‚`†Nᒠa Ʉ+a“đÂ0ƒ •ˇh2VÁ0ÉÆÁP„ a’ļ0A†aƒŽ""#ˆŽ"""""#ˆŽ"""""""""""""""""""""""""""""""""""#˙˙˙˙ņ˙æU.ŋ­4ĶM:„@ Á”DDG˙å˜ •ÔķLÉ/;3ÎôFCYØĻvąË*ÖdFˆŽ*G‚ ‚/Ŧ7š‘™YÚĄtÃĻ&•ŖMáĶŸtŨô°e}Ũ˙´v ~D’Ō ü—Vļŋiq_kũŽ8¯¤ø˙˙ú}˙ūŋūŊ}×˙¯Ž—¯ë,ĩ3Čķ3gŲ9—E â>ĖŲA#:2Dqšžgŗl͝YDm„CųĻ\Íe˞ ģ,åųtåLFlÛ…A= dæLæŗ !0Ķ,åÁH/BĘâyŸfq¸æ!„CųĻ\Íf.l/ËÔŊ$†H2čüfĘNōC"LčÉ Û5<͙Įöu2xã…ōüš—eĖĖĒcPĄB„|„Į…  0gĄŦķ„x ŦãÂaB<ā0B< Į…đG€Ķ ā0Ą|#ØaB„x 2ô4‚„_B‚>A14… "<ødB=›āˤ((@ˆđP„x đȄÆō #؃cÁ ˆŦßđ@ŒxPĄđF€Â„x 2Ī #ĀaŌ §ƒ‡A8H0JØA6‚a‡A:8pth'A6“x88:M ›ÁĐM‡ôƒ 8: ˇA6“z °tāāéAŌ áÁÁĐZMÛ`ô‚àÚMáÃA88:M„t›AĐA°ta: ĐM ›‚vƒƒƒ › 7I÷ÕĐQî­¤šM°í]ũŌ´éŋۘ{˙n÷ęÚV*Û˙õ¤Š^ûũˇM˙ŋ°ã{oIÕũ6Ō{m%VīIön­°ī~ún—˙īé?ĢuĨ÷zŨû÷¸kõŋ}'ÛIėwĶt–ŸûÛ÷ėj¯ūũ˙¯ŌT¯zúĢIë˙oĢ˙z_ö•Wë˙Ģ˙ũc_ûũß˙îˇ˙˙˙˙ú]˙ZŋīŊj˙ũ˙õú˙†;úø­ũ}}˙˙ū?úūŋû Tü~˙ūąũᏋøę)_˙Öŋ˙˙˙d_˙_ŋ˙˙u˙]˙ø/ũ_ü‹4žD/Âī˙ūöEG\-¯˙_˙×_öük˙˙ņ˙˙˙ųC1ĮĨ~>?ú50˙˙_“°úĘ{Ę˙˙ã˙˙˙áŋų€˙˙˙0Ī˙˙ū/ūdūaŸÃ|ĩ7ū_˙˙„Ëü Oá˙˙˙0Ī˙÷˙:ŋũ˙˙˙˙˙˙ôŋķ‹´ŋķŖũ/Đ_ųå˙č/rĄøA~‚˙˙˙˙<ŋ˙ūy;˙~ŋ˙˙į?˙˙Ō˙û„G+˙8ƒwˇū—˙˙ú_SúīĨßû˙÷˙˙˙ũ˙ßë˙˙˙˙˙ũs ˙t…˙íŨŨķ K˙˙ķ ÷úS üÂv˙˙÷˙˙íú÷Úë”&É͎˙ļO˙_˙˙˙˙å ō…˙ų?”&ë˙˙˙˙˙l_˙ëūOé~ŋųB˙˙úŋûīļ–Ž—ē˙õ˙kųúūŋūÚ[i}­íĶjqļ–ŋũnļŋ˙˙öŋˇūŨ7^ßūÚ_~ŋÛ[Eî›[Em[Jëī˙m%Ûũ}{īŪ˙~Ú˛íô›I´ļKŋ@ˆ˙iw_˙ DÛJëôm§ Dm'KļĶ˙mKžûh§ēPwa[E=ԃm&A†[ „qÁ­§a†´ô›ヴ×M[㆚mĨi&šļ“i0ÛI4Ûテ“a&Ōà 6Į 6Ō´ĄI&ÚļĮšÚmĨi&à XVÂ8āÛ][E8mĨi6a„“VŅN­ĻÚKmĢapĶTᒋ%AÁ ÉŨ’ˆdŒ B à 0A„ ÃA† 2q Ál Á œB 0É[A‚0ÉPØÃ%ĀÂ8Á0ÅHč18‚+t ‚6dâ@Áa’ļ`Éø#8†KNá’ļ Ä ƒ 2w@Áa’đ`ƒ Pdâ`„qDDDDDDDDDDDDDDDDDD DˆDDDDDDDDDDDDDDDDDDDDDDDDDDDDDŋËu”•˙ëûT›Jši0Á(A„ "#˙ōʕË*ÁŽ˙ö¸˙ü˛Ą›dˆÍį8GœmY ˜ĄB< k ā0f/Á†ÃÃA„“i6’zo÷­é´ÛˇĶŋëßøûũēūēī˙ū/˙÷KŦ÷ũ˙”2÷˙õü Oúũēü ŋ˙˙ë˙ũ´ŋĨ0ž—˙˙ūû^˙˙!ÛK÷×Đ"=÷„G °Ž84ôí6×TūA“ˆ m a,:â"""""?˙éÂ?˙--Ā‘d#2XÎÉÆ@HŸįihČÁO#L‰dˇ;Fˆė€‡3-HáKA 0āéϘ:a3ŧ8?Mßũ4ũŦÉČM%˙´P’*‹ĩëí4Ö֓úņ˙ÄGW˙ë¯é˙˙÷˙ęĢę—ëõUõ˙^TC12vm™Ä3fŲҘG™öggŲ3Yäƒ(f"a#l͝XD9Yz Ö^…ÁG/R~B šū_–Ag. `´åÜ͙ÆĖĄ“ŗœÍœqYļR<·R‰ÆfĪŗy;)Ų13Qų!“ŗl"Č. AxW—3[(L#ØaP"ø#@aB<PL(G€Á!B…đG€Â=†Ŧ§„{ *_öiÂ<ā0–ZÄ 0P‚6BbÖ/@F ež F0¨|#؃c„Â3†ōŦų ā0Ũ„Į„Á™b(P0Â=˜ƒ@a0Œá„hÂc ā0ËĐĐ#d# F. ƒ¤šA°ta&à ´ƒ‡‚ta Ú ÂA°t“H0ÁŌmÚ ēAĐA†“pØA6č&č88A0ÁŌM&Â88bl č&Áà&š&PpāéiA°Ä Ú ŋ&: ˇA7 ĐM¨8: ž“vé]ôÛĶužÃŌm'Iģt÷Ļ“é*MŊ6Ž“¤ž“ī¤öéļ“ė&úŌOaÚļ)>˙Ŋéé[ ĩoŌ}[WItŸÕãOˇôÚoõWV¯WŽ÷ēŪ–“ßë­˙Ū?_Ū›¯Ö—ß˙ãŊ?i?÷w¤ū¯ë}[Ĩē˙ŋ˙Õ´ĩnšžĩÖ˙ÕŌ­_ôē­_ßõk˙Kũ˙jÖ÷īŌ˙īëõ˙˙îÃë˙üëņ˙†5ã×ūøŋũė1Ą˙÷˙úû_÷¯^¯õō__¯ųõũ|ģī^ëd_ß÷˙āĢ˙Čŗ˙˙˙ø*˙_˙õ˛/˙ī˙Į˙áƒ˙ũț1¯ė8׏ô<‰˛÷ûáƒ˙}üŒ˙53{ĮčÆÃ¯ã˙|´˙ü7˙÷ũá˙™?˙ ͯ™?姄 ˙ü7˙u-?Û¯ÂËķ ōĶūaūfP?ë˙ü˙ūŸëK˙Ī-˙:Ŋķ‹Ī/| ŋ˙:?öŌ˙ôŋ˙Î,Ģw˙˙˙˙0ƒ˙˙éūũyä˙˙˙Ž˙Žq˙Đ"įūsôŋ[˙ūΊ˙ū¯ī˙­ŋū˙ŋĨ˜_˙˙ī˙˙ũ)…˙]Ŋ˙˙i~–Oé˙˙}ß×ū—”/ūŋ˙ŌoŌõ˙lŸüĄ?ūŲ>Ų:öÉ˙öÉ×ūŋūäëũ˛uũ6ēúųBüĄ{dë˙(_ūŲ?Õŋmô¯×öũ[˙˙éÔôÚV—ßÖŋĶŽŋūßéwˇ˙ū~m'˙Û]&Ō˙˙m+Û^úęÚ[iwö–—ļ“jÚ[zKíĨumĢi/tÚMĨíĨuÛizGļĶí/KKų aĨíöJŅCöô›JŌm}´ŋÛ[Ļ÷Em*‚M “m$Õ5ĸ>”4›ã†ļ›h&ŅĮÚ 6Â;žĶPà 6ģiŌ´ė$a&M¤a&Õ°Ž8l0’mŽ­ĸœ;ĸ:I8iJÖØ6J×K`ÁéAÛaŪÚTGI6’Û %iļ“iXI°Ž>ԃ 0”Ã%@a’đÁ0ƒÃ Á†N!A†JĸPƒ%@a“ÆA‚Ļ Â āŒb“ b˜a“ˆ2~ 2X(2wÂ8#? `ƒFÆ Ÿ†aƒ b%@Ã'Œ2F, Éx0Aƒ'á„`Ã%āŒdâ(AŠˆˆˆˆâ""""""""" â"""""""""8ˆˆˆŠ‘ˆˆˆˆˆˆâ"""""8ˆ˙Iŋ˙˙˙˙ĨÚ_ũĩúi&ašpƒH Ã#\Ė0ƒˆˆˆ˙ųfV‰ōšÉ)įbčČĪ;,Ė‹…'ėŗ%ķąųeZĖ“‘Â+ˌ‰Há"ŠŲ#ąÚ˛;("‘%äŖ&dk"dFŠ˜ppáÁĶL8M0ptĶ0I‡Ÿ}ßM7÷}7­ŨĶūUvTŊϊâ˙k˙Ú(VŊuöšö•¯iĻé¯Úã˙øŠãˆøū+˙˙˙u˙˙˙˙Ũũuõ×õũ~ēúëí×ë,ĩ3Čķ3gŲ9—E â>ĖŲA’qŗ5’;6Â!PL‚⤅ys1¤5–Ą”ėčÉãq;…. Aaķ8†Éāˆ4Ë œLã6m‘ļ å Ŋ eĖą˛îC2†mLčyAšĖŅ™ĮDH~Pd8Üy™Æl˜Yˇ”8ÍO3‚!ŲFÆĄB…ų #@a0Œá„hÂc ā0ËĐĐ#d# F PđGÃÄĐPāGÃ˛“dŦčá0@ŒA0f<(F˛ž(G€Á ŗÂ=šp„x F<#ØaB< 0gWöFŗä(G€Â`†U¨G°ÁBG‚‚…lāaáà ā0Fŗ ƒ3*´ƒ)āáÁĐN ƒ‡A6„A7áÃA6č&á: ĩA6 0Ū“h ÚA°õi6đÃđč Ø|áÁĐM¤ptƒ &ĐM„plÚ ´zA†‚l: äÛtaƒ °ppxOŌ 0č'AŌ}õt{Ģl&ÕŋIũõm]&=Ōv›í´•+aՎ̤ßēJ˙¤īî•ú{ĶIŌoŨ[I>Ũ$öŊˇ­ģ˙ęôßnÃĩwéūū“ö“˙wzOęūˇßétô?úˇú_ž¯ŨĶū÷Ŋuwi:úÚũŊ-Øīũ^ˇZ_Õ˙Ŋ/ûßŋK˙ŋ¯Õ÷˙Ö˙ūŋ˙ũ/õŋjúÕÕŋíZßVŋū÷˙˙Ŋ˙_õ˙ wõû_÷¯^¯õū>?Ãŋņ˙ūŋņ˙˙­zzņõūīõ˙˙d_˙_×˙ũl‹˙ûī ĢávEûūŋ˙úū ]Žŋ×āŋøVčũ‘Iü˙ëūÃ˙xũøØuü“°üyՇØ˙ūŋņųC1˙ņųC1äė?ŠŋaūPĖ_˙˙Ãķ y†yi˙0‡˙0§Â 姄†˙˙˙˙–Ÿ„ ˙ûųĒá˙đ‚ŨB˙†˙˙÷˙:ŋ˙˙Î,Ģw˙ú ũį+˙ū˙ūqi˙_ú_ū‚î’˙ίôŋ˙˙į“ŋ÷­˙˙gT˙˙Z[ú_‘$úūūs˙˙ũ/÷˙īŌ˙ôŊR˙Ī'ũ/˙Î˙÷é˙˙}ß×˙Ė-˙0ŋ~ŋ˙˙ũ˙K0ŋ÷ũī\N˙üÂb—0ŋ÷ũs ˙û~Ŋöēå ō…퓯üĄûdūŋųBĘ˙ûųBúö˙ō…ūŋúé~Pœš:˙˙˙˙ôŋũŋëĢ˙žûii6—˙ûi^Ú÷×_í¤Ú˙ųú÷KöŌū×_Û_˙ũŊŋÛIŋ×o˙üåëũ­ũzūëũĩ´Pūéĩ´PöÖŌm}´ŋÛ[Ļ÷Em+KĐ"?ļ­Ĩčũ;̝Û]ŋÛ_ÛKöô—ÛM´ŊĩŌŪú_úGõiāˆ˙˙uioG˙ŋoļŠ{Ĩv´SŨ(6Ōĸ:I´–Øa+M´›JÂM„qö”a„¨Ž’VŌ´›I´“m+I´ģ Im[It›ãƒmpiÚm¤ÚIļŨöšļŠpÛAZm¤a$ÛJŌ 0•­ĢiZ^ÚV’iļĮa(EŌIļãƒ](dĸÉDpF2wdĸ"vdŧ Á“đ 0a’đF2q ” Ål †JØdˆ%āÃ%l0o`ƒ‚0ƒ —†0ÉÄ2P0ƒ ` 2xÁ0@Ã'pÉP0ƒ d •°ÉøaA†JÛ´+`„dã`¨B0É[ à 0ÁĮÄGÄG˙˙˙˙ø˙ķ*—_֚iĻB a`ƒJ""#˙ōĖĘęyĻd—™įz#!ŦėS;Xå•k2 #DW#„AAÎÖ›ÎÍHˆĖŦŽÆˆíP:aĶJŅĻđé‡OēnúXH2‡žî˙Ú;ŋ"IiūNŋÎËĢ[_´¸¯ĩū×WĮŌ|Į˙ũ>ŋ˙˙_˙^žŋë˙××K×õ–Z™äy™ŗėœËĸ†qfl Č"8ÍO3ŒŲļfÎŦĸ6Â!üĶ.f˛æYP]–rüērƒm„B ž†˛s&sY†˜i–rā¤Ąeq<Īŗ8ÜNķ Â!üĶ.fŗ6åę^’C$t~3e §y!‘&td†mšžfĖãŒû:™Bc…ĐFŗĐÖyÂ<Öqá0Ąđ@Œ@Ąc‚„x #Āi…đPžė0ĄB<zƊˆF€ÁBGƒ/ĄA …|2!ÍđeŌ Dx(G€Â<ødBcų ėÁ‚1ā†HÄÖo„x F<(P„x #@aB<g… ā0Š€éSÁàœ$%‚l ›A0à8: ´ ›Iŧ&ĐMāč&ÃúA†Û ›IŊØ: pptƒ ƒiđāāč-&í°zAaĐN‚m&đ‚a œ&Â:M ƒh Ø: °‚č&ĐM‡A;AÁÁĐM„›¤ûęč(÷VŌM&ØvŽūéZNôßīL?Ŋ˙ˇ{õm+m˙úŌT¯}ūÛĻ˙ߨqŊˇ¤ęū›i=ļ’Ģw¤û7VØwŋ}7K˙÷ôŸÕēŌûŊnũûÜ5ŋúßž“í¤ö;éēKOũíûö5W˙~˙×é*WŊ}U¤õ˙ˇÕ˙Ŋ/ûJĢõ˙Õ˙ūą¯ũūŋŋī˙÷[˙˙˙˙ũ.˙­_÷Ūĩū˙úũÃũ|Vūžžŋ˙˙˙ũ_ũ†*?ū?˙XūđĮÅüu¯˙ë_˙˙˙˛/˙¯ß˙˙ē˙Ž˙üūŋ¯ūEš_"áw˙˙ û"Ŗ‚Žŋ×˙¯˙ë¯ûū5˙˙ø˙˙˙üĄ˜ŋãŌŽŋ ũ˜˙¯ÉØ} ‡å Ŋå ?˙˙ņ˙˙˙đßüĀ˙˙˜g˙˙˙˙20ĪážZ›˙/˙˙ åŒ~'đ‚˙˙˙˜g˙û˙_ū˙˙˙˙˙˙ú_ųÅÚ_ųŅū—č/üō˙ôšPü ŋA˙˙˙ž_˙˙<˙ŋ_˙˙ķŸ˙˙éũÂ#•˙œAģÛ˙K˙˙ũ/ΊũwŌīũ˙û˙˙˙ū˙īõ˙˙˙˙˙ūš…˙ēB˙öîîŋų…Ĩ˙˙ų…ûũ)…ūa;˙û˙˙öũ{íuĘdéŋÛ˙Û'˙¯˙˙˙˙ō…yB˙üŸĘu˙˙˙˙˙ļN¯˙õ˙'ôŋ_üĄ˙ũ_ũ÷ÛKWKŨú˙ĩüÎũ_˙m-´žÖöéĩ8ÛK_ūˇ[_˙˙û_Û˙n›¯o˙m/ŋ_í­ĸ‡÷M­ĸ‡ļ­Ĩu÷˙ļ’íūžŊ÷īG˙ŋmY vŋúM¤Ú[ %ß D´ģ¯˙Đ"?íĨuúGļĶĐ"?ļ“ĨÛi˙ļŋĨß}´SŨ(;°­ĸžéAļ“ Ã -†Â8āÖĶ°Ã ZzM„qÁÚkĻ­„qÃM6Ō´“M[I´˜m¤šm„qÁÃI°“iaƒ›㆛iZP‹¤“m[ãƒMm6Ō´“a„Ŧ+apmŽ­ĸœ6Ō´› 0ÂIĢh§ÖĶm%ļÕ°Ž8iĒpÉE’ˆ āŒdîÉD2F †! a…„  aŠ Ã8‚`ļ`†N!d­‚ Á d¨la’āa œ`Œbƒ$t‚ œA •ēA 2q `ƒ0É[0dü‚ œC%‚ƒ'pÉ[ PbA‚;‚ `ƒ0Éx0A†(2q0@Â8ˆˆŽ"""""""""""""""""""D"""""""""""""""""""""""""""""?ßåēĘJ˙õũŋĒMĨM4˜`” ƒ˙ųeJˊ2Ë*ÁŦÉȓ(:aÁīģ˙û_Į˙˙˙ūYPͲDfķ‚#ŒÎ6ÎŦ†ĖD#0‰Ė§yCÉ †Ė(P‚…Ú‚„x #Ų§@‹ā‚5œxGŗˆķ  8:M¤Ø:I¤h é‚m úo÷­é´Ûˇ­&ÕĶôžŊ;ūŊ˙Šn“Ĩī­Ļū˙nŋŽŊmv¯Wū˙˙âû ~ąúØc˙Ũ.°^EžüîEb˙å Ŋ† (f.0Á˙ũáŋđ|¯ۯ ȓŌü¨˙˙_*o¯KķĒ ˙öŌū”Âí˙ŌĖ/ˇé˙˙ûíúûd˙īĩī˙ûí'_ū¯8ö—D{ô›JöôļŌŌđˆøA6ĮžĻÚęœ4ƒiÂ8āÛîôà % /†dâAA†KÁ†aa“Æb Œ\DDDDDDDDDDD˙Ķ„ūZ& –˜–v>vS™ƒ,ĶLíYD|°Aãąųh!š4ÃĻ4ŸotßKûgkhŽ–ŒŽŽÔ#ĩíBöģ)kk#Kē˙ímk¨ĩûõ_yCüW˙ęŋˇ˙õ˙õ×ūēǝ×ëõUU_V×^‘øÜNÍlgFNͰˆP†˛æ^ĨÖ^ĨčY˲õ/RnR˛Ō¤AŦČ/ ōü˛ 9v\Čreč]—BæC“/Bėē2™zeĐšāÍfâÎ\ÅĖĮ&\J ›d‹6Ę›4:Ό͒D*  ģ8‚…œš–‚ėŧ- ‡eáBG @#GÂæÆ#Āa–Žā0‚>€F @ŒA1…đ#áŽ|„{12ô5Ÿá#đĄBc ā0fcđMØ@Œ@ĖÆ"æcˆ`@Œa.f0–Ž"<˛#áa gėĶ„x '‚=†(GÂÂŽ( F ËĐĐP0Á™ŒaB„š˜Â„{2 ƝH=ZM ›H8A0ÁĐM¸:M ›I´h ØA0ÁĐM¤Ú Ō 6L0t‚mCƒ„ ŪL4šiŪL4jMĐA0ĐAĒA7AęÁá88:AĐAŌ 0a°ÃÅÁäl:6Ō0ÁŌđ‚aƒ‡A¨&ū‚aÕļ“Ĩ¤ūûĶļŌt•'÷ļÕĶô›IôŸßIÕąIôlR}'[ŸaÖ¯ēZē}6ôŪéuî’é7~“îļ:mø…CëŨß{úÚ_wûęŨŠŋ÷wö–ˇ÷ZßŨk}˙é{Ķõûú^“ã÷õ˙å„úŊē_ũ~¯é÷ĩ}}~—ú_ĢéjÚž–­Ģ˙˙nģWßßÛ­˙ë~—ęß_ņë†;×ū=xīXđÄ}o_÷¯ßë÷úũūŋáÃĮßßፏõī˙‹˙ Û"Ī˙]…í²(ßß˙˙˙û˙Kŋôģũ‘OŲ'˙ũ‘T‡ë÷˙úX/ķĢ ˙ÉØxô?'aØd›1UúčoĮĄˇĮĄˇĮûØ~PĖ]˙ė4sŋõũÛō†^ū\´˙ü šĩËO „ ˙˙–Ÿōëu2|´ú™>Z}LŸáŋü _˙āŨ˙ōĶ÷Ŧ OũåCÎ/Đ_ŋ ŗĢKĪ/ī÷ũÛKŪŌķÉí/<ŧęüęũ/¯üč÷˙<Ÿ÷ûK/ú^uAŋ˙ôŊ˙K</õ˙˙Îz\üį EËũ._ųäūyũ/˙ķˆ6ˇīũčr×ÎđE>˙˙˙S˙ü-ŌĖ/ë˙˙üņ˙÷Ö˙K0ŋ˙žŋ˙˙üzS ˙ûdū퓯˙˙lŸĘdë˙ŋ_Û˙öÉ×ôŲ:Û'úlm“ūŲ:Û'˙˙÷o×Ōôĩß}r…īûdë_˙¯˙×_˙˙ũ6—˙˙ũî–Úë˙˙}ßNŋ}:ũũôëũ˙Oôy­žÚWÚ_īß˙˙@ˆūÚV­Ĩūŋ Dm&Õ´ŋ@ˆ˙tŪ–•ÖßÛi{{iHS´›ÛI´i]6“!hŌēû§EĩŊŊ+K´­>×^ŅCÛ]&ŌöŌ´PöBŸ D{oĻ›iZA†ĸ:I†´ÛJĶVŌ´ƒ $ÚL0•ĻÚV•…l#ģÛPà &ØGØG6JĶŌa„˜0à i0ÂPà $Ú°ÂPà $Ú§v´ čŽ’ „qÁļŨđˆøA,"é'Jˆé-4Ũ(6ŌmCiZl0“Ĩ 6×]( a •°ÅS? ÃA‚+aŠ dü0ƒ •¸#YBŗŗ<ėŦˆš‘Dąˆä4mf[§"hŠĻ4Âa4ÎÅŲŖ ˙˙ ģōĘ6ŧīDūNŠÚüīŲYŲRūĶKí{M4­m˙ĩÄ}˙˙ë×õ_˙ú˙¯ŽŊWÕW×^YjažZ ģ.e—…ys4Ë9pQ2dY Žr:ŧÛ(a§&°šĄ dĐk73a~Y97(!Ļ]–6\Č_-†]—2Ôų;$Fāˆs–]– ÍfC3Fo'aæ К ˛æZ …ųuœģŲ0ĖGâs'ŒŲ;0ŠFqfq!ŲļgA ŗÂ=šp„x #(#ä#@`Ë„TėȂ=†2Ã=†#Āa–M„g (@ˆđPĄđPĄB<ĐežėĶ„x #Āz@fø@ˆđ3|2ˆG€đa„k= … #ؐX#G°Â„x #ĀaB<ā0FŗĮ‚5˜%/…ø\B‚>Bc‚‚>p„TH6Đ:Mƒ ›A: ĩH: ¸NøI´›Š ƒ´a‡A;AˆA°õ`áĐN‚l: à›H6āé6‚múH ØzŊ&Á†Ūa ›A6–aŌ6 ƒ ›A8t ›AÂ:6’aԐp`”&ÁĐM„›Ĩ~›~éZL{õĢjüSiˇMũģöl:ØqģĢŋēWéˇî•č%m‡]ˇMöé&­ŪŸ¤Š7ãum'VíŨ/ëAGŊˇ}7§˙ģÕ˙MŌëúŋ[¯î‡Ēŋûēûž)+Ąū›Ö×IņßIjîúĢJëJņũôßũžˇõ˙_˙ß˙_~˙û˙ũ˙­ũËū÷ÕŽö¯Ũ[˙ũÕ÷Žßũ/ūŋū/^ŋė1^ū/ŋ˙×Ãŋņzũ+ņ÷ĮĄ^‡Ô~ŋ­+ô¯á°Įúū ˙˙"¨["ŸX/ø/˙˙ėŠ“ëø/˙ø_Ázđ^—˙˙_ũ‘QäUÂõãō†^ūŋÃō†^˙53û˙ûøüĄ—ŋ˙ÎŦ?å ÅĮš™‹˙˙˙˙Ø~?ō†ü´ü O˙ū˜Cü Oū/˙˙đßōĶđ?˙øA„ æOũ˙˙˙ø7áŋđ‚˙ųå„ũ˙Uŧâđ‚˙Ī$ŋĪ/˙ķĢ˙Î, ŋ˙ôú_éyåõ˙˙˙įWįGū‚˙˙¯˙ūqėęŸũũ/˙_˙<Ÿ˙õ˙˙ÎiĨ÷Ĩũ˙˙û˙įoÎ Ûū—ũ˙Ĩ0ŋ^Ũ÷˙Ĩ0ŋõĖ/ūŋ˙ßúS ũŋ˙0ĩ×SˇŌĖ/w˙ũŋÛū˙ˇũ|Â˙”/˙˙˙üĄ˙ú_˙˙˙˙ųB˙˙ũ/¯ú˙ru”/_ōK˙ôĩŌũ˙í˙í­˙˙ļŊ÷ļ•˙˙õ߯÷é˙ūÚ˙˙æ–Ũū—ŽŪÚ_î­Ķ˙ˇMí×õk{ũ˙ũ´´Ŋ#ßíîŠé6ˇ^žîŌôž˙Ĩiũ×íĨūīõŨ-ŋ@ˆ˙ioGũ&×oJ鴛K˙Ũ&Ķtž×ô›WEĐ"?÷ÛIĩMĩÖĶļÂ8ûJ 8i6•„›JĶmu„]%mĢiZKm­ŌIÚÚiØTí6Ōm$Û]m;Ķa„“Ōm+JˆúIa&ŌļÂ;Ŋĩl$Ú Ķĩ´Øa&ŅN $štGI6Į &ŅO´ ÛJŌMS†H1A,0ƒdâ(A`Ã%āŒ`Á0É`Ē‚bƒ%l `ƒ V Â0ƒ‚  2Aƒ0É` A„ Ü0Ä † 2Vđ 2VÃ&.G~Gj¤pŠæáüŒķ%„di‘%,ШĻ88tĶM>Ú~ûī§§ÛkÎÁ¯ō¨Ŋ­ĸ…Ûk˙õÚiĻŋ¯˙ˆˆ˙˙˙×˙˙˙Ōõ˙]ëūēË-FPĖGãlęČlÄPČÛ$FãĖÛ:˛1=#K6Íl›f§™ŗ6}›fl"äŅĖŲöNeŅ0fŒÎ3f"vk2’6fŖōC'fØD* \‚đ¯.f ąĸzO˛ygŲC:FŲ›"FPĖEi6NĖEC2eŅæfÉŲ„NfŒÎ6ÉD;(Āa…@‹āĄöiĐ"ø#@`fø@ˆđP„{4č| < ‚xG€Á ā0Fŗ (G€Â< ÚđĄB>B5Ÿ ĄP"øGŗh &œ0ø@ŒaB<zl‚c‚„Äė<( ‹ę(GŗNā0„{ *_Ö|a1…@‹áÃøXCä(PGČFŗä#Ā0˜2ŲTƒ`é&“i6’iĐA°õ`č&Ōl$Ō Ä đà Ø: ´ƒƒ‡A6‚}߇A: °ppt“I´aˆA´~L0tn‚n ›Ppti‚ §‡H0ÁŌmØH6’aØp‚aƒ¤˜H6tƒ‡H: °pa†ÃÕ&íŪ›Mģt­[a×ēmÛĨs7ĻŌģŌ}ũŌŊ[÷ÕŌO{tÛVØMĢ~“ûęÚēL{¤öū“žžôÃŌnŨ$Ũ'ˇI´ĩ}ëI=ĻßÕããN•ĐŨū4ûޟtŋģôŸ˙×ü}'í'ūîôŸÕũmoŌŪ÷ĢĮūņĢ˙ôŨŋĢuõŌŪ˙×K{~ÚŨ˙ũ˙Ū­}WŪũú_ũũ~Ž˙¯í_ZˇIV—JŨŊ˙ę×ŋ˙ņŌžąö˙˙_ëõ˙áâëöŋī^ŧ1_ë˙Į˙ü}˙†0ĮØcC˙×ë×˙Áu˙õūŋ˙¯ũ‘U˙¯ë˙ūļE˙ũ‚ũ~ ]¯˙ë˛)2)ü‹?ß˙ō†^ã˙Ę{oî?˙˙ũ‡ūječ÷Đ˙‡_ÆUŗ˙”3˙އû ‡áƒ˙˙„ ųcđ?-/˙-?˙˙˜gđßø@ža_0Ī-?æ˙æ˙ø@ŋûūZ`ØoÃ˙ëđ‚˙˙/˙ë˙˙˙üę˙ ˙÷üâʡéū—˙[īôHd ųŅ˙ųå˙×˙ũ˙˙ŋ˙Îwūy?ú÷­˙˙gT˙ú_˙Ĩ˙˙˙˜A˛!?œAŋëû˙Ԙ[ˇ˙Jao¯īī˙ū˙ûŪŊ("ŖĶ˙ūûŋŽš…÷úY…û˙û÷īö÷˙ũ/˙ō…Ĩ˙ūPēúĘūŋõ”/ûܝūPŋ(^Ų:˙Ę˙ļO˙īūŋú[dëlz[߯š:õūß˙ûjŨūڜz]Ģkíī˙íĨúûíĨ¤Ú_˙íĨ{kßZūÚë˙íūŋíũ{÷ˇũnļŌ×Đ"=í¤é D{ÛK×Ōm.Û[EũŊĩū?Đ"=ļļ“kíĨūÚŨ7ē({i<˙^ÛŌ_m-´ļŌÛJÖęŅCô´ģKēļ‚NĶmuM´˜a$í6×TÛKL –t‚m$Õ°Ž87JĶŊ&Ō[l#Ž… 0•Ĩ›kĢiQ$ÚKl0•ĻÚMĨa&Â8ûJ 0ÂMĨi-†8öÂ8áļŨöšļ‚M†’°ÂIļ‚ĸ:JÂēPpŌ 0•Ņ$­Ŧ2TA†K 2@b@Áa’ÁA ‘Ņ ˆAKà 2qdĸ0ƒ`Ã%āÁ8Á ɆJ@Ã%‚ƒ$’ —ƒ2~A† 2^ÁN!’„ É[ Ã'ÉÄ2xÁ0@Ã%@`Éø`Éø0ÉQ0 Œ%#?a""""""""""""""""""""""#ˆˆˆˆˆˆâ"""8ˆˆˆˆˆˆˆˆˆˆˆŽ"?˙˙˙˙˙Ϛi  q˙,̉gvØr“+äčŽUerŦíT9n-Ë*Ąâ4ü„"]ėžŒÃ1,¯•ņ¤(tÁĶ)lÁĶ˜A ´ÁÎÖZ`÷ß÷O} ’ūŸ˙ũĸ„V×įc_“Ŗ°EįcI¯ĩĩû_í{[Zū×ĮÅWĮņü˙ūžŋ¯˙˙˙˙˙ūĢëęžŋ˙Uõõ_^Yj3F}æ!ælĄų ķl‘Cœ°Ë˛æC„'Ądeų qzsė˜DdqD: Ö_æ™dš‰Ė:„?—åĖÖa†˛ę.d/—3šBâCdˆã:ŗĢÍļj2'fØD: †L™3šeĖĮ&sYs.ĸĶ—^6ÍFH¸Fŗä.ėß„{1_öėŪÁ›CŲ§đ3$5ž†ŗ|#ĀmaĖŽ˛#ĀaĖ‚ô4#‚…h  0˘°gČ2Ī "< ā0F€Ã,đP…ˆ5œx#Yįđ@Œ@°ĄÖz1…đ2ô=†đą€ÁB„Â>„x ŦÄÎ<#Āađ ›mƒāé7A‡ °úMƒ ›ĐM ƒ`č&ÃA„“~ à äa¤OH6mæœ › āāč,&Ō ¸8:AŌ‚a‡A: ´oA6M„ mĐH6t`āáŌ“h&ĐA´ƒƒ¤Ú0ÁŌn’oĶĻܲ6ôÛéˇī¤šˇ{ŌmūŽÃ´ũ&ŌJŌŋt“÷ßŪ›JũŌŌt›aÚN’ūé&“ĶzMĨĢ~éoL=[IŪ›IˇĻ˙û˙­í˙ŨëĨ{ë˙ũ{é:[ôô˙˙ũô˙úZˇZÚ_wũĶ}_¤ī˙{Ĩiw¤÷Ō¯˙ë÷˙ëũZŪļęŋ˙ÚŊm_ÖÖ˙Jŋ˙[ūßëõũ*KīVíûū߯õŋãũū/ã˙‹×ĐĨâ˙Ãú˙˙ü˙˙áŠë^=xīŋđÅáéZ˙˙˙Á|ŋ˙˙tdPœīũu˙˙ú×ũ‘D/í˙õŲB˙dT.ūēûŽŋ˙”2÷’‹üÔËß˙÷”2÷ė?(f-uū8˙_úø˙a˙üę‡˙°ãũ‡˙˙¯˙˙đ?„ ˙˙˙ę'ü7á˙˙–´˙˙˙–Ÿāß˙ͯūZö Ė3āß˙˙˙˙ ôŋđ‚˙˙Û ‚˙:ŋKĪ'ß˙ũüō˙üâķĢ˙˙ũßķËĸC˙:?˙ũ˙˙˙¯é}yÍÎ˙¯ųäū—ũ˙˙˙˙ūyī×÷˙˙ü ßįo˙ŋú˙ú_Ԙ^š…˙Ԙ_ößíĨJaŋĨ˜_˙î˙˙˙īúŪ˙_˙ūžũīũ˙ˇŋ˙öÉ×˙˙˙˙õ˙ôäëK˙˙˙õũö˙ĘPŋl˙å ˙oöÉüĄ~Ų:luú[å ũ˙Ō˙úë×˙œŋ_K˙˙ÛÛ¯ŋ˙ŋ˙u´ĩĩm[_õŨuũĩūúotŋĻŌ<˙×ô[úm+_¯ÛĻ˙´žÚ]Ú_čĶ÷‚#ũÖß D{öũ'KˇĐ"=˙uíé]6“kí¤Ú_ļ—uŪģi{ĸ‡Úļˇ^ÚM¯ûi6•ĨtÚV­¯öĢî“jģi/a¤ØG8EŌIĻ›kޚmĨiB#é.“k­§¤a&I5Û]mnÂKm„w{jI´SÛãƒm&Ō[VIļ­„qÃNĶm&Ō´ čŽ’l#Ž 0ÂKa†m-;M†“ %D}&Õ´ŌM¤ØGŅ%iĢ $ØGĻJ̓&8Ђ Á0É`ρ 2VčAaƒ – A† 2aˆAA’Á@ƒ āŒ@ÁßNúowī˙íīĻé.;Ļū?úŋ­õŋûūÖÚŋJē˙ū˙ë˙˙ÛKĨo¯W˙ëˇũnŋŋ˙Úŋíë˙÷Úŋëŋëõ˙đĮ_ĮüuŋxbÃ_†?û˙­õ×øŧ1†?˙ŋ°ÆŧáūÆ?Ã_ëë˙˛(=}‚˙īŽ‘fE_dP˙_ßīüˆX+"Њ^ŋ_üŠāŋ˛(="ŒX,ŠėŠ˙ߏũ‡ÆšĖ^ŋד°ė0Áå ŊûûC˙úöüĄ—˜l>?ûđÁūPĖ_°˙đÁųИƒûëøü´˙Ã|Úđ˙øAa°Ū'ü7˙-?ŋų“˙đ86å§˙øođƒøo†˙ ˙üĖ yå˙_ž—īœ_ú :˛C üę˙§ú˙˙,ęČo˙ëΏôŧōĪ,č˙ķŖôŗŖüęķËŋ˙˙į“÷Ō_˙ŽúYäæo]üō˙˙_ūŌ×<ƒfį?˙ķˆ7ú_ūq˙ķˆ7zYÄÎ~y?˙˙ßõßK0ŋūŋđ@ˇˇéL/÷˙÷ūŋöū”+÷÷˙ūßôŗ ˙ŋ˙ˇ}, ­˙÷ũũå ū˙(OëûdëÛüĄß˙ųB˙ū›'^–ßļOūéīũe ũ/˙õ˙ũ˙˙É˙_úû˙˙lŸēļŋßíĨik¯ē[iũ˙íĨ­˙kû~é}~i6—˙Wûkũöˇ˙û­˙_ÚŪŨß˙îģkß[ĻŌ÷EēÛVŌoKÛKîļ×Đ"?ŨizGļ×ģ¯Ōm-´ģ­´ŋVKĐ"=ÚŨ7ļ—}Ĩú_ˇĨuĨÚ÷ū“iméi7ũÕÖŪčĄíĨm[I4í(; ­¤I°Žīl#Ž †“iI6ŌVŌ´Ŧ,4“mum&Â8áØI4áH&I6ĐVa$à %iŪ0’mŽ´GIXKI´“Táđ‚l#ŽVļŨíĢj´GI&ŠļĮ &ÂVØGwÃKI4ė+j›a}Ĩa+ 2^ a’…`‚  ž0ÉÄ0Á†!/+pF Á„d°Pdƒ'#Aâ@Éø0É 10Å ÁāÉd°U0 Œ`Ã%á‚xaN0F a0Éãa†( é„`„dã`ÃdņÁ0Á„ pF †0ÉÄ2PƒDDDDDDDDDDDDDDDDDG˙˙ũ4áq˙–Qĩ,Ļ·N˙Ęix˙˙^˛ËSΰˆPĻĐ2ĀbÂAŧé_úë˙ú˙ã˙-?˙į˙ŋ˙(_ö×üũm/õļ’ÛipÉx0A† â"#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū[(Yl$ļ_˙˙˙˙˙˙˙á9l˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø€° ´ ´ wĘwŌw(,,leptonica-1.86.0/prog/baseline3.tif000066400000000000000000000144121506303110300170760ustar00rootroot00000000000000II*L˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų\ÉĘWŦųfx؟#Ą25‚FÆp)xfH  D“˙˙˙˙˙˙˙˙˜žŧ˛‚\]d¸ÜORxGpJ?ĐÎ\ÉÁ“˛u ‘Á<'`¯ ģ}ę×zxĶkĶM7BÁ”ƒģL ĶL& Ļ8iÚĻT×ÄDq×I.•Gâ?˙˙˙˙ūYƒŖēķ°LéË!–U>É.lˆ)„EY,†E 0œ›‹&ĄcBwŋĻW!Ęãq ™ŠIFcųt 9ŖÃžŒ;NW H^EäÍ'Í˙$÷"ŋæ@{é!ūžéŋkWQër)äGI?û¯ø˙Ģ_÷§˙ŋ˙Į×Ĩŋūŋúë¯ĘúĐū˙˙˙˙˙īz•ƆE2Ü]™jĘâlÆW$ŠN#ú¤A˙â•5ȒĪK[ĻĒ8a ZˆĩōŌ""ŽYTâ2ĐĶ &GˆĪ;äŲ`ČfDD°‰ƒLüŧ8uPžžhˇÃ†ÎÕ]Ü:za܊t4AørŸ¨pīĖ<æ×Žë˙Ú˙­cúû¯ĩ˙ß_ũ˙˙Нūē¯˙ũ4FĖ—3 ų™Į9˜ŒŪa”LDC6Ιž3  ü'˜dƒ5Äŋ…ū¤˙˜FĢ4 M5‘—#ƒË˜AڄaHöaĻhNĶMpƒCŅ”ÂgŒ Έ˒!T\”ņ*r4Îf†H5–ë&p͙ō>͖â z ŸŨŧZ-ÜZ.Bļ4[¸”áĸáčģlEģFŽÔZ.čˇ[Zz~i„Ķņ$´á˙˙˙˙˙˙,åL›['‰Dw\jdöė%IiBlUT|44ÔDCå Ļ&QUd°ČŲ›2ŦŽâ=¨rnRa5Nû´ĶSąŲ¸ė¤ˆ7ü•§wWTĐa#×EWnīŋŊčΛ%îE}6—˙¯}CÍ߯˙ĶY[Ū“×˙˙ÛôÚ~˙ūĢ˙ī¯OT˙ō!Ššg šŧčķ ~DObsn͙†NˆsŊ%ŽŪ¤YfōA!™0ͲA™™ŗ6gA˜#ː&ˆMXL&ˆ\„O „ũ  ‰îŠ‚ ų—0A„ĪG"q„BP”ŌDFn?Ė pĨtPåēXjž˙˙˙˙˙[Ë VY}tqN?ųg2Ep:Yf´JĸTfŦėDN)|ėDHgXžzLė  σM MZzfK-ŌÂ{ŋĸīĢ_÷w™úAéC ĘÎá„vŸŨö¤ã0˙a^äUu˙tŊ÷Ķ×˙žøģK˙˙ô—]ņäŽŋũ˙ūŊ÷éBûË=\]“ÅV(Ėõ^›i7ôØĻ){0qã˙–g3ĩ˜™æ¸Š˛""”›$ˆĢ;ķ;Úa0M0ļ0š‚˙kü8hė$͇"¸|3ūA|­l$××}­Ģ]ö˙ū8¨Ú˙˙˙ãŽēĢëë˙ĘĒ"5Lę”֏gK"%ÍhÕäBLƒ‰Ôˇ2XeBûß˙˙˙××#‚8#˛VG|F9('Y(/Ɉ5 Pšä¨La °fPZ"ƒ'>Îb‚bfõ !qŊ/KQåŽ%ę?“u<É!ųĘā@j[‚u˙æũ˙˙˙˙˙ k3!yd&Ė{\Wĩü´Î˙$‘(‰Qš™HrēŦO`˜L&ŠŲÚ¨ÎÁ‘Ø™Ęéč˙˙õūŋ˙ī÷ŋđŋ–Qc&"°Îę|¯3;ŠÕé&–é8Ö´-0œb"?ü´>v'‰gz˛ —dYZ[šŗFUQ“Á;ėa3ĩyŪ‡+“˜3Ķû˙_^Öŋ˙˙˙˙˙,Ēvņ‘nvų j[™I„Ķ0ƒØæFÜ/ßé§ËuO$¸s ?*ŗŦ`æ­ÃŊíūÚ܊äNWWŪøŽŖ˙ūī×˙_˙ūžžĢ¯ũ}W]u˙fDō$""%ŲC6F†NjhĘ™˜0ˆL˜dƒ)ČĄ“™Ŗ6gŒšœdųÉM"†hĖ˜‰L§‚ōnRi˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆQ)˙˙˙˙˙ũoå•U–ęĪôáĶ_Äų6FSđM?rÜŅā„H5ŋũ}˙˙˙ū÷ŋđĩü›%37bĄ¨`Ŗ˙•Å"‘™™ØąB!æoa2PāœŽŦ2c˙˙˙˙˙˙˙˙•ƃ’Ķ"ĄÉ†`eÆ`í54BĘ  (0„DDDcåŽĻŧ堆WĪŖų’¯>Žī2RĨšŠ’•™ ˆÃ>͕Ļ σ4NWHĪéĻJBiĒžW}muūˆˆˆˆˆˆˆˆˆË•?˙˙˙˙˙˙˙˙Ë)+4gcÆ2n.ÉęZîĩÖÚ]6ąÆÅC „ ‘ŗˆüŗ–ĸ/ŅËŠ74ˆ8­æqøíLh3Ą&TĖ&@Íe¤kˆ5ēi‚i„ôÖĶģ; + ĻTũũ÷ßs˛…ū˙3÷Çh>Eāû•D›‘JŒŖ‡īm;û[^˙}ĨÚŪ8ããŠãúę>; ŋ˙Ē˙øËu9†˙{˙Z˙˙˙˙˙,ŠŦŅ×Ëu¨íR+„d÷uJ’ū—­iX¨ĒV;X‹ Y˜`‹8ƒˆūM´ŽÅŲŲ!‘c+1Ã;giFkeY™'3 â!ĶMtīŋMWéžæk}Ūî’á҇í:‡;RßÜא~˙×ĮŊqßVŸū×˙úãõņõ˙˙˙˙¯ęŧˇ[3˙˙˙˙ûßÂūY(eō ËĮiFiŗ/â”d|—2ų6c;Š3´ũ:ŌIGĨkkx¨Ļ*:¨â˜ ƒ´á„šh0žÂ ˆ‹F"?ōÎŒ”Ô›Šd<ė‚"ąßI„Îʈė‚aĄBiŨ„î›ũīßTníKvũģĩĩĢ_ņĮĮė/õūŖ¯úÉą&qŖUå-m<—Š3vacŽuFqÉHqd6Ī36ggHŖ7ŪR"$D„Ĩ fˆō%\ˇKWß˙Ŋ˙…˙ūMŖ:2A˜eFtˆ‘h”"%ĻwX9[ŽõGuĮeąB#"DPČ<’GTjGoqhDEėDqĄĨ¤2ë–éO^ĩ^•jÖôĸ‚ĮŠ ÕĩhEĻ0„c˙&ālí^vjČYd]“6~;2/šâM™U §Ļ„ĶĶLęESÚoųVģų7Oįa§MÁÎÄ´aī‡4@é‡h8~é‡ũk_ÚŪŖ˙ęÖ?ø˙õ˙õ˙úúūŋüˇZŸ˙˙˙˙˙˙āĘŽ…Ųx^Yn`Ëâg&$bdæW—åáčas žĖ`ÚĄBf áF ¤†ÃƒŽa"üŠ—Å}Ųõ,‚pX!"  œ(ˆˆŽ""""""#B""!舜čDDDG[‘pƒĻĨz_M%ī´ĢĢ|RûŠŠ¨ĒmME„"ˆ˙åŦ°¤ØĻ;*ˆÃ%$D‘ ˆ ɔd,ȝĢ04íI0ŠĒiĻĢwĨúnũ÷ /™čÃÍsęŸ; åšĻínčÃũ˙ôöŋûøę×øõ˙ĮüWõŽūžŋ¯üėœBy‡öA3šŧŸČ$n9„ČfAæŦ§ĪĮFšzäN DDDDDDDDDDDDDDD†‰O˙˙˙˙˙āČžF đGB(ÂĮ$rNNÉY<#‚ÉY/#9'. ÔBÁ ÚA'&\Š•Ą#‘ŽJÉų'&\¯:ü”ÉPޞ„ĻJāČÁ‘ų  Ų."ņ äPd°”˛XO YâAČĮ'äąC0B Ö""""""ÄDDA„"""""""""B"PÄDDFÄA‚xˆâRÕŠ'ņ~Ōzöĩ¯ŠĩJƒØ0•Sh1C &`ĸ#˙“ac52ŦČ;5eY’ŗ#FEĖ‚T#%2#fv Îõdŗ1ˇKļĒŠ­ú}ö´îø{?nîäS|ė§îIV¨a›îÖîkŨ]zîéŅĻ0ą Š*×˙˙˙û˙ákå–aƒąFW@`ˇŅQ?čēGOĨŌûėRlV“jhQ˙Éžš ™•Ô‘ČÚ$ąÚR%šV¤ŲlÉ “#L& ‚j0L'ū×îõ[‡ūī¸|Ņ]÷}Ũ§wLšÜGĮĮ˙˙˙˙˙U˙˙ë-ĖĀärŨl@Ī{ûû˙˙˙˙ü´ F2¸\vPÉęũ$›K1V„5a ō҆v&D‚#DRâ6e!īģ Úîīē3šdQģš/‡"˜wWūë˙w˙õ˙¯˙ŋ˙õÕvšne›dƒ(FŲ “Ŗ™0Κd8ĢÉķ‘Ņ’ 6‰ĸ%üĖõËĮUyķŲĖjˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠÕ˙˙˙˙˙˙ėÂe…kEīŽš)6RËõ^šiitͤéņąá ĶMDDōš€Xä\C’Ķé§öšøbYØO˙_˙5gė¨Īõ1gĖ Â ’j+î"!ũŋ~ŋä4 ˜ļlOŽŸoũuüũķ—%oáõŋūƒûƒ!PJ ZiŠ\PÚaˆŒD˙Ëqâ†vˆčÕĢĖķ°\Ēåt‘Zrš0Y%˜Ų!`˜&™ÂÂgni„öš§{ßzvŒ8}­ āī‡!H9NER–eG¤˙¯‡˙˙˙˙˙˙ūMĘĖjÔō¸¤R2Š3‚g„%|đÉIЈŒ!Öiô'¤ī߯é˙’  y‡Sī „đŸXˆ‹ũ÷û^Cnˆ|†§īŋŽ˙íß9ZONËēßb}§š’9x~?„ÔŽ,„DDDc˙üŽ ío4ÎŦƒĖˆ‰žv¤‰ŊyĘŠB‘a Ϛa4ĘĢ5ƒ;ZĒvĒĒiéíđĐaÁđų*ßr܄Œ?ˆˆˆˆˆˆˆˆ‰%?üã˙˙˙˙˙˙˙ųiŗ\6c2ŋkôĒ’ÅEWha‚˙Ëtļd_&ßâQ’ŧ‡Ô™LËB#–eYš™Kˆ)—4&wJû‡Úi­…Ķšà ˆ;!>v”Ÿ4ʄüðčÃūũØzMÚwôÜ:˙õĄUÚŨ­ Ō˙Uõ˙ņņÄņÔ5ũ}__B"""""""C<§˙˙˙˙˙ūā‘É9>#¨…¨ŠäāČāŽĸ;#r?#â&NDˆü‰ä1Š,#r(3E™‚!r;#r8"ÁÁČāŽÉAtäs$0ŽČ܊äJhF9( žJô!|‹ÄRf Œäœ›‘8…™‰A €ĸMaa4"""ĐhC w  Đdá`‚Ú “ÃMSL Â4Ę0› 4Đ`˜LŊM6Mh\0ƒB$ˆ DDDDDDDDhC"""""""ĸ""""+b#ˆˆŒŗ•øĸAJZzsąĢô—¤šãa¤ČߨØĒ´ &ĸ"?ō×RnUÆvĸ;'ę#ŅŲØ8׉Uin–! ¸Â Mda2ĻˊM4„ė§…˙Žé§÷}Ūŋv""""""""""CJG{˙˙˙˙˙˙˙˙ōĖ[fŒƒÍįzŗ˛–F،ûĻŋõékõJÃÕqUbRwC,ĶSiĻaDDGūYŠn–d)’ŗ44ČļvkŒķ"ųŸŽ‘VëdH3L&˜&wä`ši„˙_{Mí4Xîõä'‡Ü:,{čô}ö•­ūŊ¤–ߎ8ãēøkj˙īûXĢ_ũ—˜ČdQD?5g0ŋū×-Ö@Ø ˙˙˙˙˙“g2s7 l§ ĶlS20ĖŽÁ—3d`e:ũˆˆˆˆˆˆˆ‰ÂË_įÆ˙˙˙˙˙īËulŠD3æn3džu"r.f°‡ÁŒĐ‹™Æ|ds"“Œ„dr36FČØĖ62ã>)˜9Nø§Å!2ã'áœ#fxƒ†Ffˌ3ä\ČĀsÄlSæpÉs8FĖņ›ŒŲI Í¸ˆˆŽ!„""""""8†XXB Đe‚qLDDDEDEÄDDhDdÜFŖˆˆˆĸįD˙‰]?Iéé5Å~ŋ֓m'¤ŖéąQÕZÃA„-DDG˙&Äą7ĸ&ęt)Ũlėĸ" ”‘d‚fE¤wŪ„l‚}4Õ4û˛–û’ŧ>á×ú ‡rŸũÃŖ<>N˙×a?öĶŋũ|ņ˙˙ūŖ_ü›EĒ˙˙ųČŨ3ėá‚bĖ Ž‚NyˆE;0ĖŲÃ8f ųšJn!˛ŠĶ'3ËĂ&2tr:dœtd )ÆfÍÄ6¤Af<§fãäHfƒō Ī333fË.axf č4Õ ‹Bė'„hCUPž p˜L!„BĖē &xR㠂a0@˰ˆOgÆ\iϘA§„ÂĻL Â~ƒ0ƒO‹ á:ũ}˙Ūū˙ɰÛ3fGe¸9Ū\Ž%úOĸū֗ôŸHčũĨ¤éVļ4ÛJ–ęIƕEA…†„Zˆ‹ ?ōn¤Î†Fĸne•y”d•“G´ÂfJ†vœÎÅŲ`˜A„„˙§­ĻŸ§ÁČĖ9AÍh¨ũÃĢŧÃí{ĻöŽîaīĨĮ˙ũ¯ßŽŋ¯¨ø˙]W˙嚘€¯˙Z˙˙˙Ū˙ųe,ÎĀ×;DØ(dqe”VT]â‹?uĩũW^ŌÅA‚Ļà Z BL1Vƒ ˆ˙ɰ'Orl:ëņõđD ÖĄ_˙˙˙˙û˙Į˙ūW#ĸ$"„TŒ‡B žÂa0…;PDPáv(TßS!E÷Eķw}=8pî“{¸r¯čDDDDDDāHĐĒžŋ˙˙˙ßß˙+‰„ ŒŠ„4#0dC˜Ë˛ã03fjˆâšf!æxds.đ„¤Ž>!AgR.Î>AĻ‹āĶ Ąša ĻšÜ ÖĶ *)ĻD_â"""""!‚ Œ„`Â#]T""#IUuu^4ŖU !ūWĒ‘`Ĩ¸ŧvJLŖų‰œw6A#´ė”—Ķ  ĶAĻl3ĻšĻđÂ{õ[ûŨęAáđ˙šSÜ9­n0˙ß—eÅÕûk˙ë ĢüÄDDDDDDDDƒ,Ēû\`á˙Áū;Ū÷ō@ ˙BĩjY rˆæy˜ˆ‡"DtČ'2͑ã7dI™ķ7fŒÜy‘p†„k2‘ž3ŒĐÉ Ã6:ŗFE˛ĸ<ŠeôOÄGDDDDDDDDF„DDDE興ˆˆô¯īĻ֚ &+¨ĩü›ĘŠŗ*ũŨ`œ›‡}?áÁ˙īũp˙úë˙Аh\J3Vtô’Ē@Át—B#ę #ūģ˙ũz˙ü?ļr֜28#‚\›í†%ų„Z}DDDDCQ˙˙+ОPpƒ/ÄđL”Æ3Ã%,ĒІ ‹v´ÕJŗĸûôí5}Ōl8wÃL'Ã÷|UéÚĸ1R}ÂMÖ:â""""C =Wú˙ũ˙ŋ˙īų7Ņ’°r`ĪWDō#I—û Ļ*-GūZ^Ĩp \ĄgaĮfŠa HÉHgAĻv/Օ°ŠĒéϚg}ė×%rDFBN Žë$äŨ‡ûTí4Å4ˆˆˆˆˆˆˆˆ‹ū¯ú˙×˙˙˙˙Áoyd2@ŲŨ™Ea›Dq‘†ffᑆmšČØC„lޤFō3qa¸“â!„!„ÔqKę?˙˙˙˙˙–_Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đƒ˜˜Dú(,,leptonica-1.86.0/prog/baseline_reg.c000066400000000000000000000160001506303110300173030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * baseline_reg.c * * This tests two things: * (1) The ability to find a projective transform that will deskew * textlines in an image with keystoning. * (2) The ability to find baselines in a text image. * (3) The ability to clean background to white in a dark and * mottled text image. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { NUMA *na; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixadb; PTA *pta; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "baseline_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("keystone.png"); /* Test function for deskewing using projective transform * on linear approximation for local skew angle */ pix1 = pixDeskewLocal(pixs, 10, 0, 0, 0.0, 0.0, 0.0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ /* Test function for finding local skew angles */ na = pixGetLocalSkewAngles(pixs, 10, 0, 0, 0.0, 0.0, 0.0, NULL, NULL, 1); gplotSimple1(na, GPLOT_PNG, "/tmp/lept/baseline/ang", "Angles in degrees"); pix2 = pixRead("/tmp/lept/baseline/ang.png"); pix3 = pixRead("/tmp/lept/baseline/skew.png"); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix2, 0, 550, NULL, rp->display); pixDisplayWithTitle(pix3, 700, 550, NULL, rp->display); numaDestroy(&na); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pixs); /* Test baseline finder */ pixadb = pixaCreate(6); na = pixFindBaselines(pix1, &pta, pixadb); regTestCompareValues(rp, 23, numaGetCount(na), 0); /* 3 */ pix2 = pixRead("/tmp/lept/baseline/diff.png"); pix3 = pixRead("/tmp/lept/baseline/loc.png"); pix4 = pixRead("/tmp/lept/baseline/baselines.png"); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 4 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 5 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); pixDisplayWithTitle(pix3, 700, 0, NULL, rp->display); pixDisplayWithTitle(pix4, 1350, 0, NULL, rp->display); pix5 = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 30, 2); pixDisplayWithTitle(pix5, 0, 500, NULL, rp->display); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 7 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixaDestroy(&pixadb); numaDestroy(&na); ptaDestroy(&pta); /* Another test for baselines, with dark image. * With minw = 60, the number at the top of the page is skipped. */ pixadb = pixaCreate(6); pixs = pixRead("pedante.079.jpg"); /* 75 ppi */ pix1 = pixRemoveBorder(pixs, 30); pixaAddPix(pixadb, pix1, L_COPY); pix2 = pixConvertRGBToGray(pix1, 0.33, 0.34, 0.33); pix3 = pixScale(pix2, 4.0, 4.0); /* scale up to 300 ppi */ pix4 = pixCleanBackgroundToWhite(pix3, NULL, NULL, 1.0, 70, 170); pix5 = pixThresholdToBinary(pix4, 170); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 8 */ pixaAddPix(pixadb, pixScale(pix5, 0.25, 0.25), L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pix1 = pixDeskew(pix5, 2); na = pixFindBaselinesGen(pix1, 50, &pta, pixadb); regTestCompareValues(rp, 35, numaGetCount(na), 0); /* 9 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix2, 800, 500, NULL, rp->display); pixaDestroy(&pixadb); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix5); numaDestroy(&na); ptaDestroy(&pta); /* Another test for baselines: very short textblock is removed */ pixadb = pixaCreate(6); pix1 = pixRead("baseline1.png"); na = pixFindBaselines(pix1, &pta, pixadb); regTestCompareValues(rp, 2, numaGetCount(na), 0); /* 11 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix2, 1400, 500, NULL, rp->display); pixaDestroy(&pixadb); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&na); ptaDestroy(&pta); /* Another test for baselines: some very short lines */ pixadb = pixaCreate(6); pix1 = pixRead("baseline2.tif"); na = pixFindBaselinesGen(pix1, 30, &pta, pixadb); regTestCompareValues(rp, 29, numaGetCount(na), 0); /* 13 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 14 */ pixDisplayWithTitle(pix2, 1400, 500, NULL, rp->display); pixaDestroy(&pixadb); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&na); ptaDestroy(&pta); /* Another test for baselines: more short lines' */ pixadb = pixaCreate(6); pix1 = pixRead("baseline3.tif"); na = pixFindBaselinesGen(pix1, 30, &pta, pixadb); regTestCompareValues(rp, 40, numaGetCount(na), 0); /* 15 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 */ pixDisplayWithTitle(pix2, 1400, 500, NULL, rp->display); pixaDestroy(&pixadb); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&na); ptaDestroy(&pta); return regTestCleanup(rp); } leptonica-1.86.0/prog/bigweasel2.4c.png000066400000000000000000000022661506303110300175700ustar00rootroot00000000000000‰PNG  IHDR *Á PLTE§Ģ§čđč/+'ˇ_E‡i pHYsb&2PIDATxœíœ=rĢ0ĮiŌШâ\Á ›ô\"ē„{Á\"—HEㆆ§ũX!‘y3Iķ–ˇņ`Ų_fūŪ] IIQüØĘŸ#~‹QĩßXwįÆmØÜž ĐĮ^ŖžÃ­đœØŗŖOrxáa$Ŗ‹ĄŠ‘hJŽ‘¤$ßđ>ģˆį›į ßË?ÍjFŦņ΀–í)Åŧķcy,Ž`]Œ]PQČņh8@KŠšuK Žž+ĐÛĩĐĮh"1„`ˆõ€ "đŦ({ĩŒãēĶ{§qdÂō€ķB#ÍļģįhģÅ ×ĀXŲ‘û$ÂË3\ÄŠg Ō⯠%×Į0 ‰­‰QååŒŦ/¤”rN5#‡Ø3XĶr¤œSĖ8$ŧŪ÷˛ōx&3PÄHĪ9/(„˜yåž+õ0¸gŠ@6F„´Š¯Nē&åØIŠĸ.ģšŦŽ1î@€€Žz6s2†á¯NF—úcoFŠZFšęaĎ Ã`Mæj$ĒŗëĨz…ŒMĪ}ĘY×fŗ‹‘˜CŅČČ ÚÄŽ,h˜3(}ÎégØÚ ’kf„0{Nķt:w˛…—ĩAœm“l X•īĸ¯J“r-7đ×Čø˜jY‘Eļ}=×oM'Ŗŗņ8ĨŲšĮ•8¨cppm¤fjŌÛ÷H|WËĀl‹ĩũŽãMįģÄ×i:cXîT^YzeŒsĩ”Õ”(Zވ/˙gd2Ná  Č2Œb†õžSL!î)Ø TÍM˙qFX÷ I7ŋɡ`^W!j<[wF@ÅfvŖCˆ1 7Šŋ˜Ąm%`cLŖ’ÂÃdų§ éŋi`°ĻÛÃfĩ­ÕŦsŠĘâgzĨöįf륲ļr†Úû×~ŲcN č_Ę}Š‚ŨYâÜ$.ī^ÎS%#AX€60‰6ãlkcfá}õ¸íBƒɒinU ķŒũÃæ`Œ ēđĒŊgŗŒŽ,ŗBΊbx@˛hÚ|~`9v‡ˇ6ĘqđmeŒ iĸĢm>/˜sķVt0HžBFŪlQ]°ŗ†ōãDŊŅ?h:Įˆ°ĒŽÕ+r¨Æj|{eÁū¯65­ŒØh”jP”egdxI]F^ŋEœŒQá_Ä=ÔģDNŌht2Ž%ŊJzÅĢ'aāt1 ę¯ĪĮ°Īâ|dgąĘ20đÔ2`cXmiļ‘Dœ‘aÃęž7x<ĸ”ˍ^(ÄÔ1Ē.BĀÁ]zŽ_X>&Lš”á\ËA#Ch ÖL~VöB!ÖĐvč˜đ>Gˆ* ę¯Ęp§kdĘÁŋSčņw…$TËāõ=`€{gņ@ŲW>äBĪžčdüØĖo0ūj8ƈë­(ÚIENDŽB`‚leptonica-1.86.0/prog/bilateral1_reg.c000066400000000000000000000121471506303110300175510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * bilateral1_reg.c * * Regression test for bilateral (nonlinear) filtering, with both: * (1) Separable results with full res intermediate images * (2) Exact results * This test takes about 30 seconds, so it is not included * in the alltests_reg set. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void DoTestsOnImage(PIX *pixs, L_REGPARAMS *rp, l_int32 width); static const l_int32 ncomps = 10; int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("rock.png"); DoTestsOnImage(pixs, rp, 2000); /* 0 - 16 */ pixDestroy(&pixs); pixs = pixRead("church.png"); DoTestsOnImage(pixs, rp, 1500); /* 17 - 33 */ pixDestroy(&pixs); pixs = pixRead("color-wheel-hue.jpg"); DoTestsOnImage(pixs, rp, 1000); /* 34 - 50 */ pixDestroy(&pixs); return regTestCleanup(rp); } static void DoTestsOnImage(PIX *pixs, L_REGPARAMS *rp, l_int32 width) { PIX *pix, *pixd; PIXA *pixa; pixa = pixaCreate(0); pix = pixBilateral(pixs, 5.0, 10.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 20.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 40.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 60.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 10.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 20.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 40.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 60.0, ncomps, 1); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 10.0, ncomps, 2); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 20.0, ncomps, 2); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 40.0, ncomps, 2); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 60.0, ncomps, 2); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBlockBilateralExact(pixs, 10.0, 10.0); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBlockBilateralExact(pixs, 10.0, 20.0); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBlockBilateralExact(pixs, 10.0, 40.0); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBlockBilateralExact(pixs, 10.0, 60.0); regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pixd = pixaDisplayTiledInRows(pixa, 32, width, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.86.0/prog/bilateral2_reg.c000066400000000000000000000075321506303110300175540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * bilateral2_reg.c * * Regression test for bilateral (nonlinear) filtering. * * Separable operation with intermediate images at 4x reduction. * This speeds the filtering up by about 30x compared to * separable operation with full resolution intermediate images. * Using 4x reduction on intermediates, this runs at about * 3 MPix/sec, with very good quality. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void DoTestsOnImage(PIX *pixs, L_REGPARAMS *rp); static const l_int32 ncomps = 10; int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test24.jpg"); DoTestsOnImage(pixs, rp); /* 0 - 7 */ pixDestroy(&pixs); return regTestCleanup(rp); } static void DoTestsOnImage(PIX *pixs, L_REGPARAMS *rp) { PIX *pix, *pixd; PIXA *pixa; pixa = pixaCreate(0); pix = pixBilateral(pixs, 5.0, 10.0, ncomps, 4); /* 0 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 20.0, ncomps, 4); /* 1 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 40.0, ncomps, 4); /* 2 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 5.0, 60.0, ncomps, 4); /* 3 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 10.0, ncomps, 4); /* 4 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 20.0, ncomps, 4); /* 5 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 40.0, ncomps, 4); /* 6 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pix = pixBilateral(pixs, 10.0, 60.0, ncomps, 4); /* 7 */ regTestWritePixAndCheck(rp, pix, IFF_JFIF_JPEG); pixaAddPix(pixa, pix, L_INSERT); pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 1.0, 0, 30, 2); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.86.0/prog/bilinear_reg.c000066400000000000000000000226361506303110300173220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * bilinear_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); /* Sample values. * 1: test with relatively large distortion * 2-3: invertability tests */ static const l_int32 x1[] = { 32, 32, 32}; static const l_int32 y1[] = { 150, 150, 150}; static const l_int32 x2[] = { 520, 520, 520}; static const l_int32 y2[] = { 150, 150, 150}; static const l_int32 x3[] = { 32, 32, 32}; static const l_int32 y3[] = { 612, 612, 612}; static const l_int32 x4[] = { 520, 520, 520}; static const l_int32 y4[] = { 612, 612, 612}; static const l_int32 xp1[] = { 32, 32, 32}; static const l_int32 yp1[] = { 150, 150, 150}; static const l_int32 xp2[] = { 520, 520, 520}; static const l_int32 yp2[] = { 44, 124, 140}; static const l_int32 xp3[] = { 32, 32, 32}; static const l_int32 yp3[] = { 612, 612, 612}; static const l_int32 xp4[] = { 520, 520, 520}; static const l_int32 yp4[] = { 694, 624, 622}; #define ALL 1 #define ADDED_BORDER_PIXELS 250 int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pixd; PIX *pixb, *pixg, *pixc, *pixcs; PIXA *pixa; PTA *ptas, *ptad; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); pixg = pixScaleToGray(pixs, 0.2); pixDestroy(&pixs); #if ALL /* Test non-invertability of sampling */ lept_stderr("Test invertability of sampling\n"); pixa = pixaCreate(0); for (i = 1; i < 3; i++) { pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS, 255); MakePtas(i, &ptas, &ptad); pix1 = pixBilinearSampledPta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0,3,6 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixBilinearSampledPta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1,4,7 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS); pixInvert(pixd, pixd); pixXor(pixd, pixd, pixg); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2,5,8 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of grayscale interpolation */ lept_stderr("Test invertability of grayscale interpolation\n"); pixa = pixaCreate(0); for (i = 1; i < 3; i++) { pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS, 255); MakePtas(i, &ptas, &ptad); pix1 = pixBilinearPta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 10,13 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixBilinearPta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 11,14 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS); pixInvert(pixd, pixd); pixXor(pixd, pixd, pixg); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 12,15 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 16 */ pixDisplayWithTitle(pix1, 200, 100, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of color interpolation */ lept_stderr("Test invertability of color interpolation\n"); pixa = pixaCreate(0); pixc = pixRead("test24.jpg"); pixcs = pixScale(pixc, 0.3, 0.3); for (i = 1; i < 3; i++) { pixb = pixAddBorder(pixcs, ADDED_BORDER_PIXELS / 2, 0xffffff00); MakePtas(i, &ptas, &ptad); pix1 = pixBilinearPta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 17,20 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixBilinearPta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 18,21 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS / 2); pixXor(pixd, pixd, pixc); pixInvert(pixd, pixd); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 19,22 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 23 */ pixDisplayWithTitle(pix1, 400, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixc); pixDestroy(&pixcs); pixaDestroy(&pixa); #endif #if ALL /* Comparison between sampling and interpolated */ lept_stderr("Compare sampling with interpolated\n"); MakePtas(2, &ptas, &ptad); pixa = pixaCreate(0); /* Use sampled transform */ pix1 = pixBilinearSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 24 */ pixaAddPix(pixa, pix1, L_INSERT); /* Use interpolated transforms */ pix2 = pixBilinearPta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 25 */ pixaAddPix(pixa, pix2, L_COPY); /* Compare the results */ pixXor(pix2, pix2, pix1); pixInvert(pix2, pix2); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 26 */ pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 27 */ pixDisplayWithTitle(pix1, 600, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixg); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif #if ALL /* Large distortion with inversion */ lept_stderr("Large bilinear distortion with inversion\n"); MakePtas(0, &ptas, &ptad); pixa = pixaCreate(0); pixs = pixRead("marge.jpg"); pixg = pixConvertTo8(pixs, 0); pix1 = pixBilinearSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 28 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixBilinearPta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 29 */ pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixBilinearSampledPta(pix1, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 30 */ pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixBilinearPta(pix2, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 31 */ pixaAddPix(pixa, pix4, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 4, 1.0, 20, 0); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 32 */ pixDisplayWithTitle(pix1, 800, 100, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixg); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif return regTestCleanup(rp); } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { *pptas = ptaCreate(4); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); ptaAddPt(*pptas, x4[i], y4[i]); *pptad = ptaCreate(4); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); ptaAddPt(*pptad, xp4[i], yp4[i]); return; } leptonica-1.86.0/prog/binarize_reg.c000066400000000000000000000152651506303110300173400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binarize_reg.c * * Tests several methods of binarization: * (1) Composite operations, including * - contrast normalization and Sauvola binarization * - contrast normalization followed by background normalization * and thresholding. * (2) Sauvola binarization with and without tiling */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" PIX *PixTest1(PIX *pixs, l_int32 size, l_float32 factor, L_REGPARAMS *rp); PIX *PixTest2(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, L_REGPARAMS *rp); void PixTest3(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, l_int32 paircount, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("w91frag.jpg"); /* Compare Sauvola binarization with and without tiles */ pix1 = PixTest1(pixs, 7, 0.34, rp); /* 0, 1 */ pix2 = PixTest2(pixs, 7, 0.34, 4, 4, rp); /* 2, 3 */ regTestComparePix(rp, pix1, pix2); /* 4 */ pixDestroy(&pix1); pixDestroy(&pix2); /* More comparisons of Sauvola with and without tiles. */ PixTest3(pixs, 3, 0.20, 2, 3, 0, rp); /* 5 - 9 */ PixTest3(pixs, 6, 0.20, 100, 100, 1, rp); /* 10 - 14 */ PixTest3(pixs, 10, 0.40, 10, 10, 2, rp); /* 15 - 19 */ PixTest3(pixs, 10, 0.40, 20, 20, 3, rp); /* 20 - 24 */ PixTest3(pixs, 20, 0.34, 30, 30, 4, rp); /* 25 - 29 */ /* Contrast normalization followed by Sauvola */ pixa = pixaCreate(0); pix1 = pixSauvolaOnContrastNorm(pixs, 130, NULL, NULL); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 30 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); /* Contrast normalization followed by background normalization * and thresholding. */ pix1 = pixThreshOnDoubleNorm(pixs, 130); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 31 */ pixDisplayWithTitle(pix1, 850, 0, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixaDisplayTiledInColumns(pixa, 2, 0.5, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 32 */ pixDisplayWithTitle(pix2, 0, 600, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix2); pixDestroy(&pixs); return regTestCleanup(rp); } PIX *PixTest1(PIX *pixs, l_int32 size, l_float32 factor, L_REGPARAMS *rp) { l_int32 w, h; PIX *pixm, *pixsd, *pixth, *pixd, *pix1; PIXA *pixa; pixm = pixsd = pixth = pixd = NULL; pixGetDimensions(pixs, &w, &h, NULL); /* Get speed */ startTimer(); pixSauvolaBinarize(pixs, size, factor, 1, NULL, NULL, NULL, &pixd); lept_stderr("\nSpeed: 1 tile, %7.3f Mpix/sec\n", (w * h / 1000000.) / stopTimer()); pixDestroy(&pixd); /* Get results witout tiling */ pixSauvolaBinarize(pixs, size, factor, 1, &pixm, &pixsd, &pixth, &pixd); pixa = pixaCreate(0); pixaAddPix(pixa, pixm, L_INSERT); pixaAddPix(pixa, pixsd, L_INSERT); pixaAddPix(pixa, pixth, L_INSERT); pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 30, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); if (rp->index < 5) pixDisplayWithTitle(pix1, 600, 600, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); return pixd; } PIX *PixTest2(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, L_REGPARAMS *rp) { l_int32 w, h; PIX *pixth, *pixd, *pix1; PIXA *pixa; pixth = pixd = NULL; pixGetDimensions(pixs, &w, &h, NULL); /* Get speed */ startTimer(); pixSauvolaBinarizeTiled(pixs, size, factor, nx, ny, NULL, &pixd); lept_stderr("Speed: %d x %d tiles, %7.3f Mpix/sec\n", nx, ny, (w * h / 1000000.) / stopTimer()); pixDestroy(&pixd); /* Get results with tiling */ pixSauvolaBinarizeTiled(pixs, size, factor, nx, ny, &pixth, &pixd); regTestWritePixAndCheck(rp, pixth, IFF_JFIF_JPEG); regTestWritePixAndCheck(rp, pixd, IFF_PNG); if (rp->index < 7 && rp->display) { pixa = pixaCreate(0); pixaAddPix(pixa, pixth, L_COPY); pixaAddPix(pixa, pixd, L_COPY); pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 30, 2); pixDisplayWithTitle(pix1, 600, 600, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); } pixDestroy(&pixth); return pixd; } void PixTest3(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, l_int32 paircount, L_REGPARAMS *rp) { PIX *pix1, *pix2; /* Compare with and without tiling */ pix1 = PixTest1(pixs, size, factor, rp); pix2 = PixTest2(pixs, size, factor, nx, ny, rp); regTestComparePix(rp, pix1, pix2); pixDestroy(&pix1); pixDestroy(&pix2); return; } leptonica-1.86.0/prog/binarize_set.c000066400000000000000000000132701506303110300173500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binarize_set.c * * Does 5 different types of binarization for the contest. * * Method 1. Using local background normalization, followed by * a global threshold. * Method 2. Using local background normalization, followed by * Otsu on the result to get a global threshold that * can be applied to the normalized image. * Method 3. Using local background normalization with two different * thresholds. For the part of the image near the text, * a high threshold can be chosen, to render the text * fully in black. For the rest of the image, * much of which is background, use a threshold based on * the Otsu global value of the original image. * Method 4. Contrast normalization followed by Sauvola binarization. * Method 5. Contrast normalization followed by background normalization * and thresholding. * * The first 3 were submitted to a binarization contest associated * with ICDAR in 2009. The 4th and 5th work better for difficult * images, such as w91frag.jpg. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define ALL 1 int main(int argc, char **argv) { char *infile; l_int32 w, d, threshval; PIX *pixs, *pixg; PIX *pix1, *pix2; PIXA *pixa; if (argc != 2) return ERROR_INT(" Syntax: binarize_set infile", __func__, 1); infile = argv[1]; setLeptDebugOK(1); lept_mkdir("lept/binar"); pixa = pixaCreate(5); pixs = pixRead(infile); pixGetDimensions(pixs, &w, NULL, &d); pixaAddPix(pixa, pixs, L_INSERT); pixDisplay(pixs, 100, 0); #if ALL /* 1. Standard background normalization with a global threshold. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixBackgroundNorm(pixg, NULL, NULL, 10, 15, 100, 50, 255, 2, 2); pix2 = pixThresholdToBinary(pix1, 160); pixWrite("/tmp/lept/binar/binar1.png", pix2, IFF_PNG); pixDisplay(pix2, 100, 0); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pixg); pixDestroy(&pix1); #endif #if ALL /* 2. Background normalization followed by Otsu thresholding. Otsu * binarization attempts to split the image into two roughly equal * sets of pixels, and it does a very poor job when there are large * amounts of dark background. By doing a background normalization * first (to get the background near 255), we remove this problem. * Then we use a modified Otsu to estimate the best global * threshold on the normalized image. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixOtsuThreshOnBackgroundNorm(pixg, NULL, 10, 15, 100, 50, 255, 2, 2, 0.10, &threshval); lept_stderr("thresh val = %d\n", threshval); pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/binar/binar2.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 200); pixDestroy(&pixg); #endif #if ALL /* 3. Background normalization with Otsu threshold estimation and * masking for threshold selection. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixMaskedThreshOnBackgroundNorm(pixg, NULL, 10, 15, 100, 50, 2, 2, 0.10, &threshval); lept_stderr("thresh val = %d\n", threshval); pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/binar/binar3.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 400); pixDestroy(&pixg); #endif #if ALL /* 4. Contrast normalization followed by Sauvola binarization */ pix1 = pixSauvolaOnContrastNorm(pixs, 130, NULL, NULL); pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/binar/binar4.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 600); #endif #if ALL /* 5. Contrast normalization followed by background normalization, and * thresholding. */ pix1 = pixThreshOnDoubleNorm(pixs, 130); pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/binar/binar5.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 800); #endif pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 30, 2); pixWrite("/tmp/lept/binar/binar6.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/binarizefiles.c000066400000000000000000000105411506303110300175160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binarizefiles.c * * Program that optionally scales and then binarizes a set of files, * writing them to the specified directory in tiff-g4 format. * The resolution is preserved. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include #include #include "allheaders.h" l_int32 main(int argc, char **argv) { char buf[512], dirname[256]; char *dirin, *pattern, *subdirout, *fname, *tail, *basename; l_int32 thresh, i, n; l_float32 scalefactor; PIX *pix1, *pix2, *pix3, *pix4; SARRAY *sa; if (argc != 6) { lept_stderr( "Syntax: binarizefiles dirin pattern thresh scalefact dirout\n" " dirin: input directory for image files\n" " pattern: use 'allfiles' to convert all files\n" " in the directory\n" " thresh: 0 for adaptive; > 0 for global thresh (e.g., 128)\n" " scalefactor: in (0.0 ... 4.0]; use 1.0 to prevent scaling\n" " subdirout: subdirectory of /tmp for output files\n"); return 1; } dirin = argv[1]; pattern = argv[2]; thresh = atoi(argv[3]); scalefactor = atof(argv[4]); subdirout = argv[5]; if (!strcmp(pattern, "allfiles")) pattern = NULL; if (scalefactor <= 0.0 || scalefactor > 4.0) { L_WARNING("invalid scalefactor: setting to 1.0\n", __func__); scalefactor = 1.0; } setLeptDebugOK(1); /* Get the input filenames */ sa = getSortedPathnamesInDirectory(dirin, pattern, 0, 0); sarrayWriteStderr(sa); n = sarrayGetCount(sa); /* Write the output files */ makeTempDirname(dirname, 256, subdirout); lept_stderr("dirname: %s\n", dirname); lept_rmdir(subdirout); lept_mkdir(subdirout); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((pix1 = pixRead(fname)) == NULL) { L_ERROR("file %s not read as image", __func__, fname); continue; } splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); snprintf(buf, sizeof(buf), "%s/%s.tif", dirname, basename); lept_free(tail); lept_free(basename); lept_stderr("fileout: %s\n", buf); if (scalefactor != 1.0) pix2 = pixScale(pix1, scalefactor, scalefactor); else pix2 = pixClone(pix1); if (thresh == 0) { pix4 = pixConvertTo8(pix2, 0); pix3 = pixAdaptThresholdToBinary(pix4, NULL, 1.0); pixDestroy(&pix4); } else { pix3 = pixConvertTo1(pix2, thresh); } pixWrite(buf, pix3, IFF_TIFF_G4); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } sarrayDestroy(&sa); return 0; } leptonica-1.86.0/prog/bincompare.c000066400000000000000000000067471506303110300170240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * bincompare.c * * Bitwise comparison of two binary images */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* set one of these to 1 */ #define XOR 1 #define SUBTRACT_1_FROM_2 0 #define SUBTRACT_2_FROM_1 0 int main(int argc, char **argv) { l_int32 w, h, d, n; char *filein1, *filein2, *fileout; PIX *pixs1, *pixs2; if (argc != 4) return ERROR_INT(" Syntax: bincompare filein1 filein2 fileout", __func__, 1); filein1 = argv[1]; filein2 = argv[2]; fileout = argv[3]; setLeptDebugOK(1); if ((pixs1 = pixRead(filein1)) == NULL) return ERROR_INT("pixs1 not made", __func__, 1); if ((pixs2 = pixRead(filein2)) == NULL) return ERROR_INT("pixs2 not made", __func__, 1); pixGetDimensions(pixs1, &w, &h, &d); if (d != 1) return ERROR_INT("pixs1 not binary", __func__, 1); pixCountPixels(pixs1, &n, NULL); lept_stderr("Number of fg pixels in file1 = %d\n", n); pixCountPixels(pixs2, &n, NULL); lept_stderr("Number of fg pixels in file2 = %d\n", n); #if XOR lept_stderr("xor: 1 ^ 2\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_SRC ^ PIX_DST, pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); lept_stderr("Number of fg pixels in XOR = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #elif SUBTRACT_1_FROM_2 lept_stderr("subtract: 2 - 1\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_SRC & PIX_NOT(PIX_DST), pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); lept_stderr("Number of fg pixels in 2 - 1 = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #elif SUBTRACT_2_FROM_1 lept_stderr("subtract: 1 - 2\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); lept_stderr("Number of fg pixels in 1 - 2 = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #else lept_stderr("no comparison selected\n"); #endif return 0; } leptonica-1.86.0/prog/binding-example.45.jpg000066400000000000000000002171031506303110300205230ustar00rootroot00000000000000˙Ø˙āJFIF--˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā âŌ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?ųūŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(QEQE-QE%)zŅIEQEQEQEQEQEQR­­ÃFdX%(:°CÎĸéEQEQEQEQEQEQEQEQEQEQEQEQERŌQEQKIKHhĸŠ(ĸŠ(ĸŠ(ĸŠ’(&ļÅČۈ¤šŅƒÃ:ũŅßCÔĨ'‘åÚHßČV„|ap@OjKŸųéOũ ŖÂOO‚46@{Éq˙6­+ž3›dV0gūz\ƒ˙ ƒZÖߺ߈\´ęÚd@˙Ī?1˙šŠÔƒöv8įĸõXėŗú—ū•Šė÷Ą¨hÖ59ōÕųƒZöŋŧ2hOųër˙ĮTVĩŋÂ[ôĐUØw–âVũ cô­h<áOõ^ŌŽ;ÉhŽ6ĩ­´}6Ķ‹]>Ō tō`TĮä)šēâÍNT?Ž?­xÅM ĘëX–SnŠ.ČĪ›€zΝ~ĩå‹ášŅˆĖĢ82m$īé]Ž“đqõkq$zė`÷Qmž=~ø­K¯ąZØųĮ\vrTۅéķņûˆŒ2ÂzÆåOāqQŅEQEQEQEQEQEQEQEQEQEQE´”RŅIE-QE,ÁTO@+BßÃúÕß6ÚEüßõÎŲÛų Õˇøwã Ŧy~Ô{É ˙BÅiCđƒĮ˙P€÷{˜†? Ų­~øžLy‚Â˙~ã8˙žAĢŅ|ņ ˙]ŠéiūãHßû Ģ‘üŧ#÷ēü ūåąoæÂ­Įđ —ÄR7¨K@?ösV“ā6’ŋë5‹×˙uĄĢ1ü đØ˙YĒąö’1˙˛ļŸü(˜ęöŽ?’ŠšÁīŖ éĶIĮGē“úVŖøSā¸ËĄÆsũéåoæõ~‡ž‹<=bØūü{ŋ_‡Â€æ=J_LYGœūUĄ“§ÁūĻĘÚ?÷"UūB¯¨8Ĩ?ozP3F5 ŠÂķF9öĨŠ^?*A÷ŗš\gę(Î;¨ęüé“z`ÔW•|KmĘģËHWŸĄaũ+€°;/ËÖ O×ü v¸’ÛÄiŒ‹$É8ŋôÍdĶg〚¯’5¸ü­rų='įT(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Šáŗēš8‚ÚiO\GoåZxSÄS€bĐ5It)g!Īä*Čđ'‹˙čU×?đ_/˙JŪņzõđގ˙€˙ņ5 ž ņLC2xoXO÷Ŧeû-T—BÕāmŗiwąúi.?1ZËāMlé'Q)‹q]†Qŧ3€;ä1Sé_Dû[Q֜úĨ´ ãĖĨvoÁīÛ(ķ­..ČīqpßÉ6Šę,ŧá[ Ļiší•ĪæŲ5Ŋokoh›m­â„zD•X=MŖŊFzôæšÃŠ`č)ģF8Ļ•ĮøŌĨ#֔”~”ņúS€Č#åį9Īĩ=rN>¸Í?ŠŖûNĮ5*ō(HôŖļ8 ”qĶĩ/¨¤'Z̍Žtë‘×÷lJōŋ‰Qų°Ûēƒ†ˇ`>š?üUyÅŠÍōãx¸ũĀ×MĻ1‹Y˛öž3ôų¯\ם6p~_ę+äß&ĪęũîJĮĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĢÖē.Ģ}ąé——éäĀΟČVկßŪ#đíúį§•˙Ąâļėū xÎįmĩĨŽįĩƟũuoYūĪÚ´˜ûnšc¯‘ËüöÖå§ė÷ĻŽ>ׯ]Íëå@ą˙2Õŗmđ#Â`Čú•Īũt¸P?ņÕŗmđ‡ĀÖĮ#BYŦˇˇč[ĩkāO ÚãËđŪ“‘ĐŊĸ9‰ÖŊļ‘ĻŲãėÚ}Ŧ<¨U­¸čHĀ隓ĮAQēŒt¨<z€ĄŨÖŗõËŸMÔļū¸éëøW/ [Z°Ž+BZQ‘ØŠ”qNšg¯ZŠãÃÅ!Ī"ŖūT‡Ŋ4ŽqšLsØúŅÁ?ãKĐū4Ŗ¯¸§ŧqNājE“Ÿįč+yåGPIįņ¯e„žŗ~æÚ3ú ų÷âÄ{1ÑüĒÖ9Í8ĻāŌ0ĐAÅHĩ!Ōy4œš\z\SéÍ*āw§tœŽ5äxâĢHôŌÛĀĨûDiˇtŠ7.X|ĮĐQ5ĖP!y]QzåŽ?ĪQųÔ6šō+Û\Å *älqŸN‡ōĢ"q¸“žãĩ)œ RÅ!rŲėqSƒœRŠ÷§ƒKša5täÔ$ä eÎÆ`OlūG5ČČ?zjxN1Wâ'qíRƒNVę?:]ãך‚K¨#`hОĖĀŦšÅŒŗŦ]E$­ĒŽŦHĪCÛ" ƒ[ąē•Rˇī?!U8#hlį 0äÖpņU¨%¤ŽE‹dedPH%Á`@ĮĘį§<ãĀķ¤im>ļŠŨ'~ÃÆ˙R??zĒ|Rķ…û%ŋ͕;\‘š|‡q‚Į p’:fÕŽĩ{ut‘ļ•4œ–y7qĀĮđã9,:˙SšuqܰāíĮWÎ ô ××ĨjãOÔaš9!¸–70`61AĀ`䏘œtéŸj[xuô"3,^X$åŸ,s!n¤60¤(ëĐûŠ-Zû2ÛI¨ĻŊ8Āx0Ũ’NsōŒį‘NFÔÅЈj°lq˜>ar8`O/nķÚ¯.‡ģNk9¯f‘‹iNwđz“Ž vĄŧ?eö°2Jbvg,6ƒ–R­Û9=s׎ƒít{ KļēcNĖÎ]¤$ō#é€8ö”ƒGŌĘC@$†ü¸ĸPqžŧœāuŠŌĶO†MéeqŒ0‰AāsíųTÉ"FqJG@ qS´Īĩv§jp2āmëĪŸ‰0¸ ķHŒâQ¸įŽyĢJN)y¤=i ĀÍpŪ'ĖđūĒ?ģp[˙ã^9ō>ėÛŋ0ßÔVúķœôëēTĸOiįaUü¸ū•âbÛĢY>?‡ō¯5ĸŠ(ĸŠ(ĸŠ(¯ąŧx‘ø7Lt]ķInŒĮ°ųEl–’v ėjEŒgœĶÕėâžxøĄh"ģÔvį#ūú­Mū›nÄãvæĒëšö4ūíúõŨĪŊ^íAÉJLsMn´Ėßšr°9$ņīJXg­ 9ĪzG8ęzŌž}Š7¨ëA•Ięnĩ‘ŦkŅi7Äî)% ƒîw T—ÚŋŲfļ#‘˜7Ž1õŲÛ$öĒGÄW7m%Ž›p%ōƒ¨’&enŧ ™ëŽ:BĢjĶ”é2Gķ %Øãe }Ūy4˛KĒKƒ´%&Wæ5eƒdOĘ÷Ī?'ħėéį[¨*ŪkÄĀí;Tž ë¸÷éøU„Ō5&}ך‘7“°ĮÁRAí+Øc#ÔĶ`đœb+t¸Ô.ĻX6 ‚\ãīëú ŗoá}6ŨÖ@’‚š Ār0{~ĩvĪI˛ąRļđė@ûĖzd÷'ÔūuxFŠ: })Ā žŸ•=x5"ˇN?Zz¸õ!‘UI'uĻGqŅŦ‘ē˛8 ŦAjŊž§iv]`˜3'Ū ŽHč}ՇÕOĨNHeČ ƒQ7ZlĒ^Öe#{ãŠäŽŲÖķĢĘÅT`jŽŸ>¨×Å'Fƒ( W”?ËøãŒgwû5 ļ¯Â.f{ądyo”Ģķ†š ô éË_Gt˜ÆúāˆË#ēD…ŗ‰%q†ŗ ˙´NkNãL‹T… ÷M•2.č8lŽ9Ī8āûƒĶ´Káí1$G(ėČKrp–fä  7oåR[é:eœ‘Ë nވ#V2;ŧđryëüŊ::ŪUxm"W!öüĀžŧžyīë@ŠŌ/õvą)į%cķ×ų —Îb@ G4ŨĒfķ|„´ž>b=3N )lmã?Ĩ# Kņ÷sNQ&å$ŒSv°?{Ō„b~˙#­NĒ9ųŗ¸Pˆ į'#žißģī“ëNŨyä͎DĒItéMķ”îڙ#­4ÜĮž[•YXePžMFڜK*Æe‹s\rsŒ}rGzÍŧˇ&Ũg_;~Ā€d“ŒįŒņīėjĢø–Ū5s"Í‹7’Qԃ÷ĘāŒĢß5Ą§j_Ė|˛ËŒ.GÎHÎ Î~Ÿ‘Æ˛œ´üäRöéM$įšä3ÆEƝ'¨`kĘhĸŠ(ĸŠ(ĸŠ+ę_…wfëÁV9Û¯ä1ũ+Đ"¨õŠÕAĄėׅ|ZĩÅîĨÆ2Cū€ÖG‚Ÿ÷–o×åCüÁũVŊ×MÆXîŠöĮøæ´;Ҋ01Hœ×_^– M#YüØõ ÛĄCF!I8ųwyč@ËIgoâ?ė"—L̍ ¸Žôq‡tm/R@ČķT8ÛĐôé<˛G^G4äR¸įš“M>uģX§ņ•3"‡Í9#ĐĘNvũ~÷9M‚đæT”ÉctČÉã‡ũ;Õû{ĩšYŧĐÆBĮhQŨ˜Žz÷úg'ŊY;:ŽsLo();zŠ‹z  v¤2|™ Ži†sŸšųÕy5I„LáXíĮ1!yéÉôĶŠ[ŠØnā Rž`$qĶ>ĩöåŠ18•‘IG’ú įÛđëPKâ 8$ į’<Í­ō0*Äđ0G~*Yu‘÷1ˤBÛAŒ†ß…VīŒpÃõ=ĻŽ¯;I"ŽvÁXüâ26“īČÆ1ę@Šm59Ĩšˇ†[!3o#{€Ŗ#øzŸsSCwŠ›yšk‚M¨bY%6qŋ$1ÚĢ™uuDķfĶb2….HÎS$˜ääqí“RŨ%Ž.îJ$b0‡k/8˜îAߑWėI*ßBÚÜB&VYQc ËwķÁ۞ƒž3Q]5˛É$ŋÚˇRÂ҉vDĖŰFõ$Éį8䜋ŅÍĨA(…dq%¤iģ˅S"ä€8,x듞ĩNŪ[fˇ’âËJ˜^$"S‡2Čå6IäĀÎ=6ãkˆe?'ž0Ėč6ō ŽoĄ$sŅqVãm]ŦWū%ņ,ŦNawR)’x rįŠžĘĶXYíšQk ē&‚"Bôm89ĪΡ‡JQ(=1L~{W5ŦĮē-b29{bũ:ūíŋž}Ô~[ېs÷TūL?Ĩl؜éņį¨QŸĘŊKÁŦ ÷&uūGúלüg‡:uœ¸û“ĪÔ7øWŅEQEQEWŅßgßāõCÎÉ~ĻŊf.EN2qŌ”Ÿjņī‹Pwv@ûöāū˜ū•Ãx2]ąZļ/bGõ¯}ŌÛ%ŦYĪâkTtëڀrzæ—r)÷â˜ØÅBĶ“,O2,Ž HË ļ:āwĻ›¨…Á‡wĪ´1Ī$ôt˙’*Ŋίggq ŧŌí–uf‰pO™ˇôĪ#9=Ē1ŽiėˆEʖ|aænC@ĪdoûäÔMâ-8FÎÅJîasÆŨųāwŸËڙ/‰lĸm›&o™”`Î1“–#ûĀ{~ŪžņŧOkk,Šp†VP„ļĪ-˜ŒüÛļƒũiÆūūæŅd[Imˆ¸ '›ËÆw.G<:tâĢĮqâū=c(Ģŋip1,Ä2ƒÖA€Ŗ;UymŧEqåJ'ļ‚hŅ€$ņ’{ŽĶžŽžŋZtzVĄ<ūzęQœe|Åų™“{šÆFŅÁãëm[{Ī0ß<Š'yBė#‰ĘōÄcž¸Ī^yĒ×zf™fEÕĖÎVYKmہI2oôöŒį€Ŗœg/’×HˇąkÅŨ}šEÜÉ;~íÔ*äí8Ā$ãŒd͚īGŗOŗGeæÛ(gŨ—Ã!D^į¨OƆņ%ĻÁäZģČw8 S“ŧ.x$ķģ=:dÔâîI#’ö;į‰Ä+ōŌ&@Ü~LÉüsSXM}{ŅŨŖZo‹äxōI,;÷)éŪ¨iÖzėY{™žfœdŒ€'ĖNãŽĐ;íŊZŅ“VœÅ5ü¤(ûņí –#=6g>Ŗ•=A§Gáû˙ßšÕ6œšcpK˜Ō0ų:lÎۜņĶ5Ģ>˜n/-įgĖq!O)“vs÷ŽIęWåÉäŪĻĒÂ#fÖâ{’šÎP“ŊJ‘’Ŋ9cõcí‰-|/ž ×cˇ¤‰Å íÆ‚01qõą˙õŠ4e-öėTUųÉĀGŪŖŸFĪáÅhZÛ­´ P¤Q§ŨT߁OaDYī\­ōâL`gĒ(ēôĢÉģoËɨ†ŖŊÄëp1 bGbŧîG¨Īj„kví>ÄK‰™åā7ÍÆ ü' ôõË}SP™UäĶ&fa–Äl~PĀrNN?ĮjąduV>Ķfఀ䖙\q¸`ģōíŨŌ[ę7/cq ą'–š¸Q!ÚįrgdtOi5 ;ŲĻNĸļĒÄm_-X€ÜFrxį=;wŦũ֗ĐC/öʗ„K  ‡iÆX ôŊ9ü*´Ššrjo$¯Ä’eÆčú‚}NīĶąÅR0h~cķ\Å ųa1`ä#äįôøķÉĢ‹{aÅ$uەQĩ`Ĩ˜eKs‚§@ĮNÛfŽâH´IÚdŠI•g‹w˜Āįo^¤ąĀúĶ”Č% ‡Ŗ•ŪT(¨ėSūj´Í¨Äžl6QŠō|Ã2C$€GS¸m8˙dĶq¨IϲJą^<ČĘŦÁw.āYqœāŒu#ۘē^Ąö+{ioH¸0a˜Îā’­÷¸ëà ķÎjX,â‚ÎkkRI‘gd|Ēž c“€>‚ ŧŅė’Gž{€|Å,ŪT`) …Ëdã¸ųšs™…ŪŽĻ.nĖD\ĮûŦŠŨšv€ČbN`zÄįĩ&Ĩ¤éßI-ÕūÉ[q(ŌF1…ØzŽHĪSü^œU–]âȖ–Ū{kH)eTã9Tā`ĮØ m8Æ*§•áô›ÉXdgvlT™ųÜtĀų7~“Ö‘u=‘ĻKHĻc[ČVfãÉī´§E2ĪUĩŗi–ÃKxä’Ug%Ô}í¤šÁcĀlœgŒv9­;ËũFš!‹OyQcgųOęHaŽÜxUIe×f1˜íÕBģW€WcC8'’ãžûq“wOšĖVõôevōũ˛xĮ—Üœ“Úŗî ÔDŽ’kP@K8L¸Č`RWhÉ1ĮLˇ°Ģqé-ŧ 6|짏raÃ;>ßŊžŦ9$įo#’+6]MŗtˇšęT%…ČķY8‘Ô˛đ>aŸ_ÎĻģ‹L‹I€ˆäŧ‚Đ xÖÚP !—pĘ ,¨1ëøĶÍæ‰iosfd; Ib`í°n ž{d‡œƒß˜ŋĩ´xgeŠČ ˇĘXŖ^UAcœ÷ŨŠĢ2kĄĶ'— #(;ĀmĒGy`Wˆę1I=Ū˛†åcĶŖv‰rC‚$lŒYp6‘ÉĮ!¸āej96Ÿō –oNNNĐŨŋ‰}ŪMrģdžH¤•ÎĖœ äž0p^EtąÉ‘œ}1OY˜T‚8ČÎqųū5ÕmKLâü™<š ˇ ĩ[ã<2ūtŲõ„ƒÎų$e„í‘×S´>9 Ÿ”Šã=i¯¯ÛŅ˛Û™Õ< 2Ã2yyųsœđ984oéÄ!ûO'îáäsŽ‹ßzûօėW°´—*ŽPī“p~đûû{Ō!ÃįžĩÎꉋ™ûm×ęjœYÍI{s-ž4đÄŌʋō"ŠmĖxëPAq¨ÜOs$6F— ΁Y°Āu`9+’3ĮLãŧ÷#S&Äyļą0œŸô™F[æ ´Ip=HúʑŪÁrƒSÔ X™Oî‚ãwĘ:ąžOjŠĨ•ŊŊŧđíHãUũÜĄ7ąČÃz† sÉ9ĪB‘h1žZúî]ōĢ#:Ą˜’ģ~NGĶ×Ŋ$pipXęšzLČŗ4qü˙xą!˜įØ6;ōqD7–ĸ3OŅįÜWĘTb nŒõįÜķS\—ļē„éú4l FO•ōFqÁ럭Ow&ĻļØa2ÆÄ`>2qČ'ƒYâMjYYíÄr2“‰šĘ–f €}†xœ_UmŅ6Š HÄĻcUųX‡aÕ06uūéæ’â IÚ_/[Må˛ą„PBĶŒzƒŸåšl’ÁŠÜY‘qÂõÎpsĶķ—ßémŠ]Č­$ŧļžLĄ~i-•eé‚m­ëÎ8¤›Ã×SŦõKœ:“šøÜgČėČ u֏jÅVâé<‹drA(Xo>ŌŦ ípíé€j9Ŧ´;; EnMÂB¤ˇ•0c•@vŒw ĢלrOSZW ĄOutn4ąŖM0ˌĨ 8Î͌õ#EVI<5ļĀĸ¸MīnÁC°˜`ļGģ uĒ’ŪøpĖ.… ÅŅ!@ŽĨSŒw˙\ƒ9vņĐh÷VW0ĘlĸōãVÃĒ{ũĶëž{ûŠēį§­Fŋ>•‰Ģ([‰|ğĮŸëYņš§Ú;dHĘĄbîÛU@ęIíĮ~ՑÚcEįˆR=ŦW…Î ÜJœäc?ūē°n´Ë›xãģŊš?cœČ&'īYA$gå3×hę:Ãk&ƒˆ­ü‰K‰‚ųyÆĮäôĪŋ™ÍXCbútv`˜Í2ŒHĻR Y°[h8΍ĪĨYTž])äĩĶ`ĩģČXÖHĀĀān<ƒ< ņø€˛]knĘRÖTŒâL6Ūzpüœ`úœuĻYž¨n‹]I´FZ6Ī™ōõĶ?ūžÕ Op­q ÎĢ HŅå~P`œ)ퟨéKeĻKcäŠŊšUˆØA @R cqŸ÷%?°-ķy. Æá‘>RēdÍĐp1ŒSWÃVeB´sIØ.˙ŪÎO¯=j喕mcƒon…(>rF8Á>— žZ ĄČ%‰eÛEÆĶķ ĨG;ŽŌ3VîåŅ>Ã-Á Ūĩ —Zņxĸ6k:ļ (uSąvî98‹dú\´ūĶĩšúxdĘ*’áJGe%ŠŒúĢ=´yė ’æ÷XōāR˛Ėrčŧ’HpFI'Ž8Č+é–w*‹q¨9û\}›Æļrgū°Ĩ}slĮĩuztĨa‘\ˇcßáõlglŖųųåG•âˑؕ?‘úWĩøMķ¤p~čĮōŽÜž3N~4gŨß[Û]Ão3i‘Ų|ĨF>¤¸Å`ųē ÷ZŌŗyq*FiļÍÁ8†#?.;S_PŅôëÉ­ œ)hb Ą~wg—ēĀmÄûŅ&ϰ >K H…ŊÄ{Û0Ęã^€ņ…g=6ôÆjWÕ¯î}ŸOž&ķc¤Vûž` Č@ĀÉ<ũ3V-.īŽŦfķm ĻBņFĘĀ•p Čį-íĐúu”šĶŪ)쎊;r[p\d ļ9Ū{˙žĨdO ę ŖGks{ B-@™î$Ũ‰qĩ›;yŨÉ=ų÷Ķ}2âō%õ-ŌEt$¨ĪL2Ќ ĮNztĨƒDŠeˇ’éŲæˆD[?0ÆrÃqnNážÜ ĒÖ:%ĻŖÉZQŪDŲ( -Jã?.§'âŸ0y¨_ˏËO0I!Įė<˜HČ=8Îy5^[ũ}Öļ0Hc!´ABŽ#rFėc‡SĮ~ŊÍLúŨšÁ,,EÄeXŅC Ą˜ƒƒ×ļ=OZ}ÍŨÔã­žšō+ŠY%ØØ' †ÜņƒˇŒũŪp5Ŋ׿RŅéą+ˆÉVqü[sŒS‚GåŒķļ×T™ā•ŧ‚UTv`ą°|–Ā<åGņŒr ¨˛ĩŠ`D—VÃųx‘ҰKPqĩG‡#ũījŽ]L/&¸ÖÆD‚r¨v”õËō‚ŊûŊ˛jTŅtéYžKÉq>đ#`ŠâĀŦšnĀ=@}cĶæđüo,bv*ak|Ī"éžE‘Éåz‘ŽĻŦ§ü#yČF-ÕÎāĖŲžw;`úž9Å*ęZFØĸ—KM҉"G3 9lvĀär=ęÅžŋĻžÄƒOÂĘļÄĄ†O{ ôõ`:šŗ?ˆž+ÉíaŗyĨ‰‚äČ䎃ķøĒĶëēŗC/“Ĩ] LP•rĄp?ƒ’vŠįŽG#Œčé7WĶJņŨ[ē*†"Wųˆ@éî} Ņ~•ģÖ~˛ŋ:°Į(?™ŦeëVãÃ.1׊j$6*oÆ8U>Ūô6ĨmļEÜe…įFØĒŠqcƒŧ;zúSÄēx‹{‡ŋ–Š€ä.HČĖl?*„xŽiŒ¯kĻHéä#ÄŽ„ådcœũÔķî)˛ęzԖōŦt‰0˜4ađ(d%AĀãĮ<œ~"ōOĒIÆKuIą'– `æÉäōzwöæœvúŧˇvͨKoą-XrØ|6ö,˜įøIúļÎÎú ¸žīR÷ncœųUsÛ8ž;öéT¤Đ~Ëd‘ĪŠČŅėŽŪ¨ Ā߯îų鯯)[Bą^öGc#IÁO€ËpwāyĻ›mÛÁj×hŠnŽ‘9*@$qØŋĄ9āĶíßKˇ†Ūņ Ÿ)0‚5.䀎Ņg?(Ũ{ßÅūÅūĪûMŊ‚ĖŸšWܯŽUp /8āzcŒÔŦY1‘į͇›Ŋ¸EÎM›‰}¸ÆPzoiFēėcv%7˛–2 ¸Ërāũ<ôĸ Vįí1Ëũ™<0NĻ>[¤*mcōõĮgß"§ŋ“TûtÎđĨš “œ°#Gū/¨§JēÅĩŗÉÃųRŦ‘Fæ/Ūl?+œ‚ÍüYė6H5Ų"aô)#2xÂgîcäĪ÷=@ëÍ:]#Q¸s+j&7U’8Ų’¨Î Fq“Í9ô{ƒ4ˇ˛ JdžŲãĖÆrHë 'ŒeG›iaĻiú…¸ûkyčĸDķ^čķԁŒgšąÔ^樧Š9“†~ ,…ųIé¸zũ܁T“FžęÆXĄÖÛĘfE™Ģņˇ†gsOģŅ-âvžķP•|ŲH,€)fpąŒį98ÛŽx§ĮiĸŲÉ‘_à īvInĪl2CĮąôáĶCĄÜoŧtiŧ÷XY•Ã3mĀÚ;¯8ĮJŽkŨ)tԒ (į´2¨‘ |(ōwЏûĨp8Ā?…6=gOYvÛiŲ/1@āF›ŸzŖg#–ČņN\Ô$žƒKœÄę B¤rĖ@Ëm äČŠąc¨ę3Ėĸâ¤.ŋyU˛ŦJĀ|ĖOmĒĶEŽĩåã@V5hŠEšPĀžĶ‚N3ÆsÛ-Ū™qqq,ŨÆbĸĘ≂°8Āã;ČÆ=ø‹¤M<īŗW—dNŋ"ŗąBŋ“—SČčĢYķh:hŧžÛÅ g3<›Q€eŲģ$cĸHIĪV98­x´ 2äÍ.ZāI#Ԍ’„”qū­8ö÷ĒųđôY,x?1‘ä•€čۉ'‚<ĐAė_ŽjiîlEžü鰙ÜF‘Ęš,žKÛ2sú÷Fņ‘nԈl„HÉHą”Ÿâ˙σķ=9­-*ņ#´žû=ŽÅˇf#if3c+žpŒ“ŽƒĨVūŌŧ–9žĪ¤Ëgq4j|Ķ•ˆĪČ2Fs sĶ›WWZ¤ū•ĄĶP"HĀ~đV‘ūĪ~3ß5•æŠ5ųK›8áĩų°l°Ásķs‘ŸĶŪ´ŸjšÆ}jŽĒŋqģūG˙¯XĢÃU¸ēUŋ˛i¤K¨ĻŒA.„t}šÚIä=ųņL:ļ“1ÚŊģNЏbXšã Ėw`u<Ÿ­ZŸYhėŦϰĩwķ~s§$n¨ÆFī›=qÁ5"ßjWvW†S ÁÜåÉäā:¨ëÆqša“VķĘÁû>îV ė3NFŪ œyQÎĒīšwląÎđ)&2A FOSÆíŋ€<ŠŠÚÃRŸÉž{īß.Õ}Įq]¤n\.ŅķįĐPŪ¸xĄęOål´lŎyū#Á'Ÿ`ALŸEąˆ‘qtpˤyŦ˜mŋø‡ļ¨ëN‚ËKŌÄéH ‘˛)–U;€Ü[¤eÉĮŠô­>H™nĖ}ŌîËŲ‡‘‚#R?‡Šŗ hō[K”d Ęc–, äœ8É'ŋךŦú֋k[§’Á†"Š0Ë!xä@Ĩ[ÔnâG{xėe¸g‰$@vˇņcއåũî)ŅjWSŪD‚ÎhâũāųÃa°X)$¨ĮÜĪ_ãjKÉõ4›[8šFR3nU;“×?)søRLēĢęq\CHDHŽ›Á,7Œ‚@w5%ŦВģšMŠPĘĒæ3¸Ģã.}zÔcę =ÂßyBVpĘ÷€Ę1Č8Éô˛ßé¤d‰ī~ĐÂ)C4™ØčNđs”A€zā}i—öŠˆÆŪÉ^uC; gią<į$dcŽG#*jë ŧš~‘,†GMíš›!†ōx @nßx‘ÖŽ^]jđ^\%­ˆšˆ„1îD`ā7<Æ ÆsÍkYĩĶ+5ÜBŲāE!pGŋĘ0}šúššÚƒĶ4€Vn´šŌå>…äĀ׌üV„.¨\†‰?FĮôŽ7JmˇōŽ}é˙ęŽ÷Ā’ņu˜ėÛÔū(ÕŲëã6ķĀ×ʗņyÔ?ķÎg_ȑUčĸŠ(ĸŠ(ĸŠŋĸH"×l\ôķĐĄ8¯ą<='™¤Z7SåŠŪŒNr8Āô§öéY>%O3×ËÜGģō"žj×Ëņ5Ģgž_ķųרø]öÜæEz5Ą˙F'ĸŠœRņéŌ“?fk7ÖÖ6Č÷H]UUPËrÊøâûNH/Ĩˆ9¸Ë:üŋ!$`pyÃ`~ŅŽ–Sęms4‰—,r͆Îņžbûp=¨¸Đmíí.noîd12JûH>Ns’DCo—(P­‚Íŗh'‚o\v¨l—Y[¨ĖȋI“’Kƒ,@Ā$ŒđH8&Ŗ{eæķî Ĩƒ+§RŖyPxį–SéōûšžĶMžxåŊ‘åy|ŌPm-…U9É'¨Ī늩wĻX>ĒÍ=ËĮ<āHĒN*˂ Č9īüMøWz1ˇˇąв (‘¤¨ o˛ã’7r9<ûŌČē&ánÎÎČåvndĢõ`y=1Æ*Ą›Ãí9ŊvŸaCŊ¤‚Hž^~bÃ-•ĮįŌχTŌ ¸– ė’ ËGķÆ3Ī8sũ@Ļ[øŠO*~Ä I÷Ž%ËļV" `Ÿųéø bËļ>23™8=0­éW-oĩ IVh$†ßÉĮ Åw|„ÅAįs ˛xHE-ãEĩՌ‹™•†7Nc oā§#§Ōˇ4ŋĩ+Η“ĢąrbäƒĮļ3īžØ­<ŌņԐtĒzĒgJģÄL3^;ņUmĨėmũ}Ø˙#\–ĮûHƒŪ5˙Đ@ŽÛÂNcņ]ƒtÍĀ™Įõ¯Dņü’Qšų[_Mž!Ôũ<9üÎk:Š(ĸŠ(ĸŠ(Š “ɸŠ_î8oČרž>oŽpķŽĸ3ōŒtŠ*–Ŧžfz˜ë *ųŸÅąų:œ„˜ŽûĀ>Ōzq×Ķņ¯Oŗ?čĢĪ ~šĢ9î(-Í&}{VfļĐ.žō\@ĶF¤‹¸“ž:ŧ1ß<ÖUŽŠ¨H`Š]2v8d˜‚ŠÄ”ÜĀmãsĪ÷=Å>iĩxõ ¤‚ÔÍt1;c ĨwV\āäū'ž0Æ|C•SŖœd€99ÎXÉײŽõcP˛ģ—RŠ{IãˆėØÂCÃæ?(Į$rBr.´FKy’įWō✈`OßTE^ ķģwLd°ĪĨY)’[Ų]ËîäąĮÎpXN1ŽœzЃHŅ _,ŪXņķJ!!0~PHĖDūxâžtŨâՖ;—uķ#*JĖ ;Ŧ€dqÉaČéŸÂ§‹UĶ.ŦŖã–ã"h¤„ąW‚›‹2IČíÆGjYum>ĶV’ÜÁ1´0ÆUP0f,žš Ŋ‡öĨ‡\3ėÆC €1ÆXĒ¨įũaĪNŊ)×wōÛ&—h~Ύ~ ÁGãļ0D|dģØÔvŦũžōg‡mÃhĸwRŪų^¤—hĪčH9VMqeYæŪ%,›‡ åGĘN )ŽøĪzlš-ÔķNŅŨˆ š8*n9īČrNsü"‡Đ ]×猝ļ0‚Cō•á2Á‰8$ Éô$w¨á](/-Úí#V$fHōc3‚ų ú@t-=æ Ō!ŗgpw;įdf‘:÷Ģ"+´š¸‚ÕīäIܰš2§-!ŪĒYF@,Ü ō1ÔÔ2kÚZÚËö( kĨˇF6(BLd¯]§ļ1€ØĪĢiŦGu+ÅŦˆąŖrHíb¸ę8ëPZ뚅äeĻ—†Ų¸ ķ’ØĮŨîá°H8#ƒÖĨkÍĄŌâ%Áb$`6p0ŋ{¯ęjGȲ…Xĸ“`ظÎãžKŒcú€j;Í?_žļkydˇ28?ŧÁ'Ėų ÆõĮĻjÜVÚōŨ$}D%fxÆ6”ČĀ`# ž7{Öģœōjŗu5Zü˙ĸ¯–Āü‰ū•‚ßxՈN1YחúEĨüĸâĪuĀ+ķė.NĀ0Iē˙ß'ŌŦéúėW‘ZÅnņĢĄaŊ€čHׅ'¯J™īĩŋ)„TjāI€Í¸P6ŒäpĮ8'Ô\n\Å$.‘Æ7—$Lv ”,p3ž„ôāâ˜`֑ˇMŠ[Ĉ`ģØĒǃō ’Ct ÜgUkM*]‹mēOŲĘâ8Y–ĒŦNgæRy•#ĩ[Ôôë}A"×;YTŖĀS’Ŧ~öšųTŽÆ“ē é.Ÿ¨Û"‚v°`HöÜ öĻÄúŧŦ2ŗc1áŨ†vÔú}Ōķ¨ŽolãŊ”>–ŽŪkG#ų[‰ÄK&z`œ"ņœüŖŌššļ™cĶ•pŠ–8ÕJģpsãĀëD^!;yv°íÂ" 8#Ėå‡Ą¤Ŗp뚷Ĩ}-ŊĶKi(’&C+ čIûŋ/8z’: ‚k5æš<`-‰ŗṁ´3˜Œķōū}jԑjBõŲ%m­.VM˙(ˆėā)8Ü0ŨGãÚ H5ĀwM}nÜš !Ũüeąß€;ÔPé3dyjŠļÆØB­’BC ņ‘Āī“ĪL>]1Z$ÚŦÍ ēĒ8 H,ŅÃ?ŨühÅ †Ÿk2Ũ*l‘Ĩ˙_äŒģ<)’ÍA$:3]Í)šF›ÎķŲV|íqōd*÷ų€÷ČôOĄXYʐ…yf)Ŧ’ gkž0ŨúįOŠi1H°,ĖcvICÆĨ”a÷ā“Īúŧ^:ņSéēÜwwąÁ>J8I€ eļ ‚Ų=1H5MUbxūĀîëæ#ąz`mÜā8čOJt­­É~Ļ8UcBŅîČÚÁ¤vŨũB.FGņŠą:jķXŲĨ´‰‰…ÃHAųĘ`` áŽxĮLsž,é6W0j77[YäPŠC°v|ŖŦŖÜŽkl9ã4ėį¯j_j‚õ|Ë)ĶŽäaúō‰ąŦēN!˜äŋã^c§ą:…š=Z1ųî#úWcĄÉåkÖ2vâ3˙^ŠŽ.į”zŌžYņjy~*ÔWŌ_č+Š(ĸŠ(ĸŠ(ĸžˇøuuöZļzÅ˙ßH?Âģ¨H)Ā#ëRQÜĻûYķē6Ĩ|Íã¸ļ¤mĶl ~†ēŸ͋¹ûĞž¤Ÿë^ĩhÜ:€ViĒz“\Edīj Hs´d„Ü7;ģˆ uŦc}ŦŪM§šŖ;LĀ~eÁę€}ØøÆpū Õ{š™8ã7Fˇ9—ÚtŽĻB›‹žŅ3ōĢpwî˙uIŠî/oÚÖŪkm?q–s‡k#íܲF2xĪcTŽoĩ¨TēŲ!BÛT¤[˜Ūsüpąđq÷ņœŌ=žēŌM8ē†hÕX‚žaČĘļ9dį͍$UÍJÚkģx ŗEl‘Ɲ f%N× ŧ‚ŋŨĩė*ĩļžN’Öˇ”—;Ÿæ¸Ëd8=IHė;õ0ŪčlpÉ,×i’@Í$ū^6ųČɰ#$ôõÅ?ėšbyIYžÍāģ3°Âž;Ÿ ô¨ä}* ģŗMB°Ę!y;îŪãæŽ3סz5­*ü¨ôōV]ŦQR0tžX<°Č,:ķÅ"øš_)fĩĶ\ĄVaŠ,Ā&W !IĘqĪ WąŠ4މ¤2ō@v.ĘØg_îÎĀۘaČÍIvú˛YŲ >Ō0áLŽŠ„PØR NzũßĨXŲĢ]XĖŗI‘j ‘ē×čŲũūĩΰ!ųįžõ`ėW+F?āõi e=ŧŗŪģČdP­å‘š”;ōG9sΝŽ)“Xi‘5ô‡rCq晕va÷ˆĀÚĮ?ÂHči‘Áĸ[B†@đ1…AWw ¨Æí§uūīĩ@—zZ3ŖØāĻų6˜ËmąMĮv1÷{sĮĩ6÷Y´Ž9Ú+bf ĶĩAÜ"Üy vÁŒŽzTM̈¤YŦmX†Ā”d’TDĖ8 €Ŋ:‚;V•ŽĄ=Ôíļ˛Ā…Ŧ ’WēŽHų‡^*­Ĩî˛đÄÍVM‘—’EęK ˙.áĒOԎ*Y´Ā…[pß0RƒĐ É8É G\A階î-yŧ‰U—w šÛ“&3מ؊?ŗ57}Í~Ę~\˜ƒ‚Äđ ã9^œŒ`ąaŖ=ļ›-¤Ō‹€č¨|Å$Šb?,qŽŊi"đä@åî'“%Xų…[%B€yįäœääį5$>ą†ˆ+˛ ‚ø$l1õ?tŸįN“Ãē|ņ:7˜ĨÛqq#3}ũįīÔՏė[ R0ņhŲ[Í` ąęĮ“Ŗ>¸Ģ‹„CˇhÆBņøU­Ë,ä2iË ƒĀ❰§@ vÍ8ĄÎC 9削:QéN´ã’:SYr¸ü+É~ [īđѡđšOĖö5äz{m¸´$ô#Üd˙3]]ĢųW‘ŋ÷\ĘŊ—X]ÁŸũŸĖWËž=‹Ëņ•ū˜0üĢ›ĸŠ(ĸŠ(ĸŠ(¯§>]ųŪĶÎå†ĪÅoô¯T€ĩ.hĀlƒ_8|A‡dSŒŦŋû5[đ˙é‘'Ŋ˙Ų_ëšö{&Čqߟʮö„÷¤ĪЍnžTļ•íãL”CŒ1ė:æ>ĸš„˙„’ÚÕŋv GÆâœˆ€ī7%ķĮˇ|š[k]Yæ3yņ “2š !8sÂüŧ#ęȤŅéWöúŲGvÂMŅyM9D*’GeoN¸Ļ S ›­BQ#)RKŗōɡf#‚x8ī˜¤Ō4V•ZMELƒ-$YųCāŸ—,pĖNsŧįšŧ?Hæ|ŧ ĖĢ ’ÉŸŸļ{ģļÎĮOo6Åâ†9ŖTGm䟑†2AíëĮži4ų´Ģŕ­,`WŒŲ寀T`0; ¨įĄĒį[[ÅX×L™ár¤ į{`ā)éŗvyę8æŦGuŠ­–žąÚŠ™í7ȝ(WŪÁI'ôü*6šņ [Švë#oŨЅÂü§ī÷oČvąŖq/Øā|Á, ļāoÃIÁÆĶĮÕåyÖÜČüģųcs9'ŽxŠ-,Ą˛ˇ[¨‰ÎĐŸsĐTásŸ<úÔ  āžM=L~Ļž†0vã"Ĩ.ŽOČIŒĶ”€ œķÚŖįœÅŸLԍŊ8éUߨgÚH: ¯ū„+Q‡5$"Ģj—ˇ6ŗDļöop7c´œ Ŗ p§’pÃTČl-ËÄŠ‚ÄŽ 'ž .H ĀõnŊjõ˜ÔŌ;“r°wō7|Ŗvįgž_ŠÉoj­m ßÚÚĨŦzXŖc°ą%ŲK#HĀę$ŲũĒ =,ÜÅÛ5#)aĶs8!$ÜųųЁ“°Žx§"ŦŪéÚ\đÛ%ŪĄ‘yÚUËį É#ŠÎ8ĮŪúUS6‰t¨âMÉæŧøg*@ ВOéŠtoĄ#$ø‚V519Q°7 Xcnv­%˛˛@†ŌČ´¤Ž*@Ŗ$•āûĐxÚ1RmÃĻ:sJyrĄĀö¤ôŨÍy$}*ĩ;2*Ũ&‚Ű:)āžųןz[][NģH|̈ËĖĄ–=ãwMØ#×ŠÛøŽÎYä†HfŠUrŠĻ2åČyā($āÆÄž€cž¸køˇKŠ7īØĨ‡đ䕏Ė8ĪB׊lž)ÍȊŪĐē ¤ŠÄæÆ™'*?=ŪŖŋ¨ËsG§Ną:UŅļŽJmÉ ~÷õö­‹­kí{ ˇˆÁŊ>} „œ‚?&œT–/ŧrė’$–EŪD‡åV1…ûØL’=ĮSJúFšrĄfÔĸVYâJœānā˙{Ú¤˙„vúW&]^vV91“u3ŧ ąČĮ/íƒgGĩƒN¸’Ū;摕žx¤^KLO'åã=OĨnįߜĐ3NĐ~īZķ/!˙„YÂ˙Ë+ŧqŋ˙ÖüëÄ­˜yĐĀYd^OĐæk¨ž`ÖŊŽõ„ēLRõ܊1šų¯âlB?1ĄSúšãhĸŠ(ĸŠ(ĸŠ+č÷‚Mæ)%R>ŋ7õ¯n‡ĨHF)Ãĩ|˙ņ&,K¨.1†'õÍeø&_ô‹sœp?¨˙ŲkÜė[¨į”SôÆE^Ī|ņGņRT‘Ë-ÄpšŽg•b0įXVĩŌģˆZĢc‡<šÁ: āö'ŊWŸJž'ģ—Sx! æJSxĘ LœÃ)۟Lց2ØÚÛÆ÷eŧ¨ÕefŒŗ9rÄg#!_ņ>Ւ4­ŪdŽ ŧ æhЍFārĀįšÍ‚ē6˜Ĩ%#äXåSœ“ˇ{)yÎĪNG¯5Ą—d‘l[oŨ°å˜ŒÛ÷IūīŽ2#§–ņĢ'0ČĨEG §č)Äägvš$÷æšJã>ųĄJ“íN'žĪsHXįå|į'ø°1JŒ’ ĨPëž(W„Ǟ¸`Ü_Ĩ+<(Ȥ}ã…÷4×Ŋ´‚ˆœáYÆxä÷íPIŽYFb,VX’dbœįŽ}p Į\€pj˙ۄs[ÄaaįUŠžÃ8ÖU“*ĒgÃFT.GĘx *˙][/ĸi1Å{ų~dEã;ä!ÕcŊGĐûĶ`ēŌUû8Ķâ +oŽb‹—“t„“žz‚AõcøČuŊ>Ūv‰lÜæH0ˆŧ’Ėŧ`ô'œp ŸIÕŽ//ž)m qæE.ÆÚŖj|¤•9,zö#ŪĸƒQ×å"Įj™PŖJŋuNÍ×;rÜ˙8÷ŗuĒúŖÍfdXš8€%øV÷`ŽAQ÷O?Nhļ‘ĢÉ2(ŧ nķ!ķî+"†8AŸžšÎ~î9ĢÃDŋmĩy‚†Vt !Č[Ū8#jôė}qPé­c{~.uĨV2gĖČE9%¸?=úž1OĶ4& ˜žÚ˙í[ô"U$dˇ]ŖĄ9ãžßjéw~tuæœ($â¸F[Ãēĸ€I[€Ãņaū5āĒvÜĮÚ8?S‘ū}̍ˆå5ėņˇ›áKFëē˙ôųëâ¤;&[˙ÄÃR\}āHü̊đdĨgˇąįķ˙ëūĩīēaËĮĘôëÍiņŒĐ: 0:˙*ŽEܤn+‘ŒƒÍs‰Ą]DąĒßy>\" !BĄ˜.ļgąÚIĮ<ķQIᖞ!žūáŌD*āsQSÅŗŒ3ö›5$ž´w™Œ“î”0f%IîÎ܁‡qö Åė7•e•$g_0)ķœq!ˎāžßā*s¤Ų•Dx’4XÕ%vŽvŒt8ÉëVb!]‘ĸĒŽF*B ãژg…wîtųHVį‘žƒÛ9$ˇ@™Ō5'œ…vÉâ }BŽ&ÁßÂØŪ8úqŸLІMfÕ,Zô$†%uV ™` ĢnĮ F }=Æ)m5ĢkĢ—ļ RtgV Ķ*Áx=QMēÔnŌŅ%‚ËÎc$¨ČŦI7`Ž9åGuãœö¸ŧ’ŨdŽŅ„†uFGČÄaö–į#ę:Õ[‰ĩdģV#Ke.ˡi$ü˜ÉĻÉôĀ­ÆŠ<Ėī5œ2Lˆ%˙–|ĪŠäŒr:ĐŅ í*Ú'ÕŖVˇ“>q'÷XĮ8îáŗôõÍ5Z`÷‡ZžeŽ?5üĻ FÚ%XcԞ„ 2{M8ZŪÍoyy,‘¤’’Ŗ*Ą˛šo aŽįžĩÎ“§ÜöķGq!e „c•ūHārVĸšĩ–úvūĸ” Ž››%ÉÜHĪŗŽņWMÕÛ@Š„‰BȇnĀT…ûŊƒĄÛ2%î°.#Š=)cfvÚĮU23ČÆ äķßđíœzŧv턎´†A°Æ l^OΜ3~ĨŽÛX)+Īumö†TF1Œ9-ÆŪã=xíPCe­ŦŅÂڗî#‰s(TbːršéŽxüų‘nû:īmÄ یūƒšg&9Tg”`?*¸9—4E×h”rk&âRk‰@xšĖ”ũÎė3.q÷xÎF9í×Ōéͧœ[Āŗũ˜[ĘÁ7sÁČä`œŸ¨ĮĨTŸEŗķãˇžîa#áBŒ0ËrIūz×øVœÚN—jm$’Wtv1ÂæEØŦŧcˆ€éŽ1“UžŅĸ[ÚZ\ä:FęŒÎLhŅí‹vã8Š—PŅtįgŠØBc ¤!HÚŸCüJ>´ų5 ĶbšŗŗÉš61… ¸Ā8dė= @Úĩķ\î‡L•Ŗų×iČķ…S¸§ŽĮ<ŠķXbŪUŠ\ĢĖ{‘Ü(éÆO0ĨŪˇw ]øĖc“´mÉ-ëģļGŽô˙ŗøØ˛]Cåûŧ¨Bīō[i8=2*Íæ—ssu$Ņ\$M"Æ´aš=ŒI۟P}°yįĨAoŖÉ9K”ÕÃ:HÅ7ruË‚~ }ЃÃļM"C>Ą#Č0ŖÉÁŪF œäōG| Ô÷ÖÚ=ÄŌģ•bSĘuYĘđ€’ŌāœŌ[Į¤J×MäJ˛ÄĘ™¸Ŗ{ōAÆvö=…Mk{ŖßH–)HeAr#Žŧr=*(ĩËš’;-=žA$‹˙,ĶsĻ œä“ßžöŠˆnX$‰Ĩ\˜Čo—†LîŦXr:y*ęšÔŅî‡LTl7Ęüî c‘€HœHį]RĶRēžĩ’ŌIc„üˇgtpW /ÓõFG45ŸˆĨ ēųS•ˆ…â@H;2Ė„uûŋ/öM䷖âëQũņY2ą—C"MĀ|ü8üAëQOá¸-ÖĨ7Íæow( Ū„ĢĀrlú‚ ?EŠęX’õΘąČzģ >\méĩ“ąŌŸi…í6yrĀ<ĩwb#Î7~ņOüÃÖē)@æœ8"—¸ŋÅģIÖĶûĄ_‘ūéū•ķÄŖeÄŊą*Ļ˙]<#÷Ič+ØôĻķ<bŲäDŖō8¯øÅŨGN” 8?˜¯2ĸŠ(ĸŠ(ĸŠ(¯Lø-?—â[¨ķÃDŦũšž¤€ü€Ô˙…¯&ø•mN~>ü`ū•å>.î1é!™_đ¯ ô†ĖVėq‚§§ĐõĢ`Ž !4Ō‘ūî+3TēšÎÉĨUå$*‚IĀÎ: õ=†j‘Ö.ZEHôģĸžk!vFO”ž^‡ĩÜk ĒJą[,ļ{°ŦĖĢ´b3‘Č'“'ä?í{Ģ•›K…ÕŽđŌā9ûÃnõč=x™ŸQšm¯­ÄhŗímØp8ãĄb9öéMŊq%ėŠũē-‘ŅļF›AŒ…Ž}xcÎxoj…§ĩšÖKYu™Õš\ąŒí‘0Ŗ+žp8ŨųÔréÛĮor÷2[L~Ö%l ۏAÆ~$cŽŽ7Z1ƒė‹eq*E!*œînsģžšúéSŊÛĩöäŅ&‘&O&V–6ÎÔlŽx+Ž[ōi%Ô¯VFƒĩ,#†'Û´uôúsĐŲŊ:Î÷ŠÎ;udBŽíÔ ČĄätüķįX’× snˇOŊ´í ˇĐƒÎîÎ*8ỗ5´ĶŨ‡š;‘30ČōöĐw$ū4ŸđÚ›IíŪYXÎPŧ *Čûd.2@įŽ3č*âiui&rŅIæÛ•ķ0\ŒÉ AØÅ54=>',–¸}Û÷ däõõŦGĨZGnbû$,ŒĒŦŽģ ršĪĄ&§ŠÆȎŪVûácsĪįķ59Cƒķ` |q–ŪH<äTR]ŲAnĶÍtŠ’¤“ĐƒƒĮքÕ4á´}Š>i g'Hœį ãõ“kēu´ļęÆFŽá’t]Ņ€3œ‘Īltä‘QIâ]*#?™#…Ę“åˇ8ÛíĮ'÷ãâ=?zÆ#˜ŗI吜`g'žƒ˙­Ö­ØŪÁŠX%Ũ¸eķ€ØĪ^ø&’AƒMƒhÉāž•ƒ:ãoڈ€4ûÄģ’Đ‹&gÜ ™ß<ŪÕKOŌ5(>Īž 5XĶ'…Ú=¸!HÁÄOĻ.fĮ=ü×-¨8ōĨ¯ #b&ÆIÆQĶŗˇ­CyaŖO#Ü^y’LƝ•:1Qõ˜€ëØãŠŠ&ŋŌ-m­ž)EÂDĖęčėv~í›q*A×wĻ*xz.ĻKXĖvį˔˜IÎĐSaÎ#č}*ĒXlÅž“!YŲã$F¸'€s´’2Hũz ÔqkS¤! Ō&`ŧ}íĨ‰éČÎFA$“ŌŽZ_ŪO+­ÅŸ–ŧmeÎ:ļs@ŊŋЍČēĄēŧ’4EˆX|ÉCG´“Œœ“Ž0¯ŠĨ0ëîbÍĖ*ģG›‚>÷˜ äéŗ#¯\tëR]Y_ÜŨ–†øĮÚ5b!•ˆČ#PüÕ1ĸM.ĩIeķGÍŧe‡ĖxŨŒ§ ņŒĪ&ļĄĻéöÉ*Ü_ˇ›ĩå ōāŒāNp˜ũsŌ­Am¤XËh¯82o1ŠVPĄķ¸įoŠSÎ:p*Q‘=Ō7“įĮq× )v*pQXm=röÂĐšĻ‡¤Į&PĒŌĮ͸}ëéVPĩ‚ûėĸÚ4;œ+hPšČ÷ų z‹Oē•5›¸ԋmî‰ uܛyĮOŪ7¨Ę“ōāåaŊÕ×PŧO˛É,AÂÛ.ÜŠlô<vķÎĶ’8Р׈YáVe1ĄÚˆœ1ÜF79¸Í9ŦüE4I%ÅąÍæĪ8:æLúdcĨHē>ĻĒžnĢ7•,9-÷zāôRqęÆĸ—I‚+%ģģÔan‹peģö*‚Cōå3ŒzĶąü=kDoãXŲ–m‹p9Ų ÉQĮûĸ˜#đےW2‘ĪīX”ų˜ƒŒņÔāû TįSĐ´‰'hm_|[Ã2Æ8Üeˆëä7=>Aížĸ3Ŋv wÍ?<ûĶ”Ōį?ĘšoDZßWL}û2~Ÿ+súWÍ÷Ã78éÔsīđŽ’ÔîˇL÷8ūuëžo3ÁãûĄ”ū^Qņ–Cc'¤˜ĪākČčĸŠ(ĸŠ(ĸŠ+ˇøS;EãDPqæBˏ^Aū•õĩ“†ĩˆú¨ūUr’ŧÛâD_é Øåĸëų׉häęŌ¯÷g8ü›ü} žmmI<>š˙"ˇŗÛ(v֑†}q\äöZËÎīÄaCfg0ž€`|ģGįõ4Ĩ‹Q%¸—ZļŠXÃyļ„Ūú´އüHÛmMœˇząœ´Ę™S$pqœ }ōß3Gß4īs; œ\yÉËü#Ę…‘TއwŠ&ĸēYŗ“Î’Ž3HÄm ÅUv1‚Hį“ÔŠU—A†%‰4ۑR9bPāį/ÁõĪaíZ¤^eŋ—ĸC'œ#w˜&qŋ;ŽJœār{аTY|¸l­Ą‰CbŒ Ø ztnœŒE­\ËŲĶ–EųY—qÆ7įۃĶ'Ķ™´įģËIyo,}Ķ€0 ādg>ŧU‰õ >‚KČWĖm€ųƒã8'ˇ˙Ēĸ֛ˇqBŗ”F#!ų# ŽŲVäúz`šËâ};k<Äȉû˛wíęG§CÖ¤mr#2,VĶļ$*ãhČ6p3Ī#üäfõۙ]cM*<Įæ4re ›ųIėãŌŽ ­VHAM=#“{) (a€øzœū^üSŽM~ûtŅ-ŋvņ€ęqŋw\dįuĮRxÅIs-ÅÕˤZĨ¨ˇ‘J„FÉÁUqŒä“ô#ĻsMž4šh#—\ˆMi+îĘcæ*ňēō;r*Dû ‘[ƒŦMrÖˆŌš†bÂ`0Ia’\~Įģ\HÃûŦWō8¨c=jyâ’k9#ŠVŠBŋ$ƒøOcî3Û¸Ŧčŧ?;üũFYö„Ŋ,ŲÚûŋŊŽ@ņÎ3ÆHĻM éZlũĸb$â5顎@|Šr;ŸZŗ-–‡•ĖŅ“>ÓS7ĖĀ’Ē}Éč:äõÍ4Má¨á m„¨ŠÎøKíPŦŪė ˙|QMŗŊĶm.ĩ4K=Œ…¤mĨNđŽ ä~žũ„ē~ą5ÉXĨ˛%šŨ*#Č@NV'ŋĶ56¯ĢÆír-#mĘąL¸U8Œ'÷IÉz˙ĐU‰%ņĒ~Īh }  ãåęĮއ >™=ˇˆ$™Ū+˜bË8 ƒå¸{O=ĒG´ŧšŅ­§Ô^+‰%,áŠã(ãą'ž=*Šéĸõž}aŽCĢĒÅĐČģn#†\mí’)—zV–‚xooŸåˆģÛō ,Į‚{’Fz`ÔÂĮDōæ–{āYˇŧĒĶŽåčŦĶہøÔâ×DŽ3%Ŗ$4Œ<æČ'ëķŸÃ°ĻÃq¤ē4‰i´˛ļ탴C* nœ&/J­mĒéЇēL?hŖ‘Ŗe ōŠbn<~끂Üg­hĪu0† āļ’5\Ęc‹{‡P¯ đ~o˜ŽÃ֛&ŠŦKÛéjÎÛđü8ÆŨđ×=Ŋ4˛7ˆešÅĮĩ$E€™Ģ¸āíOCũųágâ.ķuųv’_āđ`|ĒyíģžĨļŅĩ!Æ531ĖØX™šMęBÁJäv'ŒÕ”đüųyŠ´ŠõŖ!ˆu|’Ä÷öĸ˛Ōô}:ÎKOí čmÅģų’ĄfA¸õ$üÍĪŊ:+?ŊɀJ%–I‹2îb­"œ’GŨÎX~$j~—}:9#2ÉīũäŽčâ#à ‘ÔˇLzņ%žąŖ‹ĩŽ f`"Œķ†'€wg9ÆrŨ9Ž–ķ"WÚĘĩ†úŠyS€Í)ÅaęŅ /;KjWõ?ã_2j*ü™˛?āY5Ŋ§6û‰ë´7įĪõ¯ZđKīđk']’¸ũŽã ŧ9Ŗø'OÔ^#EQEQEQ]€į6ū5Ķ\ŽËųŠö’áėcaĶūĩ§I\ĈŗģúĄā–ø‹ÄW‘ûĐ2?ÆŊëÃīĶ-ÎyÜŧ˙Ÿ­u#¨Ī„žŨé9##5Šhzp†îęéĻdÚŌ8.8ą Įū¯AYÖcA’hė q?îŲYŲŧŗˇkķte'AôÍHˇˆâH†ƒs,pš’ đą•'žyįƒŸĨYŠ)f†āAŖÁhŅĻa%ĖC)uyõéMaĢÕ§=ž›%Ŧ77÷0Œ˛—fd%î`Bã81ŸČū1´ē%´"ÎLÃĪE0Č…ũčF˜t žN{æ’æ˙IŌõv0dģFˆŦyaG$q‰qŸūŊ?ûiϊ1cf@iUA`pPHĒ~č8ã'ØyéR]ŨßšĶώˇuFė1;ļ ¯#¨Ū[ąų*€Ô5öš8ZĘ8Ũ‘X°Lõ\°?ž3ŒāR[ÛkˆÛ~ĶÄd,A‘™ |§¤ Ŋsž@‘´ũBâÂÕRÛ2EåË*1mė äŒĪĘÃÛwĩ2="î˜n%ŋy„%˜ŦO!ķ˜˙ßîTî4}:K†ˇšéŌ{•”°Rˁ9cpÜ=qôlözOÚdĩ¸ģvdRXŧĒ?Öī$q‚IØĮyēY[RÄ0ÜČōÍē)X‘ķīnNG,åĮN+CN‡OmËy—1I‚Ņģ“ģbFsߓ“‘›qjÖōI6/— ‰ÛË 9l‘œƒÉü>”Ø5˙&li—SDŽÖ;[ˆ/$‚=˛¤g$e&×58ĄŪtōN/Ÿ•Š)čq‘šˆ˙€“ÉĀĢö÷Ė—Q—ˇ…mÚFŨō€Bg ~ų=zÆ0)ŗEŽũĸO*ō™ŧĩb ãįĮđpyœžĮĢ"ąŋIÄŗjĄ"ˆ‰Yûd[nÁĪĪÎ0xホ Šę}^MFGˇLģ&Ö!UU÷§<ļzôĒ–ÚF™nŦˇ×°™$;TīPIã1îO#ŽrFj[ËmĘæ'oĩX3°EÜBŽęŪk:žiāé–öŠqmdŒä@†TdTv”)#pān㊍G'ˆ,!YœŲoæË( G™ōüØlæ¸Į] Ö¤“]ģĸçÜgí ŦĘĨÔ •UšÆ3ˇyę9í]´ĻxSÄOüŗŠeö;I‘57ZQ֜x¨˙Įũą rŦ>¸ ×ĖÚôF fhI$0uî˙XV–’Äééę ¯Xø~āøvö?îĪüÔ…sā-āéÉūŋ"?ÆŧŠ(ĸŠ(ĸŠ(ĸ´ü9/‘âm.\ā-ÜYún¯˛|6åŦBg%0ŋ—ģEqŋãMˇ˙xŠųæį÷%•¸ĮĘߖ?ÂŊ¯Â3nŅ—ũ€?B+ļ=sIŒQžI"•¸_ZÅģŸY[û…ĩĩíÄj"geåļą'ä•˙wŽš xu(g–U¸†87Šß#aR,.ū?Ŋ÷Č'ŽG§5Ϟ×Ļĩ’9¯mŖBŅ’€Œ1Ī •Āū_UžÚę4Yī5¯ŗÍpLq1Œ1UĪ9$ã°”MknģnÛU쏊lB¯m' P>;°rwrqÔĶ%‡ÃĶȏ5ÍĖåķˆáËÆí€1!Ž2I “ĪZ•¯4KĄnĻÂâXÕYctW#ū%ĮxĸMB É Ãĸ<— ƒ‹ˆrTyĮ=” Ž~eëÅL­~˛,ąx~Õv¯–2NXđ:q€¤ũãÔđ$Šķ^š…%KH#žėš\0C ŲÎxéÆ;ÕĢ“¨ÉǎžŲ ųcģ('{åFsUnViîåxĩ•ˇ&8Á„`n!•˛2 Uq=Ŋ­å´˛ë­p*”' |Ā6ŪcđĒ×MĄÍpŒ÷×s‡2\(röez|ø¸9ÅXš}D–3ÚĘ|–’ˆqĮ˜œ‚:¯ķ(˛Û“Ųô9^1 ܌í “ž}iė[äƒĮJ†k˜­öy˛ŪÛW#‚}?JŽM^ 9o!Œ•-–pĪLäĶ­ĩ›;ĢĮļŠ`î¯ååā[nîŖŽ€õî AuâKå7o–*¨NŨøÚƒŽÅąøŗuĒ\Eu,öi™ ™p8_8žsˇëŠEÔīZ>TÚŌ)ÛHNФ2:å°NËČāڗŋģQĸĘwŨķ‘´É<¯QĶĩsM–ö{lŪÛyšˆÁ8ÜvŒövĶå_øŗīYú† ōc<×ũĐ­QNŖŽõl x™OpEsöZN‹oh‰s ŒÃfVU'žŖ'y=¸aõ­ŧҚ´5ˉ'ČGrIeų@'"QĮ÷O<ŊgũzōmĄŒxx@brrFFz—üIõĒΝNˇ…ļBŠ/îČ?ëcō3‚${šģgŠ\ŨŨl}=ā‡÷Ÿ<…˛6FÜs’x$`wĒ yâ [ė1*2)mØ;X°~øčš9Æ éUîa׎ėd†WˇE’2¯Ŋ‚€pzĐ9Ī\Ōę—S^É4ņZŊÄK7’ĄÉ dō0Ų=ŠĄNZV}Iņ#1dMę2ĖíÆŊĀäđ’ÚؘĸĶŽnŨž9>Đ8Æsŧā’Į ‘Q =:ĐZ…yî3“ŧ€Ë!9ãČ§“ß8ĻM&€Yî&-œ—'t„)äŧdn=;ˇŠ§>ŠĻY^’Ûyěæ ķ‡VD*w`˙ĻEŽØÄû š‰ŽĒąĸ ˆĨķü]wí÷‡ę{mnöy_{”Ü6š0OÁô>‹{Ŧ=Æčíķ‚#ąãĮ—–;ÆIĐGUԗTm%$ōc[ōrŅëĶ;įßĐvĢ=ĻŗslņM<H%X6 `k˙cøŽŊ*Ũƛssefä­Ä.IIÉųsÆ9ät8Áâ.ÅĐ\Į%ķÜŠA žh$+ Į8fa’dcĨU:˜’HŗM9ō#č…ōá]ÆLn íP:đĄG•m|?QŖ],€)ŒėpŧŒTđ0Û?!ÔQwŠéržæÕdšS"”’>Ņų§wĖ:~íšÁ#8Ŗû~Ę/*ŖËk–†áT.Õ$>â0yËcĪĨ\—XoėčŽmė&”—t0.I@ĒįøTį;ã,9Ǟę:ģl6ö’ "’A˛UÜ&Qí;žP}Ŗą†ˇôŠnd´aw¤‚Y  n;O˙?¯wĨŽ:VVŦ6Ëk'<;ÍOøWΞ7‡ĘņUâĶy‡nAf˙֙Ŗ>l°{dū§ü+Õ~16z”}0ČßΊ|S€?„/1ĐF[ō ˙JųēŠ(ĸŠ(ĸŠ(ĸŸ É"œ20`}Å}Ŗá™2ŽF0ád÷×H(ī\ĮŽãߥ+vAú×Îâ˜üB-ūĸŊÁRgLep{~_¯ųæģõ9@@ę3KžŋZ "‘ĩÍj‘A&ą">Ĩuo"Á故™JÆ~Pw8Ü Æ:žr0RΤ 6ąšúîx¯$fŸo(0~î*;ë=Âácš…æû@°øĀ*Up;Īn¤Šĩ$úlÖVĄ4Ûš#RbDU,PV áēÄbƒŠŦiim’ĀȂD‚@WËÃqÆĶŒcwN1Į4į—VP‚ĶKŽ×Û^6AnăĪLI⤎īZyOÉe•l´!Žāšāā•öÆHü¨ õšs§ŧR€"ŨĘ0I#ž2yĒ…`™&FÖâÜ×~vXûģÜ:ę8äņŌĒÛGa*AģVŧ™€Vō7‹ų—žOqĐķîjX'Ō/u8gŽ[§¸‘ŧøã ¨ Žƒ˙<ąŒķƒÔJ×<ū[f]Ɲŋ ĀüģrĮ [Œī8Į]Āb!no đö餌Čî-ŗ´ƒĶ$I~}9Š-o¯naK‹= RNz¨ā`wĢ9×ä¸$GQ2(!ųÚwUšČĮų¤v:ëHe¸ģļ^@ڌÛB{Į=œļ’ÅĻ;­a"•:°=AĪw~|Ô kk5Ę ņ˛>āvEq÷ŗ€ÃԏĖuĪ:2x~ÚSËqpîŦ;™†HäņÔã“īK†ôČ-Ú 4n0g?6Üã8ĮŠĪ­O…ĻFęËjŋ(Ė@õĀĪ č1Ō­G¤é¨å’ÆÕXļâË‚OŽqדųÕԎ5bUT19$ œKÅ&8ČÆE4œŠĢ/5Tā5Qŋ9•ŗŒđqøcúUĀjˇŦpÚ­Ë”Ũįyãw—ŧļōH/Žō=8č*ëĮ¤[éĻøXÁ-ēĀŦËŒ`>÷°^=‡ ¨Įˆ­!Wû=Ž]gUØŨ‘ąÁ9'gģ×Ö´$Ô.œ.ŅÄÆ&‰A'Š–dŒ ƒÆA›%öš*Äcąēąbģ€ ˜¸S’8 ߎŪÔâēäƒi–(Đ7Ū Ēq…÷l¯õĻÜiˇWpÚųŗÆ'H)ŲO ģfū܃°Žß{=ĒŖhķKåĮ6ĒŌHÁäU°A+ČųøÚ ûߝˆ´{xu§{š}ėčĪx=ĪôÅWŊĶ´š/dû\āK.wBeËƒ÷š Ũ˙ŊŠ|—z;,*n7,xōŲ7ä•eįę3ÚĢŨÉĸŲÚZIöH$ļo‘•Q¸=ŖãˇĨI-͌öSͤ(`šÍ"Ét|üž7näāŸZtzŊΘ°›ŗ%@ë7`?uąō‚Ũøö9ĨŠûUf.ļ$ŖuWRž_Ü2q“÷š=ûâš$× ÛŧĨE‘cÜ–w Û~sŅGâN}Šcĩ×ßk=ÄQg’ˆÃŸ7=PņķGßø=ęėŨZC–ÕwEŒ"+íÁ#‘Ærqî9jĪIž ՞KÉ%eV@˛30„}71Į(OüÕaá;rŽęg,Üvä`(ÜÜĢ|š,0I?LhÜh–W­!šųüĀä•ĪŽŒõü†%m#NķL˛FØäî%‡ŪŨМ}î~ŧԋg§Z¨XmaP~HÂãō`´Cî¯ 4‹"œ“Č{Ō‡a "0qŠļ§<ããÁĮ­Ž qč85Ģņ ģ1:ū Šų÷â4~OŒe$ yę߁ķŦ­ŗjĘ}1ü˙ÆŊGá˟éwņ÷0ŠüŽ*įÄ(~ŅáYqĘÚąQ_/ŅEQEQEQ_aø ĩø{KēÉ&K(IĪŽÁ]¨éK€3X~-ÍđôØęŦ­_7ø6k–ÎF3Įō?ÖŊ'áäģėĀ=Ķų¨˙ô˜söxøįh§ņF) ō=j´ļ“܉ĨĩŠIv…Üč ĀÎOûÍųšÆˇKõ–3ũjāÆ0ˆEą‰ų†Iį9îzÔĄõËiįHŌÜÛīÛËĩ@|ŽČ2y‡&‘aņļXŪæŅHRĄš-œ¤åH'9˙ëÕMDjĐŦŅÉĒĮ)Q ãs$ŧOĐ~´mīīæ–-uĸyļDą!(Ęv’1ČŨ÷Ž21× ‘Ä’&<ą–Ô'"IĊ ]ģØļyéĮlTPé: ŗ}АÍ_œĢÜ dåHū]),Ŗˇ¸ēÛũˆË…Wķ0ÁaōO%›Žĸĸ-¨›b#Đ †R‘í"~bNæįļN#Œæ´b“Vã‹JH#Q&ä$ōG۞q×uŠí?ˇQoEĒĻÜHS!ĮĘy3Ŋ‡Sč3PčúŗÛĸļ¨Ņš‰‘đėã%dgī!9ėÖŽÜiˇs_‹ŠēF‘Nƒ9éOŊCi KåGöëû™g\n+)+Ávx;F~§ļd^ąą¸wšP ” ¨Oē9úúšŋ&—§ÍģÍĩL^Sœ”>ړû:Á“g(Lc¯ûŖō•}XaqĶŌ—ˇCJzRŦɂCd įķ§Á2M K ŽĄ•‡ ƒĶš$Ô-ĄuÜfÚ;āä}9a×Öĸ}oL “¨ZƒŒ€%Sžvö>ŧ}i.uH-äŽ'•wȨ?+8PŲņ– Žą ŨķZ…u%ÄˌŠG^@Į~;šĩ(ÍVÁRønõĀEíî՚&­EŌą.ŽtģYæTļIfFf`ųÂļô'$įgR01Īj’ßZ°ˇ’8­aOŗÍæ}ÅUų“jއ€G gåĮn-ryØŦVáY°vãvĖäléķŸûāž/Ûĩw|zhËF#da°˙.H^„&ONxĢ)Š<0ĩš$(Ë&åĀŒŠÆ[ŒŒ“÷ŗž9§mcwoŠK¨]<?*EgŨ‚2Wđz­ ŽĻ–iu}{%¸…’(rã–b~l`Ž;ā4ų|= AģŊfhŖ ĖøW#rKŸá=ĮŊA,ųĐę) ‡q/ē4`B„l€ŖSŒuĮ¯7„Zn§pˇâž[váû„7Ē‘˙}ZĄrÚ“f‰w íh÷mUGaŒņ€ĄņéœSˇ¤ÄŅCŗ3ě•6ĸÆũŊČÛČĪ͚’}f_%͞Ÿ#\ Ū7mĀ*¤tÁ8bß)P7nÉëĶ<ņĨmØ…Ė2¸‹á´ŽHFęNvÉnæ›`ēŌÜ /$…Ŗ`WËy^xSœ Ũû^4öŋlZqGŲ´HĨJrL™Í1ŧ¤Á2į'o'žz}iŌ5ŧ!‹îęĻrIĀQũĄbōķĸÜ k8•Č#č*‡ûgNaōË6„Ë’LmĪøđ}*øHŦÚŨąÅË0ˆ ļŪŋ{í×֝ļˇōÉ ēSjåœ6A$vũ0{ЉõF[`ÖÚMÁ}¤„”í#AúZ:\ˇŌÉ+^[, œFī'“Éôã™­LŊ¨ę;ƒÚ¨k#~ķČIŋņá^ ņ^#‰Œ˜ā¤nāôŽwA8y'ˆūUéßnŊ*gīÛ7čEtū.ƒÍđũč–…”ŸĀŸč+äÚ(ĸŠ(ĸŠ(ĸŠ+ę˙„7jđ&ųÎØLgūÄJô•úSĢ/Ä)ŋ@ŧ‰šųģÆĢ˛ęÚP?Œķū~•Ü|9“•ã$¯ķĐW¨Ûm”zÔÔĀ`ĪgŠNž•™ĒZß^]Aí “8!H|Âō3‚7gļ;ÕFĐĩ ã)uŦ™?y€,ė ŒaķÔu˙ëT’øy.-ÚõįF ņ)Č ‚>ö}1˙×É*Ū˛0]Bí4‘ܰg Ëũũü`p3Ûú“O}N‘Ø: ;CÆ\?ū„ōéV-ôË(H–ę$Ũ¸1%ŽãÔä÷Š~Ém’ūD[ŗœėęOķ$ū&ĻČÛÉĨĮR}ꨙ Ž’W!ųģ¯_ʇ—É æœuE8ęOAM’îašy.#Ų ~d„6v¨Î°ĒŌęÉéÖķ#0$ŗ€6OÍūØũ}*5Û(ÚOŪˇ–ąlrĘ[ qō•9=sŽ´¯YŖ… q# P2K*Œ u#éÎpiךš´ŋ6•ËĒú§nIÆNf9Āû¸ôĖ—ˇ—vĶIšŠŠD›Û$ ĒOŽqž0{œB×zԎĸ;T;ˇēŒ˛€ neį!ëÔįļcUņ ööņB31°Ū8AÛ92vė)-´Í]`x'’&\‰WĖÉ ™ ėĒjqųšeĘuĖmüĢæīĮūŽũŲõ˙Ūøw9 Rr?_ū*ŊŽ×,z1_ūŊLWĐĶJįõĨÛĪ^)€?JĢĶÉyq”DĒÂBA Ü{ČŠË›ÄkkMul ķŽb—s)öä‚Üwę@į54šČ¸ŌāŽĐL"ũé[•É89Vã$ ã$sT_Zŋ–ÖÚ|åՕŽøCŠrģ~áÆķ‘īÍN5^_š-9QrpŽėnP3’Ŗ;Y›ŋŨĮZ…¯|Cž’Íb2œnŽ0ûâci'#Šô ž+-{į {!ČsŒ1 ŗæ?sĻūqÜt+Ũ°čŗÛ>[øíâÜY‚ŗd+LnüŠÆßø5ö[Įkē¤ėŒq¨ĀF́ķ|¨Įī5OqgĨ^˜l./˜Ŋœ 0ŪĢšr9's;qŽ}j{84”´ŧ[i!ģã˙HŽ&ˇŒČ\~aÛ8Ŧ˙´x}ã’g´‘ÔĒîvy žbđ3““û9=ŠFŖĄÅi´ČŖ‘‹!Qđāāœdb:tÚ§Ōõ='eāĶ­dLbåĀÃ3–PØq$ālâg­ŪÎëéŌˇúCFePÁJ`ey\ÎG^”˛ĪĒ ųá´–˛˛…(_%Jœ€22s˜1ëĶŽk¤ž žĘ8&…VM‹š‘‚Ā19!Īq÷ųž”ôĩņÍ;%Ü™\ąä8Ũļ%āléōČ@Īņ.OZš529dԋ1HA(`@+ÂŽ}Sœrˇē%ÖĄö…mBe†`Ęb •Á]¸#8ã’1Žzįb+ mŽu ‹–r—y1 Ī×?ÎĒ.“áÛr"šú ŦB2†thmü…ēō{íįŊl¤éKīYeDBã•_\÷R=EUzšẌ́~OÉ lđí,áömÚĀpĨŸojFņ‰"Gū†ÎR-ęĻ4Ę&ÍãŠā`ĮLŒâ­ŲjöwflmÛ)b„1Ā8IÄ;ķÍhÉŌĒ=Ap3ŅOôŦžVb=)ėHb‚Ozĸž$ļÄ*UŖ.ÛaĸáˆČ˙€ŸÃšš-lĪĸŪŲŌ™7&CcøFriđjˇS¤m§NˆÅwI *Ÿîœ‘ß§?#ļą$ÅVÎ4Q(PÆ@ĀĻyn öéî=ÅV0ëod>ŅkŒō3o“¸8R?,Ķõ [Ąkn’ę‹ 4~T€B{ž^ęyã 95N(ā7f#¯7›æāÅæ`ąųxwN;zšĨsoŖÚEĩīîg{xË,'îoe{eģöô¨ÃøvĀ[‰”Fû˕ Ācîö õëôļĶ[BlÖ2i X•ĄŲ–eÜÃ*Üô¸Čí’Ņ‘Ąt‰ÖW1=OĘ2Ŋ†N3ßķNYĩÉ,6CĻÃm3 ÷)Ú{œd ÷Gå͘ļę9­Ä ˞(sČ;ģ9ĪĩWį‚ú[ŠuXÅĢĖLdʨŽBqéœú°Áų$ņ#3ŖÂ9€líÚFņœsč0ۖŌiī$ÔĨÚÎP2ōepŦ8õäõāUHĶÃņ¤PˡO#b2˜`¤ą °c¯'¯ÔÖĩĄ°ŽŌîî .A…ųaKI$ls‚9ĪĖÍĮlķŽiŽō¸¯øģ™eĻL äÂAü0qúלhlEīē§?‡˙^ēË-NįHģļ›Ņ(\dtį#éKŠüEņ%ÅĄCs ˙ÃúQ^A3´“ČėrĖēīšeQEQEQE{ĪėõvNŸ­ÚgîI }Aû(¯}Œ|Ŗ‚¤¨į‚Aę„~•ķ§ŽáÛe8ĮÜa˙Ą wÃŲ?Ķ" ę§§˛×¸Y6RLõßŸĖ ļV›Ž~´ŧâ¨jWÖú}ŗ\\XÁū,zÛéXŌk:éŦØęO’3V,&Ō–å’ž)æÂU„„œ<đØįÛŋ4ˉ´8'6ōŲÆ^ī’…Ŗ0›°ĮošĨŌĩ ?Q2}†Û‘ŦĢ•EqŒŽŽ}ĒÔåP×h“<Ō nw†9ÚđqŒ÷ųNGCVu#Š›”}=~T€Čcp6ČČ/# đ{Ž´ĀuâĘ<ĢQûŪĄp6noö%Bz}ãéU¤Ķĩûëe†îæĖ¨W W#ssąąˇŒ}z~ub=+Vm}aƒ@ظUųp8É'ô8ä´Đeĩt"ôLņĢ „É#æ?x§?īž}nßXÛߋWŧšhŪ WtlX°ĮCœŽ2?ˆĒiZ —2I'îËČŅL *˛ˆÎJāā„#ĪN*q7†’Vba*FwĘĘTžAā4ø+N+ũ3Sá0d °žŲÚvą0˙p‘ôŦÕņūKCσįs)Îd ŸŊĮ,OājÂß.Ŗaywee˛{xsyÉŲš~QÆA8šßWŋžr¯¤ĘrŦ¯Ė@ °QŒdõ ūÎkRAÅS“Ž* Ԙ^ƒ ūGü+)øƧˆ*+ëë›Imô÷šfÆbäį'ãëŸj…dÖEœĻŌÆ8e7*"VÚŅ'8=ČošŦ4~"rûf´A—í=?„÷įמ”éôûųfyĸžeÛķ($}á!=0>b§Фc™’oíÎTįįiĀ ×׏L{ķM{"ÔYO.§sĩBÍc•!P6ôÃd˙õǜ7:8¸[ÕļĨ›l’lüėŊãpÜā~Ͱ"ō-îė4ÖË) 'BJb6*N Ā(öÎ8ĒņŊá"A Ā|Āw ‹PNzäûúwÍ]ž“Sķâ0Į´)vÜðFŌ2  įڟvšĢĖhÖéŅŋvIŨĪO—§OËĩeĘoVsou­ĮÛUņäŽÕä×c÷☑ÛšíÉ"ŗXäeÁ-¸‘ķœús‘øæčöW)ru —bLĢŧxQ×-ÔōiđĻ™5ũ×Ų`Ũli dV!īsĶļzԖ-ktŅÂ4ybˆ.āg‹#pä`’F>füÍAœHŌÁ F˛0Qūŗx :rI­;{Ģī*quP‚Ą`ÃíÜĮļrqÎãđĻCmŦ%ŧc푍ą0|‚Ėdä‚ 3ŽxīUæ˜ō^ã[bw4Švž(Æ2'ß۟q ”đ\‡Õîe ŽŅAq–ÚēsŒ€ËÉTŠIt[Kâō\ÜÉąŧÍî˜ŖÚØÆĀ=~:ԒKĻ\\ģŽ™w<…y`r ,F7z‚HŋąĢŗ=ėq\ 'Ė.ąČ üŲÁ<ˇđ•ÂŽ„äū"?ĩV–×IŠČėUŠA$|3Hčc׊Ÿgˆ.1å›(ŖvĢ3tÜܜg?.Ū=jõŽĢo|ÅüfÜČ[Écšˆ*xÎŅü@F8ĮĩŽ”¸÷ĻúqI* #eãæs^1ņF/3ÂÚUĮ#ÔņžĄøšō­ą}é”öč?ŽžN˛/ũ3oũÖØ˙G“ØnŽ"a‰œ´i”QEQEQEė?.ŧ­kYˇ=$ˇ˙ī–?üU}'f4õÚ*qIŒđ{׀øöE}7ŸË'úV€fÆŖ'9~9?ā+ß4ķÃāäa—˙Z¯ã‘MĮâ)MTŊH0.&#‰ÆIuī’+ûvÎ+Ãomkæeâ(†PÁ‡<ŽG>¤âŖ}oQēÖ-2xE!$!›aų†xB qØņ’22ļˇúä›CYä3d´‘í( Hyäg #;’sƒWtôž™R}@< fČōĪĘ{eŽräyØ×>ãIÕÚîņ펂$ĨĖk4¤õ ´´ãyīŅG4į´ÕåÔZŨ¯ČGŒ°u˜ŋŊ'F ų6.xÆėäքtöörG%ëNÆd™]Üm*vōÄāíũO›ƒ¤[#{Đå|´HÜÅ´˛‚ÚWŽXŸ\ž1RßÛi/c›%ÜQI&Ū/œMé°:ƒíš†;ŊS8’'ĘL°˛žY—"N3Œ‰'Š9Īzģk.•5â-ŊŽérû‡†nzž2=OŊRŸYJŌG ĒËį:˛˜K:…G’AœŠĮ§LŽiÍâBT­´ŲŸ<Ÿ#…pcÎÜí;~fūsĮ4E­ę3Ū5ĸZ(’7U89 €KtPy cƒÎqŒâ{¸õK‹K#dŧ=Ėq?—Î+ßQԌŸJŦluģ›7‚{¨wĮß8DÁÎÂHŪ˙ß?JkXę/+Âúō¤Ō+U“æ`PvŒt*́Œ–>•|ii%ĩåûbbŅÃ" Äāg-’lÕ ŊM†noo$UŽ6fØBā|…ˆÎHáāô$UŨē[Û[Y žX.P…cĀŗ Á@•'į؟LŅŦ"š‚Ú@."PQŨÜėGÍĶp|ōīĩhQ2Ą´`O2ÛđĘ0ĨūđČ8ųGĩO6§o¤jF֐EF ˜rÃä8#dpG  ä­ĩY,IŽŌĀ›vDeXË4ŠÄ>wđO5ušŅēŊÕ"æŪĶÎķ”`˙ęĪL@õ€čĀ <Æį¨Ļ˰â5B’U¸‰ ĸ$…`xÜxp8íĮJŋit‰JXbxČr īBU8=9ü)–ÉĒMĄ=ŖIžT ¸2¨Lû&vãļ=Đ=ašžÚXæŋ…n–…ĸ9UdnAĀ ž™õ ļ‰!™ĩ´Xá˜y@p­ōģŸ— žŧ™Ē“[ØÆéΊpy‘JĘĨXØŠâ›VXžxbˇmņŒDģŖ ņœyƒčŠŽsN‡ûoí14בžņVäł0ČvęŪÂĢC&ŖōÄÚĖišælõÛˇ%GŨf_LđDĖ[Ŋģë`ēķŠÆ9, Äā’õĮzßJM6o5+Ų ’GUyw3JØØWîõôúqŪ§ŌΆڔrEm9¸f-ŊCVáąĩzcÎÁÎk¯ę1@éÅ%.xÍyÄx˙â‹E#"+ÆSĪNA^1Ĩ]ÛįŽ9úäšë€Ũ(ŠĀüō?­`ÜrŒ§Ŗ)Ä܂.dŽj*(ĸŠ(ĸŠ(ĸŠô‚7/˜s5Ŧ‹ų`å_TZ6ët>Õlt¤ī^+ãëpnīĶš$ÄbŧûÁųz•š÷į>Į˙˛¯Ąô§$`đL`‘žzŸņ­B}i äĐzfĒ^ģ%´ŽųbÎ7‘Čߎ+Ÿ‹Pē.&‡C6åÛæ|6ō€¨āyg°62ĮN$žmlhļ†Vk׃lŪ`Øwė댨7¸ã§jžuF´ši"HæķO’œ}ĖņČfã=qĪluĢĨYëíw—1ĩ˛ Rå܈‘y;yųƒüi‘čˇq\^ŧwQGĖ…U!Đo-´ƒƒšŗĪ^äqCh3<›įÕį“wš¸e$ũ@Ë`cā;S.4*’[ŠĖŒŌ‚[ä4„€:t¸ƒ¸ÎV(4K;Ōžg“5ŧƒÎ'ōq‘ûãÛôÆ*IŽ4)&kšŽd¨bÂAķ)*:Ü}OŊGæƒGˇNŒ$„&ãjįj˙”c°8oûR?ėˆõ‹ U03î˜ÁŖO\í'Øô6ą~Ĩakyė‘×xPBą'Xā•ëÃxĒwūŖ 1ŧļH|Î…%0 į#Ž~RqĐSšãÄ20g…c÷X›Ô˙¸v¨ÖËZ¤0ܤ~aË|œųŦĀUąō gŋ°Ģ6kęhnä3Ā"`\8 ¸ŗēÎŅĐu'š¯&’%…oÍųTĉ#RŨD„Č0~ņķ208Į|ĶßÃÖ.ÜŪĖ‘F<Å]ĒŦÁÆxāg=;͞ŧ<-Ė&æß˗(vΈ[$6ãæQÆ8#ÚŦŠŅUöÅvUĨ“ĖĖRģeä g1éÍlMmkRO r2žly#8=Čä=‡ĨIŸg|¸ Lũíą¨Ī?âåVÆÔ1ü)āFR~´ #Æ 7pÜŦdũFiŲŨLUi:T-ūŦ˙ŧŋúŦš†$5$GĨWÖ$Š8m¤’ÚIØ\(AA<ÁÂZŠ#E:īˇŅ#äVš…ŽT`О@ãˇŌ?lķ­ÛHkBŦųģ‘ōôåüé#‡RŽÚÉ#ŽR$}ēHĒHyįŒ{āôāˆ.?ĩf„Ô,ŧĖģ$pJ wÁŽYq×iįŊA4Ęą‡¸ņ DԌ[␉a€;=vœgœYŋ´´[Į7:ĨĘT•‰dáGr:lgļk.âM(šxŠŪŧŒ›“"§ū%5 ūƎ&{}>âLˆ…%°AîüäÉ'œqOŠábōn-4–¤ķķdÜv#īrO\TqŪjÂŪ5rE"•Ũ'ȨPHÚ[šĘū})í¨k`ēÉŦČķKūŦ ž3žÜvéŸÅ÷sŨĪ›Åz,]Ї€W?tŒrzđ NU¸iD‹ úųWu$mHÁčG`x÷4—?Ųw+ͨL9?š7•áNrTqׯŊ%Ô,W2ÚÜG,ŽŌ¯ŨųŽĀų׌ãõ§ÛOféI¤Ũ–(ŽB‚Ȥ–ãpl˙8̐•“LûBé'ÎD@-ž=ŦJ¨Œp qÛ'֕&Õ"1°˛ŠÚ5+æĢŸwü+čí$îhˆčb#ų˛(•ÕKļxíeh”4ŠŒUNpN8kšû_ˆ$ ˛]ÅrE/ʤg2 œ’=ļŌË'ˆ‚ąB˜Ī\eĮņ7\C˙}?ļlüDPĒꊂˇË“Ã`°ōĪ}§ŽÜ{™ĩ+E&éī-í„ĸÕåU&6W-ōnã-ģˆ zUc¤ŪĮr¯s¨9ĩųNéHffP8ŪO'§<q‘RCáģĘ Ô’4*ĢÃ! ōŽpA䌟ø>•ZÚÛÃÉÍs… P¸ˇ– YųHŸįW/ī4ĄksĒ"yí Écæ(-å‡8Ā%BGĐúT3ĪĄû7Ų3ķ†! rŦÜeąĀ*Ü{ԒŪÃcmc=Ĩ¤k °\Ē´€…8 ČÆ œqœE‰ĩ˟=dˇąžx H<ĩ ģ*ĘĒ~îwgŽ6ķíIũĄĒĩÄn–‰X!L?ÎË%žeR1—ö9ŠėįÖ Úģ$ŽR\.2íūZ͜uãŠH-õ(õ9X¸6M1`Ŧų;JžœgīmĀȨ[h”6ōDˇë:¸ÛĐĒŲOŽ;œÕĪėkÃ8sŠČÉķf6ĘŲ}Ã9sĐ|Ŗū”Û=ÖĘã`ģŨ)ˆÆ#ƒ°Ēƒ€rƒ?Ri‡4ø#†Õ晃)‰¸Üß,ĀÎq$œõįœāTĶéÚ=†'ŸxËî\Hä–É~?ė“˙öŠ–ËBˇÛë`P¨ō‚TđŖ‚x<¨üEM&ЧÚXÛĖ’#[>ЍųBd.áŽ6Œ¯>âĻm^ÔY^Īl ˛ZĮŧÄÁ’F@äwúŽ|O2KÕ¤‘ʲ,b%ÁcœܑÁÜ8Ā#>”Câ9æšC,°įj`m †U9<÷q͞ąíR6ąŠĩÉxôéEģíÚdWųpWv@\ä†>¸*qšžæķVÛkö[4w–=Ōī ,GoüĀũî3VėÚw°ŽT%ÁAæ¨čÉīîi’Ô$‘ ¸ë°ž~•™8>s}iņKy%ÄVÁíž“zŽfé‚q¯<{Õ%÷út‹%Ė$Ęëąā”…TĪ8eäƒ×žyíKÆF7ŸWˆŸšCRĄO˜ôÁį=3QEi§IkÛ\ą†ŨÂe>éÛ´œŒF¤cžO­2/ėˆ.bØėŌoķÉšK32āä€0J/ˇË‘LŠëN¸ˇ‹dō ŧûIĮŪ΂:ãŊZ\Ņ ēs‘ĘŦî…ēą ƒĮBNp3QLÚ¤rJ-láLo(å”ī9!sČ<đĮ§Ĩ¯¨›ĻŠŪæĘ(ÉRžcį%{ ÷ õéŠHVî;Ė^_G…;š%‡p\’šÎG\öÆ=hO íĸ‰uÅhŪ=Ã~#$î žĐAāt=93iÅ:ËŠŨÎŗA"8ÜŌ ¤X p­í׊cÅŖÚŨÉÖŽŌyĘšÁų‰Úũ€ĀÎ8č1Įz[˜ė#Yá‹F씯LyE,zāäūŖŌĻš´vHV"Df™m}ãîüĮŠ,IõϊãZ™ü´˛ŠÜG´0dq†ĪOAëšO/W{ûe )WA#ģČŊĪÎ9> āĶãĩyŦ”ēÄBeœ˛œe‚ō¯89¯=ņīQ‡ĶŪÖæÎëX3ą`$‘Æ6í%Yv“ÆJ?LpIĄĻ]>€ŗ –ęæC;.HÎÕÛĪM¸‘ČúŽĀnũ‹%ܞUĨÄæWØ.ŌNHā=:dõĀÆƒÜ¤’O:ļŲ83BłđŒŒœvųŌžmîd˛ûUސ–šŠ/î‚Ē ŊHŧãÕf)uiĨ?lkHmNõÜ>ņ„Ä ’xÁíÖ¨MgŠYXFˇēŒkkË*)<  N0¤œc$ö†ÖâÚĖ$ž'tq4C$(Œn'wlã§ŋZ’Xô˘a‚ķYrR1 ˜ĨĘ3ma–-‘œę{W[ Ŧ°#ŖB ĢãąŠOSŸå@ä~´¸Č¯?ņ¤&MÄHv4r ˙Û6?Č×ÎÖü]ŒboæEučØD>ŲŠuø„4Ž¯r2Šãp:Wœë×WšŖËu<“I´ Ō1cJĖĸŠ(ĸŠ(ĸŠ(­O ܛ?i—ãeĖg?đ!_ji2y–HŨʃúVéK^_ņ"0/ôŨ5âaō|Grž—ˇûßũjú7Brmm #æ øņú×@1ŸÆųR‘Į C Ęä×#nÕŨÜĀЌy‘Ž<>Hų3ÔÆzö?ŒRé:”ĄĀÕ¤P|Đ9†đFvūÎj¸Đîei^ãP•?}* ‘Ú@™ļãsœd2ĸŽôááË7dY¯æ‘Éķp 3o-Œg9e‡ `gžnC§YŲ?Ųŧ×Û:°hv¨pĒX…Qއ>ôÖ˛ŅmŽ–ŨŽÉ¤ŽOõ“š,ģ˛Ā’ÜäļpzõíS@ē$Ą­`û ۘJ9$/Ž{cíŠŦšŽ—8yLŽęʐ1bVB™TîËg÷÷Ģ‹Ē[-ŋڗĘķĖōĘáƒm$įƒĪĩeKâą%œsYA9R@0´¸_9ĀĶ'F*íÆŠvÚuœđYÉæM* Éå¨qŊNķˇwaČ<ĶSPÔ¯lnĖV/mp coæ2˙0, =1Ī4ƛXķdH-‡¤l3:ŗ8ČÎNFĖsŲēœRÚGŽyđ™ã’ Ēģ@Æ |¤õÁÎzzvŠ-…ãę73GŠÁ;lųæÆōBôā• ŊOByŠõ-*9uîžũĄ‘‘b@‘ä—T›,zí‘Čã‚^”M Û[!Ú[q 7n'Ŋ1ôm#ķÜFgŒ25PJš#íf¸ĮĻiŅÚiĐE=əīÚ]ĸD,¤HŦX€W“Čūˇ8Ôë{ĸÉ”&""o ĒŦށ‚õôŌ›m¯ihˇ1Įe– .ؕåĀÁ##v#?Ãę3f=tĻãŦĨ sļErėB6A˛6ŋsˇĨ>_R"5m.āl!ŅꋞsĶ9ãĪ4ųī‹´7ą9F‘ļH#Æy=Ē`ãø€ëšÍ™uöKÄHņį™-(?uĩvüāŧgˇRp mią<:tpĘr鑜äã'n}ņŒöĪĩ,¸¨TnČõVdĮ/’9<Ķã¤ŋn¤):Hė;mpÃ<2}ŗ\ņ*ÜFŽģID…֌éõƒđQéVŦæ˛¸Ø?˛œ@HŪŌe™đr3Ī@ŲôJšj­{vŌčf%¸)$啐nå˛NܜÜõ?X˙‰­´ŌŦp[ˆÃåPFKŒƒŅ€<õS뚩äëķInâHö‰ŪĀ!¸Œ˙†xéM’ MSdúÄ13’w÷ĶÔŲī×ņĖ7"ĖΝŦōíÔpûwå=9;Gzzâ›sũ–†KŠ.ŧČČY]ŽeŪ¸Îy-õõŦŅ.‡åŗGg#Üyc1Ø,FR@˙ ŗ ֆDû>‘rČdXē2§h=O 3Î1īO‘ŽPųVú$[–VU‘c ĸ0įąÁnÎ{ÕØ.5FšO2ÎG”J '~~U$˜ö–#U{Ykģg‘bōÔÄs‰09lƒė•TEq8q&ē c´F ¤į'Ž„783ڕ…‚$›\˜…ÄÃ/ßS†įā `ëQũ›BšŌkŽn§UÍËųĄ”°&s´8õíéMļģŌ ši-´ŲŲŖ˙HFWū&Ũ‘´°ã î@ĀÍMŠ(´A‘+4{Ī™‡"BÁûŽŧČŨøŨëŌ˙ÚĩĀAĄÅĢžD¨IĀŽp;āv̎:͞´°Zĸm;×o œüŪÜ^Ļ„ëŠÃ`đÍĢĮpÆĐÉ(B͜ Îv`đzķIvÖē‚Lúũ pI1ĄDŪšoßč(é͉ ´ˇ2ŲŨŨęlˆ#/+°u+cNzžGTņÆbˇšĐãÖäxHäywÉun@Á# 'í<“N˛{;¨â’įC˜ 6I,žQu\!‰ä“ÆOO5qŦŪĮYaĸBęĀī—!9RpGv÷Ī÷%žņ’{ ėWXëö‰kqÕ×ibųčd…Ī“œņI.“öPķũŠĸQr×ÃÚdߍģ°9īčOĶŽíü­:âAšR&a3¸?Vb^k/x4ûxüÁō—p2ĮāõŨų~59ūŪ7 #Mi l|°ŦĖQ´ã 2rGũķéƒ<°ß‹uIĩ( ›Î%dÚ9]¸ĮAÜįŽŨé ļm:(æÔ`™’ed‘đI# ‚ uÁįØôŦ§ļŅcļMڅܰĻÕLëЀ8RSÁãÛ˜îdĶŋĩī ÔHĒŅ #Hp#Îčņ{Š’Î[9„pļ.ÔpôbĒ0Fr?ˆįžĄģã.š–ųŖÁŖÄŗ˛ļŨIÜĀūH¯FéLžķXHšAņŽÖĘã§Íģæ=:q׊’ÄęjGģ’63)oŗ‡*U~NBylķԏlU6÷i;C6˛ŠųĨ< ŒîČĀÜGíŽzÕs„ī ĮöŒ˛KqÄZ0O9•QĮs¤–GF7K,w7RĪ,Ēq*ž}ĐßČãŠË#]6$éˇ[‘Ū"cc'RP‘–Éā“ĐãōĘÚG dBŒfIâ!ŽH Š“š`ŽMf‚[A5Ž›NË'™eá˛6ķÁį“íži÷‡QŽí„7vŅīy~t„ ¤(ÛÕˇnėzŽ{T3éúĢ YõHb bËqˇxÁęOŪöŠnā†gŽVքQĮ´”Gےš Č`yÜ3Ü~5ĻžČōōņĨ!$Ċ@Ég ĀRžˆôŠįxmĀō­¤¸B蒀Jb¤¨ `ģÎxjŨŧö“+ĄN|Ō‹1dŪŖvAį' įÛ&§k›š¯‰‹Aˆ1¸*ķ6ܲĮ*:ņŽ{TŌŨęé)XRÆ(RF'Íbˆtn ëלp=ø–É5“pķ]\Ûy8FŲ3p͎˜'×$ tአov÷¨÷> Š&‰9ũڀrîÉČÆHztÉä×Oc‚ĘZs;FĄZF9,GRy58ĀJ^qGSí\æģ›wy ķŦ c¯v˙ųnņ_N:åsũ+Šĩmö¨ÃšĒ÷Ģ›“Æx_ũWĢāŨoÄOEQEQEQEwŪ”3X!8LdC•?ĄŽČ’Ōî{iķ"vFÁ$p{ÔŽqÜVƈKč×Č:¤¨Ãáŋøšā5Üøĩ›ŗ"7äG˙_@øB]Ú%ąĮ+ˇ=ąƒū:íGĨKÆ:QÛĨE&1ūxŽfDօĶėx|:FōI†Ņœœ šíÁKƒŽ@-<ë´,â4B|Ų%ˆÜû8üsÔSÃ÷riÆŲ/Ō™#(Đ!á•#ų˛ĪĖ™öĪ­G§Kgx÷ŗę–(Kmäļ>]ÄŽđŠ…4{§S6ŖƒĖ#ہ !H;r@ČôTCNĐlmí¤Œ‰’)ãŽŠ¸‚büō_xšLÖ˛ŪÚæ-­– 1ŪŲ gnõÉ<€IÉ;QÕtĻV›ėq]˛<~itMĘ72.7ÎwcĶ'Ļy|úÔh÷VPĒy#ŒĨY‚–ÎäF8$‘Į"–}ná›|:4͞o(XļAvC‚sĻjÅä—īpëw&Hŧ­€ŦD…‰RAQƒŽ3۞”•ŧE-‹Á%ŽÃ*•ķ eČAUøĮīzđ´į˙„'LaDØÉaŨÆG ¸Ī#'$0g¸Ķī¤ŌŽãŊž@d(QŨ”ŦjîšįqĪĶĻ*´ē$Đ#ĩiR'’O•|ĀHß.0ū§éĪ@y¨î4xŖ‚ōãTģŲnZ\TšU“å@ێ8Ëg9¤m;ÃņŦŌ5â"Š.Nc^<ŖĘšÛą‰p1Æ*ôíĄIw$ŌĘ^māļÖ|,p8ęą~žĩ­Ī‡löMlŽ\.å%b 9éĀnN8úōØĩŊ.Õ'afÆā V0¤"yŅ‰ĀŠã¯σÄv˜á[dY ŦlFČגĘ;œ|Šģ¯B=@ĢZ~ŗwwwüI§‰eU-!S…Îū¤¨ĪsĪņ;ÕˋÍm Ģoeí,#c›Œƒãƒ> ö Ô ynŨw(…¤RY˜’ÛTąĀÉØü ŊĻ&ĨoŠOģÕH}Ãä;0(ãvãœôÅfžļIŒw°ZĖYD‘“ŋd„Ÿ›HxúdB•…ŦÖi:Ov÷R<†@ˏ >QÉã9üęIŊ1U͇¨] ŽÃ+0 ScĢ`Îįšæ†ÄÆDÚë°}˛˛ääw D'§ãĨ,‰Ŗ,rīnĨŒĘÁŒĒXŨœrŸė~_…Xi4FSŲĻ‘"3+66rėKį•<•ôôÅOau§]Ü%ĸØIøŒÛf\“ÔíĀÍFŠ{jČ$(Ą"āp=FĐûߔņËĒË­ĖPÛÆ#ašdû§˙ŊØc›%–Ŧļ8šž…Sh°,I%ÉĀ8Čā…õĨIvYššÖQŒŅĒ#ĮÜsœu>œûU[Ģk(Åw­Ī${U™›˛“Ũ[¯žéMģ›D¸ŊYn ĪqåBAläg#šįĻ3€yŠ>ÕĨÉkhbŗžxĸ>\ ŗōÃ۞ŧĐUw˜ųDÛč ¸Ļ"im‹šÆGĐõÆ+QÍø˛‹ė0Ek)b˛.ÕÚĒABAÆ9Æ;æ wÖdhŒ¯om‡|į/Áî8”’Û_JĐ\jō r€ÚŨ@ū,ķĮ^ƒŧæŌÔ°5ŌfrÆ%*$oģ•$Øā uÎ*›Ã¤ˆãIĩ;ŠHí‰3&v€H'iʂšöĪ=ą^$đųf&ÚiKîE`Ø2Šc1å{ž§“ĮZģ§]@ļņÛŽ—yr˛J΂HˇĒdŅ´GûXÍ[ií&H4•ˇ“te~Uˀ˜îP›{ū.ûGˆÚ2!ˇŽa€VFĘޤƒž¸éę}9ĩĢĻģ.maí@Wk Äq‚FF˙Zĸ‹íŗęE>ˇup­+¸ųO_N9õ§Â–w×č‚úC:Æą:Ą\NGØrãŽQĪLd´HíQÚÖáöŲ—UŒnŅēîčåÂįØ`ĩræ=%4¨V ’­#)b6H=sČÉäņŠéôi„–­‹im‚š$\ū×ĄĪ­iuäw§åJ95‰ĢĻuK\ķÃ"Ÿ|#ú×ËĒ4zŗĮČ<§ę oiēÂ21؏į]ہāM/_ŌĄw¨O …ŠŒ tę y˙Äß é^[§ŨÉ;煐<ŠØ!FxWŅEQEQEQ]‡‡YN‘F[ÎIœv\cßī~•čšÄdÜXß Ę_ØÅ8 ´>ŸžsX÷ grņę=+WÃm›}J>å˙"GūÍ\‰SÉņ$pü_ükÜŧ 0}ŸAÔŸnĩč@sR\b‚0š¨Ü‚?Jæ¯Ŧĩíŋ>;Ûxa%FĀáY˜(ˆąęsĀã&’Męx4â÷Ēn,Á/#Ģ?˜Åps†^3ƒŽĢŠmeö4ą įiŪ*ėzįŠÉãøM6VîëDkĩŗ‘&$* ‘ģb6ž€į7OŽ#‡SÖgH°T,@}ęŲ_™FHā}ŌÍÁ펠Ķĩ4Õī4ģ&ˇY ģe&eIˆÉ…øûÃ8§¯Nôé ×fæh#_7§ ŧƒ‚OĘP9=°3=­žĻ,§K̏ÚWU°|…;@<…SËdįĶ1Í 4ˆˇš+xĖ>Ėā#ad|ķ€ü@1b,ĪŖCwooo=ÄŦ°ō͆VŨŸîŸB}iWOĶ´=Ą–äCĪŧÉ+ĸ1aķœ ž į<APĮc ]]ŧ y#“ĘĀČĨžPpāû㯠—Bi^0‚i’e $YĢ™U2wü`{eGĻi˛ļ…kĻĸÖ!"–-ņmUB…$nc ÷õč1-¯ˆJņ 54Ā)Bpà ’ŒîH­NڅÅö•äzHšu`R NIPT‚WũĨĻ>nN9_ęō1hŦWhÁÜAŒˇr;°¸Ī_N´Û3¯Į)")ōĘ)Ū–\ ’wžIöāw5ēąĖ]ÃM…†V,H§Žw ÷ūË];Sh@¸ÕYū›j•zö>¤ūôÍV˙„zā†ŠĘÎĘČ\+‚w˙lđ n;ōt´í?ėOpÂF9‹‘ŒrOĮŅEO/áÍVæÕRčė÷ęsũj(úŠļœŽ++č&ũ—C´E”ew@$`}öÎqÁ8Č5a¤špņĮĄE´€A ĒzgĀÁã¯÷Ŋŗi.u„XcŽŪÖ4Ęü˜č€āã 顡z€EŦ§›wqwm˜xbÁN1•Į,zwĪ^Äēk‚ę˛kqÛ7’¤ĄŒ)Ęōí’F3‘Ôp*”†ĀZO ę’mŗ ŊIV,å˛>lõę9÷‚āé–*AH.ĸHÁ|)(͎2:ztúSOöD’ ‹NšhØĒ1äđC Kg!cM’âŨšÜGĄČąk:”Ū]Kr§8ÚsžäúÕˆžDÛg`‰ž?0Ę d9ô8Ī'8Į^zP§Rģ°wÚĨÁ&Æ+´õģôã;g†šž Ü÷°ˆ#)!x×!“¸éČ9=†:ã5ËÂai†ˇ"G!R6I‚ĄŽG#ļx΍,žm"I&’{ۖINĀĖ dt!O#ŋqíUŽŖĶ-oš,hØČĪ"KĪ\üƒÉ+ø{UÖÔmDæėiW2H˛ ˛L„e‰DIĪ\ÛîûfĻŽI–â6ˇĐQ" Á€U’yÁ ĮŋņûTÉ6ĩ"ô+h2Ûßy0g’yĪnũ*ÄWWÉųžÜI–˜!$öœ™SĐūuĢ5ÅāۭƈĖÅ UPO~H :}2&Ķ–Öe¸ÖešG(ۄŽĘĨųãæäãŽ=Ē+Y´yĨ’ĖŧŦ÷D #u †L’2Éų°zœžy4ÛMFÂ&ûMļ“|ԃ•XˇIō†d_âūčéŽUĸëi‰lŧ>/–Xál goär0J/´‘Ë”)`ˆ#i#ąėGOåČnĩŲw 6° “dRŋ!ŗž3“–ÎŪĄöÎæ•ÜK0ŧ‘dc!1°\a00œįķ­ČĀ8÷÷§O9ā9Ŧg)wc.:;¯×åĪô¯˜|]ƒÅŠ8Û4Ŋ;ōjæ“˙z?!Rj'˜Om„ãÍ\Žž H„ fąhĸŠ(ĸŠ(ĸŠ(ŽĶĀÚvŖŠÃu …ÅÉWV&(Ë׊;Wąéž ׯ`Đãē°ōĄļY!—ĖuÍ#gįÆ>˜­ ŋ…ú•ė`Ģ(Šä+|Ä㠎ĮŠüj1đú_ X]_I¨­ÁxŧŖÂT sœŸONõã^2Œ&ąbįĄvCôųÄ×­|4˜ÉĄā‘šũ3ūéđįĘSíS¯ŧãéԘz}+—ÕŦâ:ÍÅĮö´’Éj‰°įzíķNūgŠíŅŪ¨Úč3[īžŊ”—ÜWōPÃÛéÎrFsMĩĶ4F)$Wä“ áš0NÖEÆ į…@úq֒4 yUVf€ÅåųÜN#R6uåŠũIú֗ĻéëũŸ#8ŒˆâōœI"Ē”!G ņ„lķØæĢÉ>™ovöR鐇y0%H“…”õÆ0_?^FM"ø‚Ņâ2-”ęą#ķ"*mÚ7õāßB)-õģĢ‹ž-¤xdl+ ,ą€‘žHSŸ™˜qÜô$6ĶQÖMŧ(öx”$!ŪE<–ÛŧãŒm xîAĮCVe]NU˛¸†6Ÿl\ qÜ7PsŽzd‰íõ녂Fxĸž6Č`ÚÃĘ ƒō“’ũŲÆ9Šā‡Tļ./ĩÚŨ#PJ…ā>æá”<ž6žM-Ž“uoz“I$‘§ ´ c×Ųzƒß׊Iŗi5hŧÅ™Ë PØ ÅĪúĄŸ|ôŠí,tŊ6d]Äōl¤s,…rI’Ŗ—JKËŨ=6XÄVŌÃ3"NŽOaānŊ”įŒÔļĶé1Ū/Ų‘ÄøŠL0Ø@Á#åˆãũÚÖ69vkx‹9˓%ŸČ~BĨŽ%ˆ D Š÷ úzT’[?*ÆĀŸņŠR2 ŠÖ,ž?•€žœÕĢwš’ÚI#Ņĸ‰ÔåTģ†O<Žƒķ=xĘÛÉŠ$ŪeŌÛÅâķ1ÆBáPØŒxŅޞ ßq¨Gæuų‚‚åŽ7/ĻĪAKsgƟęĒ1fgÉQØņ˛Œ‚9÷ÅG tÍpˇ÷3$K,†ĨÜÎ7¸^ASĩ°§ûĀUu@I­ˇŧ˛‡C°šĪ9ŪCr~bI$ãęMĻĪĻÅ=ž•vÄąrĀ(eE9fÎ1ˇąáOaWšMļŅKk¤"Ë*Čv4AY2āō;úĐU˜ųŦĀkUĩméû¨™rcĀŨƒĶ9ČíĶļA•¯åCKfŊ¸œcœ1Ÿ|c¯aŽĘ“UTųå”cīwãÔzôüj["{„ƒ}åÂŧQÉx‰V`Ä`žq×?ĨŸDŽæÍ-§žy#Œą,ōdÍ¸‚qÛ #8Ī5{LŌí´Æ[ĒŠp78Ič0Ū=iã#œšPJđzš #Ψk#÷Œz-ŌįņZų§â,_/87˙ß\˙SQčīēÔíÆxüMM¨œA {°ū_ã\Žē37ŋøÖQEQEQEßü2ņ­ß….o!ļļŠcpšũé8c°¯Qâ‡ˆ.#—ėp†v #„ö#ûÄú×_­ëz‚i—_2Čŋ*y?!ÜFGo¯~Ūüy†…ĢjÚÔqŨßŨ\‡ŠP|Ų™ÆDl{Ÿjå|v6Ŋ¤ŋܘ~Ŗ˙ą¯DøY(6F 3€Ã˙­^ˇlÛ­ã'“´~5`qJ})‡ŠŦ oKĶŽį-(AwZ Û§l‡p' ­'$cķį:ãDĐÚIå–ôŧ˛;ąQ,Jß>Q…}Ü{žy¤EŅ˜ēĒ´—(H™JÉķũ䇅ã?Ŋ‘č}ŠęēL–ō=­ŦˇRÛFƒÉß!+ˇ•\“ÔdzqŌ ›RĶ'´Įam=ĶK žQsķl^Žä ĮnøÉŠāņ ÆŲā´vÆRPp ļ aāō:zS_’hŌ6Ōd)8ÆŲKm ą\7Č}:s÷‡­}aŨ>Īe$H ˇ”čĄ0co—Œc,Pg'͊ąëÎĘdļ‚!ōn ˜ļė3 'aÁ=øĒ‘'ˆå/n˛$HÔd_,°ˆgæ*ĝė:g…=:Uã§ëosæ5đXƒä*žŖĖŸÛø“TŌ ŸF‚ÛQÔãĩœIēRĶî2'uûØ’;đ=øĒ,,äUõģy­ĖANŲˇ9;˝ –áFxČã9ĢŲ:AmíũĄ.XɟŗHG8ČSĻ Ųõ9ˇ5Ŋ•ÃÅ+iˇWO Wxö:rŽzžŖšõ¤6VÆ7CĄĘāā9ã`Ānë—$ũöBELlCŖ¨Ņ4í­C8\ƒœôŒ˙yŋ3VüÍEĮÚ <†3ū›Gķ§ėÔđquh=žĘĮųŖq<ņņĒ,YũÜJ€ß{ĒšŊ´×äÁ$m- °#¯ĻĮ{Ļ?ŲË\_Ÿ=ÕûDŋ+08 ĩ°3Š–+­kÃjUĻ•Y”‰Ųœ >ßųh}}:āúQku¤I5$š3|–čˆܝÉĀ cŊ\Ķu‰î$X[M– KČČČš}ŅŽzúö5žĄŽHž[äf’ĘûväáÁVĮŨÁ<rŠŠ4ëRâRo-āHJ’J0%Xm'#īuÁéĶĨ[›ŊR<*ŋžTu[ķČū•V3É•n:įu%Ōíõ;Įē‚S#Ų œūī$Ž˜áÆsžØ9/Ž}>2éi§ŨČŅeUâsčAÁŨ胟qß5nf¸kōööČîī$l$ÉTžŲˌuų 2Ũ5-á[].8>Š=NI#ž=ũĒIį×V7ĘŲąv‚H,ärŊOsô=†ĢrÖŌ5įŲÚ8vČĒ ’ÄŒž˜ūČãŽĩF[ ­N †ŋQuyˇj´ŒŪä€r?ē3ė:dˇ†ŧēyå˜å[î–AĘį3íY‹ũŋ ˇ1ÜGtęfî<㌊įãĸ­ŠĶŽ,e{-8HĐ´xŠTŨÃgnIgۏn$Šé…ĮŲíôeFh÷?&vŪFÜt__Nĩ˙›lˇÃbâmWĪ jŲXF/aÎrˇ~{bŧņiÍhįWŧ‘‡/¸0Ũ× žBäg#ëËŽîtKQ ËŧÎĀmådp āõbā5+_Az .icD”ŪZ-ĄÕzäļBņĪךˇi*Ës˙e}fĘHĪ,ģsƒĀõõ=ĩ"]ęÖã#LUWœĘÆ4á=öžŊ2=Ĩxĩ‹ûÉ-”‡—Œä¸p[¨Ü:ņĮZĐĶíī ųîį[ĘPŋwēÅG>•Ą—hĮČœRƒ7r:z҉ c~3I#ˆ#wšáQGR[s˙×ĻFĐËKĄãF^C‚1MąŊŗžęhĄ˜I,MĩĀúüFsŌ´Įâœx¤ëĪ ĒZĐΖXuIc?øøÖžvø§“âųد c9˙€¯øÉĐ2`eä0ãįëWĩOCŨd#ķ˙‰ŽOV­ąÍ`QEQEQEQZ:ž^­š#ô¯T6’ÁŖYŨncnA#åfŨĀîĸŸĮŪŊåThPÍ+C /60>^AŨԞūŨĢÍ´øŽĖŽIŗũ WúÖ_á˙‰`~ë"úë]w‰ūfõË7ęqüĮųėö'6ĢŽŲ‘5msč=ŠOCM#“X:퍕ܑ›ĩēo•“lŗ‚;T‘Á# Žŋ•4´ŗ…üČlu%y›đņÄČr2WūzŋįŽÂœļ6ÉgöEĐŽMē‘„i#`pž_Ÿ¸1î=sR­ŖĮįy=œbNː.˙÷ļĢfŸåÜ@ŦEž(Î˙4Q°vŋaS(ž|ˆīl˜dā f=8#ũgjdŅļå7:”hP–#EĮŋÍēĢ‹›EŨģ_fv7ī!äņũÕĪz.ÂÚĀß‹šb Ø)w.X€r ~SôÅA Ū‘qq2%ÄPBō&•åČC†XžįņÁü[§MĨę4QiŅ΁€&(ŲFî:õíŸÔSĄÔgˇDz3īōËūęŒnųzŸ—˙ĩ+jēąyz3ļĐ6æ}š>ŲQę*)/õ¨t–qˆˇüÎHb̜žƒ×ņ5&5™`‰Lö‰x’fTF8‘Žœäû‘Š­ooЉ7KŦƅ ¤ĒŠæ$|ËÆWĶ×>Á˛Ī×ī:kĐĮ1Tˆ°\a€`āy;GŖyŒÅocisjuļWŦCs„Ī ÷8=¸ĮĩS’ $&.¯.$]ŒĶ;&UHUR¸Úz†dķדWĮö&Ѝ(’Ūi&•Ķ1* ”Zā¯R\քoŦ;¨l0n$ąŪ­ŽWŸŧ3ՏoĮēŦZëKYC+¨98PNâŖž~eöÉúfͅĖûšâæöŌâuŒˆ[*ŒIÆ0š9ßSĀ9Íg%ē$ĸ/øI"F†ŒI`|Ûšį$܌ö§é°ÛÛępũŸXí1ˆˇ–•@8äŒņ““×ĻÛPŗ(ō†C@9é¸ņŒĩ’č˛ų—RLŌĪ™’šRB{㟯jmž…koģÛr%›œqÜŽTtéÛ­>-3O°@ĘŠ  -#IŸsR:É™öhoÄc8×đ8û-° æĒz)!sÛúĶF­ĨŖ•kȀ9ķāmĪCūÚūbœúĩ„q$åŗ‘ãŪĖ “Œq´ūGŌĢ_xŠÖĪė˃1Ę š#iTØė88ä”#ģâ–]nGĶĖöÖĖH# Ā7đī?pˇnš°ëÄŦƒM–P ģ+ĄsÁQœG^ÄôÄmjM"Ú9#"ád‹ÍueVeX’7w ŠõôÁŠ#ˇÖ.­%ŽęHĸܜ(v’9!“‘ŒvÎxUĶ/|ĮÛvļņ’8 ČTųÁˇ$ŒŒņ×ĨW]{„šÖ}byßbų‘'~b-‘î¸ĻĮ¤h“Æ$7Ĩc'åų’0ų*Ār3Ī–>a‚@<ֆ•‚ęS=ŧŦķBíąuÑąĀ^:*vę§ņč‡cۜqŌšdúUMX¤\¸PߑúW|d‹ū'qČ1ķ[ĄÎ3üDJåôĖŽŋį°ū•ÛøqôÍÃx…#k\ ›Õ›Î>ī=3U0Ĩ˛ÚÄō8n]Č8ČĪŗāûÔzŖÉĻ[„•ĘŊŦi´6q´a¨?ôŽsM˙G×,Ø˙Ë;¨÷~ 3KãØIŌ¯8#k1ü¤{á\˙ž 2ķÚ¤ūĻŊßOBðs§QW—}ĮZiÔl2N:Ö&Ģ䐆‚õ5ČÆéZ1‚ģ6erIßĪ×éPM§)†ĒE ĘfڀîV—ŽģQĮõĒ’ˆîŽ#™uąí—ėīš ᔾ2Ã9!GÖŠĀtÛ¤…ĻņãoõM&IePŧƒģûĨąū+6…vĢK%ʆvŒĄAōžÂĮ€§œwĪaĪRxzV+k Ļ *ī%T lžŖ~qC\Fv=–)Ûˇh¸ˇrTAōÜ^ũ1WŖēķlœYč‘:Ð’ ur6ãđũjF¸Õ›wļÎ+)Û+n7!=OĖpØČâĻ7:ĸE;Ũĩœ bŋ1c['øqƒŽšâĒFšÄ6đ}ĢQ€&ÕBãæķ eĮ%}23ܜũŅ´Û_ĩęĘĐæ#F3;.ߗ8Ü<đO­U’ OŗÂ'ņôąK!‡rK¸g!ēõÆ9îĀwR84Cvˇ÷ (`Æ|æų2~é=vŒ˜ŠY|<l-eœÜ…’Ämu^¤´?õĢÜYN¯qoĻ\™ŖDymãx-Œ1 œž¸ĪĄ†Uķ.."đô­4į{…čpM§“žŨ‡=8˛—ŝ­ô(PpŦ]F@čyÛËʧ[ß“´[YĻWå“–Û’8~Įž=}Rīûrī~Īqf“ũ<‡ bT)sžG͚ĶVžR%ՑPísˆ`r1üD˙˛)mí×Qž‡[y&ŠŨĸųkžFæÆŨí×J‘aĻëņ\Í~Ķ"ÆRWÃ.OsŲ&Įšõ5UG‡înģË9ÜÄĮ†\ũÜ” ÷āsZšm…ô+:X`ūöf/ŊxiãäŧôĒzy‡í–Īũ‚ĐHŽę˛mhö+ÉäáW<õŸ-œú‹4„ʼnT’Sn î98ëīPÍ ´ĖĢ=י†U—Í''xĮĘ #!KÛ§jk}K“uw=¸o+ixPë÷N@#=T~ č)-%,Žī íÖ6fgÜvüŨs×(9õQÜRSJû$ą\Yņ ŽŌFĐī–v]ĮpÜ778āœÔø€˜c6Ë r|§oîŨö€­K(1œŽŖj]~xÖW}*áb]žGßōíqūc9^ŊNך…Í•ŧö6ČæHœÉœŦ1ĩFYHÉČĪ=:sLøá!Ú*Ĩ ûØ]Ų7ÜëVoŦ%’öIDđF^$!¤´K’Ås؆<`āäôĒÉŖK~ރZ–TAąöģˇÍåĻNwžß0˙Žø¤¸Đlžé&šųZO8´žvÅ8gŨĘį;¤į8UÁČĨƒDŅZŨĨm5ŧqylë?ĘĒ‘˛ō‘Œ+°üsRiRč˙kT†K–g$vP§i䏑rė::WJ§8§ļ84ƒõĸžf™t§øĸaúđ¯Œ°‡]2äķĀGäAūĩÂø}ŋ×ī ūyū€VÕá͕ÂöOëũšš]Qpė:€EstQEQEQET֐ŧ÷QŘņ“_UÛü>žÕ|7kk¨ęČŅ[Ėīeö(Áį8Ī~ã­Mkđ›NЎZ­Ü€rJ*Æ?\Đūđ’ ÜŪCæ Č7ā~€å^mãčŲuÁ0Ëue|-›mücŒ˛Žå˙˛×ĐÚc’¨9ƒŒu´iņϓדދCb åėÖq‰%ŠM§8=z‚:đF+ž’_ ŲÉ-ė́ĘĖ ĩà ÷:‚ĮP;œšĨĐôũa§hî>ÖĖg,Iāí$ņž8lcÔâ˜í§+Zŧ:%ĖË:y¤Ë\Œd‚F~\ŸN=j@â!ƒÃ‘2Í9Ę ąˆpC:ãhÆ;žhˇÔĩ9Œ¯mĻÅ(§ >pŨɨĮNƒÜņbŅĩ”ŊōĩŦdI+ŦDn%Nė`✁×=húĖH™ŧ…;’áŽĐ ,Ęqķdā`v°O<–7ˇ!ˇŨÜ ]áˆāá—éĶ<â–K4#ŽÜNDMđËģBĢ0;ˆ<˙Ā ÅČmŦõ…œw˛ÍögŪ­ŽS!Ķī‚~˙=zVLFžŪŪÆX&Û(IUYļąÜʃ8۞@ÉéŪ­Jú]œĻŨ4ÛĮ 0 åĀąČō>ņôÎî„bψĀ4÷TĐÜŠ„‚H€$įęĄŋjģCs6âē$I—xSĩwŽŪŪį‘ß‘Á­.u!orn!†<Œ0ûätnHûÄ ƒėēûG­ÍļčËä°/ōV IÜGN˜éP¨ßGp[S‚ —ģ+ĩ”Á— ÉĘņÔOá$Öâm‰&¸ŗ+Ü!ōÔÎōĘ>VĪ÷FŲü¤‘Ŧã‹û6ãQšĀÂf•[—,ͅīž{c°¨ĩĶcxtë¸îÄvЅYr ¨ƒ€Ũ1§=¨ļšŅmF‚Ęá˜Âc}Ģ‘ŗĶąÛĶų֌„iڃEkĨO*Ė‡Í‘UÛqãnr:ûįķŠ§/Z‹]")&¸Ũ•Ø+'*JœŽyņ‘ßÖĨ/Žģá-āˆīƒ‘š¸<ô )ČÁįëP$:ÅĖōql3¸H#•˛ÛÁÛĐįß8ĮZ†?ļ-Č[j b‘L‹åĨwrš*2Hã ÷éĮ;ōr*“õ¨äûŠy å¯ūËTŠ­DjIےØ‹5–Žn$0]m&i".Ųûȇ#sr`1VžČÍ  ‘aÁ;ąŠs˙,ˆ‘Tt=Šõūī­%–™%ģ[˙ÄÕį†&UP°ÛPĄ^{'z`úŌÉŖŲ i$šu_´oU,\°;FG÷É#¸ŪGN*ĩļŖmXmæGtMģDÎ6ĒōŽyõ>õEī´gĩÜöŌ ‰ÖäfũčEc€TN uän÷ІŠ`QâōĄvŒ¨8&RÃå8|sōŸqļ “_T\YÚ ß0 Š÷öĮŧ}ۜ:OįY§HÖ%Œ P ;Į*xaÛ9÷Æ;Õ[C­Ŧ0ĄĩŒ ¨XČíųö°Y@ ôīøU‰­uA3Ã:Ĩŗ•b‡ ܃Ž„ôĮ>š5ŌĩI’?SË)FgRppŧŒ(^ sœŽ8ĮͨiĪqįOvë`ū^ŨÃ#iÆF2€ā ūg0ßEi{qge.ŖÚŧĖ•SæmÆF3ÁÉS`j˛ÅŖÛ_™’$]™ÜxØĘ,§€[đrœžÕ§֎-īˇo$DeŸÍ€d%Ī!ĀČ?9ô¨´ŊnŌy!ļK(ŌbYv¨1´œ|ÜüÄôô>™ ø†ö‘æˇyn/Ũ#U áXœ /~I÷Å}Ôķ–O›!æjƒmÁޟĪíZ™Ū{`ß÷Ôũzå~ĘFĨŨŽ‹úąūĸž”ŌXģH}UũĪãZƒŠFëŠiĒŽ~ĮšlŌėīR#s€96pOxÍD/–FšAíX´ë÷ą qč:UÛèũ­–ÍŖ+储Äaxŧ:œļÜ`ÁôÁĨ7öÅÄRFˇļ —ē…Ąs“ōÄpÜ1œ`úSåˇÔC‰îu¸a9 cP¸#Žxč1ĪōĻÛÁ´ŋˇ—WÂQĸ;F~aĘāî##vNƒŋ&ĢGĨOž9u[éI( müp8S×9ü3Û5Âé6ōÁ42I$Xœ`‰É2OĮN9Ĩh–˛EˇOšÜCWČĀ,ŧ6ücå=ųžiđÜMÁāŅŖbAˇ}ûHŠcÆIĮū}Ŋíéŧ+gĸĸ˜c *¨ ķÜ9 `g#ŠûÄãŽoÃ=üv×?iŠdT&.¸-“€pzržzÕOĩjŌ!Ūi1Åš•H”ž€ ägh$˙’+\ØQe]^3o0į÷ž`'*Ŗ 3ÔsīAPMŧ@ƒSÖļQ4l€ØÚŲĘāgånž§ņÔ]eU/Š^Č î˙[¸1ę͟Lņž˜gQˇąkXįŋ,ßf‹ŒŨ3;:JÄÃÉ9ė3Ü*d,‚Rę‘Á]Āö={gĻmÉ, i%î›ŖÉ%ÄOĒš._ 8Æđ '¸ö§ŪO,ŽōZøy^|ģ4’Ûdɡ!:ŒœsĀô̆įZIåé) 09‘Kds‚>ŸŽ{s)mbm*[wh`Ô^3´™^I$ä2qŒšš ÜÃyįËu´¸åT9l€üŋ/L+žũsšÖ‘K \]x‚!',ވ‚L vĮcĶ=*­ŊĻ—cc ¯ąŠ4ĘũđX|§'i;€ˇ=#ēS1—’dM‹ä#.ÕĘčÃŖI‘éˇ`øzyUŽæ*Ű0A]ÎÎ@$ķ÷ąžžũj¤ZnQî%]¤áæUPZ9â¨ä?ŋ9îŽz&”&–ŲKÉ TųŒŪb–Æ y`dŽ zĶeÔ48ĸLÚy‰čÃ5š>_ČY—-Ķ 9‡ĩ>ķZŗĶî'…m xļ†+°v—Į9Â÷Į­%îˇ<7rZÁfdd K`“ˇûĒIáLŸ”ņŽj ›ŨmŌéaŗP҃åaûøc’Ãû~˛?íÅ=ęĒ›‚ģ•,Ã+ˇ'-Î7œú‘īV­NĄKöécš¸ƒ‘ō ́Œüģz÷ŗ†t–Ö°OĢK“…vŖ í‚ŲûøČP{c ĢcaģÁ5ėkļQpCƊT€ā:gëīIk‘§ž’ŽÄ?žfįlĐāōŋ—fÄč×WîbEiōÎZHXr'‡Ŧ€ņÜÕ{MRÎE JĶ~í`ˇ@­`x“͍$ã<šš?4ƒ÷ZUԑ€ 7÷ €žÁOšĮ5ŊŪē-&V˛ûCšæĮˇ<*ŽģAīnp@ã6ĮU:˜šK.Üå6+€ŖvŌ>cÉĘäņú ­qeĒO9†kÛdˇ’BÉ * ÄÛÁû€Ÿ—#'œÔ­Ą_I%Ư0-PäN'īõųׯ#`įŅ—>ą- žÔJŖ¤ˆP• “œn `ŠĸĶô´=Äwq3ÄÛØE"e3"ÉÎŪqŊŒũTcXŅo-mŪ´†‹.¨D…ĶÅˆôW ’qÉ\j:›,Ą!–6WiB§iĪ‘đ_ 1Ãâ(Vrm´ÔxŨ!hŲp¤n,mģˆÚ¨ON0×'AÛڟÁãŠ;ō)sĪâŧwâ| ø&ßwü˛ē+˙Ą˙…xöˆÅfˆuęŸūĩu3ŒĮ9ā-ä¤˙JægÁŠ\r¸ūuĘQEQEQEQE} đČizŸÃ Ô%ōÅĐžCķ ÆĪQ¸ō=År~è8 ¤Ã9ųO áē~•Yö†![ p­uw‹æhēk ãėņ ũųW ā) ähxÃēŸÍE}7ĸœ˛žģĄÎzķ‘ßņ­œsHÔÜdũ*†°ą˙eÎĶ\"Œ MĨ€U!ˆ uRw×1‡ Eg4‘ÛÆ#‰7öČ=39ôr*[IUígK]h—| åÜFvȌÃ=ĪŨ Iôį#­Go&ĸĒBxvÔKåĢUĢ>ŅĀ 8Ánĩ÷¸ōŌ(‰MۙK ;ČÁ!‡đŒúō*7]^ââ8nĨĶŖzIjė$ا'ŽrH 8ĮķŠnmõŒ“KĒ,0G!”üŠqfb1ˇ?tĸõ=­Rž´ĩšKXîux Æ›¤ū-āH›ąž2_9ŖFļ÷WŗîŽA>ų',HÉ*˜äîãúUQw¤ÜÛ˛KŌ­ĸJĘ …\!Æę1úķOˇžļģ)htš7ēeÔ4j 9Æ{``qĮŠŽMF`ķ–Ņ†Ø¸G2đā}Ō,ÃĶ‘ŒõĢ/ŦG–E Š$fŲ*ą<8$–ĮOÎĻûFšwŖĘRaēaĩ2Hەëרo\cž9–Ö%Šrnl|Öģ1äĒ•b9ôāT&ŠurĘ5ČžPŌ8Ô၏@}3ÆG^ϜpÍ9häņȂuÃÂŋ? 3ČnA<¯5mÛK‘âßĢČōÆ f"\ČĄ¸ Ãn=ķßŪĄŠĶÃöąY7›u"6ã†HátéųqĪ/ŽMÕ­MĻ™tá\€ÁÉĀÛædÜüÅrOOĘŽË,fŽko™œc–9!ė(͸qũæĮCՇ¸°ĻiXĮũ… pžāKČŖŖŽrIĮéô¨n[[]Điöļ[¨)v`@ĮĘF:~UŽ ‹xÁ%ˆP <“UäĶ0<ŖœœúœZ ã jXG"{ ŌÛ †S ‰”¸~#"˛˛.îZÍĒģMhxÜÍķpÚØĀ8ĢļšDģģÜĘŪjImƟ‹’NÉÆ1Æ3œ Šk§čëä^ĨđÜŦp\Ƙq°ž6‚Čš™ĸöM÷Ģ,ŪrHŌ ģ.Kœ/8ۘ8ūYĻËqĄ YYDŽvKÂÅX1—s ¤ŋž*­žĩ¤Č°d˛üĶGĩ—qœœ<ã×­O¨ßßZj†8-šâŨ"Vبؕ—#=:Ŧ÷×BHĒâīSČņiĸIdo•Ũ …_-7¤û‡#?•JŌëī-ĸLČØ8^2`}ãÎ<ŽßŪö¨—ûq¯Lw7 +° ¨o”g’I$ņũŌ8Č5jÚ+ë+FŽęå' C!‹ĢŒûļOļk=ôkEHEūĄ)”ŗdäŠÉ%Ā#°ÆĐsS%Ž„­"éKn#ŽP¸,Á1ŽT~X§}ģBˇŠx‘A6ī1<ˇa&CË|§ 7~ƒéHuÍ&Ūfō4įĒî%#O%‡?0#îČôõŦI­Ī(dĩĶå$¸%†w`aU°HĪr3OƒUÕäd#H1ĻSr¸mÜŽãÕ@ëōõúS]6ĩuöu… DR7‘× "°‘K Æ †9ŽM,úã’סРÛ"•‡Ūvė#)ž>nũOqP>…wpĘ×ZŽ\&ĖĒŋ4lq†ĢĮžjCŖéö&vžŊ’QvšŪ9å‰\NrįœõôĀĻE§xzÖ=ņLėŖÎb˛Ģ2…!ĀäcŽ˜āéKĐŦch$ŗ– `äŽŌ‘@~`Ĩļā(äã§Ļ5îƒ Ė"ąƒÍRČ c.YTŒļ:ŗJmŸ‰aû8Ÿė ŧ&āĐÆŨŒčŊInČ'kŠŦj_`XÜ5ģǍU27ī $˛ü(1ģ#æē(Nč҈Á#Ÿoj—ŖRãŪŧŋâ,gƒuD#˜¯ íŸūĘŧF;nŖ'’¯ķ5Ũé÷[j6÷›ŖF Ęr;ŠëĨøĨáäŠT‹JģÃųåĮū=_=^Hŗ_\JŠU^F`P ¨(ĸŠ(ĸŠ(ĸŠ(¯Yøf·õØKşõų‘‡ūPßģO}$ė9›÷‡‚OSųæĒĢ ĩւdđ•‹õ*’ ṹĐHļņuÂgnØgĶ’Ĩ}1áųĮ-&=ø?ŌēԚNhĒ÷ĨRÎvhä‘B1+wŽ‹ŽséŠä­$ļ“ʁŧ52ǃ÷„˜Ā%T9äžû[¯uÎŽōXŖđͨ‰fōŌO,GˆÁEĪŨ9ū&ĮMM*ë°ę˛›a˛|kĩÉę¤`ä“Ô<š|Į\žĘîÜËi܀ų !UÉ<ąĪC‘ëQ¨ÜŲĄ“QˇY¤‘ ŧŒŽy'¨ÁĘö?ũz¨`™g–Ū_”y#ČËĖ†Úˇ‚}Ü z÷¨˜Y5æNˇ{*žĀ 3FY™° ÉįéŒ~ <ú$ÉĩũÔŅȂŨŠä‰J†pĮĖ~r}:J n|:Ÿjtļi%]¯‰Šī!NÁ‘Ŗ§^zqZ0*YRt›†‰ö]I^H<Äđ\“‘ÔJ’ŨŖkŲSūÕÚf &hpJ ’JķŽrsĐqžhߨŦĄcĶĸ+„+ :pH+Ž?äu<ßȨéŧld,UØ2ĒãųN}ūž*ÄCY’Wßqf¸BJ $Š!ļž3Ž T?ÚzŦšĘDČAE99 ÉÚŖîŒ~$ûSE°Uķ_]XârX”RÂÃ/Ī?Qüę ­´r[P”Ų6ų)~ų*ΐŊI'ę=)ŌŽ°ĩžögHDŽrČ/ķä„ÄŋŠëšĶRŗū؂Ī{ŧ–ļŖ|„‚lį§$bŗ÷[ŨY§™áû–’XĖÃËo0 Áۏ#ãęŪøĢQĒ-Ã:xvLĒĸ _Šų˛I`‘’Äž¤wā՝>}y-ŖVĶ!ƒ0`ˊ1‘‚ˇšĪģ÷ĩkũžYĪh#2ģ0|– ¸` :dZ#SVž%ÕĄÛ…*0Ė @lŠ$•¸éõĒmĒč֐E•&'|<Ē“åû€2>üÛÖąéWv–ąDé#šT>âšb§IÁëĐĶ´ŊZkų‚IgP zd×9Žæoü:Ō”Ŗ`Yr?x\úũŨßŌĢ|6ĶŽÛx,Y‡üđĶō2ŋÖ°üM­éŪ#´7ētr$ ē$@‡ )č ãæâë˜ŧ]uŽš˛ÄöUô¯†dĖ69lō@?đ5՞)¸¤ĻKģË}˜ƒˇ# åįZŠæŽĩKxUÕ°Ā7üKŒ€:ãœāÖŠ^†žîŨ&ņGq>IcΘ63°äHŲÆ8íÎinŲ\"ā‰vÅpÃ{Äą÷qŽüô5¤ˇŌGÚm.nõÛ˛¤ŦįyČBÜ`Á[žĀ;Ãī<ĘņË8Y•AÜA, žGˡˆū|4§K4ûKEa+]YĀDXÜûÂ(ƒ9ʓu<ņI$;;YíôxūxI‡ŲyTUoAĮĸãëŽĩ4“j†WX´XT.ß,ŧ‹ķdŪ˜Āũ^”ÔÄķŗÍkjÉæ…œĢm\cąã§ž2ܜ\bņ@ÜØŖmŠĢqÂg¨=üĪÃmLâí`–6Ôā†uc“僴Ø8Ēôîã'šÎKKyŖQ{­[Ũ !’%v2۔îvŌnũzUtƒJˇ‚ÖŪ-^éíĶlCČpTœ1ļŽI 1ÎßŗiN‰pž|É ĄÂ!Yŗ’ ¯Fጜ}C#´û[i͍IA#dpŲĀ $/Ldg*y¤ĩŸNY!Ņåš&QÉā/ōŗ+ž„ņķ~‡ŌŦųėĘņÃáĸUđ’ ŠÁs€~Sč1ۑČëVäˇÔ`”ĩ­šVˆ8Paķ†RHøˇĮŨ ã4<Úė‰*HļđāpÁÆTäã#v0p9÷Æ;†ĩŸˆįECse ™‰F~mÄt93Ύu›OÔŌXĖúäp8GĪȤ°$qŅzqĪ^ĩ'“gfÖã^xälL› ÆÅ Én\ņũN[ŪcöŠ!Ô¯&wōö†ųÃ2Ē€‚F@=}sīM/ ŨjYZi^LI!m‡Í ąr HFGALˆĸK[ļōô›ō-dhÔF啀TR͖ÜHė?.}*ÍÂÉmŠH–Ú/ ™[ĖXylōėN:†(Aī´ûVäM,–ęĶÆ#ŽW9ĮãPČ*1Ärg´ôúUK•k˜4GÁŠní’÷Nš´”‘đŧLW¨ 8üë,4&&寘31.ņ Ū%|ŸģũöÆ}–ŦZ Nŋ1˜Ml€—’Q§st$~ņ‰8ĮåO…ô™íîĨm7ÉO=c”ÄšcŽ‹“ÖF\tí͎g>vˇRÛZÂWx2-x@ī‚āķܚŠĮUŠítûBģbۊT <)Úq÷~đƒzUoímFãc&›,a˜Ž$ŨĀß FŪ›ˇ_á`yC$šÅ֙z7ŽâW+äLj _˜t|ķ‘Đ‘ØQ-ļą{ąKå$RŦ7pwŽ 7)žųŨƒŒTWvwRčâÖōū•‹†v<2Øéˇî’žŪzš-íā7“ę?k7öy‚ <¸€qĮ~ËŨ6Ö?$]\ŪģIļŨ1Œc+Ûåã Į,–ēEĩŒˇqĄœ($m™Î튀 ôéĪŠĨĶâŌ㌤É7“ÉæË~LģI#*HĮÉīHž"ĩ–5ŊœŽ6y…×n[‡ ¤’I‹ŠúÔwzžŠsŽŌĘâŪrÅC”.Ę1Õ09|ķũÃÖ­}ĢWb‚;*Į—ā2Ų8gÎp‚:ˇQƒQĮ§ërš1ĖĀĖ˙Āe-ŽgåT=2yāTëŖęįtŸmK2 ™įs7\d {ŪĻû ¸ĩ¸ÔžGšéB}æhÜaŽIá@=€ëUĨ°Ņm§ŠO´ŠWˆĸBchĶ"㌁ûÂsŸR:R͉afŽĢ-ԘwŽŲ˜ŠXÆė`Ë.ÒŖ5rŌ] ;Ä[KiLí/ŲüĪ%˛)$aÔÉį=*ĸëúd7‚=7ÍØ]×ĘĢ6Ņ“œˇŪÜ_¯Ū8ëWîīî+Si ÄnōēHRŨĨUTl3g¨/ŽđzL›Qפ2%pNHn2THõî=đķ7‰ŪYv–ŅÆüŊå~a”œ1Į'ōõ¯¤[\ZéŅArÁ¤RÃ;ŗōî;rp9Æ3īZ{fŪƒĪJãŧ[û]mÉ{ãEqũ+æ8€MBU ŒgõūUÚFßēŽOlū\ÖŌí¸ž>Ãō5ČÜĮğīŠŠ(ĸŠ(ĸŠ(ĸŠî~Ī1Õ%ˇIæO2 ”,lFīŋCŒ­vņéđ_øzIâp.gg„..QF ?ôÔ~\×#’%Áí]—‡™á̤ĪŨš-øüMyö¤Ļ?#,‘oáŌžˆđ”žn‘fgđįõŽâšĮôíLC’zԚāŒ~˛f kpæÕŪ2I`rA'ŠČVüOnt°.ļ›tÂØÆžYų‚đėÃpĪŽ8ÍDbZZŪÚč$ąēİË.ä8É`ãąœ€yëVϟRd–ÛCf/ōŧ…C:årNā¸Č-īōՙ¸ˇ.°Ú,ļŅ#.Đ6 †Îî§^æÁ¸ÆL?ˆŒwí¯uhæ%Ķíí­ˇäH8°¸Áī×§|u§פû˙cŽ#Â6`˙{ŒŅų“õŦ˛+ŲŦmíîĩHŌâŨZFPœРÎ2BĢ û“ZÚ{†´8ē[Ÿŗ"ļîrxęztëڝ/J†1Ŋļr|šĒs1%Yē‘“Í,gŪ­€˛DҏưÃjæŖąŽS7šXĻö‡)ˇ);O8é×xÎA­+šôÉo䴚?4]ūęLo#r:Ūž˜<ĶÚįKĩ¸šŲíÃpd_+pfá†Iīķnį߃TÆģdo5­˛¨ÜÉ&QQÂbp3ž¨ĄÆ:Šrë—Ō˛‡°vɌ Æqģ§îįžy ŠmëßĪŖĀUd†âX›xŒ+&ÁÎp3‘œvõÎ*ŒvZ´Ö—‘Ęō@ķ vËƒ´āyAÎ:cœäįŸG.‘:K Í$1’7ũė§*ĘÅØĄÆNIÆ:í@ ëVn´ÕÖm­%šXĘĒeÄlY$Š# Œ¯ËŽr;õˆ%´ŗĶÄRKx ?ˆŒ’ŌŦ×“ķ`ķ ššI´Û›ëXžčË2Fˆ)sŒ…ä…=J’AĮMŨW–M -‚CįZ,ąŦ‚EbĢš@^\`õA×qMūÚŌážHmm7HFæ0Š2Ku ˙˛ÄņßÔÔ˙ožŪ+uŗŌn7€MÁ'æÚFÆ$GËßų`Īk6Žë0,˜Ë@ÍĐI9ÁÆÁÎiQu˸'Žáa˜#D‡%OvŽGŠ4cę^lžUŲˇ…äķD1šÚ„đŖpvI‘ĀũåXšĐnęŗŦLŖ1ŋäųHÅØąn‡ĨK†í–ŪH$žyD“,ėĖ;•B‚܃…wŪĪ9Š#đÆ’‘ŦftVC†•ēĒ…^‡°~xév/k-ŦsĐĸyÃĖ ËdœûÔéeiŦ ã+ŒãˇšüÍOƒ×ƒNN”d“Unĩ Kâm„ŒŽ Ī v§Ĩ:ÎúŪų]íĨŪ¨åí#`÷⭎N3ųQž@ŖĄŽ{\‹}ëĻ2'˛xĪįũšžRyz´‹Đ}áú×iŨdžŅŸĪiĨ›Áž"Ŋž[›M&y ™Ųã|¨ ¤đFH¯=×4ÛÍ'WžÎú ²3ĪcŠÎĸŠ(ĸŠ(ĸŠ(ĸē_ĖŅkq„'så?Ú­wv×6i9†Y!xNíŧŒä€Ā¨^=ŊĢؙI'žk°đƒ†ĶuHĪ810üœé\/‰@‹ÄĐIÔ4ŸÁ›ü+Ū<!ūġ$äŖ#gÔŊ tĻ>Xã EqĪŌ”ã¯zį ņ ÔeB+6‘×x*Y)^zž[‘ÆqƒÅ-ä:Ę4kgw‰vų’NNüķtR #˜¨akÛ!pnīmZâiK"´„" @éĮ;x˙h÷Ŧ׹´ŽVI|Cl"%]bf Fp9 ëÁ9üN E,vå‚}~ūVrIĨ!ąˇ!KtZĢ$z æšúîâ‚ŧhą0!B’ r>BGŌ¯=ļƒ„—_byCģ,Ģ šbCäŽ}øâŦC¨ 厴ƒKšÄĢČĶDÄ.Ha†É“ĪâĸyYL&ßÃą€˛„*Ņ…;A`¸Ā#ëÛŠˇg%đI@Ō`ĩ¡”w. mČ3“ôĮzz\kFō–;E„Œ¸ī8#;yčēņîkÛ&Ŧš‚}ĻîĖįįhГ!R erv1ė U•%ˇĩW]hÛĀŪs†;Ĩf3)ËŠØú Žu‰š¸ņ$BQš•’MŽĢ’XŋĶŽ‡§Ķ{[+YâKNōI™^V~98į$Œ|ŊIéÜÕXŦtIc¸ËÜoĩĖ­"á•B…nvŒüĢ˙S-gŅ­o^x|$&Elƒ@GŧĪryæÜÖ6“Ÿ:Ü;Ę봗RA#wŪ9' zž1Æ)ûėļĨåĐF‘*Ža)Ác„åNĪ=y=+Z_´ÅvE–™‘mÜÎ0¸āp3Œ“Œ{mëS‰õvŌ•ÂŲÃqģs¤„”TįŖyéĪNĩ$k¨ÉūmÅļ$UĮxį’;ŽÜuÁė{ׂŌXôë›KũV9Đ´xávHÎx$ķŒæĒ›+1kôš´˛C4ë)u nb2yĀō}=OvZ| ¨A5õô–ōČnŦ΁ʂ~đüÅS+ y‡mœō0]…—pÆKœ`0įänO É­ũ4Ą´ŨÁáeûŲ<“Ô÷&Ÿ5G­S›îĻz…ņŽGZHęäxĮJĀC -Á‹Ëbw˛ä3_(ĨFO'*ƒđČŽ´¸Ž‘˛âGk†G,€°>vĐų#œ˜É=ÁA׃N]cLMB[ÁcæI,QŧoŊ9V rب=°89­=CQ¸€Û‹k9eR\ČąŖ0!U€^āîÛéøÔs\j˛ÛA4v H—^5'˜ļŸ›npHĮNEU’/K Ņ*¤EƒųÎԃ¸ādšv_z‚K vŲŲĖlĻOē…•€ķ īĶÜÕĪėk‡[O´Ū4’[Ü‹Œ‚˙ģdĮmûŲũ*ƒxOũ-ŧԑQ E, Œ# įJĒŽãŠš†,ŗ‰‰Æ2ŌãqlgęÄúôôŠŖđö›P-˛¨AUi€8€O üjĖzuœ14QZĀ‘’ UŒOŽ1ׁųTû@RԜ*NÔrįšz㚐÷éN^qN´Ģ֜/Ũg¯Öœ(ühîjæ•k¨ÉŨ!Äۓ’0ŪŧsššŌÆŪÅY-ŖØŦrFIįw>€ÂŦ0sI“švk'UĀÔlôo1âū†žOÖaž#ēƒē3'OCŠëtÆXDO"Ŋ¯Ã2ųžĶ›ū™ü‰˙ ų÷âė{<}pāq$(ãõŌ¸J(ĸŠ(ĸŠ(ĸŠ+o¤×­aF ōʈ¤ö$ũkÕ_L´ļđœzœ× <÷Ū`dX˙ՕÚ$ĮzãXŒä×aā¸fÛ¨–ŠE­ÁTāÃŒū&¸īEŗZ˛nyų˙žĢØŧ.˙ “Ûa¯R0¤&›ŌƒŒŠäõ$°ūĶēZÅō4x—ËIjdg į=ÄŒ7Nj”ö=¨ŗieģž)¤(ŽĮqådËer0JŽO!˜z𤓸^‘ÛJQ|9=2T3ĮSž™ÎMKV^]4kŲ tM¨ãr­ˇ ‚GđĢrsŪĨy„RI!đô"F}Æ0!sÉ+ÉČüąfÚ]RFÃĨÁ,(ÜšQ“ķēOx cę0d/Ēŧq‹?ą1´gĸÉÎā0O|v=:ŌßEŠ­ķK äPÁ#" bx1<#'žyč8§\ZĢ^ÍvšēÛgk÷ Č'Ô/=šūņĒĪoåHĪâ K†ĸËĩŽ=güF;æ+°Ũ#ŨÉ{|_O€ŦĘ0¸ŲbŲÉۓĪ@*ģÍ !ˇYᘭ°XŖ&6Üüđ7`nåyÆG=)~ËŖĮoo4V’:yūFf&699 6Č×{ ’ÅŦĻšŠ(´k¤Y—sI4g#øš<ōF=Ī­5fģ‘˛Ú r¤PŠTÎ ŠÉێāqÖ­LˇņK5ŧZlRÚą˙XJ.å äc#Đ Ÿ^ø¨lîu‰-U–ŪÎÖ%‘dRžYÎNFáü$œuīŪí¯ÛR=ú‰ļ ę–#•G$—w<‚ƒëŸZ­u­i –}VŪ" ›ARí í‘Ū¤ĩͧš3ûw|„į œ‚8%HÁ0č:ˇ~Eë=)#-ws7•Q›åt9ū÷čN)ļžŗ†úRYcBȝÁˇģAôxčv ;Î-ÜĘō‰ É÷˛NzņŒöéS˙g[c‡ė14QœĸČģ€>ŧũJ–Â0V;h‘2ÕPGCĀ~U!YųËbĄ1•$’9⠗Š…>ūsUįg9ûÍ×ũãLŽ3W"Ļ˙eX;´clÎĖ-’IāōEZŽÎÕNVŪ>̧ų“ų՜ Î=( ĀÁôëQ–_ZkrsL?{&‚)1ۑЧôĻž֜)ÞÔîūĨSĀŠWŽjAÅ(Ī­8fJ ôĨÉɧxĄJF8ĮJnāG4ņ͚Ëֆ>Ä᠟iüU…|ģãh>Īã­AXt¸“9˙{#ô­­˙â]<ŽkŲüŪg„`ɎG_×5á˙ãÛã(›ûÖÃôf¯:ĸŠ(ĸŠ(ĸŠ(ĸģ/…ö‡í#Ôexá÷ĀĢ„ų•Á'ĩ}/āhíÔŲÜ<6ė÷ŋ3ŒIeúÜÖ~?đ•ģė6ˆÄ ­€OՂĶ$ø§ø§~—iesîÚA$ĖŖîŽ˜ūuãž9M—ļOŨn1Ÿ¨á^“đÎ_7BT'ø1ø`zŨŗų–Ņ9āēÁöŠ; LqH W3ĒC7öœĖš-ŊÆæ_˜Û‚dÜŌvÁųq‚qŽĮˆ^Mq„‰mŖĮlęģ"“͍ļąûĖ#€GNũi'ūßēķŖĶđ1˜¤mÜî8Ũ‚{pZtëI!ˆjĄQË –ōŲÁQĘqĀp;tôĒrIu Ėvŗø…DģŽ,ú‚@S‘ÆĪ֛ikCöŸdUPæŪ|¨Ū\ũÎ1ūįšĒÍkĨy9ēž¸HĘFXí*í¸šū’0I'͝Zc4čnb†Yāiļä9ŒĢ*™28ãooaĐvÚ#ÛĪ:eü„ˆß–$‘€Šcیcއb´ ‹v.¤:,’Ë íŽIáb%'åî>`RHëÛ8§@÷RÁ7• Ĩģ˛ōB*–ËŲqœ Øį8䊖ÎMg|K.™ŧD°rާ/Ęx=ČcUbšņ$ĐÄâŌŪœ•ã`ČqŽNãßÔtŽp&]?Ä•´-ö+d72x9^{{ûžĩ$zFĄ$,—Z€””4`—– €ģü?ĨFŪēhR#ĢÎÛ¸ )œzÜíū9gü"ûŽÄ’ęO;K"īÆ_äÛÁ`éôôĢxZČ0-=ˌ~]דž3ōô‡nÕ<Ō`D l@UUv^n3‚?ē _´ŌlŦ]šŪŒßxīcžIį'ԟίĒ.sŸĨL SũM;Ír:š‡j´?ÂŠËÆjûŲ¨Ž~ķCÛßúÔ)ĶŌ­ÅėjÄ[†wŽÕ"$œ~ķ§ĩHP’~r3éIåėÔ¯ĪÖŖ1Ž1üé1Ž)‡ëGjhŋ­$ĶNqšaôĨ\“éNÔ´ĸĨ_j“ž;RŠ>iÃ'˙­NÎJ\ŽE/AíIíúŌŽ4ėƒŽ}ŠH`]§Žž”ņŠÍ×ú ŋüķš6ΧĖ+柊Pų><ģlš—#Ü ?ÖĻĐ[:{r{€7‡e<Ŧíú^SņÎ ž'ŗaüQ0ü›˙¯^WEQEQEQEMhquÖŊnÎuy´É-ķ \ÆmŲpę~BHÆ;ąé\ØR˛2‚ úč<&ĪÚŠčë*ãūŲĩQø‚˜‚91÷&BOũõ]ˇÂɉŗtÎō:ô9#úW˛XŸô=B(>Į=&:dŅY†Ē\^—ļÕŧÚ'Ė$ö<Œ gká­`[qŦOå(ábVŒũ×čp}ūfįĻ_Ŗ‰ÛûNķ͔Š,ė ÁüHę§"xKMY|ÉU擎_wôé’x9íÜVŋá͎fŒmâ0ÄIĨ%#Ûį52DĒ0ĒzŠ{)ÁéM QMaÛÂĨĮˇJLsM"ŒqÍ=j@:pää ”{šx4đA§Œâ“8¨ÚĢÉÆj”ÃĩW' MšķĪ_č? Nĩn:˛N¸§Ņœ Œž:S9 }?•4šf}i3‘úRøĻˇSH9ŽÔ¤ķũ(Īnôáôâ¤^xÅKÛúSČāzQŽu/^(#’hR;SÁúĶģu¤ĮĮãYúŌ–ŅŽąÔ.ņøĨ|íņ’!‹â˜õŅ#ô;Ĩgxqˇ@WęÕë˙[v}utoĖõĢΞ;ÚÆ(ĪÜu˙ĐkČčĸŠ(ĸŠ(ĸŠ(§FÛeVô ×ĒZ\Gmg ß¤$ŽXqķėe'ך=j†­ļÚíėSįĖ1o|œįō5sÃŗÅ:omĶĒß_/õĢmķĻŨpĨXßCükkáT˙4ĘNrÛąõ'üE{uƒhČ,ũôjÖy œdž”‡ŊfjšŧzcÛŦĐHâyJɌ=Éã'ŒĶ´ŊTjˆîI…GRÄÁ†GCÁ˙ø_˙õS:æã¸ Ž=ņMĮĩhÆi:QƒLn 4ŠOQĶԌc¯zi÷¤œS‡Ojzž:ĶÁõ5 =ŠępEH)˙JBsLoJ¯(úÕ)qšŦOÍM¸É|ņ-~ŊZ̧ZˇAÍZNÜÔãˇ8§Ņ‘L#šŒšŒõ¤ã1“@ũix"ŖlÁüФi:ôĨĪãžÔŖüŠp=ž•"pÕ(ĪOZräcšrįu;ëJ>” üŨ(Å ô§cĪJ}ŌtëUĩæi÷1Ž­€_=üj‹3éwJ?Ö[׸$˙Zį|4vŖ ŽƒųW°|4mŌjQųæŦĐ⸍¸iŦØrF\ûãŸå^CEQEQEQEčÖ-ĮƒĄ$~ō €ĒÛē++=šr}'VÖ5´Yé7Ķ •I)°ČëĪĻÕŋĸ|>ņ\z­ëiEĮ+4˛"œ+x'=Ŋ*_ÛgNŊ˙–MúĨRøW1KÖNä)÷Ę×Ŋißņī´`…b?­]ö¤Č'úRÔ2ÛA3ĢKNĘRČ đ:X↠ŪTQĮģ“ą@ĪåNÍ7āŌ6ØĀæŒîĮŋĄĻúQڐô¤Į^hÍ1úĶOjNôaëúRžôāN xįŊ=j@})ëīR¯Ōœ ÔmŌĢČĨ7SÖĒ“ķtÅ,ãåSÜŠĪāGøÕU?5Z¸ūĩm*e5(͘}ÅDO4ÃHx= šQÆiJaÅFxc֓<ā~tdķ֔NiŲäTĒsÖĨ“Å?8§=é—ˇ4™9âœ3īM.‘‚]•GrĮR}wGĩɸÕŦ!ĮüôšEĮæk:øFÛ"_i€ŽĄnUä gOņoĀđgū'ąž?įœ27ōZ͸øÛā¤ÎË˙ÜļaüņYˇŧ+ą–8¯_#ę€ūĩæ>8ņžâÛk"ûE¸ļRŦÍėįGĄŦí+[đŪ–7<šÄœƒˆ‘ōÜOë^ ü`đ_‡tų#´ŅõVš‘pōN}˛_8¯=ņ¯āņMēAœ‘*\4Áäa’<`WEQEQEQEõĪÂ+m6_i—ØÚ¤Æ%ķ$XT30Č$œrsšīe€zC ÄÃÔ^1ãkpéxŸėē˙ãϏ¯†˛ųz´jOTČ‰Ōž‡ŌÛ1H÷˙ ĢŊķíK“Ež):œĐG|ŌcųPyŪôÜqŠAœŌdķšLdf“ąĻšâ™G\QÔ÷Ļž”ŅëÍķRsÍņÖĒ~`g<Õč8Ģąš°ĻĨŌí>†Š\jvÃ7pBy$Uūf˛.|gá‹|‰ę¯ŸŗhÖqú›ųbąn~4ø˛lųRZ@÷`ųÖEĪÄĪÜũí^t˙ŽLSųVEΉõģĀEΧs6zųģųÖs\JĮ%ÎzņÅ5Ĩ‘žôŒ~Ļ™EQGĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯yũ/‚ͨŲ÷Žđ?_@ēiĢŌŧĮÆŅy7 ;ŋ*ō/ mâ´\ãeïę1üĢčŊ˛Ŗ‘†ŒŸ­k{˙:QNīH{Ōv ķ@ã„āŠkMč}iŊčĮ¯áIېđsHŲÁÍD{dŌP;Ō08$pq֚Į¨ĪĩqN隑­HŊ8ŠTƒą§dĀ'Úĸ’îA2Čąãģ°Îą¯(ëË´BU1ŨœŸĖĶ[ⷋG |‘˙ģūĩŸ|g!?ņ<ĸ"éUdø…ã ~÷‰5!ūäå–*Ŧž2ņDÃxWqčײũšŗŽ5=Bë?hžš›=|ÉYŋ™Ē´QEQEQEQEQEQEQEQEQEQEQEWŠ| ŋû7Ž<‚p&L~"ž§=Į­1x5įū8ˆ›™1ĐĄ¯ˇ"J ĀûX==A?á_CčOšc9먭ÜņNSģŌ´1Iüč9âšzS1ƒīHzf›ĨüiŽë #ŦqUĨÔlŖĖŧˇ\uĖĢū5RMsKAķ_ۜz89üǜŪ,ĐíÆdÔ"_ÁŋÂŗføáx/Ēß÷€ūfŗįøŊá(åõßũĀõŦˏŪ;ĖŋD"ŗĻøų¤!ũΑw'Ö@?ĨQ›öQūŖA?đ9˙ĀU ŋh-\äAĸŲ'Ļ÷v˙ ΛãĪ‹\Ÿ*->/LBOķ5NOž6`^Û§û–ę+.į◍n‰-â ´´d(ũdÜøģÄW˜ûFˇ&=gj˞ōæéËÜ\K+ĻG,Z†Š‘SO+ˆš §Æ3 §˛ķQ0Á¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽÃá}Ņ´ņö› =dū$WŲ9ʃHÕÄxÖŪgs"Ã#Gˇī*’:sŌŧü˜|iķ)PÁ$à dāë_AøuŽØŒr1˙Ž×OŒtĻ´‘ĮĖĢSЁĩ+Īī/­—ë*Œ~ĩ^OéũíBūéŨüĒ”Ū2ĐāÎëĖúæÃųYĶüNđÍšų¯}Ū1üÚ˛î>2øbvĪ˙ÛqũŦ›ŽúqCi˙eqņūŲr!ĩ-ūė'?Ģ˙JʸøûxŲōmdđĐÖ\ß5ˇÎČ˙ļ %™?Æ?˝ŽĒŦ˛äÂŗ§ø›âYķēæ1ŸöK2k:_ø†RIŋ۟îăúUYĀWwņ:KĩúDŖ •ÃČ­A˙ O_‰;Sē)ʄwãˇaUŽ>&øĒãīj${c?Ī5/ŒüC7ßÔä˙€Ēä*Ģø“[“ījן„Ė?‘Ǟjwķ­žš÷Ĩcũjŗ31ËOš¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ī(ĸŠ*ÂũŅJÄųMôĒÔøūø§ˇ_jūõ6Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ QEQEQEQEQEQEQEQETÉĐT‡ũSUZr}ņRŋŪ¨ŸīShĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ųleptonica-1.86.0/prog/binmorph1_reg.c000066400000000000000000000500511506303110300174240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph1_reg.c * * This is a thorough regression test of different methods for * doing binary morphology. It should always be run if changes * are made to the low-level morphology code. * * Some things to note: * * (1) We add a white border to guarantee safe closing; i.e., that * closing is extensive for ASYMMETRIC_MORPH_BC. The separable * sequence for closing is not safe, so if we didn't add the border * ab initio, we would get different results for the atomic sequence * closing (which is safe) and the separable one. * * (2) There are no differences in any of the operations: * rasterop general * rasterop brick * morph sequence rasterop brick * dwa brick * morph sequence dwa brick * morph sequence dwa composite brick * when using ASYMMETRIC_MORPH_BC. * However, when using SYMMETRIC_MORPH_BC, there are differences * in two of the safe closing operations. These differences * are in pix numbers 4 and 5. These differences are * all due to the fact that for SYMMETRIC_MORPH_BC, we don't need * to add any borders to get the correct answer. When we do * add a border of 0 pixels, we naturally get a different result. * * (3) The 2-way Sel decomposition functions, implemented with the * separable brick interface, are tested separately against * the rasterop brick. See binmorph2_reg.c. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* set these ad lib. */ #define WIDTH 21 /* brick sel width */ #define HEIGHT 15 /* brick sel height */ void TestAll(L_REGPARAMS *rp, PIX *pix, l_int32 symmetric); int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); TestAll(rp, pixs, FALSE); TestAll(rp, pixs, TRUE); pixDestroy(&pixs); return regTestCleanup(rp); } void TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric) { l_int32 ok, same; char sequence[512]; PIX *pixref; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIX *pix7, *pix8, *pix9, *pix10, *pix11; PIX *pix12, *pix13, *pix14; SEL *sel; if (symmetric) { /* This works properly if there is an added border */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); #if 1 pix1 = pixAddBorder(pixs, 32, 0); pixTransferAllData(pixs, &pix1, 0, 0); #endif lept_stderr("Testing with symmetric boundary conditions\n"); } else { resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); lept_stderr("Testing with asymmetric boundary conditions\n"); } /* This is our test sel */ sel = selCreateBrick(HEIGHT, WIDTH, HEIGHT / 2, WIDTH / 2, SEL_HIT); /* Dilation */ lept_stderr(" Testing dilation\n"); ok = TRUE; pixref = pixDilate(NULL, pixs, sel); /* new one */ pix1 = pixCreateTemplate(pixs); pixDilate(pix1, pixs, sel); /* existing one */ pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pix2 = pixCopy(NULL, pixs); pixDilate(pix2, pix2, sel); /* in-place */ pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "d%d.%d", WIDTH, HEIGHT); pix3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "d%d.1 + d1.%d", WIDTH, HEIGHT); pix4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pix5 = pixDilateBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix5, &same); if (!same) { lept_stderr("pixref != pix5 !\n"); ok = FALSE; } pix6 = pixCreateTemplate(pixs); pixDilateBrick(pix6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix6, &same); if (!same) { lept_stderr("pixref != pix6 !\n"); ok = FALSE; } pix7 = pixCopy(NULL, pixs); pixDilateBrick(pix7, pix7, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix7, &same); if (!same) { lept_stderr("pixref != pix7 !\n"); ok = FALSE; } pix8 = pixDilateBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix8, &same); if (!same) { lept_stderr("pixref != pix8 !\n"); ok = FALSE; } pix9 = pixCreateTemplate(pixs); pixDilateBrickDwa(pix9, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix9, &same); if (!same) { lept_stderr("pixref != pix9 !\n"); ok = FALSE; } pix10 = pixCopy(NULL, pixs); pixDilateBrickDwa(pix10, pix10, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix10, &same); if (!same) { lept_stderr("pixref != pix10 !\n"); ok = FALSE; } pix11 = pixCreateTemplate(pixs); pixDilateCompBrickDwa(pix11, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix11, &same); if (!same) { lept_stderr("pixref != pix11 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "d%d.%d", WIDTH, HEIGHT); pix12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pix12, &same); if (!same) { lept_stderr("pixref != pix12!\n"); ok = FALSE; } pix13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pix13, &same); if (!same) { lept_stderr("pixref != pix13!\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); pixDestroy(&pix12); pixDestroy(&pix13); /* Erosion */ lept_stderr(" Testing erosion\n"); pixref = pixErode(NULL, pixs, sel); /* new one */ pix1 = pixCreateTemplate(pixs); pixErode(pix1, pixs, sel); /* existing one */ pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pix2 = pixCopy(NULL, pixs); pixErode(pix2, pix2, sel); /* in-place */ pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "e%d.%d", WIDTH, HEIGHT); pix3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "e%d.1 + e1.%d", WIDTH, HEIGHT); pix4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pix5 = pixErodeBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix5, &same); if (!same) { lept_stderr("pixref != pix5 !\n"); ok = FALSE; } pix6 = pixCreateTemplate(pixs); pixErodeBrick(pix6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix6, &same); if (!same) { lept_stderr("pixref != pix6 !\n"); ok = FALSE; } pix7 = pixCopy(NULL, pixs); pixErodeBrick(pix7, pix7, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix7, &same); if (!same) { lept_stderr("pixref != pix7 !\n"); ok = FALSE; } pix8 = pixErodeBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix8, &same); if (!same) { lept_stderr("pixref != pix8 !\n"); ok = FALSE; } pix9 = pixCreateTemplate(pixs); pixErodeBrickDwa(pix9, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix9, &same); if (!same) { lept_stderr("pixref != pix9 !\n"); ok = FALSE; } pix10 = pixCopy(NULL, pixs); pixErodeBrickDwa(pix10, pix10, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix10, &same); if (!same) { lept_stderr("pixref != pix10 !\n"); ok = FALSE; } pix11 = pixCreateTemplate(pixs); pixErodeCompBrickDwa(pix11, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix11, &same); if (!same) { lept_stderr("pixref != pix11 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "e%d.%d", WIDTH, HEIGHT); pix12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pix12, &same); if (!same) { lept_stderr("pixref != pix12!\n"); ok = FALSE; } pix13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pix13, &same); if (!same) { lept_stderr("pixref != pix13!\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); pixDestroy(&pix12); pixDestroy(&pix13); /* Opening */ lept_stderr(" Testing opening\n"); pixref = pixOpen(NULL, pixs, sel); /* new one */ pix1 = pixCreateTemplate(pixs); pixOpen(pix1, pixs, sel); /* existing one */ pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pix2 = pixCopy(NULL, pixs); pixOpen(pix2, pix2, sel); /* in-place */ pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "o%d.%d", WIDTH, HEIGHT); pix3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "e%d.%d + d%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "e%d.1 + e1.%d + d%d.1 + d1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix5 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pix5, &same); if (!same) { lept_stderr("pixref != pix5 !\n"); ok = FALSE; } pix6 = pixOpenBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix6, &same); if (!same) { lept_stderr("pixref != pix6 !\n"); ok = FALSE; } pix7 = pixCreateTemplate(pixs); pixOpenBrick(pix7, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix7, &same); if (!same) { lept_stderr("pixref != pix7 !\n"); ok = FALSE; } pix8 = pixCopy(NULL, pixs); /* in-place */ pixOpenBrick(pix8, pix8, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix8, &same); if (!same) { lept_stderr("pixref != pix8 !\n"); ok = FALSE; } pix9 = pixOpenBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix9, &same); if (!same) { lept_stderr("pixref != pix9 !\n"); ok = FALSE; } pix10 = pixCreateTemplate(pixs); pixOpenBrickDwa(pix10, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix10, &same); if (!same) { lept_stderr("pixref != pix10 !\n"); ok = FALSE; } pix11 = pixCopy(NULL, pixs); pixOpenBrickDwa(pix11, pix11, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix11, &same); if (!same) { lept_stderr("pixref != pix11 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "o%d.%d", WIDTH, HEIGHT); pix12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pix12, &same); if (!same) { lept_stderr("pixref != pix12!\n"); ok = FALSE; } pix13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pix13, &same); if (!same) { lept_stderr("pixref != pix13!\n"); ok = FALSE; } pix14 = pixCreateTemplate(pixs); pixOpenCompBrickDwa(pix14, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix14, &same); if (!same) { lept_stderr("pixref != pix14 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); pixDestroy(&pix12); pixDestroy(&pix13); pixDestroy(&pix14); /* Closing */ lept_stderr(" Testing closing\n"); pixref = pixClose(NULL, pixs, sel); /* new one */ pix1 = pixCreateTemplate(pixs); pixClose(pix1, pixs, sel); /* existing one */ pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pix2 = pixCopy(NULL, pixs); pixClose(pix2, pix2, sel); /* in-place */ pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "d%d.%d + e%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix3 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "d%d.1 + d1.%d + e%d.1 + e1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pix5 = pixCloseBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix5, &same); if (!same) { lept_stderr("pixref != pix5 !\n"); ok = FALSE; } pix6 = pixCreateTemplate(pixs); pixCloseBrick(pix6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix6, &same); if (!same) { lept_stderr("pixref != pix6 !\n"); ok = FALSE; } pix7 = pixCopy(NULL, pixs); /* in-place */ pixCloseBrick(pix7, pix7, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix7, &same); if (!same) { lept_stderr("pixref != pix7 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); /* Safe closing (using pix, not pixs) */ lept_stderr(" Testing safe closing\n"); pixref = pixCloseSafe(NULL, pixs, sel); /* new one */ pix1 = pixCreateTemplate(pixs); pixCloseSafe(pix1, pixs, sel); /* existing one */ pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pix2 = pixCopy(NULL, pixs); pixCloseSafe(pix2, pix2, sel); /* in-place */ pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "c%d.%d", WIDTH, HEIGHT); pix3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "b32 + d%d.%d + e%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "b32 + d%d.1 + d1.%d + e%d.1 + e1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pix5 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pix5, &same); if (!same) { lept_stderr("pixref != pix5 !\n"); ok = FALSE; } pix6 = pixCloseSafeBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix6, &same); if (!same) { lept_stderr("pixref != pix6 !\n"); ok = FALSE; } pix7 = pixCreateTemplate(pixs); pixCloseSafeBrick(pix7, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix7, &same); if (!same) { lept_stderr("pixref != pix7 !\n"); ok = FALSE; } pix8 = pixCopy(NULL, pixs); /* in-place */ pixCloseSafeBrick(pix8, pix8, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix8, &same); if (!same) { lept_stderr("pixref != pix8 !\n"); ok = FALSE; } pix9 = pixCloseBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pix9, &same); if (!same) { lept_stderr("pixref != pix9 !\n"); ok = FALSE; } pix10 = pixCreateTemplate(pixs); pixCloseBrickDwa(pix10, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix10, &same); if (!same) { lept_stderr("pixref != pix10 !\n"); ok = FALSE; } pix11 = pixCopy(NULL, pixs); pixCloseBrickDwa(pix11, pix11, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pix11, &same); if (!same) { lept_stderr("pixref != pix11 !\n"); ok = FALSE; } snprintf(sequence, sizeof(sequence), "c%d.%d", WIDTH, HEIGHT); pix12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pix12, &same); if (!same) { lept_stderr("pixref != pix12!\n"); ok = FALSE; } pix13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pix13, &same); if (!same) { lept_stderr("pixref != pix13!\n"); ok = FALSE; } pix14 = pixCreateTemplate(pixs); pixCloseCompBrickDwa(pix14, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pix14, &same); if (!same) { lept_stderr("pixref != pix14 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); pixDestroy(&pix12); pixDestroy(&pix13); pixDestroy(&pix14); regTestCompareValues(rp, TRUE, ok, 0); if (ok) lept_stderr(" All morph tests OK!\n"); else lept_stderr(" Some morph tests failed!\n"); selDestroy(&sel); } leptonica-1.86.0/prog/binmorph2_reg.c000066400000000000000000000164251506303110300174340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph2_reg.c * * Thorough regression test for binary separable rasterops, * using the sequence interpreters. This compares the * results for 2-way composite Sels with unitary Sels, * all invoked on the separable block morph ops. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 MAX_SEL_SIZE = 120; static void writeResult(const char *sequence, l_int32 same); int main(int argc, char **argv) { char buffer1[256], buffer2[256]; l_int32 i, same, same2, factor1, factor2, diff, success; PIX *pixs, *pixsd, *pixt1, *pixt2, *pixt3; if (argc != 1) return ERROR_INT(" Syntax: binmorph2_reg", __func__, 1); setLeptDebugOK(1); pixs = pixRead("feyn-fract.tif"); pixsd = pixMorphCompSequence(pixs, "d5.5", 0); success = TRUE; for (i = 1; i < MAX_SEL_SIZE; i++) { /* Check if the size is exactly decomposable */ selectComposableSizes(i, &factor1, &factor2); diff = factor1 * factor2 - i; lept_stderr("%d: (%d, %d): %d\n", i, factor1, factor2, diff); /* Carry out operations on identical sized Sels: dilation */ snprintf(buffer1, sizeof(buffer1), "d%d.%d", i + diff, i + diff); snprintf(buffer2, sizeof(buffer2), "d%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... erosion */ snprintf(buffer1, sizeof(buffer1), "e%d.%d", i + diff, i + diff); snprintf(buffer2, sizeof(buffer2), "e%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... opening */ snprintf(buffer1, sizeof(buffer1), "o%d.%d", i + diff, i + diff); snprintf(buffer2, sizeof(buffer2), "o%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... closing */ snprintf(buffer1, sizeof(buffer1), "c%d.%d", i + diff, i + diff); snprintf(buffer2, sizeof(buffer2), "c%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); } pixDestroy(&pixs); pixDestroy(&pixsd); if (success) lept_stderr("\n---------- Success: no errors ----------\n"); else lept_stderr("\n---------- Failure: error(s) found -----------\n"); return 0; } static void writeResult(const char *sequence, l_int32 same) { if (same) lept_stderr("Sequence %s: SUCCESS\n", sequence); else lept_stderr("Sequence %s: FAILURE\n", sequence); } #if 0 for (i = 1; i < 400; i++) { selectComposableSizes(i, &factor1, &factor2); diff = factor1 * factor2 - i; lept_stderr("%d: (%d, %d): %d\n", i, factor1, factor2, diff); selectComposableSels(i, L_HORIZ, &sel1, &sel2); selDestroy(&sel1); selDestroy(&sel2); } #endif #if 0 selectComposableSels(68, L_HORIZ, &sel1, &sel2); /* 17, 4 */ str = selPrintToString(sel2); lept_stderr(str); selDestroy(&sel1); selDestroy(&sel2); lept_free(str); selectComposableSels(70, L_HORIZ, &sel1, &sel2); /* 10, 7 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); lept_stderr(str); lept_free(str); selectComposableSels(85, L_HORIZ, &sel1, &sel2); /* 17, 5 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); lept_stderr(str); lept_free(str); selectComposableSels(96, L_HORIZ, &sel1, &sel2); /* 12, 8 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); lept_stderr(str); lept_free(str); { SELA *sela; sela = selaAddBasic(NULL); selaWrite("/tmp/junksela.sela", sela); selaDestroy(&sela); } #endif leptonica-1.86.0/prog/binmorph3_reg.c000066400000000000000000000351261506303110300174340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph3_reg.c * * This is a regression test of dwa functions. It should always * be run if changes are made to the low-level morphology code. * * Some things to note: * * (1) This compares results for these operations: * - rasterop brick (non-separable, separable) * - dwa brick (separable), as implemented in morphdwa.c * - dwa brick separable, but using lower-level non-separable * autogen'd code. * * (2) See in-line comments for ordinary closing and safe closing. * The complication is due to the fact that the results differ * for symmetric and asymmetric b.c., so we must do some * fine adjustments of the border when implementing using * the lower-level code directly. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric); int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); TestAll(rp, pixs, FALSE); TestAll(rp, pixs, TRUE); pixDestroy(&pixs); return regTestCleanup(rp); } l_int32 TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric) { char *selnameh, *selnamev; l_int32 ok, same, w, h, i, bordercolor, extraborder; l_int32 width[3] = {21, 1, 21}; l_int32 height[3] = {1, 7, 7}; PIX *pixref, *pix0, *pix1, *pix2, *pix3, *pix4; SEL *sel; SELA *sela; if (symmetric) { resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); lept_stderr("Testing with symmetric boundary conditions\n" "==========================================\n"); } else { resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); lept_stderr("Testing with asymmetric boundary conditions\n" "==========================================\n"); } /* Note that with the choice of width and height, there is * no situation where they are both 1 (a no-op). */ for (i = 0; i < 3; i++) { w = width[i]; h = height[i]; sel = selCreateBrick(h, w, h / 2, w / 2, SEL_HIT); selnameh = NULL; selnamev = NULL; /* Get the selnames for horiz and vert */ sela = selaAddBasic(NULL); if (w > 1) { if ((selnameh = selaGetBrickName(sela, w, 1)) == NULL) { selaDestroy(&sela); selDestroy(&sel); return ERROR_INT("dwa hor sel not defined", rp->testname, 1); } } if (h > 1) { if ((selnamev = selaGetBrickName(sela, 1, h)) == NULL) { selaDestroy(&sela); selDestroy(&sel); return ERROR_INT("dwa vert sel not defined", rp->testname, 1); } } lept_stderr("w = %d, h = %d, selh = %s, selv = %s\n", w, h, selnameh, selnamev); ok = TRUE; selaDestroy(&sela); /* ----------------- Dilation ----------------- */ lept_stderr("Testing dilation\n"); pixref = pixDilate(NULL, pixs, sel); pix1 = pixDilateBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pixDestroy(&pix1); if (w > 1) pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); else pix1 = pixClone(pixs); if (h > 1) pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_DILATE, selnamev); else pix2 = pixClone(pix1); pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixAddBorder(pixs, 32, 0); if (w > 1) pix2 = pixFMorphopGen_1(NULL, pix1, L_MORPH_DILATE, selnameh); else pix2 = pixClone(pix1); if (h > 1) pix3 = pixFMorphopGen_1(NULL, pix2, L_MORPH_DILATE, selnamev); else pix3 = pixClone(pix2); pix4 = pixRemoveBorder(pix3, 32); pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* ----------------- Erosion ----------------- */ lept_stderr("Testing erosion\n"); pixref = pixErode(NULL, pixs, sel); pix1 = pixErodeBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pixDestroy(&pix1); if (w > 1) pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); else pix1 = pixClone(pixs); if (h > 1) pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_ERODE, selnamev); else pix2 = pixClone(pix1); pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixAddBorder(pixs, 32, 0); if (w > 1) pix2 = pixFMorphopGen_1(NULL, pix1, L_MORPH_ERODE, selnameh); else pix2 = pixClone(pix1); if (h > 1) pix3 = pixFMorphopGen_1(NULL, pix2, L_MORPH_ERODE, selnamev); else pix3 = pixClone(pix2); pix4 = pixRemoveBorder(pix3, 32); pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* ----------------- Opening ----------------- */ lept_stderr("Testing opening\n"); pixref = pixOpen(NULL, pixs, sel); pix1 = pixOpenBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pixDestroy(&pix1); if (h == 1) pix2 = pixMorphDwa_1(NULL, pixs, L_MORPH_OPEN, selnameh); else if (w == 1) pix2 = pixMorphDwa_1(NULL, pixs, L_MORPH_OPEN, selnamev); else { pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_ERODE, selnamev); pixMorphDwa_1(pix1, pix2, L_MORPH_DILATE, selnameh); pixMorphDwa_1(pix2, pix1, L_MORPH_DILATE, selnamev); pixDestroy(&pix1); } pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } pixDestroy(&pix2); pix1 = pixAddBorder(pixs, 32, 0); if (h == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_OPEN, selnameh); else if (w == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_OPEN, selnamev); else { pix2 = pixFMorphopGen_1(NULL, pix1, L_MORPH_ERODE, selnameh); pix3 = pixFMorphopGen_1(NULL, pix2, L_MORPH_ERODE, selnamev); pixFMorphopGen_1(pix2, pix3, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pix3, pix2, L_MORPH_DILATE, selnamev); pixDestroy(&pix2); } pix4 = pixRemoveBorder(pix3, 32); pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); /* ----------------- Closing ----------------- */ lept_stderr("Testing closing\n"); pixref = pixClose(NULL, pixs, sel); /* Note: L_MORPH_CLOSE for h==1 or w==1 gives safe closing, * so we can't use it here. */ if (h == 1) { pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_ERODE, selnameh); } else if (w == 1) { pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnamev); pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_ERODE, selnamev); } else { pix1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_DILATE, selnamev); pixMorphDwa_1(pix1, pix2, L_MORPH_ERODE, selnameh); pixMorphDwa_1(pix2, pix1, L_MORPH_ERODE, selnamev); } pixDestroy(&pix1); pixEqual(pixref, pix2, &same); if (!same) { lept_stderr("pixref != pix2 !\n"); ok = FALSE; } pixDestroy(&pix2); /* Note: by adding only 32 pixels of border, we get * the normal closing operation, even when calling * with L_MORPH_CLOSE, because it requires 32 pixels * of border to be safe. */ pix1 = pixAddBorder(pixs, 32, 0); if (h == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_CLOSE, selnameh); else if (w == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_CLOSE, selnamev); else { pix2 = pixFMorphopGen_1(NULL, pix1, L_MORPH_DILATE, selnameh); pix3 = pixFMorphopGen_1(NULL, pix2, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pix2, pix3, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pix3, pix2, L_MORPH_ERODE, selnamev); pixDestroy(&pix2); } pix4 = pixRemoveBorder(pix3, 32); pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); /* ------------- Safe Closing ----------------- */ lept_stderr("Testing safe closing\n"); pixref = pixCloseSafe(NULL, pixs, sel); pix0 = pixCloseSafeBrick(NULL, pixs, w, h); pixEqual(pixref, pix0, &same); if (!same) { lept_stderr("pixref != pix0 !\n"); ok = FALSE; } pixDestroy(&pix0); pix1 = pixCloseBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pix1, &same); if (!same) { lept_stderr("pixref != pix1 !\n"); ok = FALSE; } pixDestroy(&pix1); bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) /* asymmetric b.c. */ extraborder = 32; else /* symmetric b.c. */ extraborder = 0; /* Note: for safe closing we need 64 border pixels. * However, when we implement a separable Sel * with pixMorphDwa_*(), we must do dilation and * erosion explicitly, and these functions only * add/remove a 32-pixel border. Thus, for that * case we must add an additional 32-pixel border * before doing the operations. That is the reason * why the implementation in morphdwa.c adds the * 64 bit border and then uses the lower-level * pixFMorphopGen_*() functions. */ if (h == 1) pix3 = pixMorphDwa_1(NULL, pixs, L_MORPH_CLOSE, selnameh); else if (w == 1) pix3 = pixMorphDwa_1(NULL, pixs, L_MORPH_CLOSE, selnamev); else { pix0 = pixAddBorder(pixs, extraborder, 0); pix1 = pixMorphDwa_1(NULL, pix0, L_MORPH_DILATE, selnameh); pix2 = pixMorphDwa_1(NULL, pix1, L_MORPH_DILATE, selnamev); pixMorphDwa_1(pix1, pix2, L_MORPH_ERODE, selnameh); pixMorphDwa_1(pix2, pix1, L_MORPH_ERODE, selnamev); pix3 = pixRemoveBorder(pix2, extraborder); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); } pixEqual(pixref, pix3, &same); if (!same) { lept_stderr("pixref != pix3 !\n"); ok = FALSE; } pixDestroy(&pix3); pix1 = pixAddBorder(pixs, 32 + extraborder, 0); if (h == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_CLOSE, selnameh); else if (w == 1) pix3 = pixFMorphopGen_1(NULL, pix1, L_MORPH_CLOSE, selnamev); else { pix2 = pixFMorphopGen_1(NULL, pix1, L_MORPH_DILATE, selnameh); pix3 = pixFMorphopGen_1(NULL, pix2, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pix2, pix3, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pix3, pix2, L_MORPH_ERODE, selnamev); pixDestroy(&pix2); } pix4 = pixRemoveBorder(pix3, 32 + extraborder); pixEqual(pixref, pix4, &same); if (!same) { lept_stderr("pixref != pix4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); regTestCompareValues(rp, TRUE, ok, 0); if (ok) lept_stderr("All morph tests OK!\n\n"); selDestroy(&sel); lept_free(selnameh); lept_free(selnamev); } return 0; } leptonica-1.86.0/prog/binmorph4_reg.c000066400000000000000000000502741506303110300174360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph4_reg.c * * Regression test for dwa brick morph operations * We compare: * (1) morph composite vs. morph non-composite * (2) dwa non-composite vs. morph composite * (3) dwa composite vs. dwa non-composite * (4) dwa composite vs. morph composite * (5) dwa composite vs. morph non-composite * The brick functions all have a pre-allocated pix as the dest. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric); l_int32 DoComparisonDwa1(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); l_int32 DoComparisonDwa2(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); l_int32 DoComparisonDwa3(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); l_int32 DoComparisonDwa4(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); l_int32 DoComparisonDwa5(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); void PixCompareDwa(L_REGPARAMS *rp, l_int32 size, const char *type, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6); #define TIMING 0 /* Note: the symmetric case requires an extra border of size * approximately 40 to succeed for all SE up to size 64. With * a smaller border the differences are small, and most of the * problem seems to be in the non-dwa code, because we are doing * sequential erosions without an extra border, and things aren't * being properly initialized. To avoid these errors, add the border * in advance for symmetric b.c. * Note that asymmetric b.c. are recommended for document image * operations, and this test passes for asymmetric b.c. without * any added border. */ int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); TestAll(rp, pixs, FALSE); TestAll(rp, pixs, TRUE); pixDestroy(&pixs); return regTestCleanup(rp); } void TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric) { l_int32 i; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; if (symmetric) { /* This works properly with an added border of 40 */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); pix1 = pixAddBorder(pixs, 40, 0); pixTransferAllData(pixs, &pix1, 0, 0); lept_stderr("Testing with symmetric boundary conditions\n"); } else { resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); lept_stderr("Testing with asymmetric boundary conditions\n"); } pix1 = pixCreateTemplateNoInit(pixs); pix2 = pixCreateTemplateNoInit(pixs); pix3 = pixCreateTemplateNoInit(pixs); pix4 = pixCreateTemplateNoInit(pixs); pix5 = pixCreateTemplateNoInit(pixs); pix6 = pixCreateTemplateNoInit(pixs); for (i = 2; i < 64; i++) { #if 1 /* Compare morph composite with morph non-composite */ DoComparisonDwa1(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); #endif #if 1 /* Compare DWA non-composite with morph composite */ if (i < 16) DoComparisonDwa2(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); /* Compare DWA composite with DWA non-composite */ if (i < 16) DoComparisonDwa3(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); /* Compare DWA composite with morph composite */ DoComparisonDwa4(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); /* Compare DWA composite with morph non-composite */ DoComparisonDwa5(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); #endif } lept_stderr("\n"); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); } /* Morph composite with morph non-composite */ l_int32 DoComparisonDwa1(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrick(pix1, pixs, size, 1); pixDilateCompBrick(pix3, pixs, 1, size); pixDilateCompBrick(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pix2, pixs, size, 1); pixDilateBrick(pix4, pixs, 1, size); pixDilateBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixErodeCompBrick(pix1, pixs, size, 1); pixErodeCompBrick(pix3, pixs, 1, size); pixErodeCompBrick(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pix2, pixs, size, 1); pixErodeBrick(pix4, pixs, 1, size); pixErodeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrick(pix1, pixs, size, 1); pixOpenCompBrick(pix3, pixs, 1, size); pixOpenCompBrick(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pix2, pixs, size, 1); pixOpenBrick(pix4, pixs, 1, size); pixOpenBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseSafeCompBrick(pix1, pixs, size, 1); pixCloseSafeCompBrick(pix3, pixs, 1, size); pixCloseSafeCompBrick(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pix2, pixs, size, 1); pixCloseSafeBrick(pix4, pixs, 1, size); pixCloseSafeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } /* Dwa non-composite with morph composite */ l_int32 DoComparisonDwa2(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateBrickDwa(pix1, pixs, size, 1); pixDilateBrickDwa(pix3, pixs, 1, size); pixDilateBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pix2, pixs, size, 1); pixDilateCompBrick(pix4, pixs, 1, size); pixDilateCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); /* pixDisplay(pix1, 100, 100); */ /* pixDisplay(pix2, 800, 100); */ if (TIMING) startTimer(); pixErodeBrickDwa(pix1, pixs, size, 1); pixErodeBrickDwa(pix3, pixs, 1, size); pixErodeBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pix2, pixs, size, 1); pixErodeCompBrick(pix4, pixs, 1, size); pixErodeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenBrickDwa(pix1, pixs, size, 1); pixOpenBrickDwa(pix3, pixs, 1, size); pixOpenBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pix2, pixs, size, 1); pixOpenCompBrick(pix4, pixs, 1, size); pixOpenCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseBrickDwa(pix1, pixs, size, 1); pixCloseBrickDwa(pix3, pixs, 1, size); pixCloseBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pix2, pixs, size, 1); pixCloseSafeCompBrick(pix4, pixs, 1, size); pixCloseSafeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } /* Dwa composite with dwa non-composite */ l_int32 DoComparisonDwa3(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pix1, pixs, size, 1); pixDilateCompBrickDwa(pix3, pixs, 1, size); pixDilateCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrickDwa(pix2, pixs, size, 1); pixDilateBrickDwa(pix4, pixs, 1, size); pixDilateBrickDwa(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); /* pixDisplay(pix1, 100, 100); */ /* pixDisplay(pix2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pix1, pixs, size, 1); pixErodeCompBrickDwa(pix3, pixs, 1, size); pixErodeCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrickDwa(pix2, pixs, size, 1); pixErodeBrickDwa(pix4, pixs, 1, size); pixErodeBrickDwa(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pix1, pixs, size, 1); pixOpenCompBrickDwa(pix3, pixs, 1, size); pixOpenCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrickDwa(pix2, pixs, size, 1); pixOpenBrickDwa(pix4, pixs, 1, size); pixOpenBrickDwa(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseCompBrickDwa(pix1, pixs, size, 1); pixCloseCompBrickDwa(pix3, pixs, 1, size); pixCloseCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseBrickDwa(pix2, pixs, size, 1); pixCloseBrickDwa(pix4, pixs, 1, size); pixCloseBrickDwa(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } /* Dwa composite with morph composite */ l_int32 DoComparisonDwa4(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pix1, pixs, size, 1); pixDilateCompBrickDwa(pix3, pixs, 1, size); pixDilateCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pix2, pixs, size, 1); pixDilateCompBrick(pix4, pixs, 1, size); pixDilateCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); /* pixDisplay(pix1, 100, 100); */ /* pixDisplay(pix2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pix1, pixs, size, 1); pixErodeCompBrickDwa(pix3, pixs, 1, size); pixErodeCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pix2, pixs, size, 1); pixErodeCompBrick(pix4, pixs, 1, size); pixErodeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pix1, pixs, size, 1); pixOpenCompBrickDwa(pix3, pixs, 1, size); pixOpenCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pix2, pixs, size, 1); pixOpenCompBrick(pix4, pixs, 1, size); pixOpenCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseCompBrickDwa(pix1, pixs, size, 1); pixCloseCompBrickDwa(pix3, pixs, 1, size); pixCloseCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pix2, pixs, size, 1); pixCloseSafeCompBrick(pix4, pixs, 1, size); pixCloseSafeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } /* Dwa composite with morph non-composite */ l_int32 DoComparisonDwa5(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pix1, pixs, size, 1); pixDilateCompBrickDwa(pix3, pixs, 1, size); pixDilateCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pix2, pixs, size, 1); pixDilateBrick(pix4, pixs, 1, size); pixDilateBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); /* pixDisplay(pix1, 100, 100); */ /* pixDisplay(pix2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pix1, pixs, size, 1); pixErodeCompBrickDwa(pix3, pixs, 1, size); pixErodeCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pix2, pixs, size, 1); pixErodeBrick(pix4, pixs, 1, size); pixErodeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pix1, pixs, size, 1); pixOpenCompBrickDwa(pix3, pixs, 1, size); pixOpenCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pix2, pixs, size, 1); pixOpenBrick(pix4, pixs, 1, size); pixOpenBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseCompBrickDwa(pix1, pixs, size, 1); pixCloseCompBrickDwa(pix3, pixs, 1, size); pixCloseCompBrickDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pix2, pixs, size, 1); pixCloseSafeBrick(pix4, pixs, 1, size); pixCloseSafeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } void PixCompareDwa(L_REGPARAMS *rp, l_int32 size, const char *type, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6) { l_int32 same; pixEqual(pix1, pix2, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (%d, 1) not same\n", type, size); pixEqual(pix3, pix4, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (1, %d) not same\n", type, size); pixEqual(pix5, pix6, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (%d, %d) not same\n", type, size, size); } leptonica-1.86.0/prog/binmorph5_reg.c000066400000000000000000000305731506303110300174370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph5_reg.c * * Regression test for expanded dwa morph operations. * We compare: * (1) dwa composite vs. morph composite * (2) dwa composite vs. morph non-composite */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric); l_int32 DoComparisonDwa1(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize); l_int32 DoComparisonDwa2(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 size); void PixCompareDwa(L_REGPARAMS *rp, l_int32 size, const char *type, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6); #define TIMING 0 #define FASTER_TEST 1 #define SLOWER_TEST 1 /* Note: this fails on the symmetric case when the added border * is 64 pixels, but the differences are relatively small. * Most of the problem seems to be in the non-dwa code, because we * are doing sequential erosions without an extra border, and * things aren't being properly initialized. To avoid these errors, * add a sufficiently large border for symmetric b.c. The size of * the border needs to be half the size of the largest SE that is * being used. Here we test up to size 240, and a border of 128 * pixels is sufficient for symmetric b.c. (For a SE of size 240 * with its center in the middle at 120, the maximum translation will * be about 120.) * Note also that asymmetric b.c. are recommended for document image * operations, and this test passes with no added border for * asymmetric b.c. */ int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); TestAll(rp, pixs, FALSE); TestAll(rp, pixs, TRUE); pixDestroy(&pixs); return regTestCleanup(rp); } void TestAll(L_REGPARAMS *rp, PIX *pixs, l_int32 symmetric) { l_int32 i, n, rsize, fact1, fact2, extra; l_int32 size, lastsize; l_int32 dwasize[256]; l_int32 ropsize[256]; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; if (symmetric) { /* This works properly with an added border of 128 */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); pix1 = pixAddBorder(pixs, 128, 0); pixTransferAllData(pixs, &pix1, 0, 0); lept_stderr("Testing with symmetric boundary conditions\n"); } else { resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); lept_stderr("Testing with asymmetric boundary conditions\n"); } pix1 = pixCreateTemplateNoInit(pixs); pix2 = pixCreateTemplateNoInit(pixs); pix3 = pixCreateTemplateNoInit(pixs); pix4 = pixCreateTemplateNoInit(pixs); pix5 = pixCreateTemplateNoInit(pixs); pix6 = pixCreateTemplateNoInit(pixs); /* ---------------------------------------------------------------- * * Faster test; testing fewer sizes * * ---------------------------------------------------------------- */ #if FASTER_TEST /* Compute the actual sizes used for each input size 'i' */ for (i = 0; i < 256; i++) { dwasize[i] = 0; ropsize[i] = 0; } for (i = 65; i < 256; i++) { selectComposableSizes(i, &fact1, &fact2); rsize = fact1 * fact2; ropsize[i] = rsize; getExtendedCompositeParameters(i, &n, &extra, &dwasize[i]); } /* Use only values where the resulting sizes are equal */ for (i = 65; i < 240; i++) { n = 1 + (l_int32)((i - 63) / 62); extra = i - 63 - (n - 1) * 62 + 1; if (extra == 2) continue; /* don't use this one (e.g., i == 126) */ if (ropsize[i] == dwasize[i]) DoComparisonDwa1(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, i); } #endif /* FASTER_TEST */ /* ---------------------------------------------------------------- * * Slower test; testing maximum number of sizes * * ---------------------------------------------------------------- */ #if SLOWER_TEST lastsize = 0; for (i = 65; i < 199; i++) { getExtendedCompositeParameters(i, &n, &extra, &size); if (size == lastsize) continue; if (size == 126 || size == 188) continue; /* deliberately off by one */ lastsize = size; DoComparisonDwa2(rp, pixs, pix1, pix2, pix3, pix4, pix5, pix6, size); } #endif /* SLOWER_TEST */ lept_stderr("\n"); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); } l_int32 DoComparisonDwa1(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickExtendDwa(pix1, pixs, size, 1); pixDilateCompBrickExtendDwa(pix3, pixs, 1, size); pixDilateCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pix2, pixs, size, 1); pixDilateCompBrick(pix4, pixs, 1, size); pixDilateCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixErodeCompBrickExtendDwa(pix1, pixs, size, 1); pixErodeCompBrickExtendDwa(pix3, pixs, 1, size); pixErodeCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pix2, pixs, size, 1); pixErodeCompBrick(pix4, pixs, 1, size); pixErodeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrickExtendDwa(pix1, pixs, size, 1); pixOpenCompBrickExtendDwa(pix3, pixs, 1, size); pixOpenCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pix2, pixs, size, 1); pixOpenCompBrick(pix4, pixs, 1, size); pixOpenCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseCompBrickExtendDwa(pix1, pixs, size, 1); pixCloseCompBrickExtendDwa(pix3, pixs, 1, size); pixCloseCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pix2, pixs, size, 1); pixCloseSafeCompBrick(pix4, pixs, 1, size); pixCloseSafeCompBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } l_int32 DoComparisonDwa2(L_REGPARAMS *rp, PIX *pixs, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6, l_int32 size) /* exactly decomposable */ { lept_stderr("..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickExtendDwa(pix1, pixs, size, 1); pixDilateCompBrickExtendDwa(pix3, pixs, 1, size); pixDilateCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pix2, pixs, size, 1); pixDilateBrick(pix4, pixs, 1, size); pixDilateBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "dilate", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixErodeCompBrickExtendDwa(pix1, pixs, size, 1); pixErodeCompBrickExtendDwa(pix3, pixs, 1, size); pixErodeCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pix2, pixs, size, 1); pixErodeBrick(pix4, pixs, 1, size); pixErodeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "erode", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixOpenCompBrickExtendDwa(pix1, pixs, size, 1); pixOpenCompBrickExtendDwa(pix3, pixs, 1, size); pixOpenCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pix2, pixs, size, 1); pixOpenBrick(pix4, pixs, 1, size); pixOpenBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "open", pix1, pix2, pix3, pix4, pix5, pix6); if (TIMING) startTimer(); pixCloseCompBrickExtendDwa(pix1, pixs, size, 1); pixCloseCompBrickExtendDwa(pix3, pixs, 1, size); pixCloseCompBrickExtendDwa(pix5, pixs, size, size); if (TIMING) lept_stderr("Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pix2, pixs, size, 1); pixCloseSafeBrick(pix4, pixs, 1, size); pixCloseSafeBrick(pix6, pixs, size, size); if (TIMING) lept_stderr("Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(rp, size, "close", pix1, pix2, pix3, pix4, pix5, pix6); return 0; } void PixCompareDwa(L_REGPARAMS *rp, l_int32 size, const char *type, PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, PIX *pix5, PIX *pix6) { l_int32 same; pixEqual(pix1, pix2, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (%d, 1) not same\n", type, size); pixEqual(pix3, pix4, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (1, %d) not same\n", type, size); pixEqual(pix5, pix6, &same); regTestCompareValues(rp, TRUE, same, 0); if (!same) lept_stderr("%s (%d, %d) not same\n", type, size, size); } leptonica-1.86.0/prog/binmorph6_reg.c000066400000000000000000000070161506303110300174340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * binmorph6_reg.c * * Miscellaneous morphological operations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { BOX *box1; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; SEL *sel; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test making sel from a pix */ pixa = pixaCreate(10); pix1 = pixRead("feyn-fract.tif"); box1 = boxCreate(507, 65, 60, 36); pix2 = pixClipRectangle(pix1, box1, NULL); sel = selCreateFromPix(pix2, 6, 6, "life"); /* 610 hits */ /* Note how the closing tries to put the negative * of the sel, inverted spatially, in the background. */ pix3 = pixDilate(NULL, pix1, sel); /* note the small holes */ pix4 = pixOpen(NULL, pix1, sel); /* just the sel */ pix5 = pixCloseSafe(NULL, pix1, sel); /* expands small holes in dilate */ pix6 = pixSubtract(NULL, pix3, pix1); pix7 = pixSubtract(NULL, pix1, pix5); /* no pixels because closing * is extensive */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 4 */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); pixaAddPix(pixa, pix6, L_INSERT); pixaAddPix(pixa, pix7, L_INSERT); pix8 = pixaDisplayTiledInColumns(pixa, 2, 0.75, 20, 2); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix8, 100, 0, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix8); pixaDestroy(&pixa); boxDestroy(&box1); selDestroy(&sel); return regTestCleanup(rp); } leptonica-1.86.0/prog/blackwhite_reg.c000066400000000000000000000107421506303110300176450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blackwhite_reg.c * * Tests functions that handle black and white pixels in an image. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" const char *fnames[11] = {"test1.png", "speckle2.png", "weasel2.4g.png", "speckle4.png", "weasel4.11c.png", "dreyfus8.png", "weasel8.240c.png", "test16.tif", "marge.jpg", "test-cmap-alpha.png", "test-gray-alpha.png"}; const l_int32 setsize = 11; int main(int argc, char **argv) { l_int32 i, spp; l_uint32 bval, wval; PIX *pixs, *pix1, *pix2, *pix3, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Scale each image and add a white boundary */ pixa = pixaCreate(setsize); for (i = 0; i < setsize; i++) { pixs = pixRead(fnames[i]); spp = pixGetSpp(pixs); pixGetBlackOrWhiteVal(pixs, L_GET_WHITE_VAL, &wval); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); lept_stderr("d = %d, spp = %d, bval = %x, wval = %x\n", pixGetDepth(pixs), spp, bval, wval); if (spp == 4) /* remove alpha, using white background */ pix1 = pixAlphaBlendUniform(pixs, wval); else pix1 = pixClone(pixs); pix2 = pixScaleToSize(pix1, 150, 150); pixGetBlackOrWhiteVal(pix2, L_GET_WHITE_VAL, &wval); pix3 = pixAddBorderGeneral(pix2, 30, 30, 20, 20, wval); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 1, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 0, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Scale each image and add a black boundary */ pixa = pixaCreate(setsize); for (i = 0; i < setsize; i++) { pixs = pixRead(fnames[i]); spp = pixGetSpp(pixs); pixGetBlackOrWhiteVal(pixs, L_GET_WHITE_VAL, &wval); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); lept_stderr("d = %d, spp = %d, bval = %x, wval = %x\n", pixGetDepth(pixs), spp, bval, wval); if (spp == 4) /* remove alpha, using white background */ pix1 = pixAlphaBlendUniform(pixs, wval); else pix1 = pixClone(pixs); pix2 = pixScaleToSize(pix1, 150, 150); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); pix3 = pixAddBorderGeneral(pix2, 30, 30, 20, 20, bval); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 1000, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/blend-green1.jpg000066400000000000000000000332331506303110300174740ustar00rootroot00000000000000˙Ø˙āJFIFMM˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā{?"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?¯EWˆq…Q@XŗĻ—:Ĩœ2’LŠãÛw5Ļ!Ķõ,°dmҤ•Ö!pĖĒĒ c'-Žũ8Ŧ5fFÜŦUģ2đA§C<ÖŌ‰`•âFÅHļG8ĒMu}ÍgĶ,W”–IüŲcŠ%G$+ƒŽ9Āû­OcĻÜܛ†™mĄšGX•Yt€ã'åųŗƒĮ$œÖ ē¤å.xbį!¸ųŗëĀæ–+˨axbš™"s—D‘‚ˇÔƒUĖ‚čĩ%ĨŊŧ+ §ā‡1ŽG ‘ƒŸJ–æŌZÎĘŨņŽXîų™TžÃŸ›öĒjšû7ŲžĶ7ŲķŸ+yØ•HėûŲØŋqcž:RæB5ĸ°ĶåˇŽä›¸c3ŋyˇ NCmųrJÁĮ^jŧvIöËՕfXíC3ŽFū)č'“Øy¨NĨ|ŌŦĻöäČ …s+nëƒūz †;‰Ą˜MŌ$ŖŖĢߘæŽd= I´û Oö¯,Ā’ųLT>ævP7éĩ Î? €éŅVkmîb‰YÉ.T.ėzgļ~ĻŠËq<ûŧéåļ Üäįã?LœR æųâYÛˇyÎíĮŠÎsūMB5WKŗ’$ší#6ōÜ2ŦÁA ¸8įœwöĻ˙fÚ fŧ+t!ōQT¸,åTÆ0B“ģúUDÕoQå“í2´˛&Ī1¤bę7āįŽE"jwą‰JÜĘ$–E‘Ĩķy*uĪO˜ū”ųîŖÚ"´ķNë (@—MØfÁ¸įڋ{K%ˆĸūøũąö\|¤â]Įå öaž}=+*+Û¸$’Hn§ŽI9‘ŌV üį$į“õĻ,ŌĻ6Í"ā’6šČÁĮÔuŖ™ŅŦēeŒ“:î–lë$ĒH%€ `ÛÔdāã§^*+ģ(-Ϛ9¤”HãTq…fRX1Į8Āčw Ēږ ķ,ÍtŌ§Ũv™‰¸9ÍA$ķLI–Y$ÉÜwąlŸ^{đ?*9Ú|–ŅšŸÍ牤WLyq€X|Ã0ųy9Īzd–ž§mc H$,HîCėpLŽĩP]\-ģ[­Äĸ9hݧę:Q´ŽīŊŲ™ōârZ›ĄŽ-­?ŗ>×ēSįˆ€™†$‘ĶŸģ‘ÛÔæ§6)nŪkÜų‘ÚĮq.ÖP>b¸@=ÊŨÛŌŗįģēē#í3MŽžlŒÄ~$ÔfYNs+á”)ų cč0?*|Č Y4ģh ; šwD…# 29ÜHųˆŪÁéRMĻŲÛÛŨ4˛JĐÛÍ(MTɇŽ03ƒŒå˙#īYQŪ]ÂXÃu6ÕÍĒŧ‚1’špĸ=å@î{f‘-ŦæY.nŌŖ.čĖ 7Ėmlü\œqŽõK͔J%¸ī wgˇ5)žŧ7āŪ\ĘwcĻ7uĮ>ĩ7B,ŨiŅÅm$ņyØ)$N2ĀžėãŸģÛŽE[}"‘o#Îō3ČĢ*Š ÅNĶĖÉã8úÖJ]ŨE;ĪĖÉ3į|‹!VlõÉ4‘\ÜĀĘĐÜM*• ŽT€Np1ĐrxĻĢ™čÔm"Ō;`gē),‘ŗ¨fá@ČU*Ũœ`F3Ū¨i°ŦÚĩ¤)ØĶ |˙tļOzT"îä[5°¸˜@Į&-įiį'¯?ZC<Ļ_4ĘæOīî;ēc­&×AÚmÍšŲp0ķ2ŠyklĖŖ'žåü…G&ŸbŠ÷ 4’A{Ū8ßsd°æÚ9ÎqøVTsKCކ6ܛ[Xõ# ĀæĨûußÚMĪÚî<ücÍķNėŊ×õ§Ė‡tmÚiļQŪ"ɍĻŲYeÚ6‘‹c§eCõÉéšĢ%ĩÅœ[b’)šÚkARø Į͐ĪŊk,Ũ\ŗ—k‰‹šc!ÉĀĀüŗč)žl¸Ā‘ņˇf7žŸJ9]oŦc´ŒHŸ<‡€g“2K~'oÔ7§3˙fÛ,wÉö“4ŋhi<ŧ•\c§Ė9ĪQŌŗn.â@ė*¯Ũ N7wMn-ÍĖÆ0"2 ué͍Í+̆†ŠŅí¤¸’Ö).Xe$wŽC¸ę8įœvĒ×0Ú.ŠŗÃ Ęe¸Ā3`œ*ōApwŽ;mīT<éˇ3yŌngŪÍ¸å›ŗpI§OustA¸¸šlG˜åˆÎ3‚}p3O™†ÄštČ<€ŦqÅŒą ˙"ƒY—'ļ=ąMûŸog%ԑ\åĩVXØŽõ-.ŨšĮ~žšÖēÅŦâ@ÆLg ėÜdH ‚ ‚8¤ŊÔ./ågÎŌØ +ÆqԒ~ķrI<õŖ™ ģyimeewIayåĮ)8ųUyĮ_˜gŸON]„.mhį*eŒÕ”ŌÉ/.ėĮs?$ũãÔũN4Hāđ¨Ž9ČúqG2¸Žˆ ŗM¸ŖyʖHwRôIųNy'éŽ1LÕėíĸ7-n$Vļ¸KwXía•°c9ëœöŦŋ:]›|Įۍ¸qŒį}yúĐŌČáƒ;0f.Ų=XįŸÖ—2 špiļÄ,S“)ĩk“$xōÕB၂sÁĻÍcj–ĶĒ<Æâhn™†ĖļĀSåĻsžŨ*’Ū],BÜĖ!į÷aÎŪzņĶüša–VŨ™\î[æ<ŒÃŸ2SGĶĄ¸B÷-fD’ÆAg¸}}(ĩĶĸŲk!Y|œ7”mŽ6•Éá29į͜–f}ģ™ŽÁ…ÉÎséß§­J÷ˇR(WēĀŨ€ŌėîĀÎ9æ…(††‘Ō`_ļ[¨šûMĸŽį?rF.Ģ€12ÜķŽÕĄii SÉhķ‘ Á‡t¤bA‚w Œc§=ET7ˇf$ˆŨOåĻ6§˜ÛF:`fĄ.Åv–;wn۞3ßų MށĄŽē]ĢCįféĸKv–FR .  c+†qž¸ũ$ĩŌ­å™>yb†xcrŽŧ`ĘAįü¨ÍĨgĻŠ|ŠĀ]LXĸĸš‘ˇ"‚įē*spYÜÜLZC—;Î[Œs댜}iķ ē&ē‚mmq•VRęVbŨĮÍĀôö<Õģ6Ú/Æ.üË&3ÛxRÆTãv:äÖIf*ą*Ŋ=9Фŧē–%ŠKŠŪ4ÆÔi03Ā•<Č.j,×Å­Ų›ėļķ6čˇ˜D§'îãnqŽi“ZYĩŠWŽâE™˛T¯Í'ĘŽNŲæöéÍeyŊŸ{olîlœœŒįAšRyķ(CķTv>ÜČSæAsWRĶ,ėĸš5ģq„#~D‡88\|¸úž9ĸ=2ĖXE,÷%š2áūUä€îéĪ#õ›-ŨÍÄI×3K}ŒF`ŧc€OĢwrļínˇ3;ĸ6ÞyĮZ|Ęáti & œÚÅ$Ëpĸí!79@Wã ų΄ÔļvÚ~ėɘGöØĄvšQ‚ƒs1|§ ČįšÄi$bÄČÄąķ×3S=ũėŒKۗečZVČãŋ_ĖŅ˃BžweēéIz1KYˆB3F)h ’–’˜Q@ EPERĸŠLĐŠ?ÂĻĩ'ģ†%XRIF耜~•°4/ąZ^NSÔÆ$ů$ƒßįāU(ɅŽ`ûöõëEikzLÚMüéäÜ-ĒĘR)ĨLũŦj¤öw6ģ>Ņo4;Á)æ!]ĀuÆzöĄÅĢÜ,Ņ %j>•ޟkw<‘‹Ŧ´QCv؉ÜÎxëPO§“~ÖÚ{I|ģEhã9ÁPy8ÆqõĄÅ”ĨF=jÂØ^=Ë[%¤ípŋz!Ū>Ŗ¨¤[KŸĩ›vˇŸÍRÆ#;—ūք˜ĩ ÍąĒčRŲ憯Î+›†¤„yd˛îõ8ędē4nREde;Ha‚´ũŖęĮUwâ ø5 9ą$öĐDˇ2ĖŅ’w0ĪCĮ9ãčš×´Ũ@ęPOįD—Đ—0ÎLg$•ČûÜgžÂš\᧝Ķcüp:ũhö­‡3;â +ûUæ-$–Ō[C ąĪlpzp>žŧW+w$s^ÜM ˛Äō3 rKm'<“É<÷¨yëŽ?ŋį­/~˜4Ĩ7-ÁĘâf‚sGj?§_j‚nŖdtū|ŸūŊĄúŅä RŌgü˙ŸĨ/~†€ J_ķúRRÅĨížß•'ųúĐ RöŖ#ŽG>ô™ėqŸ­0¸RŌwĀäŌį’23õ˙>”QIŸ\~t´€(ĸŠ(§Ŋ[˛ĩĩ¸I Õã[Ę¨Š‘œœöÜ08ë[á{TŧÕ,ōęæöÎÜĘ8†lŪb~đã­BOQÚį/š3Vŗ¯~ØÖŸd›í)Ņl;€õ#°æˆlnfÔÄDËpŌö8ÚAÎ9ĨĘÅŠ^ŠÖ—NĶaŧžÆKųVhƒƒ)Œ‹ 9{8ČĀ>¤qY˙cēû/ÚžÍ7Ųō›å™úã8´dŖ5ûU ģû2ķũCu=;TCLž7Mj,į7 ÷ŖØw.zd{ņųŅĘÂÅjOĶëV-mDúŒV“ģÂ^A™dbp2¤ŽũyâļåđĖ1Évųå[)ã†å|ķ/ĖsÉéÅ5 =AEœīøRf´¯ôyáÕom,⏏ŠÕČfXŲ°r@ãņ¨aŌĩ˜DĐXÜÉīX˜ŠĮ\`Ōå{˧ŠZ3EH‚Š( Š( Š( Š( Š( ŠLҚZ(ĸ€ (ĸ€ (ĸ€ (ĸ€ LŌŌSĨ¤Ŗ4´QEQE (ĸ€$ĩķ Ü>\"wŪ¤Eˇpúc¸­-Q.ŖžŌ+ØgRwJŅlß큐:gßÚąœíNÄg¸â•cá2$.c˄$™įĐnQô#ÖĸUáfRÔęŽôË&[™ļJŲ3;ÎĒÄFۛåÎv÷x?1öČÍYôÛ8´ą2$¤QÅĀFÚŌ2¤įf2HÆ7šŊũøŸëJ_v€@댟˙]I†§W6ÆŊuvīŠî*äą[ÍĢ^ËM Czņ–~pÂS“î Ž+›xŪ2ĸDdÜĄÆāFå=õ†ĄPĨ”¨eÜšČägéÔ}jųõØW:DĩĩŊ‘œÚ†–;kp°F˛6āÉËî8{Õ,-ŸÄ2Z*<”„.–XŲąģ‘Á}Ģ#ãĮ?įô§Å+ÂÅŖ;XŖ!8ūR¤~DĶrL9ąĻFJ<– æÉlw°2` S‚wŒ†sŽūYĮZ/Ŧm­,|æ°hĻh#o)äl#4’ß=qž3X8`éūĪZœ úú÷˙?Z9ĐsĨkņę7Úym €Â„TķķI õ˜¨tũ>āļclķĮ+¸¸ö`¸9nšĮ‹éͧĩg¯=š˙>Ôšũë…Íyí­>ĖņG RÉ'3ol– dcĻ0OžyĪjŸY´ĩjˌ}ĻH7%Nqé°õ?…`āqĶōŠ ˛’"ßģF,ŖĐœgų 9Đ\ągj%žk)—dĖ iŧãlŧã9ėHĮļsZ-§éĻh SŠwŲī? ;=ˇļÜöŊĢ ‹;v,I$’s’{ŌpzФ–â:4Ōã?dyô™ā–I%F„o'V+÷€ yįœŠx-ĖVö’@ĻTŗ¸a*ĘN I3Ŋˆ;yĪ\Ž•ƒĮķū}¨úqO˜é.t>8Đ,P™#TēÚĀH NXí8‘Æ;Õ{ÛVļŅ'-§=–náUË1ŪËĪ=qĮ#ƒžœVŅč=ũčÚ; PæžÁĖoÚé°Éyąy kc#]‰U#6Đ: 1÷ZgŲ4ųėÛ|Ŋŧ¯?˜Oß1‡āœc÷‡jÃĀŖķĮĨ.tÆåíŗ[hŗ–ĶžČ›¨B’Ėw¨Y9į¯o˜|ŧûVhÃŽzwŖ¤îŅE"$ˇō…ĖfgeŒ0,Q70ögķŽ’ë^ĶgÕ5ĢÅkŦ_ÚųĻ%Ę6įįéōĪÚšzŗ6,Ųā“ūx̌ųUâÚ:×ņ›-ÅĘą¸\YÅ šKurŒöą ƒũ+ęō§ˆ—UYâD•\´‘ŦfL …éŸÆŗ ”bŦĨX#Fi1Æ?JnŖaĖÎĨ5"-CQŧ_5…ÜnË–ĘíÍÎāÄōĪāGĻj8um%4­ڒiŦÄRņæ+d`–āv=ë[;ˆ­’y"+ãiČÎ$;dZƒ úīųНi.Ãæ:ģÍNžEîĮÚlâˇ\ÄŖ žŋ?āß_œŌx‹N–{Ü5Ėi†Ŋ˛9G‹ÕKįúW$‘É"ČČ2!]īķĩrv†ˆ¤hä ģ0ČĮ¯§Ķ­/jٗ–õ_[éæ™ĶĪŗųJ°A?( ãĻjîĨŽ-æ°^9îO’ágxü§vAäķcÍc‹IŒ&QîÂ3‘œ OæGŋĩA‘ĶĶø˙õRRiXWgekâ-fmEÅŪöŧ퐔*Awā~÷~Ŋ?:æ#ŠI‹]ÅœķŒ(ëÖŖÎzŸ_ūš˙>ÔũŖ+—gšūYfMŲRË´‘î9Å6O;0ˆneVs†^üĶ7y˜ŦÚdii^6Q›nw.2G#¨ä?t1I<‚8×sãž8ëÉŖQ؏4fŸ,RBʲ.Öd\‚2ÔĪÆ‹1 IšCĀŠî-eĩ*& ĨŗŧĮ¨ŽŊčŗÜv"¤Í‡¨ô˙#­į4 áš3SEk4Ņ4ą¨ePIųÔ’qœãķPäzĐE ŸL˙ŸķųU“arĄÉAûą—× `ã9Į#ķĸĖv+ŅE&iZ(ĸ€ (ĸ€ (ĸ€ JZLSĸŠ1@ EPER¤Í-&(KfUŊˇfŽ9TJ I€9Á=ĢeŸMŧW2ĀņyŦí°(8-k¸(^ezí&°üļ˜Ē*ŗ3Ž­č>´û›ŦÜ,čP°$›ŸQĮã\ÕiNR稏ŗN3ž„ߝ1ĄŪÛÛhĪĘvîØ>îíŋ{ŸÖŸ+YåĮeā„ė.Ņ´eË gjˆÃmŨĪN+[v‚VŠPU‡PO¨˙ëĐmĘ’BHHRŪ#}EGąŠØ|ČšŦJļ;Õ¤ŠÜn€P8‘›HĮ~˜Į>•ŗ>Ąk6¤Š'Ų$‚mVc#\€yņÖš—ļ1$lÃjʛäÃ$gŽŲ:Đ1;ã§ZßĶŊŅ.FâŨÚAgh;W‘š!)’0Ä(_˜r8ü? TÉöR(ŸkÅi Mžš <ŋ!=ˇ\gÚšŪ=W?į¯ųíJŦĀ8V 7Ū¸ëČî:×ĩtķŠāNæ,@äįII‘ëųņū{ŌäzÔjHQš23ŒŠškimÂT.ūŸ0Ī@FFsüCĩę2ZBq×ßüū”šĮ=ŊsC™ĨŠaļ–áâPĘš' ŊŗdsČžjҰXZLRŅHÅĨĸ…&ii1@ EPb–Š(ĸŠ(ĢtĢĨk3Éå$rĢ3ûŸBjŊū¯zk@/_{‹Ģû¨î-pZ$ˇī‰9É㯭PĨĮëIŠmÜfÔ–1ElŌĘe•„_4Cc›ŗåJ˙ģØp%}F'†ŪEîßũ!^bŦvDUäüĮr{{Õ¤Č&yáTxDėÄž<`œ°_—<ņÅHēeŧv—3Īu ģĄl0%”’6îāŠ zÕûÃ׹0Ôcˇˇ–Ö)ä’˛ŦGfäYXL¸ôÚ\döĪ­?YÕ ŧļ1ÄČû¤ …“0¨Īˆl/QÂ=øĸ_ M%åŌÚąx"œÂŽb‘ōGPp‡ČɘĀĒrŪÆúUĖ-zō—ĖŒe$Ŗįū``Ä`aM#øvę'MΊ,æÉ‘€wĒņĶƒÚŠI§ČˇvđDņĖ×;<–Nä㸂9Ąš ÜŧēąļŌ+IäŠįËE,œ‰&c‚:péČíÅ2=B;Ë} ­LîÁ“å8 ˙Zt†–?2ŪōÚq戛fņŗ!ŽNåCÍIũ’’Z$ą^Bû¤4ŖpTUPNAPxö¯{ÂԑĩuxĖ2ČŌ[}–%ōē‘vN;đFz㊓YÔāŧļhŖd}Ōîvɘ—Ÿ— pŊz(+ĶŌ¨^YGmmi$S,Æmųhķƒ†Ā `ûUš<3}*¸Q™'-…BN9%pÃ9Īá’ō B+øRĘ57.°Ŧ ’Y„8•Č8lô<•9'r㎂¤›RąžX╤6˛IН˪å*GžT~ęĶeŒ÷–đ'˜cS*¸ŪĀ ÜmČÆFwcЧÛé/pŅFo-ãš`LQšbYA#9 G$däãÜdŧ­kĻ•–š ÆÅĘBævi"œ€)€€­YēuŌEö“)¤Į—:+|ƒœŽFXdc‘žžôß랊KĢxãE#ąÜB™rŽsœzqV"Đf¸8öŧÁō]rËåė  į=Ī=(Ն¤ĪĒZ2Ũüå×Ę`ČŪQBŪġųīPé÷6ŅGfķJŅŊĨËMåėbdL(=ĘcæĮZ­wĨ]YŨClņąy€1åYwe°8`äŖßĻ3mXÉlöÆáĖÎâ< WfOׇįŽ8ÍOwŦCqי4’I*ĨōIųuúƒT?ŗ•tģˇk}Ŧīq– H Žs–\`s¸b’ęÅ!ká™$71o2!rduč3‘Æ)ŪV JŖüzŌ}#ĘķĖ×ļņ$2ˆ‹:Č2ÄŒlĪ@{:“û„,d–( [ÚY]ØŠU1€ũąŽšĪjžIŒœŅšžÚY‹qšîŪ(ū]’6ō$ʇā$ 2ž@ûŸ.ŽÖōŧw–а•ĸ]ÛÎōŧ0§sū4šeØ,gdzŌf´§ŌÂÛ$°Īķnŗ´DØÎ tÆ?ûVolöâ•Ŧ&-&ii)´QE0–’–€ (ĸ€ (ĸQ@ƒ`¸ŒČīnRĪ,ŖÔ{ÕÍBâ3œPKŧTÉmõČ<–듎xãŽsķøũjҰjÚ#Äī/—ą¤:†R2ū!Tžš5ĨՖy§’=IíĨyC4îŦLąí\.qž0x<öÅK.ĢnōĘÖú‘ļ_ˇO+§”ĮĖ˜`Žz•°9öŦvĶdKv˜O2ĮŧÆŦwė$ØÆ0r8<€AÅ1´ûĨŗŽéawštRV0 /ĖqĘ“×Ļ*ųŸaÜÚˇÕė–""ŪM˜Wc ÚžlŒc €ˇG_n´ļÖķŪĮuE}F9"†4)¸—L–#n g#ž0qX irļËrÖ͈JŅ‡Q‚ģŊwdc^™ƒX†9oŽ%ŗ Đwi Į.-õ$c×f跂3‘ŌNŖųŒĢ;î*k]íU†8!ÄË/î` —Žxé‚xéGö­ŌGH­á„ÁRĒû—?Ū séWí'´[čn#ļĩ„ĨËÄAMŧg'’9æ Ŋ•D€ rQ™CGtöéO[n2ÕėˇI˛D‰ʂ$Ú'$zŸ¯_z’[éæ`Ō[[,˜ĀĄ¤<õ=ō=1ŸÂ´#ƒHxÖFe ëö’FbĖeZŗguBŲ‹ÄrВŽŲ÷rgŋbE /¸WšrÆD‚U-ŊVHT8Uųxé€3D­Ô! ¤ņRG„3 $ägĶ,O>ŧb¯}5´‘ Tf6åŲÆÍÂR3Á2g¸ÆÎŸ÷Õ:â8!ąÔ„1Ú-ģBĢo"͙%ldewg8ž>^ØĸΏIŠNŦÅÖ9U‘’DÜE §Ø€:Žz͆Ģuš‰1°bICÚFíĮM ( cŌĒKC+Äûw!ÁÚÁ‡āA ūÜT]ŠäŌ\;˞ĒĮ&6yHnAīÉį¯ŋAV˙ļŽ€ųŪ<Č%o.ģœgūgŽ•Š1EØ Ô'ˇ#]†5 2åX62ôųA0i./åš’t„T""F… X t<ąĪ¯z­ŠZWasMĩ™ŲŖ{x—BĸUvŽ;ņŸ_įUäÔîĨŠXäua(mß(YôÆ9Eü*Ĩų˜\¸5Iöít†T6Ŧą† QB=Đė{Š{ę÷2É$’ĨŧŦŌ4ŖĖ„6ÆnN=Ŋ­gâŒĶæarÁŧ˜Ų\ų>OŨw¨äË)r¨¤ã„*HÉĀķĪcT¯Đ†k5Ķ 1<ë;ŪƒkríŲ Ā8Į^OA‡G¨„[E!öÁА:eüÎę? „Y7öt—áą Čą¨cķ89ä{q×׊|ZUÜĐE2${eRbTV“i íRrNAíÍ?{ĸĨŲu¤{cļ %1$,ĻŪ-¸]Ŋ[ˆ;G¯äÖ-­äžâēy'¸IŲe|(*Åą‘÷?{ĩfĻröÂpˆSapĻDŪTg'nsƒÛą=,zeÔˇ-o_ŊVT#pāąyéÉ4Ô¤dˇ6ŋŲcļ-™ÖRŌã`ŒcžFz÷ôŠäÖėvl+?ŲÄcÆĐîŪFūƒ§¯9ǧJē"mˆî w,ČPmûŲ`p1Áä÷´—z{Ú-ŠwVķÁ|Ą 0 #ŠWj\¸ÔŦî Ņȓ:КuUŌ+1”pxly* EöËI!ō$û`Ž9 ąē°fo•FÖôûš™=iˇz5Õĩ˰ĸ¤ģ&ō@ŽEfÜNr‚J“î:ņN‡Cš’XÊ;2+Į*?ΰ^ĸšĢΰõ'ēÖŖšÔŒŪTĸ'Iã`ĸIō>×ëČâ–ÛYŠÄE+¤ 2 !÷tįoˇ§éYōéˇ1BŌ•ŖTßē9Qר<‚sËøzsL[+†ŧû&ÕYƒ: .ã¸ôQšNRĨģËÛ{˜ŖK,Q‡pĮ–`6 ã§'<ú ŠÔKa4ĢČĖÁŖ\¨r2Āõ ߏASGŖŪHˆĘą3"5ķŖB Qœˇ#ˇáœĶ—Fžhcš ž[*ķI3āešÎĶéĐÖ5ŠJǰĶh’īUĩŋC*ONÆMČ9ķ%lī‘/¯–ÚĖ0Äą”—LŌÄLqJį8āŗ)Ú~Qȇ-íÃ",1‰$bŠ’"3pp¤‚q‚?éQ 6sj.6ēĢȊėŖ<…$8ôŽg…īqķ˛ÍļĢl’ÛŨJ—âš °íA 2=>öHĮ'=3Yuü+OPŌ$°y hŅ’wFFTW>õ^ŪŌK…•ĸí‰w9gUÆz ’2O`=)Ŧ4ÔĶlž„T™­ŌĨ nÉ$,˛Áį3UV?˜Ž ĪˇÔž1Dz-ôĨ‚ĮĘęŸ4Č73 ¨?6F1Œæģ9Yf}ĢßŲ™X‚á‰=6ŽÜŗ€AerEW†Ō[ˆf–0Ĩ!šŪ;đ1Ī<úQĘĮb*LÕ˙ė‹Ķ*DŠČōy[RdbŽz+sōžŊiHŧDŪVĨÔŦčw…Îí¸?60sŠ9_aY”sFjãi—I˜ËRËæŽä @†rŖ‘×Í"éˇlå<­Ĩ]ãmėƒ-’NžœŌŗŠ™ĨëV×Lši ĐĖžjųxÎÜīÎĶČ#ÎAÍ2úŅŦgH™”ŗF¯AŒāHį§×ŒÔÖ÷wlßgâ'¨VÆ}8=ķøÖžŠ72ŪÉknRHī>W$Č>s“ĪQŗ¨ĮZM*.“z#˛7nŗBV Ägå“' CŪ”rë`ļĻL˛<˛4’ģ3ąå‰É>¤žOøĶxĮlō}ŋ:čVÖÖÖ{!6ČōĘĨħ1 ƒˇ ė3ŽÂŖ{->K™ mŖŠHį2Hbž;äz{Ķåķ _¯aÅ/œ˙úąZ÷ÖB-*K‡Ķ^ÎQsišŨˇŠWÎsÔüŖæTëW6–[,’iĸŗŨē˧ÎpIÉ#“ŽO Å.@ą€@úw÷īF=šö˙ Ķ’ÆØk0Û11FÁ<ČüÁ˜Ø•ĪnxũÜķŌĨÔl„:\W§=”Í;FPŗWk9<Åc ķøũiGŨ:úâē84čwFžKÅÄW,Ž˙ž…XœõyÁ^ŧtÁ¨ ƒN¸k0,Œiģk\ų­ō¯É†÷oŸŲxéO‘÷Œ1ĶđĮ_ķúR ˙Ž+oɰH$͙g†Ę+ÆVũãą@A˙gįč9ã­YƒIąHë“11ˆq ´hųųOĢ3gzsG'˜Xį@Í! ~UŖ¨ZÁÛ%œlÛĸySՀwPHÂŽžôũ>ĐMdŌĮd×ŗyģ]ĘųK€C|Ŋ3“ÉųF=ęm¨ŒĪōh'ĐÜØXE}ö4ˇ,^{ˆÄ†VĘ$.NŨNsíDIŧī“~ÂΡ†C‡rœŒ}Ūš@ 0}*ŊŸ˜ėsÜRgüæ´ė-<Û6’;ž›ÍÚĐĢ0(¸6‚s“ĪAŽųĢvÚlWėŽđČΡqo˛äJüŧ $|Ųâ’…ÂÆ:LOķĮøÖËiđũ€ˇŲ›ÉžoÛwŸõ›3ˇ>÷ˌnīMņGĒ\´2ŊÄš“?Ÿü vÆÍ:ŒŒŌŌQš EPIFhĻEPŅEQE€(ĸŠ1WĄ™%—gīZÕmĐŠû¸UB ?Ļ9<Ķ‚ō)É á“ßpĘŠl´u[†ĶšÉüļˆ… LkNÆ‹=™ŠãÕ!‚ ?mĒI=Ēå]‹ ¯æ3 €y*GŋåYŌąÆGR2~ģˆū@Tc=ĮøĶģĸēĄŖ5ē5ŌFbYË…#3ŒāãéŽã5*kF9ĸ™-Ŗ "’GÜ~r„Įlāf˛¨ĨĪ ģ.[jÚŲ-Ė(ņ&åb~`á8ãĻ6ĮĨ%ÕâÜ uŽŨ!HǍbÄåˇd“ĪRzbĢ8ڑ‘Õ—q÷<Ķhæ`jžļEԗ6ÖąA4˛‰$`ĖÁ°Ûą‚x¤‡WŠÕQ-ôøQīe,ÍģäeÁįϧëYtQĪ-ÂėÔļÕ"†æļé´EŲŖÉo0˛á'ązúķU!ŧ‘/žŲ.įšrVB„ąî䚯Ī2Ģt,á‘IüTs;ą.ą iE” Ŗ"™c|lšF‰ ĄL3°ī‘œ{ƒéUŖPķ…nAlQ Ûåãø—q÷4î÷ˇ4-5Ší7Ē,"ōåh؀ŁČ=rHį ~i$Ö&–t•ĶqK…C;7Ũc$“Û׎ØŦú(æasBĶUkV‰ŧæ9d”|åy}™vų1Ž„UŖŧ’(åT‘$ ũŌ¤‘ÄÕz)s0šŗ7ˆŽf‘ŧÂCųŒâGRpF$€9÷úÕ¯š$B"ŽHĮ8ČpGūÍU(§ĖÂåųĩ?69OŲŅn'P“Jüà đ3€NҟūŊHšåŌ\Å0Ā)”B1BŪ­s¸œõāVes0šŠ>´×NËsO(]’ÎîؐCH<‘Į=;ÕKëŋļÜyĸ%ˆŌ0ˆI(ĀëÉãÖĢQIÉĩ`náŠ;c¯nii*DŽ”QEH ”ĸ Âļ6œ€púŌŦä_KwŋØįŽIÉTķ#a‘ߡO_­hDOÛdé͍ēôíē!ü€Ší˜É¨ČÎK7öēōOŽė˙![F%XĖÂXmEÕUĘŠR0'úfŨ=ēķ†ũ†í û@ĩœÃÉķ|ļ+œķíŽkNp?áĩ÷xWđßsA‘ƯrˆO랏1ä.ĶڒW ÃNžy$lnYã‘D,vqŽ?-.%Ž#ļ•áLî‘c%Wŋ-ŒŽp+Sē’ÛíOˆąÖ.ų’%sÆĖ}āqP>ĨrĢe o1ģ–6ņ““4€˙qڟŗ)•ö[Čá["u‰°žfÃĩ˛ēr㚎ky­æ0Ī ‘H1ōHĨ[ÛƒĪ¯įZí4€ĘÁÛ)Ĩž˜ō˜~ŧÔąĸ˙ÂEĨĘWš4•öđ7•É >˜ĨČ+MĨę Ŧ/žŠapOæ=üĒ4‚î(Võ!cR Ü* įƒēĩtgcĄŨŠc…y03ĀĖ-ŸĪŋ­:öōXUbŒDû8 ų([_÷ąš|b”˨^ißjh—ČIU?wn.AÁųTŒrsžEW}>õg=Č™a‰ˇú r3Z~mĢŧ”¸ŧE!ķĻC}<‹sîŌ5‚\ĸXūđwŨ¯zg-ÛÜĩ˛Ú\5 ´^Q/Žüc8ät§ļ•v&hŌÚI™cIƌļĐĘÆG ĢڋĐ2Ū[\ûãÎôūU~ūîXŦ­ää‘YšHÕÉ"Ū y÷ĄSSš0J¤Æ9ųdŲ€Ø8āã¯\ÔxNüVžą4“Ea$–xåsÆ|ųš č:VmfЃÛōŖ9Į4´”€p,šÚÄnldpp}G›})i(¸8Į•‡˙Z–’‹€.´„ÛÛôĨĸ8æŽßũįüŠi(bŠZJ@-Q@ Š1KE0ŒQK@Q@˙Ųleptonica-1.86.0/prog/blend-green2.png000066400000000000000000000171321506303110300175010ustar00rootroot00000000000000‰PNG  IHDR?{Ŧ$VŸPLTE %""!"434.1?;@=A@>A9>BĀ8āĮ“5™“Î+ ŧWĀÄqâÅū8īĖühŊÎû3íÛī#—â‡r{õ 17ü €ķäëįīØ[†J’EJEؑKb­ũÆ:ų¯đ×ĖvHŽ*›ĸ};}oYę˛(~RåG ū™$@ÄĖĩS‰hĮ\.ŦĮ×1Eiđj*ËÍÛo$â-Š4=0–Čí‹O™ģ9Ф%I+Ü$QŅū'’ËŖ>_ŲØÆ_E~ˆ¸4×EœVÛĒvzu|üô¸đũŒø1Ĩ~ø\*YÁ"ū| ÃTųh놈AfŸ€Îâb÷č7’õã÷HrBxûŌ8Mi/hϊ´U’˜EGķøËa%ĐKGL—*MõŊŗ\€nŧŠîų40V wėН6ŠŖâjŗ?b¯ß÷mžŋÜlū°ø,†įÉ9ü€Ī{ã¤#Í˙2Nü@ƒ;FŦ8,rP rg°ūîčÛÍ?s[öFäd?CŒ3Z#|hąÂv3ˇļ‹Ęž3éĩ6vļgŲü“,ŲąũĪú0)ų@Aą4´cĐŖ:Úo—ŋĩlø™äq9\U6üL˛ágŊlø™dÃĪzYŸrrzg^зˆŸõr)~öŪë`<ĻžTžõøšé¯Č†Ÿõr)~ŧaÛüžp Šé~Ôü_ÚųėPšBˇTeŧš›0-úÖlÃĪzš?˜Ę~˛‡ŋ‚GĻ>1‚xãÁĪÉø p=x9s>ė<.dB(K^tąFGĘûˆ÷ÁĮ@>ß ?‘ ?ëeE˙g§´žTŪ°ÁLŊøDũœ!Îw/*…3¸Č>ˆÍĸ’ÚĚØ+š’ršĀ§ĘøCQ[&GęģˆŸõr9~KŖá„?ôEŗÉQąŲk^č*í ŽŌ\wR +ŒbŦYĘEĨxÂ¯~`jÃĪzš? >ĀĪCdmŒ&ʘ ĻČ!čALÍčhoĐiũđØ-čˇĀĪīî­8•‹ųc!FAã§xŠŪrû"yą/rRBdÄ΃JŒÜ‘‘CŠĪ‚ŸØbQau´ÁŨ'~RäĶ`娉ųHiŧŽ%.|ÅĮęgÄ/•}E:5-\X˙mäâū3‹ŒÜeė”ČĨ¤p&'û„—Ÿu€Ÿf‡6ŌJ̈́•˜úĀL1Y"ÆsŠÖņīCdÉZ ˙ ž5 ÎŗQSƒƒI†Å„ž8“™ēdššđÉ\Ųƒr\Kg^;ozĨĮw~šöüķgž ZĀŪR k¤1ļ›ĨÂĨ˛§ˆu%yā'_‰3kå’Y=•^Ē‡hr vĮ?ēä¤`§vDʸđÉÁ%žß”q>ãēT¯[i~”Ãs~ØĒûčÚs!™n ˜#š6~>eã@Îā’Äū°†cKTL Æ~ĶÉŸMqŲ7åÃ-ēOļ;ߥnĄ^Ŋ ĒÎ)¨ų‰/@˙N¨˜XœĢ‘ÚžÄēI(FŅÄh]Ŧ(ŖņQŸ+˜H†ÁxkÄĘæ˙šä<~^ä­H ÃĀā^Ÿ Š5\Ļ”fJ€"#æj˛Ĩ•ãLM>ƌQ§Ė seĸŸđŗŗ†ɡŽ9bYôL›S}(ųātļ?@"ÃQ:īĖØßđ3ÉYüæLøÁIHFqc 5ŦĖđÖ ÷‡'ü˜?„™‹v ,U5 øa¸=cØL-âG6ϟá‹ü;SŽ6üLr?´_Šv¡ö‹O¸ũâ×øŊŲ X™ˇ_Ží„.˙âԝ¨Ŗ/%í—õ{n˛x܄;šÄUJûÅ`dÍņÃu…Ö~ņYíøAû•ęˆž]kŋėÖ~} ,Í˙$é$k÷ÔS,čéDãø˜ ûŽŧļħč,G"îEûfŸø‹:ôeād.¨°cû“pÁ"(ã WÜÂĄ\Ô˛(´ļE[–ąŽįžqũ|õũöŸâī\á=e†ŧMŪ\øÜüĄéÃã́õé€Ųggœ ÷­›^f×cķ`tÂFÚEIãÜTíÁ}Ŗ?ŋ/]°å:yž÷’‹ņ“,íW/ã”ķOŧU'ãųDõ ¯žĢz€->u?ņЯ؜QÛķø¨éâ!áuülZōųšh6poĪvYč˛ÎĖڙĮkĘĨøÁ ?õXĘqŌŅ?ŸŦBŽg×%O5ĨcŸ™”9~”fƔķ7<–kųŋ^5īo"n*+ø?íKöA–ŽėAˇĀw3[‹Ė”qv_Ö mYâΉš Jh„5§R Ō$Gđ;8˒Üåščâwņ‹qŸ5 tC˜TC7y¸•:<"Iåœ &ŲbrƒÜ›Įŗžo†pÁzÖÍē^.ÅOgōkæ7ÁŪČ~#‡:gpėæø E‰×˜üķwDUĐ4,Ŧĸ€ÃeOã=}ur&‘>T•Úŗ4|Í*—”ō ß,WĢøAûEŊ´áįÚ˛Öū4~ã‡ô  ¨ΐÖĒĖņ3´*-pāD­‰‘ĀąP˜ã'Īņ?lZhß)#Mq(?­r0DXį?:/˛áįrąũ‘lR‡?ĀOĸ:Ą{X—†RF™˜ŽEđĶj‘åņŠŗ8ū~ų÷nüŒ*:iŸ]+ÔÜy‚Î!%DnÖ˜--ĮXŧÃbÂM×f\ŠŸŨQ<øÃKx æ¯zåîÔ| ĶŌåĢÅöĐ ĘE>øŸĖ 0‹ŖZ‹UōĄ ĩn$ûŋdŽNf Õą^t’¯`R†(I=‚$5OĒ­3ˆķ}ƒ‰}fu‰í‘KːJ0å“ûÄâüPÆŲÆZæ7iåüTΝâįP~3Æ[åâøķđ“s;^Ē•čđ<2•ĨŖū;ˆ`YČ[ áŖ¨ũIR@møø>ēļ§Ā˙ųÉbĩ׋ب×īÛ#ČÚÖâHšŌå$:‡Ūô /LŌâ4Ä Ž”īJA¯Ŗē ĄAŽŽŸMDVđ7žv>…†jūpYēŽ ŽÆËčĄęyąÚHŖ6ÂŪÖ9ŖĸŊ^u] ÃÕļļŪkēøIÕ ¨J÷ËęƒÔžŒ>‹w;ũ ÂŒ€Õoøš™ŦĀĪ<φ’#ō:#N›Ļ|o[­Ėm¸ŸژđĶØÚ˙lŒėŽ—lįŽ4•vÕc3Ô$7IĘ᧚7üÜNÖØŸ<ĮO-ĘnÂOZ˛?Q¯[dŸŨëø‰/u˛?=ļPmŅ<íOĮ’Įę‘ũyGüü‘=ĸ‹ņƒv€Č•ŽŸŊP/¨…ë dô^ÆĀ,Qû?QÎ4YĶyƒé?RƒĶū_9íĮ”h@L3ėČŌnŌú?Ī?Ü˙!íd‘ėA‡~“Ú,÷fü8qGú<â}Îėi‘Ębô™`ÆgiyhōyiT/ š‚3ĖķbhÖūÂ6čF {.ÅOŲÔî$īÁ ûˆj m˜GmčîûE>5每›å8‚Ēmü­Ō2ÆAœ_MQķø”8ųˇß'_ĶlÉūȂaßäX™Ū)4&†|D3°=†9žÍíƒZԌŲDxI÷™;°ĄÎV‰ŽaûLxĪ%āGÃv˜ƒę/ø >–ˇAäUųØųįu>ųˇOŋæ!ŖĀ_.°‚)a—ejW'{1Ŋ(Ū6CX!*ÖŗŅ­! ƒŦ )ZŦOcĮŒäŖĖ^ŲĒ$ĢŗĐŗ!ēœąĀžÔÔo(;ûø$LÄlā2ĩ’‚TãÅŌų(9Agļãŗ-åŧĪäŋxûdôe|ĄWü§2WČ rŒŸŊIüŪøõė6-’XėhEęŖĒ&‰Āí[øĀØČ4ûcĘ`lęÁ7NøqÅÁqFҘ°ÄĐøÚđƒ°q,)M)ėOJp†prŨПŲ¨Æ!°—Ŧ*Ŧdā‡GZ}æ:n°ĐgÂĪ­å<~”°ę…>Æøi¤ŽšRĘŲjˇnp¯úĻJЃ\nëæYąD É­Bĸč bö‚Úi%™UĢĀÕän$æJŠ=ëIˆŽčŸFU”TŠ?ō@ôCĪî&k›7üLr?#ß9Ō?{؜Į´nöO¤—[ĨīĸáVŦ,iņŸũ?đĸ ~H‹{VôBņŖ1¸¤ÆŲH?NšĨ;Ūåc'øŲÁ‰ŠöKrSņŲŽŋáį†r?qgÅōn^č5Ü5qÜŌ$r[—û2âĮRÆvå ?&qÃÉäķÚ+VŽ|ôwÜÚH˙§tBæˆ%[ 7ü؆°G4’ŪYüØ\āŪRõ.wJĢÁíę3vS7áÚM؆ŸI–ē—q#EįH’˛Œ¸ é\RGjûqs÷4°ZÎsRŸjs#%_Eí’ŗÂÎ`ÆÁēĻŖ|Ę$+.<‰Į>ļ’9ĩÆŧ„č`•hbŋ9>¸dpų‰íbŽÜ¸ĻäĖÕŖK]ŒŸîĨ|Ĩ{ėtËÉŖ¤•#’t:d…ĖĘŨDÎOÎÎ ^<"^P<é\ixŊTMOsW]Î˙QŋW'V,~˙G×?ãNPŸŒ7ė>g[ËŨįF{dlū‹õryûÕŅPd„ūa™ĀûeÉéK˙‘ōčjHōŪq$û0ĒÔ(Û6kŒāØnÄĘô_ßĀYãOSŲđs?˛?.ČÚŌæp”$ŽFÂJQˇËÚë= {Ј*ÂgČ2wƜˆ}ŧĩÂ/UWą+sb Ũy ˆ’Ĩ­>f¸Úą’ÔmøšYŌ7EV67„ëZŨ÷]š3Uœ÷ũĐŨ~ŽíWWąZ_ÂjõŌ ?-īa'„ܲn!~ÖËjüôMSjoŸ4”‚ĻáG͎E)Š•Ö`|ũ­˙fõĨ)GØ ~ÚēUaœĩ…Ë[ûu?˛?0¤FĸãG OÉ~‚öbFpÔÁ÷āu]l?ĶŽņƒāGwiŅBQ jöũđãŦë'+ÄMÚWoiõēø!Ū*ëÛ/4V$ā—⇸bđÃĖūH2åNh˛ž})B~䀄?ÃĖž5.ŊŠ)FÅ,éáũÚ/ŦÄŌÔē†,?ŽlŪ†k =Kí7q„žQ>dū0ŋ˛<ã˛Ĩ7‘%ü v8֚zãĖôģ?0JŽč‰ü4 ŸOÔmˇjM}VĢÃMNTÍX\ã˜ĮЋģ+Ûˇ7ČŨÍ?ßĒssÉ­ŋ6tĀÕč4 ĩ+Tr eîŅÃėązģÂŪØ Q˙ŨËL¯ÛW2ÄiRu@Úėr •ä`0ģĄL0W°¤Å xĢ”0„Qŗ‡~’Yp>2āi¤l¸ŽwƒĘĸÜ~îj˙\x"˛Ä.`ü€}!‰Éŗ3ŽíâŒ]M _¸ęBiŒ!ëĀÅ0 TX‰cŸÄ š‚¤ÚĘø Ļ„Î8ĢFÃpË„†Ÿ^Vž[eD¨™˜Í V$¯“ģÃĪĘŲūŦ./ŨģŽiSYĖdíNã#ŒŽnq¤f‡DŨŌ€Á‡ž‰w†öĘuVÅĨy?DŪPÂuü˜q+ŒÖ~ųAâ1 r*īŧßÅąlø™ä'ø1 ?؃;*x™Ø-ZcoLAX ˇ_d'ü}BŨž‰ ‹ėn!Šhŋ\‹‹ĄŅ`Ēķ%†\˛Fņƒ"fËö~XY’ ?“\€é¸6"Ų*~LЁ¸ CTHôJ(¤zˆ uĨĢÕJp p_‘Šö+‡ Ŋ#>pßOI7°ˆTėåžlƒV~đX) ŦB ~îFNņヰ0ŧ7Ü ļŨg1(’æˇRHöAUQj䟉 'hāģ0`īBęAÉ|$§ˇi%œdõûršnÎ×Í} °ÄÂųÍŪG6üLōëŗ*lC|\%åÍāB>|t߲ág’+ĖĘų¸2ļī›9ÉģøŅĻGdÃĪ$÷3ĢûydÃĪ$~ÖˆŸI6üŦ— ?“løY/~&YZŋķkūönŪ^6üL˛0¸–*q4ú:3šOō-āø ˛ág’˙;vo?ũŌö;9"kLŗ;ē§0ˇPŨųģܑlø™ä?Ųč*âA!—]“ąÄ‘Æ ģZdsvØ0Y’e ÷"×\10:Hų¨žąčc@BqÂâˆJæˆđÕË!Ŋûļ܈ŸINđc°čŋ‰ŽQ|ÃO&Ō b}r)Ûļ.¤5 ŸcķڃÕáÁę`4&EXz.„Î#ƒņSŧĨŲKŦĄg8X UÄû¸WŲđ3É ~BvNâĨŌ],ĸû#LŽņ@Ųl>ÔqÕ¨`u Ā!pŊU¯ü ÂŊhQQ1đÄj|]ØŨūL ‹•LM.T6IFđ3”jbŨ…Rm*áęˆŋĄũ:-ĸí×ÁāįKk<ž~“‹§oõ(āGLÃWŧƇ’øÔđķĩáį ežUÁŽä}A9ë+Ŗ‚‹˙xÔÔŪ´áí@÷ŊåÃGüp˙>öYÛ~5üøfQ 8"ÛV‰ņzN€„0uØ_ōZ0ö?fuN՜Ė6:IENDŽB`‚leptonica-1.86.0/prog/blend-green3.png000066400000000000000000000107321506303110300175010ustar00rootroot00000000000000‰PNG  IHDR?{Ŧ$VŽPLTE  !#+(&&'&(24%3K=A-4NGN3J3-d2/NOLP6XgZb;gU;ckcf4W\B\bAcYEkrK^ˆ8{„Vv“izŽRs¨k“<0˜J8 X?žYA™cF \CĻnM„\Ž˜c‰­S™Ĩk¯†[ĩ–eĢ´uĩÂ}¡xÆÁ~ŠŖœģȂͭ“×ļ¤É֋ĐĐĩÔä”áōæ÷ ÚÚÉåå͏˜UP pHYs × ×%uŌđŌIDATxœí] oã<Ž  æ€út^\‚ŪÆ:ĩrxRv˙˙;’’“NÛéÛ­Ũ´|€6Ž#SJũ”¤EŠ21+¯†Qū(V@ųŖXƒ-ø“ ũB¨oÜIõbŗÃĩƒRŧ ļāOąôë*Õã5ü)ļđKÂURīˆMėņ'úzƒ*˛.fy}d?: 3ĩĸŌ,Šŗ0Ņ%`Ei Ԙ.Ÿ}qÁš”}ē2ųō 2wŽÅ÷$ˆ:Аa!9É; Ĩøl—ąËÕâ°æpŠdHŲόH9#,æDd–"5ļ3ŊÃhĻė™!3d¤qøTĖ@mJŸDJ)đÍ/MVúŖÅ&ü aô-TN˙ūÖŲĀōėSįlU‰N{( ,HÚĪ a´-]ĮA°’Žá@$š‰;3ÚBŸpÖ.aˆ5ņ#WNŊrãŅēŽyĻnGwtŲ‡–tãöā-&PSÂŸŅūŠ=Z‰ŒŅʀYŗĪ:°"„ÆÍírŽÔūmøÕaūwŊ Ā%˙g‖_øÃ1-}ĀÁy8ņ§đ´w€Âüņ!@.|ג“ :o ōËąZ™ŽļøÚ`ū¤ŽyƒŪīY5Œtgg3'ŽÃ‘hļJžųSI–ŧõ€ßK[ų#aļÖŖĐšÃŊŲãPû’.ŲķÕō÷øWŦéWĮüÉ՝•Đ,Âĸ˛d÷Đm¸ĸ_Så)ĨāŌlKÕ?ĄEŪéâå<éÖ7ÎLrŨŅë'?•­“M‘][‰iĐ=–4‘ Ļ™?äē[Įd<&˜–6‹ũĒrĢø ĸīj4„ŧœ[Iū;JÎĢëyzßÍ?“õúiX'Č@ xÁ$jBîõĖ÷"ŪĶ?܊xøĻŒcÕOœŖ!/…ÛKCyîūÔO2ßĀ1,ÚŽŪũ\§›9¤mâÎĻ3¸ēÂ$ģJ#ˇéĪüšŽņG|olâ2›0NŠüa%ĨãAųsÂ6üá0ģQɆ4pĻF –”ŋ§áôttö ÄHĪ4é›ų–’˙‘:ŸŖ‹Éô‰33BōĸĶ´DŸĀ@¤‹ŅžŦen¯3õ fF;$OöËuæŠđ‡Ø8@Š. 8-Rڜø\ĸKå -N,ÎĶwĄ.ã™Fn ü9aūđ´Ôŋ*zIENŊĮœŧŧøyĖ#y”qäģ¤ÚlÎ)ąūņŊđOΏ|ˇfUĨpä&/ԓéá¨ųę€ü"ĩŠ$ÖķEfÉ2ō“gę˜˸k8€$˜ÔÁp—ƒ\XĮMĸqėèķ'ŧiü´e‡=ßS2ž:ņ91ģ8GMV;Ãü÷ Ÿ˙œ}d.Å$öō:tƛōGņåĄų?Š5ØhũŽâ›BųŖXåb 6áļÅsxiĒüøLāš°ŠpObx(ũü0)=;/ÔĶ{l˛~gö2҃.ƒ/JŠÉ2iø'HĀę´$ųūJá! ŽĻåhœŸK :ë÷ØfũW(yž¸Ô%í9×4¨Ņø!õ]U'iˆx)Į˜ũuQĄ|HŸ0Ĩ†æ…?8xĪ‹Ü=J”?^uZĪJŦj0n–+ûâQøŊ›ƒĨØˇÕŠSüaUmmÖ_TūČŧŦ¯ËP=Ėč}i ’mÂQHLB i’ —ņ8öt÷éC >ā ‘&hü ŨŒā‹˙1¸Ė+Ũ9ŅÅUûGœķ@Wš#Tũã INå@ę5Bžšsķ +MŪÛŦŋūÔ ÄQR=kâN­,e=Ÿí¨!W>čų“9ōŨ2>Ė8ŽŪÉu‹ūiÁxĪCô!rü͇b=ĩlņøåūė‰?Cíʖ¨ĄKbūˆ™jŋŪÛ< H7`M|xÄ>-÷‘o1\>gŪäņ|qW_ˆ?Ŧ8čî'.-Eüá†aĄ]ãO>ķ'Ôė#ēŽį†(}¯üylČN‚ļXsø$­/zÎLPzĮåŖXaŌ}ūÔÄŸD„’Į(‰ę‹ũâOF(\|jļ8ķÅÄĻSʙ?RWĘ<æĪ밐NäĸU“Qūŧ 6âįWHŊŸZ Ž¯ŖŖÉYrpûąŗ<(qúķ‡\áQėc‰kÛņž^7Ôĩ(Ÿpē Iy°D&—„åÆRmt‰õŽĀ,YAŦŨ˜?NÁƤö데Ũüá31֕ßP|bŧËüķkÖ|).ŋPŦōGąĘÅ(k üQŦÁųĢ@—ę´Ī°48ĮÅ.ÃS’ŋŦ_ [ŗxāŲæ-|rǍpŋņũ^Æ5NíNÅ{=¨ŋ‘~ô×īūtĄ/Ž-ôÆ[ē.OęđÛŗØ2=ąčĨ­Ú{§'"äŠZÂĶŖ€rų~c™­nŗPø`2á´rČ?āŒŽ}ôûč“ŋ?’Rŋûˇœ¤Ø$ƒ˙!r‘fúÃōn'Ŋí9/ˆ?í'ū ‘K5ķž*Ŗ“ZĐÔlūŽã0ē'ÔĪô yĶĖP¤&4zc“3SĮmfj>HīŗGkęjĀ@æ§Šq—ël´_ÛZđ۞-™#¯uĘ^Xcë|š|6ûA*s´.ûžÍŗ{įsĪcërWüĐ9"\’âß›ø?ÂāčWôG3ÖB Ûv—ņĮĮ$U‚ĢmDȜr6ˆuÍÄņ->AôÂ.&ĸ‰X Ž‘I ”nsÕ?h§<ŲĻ î;úTƒ'ĨęŸÔĪ&I˜ô‹ĢÜplˆ° ļĩā2,Ņķž-“Ø0Î=¤ÍŽø5šB˙ØHwÔq~×|ūČÖ+œ "UĐÖ-VėĖûĒ<ægvLíVžwxi-:ŪX*?īņĮđŽ,ČûĩÔ¯…ĸ§jųÆŸ\ģ<ņ#ū8ņGöt –GĒĖļ˙<Ôå~NcÛ…ËjÔPrb#“luÂU,:)āEnk¨ÛŽžS=dC:Jœ°š&T Į×*?šÕ‡R|lÃų cĩ_šņ§ŗŠņ˜k!)Î? œ#ąMÍ3ÅgĀ&üi‰ŪēPķ•ûš4ãú\\1s ų4A”:9ô;BFßkūØWyvĪĮÂ7­3.V1pfŽÆÎāJ0،¤—Ā@sÆÁXÍ_ũ*0˙ŗ^ÆLf̆اf.ÆyozŽ^šĖėŽŽf¤×ŖˇGëKņæØkĖäë` ũã Y0Ņ@˜ ŒÃ#×#}C|"ū˛mD¤’ƒ9Rû-”žâ3`‹[9š0ĀDlú,ü ¤—ÎüÂS†[8]ŠĪ€MTÁOS—qĖŽœžŒ`Hj;6Uf`[æ‰CĀ~P鍰/ƒ÷4%=¤ätíŗÂ{ō‡Ô“ų>•ĩŋĖ~ô— sõŅ#P\2T˙(ÖĀüĮG@qÉPũŖXŖĨx+ üQŦōGąĘŘ˙č(.ĘŨũRŦōGąjŋk úGąFķš+`ūíŖG ¸dčRŘ~ô— ķâ’ĄüQŦųŋ …ŨėŸ:‹ˆ/–€évŗŅ(Ū[čŸ_ûCÅū1đ°?Ü\īož—P/ŋĨÖģÃúņ(Ū[čŸt¸ßũĸ_øƒûk~9üōaw+ÜAåĪea ũ“RÎûŠë}nļj1Y‡ÔUH÷øƒŧ1XÆåMÅ͎”Ņī7ū`~šáS| ļōŸģũ]Îwׇ}­Į!§ŗđäŽ,æ›ëĩI×ģ=ē9\_×Ī™?yáO:°Ŋ“–W}nlĖLl„öˇų Ļ w|؃Æ=ŪI~íŽņfwã´ŖU3ŨČÛjŋ¨å Š­;jÕԗâĶbĢųÃÅ~e"áfĪzˆM˛ ÍZ ™ōų+z=ėnÕ?būŽoså’„9L;}ûÜxūÜ.ūĪ~ΏŲķŖÕáļņįWcĮaz´ŋiDū7­Åōį“c3ū°Ŋú{å81•Iüœ[âĪí.áūĐ>¯ėŌ4˙gæĪíîŽ- ōį° ČQŲîŌ~—ˆ0‰ Ķ~qŒoIŨ„ ė\ßŪėöŋč•<œ=ņiˇ¯3Cˇt$La˙ģļLԂÄ^ĢũŠņ˙ž˛ĄUâønIENDŽB`‚leptonica-1.86.0/prog/blend-orange.jpg000066400000000000000000000353661506303110300175770ustar00rootroot00000000000000˙Ø˙āJFIFMM˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā{?"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ô*(ĸž`úPĸŠ(ŽëáW’}qžƒQ‰ ˜oļ38´’ä>ÎOšģZ@*”ŦŦRvM}ÍãÉbéqvĘÖrDHĖ|Šā€~ënΎjÔđÂK.—7WrĪ4aeYœūí†~čĮŸå[´SrēĨuk{n›Í‘Ší;rtÛÉëéO–濨jōۉUSF••[>Nb1Î21‘ĪZéŦtÄąšē.'vš}ō,…qģÔaF8Ģ˙č9ŌčcéŌK…;ũļK‚ĸFŽcnåņëŪ°ŦĩČlnÜ‡íBn!™Ũ$OĖ ”gĀëĮÚŌqRĨä%%އ§ŪÜ]IáŠ.Ė¯Ķžā˜đĒ=ņÖ´ÛįĘE>f2KtQęk.–6đŽÉ䞟_´ɊŪÕw}įrycękքŽøĢĨØŅĩ‚`ō6_ī¸éô¨¸ōÉ#5ÍŨøŽÚȔy ~栚įo|Wwvøĩ,ųiŪ¯ U-ąč‘Ū" db­-ō€~ĩä˙ÛēÄMēUÜq‚?Jwü%7x¤wĒS}Îņ nzģę1¨û՟s­Å,\:לO(ųĻ"ŠŗĄĢTĘSčŒĨKdt×:íÅۑ •Œw=ęĄ/)Ũ3†=—°˙Ŗˇ3’#× Ģą@Į™˜)ô‹ŒŪៈÅÎJײ˛Ü21V œZÖ^(×­° ž™Ô ŋŧøõRHmԍĮŪ§%@ĀĀĻŠw<õ^Pø­/‰$ŋnŠĻY\z¸?Žk&{- á÷%´–Ŧ¸Į—4ÂE1ąëTŠÛcHæU–í?Tg]č1HK[^/ŌD#õĨĶ´ˆ!m÷.Į@9mˆõ¨ˆˇw \e(ģîtĮ4‹øãoCYĸ‚xv¸Įjäĩm"X\ē)+íZ­ģä 3(A€?ΝöģˆŅˇļõ>ŧ{æˇuc?‰Tq4Ļí k؜væH ­D\1âˇîÖÚ÷$l ­kĻE%Ü1==)$›Ņ7gģQEāøQEU 6æitį–á•äŽYã%WnBHę8ú(Ģų¨RÚ8­ä†!ą]$üÎʼnüؚiĢXM;Üŗ^”i w%œļĸkGžŨË+œˆËāŽĮ:psŽ•au°$&{WŠØM,y`rŅī$íãߏnôë_XÁbļΒJ>ÍösēW )\6ĐX„Īû8Ģŋ`ļڋåeRg™A$üīģq÷Îöã§5Ŗtú#$§Õ™Vū'ļX˜ãDuvl˛¨SŲX–^3~*YuÉ­šhįĶ%GämD•XIæÉåŒ:šÅZF˛HäË‘ãtōĘË;¸UôPÄíč:c ô^YËŠžnų^$’Í$ŒËÂå›#žéœĶŊ;ėˇ u™b–;WĶä7*Æ"YŒ2;Ũéûļŋ‚į_Îxš! ‘."áŽđ¨SĶëĪyĮ5fmŌCQåĪįģ´ÎŌ9ōŨÎ[pÆėŽ{{ÔãH°yfÃæÉy™‹c$ą9'É9ĸôû§Üf—ĢĮŠ4Č$‘'k‡Rq‚;đr)÷7Ō%Ųĩĩĩk‰V1+áŠ$ORvļˇ$RÅĻÃ<š.~øv/;ģ63€Kvķœęi×Zuĩ܋,‚U‘Wnøfx˜¯Ą*FGą¨ŧ9ŧŠ´­æEũ¨ĸ)Ũ ‘L7@ČÄg.#=¸ãĖ‘Ēɨ]Tģ9-ÚãË(Cp…௧éVŽ“bͤŪS›U•‚Ÿt•i#ŽÃĐTÍcn֓ژ˙s>˙1wwįw=ŗ“Nđė—rœģËrąĩ›ŦMq%˛Ė]~gMÜãŽĶ°ķëÛŊAaŦ^Ü[ĸ:īō*JĄU7˛¯'§ØäŠĶ[uúššuųʼn?øķ~u čöR*.ÉS``)Ū6ÐJHĪ84sC°Z]ÂKŠ.tËkËvČđČw?tYwį=0¤ŸÂĢ[kļ˛I;Or‘¨ÃFŒ¤a8ų‰ĮSšN;\€Mh=ĨģŲ‹CûBykĀÚ?‡ŽÜcœR%”1ßÉzžgŸ"beb¸Rp?ÜúМmfŠ^é™ÉŦL×­mon×nī#! ¨Ēˆ"<žųķ?ÉŠaÖZņ[n"؎įzĄ”8P åļ˛žÃžĩv;+xŽÍŌG‰Žüļãü[7q˙l×ōĒߨzxHŅc•#XļĮ<ˆ`žn8į4īÁiw ´Õ§k*{fōŪî[t˜Tą_—Ž0¸Ī¯nõ­Ē_Y^ȑB­ ÃŒY‰”)PHëZbÆØ<™§_˜đį9?øņãŪ‰ėmîdķ%saFw°aú€i)GšöYZ×3ĨÖĖfæ'ˇōÄņŒ>ā"2Ķõ÷ĨŋÕnlŦææŅ­%‡.]dUVw`ž™õzM6Îi^Y`ÎI`ĐŲM‡#§Ũ8¨ŖŅėĐclŌ|ČÃ͸’Lm`ˍĖp2ĀëŽiŠCMik¨ëĢémtôškF2<‰Ãŧg.áFOAÔ×ņĒ?ÛSĮ5Ä+i%ɈË#0e@¨ŦF=Īz÷Åi qn–â3å#ŦˆģŽĢôĮNŨ(]6ŅgX°Ķ+,‡qä1$÷õ&’qKT6Ĩ}Fã]1Å=ÄRĪkåĒr@<Ô Ã'ëŒÕËņ{%ŌyF3Ļ2c‚FHę3ŒPAŦÛ¯}ĸá‚Ü´r…âōB€;8RpŖ’¤ĀcI4Ø#ĻFœ;¸w&fbØÎ’p ą8åÉm7yīŽÃnoeKŗkmj×ŦbY>pT’'Š%[nH⠛Y1yō}ŠSojÚd. Į• xĪÍĩXƒôÍZēĶ­¯%YdŦvī†g‰Šú¤d{‰ô{$aa÷AE•Õorƒĩ°ƒĐzRNFÔē&ņAˇØōÍ,q+ĘļŗØg äō=ņ;ę~v‘í°)æ\CĀ3,l=;žGÖ§}2ÖHR=˛ GgVŽWF‰-ķ)ž™ĮåR}ŠÜÚĮlP˜Ŗdu‰;•ƒNrNā={Ņxid+K[ŗEu ĩ´ –…åˇ&@waK Ārš÷÷Áâ§Ō¯5 o#‚í§ØŖ™œ0Évfėė?Jš‘gí‰.ÖCFŲOPĒNđŦGk R‰0â5‹9?ur@ũM7([D 3ŊÛ1×^–1pĸŌKŗ‰Ĩ’@ʁQe‘0sˆøõîEn† ĄČ# Õ5Ķ,Õn‹áY$ųĖ~9‘ãWB¨P0ĀŠ“‹Ø¸Š-ÅŦpá`úŸéZõ¯’3ËqųSĨņŖ—ūī/—æŒÅßyAü)Mē;tĻŽ01SĻG5ØãsæŦ˜‹e&xîi§;?îöķØšļŒäķRÚF.æÚwaHÎ+ LÕ*nIPÃÆŦÔLŲl%…7°Ép3QĒĨ[äaü,8üĢŽe 0„T^§—ĢYũĒxĖ;ļ0Ėųë\8|s”šfŽšØN<Đ×Č䤹3M–e9=įSE§Ēddž*>nø­E‚2\œƒŒw˙>”Ē’ÖđFūoņ+ō\•ßî­Ī;ŲÉėg2džĸucÂÖâč7m •Ū5ë÷›$˙Ÿ­gĮáĀĪ|öĸœá=bîEJ5!ņ+ԓ–?JW ĘŦ0Á!y´Ü{ÖĘF\ļÜÎŊÔ`ŗ€ų¤!ÎYˆûŪ•Éę"ŋšq—m#EüR8۟ĻkļšŲ']ށąYĶi)œĄ?BkXJČęynUŒ :ĘĘSE.ۓ°†ũEnGaáč“1Cšˆë*ą˙ ˆé뇅$ûQöWKĨ =#ûJ˛Z¤Z Ąˆ€6*\cūtĶĨéŒ Í”ģđXäcŪĒ‹vÎ _ŌÉ´ŊWe-;—Öĸt”UášTs JĸU~Ÿđ‰čŠ"•†vÎb3V×BŅėģ@Pygč;֙դDˆ[ŒõŠ °kŲ|˒e#ĸ‘Ā?OZåJ‘W›ąéÂĨ*¯–ššĘ*ŗ*¤đP*Pé]ËiqēâKq‘Ķr ĘģĐŖ2ĸ[ OÍÎ@Ņ }=ĨĄæÖËjīŸās̜tÍ8cŌē–Ņ´äD†SåČÜ+s’kPĶ$°œFÎXeHëqZŌÅS¨ėˇ918´#Ī-Œũž†˜c'ŊM°Ōm5ŊĪ=˛ŗFiĻ3VŠM´› •6ŽYãļæXăēÁõjy)žŽzë\ŨÍøší æ*xũôŠZŊÜ'*ŠOcUĨŌnÍļ­ëŋ‘æ™ũœ“ĮĨä3îįc~F˛XúŒ’A­Oĸšī´QExgēQE… ’Ž—ÃÜÉļÖö0ŗ’ĪÉ"ãīē=p;ÖíGäE´/”›Cų˜Ú1ģ;ˇ}sÎ}jŖ+ Jæ~•w,ķŨCqé:°wߍŠW°ĀĪ$pj8uÉĄûZ›A4ˆ’|ĖŽî3œĘō¸į“ŠŌŽÎÚåž+hcš^d‘#ŸęG'ņĻ­ĸ]ĩÚÚŽ-Á˜FŸø3Oš7؞Y[s&÷^š h%mØË fG!WĖ•dŽØf?…ZĩõŸŸ‚ŲÍąGžtVؑ˛šÉLäPgā0lv­Ōl…-ĸ…$•%EŽöG 7qĪ#ŸbiãKĶÄ °ĩĢų‹…v†ūđÆ}ꚥm‰å÷ Õu 4ælJâ`ŅÄ ÆgãbŸcķsÛžukģö˛{5X•Ž„$9?{ɑ¤ ŽĄN?ŧ„dW@ȝĘpČέ0Cˈ“åbëōŽį${œž}ÍJ”RÛQ¸ÉŊÎr÷Qž–ÖčĮ*ÃsŠeÜS)6Ė…ČÆ@õã8æŦ˙m^ũŊ“ė ÛĨČļc°‚N@-¸ļ'!pr1Ī5˛mmÎėÛÄwäääįęy¤6Vv.ÚÖrÆ1ŧ÷ąšŽxöIw3īĩ;‹[ËÅU‡ČļļŠb[9%ŨÔķœgņ¤ģÔîÆ¤ļV‹o–¸HL’ä…ĖO!8dü‹ĮkPÃ3ŗF„ē„rT|Ę3€}G'sQÁeilˆ–ö°DˆÅÕcŒ(V#€ŒûŌR`q—s;OÔīgšÛí1ÛŦsų¨{‰VŒāœž āņŽ8ëEÎĄ5ŊíáB§k[ÛÆ˛1ŦÄåũôžã5ǰDģvÅØI\('Ž>ĩ˛…§¸‘Ķx¸c’7Ą žŪû°~‚ŽhŪöūޞļæúĻ ē„V†[1,WŠ ufT}đČ~eÉ į.y sĪ“TŊ–ëû=>ʡK+ŖNCČUFásßŧ.xÚĮ' ēVœ°y+§Úēė.Ū„tĮĄ?™§6bö‹hÖVÍl§"”ũÜb›œ{ F]ˏõŲÖöWŽ%kkW”a‰Wdy°{¯îԏfĢVR]6ŗ~ŗJĻHŠF‚„ƒžr}=*ԖsDļ–ōÕ‰O—ūīt*pŠŽÎCļ70œtɤåˆj2ŌėįŖš1\ʡķÉe-™šYÖAûĖÉ@ ûĀÎsėré ÔO´€\˙¤ŗŊÄŅÍxc/ä)dÉéĮŊlGag HŅÚ[Ą‘ƒšX”`r 㓞i×6v׊Ģum ę§r‰cõ§ÎŽŽÅ 5 ŪËI{@o™T5ÎIE1<™ OĘ;÷ŦëÍcPūÆš–E†-ö÷H†ےH•žlžÄŠ urkĨhҊEb‡r>éÁœ?Qĩ­ģĮåĩŧLŸ7ĘPķgwų9õÍ%8Ž‚p“ęAa#ĩÎŖŗ2Ãuĩ 9Ā1ŖãķcWj{dˇí,L’4ŒÍԓū{ST7ކ‘VAERQEQE (ĸŠQE‡â'ؖßī7ô­ĘįüP@KAžŦßŌ´ĨņŖƒ3vÂÉú~hĖYKtčOÆŌ7tĒ1ž0=*`Ãģ“^ĨŅ"7ŊKg$–÷ ĻXH0@öäZ¯ioįžI šëŪē;X⁍:÷Ú2kĪÆbŠÆ.žīō=|’jĻËķisžâhŲvŦj¸ ¤uĪøU‘ fÚ$öFM÷wbc å7ČĮŋ#ņĢŅĮŦ`åT`dg?ã^“ŊŅí+XĻmŅnÄÛBʇ xôüz՘G˜<­ČFičâfÜĘsĐS˜Á]ŧ†ëĮĩZĢ&ŌlĪŲÅ^ČÎÕÃ!Dw[nÎŪ¯ĶüãŪŗncF€Ī 3Œrk^îĖ]I†ÆĀsīœ…P¸°œąEcŽ9'ŊŦ6"ŒaË{3ĘÅŅ­)ļ•Ņ‚T–Ī@ ({VŪŸ%ŧe‘ÖXē^ĮĐŅgĻ­ė/ĩŠL§ŋC]´y¯Ąį}ZĢ“…ĩ3pŊ?•#EžœJŸÉe,¤è=!s×ÚĩąĪ{hʍįi<zTũ[“Í<"‘ÁĮ×ĨR2–å#;H‘ `JņZ!nžĸĄxÔ UŲ›ļä^ZÄņʀĘĒC-ˇ8÷Žž×Tą–0FØąØđkš ƒĮáĶ­s× Ē´Ų׆Įē ¨­Í{ŨeØlĩās—#¯ŌącžæŪđ\G!“ķŖCO$`Žs@RzU4ylELuiÍJöˇcZãZ2"ˆ­‚cĄsœ~˛îĻ’éƒM&âŊ1M9Ō?ēt!OXĸ+ã*ÖV“Đ„ Å7`ôŠąÅ4ķ[OB‚ĢÜJĻHËvbæUˇssŸē=k—ÕõF‡äŒ†ģ—îŽĘ=OˇĨˇdoB“¨Č5mAˆÖĖí÷Ø˙Ŗol&Ĩ>ÖĖÆ„œ´ŒrĖO$ûՃŅŌļVО=ęTQS û~U1›psÎƒĒĮģQEâđQEW= G“¤ˇú.Ą9ĖÎ|éQPd÷ČĐŌd@9#ƒíTĨbe˜Ú-é–ūúÎ_)Žb`ķ:NîШ)=ןNsŌēc ROÎ3"#*0'îļ öįh§<Š@ō*—m¨ą¸āœS€OáRĻ’JĀâÛnį5{ĢßZ?Ųžå8æ’7ģsyÂÆĘšo”ŧöįgœu›“fîūßO&ŲeŒ”\1,03Ô`)ÚŧüũzgĻÍF&CH%R‹Ė‚AÉö įéO[áG}ÎV=zåāy%Ôā‚Uĩ†X h†gvŒ1­’q…ägÜT˙Û7"ęäø–â;‘ZyAēE;r=IäüÁŽsƒ]¸ˇg–{wG2]‘÷@~˜§Å pyžZíķģrNXõ4ÜãØ%ÜädÖ/,ŪHVx ˆKpņŧŒƒÍ´J6üĮ^Ÿ˜sŌĩĩˋ¨Ŧ,§† / ‘•Ũ‡Ō°׿VǞ6:UBÖˇwqžôy­K2&vš *3ÃG7Ŋrŧm%6­°ũœ’Ü͸ÕRķPCg$WvŠ$% dd"b˸wĀN;gŪŖMbėųŽ-õ/.Åš‘í!ûĻã¨r“Üœv­ī=ũ¨ķÜö—öŊŒģ™šŖ=ô— ķÅq+*:9Üs•%>^ĀúŒķÚĢ Į‚2^%œSŨŨyˇrB•‘•S-Ā$§û¸ęEn-Ō2$†XĖoˇkîmÄÁzæ’ŗ[[Ë$n‰y$‘ˇü ä—$įŽsŸNkĒhÔ÷ĸ‰qiZæfw}{ –e0ĮnŦģcÚ%˞¨“ž@+œ{ÔPęąX^Ę.ϊŪÕ¤šųœ…Õ×'ž qßÕžā9Ą œ6đۏ˛ļč¤&PŪa}ێs¸“œæ¯™k rŊ59kŊFö}+Tĩšģ qũ”f)LÄDJX?ubÅģ`ƒÆ5ģĒŨIe ˛›ĩ‚7“ËšîE_m'?ŨOûŠĶæŠĶÕõ9+MQƒĖV†i.e&øĒ…bĢUžQI÷ÚqV[]ž9¤š–(d{=ö›—o(iTI DBō~a]&OŠŖ&›ŠĐ$ēœŦz”–÷—Čš„_h[ŨŠ`Pn”šĮņw8#ŽsƒUßXģŗQ O5ŅädkųŌ ŋ1ä…įæę8ŽË'֎}hö‹°Ŋ›îdęBybŌØČÖō¨ŒŠ˜<r9™g{¨Øé˛#‹Ŗ%Œ˛GĖa ÉČ<úž˜é]M”ė­bœ.īs AÔŽ/Ž&î!š‰P1‘kĶäãĮ‘ŽųĻÚjīvęW‘$Lī$QC†MŠŽŨ˙\ßÎhį֎tŪÁČíšËG¨kZ}ĄŽR9Z!…ā/(@ûģđ_ tĢi=ÁÔ­á–o5 Ô3hRčmLœĮR?![ÕAÍĖšxŗ°äņžŧžū´{EØ\š-QYšaøI‡VŽŪ&žŽÖuf0ųœ^įŒ}+“…8sHĶ ŽĨVn ëšž“ī•QHã–ųx éV—ĢÆÜc‘ŌšëŊnÖÁJƌō“Ÿ*Ī× Ž(ĐõˇĪåĖ’C9åbôõČā×?ÕĒ[Ÿ•ØčxĒ\ܗW7 Šaxnq͚Vģ†Ũâ]„ŨqĀĻ^ÂŗmX‘DÃæÜNH÷&ĒÉn÷î’ņ‚‚ũę.Ŗ+#tĶW‘° ŊČiAÜ0è?…fŽžļwuģŸ%ŽJz}+Mi´;ؖtdŠG y,~•ĶũĨ.ĄY#䞸īøWeۅŸü9Í5k˜ÚšŽRH›æqķ }â+2UmÃ'-ߎ’m"Ũŗ#Ë.ūŋ/Īļ+A†eepšãpÁ"Ŋl5HĘ Õ?ŽĨ(MĪŖ6,´Û7ŌĐ4jÅÆY¯ˇĨcŨi¯g!*ICŅąRAy=¨„20}*ĖÚÄ>NbßyJđĨsŠWĨSUtÍĨ,5j[ō´c2õČæ toN*ĮŪPA#ëM ÷5ęXđe4ĘøÂķŠh^8éSė” ÷94ėR—ž´“GįPÍ2CwíĐzš&˜F…Ÿ ž+žÕu%‚&žcėˆ;ŸAFú#zTÜŲ¯Ģ}|Įųæ~#=úÂą-arÍs1/4‡$šX žyåŌ†vōėĩ\U,r!Z¤ĸŦ{ØzŠÂ īČŠ01ŒqBņëKɤwÅY•)6zT˜¤ÁëŠ Höę(ĸŧcÛ (ĸ€"œĖ ÛĒ4ÛO–$bˇl đŦ­ŌōÔbŋM­%Æī1&f.LišÚ¸Î1͐1ŠÚĸŠJÉĸ\nĶ9+-N×E nnŌXôÛT$v`ŦI2ā1ûā`Û PFĸļ:I~ņŦˆŅD#^Cĩ˛ģ˜™ˇ“ō‚;‚k­ĸ¯Úž¨d–‰˜֗P\-ÂĩĐgÔ%Ũc°DKN¸;ēû㊟Uĩ’[ˇxá/>å7ĪĖLxSƒ[TûG{•Č­cœ’ÚūÎ?./¤‰Ą…Ļ;‹8!°û3÷I^ˎœ ŌY ŖĒ'”5d.P§Úƒä/“.~˙͍Û~÷9ĮlWIA§í4Ø^ĪUЇpeūԟíÚ[ˇ¯Ų>ËģËÛĩsœ|™Ũģ>glbĢÅgyl‚XÍŅyo/‘–;dĖČBô0BŠŨךé(ÍĶKŲŨÜã|R5Mâæ+v%›ËŽRÆM‘Ÿ,†Į ŽŲÎ{V”S^Z^[Íz×R…ŗ‘•c*¤–ĀĘ1'æ§ĐQMÕŋA*vؘúčœ%´ļâådÅqæqвũŪšÉųxÁŦĆúîIŽí-Zbe0Ąžč’˜į<ÄN9Úxí]CFä“MōWÔוHļŖ¯Ÿüũšn÷9ģÁvcˇû#j+cžO3ÎYŒ™Âėû¤Kˇīõį8Ī }ĩR?íԘũœMǞŸ7sgxRyÛŗīüŊs]/’žĻ%}MLĨ]Ģr/ŋūâökš€Öo?…ô›fŽu–?ąoDvF]¯ėí đ2}ąžÕÖWöúl˛[›Ã4Ķ^ĢĮ–*„Ė„/AķÁęwuæēu‰U˛ §×E •T_´ZÜR¤žÆv÷ŠvnŒˇŒ˙n #.Û'üŊ1Ôį¯ž*Ņ :S*G¤W“‚š`ˆŽŋx;~WMMŲ¨fÆæ“Ž™­ŊĻ–°ŊžˇEVfEPEPEPEPEPEP^yņbNĶĨUĘG#î9é1Į~•čuåߨ­žŽA#÷˛˙%­đßÅV0ÄģRgœÆ­<‹QČō1ĀUŒ’J-īž9•mäs!8 ĒI'éYbg!ÛķĻŦ†7ŒU”äyėrßsĮįėwÚGo4ŌI ęŦ?*Ûē×ü ¯DNĸíĻŪ‘Ÿ28”ūkĘ>ß8?ëj9ŽdÃĘåØ Ŗ=‡ĨdđąnûzíÚV;“ŦÛéĶõ´ŧˇė<ŠĮŅ”V֛ã.õZÖI^-ß3„FÃtĪlúW•Į6 ?G;50=C rÃÅÅķkcštĄQífûh{*xÃļąû`DÎ8…úū Z0xļÂÅÅļgY”ĩJ’:Ž W‘ßœir‘ÕXÖēuË†OXãTü€ÍRš”,úŠŽŸ4[ĶĐô iŗZÜŨ]ĩX[t…9¸Į'ōŦiž&éw—"Ū,PŖ|ã“s{œ/æ^(´‘%Šān17ĘG`úõŠŒsŌŗ†[‡ˇ2Lë|Ō÷\™í‡‹t‹ī&YõAŒ|…U‰ë×}Ēõˇ,mI%ÜNŊN!‘ū‚s^&„í'#§ĩ[É*ŒœņŠŠaáĘŖmÖ.\Ęrģô˙#ŨcøĨáļåīöž˜6ōäĩ›Ē|AđíĨWQų‘īšņ‚ĀTsd!ĪZŠxJqš’šĨl,jSp“‡ųŅgâm"ũwZŪyŠ3å8ūbļ!WēÄģ÷ųזxJ4õnrīšõŨß1§&ģĄJ2•"Ym4ˇ‡ų ũ…Š0ĘÚä×E˙CĄęJŧÚđ?Û_ņŽŌŨJF9’.æ øã5ŋÕŖÜÃû6—wø‘Å6‡¨§?eÆéĸ˙5t]EĪßøú˙uˇí˛>Ct?…IyKšÖĢÄ?ŗiw‡ųdš>ĄĖ–øÔaš` Ŝôų‡ø×Oqæ#…éŽjŖáAėŖęņėÚ]ßáūG/um5¤BYŖ*Ĩ‚ |Ēp$͆›xėT@Iī†_ņ­™öÜj‚=ĀEh7ģļGÉüjWŸ#˄mNíÜŅõxwėÚ]ßáūG{ĨjÎįuĄ;~ę P˙ėÕί…õËËļēŊ͜m8Š#"•AøMz˛¤k˙-tĄĸßūŽDo§…F+cĒ–ļ<Íŧ;ĢČøûöŅūtķá­^!“fükĐ_pøíĐÔBp€Žwü¨ŖØÄčNĮœŊŌē ûņŦÛËû=>ãČēœG&ĐÛv–Ā?@k ņ>ϚLw2¸ą(žŦyĮë^Kss-ŨĖ—ļé$9cQėŅŖ›;#Žé]އũûđ¤ۚĖn×'ûĘĘ?21\M(§ėŊŖ>˛ĸŠ+įĪ  (ĸ€ *™ZŪÖi–&•ŖFaõrp=Íd~ãí—VkώŸo•Áq‚8暋cIŊÚ+;GÕ#Õ, ›|"w‰d’$pJgÔur˜.7yE.ÆØáļŸCŠhiŲ’ŅYkĢ=ÍõÍĨēĖÖ¸ŧ’ųh˙!X“ëÅXļžY,÷H-ģ!IpCëÆsŒŠv`ĶEĘ* ¯-mÉÜÃqHŽ™æ–;˜%‘ãŠxĶīǏ%~ŖĩM‚ĖšŠ† ˆ.T´G*ƒ‚cpĀN+ũ™īüËJX2 Ų$S€Ũ騡°$ŪĮAEeØęæî˙PˇxŌ4´1â@ųŽģ9b¯›ĢqHgˆFį ÅÆûô4Đ4Ņ-3Eq–RXĪGF â*J@QE (ĸ…Q@‚Š( Š( Š( Š( Š( Š( Š( ĩyWÆÖÛcŖcūzËü–ŊWĩyOÆĪøņŅŋëŦŋÉk§ ühœøŋáHņũįd)(í^Ųá?ËVũëØÛßëRũŽį ßg“ 2ĶȤx%Ž,ŧ. ŧAÅCŗ!ÅI§ļŨV?v"˜(ˇ;u8ûb‡ŗšØÚB“ɲA”R‡Žqøœ Ų•ž~õGO‡rąĮŪl~“üÅY”üæŧŲ;ŗ˛!q w–¯o(Ę8ü­qwŲ]œgtúŠíTâĢŨÃĘí‘sއ¸­!7mns1€@íëV<°ˆ‚>ĩeôɐf˜¸ëųTh‘öH¸oqS+ŊޏJ-jWd w ŒG%Ėé `ŗ SŽdf#9Ÿ§Lë–ežîüĮŠŌšŲ™U•“=#Aŗˆ-Ôg`Į­z†¨Mߕpz4xšųMz–˛ zWEÔáĒõąĐ+œmD¨îĸ,Æéŧg;Î)åˆ^?­{9XvŽYŋJé1([ŧ…šiääœôĪĐØüķK=Н|ĩĘ}jA-ûĀTr‘Ž>¸Ļm×ÉäöĮįĮõ§¤ÄŖē.ōŖå_SUuyöŏųi2 ÷Æ[˙eŠėŖ1D šīÚĻāSĩŌĻL™ĨųŨ‹šë–=MiĮi qøZ°€(ûŦĮ×­ŋ@TûÔṲ̈ƒ–ÜžŧéTĨAČz8ę>ĩtģDĖqŪŠ_Må‚TåHåHĸábĨÖđ›•ÉÛОĸą/o~S‘‡zęcŦrŦ¸Vô>•æž5ņJ@^ÎÎLܰÃ2˙Ë0¯˙Ž“`ŽgÆĶjšÃ }ŅBvŒ w?ŌšíÔÚ)XMŽŨJZš) æ\QEķgŌ…Q@sĻÂükڕØļ›a Ŋ\äɆē*)§a§c´đũü>By1žŪÎIQĮÃqԍix{MžÍwŨZy3ˆ´o…}yí[ÔU9ļS›kSœKģĶõIĸ‰Ž-/›ÍũĖŪ\ą?~r8>ĮđŦųômnmÚÖdŽâ᠝'’YC¸fû¸, ã͍ë]•Ëp$e,Ģ܀@'˙>ŽvMœ„ú%õËÆōŲÆĖ4Ļĩ;¤RD§Ąũ:ûĶG‡¯ˆTŽāŨ¤ũŨ\Ŧāäã¨8Æzķ]0ʂq aæ.žÆQOÚ0ö†Fƒa5°–k‹O"âDDũŖĖß´``€1øÕX4Y'Ö5I/ísivņ獛ƒ°c 䏿ēJ1SĖ÷3ģg1qĻęBīYž X[íR@Ņ,Œ¤ņĐ23ÅUMP1[ŊŦl"Õ~Ô3"bŨ’:ĪĻá]\ėjv1ô ôôŋŽh–4–ōIĸ Ā€Œ ˜ÅlQECww%ģģ…S$•"hðS#l@{œČBE1å%Ž&l<™Ú=q֟@ÉĻŽŪ '™‚G—v=$ŅŠ2ŗFۂŗ!ĮbüÅ ĸŠŽ)cKDۀfRG¨$ųƒ@QL†hî ŽxX€ (ĻcYŌĀHęÎĢ܅ ˙/į@ĸŠ€ŨĀ-īĖBĢ1~ĀŋČŅ`š=WvķČŅÅ(w\äØb§˙R? ž†Ŧ ĻS<čĖæßŧ ŋoļqŸŌŸ@Q@ywÆteŖäãËü–ŊF¸‰újęVēb™v’L{ä-o†—-TŲĪ‹ūû4ķĶôĨû2ųh?*čfđ´ę †E|v$TqøWR#úõ¯]UsÃąēâÚĨ~î>YČīÜ”ÛØZKR¤ŸŧZløw­ Ŋ:įFĶ<ˑ‘p6Šž~ĩ‡qrˇA hßĀ>ĀvĨĖų‘|ĘÖ"Š2/áÍSD7é´ä§&ˇ´í1ĩßÉrŌ ËFÎ=zō* ßjowŠŌVŧŒj”Ō•›&ĮkĻ@E¸r¤’§×ąūUŌl—ë[RD-â†5û‹ úķYˇđą*øâšš=۝)ęRŠĪ5.0*ûÜÖf„ĐŽW '>ŧŠĖņ ˛Ébn$|“ę+D  e?ĨAywP<IF4EÚIƒ9.ãGS')–=ŊéÚ¤đļĨ+ŲJ$‰yr)Ÿ|• Ų4mnØ$gÔv­5Ō-ãŗI~Ô&Ø§Ųâ\qÅw§ą‹Sžį§øæKŨŪyŽįƉęEzϘÁ@ĀžkËūhē–›(žQlĀÃûÃԚôû1§ĩia&k;árzVmÄŤčBŽôۆf}ÁŽGjŦĖį’ÜúZXFR['# ÍAq&ÕÂôĨ$ÆzUIߡ­6#>ņMƧa聿n›~U°“Ck4ŒA–c\ÜēÅ•ĻŠ1¸¯ˆ‘ā_BxÎYŋJ’yÚ  ē%;”úúĘŗœ”UŲp‹“˛5gņL1Ũ[I"Žį Ÿ <ūxĢ:~ģgĒīHƒE:Œ´2 dzú~Fš+—TʃX˛j cr—°ßŨõĮâ+•WwÔėxhōéščˇsaŗŽÚÃÚąuÄQą'$ĖSŽĨ՚\Fû’E rČ˙>ÕÍkzĒZÃæNáUFâ`˙\V휉Ū1ņ\ZMŦ6Ņ2鑈Lũܞ§ÛŠō)&yĨyebÎäŗ1îMmjŗę:ŗ]yáLšrN"ŗīJĪ-/’ßžųKãnNį>ŖÚ’`ŅOpŖp­ķÍÁ|A•9b~Téõíې žĪĖ„;ŠÆō}Oˇj|ÂąK#܊Öe”=É-nÛÁ]§Ų}OŌŖ–ōĄ #Ã)`¨aĪņc‘øŌæSęz(ĸžtú0ĸŠ(ĸŠ(OŽãM“^¸dÄKuįÃaå"œ|ÜĘĮœu­Ņų{RŅW9sj(ÆÆ&š§\_\ÚųJūX]˛2I°€gˇcÎAû¨ũ=>•=ŊÍŊļ§on|€Î~ÆXî IÎ9ã~î+H“ķũÜŌ˙Lcķ*ŽÜ¤ōjärãOŊ3æĘÆęÉžÅ4nōŨ))´đĖsÃ|äÍ>=2y/e–ÖÂ{[oŨ§VĖĄÃ›ƒ€ î3]7d÷Î*k=*Wa*I˜XŨo5å¤×k ’Iíâ™FÉXŠ^ŦĄ‚¨*xÆqÎEX4KÉ,ĨûLS‰’ČŦ nK.ųH9–§Ė}~ĩՁ•ˆ˙yöŸĄܝš˙dŌjցėĶf"ÚĪũ Ō]XÜO1™Z;”¸ ‘§cp#äC{ä⭅ŽĨkŠ ‹‘91´<Ę.aÉ=FҌ~}&pÄvų\Ō‚Lj{•ņÅ%WM‡ėõ(jqĪseHedŪ¯=ēČŨ0ršČŠ#8 žk=ėÜŦiwFÉZMÖhRŲ!vļ7íÚ0˙.īâéŅí0ôĪōĻöR?\*šŅ •=Î^MökYšU˜Ė–NļÃí)!w( Ī,ĒPn>ü͝ô‰Ōä-Ŋ´ķڇ‚FE¸Ã34HrXrA<ŒūuŌBŸQ“ųŠs€€Ī\uühö¯pöKc–ŸMÔ$ŗšKh'ˇŠDœC ˜nt`C28öč%Ôt›´ybĶÖAe˜]ã¸Čz Î?é‘9#8=yĸåcč ­âiûW¸{%ą†–‡ÂēĢ,†iĸ™a‰Čw&ũæž~ņÆ{t5…×ÚŨY\]ÂĪ7”‘\11šF rÃĒ”Á+ƒĶ5Ņ‘Ã{2Ī­.ŅĪāzũ?ÄŌöŒ^͝ŒZ„šŧqÃ4ŋlĶm‘gŽ#m˜bŲ ÷ ÔæÆņf•ŽlŽnĐ´ÆŠā'”Æy1Ë eZ<’0F~‰9›gđüƒķ#4ĒwîgŽjF%Mū‹aygqf%ˇ”*ØG¯#ŠTuES Ķ9Č+Ôdy‹R°ģ–kœY\ĪpķŖCr—Q#~\n`¯~:`Üû˙CIĖ9öũqKÚ;ܯf­c:EėPų–…ãž–{­ō´¤íF˜û‘€ŪQ?:“N˛’=nĶMš´-%ĖĶĢîvhČā3dáN[ŋzŪ?yŊõÍōŲą#?Ž(ö‡ŗHÄkIĩ$yėn.§V†å.¤iĮÜÆ@wžxĨ&‹y’ÂÖ9EܰŨ$ŸžëšX äãīmĮ§ˇ5ÔŅIUh4ÎVãKÕœFŽ"iŲ2!žv‡Pņ“’28ö§Ã§ßÆ,œÁpå.K,NĘŠdĻr„‚0Åp[ŠÁĀéč§í*hÄÕ4û‹ŨN,†×÷~fÉvđÉ{ŒúæĨK;¸ô{û[rb´ĸԗû ũÜqÉãĶđ­j*yŨŦW"ŊĖ-6ŌHĩŸ:=>æÎÛėˌ&\3îSœnp=ëvŠ)Iķ;ąÆ)+q@ōtÖ2F˜y>ûc< íëÍ~.;-ž•†#2KĶčĩŽ^ĸG>/ø2ū眘ƒp?é6äú EhÛūėŠYbáįĸō:á Žߝ9f—ūz7į^ŖŖ~§€æģ^Ą§KŠG,S2”|a„‹Æ:wŽ;QŌŽô[…YžhßîH¤}¸čjÔwSŽ’eÄōMk"HÁ”ã‚i¸ģ_A{HĄ–W/Šqė•A˙jë˙á#Šũ,ŌFXZkˆíæMÜŽãÉėã<מÚģČ8âĩíĀ7ļųíšP2;n§:Q•›6‹=Rņ“Ē` (ĩXš˛Vļ¨éQ°Ú.;Š8GáNĐr–§ u•#-SU'>ĩŠĒ€'5—ā×HŲ´uBWDÍĮ†dfø3TŠ‘#6Ą9QéZĮ,ä`ņQÜ(9âŗMŖMĮi>ĩņĸāŠ2ĸ nfÛOŠÎũíŖEŒ¤…pĨmü/ø–L˙΍¤ÕŅSÅ×Û@¸?ŌēcđĻ`äîŅÕčWDe;Jė¨Đ‚ŋxŽ2q\ž‘÷Đ{WLœĀ¤’™é]ņ9X†"ž}ĒŖąß‚ÅHĖLŦs÷z{U ÄģЍDæBzŖ,ĖŸŽĐN)ōŗsÉĒ7÷Ũúf\ÂK}7P’æŪöÅĻš šeuųJ†ĀÚGęåŪĩÎũ¸< ¯`”‡ėtōk†´ŽĪC GÔÂÔDFqČõÃęē XŲS‘Šô÷E遌å^]ãXbņĮT‘C0ÉÎOč+8Å7Š´ŨŖĄÔxOP2xZÜĘNāƒéŊņúb¸oj’ŨßËÅœ€ŪŸūēčŪFˇy „ė‰\ĸ 1øšķ™%’[†.Åŗšųūņ<šę’ØķĶ“ذ">rÚ?ΊŒĒųiûļÉneįæƒĩ3͐¤$šĖ­‡?Ū Í"¸Ã‘˛<¯û'â"=Ķ~ဠģîĪŠ4åō B R_™>œp;wĻīb­fÚãs ũã×'֤ƺI •ÃŦxV rŖĻė1ژ†ī‡É‘÷–ī•åɧˇnFž$ Ęw1nįļĩ"ģm1dųqš*ŸÃž™#š÷4ļˇ×)7ž&c,‡íÉa‚psô•+Ī˙Ųleptonica-1.86.0/prog/blend-red.png000066400000000000000000000075511506303110300170750ustar00rootroot00000000000000‰PNG  IHDR?{Ŧ$VcPLTE  ##707?:@@9>q BūwõāøŅpū8Vpœ?ŅųÕ}ۈéSŲCƒ[ œŊėíRüôwĨgõ‡ųS:ŠžĒĀš|(k:ŧ n5˛°Â9Č'Æ=<ŌņWqÜūØP§2˙ÁgH=d;LūđļžÜ%Hƒ™59%Ģ"XˇQaÚ¨$÷ũĸ ˜ŅC]{Œv-9˛Â¨ôŌųs!Nķ§Ui:‚­āqčŧĒ´OYoWeRgĐŖhĩĒ…Zü‘&ĨĒa2ū4ë]Tëp8$ŖĶLĄAkĄj+i›hm-Ųô1E;nΟ qž?ôa5ŗ¤Á>tģüŅ_åFŠŋ&…‡jöĨ°Tdú/ĢĘ.’ÕŠûs+ŗŠöŒ›RŲ–]d:Ķâüš§ųƒ!ĢjKšÂĘÆá6˙Ņ:7ūčügCŨ­ƒ\RGãūŒ‰oMū”ŒŽę˜Bi 5PĘm˜­ \øüįRœæĪ@•Í&&°ąÃāŧ´?:ø™Ã&x’Âû3'Qû#ĢēŋdU„='˜´ae‰öÍųs!~ĶūčĐnĶ Z9˙Š[üiö#÷Ōd˙ĒW;¤•Úvū¨â„Jë˙ÔÚĶ|Ë=Ņ­öV9˙éađ]Ā“i[Ÿ˙\‰ãüŗÚ8N“]ëīIi~šõŌü5nė Žŗtk÷o3 ÛÃ#jĨ%Ŗí§/BŽŋ˙ūėXķĮąįcÎĮ œ?Ž8+8Áž=GųĒJ>đ.?įlȓ2ĮĀqū0XđEū°ČÅyo(ązĪĪÄaū â ~!ER&Ÿb)4HRĖ€€?Ĩ ZdŠøe÷æ@lžĀԌ#Äsŧ!ķ§C”?­$éēŽ{˙á I…ôÚRl9UąĸžakÔ´āb U„Qŗ^2‚YŨíˇ žæüų™8ƟŌJgĸĐ˙¨ņé#$փl)%z -VŅķhoĀËß°2›:e0MĸüIÁųķsq”?3U}Ŗé2CįúĢÔĸ€mŲbÃią<x&xŽyŸ!ô‘âąå™{QĢķįįâh1āŋpIū é"uģAã˛13UĪid oƒ1ÃjÁļÜs/šķįįâ(ŌÅI”‘âeY<éHŖ@>X ĮBbW˛"L™H™Âķj=dËÛģijüũë§béû!ßÄŋ|Ąwü˱ğ„ô1Oŋų/ÃãŽ8+pū8VāüqŦĀųãXÁaūp)——co\ĪßëåYã×* ŋ^›“ŋL(q|3ŽĮßņŲa­Ŗë=Ÿ“ĸ>ãĪk üZŸÃ—Ÿ^ŠsëÁŸŨŽ"@.# –#˜!ĨĪMBíAyÜ(°#X°U–‹-øãAŠäĸ…hiĢÛ÷D2ŠÕÖ {fí'U ­5Q;qûs)Nķ§ĖHå7"×Ŗ—Đ•Ø°ĩĮ<4š,člÁ˛ÍÖÂ'ÆQĩ5Bō•E›üAdŒë ĮŊŽĩ…ÖbØ[ãĮu8ģ~9—ÔøÉŲŌÃäÕIB°āBŊĨx¨AbVĮf‰âj˜, ­….¸žíoĒSãÎMŠŲ1ąĩärû;×ā,ĒNŸ-™pčG}āO°42ŗ0œš ū0é ĨäOIšf:‘lÄãõ.ÆrĮģs§ôQŖĩNyd’8ŽÃIūĀ{Ųŋø+´Åhiđ"{É| ųƒB阊Vښi™2ĐÎN~r¸M˜GėŪ„9ôÛäĪhMų!÷_—âŲ`^&Y†PŖÃHãāųČûą¤IķR+bę›˜Ōąķ‡™ Ęɖ‡Ė”€$v‚ƒ4NŪĩy´ätRœ?Wâ}?<­ƒųū>ū“đ~üqü$xüÂąįcÎĮ œ?Ž8+8Ę lzˇŪ%:>íU(ę+Ĩ[×ĪR<ü#Ī›â(l×!™•]ĸCuĩ/ ˇ/åÉZ0_$ôĻ8ß4l„äĘ2áÄ 9Kŗ¨B‰q. TĒ-WfüĄo‰ßKÛ&E,iŖ$.gÚ…āûvDÖĮxš "Ž…ßĨÅÔÂíĀ€‰¸~ø•8ßa"b/1ˇ*S?^zFDŒeäOOjŽb˨ŖĩSĩ`*ŌĩPļJ5ek‚ ’–c—(Ĩšō*Ų†,čq íˇė‘Ę(=HŅÖMLķŪq N˟Õ{™Æ7Æ+Ö`:“?ˆŒ ]WŪFĨ’F,k·˙2WH?†(ãjÜč"Z­-Y–ŋFž"Ė—v†`|) Ņú"Üʧ›ĪŽ.à ũųbŠc2ŌLNan•bû $sVŧOūXĶüá,jņĢXĻFŊۅeK{ƒŨæF%1īG]_Å!‘<ãÔqŽķģzuÎ5 „dÃ8u4rûR°ėÆĘp§‘LĻu¸ĪLģ)aā2ᤔ?LÚ ũëÁøcŠXúÆŨF?>ēĮ÷¯DžDĩôŒyņĻŖaīęjS˜Qąķ'S†#3‰ŖZr:¨ŧÁܯÖ3ģ)$Bé ËéĄåR;ŗ>ĶEÔaüaŨ™:"­§™Eâ¸ŋņũđqGSĮÎĮ <~áXķĮąįcÎĮ œ?ŽÖīĩuŋĒ6÷&øT|wņõëÛuįŅú‡R˙ü|!NÅßũâ^Rz&°ņ?_‡;ëiūË*q| ~#ūÎĪÉÕ Fōüœô1` 6[ŨWųŅ9×&Ɵ¨ļĻTZcНË‘ž‘)Ž”?u.ƒĪŊ ˇėmČK'-ÍwĨÅųs!Nđg' o͈•ÆzĢÖ[Hđ_Ųî3X•+įnqûR”98ŽKa(­ÛzUÄAzÔâiޞegHåréÜ3B$,­Œķ'+ũÃ˙MĮq"ūž…ÆĄîcđį%ŸĄˆÁ]/šĨpXąĻÔ0õ ’lƒĀ”Ž]…clŗA”m9ŌLiéĻwÛö :ŽÃ™øģ$f4ůOüŠ¸į¤œRxÅûš“Õ @Œ”Έú(_%,ÍÚyvū\ŽSņ÷Á ķ_0p=ÛoxŦ;˙mËs1ū+Lū ˙eÃEs…ĀđT2ģÉ ^kú¯âūëråODŪE3å:Õ/0mIsū E:áüšîķįČųsų0ļĖÅņ3æĪvI1HŅŌ´h–™rÃü™“îŧË~ØüŲß߯Ãō÷ÃoJ>öœžŸeūx2ĮŋpŦĀųãXķĮąįcÎĮ įoā…úë]nļļxņb˙yĩÍã÷ŋū$‚_ã¯ŋ”Ν‚žĐųãLüũ[•< ßáÁz¤ËŗzĻÃģŽœ?ߌ3ü™ƒÁE‚{ükŦ ĖĘĀúS(Îbâ=/ķ7Fø|ž7ƈ…ĪGÄ4Ũy‘ÆÅîœW îīņyËę(jĘęjˆÄØÕhk×MdnÅAĢ‹‡Jū`•õŪs [ŽîÎūÎäodÛ9eæočØÄí^j…[ëØ$ÛļYc?ōįîŸ}Z[Ũ>u]Æ(sͧ)7øs?÷nû_2ŠáŋÂ.)CÄ]f4üÉNĶãöë8Ėڈ‘ŋ!15ˆņDĩGROc× %X2Pđ_9WS|ēįĪ–’‰J=ßøƒ~…ūkČGąåŖæûWËÜÚĮ´ƒx—IÚ07ú/aĪĨđœRW1ˆP*¤`ķ§ĖįŌŲ9q8Cl+A^HEâV¤bÆd”&JÍŠQ‚ ÎpøB ‘;Ą”åKK’t]īHœēv{)0Z¨au­íÃŗyī¸;õėtŽ”sÉķzŗiö”Úŗ?=ķN?ŽEŧeū(ķÅž:/Ū÷BũëXæĪˇ ™ÔßJJ})ėø.xüÂąįcÎĮ œ?Ž8+pū8VāüqŦĀųãXķĮąįcÎĮ œ?Ž8+pū8VāüqŦĀųãXķĮąįcÎĮ œ?Ž8+pū8VđŨüqmæ7ō'âɝ­,eŊš+÷W‹„åļT‹gü*‚ΎorŧŽÚŸÔ[JdHCqå”2e—̝øsĮēØĄ˛RzÛÜPŸ-nÅžtũ]pØaŸ&ާ.AļŨŋzŽĘ3i ~o&‹abȟ<„Yˆh>ÍjŗŗŅĒwØĘtî'Č}ģášú„NĐ(ö’jßģp Ÿkq‚?IJ–•ę–:å/:ļQitaM†Ié]7ļĀ(+bĪ ÛŦô 2bÚD˙¯=h•­ˆYRdËj‹ |ôĘ"LYęʖjl%Ūūąįf’u×ŋŋĮųĶ uAŨ cÔÖŠ+Ö8|U‡ÎSéĐßZĻÃLĶA'4E]š3ŲŊ2 V&B(ĒsˇžĖ‹WČzx ôžYšVä?Ëq:ū&Îų/¨žÅ^ŸđGmG6_Bcĸ†Ŗãūh•˛õ6ëB”?ŠsĻsΟēO’Y3îr¨Hė-Ûū@Į…8ÅšphįOŧŲ‰f ȓŠ2ãNdzUĘÔGū¨ī‰6 ž/ŨøŽ;C%˛bPqōĮģKļ\ŠŖīī­“3ę™Ô‹IˇaKjYt> m›•ą"DœJ‡ŨéP]…(f>ōÕm}“NŽĖŲ ‰¨×¸-zĐĶƊE'DZd´úZ8(Ú¯ķįRŧû÷įTsn.tųļxwū´}{gĮ;âŨų“ô]Ũ_ąŪīÎĮ{ã˙A”&Ô'ņIENDŽB`‚leptonica-1.86.0/prog/blend-yellow.jpg000066400000000000000000000427761506303110300176420ustar00rootroot00000000000000˙Ø˙āJFIFMM˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā{?"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷Z(ĸžpØ(ĸНy$ŅYÎöā–6hÁRŲ`8ārjœŒˇ0AąˆÖK–n3/ʃũĸyĮ`=Á­=ŖŌąßÃļrMe3Ére´ŽC qæHŨKÁ㎜:UĢ “]ęąÛ\´ kus"(ynōÔįõ<”dûsOmVßcŋī0—)jß'ņļĐ?™i—z8¸ģ{ˆoní$‘Drųq"Œã;”āüĮ•ÁéĪ˜t8Mųš77>Y•gkmĘciîîČÚ8Î23ŒķNŅ ˛=?Ä6ڈ´dˇē†ÅŨo$ŅmY~]Är< ԗzíĩœĶFŅNņÛãíSGRFFķץā“€sUtO6gĻ-åėķŊŒ*Š81G&ͅ”í x,âpĢ7z 7’Üfææ(.¸šˇ—d˙(_›*X| ”ŽĄ¨\5ąZ×Äīw34ŽÄ'\<*IÎ;@úˇĨ>_XĀę K+ąsļ0ŖåW(_’22;œRY”šRĶbá%VÃFųBĀゎ°ĻÜøjÎ#Ęy-LŦƑļc‰ēzŽyëGšpÔĩ.Šj–6÷h^tšÛä$KšĻČČÚ>œú2p5›uâ2¯Á #ī1Ī ņčŪdKŒƒŽ’ƒœF9­K2렁^X~ÎU –6ã  ƒNj‘đÕĢ8’Yî%›™$ŽW26c98\õH8K”ËWšŦvwŨmî.fŲæ´p b‰œnl‘īÔāāRéÚŊļ¨ķ A#ÅCįmÂ6ôW\w?+ŠéŪ‹Í,]\ũĻ+˛9ļynöå~uÎpC)IÁŒžyĨĶtģ]%&ŽÕYc‘ÕļŗgcHĀÁQzįœŅe`ģ(EâĢiŲ+÷iƒ4B30C‡ÛĪn:ã=ŗR?‰,ŧĩš(î. ōRæIa‹"(ØeYÁäs€ ĀéÍZļŌmíŅ‘¤˙EŽHĐ1‡*XŸûä~uLxfŪ;H­`ŧŊ†l–˛¤nŋžhŨ•āãŒĻĶΰÅ{¨Iâ{(‘˜¤Į÷íoüŖÍuÉ;I`01÷‰ļsÅM&ĩšΊdĻsNÂ<Û×9SÎ:^{gŠdŪ´–ŨbW’&Žg%@„Ą|äĘTŽ0Aėz€jŌip&úqy)ãw;wŲĪA× ¤ÜVÁŠPxŽˆ4ļˇ!#Dk§TmËĀ> ėA;w`N56ĢŠÉ§Ūi‘-ą’;ˆ†I2¸ŒŨōrÃûšīĀnø;[ÎŌ¯ÚŽcˇ¸U6čWeÆ!Ũ•,2 ´ŒWo,!Ŋ–ÕĻ„— :11ēŪŖ/3Å6q –[{Č`xd¸ŽW‡å’4]ĖÃ#Œ`ž”“ø‡ė×ļĸ{Iaŗ{)îåžM§Ë˛͒0Ũę¸8É‹ÃÂáqĒj öhÚ;uwB!cûœ1‚ۏį+†lVÚ;gķe‰ žģp™ÕÜá@åF6āx§îĨ7[ļÕ&’ÃÅ4`9ŠBĨŠœāŦGc‘Ôw5ŠXöšŲŦ/nZI ~ôŦJUUŗĩB \AČĪ=xب•¯ Đ›GĨ.T€˜žô`zRŅ@)09÷ëKE&´P`g=ũihĸ˜ éFĨ-€LJZ( Š( ĒjaIŧœGä8cčģNM[ŦũsūEũKūŊe˙Đ 8î ųVū+x/dŠŪUš%?+ŒÕCƒÕåM*9¤,}kØJĮ0ŲcX§ĶV<9ZÖ´ĩ[ɒ™bvãt§ OĻ{U[‹vĩšx_nõ889?!FHéFi§<ĶâÅûœÔGŽĶ׹Ĩ ´æ’rŒŠčŲ#­+iaôĻ”Ÿãؚ†I‡LUØ0 ŗ'ģrNÖE´Qchd—y#aõ5E—Ëvi%Wf9Û-úŌŨN'9sŽ„žĩM¤nŽßLÔÆ%ĸgsŒ­GO;mäîOjH"kšq“ĩy>õŖŗČbĢĐqøúU;- zėZ rÄ.͎§ØUÛwÔŧE9Ķ´ËmČynœRĨ3Þ¸ņķ!fŠŪ?šYvįŠ=ÍzΙccĄŲ k•F ûĖÍęMsTqLF†ü2ž‰Úæáfy  pĢeOÚ "UNėG­ LL¯’Š8ôŦŸx€ivKmlšēœ~î%?_đŽmfõĮøÎũdÕM´RH@Vpy-ÔūUÉ {évÄ>QÁjŨņŖ!ĘhÒ^I8?\WCiā‹ÛHÖXqܗũk~xÂ:n2…ôiŽUĻ’5…9|ļI>Ÿ­wˇú͞“6ÅĮîâO™›đ*†“áĢk6inÚf鸃´}Æĩ˙ŗ­e\IoßB‚š\ەĮ{„Ū4Y-`ō'mōm? ­­žˇnĶũ‰b‡qŒä“ôâ´ŋŗ4¸K0ŗˇēƒņZZuž!cEkjŋ;Hįb~ü)š_`C ąļĩ˜2,z/ZļņÅošŧuũz§{¯Úiã˰Pō<ų$˙ē§úÖ,bîūsuqžFc‘“œTļ–VTUŨ‹ŨmڏLˆZ+Œq™đūÊÅÖK˜Vä9Ë4œą?Zŋ$–Ú|}õÄp îĮĶĶôĒž1ŅŽŪ!3@‡i—f77ĸúõæē#KŠ×ŌKŪ=ļŠ(Ž# ĸŠ(Ŧ"ōVŅæ¸ŧ™Ĩh'šF“hŦs:ƒ€ÎÕkÔöđÛÄҁQä+’~fbĖyõbMRĩ€Ä]{QŨíqu ’Ûˆîˇ1Ú …aˇ Į#Ą`9æ¤>!ēŽŸn.gHáv-š3!ÉÁ ÁČ$ãVít6Ęę;˜mŠË˛ÄLŽDJzĒ)$(ā|́Ā㊑´}=ŦÅ ļXā´Č"% 9$–R¤9fäÔÕ>AjPMręyÅļž‡PVq4rOļ8öl$ī IΘ„azvāŠYĩĢÔ2¤Xwļ„Kq܅ÚHo‘0fžģG#ž¸´ÚšÖņEövAb’G+¤€ˇ,K‚“Éį“ÉÍ2iW1¤rY‹“ĩô¯Ô5[Ų4ũ>[¨íĖî…@@JŽXIĒã€pëX˛ø¸-Ã$6Mq+™ā/',ŠøjãkI\įŠŨūĪ„Ø 7iŠ2ūk+“œįrAĪ=jáũ,˜ŋŅvŦJ¨#GeB̆@vļ;n'w3ĮŠ7ęŋgŽÆWˇ[“mæĒČX°!K ˇ`cŒîĪã^o]¯öUû[Ŧ]Ԓ?˜˛‡‘âX%nMŧgb°ÚIėq[GHąkßĩ˜ ”¸í°¸ā1Lí-ĀįãØTIáũ-.ãēŸŧ‰ŨãØĸ ­ĩIÚš sÎiŪg[øąäšm2tbŠŅ†bꁙUˇ:ô$pyâŽi×ڄúíõĨô1ÃäÛ[ȉžbí0$6Õ?ĀqŽ*h´.(æėģŌXüĻI]¤?¸Ą‰Ú=—ĨMc¤YiĶM5ŧOįLǞÉ$¯#¸RJ‚ĖI8ÜqéšMÆĖ53c×îd–ÆOėå7ŗų0Íįãīˏčvņ‚O#5^ÛÅrŊ•­Í֛ä}˛Õ.-Q'ÍšŖ@Ķ'r1œãĨk.Ĩ­ę]­ą¤†TclG ‚Ę™Ú ÉÉœœõŠ?ą´ķo šĩC6æÖ4ląš_§ČŋŖšŠONžÔ&×olīaŽ ´"E'˜‡sJ ĩ[ø Ž1Iąw5ģ_&ž­aĩŲ%ķÆō˜áN8Á'‘‘ÖŽYi6Z|ĶMoųŗY$’W‘Ü)%Af$œn8ôÍčētW†é-ņ&æpžcVlî`™Ú ÜŲ däúŌæˆXËÖĩ˘t{É,"AršcŪÆī' ŽŸÂAĀÉô8ĮÍK­ęŗi0Åtč\¤LđÆÃk”vŨÅs×§Ũ÷̐č:d×él|̈ŧ™¤fĖx $Ē8Q€3ÅYģĶío×mĖBAą“Š+ 0ãÔQx†Ĩ[ ųî.n-.íc‚â%IJĮ/˜ĨpSœr‘ĐzšÍģ×5<=wŠÛY¤V­e,ö×xgBČĖ…pãí‘[ëoŨItē,nüōĒX¨ü ˇįTO‡tŖæƒjJJŽĻ3#”Pā†ÚšÂ““’ M Å;Ø ë¯O×ŲŽėD2‡hnų$fPO0(rŖ#‘ÉĻK¯ŨļĢũŸe§,ŌæošK-Ęä¤ķæŒ#Đäj]i–w†S<;šUEbƒ„%—$F4–Ú]›FĐ@ŖWUbʼnC>I9$•““Eâf>â'ŋÕ0FŌ$ö°ŨƏ„Ų)$įšåF;2EihúœšĻžˇ2B°I¸ĢÄąŒ˙u˛ :ÎŸ‹§Ai°AŒ!V`T Âāį#‚G¸'9ÉŠ,ėmė#dˇFPíŊ‹ģ;1Ā–$’č ł-ŅAíÍ ) œŌæ˜ ERĸŠ(ĸŠ(ĸŠ(ŦũsūEũKūŊ%˙Đ hV~š˙"ūĨ˙^’˙čĒ; gČŖ úQš@x¤5ėœÂįךi9¤Ō´Ä!4€8M$āU”Pƒڀ+ÉN21Pē1Œävn~S§JĻōyc“ŒĶCEFĀ8ôĢ–įowĀÚ:ZĸÄî'ąīWėøĘã!ŠTŌ:ŌK›QHûQ 6pæĄ•6¯ËÃúÖŦōũŠĪlX8ÆáÔV;e˜’y=éBīp”“øM}5Úîe˛ÕkLĶĻÖ5Dĩ‡ŽrĖyĀęŊŒO Ąō~lzUí/Z_În|ĸû@ÁæĸMꑙëZm­ž§%­¸!‡ÄŪ§ņŠmũäá@ÆrOoН/Ÿâ-Ņ`ļvqÆ{I!ŪGáŌ¨ÍŽøƒZ"Î[Ų$Y„UUÎO°ŽgJoY Įĸëū%ˇĶė^H§ŠGh‰[Ž~•Ëøj-OVņMž­$eáGËHÃåÃÖĩô/[ÁKĒĘŌJܘ“ úžŋ•uĐZ[[ĸà iH0¨ŖYš(č„Hfg|“Ķ8§ Yķ„ĪÍEæ*§'Ÿē?Íįĸ¯Ģ;côŦ/ÔdĨČ`Īōú}iZ+›Á˜H‡Ū‘ūP?T¤¸Š¸<Ŗœœ…ūõ ÍãÜ`O)“oEä_÷GJ› š ÃNV`âęppūY˙õëPÔįÔ%uiID8č(”4„ |€zU>Â)~wI$ԃsŸ*5§ŪĻF˜‹6 Ây9ĪČ[ĨnÜßÃb ŠąPN:W5Ģ^%ÍĀļŌĀ;÷“ã!~žĩįÚΉo.¤)ö‰ (0yükĒyō°’Qw‰Öx†hõȔ; 11ew'uĶâ[)†¤Æ0͈âmß.1’Ÿ\ ûWm}Kn×#fLɒpŊjVqZE¨ŠgŠ`];(č*æĨ[osčj(ĸ¸M‚Š( ą´9Ÿûf’W™ĸšēEiąÂO"¨'¯@ü+gņéPˆ#˛"GÜNĐrI'ņÎj–Ārx†üøh^Nör}ģMšæ$´fW„Ŧ[ų;žaž ¸$ų­+][S–xK EļžöâĘ #va°Ë‡'8˙–xێųČ΍ž‰§X[4Ų[€ņ,Rą‰wL cį |ÜzÕŅmڍŽŌ/Č8sœ°÷;›'žO­S”Ef`Xęwv~ ŗŧ¸’+›ĻŽ!Ŋ˛‹™(-Ë äœôĨUÔ/59īāŌžîŲ%K¸L“@ŽŠęË# I•`cĪŪ9}q]@‚€ÛˆAˇiŒ(ÛˇĶŠ–úu¤Iĩŧ1ŖoTŽ0Ą[Ļ@éķ$25ģ‡ƒQ´•¯eŽŪ"žtPHĒéē@Ɵŧ‡OLž^ø–{m(]$P´ŋhŧˆĄ=˜ƒŒ÷ōĶ=žnÜWA5­ÄĐÍ5´2K Ũŧ`˜ĪĒ“Ķ𨎝cįÍqö+c<éåË/”ģ¤^2Ŧz‘ĶƒI8í`ą&ĩŠŲČÖˇIdnd4nģ–8üÆuÃäåļíŒn$ .sL]sSû|ēc>Ÿö‘tļëpŧą˜Œ‡)ģ;ģŨ͜ö­Ģũ6 ø$ŠLĄ‘B™#ÚäArx9ž*­‡të; lÚîa•ˇHŗD˜lČĒĀžzį4š°÷ ģKģY“ŊRâŨūr gÛÄ$Ī ŪÜzägŒÖ–‘uw/ˆu;[ģˆ%kx-Įú>Bä™NvJœcŒž€÷­qch"X…Ŧ"5ŒÄĒ#q•Đāqė)-l,ėPĨ¤ę@CAœtúŸÎ“’°XåīĩFį¡Z’ÜYCŌōAYĸa0ŗķ0#æ\.9äâ­Ūëē–›ö¸g‚ Ž[´~H!WÎv@'æÛŗ¯Ëģ azÖ¸Ōô˙6yŅ –áJM'’ģĨSŲņV$´ˇ˜H%‚7(G  î^~Sę9<{ŸZ\Ņ Āņ­Ÿ%íāŽHŧæ‘Ū27XaC§, <`Œæ­Žš}–v—ۛËԉ Ø+dæQÉįbāûįĩkC§XÛB°ÁemK¸*GĒ€ŨF¯Z>Å ^[ŨCAÅŒŠį_”nhæ`2õÛÛģ FÎâ)[G Ä˛Āą–ivĻplõĢ]ëē­—ūĪššæ4–≙ĸŒ†99ÍČn3´ņ]1†6‘$hÔē}Ö#$} T‡KĶí–AŦBG8H•w2œ‚p9 ķš•ļŒ”ÕõhŽ&ÍáĩŊŠÎRˆęŌų‚<2䝁|ÕČ;ŗƒČ¨íĩíFáôi7X,:Ģ8Ž-Ŧe‡;üß7ĖAP`ņî:3knÛŗG|‚VĘ\c }ÆÕÁëĀô¨SJĶŖģk´°ĩ[–;ŒË ‡'gv3Бøš9XæôWU“OĩƒíV>t6)u4÷ĀHŦĖ0>o—~gä Ž(˙„¯PšFš <­´B ņȃsyˆå”)fÚrTôíŌMĨi×1Åö˛¤'1,ĢĪû Ž? tš}”×qŨKgn÷1q­—OĄÆEņ 2ž—¨Ü\Ũ_[Ũˆ’X$ųcE9–`„œÛ‚į#ä`bąeņ6Ŗ‘¤RĘEŧļ’kxpxJÆ\9ų€ÆÖ .Ūē˜--­L†ŪŪ(ŒŽd“Ë@ģØõcާŪĸ]/OI'‘,m–KŒųĖ"\ɞģŽ9üi)+…Šz•îĄjšlfšē¸ōI„‰Ü°PŲū™öĪzÃÔ5íJ=æââ;`Œ—–ā@]\I Éķ†ĪŧĻãĒä|Æģ†7dgEfFŪ„Œ•8##Đā‘ô$Toci$F'ļ…Ŗ%Ûa@F[;Ž=NæĪŽO­5$‚Æī‰'˛—Rˆ[Į/ؐ¸ %É]Ēmģ†ķÛ*‹‘øƒS­g‚îZX’9Ĩ_-ũ˙yŗ#q`8ę:?˛Û€ŲâĀ,Āl[;Ôäį×&Ą‹IĶ ´’Ö->Ö;i9xRßUĨŅė2ô‹Û–“]7rGpöˇ!ŅķŽ ˆU$í<ôÉ䚧{Šę =ßÚ4ķö‹:āvWS•ĀÜr|Üļs]%­•­Œ~]Ĩ´6ņį;b@ƒōAQĮ¤é°ŧĪŸj1ĖĨaP\õįŽhæW WēöŠc#X´0Ozͤi,QŠŦŽų([$…q¸g ņPÉâ}Qlާ[kek[›‡ȑŖá@ÚĮh'’HÚGŊt÷6—i"\ZÃ2J‘dŒ0ltČ=qH4û5‡É[H^Y‹`Œcaūc§ĩŅė2ĶWģMY4™–ģŪ˛3Ē•_#fL˜'œÆ{Š­ÚĒ-#‹ŪüÆF‰bčĒ <{œķôfĨę4-QREPYúīü‹Ú—ũzK˙ ĐŦũpgÃú˙§YôU ÁŸ ˙¤Ür)Øāf¯iŖKķIԍÎÁĐBŖšö[ļĮ0ļÚ=Ũ֛=ôQ“8,qüfžĩšĒëÍår=)ë/cEÃ…^}MRTüÁkKOP°œüû ÎĀŠ­Ã)cŋƒÆ(–ÃešJ͸÷¨5¨‘ĐԙÃTHĪ`y¨[‰q]"Cķ6z“Y÷Ķ,íVÜuĮz$9ŗ…qÉÍDŠšō~ę ũhK¨Đ§ˆāw"ģ‡öM}Š%Ô¤ļ!Ž{âš i$W˜œvCŪŊcÂZdvz4s?ĘŌäöĩa‰šQ°ŪĮO5ČÜOĘOĸÔm"Æģ¤~OEj g~íBįŊFHŨČųĢÎsėfNŌ98Œ^ũØū5^YR0Ä(b)īĢs;Á¨ŌŌIzä2Äđ1õė*,ØČĄ/#–aĪ\ ąĩšgXÜ1Œíp;O­fŪjÃįÃgū‘rcä/š5ŖÁyĨÜ5Ď˜rČyį֜)ÚíŽĮbčĒ“´r[ˇŠŽs]ņ"˛ũ’Á‚Ž2î;ũ*?jwwvë—ÚpOĩrí ¨ģ™/Š­â”v*2˛5ôĢ¡Q3 ÛXpk×­ôöŊē{y 2Ã3!…†DŖ8Ęĩtz{„÷LFØ#2s܎‚¸§giZCËąÉúõ­°ą´œ€’Ö8¯o⎖_&'p›°¯dˇ˛´]:+cĩ˛(ŊžkË4:ßT{¸äų^÷+–ã=…u–×SxgOļŽāŊŅpÃfîqŒôękZÎîÃĩĪĻ(ĸŠķ ‚Š( .U¤ĩ•W‰™˜Üŧp@ ŒũkŠĩžŊ˛Ņ-b:”öķCa ZB`Fû[”č~\ˇ?.Ô ã’yw˜Ēö×P^@ŗÚĪĐą8’' ¤‚AÁǍŦ„ŅÍųēÔˇAŋ´Ĩ…eÔÛÉX#+{ Č%rXÁ'ûĩöĨā ū­-Œ(fDšXPĩä΁[(Tǧ bĮēņéĮŌ“#ˇķĒæōŽŌëT1GĢîęM"Ũ¤SnģTŗī°(l¨%ļįÛŌϏÖ5ā¸]?R7ļĒđ†ŋ•Q|Û÷ËÍąķ°íŪwt㯒Xĸ+æ:ĻöÚģˆäõūŸĨ$3ÅqwH˛C"†ŽDmÁ”ō#¨>Ôsu°XäāÖ504į¸ŋW…îĖCČÃ=“& Ī€|ŧ‚vœëkÎo4%{9fēˇŲ ]ābtįĮô­¯˙U1Q5EP¨Ŗ€OÃĩ'%{Øv9Ģ‹ÛûC5Ŧú”ŅÛĮz"{ö‰7Į„8Î`˝ģŠā:œÖu­æŖwŠ ˆn$ŧ{hîü‰C4jöŦ,Ãr8ĀÉÁëúšcIēÆÎģÜü ‘–Į7Ļâ7ģyų@#-īžßtę¤[Š™ĸxmĶ?Ÿ(eåā!@ wwŽŊĻŽ'Š7uV‘ĘÆ3Í‚Øøũ§Œn0;{{vĒæōŽ;XÖo­ãÔjŗZŨBĢö[e´R']ŠKᔱų‹ ˇæ0[ÜĪĨ\]j“ėöŌL÷ ŠŅšÁÆ}ã¨_z턱´¯u2 ”TãéĐĶg‚+˜ŒS&ôÜŦA<aødJ\ëkˆôīĩ˙gĀoˆûS.é+vaœgÚ­ÔRL&ųQrglœú>ϤĪÖĸ×(\QŠnyĻK:@…æuEąsĀũHarZ*6r*ŊļĄozĨ­na™W1°`2Ą†p}OЏQXûE°Ë”TbLž*9nRdšY8ŖRîėpš=ąG´ˆ(¨æ8Ū4–DF‘Š cŒ %côš×ÖÉhˇos Û2†ŗ€¤`äņŽGįZEķ+Ąh¨Ļž;x^ic‰fv8’/åOÉÉäqNĖQUŌî .¤ļIŖiĸÉļYsĶ#ˇ6pŖ•€¸´ŌpHô˙9Ļ<éƯ"Š•ļ Ķü=i­Ä˛ÜšīĐĨqį‚ēßj0ßë`ÛʲGawŠâšúWąM{ēœÍętūUr4ŊēäÕxSqÍNįhëVs8ŨęĨČ2ŽO+Îiō>[4‚ŦŽ9úzS@SīŠÎNĪâ5#åHĘĶ­āIķ#H#*zôöÔhŠ‚­–ĢļNŒÅQķSN{{tČg-ôĻ;Å ƒßʍĐn>@wqœf’qŧ Pˡņ¨ žI.ŖÜx.i$aØc*r3ëūsųT?t-b„Ī‹ĄķåŽßņũjHŋvģŽGŊ5QTq’XįqīIpáŽIāz{č–2ĶÜ õ>ÕßXøŧA§Áo5ą l>Đ~ĩÅYÄ#Œ/ņŧ}jčF# ~Zį­ČlčŽŧozC}šÖŪƒ‚TąŸãnęeŗ+m+ĘØ´x)ëĀâšÛœ[Â7 ū``xĮų5ĄāĢV“[Y‚hŲ|pŊgėāĸŨ„’=âI…Ŗėŧ˙xî{Öî¯Ģëö-‹m?ŧĪûŪĩļŠæL2ÜM1ÆÂ 9 uŽ}^ĸĶ-„P[†=7TSÎģX&CÚĨ•@˛€zÕC…|ô :Ō¸0 #7ÍÎyĻĪ(ŽĀwŠŲY†sOŽß΍ąQųŽŠˇ`)jš GOHŖ¸xܨb d1<ë\n¯§&—”gŽK˛rÁ„z|ץZKĩ §Oš.Ņ~äKŗ€q€G¯oÎŧëQ´š×P’+õ¨Ä1'Šõޜ;iō°.hĖđCoC<Ûßũޘ_į]ūĨŖĮŠjIÃmŠ4fëÎI_đŽ#‘›YĮÆîįØgÚëLVøH0@A‘õ§ROšæWz@ŅEĀXQEVN“öúMĖr#$ĻæíÔg’­<Œ§ņÆ´ŲrMEoqŨŦW0>čĻ@ņž*FG^{Õ+Û@98ô+ôĶÂũŖT2e†9Ŋ“&ėŪë’xûŊ8āQ%Žŋ&ŋæ5ņž6M‘9bIëÕ;6r„ōqž+Ŧ{¨ãšŽŨŸȌƤu @<ô°Š†sČĒS{ØV8å´ŊmGN2ÛjMwé’ęfœ›}›\Ē[hŽâī“NMf-6ŪÆâ+æš–[ŧâŲTV9Yˇq’’äîų5ŌÜęV–h7ėû4æ_”’ŠĪ<}Lšˇôįú~4ųŸaĩĻ‹tķZ5ÅÆĻD˛\ o$nōc7ˎ1ˇ–ˇ×o‡ĸ¸ké*›ļYJļûÄrÁžk|ä°ũzPIÎzúzRæ}Fqļ–~!Ë3ÜĖ%ķff-†‡vÎŗlĮ+÷SpĮ8æĨĶ-gūÚĶ%{MUZ¤rŪN]<ÂLą›”yޝœđ=;ûĶro XåīáÔPš+ĸnšdk9cœ‹tŒûËģo6wNxę1iڔ6Âxdŋ{™Ž/@÷BÄDÆ0Ģ‚"~ĻēŧōrzQߑÔú~4s098­õ!sčõˇ}Ļ2&ŗųŠ Žíŋp2AmĮ#Œ—OļŧŌb˛Ŋ¸}BRmækÁ$Ī.8@RHcgŊtįīyÜÆ÷’Ú†ĖŅĸČęáX°^}Ę7ĶŽû­ØI¨Üh뉄QŪ&1HQ•|‰GŪRųŠŽzČ[kô*š„Z´öŠæĮl-Ž\4›wę[1ųX$‘ÁÉÉŽ´ķéū[íöâ+š3 RDÁ™ €Ë¤túSMėG+aiŽZXÚŪŦ3I ˜’dægēČŦ}A`Ų˙gÜĶu=;]Šé"Šúî@ļčH‰#“ Îæ8™Ø?8+ĐzŠíwn@ŨŊĮøŌįąĨ>w}‚ĮĒZßË,É%žĨ=ã^DņIÄ[DŠ~îíŖ  ‚ŲÉ5Ģ­G+ß[™ažšÄFĀĨŒĖŒ$Č ļŌ q×=ĢlžG¯jN8íœtöüés>Āqvú^­6›s-Ãęiq˜>ÎĻí3ī˜üÛN‡îúņÍMĒÚŪĪ$é%ļĨ-Ķ]ÄŅkK‡Á˙qxėĀõ­Ū¤ũ2MC ‘<—4(É&Ų BĄ›jœō>nž*Ķml#žLã_–di ēÂÍ)[‡ ņ­ž@?wĖĮČ Bk]gû:EˇMMuAm8ŧ‘î ŽW18_+æĀ&B…v´ÛyėoëKČã?ũzĨØ,ŽV÷Gŧ‚MKė—“ˆlŖ–Ķuä‡uÆdŨœˇ<,_)ų}š9Ō×,%ģŋҧ…_}ĩÛžá#*Ž`”Ā‘ģ`üOŠ­Ī¸öĒ÷ˇ°Ø[5ÅÁ`ŠTĒXüĖ ’I p4îÂĮzēŽ…¨KÕ ž=*āŨËqpH2ˆōĨ2ÄŨ’ € gžÜŌ!5Ba‡QŠĐ@VeŊœČZPˡnYą€8āäc88ÜڒDC dqʲõÔSŽz÷6í°$>Š(Ŧ†C[ĮöĨžŸe—˙@5~ŗõßųĩ?úô—˙@5QŨ>B$L<œbš™•Oî|ūuė­ŽRdPˆ*)lķR?ʸÍTvįŠ`ˆō^PĢĪ=h™ē'eũiņ7Œ|ÄäZ§;cåĪ5H{ą˛0Ũ÷†{ –ą|Ė7Čz(éIųą×ŠRhÂō6L„dôĀéQˇzķíLq×j†:Æ2÷°öÁüÍZ¸ē#­ŋ$“zŽÜ-¤¸=J”úŸÂ¨œ†äŠ—f ^7AúS"dœ3āíčŠa é…ŊTÖŦC`ZBūbŦ’ NqéY^×$(A2üVKÜí5\Ėŋ&Ū6ŒsKnnĸŒ &īŠęe-ucĩΆÃÃ\ļ[™ Įc }ãžOŌģ+=6×J´[kdÂã-毴­lŸėņÃlžM´Kĩ g¤x-āPIÜįœ×Ļۃą–"p9ÉéM%#RÜÄc8āU‰æg$GAT$b¤žr%æ")2ËÉÜqUĨ'‘íSšh׌ ŧ—12¨%€ČŊKv•¤Æyg|nXPšryŦ}BÚ˙Xbæ3ŽV܃õëø×QŖiŗéâiå` ŖfĶ֟&›fī¸)Fę qŠiMk0|nÖ×ú”¨ČĖĒÅOb?ČĒū4Ō˰ēhȆåw&}yõŽÕl?Ķlo RŌ¨hŽ\`C­ck™ņ͟íDˇÜJ2‰ĮĄĨk 6î÷0ü5jōëÖkȈŪl‡¸QÉūXĢúÖŦ 눟?1é]F‡ĨAŸl‘ŠIæPĪ'}§ŸķôŽ/]Đnô{‚ŌĻøŽÉģ7øŌ-KshTågÕTQEp€QE ÄÜ[K ąŦ‰"•dqßPz×˙ÅĖZ|VĮK´ž_°Į 3 ö)aŠœeFãŋr|ÄũŽÕ™UK@''­f§ˆtW ÉĢY2¨Ë2N¤šÎze€ĪŊ\[[ ”õŊ2[ģŨ6v°‡Q‚Ú9DąJáw ‚Xđx8HhS¤6‚ëKļŋÁlÁ[rĪ”Ûŧ`€ŋ/û#îņ]:…Í¤—v×\B€’Ņ0a3××ĒÖzî™yf×^Û,i’Pe_Ũ?‹ĶĄôĻ› <úeôs[[Ow>‘öQ#á‹Kķ`n ’Pn<üĸ§šĐ%kŲ|Ŋ:ØČfí¯ōZÆĄFÅČÆĶ…_•ˇã';ÖúĨ…Ú#Û^A*ģųJR@Ų|n+ūö8ëŠrj6RŨ}•.á{ƒ¸ųAÆâ*xëÁqO™…‘ĪÁá+q<ÍalĖ÷÷s]P|čäy˙xdÆps‚ ö­m)ėŦ㰖‰ ¯žY°ŖčĄsõú֓Éo;¨iOV ųŖ6š¤Á IĩHܒŧ¯Ē}Á¤ÛY#ÛÂVÂâÚIė-œĩÍԗYųČîˁøųĀ;H 1ĐUI|9tl|‹*ÛQą-ŧi@û+ ÂG•;—æã§ļæņ-œW7P*ŧ˛ZĘb‘UÔų-'BA<)9įɧÕ,ŦíĄžîæd˜žk…ĪĮ=xĒģ@`AĄÍʝ"ÖōoŨy7O( lJ‚Fåä6u'œdÕ!á[á{s/ÎŌššįtJŽj“åų‡ī(*́Ž ĀŽ™õÍ>=’5Õ¸´xŒĸčĖž_ ŽsÔõÆ;QũšbÍ%ÄOąÉ d!˛{c?‡4Žû Æ,úŒÂ‹ŖÚ_@ļqà náE´ƒvXdqģpË/ÍōŧUaáKŸėéa‚+—Ķlmä‘6nÄĖdBJ‘‚ģA]ǐā0čG¸¯?Z^ŅŽĮ‡.a˛U6Fkat%}:w„,ˆ€vĮ mĖiČ;Č"­AĸŨ kÖ)i ĢŪ‰ūĪo™E U\ôöč;qÍu8”m”{@ąÍYxpZ^[Ū­Ŧ wũĨs4Ķ€7´.eڹ동>^™ëPëú÷Ķ^°Ō­u´[yVŌK SlØaÜdAÜŧöĮ×WFĨĪ­ÂĮ5¯DiZgÛ!Iíá‘~Ņo)ũ܃ËaķpWāüøœíŦ­;IķāûPŅ­Ž4ö¸’İØÂē‡H}0ß)#îąFĐzŠ|úŽ5ü=säĒ\é–ē‘6â’ņfۜáXŒ…”oQģäÔÍ_Ãˇˇ6ē„Mao¨Ũ\ĀąÁ,,DŽ™0fxmä šíJƒÔgëFíG´ šļ‘.ŖĒ[ÜFV6ŠĘę(§#˜esÖãkV §…o!‚áb‰ĄŨŖFōBŠpDŠĖ¤Å’V]íČŪ~^kē¤Ú))Û@ąÎčZ[Ųj÷÷KĨÁ§[OG,§æV”ą!@UûëĶ9Į¯KūGÍōüôû6īąlÜqöîÆ?ŋ˙,ķéĪ^k¯ÚaKŠ9ÂĮ$ŪWˇ˛ŪYÁ2´sˆ<Ė6Öy 28#Ž{UKŸ ęZŸÚfyd’A K„’möĸĢ Ī8;ƒ0ÚpKk¸Å&ŅOÚ41õŊ6ęõá’ĘEŠFŪv'ÂøŪT˙yp?_ZÍŠËswcm6ž<ß.92ŒÅjƒåé˙,¤—­uX”`zRS°Xā[š”âŲŽ^iŽžÉK2Ém™c Øw˜d<“ČĨíŧ2ęÂ×ėÜj_ÚŅMöŗ‘/”ˇ øÆŨØTãû˜ÎxŽ˙ŒJ~Ô,q'Ãˇ^}—üJ­žĶo,q¨ųŖ|ųŽE xÉ$˛’á{dk^]&đĨ–’--ĘÂÖåĸ* |˛+?÷××ņ­ü 0jNac•ūÁŸûD0°ˇôN5MÃx‡~|Ŧ}īšûŊšÛˇœö­oéŖIđîbbHžhŌ@7…?žkSԌ îŠ(¨Uf6›CÔ#–{iUGŠ*E^ĒZč‰*pŅÛČĀû…&œwä)Ą{wheRŽŧ2°äSáBOz[›Š¯nâvŨ,‡$ûĶŗļ:ö‘ĘČš&ĢōZœîYÄHģ¸´môK—Rå”`n#˙¯Në¨ėd¸*ÛsĐäT7 æ1~÷qWŽl扉8aęŊ*ĘHéԚk  †U ąøČ4ö_NGĩA.åOCZqé2ĩ‚\\1ļš ãæoe^§ëCifœ“ÆIôĮ_ ĢŖN1 šøų:!ûíøvĢIq˛•ŗŒ#Ÿųk įéžgÎ7Čd‘ŨäîĖrjy›Æ\Íį8Āڊ0ĢéTĨ9Ў‚Íč*d Æ?Ņ"XüI—˙Ώ3vQ§‘.–ņžĄˆãߚāpzŠÁüMĄtŲ*)9žĐ×Ĩø>Ō×MHîH¸šIxŠâxĀNųāžyæ†ņÅâ=Ž<+p…Đô# ÷í^âĻÄ ZŨČXōxäÖ5Ũ•„U›Q’|dã#îŽ+2VåŽO'Ŋ$Ŧ2}jģ˧žIĪ?ã\D€l1*@Ũ×4ũģÔíč:â¨\ÜŦQIûÅķ>ėkœ’O|zcŸĘ˛ÖÜŨÎĸiį“=~z5nîÜ €į‘SéōG˛Ē°ķ]ËīˇëõĢÚF•emm˜Ūā°RŗūqXqBöz¤ĐČō܆ö§ÉŗØŌžmšĀúûUHÁnŸáīO¸ŊK†-mžĸ€¤Ę7-ëZĄļŸ${ŲQQfĮ^;{šâ5BĪÄúXŧU yb˙žĄ)œ*mP’ßYŽŲf#ʍHE= ęŊsŪ$°k?˛ëvoĩ.ŦɎŽHüj#+ͧō)‘jĘ!Šhcg„ UÚ2Onhbšˆ¤¨Ĩ Ģr+Þ)°Ô,ŌŨŸėŗÆ¸1ˇ+õĪaõÍm]jÚ}šĄēģļŒÉ÷s īßņüĒ“ļJ=fŠ(ŽSPĸŠ(ĻŖf5 6ęɜĸĪDYzŽåÆkī@Ô5+ØnoŽ,XFˆ›"ˇ 0Å!ÎXđDDmížĻēzÍĶõ nôÉ.f…"’9f‘˛æ98$ÎßJ´ÚZąØ2>ĻÛĮúd›×šûĨN'ņŦéŧ:ímeĮŲ-Ŗ…Œ•/Æë•|ŋģÆ;g­Icâ‹;9.æÛt¸;Ąp[äČËüÄ žG#3˙oY˜ēÜ$ĄÂ vŧÖ,ĐŠŒBąã€˛FĶMs!hT}ú[Ÿí¸ĩ‚Ę’"ŦgĘQĶiį$‘#sūīs%Ž‘w§›¤’î䅂ŠBŠæ4˛I띚“¸øüGc'˜.šd”Â`Î%Ü\ü¸čÔîéČäfKf+&mJRa‚)fV,ŦXŨ—• ß/Lgŧ°jvŖaxך3Úy;í7—yP˛}ĖsŽF}jQŽÂˇ˙f’97HSĘE…Ėƒ*IÜ1Æ?Nô&ģo&ĨåŲj7"Îņ˛ĢĘš$#nRsÎyôä\ۋB˜đÔ¯<3OqH&ķå=Ē[ÎI~QĪf>ŧĶî|8×›_ …V[†¸ˆÎÖ1ÄŖ#Ŗ ÆIú‚0@"ũ–ĩi¨J"…f]éæGæÂ҉Œ•Čįī/§Qę)u-Dé÷ē\^ܘ¨ûƒc65†hæw°ėßą|ĖĀÜĻ}ŠõΏYCĨ-íȔĒ[-Äíoȑģš8ô9į €sSÚøŠ Žåļ–9REš’ŲXDÛ ŽH]Ũ2TgôëÅO# ē+#O×ëE‹R¸íÕäōʲũÜɰgÛ§=ēĶĨ×Ŧâ}‹įLæFR‹ŗÆō0:.@'Ļxë€W+¸hjŅ\ķøĸ!ŠĮ l6Œ‘ČĶš+°2ÜČ #œúžZÄ6Nƌ.ag)°Mnņī ÁA‡#s(=Æá2)¸05čŦč5Ģ™–('9šH6¨ûŦ™ŨŸ@8į§+ę).5Ģk{—€ĨÄĻŪ‚˛%I ‚š `Öļäë—O1nÛp;S†ŽÁw¨Ãu,Ķ´ōšiˇ3¤×]gluīj6aą$j'ˆú2ŒūuÄŖ† öŽ÷ž­Ŋާ3䅴€9ɨŦŦÔŧĘęZđ÷„l4Í: —+qvę$20ãžp=ĢNûOĶīŅ#ŧ´†BŖ•éô5Éx3ÅÖņiRØę÷qÄĐž .Hmž™ú×B×I*)ŽUenUŗE:ŠJw{ˆ÷z(ĸš‚Š( ŠÚXGkg-˛3yfž2 ŽÎ"Ä~lž &HÛ5KD5Į†ėī- ĩ™¤t‚×ėĒĶŨ6Á ÆŊxõŋ…mmb>DÍĮš˛¤đà e †QōĒFÁÜ ųŽ1Æ7û‘īåN?xSæbą…‡2ItšßÛ¤Ĩ7DGŸ™ mÛˇn#CŒgŽĩb´itŲn'™ey$iœ¨“s9rŲ†9bĩqKŽžÔšØXÆw2Ũß\\Īž&8E*#pá@P';Ž2sė*mKF‡S $‘7ÚOhvc…—fOÔlú֞)0=(įacPđüW×M;\Íų#vUTä§ŨÁ •>āƒU­ü!ĻÁzĶ„VŒ´Œ"0D1ŋ;†đģņķsõŽ‹`QíXįt˙ ÁĨ{ÂM嘪ÛBĨ‘ĪʀąĀęr8u­{›4珞™™•­f3.ی|ˇLl9?•[¤Ā4sŽĮ{á@XÜizuĮ—eul°Hūr‚qˆŗ/–NvĒũÖÆ>_Ŋ]Ō!P I&VėŨgŒä’vũ2kGŒéM͊Æc銃>ŸųęŅHО67nŨÁ#§\U)ŧ'kqacō—žŅ<÷Š9 —!¤%dVf˛kĄŖšØėsį– åĢ—0Ŧ) FǰU™NBŒ‰Üœc ŠO‡ŌQ/Û/ŽîŲíŪŲ]€ĸąˆØŖ-•S“ũŅŽ§;XĨÅŅ…Œ› ËLŊûM¸}˙gKu Ų/˙ŧĀ&ãßbŅ6Æö{‹{ûĢQpĘĶ$A0ė\唐JĒŠÁ=y­\ \ 9ÂÆ^°‡Wûr˙^× ‰b|Íģņ¸“÷ēûqO Û6›obf”G›&šŒ”p€ąã¯îĮˇ&ˇ1I€höŒ,`\øNÂëU{÷2H˛HĻ_yPŪe,8Qœ§SZ Ĩ[˙dKĻšy •]_'‡$žGûÕĄŠL 9ØXÅ:–KËëĢŠQĸōÚQØŠ"Č@ rČšúqNģĐāž[̃ēg”ģY‚Ģ–‰c+ž¸!ZŲÅŖ…Œ­/M›NąąĩûQa “påAiÜäŗÛ,YŽ;ãŪ›¨x~ĶQššæF•%–ØÛ’ŧä8ßSĐÖž(Åācž„¨Čl¯nŦ‚Ā–ė!Øw"goŪdō=yÎ* Û†3wpË šŲ Û;oV “÷:G'Úē,Ԋ9ØXÄÔü7gĒĘōÎŲrČĘZ4)PË÷YH9 s‘ééI‡b´ŠŨlîæļš āM q‚ÁČ, ė،ĒôŖÔįoŒ bŽv2bĐá‹D:c\Nędiŧö+æ2™Cä d1ĪNÕ^Û~ס:…ÕĖäÃ˄QˆĖ„GČŲĪXķ’gHfˇđ„€íōfšP žxäOzĘĶížâs¸Œ[×5Ŗ­H÷;LÅĘÉĩrzJŪĶía1Zf1ÉP}øŦ=ĨĄq•krÚ ;ČÉ\Ö,ēŠĮtV"~įAõ­ŸĸĮe 1Î;×&ā)Ņ…ÕÛ,ĪŽĖ¤¨=ēÕŊ#S—Nģ6#s†ÁĮãYķĸ F?wž WŒŸ99ū*ߑJ6;û˜mõ`ĻCŌp9ü}ŖgĻŋÛļē§æü*ŗú­Ŋ‡AZô‡=ĀZō*ÎPēGĨƒŧ§flBVöô>ĩƒ¯]Ž#ŽjüŌ6ž‹‘\VĢ4+å‰ųņ\¸JķælôęÍB7+]ąy6‚ -ÍGu‘a’=*4ƒÜõĨn$t+یR‰ķõj9Ęėī4ßé…ĒŨ*Ë*7÷ŸĘŦˇ„Ž“:ŪéeūNZ9 =Ŋkøg„*8P€Û5Ņ”PîáFGĩqˇ+ŲŗČĨ§š´Yáč‡ĐÕ­y ƍ$lŖ%ƒîŋũjn‚Š—×ņ(Âyŋwęš5ƒ­jWƒÅÚm¨›÷ ŒY6Œļ==)B.ö)ngÛLŖ—Šę­IŽhÖÚôK-š]*€­ü.cT•y”pĄ›éZ–,C[ķÔķPŸ+Į 6Ÿu§Ü [˜ŠIÆzZīü(Šm§N\„I-ՈČ,rHũ+œņŨã-C<퐅ĪaŽÕ§¯Jö‘h0@Æ8ˆŽBĢŨSõЍÜÚEŽį'ã ´˙Îą¨X%Ĉ>ŊGæ CĨjSXĮöy 1ģŽÕÚøā -ėäp äØįÍq Ŗ=tF~Ō 1=˙Ųleptonica-1.86.0/prog/blend1_reg.c000066400000000000000000000243371506303110300167020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blend1_reg.c * * Regression test for these functions: * pixBlendGray() * pixBlendGrayAdapt() * pixBlendColor() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void GrayBlend(PIX *pixs, PIX *pixb, l_int32 op, l_float32 fract); void AdaptiveGrayBlend(PIX *pixs, PIX *pixb, l_float32 fract); void ColorBlend(PIX *pixs, PIX *pixb, l_float32 fract); PIX *MakeGrayWash(l_int32 w, l_int32 h); PIX *MakeColorWash(l_int32 w, l_int32 h, l_int32 color); int main(int argc, char **argv) { PIX *pixs, *pixg, *pixc, *pix1; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Set up blenders */ pixg = pixRead("blender8.png"); pix1 = pixRead("weasel4.11c.png"); pixc = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); pixDestroy(&pix1); pixa = pixaCreate(0); /* Gray blend (straight) */ pixs = pixRead("test24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); GrayBlend(pix1, pixg, L_BLEND_GRAY, 0.3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY, 0.2); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 100, 100, NULL, rp->display); pixs = pixRead("marge.jpg"); pix1 = pixConvertRGBToLuminance(pixs); GrayBlend(pix1, pixg, L_BLEND_GRAY, 0.2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 2 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 200, 100, NULL, rp->display); pixDestroy(&pixs); /* Gray blend (inverse) */ pixs = pixRead("test24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); GrayBlend(pix1, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 3 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 300, 100, NULL, rp->display); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 4 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 400, 100, NULL, rp->display); pixs = pixRead("marge.jpg"); pix1 = pixConvertRGBToLuminance(pixs); GrayBlend(pix1, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 500, 100, NULL, rp->display); pixDestroy(&pixs); pixs = MakeGrayWash(1000, 120); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.3); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 6 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 600, NULL, rp->display); pixs = MakeColorWash(1000, 120, COLOR_RED); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 1.0); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 750, NULL, rp->display); /* Adaptive gray blend */ pixs = pixRead("test24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); AdaptiveGrayBlend(pix1, pixg, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 600, 100, NULL, rp->display); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); AdaptiveGrayBlend(pixs, pixg, 0.8); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 9 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 700, 100, NULL, rp->display); pix1 = pixConvertRGBToLuminance(pixs); AdaptiveGrayBlend(pix1, pixg, 0.1); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 10 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 800, 100, NULL, rp->display); pixs = MakeGrayWash(1000, 120); AdaptiveGrayBlend(pixs, pixg, 0.3); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 900, NULL, rp->display); pixs = MakeColorWash(1000, 120, COLOR_RED); AdaptiveGrayBlend(pixs, pixg, 0.5); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 12 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 1050, NULL, rp->display); /* Color blend */ pixs = pixRead("test24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); ColorBlend(pix1, pixc, 0.3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 13 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 900, 100, NULL, rp->display); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); ColorBlend(pixs, pixc, 0.30); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 14 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 1000, 100, NULL, rp->display); pixs = pixRead("marge.jpg"); ColorBlend(pixs, pixc, 0.15); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 15 */ pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 1100, 100, NULL, rp->display); /* Mosaic all results */ pix1 = pixaDisplayTiledInRows(pixa, 32, 1700, 1.0, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 16 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pixg); pixDestroy(&pixc); return regTestCleanup(rp); } void GrayBlend(PIX *pixs, PIX *pixb, l_int32 op, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendGray(pixs, pixs, pixb, x, y, fract, op, 1, 255); } } } void AdaptiveGrayBlend(PIX *pixs, PIX *pixb, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendGrayAdapt(pixs, pixs, pixb, x, y, fract, 80); } } } void ColorBlend(PIX *pixs, PIX *pixb, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendColor(pixs, pixs, pixb, x, y, fract, 1, 255); } } } PIX * MakeGrayWash(l_int32 w, l_int32 h) { l_int32 i, j, wpl, val; l_uint32 *data, *line; PIX *pixd; pixd = pixCreate(w, h, 8); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = (j * 255) / w; SET_DATA_BYTE(line, j, val); } } return pixd; } PIX * MakeColorWash(l_int32 w, l_int32 h, l_int32 color) { l_int32 i, j, wpl; l_uint32 val; l_uint32 *data, *line; PIX *pixd; pixd = pixCreate(w, h, 32); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (color == COLOR_RED) val = ((j * 255) / w) << L_GREEN_SHIFT | ((j * 255) / w) << L_BLUE_SHIFT | 255 << L_RED_SHIFT; else if (color == COLOR_GREEN) val = ((j * 255) / w) << L_RED_SHIFT | ((j * 255) / w) << L_BLUE_SHIFT | 255 << L_GREEN_SHIFT; else val = ((j * 255) / w) << L_RED_SHIFT | ((j * 255) / w) << L_GREEN_SHIFT | 255 << L_BLUE_SHIFT; line[j] = val; } } return pixd; } leptonica-1.86.0/prog/blend2_reg.c000066400000000000000000000157461506303110300167070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blend2_reg.c * * Regression test for this function: * pixBlendWithGrayMask() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* In case libpng is not enabled */ #if defined(HAVE_LIBPNG) static const char fname_png[64] = "/tmp/lept/regout/blend2.14.png"; #else static const char fname_bmp[64] = "/tmp/lept/regout/blend2.14.bmp"; #endif int main(int argc, char **argv) { l_int32 i, j, w1, h1, w2, h2, w, h; BOX *box1, *box2; PIX *pixg, *pixs1, *pixs2, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* --- Set up the 8 bpp blending image --- */ pixg = pixCreate(660, 500, 8); for (i = 0; i < 500; i++) for (j = 0; j < 660; j++) pixSetPixel(pixg, j, i, (l_int32)(0.775 * j) % 256); /* --- Set up the initial color images to be blended together --- */ pixs1 = pixRead("wyom.jpg"); pixs2 = pixRead("fish24.jpg"); pixGetDimensions(pixs1, &w, &h, NULL); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); h = L_MIN(h1, h2); w = L_MIN(w1, w2); box1 = boxCreate(0, 0, w, h); box2 = boxCreate(0, 300, 660, 500); pix1 = pixClipRectangle(pixs1, box1, NULL); pix2 = pixClipRectangle(pixs2, box2, NULL); pixDestroy(&pixs1); pixDestroy(&pixs2); boxDestroy(&box1); boxDestroy(&box2); /* --- Blend 2 rgb images --- */ pixa = pixaCreate(0); pix3 = pixBlendWithGrayMask(pix1, pix2, pixg, 50, 50); pixaAddPix(pixa, pix1, L_COPY); pixaAddPix(pixa, pix2, L_COPY); pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pixg, IFF_JFIF_JPEG); /* 0 */ regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 1 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 2 */ regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 3 */ /* --- Blend 2 grayscale images --- */ pix3 = pixConvertRGBToLuminance(pix1); pix4 = pixConvertRGBToLuminance(pix2); pix5 = pixBlendWithGrayMask(pix3, pix4, pixg, 50, 50); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 4 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 5 */ regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 6 */ /* --- Blend a colormap image and an rgb image --- */ pix3 = pixFixedOctcubeQuantGenRGB(pix2, 2); pix4 = pixBlendWithGrayMask(pix1, pix3, pixg, 50, 50); pixaAddPix(pixa, pix1, L_COPY); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 7 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 8 */ /* --- Blend a colormap image and a grayscale image --- */ pix3 = pixConvertRGBToLuminance(pix1); pix4 = pixFixedOctcubeQuantGenRGB(pix2, 2); pix5 = pixBlendWithGrayMask(pix3, pix4, pixg, 50, 50); pixaAddPix(pixa, pix3, L_COPY); pixaAddPix(pixa, pix4, L_COPY); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 9 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 10 */ regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 11 */ pix5 = pixBlendWithGrayMask(pix3, pix4, pixg, -100, -100); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 12 */ pixDestroy(&pix1); pixDestroy(&pix2); /* --------- Test png read/write with alpha channel --------- */ /* First make pix2, using pixg as the alpha channel */ pix1 = pixRead("fish24.jpg"); box1 = boxCreate(0, 300, 660, 500); pix2 = pixClipRectangle(pix1, box1, NULL); boxDestroy(&box1); pixaAddPix(pixa, pix2, L_COPY); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 13 */ pixSetRGBComponent(pix2, pixg, L_ALPHA_CHANNEL); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 14 */ /* To see the alpha channel, blend with a black image */ pix3 = pixCreate(660, 500, 32); pix4 = pixBlendWithGrayMask(pix3, pix2, NULL, 0, 0); pixaAddPix(pixa, pix4, L_INSERT); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 15 */ /* Read the RGBA image #14 back */ #if defined(HAVE_LIBPNG) pix4 = pixRead(fname_png); #else pix4 = pixRead(fname_bmp); #endif /* Make sure that the alpha channel image hasn't changed */ pix5 = pixGetRGBComponent(pix4, L_ALPHA_CHANNEL); regTestComparePix(rp, pixg, pix5); /* 16 */ pixDestroy(&pix5); /* Blend again with a black image */ pix5 = pixBlendWithGrayMask(pix3, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 17 */ /* Blend with a white image */ pixSetAll(pix3); pix5 = pixBlendWithGrayMask(pix3, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 18 */ pixDestroy(&pixg); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Display results */ pix1 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 40, 2); pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 19 */ pixDestroy(&pix1); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/blend3_reg.c000066400000000000000000000177041506303110300167040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blend3_reg.c * * 42 results: 6 input image combinations * 7 blendings */ #include "allheaders.h" #define X 140 #define Y 40 #define ALL 1 static PIX *BlendTest(const char *file1, const char *file2, l_float32 fract); int main(int argc, char **argv) { PIX *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(6); pixt = BlendTest("marge.jpg", "feyn-word.tif", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixt, 0, 0, NULL, rp->display); pixt = BlendTest("marge.jpg", "weasel8.png", 0.3); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixt, 0, 200, NULL, rp->display); pixt = BlendTest("marge.jpg", "weasel8.240c.png", 0.3); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 2 */ pixDisplayWithTitle(pixt, 0, 400, NULL, rp->display); pixt = BlendTest("test8.jpg", "feyn-word.tif", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 3 */ pixDisplayWithTitle(pixt, 0, 600, NULL, rp->display); pixt = BlendTest("test8.jpg", "weasel8.png", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 4 */ pixDisplayWithTitle(pixt, 0, 800, NULL, rp->display); pixt = BlendTest("test8.jpg", "weasel8.240c.png", 0.6); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pixt, 0, 1000, NULL, rp->display); pixd = pixaDisplayTiledInRows(pixa, 32, 1800, 1.0, 0, 20, 2); pixWrite("/tmp/lept/regout/blendall.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); return regTestCleanup(rp); } static PIX * BlendTest(const char *file1, const char *file2, l_float32 fract) { l_int32 d1, d2; PIX *pixs1, *pixs2, *pix1, *pix2, *pix3, *pix4, *pix5, *pixd; PIXA *pixa; pixs1 = pixRead(file1); pixs2 = pixRead(file2); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); pixa = pixaCreate(7); #if ALL if (d1 == 1) { pix1 = pixBlend(pixs1, pixs2, X, Y, fract); pix2 = pixBlend(pix1, pixs2, X, Y + 60, fract); pix3 = pixBlend(pix2, pixs2, X, Y + 120, fract); pix4 = pixBlend(pix3, pixs2, X, Y + 180, fract); pix5 = pixBlend(pix4, pixs2, X, Y + 240, fract); pixd = pixBlend(pix5, pixs2, X, Y + 300, fract); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } else { pix1 = pixBlend(pixs1, pixs2, X, Y, fract); pix2 = pixBlend(pix1, pixs2, X + 80, Y + 80, fract); pix3 = pixBlend(pix2, pixs2, X + 160, Y + 160, fract); pix4 = pixBlend(pix3, pixs2, X + 240, Y + 240, fract); pix5 = pixBlend(pix4, pixs2, X + 320, Y + 320, fract); pixd = pixBlend(pix5, pixs2, X + 360, Y + 360, fract); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Gray blend */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGray(NULL, pixs1, pixs2, 200, 100, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 200, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 260, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 340, fract, L_BLEND_GRAY, 1, 0xff); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Gray blend (with inverse) */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGray(NULL, pixs1, pixs2, 200, 100, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 200, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 260, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 340, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend Gray for robustness */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGrayInverse(NULL, pixs1, pixs2, 200, 100, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 200, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 260, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 340, fract); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend Gray adapted */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGrayAdapt(NULL, pixs1, pixs2, 200, 100, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 200, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 260, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 340, fract, 120); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend color */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xffffff00, 0xffffff00, 50); pixd = pixBlendColor(NULL, pixs1, pixs2, 200, 100, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 200, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 260, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 340, fract, 1, 0xffffff00); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend color by channel */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xffffff00, 0xffffff00, 50); pixd = pixBlendColorByChannel(NULL, pixs1, pixs2, 200, 100, 1.6 * fract, fract, 0.5 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 200, 1.2 * fract, fract, 0.2 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 260, 1.6 * fract, 1.8 * fract, 0.3 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 340, 0.4 * fract, 1.3 * fract, 1.8 * fract, 1, 0xffffff00); pixaAddPix(pixa, pixd, L_INSERT); #endif pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 0.5, 0, 20, 2); pixaDestroy(&pixa); pixDestroy(&pixs1); pixDestroy(&pixs2); return pixd; } leptonica-1.86.0/prog/blend4_reg.c000066400000000000000000000133011506303110300166720ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blend4_reg.c * * Regression test for this function: * pixAddAlphaToBlend() * Blending is done using pixBlendWithGrayMask() * * Also, show blending of two color images using an alpha mask that * varies linearly with radius from the center (which is transparent). */ #include "allheaders.h" #include static PIX *AlphaRectangle(l_int32 w, l_int32 h, l_float32 fract); static const char *blenders[] = {"feyn-word.tif", "weasel4.16c.png", "karen8.jpg"}; int main(int argc, char **argv) { l_int32 i, w, h; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Blending on a light image */ pix1 = pixRead("fish24.jpg"); pixGetDimensions(pix1, &w, &h, NULL); for (i = 0; i < 3; i++) { pix2 = pixRead(blenders[i]); if (i == 2) { pix3 = pixScale(pix2, 0.5, 0.5); pixDestroy(&pix2); pix2 = pix3; } pix3 = pixAddAlphaToBlend(pix2, 0.3, 0); pix4 = pixMirroredTiling(pix3, w, h); pix5 = pixBlendWithGrayMask(pix1, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 0 - 2 */ pixDisplayWithTitle(pix5, 200 * i, 0, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pixDestroy(&pix1); /* Blending on a dark image */ pix0 = pixRead("karen8.jpg"); pix1 = pixScale(pix0, 2.0, 2.0); pixGetDimensions(pix1, &w, &h, NULL); for (i = 0; i < 2; i++) { pix2 = pixRead(blenders[i]); pix3 = pixAddAlphaToBlend(pix2, 0.3, 1); pix4 = pixMirroredTiling(pix3, w, h); pix5 = pixBlendWithGrayMask(pix1, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 3 - 4 */ pixDisplayWithTitle(pix5, 600 + 200 * i, 0, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pixDestroy(&pix0); pixDestroy(&pix1); /* Blending of two color images using special mask */ pix1 = pixRead("fish24.jpg"); pix2 = pixRead("wyom.jpg"); pixGetDimensions(pix2, &w, &h, NULL); pix3 = pixRotateOrth(pix1, 1); pix4 = pixScaleToSize(pix3, w, h); /* same size as wyom.jpg */ pix5 = AlphaRectangle(w, h, 1.0); pix6 = pixBlendWithGrayMask(pix4, pix2, pix5, 0, 0); pix7 = pixBlendWithGrayMask(pix2, pix4, pix5, 0, 0); pixDisplayWithTitle(pix6, 1000, 0, NULL, rp->display); pixDisplayWithTitle(pix7, 1000, 500, NULL, rp->display); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 5 */ regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 6 */ regTestWritePixAndCheck(rp, pix6, IFF_JFIF_JPEG); /* 7 */ regTestWritePixAndCheck(rp, pix7, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); pixaAddPix(pixa, pix6, L_INSERT); pixaAddPix(pixa, pix7, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix3); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "Blendings: blend4_reg", "/tmp/lept/regout/blend.pdf"); L_INFO("Output pdf: /tmp/lept/regout/blend.pdf\n", rp->testname); pixDestroy(&pix0); pixDestroy(&pix1); pixaDestroy(&pixa); return regTestCleanup(rp); } /* Rectangular mask: opaque at center, linear change towards * transparency with distance from the center */ PIX * AlphaRectangle(l_int32 w, l_int32 h, l_float32 fract) { l_int32 i, j, wpl, w2, h2, val; l_float32 frdist; l_uint32 *data, *line; PIX *pixd; pixd = pixCreate(w, h, 8); data = pixGetData(pixd); wpl = pixGetWpl(pixd); w2 = w / 2; h2 = h / 2; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { frdist = sqrt((h2 - i) * (h2 - i) + (w2 - j) * (w2 - j)) / sqrt(w2 * w2 + h2 * h2); val = (l_int32)(255. * (1.0 - frdist * fract)); SET_DATA_BYTE(line, j, val); } } return pixd; } leptonica-1.86.0/prog/blend5_reg.c000066400000000000000000000177561506303110300167150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blend5_reg.c * * Regression test for these functions in blend.c: * - pixSnapColor(): used here to color the background on images * in index.html * - pixLinearEdgeFade() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_uint32 LEPTONICA_YELLOW = 0xffffe400; int main(int argc, char **argv) { l_uint32 val32; PIX *pixs, *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* First, snap the color directly on the input rgb image. */ pixs = pixRead("Leptonica.jpg"); pixaAddPix(pixa, pixs, L_COPY); pixDisplayWithTitle(pixs, 0, 0, NULL, rp->display); pix1 = pixSnapColor(NULL, pixs, 0xffffff00, LEPTONICA_YELLOW, 30); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pix1, 480, 0, NULL, rp->display); /* Then make a colormapped version and snap the color */ pix1 = pixOctreeQuantNumColors(pixs, 250, 0); pixaAddPix(pixa, pix1, L_COPY); pixSnapColor(pix1, pix1, 0xffffff00, LEPTONICA_YELLOW, 30); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 880, 0, NULL, rp->display); pixDestroy(&pixs); /* Set the background of the google searchbox to yellow. * The input image is colormapped with all 256 colors used. */ pixs = pixRead("google-searchbox.png"); pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 200, NULL, rp->display); pix1 = pixSnapColor(NULL, pixs, 0xffffff00, LEPTONICA_YELLOW, 30); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 220, 200, NULL, rp->display); /* A couple of more, setting pixels near white to strange colors */ pixs = pixRead("weasel4.11c.png"); pixaAddPix(pixa, pixs, L_INSERT); pixDisplayWithTitle(pixs, 0, 300, NULL, rp->display); pix1 = pixSnapColor(NULL, pixs, 0xfefefe00, 0x80800000, 50); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 200, 300, NULL, rp->display); pixs = pixRead("wyom.jpg"); pix1 = pixFixedOctcubeQuant256(pixs, 0); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 0, 450, NULL, rp->display); pix2 = pixSnapColor(NULL, pix1, 0xf0f0f000, 0x80008000, 100); pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix2, 900, 450, NULL, rp->display); pixDestroy(&pixs); /* --- Display results --- */ pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pix1, 500, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); /* Test linear fade to black */ composeRGBPixel(90, 170, 145, &val32); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_BLACK, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix1, 900, 0, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_BLACK, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix1, 1250, 0, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_BLACK, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix1, 1600, 0, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 8); /* 8 bpp */ pixSetAll(pix1); pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_BLACK, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_BLACK, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix1, 1950, 0, NULL, rp->display); pixDestroy(&pix1); /* Test linear fade to white */ composeRGBPixel(170, 110, 200, &val32); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_WHITE, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix1, 900, 380, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_WHITE, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 1250, 380, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 32); pixSetAllArbitrary(pix1, val32); pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_WHITE, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixDisplayWithTitle(pix1, 1600, 380, NULL, rp->display); pixDestroy(&pix1); pix1 = pixCreate(300, 300, 8); /* 8 bpp */ pixLinearEdgeFade(pix1, L_FROM_LEFT, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_RIGHT, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_TOP, L_BLEND_TO_WHITE, 0.5, 0.8); pixLinearEdgeFade(pix1, L_FROM_BOT, L_BLEND_TO_WHITE, 0.5, 0.8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */ pixDisplayWithTitle(pix1, 1950, 380, NULL, rp->display); pixDestroy(&pix1); return regTestCleanup(rp); } leptonica-1.86.0/prog/blendcmaptest.c000066400000000000000000000071711506303110300175220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * blendcmaptest.c * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 NX = 4; static const l_int32 NY = 5; static const l_float32 FADE_FRACTION = 0.75; int main(int argc, char **argv) { l_int32 i, j, sindex, wb, hb, ws, hs, delx, dely, x, y, y0; PIX *pixs, *pixb, *pix1, *pix2; PIXA *pixa; PIXCMAP *cmap; setLeptDebugOK(1); lept_mkdir("lept/blend"); pixa = pixaCreate(0); pixs = pixRead("rabi.png"); /* blendee */ pixb = pixRead("weasel4.11c.png"); /* blender */ /* Fade the blender */ pixcmapShiftIntensity(pixGetColormap(pixb), FADE_FRACTION); /* Downscale the input */ wb = pixGetWidth(pixb); hb = pixGetHeight(pixb); pix1 = pixScaleToGray4(pixs); /* Threshold to 5 levels, 4 bpp */ ws = pixGetWidth(pix1); hs = pixGetHeight(pix1); pix2 = pixThresholdTo4bpp(pix1, 5, 1); pixaAddPix(pixa, pix2, L_COPY); pixaAddPix(pixa, pixb, L_COPY); cmap = pixGetColormap(pix2); pixcmapWriteStream(stderr, cmap); /* Overwrite the white pixels (at sindex in pix2) */ pixcmapGetIndex(cmap, 255, 255, 255, &sindex); /* Blend the weasel 20 times */ delx = ws / NX; dely = hs / NY; for (i = 0; i < NY; i++) { y = 20 + i * dely; if (y >= hs + hb) continue; for (j = 0; j < NX; j++) { x = 30 + j * delx; y0 = y; if (j & 1) { y0 = y + dely / 2; if (y0 >= hs + hb) continue; } if (x >= ws + wb) continue; pixBlendCmap(pix2, pixb, x, y0, sindex); } } pixaAddPix(pixa, pix2, L_COPY); cmap = pixGetColormap(pix2); pixcmapWriteStream(stderr, cmap); lept_stderr("Writing to: /tmp/lept/blend/blendcmap.pdf\n"); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, "cmap-blendtest", "/tmp/lept/blend/blendcmap.pdf"); pixDestroy(&pixs); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/blender1.tif000066400000000000000000000007601506303110300167260ustar00rootroot00000000000000II*2& ļ˙˙ųž'ڮ߇!<ëO÷ũ˙ü…™¸˜į‰ú ! ũwiĶōyđˆ1o´ĶHÜū-O ŪBųīū’ ūäâ-2Z—Ō€C€bũ/áĐMéĄp ŸŸŋûö{͆y™Íl7iĮÚu˙L%ˇkĻŲøûĪMwßX˙Ēuꮝ[~î—ę×˙§éēļ{ņ.‡_ÅīÚ}k¯Mm<ā1úũˇî×§ūhˆâūĸ:÷˙œ RæhŽ‚˙jŦŠ˙˙Á˙ĨūëõŊīũÎ#Āŋi¨aSÕ˛8ëČA˙öŋؤNí%žÂúũûM°ƒb“M6Õ~éȏâ ÁGŒKtĶAąI¯iZŽ""!…ûHC8ØĨÄA‘Å6‚ &hŸ ¤ŧ˜^""?˙đ 55*āč(ĀĀleptonica-1.86.0/prog/blender8.png000066400000000000000000000034231506303110300167360ustar00rootroot00000000000000‰PNG  IHDR5/fĀŨQgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœ%•Ŋ˛$GFŋ/3ĢĒ{f°Ë*  ^ŸWäq°1°đ ]­öįÎtwUe&ƚ'ŽwœÃŋ ”cŸsĀ:ŠVL›ex А$į y>Ą–ŒŒû6ÆÔB䠈ˆˆ ‰ŽĻBdˆHąžstīĮžZ@Fdͤ¨ ­Ē¨Š‹šÁž4;æ~Ûú§á´L1IŸŅÜf*ĨŅbĐÖ }ļL€ioÛv;:|Â0 ‰ &’6Q+–ĨĩڊLĤŊŋíŊûHUä ‰ČHˆĐ€”ēT”ļ,ËZWPØûmIED"æt÷đ€ˆI){ ­m=_–+LZOQ%cdmŲ—˜ãȉLŖTSÁŒđ9.Ĩ Iŗ""´ Ԗ]ũ¸ŨtŸ3ĤĮČ0cîÚDŠ´“ HU˜î)I02ŗD?dŅ’|lŗĸ!ö ™@´áécvO*ēPÜ#)pĖ#)*ô;ĢjwpbcĖéĶGw䌮V"nˇÕ*‘sŽ"’æ˔Ųe™×CĮƤdĖîZ“Z"Dˆ”ˆŲ#hĖů/ŗ^~íÃC:cލ€hY (IQ’7qRŽŊ/w ŸĢĀcÄ!Š‘QNZD´V"RFDPbû2$öÛĒ…<æą“đé1ĒqŽCĮzˇV3Khj‘Čpw˙ø"wĪČąoחí%2€D(¤Ö ĻRjˆ aČ>Žã:ÛhÛ§/#úv#ŖC—*[ô°ē’Ä„ÍĖqģmGˇËüøérlą,ŖĖ 2›'0ˇi>ɛeŗ"@X|ŋnZį§Ũ—Rî_Ũm˙*ąKmMsöĨ‹m,k5¤Xd˙ü2ōJĖŦ¯ī_}ũĮ{]Ūe=”RōjĪü9ĒXö_Ÿš‰ĀÄGw*öũČĶũĪõrū\Žw×í¤v•Ų‘‘‘ĩˇLĢú— Ÿy§ĒđŗĩÖJęĪ_ŽŦBŊkëĶ›×ŠHö.õ˛4‰(ú׸nz÷ ,ĮõÅO\ĻĐe•͎oŋûĻDÁė]÷l,’jjeבˇũķžŊ~8ŸĪú´ü÷èöđę›ĮÖsÛ¯ˇ8ŋz=?åžNÛđŦĖOđ­ŋ~ųųģ7wzųūōéˇĪŲNkãqëĮË˗[Ū4öūüXēŅZ‰‘íž –õļŋNåIN§įëõČšoĮ}îûô~ŧ<Ĩ˜Ø)|Ŗôōlq›¸é¯ŋؚœ‡gß+ĶŠ>2l•ā´õ›Įęafbŋ[uīōíųÃËųōa.Ÿž?Ô_$§ĒU ž†X)f\ĩ2L,33Q׋`•GĘzÁ)ĢŠ–“…V3&¨]´Ôjz(‰D.§3˛ÛÆĶã‘UŽVÖû6ÅāašĸĩļjOᑙ–‰NMĐÎbÆåœ\{+Öĸõfá„df‚"æ@FXNæŦgļŽÕRĸĩZŧωJ TETMUļL‚0šyšt.Õ– 9­k‹š ™‹ZkÕôFĒ@€ÖĸČEfį}‰EcúE¤YiÕˆ Ŋ2‚Rŧ8OrŦŸ–Ĩõjé}¤0ĻCˆth¸bI,†YÂ,ŽliûÉ/˜ĨÚ ÂՀ8@40 0™$W8BˆCT_—€¯áŌžB‚ ‚$5§'@Ē„§1üjA’˙õņ’čŽ7”tIMEÕ &4호č^tEXtCommentCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 E=…—IENDŽB`‚leptonica-1.86.0/prog/blendtext.tif000066400000000000000000000007601506303110300172230ustar00rootroot00000000000000II*2& ļ˙˙ųž'ڮ߇!<ëO÷ũ˙ü…™¸˜į‰ú ! ũwiĶōyđˆ1o´ĶHÜū-O ŪBųīū’ ūäâ-2Z—Ō€C€bũ/áĐMéĄp ŸŸŋûö{͆y™Íl7iĮÚu˙L%ˇkĻŲøûĪMwßX˙Ēuꮝ[~î—ę×˙§éēļ{ņ.‡_ÅīÚ}k¯Mm<ā1úũˇî×§ūhˆâūĸ:÷˙œ RæhŽ‚˙jŦŠ˙˙Á˙ĨūëõŊīũÎ#Āŋi¨aSÕ˛8ëČA˙öŋؤNí%žÂúũûM°ƒb“M6Õ~éȏâ ÁGŒKtĶAąI¯iZŽ""!…ûHC8ØĨÄA‘Å6‚ &hŸ ¤ŧ˜^""?˙đ 55*āč(ĀĀleptonica-1.86.0/prog/bois-2.tif000066400000000000000000000757641506303110300163450ustar00rootroot00000000000000II*6{˙˙˙˙˙˙˙˙–ØUü˙˙˙˙˙˙˙˙˙˙ū[—–˛Kã‚™ļĒ'ü2Üē.p~ĶüŒ2?á˙ÏÂūW.0ƒ‡˙ū˙˙C …ü/ņūū­Â×xXō0…!Ä!œ2ū˙ø_!‚y!Ö œŠDHČ÷áreY˙˙đødxÄ~:Üae†0Ĩ 'äÃ˙†ņ?á ņøC†hõ#—RčABŋ\<ˆFŠ"Sã§˙Í /ÇÄ3ā  ųk*_#ÃÉ×( Cˆį ähÂÃ!/˙ đŋà đƒá˙„28xRÖ Ö&á~?đŋ˙c …ˆrÆq˙˙ģ˙áa˙÷ü?üų…˙Â˙˙đ˙đ¸]~$=˙%ÁŽ<-|7˙…˙˙ķ¨(‡ášG˙Hō8 ÃXÖ˙˙…Â…˙øœūDĻ?˙õÁ‡˙ũt< L,?Χ˙ x_˙ôqņ“†y @Åbƒ†LzáĪ¨Zxd3ũnûM?^ņ 0@‡&<Đ@á„k ˙˙øˆˆ‰Ŧà gø˙˙˙ōÕÉpÁ2E˙…‰ŌDäH˙-PÁ!ČeėÔĄįaĮjAŒŒ<‰Ÿü/ĩásēvX 8âx|á˙đ˙đ§~<(AøC‡‘?û…ķŊL/ Ã˙ ‘‡ũfpgĖŽ~@¯Âŋë˙˙†ü)€Į ŒČČĀÎ †2…˙˙ü/˙Į˙ü†ĖB!„ņØĻrPdqN  !™5üų†D‡‘Į˙Uø]ĻĢŽ@S˙…ÂPūßđ„pķ€ÁĀĮ˙†ätÉäę8Ryw‘Â˙‘˙†#˙˙á˙˙đŋ…įQ˙ü øÃáđū~D‚$dãÉ˙ßá˙˙3ĮúŲ /Ã˙‡îÂ˙˙ũõŧ0ƒ ķ†`ūė0ŋ…˙˙˙¯˙4 ˙đøŋ˙ü/æĪ'Ŧ=B˙ŧ/…§ …ķYøX… ˙˙ø\,>á ˙˙˙ü9Ôɏ˙ÆãC׎_đēÃÂü?ķ|?‡…¯đŋũ˙ū‡…˙~˜ÂAņÆ ø˙˙:™É˜~ԉ˙Ãø*Į˙˙˙˙˙˙ūB0ƒđƒáüDDDHtҚ8dōĐ(dAü/˙ū˙˙_ū;áĮÆ`""""ĸ"9/Ãá…˙¯˙â""8oøX…˙ _ Į˙˙˙˙˙˙˙˙•ō1G˙@S$Ģ˙Ė–_ūA˙˙˙˙åg43ƒ4˙˙áņ„C3€ÁĀBœŽŖ4Ž^L˙˙˙ ˙†x āg8 'H1„L"á„-$xlÂ"š!à N21˙˙Ú˙ũĒß÷Ü đƒ†Pá–Öv0C´—ūЋ‡Œ aHķ'C'ų<†O!ęN?˙:ˆ†G°žđŋ˙…˙)‚X3ąĮ˙˙˙đÂø_áøPƒ†G˙ķ@Æą#€ÂĮč~øp˙˙P+>ԋr&ŋ'_×˙×˙ü/mt˙…ũâŧ%ũ…öp¯ ÎÔ¯üž|†0ÁHõԈ9Šäzá…‡Ü8pÉü ?áø_Î_Į˙đ˙˙˙ū˙˙“xA˙Ãü.˙˙3@˛ Øq.9ļz axg/ ŽPgS˙˙Îďøoîß#Õ˙đŋ×˙đūūŊølr dĀ㌠á×ė<ā! SâFĖĘ"=ׅū"QMA‘Æ Ž0°áđ×ī˙˙Âü~á…˙˙ ņøX|aá€Ųã4(>gG¤ h'ã­ņ:Cá… ü0ŋ‘˙Â˙˙˙_?˙˙áæˆ|†| ā0 „20†+˜.`gÁ ƒA `đ<‰dg"˘äå~2?†LpĻ˜W…üŸäã#ˆdLüŽ:¯Â_]tīøP–˙ģŋūøÃáîáBČlΆx\ ČāÄ<*""""?ãá…ÍLŸá“ø82y‘ūGføyA‘Á|Ž?ūL/ō˙˙˙˙ū˙˙ü/ūááááá˙đøA„pČĮ†LxyC"Į˙ü? …đŋĄ˙Oø_˙X ˙ō O˙˙˙¯˙˙øã °Â…˙á˙˙˙˙˙á˙˙Įĩd{ōČõÂáxđ˙ČĀŋ‡áđ˙ÂĮü<Å˙ø_ü/đ˙˙˙˙â? …˙đ¸_˙‡˙Ã˙đžãr `ˉXãŒ/Į›-aáN_ö˙ūøũuáyķū˙äzû˙˙  áĮa ~Ãđ‘(aHZCČaDød(đō P/…ûÂ˙á˙˙˙ūapã "G0ļڄ3>Pŋü?áū@a`_˙˙˙˙áđã#‚ab"""""u22„‡‡Ã"SáųnĐdsÂũ˙ß˙đąņ™VxA˙įcš Ã2=„ü/ÆGų ‹˙˙ÃÂ˙˙˙…8!Áš ˙˙ņáN 0φ|˙˙Â˙ø@Â0ƒ9 br G…˙č/ūG¯đÁIĶ'aIŽ˙øp˙˙á˙˙ņū?áūSI/ü/Ã˙˙ßø”ĐA”Ų˙đ¸_ø… ūž¸_˙ "  ž#ÆG)ĢA‡_ÃūœŒ2y˙0ƒ‡Â!S)A…ķ@ĨHgaÃ#™4Ž&¸3S#Xá˙˙˙˙ĘePJBČ`[Äa"0Œ0°á‘į…&?ø_˙˙đ„8Îpŋáb""?Čã˙‘åáûõ×˃‘į„ä°äüdۖĮü0šŽ#ßū “Î˙ūZP˙ áM ” ÅI°—ü ˙ã õ_…á˙Ç˙ü21Âü<Ëī‡ūđŋĮápƒâ>F ę8R ˆãŒ” ˙„á-BJô)øáÁ„Fąđƒ˙˙ÂņA˜s…đŋœPŧDxP¤ … ……A áB‘5 ø\ÛĀšrŨÚâ"?˙˙˙ōŲŠTĶ„$[ü‚øå˛\6Ū[)˙˙˙˙˙˙˙ ˙˙˙˙ü/ū[!†šŋū> Ã“Īū"#˙˙˙˙˙˙,ÂKË9xĸ#Į~2” ˙„"BĨBÃ˙á˙,ęÆC22Ç˙ū˙˙˙ü/˙˙ü?˙Ę#:Ÿ‘aÃ˙áø\ĀPƒ>ČfC3¨Hfu˙˙đŋ‘Ã8f7,Đ! áØ_˙Ë4 0eXx†UE+–ƒ˛Uû×O…2 Â!Ŧģ ÖFļŋ• cä0?ūaZa˙‡ú…ÂŠ†Œ•؀唐ŋŠØ°g#Ú߯đ§~a{!‰W“4ČQōT˙ ãō°a˛–oøP¤Ė‚ūAōēÄPÎTe)ei2€Ė"ášJP@˙*AŒ,C˙i÷§˙ūPˆ†Ã?ÎĘĮ…ō¸œC'˙ōlŦ˙…Čƒ“T†eԈƒōmŸ˙˙ōģ Ö(aÆ`ÂŒŽV•ĄüC 2HgS!G˙øÂü2Ŋ^žd.Ei˙˙„" Ķ´āä`Ė  Š ¨8_¯­ø’Ã&˙¯~°šø)đ§Æ`IĄ2 Š_ûĩáB ›4™-D`‡Â˙ū˙ųņÚÁ“(Ĩ˙ä×' Ž'퀐Í4Đ|?˙áø\ÉP Ȱf‘`ÍūN!ÃÂ˙˙˙˙ /2o˙A˙áA퀇…ÎĘÃ0Ę ŋ𠟅øgeÜ~?†Ž(+˙õ˙ūž8ŋįÎ˙… ÂáĆX´Ā`•GˆæG˙_ųØ cÉü0ŋøAäy“˙#Ė28‡˙˙ äö5 ų*‚¨ a˙ !˙Ã˙˙ ˙ņ„"!‹o˙™ /đū?ūü>?ūv3G˙ōÔ/ä*ĀPŗŧ?˙˙ø^2NC˙øgi¨‰ƒI“ŋ ŗ]æBÁđŋ…'˙˙˙øB&T2! ų ?˙˙˙˙˙Â˙ OeR:Œ˙˙ÄDDDDDDDDHpGH_ū˙…˙ū""#Č09 9˙ ˙˙áBĘPĘPÃ˙øˆˆˆ>A€ŋúÚđ˙˙&Ŧ)Q1ČöGY‡!G&?ü}mđÉėarcūüCÚę""A´r1ÍAČĮ4˜æ€˙ë˙jĢīđ„DíTĪ™T2ięf"9‘Ã9#™āļ˙˙đĻáũĄ\* Įø_˙ū"""""C 3Į9˙˙… ˙š„ö9rc‘Žh4ŽF?ø_˙Ęåƒü‚˙˙˙ÄDDDHeŽLrXS˜?˙ ˙áBU ĨØŅb<` A¯´˙˙˙…ü/˙ņ x2ŽaĖ9 h'ZáđÉĮá˙â2rOÉī ¤&XOSNāƒX˙˙áN ,HŽ`ČâĖÄb#Æ 29‘â8ČæGŒE~Âū˙đŋ˙ÄDDDƒ\Ørcš 8_˙˙˙˙˙ü/˙˙˙„#‘Ŗ&FBĸŽ 91Ė9’ˆøˆˆˆÂ…Âūâ$de\Gˆáq; Ę@[ŋ˙ë xŽĘsg+ ™…˙ņŽ>Ąôũ4ô,DGä ›T0æĄ‡&91˙ˆˆˆˆ<ā˜äĮ4–?ÖĶUQáMYÂxN„čO+Į˙ų aĖl0á°smL‚paČ(á˙˙ `rcš Yœ§6Ņ ˙˙˙đ˙ˆ‰¤b8gâ9˜°Įúâ# Ö9mšÁáøˆˆˆÉqȃo…yDːĀū0°ßˆˆ‰Ôhds#™#‚ĀĐ;M?\Dy7XõUņ xfŽLrc“Û _ü9ø<ĖâÄՐaĖ9 Ã“ōc˜˙đŋ˙˙ū"""$ Ž[•…š\h4Ędpáü-â#Æ ÆGˆá’ *š§éōŨ`!˜Ë˛ pų˙ÄDDD‚Ø9•…aN^ĘûÕ0áĘą!b""&TÖ1â8^šiߎ˜0„HdÓÓAŧ˟Úkˆˆ‰Ãl|5 |?˙áÄDˇTŠHˆæG2ĶOņ˙˙ūČÃk}­ˆˆˆˆ‰ €Q°Ž/ø_˙ÂÇ-ŌĸĶ˙XRL/ Fˆ(R=Ã#øk˙Ã!ž8øūų‰”/„Cãå(Ã˙á„?ÎY:˙2¨aūdfŋéøø\-2¨~p† B2…˙Âĩ˙˙˙đđĄI™>ļ˙ĸĖ=‘ūü ōy‚Éú„üž|ėfG ø˙†˙˙ū?øūvH!f­qø_øņ˙đ ÉāA‘ Ã˙øX˙˙ū‡‡˙Še€…e™Œ›Ŧƒ“Ī˙˙˙č,>!ÄIaú§˙˙˙˙ŖP!€¸_˙’H…“…&á@Ķ˙˙˙ūM'áđŋņøA…‡ ‘čÃ˙>˙ü?đƒ+‹ü?ü/ ü0ƒ ˙˙ÆB˙ņ!Ä8âa Āãø‰Qį‚ᜎ)†"čŧb#ÅŅÅ˙ņÃ2,<ȰO‡đÂ0žF>û]?ĶOđ˙ūŋ˙á×Į!0ááĖ…ƒh ÎĐ %:C" šŋ#‚l'˙ų lŗ „MÕ˙˙˙â"##™ƒ#Äq‘â8Čņƒ#ÄxĖŋü,8ˆˆü!ᑅ=…A œr80äĮ&9 ˜äĮ˙˙˙˙dAü/˙ŦC˙˙ū""""""""C Đ2 đ˃ gv?ëâ""""'zŒøÎF ÄG`lÖŸũàģí{'‚h2âØa˙ú… á‰HdĐÎÍ ųĀÍ#øÁLŽ€¯˙đš\Rū>Ã˙˙â"@đSÓ˜äc˜rph6˙…˙˙˙˙ˆŽ&Eœ¤3ņe#‚Ø,˙˙ČQ…˙üŸ˙˙ņ!Ļ<ŽËŒÄGˆã.Î8˙đ¤cápŋđ„Cˆ“Hí*0ds#Äp4˙­Â˙c‰ C“Ž 9rcŖ“˜æØr< ᜰĩ˙ü6Úˆˆˆˆ‰Ã.]˙˙˙˙˙ũ‡…â"'†WÔgĖė3#Äs#Æ‚8ČᒠpĻ‚8ū""""""""$28˙ū)‡˙đđŋäAČ,˙ūjüDFB@`—2IČæG3X:öJA„˙ˆˆ‰qČW›Eā¨?‡Ãō´`‡˙˙PČĮÚ}Ʉ’C‘¤"DØäĐl0æ‚c“‚c“ƒh&91ú§ëá˙õņėa˙|–AøKÂū×Tī´īŽ9 > pö•@O˙ ŋáúÃČ툈ˆˆˆ‰ ĘP…(ÉĄ“C:ÄxŽg"9˜ĀĖDp[ ß˙ŧ/ä*O˙˙˙˙9˙ū"""$AɎaĖ5ü ˙˙ÂņĮáøˆˆˆq“Üá‡4ķO˙øp˙ aOû.yÁŗf`)ņ$N°ƒÂúú›ŋ˙â"""28.\eØ/˙ßééøÂõAz§øˆŽdd3ã:Ɔb#Äq‘ĀÔ3ŪĢ ˙Įá˜0D‚8"aÂ:Ø'ũŪDË.ũ§Úâ""$4Į!Œ4sA1Íæ˙ÍÃÉĮ˙˙äyà dq˙ūqįa2 Č‡zƑĘ"8d‚¯˙˙˙ü/˙„G0!…9Áņƒ0dč⠑”?âC,s$Į…+á˙0|DDDDāÆ|ža~ŧ,0š1ü)˙˙˙M<|đü/ü/JĄŸ2-s028ČæGŒH6˙퇸^˙ëüDDDDDDDGĮáNâü.)ˇ˜˙ū?˙ú†F<$›Éŋ˙ūž8ˆŽ% ȑ•C#†sx5á˙˙ũ…ÂĮQAxˆP9 ã“ØsAŗ˙˙…ã˙¯˙ đ˙Öč0_'ŠĪŊHÃ'!BbF˜æˆ?˙˙dxŽdqæG29‘ĀĐ˙ųUÖ<.`1ÃđƒōŦO˙˙ˆˆˆ˙‡‘ĮǓŽÄDDDDČ$b#ŒŽdp¤p¤p¤p6 ũ˙á˙…‡…‡™+škę¸Č ƒ‘ ƒš†JÃü ˙ūüDDDIˇÆ Žds028Čā Ž a—˙ãá˙ū …%‡˙üDDpÂø_˙‡˙˛áœ¤Ž#†H2˙ ü?ÂáL†@‡–C ˙˙˙˙˙éČUõ0æ‚paɎF?„‡˙…ã Ã;×MW_ü<,8x/|DDDGņáx_˙†|á… (X|˙á|Ã;ĸ"' ÂđČä3#˙ú¯áņAÆ åJ˙šABū˙ü(P„‚S… ˙ū×ų đDÖ?  ÃķLrcà ^"0šd3˛÷Ã˙ū˙ Lrcú˙ĮÃ˙#.˙ YL¯ü.÷Ü/üDx_ČCÍ˙Â˙0Ĩ‘IĖ… á ü<)"Öđŋđ„#˙,†‘Ø÷ÆfX˙á…â!˙øø2Ģpßđŧŗ¯Ã ø^DōĖT9\!Ryf,MŽOŖ ?‡áxūYŖ‚˙˙˙˙˙˙˙˙˙˙˙˙–p‡ūA_×đ˙ü ōÖÔ/˙‚“p5 ˛œ9ڛ&áA›Õ=Wđ ’Z–X ų7( _˙ČeáI°ÃË‘`gj†MŒ§&é—ūĀäcųđƒ%T0ˆČcÎl#Éŋįä0?û˙ū@Œ/ xä>C,s&ƀx'ŋūATxy ?˙…‡2ûŽB$mÖšØ ‘Ėų™Dp<˙g˙˙ x_˙üĘ8Â@Ũ¸ˇˆ†L †ž ˙˙ųÎŧ/Ãđ°ørĻęū{øAđüÁ2h†aōŖäkđšR áa˙…âAĨšÃđ°˙ ˙*â8jáÃ0ųÕäA5˙˙áđÂß˙õüOu˙Įđ˙ž˙˙…đŋŪAd/…˙Â˙ø]˙˙˙˙ûå(˙˙ BŽ˙˙˙˙…øū˙ũxgf”â"""­4JŽë2,Ļą‘â8‚Į˙üÂūķd0cō¤ áü?˙ˆˆˆˆđŧ?˙ü/ü?đ¸_ˆ”ƒ)4×F#G0`0G0Ûū˙+!•3á—ä°`ŋ…‡˙˙˙ņđđƒcëøūĄ…˙˙đ„DDF@ÁQ ę@Äx^A7Ÿđ¸XáÎĮ˙ ÷ü…FaaHņū˙!˛8d6lkŽv´fZŽ$ÐÎi˙ū?áū˙… ˙ūw— @Ā˙˙…ų*˙˙ņ c—…XȰf˙đüĨ_˙įjk˙iČ(†A˙˙†Cúâ""@ÜsLs@É$b˙ü/˙–‘ÖA(C-(ˆšĄ Ô 9‡&9 gųÔáŲÂņ…!°pŋ˙œ¸˙sBŽOQ‘‹˙ū<ė …ū""ABƒ4Ō#Į‚9‘Ėų‘Ál1˙ü/ä6˙˙ü?ø˙ _1Gvk_áü/ņą˜úiÚ˙ü đŋæē˜ˆˆˆSƒNƒ“…˜äĮ'Į5 ĒĒ ū…‚đČgŒ)ú$†wæI ĨJ2”e$G`ÁČÁ‘ĖŽ!#™ÁG˙˙đR˙ūūP˙˙˙˙ˆˆˆˆˆˆŒĐB80G°ŋ˙Âü>P>ū"R DDDŒŠĀ4šâ~Cdd(áA@ņČŲ‘ ą†h0äAɎCTra–iü? ˙Ä?˙˙˙˙Įđãâ9’,‚aa…ō" ņ †ü/ä(ņeJ4 Ķļ aō ¨ūü…˙ŒíXČw˙ÃøødáOáà %@Ŗ †? …áÄ9ÚQ‘ÆGˆņ‘ÁŦĀ`ŽŸˆÎGâá_¯ë˙ü Âôv/Wûü?˙Â|•üy ōŒ†Í~ @Āō“AøˆČrĄČ˜m‡˙ …˙á…ķąa ˙˙Â˙˙ɐ_ūøÄDDHjŽBŽFåqœ§0Ҝ§6ŧ.˙ČáB…0ŋō0"cËééú˙ãÍMŠ˙˙áīÄDDDDD†ŦHã#™ČæGˆņÂ˙ņõ…¯ū$¸Ė€A•a€Ķ#š˙˙ų˙AÃ6Ö9( ü(^"""""9qÍ(ķGŠKđĄc˙ø ÕfCf˙ų øD*˙øPĻם@ÄDDDDH?ŽB9 9n^æ‚đŽ0Ī˙˙˙Nįa@ ‡ˆæG28„xŽĐNû´ûO Ã!ã˙đĄaųŲ`eí~ÔDDDDDDH(˜äĮ7†G˙˙˙Č`~"""1"e„ Ë   †ZCjœÎ?˙ķĩJ˙"@ž˙đŋ˙ " 'ķa Č˙˙Æ˙ ÄDDĘGŽ€Į˙˙đ@đŋ… ä 2đPŋ>˜xX†A€¯† |HČėČdpÁB8S†GŅ€[ß˙˙˙…˙øÂ˙ác Y*?ņÍ(Č(ØQ5CLsA=˙ øY …_Âņ˙˙ü0Ą!€I!?ˆ&eÃÂ˙đü" ŋøPŋ˙ū’ƒ…˙˙˙ü-oū˙đ¸_áđČbZŲĩ,‚„ ‡ųū ø_˙˙˙ ˙á~!…!ŗj^ ˙˙áø_ü‰ž@[Âá|/đød.Ō‚ ,0°Čg˙˙ũ­˙˙ Uá|/ÄG;(ÉEü( Ô/đü/˙ū/đü(X†hü(_ …ã˙õđ¸_ ‚2{,!–žŊp…˙ã˙چĖpų ŸûRpOōöĨápžZ5ŧ/˙ūų( đŋy=šx_ķ,3ąÎü/˙ĮácážCfÁ?ø˙•A!…˙˙¯˙üžĖˆ`pŋø/áBū?˙đ¸\(\(_ü.WVáHP1á˙˙˙…˙Â˙˙Âø_˙ üŽgĮđ¤c˙„_Âá24?Â˙Ã˙˙˙ü á˙ †I˙…û2 ,..˙đŋû^ đÂ˙˙ŅŲ˙”GĖü˙˙˙×ōzá‡ūō  4"Ņ@ü. ČâĀl ˙…˙Â˙øCđŋ˙˙øXÍMƒ„C8IĀ`Ā0 d\#‚.áČ § h ˙˙ ÖGõí4˙˙˙˙đ˙ áp÷Îp—…˙đĄ/ōy#oÉū<2?†DÃü2eüœ‚ ķA?Į‚ø^#˙˙˙ū…˙˙ ˙ãÂđđƒÉĸC‡Ã˙ … ˙˙ᜠH=|Ã˙˙˙  áB˙‘Á>Ũ¯Œ.đƒááÂ_ ü,…w|/˙ū˙ü/üųHbđŋ˙đ˙‡ū(_˙˙ĪÜ?˙˙†ø~/˙˙ø^|Čcđ˙øÃ˙Â˙…Âáp¸XpáæÂđÂūđŋü.‡ü?˙á˙˙˙˙đ¸_ü/•Ձx‡ˆ>Xg ų‹˙†˙†˙üđ˙˙ø^… … ø\/ņĮaaáađđ¸X…đŋ˙ Đaɇ…Â_˙‡ü?đŋū˙˙đ„8Ádpą8~õ˙øˆˆâ0ÃĐ/¯‡˙ _áĒũūŋü%_˙üDjŋ…ø~E ˙˙ū Įū`Ą ˙ĐPąū˙áīđĄBááÆ-¨ū/Ã˙đŋ…˙†,Ã߯˙¸˙˙˙˙˙˙˙đŋđ˙ ˙ ˛ ˙ûáxy72 ™‡ø_ü/?˙˙á“u ËÉ@(˙˙˙&á@ۅü(_Âü8|8˙˙æ@€ÆU‚Š)ūú˙‡™"ŸūMÖ/˙˙Ãđŋá~ 1ÂĀø\.v(x_Âá–C#đž‘ Ë˙Ģ? á˙Čl’§…˙ū˙˙ōpNK^ üéĘ Č˙øRZøĶ˙\†pJÂÄDH ŖšŗjĖ9°Ã›ĖĨ¯˙˙˙˙ü(\šP_ū""""$ä{€đ°đšn¤äaeĮ˙˙˙‘€×ČæGĀE?Á~…""E ᝏDxÄGˆær0ˇiđĄ.˙…†h|ˆfļšū""$Į!›ˆ9‡0æĻ˙‘Œáņ1/  ¨žĖ9 ˜äH˙˙Âü8a| ˙ū"""$2ŽaȘ@Üs 9 Û˙đ˙ü!)aØHÄGŽGˆņdp3˙øA˙øX†vPĢ š_˙ņ!‡-Čܤf˛†ĖŨh?ø×ÄFL922$29˜28„s#´ôĶĶ˙ōg!ÂīÕ;U†z21Č091͆ Ō.…ɏà ūũˆ“Rƒ,ė  0@ĸWÜí(40ɸP(Q(ņ;,¤.Ö2iX_;X H`ÜĢˆČ]šdIDËÎY+. ‚-ÚÖA‰ō /ʀå‘P0vX0“ ¯X0U¨är ūNJ˙>A >•ų¤5đâdE8g;<¯€ĶųؑûÔC áÂ˙ÎԄōŦ˙ˆ˙–JÁ AJŸ Ė…ü’_ü›*ū<˛  †ƒC‘€ÉfdN‚… UôīY7XĐHāŌĢ *œÖ'‡Aa„7*?ÂūcO˙‡ų7T yØ@Í!ƒIŽ:ƒH_<,…&⁚eđ˙˙!ŸáōēÁų@&e¨4A P\xP§Pš@$0¤Ü 6ŊåÁˆ2:˙éú…˙ę0Ĩ(Îõūîo’ ÁØabC,Ēh„øA˙ä°„ėj%Æu!~A Å ÃüŒkĘĄįhø~ÂÃū4 Ķ*ÁFäÜ XøS$đ¸FCA˙ų˙…‘‹püīÁü.&wáŖÂ"g2 |đ4C0ķĀÜēā˙đŋ˜p¸]Š("9˙áï ƒá*bJ„…ķąÃ4ë ˙]QÚ¨ßũáĈ>!ų˙˙…ãSH¨šRüG( ‡ ë{‡áe“ĪÃū$A Ø!—ą¯ū@ƒM8RYü ˙ø˙˙…‡ø_ ^ų 0GĖāøAáxƒũ; $0i#ƒA°i2Ô3pŋä\ø˙ü›Œ =ūŸßÂár ˜'üq­ú}¯ød  Ōk˛=˙ä3 ^oüėpÁŠH¤3ĩ#8dxë˙ȃü?ōpm˙ĮÃü,?˙øxB!‘ iķ@¤pĀD˙ūđ¤AÂü8ˆ’ņHdáC˙ņ@ã˙Â˙áß˙d¸fÁ¤Č0hÂųÚHė)c ūLĢ˙æEF Í˙ūäc˙˙•ë ˛8P¸Pŋ˙˙ž˙ķášV>f°§#ŠXʐŸÃ'‡đøq\0Fĸĩy Ã!ąY:Ã˙˙˙â"$4Į&9’˙˙˙˙˙*—˙@ÁØP_øp˙˙ÂđūAÄL‹ŒŽf˙Įá|! ÎåšNdŸ ˙˙…˙‡ų‘ 4’@P§e€ÆFŽë7˜sF?T˙˙“*øđ¸B>h29˜?ß˙Úøˆˆˆ‰ ŅĖ8dp`Ždx2""""@đ'ˇ-Ė8eŲtqG‚đŋ˙üDDDDH Îú‰r8ČæG0'ģõM2d¯˙äA¨ˆˆd{Â?&91˙ č7Ū""""ĪDxÄAŦ?ûáb"ä""W.! Žf"9‘Ál1˙˙īáÄMfvĘĄœ,$Čá’˙˙ÄDH cR ą˙ øP§ī˙üœC“qhDDíhČ~0f##Äs#Äs128d…˙ū˙…°Ŗ0!øäG3G29‘â8!ũÃ˙˙ũ÷b""$r!aDøPŋ|2”3Ę?˙˙øoDDDDDDÖ `†ŪšÂÃ˙éÂ>#†HeÍŋÂ˙ƒXäH/ s2˙˙â"$ LÃđ„Dí*9â"$2AhrĮ0åše?N‚‘Ä# gûŋ´õÜÄG2<É›•ÕË)dGŧ,?˙á˙üC;€Ī’ +…d¸™eæZ™ˆÄGÂüėš˙Č g ūv äØHJâĀBš|˛‰†ˇø^"*]Ēë˙ÎÅĻŧ" ĻÂ˙…ø26,đXy'!ž OįcA Ã; 3N^YRC˙Čã ų6T#ÂyüdA.""$Į3•pšŲ@`.dT‡ūN Č!°ß§˙ÉÉI‡Æ§&UÄDáš91Éį áB˙ü<!<&¨h#A ˜˙ü0ŋW, 1 ƒø^ÄDH4Á‡0æÙSá˙…&W˙ÄH$RG"aŅpÍ%āˆl,˙_‘ďU×û^ņČæGˆæG3Šū"w¤vB8Čáú˙ü5Âø\˜ūˆŽ%`Ī…>3¨0wâ‘#Æ Ž Û˙˙Âø_â""$yˆâ”ŋ†đü/Q%ÆU#C)#ņ‘â8„p¤pÉ?˙æ°× ˛ĘėDDDFG ŌüH-‚̔堤x˙˙îUPĄ~'i"v¨ ˆˆˆˆdAĸbFÃa8§ë˙˙ˆˆ‰ ąÉŽa͆_^M/öēb"C<rc“ŸÂ˙+Ä`ČņČæGāļ ?˙"$ gt2$3ą‘€¤s#†H˙˙Ęŗ˙ū""@đZˆ9ˇ˙˙˙â""#øq$†GˆâÃ$?Æ,pÂ,gc‚Á#†H^ â"C$5G_˙˙ˆ‰ØA’ņ0G@Uø_į`A–'aC0!DGB86đģíD†@ äc“Ų1yËũÂĩ˙ņ-ôˆã1ĖÁl3˙˙ã‹Č÷O˙ū"""AČl‘īū""&QÃ$ ü˙ xešN[—´˙áÄČHČņ1â8†ÚwcūĢiŽ"$2G†ĐLr9_ ˆˆ•Ų$G29‘Ál3˙đ_˙â""@đSƒ5? V"'j㈏Ál>˙ū"#â""&CQˆŽdpÎGŽDpÉ~ĶUĩüDDDČš˙˙˙ø˙˙; ŋū0ŋÃ˙ZŪ˙ÖŋōÔĄ˙ņ…ūøx_áá-a˙…˙ 1]ūƒëߏ˙á˙…˙˙˙˙ü›ŋ˙˙äfUŋ÷ōT åb˙˙đĨš_ äLō€ŋ˙˙üDDDęgxdq‘Ä0 `Û˙˙ü,H)˙ …ø~#Aŗ˙ū"""""$ š¤+˙‡ņ˙˙ሉ2ŠjüDXá˜2Tƒ8dj˙˙•Ŗ""UÄf¸Ō:ÄqÁl˙ūđ˛"!H (˙Ėŧ3Ū˙ņž9h0ŋøWÂĮ˙žđ„D9Ų‘˜29‘ÆGˆāh p˙ŽC<ŋ…˙2€PJƒG˙ũWÄDH °DŒrsd_áđĄ\Û˙ˆˆĢ2d„ŒDs# ˙˙q x5Á•!đĄ˙áÃū"""$Ņ˙˙ ˙˙üDJA‘@Í:ÄxŽ29‘ÁŦŽŽ¤xņČėãø~EĮųë¯˙˙Ä~GYō #íaB˙˙U„ž""@Ą †X‘ Ŋų‡˙  xĤ8{…˙÷˙&B_ū,ė° ĖÄG™ĖIÂÃė†x˙ü'ár#ō ÂēÁ¤ŦÃá˙˙ n9š I ū‡˙ ˙;(ūˆˆˆ‘`Ë>dp3˙˙˙˙…Âá a~"""C]ËÃ9BŦ…Á˙ø_†gÎárĮđ„̞:™#Æ — Ō8΃€xg#˜2Ž§ëÂōPáÃü‚˙ũ‡đÚvēwøˆˆ‰QÃ#Äxgd—…˙#…Žŋ˙°@$/ŠdlȆhCA”˙ácøä 6y(ü<,?!…Â…Â˙‚Đæ˜ã˙Ž˜˙đ°ū_ø‡;ĀË!ŒĀƒđžø˙˙Ÿ PƒÁ|/ paĖ-ü ã˙ …‡…aÁW×ņ!@`ŠY29‘ĖŽŽų …˙˙‡á˙ ŨøˆŒŠšŦ–á˙ņ… „eƒ˙æFƒ,ė¨2ÎđĖ4 müÃ"e˙˜ŒAÂ˙Įá~üDDDƒXä5Į0äH4rpA ?˙ü? …ų—†ĀČg˙ˆŒ„ĸ$˙ã üDDDáŽđ¸_ …đžv( !aņ҇ü/à ˙Ųxq&‚Ė—đX#˜_†ØäĮ!G0äđˆ9‡!Dŋ…¯ ü†|91ŖđŋüDDDDƒm—rÜŖ˙č.˙ød3īđ˙â2(@Ô0=uO…ø<5G& Âá|/ū`3åXl ū"""$āŒsaČé‡ūáH øCÂø_ūR†wã%A°×â9‘ÆGÁƒ@< Čá˙ūDd{áūáHcÂá|ę2ą|?˙øˆˆü˜‘‡!–?ü? ø_ø˙˙ ‚D3C0æD2é˙ÄDHvS˜"ņä]—Ŗ<‚đđƒđĄ8 S2ō,˙„ņ%ÆvM°…"o?˙˙Â˙ō t˙üɰb~Įü?ŋū?˙÷ä° ˙ōÜp7īõî÷īŒIl|rŪ°ÕđōiaūüĨ¨pÂËua›á˙ááņōh xå¸Đ(đ˙ũø~v€Ø-Ô¯˙˙˙w¨1ãáø_øÎˉ˙ũ˙‡Ä8˙‡…˙˙ø˙˙˙˙˙˙˙ū˙‡˙˙˙˙đ˙á˙˙˙ø_˙˙˙˙Â˙đ˙˙˙ōl˙˙á˙˙˙˙øū/ųd0ŋ˙§˙ íxPĄ~?á“a€c˙˙˙ī˙÷ü/Đ_ūM€˙ūe—đđ°˙đƒ‡˙˙ņ˙˙üø_ x5Žg‘¸ˇ †EÃfy]%˙Ķ˙˙ņ °aÍæ\ ˙ōa›?˙ã˙ˆ‰ÁcbĐŋøXȔ!K á=†ü,Ar‚C ˂cšđˊüVžv28R8-‚Ō˙˙Â˙ ŧDDH Ž 96Já˙„K‰ø‰ÚĐl:†āfū˙ â"@đ1ä ŽDÆÕ†˙˙ˆd2ö”Lr˙˙øXyŦ ŀĮņcD/ūū#!–¤OxaÍ‚c‘˙ūGøZöž¸m‚ @đP94ūđ¤3ŽU‚ņ;PHŽdp¤p[ ˙ã˙ūüDD†@‚~m’øü(_ˆ‰Ā0vƒ; ã‘#ÄxŽg˙øp˙ķ#†h*˙˙†\æÎVo¯˙"g…!ąbžĒ"""'ÆF€Á߯‘ƒ#Ĩ~šđą!ąøy‘pĮūĶO€F˜äAČ(…ƒaĖ9¤%ÂÑ#áM!baū†"'Ã,¯#Æ#†i×˙˙øˆËÓÃ.?üʰĪ˙˙üDDDDHdAæŒ˙…˙˙đ„DD2=‡˙ņ! ã–æGü ÂáNĐ Hš‘+â"?'Š úē˜r9û˙˙˙á.W$ˆáļG ĖŽ!í|DH,>¨î`Ŗø{×đÂÄaʑ€Čđ˙ ĢáIŽA$•„Č\+˙02´d Éa¨Ž29‘ĀĖ˙ų ņ…&ˆyˇO˙˙˙˙ˆˆ‰ąČĮ5 ŠÂ˙˙đü/Ãü!'cK#‘ȏˆāf˙ō˙˙Â˙ .d‹ü.E‡˙üDDDģ–9‡œ°ŧ<([øū˙â""u2´3ąÆiŒDp4 ĩ˙˙û˙˙˙ Įũm4ÔDDH Lr?č/C˙ÂøTDC#Z&hLȂĸeƒaĖ91˙ûááWäŅČĮ1§˙#Ä?‡˙…˙øˆˆˆ‰x0äxaæ”?˙˙ ˙˙˙\gh0×˙ū"$w(ˇđã˙õÎū‡WDC28-ƒ ãđŋ˙×ų1"{Øl&91Č æjĸ$3`Đf˙á˙˙˙û]Wņ#ˆæG €1˙˙˙øĪÄDDHĄÆEŒ­Gj†P3ąĪüD†@ äĮ'öU˙˙˙‡˙ø_ˆÖ Ķ˙øx^˙˙ūâ""$ Â!…/˙øP¸,>dIˆã#­˙˙˙á˙AøČ1Ȑh˙!–-ëÂūâ"[‚ ĐČāÁB9˜ˆá’ ū…øá˙ˆˆˆfAˆĖ—"Š?˙ü„""!ØĀFÃ˙˙áøx_‡”âüDDDDD2ėŽē/… ˙Eqh2eã` €Ąt˙˙˙æ°aũâ"$äc˜sy‹8_˙™$DDė*)Fv,™ˆ28-‰˙ü áähøyŦ2äK˙cDiPŋ˙˙ÄD‚EhÉ d†niĖ…¯ö˙†h…W§`ŗđų ˛ū=kĮđūA_ácŽA¸ŋ ‡ ʏäØ  ‰ m˙á„ü‚ŋę@œŲcü) l_äFĄaōqã Ēo˙üī_Č6—˙CTÜd> #°Ã_ĩ˙Čg7REr@ÍøPŽÂOä4ÃđÂų72‡ūØĐü†ŋ˙ᙑēPiã‡; Ÿ×Žâ%ŧO ڐ˜áüφŸ’›Áė<,aNÅYˆ‰ąĄģ˙ō ÎÆ R¨?ü/ü¤ °á‚…;dQ‹pG“eƒ˙&>F=×īō4 pŋ˙™ pīũđ°đą“ØĄ1˙ūJä*¤Ž|<¯AÃ˙ņ˙ÃÂ˙đđBDØŅ˜Ą  •ü/#ߐI ›UũũxRcäc˙īÃã˙cŪēŒ)b\ėXc'™1ī č`šü><í ˙˙ ›D„97đžapŋ )8ų ´°Â„!¤ †ô8Â˙ūLō…ø˙ßÂÃüŗ(8 åPMųdã'8dãøøü/˙–fDŠ Â…˙˙'˙…: ã4‹ĸėŧG˛ėģ.dpŲņ?˙X”¨0´×Nūî˙˙˙ôF>×ÄDDDDD6>7ū!Į ,íø_đąųDGˆņ?oŽ\(_˙đš7ÆdLá…ãDDH„˜{ÄCȃÃ˙#Žŋ靸Ȍč %1@Ã'å”X/˙ūM”Ģâ?ųe˙á˙øuår@Oc†aō{˙ƒ áū!ác 2Ę(|‚m$/ü8xX˙kūYEŒC&ÕYŒ˛9 ÕS…˙^˛” a}Œ,^N?á˙Įà Įų W |ņ˙˙˙˙˙–EĢø˙˙˙˙˙˙˙˙˙˙Ė„Õ;Q˙˙–’Kø˙˙˙˙˙˙˙˙˙+_˙+ępĘ@Ĩ eÃü-‚Š‚ eđAûDqOų^ÎđÚÎԄ4 C§đđ‡0ŋø_‡øD1Ÿ įĖŽ!ÄxĐf"ą”\?đš1ō1˙˙˙˙ä*&ÂæCų4Ÿ˙ĘŒĀgdh8— †ƒ@C€™ v e’ŗÂ˙×øAá'¯õ˙ū˙ė0°Â?*ĖŌ8gÄ!œAÃ˙Âø\/˙~ ˙Á… … …B"G1apž¸P¸Pŋ ¯D‚l VŽ#‘Ŗ˙û˙“Ã÷˙ áz˙ü˜ø_ ŋ˙äy˙˙˙õ˙ü6ŋ˙ ũ|: ˙˙˙œĄ˜Ã1(3Š˙ .W/aøøáøX|8†?Ãū0†‡? .(_ ˙ᇠŽ?‡üáųĨūáđü,~‡˙ápĄ0¸BV<ĐCƒĘ āüøÎ ĐÍ#†iæ^p˙đŋ ãū!ū …‡˙aBū˙˙˙ ˙˙… ˙ Ž$0ŋÃČæ’á~(? áČņĩ XÂú„0ƒ ĄBP¸!ų€Ą`)qBœ EœœāPρW!ƃ>3B S‘Ρæ@b’ĀP`gcÂá˙˙ÉĮÃ˙˙ɏĶÂ˙õ…'~L¯ūŋ˙Â×ūõø^ŋÂĮá8øa~\āSA?ÂĐPŋÃÂ!Ÿ?˙˙Ö!á\. áBøPƒÂÆp(A„\!œ0ƒ82Ė ÍqŽ ŋ!äHeu€L Â(Ą|ˆaü.ČĮōc挜dĮō1Â˙˙˙˙ūđŋ˙ü|q„0 Î(Ž$0ŧpõ ]|/….‚…Čā@P¸^88q…†~˙ãü!áxãaBäpĢ…ŧ.`)€Ī„R SaÎ ÁŸ l„ų›#ĖÁų.S¨f—„üŒp¤cà „W˙˙†Ŧ.ŧ/ôá|‚C˙äOxüx_ Œ|ž~‰˜_ š =ŋūĒūšęŋđ“đū_ß~Ÿ¯đ‡C0†ĄÅpđĄū(/‘â9…#žA#ųÂČ÷„‚˙đ˙‡õūŽ?ž.à Ä0Ļ‚GŸp(AđČqŲ{  fŒ˜ápĄ|/Ŧ0P°˙ō˙˙'ã>pĄgĪ… ų‡…  ¨GÎy1ü˜áHĮ‡æŒĐF8L)1“ɏų‡˙đš1ČĮ ˙˙á˙đž ō8& ?ÂĮÄx\)ō9ņ˙ ō9įėaHđPĄĘ ŋü|Ꮟ˙đ¸PĄpšđ@‡ø\) ? ø„ CH Ȕ|ÎA‘Câ"""# ü2y /…#Œ. BŽ ˙˙á đŋø^Đäzø_䏸_‡…ɏ…˙đŋ˜|œ˙ã á˙˙˙˙ü/˙øCŽ8ÂĮÄqĮCˆÂ‚áAæß‘Ėā‹… ē<,8‡…đ¸D(ČCÂøP‡ņø\.āP¸Pš€Ļ `ŠBŽ#…00 DDfVN#†l†y?†D‘… C  áaÃūŋ'áz ũ?äq“đ‡ūÃáa˙‘0øPšø_†˜˙äcäcôđŋûT×´õũû˙ũWXCŽ8ãøâ>< ˙ H&aü8¯Žĸ̌/õū!Ä kŋ˙… „?â#ˆˆˆˆˆˆˆˆ‰øä‘‘ĀPA‚‘)äe‘ á/“Â˙Š8“&>aōy |˜ųáá*“Žh?ų8 “ŒŅü8arq˜| Éá‡!G&>L| ČĮ˙˙˙˙˙˙Ž8˙Ž0ŧ0ŋđķ˙ū˙Íä0ž˙˙˙˙ã˙ˆŒ!š˜sW „^GB… /ø_˙ō1˙‘#˙˙á|ˆ˙…?đ¸C ÆLÂ˙…˙˙đŋø_ã ņĮĮĮ”‡Ą!. ˆRü"!#ߑāŋ¯…đ¸Pšøá…ŒĀ\,DDDDGĘą…#Ԏ„ã0ŋáa… ũ8Rcá|/ø_ü/„Ŗ˙˙øÂɎđĄj˙Žē÷ū¸ÚãŒ+\ac|!øJAœ*…#ØR=C˙ ņP¨DaˆˆˆˆÂ Á“ˆdt dc‚„PąáxøÂŠ8˙P¸\(\˜ūÃ0ĄČ@@ƒ2Rŋ˙˙Âū8|q„#ÂCÂÃ#ŒŽÃ˙ū"#3 ÂųūGBcáBøPƒ˙˙˙˙ …˙˙˙Įü|ĮÔãü!#(A„2b„p đ¸R8 D)áBáË-wû_^ũ˙˙×ūˆaˆˆˆˆ†ˆˆˆˆˆŒ Í"ßÂ˙áb0ž ÄVY †×Ø.ü`ĪÆr8g"y‡˙˙ãxC./Ÿ pf Ā&F>ŋ˙1o‘īū1āđš&?äĮđŋ˙…Âäpŧ|ų1đ¤`0,,…ČPąq… 0ļaü.˜äcáÂÆGž_‡árc˙äa…š ū#˙0adAĖ<Āá…ü/˙à ˙…øøŽ3SČĮ …?#öē˙¯øˆˆˆˆÂ #ô/üDG˙˙˙˙˙˙˙˙˙å0 ”Á•ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų‘`Mˊƒ¨!.!Ö*VD˙ Aá@„#'LŒ|œáHāĮ…ōÎPƒ0dsĘĐĨš‹áÃđŋ…&?ûUĮûDökŋ ˙ųØË&9?˙ ^Â˙‚`rXΉ˙øSCÂūūˆū?˙ÆĄŽ<,†‡‚äČBá…8)ŗ0p9GˆāžōqŅ# 1á×UûûUX_˙ūŋ‡ŋü8yŦ(AĐ_ūB(]„Yrq ŅdcæŒÃæ0ü2q“ ‚…‡ ÅųÖ˙˙˙ üdz!…˙øūD€á˙˙đ˙áü?Âōcüx^|d!ɏųښˆÂÆGCˆaadpA”˙aˆĖ˙˙@ œŒ …÷ü˜˙˙žOüˆ?ū‡š=Ž?ߏãŽ_üŽlŠ˙…Âá~!ĘaÉü0“ˆpÂøA…Â˙÷à “ü(_ķG"g˙˙ū0ąņá~8ap¤s1CÂü> ÅÂáø_˙˙‡Ã˙˙đˇßđã 8㎑¤3>}‡ŋ˙ŋ…ÚúÚi¯Ūēū""0„DDDqGąlˆ<ė0ĮŽ#Îʃ9ášFãøaxaÂōŨX1ŠØ4†iŨ21“a Î”ĮÖ˙ĮĨŽM‚¯2 ß<)\s˙™ ‰|•ÉŠ~Žūv–ķŦB\dÛĢødl¨)ø_˙ ƒųn\3~wჹ@\Ž* f Ō†U† ķ!c;$>LrjÂî˙ŋũ{ávŽ#‚2d:đĄp‹p+M…jČQÂÆŒs˙Ŗŋ* ō ų ?˙Įæ"” ! Ģ?ÂãÍĩŦ/ų ķ´Ŗ>pƒ ūaJ"§˙ xkŽOĖ$ig˙ôî@Ė āŪ`"1ĸ 5“*ˆ‡"""0„ĖŽD ˙ĐS ū×˙ã#¨a¯ÕG í|?#ČdÁɎl Ād,6ÂC˙ü‚ō`sLrpLsPĐF9„‰‰HN^ü/¯•ÅGĀ„p¤xޤp˛ ŗ(†Dà ˙ü/đĪÄxÁ‘ãÂ!G˙˙˙ü˙˙˙ĶšQCNŗaˇXPž˙˙ōƒ(äAō 'e„ö˙ %ˇ‡Ã˙+„ÃN"?˙áÆD™Æ]ÄDDDDDü‚+˙Aëa|á—œs Œ!ũĒČ-†Áȃ“Ūa¨áūTƒO]Ÿ˙ūŋ;ˆâÁDDDu_˙!ŗ_ūūĐKČĀ„e™Ą3 š5fZÂūC 3ŽBá8#ÚÁ‹ •hŒ ˙ūMãßę øXđƒ‡ųÜDxÎ"#˙˙ør 9ü„ŽDs#™#ÄxŽ `§"F91Ė9•…aH0Ÿ˙˙˙Čd˜äpF9 †rĸkà ˙˙˙ūLūši¯ã ü3G2;DDGü†PŸøä3¤´^0Î(6ŧ(V÷!’pO ‚x˙Ķí3ˆ9˜äAĖ91ČQȃ“ÃG(ä(ärpD‚8#˜äĮ&?ũđʔG29‘ĀņĶÖČ4ü‰Čņ#†áĢ!¯‚">ŋūžĢ˙øaHâ˙ä3–a Ë/˙!°r1Č)˙˙äqČ&smPfAˆˆˆˆq""Vĸ´g"|/áL@3˙Či„…øˆ†|B8ČđB"""#˙Âá…˙˙!đÔ&ŦËXPŠĀf˙˙Čd„HMq˙˙â0„G˙ äQÉdf‹˛ė¸ƒ/ōĘß ų €Í„Į0äĮ'Đm‡˙)A§úwr `ĢĮ'ä@Éí\—é‡õ˙^ÕS_˙Č6äÆG@Ķwj™Ú? c˜[ėW‘Ģ!U!“Øät&9‡0Ą B""?đŽđ˙Č‘Í3ŽDN@„eˆNËAL?˙đ_ū¯‡ūvŠĖHƒˆˆø˙â?˙ũˆ˙ū@đ09Á@äc˜sAļŦ†ÁūʀWōãūÂ˙ūT‚hģ.`W˙ üʑ.ˌģ.˃ˆˆ˙‡ø_§r ´92ä3dIņ2ÁWõNīø]ĢüŒÁ‘ĀĖ1[æ‘ødxŽdq‘ĖÆGhųx˙ō‚ךH#د̉ ˙˙ūC Į0äĮ0æ˜Ãn˛c'B1CPĐGæƒø_#Äx‹F °ÎĮŽG"9‘ĖŽ B#˙ÎÕÄxÄGˆášG Ō8ƒ˙ûM?˙˙˙˙ųÔŖÂãA‹+ĐĮ˙ü†@3ŽLrc˜r81s-ÉhÃņÖČĸ3Œ<Ž2ėÍGDDDDDDaFãČģ8˲8˙˙ū‚´ũ5TĶNC$ ‡;*ŠãƝĒČĐefˍDGņ„""""#Č@Ōķĩˆüb1ĀÔ3˙ü†H`žÅ<…Ë#˙!’ äĮ&9‡0æ#d/˙šÁ¤)Ų¤GˆæG2A¤ō¸Õ–ƒČg’2 “–P ĮÅe@I ƒ˜Š˙†–Ž@ÄČä!wI¤YI/”E¤¨Ų bC˙Â29 ē˙øe™\;J Fe|8~NBÁH›I˙å˜&ŅÚČc?ˆČ›( …&Ū|3ŗ ÎMë¸üžÂŋËL”3 !‘H>vRŧīPBÜĩ…!.ēÂOõūW ŗ/ Ci ¸A˙˙Äx_˙đ¤Ē&C;(ķŋ˜ŒF#™€0G €Q˜#ÁJ#>2=Äŗ(Č÷˙ȃ˙˙˙˙ūDŅ2GaŖˇ? ‘ ÁU ėR.Ž2č!!Ŧäåzi§Â×ĶTäū8~Uø\íX(#ŒŽĐf˙ã áČd˜ä0ƒԏ Ž1ČÖ †Gæō¤~v’ /8 `ŖÂá4 ˙üŸ˙ų €iœsa ‰ HF5…˙ü˙á…&VNĨ˙ū:… ˙ŋø_ÂD Ãn đ†}†Â˙˙˙Ā1–qĒpČā„p5~°ŋ„‚åĮü?˙˙ČdŒrrc“ƒO 9a0B.A€Č1ą/ō{ĄHĮ  á~w]–P¨üG0i˙˙Â˙ūđŋų˙ņų €gŒsa̓PĀDöiü<‚o_đ¸_ɆÂđáč2l¤Ëŗq— ÁW˙˙ … árˆģ.ÁHāh ŋįxkwß!’Ŗ“‚$sA‡5dü˜ B""#ü.A6,OaũU\{–ęĖŽds#™ ÍũĻž˙ūFY€¤p6^ ņ˙Č‚ æĐa" HP.A7¯æ O`˜_Čd91̓Pšé Á04Gđ˜ähū–âQˆäG2f#ČæG8ˆË˙à ää˙ČaɎ`B0¨ˆ˙˙˙˙˙˙‚ø^\ėčô]°+˙˙ų á˙?ŒG‘z€6×\d1"ééČd†Xæœ äāÛ$Â˙˙˙Ķų°+˜äpaČÆĄĢ5fÂt4 ŽLrƒ˙Ãč‰ĐČņÁUĒi­¯ø!›ī Žg#G@ÛĒiޚiŨÚüˆø_Â˙įjīÂđķ´†MÆ8fEÎ˙áa˙įeĪū˙ųÚC ÃááÂøRšĘĀgōÜRū˙˙ūĘãôƒ[: ˙‡˙˙…đŧ‚œeÉ´˙áū†häËđŋū†KEˆâ$–wÃ˙øuīŋ˙˙ūM–§˙˙˙˙Â˙øPƒü›/˙đ˙˙˙˙ü“a@<_‡˙đë N>N=˙˙ đÉeŋá<1*˙īųØËüš×%¯Č0ø^˙˙>å|ˆņ– ĸC<ƒđ˙á˙H˙Ž  ÂT?˙øđšūddˏČg—˙˙ü.˙ÎĐ?DŪ˙˙Ã˙ü ÎÍd†yGü.v-➜‚ØŽDÚ ŽLsaȢ(SÂí˙_ûįh0¤s#™ Úwũ¯ á˙ų/ĖŽdpĀC˙#˙ä2A@æHNJ‘ä3˙ųpŋ˙ää˜æ՘°cđÓ‚Ŧy‘ãG0„CDDáđƒ%—ĮįX¤ŒF"8‚˙˙˙ü†L9=I„ Āą5¨P>Dˆ8_!°!Â˙ų €kƒ> 9räDaJõœDDG˙™LPĻ€ųhâ8†øĪ#ˆô| Aˇã Ãō!`…Ū`"2HfΝzÂ˙„š| fŽC-! ‡˙û_ūBŦČpΘ Ÿ…ķ´DqæG`køS* _䯈”!D„{/˙ūCųąÂ… ĀáōŽ9‡4ČĐh0ä3Žh&9”‰í!= ˜”`rcúø_ø~KūJd>".dp@‡˙š ˙ĄÂ…ū…˙ü†˙! Ŗ“˜ä ĀáHƒÎ>CdäA˙"˙ø^2 …#A—`Š~`fG@ĪÄ8Џ˙0ÎĮŧx\ė˛8eĐS/ãŒŧü(_úō `Ę\žõč/˙א0?äô˙īũøA˜29‘ÃávøA…˙ōŽ#‚Ø4ë ) Ÿ˙ä2\rcš„2Ĉf…„!›ĩOĒü†Á˙!ŗ; áđĄˆˆ˙˙ø˙ã  h€Æ ų mӃlX‚ųáŖÄ˙Č`ü†H2…ˆˆø˙õx_‰Q˜Ŧ)Í""?Č‚ŦōcD3v´/ô?úiōa°rc‘ŽCLsm—ĨIØã…ßđŋūÎÕÄs#¨g¯kߐ7†ÁČ1c<4ÅfÍBäpČlŒ)ä$†C… ˙ä ĀĀæ˜æ&BŽL°žĖˆl‹  ˙˙˙ūCb—˙ РA§˙‡đ˙ōcA‡8dČ3pČgˆų åSጁđÂō jfîfíÖ°ŧČpc /ŽūáÁ˙Š!`_đŋõ˙P>A@đųV~ ~NÁ+ˆú 9°Wā`smH2™d˙Æ˙úū?˙ø×ūCé¨˙ d 1‘`Ųøø˙Č9 €Ë8æƒ*, AÉíY ƒÃ!ų?čá~˙˙ūTŒŽa›˙C˙đš gÂ˙˙;€c…˙˙Čd˜4rc˜sh6¤3vQä(øR faÂ˙…ü/áņáa„BĶ…> ėŧ`aˆ˙˙ˆ‡ųĀ#ø`ƒ†ü.C˙ūADŋ[ ĘĖ9ŧØF9 ‰QábÃëßü/ŅŲ¨eáō ĀĐũ¯˙"Gõ…˙ü/ū#˙†ō ´9äc›`ˆū ņøRt6Äŋ˙Â˙˙ü~b#™€3 ŋø‡ūRŦ?Â˙ų ŒDxrĮ ĸ „đŅü/˙ūC 5G ƒ ŽaɎNi‚…Gøcä5ĮãČ`˙"˙˙˙…ÂČcjR ˆņvG01˙˙üxCđ† €jŋ Ķõ[ cBkpŋ˙¯üüŲ"#˙‡š…ã"Į‘˜ „p6X_ō  r~N„6!°Xƒ“Ú×˙˙…!˛!`ü†@ŽLsGčb‚ ˆ4ķ Ŗcđâ"?đ‡ūp1…đ°Â‡Έˆˆ˙ ø_Čd…‚ &9 ‚(˙Âá6eĀžî,ít^>0„DDõ< ü/äāÓ B *FÂxh0ä눏Č$äĮ ũa~ŸČ8äĮ#˜äüĐMk pÂ˙˙ž}{ákÂų€ŲüC˙0dxĐČækˆņŠ"":ŨÚũ˙˙ÂÄC Ȱbh Ŗä6üũ˙ ˙ūC$ Į0äđÙ!VBŽCL†^Ņ ˜äĮÂy ãʐČį ū˙˙ã˙ã)(ˆˆˆˆ˙„?ˆü!ÄCđŋü?ã˙ø‡ō `ĸ 9sC/d„pĄH`Čg/˙ÂY ‰?á…ˆü! ,y, >đXr)ü…’ c˙ū@ĖG"h6ÆGáHlüœŖ ģ˙áaī„×RDs9ĖŽ€°×˙ŋ’€cđŋ˙ūr€§bÁ˛õ!˛2˙ō Ō$OcŲąÂCdaHeŽC _ácÂü2˙˙đŋųŪĻb#˜2á†ãÂđŋ˙đü‚ūüƒ(ä2@ĀæĐD$ü(_Â?ī˙ŖÃ˙˙áįca•8ydz0„Dę Ã˙đ¸\)&‹Œē. ø^ŋ˙Č-ОLP†^ŌĒ †?â? ĶĶü?˙ÕDDFõī˙ø\)¤Gˆņ Á—˙˙!đA@äĮ&9 Ã› ˛ä3F‰î -äwáŒy D/˙ČqČ G˙"Ņˆæb#œ28d‚¯˙ūÂĮüqä°ÍpD(â"#˙˙˙ōƒhä j !áBđĖ9ļI…Â…ü†¨äŅȐĘČgˆƒ ČlØ˙ų˙˙ íB3 ĢĮ‚ūC$¨aĖ9 9 ĐaČeė“ áHl(Âôų@g‚ bFÜ04B_û_˙˙ŋ‘1#™ €Ö××đōcžF‚h#ØŅ!Âä y8#ŲA5Ŧ/˙3 1Ė´Lh†Y!0ČZ†h?˙ü,a ūv•ãAņ C˙ø_ø…ōpB•Cãđŋä2CTr‚Į'‚cš 9ļ°AFõÂápŋ˙˙ü/˜‹ĸņ†\ @Ÿ˙˙ū˙˙~R6ĩĮ˙Oš@Ø93p˙Âà ˙˙˙˙’ņ#Äp5}¯˙˙˙‡ÆÍ?˙ČdƒA `sA9$#*&l8Xd3Ĩk cđŋDž˙œŒ0 a›˙˙ÃūDGøpü Č&Ë Ę„(áü†@-LrpDŒrxfņáaCH˙ Ãáđ˙Œ¨EŲv\ Ÿ˙˙ūG˙‡ÂNî@Ė3G#Đh1r2@„Gà %‡˙˙˜; Čņ @dÚi­˙˙{ÃáĮ…˙ ļ ä0Ŧ˜QԂxXa?ä-|Ž\ 0šŲU…˙‡˙Ãü†H6ŽN ‰ŦßáÂáxd1°ū.‹¨,ü3;VÃī …ūœ jŽl&9Ĩœ?ß˙pĄįáÄGģ_ōu­˙˙ü†HmŽBŽ`ĸmĀŋ‡‘)~ōr{R˙˙ à ü?‡˙‘4 Y Aë4Ģū?˙ü ū˙˙˙ BW˙˙]ÉĨGÇÃhƒ˙˙Ö˙ ōŋ˙˙˙k`g˙„_˙ü,†qNū?˙ ü<†pŸ˙˙äĒ˙ Į˙Č4ī)WãHÁ‘ĀĖ˙!Gô Aü†HfŽaĖ9‡2˛5‚{ÂjX_ ˙‡…!ī˙ü‚Ø$hŽ ˜ä09üC˙!Æ"80ˆ˙đŋČĶá ãō°ds#™ ˙˙˙ .ōV9‡#2#ˆˆÂ˙ ˙ü‰™ >ü†HfÁ‡4sVeB{RDDCøˆˆˆˆ˙˙áÄ8qßĮö\ B""#˙˙3ĻZ'´Ÿ˙;>ü>î@Đ09¨o6¤ä_˙k˙đŋהYˆŽdxŋĩ˙äuĪŠ hM(bxđŋüīPۄ¯˙É‘ÍY‡!°saÍGąB0"{W˙˙äsø˙‡ų(ˆāĮü0§XŽ `W˙˙˙˙ .đĄ‡˙;. ā˜˙Čd˜äc‘<ÃÍØÂ{HÂ˙ūlXaü–ü/›ˆČē.3f ŧ‚G˙‡Īđĩ˙˙á~Ą“Ÿ ļ ŽaČf­a˙˙ ĮĐXa˙ÆLĸ_ x09  ˆ°OyĶn•đ˙!œ~˙˙æŲˆ¸g.ŅĄáŽBŽ""#˙ … ČZ č‹Á\ĀWë§kß f 㑔*ü‚cdx_AūŸŦ˜ƒŖ˜sä́üÛŦįÄDDDGõû^Â˙šã‘#Æ ĖŽ Ļ˙ĩĩđō °9 †Aļ¨F4C,k׈ü/áB˙˙äĀÄŖ›u“]P/˙˙đ˙Âņ摃1Dp4 ˙ųæ‚80æÓō‚84ĄVjM(œ†‚… ˙…˙˙ ļ‡  r1ÍØä`DöŦ)pŋ˙˙˙˙Ãá˙…'EâE?‡æ°3đŋđ˙‡–ãQˆÁ‘â9‘ĖŽ‚ŅˆĀcđ‡˙Ø9Á¤r†qČÍĖ‚Ä?˙˙˙đžVŅp4 ?˙ ęJQÄqŒ2ņ ü/N@Ė÷˜_˙Ēi§ßü.~4ŒŠ˙ÉDGŒDp6ü/ä2Lr<Û 91ȃ™H† Öĩ˙Ä?˙!’ ã‘ų Ã˜ØĪˆˆ˙đ‡˙ųŪDx3ŖŖ˜r1ÄDđō `n91͆ƒh1PB"!„2r 1; i˙˙˙˙Č-ĄÍ‚c™Ļ˙đî?ü* 㑎"""""?˙! C‘ŽaÍÂu“{Õ¤ė`˙^@Đ6aÉųš õĩī…¯üĢPeöĄäeČYy4¯Rc#ō!œrr1Ė91͆4&͇A įQ2m\Gˆāf ?ūáČ(ūC$ Į!wŦDDGŪÖķ0Ņ™ EҰ4 \/ž ŽA€ūœ‚Ø-Lr1͆‚r÷øY 2üp#ˆG@Z­¯ûášEü†ÁŠĪü†H5Á1ɛë…ūC4s cđ§uÄq‘ĀĖ5‡˙˙ ļ æƒA‡3!GÃâ<˜I—fÃaˆŽ¯˙˙à 4īäÁ\r$ŽaɎh3B?ķĩq fŸvšøa!’ Ŗ“Đfi–á‘ĀÎ˙‡C,|†H6ŽLsP†!šŌ(øˆüŽ˙3X6Į#, ŽŌúj‰H)ü2c“‚ Ŗ‘ŽDš Ža͆ÃŽaČ*¯ŠAĩ¤ą˙˙˙Ã"@¯ÄDDDDDD„Ž9֑—æE‡`I–rGôA]§ųŦ˙ō äĮ a5ųh,?!‚Ši¤‹8‘üaH6´ÆŋĖÜ3ĻY ƒáņ^AUšŠūņ^Y|dČOŒ†Û4Ķü ˙Éē‘„Aà …˙‡˙•üfPî°ĀPą ÖŌ§ūF>Gųƒ; ÂáxÂä 4Ģ ūF>hã!w¨_0geÂà/ü†ōÚA?ōq“ ÃüŒ,æČX,k^0‡¯ōÎ%õ˙ô#Ž–ˆ0ƒ˙˙k‡ü8dÚ)ára“đ¤Aã GŸōÉY…˙ü8áãō1ōhđŋ“ ˙ūZЁNÁ˙!; ÷ã ~ķ…˙܌}ø|7‡Ãpŋ嚰$0¸Cë˙ ĮÆɏ“ŒØÖv~v$ |?‡Ę’ áB…˙ Ãķą—ápą˙˙…đ‡‘™˙æøã –@†IYČíÂ˰„?†d4_Ããq˙ũuŅūø_a˙ūpÂūd(Ž?‡×…Ž?ëÉ!đ˙ ~Gŋáa„vŽđü ū?ÂÃã˙Ët¨Žyˆ– ų1đ¤Į˙đƒÂ…‡Ä˙…˙ãū?đ‡˙đ¤ã<ˆ?ø|f˙ūēđŊ~M¨'ûøP†rcŽv’ĄÂæŽ0žū?đžø˙øsĩH“A˙0ŧq˙ō8P°ČãáäMŠ?đŋ˙™dGŒ3ũøBÂ˙ !“’§äcđđĄJ ČYņ˙æJ‡ū?ū‘@ü/ (\,ø_ßđąŧ0ƒDIš˙%‚|ėa–ŅqņüGđÂÃË@‘˙˙ü0ąüoü8O˙ōÚŋ˙Į˙˙úõũdqÃ˙ū?ü/đÉĮ˙˙˙˙đ˙ãã˙˙˙˙˙ōØ%uŧ˙ūZF;Q˙˙˙˙˙˙˙˙˙ųi˙Į˙ū["ĀO垉å˛Ŧ ųŅɏ–Π§Č+5$2œļh rmeš nŧļ`6H(kČ1°,ļ D‚†˜ä×)ce^[ A˛ģ2ōØ$ H#I+˛Ī+…|!jōi}ĸ $~ōrIáBųoviaHĮÂāŋ˙_Įųkøžh Âáp¤Ø8ŗŒ’°Įņ˙ūh[†›’+Ô vą BM–œ28§A# ßßi¯|(A…Éē`(Sē2XŪ3@Į‘Į˙ßū.;Ā`”|)nPÂø_Č ˙˙ŗÂœ å¸āŌqįfĄ”LA’ X…H)es+Âø_ęŊūŋđƒ ųašpüŦ ķŗC*JĀ_üžoL(_á˙˙˙˙…1á ķ¸ A•@ÆĖÜ ƒ …áB"AœÄ ‰_˙øPžv,›)†aؙ„!˙øP ĄI EÁ‚TÉPeaQë¸Âģų ã„M‚P Âõ…|%įbŒė1īá/üĨ‚4Ĩ 5Č5” Ā4æØWÃ#Ņ=Ö‚@ĸc›p ˙…á˙˙˙įcT‚…B a?ūB0?ų1ɂ`šÄdAđŋū(\ģ.ė¸eųÚ°Ī˙ęCŠ˜4 Ë&0!˙˙UɰPĮã뎞3C:‘‚:œ˛ I@3˙ HņČâ Í)§áí˙ú˙˙˙ķ°#;@0JÁ!Ũ2ÉX™ dÚĘP'™$ĐČæVĻ"!…˙˙˙ †sjC˙˙ūČg.‚Å6Æe0Æ&Ø yØĀjG˙˙˙˙ü’ øWų;ƒ+‰1ä(!2HÂ „VGŒ#A–UƒIūžŸ˙ü¤Äs1â<Ō#ŒŽ›ūLr3jŖ˙˙2ņÖeRdÖ#˙1'˙˙ø_ōm—”€×…˙˙ü×28`Ž `Oáx˙äHf¸?˙˙ü‚ØQĖ9'-Ã2°|?4ˆô=đŋ˙ūq— AW˙ü/˙Ų ąĸ5Hq˙˙žAl5G0äā™a=Œ'ą˜R¤„C-X‰uŽČ7˙ū@ĸ<`ČáHã#œ2˙ÍĐOāØrpaÉÁ‡6‚8!`Øs`„'¸ đ˙˙!c“ØDƒn‘ã˙˙˙˙ ˙ū˙^>L"„qGeŅÆŽĀ˙ß x`|H;ˆō0,!ņ_đúiϚé¯Č-‚ŧŒs-?ß˙ø˙ęDHLsLqÖ×˙ b øˆ˙˙¯ų U‚a¨MHHš‘=­˙˙Č-юaČĮ&9 ˆ9‡4sPÛ,ü(_áÃ;ČÁ‘â8†ÆŋáÃ㉠qÉĮ"‘€B8-‚×˙˙˙˙…˙ōŽ9æÛœfa˙˙Čd8äc=""""#øū$‚[ˆˆōžXYÄø‘”y˛#Äxâāj˙‡… õD2CCBÁˇY•>o˙ũŅ@ĶT˙¯#™ Ã;OáBĮ ¯O˙ū¤q…ČdØ2=™ėŗđАk˙ã f#Đa#OiFØPB>""#˙Âō ąÁW;,2=ūÉQɎaČ äJ Bi ĒáøE(5ūC$ čbCh W%¨˙˙ä5kÂņņČ+šcˆˆ˙ōn ŽŒģ8‹˛ár cO4rc“…œ‚ Ŗš Ôʄ÷˙Îā5u[uÅ ŽÚwëiǝũĻŊl_ä¸R9‘â8†_åuƒ>ds#ˆG#†@,diæŪs°Á§¯%C…üƒHä2“˜äāŌGĩ@„˙áä5äŌ#Äq‘ÆGˆāf˙˙;(ŒČņdp3 ŋ˙ŒŸ…˙Čd‚A‡!Ļ9‡0äH6+TūAmLrc‘ŽO Ĩáã˛!—@Î×˙å’Ņq‘ĀÔ6˙˙˙įiVîAmAr#ØĄ˧Č-¸ä,ĐeË?ü,Du_åžĻGÁ‘ĖŽds#¨]Úkō đ˙‰@2‘Ėükė°pCNā?˙É 1Ė"ŋ ūA‘Ál˙˙; 28ČņČāh?đƒˆü†@-N ˛Īã˙Č-ƒHæÐAÉėâ"#đƒüˇIãc/âėĀÔ ˙˙ ļ c‘2B’§˙Oא[ąČ091ȍÅ?kÂķ%ˆüGˆæG@Uwk&ę‘ ÎDsō1„~CZ0‘ ›2 ņ˙Č1ÉÁ ĘY˙ū`6dĀe”DxĖŽ28-ƒ/årC129‘Ã$˙¨Č‘áō°9 ˜æÚ‘(W˙ü<ˆ +˛āj –RĀ5ßú!šŨhš0ÛӃ. h ã“Û ŽaÍ‘_!†‘\\Ė fŠŦ˛dG28„p6'kü)ČeŽ ä2,sLrc“˜æŖü†HQɲ ˙4“!ãˆĖŽdq‘â8dƒo˙ųn’0dxĀ„p3_‡“‰Áō%˙˙ä2 `ŸūC$ Į&ĐO#ÅÆ A‡+Œå9œ§/ rĮ0åš Į!G&8dp3 ģė͗`f˙N˙OONÕ{ŋäĖr{}܁ Á™†ąUY6JŒFØ ­d2Dd§ä2Aˆ fŠ[Œ3āļ ‘+#ƒaíP†Æ@ü†HQČVŊü?¤AĮ…˙!†Jō`O†l*ü~M…ĸ8‚žYŌ‡ Œ|)°&C$ Į!`Đa͆i„˙üˇ‘ĀĖ˙ōĶŦ/ænČd¸æÍS/‘_RĸčŧGˆāh ėCtūAl3G"5¸f"dxާ˙˙˙ū|Čņdp[ ˙…ü.Čd†qČĮ&9 Ÿ›bD&°CŸūL“6˙˙˙Œ.`L×â8…˙Č!˙˙ū|2v€k˙˙ų €gŪ`ɚDC ;RŽüsąÁ¯ōŊG˙ü(AáB…ˆˆˆˆˆˆ‘Į˙Ž>"""#˙ÂķēĀĖĖG3GŠŗ#ˆE´Äî°';đU˙ÃōŽ(ĸ‹ 2ÖíG ʏ Ō#Äq‘ãGˆæ`ŨȰČņ Acō1ÉÄ?õ! c‘"Lr&ČöXN@D(&˙˙•Õ†™ØĀkų ZƒaɎmM°ĖšŸūÉ$b1Œ)Â˙˙ČĮˆˆˆˆá‘â9‘â8˙øX˙ä2V HA„ „F|’¯åq iūC$4Į An"$AÃ#¨5˙˙øˆˆ˙ō`Ę9saĩ"l(/ėpmä ATsaÍæhˆëk}éÎds#° Úö˛ąĄ›Đ!Ǝõ ßä2AŦrc“œšr6q?ÂųŽ`Ŗ˙ČÆ‚xOö¨M¸ų 1œ ÕKøđĘHē<…r8‰ųeŒDq8q…ō `ĪĮ1Ŋ?ō8gDFíW×ä áÍÃN 9šËK˙˙É Ls˜_ųCj`?k‡ü?“úa˙˙˙˙à ˙˙… ĮáũŽ?˙ááūø˙…˙øx_á˙˙˙˙ä’_đ˙˙ōĶ*ŋ˙˙øeC‡õ˙Ã˙˙ü/đá•Õ˙˙Ã+˙˙đÂ˙˙‡˙˙˙‡˙äĮ˙-ʁ!Ã+Š ĸ˙˙ūü†Ŧ°3šƒÎŠÎÖ0ŧ?ūĒ¯á˙Č+‚hC,Đ?Ųąŧ?˙˙˙‡˙ °$DĄ5Ŧ†Ē ay Ũĸ˙˙˙˙?Ë œ0ŧ9€(,9UÃ˙˙ɏõđø„įáņÐXRđ˙ķG…œ8 ‰œ?Ë!pQūG áxrĸĪ˙üę ŋ‡ä0?W0ŋ䉸ĀÕ&Åū8p˙âC,˙_ōŦC!ū0ŋ_ü2oC [™׸\%˙˙˙ʐÃ#ü'‘„IæG_˙…&へA˙…˙˙˙˙ū|8r$ pƒÂ*ÁVüdŲd ū?áÇ˙õ_øX|• ō( ˙Âį`@ž÷˙˙Č6ë˙ø^B¨XxE`1˙ ‚EŊwæ íX˜A˙˙đáá˙Č5„˙˙ ˙…äČpŋá2&ĐfU#ž¯-ÁTė`l; ?‡ p°ū˙Ä;Tų °/˙ú˙įcŸ˙˙;áB˙īü? ˙…˙†A ŋ˙ øPŋø_˙đĄIPŸ˙…øų#‚ĀđXō?ÉŠKr@1˙Â˙đ˙ ˙˙ü?Ԗ Eg…‡úū~828_˙˙]˙ô˙ū˙–ô 4JC?„…˙†b1ÆGÃTŽĄ—áūMKû!œ†øaB˙ūC$5Į!—„)a3" ŋ˙˙ /đábˆŽĀ„z"""?ČŅ˙˙…?ō1ČÕ?˙˙ü˜iŽh"OuPA˙ÃūDØĀũpD „ä( ~vŠqņtˆˆˆˆđƒđĄ˙!œsaČĮ&9‘õ×ôĶôä €Ö9‡#ØæÚ¸˙đž{]WÃßđŊ9â9˜Žds0ĐSŪU …đŋäÕ>˙ P> ˙ų°ÍX#6‰ ˜D_˙˙ø_˙ ūRĸÃ˙!"€ÁđB8j‘ĀÔ6ßÚ˙đƒ0‘‚†Â&Æø_Ÿ?˙áü†H5ÁĮpD˜ä~F4Oc“’˛˙Â˙˙ø~`a…á…đ„DD˙˙ä1?˙˙ ˙˙˙ū@ĖH'˛ä *DD?Âá à đ×đƒÂÅÆ‰EŲ €¯˙˙ Â'?Ã˙ūŧ(_ßë iDA š˜20†X'˙ /˙î˙ÂÄ?(‚A~ŧ(R\đō8ūđĄŋøpáų Í˜æŒhš˛bD6 ËŒ†Ę,2É?ã˙„‰Ī˙Č ō8R8P„Dø_ü”H(Ræ°Ī˙ø_ÂøAū˙!’ “ƒA ØC5! ˛Ī ˙đáÃøyū/ÃR‹ĩ˙á‘ Ë‘ ØEd?$øū2¤ 24?ß Ždp6Ūí~¯øpáđáō,áá„˙ō aˆ&9Œ‰’$',ü(PPŋÇ (Xü‰€ŋÃķŠ˜0eūū‡˙ÂÃ˙˙˙!’ PNĮ2˛r§øaB“/ÃáūLFD@_†iDxē8‹Œˆˆ˙Âū˙‡Ã‡øA˙˙ĶOD ŽA— ÃA4Í…˙ Š˙ÂĐPĄB‘ÁâĀØ _õ˙Ã˙ë˙áĮ“Øä,/˙3‡0äāˆ91Í ΞÂh#&Š˙˙“–$ū„AŦrpD…DG˙ū˙ū˙ü?Â˙ų°WŒsA Ã˜ŒhāÂá?˙ūGh1˙č?ÁVđÂ˙w˙ä ˆ!›äAɎO 9‡'CPĐCdĒDDG\3A‡&9 ä,~‚_˙ūī˙ĩUôĶM~˙ģžÖ˙˙ú˙ōĒ9 °Če‚Ë `!…īˆˆˆŧ/á|.ŋđ˙˙đĄcá˙á˙˙“* ˜Oa› Ö@Ā˙đŋü?ü/˙ápŋ˙ä¨1¯ūû˙‡Įø_Âü? ˙û˙˙ÃÚë˙"ŗ˙ūĄ˙đáđÂ`ƒ!œ † ce_đÂx_˙õ˙øa˙ü_Ã˙˙‡˙˙ád°)a_ø_ū…˙˙˙˙˙:ƒh_˙ Ã˙˙ü(AĻDk˙˙˙…˙‡’Ą?wķ@W˙˙ūpøȈ˙ō0¯ūūŋų C˙Ėŋ˙˙ü?˙ã˙ ʸ˙đ¸^_Âū?ūC1ĖäQđø}úđ˙˙ Ϗ§…÷¯˙~ŋÂ˙×ÇÄG˙_˙˙ä5× ˙đ¸]áđųsa80˙˙ū˙˙˙äWXü/ü?á˙…â"?ã‡ü28„˙˙ų ™˙˙ø÷˙ë˙ã˙ī‡ūAĶÂ˙…˙˙˙á˙ūG29‘Ėâ=˙… äfŲ˙ÃÂ˙˙÷á˙‡„8ˆˆˆ‡ī˙ČlŒpŋÃ˙˙ú˙˙‡Ã øˆÂáB…˙0'ü>0ŋà ,ĄŸ ?˙ø~‡ūá˜sl“2c“Âc˙ū˙ío˙˙%ŒG /˙˙ü|>?ü/˙˙û˙áo‡ü/…˙˙˙Â˙˙˙˙_ū˙ø~˙§˙Ķū˙Âü?˙˙Â˙đ˙øápŋá˙˙ü/˙ü/ūËt˙ ˙á|ˇđĪ˙Ã˙Âę[Ā˙ë~Ü/…Áo˙ …˙Â˙˙æ@C;. žv$˙˙ČZîdŦ1˙Ęõ˙Ãķ"áŗķ°‡˙ųĩÃūęeX˙ÂÃ띗ū˙ūW>W{đŋ˙ÃÂ˙å}Cūū˙ī+Đ6'á|ƒ „÷éáÃ˙-„ë6Ą˙“\Sõíü"]SD^?ø_˙˙ķēā¤`L•ŖˆŽJ 8ÁNü|/ûĶOõ×á‘Ė”B= ŋ„А\î;ä˙˙…ŋķąa @×"AÂåH(R• `1„_˙˙˙˙Âǒ ‹|˜ũāš- áHĀØ ‚€đ[‡õõėWNŪˇü Âęŋ‘ 0¤Õ~å%#¨_!`/āˇđđ¤2đžB„ōPáČėĄD.ˆˆ˙0“ü‚É?Č×ü› ŠđZū20ģOä Ãn 9ä.ƒAƒ7“†6P˙“ S˙üĐĖ\†Č4˜`jĩûMo\†hOōĄŸ'×ų]b#ÄxŽ28d†˙˙ ļ1ČŽL!=áDŌĸ""""8ÉPūwāĢ˙˙!’<øˆˆˆų ĩ~AŦŋų ˙ §OįeFr#Į"9‘â8Ÿä2Pä6ÂÍӂƒR&ŠÃ˙‡Ę )ūw¨m˙˙ü†HlØslĢ˙˙_ƒfžA´>Ž8˛ņ.‹Äp6?ü†4saƒ Lr<'Ї0Ą Ä‘‘…~˙˙)@ĩ—O4QĖ9æŪi-}îūÖ֐U§UĻA ?‘ĀÚ?kk‡‘–#â#đŸÃ‡Ët_‡Îđų°e‚Dƒy™3˙ūō ąáō0—ˆ˙˙˙‡˙; |?˙ ļ 㓘æķo#R'ŋD>0ŋ˙ņņ“ĸp6¯˙ø^˙ųØĀÛËqŽœ $ ÛA¤“˙ đŋūWø†f"8‚ÃMđđĄa˙üė˙ä2C6 9 ĘČö$AB¤DėT3Â˙áū€¤xåų42<~#™Čāf ˙Ã˙đąÃ˙ūv(˙!’ Ŗš†Ô‚ÖĮ•$2âv” ˙á…˙â"3Pg˙üƒšr ˙áņ˙Ņ@b Že‚ šØP‚&CŽ˙ū.!#HÁ„#úâ#ɸČÁ‘Áž…Ų—˙É 1Č(ķA…‰ˇ,•¨Ž ¸˙‡ )Ú¤GĄ‘â8~˙ËrČÄG €mááČ-ƒHäc“ژsl2"T8CO˙øB""?˙˙ėŠ2čāΠiy0UƒN ƒo0ņ;ŦōŨHCĩaŗíSM3 QÍŌöŠĻš÷ޟ<qĩÃ#CÃ*ėr5 „DDEĮų°09‡1ąl ˙˙˙˙îDDDDDDDDsēÁ_ôS`tsą`1ū; )ą‡á­û”ØaŽ#ōbÃ˙”Ųk+¤đ‡_“, G2d a˙ G S‡˙ü<˜üarn-  !߃_EŌđČã˙ F8XakđĄūüŽ2pŲ„yđ˙˙˙˙0‡ūN2náT(_õáüt˙¯áápĄ˙‡ūÔÂüņ˙đ˙áĮ…ˆ˙˙„w] … īūF8\,FNFyiDxĖĸ˙ ˙áŒ)h("ņäq—eÃX•@)ūG=5UÃ0ŧ2ČhdxŽ28dŸōn5ō†œrxo4 Ø ›ãGˆæG!˙˙˙˙„"""8ÎÆŅÄq—EĀø‹Hŧ:iĒ}Čc™3ÁJ ëk < Į0äāØdØ˙ųų €Õ€„DG˙…Čeę`Oî×Ä˙˙đã˙˙˙˙˙˙˙˙˙˙˙˙˙Ęmb˙ø˙˙˙˙˙˙˙˙˙˙˙˙Č Ĩ_ų0€×ū@N€xnvV÷Č ā'Ā杂€‘ lä lŖŠXRKžAžÆų o ČöŽ0˛ (3}$ö%äÃ&Gá”åē ϊ‚ÖV-ĸAüGĮ•Ō†p(_!G‘˙ōēĀPƒ†uĀĘU C(d0c F?Oû"…ōšHgbC;ü.… ø\ÚÃČ˙ÂųØb"Bà đŋ˙ūB ļ”žėX3ÆF (_ ×°Čgؗ˙áꂅ §đ”ް8AčŽü<(P Ą áH`Įø\/ápĄ|/ūPQ>˛8!°y°h˙ÉėŗČƒ˙×áK@đˆeíX˙ /ü•P°áà Ì´ 2¸ĐfŒŸ‡˙đųfÁ˙å`C&MpRē|.dR¤ ü8ė26.ŋ†A„Ÿ_Ã%Ã\ÄČÃ;,žAŋĘĄ…‡„ū?˙ĖUápPšÚ? įG„+ü.ë-!`Í+ā… ˙ ūu3X(4ŸđĄ†h ˙„øAÃ;,Ÿ> |?Â˙˙ūY…Á0A–k4gaƒA fŸ  '¯˙ødA덯ūF ¤3+Ö*pƒ˙‡Ŋŋƒ‡˙„C–Îŧa|ˇTŽHaJ(r§˙˙‡˙…˙áà ĀäĮ†gx mĒpø~;VōÜ,ķáa’ĀĪ˙č?đ°á­¯đ‘0Ą~u2$b<%ņ˙N[̌ƒŋ+ĸ†å]Ŧ.˙߯%â9‘â9‘ĖŽ‚˙…‡đüÔøá¯˙øR´gt — …XR80vãō¸P'ū˙†~#ŒÁ@B"""ø_ü/…˙ū_˙ x,C‘„ <ī‚ŨXf c; åu°B…‡¯ÃÉK.ČဈQÄDDD˙‘#úČ09 %…ü%…‡Õ~Al Į#ž`^pōdĻBWûĩ„ ČČŌáäJĪÆaB8?ĩŋ˙wXg"Gƒ&Ũ˙đŋČąÉÁ‹‰ėšQ8&0!˙æ@AČU…ō=ˆæGˆã#°˙˙˙†įj†iB˙ũ?ū@ĐĮ#X5ÆØ~./a?2V …%ŒČĘ1—h4ūŋF>?w‡Ãđŋ˙š°W˜æĐN 91͆rĸ87“ž¤a Ūu˙˙…áĐ^x\í( ×MW˙˙˙ŋ˙ár<‡ÎĮŽ üĘPÂų !°HšëAÂü;ü(\/üpÂ˙ü<dpÉá˙ū˙á•qȏˆāxc˙ ˙éŦ†@ƒ‘ ‰ąpŋü?˙˙˙ü?ÎĮŒDxē‚8ˆˆđĄá˙äĘ.ķ@^""""<-d,…?úz ļc˜sF4C Bäp/đ˙ú÷ ļ#˙ÎĮˆæb#Äp5ÚÂä Ma ¨2= DDDWūD)¤Xü†@áæÔ6Ã'CĀą=”~h&UĄ˙…˙˙!’˜äĮ&98#˜æ!K›aP˙đ§tŒŅ™‘â˙ü†@+ų0Bq˙įi"9‘â8(DDDD{ä(ūü‘A‘ãG#‚Ø˙ųxūC 3ŽA'ƒdН -˙ ūōk_ü†HŌ…ĖŅvqH2šcō8gūPYŒDs1ā¤p5pâ˙Čdƒ- —,3`ã&ÁÆ#1Ä#ŒŽ`¯˙ ˙ų AĖ9‡0æØdĐ,DDDDG˙ųP'˜=VCTrƒ“ƒA05˙ōeĀX˙á˙ūR ˙áūd üŖ…ö3ĩ@š`%ØX˙†tŪyOãķ°§Ã)´čŊÆÄ‡'đ–Ô3đB?˙02=ÄGųËÎ_˙Ÿ¸ū?ķ â ˙áņ *åŋūEīĖ‘Ä~R×ūWŒ_˙Ãø‡WČāŸ˙ēÁ˙üČ!˜‹p餂öĻf/ø{ø_ËK?D¤ŋø_ˆ˙2‹X”2ŽÅÃ;ûEǎd0ŋÎÆ\Ę#H›+‹1 \/˙˙ūMĢ ‚Ôv,aņ5+@Æ<›‰AZđ¤%üpÂ˙#X ‘NéäՅüÉT§ķXcøđŋ˙„m¨g…Âųo‡•ˆ A‘Ã,āeF[†'à ˙˙ų]h0Y<2ãō€BßÁ? ˙ūddqã0ŖÚ˙ ‚ÃđŋÖ.KĮ"8-žȃ„0°ō%…ī˙!˜äāØsaĖ9ļ âD'¸˙˙˙ũü†@)ŽM(Œ~ū˙#ÄDD˙˙ūJƒ˙˙…Č´b1ĖŽ29‘ãÁl˙˙ …đ¸_! >a͆چōt&%T1_˙˙ ˙áB˙˙É LsAŧÔ2B{,øˆˆČāh ˙˙áԋ~$šĄŲpnˆˆˆˆˆˆˆ˙˙Č-†ÁɎA îŋō(ūŋ}ŨČžÁŧ˜äüœ…ŋ÷÷†ü‡â8Ÿęŋō1ÍæÔœ… î ą„7˜!1c  ˙ŧ0ŋū@ĖF9qČb 9‡'ö‚"CmcDI˙˙Ãū˙…ÂááNĻGŒĀĐ˙%áÃ˙ü!ūū˙đ˙ü†@eÁ‡&9‡&91ÍpaÍÔ x4c„D Ã'ŋÂų˙áëđŋ˙˙8aˆˆ˙˙kŋ˙9~GųÚ¸Å˙_…Â˙˙|†H2ŽaĖ9 Ÿ“!œH!ŋ˙˙äĮ ˙˙^°ŋü<×ėÄb0G28ČđB#ö°ŋ^ãøü~h Āđk… ›Œš—˙ø_˙ü†@fŽF„‰î Š,ÁFL¨Œu˙ķ  ˙ū˙üD8Ā˜ˆāxgDDDDGū#‰…˙Â˙ÃᄐHŽ2#†r8-‚ŋágĪĮ˙É“™sm!! ›*ō­Ō°ŋÉ™s_ ųŲdžHFqÖ#Æ##Äq‘ãŲdx Gˆāf˙üāiåpĀĖ ˙˙§§˙˙¯˙!c‘ ˜dk™C › ōĻÃäÙšLDDDDDDDDDDDG˙ņë‘š8ËŖŒŽ)pÎGh-yXr$ØĀ„G‘ė“ ײũ5Mo5 C‘ŽLsN ƒí?ųÚ¸ĀR8cŨĒüޞ8'„đšô&Üj#ü¨$sA<œJ„l‚˙–Mb8W˙đáø_ČdĪCh!œrpC,r" –dû‘ åqT^<‹‚EÆG2āf ˙˙˙ŋßOOOҏsaĖ9a ËūÖwHā„p`Ž€Ú×ĩUČH|ä2AMŋ™Ÿ×‡7$ŒFņ M•/đŋä2C7 9 ˜äĮ&9™†QņžEãČú.ËÄxŽ!°6‚Ī˙ü0“ĶN˙D A¤sAˆ4˜æ`ˆˆˆˆˆĒiŨŦ†HØsh4rxDķA¨a†Ã•˙û^ĶM~BŽjSL„ųW˙˙ųH'˙„˙˙…øaøøa†ø˙˙˙˙˙˙˙˙˙øáūĩ˙˙ ü=k˙‡ūøz–ŽŊûüĻ–˙_&‡_ė2ČHe øfF—˙å‘H@žwô? ø_ė˛ QØĒūíS˙ũB`Ö 2ġŒ˛üí%ú˙˙˙–MAVC-‘bBŒ ˙üė!Ã˙˙øÂũ–H‰6A īø|?Úũ˙˙ \[ O˙˙¯˙ááü?øūA_8˙…üŽj_ß˙Ãū˛ēû˙á˙ČUīü?ü)2z˙…˙ʕ™øDÚ˛6éAá˙ÂūB•r2˙…˙˙°AÃ;Ŧ˙ų ŗB ÅC‡ü?ũ¯ōa\”;˙˙ũ˙ū@ÜraD[Ģ˙õ˙ ʑ˙&>ü(_á…˙ū9qɎΠ/đ˙ü/˙˙˙đŋĸK˙ū2ü>õ˙˙ī˙˙˙˙˙1#,=˙ū ˙äča˙‡ßø_áä°á˙˙ü†Ŧ”žøų ˙đâh r:|?˙ÂūEȓ˙˙˙+’L?˙‡ū˙ų ™. ˙˙˙Â˙˙īŋ˙īũxAū˙åHōUÄđ˙īũpŋ˙˙ųŪĸ˙…˙…‡˙˙üN˙˙˙áø_˙˙˙ø˙ä(3—Á[˙˙˙˙&ū˙õü?˙˙ūœđŋų4ˆæGˆü áø_˙˙”€cđ˙á˙˙˙Ã˙˙˙†˙üėR#ÄsŖˆ˙˙˙áøD¨…ø…˙ČdĀäāĀ„q˙Ã˙˙Â÷Į˙ Í$^( †Ų W˙˙˙˙ūČ ä1ũ4ũd ÁĻQÉÁ‚ˆöÂü?˙˙÷ ŋ•ÆG"įc/˙ū@Đ5⌐˜Ņ*DÃá˙˙˙˙äĸķG#Äp%_˙˙đƒ˙˙ü,˙ä ˆsAĄ–‚á|/ápC ˙ø\,ˆåŽ""""?‡ ‚?ō” ˙đ—˙˙ũd C\rpLr˜äĮ!G&9‘ÁsP†X'īÃ÷˙˙˙ü”Dx) Ą—ģU]áBų( ø\ŦW˙… ˙đ˙Čd†¨äë#X&‚0"=–Q˛B{ !˙…˙_đŧ?˙"ÃDDø_˙†˙á˙ü†HfŽBŽa͆L¨Œ đŋ˙…ø~C˙ūL†G~DŅpĶƒšˆ˙ũBøS˛ūFÃ@PĨh3äH r(ŦІ‹˙ō&~ũ?š0Ŗ‘ŽaČĮ4Ŧ˜PB">ŋëë˙÷ĸŖ˙ /į ŽĐĶũ§áūBĸ=…đ‡øPŋ…ú+fG Ãähđü `rpaĖ4eC)DDD?…˙˙đŋ…ō5˙Éq‘Ã\Ž'ŸˆæGPĶ˙˙ü!B   …ˆˆ˙˙ iA1ÉÖF)*F#ūūü.C,x˙ÄDDD‚á pōT 206aa‚ūz—°ų ËÜÚ ŽDÚ @ÁEøW˙Âõū¨†HŽGnø_˙áׅΠc õÄD“#AHžŲr{Ž ˙øúácÂü0\‚Øl˜æÐ0FØ~W8x^DŪŋ˙%‘c ˙……†pČāf ˙ų 1˙˙˙˙˙ø\/˙ų°U†jBÂaOÂásˇ x•°Đ Dƒa0 ˙‡Ã æŅp%ŋ…é˙áÖõ˙_ø_éČ9qĖ9 Ø4Œ !c†@Ā˙× ,gpķąĀĮ]01˙ōqĩ´×ø^ëDƒ‘# L5˙ ˙…Ė‘ˆá’ ^ _˙øxPŧ?ü,aü†@3Á ŅOđŋ…Âáx˙ūu §GHÃ8‹†nGˆāxl6Ī#@c0_ Č(áAxįÃdç§Ú聘,A¤s,Í ũd6%Ã!Â^C˙ø^H›Vh0äĮÕa%Q†AũđžÃ‡Ôdp<˙Č-ĄČ°aÉÁ‡#!ąp@PŋūOdp%ģ˙õ˙ü>2&ū@ĖAČ0æØaČö´FbÁãøaÎō2Öo:†˙˙˙īüŠĸ†\eĀĐa…DDDDDG˙ĶTäÁj†’[… í~v’#ÆĐ;ō¸ˇk˙ÉqÍIy5Åü/…ɸČŌ#ÆÔ/đáä*å_˙3 ƒØ986āœ…8aŧíQ”´ ?˙ßh°Į1rr4ūŅ7ˆņ1Ā”­ũČ-¸æƒcd ŋ˙ ˇ4Žds#Äp4 ŋáüC ˙ųą Ô6S2~Îų¸ŽËŗˆā€Ŗ˙˙é÷ŨψdÂFg×üŠE9qí˙ f ŽĮ#Ñ!G!œsDÓÍA ŋ˙˙˙˙5 LsAæÃ6ĮÂ˙˙Ã!’ c˜sPžĻØsAdʧû^×˙ÄFˆˆˆøüĻ՜?üĻÆ_…á…‡˙˙‡å7˙”ŅPR<‡˙ū[Cb“ \™‚F>ˇō1˙‡_æRq“Ė(\ŗI"ēAø\(Xapŋ&?… #Ë9˜ÎĖ ûÎÂĒ?×ú}üŒ|,0ąŅxpö‹!lA ’E‘Ė/˙õ… đøq˙˙æŽR$v–pHŠØ†"P‹b%@„X%@‘… à Į /‡á˙˙ÉÆR8á˙…ōnZEr@¤¨0ąũčr<‚mT?ũpą×ų8ōcų1Ü%“ú"˙Đ_˙˙ū+˙ū…ū0žFN3@\)ŖĖTO  lđŋ“Ž˙ÎõG|/áãÂ˙…đŧ?ū?ü)‚°°ūDá˙ ,?†?&åäBĄáaáB!‚Č@׆ˆūü<Œwãã F?‘ŽĐPƒ˙ūCøáÃ˙ũ˙ū>ĢōcųaHã …&9ā øa ‡˙˙˙…ūáeuĄ˙˙Âáņ„_ĐepŖü/…†.ŧ˙á/ü/Ãū°ŧ>B>?ū>>(/áø^à …†ąņĮ˙üerádܰHA…‡„UŒ/˙ūᅈˆ÷kâ#'6 Ÿ˙˙ B˙&ę”>W •Â_áaĮáĮ^S5‰ã˙˙˙˙˙˙˙˙˙˙ōØXŋū?˙˙&ãWūÔ˙˙˙˙˙˙˙˙˙˙ü@ö æ æ ›œRZ(,,leptonica-1.86.0/prog/bois-4.tif000066400000000000000000001374321506303110300163360ustar00rootroot00000000000000II*\ž˙˙˙˙˙˙™ ^˙á|.L|/…˙ūđ¯˙…˙ˆĖ…ũ[Į˙˙ū[1ŒŽ?üļ+ s¯˙æ‚Ö28Ÿã‰ `C![…ū˙˙˙ū˙á˙˙˙˙˙˙˙˙˙˙˙˙˙˙áđˆ1Û˙Č09ˆ尜5‚×ŋ˙˙˙˙˙˙˙ųdTŧˇ*čFEzōÜ3# ˙Ė‹˙åXČcđû˙˙ü/đ˙ „˙˙˙…øy1ü.ŋ  ԌÆP!.dc6C …Š ũ?ī˙øD3äĀ!ĀÁ Đ „ō<˙ōq‘æGŸ˙† ã˙˙đ°ķfN28”á˙øqĮ…‡áa˙˙à x\.đú ˙ģ˙ø__0Ŋßá|˙ Œ˙ÂÃ˙ü'ßūG˙(2t}ČÂ||8ü:˙!ƒáĐxAųä…øá˙ Ãáá˙˙Ę ü/đõ˙˙ü/ÃëÂÇÃ˙˙† ū˙û˙ū!ūńA0281 !˙ÃÂ˙˙ōcås ÁĀÎ`0 FpØ9°xŒ" ã˙á…w†BÄĐH_ūēkëøˆˆ‰Ü/ít˙đ…đĨœ l+øe„# á˙áICÂ˙Ã!°-Å eœ¸4’Ą…˙Â˙đ°Âü2 æÚQ2ĸ mJ21ô EH!ŒŠ™&į  |Šūéߚđžár&Õ#…گáų´G Bû˙ņ#Č`”$AæUß&9=ŦØO+øiÃđ‡˙ūDü/Âs @Z-Ö*aŒ Ãø^) äÜL¨_vˇÂ_ũnüČPn¤ Š50°˙;JĀČâN#…dĐ3I¸@L.AaŽD)1ĸ ų Hŧ?˙˙đĻUáxĮ„<ËS†GŌlGüĒ ų´Ÿ…!GÂ˙˙˙å}YYr&NÉđQ–åÖuŠ,"Cđž/˙đáäB3ˆņÖ3EâĶU˙×Ãáû˙áPü29˙p˙˙! ūh0f4„Ŧ!ü5˙đŸæú˙ō ˙øB"#DDHmŽaÉĐĐ?ū˙Âū ū^ŋøgâ9˜°ÍȘF91ÉÁrc˙ä ÆˆāÐŖ‘ŽLsy‡#&Ĩü>˙ø_‡˙¯˙˙˙üDG˙˙đɐž ø_øx. Ņř˛č¸Bâ"""""0Ļ‘Č)Ŧ €Û˙˙˙ø_˙ø˙˙3N ŽLsAƒ&PL¨™Q2˙Č 'ņ…;+ ø\苁, ˙˙ū— įj ˙øP“˙ôä C,r1ɎLrc› 9 ĐOɎe"aD*Ņ0Hˆ˙Kū˛dŸ˙áHĨ^îÖĶO´x_˙§˙˙üŽ?ü†@eŽDÚ˛~FHFŦš˛jɄ&ášŽ"""0‡…ü/äÅŋōų ŅČ5ŽAw0đ§â˙đŋø_˙‡ ­UtôîAmA ĐOˎ„Րm™¸ˇŋ˙ņ˙ÄDDHtädGˆāhm4íž)â9‘Ác˙Îą¤hdzBŽaĖ98"aĖ9æ29‘Ä)´Žf#Čå˙ų €Uƒl! ąĸr ɲWë˙Ã˙˙˙˙˙˙øˆˆųĩâ"?ČŅ‘â?2eŅv]—e˜˙˙ä4°ĸpŋ•`xc‡ŠŨ܁¨QɎN 91Ɏd†Ãfuϟ˙ Î9›ÕÃŽAČ(˜äĮ&9‡&9æŒs""7}ŨĻļĸ@ÄūP‚|</˙˙ä2\a 5…¸ä”ÄHdÍōČāļ|H(Â_˙! š !ō ˙ä›ĒÄDÄD†QO"`x/‘á‡&9‡0æ˜äđØrpD‚AČ09 91Čđfā_ĸ ã˜ŲöĢÚ¯jš÷wÚä2”rc›9.…øˆˆˆq)F"Zã"8d/ųƒeņæ€y˙ŦČāxō šW{ņ˙! ކ\9˛ž}ņ)`× Öo< ķ%w˙Ë Į!°ÜF2.3Y˙˙Üo™VĐ˙‡äaņūĐOü/ņ… –ą`œ0ĄI˙… åŦPã áBà áøyk$ ß …˙˙ FÂ˙øYk …˙ø~ ZŅü(\˜æÍD¸x\ĩM˙_â0Ą5 ZŠ@ÆYĄ‡Âĩūđę‚–Š eÁ¤/Ē…!˙ķ‡á|?ü/˙ņ 9+-ëđ¸\ˆ€—…&9 8_đĨL ŨéŦ¯X˙Ɇįb‚áaÖJÁFʐCcCI_‡6B˙…˙ü›’9]Âų-ˆ‰”Č4Ž' úĖQUŋíq0 đ˙"ˆģ#‚ A‘ĀÎ#‚Ø2Ã#Nʍ„öh!¯BäEÖĢ ~Bë› š ]t˙ގ˙øÚj¨ƒ3!A7Á˙˙˙ČņČņŽd{#†r8ƒ_…ÂÄFŋáLŦ,C ˙˙˙ä2BŽLrc‘ŽLsDÑ&9äĮ4ŲŠŧà ’a`†Œ¨L PˆiÃÂü0ŋ /đđĄr¨Čqtq‹ĸ7XSds# 1˙˙[ĩMī˙á˙Ãü/˙ôĶĶĶ˙ä2C4rpl0æÔžË›cAˆĐ˙pƒÖ0U†dŦÔÚ6dpÉDp6‚×˙ÛøRËĩ ]ĄũSųQÁ80Ҋ •(ˆˆũ°¸_ę‚īģų#‚ØīÇ˙ĨÖKũà ‘r|†@QÍÂ1"‰hĘɤ1!4†MP†r‚`„D¨˙č™ĻmĀ_˙ G!ČžGrģ”DĒ3‘ČÅ#Âc˜sD˜â?ë …˙Â˙˙˙ū˙˙ũ?˙˙˙Č ƒ`rc“šĄPP_˙đŋ… ūüˆ?ˆˆˆŽ""""""?˙ ø_͗˙úü„‹˛čāh.f$3<‚ØeŽLsaÉá¨`ĸT‡Ø_‡˙BĘ×˙˙ūŠĒkęŊūŧ•˙˙õr —đϏF Žds.\eŲtĨˆ!Ã#BŠC0B<#ØæØäˆ’?ãá˙ĖH˙˙˙§ĒČ-8äĮ6†aĸc d`,/ūasæd(.Eƒ˙˙ō üøK˙˙˙˙ķ˙Â˙Ã'˙3qÍāÓØh0Ą2B 8Á|(Aæ áų+đ¸\ØeC82āšB"""ALq˙á|%õĄūÃÂķæēūžēČd¸äAͰ͹ĸ4„Í ’"">õũĒâŋīЈˆˆˆú˙ūŠœŋ"Dh0ĢáwōraG!œrӂ8&9¨aÍĄ‡#A Ã˜sjԞĻÔ'4# °4L ™@!˙ÕĄ?˙đĄ#PB#˙˙ũÚkk¯iū@ķ˙˙ĸĻĄ|/Ãø˙! 㐰Lr1Ė9ŧšBkDԐšBeÂqB"9TˆāWø˙ã ē yÄëYĀ4Ē˙˙˙ˆ˙‚ũMÚ ļūj ÆË?˙ø@ņũ¯ÜŽ`Ģõ˙„ŧ/ xe×Ķü)ÜE:/âč)t\2ļČĐGä.čBЌsh6˜ųÔ0B9 5 ”ÂĀUōa?_į`@ÖGŋ_ũ?OOü†7Ÿöˇ}˙ ï˙˙âA\~d¸f"^!ĐČæ|)Ė""""?á…DDDM „!ū/…ø힍ޝO˙˙ä2A´sLsA¨h"A1ÍČ#Đa̓A"~š€ŲūˆIkō ~Žŧr5#ˆģ.ˈG GˆņްĮ˙˙˙˙ô˙Ž”ˆĨ˙˙M;ŋū@Ø !G&9 A Đm— ċ<%Ãü ôœ/‘(ŽųÖ) ƒ#™ˆŽr ûM4×úŖūø˙Či˙˙[‘ÍāĀ„4×#HLЍPۂ{ øX~ wņ¤fŽ"ņälČā ŽdpW#‚Ũū˙áōq8>˛<˙é§§˙ɎLrc<Į"A80æÙ!…? …"IKŋøeÅ˙&Q¤fŽ#ÆG‹´?˙ūŋíũū:ī}4ũ[qČ☿Œs@đkHMP†Šp„C'"ɒ•_؇ÄDDHmšå9vl‘‘:2č܄DDD~ÖÕtČ*#ĩáz§ęŸ! Ŗ˜r~BĐ՛pC<†ĸ"'Nš´E¯ĮÃ˙ˆˆˆˆˆöŋ˙×ĪÄdpB8!ˆÄb1ŗ°´]—ˆŽƒYČāŽGXdcšX6Ârc›Į6rc‘ŽF9l0æˆ91ČĮ x+Á1͆ō9ˆÂä3v“ ›˙˙ü$ī˙ú˙îÕmW˙˙ŋáˆãĘé]—Xĩįōk"? ˜r{ • ĶõD A–8Z‡鯯Íq:Æ"˙˙×˙_…á…Âá_ …˙˙˙Âūü..đŸ˙…øøPžxR ųpž)!Įü0°˙˙˙‡ūˆ‡øXÎĖĸÆ ˙ø_‡…˙˙˙˙‘˙ `|‚˙ÂĮápƒ‡…>+Aąr$ 0¤H!ŒŽøac˙˙šâ0#ÅŅvz.‹ÁM#H¸9.§˙áz˙đž˙˙đĄBđ˙ūé˙­ü(_ …|,0ĄpŦak˙ ų$ s‘1ŒF 2=ų `Ž‚Ã´Āˆˆˆˆˆˆ Äqü…††qÂd1~…v\C‡˙!š?˙˙˙˙[ ņø_đ¸XūD!œ_'š…‡˙øA˙á˙ãˆq"˙)Æ˙ Bžp6Â˙˙P? †Č…đ°˙į`@ĮC…ō˙ü†Xár‡ÃááBūņÆ<‹.ōT26G‚üCCÂÂá˙ác¤6FC`ō4 މŒCŽ †>?‘`ØøPŧ0ƒ ü8x_˙˙ üŠD†]" e؈ē=GÆ]gĸ^†k‹°ˆQČhAJ&؈Ä\gĐ'ÃáđȁđČZGđü‚˙úĻžēziĒwūŊ§¯Ļŋ†˙˙…𥠑‘ČāM 8|9EÂ˙ødƒ˙ČƒLrc˜rt4†VmŠpø~‡˙įtŒDs#‚€ˆ`r""#˙˙øqū˙˙ä  Ž9äAɎN Žh0æÚ †ō2‚mË?Jà ųØ$G3`¸DDDDD˙˙ū˙ ˙Ö@˜ ‘3qĸ`DÍ_öƒ#†r×eˆÄGŽAWDDmaø}ø_˙ü˜jŽl!—C+#!—ąb6A".”LØŖ˙áÄDDDDDG˙‰€‡˙ü¨Ã!ŗ Ŧ‚‰ ‚‚ĀĄB…†ø…đ°đƒ2Ŋ˙ō1ɎBŽLr"@đgŪAœrVAD˛0ŋû˙ /ũu×ôA†PPŋ_˙„üDD4##ƒDiđƒ đ˙˙đ‡áB…đĄBá˙˙ĀøRrcų ãäc‘Ã …˙‡˙ÃvCF˙ë…˙ßŦ.ø_ŋ˙ū˙˙˙AĖ?ųČƒÃŒ) ˙ūäh/˙˙˙đđžC…˙ ü8ø"Sác˙ü,k…ú˙ (Xa˙_ü?˙¯˙á˙P (A„ČgT†C ‹—áäG#˙Â˙˙˙…ˆ˙˙˙ Ā°„g˙˙ū|>;˙øaabA„Káû˙ū˙ūB‰xĖĩąÂü?˙˙‡ōŌø‡˙˙ū˙ä4Ņ˙˙ų(ŋū÷Ú‚¨˙á… ž?˙áø^?đŋü8äpL/ø_…˙‡ūĮ˙˙Ȑg„•đđ˙˙ ‚.¯ã•Ã/™ˆ”ĄBä 1˙×üČh1˙:… ˙„ø\/páų!ū á…ü! . F?˙ø. ˙ Å×_˙˙UøPšāĢ˙˙áBø_&Đ ū a~đ¸(_üˇ3 ák‡×ø_ ŋÃëÂáBßä!á€đŋ Â?„>0ŋ…˙Č ü?đ¤0Pđ‡ū˙˙?˙üŽ..—˙`pš¸x_Âår b?˙˙˙ɲpü*ūW˙…˙ °ú˙ØxJŧŠ_×đ~Ē˙ū…Âà …ōÎąĘ˙áü/˙÷ø\"_Č×§2Ŧ0VP‚ƒnˆÎăg ˙†‡û˙˙…ÂCbãE털_đĄB˙ūU†r9‘ã˙ø^@ǃđŋ˙ü?øų &A–L#Pˆáđ˙^AŽJ„ I+™P ~;Y °ŋõ˙ø_˙ŽCVADdIÂ˙_ü?Č( ëđüųáyŲk’—üė0O˙…ɏ˙Īŧ˙>ü ‚ádd(AZBü­ƒ˙ŲßÅ ŋõķĢ~ŧ/Ŋø_ä6ä„ūø…#Ԛ¤9ÔÃ5? ƒä0>Oc8}…ū L,†Ŧ’d5äĘ (ü/˙Âđų Â˙!G ø\ ˙ã ˙ä_ņ•į ¸B‡€„s#ƒrLNĄļW …˙!C KƒNF¨„ē¯ũũ˙÷˙%ĒKn"|Gሏ‘ Ī”›˙˙ `˙˙˙˙ãÂ˙đų Gų ƒáķAs.XB˙ž<’6ā#˙˙C ˙%Œ‹_Ã ĀæÛ ÓØ~@†r9DP šę_ū˙˙_ĩŋ˙˙ø_ūB‡@ŋä( HėšˆˆŽ">"2˛á˙˙“aĀĮ˙ü3# ą˙đÂĘĄ˙˙áđü/ūáu˙õ2X ˙˙č/ūø˙ü2Ü%˙ø_ …˙Â˙ūCfķ˙2ĻDÃ˙˙ÎĘ/-ë˙˙đ„C˙˙˙ ų1țGđø~x_ū?-õ á˙˙˙˙˙ōpŧ˙á;V_˙åēÄ˙à T˜e~˙á˙˙úüîēŋáūüí"LsaĖ9ú˙˙‘Qą/˙˙ h “†Øæ‚¨äAɎl6ĻŦČQČĮ0äÃÂü?˙øü—Š(gâ8Ão˙˙˙˙ü/ä6˙ų`eÁ80æŨd0$M(!˙˙ ‰DxŽf#Œ¸Čņ—eĖچG‹˛ã.ˁÔ˙üđŋ˙˙īîôũSšX)ŽA&91Ė9æƒAŧČ'ąĸcDÍ HOf_L?ü/­G"…#Č÷vļšk˙ đŋÃ˙˙ fz“ÐAĖ9äĮ&91Ė91ɎaČĮ&9<0äā‚˜äAČeŽBÁæR   ˜!=—6˓ØĪ˙#/üá°r$Hņ#ƒiĖGi,â9‘Ãp6ŋ˙˙˙˙Į˙˙ü?üˆ?˙˙˙ų°AČĮ"F91Ė9 Ã˜sA ÂDJÍY!ãl ` 2?˙ü?!œŖ‡„8ˆˆˆˆˆˆˆ˙˙˙˙„?˙ü(\(_ jcŖ›RCÂ_˙˙ū ūĐ^˙đ˙˙ë˙#Ŧ(Ąŧ‰ąb ‰0GŊBá Āø_˙ü.Œ“ øXe<,?Âđøqø_˙á˙˙á˙đ˙˙Âäcø_˙áų‡øXa5áB‚…áø_‡˙ūü ūŋ¯˙ Al/˙˙ø\%đđžū˙˙˙įc™#™gâ/…˙ m ƒ›ČQČ09„Áö0!…ü.˙ˆˆˆˆˆˆˆ˙˙˙‡Œapŋ%‚@Ür9‡0ä,Žl4sI`šĄ1ĖL(™§˙˙_˙×īí5û_ŋ˙įh øR84Ø9‡6°aČgŒr!ŗĖ9ąÉŽLsOāŪa#&ļGąba™!2@„DxCû˙˙Âđ˙˙˙˙˙˙áä :Ü>ū˙ķŋ Ÿ˙Ä8ˆqA“VDĄ5Bh# #ŲDDapŋ˙˙˙˙Ã˙˙Î"  ˙Ęą”?Ę@ĄÎŁ?ŋîøX˙ .ūFŽû˙˙˙īû˙˙˙ū0°˙ /Æü ˙÷ë˙ ˙ᑠ˙˙˙˙˙˙ũú…đž˙…ãÂ˙áÂ˙Ī˙˙áápšˆ„ ¤Ē#ƆG‚ü~ü/…đŋđ˙˙˙˙˙˙˙˙…ū˙‡…?˙‡flā˙°%×˙…á˙˙˙˙˙ģO_…Â…ø˙_á‘H)Ą‘Āš ø_Čg¯˙†C˙#B>F?˙ū@Ô6A”rsN†.C-!2Bd„É î8˙˙˙˙… vˆŽa Ėä`Čã#ˆb#™ƒ#ÄqđSį ü|f‘˜ˆæGŌ8@Į˙áū2?øP°Â…ø˙Âų˜˙˙˙˙˙˙äÁLsA ĐLreFØŅ1ĸf†$'ąÂ˙ūŋü;ū2—dpÍ#Č ˙˙áü?ü- á}á˜pŋUä `Ę9&93j˙˙áü‚¨ä4Į…1â<Ž$28Čņ#™Ĩ…(Æ"8P¤s#ŒŽ0Uwá˙˙ø_˙˙˙˙ü‚ØiŽF9 9 žÉŦ Œ!1B 6Œr m!5C*R&dL(™ąGų ‚P˙øˆˆˆˆˆˆˆˆˆˆˆ˙˙đąū˙˙đ°ō–9 äDÐĀäĮ&91ÍCbHˆˆđĄ˙˙„˙˙˙˙˙˙˙˙÷¯˙‘‹ĸDđd)r85 Į0äc˜rxaĖ9ä(äAÉÁŧÃ‘ė ˜ą1#OaX_˙˙˙sAWđøũ4Ķû^ÖíS_đü. _˙ũ{ū˙ô""#ˆÂūÂų ûøūą˙…˙˙ …ō¤…˙ ˙˙˙Â˙˙á˙ ƒäĮ#/ü˙đ˙ úáÖRT>?˙˙îȏEŲvqG ŽÚ8)ČāÁ à ˙ õ˙õ˙áb?˙÷úwiϚé¯˙øá|%ī…¯˙ōmHãņ!Ƒ#ĮœŽ#…0#ƒhB"""""""">!á× üy ø˙˙˙ū@Ė ‡˙øPŋÆđšØ¤r#Äs12?Âū@Āæā ˙˙˙;. 0ŋA‘â/Eâ<\!€&ƒ/á‡ũ4ôũd †9 đaȔ4˜ä3ŽaČä—ū î‘Ã#ĮãHã#†@Xˆˆˆˆ¯Úw‡ár æ˙˙ō  raĖ9ŧŪi<aĸf„Ų Ãü!ĀČáHāM _˙âC?˙˙˙˙˙˙˙ķ#Aų’Đ&˙0 ­…)•ƒūBŗęfš‚ãõđË=ˌ‡˙ ėŊų$Ą˙ūdĒAKA ‡–B@°ō_˙īáiŪŧí`)”Ɓ‡†Â˙÷ūđƒ>?áđ˙ū2l$苰HPĄH`a…ešpc_˙áxđ§ey 1Qäi?…Ô/‘‚†r‡‘ĪÉĀ_ȃ…ō8˙˙ C8΃,ėh3ÖÉXH(Áã …öļPŋ–õß īéT ׹įj@aÃü/ œō!˙ųđ`Ö|! cz័„CãÂÂųn,x_ød3ŽaÂCø_ōĘ  栟˙ūė¨aP˙ĒáÎÖ Dí g;*?Ö ˙„BßüīČ R°ūųÜ,Đ0wYōØ'˙äĀŋ Į˙„Pƒ ū[Ę˙&9=ŠÃČĮ ų\ģÂárR ūvY'G äĸ00†iA ÚČ4_0§§ßüĐ`Gøúiü†q˙đĄJÁ•ÃūļŧË,×gX!‘`iFgXŪ˙˙‘ŽOX˙˙˙ūáđåŊw*V˙ČPg%Ī#Æ# ė`4˙„!˙˙˙áa˙˙˙˙:†Y>dAɏ(>arŋ†pĻ"čâ/IXžđi)ÁĒ""DØW˙á?˙˙é§ū^v(a˜r @D d°6)Ŧ1 ŗæ#˙ĘãƒIŗ!Į˙žīĩī_õæKA˙ō €žaČĮ°¤3$ØQâ^CōSã‡ūv”˙˙˙ü/˙ü?˙C;b#âB_ōК Ģ"“*đŧ? ˙ŽU˙áņ˙™jąƒQpČ<Ž>W€ØA˙Ņ äŌ¸Â˙žīüma˙?˙ëō)ŒDxâ9‘â<`ˆāhđ°ėø&Y˙˙¯˙˙ūC$ āĐA4sA˜rrc˜r1ČĮ  ™k˙…˙$”2ˆÄG29˜9 8ˆˆˆˆˆˆˆ˙˙˙˙˙&9–?˙˙˙˙Čhä091Ė9 Ã˜sa ØaČg\œal)—†?˙‡™ŖˆĄāh. Ų˙˙ųŲ#˙pĩ˙ĶM>ä œr1Č)ŽLrc˜r1Éá‡6sLsAäĮ&91ÍAÍØr{ &,A¤§˙¯PĘ‘Āš˙×Uĩĩ^îí5ûUųØ ×˙"ūž@Đ6Į Ō9‡&9æĐjb 98&9 Ž 9°Ã˜s*&dM(™a0(†"4"""0„DZ/ų’(#…#…#™Ždqųņ‘â8!02čÎ#ÁrYC!ŒŽdxˆņ028l#ÆG`˙˙˙˙˙˙…üī‰˙ü?˙§˙˙˙˙ČdĄČāđäAȃ“‚rc› ŽDœsAG„Ã0äčGY‹Î$CD÷B"#˙đŋų‡ ˙ÄDDDDDDDDDDDDDDD˙˙˙˙øAá˙˙&€ŋø ˙ČRc“ĐaÍYëˆaˆŒ!„"0†˙˙˙Ü,ua~Úk˙ü/˙˙äj#†?ō20!ƒ#Æ‘à 5ÂäՓ‚0Bc‘Ę0¤M(žë Áb_ü‚ ˙˙˙ø_˙˙˙Â˙˙˙˙˙áNDxŽfpB<  q˙…đŋ…˙ķ˙˙˙˙˙ČdČQČX0äā˜ä5Į‡ņ„3ŋøÃ˙× LŧpÎDpÁ28228Á–)¯˙‡Ķ„ŧ/˙øZ ŋ˙ž@Ú9&91ɎaĖ91Ė9=•‚%ķūi|/˙Ã1ĖŽdpŲU_ģZP˙‘ “2˙ü/˙äÁœrc‘&1Č09‡7˜ru‘•&4L¨84ĸ 6Ę5˙üî˙!ÄxüG3#™ @Ķ˙ûU^øAáÃßđƒ ˙ū@Ėā†häG ĸ Ģ0äAĖ9äđÚ HLJ"8ˆˆ× †l>ÃÉÁļ üDDDDDDDDG˙˙˙Č2˙˙…đŋū@– #˜r1Č6Á1Ė9ä3ŽaɎBŽjĐh4•™a3HˆÂÃü™g…ū?öļļˇßŨϚ˙ū@œsĀĪD@fõ˙ūLš HN ąČlԆ&98&\ØM!Ąƒ6ė3%J'ą„÷@†ˆˆÉ–Â˙!Aˇ˙õō{§ņ˙ũõĩø_˙˙ø‘ō)†DŒŽ ūDŅÄz.Ž#Ņt^#ÅŅÄ\dp¤s#ß˙ĄÄq˙˙˙ĘĐm˙˙˙é§ĻžŸĻŸ˙đŋīū Ãūür\d% Ž ˙áo ¯˙˙Ākß˙Âũkárh8˙åČÄ`Čņƒ#ŒÁ„$9\Lq‘‡3*˙˙ü/˙˙ųæŸ ļc˜sh0äāÛ Žŗjm”ŲQ=’ÉĮđ˙ō ŧ†Ä˜|2<ėZ1ÆGŒ#ÁL`2A_'Ŧ8 OjDÍ \ā›R Ōß#äŨh˙˙˙ .ƒ#āĶūMƒŒF‘ˆ✅Œe¸qƒ#™ČāK˙đüāaēOō€¯æиaȌâÜDDDG˙ųP09 ąČĮ4 „eÍC0fƒbæƒA?2`öški¯Úi§k&(OkD4ĀQ/˙ČlS˙ų0'īņä¸ŸÃøa˙˙˙˙ŒļüB)’á…ū[x),íH1Ęą˙ü(\ đ‡ų ?–ؐfųŲPf˙˙ųŪ_˙đū4ųmŠČ1ËZģ /…†A„Ÿ…ū3¨PĩųüĖĀŋ /ūL /ųk 3øPĄÂ˙äÚ.Ā͐P\ƒNÆgŧĩ†Ã'˙áųŦsŊBøCđŋųj$ w# +¨_đū|3‘Ī*ĖëiōÎŦ@ϐAæģĒÚ ˙˙-Ԍ8a PaÆBųd ô0ƒ „Dną ų*8˙˙ōS˙Éš ` Âāƒ"̆ō(á˙õOáI•~…-č _)˙^+Œ?˙ áHā*ūČŅ™`PšoÂ‡į‘Á‚03‘Ä%Ãpρ–Dƒ7˙ÂáRp°ÂÃ˙˙đ¸RĨ3ŧ –AüŽh pPG¸Ëĸ02˛ŨPū0‡á˙˙X_ã 5?˙•Æ\ Âá|Ž8l#Œ" 5‰P‡ ™ đ˙ß˙Č ū/ų ĘéC8?(2Td*"A‚ đ†GŒ‚AX äq„!˙A˙˙˙˙˙øX~ūø~RÁ¨Č P†vZ ˙‚˙˙˙×TōēĐ0@Œî†J Ū?ÂĮūû˙ūw¨˙ü/äãįp2X äĐķąĮ ‚^ÂĮų5¯ ÆÂ˙ųÚ!˙đËtŠĖŽ2ĐL™ē¤•¸˙í5Ã˙ųp˙˙„"ņąĻD†WÔ2C/ō¤˙˙ūA”gū2oņȏGv]gw ĄÄDįk@Úü­ŋéǧiŪŊ‘Gü‚žē˙;ČäGĮĖŽ! a§Ü?ËWÎü˙ū@ÔG#˜äĮ0äĮ&9 ™Ą6æádäÜĸČņ @O˙˙đãæZ†Ÿ˙ČĐæƒh'°Cl¨!ü‚8Ëu¨ÄyEÆ\#Đŋ˙áäIúië K=HeŽLrr1ɎLsA‡4Sy‡1ž x)ŽLr$/1Ž3Hņ#†Â80G28l#Č6ú­ŨĻŋkáŋü‰O˙˙Ȇ xeŽN 9 9 žsPĐfǤq˙õ´Ķ^AFƒXæķLrmĨ€ŋ˙ų1B9FŋūG˙ä Ÿū˙á˙ū˙Šá‘ãá…ūF¯ņ˙˙˙Ã˙ ūYËWO Ž? ą—ü2n‹ ˙ū_˙-”Gf†vĨfJFvTü?ü•iš8đŋ˙ü0Aįj—…˙ëü/…ū˙˙˙‡˙áÂ˙á˙ūA˙˙˙˙˙øRT˙ū‚G˙˙˙˙˙ü ˙øü0°Č˙áü/˙ū˙á˙˙ø^˙˙†˙˙˙Âø_˙˙á÷ū‡ūß˙˙Âũ˙˙ú˙Â˙˙˙˙ø_˙˙˙žB´ķ˙˙…ß˙˙˙đŋ˙˙˙˙˙˙Æ[†'˙˙˙˙˙ü?!AoáŸ˙ĘÄv!—dpi#ÅŅv]—˂Øk˙…˙ūĢéŨßü(A˙ ‰#āĘG Gh1ū˙üĒ ˙ø_;`)ü0žA ųPUáˇBpaČkŽLr ‰ė žÅ Æx_Ęä"ņäfËÄxģ#ˆG3EĀđX#Č5˙΋˙ DΝúú|,Ę ¤5fVh1a=Š­‚ĀŊ?™ …Œr$ĮČķà u G G3Ô6Āæ û^×ŋøA˙˙•w˙ō Ļ4O ŽaÍĮ4 ī ėH(žÍ °O"#ė/˙áB˙˙ū˙?ÎĀ„Âü((æƒaČōc“ƒbäa‘ŽD.AD"""#˙˙˙˙õ˙˙˙ ˙ūv2T ?;. ũdc“ÐAȃ“‚ã‘#˜gĐADŒĸ"!á˙ūŧ/˙ūí}|~đŋ@šØPg˙Âō!GÂøA„"!ÆBȋš0hˆ?˙˙˙˙øA…ü/áNÄŽ@ã˙;ė¸1ä¨äB‰Ų`˙Âü/…ü/˙…Âø_˙˙†~ÎFw`„€š (A™ ˙ęčü‹ƒ˛°Ęũr(y;Ô3˙é˙÷˙÷úūžņ˙ápŧ2T xCų ˆPžü!•bHƒ`rsaĖ9 ˜äÁ˜ŒYđ°ü/“Ī …˙˙á˙˙˙˙˙á A°šĪ0ƒđŋá˙’@ØUˆ*ÆG˛9‘ĖÄ`šGˆˆˆˆˆˆˆū…˙˙ü† …ü‚˙˙˙˙ĮÃđƒ#@˅ã2eŒœ\Ŧĸņ.hõâá Č4ŋ ˙áBø_Ũéúiū¨(Į0ä2õ&‚ F9?7ÍØĄ8Âū|u˙•A✎0×cŽĢ˙ō"GdRŧ˜á j‡#‚ paÉÁ„ˆQɗ ce lŒHƒIQ ÆDDFA@˙˙áp¤Ę0dxĀD˙ü/˙ųŲ{đžđŋ6¨äđ†Xä5Į!Ļ9‡&9°ŒP†nł_ 0>˙ū""""#Â˙ø[˙˙ÂøD' L 9 ŽA@ä3G&91Ė9:Čfî4í B"#Čpŋádü0ģ˙ūîũx_˙ōH&áđŋ…#VC„đšQ¸&91Ɏa͆N eB D3d°@Āäö‚t"a:ŖÄDD0ƒ  † ų+†A…ŽJáųĮ˙˙˙˙˙˙đã˙˙ árH ˙˙áp°Č R # Čgü(_ÂÎËŋ; ˆü?øaaëáHą˙ņ…Œ/ņ„ōëÁuä@˙˙úÂū˙?’€¸{ĶÅuø_ü(PŋūD‚ų 'ū˙áj?ß ũ…ü‚‰)ay–ĄūfØļ@Āü|5†Cd}ūá˙æ?øaÂà áüėŊÃøy Gäā‰%‚ ü2"?˙˙˙ ˙Ã˙ü ˙˙á˜?0>Bĸė2˙ÂĮ )!Æ#6]—ŽŽÎ2üžĪŧ!›´„2ö$FP‡ąö á|/ū˙øar8(Âá…˙Â˙ų=HZiŒr ci†HĮ xg†l’‚AøūA@˙ø^T¯˙đü/˙…ū!Ä?Â˙˙…ō˙˙â"1Č(‘a Հž0ūA@˙ád˙“˙Â˙˙ÃÎŖ¯ã˙ü,?ú˙?˙ááđY ūB ƒüė(˙ác˙ÂÆø\ ü/˙…˙˙˙Â˙áČ1Ođ¸_øaŒ/P>˙†#ü …ƒĪ‚xA˙˙˙˙˙ų2aņt^Č6G‚;.Đ˙Č$oø\˜˙áB2 ø…˙˙§§ČlŠ÷k‡õ ˙˙˙˙đŧ?äĮ0æØo4“ŦG28k˜ čpÂë…ōxe| đ¸_!˛?ü/˙˙iü/˙á˙˙áųŲ`e”F#ášGœĀdœGūác ˙˙‡˙ūC"‚¸æڐÎe"8ø˙˙…‡ä .0S ¤p:Â˙Ãđŋ…á…˙ÂĶA,´,sPā¯ā! ąČAÍY ƒFķ ËÚ¸‡ø_‡īģ’ņČæG G˜(ÚÂ^îĐVŧ/øA˙„0œä A0ášžW…˜ä1†‚!A ›4'ĩ#lĢ!°P!qG˙ÄDFb42<`2TŽĐÕ˙˙ ņø\)E˙˙5 91ÍĮ0äĮ#‚1ČÆ†Ũ íJ""0ŋ˙…˙â"#˙˙˙Â˙ápĄ63ų ŅȆ˜äAÉÁ ĐmĒÔËDÁ ą „G˙ø_ ˙û[M5ü?đŋ怟˙ÃÉë>d3(Úŗ+Ž2ĘQˆˆ˙ū˙à ÆŌ˙˙ Ã˙üí`aNń Ã?˙ø|?áÃ˙Âü?˙˙ė ŸøaaÁë¯˙; ‡bAąs° Øv4<˙˙‡Ŋu˙˙×ūøÂ˙˙Ö˙˙‰p¯… Ã˙¯áÇ[˙đēŪČl(ü(Cø|8…˙ü đ¸PŧC •ˆÄGˆæGą?” đ˙˙đŋ˙˙áađÂū ݤ ŧŒŽPe<]eš …‡ū˙ũéßxr Ë ˙˙á‘ĖÄ`4Čņƒ#Ø1páĮ˙ü/˙ä Ē9 9Á ˆ91ɎBų °Ė,Fl”N8|8˙ÎÔŖŽ#Æ"Ÿwöŋ‡ ˙ü/Ã!•ÆË&@‘ÚĨã˙ü(_ ˙˙˙˙Â˙…Š 2&Âĸ?áøA Oõ˙˙Â˙˙_ņūÂÜ+×˙ūŧ'‚ü?ø„…˙˙ü ˙˙đ¸_˙đŋį˙ ˙˙đđŋ˙ūø~G˙˙ø|?˙Âáø˙đ˙˙˙đ¸_‡˙…đĄ˙+‚Kũ˙ápŋ…ëũ˙˙ū˙×đ˙ …ø˙×˙˙˙˙‡˙á ˙ū˙á˙˙…Â_˙˙ū˙÷˙ „2 둷đˇü(_0 ˙áB˙áäM–˙áx˙˙˙ÂÃø˙˙ õū˙đū# ˙á˙ü/˙đÂúë Žēû?ŽžŸß š\â#ëɗ ˙ú y]Xg˙˙‡˙…ÂéũøAũ?ŋáĩõá~Đ~ŧ<" 2˙˙øaKr@Ĩr@Û˙ÂÃ˙‡ø^[… đų’CÂņø|?Â˙ōēĐeáø^[–_˙Â×Ãß íø[A˙ūXø_˙Âú˙ķA *ëūūūđąÜ?á˙á˙˙˙+’ ƒ!†˙˙PēĶ˙ü?Ëq Í9ã#C"ĀĒ˙˙˙øøB3$ LÖ˙˙…‡ūüÉ`4áJŠ_ūÃ!›˙­˙Ė•Å5˙ä¯åšAČ`y(„ūŧ<Ȑø˙ū?˙˙˙ÂųØ…Â˙•°rÜ\ōRøáú¯Ŧ/đō´ ˙áá•Ęĸdzü˙˙˙˙—ŗ*ųi!Būk‰x28-†Ī˙˙˙˙˙đ¸A˙… )ąœFĀä˙…˙ޚr Í˙ üxS-LÄGˆHcxÂ_Ã˙!°˙˙ō °9äAČ(Œrc‘&9&9äā†q†Ãyƒ#!—˛ĸkęƒÂūá’ĀP~%ãã#Č˙˙đŋü?Â˙˙ū@ØcŖŖ“ķaÍš09‚ˆ09p(ˆ‡˙ņ˙˙ø_ öČÁ#ØA”sA80äĮ&9<0äĮ'†nĻŨdIĮūö‚]5U[íSNÂũWäÆË(6•sA1Ė‚"""E,”ˆ‡…˙‡á~˙ äeáÁ|(\ė, W á~˙đ¯×˙*G¯ …Ŧ-?“‚{XũÂ"j?˙˙;. øAá˙˙&_áØYü?ōö¯ LrjApž˙  w㠝† _ øPƒ đÎʁFh ˙…˙đŋ˙˙‘ŽDÚOÂ…˙ ūh āķž á‘ūvį8\,ƒCš Ž#˙đšŠūüx_˙ ŋá.C|ėpQ˙ø_Âūq˜ˆâÁA `Ŗ^ü‚&eáÂūō ?ōĀ'Œs)sa‡2Qø˙…˙˙üīâG#™B8R8§˙øøR&˙ø\.˙ōĐSœķ 1!5õ ų#°ƒ0īá…đž œŒrDDDDDDG˙ íLg|/á}÷bu?ūÚ}Č\rc› 9°ĐiË#ŨÅ ėŌ˙DDDDDđá‘Āč +kiĒ˙øųXrc›Í †^đžÔ‰í(‰ąBbÄ×$Xđ˙ˆ˙đŋ˙ųØÕ…ū1ÍB!pØrc“‚¨`sAäH&91„3Öm ˜Q=|8pđĄ|/˙˙˙Į˙ū/Ēü?ŗĩĮ…ū0ąŧˆ°C,°šQ ƒ`†Ą ˛BkDÍ ˙A ¸_ß˙÷đŋ´Ķ[U˙˙û ‚8Z˙?ü-…˙‡ūød6oûėƒ™ ˜æ ˙áÃÂ˙˜8a˙˙ÂūJƒ8_đŋ…đ°ūF ˙ á~TøPĄ&eÄņ˜pŋøYQ˙¯˙Ãáø_˙Â˙üØĨá/˙ō l?˙˙ ˙ÖP ?ß˙˙đƒ˙ —™ī×!(Ÿ™cÍMđ˙ō{V˙˙˙˙˙ …đŋü? æYˆņø‡ã‘Í"9˜ˆæGŽPÍ##Į#‘Ë029ŸQ?ū?˙đŋá˙˙˙˙˙˙ hc“ˆ8_ …˙˙ŋ‡g~‹Ä{<‹Ä 3lÆ]‘Å.Sø… ˙ü=˙iūžžžˇ M ´˛=†C/bĐ˙˙ũü/Ÿ3.dxŽ ĩįjÎŋâ?ī˙˙ōĀĪ2đŪF9‡0æÂ<2 (MrC%Ú ŠŲ§Ã_ˆČâÁbDšÄ”Ds?$–J#G ˆQɎl"""""#˙˙ü/øA…˙˙˙˙˙ü¨4ŽLrc‘ŽAÉŽBŽaČX2 Š Ô4ÉÁ‡6e„bQÄC˙…˙ˆˆˆˆˆˆˆˆˆˆ˙˙˙˙˙đŋ÷…ŋČƒ8äF91ČāĐl6¤ÁöaöĨ˙܆ͤßë÷öžŋ˙˙˙ōeHžJ'ąÉ™46Ã&´LĐÛŦÛG¨_ ūO ąOü/˙˙˙ø˙˙ápŋ˙˙˙áü,p˙˙‡áū˙˙ū…˙ ˙˙ū˙…˙ū_đŋ˙˙õ˙û˙ŋūÂ˙˙ëų÷đÂĮ…‡˙˙˙đ˙áø_9 ŽLrƒHäâņ˙˙˙˙˙˙˙ūFƒ˙˙˙ų EāĻ€…ÁČāK_Â˙˙ūūŸëü+˙˙˙įcÄxŽf Ždp9†ŋä.Ö>˙˙˙ä Až 9 91ÍĐ`ĸ7Š=ĨĮ˙ááädxŽŽ!‘˙á‡˙˙˙˙ų`'“Đh4 (4ƒ2ŅĐLPžÁ8ÄDDDDDDDD˙˙ápĄ|Ú‚ČQÉÁ’ŒhF”eÉ?˙˙Ēiü.ū˙'„Į ĸ 91Čg¸ä 9ąÉá‡5 Žm ÛA0B=¤#ØB=ŠŲ—…īū?˙˙˙˙˙øđø‰Āˆ‰(3ąĖ™23´ ­ˆŒ!đđŋ˙˙˙3˙˙đÂÃ˙ũ|/˙A‡˙˙ü>ŧ(_ūŋ˙˙˙%c˙áų JŸ˙áaß˙üa˙˙˙…˙ķŦG_˙ō$ĩø˙˙˙üp˙Â˙“˙˙˙Įņ…˙ OjÂđ˙ģ,ár3mr{Rō=­ūԂl¨pũ}”Bâņ“ŽB˛ë Â˙ÄÉ`x øešAøXrĐd$Ų…0˙;åĄ`0~øqäcü2qÃøpÂ˙˙Į…˙ ˙xAĮü? .×ōĐdc–âƒ8đŋĮ?ŋ#€¯˙Ãá˙…˙˙˙‡×Įü|ų6ŋ˙˙˙˙,„‚xAø\Ž?ÂøRÖ?˙-2áƒ$ Į˙… ˙øfAA›Ãü(RŌäwÁ›™ƒøIúü˛* ›x_‡… ä6@FJ€ĮŒ˛)ü˛ …į~_ËrĐ@ žЃ“rĀÄ0“֯…” ĩÃ8˙'ŧÍ*Â˙øAøRn$…˙đžԉ\GeAšv°„\3NüCĩƒ?úß˙PŨP†Y†‡øA‚áH0?ü2 äĮ’ ÎG?ĘåÁŽd¤ 'k;2˙˙?˙˙‚FU˜ˆađĨšLŗĩ `ė˙đ_2V'_ä(äAįpgX‚ “›wzÂŋíä/™ }‘(aĖ8FACō㠛Zķlg˙ū˙ü øayfˆ‡˙š ŗ/Â˙åu ŦFAŒˇ4wBáķ$6‹Œ$EÖK63$Iš˙˙ū>žžœ/ü2fT-ÖA˙áMqŲPfÄHQaZ °ƒ u ˙˙áHcd„T˙˙ÂáC…†_ááH RC 2ã…ķąī˙‡ø_ Ã˙ ˙;ŨüIxŽdp<Ą˙ü(AĮ˙Č2'Įßä¨ G…1ģ.2á2ėģ.‚õĮ˙á^wāÛũ˙‚ŧŽ…ęĒĒ˙˙ëWGëō\Nâ#Äs#Äp¤xå ŽĐeō ņūDØ~M+Œ <21ũ˙ūr8˛œrc˜rrpLrƒHæ˜äc“ĐLsA87˜(ŒČ™Ą=„đŋ˙˙!ļ?•Šˆ"'†â°Ŧ(38‡Dz"""""?é˙˙˙˙đƒø˙;Hx…ūēi§ō `Ö9<#˜äĮ0æӂc˜saÍēÉŽ¨aČiīXˆņĆhį‚<ŽˆĻ"8``ĻŅx\!5ČėÜG¸ˆˆˆˆˆˆˆˆˆß˙˙ũ˙+/â××õTũWž$ AˇAČgÃa86čC B""""#‰.˙_ÄDDDDDDDDoīáōŦ6üœȞA<Œso4Ú 9: 9 ØLrcš2t f °Dƒyų9L°Æ„à xfŽe„?˙øoĩ˙ūĶNí{˙˙ĘĀø‡ÄDDDDDDD|­Ũc"ƒ&FRŽOkä ļõ˙ūĻgžŋøy¨2ar.‹˛á’}O˙ÎĖŊ<Į&Ü (Zwú‡é×˙üt,ˆæ`fœˆņ1¨Žą#Æ"õ%Ó˜ä,sPĐä́fÅDyq‚¨øy”ä^9â9”G∏DxŽy¤-‘°9­t×˙˙ûT˙˙˙˙š0`r1Ė9šƒ› 91ÉÁ¨AĨ”k Žē×ņí}mU5˙1 hŖ“…Œsj 9… ¸! ”’¸˙˙˙đ˙ōzÃ6#ŲFNZ‘ŠĨ”<2̀ŖáÇ˙ŅĀđmōČUâøk<3MŠŋ˙˙ūD˙„#ķąâHĸ#Äs>ds#™Ė)C)#‚ÆG28†ß…øyÃ\ØĶ˙˙˙˙˙ ČĮĮūF@c2Ž#6\ds6‹Äx¸Ë™)€Ķņ˙äŗq”ĶŋOĶų`-LsaÍœrpc`>ūG €C*ãȏ‘ČÄGŒF"9˜28ÁŠöšÚĻšr=…<5dĩ˙˙ū@Øc“ƒAæĄš†qÃ3D´Čņ8!ȎdxĖĖŽdxå„2#Į"ōq˙˙˙øPƒ+ƒ˛@Įį`¨â3eŋãÂ˙˙īåJ8!ˆŽdq˜ €ŋĮû˙…ÉŽe¯ÉĘá|/Ø_˙˙˙Â˙˙˙á†ų‘ãƒ#Äxä`˜Žds#ŒŽ!ˆŽėģ$\!5ä6"""#ō ˙˙áüŽ?đŋ˙˙˙ûģ×ä ŽA^ 9 Ž†ōcø_ū}#ČÂ˙˙˙Čƒ<&91ČaAZɄ1sjmI™ŨfØäˉėsl'˙đ˙ڝbˆĸ9)ҍ a›˙ČuϚđŋ˙˙Ãü!˙ũ9@gˆ&91Čāœ„ˉšu“Jxˆ˙˙ˆˆŽ""""""?˙˙‰Ãđŋ%qɎF909 ˜äMHā„mՓ4 û˙˙ūĶ´í˙Č Ą]ĪŪAG“  „đžĘ˛r Œ s"f†R0ņÆūv0!l/˙˙ūߐ(ކŋ˙äʐ<5G0Nō$˙í˙ xØ×˙ō$‚ņü?‡#˙ä´2˙ø‰H ä°ąČ)ÁĖqđ˙ūŅÁŸj_˙¤ƒ*}¯˙xak*à ˙ä(â""">˙đúë˙˙˙ÂÃúū‡ū˙đA˙äãɏäã˙˙˙˙‡˙ÃĪß˙ø_ɏđūÃū˙˙ü?ūÜ÷Ã˙đŋü?†˙û˙˙ŋŋ˙˙õ˙đø?ƒųĄøp˙õü/ü?‡đ˙ ˙ü ˙‡˙˙‡˙Ãū"K_đūūF… ä,4˙˙Ãũø~˙X_đ°Âė?ũ˙Ę@Īá˙û˙īü‰˙˙Į˙˙˙…đŋøX|?‡đ˙Â˙˙árCÂđ˙áÃō\ x_˙˙˙˙Â˙˙˙_˙˙ø_ķĩ(Á‘㑈Ā`ްČáB Ē9¤‡ä‘pƒ‡˙ø_˙˙˙˙˙ü/˙˙ųRŠ ƒ1āĻĖ˙˙‡˙˙˙˙…˙˙ÎÆF„q"æÑxĐg-˃9VDœrc‘Ž"""""#ü)>˙i§÷ęēüĖ6Į0æō°h#ķdŸ‘āŋų’ČđR9˜¨ö‚ĩíō˙ü,5G&9rcģ‚…‚0„ü˜Â(ØÂbÄ2Í(’‘„#â""@đi‚DŒsC4rpDƒHæ‚c˜sa Đh1s Q â8„s#4Â˙ū/˙˙˙˙˙˙ųh`rrh4S†FCd”‚ū†Âņ˙˙’Ę?0& áM6†ØæÃPØN 9‡0äĮ&91Ė980äĮ5 9•›`Dõ1Aāšã… õū˙™ ū×ģģTÕ~×ū ĮįhēÂí?“&‚ž BÁĐmLPD44 ęL""""""#˙ü/ÎđČcqņ˙˙á|/˙˙āg˙ ˙˙đ˙˙˙ūB äp¸\/ ?;5ų‘ ü‰ ™*°ÉH6ūv8(Â˙ũú˙ß˙Â˙0ž˙ĘĐlō¨2 "`6 … ˙Đ_ü/…˙˙_ōđĄB‘#Xa †ÍįøPŋ…Č l … á /˙˙˙˙˙ø_˙ Øi…ÂÃ?øÂų$. ¸PĄ|ŦP~f˛6˲č§‚ã#†áœē8ĖŅp3ŧ,0¤3Ē˙UAČl’§ąĶ„Ēūš§Â˙áBä 2˙ß áIxŽ ¸_!`/á~>?Œ.@Ú cS…‚c“˜æœslš ›˙˙ü/˜Äxũ‘‘Čā‘˙˙˙… üä6˙˙5 QÉÁ˜r Āæ‚ 4á80æāƒ<iŽDœČ ĄŊ<,DDDHm<Ā7˙˙˙˙õ-đ /ž@š'6aČ`sh4‘„"##ˆˆ†C,ŗ¯ˆŦ/ūw­˙ÂūO 9‡'B0är äā ŽC4r @ĖĮ&9°†˜Ą ŲÍZ#*!–9¤TC5+ˆˆü/á˙˙˙˙ã;,¸ÎÁ(ŋ˙øˆ†C˜B!°L†ZQą ŲÍ( ĸ>ųÃ˙á…˙Áx|?ÎĘȐŋ;+N_įe‡Įøa), Ō’8e 1øZ˙øuOõPČlČgΆC`˙˙á˙˙ķįü?˙ūA@ü.øS~~xA×˙ø\†Čō#ä0a…đƒ ŸČPgä˙…Žeô/č?˙á„BŠ…˙Â˙áxü/ø\/˙ü0ŧ0ŋ…†A)ņō¨8Cá˙_ÂūKˆ˙ū`Oøü?ü‚ämeÆ]™¯ō …’ŖđČZ|qázááAÂ×õ„ęŸđž×Ž?˙˙˙øf"8d0?à ‘üė°)ƒ…aHl4đŋ˙˙˙˙˙…đƒ v¨dxŽĀŸÃ\‚˙Į˙ä,|2?ū? ˙ų@+ČiŽNl‚ äā˜BtÂádØßõ˙Člģ.ˆr9‘ˏ¤xÁ˃pˆŽ[—Ō8¯˙˙ü+ķK^÷wúũČ æ÷|ĖĮ!`Rģ ˆˆū"ˆŽ†žG0ƒ4ŒDxŽ!ƒ#Œ‚ ÄGˆã#‚‚9‘ėäŠDxŒF"9‘ÆG29ÃDDDDDDDDDGà¸_˙ķ˙˙˙˙˙˙˙“ l 9 91ÉÁ`r21Ė9=LPF´NC ‚ƒĢDb„6@ÂđLrpÁa˙ÄDDDDDDDDDDDDDDDDDG˙˙˙ņņš?ÂĮų qČ@œrc‘Žo6ĐMP‚…ĸ2ÂģXDC˙đŋáH ü>˙…ũpą pãÂÉęA<ƒ^ːk…!°Ô"h0äpa„PØsh&9 ˜äĮ0äH4ųŧՓR `‚ŦP_¯˙˙˙đĩ 0Ķũ5ĩí;[ĩû_…áøW˙ áa˙ø\…‚kaˆâ""""""?ō†Cžŧ(_ü/˙´˙˙÷‘2P¯¯ä(øPž/…ø"G… ÃūÃøaBņūđĄ˙;ČŌ1ˆį‘Ã90G“ŋø˙Ç˙˙áaQA…˙˙˙˙˙đŋø_ Ē\f¸ā4‘Āšŋđ˙‡đ˙!° ˙˙ũ˙…˙ōˆđS#ˆG29‘Āėëâ ‘…!°|) ‘c0ŋ˙˙6ÄÉ ąČĮ"C˜s`ÉÁ1„ l°ÛÛ ō$|?%‘ĖDxåū‘HŽd{ĖDxޞ˙˙áx˙˙˙ü?˙˙ČC`ä5G0äĮ'†Ųrj† ™Ą2‚4]\dÅ?ü,DDDDDDDDdp&‚˙øÃäMū@ĐG40äĮ&9ät2 9‡0æÂ Ŗ“Ûc °C-(†l>?ü,?˙ūŋũ­Úđŋųxü/'Y‘(L2{Ŧ…‚5ĸˆÁ&@°… ŽÄDD2 $aa˙߅˙á˙ápĄB˙á˙˙ü?đ¸\ˆ?đ…˙˙ ÆÕ!Ãáđ˙á‚ÃC ˙ũü26¯˙ũuūaBū˙äĮ ×ü8ađŋáx}a¯ūĐÃÂá Ã!‰-Má1ČY-~ŋb¸á˙đđŧ?˙˙˙˙ÉE…ū˙‘Âä3ŖņáäH˙‡ÃáŪŋ0ąĮ˙˙…üŽ28d‚ŸđŪŋ˙ đūD˙ü:‡_]…F‘DGˆáLpW#†@`Ždp6<>UŒx/¨PPĄ˙˙ūøįiQøŽdxâ9‘ˆ ŽŽ¤s#™Ÿøx_ (Pŋ˙˙˙&Č”'X6Į6Âpâ"##†™Čė)Á‘â;.Ž âađŋ˙ã>c üĻևÂų™‰˙˙ųĩĶÇü˙š?˙˙˙˙ø˙˙&?ø]Ž?˙˙ã˙,ĄWņ˙ų‘ §ía(z“ –jĄ–ÁPÂ˙™-Âå°ŋü/Yl Į“!ŽCbŋÂå°eČ4¯cÂä0Š…4-W& š (1$žF>ų n"""""""""#˙˙ũÚ˙˙á˙đüĄ‡&91ȆXäüØF9 Ã“Ðŋđŧ?ü/“X‡˙˙ūŋ˙˙˙˙˙˙ü–‚¸|”ČæGČāyõ˙˙˙˙˙˙ū˙˙˙øäXdp<1Įūō6ŗhÖËŦäieŲv„DDDDDDDD~E˙ü/˙ũ=5OõU^˙ō Ė!>’ņ‹1dxÄGĄŸŒ3‘ā„DDDDDDÂ˙˙á˙˙˙ gaÍY˜™AGCA ŪO 9‡&91Ė9‡4᠘æ˜äā†@­g_øŧD–.Čņ—!ë‡ō1Ė8ˆˆˆˆˆˆˆˆˆˆ˙˙˙˙˙˙ũ駯}˙˙ KqɎC˜aQQ2Ŗ-Gâ""""#DDd2Tsm!‡øˆˆˆˆˆˆˆˆ÷˙˙‡˙ä @ƒAČeŽAŒ6ŽN ‚ō.bÂ`† 2QB!˙˙<G4B˙jŊ˙˙ᙯ˙ũϰš0Čđ†}ŦZ'´Z&´@đÕŌ3q˙ú|/˙Āædū˙˙˙ö¸˙˙īūALrc™tøC˙ü!é˙˙ō‘Á§ŧŠ_ü2ßXē8Ž#ˆ¸ČáK˛@˜Į!°r1ČXäĮ0æĐLrc“Æãq!’c˜sC,r1ÍĮ!Ļ9‡m~Ķģĩ˙˙ä °äL0äāӃl7“Â1͆ƒ7C5ĻK˙˙˙äÅ †a͘æƒA‡6ķ Á@ŖØ98&Í"5˙˙˙˙ü8ˆˆˆˆˆˆˆ˙˙ōO˙‡–¯˙ ”Č˙Įáããá˙à ü˙˙˙˙˙˙˙ūZĸĖ3/¯-@ŽY•‰÷ø\ŗ ųh ÂŪd 2?´×æA §iBŦ_˙˙ų–°SēÂįkœ?˙˙–@Ŗø\ė0Ưü›ô"W…+Žt•É \ŗ ˙˙ ›4˙˙†Vķ# §jBȰ_<ŗŒ˙˙ÉāPŋÃ˙2 ū™-eˆ~8†-ʁ âAƒ˛ aūŋ‡|%G˙†)”R ÍJšÆUƒI7(0ĄB˙ū˙˙˙đŋæ ȰNŌIH a (PƒđĄ˙˙˙ ˙ū}…!‚€i;J ˙ä0cˊ ™ ‚äqī˙ÃČQáP8R ü2 #÷˙˙čœ3á˙ŋũ5„ëū œ,–Jƒe€Á*—˜ƒIĨå ũpĢ˙ø_ÂūĖ„Œ ķŊb9˜2=xG‘0äE?˙˙? ›§…ü.ü$ũ5˙ø_đ¸_ø<)6‘p…ÂEš~˙ķAļmŒß&lÕSøXũĒøqųÚÔBĸ9‘Ėâ+eÆ]—v\aGˆāŽG˜(˙˙øq˙˙×Ãęęœƒū@–cĪڄāĐ`ĸd„Ö‚ü%˙˙cņ#™#Äs#Æ‘āƒ#ÄpX#Ôũ¯i¯Âú˙˙˙˙˙ųHrcŖ˜rh'äc›u“Ø6Lœėr1C-ØäË ĀB"!Äp˙ˆ‰îBŽaĖågeŲvgˆņš8‹ŗgfãR=YY:$Fáb"""""""?÷ áđŋū˙ONīôĶžôü:zČ-†¸äAČ$Žd„e†ĄA=¤6Á""ã ˙˙˙Ãâ"""""""""""""7ëk˙ôUđąęŋ‘†Gä0ƒA‡&´o0Bc3ąČĮ!G4Đńö5B2ĀB#ˆÕu…˙ U˙˜ 5M}{_û_ûŋ˙ūīø^""9J3ēZ2ĩ¨Daī˙ī …˙ w˙˙˙˙˙˙˙ü(RÁTĀ*ø_á˙đø|áB…đĄB˙ūëđČq#†ŋ ŋü§EŲp…Æ\R8BūBũ|?ũ—I˙éŨë˙˙%8‰qÉĶ“ÔĖĖŽËÆv^#ÄqˆˆˆÂ›'Ī˙˙˙Nûî˙D2CV˛~aÍÃa‹›RjĖPaÍü˜äĮ'ƒArrph#Ãh&9æƒHdāŪM‚ph0æÃMHšŅ’‰…l?ū˙ Ž‚ÆRFlģ""""""#˙Ú˙˙˙˙˙á˙˙˙ä #āŖ˙˙‡˙ÕQPm˜äĮ4H¸qÄDD8Œ!ø_â"G"""""?˙äuʨd?ČC\rc‘ŽLrc“ƒO͆ƒ`„b„ö_˙čāO´ŸūÖÕm5˙끯|@'“Ôž žÔ‰ĨŨ ÖLsl7“Ą1Ė9‡0æ˜äādŲ‘9 ˆˆˆˆˆ˙ųRßä QÍŗOá˙îÖÖí{UO˙˙Įå6ŋ˙øˆˆqÁļCRŊ?Į+Aļ? x4Ži øq /ë˙˙™ĸ„^02āáˆøy|/Ö@ôŋĮ˙;4ĶO×û_ Ŧäc˜q ´?˙ JŖĖDs#ŒŽĀ'áĮ…ã˙˙ü´4Į1˛Ī#¤,DGųČäGˆņƒ† Ȉˆ˙˙˙˙!’ C\sF9 ƒ™Į0ä2ž †!œr äĮ#ĐLsN Žh6ĐAŦÜF`6Ė \eĀđĘ2ȏeŲÆ]—  §˙˙˙˙˙˙`}ęžĢwČÃ4sy6HDDDDDFCâņĩYh+ŽC8äĮ!`ÙÃaÍ6HeÔĸ?ũ¯öŋ&,fęF‚c“áĢÔĐfRĪöß˙øˆˆˆ˙˙˙˙˙ōHüGÃ˙ …Č 4ŋ˙ đøøøaÂ˙˙˙˙˙˙“z_á˙˙üČĘĘoS˙ūk–˙˙˙ų,e˜1˙đÚ˙ …Ëp#ÎÕ íR˙˙˙ÂáÃøgd”?˙˙ü/!†`~ á˙Â˙ü?á˙Ã˙˙˙ÂđË)‘Ã24ŋ˙Č ūh˙>ÂÃ%V&ÁGápˆ&Á+r\G ˙˙ũoá&?Øpö˙đOūīá˙˙˙ųØ˙ø˙ø_đŧ<)1˙øø>[˙ ˙ũúëx˙˙˙ûûá˙˙ūœwđ~˙†WŋÎŌđđŋø_ø˙ü?ø˙øA˙ ÆÂ~˙Ã˙˙˙ɏ˙ ˙˙ųc?ÃūÃũū…˙‡˙Î ü ûø˙š_˙ü>˙˙˙ūáūáaøXq˙˙¯đøv°˙˙˙¯Âū×˙á˙áđ˙§˙ü/˙ōƒøPƒĶø˙đ˙˙‡ø_ü.˙áūü ˙đŋđ˙XÇÃÎĘĸ2á˜]…#™ˇ ģ.‹ŗq1˙˙_á~ĶÕ}uN˙˙˙ūūw㇠„ äb8ÄG29œ3#ÄxüGŠ"XdH‚ˆ0ä,ŸÍ‚9 G˙˙ÃūPŋ…ķ@K‘áū˙ūv€šņ „ åHA”Ø@Îd$˙ ûאŲ%By˙˙˙_õ˙˙ÃŦ.P0¸X˙_ īfe¨(đŽp0Č đžŋø^˙¯˙ũ…ÂáÂĮÃđŋ˙˙Ž<.KFaB˙ø_ãÂ˙˙ ü?˙đŧdh6a~á˙˙ápē…Œî€`(_ ˙û˙˙˙…¯˙Âũ~˙˙đ¸_á˙ü0¤(āĄpŧ?˙˙ ˙…˙˙ū˙ųØc˙ÂáH$K"9‘ĖŽ285˜ÁGáBáPŋá˙Âø_˙đŋ˙…ŋ*dG$G)Ė9œŠ›RøÎ[0ä3šN[š HA Ãp×#‚ÃLŽÎÕ˙øDŊ ŋ_OĶīTôī˙˙ĩņ |<Žf&‰â8Čã#Äs#†i#Œ?;Iâ<` a¯…ū?˙˙!œ¨/ä aČƒ“ō ÐŖĀäĮ!`ĐAŽ °#a¨ed5G0æÃLrcAČiŽl!›„Ã0æVo2B ģō˛V@ĀäÔž"""""""@ŦpĖ ŽĀUđŋ˙˙˙˙˙˙Ã˙Čđ‰†ÂŖūAlN xaȞl0äāˆ9 Ã“ӂc ų1ȇ!Ē9 ˜æ‚xaĖ9 Ã˜s,ËØr „fDö †K†ĀĄ˙˙  īõ˙˙˙ū8‡á‘í_ü/‘+*Ã9áJ a…¯Âšė/˙à á,”_ų G˙ú˙˙ )ūA@˙ųƎØ?˙ü0§f@Á, üp˙8xX˙˙ø_ü.˙ä(˙˙ųĀø_Âūæ/ūüÖց@^?đž ˙ūvt\y´G´ÂđÎëˆđL¸d†ßüū˙˙†˙é˙éđŋž¨dsü(Zđ—˙[áJHŽ2‚ü?ČX& †Âü†hä0Žu?…˙ų đŽĘƒ>TG˙‡” Q˙˙%ÁD~ ˙…ÎŁG˙…ü†}M˜_ üāŋ˙ü0ŋ…˙ū] !”' ųËđŋ˙‡‚áB Ë˙ÂĶ“‚0ĸcŋ˙ÆÂūA@ų˙_˙˙˙ī˙ü?˙˙öŋ¯Čņ5Į#˙ǐšđã—†Á0ĄsVaķoĖ2ƒ6a`͜”D8Á†`ÂĮĖ0.j†D˙˙˙XȐä‡ Ž$|CÂC Įáy9Ds9‚!Ļ9 øaĖ9‘'„AČc˜r äc‘0ä6#™ČæG3HC˜saÉÁ°HāÛŦ†˜æ…ƒ"""?‡đ…˙˙ü/˙˙˙˙˙˙˙˙˙˙˙˙˙ņ ÄG.˄:Ds#ŒĀ0\~ްi‡ûģ˙_ū@ĒŖ‘0äÆÍ øˆˆˆˆˆZXâ?Ēü09 AÔy š   sClrĮ Ō9Á ‘ z˜æĐAbz˜23"{Vmų ō ĄP™A „ b@@ƒá˙ņ˙˙˙ū/…˙Â"P˜dfFōzË Đbä/“‚aš†ÃC$!Peĸd„ː`¸BEŒ2z„!šAÄ?˙ /˙‡"#˙˙˙āƒä!áÎĮã28eß˙Çá~""""pĘĐe‘#ų+܆Á˙ūŸa˙ü?đĩ˙…ü%˙˙ũWü8p˙× ų:au ˙˙āƒ Ãø˙˙Âá˙šD yØb˙˙Ã˙ …øø_˙˙đƒ A$Gąø|88g ūd–ôĮØ@LėČ6y ‡~ũ˙˙ž …§¯Â5†Īņ˙…a‘˛~īákđ—áI@(Â\•€ž̇܇ä3ęi#!€Mp¸RË˙áB…Đ˙‡áB˙™ü(P¸Pƒ˙ūUŒx_Ėĩđ˙ü/ņ /Ãä-pŋ˙…ü(PĄMqË ˆĮ˙áH$˙ų ˙OüDC0f"i+ ˙<,DDD2 ‚1"B1˙ áwđ– øXfƒáõ˙ūø˙„Fķ"Ãūƒü†ÂČy ‚nŸ…øx_‡á đ˙Âūv´ ?%ŗ˙đƒ˙đŗAđŋĪßđŋ…Âáaà eáīá˙ø_ jeŅôq‘ČĀ ū˙đĄ_ōhū?ÂđÂÕ4Ķ×˙!CčĘÃ?…ø˙˙× â8dƒođđ °˙4|‡áađ˙đ̐Ø?˙…đĄy O˙˙ÎõŒDs3ņ#čŽ29‘ãSƒ#Æ,Y#Äs1ā„DG…ųúBĮøXÂ˙˙˙˙˙˙ū˙! ã“ō?0fĄ• ęMc^ø'…û‡ä-"C.˛pá˙˙đū2qÃ˙ųhÁâ?rĘdÄpãá…˙㇅ū0ŧeĻXøaB{Ö°ūCĻM˙ ‘×¯˙˙˙ųhR°ŋüqü3Gņ˙˙˙ü˙˙˙˙˙˙˙ö æ æ Tž ŋŋ(,,leptonica-1.86.0/prog/bois-5.tif000066400000000000000000001372201506303110300163320ustar00rootroot00000000000000II*ŌŊ˙˙˙˙ä5?ü€šĄ…ūôYČ8Xá…ã˙˙˙˙ü¯Ššåtpú @L¸f‘íHĮü/ ü/‚ų3P<‰Ž ËØhß 2ĻCjIcÂäËü€’Đ1 ä.酐 $ú!„˙ C˙#ŲVËq@¤xČYü/á…ƒŒˇ‚HUC ÄíPKåž yņ¤$¤ØHėČ6Hf€‚˙!TŖ&ÉÁØPgÍ–0dAō ą˙3˛ bAFÍ<ya<… ‹H&Ōąá‘65üėlAĒHđXŠ"lĢ˙a–rÜsō{Xü/•ƒ˙rH>L|›æJA-‚€ËØáūM‹8\ˇŠBļšų ?đČۖ•ʨÂ˙ȃĮ… I Nëí,HōĖ [‚úߖæGĻd°ú;Đí`°ƒ-Ę˙‚ųp_"áäŌ˜‚ ! ÖĨ˜â˙äAü…˙˙‰‚3˛ Í)4‚2 •ÉÕBĘÁ¤ˇVĄ˙Ū7áđúōT2 ˇ†øD3[““Žr 6HD™QŒ˛•€Č`s@_˙ãøÂ…ãū?„OūDˇ* dcū‡ĮÃ+œĒ )Ųq…øZá… ˙ūq˙…  ŒīPĮŅØXJ ˙Âää95@š|˜á6Ō˛f^˙øã ųÚĀ&Vƒäc˙#)1üˆ>F8R1˙üŽ8 ;3gļqyP)Čėôb.˛R‚ Ã8Î2ėŧG‹Ŗ`f Fā<)™ˆââã8Ŗ4ŒDxãt^<Ëĸ"<‹˛KFq‡UGEã´¨Äb J ƒÂ˙ģNĶõīĶĶínũ>õũ4áúz§§z}ÂM4˙˙ūˆˆ‰PŠđ<Œ#‰q‘Ã4Ždq‘ãO#A4Â<0æØh&?˙ųÁ–Ã0æœՑ"A¨Lsl0fƒG†Âpl#.aɎG†ÃLsN ōr4 Ш&9¨l!ž Á Đ`Ɏh4˜æ!G Ö9h+˙˙˙˙ūG°Õ˙ø˙˙˙˙˙ū=¯˙˙˙˙øâ""@ô9sfâx‡ÄDDC2{˜Caɏ+ÚfŽD…$&ąDDDq""""#!ŒDDDDD2 á VgaŒ‹à †E#d0JŖē Šd€ÁÖ9ˆņƒ>dq‘ÁņCŗ˙ë˙ūŋú„? Ė3ū˙˙˙ÄDāĻåšNNB~‚ņČgVNCׅú˙˙ ÄDq #ąC#†@gT˙áßč%û …ü/ÔD˙ö6ĐĒmwëūBíh.A6hOa Á1ū?˙áÇá˙˙*;˙… ‘˙ø~BŽˆ>ȃ˙ūd¯ÉŽˆ‘CÃü!ü?ÂņÆĐū…Âūw0üœx_˙đƒ á ŋ…ũü!\>CLrã‘09rc˜rpN ŽF9:ūFDpPG3â=’ƒ `ds#™Čņˆâaú}˙&9˙ø_˙˙ãDDDDDDƒˆˆˆˆ¸Ž"AR‚""!Ą`"8-Äp&ƒl?†Õ4?Öôí2‚ų5ŽmŖ‘Ö Dd„04OSyƒ'!Č+ŽC8ä)A5‚{Ą1"{WŗÁ`™!=†F$bĸ (&4Gčc"J2Ņļƒ f„Ö‰ĒÚËø_ˆrZø‰˜'˙¯˙ü/ūI/øe˜æƒ˙â9–ą6Čá›˙økū‡ų1˙˙áÎĐf Žds#™0˙˙0$3u_ -˙…˙˙á‚˙ ˙¯īņäc“‰Ų  bUāa?ūaÉ ˙…áđëũ˙¤"""EŒĀ*˙ų Ô=‰-G˙kü%˙˙×ũĶ ųš{ž xīņņ˙“,˙ D/Ã_øS˙ō =D‡ųŲ5ß˙ū?Â˙˙áy”#Œ4[ę dpÁWĶīü?˙ ˙ááb!„$5Ļ@đc 8ŒĨĸāxnLâ<]°X<aĻl ŽdqK˛E đ.\SnAܘäÃČņ€åĖŽÂ†häAČ1 D˛ÜąĖ9 …ģ ęG„.ˆäG1›28j„Dâܧ"q984rđˇ+ 34H38ËÆ#Č)+EÁ‚ CX~טvúrƒXô×îũUo˙ž˙ũWûīO˙ ĄęžŋvŠŽŸß§§§¯éˆä‡51í0øˆøˆˆˆˆˆˆq„Aˆ\pÂ!°sF9ŧœ’rc āA“ķmƒAŧĐaÍ8ųTˆāx#Įe‘5Îügf‘ØK •$2Q! Ž!áF?1ɎB…!š9 ąČfŽAŽQō1ÍO6šy˙˙á˙˙üí…˙˙˙˙˙˙˙˙ˆˆ'˜æØ×˙ˆˆˆˆš GG3Gˆđˆˆaœ?ū!„"!ÄDDDdĘ ŦXD3-'XŠ$ŽüĘ#‚‚8`’#ÄpÁ*Œ#™ ˙ Ãđŋ˙˙˙%/˙˙%ŒŧGÃ?™$DDDūŋ ˙īėO˜á‘â8 ~õë˙ūûD˜!ļA”í|8ųÕ_˙˙øō­Lr  ¯CA“ÐŖÎ9‡#юC`äc7˙˙˙â#˙˙ü,p˙˙˙˙˙˙˙˙˙˙˙ˆ< ä' ÄDDC9Üâ8“@Î`ČáHâ9 æŲa lˆ%ūDDDDDDDĐdJ;.b""8‰—™ˆDD2kęN ȐØaɏÄaMac‡ü –Îč?˙Â˙Ŗ˙˙˙˙ņKÆđĨˆũH`Æŋ…đ¤\ÎėŽå‡ūOđŋ„ŧ%ūÂ_T˙]…ũÂ˙˙ á3$°OĐdķ0šū ‘ÆAÂ˙ /ũđą Ö9r1Ɏh4NÁŖŅt\#™á˙•4keŅĮ”čģ8Dxģ3Fq.EŅâ.!#ÁHņ€ÎG‚œ )3‘â9…9Eâ<]—Gv^<Ž#ˆâ8ŗ‘tqeÁr8˜ äp¤p0G29‘ĖŽ äs#ŒŽ!Ė.aČ(ˆ91Č09sy1ÉšNaÃ#Äp<3‘Áj!˜ˆĀPG2<ĻŅҜEŲvp˙˙ÂOO˙ újšéÚ柧§˙üáG˙ú~ЧziϚ~šjŋ˙˙˙˙˙ú˙ūŠÚwr ˙ÄDDDDDDH6ŽB"""""""""""""#â"""""""""""""""""""""8ˆˆˆˆˆˆˆˆˆˆˆds#į™ÅäiT†‚ æČdĮ0äC˜! d2j„aČ&„āgØfØB4Ŗy‡0äc˜sBä2Aļ„AČdo`|ā°9 ƒiE‚)Ú û^×ūī˙ ÷kßkũꞸˆ ˆˆxBRĖLgĪ Ž„1˛‰”„DCė‚n숈ˆˆ‡"QŲs;(1;TP†ab lŒ†(DŒXƒJ ć˙Â˙„?˙ķ‡áaųˏ;4>ņ˙˙˙˙ū#Č&ÖŧއņåLk (Pˇ˙ĮčøS‡˙˙ūkđ¤ö‘˙đƒëÂÃđ¤Į'(ô"…¯Â…ßūŋ˙‡á/újP—äHˆ‘ŽšĶ|<Ž!ęüˆŖˆˆˆãˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˛d(¤GˆņČāÎDxĖÄb?2ąˆņȏ3#™Ö#…>f"9‘ĖG äb#Ä8ÄGˆņ#‚ÀxkĒūá˙˙ģī´í4Õ5ĩĩ˙˙˙û[ũuĩ˙˙˙˙˙˙˙˙˙˙˙˙ūĶ^ÖĶ=‡ņ‘Š ŽaɎmŒ'ŋ&ĒIj"""""""!…ū""""""""8ˆˆˆˆˆˆÂÄ8ˆŒ!ÄDDDDN""0„DDDDĐÎõ3€„p<5pø´íWí‡˙á}áûoČgÃü,DD~ŋ˙á{‡öÄNĻpÎā˙áA˙˙ü(\,?úđŋ˙˙ūä~û÷˙Įūø_‡ÃßøūōŽ<â9‘⎠ø\íGŒã#†i#á–G28„pÎG28„xâ8ČņÁG"?˙áÃ˙˙ĘčŋɎBÁ…ŋá˙Ã,ÅC;R?ø˙!Wx_đžūᄝÁ˙årC˙øūJ‚˙˙æH°ŋ˙˙à †œ.W$2ŨaÃ˙ß˙÷˙Â˙ū˙˙á˙˙˙ø~dĩCđžAķG˙…˙đ°Čą˙˙ íR;ī˙đƒūø^ļ?‡ūRđ˙‡…øųŸķC˙ü?˙ ˙˙˙…‡˙˙˙ø_˙˙‡Ã˙‡ü=÷˙˙ū_„Ÿ‡˙ü? ģøTá˙˙ũIĮ˙á˙˙‡˙…đŋ˙ū|˙˙Ã˙ÂÇ˙˙ø˙˙˙ū ē˙˙ë‡ápĄáü?ũa˙˙˙ø^Ã˙˙đŋūūÃáøB˙™ ¸a˙ę˙˙‡^G˙_áBūu?ūˇūW˙ČgŲ˙ũÃî˙˙áL‚Ã˙‡ø_đŋ…˙áÃü/˙˙Î?˙ /¯…ō$˙˙„×˙˙•å}c†G#œ8~RDs#æ`ČņŲ”G‚šxˆ~F4F‚ <'¸  rjDĮ"A¤rxLr 64@Ā‘DeD(äAbxLXÛA ’.…‘ĨeɅa2kŽâDˆˆˆ2{, cjS$Eb?Á^˙˙˙ü‹ŽD…ūÇ˙˙ūū"2Į2 ų["ü?Čg?á˙Ã˙ˆ’ËÃÂáŠXÂō Ô!…Â…#‚ƒÂá˙˙ų$0ĄNÅ@Ž˙ū/đ˙˙˙ø˙_˙ásã à B˙Ŧ˙˙ ų ˜Sŗ!? x_ø‡˙Î?˙… ˙˙ū…ᘏ‡„3¨lãō$ ˙ü,0¸A­øX…˙ Āø\… ˙Ãđƒ˙Â˙…‡ŠH áB…ã…ŋPŧ…ū YÚ¨eÖđ¸_Âđ߯˙Â__ņUūúÂ×īáü/ū ƒđ¤(ápĄpR&d6‚ũ„à …ō64˙Âø\/˙Į…đĄc d´~˙…ș„0Ą| ÂōT|†đŋ˙áü,†›”ä6ū§Xē(Eã˙Ș7.ŧ‹˛ė¸ČāĀDĮō8ƒ\Že×ôũtĶīA…ęŸ!]ß˙éū"""""AŦsAĢ"@đÄM"9‘čy#†@ÄDDD8ˆ ˙˙ō †@đS˜d4Į4dfá‚sl5f0ää9€„üŒš?0æ,#*!œaƗPLX†nĘ í!š(h0æØrcüDDDDDD˙˙˙˙˙ū ˙˙˙äcD0TNüŃjaČ&91ɎA¤rXæ4AĖO 9C:‘”Ddđ˜aˆŽ"P„0‡R8áüaˆˆ• i!ÄxĀđ1đŋ˙˙˙āƒūDĻŲ‚(­a˙å(_‡˙ūˆˆ’ņˆ1#@ „ƒ("""Ąđü†ČëÚáÃÂũpČlČ( `xˆ„Ąpģ´×_" …˙ •Jŋ øPˆ’ ëã˙ ¸ˆ /ü0¸_Ô(P˛Ĩ‡‚ķ˛@Á‡˙…˙ōĮįQ8aH gá@šŨ˙˙˙˙ø~ÝG˙ã˙˙ä°O;Z°Č1Ÿāžw@@ĄCd€Ģ› äPųđ؜ ų))ų)įp ? á˙ ôC˙Č`Æēj?ūē˙ߏŽ_˙đƒÂČl’ŋū8˙ DĻŋŪŋđ°ãđˆÁ‘Ä…üƒä1Ā˙đԆ#Üpđ¸XyØaŗ †Â˙øP¸C Ãøđŋ˙üxP¸_ČX˙†ü‚†C`đÍ$˙𚈠ü/ĮÎ?!"dxÄ`Čöf"83‘Ä#‚ØY qĖ9‡  ryāxkČÁƒ˙Č0?…˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙üDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~@Ļ<˜ä2\s xfá SĄ ņ˙ūō:ȞF‚h#Ú˛ @đcRʐ˜æŒsy ąĸpC:Ą1"˛!—ŗBj„ĖŒhC/bŅ0ŖŲŊHžÖ'jA–FF†GŒ#ƒ>˙˙á‡ų(˙ááaü27¨gt2Hb"!…øaBP?äAČQ˙˙â"$ĘđáÁū…ˆx_ū?>'đŋđ÷˙Â˙…ČgĪ ˙ū_˙Â˙˙˙•H/„ áLНë Ãđ°áø\/„…!žH üî˙" †ø~áÃđŋČ1‚…†d$đ‡˙ü8~ađđ¤3ä3ȰØG"˙Îüdp°ž_!ĨáÜ? Âņ˙™j2R ÂŨ`_20á˙đáđØ…đš ŧœ,akŪŧ#´—ėĘ˙đÂ×Ãë÷k áBUû_ū<žÆ‰ė&L/˙ĀúPĄŒ/á˙ü?ãÂ˙ÃøÃđž˙ČQ˙‡áxy`sddÃˆ‡áxņ;2?˙ō¤ ÇņĮ˙˙Â˙„W4?õø_ū˙ų(Į‚ūáá{øĮ˙˙á á|¤ ?Â˙ø_ áČeŽÉ ƒ™ËÖäc˜rŪ`Cb‘Æ]—eŅčÍEŲ&˲ņä^#ÅÂeŅv\Ͳėše∏ââ‘Ųp…ĖŽPÎ]—fkú÷÷ëĒ§ĻŨéúĒwĒ­˙­ßǧâ""""""""""""""""""""""@đÍ+’ĪÄs#ŒŽ!ČáHã#,HānG‘ãPf#ˆä~(ˆá‚ äŲΑī˙ÛáĶg Ē\,8~C5œÄāÖQęS%ÁhŽdpŋ"3…ÄH(Iķ*R™Á€øōÔIPĒ@đÕ§ūUá—üĩlü…āĮü˛”\ā`˙ "”¤pmų6 vvœR§Gcŗ‘ŲPBĒ)Ųhü›$Eåu@ũ;Ŋ5î˙õ;Ā<2ûá K‚”  ~MŠ7<5éŦŽ´Rc˙“&?ũÎŌāĮ_Â˙…Âü?ãķÂà ˆ¨ ų1ūv, ¤s#†Ŧ/“ĐÂú^8ôGÆÉĀK'8ɒŖ˙õ;ÂÉŖ‡˙˙!B‡>Düqđđ†… 2ˆŽ ŧ˜ų ÜW˙‡Ãá˙ ‘ááHâ>Gdã#Œ!4ŪÂøPĄ˙ŋūø\Ų˙øW' (Ž&Éį˙„˙Ã˙k ˙˙˙…˙˙‰a˙˙á~ø\/†˙‡ø_˙ááx˙ü,axãŽ8ã4 €g v$†œđáÃ˙˙ūžĢ ûQüD0„DdpÂĮČ!˙˙ãō1ãˆËEqƒ2( vZ/÷˙Pü+“‡˙ô˙áBū‡˙˙üžÔ‚˙˙"l˛Gŋū…ã˙äbĐŋ˙ácÂø_ų áaКaB Œãūŋˆ˙# ÂiWđžįeƒüpáđț á˙ņ~üŽ<.˙˙˙ūølu˙˙˙˙˙˙åqKĘáˆČøAœɏ“‡ ū˙ōÜ;đŋ… §j`AÚĀ+ÃÂÕ{„ØP,X\)2 0Ņ… …M‹y Đ'O#×!‚Œ¯âĪÂįcA˛CcB#ifđƒČaSÂųÚ@!ĐŅ ķ.XGē… –S@ÎYĘgøGzüeqPōܔrR ;T!YC zgš $DØJÚ|Č0ģ‘`Ĩ¸ā˜A–\ÃæØ§Ęé@Į!—āØ| ü‰áK! 5˙!ŽÎŖø\†uL,8xRČĒ Ŧõ肍ÆīÆvP<ŒSĩ ´í`Blrlį‘ø\.i ›ã3ą @ĄŦ< ÂČ0ĪĐŋųō&Ęŧ탴€FPĘé(ė4…8ˈē;,EÃ96$44kkß 4ųÚŖ“b€Ë$€Ōw¨f”XD . ĐC,Ââ@Á˛ŧ3ŗKČ0>C˙A˙ČQō$ŖÂĮĖ…ã%Ÿ,,0ŋ˙äH&9‡øyČä˙Í˙‘@#ü‹ p IŲ&MŠŒü`e(1— 乕`ĮfH1; öVŖ!ĖNËŽ´˙ôNÂõ˙ ˇâ0†C õȃđČP¯ÂäIy\Ē+˙„3ĩapĄ B„äM”ÎČĢüĐmŠ˜BęDü™'äĮ2 \œ…<"!a1Ã˙ū<ė¸0˙@Į˙Cɗ đŋØx_øįz†nëd’ÎGĖė /…Ē˙˙…˙!…¯ūX‚ž“! GÆIáƒŊA¤Đ2ÎÚR\2Ŧ3NʤhB"ƒNÅ5Í ŌČIø˙˙A˙˙Č`sá}†FCîąúņ2 dZ;*ūŋ߯é˙ū°ŋî{Öī^Ö˙„AÃÂäķįcžUĮeFE Ģ2^*†v(%FvhgĖ•F†LŖ!ĖŌ;T2He`Ŗüdc˙„ūá˙˙ÆaB˙˙đŋ˙ū!G˙Đ˙˙á˙ø~ĄI`X‰ õ˙˙“ƒ˙˙ôũ˙˙˙˙˙‡˙ĩ„?ȃ…Â˙ü˙û1'… ˙˙˙˙á˙ …˙Âá|/˙˙á˙ …đĻF’ „A´q”åšvGמî˙ zœŒŪL¨œ0äĮ&9 ˜äc×ĐATrcb ÁsA ˜äĮ&9°Ž091ÍÐՂc˜rc‘ŽBŽLrc“Øo'æÚ ,FN„Ę ėП‘ęjsa?#J4‡'BiDu˜sa4Á 98#Đl6Á Å`F‚t#T!œš 9‡&œso0äĮ0äĮ"aɎDŒrc‘ NƒaČđÚ Á Øl4syC?š ŽaĖ9 œsA4sA‡6 ŒsGœsA‡0æĐDœ†‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûM?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü8ˆˆÂ"†$J1Bjâ"B""8ˆ˙Da|/â""0„\D0ƒDCˆˆˆˆˆˆˆˆdË"""""""DDDDDDD8ˆˆˆˆˆˆ‰Ø”`ČæG#†>ą˙˙˙á‡˙à ˙˙˙_˙˙˙ø_‡ô˙ (?_˙˙˙˙8'č>Š˜_Â˙… ˙˙˙…Âø_øf2˙'˛Ī˙˙˙×ÂáũđĄķ @O‡˙˙ũ˙˙a˙ūC,rė3—˙ūjČöRŖŦ]v]œŖÁr ™ĸ„q"ņ.ÎDxē$F"čŊ‘ŸŒGX,>ü ˙đŸīäq˙˙á/úz¯ ]SM4ũ}?O˙ūĶ˙˙°øˆˆˆg#˜‚‘Ų¸Ž0U0Đ×03°/˙ī˙ņ yÉĄDāšB80ä3áÁhr äsA ÐŖšĮ# æĐCLr0äH'ÆĄ¨ab0"xFTOf„A†ƒl5 d`„öhBī ų¨Lrcš Á_6Á š æÛđ˜fČ6•ɎN ŽaɎaČāÓōÂĐF91ČQĖ91Ɏ@đˁáĒ9‡!G#ĐaČ1„c°Lrc“…†!G!G&9 ˜ä(äA h ƒ“á…ŋ˙˙˙˙˙˙đŋ˙˙˙ņ#5û^í~×[_MW^ûU˙_˙˙×˙ū˙á^"2 &Pm•"#’đˆŽ#č/„0Ąb""ĄˆˆqÄDDDa†ˆˆŒ™a=•"""""!›`„j„3ęLrcūä6 ˙ü˙ x€ũáN]Wü8‡ūM_˙… đ˙Á˙!…ųÂ˙ë˙ä ƒPŋ˙áđƒ˙˙×ÂádĐ/˜“˙˙ÂĖŸˆã˙˙<5G~ŋüäAâv0a˙…˙įcđPO˙æ§áy Į…ūē˙<5Â]ŋũø…™j?…×P¸YŲa˜Ī÷˙ÎÖ/ņƒHä˜æ‚xaÍã ŅxNdqņ4Čāx˜ """"A@äĮ0äG0æ…Ž1!°sPDƒ+”á‘—dpØG’<`6ˆæG dxÆGˆāÆGˆæb#™ļ]‘Ãq‘â9‘ÁρæG284‘‘â8Čņ0dqņ#™#9Čã iĄ˙˙ũ=?˙˙˙˙Ķõ˙˙˙˙õ_˙˙˙˙˙˙˙ÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG‘ÖD‚ ‚c5˜"A‡#ӂ<0æÔÛ á‡4rpLrc‘#žà ƒh7›Į0ä09Ãlrr ˜ä09 9‡#‚BŽaČāØsa1Č æ‚F9rrĘsõŸĻļĢkúÚjÚŪŋi­˙¯w˙ÚöŊÚßéĄiũb'`hDG"EA`ĒX‰$d9’Ã;*3˛ČėČ$hd˙˙Â˙üČ øY‘k÷˙˙ü-|?¯ũđ¤āŅ ~WŦë˙X_đ°Ũ­úÛ˙ę˙ÁĮv˙ú˙˙đ—˙˙˙áë˙áBņ… öŸˆō:Éá8'äöX`†A ĐmLl0•`›räG0BraB2Ŗl°p†☿ƒ‘ĮÃáūĶM5ņ"§~Ö×˙øADŽ""#÷caˆˆ†Œ“‡r1á~A`uņū˙đÅađ˙˙ßëä$?åš`6ãøq˙˙áynH ˙…ááü0ŋ‘Æ˙˙ ˙á|/ÄDƒXæŒr1Ė9 Ņ FCˆņ5™ˆÁœŒ\)øĸ#œ2 ė˛ÎG" ˙˙üü?ÂÃ˙ö§§˙˙đ¸_Â˙˙ņAÍL!Âũ<ްRö¨Oa •R0ą5ClŒËÕ ĐšŅ9AšĄ ÁDd„É ’`¨ˆ9Ĉ1ĩBaDØ l°žÄ‰í! ĐaĖ9~˙Ãá…ü–\?ø˙øm4×˙˙˙đ˙ đ˙đŋņū_˙×ü“,/˙ (SąPá˙×˙ô!…¯ü/ũ˙_ü…ÃΠY˙õ… „áHāßę˙˙ ÛØĐAūe€Ļø_ūÃūņ ÜG įÁN_‡˙˙ÂÃø˙ßÂųŨ•ū‘įÄDŠâ"AÄDDDƒ`q!ļ8‰x z…rŽSH Āær7/7rܧ0ærC“ÎWÁ—ˆņˆē.Î29Ųq‘âDDޤbY đPu2HfEeˆĸ8f"?˙ᅇ… Ã˙˙˙ūđüˆU˙˙á˙˙˙ wX$? ˙˙˙˙˙ūDTōáá˙˙‡˙ø!…ģZ„<–Œ,?ø˙ÃøĐR5¯é˙˙˙˙ōc˙á|”|(C˙˙ü/ūÃÂøR{Œ/…Â…Â˙˙Ãū|xü2$ >Jg˙˙˙˙ü!`!G˙đŋđ˙˙˙É0V"€cø˙˙ü?ō$tA@äĮÂ˙˙˙˙˙ũ~ä6˙˙˙˙Đ~ˆ)Ŗ‘60†Â‚ äĮ˙ ˙˙˙ÄH4†~#ˆGˆņ;"€¤30dx!Įãã0pĖDxĐxB2Y ĸ4ķ#ÄxãG F"\LHƒ“œƒaɎF91įjÄ#ĮQäŊâ9˜ˆņđÎ@Œ0gãPĻI@„x)Ū Áđ˙˙˙˙˙ü đĄ ˙˙˙˙˙˙˙˙˙˙˙˙˙ņrūLH@"xmá ‰Dc`h†qˍmHֈ‚†4'°„r(A@BaDĈ09ļ@Æ40QÁˆPaÍBj„Ĉ$4Š ęN† ‰†( Ŗe„öTNEÍæŒČ’‡…ä{8ã˙ãü!đü!˙…˙˙˙˙˙ ƒüI•įiG˙áäcÄ~âCøŒ˜dÂaár8PĄ , ƒúøR đĀá ` …˙ˆ˙Œ/đ˙˙~Â˙;|? … …Âä˙Â˙˙…áņ˙ü?ˆä09nLrc›áMJ* ŠĘ!äH2đƒ"ÂįĖŽ˛ƒhæGC#‚åÁņeĐA—EÄ028+äeà !Ҥq—s!Äxē$o Â•TfËÄr u‹˛Yx_÷˙ 91ūŋ˙ ÃũūžŸúzϚ§ú Ŗzôīŋ_…øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆË…!Ļ9 jc˜ū"?&4,3"@ŌJ"<`dxŽdq‘Ä0Čc#Äq˜ GÁ‘â9‘ÆG Ō8(#†š3H@k#ÄpÍ02 p„j8øū?˙đŋ…ü.Âá| Âū0ŋ…   ˙Â˙˙äA˙øadeŋøôäH  ‚ /įc/ ūü(_¯Âü0—˙;G8_ˆØ9‡#ƒlg˙˙ōY3‘€ĄNFGˆã#™#™ČÅųŋ˙ ˙ü0¤3‹üˆ9˙ /˙˙˙ų å˙Aááb"@đŖ˜s#4 ž$Įƒ“…‚ h!Kš 91ɎLsG„3ŽaɎF9sVaĖ9‡#ÐP9 ŅČDDDDDDDDDHfŽaČ(…‚ äG0äÃ&9Á¤yÁ@_˙‡˙˙˙˙˙˙˙˙˙˙˙ÄDDDDDDDDDDDDDDDDDDDD~GY B :“юaɎNdyäAĸ`*ę`CA¨CLsa Ãš†ķPÐŖ˜r Ō9ÁŦs@ÔĮ˙ ímW×ûM5ĩí5îÖ˙ū"""A īSä6 Ųŧ `†YA1ŖA ›!ŗe„ a ckX ĸU0PCdĢ ĄP™a8!ŗjČĮ!ÖC7b„ň(™Wü?đŋü>…Č ü(C˙ü/˙ ˙˙˙ūA A@ø_øxAüaˆapžāšüa~˙ōrt˙Â˙…†C>Ōŋ d3Ŧ|ė¸cá…đ¤1æ‚azũō( •Ą2('Öv('‘Kä3ß˙Â˙ų‡Č`p°d1@°Č!—ä×ÍäŌŧˆ>Ø'ƒ ˙đáæŒācä ~0žDƒ>Vƒ# ; rŠ @‘ÃŒ,†q˙„C?˙4pÂü2 dc“ŒŒČQüœ|ˆ8_ü†Á˙ Į˙˙6 ō87ū˙ÄaNžGá ė6f>U‚žvh˙õī˙4žÂīA˙ūÂ_˙˙Wí… ãÂ!ū/˙…˙Õrcņ˙Î?á ‚Ųą¯ōČ ū‡ü/˙ú˙˙á˙˙aÃÂÃ!v9 âØ_ë ÁVC9”0ŋä3•aj^ H ø…ß …˙ü-˙ázáđãÂ2jY”ŋ™`)=Ō?&šÁˇņá˙‡…ü/ü?˙˙˙ü ü/‡˙áBđÂ˙ü?â"C?YKsŋš ˙ ūúi˙‡ü?§ū? ūâ""""$Į0äĮ N9 """@ĀäĮ!ļ91äpÉ RÅŋÂī×ū<ƒ^Ō‚ (_ū˙äK#đŋđü/IjÂÃč ˙&_ ˙Ãü,0ŋá˙˙đ˙2Xžápŧ?-Å’b˙ū–āA˛‘Xhøõ˙˙á˙ø^„˙…ūá“`°ų Žsĩ€B6ÎĖ ™ ÷¯˙¯}đƒÉP1Æpˆap)cŧ/˙ø_ōlX0ƒđšŲpĪ ˙ūWH ąÂ˙àPO;3$€c‡˙ôĘ@Ë˙ø\ ëđŋūÁááū ū˙……ō8_Ė”ÁÂ˙” `.Bƒ( e`?ëü/á˙đƒ˙Âĸ 0ƒĘ g ˙øS7đ¤Ė°ŋ…üȰá ˙á˙Ađŋßū_+@cpÂūū Âø_‡ūd4 ĻC_*Á´ŽmŦAIQ‘Ã4Žd`f‘O?ˆáHĀĶ#ĮS G k ŧ”Dpk;Ã[sO˙ū˙˙Čl˙!–>˙˙áÃ; CD0‡ !â0†D‚Ãq•č ˙˙Ã˙˙˙Â˙ųŲP7 ˙äĀháå{ ˙û…˙ë ×û^ø_˙~˙ˊÁĩ‘Ŗ+ĒXr¤Ą•C+ ‰D y,c˙Ãü(A˙…ÂūÂáø~ü/úįbGūvd…áū  ¯ ×áB˙à Âá/ ųØCķŗ@°üí`1đđŋ˙’ Æd ˙äĮ#—˙ų&9 Uä(Čg(Π˙˙ų”„˙…ø˙˙Į…˙ÂÄ?6ŗ'Á<˜äE/˙ũLŧCķĩ Q…đŋ˙ë’Đo™ƒ˙¯˙Â˙ĮĮÔW_˙á áūˇ˙đŋø_đŋđü˙ÂüCØ9<0—ü/Ã˙ ˙á˙˙˙ ˙ø_ü†Í‚|DDDDDDDDDDDDG˙ų2äz‘āˆdNPC-!9  XŒhžÁeė°ŌÂrFN ƒDŒsaÍpDƒl'æœюLsC8äpN ŽDØr h&9äH4 ƒGķaÉę`#y Đl Ŗ Į5 Žä́,sh ÄØ9ä˜ä3`Û ‚'› æŪČ(ĐLsaɎC. 9‡0ä(äpl6ƒ˜rxCTr)…ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…áá|(Xapŧ0ą„""#ˆˆˆâ""8ˆˆˆ‡ÄDq0BjAˆÉė(ƒÄDD8ˆˆaˆˆ†C`'á`Ī øX˙õ×_|0_đƒ~°ŋ˙˙Žē˙ë˙đ¯áøûÃáõ…¯˙?ŧ/ų ›R˙ ÷˙‚ø(_üÅø_˙˙‡ø_˙˙˙˙ …˙ ÆÉō ađŋūū!đ˙ đ˙ū0ĄBáaü›`đü˜á~ÃČĐc /áp˛ƒPß×˙Â˙„đäŲP,žp˙’AÂÎđpŗŧ˙‡árlđŧ8ĨDãɕ„,™Ÿü8~L˙˙÷öø /áõõ…˙Âč0ž‘qųR?*ƒá!đ¸\.øáĮ8qÎ2XŒėĸ%”q•ˆC#Ú8|0¸X|8ÃÂ˙˙˙˙$2Á9 ™jW !2W!Ä8fá| ˙ũũũ¯â"""""#,õ™hŋ Z‚­,¸öŧ Âųš‰įáHį˙đüˆËáB“Rl¨3Ah\,‚2Á Đ+ ˙đøxYhpø†ZŸ Š ŸÃ™ 9Ąü)Ú öžYëĮđã˙đ¸\/ĮK@ĐÃúøˆ˙˙˙˙˙˙˙˙˙Ęâ‘ü¯@Ą ÷0–G Õ˙ū ËhX5øÂ–ĐĘáŽN<(PĨ´\? +ø PˆvÔČEr'…r°ˆbՆdƒKH^O5!vŽ<ļM‰ m(›0O4A63œ ĘPgcdœ.A65árŲX$1ĩ.Lap¤{R˙ÂÃ;*"#?ō° ލyļeūÖøŽK„˙”ʰįkAüŽH ma|/ŋøCđƒ˙å¸!ËmP)Ū ĐvP 3kđƒü‹2 đ˙ü/áįcƒĩ@`•ŒŽ,2He¤XD,Š˜!Ųs ųT æBĀĮî˙…‡ūA2Tgz‚˙;˙ūOf„Ö?ÂËHX …˙Â&A˙ÂápŋÃōŌĀe Í;ĀŲęŧG‹¸ar” eh1˙_…~ŋ ˙åĄ`d(ePga " !ÉQšÁŦĒI‚&ň4¤ ŌŽG2¨gu‚y˙˙˙˙˙˙Ãᖅ BT%€‡z†?"Á|„ū!…0§t°ŋ˙áH(Ž>˙Âņ… 0ŋäHō0˙üėpĮúä¸0E‚ Fpg[%†vhgX‹GZCÃ!°| ˙ōnha|/„‚ׄĩ‹_ø\/ū …AIá‹5ã•HI `NÆŪ?äÚ’Á ĐS˛âarXÂ˙_˙˙ø_˙üĘDÖ#Íēđŋä.Æ˛hĖ Á  š6" šTô˙%Į˙˙ø\/īOYũu˙˙…˙üžĘ2{ÄDDDây Ã`r aɎAÉ Ÿ“ƒA1Ɍ6ŅÂõXZ˙˙˙đŋ˙˙˙˙ú‚BŦđžC_˙…ˆˆˆˆˆˆˆˆˆˆˆ†G 9 ŅÍįeC9ņÃđŋ˙˙˙˙÷˙˙ü?˙˙˙˙˙˙Č"Oūäyæá˙˙˙˙üČR#āĶ˙ü/…˙ü/˙˙˙ō —äQOüp˙˙˙˙á˙đŋņ!đË˙áIįÄDDD3GeŲq—"=Ÿ‰â/Y´]œ]—eŲv]ŗh¸„s#‘v\ČđD69N`ä$GŽAsČŧŋĮqōã˙˙ũŪŋĻžžĒĒĒ~ŸŨūŸ˙éë˙ų_P<ü?ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆdxäG28äAĖ9œĄ?Ä?‡_éâ˙ų0G8Čņ9ĖŌ%î""C4s˙øa˙˙ü/˙˙ø^""#ɔØą1͆ƒAŖ˙kiū""'dą ZԌ€Ŗ‘#ÄxŽdpS0!‚8dr8˙í˙üDDDDDLƒ1å!_îūŋ×áÃ˙˙Âø_Âņđ˙đž@N¸ųņū‡ū>ŋķA?Âū˙ãü°$…˙#\¯, ?ü/–< ?ü°8ĩä6)dk’å4”rfÕüƒĘiP He›Sä3îŋĘh(H6ä.Ę?)ĸ bn”ō ĩ,‰SB D†}ÖZāĸÚÖÄxJäISō(e2H ›Gō$Ģü Ék0e´´3˛PyØädõôBÉ^øAųh4 „s4‚ ›Rá˙ōr˙đ„H)ŗ˙ü!;Áûōl!–rá›ū˙ņū–€!Š…'áá…đžyØĐS @šŨa| ˙ÉĒ Ãü/üf^˙đAįiƒ"€Æw¨1˙ŋȔ…?đšT†GđĄB˙…ōaFI˙ųØˇ˙ø^ÄFYMų$ v=˙ œ˙ų?øˆ‰Ķ‘šxY'ãōĘļ ų[ōļôíũak XXˆˆˆÉr†  pČæG ˛9‘ÃTŽ!#™)ĖDs1Ėų˜‰xär#ÆGÄr#QøŌ1ޞ`Dđ ĐaɎN Áä˙˙˙˙˙˙˙đž_ ˙˙ÄDDDDDDDDDDDDDDDH‡ cĖDpBāšāŸ˙ø_ōۃ!Cđŋ˙ÖvT˙Â˙˙˙ų ü‚xAŽ˙đ˙˙ōŪ 1‘ ÁXü/ú đ¤ã˙‡˙˙ų1Ė8\.Ē ›§ņ!Ž9Lsa‡&H˙ū đĄ˙˙ũl?˙ōq˙˙˙˙ūbOÉî츈ˆˆˆ‰QČ äAČ(˜är˜äĮ ÄØ9b#…#Œ‘ÆG’8„pĄGˆHãȸËĸ‹Å]ŒEķŠ„^‡ø_ ˙˙ĖB † œӂ1˙˙˙˙˙˙ūžš~Ÿ¯§˙đžøaa˙ ]˙¨ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ „Dz;Á“#82,gXŽds430Žf"8đ§/ÚĒzw˙˙áņ´d(ʸȠdʤRD0`ŠČ;:† @`íRr0h L¤2# QX2Š…E#Į?âÎāČTŒė(ge ø_Â˙˙˙¨_ü/áÚÚëũ¯kÂņ˙˙˙õ˙ápŋ˙Ąøøøa7˙ō), ‘`LÖÉax_ ˙˙˙ūD˙˙˙ūŸ  €_Ã˙ūøW˙ . ų aëÂ˙˙…ü'N?˙˙ü(P¸RjDö1F`/˙˙ÂņĖDp`Ž2åŧÁ‘Æ]1Ųq—Eë‘Bįâŋ…ō a=Ũúéęǚwúz}ß§˙˙â""""""""""""""""""<ÅÂĪŗBküš˛ ct ĀQ4`šˆ1´` ƒb„Õ˜šˇ†žĻƒN†ō(Lš ˜äĮ&91ɎLr9 đŋ˙˙×í5M{õ˙˙…˙˙đŋņÄ8ˆˆd0q†vĘŗ"ÆB2ĘC F@ŦĢ2Š‘#ƑĖĖ Ā‘Āķ#…#‚‚8f‘ĖŽ ¤p`Ž Ā܎3G Ā5‘ÃxŽdpmÃÂy … …˙ ˙˙Ã˙ų<˙˙˙˙˙˙˙ūA˙đŧ0¸_˙˙øņ‘ÜŨq""EápĄkōTÂ_˙˙˙˙Į˙ÃđšNÆ(_2‘=¤Ž?ÍūüŠ?ū˙ų* ˙‘p_đŋáū_øøA˙…‡…Â… Ąaø_ã˙˙ų ˆāÛ˙ū!ÄD‚¨ä Į—Eâ˙˙øB""P~Ã.˄SˆÂ¨_ūC;”äN)Í߃8‹ƒ˙õTà _˙ĶĶ×í?áDD†@)ŽF9r Ŗ˜r91ÍĮ5 ˜æ^?˙ÄDGņ˙˙˙˙Ã˙˙˙ãâ""""""""C7Ė91Í3`…Áƒlģ/…0ds#Æ"9‘ãøüb#™ˆ)Čå đɔT6rpaĖ91Ė?ũ=U˙˙˙˙˙˙˙áb"""WJˆņ28ČæGˆæGˆã#…#ƒđ`Á‘â<`Čæ`B8+‘ÁāU\?jˇjēĒŨ¯Ú˙â"""""TĖDCˆˆ™ ÁÚ"¨ d*#QÚÁ‘c! íb#˙˙˙ø_ū#áÄy0/…đą_Ã0W“ đáųŽ#™#™ūŗH˙˙ņđ˙øˆˆŽ"#đŧ?Â_ūŋø˙††¸˙ų 0æ71sA1ɏ„˙˙đÂū˙á˙…ūü(_áᇅūø_˙˙øxR?đĨąŦW(2ÜHˌ(ôáB Âđ˙˙™y˙Ã˙ü(Aåœ%ųŪ˙˙ü2Qy÷ás #ō?üŋ;ŋ˙˙đžž×ÂūA˙˙˙ü/˙†v4É@^< C´ ‚yßÄ{˙ü(_ ˙ū…ü ˙˙ü/ø[üíXȐ(jp3¸gԔĖĀ0KAŋÂÃÂá}ü+øK§¯ë˙˙˙ü.r8( šA…˙ …"Gđ˙˙Âa|'˙˙˙˙˙ø_Â˙˙˙…˙đŋ˙ų˙˙ ÎaĖåaXV嚨GŠĻ“hš28Cˆâ/˜ GeÂ6ˑ9Ä^$#ˆģ.ËŗŒģ02t]œGĸšĐRÂņ  ,˙~ši§ŽöšŨú¯ĻžšwvĢéÚ}§˙ X_h/üDDDDDDDDDDDDDDDDDDDDDDDDDD†¸äG&9 @đÛœƒLrĄō æØsdxåÃ;Ö029‘â9‘âBŽCLĐ",˜”DFA\X‚ÉČkˆ?˙ķ*_˙áBÆ˙˙;ŦBˆ/árÂü?˙ÂūC,|/ ƒ„_˙đŋūv.,‹‚ ÃâÂ˙à K—đ¤¨&ü/Ö˙Ųŗ(|7Â˙˙û˙áađ˙…ū:ŪC,+:‡áH°l¯ō HČ(˙üœƒ‘C#†+>sgÉ@gÍ‚“ū?˙üėH aČĐ˙ ˙Į˜ ˙đŋ…?‡ĀøX˙ BĮá|.l$™N[›eđÎÄ׎ū?ÂųöLĀÄ`ŋ×NøZ~ŋ!˛2 ˙Č(ūˇČ`zū""""‚ĀäĮ&ƒPÙĮ ĸ02… ˙ä3 Û˙â""""""""""A0ӁāĘ9‡‘ĖŽgāˆjŽLrc“Å_#Æ"8Xf,/Į˙ų1„-fŒ4aÍÛ ŽjHá°˙˙˙˙˙ød6„#˙ø?˙˙øˆˆˆˆˆˆˆˆˆˆˆˆˆˆũˆˆˆˆˆŒÛC/k6&9‹™Ãaŧ†o“‚cØ9 €Ærc=l0d,<4Į˙ … í5ítũuí˙ų  †Áâ"v‘ 0G„DD3l(†Í—'6l! Ũų9P†Í—!–Nl,#!—ŧ'BcĀæC7cDĈfŠpü ü!˙ÃÎËÆ…đŋ˙˙ūC>Ãđŋ˙áBˆŒ/ū†v, ūü,…ãū_ü) @Oø^_áäø_ō ō ˙˙; Ÿđ˙˙đŋ˙˙˙„†'â"ü?…ō G ƒ„?ü/áBügcBūC8ü arT'˙˙øx_˙’€Īü‚L~E Ž'üŲü•“@Į‡˙ü<ė ‘@Pv6q8ũÎ;Œ,|˙Čđŋ…˙é÷áá@Ųü/˙ū/ápƒü-…ø˙ †|†C<ä6F!G ˙…_ ˙ĖDs#ÄxĖŽGˆâeXfĐĘ"r%ãCˆņ¤JŖBdxâ<`dpk#ĮPi03¨!#æGŽ@#á°ø?ĖŽ3LDpŋäOđSą 1ø/˙˙˙˙˙˙˙ū˙˙‡ų ‘×øKá…DDDDDDDDDCq+F!0¨ABQ š|DDOž˙…˙ũéü/˙< ˙ød6…ü&@ÂāIø\(_˙ ØŸ˙˙˙˙˙ÃđŽÅƒgūAáHQū\) ‘ÃđĄƒđšØ@Pããü/ūø|¤˙à ›$øaB„áa…ø|<(PŊo×ũ˙˙ …ÖJĸ8`kÆO ša‰ ‡ÉQÂ;†A„¯áÆ.˙đđŋüÂüqņÄÉ!ū""@đÖr܂>F9ŋ„Č˜˙×˙ŨëęWÂ˙XA„?ˆˆˆˆˆˆkÂ&9 ĐeIæG™(ˆã#žđūL ƒ‘ų‡0äc“ˆ9< ƒÕ˙˙˙ī˙˙˙ū"""""""$pŽ āƒAČiá ĐjĖ Ã‘Žaɏøâ"""!ËŨd2õ#ÃPĐO ŽLrph&9‡4sbäĖ9ÃL˙˙˙˙˙˙˙˙ķPņÃÂÄDDDDDDTDČq‘ 0WŽĘ î#ņ8!9bRBŖø\ …ūPŋ; Â˙˙˙O#Äxģ#Äpk<˲ė! ÔAĢ…ÁT.ūõ˙đ¯õõUĶūū¨/˙„\-}˙ČņLá‘â)ˆáHã#Äq‘ĖĀ0dx)Í#G‚ Ú8ˆÉ–ĸ„đžđ†ÍIÁ°‚Œ7› „3ŽLrĐ0?˙˙˙˙˙˙˙˙ņÄDDDDDDDDDDG˙…ˆ‡EHÎĄ°Ģ ŗC( ŗæGpk#…#Œâ2˙ÄDFˆŒ!=ĸJ†"2 6ˆ˙˙đžđŋ˙ū˙á˙˙˙Â˙üÃÂMuũų 7R"A690BkŒ#&¤MP™!„‰‹PËԈȨd„r&0C,T'ŋ&hDÔĐl#ÚB{Ŧ˜Ņ ‰e’Kü/˙ápŧ?‡ü?˙ü/üˆÜ“˙˙˙ Ã˙øq?Âü?˙øū¸_˙ …ūÂ˙˙˙õø_˙đŋõ˙˙õûü?˙Â˙† ˙ø__ŋ˙áÃøx_˙˙˙˙ …˙…;ņ?  ˙˙˙øPŋ˙ųŋ˙˙˙á‘āŋđ˙üėÔų- ˙˙˙˙˙ũr(k˙˙˙â?Â˙˙Ķ˙˙…˙˙ … ˙ ! #‘Ž@Å Á¨h&91ɍ Û2˙˙…đŋ˙ø_˙˙˙Â˙˙˙áá˙üDDDDDDDDDDDDDD28RB…˙đš1/ ˙áŋ˙Ë˙ūą˙…˙‡˙˙!Ž3á˙˙˙ž#ø‘žvj‚ī˙đéø˙<09†žFI‡˙˙˙ņ!Ÿ˙˙˙ū8ã4XãÎČ €$–@(0ĄBÆx^„ŋ§ë˙ũâ"$3“ˆ‡a˙Ž#'ƒa ĐDØLsA1Ȟh3pŧ›%ŋ˙˙˙눈ˆˆˆˆ ™v('Ã˙ ˙…đˇ!eO{ūh/AxɏļPųbP¸_đŧ‚m ˙ɏá„!üˇ2˜üeš!ņáŋå2/‰Į2&Åŋâ#˙˙˙˙˙˙˙ōŋ‡<w '˙…õ¯éĸ˜S˜ĶüĻ O å~p0S@xZ N>Aå0 ųŗ<…ZÂĻ$3ŗá|‰ŋÁa…)ŠÃml›A5 BīWøĘcPÃĖɂä{‡øY ĩLF~X, û) Ã@‰Ÿ譏+”Q‚ 0h˙Â˙ËNÖ˙xAŠešpc˙ ü3L|ĻLČė 4‰i Īëö!ÆS+@ž”d'Ã˙ō¸ É$‘@@ƒ˙Ģ!°yÄb#Ÿû!Jj’R†˙đƒ2. {O_ķ° Ā†ˆøÂøD0$;H ׅ˙˙ō{J0ä`Ÿū á…˙ō&‚˙…ãÂūËP€j @ŌEA í )Ųp¤q‘Äü‚” Įõ×˙˙ü>f`ĘĀĘŅ”8pÂ Ō°A§aˆÎÅ4¤œÄF€Åˆ fäq˙˙˙˙ëáxpË9 ! @Cą OÉ@'!0šV !iØc‡…˙ųÉ`g1‡Ã˙˙ÂA…  AŲ0#ü‹zʰ_˙ōd ˙ÕaBTō;ŗ)û%†‰ˆ_˙ĸlWÉ ŋūē õūøđ¸/˙E"c‘’Ā&qķ´ĒMP™! lžü†7Ÿų6(*‚ĀSą ¸\’ ˙øPŋ˙„_ÉĮ˙˙™(!“XÍö˙ …ķ$ Č28R9— "†z#ˆG GgL‚†0žBÁ~÷˙˙ë˙[ūĶĩU…Â_øV!áɎ0ä÷ūˆˆˆˆ< Į#†qȘjIy˙áũ˙˙ Tų?&Xh&aĖ9‡0æƒaĖ9Ŗ˙˙†(\†đĢ…˙ á˙˙ˆˆˆˆˆˆĖæG""C`ä aÉÄüb6Đ~F˙˙ü/ˆ0C„Į&9ŗ˙˙Ēđŋ˙|0ą"lxPƒū"""""""""""@đgŽ˙Ŧ%€Á Pg)"0`dpB8)˜ˆæ`ds#‚‚9ĖŽŽ!69đ<4Ī…#ƒq‘‘‘ãb0gĖÄGˆāt xÂø_¯‡[M~ū˙õõôĶû_á|.BD"8ˆšĖĨDČ)!â""0„JŠ•ˆ•EHČ’Ŗ)Fv´dĘĄ’C;#;Ã; ÎĘŒĀŸÂ…ĘPŊ˙˙ë˙˙ūđĄB„ä* (\ Âū …ŽÃ˙á˙į‘q˙… Œ(_á˙đū=ŋđŋôūN?õ&´Ot&ĩ“™'ų %˙}ŋ˙â""29˜Œ1ŗ#™f*‡_˙˙˙ūŋ˙˙˙Čc˙đ\/ä05_ĖU…ü/ūŋ˙ņ—Gs'Guá ˙ ˙˙˙˙#"* ÖO †‚xaɎaČĮ&9qé§ĻŠß˙˙ü(K‡˙˙˙åX'˙˙üDDDDDDDDDDDDDā´9P#vjDCO'Kæ#ĸ8Ž"āÁ€Đ]—ˆņtŸ˙âU ­X „p;ƒnúvžšūši÷~š˙ũ.8‰""""""""""#˙ đČa\Ŧ ŦŨ Ŧ,2•#+)QJ(‰A•¨šEhȰČQĖ ÎDxĀĪ™ķ#ÄxäG2ˆŽdxä`dq‘ãG28d ˙… _đ˙˙÷ßkßkjˇ˙iøüˆv0dŦ1 Â˙_˙øPƒááBá|.2Ņ5|Š<ūVŸ˙đ§˙# đ˙˙Ė 8Ãų ƒËR°@ĄJ@ĄIPŋīÇü?ōc‘’?˙ņ– `ĮåH1åh1˙øXđĄx|Dƒ(äG!\ˇ+ sfú–ĐSø~“'„Á ÚŗAæˆ9 Ã‘4¸h0äpLsA‡'‚cũSOī˙øC‡ .e˙˙Ã˙˙â"""""""$Š ˙â"""'Ä„Vĸ’9ãČæb1ĖFGˆáHāŌGŒlûá ­ĻǚjŊĒøxO˙ˆˆˆˆˆ†ˆŒšBká6ŠÉČ2 A„ ĀdüÓĄ°Ã˜sF9 ƒ˜sAäĮ0æSLs`Ɏh4Y°˜æĐOāĐo4r5ĸxC9A ĐLsA=áaĖ?˙˙đŋ˙˙˙˙˙˙˙˙˙˙˙ø_ ˙ū"""!„""#ˆˆˆˆˆˆŽ""CDFˆČķđ°û˙&æAJ™(î á…đžŽû˙˙ø_Â˙˙˜ Ÿũ„AäP0Lƒ˙ũo˙͞ŋ˙đķ+ü˜äË!ų=‡Â,Ŧ)Ė9lü)* ø\/ø_˙˙ϟ˙˙˙ ūø˙cˆ4Œ x8dpË#™!pĻŲtdxē.] ģ.28Ĩãø ūmû…ᯑ¤!U ߛĖ9‡&9 9"Ls ˆ9û_īTũ=;ž˙˙OĀÍ˙ëđž~ī×ūņøˆˆˆˆa-¨ėR“HOiF‚ph'Âc‘Á°Ã›ÉųŧÛ É ´„6ÂCF90Ė‚ +0æ‚xaĖ91ȃ‘Ã ųÇ˙ũ5˙˙í{MWĩģ[]m˙Ã˙â""""8ˆˆˆĐâ"!ÄDDDC!Hg*!Ÿa“ ĀŅ C8dŌY2æƒ ‚$ØaÍāĐA¤r1Ė9 ƒ‘&9?0æŦÐŖ˜rÓŒrđÚ„ā 9 Ã›  ړ.drc“‚paȐCl&0 9aÉá8#øÂ˙ū 0ŋá˙û˙˙˙˙˙˙˙˙˙˙˙˙û˙äA˙ ˙ÉW§¯˙˙ˆˆˆŒžĻ'ŗHˆâ""#ˆˆˆŒÛ˙ ĩ_˙‘@ĨPL– 돊*B˙ _˙˙ûøPƒˆdá˙˙˙á|˜äaD1ēō4‚ ˙ã˙īá˙˙ūFƒ(1‚w bŧ ˙˙˙˙˙†đą˙˙ũ>ŋá ÛĖU“I˙˙˙ņ z›”åáUMŗ‘æ]ŧ Âęŋ‚‡˙˙˙˙˙Ķ´õÕ?ûÕaB„ŋ˙˙˙˙ ņ V9G&9 9 †“Ͳ9‘—a=qNAw!™r˙˙ƒ÷˙øå6\eA˙øAđ˙ČķČQá˙ āƒĖ ëø ĩ՜|?ü"øū ä 3™P˙á˙á’ËŪŋČ&xX×˙‡–a$d2Â˙…˙ü ˙†FÂÇá˙˙ ˙˙˙˙… … ü?†MÅ Ž˙áū ˙˙ø^˙˙˙ø_ü(_ß˙ü+đŸ˙˙p˙‡ųÚTd˙˙ü/˙áÂúü‰˛đŋūĒ‚áNā2 ë˙˙ūŋ˙˙˙ „_˙˙˙˙˙ČāŸ˙ø\(A˙˙˙ø_˙P‡˙ū*… h'×˙˙ô˙˙˙ōÉ—…đŋų6¯˙ūáÄDDdɡGCA¨h"k˙˙˙˙˙˙˙øa˙ōp)ƒWû˙‘"!„ˆ"ä„öhNC›Rh0æØr1Č*ŽaČĮ û˙…đĄzköŋk‡đā˙ō= Ž""DH!ŦØQ•ƒ;Ã) īĖė8ėĒ8 øpđ§e‚…ķ€Į˙˙˙áÂ˙đđŋ˙˙á~įe°ėŦ4axá˙˙đû‡đ˙ Ą|/˙˙ûû†ėP  ŋ˙Ã˙úø8‡“ŲG¨\œˇ˙˙õøxP§b€`(_˙˙˙áü?ü(^?ü/˙đâ"3hņ˜ˆņ#ŗŒģ Ā1¯˙˙˙ô˙íWũ˙˙˙–8ČæG328„p§ĖŽ23‘ˆür#Å028FG ÆG ˙‡˙˙˙˙˙ ˙Ä8ˆˆˆ‰X3°Ą‘âJ˙ü7áø\šÁ1h˙~đž1‚á|/˙đÂ˙˙ááÃė øˆ˙Â˙ī˙‡…˙ã ˙…˙ … đ˙ø‡8˙đ˙‡Ãū„""3öq52čŧpˌâ/ŽŦėD]#4PŽ"!”"ã0pBä~ Ãü†hūĶÕ?M?Ŋ?M4í?×˙õ!œsF92æ œšÕ˙ɤ5dABxG˛äŌ‰Ŧ’˙á ƒPŋÄDDD‚Úƒl°Á˜ eJ#ŒŽds#™€B9‘Ã$Âō\Oü2 ëÁ5Ŗá˙˙˙˙‚æ‚Ä5û˙ˆˆˆˆˆˆūŊëÂŋČndg Žg"9‘â9˜3#āÖGæGs#4ŋP…ū°žõ[ĩOĩīŋúø_ɋ ø|DDDDDDDI”JG he[‹F!Â˙ū†˙˙‡ ü>đƒá˙!ŠÃ¯á¨L(\)6Ē$ĄƄ„]õ õŋ˙_˙X^Ô?ŪŋËs ØK‚ÎÂRēA<Ž2˙øČ‘ũč8|?˙ ƒ˙˙˙˙…‡…đĄ(XĘåÁ€¸_˙”†_ ū˙˙ø ŽA¸ķHäS¨÷–ë–dX Ö<¯X(øzákú ī˙đŋ_c“€Č¤~1đĄBøZ?÷ō1ÍŠ5 ”0æĄ8#˙˙˙˙Áp¸[˙é¯â"""#0 ëDs#Äs#™.2ƒ4ŽŦdaœˆæGˆæG28(#™ü/˙ø_zė¸ĘQ”Gâ8ČņˆŽds#¨˙˙˙˙˙˙…ü.ũTBnŋ˙üDDDDDDDDDDDDDDH .V9WeŲxeŅÁ—e›2ė¸Í….Ž2āļšVUņ“X#Vh0äH&9 ąČc˜r…˜äQM?ģõM;ÕU=5_ųÁŋûûN×˙>ü([ˆ´"""–¤¨ČÉ@("Ā`•Ã˛ā ędP2É@e’€Øk Ō\dj) Ž3Ė3€Ë#™ˆŽdp%#‚㇠áaūá˙˙˙˙˙˙˙˙ …Â…ˆˆˆˆˆ‰,X2ÎĮˆã#† Y28‡ĖÁ˜Œ ęŽds#ˆG3Čã2ØwũAō˙Č e…ü/Ã;*3ĸ ˙˙˙˙˙˙ũP\/×á~Ģ˙?§Â4ˆˆˆˆ‘†"""0ŋá'^?%A‚¨ėpc)? ũaxxA… ūM˙Ķ Ą˙˙˙ CaF ø_˙˙˙đƒ%œĨĖ!á|–?ü.˙á˙ųĩ!c„˙˙…Č0>C9`Pš ã_øPŋ˙…kū\ Âāŋä¨6G˙ü28_!A‹ÉPc ø\!…˙ëúđŋæķ)‚5CA&8A˙áw˙ūALr ĀđˆlƒHæ‚pb˙øaB˙øZūē˙ãđƒō,?˙˙˙đƒ˙ø~Ö8ã … cOøaˆˆˆˆˆĶ‰CAr1Ė9¨F3… Â˙˙˙ ­˙ü‚Č1Į˙˙˙‡øPĄpŋ…Âà ‘˙˙Ã˙â"""""""#6Čá–ķ#Æ"8`Ž™0dM^BÂø_"A”wīõō`„PØOp@Āä2Į mׄŋūš¯†?ö¸ë˙ˆˆˆˆˆˆˆˆˆˆˆČā`/ÃōĩŒPÍ Äŋ"xBC „ Ŗ#A ˛4 %ĖGãņ€Í(#Gˆā Á‘ãļäp6ß˙˙˙˙……˙˙˙ū""ALy3‘ĀĐ5˙˙!Gü(DX2ÄDD8ˆŽ" ąB1#-20ąĢ!›Y1bxLsN ŽC Aˆ˙ōT áA Š_đŋ˙˙˙ÄG˙õá|(\/ņ…‡#FLŠ2ĸ`„cFÚÁ2ĸa“ÔӁ X"Lrr1Í 9 9  Bcš†(&?á/ũÂū˙Â˙ūÕuU_ģ[NĶ_ø,~ Âà ũ˙ü0¸Xqœd #&@ ‚B"""0„Dađ¸RX ˙ø_˙đŋđ˙˙‡áp¸_!œ°†s ¤0<0ŋáđ˙˙†ááäPü”ƒ|/Įū á~øO  äĐ,?øū°¤Į Lpƒ €˜_ō˙˙ū˙˙˙á.ŋßĒ ×˙˙ūúūŋø~DŲ PP¤(äĮÂĮ„?‡“*˙˙øy âߐĪē˙ ųáLAJ/â?˙˙˙˙đ¸Pŋ˙˙˙… ˙…˙ū˙ūC“‚=—ū""""!‘âgĖÄb#ĮâJ&°AMuĸӁ jŽ@œrŖU‚Č$”˙˙˙˙˙˙øa’Ą•A”GXĀČāx`Žf‚8R9‘ãJ ĸ“TD˙õ[M?û´û_˙Į“*ĐkC$†""# ˙˙„˙˙äH0äc› đ¸_á…˙˙˙˙†˙ãĖYū/ū˙Ķ2LzđŋúáÑ)âĸŋÉÆN!˜xpԌđēŖŋ?˙… YÎp˙˙ˆÃÉÆGū?ķŗA˙˙÷ū_˙á…ū’äq‘Įø_ø˙ü‚˙ü˛…Â˙á˙˙˙Į†đŋ…˙ Âáø_˙˙˙XãŽ8Čaˇ|Cʒ#x^?÷é˙ üDq*”˜ü0ŽÅŽ˙üGÄG“p‡åq‡…ãá…Âø_üČjđŋø"P@Ą8tF?äáø˙ 1ã#ŲGūđšļTL|(AČ]đŧpđƒá˙ņËC-Ę ˇ?ūv('ū>‡ãü! $0~?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø€ö æ æ ÉŊ€žˆž(,,leptonica-1.86.0/prog/boismort.1.tif000066400000000000000000001220441506303110300172270ustar00rootroot00000000000000II*fŖ.DtUĸ20)8eĀ‚ņ†]˜2Zé>@QoÅ_˙W˙TPōÚ4ÜļƒĄŠlQ.ƒ¸sáQä9CĩKËa89pæ#ƒ— ´ôû~ˇéÃMiĢ ¨L  „„L a*xi vLi§k÷§ Ũuô‰÷n›]'¯ZrƝ´žu¯õŠéZN“tĢCģtÚÚ^úÖĮĮÖõ…iÚuũ'-p%MUúĒŠk̆ÚwKé'0AûˇīĶĻ›ˇ}z¤ÆÚiöŋIi6 ž5TßũCĶũÚÚ_U¯ē&;EŊ˙é/ö“¤Ũ6ßꑝíīMí¤ÜW¤—õéZVŽęž—ūŽ“Ĩuž YĮöũRĩŊŋTŖ-h}zVÕ´ēü$9\nMĩĩ°› Âpõķ%žJŌL Ķ0„0Ač0ƒJœEŠŠĶ ϚžēXjŋëaQDv&„DDDk&ÁfēË\ēņŋũ< õÚqĘhĨ(ž@HČå6iŦGeé ĨæRãԉ#‡PNA‡ ōš2 ֈ(€Ã%žĢ ŃHžVƒzô‘(T×uōĀâ+MĒi;}nģkĒûîģúũ~ÂĘbĩKÚŌûJ8ëëJø˙üĪ &gúüī­Ĩũ|{Åũ/ú_Õr˜Ö~é}%5įS×õü ˆ&KHđ¤DDg š„ ‡%…ô—Ī‰sLGV „ÎĄ Ņé ϟ[áAAhŒ"6 (5‡CM4 MSBđ–wo#‹`‘((Lž0ŠÚ SB0št¨•´Ürœe9‚ ĐRåkϚ"]w#đhĩD˛ˆ†‰ûSA­6ˆWøA„C 8ƒ‡a0ˆšT4 ¤tH6•6ˆ\ Ōˆ–šT´*„$í29ƒ@ŒÉuD&4­[ÛIĩŨOMĶZõL'tO é6 ƒĻč†:o¤éR^ÚMûÕiZéN!TBpaSA§č0˛ņ§!G)ͅP‰QBnF9JËÂ2˛ö<§åf_¯û˙OĶá­&škī„iĸoT4ØA¤ki.‹Ę&65B“Ĩ;ę6×Ū˙õäWޟJĒų>čœ]¤A¸J‹ģŌŧŠët›é(ŋYŊWš>éĩ˙ĒĩĒjH4鏠ú ļš…‡" GÂvęšN†īÚŦ;圂ú‹›ëŨ:˙;{Đ5;Z X\!ŋ_š4ŽŠĄWUQØ4›}uō觇öa×­>˙§ ČAčÜaiđ[ C¨h5ƒ¨g:ø…¯ß[¨öúA&ô˛\ ˙"Đßũßú‘´o# eÁƒ€š€Îa‘EU~Ö ūžļėuø'LŅü+מļĀ3 R85Á  4ƒĄŸŗ€Āa$×M5_ŽžŋáŌ‘‡ˇęšĒNķ0mū„ß^šā3 Ō83@Á g ƒ Č .´ëŊúĒũÂ'}ũņÁe9éu´ēųÔ4ŋa_dšA›#bļc#ĸ ­ŗāįÁ‹i-Wޤn–UUú ļ¯´žˇō}īÖGĒüˆ ßQAsy.ˆā`¸d†YA “"+ũ*öǟÕ:× (_÷§ĢūĢMÚ{ũ5‘ ´ž˛ĮŲ0wdB0‰1‘Ã$5Ī#Œ6ˇß­PJŊaiĨĒáB…0āĶ´Ŋ{[Ũ7ŗ”6øa-'ÁÎ*‘ŒĐŽaŦG Á§Ēō“ųÕjĩõ˜pNüÂæ€S j:ũ„õáĨ"v.˜Áb˜¨†GPĖ#™‘ŅŨ䈧7_˙ō”úu: Âęž?ĐøúøD=Mˆl["ā­ ÚÚi °Ėį,šjĖ  _a_ö÷ŧõđžëIĩÕUu÷uũ•!ŗcÄDDDhDDzôīÖ˙×ŋū?ûŊ>¯NēĒĨzĻ™å8K¤ũĨ˙×R**˙á/úũSAÂZŌŖZ[<ČāĸF8ˆˆÖ‡öD˙ô‚oū’}zÜtĄe""""C!qČĮ"AJË,û×ÂP]û¯ ūģ¯ŲŒdp`ÆGDq‘Ä# h0 dc'Gˌ„C0’˙Zũ×úúM¯úû$eŅŧ&kF‘ĀĐ Ōt]Ųĸ#˛gŲ¸ô|Z˙ũŽÆĢ–˙¯V¯ö‚p4 Čų ČāÜķ*/8‰Â".õō#Õ˙ũ˙u˙×zéG[7‘ķqpĐ\Å6al…‚JĪœ„XU_˙ė-˙_uĐ[i}ūë¤Ím”2ĘC"ąH Õ÷˙íũŋ¯¤íÂúŗRėđ(#†kŸËƒhB$2DN@DîčĪÚäpē˙Į˙ũßû‹#ĸųŅŌ~DDDDHd°äcEĒĨ˙߭߄Ÿũ˙×ëÄDDDDD†H,9C”9PAAĄÎXÅŊ_ī}aĨëũok¯˙˙3 ˛åĢ-lšC‚­z¤˙ FģđŊųœûøūĩßkōä†[f9 Ŋ Yđŋ>9 ã‘`˛åY į š{˙]>ÂH˜5ÔÎļüÎ ˙õūũ?˙äë ûÔ´""q ¯ŋÖžÖWĒūŖ˙ũ˙ūũũÃ3Dāũ-­}/‚8˙̝aaw ]īëûÖũūŋdčā ?J×õë˙ _]UwŋßõũV"""#ũ:ũ„Ēãü-/ĨõKĖzøũöƒ!4Ž q‹‘<›U‘ãĩŒé›ŽÁ•˙ĩG@ŋ踄ˇĨôëī˛ŒEĖē#ˆaBų,DDD†@mŽU”äĀË0Ōđ„Cā˛UĒ][ĄW÷uuũ;M3`hEâčÚØ¨IŽ@ŧuīĩD2œĄĖ9XC"C 6āQYĮ(åa^mŠy UFœG˙ģô+vņ¯Į˙ÛtģŽŋA‘LÁÃ$ Ī"89tt är&N¤3Šj¤Ä˙ûĨ˙ņ_˙¯°ôžíˆAČĮ)ȃˆˆČg Ū(ˆˆŊ5ôJ•ũ×û$˙˙ŋ°hPMrĒ<ˆāf„ts#ĸ 6•|á#ƒnŊ”0‡ŪÚõ}^÷ũŦ‹PˆˆˆÉ\$Ü\ûTU˛ VVĨ„˛ ŽTƒ.†>­-žŋ˙´ĸ@Ė šä:Œ™amÅË1I­\ĩ ÄcÛVŌöŌˇIûKūÂČ-‚˜įîEâ‰Hŗ ė)ؕA‚ß×í&XJŌa›ĄĨíĨwvÅI ‘Čh]!úļsĢ˙!ĩö)ŠSÅ1MCbh0˜MĒy ÔJq+Å6L} ČčŽ ^Ķ &šk ĐPžÕrą![øˇÄFûL‰R XaSAÃA‚Č1ņo^ S}Lj‰„DC+fM7'ÂņúTƒŽg-Î9MÖ":|ƒ=Ãí…}Î9FÅŋÃû #Ōy’pgƒ æFß ‚8Uūd.xb!ŦĐ[õ2 L›- auFK!–"vá(JWÚĘä ļ—ÂH¯_žá!ĻIIˇŖ$ë SŠÛAûÁ‚wĮ°šL•'Ä>ŋúū[6ŧ˙ũõŨŨ-‹ūŋžžY+Ŧ¯ËâîÅ}x˙˙˙˙˙ü˛*/˙ōŨL)ā§bĢü•áNÔėė]m4zU]pĐa&Š.;úĒ_ŌǝˇN’ŽúŌĒZˇClĄë˙C˙i3ŖLôVOßPA𠞈0™á "ä`¤:Ģ_U;&0†šÂÛĨDáŌaBrcŅ!Ø[D‡˙Ē íē$ôN ’đAŅ FNÜoí%ĻøZ á>ôĩOē_ŋĢđēá{ŠsŽŋlBü~ô&ÄU[ÁG˙>vû°´ā¯…ëõĘiōõõ´‚%˙D㖑j-0G ‘?ëDãčØĐ_ū—å‘`ŸkŋIīJáũW‰n´a”\ČųˆčÂ;4?īôū” ĩ˙Uķ°8´ŨEÆGĸ89ÕˆŽīļ—Ģiß -{Ō°Ÿ–`š.ˆčŲ ÁHŽˆâ"ųŌ2 ĮZNIbÜ[í4ÂCōĐJŽ#Â1‘Ņt` ĀÁˆŽˆˆˆ[ Ø ƒļ.vM8O„ōË -†‘(GT#Kô­lŠč>ƒ •¯ā™tōoV_. a˜Ge҃=“1ˇˇ› Â­›L•¤ÄDDC=e¸dx93ᒠ$pÍ.Œ";.Œdt"#ūĸ"""ᄋļ6]Ņ! Œ#t\ĸ Đ"$2|+`ÉŽ§¯v†ƒq `H9 ‹’ß˙[ 9”‚pg49܋˛P†ŪũmäÄØZ]˜Á;#ne¯÷ŌŠ.Ô:}˙+’"ėĀĢąč ŲžÚí˙YŲJ=‘ŅpČ Åah&Â4ëa28-†0`´›×˙ÎÁ€3 ŗą‡Žēk˙•æˆņp3 ĸ9˜Îø4W„ĩÕ3ƒ# `ú1":<ŠQˆÖü„>¨?ŲØXƒi#ĸ:6Œŧí g×Aģ´ÕfK*$2RĘƒŲ‡!\Œs Ņ˛’{KūũØa" öÂåi菑Ál#™q[1˙īÆĄFEHė˜h#ĸ8-‚äxŽŽ2JG˙&äŽīŗXeDp4Ō8Ī#ģ!¯üu¸ˆˆˆ[›#sšVGą4mZßëŪCš8rR ŲZīüI=Hjš9ÜÁ—dʙ)(!žIũ|‰á~ŽŨ2äKb#Đ@ī5/ßķ%„~#˛8'ŋZqū;ãęIQl2E|Ūwy [éëũ_•Ā‘ts#ĸá Ā-ƒZö*4¸UüuĘČƒ9g ėúWė*Ō}˙2­GÕ28a1˙i.?UŽĨqŧÂ.ˆã# Č菜Ę 1&ÁC°‘B%Ųļf4Ôč=}¯ÎÅ|Ÿ#ŖĀf ¤pįˆ›B"#ø'"&‚ĶD-“ Â‘ÚY‘V`ČäG°'#pÁ.ŽÖLDDAé¨DŨǧã ĻŌ˛Ÿ3h¸ČāÁĀÁžI DzôNú&í(&éQxí^Øĸßŗ‘q ‚Ø2—â?ßĶrs Y9§ ‚#¤ŸÃá|9pB8Ža¨c0‰Aˆ‹ūŠ>đŊĩnĄI¸ˆˆˆ‰ eĄËrœŸ•#¯÷ÛÜSßŪ@Ė6 é Ü]ßū—⎝×Č‚1Č“ŸĘ ¸&6B73Ōų’E]ø…nŋ÷–6Dĩ ˙Ķ]Ũ…kũëĨUoŋ™W‘ā@ßÔ ­ŠoûúúīÔžpÅÛKÕúŨicúįe¨Ú?‘Ėčˆāļeã°ÉoūĨúékÖWB#ä|ŽˆāfEŅĸ1—ÉšHģJė éžEæÃK 5_eŽ‹ˆGËåÑĀĖ EÄ4ÉŅ1ĮbBÃbŽB`­5æHˆæG0.GČæ]dtGB"?´Ŧˆ=†Â§a:IÔÉe"ČAÄHdã‘\㑎aČ;”9°Š•ĄD°Rmôîa0„ƒ0˜A…a*[;ÔB:#ŖŅĖ‘ČƒD°„DDDDGõuB DEBUe¸Ņ°k#æņküECxA& g;•Ãņ\zŒLđPႍh3“‚ŧ› q! DT&ēŸ÷ÃāˆˆˆˆˆˆˆˆˆˆČäSČ­˙8ä ×!„elPĩŨ˙÷ČeŲ܃ŽTĘß„mĖĩ˙°ÂRt#Ųj¯ŋ2 GeŅp<>Åa•°¯õäB)ŲpÉ …Wŋ+“FҰ[|xŋԒdv_#˜ūúfTfō:3Žˆˆˆˆ×ūļĩ.ŲŲvGDxē6ˆėē#ĸ:#†ĄÁ˲r3„DCB"#˙ĒúAõr¸č"ŠÔ§“–4d¨˙Iô””ĸŒ×°f#Äx§đ„iˆ˛å{ū•ô°Ĩb8ŽĪåĀĖŅ#˛ųHb"Á˙oüDDDD†@ŽXåTVÄh°U˙û×üáŽå$ B‘kũ~žŊs!pŧ†˜õ‘RÁIš ˙īä[ŋđŧ|“¯˙û}]˙ _I.ũũRũIbŪÖô´ŧoëũúééŌĨöž˙īûŋÕ­ũ/¯˙˙˙úoúâŋŋū˙ūĨæGDvGúé˙띓ēõûģÍ#hØf‘à _ũ˙ˇũs!dGЈˆŽ@đŖūAâ×ú˙¯îD‘vˆhD†@3På)P†€ŦƒPåŽ?\k˙˙ģ&Qth2äG0$#‘(1ˆũĩûūšØ¨h#™B""$2drnNĪ3ǘ”°D˙¯\z÷ä$GĀŦÂ%Ņ2a†J؈ˆQĶīČfôļ—o˛$ō>\B:#Į˛8-‚Š´]b"Đø!üƒŋcôģK2$D„GČčŧ\á—D™ˆ×ôž/ûJDÚĸ,A2čŽDp¤t]ĘˆæGG°V=‘ŒĒb5ĩø]Ė…=Đ9 1ʲ‡ x,ŽPänPå9ËĄÉŽq ˛}ßŋ˙ŪA¨>ŌÂŋ˙ũ}z^@ür1ȐCÁ€Č0¤Z˙ú×˙×ũ dę!fˆ‹Uũ˙×ëk¯ęŸ˙îŋ˙ô˙Õ×ũ˙õ˙é&C˙īĻŧĘ ŨŋëLk_kģėũīūīM/˙¯×š ˙ūēßū˙ ė/ˌ":.ÍŦÅō8_ôë+Ž×ėŠĪõđ×ŲFō:8ˆčĀl#†@f…úH‚ņŖČ•?ɀi˙_y˛"/‘ōčâ#‚ØeüˆčĖ$…üƒß_{0a°ÆGf™N‰› §˙ ļü(]ōœ~폋Ŗƒ#Äp[˛9 ˛:6Dl8ˆ‰Y ˙ûŌČąŽđDC@ŽvUķŲp3ČāâĖ ŋén’„5đDbEā;%™"!ng)ĘĄádĘːR¤ExKī¯zXV­įd#@@B""$aĖ9 å9ĖkKũ' ō ƒ˙ŽŌT•2&B"$‹"93”9Į'Åa=JؘB?æBĀ–‚uä>ŋ~ Ž â:H(Ų‚8ˆ<œÁ‘ŽPä%ÉyZԈs%ĄöCß  •xöū“f 2>c.EŅČč˜CdŠdag…[Ú}Âé Ô9‡ņ! .w,rbe)Đŗ*0‹-@Ūa#[ ]s­Jēō†Õ•e@¸Ņs"H—…ĐN <&‚ ēŽüáGÜŊ˜KÉŲ\B-÷ z"G]Rü[éWjL?ÚiÅĒđ¯H'ø¸_ūšûÂĩČe¸ÚũŪ¨-ĩd\Ėá­!š9CAĮûwM}áBá/°D ũë ļeÔ9äėDDFÄJ{ˇęvp¤Ŧëđ’č‚ã¯bģK\Õ%ŗ<ŒŅ8Ė# ¤pC€f’C„˜{í´õ‘`{â‚ęÂ酑ķ4¨%@Ëäq—DčÆ\ Æ\Hã.ˆáČã.įŅ‘ÍC‡K펒…­„ē°ŧˆëÆÍä|ÃDDDD‚ؐS•ô'äâD\jÚŌ&?īIŅ>Ię<ŽąD„mō:#ˆG0d6ÍÄDpI}â$4‡Ú†ô´ŊG Hž|Đ28ƒA!tEÃAS36n3ØB5ĸ ū)ØxJŌģĖD|ú#Ŗfo8Čāx"Ø9‡4…aĘ&0š’ÚR˙ p údpeŨ†„#´,ėEŅĀ„p3S6o#‘89 ˆˆ…¯­}ōC”8AÃŽü ÁHē>ČáHčŌ.ˆPg*ĻS#šV•?pÂō+Ōö,!ņ Ų‡,Á–Iím;A%Û 5û8ôÕ/!°p‘‡,rŖ‘G8öŅ €ÖŠæ‚C—äĮ!• ŸúDģÅ0ŋk {A.…ąH{ Õ3 Cb‚æB/>Ö¤Ÿh0Ŋ ĶŨt—sB˜,Ŧ”žál-¸0Cø˙T08ˆúÂ"ö Ž)xņŪ–ķŽPåŽPælV¸2Í#\%˙ôâ"X‰§ûM?ŽĒ_GP•‚\YŸØ_˙ +‚ûČ(`ĘŖ˙ü-iE…aq#ĄĘsŽCH}øŽųL‡„¯¤ę q!”:ūŗ#AŽx'­—A/ŌøC˛ ¤•~đ‡‚á8؈_"Å,ė)~ˆe¸ˆ˛8ß$ĪÂé¨M`ŗ!oŦāe"āˆââ8„p\Ž Ū? ĻęD2ŠH4,ÎĄ—x= öėJȓGéúá/ ä0iI4ûo÷ ūGā\Ž?Oī* ę œG ôߨ3rŋâgʧ8âC8âaī§™ƒQ‘hfũ‘€ĶŪN *ÆGDzūH̊/ä6‚DK ‡éé§˙†@¸áHâkdt8ˆŋ§iÄ „rC˜rĮŋûĩ“ Š*ĘpÎ5‚ŪÅ6 uņ(sˆ‹œû(3: ‚…v#Đ>}ë¯ø°„† ë˙ĄE‘/h2PkĨīV!°wíë™úA0Ÿ^ŸzD?ëŗ$ŠÖ9 ÁĮûád0ũ„˜OĒמ‡ĄâąâX _ũ"×ÁO‚Ŋu˙č Hãœq‡ú„×Ėט‘k¯#Žü ˜LC„¤aŌ,ŌP°Á~Ģ˙˙^=„ í #pB?},k×_&GĨ‡ū)Ų|!0æô•-ū¯ø ôˇūHĢĮü%A/õ_Ōn—˙` CA ƒ˜s?}Ǥŋ˙ ë˙Â(\ČášĐAũŌ×ķâÕ|$ÖŋøA CďŖŽĻ†ÁĐMb’ ~ õôšÔĩ˙Å( ‚`›ŧR†/Âu_"2›Z˙öGEŅJ"qķ}…a/ŽĢæ3~׏Čg$Æ†ŅœÃ˜sš‡aČ1^ƒ#¨Pŋđvúüa"¸ XH\MŋÆx!4eČZë#F˙đˆđˆŠSēI)=a„d” ?0$|sˇ  üĄá‚.„ēņ˙˙k ˇũ°ņúČh˙&KŦ"$áŅtÂĸųÅų7Ēëüv¸M‚ب ‡ōoáöŋøZXOú#Ą!üK˙KIS÷¤Œ"*‡õë˙›aŌUõŦRß^ŋ˙„•˙{)Gז8/˙Ō[ũąë_˙é)č"?úõ˙ũ-?áKŽ˙˙°•čĒ˙˙ú_ų{×_˙Å?ęĘØ˙û˙ũĻ˙qūēŋ˙…ū×[_˙üŌ#ú~ĩßãúˇû—_°ŋ˙ö˙Qt°ÂŪŋũ˙i|tŋ˙ĶËu%_˙˙ũaÎܯ˙˙ũnGZ{ũ˙˙~. ;IņëũT0ŗ%Cßŋ˙ũ^›2í/ßîß˙+–§u˙zú¯÷ĮīKõūõ˙úi/Ú÷õũ1Iz˙ßŌÎÎ×ë˙ûõ"ųŨŖZHuã˙˙éȆ! „ã$Ä(‡œĐd4SÄčÂ64_˙×ņA˜PA„ĶL4 &hÁZhŧi˙}v[MBa UBúI´ŋ˙˙´IčŅ;ĸVŅG_˙ôû˙į`‹~ŋøéë÷¯÷˙ŋ˙×˙ū˙˙Ŋ˙˙˙˙ë_˙ûīũrPxZ˙žD÷īߨA˙úü"×üė\_ĐO ˆũWÁô“|đz Ōīá;îŧ?ũ?Đ__õúIL…͝é˙Iúų*-=u˙äTéB˙WÂ}“ßūDWD;ŋH/Žžv%ųęAŋUĐë߄čîīA?Ĩ}đŸî—XIu˙é×č-; /üíEú×õņ‘tGÍæ‘´_3eŅp=A ?˙ĶũPJv•Ņ3‘ĀĖ2ŽĢũ­zkeĀÔ/OúKVˆ$ ƒF9Š9 a'(sŽDķŽ"$Áøŧ(rS(sšÎUlš ĸ¯õ˙„R E6čÅ#Ŗdg˜EŅĶ;52 ˆˆˆˆk˙LČÆ`6Ī$ā4SD]"ĸ""""?[_ė‰21r.‹#ģDL €VNˆb—2 âætFÁšØ[¤ē­üDDDDD Dĩ2Ö ė /^ë^ˆ@Čl-9 ĸŌö’Ōô—×Ԑ<'d ”S‘ŽqËŪaÎäQÎ4qĘŲ‘9ū­{ }wŲeČe”ÆVE˛ēÄ'ׯ¸HČ­ü,%ųo†Ë|ĩéũ>H áoô7Ļ“`Ę0UuļģŌâ'ķX-¯Ģnō,„UjŋúOņԎž‚lŅĮ ŋ#>ë¯ā‚čzÕ´§‹Ļŧ.úæ’Ŗ˙`ˆęŊ:¯¯đŋû_ûúMØAÕM–ôõŌ˙ûéüž˙Öģūķ-_ÕëĨׯ˙õÔėQˆų„`4ČųDÎDps@Ķ˙!o!û˙˙Ōz!Ļ8ˆˆˆˆˆĸ:ũÛPļŠw¯ū‘6GPiC×xÂĮūŋíJ´`962>_.ËÄp3ČčŽDxÂ2PÉĄ†÷ęŋ¯É*# ,ã˛Á+14b?đ}/č”ätƒL‹#!â<ˆK"9ÜH-ƒ]š ŽPBjː.ŋ ûžŌ%ĄĘåōņÁQ4„G0Øq‘Ė„DhÉ0 ‚ĮhFēŋÃë0Œeø; !‘ĀÚbâčĄú_éxˆˆˆ‰@VsŲ1ȸZ‘:ÉíËŲ5„/_¯ņō‚ČåA ƒqB‹U?•…AG,™PVÍH0JJeņļ,„iŽõÂ_ū]D …7\„ ÄDDE:īŋÕëüĘĩ˙đÚ ü?ũũ~˙Žž ¨Û­Wūĩ]~øũĒđƒŌĶã˙ß˙–āŋūös„í%ßūõ]ķ*—ÃI ãˇ…Ē›I‚-u˙_]øü0´Õt‚ø„ßī_ūeĒøęŋI%ĐMūŨk¯÷ņ˙aôŋ„Bãūŋúī_ūÕVKyéū׎ŋōŒ"B/ãq|ĀČᐠĒ_KŽŋZXZ_ûõŌöCEÅ#ĸāļė­‘^Ô'„ē_ Ō˙÷ŽŽČ€4 Čæ`) ČėŽ 1ū5°Ģ Nü/˙AŠ1œHp¤f\ ÃXŽÁŖ4`ÄIv#™Tž•uXI% ŋō ‘ĀĐ2Č莈ųxē;%cB-}˙ÛI† WôŠ‘TG28f fˆÁ28d! #œē#äĘŗ_˙ø`Ė ‘1!qŖŲŅļBf29—D|Ñō9 gĐËŖY’S#‚+l3Y%”×ŋ׈ˆˆˆˆˆˆˆˆˆˆˆÉČC–9rœđGĩh'ĄŦĶņōĄĮ!܈9ČÜĒ*)Î^āšröábŋ˙×ųÃ?’‚ƈh0]šFeÁ-Át7œá Gęŋ˙ûŽōĘȂ ¨0œqûPĩ÷ŋûßđ’Ŋuđđ—ūŋũuY•kõ¯ŋŽ—ū˙˙ûŌúīÂáõ˙ūī˙õ¯al%ūw¨O˙˙Ĩú[×ņÄ.ŧ!˙˙ūeRúX¯ë ŋ ˙ũũũúé}(_áu˙˙Įétú ĨÁ=×ũwū˙˙¤4y/ČGã÷¯˙_™ŒY-F„cū’IûÁú¯]ŪAäb""""#Ŋ Š_ëūĩî˙!C.Œ˜iĀđÖô’_¯˙zú Ččē0ΠļÅ9GĖâ2dĐž•/ā×ßįfĒ""""@đföT‚ļY !øA$žßũ膌 `Ür%” ‘2ä ūúZŨ•¤pÁ0ƒNBNČĮ/ áˆ4V…P’r÷î Ø˙˙vGČh&PˆæIŖlņ—EĀ”‹„5ĸB-}Wũxˆˆˆˆ‰07rūIɎTr’Å%“N\¨ē˙˙ŧāÔäcœr„.eđŊN`™¨^ÕÆē˙˙ĢōÂØŲ‘‰z˙ŋ˙˙yN%{ū˙°ŋīūųĐ*I˙˙˙_˙@’˙˙­Ĩ˙kųd߄“íu{ ëņ¯Ákū?Ķ ûģß{ īpdˇßǝž)˙ū"ŋ˙ūŋßûúˇ˛n €]Wû˙×â-ÖŋÕŲdIĪåķŅã#ĸ8dž˙ß˙Öˁå".ŖÚ.‚f„G28R8-Eũu{˙u$Ųth‹ƒ—0,#9›‹‚û÷ŋû†}yB!¤ËÄqHÃ.`Žqˆßúŋ˧œ@rã.Čų˜EŅ!Šąˇß}Ļ@”ē.‘äf Á˜žGDt"""?ŗ'įŌ ā„|֊Hė„CĖFŽŒ4ķ#ätG@U#‘¸Á‘Ņ’–F3#ąã!ļ99w ƒ–är¤ŗüŦ9C–9AÎ9XD˛œæõj Č)§*Īg‚¸Ž8į8äĘ ŋaAˆŧDDDDDG˙˙ģ˙Õŋīũú¯ũ˙˙ŋĶĮÄIą“ĩ–rģŽYŖ[ÎôŸũ˙׎ô㧏ĒËiWI.G%ŠkŠ2ZG`ƅ›ęIæAĩpgbą„ ÂqČĮ†ą Dv„4MÚ$;“wĩũ+ĖI&–’ráĖ„×ŌãKĨK iq×_ŌOĩ‡c‹­K„¯Ō֒ãFgŠh, …uũHqQqĩĸ ą=]é%[NíR­Ĩ"ģ‘žJÚōOČãTôŨu#×ĻÖŊũZÛĖŖ6Ž#‘#Ŗ­õîŊĩ}+;<_.&ž˙˙Ō6.úéJ[‰äs.ˆčē(3ČĀŋ|†@ā­B›jžū´d˜Fõ+ j@önkûö“ų‘€Čž´#n–Õĩ´š ‚qĖä.ČB=iŠŠ SRĮ!œrø“Ÿ ϘÆ+i Â-+V ĐŒ0¨MĄ‚"WHĨ´ļ–[%šžˇC˙ø_ĢLŗ]eėãČģŽ°ōÕYq’xé°ÕEī–Ée×O´éÜ_¯ZŨWIUŠĢRO†\_˙úö´1ųM*Įü€žŠ?å´$ˇ˙˙˙˙”ŅW€éZ˙–Šj˙ū[˙Č•¨˙-ˆųv`#ˆˆˆˇ§ vc 4Õ0šaTRSą™ŅpĖ#ä|ƒĘ¸Ž)Á‚8g.ˆæGÍÅ H ˆˆˆˆõT°š­Ô'mQØų°40DđˆˆˆŌ"\Č˙XM4éSUŖĩ”b.dpl#˜)‘ãŒÆPdĀ9ZŽb: ī×Gj=Uu[Z:#høŠCGd€¸ˆë ôģĖĩ_‘_ڝĒd´”—3ˆŽ–ĩ(FŅt ĄÄDHd6š–XLP†yôûĐJøõ…įä­ĻT ᘋ™ŲĀiDHĒåw*Dzh.ąŨ%|ˇĒ#‚ŅxŽˆúyŠpfLp6ŠŧÚ÷é­ômUW¯4”…턌„˛8ˤĪé~ąjšŽĒĢÕBę*wūē‘b^GQšŅ|ØB;#ŠG iŪĒŦ|%_ék…U wöē…Öwˆû1ȏ‘Ų°3Č➈æCH*Ē×­p\ a™ÁLåŠuø] \ÁŽģ7ÆGĖ#¸"?Öĩ$ P̝˜ L˜ĸ8ãŨŽv´¨‚"8`Ž `Ļ]F3„K˜ˆˆŠũŠJ”'Ė%K¯û˙Ōõ"@f˂B#M%ū¸A:éęžŊ/ûÍOŲxŽ`„tGČá „w ÁžŒÆ?ūžģ~ǚúöûüîãfËįz3˛f"-zøKõ%v¤n‚×UUŨ}~U˛8„#‘‘6"?ÆØKŌø_J¯KǍV\4 G28.ø{d¸TÉ1§Dp[ds;bĶŋŧW×č? 8WDáĒ\ štGDt=……õâ"A‚€ƒ–9d… eÉīũa{Y•KĀä aNh,´˛‚@F, °#–.YYe¨Wü•gh-ôŌ$ū90„ĸ¨UDĘąČhrœüOÉņ3Yä6yi ╘¨!jĢĒ÷¯˙Áũ~úˆŗ`B""-ÂĒŋ˙¯ß2*ŦSūEæBų!#ĸāxĖ _]xNŋũ˙ũ˙ ÷§ŽĶũ”€ˇtŋŽŋ×˙ßŋĶ ūםūtf¸`Ž`HløK¯˙ũŋ˙Â˙‘DGFŠÍ´Čú!´9^QQ{Q÷Ø,/×˙]õü&a))EÁ‚8ˆ\)´]G؍ū‡Š‡ ÷˙ũ˙ûÔë›3B訁a!’ƒÉlOĸvKŽą˙õú˙×2ŒeŌfļ\ ÃXžH;ˆäg„ū–<Š?˙˙īŋõ €fĮ2;"ÁœĢgjĖJ{ú˙×Â˙˙û1äp3Î#G"+Õ]ēIđ˙úŨ”čÆ``„DŽáჀ[r>GD4f"ũ˙ßĩAžDuŋdtˆÂA˜`ˆÖũoãũøˆˆˆˆˆˆˆ4 W)ČŽXĄeE„4„–ģ_ō-ŋ f CAË"ĖęɁ˜°2ŒYA‹ô˙ëMOäõ#ō;^9ܹʄ™C”æąĘ‚ čk"ŽJ ‚܃aĘĒ•–Rbاū˙__ȐũĮúkēĻ""""""Ė’ĪĀ„LáĄ˙ûų?ųĪ˙ûŖĒ4Čã.‰æoëH>—K˙ú_˙æ'û˙ģÔŦÅŅs#†r8džŠ˙ß˙û_īøßũ˙™(29ˆˆŌˇcÕß˙˙ūūš"0ˆāf ˑŸÉvaúĩŽī˙ú˙¯˙Ķė˜Ižˆėž™)Á´Ž‰Đˆ‡ū›ũ˙Ũúšōá•˙ųYG@ %Ã$ ĸčú#ŗŽĀŒ¨b7˙Qw˙øgTmÄ5hčŽ9Žâ/žėŦDr6ˆāfG {%ŅžF؈ˆM˙š˙Ģ눈ˆŽEGį`š„s#™p3ã1ÁTÚ6ŠŅ•ˆV×ŌDĸī¯üiĻ}Ī‚Øi‘Ų´mDtxÎËz!ˆŊŊãöëoīūĶâ""@đ,ķa1ĪåĖ–ĘɋģęŋúíUr]PfŅtGG28†Š!BĐãī¯M˙ˆˆÛŽ!Î98(r1Ė9œ§ ĮžÉAx"""""@Ė Į-Ę0\’ĩūũ˙â""""""$2Xäc”å9.!–å# xkČWüŨÉÁCšČė‘ár ãËāČ9Ae%•˜´˛•Č 6Pį§;”Ąõ˙˙z‚„"¯äj  H}™×˙Ė‹FxdxŽˆāx(īŊk˙0p˂¤W×˙ūȆ`ķ-Wßë˙ūÄī˙;äb#戎ĸû˙ŋ„ģÔÖkézZyE8R8‚Á0Ąûé:v™ÄNˆá›Á‘ãGĀû´Éfc#ĸâ‘Ņ ÁšÄaožb˛Âc!¨8ˆˆŌČ´}‘ĀĖ3HčŽeŲ„#Û ŦĨĩņũڒfGF˜Ļ3™â8ˆ_3dš;1ˆûK˙õ;´GEō:<ŒeĀĖ7#‚ŅÄFŲÃˇĨ§šČ˙™%˜9›Fˆē_aéHܸ!G!˜9â#´|Äa„@đV˛‚І+ ļ%˜\ÖI¸J׃Cˆˆ‹B""""C G*HĨâ"$ jĘr SrPä Á˜rn[AbŦ„ÉČZ9ÜøTX)ĘNS˜AÁU˜ ĸĶ5Y1(ˆˆˆˆ‹Uujší%\ xŊtŪ˛ĶĩīK!ëŊ īŦ´ãëí?ׯĩK}÷¯K÷j¨KO„ĸ=Â]Š (ŗöŸ†\GHē\yT‹”ÚŦCĘl˛LÚ:ęIbemˆ^ZŠi$ ˆVVÃį‚7Iņi…‘×h5‡ë–ą",äŸÄŗĀ*’ÉžSd€Ë ŋŪ˙ōā¤ũĸ:ōĘüz¯˙}|‰í˙×ū˙^˙ëŧ2īúÄ?DuōBø÷Žõũ}û×õųk–_ßŋ˙˙ō×U˙ÆÁI@¤TEŨ…[öü-}SUžZâaS¯×ZŠ U}ZĒáĒląČŨ4ÖĐŅx´4,*ŋi¨M+{a0Ą¯Et1ŋÁÉBōŌV,”XŽ:L›˜Â„Ä—3dœ0š´D‘šô×9+h,!e(ęM’č3-Ĩƒ G—Ė/Uė›*l0‚°@“ ú  ØnɰØ`Ęq!„’-.‚L‹pHFk3v…‘ŅFÕY#Ū …l æÂŨ°Á{"mˆüA†Î%\*AĒKÁ‚":#­ĒaÂP¤užZT °BqQ‘T{öÉhX šL¨ ô)ĨSÂö”Pt@ׯ;ę,ēB L!Ū“nØXģœĢz\Q‡ĒIēŠ6Š[˜p@ƒ%&|dsŠIÜad!™-3ēj4ˆˇ›iņ× ŋ„ Ė•‚7kAô$=ȕÁôaø`™Į;ųŠ!0Ą=Ķaü ‡a28R8% ‡úM4ęÔH­ŋÅ$„hY}~”&šyš;V—“ĩä @„ąÄㄠ˙Ōx@É#;%†™‹•ũqÄqOũ&d( HC ŋÜ ™ČāÖGIú،ø4&˜' ĄāáZŋâ"8A|´°a™§m&vJĘ!@ļ$ČÎ^•Áæžü&*ĄĄJ úUAˇ÷!ļ;#é}9 gS";JŸŌ‘1IÜâ}.#g–‘āfIÕkõ‚`ĸ(ĩW {~ūĩKü,'ۊVÄÃ˙ë"*˙žPVˆčFĢÂSPJ„¯ö4˜ƒĖ<í!FˆÆo$āc…IËĐe”×ú‰´vFia— Ëd ?ųœĮšū”ŒÂ ¸(#‚Ø2:0ˆä‡ū4ĩãęˆ7!…d1ēžvMKéĢ G´"$2œr!h] ˛=’_ĶūŽÔEÃ)‰ €'¤Đ6@˛ÅI˜ äĶŗģOķąŠŪũMÁLæf‘ÛÄļąÁ4Ŋĩũ=2 Ėd|"äĮ<3"8-‚ŅtGŒâ:;TmŌę—ļŋôMÃd|ŽČäGČņ‘Ņā0GöG/—"ā†28Á0E:#Ŗ™Ār9”„E"gˆũuKëßúödV‹ŖPËÄt\!vUP\DDNŒkôŋ­ÖŊ縈ˆˆ4AĖ9rö0™rÅ˙iĖ‘R˙˙𨊏×˙ä ăXį‚đĢ(rö\™°?†ū—˙K#b|ÎYLZÍĻëŲ*Ž9 šË6YícôŋúØOēũ ŋ_ M˙ŋë ę÷ŌÂtŸZũ~Ąž˙Ō@ˇŋĨ¯ôēZ_’œGČášf}gžëų Â!5×Âé˙Iíjļ]͌Žˆų´GČᐠ^­Ü~Ÿø´}ø­}iHėÁ‘ŅC`æ`„DDDDHd@į#éi¯ģ˙IöˇKzd|Ž!8‚är0dŒÍ‹ūŪ˙ũÎ֙#‚åĀЋĆlŪfÍa¯ō;ø_ß|+û"¨ŽfäĄÃ#„<q"‘+ ä pė!Ĩ˙Bĩ^˛ŋėˆˆˆˆˆČ' č$†…–˜¨ĀŋŋĶ˙Ŋ­S˛#0Œ „3h¸ƒ„v 1xUũo°•_rČ菑ãĢ#˛9f ĄDo/ŲËŗ„t]ŅŅ a° ¸Čā`Ž3 ŽŒ"äaĻLá¯˙k§˙īŦȑs#ĸ8g#ŒŽĐÖ4G'ž„‘ˆ´/×_č+__xˆˆˆˆ‰@Ķ‚œã•…9Į/3a!ÅČj“-ZÚ˙ú¯öļ—û hXPåPŦ5GÎg>‘ MWôŋí\/ôh]õë Č Ú“•ĄcĖ9Į3˜r9,;”9pl(å+(™JČh’•ū˙¯˙æp_øûĨûË ‚xBÂq¯úĨ˙ü˙nĢ˙Íö˙æŌŋũ˙÷ëYF›GėŽˆã8Œ%]­˙&˙15ūŋ˙Žį4Eą˙Ļŋđ÷_×˙ū˙:GŅ#™—'à pždT>CGK˙ĩŨ˙Ų)Ypr>G0i.d„\aü0žŠæ¯â$9{˙^šØPÍįC莋 7#ĸ>`dÄ^šáø×~5ũ-r‘Ŗ†o.`PGäs.FŦGT@Œ—b!°Wų QČKãõk˙°ˆ€Î"āhDxūS™+2S‹GÛ Šr‡(pAÆGЈˆ‰ TĄĘY'ąÂŠ5˙†EŅ Đ8ĶAĘÕiŸ‹ĸ8!#™p¤p†ĀÁ ‘ÁXĀĐHņđT#ÅãÂ"Œ™1 ˙û؅ü\%õ•ųF” gâ’&"­‰„E§q~¯ũÃüÚoÄDDHÑ++Sš9C”įŠå9C”ÁŌûMūŋ˙J/âA¸ápD}@Џ J&l ‰% XŋU˙ī˙rh~"Öqōpa„ Žh&0¸'įrXXį‚Ļ\ႆš]ΉÔ˙˙˙{QūA™÷ô,ˆšņÚĢõí?­ß×Ģ˙ ČŪ?˙÷öv„GKH °WôŋËr CöÚ˙ŋÂČ6ŽPė.ĘzN?DāË÷˙Žš˛>”öhŦø-ŠGÍE4œãôŋΠĨĨ˙keȎ‹ŗf˲4ĮÚ†„*ŧ ŋ˛ ÷üČ +ĀĖ3N"9XkŌE‘đ@ŋH~ũĒĸrCÄ†@ãÎ$YQe¤Á›j˙!˜ā Į ¸âÆ=-`æņh†y˜ÉҰ[280_#Ŗ#æqVdą’˜Diëū!(āŅC”? yŲ.]"æ"""C 2ŧĐTˆ&×˙÷Äãįz„WG„xdp4 åÄ63R)ņŸŪŋ}ĄađAmsLŽĖ28C(§ RŽ%´#žũ˙ŽÁ‚—Ą! r""@Ė #‚ ƒ˜Xä3ÁPqĘØ8­ī˙fėD˜fCŽC‘šÎfSz""2zšk÷˙˙DIB …ääČqÎ9å9Į8愌r܃Lærˆ<–Pˆė‚—ΠĮęŋëũlHQÄĄÄGËâ“9—9Ģ˙˛a‘Ņ€B:6æ2ūøˆ _“dG2 7„ūĶ5"菛 €h×ÉV]Ņ.Œ:.<7/™'†ō6á‘Ã$4ũ#ČqČqÄDDDqĮų’€XŦĢ>,˜EôA&9Į0ėā-č˜~šØf°1ņaÍdkĨŖË š<(ücߐ<˙ō„ĮČ?‚>'Į˙˛‡Į˙Č}Į_˙ėáGëņ˙ũ˙îęŋžĩÛō…ĮŽTįĶôũzM[W×ėŠJĢžŸų&ĩÕ=ôCŋū›õŌũ۟ũ/ׯä?¯ØÕoūŋęžûũõá}{_Ž2ĀßU-€ˆd =k mj‚)‚ÄMÉQåßâW”æG¸g#ŠG €7<(õJ˛Ų3ĖšŅÄGG\Ž‹™ CxßYįyĀÚ>eŲ6Čāh §ĸų„eįúז`R-ˆē#‡# 4ÃA›Ds.(DčŒ1m˙¯!ˆČėē0„]‘Æc6ˆˆˆˆ‹˙JäØW+ĢŽĮFŧՓ掋Š\ ē#ƒQ—F„Fd|öc!˛ļb"#úõų_Xް7#ŒŽÚōš§!ܧ"ŽHsģLŒW˜D0ØGhnGČæGDv]eˇūš ļ #œrĮ#¨! ÂXP‘čUš ŗŽqÎ9C–9Ŧ§8äQĘö\ČQĘĐ´åŋ&mŸ2ū¤ĀÐ˛$&„DDDDDDDDDDķ*ú˛1˛Eeņ{˛Û‚jŋĮøLŸú˙˙˙ •Cũ˙ũ'×Oõ˙]+ ũ˙ūîąŅn¯{ԕesõĨŨī¯ũ˙–˙ŋ˙ęĒą˙˙ĩũĒĘâˇ_ߊEķčŧG \2C[ޤ#¯˙ęķ#Q—ÍæĀÔú…˙˙ŅnjˆųėŽˆáÂdpåĀĖHāŌ_. %ō8S<ËS< õŌŽ—Ŋ~Č4K h#Æ3ˆČÔÄDDxũkŨkėČžqEŽŽ3`f Dq‘Ásƒ6ˆälÎÔ1¯] kû hŅpC.Št]jލĀB!ˆôGâ:# sZɔ§˙Ōû2:6ˆėÆGFōņŒĀÂÃa—Œ–Uc¯˙!ī™ÅĀ– ¤pn\dqHø†ī˙Q ļÜąĪA PįÃAc‘‰…ēŗne”–ēN˙˙ČdĄC”įA>93ŽqĪ%’÷˙ūŋīÖHÁ)+ÍžB">˙_˙\áí•÷˙û˙ʧĮék™ ~—ũØėâõŋ˙ĢßčŽ+čk¯ŋ˙ūKëũīëU_˙ë_äĒõõąūũėēÜūŋ_÷ôÔk2QÚ܁ä?ūũ}§˙ūž?Dø˙ī˙´„Gŧ\0G lũ,%˙ũgxŽ#Čē…qēXDGëú}öKCp3r8fâ8ÍåĖŽˆā܏ŸĖŅtvjÎõ4@ņô´›˙˙)Õ"$2TŽ Š9c”įrĨäĘK‘/cúĐOŋĻNŗ"¸ē#˛>G0m#ĸ<]ĘR aˆ°„DDjŸ_­ǃ/—Ė2<\ČčÂ#ĸų‚åŽFTVÜã•ÅMĘĢ%AÎåŌ#ĸ:#ĸ:<ˆųCĒ\ ÃP˛čÚ.ČčŧdėDE„5_īéigkhē.ąųB80Œe$RŒhDDk˙ūЉ⠆XåŽ""@Đ6Ķ“ōc”9qĖäZ‹‚Į9Ë\Ÿ˙˙Öĸ"$2C)Č;œr‡,r‡;œ,žøąB ŽŽ"" ûŨû܎ ™âWQÉqŧĄBs"Ž*´B+Ö_˙˙ũ„0ƒB""4ž‚ Ŋ~ˇ×ëøMÁ}' ÷˙ßûúK¯Â×Ęã?ō¤÷Kū“‰ū’¯ų+ dģ__ĶkøK˙ųGūũ6é*ūFÁc˙˙JÎĖ/č*_ū†TČe$^˙¨˙A}Jõ‚~`˙ũ~¤1o+˜ ëäl8_Č0Ã.Á÷Ú×ú"<>°ž/á咀õ^R…%QÁHᐠ?ôáđģa|"%Ōü:…´ČY›EŅ@ŌīĒÛ×bč-?°DEX2į‡Ēr‡(q ˇŽAđĄĖ(W īOũo…ÚŪĐZŊ’œÂ.ŒŅtGEŅ|Žˆč؅Ņ#™Ú.)¤GËåFGeâ3FķČë›2RÄDFŋôˇõ2=vjFĀĖHčĀ7!ôT‚ˆˆˆˆˆŋ˙ū­ãj’’ĖŠÚ#†Š!Ėē&2>r+Lųŗ2=@O˙˙{D ¸ˆˆˆ< Į!–JLŌVpu< D#÷ūūBÛ;ŧ›ËėŽÃ/ÁL¸9d|Ž™ ‰_,\ ĐO˙ÔDDDDHC”ä2ܧ8å ßxL(˓6üĩ9įä°…Ō ŋūän@đڂĻW$&Ŋk%!? ¸ü.=Ļ‚ú˙‚!Œņ™™pĖič‹ׅkŅ?­/ūíÅŠŽ?hõč'ž2Iëũí˙°ŊëąXaz ¯N‚^dĨû߆ Ōßacéôš d īŊõh/Į~ų(ú\$@đƒū÷ÔŽ6ēÔÉjë"AItØZ°žŗ%ē#āˆfIņŪÛ鍇+¤đ—^ ]‚JĒ/ė„jGŅŗ5™Ī D8į‚(ōáHāļöĮH(Kp—žš[ޘ‘y8ˆˆˆˆˆˆˆ÷Û´‚"E>+_‹Üph땐ĀĐ‹äpØ\Rčģ8‹r>^?˜ˆPl;Đ˙oJœ-°žíŨ˜EŲą‘Ä#ƒĀĖ5Č衚â„eT3∈ˆˆ°đK\0žēĖģ7˜´{.€ÔGËĸpÎIĸ44#û˙ļ¨(]„1Dt\ČāXGÕËät]â$#ˆú#Ŗ]ÅMã•åpgĸņ|ú3D|ށœ¨EŲ)Ø(g;!ˆ´+øY }đÄA$™‘Ņt]Â8€Á#†rčú$Ų[1Ž‚’Ŝ G@Ķ#‘xŽˆčŧGčŽļGFÃD}‘ҰV<2FhDtpQÚøAx‘G†ũÄHd†&ålh†ņk•„t:ĐÁ [ĩ°Šßa8īōcd3ŽZƒŽ[dš‘Ž\-A×ëaH¯IđÂõú%&"#IzA|"1ú† |*Axë˙á&’ė0WÜq}ūû{ØJ˛)ŌėBŋÊI~Ŋ{Â×]…_đ—Ũä>ũĸ¸Ũˇ#ŠãzôyPKū?Ø!Û¯ē܅ų-Ĩ˙ßĮ°}{+Œ ’Ā˜ ė*„žÕ˙ļ˙č á8Ü Ŋ]˙ŽŌPž[ r$ŒßČ1õ|6ē ë¨H0GgŒŒ¤øAöŪzēä@4Â˙ä§ŌqMU…ČĐ4‘0h&@Ņ„ķÁ™øfŦŊëŊ?ģa^W°jĶ ˙"ŋ ÞĮY*„Đ/ xƒëŋÎÕC00ŗX5^ų­ŽČu ÄD|~õôÂĐöø4âJŅå@gCņđŧ}¤õš^f$ ÛĢBök×_ūžĘŊQ?+Nę ĩ⟝ŋôĸ Ę$#Ž\ūh>Ē“}yÂ˙Ō2p›á~‚a>Ļēėėq˙éÁŽŅ,ƒŋ„ĢĨv¯î‡úۈąũđžx¯5•ģZũlâ˙éßᆠņM|z_ô?¤ˇKū¨}UīA<¨U˙äÜIm ŋĐKî—öĄ=öšÂ}„•î—õA}zú žŖ[´í ÷A}Ę*üi}Ž@ōđIzA.´’õ<ĻŊĶÜ0\N>ļÂīIcá/pO¯„w0Q‘`xũŠÛ×Ũ/‹Ēú;°jŅ–÷<‡8˙ .đöūĄ|+īˆü0˛6ÂTÅÃ˯#a›0āž}§á‘ōˆ=ō5iÅ[ Š´ø ÎÁ†ŒYÜ˙ņĶ…5÷ö֏û—abWV6ŋę´Ež˙Ũ[ũ‘P#÷¸XA?×ȎüŽh?ŽĩĻē˙úŧú˙á* ú ×{ķĀ'K˙Ú­zë_‚ú_úđ]īë /ūũyŒ˙ęę_÷ôē÷ZW˙n˙ŋ˙{ }{o÷_˙¸K×w]*×Ķū+ũ\ė…˙ŋÕŪÂúņvŋ÷ĒÁ‚õũNčĢ_˙ĮtŋqkūũՅ¯ë˙ xŖŌëÁ‚ûí˙ßû|wŽ—ũˇWĶ˙˙ˇ˙ū@ö=ŋ˙¤?˙ī˙ɚúī˙;_˙øß˙˙úũŨH ˙Ēŋ˙ģ˙ŋú˙˙¯äC‚˙˙¨ˆ˙÷ŋ˙Ö­û˙ô@ņ¯˙˙˙˙˙ûwĮuúÕöũČ õŋ×ãë÷ÎĮU˙ŌXōˆ?˙ģ¸ëũ¯;_æZ^ˆ õĐņ˙õõČ ˙ōŨ=ëü/įeīũûéM˙ÕWc×˙û|¯Ša‹Å =¸ũũ>ôĘˆFĖŽ28ˆQˆáMĸ>G0W†G@ž—Ōįd‘ˆŒˆá”l)Ũ†|„hlˆ˙Ķōš*)Fq"s"""$2C0rclō ­¤ ^E9ÅWå¸*ÑÑōē‘Ę˙ ˙ īû÷ĨâԉK˙ôŊH°´BâB#ĸ>c>‹ävn8 ĪŖhĪ.‚hâûڅá/˙ũ´Îæp5 V>û WaWũũJÄ]‚šeĀÔÎ"87.d0`Ž Dt\úī~ÂWžĨrFAŖ†q)Œ„"C (Bš7 xig(AC“ØŠčrÂ`d4lrėŊĢDG=û÷ˆEqˆĄœ28Á¸! zƒ‘į*ĘڑS! 3čžCD|Â8DxĀČāÖaĖQp61Ãab"â:ЄøAlHe"$3`DDDDDDDDDDDDD†@mŽHrQĘŦ(aVNŗq¤RTäs%˙]x”?B"$2w0æƒuAˆ4ĪBdˆP…hC ‡ \r AcA0–…TA&ŧÁˆâ$æ5úvŧ!ė‡r NC,rrrđT‚‡8į‚Į&æķÁĮ(sŽS•Ąā¯+ ‚ļ.DFš—Z/cĄd_„ū_Zéö^å†A€Č@0@ˍeƟÃŦl+éõ˙¯¯Õ.ēũú OÂ˙ëü}+û_ z ׏ûŌÕ˙ļŊtü-iz˙˙ŌČ8ũ¯ ëĮđ•u)Åī˙__k6vũMcŊ%đ‘Ô¯Ē˙˜°ģ\$¤Ēč Ÿũ×\GãĻŊh ƒú Wĸßûũ}k„ŋ ŽëĨų < ›˙Z˙Ūēא‘@ƒŪŠ|Â~˙­¯×Ō녠›úTēĐW˙ĶĶûõ!#×Z_á"”šÚŌõ˙LĨæ#´™€Í#† är#ĸėŽČá$õTš…ī~‚ũÂBĒ„ŋ“ ŽĄˇ |?ë Wi`×KéĢ]é)RˆHԎ":ȸf! f 㐠rœä܁ãûĄúÛĐKÛfeō>GDp Ž ĒGAČ<5‘˜(™Be9F & Ŋ„'ĩÁ=ĢČéÕūtGDp<6"@ōsŽBŲÜÎVPå2Į Đ8gŅđÕ#ĸ8@ ‚ ˆTãņŧƒ¸‰â""""""""""Alŧ,rC1CšĮ'Q<7’ ‰[(rŦ˜æƒPäAČ𛚠ōƒ<„5V ?˙øø‰°ÕƒŽPĄBdČ/ âdšrœäšĮ ¸äX/ Č09ܞĖg+ĘÂār r&ķ\(B"""""""F˜˙īōŒ! råA<§=Dđĩ2xBŲK†_´úĒ„"""""B"#ˆâãū˙ī˙å‹‚ĒœF†ž—˙āõ˙ëųáĮ˙˙Áéúá/˙ūČø/Ĩ˙넾ŋ „ŋ˙øũR˙Ô.ûøÛ ~wXŸ˙ûŌ˙Į /×âŋ>õ}'¯ø¯ßJá_õ>~ŋéB+ƒÂPŋ‡ĪĢņŠ/xAB+ū/!o ƒŽ˙ xĮž‚Ԛ ŽĄ˙ČG´? ŋÕä‡ûĨ_Čqø¯ü'Oôŗ‹÷X˙H…x_úßôũ¯ ~—đŊwÖĩׅöąĨũ5Žž˙„g€ō#Œ¸R Ö9‡ž‚ü~õ~ü‚";1ōũšDtGFĀÚ "#ôˇßU~Á2á"$2Tķ0Éb8rá”\.†šŅ|ŽŽ#ŧ"ų â°ÎĎ@üsŽP˙ iYGEŌh‹3\š-ĩ f‹Šmō8Čų‹äto. ō8r4ÁF"'|eC„EøíIr]ŅR øŦ'„ܐåYĮ)ĘĘĄĘ‹ėąÎäĮ$į!’ ļCn ‹eqNNgrœđ|* Vr’‡!™ąëA/¯„xˆˆˆˆˆˆˆˆˆˆˆˆ‰ €ŌãœrœąĖå9NIėž!.¸Påw)Čd‚ČäĮ0ä†,†,úH<Š 狍Ūy—"ĐAÂŌ_ü ‡ōĢf؃ųNPBĨQ{VĄ5-ud mÁ -p÷õÂ˙ŧ.ĸ&ÖË\OûÖūˇÖļøü ŋ×õũVÂ_ë {ãī' ŋũ}í×ü0A/ũ!ž‚˙úßŌՊ~ū&đ_ímk_ū_üüwácĩm™ ę ŋŊ¯ã˙Âīß ũĩŽũ¯õ†Kã„>žū=ßņÁ—ēŋá}˙ë×üõéāˆč"‡ß˙oú˙ץû˙˙úĢ_wĮû˙^ēôv(ČņąáŦmŌā܎`Ū@ø~ī÷zŪĻĄ’Đf#åŌ”€ØˆQȃ”8ˆˆˆŠĩ_ŋĶ8ˆņqᒍ° ´\ËÅō葓ĸ_6‹ŠØãw´ÉB#ŖˆÖ<Ņ™´ČčŽčē#ÆKjėžld|Ų‘â8CÄ]‘Å#´ ĸ8B:6Šįb-ˆˆˆķģ;[V`!!GÛįĖÃ.!p:ƒ"?Oē°fsŽIČŖ09V|),“‚Fåüƒ8áũ˛a rŖ›ÉLsņ÷æ'ŗ2ˆ0įķŽPåČ&äđĄĘ‚°—Ģ&įÚB׈ˆ‹L/dG¸22Æ9MɈ‹ˆˆˆˆˆˆˆˆ}zö""wkßëÛũ:Ĩ¯í$7auĖ=˙Ŋ¯gxúû]ō‡8á˙öÄmÖ tŸûâõ˙ xn?ūŧP¤÷ŋŧ}ž&×Čߎ1ôf¤Ŧb„PåšaÁeǟ.qCÜæ…ũ…-5Qļc‚2ÍŠFYEFvY˜ŽÍFv\‚htĘ…Íá0ƒDŨË|":\›… HûTMÚ&;KÃP@„F%qĨĨ×@üÎaëÕuÖžÔGĸn˙“tē×T”ƒ8åqúōskTamb+!õTú ƒZ Eû&¸yúˆr`ĄĨ1ʰ ŪÚTīRȨ¤ Į o›ãM܍ڎö÷ō8j‰[’‡MĨx­ÉÛtˇ§¯ŒŽšę˙¯÷J@°rĄ3ĻÃŋ¯í˙!Ž8‹Ž´÷×˙IbC@ôũÖžŸéū'?÷úû¯ņ˙ęémĨĶւ éVW›^Ōchdážßa#á’ņXci„Å>ÚLR 5°š‘éqĩ!’œ† ‚ABЉ\D„Ąņ†35Fė)C„GįBZ¤î/Ŧ} H"‡í˛cņĘlb4ZŲ­Pžä‡”÷zcˆąˇ¤äĸ´ÂxU °;qķm^CXqCŲÔab “w„aûôüģoÁAŽ›Tãh"‡ĩÅȸ"<ũüRúmöGÂ.šIv?Ĩ ˛;# ŠīÁ0It˛Cä1ĮéVăK¤اĐ"=økÚI:\0ž#ŌÅę,Õ¤@Ŧs}Ąb?qD$ãIX‚#éa"ųPų AÄmq \pWˆĮÁe>’ä(pEđ‚ų AÄ[bą! pDt‘|E‚8ø˙nü$å6DB ˙ ˛:H"˛2o§ĄđDz.—ˆÎ9C÷ä5Į,|\oŠpVŦ~áŧ‚ÔSKqŋ!ĄÂ)”?Ŧ4—ō #‚.‡ĘF§ @„ƒ@āˆč!؈°Šˆ4A@厏‚; \qCeEG‹I^A sŽ÷X‰‡3‹˛>ˆ0:#ĸédĮ,Ąņ‘Öō .°@’õÄVCTvG@›(r¯ Ō8–:M!Pøˆąųˇ/!´:@ˆņXˆA0Hx L!‚8õ¤OÛZCĸ C¤PáĖ.A rCŽ1Šd|ž–ŌvPų ĄÚĻ–„D&Sä EąÂ#ëŲ5ÂņˆöGKˆ#Ëׇ,qL§ÄL9‡!°t/ŠCd ! Āį1ãB ‹ Š!˜8™Î9%ų ƒ‚Čņ A ĀîwŧČĮ*„Ī˜rcŒŧ§°Dz)$AdtĘz`„ „E ĄŠČ7D‚㤠Šc’n‚ˆĀ˙ä ŽBaĖ;#Ž…P“‚Äi˜[ $„B .’‰Į,pAāŽ=–;#†Ä›âaČqâ§\ „ã‚" ‚ū)\YY)Ŗ5!–:EPũGI8ÄZÚüƒHėŽČáĸ ˆ¤LYOË˜øĸ:Ib%6S•<!,wŗõ09Cˆ„•-ĸ7;‚#ØŊ—Dp¤xŽ˜Ôĩ‹Y$Hސ~1;厎L!ä2áÎ8„¤™NU”øDq,¸ †–<!&;#č …¤!ø–;#š(üē.Ø;#„#Äp]„8ņ!0å"Fî׈‰‡0å&H#‹Ęã°B, ?לq,~GÄÂØŠFãŽËĄä6 "qÄAŽˆč"1ÂAŦžąHJ§ˇÕhVœŒp‚Ãɲ§  wd}ĒE<)ĐĸXãlÅ#ĸ:#ÖáB!ņĐe:pD­ėĄÅ1 ‡ÉąPZnōœ§p‚%…Jââ#œp@„ ĄöĢBačD(c“`Bų Ąüã„GŌëØ”;#ĸüIŽ”L/j¤¸A2?q2:ÕEt,aŲA>–""91őĶ*ô¤2‡8åPå)T!R(Į8âBŒbõ ;AbČü¤aH(E„aÅ ^„ĘLE9 9c„§bŽ‚ Ö"qÄxŠæŦD0BČáf…Ē,$\ąŲÁr<AŊ.ƒˆ‚s:!0=uŠ ĄŌԘâ,(˙ō Į[ŧJpDt&­%ĸĮ ĐdtGøôÚņÂ8‰vGËúĨģō(âXû &Âa€ÅZ¤ŠL8‘Ž)m2ž“ļôEŧÁ B""aĐâĸC!œŲ(J§0įsģ#ĸ:#ÂO$‚sŽ1„_Kâ'ąc‚#ļG &*{D} ‚ú†G‹#ŦˇYž&ąČQĪTéōp‘cˆŒ ˜BęBß  }‘Ų#Äpá_ŋ+‡DD$XŒ9J™)^„) ˇG”9~"ęĘĐÜ'ĐH&\)S ü ārGÂI*Jž&ô+X“ąá”ãA §áIŧ~l͐.8 ƐF˜âˆø"‡ČŖũ0ZĢV(NôÁ$#KõÄ]lē %håĶđy6Yå —-†ĮÂPĒ^ĒED ņ`ŠĄĘ1eÁr:# Š}\xM.ąŠ Ŗ—_ũáÔĩ;‚Jr1Á:XZLDßQGHGėGõÖ# H]u„§d$"äŽ%S”ãFL9CĢ#˙Õ)eōčŪpB8m´Į@Š}ykâ#ätm ˛>o#Ŗa¨G p5 r:1ķ4dLä3ŽFā:Y!Æ$t>˛8–h"/‘âųp`Ž ĨÁ”ŽĀ,;0Žā…Ņ ˆ´ũ‘ō=˙;ŠK˙2.ˆÄ^1‘ŅB8g#ätmŽ‘˜ ĸ8Ëäp9#ĸ8Å.ËÄ|Ž #ˆá Ô 0 #éĐ@‡ŌHŠ< „ÚË}@æ¤pr86‘ÃhŌ#äq˜B""&Œˆ„Fĩgu_˛ r‡Q瞇ō Ņ2Į(rVW”TSžÍdܓqČŖ‘ŽXåEâāqČܔĘÃjqS‚“nZ‡õOTŪącĐ[#…”8EūHr¨g*„ė‰ĮAZŽCLrĄMՓ6!kÂûTīļ ˆøAv_‰â0ĘF„F!ÂdôĢJV× QģG Ōū”ũ):ŧ'ũ]Âe8Hã–8ƒ#¯×īø*5č'˙ė‘Žú…ëų€á:đ_Čh&‚M´CĮí$Ģ˙¤ßĨâČômøŌģŋékĢņ`ž8ŗ Úk˙ékUžŽ‹ƒ*dts. ƒ‚# ‡HĄĘN9C Ĩ×Ԋ˙˙Ĩ)ĸ05ˆá ú#É.fŒHmB „,‚ÄD+ ‚X_÷yV”ü\ CPŽ29‘ČŽdr8E!Ërœ\xũ™hŽÁRŅ´\Œ GČāj %à áHņŅ3 iP°„Dt,žÎü&¸HS™Ñâ:.Eâ8BėÂ#˛:#ĸ#™|Û.EŅ>ˆų)E|FÄ#06ˆœ2ˆ‚Wˆ‹Z~‚#¤$Į`ŧDDDDDDDDDDDDDDDDDHhäAĘr æđx: !ĸC’`S˜h/Ūēä9Į*öÎ8Ĩ1ōĀ1„QČd¨äĮ8ä1d‚Y9“ŗ–åm9  œ¨š~ŠzZ˙¤ˆü'S¤xH!ä<9!Č/3qÉšāä—*ĸŦîSÉŽSŸœęČhQ5IČhD×é{zŌøá„Ĩ¸Č˙& ‡.Í ^5×÷õ˙ û´’TqÁÅĪ~˙ûūž”ƒžg¯ÁDtâ"C.ŸŌ˙úßû‚ N˙.C8áh]”9Į;˛;SõĮ˙Ė•¯ųÄŠũú\XAH": aqG3úõųEúŌũzÕ[’H(2‡BSĄũĻBŋū“ôũ.(4Ō„ČāG¨ˆ˙˙Ōũdmœˆá ã‚.@$‚‚%9”áz!c˙ũ“ 3Ë D Į!°vxĸ8.]""5 Šņņ‚# ŠÃáũ™ŗŅüŌ7—ätGČėģ#ŒžGˆčØ5˜D6YNC5ÄDDDDDD†H(Â9 A(G{_#!dtDuũųÚŧūmä„aFŅ„]Âd|Ž‹†‘‘ōáâČÄ\0G3l r8.à ȟ$F˜‹B#ň˛‡ łeōëŌËphē=ŸË‘xŽ2čŽ!!x¸d6ÁB”ņ_fĨ‚&cH×DtGFŌ”; j c‘G!žÍ3a …/ň0)€Ė4až¯ũ]$) ¨ ‚A c A )PX˛‡ Ķä2r%<ĐS‘\§(åMši5ÉSnôēTĢëĨaEB)XirH"q BŽC”9‘Ė9r7%˛Äå+CqK§&lGú‘_¤ûŽĒČ莍ĨŽPå#Č Ŧ¤j˜!h~AÆ~ĒûûŊ* "",(ĨôûÕnGáe Ÿõ´’„Į8åHp”OŲ Ė¯0á(M˙ø"=¸%eŨäuôžžņū4Ÿ¯_JcĄH"œxú¯¯˙NŸOüb)+į{ũ^ī¯÷KÚ˙‚8 ŧēĄÂ_ž_úũ˙ÂOũ3Vé ąV:,~‘×ASwŊHúūDŒŽČ◠{`…„!vwļŋÉÂî@ĻH …@‚ąˆ4„‘á Ē˙ö˙’čŽˆã#äp%a#˛čœÍ‘ôvŗa @ˆčÂ㠂˙­˛l,ˆhŒäG!ŗgr¸Žhƒš 9Žw: ƒ9 Ž>&TĪ…9,ƒ(â""$ Āä‡<äŦÅË,P†‚e–“VY¤D{# ›Īir‡Ūaq`Žæ‚BYĮ;“ãyKčX ƒ–`3 .ÕVīâá*&HĄÅˆō Ø9’å|;“âĩ)ČdXäc”9';œrėĶ#ƒ9āˇ* ŗœąÛŲ6ãV$RöēŌč[¤!ˆ‰\š Y|_CqȃœØ™ą_?Ģ˙_ũˇpE9C–8Ķ/ûOL‘ēKø2™˙õÚü ž˙˙‘0>˙áá '*SĨfCîî—ųĪų‡īė†ĖXED-LŖ‹îī˙$€o˙C˙â"¤""č}߯ķŗPڇ÷Ũ{ČeŲN…”;U^ũÎü4ä:õ~˛ boŲCßmúÕsŊC.@Â÷­cę#hŽČá%ž“&:ūĮKüė gŌŸÂ!ĨĮvqĸ8-ƒ<ƒ„]ķDZh!„G^Ū—æCHČčūG2>`B8Ĩō8h#´‹‘ˆŽˆL—Ø‹6‹Ģh$I!\0ė%ŲFŅ>r6ŒåÄ.` ĄŽ\R8g"ŦDDqʧPˆë|0hQ\MÍĸč‘ĖŽ3ĀvĀ9tGEō€ä|ĖáHEbVÄt/—A¤Ę„bâ""""$ €Iej{)Ę6Jö˜A:Ō$‚āĮ5ĄÎ9Y‡&õrr†qČ3Ž^2°Ã•a‡?”åUĖr؉Ğ>#{QÔ"čÍriDsÁĮ<Î0éʂ›g/B‡ŸúHē.8LÂjĘÖämˆˆˆˆå ëm„*)WdtGB]{älČāxo¨Ū?tądt&ÖĨ;áÂ(Dp8Ȱ‘—čÚIëjøA낉 +dHAÁĪQ!gt¨§Č<ļ@„8Duy 0W(ũča›ų i †(V æhēūä”JpÆFZ&Ía|Žcúō‡’cÁX M*!6…âX"čŠį;( . úFŌd}'ø‘ķáĨėĢ)CU˙)P<1Ų4“!é‚ģ.ˇĨ)€ <(,Hf˛ŧē?¤ ûCĢTS `xH) )AĄáRũ)Lđ3He2) HZšĮ.H_IΠo Ũ‘Tˆ(rĻPåACâš#ĄöÂ”Ę°Û!‘d @„E…ŽáˆEŽ)“c@ԐvD°@ƒ0"éÁ• ‰ĩĢBMæ$#)¨dt%ņ*Aō: É g‚hL!0[ 4Ę̉M9ŗ˛Í‘ŌB E;#Ę^â0@’LŦ(rŦ&‚)Ōļ:ńˆØAm ŋ&™XW5AvGG–ôļ“0ā†šlu‹ ‚‚ĐD}/Đ:.‚F<Žūōč+UíxEЈHm2:8č ™PQAC XAąA š- ÁaÁ'ô'M ĩši ‰˜B,§)ʧVĘÖĨ¤4 ØDt‘A,YCĐ@Ģ夐 ë …´m$ڑ×Mû‚W,ĶB‚DAčt“JˆëPD(0a0™ŠHčlOIˆ‘ׄD ¨ @ą ` ēÂ# a!—G}•įŧ3ËPOX B* Ēmá 9œÔP IļŽ=YZôbĶ r:(Jőņu,æA°š%*ÂDC†Pá)ÜRá¨ÂHŅFĨ¸ekáâĀŦK{O‚Ž._‰(Gƒ Č8ėē.…•åcAc夠} aŽƒ.ŧ´ŧõbĄ0Dt&ōËø"č „ē4BĄÂeĐ˙,ĢéŲ—A0Uķ_ÉņX¯u ‚ëÆCBŗkĶėö..Į˜¯ähņd Ēŋ`ēô_. ¤xuãŨat"_Påuĸū˙íöo™YHū†"LĄĘ$GDtGGūJîC8ķČÂVA;˙ũÁ”9PÅâ5#¯æ×ũ„ˆ¤Šp@˜!˙đ@˜E  Œ/˙ø˛:Rü΁/ãūCŽ’4@ŠúGÅ˙˙ŽŌ.„Æ=Đ˙ŋŽÂ&,Žˆëũ~ ŲNW”8&Pá+>ŋ˙d3ęTh(„ TGDu˙ü":#åŅ} ‚M‚Kšĩä]ˆ¸¸Ã ¨æ;#¤šöŧŽ&)øÂÜ!!"‡Â^ģ…L*ô]  M ė}ŨU5XI˛§0„$_ũuXb>*#é Čëõ×ōĖķ§—X‹ CũũĨŌ[„ ˜Y„CeĖ ^ôÕRíĄ¤CŠIʆG˙_ƚöö„CJKéĻM˜­;ÂčÍd|Žˆë˙ØLäézVW#čÆC P˛ĩúK›A„4›˜Ž< ‡qxAŪh>ÉKŗ§kČ`tBBG@ ’ģúH.Ų0I…Ö.ė” ī¯dEYļWŽ-?ŒFˆč š˙OÁDm†\_‘ŅQãbmyi„I=ļ› Ai—\V0ņđ\'đBm-qÕ2ĻTÅ.Ŋm‚((0Č˅ ™×ē EöMĐH ŋ íļÃēÚītPāˆåI™ĨÚ]Ė”el2œ]úD¸¨j,¨ą‘Ņxæs´¸Š¤hƒ!Ą˜SzĢ#ĸ<](ļG@’p‚ˆú„ö r#¤á’ŅÜÃÚYb"q –$#˙š‚iiÅÅÆĸ:‚'GdëË)tRĮVŨPNūīSX0ŌDuĖ>Ž!ņ5˙M´ˇ~ŠŠÍ E8ˆė ĩMÖˇŌ3Ųđ1ũ=ŨĒĮņĄ#ŗ™āΚDtaxZiOáĘ؃īZn ˆ"˛ ÉX„cqȃ”8‚ Đ˙Fŗ´ōnSŖ]DŠP‹˛Ŋ"‡IfĻWD]˜ü- ęō‘Õ –âĸą(Ž‹ĄĖ ‚˜!,€¤RĖÖ†ąLL&RÚ@ŅHÉjÚnúL&˜@‡!ˆŲaK¯+™ˆ`ƒL"C%B‚V„2 冎oøM0DŒƒˆD|č’H"‡> „đ˜  &ĐL(Š'~™¯L @Ê.‹Ŗh[PÁ^ „ÍABa0˜5J“îē„™PÂr ŽŽ’Â}4Õ¤ÕwĨh>ŊéŠÚ˜Ķ Èķ4O„—ÕzĶM>b-õ¯„đ‚nÄL Ęđ­'Jēķ8Tv1îļd8ÕRÕ <ŅiFŅuųÚŽJM2\iB]Uh{uĢúz Ú#â#é/™ å,Ô¨ŠŒŠ„"Ah ø^´ú‘0Ąģt­:ĒMá šÄ] •GÎÂgnt „Âj˜ -A7l{ ĶęÂDÚÂba}„ „ĶN“ūē÷Qĩà Ĩ!4CÉķč )0‚ŠYt.]鮚iŽuU¯IŒÃž™Ō;„o7—°jˆb"aR~w­IĻŌĒĻŌÂÚę¯ĨÃe!ŠŨz‘hŽÖ\莉 …#čúĒIĻĢK\(TÂ{Ĩ*ĻG aÁËätG „p6‚Šdt]ŸŅ’vá&aB;‰uúĒŌĒ­úUĻHG292ã.“& Ž3q.ĖjjEÃ8B""""$ qĖ9‡!G>ԍŗ‹*ņ!čÚH °‘…Č6Ų8)ĘĄĘ ŠžČ:Î"8R8#ĸ8TŽ2GBŽfļLa+! M†[!œa †}L6C:˛kĒ˙Ũ_Ũoëūkā%ŗ wAztŸžũu˙īũ-} #äb¸dĐM÷Ģ]UW˙ú˙ÂũáÍeIE[# @ŗ*‚õláØZZęĒÂ˙ßūģ$Ä&=)āū5Ō‘ņÂĩcô÷%Ž(Uw_ŋũpKA4ˇ6ą˙éúĄj!‘Ņšô­V¸]BAL8UĖāŊ×õųŠÖšũ˙ũ.Â: 0åek˙ L8.aÁs8) ÅQëW×ęÂi}˙ũĨĐHL#ɕ†ü…;zĄŦ|q˙{ß˙zũ__O"Hâ4Â#†r8 $p<lˆA_kīĻŋ˙˙õõīôŠx÷™Á‚8{ķ”`  °`S ˛:#Š]Ta”giÚ¤' Q‚(pĸ:õŧëOß˙ŋÖĶ[&3„Ĩf Ž Ė"āj $|ŽĖ",!€†Ņ ‘â8.RĖ“„DDF‡bËŖhDZ/™Um읅ũ§fŧÃ#™ ˆr8j2^LhŒ9n]”å]šÍfã&<ŒrPP™eF),´‹ x6˜DDeV¤3jũmĨUíV°‹ĻV…zĄĒ\Fĸb lXC]ūČjú˙z…˙˙č2>B!‚˙[˙˙ū…˙ˆĩú!üÔü ļ"yv—˙īŨ× P)ũû9˙íũÂ5#hzAcßū÷ n˙ĨŲĄĘIߛj˙˙˙ÂČÚõ˙¯ūEP`3 "ÃâB'ūB¯õũ]$Џ Ģ¯ūĒYŽÔ7yāxŸ˙ŨūúÁņ1™ŽŌ˙ûŋî"ķ"đŸˇ˙ũöyG‘¤GDvmŖfG@ąEđ8ú_¯˙úų@<ĩÛŌũķŊxށ8ˆˆˆˆˆˆŽDt] øAHqÎ98*Č7Âcŗ¸.GA?Lē#ˆl2¸ˆß2ĮßyKE՝Ī<“L‹#¤p[ r84ÃPâ#Ŗčö{%&Ū#øJ""""#˛@e!ՙátËæąųäs#¨0m˛C<G3–äÜøS“&^ËAD ˆˆŽŸá-ûA‘ķ!F@ˈ\ÎeŲDG@`Ž‹æqŅs0g ¸i2:#„#ÄpĐGËÄt`gŲR8R8fō;#äm‰T"""5_[ÂlēäČhĄĘ<ĪŗVc:¨ˆˆˆˆˆˆˆ‰ Û„‚,ʇ&‚…ČĖjͲለˆ˙˙ļĘ$ÄDDDD 3_•ĄNAÉg$äĮ<r‡.QÎå{4ĩ ĖTˆÂÃ%ūŋ˙ž bÎä2A¨sC KIŒ x6k„rœūV֐ˆˆˆˆ‰’@R­† ˙ū—Ą—D rs%,%XdqĘé˛öBŅû_øū2 ¯Ē`sŽSĘsL§(åjq΀Y\X+!ö/û˛Ŧ¤ūXŒk x]•1ޤx`ąŊõŌ:úūG NWJķąÅëęúėŽ„ē˙eIK–æˇõ¤–ø‘ŅŠ=~ŖãëŋkB&ÕüD_ũ¤EŅtb!æ#ĸ9" ä4C4|3PDta뭙-d|ØĐk¨"8į™C‘G$8ˆˆˆˆˆˆēRīûÎé0‚ƒ.ˆáāmg đĻŲ´GGäG ŖžĐ"<] ™J?Ų]ķy&o#åãtGDto<ĀÎGs°¸9vG mÔ"""", „!Î/Ė“ĸ dpW#ĸá‚8¸42>G ]˜DpĖ.ĀÍ0)yÄf ":6Íĸ:#ƒs4GD|Ī5ĸTl VPŠwĨ (!`ŋĒâŲĮ)ÂPåWá˜F¤莆Ė-kĒHXA}”åD|w„)ĩcū˜—Vģü":5ĄqĐ˙ňŽĩT@‘ĩâm ">B,wÄMĸū°ˆé!üGáīDQÖ´]īAHĒūH‡ã.Št>â&?Jŋ.—Rf¯ŖEâŨ‚īļ9…ö":Á…ôGBao CŦ#w†Ę8ŠØ—E&;RPB&׌2:ëė‰!øD|O/Œ~Ë˙b?âûžˆëûëá‰ĩđˆč|Ôą"Ë22Xät8ô‘PŒŅõņŠDtGĮ菒jßėŽ„&‘_ŒĄĶA~‚0…ņĸ:ûIGaekã#Ą/ÂH˜Dt?v"GDtG^ŽQąÅüB_e/‡a äté| ĸÃKņ „Ų Ŋ°ČˆôGHĄĒēĖ"a$G^œb">´D—Ģ }:%+ÕãĮĶCôˆœū‘jF—Ō{} ¨]‘Ņuęņ4žCŋáŅ„>“ūÁ×ôô~…˙×úúcôŋAûduõü$žŋëáÂ#¯KĶc k˙„$uúĮ×ÃõÂPD|Žž”$†$ ŅĩôGCúа‚K!GÅĩũA9™‘âāÁˆŽ‹įŅV‰8ŽV?­eļ°ä|D|—3„vG‘ŅChŧmC€fđD|ŽŋVPüĩIĮ`ˆöGDtldt\ luņōŌFhž\9ˆų.˙t\ hŽŗ4WŅ–ānˆųuÆžW3Čņ‘ČöGäph#™†GØe‘à !5ˆāmFķēŅ[b>Ø(˜\DDDDDDDDDD‚Ø-V| ŖŠ,sęHLĩÖ?ˆō”ä2‡,r ã”9 ds+ ãaøˆ9 ĄÉA ã$ã—2‡6ĀË\T!Ēū‰ 9XA* ‚ŽO ((ۉ›÷ūĩ‡Q@„F¨kũūČ莇+š}%Ã˙˙ą"Ë_^˙˙ėŽ‡÷K ˙˙´°ŋūvBĘ᎞ą˙ø÷ī\Wų(õčÂUčũķ!OĘæŸô˙UEŋŲ)_~ĢŋKĨđ¯Ķ×õĻ2:ū¤HŅ×˙˙íGôĄ}×ūŋfB¨‘ō:#ĸáÎ"ō!ĨYNCŽV›ũ*ôžŋėėUķ™ AšAĨ¯ÛŋūvX‹ÆōāJä|ē/—EŲ‹ĸ’ĐnG͈Ãũ MU3-#ĸ;#…0jlˁ i‘ÁhÂ9™͈ˆˆš8Dí/-ĘQ2Ôš”DîC-Í[8åaĘrŧĢ8ąõ3™Î9Į+Šr‡!ܯ(sÁDDDDDHdlŦęEī -s/ņēÄCB¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ[ x$97*įĄĘsŒ.gsŽUD… *ßūū"Al‡(sšÃHrNU”9œîB9r†häG(sYĶ”9H,!E¤Å‹’ØB"""-W¯ŋ jX7Ü\Ûâŋ\ 4×ūõü":ü%×õ¯˙ßņzéŋ˙ú˙Ņü%˙ûŋûúô?ß÷úĒ˙ûđõ×˙}Ŋ˙_ûũqũtŋ÷ōĢü"˙胏˙oõ˙ũ|I˙ũŊ˙¯īŋĐ^w­˙ú˙uôąú×ČÚß˙č‰&ēŋKûū‡˙ūĶOõëūŸõôōē‘vgšdq QÆG äq—‹†@WéK÷ũ•^BU”9 ŽCˆ7šgŌf"8#™tGËÅķČģ.!"ām \g`ãžb$Ä""""#é×éüDDDDDDDDDDDH-…r‡(å9U”L§ åe+-! ¯ęßDäÃhr§&åĐĢ'C¨;˜‚œ¤‚†É„>‡Â¸ Ęs]•øĄÎ Ģ>՗¸, ŌJp¯ī ŸũĮ+k& B öX\°Ŋ—B"#BЈˆˆˆˆˆ×ŠĄ*"Ŋ}tģũ":qēáŋ˙ø đũ‘PĪúũ'ũ˙ééo˙Kĩ“×öūŋũ~á^~úIk@ņ¯Ō˙új’ūŧ%ü@ƒä(ëúOũ<…˙ ú vv!āˆP0øĸ:ũS˙}˙t—Ôލé-gu"¨åtëû˙ņũh-d*ļē P=ŋž‘Ëī×ūdŠoKáBøAS¨ @ĮŽąū‡ûČÚRšqųBŊo‰uâŊP ˙ū–ßųHxP…vž“Ž‚íAŸũoūtDz[acč/mœ” ˙¯}úD[…ĐN ãĨbŋ…Ļ™82:#åō>eĖŽˆä`Rã.Ė":.9 ƒˆáeq%ũm˙i:étÖÁz ō6ˆé s?š">G"8B:#Ŗ`äs.dp6]ãŋĨŌ ]Ôq˛R ĀĐŽ \šaŒō/ō9FOæVŲÃA´w3‡˙Ģ˙h%ôķQ—GâI—\2á‰ÃQʂˑ&I˙ ŠK¤B""Įđ‚…÷}ũ ČņqM™ČčÂ6DxŧGėöGeŌ ē ‘Āō#ŠG‹‚‚>GP!ĘÂc”9øĄČ#œrŦ§+ Úso .šĮûĩoÄDDDDDDDDDDDDDDD†@,Ž[+†ÁÉ9C—¨0æÕĄBlŪS•‘A8øWöAß×Č‚Ŗ”9C•¨š˜¤đk+š‘á`åËrŦîq͆rŧĄĘsáVqĘ ĸS„!ŗvYrÎG"Ĩ‚@‡ļ{ úá~îL‚>'CPã‘&y•æß\mˆB"2b„DDDDDDD~d… vØ/ī / ŊmbЈųŲü-xDQûĒ#ĘėV:ū?‘×īĐZÁY ;ÛK -ÂZ{ ߯ã˙ė+vž)Ø_ \H˙˙˙úôĒċÂö”}-qũîūžūŊvÂđ`ģŌ_˙ęú#¯Ũ˙ĩÁ‚ĮĮú^˙SĄUŋíŪŋã˙Z zĘäĨø!õß˙ׯûūŧŽĻᲲŋvô‰uZŋų‘"#­izÂŽĩö*W,^Ãē˙üÉH;ëúúŨôûzA}ÁvÂ"Ŋũo_đ­íÚA}˙׊ļBŋ´ßMIR.ŽŒAÁ "9 ũŊ$öAq˙úĢY‘BĶÎɈá–GāĐG@kūŪ]„ëūģ…įr#‘‚#˛8‚‘ŅHd|ú1Ņ 0žÃ vŋõ2ÂeFlÉŅČųÁČųŅ dŽ)B/Dčâ%Ą°îqI ĶB"%iߨb!.ÜĒ?5#R2Ę™r#°ČÆghÖd 8ˆˆ}BÎëōéûaYôf˛:#™Œā…Ų"8ČáČėŽĐĘ#rhF‚#… ¸īčÂô*ÜDDDDDDDD°‡>Y7+ ĄĘr—"’7…ˆY⏠ļšúIvߐŌ†H>9V`2pqĘ,,A‰‹p3nЈˆBA`ē}; ö‚¯û, žÅČgؘ‡ˆ‹‹åpap_‹.‚ÃWxa*č":˙h­pē"kIÎéÚzJ>CY#MwŪ‚uát<-ņé_Bã¯Ģũ%{ŽÃZXü%ũ/A÷ũĨ§×…°]Iük~/ÕtąŌ é˙÷˙;KŽē tUnú‚#Ũ?ãÛ˙Kęd.&ÖŋĶUŽū´ēôé -„EûM}ūKŖē‹úč/A$+l Ÿúa~ī?=˙KÔ%ą ī #ĩ õ­>_kÂ[a!Âl˛šH4éƒ7´ÛĶÚ]kl%ąJzĸœSĸ Dî hĶ_^—ëŠá `ĒũũI~ö—5†c 7š\-wīļ7ūvPDä1ąøacƒļJ&[ĄÉˆČ¤'aúįb@Ō ÛCÔo †ÂČĐBē¨'FBĀ¯ęŖy˅ŽR&Âø]":éëĶí8D\…đŊŋņ+ø“×kI××ĸ:]˙žÂákzę>ēĩ„BE<-%û_.ģÚ¨Z ë¯ü6ĶŌĩĨĐJēŽmi d÷^ũ-y˜ëõ­„Ŗ¤ˇÚA/ §„i.UúU¨DGtąnöGjĸđ‚ŋ¸VˇA;[GÖļ(đ—Õ„*ĐM°ŧ[á¤E‡ŌKÛWĄ‚Â(y*{?aaE@f>Žå#Jû 7â:CzQA{ŒUuü'nžWí ūR°cËĨĨ2Đ3|¤uŪŅĄxū›xßŪ— ûß˙„ļēWs$ņ˜Û˙ė% ŪŊ}¤GZđIžÎė\Âņī~?ãßá'ũ˙kđW¯ūÂzs..÷˙uĶZ˙˙’¤ūž˙­Û¯ÖdTĩ˙Ã0ĘõĮ˙{é_°ˆëŽ—÷ëŽŊ/˙ę¯ŋ˙ėū×˙ŧ":i˙ŋ˙Ã_úøëī˙ׯŋ˙ŧ5¯0ŋøDtŌŪü_˙]_×ūš^W˙øÂ˙Õ/_øt¯ŋ_øT’{˙ûĸę“k˙ú…ų˙Ĩ ˙O˙í×ÎĢĄ÷Ü~ôģ˙¯EÕŧ_õúûv¯īü5oũûmûwú“ {{õ˙đˆęŪ-Ūž>;ÃU˙Ũņ˙îˆęŪû˙Ķ˙ā­īûÔ=é~ŋ~˙{ĸ:˙úÖ;˙ûī˙ũ˙×úß[˙ú˙ŋū[˜]duŊ˙¸ë˙ũ_˙ûú}ūÖ˙õĒ#Ē˙ũã˙˙ú˙ŊoũũĘčUũßņëz­Ãūŋ˙úëíõ^úūū÷˙˙¯ ˙÷ß˙ßĸ:˙ú]u˙ßą_ßīĸ:ūŊ˙_~ˆëYn6ŋëoãårŋīR:¯ëõĐ˙Ķ+Œ]‘Öũ?Ũ?}~ŠÎŌ{ˇ˙õĶī˙˙Ö¤ũū˙{§úũ|îģŌ×û˙ßŨ}įiHœČá?ī˙Š3˛h†Ņp5~—ũ^§eˆŽŒ28ČāmeÑÃT¸„tGĸ8†ÆTČīœ# ūžd]ōë0Čų6ČųĀ5 ČâĸčԎ€ƒģ1… ĮõäPŠäŲYF2:˛9ždvG3™p5ŽŒ#ŗ <ÄDUū‹¯ųnĄâ:0f°n_.˛8B80Ghi‘Å/—E Õ x9Cƒ ‘ōųÃaŽ#‚Ā–ų3˛Æ"}Ē ĶũüDDDDDH-ƒ;AČ>s99=N9C°n(sA!ȃ rcœrcĘ˜äāķ(rø Čl3&\–;Ĩk֟ČH2ÁČĮ'ræS”9:%2ɂZč_ę‚Ĩūŧ˛äpA‹ãĐNž˙J¯Ŧ Dá8zN˙Đ_’ĩõŌaŌč.ׯÕT˙č ŪŌUûÎÖŌZpˆXũ&Éë ×ŋāôÔ Aŋõ¤ØAĮ¤ĒŋĻf%Ũ'ŋúūvj=§ IV‚˙ũ6˜H>•Wõ\-i_˙VŨ ú˙éîŽ˙˙ŅŸIWú鄩RKúô\î¨$úA*˙VÛ(N’ęd|ŪaŽƒI/‘ÁBˆnԋt›ôŋõXÎÆ‘„{3eŅ9‘ĖŽˆā¨\2äB$08ˆˆŠB6ŋZ Ũa~ĒEŗŽˆė¸*PhdŽw"AđÜrsACš rcžÎ9S:Á{˙­Kė%^œ3ČĐBŽDˇ&9G!Č-ȇ2øl%˛ 4–}_úUÕäĮ,rüãÅĘr<* ‚äAž \¨ąéĩū´'ÁI†ˆd›‰˙ūŸŽ˙OŽŨ˙ũĒīŠę˙K˙ú;;ū ˙׎˙ü‰Pßæ€__k9au˙ī Aáé{á­a˙øNgž˙ũũ­xa"ēą?úĶÄ'˙ëQuk˙øO]đ˙Ō¤û˙×_˙Ō‘%ū‚˜pA>ŋôû_í<-”š׊÷ūŊû˜D菑ō8dzĶH‰}ë×^ÎÕQ|Ø ËâœDDFŸÔ4Âõ˙ŋO;´_#˛ø!Ŧ9ä ËeîøūA˙öš!’ Ŗ˜sųܧ:BˇYNHåoBŌ%?Duúkīīģ)ķyüō8¸A4 Ŗq1œÉQ’ėDDDCCî÷õĢĻV՟Pˁ´#‡0e8e64""˙ú÷s ͐]XvČā Ę™°į-OŠȈ‰0͂‡!Į,s9 sLđS•fØ!6jŠë˙čDDDDDDDDHd´CJ 9 ß&å†uøŧ/a– XD""#õŋ˙ŋŲpLr‡)Î9nQ3u/ šÎn=eq+ *B@„DHn„hw WŽĩ˙ūˆˆˆd ڄ"" ˁ˙ņUúßķ"Õ­wKú˙Õë­2(¯Kú˙×§…ū⇎u¯ë˙øK Âëõūŋõë™×ūŊ}/ëüˆA˙3‚ŧõ˙ÖžŋũzēĨęqëá˙˙Õuú_Žū‚zw×˙úC˙étēūv˛Dxģ.)ˆá´ŋAž‚ÚÕō:ķ-28Ė":=žĸ8ĖŅ„h‹¨g„&2čžaâ8-ƒ;ßK˙ŌëÖÍ2ėŒFhŽËæ„G`3‘Ņ8;Ŗĸ:ÛĨū— {˛MDp 0X#˛_"ȎŠC1˜GFŅ‘Ņļy&LCO_TŊŊŊ%;GS8¸†‘Čų<ˆŗ%؈ˆ‰¤"""?ö?A[ö—ĪįD_# Č჏›F,g`á˙¯ģ„ŗ%y´mFâ8„vG G`GŽÆ vC#ˆˆ˙˙]ô"""""$2‹*e{*eÔUŸĪŠüĄË9rV^œĄBĒ%"sĒ– ž¤kĨ˙˙ë…mŖ“ƒ”ä50ûŌáąĪ‡ōœĄĖ9‡/s/a \ˁ!’˙˙ÚáôX‚=Ŧ–¸˙ ’o˙û[WÍA+˙Ō¤Ÿ˙Ø\":Ū_˙a{˙ü0¸ŋ‚ßפũøõ}ĩ÷°Á÷˙û{āŋũŠ˙˙úžÂīũ„¯˙ūžņëüŊ˙ũŊ˙_Į_˙éw÷ū—˙˙W˙wßīĖ”†p:˙ŋ˙ūdˆáIē#<š3<æGI‘ÁlaÛ__ĶôÎęDteȸäq ļer÷ŋ˙ŠRĪDp  Į3ˆˆˆ‰0ר%qĘr*…AA”Üo˙\ČčŖ#Ŗĸ6f3äpĐo40V#ĸ8R87#ÄvažËĸ莊čBũ÷vKb9ȸž@nGČhęˆ­y_Hģ#† æĖāČāJDph#ĸ\Ílė">ąAÎ9 qȞUČlrœƒw`Úå9c›åaCŸSÁ”Ū°ž¸pb8ˆˆ‰ hâ‡-Î9NC4ô*ŗ Ë˙-ÕĸvvčôIA #˛´"" ĖĀžßQ—õBŋĮo˙ ˙_ ˆë˙!õū˙ĩüî—ņ#¯§Ú{B‘Fõr:;Ž@h!…æ"fA‚–t"ĶYĐqg0š,vôŠtZiĶfJŠŪ‹†“w[- &ļ)q­úTŦ›ŦŠtfmĨËzJ•<›…#*G“iĸcĩ6%¯GΝZds5R9›N‹ŠZPËīUĩM(ž,â“ÔXN×KãnÚ­G.ūŠktžŗBâ´¤>ˋōĮ_,~Ž•UģAiú }BwØXŽĶé]úZ\ŧ.\ūšwČŨČ⟠l/ø¸ŧW„ÚPž›Ž– ô–õîģŋÅbņ§šwKÖŊ×ęôš¸O¯ũu‘ģÕkĢŋ}/ú¤“ë÷ž—ũĶu֛ëwũvé]uĸ:ĶîŋûëŽôÅGZī^+Zb¸ĻēŨ:͝ŋ´Đh0ĢũũĢizA„Đ`‡ĢĢé6“ßB"ßzž˜ ÂoZđÂMē†ô— Å;I cTGî&Å!J*"44GQ-ŊŅk†ôú…ŦޞÚá¨DuĶČVŊ]Ū]ŋMÔ{ŋ-‘—ĶîģW_IvŌ{aZF?„G_4đTAøŸÛ\6A`‚` ¨> ÕÛČ đ˜UPŊ֖ēúéúXŅvڐƒŪ\w\8y˛čģ‡tlōCûúAÃ&ö_Ũ'îˇŌŨ'ũ­ ×å‘î‡ú×ë'ü}˙#¯¤˙÷õ÷~?õõúúĩÛKęBįŪB¯ũũvû˙oūũũČë˙īûĨ¯˙ŋ¯˙õūÃ*ũûä‡ú’ׯ˙ū…ö+÷˙˙m&‡÷_kūĢ÷õÚ_ôͯkm3kÛÔßíĨi´šĻ—öØeÜpÂWĐa6)ņq@ƒh â₠ŠaÅÁjĢm'LÛWėím2Qjƒ …—Q`„A„!„""'ЈˆˆŒDDũ¯]ūGZ÷¯[áá}˙ūˇ­û˙ũ}˙˙ũëō:ã˙˙Duŋ[ęŸÖ÷­aü]ēޏûŌˇ˙÷#ĒÖˆëšT~õģUžwkĐv#Ž4ˆūå¤ ž7…ŋũ"ęãelpļĢn–õŊŋŊRŊpíÕG˙ī˙˙܎¸ßú[úŨëī_JŨG[Ŋw­ŌŊūūļŠßú^Ũ+tˇ[ßŌˇJ˙øNQTī+ã‡éå°D~5NßÔ<-ŋõŋũĒw­ëĢqTã&ļķŽņ~Ė:‹uŊ(äÕ`˙˙ī_ũũo[˙_zŪˇ¯÷¯ŋõŋ­ë˙˙Ūŋ˙˙˙˙˙˙đø ´ ´ ^Ŗ¤¤(,,leptonica-1.86.0/prog/boismort.15.tif000066400000000000000000000676741506303110300173350ustar00rootroot00000000000000II*ūn& <˙ 8 ģYČ4ŽCC {,r“ƒŖœr8(HŽ ANqĪÃĘyĄdW J ĄČƒœh›!r Ŗ•eVUdQĪ…qČŖƒCB"""GCG0ĀxB@h’ H‘Ņ 0đˆ ¨ B<"":#äqHčŽČālŅ` DtEŅÄD"8kh¯EŒr>\ @ŌôS0Ž4ž[cHžG":#ĸ8shŽžeOĸÚôGDp%YŽô[G†G0ˆiō& ne<~‹\ ŠŽČėŽŒ*ŅäEŲpÁtH m‘ß-2¤GeŅ|žGP(#åS>„D–ąz,ôÍQ )  n"#äÜž_#(0o.ōr7+ie9[™PXåŽCŽ"C'†Î¨  ˆˆˆˆ‰qr€U*"?˙žŽŽ¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙žģ¯îģ¯žģúû˙˙˙˙˙˙˙˙ųl ŊI]ŌéŽZĸ떮Ą°‰gcyō>ˆfq‡D e`ĸ ŌĐ`DH.&"ŧĩ5:ÛVaø@Ķ †ĸ,H;#ĸ a "@Á„ ‘(Cƒ Ž”F\7aRĶĩ ƒaÛ´Ô&ĢԐoôēô›AÛ­/út›ˇēęõm&Ū´Ŋzt›Ŋ}/ÛVáöÖéûĶū8ÉŋVŌģŅ8}_n¯}zOãMˇ¤ßßĢ{é?uíé7īˇģ˙é_k{˙Ũ>Ū“}7ˇû~úûjŪŪ•û–¨c>Œ.īū•Ą X9Jv˙oĻ˙‰‚öēŪž“eĒfƒjˇŪßMūZã‚ŗ~íëé6Zåaî­ô˙–¸(n÷Ŋo̰ũ_ũ^ˇ¤ß]ŋÛ˙VáŋÛéŧ¨UØˇ¯Šˇ ߡĶ}v˙o_[†ßīĢéīûzžŊģ­žŋ¸wöôŸoíëũŪ×oīûm×zŽ…ß÷âū÷íë§Ũ-žų=J˛ŸvũžMĘÂ>*úD _ÖÚ „Dœ_nZm¯Ménˇ_ÛļíĨĩˇ×ûöŌõnW3Wļ•ĩˇü[VŌŨ}_tÚ[ÕĒWēa¤“Ģ˙m[ [¯­īaĨŋvˇ´˜0‚WM5M; Ã$O  Đ`ƒO Ä ƒpAĸ˃D43); 4La4ÕG ž ÁAˇ˙ŲcŠ }É ¤Ў0ŠÁ˛›jB Œ˙˙ōØR)kTŒ }Ņ Ca# „ã>¸sy°Ļ†`(&š Ž€ü-PvĐjž˜@ĐaT8h0ƒ „A„ 0ŠĨNôôđŠßä‡ÛĻéēzúAŪ'IŋÖíÚMũoÂí¯V“Đ嚕ô›WK¯ZÅ1Nŋ­ĒīúŠjƒę[ĩ×ĒÂgÁvˇuÖĒ'píû÷Ō™V3Šl+}Û×ëHv‘JmŨ5í}Rƒ^ÚÚoũT0ÕéævĢuzĨ‘(ûõm[ŊKAŊīIŌm&Û_ŦŅ]žŊ+­&âŋI{ßôÚļ–ūŠ/mÕõt›Ûū•ú­­¤˙ęG }´´‚ÚēÛ]ĒØii5´á„áč5Ōī„  0ƒ ƒŊC ­ŨĢ×UŦ0R{H|DF„´;-1Ą&â2ēšnĐOHŒ"L!¨ }’†v3Y Ļ€z@„Dė,€I)"¤!ĄŧČaô‚ ᠃aãË%@ęÁŅDĄ Ã ŽÂA4&ĐAŊ4ˆ(ĻcT×m5Ä$Eö“tđ›°ęĐaĒioøTŪęëx`–›K^Ōú^ū“h8KēŌÖõD[˙õ„õÛ_ˇŖ'ØV‰Žûué×֑‡ø¨č6īm_ļ:ú>ŋm‚ėaķųâ?¯lv ~ø˙_løũ~’ü§d@}ūŋ¤Ŋ°ˆŖØwåŦfŋ¯ ‘-Eeš”ų¨ÍYīå8l7ãú^j;ˆĻH3TlPš„:Æ ÁáĄđdCPO_ ƒÎš!8 ƒPˆsÂi„ĻB 0Ÿá`Ø6ûæŪ ¨L& Â&íQyT4nh]*.ÚÂXpũfĸ5 G΃Á!Ã5ލŽ.܍ʰРÃŌt$v“jŌ¤Ú­ˇü ha|3Åč6Pš $đ„i×m˜tƒh„yĄ­:!#úÜōn×›´^0œ9ܔÃAÂ#ꠝ-&đÚ¸]Ōai6‚iõĐM}T‡ëŊR Ķˡ!m Đ0ûA:I:_{tŪŖUúMk× Ĩöö×é6Ž“š7O†ŌtĩJ×JļÕÕ´Ŋ'>cŽ‚(1ߊËūŌŌot¯ Z˛uz ûœ|9Į˙~Ę~_]{Jö˙}÷jûŨuįx˙XKnąx1ßĮP‚ǤÚi}ĢĨĨmBV˙Ŋë×P}žÃ÷÷ü ¯ĨĒŨ]6—ŧ„ū˙ßõáëáŋ˙ø…[VD‡­Ģׇ„ŋ¯ë˙ņ ˙a˙ŧ.˜J)¨a(a&+Ũ‡ ģū×Ē˙á{ø7˙ú×Bià í‡ŋŋŽę˙Ã˙ëģķ-C5…@Á0KāÜ×ûß˙Ŋwį°ūˇžˇā‚ !îƒuöŋk˙ˇũuÛŊ{ŊˆáßëëßûûĩoßūõÖę;æĐoû}[¯ũŊÕ+Kˇũ´ģÛ˙Û˙Ž•­˙ûzNŊĨöÚ_Ã3¯ļ•íéļ“ũíđĪÖa¤›}§Jä?ļ)}íÕ˙á&ŌoOØią‚Å0 `‚aŠAá öŌöĘŊĻ“ŨØ&6!†0“ˆ^Ą„ % %íĨi0Âé&˜!L&aj &2z&V#øƒBÍÄjRØĻ &)RA„ Á1 ]”9ŽyÕd""""#ŠĮÁ6`"ėƒˆˆˆˆDb"—™"ņä\B9œ ą8î(AZJžUQČč¸dršđĩ Ÿ )\I†ËŖpB8-‚ Ëu?Ozė%‘līÄ#ƒōÍ ‘üŽ–Œ„ yš#„8R|Ū_HŒdtG`(#æŅ˛.GzqË("sßūW-ށD‡!°q iqܘå9ļVXCā‚ũäH9|ū]ĸ踅ō:0f3áKˆGPÛ.‹ŠGFtG7Ņ‘Ų@l;diF"#õ¤ßõ+Ē2@ŒŽ Fc#ä°3‘FEA„0„DDDMt—Ö‚˙Y] -†Â8†‘ō;%,DDR_õđŋZ_íäNPÃyĀËō"ķ¯[˙„ž Š\lŒ":3 ƒ aŪŊ~Ŋ„ž´—#ņ‡ęŪģ_¯`‚ø]%˙p‰ëoũņíXŋ-Ái.T/ę‚oNõá~ŧ ƒúZôqßü/ë›bĪÛõõū“dīŋ)%āŋü'ëĐK˙ZMĻ˙ų–?^ŋúû괝0—äBë˙¯O˙ /öv%—Dp<4jøOéŨõëúv_Š((ˆé7˙õ_˙ęŋØ ŽÄ ĻqÁl6Áƒ‘pĐFĪü‰ĢîŋÖŋīâČčŽ`ÖGdt\č ŋ[ë $ŋ¯û…ëvP`Hz)ķą Ē1d^{éۜkęŋō BŧŦŖ¸ƒŧŗ!#čGÁé×?õ8ëK §´GDtn#ĸ:#Ĩ!PŽ aļGČ莏dĘÛ#Rúo„¯Ė †ˇ‘pĢå-FŲL§Ë´BčÂ8Ž \•2ˆŋ¯ kĨ¯‹Åō62P!Đ """"$ –9XCFh˜ļŋõ𾗭;íOŖLŽƒ)€É ˛8!‘؁I4P)ĀsŲôy }ã$†DÃA„EĄ­õđŊÂUāˆeŽ2C.ChsŽQri˲ö.ZĖf%/b;z_ũņ]%üސų4˛0  †ŲځŦŋëŽŋ_úXOé$Ÿ!Ļ9æAÆ,Âtū?ū—_¯\$kŌ^år° Z]°A6ŋū˙˙Â˙ũ D1˛{„ĒõÁé…Ú˙]~ŋúáú¤ĢžęT ĩãĶú×ū˙øD/>ôŋęŠékëë߯Í`ŋŪš ũ¯JpŠôžˆoîß]~?ũp´}iBía4>ĐJ¸HÖ ŋô—˙ūĩւū ŽúkĩIW ëúūŋ˙ë íéĻ C#ä€1Šj’ũBõ5˙Žŋ_ģ¯énÍDEư‚úZäH M˙ûW˙úôšę™‘Æ\ˆâ‘ō9ŅtKzǤ̅Ĩūž•U˙kŠH‹æ2864@¸å""$2œraÄDD_ōīá/ô¯÷Ö¸_žO‘ķŲtfŒ˜kĖf‘´a’C*†FØūžÂKT˛2Đ_ũŨijwĒ.‚! Ô9ɎGĄ%ĸÁ›ĘĄĢ'ĩzūĩ[IaKŧ%ũSé;5dp[rĖ҈”DlÄ^ūŊ$ĩũ’āhdq‘Ä#™ôu1˙§vž™DxŽˆčŽˆč˜Čāf dt]Ņņ 3ú6ÎÔ1žŋũ<ô]Fh”f´r#†i @āŽeˆˆˆūŋ´Ņƒ8ˆˆˆˆˆ3AÉXå‚6%˙&Ã@B ¤FŅĄ—\)p6ƒ— "9ˆč§„Pˆą‹ŋō܁!#˛ņFPŒŲôGBfb""-ō¸dƒY Áƒ`ÜÚ0‹Ŗ´đˆˆˆˆ‹O˙ ĩēŒXOi ŲNũ˛%žg˛¤aīī÷˙īÖ?_ûū˙˙íü˙˙ōâ<˙˙˙˙˙˙Ü}z˙ÚxøŒr™ĩĮ˙˙2)\|˙ōĘ­G˙˙˙˙˙˙ū@A*–P´1˙-|ų~ÅcØCAÔxä ¨˙˙˙˙˙ $…-gC@a…+Ŧää0Ą ‰Ã„Aš\*YLP’V0ʏĮKÕu__TŊjS]*äŲIRÔ}Uu×U˙Ĩ­*Úũ"!Rm!•ĘØĒĩ ÁØ%˙5Č*CËhŒÔ˛Ĩ/¯īß˙–°Ē22YØ"ø™C‰\ĩ|qķ"Ĩ-‚_Č'ø’ĖĸONȲ.‹ä|Ž‚+‹ĸl]“pDv­ˆāļDpPGOÉą„EFKƒĄ!’Į8æķlĢ­ôWtUrRGl4iqJ“öMWd;P":/‘âų€[ĸų!Ų X_ņō$ˆāf3h 3‘Ļ#˙+‚ūZ˛+.Č莋Ä|¸Ë‚Ø2 GFŅxŽˆ@§ _˙¯FDŒˇĢ;Dt]âäG#`„p[r8!Á‘ĖâdĘ ŋ÷đ@ÎÂGeŲ1‘ō踁AˆááHâždtSąel8K×­é‘¸ú8‹ĸėŽˆáČ莋ĸ菄 †rųŸÍCdËc ´ßˇū™?›ˆāj ĻÆGŒd|ē"ᜁą‚ū´—Ĩ•ëd|ƒČėŽy—ˆã#ŠlˆæiœE É –¤""/ģ^‚÷ö—åK6a¤GD|Ú.ŽĐDZȸLīŌURZ/iŧ¯ÍÁl4 „RÚˆŠë ī_éw%!Öd02@‚;/—ˆčėš•8Z×tĩ˙;’Ĩ„Aô@đdōœōK]~ĩ¯øAô—ĸßåUs"°PAsЏø] küék'ú#ö°˙ŌKī§ŌT¨+ûá Đ_ūČU¤ŋ^Ÿ„Ŋ/ķ!´ĄôvŋõD°Ĩ¯]}ah%÷%ÆGˁāQI˛Gúá’ę’ūĩđ‚Žģ"¸Dtaúõ„CÛÆ–žôû BŌSŽ\2Aú#įc­B‘Oßí Ž­ŋ^ ŦØd‚ĄR:#™Vb='°–vą֖úU¯•/"™.BLŽÍŖGFhēB"@đÖrĮ$įY1i5Uûáũh+ôĢ­27œÂeÆa‘ĖŽdx!‚¨å+!Ā‹Ôuũé7Ņī˙Žĩ°‚ŽÉ–]ˆč"""""C 4Pä+Žs#*ĒWõ˙!G¯˙ÖŽÁ Íl—ˆāļ čŧc;Ã^Æ}%ëĨĩŋ˙ZS.čC)Ņ#˛>GËĸ8-ƒqˆ#ŋéuũē­uũ˛T-@ƒ!ätN‚(rÎႇ8åEˆˆˆ‰ …ešånË- ŋđ—͞5žëéž#†O‘ÃHŽˆųu!’h5‘D‹Y/˙Ŋ„žÉ)| ō+ŪJ0Ô#†‚ᜎŒŅ!C"N„wŽŋđ—āƒzīé“åŅ#˛>G°Ö Âô5úŽ˙÷h.ˆāļâ""?×īūÖũm!Ŗ¤G W.ČāÁvGFß_/U˙ĩŋŒÎ¨¸B8eãd\2@šҏÂ'd4""?õę˙ęôĶ$Ņˏ-†Š3œ""#ūÕkũnČųVŒ#`f ätb#…/ŅŠ¨ĒßũvŊH4GFÔž˙ëšŪ¨Ú#ĮĀÔ4ÁČčäGE¨F¨G˙ũĻFØ)›2áKŖĖŽˆņ9ÁœDčœSŒÁ‘ÆL˜ˆˆˆ˙¯LŽˆĐ-‚™#ĸ8ĘFPŠ|—Mˆˆˆˆ0„E˙§åtˆ¸-‘„uFÅ'Čâ’LD\D{ėqų€Éä|Ú:‚úūˆr‡$䜄,'´č˙y’„"#Uí/ä3K¯WōÜ-hD‡7…kŪŧU˙˙ÚüŦ¯ō̘ ŽÂüwņ äa…ã¯vâ__ Įëë˙ūˇkOÅj;ú÷¯Ž7ë×˙ũzúũWŊŪĩˆ×Úâ×a]…8˙ūM€Ôe0aG-ņĐēˆËPšūdZŖ™bäĮQäčŖūSbĘ?ü€’u˙˙´Œ•FZ‰J?˙˙ųl"Ī5Æ?˙üްGAÁ4"v/é7I´ŋĨŌŌoū—¤Ŋ¤ĢНARÂ]R^U J/-`UAzCJŧA.ëę’ZĶ#˛äÚT#´Š1\0ŦĄĘ0P ōĶ$rĖUYj#ˇTōÍB2ĐixË)WöZ ú˙Ųd bvˇWķ Dd'BvT“ŋõˆīÛž/&ā™%¯ųŨ¯Ęéhėk%ČŅ‘Ä#ĸ>GÃ=|ėBRßĐôWĨ‘ā!pÉĨuŸôü{ šÚ†GÍā-‚ąŅ€bĻCŪu^ĐęFĀšÁ¤ē*ĖDęŦ|ŅeĸōŦ§]l Ã9™ãO+…įvŧrli™!3ŒĀĖD€ íYˆëŋņü›dtpBáčŽ`æ3™¨dĩī÷˙ŗ"\‰fŅĀĖ čÆGECa*uũ×ČÚ5ŪA˛ĸ.”Ŗ'Eō:#ĸ:.–Q˜G‘ÄTd› ŒDkÖõŌũ3ųq—`‘ãh‰ĸ d‘ˆˆĒįTûķ˛Č‰æˆØ0Žíˆ‹˙˙ã÷†GĪĸ˙˙ōXžŋû%gPČ‚:6æČĒ2¨tžÜ˙˙"‹˙ņûēōŗ‘Ä#ˆGäp[A„˙o…ūū+ę´v˙ČųW˜Čņ€[R(ȑ‘ P˙]Ž˙I"~ũŽŨ‘đ-‚‚8¤q4F †‚)_˙ĻęDũŊž?dieMDtGÂ8-‡3dtpR­›3ˆ†ÎB !kׯū5ū¯ëŽwfGˁ g#rČč–1Á8hDk_Ē÷æĶūļ{#æ"8†ą8g5åA˜D-‹CüގUõAäN˙ԕfŅp6rņtKŲxhéׯņw˙dmhDD†H†S8r‡! sņNPä1†rcÎį+d „Z˙û ëõ ūūRl#Šs#åŅ|žaVŲØÆBČDDOÂ""?˙ņ˙­×ûâ$2FävPįVOcˆˆ´ôׯ˙ŽëüÂūd 2lŽD莌":#lŦ2ÄE˙˙ũ˙ Dũxúä&Aŋ”J„Djē˙ū˙ũ OŌ˙)I?™ @ŦümŌ˙˙ūūŋ ˙^-oz\˙˙˙¯˙ëõ˙˙ø˙˙˙;5ú˙ų <&˙×ų ÷Īõ˙ũ”ũW…°ŧį Ą¯íé˙ ÷ß{¯ÂĐgÆ\2TÂ#ĸčę ˆDá…áwõ^ē×˙­_["ē ŲĻH \ģ.Žš„DZ…¯÷˙Ķ˙͞d…v™€Ér;6d|ŽF2菕FĄU˙ũ÷éúŠ+Ž!! Ùĸ8B,ÜDDGĸW¯õk˙û^ĩČŌĶ#Ŗ4n(Čų ĀšTd”ŒFž×kô˙ŋ~Éo’„Ĩa’ŦސˆˆˆˆČŦĄČļS›ĪeęIHÆ Į8*˙¯˙ãO~ŋŠD4]"í5ũéw_øa{ ŋ˙¯™ "=~×ũ# Ō_ö)3_˙ä~‚ëø_äŦ" Š/čEĮ˙ô:øAuû_á‚đ‚ũz˙ú´ŧ ļŋ /đˆwëŌũZõ˙¤Kš´]QūÂüĄa ȑ j‚ú˙îÔ"‡2N[@‡ãøč.-׃ūīČ6ˆčŽŦ\“ē"jÁúũ'Ĩ_ kKڐˆŪ`2C\ ˜B#0Â_˙A),Ūũ,(kČŌ.fl Ȋâ°ĸŋî¨/× „˜ŧ‚aÚDD†Hn9NUš0ÛV jēúõÚë Ž‚ 숈Č,Ž&6Y2keũaBũ÷iŠĻG‹ĸá´ˆˆČã–äÜĄÎ9øŖ2ÆĘÚ\~DŠũuR&˜3—Fá}WLú*žGČųÄfĄ”]F`\’Ą…ū–ĩ[;š4Pl#ä|Ū|ČL„ˆĶ: 5T5ūĘUB"C !Î˛RsŲčre(>ĨU /z"’_R˙âúËt€fËĄ~’¸:…˙ũL‚a2C4Ā6œÍ˛ŒšCøKW„˙ŋđ„á­ä ėÁėǟK…õõ Āä‡/ ŪŠ}°”m_ãüDE*öÂ[OÂ˙ęõėB Âŧö´×°AA—"ŋ˙ÂÕV0‡˙ŊĢL+ëõéĻ„Âų˙Ũņ +_ ×ë0CđŊüxåT5ņ ƒøũ_˙_¯Rg’ž?úëoõ­úßõÔzũũâ¸ëãKęÖ­XVŦ˙˙ü›(Q˙˙ü´””K^ĩ˙˙ōgQ˙˙ $!FW+Q˙˙įaNĨšĄ y’ljh2RēŲøÂ †Â'§A8DąŌn˛Dŋ¤ØŌtŋ×´ĩú÷J¸ú”ØÅ-n“Р ŽMPAš0‚4Å"ĘHŠV4ž’ŽšT’úFeIPôĢ„´Ä,ĪPGiDGåĒļ8 á8NKQZ¨ú–…%ˌ†d)‰Ú­S´9RÎ!P a2Ũic0˜äب$›‹BŽ‚!}Žd¯&LätGŽ‚¤KrÅzV•ĸâ>ˆŽ"#•Ö"l6‡¤ ÖEĐMÄDDāÎ9EĘę~vDv–‡ĸ]W“yĸ:/—ˆņ#™0G°V#ƒ D‰!*ĢĄKRQ•ú$#DG"ųÁ ŽˆčœDq—ÎËLiåp¯ĶŠŌA*Ųßĸ‚0dp[rņ„\˃pĖ#åō‘ˆˆˆĶ×˙„BŌ¤ļt¸Ž GlDDã˙ũå‘)]\ ÁA†lˆ˙˙%¨ĄĒ#˛ų,h6Ņ­ũk˙ÆÎő„GEÃ0ŽĀh#‡0ŒÅ;ā.J˙˙LŠa28F"čÁŦֈâ‘Ų΁Čų[2”ČĢÕí{ėÚ.`ĒG#_#ĸP1f%UTļ¤ ˙ČÎÕ ø˙dĨYPŽ aŽG"ŦŦ°_ũà ųß/}|‹­Itg›Čã#‚Ø*ƒD]aœ‹ęŊ˙c^?åH˛dˆ˛˛aE8‘ĀĖ4DtGˆāįkF#×ß÷ˉŗŽģü –9nN‚"""$2OSĐ´ĸkŨiÍKKöĒž?^VØLē#ĸāj …Á Ņ2(ƟļąßõÅ˙ę``Ā7.†a[e`ĘTwŒ}ũiu˙îų‹‚Øl/‘ÂŲs#„#˛,ˆą’°Î# \Í>īūĩ˙üÉX4‘Å#†H)š6ŒfŅ‘ķ†vđˆˆˆë_Ō˙ô˙˙Dá´9NFû.e…ē×˙ū•˙2 ÃD\)g!Íąŋę˙ũ^e O…˙ī2(Ú˙ūŋū˛'ŦÎ /Ȳģ˙Á˙ë_¯ø Âa>ąŋÆĩžšoū°ŋßđƒL~ŸŋûJpÜ/ųŪĨđŋ˙Ņ ĐŊūvaN+ō.°Aõ3‚˙˙&Ķë&j¯;õz‘4aōėŽ†ŧ5ÚŽ×õūŊi_ڐ­qÃ$1az_xOĒŋũtũc‘ŗG U.Gōa•S™ǝZkõīū–ŧA3‚‘ŅÃhŽ DÂ>ÄF¸ú_ęõūŋĒ %RFGDud€rᒠĨŅ;Ŗ$†"/ŊZ…ūĢIũũöŠ›Dp[ "æGGŽŠĄ’F#Uõ Â˙ׯ˙ĘÎg—2āf ";#Æt_.‰GFŦDCŋņ˙øUj™­Db(I—"āf¤vG2>K‚TdN„z˙Ö°Ÿû^‰_#ãF8ˆˆˆˆČqČraĘĄÎåHPē‰oîũmĒũS5#vGˆč‘ōcĩHQ П ëč/˙ÔĨhHQĆ@jAĮ0š°°3à ŽéĨ˙¯ü/îŦŅĖ"čŽFÁl4ČŲ’S q¨„x{‘q:Ē ĩŧ˙ô—Ķ>ŠŧĀƒ‘Ė‘Á™.ˆâ’çHÂú^´Zņ˙ÚgDjDueŅ‘ƈ|)ÄDDD†H(-,Đˆ´"5ŽCÖô]ëĒ!ėîU•ØrĘ@ˆˆˆˆˆ‰ Õƒ™Y%˛B†Ų>ûžŋ¤ģŌ­p™@5Ņ Ãr8 pm/›dvlČá˲_6ˆ›"‹Mnũk„é/ĐI)Ũ B""C 9%í9k%‰—ĄSõ˙ūŲ°@R0ž’î;Ķ4 ,/‘ĀÁ2ņáŸÍtte(Ã2_é/ÕbøKķ%’æ,ˆDHÍ@¸ž¤""";ũx_ŋ§˙aPZI/ČöO Ԗ¤ļ€CRx ŋëí.ëũ˙Fg__™ EĒŽ„¯˙ÜëũWņÂ]žT đ¸_˙ØK˙ßūDŠwĨ}„Ģôˇöũˆ[˙¯ũ4–á~ZU’ö’_ūÂĮũ˙ũ> –' 0¯Ē_ëÁ‚"K×üėļü6"–Œāׄšū˙øŠ˙úūŧDx&!0ŋIuīß×˙;N‹ŖhäGЈ‰Ã1Ėå9A“rŦŖ~•  Ū–ëú˙ųÚ+"hē88fķhē:l2A´Ą‹B1 īŌ_×ęŋvF"ᒠ0ŽČĶ4žēëũöIÆ ú8 `ŽqDs*™îABá?ČūūõĖ”D69cˆˆ‰ €Ô.@‰ú˙„ŋūÉâ8d|Ž`ČGĖD|Ú#ä†mȎ‰k^ūļ‚˙;$/‘Á †áA(ã”8ˆˆÉU’{B#Au¯āĄŗĖÖJt\‘Ņ`Rã'DtdjÚôŦ-uŒÆƒ#Œ¸-ƒYt` žDp<āĘGDs.ŽˆŽČčŽDÂũ8Ø\›ŅĀĖM*˛2ß×k•ÍŽ `…ōėŽČā\†‰vv(Į īéĩĖ‚H)‘ȏQŲp`DD]õ˙PŦ/ x ä0øRéö—UHxˆŠęš˙Âō˙^˙!xOúëĨ +ĩîõûGbjœŽŦ6˙îŋĐֲȗ~?ô×ūŋ§Á”B˙׋WŒ†s}˙ax_ũxaz˙Vŧ0_˙vcÚīö¯Õ~´Âė™/˙ˆ`ēKŽ5w˙ü‹éEۚâ?ĒĩxQjÁA‚˙˙˙˙˙ōjŠ?˙˙˙˙ū@MUG˙˙˙ųϟŽ@i 2Ø)QūW[3X°aÂ6@Ũ.›íĨë¯˙Õ{Tڐ–ĸēCJRbĨuP°˛ßÄ8"ãl ›ÚAŋ\Ž ôŸ˙OÖŌõŌëí…ļ• ŽÕĢ a„†Ä&!A‚¤ Ķ…§ZúrŌ‹WŌ\›ˆÄŠĸfŽéūÄS˙×Éĸ&HĒĸĐ6ŋâ"=Ši^MËWRl ‰ŧ!ˊ=DČ)9f ú WKŋģ"HŽGFâ>GÎ9ŲJË8”~#åŅpĻ$5ū9eD Ėžc0‰7+Ē˙“by[fÁšp[sō.ĸ9‘Ņ.ĨÂ#˙ĘāHŒ#°[˛ų€ĻFˆˆŒŊßū¤QáHá˙ ˜FhŽ)‘ķȉä,Ää—;Îņē8ˆdG@Ę;ŦĘĶõų7$‘G”âŅÂ#ĸų…]/˙+’ek5´) ‹ĸ\RJej+&""#û˙ķ$â‘Ár>Ghr8h>GbÆ"M_üÉo'æâ:#åÕČQÄD†@YC”MLš+1!k‹ß˙_ų’€ÉaNˆâ—Dxē1‘ŅŠķ މ$"Ōūŋ¯˙ÎÅԁá¤997(rÜËĢCŋ˙¯įw}|NČŽ ëĒ˙˙ũũ˙čŨI.˙÷ŪŊŋū Ūžŋ˙ŨíũũŨ…ī˙Uü‰.˙ũ6Nx_zũßņÛ˙é6œvũ‘dvŋüO2ģo ũ&õĨņ$á˙×ĮÛßÉ[0‹†)i„ļ—˙UČĸī2Dpė‹DqHáôŪ‚2ŋ˙ükŨHZ>ˆáK‚Øk›Éw[ë×˙ũõāČy‘Ųp[2>HDqŧ>˙ė‰*˙ßŗą1“L¸ĨÁl2Œ#Œ äXÄX_ú‘oīCúúŦ34{/ŅqM‚Ø2—D1)ˆŋõļĢ˙õÎĘJÉR#ĸ8Cc/‘ŅÁ\šœŠĶĨ˙æÚd]&SŖĒ*HāAÃ1šŅšl”ä|ēē•<Ŗ0¤p5ĸáœē.‰Å"yŦĘŅ•ƒOS˙÷ŋgd"1A—#Äp6‚ųØ3Âkúõŋ÷îJŅäGDp[“ Žfŗ!ĸ$)4ŽËÄÎÆƒ8ô×§˙2VĄaʁ! ƒ˜r ˆ9üüT…(/jаĢ#Ē^ī××˙+kĄ Î9C›cfØ B""ī^:õ_ú_Ö<Č\#qėG¯××ŋ×˙˙™]_˙Û÷äĄ%zYKĢīŋå×_ŋ˙ø"ĸVŨ×˙øŋU˙ }x'÷Ĩ˙×k=a}|• ¯úuũ}ë ØUw_đ%ŋá×ëūúqM•Žú˙>úũ:ūž¯øa%߯˙…í˙Öŋūds#‚:7„8axHî>ëũôŌûŋZü=ŲVˆų/‘Ųķ诙SˆĀd†QĮ _ũúę××ę‚ëRP¤ Ā-ŒŽDvG‰Uū´ŋ¯ôë_õ­!°q x+99\Đ*gM`ŊßÕVßoë^ĨHĩ{B"$2¨r5˛÷ˆDDjˇĢR$˙_ĄõöEr菂p3 "âĖÂ"Ŗ;âa~úča˙įgDquŽˆ°rã3Ží•SĻŋ×_ūwWdčã#´4Čâ—ËŠFX2ŦCũõßõ˙R4ŒĀØō Ę|ē&ОRÄFēŪˇūˇõäɄ""$AČeŽ@ÆĨ—ģ! ™‚ŋŨhEĒß_û˙י$ĖĻˆČAČiQČQÉmYÔÉėÕu_áUÚûß˙+ påR˛Ö‹Z2‘5šÖŋ˙ë_XOü–Åų#‡#Ät]‘Ėđ.DŖ?×ë×î¯×Ū˙?ˆˆˆ˛]?ūûũW˙×Öü"õõũ=~Ģ×úü/Ŋ?]ũĩ˙ם׸^ũûč'úW˙ëdūŋ׿€^ē˙h/õ˙ßë× _ëĮūCŽ˙Ōׯ˙_účÎ }ë˙ø ßü-ž–9'ũũן_­˙M˙H%×_˙˙˙ī_˙Ķ÷ĻL$ÎIœ ƒĨ˙˙×˙×˙áÆėÃ#ŒŽdxŽË„#怈 įq x+91Î9ܨŌ×˙˙ũûWũåOԋ"č Y0 å*n—ūũ×õ˙õū™Ä~#ŖG1čâ.gȸČDm†@ŲÔQ—ūŊ_íŠ* "°\ĸ8†Y„\"Ģ‹D~ē_×˙û };,Ī/$8-‚ƒŽGŽeŅs.Œ#hŽfˆčŽdCdwŒZĒ tŋŋÎô ˙gUWi 4 sF ĖĒ„FwßŊz ŋŪĘTfĐT#†Â:9Dl+&UˇđAo¯ļé~АŅ(F.ÖLETČ g^ŊŌīúÂ]#ŗ ÁAp.|*ȈfĖæZIŗõ¯ũˇūØ š’°T#†@k‘ŲÆpSĀĒ\Ę"8.ˆm#ŗĪ4.Ķ­mnkô’ßũˆ^$#Vn0!hDC"0ƒ˙˙õŋÛĨė0\ÉLR2˙øZø_×˙Ō]ú!øIkQ˙ú¯˙ /ū‚đŋĨ˙˙˙˙¤P—ûáá_ĐZá˙˙úŋøAqĨôž§˙õ˙đ—õÁ¯ÚI.‚=AB˙]ž,$F ũ-tũ_˙č%¯™’‚.&yPAJ’ü"ŋīD WūÚKz”čEâ8`¸d…Ũ%ŽDē ˙ֆŋ\6VF˛>x9œÁ’ëČQá{¤ĒëAũ5˙„,­f2ų€[s‚:đuÂÕWW˙ĩZå(3ĄXä2ĩ, ļ…|-J˛^Đ]˙ՙ¤ĐgVmĀĖ4ˆčŲ/y˙ŋĨ[éizˇ!Ą9NPįĐÎVf"""C Xä˛nw(rŦęĘ^Ÿ˛Ÿ§Ķa-4ÕUŊ2O/ĀĐ5Œ `Cˇb"""/ņõTėÍÁ ˛åmAÔX]/¨\”"}29ōųŧÜGG2āmFHÄ]÷å¸@3“Dp)ō#äxŽ‹ŖČŪ]ĖÃ"ČųFeZ& ­ąw˙™ b8da°X#‚ ätG B8Bāš<Â"""""-mbÕ¯B@đŌ5fãЂ„Ŗ7Qr:Â_ū[• ķ ">ˇ˙BôŋķēX!ŦGúõp—ūw"{ū ŽÁm/ü! @˙Öļ6Áįt?„˙ ZÄ/ô’ųnf¸Ú+†„?TđDAöÂ4‡Âú¤ŧ!„ƒ*^žĨšpĘ#ƒ fZ×Ĩč†k}0ŠY ˙RÜ yS Ž´°_¨īÕ);_øŅn\ɄuZ×öŠP5gjö ĻEg¸Z!˜ÜgĒf$˜J¨†e9Ų¨j˙ôáešHjûW˙ė%ũ ƒE‚#­ĻÂZ˙ķĩ°P#Ղ s¸˙×LB–á@ŖßŪļƒkëÆšaĩ¯hXZˇjø@ÁkëĐÚö°ÁS5k#`°Á 0ąˆË0•D˛%(ō~[AJ?˙ ;:?˙˙˙˙˙˙˙˙-ĸĩ˙˙˙åžŋ–öĐdp´Ŗ­Vljf”UIhÃé*UÕ.’2ŠbŖI$Š}-*Jm-*JŠ*ĨP†´+-¸UHet˛[UUõ+Ŧ%čHIĢ&9C”čb"?˙)‚•-•´$Øuą)j§ahކ[”؏Ë0 |JR–â[š Aŧ~Zcüå“E˙&č1˙•ÉHÉĘáH‹/ų’ZLD¯ËåtģÄ&™Ūˆ|Ž$‰ē1Ä#āOũ3˛¤Ŗ–Ek)ytGFš#ĮÄ8 b˙ ˆO&ʈŠŖČÎ#Ŗ`fåŲ¯6Š+Ē˙dtžvˇ™™ Á‚82dt"7ū-W+H‹ĸņ´GĄ§QÉ ē_žŠŠočŽj)+ˆ?‚äpChš‘×@`ŽįÔ×\.¤_2äUöKD%ˆŽDtq‘ĀđØG07#ÆBLD_ū†dh’&Y J}Dp%ŠpĘ#F?˙ĸ#;[Đi›Peōčæ3ąØ˙ûlԈč&uäGĀ܎ĀZ;4EÁr.ÄDk˙™$ {.€AVRĀšep&E€„˙˙čD†H2CŽC,r‡(rrZ \Ī^š˙ß2â1‘ŅvNĐč  ."#Ŋ~ŋų'ís%A™…h\dX¨'ÕŌÚĨų^ŽŊ Ŧ Õzë¯ü… ?ū“ëôĩęŋ„O5˙ôx+8˙^¸Y #˛SŊ §˙}''8ĮÕxO Áv’¯Âa?˙ĨiīKôŗ8JOÎß˙U˙úM¨_םÁ>8L'ŌÖۚ¯ų’Da‹ĸ8Ī"āyūÂ]×âIú¯ˇũ/˙‘¤f ˜ š“u úņũ4úZęÕ;ėĖHāˇĖšŲäH äŠûëŌ¯÷UęĢëR7Ą!ú•ĩKũä#˙õõPĒ—^wî28-†Ã;%2RÅzG'aBø:¯˙^¸I@„ˇDvPf9PPåaĮ=D+ˆ‰ €Ōr dėŊ˜]§ė„HĐå9PErŠ‹%-(˛¯õÂė/jŋÂ(wGÛ6ˆø! đ-ĸ9fVĖ­įb \”™„D]Ŧ-/õĮúķ$€f—›":5.…ĻžŋõŽĩÎČZü2Îs”9 9uį™ a=š †KB"Íą‹zūīõë­"#Îæ'GfŊs"Đ`†DäЋA˙īé¯ë]j Â`ƒÖ˙ūˆ‘×WūĢ˙ūë˜uĐAéôĩßîŋ§ũj̝ ­L8^-$õūŊz­˙Ŋĩ_ũ† ĮŖÂéÕ|ķĶ˙˙ÖZ ˙úņ_‚tõéëĩ„đ˛ŖŌ˙ī0ááõũWĩ̝W †ąCŪŋ˙†Z[™Á˙_~žĢuë2$Kkũk˙ˆOŋ̝üÕkkŅ Ä`2F°–˙ŋūŋ÷Õ%˙ú镥DHƒ˜iúKú¯õ×úúNŽũ~ÍhĀ-Äxē%Ė­C÷¯ŋ×úû˙ŽĩƒLHBųäHˆ¤"īŌjBÖĒ×ū×˙虄ˆ=‘\ĄÉŽA&DDčrĖdšęū0_ŨūēWyK’hŽŒ1ō8d‚Á´P!F\gŗÆGŠD\ÎąíŽŊjŠWũW˙Úˇ’ŧÜG@h) A‚a××˙ߜ{ÛÕ/dË4Ķ<28ĻhŽ ‘ō<`ˆŲĀÔČā ‘Ņ@7+ ™_˙ÕĶū…÷ĐWd/ȃœq a™g,šŲ1#nÕw˙]WõUBœČã#ŖĒ9—‹˛86‘Ã$‘ÂŅâ#ÅŅ€ä|â>p9Ã.Ëĸče,vRˁąvŠŋßü+]w÷2HaŦGEŲ8S´B""""’ĩõI~žŋák…˙ä  r܂U•dO'CŲ@…Ŧ–X‘ļ3íĶ˙^ž×ņÂ)oŽžĨ|EķØˆˆ¸Ž˙˙_÷˙˙é œî õēK×˙ũūŋū Îā‚¯×íë˙ëŋ˙éK¯Ûõ¯û˙úë˙_˙…¯uūŊ¯˙ø]˙˙˙ęĢV¯uūŋũ(]w_^˙ČGëû¯K}˙™ÂūŋŽīø^Ŋ˙ŌĮ˙õ|}˙ëŌõ¯_îĘDaGÅ/ëũīũī¯˙ÍSëz’ ČM5÷˙×ęŋ×Ú˙ÚgÄydq‘Ã$ËÄtG"â‘ŅB8Ę̤?_ũ˙˙m|8a4A‡!Į!AK[6ÍtŊú˙žęĩĘT]ąHčÁ›dŠ•ƒ"˜˙Kßũoīõ°ųEŅ€[ĖÎ8G­q¯ ŋ\ė‡˙õ~ˆ_+B‡*Č.9čaÄDH q"kFJCÁ0ĢĨū˙ŗŋõM4’čē#ĸ8?’æDØĩ˙×m˙A'¯’ĖĀS€m ˛:6ˆņ´a2ŒÉáz˙úëū—vK@Ė ‚šˆāŅ#Ää\ÄIb”b""ãīūũvŋˌŠĢ#‘ ƒAKem‘ļ–Ë20ŌKë_ũvŋūˆˆ<‡ Ģ„0į†ÁĖ9ÜĄĘLlŊ­÷Wo˙˙ũŽŋæ@aHųĀ.G#ą83,ĄĨ˙ũ/ū˙Įa{˙D]­˙×˙×ëõ˙Ø_˙ß˙˙ŋ˙_ø3mū'ũ×˙ķ°Æŋ˙øã˙đ@ŋ˙˙ŧ!˙˙˙˙Đ/ņK˙đŋ~˙˙˙eH˙öŋzÂ÷_˙˙ë¯˙_˙Õ~ķŊC‘ĖÆ\_ũ~žŊ˙ÁĄ xmß}úũëũĻA +*Ų[…öē_ũ{×^ČG°æĖ‘ŅËĸ!”OŽģ˙˙_÷ƒ>ˆhĀ-†i´hŽŨˆˆŽ?Ū•¯õ˙Îū/‘ŅHˆá–\ÃT•b4×ūúûī3™xŽD C0\Žˆāf $tEĀ‚´Ä_˙wáŖ´¤™ŧÁ—EŲ š3œPÜŧfg„!qcŋ˙U["š°>†čüGFŗ"p‡Â_˙Ķ @…Æ™FaÑÁl˂‚8`¸R89pØg›Čų GDtGD#3ËåL ˆˆëũ_2HB€Ė5ų|ē+ÛĖ”i ¯uūĄ!S”äpg8įŗšĮ!G3ČĮ!˜åš=í˙‚ķ!°`šņØ´"B"""""+]zKūŧDGī¯u˙ ÷Žē˙˙ßív8ū—ŽöR_§˙à ˙ôAŠOúÁ•"Ũ×åd[¸â=Wڍnļŋ˙ŨwūŊޞfΝ‹UíPüC Ư† ļž?_é…Úû°ģB.#ã˙˙˙˙˙˙˙˙Č ¨˙圯Œŗ…ņ˙˙˙˙üļ‚Ô˙˙Ëq.W2Ę36pąHU*Ô,$ ‰V`‚úTŧŽĸ  ĐyŦ9¯§„Ũ&÷Ž7˙וÕ|ä´ékŽŋëĨ¯IŌēM„ŦSĄ„Q”ŲO)œũß˙ōŪ?Ęö¤ÜĖšfBĮO;žiŲØkYËQeÄdfąĄųd.ŠÂŪ´ø‰#˙“ae÷įuew9\Ōą˙ė™đČ ¯–‡ZįcųRDi™­äta—°eøųŨ^lfôĖl0G°`¸†ˆģ;9]bĘåáGDt_6 aĒ`ņFBˆ˙;ŅÆŅæG2â—°Û#į#„%ŒĨ1yeČ!5)dfFŅȏĖ †râ—°8.Œ;NÄYaiVĩY•yyUÎÉ2>^8dp4râ’´\g~ÄļŖõ˙+“JAQR>GŽÂ1DžB˜ˆ†ŋ˙ûgsÎÔE|¸„pÁ"""@Ų| úœrĮ"[”9AĘÜ"O˙ũĘāa Ô4Î"8†ŠĖFķR.‰IxŽFōčĀk‘ō<}EÅ#„vbPÄDDY{ëūīĖ€€Ėƒ™Q•F""#2‘5“I¯¯˙Zĸ”‚ŦĄĘ–ÄĻMlšU}˙˙˙÷æBb’Á*ĪB"Ķŋ¯˙ũŋ˙Â¸Čæ×}_wû˙ũĮ Až˙õ˙÷÷˙é7…˙õ˙ũīøA7¯˙īĩų [˙ų„F˙Ķ“œūūv^\‚¯}zÄ~•¯ūv¯Õr.ģ˙˙ßŗËUĶi…˙÷ÉjūÉbņëūŧW;XD¸.`ÅÁŊ{ ˙Ž;‹ũú÷äMg|â"#Ķ|/Ž˙ú[õ˙LÆmØ6‘ķhķ#†Â$u˙ūŋ˙˙ü—#4jˆāļGhžGDt"!ßÛRũûũūšH3áHāļ ‘ļRŖŊLDE}ĩ ūūõ˙ü‰š%Y™ Ál2Čč¸Bč tē~ĶÆ˙˙j}iYäFi‘ŧ a3#˜!ÜZb#_ŋâŋúČN8åU”įvGÃHÛ#Ŗhē.EҰ/—F":. ĀÔ2‹†ė‘";æŋ}zän˙%ˆŽDt\ Ą‚8ÎÜȨ!Æ"/^˙õî×"bâ;#ĸ82LĀeą `AČāĐ]‘ÁĘÁ•"*L­Z ß˙ü/2(ˆˆˆˆÉ ÷BÕIĒą„Ą•˜EĻŊá?˙ëüČ2¤Ž ‘ķŒDLʓ)sõ˙ū•˙×˙Ė„ƒ— 2áČÔqŅˆˆĩũ˙č/˙˙)}q‚û×û˙úK˙˙¯ß˙õ]˙˙¯˙˙ëëÁ˙Õu˙ûI _˙˙Ž×īߡ˙õé(A˙ßŋĨÚÎz¯˙˙ĐJ˙KČēKëĩŽ^˙_˙KH'ūŪ@Ö-ũp֛û˙¯ũŌ§õøé},}?õķ ķk˙ ’Öē¯jTҰÁp<Ša/˙ÅüuúŌUũødŒœ p[ ŋ„ŋß˙ßü/}įaŒ&b>ˆāļ\ŽŖ;ČŦžđ—ũõû°’öSĸÎeŌ‘Ņt_.d|ē#†H*˜Dp`â.ˆčÄt":#Ŗ Ԋ› é5ũ÷ū˙ūS4§—G™ÃX¸0GFЈ\""#DG˙ĩ"_˙õ×í2"™#ävGd|ސ†qČāļ §ü3ģ ‚"¯ũ ë،×Ár8*›”ę]Ņ„Ga•0ØwF"¯˙ęĪ ×"""""""$ÃiÎæ§:G&9åčPåoˆ ‘?ē˙˙ĄU&hģD(äpHrœūqÄH-‚aH!Ę˛Ö\§")!%"֋ŲÆĸ4åH;ú˙˙2FŅttĻs7—0Đ]Ņ„tDY•R*lÚ"ZĘÃĐĩī_ õ˙ūˆˆˆ‰Ã-ÉD˛¨AqɎFPMHšQļĸÕ _ũ%×YÕ˙˙dæAq#Y{ B"-īŋ×õ ”'ëåHžž2Y?Ö˙˙˙ÂŌī˙ €Įūŋ˙˙˙ūēUČ.GĩÜ/ũ+ß˙ëūëI+ÉXęo˙ŋ˙úūŋÔÎKXX^‚ Ō˙ú×û|‚†? ĩ, ŊB÷ôŋŌ˙ŋ˙˙ü}'´× ¯_Ĩ˙D(.ž˙Ž˙Õ$šŌëŌ˙õáû˙t=ūáC¨-ŽákvLd|Ž2āŊ/đˆX˙˙Ē õũ!Ōë%ŌR˛‘ ˇ/đ?Ŋ¸Kßė%ÂĻeAÁl5HáHæN2Ŧé úNß˙_ Ģđl ´‚Ņĸ" TC@äW! öw1A{đ„Eé~‚t´—ũRôŊ 4ËÄp[ B>\ ‘3:Œîļ#ũ/ŌWV˙ōT=Ģi$G°$;ãjĢū—č.õ;8šRSí2* —Ķ'Čāf tGŠŒ‘ JZŋé}ŌĻJ29‚ C”äÜDDDDDDDHd†Ī*…VNIĶPĩÂ_đ‚ÎĐČēSĀK Ė#ĸ#™„s8ˆš6v ˆũ.¸^žGgeŅR8)63Ē$œ×›‹‘ æ]—EŅƒ˜š3F™XeQ‘ nE ЈˆĶøKV Éˆl3— „p<—GiŲ$` ˆ†„DD`š]$ǟ­/† x‘×ŅÁhsŽqĘVBY-ųɉ—Ąd× Át×émŪļՈ^h‡æJ‚Œ@ž‚ôŊ{ŽZ[lč/0ĮávfÖŠ}%]úá.ˇĻ!xøü$ģ„Ŋ-t—ö }l0]Á–Ŋ¤ēKô§z=U† āÉÉ&ŋáA/ØHėũ*Z #´ôÄ/üūÁRŽÄ Cá%ô ždöģõúÅ%Ŧ0t–ēIz›ÕZõô—†EØOĨZI/^—đ“#hģ#´#ŌŽ+ŌūĢ˙ūäŖ#ĸ<]D|͜°Ų¤Ģ^‚Uē¯Zû™Ŗ`ļŽĸ:.28`Žˆų+G–ĩŨ*đ’}+ߔŒŽ3#‘|Ā-†‘„JĄ !¨I­W 4ļIl'õ02<]Dt\)Á˜GîŋÁÁ°•Ždj‘ĀdxÂ#ĸ Hė_p•ũ+øJ;a/`—b .Yę¸Ū?ųM¨˙˙˙˙˙˙˙˙˙˙˙Éē˙˙˙™*Q˙ËwĨs0…ĸ„ĐĒ'šĨpŠh*ILŠtZ€Ģ†”iZ€Š’"€°”‚æˇDGi7‚néĮĨ˙Ë9s8ZōÎC\ãéZˆ§ôYņPsŸ] LFĢÖ펔 ~–‘hK„N; +„‚pėBb’h0L!ˆ–…œNõʘéĻp“ ô.§ĻYÖäŪĄBY‰n ‚!Ļ ˆl(LŽQÄČC˛âa´ Š]! g`ž „ĘâĻqÂa4“U+Ôl!xtĶd’Uĩ2!$°¸I™Wá ° ˑ„Hd••D"×ģ2­,–(Dšâ85ĀŦŽË˛8–z#āĻGČ莈éGgÖšŠyް#‘|މtU‹âŸō­ē.ËÔ ÉŒ§3’†"#^A5æB@sƒ‚Œ"ųĖ…Y‡_õøDįr‡;ƒhÂāŦ!øšqf‘˜,°p† 1i‚ˆ(PYRú_U ŧČ  É ŅŅŒFhDD҈Â~žŋ­;ę˙xKĖ–<D`˛čzžŋ˙úéč‚"b=—×Uũkôžø„ú ŧ.‚úúīĒ_ĒʘžĄ5 ô›Âõõõü+_„¸ ũÂz~œœãŌK­ëôŧß;…éë§A5ĨiŽ‚^4zÂë…]}ƒ1*Âū´Ŋ&Ô/KĖ8DČá4Ō!ô>žúëéí"° —ˆ ÷šé˙u¯é×Ōž ú_D'˙ūŋúĶũa)ú ˆ{~—„˙˙×˙Zúô¤Ã.l­ŧ„z>Ģč&˙˙ë˙­}Ʉp0kEÍs d§ØP´øKŌ˙˙^¯Ö•sš˛8†ÂāÁš#å;åÅÆ´¸A|%×˙¨W_Udž` ĀÜÆn8Ø">.įרKŌÕ˙ū§äŦˆæCƒ#ĸ9ŅÃhŽĄŅ" 0.BB-?ŧZ t(í!/Këŋ‚)ŲŌ1ål Y4ĖfķFvĄˆĩׂ~Ūô–놆ÂāN\("‡!\Š8‰ ÛdbČǞ2#†Ų#ŖėĀ‚!”9 Úãœs…,ą`„DkÖē_¨AŲ ĀæšķÆr0ˆčŽˆfBÃ9dVf_ë_iyåŅQ) Ą”‚“5ÜČĢčû#„0„„G#ĸ*Čņ2 Ķ"°‹XˆŽûũÂëōã”įĄĖänBB†aËšž jJ\L Û\ŗ$ 4‹LZ`¤-uš.¯__…ú^d ˆ‰é˜)UwŊ%˙ûã…_ūŋáp¨‹īī@žŋ„ŋ˙ë ˙õ˙](O™Q}"2Ę_ūŋ˙÷˙õ˙ Áiņđ—¯ØK˙˙˙ū3‚ņ ŸĨ<ė.žŋa.˙˙ Kĩûųœ-úĮZ^úqØAņ ˙õÂŒž—ãÖŋéöĩė;ũ/œp]īĐAū˙å)}Kà ĩˆGiø0_īëĐZû˙kúøøX Ÿ˙×ûōÚ¯˙Õ|%éiMąwõ˙˙˙I×ĩūŊKúAi˙¯˙úõk_åaõkdŖ#ƒI.ŨĒ×ëī_ųŪë_âŊ•žÉŅĶ0 ĻihŽČų2 ŽEŲM „Žú˙˙˙á}˙’2>GDp3 Y â'ađŊW˙˙֕T#Â3J@˛>Gą‘ķčšQ™œF ĀČ2.‹ĸã$Ų,o^ĢUøI¯ŋzũŪ™8!d4` ÁdŽ‹Æ#Kĸ: ‹BЈÂúęEoTķŧ…“äatGĖeō:RGˆáš`dp<ÆGŒ">Ÿ™xŧy&Gdtmt]—V\Ëĸ8!2ˆāh ÄtGČč—3ņSdU•¸DDG÷ũyV@Ņvn#ätGËĸ˙ßérŊ’ˆöAXˆˆˆˆˆĩ˙˙Un˙ÁÕŋ˙˙_×­_úßëß˙ZĨīú˙ũ…ŌKëīīũõ¯˙ķēßū{,OÛú˙ëģŋë°Vŋ˙Áũ˙ĮĨũīõ_üi˙„?_ÍkõéW˙{ī^ēÂß_đēŋãôŋ¯ũu×÷ÂĖá~˙ëēŋ§Ö‡…˙˙Ũúč,U˙ũ{×Úé|đ÷×ũ{õ¸_˙K]¯ũ/Žũw×M˙ČGë˙úūžŌ×úũŋū˙˙k÷wvkF€ŅK˙ī˙ũz˙ũz˙ČÖ]‘ÁšpČé˙ũũ‘Xé˙ũũ3X-‚Ąœo#Ŗˆ„:W˙˙ Ã02œ):=›dts6).Čá€D æ‚ŦÖaČe9‡ƒ˙ūŠ’ŦŽfĐB$2Fåqܘ)‚ŒW ũb""""""""#÷˙MGFÁ˂Ø6ŸD|ŽˆčÚ"Œ“d’Æ"Öũ%ûûŋģL&GH.Ëäpl#ĸˇ˙˙éūvˆčØ-†ŲÄfČS ‹u˙¯ū¤­Ŗaœ¸‚ėŽŒČ–Bøę˙_ũėęĖ":=—G00\ÎÁY„Z˙˙ÚynŸ.ˆã#Æ dv]_.¨]ÁgDa#45˙õL‚g3Ē/ĖŽĐ×#†a€Á¯Đũ+™ĸčžaGĸė¸ƒ4Žˆá 2$ĘĖ"?˙ˆĀĖā„Â"ė™Dš#‘Y3ą(Â.a Æ\ vGÍÄIŖēˆy^Ÿ˙ä2šNHƒŽPæ­Ė˚ÄEÄDDDDDõАļ"Âú˙ۏ÷˙û˙ëøf ˙˙ū""@Ö9S8įë×ŋ;0†""$6ą˙ņ‰ ŋŊ¯ū$s c[üGÔo˙ūß˙īūļd…9oÕxˆ•(ŽŅß%ˆŽ‚—I@yi8)|´ĒGAÄG^úOqņ˙˙˙˙äæŖųmbŦ˙˙˙ųĸĘ?˙˙˙˙˙˙˙Ęéh¨˜DáäāƒtģŌ_ú%ęŧ_­Ö’B—I(ŠD¤„*RßÄ7Iëz']P}%ëúúéwJ•Ĩà Ķ´ Dļrl:ãų]-ly’]aqAķ˛ë2?-h˛+ņÆ>WŅߖõąeēÂ*Ņ7+Equ–āĢĖĢDxĀ,Dtl8â:j§i#vG €Ō0o+âōŨi¤yDDH*šIe’—šéîWZÉtjˆá’ dt#_,Ã[×+ú=à ų3—Ę[˙žv‘ķq2hŽ3Ã5d‘ˆ˙ũO"ėŽŒ2@‚;41 !Ĩ kåŊ˙ų[ Ë0g×ãõüƊÎé‘ōčĀdÄpæ2;6Œ#o<„Č˙úgXø9#†Hr;8‰3ũĄų]+û˛1FˆŽGƒ$LDtNE*k˙÷åŸ2H“9‘Ų°É ŗ`@‹ ˙ūMÆgo¤jG2čō'eŅô^1˜2]ú˙˙ũd͞Œâ"FpZĐū˙˙û˙˛eãØdč Ã×ŋÉjū˙˙ `ˆ‰ĀĀįãš9)Ž‚o˙Įúúüė.Pâ$Kj˙IÉÎ?˙˙˙˛TČčŽHčŪG2:"…_JĶ^ŋ˙˙L¸…à  ŒŠ1˙Másŋŋ˙ī˛aĸᐇŅĩ˙ô4˙Û˙’LÁ‹ŠGEà 6fh…ą¯ũ_ &ŸūĢØ&\B8d‘“V!ŋ˙Ģĩ˙öR•›F Č b8—eŅė•1kʓ˙˙ß"G˙ī%ҏÄo.Čá’†V".že˙gj˙ûU˙š$Ëɔ莏g˛œˆānGádr<ˆ;Äkū×ūŋ¤lą¯üČY0×#ĸņ34„˙\¤W˙ūÂå?×É^GdpÉÂ;.FŅ!qH”M ™ˆ°]}¤?ú‹q{ī>ˆč¸dȏ˜1Zkī÷ũoūŋû‘Xō0 Ö` ˙˙˙귑‹÷ũåZ#ˆ¤t\2ā„|¸ĨdĘ §›˙õúūņũ~d&äē4dŌfۘOŋŋũūáoüî՝ú@ÖČ,—…Š„/OĄ˙O˙ū6˙RĻDÉL:w&?ėŽšK_ë˙du‚ đd.ˆčŽˆņfÄŊųuõĄĒ ˙ßWØ\īō”“/Ų ƒ"ŒDEß×ߡ[˙˙×āÁ}ĻEà Î_ß×ęÂé-ę'#ų2XŽŽá‹UÚĪúũĮ¤’˙÷ŽĻō8dQdt\Îũ/ü ãž˛0ZĨ˙˙ûČÖr.š\R|Â#ĸ:3ĸ9‡žU˙ iŌ˙˙ZŲԉf,ƒˆˆˆ´—õà ĩû ŸI•ßū¤-^w¤a‘à g2:3"ļĮo˙ž>~“t’˙WíAōZ‚eŅ€Č SfLa{ũo˙AwĐUÂ˙ŨŲ,2ėÆ]" qÄDDH Pã’KkéŋŋúMWȑOŌ˙ÔôGČčđd‘pĻ"9†-kĨ˙__ä#đŧ+_ z“Ķ!ĸä\2A˲>G†\CਈĩĒũˇŨ˙čkÂÕae^jF™.GeÁl5Œ2;.Œ"čŲC@ˆ‰ûŨ×˙ĸ” ˙ø\vM7]0HÅÁA€ÉB8„|ŽDqN„\fhē#ÅĖÚ4Ė"0ĘÃúę•×ĩú[˙ä à Íäq‘–4b"" ˆˆK߯×îˆ\ũüŠXRSȏ‘Ņt\2CŅŅ Û´ũkUúūŪĄ}ëĒäb.‚†˜åY7(rXPįâEF˙÷ûĶē˙ KŌŌ[æBņŅ €ÜŽ —"!¸äP DDkßũ%ķŗÕz^>‚û^D†´d¸Ž.ČĮ(a j8Ķ×ëū¯ā‡ĨûúW•„\1›";#āÄŽ@AĻd#á^˙ëų+Âŋũü,"tž“ũzŋä,˙Âõ˙é)028drų|ŽÍYÁ5õ žŋ¯°CKÂ!:6ĩüŠ Č CČÂ*ŒD~ŋõëOëø_ĐNŊ]}’ᐠĖ#˛ų1õŠ1i-§ ˙č-tuëČP7#áZã–9C’AĒ#ÚEũ-÷IpI%î˙_Đ]í*†ã”æÔ†u% ˙Ĩcô”[0á?ŋëZtŠy&2ᐠ‘Å0DqŲb.Ąm¯˙Ĩ­)+Ōūĩč-2,DpÉ3C x.¯Ē_ĐP–/ˇū­n’„"AhrjĻÚ×ÕÂ˙tĢéPZõ˙Ņ4Ķ!€Á€ČėôF˙Ž—ũ!úJŋŋ;?V‰b#įà ˆâ˜D4j=Ø%¯ë’ęR˙Ĩāƒģ@ÍŖä_#†@j˜š‘ļuˆõūŦBßékĨ ˙UįjA‘ō:#ĸD|jÄ$x˜d!Ąô[nV@œs”•!+zq×˙˛˙;Z<ļĪÄí—PW KqEēļ GÖ!}A…ÕA”É{Ļ?;* ?‹gt¸×Pä2ĀbŒN~Ŋ¯^ģWaEĢ ?ū[ęŖ˙˙˙˙˙ųRž@TT¤ËÁá^­ p|€ŠEpbš °˜\.ÖŌ]É`.v-ØA¯Žög›õtŊ,ŦåÄ#ĒÚiĒũ Âeķ8Žĸ:8Š@<Ĩ0xíHXˆĐ6"""$AōvPáËlh2č2>` ŖĒ.3áųŧ".Œá ¸‰r aÎįˇ,sÁÚJB""""?币‘2Ė[H‹Įa?‘l”īš’ Â[K;q„z˙h¤hīž’O˙QtŠŋķ҇ęŋ˙ōæ3ĖËHģßųĸ4Ī–ÚYÃ8`ƒ6a „ø‡_ÉÆfČį ŸúǍ^‘oĶ_fb„CIQŸļ–čŧAÃÂËŋãFÆD#äūũôŸÖ´›ū“˸f˙Oļ—^=ãĶū`ęŪ?ã˙˙˙˙ūŋûÛKŪBwų "¯÷¯ä%~ŋŊ}ú˙ë˙Wēūëû}×˙˙ßēõ$[ų˙¯˙ųŨ˙Õĩ˙˙üW~÷¯ˇ]}ĩûŋSi{ÔâŽÂM¯ú×SjļŽÖ+g8aPa$ب­íĨlŽXkęĮąÄǨ;M{a„Ŋ‰ĮqA ƒ‘G‚ Ļļ  ÂlPA´ÖÂÄCA‚g]f{(rˆ""""1˙ü% 8V ŅÚtG x(üPįr‡)L€˛PdYˆDDhāÖ9‡*A $DpĐG ĸų.„duGÁPŽ!„""# (ė¤|ĀˆČ Ė„Dd™ƒ8Č!Dųhō#į€đĐ\ÆXR<ÆXtG Œē#Â2šĀ‚ų”Ö¸Œļė š‘2ČņĪp,0c- ˆŽˆá‘‚5DĘĘ0†i ļIædÂ#Ą–Áؤp=&ØZķDānˆŒĩŸ#†Šxæ"2ÔBčDFZ`ŦGÄeš#™tGFÂŽdxŽĸ;#ĸ:#Ąf$!ą–‚<#,Ļh¸)™Ąd GÁHDdÜ,ÄdØÕĖ8Ëqb#Ąˆ˙˙˙˙˙˙ōÜYFZ ˙˙˙˙˙ūYĒÔe¸"˙˙˙˙åļ˙]ū¯˙˙˙˙˙˙ÎÉxÎ":;3â#5fIšãŋ˙˙˙˙˙˙˙˙˙˙˙˙øKŪú_÷˙˙˙˙˙˙˙˙ā ø ´ ´ õnŦo´o(,,leptonica-1.86.0/prog/books_logo.png000066400000000000000000000550461506303110300174000ustar00rootroot00000000000000‰PNG  IHDRnæžėjYíIDATxÚí]w|ÕŅ=÷îžĸ.K–dšãF5̀ ˜Ū;H„H€P“P>HĄ‡Ą›ŪģÁpīŊɒeõōúļ[æûc÷I˛1ā"™öæ÷{ȸŧ÷v÷ŪsgΘaČYÎrÖ'ļĮËû—ĻŖÖųŽröͤ•R€&ō_š  "hšˆ4QšZ˛ÎĐũÖĨĢŪ СéšÍÜcĪYÎz×öymBŋtÄē ĩ\" hF ´‘“H ­Ą­@mǃÍ䡸×-å[eÛPŽ´ĶpģZj6Øuå(ŠŲ(Oą!ĢRå¤Q¨Áĸ āœ‘m0`Œb˛•“ĒgäŽfĐkĄœuÍuķ›^}č×âۆâ9ûnڄw–`ŠKZxķ¯%tĄ&”˙g´ŅEę˙Žn÷@ĩ*ޟ°ūĻjŨ…4ēūåˇËX_ĀU6Tš:t`ÆÖG8‚íįI>\j(I (ĨAšęžáŒQđā0LÎf0˜Ü˙sÎČâJ4€Ä"Ļ­ŠŌîœ\ŋüÅŋxƒ“˜œmk;āŨvčôâeRÖĸÅ#™Đ& Ã`aŊ›ąåŗP6Ü!í‡>¤4dŖ ŨâĶ‹âÃôSh`Ā’”kĒ/ķ=8垺- ‡ÚÅŌĶPA‚’D PDūësĀD7 0˜&‡aĻÉ`šgÃā`Œ@Dš¤ģ†)ë#íÆ^m¯ŸųéOũ>öm|(9ûöYÅF۔ļ(€ū*0Œ"3Tt[˙§X•Q†<ŖP„‚lõ ›<č6)čeqjīXĀúļŠŊ (yŦuXĖfŋO:ÆYŽGũ]GÃsžĢĄ…)-”r\™iëvsģô::¤O)i9)n„MÃ,Č3#e%f¸ŧ<”_UÉCÅũ`„ n⏉PˆÁ fˆÃ4ƙ?”Ô`ZļÂKŧé¤×>üÆŊ'ΐ rÖ×{ÉĘūfŪöáČEķŠ˜U˛<d¤*%![\čjĻ&ųhæ2SŦû6‚ŊÂĄüå-ƒŽņĮuq~žåĄĀą5ėŒ‚t%´įB éÄVĮė%ąĻĪv6Î]•l]ŪH¤ŌģŧāF|ˇp(ZZT>xĪaũĒĮ-ėŋ÷ŪŅĸ‘;ĀĖ‹*Ķw pĶ@(Â1˜!X€˜Y)yéĪYAéOûŨŧIVrõíū÷ԏ‚ĪÉKÎzÛ(8´DĪßpÁđH2×Ę$Ppāų ’]éL1 @€ķm÷¨ˇĘCųÛÄd8–‘—'ūGËĨb+Ŗá¤5\˃ō(akĢmÁŌ–ÕĪŌēfōB'ĶŅ @ @*ˆ|6[õØč,# , YŌoān#Œ<ú ’ęÎ5ķ e†  Á0 „#á7ü7‘BC)‚t5„§ˆdbĒXpõŒį1=,9Û6ōž]#‰ōX­ĖŖ0´´ÔPI ŨáAwJ ĢÄŖŠ‹ĖĐūŊ”??Ö2.&"ÚöĖd42i '-ĄÂĩátŽXŗvŅ}¯6­xw€&͐¤$=<’Mųž€€|ÅĄHqÕč}/>ŗ¤ú¨ŗx¨¸Œ›ađ 3â‡CÜ` "H \%$´ %<ëŦ™uĮM-Ģ?ꮔMĪŲˇÃF=¸G$^ÖQ+#4€ øü‰ÔĐ)Ų.AqŦeĢÄ“ŋ0'8pŋĩflÉ?ēîąÎË:Đ“–CCŌ)T\ÁIģ™ŧdK˛qŅŊ/-úđęĮSĢfX `u(ņĀ+Ų’‚€ Š•ÛŅV7eNĻ}æ‡%ÕÅ%UãOEõ‰æ…‰¨äŦ¯Ŧß ÕĻS`_J ÁũUOš = 8 äh É:õ\÷āāĩŋÍ×ģYĘߟO…;2ęßí;×s5’˜(+ĪNÉ­Ž_ūŲ5˙M´,Y ~ú+ŪËန`ĮšÅcoũĻf‡ ˜Q2đ¤Ģ ]XŦ…Î ˙Áiß3QÂIég—ˆ`Å>YT7÷Š‚€DķrK?g}CŦø(Dhæķ'Á*ū.ÆÛ› (7?Ū\Ņ’ROYŠîŲ É¤F*.!­ ŧL ŠæOį-ųøÚĮ<;ļ ĀĘĀ#éë\ēʆPË>ųįÃCÆÖ.ŽŪū˙āĄūŖ‚*D)@R@k¤ˆ¤Š7>˙JíüĮ_OĨwBDEŒąT¯-2ĸ<`ŒŲŊô~$cĖíķ BTÂKä bĶ?ŌŨ'Ą˙ÔÅ6mƒb°o ÜđčēԘˆžæj>Ūąu˜xŠ$D&dã;Ÿ-˜tÕ˙Ŧ^mØviÚ,ģŪQŋđ…;×Í:cĮ˙ņonØG+­„*¤@ZęŽú'žiXúŌ;A(Vđ9}~‰ņ^ž7Û`]ëƒ{ņ]Į“õˆBęzž‹> ˙ĒŋđįGÖ§¨đWķņŽKHĨT7˜X)¤[?€É2K´āëÉ héLŦnŲŠĪŽųšrë>é-ĄĨãĩ×?ūTÃŌ—Ū°ĀĒ ÛūDõÁwĨođûmԘ_œã›6ÛEAwØCŨŋEÁ“#úžĘß&&y†=a+v¨ãid2 ɘ‚ˤ!Ŧ븊ēÅ_÷Hā•,ƒĪP˯÷éÁIļ­ŦáĄH_ĢAĘqZjüoãԗ߀_Úŧ@rSÃąŪ w˛ĄNo…;ÁûeļE¸|V.ÜŲ,¯.øŠģ=ęy |Ÿ<”NKŨę*~‚;Ŗ‘˰™„ËÔÎũĮ“‰/‡_.üuƒI×3<ė×S Ē8ĮVēyõ}ˇÖ|0)đLÖŧKŽ$?gÛT>ĪĀR7Ŗō˛/äPŽ}´ũĘā—kE°\B&ŖáĨx™4¤kŖmÍ˙^īX7k^:´C‡˙nâw¤“ë–ßũdGŨ§ĶÎd-üĘܘälÛÄáD]B=ÚŽ Uã;ķlPޤĄ\šwhM °2vJBÚ¤kÃM­X]3įą÷ᧆ[°Ašņ×i†Y4 ÔōdËĘĮ›WORÂIt ;…ũ­mēĘŲˇPĨ‹/éô|oŌÆišMF(8–†Ņ~ŦcAKmkž78íëŋi›ôŨ{°(ønåđ3‰€/qs`’ŗ¯#ÜĄŦČrĐŪ }‡ĮŸ”Ģn9$.ÍsĨ<`ÛÂō œ ”pā$—¯Ŧ_úÚÔLßĀđA‰?#Ąr@’ŗ¯ P˛`ĸâŨĩ(´ÁßųÎJŌ3nȆuŌ#XAyŽ_ž.:Ūü~ŅZž™ĻôM Árö}įPĐÍĄ ¨”í‘FĻīĸŦ—åšâÁÖc<2P Áu4´ãA:”đ ÖļÆoĪ€ßsÎü9ËŲĻ„==<úîō'ŸķPŌ.~­n)ļMP…–H+؉ų Ĩ—ÉJäú_žÂ2÷\Ã!e?Īv(GTHG–jŠķ•Ļ°ŌŠ4¸#$Ôę‘njK[m‡>ôü7Îģ˛fŸ;ŒdrĻė=Ü8ŧLËRÆ) Æ %ķ43ã‚x“PÆRĮ1fŽmq§ũāg“›°ŠîžąJ Kë‡@Ô#@ßĪđŪk Ũxr˛ĮrOŒ†TU¤%‚P¤:]buŌ‹VŲÖüã˙÷Zë–~ŗ.@ųÃũëvétÍãˆZžĢĄ<´ũkŠkž67uru_bą^>’'2GËÅuG {ˇ°-BȐ/ĒÃ|ĄÃqp€xX+Žļr‹Vžsę{Ģ…ķÚŅOŋąüë܌éš Œ¨Ž3!Ú~lØķweZ„h 0íûō,¨øgĀLD™ėUÛétįÛ{LmK…žüĪk­/ßöŋÚÔ×ĩfŽ{´#,5†’ÆvZĢa’hĀJ‰tĻģ68AÉ@8Z”&IA“)āI )4¤$xž†”¤UX+ĘãĖ~Ÿtzōû÷ŧēį3ëņÖAژ6ôÍ#^ûˇË KûXŖ#y›Ŋj˙Ŧ\ĶMĩĮķáJîŪqÄk“>DˇvLŸ›3˙ˇ;0ŅôĮŗčt&ĶP HOBzšl—Į†kšÄķŖ”Â4L&ĀÀ¸ Ŧ°_Ņ/’9â†ŗŒĩŋ8z§ģ¯üwķï|ܙÂ6*ß˙Ãũcl‡7´š‡HÍĮ2Æ(°bÃāĖācžnXvÔ"hEP ĐĘ×@–Rû?=@x€–$5´’ ­Á(ņaŧéŊumkĻ$A­šēxĀŌÔUvßÛ9žæ^Ņ/ŋ­ķĸĐĘÆ XŌÛŲ.´#üŽ{­0aá‰Ļ2M0 ¤@™Gn—G^ŸWĩæĮ‡•üuÂSŸÄ&ĒÉ1¸ę‘X¨%&*flOšāē„LJÃMeāĻ“vN|Áĸyī^p=€éđIŲXâļËO 5tÜÄےģ"™‚ŽĨáY,ĄE=W+”WßŦE‡CJ”032„‡+GhcxĩU† ƍŅ0ƒ†OŪI íIÄ wōĮ,uÍ/ĻĖ…>l¸ėœųģŌŖũƐ×t>ŖdnŌÎĀN ĩh­š´H͟ąÚ]šĸŅkJY:6 ­ ŲîНø>ûl¯Į•öcĖ4#„žįB(@"Ŗ—M[n^~ô•k?@Ĩņ˙poM‰K?Ndč<Įå{ 3;Y1€ķņÜđ§)DB Üđ1 PВ „†×Õđ\ é)()Ą…IZIHģqEĶĘGŸŦ_øÂtøZ°đKēĨėž]"VŋöZÂâÁ™"5(­@S`ÍXĨKoĩĀ’ũŸC˛Ąõ—æēØõ,aU#™„Nd`;JÖzVũ2é4ÖKŲĄÄ f–ŽâáA#XdDa8FÄōĸ@4`~”Įƒv<´Ēôģ˙ŋûûÂšÕøŠ„‡ VÆ'(˛=‚!DJų7T+­ ׎_ÜŦܘŠlhsĪõC#Íą{ųŠĻãK€:pã6Z…Nŧ(“ŸNlk›6§#Q?ŊžîqīĖ0įų§­ÚķįŅŌī’”ģ‡3X~( …ÆÁ”Zü cEū¤Éã÷ēũ éŗū_{´WOxąøwG2w̓†—‘Ü8213Ģ%}ÅzũŊšéEZáWDg׀ZĶâņÉ 3áÛ^Äûí˜7âēSō~yĀŽî‘……ž ˈīšc(‰ęŽÜ9ũō‚ĢîÜõ×-7÷¤WŽåæ§âf[ÜŊ¨-c\™ļtĩį„+Ą¤2ĶÖ¤ÜX'Ā 3Ú¯ÜČ+Ģ3 #Ä s„" ĻÉa~6F)?Ãé9J;ÉxRIJ Ļ<Dš+7‘n[ķĖ;kæūīãHęƒû“Ųđ'ĸîP‡ąõŠiģՇÚŨ׌ eõ‡:ĶûĄĶ_‹VĘŖ3É9ˇÅZŪ›ÚĪFIt‹8EPQ:âĨgMp‹‹ēŠŗ|DB~HÎ8ũ=ķČ EŅûy; ?ëÆ%ĩ_*Ÿj€íŅ‘Zž_(”“ VØĩ[Úā×väR˛’˙ŧæ´pMÛH$ĘĐƒj#‘–ęE•üėæÚē—›-ˇ~6Ŧ ž~Ž‹îöîim>YÛ´ôI4Ŋ}õ˜a'ŸŖJ/é—Č”™Žō"@؇ ]=w§=Æ˙Ãj<˙ÉږēŪzŪ‚ķo1ŨšĢá%ƒĖÄŅÖä:7?ë=wßÛąā Ž NÎL°˜˛ĩ=YíßĐgKíúc—Ú /=ąä°ßŸ€›Ģû;ũ͈B€™]~=ã0ĮVÛXõPÉû]‘úEk\ouØ57îZSĨRÆ>KÃÉhH;•‰ÕžũņÚEÖžvƚėwgĖāÕÛžŨā~r\A˙}•ápČļMDÂFˆÁ0ü+‚ā âņ†OįÎyũ§ķŠ+c!0Ƙk'\áÄãÁķm Œz\:(šīę.j ‚ĸ­-l‹˙ķʃ#kÚ'"‘Ž@k ˛ĩ­7ķĮDķŗĪÕˇL ¯žĢŨã~›SÛâ+Nk‹OŋdÔāc.ĶũūTĒPÂQ€ƒ1 †|a ú‰[øôēaÕ§=R×4÷‹Ž×€]ģâZM|$>á$éH(átĩ˙'š?šœh]2+@bų}“Ė?Žē5ÜģÉTZ;á5ˇŖ-%ŧK“ ũsõڗĶB-BwīP{īÄ ^nđ`ĶâŸt$-0ÜÉ{E ÷ÉwŠŋ!ŪuŠ1ÍŠP`cģŊčŅúƒEI+žĩ§ģˇāWw†tËå)Āë„HÅŅ\g[į?h=øÔĮÉIŖ[,+ũ\NVAΐšļÜ­é°Bŗö‚CōMUd0€I–¨đ5:ËĸbĖÉûFvûĪûâ]Ąļ\íũĒGÚ.ę°ÃĪĻ- Og4Ŧ¤„Õ2oņŧ7~öīÚyŋg%æÂõ‘SíĢW4,}éCčöyEũvŲ“!Tĸ$AI% J3(Ą <PūĐídžíËkį=ö”pK='ąJK§.ؤMÁ‰˙…ā9Ļ”yöĨÄŠ˜•¤p4Č" Ã:1ßÛ" ČÄíWmLž‚ŒU‚ÖDs;S^úgíu˙~§Šã#tKu4÷đ.ŗęün´‰éÉåĸ,ŧp9*D,’}f¤4HhhĄŋF(6î9;ūϧiŖž˛ņ›Ž*ļDŪJŖ(āĪ%(׃r]h᧌;×Ŋũnēŗf^pR}o3<™[¯žÅlM]E–´tĀkjCGJéĢŌM?_ßōAMØž DVv3Úk-§u‰á|˛o´øĐ<2Cę.—ˆ”$!äĄ|Ŧ=`!wŪ]įx[Lpz /øgHˇ_ ™ŧdēņFK_ņ¸ûØ SĶŲ…¸&X„›z€hÎü5^Ķ€˛č깃ô‰dšĻęög˛ySĨPR#Ū3:üĄ÷ŊƒÅŊYëęĘ˙vÜwŒŋ:.B锂•điœšøŗ‰'ŨīĻÛĪĸއ—˜ ^iÉxķĸZ;štJŋę}&"å ígw¤OȒVĐR›ecŽ>ĸbŨ’‰¯ī•čá­iĀ>ēŋ)#ÎĨāēAaˆA€Ĩ‡€:ą@l6 ¤īēúˆpcęØNí1¨Ļv´'Ĩŧ ŗūáÉ­ą)Á3Ŧې×؈)ÎĖÎäÚí4uCĮ8HI$+āyŽT0Œ) Ŋ™N}ļ1úƒ ‰aBŗJ"?¨AK‚&íˇ] ŌJz™ēgį|/-ũĪkoÆ2W“ëq¨ÖNēxąw&Ö7gÁdu°ā6gŖk™ŠíÉEQĮqŌ K*čŒĪÎ#ËĘ3ĄĖ ũKŅĀûāOŠÛėŲJî‚ / éļßCŲ€Lœ’M6&~('?9%59đŽę6Æ lâĩ¤˙øxâ­ĢC÷l 7Ĩé$ũ”s‡elĨwęķ—į_  › ø•ĩĢíøCJ× XŌŠöä⏎x¤W›Š>’ Û/(XËąÖ5ŸÎiXüĀ/ĩHļ)éA‰l&D­W0Â#ÃOŨķØģ¯ ž'ÛTQQPĢ{TČöH#o)ŋûÚíĖæôãL¨ŌPGɤ‡GĶ­ŋßŌ1 ž¤ČæôÚi™KŽ~ē1,Ū&O€ąáš–"XR#Ŗ€œü3.+Úžķzƕ6F@“‘Ŋ6­ũ|a€Ak%˛Ā÷’MÜyíąĄļÔßáy@* j!‘ô°@8õ˙XS÷rā•lé&Ė.rįÚÆŠĶ 2ˇxRÁQíH'ēOø€ÅfEģwȰ+ôÃfČ2Zķ/>4L͡Ay€˛7tĢuõ"~ë[é×áwfomĶ'ČũąÛ×uŸH‡  x •ß$Įũt-1āāQō’KOŠöŌW ×˙¯ķđ„gÜĻ$Áĩ5ė´‚r,tÖž<5ŲļryāâˇnΤXkæ<5ĶOŋށ´ˆqpÆÂÅã.1îœára›z#@îēü-°HKâ>&TYЙ„ŗŅh‰ô#íīžåēĀÛĄÍ= Öâ’Âqaģ )O!é)$ĨFF„2 &PŪO7ļö¸Ôl¨ÎN2S>Äˆ‚-A=hčŽÉī ´ßuŨ€HkæHÅÉļXvĖFŌ"<ét~(‰ęždk ū€}ūōÕļDågRžTОT0@ YÆ}ėÂ_Ÿ^Y6aSxįŒ‹KÃÔü ´Aģ€HAdŌČÄŧ5_M¯īŲ…Øm@rJy­GpĨĢARwK—õ ˆōĪGרB1žåLūŊĻ8nã^Ĩˆ{Áq4<[Bē–jZõ֌€|ėØ Ōš83_Ŋ䨖7˛ˇ‘!okāFŒāF$Z>ä˜K6Į3ėŠ­DŨ{ië<åŋ]ú+îĐŅä‡[g)Kâ/6mÆY _Ē#ŗ…¤› Ls´Jے„„'‘ АT)Ĩ0Bä^2‡lčĨpĨP­ĩ?^kŋ°gC֙qƒq#Äņ=õNōc™Û™ƒIžũ˜¨“vį›mSŅ=.¤7R @již÷w­5!˜'$ũįÂxā=šŠåŸÎŠ˙8÷W.đÂpę*ƒÜ‘  ŌČtēp’’Ū]&fŖ{vRoĨĨÕų÷Åf4&C/’"(A~ƒÖg`œē6Ũđĩûí?œ øËĀQ°Â =ÅÆhí÷›9ļ†ö\ˆL{2Ū˛xMĀqØ[ä™Tûԛeƒüûˏ?Ž…›¸a‚q3ēŨ~ƒw>qßMõĻtđŸn0Yŋ§gsmŨß˙PdÆėkĄ$āē@*ے°<)ž5Ũõļ8q2¤ ĸ”,Ąq!W„Œ’°”€Ŗ5ōt¨j\4o¯ ī—ũ ƒP'›ŅŌ=P”1€1à FņŨRüß´ĶāŽ?f$ė3!ā¸@<+åÁō€d­JŲ‚ŪīmRį/^õn[œŦ ĐäŗíP*{tvUvs Ɵ_Y~€ĸ/{>ÖÜß7Šķ7€„´iÛđŌš[Ņ1mĨۓHîMķ–4÷)‚Tšüė†QāŒųŪ0ų•ŖŅgāŪØ]qߚâ´0.Px‚āxáŨ^<&Ütv2å–l&5ī­ëæ{ņîĨÆĀā—§û;Æ—<āDe›jn(§ä‡:[~3KįLæaI 8.(cÁņ4RJ:Ëm{Ŋ傓ų­ęjORaFj$ĨDZŽÖdH:3Xįė;ŅđĪ)™ôĘ ××DQĨĩ‘ā]ėķ.c8 GK ƒøũ•ļÔAČØĐņ4lWÃ+´W<Ā zŸŦv 㠐zŲ uĨb5öÕEgnø† Œ:.`Ú-†RūzSܔ€ki´$ŠÍōhk6ã—Ō?ú[įŦ˜}ĘŌūcŒĀ‚-Š0¤XīôģŖÍCnlš”w‚+1T ŋįF -„_ĩ*’™€÷ؚ‰ žđÖ=ÖŽP°ü{"„F(oø¸ā~G7ÅCé.nÃVWąņÎĖ/H*Ā“€å@Û„Ôˆi‘¨Iۍ ŊŲ5J Ÿ5¤é„Ã.Ôĩ‹e]”ö$RB"­4,­u2 ¯°Ö×n֍žÛŠŨ6Ͳ_u4­>¯ (â¤ЃĖNOîŨe8Ú¯_°`ų÷K:nŊlo3åNRŽ J[PiŽ+!ĄI¸Ų:„žPœ×÷4ĩŧn…Õj"­H)€ņ`Š< -†ÁntŠ vũ".ĨũŗķŠC2ū´ëg\„ aKhWŖ#ͲEk}ĨjįĩŲæ]Õ]YW¸Į4!‚ī€8„ŽN˙Ī…pļĮNUŌ¯æÂ÷N ¤_4)tŨm1‡5ķĨ 'ƒœ•Ô“>ė0Zi€Uö>hSÅŋdęíØö˙ûíŊ!ĨßTäx~•fHBe+`7ëļ]ōĶņ­'ųTtÚÚåĄåÉÛívH¸qĄĐϤõuL˙n˙ŖÕtí VęzON0Ā‚ŋ&iíd‘˜XL`č.FbŒ3˜ŅōōĀ5đ=)l3cöYđ$iĀrA– OÂįH).u'Ö¯<ėUû¸-‘Nī8øÍBû…nŧË{d 0ŌĐ`0ˆE÷Šä6™™čN“vYž™9܀3ØĪŅI@{PžŠ”$$R›ÜWĪUĪŦŅom_Æ;LĻËģ Ũz` $ #‹ąGaiÍ=OÚßūcYAĘããķIÍ{ŲŌn„ÃŊ†nĻÃá°>ÔŦ`ôzĖjđ“H,’ŸW:dp:VÁW¤u6Áą•ßĖēû CŦk;Rú7N)ĀPš´†Į´‹Mœ„ģņâhl=ÁXģ”Īlœ@i‡šiO#å)ŦVÃ+Ô9ũ#/3ĩɓkáëFˇÜLļHsŖWe*RIĨ <ëÚõ á™ÁĀC$`u€ČߋÉq™;Ž0iiĶąĘ÷Údšđ$Aj‚ ­3ZfKŅûĒ6G7GÕ+ˆ.Ļ€7aŒŒĀŲŌĀ(Ų{|atØô´ĶŌsQŅĸ_˜N˛á°€!Đ.¤§ ]ŋÖH(–­œėŗŖ îL´žôháĖ(ôŅ=ržB6ė‘@)CåąģģNœĄVõĖ6I^8ÂvY5ūVÚ/ĪéZĢ…EŊ’+Prc•ŋĘ~ēU>ąˆ #”_ ā+ec#4ļȄן%ė PŽ¤#@žđ%ē;–ŋTî´ūĒķĘō›“§ŗ)Ë/'ėĩ%ā9–§žĻâË^‰)ÅĶķ$Q["mQŋI…|ĻV˛МĀT0' ŖĀĀ9Byƒ€b~/%‘ÜĨ(ãņæ p<+ Ĩ¯“Z}ŦYûdkûŒCëō†Ą9Čē>Ņ–KsøÎáĐîĶáĖ_”Ķn…‰Ė>]Ԃ’€–ĐŌ¯ …&ūģõĩöŠJ+cRķŽö?ĨGz6Øt>?K|TÛ1ČtdÁŅuÅ@-à †īJSp׉üĻ;#RT-Ē,tR­[}āyNûŧHx¤ Î#Đ=J(Čīo#­ŌF`۠ؓynˇåNP r´PūŊ B>Xø ÚË~˛Ģš.vŸļö4JÛũ´åÁķ,AXíĨÖ>ŖâĶŪM%gÖÛ^}%j ŧ‘Ô—y#(§^uÕgŨ7į~ČÃ8ŒhUuŋģ Œ5Î_ö}žņö ׸( íJhIPZC“š&3ēŠÉûę{ŧĐĐn];ĒzŽ(č~6ä{)D†ˆ2KúœšŨ›ÃMW‡´=ŧĢB•˛€B é?÷¨ųåĩŊdԑáSG–dcęāŽq˙xĨ€ąÕ¨ĖŖAō‚ ĢüZIpí“ŌZQ7.qn÷]í¤ZC،J֍Yŧ~zÀ]Æĩ‚…‡ˆųoZų™ "OK/ŊM EÆęo:ĸ‚˛‡ˆđ5Y( é `äõôĐZsŧÁcÎáŧŲšĖø´æ0fJĮƒ#4ŌB9ŸˆÄ‚§ŧø§v$iĸö@˛ÉŪČFEĬ8šAq˙eũÆXāb3p#ZĐĐŪccķ?ÛV¨üĩZ"Ŋ3‰@4_iįAkÖNāŧČäy=h€žmGôt–2NérĄƒĶŨoZeÁ0)à J° 2x—ܝŒ˙l˙‚5¨Ę,2o‘…–€IČÛP„į´it ´Ö…DAhθâĘq{Ā/Œ mmļ‡s¤”ö=@Rž:›îHHŅŅ‘‰Õu`öļIۍB„5ã` !ēúƒ"šį˙učĶV…ÝVYįēŠ•ŧíZ‰­Õl/ĶøZ{|^JČVtËjdŊŊt šSū÷“Ž#.\ļZi۟qÖúŽd6ė͈Ū-ZXYå¤[žë€Į)#Ot5ä‘fūú&ßd ”f˙ąĪd Ķ­$Nˆōũ "ŋŠ6[†/Iƒ‘ ŋ'Üh>īņՔėâ^8÷%ËĸTŠî ^_šā5€ß-güīú܈´ēđÆN6ÕPū€¸YÂX ,Bƒ_ÅĒĩB´d§ŨJ*ˇ˜h]^‹­+Đ#Ã`$$”ô+•ĩ„ÖNj鲀0Ūō4ûfĘĘœ\˙` Æ@Bƒ4ķ;ŅĩFTŗ‚šĘnšzmũŨÁŪ,EwZ[ŋ—ŧ‘.‘ŦŪöŦũĐE§§ƒT—ÖĨĻŦ˙ËũŌcn€1<Ô¯rČØĶŗīT=ʑ—ÎYo3iOšZRĢ*@ĘŊ’~H5 Üq‰åļH“Ú˛1 ue$+Æ˙‚ë{LZøŒJøüI€{Ü ˙œ0€’]6Ļ:Tļ wdÖŽįîŗŦļ*|/ž‚ĖōĩŲŋúîƒ'´B[KI _ŖGi8 Ęø đpQéĐ]Î8č áļÜCe,ęw +hé2ĐJÅ?™Žnąĸ-“Íũ'ZJō¤"ĄģĀYB;čŒÁ_ī€ßõžĀ<ø5#‹Ņ­‹’-`ėõ0Ũô“‰Éčw ƒéĀĩ' ´ĪŠôpāŅĀŊĪÁ¯uŋ.øÍíkŽKŲôF”§2˜į,č@×éįgi"č%ņ< ĪUp×URš$u^ŧqåM^͞:$ĩ€ëúĸËN*­Āƒ•Ę0„Ė,yاņē%kœĶFėŅ’FA:DƒCAA‘† ^6)wÃŗ”taJßåTŲ ŦũÔŗéJq…ģ ]Ņ$Â}ĖAƒ7ú Ëŋ‘~„@Âw´ X^W,ß3œPLÆŪÔ<´o×WäŦKå™´JĒ=¸ņą`Sm҆?ũo…\bũI´”~/•ĐJÁÍ,_Úąnæ’ dpļ˜Ķ:CR9Đdžágw`€1 ƒq0hėIycƒ%ĩÅ`× €‚ΆiSKW7 `Ė÷PüÂ?öaÜãū‰hŒÚcčØS÷^ģđ…ÆŪŒŊ6ÕÎģeų!×øcc;ƟŧÆÁHÃ4M€!“! ŠĻxœ†T ŽĐp]ĀÉh86ƒ Zk¸‰ŲO/xįĸUđ+M=¤´ė õ(ĀÁ ü¨ĐÁ‹Ĩû:Kĸ)Ä;¨ķI9"(ŌđĀ OÅîCęz&JË´Ė2īā÷Ņ08 M`ė`ļãÄîĖJŸ. ÍcūE]^ŠŌA$đÅm‹ąeO@Ąxˌ‰E•G]N0Š L1Ė—ā°üęQģuķķŪšî.lh”TŒšŽÍĻ•€”įúü™vŊÖē_‡ß ÚšY÷éËBœMØAJë˜T*i(VĀī„´Ë9‚0RGˇßą8đŌ¤ĩæës߸ļŨ Ô¤ŦMt„}t!įf¸jÄ §1Ú6+r;ãúEģŸpåĘ7×ĩ˜“::č¨dĖCĸS Ņî"“ˆwēČ$2iËRBûbQJC••ÂĶpmĮ’Đ…t]j¯yėŲī\ôj°đē6ŖÍQOŠu§į”Ī2c0¸‰2ęŋoŋâ‘č.pę;D1ãA¸H0H‚ō€`3í&HĩlH’¤V)t<[â˛įà ā&ÃÎåØ)ú͐‘éō´GЎ_N¯5P“ Fl¤ęsÆ ¯!ˇqĸ–Zú*ôūŧ ę֋a %ƒŽųEåˆvĀĻ”Æo,Ą"S”$S áāUžwoyåõŽĩĶgÁ—ĒHmžZŗoSđˆąvĄU„¯"GŠ‚Ž`0‚É X¨đЂÂ{#äÛ*€–NĶsˆ”žÅë.žō‡—ø,ēa€kŋ*T´ĶÕÛškĶōw;6ųÆnĄũđęÅClĮ¸¤­ƒ+=Y EĻE Gia“VŽ$RJ+ĮeHØ ´•_P’W6bŋũC&ƒa0hMA¨ãX~L, ™ÎOf­™õīwá ŌÔŖ‡†„Ãõbō„ī¤eģO‰ų';4üĒ&2v‹æíöâ[ĒüjčįžË´ÖPZAÁ# A„ît4hĩjC¯Q34ÚĢ-4õîŒëŽū fÜ`ā!Ã#Œ,×ŖûōōXZGúōt38īUČW˜WÂ×]ŌpÜųMȒĒzĸyՋˇõqÎqĪՌ1 ÚC˛ũ" āfqånükkÍ!?ŧ‰Mö$.šŗfpm‹qŠđ$”gŪ‰‡dëko×ÍûßĢ7ŅÖ+^œŪ 6[S†^RÆ^\+hƒ¤Áá×úœÃĐ Qū÷oqHÖK€B“˙wō;Ÿ7kf…ģ2ÎA\ûÕڜu¯NnĄo^áНĪģ°iųģ ‚Å×gJøļãvĸéšÚyOMŒ­›SæXEĘŗ ),?‡$uŅ]ĩ*G?wTŪ€ņûë(‡€į*¸ļ‚.”kC+vruü§5ÉÖõˆĩœÕŸČcŠÂœu÷rpø ÂĄÁÃČÛžt@¨/…1ö›}âÜ#‚Käķ' 40ˇfĄ'–o˜y¸˙ÅļÖ Ž6ĻįÁŲū æS(0 Āûš Uœ:>ēįÃXKāKXRßā"‹v5‘†táĘõŊ“u4 ~:ķs‚ØK>žĢnŸ˛1WDJ&<Ē Ļ_/TŒŦR;ƒ‘7xßöŪ]?vį>å+āš˙´„ëšÜ˙8U*׃t]hå!Ūôō›5s|Ā2øĒ|zŖūd3Ŧ⥡ãs&ėųI‘Ôg+Ú¸é7Š2†ãØÅcĪX1áéÆļô]ŗį—‡5\~"ˆ<­¤‚¯} Ā`&gq“1v*/ú |yÆmŪ&ĶPt[ŨO‘˛šHqšÖūKˆ‚­Ä €`Ėāũ‡veųāq#°Ašwo§7>¸¯õÁĪÆ –­ökˆ˛x~É0K¸:ČčH?Ŗã(~ Pz>‡"/đŽ6æYČX>{K*@jæwæ=<c0@0¸‰BeY\rú8•ÎúûY?Mėh ‹@܎Y™xŸĢēå™Ä¤¤mŦ‘R"~ŲŊÁđ(† ŒŦ÷Ũ~9°/Ÿ§0АÁuƒ) pÎkĢ15x–ö—ŦkÖĢŋ}0ŲôڕZē%´đ =×ļžįŒ–€YqāŊŽúøäËĻ\uĖš˙l27>ŪƝü÷šŨ.ž§áŽæDh^,…ũ­´‚´mˆLkŦnÁ ÷­]4ņÕ ũē[Ģf§ˇ.ësÚĮ VĻ 9_* å+V(ŗ`€É ˜Œ°‹.Ú÷ˇCĢęëÃūĢK?úG3‰ujíGTĖ0ęŗî7tô~×\‡MT¯Ú @Ɇ5›Ļk¨÷KĄ!A%´Đä_‘#ũeÍ}´”9=“Ɛ-ƒB"ŋæ¯;ėŲWį܃p_܀YĮ\dH^MÄĄ…€C@†4>ėŋP¨ŊnFÂM/øiĨIûŠšléqļ†![đÆ Æ9+Š>⚝žōXlĸpoŸãIP_ÁŗĀ¨ģ˙#[ôļÜ|Ą‰…q‡ HĄOiíËøEßA˙:Ža…g(ī‹´+K냥 Ęp´BJKØ HR˜k$>]#åōPž0;sÉũíkę:BHWCēžĮĨ¤ ō õ¸?ã|Hšų¯ŸœŅDy‘ŪË$o(¤‚—Ŧ$āe|RxJ'ĻM^…A(kmF‘P[ˇ`âssßūÕ/WMûÃ9íuŨžnûđ-;6ž›\Ŋڋ×ÖYmĩk’k,´:Ú[‚1Ŗū”LWÃą\[B{. ī}ÖZ3yf@ĀŽCoÎō&ļ>_B›‡˙´pMsKT>%ƒĩ(¤‚PŨüžÁLpÆąˇ(9íöáCÎ xąmrØoŒ´‘ŗ^šđ}O{ö!yž_čF] åĖ0qt5ɏä•mwæģđPzҤ˙{›?¤wŨj“AE\ đ‡>k$jhCĖû˛īIŋšˇâ“7Fīđødø\ø.%ķāˆ™DØÁÍßûĸ!ÕGŨSßôdĀåôÚõ‡ę åzđ<‰¤ÖHi‡ ÜmzÕÍŧđJą¯8Õå__sū~ëŠü¸’ÚA <“ty°â8~WuŪĝÂo|ļÄKĸSČĖM)Ą\‰L páM6ZoŸƒëčØĖЂ‚đ¨@"Ūŧ¨1Ūŧhvˆ…đ‹ŗũMú¤ËūËvtU8ä7ūyކkkøĩ- Sæĸ{ˍĶgëXÉąūžŲ[Ėšû „ÎŒ*ŖB1‚ÖÚ'dOÅHƒĮÉĸė:{ÚŽ­Š}Ŗ}üĨJÖė•ĶoģI‹ØbĨ”ßi)=ŋYˆŽJMĘę§0n旕 ˙Ņv<øĘƒ‚ŒĮ׿и_‰ē‹}A~ú;+äŗykÄûOĻíÆ¸!k…Ōp•†+<Ĩ Éīwō{{'ë⠋CFuo† +?æPžĐãĩå Ĩ5’ĘƒE.iõŞˇˆj’úĢ6>ŊđŠÕņáJķrĪ#WzÂņ_>§ĸƒv Ē”ÜöãP¯ēËé÷wŨ5"“gBx°:Ģ“ādׅ¸s9žjL`%ü‚ą-MÉęātĀOí.ƒßÃ2 žęô g=!ˆcs× áWõÖF\}ö) õéTÆBZj$”@š€Î7foēkh6åTWŋē?ņŅŦuĄŋ)~ HšāŲ>YÛ5â‚v,Ž{ú÷…ŋč-w9â5ßĘ<'â$5Ō'éūŖõxųíe˜?%ģIõ"›āą¨Á{ļh)°GĩđüėŸk+xi¯}YG+­Úmpđt/žnøÂA/Sˆaæ“W›IΞ]S÷Pƒ‘™ä‘Š;ŠāH OR:(ËįBāá#íō;Ū5ęOáŪ+‡ÄĸŊļg wŲ@ąlĘŋf&[Ūø-I7MĘ˜QYPA-iöHvꆙWU:ø¤'öûņSãk*ö9Ū…f:Hkå7‹’]ã&7ŅÄõĢמ=­ sŖ§W\E°ÁQĄu0 Zc|Ļđ'ˇo7üŊÁAčÚØuŦ͛āØbJ"Ž%2D˜É;?yÉMŋ?•ŲˆMoŌ$öIw¤īZĐjüGēĪ%x˙%lŋEh:fgqå-įäĩĩܘxwč_L'q´L ¤Û+¸iā™uxëžéxc ŽcËî§V"@K‚8”Ž3%Đūé7ääĘī9°×ŧLÆüœ.gë‡:F&y (`ĄÍŧŋ ķ$Oū. o§ũu˜Q@FJ8BĀĶ Š "įģē%—Ī1öõ[wĩē…¸ļČæė2zjpĪoHØŖĐŖÃũ̐Jĩ×}V_R9 >v8…HáN =GYž– ocĻ™?čđív=eˆōÚĻ%ÛVÚØ† oģpŪ WäũJk‚”AŒ,\héB Zē)XÉE32+fœĮWđōDbáØōh´Â ī+‰qŖėĸôã+`”ŒLYmy'–X‚-”Ō[vØag™+2÷x)1ĨĐŠâ¤1‡ĮfũĮMüū@ķ-)´"ŪĶ䴃w WV†ôn”ŋSļ›)8TC!„÷ØN1rHtåk3D͖xâŨ!W™é֛dÂCĒ•jėđdŪøÛ<\Įjôq l˙ƒsh*8 ]ŧĖ<ę­2Bų…åC&ėŠUĮ‡Šļą­^ˇĮW†ļĸ‚ŽĢSŨS0afbŊ´Zģ„4-LYņp)›;Ō Į4åK‚ߡLēå6xםÍGxčŽ2˙ėsĒËĮ:ĸĒūų†–ÖMŊīKŲ›˙˛ p¯‹¨äīŦÃŧnĒ‘zåĮ ͋Ņ]ĨžIōŲ˙w?,îĖā‘"?ķ•qÜ ųc¸iø]ŸĖ9¸pm¯õ2K¯žüŋŋ„-ėūÜ\;íŠ)ûÄ­ŌéÂõ][éšPŽåe Ũ @Z+̟ģģeå˙6æĻFĘū\]}龙â+9Áä`įę“banĀ`pŽWgî;kíš?Ĩ¤Jn*ҏú''3UģšÕØ7ˆ´mv(‰åĄS+zĮčxīY'õ€åÁĢ["˜*;'råžUōB“2L€GP„!œį˙4Ŗ3™ģ,f>pëËtË3“ėöMš냹ÃC^ķíf:qŠL‹.0imCæexųáx'ā9jĐģãOŋĐ?÷Ɂfé~ 5ņ˛,AOä+čĢ`îröĀ„J¯Ž¯{õ— ßŋiļĻ„ũÁÆĀl[ ŠW’ēfU 0aYøI<Ø|m‡męŊ`ōVŲīˆĶœ˛‡Ŗˆ”38üfÁH°CÜ˙ĩ™MĒ‚ i‡Ôœdž~;S`~ĒĸĄ•IčÃ`ö.ÅÅ<ą ™åT˛„ŗ#:Å,Š ÚŲ&¯ķnŖé’ĮÉEđ K;ŗįĻē<@Ņđ=Ī>Ŧlā)w2Ŗd0ŊY_x)´¸øs`Ywږ†ŠŊmwÎēnĘŗ.ÜŌS{SíäßOŪ'–,î÷îxPŽ餥„R.´’b­ĪßŨ˛ōÍÍ”ėFė÷ŗūå')J˙¯D…pBŒ#Ė8BŒ ~†G&O.\\ė]ũŗĨĢßĮWČ=Ŧ8æđCP›šmã!Ž5:•ĀZ¸ņįĐöü×ū8j°•ķk{\KŲE‡‡Ž>k¤ūKE>ļcĖĘBų ‘ŧā×aĀ5ŒĩVŪũĢÚ"Ī{uKũ† Ÿ>Ũ‹ģŽĩ3sâį…ŧØyĖv‹ !ŨAČ´3kąô†ŠxvQ#]$lj[€IözžxÖC’õ˙y÷Ž@ā);Ö°Ģo dÚMΚjÚŗ?} _Ü đåöĐČĢ`§.AREŌļÜ Ë>)Ī T†%Xh!ĖĐTF=¸Ņ ÍÚ`đ \„ä1üi鯆Øs'ô+ųÁ˛ôžRŠŒxPäf Ä 1†7uÕOą@ōƒĀ4ãļf*I$=(Æ!‘Gž*ÖB™.<­‡Û|=n™–qïŅiFˇ2ūfÅP@aé€]v:ö‚›Íčč#üŅ/Åį3ÃŨۊa‚›&8g0LƘvÃHO"ˇáŪOžûíéXCŸ4/˙ģÉ?čč(ūŦÛ3ą =Ģ L( â­/n  d=•âQyáĪÎ+ģrgˇđXF(¤•ŖŲĶ!x…8×Nžœ)5^ĩ ĖifÔŦ Gĸv˜ņŧ<‰á<Ŗ÷7:ÅÉ-˛M°Ôä4@˛sVãâÎY5ã‘Uؔîú;ļ/„-îöh—dt’X÷ä0ļ~&Ȁú„8Á`Ed¸Í}?q7bbyđü_ōėYđ +Ž-.:â`Yøģ!T8–zhøø‰%ŋŠÕdĖĀ‹á]eđ+ÁĄi E„:džGėÍëŗ %Ÿ=>įl ËËā õë7h¯ŨŒ<é‚pū.Į0fFĐĨ”o‚1Ü e9–āa1ƒÃ0YW%Ģag0oąaˆy&ķ˜ļĘŦVŌjõŪ36ZXtÁߗ3 ”đēžÚÁq1Ūvđ+Ãöļ2ĒPz.”›ō|īDK¯ Lˆ\WÉXĢtë;'?“j[üVp“ÄŪ 3HÅUíŨ}O3˙¸ŅŲ§JF‡ŒšŒ! Ö&!hpæË@dÉm†4œt ŗęgĀZøą—™ĩÆŲd?ÚŅ7ƒĖ7å(3 8i7ž÷ūƒŲ„1Å´CE!ĒûPQ83œ# Đ@€– Ō‘pciÄjÛ°nz#Vžĩ”/ŦĮ:øēŲÎäļâŅŽx )ęØî`ەÃ]–%‡Ú6 đU!\ģP >^+* @:žq˙‚ 3„đYé ´[h‘ĒíŦ›x֒o›ũ•€xë¨~hNü n9âĒŠLt•@ą¯ZU uęSŦpf÷8L6ÅŖŠūGäš‹Î;e;Ų5‘ĸîÔ‚Ūŋĸ–÷üXRĐ`°ÉŗW0kõTfMũÔuf ĸÆā{d„:[S'béĊLJėĶoĐá?į™ĀX(?;Ė'nCā܃˜é ^ƒ›āYR7 o #Ѓ5Œ2ŒŠc)Æ([ddą|MŦHkÖ_+ę/ IĄā9:č4u ¤å9P‚)K¸ÍMÂ[Wë¤×ŽJw,[iÅë˛Sꛃ8pSë8ž XÂAšŧ @ŲöŅđđŅfh— ^Ŗ>xA‰ģ‚Šøŧ a€qt‰ˇ“Ō ™Ŧo\z˙jf>:ī+6xÖc(Á–K[ˆā ÉlæaÂá7–¨2‡īh†ÆUšs Õy0ŠÂÄŖ¸ég˛ĩr \‡éL˛­ĸv•’+š¤j Öa[đJ|ՁĀzaņ…‚TQ:p÷]ĘĒp\´p§ũPÕÎCĻ_ (į!>ßîs,,PÛĘΝaŲōÖė¨Ę€$#L˜#øEu)tE{ åJĪnétĶĢ×:™5ĩnēĄ!Ũąbjhvö•ņÍžzkÃf=–Hå ›,ĒPœ}6IëaL&xŲÁ˙gÜ×ÖÂĐãų†7x…Đ-Đ5É#¸üôz€HŸ\ßk %Ķîa)›ũ,åđÃ\›*XlYwš pšúE‹ĒĒ‹Ęw“WˆÅũ Ŗ Č0 š™_‰€…LpæĪķ´ö\ŌvFЌ íd´LĨ…ëtí–67ĶŌf'ÖĩZɆNļDĩ4Mŋvzœ˜ŊWJŗ¯ÕŽûoķņíiv¯åb¨•‘°Ō vFBš”gk'žxeûÚ×?mYũū|'ŨŪÚ#ėęy¨dÁ[÷Øl%cöũŨ9E•G_Ęx^3C0‚䂟ŊäAč“˜Žā&Ļ˙{îŋũ36ŋĄņ;kŦß;ëūGƒ  xåõĖ %zœŪ=Op/XN°Ā끨Ų_ŨĄBÎzŲn~ĸՈYúI—_ę:VF!•TpŌ”cÃMŽŠ_ģđ_ΎŦūh~¸38d˛ë${°č/đ°ËîxÜūFūüV#T9’™&¸é‡@Œ~hNY/EAK+U;ûO§ļÖLžVPļąËeô‘ „mā~Ą0ô—ž‚Ô*ß}ģüΚy"4`ĸĨŒã]GÃ˛’1 7ã@XiÄë_›ŧô“›ž%­ęāgėÚĐ=*ts<@Q^ņĀív8ā–;Íčȸi‚ņ cÉģŊP2>ēxŌĩ‚ŸûŪ{)Æ6üŦ,0ˆāAÛ=”,Ī‘%‚Ō=ØíLfcîjΞÃvÃ˙ZXFL´”qĸ’ËÖHÆœ¤aĨĐšæŠˇ–}ú×§A´~_PcâlI pĨ›J4¯|ųŊĒ?ŒŠ7Lih­@JqŖ¨yÅ oÁĪȉīûķâš%ûÍ´ą'L..Ũëí+0úĩCžIßkčAīÚé+0ōĩâmņy)u[F'k¸ŽF&%á¤+ƒdͤ™Ë§Ūū€%˜´`ëE‘(8ėæžņëK„ĩāQ?ĩ¨ģ’Ų_“–`ŧß ~ĮFO=ČJÎļ֊\āoØ÷:$ø^}(ŋŋˇî´g\ŽÁķü!mVJBXxV[ēvŪ}/Á¯r^…Ūm0ĖNZh™÷æoŽÖģū ĢĢŖu[F4¯x`vŒ ËJÎrö ĩ¤Í¯QRC Ī#dléúԙΙ 3ąē•gŌ›`ŌĶ$€öĩ ¸pëÔŽ?ԁļŽĘī­ÔÉJÎrևváíĢ÷´<ã0)ŗbŌūā6-<’°b —Ā'_ãčۖŲ˛úŖ:’ë`=‘ū…l;…Đ­[›”œåė›f—+1Š|u5Ī Túƒ™JVĒĄ1“m1ŋW8™ĩ/2ƒ,Æ˛Bį*Čöh(/eįŧßĖÜ-øF™!Î'ÍėöÔk ?záŨæĸŒĨčÄÃ*Ų™Įš~đ>åo•…ÖËvŸ:/vĖ͝5ŽęõJe$Üģœ{PÅė7đƒ•yŸĢ—Xŗ.S=eVįŲ÷õZCŅ×,0¯žh4]yū¨fƘ\¸ëøˇ^đĄe+Ēor.~öÍÆŖg-JÜķÂģM€7ā•÷›}ī“ļ{šÚÜĘãŽ|{ø ŧģˇœĪ–Õ¤y僖Ÿ<ķzψ‚ˆ~ÅKQáeˇ,ų×;SÚNÛeLqËaû•ßīzúÕ]F2ņ­ĻÃ?™ÕyL$ÄīŪ}ĮâLö36f W$Ģnēwå_į.Iė~æņƒ^8ųˆˇ2Ɯ oXxņ´yąĶ&ėUÖrԄŠûߜÜúÔŪcKĮŦ¨M_ôę-G‡L~ĪgscÖÆŪÛsu„XÖ#ņGËú7ÅW+č7jđžš C 2L#,ü”1I@k8ÖʤU }9Ã'(9ë ĶļãČÂök.uÉa?čßĶ™đGî}˛îØŠsãįŅGpÉ͋Ī_Ķ`WžûÃÁoūße۟ -Áßŗŧ4<ûž'k~öÍÆCWEXūÎ'm‡NšÖ~â¨aÖåŋqŲqW>|ÆÜĩé'˙|׊G>šÖqėƒĪŽ=ø‹%‘ōĒnŧwå=s—&O;tßūĪ˙æĖaä™-đÄ+ …ų†:åđ×ū訁˙€‰ĀĘÖNw֊5™G–ŦLûâģM{oėŊĨP)ŨŖî’ˆĐÕšn˜(îŋ×îčâÕįaĪiW}VĐŪÉĢũ`ԟUĨâ-ĶĻoC.įo9Rö›üpŒĩ™˙ž_Åz!cŦåĀ}ĘPą—ŽN[¸"UōĘ-% –%Į ­Îŗ?¤ę,˜Ÿ.>{økģīTōA}“SUßlŸīÚžggBä¸wŲĮ\ųZĪĪ3ŧ°åč*ČË3ėēû¤5ë2Õë}9[Uüįųú{ۜÜvęöÛ<÷“]T]íúÜęĘ‘†ąpEr(ågŋ˛,ŌręQՓÎ8~`ŨÚ&gæFÁTēĢ…'!])ü9Ėƒq‘’w¯}øöØFõĖ(ÜU)>ČŸOEJĀÍŦXŪQ7eēŏž÷–ķPžŲ1‹ÅŊĖÆūh˰ü9Ŗ†æĮį,I˛ûŸĒŜ%IŦĒ˰#öīßpĀ^eŸÛ¤Œąôm­š3c~ė„÷>m/€—Ūo†ÁvŨžx cėsdíî;ĪŲiTa|UmĻđîĮkÜrō ĸgŪhŧūßO¯= D퇌/˙ہ{—ˇôü÷ēpt柏ŦÁS¯5ūĄĩĶÛãé×&G#üCƗ7”…đ$€vvįį¯OÉØû¤C§(čä Kō‚ƒE‡ėö›‹šVž?~›FŸ–Ŋ[~-=’¤\(i‰öĩ/žŋÔŋš˛ûœ‡ōmļQT”GK,XžÂĖ…q$Ķ’ĪZ˜x…1Ö´ąŗįÎ%`œaųŖjlKŠŽ7>j}ec×í‹1x@­Ļ΋uņ†ÁXIqč„>RsBažŒŖû{B_ND…ë… GW?ņ“ŪPÕ?ŌōŪ§íĮ˙ųގŨōīUŸųûšOŨúāęķg,ˆƒ1ļŅp%Ņ4íu’n›Z (á‡Dūā{fŒŲŸSū{%€Rôa_ÚYZp@*eœ­%@­’­oŊÛŲ0kē•ûsMĒ9@ų–ų"Ҝ3˜įėKWĩÖA­g <̐D_öžy÷8M ķĘéķã7šé›/ÛūžÁĸÍoNn;é“Ų‡öüˇáŅtŲš#nēūÂŅG]ņ‹>(īŽōŌp|YMúž­ûĮß\u÷[ˇVmėsįžqUŗk˙KڟTŠĨëÂUĘ.°\¤tüųûžņüŸákīô:¨œsĶÂ!müŋžíĘuĄ¤ +1{îڏŊ_Ŧš5įäå[oMmÚ:=”—†°įNÅ8pīr”‡ôn;Ÿ”Έęũ›™ К°ãČ€')Đ%ÅĄōC÷íŌÆ˙~kmT•G0a\YŲŽB4ĖS§]ũģcĒēpīą%ŦYgå?˙vĶ/ŗ^Jk‡cNÛY=u^Ŧōč*jsÖđŋŋķČøĢūvųüųĸ1ŋÚk—’ÖY §M™ŲqÎ\ĸZņŲ-˙Ô^l‘V>oĄ¤R>Ą•ö{ö.{áAįN™¸ã„ FÁ'i{…S9û†ųģ5ˇđI養<Z:pĶKWŦžyë#đį ÕÁī†Īy'9@ųV8 z˙qe{nJ4,X‘2vUDūd8nžt öØą˜–Õ¤Ŋ?ĩ}īĪŋÎY’ØS*ÂŅTdāŒã‚4aÖĸÄûŒyK“{.].ŨaDAúԟ WAČÃ"!îí<ēčŌ Îö<œyÜ 'vYXķÁÔöÃ˙ķ|ũĄđäk÷?]÷ú‹ī4ŋžduĒ"āqäî;–´üü‡CžūŅą3 †W>h)øĸËo¯›Ūkxõ7$ĶmZ háųS …įkk Ę M›•‡ ÜåâŠGž˙Á˙?éæ‘[,įŪ8Ŗđ´k_ßĐdNMÅÅ(éZPŽ +6gņĒé7Ū§ĨŗūĀĩMa›”œ}cL7ĩš‡\xÃĸSznx"ĒJ[ęæDRTŽ]4{ôđ‚ÄøŨú%ÆīV:ģŊĶË{ņŨæķ—ŦJUõøûė–V°`iōđĒōH̀ŠČKpԄŠ9CæYŸÎî<ėž§ęN ęžpõŲÜÎǎ?nŊĀļU^EYäŠęĘŧ&ø;”šžŽ?ņŌē)ŲŦĐūãĘVwHåãŽŖķŪü¨õ˖ÛoW@kíâgßhÜņųˇ›îųŪP×`ƒTõĨ]˙jÅgwĪnŠųī•×^ã§l](ׁ š•đīEAHŖŸ2_Q:üôyĮ_6ŌŠ—Ώū‡ŋŸtđi—ŊVņeārŅŋV›ŋüےág߸ä´^Ŋ䉆ļ‚Õ--tc&éäI;iĮ܎ē˙Ŋ´lĘīN|.|Š„6l›*Ũo•å˛<ß`cYļƟ2Ģķū_]ˇāô‰o6Ί„9~˙×%ã_˙¨õØí†äˇ¸wŲŒą LŸ{`úüøøˇ'ˇÛÖé=ōČķk§eŋũË‚Ļwž-åu@Åã§5pė=ļtŌ‰‡UŊzįŖk~üĀ3uˇ/ĢIīņŪ§m™Ú‹Ž˙×ōņ –ĨŽŲgˇŌšcĒxâÁ›žüģž~Tõķ–$Īž>/~Ė‹ī5_ôĶ˙ųĪw-˛ŽŅūķÄ7ooluöxûã֌&ÂĢ“Z š¸öœŧ<Ã:öāĘ9īū÷‹4NŨÜ'§ĮfŸ>lˇ‹n1ŖŖ"ÆÁ´iŒK–↠2à mBJV Ây<™7ũ`:yâåK mŒéYžŽ ĪWš•¯ĒujÍJO‡=WAzĸk$‹›ˇ¨~ÉC/%[/†?šąŊ3öģēfsöM´ą'LŽŽk°_;pī˛äęŧ!īÖ>BkâD€Ãåĩ°wųE˙wŲöë•Ū?öŌē͟yŗņo –%‡EœsÎā ’ÂPæŒcĢ_ûՏ†^: ĸģVdYMĒę?ĪÕ˙ë•ZN°]UqhM’ôø]KëÎ9yđU'VÕU3ô ÷/ojs"\},VŸĐÔĶ úûVŸ~×cĩ=x|yíWėđÐÉųƒĪÖŨ9ņ­ĻâIQ ųąR„ОpæÜS‡ŧôë ũiōô&ŦĶ<ļwŪ‹ĘžĐ0ûc`†?TŽÜ×ÍNĒ4L€qp#˜ą}#æH'´´Ôž V>7ã{AÚM/]ŪZķÜ{­5΁?ņp-|§L.ĖÉʡPĖēģ˛ē"bŋz˙^åLí8åą—×Æ‚N8¤’ŸzTõôėŅī-ÆØ†ÍÆ[ˇn7sAü”W'ĩƓ‚&ėUƏ> böû÷˙ ŋHz#oáĩöÁgíãĻ͏éĘōûá‘Ōãw+}é ŊË×kzĐû%Mmnpu+VŸ°Ū)}ņM‹Ėw>n­(+0ŲONŌzņOˇ“qˇđÃi‡Ŋ5ĨmÜGĶ;t8ÄqäūũųŅTĖž0ŽėƒĸÂPz3Öj@)7#ƒīøÃã Ë÷>>ē33ĸŒë ãf0ŧ˟û´ĄÛã7ú¨ĸ•)ŠĨÛÚj%æ-4­sŨĖe€4 {ęá×5>5(9ËYō~Qøĩ'…e#FôĢ7.Z4bˇPtĐHÃ,íĪÍĸÆÍãĻÁ¸É{ŒŌ€T¤•ŌĘv´ˆĮ…ĶØh§VÕ$Û¯ˆ7Í_CZÆáĒu¤k _>Ė+g9@ÉŲwX"Ļ3”mWYRšëŽŅÂŖ ŗp ãá~Œ…ōEüą”DZ) r­”đ’ÂnmHĩ/_“j_ŲGvljV='I”œ}OÁeÑŠŽké96UĄ{–Sö•¨›é””œålŖkģį˧õ(tk—äĀ#g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœå,g9ËYÎr–ŗœåė›c˙ŽņĪîw‹IENDŽB`‚leptonica-1.86.0/prog/boxa1.ba000066400000000000000000000040531506303110300160430ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 44 Box[0]: x = 282, y = 0, w = 1832, h = 2697 Box[1]: x = 479, y = 410, w = 1862, h = 2322 Box[2]: x = 216, y = 0, w = 1746, h = 2732 Box[3]: x = 514, y = 409, w = 1711, h = 2248 Box[4]: x = 204, y = 0, w = 1769, h = 2732 Box[5]: x = 508, y = 409, w = 1752, h = 2248 Box[6]: x = 199, y = 0, w = 1769, h = 2721 Box[7]: x = 508, y = 409, w = 1728, h = 2248 Box[8]: x = 210, y = 0, w = 1757, h = 2721 Box[9]: x = 496, y = 409, w = 1734, h = 2248 Box[10]: x = 216, y = 0, w = 1752, h = 2721 Box[11]: x = 502, y = 409, w = 1762, h = 2248 Box[12]: x = 193, y = 0, w = 1781, h = 2727 Box[13]: x = 502, y = 409, w = 1763, h = 2248 Box[14]: x = 204, y = 0, w = 1763, h = 2721 Box[15]: x = 502, y = 409, w = 1766, h = 2236 Box[16]: x = 187, y = 0, w = 1827, h = 2721 Box[17]: x = 508, y = 409, w = 1762, h = 2236 Box[18]: x = 199, y = 0, w = 1775, h = 2715 Box[19]: x = 508, y = 409, w = 1763, h = 2248 Box[20]: x = 187, y = 0, w = 1833, h = 2337 Box[21]: x = 473, y = 18, w = 1792, h = 2341 Box[22]: x = 239, y = 0, w = 1775, h = 2337 Box[23]: x = 473, y = 18, w = 1792, h = 2347 Box[24]: x = 245, y = 0, w = 1775, h = 2343 Box[25]: x = 473, y = 23, w = 1792, h = 2347 Box[26]: x = 234, y = 0, w = 1781, h = 2325 Box[27]: x = 473, y = 18, w = 1792, h = 2353 Box[28]: x = 234, y = 0, w = 1781, h = 2721 Box[29]: x = 496, y = 397, w = 1798, h = 2265 Box[30]: x = 216, y = 0, w = 1746, h = 2721 Box[31]: x = 496, y = 397, w = 1798, h = 2265 Box[32]: x = 216, y = 0, w = 1746, h = 2709 Box[33]: x = 485, y = 397, w = 1810, h = 2265 Box[34]: x = 228, y = 0, w = 1734, h = 2703 Box[35]: x = 490, y = 397, w = 1792, h = 2248 Box[36]: x = 234, y = 0, w = 1746, h = 2639 Box[37]: x = 479, y = 347, w = 1806, h = 2403 Box[38]: x = 234, y = 0, w = 1746, h = 2639 Box[39]: x = 485, y = 340, w = 1801, h = 2404 Box[40]: x = 234, y = 0, w = 1746, h = 2639 Box[41]: x = 479, y = 343, w = 1808, h = 2407 Box[42]: x = 234, y = 0, w = 1746, h = 2651 Box[43]: x = 479, y = 336, w = 1810, h = 2408 leptonica-1.86.0/prog/boxa1_reg.c000066400000000000000000000117751506303110300165510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * boxa1_reg.c * * This carries out various operations on boxa, including * region comparison, transforms and display. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static PIX *DisplayBoxa(BOXA *boxa); int main(int argc, char **argv) { l_uint8 *data1, *data2; l_int32 same; size_t size1, size2; l_float32 diffarea, diffxor; BOX *box; BOXA *boxa1, *boxa2, *boxa3; PIX *pix1; PTA *pta; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/boxa"); /* Make a boxa and display its contents */ boxa1 = boxaCreate(6); box = boxCreate(60, 60, 40, 20); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(120, 50, 20, 50); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(50, 140, 46, 60); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(166, 130, 64, 28); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(64, 224, 44, 34); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(117, 206, 26, 74); boxaAddBox(boxa1, box, L_INSERT); pix1 = DisplayBoxa(boxa1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); boxaCompareRegions(boxa1, boxa1, 100, &same, &diffarea, &diffxor, NULL); regTestCompareValues(rp, 1, same, 0.0); /* 1 */ regTestCompareValues(rp, 0.0, diffarea, 0.0); /* 2 */ regTestCompareValues(rp, 0.0, diffxor, 0.0); /* 3 */ boxa2 = boxaTransform(boxa1, -13, -13, 1.0, 1.0); boxaCompareRegions(boxa1, boxa2, 10, &same, &diffarea, &diffxor, NULL); regTestCompareValues(rp, 1, same, 0.0); /* 4 */ regTestCompareValues(rp, 0.0, diffarea, 0.0); /* 5 */ regTestCompareValues(rp, 0.0, diffxor, 0.0); /* 6 */ boxaDestroy(&boxa2); pta = boxaExtractCorners(boxa1, L_UPPER_LEFT); boxa2 = boxaShiftWithPta(boxa1, pta, 1); /* shift */ boxa3 = boxaShiftWithPta(boxa2, pta, -1); /* inverse shift */ boxaWriteMem(&data1, &size1, boxa1); boxaWriteMem(&data2, &size2, boxa3); regTestCompareStrings(rp, data1, size1, data2, size2); /* 7 */ ptaDestroy(&pta); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); lept_free(data1); lept_free(data2); /* Test serialized boxa I/O to and from memory */ data1 = l_binaryRead("boxa2.ba", &size1); boxa1 = boxaReadMem(data1, size1); boxaWriteMem(&data2, &size2, boxa1); boxa2 = boxaReadMem(data2, size2); boxaWrite("/tmp/lept/boxa/boxa1.ba", boxa1); boxaWrite("/tmp/lept/boxa/boxa2.ba", boxa2); filesAreIdentical("/tmp/lept/boxa/boxa1.ba", "/tmp/lept/boxa/boxa2.ba", &same); regTestCompareValues(rp, 1, same, 0.0); /* 8 */ boxaDestroy(&boxa1); boxaDestroy(&boxa2); lept_free(data1); lept_free(data2); return regTestCleanup(rp); } static PIX * DisplayBoxa(BOXA *boxa) { l_int32 w, h; BOX *box; PIX *pix1, *pix2, *pix3; PIXA *pixa; pixa = pixaCreate(2); boxaGetExtent(boxa, &w, &h, &box); pix1 = pixCreate(w, h, 1); pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCreate(w, h, 32); pixSetAll(pix2); pixRenderBoxaArb(pix2, boxa, 2, 0, 255, 0); pixRenderBoxArb(pix2, box, 3, 255, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); boxDestroy(&box); pixaDestroy(&pixa); return pix3; } leptonica-1.86.0/prog/boxa2.ba000066400000000000000000000435031506303110300160470ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 376 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 0, y = 0, w = 0, h = 0 Box[6]: x = 1070, y = 128, w = 1617, h = 4049 Box[7]: x = 250, y = 175, w = 2531, h = 3793 Box[8]: x = 355, y = 134, w = 2374, h = 4043 Box[9]: x = 209, y = 105, w = 2263, h = 3753 Box[10]: x = 465, y = 140, w = 2257, h = 4043 Box[11]: x = 268, y = 105, w = 2222, h = 3747 Box[12]: x = 465, y = 134, w = 2234, h = 4043 Box[13]: x = 244, y = 111, w = 2246, h = 3741 Box[14]: x = 465, y = 128, w = 2257, h = 4049 Box[15]: x = 279, y = 966, w = 1740, h = 1984 Box[16]: x = 919, y = 943, w = 1815, h = 2025 Box[17]: x = 337, y = 134, w = 2106, h = 3113 Box[18]: x = 535, y = 122, w = 2170, h = 3130 Box[19]: x = 227, y = 134, w = 2217, h = 3124 Box[20]: x = 448, y = 116, w = 2263, h = 3142 Box[21]: x = 239, y = 128, w = 2217, h = 3130 Box[22]: x = 524, y = 70, w = 2188, h = 3142 Box[23]: x = 239, y = 128, w = 2205, h = 3130 Box[24]: x = 495, y = 128, w = 2217, h = 3142 Box[25]: x = 227, y = 116, w = 2217, h = 3130 Box[26]: x = 495, y = 134, w = 2217, h = 3142 Box[27]: x = 209, y = 116, w = 2234, h = 3130 Box[28]: x = 477, y = 99, w = 2228, h = 3118 Box[29]: x = 227, y = 122, w = 2222, h = 3130 Box[30]: x = 477, y = 134, w = 2298, h = 3153 Box[31]: x = 233, y = 116, w = 2211, h = 3124 Box[32]: x = 460, y = 76, w = 2246, h = 3153 Box[33]: x = 233, y = 122, w = 2222, h = 3130 Box[34]: x = 460, y = 140, w = 2321, h = 3147 Box[35]: x = 233, y = 111, w = 2217, h = 3130 Box[36]: x = 460, y = 134, w = 2321, h = 3153 Box[37]: x = 221, y = 128, w = 2240, h = 3130 Box[38]: x = 471, y = 145, w = 2298, h = 3159 Box[39]: x = 239, y = 111, w = 2240, h = 3130 Box[40]: x = 465, y = 70, w = 2327, h = 3159 Box[41]: x = 233, y = 204, w = 2257, h = 3049 Box[42]: x = 465, y = 41, w = 2327, h = 3188 Box[43]: x = 239, y = 157, w = 2252, h = 3095 Box[44]: x = 460, y = 93, w = 2327, h = 3142 Box[45]: x = 471, y = 157, w = 2019, h = 3107 Box[46]: x = 465, y = 111, w = 2327, h = 3118 Box[47]: x = 233, y = 140, w = 2257, h = 3107 Box[48]: x = 460, y = 99, w = 2333, h = 3101 Box[49]: x = 233, y = 128, w = 2252, h = 3113 Box[50]: x = 140, y = 58, w = 2641, h = 4020 Box[51]: x = 239, y = 134, w = 2246, h = 3107 Box[52]: x = 0, y = 58, w = 2781, h = 4078 Box[53]: x = 227, y = 128, w = 2257, h = 3113 Box[54]: x = 465, y = 111, w = 2327, h = 3136 Box[55]: x = 227, y = 111, w = 2263, h = 3118 Box[56]: x = 489, y = 111, w = 2304, h = 3130 Box[57]: x = 227, y = 116, w = 2257, h = 3118 Box[58]: x = 500, y = 105, w = 2292, h = 3136 Box[59]: x = 227, y = 111, w = 2257, h = 3118 Box[60]: x = 495, y = 145, w = 2281, h = 3159 Box[61]: x = 390, y = 105, w = 2100, h = 3107 Box[62]: x = 483, y = 140, w = 2286, h = 3165 Box[63]: x = 582, y = 105, w = 1914, h = 3101 Box[64]: x = 460, y = 105, w = 2333, h = 3142 Box[65]: x = 268, y = 0, w = 2508, h = 3974 Box[66]: x = 448, y = 0, w = 2339, h = 4177 Box[67]: x = 256, y = 0, w = 2525, h = 3863 Box[68]: x = 448, y = 0, w = 2333, h = 4177 Box[69]: x = 273, y = 0, w = 2508, h = 3863 Box[70]: x = 442, y = 0, w = 2316, h = 4177 Box[71]: x = 367, y = 0, w = 2414, h = 3863 Box[72]: x = 442, y = 0, w = 2339, h = 4177 Box[73]: x = 285, y = 0, w = 2496, h = 3869 Box[74]: x = 442, y = 0, w = 2316, h = 4177 Box[75]: x = 367, y = 0, w = 2409, h = 3869 Box[76]: x = 442, y = 0, w = 2327, h = 4177 Box[77]: x = 273, y = 0, w = 2246, h = 3869 Box[78]: x = 442, y = 0, w = 2339, h = 4177 Box[79]: x = 378, y = 0, w = 2397, h = 3869 Box[80]: x = 442, y = 0, w = 2339, h = 4177 Box[81]: x = 367, y = 0, w = 2409, h = 3863 Box[82]: x = 442, y = 0, w = 2339, h = 4177 Box[83]: x = 268, y = 0, w = 2257, h = 3869 Box[84]: x = 442, y = 0, w = 2316, h = 4177 Box[85]: x = 372, y = 0, w = 2403, h = 3869 Box[86]: x = 442, y = 0, w = 2350, h = 4177 Box[87]: x = 291, y = 0, w = 2484, h = 3869 Box[88]: x = 442, y = 0, w = 2345, h = 4177 Box[89]: x = 413, y = 0, w = 2362, h = 3869 Box[90]: x = 442, y = 0, w = 2345, h = 4177 Box[91]: x = 419, y = 0, w = 2356, h = 3869 Box[92]: x = 442, y = 0, w = 2327, h = 4177 Box[93]: x = 367, y = 0, w = 2158, h = 3875 Box[94]: x = 442, y = 0, w = 2345, h = 4177 Box[95]: x = 262, y = 0, w = 2263, h = 3881 Box[96]: x = 448, y = 0, w = 2350, h = 4177 Box[97]: x = 384, y = 0, w = 2019, h = 3875 Box[98]: x = 483, y = 0, w = 2316, h = 4177 Box[99]: x = 384, y = 0, w = 2025, h = 3886 Box[100]: x = 483, y = 0, w = 2316, h = 4177 Box[101]: x = 303, y = 0, w = 2118, h = 3875 Box[102]: x = 442, y = 0, w = 2356, h = 4177 Box[103]: x = 378, y = 0, w = 2013, h = 3863 Box[104]: x = 687, y = 0, w = 2118, h = 4177 Box[105]: x = 303, y = 0, w = 2083, h = 3875 Box[106]: x = 442, y = 0, w = 2362, h = 4177 Box[107]: x = 390, y = 0, w = 1949, h = 3886 Box[108]: x = 442, y = 0, w = 2356, h = 4177 Box[109]: x = 250, y = 151, w = 1745, h = 2321 Box[110]: x = 1390, y = 140, w = 1460, h = 2356 Box[111]: x = 384, y = 157, w = 1606, h = 2327 Box[112]: x = 1385, y = 227, w = 1484, h = 2339 Box[113]: x = 349, y = 12, w = 1728, h = 3979 Box[114]: x = 1338, y = 209, w = 1484, h = 2339 Box[115]: x = 314, y = 6, w = 1728, h = 3979 Box[116]: x = 1338, y = 215, w = 1478, h = 2333 Box[117]: x = 314, y = 6, w = 1699, h = 3979 Box[118]: x = 1344, y = 215, w = 1484, h = 2333 Box[119]: x = 314, y = 0, w = 1693, h = 3985 Box[120]: x = 1350, y = 209, w = 1478, h = 2345 Box[121]: x = 314, y = 6, w = 1693, h = 3985 Box[122]: x = 1350, y = 209, w = 1478, h = 2345 Box[123]: x = 314, y = 0, w = 1652, h = 3979 Box[124]: x = 1344, y = 198, w = 1484, h = 2356 Box[125]: x = 314, y = 0, w = 1693, h = 3974 Box[126]: x = 1350, y = 198, w = 1489, h = 2339 Box[127]: x = 314, y = 0, w = 1646, h = 3974 Box[128]: x = 1332, y = 163, w = 1536, h = 2356 Box[129]: x = 413, y = 122, w = 1548, h = 2339 Box[130]: x = 1338, y = 169, w = 1536, h = 2345 Box[131]: x = 320, y = 0, w = 1641, h = 3974 Box[132]: x = 1338, y = 169, w = 1495, h = 2350 Box[133]: x = 314, y = 0, w = 1693, h = 3985 Box[134]: x = 1344, y = 163, w = 1495, h = 2356 Box[135]: x = 349, y = 111, w = 1635, h = 2327 Box[136]: x = 1332, y = 163, w = 1501, h = 2356 Box[137]: x = 308, y = 0, w = 1699, h = 3979 Box[138]: x = 1344, y = 175, w = 1478, h = 2345 Box[139]: x = 465, y = 105, w = 1518, h = 2316 Box[140]: x = 1332, y = 163, w = 1484, h = 2362 Box[141]: x = 489, y = 111, w = 1530, h = 3869 Box[142]: x = 1332, y = 169, w = 1495, h = 2356 Box[143]: x = 465, y = 105, w = 1518, h = 2327 Box[144]: x = 1332, y = 169, w = 1484, h = 2356 Box[145]: x = 297, y = 87, w = 1687, h = 2316 Box[146]: x = 1332, y = 169, w = 1478, h = 2356 Box[147]: x = 471, y = 70, w = 1513, h = 2321 Box[148]: x = 1332, y = 169, w = 1484, h = 2356 Box[149]: x = 471, y = 52, w = 1518, h = 2310 Box[150]: x = 1344, y = 134, w = 1472, h = 2391 Box[151]: x = 500, y = 122, w = 1484, h = 2316 Box[152]: x = 1332, y = 163, w = 1484, h = 2362 Box[153]: x = 471, y = 122, w = 1513, h = 2316 Box[154]: x = 1338, y = 157, w = 1513, h = 2374 Box[155]: x = 471, y = 128, w = 1513, h = 2321 Box[156]: x = 1332, y = 163, w = 1489, h = 2368 Box[157]: x = 524, y = 128, w = 1454, h = 2316 Box[158]: x = 1338, y = 163, w = 1530, h = 2368 Box[159]: x = 372, y = 128, w = 1612, h = 2316 Box[160]: x = 1332, y = 169, w = 1536, h = 2362 Box[161]: x = 343, y = 128, w = 1641, h = 2316 Box[162]: x = 1326, y = 134, w = 1530, h = 2397 Box[163]: x = 320, y = 140, w = 1670, h = 2310 Box[164]: x = 1332, y = 163, w = 1472, h = 2374 Box[165]: x = 372, y = 128, w = 1612, h = 2316 Box[166]: x = 1332, y = 163, w = 1530, h = 2368 Box[167]: x = 367, y = 128, w = 1617, h = 2310 Box[168]: x = 1326, y = 163, w = 1536, h = 2368 Box[169]: x = 471, y = 128, w = 1513, h = 2316 Box[170]: x = 1332, y = 163, w = 1536, h = 2374 Box[171]: x = 471, y = 134, w = 1513, h = 2316 Box[172]: x = 1332, y = 163, w = 1530, h = 2374 Box[173]: x = 471, y = 134, w = 1513, h = 2316 Box[174]: x = 1326, y = 163, w = 1478, h = 2374 Box[175]: x = 471, y = 151, w = 1513, h = 2310 Box[176]: x = 1367, y = 157, w = 1495, h = 2385 Box[177]: x = 477, y = 134, w = 1501, h = 2316 Box[178]: x = 1338, y = 157, w = 1530, h = 2380 Box[179]: x = 471, y = 134, w = 1507, h = 2316 Box[180]: x = 1344, y = 157, w = 1518, h = 2380 Box[181]: x = 471, y = 134, w = 1513, h = 2316 Box[182]: x = 1338, y = 175, w = 1524, h = 2374 Box[183]: x = 367, y = 0, w = 1658, h = 3991 Box[184]: x = 1373, y = 175, w = 1501, h = 2374 Box[185]: x = 390, y = 0, w = 1623, h = 3991 Box[186]: x = 1344, y = 145, w = 1530, h = 2380 Box[187]: x = 372, y = 169, w = 1617, h = 2321 Box[188]: x = 1367, y = 163, w = 1507, h = 2374 Box[189]: x = 372, y = 157, w = 1612, h = 2339 Box[190]: x = 1344, y = 157, w = 1530, h = 2380 Box[191]: x = 372, y = 169, w = 1612, h = 2327 Box[192]: x = 1344, y = 163, w = 1530, h = 2380 Box[193]: x = 372, y = 169, w = 1612, h = 2321 Box[194]: x = 1350, y = 163, w = 1530, h = 2374 Box[195]: x = 367, y = 157, w = 1617, h = 2327 Box[196]: x = 1344, y = 163, w = 1530, h = 2374 Box[197]: x = 361, y = 6, w = 1600, h = 3985 Box[198]: x = 1367, y = 151, w = 1507, h = 2380 Box[199]: x = 372, y = 175, w = 1617, h = 2321 Box[200]: x = 1344, y = 157, w = 1530, h = 2380 Box[201]: x = 343, y = 169, w = 1641, h = 2321 Box[202]: x = 1385, y = 186, w = 1891, h = 2345 Box[203]: x = 303, y = 175, w = 1681, h = 2321 Box[204]: x = 1367, y = 128, w = 1449, h = 2409 Box[205]: x = 367, y = 163, w = 1600, h = 2333 Box[206]: x = 1356, y = 128, w = 1518, h = 2409 Box[207]: x = 367, y = 163, w = 1617, h = 2333 Box[208]: x = 1350, y = 169, w = 1926, h = 2368 Box[209]: x = 372, y = 169, w = 1617, h = 2321 Box[210]: x = 1332, y = 128, w = 1524, h = 2409 Box[211]: x = 308, y = 180, w = 1687, h = 2321 Box[212]: x = 1350, y = 140, w = 1449, h = 2397 Box[213]: x = 372, y = 175, w = 1617, h = 2321 Box[214]: x = 1326, y = 163, w = 1536, h = 2385 Box[215]: x = 372, y = 163, w = 1617, h = 2333 Box[216]: x = 1332, y = 134, w = 1472, h = 2397 Box[217]: x = 372, y = 175, w = 1617, h = 2327 Box[218]: x = 1350, y = 151, w = 1454, h = 2391 Box[219]: x = 308, y = 163, w = 1681, h = 2327 Box[220]: x = 1396, y = 128, w = 1414, h = 2414 Box[221]: x = 343, y = 163, w = 1623, h = 2333 Box[222]: x = 1356, y = 180, w = 1902, h = 2362 Box[223]: x = 367, y = 169, w = 1617, h = 2327 Box[224]: x = 1379, y = 128, w = 1484, h = 2414 Box[225]: x = 343, y = 163, w = 1635, h = 2327 Box[226]: x = 1420, y = 128, w = 1484, h = 2409 Box[227]: x = 303, y = 163, w = 1676, h = 2327 Box[228]: x = 1367, y = 128, w = 1443, h = 2414 Box[229]: x = 378, y = 6, w = 1582, h = 3991 Box[230]: x = 1350, y = 134, w = 1454, h = 2409 Box[231]: x = 308, y = 169, w = 1681, h = 2321 Box[232]: x = 1332, y = 122, w = 1518, h = 2403 Box[233]: x = 407, y = 175, w = 1588, h = 2327 Box[234]: x = 1361, y = 128, w = 1443, h = 2403 Box[235]: x = 349, y = 175, w = 1646, h = 2327 Box[236]: x = 1338, y = 122, w = 1466, h = 2409 Box[237]: x = 320, y = 163, w = 1670, h = 2339 Box[238]: x = 1373, y = 192, w = 1425, h = 2397 Box[239]: x = 337, y = 180, w = 1658, h = 2321 Box[240]: x = 1379, y = 204, w = 1484, h = 2403 Box[241]: x = 361, y = 163, w = 1606, h = 2339 Box[242]: x = 1326, y = 215, w = 1530, h = 2391 Box[243]: x = 465, y = 122, w = 1501, h = 2356 Box[244]: x = 1326, y = 186, w = 1472, h = 2414 Box[245]: x = 367, y = 140, w = 1623, h = 2339 Box[246]: x = 1326, y = 186, w = 1513, h = 2414 Box[247]: x = 477, y = 122, w = 1513, h = 2345 Box[248]: x = 1350, y = 186, w = 1518, h = 2420 Box[249]: x = 477, y = 111, w = 1507, h = 2345 Box[250]: x = 1326, y = 209, w = 1524, h = 2391 Box[251]: x = 332, y = 111, w = 1652, h = 2350 Box[252]: x = 1373, y = 186, w = 1431, h = 2409 Box[253]: x = 320, y = 105, w = 1664, h = 2380 Box[254]: x = 1350, y = 186, w = 1553, h = 2414 Box[255]: x = 471, y = 116, w = 1518, h = 2339 Box[256]: x = 1367, y = 186, w = 1437, h = 2409 Box[257]: x = 326, y = 134, w = 1664, h = 2339 Box[258]: x = 1356, y = 186, w = 1507, h = 2409 Box[259]: x = 326, y = 128, w = 1664, h = 2362 Box[260]: x = 1332, y = 186, w = 1577, h = 2414 Box[261]: x = 326, y = 128, w = 1664, h = 2362 Box[262]: x = 1361, y = 186, w = 1553, h = 2420 Box[263]: x = 332, y = 122, w = 1652, h = 2362 Box[264]: x = 1338, y = 180, w = 1524, h = 2420 Box[265]: x = 332, y = 116, w = 1652, h = 2362 Box[266]: x = 1338, y = 186, w = 1518, h = 2420 Box[267]: x = 332, y = 111, w = 1658, h = 2345 Box[268]: x = 1321, y = 186, w = 1588, h = 2414 Box[269]: x = 337, y = 105, w = 1646, h = 2368 Box[270]: x = 1379, y = 180, w = 1484, h = 2420 Box[271]: x = 332, y = 116, w = 1652, h = 2333 Box[272]: x = 1292, y = 198, w = 1612, h = 3974 Box[273]: x = 337, y = 99, w = 1646, h = 2374 Box[274]: x = 1414, y = 180, w = 1449, h = 2414 Box[275]: x = 337, y = 116, w = 1652, h = 2345 Box[276]: x = 1292, y = 198, w = 1617, h = 3974 Box[277]: x = 361, y = 122, w = 1629, h = 2339 Box[278]: x = 1373, y = 180, w = 1484, h = 2414 Box[279]: x = 361, y = 99, w = 1629, h = 2356 Box[280]: x = 1292, y = 198, w = 1629, h = 3974 Box[281]: x = 343, y = 116, w = 1641, h = 2310 Box[282]: x = 1443, y = 175, w = 1466, h = 2426 Box[283]: x = 367, y = 111, w = 1623, h = 2339 Box[284]: x = 1373, y = 180, w = 1489, h = 2426 Box[285]: x = 390, y = 111, w = 1600, h = 2333 Box[286]: x = 1454, y = 175, w = 1402, h = 2426 Box[287]: x = 390, y = 105, w = 1600, h = 2333 Box[288]: x = 1420, y = 186, w = 1443, h = 2420 Box[289]: x = 390, y = 111, w = 1600, h = 2339 Box[290]: x = 1408, y = 180, w = 1454, h = 2426 Box[291]: x = 372, y = 105, w = 1612, h = 2345 Box[292]: x = 1437, y = 175, w = 1501, h = 2426 Box[293]: x = 361, y = 105, w = 1629, h = 2345 Box[294]: x = 1356, y = 175, w = 1501, h = 2432 Box[295]: x = 390, y = 105, w = 1594, h = 2339 Box[296]: x = 1385, y = 175, w = 1466, h = 2432 Box[297]: x = 355, y = 99, w = 1635, h = 2339 Box[298]: x = 1443, y = 175, w = 1420, h = 2420 Box[299]: x = 367, y = 105, w = 1623, h = 2327 Box[300]: x = 1408, y = 175, w = 1507, h = 2420 Box[301]: x = 390, y = 105, w = 1600, h = 2327 Box[302]: x = 1443, y = 175, w = 1507, h = 2432 Box[303]: x = 401, y = 99, w = 1588, h = 2327 Box[304]: x = 1292, y = 198, w = 1641, h = 3968 Box[305]: x = 401, y = 93, w = 1582, h = 2321 Box[306]: x = 1286, y = 192, w = 1646, h = 3974 Box[307]: x = 384, y = 93, w = 1600, h = 2327 Box[308]: x = 1286, y = 198, w = 1641, h = 3968 Box[309]: x = 401, y = 93, w = 1588, h = 2316 Box[310]: x = 1379, y = 169, w = 1524, h = 2438 Box[311]: x = 390, y = 93, w = 1600, h = 2339 Box[312]: x = 1292, y = 192, w = 1641, h = 3974 Box[313]: x = 367, y = 93, w = 1617, h = 2321 Box[314]: x = 1449, y = 163, w = 1414, h = 2438 Box[315]: x = 367, y = 93, w = 1617, h = 2333 Box[316]: x = 1396, y = 175, w = 1513, h = 2444 Box[317]: x = 384, y = 99, w = 1606, h = 2321 Box[318]: x = 1425, y = 175, w = 1437, h = 2438 Box[319]: x = 326, y = 122, w = 1658, h = 2333 Box[320]: x = 1390, y = 192, w = 1466, h = 2420 Box[321]: x = 384, y = 128, w = 1600, h = 2327 Box[322]: x = 1286, y = 192, w = 1658, h = 3974 Box[323]: x = 425, y = 122, w = 1559, h = 2333 Box[324]: x = 1420, y = 180, w = 1437, h = 2432 Box[325]: x = 431, y = 122, w = 1553, h = 2333 Box[326]: x = 1425, y = 180, w = 1437, h = 2432 Box[327]: x = 431, y = 122, w = 1553, h = 2327 Box[328]: x = 1286, y = 192, w = 1606, h = 3968 Box[329]: x = 407, y = 111, w = 1577, h = 2339 Box[330]: x = 1466, y = 180, w = 1484, h = 2438 Box[331]: x = 407, y = 122, w = 1571, h = 2339 Box[332]: x = 1437, y = 180, w = 1460, h = 2444 Box[333]: x = 349, y = 122, w = 1635, h = 2339 Box[334]: x = 1332, y = 215, w = 1559, h = 2414 Box[335]: x = 390, y = 116, w = 1588, h = 2339 Box[336]: x = 1402, y = 198, w = 1495, h = 2432 Box[337]: x = 506, y = 116, w = 1472, h = 2339 Box[338]: x = 1437, y = 175, w = 1414, h = 2455 Box[339]: x = 448, y = 116, w = 1530, h = 2339 Box[340]: x = 1460, y = 180, w = 1408, h = 2455 Box[341]: x = 454, y = 116, w = 1524, h = 2345 Box[342]: x = 1472, y = 192, w = 1379, h = 2438 Box[343]: x = 448, y = 157, w = 1530, h = 2345 Box[344]: x = 1507, y = 180, w = 1356, h = 2449 Box[345]: x = 419, y = 93, w = 1553, h = 2339 Box[346]: x = 1472, y = 169, w = 1472, h = 2461 Box[347]: x = 396, y = 93, w = 1582, h = 2333 Box[348]: x = 1443, y = 192, w = 1507, h = 2438 Box[349]: x = 431, y = 99, w = 1548, h = 2327 Box[350]: x = 1449, y = 169, w = 1536, h = 2461 Box[351]: x = 465, y = 93, w = 1513, h = 2327 Box[352]: x = 1449, y = 169, w = 1530, h = 2467 Box[353]: x = 454, y = 76, w = 1518, h = 2333 Box[354]: x = 1286, y = 105, w = 1606, h = 4049 Box[355]: x = 460, y = 76, w = 1518, h = 2333 Box[356]: x = 1460, y = 186, w = 1524, h = 2444 Box[357]: x = 465, y = 76, w = 1513, h = 2327 Box[358]: x = 1454, y = 169, w = 1530, h = 2438 Box[359]: x = 460, y = 70, w = 1513, h = 2327 Box[360]: x = 1449, y = 192, w = 1507, h = 2444 Box[361]: x = 460, y = 58, w = 1513, h = 2333 Box[362]: x = 1420, y = 192, w = 1553, h = 2438 Box[363]: x = 460, y = 58, w = 1518, h = 2333 Box[364]: x = 1466, y = 175, w = 1484, h = 2467 Box[365]: x = 460, y = 58, w = 1513, h = 2327 Box[366]: x = 1379, y = 204, w = 1513, h = 2432 Box[367]: x = 460, y = 58, w = 1513, h = 2327 Box[368]: x = 1367, y = 204, w = 1582, h = 2438 Box[369]: x = 465, y = 47, w = 2356, h = 3962 Box[370]: x = 640, y = 0, w = 2292, h = 3991 Box[371]: x = 442, y = 47, w = 2380, h = 3915 Box[372]: x = 495, y = 0, w = 2455, h = 4177 Box[373]: x = 471, y = 140, w = 2350, h = 3881 Box[374]: x = 0, y = 0, w = 0, h = 0 Box[375]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxa2_reg.c000066400000000000000000000165261506303110300165510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * boxa2_reg.c * * Low-level statistical operations that can be used to identify anomalous * sized boxes in a boxa, where the widths and heights of the boxes * are expected to be similar. * * This tests a number of operations on boxes in a boxa, including * separating them into subsets of different parity. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 i, n, val, ne, no, nbins, minw, maxw, minh, maxh; l_int32 mine, mino, maxe, maxo; l_int32 w_diff, h_diff, median_w_diff, median_h_diff; l_int32 noutw, nouth; l_float32 medwe, medhe, medwo, medho; BOXA *boxa1, *boxa2, *boxae, *boxao; NUMA *na1, *nawe, *nahe, *nawo, *naho; NUMA *nadiffw, *nadiffh; /* diff from median w and h */ NUMA *naiw, *naih; /* indicator arrays for small outlier dimensions */ NUMA *narbwe, *narbhe, *narbwo, *narbho; /* rank-binned w and h */ PIX *pix1; PIXA *pixa1; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/boxa"); boxa1 = boxaRead("boxa4.ba"); /* Fill invalid boxes */ n = boxaGetCount(boxa1); na1 = boxaFindInvalidBoxes(boxa1); if (na1) boxa2 = boxaFillSequence(boxa1, L_USE_SAME_PARITY_BOXES, 0); else boxa2 = boxaCopy(boxa1, L_CLONE); boxaDestroy(&boxa1); /* Get the widths and heights for even and odd parity */ boxaSplitEvenOdd(boxa2, 0, &boxae, &boxao); boxaGetSizes(boxae, &nawe, &nahe); boxaGetSizes(boxao, &nawo, &naho); boxaDestroy(&boxa2); /* Find the medians */ numaGetMedian(nawe, &medwe); numaGetMedian(nahe, &medhe); numaGetMedian(nawo, &medwo); numaGetMedian(naho, &medho); /* Find the median even/odd differences for width and height */ median_w_diff = L_ABS(medwe - medwo); median_h_diff = L_ABS(medhe - medho); regTestCompareValues(rp, 210, median_w_diff, 0.0); /* 0 */ regTestCompareValues(rp, 15, median_h_diff, 0.0); /* 1 */ if (rp->display) { lept_stderr("diff of e/o median widths = %d\n", median_w_diff); lept_stderr("diff of e/o median heights = %d\n", median_h_diff); } /* Find the differences of box width and height from the median */ nadiffw = numaMakeConstant(0, n); nadiffh = numaMakeConstant(0, n); ne = numaGetCount(nawe); no = numaGetCount(nawo); for (i = 0; i < ne; i++) { numaGetIValue(nawe, i, &val); numaSetValue(nadiffw, 2 * i, L_ABS(val - medwe)); numaGetIValue(nahe, i, &val); numaSetValue(nadiffh, 2 * i, L_ABS(val - medhe)); } for (i = 0; i < no; i++) { numaGetIValue(nawo, i, &val); numaSetValue(nadiffw, 2 * i + 1, L_ABS(val - medwo)); numaGetIValue(naho, i, &val); numaSetValue(nadiffh, 2 * i + 1, L_ABS(val - medho)); } /* Don't count invalid boxes; set the diffs to 0 for them */ if (na1) { for (i = 0; i < n; i++) { numaGetIValue(na1, i, &val); if (val == 1) { numaSetValue(nadiffw, i, 0); numaSetValue(nadiffh, i, 0); } } } /* Make an indicator array for boxes that differ from the * median by more than a threshold value for outliers */ naiw = numaMakeThresholdIndicator(nadiffw, 90, L_SELECT_IF_GT); naih = numaMakeThresholdIndicator(nadiffh, 90, L_SELECT_IF_GT); numaGetCountRelativeToZero(naiw, L_GREATER_THAN_ZERO, &noutw); numaGetCountRelativeToZero(naih, L_GREATER_THAN_ZERO, &nouth); regTestCompareValues(rp, 24, noutw, 0.0); /* 2 */ regTestCompareValues(rp, 0, nouth, 0.0); /* 3 */ if (rp->display) lept_stderr("num width outliers = %d, num height outliers = %d\n", noutw, nouth); numaDestroy(&nadiffw); numaDestroy(&nadiffh); numaDestroy(&naiw); numaDestroy(&naih); /* Find the rank bins for width and height */ nbins = L_MAX(5, ne / 50); // up to 50 pages/bin numaGetRankBinValues(nawe, nbins, &narbwe); numaGetRankBinValues(nawo, nbins, &narbwo); numaGetRankBinValues(nahe, nbins, &narbhe); numaGetRankBinValues(naho, nbins, &narbho); numaDestroy(&nawe); numaDestroy(&nawo); numaDestroy(&nahe); numaDestroy(&naho); /* Find min and max binned widths and heights; get the max diffs */ numaGetIValue(narbwe, 0, &mine); numaGetIValue(narbwe, nbins - 1, &maxe); numaGetIValue(narbwo, 0, &mino); numaGetIValue(narbwo, nbins - 1, &maxo); minw = L_MIN(mine, mino); maxw = L_MAX(maxe, maxo); w_diff = maxw - minw; numaGetIValue(narbhe, 0, &mine); numaGetIValue(narbhe, nbins - 1, &maxe); numaGetIValue(narbho, 0, &mino); numaGetIValue(narbho, nbins - 1, &maxo); minh = L_MIN(mine, mino); maxh = L_MAX(maxe, maxo); h_diff = maxh - minh; numaDestroy(&narbwe); numaDestroy(&narbhe); numaDestroy(&narbwo); numaDestroy(&narbho); regTestCompareValues(rp, 409, w_diff, 0.0); /* 4 */ regTestCompareValues(rp, 54, h_diff, 0.0); /* 5 */ if (rp->display) lept_stderr("Binned rank results: w_diff = %d, h_diff = %d\n", w_diff, h_diff); /* Plot the results */ if (noutw > 0 || nouth > 0) { pixa1 = pixaCreate(2); boxaPlotSizes(boxae, "even", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSizes(boxao, "odd", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); pix1 = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa1); } boxaDestroy(&boxae); boxaDestroy(&boxao); return regTestCleanup(rp); } leptonica-1.86.0/prog/boxa3.ba000066400000000000000000000435001506303110300160450ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 376 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 0, y = 0, w = 0, h = 0 Box[6]: x = 524, y = 128, w = 2182, h = 4049 Box[7]: x = 250, y = 134, w = 2313, h = 3790 Box[8]: x = 451, y = 128, w = 2278, h = 4049 Box[9]: x = 209, y = 105, w = 2281, h = 3753 Box[10]: x = 465, y = 129, w = 2257, h = 4054 Box[11]: x = 250, y = 105, w = 2240, h = 3747 Box[12]: x = 465, y = 129, w = 2238, h = 4048 Box[13]: x = 244, y = 111, w = 2246, h = 3741 Box[14]: x = 465, y = 128, w = 2257, h = 4049 Box[15]: x = 244, y = 129, w = 2211, h = 3130 Box[16]: x = 493, y = 135, w = 2241, h = 3153 Box[17]: x = 239, y = 129, w = 2217, h = 3130 Box[18]: x = 476, y = 122, w = 2234, h = 3161 Box[19]: x = 227, y = 128, w = 2228, h = 3130 Box[20]: x = 448, y = 116, w = 2263, h = 3171 Box[21]: x = 239, y = 128, w = 2217, h = 3130 Box[22]: x = 470, y = 70, w = 2241, h = 3177 Box[23]: x = 239, y = 127, w = 2217, h = 3131 Box[24]: x = 467, y = 128, w = 2257, h = 3156 Box[25]: x = 227, y = 116, w = 2228, h = 3136 Box[26]: x = 467, y = 132, w = 2257, h = 3146 Box[27]: x = 209, y = 116, w = 2246, h = 3136 Box[28]: x = 467, y = 90, w = 2263, h = 3145 Box[29]: x = 227, y = 122, w = 2228, h = 3130 Box[30]: x = 467, y = 134, w = 2308, h = 3153 Box[31]: x = 233, y = 116, w = 2222, h = 3136 Box[32]: x = 460, y = 76, w = 2310, h = 3153 Box[33]: x = 233, y = 122, w = 2222, h = 3130 Box[34]: x = 460, y = 134, w = 2321, h = 3153 Box[35]: x = 233, y = 111, w = 2222, h = 3136 Box[36]: x = 460, y = 134, w = 2321, h = 3153 Box[37]: x = 221, y = 128, w = 2240, h = 3130 Box[38]: x = 464, y = 135, w = 2316, h = 3169 Box[39]: x = 233, y = 111, w = 2246, h = 3136 Box[40]: x = 465, y = 70, w = 2327, h = 3165 Box[41]: x = 233, y = 122, w = 2257, h = 3130 Box[42]: x = 465, y = 41, w = 2327, h = 3188 Box[43]: x = 233, y = 122, w = 2257, h = 3130 Box[44]: x = 460, y = 93, w = 2327, h = 3147 Box[45]: x = 233, y = 116, w = 2257, h = 3147 Box[46]: x = 465, y = 93, w = 2327, h = 3147 Box[47]: x = 233, y = 116, w = 2257, h = 3130 Box[48]: x = 460, y = 93, w = 2333, h = 3149 Box[49]: x = 233, y = 116, w = 2252, h = 3124 Box[50]: x = 388, y = 58, w = 2394, h = 3249 Box[51]: x = 233, y = 116, w = 2257, h = 3124 Box[52]: x = 388, y = 65, w = 2394, h = 3305 Box[53]: x = 227, y = 111, w = 2263, h = 3136 Box[54]: x = 461, y = 87, w = 2332, h = 3165 Box[55]: x = 227, y = 111, w = 2263, h = 3136 Box[56]: x = 460, y = 81, w = 2333, h = 3165 Box[57]: x = 227, y = 111, w = 2263, h = 3142 Box[58]: x = 461, y = 76, w = 2332, h = 3182 Box[59]: x = 227, y = 111, w = 2263, h = 3142 Box[60]: x = 460, y = 122, w = 2323, h = 3188 Box[61]: x = 268, y = 105, w = 2222, h = 3146 Box[62]: x = 448, y = 105, w = 2334, h = 4033 Box[63]: x = 268, y = 105, w = 2228, h = 3158 Box[64]: x = 448, y = 0, w = 2345, h = 4080 Box[65]: x = 268, y = 0, w = 2324, h = 3936 Box[66]: x = 442, y = 0, w = 2345, h = 4177 Box[67]: x = 256, y = 0, w = 2342, h = 3863 Box[68]: x = 442, y = 0, w = 2339, h = 4177 Box[69]: x = 273, y = 0, w = 2508, h = 3863 Box[70]: x = 442, y = 0, w = 2339, h = 4177 Box[71]: x = 285, y = 0, w = 2496, h = 3863 Box[72]: x = 442, y = 0, w = 2339, h = 4177 Box[73]: x = 285, y = 0, w = 2496, h = 3869 Box[74]: x = 442, y = 0, w = 2339, h = 4177 Box[75]: x = 291, y = 0, w = 2484, h = 3869 Box[76]: x = 442, y = 0, w = 2340, h = 4177 Box[77]: x = 294, y = 0, w = 2481, h = 3869 Box[78]: x = 442, y = 0, w = 2340, h = 4177 Box[79]: x = 367, y = 0, w = 2409, h = 3869 Box[80]: x = 442, y = 0, w = 2340, h = 4177 Box[81]: x = 367, y = 0, w = 2409, h = 3869 Box[82]: x = 442, y = 0, w = 2340, h = 4177 Box[83]: x = 294, y = 0, w = 2481, h = 3869 Box[84]: x = 442, y = 0, w = 2343, h = 4177 Box[85]: x = 367, y = 0, w = 2409, h = 3869 Box[86]: x = 442, y = 0, w = 2350, h = 4177 Box[87]: x = 294, y = 0, w = 2481, h = 3869 Box[88]: x = 442, y = 0, w = 2345, h = 4177 Box[89]: x = 367, y = 0, w = 2231, h = 3869 Box[90]: x = 442, y = 0, w = 2345, h = 4177 Box[91]: x = 367, y = 0, w = 2231, h = 3869 Box[92]: x = 442, y = 0, w = 2345, h = 4177 Box[93]: x = 367, y = 0, w = 2158, h = 3875 Box[94]: x = 442, y = 0, w = 2352, h = 4177 Box[95]: x = 294, y = 0, w = 2231, h = 3881 Box[96]: x = 444, y = 0, w = 2355, h = 4177 Box[97]: x = 367, y = 0, w = 2054, h = 3875 Box[98]: x = 444, y = 0, w = 2355, h = 4177 Box[99]: x = 367, y = 0, w = 2042, h = 3888 Box[100]: x = 444, y = 0, w = 2355, h = 4177 Box[101]: x = 303, y = 0, w = 2118, h = 3876 Box[102]: x = 442, y = 0, w = 2356, h = 4177 Box[103]: x = 314, y = 0, w = 2077, h = 3876 Box[104]: x = 483, y = 0, w = 2321, h = 4177 Box[105]: x = 303, y = 0, w = 2083, h = 3876 Box[106]: x = 442, y = 0, w = 2362, h = 4177 Box[107]: x = 314, y = 0, w = 2025, h = 3888 Box[108]: x = 614, y = 0, w = 2190, h = 4177 Box[109]: x = 250, y = 7, w = 1827, h = 3881 Box[110]: x = 1361, y = 140, w = 1489, h = 2364 Box[111]: x = 314, y = 19, w = 1728, h = 3888 Box[112]: x = 1379, y = 215, w = 1489, h = 2356 Box[113]: x = 314, y = 12, w = 1763, h = 3974 Box[114]: x = 1338, y = 198, w = 1484, h = 2356 Box[115]: x = 314, y = 6, w = 1728, h = 3974 Box[116]: x = 1332, y = 198, w = 1484, h = 2356 Box[117]: x = 314, y = 6, w = 1699, h = 3979 Box[118]: x = 1344, y = 204, w = 1484, h = 2350 Box[119]: x = 314, y = 0, w = 1693, h = 3985 Box[120]: x = 1344, y = 204, w = 1484, h = 2350 Box[121]: x = 314, y = 6, w = 1693, h = 3985 Box[122]: x = 1350, y = 204, w = 1484, h = 2350 Box[123]: x = 314, y = 0, w = 1693, h = 3979 Box[124]: x = 1338, y = 198, w = 1489, h = 2356 Box[125]: x = 314, y = 0, w = 1693, h = 3974 Box[126]: x = 1350, y = 192, w = 1489, h = 2345 Box[127]: x = 314, y = 0, w = 1681, h = 3974 Box[128]: x = 1332, y = 163, w = 1536, h = 2356 Box[129]: x = 314, y = 29, w = 1676, h = 3950 Box[130]: x = 1338, y = 169, w = 1536, h = 2345 Box[131]: x = 320, y = 0, w = 1670, h = 3974 Box[132]: x = 1338, y = 169, w = 1495, h = 2350 Box[133]: x = 314, y = 0, w = 1693, h = 3985 Box[134]: x = 1344, y = 163, w = 1495, h = 2356 Box[135]: x = 320, y = 99, w = 1664, h = 3857 Box[136]: x = 1332, y = 163, w = 1501, h = 2356 Box[137]: x = 308, y = 32, w = 1699, h = 2478 Box[138]: x = 1344, y = 163, w = 1484, h = 2356 Box[139]: x = 372, y = 99, w = 1612, h = 2332 Box[140]: x = 1332, y = 163, w = 1495, h = 2362 Box[141]: x = 372, y = 97, w = 1646, h = 2396 Box[142]: x = 1332, y = 169, w = 1495, h = 2356 Box[143]: x = 372, y = 103, w = 1612, h = 2329 Box[144]: x = 1332, y = 163, w = 1489, h = 2362 Box[145]: x = 300, y = 87, w = 1684, h = 2321 Box[146]: x = 1332, y = 163, w = 1489, h = 2362 Box[147]: x = 372, y = 70, w = 1612, h = 2321 Box[148]: x = 1332, y = 163, w = 1501, h = 2362 Box[149]: x = 413, y = 52, w = 1577, h = 2326 Box[150]: x = 1338, y = 134, w = 1495, h = 2391 Box[151]: x = 465, y = 122, w = 1518, h = 2321 Box[152]: x = 1332, y = 163, w = 1501, h = 2362 Box[153]: x = 465, y = 122, w = 1518, h = 2321 Box[154]: x = 1332, y = 157, w = 1518, h = 2374 Box[155]: x = 471, y = 128, w = 1513, h = 2321 Box[156]: x = 1332, y = 163, w = 1495, h = 2368 Box[157]: x = 471, y = 128, w = 1513, h = 2316 Box[158]: x = 1332, y = 163, w = 1536, h = 2368 Box[159]: x = 399, y = 128, w = 1585, h = 2316 Box[160]: x = 1332, y = 163, w = 1536, h = 2368 Box[161]: x = 399, y = 128, w = 1585, h = 2317 Box[162]: x = 1326, y = 134, w = 1530, h = 2397 Box[163]: x = 399, y = 128, w = 1591, h = 2321 Box[164]: x = 1332, y = 163, w = 1524, h = 2374 Box[165]: x = 399, y = 128, w = 1585, h = 2317 Box[166]: x = 1332, y = 157, w = 1530, h = 2374 Box[167]: x = 399, y = 128, w = 1585, h = 2317 Box[168]: x = 1326, y = 157, w = 1536, h = 2374 Box[169]: x = 471, y = 128, w = 1513, h = 2321 Box[170]: x = 1332, y = 163, w = 1536, h = 2374 Box[171]: x = 471, y = 128, w = 1513, h = 2321 Box[172]: x = 1332, y = 163, w = 1530, h = 2374 Box[173]: x = 390, y = 127, w = 1594, h = 2323 Box[174]: x = 1326, y = 157, w = 1530, h = 2380 Box[175]: x = 372, y = 127, w = 1612, h = 2334 Box[176]: x = 1332, y = 157, w = 1530, h = 2385 Box[177]: x = 372, y = 127, w = 1612, h = 2323 Box[178]: x = 1332, y = 157, w = 1536, h = 2380 Box[179]: x = 372, y = 127, w = 1612, h = 2323 Box[180]: x = 1332, y = 157, w = 1530, h = 2380 Box[181]: x = 372, y = 127, w = 1612, h = 2323 Box[182]: x = 1326, y = 175, w = 1536, h = 2380 Box[183]: x = 367, y = 54, w = 1658, h = 2468 Box[184]: x = 1350, y = 175, w = 1524, h = 2380 Box[185]: x = 372, y = 54, w = 1641, h = 2468 Box[186]: x = 1344, y = 145, w = 1530, h = 2397 Box[187]: x = 372, y = 169, w = 1617, h = 2327 Box[188]: x = 1344, y = 157, w = 1530, h = 2380 Box[189]: x = 372, y = 157, w = 1612, h = 2339 Box[190]: x = 1344, y = 157, w = 1530, h = 2380 Box[191]: x = 372, y = 169, w = 1612, h = 2327 Box[192]: x = 1344, y = 163, w = 1530, h = 2380 Box[193]: x = 372, y = 169, w = 1612, h = 2327 Box[194]: x = 1350, y = 157, w = 1530, h = 2380 Box[195]: x = 367, y = 157, w = 1617, h = 2339 Box[196]: x = 1344, y = 157, w = 1530, h = 2380 Box[197]: x = 361, y = 96, w = 1623, h = 2473 Box[198]: x = 1350, y = 151, w = 1524, h = 2385 Box[199]: x = 372, y = 169, w = 1617, h = 2327 Box[200]: x = 1344, y = 157, w = 1530, h = 2380 Box[201]: x = 343, y = 169, w = 1641, h = 2327 Box[202]: x = 1361, y = 157, w = 1591, h = 2380 Box[203]: x = 303, y = 169, w = 1681, h = 2327 Box[204]: x = 1367, y = 128, w = 1513, h = 2409 Box[205]: x = 367, y = 163, w = 1617, h = 2333 Box[206]: x = 1356, y = 128, w = 1518, h = 2409 Box[207]: x = 367, y = 163, w = 1617, h = 2333 Box[208]: x = 1350, y = 151, w = 1603, h = 2385 Box[209]: x = 367, y = 163, w = 1623, h = 2327 Box[210]: x = 1332, y = 128, w = 1524, h = 2409 Box[211]: x = 308, y = 169, w = 1687, h = 2333 Box[212]: x = 1350, y = 140, w = 1513, h = 2397 Box[213]: x = 367, y = 169, w = 1623, h = 2327 Box[214]: x = 1326, y = 134, w = 1536, h = 2414 Box[215]: x = 367, y = 163, w = 1623, h = 2333 Box[216]: x = 1332, y = 134, w = 1530, h = 2403 Box[217]: x = 361, y = 169, w = 1629, h = 2333 Box[218]: x = 1350, y = 134, w = 1501, h = 2409 Box[219]: x = 308, y = 163, w = 1681, h = 2333 Box[220]: x = 1356, y = 128, w = 1501, h = 2414 Box[221]: x = 343, y = 163, w = 1646, h = 2333 Box[222]: x = 1350, y = 134, w = 1574, h = 2409 Box[223]: x = 361, y = 169, w = 1629, h = 2327 Box[224]: x = 1350, y = 128, w = 1513, h = 2414 Box[225]: x = 343, y = 163, w = 1646, h = 2333 Box[226]: x = 1356, y = 128, w = 1548, h = 2414 Box[227]: x = 303, y = 163, w = 1687, h = 2333 Box[228]: x = 1356, y = 128, w = 1489, h = 2414 Box[229]: x = 367, y = 90, w = 1623, h = 2473 Box[230]: x = 1350, y = 128, w = 1489, h = 2414 Box[231]: x = 308, y = 157, w = 1681, h = 2339 Box[232]: x = 1332, y = 122, w = 1518, h = 2414 Box[233]: x = 361, y = 163, w = 1635, h = 2339 Box[234]: x = 1350, y = 122, w = 1489, h = 2414 Box[235]: x = 349, y = 163, w = 1646, h = 2339 Box[236]: x = 1338, y = 122, w = 1466, h = 2414 Box[237]: x = 320, y = 163, w = 1670, h = 2339 Box[238]: x = 1350, y = 192, w = 1489, h = 2414 Box[239]: x = 337, y = 163, w = 1658, h = 2339 Box[240]: x = 1356, y = 192, w = 1507, h = 2414 Box[241]: x = 343, y = 163, w = 1646, h = 2339 Box[242]: x = 1326, y = 186, w = 1530, h = 2420 Box[243]: x = 343, y = 122, w = 1646, h = 2356 Box[244]: x = 1326, y = 186, w = 1524, h = 2414 Box[245]: x = 337, y = 140, w = 1652, h = 2339 Box[246]: x = 1326, y = 186, w = 1524, h = 2414 Box[247]: x = 332, y = 122, w = 1658, h = 2350 Box[248]: x = 1350, y = 186, w = 1518, h = 2420 Box[249]: x = 337, y = 111, w = 1652, h = 2350 Box[250]: x = 1326, y = 186, w = 1530, h = 2414 Box[251]: x = 332, y = 111, w = 1658, h = 2350 Box[252]: x = 1344, y = 186, w = 1513, h = 2414 Box[253]: x = 320, y = 105, w = 1670, h = 2380 Box[254]: x = 1338, y = 186, w = 1565, h = 2414 Box[255]: x = 337, y = 116, w = 1652, h = 2339 Box[256]: x = 1344, y = 186, w = 1513, h = 2414 Box[257]: x = 326, y = 128, w = 1664, h = 2345 Box[258]: x = 1350, y = 186, w = 1513, h = 2414 Box[259]: x = 326, y = 128, w = 1664, h = 2362 Box[260]: x = 1332, y = 186, w = 1577, h = 2414 Box[261]: x = 326, y = 128, w = 1664, h = 2362 Box[262]: x = 1344, y = 186, w = 1571, h = 2420 Box[263]: x = 332, y = 122, w = 1658, h = 2362 Box[264]: x = 1338, y = 180, w = 1524, h = 2420 Box[265]: x = 332, y = 116, w = 1658, h = 2362 Box[266]: x = 1338, y = 186, w = 1518, h = 2420 Box[267]: x = 332, y = 111, w = 1658, h = 2362 Box[268]: x = 1321, y = 186, w = 1588, h = 2420 Box[269]: x = 337, y = 105, w = 1652, h = 2368 Box[270]: x = 1361, y = 180, w = 1501, h = 2420 Box[271]: x = 332, y = 116, w = 1658, h = 2350 Box[272]: x = 1300, y = 180, w = 1603, h = 2493 Box[273]: x = 337, y = 99, w = 1652, h = 2374 Box[274]: x = 1361, y = 180, w = 1501, h = 2420 Box[275]: x = 337, y = 111, w = 1652, h = 2350 Box[276]: x = 1300, y = 180, w = 1609, h = 2493 Box[277]: x = 343, y = 111, w = 1646, h = 2350 Box[278]: x = 1367, y = 180, w = 1489, h = 2420 Box[279]: x = 355, y = 99, w = 1635, h = 2356 Box[280]: x = 1306, y = 180, w = 1614, h = 2493 Box[281]: x = 343, y = 105, w = 1646, h = 2345 Box[282]: x = 1379, y = 175, w = 1530, h = 2426 Box[283]: x = 361, y = 111, w = 1629, h = 2339 Box[284]: x = 1373, y = 180, w = 1489, h = 2426 Box[285]: x = 361, y = 105, w = 1629, h = 2339 Box[286]: x = 1379, y = 175, w = 1484, h = 2432 Box[287]: x = 367, y = 105, w = 1623, h = 2339 Box[288]: x = 1379, y = 180, w = 1524, h = 2426 Box[289]: x = 367, y = 111, w = 1623, h = 2339 Box[290]: x = 1379, y = 175, w = 1518, h = 2432 Box[291]: x = 372, y = 105, w = 1617, h = 2345 Box[292]: x = 1379, y = 175, w = 1559, h = 2432 Box[293]: x = 361, y = 105, w = 1629, h = 2345 Box[294]: x = 1356, y = 175, w = 1536, h = 2432 Box[295]: x = 372, y = 105, w = 1617, h = 2339 Box[296]: x = 1385, y = 175, w = 1524, h = 2432 Box[297]: x = 355, y = 99, w = 1635, h = 2339 Box[298]: x = 1396, y = 175, w = 1501, h = 2432 Box[299]: x = 367, y = 93, w = 1623, h = 2339 Box[300]: x = 1396, y = 175, w = 1518, h = 2432 Box[301]: x = 384, y = 93, w = 1606, h = 2339 Box[302]: x = 1396, y = 175, w = 1553, h = 2432 Box[303]: x = 384, y = 93, w = 1606, h = 2333 Box[304]: x = 1329, y = 175, w = 1603, h = 2505 Box[305]: x = 390, y = 93, w = 1600, h = 2333 Box[306]: x = 1341, y = 175, w = 1591, h = 2510 Box[307]: x = 384, y = 93, w = 1600, h = 2339 Box[308]: x = 1324, y = 180, w = 1603, h = 2505 Box[309]: x = 390, y = 93, w = 1600, h = 2327 Box[310]: x = 1379, y = 169, w = 1524, h = 2438 Box[311]: x = 390, y = 93, w = 1600, h = 2339 Box[312]: x = 1329, y = 180, w = 1603, h = 2510 Box[313]: x = 367, y = 93, w = 1617, h = 2327 Box[314]: x = 1390, y = 163, w = 1507, h = 2449 Box[315]: x = 367, y = 93, w = 1617, h = 2333 Box[316]: x = 1396, y = 175, w = 1513, h = 2444 Box[317]: x = 384, y = 87, w = 1606, h = 2333 Box[318]: x = 1402, y = 175, w = 1495, h = 2444 Box[319]: x = 326, y = 122, w = 1658, h = 2333 Box[320]: x = 1390, y = 186, w = 1507, h = 2438 Box[321]: x = 384, y = 122, w = 1600, h = 2333 Box[322]: x = 1329, y = 186, w = 1614, h = 2516 Box[323]: x = 401, y = 122, w = 1582, h = 2333 Box[324]: x = 1402, y = 180, w = 1495, h = 2444 Box[325]: x = 401, y = 122, w = 1582, h = 2333 Box[326]: x = 1420, y = 180, w = 1478, h = 2444 Box[327]: x = 401, y = 122, w = 1582, h = 2327 Box[328]: x = 1353, y = 180, w = 1545, h = 2516 Box[329]: x = 407, y = 111, w = 1577, h = 2339 Box[330]: x = 1425, y = 180, w = 1524, h = 2449 Box[331]: x = 407, y = 122, w = 1577, h = 2339 Box[332]: x = 1437, y = 180, w = 1460, h = 2449 Box[333]: x = 349, y = 122, w = 1635, h = 2339 Box[334]: x = 1358, y = 180, w = 1533, h = 2449 Box[335]: x = 390, y = 116, w = 1588, h = 2339 Box[336]: x = 1402, y = 186, w = 1495, h = 2444 Box[337]: x = 431, y = 116, w = 1548, h = 2339 Box[338]: x = 1431, y = 175, w = 1460, h = 2455 Box[339]: x = 431, y = 116, w = 1548, h = 2339 Box[340]: x = 1449, y = 180, w = 1454, h = 2455 Box[341]: x = 431, y = 116, w = 1548, h = 2345 Box[342]: x = 1443, y = 186, w = 1454, h = 2449 Box[343]: x = 448, y = 157, w = 1530, h = 2345 Box[344]: x = 1449, y = 180, w = 1454, h = 2449 Box[345]: x = 419, y = 93, w = 1559, h = 2339 Box[346]: x = 1443, y = 169, w = 1501, h = 2461 Box[347]: x = 396, y = 93, w = 1582, h = 2333 Box[348]: x = 1443, y = 186, w = 1507, h = 2449 Box[349]: x = 431, y = 93, w = 1548, h = 2333 Box[350]: x = 1443, y = 169, w = 1542, h = 2461 Box[351]: x = 454, y = 87, w = 1524, h = 2333 Box[352]: x = 1443, y = 169, w = 1536, h = 2467 Box[353]: x = 454, y = 76, w = 1524, h = 2333 Box[354]: x = 1376, y = 105, w = 1574, h = 2598 Box[355]: x = 460, y = 76, w = 1518, h = 2333 Box[356]: x = 1449, y = 175, w = 1536, h = 2455 Box[357]: x = 460, y = 70, w = 1518, h = 2333 Box[358]: x = 1449, y = 169, w = 1536, h = 2467 Box[359]: x = 460, y = 64, w = 1518, h = 2333 Box[360]: x = 1443, y = 169, w = 1513, h = 2467 Box[361]: x = 460, y = 58, w = 1518, h = 2333 Box[362]: x = 1420, y = 169, w = 1553, h = 2467 Box[363]: x = 460, y = 58, w = 1518, h = 2339 Box[364]: x = 1385, y = 169, w = 1565, h = 2473 Box[365]: x = 460, y = 58, w = 1518, h = 2333 Box[366]: x = 1379, y = 169, w = 1565, h = 2473 Box[367]: x = 460, y = 58, w = 1518, h = 2333 Box[368]: x = 1367, y = 169, w = 1593, h = 2473 Box[369]: x = 460, y = 35, w = 1591, h = 2406 Box[370]: x = 1308, y = 121, w = 1642, h = 2612 Box[371]: x = 442, y = 47, w = 1609, h = 2406 Box[372]: x = 1308, y = 121, w = 1642, h = 2612 Box[373]: x = 460, y = 103, w = 1591, h = 2406 Box[374]: x = 0, y = 0, w = 0, h = 0 Box[375]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxa3_reg.c000066400000000000000000000163051506303110300165450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * boxa3_reg.c * * Higher-level operations that can search for anomalous-sized boxes * in a boxa, where the widths and heights of the boxes are expected * to be similar. These can be corrected by moving the appropriate * sides of the outlier boxes. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *boxafiles[3] = {"boxap1.ba", "boxap2.ba", "boxap3.ba"}; static l_float32 varp[3] = {0.0165, 0.0432, 0.0716}; static l_float32 varm[3] = {0.0088, 0.0213, 0.0357}; static l_int32 same[3] = {1, -1, -1}; static void TestBoxa(L_REGPARAMS *rp, l_int32 index); static void PlotBoxa(L_REGPARAMS *rp, l_int32 index); l_int32 main(int argc, char **argv) { l_int32 i; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "boxa3_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; for (i = 0; i < 3; i++) TestBoxa(rp, i); for (i = 0; i < 3; i++) PlotBoxa(rp, i); return regTestCleanup(rp); } static void TestBoxa(L_REGPARAMS *rp, l_int32 index) { l_uint8 *data; l_int32 w, h, medw, medh, isame; size_t size; l_float32 scalefact, ratiowh, fvarp, fvarm; BOXA *boxa1, *boxa2, *boxa3; PIX *pix1; boxa1 = boxaRead(boxafiles[index]); /* Read and display initial boxa */ boxaGetExtent(boxa1, &w, &h, NULL); scalefact = 100.0 / (l_float32)w; boxa2 = boxaTransform(boxa1, 0, 0, scalefact, scalefact); boxaWriteMem(&data, &size, boxa2); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 0, 13, 26 */ lept_free(data); pix1 = boxaDisplayTiled(boxa2, NULL, 0, -1, 2200, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1, 14, 27 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); /* Find the median sizes */ boxaMedianDimensions(boxa2, &medw, &medh, NULL, NULL, NULL, NULL, NULL, NULL); if (rp->display) lept_stderr("median width = %d, median height = %d\n", medw, medh); /* Check for deviations from median by pairs */ boxaSizeConsistency(boxa2, L_CHECK_HEIGHT, 0.0, 0.0, &fvarp, &fvarm, &isame); regTestCompareValues(rp, varp[index], fvarp, 0.003); /* 2, 15, 28 */ regTestCompareValues(rp, varm[index], fvarm, 0.003); /* 3, 16, 29 */ regTestCompareValues(rp, same[index], isame, 0); /* 4, 17, 30 */ if (rp->display) lept_stderr("fvarp = %7.4f, fvarm = %7.4f, same = %d\n", fvarp, fvarm, isame); /* Reconcile widths */ boxa3 = boxaReconcileSizeByMedian(boxa2, L_CHECK_WIDTH, 0.05, 0.04, 1.03, NULL, NULL, &ratiowh); boxaWriteMem(&data, &size, boxa3); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 5, 18, 31 */ lept_free(data); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 2200, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6, 19, 32 */ pixDisplayWithTitle(pix1, 500, 0, NULL, rp->display); if (rp->display) lept_stderr("ratio median width/height = %6.3f\n", ratiowh); boxaDestroy(&boxa3); pixDestroy(&pix1); /* Reconcile heights */ boxa3 = boxaReconcileSizeByMedian(boxa2, L_CHECK_HEIGHT, 0.05, 0.04, 1.03, NULL, NULL, NULL); boxaWriteMem(&data, &size, boxa3); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 7, 20, 33 */ lept_free(data); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 2200, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8, 21, 34 */ pixDisplayWithTitle(pix1, 1000, 0, NULL, rp->display); boxaDestroy(&boxa3); pixDestroy(&pix1); /* Reconcile both widths and heights */ boxa3 = boxaReconcileSizeByMedian(boxa2, L_CHECK_BOTH, 0.05, 0.04, 1.03, NULL, NULL, NULL); boxaWriteMem(&data, &size, boxa3); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 9, 22, 35 */ lept_free(data); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 2200, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10, 23, 36 */ pixDisplayWithTitle(pix1, 1500, 0, NULL, rp->display); boxaDestroy(&boxa3); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); } static void PlotBoxa(L_REGPARAMS *rp, l_int32 index) { BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pix3; PIXA *pixa; boxa1 = boxaRead(boxafiles[index]); /* Read and display initial boxa */ boxaPlotSizes(boxa1, NULL, NULL, NULL, &pix1); boxaPlotSides(boxa1, NULL, NULL, NULL, NULL, NULL, &pix2); pixa = pixaCreate(2); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 39, 41, 43 */ pixDisplayWithTitle(pix3, 0 + 800 * index, 500, NULL, rp->display); pixDestroy(&pix3); pixaDestroy(&pixa); /* Read and display reconciled boxa */ boxa2 = boxaReconcileSizeByMedian(boxa1, L_CHECK_BOTH, 0.05, 0.04, 1.03, NULL, NULL, NULL); boxaPlotSizes(boxa2, NULL, NULL, NULL, &pix1); boxaPlotSides(boxa2, NULL, NULL, NULL, NULL, NULL, &pix2); pixa = pixaCreate(2); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 40, 42, 44 */ pixDisplayWithTitle(pix3, 0 + 800 * index, 920, NULL, rp->display); pixDestroy(&pix3); pixaDestroy(&pixa); boxaDestroy(&boxa1); boxaDestroy(&boxa2); } leptonica-1.86.0/prog/boxa4.ba000066400000000000000000000046541506303110300160550ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 52 Box[0]: x = 313, y = 369, w = 892, h = 1255 Box[1]: x = 877, y = 379, w = 908, h = 1293 Box[2]: x = 300, y = 355, w = 952, h = 1283 Box[3]: x = 744, y = 376, w = 896, h = 1305 Box[4]: x = 333, y = 390, w = 985, h = 1281 Box[5]: x = 697, y = 490, w = 849, h = 1279 Box[6]: x = 379, y = 315, w = 992, h = 1328 Box[7]: x = 801, y = 372, w = 713, h = 1293 Box[8]: x = 373, y = 383, w = 1040, h = 1273 Box[9]: x = 713, y = 374, w = 705, h = 1291 Box[10]: x = 398, y = 376, w = 996, h = 1273 Box[11]: x = 797, y = 371, w = 726, h = 1296 Box[12]: x = 421, y = 373, w = 1138, h = 1258 Box[13]: x = 799, y = 369, w = 725, h = 1294 Box[14]: x = 379, y = 379, w = 1028, h = 1271 Box[15]: x = 839, y = 371, w = 709, h = 1292 Box[16]: x = 399, y = 377, w = 1050, h = 1305 Box[17]: x = 735, y = 371, w = 742, h = 1292 Box[18]: x = 363, y = 386, w = 989, h = 1275 Box[19]: x = 711, y = 386, w = 730, h = 1282 Box[20]: x = 395, y = 375, w = 1062, h = 1288 Box[21]: x = 595, y = 491, w = 776, h = 1286 Box[22]: x = 387, y = 390, w = 963, h = 1271 Box[23]: x = 845, y = 392, w = 933, h = 1307 Box[24]: x = 397, y = 412, w = 933, h = 1281 Box[25]: x = 805, y = 391, w = 912, h = 1273 Box[26]: x = 351, y = 375, w = 950, h = 1271 Box[27]: x = 737, y = 405, w = 901, h = 1319 Box[28]: x = 390, y = 443, w = 984, h = 1305 Box[29]: x = 806, y = 381, w = 836, h = 1302 Box[30]: x = 401, y = 373, w = 988, h = 1348 Box[31]: x = 645, y = 443, w = 745, h = 1305 Box[32]: x = 660, y = 390, w = 685, h = 1277 Box[33]: x = 736, y = 398, w = 741, h = 1287 Box[34]: x = 671, y = 355, w = 645, h = 1277 Box[35]: x = 741, y = 391, w = 817, h = 1299 Box[36]: x = 756, y = 365, w = 671, h = 1275 Box[37]: x = 689, y = 381, w = 853, h = 1314 Box[38]: x = 728, y = 364, w = 691, h = 1287 Box[39]: x = 849, y = 389, w = 718, h = 1282 Box[40]: x = 717, y = 372, w = 665, h = 1276 Box[41]: x = 792, y = 394, w = 822, h = 1258 Box[42]: x = 719, y = 374, w = 653, h = 1246 Box[43]: x = 772, y = 374, w = 653, h = 1275 Box[44]: x = 570, y = 374, w = 783, h = 1302 Box[45]: x = 747, y = 370, w = 623, h = 1268 Box[46]: x = 709, y = 442, w = 674, h = 1269 Box[47]: x = 812, y = 384, w = 626, h = 1273 Box[48]: x = 576, y = 384, w = 802, h = 1285 Box[49]: x = 714, y = 387, w = 641, h = 1276 Box[50]: x = 705, y = 356, w = 690, h = 1266 Box[51]: x = 875, y = 380, w = 670, h = 1275 leptonica-1.86.0/prog/boxa4_reg.c000066400000000000000000000212541506303110300165450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * boxa4_reg.c * * This carries out some smoothing and display operations on boxa. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *data; l_int32 i, same, w, h, width, success, nb; size_t size; l_float32 scalefact; BOXA *boxa1, *boxa1e, *boxa1o, *boxa2, *boxa2e, *boxa2o; BOXA *boxa3, *boxa3e, *boxa3o; BOXAA *baa1, *baa2, *baa3; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "boxa4_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/boxa"); /* Input is a fairly clean boxa */ boxa1 = boxaRead("boxa1.ba"); boxa2 = boxaSmoothSequenceMedian(boxa1, 10, L_USE_CAPPED_MAX, 50, 0, 0); width = 100; boxaGetExtent(boxa2, &w, &h, NULL); scalefact = (l_float32)width / (l_float32)w; boxa3 = boxaTransform(boxa2, 0, 0, scalefact, scalefact); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 1500, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); /* Input is an unsmoothed and noisy boxa */ boxa1 = boxaRead("boxa2.ba"); boxa2 = boxaSmoothSequenceMedian(boxa1, 10, L_USE_CAPPED_MAX, 50, 0, 0); width = 100; boxaGetExtent(boxa2, &w, &h, NULL); scalefact = (l_float32)width / (l_float32)w; boxa3 = boxaTransform(boxa2, 0, 0, scalefact, scalefact); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 1500, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 800, 0, NULL, rp->display); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); /* Input is an unsmoothed and noisy boxa */ boxa1 = boxaRead("boxa2.ba"); boxa2 = boxaSmoothSequenceMedian(boxa1, 10, L_SUB_ON_LOC_DIFF, 80, 20, 1); boxa3 = boxaSmoothSequenceMedian(boxa1, 10, L_SUB_ON_SIZE_DIFF, 80, 20, 1); boxaPlotSides(boxa1, "initial", NULL, NULL, NULL, NULL, &pix1); boxaPlotSides(boxa2, "side-smoothing", NULL, NULL, NULL, NULL, &pix2); boxaPlotSides(boxa3, "size-smoothing", NULL, NULL, NULL, NULL, &pix3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 1300, 0, NULL, rp->display); pixDisplayWithTitle(pix2, 1300, 500, NULL, rp->display); pixDisplayWithTitle(pix3, 1300, 1000, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); /* Reconcile all sides by median */ boxa1 = boxaRead("boxa5.ba"); pixa1 = pixaCreate(0); boxa2 = boxaReconcileAllByMedian(boxa1, L_ADJUST_LEFT_AND_RIGHT, L_ADJUST_TOP_AND_BOT, 50, 0, pixa1); boxaWriteMem(&data, &size, boxa2); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 5 */ pix1 = pixRead("/tmp/lept/boxa/recon_sides.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); lept_free(data); pixaDestroy(&pixa1); boxaDestroy(&boxa2); pixDestroy(&pix1); /* Reconcile top/bot sides by median */ pixa1 = pixaCreate(0); boxa2 = boxaReconcileAllByMedian(boxa1, L_ADJUST_SKIP, L_ADJUST_TOP_AND_BOT, 50, 0, pixa1); boxaWriteMem(&data, &size, boxa2); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 7 */ pix1 = pixRead("/tmp/lept/boxa/recon_sides.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix1, 0, 300, NULL, rp->display); lept_free(data); pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix1); /* Split even/odd and reconcile all sides by median */ boxa1 = boxaRead("boxa5.ba"); pixa1 = pixaCreate(0); boxaSplitEvenOdd(boxa1, 0, &boxa1e, &boxa1o); boxa2e = boxaReconcileSidesByMedian(boxa1e, L_ADJUST_TOP_AND_BOT, 50, 0, pixa1); boxa3e = boxaReconcileSidesByMedian(boxa2e, L_ADJUST_LEFT_AND_RIGHT, 50, 0, pixa1); boxa2o = boxaReconcileSidesByMedian(boxa1o, L_ADJUST_TOP_AND_BOT, 50, 0, pixa1); boxa3o = boxaReconcileSidesByMedian(boxa2o, L_ADJUST_LEFT_AND_RIGHT, 50, 0, pixa1); boxa3 = boxaMergeEvenOdd(boxa3e, boxa3o, 0); boxaWriteMem(&data, &size, boxa3); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 9 */ if (rp->display) { pix1 = pixaDisplayTiledInRows(pixa1, 32, 1800, 0.5, 0, 30, 2); pixDisplay(pix1, 800, 500); pixDestroy(&pix1); } lept_free(data); pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa1e); boxaDestroy(&boxa1o); boxaDestroy(&boxa2e); boxaDestroy(&boxa2o); boxaDestroy(&boxa3); boxaDestroy(&boxa3e); boxaDestroy(&boxa3o); /* Input is a boxa smoothed with a median window filter */ boxa1 = boxaRead("boxa3.ba"); boxa2 = boxaSmoothSequenceMedian(boxa1, 10, L_USE_CAPPED_MIN, 20, 0, 1); width = 100; boxaGetExtent(boxa2, &w, &h, NULL); scalefact = (l_float32)width / (l_float32)w; boxa3 = boxaTransform(boxa2, 0, 0, scalefact, scalefact); pix1 = boxaDisplayTiled(boxa3, NULL, 0, -1, 1500, 2, 1.0, 0, 3, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix1, 1000, 0, NULL, rp->display); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); /* ----------- Test pixaDisplayBoxaa() ------------ */ pixa1 = pixaReadBoth("showboxes.pac"); baa1 = boxaaRead("showboxes1.baa"); baa2 = boxaaTranspose(baa1); baa3 = boxaaTranspose(baa2); nb = boxaaGetCount(baa1); success = TRUE; for (i = 0; i < nb; i++) { boxa1 = boxaaGetBoxa(baa1, i, L_CLONE); boxa2 = boxaaGetBoxa(baa3, i, L_CLONE); boxaEqual(boxa1, boxa2, 0, NULL, &same); boxaDestroy(&boxa1); boxaDestroy(&boxa2); if (!same) success = FALSE; } /* Check that the transpose is reversible */ regTestCompareValues(rp, 1, success, 0.0); /* 11 */ pixa2 = pixaDisplayBoxaa(pixa1, baa2, L_DRAW_RGB, 2); pix1 = pixaDisplayTiledInRows(pixa2, 32, 1400, 1.0, 0, 10, 0); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 12 */ pixDisplayWithTitle(pix1, 0, 600, NULL, rp->display); lept_stderr("Writing to: /tmp/lept/boxa/show.pdf\n"); l_pdfSetDateAndVersion(FALSE); pixaConvertToPdf(pixa2, 75, 0.6, 0, 0, NULL, "/tmp/lept/boxa/show.pdf"); regTestCheckFile(rp, "/tmp/lept/boxa/show.pdf"); /* 13 */ pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); boxaaDestroy(&baa1); boxaaDestroy(&baa2); boxaaDestroy(&baa3); return regTestCleanup(rp); } leptonica-1.86.0/prog/boxa5.ba000066400000000000000000000015701506303110300160500ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 18 Box[0]: x = 800, y = 808, w = 1600, h = 2016 Box[1]: x = 0, y = 1318, w = 1956, h = 2406 Box[2]: x = 800, y = 808, w = 1600, h = 2016 Box[3]: x = 0, y = 1318, w = 1956, h = 2406 Box[4]: x = 800, y = 808, w = 1600, h = 2016 Box[5]: x = 0, y = 1368, w = 1956, h = 2356 Box[6]: x = 720, y = 1332, w = 1952, h = 2380 Box[7]: x = 0, y = 1368, w = 1956, h = 2356 Box[8]: x = 720, y = 1332, w = 1952, h = 2376 Box[9]: x = 0, y = 1368, w = 1956, h = 2356 Box[10]: x = 720, y = 1332, w = 1952, h = 2380 Box[11]: x = 0, y = 1368, w = 1956, h = 2356 Box[12]: x = 720, y = 1332, w = 1952, h = 2376 Box[13]: x = 0, y = 1368, w = 1956, h = 2356 Box[14]: x = 720, y = 1332, w = 1952, h = 2376 Box[15]: x = 0, y = 1368, w = 1956, h = 2356 Box[16]: x = 700, y = 1332, w = 1972, h = 2376 Box[17]: x = 0, y = 1368, w = 1956, h = 2356 leptonica-1.86.0/prog/boxap1.ba000066400000000000000000000133371506303110300162300ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 126 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 0, y = 0, w = 2627, h = 3321 Box[6]: x = 0, y = 59, w = 2575, h = 3292 Box[7]: x = 558, y = 0, w = 1998, h = 3227 Box[8]: x = 364, y = 59, w = 2345, h = 3198 Box[9]: x = 270, y = 0, w = 2433, h = 3245 Box[10]: x = 335, y = 59, w = 2369, h = 3209 Box[11]: x = 259, y = 0, w = 2445, h = 3245 Box[12]: x = 323, y = 59, w = 2375, h = 3274 Box[13]: x = 247, y = 0, w = 2457, h = 3250 Box[14]: x = 347, y = 59, w = 2416, h = 3292 Box[15]: x = 270, y = 0, w = 2433, h = 3245 Box[16]: x = 312, y = 59, w = 2369, h = 3209 Box[17]: x = 247, y = 0, w = 2463, h = 3250 Box[18]: x = 306, y = 59, w = 1910, h = 3203 Box[19]: x = 241, y = 0, w = 1211, h = 3250 Box[20]: x = 323, y = 59, w = 2363, h = 3215 Box[21]: x = 253, y = 0, w = 2451, h = 3250 Box[22]: x = 294, y = 59, w = 2433, h = 3198 Box[23]: x = 247, y = 0, w = 1252, h = 3250 Box[24]: x = 229, y = 59, w = 2433, h = 3292 Box[25]: x = 223, y = 0, w = 2486, h = 3262 Box[26]: x = 265, y = 59, w = 2451, h = 3274 Box[27]: x = 229, y = 0, w = 2475, h = 3256 Box[28]: x = 294, y = 59, w = 2433, h = 3286 Box[29]: x = 241, y = 0, w = 2463, h = 3250 Box[30]: x = 300, y = 59, w = 2428, h = 3203 Box[31]: x = 259, y = 0, w = 2445, h = 3250 Box[32]: x = 300, y = 59, w = 2433, h = 3227 Box[33]: x = 253, y = 0, w = 2451, h = 3250 Box[34]: x = 282, y = 59, w = 2439, h = 3209 Box[35]: x = 235, y = 0, w = 2469, h = 3250 Box[36]: x = 270, y = 59, w = 1969, h = 3227 Box[37]: x = 229, y = 0, w = 2463, h = 3256 Box[38]: x = 282, y = 59, w = 1998, h = 3198 Box[39]: x = 235, y = 0, w = 1869, h = 3256 Box[40]: x = 282, y = 59, w = 1987, h = 3209 Box[41]: x = 247, y = 0, w = 2451, h = 3262 Box[42]: x = 288, y = 59, w = 2439, h = 3215 Box[43]: x = 259, y = 0, w = 2445, h = 3256 Box[44]: x = 282, y = 59, w = 2463, h = 3215 Box[45]: x = 265, y = 0, w = 2433, h = 3256 Box[46]: x = 241, y = 59, w = 2398, h = 3221 Box[47]: x = 0, y = 0, w = 2680, h = 3350 Box[48]: x = 194, y = 59, w = 2457, h = 3250 Box[49]: x = 247, y = 0, w = 2433, h = 3292 Box[50]: x = 223, y = 59, w = 2433, h = 3239 Box[51]: x = 188, y = 0, w = 2486, h = 3280 Box[52]: x = 170, y = 59, w = 2463, h = 3321 Box[53]: x = 206, y = 0, w = 2480, h = 3280 Box[54]: x = 170, y = 59, w = 2492, h = 3245 Box[55]: x = 212, y = 0, w = 2463, h = 3286 Box[56]: x = 200, y = 59, w = 2457, h = 3245 Box[57]: x = 194, y = 0, w = 2469, h = 3280 Box[58]: x = 223, y = 59, w = 2433, h = 3221 Box[59]: x = 165, y = 0, w = 2498, h = 3286 Box[60]: x = 217, y = 59, w = 2433, h = 3233 Box[61]: x = 182, y = 0, w = 2463, h = 3286 Box[62]: x = 235, y = 59, w = 2422, h = 3262 Box[63]: x = 170, y = 0, w = 2486, h = 3286 Box[64]: x = 217, y = 59, w = 2433, h = 3239 Box[65]: x = 182, y = 0, w = 2457, h = 3286 Box[66]: x = 212, y = 59, w = 2439, h = 3245 Box[67]: x = 159, y = 0, w = 2480, h = 3286 Box[68]: x = 217, y = 59, w = 2433, h = 3227 Box[69]: x = 176, y = 0, w = 2463, h = 3286 Box[70]: x = 165, y = 59, w = 2492, h = 3233 Box[71]: x = 153, y = 0, w = 2480, h = 3292 Box[72]: x = 194, y = 59, w = 2451, h = 3221 Box[73]: x = 165, y = 0, w = 1740, h = 3292 Box[74]: x = 165, y = 59, w = 2486, h = 3239 Box[75]: x = 147, y = 0, w = 1769, h = 3292 Box[76]: x = 176, y = 59, w = 2463, h = 3239 Box[77]: x = 165, y = 0, w = 1487, h = 3292 Box[78]: x = 147, y = 59, w = 2134, h = 3215 Box[79]: x = 129, y = 0, w = 2486, h = 3298 Box[80]: x = 147, y = 59, w = 2128, h = 3215 Box[81]: x = 364, y = 0, w = 2269, h = 3292 Box[82]: x = 147, y = 59, w = 2492, h = 3215 Box[83]: x = 118, y = 0, w = 1417, h = 3292 Box[84]: x = 176, y = 59, w = 1934, h = 3215 Box[85]: x = 535, y = 0, w = 2116, h = 3292 Box[86]: x = 188, y = 59, w = 2451, h = 3221 Box[87]: x = 159, y = 0, w = 1440, h = 3298 Box[88]: x = 176, y = 59, w = 2093, h = 3233 Box[89]: x = 370, y = 0, w = 2063, h = 3292 Box[90]: x = 170, y = 59, w = 2081, h = 3233 Box[91]: x = 170, y = 0, w = 1399, h = 3292 Box[92]: x = 182, y = 59, w = 2169, h = 3221 Box[93]: x = 170, y = 0, w = 1258, h = 3298 Box[94]: x = 176, y = 59, w = 2040, h = 3215 Box[95]: x = 170, y = 0, w = 1505, h = 3298 Box[96]: x = 135, y = 59, w = 2087, h = 3233 Box[97]: x = 165, y = 0, w = 2428, h = 3298 Box[98]: x = 135, y = 59, w = 2469, h = 3239 Box[99]: x = 182, y = 0, w = 1734, h = 3298 Box[100]: x = 165, y = 59, w = 2028, h = 3221 Box[101]: x = 165, y = 0, w = 2457, h = 3298 Box[102]: x = 182, y = 59, w = 2075, h = 3262 Box[103]: x = 165, y = 0, w = 1217, h = 3298 Box[104]: x = 165, y = 59, w = 2439, h = 3245 Box[105]: x = 123, y = 0, w = 1775, h = 3292 Box[106]: x = 123, y = 59, w = 2110, h = 3233 Box[107]: x = 170, y = 0, w = 1793, h = 3298 Box[108]: x = 165, y = 59, w = 1916, h = 3209 Box[109]: x = 153, y = 0, w = 1181, h = 3292 Box[110]: x = 159, y = 59, w = 2093, h = 3245 Box[111]: x = 159, y = 0, w = 1387, h = 3298 Box[112]: x = 153, y = 59, w = 2439, h = 3233 Box[113]: x = 159, y = 0, w = 1352, h = 3298 Box[114]: x = 153, y = 59, w = 2439, h = 3280 Box[115]: x = 165, y = 0, w = 1375, h = 3298 Box[116]: x = 141, y = 59, w = 2110, h = 3227 Box[117]: x = 147, y = 0, w = 1763, h = 3298 Box[118]: x = 94, y = 59, w = 2469, h = 3256 Box[119]: x = 135, y = 0, w = 1328, h = 3298 Box[120]: x = 141, y = 59, w = 2551, h = 3215 Box[121]: x = 276, y = 0, w = 2363, h = 3274 Box[122]: x = 694, y = 59, w = 1752, h = 3268 Box[123]: x = 147, y = 0, w = 1963, h = 3386 Box[124]: x = 200, y = 59, w = 2663, h = 3303 Box[125]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxap2.ba000066400000000000000000000334051506303110300162270ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 300 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 398, y = 0, w = 2133, h = 3011 Box[6]: x = 78, y = 39, w = 1891, h = 3015 Box[7]: x = 257, y = 0, w = 2129, h = 3015 Box[8]: x = 55, y = 39, w = 2235, h = 3038 Box[9]: x = 335, y = 0, w = 2122, h = 3003 Box[10]: x = 55, y = 39, w = 2242, h = 3034 Box[11]: x = 335, y = 0, w = 2122, h = 2995 Box[12]: x = 62, y = 39, w = 2231, h = 3050 Box[13]: x = 390, y = 0, w = 2071, h = 2995 Box[14]: x = 62, y = 39, w = 2262, h = 3054 Box[15]: x = 472, y = 0, w = 1993, h = 2995 Box[16]: x = 62, y = 39, w = 2246, h = 3054 Box[17]: x = 472, y = 0, w = 1993, h = 2999 Box[18]: x = 66, y = 39, w = 2231, h = 3054 Box[19]: x = 558, y = 0, w = 1915, h = 2999 Box[20]: x = 82, y = 39, w = 2219, h = 3054 Box[21]: x = 495, y = 0, w = 1981, h = 2999 Box[22]: x = 66, y = 39, w = 2242, h = 3057 Box[23]: x = 499, y = 0, w = 1977, h = 2995 Box[24]: x = 70, y = 39, w = 2235, h = 3061 Box[25]: x = 530, y = 0, w = 1946, h = 2999 Box[26]: x = 66, y = 39, w = 2239, h = 3061 Box[27]: x = 534, y = 0, w = 1942, h = 2991 Box[28]: x = 66, y = 39, w = 2242, h = 3061 Box[29]: x = 480, y = 0, w = 1997, h = 2999 Box[30]: x = 66, y = 39, w = 2242, h = 3054 Box[31]: x = 433, y = 0, w = 2040, h = 2995 Box[32]: x = 70, y = 39, w = 2239, h = 3057 Box[33]: x = 452, y = 0, w = 2036, h = 2987 Box[34]: x = 74, y = 39, w = 2239, h = 3054 Box[35]: x = 499, y = 0, w = 1985, h = 2991 Box[36]: x = 74, y = 39, w = 2235, h = 3054 Box[37]: x = 468, y = 0, w = 2020, h = 2995 Box[38]: x = 74, y = 39, w = 2239, h = 3050 Box[39]: x = 511, y = 0, w = 1977, h = 2995 Box[40]: x = 74, y = 39, w = 2239, h = 3050 Box[41]: x = 569, y = 0, w = 1915, h = 2995 Box[42]: x = 70, y = 39, w = 2242, h = 3050 Box[43]: x = 468, y = 0, w = 2024, h = 2991 Box[44]: x = 74, y = 39, w = 2242, h = 3050 Box[45]: x = 749, y = 0, w = 1732, h = 2987 Box[46]: x = 70, y = 39, w = 2246, h = 3050 Box[47]: x = 460, y = 0, w = 2028, h = 2991 Box[48]: x = 70, y = 39, w = 2250, h = 3054 Box[49]: x = 562, y = 0, w = 1930, h = 2987 Box[50]: x = 74, y = 39, w = 2242, h = 3054 Box[51]: x = 628, y = 0, w = 1860, h = 2991 Box[52]: x = 70, y = 39, w = 2250, h = 3057 Box[53]: x = 456, y = 0, w = 2028, h = 2991 Box[54]: x = 70, y = 39, w = 2250, h = 3065 Box[55]: x = 659, y = 0, w = 1833, h = 2991 Box[56]: x = 74, y = 39, w = 2246, h = 3050 Box[57]: x = 538, y = 0, w = 1950, h = 2991 Box[58]: x = 74, y = 39, w = 2250, h = 3054 Box[59]: x = 581, y = 0, w = 1911, h = 2991 Box[60]: x = 74, y = 39, w = 2250, h = 3050 Box[61]: x = 554, y = 0, w = 1938, h = 2991 Box[62]: x = 78, y = 39, w = 2246, h = 3054 Box[63]: x = 651, y = 0, w = 1841, h = 2991 Box[64]: x = 78, y = 39, w = 2250, h = 3057 Box[65]: x = 632, y = 0, w = 1860, h = 2987 Box[66]: x = 74, y = 39, w = 2254, h = 3061 Box[67]: x = 511, y = 0, w = 1981, h = 2991 Box[68]: x = 74, y = 39, w = 2258, h = 3057 Box[69]: x = 530, y = 0, w = 1962, h = 2987 Box[70]: x = 78, y = 39, w = 2250, h = 3057 Box[71]: x = 651, y = 0, w = 1841, h = 2987 Box[72]: x = 105, y = 39, w = 2227, h = 3054 Box[73]: x = 550, y = 0, w = 1950, h = 2987 Box[74]: x = 74, y = 39, w = 2258, h = 3065 Box[75]: x = 526, y = 0, w = 1973, h = 2983 Box[76]: x = 117, y = 39, w = 2215, h = 3073 Box[77]: x = 620, y = 0, w = 1876, h = 2987 Box[78]: x = 109, y = 39, w = 2223, h = 3065 Box[79]: x = 694, y = 0, w = 1806, h = 2991 Box[80]: x = 156, y = 39, w = 2231, h = 3069 Box[81]: x = 647, y = 0, w = 1849, h = 2987 Box[82]: x = 156, y = 39, w = 2231, h = 3065 Box[83]: x = 577, y = 0, w = 1919, h = 2987 Box[84]: x = 168, y = 39, w = 2219, h = 3073 Box[85]: x = 768, y = 0, w = 1728, h = 2991 Box[86]: x = 183, y = 39, w = 2211, h = 3065 Box[87]: x = 745, y = 0, w = 1759, h = 2991 Box[88]: x = 164, y = 39, w = 2231, h = 3069 Box[89]: x = 328, y = 0, w = 2176, h = 2987 Box[90]: x = 164, y = 39, w = 2227, h = 3057 Box[91]: x = 550, y = 0, w = 1958, h = 2987 Box[92]: x = 164, y = 39, w = 2235, h = 3061 Box[93]: x = 640, y = 0, w = 1868, h = 2987 Box[94]: x = 164, y = 39, w = 2239, h = 3061 Box[95]: x = 640, y = 0, w = 1868, h = 2991 Box[96]: x = 168, y = 39, w = 2239, h = 3050 Box[97]: x = 339, y = 0, w = 2168, h = 2991 Box[98]: x = 136, y = 39, w = 2266, h = 3057 Box[99]: x = 686, y = 0, w = 1802, h = 2991 Box[100]: x = 113, y = 39, w = 2301, h = 3038 Box[101]: x = 359, y = 0, w = 2122, h = 2987 Box[102]: x = 55, y = 39, w = 2211, h = 3022 Box[103]: x = 214, y = 0, w = 2196, h = 3003 Box[104]: x = 0, y = 39, w = 2371, h = 3022 Box[105]: x = 218, y = 0, w = 2192, h = 3003 Box[106]: x = 58, y = 39, w = 2090, h = 3022 Box[107]: x = 222, y = 0, w = 2188, h = 3003 Box[108]: x = 0, y = 39, w = 1973, h = 3022 Box[109]: x = 218, y = 0, w = 2188, h = 3011 Box[110]: x = 74, y = 39, w = 2200, h = 3022 Box[111]: x = 296, y = 0, w = 2110, h = 3007 Box[112]: x = 62, y = 39, w = 2301, h = 3026 Box[113]: x = 222, y = 0, w = 2188, h = 3007 Box[114]: x = 58, y = 39, w = 2207, h = 3026 Box[115]: x = 413, y = 0, w = 1997, h = 3007 Box[116]: x = 70, y = 39, w = 2012, h = 3030 Box[117]: x = 179, y = 0, w = 2235, h = 3003 Box[118]: x = 66, y = 39, w = 2161, h = 3030 Box[119]: x = 370, y = 0, w = 2036, h = 3003 Box[120]: x = 43, y = 39, w = 1989, h = 3030 Box[121]: x = 331, y = 0, w = 2079, h = 2999 Box[122]: x = 43, y = 39, w = 2231, h = 3026 Box[123]: x = 316, y = 0, w = 2090, h = 3003 Box[124]: x = 43, y = 39, w = 2227, h = 3030 Box[125]: x = 562, y = 0, w = 1849, h = 2999 Box[126]: x = 47, y = 39, w = 2200, h = 3030 Box[127]: x = 507, y = 0, w = 1895, h = 3003 Box[128]: x = 43, y = 39, w = 2149, h = 3030 Box[129]: x = 370, y = 0, w = 2036, h = 3007 Box[130]: x = 43, y = 39, w = 2293, h = 3034 Box[131]: x = 183, y = 0, w = 2223, h = 3003 Box[132]: x = 43, y = 39, w = 2348, h = 3030 Box[133]: x = 312, y = 0, w = 2098, h = 3003 Box[134]: x = 43, y = 39, w = 2231, h = 3038 Box[135]: x = 339, y = 0, w = 2063, h = 3003 Box[136]: x = 43, y = 39, w = 1802, h = 3030 Box[137]: x = 499, y = 0, w = 1907, h = 3003 Box[138]: x = 43, y = 39, w = 2262, h = 3038 Box[139]: x = 402, y = 0, w = 2001, h = 3003 Box[140]: x = 43, y = 39, w = 2153, h = 3030 Box[141]: x = 616, y = 0, w = 1794, h = 2999 Box[142]: x = 43, y = 39, w = 2227, h = 3030 Box[143]: x = 456, y = 0, w = 1950, h = 2999 Box[144]: x = 43, y = 39, w = 2005, h = 3022 Box[145]: x = 573, y = 0, w = 1837, h = 2999 Box[146]: x = 43, y = 39, w = 2301, h = 3015 Box[147]: x = 367, y = 0, w = 2040, h = 3007 Box[148]: x = 43, y = 39, w = 2305, h = 3034 Box[149]: x = 343, y = 0, w = 2063, h = 3007 Box[150]: x = 43, y = 39, w = 2110, h = 3026 Box[151]: x = 409, y = 0, w = 1989, h = 3007 Box[152]: x = 43, y = 39, w = 2274, h = 3034 Box[153]: x = 550, y = 0, w = 1852, h = 3007 Box[154]: x = 43, y = 39, w = 2305, h = 3038 Box[155]: x = 367, y = 0, w = 2036, h = 3007 Box[156]: x = 43, y = 39, w = 2196, h = 3030 Box[157]: x = 363, y = 0, w = 2040, h = 3003 Box[158]: x = 43, y = 39, w = 2223, h = 3030 Box[159]: x = 246, y = 0, w = 2149, h = 3003 Box[160]: x = 43, y = 39, w = 2219, h = 3026 Box[161]: x = 242, y = 0, w = 2176, h = 3003 Box[162]: x = 47, y = 39, w = 2305, h = 3030 Box[163]: x = 647, y = 0, w = 1767, h = 3030 Box[164]: x = 43, y = 39, w = 2309, h = 3015 Box[165]: x = 421, y = 0, w = 1993, h = 2999 Box[166]: x = 43, y = 39, w = 2352, h = 3022 Box[167]: x = 472, y = 0, w = 1938, h = 2999 Box[168]: x = 43, y = 39, w = 2313, h = 3015 Box[169]: x = 367, y = 0, w = 2047, h = 2999 Box[170]: x = 43, y = 39, w = 2313, h = 3015 Box[171]: x = 261, y = 0, w = 2149, h = 3030 Box[172]: x = 47, y = 39, w = 2313, h = 3042 Box[173]: x = 390, y = 0, w = 2020, h = 3026 Box[174]: x = 43, y = 39, w = 2317, h = 3038 Box[175]: x = 312, y = 0, w = 2086, h = 3003 Box[176]: x = 47, y = 39, w = 2254, h = 3030 Box[177]: x = 491, y = 0, w = 1915, h = 2999 Box[178]: x = 43, y = 39, w = 2313, h = 3034 Box[179]: x = 417, y = 0, w = 1985, h = 2999 Box[180]: x = 43, y = 39, w = 2317, h = 3030 Box[181]: x = 355, y = 0, w = 2051, h = 2999 Box[182]: x = 43, y = 39, w = 2317, h = 3034 Box[183]: x = 370, y = 0, w = 2044, h = 2999 Box[184]: x = 43, y = 39, w = 2317, h = 3015 Box[185]: x = 363, y = 0, w = 2036, h = 3007 Box[186]: x = 43, y = 39, w = 2320, h = 3022 Box[187]: x = 421, y = 0, w = 1981, h = 3007 Box[188]: x = 43, y = 39, w = 2317, h = 3011 Box[189]: x = 374, y = 0, w = 2020, h = 3007 Box[190]: x = 43, y = 39, w = 2317, h = 3026 Box[191]: x = 601, y = 0, w = 1802, h = 3003 Box[192]: x = 47, y = 39, w = 2309, h = 3022 Box[193]: x = 265, y = 0, w = 2129, h = 2999 Box[194]: x = 43, y = 39, w = 2320, h = 3038 Box[195]: x = 285, y = 0, w = 2118, h = 3007 Box[196]: x = 43, y = 39, w = 2320, h = 3015 Box[197]: x = 281, y = 0, w = 2122, h = 2999 Box[198]: x = 47, y = 39, w = 2305, h = 3038 Box[199]: x = 292, y = 0, w = 2098, h = 3007 Box[200]: x = 47, y = 39, w = 2317, h = 3015 Box[201]: x = 273, y = 0, w = 2114, h = 3034 Box[202]: x = 47, y = 39, w = 2313, h = 3030 Box[203]: x = 277, y = 0, w = 2242, h = 2995 Box[204]: x = 195, y = 39, w = 2086, h = 3026 Box[205]: x = 261, y = 23, w = 1544, h = 2991 Box[206]: x = 772, y = 292, w = 1634, h = 2714 Box[207]: x = 265, y = 0, w = 1669, h = 3003 Box[208]: x = 772, y = 289, w = 1638, h = 2718 Box[209]: x = 269, y = 0, w = 1657, h = 2999 Box[210]: x = 788, y = 289, w = 1622, h = 2730 Box[211]: x = 273, y = 0, w = 1661, h = 2995 Box[212]: x = 784, y = 289, w = 1626, h = 2710 Box[213]: x = 273, y = 0, w = 1661, h = 2991 Box[214]: x = 788, y = 289, w = 1626, h = 2726 Box[215]: x = 277, y = 0, w = 1661, h = 2995 Box[216]: x = 784, y = 292, w = 1634, h = 2714 Box[217]: x = 273, y = 0, w = 1650, h = 3018 Box[218]: x = 792, y = 292, w = 1630, h = 2706 Box[219]: x = 273, y = 0, w = 1661, h = 3003 Box[220]: x = 788, y = 292, w = 1634, h = 2718 Box[221]: x = 328, y = 0, w = 1611, h = 3018 Box[222]: x = 792, y = 292, w = 1630, h = 2710 Box[223]: x = 577, y = 0, w = 1365, h = 3018 Box[224]: x = 796, y = 292, w = 1630, h = 2706 Box[225]: x = 277, y = 0, w = 1657, h = 3003 Box[226]: x = 796, y = 292, w = 1634, h = 2703 Box[227]: x = 277, y = 0, w = 1657, h = 3018 Box[228]: x = 799, y = 292, w = 1634, h = 2706 Box[229]: x = 281, y = 0, w = 1654, h = 3018 Box[230]: x = 799, y = 292, w = 1638, h = 2706 Box[231]: x = 281, y = 0, w = 1650, h = 3015 Box[232]: x = 803, y = 292, w = 1634, h = 2703 Box[233]: x = 281, y = 0, w = 1650, h = 3015 Box[234]: x = 799, y = 292, w = 1642, h = 2706 Box[235]: x = 331, y = 0, w = 1607, h = 3018 Box[236]: x = 799, y = 300, w = 1642, h = 2703 Box[237]: x = 285, y = 0, w = 1650, h = 3018 Box[238]: x = 792, y = 257, w = 1650, h = 2722 Box[239]: x = 300, y = 0, w = 1646, h = 3034 Box[240]: x = 803, y = 257, w = 1642, h = 2714 Box[241]: x = 285, y = 0, w = 1654, h = 3034 Box[242]: x = 803, y = 257, w = 1642, h = 2722 Box[243]: x = 347, y = 0, w = 1595, h = 3034 Box[244]: x = 807, y = 261, w = 1642, h = 2718 Box[245]: x = 347, y = 0, w = 1587, h = 3038 Box[246]: x = 811, y = 257, w = 1638, h = 2722 Box[247]: x = 292, y = 0, w = 1654, h = 3026 Box[248]: x = 807, y = 257, w = 1646, h = 2718 Box[249]: x = 308, y = 0, w = 1630, h = 3034 Box[250]: x = 811, y = 261, w = 1646, h = 2718 Box[251]: x = 292, y = 0, w = 1646, h = 3038 Box[252]: x = 811, y = 257, w = 1642, h = 2714 Box[253]: x = 312, y = 0, w = 1630, h = 3034 Box[254]: x = 819, y = 257, w = 1642, h = 2718 Box[255]: x = 312, y = 0, w = 1622, h = 3038 Box[256]: x = 819, y = 257, w = 1642, h = 2718 Box[257]: x = 296, y = 0, w = 1646, h = 3038 Box[258]: x = 815, y = 257, w = 1646, h = 2718 Box[259]: x = 316, y = 0, w = 1626, h = 3038 Box[260]: x = 823, y = 257, w = 1646, h = 2718 Box[261]: x = 316, y = 0, w = 1630, h = 3038 Box[262]: x = 815, y = 257, w = 1650, h = 2722 Box[263]: x = 296, y = 0, w = 1642, h = 3042 Box[264]: x = 819, y = 257, w = 1654, h = 2718 Box[265]: x = 300, y = 0, w = 1634, h = 3042 Box[266]: x = 819, y = 257, w = 1654, h = 2718 Box[267]: x = 316, y = 0, w = 1630, h = 3038 Box[268]: x = 819, y = 257, w = 1657, h = 2714 Box[269]: x = 370, y = 0, w = 1576, h = 3038 Box[270]: x = 819, y = 261, w = 1657, h = 2714 Box[271]: x = 316, y = 0, w = 1630, h = 3038 Box[272]: x = 823, y = 261, w = 1654, h = 2714 Box[273]: x = 351, y = 0, w = 1591, h = 3042 Box[274]: x = 827, y = 261, w = 1654, h = 2718 Box[275]: x = 398, y = 0, w = 1548, h = 3038 Box[276]: x = 827, y = 261, w = 1654, h = 2714 Box[277]: x = 367, y = 0, w = 1572, h = 3042 Box[278]: x = 827, y = 261, w = 1661, h = 2714 Box[279]: x = 347, y = 0, w = 1603, h = 3038 Box[280]: x = 827, y = 261, w = 1661, h = 2710 Box[281]: x = 355, y = 0, w = 1591, h = 3042 Box[282]: x = 823, y = 261, w = 1661, h = 2718 Box[283]: x = 304, y = 0, w = 1638, h = 3042 Box[284]: x = 815, y = 261, w = 1669, h = 2718 Box[285]: x = 324, y = 0, w = 1622, h = 3042 Box[286]: x = 815, y = 257, w = 1673, h = 2718 Box[287]: x = 324, y = 0, w = 1626, h = 3042 Box[288]: x = 807, y = 257, w = 1677, h = 2718 Box[289]: x = 347, y = 0, w = 1603, h = 3042 Box[290]: x = 811, y = 257, w = 1681, h = 2718 Box[291]: x = 304, y = 0, w = 1650, h = 3042 Box[292]: x = 811, y = 261, w = 1681, h = 2718 Box[293]: x = 308, y = 0, w = 1650, h = 3038 Box[294]: x = 776, y = 257, w = 1716, h = 2703 Box[295]: x = 304, y = 0, w = 2258, h = 3034 Box[296]: x = 285, y = 39, w = 2168, h = 2952 Box[297]: x = 530, y = 0, w = 1147, h = 3061 Box[298]: x = 94, y = 39, w = 2036, h = 2976 Box[299]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxap3.ba000066400000000000000000000010571506303110300162260ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 12 Box[0]: x = 75, y = 58, w = 2093, h = 2747 Box[1]: x = 162, y = 12, w = 1550, h = 2510 Box[2]: x = 69, y = 58, w = 2087, h = 2764 Box[3]: x = 168, y = 17, w = 1550, h = 2510 Box[4]: x = 75, y = 58, w = 2087, h = 2619 Box[5]: x = 168, y = 12, w = 1544, h = 2515 Box[6]: x = 69, y = 58, w = 2267, h = 2648 Box[7]: x = 578, y = 17, w = 1151, h = 2510 Box[8]: x = 81, y = 40, w = 1827, h = 2770 Box[9]: x = 0, y = 0, w = 0, h = 0 Box[10]: x = 0, y = 0, w = 0, h = 0 Box[11]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxap4.ba000066400000000000000000000044141506303110300162270ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 50 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 346, y = 0, w = 2437, h = 3598 Box[6]: x = 39, y = 39, w = 2433, h = 3776 Box[7]: x = 354, y = 47, w = 2390, h = 3571 Box[8]: x = 75, y = 39, w = 2417, h = 3724 Box[9]: x = 394, y = 24, w = 2331, h = 3622 Box[10]: x = 75, y = 39, w = 2413, h = 3724 Box[11]: x = 382, y = 28, w = 2346, h = 3610 Box[12]: x = 75, y = 39, w = 2476, h = 3736 Box[13]: x = 358, y = 31, w = 2370, h = 3606 Box[14]: x = 75, y = 39, w = 2449, h = 3736 Box[15]: x = 327, y = 39, w = 2394, h = 3598 Box[16]: x = 75, y = 39, w = 2457, h = 3740 Box[17]: x = 0, y = 43, w = 2724, h = 3610 Box[18]: x = 79, y = 39, w = 2472, h = 3732 Box[19]: x = 350, y = 43, w = 2374, h = 3606 Box[20]: x = 79, y = 39, w = 2878, h = 3728 Box[21]: x = 354, y = 43, w = 2374, h = 3606 Box[22]: x = 87, y = 39, w = 2441, h = 3720 Box[23]: x = 354, y = 47, w = 2535, h = 3602 Box[24]: x = 87, y = 39, w = 2453, h = 3713 Box[25]: x = 335, y = 39, w = 2394, h = 3606 Box[26]: x = 91, y = 39, w = 2453, h = 3701 Box[27]: x = 362, y = 39, w = 2366, h = 3606 Box[28]: x = 98, y = 39, w = 2441, h = 3713 Box[29]: x = 378, y = 39, w = 2335, h = 3602 Box[30]: x = 102, y = 39, w = 2429, h = 3724 Box[31]: x = 350, y = 39, w = 2374, h = 3602 Box[32]: x = 98, y = 39, w = 2445, h = 3717 Box[33]: x = 358, y = 43, w = 2366, h = 3606 Box[34]: x = 110, y = 39, w = 2445, h = 3720 Box[35]: x = 343, y = 39, w = 2386, h = 3606 Box[36]: x = 130, y = 39, w = 2421, h = 3717 Box[37]: x = 366, y = 43, w = 2362, h = 3606 Box[38]: x = 122, y = 39, w = 2429, h = 3713 Box[39]: x = 370, y = 47, w = 2366, h = 3606 Box[40]: x = 138, y = 39, w = 2417, h = 3713 Box[41]: x = 256, y = 47, w = 2476, h = 3606 Box[42]: x = 138, y = 39, w = 2417, h = 3720 Box[43]: x = 287, y = 43, w = 2449, h = 3610 Box[44]: x = 134, y = 39, w = 2421, h = 3717 Box[45]: x = 366, y = 43, w = 2350, h = 3587 Box[46]: x = 142, y = 39, w = 2421, h = 3709 Box[47]: x = 374, y = 43, w = 2350, h = 3594 Box[48]: x = 232, y = 39, w = 2327, h = 3709 Box[49]: x = 283, y = 47, w = 2441, h = 3594 leptonica-1.86.0/prog/boxap5.ba000066400000000000000000000624151506303110300162350ustar00rootroot00000000000000 Boxa Version 2 Number of boxes = 550 Box[0]: x = 0, y = 0, w = 0, h = 0 Box[1]: x = 0, y = 0, w = 0, h = 0 Box[2]: x = 0, y = 0, w = 0, h = 0 Box[3]: x = 0, y = 0, w = 0, h = 0 Box[4]: x = 0, y = 0, w = 0, h = 0 Box[5]: x = 0, y = 0, w = 0, h = 0 Box[6]: x = 0, y = 0, w = 0, h = 0 Box[7]: x = 0, y = 0, w = 2521, h = 3394 Box[8]: x = 1141, y = 0, w = 1444, h = 3627 Box[9]: x = 623, y = 111, w = 1846, h = 3284 Box[10]: x = 0, y = 99, w = 1985, h = 3458 Box[11]: x = 442, y = 128, w = 2026, h = 3266 Box[12]: x = 0, y = 99, w = 1950, h = 3458 Box[13]: x = 442, y = 128, w = 2020, h = 3266 Box[14]: x = 0, y = 128, w = 2585, h = 3429 Box[15]: x = 885, y = 122, w = 1578, h = 3272 Box[16]: x = 914, y = 122, w = 1386, h = 3429 Box[17]: x = 146, y = 116, w = 2317, h = 3278 Box[18]: x = 902, y = 128, w = 1397, h = 3429 Box[19]: x = 116, y = 116, w = 2341, h = 3278 Box[20]: x = 0, y = 128, w = 2585, h = 3429 Box[21]: x = 868, y = 111, w = 1589, h = 3284 Box[22]: x = 932, y = 134, w = 1485, h = 3423 Box[23]: x = 99, y = 111, w = 2358, h = 3284 Box[24]: x = 926, y = 111, w = 1409, h = 1607 Box[25]: x = 105, y = 105, w = 2341, h = 3290 Box[26]: x = 769, y = 140, w = 1700, h = 3412 Box[27]: x = 111, y = 99, w = 2323, h = 3295 Box[28]: x = 111, y = 58, w = 2341, h = 3435 Box[29]: x = 169, y = 111, w = 2335, h = 3284 Box[30]: x = 128, y = 58, w = 2341, h = 3429 Box[31]: x = 227, y = 111, w = 2271, h = 3290 Box[32]: x = 1071, y = 87, w = 1386, h = 3406 Box[33]: x = 215, y = 111, w = 2288, h = 3290 Box[34]: x = 93, y = 140, w = 2538, h = 3412 Box[35]: x = 920, y = 140, w = 1566, h = 3260 Box[36]: x = 186, y = 140, w = 2282, h = 3412 Box[37]: x = 215, y = 128, w = 2282, h = 3272 Box[38]: x = 192, y = 146, w = 2276, h = 3406 Box[39]: x = 192, y = 105, w = 2306, h = 3295 Box[40]: x = 47, y = 151, w = 2579, h = 3400 Box[41]: x = 897, y = 122, w = 1589, h = 3278 Box[42]: x = 47, y = 151, w = 2573, h = 3400 Box[43]: x = 215, y = 128, w = 2276, h = 3272 Box[44]: x = 175, y = 58, w = 2410, h = 3423 Box[45]: x = 908, y = 0, w = 1624, h = 3389 Box[46]: x = 93, y = 58, w = 2341, h = 3458 Box[47]: x = 186, y = 12, w = 2323, h = 3406 Box[48]: x = 116, y = 58, w = 2341, h = 3470 Box[49]: x = 210, y = 6, w = 2323, h = 3412 Box[50]: x = 134, y = 58, w = 2352, h = 3464 Box[51]: x = 210, y = 0, w = 2323, h = 3423 Box[52]: x = 134, y = 58, w = 2352, h = 3464 Box[53]: x = 204, y = 0, w = 2317, h = 3412 Box[54]: x = 146, y = 58, w = 2335, h = 3464 Box[55]: x = 221, y = 0, w = 2282, h = 3418 Box[56]: x = 122, y = 58, w = 2358, h = 3464 Box[57]: x = 210, y = 0, w = 2300, h = 3371 Box[58]: x = 146, y = 58, w = 2335, h = 3458 Box[59]: x = 210, y = 0, w = 2294, h = 3371 Box[60]: x = 134, y = 58, w = 2341, h = 3464 Box[61]: x = 210, y = 0, w = 2306, h = 3389 Box[62]: x = 140, y = 58, w = 2341, h = 3464 Box[63]: x = 215, y = 0, w = 2300, h = 3383 Box[64]: x = 128, y = 58, w = 2300, h = 3464 Box[65]: x = 227, y = 0, w = 2288, h = 3400 Box[66]: x = 64, y = 58, w = 2405, h = 3464 Box[67]: x = 215, y = 12, w = 2323, h = 3412 Box[68]: x = 35, y = 58, w = 2434, h = 3458 Box[69]: x = 204, y = 6, w = 2346, h = 3412 Box[70]: x = 76, y = 58, w = 2393, h = 3458 Box[71]: x = 204, y = 0, w = 2329, h = 3412 Box[72]: x = 41, y = 58, w = 2416, h = 3453 Box[73]: x = 215, y = 12, w = 2346, h = 3406 Box[74]: x = 41, y = 58, w = 2422, h = 3453 Box[75]: x = 221, y = 0, w = 2358, h = 3418 Box[76]: x = 151, y = 0, w = 2405, h = 3546 Box[77]: x = 215, y = 0, w = 2306, h = 3453 Box[78]: x = 0, y = 0, w = 2480, h = 3546 Box[79]: x = 0, y = 0, w = 2521, h = 3406 Box[80]: x = 1153, y = 58, w = 1432, h = 3488 Box[81]: x = 146, y = 279, w = 1718, h = 3144 Box[82]: x = 565, y = 58, w = 1817, h = 3488 Box[83]: x = 157, y = 0, w = 1752, h = 3324 Box[84]: x = 635, y = 58, w = 1799, h = 3488 Box[85]: x = 198, y = 12, w = 2370, h = 3418 Box[86]: x = 0, y = 58, w = 2428, h = 3400 Box[87]: x = 163, y = 6, w = 2410, h = 3429 Box[88]: x = 0, y = 58, w = 2422, h = 3412 Box[89]: x = 169, y = 6, w = 2405, h = 3429 Box[90]: x = 0, y = 58, w = 2410, h = 3406 Box[91]: x = 169, y = 0, w = 2405, h = 3365 Box[92]: x = 0, y = 58, w = 2410, h = 3383 Box[93]: x = 169, y = 12, w = 2405, h = 3423 Box[94]: x = 0, y = 58, w = 2410, h = 3389 Box[95]: x = 175, y = 0, w = 1589, h = 3441 Box[96]: x = 0, y = 58, w = 2405, h = 3383 Box[97]: x = 175, y = 12, w = 2393, h = 3423 Box[98]: x = 41, y = 58, w = 2364, h = 3389 Box[99]: x = 180, y = 0, w = 2387, h = 3354 Box[100]: x = 0, y = 58, w = 2405, h = 3423 Box[101]: x = 180, y = 0, w = 2387, h = 3354 Box[102]: x = 47, y = 58, w = 2358, h = 3423 Box[103]: x = 186, y = 0, w = 2381, h = 3348 Box[104]: x = 163, y = 58, w = 2311, h = 3313 Box[105]: x = 221, y = 0, w = 2346, h = 3348 Box[106]: x = 35, y = 58, w = 2387, h = 3400 Box[107]: x = 180, y = 0, w = 2352, h = 3330 Box[108]: x = 70, y = 58, w = 2341, h = 3359 Box[109]: x = 204, y = 0, w = 2364, h = 3324 Box[110]: x = 93, y = 58, w = 2381, h = 3418 Box[111]: x = 221, y = 0, w = 1531, h = 3371 Box[112]: x = 99, y = 58, w = 2381, h = 3336 Box[113]: x = 192, y = 0, w = 2341, h = 3324 Box[114]: x = 204, y = 58, w = 2224, h = 3418 Box[115]: x = 180, y = 0, w = 2195, h = 3330 Box[116]: x = 41, y = 58, w = 2381, h = 3342 Box[117]: x = 169, y = 0, w = 1747, h = 3319 Box[118]: x = 716, y = 58, w = 1752, h = 3482 Box[119]: x = 239, y = 0, w = 2317, h = 3330 Box[120]: x = 169, y = 58, w = 2317, h = 3348 Box[121]: x = 239, y = 0, w = 2323, h = 3342 Box[122]: x = 175, y = 58, w = 2306, h = 3319 Box[123]: x = 215, y = 0, w = 2335, h = 3348 Box[124]: x = 186, y = 58, w = 2300, h = 3307 Box[125]: x = 221, y = 0, w = 2335, h = 3336 Box[126]: x = 163, y = 58, w = 2323, h = 3324 Box[127]: x = 204, y = 0, w = 2352, h = 3336 Box[128]: x = 47, y = 58, w = 2364, h = 3307 Box[129]: x = 175, y = 0, w = 2341, h = 3307 Box[130]: x = 326, y = 58, w = 2148, h = 3354 Box[131]: x = 198, y = 0, w = 2201, h = 3348 Box[132]: x = 87, y = 58, w = 2393, h = 3342 Box[133]: x = 204, y = 0, w = 1718, h = 3330 Box[134]: x = 734, y = 58, w = 1735, h = 3476 Box[135]: x = 233, y = 0, w = 2294, h = 3354 Box[136]: x = 58, y = 58, w = 2364, h = 3313 Box[137]: x = 180, y = 0, w = 2381, h = 3342 Box[138]: x = 52, y = 58, w = 2364, h = 3330 Box[139]: x = 198, y = 0, w = 2358, h = 3336 Box[140]: x = 64, y = 58, w = 2346, h = 3319 Box[141]: x = 186, y = 0, w = 2370, h = 3324 Box[142]: x = 58, y = 58, w = 2370, h = 3336 Box[143]: x = 180, y = 0, w = 2381, h = 3336 Box[144]: x = 58, y = 58, w = 2364, h = 3319 Box[145]: x = 180, y = 0, w = 2375, h = 3348 Box[146]: x = 70, y = 58, w = 2346, h = 3336 Box[147]: x = 192, y = 0, w = 2364, h = 3324 Box[148]: x = 76, y = 58, w = 2341, h = 3313 Box[149]: x = 180, y = 0, w = 2370, h = 3307 Box[150]: x = 52, y = 58, w = 2375, h = 3330 Box[151]: x = 186, y = 0, w = 2370, h = 3336 Box[152]: x = 58, y = 58, w = 2364, h = 3301 Box[153]: x = 198, y = 0, w = 2352, h = 3330 Box[154]: x = 52, y = 58, w = 2381, h = 3313 Box[155]: x = 180, y = 0, w = 2375, h = 3330 Box[156]: x = 52, y = 58, w = 2387, h = 3319 Box[157]: x = 192, y = 0, w = 2364, h = 3336 Box[158]: x = 35, y = 58, w = 2410, h = 3330 Box[159]: x = 192, y = 0, w = 2375, h = 3319 Box[160]: x = 35, y = 58, w = 2410, h = 3336 Box[161]: x = 198, y = 0, w = 2358, h = 3324 Box[162]: x = 35, y = 58, w = 2364, h = 3324 Box[163]: x = 175, y = 0, w = 2341, h = 3423 Box[164]: x = 0, y = 0, w = 2474, h = 3534 Box[165]: x = 821, y = 116, w = 1001, h = 3324 Box[166]: x = 0, y = 58, w = 2591, h = 3476 Box[167]: x = 0, y = 0, w = 2515, h = 3423 Box[168]: x = 710, y = 58, w = 1642, h = 3429 Box[169]: x = 134, y = 0, w = 2405, h = 3394 Box[170]: x = 0, y = 58, w = 2375, h = 3330 Box[171]: x = 111, y = 0, w = 2428, h = 3371 Box[172]: x = 0, y = 58, w = 2364, h = 3330 Box[173]: x = 111, y = 0, w = 2428, h = 3330 Box[174]: x = 0, y = 58, w = 2038, h = 3336 Box[175]: x = 221, y = 0, w = 2317, h = 3365 Box[176]: x = 0, y = 58, w = 2370, h = 3330 Box[177]: x = 111, y = 0, w = 2422, h = 3336 Box[178]: x = 0, y = 58, w = 2375, h = 3330 Box[179]: x = 105, y = 0, w = 2405, h = 3359 Box[180]: x = 0, y = 58, w = 1950, h = 3324 Box[181]: x = 617, y = 0, w = 1916, h = 3324 Box[182]: x = 0, y = 58, w = 2393, h = 3348 Box[183]: x = 105, y = 0, w = 2399, h = 3354 Box[184]: x = 0, y = 58, w = 2364, h = 3336 Box[185]: x = 0, y = 0, w = 2498, h = 3354 Box[186]: x = 0, y = 58, w = 2370, h = 3470 Box[187]: x = 111, y = 0, w = 2381, h = 3348 Box[188]: x = 0, y = 58, w = 2009, h = 3307 Box[189]: x = 530, y = 0, w = 1962, h = 3429 Box[190]: x = 0, y = 58, w = 2370, h = 3348 Box[191]: x = 128, y = 0, w = 2358, h = 3371 Box[192]: x = 0, y = 58, w = 2358, h = 3470 Box[193]: x = 146, y = 0, w = 2346, h = 3330 Box[194]: x = 47, y = 58, w = 2323, h = 3324 Box[195]: x = 122, y = 0, w = 2370, h = 3324 Box[196]: x = 52, y = 58, w = 2335, h = 3342 Box[197]: x = 146, y = 0, w = 2329, h = 3336 Box[198]: x = 52, y = 58, w = 2352, h = 3313 Box[199]: x = 233, y = 0, w = 2247, h = 3365 Box[200]: x = 52, y = 58, w = 2358, h = 3470 Box[201]: x = 157, y = 0, w = 2370, h = 3324 Box[202]: x = 41, y = 58, w = 2381, h = 3307 Box[203]: x = 111, y = 0, w = 2410, h = 3319 Box[204]: x = 41, y = 58, w = 2387, h = 3301 Box[205]: x = 111, y = 0, w = 2416, h = 3365 Box[206]: x = 35, y = 58, w = 2375, h = 3319 Box[207]: x = 116, y = 0, w = 1246, h = 3365 Box[208]: x = 35, y = 58, w = 2387, h = 3319 Box[209]: x = 640, y = 0, w = 1834, h = 3359 Box[210]: x = 507, y = 58, w = 1846, h = 3307 Box[211]: x = 29, y = 0, w = 2399, h = 3336 Box[212]: x = 0, y = 58, w = 2370, h = 3290 Box[213]: x = 64, y = 0, w = 2416, h = 3342 Box[214]: x = 35, y = 58, w = 2405, h = 3295 Box[215]: x = 76, y = 0, w = 1205, h = 3371 Box[216]: x = 0, y = 58, w = 2346, h = 3464 Box[217]: x = 70, y = 0, w = 2375, h = 3342 Box[218]: x = 0, y = 58, w = 2352, h = 3464 Box[219]: x = 76, y = 0, w = 2405, h = 3348 Box[220]: x = 0, y = 58, w = 2341, h = 3464 Box[221]: x = 76, y = 0, w = 2393, h = 3354 Box[222]: x = 536, y = 58, w = 1805, h = 3319 Box[223]: x = 76, y = 0, w = 1490, h = 3365 Box[224]: x = 0, y = 58, w = 2352, h = 3464 Box[225]: x = 70, y = 0, w = 2405, h = 3359 Box[226]: x = 0, y = 58, w = 2451, h = 3295 Box[227]: x = 128, y = 0, w = 1263, h = 3365 Box[228]: x = 35, y = 58, w = 2428, h = 3307 Box[229]: x = 128, y = 0, w = 2405, h = 3324 Box[230]: x = 0, y = 58, w = 2457, h = 3295 Box[231]: x = 134, y = 0, w = 2399, h = 3348 Box[232]: x = 35, y = 58, w = 2410, h = 3290 Box[233]: x = 146, y = 0, w = 2387, h = 3324 Box[234]: x = 0, y = 58, w = 2428, h = 3464 Box[235]: x = 116, y = 0, w = 2422, h = 3342 Box[236]: x = 0, y = 0, w = 2364, h = 3522 Box[237]: x = 0, y = 41, w = 1263, h = 3394 Box[238]: x = 0, y = 82, w = 2428, h = 3441 Box[239]: x = 99, y = 151, w = 2276, h = 3284 Box[240]: x = 0, y = 58, w = 2393, h = 3377 Box[241]: x = 128, y = 0, w = 2300, h = 3389 Box[242]: x = 146, y = 41, w = 2440, h = 2084 Box[243]: x = 0, y = 0, w = 2573, h = 3383 Box[244]: x = 0, y = 0, w = 1968, h = 3517 Box[245]: x = 0, y = 0, w = 1124, h = 3458 Box[246]: x = 1392, y = 41, w = 1141, h = 3476 Box[247]: x = 116, y = 0, w = 2236, h = 3389 Box[248]: x = 0, y = 58, w = 2346, h = 3389 Box[249]: x = 93, y = 0, w = 2253, h = 3389 Box[250]: x = 0, y = 58, w = 2375, h = 3295 Box[251]: x = 221, y = 0, w = 2131, h = 3394 Box[252]: x = 0, y = 0, w = 2591, h = 3517 Box[253]: x = 76, y = 0, w = 1048, h = 3458 Box[254]: x = 1467, y = 41, w = 926, h = 2940 Box[255]: x = 140, y = 17, w = 2183, h = 3412 Box[256]: x = 0, y = 58, w = 2585, h = 3458 Box[257]: x = 0, y = 0, w = 1118, h = 3458 Box[258]: x = 1409, y = 41, w = 978, h = 3476 Box[259]: x = 105, y = 0, w = 2381, h = 3354 Box[260]: x = 396, y = 76, w = 2259, h = 3441 Box[261]: x = 0, y = 0, w = 1130, h = 3458 Box[262]: x = 0, y = 58, w = 2393, h = 3470 Box[263]: x = 122, y = 0, w = 2381, h = 3383 Box[264]: x = 0, y = 0, w = 1857, h = 3517 Box[265]: x = 0, y = 0, w = 0, h = 0 Box[266]: x = 0, y = 58, w = 2393, h = 3482 Box[267]: x = 134, y = 82, w = 2183, h = 3330 Box[268]: x = 76, y = 146, w = 2311, h = 3371 Box[269]: x = 105, y = 111, w = 2195, h = 3330 Box[270]: x = 390, y = 58, w = 2265, h = 3458 Box[271]: x = 0, y = 0, w = 2480, h = 3447 Box[272]: x = 1048, y = 76, w = 1549, h = 3441 Box[273]: x = 0, y = 12, w = 2527, h = 3377 Box[274]: x = 221, y = 58, w = 2131, h = 3458 Box[275]: x = 116, y = 105, w = 1188, h = 3342 Box[276]: x = 76, y = 140, w = 2358, h = 3377 Box[277]: x = 163, y = 146, w = 2166, h = 3301 Box[278]: x = 64, y = 128, w = 2335, h = 3389 Box[279]: x = 116, y = 111, w = 2195, h = 3336 Box[280]: x = 64, y = 128, w = 2323, h = 3389 Box[281]: x = 146, y = 111, w = 2160, h = 3336 Box[282]: x = 41, y = 134, w = 2352, h = 3383 Box[283]: x = 140, y = 116, w = 2189, h = 3330 Box[284]: x = 70, y = 122, w = 2329, h = 3394 Box[285]: x = 140, y = 134, w = 2352, h = 3313 Box[286]: x = 58, y = 116, w = 2329, h = 3394 Box[287]: x = 215, y = 116, w = 2102, h = 3330 Box[288]: x = 210, y = 116, w = 1601, h = 3394 Box[289]: x = 111, y = 134, w = 2224, h = 3313 Box[290]: x = 70, y = 116, w = 2346, h = 3394 Box[291]: x = 111, y = 116, w = 2207, h = 3330 Box[292]: x = 70, y = 111, w = 2329, h = 3400 Box[293]: x = 116, y = 29, w = 2207, h = 3423 Box[294]: x = 70, y = 111, w = 2311, h = 3400 Box[295]: x = 122, y = 93, w = 1688, h = 3354 Box[296]: x = 82, y = 111, w = 2294, h = 3400 Box[297]: x = 128, y = 87, w = 2341, h = 3359 Box[298]: x = 70, y = 111, w = 2335, h = 3400 Box[299]: x = 116, y = 93, w = 2352, h = 3354 Box[300]: x = 76, y = 105, w = 2323, h = 3406 Box[301]: x = 146, y = 134, w = 2183, h = 3319 Box[302]: x = 58, y = 105, w = 2346, h = 3406 Box[303]: x = 111, y = 87, w = 2236, h = 3435 Box[304]: x = 70, y = 99, w = 2242, h = 3412 Box[305]: x = 128, y = 122, w = 2201, h = 3330 Box[306]: x = 82, y = 105, w = 2323, h = 3406 Box[307]: x = 128, y = 17, w = 2346, h = 3365 Box[308]: x = 82, y = 105, w = 2335, h = 3406 Box[309]: x = 140, y = 0, w = 2346, h = 3464 Box[310]: x = 58, y = 99, w = 2364, h = 3412 Box[311]: x = 134, y = 140, w = 2393, h = 3313 Box[312]: x = 221, y = 122, w = 2207, h = 3389 Box[313]: x = 111, y = 0, w = 2393, h = 3453 Box[314]: x = 0, y = 58, w = 2591, h = 3453 Box[315]: x = 0, y = 0, w = 2504, h = 3453 Box[316]: x = 0, y = 58, w = 2201, h = 3453 Box[317]: x = 17, y = 0, w = 2515, h = 3453 Box[318]: x = 0, y = 128, w = 2434, h = 3383 Box[319]: x = 0, y = 134, w = 2527, h = 3319 Box[320]: x = 52, y = 151, w = 2352, h = 3354 Box[321]: x = 111, y = 146, w = 2311, h = 3307 Box[322]: x = 344, y = 146, w = 2026, h = 3359 Box[323]: x = 70, y = 134, w = 2358, h = 3319 Box[324]: x = 99, y = 151, w = 2323, h = 3354 Box[325]: x = 76, y = 134, w = 2358, h = 3319 Box[326]: x = 128, y = 151, w = 2306, h = 3354 Box[327]: x = 291, y = 116, w = 2038, h = 3336 Box[328]: x = 93, y = 146, w = 2323, h = 3359 Box[329]: x = 99, y = 151, w = 2323, h = 3301 Box[330]: x = 1287, y = 169, w = 1287, h = 3336 Box[331]: x = 291, y = 151, w = 2049, h = 3307 Box[332]: x = 157, y = 105, w = 1624, h = 3400 Box[333]: x = 0, y = 134, w = 2428, h = 3324 Box[334]: x = 239, y = 122, w = 2375, h = 3383 Box[335]: x = 0, y = 140, w = 2451, h = 3319 Box[336]: x = 1293, y = 82, w = 1112, h = 3423 Box[337]: x = 169, y = 116, w = 2288, h = 3342 Box[338]: x = 151, y = 140, w = 2463, h = 3365 Box[339]: x = 0, y = 116, w = 1589, h = 3342 Box[340]: x = 128, y = 0, w = 2486, h = 3505 Box[341]: x = 600, y = 0, w = 1846, h = 3458 Box[342]: x = 151, y = 0, w = 2224, h = 3505 Box[343]: x = 99, y = 0, w = 2399, h = 3458 Box[344]: x = 99, y = 70, w = 2329, h = 3435 Box[345]: x = 204, y = 122, w = 2020, h = 3336 Box[346]: x = 349, y = 134, w = 2003, h = 3371 Box[347]: x = 198, y = 122, w = 2014, h = 3336 Box[348]: x = 367, y = 134, w = 1980, h = 3371 Box[349]: x = 175, y = 116, w = 2009, h = 3342 Box[350]: x = 361, y = 134, w = 1991, h = 3371 Box[351]: x = 175, y = 116, w = 2038, h = 3342 Box[352]: x = 122, y = 134, w = 2311, h = 3371 Box[353]: x = 175, y = 111, w = 2224, h = 3348 Box[354]: x = 105, y = 122, w = 2230, h = 3383 Box[355]: x = 175, y = 93, w = 2212, h = 3365 Box[356]: x = 332, y = 116, w = 1607, h = 3389 Box[357]: x = 169, y = 116, w = 2014, h = 3342 Box[358]: x = 128, y = 128, w = 2358, h = 3377 Box[359]: x = 163, y = 111, w = 2218, h = 3348 Box[360]: x = 122, y = 128, w = 2218, h = 3377 Box[361]: x = 180, y = 116, w = 1368, h = 3348 Box[362]: x = 355, y = 122, w = 1572, h = 3377 Box[363]: x = 227, y = 111, w = 2009, h = 3354 Box[364]: x = 344, y = 122, w = 1991, h = 3377 Box[365]: x = 233, y = 105, w = 2038, h = 3359 Box[366]: x = 326, y = 122, w = 2003, h = 3377 Box[367]: x = 192, y = 111, w = 2038, h = 3354 Box[368]: x = 99, y = 116, w = 2288, h = 3383 Box[369]: x = 180, y = 99, w = 2224, h = 3365 Box[370]: x = 309, y = 122, w = 2148, h = 3377 Box[371]: x = 0, y = 111, w = 2457, h = 3354 Box[372]: x = 291, y = 122, w = 2038, h = 3377 Box[373]: x = 221, y = 116, w = 2049, h = 3348 Box[374]: x = 291, y = 122, w = 2044, h = 3377 Box[375]: x = 122, y = 140, w = 2125, h = 3324 Box[376]: x = 361, y = 128, w = 1956, h = 3371 Box[377]: x = 99, y = 0, w = 2399, h = 3464 Box[378]: x = 0, y = 175, w = 2597, h = 3324 Box[379]: x = 0, y = 58, w = 2498, h = 3406 Box[380]: x = 0, y = 111, w = 2224, h = 3389 Box[381]: x = 0, y = 0, w = 2492, h = 3464 Box[382]: x = 0, y = 58, w = 2597, h = 3441 Box[383]: x = 0, y = 0, w = 2492, h = 3464 Box[384]: x = 0, y = 58, w = 2288, h = 3383 Box[385]: x = 82, y = 0, w = 2451, h = 3464 Box[386]: x = 0, y = 58, w = 2276, h = 3383 Box[387]: x = 12, y = 0, w = 2457, h = 3464 Box[388]: x = 93, y = 58, w = 2504, h = 3441 Box[389]: x = 0, y = 0, w = 2533, h = 3464 Box[390]: x = 0, y = 58, w = 2306, h = 3383 Box[391]: x = 76, y = 0, w = 2416, h = 3470 Box[392]: x = 70, y = 58, w = 2207, h = 3406 Box[393]: x = 116, y = 23, w = 2399, h = 3435 Box[394]: x = 0, y = 58, w = 2346, h = 3383 Box[395]: x = 87, y = 29, w = 2410, h = 3435 Box[396]: x = 17, y = 0, w = 2335, h = 3406 Box[397]: x = 87, y = 23, w = 2405, h = 3441 Box[398]: x = 0, y = 58, w = 2375, h = 3435 Box[399]: x = 76, y = 23, w = 2434, h = 3441 Box[400]: x = 29, y = 58, w = 2335, h = 3394 Box[401]: x = 87, y = 17, w = 2399, h = 3441 Box[402]: x = 35, y = 58, w = 2341, h = 3394 Box[403]: x = 87, y = 29, w = 2381, h = 3441 Box[404]: x = 0, y = 0, w = 0, h = 0 Box[405]: x = 0, y = 35, w = 2486, h = 3447 Box[406]: x = 169, y = 2865, w = 681, h = 378 Box[407]: x = 0, y = 0, w = 2492, h = 3488 Box[408]: x = 29, y = 58, w = 2346, h = 3406 Box[409]: x = 93, y = 23, w = 2375, h = 3418 Box[410]: x = 23, y = 116, w = 1980, h = 3383 Box[411]: x = 122, y = 23, w = 2341, h = 3453 Box[412]: x = 29, y = 58, w = 2317, h = 3406 Box[413]: x = 76, y = 0, w = 2364, h = 3441 Box[414]: x = 58, y = 99, w = 2300, h = 3400 Box[415]: x = 6, y = 0, w = 2445, h = 3470 Box[416]: x = 35, y = 0, w = 2341, h = 3493 Box[417]: x = 76, y = 29, w = 2352, h = 3464 Box[418]: x = 29, y = 58, w = 2352, h = 3412 Box[419]: x = 70, y = 0, w = 2381, h = 3394 Box[420]: x = 58, y = 58, w = 2329, h = 3383 Box[421]: x = 76, y = 23, w = 2381, h = 3464 Box[422]: x = 70, y = 58, w = 2317, h = 3389 Box[423]: x = 99, y = 17, w = 2370, h = 3464 Box[424]: x = 29, y = 58, w = 2341, h = 3389 Box[425]: x = 70, y = 17, w = 2393, h = 3464 Box[426]: x = 58, y = 58, w = 2317, h = 3412 Box[427]: x = 76, y = 23, w = 2370, h = 3441 Box[428]: x = 35, y = 58, w = 2335, h = 3394 Box[429]: x = 70, y = 0, w = 2375, h = 3418 Box[430]: x = 47, y = 58, w = 2335, h = 3394 Box[431]: x = 70, y = 17, w = 2422, h = 3453 Box[432]: x = 47, y = 58, w = 2329, h = 3406 Box[433]: x = 70, y = 41, w = 2381, h = 3441 Box[434]: x = 47, y = 58, w = 2341, h = 3406 Box[435]: x = 70, y = 29, w = 2393, h = 3447 Box[436]: x = 41, y = 58, w = 2358, h = 3400 Box[437]: x = 93, y = 23, w = 2410, h = 3453 Box[438]: x = 41, y = 58, w = 2358, h = 3389 Box[439]: x = 76, y = 23, w = 2399, h = 3453 Box[440]: x = 41, y = 58, w = 2387, h = 3389 Box[441]: x = 82, y = 0, w = 2399, h = 3435 Box[442]: x = 29, y = 58, w = 2399, h = 3394 Box[443]: x = 58, y = 29, w = 2451, h = 3435 Box[444]: x = 29, y = 58, w = 2393, h = 3342 Box[445]: x = 87, y = 29, w = 2422, h = 3435 Box[446]: x = 35, y = 58, w = 2393, h = 3400 Box[447]: x = 64, y = 17, w = 2451, h = 3447 Box[448]: x = 23, y = 58, w = 2422, h = 3389 Box[449]: x = 93, y = 23, w = 2445, h = 3464 Box[450]: x = 6, y = 58, w = 2422, h = 3330 Box[451]: x = 111, y = 0, w = 2375, h = 3482 Box[452]: x = 1205, y = 58, w = 1164, h = 3429 Box[453]: x = 250, y = 35, w = 2201, h = 3418 Box[454]: x = 186, y = 58, w = 2440, h = 3348 Box[455]: x = 0, y = 23, w = 2364, h = 3423 Box[456]: x = 0, y = 58, w = 2393, h = 3423 Box[457]: x = 99, y = 6, w = 2410, h = 3435 Box[458]: x = 0, y = 58, w = 2626, h = 3418 Box[459]: x = 0, y = 12, w = 2352, h = 3441 Box[460]: x = 0, y = 58, w = 2632, h = 3348 Box[461]: x = 489, y = 6, w = 2020, h = 3441 Box[462]: x = 122, y = 58, w = 2218, h = 3377 Box[463]: x = 111, y = 582, w = 2311, h = 2381 Box[464]: x = 198, y = 547, w = 2416, h = 2346 Box[465]: x = 0, y = 559, w = 2399, h = 2399 Box[466]: x = 233, y = 541, w = 1357, h = 2341 Box[467]: x = 332, y = 571, w = 1176, h = 2405 Box[468]: x = 221, y = 559, w = 2178, h = 2335 Box[469]: x = 157, y = 0, w = 2230, h = 3493 Box[470]: x = 239, y = 0, w = 2160, h = 3499 Box[471]: x = 163, y = 0, w = 2224, h = 3493 Box[472]: x = 239, y = 1531, w = 1403, h = 1333 Box[473]: x = 0, y = 140, w = 2381, h = 3348 Box[474]: x = 291, y = 565, w = 2014, h = 2288 Box[475]: x = 0, y = 0, w = 0, h = 0 Box[476]: x = 285, y = 623, w = 2102, h = 2253 Box[477]: x = 146, y = 87, w = 2323, h = 3458 Box[478]: x = 140, y = 58, w = 2276, h = 3348 Box[479]: x = 116, y = 29, w = 2381, h = 3482 Box[480]: x = 338, y = 58, w = 2073, h = 3377 Box[481]: x = 146, y = 23, w = 2306, h = 3458 Box[482]: x = 128, y = 58, w = 2201, h = 3377 Box[483]: x = 82, y = 29, w = 2201, h = 3464 Box[484]: x = 326, y = 58, w = 2079, h = 3377 Box[485]: x = 146, y = 17, w = 2300, h = 3470 Box[486]: x = 105, y = 58, w = 2247, h = 3371 Box[487]: x = 70, y = 12, w = 2195, h = 3476 Box[488]: x = 111, y = 58, w = 2242, h = 3371 Box[489]: x = 76, y = 12, w = 2189, h = 3476 Box[490]: x = 111, y = 58, w = 2300, h = 3348 Box[491]: x = 105, y = 6, w = 2352, h = 3453 Box[492]: x = 99, y = 58, w = 2306, h = 3354 Box[493]: x = 105, y = 12, w = 2335, h = 3476 Box[494]: x = 87, y = 58, w = 2317, h = 3354 Box[495]: x = 93, y = 0, w = 2341, h = 3488 Box[496]: x = 105, y = 58, w = 2288, h = 3307 Box[497]: x = 116, y = 0, w = 2346, h = 3447 Box[498]: x = 87, y = 58, w = 2253, h = 3348 Box[499]: x = 70, y = 0, w = 2393, h = 3488 Box[500]: x = 140, y = 58, w = 2276, h = 3435 Box[501]: x = 99, y = 0, w = 2154, h = 3482 Box[502]: x = 58, y = 58, w = 2341, h = 3319 Box[503]: x = 64, y = 0, w = 1950, h = 3499 Box[504]: x = 87, y = 58, w = 2311, h = 3423 Box[505]: x = 111, y = 23, w = 2387, h = 3476 Box[506]: x = 99, y = 58, w = 2306, h = 3423 Box[507]: x = 116, y = 17, w = 2387, h = 3476 Box[508]: x = 111, y = 58, w = 2294, h = 3435 Box[509]: x = 122, y = 17, w = 2381, h = 3476 Box[510]: x = 87, y = 58, w = 2311, h = 3423 Box[511]: x = 111, y = 35, w = 2387, h = 3458 Box[512]: x = 128, y = 58, w = 2276, h = 3441 Box[513]: x = 122, y = 17, w = 2370, h = 3488 Box[514]: x = 76, y = 58, w = 2306, h = 3429 Box[515]: x = 111, y = 0, w = 1281, h = 3511 Box[516]: x = 58, y = 58, w = 2317, h = 3365 Box[517]: x = 105, y = 17, w = 2352, h = 3488 Box[518]: x = 70, y = 58, w = 2311, h = 3429 Box[519]: x = 111, y = 0, w = 1921, h = 3511 Box[520]: x = 58, y = 58, w = 2317, h = 3348 Box[521]: x = 105, y = 0, w = 2346, h = 3511 Box[522]: x = 52, y = 58, w = 2311, h = 3423 Box[523]: x = 105, y = 0, w = 1467, h = 3522 Box[524]: x = 52, y = 58, w = 1723, h = 3371 Box[525]: x = 111, y = 0, w = 1461, h = 3511 Box[526]: x = 47, y = 58, w = 2335, h = 3418 Box[527]: x = 105, y = 17, w = 2381, h = 3482 Box[528]: x = 47, y = 58, w = 2323, h = 3359 Box[529]: x = 146, y = 12, w = 2335, h = 3464 Box[530]: x = 35, y = 58, w = 2335, h = 3359 Box[531]: x = 151, y = 52, w = 2329, h = 3458 Box[532]: x = 52, y = 58, w = 2335, h = 3359 Box[533]: x = 157, y = 12, w = 2335, h = 3493 Box[534]: x = 35, y = 58, w = 2346, h = 3324 Box[535]: x = 157, y = 35, w = 2335, h = 3470 Box[536]: x = 35, y = 58, w = 2358, h = 3359 Box[537]: x = 163, y = 35, w = 2352, h = 3464 Box[538]: x = 35, y = 58, w = 2358, h = 3365 Box[539]: x = 157, y = 29, w = 2364, h = 3464 Box[540]: x = 35, y = 58, w = 2364, h = 3354 Box[541]: x = 163, y = 23, w = 2381, h = 3441 Box[542]: x = 35, y = 58, w = 2358, h = 3324 Box[543]: x = 163, y = 35, w = 2381, h = 3435 Box[544]: x = 35, y = 58, w = 2358, h = 3359 Box[545]: x = 157, y = 35, w = 2387, h = 3453 Box[546]: x = 0, y = 58, w = 2370, h = 3365 Box[547]: x = 134, y = 0, w = 2346, h = 3499 Box[548]: x = 151, y = 58, w = 2160, h = 3359 Box[549]: x = 0, y = 0, w = 0, h = 0 leptonica-1.86.0/prog/boxedpage.jpg000066400000000000000000001674741506303110300172060ustar00rootroot00000000000000˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āæœ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ā"ĐTÜ-ÁđXā~´­ ԗ†ŖŠ2?tiö¸ŖˇI<ŧ"ŠÜ8nqųõĢÚŽ—aa „Wc×ŋęȝ7ÚŗĐöhâÆ™oĐy#íįúĶ›IĐĄ’ §ˇ'ųW¤h–víē[FǍ#$žäšÚKhŽ>]´{VˆņÔŅ!Pŧ?„NĨX]!ˆ1'ĐC'øWąˆP \}*DŒ*đ9úRöŦ9ã?đĪ#a­įqÔ~áÍH<=}ˇåĩē?HŊ˜āœ}qLS´€99ÅŌAʏ_ j Üé×ÜÅĪëR ę8ĀŗšãՏÖŊ|į$r( ŊčöŒ9Qä á]Hđ-%įÔ/øĶĮ„5B~[Ys˙˙õŊŊM4ŒœôõŖÚČ9QåIāíM‡ōdz˛Š™|Ē`æÛ9č<ā?Ĩzy@8Ī8ëN Įüé{I*<°ø+UŨ(.=fĪô§ę]Ėy˙ŽŦĨzf9ÉÆhÚ:p=čö’*<Õ<¨ˇâ_ûhßáR‡—¤á¯cQí“^•ˇé@\ú~T{I*<ō?‡3ˇŪÔSū™“˙ŗTÃáÖr˙9îąū*ģđŖ>ŊŠH 9įÜ9cØāáŧ$|×Ŧāũzwü+›1˙/’“ė‚ģŧ{Sz–s˸rĮąÃ˙ž˛ÉÍÔØíō¯øSĮÃũ7ŧ÷ īō˙…vXÎMöúsG<ģ‡*ėrcĀ:Rsžs˙˙ëSôpîĻ'ŪS]KgĶõĻwĮ~hæ—qŲv9ĄāŊ$Ë?Y[üiŋđ…é- %†Ũpk§Āį8?A<Ōæ—p˛0ÂÚ@;E”GŧÔËᝠ˙ûûö l…Čã—Ž;Rģî;#'ūũ,í+enŋH—ü*aŖéč0,íÁ‘ Đ=ēĐGéšĻ4ûUQ˛— ˛|ŖEĢ}ŽGáHG=Č銮‘ĶĄëÅ"ÆpG"§<{IĘ8úĐ>V~lœãÖĢOņyõ­鎕̏ãŒg­03,-öęˇk“ƒgõzŌ€įéM´ˆi\6ú”Á˙7øÕ°Ÿ6{b’Ô ÆxÅ4Û!ä üĒÛqõĻ‘ųS™ąƒ‡ūQ6—hÜxŽŲ A¤Ā<ņ‘LFRč– åí ?öĖPūŌÜüÖ0gÔF+['8ĀĨ#œQ¨Yá]!Ô Â=ÂÔgÁú1ņ柙Öē1ŒŌ7=;ŅwÜVG0Ū Ņüģûč˙C'ôŋ,r)ös]^:ži^=ņOš]Õv9!ā)Ū˜ĀĢ…ņ—‡í´^xB~O}Ė?Ĩ{0Ā<ח|L#ū;oúķ_ũ ëXIˇšŠčuÖņŽĮeėƒŒhøŠÜ<w*ŊGĩ@jÜ7Uoū>+CZÛTō’}ĢŽúú4[t¨Áæ˙*ĶE8į>‚ŠijM„dcÖ¯€Ŋ€üęĖØ ryįĨIÎ0?3zØÁ āŒôŽ;âŖy§hļˇVRŧ-Úáõnî=ĒŖģŨ•ΟS…įĶn#Yä„ųgDpĘGĩ>ˇ/‰îl`ŋ͝|å$*€†īšF Ī=+šû_‹g kÎŲã崗ō˙W[B>dJG­Å&æ.I @ ?qéVԐxŧ€ÚøĻVņ8ÔNģŖ ¤:?‰Ü|ÚļŽAIŸũRöKĢ;ė{˜ c"˜'ŒĘ˙…y øwÄ mGYcūáū˛S›ÂšÃ(&įYcčBņÚ=œ˜9ßc֍Äe睭â2VZōEđNĻø,ÚŽIĮ&?ū8jAā;ōÃrjLŊOī#û1ĨėáüÁĪ.ĮĢ}Ǥī•úŨNLŠ=ĪåcáíËš& Üv :~Y§ÉđÖāÆÛ-Žˇ]&÷ųhä‡pæ—cĶΊdœ5Ô WÆ×4Å#uũ¸úĘŋã^cođÆņPyĐų“ĘŨ„Ül?έÂąž-÷ŋí˙~ŠōøsKąß?‰tXÆãĒ؁ß÷ëū5 ž-ĐSík<ún§ú×>ÉÆ-Ą\uÍëũĻ)GÃ%m‡¨ķœ˙AG->áyö:é|káôrŠnĮ¯ĮįPŋŽŧ::”xöÉūBšŸøV„¨ũŨ–}ÚS˙ŗ —ū´jŖ+a×ūyĖöĨĨÜ/Sąļß<6?æ Ŗđ¨â7‡ā]ŗ}!đŦĪøW1/Sbį‹yķ’¤?-úy–Āû[ęÔZ^Ą`üJĐ I1īÄFŖ‰ÚnHöˆqųšhøn6Ÿ2Ž-˙<ԃĀP`:Ĩ¤?üMēŪŠZ0÷‡Đyk˙ÅSájé ŌÖøœuøĒĩmUŽnœqŽ-āû%XOڂsw1ú$Cų%¤ŧ2Ÿâžš>å…Ųúí֘~,Y…Ķn=\ Ú´RsytyčGō7lŸåˇËÎ@SŊ.ÁjÎvO‹*ßsHoÆūƗūŦŒ~]Č˙Žßũt‰ā›4P$ēž đn_üj_øDlUFé.ˆw\9ĪëG5.ÁjÎPüPģ~šãūē˙˛ĶOÄŊAēh.ām˙Ä×J<§š$Érpw#ųÔŋđ‰éĒŦLO=doņŖšŸ`åŠÜä‡Ä]dœ’qũīđŽĢÂ>'“ÄÖw3=¨áp¤Ü ĢŽhÖ~ŒīomȲFCcīŽyúfŗ~°ęņg'^??đĄō¸6—2•›=T• { Ž@Tō=…J ÜTS—$ôíX›۟ôáčĐļ\:´xúU{\}§wũ3aú¯øTˇ*M´  SČ=) e uk8cžâ(܌€î#ķĻĻąe!Ę\ÆÃĻC\g‰t¨5}fŌՑÃÛąGi Cƒ€}N>ĩžŋ/@;ėâ$vôũ§[(FÚŗ79_DzHÔ!`vČ{Gš×o›€HčqŪŧŪ_‡Zˆ……ŧ Ŋ˜ŪnđØ?2/‡zĒÆ<ôŲÉōîļ˙4?ΎH˙0šåØôäēˆ–‡įO㖝y’ø ųū=îOûˇ‹˙ÄĐ|¨‚?ҝ‡¸ŧCũ(äqķËąéĸh‰ÆāiC¯9¯0 Õc ¤:€ĪĨŌSĪ…ĩÕáNŦ>—(­‹¸sžĮĨy‹œņHŌ¯\Šķa k¨¯ž]d;ci)Áĸ:7ˆ‘nĩuĮ˛Ÿũšfģ‹Ú>ĮĨ3xí^]ņ-ņˇĩšü}éM§ˆT/uLXķũkš×ãŋč/..O(`Ë ž>kHBĪrīĐö,!Šīæn2pzpEhëŒ†ķ´ĢÁ`U`ޜ¨$gåČɞ=kĪÄē‹L°Î‘<ÎΨĄ6nd—c’zƒŸÎē{ώŌZĩãDūWßķu7sü뚓KŌ4ûk‡}Bye÷یĄ Ė@ęOÍõ¤Ŧ7qn<\ąK{åÚČc„dH~p$ØÜvÁ¯\Sgņ%ÕŗĘĶiķyŠ`FŒČ¸Feķôé@đŪ›yk=ÅŦŦ˙kÉi#—!•˜3ÎpztÉŦ™.ô—icšÆúmŖj˟0BŲ';ŗyädኴĸöDļúš â‰î­wÉhbpđ}Ųúî—Ë#8ėTũEJ|BRo6pÆ8ÅÛ0ˆ˜/Ls‘īMŽß@Ušˆˆ~Ę"ÚG¸Č!{ärr|ĐŠá뉮•ãHĖ&WHÅ~W3õû§Ö–‡¯ržĄâ]FÕcÚ[ļāš2ąÄ3ĮņšÜŧžš-{ȑ|áneDå°ÛrŊb]Iá1nŦE#¤QdVCģ#ĒĄ…kÚęÚtB &dˇ”ĀB…@éĀĄô˛ęs‰¨S¸´+ÍmrŨ[Äzc į›tĢ—íũ“yԘËGg#lOõnâEPū¸Ãg˙šÎo @ëöhâSw#EŗËl HŒ‘éÔU­FķJ´ēŠÚöŪÕ`Įr´[™Tē¨ryü)ß]…m7eĒjŌk‘é÷Od˜%‘Fw6w—ŸUÛ5ˆĩ]SOÔ­c˛¸DĐČDS/.ČT€Š­^Ķĩ-QžÍ¤8šHІh 0@ÛJ‚GbJ ×4ëÍkû1íÜÜE+…i"ųC*ƒÁ=đr>”ēė>›˜ˇ^$ÔŅõfI­ÂZ¤Á ˜Ų āˇ?ÄšënÃVf‰Ŗž¸G•ŽÚŪ>˙˸q“Ž3ųU­BÛeĨĖ–––íq(Q!xÁÜ3É#ØņXē^˛OˇÕu D‘ŧķOmŨšū_™;>@SׯŊ5ĸ ™ˆo§ŗņ%›Ep÷ ų.3æ~õ ;6Ö<Õ_íĢ롚QpđâXÎŅJ~ôŖ/N@ }Ík_ø‚ÁæG–ĘæFˇ‰îØ8*ĒÅNOPOĻ}Å:ÛÄ[“ öRGļŲ'r0@-œ(ä’A§­ļģŒņJŋöįpÚąî,{⃟԰~/UņY8Y“ôgŽÅÎđÍķFwm!ēkšø}•ņ/ˆ—ūšg˙oņĸ?Ãb=õ4ÉĪČ{Šq<÷Å2RJžšŦMBĶaĪiÅIsͤ¸ë°˙*¯ÚčŨōįĮõĢņé!˙dԈ3ƒŋpŪ1ŌË ¸‰xoy’ģ’îąų×vÂ_X†GŲca˙Öģ§AŒ“Åk>„G¨ŨäɊq$)騠1 ņīNb>_įRX›ąÜRî!{~4aO;ąŪĩY6–Éõ¤<ĀN§Zx‘@ši‹äf‘“c‘ž´Ä:I0ØÆk˙Ä6ö7+ŒŋČdvΨ g߯JؔdŖ9ācĩqū"KIukn"h× ŅOâ3N)7Š2vGQæ+ €1ô¯-ø—ˇū+n?åÍô7¯Mˇ™.á/8V(w ƒƒ^gņ)âĄĩ˙¯5˙ĐŪŽŠ[ō|ĐÍęUʏÁ?Âĩ5`JˆmÎbėzYvŧ‰ķÂųg÷ÂÕũAY´¨WČ\äķÖšĐ[Ņ˙äÌ$ūf´ –'’1Yē,Čēt’;`oÆOoķšÕ€?ĨZ2{ ĻŽ?â\{ü.Ȗ21×;ąũk´' ĐūUĮüJ#ūË‚ÛˇŒ¨Ī}´§ņ"%đ˛o¯üK˛>īî°O_õ×W’Ŗęk‘đ+ˇö^ ŗq'ūš-t“\4exëÅø˜ãąãw+Ļ[Ëö†ˇōŽâo5z Î cĄĀ$ķé\åūą¨ĮsÜH<°ÜûsÛ¸Ŧų|CzđiđX$˛ŗ<2M3Q‰U=Ŋ3ƒŠqēĐNĪSFYĩƒ.ŋ%ŧŗŦļĐ‚…† +nĄ`wzž~•“åĪϝĩÅÛÆąO.ų]ãdlŦx$†íČ­ø|Q-ÂGäXŧ„Ų‹‰ümĘš ŸĒc>ãđŸCՎŦ“‰ėVXâuˇīYpßڕÚčLČÔ!Ô.?ļ'™îĻŽ-Ä6ée7,¸ę~÷Ođ§\ZŪ47ĘĸęV1ß ¸åļ”ú튟SÕ/ŋļeB9íŦ K‚ˆ'zļįĻĀãŪwâĢ2õmmŅŖŽÖYU¤b|aIĶįûz††tļ7ˇˆŲ˛žˆ›ČäV#…6ū^AŨŲēũyī[z&›um¯ęw—Ģ1‘ļĸL\ylW ÎAÎ{cĶ­eęúŪĒÖķĮad”ĀË)ō„˜ę0~÷=°8ކ čbŌNÎn#E‰åáåbšzž´›vJæ'Š4­BëQyėlã›ĖąxŲÂāīVį¯C¯jĢ˙ũĖēĨĖÉg fYŽš$âP?{5§â˜Uô;‚ō<Ĩ÷ĄČ*7(${āšĀ†îūÕõ—Qļ°-Ā]Ë8äqîzqm­ŌšĶø{N›MĶZ9Ō(ä‘÷ĸ9EųBņ:ãwՍsÃ@Ŋk{ב ˇ™šWŒ¤Ŧ|ÂûG͓Į ŽŋÅí]…á“uœ× =ÜqŦŒ@Æån‡‡ošũN;Ŗ¯BōĸŧQ¤^L…„ŦÎC‘Î2Ŗp?:Qnå=‹WzĖ—rŌ2‚0ŠB› +c?wķü6ŅĖdæŖX&hPÃŊĖ9QՍĩۚ,'žā EVeĢ°šĩ—˙đMūÍmR}ūjÍëÜ6āĖNwãŸa[ŪIËŨ>ÎÈãM%&;#O XŊíÕÃ]Ũ™2a‘QN§h9§Úé1%ߞōË(6Ëk ,0øčN^OOZÛ[nH,2LĶ>ĘwÅvƒž;úQĖÅƌÍnŨ"đíܨD[WTQЄ\€JëŠ1†PĀ{g˙¯]ž¸Ŗû*ë§0¸˙ĮMpž-˙ –¤ ĩĸ1ūū5pø2øŅčĢ÷ˆãëK÷ŗĶzQ˜öۚ¯Zɚvą¸‚4Æį”~@˙ŲjíÆEœÄ á ũ*u^NDŒōëV.ëYĀ8%N $ āeIãë@@lâãūÛ]›ßÛ=ܖ~oīŅ7TŽ;ôĪ#q\thŌ|AP9hāŽ2GŅÛ?ĨI¨ŲŪKss"Av˛—ųXrŽd‚bY#Ųkv¯oC4ísĒļŊĩŸ)•Ũˇm pØöŦC,Wp$‘œĢ(a‘‚23ȝ>ĶôëÅX#EŊŠ33Ų;€î Ī2ŠUŽõe‚Oø˜¤ÄîÃīÁ#É?†häķsĐļA=°*;‹ˆ,-dšâQKŒŗž9˙ë×'¤ÜĪdn¤žâúqqŽU#%‚āŒ÷Ũ‘øU¯ÜJ~Ė’JņÅæäʤ§c×<ņĮjž]l>m.t™-ƒķidt‚Ķ|ŽGVcŒWˇZ›KŸRžĶÅ >ŸēŨéüDÔąÎ×^îô8wF2ˏƒ”ŽüņG srČ0UÎGznüß)ĪzķÖžēļ†k?´m…a`cĪÜäŲëŽ1øÔÃėŽ#Ž+¨Q’%]ģ8'rÃØäņíUČÅΎ˙hÁĀŧŸâWüŒVßõæŋú×SĨëZ¤Ú”1K4/Ä \ēsšäū!Ëö­rÖHeû R}Ď 8EĻiž•l˜ŽQÎJuŋv*Ũî?ąĄÂ‚LääUKu æ1=”OüķĢ—1–ŅāCĪîĀųO¸Ž&tđüA´ÖWžč+c‘ŒY^Qö9Ž ŸütV§¸­“Üq^AÍrĀ> ŧãŖGÉį:×Zp}s?đ^ĸ8û¨FûkZAûșlʞČŌ”-‘Îq˙,ĮOĘļu]FÚČĀŗC$ŌČ~D °ĮVö#Ÿzįž7üJŖ˛6&?ņáũ)úänū%ŗû]ģƒkˆĸ…7ŗĢV­…ĀlįđīTÕæĐ“÷QĄĒCeŠK&˜ī"\!Žåļ 6W’0y^•Z :Ô­ÄRË<ÆÃˎ@K,’nũNGJ­oáÍAu[Į'•Qb_0 FbËÉÉĘļßÃ5NÛÁˇĸĘâŗ†) `ē’H¸. ņŨ@įښK¸]ö7`ŅtÛ8-āûD¤Ynt‘æå‚0ŲĮojʂÛC¸Ķí ÜĘlvŅŧo€ÍČ~ģNbrzdu‰ĄŪßŨj¨#|ĐKs*C 7.˙—ŒnãŲ=*Yŧ;|tHbžŲe"w•­Ļ”É凍—ąÉÜÅŋƏ˜žFãŲhzjēĢ~õ,„-LCWš˙´y÷¨<.ļĐڛˆ,%ļ2"FĒķųšT^A#üŠ‚ßÃr˙h<×-o,xV2Ŗ~ņɄFĘF>éÚŠíÅZ´ŗēĶí´K#HB¨7n1´a>aūķ1ũj^Ö¸Ņ Î•eņÔfVKwV2Á(„ōK0RgžAéøTK˙õÛŨ_ŨZZ‰X#Ũ˜ŲBᐠÆGŋ5ŠŦ˜–ËȎõ Ž#r–”õ(uÍ`KĨËsĸÛÛŨ4rƉ ēŗõ ęÃq8É!ßđŲ#ˆĖ PVrŖ°oĻÜ}{÷­g–Âí`Õ#"Xí_+i‚>V?Q´õ5•w ēÜjmįÛAgwf!SåüŅĨr9ÆÜWĄ’Ũ´ˆmĩ ›y$šSČ6 !AįĻh~@ŒI|[rŅŨ­Æ™ûxÄŪS30I+´ ߨ5Ą˙ 5°ēDRßȒY ­—€ÉˇÎXTvž–+Ë[̍^Ūh|“*Ɋš˛AĀ=…<č6zĨŧĪu1lé#ld*Œ‘ŽĘŋ•7Ę/x•5åšōd°ee\(;‡<ō2ŊŊsKĒjfĶM–ų`ķž4v(ŧp:ūB›§AaŠjBúše’Ė}œ˛ËōČ0͎&ŸŠjÚQ–m2á'xŨJNŅÄÅÎXtę:tÍ.ē"ēöŸ>cĨÎĖÎččōnƌ¤į,@\:ąúVÕ¯ˆÆ¨–ic$H ¨•ÁōÜ)ãŽ9ņöĒëŠoRÍūÕæÚ)}ÎĖ|ÕncüY8öļF5Hî¤PĪ,ˆfpy˜cĮĻ#?Z§gЕĄļ&€! Χ5­ëˇvWÉq4rÁ,‡vA ‹¸=j凨ĸŧģ˜Nŗ\]‘ ŋå˜TQīęjŸˆí´ĩˇ:õˇž°)8˙ŒdĪŌĻ6žĨ;ØŖˆĩoˇ˜|›Qrˇ7$Ãæ/á1éËŦõ^Xôč ĩyŽ-îY m?wô$žjí—ü#qÃgu"[ŖÜēĒaŒ˜)ŒsÜ`•ÉãŸSM°Ôü=´ŗ‹H-ãą-ŠP΀ą`dŒ•]ÅÄ"ęf‰Ē€ŦA'ŠáŌ°t¯yū žæęÖh-d(Ņh_Ũ“š†O%AÁcëO}l-´šŌÎķ]xxMsE4eã#Héé\€äøMnCgsiņį?îĮ^q47úbOnûâ•7!õWšøÁņÁāÚl|{ėŽˆ|2 |Q=DŋZN„ŽM=š=Ŋj0>nŲƒ6ôÛfé†9˙žXZšā˙ŖĖ?Ų=j NŲáĀęā~´ũC"ĘāŽŅž´DĮijR9ųcXÆ9!1˙ŗÖū¯u,\Æ?‘đvļ@ü>ŧÖ'†Į™â]bsĘųŒŧú…ЎĩAĻɧÎēQm˜šãˇõÅm/‰Įc˜Ÿ_Ôâ°KeƒŖÆG|‚›ÁãÕ€ĪšĢĮē>c;åÁ܌`2íUüBœÕ•Ķ|7LJ´ŠHä‘YVRXchõöZŖŅ'ÔŽ­‚KiÚL#“9Îxų‰÷āĶŅôŊÉŨ3éEŸdn 0;˜ė ããōĢë¨Û_ŲÜ]K§˛ĩŦŽŅŦ˜ų™GP1U Ņ´W‘d†ņū\*ƒ7M…GčP ŗŸ`ķN[×}ėåÔžJīäé×õ¤íĐz•ŋá%Ya~ĀÁä$+äRŸÅ…IŖk{á‰.Ž-Fõ‰ŧØYx,#œū5^ÛÃúpĶRâ=BāFev9ā°=ĮĒÎ´­ô1‹.ŸÃu+æ8ÜpF?(|ĸW0ôũF×ėq.Ą-įČĐ †" vÄįŋķĢ1ęŪō MHãU儎:¯AT­´ûKib´¸ÕŒ¯ÎĮQæÁũH5j_^C šŠrĪĉ€ÆOJo”Z›FĶMĩļ7ÛĮˆâ,FĐ;ĨyW‹Žm'ģ°’Ų‘c6c€w`ųÔú×Ģ[ØĶo-ĸēYF9!ۍŧWxŋLžÃP´Ž}ąČöĄĘú|î?ĨU2f{ ‰Ü72Â3ŽŋōÍŋÂŽŧ¸Đ흈čũĄTôÁˆP“Ž"?øãU–†cáģvqŒģėĪĻk…krO6m%ęI “ŽûEkōŒ~+ۅ­Â°Æ6ŽžÕ˛8ëÎ=ëDg-Æļsšæŧs“āŊHg?"į?ī éOCĐ×=ã@?áÔ˛Gú‚•\~$CؘŸˇ.0Ī”„€ڒģ9ÎŪõûĩČü=ĮödXRĪīË]â€px§?‰„vG1âmBãHĶŌH@I%”Æ’IĘĄÚNHĪ}¸æą$Ö¯–ūęe’Κ;43‘ĀYŪåš“Nk¨ņKĮŸjĖÁeû\K 'äNĐX`ä įęG6Ŗ§ÁXÁgōDĐÚžčđ„3ÆNr=*ĸôØOsšēÖu”–Ųäq1‚ŨŪ!;‹Íåą˙tƒŸĘēĀōhŗ’Jģ<üĮ€A!‡<˜ĒÍâ„Ygē6Ņ=œpÍ(‡Í"'ÛÎ@œžŧcÔÔú§‰Z܏.ԘR堝7^fUAį#ŽqŽ´;ö‚ĩąˇÍŖĮƒĘąÉqe‘üĮhøĮŪ*ztaZzŽĢĒyÚĀ‚ö]ÖË)ōÄ8ō‚˛#Žw ÃŋBxÅv–šõĨū¯sam…mÔ3Nydā;āŽŊyôĒÚŪģfŪ¨VĐäį›Qķö9vK[Ņ ÜØ*U€Į<}WžKķŦéųŗÜŖ¤sF%Yœ–SŒVųŋ¸=kiŧUm‘ĸi2¯’L(r™Q戛úėüũĒ׉Žĩ kX>ÂōF^B¯,J¯ĘHČ#îäsŪ‹´ö´ÄŌK Œ`,Šžj1™_^Nyf˛ĩˆ'xí%ĩKŠ"i\ÂęŦĪčĘŠį7מ)ëˇ˛YÅ Ô {ss4o ¯ČĄ1 Į^FŌ9?Zļž!ÔKŦ_cĨšōX!į!PÄäuâ’MFfÉiĒIĢČ6Ūī3:Ū^ߜsŒoīôĒȡW–RÅp˛ Uƒa—7BųVäōJîĪēæēŨSģÔ~ĐĶ[Gģ"ē>âĖŽĘxôųGįSC%ĨŨÃ]@bvQåŗ¨TžŊ{QĖ֌9neøZÆëK°•¯1•ƒŨ”á€Ã0#ąĮJĢ6‰xuYdŽÛíļ“ĘEá‰FX’GŪcŽŧvŽgUÖ÷_–Ņ’æ"ûnlŗŸĸ‘"Urk­ĶõY-.Ö™VÂÛOŠo% %É$ƒ€9ãˇzĻšÔ”ĶІ/j)Ŧou‰âUG[įqeVqŒō[߁ëXv^ē[T¨Œˇ—Fp~ę2ģŽ9•öükģÖåē‹G珺Ėq;"œœqũ+‹ąœŲÆc7‘[+Kļ]Qo4„ fČ$ûqŠ#&ĐÚW44ũķNVŧ{T’æ+ãˇPų!Õ0WčOz×ÕôĢ‹¯ =Š™Eáˆ!IVa‚xõ„Ū+š‰´¨dŸ4Ē$Uˆæd;ļœcŒ€§õ×[ÜEŠÅŨŽ%ˇbÃĖÆAāûÔ˙;ąĢlŽ^ĪÃˇ[ˎ1Û1s$‘'Î(ÆxčsĪSŠ•ŧq$Nfŧ€ĖoˆÂ"Wg˜Ī†\ōrįŊug9C°ÜNCtĶā…ļc 0G9üÍ.v¨Á‡Ã—)Ž›öŊCēķ°qåyxÎÎ)ĶøSÍ]IN§"‹ˇF j|§Ü #šûĸˇüĻķ@*6ާ4’ŖČAL ~”šØųQCOŌWN†íá:GüĄvo%ŋ“ŪŗWÂĪ“ˇ0c:Ė,HĮpÜ Ü=0+|ÄzŽŪœ€:œĶÄ „ä_nsG3‘“†lžā§Ú&hžĮöY#ĘâEËIÆA˘¨ė|o§j1\ĩÕÅÔiB“å‚ėVĀã…$tī[Öą:HĎŨGzļΚ [ŸLŅĖÅdfĪo ĩ’AoŽ$QTpĸŧĢÁ$/Ž"Į}=G>Ęŋá^ˇ}šaā“^Ká#ņŨ `š6Œŋ\gü*éü2&{ŖÕ@„Œžk‡ņĩˎö Zá™lÂ1•CļD’ĪzõØ.í5Í2_6Ũ–&&2­ß€{}kĘū!=ŋü$Q[Aoĩ-­–.ŊNæl˙ãÕTŨؤLŌUŧ¨H^1$vę?ԁ‰Đ ˙sx…QŅC}ž<œ*ũ>vvŪ‚Ž;ĸÆÇĨÁøčFîåŦÕÚę­Ļ•r\´Ÿŧm¨ąÆ]›čĒ Žá’ƒĻ Ī>JãŒqæËū5§âmâ-5o­ÛėčYPDĖí:°Š@8ļįĩ\•æÉOŨFî­n5‹AĪ‚eߕádVY'¸Ē֞¸[ûšAēŋÍlrā ãÍõ<öĻ’î ›ōxygĩšŲŽäg[”"5ōÖBųįĶúŌMĄXZĸũĢTš%îČvd\ˇ—ĩÁĀčWwĶGEŌô›Û׆ãË{šĘŗŽĐÄGžßኃ\Ņė5{ˆî.<āņ&Ā#}씞žqčTbš›Ÿ ^=äREĻĮĩa´Čš —÷ĪSíŪē{Ųå‹RˇŒ€–~[4ōˇr¨>¤įō¤ÕĶ)yĸ•ĢxįŊ–[œŌ¸ķČ 7‰Ķ•ų5m?XŅīĸē)!JI™—å‰*xĪĻj]BA¨é—1éͤ…r$ Į)ÔrzuŦ“áé#1,F"ŨŽôGæ  Ž8Í ]ÁųØĮáË+{fš…ūĘâUg˜įvĐ7za‡0EhÛXh×Įwk rGįŖt'ÎA?ĪÚ˛§đÕËÉĒÅąŽ˜Q`;Id*ĄqėŧvކĘŒQĪåy„eŧĄĩC“ŸzRî˜×ĄĪļŖmáíZX-4Î&ÍÕĆLģ°JįŽ3’2:ûÔļ͆•Ė,ˆ–V„/™¸ŧ¯# ėÅ@÷'#ĐöcRŌįģŊl[Ú\ZM ˇ~vʙį!ģŒöüjžĄáēíSM¨,zŗĖ$¯’cl~iŽWš:­‹Z^š6Ŗ¯ŪÛEkØĄQ˛UF˜€Ã$Œr§ĩ\ÖõytŊ)ŽŌ4;\+’ ģ€-×Í&—¤ÅĻÜKqöÉ%iU•đpPģ°pŖéPx‚M&Keŗēŧ–pd˙GR[h䓀~^A?…-Đ­lVˇņEË][,žCBÆ1•#… Žq÷˛sL˙„ĘÕ¤ōÚÖvRYKˆø]ŽŸ Č9÷ü*Ķčļ÷&Ęyĩ9&’4e-ĩfGÆAwĀéUâĐėí&–öIæœÄd›ČŒŽs)ŒyG­WēOŧjMkķÛ4Ā–…ÖXÎķ×gõ§jzŧúuՄÛÄÉrė™-‚˜Fnžø¨Ú+F×ĸŸí)ž8Ú4…{1Áf>¸}3KĢGĄę?d{ː ~ëíÜįåŲĮ^¸#˙¯RŧĘ~F=ŋŒ5îí“ė1yR räIĶÍČãœhˇņNŠödéÉ-Ė÷’C+'dÎsĮ_—úđ*ö“Ąxvė‡ĩ>cÂ"]ŠrX(BJƒVĶÃz:n‘mä\N×+™aú×§'zĻâē”ģŽŌĩ›ëénÅšCo H˛n.ęė§#įX×ē†Ąeã ß&_6ŲmŖ‘āvåGÍĘ~+ĪûÕĄoyĸéÚũΛ o5ÁČÎ˙ëY#hį==1øÕ{īhŅJnā‚9åY´“2íg%ąĘā™Í$ĩŅĻåH5Ũfhô’æČ čÚb9_”$ Ώ×ڝâõ’ãėhķnĪ&čžo/wF$¯QÖŽ]ęūątÉ‡}”~t~\;„@•)OŽjä§kņšŅe0LÉļâuSÛ[ę×9mPšĶ,Žå–íĄē“ė‘Če&M…ÔfSžˆŒtČŠâņ ũÜē\k™đ¯V[ÄÔ´ØîcŠHÕØádPŽÄŒw¯.ИˆšgP<ģŒØī–”6OtzĄ=:cŌ™Ál’2*CŸË֘ŖžOzÁ›Īpļˇ6ŦWpi‘ˇZŗtŋčōöMfęg6GŽ.ūĩŠp3nßîšq8˙|EŦåZAÆ?؎ĩ5ۙŦ-c{HÆæîڙū#sŒûVW†šņŽN~đ˙Đ#­}}ŦÖ;gš7„ŖĘ0o_LvįÖĩ á+ÂIÍž+Y 1IĩՐ €Ė ¯Ķi?@{Õ{ŋXJŦļöI1em”š9Ā=AÛū5rÂĮOžŠ;˜ĻšË$v AŨŋzaāÕU4í:õmDW“ųrE*F<ąĶ'æÎ8ÆN3×"žŠ,zψnÍĘĢŦŒŠ>Qū,?N f‘§ÛjļŌęwÄŌŨ‡˛ėsߎ}č‹Oĩ}ED˛šE–4Ú¤á~WØãđ5ĩa [ZĮiæ!’•OON)7mkšÍÃ>‰ą#Í 14NdYõ$ėĪN9á‘u¨^Ü=ŅXōžlnøI2>F˙{RßhW0&Ĩ kOŗÉûԒLî}ûOlg<ûÔMáéæ –—6nčS+×Ë C~ ONâÔļš‘w3"L ËLG/Ė s׎{ŌÅá‹HŖŠu"2ƒ€–ŋύtÍëMÕūŲqm.wDܒÄcŒ}j]R ĢÍNÚxlĖ‘ĸáØ0~u=>‚•Ũ÷–ØžßK‹Oē†Ų/Y˛ŦQõfˇYūīĖÃĨvúfqæÚy–rG˛a'˜Ė2‡jdõį8aø×'ņ[ūFkOúō_ũ%\¤ËcŅ4ļaf¸ä¯´†ŽZ4w^N%uĀúUM&#öSƒ‘zrÖÕûMĢĻOŒ`\˛õöŽ&uĐļÛ=?ÚzØ 6IéYhēnī÷šˇ~ŧ֑ØĘ{*9â¸÷xKVÚp~Į.8˙dÖÛp8šĮņFáÕš%žĮ/~>áĢ[™œÂöWĶ‘Bœˆ@'ôŅ˙ÆŊËÎ … +ŦG Jķ/…‡¨Üs zâOūŊzƒJ¨€‘É=Ēę|lQøQŽęsizwœĢv‘"Elãs0Q“Øs\˜ņUŅaŠ=œ`!n@13ãÆ: įíZū2šļšûZ–‰Z?—# ‡ žŠN2}+‹‡[´HmĸYH ŖxŲ÷8V“k"|¸<°8`ŠqW@ŨKĪk1cĒÍLd';O–ę>_buīšén.D6,ŦÛcųTļNƒ“Ö°įšđŌG$3[@ĢgÖB„ųhÄ|ŖÔũ܁ÎOŊSļņ”SéˇrųqĮ"6ØÕ•ö„Ü18ääã Å&¯˛vŨŒŅęŲ폝ßh…Ūëjá•×bsžsĐÖ×:žš§ĀLÖŗG<đg÷YEfV „gǜÄWGĨ§čÖ6Ú}´MwnŅŦåPĸ;ŗÎNs‚jĩŪą'öˇŲã‚" ’Ŧ‚ÜŌ߸€=9÷5J÷Ŋ„öÜÂŗšŋĶ4ËŽņ-ĖąĘR8@$‰Qyõ8oĮ¤ēÖĻ­a ē¸;&ÃȰäČĸ-ƒüŊ—;šŗ˙ )M1Ÿfˆ6ÛíČßĩeā22AĮ\f´l‡éTėõ N+ķēš™‘ß÷3āf ¨ŲČxۚm i3GÂÖļúY†xĻ… æ(Ļ;š1´:ž7db*ˇ‰ô{ĢĢËF[‰`HžeļuC¸ÚO+Ā'˙×YŅëڜÚT6öQ4hšgÚe¸ķ ´lC'’vŸĪۛéâQ4Ø|ģHÚū[…ļbŅ’c.AÁëĶŪ•šw ĻŦfę~Ôg¸Õlf•šÚ(í›ĖUč•āõg̓R/…¯–ĒĸÅ!iÖ(üĀD ¸p=ą‚9îjMGUÔgˇÕÖâî(#ˇ¸HĀ…ĘČĢæ''ž›XÂ¤OÎ××cĪ„" ˆ…y‡ųe˜įô⊝zÂĐbh7ÉĢÜj-a ¤–Q"0g@` ’wg­EĄčŗ^kώĩXĸ¸-"†;[1 ãŽHaĪlįšąĸkڍūŗ§[yļĸ?˛ųˇ#ŖHIuFzŒ¯ĩ\ņ4÷6ˇzrÅs,)!œ0Eäá  ÷­+ģØ,ˇ$ĐėgŅ-¯áhėÚčŗË@y"–f]߉­]:\[Gisw ˇÉ3„ rzœvŽ>[ë´ņCKnŗyūAŽ5ō/’dBN:īŨÜtŦí]ļ ō[Ũß.aW•Ũ0y/–čÚÛ@ĄÂúąŠ[CĢžŅæŋņ"\Cq [“ IŽZ#b9Ī}ØĮĻ}9Ģeá7ŠŨŖ‹YY!É1ÆÆ3ũŌ:úTūĩKsåFęZÚ؊¤!&0sœ œ“ÜõŦÛË VKÄSXÛ^E++ē4c (1ģ@ę჎JJû\4ÜԗÁĒ–Ú¤0ŪˆãžŽ8ԘōcĄzįq͊ą֛áĮ0^ęŠeē™ĻUd üĮĐgŒ÷ĒZlöšî›nßÚ˛B,Õƒģž`f$?8čØĮ=Ŋ*žŊŖŨ>ˇs$‚eŠá`xn!Ĩhš=ˇ•<ä”nėØmĒFŧūKĮēÔ4Ũ@ŗĪ4s*)Ržd|uÁôĮļ:•a|-go™.Ĩ*Ãök:ŠQ/Ėwôå›ŊcZčēÂÜiŠÖŦŅ@Ë &P­31`yų˜Ŗ.zũĶëÍxü/~4yŖƒL– Ž]’v!NIäÆ3ĮJ1|Žâ8ã]&â¸yãUU’ lq’GåZ9Xž#é€w*īšĢĶtÛėŧ7om?ĘČNÅr "nĘŠ#‚BāqÜW˜i §âN˜ĪÍrN=|ɨ†Ō ô=dGéL#<˜Į¤aÛĖr+œÔĪÕ&ąĮ{„ÅjĘ3öHũ+7RĖą>—Q˙:ÖpGéM8ī §üOĩŒāę?ôÍ+W^ĶĨž†ØÅj—)ƒi6Ŋ;ƒŪ˛|?*ĮŽjÁƒd^@Īü˛OđĢēū§w$6Ž‘+G3<Ŧ{*d`ú䃸Õߘކ2xR’ÍCŲHpˍ†eÜĸ/\ōb3QYé7BĐĨĩÄ ]ĐÆ–ÛžH úųŅÄ7â mBË-’ˆŲÉ9 ācú֎­^]ę^IŠßė˙9Üæ QĮšī!$Ž|Åwɋ{āɓą9ųĪķ#ëEĸß%Ęo-Öi!YsČ;>§‘ƒZz–¯yš1€4ZÆī$aļŽ+ œIb:Ž•%ˇ‰'M śo’dHÕH%rš`Ũëīš5 Z­äW^ÔūG)ŧ$mÎãŒzōqøV‘-Յč‚Y ŧQHVIL|K *I#ŽũkąR(‹’Ä{““üéã˕Y+Š`GéPĨebšÖæ‰5 ĢXíe€~āÅÂîÜ{)ô=k3D֚Ū$ķY^æęåC–“€¤ĮĐ1]Eõ­ĩЙIÛŪ# …ĪlŽøĒĶčZ}Øˇ"”E7›ųŊGųôϚĩ˜Ŧīr]^äÃe"†2/$×Ô}+Įüy¨Ūj:ŨŧĶE°ĩE #˜˙ZöŠ,-dŗŽŲĸSdl^Ã+Čž%Ų[ØøŠÚ;hQŦՈ÷Ūãú Ō•…;ž™ĸ[PŲįĘΝī+Jȃez‡ Vé˙Pk;C•NŸ1ČîŲ>›Ģöaŧ­Cz¨ã#ŸjâgA6ˆģ/.2 “Oũôkl;.kFcöšvƒ¤gĶ‘Įë[jRsø ¸lgSq–CĪ8Ådø“?đ‹jš&Î_ũÖÆx÷ęk+_ųü=¨Ž86˛u?ėšŅnAÁ|1q%´Y@ģcqĮsŧsú×ĨŗIQZōī†6Č Î`9˙j3ũkŌåÜa€OšéÍ]O‰Š 3õ{X/4émŲĄUq‚Ō uįîž qoቮm#Wŧ°š2%ŒËäļ\> Ø-Āöô­ßA$žžų €F[bŽãœ‚˜Ž|Zę—rÁ ÍzmÍŦŌÄČŦĨ˛X(lÚG_Ԉhޘ=Í)|4­e¨[Įv¸‘&I˛ÚFN~a•öęj„~’xīÉŧ†įÍf0Pf@ĪĀ÷P:ž†Žø-nŽ-.%–K†BČŸ;‹ˆÔ8ėÖ˛—GÔV Qa´ēˆÉvDˆË2T‚œãîn§^j“{\4ėo6…ÍŊũ ŧ’?´\ ĀU_Ũ°`ÜdsĘ÷ĸMÚ[ÉŽe–eV”JšĖ[OĶ'ŒV$ÚĖZÔ^U•ė‰Ų…”žNv퐨é€úüõ:ĩ˛ĮĸNdîFÕSh\ž@ÎĐFG¨ôÍK~cų6ŪĶbˇH"žíċķ<ŅĮ–K)õĒąÕ4]'Y¸h,¯ŪPŋf&ŲŖ•pä õôâļŧ1§IkĨ"ĖĨ6Ī#F<Ŗd,H%OŨęxôÅdę^ēÕ.õö‘ÁģȒ 7›Ë(ŋ/đũâsôüÕŨØ[M W–úģöK‹˛L“[ˇ•œTē6 ƒÉ˙ũ ī…āģŊyã¸xc˜F'‰T3Ë9^O+čqU-<ļS-ÅŌ—P rEœIŧHųÎ[€=:úđĶ‚ĖšĄ6QÎɚBä=¨,:ä‚Į’wĪN{ ­­x–+• ´Žņ[5×*¸S‚ģŊkCOđũžŸpˇ q4‡€Wg}刎OåY:…î5Ī#ąOšČÛąFųšĪz䃞i+7¨ŨėjŲjKxnȡ}šo's8;žUlûę°õOL&ÔᲰĖ!Ũ:‚ f\ s†Ī\q[ēnmĨ­ÆÉŽ%ķä?žûū` dgéūp*ŦŪĶ.˙´2÷ Ū•2”‘—pQĐ”sM8ÜėgŸËmoc§{{V’A#ōЇ>ôxã׎:E‹õ'P?ŗĸ{™ĨD†%”€CCærqסĻO^+mü?ĨJÎÍ›šÛėĖw°ĘzķÉų=yĒëá&(%ļäYT˜Č›AëéEãØV‘_HÕīu ëÁ5Ŧ1¤3ŧ "LXąRG*}ąÍdëú–Ąũ´ÖV’NdHRX ‰ŠųŲb9čöÎ}ĮSeĄéš\—7–ļÛáüĮl’Äū=9íQjZVŦ¤CQ°yd˛0%YAæ„×5Á§cëYÔŖģŧ´i-SȰ34‘ą7ĘãåÎrC&yėjÕļŋĒËq¤Yųļ2IrYŪuČYJgo<9õå-˜´.;ؤM:˜DĐÚ>įĄõĢŅév‹p––ëö|ų8Œ/=vúgڗ2ėbÛ[Û&žŌTž Å7§# āÎŧƒM!>$i]r:ĶIĢŲ.mĸŠËdHˆ›ˇmUĀÉ9'ņ&ŧ[Nb>$隤Nŋœ˛˙]=™3čzû/^•~ĩ)69ĀëQ†ëŠį5)ę#‹Oúų‹˙B¯&l;āÖNĨūĻ=ÄG˙ZחîÉĮ<Ņg§<‘\øŽx›†nzDŊĒô#´]<ũļ62˛Å¸dĻîƒ=ŗŸĨTŌmEíΈ`bČdҰÕ¯Jž 4’É+j7%äęÍã;6ĶžkwnĻjöЕõ_Ld†C}0@Å:ĘæíkkģÁK€ŒIn~šÜĖw>c+kË>&Čˆíw~Æš˙žŪŊ:;Ë{‹šmP$*ŦÜp3œsøW‰øųŖoܘ0ĀíĶ“Å:qģ ŗÖ<4Ë6†›ĮüēĘ>˜ĩŦ7ēj œ*ī?Æ˛<&AŅ-:a­d\ú|ŠkfÄMDĀļGÉ=Ų˛Ø—Jo.öUq€rpOî˙…m§žyŦ-+-¨ļāU°zö\VŪp8ĮLUCb'¸ķˇōŦũTŅīA<_=ûžíÔg§lV~ĒĮû.ķŽL.=;V‹r7øh#ÄC䔟‚8ë zpûƒ8æŧŖá™'ĘëĀšú"ŊPTg&ާÄÅOáF3Æ>”ÎįéŌ¤“ہ€sƒČëšĖ˛bŽ%XâEHĐNJĨT'ūT’9DĘ)'=ÍĘį ´cŋÍī@đ:žž”¸Į÷ąéLŠgčzũīzkM!¸Ú `‚@Ī"‹”Š=AüúĶFčj§Ú$gŨŊAۂ3ĀįĻ ‘FŌ2ÉoĻh°Ņt&A#‘R„ߟJĒĪūˆÅ¸ĀÍ(yBģ—Ë*6üŧƒßúRHeĸ uĮŋzcĮfÁ\đMSyY¤]ō``1õæĻ˛’ÁŽT”Äs—^/[[˘ãĶæšÖÖQ Ėņā˜Éį!:‘ī]%•Ā촊åRDI0YĢ~ ô¯6Õ$Ō›ûz…ÍŽĨ<›Ūa’ķƜÍvēmõŨĐŲ%Œ––‹-īžW$Ôm8¤ĸŦBz›˜Ī8 °\å¸OJ C1ũgyÍ*™1´ī6I'9ëYØ˛čų€98¨ÄĘîQ_įąUÃ>#~08ĪôąmY%ĀĮĶ4X ]%1€$ÚCeŽ:OjHáuožqÆ0;Sqˇ†ķĀĸ vĢa†2pO֋"DFīÉĮ¨ŪŲÆíĻ:ū4ŠĖǍ9,[‘Ō¤yXHĄ6°ČÜ;€{ĐųšōÉã­E *뱝Īķ¤pMĀF@ĮŪĪ_ķŠthá 698ö§`'ŽÚ5—ĖķRzĶįēŠKî9,=Ē´jūYUŒ.OíN(B0P n§ęh°nÛ6ÄŠũ+Ä-~_‰~A ^Ė?ō+˙{|ë‹@9l^'÷>#iÄwŋ—˙FĩkKfg>‡°8õÎ}*#Žŧū5,§žœũjˇ#“ĀâšÍQKVÂŲ!ô–#˙‘ļĻãÍĪŠŦmdfÃôŅ ˙žÅmOqۜAœ_…ŲWS×Bķū¸¸AŌ¤ņKŨÍ¨ļˇ™Ā,Ė!$8=‹qīíG…cŦî䋠§ČĮë]+YÆAÁeČįŸlV­ÚW!-WÂŗOwíq 攘ą'æaÆ}ąúV5­ęéélb–ã÷’āÄ”Ŗ+Bģą )÷5č’Ú†€Gæ2䃑׃š†KäBŽĸEuÚwzbŽnĄc€šÕ¯/´ÉŒ—î ĩ›hßķ3āôāpņŽŖC6phÖVâq$žG˜20Yr9üČ­+M. X>ʑ(ˇw͞sÔōŒéĄnä Ūc @p(rO@JĮō?Uš`Æh•§žōĒFw!ĮüŠŽŖí;´ˇš€Gspƒ”øg•œÔŌiQm8ļ‹įîr9?A=ËX\ĨšEɉēaÉ<šmĻ Xȴ׎måu6‰b›ėäō@“ģ§QŽëĸ‚1q3í ĖĄļŽvįŪąŋ°åC4ŽŠ`ōŨđXŽŌAëŌŦŲYŊÄÛgĶjĸ̜…Ú1‘õĨ&ē _ЧoeK"žVFõĀĀũ+Čū'ÛĮŠ!;F^ÕXũw¸ū•ëé!UbyįŪŧŸâ‹oņ-Ģmëd‡˙zĒOQLíü(įû+KRGÍôĖBˇ´âīÁ=ZŪÉ=+›đ›gKŅŲyÂÆ§Û÷kūŨŌĨ")”*…Ņ€'šåšÕ›GdYĶ I\ą$g§Đ…ocœŒãë\î›" @0øÁĮ|­oį r1íNSp= ÁĮÖŗõ>tĢž<—ū¯ļ0yĒWĘ „ęrCFĀņžÕkr1øb„ĸÜĪÔ×/đ¯QTŨŽ9äšķ† ųPە}ŒŽū}+ĐüIm}6ƒ4zk8ē%p¨Á†á• Ÿ—#<Öĩ5™~é` Ÿ—æš<ŧ†iZä_QÖ4ki, fŋš{߲AŅų€Ø\a׎īĮNiŅëÚäšåՒÚYy+4đŽ\įrÄIã§<ũO§+‘˜ęÄųŸxnr3ߑŌĻ @;xä âŦüG­<0Îm뉕­JŽö,ĘG'ĀĄŽ‹NÕÄūŗÔī-Ã"´­ŅCggļzRqhiÜÔŨ d*ŽŊĀôĒÍ æEÁĀ;j=juąĶæįë‚Ģ#.BąûgÃi÷WžŌåb‡uå§Ú¤më(dSŧ–9~{t4(Ũėz eË`đÄ—ŌĸŒŗ>Hųēíé\Ãęúí´ĶZ5ՌrAb.•;‹qÎ>ōŠ5­áöēŋŌRęææ)oŪ!ˇ<*09î9¤ĶZ3QdVûĄŽ"‡ē‚97p˛,˜FpOĶ‘ųךhÖkg|ķZũĸd‚]ˇĘĀI$aƒ–PHf3‚qqMÕ.æŋĶ šęú†›OyRXĄ Uđ1@{íî;ãšžMIæ=2@ |Šrp3č)~ÛÚßĖA;ūYaģhĮ8ú‘ųׯŠ5î™ÔÄĒB˛~ė)ŧ_8Ž}žCģLôŦÃ=Åϟ(ĩģžße•ã#,\™lã$d|¸īéK9A“NŗŋēI¯m-î$ŒnäŒœöÍMyu˜Ũ3Gu.î÷ūuËhzˇØ!š’ę{Ëזũ-ā ŖvUē` rĮØ ŗã˜Ą—EŽfgcÔ91!vPn8įĸįĩ.W{1ßK w Š­ƒƒEC-ėF*ĶūĮáġšļš†`īæ‹†Ũ¸îę2OüķCV@Ų|k1Mgkqk “Cpęą4hIœn āZ6ØioWPøĮR녲đũŨ…Ž4÷ImīŖ’XŧåÃŧŪSözVī„4§Ņ´Ļ@đŨJæIɗ~ãĶw ĪĨ6’ØdW>4ļ‚îh……ãų,ëŊ"ʰBwsÎ1Z+Ž[ųŗ’ĩŽæûA™q†ĪQØpO\×:<1Š\KŠN–Ki;Iq$-ᆺ¨U<}Ū7gę:ķVu? ]Čķũš+5ļ•-@‰œ€ O’™ ÷v÷ëĀâĸ+ŗbÃ_ąšžžŗi–9-~b€Ü›A.?Ųį­6ãÅz4Žō9ehŒ‘Es(†âĻŗ§đœŗ6¨¨ÖŅĮqnRĒwDæ!ūᎧĨ/ü#“}ēĐÆļ*>ÄĐN6*ēŊsŒåŗÉį­+D.Ëöž%´¸–ÎdX.¯!ķĸˇ'$.22GãŸÎĸOhīļQx0ķų ÷žgÎ:vŽz`ŠÎo^Ŗ,ßnGHâUhR,3‘Dvœņ‘ˇīQizŲîôëĢû„ķIgōÚ  æ4“Ĩs“NŅ ŗĻģÕāĶMĸܗŨs/•Ô-ÉķŽ+,ø§JšâŲĪc0G@"n„…'Ž9ũE;^–Ōū×Lē‡R†ŨídÚ=Ūk`ŽĐ;žOåPÛø~KYá z˛yđÃĖ8Ũå9pIĪ|ãü▖ÔzßCĻ[¸ní[ˑ\ÆJIƒÂ°ę+Æ'~"iĮ<iIĐĶc^Ŋm§ZØÁq-ĸíûS™œg?1Ŋēœz“^C|qņN sũĻũOũ5ãUOŠ3č{ƒ/ģ<ã)Ŗ ŒƒNqÔsLžöë\æĨ=`˙Äĩ›ļTį?í ؟ūZ g­bëĘ’Ëãũá[WĜöū” g#á/øü֎ÍßôĶ6ã‚9úW!áœũŖUe-˙lp:XJę`%wŒ˜į­k-É[_•Ԑ›íÍBŌ 2rOĨ ˇ=ũ3HdûČAĻ3döĪ­2I™_i^:æĢÍ,Ą>@ ō;Đœ“O֙ŧ…ÁķUÖā­ē–MÜá°i ĖažërqŌ€1üOĢŨéņÂÖŪPÎæ&E$vŒwÆOáT´?]\jcŧ°ß< ávœ|Ū™ę*ŪžydĢm NsĪžŒ=+.ÎËUŗŊķ‘-â–æŨ’J̆ų1T’q%ļ™Ú Ŋq^Oņ4øHíļôûãūûzõ(ægRũūŊëË~&:ŋˆí™Oc_ũ 觸ætū húc8O_’ēM9J´Ē ĩÆŗņŦŊ Ų-ėí UÂĮqŽũĢ^ÕB_4kĐÛÉüķúW<ŨÛfÉYXu‚íT!{‚Nsü&ˇĮÜ'ĪĪÚeoĐB ûđÕĐãĶ'šp؊›ˆzIü*Đŧ2)Î ŸåSņÛ&‘ÔˆÆx=ëDfyWÂđĒėÂLí’Eä˙°ŋā?*ôÍOMŗÕô—ļēŒÍsÃcž™zu¯*øfå.„D`äĮOŨ“ũ+Ø,qú ŌŽ“& ”šĄŒ-Вņ•’_2ā‚w(Ā<8íŪą#Ô<ˇwwÄÄĄ. I) CHɂGüø­u~h'ž˜ā{×ÚQŠö {­JĖM.Ē÷°Db$ē•`ĘF}˙Nõ1wÜlĩkaáĢŲ.´9ĸķQ6:¨ č#8^ŖąĪ?C[7:U´Ú}ŊĢ'ú5ŗĢG œŲ ûƒøU]&Æ]?PÔg–X^ ›†–5 ‡Bqœœķ́Zš­ĨĢÃö‰R1+ųqîŗ€{ŌmßAú˜VŪ4ĶĩK=ߝk(ų$‰Q‹dîix|­Čî WĶĻđôsÉĸZĀdķÉICې’8Č'Šéč?9SÂ%mã‡íČÂĨ¸„Ŋ¸;T31B3ķXŅ{§Ļ“ŠÉ­^j ˛\›‚ Gå!8į°į^īAkÔՓKˇ†&’+w™ 1Ą 7ļqĀ'‹ĸëWV ¨‰ŦĄk-=?ĸ'Bƒ$ydœƒœƒ‘ã¨úÅĨøŠÆ ˇ]DY^$a”ĮŪVÆ29úV}Ÿ†>Ė5FĄ+Ez]wJĢ´€7ą9Q’GķÔĐŧÆüˆŖĨéĐĪyĩÁu”$āēī‘|ÂQA'lŸĮšOˆî.4ũ9E¤1M5ÂFáĐ "´›”Č•į¸ĪlTöŪōU7ę7Ōh§YYW†XöqŨxöâ¤ĩđļ§Û'›.ØĻŽD”¸U §ļ>g˙žŠŪ"Ԓ?[ÜR<ø­Õ›j‚˛)*㞄vëÍ"ø˛Iu+(^ÕŖ´šˇYA ¸†f*⠁õÜ*¤ĶRÖ1m¨Ũ2C"J“ĖyoaÁĮā+NßÂÚ~Ÿsi?Ú.mĸōV9$ÜæÜšãą<~”Ÿ(jb\øŧŊĩâčŦęYāwuqnUfÄbēåˆ]ižÄЖØO÷ã­aËá}9­-í<ë‘ēM;ødHüē‚ēcŽÚ‰Ëj˛JŽ9=é6ē _ŠÁŲx˛ō 6ĪÉą,ŅyÁ¤¸ÎŸå•á{n\ÃéĪWŖęWžˇ‘ËŊãeF%w+$=A5—máßKpÖcœēÆrw¸@ŽÁČ뎠p+jŪÂÎÂŗéņ,qLŦ2NXˇ=iÉÆÚOŠÄß\jZŽŗxÉtĐŊ´Ž 5ꐅbå9Č*r§;ēŽ• ņ Ü2js}ļ/&+kM‘:äĐķÎÜäņĪ+ąÖ4-2ōHŽî,-%ũä‘äãļOųÅNm ‘„&I+–Œ€rāhæ]…fy÷öåä×Z]˙Ûĸ–ėBĒČcûĮí[^ŠØ=qę8Ģ’xƒR}4Ģk ˙ėnâÜ#\<įvÔė?\×f4ģ9įļžHųˇv’5’s“Į<Œũyę[ ÎãČU$ī'hųLũ{f‡5Ø9O5×5ÍZ Fũ!ÕĻ & q.0ˆ’ đÚAõŠfŊž´˙„Žm:áÜÆL”ų—+ =äĀöȝCXˏ:žAīƒúPé"ȎĒA`wq×ŌŽo åķ8“u}i*NūVMûU¸’2#‘ÂČváÆ2‡“ÉÆj´îåT ĩ&ˆ­ôL˛ōŖß˙<Кī'Ņāš’YXÜcQAa ´~UŧTY9UčxũhR oĒ\ÎĶŲM¨ļ ņG ŦņˆŗˇiĘĮÅĮŽy­i´ŊR⡚ūŅ= Kq$…2žÅŗˇ8æģq l…cN60 tâ­ģ’Ã)ōã8=ų§Î§;áË{˜m5ä†ę$2ŖD&$đbBq’‹v}ëËu9U|oi"ŸšĢ¸Ī~$J÷YÁkfaŒm¯ ×ãōŧckŽ?âlĮŒgĘ?ÖĒ“ģdĪc؛íĪcH„1ā ŽØ§Hr ôéI'8jæ5)ëŧé¤įŖ)˙Į…kÎ>WΧôŦt˙ÄĻSč3úÖŧü#ƒØbˆžy“[øw\{bë1¸“įWÚ@N~™¨í5 Ô™]æ’)%É#|Ëū­9ã ÷ÉëÅmxvÂÛP°ÔĄšŒI—“CЍįü(ÕôŨ ÆâŌ´`ėr7Ûåąw7#•‡Ūē.¯c;müMsenb¸ˇšũÁcž5€d؀9'ÖĢ!ųŗÁ öŽ}4-%ãōm.fD’0Á✐ģ\7RzįŸÎ´Å žžiXŧw;Pmo•W99õ;ēzŠ™YėRšŸ‰Ŗ\ĩøeO5– #Æ6Ō3žNFO­XƒÄeåâÛFōŦĞǞ’H•Roų†žî4Š;…6ÛFBāā“É$āsR[čW°ęL.Ž7“å1Œ•fÜ}zo”Já.¸ąj’éŌ@V‹’Ügnî}įØÔ–úĨŊĖĪļD¨M“bFp;ôĒ:Ũ„Īzą;[Įę%$ ´Šû†8ĮJ¤ž˜Ū)uGy™QžBH|ô%h˛h.ît)sk-áĩŽUiY7dr1’:úõüĒã ŠŽ„ķ\&ŸĨŪ[\é’}•â;°ša”sø¸ū5ĩâ ģË­>âŲĖ@CHŊ?‘üčåWĩÁIÚö7žģ Īlח|J]ž!ĩôæŋúÖū›ÜzžžĶEzŖ#–āeōâ*æ>%Ũ+øž$`sĒ)ãũĻ?ÖĒԙ;ž…áYšëJļ™ãT-21ÛĐ}î߅m U<ų€~k–đuØ_ ZČü“"c=@Ūâē”wžÜŒ~ņxí×ü+’jŌhéNę䖛žÛl ūMÖˇāœ…ëÛĩsöĘÂúœ’qŸ§5žIÛדč1D ЏâG`)‡”įΗ$ôĪåÅ4‚hāw8­ !øx Z˜SÂõ”ķŸųe'øWŽ•ūGä>|k˛r @į¨ōĻí^ēŒDDāœqšÖ¯ÄL>Ŧ…A;°Žk†oŪyŸkˇŊš[kd˜ąi8?!ĀR$7Š8ī]ŅWpdōöą\}îõ^;8Ōųn–Ų<ōģ^\ ØôĪĨL]Šjį ĢŽĒãV2&ĸq Äj"-ååY ŲŽ}yųÍüˇ| ym)ššX„ĒCÁšp{¨ãĩwķI&ר€šhfã5ĒĶ[#WQŧũĶūš§Î.Sļŋ:/ƒ…ÍÚŪÉ&ųw÷†F#3“÷Ģž%ŠKĪ ÜÅš–æX€Xœ‘Į8¤ĘÛČōÁÎy'éMd™ą´ĸáŗĪĨMõšVŌĮšôM{om -”–3}Âŧ!S哞€ŽF+ĻŌÖ{Q˜ą1ÛĨ¸a#MšŒ„Ãũsžõĸ–ō€[(Nˎ۔#.ߘ۟­7+‚ŽWÄRßkLŨhæÍ'EFY@WfV ‘×§OĄõ¨Gŗģđ–Ŗ6‡eĩęyq$x Ä–īœŸČvŽÉc~†@ ö§Į$[cec…ã­û ”§¤Įx5šĩˇ‚Ū8PF€åÕņķ—銞Ō#šĀÉŖ)BI¯–ę¤+1ˇSr‡ī@ ÚšQš<õ T¯ąĀīŠįüCâk]Ö9KŧĻåĸ•\ã?1ûCZ:VĄŗbˇ–­"ŽíŽŽeaÔĖƝŽ+ĢØŅI ŒP0éū})í)PGķ ā㊎vɝÎN1ė)Ī ķVMĪ…ā.xúԌ‘ŽK2*ã¨ÜH¤–FŒŒ.GQīPy'Œ—8éķr~ĩ/˛…Ũ¸c8ģtĻ´xšb 0AÁ#ôĨ’LHp§#Ą=ęēÂ"‘ļŗeąÉlö Ļü‘× ÉÍ-,ˆeĪ|ĐŌądd°$sÔÔÆB(}ŦĀõfŦ,1īG*7&BŸ@h¸ wc°ŒžZo.ĀpŨS˜•@xUcķ gĨB‚§x ģĢ7QWIŽAãÖĒ?–Ülåq‚W§ãV.[“ŒvíCĶąō_ž1Œbŧ7ŏBGQĒŸø íĶ@FXŒqÍx‡ŠÎßÄÜjYįā†ĩĨš6=yį8õĨO\zb0E ČéĘšÍ ēŌŌŽ#ox˜.|Z†_6ØKũô ųŠŠx점`ŸŨ?ū‚iöãū%§ŋŲĶøĸ#f†naŗŌo..fHbûlŲw ûÂ:Ōęļņë76WVr[NŠ īÜåŖn1ßh&˛LRÍāÛØŖ1ifoŨ ĖN˙ē¸'đŦí=į…Ĩ—ÉšD’åXư6v1'$×nā Ũ.¨Îũ (ü9¨žŸ2›w’8äČį r:œū´5­:k*Ę­ˇ´YCūULLŧ1ë‚EsÖÅ͝ŖĨœ‘ĀąÆŌ¸–#ÉT#9üvVWÆWˇļwYehĻHūëŽGą&‡u¨+3; ‡đ•Ũ“Z0ŗ”…˜dåˇ9ĀëÂŗš-D]$˛MŠ,bH"ÂėĮ=FwuĢĒ^Yę÷‘BŒ_$,ŠĀĒ0y=Ü8úÕûmkRšî(&Ķá*ō˛’ōĄHãÛ4õAĄ—ârūeŖ<ŽÁWįڙ!ˆíœųÕuÕnáššˇ†é`Vģ;‘ãÆ2ãņŲúÖĨŪ­wĻęwfxÚâ˜ĮP8‚{Ø=z{ԐxŠÂFŽ`„ËTˆœ‚Hߒy÷Ŗ[l.ĻVŸâ ųXK%ÔĒ€6”ÆIu\õė ̉â÷ŧv°4lBũėvnl~ub=_Ã3É -°V•‚ĸ˜1ÔŠŠSM¸ļŌĸÖ"Ķˆcc ¸SŦTã#ĶhëíF‡¯qš~ŋ<xϟvįķ$ØģF˛qø×›øúëíž ŠxíŅwZÆHuįœž+ÔbŅôŧĮøwÁfū´“úÎŧĶ⟝¯[Â%FO˛!R[œn`?•\-r%sģđŨ’ZhŅÛn ¨ÉĪl×DčĢ­ĪŨ÷ \Įƒ.ZoŖŋĖÛTô•…t÷ ČķBãęOø×īĖîu­´j’åßīVîî#8āôŽrŨƒMr†į#ũĩ­ņŅ3Œw÷ĸÔ­Ķ=;sMn<~4ėĶ§aM$m?7>ÕĄ™ãŪQ˙ %Éā2ęC*F8Ų0ūĩėG—ĪSŠō?ž,Ô矸˜ū_ëAÍzÄO”ęzdšÖ¯ÄD6'ŠfTä’8¨šNŧŸįQr¸î~•š,•Ķ‘Å*ēíÁ<äâ )“ķ}ģĐISģ‘× ÍHĘËqėQLfU8ÆsíI´†Î§ZR„`ō8įšC0)‚H$qĮJ ('Š0¸<ãëDŧ!bę¤Ŧi€āTėæ— ņĪįQĮ1Š%Ors€jMƒąQéÍˇéš p:Ō;Ǝ3"Œđ=j\¨GŠį'ˇ}WÄoĨÜw+ÚË!RT1–Rv €yįv+ĸđŨà +$ˇŅ¤ˇŠxŒŗČß WŒ`ķĪAė=+ Y!|˛:ļŌAÛÎĨ'Úaķ< pŨ~í[•ÕŦJZܔ“‚FŅėE äc?Zie (%sĐíæ¨Oâ-.Úûėrß@ˇ‚ųE†ėžƒĪŊM›|¸ zsŪ”ąāÂĸ2į' ŽÂĒßkÚf—å-íäVūgÜķ€ô¤“ąq‹ ķ“ô§(l÷Ĩ ÁlEg[ë0\ß\Ų…›už<Į(vpv†čNĸĖ.ivįŸŠonëëTl5KmEf{W.ąHbbTŽuúfąeņĩ„zĄ°\ČâO,Č„Îā§˜g€~´ŌlM¤u,îBmr¸9#ŽF:SŸZĮžņV›f‘ųoöƒ#…Q )įž¤ųXäņōš–įÄz]œ˛¤÷qĢĊō(įj’'ĶīΟ+ ŖYhÄ]Xônz ™Üœ˙SXĐëUÅí‡īÖ ų^T–\ņĪOūŊgéŪ4Ķî´7Ôî]mよK˛äņ×o'wŖ–Bē:Gē$ōq^+ã Ä*ü€5H§îĄ5ėPŪ[ÜŦžLĘûq¸)ÉR@#>œņ¯7üNå$/ŽÜyQ˙…iKrgđžÄxÆ?JLŸrzSÜôîiĪšÍ •7äÕuöĻÂéā6@Fā"Ĩ„ ƒ8"Ē頟Yn9&ŨN "6fø^@šSgœœtŊYÖoŌÅmŨhiŋxJķ´#ąßäĒžeŌeRß0ē”qĮr*æĩk§ÜÍiczdv™ŸË Ûpvrr;=mԎ†t~%ĶåˆŦg8Pņ€–$mĪ~9÷•^ŧŧĶ4‹¤‘â—Íxļæ5$*ŽN=ģūU—g¤ÚÛkA!žMƒlŅI@Lxfn2w€sĮjŊ­h)s?ö„ˇrÂąĮĩÕyRŖqÎ=~cNĘáŠY%ĐŽm/u%†IFXå!‰ ĩ9ėr?:fžē=üĐŪbyč.Đãæ|sƒÆp1‘Ž*++[Ŋ6k Káq+ˆŽ‘ŲHģsę OÔÔKáÛØÉhŖļBÆV`ĖÍåą Œ1äįiÉ>´h"Ėē=žĨspÃPwˆ"Ü!l1ŗČ8ŗTĮ„ƒČķ­ķæ—FB ā>™'ô¨‡īŠĮį[¯•˜CyO÷•SđčÃõĢZ=ĩΝá}C6ŌÛJĀ”\ōO–:~ Ķôaę‚ĶÂĶŖYL.XPĢ’Sˇú(üčņ…ė×RKöu1ĸå&EĪck§“ž;fĄĶîîŋˇ! qyåî`cĨ@|uŠÛkZ¤Sl˛bI܁*s… äv?…ÜZXHŧ;ĒEŗ…sŨŒü¨<˛k‚ņ˜hõ¤V„Ё…n8fŌŊBÛT’ãÂsß߯ė*šA;Tí8÷¯8ņĐtÔtáÃfÁ.ŧōîp:Ō Ü‡k§ĶCŠ>AÃĖÍu÷p¨ÔQ‰*EĀëôã\W€X6ŒŦĖyW'œg+ĩŋjœž.ņĪaÖ¸ę|lę‡ÂˆOîŽW ėAÆ@ÎNá]} ÅsNÛ.ą´įĖl’rxæē5<n:ÔĀ*înųįÚĸf< û yëŽ=鄃‘­hfy7†áxô6žČhĪ‹Å:‹[[JtõV™áPĻL H˙}Ž>”éfŽŠÃäĻüNÖÉpŅāüĒŨ3éĐūU…âī.ū{ ,ĘÉNŋiV…ļ áˇp§g¸â­ëwRč6Ū/>í‚ŗĘŦPm\*āt`vÉį­dZę°ø†Hã× ˇš57,UJˆÆÕufAŒzCDWÚ} !ÕĩoĩXéņÜZÁpĖÍ!h™ŲAۀįŠ†×[Õ.ĸЙõĢuūĐqŠßvōÎĖâûĀũOLqŠ7‹lbQ)͝‘%|Ĩ ‹]ĀķĮ?‡­WÔöpČHô–ĶŽj¯ä+<öĀ.…Ã_6ømä˙H Æ1ģNf}‚h|Qļđ]ÂËw,Ņŧģ ”rT˛ņÁ œôÛčx׏]šžf´ĩļc<Ķ\Ī6ī-cp…€Āîsƒéܚ§aâSû&ÁZÖ)īŽ5‹$VF`OŖ|„ĐzR×V=6(>tĐH˛ÛęĨ×VTb]ˆhwšyÎ6ŋ'Žj´Ģ߲ÛÅ,’:ÚB<ĸ2ãmĪlôųOå[’kšĩŨÂŖG Ŋŧzˆĩg‰ōdČ#qÆŪGŊW>2ģ{{ˇŽ+@ÄĄĩ<WlIî6ĮrŊ;Č,ŽŗNģkŅtÆqLĐÆĖŲŪˇũõ¸~ÉĪáۛÍRō ˛ĩ”ššË"ە0rA?íĶž8éZÚŊŠjú¤ņĩĨŧv0ę+!-æ2+ņę0ĮˇoÂĒę^ ē‡Ä‰§E46Ę ÆVXō_tnÁĪ@ČęOĩBēz Ų—tk RĘk˜åŽo%Üō“ŋ,C0(GæAĪĨbÉáë›}&–ŪĢArķÛI-ČE‰Ÿ– ĨI<’F=ŗŌĢčž'Õîĩ<\jĪōB¯„ y‘ąÆs×)˙}]ņĖk%ŨŠ5Â[™hžK˜ËDĶŗtVČ}OãI5+1]4øNđZK AĻäęvNO™,pÜv@Ūõhx2híĩ+uŧ‰žĶåŦ2ĘĨŨBĒÉĪ}ƒ§ ĪJ͊úęß]ûÜÜČąÜ@@b› øąĨąÉë֝eqĒę†Ãũ:ôC5Îų"e1~č0•,ÕGæ—ŊÜzKg¤‰ôëÍB´ę<(įį'g?†žc¨,7‚6_õ_~ˆÃ’3׿ú~B–›¤Í/‹-äŧ°Ô$ž;̆–Wcŗpu1°$ãh^¸ë€9ÅixÉĩ(u9Mŋö€ˆØƒˇÜTHŗ)9Įû?Ĩ=“ęö: 7BļŌäģēŒģÜ]* Ÿ<̌Û<ŸÆŧŸâ•ÔîQ‹3$åģŠĮ†ļŧ?x÷žmÅû@à fF aō@Áā}ā=é;î5cNĶītk’\Īm`“BŊ!@×€ÎF=ĢSÄ÷Ķ>“ƒg•;†rAèRÁHüÄ*ū5ŖŽ\5ļš#ļ %gHŖäd`šĻ}*„^)ąFŽ)-giNČÉU ķIzcõ§võ‹C.O^Ų‡-ûˆc›i‰áQ8  ƒĐŒķÛް\†Š‚Ŧ^+JĶ4]VÕ'„NaffÍĀn{¯p 8úԖ:Ŋŧ‚ešÅ´Q>Č؟‡ļČë•ôß.ؐb4“õ29ũ*­ĩõĨōaŸhķ 0€N3ž??Ę­"ĄÁIĸpĀ`õÍNÃĐAcföڈa“%Ô g=MyÄË(-,ė Ëœ‰$ĮN=k FāzžkšŊܡ/ĩÉÃģ`tûĩŅÂvŊ~číS™7'ƒM ōáNÆGëIˇƒ×šĐĖō‹'Ž?樎ÛcųōŨA­zšŨeŽ^x¯'ļ(Ÿõ—ŸĩD0åŧ|×­ĸf<GzÖĻčˆu![ŽN0ŧÖ,šGŸĢŨŨÍ*ŽDci ą“ŽzaŊ?úûâÔā’N9ī\F‹§ę â+ĐōßíåŸl•*ÅY žį;˙ tЉM–.|')°ą´[ĢxŧĢ­d)ų™ÕFîŋė÷­_OmSIk%•a‘&YJüšF œgĻG­rIgŠ]Xéæāę„5Ü>hbáÕö2ËîƒĶ“Šé´ SuāË4¸23Ij÷“ģĻ*ÖˇąÎ\Ž•wu~fÕáki„ʲD›°ō*Ģ ŽzĪ>šč3]-‚Å}ĸ÷k9û"@]"62Cį<θí>Éôųci­õ(å‚XŖÜÖeŋtÁsŗ ’o#5´ē-ëßZÆÉq bYDYEå‡Íؤ™ĪĨ9z‰ڌ0ëZ}¸ŠęXÃ|á„`;)`†\‚}aŖé7V—B+ŠŽ Đ5¤ķārz¯ĨcCĄ_-̈́ķØ]Ž"ō<ŸuÕØ?ņwôôÍM/‡¯ÚĮWš;I‰ûNøáہ7˜9ĀųIäûQd´¸_­)ŧ+k帓Tģ ņĪŊ¤e?ë@ z{f¤ēđö›({ŗŠH¨f2:™T!Âl“ņ*9įĖV}˙…å’_ɰáŦŖ†Ō30Âp2™ÎrAįŠŽ_ ]ėE]2ØĸÜŨJ#ŪģBŧX\÷ąųRŋ˜|™tģžtK‚ææ+ĻI$U•Ķî} }MCåiútĻâ#urņÅĩvN˜›Î•°Gņtč?ZĖ>ēk]L HL˛ÛÃŋ™(Âá+Ā=Đ˙õęÅ÷‡ŽK$6Ņ$Ú=c’9˛BņČÚzņŌ;äH—ē%œöŪ,Kyn‚Wœ3Cģ娒Cr ڝ^ŌãHgž~Īp¤3\ęā6‘Čã<}}MQ—Ã:°Ô‚‰Ļ™e?ŧxä‘_sq÷€ĩpøZî;o0­Ąu1uæÄ´~c0ŽĖF:ryæĢNâ׹­ce ÎņęVqĢ;‡¸ŽP͡2˜ã8ęŊ;~5ƒ¤ŨčׂÅ,m ŗK†’ÜųiĶ!‰Ú7;WA¤iĻĪðiŗJc™ã[Œm$žFî˙ÖąôŊíâšĩÔ!ōėÅē+1iœ‚ ŋ(ƒĀã:k¨Â9ü/$Ėa…%’ęė+Ķ(.qč ãŽ{æĢÜÉĸ\9) ĩĩŽ ™$1fI ŗ2 „|Ã%^ĩr Ū,ė5T2E4r’`Î ÃåséQ¯†Ļ1AÍhĄĩ‰%hō ‰Øōšä@ëNņîšú-žš ‚ãLˆŦoĒĘodPäõ< æ¯|GmĢßĨÄа”´ģhŽÂīüį;_Žœ“]v™éĒ\ģHŅ#Háq€y,ŪŲ'öŦ­gLŌāˇÔŸW¸–K;ŲS)&ĐĒį ĨJŽAŠ÷īS¯¨ŨíĄkKÔm›T‡On×in’K$pė‰2 $œw¯zč°ŅŠMĀž}ŋĪĪËĨé˛}ĒI%u†ęŲ`|O´AÆ>™<įš­HowŦ „0Á˛FCīPõØhĀŧÖõHāԂhĢÅ ­Í + VÆvõÁëīUôMbîXD}¤7§į’)ŧ…ōĀ@rH!˜€=n*Ŗøĸ×PūԂú+“ovsŅÄîH% Ų'âÎ+uŦ4YīŒ—É|ÅĻrfØäøHųp€c§Ĩ­ŖDŪũM‹iNĄcÜpâ;„I1įži÷VĮĘ,ņîųq´ķļ˛ėîtkY’æÚöėĸ<͕}̌ 'vŠ­|Qcqkd÷Wvą\^1E›÷üÄ Ãéž*,ĮrāĘųŠú ĸŧsâBíÔ.z`ĩšāŗ/øWŠØø‡KÕŽŪÆīː!|m m9äW˜|K@5 “Œönũxš´ ­=IŠŦOWŗ%´ûv9ËD§ §…9įˇSš¯§ļí&ĐŽ 0ĄÉ?ėŒU•Žžkh‰02:U´Å˙‰cúyĶcūū5YP3ĮæAĻ‚4æįū[M˙Ŗ’ÜlÄđˆ`ŊR:^Ī˙ĄšąŠkļ:d‘Į5ŧÎ$ˆČ jė0}:øÔ>ė÷Ä}>TöÚĄņ­š]ZIwy<-ĩ•|¤, ĘļO+šÖ˛R: Ģĸ]ßGŲ• y3%ÂÁL7ŧũ>éöË#Ôü<ú•„ ‰•eʍ¤ygäB1ž§8öĒŌxjÕíūØúšĩ´É,Ų@Āa¸ôĀü¨,|9qö‹+¸.RâŌB&2ˆđØųXĪ}Š?Uî‹SĻ×,"ž´Ž_´Gn`H.ĸ˙RzzĄ&o‰,WmYŧĐ‚8BœņÜOĩMr—WžÔaP+ųĒ‘îč:(>ä`ū5ĘĪĨj-pŌK§rŅHŸ#ƒ×Í8íũåũ(KĖÖéÍggš™Ĩ1 Q#Ž qĶđŦI´kÛÉ‘!ŌM’máHÃü‡=ę;Xf]^ Ō^„1'hƃ“Ķhüé>ҍ[kwŠm3ƗÆ¤Č¤¨%FČÆNü(@ŲFS’iė‘ķ]Š–Į8+Ÿ^EM§é7ęv6Ÿ"$Rcv~QËú§įWŽĄw¨xP4Ō¤˛;¨/lĘî\įƒÖĒhēíҌ 93<ĶüÂF%‘BŽyúœâŠļŅ:\Öņd’˙c6Āí‰T-œv>Õä~-ĩhõ8lgėęVD^-œ~9¯Vo­ÄqEöfŨˆfBߜ(ëę+Ξ"_ŨköōZÅ,q­ĒĻyûîsųUJëBggŠĐx)TčŅãį”c=~Sū"ēŊJF]:Ā‚-īsÎMrūS™ lB‘+åW8˙?Ĩt—˙ōˇ#!ÚÛv8‡ôÅrÔÖLęŽČšå7NÄ0ËžØĘôĐZs c…0"āgüƒ'øFŪ+zÕÂ[Áš”PŖŽ§üŠ˜„ö-ĸį;ãŽO&”āō÷ęM*¯~l㚸9ü*ĖĪ'ˇÃüJÖGëcão¤ąũkÔ¤3 )žŨLąąOvÁĀ?y`I?áfk‚@/˙ž‘^Š5¤:…ŒÖ“nōåB¯´í8ö#ĨkStDvgé:Ūš%ŽĄ|×o/ŲėMÃųˀ¯‡Č žĖ…xĮ~:Úē֯ΝŠEk/c&éĀ ËĩqŽC™éĶĻtã𮒛›ČwgárîIpėI'=ūfįÜÖVąwĨésŨX&ž×t1‹ļ–gTÁ"4Éägåņõ§tۈ5Hģˇ/ŲôÛXliŽd‘$I Ģ…v$ šė*ŋ†5+íKXēk¸žÍ”Â(6VØÃ=ʑŽŲĪĩXƒVŅd0Ü:"ĶŖFŠY›LŠīÉÆ3žūĩ.‹y¤.Ą}ieA*6érāg Tg…ųÎÉõÍ.›š‘\e ’)Dr‘•ŗ†õƒâ{ˇk›2Ōuķî& ,AĘÉåß7ĘAÚã>´Čĩí'@ŌíbąĩĢđ‰oyŸ™‰Ëč UīÅnú`¸ēķš(A•Ą‹†”NĶíR•˜÷1ÛXÖe¸Ķôä´ĩķķ)Ë6ŨąēŽT“žũō{{ÔQø‡SģƒHšĶâŠ3m‘ΊLŒúā°ĮŌ™iâxoĩ;Ki´Ģ0čŪ\rE „’2ámÆ*yõ= ĶGļŗÃt‹ IlLq<ŦFņ€  28ČĮjĢt°¯æ[ņNŸöØėaiá‰MÚæ9dØ˛¯9QܜKũCM†ÂČNRCq°›œ9!fXög#øX6zūĩ6­â[KÍItû¸ՊnYĨû;gxeRTô ä>Õ-Æ­Ą-Û;%ėĻÚFĩœHĮ$ŽäŅžšąĄ^Öh.eÃŽjЧŨLڂÎDn3kû­ˇ g'iČJŌđļ­{}{gmw|\›/4¤ífq#) ņœ g˙×ZWúė]ø„XĖvƓåW!ßn9ĮņšËŊ×ŅuKéíŦ&Žú¸…'˜æ0Ņ bvƒžWzzš7ču$כSÄÖ°[]ÜF’Ä…# ō;ŦƒpĪē'‘ĀĢ9ĩ=VK)emBãî¤Ä{|ļķʕ ĻÖõéžĩģ˙ ˛xFįT6’Gsh„ɇ?0@Āäu2œZĖĶĩ}BŪŪūúúâ[…´—Čh%SÉXō`ũTõ°}ķéūwR\]ȗ,ˆŧoųĨyÆOJč$†=ÛY›Ą$éšäeņLÖ˛Ú0aą¤eyFchäĀqÔg ŽšĻËâģøŅÉfIZB˛nĮ— GÆ@'‘õúÔ¸ļ4Ō3ĄßfÔíZĸá/ž_Žåhū§ūdUˆ,Ļû]œē“ũĸŦs+į nO9Į˜yôÉŽĘūūÃtđmY<—*ØÉÜG§N¸Ģ?ßAĄ’Ú'ŋ %Q#á] ^i ÁĀ .8㚤ܖ‚˛[Œ]&ôXYÉr礝=ė‰t‘ĘT…*Ę1“Â’äöôŽģÄVŠxfémŖY$‘Wä(` >ĀÖöæĄcwŦK<_h†ÚH€pH$ €9˙X~oaI6šâ+kë{9žÁíļg‹a$Ŧ“ČņÔM7¨]!¤ĖÂHA„iĪē< ˆ¤c'Éîž3Ķåöˇá}:+Ô}Ž+iœeÖ9 œāwįⲟûBjÚŪF[ėņĘöōáŗ•qšQ´…Čī“ŌŖđŽŖ}u{§ZÁwgšéŅĖđĒdwÜŅÛi\{ū ŨĄĻ“ / LĘķËgoo:–x#ķ÷v‘\ļpvđŠ8õ4ícڔ7z–  šGųT™[zĮ€qØ2ޏ5…¨Ûųž Ŋ]BōŌŪđJÛ ØĘĒėōB`WoF뜌ԚĨõũÖŗÛnĻŗnŅA;Œ{ĸ;œ á˛?QV“š:‘hw‚÷N?fŒŦr œ[k<¸ Ÿēvą$t_ÂItag%ŧsjN–p:•ÚÂ?7ˌî'ƒ•ĮįUîum^9o@ŋģYáĩ‚An!,2ęĢ&N sÉ=j-bÎõ!玏–öéŖ6SG ˇ,0‡aōœ7RAĪŌ–Ŗ7´_ÜiˇKq%Ė.ž\Ę!ī”Č9ĪlŸŌŧûâ`ū\pJ[’;f¯@Ō-učîc7×HlŖĩU1íËŧ¤Xž}ëø–ŧ”ƒČH:y¨§ņŠ éÚI ŖŲsŸÜFNGû"­äö<ũ*–Žwhv,cėņõ˙tUÕ$õĪ>õƒ5$Në͌Ô[īûŲô3V#ŒgÔ6Kū€z­—˙Cj•¸ÎoÂĢļÚũ‚ŗ}>vöųÛüū4ž$ĩšē{oŗY´˛l‘ ›Âųa€ÁëÎáNđģ˛YŪm_Ŋ¨N öŪj/ęwV–sĀTŋ‘;yNĮ BŒddåšßíhgöLY`ž+:ÍmsŦ*•Sä88į‚@8īI6Ąy ]G%íė>OÚyP*ŠĢƒˇäž>ĩŌŪëWŠdoË*~đn n܃ƒé흤øˆę7Đ%ŒB“)\ÜUąOą‘âŨ¯`˛Ŋ‡[ęsAáí^<  y‚ČQFásÆAųÕŧE}.õŽX m˛ĘĢČæ\ƒŽ‘Î­ë:ĮŲĩ'ŗHā–ßËŨ4nXaÉöč„`ŽĻ›4Ú&ų!˛Xņļ=å 9ˇ7æh^€Y¸Ô➎ábHîd[ä,ž ĮqÁĒVēûG 4Û$T…ˆ…ŖbëʒŨČĪæ+JčériīdoaEHÛa“oĮG,Ā–,:ž:Š­¨;ô+˙iøvæËČš`#)æČĻ2įķÎ*ŋ&‹§\/#3ūõ[į~B˛%đÅС\ÜFí,­pÅŗƒsŠŪˇŽé&šôpˆą.äu?N߅Ũ/3˛ŌmeŠ+ˆîÁ´ä–ÚFî™?_Zâ|m †ŗf‘I#¤–k /×ß ÕZhڑĩmchŅÜWÆŨ¤Œúœ×ã;{„Õm–å]OŲWbģ|Áw6÷ëZÃ}ĖŪĮMā dŌP6N.Û§ûĢū5Úę—Ō Ú9­ŧwZâž ÚRd˙ËáĸWutô[Fs‘ä8ã‚>éÍrÕøŲŅOáC% .#Æ[)ßįoËÛ˙¯]§6ķü1Xĩ8t„į>Øˇ§‚ÖžO$*#¸åąlˇÉ÷Å*gāũ 7hÆ ãëŠRzsVAä÷,cøŖĢ3mā!#ž?vĨzÜ,p Čë^MǰânŠ‡Įü:ŸÂŊQÚO#ŽqZÔčD:i;xÁä}yŽ3Ä\÷úģĪæØ$‰‹PAķ†VPĀ˙ļ#ą#ŊužXN9ātĪ­yûÚ1ņ<ōNĖĶ.¤ę˛¤;œ'FpH§ ĩkk‰'–âKv‰æ‚vŽH˜Œ"ílāō1Īj´Ú+Éuļæ”˙GōĶæĸT<úaAãúW(ˇSj ÔSĩô‡ėVD´‘;rų„9÷õÁ­ģíƒĒhVŌ^O´pŧ’”‡‰Š° s*AÁāsŪŠĻē‰1“øFîčé‘*ŲŠ†ßȞE§':āüĖ ägšŽ™äŧžßRŪī KetFģËzå˛qčj]:ū;í5/!ŽA¤• pJįąčzc\tßl}bú؝Mb{šą" 6…6ã=:ƒN)k-ÃEąŖgŖ6Ÿsg%ÅÜ tŗîũÜ[€ˆ E\úsųņO¸đōXi3K<é2Ã*M+ŗËe°''<îįĶËCcuqĨ´[ęS§ú$Ύ­ŋ;q!Lōŋ­w˙e‘ü,lî¤Yf6ž[ŗÅ›n@#4KN ĩ9m>ÛHÖõRËS˜ĒË#ŊĢG°ˆäegę ‘×ļ=š4(ūČ"ŽöXDWĻō9'˸ą+Čéķ7&šÍ:ĪW}6ę6Y'¸´ķÄ81딑ē3žr@ãž9Ģ:~qo¨éË60‚6¸ųcšcÄĄâ'æä‘øĶ~ Ŋ ›í6ĶÄw‘_ÛßÜ$LG Ø`á#ÔuÄūĐФÔ&xĶVģ3Ęíˇ Ģ'š›>]ĸC‚=:ÕĪč×vļ6ÎŌŊģ¤Ņ“ ’îûĢĩˆÁ< ëíT‡‡Ž!’+KfDhŪŠõxA/˜GĖI>Ø8úŠÛ\ΊĪû*ãÂđÚŲŨH–÷$ÄwĖģ‡Nî¤c9ācĨgZh:-ĩĩî›&Ģ4Ņåcš.đ#'h\Žx\gĐTįđΧ,zrĸÂņ[¨!'}Æ 'WƒiúRZøGVŲĒ™!˛•æUČ2˛NŌe¸ā• wíøwŊ F×ÃB(šūę6Dˇ`Ė.sF˧qÁÉËm9õ4įĶô ĢuÕ,î^X4÷™ØE+0 [sägžA8<ŽĸĒŨøZkÉu“­œmsn‘[g DBǞ€Ũã‚?*ŌĶYŌúŨnm$›PyĻļD<8Úã<āŽqKŅÔĖąņ%¸…Ķå†Úik™LË"•”íWęx%p@éRÛZxbÖŨ –+C Ū:GžāΌcƒŒr}ꮝĄÉåÛ< eįÁ4"HíÎø•TšÁÎâe-aÍ_‹Ã7Yˇ•æļxcēšQã$…‘ƒרaÁíīMØČlĩo  ¯(­ {¸vW ˜Į<Ã/ĩ>˙VŅaķL6°\_[…‡ËØ…Y/8āęxúŌ\Aģ\Á+ÛŨ$‹1ƒå1øF\ō~vīÜQ5¤Wz†ąf5 ĻŽWD„æP€eųî/ËÁäŌ÷nšcÄļ"öâŨ„æX#$Éåœ9ŪjˇsģŋVĩņ6wĒ閱[Ė..ĄķÕ#@|ۜ‚=?:ŠīÂJ‹u<7ō4˛ČÍNáKH˛§æIã>Ôí"Î×IÕí‘îŽ^įėÁ$ F#Ūå7ļŪŖqĻvšV‚ėŋŦŪ5•Νyûį¸<ĩV-„bT–<3ĮŊVĶÛ:{āôžníŖTČ[^øéUôŅ‹9Ôį‹™V'úŌ[ŒÃđŠ…mī㗌ß̓īŧÔ~(Õ™{iGÃ4R’f]ÁHo~’ŋˆŠ|,ĒįQBÃpŋ˜áģü˙įķŠu ÁĢKšw@ŅmR1Ôō:‚ü+m9ĩ#[hL4Ũ/\Ž98”ÚĘT Ąq??*­aŖé6ōC=Ĩ°Œ:Š3’2SßļßÚĩ§i—š{\™-›~"*ŌŌŨŸŖø ĀšĐ5)QÕâĩY¤ÆY˛ ģ8¯ņnÚ}‡z¨÷ú!Ôg–h¯ŗæ"˜Ķ‚ĒÃ8qųŸ­fŨøfõf¸x%€‰9tg*|Ōøúrj……ŊՆŋ‚Ö4”’Ō[‡†<pųpwnĮąŽÖéæGo ÔķÎsCml \ãÛCŋŽi<ģH÷73ˇ ąĘōG^ÕBėę6WŸŧ‹Ę{‹†•I†,Pqßéī]Čŋ‘^1*.X…Ü=)ŌO\âHyCōą^„÷”Ô˜8œäŗŪ[xbЖģˆļā|Á–äcüņTėoîĻđϧį]Ī+ Oŧŋ "ęÃt€}›å"īū}+ÔĐîcw\חxĨ>!ŨÎįĶä'€å“ÃĨz…ģeŽüâ´Š˛&=@†Æ$N3Ûĩr÷Zė–wúœGIc ŦbYįÔnr889ã…u˛ ČŖiÃ{WŦĪĨÛęˇL,ޝ.nbŨŦMōėÆ:6ŪxäīJ#oB+¯]ZÚ+&•™.dią°Į‚yĮ ŠĨuīžĀ"Ei&<ôĪcë\ų_ŪŊŦ"Í4RŦQË##ŧl>bÜä“ęyãÚĩm5}$*CĄ ¸˜“vNBāü‘ųĶ’ė?2ļģ¨MŖÁkŽž“ųåĄEW ´„,ã´ūUZ_I$ĸŪ+ŅIP´˜%Ė>j‚1Ā Ÿ^Õbi´*[Ksː2*9 ŧ‘Ÿ”įÔ}>ĩÃÃq<šŦ“[Žæû+Éŋå_—nÜgŒöíM%Õ ú‹áũVīSi Åŧ1yk Į°–Ęēn éšąâH¯׆Đ*Έ ļā˜žcŒqžk&ßXąŌõ&ŠÆÂļAåÉr.~î<)ã“ÆGÖēīĄÕ-ˇÂâ{YI#z‚;GcØúRjÎöwV<ę;küŧĸK—ĖsMo'ژēĒ2įœ6A*29ĀėkrûSÔ'ĩÕ!ōmÚŌÕĨá˜ļÒa›Ķ§ZÕžŅ4Ģ+ ëøt‹7–Ųâ0Ņ…‚į°öéYē^ž5k¸ Ķí`šmŅßŖ!2Ģ=Ԍc>•wž¤í ÛíkSķ5–æŨ"nV3ĘcY[9˙kÅ:ÛXÔãmÕo­ YˉŊŗ ›ÚÄį$ŋ\ûVîšúV­j×ÖVI‡—ī´Kd.â22AûUVîÃC´K̈ČļOŨF‘‚T€~čõÆ ÔßĨ‡nˇ8ÉŧAŦͤY\˙kÁ ģK“˛4ĻČ÷9îôaŪŽÛxŠūFE}N9B獈 Ãļ/Ôs÷—Šü&ģņAƒQēĩ†ÆK/1VŨr$!bÜ_ĀC÷¯xwRœ-Ģ,R(ŽhĘ˙('î3ˇüšom„ˇÜȰÕĩ W@yuŖ@HIHAų˛„'ŨāũáÛ>™Ēoŋ‡NŽę9å7 Ĩüė`ÃĄYļģEvüŗ^$cWX•ļsŒtíũMA,*÷:ÆĨŲoÛȆF}8¤Ĩä>SÍ´ī´ŲYęŠcsxÛwģ3FWū[.×Q´rĘ\đ?„UĶõˆ "˙RšXĨŗ!ö8W Ŋ_#į¯ŊwąŲˆŽe•bĨÜ]‚ŒˇaŸÂϊ9’.PmūļáĘ,‘™á#Ļ]#Ž8įú=ąŊÕīUâ Mu;¨•š8PãĖFaōˇ*üzzzD 2@§-áqQAf!šYVS#ŗ9\Ųî}MJvW<ęÃMÖZ(n.4k֗ív—/žQķ0VYdüš8'§SfđîĸúsŲ‹#ē}:$h‹‡)?<įo*O_ZõUöā‚OqœÎi&ÂĖŨōÃ*eY_›xĮ¯jëKäåqÎ?JcÜ*"—l.v€GzJMlUŽeiúM͖šqsēĖYÉj‘Į …Wnčü㞠âbКbēˆûũų+ՆZ=ŨČô¯*øšō?åŨ?ôcURoŸRj|'{áōO†tĖ“˙‘u˙pVĻH䁯=k3øĶŅ˙qtīō Ņ÷Æ{æą{–‡nUۜzu¨4˙õWŠpqpߨaAô•TĶņ›î ‰˙öE?ÖĨn3ÙSŠa°EėŨ?Ū­‰f$%°NėņƒY~Rn5`pĶd?™Ž’Tųz9Čë[=É[Ņ\´`'™æ…É<úf,ėZ"Į†äwCíV8B’T}ŋWxŅ@(T6y¤2Sp›đcÉõÅ6I•–2čG^˜âŖd]ġlLGIļÅ|č3ĩŠtĢhĒ$]Įāį˙ÕLx”å˜6>Ŋ¸Ąá;ĘícAú…5-™ ļŌCš`LОnØę{Ÿ­9måUR÷ĮųöŦ=^æīLĩI->G’A˜éšW ‘‘îp3īQø{[ŧŊ­ŽŽâaY–DL(t>āūtųtš<ÚØč& •\Ęŧ—âš*øšÔ2œũs˙$¯^vxâaņœ÷¯"øĢ&īڒŖ?c_ũ%U=Å-‹_%”ĒqsŸũŊäcCVURÜž~ëQ\/„R%ŗ‘Ąî: œ…wō€ēDjÄĘŲ!yû¯XÕw›fąVŠ2IŪ–…üēķžŸx×MϟôE%Cq\Š$YŲ1!ŋprWũķÅu_üy… üg‘Rˇļ4”dŒƒģĐRĮ ‚;zĶ”Œp֚ØĪCĪŊY™æ>+‹oÃ’‹ēÁß×$¯oÖŊ* ÔöãŊy׍ÛËņΞų ÍhĘ23ũņõī]åŧâ=3í2đĢw s€šÕZ˛H#Ũū5ŽÕĨ†r—†ā[n+,D—Éä9g,3×Ū›ęž•áëŊ6gžâ?ŗ\Æ~Îįxß)uØâĒÅáËËũ1ËJ–Îá”wBŠrÃ'_­u÷“ÛYŦ*ä“s8…ŽXąÉü€ŸaFŦí—9Hšcˇ#`­ˇž tÍ.f;#™}ßYŪEÍšsæFŌÆš Ė"įį” m&)$PĢHŲx };{Öu˙‡æßŽyVS´’Æ>Ë1Ÿ‡Ę eÆx%“¯Ō–_ Ū^ŽĨ<ļ4’ŨÄé“(Y!RŦPã<Œ0įđęh[Ūâ}ŦJū‹Ī’æ{É$ũĶąuŸ&7įĻ8æŗéZ–O8“Īšt’8ĸ%Cåíų”6ĐĢI=ŌŖ¸đŦ­}sŲ|Äm3Ɋf˜.P˛&ÎO}ŗUu jSŪĻŌ­îe "´ģĢD8ūö§4כ‘ŪÃr$*Ų Ŧƒį9äR1d™Ļ`C`ã€?ĪåYÆßPŅô}Oˇ+%Đō`’gRĘĒŖįcø)܊ۨ˛HčIaYŊ š•kâ-ėí/öœ&=ž`mų7ĪũõÅV˙„ŗM&Ö5Ô!•îg0DҌ‚TsßĻxüE`ÛøGVM6æÂGĶ×6ĶÂŋxōōīVéīĶļ;洗Ã×É{m>ûHãŽây’|š/Œ0#éĪáWhŠėŅ˙„ĮDš ŋÚVûĘFĮ€H ?īĨüķŌĨ×5ŗ i‹r-Zä}Ą#“iÎÕfÆ@“Đ=kˇŌ[OŗĐŋĶtļ[f0ōË ÷QŽyo”sĶōއZ´MKI{a/ؘIË"ŽpĘÁ‡Ü Z]ļįÆZŽ?ŌA-oö­ĸ6'f ĪNã¯Ō›kŽAĒÛ5Å´ÂD PeqČlå/Ίš–ĢM “Yũ–qš‘â9 WĻKãor1[ēDË.qß –ģi„[yåíŒt<ĐŌHÔæ/|kŦĮwtĢĸĸI2D˛Å!edąÁÜ1Œtī[W^'† ¨ífŽd”ĀZY‚ą0]ÛXƒ×ņíëTÛM´›TžĘâúiæ•$t_((‰\€~`9?(ŋ6ĻŪ-ŪŦŸjęĀ r¨āFP¸Q˸ü…Så}Q_Æ1´I/ŲnÃDpW*ĨŊ?xõ8õ¨OˆM¤RI-ĩŨË}Ļä+Hëˆ#‚ŗ vũzÖgØmØm‘îĻY‚ŋšģūMá6–lc“|6;ÜíI†Rž3K?ī á"Žã+m#h8ÚĖ1ĪÍ]…v[ŅŧGq¨ębÕė–(OœŠ —$ųlŖĻ;†¸ī‰„™%čA9úHÆģĢ+}ßR‹Ę•Vöo2â4iōØp7Æß§Wņ52Æ>ĘŖ˙"ņĸ6įV ü'gáG…4ĸI?č‘v˙dV’œ¤ ËđÓáM,įėqđŨ¨1¸ž:Ö3ÜŅlJŧ^5SM9}@zNæ‹ūeŸ€9÷Ēēh"įRūz'O÷*ãčsúvŖ’ēÕԑÉ"%ŪqŒą,@~uĶišĩ–­`ˇHŅÆr”m#rˇ?JåÖk‘ŽÛÁšOļ#ˆŲö†Á yíÅPģđîĸļÎŖOšHÕgĸ~OË"Œ‚rĸ.?ŲĩŅdĖîĪDōRâ=É.Q†āG ‚8úÕgĩ)o”°öīšâ%ˇŊļš—Z…œK+Ēą,@؎TsŸ—nÎsŽŧį5Ķø{V'KQw3]OąįˆNč÷¸Į~ĀwÅ'ĻM4%â؁Œ`’y>• pÉ ÆüˇĖO ôV3jZxAnK%ũČf܅dɖ<õ*€ū'Š?ˇ5+Ŋ"á¤HíB’ ˆØ0°q†īŒĶåclNÁÂũŖq¸uäæĻ´rKčßîˇ>•Íéž'Aaš„2Ë$qyĩęR6Í.Cœ*šÉ-׿?ãYUV›FwŠf$íĶmW!$\gŌC]f“ÍŠ Įī5ËZļëKvAœ4Ŗõų̍ŅÉ00ۜą9G-0@ “ŸN)¤áĀƒỐø4^ B“Ũ4ë2#ĩŸËœ¸ˇ Xއī{ûÕ÷đƓy-œ°î’QåJpūbáŋoņĒĶĒĻEŪĩy;^IˆerG,€­/°oCŒũzVžy&ĨĻyâ'ŽŅ:¸īV!ŗŽNŨ3Ūą..´Håģ˛û> ūdF‘á'“×7Ū\g‘Î8Íki÷ļ:UŦVâæÁ%ä— 8–`Km9$ĮœņŒP֛ =Lk/^eūæÆÚ6ŠĘkĒÄ*”‘—oNœTk:ÍÚÁ$bfŠ÷Ę ŽEh|ĐđGéžÕĄĻ˙Â,×īe´(ˇ6ÄĮ#3bxŸ,ĀLįŒį­ZIŧ"–Ę XŧČ ‡• Æ{€Wđ9枉ė/™ Ķ]]hÍ{F)%€KleI\Œũ3\f‹uĒ™ųgi­ĄšŠ9 ē2eBē/6ÎxÁēËéŗÛ[­â>Ų#ÁRÛļ’§8āF9öõ¨×PđĨÄ÷ąÃj’Á ‰äޏ¤‚9sķ08¤Ž¯ 3k2ŲYÍŗ/.ž8ŗ–mnjyėWž…đ–k'Kžž1j‚ĶOŠvā–/"†Üy-ÛuޝP‹FĶėVââʐČdRĖ\į%@,rzUâ_ [6á÷‰ļ+F$Æc.‹ĶĄP@_z7č3°ēēĶŽšŠ[jö÷—/q ˇ´ĘfSķc1°Á÷Ž˙PŽæÜI=ÄK:Y1’X›hŗī)ė3Kwuioá‰õM:Ō Fĸ FŌW‚pãĐqX:_n$Īö¤vÂÆ8å-q7īJ*Č>S÷rœs’Jå¨mĄ˙ ũAsIŽâŪßršōã!ëÉ,Ų<œƒZ#R›Jēņ5íĮšÃsšxōŅdFTœ˙Ī&;Ŋļ-īidŞŌĩ8õüëîÍ#°åé’9€¨Ŧ†ÛÛîz˜ĪčGôĢ0\ũ*Q‹ëŋuŒãūú¨[ŒÆĐ¸ÖuĀ{\ŠŠ ]{XšŌĩ^â‘Å´„ â_OÃĩPyįŗēņļ­˛>¤ŽíšUãŋSIˆ4FÆÔkvđŊĶ¸1`žß”öyŽ„ē™ßKkŽHÚ<3ÜŲī–yÍš‚6Ũ’”ķŽ˜RjŊ¯‰tØ&‘%I ą"0H\åWŽ8 Đũjhnŧ;,đÃu Ē?Ú# 60wNsĶq"ĒŲøTAĒŦŅÜ˛ÚÆPÄ2œ¨ö#>˜ôĨ§PÔ}ŽŠáÄĩ*-ü“äy°ZN~nœô<Ķ`°Đ/tųĨĶ$RBĐ;FH0OŨ˙fˆ|;ÚĨ‚+ôšâr|Č šHŽ'×Zĩ§h—šv“soįCįą%#@äĪN”ôč$aEĄ[jļOļ´e÷Ģˆ ÛēdāõīüTØ4éôŨvÕc¸,dÜę)Ū7ûë­WŸDŋ¸˛˛™,*p`*ī=9 CQXĮ¨ÃshŽ—6™‘<Ā˒@$öėKUĶq|‹3h—Đę.ņYÄPÍŊ$ŽLaIOĐ÷ęj‚Á¨[›0Ö­#ĸŠF{ 9ÁéōšĩĒ띎§~‘]*,eYRXōģBįƒī‘V$ŋēoÛŪ…‰îP[oH<ķŒŅ¨hgÜËs§Ē˜î.Ą™ĸŒČė‡'‡8įŪšO<—ˇúdŗJ˛ÉöVwQ’D’uŽú_ąš"-q˜+1‰B>à ×ņ T´ŋ× ’¤UKaÜęDÍ\/}ˆ‰ŧ‚īkžœ~uęJ‹ũ›>åB|áŒúã^aā ˛Cx<˛t$ô먝Nˇ&—t‡VÁčCW=o0øhŋčHŊ™(éė1šé4`7ų¸ę1éū5ÍڜÂÛ°.\ÅW˙¯].ÄÂrŲûŊGû"Ŗ¨ŪƎぴ ž:âŽAÎ›Š¯đ’Đ s´ūFgžøųc>0đÖö#2āwįZė|:x{N øõˆgū+‘ņØ âŋ 1$Ÿ8ō;é]F2AáÛI%|G¤lÄö9&´—‰[ŗWí(ŗI˛—A÷ķøúW)w¤jxîã[Sh×PÜ9w;ÂŦf6Æ;įōŽWCŽÖD†ü‰vĖËq72ہ9ÆRE8éĮ=+F=zōķN„˙jH$ `Œkƒæ?QĪŠ>Ŗĩ\­l+ÜągáŨBŌŨŅ!°VŅĸļķ´ŧs™0FÁņŽÆÂ%Ķ`‚Č"… OĘØU$“€=9ãé\΋}wöí* ¯^Dž;ÆXĮī_ Čī€OākĸŽâ ÉŽ„SĢ<åšØ~VĀ8sÁŋR•ŽvįEšķu Æ†ŪÆá¤™­äķ˙×3&Õ=x8ŨŸÃ­.Ģ K}ĩavŅÉbmL`“°†V\qĶ#¸Ļër­×ˆ#YîĒEnËˈ”*cÜėō9ųj9ĻÖndx$™íŨ4ą;C|ŌHĘá€8↠ĐūĩFÛÃq•uI Y%˛>mĮÍåŖ€3Ķ•~Ũ+2ãIš])ZÍ58äM6H–CænYF3ׁø{RMŖę1ۘ5V°{ˆ\™%Ëų~AüØ\dũAįž`vzžˇļŽĩÅ ~G™°ÁFĶĮá˙ëŽbÃEŠMKXĶ./¯.–éÜ3Į—dPAl}ü``t÷Ģ^Ō/,5MžÖ[h¤’]ÛÜ”—Ũ(SÆƒĶˇĄŦģKŊÕĩ y­Ņ/ô7Fâ."—í$î%€n1›¯zP:kũÍŨŗŪ\íN"ŠR Næā`õäzÔÂ)Ž ¸SŗÃŲX WŽ[ŽOpG Ŧ;Mâtųdĩpš‹És™”īR˛(~:u_zÎ‡Ãˇ1iEšžbEl^!*†-Ŧ\žĨ­æ5čkËĸBēp´û]ÔÂxŸí,Ë’ĒŸ*)°l3“ß5gL´Đõũ=eUfŒĪ—æũĐĒB’ã*zĸŠKášQî’=>Ũ­Z{y„M(*čąl(x< gž´šM…ūa(‚–y pŖ”Â’ZCĀūĮÕE7ģ/´}7MÔ"ē{ׂՄ Ûn,Ŗ`#$OoB9ë֖īUŌŦ¯Î§%ô`ĖnƒļˆË}zũ\ņ”ēļ– ´ōŒë":™A 6¸lsÚąbŌįšļ‰P˛Ė—e_ŧd6ŽzåúRVkQŊ6/ώĸFIË[5Ôë#\ˆƒ0F88ÉëĐzZŗg¯iw—Ëcm25Ë(d=¤)Ŋ8Č ū~†ŗ˙áš[[¨Ęâ[{xÁôhŽr~nAô­/ąŽĒ_k^,vMbXDAB”ārxäđ=¨÷CS/LņvwÖīhļr˜žĪCkŽũƒgcÉúRG>ŽęPZĮax˛ÚÄÛ$XÚ4d@ŨAÜ0}ãĨĻƒĒ™ ŗÕ䕮f7)AûĻ,Žåä.TäûVĸ ;šņK\_EÖęŌÁ*…hĀb¸ÎqÚ­Ųl$r÷,ÖĄ–â5š,G$ņ$fŨ›Ë1…ĀʞCö5Ô\xŽ+Kķcui*ELķJŽ ÆévLu8R9ĸ›‘§IĖ“j3\}ŗp‰æ™HŒHwĮû+Î1Įz‚ķHҧŊVúônąÅГŌXēA9<ņJéô WR}+ÆŌĩĩĨÍģÛOuq4( 7!į‘õĮ×5ËüPpǍ9ĩ|œtũė5×č:vŸkhSA<‚wde“Ėō܌0V<įĪ~MrSuĢ6H&ÚAo2ũ(…šÕ…/…ƒyđf—¸ķä ×ä/Cõ5‘āŧÂĻpOîG~3[ `(ÜÖ3ø™¤vCãŋoSIJ&š“Œ°A˙ĄSáä‘Į_JHcsx’*„_/Ë#Š\OãŸĘĄnS9tą]CSņŗŧ‘‡–"3‚E#žj |5$Z”2Ãx¯Ė d 6‰wœc¸ĨfL~ ÖāgūŠĨâhnäžÚ{c(–8ĻQ$$ŊņÁüq] ģØÍís6ãזöOÚÛŪ/—aA ‘6ãŒô1ĪŌēģVš‰Ąĩ`Æ+XãO4Ÿõ´į@6œûûVE”ĶRŽ[™åeicķd]Ļ1Œ¸íƒøÖ6•Ģ\éŨēÎæ(ŪBŅ€CĮ÷F¨Ž”õbēEŠdŋ’kų,Ĩž+î“´ŨvÕÂņķAnG5;^ßAt!:ÕŅežKr­GO§ņ}*âx¯kČë`ĨEÃ*˜ÜWh;°G_˜~ž”ŖÄ°$AZÎęGXâÜrĨŽĐyõ×'Ž´kØZŧK3miŌĮöĄ"€ß#ė 7`įœrYČéEΊî‘AûA°ü9!s‚?ī–ũ*ūĒņΤÛjÖčėíeY[jė?9 @<|ŖôĒIg Ũ[t"ˇœ+ģÆĶŅo8nA铊4ļŖëĄnĮV‡SO.{ŽT¸RI#ú­gAŠÚŨéķYę0Ål€@ƒ#q'°čA­éē|vē¤ip’Á´!÷ÛÉįé“YWÖ-AŖŧÔ!VÜ'†tÉę;ģũ(V¸;Øēē~}`­ŅÛË##2yĄ°1Œ~ “Šā|xąÃĒŲ%´Ėđũ“(Û{d5ÔÉĄĘvŧP‰Lpܧdũ85ÂxšßY3˛ė3tų›úæĩ†û™Čė4I :Ha1īĖOņ}îŪØ?wē3fGŒ’ā{ ķŊ|7“ĻËōã(@Æ~ös]ūŽIŸ!H}}…rM{ĮUô1ĸßš–ī’{åsÅtÚK Œ9ĀĀéœđŦR'ģRˇÛT×<0­Í%T#ĀįRę'ąŗ–#ŠĮ­46Ö9'éëHX/NüĶX€ztĢ áū!3 SÃŌ'QpzļßâüâēMīĐŦÃm?¸QČÆ1\ĮÄi^)t7ųxē=W8åOáŌēO Ú<`+×҈ū•rø+âfĸÛÛ¤šXÂėŽØĀ ž¸úÖ5îŊkew¯•,Œ¨KЏ\/ןA] 9ā û×;uĄÃ>ž/'–$YPČ/ˆŨJãĄ$7QŲzqš•kę6P圗:CO ܗoķˆPĒÎŦW!OS†1ÍhxwÄڔ÷ÛŲÍå[]GΏOÕOåNĶü7Ĩ[Ëļ×SH-Q`ÚfŪ\íŨîzg§J—GĐėôkÉxō:ZŦDK"ä"ŗNxÂŠÛ •ĖŨ›Y-/!ļŲ IWĪuåJŒ€8#'æ {úæ‘ŧEui`˛^Z;HÖ˛ÜW ¸#(ôČ`kvķI˛Õ¯#/y#ŦCŨ% ԎšĪŊ=k/Uđæ‘eĸ#jW˛Cm[įĪÃH€íÔ.;p3Å ­ Ieņ%Ä:é˛.Č&™<ŅÔÄdĸ°įĄ jRęēU­ķĀŅŖÎŨŲHëß5BĘÛDÔm_WŪ"e`ō3] LˆÉķÅ~ëķĪz“ÃÉĻø{H°ĶÎĢÂĖĮČvp„œŖĶ44­d+ļŋ}­qe­ģŧ6é™͈  ũsÁ˙&ŗ!ņ&š¨Ú[<ÛÁ(kWEŪv˞ų[ēō3Æ{y­y×Á¯y&Ŗ<öŸhķ<אL~öƏ÷CqßJt āÛm>âHžÍ­bXá”î2m ÉĪ'‘ĪåONÂų›y<ēDwijÆ-æ2Ų ã;F:ķ\FƒŠ]GoŠęrÜ]Ũũ’Ņn#V¸>T›ĸË c† ­ĮlôާQņ&‹ ähn Ví#[#aš0Ž?ā,1Xo ^ܤiĨŦW÷q<˛Å!iW– äž@<ú}iE4ĐÛԎķŚÜ1HÂÚČËœĖrÅHDG]žšFĮ×éQßx\Š(š4°Œų—“‚c]Ëר0úķíZ:ŧÚ“w§iri°-–ÉĘSp$R:€CrßJŠūīÃ1\"‹5wĩ¸Â$vŲRŦ8įîõŌĢNÂų›ö×qŨ âGE•6‰"Č&<€pEsÅŨ՟Œ!ō§S HCBėŽ]„ Ī'uĪ­ŋë6Ŧˇmk‘ŋîärņm2\Ģßņô§k‘éņ˛_\ÛĘĶC,ĸeÉųTw'8 tĪ=¸…Ŗ+trš†š>Ąa}ßAi%ģ*ōĻ5iLn˛sķ=:š[SY[+Í×ilÖÚrÎ#Dß:ņœ|ŖŋéZˇZü1Es<rËlm!FÜ4†f!CĐÉ?īU‹ŸÃÜÂē]˝oåG!šļ§ž1ŧ}yĮCUō'æ;ÃsK4âkš.LWLØō•VõŽ^öKŗKæŨ­ÔW7‘¤‘ÁÆI ‹Ŋ߯5Üi—ßÛ:lwËjđ?˜čcgm­Ķ¯*yŽC\ģ×eÕŽ-b’xŅf B1ą‡”Ė1;\sۑJ?ØąxšŦÍĢBˇ:Ļ不 $mĩ`fBJ`Ä|ÃĐŪņŸ™āšâ stūLqüŖ2ŗ¸8ãœōkĶÄWv˛…/tō,FÕo×!а,Āp>FÎAõˇ(ģŋ‡ČļĩŠšØÉæËE'”˛Œ0@~?JvbēKĐn>Ņk,‰;[K3ÍēO•ŌA FûØ“q‘Ul|;.š-Ž­Ú)`ŌÚˇN0’æ@sƒŸ˜:ŸÃØUeņũχļOŗũĩŸ2V,Žĸ1'Q˜îéÆ? š'ˆ.îoîėŖŊƒĖ3Mj d¨€2÷ūņëíOŪ [øt‹*YlŖX"ķ${e”‰ŽÂĨHüĘ[˜ö¨Ŧ|5Š&j!™>ŅŒ˛ōw!Up@Æx}? |;uqqu”FÚhŦâŗ…ų‰u Ŋ}˛HĢZŪ­>›Ģéö pbGdf;7o˅`}89íÔRģŊƒK\v“á9’kK›š#…­nZá#ĩ$+nTƒô#ōúÖoÄ|-  y6ĶŸ÷ĸ?Ō¯hZ†ģ,Éx—WŒˇ;ƒj€tãŸČsšĨņ%w[Eča› {<Ņķ̃ø]¯ģéd*œGŽ{|ÆļņŽ˜ΰüÄø'L$ķå°įŲÚˇK`đXûŠÆ4ŽČžŪ‡đ§$L.nœž6Æ }76ģĻzc“QÂíũŠt‡L1ŸĮ/ŸéPˇ1­¸ņVĸœüĐÆÜū#úQ­j3Û xc•]d2+6Ōq€1ÁîÃōĨŒŦ~0ģ$ã6‘ßqRk/ĨKugo:9vJdÛ° `į>‡Lö­–äŊŒër ëČ-eąš5š,¨Ä‚ŽĪëŒ`ԗ Į$Ö×v땈ÎaĘām ŸŊņ5-­†–÷é}e| 6ÆI%”2‚øÁöZ¤––úÖ§-Í†Ē„ŗĢ#TÄIėå˜úÕiqjA§imÛI,WhÉí$Ų)ŨÁčĀu÷ã=­†‹Ē-ÍĩŒ÷‘Lģ$ŲÎÕĀČÜ9jįũŪÕzÃÓ[YŨÃ<‡ž ŧyãåÁÎzķ’>ĩ†4-Q-'ß§Ü`Yc~gž<Å$ Č€ĐķN÷ę#BōĀ\iŅipG%É´hŧÅÜeW=#ˇŊS¸đÅûÚD‘‹x‰ˇX²œ‚7d8čߝR};RŠōxäKĩ|B˛ŧNpÃ÷C#Ë&~žÕĶč÷†™k)™§šØ9.ŧ œō946ÖÂZîspYÜé7đ´öŅĸIt€ÛÕ¤ūŒ)ū ´uÕ"šEœŽÜ–U. ¯¨_N*Ū§¨ĩ§‰NZ&_ |˛v7ÎCž>čĪáVô[ëAĻ’eļ=› ā”ūŅw¸YlsRßK <ļT3•R0˜'šëÚšj'QÖašXĸB-‘@õäœūd× .ĩÍļuœm„‰6 !É PÊâž"[ÃeŽYĮmL†É\r~gūV”÷Õ#ĸŌíŌb›œĘی„äŸN~•×čåL˙yw×Ôöá\^-Ē ‚ØŒĒäåˇœfģ] >ĐúąĐZå–įWB”‘íÔ/ž`íHŨ1ũęÕԃá+‚GOLŸđŦËŦV˙$ķ$dô=˙úõĨ¤1Č6væi Ą´8Ī9჊^ŽA<â‘K†ČښĘLÁųČ`~áTAÃüNLÚé åoõ#˙­]‡Ø0+D˛Œ˙Mš˙‰ąîŅl¤;KÕã8ĢVö†Ą,ߟųm61ĪüĩjŌ_%|L×{´aą×&¸īÅ5׊Ŧ]bG’øl€„HrTãÁÉéŠęä‰Ë7+ČĀë™×īī­5[8asRē9o/pp]TƒĮ;ŽŖéS ôļ4<3iũ‘¤ŦW ¸c™$W/ŋ9Åf]irËĒj+(´yŽ-ŽŖ‰ž@$em…8˙dä{ ĘkŨeė-$—RhĨš–eeX@)ˆØā1ÕG¯^õd_Ü-Ũ”Ķ\Â$•-6ļÅÎ$'Ėއ Wg{“ucGKŅϰ×ãÔÎãß6^6Ëa–08Ÿ˜7íZž*ĩ›SŅfŠ !d‰",ĪČčsÆpzt5ĖÁ}§[ë×Ȳˆ|Örˌ˛0Ul“ü8#§ß5~Ūūųu­2Ųõ•1Ü@%ũÜAÖbäę§9˙f†îl[šÂso=õŽŗš¸–Ũü‚û“1pH$ķų §mĄŨ'ö|j6eí!,~Y'÷r ņĮ>āV‡ŠŦ>ߥ­ĩÔRĖ­uLq–e]ܡ0 ŦK;]nŌ=Y9EęEp]Å&áCą-ŒuÚ@#ڔvÜosN=īËō1dûÜ,‹ҟ0ō}G˜@úS…î–Åmū×N {™c,¤-ŋ’Ãg‚qūEoŲ’&{B.ØÛ*ĄžuĮ™‘œƒÜúņÖ˛.4Én5™Ũu}A eeÂD •P_öŗžŪôs0˛"°Å¨ĢËEļēŗH ˜ļ˛°CA-€=ŋ ĩcĨßCĒÁ|×ҏkD†UXvîÚXŒđ>cīĀŽsUĶÚĶOˇŧŽęYÖK‚`mBs$(ž[ÎNzō@ä¨í]'†åFĩļk{¨Z+h˛ŌŽÜ3€{ãŋĻEö¸-Ë:ž…ũĨ¨Y^ Äi ēK a*8—Û Ŧč|8D7ēe˙O7ČŅFšbÛsžŊkĨÚ6`8Āö CÆŠōŽ>n9Šæc˛1tM tB|쉿ķ"Š#ŧ¨`Ā<CSkkjöÃË[ËĢ4rŽ +#g˙­øÖĻČoÍ…$ũęi˛”gPáG|ķK™Ūáds’x>7˛T•Öõ´KrAQ÷zˇN įđŠ$đä1]¯Ú.ŧxį|KŅ“nã;FĨmŦˆĘą•0oJ•„PFā…áhæc˛3ôûEą˛háf(]æųÎ~gbÄ`IĻÜø{IÔnÖúHäķØgŽWBëŒ8#åöĢÁ‘— Oĸį„XÂī`}zū4]îë é0ZGå€2š3ģ;eĘ2Np2xé×Ö¨/†­-õrM *ąĮ Â2B›Kg•!› ޏįĩtŌCʰĮ#ŸZC"yLîB ä–=‡­>fFŸ‡tëK'ˇkh%RæLĀQ‘ˇ§=ķšŅ[KQ0‘-aWo™˜ œÎ~œSmõ‹ 4ę Ä[I’U+ō‚A<ãŠąmqÖÉŖÁŠEܛ”‚Ō“ŋPVkļŠ$Š"ĸ ĀīĀ“i6×wBęæ7i#Uį`<€pppyĢ<øēÕ5ƒ`-n\1 ÖČXusÁ gÍlÅĒY V’[Čc;3Ē2FIú‚? -$E›6]ŗKīšâž FĻŲX“Ÿ&|1Ÿ…u°ęÚvņnoáyƒ¤mČË; ¨ĮКåū 6-æĮîn?õČ˙…8'ͨĨk|Ī‚ôü’¯'īĩoą‡=+žđŧbvãũgúhÕŅĖšĀâϧÄĘŽČŗĘ đ*(ū͜÷0¯ķ5*“€3úUh¸Õåëū u˙xÖ}Fb_ʖŪ(š™ÉÚļ*ĮäcŌŗu+)|EÆ™*6LŒ]J•%Gâ9éĐÕín7—[ģŽ8Ė&šĘМdäņŸzįÔ4øg˜›č<Ĩ\,jÅwŖˇŖëščŠęfÍí3DšÎōüIkÃbŠeÃHOĘsž¸ū•ļˇÚ%ŊКK´I,Ąũî&9 ܝßŪä^HõĄ¯ š'†oĩ [@–ëR‡cË!h„`Č@ĮúŽ}+~&RˆÛ2TpF8úV$i¤Úč‡NĩÔc.#ÄO$û™Cä)?€úUģ´Û+[{k7ļX8XB¸ųøíęjeäR(ëēĻĸ—öVւxžá\üŦ„î\ŋ6@ČĪ8íN´ņģ–oiq)ka;1`6d0 #?JŽ˙J7ĸj6ķĨ¤€9‰i€.[°íôŠĸ“F‰MÅĩĖũœÄÛf;|¸ÉŒķ‚ĮŸzzX]HmüYsp–o‘9ûfLa¤QōáîŊ0įßåüļ ­šēžxāO6u ,€ōĀt׊æÕ<7emj­zĻ;K…XstÄĢ>>SĪŨÆ8é[Zæ•Ęŗ_[(RUža€@$ŽüŠ5Ų}ÎbŌãRĐ`Fģ Ņ­´ō›r/îÉĀB>îāAÛíW[WšžæĐ\Å-ēC$í*ÛĘv’ŠŽƒ?ÄĨ[§ŠĢrYiš>‘qsöyn,Ŗä[ũôPøW*:ã’9īĮ4ãw ÆtԆXŌ"ėą"AR#üûņU{ëaXÎ˙„“Zd‘´Ë*{sq&Y2“}Ŧ08įōŠt[Ûķâ;Ģļ˛ŧ§gÉQ€oAÃuę}x̚mˇ†õˆíîlb†T°!bؘT$īøV~$[-BęâßI´ŠyEyž\„Ģ(el¯ŪlĄuõ§ž‰ÚÜØņŖL,ėĸķdŠŪiĘI$-´äĢäpXⰑ5='NŌīb†đM11É#:dÆHW˘•āƒÆî•ÔŪëšt÷ ĻŪFŌ+DZT’,ÆPÄĶ U,ĩ} Î t‚ÕĸåōÄ"ԃ† Iāî*3ęi&Ōĩ¤ŲžÚė:Ôv×Q­ĖˇÉīÎá˜wŒņ–Ü?A[5íõöĨŠÅqĢo3F°,xhÆėŠcôãūõĒɯXūæiŌV{‰ÜîH6…UÆž™Qœū>›¯ĨîĸöđØŨ#+JL€ÆÁO|÷}i;Ûa”u‹NZÛĮy"Å(‰Ö™W"Oœ˙t’~‚˛#ģÕoaŽi¯îÂŊä1žÔÚcb]]ÆiÎ;Ö´0ûDk'ö\Ū~GuųŲ‹/82‘N.œŨ°éŠđĘ-És& ųš1؂?Ms.‚Đ~y=žŖ$Ģ<×L°ūķ†P2KŽ€ĮZÚŊļé—6ü“,Nƒk`ōãķŽgÆw7ąŪAåÍ$P‹)F)—7e|§öN3•_NĻĶ{‰4‹?Ø­'‰..g3nûRĐp˛DTK(†gŸ—œæœūē6SĮĨ„l׎å‰$K 0męžgy&§}–_L/g3ēãi6äŠĪ÷žœ ¤ēŨÜÚD2ĮĢē°û˜vųY1‘Ī<žŧŒQ­ô ÚnƒĢ}ŽŪo*É#ŽKgp‚|¸Ę0íqũ)ž?ė+œdŦã匇úU 6[ĶĒiSĨÕÁ¸pđ´žY+8IČ*ü`|…ŽxéšŌņâ븊Žs>vņ˙.ōŅö•ÃĄ/ÃüÂ`\Č9˙Ž],pxôËü:lø*Ë$ä4Ÿúާwüë*Ÿ.? %SĮÄÕ[s˙ÉĮû2ûMVS=9÷ǐøŸIŽöÜ˙ßG˙¯Yõ™r6xĮqÉ_ątūsUĩ=jM?Qŗ_-šIK¨ d€6ō~¤vę*ÕĶÅg‘ÖÕ‡×æĒšæŸcsud—d…gĖ[hÁÂã9ë–úVĘ×W%ŪÄpßiwEÕčŌČHs)WPw–Păīœ~§´´ĐīœC‘éQĄXŗ6Õr8ūųü éļZĖfô )í ÁīĐ­2ÃIōõ¯ĸž9íˆb¤J Ü0qÎĶø­:öëN´žęŌgģųæ/4‘†Āȇ8 éŌĸC1YÛ\ŨÜB̉c(#Ž 'œîÎ~œU]kMš:”ˇ)m;Į&Ö[ė2Ą[*qÎŽ;dÕ;ëmA´ë¨$7¨ō´pŠØb%@ü¤đqéTŧ˜™¯ĻéÃweæ5œžRJۀųĀb °ëĪÍW×tĢģÍSÎĩ´l´j ūhá†ųā ~>ÕJËPžPƒ0_3by˛¸Į™Æy )ļWķ$\Į8%!EälV/áΠˡ>ôĩ¸i`ב]Ä$´ŧ‚Ũ ŽJ€ ņÁėx5Ļšye`Ą. ĸÂʎņ—;9騜Vŧ^'—Î&hc*FbŽ>™* Œ˙jԚūÆÂöf´c)`Ā2\_VÍ;ž¨VE]î{˙Ū™åWT…BydmėOķ­y—ĝ°Æ­\ņđ-ā­DŽū>ĩāIš[9Kc$BÄãĖįųVŸōėļuîj÷?JåüQeȂéĻŗ‰ũŠqæy]āđ°į•ÕˇāîįÎk‰ņÍ¤Ņ‹g',2(ÆXĢĨXzō¸#Ž ĨˆrØd: ڝĩäđËiļá&T–fYKœüà AčO^Ü՛ī^O¯6Ą¯cixePúqĮÖŖ¸ķ;ėOw:‡mÚ8ĖÔÃh•ß×ĶŊg´:Ęj2lģÔĘŦĪ´ˆ‰]Ģ:ü<ŒĮđ•jũÉ55Ī Ūę0Ī 6[cĩD*ųe‘_ƒÆJ–? Įö™6ØdŠŪ7 ¤˛„rá@ r>‚›§ßjøƒPCsqwИ›}ŸÃ…dÚz’ĘzÎ˙ЭϏđĨî ™1†ÛŒ° ƒŒ ŌģŅMË:0žãLGēų˛’ä"ä($:ō@Å`AĄęKy4RũˆÅļéT)c“3Rr=ąôĒ"įV‚ÚŲmįšō#ļ<0s$k2&BđšĀ}ßjKDÔŦlõšlw¨YjˆHea!Æ8Ë|„cŽ0)ÚšŠgá­A`ļ!íÃ-ģ÷ ˆãØßR>¨“ÓĨĩŧ1ËffŠųįlDųˆÅø<ō@síÅQ?ږúÜ0.Ą,QŊ¯HÎÖ¸>xô¯CšĶņ.u>­ĨÍln—ĖQ,<ųl@Ú[ũœŽsJîûĄ­mˇŖŪi°ĖQNagđŒ0zqšÎd]ÄÆŖunĸ8\NĪQŊÛvW'å9ãžsYqÚkę+o4š„p˙hĖí"~PUŖÁé´ō=9Ž‹Äēt—z:­ēNŌĀé$kÉąbųčimĨĮžĻ‡ĩm"ÂŌÛM:¸rvÄæm' 3ŒppsĪj”xƊęYībges­˛ĮåĘį8ûĮ*ŧûW3‘tâ(â´ŋĨTvI­˙tdYYļļz*†#߂:VŒūŊofž Ų ęY•P<Ø6Ũŧäc#Ķ Ēi_q&ÆßØŲÜÛ]ëú„˛Cr](Ėčā-ÕAČĒĖúØŪŲ§ŊØ Ã2°eÜÎŌ$Xį•cÆ=:dÖnŖ^Z%Š0Ël‘Ū[_3vâ7‡nŋwk(ü+DihRGˇ’IŸT2HÂQ‡‹2aƒØ8ëΆüÄŊEkĨI:ĮŖ?î^RŅ‘ˆŲ^@Åäo9āŠ–Ōô^6:‹ŧō_k`¨YKō2ĪLķÖŗ†ƒvú•Ŧ“:[ۅLTI‰ zíĮ?ãN˙„^ōâKO´ØCG5Ãŗ¤ŲØU‘X sĀ#â;STčz;Ú][ÛË3âa#¸;á`w?. $zĨrē-ލLʐ"CÜXė3Į~{įëV´ hėšö2-d˜Îí+E.Y˛ėT0ūƒĶëI{ ^^ęRŪG%ē$†Ü”t$¯•!nŖÔqS}ucŨhM–‹¯+ji\‰”ĄrNÚFé 3ÉŦÛ-[@“NmFKíįˇTŖhˇ:í$ #+Ôz{Vö•m§Ûé÷W5ÙFŌĀ’Ä õĀ5‰>“kŖiĪq}~æ§YcuˇŨåŽâØ g#,ܟQI5{žå¸ÛIÕ¯>Ëmnņ˜&i\$[˜<œ`Ÿē}qTĩũz÷KÖ#°ŗˇ" ’î1dģ4x8Ī9#¨äVĻ“=œ:ŊÁ‚öi’õČCîĮ Į ļß'öĪ_ÎēÃĮūuĮ|6Īü"WY¸æēāFü gšŠŸ.? %B6ņŒâŠĀäkįĐÛŅŋúõi28ĒQåuøÉ?zŪAõÃ.?gÔfuūŦē|Öī×ØÔšö—. -LmؤŌLá—r’2?ŨŦøņ~˜ûÖķuí÷k?Æ:…ŨĨŧļŗËo#t|Ž˛MĩbŅ„Z=í¯†^Ų`Øņʲ„†$PJŽį98îGŊQ[­CN€$Wđ,[ÁšŲSËķHĘč1čÔÕņŠ ąCqoIQs’Ŧ„ČŖį#œŲ>!xŦŦn.āųå‹$8pWœqę?*Ŋz‹B´:ÖĨŧb[{ĸ˛9fpS4 õéßķŋ{¨>‰g{nD ņ™'1.āBÃ9w#ŧĶNĨĻjš<÷ë`$ØáeM‡qe<ŸLí9öĻ[ΧjÚ\+m7Ø p|ā†ĘƒˇÃd1ØŌųØŧASɝ1ÖX†a´ī`€é ĮÔĶâšŅ%žwšXĘI+Ēī‹ ĩUIü>OĮÔēn“¤\I<–—SūåüļĖ€ÃaČ˙žëPŪxnoˇŗ\8‚O1Îõr¯ū§Ō–€Ž]M'Fk(.`‘#‰Ų R+¸Žü=čÔ4¨/'ļ˜ę }؄dü†įūųĻęmŌč1ZÚų2HŽwļÕ'vxôäņ\ûhZœsîûĢ—LØ|¤Ãg=#đÍ ŊÁú6ú4z]Åŧˇ×đ\}õX…P0I땮∙ŧMl ĘlĐŠĪQŊë¸ņMÕ´Zļš.š1Fá"eHÜ2ÔgņŧīĮú‹]ø…dķĸdXŠ"ė"‰ũÖ ˇr'؛Ii‹aF$áP6+Ķ,›¨€=ŲsžŊ+ĖtÆŊÖ,å#Y@’<ŠÁ?!äÎŊ7O*e¸vę;äV´’7†¨v´3ŠÆ6‚ZĪl5IĻąôÎ=čÕĶ:ĻŌ7ÛĶëū4šađôÆT}FÚĖŖĄÜ@įz`~t0ēŒ{SUœ€NryāRž¸ųšöĢ įüpĨüЍų`ņūđ?Ōą~’,Ø`āĮ Éé÷1˙˛×Câ´ķ<%ĒÆģŋãŲĪ āfš¯Â00ŪĶŪAũ+OųvČûhôÃ_Ž+Äzåæ“%œvvöŌ›7&V )T,8CūNkiŠúTu"ĮVhMä>kB[a9w žÕœm}Jf xÂíŖš™4Äh­mŖ–CæcæuFÚ8ôcø¯jŽ}cU—VŠ6WĩōžxbōÜ?˜[’Ė3Œ.8ĮZÜŌ 2Įö@Vh’2O( ?AH|/Ļ´ˆÍ”Eˆ"d€<˛ÅOŋß9ĪZģĮą6e|E MFytĊyZ/48>döp1ˇ“īéY7ž!Ôn~ĈĘF8”ĀРΜ"n\p9õæē6đ֔ЍF!`ˇíēān?1üøįž*đΝ ČG‰åP3æŦŸ‡*? /ŗ( ni<%{öV‚8ce†E`­ ‡)Î{cëU¯ŧ[u§Í4cLYßxg2ōÛ1íũ×üë %‚iŗiË-& Ŋ2I;ēōyVO hˇ%Ų흷†ųŨBžū€~T'¨fw‹uMBĀÛ}‰š2čJy`ōda į ‘Æ*Ŧ^&ŋŌ Ô-¯n/ •ž?5† [ ˜, Ā# íõŽ–˙@Ōu(Ņ.íDĸ4،x(2:ČéÖŖ>Ҥĩ[i,ÃÄɉ˜ŗm+’Į“Áî• QĩšîP_¤÷j,íü¨fŽÆoâ“Ë۞:äŸĨW›Å°žKk}Ą`ķCÎæ˜ÄÁ}ŗČ>ƒŪļ[Ã:+yå´øŋĮ'ÂŊ>˜ĀäzJžM K‘•ŪĘ&dDI[rĀ€hŧ{ĖÆ×î$Ô5ÛM&Öæ1ą$yԖ[áJÚˑÔc=ûÕwņ&¯y§Ũ˜’Ū+L3šÉŨ¸Ģa“ž™QŽ;õâˇuMËVšļ–ņ^AȉČĮŽŖ<úEŌ܁CĪŲŲÔ Á#öęi)+ ågŸÛę3ÛÁä[Ŧq:Ãw"niŖyHØųŽI˒3žÆ*=GPē2YÚ-ÜpZËĔ—$´EÃą-ķ Ũp+Đŋ°tã’müŦ7ˇ.7 ¤äô$qôãĨ$ēŸsl!šÚ6Â" ne^€ŸNŋ™ĒįWØ\§!/‰u†]Bén-mcˇĩÄr ž÷Äā˙ĖWņ­Ŋ'Uŧ:EåÄōĩķ[ŨKō"ųʃ…ņúbˇdĩĩdqöx˜Iã`;ņĶ?ĨIhĄ• $ŗ\džšõ&ĄÉ[aØķ6iíėšk Ņqq 3›˜°§i\˜Üā}ķĮœäúYîīŌ×*ú´¯å^ćËpÄüĻ2p8Ī?Zô ;]>/ŗÚDąE’vū.Õqz`įđ\úė.SĪláž]ęS$æÚ(ˆ[˜Øl„ĮœĢŒ†qŒāĩtĩæ­áhlŽnaŒ­Ģ8Ęō $­t­IIr0ÁV‚*ES¸u¤å}Gkhyãø3Qōī­ā„-”ÖOöhd”ŖĘåIBGUdcŠë4ģ ,íūÁö&Ö(ĄŽPrį%ĮāqĪ|ÖĮȤ~„œqؚNMî Xâ đŪ |4æĶã[‘yįŪA´'›ŋļFqōÔzŧ:tž'˜-dšA"Ü­¸gšP`#q }ÜpĮzčõ?Zild•ɍĻ"%Ũļ5Ææ>Ã#ÜöĢ“,bd(ÁÔ0luĨW3ŨŠČåô+-^ØÍzbķęh“eÆ#dČnį§Ķ§@ß K(đS.2žž[ŽkŦF#yëÖš/0{HÕd —#ęZQw`Ց›đãūEDá†'“¯ÖēÔ ōsÔ×!đā˙Å(žĶŋCŸJėwĮŋ55>&\>9OSĪãT׍n˙Q ˙Į’ާ‘UpN­lŲū 3˙ŽÖ]Jček9_čīŒ‚“/æĩe‚9†E`s×Ū˛uāá!ŅĪ`͟ÍklmrģúÖĪdB3dŌtų‰g´y$ į%O?ŠĘĒÜxnÚk8-âg‰ ČģsŸ^Üū‚ˇ {zČĐdwä⋰ąĪĮ 5ļ—saÛ+˛:‚S Ŗ§C÷j„Ôņ›ö`T! *€Ģ„qęŲĮå]‹#Æ8§ÄNsĮ^iŠ1rŖĖcŅo>ĪsĶ‚aē8_’Å äņĶ˙fŠÜę0E MĄ(Dˆä™OO ¯GÜIq€~´ ËÁQĮãUÎÅʏ=ĩ×.‘)ŽĖ¨'lČ ˙–g˙fëMƒÄ76ˇV’ǁmGt^cnf!XžzōÜ{fģļąĩ—ūX"ē ŧ¨ôūCōūĶŧØ%dLƅŪo”(ũ Qę„âÆYøŽKËØíntŨ›×;÷”‡žõį˙&…ŧIn|§ė‹Ÿ—ŠŪüפ[øvÖÛQK¸^bcBy„ēŋ^yŸÄĢ9`ņBC‰-•ĮīO÷˜J¨Zú ŪÆ_‡!ÆŊe ū-ÃÛMzŸ0ģķÅp>X–ú 0sō‡Ča‘Æ+ĐŦ>Iá9qĪáY֕ämÚ%Wk´cĀĪŸūŊEĻ’Í'Ē˙č5&´¨ÉÎ2Á§CPiÅACˇ'#Â˛(éUqœķíģ×8#;Œdā~ŌGūD™ÚŌîđöĸ„1-k Á?ėšã~80&˙¨Apī&˙ëWo¨Œéˇ@“ Žž‡ĨpōbVáV<aōũ÷#Ÿ^Mkū$zRH˙ÖŖ.¸áŠĻT 9ëր$!ąœ“íŠw\dUÍĖ*Hķ7ģt¤ûm˜›ˆĮyėÅt\Sš3ŽŊ8ũī˜įņŦš5*"Dššy 2ëP7ŠtįûNȟögNŸ;>Âē6×vúæĩę XƒÅZûVĶžÁÁ øŗFŒĮč'ũ˜Ø˙!G+ėEi7÷j]ZFžTÁ%!ÁRx*8''Ž=+zÄŨ)š;‹xã†2ĢWÜYvŒį\Š Ū/ĶAû÷DãĸÚJ’ÔøžĀv^ąëk ū`Siĩk CyĨUČ,G8bš_sh¤nųeLuĮõ§ŸéäŸŨ\Ÿg ŸÍ…Ržŋˇņ K9"K„"AĘŦĮkŅXđpyÍ‹OQļ™[áĐcá–ÜQˆ¸~TņÚģ§×5Æü>ˇšļĐåˇēŖe¸žĨqĀč;ũk˛FĀ0üĒj|LqøP§Š9öQŋä%jNyŪŊ}FĨZrŨ0~ĩ]B}Ļ8Üãō5—RĖ_šîŠŨŧŌ=8˙ Ũܨ>nžÆą5äy5Ũ/ JĖŪĀ)?ŌĩfÚā €qÆknˆŽä‰q’ĒpÞz”ŒãõĒ‘BË*ą‚x Uĩ8]§ßŊ!Ž,w/ĀíëOīœAÃc‚}čven*Hę*šˇyÉl|ŲŽĩhåHëõĨ;ˆ ‘ŒP"8‘—vėāûÕy ™Ī–Áˆy掊úšC߯ĩV€*C‘€ œ“^WņHįÄÖĮ?ōæŋú×­•Ry yÅËâ[PŊ’cūûz¸nLŒmęWÕ4čS'dĄ#+Ķ­K*@s–Ü9íŌšģ/ jˇ1HĪlmŌU`Š#wĮ5ģ¸[p 9Ã~BĸŖMčk-s-NHU~N;dUm$ž;áĪ ˙´jδíöx\ä€IÆzō*žžU%sÔ+žOЍ(ę lRYˆ¤ÖMöšDyvËp*ÍķŨæ(x‹=GņVmæšō"”~܁Z(÷5†RW&Ÿ_ē”2ģX sÁŽNî÷PŌ4ôĶtk#å0&GV9üÁ>õĨ•p\´˛0NŨˆ4ÉGŲØ‰FõõčEi#*˜yĨsŸMSÄØ;l’.&Č˙ĮęQ¨xĄß‹=IIęDōŸæMtÖŌ.@OĐÖŨŦĢĩ~Qž§-Tęyܞgڏ‰ŽXjYîLŌĐu•˙n§ČĮKÖŊN#ã×­LcVeÚ yČíSí|‡ėüĪ'ž&åN™ŠįÔĪ-4]xŠ€“ė™^ëįËū5끹ųz{ĶŠĀUãØŅí|ƒŲŽį‘ŋīĮö^¤?įâ|˙čTĶyâ\ā隠Ā˙Ÿ‰˙ÆŊ‹bŽ6ŽOQœŌ*Ŗ€œķÉâk䋚ä+qâV۝7S#íS˙ņToņ;ĄNÔFOüũNū…^Ā1Ŗđ4%*7t­ÕöDyRxĄ"(Ún Xã o&ņ׿Ļŧž+>güKuOŨ˙Jœ€?īēõíĢĮĶÆ0ŧ{š^×Č=™ãá|VŌī3žÚ§įöŌϊËÁŌĻünĻį˙"WŽ(Œ ˛Œũh œüĒŲöf"ŽÃÅaˆūČ8Î>k‰x˙Ȕ˙ėŸIģū%1`ž)ūŽkÖĖcŠ@J=ŗė?f!mÄ놓h ŸâU8üÉĸ?xĸGÉĶŦCZŽ?C^ē=ƒĪ4ģTđz֏m.ÁėŅäÖūņp`°PĀäĩŧ|ûâ­¯ƒüIæ­dŠģŒãœ×¨ÜŨ_CAAžxã֗ĩr#Ídđ‡ŠfŒ#_Û&Ūč g¯\/Ĩ"ø#ÅļžēꇡWoņ¯M0ĪlzŌ–î@ëG´r#ÍĮŧG$adņ Ŋ:søũęŒ|8Õdæã\œœcqĪâZŊ1ßj3*†#œÉĨfeŠŠŖÚČ9"yŋü*ō䴚ŦíŒ;G­IÂë8ØŧšfĮ]Ę3úWĸšÎ¯Ôy}ÄüģqĮ\擊>ãåc†˙…kĨŸ™Œ…y¸ Ģļ~Ō,nRå#c$g*ZG$c‘ŪēáÆ˜ä`t‚—<ģ•v"TØšÎ03ÂŌ‚Į€XŌî剪+ÎGæsPUÁ‡ÍĪ?SUĄ‰`’0ģŽįį'=JÄuČÉô¨ä“dÖũIŪ3øņP÷C#ÅŅęRiŽ4ČÕĻ8qūāW mã-SJ"ôM¯Ë˛áK¯āxaųĩzŧÔdƒY÷6ˇ‘˛OoŖŅÔ茒VhÍŎtÎkOņíĩČkv fĪûŧ7ū;] Ÿˆ4Ëā;ØËŸāsĩŋī“ƒúV į€4[Žcí¤îbcũxŦˏj¨[mG̀r"¸€įüöĒĩ7ļ„ûČôe” `įņŠ †Ąúג6“âÍ,ūæ7Ø­œÛĘpGOģœ~•e<_ĢØá.LęBŽ. Ī?øįõĨėû1ķ÷GĒį•ÛŒ‘Šķ›?ˆR˛¨’Ö)3Å\Œcđ#õ­ĢoZĖmn÷ØU˙@súRt䆤™Ö “Ķ?…*ˇPsëX1x¯JwÃܘ[ŌhŲ?˜­5iđĐÜE(õGĻÍčŧ>éî+Č~)/üTļŋõæŋú1ëքĒyŧ‡âŠÄևōäŋú2JēkRdzJĮē"Iä ‘X*ҝ–H$(yŒJŪyV˛’B€¤gų­rž|°É‹˜š(IÆ@Ī‹N÷7OK¤V]:=„œûöĒKš<ÄėŋßF›>ĢeqhÜ!|ŽĐÉĄ9‹su•‰éUęmF*R'‰v_ŊYOš5ĪĨTŽ\ĢŠëŌŦ8Ā'œq[Xīŋb+“…"°ĩē2Žėy,sšĮÔ°9ÎĨ&¤•ĩ2tûá Ím#`g(Hũ+Š´”d}ßĘŧûS&pępAĪZéô-DĪƒ#nô§(ésĮž’ąÚ[Č õzÕ}ÉSøV5´§hÁl}*ęL§#-éŒV xHŠr­9nú÷Ēc|„ā9ÉQ­ÄBR*Ģ ˇ4އcQe ~ę)úPØe`  ú C´b@ŦPô*3üŠÄ¸^Q‰ö\,JNĐ8ābŠ8ûžįj2dî8ú­3͝Š!ø"‹…‹K€O֌21õÅWO0ƒûš=zTčŗc+ žøĸč,<ß• $įŌnüŗ|žÔķĄIe*1Ū‹€™l|ăę)šÎH9§yGhõ<ņœĶLMÎN=ŠšWCîĮ'ęiÜüŗP–T8Ū ôÁÍHY†’>íŠwX€@ã“ë֓å^kÍj„ŧ´OLČĩ ęšdcįÕŦ=eQũhÔWE€rr6cņĨ-Īo|V|ž#Đ!_ŸÄv}u?ÖĒËãŖ ë–ŪÄ0#ôÍ;K°]w6‹6Ö#c—$ͰT^xęqX§ÆŪ_ŋŽ ˙u˙Jūī ČÅbÔæ˜Î!|~ĸŽIv4{|÷?•5Æū|w+›oø}3û˓ūė?âjģ|DĐü°ß?üGūÍO’]ƒ™a$ˇˆīšc>Đsž=덉Z:ũÍ:螜˛ęjņ6Đ|ąé÷§üIŖŲΰsĮšØ–PJād œškHį€įÁ]üIx‘¤J€cĻéKAYkņ'VšGÅžŸíō1ūmTŠM‰Î'¤=ČČÁlUioPÜÛĄ` H1ĪqĪô¯,šņŽŠ3ú‚Ļ;DŠ?P3Yo¯ČgIšæg•UÉ$ƒøÕ}^Oq{T{Ā}ĘF*ôĪįÚŧįJø˜Š+čģyĒę+ްņ6—¨°]&üō¤āÂĨĶ”wCSLÚ]û80ôŠã=Ē%•†>ĢRĢ€yƨŠ(˜*ã8 Њd–ņL0ņŠž Ÿæ)Āķց™øcHš'˰€“ß`ĪéYŗü?Ō&$ĮįBz‚’ž?šę”ķę=ŠAįˇ~(Rk¨šGŸÉđūōŅ÷Xk¯pŦŋāk> ø†&gĘãܨVüČĪë^ĸsõ5Î@üEW´‘<ˆōŠĮ‰ėÔ°šŒ ÛĖĮŽün?ĘšOß^Ūę=ĖWÂE„.%<ãs>^œ×Ŋ:¨^"ŧŖâb(ņļBäŲŠ˙ĮŪĩ…E}ˆœlwPož™%$,j~D÷õ>Ļ­_i‘ę‘,S…Æ7:ƒEƒ:˜|=icڊŌî9íŪ­˜ą´qōŠ(­VĮ^á#XI¸$‘ëTî]Úô’xQĀĸŠgI!/ˇ¨ŽV•ÔtĸФDö9MWw‘#ƒČą­õ]BÜ~æîDú(­cąãâ>3Gūŋ$`.¯r^—ūß„ ũŗv>’(Ģå]ŒĘ÷,ņÔ-úÅëÆzИāÕšā&DōO 9ĸŠ,ŦfihúŪ¯ewåZę—p+Yc™€8ôÍt'\ņ€­^Ã2ž´QPŌ)šĮˆTdk7X=GœÕ,w~!—r˙mŨŒ ņpâŠ*l‹ģ#]KÄ/ŸøžŪŒĶÃ˙Ú:˙ ëˇĮ˙ĮË˙Qd!ą6Ģw(ŽM^ņ‰8;§r?sšíũާwiöû’"â%faŦFzŅEZ%‰õË ō_]ž;øĶŪiĻBZY>ößžzQE!•ĸ&7r™‡BƖyŠ*€‡ÉũčcŽO5iÂėĪ–:zš( ŗ;„Š5Ãŧ‚OZ(Ē í‰NlS`VˇrĪ=xĸŠ@NŌ¸',N*<„‘¸ŅE!‘Ë;FOĖÅžŧTæbÖ7įEHLišFgb>´…Ž9$ū4QLC3KEj7T€‚€‘ĐÔ*íŋx$6s‘E 74ßk:d‚$š3 ˙–rō?>ĩØčŋÔĢÅ´€“•ƒéE•HGąŧ§yį˜höëVĄfp=}hĸ¸Ë!Y9m§éR,YBsÎ1֊*@"̟—&ĸ*Bäã=84Q@†22Š‚y7ÄŪĩ.Čãw#Œbš9 ŒcĨ##TČáqĶ“øT°FĖģĪ=ņԘ1TŽFAäœāR)Y˛pžâĸt—… ¤pxü*Ôi€Ūũ3“T™,¤ņĸ‚Qq““ÆjE äŊYhs'Ë´7Ļj=Ĩd“œNėĀҏ œwúS JքĮ"÷Ëf­ųčxlž‚‘āE€ éØg­ ādC"I;Fōå“tõĻŨœõ"Ž˙gA’[7Ĩ%ÄÆŠĮnXãŊ4&g) ĩ”gûŨj™•ą€A5[,S“Œ8/÷ĢQÂTĸ9ëšwEu‘Kē•$QÆ)˛ģE"m Š#Šą*‰6íÁ:ŌGœĨĪ ņíū4\vđŖ¤AJT#1@Ąˆô¤å ,¸wŨķ=2yŠŲ”M°ĨW${wDh§nIÆIĀšģ @‘¸p9īP$¤“”ĘķøžÕvs?Ū~œķÁĨ{dO ¸láŽG@>•ÍĢáŗŧáĒhĨâEč%‰ŠˆÜ‡į'=yūUD™-Ē”TąëŪŽGm”8?1^ SdÂģĪĀ-ą™ÕFÕEÆ}é §uI”‘ŒãņŽwÄë…aĘDˑƒÎCčkŦ¸FÜ_Ž{×ņ&0šeģw2ŸlūĩU5y"fít3H…‡lÅC ķ4û] Ļp âŽ8&2ī˙ŊT"ûVA.Ä᜜Ž•…Í,k.֐Ą^CīMû9ėہį9ĸØ1ˆą~[Ą˙ëTˇRyj~f GCŪ†ô™NæāETį ßüæ›a&|ΚBŲúķš"ŗûSŗ¸ã<8­d‡ 9 ZŽ„ļVČŋ)>ÜTjШΐ*ûFĸ"ģxü:Ą%ŗ1ʅÜp2s“íIĀjCYˆÃ*ƒ‘õĸXø.6‡Āät§x—9$õ4Æ˜ĒŠ1ōz߅G+-41ĶĖ*žŦĮû˜ĘdņÉ÷ĒrLîÆŦ?˜ŠLdų€É{4ėÂčļŠdR]vœôĪQŌĨEĮČœņTšIŦaˆ'ž?­JÂ@¸,N÷4Ōdģ™lŠägü*Š•ŪMž[nč9éīR´R.ĐqOØˍp‡8ôĒĩ÷\´Š…ÜØÎ1UEܒˇī!“Ž?ĪĻŅŦy#ÜÔR÷†ĮŊ+ 2žåh˛Ôu#ˇ?.íë‘ČČöĢ”å#mĮĄ¸׉q¸ŽæĮ̓ëLe”:îįøąęjY!`„nĮLāԉ:†T¸'ŋŊV¸;§ķAä|ŧuŠ(|y.Ú§[8¤ũā$Ŗ+ûPK’ĖĖ8OãSųVĖ Č•ƒĄĻŅĮ˙_Šģ=ČŋAąÄËĢ\G#|ĸ4< úã5<֎H!ʰŒ Û>ÔÛ3ÃæŖff I¸œäˇŌϚ\G¸ā{õĻŇŲ@ šÉ=3ŠŊ+؟^MR´ˆė/œį“Ō¯G„ÛמĀЁ’,I´’'§ž)Âl€äc8íCnr§ū”åŨ] íĮAĐUS”,eXŽéÛĨļ Āl#G&¤¸Q¸7ˑØôčļWĻzŌ{Œo“ĩÉÁËwšâ>%DĮBŽLũÉTŸåũkž—q‹mÁwŽ3Įb#Ŗ°“%|Å^ŋZ¸i$Lĩ‰Šw˙Ĩ!uiÁĀÚķž§5ÍŲęwĶjÎ-6M,čʁÁYÚĮ$āķŽŨë¤HCC8¨SMĢwd‰CļâH$Ôd1ųōTeXr Z€šųŊų¨Ú8÷t;ēg8&–ƒ+#MË‚NpA$TdžđÁeå˛Ļ´Q6¨9'šԐ3Ā襥ÜΒDxĀōØrsōįņĒR¸ōÔy2üŧ‚cnJÚu9Æų¸8ÅE$AĘ`ōŊ=č˛ ŗk;{¤O>Ø1rƒ<ÕĨgŽ1ˆŸj㝧Šļ‰#LėÍōmßßõÅZ@v‚3OČ.÷0Ŗ—kJî&Ō1 ĢuėG€R›­íķ ™Cu>Î}:Vŧ0ƒy d¯AĮųíRŦj §ßž„”­īS*&#ĶČon•wí1ŋĘ÷ũŌšũ*xĶf8ëĮ§âƒ;ˆúœ~´\cEʘ’Ëß!jI&o$É#`0MC!ų”îõúՔĄ+ËcJ. „ũH9RsDr*žäV ãh>˜č”4¤“œ(”Íō˛ČøÃō3ĶŽ•Čxņ“û64Dāʤz]篞\OČqÎxč+‰ņډ`€oßëTÁ+čnEĩļĄÉÁ#Ž•1p 0FČāwĨĩW“•/žĄxĒך…­–ZęC“Œí$g¯QXÛ[äąļų¸Sõ5}x+×?ŊĨ*ŧrĨOĸ1üđ*xüAŠō!,OŨŨ*(?‘'ķ§#ėC’5•ŨœųG€r3ÍÕ3ō}Nkmjū?õz[åŽK9|ĸVuߋn`+ZÛ4ŒŠFT{ŗ.)Ēmė.x­Îš.I ÔõĢpšåėüAzmžŌövožLWÁĶqųšŗgâÍ2ūuļ”Ékpį ĘíŨô=įš9s#}d\îČĨ3!=ąPĄ š HĒ:ž§m¤ØIq8f…U<ģzË>Ā”¯ĄWF˜™p§Ž§ÖĢOsrd@Ūė+Ė.õmK[Ŋe‘’DˆC%=:dõũé,\…‘ ÉAęŋLž;ׯG2O ʒ’(*ËÎAW=JN›Ôč§QTZ'‚1ۊw”„ ž}gIy ´j$mƒĸƒÉ8ėSXĶxŪÎ;*+K§ųļī(GįĪéSˇąRj;JÞ8Ļˊc(ŒGZįˆoZxt†0œ)˜\c#ņ¤oŨCk é2Ŗ+~N)ō2\ŅŌģ† Á§áLKœˇnyŽ~é3"$ŌÉ÷dŒāū##ˇ­\‹XĶe9[Û]„÷•Ƈ -Đԓ68ëŧābœĖ ŒzVšî“ú•Žzq l~Uv'YaŠD'šR8újZhĨf_ųL`äcÜTŠ-$Ÿ› Ē<ˆ†w` âŦ[ŗ ­ãT31#Ÿn”Ņ1ųJ\däāwĨBU›’{š”{~=é6ŽxxôĻ"ŧA‹Ę§æÜOˇJã|_ō¸\íÆF?‹?ũzíЅ¸O͒6įŽ•ƒâ{`åÁîO^ôúܖ3†‘~QÜU;„´.7§fĢN žNK ãĒŖģ<ëĩp3ÁŦ¯ŠIĨī€mį>fxÖŧņ˛īR}šW#qjēUĐN/<Å<Ÿ˛ éß8÷¯`PŒdįę*ĮÎÛTãžĩĶō[ęa*IíĄáËq21qswdƒ‰YP tēUŽŠŽØL}™ âAĢ3õÆG8äZëŧWcöŨĀąˇ’į%f Ɂ8Ēz ÛC§ė߲"‘ÄŽ§ 23œƒ“šŅÔŧn‘ ĨfÎEįÕ-„ąÛę7›árAW܌}9ĪĄ÷éL‡TļžŨˇ,P§Ęāųd Nq´:ôސ¤ˇ1Je(áÚi>ōļvã>ũ;ué\ūŖ§¤ââT™RŌ0¸‘ÎßĒ`õ9ĪŊTdžä¸ĩą×xK\oĩɤÉ+\[ˆüÛ+†mŐ`'šīΝJÆøŠČÚĖ6QœEmnf<õfĪo ņ5OÂ0ųšũ­ˇ"ÍŪâY‹sĩ—qÛ“ĶžôīÚ´^&i1•žËƒžęO üęTRĒ7&é—ü?jĢoĒĢČp]°æ<““]°˛…m´qąīō=…yĮ‡õ/%ã|áN0síŠī&ÖėÂ|Ō(!A$5eUJ洚ąam!æˆ0ô|ˇķÍfę%”–wČ,„mę2z~ĻŠŪøēŪĸ‰å HiY”~ bąn|[uĒH–mŗ3Ęøŧs“í‘úÔÆz•)ÂÅŨ"1ĨÍuĩēyqĨĀ‘XyŸy˜ägĻ1ÔÆēíC°ģĶ`ē!™ä^H<lJÆē-mË\Z,ŽļŋfÚ\ŦžZnË„)į>ύøKÅWVÖFËėķ\O)K{ņ×đ­ĨÍ(Ũ.U-MíwÐĮš'|ã ~į:” :ė ŽH+]ϧãk{›Y­Ų ‘H úk„ŧžNō‚jčŠũĸ*¸ô( 9*3čkÕ>]ĩׇRš"ÚVˆ„Gķũ+ĘÁ Éāp=+ĶžBđxzy˜7īŽ¯ĐĖøUb~až2_ęFÂØˆm ÅėŦA•×)Î'ôękIÍ™ãŧ–eŒæA)-쑐ŖųúqÚēŲKrĐ}žRmÉŗfḀšĪlŒ ÆÔĩ;M;DƒKŠf7ąĖá—ŗI9FáŽũ+|6[›Oâģ4ŽtƒmĨÜÜX4‘Ũ#o‰  tŨŽO~•ÄK¯_9 ~‚ęXŸ¤įčvã?‰?Jčĸņ5ÅúÍkefQƒ+ “Ÿ\ĶzãīížĮx†IDā°c°‘ÆsÁ#úqéZŌIԗXšÍŠj:‰GŠÂ`ŧ46Ų#ˇ^Oį]F“āëŨJŌ ‹íBKr~ô?dEuįûĮ5ąāŨ*Ō&+Û;Ģļ†áwųr°Ú§Ą<×MŧôāVU*ŲÚ&°ĨuyVĶlŽÖį2\Îŋqį;ļ{Āđ­sE’NF}ębNáķc8”•ÆãŌ°rosuļŲā÷oOĨY…íĮpܰqÅBîVß Į{TöQƒs ĄĘĮ¯ē­ų™šÉĄ°_ü ”$ƒOqû˛r?,Ķžƒųí÷DĨ@íŽŸŌ¨kHīcœ`šĶE%(6‰OsÉâ›Ē造ācõŖ u3V5!•-œ/8>õM ÄŠnc)ÎĮWŠę+Žøin­Qäĩi?~™PĀ+tÆpy3šāÛÄZFĢp—†ÜaZ/R9ÎsĶ­zW‡4¤°đŨ”Š dß/'ī7Ė"JãĩMÛRÔ$6Ĩäl—Ęā–Lāp:wäņ‚ iNQM§ąR˛}LŊ3Sŗ{ģKy•Ũå9™‘Č*¸āduã?™ėjļĄ¨Û&ļōŲŦbßĮģnzāõ<žŧ‰¤†ÅšIAŨûĮōœî¨Î¯^zX÷š6Ši–öĘh"^7H¸æē" ŨĶ1“•­cŖđžŸ+j1jÛUm­ä(žQ¤bŋtŒäqõâēo[ØøƒÃ‡QŗēFžÉLȤŒí#æR3øqī\‹âk­(ÃØĨ€JĸaŒ‘÷N}?Q]6Ÿã .úÄCŦØÄ@VMĒÜ?ˆz88ôĩœá%.nÅÂQåå9+8ŽDŠFH`|ąŋ88;×C6‘s{a$ņØĸ:ũīąŗm~FPŠ$†ôõĒ2éņC%Íí„įû?ĪAČå‡MÜōéÍu:6ŖaĄũą//mX9 îgųœļėwÉĮåNr{ „VĖ‚hīn5A]KhGKxáBŽB;ũږÃÃˇÂîy "!t‘ŦޏûÛŽÎ˙ĀŠē‡ˆt‡Ŋ˛š p’ŲČĖČ!9`ÃĄ=ēįü)˛|C´v[9i”sųûVv›Ųx'ĢÃJoŋ[ėhäUۂ ŠVú…™ĢCAŧĶlfHĨ{[Tžyä°W•w,gˇqīYļŪ<ļŽōâāÛF%Ÿo™ûÕÁÚ09Īzž/‰ĶÆđ]Zb7RŦVeΧËS°¯į9ĨŨÜh0jWIŸ0坋6ߛxo`T`˙ĩ\ņ%Ņ–DObŧcük¸¸ņ…ščPhÖĸâs°GķÆ­æcŋŋ˙Z¸‡ČyY™UËSv?åí[ĶŋSĨĐlq4æ5P}Ōí÷F{ŸAĪZõ;ŨcNđV‹i§Æ Õ§Ëc-Üą='üâŧîÎÎÚŪk;íU'—O‘€‡1”ũĖ’1īúS${ЧŸWuĖ‚@mĘ̜íčãč)TŠ›WØp›‚ēÜë­|KŦęĘI,qÅ DnŠ>û) <–į•§oŖk‘[Ms ’Ų@rĘĮŽĮ'†< é< Ļh×ûîvģŪD6Ém3U˙iF2G^Ŋ+YMEsÆZžvžĶ <Ŧ[)ŗ| ĪâMk'ĀŗÖ¸Koi¯ËmĒ[‰íî1,WŒMl1ÎĶčĪūœß´Õnŧ6mŖÔ§7ú,ø_ãz =Ŋú×#ƒzJihv9ÚsÛŋ41ũŪŨ¤ cJŖžô*ĘĀm äcڂB“Ø• ]†ČÆÔ5­¯DęŸkŊ¸.Რ ž˜įõ'Ž+Íd›í÷.ĖĄˇ0Č,ãšúšÚņĢū”ö6N\#H8g rĮū“\īČ´ra‡aœ{WŖJ6W8ĒJîĮugã+m#Č6÷aŖ@‘Göƒåž1÷†=šöĒ‹âûÉeˇ‚8–ŌÛr…d˛cޏ ‚sšĀĶtëíQÉ´VXáųäÎ5úôėzSä†ãÚ Žá†ķÜ:€Īâ}i{8]ŽŖö’jũXŊ°]fŪ;›ãI ¤Žy÷˙õVŠĻÔ#ЍžĨhdlįí6įä8Ũ<ƒĪŌ¨økÄVõ-$°ČFo, úã¯ëøW C$wļųŠtxØ`˛üÕÎīMęnššĐđt ėxîŋ5jĪIÔod† K+™_ģ„`=sĶg5ęš_4ûM`ęWr-Ú( $įņÅnŪëÖ6i",Š,‹ÆÕ=ķųVō¯ü¨ÅQîyũ‡ƒåŅw6ž‰%ŒĢ’`fcõįō#đÍUž×ü7gtŌYhčėģLR´Äm “9īŽ;÷Æ)ū(ņÅÅû=ŧJŠČlGâk•Ķ4{í^vÖæmŋyūėqv<įN1oŪ¨’^ė 0čZļļZņáHĸ•˛×Sá$ōũUŌižŌ†/īīTČbY|š•ˆV œ8uĮ^ z׏Oo„BÎG<ûV™rRU `qÎ;¸Č¯YŌu85"Úöų$Lí_ánę}ÁČŽjąˇŧtS•ô$¸Cļ2rqŅsÖ­Z$ßhá~lgJ‚`C 1ÁęjũŦy!€Îã’?ĪŌą5-(˙ž„dgŊK†RŲ¨äF vøTĐ+ôn˜ ˆ-­Ŗæ*ƒ,Ė[Iūĩ ˆr6øÔ¨ŧˆGRqŸqž?:|QŗDp7xĮKa6s’a”ÛŋųÅq:îĄ:|÷ šŸ1Z!čTņŸĻ7ø+ĸņ& 4ũ*v$&TŒƒĐzį×°÷"š}#CēÕæūĐÕá1AåāˇÉ)õî:Į­Ō^ķØ™6ũÔpđé–ĩžÚ nuˆl\&qÜį?3]ž™đōÎaūŌ•eTFy~Q¸ã'wpĮæk¯†Ú;HRcHâR6Ē >•—ŦÎnnmô˜ČÄØ’āöįāGôÖĩuĨ-ˆ…J1ÕęIMJ"Æ$ƒLLbAúÜŠŊņÔõôī\oŽlüØ4ûŗn|éA&:㏧JôInDđ"§’8qč1ôŠŽmí/ ÛqƊr÷8÷Ŧá>Y\šCš6<'û-ĸ´7&F—Ą^ų&­é~,Õ4Éwų î ņúWE¨G¯pCqm§ÛƒņėPGoŽk‹ŊdY`R…°1Žßūēî‹SŌG#\窍縃q Cr%œ$Jxã'5ĪŪk×7V8D ĀdĢœ*ė<1á›m/LmkV‰$ršHېI펕˜mė.&Ÿ\Ô-Ņ,Ą„0ĸâNČ÷GsQß*)ÆmjĖŨ/HˇŠŲuMeä†ÎCû‹hÉ]7ļy ī]m•æŽĢƖV€EŦ?* ë–=ũ}{úÖE„Ņ]ÜIâLs˛ÖŨ8āužƒĻzuú?^ŸÅÃEąĩšs!k‰3ûÃp1Âî'Ī&ĻnOäTRG1y$ŊÔŽ.m#ˆ<đ>cÎĀVŖøm„jB’ ƒ×āGŽí%šŽ4.!AᏭtz†ĸ¯Ü’¸¸DY ”$d¯PHíĮ”î§diœnĖ;ŋ ´q—[V.ØĘØįØķéŠÁūŪķ,–-VØji#g‘$GĄ)'ˇųÅt—$ēk1ąYZ+Q%ØānČ\…‘÷8#ëŌš Ũ>uŨ’X•Xn#c&ŨĘömīŽkXkņËM='Ã:õÔf–kÍ&O•dVdh=$ ČúĶ|OāÉt…7Ö2 ­X“ĩ˛üÆ˛tģë­á$ĩgIat[˛˛ęGlgßiWІ›4–ļāĮ ī~?xÜ˙úĢŞ“GžyíËųN1‘‚ ũsXúM€Ôu­ˆŋņƒøfļRMst2qiÛŠ%ļ—6§{a4Ο~%8öõ­ËORĐȒųNš¤ãĻ;v­ß Ā–›Yē\A/!|ČōŽäĢt={WCŠDŅ[,čė)‡ī˙_ūĩsδšŦŽˆŌ‹Wgeâ Ŋāh~+ˇYĒ’:† CĶ‘ĶžŖ§âŋC¨Ų5îJWÍhaû“ī/ûXôëIâvˇņ&tҜÍdTąĀĮĖ=}ŗú§đĪ[˜´ú,ŌX”Ë=†FWõĪįCnÜņŅ­Đi~Ilö9 FįFxEÄ"âĘC–‚EČ8ʰįŖ̓]w€ŽŸ¯Mg ۝6ō#5˛:įqF…€\WqŠhÖ:ՋÚ]Æ –Ū ­ŧ­qēū/‡o—RĶS62Ė€t‚n˜8ūÉ2=(ö‘¨­ŗbönũB˜į Gĩ]ĩÕÁp?ĨeA¨[ę:\wP1hŨ3ķ =Áô ņøV…‘.KrÆ>˜ŽGĄŌĩ5‰SåÛëÍO|ØáˆįƒT —kí ¯ĸķ=쿈ģƒV$ˆüōœúšHÁāŽzãĩBŒŌƒŗnx ãš’ÜžĐW9=kHÎ6öĘ ëČd¸VŗĘ„äõĮr*Bؐ(ČĮJäHĘ Į¯`:Ö~ ^bļvōō;W×˙­ßšĮVėZĶQUŽYˆ úŲw$gčÛHŦÄŋ–ŲīõIm Į•&E2…(ÁavAŒbē%EjcJ[„úËIk$Q rįæ*xĶ߯ëSøOA]g]†)šŋy.O TēΙ‚ēF¸qĪžMjøcSĩđū˜čbž[ˑûÆpžƒ“Ö´”­tÍ+ËŪ4ŧK1Ö5{mÉĀÅĮD|Íø ×=Ŧ§ÛÔIh´Ë\[Ų(Õū§úâ´a…Å­ĖûYnu6Ņú¤ ƒ#qĶ'åĒēä…fˇ˛‰BĶ|€ö' ˙žyįûÆŗ†$\ĩ՘F5„1%˜…|ÄáqĮ5čßôŋŗčo|ã^ļWŽDcÛšÉú^u-­Ôö¯s2=ē°P0Ĩ‰Æ<ųšÛžņ~§qn,íŠX["Ō8sģ` Ũ}:bŽqrVBƒQwg}â Ulm¤‚CßĖģ-āC™ˆā…ņ×đŽךĩÂ#܄ŗŒãmÍų/­?ĀmrįQpIˇ‡~Ivî:ôƒ!ūøÎ; ÁˇMōÄÕ/hŽÎßÂRAöĨļŧ™o-ĘK]§+€zõZÚæ?ˇBÖÂ&ŋ„I jÅŧ…‰-°‘•aÎAã¯Nė4ÛĩēÕõQDņÄįH\ŸįúU}oL´žŗâf!ˆmܝJœPĻīi“MKSĐguŒŖËc WßÄîÆwučs׌āál´ ŅĨĨÆĢcļ?,,;,A\(o`NyĢē5›‹Ĩ–idŅáķäŪcSОúgŠ6ŋ¨ÜÉĻ´]ŧr*ÜŽŒŖ—Üg§OƝ™ß•Ę­sŌä‰ĩIŦ.,Ņ•ÉmÄįcÎ3Đc>ũ*ցymm}qĸ\’–wŌmC|Š8ØŪĮ#ž;fąŦŽ…ļ¨ŽXGŊŠ18*N =GˇŌ¤Õ`û%ûâ3 Iöų€m,Nqôükgģ'esĶŦĸZŅį͝÷5íĢĨÜ ŲŊÁ厖ōéŗÂ\Å4mō˛žœ×ruÁ§›?§ŸzęũSp9'“Uˤi$ŌF€ģ1ĀŠ“ŒŽ‹˛qw<*÷JŋŅn\C-ŧđŽ Æ{Öĩ´˙jöà0NÉ2ŸnFZßņo‰ŒörX=Œqß0qĀ#‚>^9úÔđ…ŽŠĻCĒéŗķSy„˙ ~ĸŊtâDqōŲÚNĢũĩâë#=ŊŽP‹”ËŸŠ>ŧũ+Ķo}ŗ3>\g5äēbxÆŲnĐģąÆs^‘â E­tG™ ļáÁíƒŌąĢy[cZoGsĪüSyī3ûĀŦGeΝŌω#°ļ{¯˛üË…ļ† āo>ŊxĀŽkS”\JK’ úž+ĸđϝ,ŊĩÄAâĩ zķœė(ĮŽJķí[J-CC$Ķ‘Ŗ¨jvē^Ą‰_|v‘ˆPc—eåâŲįé[zg…Ą¸”ęšģ}ĸy˙z-˜abûÄ9âŧ÷IõŸZ¤äŋ›.éIūčä˙*öxöŽG^ũ3XÕ÷‘­?{Vq>;ŧDŽĪNÆĒeen?…Fü ôŽrĘõæē-rxĸņtčsˆ÷…] “Đr ˙ˇqá ]#F¸ŊÔæķĻEų"ˆm]Į“Õš#Đ{UÁÆIîD““mŧ?ŠXøÃAîĨQqtLÆ%;ŸiāqÛ Û­Wŋņíãâ=6Ú8ķĀiö$û§zæŨ Œqķ~ƒ˙]ixnÉo|Qc]ŅŦžiČĀųAaîyķ§ÉܞĄĪ-"ŽžÆŌ ųs%üōS #œœãŽŸ;Wąž¸ģš†ÎyFØYÄĖU!įFqÅc]čz­Ņĩ‡Y–Imf’åá”,i 9ŽIÂ{ģ]2ÖiBĀŅË3š žĮ`Aõ<˙UaEÄÍo%€ „ā)ÚO_LŸN•čĢĸĮޤ#ˇ{›k¤@Š<›[>]¸R}1žxĘ^j^{X­.t‹¨äˇŒF’Į$aÔۉüEi '˛"i­ĘÚ¯…cšĶÖ˙L’9Ũ 2FĢ÷‡8čFIąTīŽ4{Ģxüĩž˛ÔvĒHŗtb;Ģc9ãž:ÖׇZÍnŲteԊG&ûĮŧ1ā÷^įœ~?„?#°Šę‚Žbšmŧqô\dų”Y .W$3ÃųÕôëũ-ī/ &2|Հč+V2ڀP.ĪŽkoÚĸÚ-ŧđBSėR¤’ɑ߃RF~˜ĻøĻÜXxžîŨÎ`ķC¨Ā+|ßĻJ¸é&‰–ąLę<9ā‹mCEKģŲf”nB `/jæ|Má˙ė čš6ķ!nN{JôOk“éöļ¨Ã#„Ŋ€OōÅ`üLxŅlĢ ą.GĪãX͜ŊĨ™ŦãKŖÎ˜1cÉ qÁāUwûüĪQWc9¸u-§3UHŨsĀg8Īé]ˆåf–ámc\e[;7“q +üÃ5ėđÚøgIkinōČūd„ (< ĘŧŗÃž6Ôŧ;ĮŽ{2Ûŧ‰2$˙ ?•{e…Ô:žŸonĘŅ\ ‘NOΊãÄšėö:¨(nˇPžaF6õôæ¯é€1}Ŋ›ŒoūŊVš,8qŒœzŅĶų†0zū•ĮĐéšrõ#œķÉŠvU °0äî9Ĩ(Ęŋ\ŌĄ*Hfz ‚*9!†[†Į(mÂ$ūųã848Vŗ—¨Ü=…Bŗ—*Āéœ‘ŌŠ5rZĐįåųT†5ˇ1}‚į‚[ÎĩbyŨåHUI÷Áë[_õ§K7°—yf! đ;‘øg­RņæīėûUĪ sÛÕŗũkÃ&éŒĢh_tRÚŧn߄ũÚômÍKSžZƒüaqpu÷–hžŪHōP7\Á¸¨¯õ[į­Y= ŦYû„ŒíĒÚËŨŨø‰Öø;zÆĀũqßë[6…­ĩĻ}ĨVP:Ûi/v$ģęÎ~XŖ–Ę~G™zķČ­M!ŒÖ&(ŠÜ} Ë~ŸĘŗėåŽxF@hČëč3Zp[Ë/‚Ŧ …s%Õķ?NʘÉ?SU'Ĩ…îZđXŠ ››ë—TŠĒˇ–ũjęž3¸ģqi¤#Fí0ų؞8ôīīôŽ-`ōϚ ėņÆägļz]„ŦÚķÄö{ŖÄpˇ™÷OFF?ĩœãš2Ŗ'nTzUĩ’XY%Ŧ1íD äú“×5ËxęėE• ÎėŌ°́ųäūUŲÜÜ[YÚ=Ũä‘Å ŽYäŠöĮ/jĢ]oM\G‡p§’Ä}ĐNxũ+–žšGDõ\¨áæUv•gl€>qžÄŽČéÖ´ô7]ŽāÍËXĘĘSɡ‹Í™ã¨č‡â ÖĖPYÅĒĖ“ÄÖqÛHĘ°Æ…<¨F˜‡øˇg,ã$ zæēCEĶŽôŅļļ„ē"@#œį ũH­åVÚFõ9-*-^ĮRģĩĩžũ¤‘’™ü§v`ĖŖ;›§ĐÔúÅū­wYܨl:;#hĻ1ŧBĘüuN•‘jtYŧB!ŸS“ėĶ+œWsnã%GĘ1ęŨZčēfĸ4 íqf7L$•ÛÆI 1ˇđÅLŨšl¨ĢĢYĢęōI# yį[U Eĩžę€čp+j‡÷ŸfûfЍ$0*eXFö ÔķĶ8úÖ^ž-ežeŨĨÚ|đë‚sģˆā¸į'§ãšŅđæģx×zUíÃ\YŊ´€‡Ë2ŊCsŸĄ8­Ÿ2ãĄ’ŗ•¤uĐĮgāũÅi }ļaŋÉff#gžæsŽĩČ^h6ë Ô|IŠËÔ˙9ˇwÉߨû~ĩˇiŊö/´Aœ)+'—}4 ›@, Ž9#<ö§Ž™Ļč„j2ŊũųÜ!’˜Ī!RØúô=šEōŊõ4jčķĢéļ\&{‘ŽVVÁĮaŽ•ŗãk„Đ¯Čųî,_ßCƒüÅ6ÖČ^yڝØGw”¨u‡Ū$c˜ĮwW„IáŨv C%š9ė͸Vî^ō2åvfĐŅF‰āû[ø&Uŧļa9į!ų9ŊsøW%Ŧx†ëÄw1ŊĐB–ĘÆ4_â=yĪŌģ/Ü˙Ă8áEBW }qú ķĢxƒ‰I‰ôŠ¤Žšžã¨ėėŠq1Ü2H8ëëMlŠs’ŠŌ@ą'Č ãŸķÍDō wšíĮĐbhxgG:įˆlėHs >éJŒáSíéø×ĐAŦ1ZÛB"‰FÕT\*ÃĨyoÂ[v:žĄtåŽÜ!oB[?û-zˇyf$÷É+ƒ6įnĮ]Ú7 œíeū"~PįšÕĶĶjXuž›÷C{Zv—ÁÁį§5ÍĐč,Č[…t&¤sŪŠŒü¸9>ô1ŨԜžŲÅ=˛aņøŠ/¨ˆËōuÚOŋ ¨ŋ× elgžON*­Äō¤ō¨9ÚØ$œņÍIm3Io$dŒķS˝aōģ\ĖpˆŽ.īLT¸löÎG8Ģ00į¯lqQ ÜÜį+Į4炨ķ.4v“´zŗ ö ™ū•ŖđÚ˛.ä yÍ9Ë@­VņÄEü7¨Čŋv=aIĮlÄūÍYŪÕžČē…ģ›dōcųm¯B×ŖĄÉtĒ™~/Y ņĶȐõ­âĢ´Ô´‹]AGœ7Ē÷ˆūcķŦoĘeŋG'p1ãŸĮôĢ ߁Š,m.ž'R{˜ÔūUĨ´‹"úŗՌV— FxĮ\đ?S]N›0ļđۃĖ šb$ƒčqåŒV.‡ģí4šūŊˆĀŽYâ8=ۑüč̰ söv›ë§^3XâęsĪJé|.nô‹›ÛĢ3Qy ‘D–ÎKą*p8éԚétmBŌhĻš¸$ûô5šĨŪAjnmŗĩ]‘ˇ GųĪãXNĢwē6Œ÷<¯S¸ņĩqö‹:ô Ī—@û#č8äúŸō;˙ŪÛZhVvŌĨșAĩ”˙x¯ Ôf¯ßj6/ĻI/ڕĸs厙AŪO@ĀđyΎZāu}Q­íådŽArā=eÜclc•cƒ‚ įœcŌ‹ûEkX-ČīsgUē“Z× ­´~ZZæŪ"2´’K ŨĀaUNOāzŠuŦ1øŽņŧũīĻÛü‘Dh r—ãY~ŧšëQk…mŨĨUĒTx|´ u˙–j?W|Â)m¤Šužō¤0;N*OôĸK—NÃO›æIŠxFĖÖŨöIĩ@āķžŋAXZ>Ą6›y&‡y)ĒĐūK8ÚsĶ“ČükŽÕoaŗˇv$‰˛ŦaÚFsžJãŋō¯2/6­â– ååšUqÎܰūBĒäÉĸՍmOIŽÃÄi.˛ę-.§v™U™ÂļvķՁĮšę,d$õîk–[c†ÂģÉœĩˇws ŪŽØšIí¤`UŽAëî+Įú<¸Üe_ķÎ´‚˛ą”ŪĻÆĨĻ@"7Kü •*ą@ ët%{äGŽ=đEyN•¨› ø.”ō‡Ÿ÷OôæŊŊ Øø´īųbÔ­˙ĪXû~(ņÚķ_x"ōĶ[šM> öwˇ ¤õ^};{WĄFká}NJąęŒÍmĶĪN…U¸nAã¯#ŪĒxiūŅĻkv‰H<ôBzylÎĻNņģE%i7Ųđ_F˛ŋ—“Âų13ĖX1û„p2FNzãÚē ÷NĩĶg6K=üWŋžŸæä0ū!Œ}ŅĮŋ4žēļ˛ąÎ?‡sųæŦęž›QŧûuĨô‘ÜE*M {°€‚wtîßOzærWåfÉitsw z“˙fB<æ+˛).ˆŸznMܡTãĸõ‘sŠ^Ü1ĶÚ7-*D걀oq9$įÁQë]Eœ—wË­Ãē€p€F€‚9,@ Z5k;8Öâríņ—Eˆ(„)ävÆN â­M'a4ŲÂY\ Iv*WĘ}‡”a˛ Į;°F{€+Ϗ“íŌCOšHoäĀ•IōŌå‡Vč¯ę­ßķŸõö¯KđôÖ~đeŦ÷÷ œĻsžŦ[ÆIÆ8¸Ųü'ĒÁĸMĒ´Ec‹n]‰ ”p=yį¯4ˇgĪšžI¤+€ėsØĀ{+Y%=.f›†ļ.jZĒkׯÖ"ZŠķ›†aœ;hÕ#Ž-'Ãļx;vÍ+Ķæ|úU=16w7[~b_R§âqų֖ē™×ÖĖcĶlŖøč@ËÍĒŦ“˛č-ÕßRž—nÜũ´Üڕ_Ŋ˛•Ā?_zˇã t ä’]5"‚ęÜōą^GAĮBqĀ÷éÍuē‡ôƒátŧ›M‚íä„ĪûÄË9 šę=*{igMžaŖÛŊߔZ5ļfQœN2:ŽÄÖ^Õs\žGcƒņÂEf–ņŸžB !=+šˇˇ7wđÛÆŧœ:}k°ņuŒúf•Ēé‘:A6QõS’p"1T|!eöԑÎĘŗ2ŗ@͍ŦŪÁõ­Ŗ$ĄtfâÜŦw^´XĩÍurYP@œŸf8üą]äQĒ>xL Ÿōk‹đ4r6Ÿ¨ßaņwzĖŽz˛Œ/ŲÜ? ęØ89Ī"ŧú˛÷ÎČ/tŽbN­dF~ėxĮ}ëR Fdn:ū|Vį]ļ]͕Ûy'ĐÖŦ!Ã0bG8äöŦžÆ‹rúĖįåŽ1Ž¸Ģ 1Üy$bĢ.ÕÆæĀĪ4ø‚†ûÜũM L–ˆÎųVV@Ãįb1ĐāãëIsō‰É9Į•bŲH2| FŽĮ=ķšuã,pŲę)X/ŠĘ[Fe¸ģFRWÎ8ČöbTWP\‘ÆÎ*­“Ē]_ōAũÜt§Ü­œáŗŌŠü@ĩEMjÁõ0Éå^[ēÍnäzėFGãX÷WãÄŠ4æĩ+bVkWm¤öp7ČãWK+Ë9' “nĩĀxÖ;mTęT#L¨0Į,T8ô<¨úWE=]ŒgĻĨIô?ëk5„ļkiĖ$f2,}uõâĩŖđo‡ŧ5Ļ‹^mûqšŨ°šĮ ÉŠ,4Š/lĮŲĩũR6=#{–'ŽÜķ\ގá̏$’[›‰Ž]īĖʼnüI>ÕĒ—3åŊŒímmsÄzĻŖ~˛ÛXD…@ˇĢsŠŊáÕĩÖ­üĖy,vĘŧ`ƒōŸĐÖ–Žsŋvŋ_ķũjõœņb ’.üü‡æĮNœzéq÷yL“÷ŽwÚ^ëÉōĻÖv#¨ úŒ~uÕYx‚Â{#Íd’D.ģŖ 6Ōõ šân'ûTV犟šXü‰Ií* úŽüŦØËĒéúEÆ â HVŌCËL\āĖĮä'§מIBû›Š5Ąg[‡û.ÖãWŧžy-ŪôhDd6Ķ“ƒĶbO<ãÜņĖę7f{zŌ¯™r %Ŧ’sˇqûŨ3Ë~@ûã­Ô4K˸4sŠÉ ÄĖ“O4ķ¨.¤ƒą†0@ēz T:ŋ‡|2›äkøíÔ ŽŲ“į€I?/ ƒģž‡ŽŊiÆQV¸¤›9›ī ßKĄC{nQ­Ëī0Åķ4 ŽT3×ßŌ­ømô›ÛTŅuR`›îÃį((XžßRzqŒœ“LƒÎđÅģęvšžŸ}õY!I>w§œāū¯xãI˛m Y 6÷-í¸gŠžkû¯Š)[TsķâUˇē?5œin #îÅ}ŗ´øV÷„õŨ+B´ēš¸-ėÄD–ņFIT_RpI?÷ČĢ~’×OŅīõ™ã†âo&7Fa’^5\˙Ā>ųŽ>æáåv2É#;dåߞyÎ_ūŊ_Åx‹mNžįÆÚÖŠ•évžūŨ˜ęúÔŌ,WDJ–‰ÁGĘŊvã ~uãŋŗi˙c´Ž8TŦ`tÆXžįˇ5tä•ĸˇ&IģļqšļĄĢØYH1eyŗ(ä_™‹Bsų÷Š­nåģŋžķn5ČTļpGåOĶā>¸ēų~ÕĢIöK`G" xŪĀũÚÕ˛ĩŠŪ×ûfî[rŠ$Œ. `šūp8õ­[Ր‘ÔøCT’K{‹ø6ō:ŖŸœņœ|tČíÅM?‡oÃÉ—¯^YZáe=ž@ôúRxÁĄđųĀ/prāŒįØūfąü]ŦËĸΑiW[:įzĄ%}žS•ôã­so6ĸmĸŲ6ˇ¤jļēuŧ'SŽ)ĢŠęĀX0Ãdķųį­qÆĶTÔUŠ; ŽĄēä`ņëí]qM+3Ķzg‡ĨûUģØ9P.Ô˜ˇĖŧŠüø vjëŧ5Ŧ2J–—*c8*ĘäeHęĘŧģL˜ÛJPļ=zŸūŊvw/tņĒėß$#‘Ī´˜ôãŸ˙]sՆϰ–‡O&ģØīuxâI§ŗYā…AĪʧœāđHëjãCx—ĮR!2ĒY ŦĄp€ûdœVķßŲĪáa=¤‘C ¯—$ ÁqŊsĀéÛŽqTū^ZY6Ą§OqåÜO2´1Č1špy_R–+8ûąrKT[Õ¤ö4´ hú|×Rų×"Ũŧĩyۅ!AfÆIíŠį<_âxĩˁenO”¯ƒ˜žqģŠŲÖ5itûË­.ä´v2MæŦģ ?ĖÎŋ6īËÚŗ-nÍŧōÛø[ÃÛ"`\^\)°u`Xđ3Ķéõ§īÍ-E&­daE<÷6qé:j\ÜĀÛŪÍēC‚qįĄ#€~›ZwÃŨbûįœGe 9&s–ĮûŖú‘ZŸ'inĩ§bHvŠL1äŸŪgųtŽÅ:´v: ąĮ'īŽ…>nFGĖ,ū8ĒI)ōÄQŠqæg”Ovö‰=ëũ•¤fĀų<΀ƒĪpOē—ũąâ++I˜‹o—?ķÍy?áøÕi>FleWĄ9 ĨtŪÕ4Ũ ÖōöāI5ėßģŠ8ׅQԖ< ŸŠųki6ĸíššWzžĄ}tÖēlˇ €¤į€+Įu˜¯|A¯Įmķą#ũīËúTš˙Œ¯õŲRŨdöāœ,gõ-Ô÷į§n{x´Ũ$Xö_]ĻÛhØ|ĐAŪCčĖzúëptõ{—))úîî!¸žahûltØMĩŗēqĪī¸äũ+CS›N†xôšÎĘÖ'WiÆ Ž ƒąđ7žOáXRF–6S€TIn‘våŽO x#ĮßÖIŨ™ärI$å˜úæļPŋRŦ{§ˆtCcåi÷öĶy1ũÅl1Û­y7‰5ģÕdžAū/QÛôŦx#s.á‡?áO¸‰ä™T°ũéᙀœž‚•:*œŽ˜JŖ’ąqâ“MĶ‚Ínž%žöÍÄ _L•û^‹đÂæĐæļ@âhf>fâpwr1ũk’k?íy$Œkmq5­še w&0Ŧ|ŒeŽ?–sYÚ&šŠxnøKnpŌÂpCčzŌŠi–åB\’ŋCßPAĐÔb7D.ã֍âĢM~_/N†íŖPL’ŧXU=†sÉ<ô­ųe˜üŒŧÔ…y’‹‹ŗ;bĶWEXSũ-$<ˇ–Āúu~ß-ŧė’2síPF˜n:í$’>ƒúTЏŨ1Ī9įŠ–ô)n\#k~€Öš)UVÉúŪŗb°āƒŽG§lČģŠîÎzQI˜ØÕÍ XeˆÂžzJ™"ƒüXĮ''ķëTæ,e’4<ŠĪÔā`VĒ–…A%ˆ4ÖäKMO>ĩo7Rŋˇ|’Š7Ēôũ*ôqä6O€Æ}ę;X•nõ pwI2Œ…Î@Uū¤Ōj=ž4đîĒXqĶ‚O׀jš÷´z×:֕mnëqyŸu˜ŠŖn+Áųp:Ī'ŋÖ¸›_ŋö]åŗFōÎmŌŪÍú`ë“čpsīŠf̤Ã-ŨÍÄē“ąIsrŅcßģ˙ÎrFŠÜđĻŠĄXčPÛŨ$pŨȟŋßKq’yäGnkĩEF:jss6íąuy¤ž‡rn$gÔgd‘’( ļđ1ÉÆÜg9Į¯•Í]é÷vļöīqČå$€IˇÜ<ŽÕwS’ĢíļÃ[ĘäF Rž+ˆÔ7īŒB]ąsŒŽŊĢh̎rē:G}ĩ•B•wt̞FŒZG’8ČÁĀúÕKČ?tŗÄģŖa‡ >éęŧn`™Į™8%XžFyúw­-}Q7ŗ$Ž?1‘ãdÜXā3mzdūkŠŅõ ėo’6ŒAuÛ˛Oģ"Ÿá?\ûö#Ū”žcûy•|ƒpãũÃ!e 7{îuļq• }åôįĨGiĻĮäšÍõú^\"–ĩO˜æA÷K äôč3ߞ9§iŠM§Ū4;ÛßC!F`1ß>ŖĄät5uáĶuõ/#>Ÿp,?ę¤aܯU=¸ČëÅdîˇØĨcXjL/ Ô5+[?ĩD`’Kņ¸Îå 3‘ČĒzÅõÆŠlŋŲWÜOĒÜy3Ü#íP D€ōrzį=ę…߇ĩ(í%ōSíJĀK$R|ÂyÆHížJ҃PŌc–×ËĩHn cąL[U1ĐrôŦˇZ]™fÕô˙Ü5ŊÜî[X‹c'ĖmŌgōãŌ‰tŲühbÔim4Ô"RŖĖ~~c×$įîÖŠe›YņŧQ4eĖ*Ĩ‚0Ú ļIÎzZ×mtÛÚÅgm$Hą UŠXđ;w?—4œZJKv;ĢÛĄĄqĨhžĶĨŊKq-ĐLFnˆrĪü'S×Ķ5æ—ˇÉpŲ—ÜN]ēŸĀ˙:č5M7QÕ&ēŅĒŪuü…wöTķøcŊ6Ëė:TŖû!ęėĢ}sĖqž‡ōÜûV´ũÕwĢ"zų!š6”#ÔõxŒ“0ŨiĻŠÉcŸŊ'ĸätīVLW—ÚŖ\Î^ęîsŊ‚ާ°˛Đö™š Wšöī}ÅËļ㚤|ã‡OËą§–@—q\Eqßc7˜ËąoŧPî$ãÄ>ašNWw‡[øv oFģa}j/:¨RË' }ĪR8ãŊqqÆM­*Ŧ‹Ã7Ÿ­t1ÛÉö¸^D‡Qu_"*áC\6ÂN:qSéļâÍrK™ÕSO„˜â\|Ą×đĻĨËvŪ€Õė–į7ã(–5o*3ĩÛ°$×Ō¤6’ęw°CodwÚŠŅ@8?‰ŽƒÅZĨ…Ė–Ún˜¨,ŦÉ,cV|`cp3ĪŊfiחéö›ķ...ŖXĄRK¸Œī<pI_ĘŠI¸ŪÖ%¤Žjk^ŸÃHž‹W-.õķ!LĒ6#ŋ8 kžâ/íWžŪ8Ō"û’7MĘŖ°!˛:sZzõõÍŨüÆúYbv ųO2}ŊOjĮY61%8Āޚ—-åĢ&m_CŲ< Ŧꚕ”ąß i#‹ũ\đ´dēʇƒĶ+ĒQ¸e‡lžkČ>L–ū,ģŠšAãûхįŒ÷üëØ|’›gÖŧėL9gĄŲFWޤpKŊšô#=*Ũ¤HcÜCĪ5D0‰É•„kœ 2O~gzĪ-ÂōNIõŽft#V0ŧzÕØ›(6°ĪLYaŠŽ0qė*Ä2Į…%+;(Ũíũė§ûĮįļXą/Ũǐ9<Ž?:†ß†v‘IųžRzôŖWRȧŊiva7ec •y<öĪūNJ{XŽQxÃ(q z0<rŠ*Ëķr;bˆÁ## zŪ…š}.ëO-kt÷3i+—r3cmĖĘí‚ß> ę@äsŌ¸‹xåŸRh„ŗJ™î]°¨ŧîfr09é]Šõ]R¸Ŋ,­t‰†Ü%mę>NrÆsßÉĒ–īĻZ$šl3O{4â˜Ûæ˛ŸõkÆvŲįĻĶí^„.•ÎYYģÚ6”÷wæ Bskeoi|ĩĮ'ĸ“ؐyúRxˇYļš{m3O’ŌÕ6Æā“ūMuž´]_GŋŊģ—ŧĖ €BžšöäcÚ¸-jĀYę÷vâ1#ÜVDa´ņš¨ĩ*šôšŽJ/<‘L Gŗ÷ˆÜ‚sūĢōéķĮb—íd$…°YÁĀ÷ĪĄĪQšžŲ4č4¯"ô`1Ū—š1u€ûĘsۑDvŽŸ¤Isky;éÎÛ>Vxã™Ožã­!#:ÂëėzŊŊÜVØ1š,ˆŲaœƒCԃôŽĢC†Îæō]QîíoeļEf‚â/)ÕO9ųúƒŪ˛-á‹ūmn6ŨöĢiĄ¸IĐüŗ+ cĶŸĮÚ¨Y+Kĩã”Æå åx ‘ĪļÍ).dĮc{^Ö-uIgÔã’aæ"AonB†Ī$’rršíܑRGĻëQm¸‹NŊ–ÂW-åž ƒÔ“Ā };z`Ö=ÂÜĨ†ęÚ)€ Ą—‡vFG  08ÖĩÎώ†ĪKģ¸6ˇ.c¸;žÍČ;¸å<öĮІŦ’CNíÜŅ–Ūdkˆå‰Čũܙ13zín2=ëe$¸Ÿj‹÷q’—Q,Ā÷ˆūĩË@gĩ˜+@(āf‰āˇˇVXÎõF$dŦdņœ'šĩ Ü Ũ6ęú[Õĩ–3”T+L<•Įr?ZÎPŌæ‰ëbÄÚ¤ tŦ–ēŅ2‚—Ųë–`Ę œ’7ĄüOĄ­–Ķ5ųË[ÛŪ$wKhÖ,tîƒ"¸IĨ–ÆÃJx<ŗy4Œî0Ln‚GnJöėŖņȩ́iÖövWq2[Is"æ2OúĀ=ģcĄĒōŨ[ęVPÛFŋÚ3[yŪJ›rC€Ų ‚kÅOĩnčŪŸQ[[ŊZâ6Œ"ėˆB¯^sū­6ŖŦ‰WzDįu)ĩ)"ēŊ°žâ-î6ؓ'¯ËØ7'ĻyŦ[BīĘōUŪ+L|°Ŧ„#ĮN7~5ÔüB‘"ÕbŌ Pļv°.ÕS…Įqos€įX‘xjú}'ûM•EģāB†L´ŦN0īŸĨi G•6D“ģHŸÃZzī›-õäVv0Wv;FONO_§˙Zļ|)ĻÚ7Œī̈́đ}šŪōÍČ9āäwÂî8éŽ5Îęvi6ßa’÷ĪŊ,$’Úb„ãø›ģcĶĨoxCC×'†Kģ-:)åĮ5Ëb5SՂub}OėsJzĻīŖtiX‡Æ:t:ŪM,fyĶĖ”F1°ģcĮlr0;s\ƒÆŅĮ™By‰š ^Ŗ$g¯ĩoKzē^ˇyŦ¯¨´nX31˙Z9˙tœäcĻ+æōãQļ„Ī)Â<Ĩ˙ddˇåÉ­!tŦDŦõ5ü¤ĪŠø¯N’Ū'0A2Ęōv¨\OŽp+Ūv’ß{aÆQÍJ˜ÎĀN20E>$ÚācžJÎڇ6…›>Usœ° įØUørÁh =k6Úqö™„Ņ€”V”mûļ'ŌˇĻrÕŊÎ/吪-ØqÔuĻîųG͞Äâ§C…,Į°Ē÷%ÅŦžBæR°d`ļ8ĨÍzŊ{k¤kŅÛŪéöą C”nx΃€01É#üy‰5 ÃfŌŗŧ­×˜Ķ)U–IAč3¸G#ŨŪøn (˨œČА¤!<á )$’@É<Ÿ­q×z§†&˛ēžņŪ)o—d˛!B×;ᑑGŪE᧎ÍųV~Ú¯mĸPL돛ŽSø;ÄIá­}…á+k:„—kgǎ¸#ņŽÎįÁšNŠrˇú¤ļ!Üx–,ķĘōëëĮj‰O‘ĩ-™Q\É4_˜išBŨÛC¤[Ë ‚$—/+9ÔŽâÁJĀqĐŌą|gĸŲčÖđëZjIdūhŽ_˛ąīČ3Į#žkĢmė–žNąŠEqāIåEåyŠ;9,x=ņŒũ+ņ˙ŠáÕŽ"Ķ,dZĀūcʧåwÆÃ'žäÖ¯)Ģ|ÍghĮS-!Ŋ•fgdÔ ē;˜Ü3Ü āãéÁzĐj"×ė0ézvĮ\p[zžß9G^I‰c}qg'›>^s$mŒ8ü{ņÔ{Wmföķ@.ãehOI~æßb3čGnâļ¨ÜLáfr7v~i ąK•ŒbÖ2XÆĀ ƒŨƒ=EZ¸´â‡¯,Œ,Js’9åņôŽ€ę–:Gî¯nŌh`’׊…˛_€X r8Į§ZëŸ_ŅßGĒŨG%¨`ģÕrCwAúãœęĘ6Đ¸Ķ‹ž§ŸŲÚëSÉåYiJöŪJÆÂé˛xvpÄ!NY¸`ãĩdkö-Ąē1,rîˆ# Œ„¯,>o¯ŊzœڅŒWw7uŧĀ:EŒ SĶ#Ģq×9šĖ5˜­„ ‰-\…VųK+Ķō\S§Qšj…8$Žß0:O0˛Š$lCĢ׏Ĩ{/†5S@´ŧœŠ•Ņƒāā3+ĪãŒū5âžrŦšu''.™#w|˙•tMãŊAŦRÆĘ;]:ŲW`0ƒ¸@I8īĪ_zēôĨ4’&”Ôwã븧ņ능H˛?ŧĪåŌŗ4íJöU˛ą‚æ(VÛ{+\Ššœ“׎+*ęé%›!‰Tč{ąõ5ŅxOŌīIõ Å %ŲCc'ļ:֍(BĖ”ÜĨĄ‰áû˙ŨÍ]E+cŽ1×fĐ€ĪzHŅđŋ;O<ՈP}ōN:SąFMÃˇÛ§PƒnA ŸöEi#ˆė÷`ƒĐã¯ZĒaw1`HŪ_öEYŧũ̓“‚j˜-[ ´ŌF FLlHŽV ’LՒpŋ.…dj×r[YŦVÁMŨĂ2ŋÄAË`2OŌĒ*ėwĐĪÕŪęōę+5ãßŲgirGŨw`äž2čOiÜø7LžÍŸWžæņĐæ3y{GUĀĐsúšn­ŽYøNĀ[DĻYüō?w#%˜õf=kēÖu/ÉpŌj+ogË)Ęü˜ 3ßßĩŲNjëDc)%ęHŗjˇ“\izEÔíĻ åZbåw˛įF@éÜU - R›Qxâ´I <ŌnT/ԇv$Œgž9ĢÖ¨ÖÆ"CĩēŖÄd(ą–QŊĨaČÜßĀŋ1ãîņM–úk‰lHv×1í‰1ũČGË˙}d×BēŅ?2ŲĶė5;‘ũĨŦ_kwIŌ 2"¨ė7ãn>˜ĢŌŨiúxWÂ0c`BúžĄâŖļÆcĀãŠÅj7ĄcšŊ•ŖnjvF>Џ­kĢ3(ĒíD~?ŸÖŗ•–ėĨ~ƒ×ÄŌZ‚aŌt5Ü2Š Ņqø)ūtŲŧIČ"ķÚ\ŠžJH…˙ÕŌŲø:ĘžGfėxL\r+RËÃVĄãûOĖOīŽp Č VNĨ5ĐĶ–]Î ?øDĩ@b–lIę#bČž™ÁČįąR\|9–H~ŅĻ]ÃsB¤a‡øũ1]å‹Á¸CösŽļā!Ô`Wq§xƒÁˇ­q§$×V`á™~rGûj?\îiÆĨū÷’ãüČâĩM;SĶ%0\ZŧDœŽ uÚFĄ‡mKˆ÷ĩ˜X‘¤ŒlĮ;˜0XmĀÉéßĶ^oøjūÍSˇmî–'ˆ°Sõ˙ äõ{ũ"īOšÚßPēšuŦ!  áX‘Ę€ÍŒn•Ērš´ãblŖŦYŖē×ū;ĩÔnüŰeXļ;d/™mũIũj”ÖbãRņ—aģĘōLņB‹€ĖŽqūã7×5vE„x,Ëy dÕaÛå|¤¨EoĶkŒ÷Á9æ“Ã1XYŪ\ęzļŖ _hˆ“l]b,†ÆX‚T€§Ž#ę´IĩĶ@ĩôbø;IņŖeHRßO帔į#?ÂŋÄ=øõÛ7ÃŊ,BZūūō`Ŗ–’`ĒS€Āú“NƒÆšI1ß[„-°bâ%v<°ãéųWĒę ņõÔėö ųŒō‰8Ëļ~sßęsNsmŋuhÅYj?Wiclō꓂w˜ˆXŗéŧņųÖšÆÖLĖN› X[Ē÷ōŒĖ?īŖÉk´Ņ<áyg>ģŖw×lS Î=Åv_đ‰é.l•ÕröbjhAÛV.I=v"Ķ”ÆË  š$ô#ë‚F}ņČ 3ü­ŊÄ7:=äÎn,˛`vÉ {x?‡Zå”ooŧŲ;;s§Í*Ë× Z–*RÜg5•"–`z ­›8WbtĀœįĩsš7ĄmŖG8Á$ņĀÆ?­,i €Į9ÍCåŒįæúŌ’pKõĢF-ÜĪŒŠž|ãN§<|Ŗü*ŋˆ¤#HsāîįŪ— ^ę8ØŽ[Áp*†Ŋē?:;nueÜĀã'#ˇj˜ËĄŖZĸ"ŽaÁ$¸Îz åî'WņíÛĘĸ-2Ôĸäā+°Ü͞ß.ßÖēYT.Â\g¯5ņ؇AÔ#ŒŸ2úúDãDb J֔nÅ'dpūĢ&Š|Į,"Rv†<ŒõüOđĢ]”‘ŧkĢž Č˙V€ãĖĮsÁ =‰ôĒm„×ú•­˛aZiUgî’zūšéôųTŪ_ę1ļČā‰å…GhŌ<Ä? ^ŒšŠ˛9VŽėšT†IŽŸahÅąČšNŽįלøžĻĒhZwÛ.Á’om0ûJ­ģvŨŧũÜã9č*Ū—m [(‘äDŽ&‘Ü1VÄįč iiPx_ĘH$Ôo°%FōÔĘ0ėr7psīߎĩ”ĨdŅi\~‰ĨÍuĢžq|ņ=–^I#a‹¤ĪTŒ2uÁãŋ^6ĶŖšĩĶ­îîšgŠ8å_-ÎŌqĶ<ãÔUļ‹ÂËgĨ0šåbfac2Op g?6§ß­]Į†üG¨[“y3ŪŖ2Â"šš"Ŧ îÆąœ÷ÅcĖų”ĩ4˛ĩŒĢëité1Ôī4íkL†Ææũ–â)Ė–ÖE7’ŠO*Hęryāt§Í§xDŪÛÅ&Ąr×"mĐČ×ĶōũߕËa˜tāätĢļūĐnÜ^Iwk3ĢH/Ĩ.ŽQCÛŗ÷p>•<ŅM7ųV6kÛÉõëm5Y•-íy§@‚YØ0P¤‘€A8ät§ÅĻ]ß'ŲĻÖ.­äŗBDn⌠r¸č:úđk>î "k{XĶLÔf´ŠčÅŖĮĪŒûXīßæ¸N;w§ŲjūNģŗ‚ōA +ŧß,ÂCƒķ’ßx‘ÆyÍCŋOČĨnĻ­ŋ—á 7[ģŊžio PÜIpD‹ŧĒ Ã‚#ņŠŧOĸĮĨb[).¸†pČŌ(R&q"9É^T3‚ mXĪá‘Ĩ˙eÛ;Khņ4‹Š3îŒ Ēų$wĀĒQIāÉ,cķRÕā,YåO•ß „õíĶ5jOšöb˛ąGÃz{jˇÖ–z„3ĩĒiņÜŧ7sųŠ+2€ū>pF{Ž+WHÔVÕu>čH`t3X&ȗtgc`qōŖ>Zēëá+(m-žæ|%›4$× Æ‚q"žWÆxãĨ2Yŧ,ėgmÆŨ-ūĪnäNBBĮhŨč§ fāãƒÅSwÖĖ•ęTđĻĄā› oĻ–ioAŌLۋdđ9 ÛŪ§øwf°ÜÍ$Ō›—pVyK¨U‘€Ā<:úĶāŌŧ%ǚ|6–âíÕP+ãîĀ1ųs‚xëEˇöE­ÎŖáĪėao VßkØŌ.TĒķĮ#đŦäŽĨ-,s:eĩéđU…ÄVVka}%ÛÍæ9Xåf!APŧ€GŪé[lđßx–öhnožĮ>‚/cˆŨJlj ģíŌ ´ŸÁ˛ZÁ Ú|Öž~v؟:@r7ĩr§ŽHíÎjõÅ׃'šžib–G貲Ãqĩb#*hĀ^=€Á­ödÛC#@{ĢXü?uqöČmoĸXŽ'’õĨY¤tĘaIĘää};Ö¯†ŦíßMÔfÔonĻī&ļVžęFڂB‹Œž§#ži|#ĻK2yn†Î8ĖSēG Ą×‚1Î2žū•)ļđ¤đ[Įjáļ ¨Æ'،‚“ÆwלãŊLĨ~ŒiXæŦ-!:F–ōÍ8üöōĪ%Ò ›~]ÅTp8ę* Ë!cŠI¤wSF`2Ës##nu<îÜ{Žy‰í­G„ãĶ.,#‚3oæm–ŌXdf/÷€ÃvO^ŊeĒi2Ŧ‡Gˆ"Ģm’ÜFŅHņĩƒŲ#šč =MhĒ;ŪĸœuΚļwMawōXŨ°ü˛~ĖqÛ'ŸNŧtŦ‰Vé^{[™¤U: ŖN>ludõ=ŗé]W‰6ûf>`n ä>€āāvFö f´ŌõÔĻ–FÛō´‘Œŗ3ë“ZÆZjfŅRÎgŌoŨ`6ŌH÷ĪF\d¨÷‘Ķ<úŠš-]lE:|˜`a@?ČTtģĪŗOKdØíØ;[‚?"kFÎ_ŗŨÛI*–ÔÁ1Q÷•SĮ|ķúWl¯sjiR!—ØmōUxlū­˙\ĄÔ5Į¸´šōæXĻÛģˇv@ `‘ōã{tŽ_G”؈[˜ ŽF<î*rļp}Iük¯đíę[NVAōˇŪ ØũOįÚ°ŠÔŌ,ÄļļžƒÃ^2K¨Ę ē‚GŗK| ‡æÉ ž;dķVl ä:ÈĩM÷73ĨŦ i"¤fGÂĘn‚s“œ~UߊÖ6šÆŪEqúÜ÷ąøļ 8nĩŗĪk$­ ĸĮŧ*—ßž}+57&ՊqHmž bđíĩĨŪ…¨5Μą)-ÜĻäĀیŖ 8ãķĪsPhŨh:ŌÅÜņęļâIŨl¤QÆsķpzî<ņĐd Đĩ׎mü+$ˇ(gÕ­[ėīo"„s+7lT’8ęGøüSp÷zvč-“OÔmšky˜ĢĒ*ūœgōŠ|ÖjÅiĄ—6›÷7WžŸŽĨĶm’ĨX'Ãđį?!VŸĮ¯|Û {Ë'Õ. ާ<ג\ĸ@ÖĖUܐûąÆFr=ĮJčîXMŠvō ÁãŌē/øHuW𮛨Z[[ÛOuuŗĨĖnÃį“bēō§đ{Z睉cŌüG¤é“ÄŒ.˛%”dœGĮûLü)ŪO§ô‰Đå"Ō5*ōîÜ[Ī.”t۟°˜âfhŒĻ3ä‘Ô`‚GÔúqKČŊ¸Ņáĩ[bŌę=>`ĸÍŪ  ¨?w(#Œ9nČĀ æē7ņMúøŌmVĶÎۘŌ8„oæIFd-’ÄdĖ×^$€väã†Æ)J¤ĸõ@’gŸč‘Ũ^ŪäA¨îIui=ąō‘°˙ŧ‰ČąĀÆNwž•Ĩ¯é7ZŽĢ¤^ÛÛËrŖÛߤ€8 Tķę¸ã<ĩVĶmo.5zÅĩíT}Šx–&3) mZ&qļÆVŋ.čŽ7H6ŧpūnĨk}9ŦY|š‚’ķKq'ŪãņĶōũkæ9uK¸`€ošv mÔą#æ#õ${šéŖŠ$ÖĘ[I›]2ĩŽCßyŋ=܏JÚNÉ"#vîWģļ‘nT–FQ•Pqūąđī’`xĨU“J™ kY‚qÂLøũ0? î ĩ†æä—H÷íˇ’‹Ē,7t$oŌ¸Ęvé‰ŊŠũžYSŽBŧ˛úsô"•'yևŦø%ä_é+đ8åÍvÖo3ėÆÁšO hˇ?‡tûy¤“zÛ‚ČøųYŽâ8į’+ąļŠEˆmÁÉā0yÍqMŪNÆËD‹ŋhPûTąįķ(9 ļHÅ/˜$ęõâŦĸŸ,ô'¯z„ØšFT˙ÄŌá7ģéūȧŨÆD.ë'axj1oŽ*xíœpZŋŸ0<Œ¯ {ŠÁ+ČŲģXį¤'í0÷Ę7AčWükņ=¤Z?Š-õG@Ö×lžh'€ÉÁ˙žŸûä×XI:Ĩģ†A“ŸU˙ëÔZū”5{G ; Ņ1qĮCũ>„×])rŗ)&Ņá—6íŖø‚ęÁÎá†4'ËüčFã]:Æ'Ԋ˛ .Xíá°@$ņÜqßÚŠjöōŨčĐęDV˙M"ĮP‰‡ĖqŸû)>ŪÕŠáۏ´Ûĸ„N˜ž˙ä{úŠī”ŊۜņZØÎD“i¸ˆîēƒ‹„Qƒ$|âE÷ ‡;útŅNҘ&` ˛üšé׏éÆ1KqŖÉĘ\YĪĒ{ŠǜtöõZöŨ#2Jâ]tøgtÃ!=ČūĪQŽũzÖnJE$ŅÕØk"ō§vųF ž3ôËĒItoˇëIĒÁĢOÉ ‰#1ĄÚ¤‚x#=@ë\ģęÖ <–ms7,–ãĖSčHįępO4¨ĀÉUãŽ*ņđŽŒm´ëxíŒpiōųĐĒ1ÎīöŊAę}MrV,Ö,î"ĶŽcŠėŠ*“K&ÉöV$OåÎ=r+z >!öŨ2ōŨrAķc ė܌TĘ5/šIÆÛĩ [ßęQjV÷—VwĒžYšÕ€.™ÎÖ <ûSīü/c}ĸ2÷͖&uvw”—,wëÛéĀâš˙øYz[‘Ŗļ1ĘüĀÚ$ø•frrŪ€ VüK JQķDč5*+ģ‹KƖx’ČąHbcåJÃi'å$~5ĖËĸiz]ÅŗÃ<Ņ#‘!€0ƒōxd9큞Ï{ã?ĩn0]BŒrv<*ŋ¨˙ņ÷Ŧ Ig™ĪËä&YIöķøV°Ŗ>Ŧ—8ô:ĢöKh­RäĮmÚ쨗8ã,zįûÃŽpkëQ€(…QŸœÆKĀųzž:dĐēĢ*yēƒÁĻ[Ÿ˜ŊÛáˆ˙w;ãŠÖŌlĖŦz Œ˛ÎTģ\rcNÜgžžæĩ÷bˆÕ‘ØŲËŖ9‘ļÂCxĨaˆ|ßbˆõw?Ū āūŊkC¤=ϐmÖOŨI6ä7?×üO9­ũ'ÂļV ōJŌÜÜKķM#r_ę}=ē]˛eģŗ’ŠŊÆxS\ō­wĄĸ…1‡RŊŗšāZÂŌKu ĩ‰ķ†Øœ÷îqūČŦ=?M˙„ŖĮZ[-ŒŠ[/Ųâgūüz´ĩũJÎÆ ɝ¤uhm<¸9MÄĒũI¯Dđ„Į‡4m×#ū&4įs•Ķ<ûæļs䋗Vgngc}äšaÛiĮ>âˇ!Mą(;ēᝓm‡ŧ1‚~é'ŽÜbļĄá@éĮ\f¸‘´™:gių8ĻĘ/ɜúrļ Ī'ˇZLķĪ Ûš1åUû|ųüß"ĒÜũ—K–LØ\/¯#’*Üqf{‚Ėq掜įåˆíĮö4ŽŖ’W?˜ŦŖvÍ–‰œÅČ'Q˛P~UI ûįô5dqÃāšī@UiíŲÃ:`qRÉGvî=ũkAŗņ>‘ä]6ĩgÚPÅäę6€gí÷ yGōöįΚđö¯•qįé“âk[…äH™čqüCĄÕîbŌ Į•įœfš=kÂ02ÎđZũĸÂsžâĘ3ĩŅ˙įŦ'ŗú¯Fū}4Ģ}™NQ¯¤ËmŦéņÜBU†FážAŦY-îuĪj:oÛM­„QmXŖBķÜwōŽ˜Ŧ Ö|"MîœßښW!Š#y‘ãødN¨Ã×w­ ÍzĪRÔlōyFR29į5ęįâÅonˇVŅÅ1ĘČzŖ:đÁĄņĮC‘īTĩßxšķÄw etaŌĻ•X,sė¨Ü6ŽFNsÍv×^Ķ/teŌfŗ€Ú ą…Į—čTõÅ:ĩ!$›bÕėyϝömEšu b‘H•3¯ĐôΧ‚aĶu{5VÆMZæŅ~ė7;ÃÁ é‡WČCĶ=õĩŦ|7Ö,7I¤JnâˆŨ‚ČéÉĀnŧnkŠŊ–÷L"ūÖ{f<ž2 ũ3ÁīZÁFjÉ‰ļž§ĸ\Úëԃö?ÃڒĪÅÅ ]Ų˙kĄü*‰´[lžЙķŸŨ3¨ũqzO‰¯ôf-ĨjRÚĻ—…ŋā'8ü? ėŦū/jVŅ…ģŌŦîqĀ{kƒ?đ“üĒ]9­—č qęZ].ũ‚ŧĐUqÃy/1üˆn-ÄōåÔ6ˇ˛´H?Ÿ5X|f„._A›?õđ?ÂǎśûųL:_‡Õ¤ë´ģĖ}>ę¨ūu›…^Å)CšĩgāÛ{úųäŧ‹G<Ũ; ²ŋ’ !5{Fę=Nî3qkąûwaP āį8õę}闷Ū1Ôm|íVö Ī8Íäŗû*ŽdcøŠÕĐíΎÖgÄNAm[;TũõĀfmłãpëŒIĻ•äîĘM_Ec˛ļ. –W e{é\‡‹üUZËmÍäœÄíų§n†(Īū„ŨēOj>(ŧ×îN•ĄXË#‡Tl1ôŅĮ¯°;O–ē/ ø,oWTÖ$KíIpąClAûzņũk8ES÷§÷)shŒx>S(ņˇũ­Įú-Ģ&AīŽƒˇ×§Ĩ*0‰‹}ãØT…#ûÅĮ}Ũiō(„õ¨œÜŨؔmąFÅíR¸`TƒœŒOĄČ>ĩą!0Îk2Ę6ˇĘvãšÍj üã*ÖâÅļŌāc­(%ˌÜgFmÁ%ŗÛ541äŽßCڂY—ŸæÎe z0F:^:“^_7D•F9+Á÷ ž#ąĨĮMŨĀôžHŅfڛ˜mų}~aBV!ģ´rņ PYČaͧiC ´‚>•^4b"}Ŗrœ°“ÁÖ­Čįđ§cfÆffʐ:œÔĸ1‘Œäv"˜2{ū\Ō˜}Ņ–íˇŦ*ŪčÖ×Ŧ&ĖÖ÷j¸K˜c€:g0ölŠĀŧđŨŌŨ Ŗ™{!3ÖS7Žæ@Á˙ĩu÷ųyčN 4’YŽ7zqŒUŠ´KGcĸxž×eŊŒōØ[oĢŨĨÂ"įĸĄ„1Ø0ÅviöWy6ļĶnųO›ˇķ:‘ˇ$0>†•d€­ū{Q)šją‹?„|4áčzy#ŌŨWŸĀ ́ŧ1#ŒhÖŦÄGękĻō‚Œ˛ąīî)áU6ŽyįƒSÍ>åhbÛč:F*Ég¤ØĀŲ;^;u œzã=ĢHČŌt?ÎŦ1S†OnæŖũÛIĀbĸW{”š#XßxĀëSlc"8#ŗu L‹üX=1üĒ`áBgŽ=(Hn=GRæĸ,2Ũšęi˛3Ę6=NÚPŖ*[>‹Mą$…ÎI$œöˁ ČŅĘąËupΏ"•Øãw”H˙vĄ8Į1ŋũŅÍ`’Üȗ¾žœŦē%‰b9+ĄĪÔPøD?ąĄĪ\o|˙:ß_,¸ĖE}:÷ĪōNBül4ÕIŽ ã<á‹fFM Ë<}ø÷˙<Ö¯Ųíė"XímÄjĮ`XQT/áV|Ō˟%°OLb”Ģ0ĀFUõ Ōrov $yŨßÃ(î5ī"šŲ<˛Iâ2:ääō%ķZŋmđöÚ(üģÛû‹„'į‚KxŸũåŒ߉ŽĀFÄsz I†Y"­Ö›V¸(ċL˛´Ķ-ŌÖÆÖkuūPķõ­Qˇ!0NOSÔUhŖu ×9&ŽÆ„>˙.BsކĄ\R$1 EÚ0ŖŋáP ҆ŅßÚ­I.ŪĸMÜņjĨ$؏a,šęMS%­—R^*FËNH#ˇjĒĖY‚ōŦ{ üĸ¯`*ĒeŽŅ€KdšC5ç==sĶÚŽDĘzņĪ­Uˆ†bŖã<žœÕ˜cÂXcžhâmš#p'ŠĪ›ŦšL„œũŪŪâŦ[ʼne>¤wôĢk!fŌäOá$ Ÿ¯˙ZšVFWŧŽqk‘ßŌĻųĮÎÍōÉŨĀǏÜŪfr{UĪ-]€`āķLØrČqÉÜië´‘ģ =)V5ųpJthĪg§a ŲČõīŠkļâ0HÉë‘Í;#p;E Ã 98éK}"ã’GáRĒũĐ3ōŒE´ `Ķã*]W`Ī'&€t„„|¸<įšĢ=ߖ¤€ÜtĀĢ2Č nvŽyŨūŠ=Ξ÷ķM:Fd(°Û8ŒŒw,T“U nr˛evtŗßHÄūņĀĪlÕctSfΰ¯4mjų¤+ûäĪ÷įßũŅSGĢkuI€?ŪUoæ+OĢą*ą=\ʤ’Į§SŪōTA—§ŸJáNĨ­ÆÛĩKö Ođ¨å×ĩˆ‘Žã“Ė gōĨė$_ĩ‰Ūũēį÷Ē=ˇt§Bå9ŨĪnk͏ŒĩTûÉjØ8æ#ū4øŧsČ6ÖĮ>‡õ¤đōk҆­u™į›ĩ5u[„•ŗ¤ŋ69ĪķįãĮœąˆ“žŽjX|hÆnls¸ôķGøíKĄ>Ãö=uŠY”üŖi9ÃíV˛Wƒäw"¸H^ß.01XvĮ Ŧ?ZۈesīU:š •äŨį°Ÿ$m mŌ¸ī•>õĄ ęų=1ŒÕf šČŧÔņÂĨäcÉÔS#vÃãsg§J.B˛g˙Ųleptonica-1.86.0/prog/brev.10.75.jpg000066400000000000000000001224421506303110300166410ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀĨ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?Ôr¨­#UQķÆ=čŗS*ĻS'Ūäsôǎļ˛Ėfyœ4H„Į ¯Ū8ū/^{Uûd0ZƸÆÔ ÃâŲXõ/¨ģN˙lrhōÃŽj``;tĨyDqd‚‹ Ŧņ'ëښ†dŸåRoŪIÜŽsJΐA#ŽôÄ'vŠcFņĢAxįëëLeĪ\zR°Ęâ<¨įŠ =n*tEcžr1Nnr8>´ ŠåèĮj<ąŸjĩ•?ëjQ÷ë@ŧŦ ĮëG–1’?:´¨1Đ sœR> ƒÅ ‘<})xÎ=jrĮ üķŠ]€¸‚O§jv •Ö ‘ĮÖĨō†į4öPš'Ûi–°xöŇ$CôĮ­;ËķŽœŠvîpG֚ĖAĪSØf¤`Å1âÆ@'АW-ۃø;q؎ĸ€"'¯N =T۞sÅ;šŒZˆ$Ļã#3ČęM;+Į˜ũ9ÆiÅUGãōĨ4|Ōp:ĶŨ„9xĀÁĪz sÍJW ÉæšĘã§zDP99īšzŠ#ņ4gž8Å8(ãŋC@ÁŽäšRŧtĄ‹+N:cĩ8€@<Đ0H úQ$#€AõŠ#œõĨ™rp?Īß VĀ抚íĻ#ԊiƒB)fb29<œÕ˜ƒgĻN:â˛5(åĩšÚxXƒ!ØüsĪ5v9ecɍ€ôāū"‹ir/Šq€Æ üĒ!‰HėëPË*ēėmČ.ÚĄYeb;TÂ`p;dvϐŽ_`Š `īž•@^ۆ;K:įøTâ™%Ķŗ˜ž0ԁōœz i‹Āš\ {‰Ëą?ö†âBDÜvn)âú=Ā20'ž6čđĨãnŋ/CëQJ¨Äƒoŧ×# T¤ąeH”YÁ3ä€W ŧ{TąÜZJB¤Ŗ’s† Sm^Â=DY[ŨBn_q*6õ˙>ÔÕÖĀė=íŪÕR%špā‚|ĸG?N•n+Š6HŌrˆŊUy&¨´ØR×2".íÛAãųUŠŽb–;c Y wáät8Á¸ĒÜKAĢu|äˇÉuÆ2ĀUË+Ϝm•6Čŋ¯ŋĩgÜëšVž ŨßA ãåwŋ.ĩjÚūËPEšĶgŠâ%bĨÕŗķßʆ´Ø5Õ÷”ÛV0{ncŸJ¤Úŧ‡”EpĮ Ęš?Į5Îŗ¤Å;ŲɨÚĨŌ,¤’äķŽ{U ¯h_éúeŊÁŧšætW’؇TË dį×ÔÔč'$ēŽÁü ¨#Š āzf™¸ãįœu¨e™W{Ŗ—å^žĻŠ5=Ë0Á4TG{댐¸9ĮJ‰Q#¯\éŌŦM&÷ō‚¯<H8¨âVÎd™ëTž†Op”.RLžzí˙×ŦŋęĪ čßÛIJN6á_8䁓LÖģdÅĩץão˙^¨ŪY˙iéķ@w:7ÖĒ-]\™mĄČi>=†ā o,n€OžđĮŊPž™#~ÖXęúnŦĸãOšI¸ų‚đĘ{eO#ŋå^[ŖO&™¨Bd’X Ģ<c‡’ņ†éĐįŽžƒĄˇŊhūŲĢ%Äs<đKkq,xĻD/˜7/^+ĸt×CÍÛSzoéąŨÍegow¨Ę$ŲÆ_NŸ[‹Å–×>ŋŋĶЙėbŨ-ĩČ(ˎĮØôî*Ž–Ë čÚf›ĨŲ­ÆĨwl˛˜ĐėĪŗ;öûú æ1€Ū´á<‘ s€HûÅHSúUģéķáV ‚uH”˙Ī0<ȟņƒî´ŌļŨE{īĐĐūÃđōčâöįNĩb ŗ%­Ã¸Ø9?6Fæqü*„ōxnŪ÷M´RŰÖČΐŽxpO ##šÍMâ]Z(æ[5–[˜ÂG†4ģ` ‰SCé\ÄŗŨ\˨ˆe|9Ęî* ÁõĀĸ1r^đĨ+|$ĘĶęWO<úÛ ‰F~V+ÎOaŽ0éN}.2ąM-ÅØ1Ęō3 fLŒîSŽAÃ{äc­,qÛÍ’8’y™ŽI‹㑁ģŽ;sų25œn’ģËäą*>mĮp*1ßîŽ}¸ãŽž„zEĪ€t8!#ûnHdtʙfŒ ö8ĀČŽwNōtK‹Kûi|Û¸f0Ī8c(`yL~#đŊ$zŽĢ%ŗ3_Ča˛T( TR7c?ÅękGLĶ.õ=åĐK<›ŒŗIŒnPŋēž€¨>íÎBāΊ{Ė­÷Q™Š]Ũø‚ęI§9Ú8†@:nsĮâ3øU[‹{Ģ8–5[˜Œš@ŋh''‚ާŒvāíãŌ^ČmN$ÜÂ=§vĀluįį2 Ŧ-fÕZ2Ĩ‰ÂîÉ<€c8 đ Š#%˛šlE ę÷ΰ5 ÕØ6°“ ŧc…V`>öĐ3隹1ø3YKŨ>búuĘŠu/Ŋ^3ÎU° Ž ôÎq—x[đéV’CpöļÚqß&Ų‹ĢŋíԂ\n*;Æū´Ōĩ–ØĮ'˜ĒYãbÄ"ī‚@ĮĄ>‡ī{t-[uš,ZFŸui5ååˇÛĩK֚RŌĘU-âV+Ŋˆč>¤ôöÄđ]›¯Œô01v3}ąū™¤ÔåēyĘ{kI<´¨XĮh<ÍŖ-üDûîŽŋĀúnąđÖ!ŧÔ( ‰|¤ÁĪߏLtūtÛå‹%.i#Ōà Ũ)†ôČĨ ķ÷?…?a#$qī\:f6§ųNsßԊĩ¨ˇoj*K*}Ÿb>2 œąĪ8Ĩ`Ã'# ×Nä ܘØgžXcžFXķU­€ƒL•fvžk¨â–KŦ‡xÁ¸ÜWJ]ęwBÃLŗ3ŨÃļ@ŖŒŒg$œƒŋaԖÎ}Í­æ›vŅ\Ú5ĨËÆKyņÎIĖmŅyčF=:Wbėržãílĩ :txašË2G<,ĻA˜ažō‘ÔjK­FBíd,ĄąYãU“4›Ŗ<€…‰Ú„ã…Ģ­­ŨŨkgÄsYđ›–.ÅېėÁI`:€6ŽĢJæX.ėôÛHllŌKTŽVšgܸÃXÎzõāŌģę4ģŖxÃĨ°tˆ"+2ØQܒFGųæŠęQ-õŽŖĒZĘĻ{…•XwI# OĶxü0kÂ1ģOu Îĸár‘™ãņô¨,”iútwPÛ :hÚúÔ¯1ēđę۟1b ãæl5Ÿ5™|ēÕÅĩÅŽĄ6’Ž “p˜ķûŧ|Œ=w­K}2]JGŗĨŊÔ„˙ŌÆFX Æ8į }x&Iímĩ2­{šā&+;ĨÂ:¯O*o§đ‘œôķâk‹UŲníģBņ1ÚF[8PGŪ$Žũ8ĀĒmŊ„’OR­ÜZƟ­ÍŠiRÁÄÉ!a„x”ļÜķŒũjšŪ@ĄŪ?ąÁd o!œÕ˛[ũj~Ÿ¨]__ŊÅĶM1›NĢ(E;X%ļœ\tõÖūŸĄ‹­RKŊ:ũ!ŧ–WKsdÉÜ`RÁ†3Œ•=)ˇmÁ+ėf^”­ÄknXiéžiK|…ģ‚zeĨ%ŨíYVLo¯Ļ1Bų‘‹gËwl#.Đp}6ŽÕj÷íˇÚP´†+};HßŊ7Ę#{ŗ’<Æś׸ū‘iō+_$1GƒũY"V!`eķŸbŒ6q’NũuoPđŖ–÷K(珖ØF&–K’ 3ä… ĒXđ { Ûx,-_͆šŪÎö/´+1b’HÄpIôéUâeâ}fi­ j$ĶBĖ‹ R lŲÉ ;cæ ķ´žfW!Ęß@‘iŗęÛŊą1Û v‘‰!Wv[v  ŽJõ]HēĶ4kM=bˆˆĶįläŗžXūuĮjš7…´ TžēŊš C%Ŗ 1ŲˇķÎ2}ĢvĶâNŸw*˙ĸL–Û‚<¯ˇrp (<|ū3ŧ–ˆpJ/VtĶKo-¨ˇ@’)W p} yĮŠØ,–SåĻ(xSÁã÷''ëŸöqęļz„ŌK2ÆíÃüĮôüë3ÄŪŗÖŦĻyAŽåPį^ąŲüÖtä“ÔŌqmhy fēt[n0žu°;Yˆ$‡_Fƒøžƒ+FRę;áēđglwáT3<ĸ>ø=+{Wđ.ĄĻiŌŪ™#ģXQØÎO'vÆBäņœķšÄYEĶÆXIęĒfHŸk<HöĀį8ãũĻŽ…$õG;‹[—ĩ ;6ÕîäÔ´lĀ@6Ö÷;åÁ#`n#ƒÛ§ĶßÍgĒÚŨ@ŌGqĒãoĘĮĶv#=8į͝ΧÃję׀´/–Ķ, ä3†ûĀŽNîcáiˇ—‹ĒŨ\\]ŨYČ#h¤#jJ¸980ä0=ķ““šNJ*ėĨ'Ąé[O<~”āđr}ŠøÎôĨä įZä:LģäVUĪ4T×däüčŦžåŖ.PԐNí˜Æ¨¤u *Ũš­Ë*G#õĒ×(ä7ŪĀéAĒ-Q¤ûǘ9ÎrjĶMœ˛˙ (ŌčĪô5XCo<‘žŧÔzŒ-6•ŠF†–ŲŅp9ÉRjĩ%čy—†ėnąŒrZ’Ŗ*œįgÔrOq‘ßņzm†Ĩâ=CÉĶdōm#|ÍzT§ ˜ę؜gØ Ü˙„nâëÅ1i~$Ô#e)‘öėq€ŲÂļ6äu?•zt6ĐXZÃikEkˆŅk[ĒkMĖŦæõ2t}NĐĄK[(ČR7;“—úąīüĒ/ŗ9íRhŨļīu "šę>šQZW׹iĒn'lü¸UXúņ<¤Šäu=NMNÛ͕<Ŋˉ¸Ē˛cæF€ÃnAę °č>lâœĨvi&’˛8ŨFÆ8änØėÁ"™‡ļėĪnNzsČĮĖĢŠĸÍ<y3K)Ŧn­‡ĀČū˜¨n­ūŲÚq´y-Ņąü<â 1í‚ ų 9ąŨËŖ |4Ņ„›ŋīcw8û˃īšéĩՌ6fŊũÅġYÄÆY`—ÎōáVAČ` ÄŽę;wĢ6:¤EdŊšâīGŧââ;7`Į7”n„d€x=+6éí¤hãû]đŪūrÛY¸Ūôß°g ųUËMġpRIK:D*ąãīyk¸Œdōq‚}I¤ŌļŖÔë4ä‚ę'Õnõ 6ōÄÃ˛KĨŒÂ[ ķ$dzđFzT đŪĞŅ'žŲĨFęŦĘĘD§ÉÔj¯oāËŨIRīMp–ėĨĸĩ•~9''ŸLŠÄģĶ4UÕÚŅ­î59#cMq¨’mļ–Q÷ú€uŦŌ×F[zjŽ’ō} OŌv:yŋŲŗH7• ‘Ëz0K‘YWJ×ļ—â+;(î¤v[Ģwų°%ˇČpáķ‘Đ đhÚ/†5-Piˇ:ÚL"%‹_Čs/ĘJ§?7$õãĨj]|2ŌX•ļšÔ-~îm˃ęÉüéŪ1Ұ´žČįuá™ĩFdKæ8H!šŲ×W rāŸâ9ΨÃuPIZœąÅ›ÛÄ&ĩ,ķĢÄŊ€įŸ—­hęžÔtôiĄÕ-&LĒŠ¸Č öä‚~ž‚Ē3ę#Ŋžą ˛ˆž -d9Ī—N˙…ZŗZ;Ķ[Ŗ@›Š,ĘÜB†ų–/!Y~L+1ڍÍ$j@ūOZčõ]jÃÂÚmž›k]^’(#å¤sÎöĮ#''Ô×*š”wö• ę–ÖņˆfiÚGžr2ØÉ*:÷ĮŌģ}ÃúE„os§0ŧš”“-ãÉæģž˙0ā}+9Ųniv8[ŨSƒQŠæīOmCTžS<í_(ĀÃ8ʂŋĮ+šĢ‘ĄŨxÆįG€”ˇ”Ÿ"PÕJ9 OOr;W x—ÃÚŽĩ=œēn§ö/-Z7pÄAzƒĮŊrž2Ō'đ֟ŖËe Ûl†Đa%ČÜdõÜv“õÅTg}/Š2Œû]ūģ˜Į4q_ÚžĮ¤wQu'o0¸ôčÕŋ¨xžû]ŠkoÚH/úŨBåp‘§vüyöĨĶí­0vŅŽ´ą`mį‡04q(Œnä`œtÎyôī|OmCnēxnËRŌĻ€x‹Rš¸’¯#^6͏`qˇŽqÜ×5ĻxfãJ×įŌÚá'šQæÁr ”áטn ŽācŖ­áŨ}t›ä-´J#X¤ŠY|ĩ+ü,ģ°7r}1œœlÜ\-ö¯˛šå–‘yŅ72,ˆÍą”ōŅŽOLmA§ī&×A{¯TSŋ‚T´—1„Ü6'!Tg9=ĀųšęO˜ũ–Ÿā]ôīZŲË#7œĻĘ`Hån…ĪžÜ§ŨīM›V—W–Y/-ÖÚîŲ‘dX‰ 6ėâDĪ8;Ī=áTâÛ ĩņƉåĻÂnâV ö.:vÆ éÁíėŌēi‰ģ4ŅīA†2qÅä€rīM2§Ąų‰'' Ž;%k¤,<ŅSÜ!ÚŧQEŠ[ōĘ ĘĮ ž*Ŗmķ‚°Üš}*k–Û<#ĻAīŠkå‘A#îŌH‚$^)ˆĀĮ ŪŒf™p!q€=éˇČ¯Žüņ€*TVK™sŽ ŽÜ Ոķ ëĐøjĘ{ V˜ˆžmŒ’¸ŨƒßížĸŊMÕ,õËVŸL“·!wėeÔr5įŸŽZãĖV‰ģ1[ŠLâ‘ņü€üĢŌtˆ,āĶ ŽÉŖhvŠN™ÎãœÖĩ,Ō—s86ģ’ōK8á—@i<™ˇgGՂ†§$â…PÃķâ°62ĩß]ŌŪŌāá‹o†eûҏčËî+Nņ-ƝöÚÔmHV|Ģ™ĪJĐŌõHī4†–˙PSki ˇÔ uķ–BpMã'iœō>˜5›č5Ô¤.íaÕ Ņ<<ú~Ÿm<"S~Ņ—ķIūœeņƒķ­ĒjsøsXÕíZXƒĖ$eÕŧልMČŲÆUˇ6įšŋ7†'.§¤ŊŨ´Z+ÜŦĐO/ÎcC†m§#0āžÄԗ~.Ķį “bē´ÖJ6O(  îŗ “€OčyŠZíŠm;jGĄø_PĶüAa ąļŗ†ÎŲášæ 3öŌx¯QÎ>•ĩŖjŅ]]ȖS5ŊÅߛæ[ĸČų ûŧ Ũ đrŧ’O&°o|Sâ;ųÜ]]ͧÛt kn@^prÄįą Ö{\Û´2Žîį‘ŸnųĨ‘ˆ'<`J:%÷j2ŊŲ[#¯đ΃|u‹9n­gŠÂËĖ05Ä!^CÆ )rC[(éÔæŊtčâŧe4‹i™œiL¨Ĩ–d2Ą ufÁäsķË7ö#jËGųėŽŗc|ė~Īco7ōŠ š cpa’vāy3Ũî\ecŽņV­mkŖ^ÚÁ=ģę3¨‚rĀšy0Ēvõ#œôí\%†­/†t}wI“„ļˇR)†čÖ ÛKN?.r¡ī ņ=•˛žŠi¤köČ<ÂIXn"Æ9p1Į#&ŗĩ_ė˙Áy§éŌ˙eę—Ŧˇ6Z„f9.@Â+“Œcļ<÷ĸ %f)>Ĩ…ø&§§Å¨Ú¤Z]ܑ‡û/šō[¸` 2œ Ž+‘–ĪRđĨØ[Ģyė.˜âáŨž?Û-Ī^‡?îö¯fƒV°‰P^ÉŸpŅų†ÚâEVEž1Ô{W#­xßJÔ¤ˇĶ,ėcÔ­nîŌÖIåâ0XŒí’@=pãšqœž–Ąãŧ5ãĩyRĮ\x’f åŨp ƒĶx ž28Īiā×ņÖĨ>ĨŠ&‡käĩh噀ˇ’Ąv“ĶbôĮíYž"đ]ƋŪiæîëLk5˛|ĪnƒŊ-‘īĪsYŸÚfĸžCÅ#&eyFaGhōÜŦQíéЎNrÔS|ŅŨšd_𞃭¤ņjļ–ŽUchãŨ¤K Î>o•‹:Āô­~ŨIww¨ëš‰žYÜ7•0r ôã Ųøm|.|/öu‘YmfhŅTĩĖ'Šį9÷ĮjéŽÁ11ÆH8JÎu$ĨdTaŽq×? ld•¤ąÔ'˛đ^"‹2Ž1ÁnGækUđåĪ…ĩ‹]E–FČšË@ •a‚Œ:sÎĶë€z×­Ë rzqšō_Ü^xƒHÔĩļž”iKp`´ĩ„•ƒˇsäļ1×č5P”›ÔSŠ[zķév:¤#Mš7¨ą§“ö$FOú’NsÃdwr |'g¨ë~%˛ŧHC[Z]ŦĶą~Šäž8úzĮK´<ŦHĶË+$ĸ@ĘX}æČÎ{ôé“ÛŠŲđú/Ãū&ՒIQ|Ÿ"NHYąČā‘•?jÕŖnĻiŪWč{X˜‰1œUˆö“Öŗ4ˁ¨éVWā`\CŧŽ…”ëZąF\ņé^zŊėviad\‘EI0l g?LŅVÄa\¯īĄ}š84ĐŲLģœĶiĶ)WP†ę ô¨•7Iö’؁1ƒÜ“Đ÷ëëO„”3s%—ž€ņ§‚Ŧ¤1Č=ŒÕPJ>øđ3ÃôĒ@Îâ5ŦđëV:˜,LĻ8ÛĻÆ\0Ν<ÕŨ?Y—HŊ‘âš7‚vs<2Č@Wí osœ÷8˙1JœJægw}â+•ŗeF#į;đz.1Ø’3’3ŗ<05ÎŪ†e,ǝģ9ĀĀ#$Ũ'†ûŒYåaYö÷jŗÛ˙h‘mh’`ųā…TįåŒļW ;@ ™5 ]´ũ2+š"š,Eķ1…™ûOÉ=)¨ØފuÆąŦO‰Ęî>HŗäØīĪ=ëąI­tGąŅŲT‘D÷—(˛EsōdåÎāOLqԜ|8ķčsé^•>ËM4×íĶ!Ŗ-ōáy ã3ÁĢ–ŌiŪ ‚’Ém58[yŦ"Ž3& ōĮķ ÎZR•Á+qëVšû؈4åmF!å5˜O2 Čŗ† ØÛ…ę éČîjÕÅÆ…áÉ•”)­ÍíŌáŒ1‚sķg€=€†sFŠŦÉĸiMĻi¤×6°ˆî¯üĒŠ:¤{T€G^xį'§qnIņ#Áöj$‚V“vČ?y!8ãĄfbŊN@ūņƅÔO0{_[Â'}ĀØ6‚s…cčs×ÕØôÜÚí{ë-xôô]Įūų õfĻÜm¨$Ė‹–ō%†mJF´Š6YĀ÷ã…I!ÛļûšĢڍŊ׊nb¸ŋĩIr [ÛČSõā“Ü“l[BÂŪQ%ŨÂÜÜ?*įw=~T\’}ųĮlV^¯âu"–p5†Ÿ"r"Ī™?=pN2rAųL­^ƒéŠ5ōÚ]¯‡įÛâ9Gúˇx$Q–IüXđ}1íVî­-ĩsGņ&“Ŧēeŧ¨nžŠÍāî’09Æ {ôæ°íä].îÎø.ÕĩŒmR›€o”Ž>VĮ¯¯$Ôö˙cˇ×.eŌ5W´1˜_’U$ãHÜ ˜ĒíØ‹žÄōĨŦ˛K"EhY¤cō¨ŠéÅym¯Ø5šŋĩtČ _Ar“ÜéĘ1ß–Ā´†čØ'å<üŪų6n.o<^bn/,ī0’]ØnVŽT)x[Šįnpxú“ÃúEÅöĩu`5K¸­´]KĖT1Šß’qķŒp=G5œW*w.O™6‡âo ßFë§É ŦōšymäQ —Æ #šã¨ĪJÛšd6Į ‘ÁČ'æ~8đū‘¨ę_éĶF÷s¨ZĀC69ũæāƒÔ~?^z=N[ę÷ĐØÉ…ŽRYTĮåâAŒņĪz=œeĒaíthôMĮPZČēv“sf÷ÛĘH×/ą!Á‘““ëĀũy3,q¤‚˙VŌĩ kšÖâ{,qüøį Î2;‘ךĪ6’ÊDXMqw “í2ÂŌ2Ā-(by8RpIÁCøĮtÖú…ÕÉ´ĶŖK8‡™ 1FĢ€¤|Ō7\‘Îqž•ĸ‚KB›w:ŊvÃMÔm M öÍb„m,Ũw–'9ã8īž?NG?á¯ę^#°‰..DZlWe]°lp }ė`ncĀ<UŦĄ´ļŗķŽėí. Ō䩆GŒđlm’’xž3Žį¯đ<Öąx†ōÚŨåĩžE_´é÷%Ën_ēč[‘ÆA8ųy"“n1v´ž§ĄŦ  qĒĮ…qĀqSچT ĖX‚Hëī@a–ã‘SDŋ•ĮmN›č+`.@âŠlɇĪ<öÍØ7Ŗ_ģ×'GĘä<Ž)÷p #Fä眭D ÎséIlCËVe*TÉåUe$‘Œ˙:ŧs´ũY@¨}иäāāU 9í[D‹Pž96<Š#šul?’7‹é–+œVfĩ Yéö1˙d[}Ží\oļwû@Ųܘ˜ķØq‚3šĢŽĻĄá­sT¸p~ĮĒ auÚņ„^b xRxįōéĪŦ3;GƒĻmÍP f2œ˙y˛3Îwq×ļ+Ļ1{ßC5ØģĄ%ž¤ˇ0Ë-ŦČûFSļ2|Ļ’9Î9ĪĻŦ Ū-]ī [,Č^fMŖxlėVÃ+Iį’ŊO}…—†|­JūŲ2ŽŅö6I"9 ͸nÎ7g$ķܜÖŸuy k‘\,čņ!V–dlųĐ˙`:‘÷‡\b…ŽĢpÕnMk xļz}ĻS–ŽPŽĘ āCÛŽIŌĩūÜ<)b—7 p—׸{̈m÷ũ–.vG–ā1=sžüt­l!_ę€ōä°ļ¸_."ŒÂ[Ũŋtmā›'ĩ:=^ëÃË5—‹l…ƝrĖ˨ČČŎáĄå}öwĨ{ŽÖE:ΙshúpĩK]]^tąē˜ˇ’ØÜÅ]ųzœ{ŠƒTÕWÃi‹ ä†ūę5ûuųÉeUN3҈R}ķÔæĨ˛ŠÃÁēęKoäę7`-Ŋ´Ėr[ ü~fĮĻ; ķįŧģši>ŌŅI,§Íf•wž7?Ã߃ԜW3vGI¨Yh÷ÚXČŅđ´‘Ģn‚ę9fb ģ‚xŦí2ęëHŅ/DREĖKeŌ’W—ä!Î>îãÎ+ŌeĨ͘Æ:z:,Ī2X—uēu\ˇ%AõÍX{¸į‡KĶ´ûmŋŧ$ī“•'*1°(#<õÆz°¯!jeޚ˛Ī*ŲČÖŦ0DĖNFqĮvÎ>œƒV'ƒU7V€5ŊÄĀâ°gđ’9䏗ŽHÉĪMi¤]ŗlĩļQ1Ng—æŽ$<ƒÃąëą~^rŏ'ŠŌ´kM.2éæIs6 ×2åžB=OačĨÔ°Ô.pvÚOŒ ”´šmŦŒĖ˛ģųāN0d`v#ũÕÆŧZw‰¤EßĻÁŖ9gÔ ƒÁŒôÉĮ'“““Íw °&åbWąÚsRĮą1’Ų'í÷Ådę7ĐŅA#ˆ‹ÃZô–Á&}10Ŗdˇ#§āuį§^yĢīáÛČąŠëúŒęĘĸ„-ēc¸!y#ęk¯Ęr{ã¯ųÅ uĪʤķŒĶŊ.v>TqwŪNt(Ŧ{F˙!‘Ø‘ÜĢāžŪW X"4;ĘÉæU,ĘĘŨmØu'Õųô“ąõ1ČVí8ĮOL×ņ.öÚĶFMÖ¨÷7ĐÅqŧ !ã$Œ Äc ëÍ\$Ûą2VW8‹;„‚ŌūE/o:Ģ:9oŨ2’Aí’}Ī Ž–k{čŦdūĪ™­Ą˛HfŊ0’Iæ+7Ūūŋ)>ÄúW%¤ßÍĸ\ŖĒąHŽ-X˛tīp§#?Ōģ[MN/ę2^G“Ež—6ŌŊ›€¸ĪŨÁČÎ:u•Ėãc7ˇSÉžĪļC4 Xˊǭ Ŗg O8îqÔøwTą6×z¸ļxĩãˆŪÁlĮkCŽ& Č`'ŽxĮ×ø?P˛ņ” Ĩ]A VîÚYØäF058įoLzQÜųšGˆ.WNōãžŌC5ˆoâVbūÎCqž‘-'ĸmj^›WÔŧa¯Z7†Ŧ8´÷.oŽ2ŽęØčw“ĐņÍGĨĮĢØj‹ÃL™­apH†år<žxÆCõ?Až¯Á’Ø6ޞØ;ŦSJÍäž?q!åŖš#<āúV_Œ5ŌÖÛ@–XcIßËhŖL˜8Č|įå*ÄR3SĖīʑVŌėķũWWē×5h%ŊŊÛ¤9ō#ÉÛ´(<‘Á8=jĖļ–‘jÅ´ĄMEr&@ģˇ)*ģsƒĘļėúwĖ-yĸę’Ú\*yŅ%eģÃnüˆ*}qŠ’-R) ˜_$SH°˜ \“Ô"åąËtņČŊģĻēf’ÚļŠ3KĄĶâV&ip˛œžÍ3‡v[pÎ;ŒcÆ+)Ļĩ5ާzTœp}éŅĢ.p=ĒŊÜZ–Ÿä91L×=pjĘŗ*€Ä|âšZŗ:pBãۊdŦۀ,hĖēm•'åägˇz€c/ đr=*ĖĘ$ŖeųYqôĒvÃc…ü1ûĮ<ⅱ› ŗƒ¤dķƒÅ? Ŋ dĪz–InūßZfKa‹u#*“ zĩíÆŸĒ´Î‡Ní l>a”Î>`T‚¸Įå\DúE¤66Ķiˇv–]Ņ yDŦ˛dķpAhČWCŦØéē‰ĨŠÕQõ&Væ WtLŊU™7Ļâ>§ŽĸąŽ4ģĢ BíÚ{DË „ô§åÁÛž3ƒÄ~5Ņ#'æ&šŠ\ę6ąG¤­udLûQ‡qœ §§°Į?uŪĸÖVŠrĪ2*]Îŋ˓“Đs“]>‘ĻisBķę°]O#MļŽĖäp.;‚yöÁއHŽ ĩWvŌÆÄģ— ķ°ų˜žšU8įûĮŌŽe§!˛xNÔôø­ĄÔ§u°fD{yvšŨ—”sģ9āö'‘Ļiڃj Ą_ YmôéEü÷JNn‹ß9cÉč*uđõŦ‘ÜëúĩŔųö åČ^q÷ˆũjŒĶęCÃz~‹1ēūŌÔKų:š8oI#Ž}O"Ĩ?1ŋC#WÔ'ņ.ē5 ÖqąŠÖ2rdÁl`œ’F8ĪA×­Ë}Č-Â[[ĩäōFTė]ĨĪ_‘ üͅärÛW6ļ:žyķ•FÚ!–|㠀~Ŋ$čés:-GUÕŠá6‰/ÅąY#AõlcšÍW6šĩÔĪ×Ĩ] N˛Đí&e–čė–mģ™#fǎûDļšŽ.ę×UŌnėLw—1O ¸U”玕ģũZƒōüĒĒXcģg8Ž]ŽōK4{Ÿô}K[&O-Į1Į8AėrA'ŽMA4–w†æūÎëû^ÕFđÅ'î™O,ˌđ <đGÖĒșjiøUyoæŌ$•Ļ€[‰íäwÕFÕd` ž@Î@>âģä´”zúšķ/ ÄēWŽ>Í#”ŽX¤#.÷erī•PF{`u¯ND”ƒĶÔrzķYÔJú ؑía‰ö\ gØĶ]Ÿ”`ŽsĮ<ÔFbØ į$Τg°Į#Žĩ"Oܨ;Á'ˇãJV ŊšįŸķéPŊĸ\CøÕŒoš ĻJ°=jiɘ7QˇÍ!†Ä(Ŗå :cV7‰´Q¯čS؇Ž9Øæ'8!\BGLqĪ5ŗ' ōˇ#ņŽcâ&ĻúW…fhg–›‰c‚)#}ĨI98#Ÿē T~%bdՏ/Ôl_Nŧ{Ō ŽV<ÅâR:îã¨åąÔÆļ4 xîåcĶ/ī­§ˆBˇvҞ˜ņŸ”ķĩÔäp~\zİÉuj†ĖŪÁfV{‹tƒÆS‘ŸžN=O~kŅĩ]\瞂eš‘ˆ˙Aĩ}‘ăT• ąåģíéŪˇ“ļŒĘ*äēßÛž‡NkļRĶJ…‘”‡ŽDC<āō žH<ã5ƒâ(äŋúHZBÚB—1FŊžPÄgĒí#'¸*zĢĨÜxCYûe‚Mŧ~}Ô(ėŪtŠšŸŧ #ãĻXú ØÔ=@,ö—BYįC=ŦéœO9Û e/€OĐđXTlīĐŊô8Ģ #Ōĩi4˯2ßMŋ!Z`MĩČc˛U$œ`ņ×ų]w…ü§éz|—ˇ–ŌOĒÉæ,Ír7 Ûėqœõ ūÃę‘-ŨÜļÛK3mC6;Ā#ĄaƒØôās€[ĒĶ›Rņ.‡dÖڌоĻĒŅ8,ˆuÉ8-Ā,9ųŊǧ{nLm}PšŦú5ύ˛5”VÖb;;ëa˛mņũĶüÄerTäđ [ÔtÛKû'°ąĐΏŠ[Ŗ^Ø$‘Dži\!#ĄyäÕËxphöˇšÅķmƒGwĄ|›„#k~ĒäöükVķ\¸ŌėėŦŽ™NŖĨ\˜DĨÆ]۟øl§Üũ(i­ī}Î^ĮQ[ˆ§’í%{va˛Ūß $üã?y;Bœg×uz'ƒaņ›ŧ“G‘ ‰ŧĮˇŸ”3¨uãV)ũ­¨ß؈íįĮˇ'i 9(H*y9ÛÆ[š”zƒ5K[Û[bņ V!{ænÄH9ś‘ÕA’)Éô[’—sÔ­-Ą°˛‚ŌŨvÅK ôUôŠŖBrOLņžÃĨ*3Œ}Í9A顧Zåĩ΂ ”íS€§ŋĨ4ĒN>Z)4‡sŒĮæ{U]'$vņ–÷ĢJ@¨&]× sJ˜ėK#Ų‡Ëˇ\ŠBŋ{%AÆßZšT §=†zĶ#)ĶgšôǰŽbøĒĪFƒH“RÔtŅuöeB HrĀ ’;×=á÷7ŦoôŨ*I#>ZĒ,ŽĨ€#͒p[§MŊ+Sâ-ĘĮá1,÷1!*2@o÷kžĶ´Ûo- Ũ:ŪH"RAÁ/’§å9PT1]^æĻmûÄĢ%Į…î˜jhĄ"RbdrÁÔ€9ÉP9‚G­h͈Ŧc˛=˛]\YDŌ]‰¸Ë)ÜØÉĮ<öÜ*ŧúd“x–ËGē>+gWËۍí…?wî"ã$ Į~OZYikŠßCqS.m…fHÎ@ qĀÎN:Ôŋ%r’îCkâûé/-4ë æ×Pē#Ę-ĖL8.OB6ŒúôŦ?øKÚ˙V՘—žâQoj1ÄpŠĀĮŠbsņ­ÛŨzĘķÁ­ŦØąķcßaØc‘ūNFzāįŋÉioØ ļžųãŲn˛¸YEĪÉķ{œœú)§­ĒŊė+gš3jš¤r<Ž$VŒČHqļEÎ$ŨîPãĐtzqOęPÍzÚYĒK ĘũĸA%Aœ•SĪņzV Ę.!ĩŒ—MØ îáŽq fĮ@SĖ`:“œņÅu: Ûngˇ ,€ųˇR0ÁiœظėĒ@ü‡­&Æ‘ĪøūæömwO´ĩEFŽŪIÕú—_NŠ?9Ēz}ÄúÜÖēQĩ‚(ƒ6ų 38-МũŅę*×ÄKƒŗŖbU1\¯˜ŨÚ¸@䎆ŗ`ŽãRƒėwsĩŋ™pew’"ë) ĪÎ23ÍRøPžėˇ=„zį‡c[_9/4đã™7ĮęÉ^ü2÷ޟÂZĚæ‘!žpo }“POŨaęŦ ûÖ%➍¨Dđ“Ú´ÎNĶ  ]™‚ėUŗę/5šî-UƒÄzæÂė•x”eąŸžį=qĮZ@Ę ‡œõĪJķΊŽÍ&āŽÆi1␝…ĢŌ䌀Ü8äņ^mņ03k:ÄCl|Ã!>į#ĐņÔņWOâ"{ūiF-GSŊh÷y*–ĒŲÎI;ÛÛ§—Đ ëõŸÂĖÖ6;Ļ™DĻÕL†23÷}įŌĄøĻųˇ„Ũ{#Üļæo—§û!{ÖžąuĸĖŅŦQ8ŽFŠ4ÜØĮšūtåŦ‡„į|.o5kÍFú9c–(VØÅ*•er˜zpąŸøA}gmáŨbŒë™yp­­”ėûʁÚ7ōĪĐæļ<k/öˇm!vŧĻWnŦV4oÅc ˙¨RpG æ´įķtųļ]JZÜÄaŠsÉB zėŨ5c[‡ûZÃí —öJķÚÎWį\™ ô;ÔĪJĩĸą2×Tt?„4 Lmđ‰€‰ŧۋÂGÍėĸ¸=U­õkK}^"Íl“5Œė¯œĒĘp:‚U°~‚ēŸYk^,ąĶ$ĶÍŧē<Đ$Ō[­Ī“,ČāąRqëøbĨí´ĶØOĸO  2)-Âe˜<‘ꠎ2Füį“D[ŨŊDõŅ#Îh¯,äĩŗĶ‚î/,!;6ÁQ”‘…!¸Îy-]>”šˇŒtølĩ7ļŽŌÖp—ņ ųí$D‡øpÄČėqīXē\ļrMé^Ļ]ČÍ /ˇi;ũ°2ĀâĮ§câ[;oŲIk"Õ­ÅŊę‚T%ĘũÖüGzŠúķ=ByQde*XgiÆGĩJā1ĪŌŖ´q,*Āä„wĢĪ8ŪąąĨȜmĀûŅI.Ū¤I÷ĸĨŒÆ_¸ÅcŒUQ:ģ–WI qÆ*Ō) ō6ŽõUáĶlw6qųsøÔG`dŒRFl`îŽ8>”ˆ|ĩoīč @Ä Æ;Ķ5 |ĄųČúš¤KG ņæâkíÆŲˇ3HķI2¤ŽįŽMfXÜjVŲÜ\Ã,ŅŖGæ,K–b˜ŧqō“Û§qÎÆRÉsãDŠÚEQkhĢ!q7’IÎzáü*Ĩ†Ą.—ä‘ųŌåžÃæîtžÕĻđūŠ&‹|ĮČwÄ2ōŦĶ‰'$á`Ëé^ƒR€úķžõÂëVvū"đëŨIˆîmãmé#ÜŧCÉۜ3Ѐj˙‚õ'ÕÕá›Ī•ŪÆiWy;PDpëĪ`7c¯jčn5=V˛Ž{ģQ$„Kj˛žĮc‚2ÁčH÷ɯ;đ”k{}ŽiMå,× ÜJ˔ŽtÆY{t­7ÁēĩéÕoĩčėîu;‘äĀgã‰A`qž1ך™E]ﯛ˛8ô†}2æūÖ;Xå–ÆiÚF! Bnī)^qíč Ēeį}"á`‹L}ģ^9#į)Bå!Ž>ī|į'Ô×EãU[\Z<ĖŽŅAtŌŦ ‰]§xé‚PņęG\W)qsū™%ėxŒĒ)Ut=W͐0rOˇJÚ:Ģ™ËCßüŠŽ­ám>ü6æ–d*8ķ:8Ā˙hß $ ¯A^iđré¤Ōu[uw6đŪnˆ9ûĄ—?ĖfŊ ĄPXķ€1“\Ķ\­Ŗhģ̉:ŽĄpOĩŲŋĐ{QXŗDg`y`āvĒEŧ×%X $€@äÕÂ2Ŋ;uŦøŖ8PWkt'ƒSXÆEIzœc<ņА(T$|Ä˙‘QĘZG [ƒ×ÖĻVĖ&6'æ8=ĒЙã% /ŠĩäY€Ũ<*Ų8<û sĮJ’Ūā}™•Ė…­Ņ‘#’Aåō$99äpkĸņö„.u; ‹Hss,21Ĩ•6ØîWqü3éXöÁŸu5ŧ‹ˇBBÅĶ‘ĘœũėäûĸģN(ÂÖfÄë-á .ßElKąáødŗ‰%šÚC2ŧŌņ ĀĮ1š* `}sVũŌw*ÚiķEq,Vڌ­ÂļōBđŧj0¨áÁP`&@Œtį&Œ×u˛yčĄgS’El79Άr0p¤ķŠŲĩŸÃīa=­“ØM" 9e•, ­×i=Č$Ž+¸7w:”¸ž[{ÅšeÁG@r\uų¸'#ņÉ9¤ĩczíLšsi:Ĩø’{sŊ"ĩʓ!Üq„É,ŧpÃ'ŸzKm7Z[›ˆítæÜaœŗ<0$’—ÎÖegÜ p1ŒqîišvϚžˇˇ‚5ž` ´’8Cģ“œŗ;dî=`{zM}%ļŖu{,™@Å pĸŒ°aō¯NģŗÆ8}DCe§ZÁ} žŠaiíÍ3Įå;°ÄōA8äu"…­äฐIe,ąŦ˛|ļzd€¤öîœô­‹iíõdŽ-~hY-CÆgœFz+sķTp2=Ģ2j8˜#/ÛĄHnJâM˜Ž Ž01ëM5ÔNũŠīƆûO[MZŨã˛ļA>RŦ>d&#œōŖ<ŒķĮjŊáéîΉŖSZ†ŗoļ[gäW6c'Ž#Ķ,:\æ‰5žœ¨,öf9XBÎ ztÎ2+JÃPÔtEŊÖ š_Įq*›ŠC…‘›;@NN@ė¸Z–ē"“îTņ,熧ã{˜LŠjĻ+%Û¸¨X„Œá9$“ŒāzŠÜŗœéWƒû.#Žß ÕŽžáR13p¨ŠF '\d2{Öd“ÉâB V!e, ĩDžl¯4GĄ"$;0yV ž*MCSƒNŋļÔo4ö†ú<؉đ0 eh'ąķØĶ}€ę5iöV6s-ĩÍėv†í`ˆ(hâUÜĖų8éõ¸īOņ#Ęb‘´Ä–X’Q’Ųaĩˆ#Û§Z͍äÕŧD™1Šįfųüā vČŗ0Čā|īōō aÆ8M´vWRŗ­Ôļo2GŗCå,ģîįī( ˎ=ĸ1HNMŦ:ŽŖā Åíšŧ"o.Č-ڌ–`ācĐf¯CâØuČĨ6hļˆ#Æd8gRpR] įh!FFxÎ8{HHĩ32Íąr—=qžœŽxĪ@k^ĘĖÁ 2kš(ŧˇ äG°–x]ļ•GB؏!‡sĐ“ĘqCM–4ŊTŲęˇĶÚGį$“2ŨÚ[ʅã•rĨ9°9㑊ĉŖŋņC\Ū*K\<ō"¸dŪųCŒįjnjôČ8ÆsZ7ūļņŨ_ÛG 3“~[a,~VãļLį`Œë ̐ęJ‘’\gk(QČÁā§ŠjÚØZõ5āĶ’ūûRÖ5ÉŖŽ ZØG)ßķā€UsÉ$šlõæąŽoĄˇĶ¯ô[gDfģܘn!O-AÉNãŒî>õŋ.wi7z+2¤yĐ¯šqÎ3į#>īozžÆHc´s†­š8NŲ6éë•˙xŦ’1˙žOJ9‡b–(ļø‡fÜū÷}ĢĀɏwŠōkÕų+ˇoĮJņéŦ—t]BĘ8×NšģBžG1Ŗd)ö>Üt< bē(|Câ›+›Ģ?@“SŽ+ɂ]I1ä$/?ŨÎ:ö¨œyŦĐã+nOâë3Åņ0Ú}0Ž_ŨĪufĀø’Ít뀓q•ŽVáq‘ģļ?åßĒ‚{Ûé,.oėn×PÔ!™" ”s}€œã”˙PÅ I¯ø˛âÎægû„04¯+’NõPۛ% Ģ‹åÜRW:_…Ö Ĩi ndXîõk¨a-†hT*Ģ`ō9ú0¯D'#¯ōkĖ|­ĢøĢ[ņÄË#,q[Ā E(}€tG×5éhĀDs“Ž eSâ.;đä ū"Š%cģ xVE™ÉldgëPMˇĖÁŽøĢiĐāōzžĩF}ÆíÁ~ƒ8íøÔĖBÎ>ZxPSî’9¤fÃ(*{qI2îÜ Áũ*“ČxÂâ};UĐ5X•ļÅ<‘Č[…Bá@ čgļsØU[›k)#ņ۟ ÃĶRéQcædc ûŧß5ĶxSĶô­Iĩ8ŧûvÄ~NĀLÄ˙ŋá\LZ~Ŗ§X^+ŪXhņŨ[´"Ōōpōŗ! õųĪŋå[ĮX÷.ÉáKZŋ°š Bm:84Ģx÷Æ­ûĖ–%rÎâ­ižŊđö§Ĩ8Ö.omcœƒlÕl†#qqØrjíÖącĨˤÉĒßÜÅbļ=ēĀ[d’s×hÜxƒĮļiSĮVŖĒŲØiŗM$’´›ŗ"ÆįŠär8õĸķ‡á3ogĨ›‰mläšqæ.‚F\āņß`g–ä ąiĐ\5æœņ[Jãx[ed÷áEĘ˙!\ū—cuuĻYÚÚĀķ‹D7% @rqžį’ÁûŦGZąoĸ‰<).ŽŌ=­ėQ5ã4Ān9b¨§<ãb6=wƒTŌbk#QÔRyî"]€ûD~[1ͤįŽ2I<õŦÉvĨåŧM?–öĩÄ xĀ9Ļzãą5˛‡KģŌ#ē1ũĻâA"Î|—m…rBŖU8Áãן|û™Ŗ(ˆ‹rl‘eų•Xā3`rG9Æ;U.ÂeÍYĄ‘&’č\Can× ę€į™ū#ž§iw,bIVėŊŠ[ŊõÔ,ūs8F¤2JŒõäķPéíäÚĮrÁæ´hü‹‰,¨˜Î]G Š xÎFzdTZ\†ĘōM;Q­…äiÍ6äefŨŠĮ# ŒQŌ€š$W:ŗ-ÜļZl1´híđéčˆHla.GĮ=ŊëCNŊ‘Ny žąhĨēq!o>ܒŒN Žz˙u‡zÃļˇˇĶ ãŨKqm5˛Iņ5°$īÂœāŸœ}GãZz|‚=6öō(Ļ›íp5•´2D|ÉŲ‰iŒä"Žq‘ž3C@™ •œōē~æčĮ3Ēå‚r@wŒvn•lEvė쎚ːŽ2ĮrpNzŅܡt˛i˛KĢäŠÖ9Z0œí-¸…@$ƒŒî9#{sūÖ ąÅߨ÷ o›ÎW=ēä+`gÔU}rÚ'ģ´[™Œ’āų˛˜IHåw'nNĐúWOáOhqÜ k;ėéÍ ãd`t רú´{…ũâ RĮÃώ^jßÜox5t.œv@ú*ãĩ\Ōü@'‡L7r[ŲęĄÍĩÄĶaK¨îĪpFė`æŠéŌÛëZ†Ĩ ÷ĐZj›ZÚÖâŪŲ: ĘWa'98$˜éQę^ šßL´Ô…Áģ!iįr ëæ)Ā%N2G$gŊKļŌ+]ŅSVÕD—[Qq>ŠÄæō"Ē.7*đ]IÆā9é]†ą¤xĢOÕîŽü1¨@`ž“Ė–Ū`šŠB,Ĩ†ã˙ŦkÍd„ÉĨÍuf˛KkĒMs°í-挞įå8Ģŋ×üOâ-YÔVÆŌÚâÄŨƉ=˘ ī ų†yôäĐĶē°“îCĢY]xg@ŅdēŨ¨_˙ky÷,§ũkL:ēÛĸ3ī\l?7N>ž•–Ŋ¨ß*SLŊPo›É“Ë@NõŖąëž§Ŋ­ęāëũ@hÃĨib7%LĻe‰ūķōI8ČéÛŋJēÚö°ÛubIÄËm ĩ¤Pō@’{fš6Ūō Kf†via@§dŖ)’œd`ƒ†8ÉŽH׏]Õ­hĻ12œšWVtP7 Œ€:äįž*œUî$ôĒ™t­!t› ’ˆŽgUr‰4ŌæWÜG%@ *‚2~‚˛-l$ŊÜļĘ`•ŲmŪ+2䜅šÃla‚x;OCRÂĶkW”WixäQ3\žq Š 18û¤3)Ā8ķŠŠwæØ4Î….RXČ%p7ąRŦ:ņŒˇĻ9ÍZė&mKso§­•îœĶGvō,7v…Vī´eq€šãøã$U­#MÔíĐŲXÉeyȲÉdËæÛÃ=ČÁéČ8ęqYz€ē¸ē–åĻ…ŨĨķbdÆ˛ÛŖäžČÁënzû ­:ÛÃRëqž;ĐČW x;āž¸ÉęsPŨÎOQŋ]CíÂkM2!c.øíÖpv” #ÜŋŪ|sŽŪ•‹wexiĒÜ­íÄO*MoČ@`´íåˆė8âŦų.,'’ÚhåFĘI(Ę:‡§*ƒŽ;úã­Ķõ9n|5›kl'ÆC¤rŲÜw ‘œr2A<’fīm…kœũĨššđûy׌ōŪ’° đá‰pA ~}kĄ‡ÄÚŽR[Ë%ÜCËrbi uûŲ#Œ ‚ āæą¯´ü?Û§ēA%ĖĮ6Do_(/Ėä'˛€Û{Ķ8 ļ’ÎFŽ[ķfQ”nŲpüąÆIč•|đN~of4Í}o^ēģļ{XK5Ę%‹dĮ$ķü—ģ ‚p-vE`’[„t’ š‘œ"‚ûH^l*€“ÖŦę:ŅÔGOą”[Á/ßhSllßīģÁÁĀn $-ĨA+Égd‘(fbp̐ŲR œƒ’1ÛۚŅR­Ád3JdžŪÜA™eŧP^åÛp$ƒü8$ôëÎhĨė­ĻŨiígö­%x`œáãQķō÷ãœã§ZĐĩļ´›SˇÔĩ”×B@û&Ą™!ķ…+ß͊ˇŽ%ŨũÜúr[ÜGĄFēIC†‘Üp˜Eã'*^iÜ[™°jv-Ŋ֗oĸ$mz‚+‹›‹˛åä´&TŒrÎE]m7QŧŒE<‰oöto"$\Qdģhę=[æ÷Ŧ[K8îmä‘ãWˇ‹tˇû+–ÜŨˇĀįĶŽõŌhĶG<BVQNIĀäĘ7lō¤ƒŸZ%äeŠM>[ ģ56čV(´ô—÷>Ėīãp$ƒƒœôëŸsÚF˜°Iqķ–hí|ÅR4,vœƒËíĪC܌vkim¨Mj ŋ‚ĮYˇ% …vađ;ã8čĀįŒöÅsē՗önžŋlTi-ĩ…˙zdĘËrHĘzZ”ī Ų‘ŠÅoæ\jđÃ$LëÃÛÂtoģj(Ë#*œã 1ށõë{k’4{¸äŽw%ĄŒ—Œœ¤>ˆĪnMpßmXŅ`ŠŪi­ƒ`Ęb%]†@'‚fäw>€¸.&VŽ9#–ŪØĒžfTˆÎOĘ äg J%1ž.Õ..tß*âčēĄÚļņ€ˆ‡‚?ŪõîGc]×Ųm¤Ö¯ĨēžÆ[9Z[{Ä\Å(*Ob˜Īķë^eŠA D˛[Ÿ.l3y›šäĮNŽŧzØšôK¯iæĨ}ĒÃ1‘å_,$›r‚4šûĘÔĨd– ¯r‰g´m2DĶĸˇg‹RĩÛCE#ŦÁä´æÖmkQŊžÖYm6üéėôö[V*q¸Œ˜ ō3ÍtZŸ‡íŧ7¤}ž,‹Yĩ‹i!L’Ę>@A'¯*kĶVox˛IŒQÉ &ÖP”áOŨ¯ €qŒŠ ô÷G-õ=?ÂRi˛h0˙dE6y!R ž@ä7ךčBn-ޤWŸxČéúū¨m$i4ģ˜c–؁›Y•‘—ŗ/û]Ų•a“Ž1\ķ˛eĮbv=œQQˇÚ3ۊ*.YÜ^ž”Ë Fxāōxīšz|vã­VššÁ270įĨ‰ĩĪĘĀ6y>ĻĻFWWYG#§=ŊǝĖ$fĀ_cŪ¤yūQšUŽ8Ϙ4s~9¸xŧ9mi#í÷ŅZąü¤’F:B‘Ī5–ĐũƒSŽÖˆÎÖō=Ä;†cSh8=vĪˇŌē}Nî=5¯ä‰dĨŒČ|1žį8ükžökfû{ŖÜęąŒ*šGyô;HÔP1ßxjŦCŅ'‡n,ė´8Ļē!<›šĄļTË/!Âܐz{WS0‡ėĸ[¤RŠĸ\:†ÚËķĀ<‚:úŠķŨ=§‹ÂڂlŽ;ÛM^7‹Ė ŦlÍĮûĖ*Õö‘ã‹Ũ2uģ×-Āō]ÖÚÖ,™ČHUęxīMÅ7¸Žsä[Úß\Įn=ôHuOÅŸ¨ĩēˇũė† ˙h Ģķ‘‘†āûœƒšāīūÍ„VđB‚æ2'÷ŋx˛ŽėpĀmČėCcĨlhŪ)ÔôÛi˜X%͒ĘAH]TŠū7@[€NxčOLtŠ’mh5ĄWÄ]ފĶé˛ÚÜÉ&Ŗ.ī*!ufã%č9'bíSĩCDmÛGŪÅ2ęß Ķ,`[Šwdh'ĩXÄĄbŽņœ:‘øôĢOā€ōmAxĘšpćSíƒsĪâ1S{ ŞÔZ™cĩ¸ˇŌĻi]#¸ĩ mĻ íĉ#0 Üa¸Į5ũÕūŦ×k¤ƒd-Ē´eŠœėcž0[ˇ=q[rxZāiwĸXŒHļî¤;8 qÆ6ĀîÔŲ< ö*Åė.ޤãWÚŌD0Ā+É_lš9ĸg16ŗÉfŒL`•mԏ%‰ÉSĐvį9í]fŸol'ŠHŖ1ÉĢ™7œn'@JrxjÅÔ<+.‘~\w!ƒĨsĪņ.NxÍ-ŊÎŖm$1^ŦâšũßÚgr"öVÚ `ûŸ\‘CÕh Cy<*ˇúÂu!2#\\[ ØJąpBį#ļä cƒÉ Ö‹58ĩ]@ŲÛ<"ÖK¨Ä’ļ,jŦģú‚yf#ūšƒÜV~5îļbņ4qÜÚ35ēO Ž‘ÛNÍĨ[yÆ@÷=ëCQŌėô}֖rj:sœ¸šŌFXØcaI<2đzĐP´z†ûØGeÕΉvļūDö{RōîÎv‡E% ‚­†û`×ĨÃæZCmÅņŒ•€p›‰ã(ÉミCÛKT‡ėֆā¤Ģ4Ęb 2ųfE ¨­Ī\ØÆ:ķ€lčļ15ŦŒ^)$\Ɠ4d(TüĀõ_šÔt÷PĘâŨ™ū%ˇŠ+{fŽæâ[›ĸb–9¤ĪŠŅx?/LžāäöÚįô_jo§ÉÄķ!C ŽÕČq8ôŽrâ˙NÔm4+0…uTÔa[¨^?˜2ŗÜ{ōI÷ÉĢ)¨jVzŒņGĸ´ģÕ~{æÆį`ģqÔđĮĨKWĩŅIö55}Z×]Ōt ģ6Á.¯aŽFŨĆĖø‹QŌfÔī‡Ú’I•w*ēŽđĄXoÆŪÍųæ¯ëgû7Kķ­Ŧ%°GÔ§ģ†O-”-ąĮl°$ ŌZ–§§ 4ŗ¸Ķnė#ĩhœi´|ßģ‚Į={éJ)FĪ ÛláöĨs6ŖŠÁ‚öÅĻwc’ŌC'“¸ÆYvdúŠôÕŖž9ÍyŋƒŪĐxôiöŦ°éz?ؚUl‰$2ĢHß÷Ņ?­zk¨hđ_Nĩ_‹B ô›oCëE#đxQX–Ud,ËÉ^sĮz¯4ož:gōĢ Ė;WĐSļģg;Č4ĸK#Ī@'=MG0܄p:t§ä–Úˇž[cæĮžF)…Î7ŗ2Ě]” ßé7ƒ'ûÅ:¯âÁ*á´1s,ÖæŌÕŽ&ŠD/’š%rI§šÛĶšôZŨ ˙hÚ+ôŲŌíqÔČ?† üaYÜZÅuyĢčZå…ŧWȝ-Ļĸv˜[ī|ŧŽ›¯JéĻí9jËžSy¨júFšfÍS20ãseō8ūî1é['ÄÚ>ĨĮæŪ\\Ø–B ¯&9'vå7:dæšÛí.5Û(Íqh-[L3ŋËį–Vb@?Ô*>ë[Jđ}ÅŽŖowĢ^E|–Q}ŸO‹ËQ@Ā,1Ë~~šéĨx‘[Y{-OÄ­ ĸ]:åI“ @cf^ÄLU{x¯u=VÕ-æˇY.ĸ÷WģļGŧ… Ÿ\qč Šü]Ļ_[xUŽÚä\ŪE¨-ŪõO-P7ÉĩG< Žŧõ5OíwŸmļšĶaHĩ>ØÚ^XMĘË ŒŧüÜđ0>”ÖÚČÔuí-bkÍ;xšCē9 Ty`ᙘžWˆĮ=É&ĻŪØ˛}Ž(ÍĮ”-’e æ#1Ŋ:dtŠ´ím/Ļŋē[Aw‰^"Z+l°8QÎ=zGj¯K5ôK|ēÃ[”’îŪ%J™epG˙_­[ė$>ëGąxŖ}-îšh{ExãĢrC`sœd6H<ō8ŽĢÃV6Ķ[&›ĢiQųŋgYí–靡=U'•n9į{ÖŊĸA§ëÚ]æŒbM6ų*’]vįä§w Á=j¤ķi^1†ūY¤gŽhPĢÁaŨˇ~(Øë‘Kâ[†ĮmŦčē>—ĨŨ^IÄQ.įŽÎv„x<+*ān9Īlõé\‹uofæ&E{Y&`Ęā0sc’@ĪÅ{#…“vFw.Ō3GŌ¸īøy.5Č$›Ėˇ…cCy{I˃ĄáYŽÜ€qQ-˜Úęsz|Ö÷6—­M%öĸķ[[F %7Iŧ‘Á!OcžÍvđŨj7yõk8íĻY†bŨĩvņÉÁnä÷įĻkœđ†‘m6ŗ.cIŧ¸ãžO22…db `.åGF vz”,Ú|腗b—1Î9Į͑Î;ŠskaÄáŲâ_h _7ías ™oēŨFyúW§GŽW$(ãŧĘéåŗģĶn$ŽáŌŪãĖeķ`É“ĀQÉõވøÕaŽ‹~ØT8W‡?1qŋԌũiI7kģŦÆōčzŒaIßk*ƒõV˙‡Ã­æxkJ–ą…žŸģZşÆ7H…vĒÅĄbŌĮ€vą=öŠXx—T°ŌėtØtx¤xlî{ĖnĄO ‡“Š\ŽÖęrÜßũ•mc™#cēLpr0í×רV”‰Ļ͊ΉØáXážčÖi Æ~č }pkWQÔî¯G>‹Ĩ™ˆR>÷$Š`3ŗŅk˜ÔTGĻY[Ë {ŠÉ+łąDUƒŨ˜g˙¯ZEia6\ŧˇû Viundš–¸UČ>Le€Uà Œ0Ilãs“G…ėa—KÔ/mūŲ–ĀÍ4qÜ0$¨Üēæ2 tÖÖēŊĖzÄūFŖŠŲŦ‚Â’ŠbŖĄā*H9ę+ŋą[mbæŌúâ('šé"ždr°Šr .͌ģüõĸ.ú5$´ŠĘ+]`/l§Gh§|ą`IČ|ôÃ2‘ÉÆÆž+WCĩ}Pę÷:`“ė‘@ĸ Ÿ!n._qPyÚY“'ÕGáËx‡LžĀĮĨAËh°Æ÷i$jIøũá<(RŽ—Mņt|<šĩ ,ī,ā°ˆ›.ōy@‡wb#D“ĩĐ'ŠĶWņ–‘q!-Ūgh˛ ŗ,QÎ}‹2¨˙ŽtÔņËAŽ¯áŨ@Üļn„ ō/$ĸ9ĪĩĖžĨ¨ęš%ŌĪ<öŽV?.ŅŪSŒ›ĮŪÆ9Āė3^Ģy=ļ•§)ūΒKhÎâ–ЇōöōoąĻMscÄ3hZĩԖ֯¨iēĒŽŖĻácXAL8%øĀÚ¤ ŧ(Ét@üĘē…#đõ΍¨\3Ëå$ķŨ¤‰˜āÂÜž„6œįđŠåąÔ4BĶÄo´M(´´žØ&ã"ļÕvcü,Œc?wŪ“Yņ,×*ÉŠ,6ĐÆČÉi …Ũˆp9ĀüÄ(9Û×[.ĩ¨^:Üę–ŅŦ6(,CšBØûšéĀÎĨŊXz5š4øĘ+X›yŸČāH…˙d“ôÁŽYž:Y:ģZ™cRÜ 9qČęp `įœž+Ļ–iãˆŪN]dųáHH‚‰~vĮqúž1ëXWJo<đĪō<ŽĨ#ąíÚä’y<}3UaIžĶ ,°Į*ą!Ô0FĄô?ĨVu lčŦøm4ĄķyęëúRC¨Ø›=níŪXŖv*˛Ž ‘÷F3ÍC5õĒ5Ņs}؁Ž\ Ũœ `sõ¤“–7ûNō …bÛąĶ?3üë›Ö$šŪĶI¸HÎø–K…2™ÛĮ?w˙­[qŪĮ‰OØī?~&%æ‰Ôc*ŋ{˙MY´ũKQ˛ûg´rÜÛļČSģ炏aŽXįcĩT]žĸzŖCJ¸VšSHeCĖ/*l%ČØčĒúuĀ­ =NēÖŧCĻ_´nē¸[›y ÉÉ;ǎ׍5ĘÁw-ļ¯qˇk-Íŗ.îRį`QuįĻNO\wīZ×Auj‘Ím ö̆Œ'Έę¸,€2ēŖ“ŒŽ3ƒšMj ÜꎭĄˇ–÷IŊ,õ)¤|Ŗx!ĸ'×$°Ī]Ä•å76’i:‚éúőˇ‘YŽ<ŧŧÁJōŒ;a}IÉí[ļ7öTrš¸š‘Ĩ`ņá\ ģX…ęA=1øgjˇ—ē’Aglnãy`ˇ\ßŋîgRW#åÆ{UA4ė'Ē5ô¤ģĩđö‘${›ŗ{pŽøßo į9+Ž„|Ũ¯@Đ|A§kąnˇ/á¤ļ6J€ô;Ocę2­sZ΃îü­-ĩ tí:ÂŨlŌ(â$ˤ#1pã…ųSTĩ/ZøGI“ZmKRŋÔ­âō,žŅ6āÆÅ ž™9Æ{Vr嗨ÕŅÉŪ=߈ü{ŠKa;ĄiĖqė9Č]ąŠīÁ$@Ũ]>Ą‰ôo ][ ĸhŖ‡ÉÄRFw;@_ŨgĢŽãđŦMGN‘5 7L‰)‚y„)ōŲU@UËvį#Ģzčŧ3ĻũˇWŗ‡QÕõ °ļņę+—,QH“÷{ÔäŒ6;b´“VO ’:oZxžĀ›-j+°ŽÚ1l-q”#+åŸ\}úšėâ$⹋/}ĢÅGDŸKē´/ ËĶ2ūø)ā)8ëžOā+Ģ\$Ī5Í$īv_B'6zgĐQI Ėiĩp¸ĪŠ‚‘KŽ9>㚆á™đúdsVáxÉį5Zá˜ÜÃm@ŋŽ}hˆ˜Ā ų‡ËžŊˆĄĀrncž8ÍK€­‚TnÕ2ā)+Æ;šlE)mĸžÚHd…LR!GF#~9¯8×ôũCKđÔ-Ë$ļvķ-.fq÷F@@ÄmČRF#åĪA×øÂæęĶ­՛ēŽĘęyA‘¸ Ī>ՏĸÜĻ…ā +;ļ¸žI^9üāî7Ōĩ–A žŖÚļ†ŠäŊėdYë–ZœĸÛJēģŋ‹ ā/”§åÎyĀ8ĪĘ0 ĩáÚ^ŽöW9F¤âÕOúĩxÎ⠐v°oÄwZįLŽŅl¯åŠÅmŽŖXŨė×÷NČ?đÚØ 8 ×—Lŧm6ä['™¨iŽ.m÷žK¯ c–\äz•ÃVÚˇ¨ŠsøÚëNģŌd’īíRŦ..´Č$Yöã yČÜNˇCTĩQŠEáĸōY\éĶXąģ‚œ}–I寁ÕN@GÜøjŌÂîâãÄ6[ējAg†PŸŊBP+Ą8ān\đz“]KÚÅwe=­ÂyL†9‡U#~ĩ.i=€đ›=fŅ×Ė’đ¯˜§“ dW^ŲëZ_Úļ’ĸ-ĢŨ\w€î\œįdŒrI;—ŽÕ3[Oá-VXE˛ÜDqk,ä’')<õRĀĮŨ>ĩĨĨjÂÎ]7KŊžâfˇ´ ™6FŅķc-ŽŽ֎۠ÔŠÖōXՎôī•ĨšSļņÛģŸÃ°5WUÜö+dP™'-,9I c$šĮjŪŠ­‹ŸI$;FÛ!Uĩ“÷rJ ¤Ž2HÆpL ęŧ3á š|HúÖ¯ ˇŽmmžEb[ûíˇNNyÍ ÛV#¤ƒÃ:"DŠ&‘bė‚īk[ĩ§¤iÚEėļúU„oŧŒŦ–č §qÁžÕ¸ĀN+3ăū)­[ÔYL1˙lÚ°MÜŊ šN“§Máũ:FĶė÷5ŦLħ’‹žqPx† ;N°Iâ‚ŪŅüÔã‰W=p ØĮúgŽĸĩ46ŨáŨ%Bā}Ž´t ÅfxĸiZ8 _1#-žVIŌ<ŒXųééօņØã¯g€ßhĖ5]ūÜ.r~pAQÆ ~5Úø–ö=ÖÔÚŲŲyĶHFųŖÂF KmôqÚÜČļ–Ãí"eûT,3yœų‰Ÿ” ’9éŠę|maĢęvVöúdk*+ˇšģSŽ>RC Œœ÷äÕnÎׯ\k×ēö§.§kÖ搯žJK´Œų_”äįûŖžyÁÕ˛Õí×V]iĩ[ÛčcTŠæŪ]‚[q&UAUĀ ļČęä×%Éļyėī"t’(üĸ"Pę…FH8$ãÉĮ@:šh÷:°Z}‰Æ§0xãšuW”o´„rĘW<înkGS:Y†ŸŠiíĒXܲB\ŖCb60JdcžŖzâüBļžh’ ÖEœ+@ĘRE sœ†?¯PđúęCE€ę–––—ÛËK°:āt'æÚ|U=sÂËĢ$¨ˇ/n2cĀ rAÁäįđÅe $õ-ĢŖÎ,ôĒŪ0 ķ đ J“;H ⑨āĮ$ē°XÚZÂĶÚGönégSđ^­keŠÚ›í6h_Ę ųŽÁTō ĀĮ9īßÉĨĮ‚÷dÚI=ɖ0ëķÅîÁטÜ1Ōĩ”ĩ!ô—ú~žéuŸ*ė($•aTUč;HätĮ ’Lžn5[~â Ž“n(PC\0Ú5Ļ0ë’3šŖ¨^O}¤ÛY}†#qbâ=ŽøP‚r§Jī|;oggntBĸ[ëŽæâ@ƒh™÷tÁęëéŽô¤ųPÖå]'ĮZ6¯Ļ$3jŋcÔ AdķŖ0}ŧ•ÎWŽp*žĨŠøžm ĄļļÁÛŽy0ˆÍšbl“Āv Û#ž*īŒ4­6éŖ’ëHČP%ŸRP$kķ2’3PīžÕÆK­ŪĪq-›Īũ™öļiĨeq 7€JĒ…ääČ51ŠjņmnuÚæ›5•öĨĢj6­¨_"ZE*DŅG a÷aw1c‚ĮIÛÆkŨO§IˇK $wS2I:1§HŠ‚wÛ"õŽ2xÎŲØ­ÆŠFU›$`æ*$bŲ*ŋ0å‡n‡ŋSŖû=:Đãą“Q”a¤B\Ál-~ęŒōYˆÉęšlĩÍß+ëū2ģׯ§ˇ–k;uˇ‚(KârÛ[æÁĀnÉã¯MUbCãž}Ģ'Ú=ž•k'•4—7ŋ›qw+†y_É#Œ0ā ×vlc5Ī9]č2´ÄĪ'ĩĖs‚GZ+;š" ‰sĨ2uR€œuëR&Bcq*Îb|Ũz͉,Ũ-ˇņ4ą–c¸l=qéQ–Eį$ķÍ9Ŗ]¤Ŧ¨F:U–hŅ÷ ێFwzŠá.<­v5MîHU–(RžYųVD9ÆOŨoē8+ĢÔm¤Ô´›ģ™Ŗk‹w‰û…”€xü뇓^×ttKíÛÛ[D }BŲ¤1˛ã“ËPA˙sZÁ;hÉek[}wJĶ%ŌnŦ ÚSĪæ(ŨæËmd€r3Š×đöŖũ̧ũ˛×Y[ ËXÅĩãÜDHšĖrrĀûÜķË0ôŽF{Øm’)n­Ŧ`b‹"$‘l™A^ō÷fĪÍ×"’ëR}Vú ģemBâØ˛-ПpÂčPÔāņúVŽ7ßč*ē§öížĶõF2ÃrĄ-Î2č6| 0w ;ĶÎNpØ W‘_Oæi—AʙÚÚfÎbb=?^žŌ$¸Î3Î{TĪd4y—‰ŧ"šißi™Qšäíi …rØÚHŨŽšāTž Đã–ōęv….mí\}ž_8í2ā1VÁœ‚W œ×CņúXŧ#|ąÁ$ž`;Ä ōŅŽđ9ĀJČđ ˇßnԂ‰ÆUŠo2XÄx•‘xP˛ m=s“Uv⨴šÜl;Sqųŋ‹æéAP<ž1ÖŠę—ŗØéwWVöŌ]\CtYÛ°üëĶ|w¨[hčuŊ&åä ō^ZbH&lq– IíÛÚŗŒ[WCnÃTj‚Ĩe)ĪByéÚŊ2VIc×ßĨy—€‹p b=yäįĒÚvc™Rw!ˇe˛hĄąž#Žr(ŽsdHĢōr;uĻJ‘–9ävéRŖ~ėđ?‘ĻŌ#†Ī 9ⴉ›*ãs1鎕2”hv„ųûq}ęĖYV+¸wĮZ‘WämĀä…īV",íũŲԁ’}̐¸Ö‰d¸Ķí4+-FÆ J5åėāCæ/PĢĩ‹œdcë]mšf.ŧ¨§øW—隡‡WSąÔnÚâũ÷ÉŖZžÎäĮä ¸+ܗĄŗj-5­?Nēĩŗs2 ÖÂ)%;ļF›ēíĪRŲĀ^:â m[[šâ'‡mēÁqŲÄ1F@‘ļyr °q÷\SL×w“ĘīhڝåđŽčÅo> ŋČTG'jŽxÉS¸ĮZΞ¸ģ]6æZ ™D— Įžō8čÁā/@ģŗÛ ÖļˇF"ŖZÜ^Ī6"G{‡[ ”Ęīå›=7ģžÃĩvüŋđjÚH‚œ[éËk¨$Įîß ŧ†9í;\ę:ü×*‰o!„ÆōMs3,jŦģ— Ŗ°éƒęÛOę[Ķ-ĄÜ‘Ö6ˇ•~7‚íøs’M'ĢŠĻb‘‘$ŧņ…ô:‰æX˜8žDÚXŠ|o,>į×9ĒŋíŠ{ŠkŌC(ļmö–ņM3IŊIˇî'w™ÍcÛÁ'†æ›ÃŪ&˛x´æMÂËæ%ŧ§Ŗ,˜G~FF3Ī&Ŋ–w:>„šTŠGe#yÄF.ÛˆėÜāûķS7h°G ⯠ŋ‡n…ÂK4š$‘ŠZ–9ÚĀîC~Ö°-bÔŽ&Ž 17,O´`„ Ė…Ī`Iúg=1ėŽéZÅ­íĨ…õ•ÄņĢĮ$nC*œņ•õĮõåÖRE-ŊÜū˜JĒ$3i^snBTĄ’ÆYpzuāw§ 6ĩą=ŗÛÜØ#[yoįÛáØŽw äöÎŅV•Ö_ˇ‘´â'p@ČΜ§úW?”‘[Üé7Îok-¯—ˇ 0Žw Ušâ´­uHUŠ$sÉvöëļōūé2ŒînŠžū⛈Ԏ†iC^Bã.ķnØŦ7mûFOé•ÅaËtĢĨ4 ēĸŗįxū)#ÜVOÛîN¯ä÷ÅtÛ^,2ĒÆģ™š2¤äŠ$ķÉ{Ö­œņŪ…‚0Č-ŅÚC— $>¤ciĪJ9l!Ôį ct ž(qķ@€G¨éų׹e čJņģËfūÂt*Č-äfP~P6ācØŠöFP€ą\(?xņøÖUzŒív7ęHŦAkITŽģ `|;ž9í5xåWōŨw†ÎH‹oūÉUįˇÜsæp9û¸Č<ûqĶĖã=x•ĪUŪ×*%g|Žƒ?J) ÃMģņ}ī—ož‘ėš[Dų#CÁŠ<}æ ļ=÷kx´ĩ:Ú[TÕu -ėoØ/īÆÕōUvzc?7•KY:·yÉ%‹fB2+Ë~Ë(Čú{ũėuŽ“Wđģ]Gčš­ÆœņÁöq [wL´ÆŲŽā}sXVēw‹|5gjÍ*j6ČË-´,]Šļ7 ĨGËÃHČŒÖi§¨ÍsĨøŠ["ks4WË:šY#'i>ĖŦ>Ŗ#đä4oËāĪ\xsXy&Ķāeû=Á\˜•‡ËŸUä}Š&Õ­-å‹Vąxėī­įhÄF>d…ßhĖe€$pC `0ĮCVūՒ }zIü{-đČĘ|˛¤ŽņčzüÃ#=Ē’Ij´ ÔôėÛ }"ÂÖÚHĩ °öÚâ°#n63uqԆ÷âŊ#KŅt#Iŗˇ†Ū‚ÍL‰s RrGĖûŊōũUÂÍĸjž ļeĶĻ‹TŅäĘĪĻ^.Kz/gļ3ēMtŪ(Ķ|[áû­.ͅüÖ˛BļĶ(RŸ.8ėËĪoŌĻMĩĻĀ´ÜĀÖu? ëWŌÜ-ĩîč_kęö0e!ė ˇuĮąâ¨_xo^ĶOö‰W‚KwA=ēîķã|:nô(ÜqÅOĨø‚ĶÂßît;Ģ)`֜Lm,D KdĪBĄp:ķŽ+Žøk¨Øx.Ú=@aÎé"BI)9U#ķãÜUļā´Šå_¤“3cũ;~ų[…K ËĪR@9õ5Ą&ž˙eZâeFŪĖ)#pØÜį c¯ã^ĢÛjēåĖŠ“Ĩ-ģķ5VŸ€Ā Úzį׎+œđī‡4?ŨŪÚ\hMĻ_Ø>ŲžĪ;„l–_›•=Ŋ=iŠŨ\V8÷ÕeX$´ēČ E‰Lā á’OŽ;šŨņ‰ŽŧGæ9škm'q‰a'ånœˇ 7āäs€2zû·ŪŌ­Ž5´ž–"idv¸|…Q¸ũŌ­gxJËMÖ ģO éĻŤō\yĸyĄ=™ƒ.1ĶĄčAæ—<^Š™ÂčÖךũĀĶ­Ž.dQL!˜$yRWq"5äcđ×éŋ 5õ’+ũFĘÁI=ĩ€ũáĪŨ߃ĩz`z×}Šxv{Û¸ąÄN‘ YD*ũÖ;y8ôÎ=ĢžøK7á{¸ž"—]ē\î<„œ‚XõęßJNŖi´EMc@žđ~ƒwwáëK+xí•ZyÃŗŨNŧoųĪÜīĀĪLŒW[Ĩ5†ŋ¤iZ•Ģ…–2F,ĩ†$ōFæ9ŦhēÖŖ{ĨŪY[A¨[Ú촚}ÄᛍŒ{>nžÜuŽoMI<7-Å´7ĶŪLgk¯ė-öÛÛ6åŦ§ĸŒ :Š;ęWSSÄ>ŌášÔœQę1¯Úo§ļ ä”QƒšŽŽ}>­§Ãnl->Õ•"€Ķy{Ļž `'QŽŖ°—zå˙ˆõ-ú‘Ė1FGŲí‡gØ~ņ=‹ôä ՊDÂHK´Ō0g.ä—į˙WNÄ|š$×Ä-Ė­ÖKš“v֑‰ (ČČĀéÛ§ņƒ†Ō˛•…ë]ÛŖ\ŧ0¸Ŋ¯ ?69æL<™9äæ[m.oj)aω ŠEåīcpŠ2ũzpč3´z>ĸXéZbØYۄļĢŠ/žĨŊIīJuGI•c<á­Ąb˛ãhUāāŋ*´ƒũØũNfmVM'M›W(.o´Ã‰Wyæ9P"œķŪ(É?īU NiĩKŊG2,1ˆŨĩg’ ˙ߤUü­okqÅs¨$HŧŅŽ™ĐãĻĀ?ô3C˛v‡g¨ę:c5íĻe‘‰ķ"c´6ã’6ŽũßȂrۚ~ˇá ­o¨č ŽÁ†'E<ÆRŧcîäcŊrÖŗ+iņŗČŋ$yWŨō2ĪĶ0yëÆ Ųø3Á­|°ë:ėm”‡ĩ˛”¸dáäČô?*ŸŠëU;%v$tžÔô]V+×Ōô˙°´NŖ* ˛dáÁRCCs“Ōˇî›kp9&ŧĮWĀū>ĩ’ąiōČŦTy0ĮôG"@:Í^tã~1ĀíÍsVŠZ­™paI'ĸ™+ ~”W=ÍlhAĶüM6č#".G-Éö¤ƒ,9Å^ōĪ8ųsZ@͉4‰(Xã\Žõ4lŽ…]AęET‰V,$Ā‚HęiíÆ nΎOįZOnĮtĢ"7?Åô¯ņL˛x‹âžh8"”Úcû¤ķ>¨÷¯b†rę2GĐō˙ Áŋu–s¸Á%ˌö,ę2:žŸÎĩ§ĨŲ,ę,ūø^ԆkiîS%’;‰™‘IëōŒĪ5ģ{Ĩč–Ņ ŖŧR:Áĸą<PŖ?ĨhČā!$đ9'€+ņ˜Ö,´¨‘ˆēžr!–,9TōŲ¤#ąĘŒBAíYŨÉûĖ­ŽŽ;eUP7€oŧy"ž LÆTļîŊk‡o xgO”.ąwt×&0ķ^Ü_ˊ*6îÜ$ļ@­Xõ +ŸŗčÚĒ_F@oŗęŽKę’Ÿ>ō°=ĢŖ…âņg¨x‚-ÂūĐhÕĨ¸G ĄäĄĀ` ’:g#„’ÕĻĐ˙´ÚäÄL†Ä39É‚œ.@w^{÷ô- )íž"j'X†(ī.e‹Ë”´{H •$ ßwo cã9z_‡î“WÔėôûÖÖ,7ZĸÉ į`į'ąÚļ‹åЧc°ęž†ãzul˛6Áŗæ#œ ņÎxĪį^UĒiq\^Ą@rōEÁ˙Z8`‚Āč>`8*;{WŋŌôíB{ømė–âbööži$1Ī™Īlā6Į,N9#ŒÔ/Ŗˇh%ŽTŽHŽ"‘C–Â{v+ŽGqÛåPMK@vļĻŽ›âÍoJ„\  ÕŦâa<Ģ$ĐŠ’ëķęY}ģWS§|QŅ&EmA.t÷aŪF^6$ãåuÎWÆ+]Fâ I$ŠęÚúEVd< !I*Gį9#“XéÂV‡íÉ?œÄÁgE Îå\`'đĒp‹Ũ SŅ.|IŠŦˇ#Dˇļ×íäh]/cV‡=Qę ōįv¨|á­OJÕ5-SXtûmųÜŅÂwäˇ_\ˇž¯=ÔôŊ>Ūę8f•Ą¸ ļIÉ hAûĄXũUËũm¤eÖ~Ņ…dŠęķ~~l)c–ÆPÃŋEĘ­d÷î’JАWp<8âŧĐé‘[ø‹KÕ,4ÃĸMmrįP˜HŠo$98ˇ1ÆNzqČÃî–w—ÚŽ§$wNR;dšrōŗnlá>b ÆFæš|=§ßOök{¯ˇŦ-2Ã<Ģ(”+tiČí…#֔aËÔlõMGâ/‡í’Kx5kGģ*Db7wo•:ūbš-;M’Inn´ũT’[ŲD×_\ĩ…ŗ1%ō”—#$đs\îƒ/w[m!€NļŌĨŊĸ r:ģOĄÚxĮ|Rk‘XA:­¤{0ĪæĪ'’w6ÖØ7ãą‘¸œpN PIŲÚįaâõŗkZĖ’ dōÍĩĻč-ã%™€;äÚœ⸉¯>ßbÚuĻÛ[gd‰c}➺g$+„ÉœGßņ­kãm¨ÆeŌ4+@Û$ģK#$qrbåTwÂ0ã’1X.ĢKũĨ˜Žā*æ´Gĩq†Q§#8ĮáUd ŗĻãû=ĻhÁķdÉÚCĮƊp8ÂũßÄwÅkéēUΚ}ũ—¤ČąÂŧ]^ÆØō9r;tÃn•dfšÚ/PM›™m ķœ&GE\“ŸVuäׯxYôh´T‡Ãû$˛F<Ģä†=wįŪÄf”ß(ÖĻĨŽ—i¤éņŲØDąÄ/,OROrORkˆņߎWHVŌ´—ĩ6^VÆÛ|đ=‹zŨOŧŪ9ņÅÆšIŅâķ5F<‰†뎧ļėtĻ|Õ[; …ˇäl ZF,ā†É=ųķāÅ:w÷¤&ú#Đŧ5h–ž!ŋ‰CJä4 ÎI$B2sÔŗŗļ}sQxöú=1o]QĸŌZĀ9k‰UG¸‰áU?´d[š¯­WņVę °$,„ãŪWĮüĄ70ĩÄzÍÂ,ĐZjp4ąž$,fTcė<Õaė)Ĩīs1ŊŦhøĀm|aÕõ¨LPŽŪËi Í˙=$_ä§ęrMzeâGii,ōLĸ(Ôģī8Pä“K%ÔpÛoÜĀg,qĀĪŌŧwÆ-˙„˛i´ģ ’ē<,<×îŧaØz ãžũzt„ĨRWbØįŧwãņDč°ÄWOļŦo””äāā…āW­ÄXÚ@Y‹ŋ– ŸSŽĩ㗖–ēÅžŸk"Í}K"uÚĀĢÎAöîŽIöE$ČĖÜ ņôŖe‘t–­š6čĀƒJ*kbv Ÿ‰4W!Ŗ dFL>ŋ­Uƒ@lTŒ>RG§įZD™ų„†ØÅy<)Å(•ŅJŗĮ§Z­Jė ũYÆvãËéËc­2F)҆Jũwbŧō›?ü`Ôīĩ ¸­mn´˙7|Ž$”RŠĘ1¯BØ%>X`ÎâOzå~! H<9$°ŲÃ-ÍÄŅ[HØ[$gĐãkMënä˛îŗâÍ:ãÃ˛]éWRO-Ãh=Ü9 ÁÆq¸}IŊ`Ėmü%¸ūĖhĻ[r`•/Ė‹n8 ”“j†<įn{×;§jWš5Į‡īo,X$ņė2Jšl0dî?Ü÷NŦ"×<ĸĮ"*|ÂĀ†l9åc5|ŧŽŨšĘÛļĢâ{čol4ۋl^E]ØŨķd.Ā)bO ėiį]ÔtYōmõ;"ģĘxŧĩ|rAéœã¯=r9¯^ˆĩģ ‚4'ģ5;ŧŌ ÄƒęƒRęy5ņG‰lŋ ęiŧHÖÆEa&å@ü`€qAíųö¯ ø‹NŗÖõ VūîėųPŦr+ĸ Ë`Üvę8Įã]Xđjˇ°Ou&L]Ę Ž:60n•æˇAuvņZÜbĪüĐĘ@ĖŪ`P2NȔũ~ĸĒ*-X{]ņÎĨq ļ."‘YI1WÁtvÛÁ'žpHÜpÄ6#Q´ļ’o.G”†y!“rc$`{ã ķí^Ąāím2ÂKųá1]](+îaŒ}ČÁ'¯rxÉ'5…āĪ ëÚŲŧÖl ;QÜ;Ė’n™ŲI<1Æ>nŨꔒNŨf`é-sp#š¸{ģy•žRĪo#lrI-ō‚\rg>Ŧē‹KĩáŅu9įĩrŗ\€ vÛķĸŖqĐC]ŋ5V–Ā’ĄI'ˆ‚|בöƇ ģ0î„×–ī¨ĘxĨ–hŸËM#˜•Hįlb>m úQ}A’ÉmmĻÜØËöi m/˛t>Sƒ˜,j́ķtÎs‚kRŪËPņäōĸYÖŌRaHc)‚ Š3`†Āî9āc_Ø>‹ shZí”mK(ü×į€PĪ$qŽũ*¸"{XīaO(Ēē\s&_ælįŒāäšį¨ÃĩĐu:*{MOÃēeĨŊĖvZ•‘)™ˆ–áОĒwgōČāāP¸kŸ j˛Ī~¯3G,7ø™šV]ār lN ¯CÆ2¯/5-jā9ƒa‰›Ŋ‹‘@ĪÎyÎ$rzuāšél­†ģĸjvR‘Ä˛Û 2¤6ŗ!ę9 ;ãŒRzn=ĖÛŠRm.EÔ-Ô\I:Hæ@ŽUvķxÁĀqžŖ•āœÖ!ģÜ$…°×RL;šĐŗėÎ܆#`cƒŠuĨ¯öē[ Byvy^Lao@~a€G͞f;ą“Séú4ļˇs‰f’XL‚#4/ĖW÷`€GĘØ!Oˇ¸ĒVBԝuK-.ÄCe¨ž!ûŋ:Ũ%˜.rqę2z÷5kK×EԖė’XAcg–6Y'Œæ6“y'äéJfŖĻčqę76ļ˛]ÜÃ!¸} ü†f9ÎJôÎq\íėŅ[]X"†æ6U\”ķ9Ñø3ž“ŲŲ\ü?}>ÂKÛ[ë+äE,°›C’‡“å°|į9įĻ{×;§k’Û^}ĻÎāÁ¨2ŠņT”cîHģŠļ8āäæģŸęÖvēš}ÕÉ-ŽŨ"UGr€A8ˆį͎J­‡<%c-Ôģ5+ÁĪ“4maÕyųŽ9ȨRjęCĩö9 ‰#`ŌËöü–\eÚ\ķž¤œįŸ¨7KĘDđ$’Īq'• ,äqëōã¯l{m#ĸ’ÃRE5Ī~[#ŗ•a´Ĩ˛ÅH_ĶģĶô+ÃÚ¯‰¯Õ_U’ņ—oĄįĩuw:Eēki¤Ęģ,õ&{yĪŖ*Ę߀vú Vvƒl<7tTEėP9<‘ŸøŽäū˙ë€M=ÔeZXl¤ą=Õ<˙˛°ą˙õÖmˇ=Đæu_ßëŪŌ´ŗ:ZÚ4­ÃšÚ×.nõ§×9éTDRĮnG“Į(Ķų€.HĘķۀFG™ĒļĻ+;\ŖyĄ‚_q…$ŽšžĮæÜĐ49|KžåÚXt>ÎX}¨Ā3÷A'Ûã5Ŗ´W#;Áēm­ūŧ— yr’Ų…¸…~ōœŒ=8ÚF:ö¯Y„aĀëĶ5Āøv5“âˆdɂ8âPƒ.íÆĘôxOĢ—+Č֚˛4áāpEÄCŲMĪrŦ0Āäg×1”(ĀõĪÕxW-Č`}ûĶnÁģ|܀ŊøĢŽÄŊƜ33 $úĀ÷§‡ōՋąÉYXˆ×8•N™l2AÎ1T„Į0&#ķ>́\Ītßĩø7P1îgˇuPs÷['§¨Ũ]C>"Á;GĐzU=Ví°uč yzü¤zœÖąvi’Î'Ãzjkđäōĸ‹{hå3tųÂH@Sr8éõÁį—Ôo ŌŧKmw§4.$_#v<āüŊ•#ŒgŽš§á‡ņ—ü"z}ļ‹ĻF–j2O0ĖÄļs‚2x÷ũEė‹`’čë Mß,Wq/ž2A'ôÁÉ=IŨ‘ē:kOZ\ŲŲHÆ&I%ōæi_+īœúŸ@ŲĢxš'WōZ8ąpŽؐ2ˎ98ęyB;ŠâađW‰5-.ũ¯-âŗXãķŨ;]HŖ8%Itö̘I¯íåY#Ōĩ‡”< ¸c ƒ€ëŒN%S‹Ų‡3[žyâkģģ)ío`Ú%…Đˆ€áHę>¸=¸ø†xKųVÜÚÆ&™`a´@eų×v0œ“%•öЍ¯Ų`˛’YĖ‚($b§Ôģ}qČĮ¨į:×ŗ°ž}JÎū*ŗAh'¸p1ŨÂ8č op8ĒIDOTXÕõ[Ģäh5 ‰¤mÅÛæFāepŖŸAšŽ~îÎEˇ¸ŋŖģļŠâ)>Ņ89* _õ„˙bAôŦ7ūƂˇZš¨;mĨ“žû n…nhžÔ5m:k˜eŧŗ[Uōôŗxž[ąÉv.D;ˆīJ,’Ô ^ nmkMGifŧŗ­Čwre„–ō÷I“’Ĩ°3úÖߗ¤[ivķiąé’Í ”—´0m–‰w›’H8*wĪ׌ ¸'H–ßT˛×’î>ã'ʧ=Q’&î=̍Đ4 ũnÜÜkßÁbäŦ–w*§•ođĻ;{E÷Ví{Ūâö9^xڅÂÄj´:‹•œ&wf"hæ0+ŧĻ9ņŒv‚ÉĀúUK NãN–6šúEķÔÆ­ĩCÁ‘Į§ŌŊOøb÷,{­r~ōHš/3ä”uĢŋÃ(ĨžkŨīû7zˆä„ĮŊ; `ū”ũŦ/`ågáÆIĩTÖ­/lgÔâšGû īîL…ŗ÷qķø×iĢxīHēđŽĢĻß%֟¨YAqėžŪ6°Ę‘’=+CEđmļ™eqŠ$ÚĢM…vēǍčN@äįōĄūh7Ž•åũ‰ÉÄQļää`ā8aĶĐÔ9ÂRÔvi„Úí–Ŗi “A reČë”rFāÃ9ā‰Xr6ĩÎëŨœ–­cnAéČãĻ*ÖK ão¨­aąÜ͇M)ÃÎ[W5~Ö!ãcÔôÍ#c8ÆO°§î ŧzzU_Q2)­˛caÉåMF–˛,n ˜ãž[Ũ•Ž{sNÜ~cŸŽ*Ž#9íŽÂ\ˇš`ōéSEhŲĻg˙dt5hdqŸ\æ™ŋ;‡;ēEĀ”ąaĩ$;LŽĮ;ŗĮ(LŠÕQW “ž7:>Ë €§’3œĶÜ퉛 wÉæ Ø n ã8üŠ€Ö‰1œōG"›ömÅvž~zĶˍ€äã=AŖy]™;XŒãuUšĘO(7ĻāqĘĄƒMXCĘĮ frHúUÁ&é$Lž1ž}jŧŦîˆK€Iãæ<ūT€BšÉĮjz@„ō1ĪsPŗÉå.r7Œqž )“lĒ;cÍą3•1´ā¯#­ „ /—ŋļi˛IÁÁöjV 9įü)1Wō¤ˌú*a´rsĪz§&ī´DĘ8=*•&.O'ƒŒæÉ8ã“ÛscŒŸō*AČį č)šä.~ĩ"ĸ““Cô08ŠnzT›BŽÄö¨]†8Į­¸éH{=njíōžNqRģ‚ry8ãƒšĖšnč? M"¤ōåˆ ĻUˆšâ¤”<Įz’$Æ;䚃UĄ=ŧ[ sŒÕ뎓”ę9Π‰T|Ė8Į|Ք;Øc…ôĮ˜ˇķt<Š)Ėę‡'Đp†gÄq€sÍXFx㎘ĒŅdvq‚;U€ß ãŌ´†Á-Á€ÉeúįNqø‰Æ~÷ˇJQ&[h Jޤ‚@'å9ęGjRxú^*#ģĒ8ÜqÁ8⟖S’Íí’qT+Č#8öã4ÍĖd`Wã8ę)áđI ņœS8ãå”QMĖFw ØMÂĨ„īWnFGLņԊ(`ĮF<¸F0Hã'=ŠT‚7‘ËœQE.€@įË´ 9š?J•d™šA Glã4QG@ ˆ]E…ųŗ‚y됝[VäČ'ĨPĀlŖ2Ą$ņĮPŒc#ņĸА#’v0 F 9Îq’hĸ¤`ŌŦ}?Z‡‡a‘ŪŠ({ĄŒúsœqŌ™°Dŧv9éíE1ĸAĐĪJ™#8čhĸ“xYGxŠ•Œķ“īE˜ΏŽŖŽÆŠ(ŦƏ˙Ųleptonica-1.86.0/prog/brev.14.75.jpg000066400000000000000000001111241506303110300166400ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā™"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ÜTį854jO A?ėĶQOĶžMKŒcë^)ę’*dz“Ōšņ(}ūkũ3Å 'Û40Ī=)l3Ęįڐ0zœûRT{ûõ4×vU8ę: Đ;€ŋŠĨUÎpGãÚ ˆģ $=x5eFAę?OpØRŖŸsQėųpÃ=ęMŧw Œ.qŽhUfãœvžX €1ĮJ]„e†)GA’=3NÃw­;jõÉĮJp8b:į­;˜ŸģīE€gɁČCKžėzTÆĄm0P*Ėpũ9Æ?YivbG&āØČ§f+ØesëõĒS]ˆŨF@Š5'ÛĻōD2R3ŒqžũjÕŨ‡öĩ™–#,ģ€bõąœį¯åQ(ž…FQęNĶē‘͉ĻŊÛ̝äõÍVš.FF>` •L…8g¯oĖTwˇ6–ō–xŌ\o(Ō¨ {‚jy[.ņEã)'{Ōžˇ?!lŠÆƞļ°4×pGŲZUÃ`āĪ<ÕģËÛ=2ŗE  ēIäâŽY^ĀÜl[7™‡'4øo–@ŽŲÍe™ĄũĶÛbO9ÂĢ#)VÎĸ­D™#æéB¸šEœõābœ ÷ÎĩBWhëĪAĮ4*ļü“ĮzĢ“bÆ9$gĶŌîúŸĀR*1wô ŠÜOôĻÄJģO9§aĮ@*%]ËÆ@Ī­J8ÉĪsMņ‚qĶņĻČ@<ķOųĪ­2EäĐĀÄÚs¸ŸÂ™ŊUX’{žĩ1RČ~b{Ô%AmĻ ø˜ēxR3ŽsRŽ~÷b;Ž”å 3Ôsô¨¤”y4Ō Œåž÷|t§¨Į9Ī…@%‘ĸYĖL]Ų#ŋ?Ĩ×ö‚øŲũŽēQ–ˆ8Ū3œ})¤&ŅyS´u5 Œ•'‘īŠĨ{ĒØiVÂ[Û¨­ĸc€ÎpIöM]ÖL!‘€e#ĄZvĐWÔUŒ…Ÿzw–ä3֑ĻXäTbFã´a{ã4‘Čs鞸í@\s'=¸Ļ2rzU=SW°ŅíÖ{ë;m)bN3€IĻĮŦ[\Ũ^[EŧÉiŗÍų0>uÜ0{ņųSŗÜ.‹…FėcšķmKH}GâÜ:mÔP]"ÃqģĪ9N~~rx^8ë^ˆAE'ĶŌĢĨͧÛÕ^1yåųŒ¸įnqœãéúS„œoaJ7<÷Ś'^S!ؔ˜Î% ’ä˜ÆpX!?÷ÉŽŗYÔ ›O…­n!•oãûų [‚ĮØs‘øu5ˇĻÜÅwqqnĖđ?–˙)Ā;C`Ŗ Ŋ<F7ČA ’0yãĐUķ6•úʓĐō˙ŲZé珘ųrJ'–Ū5HŸĖ9|+–Î í,yė3Í]Ōü=øÃUšá‡Čģ§™lÛ°PdĢd oĪ×Y}ĢÚYĪR´Ĩ›æÛlåW n;G$rjä—§—p^VÂ(ÉĪSÛØPæŪŊÁA-'\7:ę_Á턉lęļōęáŧÆP |§#ûžâ­xËH‚{(îVĀÜÜŧĐ#yví#íWē@ۜ×T'ŒÛŦ‰–ÆāTEOåSÎĶVč_-Ķ8sCŽÜh‹ocæEünËą`ŠÎö €r úSu5ŠåēÕlŪöÉíÔBËnĶ`NW äãĩu—7ņ[9VŽG‘˜$Q Ĩb ĀŽĮ’@54‹Ė0ŧDŒ˜ä` úvŖ™¤МV…i}Ĩ[iZ[ØÜq$ŗ´ĨIXT1*¯ŽäzžĻģ_܋€ŋxÃŊHĪ….¨Xœ§ŠÎܡRųÆÖT>iˆų€ŠĀ=@ôČâĸw–ĨBŅĐ× ŧō}i‚ēõÍ9įXę6ģ&r¸ŨÛļF~ĩKTņ5ŊžĄ­ĩÂ-¤’í™ T‰#,F@ÆwÎ9éJō}dē˜ÖVž&I™Ŗ[˜g "Ãŧ…¤)Č8 …Éaę1SĪkâ´š•­îŽeQ¨›¤\pˆŠpOŪbņĐŠÎĻąâ‹;{{ømn¯á@ǤĒ퀙'Œe†jĖ$Ō|¸˙Ķ–W`˜ŦKmƒ€8ųŗųJ|ŌŪÁeÜæâĶ56֚[Vžgļ’+ydyđ0Ēōažo˜fHĮ~ŸSLŧXĶ´(Žf‰p"”ĖeģšvMˆUˆŗé´q]4ē۟˜–ŨĐĮ<Â5a*ĖÎô÷'ž•x¯B™K)yZ FÛgbŽĖP‘× Ž=(æ}‚˸ēƗŠ6…žžÎ÷1ĮR0›dŽ€Žü1î@n}ë.ķCņ K:ÛÍ0‰mŠB ãs˜Šāķ’wÛ8QƒZ˛øËBļššŪKŠ7Āë…bbādPG֑üg¤5čƒí¤‘ČŅ”hF2:´).eĐzw9øtMn;‡´ķ[í‰ĶÁ$“—eG6„ŸŪ;dũ*ü^Õ-¤h•Ĩž(뀎i¯âcģp|cvw`*ÍĮ‰-"ŧfG"ŧĻæ# ˛¯?x—léœsNYÉŖĪu™eH@Øš]įjÉížpižnÂ\ŊĖË ę֐ÃĪ ˆîb [(â Ÿß ãŋSU­|%­‡ĩyE˛[ęZ°´ž°ÕšÆ+tpįû@]Ąei (=0OĶ‘ĄK H%šJ˞ܧ–U$8m äo'$÷ôĀ ŋņÕÅ´ņiÖR,†ŲfsōĮ,ĄvŠãÂ“KÕ 1į5´īĪ{ ¯}Į Ã’Hãbžc– 1č>_Āį€ER!ÕÄ÷kl"vɲ6ˇwteu‰Xā˙%°AKßî?té—ÃÖmi´ĀYÎfœäØėKŠĒŪŅ4įFk‡€nŽEW¸Ú”=ĪŪ$ûœÖ~—Ŧ^j:ŧMn‘ ‚{€|†ĘūZüŨ2T6}sÅcI{uŠĮ`ˇp9ōŲ”bâ|ˇëą'šziK¸]v;8<'ĨÛĻ‘]ũ°`~~qČ ČÉ<ãšCāũ+í+1YŽ[Ė9ōŪo˜Iú°\û*ŽÕKN×ßGŠúų^ĩ]ėTû9B7ÉōqÔđFN;SĨJīļLļ×&āÆ&}‹+|Ā•Î:üØč8ŽZŲ|E vvv sn;xŧŲ­23´ģžœ)fÉãiSņ*Ãw5ĨŊĘËs1gŨ1ą•TcwPąŊ÷zcŊķ ŽĮVūŌno'ģšĩYe˜~÷s1RvėÎÜāŖâ ˙„kDxcˆA˜áTQ™Xœ#n’yģwĀô•ĸÜx’{ÛI/`–( NŌŖ(fpTr3€¤_—'Ž*=@xĄouI­î.Í&…-ãXØĢmķx$…É#ņô¤“ŊŽ;­ėZ›MŅ$Ŋļ‰ĻS,žKÜĶM +…RxféŨøĒ|5¤GmwQĩ*ä-Ų1ŗ#<}ŅČâ¸Ģøõ¨L–ždˇ&é-Є‘0€<ĮįˇåZl|isw4qŧ°í*ü´ãrÃ9'‚ėG§U4ûŠëąŗũ“•am-ÅÄsEi,څėIi'jŒđ tĪ@æ´%Ņt)’;)l-åUbV9v—ë×ĻqĶÚš†oŪÚĨ´ļˇ­ Ü?1Į GŸpČ˙–c€>cœ`UËKOM¯rûšâIĘÛ[Ūá!‰ŽÖR…‹|¸ėš4Y÷×cŧ‚$ŽŽ4XâŒT@P:<ōŖå?J‡N횯ŨŽfrƒÍ16S~>lgœg=jß$c=EfËG<Ãå<ŠĒ’îRvžĩpō?‡ŪĄeęN=++#‰9ĢH@‚y51Člt=M.T:zP€­w¤éŗŪ-ũŜOuId…pëīČĒhúlÉ"-”!$.ĖYÁO×$V~ˇeĢ^xĒÖKiŽãĶáĩf‘c”"ĘážUúž öõŦ‹}#ÅépĘ÷w‚é÷<Ņ´ĘĨ]™’6¨˙ĀÎ+e73oČé'Đmä¸ĩ0CmJé$ÛS ūXũÚņØē>}2Kåļ‡JFĢÂnōĶûŅį¯99ãČŦøî›BŧŨ¨ųåĩ+× ’"U_ *úįĨEáŊ?Tû0ģÚSΰF„ŧĮošėŌ1(:˛ķíŪ‹;jėtÆÂÉIe´‡vÁBvôÛôĮjØŦå”Ėmãķŧ $ȧ`OækŒ:^ĩoxÖ3"ĪãžåØHp;`Ÿ1‰=*88Ģ~ÖåKÛu¸ dˇ1Į›§ÁRˆ›zq‚ŗÔ’=éōy‡7‘ÔÅoše‚‘Æc ÛÎ@įĄĀ^€įõŦ]5âĶô'x ¸ģ•$‘Ĩ—ÉÁ“30‘ׯ Ásœę*œŪÕŪ[“´X Ņ„ŠY•ĸŽĒƒœ9ŨŽøæĒęfĘ8Ĩkfe´2B%a˜’6 m9ųÛwN@íBŠļáwØęĩK˜tŊ6âęH<ԉClP2Į8{æŽÆÁÜ āŸ”Ž¸8üGø×+ĒøcQģÖ-dˆŲŊ”- U•›ríŗcƒ×åį<íÅS˙„;R‚m)ŪâÜd[žlĘd|{ŲĮˇĨ.TÖãæ}ŽĢTÔ,āĶnnî$K`΂å™2xëÎGCoh57Õ&¸ <‘G–dˆ.æ+øî$ũ+—“Āú‡•l¯sdîYķ Āo?Ív™vč:Téā’æI.ŪŪQ%ķ]ģ,d\>Å œ Ž„ j1]BīąØIwnŽëöˆō¸oÎ įđōĒ­ĢZųMÜ Ēšgho¸N}pqë\ēxĪâ;ۛ™n}ûI ؐFXvÁ“ ūč*ãxÍĢCöČšKvķEŽX$QĒnjŸī(o͚9cÜ/.ĮEö4Ü$S\Û´áÁK)m܌€{đߑ§KŠØ[ÜĮm5ėÎĀ•‰æPĖä€Oã\Ü ›OíˇÉŠCd–Öķ3ĄK‹×;^B äI(‘ˆ÷ l$įŠ-ŧ‰|?ivnE˙ÍjfŌOē™ ÷`öāV­ˇˆ4šÕžÍ}o3/Ėá_8PÛI8÷Žyŧk-ÅÛÍŠ^9š'Í— ›ĘŽ8ĮĨiéž ĩą’æDŋšiŽ-Ú'oÉfnŸ{$~B›åî4åØÕ´ņ&‡sĨČŋ‹ũ)Š[nāÉÎĶ´c4ļ(ŌõkŲ#ąž†e‰AlnrJōHõŗbđMœwVs­õāû"D¨šM¤"°ÃīŸåLĀzJG<]]˜ŽãHZ3>ŨÁ2z¨’K1õÉŖ@÷ŽÎŌíãōâL&I'ŋ=ęĮ°#>„ÕK h,láĩ´EH!@ˆ “´€9æ­Hä÷¨eųÎ9?…C'ëS1āādæ›ĩ›’9úÖ]DČ@ĄqK´/8ũiÉČÎsœã€ryĐ熎e§_ØŲ\9^ŗ, ! 9Īč* ņnˆ" ļ*ûq’K†*0rvœ~ĩ5Ú厤n%W‚„FŦÃu#Œįņė*’ø+J‚Ũâ‹í[L›É2ôo(ÅÆŲ$į×éZ.KjCæž…¸5 ÄPĸHŽãEōËIŨWPOŪ#ëøSˆa[äDŪmØCb?ŧŌą@ô’zpEVšŅ´=ėSí/m—[–0ÄųîSbĻēc€Učü'Ĩ´É˛āÚ'Aį6"^ųč}iûĄŠ^ĮÆZœ–ļbTyœ•fe ĖĪ“ČĮ%[ŸūŊVšņ3ÜhöpÛ=ĮÚī ;&H‚yk$œœĒĮôĪ­H|/ĸŲÆc[`@EŒrYÆP{pÍøą=é[Â:)kvû<ˆÖáefq€ŠU{úfâ+H†×ÅÎ,‘„î×Ō”ƒl8–mĨš ĒNsČĮaZ߯šv§qo¤w{§‘UYĸÛđzôũÛvíéNģĐ|1ĻË`Ķ[ĒI'”ČØ R@ĪrOÆMh˙Â5ĨÅ‹{tŽaØämĮaų`Œ0<Ž=yÉÍ/tz•Ž|Iki}ƒ[O,ÎņŦށvF\œg$g…'< Ôū-‡Q‚ÔZEtYጅT$RåNOd\ŸMÃŋBßÂûotģ{„{ĩ†&7720Ė„FČģ†rsŊųöÖ­‡´3Ŋõ…¤*‚o67U?yAN‡Ļ0qųĶ÷R JŸđ’ÄææskpļļŌ´f_—ČÖUQÉÁöę U‹ÆĮėĐĪ>•<142ܰgHQA Žå‹÷­˙øGtW[ö1:O/Ÿ(–V|“ģ w7]FöŌØZ,~y—s4™Ú¨Ûx O|gĄs[2øwOģWßiC*F§ĘQTīŌ¯ÚøEŗ˜ÜA§ZÅ6Æ@ÉۈüIÍ4ã`Ôæī|l°=ȊÅäÛa 'Ī3 „'|Äã×iéUmüz. …t¯Ū+G~ü|ûådāãĻÔgį°íÖēáĻéžsJ,-˛?˜\D왇sĮ\“ųͪԴM>Ô!N!P0 ÷É#čqEâē›8ëJë‹IwļŠÔ\O(šB˘Р|Äå~›…EâMeßû&åŦ❭‘ĩ7D“”]¨#<ŗŒ r@ÚͤémScgˇbÅĖ*rŠAUéĐ0)%Ķbš`fėUG8Ī\1ČĨ˝°Y÷9KĪ\[ š+$¸(Y|Ą.×fXNF™›hīļŖÕŧo.{ö/˛Äķ,<%ŨûÕQō(ã#'ŠĮFãŒ×j–Vp ÛÆ<Ömœ–ėIõúÖMģØj—2mŌKGķڞ$(ėŦ¸Îy+×ėúPšė={™Sø­lô8¯ÜE$íģ0†)†[œä€{æ˛.ŧDĮYˇŊfÜ+C‰Ž˜yōWŽP~cšŽ´ŲéÚVŖuŠŦĪw¨´pųHĒ7mVĀít1%Ž{g Ģ67V×ĻYb´18•‘ˇĸîŪŖ ʓœtÎiŪŨĢ8Ããgōeû%ŊŦČo(GžՔ2™Q×ņäã—i^<:…ÕåŞEŦAŠŦ…‹1PvžŪŊz~Fģļn˜#‘°zcųqô¨Rã2âEÜşŋ­'%ØvwÜķ™ŧRaģ{ŋÜŧŌ ¤I°Ŧ1•÷˛ėÜúöZ“Įˇ_Ų÷m-ē:Dü™Ÿnėĸ…ČĮņ;.sÕMw4V°4Æ ×de›’;})÷wÖÖV2ÜÜ&"ŒdárXįŽ=I#ņ4ԓč+5Ôâ5/]Ŧ¯ŋ’ąÚŦėc˖ÆPžŒōޏ“ÍVŲ?Š…ÔđBfĶíĻF¸ũëh†*Ë0ÉÉ÷ÛZęÎ×V–ŗØK ÷*î t`ˆĄ9'=Ë(úūuĄ+[Ęæ áF×įķ܂ԋųŪcô{¸õ>Îū>Vâ‘NûÃ= j• -ĪĩW‘‘qŋΘ튰8ÎEAG>ãQ×ķ uÆp)ÆT‘ôĪ4ŌôŦ€yûvw䓏ĀR dķœīL9^xīŽ´¤=Á8Å ׋üAyĄĮj–‘a%Yd–s F¨ģ°î}Îd7Šu˜nŪ{rÅ-ZF1ÚąÖ$Ns#cĶMtž$˛û~Ö˛j eĖy$•ÎJƒ¸œcŋŌ¤°Ö-îl ÔŌÃew†iF6–!įe@<úãĩmšv3wžį9ŦͨšBŲÛâk;F¸ˇfQ1Q(QŽĨ›ƒĐsÚŽę:æģ˛î ;'ŠxĸËy-XĢĘeTĀ=ëĪ`sÎ t°ŨG7œDˆOå’$dOCĮ^†žšĻšAŋļ,ĀûĀ8 ‘Ž}ä}(æō yœÕüEoŠk‹i§@„Ë$V‡fV&f{’ĖŠ„÷4š5˙‹_WŗƒQY|’¸™ūÎĒ ŦYnqĮÎˏRp;í[Fš–5¸ˇōã3ÎS–ĢŒä€GŽî:PÚŽŸäŊÂj6‚¤hÚ@”6sÆzņôĸúlķ9#uŠM=Ē]´_jō$hĸ<¨ 2$ƒ´™$Įn†Ē]^ø–ÛOK{ëÖĩš’ō;q<Ē‘!Ė$’>č“÷č:āwú,š<ˇúuÔr­ĩˆ2a);›q<į?ËĢ'ÄCFkĢYoîD-z>ÆĖPLŦ~î=2zŒzÕ)[K ÆUĖž(ĩšüAÜņĮ‚ŪFTß+,j zģ3{íÖ¤˛x™-ßNŗŋ‚ÂŪÎH!ˆp# äg$ũüsއą'ąOéŖōoĄhž˜7̀ŠÛKgÆjŦž3Đ8™ĩ8‚Nã8l2–ØN™ãڄßaÛĖĪÕ ÷ü#¯c,3Fí .ûËiJŖa‰Ëcqį˙¯Yŗi^+dÔvIxŗŧĀZp‰kb‡īA202NĮ5kPņ•Å֜ŪtfÕíy¤Ų#7— ;–ŨÔqˇÔÖÜž"ĶíŽŖ´žå~ŌQ¤+´ôPI>Ü֋ĩĐ,Ž~ĶL×úæô[Ū# XŖˇŽ{đÃs92“÷š¯ˇËÆjŧÚ/Šn`ąC{w‘ÂW[ĖåÚmĖO˛ āwÜ@kGKņlŲ0ÉĒL~ĶåD]Ũ÷—3 ˎž‡8Š—Æē9Q ¸eMĒûš'ä/éũŅ“é‘ëNōžˆ,ŠņEĒi~ ēšÔavļŗHĘķo*å‹"†Īlũjƒh~)‹J60I#,ŽŽĖڃyŠ–ŦģŽO8v88ģãNĪ[ˇÖ­ÚW‡ĘŽ[Œ@U?ŨČ$āįÕ5¯t‰ãw§%v†ŨÃ9bĀį”lú`įĄĨīv Ųŧ/Ģ\]#ÜĪ4‘>¨ĶŧmxûRI@Žā­í͌T3xg_¸ĩķé…ãÍ5ÄØģ`ŦÛYcQÂ’Ü÷Zöž'ąŋÔ"˛[‡w•C.!`SĖãŠĪáL˙„×JX¤*× žĖ2Ų=HÚOâ;(ŧģĸ6ÚĘë@đέ-ôÍ'–Í*´’–,‹¨ÅŨĢ.ĮÁ”UĖBM“5ŧQ[Ģ\Č>@˛ąÁęK6Ækzī^°k \[´ánŖļV{pęŌųr ‘Ŧ9=ˆöĸOiíœGt]}˜(üĪŋfGĒįŋõâ‹Č,ŒīøGu™gąkøínU<ã*™ŲUz˜Ø s„]žŲęyŦõđ‡ˆ,ė4Ԏ{X5ÛrRg™åB=NßâëÉĮ¨Ū“Į|ov¤\jÎ$&r˛Î <üĖ+kÎlģžJH‘ ŠācÎÚ &p-á_OĨo$đÅĖ›ĶeÃf2ĶcŸPˆ v=jօá-bŅŽĶæ[â,ŨģaËģw úä÷­É|_ĻA.f|Ė >\E“vŌŽø>9Ņå&nĘšDP!9%՘ø!į§áEäÖĀ’Os2j—ˇHņKįßC#n—Ąāđ8ÉīČÍW‹ÃwZeŨŊŊŨÔR š‘Œq“ÆÉglcžŠ3ôõŌģņ*Ũģ]F&¸ˇ‰]"ÃÃÍlIÉ@Č̃Æ\—Ģ k3Č莭åpC'™ßžn}ʎIĄ6FL^Ö§K‹BŌZĮ q1wå8 8īŽ˜âĢë_ ĻÔešxÕD„ˆ•™†ÅėAœâ,OŽVÖŠ¯E.›ĸMfˇjēÄr"A…ÆŖÍnũÂí98ÃsV?á:Ōe‹É >O˜g•@U>X“iį9 çã­’Õ“ÜÛŅ,¤Ķ´k )YKkxá-ŨʨgœVĢc8$ŠĖŌĩ ]ZÆÚö͘Ã:īRĘW<ú jōŒŠÍ–Ž|äķŽį€9§Ē‚2OJxRNŪ1ß Å7‘ž}=k0¸ĐĄÎâNZpŒ“–<ž´čĀĮŪČ §0ųõīJÃšËø›Ã÷ZäÖ­kxļßgíY#ÜŦė˜VôČõįŠŦÉ|×P¤WwH‚h Įå2ĢE[đĀũâXs\×G­ëØ×:u˛YMu%ô­{.`€Iā@ eé>$ŠëQ{%;\OpŅ´’ä*Į…ųHr@ôį<ŠÚ.ihfų[øRę]*æČj,=ԗČ-ÔĢÜã=˛ŋ÷ČĒīđŨdÉöÁįÅEy(ŲÕČĪMäŋŋĘ;sĄ'ŒŖŽÂ}E ōlŌWŽiT›ˇp~čųI¸÷âšŋ9„riÃɉšeœųw39 ?{âšįåkā™-'ƒĖžŠhx]ĸ{`FØ 1¨ëëķQ'€Ö[[(Voôm…ĖvČ<ÉD›Ėœį Ãh=zŊ*ŊĮŽæ‚)$—L‰eGLĸčlPĸ>wmį™UŪöæˆ|]5Ƨ-ĩ¤HōŪM™.X&ČUœ1,÷ÍøũÖlM ËoákŨ.ÎxįžäĖL—8UĖŦʼnNq¸ņßĻEC¨xz;‹›+8F˛€Å1+¨a¸¤`r9íšÄĐŧb÷×ņÁ Q$W qpĮÍiPáWh6b[@@ģga´"•ĀĮL†lúî5ËišļŊk Č`x’ō_´Oū…!kw•Ëŧ|°Ā%sžkF[ÅË ķΈãˆ[+(´,Ęōíķ$„ ģŽüv4Üe}Á5Øč“ÂzmžŖĨj’¤ŗ˛Æ$!NåU<{*( Ĩ;ū­>ˇ ŽHfiŅüÆs’[8#9$đkSÕu´đîšY-īŽ.R7+ŪČ7H~QЕNGl‘ÅJúļŋ ęÜXŧŠ›dRŨ˜‡eRįåÎåõō21š›>ãŅo<=áËKEkÜ-ŧwFæ1-Ã`Hğ”gš$íé“Ō˜žđÍÆŸjD^}˛*ŧMö—qˇvā~÷¯ķŦw­Kokwp˛ĪŠAg5âÂÖŦžLŦÚ1 ēNÄãšëSK?‰`ž/ĩM3Úí‰æ‘-ãįvū@OŨĐ…Ų÷Ņš?„ŧ?z[}ą éąÂÎĀ2ī2@<‚Ä“ëVgąĶΧkxYÕė•ČUûŋ8䎝…a}ŽÂ;my2Īqu!Są`ûs€Ā6:‘ÉĒņÜxŽæÆŅ.#žŒMŲ¤ŽŨCdĖW 1ō…NN99ãŊ+>ãē5F—ጤŽ0ŌHfļ 1ÎX;dsĮ.äŽ:U—đžƒ RnˇōÖE+ōĖĀ.cōđŖ?/Č01ë\ÄZޝŪŪéđČÂá.gVû1u%C ŒsŸļcŌē†kÅK(Ĩ™Úef2H-ī‚Šã¯îÉČ<úŪ›ēę Ėd~Đ$2ư#í‘^D[Ļ8mFāĄ\px=jËøoD¸ŧûdš|k9Î$Ge'å ü$cF=1ÅsVw:ĖÚÁŽŪ+ˆ­ŸR“yĄ †5!Ab§‚@ëÉmÆ4u;Ļšt–Fémm­ŒŅ ļ.¤*Ãfüq‚sÉëŲYßpēąģ>¤Ė°ÛKm1DŅÅlŒ€Ŧ9 d‹c¨>Ą„ y ÚōÎ?.ƒō…u'‰m暎Ú+û. ŠM‘ėŲ¤į“ąOgĨQÕƌĪ%¤—KˇˆlōŖÎņ <Œ;ļÔûĮښ^a#žŠ1!PcŸņĢ Ÿb;VO†>ÚŪĶŋĩ<Ã~ S?›€ÛąÎqÆkQØ˙×ŦŪ…Ŗ–č>ÔģČ^š#ųS„89ëĮN(h˜]q¸ÅgĐ]D‰ōšj˜žpsĪL/‰`ž­H1́Ž8ϝa2)tûk›‹k™ GšÜą†FꛆÜU[3Iŗ”Igcm Ŧ~R”ˆvq:d“X^=5Ž•ĻBÎeŊÔ8Ü)xÔn{tŽ*´–:õĨģȗR\]‚%p1+ō1ŸLį‘žzV–ĶroŠĶ›-.41}ŠŲRGg1ˆT‚Ėâxī““CA`eļvÆEČb\Ž@SÎ;…čqļ:V§:|×~sM–iŲî‹ærĒ €?„üĮã=;Sô ŪGö›ĢÛåÛÉpz[|¤ŠÛÆÁ´œ{ãĻhåķüŠ¯-dŊ:mŽ–ˇÂę“4iHI;‡R3Žādĩp ŗ‹Ī0&‰Pd3HãŠ'“īÍrÚ>=õûk(ōũ–iŽ%Ú.$_9„ŠąđŨÛ{g#ˇ=ˇ†uøĖĸWˇ¸‰¤„yM3xšƒÖGĪN@ĮųV×~FîŸyÍÔļbÅ­¤‚4Ę:§Ũ$€>V=0x÷ĩ¤L'÷ržv3œã5ÉÉá;ũ×íllaŧží¤ŽL?}ˆ§=iĐxCSƒT†ė]Zb4EÚ7Ÿ0¤qî–?âz+¸îûuŧA"!Ü3ØĮž?*´šå…Ļ öˇVé"Fe4€QŒ†Zäô]izŒũĻ'ļ‰ˆ!‹0ōö铹Éខԧ˙„wUĩÔîÍĩĩŲ¸™fKšįÚąžNŌŖœ'uÉâŽU}ÅĖûmޝ§ęĩ•ÜŠōäúvčjŦ’XęÚꤊŋŲÅ%†_3!dpāŒt$y<öĒkáiE–ĘŪéRâHJ=ß—ķŗ• ąĮ=Ī~+&_ ęzUŧķŦļŌHĶK$[[ˇ24>\c9ų@÷ãš9Ą%Ņ…Ųš¤xŠ5+Ų#ō6â!4s´ ‡Fg Hãi; OUģíq"kXmM$÷bÜā€ĄwģqžŠ:sQX‘ø8!+y%ŧąųđ3b|¨âōÂ{w>Ňz&øuöˆŧ‡Ŋ„Ą7ļč%`IQœ 6‚zuÅ;DZSj6qĮ;5ä#ČΜK¯îđš9įŒjēj–kw>ë¨B*ÄL2c/œ3ĮlgŽxéXĀ26Ŗ{;ęHÉsŠåũœ ģä z7?"„'ŠõíIwđúk™n¤Œ Ķ\4Šŋeʤf#nûĘ ôĪj-ãģ7Ž˙ŗ&žˇēžū4{4‘į.ÕĘá‹čsÆ3īN˛Õ[iO”GĀy.ķÆs”'O>Ŋ+ëáä2Å|#ŧ@×QŧEä€1ÁØÎFpЁîÄ÷Ģqx)“Dm<ę,7ÜË;¸‰~pû°įŠÎ„c`v KOy§Á}ut/ā{Ų!S|ā \6 ÷ųž=Ē=C[´H]÷Gpq Į3Í$‡*÷F0Ų=‰=Ģ"‡hĪũD´‰Gž@!<¸ĘÆ1ž˜ŋšĮĨ,žKkûK'$.d–{|Âǐų `s’vį<ÅûĄŠ­Ļęö×6ūt¯ 2“–ŒÜ+ŒUXîļ8āUģZÎh”ЉįB¨|?*H+ƒž€GĨb¯‚đŽŅj§ÍØÂĪq…JŒō d’zđ}qIŖ‚æ-ĩK…h*ąYļ¤egęîŨ:žØ´ ŗJŌ˙MĶ´dļĩÔ-"†öD^pAĮ$Ÿīzš˛uHšÔIÄėŒË‰FߔžŊúW=?ÃË)Ąĩ†kÆũÍēÛüą}á¸=z˛¨NøŠWÂ=YC¨æōeQ:[ ĢĘř”vęFôæ‡aęl&ŊĻ}•îĻŧĩˆ,i$ŦԌ(a•ÉéÎ)dņ”ŠÄęļJķpŖŒĪ_Bâ+_Į=“ÛŊü¤=ĖS"… Ž>\ûŽoØÜÉ+›Š˜JÄŋ(!TĮA끉īEĸ+ŗ Ö5Øôģ ™b’¸ŠŅîRcšąÂņč[­CaâDãÕŽŦ žKŗmlŠÅLĨB†Ābsķî{U}GÂÚ3´˙ÚW1ŗŦ+´"UËā:yíÅA§ø4[¯ ŅšŊ‚ÚHĸk¨ųrŗ3o`ƒ–äõ"šĩƒSЌylå2K6ã֖L9 úVvƒ§Ī¤čv–7wī{4 VK‰.rOr}@ÂŽ9$eq×Ō˛–åÄĒĮA‘íNüŲPŖ< bĒŽœڞpo$w÷¨Įĩ"üš/á֚鑟nô3€§°4Й“ŽKĨ[›=CQTi`­Ģm,ûی"ŽI zv5œž$͝$„#Íûíž^`q’Å€:ü­ôĨņ†Ÿې.eˇšš¸˛Ũ-´VÁ‹´›Håī펚¤ˇđÅŧZfž -ŊēÆ$Ë+gfŪį‚A=ŗZ%j+´ô+˙ÂUcgŖYęY"ēbPĮnŲۆ}ÅNNŽMK/‰Ŧ/ž]>”Éį-´™ĩfLąoŅíĻķĸ´HßĖn ÎBė€^1Ōŗĩ#H´ŊĶJˆmw-!ZE\ôPX“Ü{Õ.^‚ÔĖmf8Ž4봏Rû3O$Ŧe-æHČA’Ø!‰f P8Šî~!Ú!ŊŲ<ĻØHIÃímŖ§LᏰ÷ÅoÁŖhąÉlØ[) €ˆÆÎrŽNsîj1ŖhPMķivŠ“n0[œssųŅxõ J“ø iڅžœö,ĖTČĘã ö¯ažį€×!üšä“Ūęöˇ2YũîgŒŪíEGvh™UNTB20y$×}¨é\[Kweac6ĸbÛˇnåļ–Æ ãđã­VŅôMŧö6WzÕŅ’PĶ[[1&Ô—ËRsŨ›ĮĸœųéŌÂŨķ]¸.#žI<ũI?Rjt}>>k&…&´–G‘Ŗœo\ģ#ļâO=)] įõo]Ø]Én4āEŊĢMup%"8ŽÆ`Ûķ“Ûī8æFĢo¤C}q¨ŲĮ}qŦH“°Ė’*do˜u;“8đĩÛø‹F:Ļ™%œvąŊÁHį•Áɐ0N2ā ÄũaŅôãkЍÃˇōËq6H•‚ņĪĖqø|lAâĢšīÚ-íĄH I.Ĩ9–ĀãæĮ?í{sŌÍkg9*ö–ī…+ķD§ƒŒĐ~TĮkt¨Ö¨^xČoÜåJŒp͌wāŧĐÚė5sŅ•#ü@–-:)ŋ˛ :ũÉ.vĒâ/4åļņōāūĐ÷ŽÂäZĘ x„Ā/Ę3‘ĮCÔc#čjo˛ÛH€Ik–Ŧ+"ã@~ŊŠ]v§3¯øiMgshˇÂ[Ã˛˛°ųT"`uË6>ŖÚĒÚøõîoåļŋ´ļ´ĩŽ)žYRC#…B‹ō€9ųŲ—Žęq]¤í BōB¯ˇæPOP{újŽĄ¨Yi-k'Ųci..Õ Ē˜ą$žÃæcEĐkr}PˇÖ4čī ېž@ķĄd9‚3ÚŦ…*ŧhČd'rœž0)•zãāqYJÅÄ­‘ŽIũM!ā“Ī^â•ĀÛČ˙9¨Č'Ō˛ldˆrØÎZœFdu=Ĩ5FöŠų`z`gH–rū2Ö/4›m\€O8āgĻ Iˇ˛O,’Íâŗ.ÄÃdLå@;YL`ûád?ŊsvĶx¸=ÃOöҁ$\B™‰Zcō¯¸ė3íĪeĻĪĨ[ÎöÖEIš•7!-ƒšķÎO}1ÚĻÔuKM2Öiī$eŠ<v’rpĀîIëG5ēĮø­õ;sqt°‰rĮ´,äãûĖŖŽęŨĒÚxŽęámu ĨHnI,lŌFSžĸ<œ“““]UŋŠtË´žIRkSf Ü ¤ØQXeIö#ųT§ÄZœ×ō_Ä Œ„’Rå°p_\üŨ<ĶģžÁdsˇ1ø˜ŨęÛCŠĒynö›æŒĒHįæčpŒĒxÎIĒך7ˆÚÎáĸšÕÅ|¨šė+™œ’Į'îų*98ŽŌįÄ:]ĩŒ7ōŨGöiąå6 ߑ‘ÔņĪԍܸĶAļâ’ū?1H‰ŽPŲŨŒ”įčĄĻ›ė'c'QR°Ņuˑqr˛Üåm\nb.Ņ9ÜBˇAœœÕk WžÛMž˛Ôo.­Ö '‘õļÉ9uÄ_1%T`ƒô#š­mK^đäŠ-´ōļũ8ŧĖą¤¨ŅIR˜9ũāŖVŞŠĨXŨß pą™Ú5F-¸÷,Ų9$œšiģŽV÷MņÄĐ´–čË2Ü<ŅŖßˆöĸápÜw`ādzuŋ§ØjVēėú†ą-؆Ößeē4ęŅ8T]Ė@<žCō@ā÷č,ßx„ŋˆžÅÔļĐÅ$på æ šCpĸ0:`üŨxŠüEâ>×M¸‰•ngh]’+vA!>`x Y‚ķëŪ•ŪĀr:‡üGyá‹}÷ö÷¯́v| ģS“ˇ.ęJŽÉœd‘[ré^ m*ėlēšy/•¤Ųy´Émŋî!ȝ˜ĄÎãß5b÷Äöˤ\iÖˇ-ũŖnĐŲī[sĩdfØJŒ`íÃü8ÅY—ÆZ|^4Ё—nʼn™ĘĻ3É8‘ŒŒ~Û}‚ČËŊŅ|Oö‡kEÅŊ´Įl†ųōĮ`X§qnI$`r1ÍEđΈmõ­6D›m”ÛG(kļfÂĪĪģmûØęk˛ŗ×ė¯uI´Ø%Wģ<ÉUc%TgoŪčN{CYšį‰Ŗ‚ú >8\*Ü:Ä ÆĒžkŽOr‹ĐxP› OHđ—ˆ,õˆkû†ĖŅMp ÛÆĮ-Üo!psĀÉę1§â ūōūâmūTMm QH—/•s6é^™ 8õéô’/ŦúĨĘ;ŦR[ÁĪīI+įNW§øŽ7Î)ĮÆú#é×ēŒÍuĨģ*“<#nŽĀ É!įž™Åõö ëm ÄO§<ūtŠyžđ­xX¤ŽėH9ęBlÁ>ƒšŽk|QC­k‡ĖinC8]æWĮ8`Ÿ€ī]~0Ņ [ŒI"ų¤A) _=9ųYOãNoŲE5Ė’ģ¤ÛĮ3†ˇŒîëęp>î2?ä;#’˛ĩ–}cBKģšɋÉw;Ŗ]‚îŅųA;”{.Đx5Ŗ…õ››ų_Rx¤†âîŪIö^I•XԒŪ`€1øWGi‹#ĻŽ–ą$“Æŗ™" Ø#‚IqĪ5›7ôĨ¤߲yÆÂߘFdã=Š÷÷ôæ‹ˇ°Yu^Ņ5FÖ8Ŧ.bHÄn%Ũ3ÆÎŲpTÛ¸é’:ôĒRø[\¸ÖŌéϞTW’Ufgˆ2*Ļ€>_›Œõ$įĩYoXÛŨL]od…ĨXb ā7•æžKdņ×=^9§˙ÂeĻēŲĪ ÷i 3ģ%~dXˇœį ų“ä’zK›°ô:=&ÆâËK†ÚîękšĶ;Ļ”‚ĪÉ đ?úÕuĐŊ+?FԎŗ¤ØęKo%ē\&õ‰™IÚsŽ™ŒÆ´Ÿkāœâ˛–åĤ+Œ}Ē9Ķ’ŧvĀĢ cŽ3úT.zôÉūU›ØFqÆ1ÍLĀ0>¤ÔqŊ€ã8Š€PšÍTv%îs^0đôū#Ō­ôøš‡íi,í(įË\ä/æ<Ũë2ĮŖÚũ˛yŖhâhæž8-‹ųĨܨĪúĮqŅ@ÅtzųÔbŌϟJ¸‚ ˆs)3!:€~\1ž9ŽsOņôˇÖ“YéM5åˊ‚˜mo;Ø8Á8ÁîFHįG™­6!Úå),#ŌmôwŋģŽ9eû0ž7Ā(#gžV'=7‘žÜZÖŌ|2—§LÖo|͒Ü,Dr¯$ĻElį‚2 ôíYmâ[¸oŽ5S\Álŗ< ģ•Ļōĸ0Aȍ›Ô–úgI|k*ë2ZMdėËĢGöŦĸ3I ۔p:ŸAš§Ė- mCÃ÷:§‡VÎōí^ī÷ry›7!t`ā2Œer0zdzSlôKéuUŋÔ¤´‰ĸmÉod¤!rģ7ģXí$Ā÷ĒZŒÚÆúũĸŠ9cļšKRZč¨Ā…Ĩ‘ČÁÆßnŋQŠĘÔ5é.u¤Ŋž°Y­ãˇY …nŲ^#€\9’ČšĪAĶ“I)čč[Ã3}‹Z…5kĢgÔfIDĐád„¨PØlō@;cšĐÖ´ąŦéĪlԘ¤Ū’$āäŖŖVĮ~@Ī­rķøÎö ĪkkË8ōc2:ˆ˛Ļķ‘‘Ë~\ņš‘ŧ] ’¸ŠÛd—Ķ r&t!!RŦ_ 'pnŧ ‚zf†¤" ŨYûF¤ē…°ŧˇŊXĸiôđģ„hIÚQÛ<å˛AcÍC€´ëĢTļfÖaXĻ{„’ā"ĸŗĮĘĀŽ6Œsžk]ŧGy?‚äÔTEŖ-¸’LBuō@Ŧ˜)Õô¸ėVisĪ j°ģ !×wc,(īëĪO¸3]üĨjĪ$’Ũī”0‘lašA!´YŽĄrΏá=+CŊ–îÉeɈ´’ŗüģ‹q¸žįôĒ×^ Ōn&¸–_ĩ4ŗ4Žä\¸ČģtōŦYĩ˙‰ĩ?. 5Y ¨k'ųcGlN{mœ{Ô:Ī‹´é¤>;dPîļg20„ģ°ãφrxã‹>ásn˙ÂVqÛ‹;y'š„Ŧ‘Å%Ãmfų] ž¤g'ŊWĶŧ+nšDz}Ú<+ â[yŦR–ÛÕļ3÷‡^@Ŧ̝xĻ(d™-dķ#Ûŋu‘ …ˇÜûz™ î=3VlŽîŽüSy{smû°Vū(ākŸ3æ|ļđĄĪĻŒôĮĢ’x7A¸Üībr<Ėbg.Al`ņœ†eŨIŠ'‰uŊB×34[XÄĸĖ››sļ;áX6;ņéUæŧņ‡•w2$ãĘąķ!Œ[Šg”ŗíũ › QÜÜҝpĐī,⎞´ŽÚÚ4А"FŧŽ*F95ƒā˜5ü7mũĢsustėĖÆæ=Ž9ŒžŸZčHÚdՔ­r“+|ŲĪįMqˇž™=5 PŖÅ1Ęôv:úT6%¸FQX)9īR‹Āž1œfĸC“ˇ“Ķ­L#.xéŒÛâ܎X„ĐŌhcûÁō[årsÅY˛hoíMÔļ 8&1q°ŗ#ōx۞āū5Ė\éē…Ļ‹}gws}ēâ+Kx’BvÆJFØČw69Į''šDđ˙ˆ­õ+ë¸ní•.GH„ōš¤\vđDJppzôYoq6ĢĻ @‰QĖ’Ę y2l;”g#púãĩ3E°m7GŠÎVûSŖ1yDa ŒÎX’ 8ëëXÚ‡ĩ-'EšIŪMBYC+\<‹#˙ ŒqĪNĻą_áūĒĐ&ë›61A J›Ü+АHĮyŸöF;š,ļ¸åŊ´gVŸQÆIaK`€k;õ;šú rG 7DÔ7,P‘š8ÉöÍpđōîâRōŨdŠŌ'(x+ŒųÉ21õ• ˙æž[ķw<%ÃBˆā>õ…Le““Æ|ąĪ^O­]Âėíe0Ë ų’(ˆ “‘ĪøŠĪĶŦí4ų/ä7<×R™æ–f\ãhÂĒ€į\՗€īí ‘sb ˜ĻÆōŨÃŧŒ ˙wtƒļÁīR'ášßP)sžxáļ´9*ąVS‚Ά ŽŠŲw Nœjļ*á{dļíŲ(ų˛ ƒßō5rbō@…ƒ+ †är+ˆÔ>-Ö ×1Ü[Ş8ŌŨ|’Åhvƒ“ĪÎw\ë[vZ.Ą§IĨXÚʃJĩˇ1ÎH“0§$Œį=ČæĨĨĐf•Öˇ§ŲßĨ•ĖūLŌ!’3*FŽüš’3œT„X]ŨĨÆËyŽmI ˙+4[€ĪĶ#…d랃WēŌ&šxžĪk3ctŨæ+FP¯^>õcOŅ šŨ…x Írd\[pO'$.}¨ŌĀ&Ž­áÔ^FˇH­î^8žp3`36ÛŪ3ĶåŠ"ÖlĻ|Ģ}ų 2ōH#ę:įSá˙“mB9ãEim÷"_5÷ß0gÁÆxÅ5|­ËÃsno%ŠVáí”íTûüdrų`pG6ŖÜÎą5‹1ĸŨBÅ˅e%ö6>‡­Rŋ×lė^ rKq;2Į [sōŒą9 22IEeč—GÔ ¸}@KvōEŗË(;îÁ]Ûp9=3–nØ{í IĩËMF ¸Ã@čŅ ŽĘIaƒōãņöĨĸDęŅn[ŠĄ„Æ yW€ÉëĐfĢX]hÚEĸ$71”š¸l9¸ķiXúį$įlb°.< 5ũååÍÖ¯æ-ÜOƒjgRWv{*íœ{æū"KfPUŽ]äH­Â†S*ČķōãjŽyâŸģÜ5; vÂ$b.­YƒÚ.ģmĮ_\¨¨ŸÄpķHžĩWúÜĖ?v=ųâš[oKØcŠGå ˆĻe[a™6ģČÛšęYÆ=ŠŠįĀwčéV‰cIˇ›\äāŸ›īI'߀͏pÔę4ˇąFģû5ÂÍ3Íį\3Hˇ°ÉĀ §ŽëŋbŌî¤Ķî-$ģI#„}ʒ3‡ÁãäôāU}'Ã/ĻĨūu e’îc.ā›vü›xäķß°éÅSƒáú$4ÕĻW‰KŧHH"#@ėy,<ķÍ%kęĮ­ŽÖÂî+Ë8Ž-fŠâ,°žQģdū5p¨ŅôŸ éVš&oakōÁíP=3ŸįĪãZ# ÛÖŗc*€ g\šŠeÆOojąÁ G:ޤdôØÔdYä¯ĨZ @Úsô¨cROÜ={ôŠļ”āsŸAN"d•âXiˇwÍŗmŧM)ŪÅAĀĪ'C\ö™ã(u2;ģģ9-LĮ÷E(šiļ1ÎsZ#ĐŖņ&™ũ›=ÍÔ;ƒ'؜)pāä3Î=…DžˇŠk)æöi`wd•å X67+ %AÆ;V‰ÆÚ“Šĩ­ Ōä]6R.Ϗ[H]TŦßĩˆČÁ ķūéĒ7Ū+ĶåŗiĶH3Ë$÷ ÜcŽ2Îëž û‹“ũījÕ˙„_O”Û+ųÄZÜ5Äx†ŗž‡‘ķ:sUĨđ•­ŨØļ“#J‚ÃėąDŗ6üŗ†lž auõĒN î]˛Ö,ãē´ŌVKģ‹“šķJ€ Ŗh˰KōûÔ2x˛Áo5(e†áO(/—•‘Ųw\rHĮNjÔ~Ōíõ/í$ˆ‹ŗ‘æ4Ŧx-¸đOšúgŖēđn|gķ혉Ļ3Č|įĄ=}1Ō‹Ä ģ¯čMs[Üųĸ8ĨC䃡ÍBWžĮįņė Ģ—ū+˛Ķth5K•a ÂFa…Îņâœrriˇđä–Ķ )‡ |ö$+Ę<į<(#Û-ęjˇ‰4ŠuÂ×JĩûMĄ 2™<÷Ō˛đŽ—mcd/m-înāP|æ@ÄČš#=ˇ3šXŧ/ĄN÷16™lŅJ#VV6”{`bš”BĖĖ—Åw1ŪĘcͤ’V’ÚßČ7 ĩ]Õ¤p:Ē õÁã§5˙ r[ÛYå|č#ŽW‰7 •QōõęXtŽŧ;¤üæĶ`ßæyÛĖcīíÚëŽ*_ hÖVđGũ›fŌA´Ģų)œ¨!NqÔ3Nņ¤÷sltU›åG#pF<̎ũEqøîæĐ^ÛŪŲGq}m)ļo&Øå”HF%r cÔá[Û=&á‹kMQÖŖŸyŧHÕ!P Āé÷^{ Ŋ.Ĩ\Dņ\i֒C#™^3•gÎKŽN{šǏäáņ hę眰ĘJũ—N†Ņ&Y›ælöûŌmŨā5Ÿ™d#ŌDtŧÅšĖãŠ^~T/ž>^xīׯ‡tE‚kuĶlŒWe™ @‰9ÜÚŖ{ ØĪ.>Įkåm `Wg–FĐ9ų2ŋJ|Ņė-Nr?Nō‰`ļwĩŦ~SŨ(TķUĨc÷s¸/~:TŖÆwÜËm“$“š-ãD˜ȃį|Ā 1ųr9ތhZFũ˙Ųö„‹ "%Če]Ēzuāz ‹ûI‰Ņ“NļF…šDo(ŦŲÉ„äįëKš=‡ŠÉÂkq5ĩ‹EĸÜy“NR(–`ŲTb’1ĀáAÛĪCŸÆ­xƒÅRéBÛQ´–Ū{!)ˇ™8ÆíÅOĪžlvéšŪm#HÛlŸŲö¤Z“äũÖzíãŽÔZčÚUŊē@–Qē$2ųŖĖ;É$ļ['<žisG°ėėrWž6Ÿû6įBÜĩ˛ i$ģž@ģPŒtE9ö§ęGW6™§Ÿ1ŪÆØ—ÛŋtJwmûšãœvĸįMĩ¸xå{XdØFL‘ƒĮ~ —4{Ėã߯zŦļčöēT9¸¸h­7H_Ė1 В°'ĨDúükâ;‹Šš&ķ|—‚fu[h™Ü(\n>d„`ŒÎ+oXđŊŪ§¨G-•ėvpĮŲĩt2î$ȁYFâėƒųፈZÍœĀœg%Ŗ“×ķĒæŠŲ Qšëë,wrXOdŌą+€7āp ÁīZ›5ä~j(Ū× ĀQJdY#ķõŦe"ģICˇƒíëQ°b8‹ííA# ’{SœņĻĢyŖørâöČ™Z5@mŠÎ0€N8Žu5oCs§[ČÛĪŲââOŗæąÎ#R@FNTŒzŸÄ>ļ×ŪÕæŖ{f,ŋģŽE`F0UÁSõÅZ˛˛´ŌtčlãĩŊ¤;qËu'üZi/1Ĩ–­âYîtû[Ą$DßHŗŧVŒŖH†Frp ąŗČ_“NŋņuüúcŧŋdûD’ŧÁėŽ ˆÂÁ~mŲā““ŠétJՀ[i\9‰g o!tÍ­­î‘Ÿp4Ü5†;cû´2ŦjĘŨ\˜üĮ' ųsŽiķęū/‰uí´ë¸‘͡ú08aãũØÔļ0IŨė+°ļ×ėŪ’V6qŗ˜ĐŨ2Į¸í Į<đOä}*ėš–œĢû\îT›qæŪŽWרäzûŅÍäŖÆQ%ÜÍyw?–!‚0ļŅŠ“+’P1Ÿ—,Gû[¸#Š—Ä#ÄĒt:Æöí¯HíŋN*8g’)åČĪ…<ŸN•cAãŨ æM>8îŊķ:Ā ÷I>€ã‚zŅŽë2éFĖZŲ¤ķ]ÜyJ¯7–ĄŠŗ ļ'nîHĸÎáĄĢ4× ŊGSŒqÎ?—?…Wû'Ú,“Īæp¸ÎōW<€Ŧ_x‡PŌĻĩ6öļō[Îæ9d™Üœ“$ 'åĪŠ‡â]KZ "Áją,Eå\ÉŊN ŒuÜwá}čåv¸îmĀš™TE*ē6O(õįŠšpĶšXŲ‘Ŗo›‚˙ëÕHŧQĻÉcevĻãĘŧ”Ãû<™/ÎF1>SÉãŠWņĒęąéîŌ ™c.˜‰ŠíOAÔ~b“Lw%Ĩ܊6üĨēüį€GøJ-nCąPU]•Ž_§¨ĨGĻx–ĮU7˜4ķ<čY0AÆā3ʡåQCâkŅlõyž+ÉDq2ÄI%› t¤Ô‡thyRÉąŲ6ŽĶŧ+wíŠh´•Ņw’¤åIÜOŋ•F˙Äúv•:[ßK,22îČv]š ¸°’8ę*ĀÖŦŸUM7|ŋk0‰đŅ0@™ĮŪÆ:ûŌŗ –VØÉ DƒŖdl}?đŠãK”n…ũ1ÔUKNĪLŗ7S̐åcT~iˆ  g’Iī\Õŋ‰RģÔ/dēŽâčDņ‰6DŒ°ĸ) ō’āA$ķN1珛;]2ÚH-)Ë>Į`ĨŋģØ^*æŨČģWøŦĪ jĮ\đũϤ-ώ3)9ÆpJķõ#?k0Â(āëS%Üi‘ųw6ÔŌ1;W3͊‘™°‘*î’M)å†1“Ö’&äd‚ģ°Ų=§ā`œæ…ĪŽ 9'ŠĻiáķŌX]ŠpqYž‹qwĨÜÛ[_-ŧŗÆcYZ2ûC 7zāįŠąâN]Ã7ú”1Æí[ļË!@yädÉč=sX‰âÛš5fĩK+8mlí"¸ž’kĸĨŠl ÛķĀœ~J.×Bšø2âHmŧũN â´O&ÔX%v36I!y':åöž6úP°:–ņöXíO!AØŽĖØĮ͸ŽsĶ<Ԟ ņĢhæ‚Č^$ĐI>å¸ÛˆÕAŨĀ<ÁGšĩ^Ü\\ŲÛÁ¤åĨžE¸ÍČãeVrqƒ‚ĮöOĩ_žĐ´đú ›?˛]jLņ´­¸ 9ķdV}ÅWfI'ÕáāéWÃOŖC¨Į™dgžGˇÜ3–eÚprG^•”ū.›\ŌÜÛ­‹Ī<͋Œ˛Äędsœ”Œ}FGzŅđέ´6özdŊĒ_IM™XÆ:.NqÔc4>kj Åš<'öŸ ŽŽnmáQ(“0ÚėTÖÂĻ㎸ëĶ>ĩzķÃâ÷WĶīëĮö0vĸ Į×iĀČätîŽVãĮ2Į>ąq %Íē`ŦT.āŌ#ą`9Đ 9ãąáfņÎšdŌî;Ųm­Ļyî$ÉŨ2(`ģU@–sĐ} V˜htöē,–šÅõÃ]ö$Œ/”‹fėcŸöPŗđÄÖŖŦß_øiķ|mngģX-'ƒ÷b@Ō”WÁįnÜŋ^qž•F^Z-Ίr. öЋ3y<š'@Í#ã6… ˙ĩ‚G$.Y͏ø@íb¸WˇĄÜ†ķ + —ÍŪÜd°F<~Ķ ¸ĩtģžY`(ĘV` (ŦŖ'íš÷,IŦ ŋę:ĨĖoĢĮ!ŗļ5´Ž<Ųy ’ĄIú?eņnĨ õŲŖ1JËlÖ˛É,ÛĮ XŸRFU¤- í?––WÖŌĮ=Ā6ÖÉj™`„'ž^ŋ1éíZÚEėÖ˛Ũ]\mˇtũכˆäemɸ×v:c͚å.üaĢŽ—u$˛<ˇũ—ŽÂ(RAČ_ŧI;ŋ>ŧ [Ũnô\[Âöą\Ú AЇļgdH3ˇp~yė:dŌåw*įS/‡ ēĶol.ŽnŽaēŪJኆ$áN8DKu<++aˇ˛āpB įæ~Ļ•žĀj/† ûs^ۈíficeoîį8ā|ÍÆ;֊hvręvˇáĨûE´ nƒ įŒ“Ā?…q×^$ņdm$ĻÆ4s´v;„ ŋųęĘŖÔį°5=Æą­Å6ŠughĒÂy-`ۙ#Œ/b fFzņŸB(å}ÂčÖ´˛Û5à ąļfķw Ė[8ûíÛ'ĻzbFđĩ…ļ“öéš Fá|ļ ¸ãžÂ Ņ¯ĩ cT’æŨâD™ ‡užĖĒ( ĀžXncŒž;V%–ģ⍒Ít&hIūĪaå#Ęàä°@8í¸gĄÉfú…ŅģŠčZmŖw,_¸6kΠJ¤Š ’7;ĄĪæjmKFŽyįšˇē’BKSm/„L’ŲĪ^†š7ēÔu vŋŠ4š[DāĀÎ"1Ænˇ,a'ˇ^+[L›Ä×wēT÷ņ€Ã#Ėą§–šmĄ”’IĀföČšM5ÔiŧúeĻŖ‹æcs+äo•đs“P/ƒŧ9 Mnļ’"É š“;üÅ wdašČæąu‰õņĖÖ6w2ĪĻiōy ä6Ų&‘†1ŲöĒöĪŪõŦŨFķĖm,öŋhÔu Fˇ„ēĀÛĩæ”ĮĘH1Š8ÉĀhI÷ĪJĶbˇĩˇX-wTĄ›‰9̝ÉĮŦ/ÉŠ^xVÎ]b)cŋpÆQ*…oŧqĀc°>ĩēé´øÖrWY3ģ#Ū´§ī~@Ō(Č }M)#fæÁĪNižrĒ€ĖzuЎö$‘PŽIÎėŽ3R)GÎ$ņBwVÔtÛ-ZÁ­5hįĩ,ŽČ˙tí9Ö ŗčž|ĩŗ}˛'ŲĻÁ°_,p?ŧ>QžHNZˇã{+›˙ŪZŲĢŧ˛4a’6 ÍõŪŖáK4LŌåsИ׊;Ņkõč÷‘[YMt‰įŖfÛ 6p2qŸĮŊ6¸§ƒsŖibŽAÛėzÖŧå| ĢIu~ōߨHˇ3–xš&!CMæH qÕBy>ŖOUđüÚ/Ú%š[7šÔŖ–4Š A’W—ÍeÉĀ ąÁ#<ô-ȪލÅ4Kx"$čT‚č{Ō#¤`3´h `ĀÉ=žĻŧúÃÃ1扪jzi†[ x$’3+rXüėǏo˜ ō+ĀķÚji}­-įŠU ŒYü¸™žģØļ;qÛ‹.ã;}WYM>Ô:ĮįJdH•Ā%؀ŖÛŽIė5•ÃČk¤† ˆ*ȓo\dí āG=+„˙„fæ B :6…ĩ9Ræöęā†(X‡H‹qũéũÚ[Ÿ‡÷R:(ž×Ėō’†X*ˆā؃×Ë1õZ|ąîg¤ųûí ĮibvæĄ}™&Ū¸Eg)“ĶņŸjáŽ|7­hPÜęZ`‚ōō0ŲDdģXãÚŲ# ĄI=ķۛsø+Y¸—QšŽâĮ͘—…dV;÷I˛JŨÔ,A;SĘ쁝mâ-üOö#kGģķ#ŊßĩP ʎģ9í[]Ã%X3ėVĪģ ūŽV_j7_õEkl„%¨ų6ŪāęÅą×¯9ĒøRįE´ĩŋÔõTš‹May" BĖYävˇŪbWžšQۊV‹ę;ŗĩۚ<õûeĻëpLãÎ_Ü˙ŋĪf_x‡}˙Ų`ûJ ĨžãnāÃyãŠTų˛xäzäqŪ°°ņ›{ČŠ5ŧņ\O!Ĩņe¤XÁBë–’“œÕÍ?ÃWū™öûyÖĘÚå¯<˜Ū¸+¨†'#n#NÅU˸¯sĩ]_NdØˇöŦ:ဠ8Īõ§ RÉ­c¸vūLœFâ@Uņ“ÁĪ= ü+†? ]$Ÿė×vöņ:ʨN @ ō8؁OsšŊjmGáô×:Ŋ‚ŨZģÂgœ™bdVžMÛO•Pdn9čŊirÂûŽėč­-ôí4žË¸Ä’9¸s,ƒs–8,}šōĢįP´VˇC<æ˙VĨ×/ūī¯á\lžŧē¸"æōČÁûqĘŠē“žjąwojŠÃŊVŌâŌëûZĖÉ‚lūT;¸ÛĪ šÁ=ÎŅCQŪávz$W‹”_Î[ŽÃ(‹ÔnÖ%w„dŒœsÖ ežđ^0{T…@ĪĪ~*'ˇM™Č^˜Á'§=ęŽIÔ0ŪBÖĶ –ŪPRXÉ8e#ĄŠâ6öq[Û@Ģ1¨DE^Gl pĩ@W'9 u?ZrÅ ü›‡ ȧq nŖ+¸d‚qÅI-ÔqĮŊøĀã¯ĨBŅG` 9Ü æœR&Čá†:Sēؚ ™TG10eÜš*pFā~™įëK,Ąh'&ŸäĮ“Åˆėi8Ĩ Ü84h2#pcˆ8Į“ŌĒ]ĮcxÉ,֐Í-Šķ"2D C椌ŽŨ*鷏s‘ČŨÅ3dFb9úžiÜ †ám*Į<Ÿ~3Ō¨_ÛZj@˛@%‰]dŲ,JÐGCZ7ōØéÖr_\‘@ģ™ļ“€8éÔ×âŸEĄjV6ąiâHόIpĶ–áV|ˇƒÔā͊mčąØCr-­Ō?+…b5F8üŠu”8ų—wNO_đŽ>?ˆ$šŦöiúŊČÁ•ļQ‘“‚Ûąœë ƒRĶõ 9eą’6eB_r˜ÛÎ õî:PâÖāšé>VN6‘€qõĻ+ČŗļYʖÚ2äņŒ×% x—RÕĩ[(îėė#ļŧŽo*T‘ļĘą2 õÉätãšč5MHŌehÛĖšš‰<Ų ´‰¤tP3šąÂŒäQĘͰîhCtĘ0ؕßÉΎôĢ‘\3į x%y=Oļ+Īĸø•c.›q=ŋ‡u 'î‘ŨG”\‘ĩYã$ôæŦč>7ēÕ´[˸4[iīm%ũä1\lvå›$rÎqڛ§!]Ķ;ŧ ôë‘ۏZ‰į2Fwĸ”c´Ļ3ßõ•woĒiv—inŅyФžT˜Ü›†p}ęā‚—÷KōũŪF;•„ ,hǟtlĮôĸ)ˆE…6Ɛ3V8QĶ÷h1ĶqMÛI&ČĐ tĀ\e3xv 6Ŗ An™éIsvvĖd)ۀ}ĒÆcų‘9 íP†Ŗ,ˆ…nû€uü)“âb M¤nČaíÍN$;˜€ Oę4š$ĮîvņĐĶßÚŦorƒ'¯LšCģ™°†;ķOŸĖdįŒzrjHČĄÆqV,ŖķŠh–ĮÚŦMHČڜ<÷Ļ9ÚH9?ZO5Š8'ŒsüĒ&fcÆGÔRa65;wA#œž”PīUå‘z6 cܓT"%‘Ŗų—?#cÉúSĤä°$Ģ2i7E’Ä.G§zVSb!]­ÆIčh`Jev>œņH¨Ęä€TœįŋJ‘fTŽyëŠmÅŌ@#“å*Įh!Ŋŗũ)\„—%°SåĪņ}ũTŅ#Ƅs@įŽ˙J˛.bu;ʎqëÍ@Z6vMŲaĪĘĮõϘˆšI ĄcąNzđI¨fšō,däTTRÁ¤$Ž…§ŊrŪ,ņĸčڌ:F—f×ÚÔĀyqg!GĢsœã'Ũ¨Ķõ^imėŧK™5ϧ }ž["åHےŽąSÔqĮŊiĘípšČi>!ŧ×ĩˇŌ.õŖŠX]Y¸Ŋf‰cŠ="$pxŸŅŪ*‚Ĩ–¨"ŸP’{Ŋ˛ŊôԁP”RØû ķŒrTzT^ŅĸÕôNM?J°Qs$ņ[\É •­p7 hČ `g–ÉÉéB_ÂdĶ/nŖš¤ŽSr3A$˛3"Šl‘÷yŗéž9‰ÖĮ[ũĨĨxnūĘvK{›Féâû\hĻvgbYˇc:§ĘëŦž0ņ=Õļæ-„víöģˆ~Y%„[88!Aõ჊×ÔoRûÁĶÍu ­ÎŸē$ą˛%0ŗn :…*AsŠƒá͟ø[TÕÚĘ[ë†(žT?32î*HüA'éR••úëĄŅxĢJ[Ÿ ØYiP2ßÛĒÜX˜>ôIōF:ƒ•_rŠx?ÅvמÔ­GÛ,mžkˆįĪI,IÉ9<÷5[Ā>$Ôĩ-nÚŅgû8°†Ų¯YŽÔXÕČnGņ7{wÅaøM#ĩø™}oi Ŋ°i#*s„—Āņڗ.>}nŽįJēĶ-üö­°ŗO.DŽ bB6W WŸœIN=…qÖŅxlXë:˜}Few˜Û´1M䯤@ āöÆjMLÕZ Ŋ#LˇēƒI˛ĖqÆØÄģØEFWxåˆîyĢđéšEŪ‹§x^īSûmåÔ}›$mļ”Žå!´Œôę(VZƒ!øi6Ÿ}æÃ§ĪiĒYZbw˛—!˜|Ė=A}}ĢÕ˙~\æ2pxÎ={~æ~Ō5OhŪ"ŅínVkĀmȖ%—xöw,ŠČ÷íĪ8~2:Ÿu‹CC×ĩŽõ˜Žæ2r„pCuaÔdķIĮžz0Ŋ–§ą6'ÎíšÛÆ8<˙JKĐžbf`Tä.:įĨbxCğđ˜hVú“Äą\Ą1ĘĢ÷CÎ=ˆÁükĄF, †: wÅdĶNÅ'ÔĒ#¸CgŽæĀāņ@ Į‡#;˛1īëV|Ō¸I>÷—Û9Îy¨–ár bG•:”DŅą’y$ŖĮŪĻļF J͟Jfé'FÛƝPĪ­]ˇHŌßÍų•æķ¤"HĻgĪCũķūzU„†r›HN2wŨiÂezōFN Lŗ+›$ 0yωle¸1ZF’€FæĄ> Š¤™dÆÕc‘Đ‚*7s’ ą÷ÅLŠˆôcĪN™=ŠĄØJTGō•Îė÷ôÅI´(ëŪԛzax:Đ!Tä¤ FbG ŒņÆiĖÛ„~šP›° ū\bFŌ2‘É#ã€jŗMäl7ˇ's•obŽq3ŅNsU^ņv#$ĨÁÁįŒtĒWžC.ōIįîž?aļo4íu\ķ§­Jˇ!”Rģ˛=ŋ ‘%Gˇ/’1܎´6‰U–Ũ ķCō)eŗŨ xöã4Ɨi}2k#Ä^!—@ŅeÔRŌKÁŠ6Á=O4ŦہsRH8s, s’ÄrˇĨq:‡ÄAČ>&ĨgOsu2¸Œ,jĖģ—?{”oŽ8Ž˙âĨæŖz$¸Ō%š&;h¤ČDōš27cæ;ˆa‘ŒĨQđŽŗgcŠiu{=ŠŲf $E'΋q`ŦŖ=ˆįą¨įĻ4UäCš{júžĄá˙‰÷šF–æ;ÖuG.÷WŽ~ã ~ę0&áëéîų~Ė˰-,V~ijŠl.r¤íƒ\æąãM?E{j`&8yό”œį…'i*˜‡Ô+0ø—Gˇņ•îŧ.~Ķ ÜAÚÁŲNɔ.ĶžQšw ôĢiÉ-: hkø?Â燇uīÅûŽ Eû-ģtš}ÛÁ$ áY}›­Qņ.°–ž3‹WÔ^v¸Wėz2°.¤ckK´•RO žJ×ĩņ%÷tģŌ´į‡]F`oWrCj7|Āąûų|œõö¨,´m;Áą=æŊam¨ß93}˛KØüÉ9<ųr•ÁėZ–ˇ÷ˇM -SĮ$ՒT¸Ņ [6Đā[ģ:÷ä8#ƒŠƒui¤jVjhĖq9!9mÄõ;s#ũ1[V_,īô¸ÄēĨf ŠĸeP;ėQ“ô;sØ÷Ž"ī]Ô5K‰>Ī4PAæü‘“($ƒ/ įÉĒQmZÖüΟÁšôš&ŸĒM,M 0ōí‹Åˇ2ddmŨÎŨõ5Ęi)ĒĨĶÜékuŊå%RôaÁū3ĶëíZVs@ū~ËP";ZÂâDTXä€tĪ\œõįĢđ×Ä(ôĢ8ėΓ F 'ˆĒ‚Ø’āmn§’F3ž´=.ŌÜ79ųõ¯hÖ­&Ŗ Mm"ūõnw‘rr>lsĀûŊ8Žį@—ÃSiƒÆ*ĶĨEĩ"Gʏ‘ˆ—Œą9’AÕ/xöûP¸Ö-å—Nš7ģdļKģø ÄGm¸éČĪÖĻƒÂˇZ ž'ĶRÂéąîŦ"ÄPmÛÃÂIĀp äžrzVrėô.ŨÃâ 'Đ\ÚX^_ u+‹Ģ¨÷ĮŨŖÉ Âã$úxÃˇŗĶ>'xe5írōm:]2i#ā*##IÁų=xŦÍ{âUŋ‰ĄÕt;ˆžŪÂ⯖˛†*Ņã–ķ ‡Ü ŠFjM7_đ߆´Í;HekËužIîî.# ŧ Ĩa'#€3€M5%æLč´ÛĀž ûré—ķũĸåîVŌ%ŪŅFÃ#q?wƒ$÷âģ=;SĩÖ4{mNĐJą]ĻđŽ@`=;÷á×÷öú˙ˆ5GPņĄ&žÁĻVaäqāĢ`ėE휞ĩŅGņĶMĐ&Đ^Ģ ŗĶaŦŒŒĀc;wčN=ŠN›~ ¤W$ ä’GÍĮŌĸ0ÄÄۀĪsëŸįXžņV•â9.ŌÎå$x8Û¸|Ãx/\sŽƒ‘[0NÄÆ˙dŸ\×;M;3EäZŽÕČ]Ā$gkGļjk†‰`Î|ĻP€9Īnū•Y',ä*ô,7lāžŖ­1æsR™%w ĢČ#ŸįJĀ\"6~sŸ§52ĸyŠ3Ęķßžj­´fYˆ!Оį§OoķéS8d‡fÁįpxũ(cvEm¸*āģ9$äÔ[÷vātĪ­ĘX9pr­ŒŽ 1UFrXŠ9ö5-UÚ8Ŗ!NTΚÍÅpk—wées3ēD¡?įŠčŗœpI=ûÕ5mČ g$ĪiáöɎ0FAëLųˇc¸îE/ČPdžŧ;Ķw$.Üw8¨Ũr‚G?:“ī(īTäidÚĘÁ*@8Įŋ#ņ  I Œ7¸Í9­”/@Oēõ5I|ÅÚÛ°AčjĮĖ\üĮ}{Đĩ压æã-ŽÃ5@\.8ČRqNHæ'ũanĪzcÅ( ĘwäŽ;įž3đ„ëf×ē$.@mŠc*ō:—•{îÚ1ė3Šæî´ãiâų"ŌĘÃeá¨á’TSÍšĘî‘Îâ22Oē×´,R+…öĮĻ+ņ_Ã;]oSkËbRâghųˆę͞øã øÖÔįmšėK}ĻéĶøĸ´ÔdŋÖmŌI'tVû5ē—@AÃ6U^ÜōZtvw=Öė'ŌāŠ4;Eü&\ōK“Îâ ĮqŠĖø‘Šj:W‘î{hŌŌ(âhNĪŨ‚IœūUŲYiBIln/Qõ;hmŽŽ ¸AûųYĊrØ##pÁ8÷Í]šc~čWģ°ÍCÂÖŗjņčū?Ų熙iõ(Ũƒ˛7Įß-ԓĐ}qXZ‹bđԓhž)đĘG9LKwũäĀņ¸ąåŗŸŧJ›áãęøģSÕ.o$€]LUlƒ0<ŠÎŦWûNJpqéSjü–ÚæĄĄø ZęrCoŅ1O$G3mĖAĮđáēúhļŧ¯Qy“xOŅâĶm´Õ’Õ hÖf į?xpsí˙Öāîníõ‹‰›L´’ „ģJŲķYAČU9'='$ņĐ×Sâ_ XØøTkfĖŲÎn$†8! ’|´jĖÎ3؃Sxr7DøyuwĒ\Åm-āōá܌I/š§œ˛ķūĀĢ*W@īÔįŦėn5M&]R1%ËéöãlvB)RõÜAíáÅox ĮZV• AĒYBˇģyģÚŽŋ 7Æ;Žœ[ u åWBW\ĘŧF#`Ļ5Œ\āg–“¯^k‘đOƒíŧMâSKŸĖöáŲĨBģƒ ŽTđy?…'gu!vąŲÉãßxv ҧ[Iz÷ŌĩÔҁŧ4ÔeŽãĩWĐôŸÚÍŦÜŲÃŖi¯ĩŦôčP˜Ž`CĖ™׌psŸLĶ˙„[Â:.ĩ¨ĮqĻ]^E§ĢâInScJ–âmģ ČŽWƒ[:W„õv¸¸Õuģĩ{ųf…íš ßeē)ÜQTĮˎ{ū1'Ģĸ•ÛÔĄĢøZKMÕîô}&ņ ŗÅͤΥlļ/XˆÛÃ|¤pGn1RxwGģÕ48um žŊĻÜIDČ>Ī>Ū ”( •;03ÎGWņ ÕˇŽ5¨¯ė$ŠĀYyNÖîĘō”ãpŲážb=ˇ ôŠ‹-ü Ŗ[Ú_č÷V—“O#4?hYš@H&V|ōNė}AĨī´’—Ôäu !Ĩ¨ë-wĨZ[,“yZsBBĩš*yÎy×Áđ˙NÔt]=Đ"Ÿ´GtŦđ*ŋ؜0šÜrN íKāxŦŧ^ū!šģąŽ[ ¯’H–áC íųˆĪBx?đ*ô8tņˆÍÂBØų–5!Ī÷Į¯T¨ĶˇT -Î;žŗđÅõĩčO´^…)$Ļl,geT/9ũk¸K‚ΘĀ$’ØÅD–%Nī9@^„ņžâŸöy8Û(p~œã¸Ŧ%''v^ÛŦËą€unxįĨK‰wä€ËÁį5Y,ČFRü°āŒcĄŠãg*€=zã¨ũE -Ã(ípsĪšu9c"ž;”ĢŠ~98'Žj´‘း`ägĐ(š&}ûOqW>K /ˇwĘ#ž™æŦÄH'qn8隭<ĘāđÁ˛Zˇ$ƒ,€AëPÍb4DMટģúŌĒ8@ `ķžôœÔŌ•é…ôīUb—š9§Æ;Ų¨”üŲÚ0Ŗ­HXcÁũU„)ۖŨô¨es’bOniā…''ÚĢ< ā5ƒFNqHd‰8T;› ķb¤[„Ũ´ą88栊ō”‚vúķūzTĸÕ71;~™§a\Nšr[#vĐG¯ôĨÁؤō ô TdäķFĪ,¯ÎAÉ=hĐDr’™YÕsŒ/ķęj$aģlc ųâ­ILIrė= ¤u… *ĄKuÉÅøĢšW‹DéĨ‚æĒLŠ8SÕH=FGķįšÅÂ“ø;EmRÚæû^žąč6o¸C~RÂ0Iā3wéų×ĸĩ”-ķā÷ŗīž+?WĶ›Rҝ4øŽŨŽ`x„Ēy\ŽŊjÕF´č<ģÂ÷~#×gļšĩšˇąēҜÁ$-nĖÎ$rB•Ævōõč;uĻëŋÚRøãHĐuUK‹Hî›áļũĐ2œ+ mUã:6ŽuQd:ĶēĮdļlŲ\eĀFNNw9 Z§ĘÁw bįOø{¨j–ú^ęWĐ'öY‚Ø,T#ĻG8UČīēŠčvú‡ÃŸ „ˇąūĐņ>Ŧåŧĩ]â5QŸ˜ƒČ]Ğy-ŽŲ¨ŧ*ĮjZÍéšĶ]GD´ē_õp” īķŪ;†ĮzÎņGõŌ—Vđü-uH.Bɒ­´4Dõį ôæ‹;ōũãév]Õ´ķw Ãyâbk}^x’Ę'ō‡C“{Õv˛‚KcæÁÍVƒÆ>*°“Ė—O7PÆŅĮ3,/ m¨ģŠ:Ēã#ĢTzīŠ-üGā­Acibē’B–‘G i^´ļė'pÎGqYŪŅŗmâj6wú;Cgwk"Āv€§Ũ°>fmĢķg {ŌKđ–ō÷WŽ[ÍrK›@UA”1›Ë‘?jīü!áI|?Ŗ%ĩåüˇ’œÉHžP &{~]¸Ņ$Æ@Ú œ¨ôŦWîlW*kRžĻiúž–66ūU´]‡%rOsîjėķ,q;(<Č=J#ˆséúS]`ÎĀ‚1€AY\eCppĀÄĮž3ڞ˛Ģų›P6sÔSĨHąûÄqˇisSa(1ägn)\dOČf\ §’ŲäUĪīûŲÁĒBčŨÁ?OëUČoÚqÔâĨ#jgļ}é^€?ŲÄC‡S—įqæĻ Ō ÎC¸ĄGU,[ą#’~•2\’ÜŽāū´ĀTcäįXr95’LģÉLãŒlĢQ·Ŗ{€y4\ąažôj"5ܲƒķaģíüŗD˛;•XöëSoũŪs×‘Ōĸķō2$É cžŋ…Et‰˛ƒŽyâĢËŊ\1ķ͞r=*īœ$ÁÜxé†<ŌųāD@ÁĀī@ʒyO¤° Q”Ģ# ‚=­Q‹IĶüÄšK Qq7ę ûĄxāĀ­HåRĒ[${ĶåD‹÷vs“žõ:ė1!fP)^{ûÕ{Äqėš1,l ´r `߁Z¸dP u-ĀÍ6G v(ČĪåLFt0‹8~Ík P[Į‘Ä›UG^õ¨%‚)įŒËË埑™#×~ĸėŠXĮ_Z ‘/ņ‚$õŠw) ĄtŗĮĩ,f6˛ņ’íŒS’UC˜€mĖrGp…Ģd`ä}hĒČ#׎*ļ —ogr–…ҌˆžA• ާ­1Å´ôg%ŖZÛÜx›^‹ČVˆ˜Á%ˆĘ°­kĨļĐ40nXĶɊ>ĻF' žüš§ xkWĶĩĢÛŲ ?hbĖąä–o\æ´u?^ę—PĪĄäˆIˇ€ã8nsĪ|ô¨čuMÁÔIŋwOÁ^´—DņZŨÃ<ßÃ÷¤`CÎŧ–XŸOZĶņ5ŦŠ} -Ģ ¯ S ãĄ$ņũ*ŪŋáģŨiė^ ô­Žā2w7ŽA˙ëĶĩMúūōÆáuTŠk5ĘæßpߌûïĻ8ĨŌÅ{HJq¨ŪļwßäTŅȃ[ÔŦĩ“ûEöÜ4ĐąƜ*āF:wīÍbi×z¤wš÷öl(Ęu2ÚN™ ˇāryĶÚh­gssyuvfŊ¸EˆÍå… ŖûŖœsÍsQxZæÎÖæušBĪ)iH„ŲëÎsžzŅĐ#:mģŊíŪÄ~/û=՝Ŧ0â[ØãųFrsüĢ_β´šž`˛ĖÄ bIđŠãåë×Ļ„Đ…Y]JˇCĪøT›cä }?­ G'iÆĪ…aĮ¯zh’‰BíĮWÜ>īĩNä*œÔÍŧN\“ŸéAuUË`cŠĮJĄ˜ų9#ƒÍIōņōŧЁ ļB–#0?NT)ā~T ÂESĀäįčhڄd)Æ=8ĨĀV!>ôŦQɯ|Z€ŨŠßĮ­VŧĩO%‘60rc ƒĶčz´ ĐuäšivŪP {5 ãV'ųAė=Ģ6îÎ „Q$*P€GCíīWÛ'7Lį5 ¸ ‡w~qŊHĸ5TEUr@Ģ ˇhÎ §ŒЧ)įž:Tu(`v 6ĮsŒ~•l^;ņÖŖ‰Bą}˜'€?:–3€1Ī9'žj’%ˆzũâI8ÆiÂB\Žp\ûĐ_?(8ĮZi=UAús@ÛÎzž”Ī-Y~`õéNT,Čtį­G˛[¨ČĩQä8įԚL¤2â^¸=8õÅeģŽōIÎOō*yįÆw8QîjĻMÛw.sŗĩ!û§šã—jíëJā‘Īļˇ?TXÕs׊Ē˙ڗ Į•#>⚭üGđūUZOõ¯ô4ΞDoÛŪŗļÖÎ=ú֔nãŒõâą,žãV´=éMIj[#æĀëųqJ6°ü{5EúĩúS čßīŸįTŒ˜2° 3ÅT–g,šĮjŅ~§éũ*‰˙V>ĸ”†…´f#æÆj˛Ō2ŽîØ$.:ÕhžāúJ>āúQ…-Įä•ĮGõU§áŗ’?ũUü˛4ôû‹õĒ.y<Ŋ' x8ö§Ë_ķëQ7ßķéLB™č0GNiš Ŗš#Ŗ ˙ŸĘĸ˙–’˙ē?­MÆ0}éĘäį#Špū/ķÚĸîŋZ,ž`*üàį’iÉķ(Ü2`sMOē~§úTÃîūØl¯lgŽi#FÜNøšoaøÔƒŠúw‰#=Šsˏđ:“Aûíô­÷ŋ L@Īë×ŠĒ˛JI88#˙Ģü*¤ßÔÔļR@ōåJîâĢÍ"€'ŋCI˙-?đĒ÷]éI2ė@[Ėn„úņWa‹…#ōF/žŸkC÷ĮųíM;ƒ%Œí,Nyā ņV7‚x ׃ŠĻãā˙¸*ÉûÃꙥ“aŽāä3L$“ú Ņ˙-ā&˜‡éPĘG˙Ųleptonica-1.86.0/prog/brev.20.75.jpg000066400000000000000000001135151506303110300166430ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀĻ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?jcJ°ĢĩzŒæĢĒ’6‚qŽž•d/ž3Íx‡°H¸RyīÎ*qĩ˛3‚OjƚyuPûj?ˇŋ–ĖwvāwŽ;ŗ8, g€1Ū¤ōѐ9˛ÔËä†9NW#9äÕäF =ph ‚\)õę=OøS_3B@8ú‚ •Î:ĐŨ"ú0$ôüęELõ5R1ã$’NIÍ^Î{НÁĢÁŸZk*ƒÛА˛ÎyúÕIØōĀņęMA%rĀÆ:˙JG äd0+5nöKĩēzŌ=܆@6‚™ž~¸ĨĖW!ĸe@ãœi˛\"¸ŋ*ĒĘYÕđI\‘ÔĶ/4†n ũŌ)]•}ģŒΰëJē„{×Į¨Z9ÚK‘ė*˜ 3m9Vž3KRŦä¸:zN§ēžüU(Ÿ0ãŋsRōđT€ §vE‘q\“ßųT§ÛƒôĒP˛ĸāLŠļ a§>•h–.3Ž˜ëHŠ0ÄzŸūŊ/õ÷☃ŒƁķšÍá÷aĮ)ĪJ_5c9,â4üaFî¤r3íPÉ(U š@ëÍ*ÜE´3Kî7†{öÅLĢÜōj‰Ŋļo™n`>§zā{uŠ Ŋ´”•Šę*>`˛) {ķE€˛@ĮAœõŖŽ@äÕ(5->ūV†ĶPˇžD<¤S+Žŧ ĢĻjĐjz…ũ´"`ö2ä2(ž~éü }[š˛p01É÷ĨĀ#j,l}ēÔfgTę0;{Tķ +‰sĩW=Ē™AĒÜKåü„üŧ}MshŸü“Q{›Fj^s…'žœSŨŠ)|žAâšŖkq’xÅ>R6Nx'>•fV2ÚG3îŖĮZšI’ŪÜģ ÅrvĒōxíPĸížWĪ' 9ǚ‡š—:r‡g¸žWøv’—ZqWv ;+“Įâ$ˇ“ŠļãŒų ?‹T/Ē^—ų4{€üģĻIúķ[ ĘF'‹îS´nĮō{ÕsEt&Ō}LØõeKŅĶ8'oۗ'ÛĨZ{ŊsnÆÁKzņŋøŠŲXcŨ–EĪĩXX—v6‚Z\ë°rÛŠˆ­â&vPt¸Ô­$’ú w“â™>qy¤Ēô_ŨJ­mŨ@ŌÁ"Į)ŠB0˛(Î? ÍŅāžâY\ę“K˛`m!Æ'äĶRōE{;Ģ܌Ųx”ĻFЧŖĀK68>œˇJ’]/WhJž¸Ĩ°9[%üsÍ.Ĩ¨É>Ŗckū]š¸ōäu~]† Qė3Īŋ[Wŧ'ÄÖ°%Ô¨Šc8į$į+ߌgĶ4s6Thų•ßFÔnÃ_”8˙§hĀ'ōâ¤MP6ÎcÖ.ŧŅ÷IŽ=ŊŋØö?0Ø˙hę÷jdž;xæųˆ€Qō¯ãœũ*ig‚ßÄ $ˇ.â |wÎO@ëƒúŌæŌ˛ÔXôĢ×p­Ž^íÆ[hLķØ|´ŸØrHá$×5<ƒ‰Wž?ŨĻëw­Üëˇ <ŌNŨŅWĪaī[–vŅĮeiåŗ2Ŧk†Ī^=éķ2e•ؐž™„‘ÉŽj›ûë(~˜Ą˙„iRgVÔõpítĀŸËŌ’M:=WÄđŖʈɑgāäí9ã°§ø§¸I-íV\F‘‚1.{(ãŸSG3)QWHriVQÄīo “´´—Ō€§ ÍZ>›o$× )#ŪɆiw§{ mĨøb[y.-Ŧ­Qąi$ėÚ{ûŠ[]ÃZš– >ÎTcą›ÉōČ5„Gá÷ļņÜË,ŒgˆHāĖyĻqĘŽhđßXĮok-ŧ Ā7ȧųĀ×åĀĪĩŌ§ ;_ čKŧdŲį'0¯Ļ8ãŽ)˙đŽh›v"ÃūĶü+K8\úuĻ­Älø'haĮcJėĘČÎЂėūưĀõˇCũ*eĐ´Á×Kŗ ŖéĶōĢį¸Í åI‘ĸėD1XXÚ?™ ´N3ķĮR=yé\˙†Ÿ>-ņJŒƒįÂÁOĄCĪã]3P‚H>ÕÎh+ŗÆ^#9^ļÏúįõë֚z;ƒZŖ¤‘°ŋ0Īi-ļʧåéÅN ¸#Š"QpŊ++6Í/ĄÍëĘ|—ØJ”?•r[ĻôũkēÖ팰8ĮĖĘFzW3öCęŋFĖÚ:ĸhĀs‚H$€(:…čOďîžNö§´y‹h'įžO5§CgPīˇnŦ+;Zc%Α ˙¤î r\#˙ՁbéXū šO:ÄEˇ*ō˜qÄmŸĶ5Tū!TWV7,îāq iĀËĻ–)­íįĪu äm@ũ;ķX–š&Vr=´Nfl’aCÔ=;ūUĩaĻčˇPĢ :Ņ$ 7—åFHĄ8éĩrÔZØÔVĶbU’K¨ŨĀĮŋ^”“øD†B¯ŠÚc &_ņĒÚn›Ĩ_Mwoũ™nÖQūå9ʆĪOŌ¯ęú}­Ž›ssŸKyË~=?ĨŠÜ•Í'ĄXøÃÊ˙ÄÎܔāŲĪåUĸņ‡…픘n7 “ p{ĪZ–ÜÛØÚīYbŧQw@šo•sŽzSn/‹Åsĸ@bƒs*ĘUÃ`0ĀāãæĮÔ/ƞĘĻ×+'ˆôU0ē­ĖĄW*~Âü7vázŸjKÚ žE°ÔR3Ÿą89QéV¯5AÜŅĮ %ŅËWnrģqžzŲü:Õ}RQ{ĨXŨ>PË"n!X į âw°rOĢ#O“#Ō5A8SÜūu,~)¸%@Đõ#ģųdcŸâĻ[ŒOmokđUK!‰Ī!ČcĐŒg­Mo;_Û´@|ĨœĢjß2€ ü§ą9—­]RŸV8øŠá?â›ÔYՎÕ2ĸaˆāãuHÉYeŰS¯ĻF?:Ũŗ2šČf%DFEn=x§uØ™Ķ”z˜#\֒-ŧ8Ėx y~ŊjeÔĩī3'DEmØų¯ōāčÄPüģvđpNzV”ĄĘ>œŖã‰[ŸÖ…gЍ{•†§â)%a›§´nVŊŨŗÜ€”ĻãÅ /™ö]NÎĨå$ûp´‰coô6đIk’ŦЉ(ŪF~m­ĐqŒgŪ¤ˇŽôę3˜'aämH]X˜×‚Ą$įŠ\ūFΊߘlÅNå›FE~HT”ō3“ځ˙ (ˆ+ęlaÎŅ#[ČHĪ@2ã$ä ŪWŨ|ũ­ Qŋbė+ÅŗŸė 4Ɋxd,x ļT5q•ŨŦ`ՑQîĩÄķ­Žu‹xĮī6é˛8PIÆ[vĢ iâ PúÜAP}㧀Ŋųųū•nh/ZöęX„.E–c•ÛģœcßĻ{T3hÍp¯ÉSå0Y7aŠĄ\61ėxô¤äû*pîGgaŽ$’ŽÄØęŠd€ŒŽ§æŠĮZ¸‹kkŗ0RŪ5Ü;ķÖ­iz{Øę×"ŧW Å^G'סĩ_iUå žF)s2%{&`Ū.Ąmktņx‚îoąá$ oTāáĪ }úÕh…ÜĄDž!ž†mŪW–ŅĀŦ[‚@œõdDĶ^ø‚Í\GįŧL†áƒ†=GaRKee-ĩŖĮx°Įxc]ōŧũsÎ›“[Á­Gž…tėOęÅĮ$+D¸; ôĢđųˆĻMGWƒˇll}qJŸOąK&¸ÛæHɒBĮî}ëQf`Ė ° =šĨÎĖÜUô0“ÂöÍąÅpfŒīV{™V5SB\x¯\ÃeĘÛäŲV˙ëWSq!Náü$€jĀŌ‡üUšĶĒ Û-‡ *ß֍ZwÖąĶÛŖl"Lą>Õi#ĀËĶĨ2 JqŒŠ˜/ūŨę°Û3uũŲfëÚ°~ĪĨtˇˆ& øVÁũÁ˙|ÖrZšÃc2$e'‘†ä‘Ū§hÃ&9āuīšj7rGCŒtŠ€^į­6Äb^#m9ę;˙…ajÉŪŲ ˛‚îĘš'3īī] ęĢ:Œc¸Ջ¨ĀgÕôõŪĄ¤ŽuÉĮɏëZSܙ“é[”‹6끉‘ŨۀĪԂ+gK´†KVēŠÔÃ¸í   ô'ŊTŗĶ$šĖëåŦo^R}܌n>ĩŠciskuæ´čÁ‰iG€Į }1ųÔļi+[r RšīˆS?*Í #§XĮ?ĨnųŌ>ÍĨŠîį…ú×?bí‰5Ō`‘b‘ hä €ØLõĻĶd0QÆãŽETˇ0ŠĐŠâŌ8ígŠŲ|Ļ’E.ĘĒ7¨ÆA>ô—ˇ‹Ms2m˨Īļ@íNŌã–8ČôéL¸°ƒP…Đģˆđ (āA¤RwÜ­ėO#†,Ģ‚ä2ˇ` ==âŦZŪÃ<ÂŲ<Ī;.ŖĖR ƒŽ}ˆ52čÖķ<˛ŗĘ•Q&ʅ<}=´›= âbüÂS’]ŸĐ w*ÔÉíŦCjmrÂA•€Įg=?ˇör7Ęn›ģ -m Ž5ä"`ncôĢfX¤%TØqE´3oRˇ”Āc*xô÷Í.Ââ1¸exY.Žå &ÆBÃ9ė=~ĩ^{Ԍk˜P*œ–ã-œ vbē/¤G€XpŠæ5ĶÆFHĀc‘$ 1ÆvČÎļŗiĨeŋ´P[2¨íõĒIŖžŧ5wÕŦūKsn#2ĻŌ¤ä“ĪĐUFâvēšÁ/ Kå~ō8É>nr1ãUņĻA­I$[­Ą‰¤i$U˛¯€¸ä ŽōzbŦ˙lčPGWMQ‚ĄDąŒu5Ÿ¨ßhz‰ļėUT˜üą$l #ĶąíšžYŠĶę_ļՄē´Öˇ- _?•‚K–‚xĀg…Aã4> Õ0 +˜yČ`ßŌĨ´Ö´‹5‹čŪ@x;NqéŠ|úΏukso<ÍŽ)r˛\ĸŨŅN}>fÔ5˙. ÁšüļÉFĄéÍ6KNtŪc€‚5ķ@L‡gƒÁÉ­AŠ]|hz–æåĄĮ×ũe0ŪęŠß&pÛNuĖ*ägīuĄÅ˛ĄUAX öšÂVå€/ŋθÎå,ØVįŸ—o<ôŽ’ÚvpČņŠ‘T| ûÎ[­NE´7Rr×q`~F˜5{¸ I-•œM)؉.ĸ ą>Ÿ)ĪZJ sĒĨĐŨxcvË`đGáYlQ¯‹ĩ ŧ ŋ9톕?ËÖŧˇŲaeæØßxØûšĮO™ĻÅ"øŗQyV4“ėVÅ’y˃ ã§ôĒJəˇĒ:ō7ƒųÕĐ?†.G=øĢgÖĻ*Å2ĩĀ ęqŒšÁōWûĩĐŨ°ūĩĪyũډn\L•„gŋ=jfûƒž*08^zRžâ§hõ9öŠ‹vUdÛ;y÷5NäÖô¯”`9ãũ^kJâ=Žd$tĮJŠxÂ=oCmĘ3$ŊģymW Å5Ąj×MÔc ?´aŨ!ÜGŲŽā}*ä–zƒ´ŖÁë‹|ėõ3‡–UŽFāž¸˙?ÎĻHåvō8VÆ'Œ dŲĢsöФˇūÔxž9„no”ô9õû}:ææ[˜SĈbų[F€žåjŊ’D÷’Í4ęQ,€O–˜Éõ÷­§ÚŪ__[Hˇį*ė@ÚĄAČÁéÚ­ž]F1”nî;ū̜~ķ]Ô[œđȸü–ĨO å~mkVŨœä\ãĶĨ\ОÜ@ÖķbPqÃÛÔ˙…OĮ™b.â‰Ú6Œ¸\ü힃¯õĨÎÉtüŒčŧ!l$ķ$ÔĩiX ײ.}s‚)ĮÂyû÷Z‹Øß˟įRvŨEŦm Wŧ+ąqŊ0 ú‘VĻēō/Ŧ­¤…IŸīāŊ=úĶį}ÃŲ>Å+ i0åD/)#ä琺~;Šīā˙O%Ķb9ųNųĮwĩKĻę_Ú!ãyx*ÃvUŗƒžĮå9ĪJĪģÖĻōRHĸ‚ˇÅ*ĘKTîŸ¯¯J9ĨÜĨEˇk×ÂEØÚ=—`rFˆÖ֝ÂxĒč\mi˙ŗm|×L…,`qžqšĘ˛Ō|Skpo%xįhÚyŨo¤Û!`›˛ aúœsÚļėd'ÄnŌ„IäĶa2"°`¤;äÔōiIŽ'GBŒô`` uZ†06į úTę;ãÚą4 šå é\ˇÚã˙Ļŋ÷íŋÂēɔ,lxŽg'ĐÔ˛âĖå'pĘ㞝{Qˇ+Ā?/9Į?ÄĶ”(>˜â‘Á!˛WæãVh˛”ņŲŨÉîIŦ-H<šĻŽåTfW^˙ķÍŋ¡.‘€ Đc­eę'mیÅF>ۃxÜUÃrfŊĶ'lŗxžæÃûBņmŎš A$p: ôĢkqyáíbÄO{=æ™xūHāŧ2œõ"Š“4^6¸žM+P–ÛÉō ÅnNįŒãŽ1ZËcqâ û)¤°–ĪNŗ˜\>’¸č6Œāzæē•¯ĩŽMîKdmeÕ/mne’2×䯍Åw‘g$JßĶÖÂ{šīmíßĖÁQ+ÏlöŦ=öpęZ„“Á'îĩ Įą‚üÂĪ' ~Ņéļö֖¸Œ031bY~bIÎ0: Åît- Gåi˙ړ–‰MęĮš˜ŗd.1ŸAÖ¤ļoĸ$vņFÖθT9äûķÔĶ .˙Rx˞‹ƒ‰„e”a['œcƒüéöVĐhúSųō—Ec’rsÎ'¯!Ŋ­­Ę‹}af˛"Ú&ÛGĮ–‰‚ĨlāsV¯eŠĖ˛Â˛‹uųH?NĢž†ĢCeaĢG-ɋĘ>ŲG˜2ûHĀā:sŪ§Ŋē´ŽX4ŅÎŌ.ŨšUGį¯Ķ“IŽĘöęAĻßĀZX­ãH™ĸYŪIbų铸’E:•ĩÅôRŲ,hÎJ)ÜIûÃßõĢÛChÂTļĐŖPŪqÛō§ÚKĻęrŨūîhđ’îQ—PÔŽMRbēŊú }~5¤ōDŽ&“ËFÚ ^3Į×ĨMĨ_‹ûFD#H$ō°€Įļ)——–z] ģ–%’Č(ŠĢšIāέ}ņ"ˆĒd Ŋ=øĻCˇ.Æ6­ĒOĨÚFËžågķ ”`}â Æ}*­ķ9ņĻŽĄ›æ´š]Ėŧã1œôãšŗũģx…íφbÂÃ:Ģ3ŨKÛ§­CĢJ‡ÅÚdbÍĘđ?ŲB?•8=BĸI$G§]éW˛žĪŧą_ŧB&Ú ’ Ü¯RyôÍ7ėiëbđ8C=؉Ø7n sīEŽšb5ËØn ŗŗXg+„ZL•Îq‚Hô9ÁoÅZ„š~Š×–áCÅ*›žRÁ[#9ĢŗæFWЏņ%Íŧę€Ē›išŪTžáTČÂ"yÂüŧ¯āæĩ4Í]õ¤ŠhŒ4ō,Q–;™S“žW×­Qģņä3Cb]#¸ŽXŧ÷ē‘#Ü6āŸ2į‘īV4-Ôå.!û>öE –y F$=°Œį¨Ļ֛ 5}ĘöĶÜÃŖiV–ö‰ė[į”eŒĮ~OOj†ī.níãˇŊKš%—{ŖĘ¸]Ē*NÕįsŖą8ɒ=V-/IĶ|āģ^AģʨĪ^=Ē֛­É.Ą{ÜąDäZÛÅ´í‚ÃæÜw¸8ĀĮ"–ļzĒÔ§ĢÛßÂIgĸÎ"’)<âQAR§+Ān ûdtĒēeöž.Rk‹GÎHˇÛi6¯ÎáđÄüŦŠÉáļņÖŦë†ņTYˆ'$y:ō+^MIæH!Œyin$Ü(aœcŗž3\ܯ…ėí ŗęvSųˇ q!r§{“É8vŠÅ^>hŒ,62˜ŽÁœ1ŒsĐU8;č…ÖŌ6%ņ5š[YJ΃pã(ΧËā“ôĒúŗF|_áÉCnIåCČ#ĘČĮåÖŗNŗá˟,Ũå2°Y?sŲzdšą%ö™yscrÉŠŗËD#ą˜ ˛•ĮÜô4âšŨ ŖƒK”mūĢĨĮ-ÁMģMA-ˆ“bī—f䐡8ë€O95kÄzŒøvæîŪH'6Î7‚AĀ2ķߚˆKa-ÂLt›ī0L˛ąnģŲFnâ:Ž `zU§¸‰áhŽ‹rņˇÍ´Â 3g9Á={ÕiĄžæ4ž!–ÚHl•V9Ąš?1Ž%DļÁ•ŋ0ĩŖ¤kĐęR˛\ÞöD…Z}Í!hĘhÁõį<—’•BēŲ(Ąp.ā Ķ~ßw#)ūÁԎÜÜaĮ\fJnÍl ÔΛWĩŅô;Y&Š&iĨōãv;d!›'Đ~¸Ņé÷v7r\Gh¤ŨYČˆĒ’Ā6āqÎAįëYo5ÍÕŗ[KáÛŖ † ,*NsÃÕĩģÔÜ4wpų^éF=ŗŪĨ،ãdšÕ_M‘ã’ũâiÔ2#H\¨“a€…įÃ}+ĸ‡XÕgÔü¸mJÛũŦDekFb!ųûŪĒÚĨæë!Ķn›jHīŊ= öCNûhFĄ,4áˇĻoņ˙~Ē›Ot$­ŗ!Šá.$ĐD~w—¸@qŧģŸ;¯N:Ņ6ŠjšöĢ}įÅ{8´ˇÔ&Ž2ČŽ˙wģL}zãŪē+IZ_[ÍsA;éŒ K }§Í°3˙ÖĢpYęŠęn/ėÁ,Ųā|ÏĘĒ8oøNŦ˛œ Np01"÷õįõĻŨÅąĶĻ[¯Ķ"Ĩž{÷9¨ĀÎr}jpÜãšôŦŽ0ķŽ `íOîŸÎļî‰ļ+ŸoĘĸEÄÄäÁåąŠy\ü˜äö?…üØÚ? vōN29=k2Ęs‚ ĐXŪ&Lø[PcÆ tū kjxËmÃcœãÚŗ|Go jxëög$œ“Į?•U?ūX“A‚ōSp×7VîĘ}žM€ãšã¯øTcÃQpSTՀį­Û*Ũ¤wdÍšYW )ôųëZVöķDŸ8 €yį$ÕŠĩĨĖÜVį.ÖZs\jÉ.ŦÍdęĨVũØ˛•0§¯Ĩ[‹Ãē ŨävÍ ķ—ŒKšī$č:doúSRÖ6ÕO|î<ôā˙J×ļđw„eĩŠa¤Ú1+œofĮ¯SÍ[š–-9P‹HļË"Ģ”U9ûĮ'Ū’=@Ovm×!ãŒā”Xg‡=ˆ¤ĒK¸Jœ\nĸ1<9ᨅŌ4ņׁ[ëÉŸũ• (4ģ:ļŠ×ˇj§y¨=ĩÜĐėŪënŌŠSËō21L†ūY´û›°Ē2ÄǎČJŽĮ? ›ę%JĘö4Dm´!RŪ€d~čqų Šfĩ„2ˆ BĮ˙Öæąíõ įÔ!„Íû§X…PGŨ9ę9Ī<ŽƒƒNģģš]Fx×ËDūbšāįöü)_˝fĶąĒ˛ĀcČR0?wÃôω—f#’,:}j…¯žÖ įH‰wķ2€2A |ZŠį^Jļ Ë8l3B2ÄāüÄĮĪZ` ŲĐ$RXœķ¤’å!‘#hä;äÃũ—õŦíVy­$Û]žLŦÅÁ+¸›ôÅOqßŲē|ķ3Íšv)´üÎ nŠ͉Ũķ3 ]sWŠÖdtŽ+ˆī$‰e6īĩĐ.SjnËnßėōIxL%R|ĻŲšÔ“×*~VĀÃzĶ­4¯ˆíá‚k˜-ŖģÔËDFG'iČÚTāķ‘ÅhõėAŊĢuŌRîÖ8fŧ‘ĸ–1 o)„Lü÷š\~5‰ĒÚkŪVšåHē öXāģ‘äVĪ€įžp8Īįníį’ëÃÆöŖ˜_HQę&ÁĪ͞&}s\“SˇĶîŧŸ"ôŦ24ŪZ…Ú0C"Ÿ3kg*x9Á™Ę8ãĢöBō?ém~–˙km>ádkpÛ7 "8įĨTēĐĩ‹í^K‰o-Ōģ†_&)æP7†îHaōŠŅļ¸ŧ:ū’5ˆ^ŊŊÚ0ƒ;ĪׁúPØ#§NYO9'o ŠœGRIúĶ;M<&āG8=…bjVēĪ”y'?ZĮÜ=˙*ÖŋĪ—ōđ}}Ģ'Úŗ–ŒŌ&P GÔšĸ2Ę:>jn *¸ĪņRD lûpMALIė'Ÿl Č×UO†ĩV`rmdĀ<“ōšÛ` üŖ íÖ˛ĩ¤SĄj9sZĘĒ1ūɧ‰ ü,å%™[Åvö÷:ŒĐZ=‚ģ(ŊxĶNĖ1Įaé]ļƒqYųÖ÷ķŨZ\ŋ™Ÿ#3'˂7%xgÖ¸›h.\ˇžUÔöŲÉ xÕ_s6@'§oÂē¯ \]ũžXî-ÆŌXmmŨƒH@ą?üëĻ{ņ܅olíõ/ĩÔ|>mļå$æ!ŒŒúâļãŧ°ŽęŪŲ`…dUwFT'@@ôÎkŸļxŊâ15ŧ“B^ß1ĸg?ģĢņ&—zŸÚÕ#1äæM§Žp3ØqYÍ+ũÆĐø>ōöŖyi%Ę[Ũē25A*ãŪ–ë$&Ųėˇ üÜml|Ũ8ëĶÚļQą7jÜ `ôËtwÎ0Yĩ(ĄÔ ĩĀÛ23īÉÎWļ1ĪOZ`ˇĩŠ—wS[›e ˛I&ÂNA‚F9éü¨Ķ.ĨŧŽ}Ęʨp¤ā2ã~•b˙Pû6§inĒe$8ÅŊąŽ>ĩ-ÅįŲ5{{BŸģš6;€$î`zϤ-îėSĶīn.ĩ"¸‰BÆXđ ؃–črj8žũŧG4EnØdũÜ )\qū÷9ü+n†ÄP˜@E 8ëÅI¸ČČmdŸCNÂsWvD)˜į|Yq$1uČâŗ$g-ˆâņ$qęwöˇ Ē,üŗ˜Ļķ\†;yE\ŋ÷Ш|Iûęt6m2G9–964Â5ųFÖb„mįŒûûT¯â[ Jksdë‡+$Ņ…'~Ī3GĖAPyÆ21Tõ j÷LŋÖeË\AhŅ”„ĘīnjcaųA,KgJÕG]›exu­V}TH-–(šŒZHž% ģ Ã`“Üa~ĩĢáíF÷Q´„jM͔¸ˇxĐûJešŨOЊÉoęfŧˇL˛ŗ)I‹—ĖA† ŖåÚü0É;Muļ7Ņ]ũĄcty2oŒ¯Î1ČČäsÁīD—'æ`ÜNĶKÕæŌ•Zčj DkōĘJ䑎síH5M/¯JÛ}˛Öœmã r ėÃnûį-šOMŋœķ__AĨø‚m=7]AzÉ$&Vf)ĀQīuíևŋÖ¤ÔíY­Ž)r´b60U‹9ÎāB‡Ž'`(ęŽ|CĒęZ}Ēy‚–Íä2ėe`ˇĘyF9éQÁĨxĸ[ãm%ÔrČâ_ŪōR J␭š_ ü¸éIö]nīVģÖ-l ŧ˛Z$ÖņJĒÄKą\–ų[OLsR}ŸÄŅ‹æ°{„3L%%Öˆĸƒ“ĩˇ+>î3UBMģËy–ãEF•‹ ÖPōᙀ‚^N1ÉĮj‹LMZoJ÷v’­´A×y”ĒŒ6j†Ã‡9# įžÂI.'¸ģŌ#‘&V†ø iöî›I™;Ÿ×ŠŖwĒk–Ķ$æSũ­å Ž$--š# 9Č9<×>°Šķ:ĪŗĒFã8ÜAéͧjä5Ŋ7Qŧņa#nāb>_Nk­ÉJžŧuägĮkzf¯'ˆŋ´!šÖ´x…’Ë"&Oīrq‘qÆzRƒ‰ôWŊšYŽîŽcoŸ0Ë< ŧk,œŽĐU“6ŅŌ´aĩšmkD:Ў7Ą.‰Ĉķ•#äüĩ——Žj—1Čn-IÃ#ÜK’’\qˇē”g/jÖN|AĄIy1Ü4wŌ Jĩz9úņT÷:ÅQŽ)Ā`1ëH‹Æwĩ9\ą#Ú˛f†}öߍ¸ú5k^nōÉl~‘ᝍüĢš¤L¯˜û¸É9Šb]ŧĐæĢųŠĖ#= X'vÜ CR[+Œ0~n:ÖfŽZM.ímũˏoēkBâLŒÛŽ:Õ ˛ŌÛH€ŒųN09)-Æö"Đ‘č–"KĘöņpÁZNŪZ+î@ŧį#Öšũņމa ” ZE€'îŽŋ…j‹´Fĸ BŒ–éĶŪĩ’|ĖÉ5dd,u_†e+o™ūá뎜Ví´‘Ļš—3ÆâƒÄX€G|˜FŲôÛ+ũFõõ;2įË3"ŧäˇ{­øvęŨ ŸSŗØŒ Ap8úzļ›z 2ŠV}Ë-ki ˛†÷6 vƒˇ'ĄÛÛŌ‘æX~ŪŅBŪkΊ!—ÄŒc$€1Æ3T“WđĀÔ>ÔÚŊ‘eMŠēuxĮol œžĩkžÄ ßiÛ%”lîÆyüčäŸbÜéŪíšY[ŪXŨ´vâ[Ŗū`31ķdņžŧÔÖ9šž¸3ÃtōüÁ.â2sˇĻĮ\zФž)đÔ~SFĖ4h•ÚĻx§A+ûģčļ3ā!Á,IįŽ§úĐĄ.Äēąą8Õĸ¸ŗž]ĘeØbã$X đ:Hu4MKN†hdtžQļč`6–ĪˇÔZĪørHöO¨†PßtÂįÃ,š´P*4ō ­į )$„ûÜĮŠŠĒx“N™<”ÜË:,Бáē‚w†Û‚¸Īą=Åk­´ ^]Idž1Ŧé]sĀ9nE\;”ŽÍcˆÂe Č_ž8éWuØĘĮ/?‰īīĘōāėŲâš+Š2÷ ą2U8$”Ž nėt­JJ7’8d‰ÕĖl“&Ö Ŋqž¸=ęŋŋHʍđd`bHzžGü´¨ÎĄ¨˜ä:ŲP¸âh?ō%7gНLŠ56ÛÅ6qÄĶG~†s˜aÜã-Œāg“Ščl/O6„˜r‰ö‰QT\€–]§IĐÕEôŨO€CÜMæI›¤ÃĄAûĮ(…N'ÕėĪËĒÜŖJm“ ļ0ģ+ŧ“Č?Mru&’&’-5&.| ×,Hb§ f1Û=;f¤– qĄ’iéĐeƒļ@üĒ.ŠąnÂw’ycČČ ¨ä)ę@5âŨ;VÖ¯m…ŒqF–ŠĶC$„dĪšJ d)ųšûØÅjCkŦ,\^ię9Û;dûh+9uŊđ-Ų×,ŒsĪä#Ž1ĖŖø@ķ:ûcŽh…Ö¨rąFkMXŊÔD7ˇÉÚŠQrŅüš‰ŽÂ8Í\÷Čô­Å¸Ŋû~úŦq$Ūu ƒ,ģ;I'œíŸéŌ­ĨŽŖ’˛jČŦŨJ[(ü˛ÆĒO§ĖšŽ™ÎŖ-Ę<ŽcRˆ­ļpTžõ\×&ĮUĢGšHeėAįē“×#éLG<“ו­¨?îÎN1éXŪh˙&˛{›Gc-cŪáÉÁ9^;qVNQq“€ķĻ. ātÅ:o•Ž8ÍA]Jŗ8y^EWu/m+&å Č?ž)%BɌ•ĮLd~ĩ"‚ļ’VbIÎ{wĄnSØÅŌt2ëEĶ.§ĶãšWļˆ37 ágzßÃÚ!œŸėËU8ʁ8>õ‡áoė}1šiP X€^1÷Eo@ŋ(Î9Čé×Ūļ”ß3ÔÁEYh`ÜE¤Â/Ņ4­7ĖļÍjylž€{~ĩŖkŒš…ē6dVX ¨0ĀĮ=ąëíU>ÖöēŨĘ÷Æđ(œg÷ĪŌĩmŽâ“W†&„ų’ÂÎ ‚;?ÄPÛî\cxü=Ękz˛iˇMiiÜ$Á#1YŗLsĀ<ūĩiŨ?— ´Ņ[3u2GöLļŪų9ųHÍMr÷ˇĐ\Āņš‘Šœ+(rzsúRi2Ü^[ģĖÛÆp’*`€Osœ2(ģ•šŦ?MËuzˇ"ĘR7XvÉëÔÕÆpš8pW]ŧÖ*\jMbÆ)ÖC+,¨‘2)!Į<‚)Ī\uį5Šz/ ÖÂĶĖt3pģFv`ōIô ~t“ēĄī4Ē2 8sČÆiQ(Š7]­€ƒņšĪĶ,/Ú%ģšžt,ȋ"ųAäāsÉ–*ĩŞĄåܤ‚áã{‚Sk¨%6ôāƒØĪ|PØ*jöšŊöŦ*‘88ãŊ8Î ,ĄNIÚĀž=˙•bŪZ^ÚhŅĩ–ô0aBAœnî{öĢ{ËĢōŌî† 1D m^‡9“Î ;“ÉŖ‘ĸoŖVd)Čé–āô˙Y>+˜&Ünh›íöĀmb?åĒQ¸Ô.tû ™ÚYĨûC‚ŌE„ظųģ~ũjŊâ Ŗ¸Ō,fXJĢę„ŦІž^ŋ•U7īj*”ÜcrŊ[SSŧąĩ‚Û$‘ĩmāäoÃˇČÄ.HéÉžiōm^xNöÎ[{Ēĩ“ŽAT ė­´Š €zgœŌĨŸXš:öĄĨÄY"†ĶzO”ŽcqË ũ×ãšžk?Pŗ×o|*ÖW6{<Û&2ūî2„L„E´`&âN{ÜVŠlcrĩûx­Ĩ¸†¸†ą”fžë„}Üõ&>ščyĢēlū'ˇÔĀžGšĒ™#79;Î9ųWųúÔ2ˇŒžkĪ.)’13<ŪŨ˛˜]ĢĐļ@nĩĨĻßx‚+֋P°šhĨ‘cG-XĀ —;NH$(Ļöč.ŖîæÔī4ŨZ )‡Ú–P°ēTmC€Ũ-ƒØšnŠš–•ĻĮŗˆ!šf•ƒč¤ü™aÜđ Čüj[ˆŽ§ŌŧE)ŠõϐE"žŌ¯åĻŪ{v¨!—[“_ŧwvˇˇō Ey¤Œ8b\*bšų wô Ą]FøĸŅĩgĶ–Úâē‚ä9Ũ)Â…`Áp Î8ŦģYžæâ_ļh¤ž8$KšĄV ŗå Û •έj-ûøVž°+o,ÖŠöy8W^r ķ)ČîŧįŠĻš.ŊĩúYÜÉÜĨd/öåÄpr1-ЃīTļܖi\›‘6†o<´uԏĘC€ĻUs‘÷šäSÖÃ[‡PÕ¯í ¸K¤U„K,„‚§ˆ …āžūĻ›Š<ĢŠ$$ųZœ!ķ#2íe ā“Ī=~Ļĸģ—Ä/.ŧ–ĶÜäM؜•Uû˙:ŽQGŨœ‘Ķœæ¤f‡…έ‡áMF#Ägbff deË(9$~XŽ\év–ztæ]fÕÉāûWČŌGë"’Ũˆ,#Aíƒë^‹ö•,#;ƒ?úâ¸mCAio/>Ų}aŨņš ä‰Ņ’¤Y2Oĸ/Q´]ƒÂo.˛5'Ŋ†HūŌ÷pÆÖĮå,¤­ØėnWĩ\ō5(îŧ<—ō­ÕōM/™*ĮąOîß<ēJ§7…dŧĻ¸¸ļØÂņ­ģ ūY^§pÎ@uú5kJ÷VúŽ’/DYԈEēœŒN˙Ž8¤Ø$thƒoŨ'ØR:åS‘ōžÄS$lwúķY˛Ņ™~Ÿ¸< ãŌ°üŸĐVũđ>SõŦLVOsX”S_|Ķô†L\Ąã=N NÁKāõ={Ôs&c™s‚P÷éÅ ržĮn֖ēŗG}u$6ŅéđČĒ÷Nƒ~@zt•ÛhvŠigŲe­åo5<ŌXÆg<ū~ĩĖé–ķÉŽÉsu§ĘÚuՄvģØŠuy#9ÁÁĮÖģËUŒ[*€ĸ0ĒuĀÅtU}jkŠ…o~,uÍRIcfGžmĢИĀįˇA[֗†ú{ĢeZŨ‚äœäã'+Ô`ņT4ĄēūŠҤŠÉlā•ûŦĮnŸĨ:ōúßHŧ•­Õîŋy,ŌxČ ØãÚĻHÖ I[Šb Böå4˛`vK”o9v™' õíS_ß_ÚŊōÛŸÁ4ēb¤Au#Ž•ĄŗĀŒŧĘ@Éۀ}ņÚŖ˛ž¸ēŧģķ ¤pËäŦarŲ䞜‚)&[ÛEūekËëØn"ō y`hdeÄLX0Æ7ĐOx¨äÔ/WIYY<ŠämģU~fPHĘ#w?)Áėj]W\NšÚØBĖŌĘģÛË,IÁéÜôuæ ’ŖƒƒzŠ_¯'8öãŠh“hČž]Jm2‚ä€dāÛHņĐņīV5}Bę;Xmn&v˛ĸ°K1“Đ;ĶtËŠõ")ŨdY$UBŸb$z{U!īÎ%ŊWIđUbĘIÁ8{~XmĩÛBúĀáÕJü›~cģ¯ĩ$P˜Äj#@rI ô䚇ÍģūŌŧ!ō‚ÆaģŽ~¸¨´iī¤šģ1•†5 ÉįŒqĮL‚y=ũ*Ždâėh,aT)EûĮĪáXž'ƒvŸ§ü ŠZō?ëĒæļÚbĒĨT3ŋ č>•¯fė¸åLí įÉįōũjŖšb%×$ƒÄ×úuČAl‹Ë…Ų‹H؈Ī;įQø—JšÔĩ­$C0ƒ*Ī/”$r Į^ÕÚæŖc>ĨV)+Dča1Á/°XdųBįą#5.ģ{5ī…¯įą[¸îâ˜"ŌE}ęā1ÉFGViωē3íáņ\ÚˇÛf†hŽXy\$&0žh$IÆŌHnp{ôÕâ´ĩƒSŠF˜Û,ŗ\1h”ąĖ`/ īÜįî/5Ցm•Ę[Áq ‘ÍW4ģŸqÉ'%@8*yāvޟJÔ.ĩ-<Į}i$‘†`ŅBĖ ¤õ<ŽĮŠŠl sæ۝3đX™ ŅēũŪÉĖLɈä0Éã=;⭘LdaAįŽ1íTí/_ĘJ‚>_”ķŠé4vģŸLļšęŪ[yʍņģ#Üûž¸Žw]ŗÔ_Åvú˜û4?d’$ŗIä@÷fbÃoĘØÁ8)EY„™¯…õ›ÛÉŪâæâWScåÉy.e€Hį#wåpÎ9ÅoK˙™ AmâŨÍōBĮaTģpO9ÆįXúf‘ŦŪÉÅåŨäpÁxĖđKy*<Š­(Î1Ā9ˆíÎ^Ŗ5níīÕ4ÔŪ1uöĮ`c°*luį8ĮëU'q#´Ū1Û8üĒ'˜ō8īšb°Ú~nŗR8Áį5‘ĸ)Ũ)ō[ˇsĀŦ§Úļî‡îYš >ĩ‹´û~u”"PˆeõīR…V$6r:ķQEœr3“ÔtŠqōríƒY”Č^ŅųHôëTž V<…ØĀ‚I=+EˆœÉĀĪz$–˛oŧ„0ôâšÜwiZ.ĨHg 5œGˇĘ9üĢlÛ!(Vã­s:NšemĸiVīö2;HŅÂYĘüėZÖ˙„šÂ‰_ļp]:lŸl•­e ]čeÎŦAįIcŽk3+ÄVÖŧĖØRKH9Į?…jI¨Û˛A,‘ŦҞ‡,HÚŋ0.G'<ö㚧ˆ4丒â=;Uw•U†™),ĒXŽrŊˇÎĄ—\˛¸š[Ét-vWŒ/6RõÛĶ4ÜdĮ ĶÄnĩį—­Ŋ’žô‡abCu°ãŸŌ˛ôŊBi|=5éâq1ÚܐĖ@8Ú¸ÉäķĮéHū3mŖ@ņ ą8ĮØHĀĮš¨ãņ”ōB‹†ŧA¤¯ú \ŸŽ~´ũœU‚VˇcE$ģž{(|¨ŗ8Iæ+]ŊXʁÆ3ę*yo<›û›1`pR7vÎ ÁĀÁã=9äzÖ"xšęIžŌ|3â đî•H°ĒÕˇˆo×{§†5ŌysäķŨčäŊŦ{ē9ŽōŌy™%UWí ûĀ`mąí\˛xĘGҚę;K‹Ņz,ĐÃ+W9ØĖBä‚F;g=ŗ[6Ū"ŋƒ1 ë% ˙,sčéT§ŧē–8Qü%Ģ?”wÆáĀoīcP3ZF6ÜÎsģēĐ՞ōâ Ģâ`‘mÄEŖyb ˜~örGáŪ´"šû>Œ.faæ4ØĖĄ1ž@`; âą§ÖõËĨcđ…Ûˆ–ō%ëž:ũ)ƒWņK.Æđ„™PŖ/¨ÅÛŌŖ‘÷-ԋ['ņ$Ie§HąGæ\dÂ1TRpqÆsŸåôĢēʉŋ˛]7cíņ?dÄgųÖlZ–ģ$ȗ~Xa,I‘¯âm™=pZ—íēôÎZO ZŽ ę ÛHČ?ãBŒ“ŊÂs„’åV#mk[¸ŧŽÖÔiđ–ŧ–ŗÁ&ã0ˏ˜qƒ×š*=ę]oQYü¨ßi7´‘ŖŦL›”īGÆ~Ŗõy^™Ë'NPqËęAéÄ&“vēŠí%ž’ƒÔ^IŽŋõČU˜œÍÆ­ŦBąYÅĮXޅƉæ'uĀĘdŒāGÕNs34˛+ˆÛh' lÜ0Bāw­Š(wMGL|>ĨĢļã÷F1L6zĶ a¨éŊ?asŒķ˙=¨oK9ûë ûß_ē[HÖŗŦvŗÆčpđ•ÜŌ#76ãŽžÕ ´ž)´Ņ´û>ĘęŲcĶdG8€0Ũ°āķ’W“œŨ3ÍmŲ_\ŪŪ´0jöSLĨˇmĶ䲐Ī™ŒŒôÍZĩûeíĒÜAŦY´DW,3ĩˆ=dõš“ę+"–ЍHú8IŦīÕíu 4i'Œf`&÷ƒonô]˯5öˇŦW‹Ų3e+y!Vp ßåûŪĪJŌ{+Āņ$Ú܈e!Qbˇ@Iļ9 ŲIü*)|ļģ–ÕüSt'<ébCnw#ËČ(LfžŸs2YÄ.†. (n„îÛÎqĮ\ôâšŋéÚŽšuØäŽmnf‚G9->õ*O˕oPsÉ­KKKøæÛ^ŋē…ÉÛ$w*Ž (˙"ą.um6ÎīQŗ6úÄĶX"BAæä§ ‰:ęH8ę=hWž€üČÛÄ:­ūŖå\Ü[Å檃s*‡MŅąüŧ‹‘×w#€kVHîËéjé ŽÚœÅōĸ?*m€’9 bĸMKÃa‚k™Å˛ÉĖcšŊ‘ļĢmë– ũõüÅ_šÔ-îŽt)mfD×mĩĐäcėōŌ“}$oÄŊ¯§_ūĩM´äpsØzT?, đ:›æ+•;\Œ ôÖ˛4!ģRŅōŊ+aô­–Ęmę3ßßéYyOOÖŗeÄËTČ98æ¤8û ôtÅGãåúÔÎAbsÛ¨,šlm$uÉĻ US…ŲœœûũiŌš9Ú§?0ę~”Õ8S¸¤œķI=J{|3*'…ôv“-žÚ0p?ŲęMo%ĘüØSÜņĪå\–—}caáÍKëċ6¨<˜ßĀčŊ˙*ŲĶõ}3S•â´ģKŪ‰”Ą˙d€ki'vĖnŦ‘^KŨJîmZa,7"S) =˛Äú֔ox<@ŧß$Z6> ŖįŽqÉ#ĐöŦ—Kģ;ŨnKcp.Ą!6ī, Q‚?ĪĨl[ĨôÚđuy~͜˛•Âۀ:gvīBF=)Ę×. ōtęW6ڄúuü$LĻYIžė䜕ø÷ôŠõˇ=Ŋ‹D$ˆî” ļ¯ša˙×ĢŅßGsö{x û,˛Fʄ•”Œœāį<j‡O†Yô‰ÖXî<ā$ dÎâ§Ūŋ¨ŖAˇ+)h/“z–—jīrŌIpÆ˛¨%HādũŅúĶ ū×Xl—yI#;e@Ûņƒ’v퐧'ž)ļÃU’ãORJaC2G/ŒcwrH'ŽƒĩwRĶîÛR†[1ąüÔi\ãå$wæ„ôvvv-ĮpŽĖņŖ0Ø ÉÆ:ūĩ#Č‘äą>nŧtĒ&˜öét×ĢČãp,Tâ#¯9ĮĩRm"øĪ,4īˇŠÃ÷ĮũNÜ0Č#hœwāb̘ÍSMĩsĄŠ@‹ą?)ųŗÛ4–ęŒHË(­ĮŋŊgꖲ›9ŧä*íã OĻ*Ŗ‰^iĄQk${l§j( zҍC+ŪÚMo)HābfU€ËƒÆSšÆSqo¤éŸk ˛R2ĻY2vŗ'#¯Ni§w`qJɌ’Û]wņvĶÍ™ ˛ļoe‘y)]¨§<ķĐų5>ģiŠëŧ˛žÚ/" ĄÃaĩÎr0aô…SÔ-ĩFã]ŗXįk+‹pļí,Ņ… ’§ķqÁĪZtíAŧ%¨h&É!fąu‚Ug“y €NŨŋ.yĮ cp0Ā$ōš'Ĩ\Ķ4īXŪ´ķ\ÁvIq+–ŒąÁ\p7ã׏ĨSõ§ SCēŗ„´n>bĖĄOšÄąüØœ ļôË tâĐ# Ķâļmã wĢwŨķōÖLöS^čē­ĨÃÅp5&‘HËΘ‚W’Ü?I ņx’ëPėío-›¤%ˇ2ĻĶōŧ`’rO9ägĨNũGsmģŨVÖ-QúâøIå0ávĢ4nŨåį#¯5bĪ¡…æIá”Arâ[n­š’@[ī&ė=hŧĶ˙´5‹´}VÚ-RęŌ(qm3å&D%ō™Á\đy{ÕsáoļÛj owŪI1+’V!ą‰lœ÷ ķ“×Öīæ/‘Ķ$ZŒ)Ļ.Ŗ9šš%šDMŠÉ?„tųH ہ5ÆĄs~.$c5ŖĀ-ÛhCģŽX Øīס°ŠÜÁötŸ`†;Ä[eŠ6#ōđdœœįŸĨeŨB,üCquoĢAg{¨ÁŦrDÛË$“‚qķ.GNŲíYĸë[)l4Û+O:IÚÕZWûÎ@ÆOÖšŊsM°ŌnEũÛ_Jn.×`÷Nč#Ī `\Á5ŲųŒĘT!%q×Ŋr~4´Ķf…nõyîŧ“%˛E yÚÍÉ|ŽrŽŧ (?xob•æ‡ ÛÆ"ģÕf‰-ĸKsžås˜#ŽU;:ģwŖ†œ´“yú”“í–Lgt21\Œ`qP>•cŨÛęÚ¨]’Į*“*#!U€n~ xĶÛ§­hÍ)ą›Keš[…šũĨ ,ģ¸xĨĀSŒŊģÕ7æ#ą…BĻHÉ#ļjA´āzSPp6ôĮĨ;;@ĮNϰšĄ˙4-ÔqXŸ/Š­Ë€^#ŽŪĩ…ŸqYɗ’ˇ§×š—øHÉįļ{S#' Īnj_NŨ9=ęJeYFXã’G÷‡ĄÜA#<ã}*ÄČü ÅDŠĨI9'#Ø~=K[/„ī3Ŧ\yŽÆHm-Ŗ„lĪîöÁ=9Ž„k’ÂV4å˛o8DfķÕ×&>p:gīvŦ› Ū˙JŌ¯ĸš–Öú5hRh[”3¤At5ĐéŪļ´Õ›S¸ŧģēž1˜žÕ]ŊqĩTgõŽš¸Ũŗ™^Ä >ĨũĨŠKk †r-œĸ¨ đTõöūUˇ Ú™Õæ+æËËP§*ļyĮzŸģ–×WÖåˇmŗũŽŲĸ.šä´ƒßĐqÖē[+“o¤ŦׯW!wų>lú`wíÅCÜŅ|¯ī5xînžË–ĸHs_W ōz~u5ÅÖ Ú3MiÆí„yVCœänāŸOz“DÔŋĩ!¸ķã1ÍĨJėeĀė2z‘ŪŖĶ/%¸›P†ä2ˆHØBã#ę Ī?J. [Fļĩiuyâ×ũ27߁øķÔöÅV¸ŸTš×USl¨ „D;°ä6īĐũjm&kųuķŌVĩ1€epŠĮĮ_zšæúņ5ë[h­žK ˇIēĀdßĨ}v[_2¤úmôÚÕ¤él†Ũŗ>c;įg=ęæĨ§ÜÜĨ¤pI4\í’H$1•Iõ>ƒÜŌK§ÜKĢ­ŌŨH E“÷ ß.@Ā#ķ?ĨK~ׂöĪėąHŅÂCHDáUČÁIčiô6ĒÍh…ģˇē“L f­!ųU‚ÉąŲCsķ‡ƒúÔēU­Ė6ŦņÅ ā’មÉĒ–Ļņõ+†2Č-u9R;€] €xį¨>ĩ­´÷ä8@ …ŽF;~t.äM¸Ž_˜å€ŲÆyĪËëøÖ7ˆãbĩl¯Ëh>rZ׸+&v8Ldo ņô÷ŦßJđx|ΞÉđ8#ŠÄŠ‘īž˜÷ĒŽæm™—:æŖkã+ +ė3›GÖ1™[ wOŨ\ķŽy>Õ.ˇkw­hzuÄS$âîŪ&tE’%Vųŗ¸ã8ĪúS5+īÅsŦĮgqĒMbëkœąbrN ĀņŠ|MÖŗáõēuË\G$RƁФƒsaŽ0T63×#Ö­-‰fM΁¯%Ũ°-2C§0[Im…C)`œ—# ŒŌļ4hõč.ŸûVa%ŧŌągiG T"œ_9įk%´ieĩļÛ:ÛÚ]#[Ín*¤~K+Ŧ~öö$ŠtÅhčŅx‚e}GuďsTۊ‘Gˇįts÷‹p{Ē{ w§M{iâ+K\ųŌ\d™ŖŒQ’rƒ8ųēwéĐŅ­Ggh‚îŨo#ĶĨˇōLû ™RŒG%°õįŪž˙j•5ČíÄæs8*"a`ˆ˜đ>ŊšĒ6Ú6¯=æ—uzTMoŦĖō rä  åƒH#Žî)&2 &;­W†=b {̤XíÖ+ļ.’°KGĮ$ õÎG˙˜ŊŽīė—đå% æ7‘ŽåHÁGį<ķœįšŸUĶMsS ĒÃeq{n­fĻåŧĀȌŦÆ<F äŒ{Õ=?ÃgPĩ¸›OÕŖx™×2ÚŨHÁČnF9į”'9ĪÍõÍ_KÜ,oÜŲĪmfMĖą•KØ|üŦ[ŅBœžN3ÍEuá×ē×ĸÔäED#xÂą$Øįp|ũÁ#š{Į{bŧŽawˆE#0‰“`%ŋ‹qÅ7VđŲÔ/NĄ[ėSÛ:´Ę~nØ ö?zŗų”liņĶĸ\ĨÔĒ›$¸U Ŋ‡ā‡Šį|mga%šŨj77 ao†Ū3¸ģŠ]ų´qĶÎjö‘Ŗ]Y poQ ŽÕ h"Q ŠÄ´ƒ‚yÅTņ|zÁksĒO8ŗ¤c-ŊŲÄrŊŊxĨ'¸=ЇBĶmoîĻÕ5(™QbxÜÉš!YߎåWŒāđkDÛĀŌir5ĪÛaģÔdi °ØĐ˅\q´q­c\xZØ]^ KTEˇ[HĄI^HÖQ„hË9+ÆCū'Õŗ%Љ´éÖũԒXÄŦL/€„ ĮZmų‚:ņ"¨Æx ã$q0žâwv⊌aĪŨÆN°•+Ōą(‚對œp:qXš­{Ĩ!“œV7ĪīQ#H•På8=xԊIPŲ÷É?ÎĄFn~S€*ÂąnØ=˛;ԖʗŠČ'뚊6c)Ë1šŠnšVPüžã#ZŨŒä7xŠ-lbøNØO @ÆG $œŨ˙M['ë]DQ)cĩˇcō‡Ī8ī\Ž|,4čŖK{™H¸šfōagāLãķÅmEŽČÃäŌõb’Íö`c–Ņ8ˇ&ÎtՄ(cņ5Ö<Ņ3XBT. d|3ū×Jr˨Ácl÷&â;4Ģ4Š>lō8Ÿ÷~ĸ QV†á´mInL%ÜĐŠđdÉÆ?ZĩũĢŠå>\vãMSdûEkXŧ/eķu[• Q,xÎŗ``āc=*î…˛éîn"ˇ˜Č<đ `Q€zāÖ?ÛWwŠcGŠ÷~Î\Îʁ°đTcž{įĨRķõ;K}E…ŧŽōHZؙ‘Ę9{!CqŸüU?Q}[O°›Qģŧąōm!ydXm–I8ˏÍRVfrwwFnĩ¨kqĒ[Âf‚Ú ’˜6ã&w ųFxÁÁ⥞MCUđE͂Ų]ɨCov ‘É0f#$wÎ?Ü)uąÃ&­§$×÷1InÁÜNŅæķøR ž 4‹ĢXHąą ˛Ņ˜ŠW‰zūĩIėIĘęVÜnļ–đÎl šļx-āR’ ˇČXeRFŅ•jŋgqâ{k‰įģ†K¤/ qÃû”[ī?îGNN*åĻ u HnĄÖŦV9a3/›lQ„mü[Lš=ęä-įÅ vú͛Îįrē `āá]įĶŽiļö°$ŠØ–I5uŽa•ĖožĪČ2w8#=ŗKĨÃĒØĮiË´ū`y.ežbīmEã :ŒņĶ=ęAízÖŖT+K ÍģÚų‚y5¸‰6FFO-åūŖŪoĖ4ąZOI-ėÃW¨íúÔįM¸të|Á$ņ] ÎÖ`Ązž­’úŪõKÄ0øIŧ; M°Hׅ|6L\`Ö…Ž¨´ē|÷"&¸„(™Ų÷ ésÁęüjšŅ)Zú˙V4õRļ‚4  Dƒ|aΎ#_zŽ;g‡Wģŋ>PŽhöėEÃŊ 9ëÉč)÷\Ės›fˇUTIJļđIāŽ™ãœÕ?KŽÚÆ;y•\|ŌėX1<‘ÎIĄnG5Ŗk”ĩhF¯äĪ D˛°dų›pž–šãˇÚƒĘ!F~ÕōÚėNáÔōI­Tlk7ąM!1:iFųÁ'ĩgivö{AĢÆöëd,m™gM×r0v’ŧžNitkÆŌ-{HûdwR\D&–ã1lqˇkŪFON=ũj;-ĪUM=/JāEk„ØO™¸ĮžĨƒ 8ëĮ$įgP¸ŗoiVŗ›šŽ-#Ėeüĸ’†*…›w$‚āŪ¨[>˛ZŽĒåm6ÄĶÄE d0mĨy>Üæ…°‹ˇVká[ˇŌ¯~Ņe–đFᓠ‚0:āō}…YÔ,mNŋ`Ķ­ĪÚqnU¤ãģ.xīéôĒrà ŋ„¯RĘæ[›WĶ^I:…Ea•ĀķÉīVõCĨOĒŲũŧ ŧN!ųßä,ĮoO•IaÁ=HãĨORôđ͝ŧđ$ēCæ$€‰›Q™–?÷2Į ŦīOcĸę6Ō\Aoq%ãF$Ũ•Ø#‘J¸SvŗįŒŊy­Ëö ;[E–GXÔFi73`ã%ģž+ŸņYĶmžÔlÖáîbû+nšdÛ.Ø;dãŸåJō×QÉY ēƒÂvnŅË´ĐHņgėĶHFö*ʧvYˆ=yozØÔ4+{xbk$ŠŨįģƒîŠÁÛĀÜ3ĶhÅbÉũ§Í¨ ۇ¸.Ö`111sX¸‚ccˇ“‘ž•Ģu:^Ÿ՜LZ[ČįtmĖîĖų=zũTŨüÄvGąUNܐ7c€M_ÖĢBI*Oĩh€#ãŋ^k$‚LĪēbUĮxú`VFGĩl]°€GÖ˛6īÎŗf°ØË@9‘Ûĩ;8ĀęHÆ*4ųI99=Ē@ā/‡ŊIŖ+ÜŽåeŽxČ=*8_÷ƒ9äōEYb1ŸË5XØ7@íÛņ¤ZØâ4ûéžĪuϤ´gTœÎȌ@_3;r­{Ø?ŗuK[‹kI\me›ËFo—>ØīMđėŠXPŖwöœøŧ‚+Ŗĩš@\ÄC)”××'ĩkQûĖPŠhĨc Zļš}SÃķ"LŖÎ`îŧ#É=AëųÖ֙cĒįMkŠ ōD‚`÷ wr§äŽEWÖõ lo4¯ŗįdˇb7Py`c“nq΍Ģú-ÆĻ÷BūŲãRęĘK‚*>QŽÃ֝ÛI›Q•†Ũiú”ˇ—f'c¨ĨQŽpFsŒ;tôĢ“é÷2iņÛļep‘Ģ0 d‚X §JmŠģ]züĘd6j̰ŗüģēļ:d{žŌ=ŗyīĸōD~[ ‡{ũNqŽŠĄsjŽÖš’iē[YÚ$YŒČÚNŌKgŋ`8‘Ŗ2IüɒT‘ūT €Ŗ“Ķ'æíÅ>(dƒXšûäō."Xö€sšIū9ũ)­§ųzķjwā`!Æ3Ā<}?|S'›u}ĮXiĮwqs#K‘˜âG˜¸õ-ŒādņĐ šĒ[]^ioĸ;.e;[‘qÎqëT¯ŌîMbĘęE‚lĘß6s‘´p}yöĒúJßE<ōI4…*,…÷œ’[nHSŒ ø 6Đo_~ú–í4û‹=9bšeyFJųjQÎgŽ:dū5KÃPGofđ¤đË(9™ã9ųŗüD–é“R^Įq.§myĒDŦC<ā€ĮOķÅCŖXÜéĢ,o"¸.ÅŅTzŸ¯NqBÜm§ŽŦÜbKĪRxĪÖí–_j1ä1{YGĻr‡ü*ī˜ )šY™úüĩ[Smš=üb7 [ČËßaĒ[œīc.=)¯ŋáģgR–ÖûŲ$P˸ĸí C䀎õrīMi4 ›kšĐ\Īné<ŅDÄeÃ0LäņĐf˛´í:[ĄáÍF#6ļ…]] ķÆ1Č=ķĨĶŦī4m7mÕäFŌ×ĪyDvŽĖC šbHSģ§;U02@Ōõ 6د6ZAdĒZKXÜģĖU$Jõ9­]?ÃvčM,3OˆeŠZų†B# ĐåqØcŌą†Ĩ§†mfŽčĮmĻÆŪlĻÉĀ—zŽ×ېIoĖ20Oáz-ēÅ0šŽ+¸ctŒĮn #˛Ē‰T8lĻ}É5mŽâHč$†7×5##ˆÕl`&Gč™ių9ā×ž+6ĶÂļŸ§$Z´ŌÅŅģIR(vČ[‘‚rNGvĪĻ4Db=WQ7˛ˆģģp3džŪõ[ÂöB-- ŗžž{KeŽ㸄Äɡ$’ ‚r{tĸö•|ē]Žžö×ßÚ×°ØK&éV&YœšÚx;Į@8āS,tĪŪččežžÚŪ{Qˆ'–`¨0üŋ9į<œf­jPiãÅWIr÷uqßÄT P#V\!ęI˧ĶŌ¨ÚxkOÔ4 DMNáídHŖš–5e˜–“h^ŋË8Ģēą&ŨÍŧxSžŪæIĸ’Ël~cŠEQĻ8ēŸZ[š4Iu×{ŠÕ%ˇ'ōV2Ĩ>Wq{‚wõ¤ŋŌļ‰Ģ´wFd–9Ĩ@ď÷{B¨:{Ķ5 +JŸ\0]I0ē–Īh8‘WĘF pĀcplš ÅZ4ļ˛ią˜c e–34Ģ+0Ī' žäŒF+ŒiVŌÚÜę6ßl Ų„ķļ,hä|~+ČävĢú>—§IŊöŸ3ŧ`L‹Iķ3ž\˛ˇņn’*/éÚuĩ”úü+pû>ʑŧūRbF G<)ĩ™—ô­KžCęMgašúÖoshėb€Äg ŠT¯Ę1Č⠏ 8Š”īĀâ Õ‘Jz)f'ŋ^*ÛĐáÎ1ŒƒR°ũæBät9Į@Pp?AI”ļ9¯ YŦ’jŠøsŠ1ŨĐö#ų×Zą|§å㯠\u´“k:°Ķ/"ļ u—G€89D į#qųķZb×Ä wļą8ˆėĮ͌ĩo5w{˜­­bîšj×/§ų1JōCzŽLK’Öįž^§ÚĨŠËX—Nōeķã¸2’,ɝ¤õlðęMeȚÄ8ß[‰|ĮXĐĩĸüĖ{}ęžē~ŧĖņ 8ãū<Ķ#ņÍM-AMĮĄĶŊ Ž>ųŲÆįÚXũîŖëX'LÔΑ ēĮ ¯ķ•Ũ1 g•-¸ĀsĮĻ=)ŠŖx„ĢøJXs­ŒX˙øGõ×!á.¸(-¤ üvĢ•w"5e‘Ŧö­&Ÿ-ŗ"3˜™@Œ˜×$c‡*=Į"šĄë6vFo|¸$Ŋ‘î›HģaûØ26NãČô&ļSKžŠņmÅ÷^s&ī$Cn¯Ķa>ĩ,Ú4ë˛YŧS{;axˇœāåÕÆ\ŊHiŊlYēkŋí˜fƒwŲ äÍÆHęšëųĶ´XσNQvōÉ%ŒŦKz}8Į¨ŋ†Ĩaƒâm`ž2D‘ cčŸĨFú)2Iâ-[ËuځzgoZV÷-Ôn<ļ%—đŪj×6l¯q,eĖ8ŗĮ¯jo…ŖŊ´ŌÚEŖųea9%‰%ž¤ƒPIá¸"’1>ŊŦŠ•°¨uáT›D‚ęæŌõ]Ná\]Õet*;ōĄ(÷)ԜĸÕ´˙#´2ÅsČ*Ž ^[K˜•I/¨îTÖcøRÄō÷ēą'ĻíNčõŖĄčúN›w3j.–ņ´¤hÎrÎ>˙ļ)ûŊ JQ莺ÚZ\æU‘t¨mZÜ.8ec’Hãk¸ÍhXéZ•ž™q§Ís ļ–ŠØĖccŧ°ŨY@`|/jCkáëY­ ›íBKÂAĻ×' '$}éöz~‹~ˇ^MŠ’Kiš&Y<ÕųĀnŧČĪZĢą+GĀÛ´Č ûdj~ČÖķ(¸f*ĖžAÚ r>•:ø_ėSęsÁop xáoąå",û‰P[‚ÃííU­.<3u§Ú\ŪéQC<Öëp!Xd—äb ÛpÄP@éē­ÚÂ%¨M PéÖ˛I:–K>˜Tc’GŋämČZ’ŠyîL žnŨäŸOãŦŨ#K“B[hĶW/kmž8\ĪˀŊRI§/B…Ũ´š>ž°ÛÁåžĖ¸ųŒŗĮo/õĨĶãđΊ[}*Ō6vĮ-š&āËŊYxäÉãĐôŠ[K>™eu¨Ë}uzĢA$_:@ØÁęAŪr e]xjĘKh-X!#’]Đđęā“€9ų˙OsWušĶLÔ4Ë[-.ÆQt’ gĩ2ö ĀaHāįđ¨?ļô÷ԗfˆŸ`–1åː&âÆ@ąŸēIQë×8ÅRæļ‚Đ–Gą†ÂōÅĩ{cˆĸ‰ž5X°˜ų@ĮSĪ$ĶŽgĐĻÔEôēĨĸŨFĻ(™īŽĐ6˙sxäũzzUˇ[ŋ„Ž5›+ Ú=Ė <* K@=3×Ŋ^ŋ×-ŦuK+ļâé[kīEŽƒį'§LdZFsú\úŽat×-Ĩš(|•ynÆ –ŪFÜā`ā@­ ­CDÔæĩkBōeÆrp8Č 9=jΓâļ–öÖ+ķŧ˜7\Ģ™˜ °\ztã<ƒéYWúÖĸņuŦŲúėōĀŦđß@ĘØäe"‡Ģ ņĀļ´—LŨhą–/,ĖCæ/ƒÜū=.šqæūļG?5ßKū…m&Ā6ß[đũ5QüĒ&ĐŽ"ͤˇO&YeeÚĒcDÁäđsūŸÄF?ėûc€ŋĩ8õjԖzmÁūÎkˉŅĸ%ĨÅÃÄ@÷ŋā+>ˆÖœ­}l_Ô­dÔ,ÖŨ|û•‘Ĩ-€G9Ā#éK ´ëxf„ģĸ¤‘ERÄw=Ī$ŸËŌ—Q˛yŽėŽ-ĨPđÉžE2 „cˇ ĒÚUœēpšęėÚ"¸]ÎVXą¯dÕ"S÷7ų7ši›SˇģiČĄ_(*üĀõ#§OōMP]%ĶH[s¤SnVXÂî$ #ņĻ\iĪrˇĪo˙'‘ķx­đÆŧÉdöSĨåōJs+&Fį$ãå˙]×;Į­hÕģ“sm­Jk—›NŦc#`.Ü4œŒƒ“ĪN{VVžÚa°ŌŽ4ģ+i„Ø•'ēo/Ë-û xRC7* 8=+}ĄŠÛ[‚t"§¤1uÔqߥŦ‹y´+­.ĄŅ|ĢŋąĀ ^3ģ¸cĐ1'šŸZ…¨ÉüLí§\iWPÚ[Ë$ˇsJņ“6T)vyīíY̍éŋlŠTŌQ ‹ÎķįKP 4NģŲry]ĖŲī•čj˙‰&]%´‹x4ģVGķžōZCĒĨūU_^yíÍQšÖtˆ$†ę=ÖE¸š[n3•ō÷Hņ!ÜrzüŊ3M-6 šM=Ī†ofļąXaŠŪâ!ˆ‰•MĀ€ũŨŲē[Û­>?iņMk šš™.dō÷B¨š#æmØëĶük9¯4ÛÍ3Q–ÖÂ+K‘mu 3FˆÎˆrģI;wõ÷4ûŨRÂBŌKÛYœ‹Ž#“ŖUUųĀ\ũâ3ɨkR¯ĄĐZXYO ¤ą-´'ī eU dpĘ}Á<ZĄâÛŖĨiŅ-ŒéĄy:¤XXŋvāō@PJv‡ĢXęđYMhĄĄdˆíVU¨ųFF܂qT|m9’ÖÖÚļîęC ¸0‡mĀn$¸Âöõ)5+ „øÎĨÅ2FnKXĨĶūũT–Ų&ä+ˇąˆ‚@ãpâ¯KweŦé/w ˇ¯=”ˇÆÛŒbI‘”ä(É*å\Íŋˆltˆ#ŧ‚ÁĨwĶRWu˜&Wl¯¸õGÉõ"ē)n×QŌ&xĶËŧ…ė¤ž$!Šą•A ü¸éVÕē įhƒČļH„Œå@Sõ¨]žbsĶŪ‹iYėb‘ā˜dų€†Ī¸¨Ėœ°Āü띔ˆŨr@ę}ęŋ–?ŊúUĸ¤°$ƒžhÚ?ēZ†hŽZ#••!9ëÎ?Æĸ‹qÂãoąôõŠČs“ëHĐ­(ÆėöüЈvd¯÷īDŦD„mČ9Éü)Đ%ƒ9Ā9 ž‡â+kŨJ]fÂĘŪ'W¸‚Y$–MĄƘãœįĩmôGR×tíRčEošHŦ›ÚVaN-ŧɉĩ‡q„Tˇã$“•jŪWIaßʕ ģüëw9$’ūތ9æw‰ĸ1é ,ŒÃslîqÛÎO͚ąĢĨÈŽHˆL]dy2Bœu9Ž:ÕN˙đČF7Âs߉Տ O¨Ē]´ī&à hšf'Œœā0Ķü*~Ę4‹jīĐŋŦi×W [n ģæ Ûã‚XāœsœUSLšûF{0ĘōN\`ņĶĨGĻÃ<ˇ˛Hbōî2'˜ÎGoâāzņũ*K_ļÛęwėīžÖ\s!m„F:OéMÛ[5ĻĨx­’ (´ų;Ë#`;>ƒČãž*m?JŠĘ !B†rĢ€[ØvŸJ’âĘ oŖŊu-4E‚c ŋÆŗĨĶ.։ĿĖԘŅO–š!‰9#‘Đuĸš’øŦZĶ4g͎šĪĘXԁĮņ`ž§Ŋ-ŊŊĨž¯r—Wh'ē}ņÆGĖos×€})g…Ή%„r‹‰Db=ō)<úžũŠ‘XI ÛŨ]Ū¨CåHėWÆBŒ“ūĐë“Å…ųŽä÷"ŊŅŦį× ¸}JxŽX{š )ûŧqžOįZąËlŌ-ē]$“ É@ųoLšfŖĨÃqe4“\ƒīHŅŒŽäuĻéÚLz|ŗĪäGæČY†Ø‚€;/č2{šzĸ\Ŗ(ĢŊQlĮ@…ˆéԜÕ=UcDža“ũSŒũīņÖŽydvÚI‘ÆGëÔ˙‰DË$L@…ƒëŒŌŽæG+cĄ_ÚŲjß=ŧąéÅåHäÚ8lƒōįoĄôŽ–ÎÂÛėM=›ËsĀķĄŨ1ÚP)?upįšįV×LģŌôioîŪģũ9l­Ņœ…pęŦÜŦN;ö­Í.Ú;hîĄŗÔŸQkdHZ&šWōŨ.8ûŦØÉĪs[=ˆ9+UđäÚ=´’Y´Ko­¤õŨؘņ1•r9:VŽ™{āíPÛiÖđLo.-š'ˆ,åŅ0.{` xābŠØßčK [Ūũ”,vpÍqißą”îR·8Ā ’>`+VÍ|)wuŊģí얁šU˜ U ¤žxU^žÄuÉš|ÄlËÛø—MŠ-ĸą¸@§“ÃCŽYi>š7V–úsÁ­đ{…~ԀޤąÉ#x#Ū´oáUÖ´ˇWEæDÁį+ŗ8?НëX:sxvãXš´ĩˇ>zĖ÷ #Ģm’T}ŦĘÄōU›z…°Éuv|°čFŅĮ~ž¸ôŦé4kO2â7ņ>Ŧ˛ÁiBŨĒí^ŧ€žâĩ´Í*Ú8æöîá'_õĶÜŗąSÜÜzbœŦŨîr†ļ 2Å´ģ)ˇ"™$™¤Īļ’H ÊįõĢĩ¯ö…‚EŊ#ÜĘŤ€KčāzÁ›AđëZ™ŗ¨´AüŊÍĒJ@`y{Ūsá Åsœ­zŌĖpĒonv<†ĀĸŅĩŽ6ęsķ[SB[MAĩ›[ČoCĮ~Snˆp1É?0åˆí͊Ũ7*‘–•€9Įa\mŸ†ŧ#|ĪØŧĨ@qæË6I8#qädi‹ĄøR+¨b‹Ã–Žm…§=m‡˛\ã"—šÜrU'Ŗ[ˆŊĩ›2"›‹3¯"™6ŖĻOk,&úšY[lč Žũë!´O Úę°X¯‡lÃËe•mSiĮQžšĢZ=žpgOøG­,Ō7 ‘œžāāpGë֗ģ}䕮ö(›[mŌãÄ1ĨƂ/*ō8„…T.æœã=ûš|)áxfššÖūŪ7¸šI™–ô|ÅYœcž›™ŽÔ#ÄVúw†4ũfkkÜN!‘ŧÁyBËÁÎ1œqÜæŦ˙ÂaĨ?ˆ¤Ķ<ČcXa2<­(q‚SrĪįčkOxĪB ąđúÚZY5ÛI ˲ŨÛ$ĀdųzŠĮAT^íģÉtË%ģÄÍJĖĘûA˜ᠨ_ÅōØjō[ĖŅ]$úˇŲb'ä1ÄV2Ú¸8.zœņß´vŪ;ÛšķL†$hösÁ cĮ;3œHN?Ų?…rˤŌ7§e+[ÍæÜ'ØŨŠFmäųÆÂŊ äđ{zVsXiW0ÜÉ-ŧŗKt›#[Č­&wEUĀČ^p3’jô—ŋmÕ4šė&>IûJēŗ2+„įæÎ8úU?k7+fŌiŠs+Ŧé´§äYISü$(VįīgĻĪ ]˛Ŧŗ[ÜOe,’FŒb-.ĐÂGQëHú>*É#hQJ]”đ!Ũ´mäöėj–Ŧˇš–ą¤Ijˇq[MųČŌOƒ”(!Į9įƒÚ Pņ$—ëtđų3ËoÉ•#D¸–@ø;°Ŧ¨TįØ’NۅÍyla734:,‘HČęŌ,q‚ũėŨđáNNŽqnķč<öОŪyV2čĄÎAúb‹ Vųtoø™E"ß U•åō‚Æŗō ĘđzņëUmoõ‹ĢO ][ų˛ĢÅ^hÕ4c%˛3÷Ž~_CëJĖeÛ=9¤šÛGEyÜ3įjŒ¨N9ųĢįí“Hžmŗyræ"ķÚŨ2 ^ŦfÔô{UŊ}>{¤‘ÕcQķ‡uÁÆėaTˇURÆ[9ø“KŧÕ56îÂČyö^lņNá6ŦĒČU;ļļNÆėũ kĢÍ[}=’õu kHŧІÜî0‹íܨęO8ÍG­­ĘxRúImÖ {Ü+Ž@9ÆqĶük ÛMÕôŽâŌŦL&]J+‚ņËīˆ" IRVW!Fßž9Šŗu>ĻžÔ"ÕŪæ{†ļžF’O+j¨ČUų1Ô ŨSĪjvÕ4ÄtQJ~Ιv,s“œķBŒœƒķ3ÍWY"eÄJ2F×<ūĩ4× ú×;ܨΎĨ?ėū”E´žFM?åūęT…Î&< ÎŪŲ+ŸįÔNĐväõéÉĸlė=I÷=(7ęA$š•‚•ČęIéM‡Uˆs˰S‚j&ā’TuëČÜzsëVbDHōŖŽz +BØņ ë”ũޏˇŖKÍÚöq4pJÉæ<–u%psū:‘aą€īhãžx`¸eĪĪķ=+n÷ÃÖz…ŗŲ—Z ĮƒTö­ųcƜŽ{ģ´‰5ëĻK{VR¤C¨[ā×÷€cõ5ö1.™v?´mˆšEÜD*ŠŨûvëųšOŗ9ä!HVÄvĮī“Ŋ\mÚd†õQŒŪi@€„ČĮLđ} Nœ¨Ö›å“ÖÛ:œqj:`I.Vœ!ķZ%ŠāčM> x†Ŋæ­æë•‡cÄ–* !ę{cˇĨ2ōKIíŋ˛eš;F||ÜsģŨÆqÖĻąxŦ&šēžtEšpۉĀācŠĮ\g=(DęŖkûw7ķK4Ķo–)“€āķŒgŋsÔÕË6‚ 6(­äiāˇų7–đpAÆĮáY“Å ÆĒˇņ\˜Áˇx|ØĐƒÎCgļ3Ođä?cĶž(Žæš‡ydĘ'ƒœįžžÔɖ°Õö"K=6gÚˇĪ:^ģ´_Ŋž ¸ČāqíWuCinŠyvōD°MŊ\3|§į•P˛ˇ˛ķíãĶõuĶZBT’ÍÕI:ņŒûÖĨĮŲĩfˇfy# Dǧü­Œū"„´*r÷–Žß×čVĶíá‚îx•&Ģ)f“åƜãoluéę}i’>ispÆÖFkiVF  į†ëƒČüÅXiąëĢÆŖ2pĮ,vĪ'ĶüæžÖ6’Í<ŗAæŧą*9f9e pqÔQf.dĨwqē¤Šin—÷6Ī)ļo–A‚ɸ€HĪj}Ĩؚū[(â”÷bGl‡ÁÁÁÎzúÔŌĮÕŋ‘5ēInØČĀÆ? r,hĄˇŽ7l)*¸'Ķø/XLíHŅr#PîSžFrĩQX|C iú~Ž’}Žâ(dŒ!Ą‰¤L‡'j†ā‚sî*=]õ¨|=ŦÃĪįEtÂMņė:"€9åNyįƒŌ´zžƒHëŖeˆmL:Vā@:Žĩ“§Ŧ‰n‹*l|œŠl÷­Ëtf<~UĘ÷5čY„NŌyŠž_öŋJt{PmÁúâ—wû"¤›žC¸’Hųsšåy8Éč9Ĩ@Tīãwlb‘°Ā0LįÎŽĨFS,˜õ˙:ģĐ0HĪlJŦ‡ŠĪōŠĮŨ€Ī×4˜ēŦž¤të¸üËy­Ë•#ēž2=ÍÖ¤´Đoā´ŋÛ÷fÔcÉ_0/§™ŸÃĻi/ŠĮâ,:ŽÆ‚áA=?å™ëZĻP¨Tƒ´ ƒœdVÎM%c.TÛ)x–?øĻ¯_æųɆpĘĨ[ĶôØ­u“3ܨšmĖ–āįīrĮžOCĮnj‡‰į áEŋpzĄĪáZRÜÛ9‚öiŨLCpd~ϧ^Eũv*7MŽčžúĘŪ;Êy˛›ˆ# aˆ •sŽqõâ›%ĩļącn“°C.JÅ(öį3Č>¤t§Û˜o.×U‚A2<^FĀŖn'9ũ*ĶĮî­hí,ąĩē™Ž89ã>ÜRL{Y7ĒūŦ:ęĘģ9mĸsÃĀ 0î=Ŋ(ļŠ KhŪęFPã, ’ @ÉÆOŪ›§hËgy5ÃH›™vŊHÎŕ–˙QÍᴟíūeŲHīGR¤ƒžũ*Ž+FüŽZtKH!ĶU!’CŽėm“€?W°ļ°ĶnīŖKšä“hv‰ËĒ@ÉĮF$ŽŊ{VŊ…šXŲĮl’3,j<’}ķQeÂ/¤žYn īEnBeéīEČįMĘīFP†+=Vū-I$”5šhĀ(ČIüpO˙Ž‹fĘ-:;…I“*BSNâ~čÎ9÷­¨,ĸ‚ÉmT0UM€ƒķtÆr;ûÕx|3¤ĮB-0ĒKíŪܒsÎOAEØ)SoŪŊ–Ū…ģšmlZäDÄ,BM‘/™ģōĄã>ßZ̓ÅQŨÚé˛ÛØHŌßNÖūT’ĸųeN“’¨“Úēˋ{›ci$jmŪ?, ā#üĢ>/éļfŨm,ã†;w2ƑüĢŧŽŨä¤/ŸZĩ(ÛSž†õüF™s4֋sę8pÅ@MōŸB¤_čéâ FĮuē5´~lŗnČęprÅUyëÜvŠ/nŖŌė5ÛĮ‚+…ˇš åÉ*Æŋęã e˛'|Sėĩ]ø—h†Ú Ĩ˛ŽHnŧå :Čäm§pëß>õ]6ÆTēŨũļˇŠJ“‹XŖcC˛'žRØœöŊ:?jöĢp˛ØÃrl#‹Ž#S$ja>č 7$…&Ŧę ŊĶņĀâí‘ĪaCc'qLëe2z€Ö¯FŲQģž85M‡˜årĮ|Ôđ†R$ö‚™“¯ŖÉĒčĪÁ2ț‡đæ2{˙ģZæÚK›xaĀąlr>•Ąh/~Ę7 Ė$; ¨0ãÔ1ĸ/é "„¸o.ĨƒUŨY\ËTŨ‡ęVI¨XMfgU/ FĖ@Ã+:}âáŽ%ˇ–ĪÅÂāļ;“ŸķZđ‹é@ëŽp/fĮū…M: ‚°uō…]ĒūaÜņ÷ŊÍKKŽ3’Õ#SK†[[(á’Urąãåī…AkĸŨÅŠ5øŧT›ËdU9õ9õĒRxbÂl#\ęh @ží#ŋ$ūžõ§†Ŧ| ŋiԋmÁoí r?ņę/q{I+žáá­:˙N{´ģ¸2Äe%K Ë“ƒ¸ņ߃] 'ŊEsßđÚÜ"ŠŧÔÕU˛?âa.}:îĢ  ÚäīēԜ0Æ üÃđaONæu$į+ŗp8?/Ÿ~ÔāØ`3Ž9įĩ`Gá0ˇúŨEŲO9Ô§ë˙}ûĶĮ„td”žËÜão7Ķ˙ņtYw#SpČ~cœ€‘‹‚ŖčÎ=I̞ēAüE ą…?\ãœF2Ü3׊ ܸ€&zķļŋžŪZĢ Ūr‚ sëíS†#ņÛ5fmŽė=ŗRqœä „cgˇ|TāšČŽqš.zeŗøĶÔÉāc'Šb€y<{g0ÆŪOëT!›IÚ œ¸5Æđ\ۈ#nwyĖÄŒNGĨ+2įÎ=øü)ƒ†čz͏<ö?ƚË žô 0,Oė 5Ãy€įsœŌžFAëĶ40}ÜãžôåĮˇ Č'8Č8ĪãH "BqŒwŠcLļqŽų4ÄqČû ~´ænr ĪnĸÄJõĪZSØūĩ™ĀdztÅE+ņɆ•ô bĖ#đæ wĮŪÆGNMFīę3Į=jŦ˛ĶŒgŒRšiŗ(R dô˙õÕ1ûÆāuīŠ;ɀ:qSƸ9'\Ņr­bhadöĪ8­ĸ‚Ü㊯…Î:Ÿ¯įVäķž"[ša03É>ƒ ”sÕT_JŽ8Ędžõ)Ī;€į°($&'€ĮŌĢî˙ĻúSå%NÕ Øēĩ ¸œŸęIņR§z(ĻŽÆg\~íÛéVĸâ5n€ŅE2K)”rKsŒžĩe”g¨âŠ)LžO׊ÆšČúŅE2äۀĮJ$ÚČCg(ĸ‚BŅRļ(ûŊ ̊įŒt÷ĸФDˇ%ÎĀhúg5"åķųuĸŠĸAsŒÔ‹#ã<Obhĸ€šŪ2:đ9 ryãۊ)ģÉ`ëOyHÚ6ŽŧŅE7†<¯úЇQœg=hĸ†"RH#œ gJd“ĮåE€i}ÒF=*7sŸ~œŅE d29äv*œŦ[ûsE%ĄŅĮĶ?ĨY…C°<ŽxŅEe”\ ØžæĻEã'Š÷ĸŠd’ŠČŨ׌ŅŋƒÉ<āņE˜ ‘‚¨ w¨vŸj(¤4˙Ųleptonica-1.86.0/prog/brev.36.75.jpg000066400000000000000000001204351506303110300166510ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀŸ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?č!SÁÚ3V—_J‚ÜœœōOÔvМíƒÍxgŦL¤NG"€rūĩ\HN0ƒVcßĨ ……RŊ€(ę{ Đ탑ž?:füc9=ŋĄ¨įģSĀĀũh@Héœū”đŖĶ¯jbąĪ#ĶփׁJ#ڜ ‘Î1O+ƒØ `E"+&Ū@#šP@õ4í‡ĖpŖŠŠáō÷0oLŽ)¤ •ˆÃ}Ōõ¸Še‘X‚;qõ¨ØpJķĶ­ ‹īJÍÆ1Ū€„¯ëK‚Į ú@Å“‘HHĀ8?JwlŽžÂ”)+ĀĸĀ@÷(qüĒŦ׏ ,ÎsW%ˇŒ u”‘Ûmˆ+Äw÷ŦœdŲI¤69K îʖŌĨŪI\tŠ0Ŗ§ĐĶY3SqõĒÕ! .ræĄ‘ˆ$ÁXHØ›÷Å+&åČ>”÷qŒúw§.{Ԙđ&ÂO?ʀ$Á¤I22OZSˇ'ÛĩI Ā ҍhIœĀ֔°ĮJM‡ž>†ƒ `0F•=@ Ÿ 2§ī$ÜI'$~Ÿ…0ÆÃn)UNî:t9‹8#°¨'M‘ÆzՅSŽęĮ=@懰#$ÆÜ1ŒS¤Ë?6GĶŪ–0zœž¸éR”ÆĶ‘Y"’sØķ‘RÚ1Ž´*äMaƒ•éžsMŪŖžäŠH˜1˙VĀuÉÄ$É&ßĻ8ĒVĐÜ%´’<ĪėrÄįéŽ*´BJæÚ xéÅ;xã(~§^ÚÚRcš*Ã&ĻxōĀų›GCŽõdؑfÁƒ&•¤]¸UäÎj…•åĨÅüö°_E4Đ}ø’`ˇŨG#ņ­5ƒ“ÍB+É)Ũģ­4Ė䁴ZŽö8•ËĘãh۟ÖĒÚKow§G<y°Ę>Iä0ö ĸņ˜ @§94žw–Ø`OĒ-å*‡f‹÷‹`cņ4Cö[Ĩ†hž9ĄbJē•e=zcąrK§.Ôâœ%=D}sЍQeebU âŦMہ÷ē‘ĮáHV%Žu Ē#ÆÍIæHFvŠƊ5ˇ(Æ3Î8ĻA™!\`įŠ&š°X™eŨĀjo™†#>™ĒŌËogû‰Ą…r~gpŖõ5ęē\ŅÉäßÚJās˛e'ō´Ļ€™IŲˇ9÷ω‚å@ų‰Éų‡'üŠl)Q&:Ž*9åčĶy6Œ”Qķ7°Ĩ ›´V ¸œ`“ÎÎ?vĮŊ2%W‘¤+Œp*]ĄĘG­ d?iFm¸lũ)2ÆĀ0#>ĩ2Ē™áę?(I{!aĀ/=¨e […f<“Ķž)æå€K|Ũ)’˜Ū$g%[n{ƒžF;R_ÜÃei%ĖΑĸ)f’F õ4X Vę3œŒāqR ãPHÎ3ŽGoîÜŦIÜÅO4ŌģЕm¨v÷Ļ+|ÅÜ0Ûĩ)ž=æ>wwãĨ2GŠŌ'žuHc]ĖĖĀš5•&ĩ§Z[[ßÜß[à Įī#3LēŸ@Ø>ôí~sĄ]ŦĒ“PzöĨąÕ4ÛûmÖwÖ׃‚ŅJŦôâ’ëŽj$Љ–ŒģW¯SœŒT€`dāwĻF7)įƒž8ŦÄ4?'=1Û1N§d‘Ÿņ§÷&@ī@­Ën`NzšÆņ?‰Ŧü<‚Ŗ–{‰Ô´pĮœāpI=ކųÜc1šåüSĨˆuĢ ^æ#%ŠĮö{€Ŗ-Î_Æ@Ų­ “—ŧD›JčÁģņ\Ū)‰­ ēŸJŌĄMÃĖķ1 Lü:įžĩ‘iĢÍār;Ií5íN&¸ļē•%aŸãBúúō u6Ö:ZiÚuŊ•íŊíḂS,D0Ž8Jo“ŽUJÄ2ąX×wcĮŪ'Wû2Ú[%ģÅk$‹Ëä6 îšîyéVĩ­Ą‹ŋ}C_ĐŧCĄxŽ_h ,°]1™–8Ë2näĢ'Rŧ˙úąZ–^<ņqR%đ”—z(ä„ãĀ×W§x‚MA/!šÔÁŠØ°I •9R­Ã™é\ĻģâęrĩŽĸ]ÚiæPßiûŖëŸĨJ|Ú46­Ēaâ˜5- Wļk{› GėRąˇģČp0rTžHÆztŠ~ę]øe­ŦœF‡<#*?#YÉā›x4Ņ7‰uģ–‘X7DG>ŒŲÉį¯zŸÁķXčzt7°ŨŲŨMē ¸å ˜û§ĐãëÅ G•¨ss&ÎU]GĮ^1›OGtĩc\ėTĖ{d‘Į~GĨv!×íü1cmĨiąFnÂ*Åäˆ× fĮ=z¤Ö‡y5žŗ­XÛĸÃS\ŨęW% bŽÄ_L¯9?Ū>•Æ^]Ū^\Īq+í–į2ÎÕOđŒœũŪ=p= ΜŧÎŨÜē­ËZˆukÉöË­]ŧšĮ•håa…āŸĪžũęĩĩîĨušmuËĪ>@KŦ“>¤’Ÿn¸æšÖÅma…’ā‚0 cŽ2On˜Á=>´—:]Ť…ÜĒLŧÅą”īÆ?ēO=˙ĚŌĘÆmŗF-CÄúZÉk¯\ĸČh”0)ę=C§â%Ž-Jvmō°Cûü6zA=8Į#ģŖk‡NՖâ;dxbcN>āüōŋá÷W_UđŪ™á>ēÔ/[™T4É>Øâ`TgËÆŌŠ@8=ëŌĄ´š.Í­ÎWė:žŋkuĢj—SÜi–€76NA=•yaĪlwįŠĐ‡Áš4ž"|š‚Į›4ēI‘Ub}ĮT;x÷ŦHŽîn¤ˇe’Ųcļ[fU‡BI9Æ Nė}‡jč|/᛭GĪĩžŪlR@Ũˆų‰ÁåTätč1ÔĶmĨ¸’ģ!Ž J= Øé÷īũŠIĩ$™ ŽĀøf^IB6äŽA\‘Ё›g§j7zuāŸUŧ‡Lˇ?*$er~aŒ)\‘ޏå…kę’ŨéĢŠÁaum§ŧlc|°ČŦŦŦ¨OŨ%€Īš gÂz=žĩh°\ëŪR*‰qå(rr /ņ0ë08äöW˛¸íwc›‚ßU´˛KļÔuU,Á Ž Č.I;@õÉôõŅž™{ĨéŅ\øŸÆ:Ĩ‹Í—K8fw“ԃÉéÛĩtsŠø‹ėڃ†‡ÃšNÕÚ,Čd"ūuÄjW’ëē„šŧŌąiŨöb H˜!qŒtü2Aõĸ÷vŦŽƒIŋŽ+ą˙į.…Ķž-ĩx‰I˜ķĮ“ø×¤čÚęjÉ4wVígŠÚ€.mœÉÆCüJ{ņoŗī†hgU‡y[2€p §ãÆŪŗĸęw6 \´Ū}æ—šė™í2<țšÛ÷”ž•3‚hq“LÛˇ¸¸đŒf{‰„š>ĢrnŦFĀd9 ą Ø ņÆv>$GqyĄYXÂūZŪ_GŒGÄgÛrŠŦۉĄž“RđŪĨ˛[)ãk.aÕPĄpöų°}Š[ĢØŧC§iē,ļˇWÆx&ģŽØ|ÆM€„.H;ą$@ņ6Õ2¯ĨØŧG{y§Ĩž…aöĢķyŌHÛ`ļrŖ*Ė>ņĢŸ|W;qáī]HßoÔZ[v9ōŦ/>Ė3čNĖãķ­Ķ{â›[d†ÃÃ6Aa[ÅfUp (ãĐŠcņā‘cÖŦEļNŌ28 ˙r@2>„ķĀÍ$šøPŨžė‚ĮžéņͨëM| ‰¤ŽËí*ŗŽFælé€6õŽ~mõ­6öåĨŗēēŽ#y<2YîžxĀRäM’Š   НJoiĨŊüņ\@…Ty{8vŽwzæē×nîŽ!Fˇym,-Üĸ" ᜎ\ãœp?:ĪŅlŧ?eáË+GC{ÛĢĩ’vŨLJNé@ČdÆzļôĶBm܆ãít>'ąÔP é," pqģË“ęr=CW5§ØÛĩË‘3”kōĒG$⁒ĢĮ×ę7ŧCvoĄmK *ĻōūßrĮÁ(\JK …#<Œu9âļŸ„ŗ w%§œ]‹aíYAÜ{ųëüĒֈ—Ģ(;Eēž6ĪyJŋРí(č0WŒōGÉlĸmÃ|æåˆÜī‚@Ŋpzđ:wÎ :T -„e-!UåmŽ#r’ ÚŚ뜏AŠ}šZÂÎŽņGqĄ„­&wĻ‚ŧƒĐcFr*âKRöļŋeڗkr&dg•¸^2y$=z åļ5æūŨŌn.ÖōæŨc™Õ”˙:Ã!$¯”ÉršéŸĀؕdŗķH„ŦˇJëæˇ@7Ā8ķÔTúÄoq{‹y-Ԙv?Ųä…C!ßÔĄ ßt öäqIî Û(ndˆ¤r,Ka°Á[Ž8äāžqøZÖÃYĶü&)ym5ÅúĮŋíĸÆXãēį –ąœnmĄŧ”ˆųv¸ãppįŒŸCĶčV‹u¨ÚŪßŪéąč‹8n¸``¸ ´°ŗÎHĨáĢyô¨´K›¤G‘´ų-Ā1ē3 #l#=ø qPÛOB’Os‹ņG†lô›mCMg}:áD°¸|ėp7mVô+ĶŠãŊG§˛ņvžo”Ō(c,ĘᑎĮÎ?ŲdãÛōéŧQ§3Āē–íΓƤŗ|¤ėrĮĄādöŽ<éŽöKmēŨf‰‘%`=¸ōúƒÜš¤î„Õ™Đ\Øųū´‚)ŦØęRivŽNNŌYp}ŧŗœ˙˛+GYÖ´ŋhé:,ĸ{ĸÅ]â!›wņ37MäņƒĶĶ“wrچ¤gō-ÚŲŽÚîh#šÆ%iaŗgâÅuwVšôKá۝"ÎmŪH…´åÂ`ŧí9'Ô†íšVžÃ4ŖĶuŊfņmīoÁ wLĘ@Ũ’2ā6I:` fēkûí>ÎŲfÔ§†+y ķC1čŽkHĶ.mMĮ†õˆ~ÕĻOķmĘT˙`÷ļ=šHâËJšđΧ#Ÿ°Üī…¤MãË!׌vû¤zdúbĻ×w*ö:ß^č:۟Ŧŧ0\Á(š•‚o€Āã“úW? k—š]äök=ˆI'xĸYŒ…SÉÜ&@œÕũÄW’ØMŖŨj>D’ļ:›ā†đ­ĪŪĮ~3õĒvúZb•ūŲŅcŨ“æK| ‘‘ŒųTƒ9ŨŸzĨmƒWŠoÅïøkIŧ7/~í—hTH w8ŲÛXAĨiļÖĘD0F2{˙SÖš‹›Í)-tûËisx†É|ųŽcÅĘIŠLģĶ’AįšßĶĩÛ=wIƒPŗu(˙+  ˜ÜuSCßŋŗŠąpܝzåÅKr?߁ۊ—ôæšŅBD‡Ą'ōĢíbF1ë‘PđãøGŌˇ=HÆ8į­4&W’EÉ^=;םüDˇ•áļŸĖx˜8Ū[iÎ}?‹?đôHÕDĐœ÷č+ˆø„n%ŌŦnb‚]ö÷šåC ā…ãžNãZ͸ҜžqÂūņâbuËÖlvžqíƒ‚p?É Ō_\ Œ>­|AZíđp{ŪŸäÖūģ%„šēĩĶāTģĶṅ>Χ KcŧËŋŨ96Œ×Z„qŊĩ¸#ʡ úg=Gû{œõ'ÔŚēˆšĮJÔZԙ5;™~Yd;ĘÆ¨f'Ž Āã>ÕkSXÃZ^‹h=ūĨn/ŽŅNųn¨(ØģgØ%Aeg+iwžZ¸XĸŸĘRBŠa¸ƒŒwëÉ9*:}'Äz7‡´=!Ž }ēâŌ3"ĮŪĘ “ĶdÔK{ĸי’ė$öwČníŽmtËUYEËāŸ3¯\Ōļĩ˜‰ņN™kol`‹"p0VFĻ?åˆÅrzÆŠĻ]ë2ęÖ$°¸FS’APƒc8R¤r9“ÔYˆo/uCu+HŪlqÅ<čØ&Bąõ ĩ\ûoj9^áÍĐҞÖ.4ũfYæ¸VōČĘRI6ĒåF\…P$wĮaščõ?i §q­éq\ Ī•ÜmģÔg<žã rxŽ W{;ŦmlãŠ+‚ÍwēÜIpWûĒ0Tg9Ž‚”ßę‰s[—C$’jHQČûÎŲ´r'¨s5ĄCÄz€šæŲāŋ†QÜ0û×9éŽüį¯\ũ*H¯­ŽV9Pük*—Ÿ^Ũsžŧžųģ§hzŋ‰áÖâ _40ēģššMé豖ätäãÖĨĶėttŧ”ëņܲ#HC_3LJŨ‚ĄÄōp™Æ;đjš•ŦMĖē°7É'ÚXEŨ|ƅ¤Æ #ĀÁÁ?%Ŋė2ęrŨK=ÉŨōFÛ#-“…^ŽbxĪZęäņeŽ›)ˇĐŧ=pgģ€BŠztqĪž?CYf‰bŨj0~`–Đ…<¨ĪĖûˆ˛ŪįĮcâõ%šē›ėÁ$h’Ĝš›y'…'¸ü…Con"Ī›MšâåØūæD1ÂãĀŋ8FŅĶ9Ítņh0Ml7I{1ÎâōΈâÉ΂ƒŠ$rį öŠG…KŗÃ™ *°ÛĪ Ģ`#āãĻHāŽæŽdŦæ¯5;ģ̗̎k ąŦlą…ŧ|¤œdņˇvĻ\^FBŦVĶÛģl)’TžÃ<üÃôâģGđíę‰ÄÆt”’ “yō1Č,”äcōĒB íĨiØO8ĀÅĘFWq÷UŗōŠëÕAĨuĐ,Îcs}„$öZ—Ų‘BîšD>bxĀÚsø×Oá˙ˆ:ĘZē\érj–ņąfCĩņŽ7uã¯õŽ–ĮÆiéåßéqˇŗis¤Ā–=L`īú‘ŸĨ?ÄgÃÚŽƒ6¨šmžĻé Rë”x‰ eØ č&īŖE$ÖĖåâëTÖ-5-J)RŪŌ@-ėbˇ|"ā1ädœ'†:vÚwŠ,`ąˇFKéeo•Ž;‹ 1ą$ūĩÆGáK™´8ĩm*ÄOdÁØŲąW0ÅIG#2žõŸ“~pļņÆëoåŅ Ŗ„$œ˙&“m˙‡íî.ŧI¨jß\›V%$ļš•Đ•FUÁ8ۃG÷ąT´ë_´]^Æˇ šeI˜Qãŧ¯.œwV^—­ÍĨé“KF׏Bɜ(’!…cÎ9„g¨ŒŒÕYuiūŌ&žÍĨ™ßuåĒ:7˜‘T‘Ÿ.&Á9äÔŲÜ­›ūKãá°ÆĖ TÜ-§’ŋ0Ŧ8čcߕ#ĩ>í|4×6éŠŪŦēŧ‡ŽBgSÜrx+›§5ČŲŪËqyöqį,Ļî?)ĻaŊw 0ĂFvČN뜜s]‡/^0°é0Z[„D{ëĢ•ÉRëš#\0ÎĐpI=}Nhq°^į+XÛkķ´Öīsemy2ŦÍL1ŲĩĀČĮqŒWK í´¤0đŨîXˇS¸ ˆéíXZ‹<7玔ŦŗK{pŦY™d2g9ãĪĻ{Zēü× ŠŨIÄņ*Y[Î#ŠMĒ S“ÔuįÕŊHZęaīRojžtŦŪXūՕs…Ë}â?7Âö’Û]ksËG×`*ŊĀ•Ã*áƒ7sŸįÔõĢļÍ Ã÷†ÔSķ§ƒXßšâOŪ\N K=ü’;76ÕÉüķYOáf‘ø’;UëéR‡šE–¤ÁÁ'ë\åŠŧŒzöÅ!ã´áĐįŠë֔Fs×ÜÕ!BšfŨĶ9ëYzŝėcApb–ō ¤†Lœ+ĄS‘î ø؈….pO9×㸯RÚĶ[ļ• Îpd‹¤MÁāžqÆzwéWˆ™lqˆLŅŲÁ,b)ĸ´’)P+4Ŗ8Éũ{dUM!Q5[Hׄ ”=Ã{ôųOaėGQzË[ũaŽá(Î÷FHB ūg~™<}åĨF.ŦϚáË3@û㓃Žõ#@+¨Āí,īcĶŧ¨ÛÅ’ââöâŪ4UÜBōYŽ1Ģ¸ö:UXfÔô"×Vļ€YGŧR, ŽFĀßÄNŊx̚ē\ĸš•ũ ss8ˇķ¤MîZ5¯'œqžŊkÉ­-F–.ÍŨŌũ•GīÖä˜%Ú>@˜*ęqŲxĩB(§™}Ŧ^›û{‚īaž`ŪsŧíRĐĘ„ŪĨņ.qŖé1^+Āžbˆ‹Æ6)ŨÕYWåĪ 3ˇáŊNÜYjļ6š}Æö$ØP"än@‚3ôocŒˆåūĶŧƒ@š‘cĩiÅÉ ~ī—„ãå éČÁãÖŽî&•ŒĢëhî,¤Ô 7w ëÍĻî'ؖ\oĨ^ŽÖīí }:Ų­ RˇLVŪ''8'9‘ŗÆĐãŠęz nm"ëÃļšv“kåÜĪ;Oe¸1­ŋÎ –SBƒœcŠfŸĄĻ›ol÷ÄŨ^FÅĄ§•#OhԘƒœ†bp;`Q}mKŗxŖZŊ˛ėąé6΀Ŋ˅f,{¨<œõģāVv`oo.ĩR÷Ioj “]™7ĖÁTąUsÎHôųRę*ŗJŌ°:’RGBŦŇę9ú՛¤z4ē^Ą§3ií’×qȐÃ!,rOžÂ§Đ~Ŗ,õX/ĖfûH43ƀ(Y-Ļoun§“׀Fy¨uoÜés™n ΞNå™:ާ’23Ü66žsŒÕ8Ū6‘qˇĄ-ígcû˛ķ/‡Á(?œž™­ũ+ÄÉĻx^ÚÂÕ÷‹æĸË)_-HĀsœcĀŒSÛ`éŠRÎîŪ"ĢųV5ų$å2yų)yÚåŲĢŅjÉ4eļŒ4j@1ÆĀņžAˆy_ú õŦĢ}0É#\Í}4ß31*Į’NrĮ~ļėc†T ÷>dC ŧ¯æ"úÍŪŪ´†]ˆĖaP4ų|¸É+‘ąTô$XTÅĒ=B7]˛[\jĨ•Vī;’rãŊiI§Xiöís5Ŋ¤ķļ€yœgīĶü+Ôn|˖šžÎÅBŠ%Ūf’p^^ūu+Q˛[û•äjQ.@ß%Ä äô)ũ{Ö\ēŊĨĢ-ÂũŽÎëhhįĄØãc×ÔŠč|I¨OĒ]Al2%–`Z¸Ú60,š<įqëŌ–÷_ƒÃ÷ĶÃ=ÎĄĒ_ųƒ1,[#T?t’~^GuĮNœU-ė.„š/ŒuXa?Úút÷Hpu(#WI8˙iF:p+Y;gšá.’ō+šZv–aÆcgU !Ư^‡Z'ÆW“L%ƒOŌísÁi摘ãŠ?ZĘ¸ĶŽˇpZÚM%u!ûÖˇŲ`G$N:˛œõ€š‰4Đ,ČÆČ@-¤Røe%āʐ„ÎĶ܌üĸˇ´94¸ 2]ši ‘Ŗ†Ü]ŒŠTŒ “”R0;œúœŊ"ŌŌī^m6kIčŪâ_.Pß.xā1'Žrzã6uMßD‚›I%Œ,íoy6ņ¸)dpÁöČ÷ČûîK¨ę"xĻÖā‚ŦüŗdŽŌüûÃ6ĮØR09#ĩ?ÃÖËŠ^­ÅãĀŽ^k‡R‡ VęšĘƒŒ´ķŠgˆ5Í Pđ˙ŲŖu{šnZäy#p„4¤‡`ĖÁ8ÛîE2ĶBná’k‰narŅBöé$hŦæ‘\åFq€3žhļÔ̍GGW„Æ<˜Žî<¸8 •<œãŸđĖŪ,TšúvØĄI„œēŠO•šœˇAĀĪëSGeŦj6w’Ųiėī¤w†Thãi~és\väsNņ:ėÔīc;E˛Ę!°ĮC߸= ęũ~iĸĶQęiH,ŧ^•WK¸ˇ|ļ=id‰åB¯TđAƒŸj–Ũ@,p>•ÍøëRžÛ@Q§ĘÉ%ÔËj$ ›Î õĪŽkDŽėKvGžęÚ|:‰§´ĶeI­tV a9?!ĮL`c>ĩ€yŽėŖ’Öā¤rf‘p#Ÿ^Ŋ>˜<îv•fng}‹ sŽ\´ÎJÛČCîdį8õf<÷Îĸ}ĒÅ›…š%‘Qؤ=ģģš\´Áādv<×Sv06ŖŅ%ĩđũŨķŪ˚|/nŒÁ˜Ŗhv}Ē2}=xƙkáÛˆŽfŠm\ŌNčÛĐ6— }_ŸâRqŠ~ĄĒH4I4ģhækŸ´,ÆED ĄFFrA$aHųpē9éõ[ë­DBļđÂą #Ëo|}÷v%ˆū/@@äÔ+ąŗGÚTÍėˇ×ÍĒÛÅm‚ŗFp囎NK'ĸ¨ĪįZsivļ:ÄļzFƒ;ęˇļėŠ÷wAÚÕd(7c 㓞:zōąÜ^ ĻĢw—Ȃ8ŅViĘwĀ€qâ`SīoæŅuÛ¨5×-:~ųöŒÜqōœ‚ŧz qÛĒͰš×Y%Ÿ‡4‰%OˇBĒØžáāØfcĀ T<đ(ėg=`[Jōņ×NŌ]†6Í$ŗ$a1˙=[æÉé”fsūíe[jZ{ęW!ėĻ1ōĸE!Á˙t’ =+Bķ^ēūÃąŌėíŦÖÅg‘Z%1Ó` ŧnlĮß?„ÛR¯ĄÂA Æˇū$ĶO”>{{MĘą‚rŖÍ!†ĐsŲOmÂŦ^č:&¯§Ŗ6 aw$ÎĻ0{ė—,§')lú×=m5ÄúƟ&Ģr¯h&W’-Š‘ž¸\ đ2Olķ]'ŒKÛ˛EĻi“[Ü;ŦFōÄNōˇ*ĄÕÁ äH+Î:ô}l+ŨäEĸÖ×/ BiyäHVCØį °ĮJ앁‘/ašēąŠ|ĩÉWg#t›P0 ’ØäŒįœ{ˆ.`¸‹Ë¤ļÖĸûI’YKĪ!TF tš=xPq‘N¸Ķ%˛kXn–Ūíæ$¸–PbÆėąeeËÆÜå€Ļģkp늭ŗ-Ŧ‘ą&Úáfđ QōrIƜešíč:Ī´>œpņ5ÍØU*Žë¸`g,§}‚ŒņÍyõėZ•˛ÃæéFudI|ÅģË#Ēí# ė2OcÉTŌj-˛mn¯.‰FY.ĸR2>I˸ãūœe8Üw7­­5ĪŨ\L’Gomž[Op å9€ãĻIõŸŠøCÄRMsg ÛÉmWķ AQžŠ9Éāņ‘Đz×Cá­vÆËÁ’%Yl‚Åqn oWb{}ã’~Ū•ŖĄøĩKKYĻ-—…šÄmˆÔ9P¸īŽNõWkdL—„ÍĸÆBcĘcũŪÜÛĐã=Gž+…Õ-Éņ]ę^‘s)`Éä—Â(-ōā䃝Ų=:ÖĪŠĩFtɡ´üFÉ$nP‘ķŒįžßLW=Ĩ]_5åÕÜŌ횸1ÂŨ‡#õĪjš¨øbíāŽ{K™RHIšMĨ¸ČúŽy9ČāņŌz”f.œž*ŌĸŊ*-5Ũ:_)‰ 2ōļ9e=G o­b-ܗÄ~#y,‘g$0ņ+”3äüɅP8 pxÍoč7FË/–ö×7ˆī-YŋÕÜĻ1ąx=ÁKOŅîĩbūīũ%lŌŌî+›'VŠ'›+•ÂtÜ988'ߝ´ĐŽv6Ū5Ķ"ą‚´Ųبûļq)„c?u‰QŽũ^Fk/YĐu?ęcS°šÂ ;ËtnI.NĖãü]A?sö‘O ĩ¤I™™ā…ØN=1–5{KĶcŸOŌVīN˛Ônõdeüģc†8ˆQppqéĪSÎ*RKR›šŖâ[;=ü‚Ū{Ë0ĮË-ĩf‘Õ$u<ã8įÕAŠ[jöP_Z9xf]Ì؂;x"ŧĪW7š•Ļ—o§ųΎP¸‚Ė4›ŲAˇßį*Ŧ_Ÿî]Į‡š3¤HЌŖ_]°=úD=ąŠŠĢŨ*Ū6—Ąõü)ā|Ŗ$qß֘Œ™?<ä`*=ōFkĮ…ŒŽGŊ+FHôÍ9z.=¸ëR '#œûĩBm'žIÍr!)āļž>$‚âWœ˙9üXWgĘHR>ĩÉüJ˛Į€õ&G?4r:ŗnÉķą÷=ĢX|HÍü'3jÖ‰­čˇú]Õė{oôÍUü´mādĮPNGéŌĒ_Ą´¸^AŠŪ^KmĪc–‚Ú4b@žä°3ĪO^jyîlžSŗGŠ ’ ôģVÆŗ¤ęšm…öŖ<^S]$qÛ@9=q‘Ž8Œp7g#]ŦŽg­…¸f‚íixä…T˛9ö˙•“kåB×W´ē~ĸŌ@Έ˅ “xéķÆ2UO#öĶ5-GíCK˛2ŗ€3*)FÜÄu?7īøÕoPĩU‡†ėa–>×ęQãUāFG30Éä¸9Ąv,øFŪĶRžëWDĪl‡û.ŌO•UyÃãĻIã<íĮ¨­+Âą.ŖũĩŦfk¤¤dŽ"GĖyęN8ė3Üōqü/6ÍE †âŨI\9r‡™\väį<`z "˛m axä˙õę$ÚeE\ķ?ĨĄÖf™"ũÚŖ‰šŪF*c(CîYA'Œ`ãŽkŸ]I ‰åd cSĮĖ…ƒ‘õ ˛ Žž`ôŽËÄļ(ˇ3éÖŋÔu!¤ē”뎅‰’rwcĶ$0+˜Ô´H´”¸ˇdĶÍĘÄp Ū÷<÷0­ôāãŠŌ-X—{’5ŧÚ­ŧąŲŲ]],r&Ũ+‘ŋž;÷ŊĢĸŌüqmehÚˆm/>ŨŠ­y•CeAÉ÷^3]–Žļ–ú”6æ#@…@aÎGSõ俏+č$ņF¯ö¨!2ݐY”Dŧ ądõÆ{öšI§Ŗš+ëúáÖ¯ãÔ´ëIY,Ų  *¸?27'?+$`ņUgģךū×TšF¸ē7˛Z­¤Ō•€]Öë&Ņž7üßÖąítËH´ŊWP¸ß$ĢaŊL­…Ũ™ąĀĀ=ƒ].— ˇŅ4č›$ĨŦJF}VU†ÜŌQ‚K Ųí‘R"ļāpŖE1?„ôüjdÃ3ŸSX!˛UĀÃsRĒōHĮ×i¨ĄÃΧČōĪ9õäÕĸ[!FÆBãƒĪĨsŪ8hđ>ŽĨrēwé[ĘÁĢÖŗõˇŊ‚âÆâ-đț\7 Ę{dĨ¤“WGŽZ_HÖ†ˇ°ĩhˇ*“÷ŧą–ÚŠūUŌx‚-s\ąˇą“HK( Ō‹9Énp3GSü?7ė>ĩ{Û[~âáA$ąŽÉQ@`6‚ĘI;ļŒdķOššģ˛Xîŧ‹›Ģ÷8ĩ:…ĐvÜAÁHc3מG­nŨŨŅčĖÍ)–ņ—OÔ.g€)iKíÜËą˜0nŸ2ņČÎyąVÎ;īx†(ƒÉŧvšž\ķ#T˙t˙ö5&ģ Ž•ļŪæwķã0Å{*?W1§+ęq"ĮĩЧ_MĻø“ûQ4įk ĨKXĨōü„ā‚HBIĀäqš¯4OŠŌÁđûE[Vˇ“J´tÜĮ{Ī‚N>br0:õē'‚ĨĐogk=JE´‘à iNņŒÞ}0Aúæ _LšužũņĖ#häÜā7—…,GbęÃ?í!î H3ĮĖŖräđqô#9Ž6Â/3]Ԑ<ĻöōȌî&FE.¸wAĐį§ĨzŽąĨ}…b‚ę(Ŗ†2o“`ŋAÅ7 ndøgC—Ãú‘ĩxܤ°‘ũĢ|k‚ TF%€9ú W•ĪA¤_HĒ#ƒ$䟴iÁûˁZ˛4;ØįŽ)í´ČÚāíV8 r 0ÆiŊŦĨ$q,jáÜ*¨č{cõŦëīė]9#ŸPxaŽg žP;zŒtõôŽE|+zÛŌM:(ԃûæ‚ÕB€8éæp~•ŊĨxRĘ(Ĩ‘áļ¸Žę=­“@§œX”‘ÛœÖvKŠWš‘} é†{‹ß _ÚČf˙Ë y•’eīōŠôíų`õŸÁ’ÆVķ@Õ%YĖĨĨˇŪ  Pá™FŪV9ú0aWgđ6•pę$ŠwTÚÂ6Ä9ā¨ŨĮ>•ŠøN}%ŌöÆK™"V2mi÷Íķ‡F`KNAÉlnÉSWOAYĸõīƒ/ô‰¤›Ã÷ œâ]6åʉ—ǏčqБž[W3­ÔrÃEqh Öîü2`ĖŽšÎåŨģ1ģl‚ēļi~0现ŧž8õkQē×Yl åX:pN+ßŲjNšÔĶÅ%™†|ąRŽ a›îĪĖ>éi°°x§Om_@]zÁvÜų+Ė&@0ČuĪŨ8ËŠĮCëRõŒ~Ņíā‚S­$ķÜZ ĄWÜž¸ÉĪāi˛“ká{ģDa%ŦōĀŅėfÆÕuTc< Œ7ÎãZŌ.o'‡\ē* Oøķ9$r7Ø9l šöĨ{ ęsZÜöēĢYŽ›fÉĻEe-cų~gRԜwe \UũWMĩēÔ%žĶä1iÆ$1ÉmTaB•ā|§å=qúšŒÚÁŖxĒûKIŖ„Or—6w;y‘€<ƒ¤zmĢ—zKCs$ËcĻÜ<ÛÚĩĘĖÜėO§Û°ņiš]픱nŊÔĨhTA †*ÅNw9\ éÉaé]ՂĪ“eā r"ĘĒx g÷Žjyõk%ÅæĢy§ZŲŖšHĶíRķĩ|ŗü>ÍķķŒfĩ|9¨ŪjžļģÔŖEģf‘$„ Ģ•é“éXÕŋ)¤-sĄVbāĀúU2zÔ“ŒŠĩČüIĩķŧ4™ Ã<,N3Õļ÷˙x×\ą—pF@ I÷āŠÉņŤ—~ Ô ˇ‚Y&>YHãMėH‘Oŋ­\>%r^Į'kŠŲMĨØÛ_C.—q"öÂcÊ`­Īc+‚2:ÔÖZŲ´‰ÖĶTđ´A˛ž}¤žq?7–ŖöėębãI[Ëx-ÕÔ\4Še•ÉIž7Np銒mOXēš´ŋÔ..ncˇsē´Ä¤n›qķN'ĨIĨiČ4Ȥō;Ž÷")ŨÎ2ŌäŽqĐTŠŗ+mĩ‰ƒ0Ü…ą#§ë:äT"ÎĄ&Ÿ ‚Hu}8ÂŲĶ>¤wŽ3ĮH į*üĩ"ˇ†ô‹Oĩę­ļĩuˇ÷VvģdēÆHû v)EžžĄJØ›ŧ-gnF;qŋŽŪĩr ?-ã’8’9Öą@6ķœ‘ÎppqHg5cŠŪÚÜOxōO ÕÄ­<ÆŪßyrÜã,6ād člPīUŦ´Xī.š)#ĘHhÕlĄVqŽr&ļĶą5¤žēŦÁFy3Ŋœ~!H?L˙J†üĘFÕļ‹m-°MAŪíIÎɑBzã`}ķWŦė­´õXíUŅHû­#°_ĻIĮ^՝ƒ1¸fēēŪŦĨsm-Ä ˙ļÄ*ģe§Å§šōnī^?ēc¸Ļõ˛ÃķÅC)[K·ZfAPĘãÁĮŌž_<œœj‚}FŪÍíŖœ¸k‰D1 ,Į'úIô6šFfˇáë hÆķųąK 4.U‚úä0ÉčŠãĩO iļz֟¤éÚrË> ūmíËBÄ*Ę †‚7ō¸9õé™Ü zãĄ~gĀÉĀčqšĨ&„ŅÆęt™aaĻGö Ččģš'#Ļå'ƒî¤s\ĨåÎ̤L4Ī[ŧВÂŨ‹°íû™úŸ]¯Î8úúMĮˆmŦĩ¸´Ëˇ<đ -¤~W‡Pzd|§÷UWNļÖtģ‹ ÄgŽUāŧ§ŗppiŠ>¤ĩØō]öōū2ŨąnĶ“gË.ü‡“tØéĐpzWĄø“V}ÚĶNŌĄÍå”ļ†5…Lgņč9āg'€kЉ¯|5¯­Š"kĢ5 ž^Ņ:ļIVaĶxÜ>`pĘy9Ų{O]ņ]åΐą}š;XĄ[šŽĐĘ$*ķŧ‚ ČĮ4û‚ ņ„to é÷‹r\XHī9Úvŋ÷ΠɈÆOA\Οwz8­õC „‚äĸ€#īéÜWĨZh &ęĘúîâökÅežy]ĘÜm@Äí>ŋZķ˙/úL6ķĄ7Vžl2•ĮŪRËũ Z0kR•ŌĖ-âîæ~X™æķfÁĪŨËŒzÔzWuáË9l|;m °ē1ydTc– ō3.H'¤W4õļ–´=&-3[ $fČ_›8=O^•ĐøM|%cËįˇÄĘ̞Ž°EGx•īZ (ā‘īS įŒT*xĪ^Ũ*tņŽtSŖä“ڐ¸\“ųŌŠãéĀĨa‘ÂîüĒŅ ‚?Ũ˙ß^•Éxíī­ŧ#¨\­Ķ "Á 1œĪ\d{æēčŅ@'žk•ņhŸRđÄÖŠ,6É+˙¤O(*ąĸå‰#9䍸5qøē5‹ų6‹ŨZnõ:rîŒ6rSŸ›ŽsĮ>õ{ZÔc‹áėZ=ˇÚ¤’í"ũã[”Ëŧ›Ø ã#œ ĒGŊfiŨé×ŗXé2ÚZGæĘd˜Œ'–˸œįanÜûÕ­kT¸škK[m7LąKYšđCj§æ1!eRpŖ“ĮN­]ÔÎú’ūŌníāWŗE)ÆŽ2އƒĀAŦ]CĀ×#6w_jxūU†a jŧõÉoˏ­uö÷{‡ōäD”f<0Î?•YÚUÆNũâÚ˛Mĸ3›Ã—šzGöąjĮĘļÚsܖ>„Ŧ@*’; Îdû=īCēJFGæđ=+ŅĘPĖxîŸËõŦé4m'UŽ[™mbš‘œÆí*î'c´į°;¸éÉõ5\ŨÂĮ´ąÎ‘‰/"wmˆķŲG$ā`ļ IÎ>øÎz֚x ŧlŅ]i€°Ę‰´87/Ôqé]5ŽiĨEåØ[hČå#cˇŽzg÷ÆkB5|0,ø#ø[ĄÉū”s>c‹O jVūS0đŨĀÎHm<Ā߁F?ĘĩŦŧ*†1#Iy§L­÷,ĩ9]õÃ=xÛ] 6&;pÄR(drûŽ0-ųŌģ F—hâ1w72ĸ•Í— ˙Ā@üĒ´:.‘ųš 2Ę)ĐåY E õãƒÉįŪĩˇį=}úR, 8l’{dŌ)nP@ū´âÆZ;{qëHėÛÜgœs@†*Ž:cÛ8ψã¤ķÜ×,ū'ķĩ›Í2ĮM¸ÔnmŅ|ĶmsĀĮ¨Ë¸čFVf“­Üø›Tŧ´‡X{ #$ŦöČʸ$d‘Næî@zgŅĘÂįMĢëZV…j×:Į‘â ļâYąœ9?…s~ļ'ņl×úܰévöv`[Û]JÔČĮ.Ų<9XĮËÎųŦ 4dķī…Ú[I;HažâH—Ėff(Į<ąfX܅_˜sÍUģ…ebŋm¸—U¸p÷bŪØ:ÄUąŗoYqŒœmôÅRа›g¯ÚÍow\[üŅŋ*˙0Čõ椄ŦˆÅPŒ62Äöⸯ kŋÚrAy¨ošœ”ļ´00eEîäÉęrxČk´ō–ĒJd18āgĩCV*æg‰|7§x—I{KčŲ€`cxūüMĶpĪQŪš-úīMŅnô˝F=NŅĄ’+B,‰#}§÷R¯ŪGČã=øÎp+Ŋh1Į–IępFyÍrž đ(Õ¤{ÛŗaŠ09–2vHrŪ?įØuÅ4ÖĖMuF7ˆ$ûNá˙ēÜ-å`1ķ Å{o_ÉĪZŲđ=žĄ  \ųš_ēŅ÷Æå\íÛŨ¯ÃŊ9fVQ\É’lį9ṳ̈đ›O;j­*ë$Q#äœD¤]ŨŊ)Ëa­îtķėE¯'ŽkĘĩąüqŦ…ķ@”Ã*ų@Ąū÷ÔõžzöÍzlĐš@2šÆIÉöyŋŒĸkOé—;ļŧđ˜!8XīŅŊž´ĄŊ‚[åÅ­ÔâÍĻÕ$’åĐD›Ŗ]YžGãØäc¯ŌøMēĶ<;iexˆˇ1oŨĩ÷ b9īÁŦmWM†}b Ō:mŦī!pÎÅžQÔĪë§ŗģkíÂíø’{xåoL•ÔÕ~éP^ņ̐IČŠŠ†1€•FĨ~P ãŽ*nx;šÁ Xȧr§˙ÕH@ :ŸÂ¤R6ädĀæŠ2YB9Žâ­-Ž™ŖÚ$××!äTĪ܏’IuC$ûīâÁ'¨?ʸO‰Vž^‰ Ų´VŌŨNļŗ\†°b‘ŅKŸ­k‰2[ĐÎĩšĶ1ŦéÚ}ũŧđ;bQ€2:¤ûņĪ'ĻqžŊkšĶŖ{Ŋjō{Qkm1î•å(Pä õƌÅjëI é7"mMaO$ZGēĩŊ¸@‚MŌ(.ŽĖ$~#šĢāTI.|U*˜ŽŨ"@<°Ä ŽœúmüĢuŗfosģđŖ<ÚúmÆÖ].āŲG6âÎH­âšO*V˜7šBO@Á$tÅuÔ6ZMíäŒĒ-íŪP=Š?Ōš_„“ŦŪŠÁ{iŪ6'ōCƒ˙Õ]¸‡SļY†á@##žŧâœ0T˛­ĪsC4#(OŽ*†Ą¨*č—×:töÆhĸ“Ëf9d\õĮĄŠ…¨ÉŦu;mJĘ+Ģ[„ž AŲ*7 ŒƒÄp¸öî{šæ~$ļßôī2(Ã˛<Š´“•ffúžkĒ;CeUNOëMčÁ IĪ^¸æî}8öĨ wÆKļwrĄąëÅH|ĩl3 ˙wŌ•^?4p1žŧúP2Bw'ŊyG‰üA¨7‹5.-Fō( Äļʋ¸ŗq„Ī'9ÎF:û`úĀü9<Ö?ˆ´;-kO;˙uy6÷J€É ÁŖ9Č<iĮMÄĪ(Ņæą´ņ­8`ģ¸*ŦJŖeÆS’ ąķøVžĢŽČšÉ}*ŦžFYe•›]ˇ<įųæĨÖoŽ ÃÚü\îZ]ÛG÷Ŗ’Čá‡ũbyO´ÜĩĒÛŨģÎ @č~AԜņˇ¯B8éWkęÅ{…ëCrËöŲĨŠY2yLņ>@bŒ ü8ę ds‹ėn`´[ĩ?ė¨.ãå JۍÜ0#Œ!'œ(ãåcX0kPJŌ3m–0R6BĀ”'įsœ‚~_ēs“œs›Vú”ņ[46eī^}ĨŌ7ō¤‘׎9˜(Ī|ũā¤Đî‰lîĩP4㠊ęhíâŊžŗĄ@3¸e˛.H퓊õhæķ#I#pęę0BđÃ׊ķßx~ĪÄůu‘ėVO* ;–ßʗo›2ãœ×zdû:˜„" "Æ{*&8°.án'ÉÆ)āČęwۑÕzT r‘ -aFė’ūu2JÆ@à §Į<Š„‹šä>'Vąņ>§f&—tĄo!ˆđ‘“‚ÎqĐđぞzúõŪ[Ĩ]TJHQtĒŋ6ü•…sßģW=ã0ŌøūÚ9?™g‘ģį +}Ôž@>2 u~ŧŒxfhJĘ­0šĀÆdŪK=z­%đ‘Šŗ+ˎ‘Ø`WžøũŪ;Ŋ6WĮHō`vŽžÄƒÍwW—ĸ 9$X˜í^p8āx•æZŦ˙Û:dúÃęŖĪŲ…rrАŧŒ1=søM5­Ę›ŌÅ÷ŊŽY†Š{vĢ||¨–ËínŒb;v„ @l娖q€2k§ĐŽÍΓå1BÖsÉfY¨a8Čū5ÎCĻ?@ĶîZŪÚ]zīs[EfIœAfژÛp; ×SĸhąčZ%ŊŠԁžwÉ;å#įn}éUˇ(á~cywpp{ÔĘK ’;ņŸūĩFŠ3ũjQˇåéé\Ãz’)æÎHîNqNP¸ázōqQDYԌ}8ŠÕ‚Š€;ᚏģ’Ä„oëƒÍPÔ´HukK‹=A"šÚc†Lvä3žšÍ_‰\!ÚØÎ}ëŽø…§ę7öēi‰§l7eō@ģØ(ÁVۏ˜)‘īœqƑ^ņ ¯`“xo^K+ģäE’æbMȍÉÎ<ĀÃaõOĨs–+ũ‰âŋZB×:ƒ\Ų•…­­L„ŗî8aĀà Å.ĩâ+*î;NmCQģŒÛAžŨa"l6áÛøAÉ$ņŒE?ÂŗXxoW7ˇ:‚‘sĨ Ļžyƒdķ6ÜũâJđMn“H–hø7SMXtŨNÚęŪōūôüČ6˜‚Š99䥎Mz_—‚Ŗ<ņÛŽ+ÆâēĩņˇÚŊæĢmjō¸û?›2‡ˇEû˛ëę€v'Ė=ÅtíņHôí6Ō5h”$åQV!(mĨC1Ë|Ü| Ō”[`™gâUÄđč ĻÛC+ËŠ1ļ"ePšŗîT×ŌšŪ]č^!}4ØLË~U€Ueō°iÆ8Až9ŦĩũWÄ7ÛõmAāe;âŗŽQĻeęHįæ'š­ëI´ËģÉ$¸×nôû¨âÄ3‹Ŧú´ŽGFã­W/*°“ž§Š×pBø%xgˇųük#Älŧ5ĒČŠå•ļ˜ŽÁˇæ ãņ$Æ°ü=âņyĒļ‰}o>Ą-Í´ƒËēN Œs•üĒˆw7ūh#Gi.% 9ÎÁ枞ĸ2?Í'{2īĄ?ÃyëĀr´€4Jöø˙uČã>ÕÔ,([x˜œO×%áY´[YŌYŽŠx† "qĪ÷ãzęXHąÉāāŠ%¸ãy¤+áˆË×á ŽÅ†ĶœdW7ô¸5k{'‘÷I9ˇ”î†@Ā Ũ‚’ØÎx?Ž;X„˜Uvų€äg­hwL•WpÜOœS%ˇWÜz1Čāūu8Rø×%ņ'SŧŌüq5¤Â$‘!vĪÍąŽoû\˙ž´•Û°7mNSÄū.˛ÕļYévĶ—ļ|ģōūZ#/R¤eˆ8##cÉĄ}9–é­áˆ1íË|͜œįo¯@ĮļE *eûüĻA Š7÷[§<āįŽh&ˇÅĩĨÕ¤v7%LFN0Ā“‚xūáôé‚M]–„­J:Ž‹iomÅÁ™ËĄÃ6:’ ƒĀdõô< ˙á—ė‹8‚öXĐŠ(ĶēˇË“Á\О0NrnÜ+YÚBoŦŪîÆę˛ĖĢJŅ)*–_˜2;åG~U¨ÅŠ[Kdú\šxƒ+æÛŨģDJāŒäÎ;ÕzõĨĖĮdrīá{I´¨u¯ ´ÍI"ŪČÛÚBGY\ķČ#søÕŨ'Ä×Z™6:RCĒŠųĸžo%$@3š2§>ëÉãšÕņ†•uf’\ęŸbxvH—8 6üūáŲœzq\ˆĩ=2îÕÕ š…ŖîYa•Z2ģ‚°Hî’;įŒRZ†Æëx†XŧÔm:æS…ŨqĩĪ92ũ8ÆAõ¨SÄW’• qĨ[ä”ų/ƒœc‹ {úTúŊ–š¤%ũŊŠĶ\‚ž\.ņ¨länîšäsZļļīĨۉ.ĩļšŨW,×%.=QĮԚ–ŅG#ãK(dûĄxđË-¨ō/Kâ6e ÅW ާáŊN;9g!!]×wôg (¸į(÷Æ2͝mR }VéÂÅŠKqæų‰•HœđJžQ@ÉĪ͏ZÄÕmŦ­¯'šĐ‰´ë¨ĀB6+EķF ã#ĄÅ?&/3¨ņEėSÆt{HZęæI"ķ6uˆy¨ė°ÚNxâ¸íN Ŧ.uˆãˇcl×2¨/ TRÜnjŒw€íŲōâ×&Ōį÷ą+‘#ļ’ŲR{đ'’§¨æ­ęZ…îĢg}i?—åÆÁËĒ) „Ũ‘Ôˇ9íÎ)ĨĘSĢđø°°¸Õõ&u‘mláęw°€EŊ˜wÃ>üãŠ_jŲ´Ô-u[8o,fIíåĢĄüúô>ÕÃDŒo§ĶíôíKKx‹,ĖДL$crō[cgœãŌēˆ?ąŽ'‰DRĪy,“Ûˆö‹y3ƒØ÷ëYTZ\¸=luč đsëR ËyĮĨ0n*@ qĮzĢ6€IāÖc†28#*dÉQĮÍוjs–ĀôT€‡’?ģÚŠÆ#“•?7\uĖøú VëBŽ=,Ü171‹ˆí˜#Éā€Ũš+“č tĐ6ļœįŠŽ{ĢQ,’4i´•‹´xįļ?•hÉší$ŅnnEÃŗgã/]”wWšß‰NĨgf’6ÅÃ+…HІ1y„g¨.åzüČ>˜ë§ÛůÚč÷-­mɸ{7SæJ{”ųH$Œ`ãŽ{WB“ęM‘ˇáģh:•üFk­J ,ÕĀb¯RąÚO¯§ÁâDÔĻÕõT†$™Ë+ʒ…ōöōō?|äQžõčē^­a­ÚŧöSyŅ,…_r*ÃąVĄįTž[‹qŠępntiųá|ˇR–íĮ]Įî…ãvIĪ:†ĘŲb´Õŧ4īi,¨CÁ ,‘Æv—Úˤ…ÆrxœŌ’@™į“,OĒI9ĩtŠâiŒönۚŨÉų×dqœpH##5ÖéZ–ŋ§^ϰ.įŊŌŦm|ˇ€°Fpįßk€Xpx­;­?iŅjwqbjRHnNÆ[•eųw.N:ņÎáØöŽ_YĶŧO 2YŪŊē-Ņ0,đ˕‘pxÁÃpāƒéŌŽ÷Đ[ßÔq“o,r uFÎÜזüKÖëÄ6ZTLZßNŒŨ\"áŗ!` úœ‘Œ5rÚ>Ĩ?…u[1Čļy튾QąęN9oœ‚O@9æĨ’å5WSž•öNFE@¸+`1Ī$ŧŽ'ŒT¨ŲÜ.MŖč—ē–Ô(tčeuĮ''p%z°ų‡xdC.ĖÛˇŪZßĮy§īeXP1Œõ=Nā2Ī8ôī YĮFéJ‡eĀQŒcq˙ĐšĀęs‚JŽo[ÔĄ‚OÁ*áÚÅ!VTƒo=H؎Oû´šŽÆR˙„ŋTktˇ˛hፐâo,/8l;sž!× Õģo jwē!Ö5mrņ^.mĶj°š3“ŧ–lsō“ĮAY:DE5ƒííŨ¤i¸Q…Ágčdú0=us\\^i3M&VâōQŲTXÛæ>ávį¸)Iģl=÷3<á;SŽęīTYoJĘĐGæ;Úqߡ+č1Å[ņÄēw„ąomęQŽ͌ß8Õ¸&‘4Í;KDoôœĪ"+íbŽėË@Č{'ûą°ęEsŪ8×ëYļŅí×÷zy ˆf#jĸŽp ãĻXgĨ%w!ßBϟĒ]éˈŗˆmŽ ļ>b@rÃäutŠČ-ŋŌ¯k…ÍŪ”ŗČą\}Žd™m̏dŽŧnČ<ō6 Ô|-tm™ū×jkr¤šŸ”Ožƒūúū*æN­ĩŗJb‘7oa,Jģ†ÜŒ‘œķ´ã§ā 4ŽÅÍbæ™ũĄŠjPŪGĪ“–šļˇŽ3æ)#!›ją=šŧúÕ nUŧQ…ޞAQÆnČįõŽ„C,j3BúĩŦĄ|ĩ‚ %tG„ŗnāĢۜm9É8ĢŒ‘x#@´.ŅI-áŅT|ģwHx'ÕÔu5ÍDˇl.ŽZĶjËÃ|ļ΅Fë鞧žkV÷SÔoõA¨É§‹[XKėIŠ6ÍĘ ũā:íč=iØ m6ĶTxāš˛Ží[֙ĸ–ėļ°Dáx7ĖÅ˙_jĢm­ęŅ]ž“âm—pyŠÔmƒėu#^AÎ čx=6< p—CK‰$_:;Ŗ0v˜ķģĸß!M×h%6(%Į=yížę+$ĩ ,ĨŒwĶÛŧx†4Xˇ0<•YWœķãŒuŽĶW˛ŗ‹NąŌĸ„´b!nŗ8$¤CņĖ›˙āÕÁÃnņØÄYŅ!û\ļˇČUMÁ$cŒmíČčsŽQĢø…QžÕe3ŧ7pŽ8‰rQ•p d‘ŊKrN_›¯l÷< {­E?á›N "ÜÍv&šÉN€ƒŽx^ u§ZŲ[OäŪŨ]ĖĸHm ÃHè.Äa3‘樯9ĒZÔxvúĘĶNžöI‡īn ĸã p‡°ĘãūųÄøMŠË_žÄy^D2Ęņ/–ŋqĐØ gûžõŌiļË6úëy0(Vh2ķHNÕw+Œu<ž™4ū!ZøJ­zūöȎ29Vb žĮ˙¯S‹@{4]OȸfēŠ( šļ–=Ę *KģqįīlgQÎzcžš:ž­ákĩxž8WŒsJŎ=Nėŗ/?Ü5ÍÜ[M-ÄVP.ûĻe$‰˛cÜxĮˆĪķôŽ˙Gø}§Ceo-ÚI5Ú|ÁŒ¯•=‡P?J%ĘĩcÔãl´Í*mfÖÛFņOpņácW #ĀÉĪÉ´ŒvāäûTÚŽ•&› IŊë3^Öt]*ËĘÖîŖ†ĨtØęÍæ.0ÃĐūĩĢ:Žyæ¸/‹QnŌôŠ“r]•^āŖÁôÚáZÂ)ËR[ĐæĄēļ‡Î´…oî­˜-íœ¸f$rÍéÖąĩaĐŽ­Ž[Mö…”$ė‘— ČŪGŌķîÚ+VŲ#ˇœfV€O+ąˇR=Ģjé|]/†Z í#ŋĶå´ã)NÂŧËeĀ ôb1ŪēŒ‘ąX]ŤHÂÆöä(Y<Ļ…@fėw 8āôÆ=j´ēsÜÛ­‘ļ•å›ūz2ŗĒƒķm$öôMÄķž…OYáŊ{N˙„#N¸šŊ0Z!˜#n`IQĪnxõĨÔ|máhėËËmx§æH"cŋģØįšÅEå}‡ĨŽîeÕˇižR\E¸3[E0’ģîÉ#p-‘ž9B>*A}Ļk-paT[ę’&ƒŸē[n@É8<įđފķĞž!+h3ŧ›|ÔCbP‚= ās×{æĒj>Ö`[“.Škt¤”xÄŠ$|ō ˇČ}đ=ĒĶ}‰˛0í´}zՕŦb7 "kxå]ą°ĨÕԓ’qÆĩíõ]BČíן!Æ8ûĶnĀe_܋-XŅm-VŽÂđ(RNT’zîYUŊsģ9Ž[Ԓ˙ÅÍÍ˛Ã ĄļHįœE”hËrx8ķxĖgŌĄ¸×ŅæŊyĨhä–@.0¯$ŠŗhÎznë€ŖÛ5<3gp/­íŖšō5vŒ?—3FÍûߕHÃqĶøsI+jĮ}M8-tšË+:‹ÃŠ(„‡2acų-Ķ$įëHÉe‰WpN—SXˆæ†u ‰Ų1¸yŒä中m>Ųoŧ÷ˇ_j¸ŧ†ŪæE–kŠ6Ölew`ôvŠ$˛€x&†ÖK‹uß,°FĒŲŠĘxv‰}qHw1uÉĩDŊ‡Oļg’Udm+Ŧ@F!ãŽy8į9æ° vŋžG1ÅûĮ-āT)^~fĒđOĘ}+ģŧK™cŗņ°ûF0Ũ0UŠ’˙ Īe$õQX>*ĶPÄĘŪŲĨūMĮ1IŽr Ā @‚C×8Ąv š>ŠãUÕ#Ô¯§šų1ČĘV(Éaō¨OÁŗč+3ÅĪ=߈ĩIĄBßbŗŽqģxäqÁ _δ|9wŽsŠÍrū]šyæ)H$ŽŦUôÂæšå"ŌmBũ€î“0‚˙;0=Ā!Ā˙€Ž”%Ģ`Ú,h{ėĩ+{ˆn-|ŲĨ0Cö‚dÚyp 8ä_•ąžíá´Ķõ…žŸTԞöæbr€ąõÚTp~]Ä.##šķģ%ŧŌÜÚDĒŠ3¤ß$ m`dô$ĮĨFĢ>ekį$ŸgƒÍPb’PdSĶž„r@§(ß`LęüAiâC_yēLŲMķÉæOL‚CgéĮŽG‚îē&ĄgēüȨ&IJ)ÂåTnÆrĮæ=Įô4õ\\i6öWųöļī S&7´|¸€;õ¨lfsĒĘúE„w Ä"¸ž?xrxä¨ę2úĶQvÔMš?đ—ØÜŸArŸg†Î8­å’@Ā(GĪnūQ;ús^Ŗvā3ŸöŗšáüOyâõđļĸ÷–måî— r?xzuī]­Ė‚@¤99Ŧ*ÚČÖšņäã Lš”NN{iĒqÁ'¯Z‘€nÃ=šŦ,+‚žæā¯ĨJXÎz{Ô/–6ƒīÁŠøÛœtÅR¸™ sëÖŧĶâĩļĸÖÖj{ y$yPÂ2B…'ãī“^–Ė¸Ú„žŊëÎŧuŦi5ŧļ×Z īŒ29`[aV9>îqZĶ~ú%ü'cĒÜĮp!Ú͜:ģÔ×Ļø/WŸ\đÜ73‘wˆ$JUvŠÚ8$úW”‰ŦÖ+ynb{ЊLæiËb…# ¸äädrGą#ŠĐu[Mļš‡MŅ?Ņŧķ˜Ö‘ˇå1ļzĪJŪqēДŲÎEĄÃoŠYȨĐŲ\ËaoĀĨŸPÛJ€IÆÜ VŗÅ<yĩ<lj$Û+áTŽ @yĪ­'4ŲÆšēęBá¯Öm&ëh€˛°X2ŽšŨؓÉ8ãŒō2؛w3jG3î9c`ûËqķNF8ÁëŌ÷SK9´ét‰î ŦRëĩDLĀ’ēđ:ôükåŽu˛ąim/'FZŪĘ0Øv’\ílĒ“¸Ņ‰š^ĩą{Ëģ+_k¤āޟ,B™@!—ąo\{~VŽTđšD÷zJËevÍæā Į+{Ąár{ŠĮ›6…Ŗĩ¸ĩŽæÖDCi!Į€Q>aÃãî“ūīR5mė.Ņtß Ø[ÚØ=ÚŽĨ(Š[eĘ%ų›’Ŧũ”`üņ\õ„Š/RÖ[ĸōp``@ʅ|íb2ŖF2ER]DP´´Ķ>× UŨĘTFbĖŋ6K/‚ äcŠÁŽûOŊŌ´Ģ 5[ŗŨ¨Y ŗÜ‹#žÂ„ƒĐŖpÛÁ#žp+2Æâ Md_Eo6-ŽžFO-/š¤vŨ•nģC`d`ãpŠõÛí æTcˆī ‚BßebģÆN l0:f į$RzŊFjhšö‰iáy-o\[L#‘<ĸĄË •Œ¯ yč9ã)4Åonöz֝öu•æ1Ëf†vf.NA$ddƒ~ˇucuĻ;Ž/ZŪáHx•y;ņÁ<íU9ˆāŒÕ}7IJø~˜Áyļ<ĢF‘Ē`"“ûĻ˙9_A­†WŌuųŦtųžÛd.tÉC0(2#q;NF Éf n â4jš–™seŖn'•KImyĖŦKģŠĀ#+‘ī›â 4Ņ+­üķ/|Å᝔X2îx‰Îė+´‚1ÍPÖn¯'ÔÉŅLHžCoûš$ųT"ī\ (ƒšŽ:đí¨õĩÔŦKéWā(‰ŽHåsō•nĀ1Éé‚O#ŠŦķ[0;G ÕJļæÉfl¨ām 0'¸Š5¸eg˛ēkļšÚhƒBŲpĢ&pņ•2qˇH ‘ÚĢ ŸˇÃöf¸in'xÖ$“qÃ!xėqœœ‘éVîąC¤[Hī–X‹ŗ“ģ{V:‚’žŲ?ZŠķlFž…1Ā’“ædˇīx9äíElq´#vIsĐ~sM'đū—$lÅZŌ&’x(+žŗrŠl֚ŗ;äŪŊƒĐâšXƒ‚zS2Č7 9Žâ¤)Ђr a¨\œŽ}éîĀg'ŸJD8(~ŊiY˛ĨąƒT‰nPüĮEq_%ˇ“CĶ`gËŠD:q­žœ÷í]” ō[#>ĩãYīü/{ohŦĶ`:ƒ¸ĢĀŽqŒ{֐v’W<}5¯•Ą˛Š ĨÃ8rŌ† č2v–ęsZÖ^&ņK$—Z`Qk!ķܰ„;vĢđ•É8ÁīDi§[xgŗƒmęj1 †o™‡ņĘÁzžŧšŸÂå.Ž—,hŅ] ‰Ųx(Ä6>R ļJäŽÛÆ~sĶuk؋ũæģ~udÔ.í7ęņ^Ã$cjā&ãÁ'īƒ’3ßĨzæĩemâī ƒ3DŗÚˁČųOęAö&ŧō{!qcd%Q$_Ų0+ Ī –\‚Oũ3ë]gÃ=MĻͤŅnŽ.lOÉÆÜÄß0?†")OkށęrēFē4ŊĐŪiōKcp ŠŠÄsˇp8 œ:î\v­X4ÍIēˇŗÔĄ’M>å‹XęKq*(ßȎBŦ>Ü{æŽxĸßMÕu‡šŅÛvąa¸ĸuŽéF~Mäßō°ķ‚;dVŌu8#ŽKK‹ynô[†u¸´š62[ ØÜWž;°ęHô¤Ũõ@n\xSÃ:e¤×ßŲI?ŲâyœōMq‡b9Åeļ•ۜ–¨K€Åcš,ƒ‚-ķĮPspÄŲúŌÔtKHRØËŠhW!e6›üۋhÕÁpŧüéü>ŲäŪ°ntčžÆâ7 ÃæÆ¸ÄŒĢ’:ƒžiX÷ųjuî2ŧŅkz\öˇ¨"1ķ!ØCBÄŗoQÔŠķ Qę­;JÔīŧ?ŠÜ XÎ˓r$]Ä(éæĒ€XžžâŖŧWļ™5}< Ŧmäw™w<Ęŧ å@€.;œw¨ŦcƒRŌĸˇI_ũŖ67$áŅūp#į8!bVÁčĪŽøĒčč\7z4—šˆš‰mD‹%¤ąE.Ō$PØųHÜď]ÜqŠČŋąŗšņ¤2%Ū• f9á™ôĀ'š@€¤yųN É$ú ­-„Ēh\Â"’Õ„wvĨQãI2B¸W`ĸ&ŪÄķō1ĮJÕēŊą‹pļAdr!Qô+Úįō4öØE˙^i×ē^—h÷ęÍsūŗÉ]ā(,CĄåAÂäÎ:Ķ”¸ö_܈IlP•}­ķ™UT7ŽA$‚vTë ]^)™e6é N…Ųö+wÚŦŠ׿ĻzÔlmcđöņ$í—ę¨á2"‹' :áĨāzŠëBĐw74ąišô UŌoĐ7’čb †õčBšc°.OJmŪ“máëŲĄ‚Ō50Ą|ŧ‡÷˛š=pģJ>9!WûĮ9˙h2øJ+´>sé›;„U ūŒø(Ät cÔd ŽŅė×Ğ˛ŸOē ¨Úmxܰ ˇ–ũŲÕäķŒĩ-ÛpBZŸ1°äcΎ/30ŠģAb$BāEq‹ĻÚ@âú+:Ž"pĻ`ņ) ‹ĪQäĮúWM ø‹ė2\XĮ`ée ‡t%Ā’Āõe õA핯HUČ#šhļˇ21Ŋ¤čYTT‚rTĶ9e-Đ.ÁJíhQ“unú}Ļą đĶNÔâēd~ō >VŪYę+ŖbÕôy4‹×ķB 6÷-ËIŨ Aū!÷ĮīVDQè-œĪ)š9 mųÛžFa”˙ŊÁ˙t×k)4™äDŋĩ•ŖPO9RinČųr8aÃ$`‹ÂŌ{‹y<+Ē #–FßgrĮ…AŒįœú‚O]ÁhxGÃrĪŽ\ÍlĄôũĘch27Eāch0<õk§ûm­ô cĢCˇ$lŸq6~Qģ­‘Ãq’;0*âÎúÚee›ū&L)zŠ…ž?îLųXu 8ĪNĨLķ=‚ưĮwĒ­ėî¯ģ4‚DÎįD _ū[xĮq*{U}ZŅ´ë “zĀĪ0Kå’rdåĮ#‚^sŅ×ŌĩôĀŗęŲÜ ļš2 Öō mU!€R~ō– ‚8ÛœŠįüq­E¨ęíkĒëhĨ7*äo#9(đ/JĨ~kzÔ)s¨ęæV‚[Øåb %Ānœ’AäŪÅjÚčwWķ˜äžšWŒ;S•)$lÜŽ¤ō9Nôž€ÍsL’Ë'›tÍFß+!’Ŋ0zú×_á#öų'ŠæŪ+„†duREŧĖXf€ p0TœzUĘV%KiFhŖˇŧļyå’+K‹7”%vm BįiÎHãžHę|-ퟆ-mo‚ m™íÃG pBąAíĶūTmu{¨| ĩąœŨŨŨšX`$Hęv–T?Âs"䎃q÷Ž›LŅF‰ Xiģˇ<1üį\œąüÉŦkËŨąĨ?ˆę#É9>ĻžûŠ€Ē0x<ô´ČĮŨÛÎPzTŽ\Fv|Į ÉÅs­€XxsߎiäŒpFAõ giČ8õĄ€Û×#IXL­j[xl“ž3ė?²ÔteP0œƒÎŲ˛Ã§Ę˙0éŒÕM*Ū)Î[6˜õ)R;š.Ôģģē3’ĢŅNŨŊ8ƎĢđæVG:>ĸ" Á­Ōųą?ÚûÎ9Ü=Ē›]CRĢ6§b ž° ļ!/ŸdŒBEÚ^/ŋ Œr8l՛q6•e§\]iR$ļRîs 0…o)đ9ˆ6ãÆđ{š–ęÛÄēozČUAŋjˇëŒęģ°F6÷éTßZŌĩmĪŦiVĶM3’KVÛ#Ž6Š0å›üAsZúŲoäؐomØīsķ‹ˆFs~`SanØu>ãĨx­U­ ‘Ûŗļ†Č|įËfUÜAųļļF@ĮPjŌOσ–zÕõ V>RIfĶ" P3€Ģōî ãŋĄē{{Á,ļōÁ;ĀĨ/aXŠ%ÜÜoP2Gû­Čë@Š ŽFXãŠGDUWœ+ļGRI9$ā’Iį@§Ūŗ˛h–k+ų_c7,>rĶHîp¤öU^šíTe‰†›w\JĪ4Á RrÅp¸ČŽŧ|¤GY6“ũĄâ Qb‘VÚÕŖŗvP3˛8Đ|ĖFÕ\į¯žąÃc+x&+gÕo4‰ØĩžŠhņMš˛K¯9œ‘—įÔ~'OÁڄšŠs¤j ¨†C’ôU;˛­žĨ[r“č[wņ6+ÜiĪczšĩĢ6ë73Į™6œ¸;ŽW‚Āäį-ÎYđˇCÄuoPƒģ*9Ũ€Į:KÉĘ7ˆ/āpž\˛:Y¤õÆėw=Ič@V ‹­6[ˆoKum€ĘNKíq NF!¨#ätĢu&‡¤“¤˜ãžRĒ~ĐKĢšĀ =Xd}z•KjÛåëĨđãĪ$°icZۘ÷šļ@Ŧ,rÄuųPuū#í\ž­wŠq Ŧv(ą[ėÜRßnãō†āqŒ–¯{i§ÔīáHĀgg’@ãŠō¯ĨdxilWdN!˛ąˇuå˜į'3ÃwõĻjļ3ĨŌKîœĀ`f¸ˇXgNœüúzG[ č`ÖõTō'–C0VŽYÆ7ƒŲAˇBĮ< Ų›S Ü܉Ôĩe‚ÖbÜuÁØŨ{míXąŪÍjļją]*${8 Ë`z-ĖNzôĪĩiÅ­]žbŸz?+öI ¸0$Îx1œôŖ—ĒŊĮ‡ŦŨvÅd–÷;F‰jĒĀx,08íŌĩ´UŅ˙°uUNąĩÕ­m].J*œŠCĩƒ˙qŋLÚ˛nĩ[U™‘ÜJĨTŗ‰‰bB€ˇS‘Īė°ôÎ.ĩ-ČfŠŗÅģ¤áHBw+°ŧĀūĸ›Ü ? ¯ö†ą¤Zų(3x×’Č ŒĒnpvŒghQžÃKÃĻûUĶg¸ˇŠãcj7ŗ…;Ws#“ÁĮĘ7z˛Žĩ4KˇĶ´›íY“uÃڛ H%Øã/øČb_¨>œw>TŌô “ ßŨĸ$jHÂJč:yØ;wúQ&"ƒ ėÕqjZā°ō-đ0Ŧŧ‚ø;~\åP)ų‰ę‡'[ím>`—ŲÉöPĘû–KYX( ú@?ėÔ:…ãę÷s ĮŲãb#xá‘ÚYA# ĖÃrŠÁ ŸáqšæŦīb°×ndXÖ--á{{€Ø"| aƒÎ/žs†Å+h2e‰ážÔ$ĘX]yĶÂî\Dŋ7đ.Ķ‚ppĮĘN…÷Äiâē0iúZ‹1Ä.ķ‘ŋĶ 9įĻ=j§!y/ėīæ@nk‚ŦÚ!-ûš}Æ~Rŧũā0GOfYīMļũ“ŦŦ*k—`3ŲqԜŽƒ4Ũ­vŠm@øœė›Án!Ygˇo,ŠÉį{(SۃŸëTįŌ‡85uËŊkRŅāŊŊĩ m"˛E"îfžNėŽšįŒ4ē Ŋ3ęŗA>ž’áĩLDŒíûÄØrŲ#īŸ›æ9ä/|SæĩŸPV(ãIŽ.Á`ÁQN#ûĮ [žģšÔ´ íĘÖX˛´ōŦ‘šFBä…,ŧîė*Ŧ—-$z­Õ­ĖŎžķ#K 3åcŅWbī8ām4ĩū–Ō}ž#pø”IâT‘˙×GžlvįĨbemoŽníõ ĢYZčÅ+!uÜ $gš>Äį5ĶKĨ_YØiڒéöÖŅo[™e{ų$ūá×æŪĄūđž8 ā×*"Ō´q ŽK†báLœonw`˙ˆĄPģš[ûIoŖ’ûSžŨ<Á%ĪŨļŲķ9QNx^q^§ ÂŅxkKˆ¨Ü–‘)ã äŲaøe­ŨĘÜIc,díÆ—Ķ¯ŠŽū(ŧ›X#|ˆĒíXV•Õ‹Žäá›ĀĀīƒNĀųq’}j5;WƒúRī ‚sœqY!’nÎ#>œņL™œ&UC6z͈Čāāúb”r ہĶĨ=ېįË^Nsęq\Åđo™ģ;.ābOÆ{z×XWĖU +#ZMB=6ō[;CĒK&Ņ”ŒĒ„ô'-Ž:œ{VŅĻC8 Nŋšŋš+-ĸ ‘‚XŲpA=U9ā:Üņ$:­Ž–÷:–­n¨˛DÂĖJ›g!׃ō'ˇvtŽatËÛ}fŲZ˛MĄÔ ĶĨHͲÉ"';8ĪĖÜrpŖÔšÚ˛Ķ-ėŪ[KE7WjØy-- ԛ‡wšR"ąv­ž÷4ôũ%éK†…cģ• VģrÍķ‡ha÷ŊAJāäY`û,OäKöWv‘ ߗ$réĩ<ã‘]Ŧ:íí´ƒė÷ņˆGĪä^A@1’|Ëf;bÅHŠŦ~qxo`‚‘¤Vž;ŽļĶ?͐Ęä|'qŽE8čÃRŊÄ s5ŖI*@Ŗ,Wå%XâųTôęrJYĩØŌíÔģÉ ƒoī0 ŒņO]ÚÆģ§L`À9Ø›Š…ÉSDKX,ĩK7}!î"ûB”|‚0w1Ā;Pœ@Éāni^(‡P´ŧ”\ķ„7sŗ6Ņķ0Xâ GĶ׊¸š´KĻG}u–ŽŠ 1Į,l’Ã(8!ƒu@@u/ë×ĨrĪĨĪwmd÷wđŊÅÔ­ä0”|w¸ØØBdũėä“Ū–ûĨĢk]ŅĘa¸_'y3Be€Ø’Üœ/R3Č#šŨJū(LvéDZF+nļņ…PxCŒ„ę[ĐTNķYj/o}îē°v“yĸÜä“éÉ<` IĨΧC^]ĖŅMąHP&Héʞ8iāķČëT•ĩ+æúH<é‚Û–\#,¸rĒ9FāqĶ#zŲ.'uˇĶ’B ~ūi%Ų jËËČĮîõ=ųĪNĢSąœÉqs ޝ GĒ2ķ’Xį õč[‚ ąÛ“F÷Žķ,n|™ĄŠãŖۖ=ļž(¸ÍŨI˛ÖuŨ"ßJœÍĨédžčĸâUû‹õØĨœįš,rO5ÔxrûNĩđLzÜ0ZŨÉ,įeU&Y]€įëTtŨqāŅ5Kŕ§KKW•$YŲâ)<bGOÃņŦ˙†ū'°Ŋđũˇ‡/eX¯­SĘXÚOõę9}x#+ũ+7v…äD’é­z,ô×mZeČXmíü¸T~öNāgnÕnYˇcˇÔīlã•noY ÎĨt&Â,„…XƒãÚøsØČ7Šž×ĻÁö}2¨ ps…žwRĢōôëyčzW1‡6™Ŗ^Ksn-Á<­!OŗÄ ˛œ–aÁQ‘õ8&ˇ„|EĩĻ˙Â7¯ÂY%_&Úwp›F|§¯nŖ˜-bOërX^ĢJcc,ŽN ŅzšęF0ÎF{ Q¸ŌöÄîįHQ`ܸŨČ ؀–?yzgU‹M~ËRĶíŦRō%ãlāÂđ˜rrsQ[ēŠ4->mJÎīN[++!įÛąŗØØ ī$;€ÆÁÁ8ŽwM´Ŋžņ –“Ĩē[OĶ]ü×bdŗˆąÂ\ǐ­š<‘œPŧÂįM¯ę:F§ĻØYY^M–¨Ém3'—•Ûŗ ŧ[Æ>™9Åp–°ę6­sc BžTŽ’)PNU˜ōųxRGÔ~‡c§ŲkpęZęÚē]Ø\ŧޝ$š9ąōîxŸ(P˛¸āģÆ pjZ Ú/Ųõ?ėø.H÷Š™mv¸˛Œ |ģČčė€ĐÖŦD^ŽO\a=ĖÚi°ēūōFÆÜ¨QÆH6qÆâŊzA|€} ãpéVomgn’ÛÅĻk:|J&FPcēÛĩ°{üÛI_ŠāŽGŽÚG4še“Ũ)ûOŲãķsÆhČüķXWŲCrElrpsíŌ•eČÎÜÄÔyÆ[ ´sžF=k!’îĮqגxīÍ8ą<ų›‡Ļ:T89Îx=ąR(&<ŗ1€Į¨>”ÄĮDėː Ž•ÆøßėZžƒĄAxúĩÆÔg1ĄęŲíĮíģÚģ™ąŽŲŦ/] ?Á:ÅäRĻō<°āāĖükH?yö<ļÂøX鎙¤Åė17Ûī' ĄPV>#īÉĪÖēĪ ø‹ÄQ]ØčąÚiˇ`”0)M‘ Ųt9ûŧ渋ĢhUlâē)ˇŲe &đ zåzwÅné—w1ĨŊÍ•Ī—{`!‰c”†(ˆņˇâ§që]RZii:ŽĄŦøš5{ĩ†;{ggžy_lvđ Ę#Î1“éߒz€,GmgĒxšįKŌåY4é*‹gĪ”…<ÂG IV2ŊŪĀu"ŗŸQŧ]7R_°évļ—ų–į÷ň•FâĘ ãsM\Đ­-õ×ŽŪ ų´û߲˛Û\ĀÛZgÆcŽSHÁųžsÁæ1 ´ Ŧĩ´—JŨĖi2ܔGb[2’6‘Œ|Ũzįĩˇņ͆‹ĻŊĻ›ĸ\Û4C+†%Vb3Ë$Žœķé\Μ–ö:ŲžÍu-âd]ß2‘æؐƪqŸâĢÚ}’N‚ .[›K‰T'ŲlĄNI]¤ƒÆâ6s…g'S•žāCuĒęõŨģjē”S!uÁRáˇl>89ųW¸ĸūí)]áŗÛíDtŒ9؇Ÿž0€AČĩ.4Ën%KxnÕŲBō‘÷ãæAŽ >˜°ē}‚ųūŊ‘ ĖD'ƒŗŒ{w57H t‚’3ŨEĒ;ļüę3ūņF+‡Ü§˙c‘Ô`Bitšžk8ĨkILf1](ޏÚKK/ņ ķÅuØÚ3k6ōŪxKŊ˛„åÅĖ ¸ØsT)ųˆ`Äį`õ=UŽŋá9\Zj:5žīŧæ$ }H“Š9ģ‡’Āšģ´–ÍjåʆŠÜf6Ęá‰R^AČÆ}éąę$_‹Ø%–Ú`ã˜_ y˛OĖI'8''Ķ5ÚøĮ[žöæ/ėŨZ#g=¸T– ÆDŒ–;™ö}ė…`9ãkņ\ĩÅåöj÷‹khcU]pō @ÆĖõõn:)ĀIüT“øjöÆ7ĩ‚ææE…üĨ!†i tVmā€ÛÉÆk™šXŽG›5Ė$îŒ\pzáxÆ1Âį€3Įû>ŖéĮSĶË벸ĩŠ—¤F¸ĪĖg8Ęŗ/aŽ•_Bđn•ŽčąßęĻfk°fļĩûYÄ0ōt?3s“žOáMJ1 3ЎņvšĨâo5ÄjHŗ€:X}ėOLgR귏Åū™g|ĘCÆ­#Äŧd‚Å3Ī\ ×°…íŧKuákPēhĸ -”ČËHŽÁFæUH,\px­Cc}¤kŅi:DV×°ÜÚ´˙ņ0“C Ä8RĖ>uā÷īCqė Z‡ˆ&×ĨYü› ”ķī;ļōĮhÁ8Ā#ļsģŠHA }ßŗąˆŽËݍp€ˇœķÖē_KŠ.ŖˆĩŅ‚¨ōfŽõŖ‚IGVÜn# ėp>čÁÁ5×˙ÂU¤ī(5*Hâ8Ųēyü槚ÉY ķŖi<3­ėmeZî`#ŽI1–a°)í•^§ŋZȸMš„:Ž­“Ø3ā۝ŲôaŊ{Ÿ_|‘]n¸–—ˆø\I<^l,1ctŌBЂƀFA ƒŸģ÷Žs+ėK¸ŨLņŽØ˙bģ-˙`Č0ŋ†23֎kt˜ąģđöˇ+[_éÃOˇdxîGúČpDjy-É'n'`fŗĨOļhæĐuK›ŧŪC=šî7adQ´`8<|Œs]%õ”֌ÃVˆnō”^ÚFądŠĮ7g Ã%X㎙ŦšŅ$ÕáĶXNļhĻiH¸1E)“įo.=Š…mĮ’@ M4‡ÍÔâÔᴚöȲN“´a<ÅBĘģA#ˆ x’¤rKͤką-ļ—sŠ\ũ’[p–‘ Ō‰ؘ€,ęNHųWVίáŨŪŨInŪ\%ĸM:ƍ™ŽĘîß3ŨëMšŊđîš&†iQö"?ŲļŗĖųâ% 2cģū|{­‹~$‚{C¨ëöwz5ũŗÆ×6ķhæķ āĢFCng¯›u4o‰5;*-­īl žkĻ]Hé’dĩžĻšë]Aõ› ģI|OkoŠ ûHÔcq8ÚF#F/ĩ€é×8=ŗSxĮÄzbčmØš(7ŗ&ÖäÛzā’@1G+m!§dOvšM˙†Žšm‡Išd‹Vĩˆmfā$čŨe,šħžõ뒐cGSŊ[Āđ} y:ŲÉĸ|Õär ­MÂÃo2!-ąŽ°GCŌŊ/I˛“Lđî™e.âööŅÄێNB•a[o™qÜ@Fų={Ō’Ī_ķÍ1d$r¸íƒŽ}éĘĮåcŽk$PôÉÆI÷ãNe܃åéõĻŠ8āÃĶåW*§ķĻ&G cšAÎjSOĩÕô˛ Ä-op…tĮĻ=탸U•B{ûqYÚū¤4] īQōŧÃe‚sķŽ=ČĢ[č/SĘo´}K@ mŽB×:]˛lŽō.ģw€åO<ũ8&¨[âō9lĨ˜Oæ€Ĩd“9ۘÜÄgwzbĄÔīoõÛēÖîÚG˜ĒÃpąĮ¸“ÂúŖžzš›ÃZtž(ņĶw-$0šš8ÁåŠÚœãŽHãëé]ĒöÔČЖ$ԁŗ´i|ƒ~-ÍĶL\e¤HĀBIč§vqÎ}k§Ô`¸mVy-īFšÚ~Ĩ •ŧėĻDļˆĀÄ3‚@;Ũ×$ûV‰îü&ģh¨ĢmĒų–öŅ€™š3MŅÂēAŖë7SjQę:~¨O‡QĶĩ Ą'p$áÆxíÚŗwč0ĩԟMoė[ ønæšđ,÷2*3^Lėl.vĒ*uęysIfļē‰Lmûžĸđ+9?ģ…­„Œ ‘ĀŒ‚G<GzŗŖé1ÃŦŦ6í >c é%ŗ̧)&sΘO/zÉԎ‹Ŗų¨Ø^5œÎÃĖBō´ĨTwųHÉéÅJĩė1ÚuÍž™iq­ĒŨØÅiaū]Ŗ }ō<§aųI$‡ãķĒWÆa—ÂK¸íų ×ÅÚâB>T\ŊNNŨÃķž*öâH#ŸØēUöĄ4ĪžęöâxŅwāŸŪ:đ •_Â÷­â_\jž –?ŗéjĶÅņ$7yėH'Āô;=ÄVŊ:kÅe=ÕË]Į`˛Īĩ†RgpĄpN G^=zÕK[ŊBQ*™īĘ ’Íģq¨æëČ4]gS–ų­ZS!ŊpōŲ ą+…Æ@ārqž•ĩkĨŲÍįhÖ˛‚­*äžŠŪ¤ūž”^Ã9ûYg’EēžáЙΘIیą=˛ äp=Æ ­MâŧŗƒĘVo76 .T€¤’NænøÚrÄįnlŗMewgq5ē…¸’)PLÛDdîR ä)(98 œņUŋ´ĢĮ,Č­ū°:ĢC!=ShÆÕÎ0IØ­d›ÖēŊÃøzI–M†XEŊã–2 ō0Ī#%š€†qč~ēŽéQįŠĻđOČv|ekƒäŲÛÉ3ÚĘ-æ]ĨU6‡RÄp8'Ļ:žÜ†Ö–—ĢĪĨKæÄōšũë 2€ āŽ † Œ‚ßœÎCLë<\C|KŌŅ$"EŗŒԒĶí\÷ˆ­Š5ēņģ\YŅYÅö$}ųYÕæ˙žUvŽ=búãWŋņ õŊÄ/ž!ŋggŠ0S(FrsķU'–t<ZQk:…,<”Ō¤IĨL[ŨßîŽ$^Y‰ã,ėrÄ`1=°Šqv°\éŧLmu˙éš (RîŽÔqĩZ3 ö$ž}F+ĖtŖ•Ō™cũÛnfˎ%OšÁôíšęâÕí­4š×Oŧ7šîĸy܅yg# ĒŋÃy$“ĮˎyĮ;áÉ ˆ=Ģ™Â™$MÉ (asšņ´:r*ĸšVĸÜš„pŨ ZĮ?—1ķ"AÁ¤˜ÉÎNqˇ ¯>ˆ^úrše¤ˇļ VęĶČܒd|˛ˆķĖo÷yVČä’[Kiåû]Å´r["ID,&ˆ‚eUh˜âDSŧ;[ęÕü÷xvģ[ ž"ФHe™&æŪL*H3Ã+Ī Ō“c+Á&‘q3\Ãg”‹AyöT";yC†ãPüČŲ€Ũ{ÖåŦķh—rkšĒ[ޜÍ™Н'„ČÛą'Db08ŽkAņ^ģqxnŖŲs**DKéEúõãU*¤ƒ×Œ×œw>ˇ‡R’[ÍCÁzn›"•hnDJ^RrY€dW\ߎjeĻâ9‰%ģđ~ģye§hķjZÄĒ$ŗ„yņųr.āBŒ”nŖmaŽüÖ‰lt褡¸M*]%oØĮ ÆcŽMōRÄ ÍũŠ“Tģž°ņ>ˇŠž¯}b‡P’'0T !#ę@éŽOLņXˇ×ŠjĪv—ēŪĸųiœļq’ņšAÉĮÔbŽ(6áŨf(í’ãQ‚ :đâō" Ž<í§ĶĄÆx9í]ÉŦh2‰ô čˇVĮ .í-°â3Ķ(§,{åIĪ ¯8Mé§é…SÍ1‡vYƒ´•## ät5𤸗ZđīŲėî$6ĒųŽŌâPĄ9!H,Ã#ŠíU8_T ÷=ÂCD×uÛkíCÄF˙Yŗ-äØē}™ cŸģ āÜäņ^…u&:cĮnĩæ-“Gņ¯Ã›ŸZÄmĩ-5ƒ,ŒĨ$‰\Ž{‚ĮáĐæŊ+¯ļiļwg8ž“ˇuú×eĨˎŦާå6{Ōî#ĄŧĶ#ÃņÔôŽB0r}ë3BU ˇcÜ÷§€Dc8P īRĄ_'8č*“%„`7=A<ũ+œø#¯ƒ5aˆÄf XōX¸ĀÆ>œwމp˜%N 8æšoøvãÅ1ŲØG~--â”M2 Ëžāu<ŸËŠÖæD=5˛đîģŽAfļ ­ ‘(wU†ÚAõ=zvÅvM—€|5{Ŋ[nęH›DŒäŠĒ9 ¤“ŸŠëÅYƒá–‹mkŨ^TuÃŖ]í :…ˇt_x{CŧļjGuĪī]ÚFä`āą8'=ŊkiM2mc›ĐĶMđ›ŨøK[¸Xíī&„Ü|ąĘČĄ†CÜuëĪx~ĶmæĨĢĖlc;ļ\Kn;ˇߍÄAÉÉį“]6ˇĻßjąŧKiĸŪÛ 2[߯ĖAõŨÎ'ĸū5ÄÃāaožÕeáŨNq‚˛‹‡”ŠČ ŖŒãåȤõ¸Ļ­ŠŨĪŽŲŦ69ˆZië4{‚Ûįq #–!p20?*ĪŊÕŧQá× ŠĩĨōŗĄö.áĮŨÚg¯=Ē;_xŽöWūØņ4É6 ZÜĘÄ į‚Äé÷OõŅØøfÃE´´Ëe’ųĸeIî¤21<–9 sØtĄ´€į-|DÚäWWzķ =6ĖÆ˙cŒYŗŪz°ÜŸt|ÖF”Úeč¸{ÍJÖËO¸•Ž'K›„ŽK˛™¨ÉŒōzŸĘē;O]AáÄ͆Ļ#ģw‰Žn„’ŠÂ"x¯9Ī'Ŋ5žÉ29ߑ •bAœ!G4BĖʗQˇhš#}ĻJķ\‰dnīšĘ5°sŊŗUKB’1¸Ŋ„<ö×mŽÜ2§Dˆđ™9rė€+bãá…ؐŠņ,­呁´PĮ„7ž8ĸ÷ĀzŊūŗqyģŸ …h`ķDq ™É6qŽ <ĶN=ÃS™ņ /§7Öą[aÉklī"ƊĨK—dA0ŧ#ŸJå&fQgēI2ą“ąÆŅüG8=søfŊ9~ę-uhnŧF×6vķh ¨z1ų×rˇņdƒÛšĩ⯆öÚíÃj:|ÃOÔ!¤Œî@īî*•H­ĖááÕ/ou~ĘöpG á ƒl_”Į$/ŪĀË.}jĘ]GRßĢŲG;`’EōæpeSĘF26ƒÎۜVƏđx‹íúæĄ%Ô">°HWqĪŨ$ØÆzÖĄšøo§ß\Ûéēm•Õ„Ā7™,‹š29R]Œá—d“ŅķG ĩĨkp6§eІ=:ßV2ŧ‹hč‘7”ŅŖf û°œØ×4ßOáŅĸ6ut÷×ĻčMÁß]Ė|˛Ü`Ōē-áöm¤Ŧzļ™guxėōČʄ"ŗíQũŅĐ}=ÍHŸôÔ¸b.õOė˙™œnœÛHĀ yÛ=ęÕôæņi­Ļé÷q[˛I|Šå]=ąķaĶŖo•äw^ í$aIÚ7žæŽ5ĩ•ĩĖČmZ"Ëo$w3IŠ"˛##¯;‘ŗ^ŋkĨYéÚØ,ėĸ‚ČäRƒ×>šīžk„ģø[;jÜéÚõÕĨšA0<S`ä }ãåĪN8SUÜ ‹EųāŒ\F͌LŲâg™ a,a€˙åĸŠåˇ:Ÿáͅ]MT“]M‰#ŗžßO¸ō^"Ŧŋ4y$ü$ +jÛᆤ’Dīâ´Ã ër`šÅvģASķg ÷4IđĻ[€Ū!ŋ[rŌ4G;› $–úņG4{ˆËđßö}ĘIĨęW6šÅķ6Ÿ{c°Œ´k’ @bŦJž2xõĒڞ‹{Ļ]§ü&Úæ l^]‹{™"ŋUáĪ–z˙Ë3žy5ŊÂk¨.-fƒÅ7k5Ŗ ­„+*¸9€Fî˙w71K}¤ MN§2Į˛áväõāäRæ–Āx÷ˆ&Ņîī¤ģđîĨí•ÔKöFiT`ģC*’Á 2-O5Æ]˙eO4†4ģQņÆKmč¸Ãr8yãĨzßÂÍ $‹i-ũŽķʤÁÆ3Ķ oËųÚŅ´sIš(úãßiûHDš‡2ŠíûĖķÍ5V)hR‹{œ\: å߃uÍVHgķ&ˇÚ@éûЁƒą*3ԁĮĸæšņĢéÚÂ÷ ˛$” ŖÅÛŽxĮCZ÷¸mĻŽŅÉę uāõęäŸąÚM>ĖĖė\ą[w=NG'ĨB¯mĐÜOŸßXĶ#đΊcc}¨™oŖO=$1ØĄČūGš'ŪŊãO"m L|åM¤$0ã? §Ūø_@ŊˇX/4{ ”įÛǞčÃ‘ÛĄ¨bĶ“JŌí´ûy$6öę#ĨmÍ´tö~…zą”lЧEFœÄņJIęŦz`zTm’=ģ˜~tĒģJ÷W¯^j íä’RË"taß­]\ tįÅUČžũiŲsŸūĩĐMÜX“#Ž8ĸŖqšĘ ûpI^Ôč˛G<œR˜Á|úV¨ņė *`cî*¨QĶz͌€FT8<Ұ‹cic°œĒ„‘åŒũ*ĸaâČ9\äŸĘ¤ĒÉR1Æpiˆ°<¨›įÛ¸{R=Ä*daFÚĨģmáår?ŧŲ?KösĩFæZgag"ŖxÉ1åqí“īP˛°UcĀS’8æX–i–c*:ņŌŠÜŪ°%JÎ>Õ$Ęģ u zūĩ™plL÷é“IØ´ˆ¤sæ°rŸcéDSãå­ĪJk!“i`2zņĨY†& ŒgoJ†Ņ¨á;^6E!€ûšëŽÃëRE?ŲîAąãvÂųDår@úôĢhr`9íC1ÚģšoQQ3œđ3žįĩ&Ɛ’aŨ“iĀęÄŌyjPƒ–'¯Ĩ)|Šôõ¨%••xŽi\Ģ •"d(IÉčsÂ˛ĨŽ5r„’wrsëVe8ˆās‚jĒĄ–Lģ3ęMD™¤Q<)ÍÛH8éŽjv‹.§ž§šjÍO(d}Ē[ĖkĩBŒŒöa$õã­Wîî#¨Í<;p cŽ)§Š \Y21ŸÃšĨpĮN:bŽäŸ˜į§$U)Ų¤$íųGf”‘Q?˙Ųleptonica-1.86.0/prog/brev.53.75.jpg000066400000000000000000000704311506303110300166500ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ā"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?´čEAå*āvޞ8Ēî„+Ƌ=–Š’(íUŲ€āņWdŒí?JĪh˜°É5w"đÉķ})YđؔȆÉéRÉãZ5„œRä㨠u§ÅnU—`SęĨJbÚpC֚¸™NKxį‘âVuÎŌĀ(€āvéVØØ:ôôĻáFAČČéOQļāŖķ¤ŪFøâŦėéĮŊ āQ`ē+— .3ëSmšĮ_jR  9Šc@Č Æ6$G$”אņއŌĨ ō‰AäúRŧ”ô=ijQ7ʧŽ:Ķķ“Û#ĩdLuĨeādŽFzõĢFc”Œû~¤aGŋĀy öėM<ËÆ1ŸZ`aۜō3Q°` SFq֞Ȯ™'==i Ē2NF0Gz‹xNN1ĐÕĻLešė>ĩVhö°ĀëƒúsRØŌ'…˛§8ÍOˇƒœņĮŊT…Z<áäUÄ;”r§š¤ÆŽwZC˛^ø˙ ɕxCČÆ8­­erOÎdȄÅģŠâ„Qč%U”ŖĢēõÎ*v :OĩDˉ¨E2Ģ.Ŧņãšļب\Žvåwc8Ī8õ­d!AÁ銐.@•ÜC#H‘ČŦcbŽįiëƒųŌ}Ą`VyU,xc“NšŊ“í—ą)Û pŗG'æ^¸úgôĸŌâYŲ'ķHˇGcĮĘĮ9}*ĐZ5Äą[¤aK;•ÁëõÍ,Ōx[XÕQÆåڛsœŽG­ˇ(ĩdaĮy4×#M•iĪ΁†BҟǚšŪāŪIw˛Ķ!ŖtPpp{}ĶųÖŦ°Z[Úŧ¯ĸG—$/@;Œ~5ÍŝŒ <ČJđĒ2ĖÜ€'€Zv§ÆsIpš"]Ã3ŧĢļB “œuŸ¯Ôˇ6â/ŗ$˛Ę䞯Ų$äs“Įš}ĢyĸP €pŪ”ÕŽOZŸŠƒ*F$ž‰ÚBĢnƒŒä“œūU5ģÍŊ’PÅÖ$ØÎ˙Ŋ‚0=qšĩũ§§Ŋü–ņL^xČGŦB’xŠĶ]™Ī “ū­ 1*ˆį]§mŽ÷ž|ˇ]¤‡ÆGqЎõŌ+ b¨ĘP• ûpHöĒ Ģi÷Og‰LG|.xÛ¸Œgã<ÕôŸuŲļō¤P6ũ§iÎxΝ­'Ņ5a¸žŖō¨Ü§‚08ĪŊXV]ŧsÎ+.ÛXĩŧš¸ĩA 0˙ްpvœķƒÅ4ˆmXy”+ƒhįÅAo|“Aæ:´J”‰FŌ0HõīOûD4q$ew`Üdôü÷Ēą7'W p+„šģ×"[¤]FåB\*B­n Kģ҈õŽĮûBŲæxG͡—sČëUâÕmîoŖŗ[hŲßĘĶ&Sæ`äî?)éԜ[]Ō}MFVXÕ,ā`ļ>ņĢLÜ) _`wč*ãŽ={į×5Tí"7Sg¸æą6ą,@2ŒāúâĻaÆA>õ0…M’Ĩ‚‘´‘ŠÄÖm8<`wŦcū¤ãŒŠÜÕĀô*FG9Åa ?gx픮cPÖõ =R[eļļ ›%–MŖæ8ÉíÔŌē~̜sÚ˛î§Ũ:´ ĀËnį Ä1ØŌƒIęTâۈį˙ˇ^îYĢ:y°gËpīëY“Ū\Ū]}ŦƯ(‹nҰĮīĪŠŒ}Fkĸ›Yo4r°ĄJÆ2A*@Ā>™nŋJŠk1Ŧr[O,ģŠ–Td*šÉāđ+Ą;j‘ĖũLx$ŋ„Ü,NĒd‘÷ĨŽŽ[h9ë럠īH‡UbQÅËī÷gf1Ÿđ/ëW¤Õˇ™B+ĒIĩPŸ!ÜTƒ×”žõYõa%ŗEĀ“+–ķpĖ ĄOAĮ{ŒūuĢčNÉcļÔæĖŗēÉ$N¨ŌĻŲKsĀÛļŖ’ËV›hi.÷…ËxÃgHã8#ÛōŠbņ3€­2ˆË&,W—Ņ“Ÿâb]vDąžäũ„•c ’)¸ķßÛ§~Ŋ(÷—@ĶšZ{ RãĪ"Y ŽĪ´ũ° \Š @QÛ ÎzÔPY^ŪyˇVŌĢq(Uk§ ŪŽAĮ|;.{Õļ×.ˇËØŧlĀ)FbJ‡ãƒÜ ˙žŠ%ׯXmä•Ë›wlüŌü_ė§įOŪēlčŅ^ÁĨG鉝*˛HĖXcœäųĒ> ĶŽīb‡ėnFÍį>sG‚Q‚ž:üÄÂĩl¯cŧˆ…Č’"Ģ"•#¨nūÆ Õ¯&ŗû7”  &ŧ8A´‘ÂķÉ~5’o˜ŅĨĘb6Ē´÷¯úíī™ÜÁ¸Âüžũ{RZhš„RZ™eFX]_hžNÄēsĘ1ĮOœĐšĨĖ—ņĘą ęZ ĩԘ¯eų>‡ v#Ö5mãXĸPąÂŋģû™Čv:ú‚=ŗZûÆ~éi4ģųŽn!fŠ+yŽÅČev.6… Ā•9=Å?DŌŽl.$?čØųeUŨČpÄä†õÍBu+÷Ŋ1a‘DÁw­›ļtŖ×3ŸöĒÔˇWqyˇ6ļķFnîclũœš•ä:tīPųļ.*.īąœžē[alŌ@B(@ļÜųa ŸīŠŠ&đÄĶ´ŽŒ ČÄBį`~~¤0#§4äÖĩr-b!’ōo™c6Ĩw~íôPŁ=ąIÆŖjĸ;Kk¨­•¤tAfXžerNOŨ #ƒô=*ī"=ŅĶø}âŌæ´-o˛IYĶäųPÜ3Û$U t –Û>Õi;ĻÂaAr1ķu;”dsÅ[šūÔŧŅîŌōŌîY8 ka€˙.ėqœî ôZōÚí$7V3Õž(ŧ…ʐƒœ`ė ĀŨĪz}ÁÛąeĸ é&Ø|– Ėd)ŧžHU ´ŒÔõ­Hü?*K%îʼn˛<¸°ĀnsÁŨÁćōéN’įWō¨‚ˇ-ķ]û6’6Š#$g¯CUī\Kĸå.6†VŲō䌏P0[ō7'ÔI$vĐÆ"´TI&Ņ€ō6XũOzaMLJÂįŽŲ¨-gíSí ‰'u‹léíVLŒŅ†ÜĒ2qė+‘čÎĨ°E‚Ã$|Į°âŦ퓜į­DkãŠp}21éé@ĖQNĖuÖ ˇŨbzÂē]MsH8Žr=Ÿ?J#ēD,BļĪ›§ˇ^klãnÜķךįĩŨ"mFâ "š8Äa”‰°9Į`GP ŸcJoRĨ&•ŅØ´Ų¤–WRĨ%}Ęō2b@ŨŒUŪÛJŠH‰ˇ€ƒ.ÍÅÁĀx=Oˇįš[ũK¸î.ĸ¸‰ōŽĘ‰;˜Æîõņ>Õ h0Č&¸xĖĒ_Ëj†út_Ļq] ŨĖ}‰cEghmÖɘŽâ¨Ē~^ŋ—zothĘđ/Lƒ×¸Ƌ}>(ĻĪ$­°€ *ŠĀ#€ĮZdz<1ię×RN¸ˆ \s‘†^r0(͏ĩ,Cwc ܗ>lŠYˆ€Ár /Žxäw§[ë0‹Qįŧ&,1‘ĐuÎ=jX4{i6\ģ\î8vķd!ŗ…Æáę )ö"š<=d¯œ6Pžøā`ž€PÜ^áī%ÖŦŌĖ\Ÿ=î^‚0Ĩ‰#ũÕ& ēÖb[iÖ™gōÛaeá\ 0ĪŦMRĮČ1˜Ë $į79B„}īîņ˙ë¨F™ĨKĻĨüа‹Ę7sžāŦ āō~füÎ:ĐšCŪ5l~Ę`o˛˜wŨ2ÄA;Ī'wŋ֙¨]Cc–XäpÎ#0 Ééßüæ-ėžČ-™‹ 2ŧ ô,==i÷֖ױtrˆÁąŧŽčx"§Nbĩå3#×lŪtTŠáÕäHÕöaIa‘É8āvëõ§Ī­ZÚŨK Ãpˤ(!AĮnķœüâž4].›ËvoõŦ+’3OČzT?Ųļŗ__ÜÜĩ´‘L¨ŖžP9=š§Ĩ_ģr/ :ÚY] n  .wĸ÷n>˙CīéNMv÷FbœČ”ļlĖŽŠ=ĘĮļqšI´Ũ!fŪ'l…)ŧg’Ēs“ūé˙Š•´ũ2‰j’mf ä:žâsõ4{Ąīļ4ųŽ ēk É."P!ÉEÚŦNcëZk­Æm,gKVŨ9@¨čvā3dœãĸ¨tũˆ# ˆåŠũŪp6ŸŽúbŖŧ—KŽŪ5ŽK¨aV’5 A‘¸ãøš?ÔŅĒ-Gâ˜&–ßũUJŠËŽ@dFÉ˙X?_jąoĢE{cep-~Õ3FQĻPSÉįž9P3ÁôŦŖė1-Ž™äĸ$ŌO.ÕUWČMŧOÉę8ÅhŲO¤ˆb´´1\:Cm*ė›”cŒ•?­&•´@›ęĘzžĢž­-šZīØŠ™<ĀX1s÷qøÖ?öė%×ņ€Ä‰rv’€qúh?#[r_éĶZ6Ŗ5ĩ€¸y㉤Fåļ•,ĀqÃnĮq€1…Ž_3ŒņÁįĨlÄāĀį%qĐûŠÉĶ.-'ķ’×G!mBn}z֐âķ €ųõŦgšŦ6/`¨ÆH@ŖcžhÎ* JP1Œ~Õ-”ĩ&Ũ‡=5ĖĻ|ÉŪūBēģÅßjĨ?ŌšDR.d'ĄĮķĻ€īŪ2ŧƒĄŦma.Ú(ÚÔÍšfBË]Ė™Ã›Ž‡?…t&21ŌšīģÁ¤™cq2FŦL…2ĨĀ#pädf”7CžĖįÚĮV“M6íhųVP›Ēg“XkxŪ?´‰CĖŋęÔ;~L‚8\˙úΆåÜ]ˆí|6ĐØKȎ#ōÂ@<ā0įώŊ\]>ôØ?ĪĩHÄž_WįŒį ŸĨQk}ÛtIv#;ö“eGī@$qĪ0ŸÎŦŗë;!mˇ ‹xŲ‚4g,2+g1cž”kՆ‹ē&6›Č÷+*3e@‹iSŒœœ¯@`1Í&ĩeöØ#ŒIad™Wz6B22øTÚ?ö‘´Q}\(ô™vnû€5‰ai´˜ĸĨ•×÷hЏ—í×ßō¨ģæ+NSSŅūĪmæ‰EšRĒV,pÅÉÜFėũâ āãõ­ôg­ËÍgä 낂h¤„äUP>īO”{ņQŌʉõØÖHZ—aÜĄIÛÂvP}ĪŊg ¤0Ļ&Y ¤ģ99āû/ōéÕŌXk3ÉŅ™Qä1ƒvr„Ģ’GS†\ö§¯VF› %lĸsÄŌ‰[ĖÛ!õ#uÍXÚ@ëÛúTZYŋxĐøTXԆ^Į$“ŸÃm—(AãŽÆ°–ú›ĮačÅĸŒ€Ø23íREœGÖĄ€¯ˇŽ8Šã_Ũ23éÚĄÆ]m۞Ŋë”o–æEÎyŽžān…Á<ã=듑GۛĐĶĐį\žEdk3 M2iüą)AōĄäH>Ų­ÉGšÄ×ŖôŠžŌdX,á¸įŠ˜n‚[hafŨŦRU.<ĩo,ÆØÉ p:gō ÔgXƒėŅĖŅLwdeb=”Øė9Ŧž‰`y+ ĻéĪsĮ RęĶLŠŲ"h÷D(Sōį Î[§Lũ3[ŽVbų‘fk´X]’$E(ųˇé’?ŊÎĢfĩ­´Ī•y |šUP ''Ũz˙ZšXė&'6ä å™%—wę0?*kYčĐۖhė„0š›nÔl įž0)Ģv~Œ­6ļaŧ2´2-´hÁã%yĀ”“õũŅĮ>ĩ&Ą­îڐÅ$rBŌyęG%Æ ?2g8ãŒúTŅ&‹`ÛĮ§1lėQŗ@ë]—eųRĘ‘eŒ ’Üy<õŒTŌkAíob*‚ fŪ—11ČTā…Įa×Ôpy5ąw6ŅĻÛ(¤ļÂ6(ž=*ÎĄcioĖpEq(h㉔|ÎŨ$™Į>ãօ(Ŋ„’ģbčWčë-“I,ō$ŗaĖlË´HØņŒãf¯ßJļļ’Ü:‚#Bį$(8ęxš\ŅŨ@ĪÅäĄvā•œ÷įĩYšˆ<¸ ’:ä};Ôŋˆi{§/˙ š†wXaUŽßÎmˇ1Ã0a‚Ŋ>CΏ隤ēĮŲ&š>ts”JÉ(Úķ ôīˆĮâ+bÖëJ”DmüŲ!Q"ųv•ëœuöĨŽûHe]’.Įlb#ēõāe“ņČõ­4ėeŽ÷3âņ,o|ą˜íŧ–"ēÜdœ3žĨ{÷¨ÛÄßR¸b*YcÛ%ČP›L‰Č“´qî=j÷öļ“ą]eÚYL,ŌÛAÆÜōiëĒéÎäÉ}‹¸ÄØ;†Wœsũ(ͰkÜŽŪ#_<¤1ĀSĪ0€gUeÆė–`tČäS4ŨwËûŖ31´(.I/Î1Čy9īMģÔŦî㉠1ˇ.ĻI:H¸C}ĐzĮŠŅ‹QĶ˲A¸>Õ"69$ž˜ĒsôĸĘÛõÜĘ:ôv:…Ķ?”ĶŧŗF7\ĸ–AŒ`všnô—ž „H‹*Úŋīäš*ŽÁFÅR$āãũžõv]gɃP˜yãxZ6É1– šēsŗ#§Nø­ÕôØäōZFŪ¯°‰Ī͒8ãžAéGƒæfŲxŽæ…6Û0a´˛Iœ/~ė`|ŧ΍ŦĢ/ĩ¤(°Ŧ.ī ČĖ7X¤dšöåÉ˙vē5Ģ;}JXd‘~Ī_3,o¸Iŧ ŖŖĶ÷Ö´Ã0MÆKygɅ;KsĮ ũ9éKūŨŊĘÚą>Š<É+C´&äXÕÆpH-’0Aę>ĩ´w@ÛU´Ë˜níÄļŌŗBä팧Ž8Čp+ĩ‡ÍÛ„÷ÚÆĐØd9 ŽŽ˙^ŋK^Ŋ1ßüâ™jŽZ\÷ÚÃ#đ?ĘŦ"ínÉëøTXĄ’‚#nüÕĘ]|—Ų8ĪLW^ˀÄöŠåīã"ķ§ÍGzįŽŨ++[ļ’÷Išļ„¨’U( t­IIâ˛õ–t˃jģ§ōÎÁÆIĮozPč9qĸLmĻŒÉ pĀ„ČR8įÜ~UĐ>}žuĒÃmũ˛O?6Hį…ļĨki4q%Ėq*3ŠtŒl˃Įv“RB5oídųBP Ė`ƒß=H?á]:÷0Ķą ^2+ĐŅ2™ˆ1 Ų9<ũ뿤M>Öäŗ[Õķ ‰ũŨÃaB ŽäîPO¸¨"‡^ؤŊ°Ų˙-cĀ>Yųˆ'ØSūÉŠ¤âaĢ–dyŖÜîwgˆØUŨõdéØĩƒrĮŋŸtA\ nŸē­Zœ6֑6Ąx‰$‘ÕJ`ē ?.: <ņ•Ŧ}&=Bé ™fš‘CĄ•%œ¨Ī\Q†Ķĩ^ƒLÕ#ڈá  öļ\\60¸^§îĶĨ'{ŲąĢ=ln9æŗ‚&š›t,]Šŗ1ëĮŊE.… IĻYÖx‹“28 áš ņŒÕBįIÖ&’-š†ÖKuĻŪ‡áŽŅÁÜYNOMžÂŖ}ûvō–ČDcAq!•p΀íå[žŧã $īsG&Õ­ĄsMŌtčĩÄhōÜZæ(LjĶî…üĢjx™á‘JđAÁũ+ EŌu)ËK{ŽČƒĸfC&ØÕ9,+ž=kĸpmœtëÍ)=w¸ŖļĮ7iá¨leŽhžâG„|‰#Œd.ŅŅGn*­‡‡Ą‡N´{Á2Λ"˜DåüΏ0pËō'L`­C‡õ[5ũĪ—o“mÜŲbwwÛčTö9^Ŋ _ÔtkˍIîb1°>PC$Žģ 8b0kO™ŧ„—Ã6Í7܅ fÆ{vŦûÍaš×j!U‘ļČqÕ°}ČÉü…M‡u(Ž-ĨI-ą Ģ‚Ė͜.ܑˇ¯ĄîyÆsŖsĨËq,˛LbËĀ#áO 3ķnOåIÉ­™pŒ_ČvŌ-ÄŦAžS•Æ bx8<|͟@NhoÛdĶ* ŋģĮöĪją{ĸßîĘĩšķĸ„%†]ØÁĮũĒ ]öÚ;Ä3„ÆB˜Ų‰‰~F{á”ĀiŠiš k°\ø~ŌîFy¤š%™Īā ŲĪķ4—šNŸO-ŪɉRK(įŽ2Nsõ#§ĨĐ/<¸Õ>ĘŖË(Uw Vųܤû­$š$íŠVą–cēn1ũᚯ™?#jįÃöģLņyčā´ĒąJĀ$1Ûé’?Hūŗy|Æ3ģHw÷wO_î’>•ƒ/‡îĻR ‡a<¯šã`ũær0ę;}Á[zs^Úĩĩ›¤~Dvā4¨¸ÚųÆcÆON1PīŅ”­Õ ¤Úi'3Y3 !ŖēåŽ: ÉÖn†›=Ō¯˜bRÛKmĪÔãŠ×ƒõŦ­Rhb´‘îJˆüû†F:r*`6rˇ:â›fI-c‘Iuq,Ŗ'øpzãđĻÅâ× ĸW÷e‚ųųÆÕbpxįŌ´昨0„.ŒãœãˇĸĶWSŌÃ7ĖØ“äļ9'8ö9ũkĨ[ąƒõ3ˆÚXķ"D›$V&)ōËđI_XĮí ’Û\ xņ3B<Ųß ō’c%8SĀí&Ĩ¨ß\ĘęÖr8ĩžO+ũ BîĻLwÜ3ˇž3ēĩžđĮ¨ų8M˜š?4xģ­@ž"Ž++2mާi`Ž`Čą¯ß @ ŋåĖbŠW "Ĩš9ĘĄ ž:ežoö ę㑕æ‚IúW5iĢKylm­Dv¸c9”Ę +)8įpãü+Ŗ‰Ęöčk*ž†”Ë …’)9 œœôôūĩ*¤‚:ķÁ5'#i#“úÔąķužÕĩ6pkŸ× –ōÁā…°å—ĢŒŽzfĻÎyôûXYc…ä™ReI—wĖÖ ~ö~•a´ (!mípP[1$r8䃓Į°¨Nvđ˜žXË9Éb펌3õ€ú-W“Ã×.% m˜ąÜCšFP<[5ԟ™ƒ^EétÛû<ō‹‡`Rä°uËpIČ=N~H§Øyˆ@qąBŠ?9¯PzaéUƁ3**I [gip#?Äęۇ?x`Ž} U Í6Él6‚ŋę2šEš¤ĶåÕâ"ÜJwBβŽÔĮHį’ŠĶC_ ˆŦŲ˛y‹„@¯bįéøÕĻBä’ūŨ 2§1ō†täîã”8'ąéVNŽĸÆŌĀę%HŪ4Ũ†tųyĀ=°ŧûūZ+f6ä÷4-4Ũâå%ļŠŌSW ą‚§ƒ×¯&LdƒõéXš~‚-ŽÚOļM†ÁÄ_ģÎߒ#į#Õˇ ;[j䞜ÔKWŖ*'9ĨŲhͧ<ŗ[[ڋ‚đ‘$Ŏ‚~a“ƒÎq×Ūώ´Ķo%šUĩ„BĄ‘ÜÉË|į~W°,§žø5GPŅ'0Y؃,Č×nŌ8ˆˆņēˇū…×ß§u<8ŪUėrŨ°K˜Ų€S.Î9Ī8,F;ФôՊVæ|ĢAž^ÜZĨŦА­Ôc*|âãięHØéRC‡qh5Ŋ¤C~ØƒČšļČ@āįxÍB|6æMÍwĘĖØ„c~į`G?(ˇŽūĩyĨ]Y\ÛyqŊéæB­ vĢ‘bœ:ãŠjĪDÉÕkcZâ ]E‹Ę¤ų¨ œã'ĻY‡§'֕!Ō ž’­-ŖH 3JŦ›W×åuĪ|wĒ)áID ÛA$ˆØˇaÕĀŨĮ܏\bŦ_čm+Ëu%úÃŊ÷xÆŅōÆ1÷‡üķ_֋Į¸kØˇö /ĘcĶŪ ųŠpÅH õÆxô¤¸ĩđ冪 ÚÛE(Ļ ŅąŽ~bzv={ũFiEŖĨύ¨÷ņ‹‡•fHüķ`ĘHÆãÚG˙˛cDš-íÔņŨĪ~éQ "nA< ‘ŒŽXf“ˇqëØ¸úG…Ŗm™ˆģ˜6Áĩ[Ą ô<|T/ĻčÜ$0紁É`7FÁAéÔ}ŅĶëEæŒ˛´ŌK~¨p“š%d#ÁĪPF§ŋsøbYāA–1$Ž?r ŽũÜ:āšü˙4šë iö(ŲÛi7"0‘ZĮæģ*|ō™Įuųk]BĢļ;cš ū–;õžKĮRåÃŧQĒ2îg•ē¯.AĮZÔōÕFÜąÚ$į§ųkŖ. õCĄÆ ƒÛ#ü˙“W")œ‚>Ū˙įŌŠ ČÜ9ū ĪĨX*ÅrÆŗ,€7!!€Ŧ]mW Đs[ŋ}w7cž;Ž?°õ””āáū´ t„\ūģ4öútl͐dfLrOJŨ˜áz“XzÕØ˛˛ķË8 띤ysëĶÖĸ„ļ9ÕÔ5gDs†ūøĩ#ûØëëōj‰ī5Ti^Ū …’l†oŗã?yW9éÁSĶü É5iîhUeÛį…Fų@UČë‚r=y¨?ˇ¤I┝đ4`ŲĐÛTäņœäũ1Î+­'ØįmwĮŠZ[Į-¤ŗ°ē™ä˜˜• Q‚pú;qO†ãW&m˙h(!Ü0ˆ8Lcą?|}âéüIä$nBî<Ā1ųøōĪéQŨx‹ožŠü†T 'ü¨”Œū™ėß@ē]G'ö‚x‚âFŠä@ō,9N ˙9É pF;Õ#˙ 'Ív$ōÆGînÃįšČŨŗđĢíâUŽiUí”ÆģĀ)6KmcŒwō~⤗WI4ŲåWō&ˇoXŨ\•ŪW ‘‚:tĄˇl8ÅIōĻg\Yë2­ėB D3ĢdîŒd6î=Få=”ū.–×\š˜Č!JÍ yéōeXyår‘îzžN„zîĮ ĸ;ŒØĩ×úĖ;°ĪĘ'ŒU8uؚ˙ĪY,ŲÅ˙χ,U;z“ßĶ“čKI;6Y† m¯Ŗ}¤ÃįŠĮ2 €dÉ^r/—¯^ž@6sų×9y¯]XßÍ‘mPɉg‘•JžlãŽCøõޚLląÍDīŖeÆŨ9›YKĻ•>Û$fåūV–1ûŋ5O'ĻÍãzqRZ lMh.ÚéUfF‘LądŒpy\…>ŧņPÉ≠Ö/ĸs ‘#*2BˇČš`:Ū€õÎ{”øąšßf˛o‘dŧe™‚åą€>^šā*í.ÄiÜuĀÖTŲ´á‘A2–#–ķ—īr26éíŪŖĩm{í6Æf” ’?;÷¨?ÆFv”‚zŒ‚įÄ'¸ž;ˆŒgĪČ7ģJxbQ˜CíRßkËiĢMq…’5Qå/ÚY šP0Ių°O §gØ.ģ’^MŽ›Ûļ‚;Ÿŗ†QŽXųƒˇ$Ôēyč*ŗqå-Ė7ĸtrXÂûÅÁ<wƒßž3SÂVÍ9ˆÚژˇ• —$ąųä@@Ûë¯Filŧ]ķ[ŦŠk NX4†ã b0ãˇ^{āqÔŌ÷—@÷[܏W‡Z:ôÚ|W$: WI‘sˆädޞέ[ë˛4^Ŗ´0<{“˜†•4+öˆí#tŋv 0D_|cĄũM$Sé3Ŗ‰ÕœŦn!ԅmÄãŒî}jtĐ M×W.ŽŽŦ ŒüØôĪĘ1M>ĩš/2Y.$I°]X…Ū0¸Ü01÷Tö9ĪŊ;ÄV‘ęE˛Čđ}˜:#8ĖG€Į’#îˇäjŅ—I[f'Ęh!qQ >pääācš5Q|:—?Ú$š_˜Ē8‘ uیž:䡧ZxŌ­ ÷Ļk––fŽfcÉFа;p>éëĮS|Ŗ\ȔëT*ž\؅$ŦN Ÿ)Į=jYĩÍ.ŪM“IpŦ@oø÷“‘“Œ9öÁĻ'‡-l pmã3ŗfëڟ'‡ôöP¯üĒÃĩ%|ÚcMŦsųŌ÷ī u}5¯Vrâ2Ū`X¤c•e``€[õãŊmɰ‘Ī­cωk$ō×Kĩہ; đíˇž™ôī‘Zī…bĮfĻVčToÔÄ7ÚA–U”¨œIķ7ŲÛ%”qÉ#ņĸŦhˆâ•rv¨ũËc ´ŽqŒ|éôÜ*&Đ­onnf2]Dí&n*Ąƒ+er;āsĪzĢ'‡´ÔšßhŋķŧĩųÎsĩFH\Ëü­=Ō5-˙iZļąsm3@ą,Ë ƒy6Ą ž˜ųöū\튭ĢØB-š;8Ž`œœąųK2€j˛üĆįšąqáË{ģ“,ŌÜî3‰ö‰pģĀP1čĸĸo[4Ã,×rE:i3ō‘€:vĀÁ1žŧŅxîņ;ę 7rÄĶÛŦļÜČrŊ[<Ā};âĢÚßér_\CۏäˆĻœ•,xŽŽŋÃPęÚĮ`ĻÚKËĨyCĘ2Œ@ØU›n%†ާÜPø}Žl^;šeFwO .˛āwÁ,OSĪJ^í¯qûרuŽŋĨ\é˙lŧ åyŒ$LíRÅČČ9#ÔúRϝáŌ„¤ŅŅBpÁģį?™ėi!đŦ) ÂŊåˋ™ƒ\¸ ‡Q†8öÎM2 E3\y×÷Íįĸ¤‡ÍQšWąÂũ3Gš}Ãß-}ģKtjđųŅįĸ d0\gŪ#§<ûÔVZ•Îž—7>R1XŒØ.ŠÁO­Æ3Ûŋ~ĩķAuwæFsūąxo”îûŧũĀ}:ņKoĄ[RŨyeã˙XBbĀ\eG÷×ŊÛnņ<÷š0EswĖžp`ŸÃ´žsŽģA8ęFMhG:ŨF&€—ŠDܤŠCČëX‹á›T)Kr#x ĨCtęˆôéÖļ-4øtÛ{{87˜bb—lž=k9ōÛF\/}I‚ƒÉqSBĘNä{{ÔJ“ģ'¯LTņšĀéīYš2\pNGˇŖæÅū¨ĮҎí2|ØpyãĶ?ž=ęΝĻßÛL ķ ĸ Ÿ$ŒÄüąÁãkzüÆĄMST*|´`D˜­H|qõ ĪlķV-5J{¸ a|1kgLĪÎOMĒķ×&‡Ė%ËrƒhēŠÚŦbxÃ,2ÂY>ūéüE”ŸBŊéō藭+•ō|ļ\&|…Û"÷OA đÔ6÷:­ļšĢonQ„hĮũ ɐų$–b:’ãiīVíu{ņ|mŪ?4FĨY î•Aä÷؜cø‰č*ŊîîēŌî5+•­œÁ×loÂôöČÍ$zÆčäWƒrˆĘ­ō8QÎ0@Ļx¨o$ŲHļļķČūlĄĐÂÎŦ›°ĶÃg#õŠc¸ÕQ¤ũÔËoŗ’> RÃ<‘ƒōŒ.0wTŠIĸįX“PĐŽŽīŽ C;™~āPėŒĀėcņޘ‚Y‹mÜ{gõÍrvˇÚĄŋŗšē˛š’xãxĀí ¤ąs€9R1ĮcŪēîZ?™6šÚX{RėŽ([Vrwš>Ą=ä˛ÃäF­;Igqõ@…˙ĻdãũŖE΍Ēļĸ÷QË C o3ÎpÁ†nŌ8yęiךž­Ŗq†ōÖx•\ŲČę¨S$å~ö_#ÛŋZšūy$Xˇ0Ioļ(™(ų9,:Ž1ƒíڛœĸãÍØK/ôčėėĖhûŨŒÎäÂí?0-Œeŋ‡ũŽüšÆuü†kf†[˜cC 72I\nčH$ĸœcšįÖĖW×ÖĮ č×n˙=ģŌg`=žķü܏– æĢ 9‹Í¸h•¸˛r ™SΰĮץâ­)nŒŨļfŒZ^¤4ũZÚc ‹Æ “ŋĘHۜ‘‘Đ7ęi#ŌugšYËF ŋ˜SíražxÜĮvAĮ÷Š.õËÔÔ¯ ˆ+ÁÆ\Zģ4jʤ19œ’6đ{ôÍCo­ęRy+1XčhÚÂCąZ2[œã{~TŊíÁō‰ũ‘­U‹í*Œ`)æyÎØũŅM¸Į9m¯žŖŸJWĶ5™Y“Ę'Û%8!Õą’Ŋ>\}֖•Š™4$U‚Au ˛nŒBãæÛĀš==M"ŊŨĩĸEŧEšX‹dr}ø¨u$™ŦiŠ+ÜČ6ĻWųLØ@§íR€¸%>ī9¯Q“R#PŒ´B%—!EÔ •2– ņũÖaßĩO¯Ü\˙`ęQˆŽG "aã,ão9äôĒĢsk5ŊŊĸ3ŖNëpæÚf Ęí+¸ôÆęIč Z“jærŠ‹°ÉômnHʙâ$C°ŋÚdÎī/aĮËĪE?u60KkĻXÃpČ'‰\FĖW#¨æšIՓƅ —Cs§Įō,ëąp!TŸĒöMjƉoEh‘"…EQ¨ztũ*enɋ¯j)§Ä-āg[ëŖļßjƒĩ‹ Aã™:Ŧū&ąŠŨ7Į<ĄŒŽ>EUwœžxȌã׌ã5ĄĒCb×ēsMg ĖōĖ#‰ŨFcĀ2:‚ĒŪéq[Æ4ëIZg̎U!ÃsôߟūĩRå˛ē%ŪúO¯ÚÚGMmr‹, ;™1´`RXīT¯ĩšâ/5Ŧ1Ŧ1X‹ŲRáHvROÉ×ål+už*ũŨ†”îÅ ōy+D`F$Į~é;F ÆAũi§Áī>ĻYņ&…ĨĪwtæņšfØøV`v‚AĐķß÷̝âÍ0ų3˛Ü,nv˜NėųžX9uĪz}*ĖZ‹3IēÍ7 Ë6âpäíÉ=2ú† ~Đ>Õ<cTkuMĖĖ@ä–9ë–?Ž(nŸ[‚S{ÜxËGXÕäîXVR†>B˛nÜãoļXU›­jĶOŋU›ÎhŨФA‚—l)-ŸöO‹áī´Åcˇļ2ŧX$ ”ÚŒ˜P??S˜"ŸDÕ¯äŽ}9‘ŪŲe™+˜ƒeA zÄgũ).G˛Ė´bßë1I›‘–+‹÷Õv+yqŗwu•1× úSôũzĶQGwŸŗųŌL" €`'Šâ¯ļ ČÉ,ŅØüˆžKeprFŪØ1ãŪ–ßGŌ-|Ķo0,[˜1¨įÜ/¯JļÍsū+I-– ¤ķmŌãæˆ|Ēä…īÉ$t÷­ëMBŌõ¤‚ŪęĨƒUFĄÉ>‡ƒU&Ō4ąkøëéM“ĻĐHüië‚Ādž<įĄëHüŽ3ô¤Á7 Î*Ō¤ÖrĮ)Â!ˆĪLsZ7#į5ŦEs6™s ¨O>HŲ{` Œu¨LČ]¯ãŠčę2Ņ)‘06§8n˙(㎴áņ˛5Ké×Ë`Ę^ĖXvį–ũU—L×~ÅyåŨ•¸–P#ÎBGŠĀo‘ŸĪÁHkĨđäWąčÅŠ–7yv Ëæ0‰P[žđ¨íŊʍ¯ą[TŅFą¨YÉ$Ė#ļ,Â2ƒAČ9ųOˌāõ8Áæŗ đ|‘$Ņ&ĒK¸.H…ARČS 2\ū'žMix‚ ×ļ2X\ÜG,Yo*Ēd$Œ|Ė1ĀĪÎ+;oˆįģ„;MkʁĘ˜Ēė‘˜nÁčYW§QžõQnۄ’žÄpøMŖ™ŽRESŅöe*Îe# ņœĮ§J‚ÛÁ_gžÂįíy’ÚElųŦ¸īč‹ĪģôØäņLKm+-Û!…¤™Yĸ,ŽÆFĀãļwÆqŠąĻ>šĶĩŅŧu‚ÉLhDgĖr “ģ?|0aŒc§4ۗq.^ÄÚ/†.´cēÛP. Gį€eÕwîQĪ˒ŲãĐu9'Hé˛*Éū”ÂYCno,eōsúcjæáēņ] 0]\l„‚3ē]ŒHČĮ˜q×äš­­ķS”=ŽŠgrފdí˛ė€Ŗ…ĨLâŪ­• ōč8í$˛ĨÉS¸äā‚å˙ÉĪCá įĶ…ĨæŦ’ß8ەYAÜíķ|Ü;Ķ­uŲeā÷Î:R1*€€Ã<Åg8ėTŊũÎ24Ōy­~‹@ÂÜ2Ŧ đ w8˙wŌŦ?„¤’ųnäa–áæm€û΍Ž Û‰Ž´žYI~SÍ@ĖÃ#8đĢö“'’'=˙ħD–Ķí—–áež_$åÕX79oŊžsĶž‚Ĩđ˙…N…wwx.<Ī=BˆÖ=›pĖēžy¸ŠnĩšMąiË#­†x\ļՐ(ĮŨlõ̚vŋ'Ø­P‰üۈüÕ)ĐĒŸ˜÷<}G\øĒÉ-.š! ‘"Ēc$’ČxįąũĨuÛûĻķ)˙ÂA¨}Ĩ[ÆĘÎëģːlÚ¯Ŧߐ÷Ģ/­j0ØYŨ=œ•AtEv`Ė qĮđŒžíÚ§˙„‚Ú8]_͖dķ2‰3ĩöc“×<_jš÷^ą°™’d›zĸ>R"s¸Ē=OĘN=ŠÛûĄ3*_]F— m”sČR€sĐ}üŸ`~´īíËŖ*ÖÖÆVŧH ”Ë H>šÜZŧÖ͍ô‰2 Ķá‘b/ÎāLfLlczQâ--īaˇ 9’BŖo’ŨIP9ĮĢ֝ŋē+ų”aņUüö/r–pĒ-Ŧŗ’YŗšN”ķ’Oáj–ËZķ´f‚+‰~Ú_ä7߆‘‚ō@Ú§ŽØĢļŪ+ĶDAd‘Ų„BWa¨Áێ<īĩzĮUĶuY¤ŠČ™ŧĩWf*vŒį'Ôsô4ĨļÖ*ŌN÷*ÉŽ€>E”ÃŊ ËÉ;sĶĮšÕĩnāDQŽ>b‡ ã֗ˆDÁŒī늙#ØIQŽ ŠČŌN6Ņ VYT‚ŖŽvĶwÄŒ~œ튝¨Į0ļšKI–7P[æMŲã‘øņYšdڎŠiį‰-OĖFÖVSųƒīéEÖÅ(7aļ#Y^ŧ"VžÖÜį¨v˙:lēŸüKėäŽ^¤Čۊ’Q~đĪëÁĢ–úŽuą]ÂÖ÷•ųˇ#œ˙ ãĶŌ¨Ã¯EpslŅØËpöŅÎ$ÉÜš\•Į J‘×=8ĻŖ}‡9rŋyRöÖ'‰ŽWkEÁģ‚I#ŸMĻĢŊûÂŌ)”[…rėßv=ÁXzu#đ4ķ¯iŌ[HÖˇQģ~đ2ŽÜŠ';Og§qÚĨ:֑ šy/#EC‰2ęH=šåũō})¸žÄ*‘%Y$7īyv˙ŽVP1ˇĻŅëĪ?Ia{Ÿ4Mqæ0|Ũ•läíą<{ ŦúŪlg7wÄ#”ÆĨI9PĒÜđ1÷ĮLŽAĪ\Kw­Ų@Æ4ž/´ÆčĨ %F~PyųÆ=ČæŽGØ=ĸiŽŸWHîî`ßn†0ĨYØāÔ°öãŋqÍYļÔĸēdĘÄär3‘ėzÕ!â=g nĪ´N rF:‘ŪŖ›Ä:2Šßw~c3#cŠuĮ\‚1֗$ģ Î65Ræ-ŧFqŒSŖhŲs08Æ8˙<Ö;ë:Č k–ÜëŠUŽp„äĶôÍgJššû5•čšWÎTÚGËĮ=ˇŊ.Û I\ÖÝ{ĶüŲää¯ųÍ8í8ę9Īų÷¤ÆĀāĐVorËCdôü)0qĐgŋni¨åēŒĐ{Rž‡ō<Đ#J|™ôŸ{\@đČģ’E*ę{ƒÔV”ā–ĪjĄ:ää}+(ĖOøGt”-„*c€GÆ*­Ūƒ Ú[úbŧnBŠOp3Ī ­ĀĄžë†ÁÁÅQՕ P$ˇ†`šqŋƒōƒ‘ÉŽ…)t'–7ÔŖ‡ĸO3˛BĀ/ƒŽH~ŋRŊKsaĻ_MđZãfÉAa÷72ôé÷šĻ[qpZæŌâ#ųhŅr­ØAÁĮ?1QŒņÚÁunˇ0šadœ{dų§Í!ō@­qc¤=íĖŗBÆf`’o.F]vp2ŧdv¨™ĄĮ9ŗžbŨķ~ķå…sūĘ|VÖs,ī2ŧ{ˇ ™SÛĪĶķ4“Û,7W%ãO60™÷Ačr=øüŠŠË¸r@ĒžŅžŲÚ08E!Ũ˛Bėy?ôÍ>¸÷9ŗiá.Ök{‹xØ<%L`ģaB žŸ3Š&Ŗ7oa{ĸ—Ëu‘r= ȓ̀j]*Úm>$+{wb2‡Ķ#ņÍĪk’áÍsåČeŽG­HŦP ĮØâ ųˇck^jĖxšQƒŽ3ßŊ!o#g[­šYô8?ũjĘđÛnŌG9>i$’yák[Rs2:Á,Ų_šËjį4[‰4Ø^ŪâÖę0ė ˇ”ĮœcëÚ§ŠŧéÉ"Į‰` eÂ2Ŧ‘Č6ļ}sũ@5-Ļ•evdx&;†Ā“’@+ž gŽ2sQ]}Ģ\š(b‚T´÷ģȸŨø}ëU'ĶnāÖ;‚kÖo.ŪI2Šá…^Ÿģ#ĶįëŒįHjŪĻut„SÜ}Į‡,´øBËwt°-˛ŧĢū@Ŗ?>}.Â&¸ššūæ&…ˇ[€Œ\žWåų˛dqÜaˆĒC@ÕÍŧ1ĩ)˛ÄWíüÅ][<¯(ztÜz÷•4M@]ÛÉ!IŖŠd+ŨKÆß3Œãœ@3×g8Íkī˙"ėm3X–xãÔffmūb$Ē06ųMÁ\˙ĄŠqáëk•™žIVi"X™ŅÆHVÜ;uĪzÅ}XŠęöKy _ĩ™Q@•ŗc¸0;Fs=ˆ9sIĶĩ}^™Ây^G–č/%‡ĪŪ¨8íŒqī/ɍz¸Đ,íŦ‹O$P"´2¨ÄŒ É#æÁįŋJĢuŖZZÛų˛\ŨIæ°ÆĘY˜ģHģ@\™‰ôÁ9Č­ í.úO [éņˆŒ¨ņ‰Í}ĨTį !āaŽMgjPéËą[c¸ID‰#¯˜Ŗ ä88āõâ„û°~…Īė˜.P;Mx$ōã\‚;åc‘÷ƒgķéM°đåŊžŖظšf…6E™r6žŖÆ:~UŠēf§o-•åĀIff+,sČJâÁ~@įtyúąün&x5XĨo*X–åįbķIķäüŋ.0ČúííIéö†ĩču̜œŽ9 įÛĨFā‚Wžy§ų “Į9Į48ÜŖĮnÕÎÍGm/…î_cN°z0x¤,:gûS™X8=sßր5§1ÅeŪĘvđÑZŗŽÄV]îB ČôŦĸQĖ gņ#ŖĀ§0y˜?Ū.yũjkũ<Τ5Ĩ¤~`i0ŧ~āƒ÷Áë•#×åŒÎ1ŽŧbĢŲiPŌu珙RYf$ĀTw-š€Úņ0“Áâo Åo{ŠspĢīp‘(M ¸!†v䏙¸ĪōƒRí腡w•Aą„›Īˎųöú×?o6•¨:ŨŨA§,î;‚š-— 2W§ČHúvÅnjö‹e%´›„oüQ‘šHäž8#ŌąĪ‡FC}tN哝€‚ߌ(#ũc;!kj9^ãî`Ņ­ĻHšßN“Áą¸*õ˛AH–ū•ĄŽ!§ŸŪ/•°§ŪØ cöíéÛÔËí6.Åã]ŧááSžE`W’št gTPčiĨoß?"aUļ.2#åPs׸"´ļäëØ˜ÃáÛs,ēr<$'–YFŽĐ¤UĀįļ*-:=W“ũŪŪX6`ŗĢ]ĒĘĀį‘—>¤úՈôöšŊ[č/IG™n‚IųgžāŠĪךĸ4 pÃO}AZaՈ(ōŧ­ŪģpÛ QumÃ^Ƅ—V,ÖÉ’0Œ .Y™p}9“ũ*4+›>keQd'*BÃāœrŖĶîûSSAhîĀ7ģĨÜ'ĀAÕf2ôĪ.GĐĶĄđđKiá{‡t’(á_” *yā‘žü){Ģf;ÉŊIVÛF™.^;;G0vtU|āo “ŸŊÎ}ę==|?ŠF|›{'2Ä؈ f⅁įĄëJg¸W[ÉÕąō6ķûÁ Ž›ŋŸ5WŠęNŊŌĒŖDĒž2>”âā7`ŽvzãŽjļ›§G§Ú˜á’gVr˙Ŋ‘†{dššU‰ÎGŽ:q\ėŨ1cįå<ķVA,̃ČĮ9ĪTŖ䐞šĢr8į=jP3qķŗ'ŽšŦËÔ;H<ÖŠĸ¨ŪGē2xČŦĄ°Ūį wĄÅ6Ļ[í×Ī!7UWn@TČĘöÂÔvÚ42ܙaģgĘC‹¸mütįv9†)úĻ•ŠKĢũĻ ŗĀĄ|֍—恀G8=xĒrYëą; PËįeÛp1ÕĘđ~Ŗ5×íš”–ģ’ÛIs$ą‹¸TbqŸ›8ū :sČΆĨ¸žK†’×tŽd+ö}ĀÆĀr܌ÆsëģĩUû>¯í*ÁrČsŅüÃĖ JįĻTœgßÚŽŨĻĨ6‰,2Å<“´ 6#vxQr2G\ƒīM.WtÂRrVkb“x~EyŌÚˇœ’ĸ–ˇ— €>oUüsIqáۙË%ŧe’PŠ‹?Ũ>aČöėęígeÛ\nŽeiQļŦ˛FTg')ˇqĪ\ôĻĘ5WNš’ÚiŽU%Y<Č ¯8aī ŽõIžäYv'ŧŅĩЧ‘Zߎe|d.F÷Ÿ§ˇš¨×Ãú‹JΘHnvũĸCĮ”čÃqÉ`ÔëVÔckųŌÎEš{V`Z!YU<°šãœļTwQøēmkVXĨX­ä“j† ,œaO—ķ`ž¸gųz´×6ĀíØ‰4}b+ÄĮ–?|Џ•xĖl‡§øMĸhšÅĨõ´ĶL`, ŨJ偌)á—yAí۟ũąĒ\\ĸŦOYK=„˜9Y3ßûʃ=ˇzRéZļĨ{Š[¤Ņ´(åÃæÆEŨōFĘĨ‰ų~ķōšMšXZ×°4ļŽŠ]YA TŒŒuŠã×GÖä´D•ã"2­üšgVVÎqĀ;[ŸöûâģYJíŗÛœ~ÄlŨÁq¨]-Ŗ,˛ų@ÅöYL įđĢķtÁšwč9[ŠlŲjio(pevģŽhŲ§gRĢ b1ˇŽ;æĒĮeŦā–LŠxGėË<äe†Uø÷ãŖˇģšĩŊ’Fãšáw §ĨÊ`sˆŲNčĨXŧņŖn.Ī“oˆe’5F†Bà å7t6ÕÁŪœŨĨĐWBEi¯ųkŧßęĘīķųÛĩÁžX’„7b;c™ā‡U†öÖR’˜”§›ē}ûrŒŦNNaSīHØ-›íĪ ”ą*`R/n¤œÕĩ—vՃá­BKæŧYdĨL›°Î藨cÁĘã|ÖؐCy€•$tíĪųũk Ģ3XģĄŒ@Ü•āƒRŖ ŖnvãŒŌIuÎũš?{ĩ><=?:ĪŠgFWާ­T¸SÚ­¸ųZ‚e}Ē#°3†×o¯­5H–ß&Lŋî ›NáŨyÎãę{S.¯Yg;$tW‰ælį<ƒĶ#"­ëš¨°ģ†ne#>íāà čzũ˙ŌŗgÕWû-îMą•Ŋ%Ú27‘Ž=?Jߕ´…¤Ûc'ņ °Ü´,ÃyÆ0b­ę ‘ƒÁŪéOOU˙G„Xö—ŸhËē§÷Ŗœí5muHÖęĪydˇ¸‰˜™*ې)$dw~ĸĢYŧųbŋeō˛ÆÛ÷0ĨqžŒãžjÕ쎿UžÖĻ§w,r*¨ û呃˙= ĪĸÔڞ˛ļm< Š-ûÁvģ8Ύ>¤U§Ô4Ļ|V,UwųDĢ၆ÆaėHõNëXĶfŧ€ypŨ+ŠF•eQļ€0W$ãĐ`З›ķãW2F‘Š–ŽæHel „‰œ¸`gh<ņАx†5VxmĻ›j!eĄfÚå‡>㌴ØĨŅធ{ˆ,bˇķvôVuÆ!‡āzŌ]¯‡Ŗ‡)˜ėHR1ų›ōųX㞙§§`ך×6ßGæyņĀ oâ?ŊæH¤0äām+ëVbÖŧ˨×˚“Ę!d‡.Ģ‚­ÆH^šíĮ4“ÃĄ[ŗ—hŒyÅ]‘[{qĪn3ŸjOŅįšXl^Ņ$ˇ‘YŌMĀ+î qČĮķ§îö {›rÉķ`ŒķšÄ“]ĩŽâxŧ‹–ō[ĘiÍÛwc$ũâ>ĩ˛ã¨đ8ŦKĢM]ÉöĻŗJŠō!Y‚‘†Æ}€Ī°¨ēŽWč1ŧAdŦŅ›yöɅĀ!'īgH‡§B})÷Zä/p“Į1HFQĘĸ5rzō0IüĮÖōtq{öQmjáŖVc ĩ1׸ õĀĮJą<Üūd†ÖF“p’O8 ~ė‚<„ūÕ~ībuî ×Ööō-@7–û§Hú¯—ŋ““ÃûqS7‰,­åd–;˜›av-6üŦ܎Ŋ#oËé‘Ŧ4šÚ9ØA!™<´%à Öā á° ~ûĶRĶEQœÛųmķw͒˜Î7d˙´Ũ}M/uôŧŒûÛûiæ´h,dŠbĖfV„+).Îw å“#ŸŽ*uÕDw‘;g–ÍŨĘ(Ü]×wRŨ@)ųšÛGIžĪ Ŋ¨XQXÎe °Y@õr9ā0Å‹ ä1EG‘‚–YXö’¨I ę€ sÆ1UhöilŲmnš Sî ÷ˆíĩ”¸šģ–HZ;ĸˇ0ÉîģHûĀä`g§ŊAoŦ+ÚĨŊÆ~Ôō<`ˆˆQûŲ ņ÷0yã5ĸöšt–2iĪäĩšÄmlįw<ķœ÷õīT%Ō´¸Ļ„";Ÿ5ŽņpĮkräą-Ī#ßôäšWaęihšÛt›‘ãÚĮ$‘#įie§P9Ģl2ŲQÁ8į5KMŗĶ,–$´HžVÕ †r™éž¤ Ę´@TcĻJÎ[čTtDAˇ ÚšõČâ•§@vŠX͆čqž”đģr#ŸZ‚ŽtD˜=jáy\Ô sÉäûÔ'%[=Ģ8ė9hi‘4gQō>bQ ĀŊ@Í`Ũ ;&0­šPW „ęā{ ßÖ´üYkpīc<*Îą\nbØ gAÉilg=+5|8–é$q]ČDдФŒ6áČûbēck'r5,Ļ—ĻL`…”ˇ”?v‚fųFål`FBûp;T0ézT˛ 'YŅNÉ3&AÁŒ„P:đ>´Û={;Ąp—q3$“Î܁Ī&?ŌžÚææ+ØŲ"ōf‡ËŒį<í#‘zmĩŗ“NčĻ4{>;571´N'Ž!#lųvôĪHüsD>‚ßiŽæėyxÚ ƒˇ2:¯o-?_Z…<=:Ë#[$já›ËRĀ‹!~žQ=šĢęâ%…§ˇ*՛͐ A:c{,WĖ‘¤š [XOžģXKĮ *Wtf26…Âķ÷TsœâŖÚ]'šˇ×[r€Ļ>G +÷zfG˜üé—úmõÄ‹XäKia`.¤PĨ” ķ`ޤR+UōÄënÅԛ÷Šį#`^:îįĨ4üÁú m.=KUžØ=ԐCh´Ä.֐yŠyÆ FéÆzöĨmÉuG‚[ËŠ%•KŌ]„)+ÎPŒ¯B}jė}f1p-ĻŪáĸáĮ–ÎÎCæÎūļ‚3HÚ~˛šģÄéAFä’æY„gdƒĄÆņūŦõ ėÃäm˛€¸?†yŦKKIn.nZîXĸš8üČÂĄ]Čr­Č=nū•ŋs­ĸ¤ō$’ų™TǓߓĖ×;ŽXj—W -”Îąũ™â.Z˛áŽŨÔzchõІû•-ˆWÂ;ĩ‘n%DbšP‘āČÜ{f1ĮšÅ=|0ˆWũ)™TUĸ\‰1ô” õVãL×Yd†SÎHkr7 1Ā™xÁĀJą=–¯%Å˂īLŽ6]:Œ¸áNyĪÆŽīųˆĶąŠ–ööļ*.]ÄN]Ũ°KŒ°$}î įŽŊk7û î5=BvV‰ÄČöîUvˇúĻ'ßæˆpqU…†Ŋ,iäė/å]2îũČS´âAģļGåO•5ÕK…ß+M¤‰‚Ųæƒũgcž”kÜ>DÍá†h$n‚ų€Œy]2˛)ĀĪOŪ;`PēŸleđ…a9C ™™ōFî™gT¯ˆ>Ôŗ:Üg!Œ~tex1du˙Žß˜ö§ŨvKŲæŠŽW`’<ą&FĀH;ļžwwh׸iØŌƒI-¤ÃĨ-ÔLömŪS!J2ē›¸$({晤hÃF”´Čą*$^VJīa˜äí8ú-T¸mj;›‰l­nwÉäļđŅ ÅPį98ęc¯^ Íviáyįx¯%åmW<`íĮīÁĮYĩ¸î¯ą"øwí‹ ˇŊĩ}—M/›öUgš˜Ģ6îHcėp1IaáįØķŧB0ˇRmāÁ1o—gœŦŊ}ĻZA¯Aw 4wЏ3Jsæ,#ÎėmȐqĪCƒÚKy5kŠe}ԐĨŲFØcVÚÁĮN6”ëÎWķnöÜJŨ‹ē?‡ŋŗ¯-ŽĖÖŽņF#b-Bļ*6ļ~Px$sÎOŽ€8ķ[caĀÉôŦ]õ‘ō\ėī>kM ōƒqŸ˜ƒÍm´dÆÄŗÅa;ßSHų mû÷(đĀôÁŖnŌHÜ}1Ím›°đ:Teų¯\PËGMĘļsízilŽ+.HÉéČĻåJœq‘ƒYC`‘ĘøĸÂæö;_&âÖ)Ad‘ĘĢō1ČînųŽoû+Y†H›ĖŨ°ĄÂÜžs@'Đxn›RĶL´ŅDėŌ(‹z˙Œpp[×]XÂÖ˛*Šh$ũÜjsÛŽá“é]QŊ´2všņëáĻØĶmÀc•yluéœĻlēŌjđ_°†Kˇˇ2¨ÎČØ>VOLā&}ņTáņ$ŅÅĘ@…Ũ’cÆW,psߏ­[ŗņ28¸iĄ‰Dq,ģŗ€„įõƒŸcéUīv×rŒmĒÅŖIŲŨÁ€Ø­Õ@Ī”Y°¸$‚dāuįĨ_ļÔ54Ņ’ ”šY‚IįB\ƙ#ĀÁ'ÜúR\ëwo,Ļ&TŨ˛$Œ2í ē=ä> û˛`zņԟoâTNIZĘâXÕŨæĢ3~čČsœs…?SMŨ­„š]JŠ­ë‚é7Úȑ|…ŖrŅŗęŌvū™õí`†˙G ļPCi6O˜ŧ¨É9(ŧŽÎ>ĩuüE C#‹ §hã‘åE vm,9;ąÎÎ{ŠĐŊŧ{k´¨:˛ <ÅŨ´Î8ĪéIģnŠŠrvL‚ûYŧĩŧ™aŠFH­ŌEÍŧædÄ0Ā@oSÛ­Wm{SūĐŖ(ä.áo(Wũë mŲ;ˇ đO­^žÖ,ėl!ē ,°ĘØS9éԁøu¤#„†iôëȂMDȨæUlã~x š}ÁĀĩ[ čõfœ"āÛŠēbNå…Ë/ļ ˇĩcë×6fÄåd›d’^_,m8%TƒÉgļkr ģkČ\Û\E2Ŗmf‰ƒ€Ã¨Č=ƨęW‰gå7Ų¤œĪ2Èöį-žNâ=?Z…¸úĮöÆŖöCk ÂV2!’q Ū¤“•^]ޕ>Ē kj–‚+PB@ᐝ›Xãŗ=†0},K­;É ŠŪt_ųnˆYÔŗ! CuÎ:ú{Ķ—Ä6w)”˛áŲ,™Č&/RI—éĪĨjöؔüČŽm.†Ŋ ¤“‹y–@ŽÛrã‘õÅf7‰åŠ;†-jDAö‚Ī–o9“ŽŧciĮ¸íĶBĮYžkŅŠ9&P‡ÉÉØD€.wuĖ}HõéVāŋˇŧģ[{yŪZ6•)Čn˜ų‡×đ¨QåŨJ|Öō1‹ą+ ļ†Ųy䚈1ŒâPā&´u>Ÿ¨5 ŗš1&ørp¸í°dįø…%–ŋfl ’î@ŗIÉ*ĮVØX¯~p ¯Šé1ę#R{šōŅųX‰°>uÉ#nās"û|ÂĒĘ˙ ķ*˙ÂRŌH…–Î8˙räĮ{¸ķøÂā€$gž*}'QS|ÖfŌÚ ĐųŽQĀy$ķAåHõUëmcM"8a!DÎËYåä(HāīÁĒŠŲØÛĀļŌ‰!ōešId‰‹d3'ääąĪ ā <ŦërŊ—ˆÚmūHDrÍbŒU|ÖpĘ0%°zŒ‘ÎÜŌŲë(ĶË PØĸŒģG'Ū/°nPæļw#ļxĐŧÖlm­îZ<4Н›$W@[pLd)ĪĖà=G­2MZ–É”'›2Ŧ’ °U1ģ),'šVŋ@ŋ™—ˆeÄ7ÂæÔFĶŦIįíįp89‘Ā'œäwØämÁéÉéÅd OH nxÔBŌ2¤úáĮŋą­rå@lņŽO¯ųâĸ~…ÄŒî\qīIŒļ nGN)’8ūņ;9AƒÍf]Ž†ûÔã§æœK3c•ų÷Ŧb ĀÖu‰4ßiąo-ņČ"ę9/ĢtįZ ž$ļ{t[NįĘW2/ûˆÜāŽ~uĩŌËkks4mq RēȊÅA댊Ą7†ôp}Ē‘ĐŦAqĶĶč?*éN6ÕŲßFbN˜ĻÛˆ!eRō&G/´ãįĄ ę6bnmQ_|Ģ2F@RØåíÁߊ°Ū°ˇ‚x`ĸŽ`l•ķÁČįŌÃųKÎß$nq3íu*ÉŒį“´‘ëŒ{VNĄŖjÚĖŠu)Šœ‘+”RĮ œî\)đFjã@¸ēžÚB–1„Žä‰#%ĮÜF?ģ‚T}jíáü‹wF›Ę@`ššYÁf+#nAŊ2Ų,1† Ķ‘ŒŽõj}ÆIRg3"T`;s‚~nHÉüÍc_hōÚéV‚īQļėÖâ &WÃŖ.ãqˆČ#?Äiá™—vmW/ŠÆÛ,0”-ģæ\d¯æÛÁ¯bũĸŲiˇÍgķŧ.-d‰K¸lFĨ[ą÷vĮéšŪp9 žŧWúĩšĶĨŋ€MåˆÎb >O#~yĀ#ŨkąļI ĶáŽy# 몐1͎­g;w."Ô÷¯^sJ=ąMuႷ+Īųüé°> RĮņ“YˆûNG’gˇZlgæ§7ĖqĶđŦĸr¯–ûŨģ×=iĀ>ÂģûS3ŸZMų­S%Ą“¨ėüĒž;Š•Ĩ'“š‹+ģo4ĀvėwãņŖ3ÎāņFrHäņȤ]ĒqéRĄŒed^yXīųæĨ ƒÁËzŽ(2…č=r*´ŅĀ€ āâŦ™[ĮŽ´šRĘA}eL ļp:($ĢsF1ŨėsÅA´tįژÄŲō–Hlg#ŠOƆŒeN9ī“Ō€>cšœŽÜJvxäũĪųéHR`Žŧã­4ÄĢ–áģŽ(8ÜNOpZPISüX f/ˆ ģ“ė2Ų#ŧŠ3tÁQē'@Ė`XĻk1eņ¨# ~Œđ?”]`eųÎ$Æxæ01čs]zcąāãŊ*ˇ–ÄĄ$wĢS˛ĩ‰åģ8Wmd^ųĻÂķoŨ1Ú'WU<ãî3ÂģKYŪ{tyā’ŨÜķJķŽŖƒÚž3cž8ëŒ{PxĀzô┧ÍĐq†ļwį°^=iƒ Āž„ŒqNf-ŒuĪJ‰¨uīÛŸÆŗ4FÂąVZ”°`2qžø¨¤\ãŊ&îkąą¯Æ ĮåPp§ŊHíĮøÔLy÷æĩ[#0=HĻ!ŗĪ<ĐHĪ4›ēôĪ 5hC‹…+Áîj@€G~ŖĨ3x*˙:@@å8ô8 ‘ŐĒ0Ĩ ¤ãŖ€\`9)š ÁėyĻ”āõlqÍ8``āãčj ä RŠÉÚÄ~T!Û÷XüŨ:u˙8 ČPgvqėj29 T‘ČÅ$ˆÎŽžšäNdÉâ Æ~3ōõČ?ŌĢÁŲíŖ…7mÄąĀ'špuf†éœĶA"´*Ž8ST˙vöĻl;A^}@ôīLPr üzŠ@MČs8<įOÚKņ×ëÖĸž¤ƒų˙ž´õ9,KyĪ"˜Ķ’wŒ˙:P…H#nį­!,ŧ’võķBžTߎAÅ S Šę9ëÁ¤ÜQÉ `Ÿ^´›Ø7ˇžiI$ä¨ĮZ€ 1āķôĨ 1Á ‘Ķ8^œõéS´qų׆ĪXXá9ôŠ6~j‰\“‘Á#Å:90vžƒž:ŅpÔx@W§ëJ=šĄČUÜNÅ1ŨÔŖ<â`1ĪQ°6x ûŌŖdņžiø$¨ëę1LĘvŅ0'ŊE(88žhlÃËô˙ëRåš‰]ˇí=éX:psŠ\ÚaC'#=>´6Ü qīŪ¨y’‰A##­Jdb Û8Šæ)3J¨y “lV|É9æ2#ĶĄÅYDsn \ņČĨĖîW*E•‘H$vöŠׁ{U8`(¤Nîy4q2ĄÎH æšl–éĻāc¨õĨ2ŒãĩhÉp0:cŊ2p2vČ{}Ú˜ŌD…™ŲH séJķ*¯#8=@¨– ƒ0ĊÁ•Z ŲĀ‘ëūyŖ™‚Š,ũĒ3œc8ĄgŒš^•REŽ<Æ9ÉÍ4@ņąbrKqĪjIąōĸô’(PHëژfBz~•^RĮĄč9Á „+‚p§ĖÁEĐŠ=Kĩxä~UAIV=0 J’āūĒæ‹›Fp3Í 3œsčjŋ˜GŪčN2:Ї “ˇ"Ž`åe¯-IéĮ­7bį‚2*?8¯lPf ~lŽ‚ŽarąZ5ëÅEåû-=Ũ]pAã§ŊCæ'÷Ûô˙ žrÔXFœ‚KcˇJt…@9įĩ*†\r0z '4Ų‘ 9ų{c"Ŧ*Ē -ĐwJŨœÉ°ęqƒSīa Ŗ9į­$ĘhĻŪ#Ō#žē˛–č%Å´>lĒr6Ļ3œôčAüjm]ĶučŪM:égT8`ž™~}Ģ_ ŋŨj’ÜHą\A䘪PĄ”¨1ÆOcÛĨnh>ļŅd¸™ešyîķ$•l€`ÉíÜ×CPˇ™…ŨÍĨˆ°ÔûĶŖŒ…€$}ėgŠ‘TJ“`Ü8=ĒyGrŽ=¸¨åN3Žũ1VÎ@?Uß°AZMh4ÆGŋJ‚â-Ęx'Ž•hëÔT30*į‘I­ [œŪ´ķAĻM4y˜l >اÛ-Í´ĻŌiūĶūŒ&ŪT|§8ĮoĨjŪYCwÅ,JĘGFjÛEm%Ŋ˛DŦŧ˛(Ŧím͔×-Ŧs°_Nņ[ę p6<ÛË)$pzįĨ]ŊÔŌūÚe˜‹BŒĶ&ґȇęÃōŠĶNˇŽī•œŠ#œ÷?Z¸ÚtČ&’š@ģwLãĨ>Rœá}ŒëÉgŗģĖæa$‹ōņĐ lwÉáxfKˇķvŦ†NSČ>Ã?Ĩ_‹N´C*}žä¸UnÜņĪSV—Jĩ¯lÖŅy r#ÆōSQ¸œã}Œ8Žį›Q`ōȏAd„ôVĪQėqÅKg<âßPwo>Xd!€ĀAß5´,cŽO4*ĢíېŖ$‚ŖŠÎŪŨØÃ QģœļÅ [ëŽŊir0u"úzmč–(%kö”ÍZЎ03Į>´ŅŠKŧ l G1ōŒy€'=ú‘jĐ]´RI5ŧ1E$ƒ–XĀ4ÅĶ­”m˂]AAr2GåO•‡4.ŲuJ‘ō(ëĨ5âųŋZwʏË*@댟J™ĀÁJĨmLŽP’"XœŒv¤Ú~āĀp1VJėąP:ō;S1vã9īSkä0Ģ×wP#ž…Xn=Ī=Š E“ĪԚ ûØô4āPČ?)ũjbĄ›iĪĮJVŏs…#9ĨxIãZ˛$yÉÉâšJãp8SČĪ­6´d>O|dsMō×ڜĖģfĀŊę-ÍũÕũj p0?6@Æžpy_LSæŨŒŒVŲ"%PŊ8õŠ#PW<ãëH‘W“ÁŠ‘ާ…$6b]ø†+}VâĀŲ]ČÖđŦėčĒT†$¤wÉã¯LfĨąņ$7rİZNŪd1LĨŲ(ėŖ 3sˇ8ã#Å2÷@Ōu BiŽ5ˊ‘1ķØpWåį‘NM+ÖHĒNžˆŸ*ųŽģAVVā1Į.~ƒĐVë”É܇Mņ-Ŗ›cmsˇˇRŦÄĖΊY”ĘĘ÷œ`qÖ§‹Æ,÷pÆÖ ĸ[¤‡Ė3üǝnŽNŪ§Ė™ÎqNû/…m’9=9!rŠäD 89 Ü‹{Ķâ‡Â֞{ÄÚD&Ę@˛”DáTC‘W§b53uûËË^ÅĨ2Û=­¨ō„ĄDbYüˇeĀÎvŽx-š“y{¨íŽŪá€Wģ]Æ?ŗœųqķLsËa]^ģ4rx~âS2¯ÉŊ žöū”ˍ;Q,–wW‘˜# ×Î÷äRÃŦi“#ÉĶžŨŧy/¸ībhۖÉqčj$šēB\’LćÄrCŠÛ[Ŧ–†ÍEĒ€YŒš0lœã*Bž YÔuíB×Rŋ…&˛G$K–6ũÚ˛Œģy]Ų^œNŸ]€\Ąĩ-5Šō™ŲbvoŪHČ€2+Č#Û­h[jß_G&e &dĶyB •'’=˙E­ĐNW{œÖ§"Ük‘^\-œ­Vfubŗģn`:õŲéÆ*ܞ%Ö#Y<ØímŒv‹!†H¤iˆRJãoUÆsžž•cV’;Ŗg¸šˇ‹jŪ—{wßōËĒmāŽ['Ķĸ-ƒũ™ŠŦD}gœãETOké…æk+ĩģy˛Ã Hƒ‡ÜNC(Į…t°ęĐIyšķLōË*¨ōļāƒÉÎ:qõĀĻŪëPÅŠĮšMŦ+ ģũŅ8eŒ8úāô÷´ūQˇæskw4Zx°ˇŽiîä–LHß8ƒ‘œã ’@>˜Š|AiŠéREvņĮ q<1å~Đ=ōUvüہĢrãÄq­Ũ“æyO# €đ>äQĮ`sr9jI|Eω]3<Â+nĖ •W§u`?J:ߔ^W9û¯ŨÁ¨%ėW:\÷?ŲÃˑZMŦZt^wŨąÎ3Á=+wÂzŪĄŦY_ļ Đ<Ö÷aB)ã=pIǞøškvļō#Y•bŲÁe3ų;Tg‚=sœk_GÔŖiqtŌ1ÜÉ ũŅfĶ÷H$ķīSS⨍|[šDí-ÆHįšwœ=Ŗâsģ y杴û~Uʎ‚`ž‡< ŠDÆ;ŒTǏ&˜Û[žqÚĩjædCĪqÚŦ"n%‡Bry¨”Ž„õė*Ô`÷ûšîM ô9+˙ Īyâ5ž(Ąvˇg g-nAc!ˆĪ°Ģū1[Ĩŧ—īÛËnÅ,Â3+Ē.ėî#p¯8įĻEĢ^kVū$1ZÉw%›wUŠt3‰U‰\‡ŽjĩĢøŽQš›SYŧŠŧĮōāRmаpNS"Lq]æļæN×.Iá n㸆mM›ĪYB–Ēŋ~4Œã$ãˆÁĨÖ,.áĶ5Dˇ7W-s$r*"Æ ¸e,TŸ]šįŽ+2â_Ëk)„_Äŝ“2@0L ´OPxô=ęãß_icVžšˇē—îI &uelĒå Ûˇ˜õ:éŠ_"æ•k ŗI¨Csq,˛FŅ3š ’§€ ƒ×§8ĀĻÃáÛhĪ]—M\Ę7)Wgvāŗ~6•ĒFg°$y\Ä.Ø,ĒgŪ0pv|¤Ž:“Ī/öFĄök•‰`&¯åb Eŗ9ÛÉŪéÎsÁŖæ"eĶ´¸å’ÔĩŲ¸ ÷}äq6rßËnĮ}Ũ+RĪFˇ ž?´—‰ät+ņæļA=Ī85•s ŪÜŨO3GfId|}ĨΊyÛؐĮCÚŽjmÔúF›ũ—ũxžwTyesŧ Œã¯įNŪa!ēŽ‚ĶØyvˆâuˆAIs w†lļIĪžOfMÎNZ˜Œrėš‘C‚XØaģ–c“ÎXÖtžŋŽKInۄŸ7˜ŲŸtĢ"Hų*>đ ãÅk$W˙ŲFÔĩĸMåˆãtR8ĪŽJŌŅ+ŊJĐézeĨGo%Ā FוÛpUۂ°zwö5ą¤ĩĩƍesk—°$‘ĄPģT¨ `tëÚ°L–åŪ‹Sģ˜.­ōČüôä0ô WC YOĻč}ŒíÉmBZ0B°Q€yĪaSkĮR”­ŠzūŸuoiļÜ­Ürš34d*ž@*3’8üj7đƟ$ņ¸Žhö…UXįtPvąJ“ÄVŗß ;Xĸ‰ĐÜĮ,#ŖGį?wõ‡„ī…œ™,Ęŧq‡ˆ<›%ØîFâ0@(ādtuQÛr^ûgÂ:aÚŦ“˛…Uޤ*G—åō3ĪËĮžRēŌô˜L‹,w˛GåųĖ÷2¸UpÉ-œ‚s‘ĶÔVõ”W6–~LË1…XÄ%ÎP(%˛IÎJÍŧĩš‚ĢxcI­ævb‡‡P˙{Ąī×2rč˄b÷#˙„~ČĖ%Û;0dmīu#6TKgŖĖĶŽ‰jZ[*:ÅhchGœãi^œį'ŦI´Šu`]Bml<ĀwĄIUÔãŖ¯áé|+!„m)RФM°Gœz’ÁûŖëMkԖ­ĐŅļĐl‘¤D‚TōĘ"1¸p@\•*wdcyģŽ•*čzg”đ0މ(™ĀÂˌ<‚9äúšÉ—ÃwŌÃ4?h´ Īų†'zÆĢģë•ëמ´ŗxFYåžMöK,†VörHg•eVúŽŌ3ūÕ=;‹ämEáũ>Ũ–āFÁ’S>^waæ7`œg“ôĒíŖé—÷Í-ĄY]ŨZR<ÂÍØVÁƜzāŠ—ZĶ%Ôm U12Å7˜ĐÜÄeŽAą—dqķd{YŌx^Vž_žŅ’échíˆxŒØ!”į‚Ĩž”—¨ßĄ¤žĶĖąLá™ųÜģnā7ežc†aĪcЉ|'ĨąˆîˆÖEÍÜŋ+¨ |Ü}*‘đåĮ›i4KĻ#Äņ™J*”v”sŒ‡9úûÔ6~¸°žÚKw˛IbH{o‘dVaĮVŋ÷ČÍ?˜žEûMJŧžöØAzĻÖ_-ŧ˙,YgÜŋ6~ņŧ0ˆÜXLĸT”ÄÍ(YËT2CeOSëšėtĢ[ȤŸí—Í{ŊFh•6.>īyį>õ55Z2ĄžÃUA#j•Č:Ԝ{ūtĻ'"Žvš‹lŸßũ+™#vN 9˙ëĶ'­)l ĪZˇNĸ›z™$*¸V*ĩĖFī@ĒÉ÷†@Ļ$mŠ¤Ž ÁÖüJēfŖ%œÖ†H’ÍŽŪQ"đ ãO=qĪøT_ö8ÚŌēšgĖorĄUQ€bd†/¯LT~'{ĩYgļ´¸ŧ`ËžQ@ 6Xä㎝ę+kŊ´yîíĸ˛û%ĒŪĒD´d†'å xÆs’sé]+dėe­íqē~ž–éöŗp8Æzuæ¯NÂų˜mãžÎ$Xėŋå°$Üq”xÆ9ō˛nįĐöĢ‘x…§ēH#}>0÷†ÜĢČYĶgßQŒgbã×wât˙ļôģTq5Äk/"á"s´"Š$üŊƒ)ôÁöŠgÕlŦîeļ–y‘ãŽ9ŧĻۆbĢķmÆKqŒ˙*4ė÷0áņ,ŗFë$i<” ‚|ļ00#<ázpjΝâ‰ī¤†+ąÁ6ՁË+? Ī ngž•,úąy­ūĪq"BcŠrō[ŗŗ“`PŖĪ$pHü_>­Ŗ\Úni^xÕÅDmōmÉų†8 ŠëĶJ-äķ2õmbkoLĐÍi[¯ÚlZ°Œc.Į†%ˆéî+š´yfĩŽi!xdeɍ˜1_lŽ?*įõmUô‹ģv¤`=ÔÎN"RB‚OAŸŸõ*|އNyŽ,b–æÖKIXs Œ“ęWŒô¤õWėfx†ę[K$aÉ“,RŗÆeTFČ,Č9  gŊršF¯ŠÚč0[A‘ ]=!ĶĻv‘‚ ž8n0Nzr vú­ümĒI2HÆIVŖŒeÛî¨É?R:W7yŦ\ ŨĄDĢ4ŠĀė% ˙.åÚ rŽ}1OļņPXÅ5ŌĪ+´0ģlD‹BŌ2Ã˛7\sĀĢŋđ’[É!ė¯# KĒ}áˎ ío§š ų”_UÖą,™ô^3N%af\áQĘl‚ ‚sQK­x,Ļe†ä˛ąÛ °mß5žõqĐJ įߟZĐ)ĩAũŠņŅĪÎāFŪ_īŒ'8n~oîლY|Gˆ¤ē6—vĐ­ŊĶ*í‰ÃyLĢģ‡ĪRxČĪ>ÔÕû æf[Ü]Ew+¤W–ö×W…æÎšīæļ’6đ7Ģ‚G~žú–ē‡ö]‹Ĩ´Ģ?ö[lm|¸Äę IÁ^rãsž+OEšk‹7Yžy^ Ūw,§IãĶ'5“sâhŽbĩm>;Ĩ2OÆ]mĖFe‰ļ’xå‡]§‘K},=ē™7ķß^Ia<ÖWWM[‰ėĨˆ<ÆEAÂíQĖ1ÆzžĶLžōíĻÚl(’Trã~RqĪŊs“ø¨Ī|$TÔŪ1ËX!F–yΘōHāŽ‡ŽkĄĶ5[;æ˜Z]G,‘'DufŒú0āõEMĩEC}˲§•žįúÕm§ÔTÎûđ Žĩ$ô•ûT°sšŒ¯īôĢ>YĀa€:sLdĮ ~•›DĻ5§¯ĨH–8čxÆ)¨™ī튗Ë!‰ĀôŌs÷z,’ë˨As4,Ј&UDet [<ƒ’y÷üj; ˛ØKj÷ˇr$ÚzéėJ "1¸ĶīaˆÍCŦmŸî°Kŗn°FĀ#D¤Žáķō…ŗŸAHcņ I;rä“ŊEĘsįĢ'–3• ƒŒįŋZęŠvÜÅØ]OEĩ˛‚y¯ĩ @$ŅÉX•]›z§˜UU Î"ÛšĶ‹Ãŋžķ…õō3ųėΒ*ˇīv–w•R1Č5—5–ŗ=…˛m˜]AöČÖVģ‘d "mĀō@)ĪQƒQ˧k÷\2‰a‘ĖīíIūFdgŨęŖqĶ“ØÕ|ŧc^ ÛÜËqæMvÉ6ũ˙ŧw™ģgîNJžį@ĩģÜķĩÃLĐĮmœ§úˇ,Æ0Á‰ ZĪvĒ`Ö<¯.;‹Ģ„–6kÉ2 Fxų.WûŪÂŖ& o }ņÃ(îCå B­ãæRÜî<ķĶå/Qü…×´ÆŠÂ6…gšíÚ#Stûœ$‚Rû_#{zŒSī42ˇŊ­Â‹”ōŪ;†_46pŦ7[–äžä“U4˙ ß–bņm&g†g<’°˜Ü€W‚NáKkáģ¸ēKö)v‰š'do'#ŠāE=;‹äj˙Â=awģšĘäI4c|r]H_W áąģä^ũ@9Ī5žĸÜ&ë{;…$;´4ŋ0’Ų;šäąÁčI#šĐŅí¯,tČlnšŲÅŧI;ŋBåŽyÉđ:ËÕlfĶü3sxœÕs%I>`ÁsĪ“ž1ŒæĨš]$iVŪæ„:™ļīöp-Ģ ?sˇŋ8ÜØëÔĐē›"‹{xÚ…Tšųvüąõ=`>¤V›Ŗ BŲä€ZÛÃį/yĄ˜KæaÁ$•éü+Ônßxn[ŊBâīíVéæ… ŋcÉxŨwÃv?ČãŠvér>D§HĐĸ˛ r-îZ%€Ã,…™›ä\캁ŒÕŗáīŗžYĀöđeļ#ČžNI!›ž{ņX_đŠÉ%ŧöÍwY#hÎË<Ũ+ȸųąs‘é]&‰`tŨ.;Rņ6 6a€Bŧ’xPN:úĐí`[‘jú}Ž­fļˇq‡zŋŪe*Ęr#ę sÖÖZäå­Ûz䙮J€ß4D`?\)\úƒéšâ )īėŦ'c4ˆûš=éō¸mŽšSŒz\Úø:č[ŧfįN'íVą,ƒdī(äaĘ㎤ŊJkČģ?…4T„4ļę¤(Œą™Ô ˇ{tcéKmĄévŗĮuĒÉ ’ĖĮk0 zļ2@QĪĩXÖô¯íVĶÕžČRŗAŧ?ČÃgŅå\ô> –;ļ3Ų:F" ĄōßdOÆK9ęZJÍjĮo#~ķ@ąŋKul&tM€ •pœuįÚ¨Zi:EØûQĶ„KķĘØų‹œîã’Įņ>ĩˇj—pZ˜į’9,Ŧ[FßáĪa€yæ˛ŸÃE´¨-–hÅÄKr˛˜>We9Ô˜sęJ›ģÚúhōļ÷2õÖė¨Ŧ`AÅĘG„ŖĘˆß` `zöëW Ņ´TˇŒj2ŲŨ\>lĶ8%Ø.ÖnO÷x'Ķ­C˙˜´k2u+tEuIíōąß "Vyč:Ԑx:DļÉsfSėŗ[1ŽÄ#ęĢŋ;ˆÜqÎHâŽūd[Č´tǰ0éĀČL|•åˇ#¯]ø?\U¸t­ëí r0ip¸8.0ā€x$ŽséíXˇ> ģģųú”œM’–da¤TŪuZčtģ të‹æiŖuš˜ĖĄ Tž[''w'JMų/ ˇHŅŧËhe´ˇfo5ãķl㖠œÕy4]Dą-U$GB˙tnÜ üŖw<`fŠę>›PÔįŧkģUķ'YBĩ–â…ĸÁ;ųûŲúŠĨ/‚n¤ßģSļÚöFÍą§ōWdk¸üœÄÎO8ôĒIwoązëGĐƒ,V :ĸ‚.B°ÛŽ{1ę;ˇŋ7,$Ķäšâ; ­O•…’8IB2ėtéĀÖį‡IäbƏ6FhžĖ2Ģ4Š"Žß3#į‹\ž3Í^đւúTú‹­ÔS-Ā Hvl’ É'%‰ôë€+9ĨmĘīąžš$žGķŖhõ;nzĶ|×ôũkĄŠcnWį8ĪJO,ŽČÍ8!Į23Í ¤dƒÛąú !÷qÚĻlŒŒsÔ ScB3ĀÁéNÛƒĪ¯JHg)ã×´’Ú Íä5ŊĖŌ$W ’4qîU ŧÉ?€Ē÷^3ļ͘!´[<ũo3ŊbDpAÛԆ?—S[ˇˇ:]Ž ŸnžŪ+‰lAĘîÁ8$ddH•j:"ÜĀ<–ōŨR<œ–ōđ?0ĮވÚËC'šJÜ&•=ÄPM$7FÖEŠrÃ$a!A9,€ôÆsÚ ›Ä×Q\MoģN†Dŧ˜šFŪš$n*1ō‘ÅmGŦhåŠĮt dI˛š1Úŧ…ęOu'Œf›ģlÚšCr Œ‘!Ža™YZFŒŖņōr¸ųąĪūAķ1Ûŗ>ksbU%`ĒÜųGŨJāûkš^ˇ7öĨŠÅ•,÷"CnĮ"I6ž[*¤(lüÜ|š\Ū›_ĩxä’•cû<’/k*î ĸ‚>č.Īähžū_øGŽ5æhˇ¸ō\ˆT0FX“Ķ#?ˆ§ōČuQ/4„6RÜGˇ^A™#‘Lew¸ˡ úM^õôŸ29š‘@ŅIfåĸBę­ģŨ…Ë8Ģ?ÛZ=’Ŗš(Sy•c‹oĢ#FĖã< û†FzĶ&Ŗ“Ävi3F֗Ŗwü€&ōYžūv‡Āéžhˇ­ujskžÖXÛd7 12•—q˙–{T=˙‹Ĩ]Đ5=FâöHõîfŨ$V{cŲ78e˙žBĮōoü$–Č#Z] ōē1p›'ōr~~›ŠôĪ™Ļ_›Ũnh¤’čĻŲ|¸Ũ<šLMČ%‰Čāž0i°3Ŧo5{k&Š;[ą fЇ‰MÉ ‚ŋ1ØU°ry=zS÷ˆĮšnÆĶLvËķĄ¸*Y˛§ ä•mŖ#§jŅņ.Žú[Ų›O-ƒķŗĢ0Ž@/ÁāÃ'ˇ\œHēļŨ _KfËæ•ōĸķTRFŌI õĮ_Šâ‹ą¤fĮyâšÛÜĢˆaM˛0™„žnFW÷aXcO| é46¸m) ĪÚ|Ōîqt~7}Î1ŒcÛŽf×ÄpÅt÷W"ėû¯!ĸwŲ‹pĐīÁœ7<ķ]N™yg{eŜâ{s˛ø8=~”ĨpEÜŨYhW3éé)ŧ|Ą&RNGErÃVņ&nQcž*Ģɧ› W^f18îT`zõÚÎŖ›ĨÜ_Éŗ$b‘ā62r=søV+øļŨkö ĩ}ėŒŽPe™a`pÄ3Šã‚(í°Ų>ˇâ(Ûb‹æŒZˇīßK(7álØ'įúqōdsÔé“\MŖÚKr’Gtņ!‘%PŦܜĀ?įŠĖ>-„܈?ŗ/B<[@ķüŒũüãlgŊ%ŋŠ’éĸ[m*úDšs R1TY0–˜qˆØū]øĸIĩ°ĶG?Ĩ\jƒ^i§ļÕíâģēŨ)Kvo,†|Dw ĘLƒ Åk^^ëßÛ÷°i¯æŦpĮ(…ãO-w$Ŋ[ƒČ˜įšã‹/ã ci5ÂX\ˇ•æå|ÄįˉdęŽQŋ0AÅD5kxõ+˛-îYšahķ•VGVÛ´nn0qÎ?‹4õnö'ægO6ąuž“Į¨O Oo8/dˆėË8. íÚ¸ ŒgŸÆÅ•߈šįOûHŊrĶ‘tŸfH–>8aģr 7\gw#}üMĩ—M˜HąāJ™É¸0üxgņŠ´Ũ}u[øāŽÎXÕ ķ‹ŧ‹DŽ…vޏ)ÔzŌwļÃ[•|KqĢ­č]-¯4ļ,ÆŖpŌyˆų”˙™ų ¤ˇ^%fí`+ĘžŪ#įbFØ$Ô4Ø]Ânž¨n¯,ī<ökU—ÆcUIä,Ēqģy<õí]™6¤Zc}m ̉Hc›ĖĘārNŅÍs÷ēäēÆĄfbkĢ['kPņ¤ŧĮ\3zÄÁÎkWÃ:¤Z…ŦņÅ Čļr,ĨœJŌ ŠÁ‹sG9?SJŦ[W6¯Ą­#m|Yąœæĸß' üéŌÍąįŊCæ/÷ĶķŽ6õ:5ŗĐú֗SÎ?*Uč8Å(PNkSœˆ×=8ŠB‚pp) ˛āGŋ"ĨB\| {“DFÎoQŅ,5=r@÷R$ķY˜e†6Ŋ€8891<‚?–eŌļv×S\ ˆ¯$ŋ2DĄ1ÁöĨ™qŖÉoâÆp+GZĶõŠurtךĩ‹Äqq˛1!‘YqÜ6ĐëģnpjĨΉ­]ŲͰnŲŧHōę/ē §jᡧ?QÎz#˛Ôɚëá›Yd™#k˜ö,QíS´+FŪj2’ŧĖNrFXƒž‚Uđĩē‰ßí-´™&RDÍŧĘY”NâNĮlcŠĪ“G×%Š\ü™$ßåFRF`Táļįåu'÷g‚)Ą'à ŪžÚÎÖW“Íe22™•†Á‘†Ęî' Į"˜6ĸ CŠ‘{=‹Ú0Œų’ōĻ*Į¸=BŸlqŠŅūÄŗļ†])a¸6ŗ3\;<îrûÚmŲ$᝭sŠáíF+1 9&QÛ¤…åm›QWh^BT7<‚O^´Ûí ŖŠfš[c*č<ÆĀŒŧŠ E' §ŒzcŠw]ÂÆüūĶ0dš#Rō;äųˇ6ö ķ|Ę[æÁČÉd2[‰ĄĶítŊ>xä1ČŲeUû‘Hūņ°uķÚ´NŸá¨ŪY&‡HIT)”°ŒÚBŒįĻ8•eÃátƒėˇŅnņ3EäUÖW—Ÿ›åĖ8éŒT×ē%•ÆĄq ŧ†;ëšc¸Ž)Qd_¯–O ĖzsĪj­;‘r{äđôfYâąŌ.å/ÛhŧÄVmÛÎzüĀt'¨Áŋö=NžŌā :ŪVĖvĖü‡ÜžƒŽ}暸vxņ$WŠĨĪÚ!ÔSåЕΠ¯Ķۊt^ûĶ~Ë{4_c€ĀA‰[ÍLÆOQō’Pr:-QŨö<>eš¸•ô–1Iäo,‡?x†=Ī˜îûUGFŸW[´Í&UmĻfpŠNđĪō§y!7Į<ÔqxYĸHHŊrm–Œ˜Lpī­ęO˜r}‡Ÿgá4ėé&Ą3GqÄÆФr ųŊq)į…Oģ}ĮwؒÕŧ3u%ōMgŖ¤Q\RFōĘĘĖŠ!Įœ‘‘Ī"´o Oiö¸ŅÚÚIv-˛ŧe ™Ũ€Ŋ3“ŸZʏÂAdYŽĻĪ*•`^Ö7T?)ÎyėGNHŠâđ{˛ŲĢĘ>Í1™@>be€}ĪįíËŧ{‹^Äķ?ƒö›ĸÚ&Ø_Ŋ>V#ā˜ųíÆJûtĢVÚf™`\éöVļūhPíJģļôÎ:ãᤌ| œ/áJvKqÆ÷HĀv`>ņíLōĮ¨üĒyp ô uúÕ]Ë˙<q´ŽtÄߍN8īHsĀ^r:͇ AëHzđ0:bļ9…@yÉČĮ1ÔnM“Ë›Į?”Z8ãeoŪDîËë´äéP\ø†ö÷ÃYšínĐ9ŽÚVXTÄN mÃoĻX}*á֚åtyíD‹iy+Ŧ‚hŲdÛå;‚üĐįĮo§ĨūDāČÁ“~Ũ˜ā\úzĶ×°´)ZK25Ô:ĒF&RɰgiAęßtHūúöë|5Ô>ĶĶPGŽî8f'pāœŠ#géXđ“Co¨Ų[]Ef>ŌNö‚īÍØ1!R\ļ|˛1Į'v uV_Ú%Íšf…˛čŲ: ŠRo°Ņ—âsxē;<Ü †’0ĻŪ5fÛŧnÆāGŨÍ`^Kâ8 ÜvĮR˜G‹´PügîŽsæƒ]NĢ{ũ2ˆ|Ւx­ņģK¸@ÃõŽiõéo–5ō§ˇŠskæâQō#É(m¸ˇ/ĪpF ¸‚Đëjļks&¤`IŽČXFõ܆&Ā+ģ•ÁČŦũĮV‹\7iú„ŨĪæ\4b?–@Īōą-Ė[^č–!‘´Û1•##[I:4÷ĒėŅFąÄōKã¯<|ž1öR\GĻ——;Dę2ĢOžJŋOQ֚ŋ`Ķšĸ5ÃĒÜ%˛_GN›/#„ōģŋéĻÎŖ<úU]vßatŧˇģž¸‰Ä`%ßėMģ‰+Į“ĶŒã5¯}¯NtŨmííĄŦcŠ_<w;ČÛÆ‚<ņY‡P† û{ŠŦÍĖV‚ã1\L%’&KŸ,ŧe†KsĶ#ŒĢÔ4%žÅ)؏í| y$[ˇLäŗnÁųāuúa|@Í6F°?ԘÕeˇÁ1î–Ī™ 8āį¯@5#ÖåŠŪԋ&î¯§´V7;ą"JĘBtÂąéĀ\sYˇŪ ģŋĶQí#[8ä2tģRė]A‡tc#ˆįšJã ¨ŧG¸Žõ B‰V)<Č~ŪFŅžXrĖS‘ũ ZĶX‡Uļkد^ÅÄ{ŧ芰f&p'aŽãžæŖ$[‹XežF›Ķ°f—#äãîĶžj×Š&ģĶTÛÂļ×H<쏯äh<áķțA cëĐŌŗ ĩƒÅ -ŧ˛­ûs u’XGīIģĻ̈́cŋŊ]ŌŽĩ-KjŅŪĪs-Ėq–hŽįbŒ[‡Ģpzđ1AņgØŖO6 @ņ­ŗöŨÎeX÷0Û׿“ŒwäTz¯ŠŽtŨRęÖŪŪŌE‚F2^l%„n›zâĨĻôąIĨÔĢâËĒ]ÉŊô™Žâ+Yaž$D ąėÆX0;‘ŗŸZŲĶ?ĩ|ۖÔ#ļŠ&#ėë āwߞ3ͧkKį]ˇ‘kå@—ĖŧUf%Q‡ČlaÉČ8÷ãKF֎¯$å  †4‰”Cp%aŊwa€/ˇ­Lų­ąQĩ÷-Ęû˜Ė{S6Z–f!ēc$Õ}įÕŋ:ägB: LŌí@ĀäúuīM āgß§“¸w÷8­Žf!8Įü)į įœTk•#šúPĪšFA}¨h–÷:”ׯqtŗJ‘)Ų"Ǎ÷ŠuÜO\õ5F×Ã6´Aîa)ąšv腊~[ÛķŦīDמ)ŌŦašXæšÚár&dhņ°Ģ…Á ^yĄü5;ŪnO„˜ˇn;‡Ú<āŦ1é•úcé[ĢŲ]‘ō7ÃöPYC ‰/Ų­w-"â]RžÆ5 ,nÁÁāņ×xxÅb$ŪƒN[ëK 8H‹¤>DhęŌ0ōÁã,Ãß"ļŧK`šž’QŽÅĒDépŌnŖ*āqT­akrkEĐlĄÜĻ…eącģĶá ûö ̇!š× Ãׂ)ķÓÅ5ôOĻ4p¸’Y‘Tífū"}Nz÷¨G…U$ܚ•ôkö“r¨.‡Ü Ų’ ‘'Ž1PÅá8ĸĶîlWQž1Ī6åĪ—šV% ¸;=:į?… Qâëï† 4Ō°‚Īļ5ųT‡?CÆ=ņŪ ˛ģąÔ5)m#ƒMû9ˆIŌŽŌˇ ´ (‡SžG‰ŧ+ĻR÷÷ėYĻeŒli%Y‰'Pč1œŽÆĸ¸ąŗŅõ;kû­níf’7†(ÜE´üŠ*„˙`6qéšZ ŗoŦørâlEue,ԐWl|’ĀœôîķíŽÕ“>ģe$Ģqtt¸mDqŊÄŽ…ŧƑ‡–p3ƒ’9ôÅMcá‹)-­n-5kˈŖųn­ō™Ęä„į—lũ=ŠŅx>ŲKíAZ/˓t{” uîc•r}ąŒR|ˇ)\eūŊĻ"3ŲGc;Ļå‘å Š‹ÃBÛN8\֎™¨éˇw76vD -_˙V@¤1’=OJĘē𕖩`ņKQ>\÷'ˁ”‘"ũĪēI?ãŌ´ô9´ų¯Žîe72y…&+„c÷ˆĀIæĸ|ļķ*7šbā`žãÁã­Sō—û­ųÕËŦōHvĒ;Īĩrŗĸ'Hœ7wõĨ|äcûÔg NOåJÜúŽ3ĮJØæDDrsüéû`PÛĀįĨƒŒsôϐKˇÜR@sZÆ­Š[köVvąÂļrĮ—šx$—-¸ƒ`āíįž?#Y1kz„1Eqĩf–Ō$‡L‘LE§Uxų<‘– u=pkŖÔ5‹-7S´ŗxîeē¸RV8#.U2b`HŦÆÕ´Ín×É6wŌÆæDWĖ_s!ČpA3Ԏq[­–†oԃûSXŒŨ9ÖâKXļKœI'tŋŽ g;KޏŌĶ.oĨēÔ Špp Imü´ÁO @ĪĖXyæŦé:ĻąųPOXŖ @ËG %X`ŸCīÅW‡Ä–ˇXŠÂáŧÁŖŒoIwėaķ2„`ō28ĄŨéaĢ#";ß}Š7ÅķĘQˇ¯ØãB˛ˆíĮSÆAČâšŋ`v&ÕĄš¸ļŧ ÜŅųļīcËÁ ĘX' öįqīÅ@nuĢ­T,Ú}ɂ;´x‹´'būõYÁCÜũyŠ!ņQøvęîD–XíŽDSŗJŦU[iō `oQĀėy=L:Ÿˆ$ûĄją}šé ™DŠ8,Žļë( cŸŋ¨§ö°›!Aây-c öō¨÷ŅOŲŨXŽūzėnßŌ‰í|I*3+ę1ą'ˆøöū.œįčk[û}b´Ôæ’Yl¤Ž5Û8%‹ų› _œs“ĐúU&ÖĐëÖ rD#ōRųZ1Ŋ%;ˆUųšŒŽ¸éŪŠ7ØEÍR=Včhs-ŧâXËqåË`ųEz“ƒķ01šŖgˆLĐ}ŽŌå­ÖggTžā’…I*~`?xģIĮ#Œ`›ÛČf[†å~Ã1;φA†ĀĘ€Ã <ôô›}­ĪŖG0QÖÛåHgž]¤˛Beې>nT¯Ž}jîícNKG˜Žļ'šĘHšG:{ÛË!ŧ2Č ÁÎC…9äķ×Ųh‹2höË4SE&Ī™&¸ķ™N{ŋzįâņjiCֈŅ<û;´ŗ."oōÕI(s€AôõŽĒÆâĢHg…$HäQ,Mǰ~"ŠÜĖĖņmÅ˙…u;+XŪK‹‹wŽ5W ’FÉ c=}ŗXéâ{™¯žsõ˜DĸxÂl0^xKÔôÆy#mtÚöĻúUŠ\ŦÍēâI'–2ō8= g§JÂĶüZēũ•´v!™ĘÍvƒgĪ"aÉķGÛ0ϝmŠqi­­ÅĮ”ēŠŽE€nâ/ˇwīrØīĶǎ–%ÍɁõ<0‘avģˆ @„€ØÉ˜18ė}*Ëx \\i÷`,PĨÄ؊#Ȃ ›k č،p{Ô6Ū"–ĘÆFu›Rš%]]ސ†…äTR‘€ä#sķ)Éȧ¨ˇwUȒɖb†4F‘2û”spIãÚ˛uË]m´ģ!aŠt-f†U†äE‡1ᜀpĀ{Œũjņ§“qk=ĩ¤M„I›ŽtŠvc ŋ9ö9ÅE'ŽØÚģ‹[ĐÚI;‡ŧ –S(Âņ–ˆĮņ{s*.÷)ËŨå&Ö"ņæĸM’ÜÁnöĪVõUUš7āwW)Ī>Är*gâ“Íî&Ũ9Œ5čaxãØXn;•]_åį¯ëŸ5•ÜčņŲI!šÜãHĄNÆv”M[ÖŧM›­C§*[3J„°yļ¸m’2ņŽ„ĮˇŽrÜ)Ũė$ē™vŋ"Û,cS]‘îo3Rķ<Ôb>R ‚@2Ū…™ėu+Hfšåėĩ ga%Ęîōą*Æ7’Ûd_ûäÔãegˆ¤šo–×QĀÄÜįb˜ãĨ†„ˇ:VēŠpÖų‰¯$¸—ɡš(-åaÄÄņŧ ŒYzįƒP\čēü—×Â÷+ēIž1ũ¤ár^3ے ˛1›ĄĢãF.ņ+éqĘ$†0$˜á K,lũß,qÁúTvž0žīAÔo‚éâæ HŽc !u]ųČa× ŠäzŠ=äÜiúĘ$Œ2–ihČ>õÂHšps×wÃēf§i¨_\_–v™Î×lážf ˆĘ€œmÉŦÍCÅw[omD–r:[ĘČaŪ€Ž' ¤6y>ūî{ØđUÕŊ֝|–ūNË{Ųc ŽäēŽŽÅÉ$žšĪLTĪ›—RŖkšW1á~nIĒ;cūë~U­v ôëëTö{W–§L†Ú`{~4ŽĘÃ#ŠÁŖ ~\d×4…@ĮBsëŪ´}ŽqƒwlôĨØ|ÆR>\qÍ>1ŽšķÍ< ļaøĐ6aę:-ĨííŊÜā™Ą ¨Ë##q•;HĘđ89VriZfŸt‘CĨĪŧÜ*īIžXĀä™8ŧlŊp:Tž'đīöÜöĶĖÖ1[à č^á7Ō!UÆxĀ8nŊESo ÜŪ Ûāšåev6Y;Õb\įx#˜rqŧkĄZېl I‰āˇ ŗ)Š]ÆįXNTs“´tút4č6?lž•›öFb‰ãf}Įœ—ô‘ŖÉn‡8ĪAĀuĨģ×ôų-a“M–)&šd„Jb'`(d ÑąIëØĶ×Ãâ R[{ÛčZB˞._{ī*ß.ÜIR:§máë;3ĒÜ^‰aŽ&L• ,JŅŽJãîˇ#¯ Ō|ĄŠb-jÁŨeģ‡ĖxÔîŠ6ØXĻū Ŗ!IÉ7‰ttˇķZûboŅ8$íĶnqĩĪLËĩŅô×ē6p›öHBī8Ė^dqŦ`îۍę…G\ezdēž†-ĸžú9Ļ×K‚؁ãą@3ô­AŠ9ņ’×f3Ė]ääÚĘ̏šŒ|Ûq÷Á\į>ôũK^˛Ōŧģ{§˜Jé¸,p<ŧn >ęœ|Ėâ*ąđĨ›¸g–đ°!īē°˜ÍžŸßæĻŋĐlõ+ķ<ëpW䔨dŸí*ūTŊ۔ŽR›ÄöŌAÚHßkš3$hđHÛ@,>`Ŗ#î8ĮRWV‡õ%Ôtˆ§ķüö,é#ˆĖcxb$Ŋe]xnĘ(ŲV;ÖGV‰’)äËĢŗ6821įĻMjčZ5žļÖé,q4†P¯#> ëÄÖrqĩ‘I>Ĩ‹˛Ø\ ķšĪÂx˙ß5¯r¸QĶšĒ8o_Ōą’w5‹ĐÕ=8äŸÂŖ“*ŖĻr1üĒuUÚx$ôéKÎÒ.ÔŲÄBrSüĒHã!‰'ŽĸŖ‹Ķ$ˇLwĢ\ã5q8ŋͨÜ۝6ÖŌI,æˇ‘Ĩ’+v™šE#l`쑏î ô§Į?ˆ&‡WÜgIĐ´–đ5š"°W$*šÎíé´2§=w[ÕžÃv–‘Ø]Ë=Å´ŌŦĐ°Š˜ pė2Få8ÁÎ~ĩŸoâd焎PĪw vh÷ch‰?—ÎHŪsŒvÍl¯mˆysâXdVšvKE1ĄˆŦŽWœąÆŌ#ér4Ū!p Da/bŒ§¤œƒ6Ggc3Ū´bņ$MŠ%ŧ–Q{—ļi^Aˇ*¯ u!ōĮCÔņTŸÅÛ'pÚpō–B…Ėã!Ž6õ‡¨§¯aėZMb1r5j"ģÚŧŠ,$9Ũ¸7MŖĮ8Íeë‡VˇŌ`ŋ_ĩĮ5ž“vŌK,Ņ;ÆåPŠmŧ3|¤eF9­âŊ×bÚĩ,žđ°Ŧ‡vBžsę9ĪR­Äj×ze´‘ÍmpRĩy‚Aą! Ĩ9cĪN„œSWėšÛ^ķ’G{Ų !Ū"âņå˛]Ü0ÚFÎ?ZxM]ü9k Åäwhg1ÜáÄB\ļXˇxû8Ȟ´éŧVļßd‚ŌÖĘHä‚Ņ—EDĪ厗÷AÛØpz bŠCâÛ[‡Šim,ÅššG’íWi„ã.D2qĀ`}‰¯`ĐEļņ$6įÍkŊFE7Ģæ1Y~Ö$í% ~€í<äæŽ[ŽģÅņ1ÎRKFŽ%ō’e sŒ)9ęrsÁ6ŧ?âíč¯ŌÉŨŠ.Û­ÄárÃnUNĐA<āôã'7Kņ}ģ"†ØĮqĻ]Ž÷Č­0|‘–!ŖÁÉÉÎhÔN™â[s)xįA¸n˜õļwiylˇ o<’N†6ãĄõ¤īÔLĄâ(oæŌiŸņđ$Œ•Y<ļxÂę¯ü,W Ųę:Öéz×ÚAo´.BazN!•hO ŗ™ ;ˆīœņŠčĩíYtM"kũą1GEÛ+ė\ķŽ¸$×9‘Ĩ™.NF%‹ĸB˜î<‚[åČr°ūj•í VąjŌËq§ZŨĩĄqo¯˛^yÆHČōĩLń%}Õq´üŨúg qZ߯É;ÚËo”¯r–ÂW7ŖĘ˛;LxĮ^j[ŋy:.›¨Į –ëŊ9īZ).ų!(§Ÿ™†OqFŖ7!{ãĸOi5¸3Ŧ~DeŽD"”_™›hį;ŗĮl÷ŦģË ZM4A +ûL,Áo¤Vu2|ãžUJīM-’+ˆ eĶUÍĖŅI+ŨėdPãœuųzs‘Eü~ōXIshÚkH‚wģęŦĢŽ‡Åyî3Ō§‘ķ\ĩ?w”–]#^77 ÄC—ØZũķ"ĊŧŠÚ|˛S<ūTëŨ/VūÖҧĄŲY|ÛŲZF8ea÷pß)$HíRIâ“ö[Ų^kLÛÆč™œŅ՗¨߃“ü?P*h~!“뎋suėöVōLi.ą¸†‰Ã&\íÎėŽÜŊIĐAÔVæyJGąįš•GÛæžÖŒā0AÎz‰ü;âQåļB˛ė)¨O€Ī,n§;sō…uį<ø&›­=ĨÜąG-“-Ö ĖĶ#FG—1Ÿ˜‚ägēš–įÄ÷Đ]Ū´ɒpų.K,M;ē°sƒŽĒx=(ŧƒAëĄëPy‘<1´í búTfFhÎBåžW FFŒÍS¸đîĩ?‡ÆžŌY¤ŋh–P~Ņ)TS’ģNŅĘąPAÆ/Kâ{ˇÔŽmĄōDbâ8ĸ‘­d #ŖįnĀT9ã¯q†0Úk×÷Z†’“ĀQn„-" Y>]ŅÉŋŸáĈŖžšõĨyn= W^Ôækĸ ’ųō;ßģrgYSøxÚøv:D7Q­ĮÚošíšO4hžPĀų~P3Üķ\¤ū!Õ#ÜA1´”ō™+yJŽG/œ6PnȝØi—w7Hn4ŲŦŠžHčÆAŊōąĮĐÔNöÔ¨‘ę>Y>gĪJŠžOU˙žj}D†šŒ…$rW‹ųW¤îtÅ+Ã=>Zk0T$đ9Å* 1 Įw' R˜øœÖڜÁ‰Î3Ū§?tŽO÷Ē„a”ß{š’)ÔČĘÜ6ûŠ#.€ŅŠÚiŗkvĻî ķi@‘æP#N7 …ŗČ'$áäôŦŊBįÃú4Bî;+ZKi$-–7@аIįå€:ã_×|>Úíėĩ؂8­æ€į&@wŒ 0sÍB|$e‚âåGujÖ÷1ÛÚĸ+g~'gúÆĪ\ûÖéŽä€øfc{Y4teË#Gå‚ģS$ƒė€}).WE’ÖŌÂãí’ũž"#]…‹rqØŠ'ÜSåđŒ“Ė'—P‘Ũš™MŧedcˆœŒ#jĐOĶŦ-MõĖ‚Ît˜HÛKČT’“ž9ĮŽ)č3â›C6‹5ÜēJČB4ž^ÖMėĻ@A ČÜĀ÷ëV,SFŋ‰Å‡ØfY<˜Ô¨ÜąČÁĒĐx^ [ˆa]Zņ¤…cuˆˆŗĩã\üœŒ9…]Ķ44”’8渙%Š( ĖácMƒ 9ĄØ.S:ŋ‡žMéui$ĩDÜΌŖ“÷ԏfuĢręzEą2â0b%Km%‚cŨ˜~u>HāąˆjŽË'ŨĖ`Ļ8ėįåĘķœ‚~ĩfįD‚æ{ŲŅŽmäģ’y"etD# Ž g=qF€#ëzJK,k ęÛ^4œƒĪŸ¸ÃūEY˛ŧ°ŧŧ’ÚÖâ7’5€¸ã$n˜d‘Æk ŖĶõã]nņ Ŋīš!ÜĄc™˛J’Sø‹“‚{ņŒÖˇ‡ ą$‚kÕ1(H1"a÷ųc;Iā䓀i4‡Š9ēž‚úúŪ!nËmHäRčÛúŠŖcĻ6̍]C}+I,)q4~Y"0ąŠūådû iOĸ­ÄķLĶŨ)˜(‘P”Lã¯įEŽŽĨ5Ė&tķžü+)’.í3…đ¨úšMÆË”­q¯ĀˇVŲMl˙i—Ęß1‘qķō€‡w'•ž tȀ*…;”pM`[ørŌÛėĢ Üô~J¤r$LįkŽŒ3üĪŠ­­?OļĶm>Īgi´[‹yq Q¸œ“ęk] dCŠŨZXÚIwzʖņa™ØœggŊd6Ŋ§G(qu‰Ŗ‘Û÷OænY26íę€ ķ’8­]kLYŌîtųžHãvģD@lgą ŽØéëXĮÂQI$˛}Ēņ‹™‹hƟ5ÕÜcgBQxü:(˛ļ ™n]kO„RO Æ˛l0žv˛ŗF8áé´Õt×l$0”ēE…¤u”ËĄ]ą{€ˆį‚Ŋ)Ķčn-†ļ´{HŨdų„l$“É /úŸZĢ„,Ú/*Fē’€č͌0ōL8<sŽ>ŊhI ļēÔs_ŲB8ĩ¸%Ëo2Hd `  RA'žÔûÍ{M°Ŋk)¤ŸĪ]ƒdvŌI÷ƒåTŒĄĒz6™¨ÜE:΍Ī>™pbY'ž@wĄ9āāķc#‚=jåׇí§Ô ķÉqį™b“å—1† ŽŸ;~t4€aņ“.ŅÛHŌB&ŒGąe 0ÆRuäqT¤ņ>—žWģs4hņˆí%l‡ÜWĸđNÆ>”ƒÃzzo°…ĩ†8bBĢ;Ē2¨Ú‡=€ `3ÚĢ]hš6SĪ4ĐGDˆŌŪ0föQÉč7šú{ Vˆîͨ/bÔ-!šŗw’ãFznR2>™ÍC Ī§ĩÔێ8P–CĀÚG<įđĮ5ž“m¤ÛĨ­ŧsŦ.Ģƒ+ē¨u;F;ú‘RKĸÛÜØĩœąHĐŗ+ļg}ÄŠŲÉäõ×Č´×+îf¨Ŋ–IŊ”ąC%Ÿ—|ņÉ!Ũ“éĮŌŽAŽÛŪÜa‰Ûí@ŧeAO”œzŸ}ŗžx8ƒū]-TCåL(ûdš‚€wd‡‰¨ĨĶ4ĪĮ%ėvŌŨ‘ž9Ũˆ@H~ûü§ŋZ´Iģoã6tIÚö8š?0<‘ŽÜyFa҉åĀū:úV¤uyžÃyfRCK¨ļ1Į9$ĪZ žŅ tÍ´d)A<ÎËō/–ŧƒō’ŋ‰ĢZFŸĻéąÍ–-Ä"RŌŦNX‡Ā<žpjΧ-ފîZ¸ ŽpI;zž‚Ģykę3WeŒmsžj Ãûŋ§˙Z°ąĩÍe\zׯ4ÉX¨ëO5(Ļ8 ¤s×"´9Öä*Ĩ‰8Č'€qRlÆĶ€AĮ~”Ö!#ČëŽJzgėģ›$Ÿ§ĩALæ5ĮÔ[ÄzXɨ ]“yÂŨPŽü ›ˇŽœ7CéëPč¯Ĩōę MëRĖW Œv•ÚAīZ:îžt‹‹[{'ēšņŸlk"Æ6¨ŽįĀāĮz›BÖSTK˛mÄ2Aqå/–‚xAc#‚kxŨFöЇš‹o‰ÖîŌGmChhŅîb+Äî%Č18ũé֖~"iá–ö=HĮōĘP^ÆÆa*Ā$ÁĀĀÁāvž5)g×ļ*ķ3… {ĪGĒ˜y›ąíīV%ņ›Ã¨E–öFņĢËūîá Čų9Á HãŽÜëī_b4)gxlĸEmEg6(˛/ƒæuu'ũJ@'ŋr÷KÖ.5ˆØ=ÚÚ ˇY;â Ž$ãæōœđr ­/ 뉯Gq!ŽÚ2„wGPsÀ>FOĮŌąŧAâ‹U’e…,„Ęę×mLMŠ‘N>\đ9 §•īaôo§x-‘į’æI’Î8¸Ô6Ží 8l ŗ7zŒU[BŌŽãšöų™#]ŧĸAš\ŠÛōœķÜr@æĒÛëÖ§XiZ[c<—F(&–áÄJ‚[ËČ,ÅØŒõ*Õ[Xņ$š–’Ęīkoæ%É1ÁrLˆR YX2ôĪP8ĻĶbš¯yŖęwgÄ6ËImĒČNĶbQFÄ.[åČį¯\Q.“ŽŊÄíæģ1švRuExXJ ō•/s€ņPĮâlVæ1¤ZGįĸw!ËHck(*Cģ=ž¸ˇĻëÍ&Ģkb˙g)-ÍĖnČÅÎõg#‚ŲP@ÎpG |š\­FWMZūĖÔŖySθ°[toļ;(fāØ^čNI9æŖ@Ö|۟*æ8DÉ:)ûlŦT͜…2(ķvČÍũnüiëd –Ū9.nVŌĄpV9Ā#¸čW¸\ē@ÕbšŪXPbvŒę37–ČŌ– Jr‘{ m+ đž›yĻhâÚôÃæ XŠËe{n$ ˇŽŨk˜‡Åš•Δ’gĪövķZ)py‘;pĨĄsĮŪ+ĩ͝Ąžļķc,vąG&&ON€8ČĻīԖUņ$ˇätÂ+šûĘcœ‘¸FFFGLæšģMVåėĒņŲ…dˇ›T’Sŧą!ņ´´1Ђ?ē+ĢÕæģƒKēžÂįšŠ2ņE! 9ã^Ÿ•rŸđ™Mö‹"ËjÜEo6ÖVyrĖPŧavšĪN~´+Û@BęēFˇwy¨îy¨˙á ÕÜÆĒB“ BN›3ih‰ûÜb2­cĪ4Æ…ŧđæĄ}áØŦČĶâšYžY$@ؑČ8“îŒ1nzv•e1åsōķžÔÔęy9§š`ŸLÔEf­g¤ų_kÔ­!œŖ‚‚Hğ1?.Õ9æŖŽęÃO$ÖãLEFšmƊ¤ŧÄŽFG|Ô×|ē”RGtDg~øž$Ž>é9ü:V|Ö÷„s™QoáōĻŗ&ŲüļBĮlœ7~1׊ĢËŽÆ‘Pqß_ęÅļŧđÜpī–{%XĻe%Ô|Žŗ“ĮŖ)-Ķ‘I¨ęÚ]ŧw›nlÚæÖ$+) œļHRp7p7f˛ė|&%WļąÉ‘É4­ÜމĻ<vãjk˙ éņEt÷ˇë‹*2R•R2ŖIáÉĪÖĩ\Ŋ ZiؚrkzUŗÜÆo0ņ:,ĢLØgm€p§'v\U7UĶuƒ"X]<¯†`Ņ:pr Ę3ʰãĄÉĩđåŽĄ˙4ŋÔnVãʓĖiE•8ې‡ätÅhéZZUÂΎLâ':‘1¤Ī 9ËĀĐųEŠYŧQĻɝÍË~ęY}”ås1Â}ĐHū´û_ÛÅ5ōęSˆ„.Æ&Iĩâ¤Ŧs‚ ÄāāgØ|%mÚˇá|šŖTķÁ& ēŽ:d=1K…ėK›iÖölÆ7ųÎÛ2Đų”āŪX āņžŲĻš@ĩ¤ŧpBû­Š\ųäÄáŌHŒchįũaė{b™?‰Ŧ .cš`›yĩ‘•TšNpå#Ļ3ØĶ˙áąMĶŪČXIšÁį Ļ:ė_ĘŖ_ébKĨŖ12­ÜœĻōØ<ö,ߝËÖē­•ŨûXÃ4†aŧŽä*¯å°GÚÄ`íbÁīPĪŽŲŲęsXJfI”/"*w+0€ÆHFīÔc­Koĸ[Y_¨#}˙ŧۙ lķ3íĻæš§ũŒ÷>"ŧŧģ„y/QÂVwÜķb¸8€A${RĐd‘ø‡Oc4“ÆŌĶ2Bß)•qėô˙õVôJaJŽ2 rŌéúŸyio4ˆ‚-ģä‘HW"0s†áIūœtš}…Žh ŗ´‚Ō"KāŒ"ä÷Āhvc/åŽŪÖ[‰fxáˆovPNį€'č+üO¤ė…Ä÷8“î…ĩã÷†-Ŧ6đw¸<įĩ̝}˜č—ĸōy-Ŧü—3Kme@2H#ž™ŽnĮÃzd֊bĩÔ­ŖV Eq#!R%ä ôŪĄ%ÔHÜąš‡Qŗ[ÛYdxä,āP‚¤ŠHA>•Næōh¤¸ŽVO+¤StTb>ë ūŧuŠ,ôxôŌßdk€­‘ĩįf^]Ž:d—<ũj¯hđęß@a¸yPŧÉ6ā¤6āĪ|)Î*ZdŌŠ~đŲuË;äÜVŲĻo.ÚØMäНŖ8ôĨū܂7™Eúhƒž`Î'o~üŸ`9Å-߆4Ë̎ššŒŒ‚.d@iL`6:1ĸ_ØKįîIÛÍX×ģ—$Frœîã<õįŪ¯K}JQx–Ú.MüĖ–…÷[O䐞_ŲŌbķķ`šč:c¯Šg{¤naO67ļG,RĻ ‡æņĒÃÚT0…ŽÅĨ%D.3:ā§•’ŦØÎĪ—8Î=jĖ6đéļōũ–7s,ƒyYËģĩ2Y›$(ŋAĮĨ'g°ĸņ.reŊؕĖb(™y|ÂāmËcŦrHÆßĨxžŌY!û5åÁ”.6ĮĖÁČSšĮ?ēqé‘ÖĨ_éqĮ…ˇ ŗnÖ휰ÚĖë†-‘‚ĪÎ{Ÿzš-I2+ˆ! ģYvČ~Q!{öÜߙŖŨė=JđxšŌhžĶ•ėˆbČ#W˞ŽKvȧͭZ“Z‚=}Y,§&&‘ؕV’Øg;x`yĪJĨyĻx~Ëėé֏Īîƒ.БÆŌ äā€#Ā=¸íW]4ÅŌ&-­ĨŽHZâKŒldVåŽ ÁÉ9ĪCëE/ŧDļë¨Fē|đO3fdb­qq’ ÄĢíōŸjŊáI^K+åš[ŠĻˇž– áŅ‹2ā*…ØūuŸi'†Ž­ÛS—NĶėmÖ$§ē`ĢF0¤Ģ|›FĶŽí[ÚV•§iPH4ë[[u™ŧĮ6ņ…{=Ēed­aĢÜ}Ų>[AžEdījÕš ŠÉįĨfå=+šOSxlnąPŨOJc0.Áį˙¯HéœãФÚBXUļö0$ķ;ācŊ?x(NAãĻjģ€Aøë’i˛Ü›h1Ë!Æ1ÜzuĮ§&šĖxÂ^ö[ŌŖÔcšKkõ<ęA9,@ųHčOZĢwc¯<"7áãûCEˇQ*Ii‘âÉßÎ:ķëŽk__׎˜ļ ´N÷ŒĘ˛\ČcŽ2° ppĮkûÆyˇhZ+hÚâBĻČk_8@Čų˛™œs]1Ŋ•ˆeÃkâ ylÄMpëozō“P$´&bU[ŸŸ÷g18ĮŽ Zn¯>Ĩu<¯,Ņ-ô3Â~ÚDF$•/—Ž*•ë‚H?KĮ‰cŅô­6ä=´ŸjUlI3 ËōäŠÁÎÎI("ĐÅĩ)șDĨŠã&WŽzކĢiļ—÷öÖv7qĪÉ “%ķ–SōîėCWäķ´g=§ŗņ„ķ;D˙b‹o’˛ŗũŅf•7ÍŲ‘=>ö=ęņf¤ú`š°€­¤2ųr,„üá 8 ).§œ‚œšk˜DöžÖcŠ%–ádų­ÅĘĩü¸˜¯™æËœeK†Q´qĮ°Ąŧ;â&Ņeļ3Ų´ķØÛÛ<í{.íņĮ"™“—CÎ~é'œętũAol7E,Ļc•ĸRĢæ’<ĪŠëÖ°#ŧ€i-3\Îu?"O:9K• ¸tČÂôíÍCŠ­‹Pŧ[ėWžđžĢ|/šÖ9.¸q{/ĘZTĮČ:H…ŋ^ĩ§â-"÷Yļ´…ZŲC*šyØíÕ+ÎæĪåžž#ÔŖ2Ŋ´pĢA"ĘG‡…[Ė`,îL `‘“ÁĘŨxŸRļ–æ"FŽ™˛—%”ÅåņžęīĮˇąz܂{Rē’éäŧ…ZT ŧ×ÜwAåųdcaÁõ2IĢ0č×1ézĩˆšŠļ34^I%c&5VヂĘĖqŧ{ķTSÄzÄWĮ]ĩ-GáͧiļhúĘڋž\âÖ4\„0åÃd32¸=ĀĮ|īiēdztˇ ˇį°vķįi1…Éā{oJÄׯ°u ™t˙ˇHi°KĮæ‰ lî9ÉRŧúgÚē2MJe¸]J;4Úø‹ėî͕Įņd~”§wÉ[…Ô‹ŗoīYžjz¯Ū.āUN1ßŊgí_oĘšYŅXč;G^Ŋ*9 úûĶãi g>ũŠqƒ‘Î+VsJJ‘¸Ÿ|ÔČŸœöč3LŒáqč=i`¸ ŲãŸÖ…`fNĩwefR)o%Šâût6ū\O&Xz*‘Ķ'ŸOj§§ę:6ŸĻZÛ%õÄëm QÆ˙grĖŦ­ŗSœ„aĀęękZķG÷:}ˎSĮ%Œæxüĸ¸bTŠ xÃ0ãk>ĪÂÖ +yWˆ6ōÆĖbĒĻ=ÅBåyQæyúņ[Ģ[S;–ėum>ūīė֏+ŸŗĮ8u…ŧŗō¸lc‘Û?ČĶ_ÄÚ43´?hš $doôYq•“Ëo›n0€OA‘ëO˛đũŽ,S[=Š híö´ĨDÎŌGrÆjá-:e•ŸíDKæDė3æH˛7Ķ, ŅxÜ ļšÖŸy5ôvķĘæĶ>n"~$§nUēgõœŪ$Ķ‹}lŦŗ˛­Ģá|ŗ•Î;IŒcœöÚkCMŌâĶîn$ˇ3#ŗ´o;˛)cšļŠ8'aŨ‘Í@tM ;Aå˂‹€ne,žņŒļFį#֝Ћvš‚\Ā_lŗĨËl<¸ŲĩŲAnOn7gŸAœUqŽĀŠ;=ĩâ¤w?fg(¤i#æéŸĮĐ–2ÆŨ#A1Į9š]Ķ;)$–ä÷ËqĶ“Å6mD–yf6Ųäi$ÄŽvĀ'Į=đ:ŒõĨ \ˆx‚ŋ÷Ru]Ǎ c1ƒˇ÷ĮåÍhčw†ú+ĸÂMĐ\ŧ8‘ ãpĖÖŗeąđųÔ]ûL¨g*ŗž8}ųvĪķ wæˇ,Ŧ-lŧöļBž|Ļi?xÍšĪSÉ8ü)6ē Ũn&Ąõ›qcķÚÁoގ0ŧ“üō|ŧ˃¸6ĶÎNqíVŖ°Đä¸˙GƒN‘Ā]ˆŦš_,ĻcÛ4h2 C#,‘[^N—Q…Œ}ø^AՇd#“×ۚŠÛXŽįX°1ĩČĩQm—…æ Íģ8Ú¤`wôÛX4y.¤ĩ]2ÁmáŸČ33*Ÿ5@¤rrŖŽF*FĩđÕÕŨēÁũ˜n€Â".€)ÆŅĪEb@ÁĨ§aĄ×ˇcŦ¯--§ØËˆ^_ÍEscŗã¯ĐUUņm“GÃŲÍŗF$,ėšU6æ~€ú)ŪĒLtĨŌíh‰qREĻÁŧÃ#‘°“¸í\í88=ņZ máËP$ ŖD‘ō‘Œėö⎆‹.ÁŠVĶ^{{™!ēBĪ6¤Ņ*I*f;uoĻ äœŦÃ{>žƒFŗ‰îbŽwtž<ĸ>í§ ,w2:æŦÜĪĸØF¯koĻJđÜEĘģÂEMÜЁé÷qž*äŌčpZŪ™Ŧ"„†’ UWne# É=9;>ƒMާ9¨øĢízOÚüŗ[:TōīŅ$•c˜#aIBv‘Ž*=ëąŅoVūûSÉjÉ Ģ}žq!û üÜpy÷éY–šž—ö9ŸRvšēH 2˛Ŗ”21ĮC‘–Õ!ņ%ũŽĄu˛ĘŲæQ*ĘņY¸c˛X•\ā’ÃËvlr~^ Y‹\Ö~ŌÆYmÚ8šŨYcĶĨÁWÚԓ’ÜqŽ3Ō“o !.|1¨>“kfŗÚ’Ī•ķ$jŌRUÚΘė%›jī†n ŪÉ5͚=Ų•ĨŪĒŋŊÆ—pëÉ;ÜĶŧKŽ\K§‰mĘŦņÛųė4ųAW‘d߂NVT<Ž×ŊV–ëRžĐ47ž .î|™Ūæ 4Ų ÂŨļĢĢvvķ€ÄņŠ~đ\ą/‡īn.îUžŅã’áĨmí!ûDmæü#a“+ŒįbôĒĮÂW{?{ũŸ3ē[2D‘ˆōüŦĻ3‚§Ęddū/Ÿ]ÖüĪ&É îižĘ˛iŌ0*FŅŠmgąĮÅJu=Û!y`S|Đ˛Ļ›#ĸ]ŦŦ"92sč 7PđŒŌËpa–ÂŪ9ĸPb9UÄçSÆ=iöžk-^Úė5HčLj9epā!ĪĘW >Œx¨õŊK^ÂČ\yi,ąĀ?ŗŨ nޤs™7.{įŽÆ–KŊnI¯ü˜$ũĖLöÖĪhʎŪZ”>aã%‹)^ŖÛšØh­„åIáŸÍ͌ČŅžõˇ;[ƒ/=Ôė˙8ĢúFžÚ$‘Ûĩåžé‹ûĻYn1÷NKãpÉÎ>ÕNC]gˇ"‰ k¨Ôą´1ģ) ŧĀā-Éې89_š{áz€ĐīŗԖ2In ė ṕ—Ŗ ‚€nįĮĨtuœļ–æ;‹ųī›piÖ0T` Ŗb¨ížyä×i.ĻÚŽ—uu§Ę&d&œÚ.UL2oļåq.ۘáŊ vEÅÄŅ\ĩɸ$\Č#ķĄXūLüĄv“•ĮF<ŸJÍĮ”ŠMË~…›ûH5ėnT=ŊÄM‹žÄ`×|#ö{k'šúÂ9-!C-ĖļũeŦĨķ‘´eHúÂēfi-´{É-Ų…Â@Æ ‘ų‡paqĪ=Ģ–]JęHDŸnũãŲJĶĻą +:Ÿ‚äę?SWZ‹Ã28ļž ũ=ĸ‰ÔĨąeĀš7‡˙m—>ž•-—…ͧ’ĸâÅÄ $d›Z@U@f%ūđÚ9Ī ĒvZŽ´šz-ÅŊėĮi šív*žcFUƒī@Æ0vĩ5o|@m<ÖŪ{[@?"" JĖ@ã/ˇ €sĀ釯q’/„ŽVjIĩbØwY“ķ}ŸėåŋÖtĀ=*姇§´Õ ŧą“]VĶi|Âąc;¸ nũi×ōëIĨé‹i%ߘŲRŦy¤í;IBvž 8÷ĒksâOĩHõO65}Ўë˜Jū^šŖVˇËoáŲŠöĶu˙´<Á%´ĒË<ßx”†÷SvÎsT¯Ü–i ĈĄnī”Aˇ`Ņæ &…^Fā͞õ_XŌnc†Â:ÕŨ#Šo™ŅdV‘™\+¨dĀ, ĪŨã‘ĶŽ4ī\ŲáwíÉ MŖgŌ‚¸ •d<÷yōuu]Ô5I%ˇģtŦÚ8‚^4")q ÜĘĒKįrã`¯ŌŽē°čH<%o1”Īqv Æ˙ĩ*2m‘%`ŌG’šÛ¸d†‘šÖĶ´›]0Ūc‘<ųwČZFmÜpy'†+“Ôt/ÜÅpņģ!qpŅ…Õd[ēG°äŦ¯ĮNO­t´ŋŗ†ū+ŊíŊ’Kb÷-10š<đsÔÔËáÜfį‘ƒĮ=úšĨ°z ŋ8ųŽF~‚ŖĀ˙bšdĸô/ą ŖëŠrd*ĪāxĨ^ rOĐŌPŧú ŌŨL„ š€Üzt§†^T6[éNC´œįƒQÎŦp3ŸĶšĨŖ9oŧHú82ÜG;]ąá\íÛą$€šäžøŠĄ×m>Īįē¸"8|É℄&Í ķō“Ŋ[ā›Ä6sĨĩūĒÅÎC"°•Ô*W8SÉÁ<}j•†›ĸO kŒÁƒ‰œ)TÚ̐Nwclg ×ĨkxÚĖ\ŽÜŨ 6ÚÜ7i,v°]Gsöy%M(…]Ķ ƒ×r;ņÍ%—ŠmÚsÛMöx^Yb„ėķdXņ=˜ų‹Ķžĩ,&—‹åá]rn_•mĖŲųšå˜ûdâ‘U?įRÛø…ŪđĀļWī;NBە(ĸ8˜ō1‰Aäį“č+*+K;ĩƒû>ÚŌÆßÎ Ü´qƒ"(>e‚@äéZ6vē­Ĩ´ŗi×כ‘šfdgšPœ7r[ų8õĻė2Qâ¨cˇ¸ØŨ)Uķš1´ģĄ$į ˛O˙ĢŽˇuxԀWžsΧČL|=kkm4ļ– Ķĸ0ĀŽ;›¨ärĮß'Öē]]5ėßû-í<Öũ••—Í?3d¯˛r~ĩ2Ûa Ģ_[iÚl÷ˇE„č]°2xôĩwâËm>ŪåŸNž2Z´Ÿht@Ä5Ÿŋ‚6ēž ü+wQH œËyä}Ž$ķČØAę<`ôük˜Õ!Ņ-ladŌíīcŪ(Õ2’Ãs1hŠíŠ]Bēxž+[y&ŸOēĖ>y•7Į”•Ü~öĘĀņčE%Ūą1Ōõ™,­MšĘąÎdR Ģo—¯FzņĶ4ũFßJˇÔ>ČÖS6ß6cpGO åŽĶĮیÕĨoŦ˛ŗÍĨî–5’B Ŋ)cüCÂžĘ6úąŗ mŒķÆoÖ)ޝŪû¤ Vã#ŖĨCŒÕ¤!4ÆķgHZĘÂXžEË8ŒŒsÉŧ[ŊšđЎK¨ŸFbĖ L`6Å >laYN{ĩ,VēĨĖ)œņÚíK€"L.ΘČí×ڍ: #M^;ÛŠŦ|ąmē†I–ElyN#'q÷”ŽŊ˙fËWžâ=.w¸[КÖÍĐŊၠ’ŦĖÅÂ.” ´‚ÖēwÔ<>ĐKuö4@]ŖyWa• A>ā‚}š¤Ž]ÜËRZ,ŠWp dąQ‚F Ũ1ß4¯nƒą€Ū,ķe&nBHb] I2Ēā–eážđp~nN+gEž öx>×o)›Pŧ‰Œŗ’áVIJĒđs€Œ(ĻËĒØÚëMb^Ú;(íŧédSĘȲ*íĀ­ÛœŌÅâkfž–WēŠ-6"W>CŗIû˜å2>ę'9‰Čĸ×[E|bĶÆŗyvPĀÆ×Ė/!˙GķžDeq†Rƒ=:ūv4˙Üߛ‘Z´$UŪwņgOöVĪŖtĮ6ŸWŅmõ{ŊBMJå›bZŖĶ=ęōîØē÷­Åq}`aˆÛ”Ü ‰:œ~÷đũk˜ŊŅî<ŋ´^ë6q‹{Gˇ’æhōŧˆęäŋ \ĄÚˇŧY{{ „éđŖGs7•q#[5ĀŽ2­’c“´{g&šĢ3|`˛?cšáŽ>ȨLY:å˛>m˛m˙!šŌ1טŽwËÉĐŌ˙„\ÍyÄsØĨģmvHŦūR|Š#;>l`‰Aī÷iú†‹đ­Ļ‘qŠiļ{sŊ­BŖŦ *3|­– į?ZŠËPņđiō™.EœĖ˛$‘ÚFÎPĮ ę0K†āásęc[j1Ė‘ę—dug{x‰Œą‚ !KtlcŋJ­oĢ fŖĨĮÛĮywE.SíOlWcHSh,[*’8Āį­]ŊKËyEŨŠy7Ot؞ H\ŒīãīųzTfmbî:ęæĘčÜŽžVå i…”K`:ŽÜ c4%׈ɏrŪ2‡]Á∏í6pÉ ņŽG×%ßp5õm%õKë+á%žm7¯—=ˇœŽŦPä Ŧ ~•—‡Õ×ûBĶíO ~P˜`ŅLŌĢߒ>m¤Ār*[iu¸ôؕžũŸíΡ24QV,6ĶÆÎМíQXËâÔ­n/b˜HRŪ9„PEŽVO3œāė8Ī\ã"…q đŧŋfEŠĀíûŠ"eĩų2“<ËÆūAķę;StŊ´Ü׀C°‚OFŦhWląÂã<}îOŅnĩõģŌãģļŧXØ%ߘ! æm6Ū§Ž;Õx‡‰'†yÄŋŊ´yŖũŌâT›t›#1팒z{Šz÷†“ÔŠö-^9ŧ*f nH LōĄwBZA‘žžĮ6m<'5ˇŲņzė°-ē…0Ÿ%œŒ|ÜgyéFŒ5ĢVĐíZŌō;x[°^B“’g!ļŽĮ§Z‹Éņ2]y˜ŋŲæoØĪm‚ŋjû¸Îy€ū`wĄˇÜ ÷ū›P†Ę&Ŋp`Ŗf1(,IR$B¸ēíá€8Éâˇôk­7LŽÖæę;‡ˆa^8|Ąˇ°* įÔņŸJäŽ[Åf™m×Qk§œŸŨŊ°DœlÜKF88íīžÚŌ᧡ß%ŧ6æÄrf 1åI€^õ2Ŋ€ĄŽéįWŅ/´Õ•bkˆŒeĖ{ögž2:zÁ¸đК;‘öĨquÛlĒ\.'†8'=OļŧY<Ö~ŋģĩ–D¸Š-čČĒĮ‚20ĀŽG`I˙ :XŊ͞Á#C“ŧĮÚ­Ž¯å˛ôųw(ĪzqŊ5Ë ÂęĶĪyŲâ‘`Š2š~zqŪĒ\xn X%†+Ų`ˇu‚%.ˆ@u™œG9w#oCģĻŧAĪžN@ ‰­œ“¸> ųš##sœæĒÅâŗī™/üՊUK¨ĀܓąlüŨY6Œúg'4|ĘEû ĮpĨMõÔ~jēēĮJčD-´mãåQô4\CqgwoęĪŨ\ŗI†0Īō*‹ˇœ’œņN*´Öū }Ō+L2ãĖA:&.Œƒō(8#ŒäuäĶė­5Q{g%Ė—L@Ÿ–č áß`ÁߔdžitÜ !đĩŊ¸’úû΍ŖÚėb' #•UĪČČÅE‹sĸŠnnŖļTBŽdCˇlÛüą‚‚2>lđi5ĩŨxē+{;—ˆ$1ĖØše,ŋ7Č8m˕᧰ljĻx‚k)ĸbŒh”¸]É|rC#ßGîûŦہä‘ūŅx ģēĒʍžU”•8ĪßPFOr:qPßøxŊũ–VâkyævģĖ͖Ė_8ƒëYĐÚ^ęm5•čڗR#AöŲ Ë‰ƒn—€FČ<ņÅ]‹ÃZŠ\Ép#ļ ö˜åBoefXÄ2š+ÉČŨžųŖÕŗ'„ôë¨. ¸7†ŪyLÆģu@ĒHņķŪĮž)ōiZ^•{o~ķŪŦĻwÚæg*Z@ģƒcĒ’Šyã"› Xj:FŸkd˙ehŖiLØf/‚ÄĮƒ€ ĮŪ8ôĄ~â8•`ųÁ Öŗ”¤ļcŠMęd hO5ÄQĮv† ƒrŨJĸ<3:ė;†Ülc b:TĐéÚn-Äļ–đŧģLĪōã8,ząäōry5‘Ŧøeī#†!:KRîû5Á}Ž›6€ÅH%”ō˙ŽD“MŧžžāÚ<×fŽ"˛H71É'<0˜ü”¯ˇŠvJZloŒsĐuŠöCū Ļą”œÁæ­ī>ĩËĪÜŌěˆ ž;S˜dŒgÚĄ`iô=˛9ĨfŒtãšŲŗ2hبÆ=Įđzw=pjŖ AÉ }*P§Ëäķۊiô]L_]6§­ô ēžÉo” āävüĒ›kÖ§mĻŠŋŊŪG\ Ø#wû›ˇ}Ä<ã¯ĢÚŨ••ÅšIŠŨ¤čáœŧŪZ‘€O­Gs‡mī–æîM-n“jų’”Ū0jäķœnĮ~ĩqŪå9G‘GŠ›oĢO¤Ũ˜Z $ŗŽËÎōÕâÛĢā#’6•ëžŨ*ėū$[x™Ž”îUæF_1F<šÖGŽKO–ĮEƒJ쏞Ķôˈėâ˜yqE˗ģ‘×õ¤ˇO$RĩÅļ•m;%.ąmÜUd úrAÁã>•wO[K¯ąŠá4ö’ę{‰mĖz ßđĀ3?å™ĮôëT´ŊFōãÄ ˛ÖŌ‹ŸŨŗ/î„R„pš'~nįŌĩ|­ãk}ÚsGŧĖcÛPĀ,GŽlõį5IæĶ–ü(ôÁ M=Ņ`›|Âęv[1œō:IZÛ øĨNKŞܞ[Ix‘‹…'ČEF$ú>|žŨjÂëî,ī¯žžU´Š{§É’#/ JkÉŖ ‰md‚Á!„ųžcv—`9 āžH L%Ņ™î#-Ļ$ĻbSįq)O˜cœ?'ŽE=;Q|^Ėg•+U 8!nģH˜}3ĀéV$ņ:ÂŌ+é†/'x`÷+ÂßÎĮŠį5iãĐF˜/tĶi(Ûį2ĻĮŪĀ`ž‡-Ž;š‚<1*4ą6’ë j ĒÆÅ”Qė2Jõîģ“N×ÅÆĨo§žŸ î҇Kû[ĘYąŖ‚¯øQŖ c5ĩĸ™îšÜˆ¯•_4EģGņ7#Žų8¨ī5-#M–Ųí×K|ÚËp˛îU‚H…!‡>˜āæ¯nŅåžkuû'ڔ´‡÷#9K`㏐œŽ3ڞ„eKâ¨Å9lŲšŽK{ 9‘Ũf)ō€ŅžĮ?(îElø>O´h)rdšw’Yr.gÚå6† ŧ|™éõĒö–,ÚKjË+ŦN°Ë@)Á$öÁSÆxaõ­ G‹Z$í6fyw6xÜr@œ§åœåIč1úâY.å¯íāšļUĸŸnÆ9wq×ĪÃ∧"ŲB ˜Õ€˜|줒3—œĮpŨą]ĸ!kYžØPÛygĖķ@)ˇžėņŠį ֔זBÜiíŦP°U 3¸ū'V\PļV>*šâÚ)Ą˛ą"KiŽSuč$Ē*0¨y;úvÛU[ÄĘ.Q§1ˇVc~Z e<ŧ 9Č­4Ô´6ģHâžÜO#ü›cĮ.H8Į%Xgšu¤žŊŽŲvÚĒÉ8¸†)ŖäE?0ÜŠÆsOä4dęZßö~ĨŠÜŋŲekI<ĢTk§^a]€c'æäú˛\—_G¸FWĩhãžų"F ppC`‚ëÛLk6Åæ4Ԑ˛ūXä…/ĀÛČÚ ĪN*OíÍ=āk•šcrlcä?ĘJĢF܁ĩ”įĻZ>@sCÅW kÔ/¤ų¯˜B—cˇ|CičCeÜwûŋP&ŋÔäŋ°ŗK˜ā•^âō)aļÉLk2ÆHäā•CŽy+ƒ[m¯XŖÛK™š~ĖänWØØãŠ÷Í%žŋ§ÜΑEö­ÎčģžŨ”|傞F,Ŧ>ĸD|^%—}žÅâ’åS䷓ũYō˛I'°‘ŽyéĶŽmâa¯ĄĘBa/tK)2™ž'įqÆĐķŽ‡ņ­ÛZËM¸‚Ōņ卙 ‰ ÂģŋLíF>Øį¨ÍKMdĮŖqr—,#ž°B‘‘!Ũl/ŽYŽ}*W 2uĢĩÔõ蠂A @ķ[“a*ĢJ¤ƒƒ’$ Ķí×5Iu˜Lō3ɏû:Xˇŗ,‰–'÷›ŖĮ\Öäž)ŗ‰fÍĨīîb–f0„,0H9Ċy÷¤ĩ×m//ÚÔÛ]C(YŋքÚLr*8Ęą9”úiü„ŽWUÔu9t‰ą=ëžēlŅ4y•žbĖpĒĒT×9ÁŠü3u¨K ČÔ>ßæÂąÄ ¸‡ ŒdI€d-÷‰í‘ŌŽ_x’"š“û>ōH"¸û;Hi7˜Č˜ÆqܙƍĨõô’-ŊÔIl™"pŪ[cîœwŦĒ7ËkGrÚ¨`2 g¯Ō§Ũ Ļ­ĮFR8Ŧymíų×-[!PĄ¸^ŧĐøû¸ãڌŒäœRgvØŽ‹†5 œgļp)æ#ģ<ã=1BoįÛiėŌyēŖÛŠĻĸ+˜:ö—ũ¤l6ĖđKo+JŒaYJTņžrlU$Ņ|›ČŨ.Ņe7Mq˜Hųߕ-Ÿ˜~ņļjΉZú]( 9įX›:$Œ‚Eߍß/ŨĪZ͕uļ3›PGgšU>lL|˛áČ$p}9­ÚÜ[zfƒ5ޟ —ŗĘ÷ŠļG؟/îödqč=1M“ÃĪ ĩÄßmģ’M‡åŸŧũȈŠį!TũGqY÷Qk§Y¤KuÄv˛Ũ.<Ũɡ9?7ģž2jŌGĢ­ÔBTŊhcšBģ.#Ė NTĻWŽGâ5]@K-u (n¤ŧģ. VhĐG…- FH89áúdzš„Ķ,W1jמh ˛hR  Š“ĄqȕÁãˆÍOĒEáá–Ž÷ÉmbC*ŗI!Aš<`įëŠÎļĶõ;oąX˜ī ­Ŋææš+øŠ0 €Ų8rĀ4šŸ5‹äNW/\čūķ}õÄbyüÄ!c $9'kíŨœäõãéÅO.‰$ķ‰QŊęĮÆ&¨'búߚ˞‡^[Ûu¸KŸ)íöĀCm2̐3œҟÃÔTööđĩ•ŧ‰?ÚāxŒĒu  D™Ī<3úÕ;ŽĻeĻĐÂčKĻ%õŌ"Üyū` ŧ7Í돯ījŠ˙œ@ąûuŪėąCļ?”™ŧėãfĖHÁČÁüj”–Zô—NdK…‰Ž€Gzrd€āäc$ĄĀĀéĀ4ø×Y†įIūĶš™$’HâgŠä…'ėĖŽŦŖ‚|Áŧ7'8Æ)Ģ÷kÍ&ÆŪOŗ]jŗÄמdIbC"*>Ņŗ=”āp=…lÚé6ö×?kWšici%daąĀ ĀÔķÆp2pkœû/‰ZÅĸUœ]¯–ÁÚ÷Ŗ,H…ÕŽ ĮÍČôŋĒYę˛j׊pQ ;â˜UÆôPrãœãžFy4üŽ+CaĻA¨Aeė°]ÆķLЁX•r¤ŠÜ¤`˜¸âˇm-aą€Ŧ*čŦÆFß#9,p:ą' Ę>‘Ģ-ËM2<Ģ+:|U›6ņ $ĪĪ Œ`ôę+cÃqjVÖ3&Ŗ’˙h‘ã>q”ųlrŖ-ČÆqŒžŸAS'Ļā‘oYŗ‹RĶ.të‚â+ˆĘ9°Ø>†ąfĐMÍÍŊĖēü“Gŗ22l1Ka;ôĮąŦyōé7Ii“rŅ‘yy?īc­s1éúęŧM$͈䍰/ܨ ;‘›1¸įîŒö4ãļā>=Ā^}˜]jM„ …ĻL˜ĮĖÜôäĩy´Xŧųw=æË›•œ"HÅІÜ0>^UO=ĮšÎTZ.ĢŊybdæ_JZB!xØũŅÆæV ÁéMm SšÖXĻû0y#‘C­Ëŋ/n°įžĨŋ­?˜Í”đŘītÍšŸ›†$ąCîŊvŗ ûúķO“Âzd–­ ‘ÜėČa‹—\•@ŠIûĒ?*–ûM–įÃŲ‚#•‚žklpO͍ÄqÜV,žģHîVgČ\lËíqį‰QųBå8蔝æ#dø~Ôyd‰ÃŦ˛Jo$V ää6pHÉ^žÕZEˇÔŖĩ%4‘SíRŸ•™9ŨΜãžyĢÖ .aäĪ%¤Vđ*,~Yl"…‚Îyį<úbŖ[ dÔcŋŽæ-æ}Ā…b=¸ÛŒã§9÷¨r’ØŌ .÷d×:õã\Oy7&gÚānJƒƒÃ°äw4˝7Gą‚ÖÚKi+ûČĶžÄ¤ĄrŦ›p F*sĀŦ#Akų/§Xâ‚HoØBZŅ”Hå&ēn'tŨsZ–žšŠãO¸{›GN›RY6™2æā0“ķPyā 4Z\ÉŗVã@ŅáÖXPI¸Ŧ_Yé_e#ėfDÔ.>ÆŌÂĀãÎ`˛ÄŽJŽq“œzd[ņˆúĩüs a‰žĮ5ą/mŊĶ~0ĘŲHÁāį ž™Ēw:Dë¤ZZ,đFĐŨ-˘íHBC–`š ’NI'ŠõŠŋ˜Ņ^î ;JĶĻ”KČÆBūY.Ü!ÎzŸ˜õ÷ĢÖv“ŖÅg<¤1ˇ’Ā„aü'ŽU|',k†ÔķՒŲOdc'0§NHĢĸđƌt˜%‡í(–s( 0 (į#>œžJÎj6ÜÖ:%´8ųÉ8ĮcÔ~T¸+éëÍCæŋ÷ķƒA{•‰`ĪŅ9ß´(8´dg'œS[jđ d֍´–'fÉaßļ*RĖWÅAķH ā(#ņĢ ēķĐÕĮb^į=ânčRępiâõ`aæF%Ų…'ĄĮášĪ‡Är T؈ėVâKÁ‹%é`ŋ¸Č_—=K ` Œ÷5×Ŋą#yPĮ ĀúTihža!lį=ķZ&’ŗD}ˇÄĐiī4:h7QÛČZ;ŧ¨ķ €ČŠEĐļ;sxx™G„äÖ%KD‘ĢFe*ŠÂM¤ĮoQqÁæē!eį0û¤(ųyĪĪąŠÂė_,0c¯RrbŽEümå™|Č,I@ã÷WY[ ,H_˜6sĐUũ7Å1Ūë‘ir=$hFÜų„8T;zržE?†ų´…‰ •l§ŪĪ­?ė*bd$ŽāTūR1Æ:Rŧ{‘­kp§†úÆö2˛G É`"RX ŗ…FNqčzU]']‹WĐīkÛfkkP˛a‚NŒæwÚp œ•#Œ`ƒÍoZiVö6"Î l‹€Œ7š9'Š'’OSV–ØĢHëĖ0~^M;ĢXGŸÚxē @ē°’FHž{ļ#›C&îI,ģx$ú֍׉'ž '´Ōíná‚Ü܍ėIR YA2KmƒÆzWb-ČÎÆ$QŌ°Û 'ˆ?ĩ&ēi˜NÉ@Cہ&7līˇ×ëTœXŒ–ņő™J\éŪũŸx¸ÆbŨī¸ķs× éÎFŽŋâ(ômM-7Ųōc•Äķíl4ĸ/Ā|Āūž-C(b@Á'§¸˙Q´&I›Žp8Į?ãJņ‘oyrBÁė<Š^GyØ,ž[HŒ"Ā$ãbą<7įŗá}hk:lŌ0ŒÉō@æ#•l> ƒøÖģE!*Ü {sŠ“ ÁĀ ã¤×aŖ3\ž^‰¨jAäļļyUáX¨Č§Æšƒã bžō"l&0ũĄG“¸ķæ#œ˛@įä8ëĮb!”ŗn'Ũ"Ã#Iː™õ"ˆI[T ålŧPˇZÅĩ“ÜXÉæDĖōĀŽČ¯ˇr[)PxĮc†íTt˙Ũm°‰­â[uŠŲ'Dŗ”m.d`äãiT'9áē÷ŽčÂdp 8Î9#Ŋ9­€WTbC¤õĢæ]8Đõ;K{ŗ æāmVs§Īû˜Æ×fĪúÃą•€Qœ)ãĢúžĨwyĖ3ĮsqFÚDŽ=2P&]ј8;ˇüœ‘ˇž™=ˇŲ2¸Vb}ڟ˛Ģ.ÁœŒ“’1ڇ5{Ø RŋÔŽäUš9‹Ãy(ÃN‘€")ÂzHšōČÎ2ÖŌõģÖÖūČö×ĐiëfJĻēÜ$dāį†~=WqĪ\–ŠĖIÆIųŠÉnÎį'§=}¨æBšÆiÚæˇŲ>Õ ã&•NžØ bÅvEAÔ}ãŸhŽ|SĢ%´tΧ‡yOŸuiåáG’A`ÃBŧšœ¨äāšî¤.˙k™ūUŸĢxrÃT¸‚{•˜IÕOĖö_ΰlŪ ČŽBN0A?Z‹8ĪuS0ųAaŸNبü˛\6ŪĨo"Pôpã#8ę˜Gĩ9Ā=0)Š…ääÔéžwĮújOPu!r0F=i¤œ¨rGĨPH›×&’ ĒvāŽGĩ&4IÎCaIéž)âVĪPA÷ÜĻwzuχH×î=l˙J.$,Į§äûSŅ›ŋ5_q`Ų\z Ķ÷ŽUFŌF=)Ļ+KœvĨį… >ŊqPĮВ:ûvŠÆęõ­¤1˜,qÛĐsOTįˇ?wĐpųĪĖ9āSŲķ(Alõ?^jR  íĀĮ§JM„cv;ņIa@ ņۜôĒÃAQÔdn GPŋN”m]Ä7?…ō`qÅ 7mį‚ORĄÜ ‡Ā=ķH_ŽЧ†O×ĨHr3øŌį’'ˇ­FšCgę8§.œäˇaEÄM ŌdË¯zcNüč܏Z.+ÜčŖ¨úĶ9RIÆO`1Mi#åÉ9éP<ģI-×ĩ&ĘHW›#ŠT‘ņĐāúf•Ĩ;7ciĮė*Ì7^”Ž‹HrĢ3ŒdŸSÍY„c,H5l=9ã5:(ęĮ#°Å ,ĄÜ1Šs€ë´zlEŠdņÍ#näävžÂ*ŨgžpŊ€ŦũŋíUÛĸÁIÆqŌ¨n>†šįšŧ6'~ZbũãūéĸŠč ‰ ÁĮJy'_áQK  $įšXĀÚüē(ĸ—@&_õ?AÅC1"9$uĸФ"ž‘#ËcHėės’Į$ķZ$ Ŋz(Š{"}ņôŠ9Ī­Vਆ8đxã§ķ§ĒŽæāuôĸŠb%Eļ@§€7t(ĸ˜™€IĪ8"•žëžāQE$ß~3ß˙ÕNOÔQE aÖ\F)†|zŠ)=ĮĐlp}?­ úš(¤ļ¨ ķÅW›‰8âŠ)(d™dÉ?u™ĻD~göQR÷-l]ˇãÖŦ3Ԋ*ú’Ëgf} #pԊ)Ŗ)&!“Úŗ77÷įE„÷6†Į˙Ųleptonica-1.86.0/prog/breviar.38.150.jpg000066400000000000000000004360301506303110300174220ustar00rootroot00000000000000˙Ø˙āJFIF––˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā„?"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ætŧČF⺃˙ŽŠę­# ük™Ō„āëôZęlIž0p2}xu7=¨ėN>é?•:(— ’~Õ.īŨãRzXĸڇ’NIįĐT$Áˆ¨ ļZRƒÔã=;TÉ*HÉČæŸēā`gÖĢ”W*Em´ī#–éV~ČTÄ3аˆ‡ĮŗéO‘‡˜[iÜO­1HÚnØÜ`¤X1„ ÆH5j8åNNNJ Č$eŊ¨åbŸ’JŽsīQũ“|ĒŲÁ\ķWŠt;Ps•žž´r‡1 [üģŊą’)V マjr¸ĀÁÔ¸ųÂäįų~4ė.b ‰ņ÷Aųˆ˙ pƒpúU  )ä“Ôûšz§ž;ĸæ)›tP}iJĀČĪ×5qŅZ&žj¯mˆĻ'ÉŲÂŋ÷…ĘåIpĄ ãŽ(1ķ’ “Ö­ŦDpxc"ž°…\ļ?N#æ*–\žĀR0P8~˜Ģf0ųöíLh—?‡Z,+m,PgƒŠB#ĀʃÎxĢ%FќtĪ)÷öÍ •ŧ„gŪĢ‚F1úĶÄYū!Ā'­YŽsČĮ(ÛČĮ^ų4(…Ęû 2})ĨqŠļŅ€0Ŋ}3M‘˕QŽ4ė"H8%€ ũé6#Ŧ#ģ×­ŠeÎŪ;P\„ĀÃĄįŌ—c*¨ÎJ´Ąąœ)rM7/Í֛BšSȁ^¸§˜rsēŦĀÎx)B~ņFŪĨ`šQŖa““íLUųOŠ?•\h8Ī=ŠöR„ņE†™WĘ$đĮŒRĮz팊ˇåü2FiÉĀqģ?uqBŽĄrĢšÎ1ڔB~cšŊåžũDąųJŀ9rF} ;X9О!#֔ĸ,qœŒûUŗ”#7jX`;´Xw*9<į°ū´įļnۓV”t,p§Ĩ=“8ôöĸšåžx“Ų}Ĩ## nëÁĀ­$ÆG^œF98ÆqG(\Ŗ˛ĮÆĒ@^NzS–‚1Ī5{FĻiģī14r‚e#ņÍ4ÂA{úÕĶߜįĐRųˇIĸÃæ*Ŧ9éúĶZŧ }*ę/^xôϞr=8Íb „v~hōw˜ōNxīVBä`ô§2‘鞠 9C˜ŦP ų‡'šXāŗ2{ÔņGį yWßk•.Áŧ öŖ”W /ĖHĪãQ˜ÔÛ>•uBnO°ЀgÖĢ”.U1)%sĪ~(6ę01ôĢb?“‚:Ͱ 8ûØíK”.ĘfŽšīĮ˙ZƒnT:tĢ@)g$qN3ÜņG(\§öpØ=ã4’ÛģH$Ú­•8Æ8Ĩ)“ˇ4r‡3(Gf‘&Õ^zōI§Ŧ=…\PO;]šn qéE‚å˛ōîį¯4ŋg8ÆjđQœãôŖf_îņK”|ÆwŲžcœ|ÕŲÁ#ĄÆkXĮÉ$uä{U ī+Č#P"CˇqîŪßJ,4Ė™ā$œrąom0Ø s]\Đ,gz˛.âF9<ĐŌØŖ“ĶĀ_0ī°Įå]=šy_jåôõ šAûÎįęu–1ūč8\qJ{‰lXLmęHéŒgš•A-ØölķžMAbc†$āã4IČAˇŋŌŖWž=ēRŦƒ'é×ü(M0°G´…‰Âė MÁō]€x#ôŒ2ĐwcŠW#€WōŧäĢ‘úSŅ‹o䁑ž? RŒäZ^OsíO îÆ•ČĐüį'ĐqŠ$rĀ.{TĨwš8éųĶ]M˜ĀôĻ-Œ’;Qģ;˛Üúâ…\ sڀHûĀ Ž´€ŒĢ0 ­HŖhtĨD8Ü9Ī­6á‘8™Ną¸‡ļ~´ 6{ŒŸ~Ԏ0P2:zĶŌ%OÎX9 Ō;#ĒŊķԁ‘’ÛČØŨp)ĘÃbįŠæ‡'aĪ8Į­FģƒdíێôŽ4?’A=ø4ĄđT“œsAN…ąŒsÍxÉäúcōĻî!2ÜPn§dĮ>”Ô‡<–9âšoĨŨļĄlé<‚ ’#`ŽËą—‘ŒzįôĄˇcHGØęÔ`ã•(?(ųy_n•ËjMŠhļŸo7ņKāŦ’&3“Āõ­yĩ$ƒG{ã–O,8EīžŲĨptßMMMƒ‘ˇ“M{‘ŸJįŋây{ωŖēXfu.‘Ä€qے _ĐuÔlƒJ¸‰ĘKōíäwĮn)ŪîĀé´ŽiIķ/CgœÕ]ĨrHæ˛ūßzž'[)§ŒÛ9ې˜ ž@ÎzŅâ-FōÖâÎÚ͂´į qš‡ /„ņRėĘTĨtģš/0Œ¨#ƒĀ÷4ÕmĖĖ3Č¯ŪŠkņ\B%MņírÄr1ÔâĄđíĩÄZ˜% $Ęd‰]{‘Đū4XVŌæ˛ĻŲQķMO´Œd’ÜœÖ>‹Š\ÜNÖ×đĮęrx§ˇZšÚ}J_˯ÛFĨļ„Á`zŲū”ŠtŨÚfŒ°ãĩ#&Ëk/PžÔ­uX­ [p—yNČ[u úũ+Jęę;+1qrę3ŨaF„¸5o1Æ>=ČįÜāĢĀâ°oumrÔ}ĨŦˇfT œy$9Į8­Øw2oqŗr‚8ägR AÅ]‹î¤9ßÖŦ*„gžÆ°aÕO %PaŽā˙ÄpGjčî‚;ÕDR‹Ž$YPrAĮĨ<Œķœņښ¸û gžš§'ŒdŽ€ÕĸI%vô…#=zbĨ8 8įļ=)ŽxPSØ÷ĸĀB 3ķÆ9§`ōœŌ•ØI {į §…'¨āŌČ'žÔF7`äqC(Î9$9¤v ,p}ûU„­Á ‚Oĩ<õÎs“éPDˆ /RšįŋÖĻ’ėd Å!ˇ$sÅ<Ŗ$O^zRēHëKĘ)ķéš`4§¯n)Áąƒšb#yŒU€\ŽŲĨdōō{{öĨq ßĮcŪžXÎ=sMÎ1ƒ€zSYXģ0Ë.1Ô~´ U%ßWÎIŠģ´F0 Ĩ;‡ąë@Ø÷¨&ûģKxéR”eÚw’=JŠ`AŨÆqS'b‘ryųš>õ…uĩîŗüCƒŽõątíŗæ#Žĩ„ėMĶc3šÆ.ėÕ-.sÚrąØ1Ž>ŋÄÕŅÛäĒō2H=yāW;§Ëƒ?™Ž‚;e™Uƒ•t`8ĮÔS{‹ĄĄd‚r1´`~8ŠĸM¸,NXqÍ2"‚6b܀;wŠ@%ÆXŒ hɋĄIHSņōíĮAÉÅ(Pä“ČōiY—?Jb+ų`†Ā%ŗ@FĪž:ŸéVY ųA ĀĀ~´ÄW€Ė<ŸSJÃ¸ØŖ1€ÍŸģĀÍJw¸ÎxĄW’Ėä÷ĮĨ;@õ÷ĒHW1ÚGjĨHŽÁĪ…<ô÷Ģ’æBÁ[2*Ģ*G.Fxž´­¨ŅäBHŲc)ieŸ§æ^ž‚Ã_{‹kBîY¤ōĄÁĘfå‰üzŅQ!Šb'ëJ#* ĪLVП*hÎqģË.F023ÜՈ–Ū´Ā­’0OqRĸ’WĀô~&ŗą@įi\ą`;Tˆƒ%ƒũEE–ķˆ?08*1ĐķÍXd8ĮLzž)ˆE9\īüiøĘ6ÖšäöĻôPšŊ;R™›†íۘ ‚<Ī#ķ—b*P™ęÍĶŽô¸T]ĄGįԐy†bĀ‚žƒĩ¸Đ2s“M| †äcîãŊJ]‹áPy4>O$(ČīE‚äAĀĀ6D3FF'#Š~NT šF =č ãÉËC,„€įš¨íÄæ g ŋ';F=ę\íeŒįŒ÷Ĩ*Ã*H\gņ c§ŽÉ>”(Ū0Ûô •WŪ21øSƒ¸NNFqĮS@ĮmŨœã§ģ[ü­Į&–!‡ÉsŒzsC°đ6ž:õ§a C…ÁŽ_Å÷1cmŸŪ D¸'o=ũ}u ÷ņŒĀúPQ$‘U• ÃĨ&ŽŦ]9¨K˜įu{û]SNk ’ynUNĪ_ÃÍ[ŊŌf>60í‘Ō pë‚ } m**€ ô§‡TŒÄIÍ%5´ĩŦaÚx‡MMŽ%ōį@ĸ#-‘Ážļ˜Auw4f/ĩĖeDaČ^Ųü+]`ļyšcDˇhÁæŦA\ąJj=ÂUšK}ÎVęX5­E-§O9ŨÁd’>™ĒWržŸi}pÁnæ¸ķXĮœ_”`ķĀūuŲ KxßzE66’ĒÁ÷ĻIck4qÅ%ŧL‰ĘŠQ…úqIÁšFŧSZZåÜ2øzY!‘9Đĸ0=IūŧSü7 >ĩ]یjŠŽ„zúVŸØ­ĖB3o’œŦaFú~4ĸHâDFā…Íw3į/*1­āMJÖäG"}Ē ™<ŠCœĀ˙Z4[Ģ‹Ũj÷ΈG,,$zķÖĩmtÛK›Kxâ-ÁÚ9"ŽG{Ú]пߐ(QęSĒĩFˇ4Pëš?™$q¨‘˛Y°Gü*O@Īeo2§›ŊÂĘëęqúÖŦš}”ååžŌ]Ā'z~Åōüŧ/–ŸJX•UîÛĄ>Ĩk-“\™axU7m ØcÖ¤7ŧ›Ö#ōŧŌЌãëM:“5ȝŦĄ.ŧ øtĢ7ļŨÆąÜ@$@A Û4šXsCK…ÄsXÛézœĶA¸ĖŸ Lœä’IäōEv1˛ÍûđYT†@úM„ą,rYÂcîĢ.BŸjąo6ąāDDî¯AN1°ęTSK¸¸ÎTGSÖĨL9ã'Ō‘NķČĪĻií`=ĒŅ‹`W9ąƒŸzcã'žj@ÜOÍŌŖ#cžAú L Ŧ@ė}ŠŲįiËĐf ķ4#ËÜÐÖ§PWø@8í@Äā}*9™*Æ3´Ė}‡oΤ] p@ɤeŪâ‹< Œõú杖Vö8>•@$tÆy§—ÚûˆëĐ –<ĀÎĶĪjs?˜ĖFáŌĸ•ķž=})ĮdƒŸzb¸ 1DōØã9§˛Sķ€ĮŽ)¨P(cŒvĨ$2rÅŅsƒĐqĮ5);cĻ)ˆĢ‘’1œ“АĮ8öA×îęiÆ<¨ã€s×­4¸Į{mņœZŽč*´ëAĪOÖŦŗ ¤āgĨW›æl•Į9ŦæR9û͑É&ör˛c_ŪJI8ŋ|šŒķ€+ys2ŽXŒųsYĶ^ņŦŸēbéĀo€ Ÿ§_ë], „ œ dū5Īi 3äōvŽũrĸē8@*¸nüiKqt-…Ęą sŠ™Tœ=ØÔJTƒØ`qŠ|xbÄōbŠ2`6&Hː)X`(įuĻ.8ĪaŪ¤\œdŽ™ĒÃ,Œzpxõ¤ä€6ŸQéS6Üļzvß/-–'rĸ 89üi Ŗ‘Ÿš•-={ÔĒĢ;u ÛļžÔö& eƨˆŨ]€rA§o!2čwœLp]™@ې3Í0ܑzmÂɅŒ>üa:‘ˇ>Ŋë<[ø¤h ĻŨ+19ąÃđN~œuŠ-ƒXŽôEcqŲäō‹J0˛z~BˇRé`2'ŧÖ gVąĐ5’ōG5ėW˙d€íA$ ķõī[^ ĩņ4Q]yÆ×Į”ÄŠq×=;tŧģÉlvÉ23U6yQCHãå@XØŪŧĶKƒUƒJÕ5íģɟMšél…F>Ũ1Š“M°ņDš]ŨÆŖ­Åsewb늭Ŋˇ2d6€;ŒSö~dķšZo‹EÜ\ĮĢ ˜Čģp=éøU-nûP‡H´Ģe“PĀō•š‘בÎ3Šã_C˛ŌuŸ Åkq<´ŗŖoœļwœdUdļ{ x°[ßŨDlîœÂDė]UTaryÁÍ nLô=&ō{Í2/#Ho âdSÂ8ę*i'ōœüÁ÷ŋ7Ũ•į^$ļ–1c%ßÚeŅŌČ “Ÿ420J˟› õé]‰´›-GÃļpŪjæÎ%–=“>?zq€9#žųõĨĘŨŽĄnÃ`+îiĪr9 ŧ0vČÃųtǎYM˜¤Ģ H›lĪČN>ņúu¯1ҧŗÅšm֟uyvD3=õĶįũ *œ•Rs×÷PŖtV=@ØJē—ÚĸÔŽDYː;†:FWŸzļ×$XÔqÎxŽCDņ´Zöą”:Uėi&O›0Pž@™õë@< /|’hD Ëcqõ¨œŠû¯j`<‡rĮƒMå˜ąQúšRpX7ŖŊGŋ!¸%@⁉.呎zúsÅ@¤ŦĮv=XįĩXawN=iЏÆ3č:ĐnŊáëoéÆā˛CĢŠåt#ķũkū Ëg°¸mzi[NVōqnš*@sôĢŪ0ņ š•–ĢēžA ?ƒÕąß§Yi]čŊÔp6‘yö47%¸{Ŧțš#éđŲɧŗÚÄÅãÎs´ã¯Ūö§]č:fŖ§Ãe>ž’ZĀG–ŦĖ œcƒœūĩ%Ÿˆ´ĢËķĻÛ^‰nDe—ÚĀu ÄaˆöŽoĮڞžö hˇĒ÷v×q7—9a‘Į2p})̎a;$nÅámePšT+åĢ"õĀV=ûäÔđ‡čknļ˙ŲpyHw( §šõ­ö‘˛ŽŅÎãŽ:ÖxÃJŊžû ­Ä’Ęû‚2BÛoŪÃã`ÔûŨî’hī¨Ž¤Ú|fî,˜įUŋË(ÚVElãqœž){׸ՒŗøsIgžCcn Įúõ ūŗœķøÕƒá5Ŧãŗ6QĩŦ:EČŨr¤Î™Ļę°jQJmāž&…ļH“ÆQˇc8įØįņ­ˆîŖHäg‘FÅ,OĸĐÜŽ+-Қē—šöBÉ>Í)ĖŠ“ķž9cœ“õ4Ķ h°éRX>ėæ9’<¤öīÁéŌ§Ķ5[=bÁol_΁؅b¤r=pk—AĨøŒk÷úš‰ė ¸6đ´Ĩ—ĘEQĘ÷“œõϝԍĮđیl-ė…‚%Ŧ-æ")# ëœä“R hŦˇ-.œĄ.ŸĖ˜ŪqœžqŌcŠéíņGp#û/šŗ#!1Á;‡L ÄŌīm5ÜKat^?ėÜžâÜ1~ 7LŒS\ÛÜNÆĶxWDēdbR(PDŠæžÖ@rų†Ny­=CL°ÖmÖŪūÎ;ˆ"pņŠČ Gëîk&ßÄēl— kÎFt–H]VE_ŧČÄØÁééVô_i~ ܚuŅ‘ÕwÁW8ÉúŌŧˇeZ;Ō[ÅuąKûȝJ4dc öŦ[xr×ėÍšžd æFÛØsÜį‘ĮCW5MsOŅãYogØdÎČÕK;ã¨rj8ĩÍ=´xĩ3wąqē9I+ßįž{uĸ7HŽkŽ\–Î5!g@NUWļO_­y‡‚¤ˇ—â6ĩ=„%Ą‡)–,~b§øšāį­zI.ī‡ch’ŗ°'pC/›ĀŠ=¸â6ŪĀÎH\sųĐĖę{c8ĄDhĻI~8õŠŋRŽrž/†3=‡šQcÂÅz+Ž„…6žwFŖ9ÅqZūĢkŠ WļVeˆ°}ČW võΏÍtū!Ō[Ënä}JÔ)ksĻp“§c^BŦzįÔfš ƒĢĒD€˜s€zCĶđ­+ŋĮ4­kĨÆ÷7'ĩ~T÷>ĩoEŌ……‰YtÎûäoVöö§{Ŋ_ģƒRębxrvļģÔ (%,;“Î>Ŋ…u  |2@ī\Æąa¨iúÂę6¤Fɒ59įņß5,^)ĶL`ÍæÁ"™ Ī|c­•´cĢ7ĪG\x†“x˛7Ę`|įéYž ķ[Kpę^a)ˇ>ƒ?­WŋšokdŽļƒâE*8ė3[pĮ™bąŖypB™cŽ}Ī-]Áû´ų:˛ž°>Ķuaf 61ˇ/=ZÍy†—ãa…†î"BŽ>÷˙Ŧ õx.ũI¯K‚áeeL•p$zÖ6­ĸÛŨi7 !„H¨Y†ÜĪQYŪ Õ¤ēŌώ™ĐKÅVÖÚ}וyŧ(ļN>YåÆA%†8÷¯L†ãŗĮŠĻJ˛HÛˇ|§?(ū´sëĒSÎ<é"ĩđ…éĶ/Ž °…íîbŽÔ—å*`ĢcŒįž•Ūo4‡¸O™`$[žÎŌv uÅXû>ÕÎIÎzž)¤,ąyA¸ã#¤åvR‰į:{ę˙Úē%äš ęGrÃä$I[î ŧį ’zö¨%´ÕĄđËhRhˇ]Å|Žn‚’.íûŗœãƒč=+Ō&…AfFx8ZTFdä™1÷ŗúU{^Č\…]_ÍÕt[ÛuĄšXŨ8ÎN@ĪãŠætIĩ6ŅĄŅgŅ&˛xmš¸Ē ;HRž¤’ __č×É7SË$}aĩ‘Ę{§ŊkéúžŸŦ[4–ˇ1Ė‰Ã¨2Ÿpy+´ĩC˛os†š+Įđuˇ‡aĐŽ ü.›ˇ¨ō›cd°|āîüų­(’kÍT[_ 5ŖA…Ø$’F@ē3œ“]ĸ[ĸ ų‡|æ¨éĶÚßĮ$ÖÍ"ĸĘҐņ•$ޤdgĶįēØ\ēœÁūÔŗ“Ãú“iˇ, kk‹xöŧŠJŊB“‘ĮÖŖûŗMŽjSéSĩޤbEĩ$ĨT|Ōcąį uâģČmaE] Ž§“š„Û‡.Ž3…)*ƒå0ŧ.ēši7jhÚfcngĀ—ĘĀÛŧŽ˙­mģ°‚I#|ͧjôŪqĀÍNļČQw–Ø: į5(dV;GN*ŽîRZXĮĐ>Ų&€$ŋĶVÂ_˜}ž>@ÁëÅrriˇ÷ÚNŧcĶ.VIīRōŪ9Đ*Ė ŽTŒõ;Oģ—ÔíŖÕíl$ķ|ų•HCŗ¨' ­@Āų†@=+E+;ÕĪ?Ŋ†{ív°đĖú|ėŅ4É""ļ¸%<ņžHĮõe…ŨīŠg“û*úntÁle’0Ąy9'æ™rI${ÔXfzé6Ō1K8TąÉf@r}yŠŋŗlˇ}’Û=ņ‘VĘ´ŽÛ”=zĨĒM=•Œ’ÛB&•)ŋhÛÜũi4‹R“vLĩo pGļã@GÎĨ€åŪąėumBîĘ;˜4čĖlØÚ.ī~6âŽ[ŪEŠZ™­ö™*#sŽ8Áüj”•‡:r_4ŒĘĄ‰ÛĪ&™4QĒîeRüīTtBîîîáeĩ†( mŽÛÉ;ąÚŠ\]j3jm`mĸV`θ›ī&x9Į_jžeqû9lk”fcˇqÔcĘÎÖ?Ū\ĨEas!ļMlŅ2° Ü;io$•m%keĨ@HķÚ}zU'Ą-; "BØHĄ•3ĮLgۜĀv—r?­TŅŪ[íūMJŪæ­`ŠU•ļy œāŸËŠŗ¨?ö}ŗOåÜJŋĮąĮËīÍu­nϐŠ)‰a‰ąŲ†GáPų( $PÄ āĒŽ?˞úX4čdkIŠĖT,JWvN0:ķZqqeĨ–ĩg“ōˇqߞœsųSē Kb)4‹,Ģ86  |Ŋ:ĘÚŪĘ1Ŧ(2Á@õīKgtu-8Ũ^0– ‘ë˙ëŦ“ĢŧP­ŨƟvą.āŠwdācæãōīJëqōÔ~é§yk ėEsč_¨'>šõĢŅ@¤H ¤k€šÉ8õĒöēŒW“$YŨBė…Ā™6|՛š­Ŧ­dšâM‘ äãšãúŅu¸œdŊĶ>_ éW›’&ķ_ø–SúVēm؄ §“ß~u^’"´Oûļ“åč1UįÖtÛ%6×7iˆ>dä•8ÎxĄYį›ļö3ī|1§^]yÃÍĩ™Éɀ€ ŽøĮŋj•<āųˇ×sāsæ¸ “˙ÖĢ0ë:EÜąÛÅy 3¸,zsŌļPũž6ķ Ē"î2øÔčËįĢ‘Ŧhņj6QÚ4“Æ"ÆLm‚xÆ­SŅ|?›Š/Ų¯nü 3äîIõ€`z NÉhMÛwe+ŌŦĨ•ō9ä ãīŧ9k:7’Zc’Ę}ķũk¯ŧUëœÖ ĖŧĢHĄ<۝k´=z]n=SQžĖHlžËp†b˙3—=:Žkhr؍[ąnĶōæ§[é,mŽ„† ōá*\ėÆąŅĨøŖ\Վͤ:Ulp@ãōëVt¯ ëZgˆWTMZŲÚhÂ_‡œw7`8N•v‰ãôßęÍgĒŪęē}Ŧvm:™#›sŒãfÜzįŸŌoâMjc0›I6Ú5ĖR1cVėf`3Įu§ÅáĢĄũĨgu~’é7m3-¸ˇ ęd9$ŋ|vŦč´}m­§´Ÿ^Y#˜ĸ?eˆ#ŸœžįNņčeëk×:Wöƒéö×1ÍmļŽŪCŊ˜ŽK“¯__ÆĒÅâMR]]vŠÍo´Öaž6g‰đĄ¸īĀâ ŧūČ:ĒälȐ /đžœãGļ~šļ‹T€j*-īãÃE¨P´)#ž˜íGģ¨Ũú˙á"ņ^čņ?ökŽŠo”‘šŊ~‚´ü5Ē^_>§ĸmÚæÎäÁē*c āŸz…ü%rī¤3j˛+éĢąŲ× 1ƒ‘ūčÅO¤hŲZė‰w<ŋj“ĖeuPzŒ{qŠR”lNå„|BŠL’ųā /¯éLԚ+o‰l–ųYfĩ”ŨíĪĖ ¤\įšž ŨE¨]ß zínŽ”,ŦÆ Ž0;ֆá[->&ušâ{™÷—7īLöÔÛKQ$ö2t­gÄ:ĢZßE cr_‡lNvļwîc20+CÂ:ūŠĻÜK¨O’Ĩԑm)Į˙^¨Ųø`[Ü46š•ōZfKv`Q¨ã$gļkgBđėzrÅåÄŅĖæB% ōˇRFëJN6v+•ĻŽTÖ¯õxĩũ7Oą–Ę(ŽRF 23œ ī‚8ät¨ôÍwPģĶ. EiũĩĶZĪ3ɈS>o'$c\ū4Ī@ŗøˇÃ°Åu%ģ¤đ‘šp€ā‚Á÷n˙Âļŋ`ˇˇˇģžÕã›íTÃģšÎs‘ÎsúJ*Jâŗlȸņ&Ŗ'„5‹ˆī k›+†‰nQ #šāķŽã­_Ô/|CdšLO6žŗ]ۘ$)ÁRWŠö9ü:TļŪˇk-RŪMJöXĩ]¯îÉäļqÉâŦÜøB{ûk(î‡?UâŅ6hĮąņ.¯&— jWQX5õÂÛȈ:ŗ'zs[ÚÍô~3ŋĶŽžÖ;-t#!žfÚ7p:Ōŗ¤đ4;-(ëfĩœĪcMÛēĶą$ū5rŧšŊÅõŨō]Åq†{im”ŠŒrƒ9ęįFgÔŪĶõŊ/QžHŦõ[ŠW'ls+Ž3€~•1ā á= Åa[øgKŌËŨiöp[JAĸ ŽÃ8=*Ü0I pԀĂ8éPŲj:mˇāgëQ$¨ä­=˙™õĒW–nņ~éļ’@8úúPö‘l2Ā;‰īÖĒęnąi—˛6!aÁãĄĻÉo t?.$sô¨¯­VxĖ"˘ÜŦ}sPīcHŲIžÔėmtXÅÅä(ņgxgēį§^sW|<ˆŅßŪŽV;ŠÚEŨÆ×éMO éĸ1 ´¤ęģ˛ĮųĶŪ6ŽEcÆÆŒį ŋOZ”œlk9BWåęWŅį„ęē¸¸ˆî—z¨q’*­ØŽķÄišh‘mŽ^)v6w}Ú×ļĶ4ûyᴂ&UāĒō×­T“AŌX>wbäžI9É9ëO•ÚÄûHŠ6…Ķ'ĩˇ´û{Ÿ9­WįcĐdžũĪ4—×ļ°ØO<ˇˆÕ[-œzcņëĘæ¤r]JûúÕ(ÛBe;´ÎcÃīw{q´ûTiLČYˆĖŅHú ×I{…Ķî ’G”Ų#éYwŽļ“Ëöd_:SŊÆ=ŗŸÂ´ 0jzpIĶ|r ā6;ûTĨĐšģÉKĄWÃn’xrĖ$ļĻß_Z‹ÄĖSGb0š0>ģÅ\°ŌŦôķ'Ø­ŧ¤vđČū4熋e¨œŨG$›Fų„ž€āĐĶå°šãí9ēŲN3ÆHÎMbëp­ė°XĖĢ&e–5`šP09>ä~UŖokö+D3ĩ’[eXiLúŧš¸šÜIRū]ž€cĨ ;XtÚRrėZđėÛ´–ˇ‘÷Kk!ˇ}ī”ņœT×ļÅg|V,nŌ0ęß)äū•ŸmáĪė‹éo š÷ŽQÎAį<žõzōõm?eŊŲĩvû͡;† Æ’NÖeIĮŸ™=´m:ÚéōKLč‹"ąę¤sŸÎĢøĢ÷˙Ųú{>ČŽæØįĀĮãZz›uĨZũš{Õ¸F"O/iQžį'#ŸŌĒë:dzÔ?fÉPŒ<šT#Š÷ĨgĘ55ínŪ„Zļ‹Ļ6%°ˇ… Kš@ į9¨,|RļžĶînâ–YĻ …ĢĮr=*đÆŠ$"ŨŽm|‰כiķJg8Á㞕ēēt–ąYF?ŅÕHēûō(J]å­'}I´íQu[X‘Ļđ;qƒƒZJ0€wsņŦØ4Ôļu6hI,āą9ĪqZ„•@7tŠ´›ÜÂVŋēV•š*0FOCÖŖ  žŨ( Ō‚sž9°'<qJB‰™w“1_Ÿo Wv‘<ßŊ%e*ãdūĻģ}@­ķ< ĀēŠÖä!BOR+8-MSļŦЧ}æãy˙ЍnÄĒPpŨzįųV6šĄĨÂp Ÿ^MneFÕį‡QĖ{B3Ôtgš™~cōĻî9$ã\Œ99Ëí?…YNƒ.G?wŽkTdĮ-GĖđõüč# w ‘Œ ÔšrÛF;}j6?ģl0Usęię"RÉëQˇ8ÂķĪøR‡CdtĀĄ[’ Á¸Ļ RĖ2HˇN”üÎ၎”ČĶ,0A<•:g-Œžh"ĸ*ädęiL{§;zcԜ¤n ¸s×ĩHŖ;īŌ†‰c—bĢ‘œ/#?JƚPø(=p"+âl—qø:â[;Ų`ōKˆēČ nzŽH Nōę ‹’hĻ›ĖBŦ=2N1Z*|Ę÷efzdkrĀ|ĀgŽ‚ ŽxÕUU”3.ėÛš¯;[ģ§đ0ņZĨØÔˇļg"2ÛņåyyÆ;cŠæļ˛šņÁmBæH$6qĘĒnLc;đW9éĀâ­@NW;ÉnBۛ“€*žĀ|íÎGlŽŋJâî!Š˙ZÔZ÷W6—vˇ@ĸy˜eŒcnܜ`÷āæ›ykĻÜÍâŅ5ā U–1į˛ío/9<ķM@9Ú[ēNÔČ@ÁaŪ8íųR*ę Ŧ`ŧbhqåœųģ÷}ėôێ+ŠÔ –ŖgáNd1J Ë9˜ ‹ģÁÜhÆt‹?E%ŧđĒɤ0WY7Á\cžNŪ}N)ōØ\×gaąuIUŲN _b;T^}ŋœíž=ŅŦĄōPõÁôŽGÁŠm¯%‚Geq,VĄŌū×åFΐtßŪĩô´ÖõØôô˜^ GÚüÜá›'•ĪlæĸQĩƤljŽņÃjaÔ­Ŧ‹\!‘Ļ@D‹ŨgŠČН.Ąˇ„ŧ˛¤{†NōךåŧvÚ|VSÜIoÜ7ņIķķ‘ė;Öuõæqã­N+–ŗ–Ķ×;đUœsõ GáUŪ7 ûĮqŪģō1Ž3Y^ģŋ—ÄZũĨÕÛ\CjЈ P”ąÆ?Ÿĩr–:Ŧđ†xv;›’ÖëČÔ¤F9EÚŦG!y_ˆ&´´>3´ŅwË2A ’Ņ„Ë”?Bj”-tLĨvw’i:§x×ŲXŨ\Ž1DvtÉëVuMčŋģ,TėPqÅrū>“RŠķHŧ–{šmļ<@TUįįUPƒÆM?ÆđAļמĘ&—O+!ã;™#ŸÂĨĮ[Õ=ŧŠļĻIäD  šŨĶëéV"ž&E”I ‡8pyėyæŖa‡áÍį`´–åeÔ¤†!ō–”‘‚ G_ALÖWÃvz§öv¤ŗ#jĐĖ]ĨÉ#y\`cqԚ‰-ęzR˃ÍŖ9įĨgÉq ۜķÚĪ Äßuҁœuü+Ķ“FOxƒIŗ’´žÉ [Ŗ|ŽûNės׏zɰąĐn~Ũ$ĩ:ŗFē K*ųËŨ)¸–ˇ=MxÔyAŧ ”Ĩ[yĐ ‹ÍĖmØ]ÜuĮŽ;× ē4^=ĩžˇš˛XfĶįVSæ9p1žįŽ*މiĄ_x[T’(-eģ…/Yq–b8įĨÉdS•ŨĪC‰˛áXØŒņR+ĒLĐīRũÕO }:לZŨiSk^™o­KCjé+ ÆPˆ†sĮ$ņV4FĶí|gkh ‚ö[§žæßQ…šČ+(>˜ søRöbsģ=˜2@7Ÿ”1ũ+YÔo¤Ömô]*H­$’ŲîĨš’-ûNĐČÉ'ōŽcXIēņ^ągâņj˛[ĮöV—fĶߛa`vļáž4isé˛xÕ`I…Ō\i"I¤Ü_.>R¤đvāā ¤Ŧ›žÖnĩm!˙ĩĨĩĸGEX—E8ÜW'ä~ĐÛ&N3ÆMyĮÃĪøG^U…lãƒ[‰§Bß6J†'Đ`? ôģS´ąSÁéÅ)%ĖRza>\õãۚø8ÂįięۜƒĐtöĨtRëķaTt÷ŠhDY*IUįēæĒ\íw^@įŒā^1nČČįˇĩAsķS Ž8öŠzĸŖšNí ŠAĀö§ŧjP w÷§ĻŌ\Œđ)ŽÎ‰\úķ@ `>RIāgžÕ *“Ā zžÕaļõÆp8>ĩåT[Ž=(B#cōäŒāUîųŲĮ<ä‘ŌŽô‹hįŠĨzåQIQ¸ôŋĩåGqŅ 0"-ÜûšPÕ#Ķ ¸’™Lk‘ģ°<Œg5,ö‚C‘œz ÍņÁŽ+X<‰å‘Ĩ% )į?ČúTŨØŌNVeû[øīŒčąK ÂÛdŽUÃzt$~ĩÕ`‹Q6Ŗ3s‘*Ž}*.i­¯Ž-dĩ”ų­æĨŅRŠŽ:Ž•åÜņøŽ6[;†Ž8ĖLęŸ'Ėsœ÷]ØĨN.MšęÚÚâē”š8>Y*}žŊ*Ũ•ė+Š\Ų™re˜Ų@R)ˇ–Â}t$,› !a‡#ôÍ%'M=n.‰3ܐōĮ ĮĨ5{…ĸá{—ÆĢgöá`d+tFT8#¯Ąu(.of˛ŠfķaÎņ°ā~=3ÍbŪĖ×:´—Đ\4Ö1BIĪĖ?,~´ũņ,õB9!˜Ë´;1ū6_ŧ}‡Ļ{ —7qûōÜŨ1ŗŒÅ{cÔčĸō`Úœu–ˇ?o´KŖÄæ*ũG8ū”<ŪB ¸ž™æ­ëŠšv Ļ ,āŽŊč´@¤ã Č ÷Ļ•{” ĀŽ2TįŠą@āz-qėŦ*—ÉõĪŊRƒÎ[†Y\žÍh‘™€EäöĒ—˙žY#<‚ĨâEžģryÎAxĨŽ€9ÅF%¸ÚģŅI Œ‚FE=Ā.Ę̆##ųĶč$ŦËPX”HāœtQÂ’\Ē|­Ķ&…`'9õîiü8`T}=ũhč j5T88'Ži˛ đ}é ų|œ‘ĐR“€vđO?ĨCķ)7üƒĮŊpw—VÚ~Š)™% (Ŗgw8Žú˙ˇŽ1Šã5ģ{Ã$Ė–Š2’6ŒŽsŸÖ•/ˆsøKšvKãĐ{ÖÕŧeœ?­bY1@ū5ĐA´qßëĪJæ5˜ 4axëÁĢ0„ū|Õ`@<¯O튴ƒåéĶ&´F,P B ‘Ž´Ö rĨLcoLĐ ‘KĄļ¨=}i§7ã×ŌĒÂŒ"ŽØÕU~ęāp)0Qŧn|út§cĢGŠ=é#ã,ŦI'¯sL C`”Āę}éeŽI!!>NvŖķĄ$BūVėļĮltū•1e 7ÍĶūtjÆ—dö?ΤÎ:¨8íéH­‚NãPI**āg<äžôö9?‰W¯ƒobsļIĘ$j2w0`Øö¨hđØÚim§XŦ-,#{ye°ķĪ\Õ˙ëvŸgn5›˜”Ė$A0gaÛ+ÛņŦûŋÃ-ܑ*Ü "ŒJ谒vįˇū•ĸŋ%/zėŋmĄi/pˇfÆÜJXHN8Ü;íéŸ|U›ĢM*âų%šÚŪæâ”;FŦŅ÷JĄĻx‚Ú]&;į¸*yˆ‰|ŗ¸ķ€ŽON•‡§Ī§Į‹įûĪbeQ$++‘ŗæųx äœôëTĸŲ-¤u˛éē}Π—sØ[É4_ōÕĸ‡ã׊xŌôQ,× ĻÚ<’įĖs’üįž9æŠE¯YéēE”ÆÛĪ>Íi“hQÆ3Øc&'‹lEœ3%ĩܒHŦVÔ[.á‰^0õ4šdŅšĻē}ƒØ% °ļ0ŋÉh@s×Å?û:Ág-ö(L "\†Ÿ\qXōxŌŌ; 2æ {š ÔjĶîœt9ī×zSn|imĻÚÅ4öWqŨĪēÚ¸TtU'%‰88îiōȉŌÚØ[Znû=ŦQ9o-n>øĢ oŨ‚2Üuãj†“ĢÅĢčļú˛ËåĖ…–6ĀlûöíTlüWĄöeļ͝‰¸¸–ŽŅŖ#GŲē ûôŠåaĄĨį@g”ĢŖŽJą6Ō:Ž?•EnÉr Ē<î 3ŌšÕ×ŦŦ´sP´Ņfƒė—Gí1’ĄŨøÜįŸqZzŅOÛé/§˜ūĶO0euG'ų\ĘĮ@R9 FÉģÔūsR4"4b¨ˇ'ûJį&ņ­­ŧüi÷RiQMåĩü{J‚Ûs¸ŽxÍM{âyųíl´ŲīĖ1Į4†7U*ŽNŌōŨ3Å5EŅĩpĀbH“yËmP >øëU¯Q%‘b‘QĶa܍ƒqØÕ°éÛ°-Ôpq\7ŒõEŽ}=Äŗ%Ŧr9ēŠŪMŗ†ŽĐzŌĩŨŠZjw$/f‘ē†N8 `ū‰4ûWŽ46И”üˆb\.zā{×-Ĩ뚀˛Ķ4ÔˇTŊšĶMĀ@‹ũâqĪQõ5Ôß]}‚ÂkļŠIŧeĘFæĀĪ>ÔŌkA2C K*˛${Į°3ŠXí­ĄivĮ+“æ@7žœú×+Žã2éˆú%úŨGē˛ŊІÚ}úœUÛOÁ¨ZßM%ŦļFÁöÜĨÉ Ûģ9Œb›‹HĨņkmȎŪŨFŌĄDCnJ™mŌfŽc%1ō¨¯§ʲ!ņEē\XÅu§ŪÚÅ~U-n%UØäō‰RGfĄÅ’MŦŨé‘čwŦÖˇ%V]Ǥd9įĄŦ•ėkŲézo˜ėˆČK!.Tž¸ãŒÕÄąļļw–ŪÎŪ9e9wHÕ }Hë\žâøŽlī/¤Ōoâ†Ųd’Ŗkl nāœ{kYQ™*}Fz~‹ah˛ųĢiH‡pÆģéœã"šģŋZÚũĻö+KÛģ Y|›‹˜BėF{[đ*]SÆVvrC­Íô˛[ ŋ.ĒÎ<ŸaJĖ4ØßšÖ8ØËmiHāīxãPNyįõüę[mč§ĐĩWĢ=’NŠčeŒ>ÖĀ)‘œz‘$Œ’Ûą‘Į? Ĩ}Gm bRĨ™¸É§Ë9‰K$p1LR1’ã­ 9tĶb[œÄž0ÜF­c8Rš\°ū’īIJĮ‰fŌīOvÚ1úÔ"h—ÄļM$ÅbH×wĻķŸÃŖĢIöŲ–zōG°ģ×Sģ–ĸųw4´Ûč5 š€å_ŽWāƒŪ§eķˇžƒˇ5Íø= ŲÜHãjģŠGwtR™åD/×ōqwW9ĢEFm#Ë|C?‰“âMˆĻl&TO,mˇSžį8 ZūąņP× ÚŽˇ ūœˆĀ:2ļįôāŽV×UŅu߉7×÷—ÂßNh E+Ča-… ŒđGV­ģKÛo ëšO†ĻyÖÖ'‘f^…›' {‘Ōē%t’9âŽÛ;uÖ4ģĢΞAk%Đ^"IUŸŽŧTFģŖŪŨ›K}RŌIĐí1‰A$ú Ÿå\^šž‚ =”M,…s•VČécĮˇsCũžmPRŽgāļˆ5ÍXĩ&Ŧz&™ŽiZĨĖ6ˇąIuĖ‘Æy\p#ÅhYj:uüŒ–w°\•äzŧ ŖøÉėŦ/¤{htà ېXÛ@0Nucę{°ĒŅŲC¸ ĩžōTÔHŧĀF ÆÆ9@-OŲč'=v=Llûŗō‚ŊÅR¤Œ$‘‹däŸJķÍíîīu9Ŧu=–ÚNšmlŖ–B7•@ Ė=3ÎO¨Årk¨ęÍcáÖYn&ÛzâĶ20{€eũ@įoįKŲÜjĸHú6€­īŒÕ7Œ­Īîä%wĀp?q> ¸š›ÄŪ!Ŋ›Uk˜w„EķILį’ĢŲGŨž*÷…lgąņ_‰¯$ŋļ¸K‰ÄQIšĶŽ7/đā~œGwšØH¨ņ´G$8Áüé’lÜwI۟ķøÖ„ŧ[‰´Û‹Öˇû0ˇœÃŲR09õæš/ëz—‹.gđ˙…ĸy•pnî’@¨G?&īįĪ4(6ė'-.­7➊ã_ė;FkP~×ŋ’Ęp¸ûŧc9ĢŪ1ņ3øZÁoEŖŨĢČ##x@ Ž 89é\7íáĐ¯5Ŋ[RŠ8SKEļm¤ž >ĶŨŽũõRŪx†ëÆÚæ—ŖŨéFÚÆâe¸PÎLƒ÷‡`HĒp\Ú-Ŗ'mw=VÂíî´ëk—‰ĄibW1ą\Q^jŲ\FĘg…ŨËÖ X€ ƒÔŽ™¯>ēø•vž"ÖēlgHŽėYŧĮvæ|ãŽp1鎂ģ‘â¯Éxl“Tîƒųb|ąoSYĘ-t)I3O >VÆŪFOz‹Íe|ĐņôІAˇņÉíPšyęy¨z–Šwģš8ëšįÅäsÍĮ*Ė„0ķädŸ…t7ŽGBsŠķuiâØl'.pĨx8?ƊjíŽNČčtᔉÁõūUĐ@¸,}1č+ŸĶвÆÅˆdįšßˆ(L•n™nk”Öcã*įŋj°‰žXgéPDÃy ō;Tۗæ6+DdÉHäĖ*0[8ČĪnÔĀĒ2A<Ķöžž™ÍP†Ę~@ųAéŌŖļšķōR1´1õŠ1Áf;FI'¯Ōœ‰jĒj˙ĮëGPēl$g)÷ņ€ €?ũtæ“į`žõ‡ŗŗŒ/īCeTÆî€Sī› 1øÔ3cÆĐ3’3Ž*@<ą#ē[46IRÄât‚č!F'å Äd¨¸$Šé.eōcy"…æ•W;€\ã &ŗ´ pøƒG‹P6ĻŲ]ŲB;†?+c¯áO™ĩ{ •-Z-^ÃzE‰Ō­„ēuŌIŸĩŒHПn Ü*×Ôė5˜ĩ›MjĘŌÖyÚØA=¤˛ã`Ũ¸ø#Ž+¨PK€ ü$ƒRŧ¸°û8‚Ę[ŗ,ëˆÜŠzšĪaéīG3oa¸¤.›ÜvQ-ęÛŦĀ’ÉoŠ@3ÉĀĀíYÖ>{?jZš˙ĮĩÄ`Å#å•ŋÖlėJÛf؁ՉíéNũī$Éîk;ąÚį†ĩ{Ũ;Ė÷ļöđi—–&K‚û¨X`qōƒŸzšßJ×$ņŽŖq„PÃfm$D›`$d”dņĶõ­[ī‹MfßJĩĩ’úúhÚ_*6U ƒ9,Ėp:ÕąŽíĸí¤ˇw<Ã&7/^ŊĢE'ÔMXââđÖˇ‡eđĮ—g-„ŽQ/|â8™ˇ“o,9īŠąŽø_RŋšļKmĄ6¯ˇÔė“G¨ÜŒËt8į×]{4Öē}ÄđÛũĻxĐ´pĢmŪGA“Ķ4ZÍ%Å´sIoåH҆hØäŖ÷síUĖ÷W&Ú ŲĀíģŊq÷ÚNˇ§øšmOH´ĩŊĩŧˇX$‚y„f=Ŋ0yČ9éõŽ¯/[XûØmöq'Ú÷ģķ˜ë͜ÕĐŠä™ņƒ×ļMėSØáėtxR/e…ŨĩŌŖHĨĖ_glœĒTvĘēŊi/eĐîᴎ)'™ aZ]‹ķ3œ•—§ë7ÚĩÜQEĸ][ڑŊînp §N9É÷Æ+|2Į,c–ėĄŪâ8sá}ko…Š[Z—ŌT,āܟŸ åų}9ü1W›Â÷÷ĮÄļˇ+ j˜1J“ī+ĩŒŽŅč_jСÖĩmJįOģ˛ĶmĨŅn˜Š—ÎĨœâL6œtäō+¤7_—žãO˛SĻÂđËū™ÁUw`/\qĪÔWWĨępkZtW–ĨŧŠ2 ¸Ã+) Š÷øU™dō˜Dî2>P9ú“MĘÎÁkœL×tũ7Vđíĩŧö7o+ÃxĶ…ŦŊC&2Hį§ĩEĢx^ō_˛iļ1ģÚ[–ēšĪåÉ ¸ue#œ ×uö”hö↯~”å ‡˛įœ÷ũis1ÚÆ-Ĩ¯‰Äw‚ôÚ.Œ¨ŲP ėÜrņîĩ°ļąķĘãˇzE’I§9ųG‡SV¤tQʞƒŠ7 PKãp8íQ0ķHã&ƒ#ė!Š>ĻĸŒvōHąohԑ=H?MŽ)œw‰”ŋ‰ŦEßŦhF}YšúUAļ˛ļ7vÁü•#|[˛ščĪJŖ5ũūĄŠÁyũ‘6čŽ͍Øį9"ēËkŸí=5ÍÅŖF(ŅH#ņųW:JMŖĐ”ĨMCËpŌn ŋ°ŽTŦ :ĨY|•%@$N+ˆ“NÔô ķ>Ÿēhœ*œŒz0ëÆkgK×Ļšŧ{{Ģ9!VāyÚ[ŒŒcŪĒ3čĖjĐûQwEČô69K%¤s™™ P^ōˆBā{zž”:ŽÚ°….ghŖŒ˛øumâeēŋˇ—K†ōKċiķ 7¯ôī[zGÃÍ NÔVæ5šžâŨ–HÚyIqÆĀ8÷ÍtV——Vņ\}˜ÚŖÅ$?Ąâ´ToE# ¯ĶŸ­/hØ8$ė4** 8Āõ?ZŽĖdß*G–väžx4Â†eãZ†´-—€ž ė~•Ę^hąj{&[™"—‡Ž:×Ws÷[ ۊį’â"ŦŠ?)…ëĶTĶŊʞÂiŌ <ŪDŨ Ø\ķękĮ§Ėr+~6Ÿؚ|t8ŽcYŽPATôãéOFÁ%=ģĶc wûÄSŅv˜tĪ5ĸ1c÷–Ęļx<Ķ|Áįˆ[†ûāŽŒ)ø>^6Ž*D ČvŠ8Š­D<žÛÃ{Sc´˛<Œ Ž„qŠB€98,1ˇhõúĶ׆ ĘBg jh3w¸ãå‚zdŠrKŧ2:…Įja›}øĻ! íÉRŸAԘXŗ… Œ’{ĶÕŠCĐzSąHã' å> _ŨØxBáí¤di]cmŖ8SÁÉíNđUŧą[t|čD’˙÷=~žžÕĐŪÛ[ŨZÉiw Ī‹‰c+•9÷Žf/ŨiąĪoĨøŽúĘŎLZžÜöV<­k'^Æm4ų„ÔüÍ&ĪFˇĐīa‚Ū[Īŗ0Ø$ ¸ąĮ'ŗ1EÕæžšŒ ŊúKyŖ\Íqą#2ĖA3ž*ÕׁlßOĶ­cÔu–Éˁãu ÎImĖJõÉ5>­á‹=TŲ3]_Eshģō)vĘG|œsžŊ*”ĸ+2Û5ĢF-n-ínâ´K‹Š|¯036FqÆFIú ČĶ59ôī évqŅvûÜ'eč;՝O@°×Ė įËšŪŠīŨŲžR9jJJčz˜§Q¸ņfĢa­< į‡ĘU3–’A#“×Ĩjø3T—Wđ–Ÿwu&ë™ųŽŪebšũ)Íá--õ9u[–šš?%ŲŽ¤ÎÜc7OëÍ^Ō´[ ÜZéđ˛DXžc0É˙xš•'sšņ6–oõaĸß$Zö›ņPņˇđˇ×žj­æĩwŽxkBÔ­Žn4ás}3ĸcXŠ ‘Ķ#¯"ē KÚVЍ›˜7O´D]&tÜšÎĶ´ÃëX~?]>ĮÃēv˜ž\Pũ˛û4yæo›įUE§d)&ĩ#ģ›Sˇļņ>˜u{š`´´[ˆn‰Q,d†b…€˙gō5bénå˛đˆ‹TģˇkÕ1Čņ6w`Į#“ščbŅt›­$ÛC ‹+ĸÄ,Ëį9cœ°#ÍW—š[EoŲätļ[´Č<œŸáÃdz~””XĪDēĶüižú•åÅēi^n×#;ÕÂî8œVVúx#PÔFŗ¨ģyW$,¸VWbgœnkŦą]^=NDvŋP\Ī'qŽ[§ˇ­;Ođļd÷ M‚ëp•ZWeÚܐĒN>Ôî‡fs‘M¨SÁÍö뀷–įíQî ŽV w:äžũĢŦÖ­Œē üPĘcwļ\>SÉĪÖ˛Āz ›FФ6ĖÆ0ˇR|ĄąÆwd: ßŧ°]JĘKIä™bqĩŒNČqõ4]tŽGMķäđ†cS6IlžbĀģî%GËw8Ē-ŽęŗøHÔ×Puē{ä†gšt2˛āúqŒã­u āŨAgpÎ#˛,aaw *—;ŗ´āqŌ _h­§‹1 ĀĩyË]Hļr ØôŠŨNÅ};TŋĶ4Ō"û}ĮŲnŦdžX &ĀÁP03ÕŗÖ¯[x?Hąŗģ‚(gû=Ō:I\ģFŽHPI9Îj”s‚ƒąáW-ZĻąYŨN,tø n2Œˆ?y€É˙gĩz.ŸĒiúxÃíkso=Ė ÆŽl$ôsž¤į×ÛŊĩģŦE≄G1‚€ė>ŖĐÕ;›xå¸IŲÍũۘÁeĪ\Rš—AÆ-= &U““+!WĩsÚúÛè>Ŗg>5 E_2,pĘŪŋ…tĄ`qĮ>ĩ“ŠxrÃRēέæķ26ĐxīYM]hoFqŒ¯#3TŋÔ5k2-9ÖÖK˛ŲfoētëZZŠŅėÖĶYŊGŧ?à lė`p*Å֍iucmbEDyoÃ.;ƒRÚxO‚ÉŖkuēÉ,ÍrĸF'×&ĸŌšŖ7XЂd’Ųf˛’(eoPF­BdßŊ›%qÆiĘĄR5A0=ģ •Ķ6I$‡ŊSz$ŽeŨ’Ž yöŖÄ"ŪĐ|ˆ]úz˙Zô+ÂYGjÂTˇ–Õ|ôR…@!Ā*i=X授­"œ`8ā}É­Čw'€qXÖXĀn íĮzŪļF1”Įģ×26˜œ ^ĒI;‰číÅ"n ÂāÁ<žj]ŽUČã-ũjÉT/xũĐ4ˆĒ’ÛœãĄ¤.ą! ĩŗ…ÉŠ#a°Ŗ$ũ(`ny(öĻ9įvā ëéJō>"ķœāϚĨŠʤôĮĄëEÁ!Ļ2š#ëŒf…CĀ`–Æ}9FAČĀ'ķ§ÚËû“†č}(ÍxĮV} DšâŲCŨO"ÃĪBÜgß[GЇ†îšō˙ÄĪ5ÄadK™€¤ĪUœö‘ņ^K$ĩĶÜÍŊˇ¸W‰>}‡$ž™“YŪ5Ö4ÛĩÔmâ†)îšÖ7Y&,۔üÃĘ^ŪĨ†?Ū÷R]L¤õÔô›BŪöM4QēŠr¯ ŠÁĮ_íåėūŌ%‰āÆD‘ļF¸ČükŠŧÔ´CÅ^ģao,RÚI†XÉã`lûįŦÛ+õŧđnšgĨ)“ė׿UļˆĩšcЍÜ}hTîö'ēŠčWŪ —ÄKį[Hë´nŽ˜ŨÂ0ęIÁĮ ŽąõĢ[í!/RâĖAąwČŌŽŠƒĩšāįņŦgUŌ Ö§ˆ´;íKû6Úū¯cąrs´sƒŒV<7R]6ĄĻhZ%Ռ7ĶL÷[4Î*B0:sô¨ŧ;5Íī‡"ŅŖŅnėī-Ŧ^qxŨĮ¯áY:ēÁqáÁ&™áÍJ’ú ˜5ĢeĀŗ #ŒœgĩYÜx¯^ŧūÆŋēļ¸Ō•Mŗ ™—$ĻqԂįIGMįEeâ +QžžŌŌū)Ž!ž5=rBô¨cņ§‡@„R&La^¤3gq€3Üņ\և=Čņ6—¨Ī¤^[ڍ1­Õ#ądXpm uÆäõíQΡ“xîŲt-@Ü>¨ĶGŲ~ėÍæĶûŧ}xĄE lía×,ĩk‰m4ËĢk‰b\ČĒ˙wžžãÜUoë0øoÃÍu$~tÆEŽƒcĖ‘ ŸķŌ¨¤Œ~&%ßö}úÚÉĨ‹q1´uPûÀN8ųxįĄâ­xÛAē×4D ŋjĩ¸K¸Tã럔įÔBV`Ū„Riū' v5e}Ec.ļ‰n‚ ØÎÎFã霏ZŌÕ5‹ 6ÎŪMJé,ŪERČFâŋŪÎ3…ŋJĖ>7y4šz&ĻēŠR‰höoūˇ86įžzVo‰./šööŌ=AquĨm{¨m‹™XĢf-Ų€}sŸÖŸ-Âæũ˙‰tm&{[}CS†t…ã,ß)@3ģ==`ɨYißno&žHm›JIYå˜ė$É´ãŊĒŦ÷OđŽĨ.‹¨mĄ–"[R^7(¨ģ—Ž ÔņHŽõŲė/ÜéŋfÜÖrgVf`§iƒÛŠéBAsŦMVÄiÃSšö$ŗŲģÎŪmõÍ7LÕtÍUž[ BŪíS¨Š@Jũ}+έĸģđák;™ŖŌõ’úŨ up›˜ƒ´€X ŠãúV؍õOK­ør‘ĸ͌>lčŅÃ,ĨōāÂį§ĩ.D‡ĖÎûÍŨ’ĢŒsÍ5Xy€9¤ˇŠäŧu֓MŽÔ'Éö=Ų-‘×qé€kuG' Þ;ŌY™„Lc%˜tõN#ö(%šcōŊRëVAX‘žš9lŠYĄKˆZPbpUŗß<*—vR˛Ü“]Ôd°ŒVÖâØU]Žđ3Ž{uŠĻšģūÔĢ G}ģ8%ņķĮŠĨĻMĨh˛ÅÚŊš˛mY.>a‘‘Û¯jŅžąš}J ÛYaVDhĘʤŠSƒÆ>•—ŧtžMÖڙöÚ­Ô:bËqÉpķ4Qĸ1äķΝjlšäßd’ækIQĄ”!#vHädķŠ‘tMAŦļŊÅēÜG?ŸnUXI9É<āƒNžŗÔīŦfŪŲJĒ… õį=(´‡zw¯+^O֏ąÅæ 2šsŽÔÍSšŧimQ!™<ÄtrÜôÚÜp{ņš •Újr_nˆŠˇō@\’\ôįšLąšƒP{ŠbŽ‘@1DĆ`~÷LƚæęLš,ėSQ`ˇēˇgaPМävęM —igŖÛÎĨs.H~[qPsÎz~UwMĶõ5‰§dˇˁ Wl¨#uĢZŨäļŌAä ųŦ%b #€8*.×4uŌūļ+Ī|ët3dūGš°Ë;ģ˜đ0ŊH´ø`Ų≠€­$öąÍVšĶ5kÉ呤ˇeYÖHšbNĀ;8m-õíi.$„ūZĖîšĮ֝›zĸ}Ô´} mĄdÆÍÜõĢĩō“Ü ͧhíÎ$`WåōF}ĢJĘ+Øė"ûc!›§NŊk"ŧģÖ5˜!Ŧ22$’3S+ŽNžĩRmZÄSŒ]īĐŊq~ļīŦRM#ĄuHWsĮ?ČT:ŽĨÚ Ėļo$r°ŋ2?\7§$ö÷6ZŊÅŦ&âŲa4@€ëĪ 3Ö –Îôéē‰û1y¯ĨȉX~íHžqRÜĩ)F2ŦKĒÄąAsƒ.ˇœŽážĩ̍C$öĖ™d8-šȨ.EęßŲßÃbŌD‘4OåVRHįŽâĩnːÛ;ĨģO!_¸˜Ÿ~”Gf•ä™… ]ũ—Ñę%pí#18ÉéW­¯‘îå…2`ļ ‘‘А{ķY‘Ãxž“Om>ádVØ…;9Ũ×Ō´Ŗķ%ÖíŽEÂAöo-ĀĘäƒũ(ģVąRŒ[m–Wŗōb ģ˜ÃہÁÉíÍU‘­ĶX¸–Úũŧøâũė ’Ē9ĮcYėn`Ķ%ˇ]Û˛^o!*Āžėæ¯Z\ŧM;5Ę+ۈ÷4 °ÉÆqŽøĄÉą*j7,iēę^@pČĄ ,{mÎ>üR ZĘ{y¯RåLPü¯´ä{~u™fU|94ĨM$ņdYĄÚŦÛķמ:ūÛ'yĻÕâ’Ęā5Ÿ(ßgظ zŪŲ4šŲ^Ę:ųVZĩŊåĢÜyĄbEōĀmúķOŽūÎč3As˛ĖÚ=qøV ’K¯ÂÆáÉã2DĘA”(Įs˙ÖĢË5žĄŦÁ}iû,0:É(Œƒž0¸ÆN9§ÎČtŖ¨éĩ:{wŲŠGd'z°GLķZöl˛iņœÜe1į÷ũëŽG°Ô$6Ū]ÁŪ›žŽŅœúĢRŪ˙T]‹i–Ismäĸąf!ƒwā‘Įži)kŠSĸ’´{›ŅJíhõ4铞OJ†%hÁ•U&Ø č9÷§ؒĮh÷ĮéTû˜-ĖûŦ:1 Ā?{Zânĩ]:uē‰ągĖ[ŪģĢÂĖ;b¸{Ë B #dMšđpsœįëJ–ėsØ×ąSĀڞحøW*|˜‰b1€¸_—Ōļc8‹ãwŽk˜Ōbö9$ŽĩHʃ7'&š¤0'péĮ8ŠK†P}:ÕŖ"D HrJ‘ČŨéÚšĖŽ0 0į'×%ļå‡?ƜŸŧČۜzUô–6—Ę',OB88*T|Üįv F#%Û(ÜĖĄppsØP„ÂU žĻšŦU9Üz8Ђ쉛͠ςĮ†'ޏâ›Õĸãr/fl5žUrüwgōüi##cĩ@$cåÆOÖąí|O{¨^BÖzD“iM+Do€}Ū­ŗŽAõZßÄ×kVPIĨ47ë ļžGą”dîNĒéš|ŒGP ōō Ø(õŠ" ī,Ô&Đmī`Š{´Õz“’Á°o¨įŋOzI1ģŒÅđŧ“Éõ¨å•LL͐#5É.Šâ+ gIŌõĻŧ—­pIų{r’3ŒŒÖ|Ū)ÖĶÂēö ņé˙j͝žŠ´3`žNOĩ; ŧ #HŽË€Āã‘WrŒît\×q­x’?ÛiSeēļ3Ûŧ~`íûÛšų¸íÅmøW^šÖ4™ÚņaK›kŠmĨ0ä!(~đžF 4†Ũõ: "rdôéøÔRB –ąĪ W'gĢëēü–úžŸ„Z?ÚZ!ûŧé#S´Čādįõ¨$ņ>­{¤\ë:e¤š]´ŽnXM:!Ã˛ö_aĪNÔ¤˜ĶGQmrōŨIŠŲ‰ÎãVÎŨ…W%ģ\mÆŋ¨žŗ¤Ã¤ĮfaÔíZd{–`T…œ{0ũjŠņoˆ#ŅuAŦôßø•Ü´WC{üáHĪ–=yīM&)4vĈF[†ū5RÖáĻ$Nà ˙ ĮÅbx‹UÔSVŌtë­‚ęK'Ī4ŒŦ ĄnƒLb1—y9<œr;U™'bg!ûšãšÂšD}|Į+JŦփkÆĀŊČĒ­sxÚJ[K9F{ώķÃ`°ã§Ĩė~Æöhę`gû2üĀœķž §™.c˜k™–ÖUĶm –úFoĩŽXäzrjüŅĪi}ew38xåŗXŽüŧÕs‘ėģ3bY§e`ø +TôŊ)Ŧ$iMÔŌ´ÜČ$ åŊsŠÁyn΁zī{(xîŲR]Ų8 ?Zéė­eļRĪrĶ—mß>>˜íI;°”]8ŊEŋŧŽŲU6)šSļ8÷c8ęO°õ¨´éîîcŨÚy¯´|áƒPk/TY?á.ĶØĘvipģ3ƒĮ9˙=*8īoƁq0šXĻ+–OŧąŒvũhæÔ~ÉrĢu: 'upĒŨÆOĨHm›ô5‹öģ˜5ΞO"J"Œ‚ŧŽžõ]5 Jkh§C ‡œÂ!hÉ#“ß=F=)Š‘ė›Đépâ<>Ė TģÔc´šÚŨ‘÷\H0™ÉúöĒky¨5ŨíĒĩēĄIQļ9Č<ûå–{-ęeW•æBĖ>Q’§ ühsikŠąÔOw,c$@30{ĐÕÁ!<’Ö°ãÔ¯÷SC:Úį ¸ žũO6‹yy¨@ķN֎8Á€žu āņMO[*m+šŒÁ°y8õŨíŊ™€\†W˜R~cĐp8̰ îü8Î_j3jv–“ÃhM§Û"ÄÆO›‡ÆvúqëJr˛(sŋ#wí6æúK8˙ׯŠĖ= āū”Û̈máifm‘ %œŒ ĻēŖÅĢjQĪn‰´+ pr]N}ŊnjZĩõÜŌ­ÆžņÛųEƒ…%GˑĪņqKœj“5!ž†îÚ9 ŖqōFFj\˛žĶĘÆ?‡Úš'Qš˛ĶôÅš´Ųo0XŌT|OMĀôĪãT4}J_ÜŨæãėÁŨ¤ČWëˇöT9lkėmÍvv‹–` 9ĘËÉ'žD$+ 8 Ô˛žPĀ u'ĩTŽx™×dG_đŦ8Ĩfg°īZˇ3¤ąf&,ŖŽ@Ã}˛æ"dļ¸F‡Œ+s_æ(§ŠRv:+2~\ôíÛ5´ĨvœđŦ{–<’Žõļ¸(ŖĖ$õŧūÖūØĶĩ4ļž’‚í¤ˇ$āh#iúĖēđũ-.ÛQ’$Kƒyq7–¯%Äųw^9ūU¤ž$ŋ×ĩ}ã[X¤QȗļĄ[.  쁃î}k§Ķ"šļŌáŠîķíˇ* <åBo÷¤Û@Šz‡‡.o_FŧĢÁ¨iŇÚ*C‡6S â˛%đėÚVŖ§ˇˆ\Zęŧō)ŗ\‚Į'œûJė÷ąå[ ™ŧ¸;?­.f‚Į9?„î¤Ö4ũIĩ‡i­-Ė|… ę~öyāž:tĢ>Đƒär_¨îf3ņ*üÍ÷š•Wņ̝ÛęÛhš2Ū/”ZI%”F›‰Āž¸Á?•jhÆétčÖũ•¯"ge ŪÃͧv3/HđmΉ9‚ß]¸]"9|čl|ĩųI9ÛŋīĪn=ę°đ]õŦwÚm–Ŧ°éŽĖđs,{Î¨ŲĀžĮŽŦJ§qŨʞqõĻ1Š œôČõöŖ˜,s2øFčkēmí­øˇ‹NO*qnl +Kw­@||4McLÄR.§3M+5Ÿ*Į–ĮĪŽÃōŽĀmB 1Î:úûSœŠA8õ4)14rW^Ô%Õ´kų5ˇiČSËŽJícÜd~UNãÂz ŌuĢ/í8ĨūטË#}ŽÂØ Œ? ØšĘŒąį@Ļ™TmV”líĪSJ9‡dsSxUh—ĢmĄ§#ÄŪd c‘~PÜZ‚ËÂ{ë]XÛOo5ܗQ }čęĖI9ä1Ž1ų×ZŌ.$eĮ˛ŸëNÉU ãv Ī_zJac+Bđ͏‡,įļĶÖAĪæ7˜ûŽqÂĩfü øFNGZRÄŠl“ƒ‚súQ†aģŊœūT=wv¸rDÁU@ãŌ]AÕ¤MĖrŽŌ§ŒŠ”–āČÎM†l“ĶœtĨĨŦ ësūŨ;ȉ^Ô?—Âŗ;žį¯°Ĩ–n$v´RōäHۛœœžūĩІ\žsL¸šxši]R8ÆKŋ­G"ÚÆžÖoŠ›'‡tĮ†($) ÷­‘ŸÆ¯ŪÚÛę6om1eSŽCāđk–—Į^†Ķnõ‰”Cc#<ŗToâÍ~ ßmđˍ úœhé¸ Õ{2]VŨÛ4„âÅÜ\2ĀÄĄŪ\Ÿ§§ĩ(đ­ĩÖ§qsu#“0ېĀcč1üķYŌxōM:ö8ĩŨįLÁÛr[ĖBۜÖē˜nĄ¸ĩˆčДߏēF3œŌtėZÄKšFīÃ6wJ§Í™ qˆ“ccjķž{į4OĻ$ÚZX<*aLōã˙ZŽū4Đ ŠāËĢZ˙Ŗí2Ų9>˜ëøTēWŠ´}\ļŧ€äãËw(ų˙tāŠ|‰tļ–× _Zͧ5“yŠ ‡ķų˛:rG>•5߇âļ6°y }à †ääķūĨ%ĘDŦĶ:ĮŽ]ØøŸĘšiŧmåߗ¤éZ–­E–I­Ąã==häOd?o4÷4‡ hä‰ÚfYdķ p3é鯕lÚCö+!i$ 2 ļæ"ą4ī\ŪŦ’\øSŗ)fûHuíØ˙õĢOˆQĻĨĢĸë"ßvĪ1ĸ!]yų‚ûåDiŲčLë9-YÔ_é)u¨E¨ ŲŌD8ÛôĒpxe×O’Ņĩ ļĖáÜđFy'ķ<ŸĨOáßAâ.%‰Ŗ-¸+ČdSČ ÖÚn%ū^1ÆOøŌp]JU§dŽ`ĪĨˎézג3C\0WŋöÍR°Žō+ÕcRĮķ˝$lŽã“ôĶŦ~d?ŧģŽĻ˛ãđŊ”mų÷fÉo Ëōž„cĨC‡cHÖV÷ĀYÉ{"ßZÜĩ¸š€ T¨lŽ8úu¨SÃ÷&ÎŌÜę‡mšŨōFwįú×D›B•DÚ§ Ļ|¤eAÎzŽ*ųÜĪÛIhŒ¯ė[åŋšē]IUî# ōÃʑ÷yĪNŋI¤iWwˇwׯķ\`l…6ĻsīZqX°į°“š” ¨īŽ)¨E1:ŌjÁ°ļ4再Ŧo¸ËH¸uŽs]søSÃōZũ”čvKl2ÅåĒĮ‚q늚÷Ãēų„^évˇ&Ä&hƒ°öŖ™Šēn­Ļ;ZhÃXŠōų­VMŲæTÆ ƒĶžŊk‚Ņl ƒÃ:ÖŠ§Is.§c-ėVĀÜģ8;s‚vķ“ÔŠíæđô÷~%ƒQŊ[5˛ąâ´ˇ†3šƒŽĶæÛŽ9­+L͌“Xéļ–ķ:mw†BĀv8ëEŌZ™Áčļ ÛK}‰ĸœŨiΰX˟.KH2[~{šÃK= ÁĸHĸēš•!š”\ÍŌIĪ œl×ĢÁŖé,†ÛLąT›ũiŽ!ąĪ}ŋŽ*ĄšĶ%đW‚šˇ/íǰķŲˇ;ō3ëŒũkĶ>Ëi'˜~ÉģžO”ŧãšãžqHÖĐd–ĩˇtũÚņ˙ëÅ.aØķ°ú:x›ĮQÜ=ąF´FōK€‚cרb?:ގđ7ƒŧžsũ—æGĸČį ž;dķšîâ×´k­C뎒^bҍä€pŨ°Jļm`xš‚&‰ōLEĶõ ŪAc‰ŗ‡OļņVŗofņ ôß2ō(ßG.qÁ)+ÎgxitHô jhbÔZo)¤ķfX`OOģųŠô[]>Ō vˇŠÎŪ+r0aHÕSß#¤]*Ä2‘gnģrĘJ8Ī€¤æ46ÕbŌ¯ŧOâ(`*O#nrqÚˇ5 {}gÅ:ŎĢĒũ‚HR3hKmÂm ģ9#šÖđ=­ÄÚŗjtö÷^Ép’O†(į*2>+ĸŧŅ´ËéÖ[ËKkš#å ą+múdU9j$ŽkXņĢg¯jXˇĩ‚dįĘĨrŌ‚‰īRÜdęž&Õ,õŨAĸļąļ‡ėj×m - 9˜œsĪJíĻŅôëֆ{ģ yĻ„ūéĨˆ1OL[­'JŊšŠâķNĩ¸š>¤…Y—ņ Ф‚ĮâéíÖÚų ŊŊšk+XÚ<\yimōå[9Ų¸ëŸÃ5.´4Ũ_ƚ:Īy(ŒYLÂhŽLaˆÛŅ”˙ŊŸĨvwēw;Ü]iv’\IĮ’HTą\c>ÃôŦ¨ü5ĸËb}*ŨāÉ†6ˆmPOojJHv{ŖŌÚkúõÖŖwoš d‚vO-vįĖb>ö}MC øßû?Âv/ĢA¨^\ųž(ˇ‚ nN;šë¯ü5ĸęˇKuuiūføŖ.ŋŨm¤d}jíĩĨ­ŸŲ­ĄƒäDáTjm§ ŦĘúf¯§ŖÛ^-ŧŅ,ËŽ¤Wæ”"‚Ã(1ĶÔŌ۔’~Hã$A““ŧŽ­EĘCĖlŽFB‚LX^"ģņ X›ÃÚLUI–+ž7r1ˇžOâ+a”MsäÆĖą‡ō9>¯$Q‡}Ō@Įĩ å:ÄŪęKOÛB,hē{1ū´í^ÃÄúĩé‡^Ķ&šĶƒ[m:åYû†.wc¯ã]gŒ´˜ŽtÆŧˇ›ėz…Šouœmqœ)=vžsVü7Ģ&ģĻĮ~qō’Æ9Û áŋ_įV䖩ŖŅŗŒkHl`ũ߇ŧWĻĀ÷-/ Š>¸ßü…r^Ö.ÍũÉąđâß^4ŤŊšS</Ļ\íä×ĨüKŊžŗđTōXĄ]Ί,Ą°Q ÆGš8bøbs?…4›-6Æ&ļ14ˇ’LÛ#VWƏŊ““ƒØ âŠKŨģ%­l‰×Ä:ŧúd§PđėŲĒ65 ¸ĶĖú*Ļ{`jã§ģÕe‰toi÷qi÷rmˇdq÷Ö)+qÔWUŽø–Ál# Š.§t$Vš(#eW…rÅcŒgnNIĀ5OÄ^Ē–š~ˇŖˇŗƒí†F“$āŦq¨ zdrsÉĸ`Ņ/ü+}1ô–šÖ'ŠéáEot~xå^Bãû§G=ąR]x ÃWˇžûėÖąęw¨†bí[‚9l(ˇSĶŦ}_HÔ¯LÔžÍÛ^\C)Ŋ[}Ō"ą_õģ#ã ♉Žkzö°,âōÕī]ãÔe…?vUČ#Ė9n1€Ķ×{†‹ĄFeģŌõ+=\ž÷PҤRЁ$q‘÷›€ķ]úk÷K:}†™Æė‡NÔ#f ĐŒ į§zä–ÅÄ {Ēkp&Ŗium8–ōpģ­Āöcå$0aÖģmt]cLÖnd‚ŪãI[Ų<‡•x6!b¤ōŖvâ1Ō”ÚÜ"™ÎøZËZ‹JŒô2ŊģũšôFøûŠrĮL•­o¨[^Ũ=ĢYxēK˜TGš(Ø9ųļ‰#Ž b´´ûH­u ?PĶõA¨iŗ+[Ģ;Ģ´`Œ¨YË Ž0Ų#ąĻøŲ%K+;û@cÔāģŽ;B ûØOu#9Õ-Ũ”“HäuĮmpoô=;Äúvĸ€ä1‰QąŲļąoįô­uø5’Ãg}áũRMD(ķ€ú…'<ûŠŊņÄãBŅ…Œ,ZúųJ(Q;ļ={ ˇđûÃ6:6ˆ.Öxnī.†fēWŨžá3ĪĶÖŠŋvō] žņæšu,ShZŽQ‡ŨŽŨį8Ú?°|z.Ŧĩ}&ōß\Ô,ãŊšŽÖXŌPąĸ|d`s^†…ˆ%”g<Jā|zסúUĨ–—9ŗžŠây#ļ,ž^@=ŌĻ-\Ļ‹ÚVĢ{uŠnĩ-6Ū/.D¸pá_ ûƒ/cیօˇŧ7y5´0ją¸m°Ģ7œ‘ŽGĮZËT[}ZUĶü1wki"=ÅÜŌ[ųeØ.*ËJä`´ÔŦ,[CÔVö×V; ža|˙ß-­$“Õ‹Đėã“G˙„ĘîéuK‰u+{M’YĢ.ā–Æ1ž•>•ãMU´–ęßQPFe•d|ĩ ˇ$ô᝝5FŲæ“âÅ÷ö}čŦÕgkwT.ˇ'‡Ŧ4ũKPøqq GĻę^؟2A,{rŗØ­ß"“Úhž%Ōuģ‰íŦŽY§ˆxŨob ‘Eߋ|?iŠ˙g\j1%Îā›bu°Ú˛ŧ,ÚwÚ¤ē˛đî™;Ąķ§¸‡Ë$ä™'-ë‘é\ž“aĻXjW–:ö…yĒĮzĶC2G+Į*ŗnWāíĪ9ℐ›gXū;đŋŲdēME%ۍË9bĮ8\cŠÁâ§ø}mĻ‘õ(U"uY2 ØĮ$ĮƒųW ÷ÖgÆŅëÖöQéSKåLĸŪL´Šš[›qˇæÆ‹[žY|onöŌ—ŊˇImˆ„•‚’:‚yĄÁ™—|Gi÷Ž|+:NŌĮrÆHđß(€ųžlĘģy!Š`<ÕVTpę8#ĄŽįUõŋÉemu7ŲmdSēÚM ˛*.p=TÖϐž3“XŽ}JæĖéĢģtvČ>c‚Á$ŊĒ$ŠLëŠÎqŒt"RzĸŽ~Qģ'ņ5+gËÜŨ:ãĨDˆ$„̇8#5Œž—5D;•hįiĮ5æˇŅ•Ræ‚bîrįߎsé^™>|˛H8ÛßŊ`OW2‘nî/ÜĢ+ā›pĶ^_Á§éķ_\Ė#ļ‰wģąãÖŧŖ~ŖâÛšô\4×fuS‡lO##¯'ƒŽŪõŲkÖwž(øļVá.Ų`ģ[gųC•!Šū\úSq×PV-ÚøĪLš˛žēuē´Kmž`灐°oģˇ?{8āuéL1ĶĨĶĩ ãâ;æ!+*dd|ž„sY÷ú¯‹õ îDĐŖļš‰ŖŲʒČF~f˛Lû×>!ņĢøŽ ŧ?rĩ`]“Ou`L{$`qÔãĻ)ōĄ\ęĮÚRiÍ{5žĨ Ēd’Ü€æA‘P;ŸĨ]ĶüQcŠ_]ØĮÚ]Û'šb–ŨĸgBp ƒÔví\Ļ­g¯ß|7ŗĶA›íą4Ŗ)XļųÎ0JâŽ'öËü@]\čw ĶūÎßžŗŋæíĶņôĸŅÜ 4īé_…ãšĶtģˆ!¸žkh­ÚbÄäādƒßĩmYęŪv…>ĸú}ärĮæ-xx v9ĮɍTO ɧŪčP]FoĨ¸xÅŌĢaË0d~0ĘHëøVž…ŋaá&ņEö ĒÁįä‚x ĮŽ3×ړQc,|oo.—.§>—}mbļ´H #qąyääÖn§ãhī|-Ž›+[˜¯māF €Á•ˆãœŽĸŗ“Aņ%į…-´9ŪÎ[=ĄXMŊeÚw.F8Áĩ¯ãņNąáĢŨ>įK°‰æ‡ĘĘŨįq=[…ā{sÖĢŨL55ín4Û=CJ́kČŦ ÛLQOČĢ*œäG*Ŧž4ļ,zĢiˇž[ŪO/ \6íš8=3ĮzĢ<øÕ´N;+yæļĩ{kˆ’ãjÅ~ebŧũßJÄģĶé_”n‚}é÷Pëöž*‹WæylD7v‹>ĀâAV#ãMŧ_wIÕ#Ķ­æ¸†cš”"Æ‚9=pZjÄļléÚŽ”uŊnU´¸ĩ¸ˇHšîyÆÕeÁہ“ĐØRéū3ąŊ¸´/ öÖ÷ŽÉm<А“Ā7löõŦÖŅĩKŨWÄ^mŠÛVļÅ8™[aE*7/\öĒ=WUŅ4}2[vą–&ššWVMąt(A$“ÔqÍ+D¤ėt÷^,ĶŦîoĸh¯ŲŦļųÆ+fm€‚sĮđāuéQkšĩœū‚{}V[a¨lû4°&é\6v8îzV2Ļļú׉Øčå“PĩX큚ŒUJsĪ|įđ¨Î‡ŦÅĄxjå´eēŸIFˇ¸°vFķQ”)eäŠ#ķBŠŲĢáåŌÛGŧŊļÕ/Ž›,.§ģ!Ĩų1Œ rxõĢē]ŨŸ‰<8Âęę;yr‹2ü˛.=sRé‚x´‹™ĄĐcĶĨųŒ6Ĩ;x/ˇ€I㊨m5 BĪÂŅęĻ,WŠë; $%‹``߂yãšMu<÷EÕĻŧĶ\_xģP‹Q7ÆŌÚ¤BÄYŽFO<×uĒøŖJđķYéēÆĸÂæH~y|ŧŒc–8é“Đ â|;Šļ•cwcyá}Nâé¯^ę5û8;IÁ^§Ž•ŗŽęŌØk^Õõm&V„ÚJ’Á>fÉ\) ƒŽxūuŖWd§ĄŪiĶ$Ú|SC:Í Š'Æ2āâ­I§Ua܌æĢØß%í´GÅÆ­ļDÃ:ę*gšXcy2NyŦt(… xãFäČĮīŪĨĨmfWqŅąIÔW1åC}ŋưüMâ}Cž™r.&ŽĶËöũqBÔmØæm͖xãÃĒļ0€ōyŦŊ5<4.ĩA?“mqŠF¯ue>'qVčĀį<z%Ž×GŋŗŊĐ­T[:ēŨˆ¤XĄd v’X¸69ëŒŌ(ĮÕRŌ_Ú­Õô֓čŌ‹fPž`2GÂîEëÛ4˙ ëNiĢj—ēŦee¸ "ũ•á@ääíSËp{đ++ÄW7ڗŸ¨Z\ÄļĪŠil‹$oWisū¸č žk"+({ŌÖŨŒ åÉizŦŅ;(Č0xbģIČ=úâŽÉĢ2ÔėŧĨ%ÎŖŦčđŊēü–Oƒ,eŲ÷cĻyâēm_ZŌŧ#ĨĮ  Ví†Î]Ō@;W#8Ȩė`#yíMÉl‰KĢ;h.­olā玐=ŧĒdSÃČĢ0¸ŲˇnC œÕÉx=!Hu WVļ´žš8ļž6œ8öÜGáKũŠâ9<{6™iũœla† O¸0Fb ārÜ8V|ˇeÜëX!*FxäSvĢąútšâ$ņíáž%´?b­i‚§ĖeVÚŌnČŋ=:Õ[Ÿ됯ˆdƒû)ŋŗ%ĘĮĩķ$AAāúûûbŸ#atz$`" ūŅūU\A$ŌCŅ™bûȒÃęs:ˆõ†Ötk}FÛOÚÄO$&fxĘŽü6x9•›áŋ _Zxš+Ķoö-:ÔNbmûEÃJI;ö ƒČž”Úî;æķFxæągņNío.¯f˛+´mœ7+ ŽĩŽ&Ų&RŲĮW,öįãUŗG‚NŽØeīlū™ĸ:ƒ:ë=BĘū¸ąģ‚á3€b8ĪĄ"˛/üKĻXJ-îoc7DļČwHŲé…ŸĘ˛üB–úO<=}eŠæúvĩ¸H†Ņ:ęØęTķšÄ¸×æŗÔ|Aw‡ô–ģĶį,ķO›"íÎāvžvûJ\ˇÎûq˞§°öĸ1å´ œgķŽbëÅfkĢ+&Ô¯ĄķÂÜHQ#ä2O°ôŠŧ9âFÖ5;ũ.öĀZjEDŠŽYXãūH¨pi\ĩ$o•˜Ī&A$ãˇĩ=I›,:ĶîqŽHüM.Đ#+“ęk9"ҟ¨ŧ‚Îaö¤ņƒŠâWRšŨÚÔ;Ąt}œd‚>jî/Ki*88u*OáÚ¸k.ōÖw…$70íÜ 2äô÷éUJŠ~‡K`ÕŨœqZį匜sĨeX žY Ÿ—ŒÖš4|Ēã+-Mgš|Ŗ†ÎzâĨ`IPsĪaëQ( c “Ø:” ō3ŽxĮĨjŒØôŒÆ$ôŲ$؇xQڜŖËŒŗĶ4M¸‘…bĮëOQ ŲʈÆzķÜTĸ1š†zŸAíQĮ@8ų‡ qÖ§ōūfw#$ũiĢ€ĸ@>î98Āæ–•„6JŽ­×ži9QķęOoj•aRūiŒ–ëĪj­DN)ģyôŽi ûļqĀÜGĩ;’Č ˆ`HÃgŪõúĶ$n¤ęļ˛HÅO ã€{uü+&įX˛ŅÚČŨy…¯&#ĸË\rž8ņ.Ģaâ;m9a…4ë…_ßO KüŪÃĒģø“Ä“øwGģ)§AĄ{ ĒŽ_ËcÁö' ųŠÖ0{˛;™á‹RpnâIa†@ʲ(a¸t5Ĩö­øA$u+Đ×/ŧLū.ŊŌížÁ´ëU…%VÜU÷ŒÁöāUxŧI­AâM6ŌėXG ė¯ą÷ÍUČf`qÎ)¨°šÜĪvb™X0%ž\‘Ō¨ Rîöd–67;>žÕÂjÚˇˆnėŧSåßÚšd„.Č fMšü§O­&Šéšļ‡ÃE4:ÔNėžY¤(aÉ9'ŊŽÁĖļ=7ÍP…T| vííôǰ\,ĶHŠáļ˜gŸĮŌ°üKŠęVbleļĩICy——aåUL‚Äœ×#á ßjWß "—ŽÍrÆĢœNrÄĶ (]\.¯cÔcFPǎÔđ)ã…KģTĖÜ=~•æV7ZŨŋĩ]Zë[’ä>5Cų_ÍŲģvsŽøíš–+Ÿ[hˇķęWh…´ōÖûJHâAĪPã×?ƒR]ŽÚ{Ôk€a)'ČŽ ã$Ô{u­ Į…ž\ž;âŧžķûzĮÂKâÖČđ[O$| 1Ÿ}Ų&ē+}CQ°ņlúMÖ¤×pĪcö¨Ė‘„18}¸ų‡<ķÅŒ9‘ŌéîĶÆP g;ģsVäf–eʅ'§įžÖ¯fņ.ę˛ŨĮx“ųŅŦXY9&īųšmöĄŽ'Ä÷ë˛ŖiWm堉0ČNĶ‘Ķš=›Ŋƒ˜ėîĻ Aádˎ¤~•ą˛ ĨzúŸŌŧŪîëYÄē,m{ȝĸiZßČTHŲP0Û܌žū•čPÜŽ=í哟–B2OĀīK• Náq ŽhJĮģĖ8 sŌ˛4­JË\쏏˛ŸxÍ´€.0ËíéSøˇT}7ÃwwčÆå“ɡU“#üĢÄæ¸ß‰´_ÍĻ]i’YE{iĸoY2ņ¤üŊĪ'ķĻŖîļ žyž6x؃’ÆOZ,mŌ>Aķœn<’ĨrwēÍÕ÷‰âļÕR´čŖ–6ÁēŖ6͟Ļ3üĒĩ‡‰uČoŧ:onmŽŠī#ŽģËŨŲ9÷Ŗ•ŊBį]ŽÆ!´Yĸ įĢWŨ¤Ö„;ÚÆKÎŖ,së^{s­x]Ôî×EˇIl-nÍŋ–Û6¸S†ff`ÃÛ­=˙ˆ’įÄvöˇÖ0Ž”‘ÉërĀĄBûzõš]Áŗž;˜áG^ ri˛ ($’T፴MIõ Ōöx„RĪmŒŠ2eÉœî‘FĖĘJޏëM FJË#ꓲË5‚?ČéWfšCF$ČÃ<Ė͝Ö÷VŊ˙E‘#%q!BtĢđ[ųwrČD?)#ķŠąE‹-á$RÛš㎕$E˙|Ŧ>^Ēwdž*§›äŦ¤ÄĪláŽ@ɀH9=28’ģAōˈrŖ;ÔÚšīÜØGŖŪ‹ûØmŌHZžNw9îyŽ’÷‹8āíkÍü~Øø‡Âú…ôtčæd—ˁķ)ÉOåUûÖ&[ÚŽ™ĄØépBVH pËI‰>™rĮč*åĮ†ĩ2įFŸT„ę7,ŗ“+•Kŧ`îIʰåHįŽkKNđōøĸĀøšŌh˙ĩI"h&KwX,Œt*9ęsL{ØmļY_ŲɁkĒ1FÃ?ęŽ;yéģôÅi§B™Ŋgh|9ĒZŪ3Ũ ]EV¸îe3%FKwĘįŨkGÆÚü$ģĶÂ)¸ĀxIĀ ãĻŋ#ņŽnkYoė$ˆÂJ`q°$ö׌üŽXąükĄĐĩé5M1`œ:jp*éJ€QąÃ`d Þžĩ.ëRíĐâ4O\Īđâx^ÚÚę÷KG*ÎT•9ŨƒÔŽF;âē+ Â~‹Ŋ3,Ę%ŨÅ÷›3Đû\Œ4—đĪĄž0A-†¤wKF’÷b ŒãīsękĨ’¯fûD˛>ĸ…ŧR;mûCāūęu;ŸŠķTûޤĮąČŪ(ŋYŽ‘aŗŽÜ\Ål„b aČ,äĮAŅAõŦO˛ VōÂáfX%›OK…›)2Ž{ã§…ũ+¯Õīl4 Q‡zÜëX BNæĀčĒŊzĨ§ŲÃ5å…õÍšŠ>ŪųcȄm77ą,čG’vWFķĘŗ ­6PŋŌb° soīw×rugAļđ–œīsqoy}q+–Š)4ŠU#pąí#¯z>ÅnúÛmƒËšßžÉs$õ–!˙-"=JsŽqéVŸÄēö™n÷’ĀڕŠÅļÛ|ĸ9ɑsōÜcĩ>š \šh-|Mã;[{[{Ģ{8c7ąMB$Ãf1ĩ‡ ąįØW+ã}Tkū1[4bēeƒ‹w–3ōÆĖ~wüÁûVõöŗuá}NîG—RÔP˛°\ˆōNĪøÖ‡ôMeô`émŸ ŌũĒMBõÂŦ„}Āō@É>äÕ-5&Zčtz‡„ĻĩŽĮL†ėË}Š\ʒL~øĩ( į×hDį×ë]g"°t—ėŪ]„žppZwÚUגÕĘXxšĪNÔæūĖ[ĪkW&5žXW)wTĮĘ ;õ9í[Ģá{𠯎â+Ÿ6é˜Ëod˜­¸@ūķ5ũK4ŧĻM§h0 ‹‚×ķĀw9#đéøQ}áË×ņÖlõ™í7‘Īn"WWI'îįŸÎĩôų[8Ո;W ?RK§°XO\öiԘĮ×ŲŠģGĻxEZö]nËWšŠÚáĖÍl°‡''$!#+œŪĩgRđzũ“Qš{Ąšˆ 4‹jĄ—wŒžĮükn ›ģģ;)co}¯p¤ā ™Ü=‰ã¯zĖņæ­ycĻÁ5„Ǟ,č$/đ˜/ŗĪ|Đš›Ü4D‰āëŗqĄÜ\—ŅФCėĘ‚6œüŨv€?ZëdVōdÁ9#¨5¸hTÆÛÆ8+\žŊŦkēG…`úqÕ<âģcÜWa8Aū.G^æÃcjÚÖ!§îMĒe;˜ƒ’O^ĩɟ kŌxŖû~ĶS°‚Xã6öĘÖĖËåį?7Ė>nMtÖĘt˙ÛGtÛeŠWËgæéõŠl.ãš°ŠXŸzž0AíŪĨ6ļŽz öEõcTūŅŋŽ3°Ŗ„7Rįß=+$ø7W{^Ô­ ę„<› $ĮÆ>n~Zî.Qš H ķ~>•V Ør°M YŠG,=úŨhr–ã˛ąÉjē[m*îßRŽ=SLO%gX@VL`)B}*ī„<=&™=æ§{z/u;ļũüŠ>TÁ#ōũiŨJšƒÅ™#Š7 æŋĘ öĪjԂK@ą¨Úx4œŨŦĮʡ+n*ĄpŊķԜûŠĻĀŦšÁįļ)'UŽËÉÅ4šĄÎKqœ}ßķÅe-‹DŦąZČÅ†Đ§$öŦa$lY€ú˙œÖ†ŽĄ4[¯0—Ä,[¯•Ė›ãiåÂdŠXŅԎANž×)ŽgcfɆŽ~P+dƒäŠË÷ôŦ›,Ē  3ëZä'ƒ?s"ĻWHãi ŽI' ÃđĢ‘Ēíe‚íč}}*Yr9qŪŦŽ@Æ6Ö´FlQ´Ļ`t§¨S IÚy㊨ĀÂc#Œ“R ŦK ?{ Ģ$Āž´<ĐĄ]ĖģŽvõ9#œZqÚВØ`y;iÁDŠŽPa~nJ!čvąÁéĶÖŦ€ĒW.‘Č Ģ¨ÎIâŦâ3ĩÆ@ãō§°‰ V ų@āz°x`ÅØH訨ē‚ë’Ŋ~Ŋi e‹.ÁŽšęyū”īrlr^>đ•Į‰ô›x,Ž. ›Ė]ü+ 2:Õ {Á×úœ:eŊžŦ,íėf8Ö-įzލé]ۀ2O@ A"Œå@cÅW4•­Đ,Ž0økWOkA­´QM+x‚™|ž8ūč<ūfąm~j6ŋdoøH™ÚåæęÄ+gvIäąНC“{ÄķžœS2Kd{äU*’Ø\¨ãáđEÃGŦ$šôė5SûŌ-ŅyĪëĮb‘ŧv×:%ÂkŌŧšV a_™Aö#’ŖnNzWhከĀ8įĨI mÃ*áŽ{SS`Ō9Ũ{ ŽjöˆģžŌ{@ËûžŽ§¨Īnã>õO@đ(Đĩ6–-^ņŦ’F’+ØPHū#Ÿ›Øļy4ąģjņÉÅ nÖ•îqÖlė^øû˛KԑE´ō s“žžô[|;X´ŠŦ\Õ՞Lˆãū$QĶž„×hGī†vƒÖ—!T6X(íëOžAdrMđōŨü843ĒęBĪÎķGīžƒ Ķî‚3Zŗ,†¯§&ĄŠË:@-Ī™pt ´†Ī=~ĩ͆äpGm´˜ļK´trp9ôĮ4)0˛8ģ/…z]‘˛uÔ5’ŌBņˇ›´NvØzã¯zĩÃģ!e¨ÚļŠĒIûĢÜnräuįo~‡č+­ÉÔƒĐhi9Ū9 1ÍŌ #œƒÁQę:}Ûj:Ŗĩ‚á pœįåį=>‚˛|i ÖĢâ=KŗŌĻķ .[Q#jB€üĀüGŌģĩ‘YI%ŽCQy&f,Tsׯ֎kjš‡â ¯ˆî 3ęWąCŪ°ĀÁWx$†9i燂ĄÔüGm­>§¨E=žĶDę6õ={×NĒZ3ŗp\c#¯Z­žHî$TīÆH”˜ėŽwū¤Š]bAŦj,u1ļbYˇËØqô5 øSûWXŧ+¤ž`WTmĀö$Æß—é]EœŽöāÍ'™ŋώ“Éļ`œ: )=M>f9É|ąë¯¨Ųjˇ|3°’æÖ˙Zs×=åëTĻđ =ö­p|E|Ē…'@‰Ķ#>ËōôčMu-į„_´îrAQ“íV<Å Ĩ¸Uä⒔¯ 4r āģ›SĄųZíãĮĨŠU‡úĖļT`tčxŽŋËI]íĶ’F3ŠĨ\Ū™. #‘GŠ&Ĩˇ•¤•íå9uî;ķéIģęÃbȊ7A‚û=3KŒ›IȨ.g6ꊇiv$PĻAvG›•:ũ)ŨrP`°zv¨Õ“qlü¸ĀĻÜeÕ×+>´‘ēy9mŋ/ˇJWhcäÚî@9ü+Å:ž¤čĪs̤RÜ,Ėčęy­hŲˇסĨrž7ĐŽ5[}:HØy6W‹4ŽXÁËu댊¨ī¨žÆn—­ÜÜÉ •„vŪ3fK{iôö+9 F}€üęņo:•ôļš|6ōžÄĒ$[¯˜Åą~PsÖĒ|FÔR ÚʛãĪImĀ$¨,X{.O§´|I¤Ūxž]Ąž[M57sLŒ2ÍÁLdqÁ'=?˛oЉtĪOkÆŅ4û‹Ļ’8Q^ šguQœÛŗXú,CÃڅ•ÚÛE \ËĨ_-ēlŒČų2ãļF˙ŧ+"ŲäŊņ\ē—Ē>§eĐ_K4˛|ĸ–@ėNrÛ{úúS#´×5Šĩæi$˜]K3[Z“E,˜I,ŊÂîUęE;[pšŨøĪÃąøÃ—VjŠn‚™ 'ĒČûôük“đ/ˆ4ŲmMΊ=Øŋ´UŗDû32B€ÆĐpNIÁâģ ęĒčpË ÅÔL`¸\clŠō¸ĮĻA#ë^wâ“{āoˆiĒéí6ÚĸaüĀĪrFâĀß øšQW\ ÷šĶß[5敊ÉáĪÉ37™säBąČæNģrF@ČéÔtû(´īŨŪ’õėbH‘ã3IÁ.…A>PGž*Ģ]fk…ģÕ´›;ã)s¤ÎđNƒØ }~›o¯Nm'ĩŌnˈ˜ĩÅÖŠ)ŗ}ÖālįŒņÆM!5Ū‹kp X'ƒæ†h@ ŊŊēåīg•5%ЍģYęúœ›g–Ü&⠝īžĪ´ę šŠbēLļ¯5ōŪkW{IžúŽF=p8ė™Šô;ËK=7Wņc4˙bLV1M3ļzā9$| Ą+°2<_ö?xöĮÐ˛„„â}Ü ˛ƒėŧ}I­)to é7S]^¤sydÚXÛŨHķČPĂw0Pā ĘđŸ=åŊÆ­ydŗ]ÜL펄Wq,cápĮP1ôÜĶsâÛÍJč+iŨᆿHöųSO02žUō}*›č$ē–´û;¯ ø’›‹­ÎÎø–Ö0ī| ĢnƒŒg5kÄžú8u[­TØŨ@˙h’iÎøā^ŅĒä.y=N*ļ—aĻxĀ]ÜÜO= ‹ĢwIC`ÆÄmØîāŒ{ÕįIĻxoOž˜Ë2_Ŧ37˜F˛NŨSõÔv%đV¤—–×VÍ5œķZ:Ân-N#•Jî øOb=EGņ)-Ī€õ#w"!DŨnCė>glzõé[ļÚ5­†Ŗyl…ež‘d”ö%WhĀü3øÔ×–÷AîÖö6ä2Æa鑞øĄ=n=lq7 ϟøvIeˇ×\З/„˜\įÄkAĻÃđÛPc$FÖ˜Œ¤_iP¨FkÔfŌôŠãˇ‚M6Ųã…ËBÂ7R@ĮĶ_JĶEŦļđév^TŦ ‘ų+ĩÎs’1õ4ų…c“˛´°ĩņą‹G¸FŅî´ųöį- mŗŸ•Ž[§Ĩsļ­gmđ˜Ü "ķ𠚃0j÷įîķô¯RM;OŠÔŲÃgm삉B°Æ9įņĒoŖh–Ņ“HĶ’ ûß6ņ…×Ļ(æî 'â(Ŗ×|iqĻßjđØÛ-Š=e $,NįLģ‡éU?°tŲ|aĻi­{ssjÚK†hį*­†7ĘF3ƒœuĀŽūM;@Ö-­ÃXé÷–Н°ü‰"Ļ;/P>•Uô- õ7ē]6ĖܯW¨aÆßËcĨ.aōž_mjĐø-N-Fđ]ZjbŪöÆØ‰įšĮNr}}+ Öl,§ņÖąŲÜĮHÄR>mÄŧä*ôްøW@xŒč–C0fŒ@¸ŨĶ8õÅMsáíöhgŸNˇ’[xü¨ŲĐĢŽ”:‰°Pv<ĸōÎüáÛš$‚ú+;GšōͧØėŒĀnSũå>žĩč~ˇą‡Áö­Ļ}ŖėŌ–‘EÁԓČ8ã•vo č mĢhö(›r „aOåßŌ´ã …aŠ5HÔpčLæœl‡gpōP…Ü܎pyŖ áš<ûtĻČŦ„šäs•4E3PFņÍ;€9`ŧt‘p[îļ:})r[$§ã#ĩPP›š;˛xāS˸]Ō'˜Ē3ķ G•$ŠÅmܸé€sCÆåd€Âž¸î*ŋ”žFÃ7ĖIŠ‘G—†@CL9ų‰€4ŌĐWō ÆKÆzbĄŸĖ*XgŠlgcį)ËĐ튪ŠË­œŽ˙6ÕĀĄ=…7ĸ**îČį-uģ¸õļ˛ŧxÂŗåŋw‘]2 ’3…ÎvŒ×ö-káønŒˆˇa˜ííŨ{úāūu×éWÉŠYŦņ09\?ąīJšž" {Éyęõ­qdƝîxõ>՝§ë71ę2Yę%XFŦúœ˙…ti¨cÁ—ŪšŅĻGŠļϘC2O˜ß# āqū}h’iŨEÅϤŽ„Įš\îRqÆOzįd›Z‹Wļ˛k›}Ōå˛ąŒ“úUÍP!ūÃtH7b~ö8Á÷­š>%˛,2ķŒúSŨ]S„œZTžüßÚXØĪr4lîÛāwįņéPęi­ivĸäęęÛ Ļ%<čŧÂw|Ā›CíäīX>1dE 27Ėc=0süŠĘ6MŠŒųĨ$GŽ_YÅu¯‰Ŗ ´Â ŽGŌĻĐŽõ=÷–ˇė&xdQÆĐ@#éW´¨‰Ņ,Ęļ@0O9ãŠĢÖvö÷Ëd<¤yœîĀĮōĻĸôiŠUŊŽ~Ųĩ+RęĪûLâ$œ=GŊZÔ,uŸ(ĩŽĨ™SLjÔĮõĒ6wđCâ›ķ&å‹, ‘yãJ׋Y´šÕRŌØ†6v qØzÖqĩĩfŗæOEГOįĶíä•de•ÁS¸qŌ­ėdVŒ˛zŌ\“âļ27dSū5 ­ËK*‰lĨˆį$šĘļNڏ]G^ę'Nˇˆ˜žM͡Šl~++WŧŋYĨx-ĸ1Crdī>œqÛ=ëĄb¤1xÆ3Y^"ŧš%ԁ,6(ËqJ{n]-d•Š~ÕPĶ›Ėcš6åz)äwŖÄz´úmēEiyæpĄØ|Ģë“ÅSŌŧÍ+WŠĘTÂÜÄQیöúģ}žÖã‹fmíāb[ũļāČTŠ{žfîœU]vÜĨĻ\jˇPMä[­˛’Žë!įŽHük¤Le õg×Ūą<,ÅôųĘĘ_¨ČĪøÖķ<{Õ@úô4SÚæuėĻŌEKR–Ņųe6”T‘ÔvŽb~î}–ōŌ(•œD¸rH\Œļp=Ģ̚eÃn\F –5Į^Y›í.}VC"I#†DįåŒc¸æŠ’ļÅaá|[Ŗ€ÄŠ”´āš¨ŗ•ŊeXÜÆĘ<ōAäM*c>› ÎųmŖvzîųUĩfSĮ,}ëEĩĖ$ŦÚė3"A´äįŒ/­A Wǰųˆũ*âîPąöãŊ ģjŗ€ŲÎ2?.)ŊDŠņ2ČÅGN€âŧ÷ĮW:õī‹Ŧt=6õāŗ–Ũf’4;2 ˛ļXrF;{×§Ē!@Ę~}ŖY:§‡4ũjkio-üÉ­Îb•]‘מ›”įÔâÔu%ĢžJ–Ö~×,­ÜonėYd—Í‚h\0ųICtĮ õŗąēÔ Ņu}bŪoéöĻâÕžŌēRØU|vF;ãđĢū7}ÜözÆŋdļ„Ū_\÷40/EF9Ã1ŽRûF‡Rŗ aĻ:ē’;;(w}Š6#ᕉIHÁ ž+UĒģ"Öz“bēL2ĪĒiö˛DŗÅQĀ`ۈ( K}kŒ—ÄĄ&}G–ké.'{Nęɀwf<¤ˆč\Œž8­ YŋļJļ“P˛ˇ“‹ûˋ(āy“Ų‹33^˜&ˇüeáŨ*ĶÁ `´ļĨĒMjėƒ‚Ŧ>R{îč}sPšOR­Ļ‚h'OŌõ”ME]'Uˆ4Yošrƒ §<î+Éī”5/Ä=5ĪÜBŠžęæÂŲįpÄdU-?HēžŌuŲmb1,ˇæķLpVDîčŦÃčMuē&¨šŪ“ozаĖŋši{fdļ¸ļēŲ¨XËō´ˆ ˜ä*@-†œgžzVž…§^ũŽ XlSJŌy˙ZMĖŋí1ļs×u7^øyĨꑙ[Û9Áȑ'gä˙Ŋ“ĪpŠMlĘą=ÖĨcaysuhÂ;›đģ‹ ĀVÁô`ĄžŖ5ÄÍãÍgÄvMirŦI i&,ŽĒ(våÁäsV5‡wënnõ]v{ë{WWeH‚8Œpė“ķmëŽrk§đ֋Ļh> 쎎ˇčâÎāá‹*€7u=Ŋ÷{U++ŠÍ‘ZkÅ֖æh§X•Õ&^āÜ Rw#ížÕ…4 -_Āz]˞Lˇ¯MÔ3:Ę$gvsø+SҚÚÃX:]ˆ–ëQHž`PXĻĖįØsųÖˆž&Ņ<'k¤ÅĸDזđų~tˇj"ë׎OĶ—-´ ę;Bņ[[čˇgY˜É5…ķØyˆ7=Ã…ĀĪĄ­oiŗŲßÍ#ÉØĨK¨f,ßt.ŌCg ÁëXsø6úËÃvĐ[ y#ģĢŧ';IGO>”ũFĪV—Į–Z…žœ­emnöī)Amø%‚õĀ#4Ŧē;HÕü=m~šv–’D—ŌË$sŦMäÍ(åÂąęFN8ŦM&KQņü›ÖŪ+´. lņÉāą¨ŖƒÅwމyŖ‡’ÚyVXžØŠŠ Š:(ܜՏėMjãLņ”é˙g:žé- •âc€N Ûú͞î+륚‰-XƒLTšYîbķĸ-“hlƒøÆĒéž7ŌĩģiVęÉ-üƒKˆ ŽÔ8Élc9ūMeXÅ­ŋ‰ôK×Đį†(´ķk(’hūF,šn u¨lŖņ.™á­WOM9eŠId‚YdYËĘXa='œt8D™Đč^$´×nî-aŠî ĄE}ˇ1ė,Ņ‡ą­åXÔ}9Īs^y§éž$—^ÔfkkËÔ-būVŠF„Ą9ËÎ@Āč+wÃē.ŗĨ\^ÉĒk¨ĩÁ]ŋ)1ž€œŊ°8¨”Rę8ɛ“3šÉo””Ø›‚qŽqO‘Ŗ8zSbËl ˇŊe-JûoŲ¤-Č*AĪĨrōv?g˜Š$žEuWXœĀĪ=ëŸk[¡Ļ YC}j`™˛’Z3JÄís€žĩŽ‹˜ŲwœtôŦĢ ˛žz`s[1üŠK.3ĀŦ§šĢ1Fa7č \p Ā98횝äõÎ;UWĘBï\VˆÉŠWQŧ æœŦLgƒÔČëõĻ$…ÉژĻOj‘Jg'-‘’4!Ō!hÁga¸ŒāĶ•@ Ā€æ“!ÁūŲŗš‘JķÁ'‚KvĒķĮ €ÃļN9&œ>Qšō2šĮv턊nâ#*ŦYŊÍ4HũĮ•Áü*Ģ2°‘T^:Ôü‘‚Āąõ¨•›°ĪCŒÕ—BWĖČŨŠękœņ_UŗŌ ŨŽd€Šü Oâģ-Bí,_OÚŅĮ!i1 \ņÁÉĒ~…ŽÛΡé$pTäI!bsęqÍDģ´#Žvõ7_FŌ‘e"ÖˇđČ8íYžŊ’+ˍ2ãQ•nG#‚?,é&¤ĩ*Ŧžn>Rßsv:Ÿl×.ūÕdÔMã_Aåƒ/’¤zsMĢ4ҤĨFlęY•ČÄärZĮđÔčōj„–æäļ{m=+AĸģkŠ$QܜfM„ŠÛ ÖŽŠØÍ,‰ŠÂUØĄ9lxĒwēfpQä’lĐ×ŦŒ‡íöš[˜ĮŨã.8#ˇQЧa¨EĢj–2‰ãŠ\ĀÉÛΝ­n3%ÁR^ ū5‘mŖĩŋíKgAĢ‹oSõũhåwē*ĨēØéųj šúõĪxÆr–V¤šĻF@ÁëųÖōm&mąÍsēŽ‹Š\;KŠ qåĄˆŖŌMU‘8~XΚNÖ6ôéTi6ĒĄ0§{U Ŧī°'’éT4Ŋ:úÍ WWbxxōöG°€;UÉŌYíäŽ0KŅdĀ;OĐņT¯c)YĪs˜Ō[ÅzŒck|Ο]Ãúæĩ’Úĩ™/^æ4 ›ãi’Iüǜŋĩģ{¨ĩEią9‹‚O\ķëUu2ūí%ú//ļØđ?*Å&–¨ė›Œå¤´ąšĻjĐjžs[ųž\D‘°ûūŊZÎā@}ÜæĸĶ´øŦ4č--ãĀëĪņSRF§kîÉÁÆGZÕ]-N9rŨōėHŖËgŽ}Ģ ]ĩ^éÖʒ_1ĮNO¯&ĩŽÚclëmĩnpB3ËžŲĪ Z“Uŗ5Š0A`Š9č=ęg{ZÆÔO™Ŋ‹> iqix€ūéļ1ôĄįéV´i–kfŋRĮíOæ{/Eũ)5K9o´o˛Îc†yË&JŠĪQž{TëļÚYŽŌ4g~@ü)üģuĸŪõÆåzj=L/°ļ×/­ū`~l܃éß×O$Ў$Œž98ÉŽHézĀԅę-ēM#™1šˆéŒ˜Î+ š+öŌļ'Ųūܨ7ÂsĪ隘hŠŽ”¤šfFēXŦZeļá5Ų Ûœ<ž˙į5f_Ø2¨œÉÆ<Ügß§JĪ‚ËY]Lj2E ÎŧÄģF1€>•ŅÜŽ-÷ȃv2Bö>”Ōæwa'ȔbĖ?ÜĩŊÍÆžØ,ŒpHôúúŒč&¸‚8šIeŠ$Œnvvš{Ģ}Z{ËkØ´Ā’G×l€“Ī ķÜV„ú\ZôVĪuö…X†ŒđO=ũE“ĩ‚Ĩ8ļ¤Ūû’Ųø† OR[8‘ąĩ›yČ1ë×­nÃļO^0+:×M˛ˇ#ėöąĄŏ˜ņÜõ­!FaŒsė+H'ģ9ęr_ÜØvüĢ6ņޏ…ØÂ˛DĶ(Ëĸ°ÜčHė=é°@ŲrJí<@ū•äô­oBņ“xžŪYbąÆĻâßĮ…†_LúđsZEsˇcOÅ\įÄwQÛ¤’Íyai6p¸‰aú×MĨOš^—c&ĄtŊõɐ,~iûÅä=ũ€8Č^ę×wžņ “@ĐjöW6ˇō ÆøÚÆ:…Úģą“Ö¯x[ÃZÖĢaæŪK–“{ xŲ#žÎÜt]į,ÍÉ;ǤŽĩzčtŸ4vÔ^Îg„ĸ+ŗ\@Í$Q…•œc<ũjĨĻĢ{ãûcsoiŽ• įɖād•—ø‚öŗĪj“Į6vļūļŗ„}ŸL†ę™"*GģŸ`ÛsSiļ7žŗ˛†ō}=,ÕRæeōŨX/ °Û‡^*4ļ…kritīéŲ›O×bՆíÍi{nąŗz…‘ÁúŒT~ņ …õíėvĘÖÆârĪm?Ęņ\c÷‰Ī\ãpĮûUÉčR]%Î­§ęڔąŽĻöpŧķŖÁ`#bŦpĘX…=ÆräT×"îûVŗÖ,ŲŨj‘0FÛÛbNĶę,‰UkčÁŽ|<ž#Đ.­€ĖĘĄā>’ƒĀúHúãŧ/ŦŪŨhĢŽ.mFŌĶû%!'n ƒgãnHô5čz%ÔzŊ”Š]ĘŖl†‡ŪR;A‹eā›mÅzŽģ$čškĩŦ[ˆ˃šˆéĀ,A˙hú ˜Ŋ,6ĩĐå|r[Hđæā­=Ū{ÛÖqSķ;É'ũé~€×Q§ÜŨØC‡<5mo'Ø"TšŊšb"GĮ*ōĪßuë\V—}?ˆ|E­øÆD‚ÜĨϘ˛ãi™ČHĪáģqú×E>|×gÂúDŌEŊĄģŊ™lŗ–$ Øģ“éTīĸ&=Íķ§x˛+ąuŊcs&ÜŊĨÅĻČķ× U‰SšĐŅõC­ŲĘ^)momäōîm¤#1>3ø‚0Aî+Î|'iáģNymŽî-5Ėf53˛HĄT 7)88pŲČõĖ^-ęøÅr5Ô+?öģ öĮšdģ9QĶđúĐĄŽĄ~ĮĒ>7pIĪ$˙ZA$hĀoÁëķšãuņEž¯Ĩi‰ŽÄZęĖ’‹ Ž3čGâ)"ŊÖuMRûI˛ÔĄļ“M†5–v€3O+.s´đĒ1K—°îvÅŖōōw ķ“Ū  ÅO'8ŽsDÖõ{Áy[ÁŠ–%/‚E$géŪ¯xlj°i ĩumutřd€į)Û'>'3MŖĘƒ“ß˙×NųDES€AŌ•™˜T{Õå–ųBįķŦåąhĪŋ@֒gålN:×ũžlĖkwn$eãˈp{×ov‚[wVČFpqŒW.›y§\rÄc°4æRą’-×piĒ­•ĀËm…HĀ1Ø vÉ<âŠ2@Äƒ…įķĄp?„āq‚EDōî‘įa;NåũiÁ‹Ä\‘€;ЀBXāŒ(äßĨ4€†áGoZzށxQŲ‡SUægŪą…#–ŖaĄ|Ļ”BÒŒŽÔˆ 82¸T97ω¸;wI¨æBæEܞŒ21Lč6gE(ASŽ€T!äYÕš$.:T>jļDxÛ××Î^č_ŲÚ%åܓÍ%ĀüÍÅ@įĐŦŽ]8ÆNÍØëL‰š€LœįZW„ËOåųÖnŸĄÚF-îSÍ3*+2“ÎŪr*ˇˆ [[›KéeˆĘŠ2‡āŽÜvĻäŌ¸(EĪ•3j(öEˆČëĪ9 |)`ÂÎģ‰,|zÖrŲC{â d_.ŲWr;L‡'§ĶbīC´ģ’kÉĄ2Må•8Ú9鏭;ģ] –)Ų˛ä‚8âå1ãælc퍧ŒÃp’ ãsˇjĮŅô{ũ9$‹299”uëëŌŦøēÚ5ĶžÖĘĖb*¨ûGRævšjœyų.hA}Æ Î‘­æ?ō=ŠŖšž7.Ēqŧ0*}Š#˛…tô€ÁŲÂ}Öŋzæô’4[d‘ƒ>é‹3ãũSg>ĮŸ3Vš*š’vÜč<Ëyn(n¤Á#׊XíTŒŸŨ°Ā'ŊSഊbúU‚k(äg$ãëÅ'ˆeOKC0€]8ˆš8Ú:œŸĶņĻ䚸”/5jČĒīdŅN3UÄļĐ"ŦŒ¨Ėp ¸>Õ[ÃĶ4ˆp&1ĢĮZĘģŠŨĩûíhƒÛĖ A.x\ `žÆ”ĨĨĐãNōq} Ņ–”ínr 90¯É9ĸŨcŗĩTY Ē  O\įO[ˇYt‰ŒƒMøÎ#ŸéMŊ.JIĘłKĘŠ8ãŽsčj&Ũ …b=ë/KĶŖģĶRu–D}Íĩĸ‘†9ĀīŒUmHIuáۅ¸|ÜÚI°ē72@õ¨įԿǒæåŋ‘ĐJŽb_)—+Ô0ûÔŨōyx\nŦOy4šuŽŸcd¤Os€¯žGLž:´4‰c"âÎîåŽųŗVäg Ž8ĒæLNˇfŦQ–9îO^ôˈžE(ƒ<õÎ Â{v“Æf’áâyá̀ŲĮLôī]R‰pČ>”Ķš3%÷ŗÅžMC,Syąg( dãŸÂŦCô%—jį•# ŲîF3Ō†f™Æbr2Ū‚§UĮĖšųģr*4DrëīNVŒ•@ã§@Ũi…ÁYFĒr*^ kë9í§‹Ė‚T(č9:¸V2DŒíéĘŧ߯>/ÕbņŒ:ĒZé6ņD˛Ü]Ü*d›ƒÆ8ęx§ۈMŖ.(°ĩÛ+\Ō'ļ“JûH?%Ė ūŠŗŸŧ¤m#ļėô­Í3ė:E§öX¤÷:EŦis,÷+gK˜°ģfą|Er—qYÜxęvW.ą ˆšÚB¸D7û­‘\üÚŦéâŨÎūÜjr!×c`o•Bҏ_˜nĩ­šˇ&ö=Rņ›˙fęŅĸø{PŽK{ƒqËØ8ôųY}2sÍŖhŪ"Ô øy.ŽâK+:Ĩē÷P;ÆĖz‘…Č×WcŠiĀÃá­KÃĪĻ[ÜÆE´3˛ĘÎÎUŧž IŪ\DŋtŒĘ¸É:“ŽÂŖŅe¸k -ژÚûSēÔBŽĸ"ŽGĐãķ­8F—%ŒË§@úo†Õ„ˇē„û•ī0q´ųˆ= ŖÖŠU"’ߙ-žŅ +|,6ƒlâIŽŊŌØlįAņõŪžãÃZ&îÔöI€jķë÷ŋ:§ņsÄfĪCMÕL—zŸĘB“‘ Ĝ|šÁÕoŦ5û[K ũ¸ę–ņjC<ķ´€Č˜ŨIäáŽqÆF+ß]ļņ?ŽÄԗVē\ E$LSÉb \°9†9íž)Æ?i“)t=!<(4¯†ë§[.ëÛeK˛A?<čÂOæ¸ŦËm~ Įˇš¤äļ•ŠØÛē\.Hˆd€[Ņwdؑžĩ%Ÿ‰l|3¯­‚kWzŽ›(î$ų-!!XHqSũāE\Ö|)6~š†’ą]Āžg™Ĩ\(!ã“Ō6'€OĖägŌ§ŽĨzĩßėKëû+Yt{KÛģĀītQšUA,_Ž9¨Šî­ĩ [´{{M1e–&šYG ˘ŅGŨΟưt]?ImN)<<ÚdŌ#4‹§ęa’æŅđ2Ēܕ_b¤{Õŋž§}Ēčö7^Ķ ÛÉ#Yąž.#*g *‚>éį?J-¨îMí͕ü—בˇ’"–ęéTœŖĖáãLr#^{ŪõĄ$ōXI¤ēĒęoįÎÎ3äĪ?ŨU˙v0äžÛ}ęŽŗâoėÛÉFŦŸfŸOdx´Õ—{ŪÜ2˛ģĒ1Ān*ļ‘ĸxV˛—X•mnËČâx­îOĩīsš^ŧ*āc4rõ`åucĸŅ-aÔŦuwˇķÂūņ„mnÅO”Šąd}„ņÔVČđŽ›uááĸĩΧũžŽŒĪÎÕû¨ Ú0^ĸ­hēŽ™wá{[í=V×OT Ī$/đ1Œf§˛×,5 •lõ[‚PIļ9§ž:ÔŨÜŌÅģ[caaąš¸ģōũíÆ‘†Iä€3Ž*ģ/ĖXDwã=*(üE¤]ÜG ļĢfķJÍÆŗ‚]—“´u8öĢPęWrĩŦWļĪpŸz$”ë‘×Ŋ&˜Ķ0Ž<4ēžŗiĒI{¨ZŨY¯îDN†5'¸+ÎG¨iū ´ļĶõk+šîõĩ9ˇĪæ>b~đô=9öÔ=õŦWf–ō>@ī‰úu5Ú…Ļ—ûũBú d•gŽ}=éŪHŒģ_ %ŗÅuq{{}skEl÷ Ÿ¸c *€[ÎMTƒÁ6 ĨjZ}ÍåũÄwį͘JɸIĮÎ ¨įå_n+ŖŊÕŦ4ËŊŊŊ†($*Waĩ‹c=ū´>§§ŲÔm‰D0ķ—!ņxŽ}ęo-ĮĄ‚Ū ˆÉe;júģMfŦ!wK õĪËÎxëéUī|2&ÕæÔín.ôëš—Ë˜Û˛0™!÷öŽŽM^Ā[­ĘŪĀ`–As, Ģ6vāúņQ%Ä7 &‚xe<ē8aĮ¸4&ÂČĖ‹ÂÚzøzM (Ú+YĄØŲ|“’ĐrŲŠŧ?áË 鉧ؙ]wf•bOĐųUÛģ{ågŗģ‚áQļŗBá†{䎕iâÁ Î3×?…{ÎĻA‘ųô¨ã'Ëۓ€ŨŠŽŖī žž´ø×0@9æŗ–Å-ĘwĄ~Ī.âySœvŦ‹qŒÉŋz4i´Ÿķī[xō¤Į*T¯ÂĮuyv%d`$ƒ…Įōę(¤¯{7cǰDÜ(ÎG$u8­–ųŖ1ŒŒô>Տh6&B€{†5´ĒLciņœŽ•Ė‹˜Ā¨m'$žĸĨDE#küũ3Ž•`¤•9Ā<÷ŠŖÛĩ\đ3ÆĶV™›X#F-–\ëRŨČÜGŌ”‘2Øô÷Šv’“č*ö&âÆ¨đp%SJÆå9įŽ•;€”öęe8S“–ĪAŌŠ ˆÛļ|̓‘€ŊFCĒōäžß.*mĮ8ųsĶ4×| ¨ÉÎGÄF ŽN@#Чl`ŋ{ænzôæ‚ ÷‰ÅŖ<7NŅE€l…Îė~ņāT.­.BˇÉ×w­NʈBŽ~¤Ō; ”%O@ *4[؏1@#Ķ­ekqj76&ÖŪĖÜ „*Ō,ĄBķĮÚˇUį úįĻúÕ""ŦaHHÎ ;\¨Ī•ŪÆn‹öÔŌÂŪÛ,2 ĸîÜH œtÎ*ÕíŠ_é×ÄŖBp­˙ëŠUōp¯\Ņgnų¤vbĖØĀÉ5],Úķu+hÖgĨĸÜspųy=ØõúöĢW/5Ŋ¤ĸÕV[‚2؁| ”0û r@§ÂEŽ7JÚY Éšs3'Ãvz­´–׹Ãågrē79'Ą'ˆŦī/,Ŗ˛´PË+2V#äükB,IÚšéŪ­íØ*9â—.–-Ô~͟ПiŌéĘ.‘ä!Œ­é’zqНĨYNš[Új0BS/–ä†RIĮ>™ŠlõÛ[ÛĻĩ&Y•™Jŧ|qßڒÛU†æčÛ"\#¨ųƒG´Š÷Ī'jjúyčēLšl—i+ fQ,Km€~™¨ūĪysŦĨÃċfˆŅĒ3åšū,~•Ží´œdđ9Ŗ/š”8š*:š§+ę;šu0ôë[Ģ+떖(Å­ÃīUW!éĶįéT¯NĨw͒Eo4O!Ų+71B=Ašte0•ŽM¤~‚ą<; \čmtéîLīææBr $ā{TōĢXĩS^c^ŪŗX%š.û@BÄuŖžI%ĶŽpy’É*ØÉ#ОĢ!tŋyŽ1žjF˜ˇ ëĪãM'kÍ­ÎOžūÃOŽĐiŽĶGÆK¨_Ī=)“ZŨŤI[ų÷,Í3,B’yë×ĶđŽ…W §éQÉŧ†ČįŠ\ēX×ÛkÍcęĘöîÎĘhâol܍ßī9į­Hú•ü¨#‡NšŠw`ĨäO‘:gžõŦĸGbX(ö˙UGå\É$o#€ĄˇQ÷‡uRÍНžŋ${Ō2ķōGP¸šŠáž8‹Ģ˜äõÍUĖԖ)•÷ ´gOJz;˲’=?•EHKģ&YšÛœTȎavØėž´;ppŅēnÉí\ĩāIĩ/‰–zā†ŪãLtAu¤V_ēFûĻģȍ1NĀ\pjMĮĖfōˆĮĻjã&ļ"I3/ xz ’h´-:)Ã#Ĩēä098Ē~3Ņīĩ+K;Ŋ#Č]SN˜O›ŖđC!ö ūĢĄyKaLg“ØņųÔnāšV‡úäŅw{ƒZA/†ŧyâ E‚écˇļˇēÅo{>ė¸'…a–ŲƒŒøÖÅĻ…â˜ī¤–/ øn íōī•É'ō¯F’ā[КE ŽYØãhūBŠYëúVǞ2úŪįĘ IäČŽ{ãúÕķˇĐžS<w¨Ü­īŠõgÔV2;xüģd#W?7ãYž6ĶŽŠôMb->kí2%ōn­!ˆH|ÄŊÆôŽīr¤9*pOu÷¨Ã Tž l(qÉëBžŖq9Ÿč’jö6søjdĶõM>66Ē#Ųō8å ‘ÆqĮä4 ÄÚŽˇ Iĸ˙fikwÕęL9šd9f\Œō{1ŪŊe'`ĨT ąs€Š5(š&UuĖ‚EÜŦŖ \ŅÎŌą6ÔķxFãTÕ-4ŊDNĩŠ_>{Õ lX€œcķ¯NŒ´ Îå$rH¨pаœ õ'==X}ĄX—üGûRnëRŖĄĩáMÄ_UĶa¸‘c”q˙5Ë]ü.ļŽdŧŅõŊWN¸‡?g-/ž‘’0pœĮZīË|ˑģÛ4æ`¨ZB’ORæ} ąÅx[áŨž‡&ĨtuMQÛ"æeÁũŅ“Žĩ[ÄÚfĨá›=G_ĶŧG¨ŽŲe˛œ ĄrĮ“ÛĨwĖÅTœäįĸöĀI0ĀÎyĻĻīv;EĩÍįÃ{÷Ô­ÔČŽ.ŖļÚ1 m—D#G_­ač1GЧ…5 &­-ŗ}tmLa”Fnp7dķÆxæģŋ}˛ãÃ÷ļú|âæhš­ @7 $öÍWđŨŊŨ‡†ė­u5Ki­ĄHN$ģQ@Ũœ ƒG6c•đãi÷šüzeœqęBæę[W6ÛÖá193ÂI ԐCˇc âŪXäS2åŽ0A9äžMvWZ•”:j_›”6LĄ„ŦÜ0=1ëžŪĩĪčQ6̝]ęļ:ãũ‰æ_´X˜ Ȓ"ĩ‹`Ē÷Æ;ŅÍtÂĮÖxUąÔŖOøIÍÑô‡˜žceî{r: ÕÔ/“Mņt#ÅZsŨ[>—vûĄķPˏŪ`~bõ¯EģŊ˛ąŒŨŪŨ[ŠJ‰f`¸íÔ˙*Í>3ĐūÖØj´“2Į–”šč7Œū4ųÛ[Žb˙RŅlü[ü$=.m*$ĶâšØēFyہ0pŨ¯R^ĪŖé^7ŗšâ˛´šĐü¸ĸ’,;øB1×n8¯JÂŗ‚H Ž;ũj)Pm,Ę Ž‡Šëą\ŦņĨŸL‡ŪģšŠ 2™ŦėXßåÁŠ/-^_é6’&ƒs5ąą ¨y­ã€y=kŽņĨĻ̍]čĐéēKŨĮiw䝿ĸ) OČ7ŊúWW&âƒ*T÷˛JŽ{!ZįŸčv:&¯-ßü#zÍü7ˆ¤¸šˆ€šyP ķ۞+ĻĐ´ ŪxäÕī5 %“~ûŖ¸§°ūĩĢikœmĒ„į 1ĪáÖŦˇËĮ!sŽ:æĄÍą¤EîdÚĀy-ŠW'nãĶ’)Ō•bŦw9ÛČéJÅNrséYÉhZz™w%Tđ=+•¸Ōūęæ{{š"—på#­uˇ 2įa\ĖZ„2#‰‚Î’čxÎ3ΏĨI잧˛5lT~rAč;VÖÕDAČbGn+Ä@Väâĩ—vÎsŸLW:.dnáÁ=}*hŌ5-Ÿ–™†~>čĪ8ĢōČUSė*Ҙâę’n*Į–Š’<qŗ1žëÔTĢš#9 ’ŨųŠ<õÎ*ˇ&äHǜœ9=?Õ q‘É$1NŠđ“Û&3€Ēyã­PŽ=Z1Āúv¤BÄŗ  gč)\Ã*ą#Žh Bdė:šw›ą…2ŽHč>ĩ ’F9g'°56“vc¸"*îpuË•Ka¤ĨېœqÅ1Ļ_ĘiŅæ_AŒfŠÜ_ė¸Ž=ĒUÛ ųžĻĻq7ÚȎđŠlc͌P†Ëœ2ĮpyĨŨķæ¨xĶÁ—Üæ€ØČnŧR3æ[bŧg ZŽ„“ m‹/û>âĒj6úŒöqޟt-ÜĘ71RI\?XÆÆsšĪ•Øč•Hķ>ÆVŠu%ũŲûuâÄ"Y#HŽą8įŽŸZčá™åt2„€éœrk ô—šæâęKÉäK‘ĩĄ!@ŲίëV4Ŋ8iPėk‰g;^CĢŲJqRLšŽ*ېk2fjō™L3mĪqúÕĢx]4é–Šâ@fgîŦz~CđŠĩ!Ôˇ˜ūė2ČĮcŸūˇãUŽÕ/ė党hã`ŧgœwũ(QՋ8¤ĖÍyo#2\^Nåĸ^ …ÚI<‚9=)ēL÷ŨY…ŧ‘÷ÆÍ(‘đtG׎*´:$,ĐØę‹Ɍ1ŒEh6‹V1íŊ™ؖŽPeĮ¸4šdjį}wō$’YWXĖĶÉDí¤žĒŪôD%˙„†ášövˆGæy-ˇhÉÆãc6™ŦŨ\^[^\J–ķfHpBŖ€;p3Ķ5ĨējĸũoŽ Ë“åšųJãĄč(´‰æ…žBZIyyŪÅ2*ĘÂW#nyÉëžĩÕÕŨ­íĖ^cĖMÖáŖ$ļ1ī×õLJESríŖ4+ɡ^rpzZˇqŪŪZ^É*īĩ c“‘út›@Ĩü†´—ŅęvvÆá<ļReÛŪ#ÍJōęÃSˇwēAc+`ę?wëžõ›¤ĪŠj 7öœąGˇųc={֔ÚtShkc-Ų!–ōNAĪøŌÖÎÃN ĻÆÉ}ŠEĄĨä¯ēG•H)܌ž¸īĮķ­=2aqaŧĢ6IĉÆā͊‚ęŨ¯–7´Ŋ0<-šJŒ‚1ŒôĒ'L\XÃĨ$^LĨŽßųhIÉÎ=j—2dˇ GąĐ2đ>fų†8íM1/‘ĶŠrΌûVE8éĪéUîeS§š€ž?ZŖrÄd+„ķ~b2īSōŒČ2qÅR ą[ĻķōuÜ›qs"HV€ËÆi@€g ;ņęiÆ=Ŗ%°G§ØäÄ\ŽIäĀ¤ķFī˜ōÜM'Qā¸É#Ž+‘ņ‹/´Oéē\<—qŪ‚a0Lŋ?*äc#Œä÷ޏŋˆp+„ņ&‡¯jž1Ō5Kh,×Nręe™ÕßpP¸u­TlŪ Č七xļōˇ†ŽZm2B—ȡ)ļ%;ƒĮ8ņŦ‹­WVĶŽ´ŖyvķYŖG IĀīĘĖ[zpA=…jļ…Ž4^&‚sĻ(։í•Č‹å ĪĘ9ÆÔWUĄ[OĻč–wiûxDlbbɅd dWÍė-^į=ãëšbđžŸm<7‹›Ëxî<…Ī™†—“üDp;ÔĶkē63ęIĸ\Ĩ÷ŲUî"†Ũ|Ø ã8ÍOã [Yą´ˇŌ`ŗq Ėw,ķNP)Œä9ĪéTŧGaâ}i.Ŧãˇ‰lŽtđŠåŪlDœ‚vsŽxZIŨ!›Ú¯Š,, Ķßʞöâôoļļļ@ŌHģwnÁ# į¯zʸִ{cÃw3iâúéäûK ‹Čb}āˇ\œúÕ 7Åē–‡­ÚivĶÜ[Øĩ•Í™šxurôííÍ?WƒÄWZĮ‡î¤Ķ yŦĻk‰Ņ.•TvŠnIU “Æ{S˛Bģe?ßčRëWęzÆŦÖvî–ŗCg0ŽÜõÜ7n~ uÚÆši AmšÂ+[xP|ƒ$IšÛ-']Đu}V+mËRŗÔ.Ūæäc1Æāā‚HĶ5ÅúVĨ4úF¯§ŲÛßM`î%ŗ—dG¤ņ‘ŒķëCĩėKÄÕ봛̛ ˝ÚĸÃ*íōŽU°7aąß=H Vôž$ˆMĒ[­…ãKĻÆ’JW÷ŠĀË–äaO\tŦ VĶ]Ôl4ώđÚ[ų„WM wŽÄŒō ān$œ`&¤Ôtũv {VšąĶVæßUĶ’ ßhXÚUq‚_ŧ:Q ĩ5ŋá1ˇú\–ö7ŗÜęP´đZĸ§˜ČՀč}IĢ&Õ´¸ŧ=îĢcs64*e€!/ĩšädcžŧ×4ÍwPđũžŸqŖæįOĩōėîmoU%ŠeĀÜXā=ņžëĄņ•ŽŖsāhôĮ_ĩęRÂ"wW žfĖ9íœôĨerĩ/ĪâĢM.M"ÂÛOŧ^@ZáŒ6;<ˇAéß5o@ņˇˆ-fž(.mdļĄž” ęãąÁ#Ąš ėuĪí? Í”ϟ¤ģށlē„$`s€3לԾŌĩM>ëV“UXžēk”ōĨķ1ž ŒN´4šE­Í‹ę•ë3JŠįMŽëėŌ\5ČG88gT#G=ōpqXŦg‰ukíNMmR 8˜$i/<´f– Îâ2s¸€zSô¯ ęz-ÜĐŲęđĻ%ɘ)ˇ>hÜwÜNÜ{āšlz§ĨRĶNšĶėWō; egķ-ˏŸ 8ęG"•×F=KZæ¨××>šĶ,ūŅdō˜‘ .ō"bŠ‚F>ƒ$ū5 wÆ[¸ĩVdVVU(áIÚAã9zqYáÍ[KÕõ+Ŋ+āÔ0ė—LU­äÆ2S¸¸âŠ7ƒu;;Ûi†ÕâĶ$7I;˛\Ÿ˜(ā`ŸŌ• UŲĶCã{UŌuKŨBĘ{7Ķ$ōŽ-Ų–FÉŽ đs)ē_‹´ÎĨ ö‹§Ŋ¤jâwmŅm9į$/Lr?Zæ˙áÕīmüEíͤI¨ČŗÂĐ3Ž„mČ#Ą 3ɨõ #Śî™{kŠũˆHđŦwH¤pxã‹D.Ę~×īÄ÷×ײĘll]îmîîūYäŨ•xÁ*`cŽEw>ÕĩŊbŪkÍ[KM>Ę։ģ.ĘG;ŊúvÅj?‹5õ‹VšĶŦ­u-5TÛĮk– VįxČŲøbķ^Ô-eŸ_ąŠĘ]øŠÎ@ĀÉ#'Ŋ-kŠ-õ6ÜîÚG-ŽsĐSŨ°ŠÆhۇé‚x5Ę$ s+ž[ĮVT¸a×Ī?…pWļÛ.æ[ČÄgsyRîálņøWy2ŗ!ČëĪįYÅÛ㸍2†s‚úÔŠ=Jšē-XŨķdõ­7,ļŌ2),@ĪéYÖ!ą–$ņŌĩKƒʃhÍsÄšî"HŽ›€ÂöÍNŠ÷F8úš­v.ō*ßĖb…åŽ}}+Tîf*€§€jU'œœ)K>v¯'&œCd]ŖÉ9Ē!Нģ<Ž´ņō$m™§’9ä‚9Í<›’sÁ9Ϙ‡y›đ7ü‹íڃ’Uƒgu5Šãoģ×?Z—rĒ/:žR]Üá@āœS‘ōëÜSĨ? ų{p,]rāŽÁAÎ(ēËë^’ūč]ÁzĐ>ɓױČ#ŌšŋÅŠßŪ5ĄÕψ„%ÂČ_Ą.ãžâŊ"á Œ¨a‘€G­pžÎšt¤ˆ°•ŪüŨjZWGm ˇJMô4įđÅėpŸŗkˇ(ų'9!‡§­gčēŽĨg|ēN§.ŨÄ*Čüã==ˆ5ÚųhÅCŠ u•ËøÆŪ˛Et‰åŧm°:žqœzZŠ.UtEžÕōMng|BņŒž˛ļļĩ…fŧģW .ėąŽqÜäū•Ëéļ§đīö­ž¸é–fŽ Ü]~ö~īė3[ŧ7¨ø‡ÃēUũ€ËiHđ÷ueRHĪ*{Ÿˆęš,Zo‡-e¸Õī $ Uˇ$a‹1ãēcnUĘqIZMŠėŽ|=ĨjēĨ孛^@Y¤Ú o¯<ūU~˙\Ō´Š Šöú(eģ!aˆäîĪúõŽ;ÄZ6Ÿ§x@đĨöŖ ŊËĪŦ‡ƒ’Y€<íÉĮâ+ķV–īÅžŧņA6ŗŊŖ@ŨŨ 61÷wãJ9Ôg ÍâÍ;īėöÔŦ÷ÅŧK‰˛ČČ lž?JžhķhŸÚcQl<Ī$\āЌfš¯ˇhiņ^ų÷ØŧÂÅ"R įÍ,ÅĮ=NŪŊëŸWŽĶBÖoô/ŗßií%Ėwúpa„]īåĖŖą Ž=ĩ%;žŠÂ˛ôkņgđģS–ōZ5åī’ŌĘ1ų„)Į|* īTã}DŸCŽøkaqkágš’IĨ7ÁeQ+TcÉõëøŠÕĐl¯mõ NK­GíË%ÃĀ9ãûzā;bŗ#û<7˛j–Z”­ĸišl–ˇi †tQˇh?.qÜwÍhēĻ“āũ4 ‰l˙ˇ/d{̐(€d„<’HƒęM.^k°]C‡Qˇ—Qšļ‰ã’áU\Æ-ŗĻqõĒ­ŦCę“3Ā‚ÎÜ1åÔķË ņž1šä>ËĨÃâ{ėÚ|Đžæ \œ[Ư…BI'sąúV^­ogwŦx“^ËöxOŲ–-ėEÕÉ8Æ>U8ãØQƝaŨÍ—‰āšĶtV•Ą†ãP+˛ 9ë’=}+RķTĶ´Û“Ąuo ¸eG$€>Ãëšķm/IŠßÅžŌ.aš{ûH–âáԒžō§<* É=ÉúĶâŌė|eâ+æÕĩKh.eÔĩØZácŒœ(ÉųTŒ’qGŗ[‡3ąéR\}šŌōå“d{HD‘Ân zŸZ[9āŊ‚ÂæĶ2[ÍāS•9÷úוxŖUĶŧEĻËszdS˙ØãB‹(åˆ4´úņô¯AÕĩĮŅžÛŨØÅö0đà >`ėáđ?Âi8$5#JkÛHõ+%lK#ļ°!I<zŨšŦ›zÚō]RÜC0hnĒ–Āķu+Ī8ëôŽsBŸDƒĮ—wPĢ1´Ķ„‹s bķ1žwc؃Ÿī ŖámOÔn4ėâin"•u J÷Ėbõzn'īÅ>EÔ\Ėô{˙i:Lą[jWĐÛŧßęÖFä˙‡ĻjđpX€s‚‘ŽÕå:]Ž—ã DcSŽ=NöųËŲ¤'Î vĄc¨žÃë]&ĄĢ|K-"éēŸ jå™Û8<ž9úRåK@æ=ßtø'Ô$`HĘNz`ví?í-§Û›°Ģpc_4(ߎ\ԉˆū&ü…@ĶŖ@Ø8'“X•îĻž ˛ĩĩŌĖö#.ĖģDDvÛÔ˙õëybXpģ¸ÉÍpž!ˇš×⇆™5 Ī"ķÍķ- äD q’QÉ?ĨTUÁŗ}‡îĐ[ ;†8?ZÆŊņ-Ɠ¨éúiŅîŽZûˆ%I+0•ųˆ#V%ԚŖÚxÎåuģØæŌŽÚKbŦĄ@ōՂ0#îöÅ\Öî^÷Qđ%ä×īO˖ƒÔ™5Jz‰ŗKLņžŖm¨yĸKtã›Č'*1Ü pA§éšÖš¨K§\E¤Û"đ1‹ŒMc(ˤc‘ƒžĩ‘ŽxQļđ÷Šõ‹ë¨ĸģŋŗÚRŅr‘Ä€áAa’NNNĩ?í3ÛxG†=RN˜ŽžLB[™ 8U*FßS×éNËt7üCâ(ô 2)-f›í÷)n$R!fą>Ų {SbFią$Ā4ÛÚ>g×ךåõ ××­{ã-KJ´Ö^Ō$°KˆļÛ#íË@ĪĐr}i8ô+ÎS ʼnĘķÅR‡SĩIĨŊ­Îä„Mö™‡“Ąŋŧ=1\=†Ŋâ7Đ|5­ĪĒÅ8ŊŧŽÎ[clĒ ŗ”-ģ¨Qsjw8ŞāŠŌēG×؜”p§%xu'ķŽ/ėrZéڕüZüŗÁ6žÆ’Wå‡Íægcģœdb¨XA"ËāփRÕTjQ2^ĩ1ČōƒEį<Ž}é(ČôuĐddĮŨ_á4į†D(Osī\]\Zh2Ķ ŧž#N–F‚ãí,d@X.üįŽ Ņg{;øŗ@cs~Dör˜äšũŪˇ$sœúœŅČĮzĘ^EmęXpx§ų˛,rGžI× āûû‘Ģ;U–õuWåΟæ[ÜB[!ÔrŒ p{öĢ-ÍęņEĢmvC+ŗFŠ*¤œ–ĪėĮxĒúŒë%œ)jLSŦšf?Ä ãŠqŨ !›#s\߇å™ŧgâXšūæâá€Æ%˛F\30QĐ ŲŠ{[§h`ž)%€č˛eĪ÷€éYÉY”˜ËJŪĘQÔņŖwŪĀqëL†úŪųd–ĘHävļÖÎ ĨâMq§šƒqûFv䞟áõ5[L>ß{snŪ@,!6íÖ=  žzžk>mlt{%ėųŽĒŲ„Ņ™#mÁŊķƒéS¤dd3ÜãœúW%ĨjÚŦ÷ņĨžiûūid$q’ Ŋk­ˇŧļ–CO:uPāšjHÎTåĮ)ÜÃ8=ũjŪ<œæ–â/.UųÜ*˚—`nĐ­L˜‘›>csŨ¸Žfké-.Ž ņ–ƒr„#’2Q]Dā™›h;q\ļš§ŨĪl­&Ņ哌c99üĒiŋxŠü&ũšĩ‹|€ô¯ē¨‹'š'8ŗí›î*Œ ōMjüâ<ķú Á-ÆÆĄō@ã§SVšÁ^G9昅‹™?tTĀ’ęĢ´’kTfõ$@6ƒ“Č$f“jČJ‰2p)T7?l j“´āû̐Hā`*¸æšTų¤9điįžį8ŠM ‚Ø:lĒí,ÃãųRō9˛ãš6˜” ;{T™dVl¸=(@!fa퇂w @ĄåˆôëNVbģˆĮ94åf*XlnFqMU.Ge1ÉĢ `w_a\g„“ū&—މ,č~\nãô­ũ_ÃSŪʡWĪjä!ˇ2œœúƒT đk۟2RT”Œąöãđ¤îŨÎĒnšƒ\۝–ŪŲ;˜N=k”×Ū-^îĪHĩ“2´ždĨN@8î:ŧŪÕŽ—mÆ´æ2ŋÁ ii:%Ļ‘1FZCɖCķ7ˇŠļåĄä¤ų”Žú)pÃå&?vģFOT§ŊĩŌ,eģžģHmĐeäsÂäû{×ãOˆSxcU†Ét§¸…ĘŧŌļ@Áū= ëÖ§¸ņlđéM.ĩáiŖ†KČíc‰™$ŽV9ãŋAŪļPvLäæģÔėgސNl.QĪ$cúÔoÉnÜ; Ä×âO6öm3K˛Žö[e r­p"ëŅuvöĸšÕÃkVZUޟŊÄ+5ãÉ0ŒÚ†éōõ'¨§g`ē7îbĩˇ´–æí­ŖHÁv™öŽßRMU†ķM[\ÚÍdc›§–Č9úÖ ZåŨ֟¯\_irØĮĻŦĄÜŦęÃr1ÛļG5Æx{NŌ/t- FŧđŨÅÄ×­,¯tPÂĒ0Ė_7}¨QžásÖÖļ G ^2 ‚1>•ۉ-D+/ Ą\}=+ÄÚŧ~ đ ’ŪÚiNŪŪ=ŲPq…ÜzãÆŦiē”÷$:–Ąkqc"FLņĖ l ÷˜ ũŪ3ÚĻÎ×čUÕËÛ%ÚOČ0ÜËô¤e­dˇ–刎F~AŽīÄz‰;m'ĶDŠnáēœāOqÎ:õģāí^įÄZ+ÜOdÖņ’;07ž ØęŧĐã$= ÄÜ|›ŗÆŅLl …Įz˜Æ2Ēﰘĸ`#SųHî=+˜¸ņŽŸˆ_HHŽŨ­Sę ų˛áqŽí†N~ĩŸÄļYYÜÛiĶ3Ir°\Įŧ#sí|ĖqœÔųdMĶ;7KË6҃!Ė„7SëĮ­_ŠŪ4‹ˆc Ā|ĮōŽÄū2]ōę+8ōKxŅŽIFã…Qw1āvšĒØëZޟáųĻÕm™ĸ77 nūRF{°íÔã<ãž)¨ž ÚčuīwžcnĐÉ4l#™Wƒz69Î1×֔ZCÔ×)c\Čšķ„xcėH5ĪxÚÉôYītávÜÎî$ŋ“|’Ā|úqŪĨØÜjÖz]¤7w-s3Dˇ €BÁxr<…õ‹;ģŧ"…í˙yiŲöBƒ Ũs‚:ûÔ˛ēĩˇĪueÜČÃͰŽJˆ–‹ey4Z}ԒYĘč"āU2ōĢ‚:õČõĢ7Ū8ĶlßO†ínb[Ë?ĩ <Ŧ„ČÎŌŊۏoZ\Žãēãuģ›Ã/›Ļ<÷Øˇ‘ĸ1ĄI>Ü}MnÛÁkĄh°Aoq…ŲĢā8ķâšû?AsáûũOS†[°ēk}œ;; cwį‘ÛŸ§Ųiž¯ĨÜIŠëWWsÅũĸą]žcífQ€ž€TĶ؊įopE~eK+d¸™wI Pr5$zŒrĀĪ—)ÜÃz6AÁįŸjįbņĪڋ[ŨÅĨÅŽ.Ú0É(Sƒ€ ?N9Š|%ī…ā›Jí­æyw#Į‚[yÉęzžzš‹;\{d<‘ŖļPmä š’6Rې@ßüđj8WbĒŽOsןÂĨ(ģŋÕáŊi]€ū€•õ$˙JäõočWÚújˇIt×ĒUãdē‘BcĀZëĀ pxŦMBh-/âûMÄPųŸ,hÍËbŸ5ĩ@•ŨŒ(<áŖm~Z šVíÉšķ.¤Ė§ ķķsȤģđ‡įŽÚF†ü-˛…ˇUŧ—÷#=WæāûÖúųOdō¤°˛‚I8Âķ““QKŠ[›6š;ˆØ& …lā~hį}ĮČßBZĘÛXŌ›,×b?“1WeKu ô÷Ŧsā&V˛–;R1gÂnۘÉÎÂzãØŅž‘n-ĸkmN;oŪ),ŽšoöH?QVÍÜ03ZG,b`2Pž2O˙Ž…7ܧLį‚4¨´ģ ĒjžMĨĮŸķÁo0—’8 Žõ5fo [~ķSūÕÕŌâh&ũâ…D# /ËÆ#Ūĩ>×m6ÛäˇFÛ ™W‚ëR›ģKU•.nĄ‹zî # íõúbŸ;îO#ėsøÁ´{-6 wU[X.EÅē—NsÁ+ë’>Ļĩn<(’j÷ÚĨŪŠ#\Įör‘íUä°€ ā’sÁÍo< Ÿ#jVÖÍۂ$Îíŋ<`‚ÄvôŠ´ŊKŅŽī.ė`ŲsxÛĨvrۏ ĪAÉâ´ŧČRÕPá9#$Ķ­QW”_0v‹ėf Č;ƒw9čEO3îR‡S?Wҝu NÚxõDˆīXŲ3ƒę1֒įGaz.­/Z)\¸7 :vĪĩÉ ČKŒ°ÁÆƀ7›&ÕU3ĶëQĄĸŠ;XɃÃú…ŗųja4÷mĪÍ̓ÕGąõ­‹ KŌĨkĢ8 r>G.HØĮáSY\CrĘ Ū¸ííWŒfFQ€1Į"„ĨVo@HđĨØŠlƒØT[9ĪzēøDŽžĩV^7w'¯52&&lĮ%đ8æ˛Wi§BŖ÷o€AäŒũkfāŧĀë\Vŧolo~ŅÆÅ‘F#U$“Đ˙*)k"¤ėŽ–ĐcܑZRgtXÁÎIä Ŗb`lÎ_Ĩhēų‘ōĀdāŌąEKqĒQŽė‚TqV!'œŠZŒ&Ö6äãåÎ3RĖãy8ãŌ´FLz†.:žFqÆĻU,gˇ$ÔAŗ"¯89ÁĮ¤`c* Üzg5HÜ0RBį“Ō„,XîaŒđRÚŨOÉÍ@ˇjf1†ËÆ(nÃą1ŧ1brzŌuĮ8įžÕ!RÍęQé@ ˜Lcļėf „grācŒņQE)•ĖmƟuŽj@¯,έÚŪõ§ŦMĀ;˜ö'ķĨf;VŠ$Ë3Ž˜č*ž†P0ä¸#ZŠ@öŒâõUsÂ;2ONkŒņÖą|žūŅŌ/|‡Y–4hvIįmģAįüŠŪ1š Ü71ÎG”HcŽ8ĻŧņāļđNv’kœĶáÕíŧ:-ä¸KU``&™ĄôČ Čk4–ļQę/WjšWÂU\õį8Ą [ž/đĞ"ÕtY¤¸UĶŦäig„‚ZBqŒ=ąøÔž!Ņnĩ_CģˇžHíė§i¤‰Ķ;ÎÜrzfē Øā8Čé’yÅsÖoĩû9on"…`ûKĨą€58ÉÉõīT›ĩû ڙöš&ŗĨøŖQšļ—LkKŲūŌŌƌͯ1ƒ選ոtíQŧ\uĢ÷ąŽ"’ ŗß,lr<ĖúÛš­ëŨDč,Ų' Éô¨ŧĨķVI„„āw˙¯K™$`^čŪ(Ô|+Ēéķęv’Iw;ˆäpURÜöāuúŌËmâáŖAĨXdYĒD%Ę\9tH]˜ÎëSøĢQŊŌ<1bTÜŠ]Ģ:’€ëÍXÕuąĸYXÜÍcw1“jJļąØq–n; ¤Ûąã]]Õ˙°ílĨ‚h-eO%ÉĀ. f_âū#[:ĩ´ú¯‡.tÃ8i§ļhZm eŠíŨĐĄĸk—^ ‡P’[) ĩŽāĨŧ›YLŠØá€9é[%âYĸX†?OzMĩ V‘ŖxŽÄÉq‹ŪYiâĘÆÉ%Ę2ŒnfcëŠŨđnsĸéÅv‘E5ÕËÜ}ž6ܐn#äSß­LÆ&$`"ņއ'Ĩ+Ë2¤Iâ‡6ÁFĮ+áŨjms[Ö8qŲôĩ.]žĮš‚×Â:ÅĨƃgc%¤6Z|fiĨrķˇŪ!Op:1āfŊŅ K\AúVt>JáQU '§9¤Ē=‡ĘŽbĪÃzŪã+ëč`ŌĻ´Ŋ¸âu/4#ē¯× =*ŋ‰ŧ1ŽęÚŽˇy ͚ŦöÉmm‡ X1ūI$÷8Ší"Ü8Fä/j§}¨Ca šâîs”͞äúzSöŊB0ģ˛2îô­]ŧqŖZĖ$Ŋh bl˛Ŗ˛ãŠÃ´đį‰ėüUĸęI”vļöžD‰1Â~Uœļ-õŽëOŋ‚âÉnfY!,ÅJĘ`ŨHÅKvRHØaōúDfŌŽļ<īūK`Ī!´û~­|&Ô$•ˇ,Q!Ę.?ˆ9A[Z‡õiĩˆu +ŋėŨ8­šļÍš9ËĐ…?€Ž­ Ō6i šÆM<¸‹ËœgšõĄÔcˇCĪŋáņ‡ÃŋėHͤ×wSƒ6[bƌ2ŲaË1<čzU¨ô.Ŗâ7O˛ÅՐ‚Ô™2wˆĀPŋŨ@w^{×Yyz ’FÅĀ0mŋ+g°>ĩÅåŦ1Ú ]÷" ÎŊ/hÆŠģŲÜļž'O†RéĐXAōĖĐÅo8cåđ’p3׌ÕáāÍNīAŌ­__ēŌäĩļXĨOųc-’xä@ã?o\Ü-™¸”8Šų€\ũzHnĸŋą†åĨ$9 ĨĐ9t¸ß ø`xjÖęĩ ģåž_1¤šmÄp+ĸ ĩYC`3ëQ¨ Ą= šUÚ¸U\ƒŸ\Tˇ}X‰Såˆ#Ôz×9âÅTM>ãÉ:])Ā\ļŪāWF+ĀŽ_ÄÚ7÷vąZĀ¤ĨËí$ƒČöyŠ—Âm‡ŌĸlĨŠE,–õ՜nąL$F2ĨĘũッÍ@¯Ŗ\éw÷jąœÚs6ö1ĀÁūž•ÕžRĖHŨÜg!}qR˛¨l( ;āpiōõ,pĶßhņøzÂ+IY&‡/䑸‚ HįWÚīIoĖ÷Ka„@sš‹u_ĶōŽ–D F‹cԌ>•,ŅÆ6áį†8&—-ÆëŽĖá./líôŊzÆãʎUģ,ŠÉÉCŗ OqRjōé~ ŌŖ’[_ŗy —ߎß(ūxÍww0Ä#fDn7:Œ¯É`]¨d†'ģ×­˜,BėÄ´„ZÛEacBĒ ĘātŽo_ūĪ‹ÅV7čžC@ûÔ•b>î~•ŌDķ*1Ú&Āãžū‚›sēūl(Nü…eÉÛ5rWV2Ĩ>I]œÜO—[ԛVh„rFl&Ā_/ šúŌ,-'„ėdģDhĸ¸%Dų“'?OZԃUĶĩkûË8žĪu6Ÿ&ɑŖÎÂsŒdsĐôô­Ü¤*ē?bŧ}+?fúšęS$öpË āą‰öũ(å`ĢGfb;AueĄIˇįüÂX¯8Ī9䊎ŲĻģ, FĻÉP)or€Ģ÷6–VË$ö0ČFKÆ {ŅŒw?kk(’fųŧ˜9Į­.PöĒÆ WvPÚčR„\Ģėgc’ŖŸNqœu¤š; š5šf*Ī(E-Æ@ę=ķŸå[˛išD˙7Øm‰qĖC­G.“Ĩ43mĶáB<ßŨ›œķK–Åûhy˜ēŦvž—"Ü7™xäĖģą‘Āüëē°Ô-ĩ$iíežÂB‘Č˙…bhú~q2HÚMŧ2Āq*>Qž9úÖÕ­œzŌy%‹0Û5čsGo=ÅÚŨÁkåJpæH—(őÛŪąîĩ ŨÜÃ-Ũ֏(Œ˛Æō Œ€Od+it´#”æu=Bõ<{$šÍÃĮyäéˇ2¸Fxķ‚ĖBũŪđ:z­â>×W×ü;ĄÍĒܤPZŠ•ÄģqFB‘ÓžqŌēûßxbāošÔ4™#…ƒD¯*6ÆčN:ņZ6ķhס+ĢÁöœGą¯U‘ŠŽ:n:ĐĨn€ÕĖß_ž‹āË´¤iIiŽŲfv'ķ5RK¸tĄđũ”˙fˇĶŦÄ÷SŠ]ûy ̐rĖA9Į¯ŨŪøgYO˛jÚmĘCˆžuÁaČ gĩY¸ļđæŖuÁ4ۛ§ˆÆŽJģ˜ÎFNOJIéljƒQŊ?­ŨuɆ§Š^ĒũĄåË,ÚO`dãŊičž'–Kí_SģÔ$k 2ÛɊØ˙Ŧ›n7ĖS¨É ú×Cqáí,m­įĶíŖļą“́KTsøāįŪoĨhN×ŦļֆKüũŠw‚ŌįÔg8į8§Ė’Ø,qwš†ŖĒøŖCąÕoâHŽĨ3éĘĒ>hСVbq‘ôĢúÅÆŗ¯x’æĘÃVˇŌlėįKPæR¯$ĨCĒ>÷œwæēx|1ŖÃ5œŖOļˆY1{rŽÂp2yį äį ¤‡@Ō“\}e,^ËōĩÁÉ-Û#<î(į]‚ĖĮø‹{smáčl-¯DW7ĶĨ˛tÁ?1Î~^šĪjÍ×î/´‰´ 0k˛43]˜bĨ‰1Ž™ëŒuÍv÷…´­ræĘįP‰åûŽ=ØV'xwéUŽ‹Ļ]k‘jˇŊŠ/%1ÚĒ3Ž3×ƒB’°YŗšĐÄÕÆņ4¤xz KuĒj ĸ€ĘBFff#8ã8Ē×>Ög×5ëģ+ë!ąf —Î ē6 TÛÆ9īëNƒÂúŕυ~o4ŅĒčŅ5˛‚ΰM(PŦz†Îq×ĩt{­*ûĩņ†Ĩ¯Gs¤ŦzžŒĄäļYūGB  ŽF>ŧStĪŪŨęš%–ŠĻũ– RÜKksĀå Ž>PyęsR\øgVšļņġVUÕáKrTˇ•AJāq–<“œTx[Äūž{Ŋ5“CR›™]™Īo—ëGē-PíÄ,nŧQ4Ú‘%Â!ŽÉ<Ų§b Ú9ãôÍK¤xƒXŊņ6Ąe¨Ųˆ§‚ÉnímŖ”†8Ãļ>öp=zU$đĮŠ˜xŠX¯´ûIõŽ˛BīēP@8Tuę3IĨxWÄÚ^ŋ5õŊîŽÍ-š$ÉåɂĘį'$äąįچĸaĩ[?EÔ.´H›OÔgō6­Đ/š™‚0$u&­hū$ÔŽukíW´[+›R­‰ŧÍęĀ•ēÁĒÉávO čzm´ú›Ĩ_ Œžđ$ØÄĀ÷5Ģo _'õ-JøZ=•ô)EfŪ…ÚÎŧŸĨ'ËaŖ™ ĢņŖ1Ē)ŌKđŖ“ŋ$ŸRiuÛhôxvæÄySß4–÷ –0Žœ“QŅõ˜|juC¨XÁ0„Û[,ÖĖé,!ŗ’C ŋ¨ũ+KNŅkVÕĩ$žÔD~L!`ōãˇRrvŒ““ëNë¯aŲ™qx’ķVŧˇZ@šÆKĸžg“&õ Jų숨A#×4°øĮZ°đ­æĨ*ŲË4ZŦ–­’¸b  į’zúV†áŨ_GŊk[]Z5ŅLÆuˆÃ™É@äô'=fęžŧ•/4ãĒ'öuõû^yfß÷ˆK 6îyíŠ/ƒRÎĢâ›û˙Iĸ[ÅgA:ÎĖ$˜?VŒôGˇZÜÖfē‡N”‰'ŲŖ2ǖ*’=šŽ~ã=ŚOsđÛK„GĖB€|ĒrvŠ<žŊjĨĢjϝ­Åg,šl‘âšâ"cŽLę˜ÛšvūŠj,…&ņ¯4^žÖÚÆŪ;÷ ‘Ŗ +œ1*v¯NMlé:ōÜøƒĖą2ŨZȈđ[IōČĖ€‚šāuäÔQøNū 5ŋˇÎ’ûĐĩŠ>gđ€~~>_×ŌŦŋƒīM†¸eÕļ>ĒÂ@ŅĀTÆGw#hÁéM¸ &TąņŨ°ÕíuHísĻÛ­ĀkYN1ØIū!ƒéXņę>"UŌ%I’åuR÷1Bdo’PIEĸõˆŽú–gņŊgiŦjQ›)môûæŽX\ˆĀNŽ˙1É?•kęzĻŦū.]*Ō{T´—Nkˆ\ÂX̃ˇ'œyĻ'ī.´VÆ}X„Ôî|éŧģeʞ2–é€?*ŊŠxfķí:~ĄkĒ›{›H ŧ’–d$ēNä{ÔŪZG3qâmv?hڃßg¸ģušŋŽÜ0Š0͏”øë]—ƒ/uMGHjwv÷ldaöˤHƒĻvđAČâ°l<~4QĻïÉļ?9@ku(QņWpɐsÅtūđĖŌŕŧōL|ƒIdĀ,ĮƒĮn”§(ōŲNú Į 6:Ž=WU0>ī<įNd,A$ųb˜ˆč `dœxŦ¤ô)ŽYS$į=yŽoYx-Ž`ē’&9bŒTg§Ž’áHƒ=kũÃ4ʎ#¯Ōŗ§ņËá54åōĐÔtũęébĢ:íôÅfŲ‘(ËžØīZŒÛS{g8ĀÁŦOq0YļÆ cÔííVbÉË*ãĄ æĢĻBüې°É# öŠÕ‰‰T1POįZŖ&= Ã'’íéšp<”TÃ’Ū‚“bōģˆ=ōzͰ@ €O;ISÔBq÷@į4›ƒcäį'$PėĨIŪÅsÁ™~‚MĘNrF0?•+ąpUĐLŸZ™YŸptíڅ ` =Î=h,ų›å^į¯Ō­h ƒ%BdņÆzÕsO(`¤ŠįqĪaQI,dĶJíRKĄëCwĪ-ø§ĄgĨ,6hM­ÄĀ\:9gÁjã˛’1šâaĩąŸÃ÷RĪļx­¤ĩ09VōeBprĀ6Hô5ę?ĩ—Đ<8÷Öą ģ˜‹T—h-œļsŽz=Nk„šÛM…įŌF›W6vˆmįH ÍpŦ2Xœ0$œņ׍ޚoÜ3kR¸đėņYÚ*ÚļĨ}äųihą˛îr:Ž¤ŒîJéWÁˇ7)xcI‰Pœ†™‡VÎ2š'åã>Փā¯iž­qĨj0ÍržOÚ`ķee} •?u°ÃŌŽx<;ámr--t+™‘ †ŽūUÆK ×߸ĻÛnÂÛS O ĸYËe(Ķ v׸žîĘ|ãh 6æŽŨčöFe›Ã×kXÄĶÍgz‘F dĢšPyāO^õ^]kÂë-Äw^ÖĄĖÁ&îBÃ2 ü0}{Ķ.æđuũ¤ÜkšY>Đ|Ä 8ƒžÂĢŪƒī°āAö¯ ŨA!uiöi…f[!ąœsÍs7'OķŽMŒ“îtuHŲraO yaųöĩØÛh°ßŨhč>)ĩÔoū˙—¨Œ“ÆpĀõúãŠĢ¯j7Mqxž.ŅJÉö3 Œ+y1ËÉČĮ^Y›%C  (FOLWyđÖ]otø”^‘å]<ŽK†_sŅ{ŒzÔĪDî4vĀī ‰3ƒŒZāĩÜŧ‹Ë ü§îŠķßʗ~"ŅUtËûÅĶŽ÷Ũ,VŽë坞ØlãųÖtõe=­âx†§{?ˆEæŸv’$'^Xî@Å]&Ҏ[y:•Ŧr6Cĩīq€qëÅSҝ-åÔæĶŦ4 ›[ ÕᏖ{v‰Û TŽr3ŸĨWđž‘ueŦŨZOû’īžZ2 ,¤9`O ųĐŌ{‚5íuģË×Ķ-îĸ’ō6%Đ) ÔÆ ųíUîolGŒ-!mRDžX6*ÄŖ nÜÃGÖ˛ô(fĩņ$k§%øą–YäŊ´ŧˆėļ~pŅšīÃ9ÍI}sįüE´–É!ĩĩ’ fÎĘŽÄmĮN=h˛¸îhIã"Đļ¯l‰,Ļܧ,āĀA‘ĪJÕēēˇĶ-ĨŧŊ’(b~i¤8^{u¯9šĩ–ëÁ>$´‹Eŋ’î}Eæŗ_ą8ų”†qŸōkąņ-ÉO XÜ&‡6Ą'b–ŲœÃØČPrÄz{ĐâŽĖŊĻk:~ĩhgąž)"Š;í+°“œā÷ĖĮwoqņí~ĨöȖÆW’8ގĮnUéœ/ūU˜ņj÷ZO‰íáąÔ Ä×)vûí k4X@ʧ=HåúÖí…ŨƒøÎŪú×Mŧ‚Ņ´Æå[@˜¤ōô5U­{ ÷-iW: ŠjęŠ~’]4q_]HrxOp9ÅjE¯i’j÷– wšĩˆŧ¨2<ĩ’Iã¯ŊqˆĶ˙¸žŠ-:ņfRûCÄmX'ÚđĨyų}+fŌú īˆ—1Ų^y3éQ¤{í$lģÜqĀĮ=i4ˇ“fĻ•âM'_ą•tûČæ0ƒæ8(2Fân8=*Ũž¯§ęW- üGˈĨ Ķ<āmÚK߅×^•ĻÜÅŠÃ ũ˛3jc.ĸO™Ccæ$øVšž™Ēø“Ã2øv†Đģ]ŧI;>ãņÁĪ<Đâ…vtVū&Đne–$Ö-<ŨĪQĘšcīÎzS|/æ6†°ļ°uu2š îæéøtëXūšŅÖãÄÉÄMė×QÍ%ŗ ĐĢ•%y$`nŧUB7BoSŌ.a:’›kāKŪ›F l:}k”ēÕõ]'ÄiĸËĻy„ÆŌÁ?Ÿą&EÆOCƒíÚē_i‹Ĩč°&¸š¸™I§žå¤Üv˙âp+œņ¤SŨü@Đ ŗ‘"ž[[ĻLā†ė{ãũ(KVŠšŗáu5ëFž(%„Į+Å,LA(ęyGŊm])ەˇŌŧãÂzˆąĐīėaˇû>Ģb˛™`bK<¸Î˙S“Š…ŦŦ5[kMQĩęä´t쎪HJüŪa.NTŒįŒvÅ'ØŽwN­š“ÍQÉb9 wĶÜ † )Æ;ÂŧķÂút~#–ųÖK‹aæém#ŸŪÄėHl“—aĐ ę|p ^Õ^ILe`%v;)ŨÛ§ŋnôœm$†ž—6Ë$°ÂŅî ß12)ŽÜEX›æļ”€Õāg'ë^z4}6höÆIDWļIrŸkqį¨<ûœvâ“LÔlí<Ē[É}<6Qj“[ÃögũáR˙*+āyôî(ö~asŗÕ4Ë}KLk+Č÷Á0ÚčI}=û×<Ú=ļ•,O}x‘Ė‹]ŨX؝ ã‘Û5mu˙ÚiwpŲĪ› ‡íĄŒj7l÷ädqēĩtßéú†Ŧ—ÂĘKM.+H˜‰Ąß0}ÁBØ’sœĶåiZá{ŗĢˇåQ$E@ Q}ÜúõĒyDWQbvØ#įąÎŧĨŅāđT¤W‹øu–9œ–DķŗĪŨ)ĪŊt:´ú]ˇŽĩļ‹EŠ÷G@<üæa!ãÜā/åKŲô9ۛĢ+KV™Ža†?Ö;…\r>ņâ¯Ú]C< -´ņÍœ‡ƒ? ņØntĮđ‡d‚ōů4č&‘Ŧî”PXS ¯–VF#wCЁ#ļy]ŲciFČįĢ&ô)nC>í›]G™ˇ’:fš cR“NšŨ¸¸,ē‚d]„ä9bO|qí\ŽŋĨÜ_É ļ›Lą’ š }=éRøË—Ât:~wđ€áZdĘPnÁ$ôíY–äâ3¸õö­đĄIęsX žä…NT_Ļ3š˜å;šĪ'€j%P2g <œT¤*ģ[jŒōkS&$r21Ž@7įīÕ6H˛ä÷GĪ­4æŗ7B§œŦ6€7>ŖĻ€Bņąl¨$m#ĨBX‘€ĒN1͌Q"†—Ŏ~”ĨĶPrF(ōęˆĖ€8 “K īƒÖŖŒ RKƒˇ'šAûÆÜ%\gîöÅUĀ\ļĀDMÎOĨFŌŧ{W‘W€ÄãÖĄ*ĄBģđH$Đ$rŋ—?ƒ5Ôĸß&bäæô]§×?Öŧâ{ĢKÃv:“C*jš9X/Đ †HãéÎjĮÅäģ›VO/UíĸÃÍđČGŪÛß#œöRí¤´ŋŗŋ‰m—JÕm'Ea—8ߒĀú“Ī~kޜmŠz™°´ą×|%ŦÍ2ŦsD× ÜĘžYlũ dū5Îx–H_âuŌ=´ˇ#ėąĒˆËf#€wü§p ÷¸ôŠņ@[­6åDq\JŨŲyüqĪ"Ģé^ĩqomŠ_ļ§j Æey‰Ã0NFK0{ÕGũĻŽ.ˇÜj…?qĢoK4Æã¸‚Įš?‡JWRÜ-až °¸đ~ŗ­ą‘´]A”(ĪúļeAõĮCŒkcĀVéeã}z¸2Cå#(ÆA sĪæ# ĢOnŪ5øVŗK™zB8&hō8ú€:ŖđŽ34ēĩĖķ‡RŽæ;‚€qŸnƒđ5/X;Kž.ᙄ{J…Á=9ö§Ŧžb#ž¤gü*O-Tœ!ų‡=Ģ…›ÅZĖ_ˆīD:~ũ&éĄa‡ÚčnzäŠÉEŊ‹mˆ1AŽo•‚Î}ŠŅ4Ĩw•‰S€=1\öŠŠęđ˙aÚÁgbͨ %v_œF_ÆpyäÖcxƒ]†ĮU+Ļi¯.Žįí[fpŦĄCa3œg¯§Jj ‡2;¯1ÄnjîÉ Q*m3¨| “Čį5ZŪá¯4ajŠ&š:Fģ€-Ž;rx^};Dŋm:Â[=JU…V9œ?˜ųۓĐ9ëR ŪĄtwędbŠg-šž1Ŗa…mröíô ­GŽZÛBÚLBã}Ŧ샪+Fsōš­§kž#ÔI&‹E=Ŧ“ÆėDlQXŸŊ‘ŨERƒΊgØ7äY›ųTō<¨É˛EØŖîI8˙õ׉59Ŧ|/xļ֋­*C&]ˇÆNI+ę0*Íöģ¯-ūšŽ•fëĻF˛ĢÉ;eÔŠcÛŽN>ĻŽ]Bį\e¸VwdœįŽŸUÔ5eŌ-äēŋšH­c3Iü9 3ŠįmOõ¨“S‰ī ´SA,NJ]U)œã?\âĩšžķHK]cFtžūā¨ĩˇ›p‘P^FU$(öÉéWŧenš\­oĄcî)ÖmŊ3€Ä{Ū´ ĘĘZ.ʎOzŒxōķ‘ÔTąĖ#UX8'üûĶ<ļwRX r@4q@ā Ĩ@įŌšģĪ øN./¯ôŊ:ĪæÉspĒ2ĮžãĐįžĩŌČĖ |žŧ•į1]Yx—Įž —XˇûFŸĸZ¤QÁ,,ĘKn/'–zœ Ž˜Å4‚įm¤XéV™Ņ­-!‚\Iæ[  &{äuũi—žĐīīZöįNGžUČĘė‚eôp ?ŪÍgéž!đū›kŖXéŅK ļ €XļqÆqëĪ4\xį@ˇšxŽnäˆŲ\yČÖÎcG#<°žĻ‹;Ģ{Ąhסq]^éPK- C7đĶ8GūŊC9]Ü-éÍÆnyĮ^jÖ§ŽYŲ/•,Á¤xLå!¤"Õđ ņY§ô-:H™îä OĩFŅÄåZ2@S‘ÁÉ"–ŖEÉŧ3 *[3éQ°ŗP–ã$˜€éˇ'Žĩ^đû­äÃM7 ũ§%›ÎprkNŌâKŊ.+ˆÍ4k Sž7.{Œ÷Ŧ‘âŨĘUĩēÔãWGŗ„o-dūá|mؚØĮĪáOÜiXKĨ'Ų-Û|HĨ”ŖzŠÖĸ‹Á^†˜—M1™ˆšB%pƒA ztŠ`~õ=Dniš~›Ĩ؋k(|¨™ĖŦ2K;Ë19$ú“\ū§ĸIŦøËNÔĻĩĩ†ĪL1'S™îč0 œōNkSSņ‘§jbÖîå#Ÿėí0…”Ÿ7ßĨEŊ¤\øxęĐ_Âl‘ą$ĄŽq×9< h45.ėėõ;Il/!Iá™|š#oâZæ-üáũ"ÂâÚÚŌF†pRS<ĨđšČž˜öôĢqx¯H&úėŨÍ6â8ä†H]Ëō‘ģ,zz՘umgJiíÄĸ2íÉ")":õ0ëõĩSDŌ4¯ +Į§ÆR9XYđã’N3Pđļ}Ē.Ĩ-ģIzîL'“#ŨÃ`aë\w…-ī|CcĒ‹í_Qi Ŋ’Ũ åÁÖæ‡Ž]Z]jú^­,o6ĸA8ÚĸH˜eIp0qMϝ`ķ5õ iˇ×ŖT1š¤dî0{tÜ:LõŦĢMF†K…“JˇIæĘ\)„eŗÔPzúÔ°ņ…–ĸŊĘ,‘ÛũĄŌXŲCü\ŒcÜqXĮÄjŠn!¸´ŸY Kwb |Ā0Ę=GOÎĨķ­ÔŲ‹DŅæ9SJ˛I!ËuˇPPF8ęzSī´ë-RŨ¤W1#d$ą†]ŪŧįÔÖ&ŸâUēÔŗŪÖō/ĸķ$‡äÜŖ,šķõô­?íëH|CkĄÉ曙á3FQ>@Ŗ=OāiZAĨ‰ĄŅthL>n›dZ% ›eĘЏʹú’ņ84ë3dˆ@ģXŽ„€9Å[Ô¯ Ķt÷Ŋģxâ‚𙺀?Ÿ>•‡aâh'ÕĶM6Wö÷r+JĢ<; ęĀįųã¨ŖWĒaž7ĶÄ~ģ6:\Sŧk +$G‘œäÔđŽ{HŌ,šīD“ÃCQG*ĩė’<ĸ/( 2ø“€+~īÆV6ú3jFËQd[“o&#]Čá‚á˛Ũ2q‘žõĄu¯Eg¨5…ĩŊåõęEįÉ rˆNbÄ{ŧU'$Ŧ+"ûYŲ[ĮōZ[Į,œ6#Qģņčj+ĢKibXĖqîQō’ƒ øöŦŲük`ēEŽŠšžÖâä[â4ÄäíÃƒĐƒQZø’ F}FÕôËØī,ã֞ǃ*ƒ¸ŽqíPã"“GAki§]Û[뎞žŲrŅ”YGc´Ą…_KpĒžT{#^@ĀŦ/ŨÚßxbŌæÂÁ,-[w—l§;b:Žųމ‹˛cw°÷Š{ę6ȒčA`Hü(xĐH@## ¯Öœ |Äuĩ08,ÄŖ*†™Fä`ąã?ZĮšU Įxž•ąvĮfq’Mr×yŽũö(˙ëúúũzTAŽceeczËA$néZĶã÷Į'5ŸbŠp9ãšëZ!ī…ĪÆŗDĪqÅÛ$1’G ŽieU3ĄÜyį=Wĸ>ŋ$ĘdļlY‘¸+TgbŌcnw c#=Å<;2Ÿ~*œHŌYĄm-@$t8Ģ$ųc üŊ…4ÄĮļŽũĒAīB ¸ĢņĒŠ8e]Ā+€3Vöî\íëŒgĨ Ü6#emP=y{r3Œžôæ R žqĶĨ8…OæšŪâšNö{ˆ“|vÍ;U`ëŠDo‘e–=ŽpHÜ߯Ļ`ÄWb‚qīM–3É Ž3“Ú‹ŒķoˆēU ’[ÄŌėdēē]‰w%ߒņ=ĮĨpéŖuākšnæŽŪÁ. F~i1–A–^čN{VÎĄ"¸PW‘mâTΐ¸dŒ–Ī8ô5™ĒG5ށaĻ\"HÖ÷Wę §ÜH–Āë‘Îkē ŨZ˜Ëvtū¸>'ĐÍÄ;-ŦŽ%HĘå‚ãwŨ’9īŠÄÔe’ĶâF¯rxtwŸ ¨­‚Ûzœ@ō+sÁúIŌĀģ°:‘ŠJNÖ…Āú垟¤ZÉŽ[Ÿė̟6öOáÁüܜoÆĩŋáŋ]G_ē:”uH"†Üūč¨ÚßÁ⟯ˇŪOßĒéøāŌģ„Œä ķ¸õĄÉ°ąĘ¯ƒĩeáËUÕmö;‰Ģeö }ū8'>õšâ­ī_ŅeŌ­.⡀˛Ë,Lø\įåÁņŪ­XK!ē7–QÛÆ’‘ ŠmæHĮF< ¤úUĩ&HōĪųæ†ØŦsOáíf_éZŧږŸūƒBņĮ3xų_aUáÔ?áÖt†Õ 7—÷Mt'2¨bÁˆ#'ĶWe$’Œį߁škg ü¤įvsB›´9;˙ø–ū×NžÚrkÚ}ÃVÎ:įšŽDÂídį āWŸéVēŊ׌|QpēEíĩ–ĨnE,ÛDeÉųŗ‚O•zpĸBņTíUB2‰Úeō[4<ÛOļÖ~Įā{wđî§ŅĻdēÜŠŽ#ۑķrš=*—ÉŧÔĩočļš_š/n#‹Ī.ĢD —Ī‘€rkҎąG>aR?!øW-áŋjz7ˆõ JįW†é5&2OĀP ˜öāĐį¸Ņ‘}Ŗ Ĉ.´ sH›Oˇ´WHVg…âĪU=Žsšą4÷–ž2Ōī#đö –PiĪm"Á•ŒģĢ(āā€œtÍvōLÃpcÎzŒÔRËæn‹ÎQ‡UlÆyĨĪÔe‰%&7U8ųHRŊ¸ë^Soi¨Ãđú÷Á×:%Üēŗ3Ŧn†Mī¸JdûŖÉÉĪ+ҧ‘â˛ķ|īģ€F8úUŗ/î†eį Í%+!ØãOÛl|uĄFÚ}üöözcÚOwDŖ9†Īû8ĪŠŦ)`ԛáÆŊ§˙aę)wsŠ4öņũ™‰eiƒœp§>˙ZõdŨLz2sۊŠįĘđ)Ū™n‡Ķ۟8ŽOPš¸Ÿâ‡¯#Ķ/ūˤË,ÂŲ°Ļ@¤)=žī9čMsĐi:¤ūÕ#ƒE¸IáÖ˙´ŌŌxļ}Ļá‚|žÃÖŊ\ÉįĪšŒē9Ģģc’WŸÖš˜XānWKÕt™‚ø[RĶá™âH°lU”.Yļ}ūĩĢáiu‡đüÍ­‰¤ž)äō‹G˛ib\mfQ˜ķךčšB.RX˛ÜĪĖúÕ Ō4A¤›o”Џžp2}ĪŌĨËK oāģ‹Í OÔĄÔŧ?Ŧŧķ]=Ōíˇ­€9ÎČ5j_ ëZއâ Jhŧ‹íHŖGbX6"Œ¨ÄddŒ×C7Žôˆŧ3ŊåÜ Ie1&!%ƒéž2TõޜË@4-žŖĻ>ĸ›“ŪĀyŦēy×<9ĢC¤x~ķMŋžĶkŊ͸ ˜ÕĪ,1ĮŌ‰âmjīÃvē}•å´š}Äs] ­Ú/ŗ"Ž î#=Úôˆf(W9Į­A}¨[ØÛ´×sE Q‘ŊŲ€EĪ$ũE.{9ˇĶŽĶŁ´8¯|ĢšnúÚxJˆ¤ō%#1éÉÆ}+jÛTÔWÄöVЧŦÚ1FK‰ØâH¤’¤gŽ@ãæļíü_ĄˇĘē•ĸ‚8v™Bž}I§j´{ë†čĮ–QŌuāŊ蔤ü‡ÅiMâoMak*C(e–6“îīRÚąĨ}BīÅ^7úzŲ\ũžélĢ r Æ;qßÖˇ4ĢÛ{ÛX$ŒįiāīĪ úĪ—šūĨâ; N=Q`ŠĮyŠh‡8,[œĮŖ-,Ęi^čå5 øŒéZƓmŖ ĸ›Rûl-ʍČeVۃĐņ[+¤kö"›_ĩĶ#œęVŠÕĄē ĐČ €C ôÍvpŨŦą1oÜFæ Ōõi¯#˜ŨiĶŲ2\4Q̐ÆEÌtŸĘhÚG?‚ĩqá˜lŦŖ´’ömOûBäI6ØãmûöŽ2GgĨ.‡â'ņu–;›5ˇX Ķd2䌝˜ÆIWaȍ#IĨ˛Xô]•X@` íŖÚ1[SƒŌŧ Ģ'…aŌ¯ĩK>[mÁ$Ķ.ÎŲwŲ`T3Ø×OĄčĄi‹`ˇ“Ũ*Æ{™731$Ÿ ­eۈĢ!m­ÎîI_Ĩ\’ =9ÉÔĨ'$;YX–4fĀÉã'ŠĒj§yc T÷ kŗüĩ •œį=jĐj÷)Ũāu g ëšģ€Ëwē& &H`zčîF ëÅr÷ũžũžáÕaY #ĮPA˜ŦéĢɛķ8Ģ™U°^qÖŽ.Õ!IfÎOaŠ­cˇŒ€ĀņV°¸Ŗ×Ŧĸ…-ÉQ1žrĮøWŒ~&ĻL*ãą"ŖŒr2O¸ĪJx'9Âô`V¨ČzŽNKžOâ†A´ą“œ|šĀ§)g ī$cžxĻíVÃml{Žŋ…;1ĖE\ ĘĀtāņøÕ¸‡Ŋ#Ē É‹Ô÷4ĒāŽīzzRJÃoAîI•cŽsC+œ…eĀč3QÁĘåē– `â§eĪĘ@ÛĪÔÕ-I+`Áķ;†ČĪ^ôĻy†îŒõ^ŋ­K,[ƒ7*?§ĩ@ž\HFŌ@û NĢB™åū!đjØøĻãÄrëZZ\Hģâ˜îrĀObT}+Ô띝mŽ‹^ųå”ß[ `˂¨ Į ÛøŖ§gÄÃvōÜ\ą†;Bø1š †v%šŗæ”É!Ôa´ˇŋh–͉ŨŽŨĖzģ3‚Á:Q]đŋ*fOvŽģL•īŧ_áÕb˛IiĻJ%lāî8eÉ+Æ:ķ“\ÕÕŦŗ|TÔâ‡O‹Pē˜$Ͳ$ųTŠ>Ŗ¯ë­đāŊ5n­ €&–í˛A†2ÄėP9#§8ĮZå.ĩ°ø‹Ž\>ĸ–I!1‹æŒnU%WģmķĨūBgZmm4X§ÖüKuĨŦĮ‘bsįåHō9ū.ĩ“Ŧ;ÅI§kĸ=+Y†p–Ë?2†]ØŽyĪpjô–v…ØŊÖŽŌÎŌî{†USĢ!ÚĨŋ‡pŠĢ~<-qŠÍŽMqäŦR%Ņš’b^í“ĸF™û™gū´ēųŒáÍÍî‰$ú>ŗŤ1¸ŠâŨîÛnÆdūú˛đpF;U-=Ž/[iw˙iÜHĐyiœ¸ĮZÖâ8í]n5ŋëXÖNžma„Û!w)]Í*„uÜsĮ9ÕÜéryš,3ũļ9ØÄ?Ōp0ü›ĻzÕMGÂzĢå=ū™m9„ŲNåPx‚=ēV´6ļÖöčZF‘ĸyjЏU^鎔›ēyũŊíė>&Đ%ūŪŊžŽųŽ<ųd";Y”FJˆãĪ|ŨũM`x˛yõĪx‡P¸ÕdZۘÆ2ĄbEPŦ1’OŪÍwņøCÂNßbN´‘íäķ„&BÆ&=đ[ {tö§ę đöŠys%Ɯ-ČQ3od dŒäuÆj”•î Ûvd œ¨Īî3íÍN …GsëTėŦ-4ëHl­"[BģcŒĶúúÕäPHųŽīŠŠ¸˜…K/ĖŊzœāWęŪ'Ö´MTĶímĄĒXŗ‰.'GpĻLĢ|ŊČv¯GfBœîöëŠķføma$ēŒIŽŪ šô]ÆDHLr)ĪĖÄeąØg=*“RS4¯ouöņæ‹eq§ÃlērÜÃįDÎwÚw|Ã<ƒøVŋŒŧI˙æ‹â˜lîn–Ö{xÕËą.P˛ļp9>•Ķ˙Â,ąx‹ûaĩk‡ė–ĖTs“Ôˇ?f‡†/ &‡ũĩ"ÚÅqö˜OŲ“(CnÜn拤QØ$' ¸ŗÛų8ɯ3¸ņŽ4jog§˛é×ōAsiē ĢōAÎđ¯NB>Ė΀ō œuĮôŽŧ sũĢéōø…ļĢ9š˜Ĩ˛†ÜO͎x úŌ/PšsTÖ/gÖ,ôM";uģ–Ķí’ItͲ8˛ /%‰ŦßøLĩ8ü?âÂĐjúí•DäēžCŽũ3Įĩi\øJiotÍOOՄ:­ŒfyŪ ÉŠĨŨY­ŌĀ&ŒÄdōüĖÃq‘“‚yŠvē°|$Ö­ü7eŦj_auÔŌÚ+X FæČzˇ°āzQ¨xÄZf…ŦßIĨÁ˛ŲöYgS‘[ƒ”É9RGqŸŌ´˙á iŧžŧÕZeŲÜĮG‡f6œdîÆ:ûÖ7Œl5M?áŪ°úļ˛Ú„ Ä @ą(;× ’[§z­…–Ôî,ÕŋļSUŌĩÅļŧ–Ņ{`ņÜmčÅr0FOō§ĖŽĪ›Tņšõž—a§ØÂLK§‚ârŦšAäʞ1Žk°ŧ†bÂXÖHö–ō›9<įŪ°oįĀz%ĶŪŧé|Šw?$Q]:Æ_ î œ´)G¨XäPĄGJ#Oœģp¯4’LŦYaĮaŌą‘q2î2äūÆëÖ8I. ĐČÃ+Œ”9?ĨvW?9ÆŅíXr\*4ĨäAđIūĪCQKIKá5Ŧž` Ίŗ 2ŗ ũæ'=N1UŦNFw 1WÜHâŗˆäõ$VVvįņĢJp$'“íUUA*I‡n€Tč {ŧĩĪ5ĸ2d‹’ų21\gŠXÔāå€SÜĐyʄ%c‘ŪœØ*”3ũÜōi’4…nZL㎠5ÎĀ ¤ŽŦyÁč)Xlq‘ō“œb—9l•€÷4Đj„`œôQRm*šãŋœĶH?ĭלBĮæmš´öŋ0ÜÜvÅA&7áW•âœíœ)SŽŋ/õ¤Œßž)å^9˛šÛâ.ƒŠē pcа‘sޤg%—ōŽkMŌßÂŖ^¸‹Q¸¸]Ō$ļ÷"$ˇ*ŪXĪ9/ė;VĪŽŧ5â­WÆÂ{K)ĻļŽ%˛,ƒlgŠcĪ>ŊkVë@ŋˇK7…žĶįyĖmĩ–Ī'yFÆ2FqŽĩĶhĨr7e ;TÖtX.¤6vw7K3[H^G77,Ŗ+Ž <0ĀôŦ[˙Øģ=ÅĪ‚íæbÉ)ûGī‹p`péŪĩ[JםĘk:ÄĪ,ĻT:|Ã÷’¸ų’nĘ AvŠ,<¯éí1ļ0۟-‰û=ė‘,āąOSōüŨyjĨʡš‰´gšd>‚YdÃįą vā¯<ք(ŗ…į6ž´IaûĮådėųVyŅ5¸õHPŅdžxâ,„ŅŽ†ÜĆŨ¸“Đ×UaĨ^ëfâÎ=.k-)UŲãšļXY°B(PI ¸“č1DœĻ 3.įâ‰%Ķ#ŧąđäpÛHY"†1žĀ<ÛĩcĸŪxĻY'ÖĩÃ=Ŧ2¤IēyžlŸ–8Áņ#Ĩh__ëßLļžĶ5ˆotŦŦá¸Ú008g'¯¨4{?ŗD—1隸ąŽę) ģ‚ß|ąLŠķæ3Ɍ䏨ĒI% ˇdŅÛÁmánÃbyvpEĒé÷I•ÆF7…<̏#ĻOŊz–s=ÛÛ´ qqmČã’Ž×@šņ%ÔÖņE¨ũ†ņŌ;ÛûȖÜc9XĄ¨œq^Ŧ,I1¨XPmD cQčZ)j:ĨŽ•`÷ˇåĸ‚Ä’pÉŦŨ;Äöē‡Úák ģ)ėÕdž+•PUeNA#ŸÄŠŽ˙aJ<>‹đÃŲG˞vį€qĶ5ɏx’âë_‚{1o¯b¨ŗĩđ”Äę¤mnä’NHĀņJ1ēÔ:ØuíŨ†ąãoÍklLøšEšHDˆ#;J1pįŒÖ†ˇĸéÖ:槍ô1ÛܓzI%đ`ĨŽė>•ßɨxroøGÂ5€•'˙IŒŠĖar<ŧT0iõöâë,ÚļĒĪ=ŗ<ņąų‘T!Ã}ŅíÍU—õę:×ፂ}ĻæĘ ų䷎kHÉtg•€įøsØöÍmxlčÖ"žŌŦįÔäÕ52ĩûË!1†Ā*[ŒsÅrņčž ‡&Å´R—z‚Oeķ&A)sĶĄäŠØŅ`Ö'ø‘{ĒÜhZŊÍŦpĢHŅ•L|Įq {āqž´ÚV`tמ&ĶtŊFM6ynešŽrË ģɅÎ8 9äöéŪ›Žô)aŗš)Ž.Ü"IögŲ€ã sØÕˇÔmž!C¨ 2íŦ“O’ÛÍM…K–W|Ų펝MsI¤ë’ü?›Fm"ų.Ĩö‘ĖgäķˇņķãÆ=jRˆėĪBÕŧAeŖ >Ķįy‰•–Œ…#o`: ĪņŽŋ‡€ouK[ĐKcöY“’YĮĘGįšĖÕ…í§ˆ¤Ô'đÅÎą§j–ІŒD­%´‰žã1īÁĢ~*7מšĶíô‰æîßË[x™1zrŊhI&%ŠCÃöū˛[-ZÆ=÷ëˇķĄŽF’v*É\eĪ|q]v‘ŠŲëV ¨iķųÖėHÜÁsØ×Ŧ‹”šŅõ“áûĢëXmäĩē°ōÖIbŨˇ*ä†û¸>ØĢŅ[øŠk8˙᡹Đm6,ī,pû˛rįcasĮĻ×p:×CÛ2ĖęŊX –ėXš¨-’Uˇ„\H’\Ā‘•pĨąÎ=sVw|œœnÕą˛€“ÉôÍaÃwģģļ,Ēãŗž‘ŸĐÖîy'wÔ ņÉ´o §Œŧea{EŪ¤ĩFËHŽČÅŧŦķœ•āsŌ­$Á3¯Öõ R×Į>´‚tM:ëÎÆ#™‘ ûĮˇ#§ĨtĶĪ“ĘeO0펌ŸÂ¸näąÔ|ĩy :Œk*܇‘r¤ÃœúœsYVkŖ_jڏü$zËÚjvZĢKå7–Žę1lbĨŲJāmSøsMĮAŖŖĐî¯ÖOų˛Įu4WĒ‘!4Ī–Ŋ\`Zé"o:čH@ÂĻ€y'ˇ5į—  ßKã•ŋ–īáģgˇmø™’ĄJÎw qMy^īPđũ—ŠnDËŖ+‰.@k’@`Cqŋn:ōi¸Žį¤-ĮšUãÕ1üjWô4ÂUŖË)%›?‘ë\͆&ąāũ+ûVKÛU†ęÜˇÚˆķ‚ŒJ‘î2:ŒšÉ—O˛> ņ’y’Kũ‘}1°?ioÜā1Ī<“ëIFâģ=bæâžl ģc xŽOH¸ņŗm§këŠE…Áv’ĘK|ūėä&īčOnkSSj>¸–åüÁ.Ÿæ–WĀŨŗw_÷…rö—6‚ËáÍãÜİymŽŌ›ŒånqœņBØgy ‹yH*ŖĄū}k?UŅôíf+h/­ō}Æ7c´Ÿ|q\V>‹ŖŲxĘ.d˛ˆjžZĮe"‰va p b3Æ2yßÜhņŲ a´ļ.Ū;Ī0cĘmėz“Œ‘Æ{ŅË`šÛé­aEœ°‹ULƑą%NyLšÔG%!•991^]Ž™ö/]Ģ"\]•ŠiRŦČb9 `+wÂía¤k>-´ļ›Ë´ĩš9|ą&đš/´rqÅK‚į]¸´‡ī 1ÔÔ1Teˆf‚0GL×%â-~ÚęÜ[]ŗč7—E/&ŠŽŌ0ĒĮ‚Ŗw^*Ų[xˇÄ6vŒÆĖéŅ”‰ggT._ rq ĐŖ Ķ;¤ÚžiÃqĐ7ķŦë&ÕMôëwöcnNmÚ,†+Žw™Ī§jķ­:{)4]ÉuÚü˙*G3üÁvČ[w?Ūõ­+­´ÍSÆĶ˙iËk2B>ĐĖt!AĪv zSä°\í–goõ„‚W; üë…Z(FŸä˛|Ã&yČéŒW)á̈ãņ†ĢeĶÛÂĐA"ÛÜ]‰Yä;‰nXā‘ŒSZE ø…Ž–ē¸ėšĖÄųe™ˇmūįtŠäĩĐîuë#ģ}Ŗ¤kĀ==jynĖ`íÁĀ`u9¯'˛•ĸĐŧ¨GsįO~°Ėdšr=íW8=šÅtß#´k}Ë;#˙i@€G&Ū ŲÆ:ʇ R VĄ%ŞŨNvēW&U ß8üęôö÷6ąęāy“/°c<úbŧŗûG—Ä^*°‘åvÖąÜ$bî@žnÆųž÷'§^õw[x[C¸ŋ”^›Ë##ŲČėY"”’ĻōqÅ?gØ/sŌáņ—sa&Ąo¨ÚÉk •–C*팏SĐvëIgŦYŨÜÉi ũĩÅƝ˜bIA*‡8šũkÍ­¯íu 'Į äMq%äbX|Ģ'įË 09Á }sÆkJÅ­cņƒ.­´ë˜ŗdŅ^NļŽ€; EW8ūōžŊ:ôĄĶHIOü%Úœ“ÜĪ­Yų vnYa†>\œķ[öŖg ũŦĘÖķÆ$ÔšHČā׍kĢ ņ^–ļÚ2j†eÛjå"ëĩƒŽ„Šõę0Ũø~Ųí ē‚Ū0!AsĮ*ŧgœqJqI]åøã•nŪF‘úÚOĘ=Å=ˇNīĐf<|šˆƒžž§4ŦÜōŽqXȸ™ŗ’xŨķW¨Í*_Ęą¯˜˛1W„÷Į!Ģŗ¸8ÛÆ3“\Ū§Ļ}´‰ā—ÉēL¨p8 žAŸŧi/„čŦT‘ĀÁęÆĐōI$õEWŗû„#61ž™æĻ_â,XŒãŒšÍˇ&ƒp g NsS3´+2ÔÔ!œ{úsSĻėd°'9=ąZ-LŲ.Á´…t#$ŌI'vO@x§`īĻ1’;Ō`m¨ØęsU~ČF]Ä)| ä{ĶŌEb'žjŒōHō:ĀĄY“׎ŋ­O•„” •ëíI6;LˇČāqÉíJYP[ר¨ãipW‘Iũj@ ' š‡R1ũiˆfߘd“ÆpGZFpĒYßĮ§ŌœKd’™'¯cPÜĮæCåFJ9ĪĖ:ƒT„q:÷¯,üDÚ6Ŗ›ų ƒĪ¸-7–zđO|øœVĨļģ{ŠxbËRĶ,Qį¸XœÅ,›BĢ˜äuĮ&¸ë-.k_øŠŌæō{ī3NBffØáKgSÛãŸkQü/°ēŽęã|˛[+'ÚXûĀ„žņí]ŠÉ/"nĪMÄ͍åYŸ“ŲGÖ¯yLPĒ1'ûįž1\Ŗ ŨįĨŌ#Õõ+{wĶ–fōdŖ í$dzsīOŌ5K­Cšqš×fļ–IšŲå<ÉĻÚĖ įæ pzTōÎër.ÖgĪ#w9õŠ‹ÆęĘŽĀ5ÂøGYōôûΎŪKå[ę2Cړ€ûF0Ĩ‰åŗž+ŗŨ椸RCĻĨÆÃܧĒjú}¤‰ķĒŧ¤E$g¯ųô¨­ŧEĻ]\~â\0nŒd`ÖvŽCëē‰]nđ ˙t d{p*hŽm.uՂM:TģŽũŧĮ\ûúÖ|׹ĐéE]ZúÍây—ÆËŖ #ä}•Ž|âr\‚8uî=s]ŧĨ7+œ6Č˙ŸÂš vˇÅHÃati@ã4čk¯ĩĢī^xļ-jXeŒČËaĩ<•‚„c%ˆį9æˇpŊŽ{ž•wˇũé KĀÆj85 $ÔîŦd°¸ D)tęrîęûwŽAæÔõOiĐ[kW×ē9œE Šō›)Ķ#¯ÍßđĢV—Z˛xŋÄ6—:ēŽŌÖ)-–uXÕ +Xlf—.‚:éTɸ|í^˙bŨxĒÎÃXūɒĪP–ûË2Ŗ6õJö gĩdhZÍ×ü%˛érj‹{m%ÚU’Ü*FâM¤+uaƒ×&ŽjRHŸt ~k .ā„ųמ)ĨmĀÛŅu[ nĐŨXģ°Ņ´r.֍ĮU`zZžF Ÿ/@IĪĮéú5î…gĒß ‹/u+ã<†Vo.=éšąŸLšĘ—ÄÍĪ…ĄLâĐcc€‘œœäį'55ÍĮˆ´¯øOŧ×î+pĶĩXËí‡Lņ‚áG(\ė•ÎĐˏ=ێ+8ø’É.ŪŌŖžád "Į Ęœķ‘žÕn{Ûm?N–úé¤ļņZSČĀ?y~ž‰áģ˜'Ö"žĶMˎvųJîÃ’°?xĀį9ö¤ŖĖ‡}OPMJ+ëigD“lLĘÛPŗqčÉĒVž4Đŧ‰&KŠLq7—,k*ˆØŒJaOÖĨđĨžĨŖŪęwé0šEd†(ÕV!ŽĨ‡,Nyíé\īƒŪîKr;h#¸ˇ›ÄĮužNcLŽ‹Œ;“Æ{Đĸ­¨7Đ펮†öâŲŖ›6Đ Ũ„,U”įî‘ÔņĶéYƒÅ6ūˇÕãÎęQ gČ,ųŪPĢ’9‡zmŽĨǎŽu=.GŦ!ŗŠh#à ėAÜsÎ6ŸnErēNŠĸü6Ņn4įˇA%ā‚S*Ú˛\2’1Žyīšj=„z¸’cĀŸĨY’q戕†OĄé\V­Ž^ę>#šĐ4Ŗ WV‘‰&ž}ÛKHŒm#°É?δ<¯ÂE¤Iw=ąˇŧˇ¸{iâęĶŽ~´š]Ž7gŠŌ<œžįĩ8)üß)’;R) !NčÜsœ”ԑ,RÅb%X×$θ=!õ8ŧeŦëLëox$LeˆėØ@bpsØWrLRŠ\)R:gŒWã]Nžžˇ‚Æi…“ēxļ¨SũÕåČîâŠ_ # )nY­íÚS€XáAbn‘JƒžĖ8ŦÛ/}ŖPšÎ-:îHâœÚËpģJ$›wyÎ;gÍeën÷ž=đū’ņ9ĩŠīwŨ‘Ô_ŽŌIü$ĩ4 }Yˆ_XZé÷qĀUc–Ņ‚•ÁØŠ Ņ4gŖØ"š "}™cמ99ŦDņF‘Ļhsjöz\ņÚÉzaœEVķ÷%†áߌÕÍGÄöēv§qcöKų¯R6Ë{rųRqÁīŽũ…wēcė–mhļ2i5ˆ`%|°ãåéךFĶtŖjl†›jmŧĀæ1” ëˇĪŊa^xÖÎÛ–:õ­´×pM"ÄŠČK;ŊAîx­[=bŌĨÕd3[Ā; ¸Ė-Š=Tķڋ1‹.›ĻŊĖë6lVfË)ˆ~ôõ%†>oƤļĶ4؃:XZ(xÂ?îTeGE”ČZ]6ÉĻpD‡ČO›'œņĪAQž‡¤ģà iVRCnKĮvÄĮ’@č;fŗ-|]Ū$šŌ?ŗo÷@ęĻčÄJAbX˙ úâ–ĮĮUŪŦļ-Á7!ŪŪPƒė8äp8ȧË4E=Mo|¨GŠéŅ4)K›%9ûËØu<žį•ÚŲj6šļž—vSy°L›„žžĮЏJãGŒôÛÍ.æî]?Skļi$2ZüŒm+ĪëĮĻs\ŪâH|&îÆŪôéWiˆŽ!1áY !7pv9îãMÆRZĄh™ėÜ!`CŒ˙Į§ĨXw "îĀįŌŧŸUņæŖ-Ũ¯ØôŨ9e’Ü]Ú¸g8'nÖUšé€qī]Į‡/õmG@ˇš×tķg~IW„)āãvŨúT¸J*ė.›4Ë,„1;›w°âœíÂĮž¸éLDŠŦXãšīęiØĀØ9 dšÅŊ å ‚#°âą"ģ{=ŗ ąKčļ"6bû|ĄÉéœv<×'â¯x’×Äk§iŗÛÚ+D$´CķvÄō„“ōŸĘˇ?á+ōüIŠÖŗĩĶ€Ī"¯îÕv’[wĻF+nYZ÷'F^ čM¨ ŗgŸ°GŋæáãĪLqUäđo†ūĀ–‘éȐ,žzĒ;Ļ gƒžŸr^$š[īC¤jš•ŪŸĻMkū‹-ŗ”Ye<ĮÛĻ>žĩĶŨęÖ~ĶôŊ>÷QfģxÄjæ"ŌKŽ3ž´Úi+2tš+ø3íÖ˙ؐųSH%‘˜e‡~ŧuކTS ¸āČÅqÚΊt;Ī ŨOö˅ˇRąK%ąd™?wƜŒsW/ŧ_Ĩh’[Ų^ŧ‰q$^dq”bH œ}â}2jydĘĐŌÔ´DšŊûmĨܖ— `ēŽäaîŌ–ÃCšE¯Ž/¤šŸfÁ•  uā ɡÖ4˙ík빊ÉįEmšļ˜ˇ—n¸ÎėÃSėū øv}/íË~c æĄFŨb@ōpiry{irōÜŅ>ĶßÄ?Û2ũąīĀpáUGđ… šÁÍÁz1–āũ–UŠwķfĩY™`‘ŗœ”Îlö>”˙øKt—Ôgą[ĩû\*Í$%YJ¨œ‘ŒT^Ô,îôQ%ĻŠ5ėIÚ%l‘ķFp2p=…Vģŗ"ÅΆ4ëíb LKu͸6Šé‘Uxʀ8ÁĀČĻMāí6yõŨīLڄ-É„:p ĮrpZéŪ9Ōõ=_RÔŽaˇKĮŽÖXæōÄ1GŒ67r}GJëlõũ:ōÄOo¨C5¤KĩįYA ˇŽOcõĻcāĢ ;û-Inoåšļ„B$–čüč9€n?Yŧ!muâ5֛UÕäcjm¸QIåÛ÷OĨ^ŕĿÎÚö.Uwã˜3…㝚Î9f뚅ĀÔtÍ=Div$ynNÍã ĒŒąaØôĪĀút'X&įP•5xĘ\E,Ų#ĮŨīšĄáŸ*ęēž‹}ĢĮz֒Ɛ\HƝ&õÎ͌AŽĄ5kA#A%Ō%Č$‹ØėqœãÔ;­3 ÚKeoo6­ĢáL¤Ü‚Û€NvđúÔĶxRŨFÎúæ˙PiŦ“ld\ãø˛6ķģŒįđ­‰īmŦÖ#yr‘X"PĖz(ĪSSÄû‡$ÔĻĻėgĄxzMZãÄ~}ĩÕŽƒĒ#ˇšb$,sšÂōTĀûUĢ?‡$éc­k÷ēĸDbļ‰ãąg…n2Y‡ĪNkcÄ~ :(ˇXãķd˜œ)Î1éõë[ũRx.Ŗžōl¤ōɊe`Ȥ‚9ôũiûMl_˛’‡;ØMÃ÷ē.šúwöä÷1Ö+fx#_ŗ€A˜ō:úSŧ5áeđååõĖzŨíĐŧ•§ž9Äa^Byq…ĄĮĩYŌī$ˇđíŦ—Z„ō":ö ĸ9'$`āz~z+ˆ/"ŽHĻGōcƒ’:āĶmŨ™ô2âđÜŅë—:ēkˇŸi¸‹ĘØb‹ËTËmĪĘNsžqÍfˇ= ßFíĐ´ˇšûRŸ&-ÁƒoP:ÉŽĨ.#Ty7Æ]‹túúRĨА,€Ŗ#(*AÎG­+ą#–ÔüI­ŲŪėˇŦw"âßĖŽFUÂČCcޏŦOi¤x*ßLĶ/5Oí‰'3@lËžvlš}ŧ;‰äņÅwŖ|’ģųl˂A ‡áŧcéĘ×ļˇéu䙗 ›Í 7A×ŋŊtÚ͕īŠ<y§\B4Û›ČŠˆ„‚B„Žâ=p3Z’9%Ā”…_™¸ã§øÖ¯ˆîæÕu‹3lįû9ÆĐ IšXāsŽ@Ī4)6;­ęÚ‡ôû­?ė'Mžîg3# <ĩĀ ´’w{Š‡û?\¸>.˜éxmZÜ&AT1üŪžĩÕ[\Mq Ήa/&@2¤Ž‡Į×ĩIŧūį,ũIč |Ė*×Ãúœ áI†”#—MR.ÉšRNSgœķķTSé y<^ŠĨÆŠĢÆ{•ōÉ8ÉäßĨw2Ü:ŪĒ@ām\f˜.‰įšČlŅÎ8ãĻęöxsRļĶ­Ž.-,~Ãsdԁ”ĘüčŨĘ÷õĨņ™Ģëvq/öE´WhŦđOîĮ˛|đK7)^N;ņŠė2ŌŦRĘW#æ 8?ÉĻ\\¨„ˇ98 8ôŖžÚ…ëA2ipÅ;,×ÂĢ3Ž7>9ūĩæ×:_ˆî´ tGIõY•ĸSuÚ¤ųģ^‚ŠmĨØŦs’šéÆ(ķYYĘŠ(ŖįúTŠXv9iaÕÛÅēV 4‰<‹[&†]ŗ§ßp ÆO@WÖuˇ‡5īøF:b-ũļ¨uā–UdI'a ‘Đ÷Āȝ@iˆ€‹sÁĀV]ZHī ´k;’˛îũú((F@cž3ۊjoaXæĩ Ũ_JÜxQ!„Ë71ŦÉ :•!G'k{Ãļú•ŋ‡l"Õ¤jG‰\ļI9=ĮSŒUô˜yˆ’ tr{ŌI”‘‡9'ŊC•Õ‹ĩŽR×IÖSÄÚā{;vąÔÜfí'ÃFĸ=€Į'§Ĩ'‡-üCŖÚĮ§]xvŌC`…ö)Đ (QÁ xę@Žž9vÅ–˙ ĢyŠŊ„hÉasw$“,eaLėø°ĒįoA[ŠÆG¤ø‘>MŖIĨ¯Ú]Už"ōÄą9ãėIĢú­žŠqĸiĄŗŖąˇģ‹÷NęĄ1šXĒ Ī=@ôŽŧ;#Elæ¨jē”zr@)'žâO"Ū€ds“ÔôIö¤¤īĸ;ļđV¨ˇāIúlļĐŦpN„H“7˜ĖAÁ+éȝTĐô™l´…ŽmJâúMĖí,įĮø@ėa“YzũũúŨĻŠĨ /.MĒDë uܤU¯õŨwIÔ0öd–ŦøFká ’ÆÉÚã†@Ā=ũ蓔‚ĘĮQ()÷~öÎ*\ÆY˜ō)Đ\Auj’ÄáԁĪĪĄĮzG cƒĀã°˙9Žy—„Ã÷€’zäûVUØûGîļĄäŧwëüŗ[ÍΧį\´ÚŒvWˇ&åĮ“æ€1ÉFÚGO ĨKâ. ÔŲãBžz‘V•yÜ8õ8ũ*ĨŽ%q‚8ÅX߅\°Ú[&Ĩ‰ōÎv(íÔsAd‰8ũ=ņJ8ߞŖ€*hp›g=;U™Ž…cĀuR03ķ/$úŌH?vw˜đ9ŠžBT„sŒ:‡q'qqÜõü)’#ˆÕŖLHp9ÚOŌ•š`8r:S>Đ^OŋČāq×Ū•Į HîO­vˇÜŒœ1īÎ*kûģ˙øHô;Ë}WtŠŅâ’SbNÖrGüįë^Œ đ0ų{&šÆ9 V=zŌį˛ĩ8ĩ¸ŧņÎą2é÷ūKÛ, ī +(rFOš= Sĩĩšįá]֕‹ íŧK4S۔2:¸-ˇģžæ+Ō+FGŒƒJŧL+IĪRi)ƒ<ō ą7 Õ•˙‘.Pഐ>nyãĄëíW>ģ[čRÛÜZŨA4WĘcšŨã%]Ų—ŽxĮJén¯-!ģĩĩ’å’IÜĒ €XŒĀĀŠÚ’t—Ëš=?Ĩž– 1ĶīVËÂ÷ßhwS 5Ļ•R{YUQdbVM¸ËģëéUÍØoĄŊŗžG™™âGątGĘB‘Ķļ3^¯pūZ ‘–.ēŌ­´ŨxL¸ž‘Ļ@‹nģŠĖ“ÁįÖÚˇŠ xáv%€^ ÷÷ŦŌ|÷:]XûKjyEžĨĻø2Öúd}ČĐߌü‹ _‘d# ÉĪā:ÖύžŌbđŪŖŖ‹H´øõͲN„Æä`Øn›rۏjôyė`šÜ[Īm°p|–ŒØéÆ)ĻÖ)-›Ų[ŊŠ$LchB1šß›Sžėķ(N‹4ŌԿŪxƒŦPJģ]VwŊˇø×Wā[o&†ŸØ“ÂæHâ{ŖģČbŖ†É8=xŽ™-,­Ŗ‘Ąŗˇx å#_œc9âÂÆYyVäō:RBmMë´ d”…™ATcšą¸\āsŨN9¨`G(ō°V@T6HõÆøĻhĩ]NĮÃPŦŋlœ}˛;„`ĸ ‡ƒū×qŠėå“Ëų؇œc'5Ėx‡ÂšoˆŽ!Ŋē{Č.íÕÜÚLct\ôĪãõ§¯vQÎčĻkÛŗáân´ÍmnëTš)Ā2ŒcĖ^0ÁøĮ'ëÆz…Ū•§ŪOgĢ´&ÅâÛ[ “9eĪ$3“ŒëÍ_—ĀÚ+Åfé-ü–ÅŠ^ÃrDīģŽæ9ŨŸ~ŠĀz$’^Ü]5ü‚ę4Ģ]¸ P¯ÁåžQĪĩUãq vGü,­•éˇ[3ØoŸįY^‡U“NÖį:ė¯'ÚŽĄˆ5ē7–Qļ†Ī§:s] ø[M“U˛Õ÷ßi´ŒGk§8NųNp ĪZ¯…ôÛGÔ>Í6Ąŧwi#Kƒąūķ(<Žeaœä÷ēåį‡üqgĢyw:ƒ'Ÿ!‰[Ėc? 00F8íZ‹q­'‹D“W%Ō<đËj€$Ęę…ņéß­\ø*Áô;+퉄‹-ŦĢ>$ˆ†ĮLÛŊM?†-/.,¯ŖÕ/āģ´„ÛųņN7I å”į‘úŅÍ9Ļëē…ׄ´…žę)õfú[uyaZÆŽŲ%G_•x÷aL…5+ īŗ_Įöčaâ¸H@1\ŠČĪë[ø'IƒK[Gŧŧ‘måûE´7Ī䜡c9> ĶOƒlä}BOíMTļĨĮrLÃį ģģԏæhæˆRßjéeá&ˇÔIĢ(7eā ŧ˜wĮ1ČúTqø—PŌ´īŽĄqÔÚDë3‚ 8\ĐĩmÉāí%SM {ŠĻÖŸé<§éÎJ¯‚­]V6ēž¸MP“uŌäôė@Įz9 •īĸņ=•ŽĨ´9F酝ŽröÍâ}fÚĪW†Ō+Xî!SjeˇI˙täũ*(5)õÍÁ:ĨĀXŧë+™Œ*¸@€PÜg ĸŨ4]sâ.ŗ×Ļ@- ‚4Žđ¨Ÿ†.§nĮZëŽŧ1mq­iúēŨ\ŖX&Ø-ŖÚą# 1ˇ<ņßĩ6ÔtūļÔáĄ×ŧewŊū‰fgą–åŅVHĐĢFKÜ9 “Ž8¯BÔ,4ũbĖ[ę6ą\AĀJģ€oQŪšoøW˙i’x´ũvōËKžS%Ŋ‚ĘI9`¤ž3ĪjíXDw*ƒ€0séYM¯˛TO<Õ¤Ņ~*Ũé`§›*}¯Nķ‰ ‡?ŧEcÁôí]ŨŒÖ÷–Q][ÉæC2 ņØō3čqX~/đĩ¯Š4“ ÛÔ`›YˆÎÃčŲ8ūĩā Û¨tcyĮqĻš´¸ąü a˙#늙ŲÛ¨á~kDĮ,N}ąé\ˆ-%ˇc}o ˜;4'  ~`Wc8V`ęĘĘFA^ãÖ˛QĶ|čI;d$įŪąĸũãYëJÍ6§$~ĩ4Ÿŧ}Ēr‘ÛÚ ˇR@ûØ•d…L¨‹ßƒR‚D˄O?JĒĀ9'T?)eP¸\äã‚~šŠ@ÜU°xč cĄ™kaÚ7į8É5äû@ôĪøRHᆘ/pM2,ghC´rI9ĻŲ"K™&įãŎŋJ›īqÆ:ƒˇĨ+œüÎxé)a°‘ô^¸Ą$;ī :w=Í"ĘČY3÷ē‘MY_`Įœäš†îõm,ÚMĨˆ8öÄ[,ųŲ˛Ãͧļ* ¸#¸ļd“ ŨČĀĪõ§ aÛÛ$úšF ēMœē)ĻKŪĮø^īÅ:ŧē€ŊÕaÚv đɡ˜((?ÂŊ~Ŋę{oS_ÚYŨ\Ø\Ãso+´pFHˇd+Ņ˙ŽJØŅŧ4›A˙ĩ¯§îī26ÕVfR3€2;įŌĸļđ%ĩŧēd‹ĢjLÚyŲ.Š yÎÂō2jį°HĖđ„Ū"žŧŊ¸Ô/í%ąŽúxL~InL´į}š­ęZޘtæĶ.,áķ¯cˇ›ĖM͇ldņŪ­ižN¯qw­~ÖĶM$æÍņå‡~šîyÉ/ˆŧ.Ū#[Mēœöq[Ęŗė†%$ȧ!ˇ˜Ēæ5úËŧÔuįņ­ĨXM`‰mf—Q´ąŗI# ‚IžĀt5Áú´š˙†Ŧĩ9ŖÛ4ˆC<Œãß)ŸđŠĖúîĄĒ.ĩr’]Ûũœ…0¸ã’ ÍZđļ˙Όļîk˜bbcķ#UÚ ä uü}i>^[!k{™>"ÖŧAcâÍ/IŌ ĶÄW‘Ęčķŗd˛ŽHlr1‘Ķ­e\xĶW _ß}žÎCMŊ[k´}Å0X.ä#žKŊŗWŧ]ÅįÄ ZÚ]ĩ”Å.[ÍEVeųW‚§Œb§Ô<.|96•o¨4-qqö‹ģ‰`ķgČ`z€9Įnƒ^ęJā™VįVņ&—¨ijƒJu=@DŪKHH]šqŲXgœU‹¯x•.uØaĶtųMTģÎØ1•-éË`ccŪ­_øSRÔeŌ'Ÿ\‡Î͈ą˙­—‘’7p6ž”ߝzåuhTë\5Ÿ Š?e89ë×ڕ㸠{ã.t=m:Ņ%ŋÖ404ģUp옺z §yŦkvōi Ši6>mÕđļbfŪ‘üރäî1K'€5ôÍZëĮ¨hÁ–ŪskˆŪ2Ú˸į§\ūíGÃēĖÖē|˛ęörKcsöÉKfÚÍÎ@a„‘ëG¸j#Õė¯u{[m"9˙ŗÕ“íZ@Á˜•OaŌ‹ĩÎŊáôN‚H58X/$Á’“,€céÜ į´”Ôõßxšu­VH I3n\TŒ§#náÎk¤˙„böÛVŅgĶ^Ę+1<¨ã™œģ+­Đc8sÍ?u[ 'n-BōÃH’ķNĶåxîeĒ>SīL|Ā{‘ŪēÍ3QˇÕtËkëW/ĖbD|mÂ˙C\Rø_[Ķ`ÖtÍ6[4íNY%™˜Kaø Cãˇ"ˇZÆ×Ã~ [ÔãĶÚŲa[É@ųO¯<NxĄ¨ôiÅ~'ĩûTw˜K2¸``āķøWŸ[jķę8‚ŪMüÃzķCqæ•ˇžØ QAÚė#Öˇ<'Κā(cŧ,r˛¨•# H$…“¤sXpø7ÄWŪˇđū­ũ …ĸíŠōÍ1۝…A)é“œĶŠIę+~ƒ­jzŧŗ4ÖĐéČÍ+9spTãrŽŅōõäžŨë&o›{mRî]üÃĻ\˜'+ŗä šôį íWŧ(ž"˛ļ[mj[x|¸Ļ‚fbØā|Ĩ@QCøVø_Äsé~*ŗŲĻŖkQūŌÄ&ėÉŲĪ~tY_P:‰Įkö›ũEį¸cC |“ˇ“Æ1īJŅŽKņT7šûhŌXŨÛN°ųņųëĈN2'úŅoã(¯ī„iš”ļrJĐ ØáĖ;‡^ųۑØÅgYoŲj¯ œĸÄÚI‰É|’‘ōãƒĮ^jo i^!Ņ-mô{ˆlä˛ļ‘üģՔīxÉ,Íŋ{'Žhv° ņ§ˆît[=,ēĩŗgoĩÍŠ’5ÚB• Ÿâ#>Âŗl|}ŠŲhļ˙KŧÔīįgHL€Ī‚JˇĻÜe€ÆsŌ­ëqkēo‹ŸT‡EMjĘîËė­ nŠĐrIÎîĒÜfąôë_øGZ–âßÃßÚV÷6˙čđÛ́bIɈč™Á$O=ŠōĢX.zŠ–HI#hŨ€-”8äqíOg$2ķČĀįŋĩÆÆä•|š Č§v:gŋ֖E`ŪgĘ6đ+;\Eį´2Gģt ã§ĐÖ"ø¯GmQ´•Ôā7ī&Áz‘ÔgĻz÷­­F+‰­.RÜ;BÂ"Āãq~ĩæ_õØmll<3yĨ\6¯itâ@ĐnŲ’xXũÜŒūTÔoŠW;›íI†ôڝ^Î;뀐´Ŗvî¸#=˙­HúÍ­˛GíĖ×#;Ã$ QŒŸĻN+ÎEÜ)ā=SÃ:…œÍâ%•&&/<Ŧä¤Ēq‚:öļ&žøzÛTˆM<[Aq+@YZR€N0~ëÆĢ‘įEâEcውRÂâ)‹ ŠÚE`D’ą ¸õĮ^=*ŦZUŽĒBmjtšû1YĄēģ%fB āŽ×<öƒáÆŖer<’ęÍ-´+m&JųĘ˙(ÛĶh?…tĻĨĻ[øöÎūu2GsĨƟ-ģ9cæŽ2˜Īb:wíØW7uģ›qšÃ\ŠÅU8Â0ēøOC‘ČĢ—ZƟbë×q[Ģ¨ĶH?8ĀÉæŧīR†@đÜ›,S&°.cFPZŪÛ{2sīVΊĄ[xĮ\‹ÄļŠu5Ī”t˙28K _ģ7_zN7AsŽŽæ#Ģęĩˆ^$€ŗÂƒ\ČH9įŪŦhúΝĒYÅ$pĪ#(vD}ĖŖ8É1\}žŖ¤Í㟤^LĨ´ÔˆEH‚Bč8Á `Tü'⏠xĀđ^Ãjdš†(až6ÖÛd26pŦÄ āƒŪ›€ĪJfS)Ē}9üĢQÖ¯lom­ĶO_ßČĄ$2 7vÄ ÖĐšGT—!Q”q†?QXzÉIõ!ReGVwĪņ/ËĮ¯˙^°›˛6 ”ĨĒ-ZjŅŨÍ{‰ažEÜŽ1ëS†Û #äéTôω%ēļ—o-šŲ‡úĐrøV~“ ŧH/Ūė¤Ë3y‘‘‚HØ~oéK›BåI]Ŋ‘ŅIaLäąn\ôĪ~ĩˆŽ(@r[Šå_&Î{¨îį[¸īĖQ “!ˆ|rŊ˙úÕbîÔęÚÕۍHÛ´*G´ãÎîŖ=és•õ~ėŪ˛eH>bŗĐÜÕ[ޟíRΊd`¸0*;ûsšĨieoqâ+ɒęDUâ8ä>A8úpįTncQáMM#gDkŠ#WüaG^´š†Štô:„ib™WxbFIÎ~”õ܈ŒÍķÉŽúÕĪ]ZE§OŖ¤7WRše”´ÅŒŸ!āöė8ĒsF°xÄmæM˛9”d’Q€ íž?|ŪBT/×úŊŽŊĻ}Ŧą•%qīKąÖe wv>•SG°[[_8žKˆĐȡBöŦŊcO’Oi°ļĄw 2G!döãhė}ķCz\˜ĶN\ˇ7T†Y[<äŒg€=*pDŖvÜō}ÍrsKq‹ˇÛĖqÜŪ4 x~đ×=:‚3éWŦmgĶõ¸tčī'¸í™œĖûdqœŌįĄnĨr4ëMGíļ:Š@ŗų&ébT“ĖfÚHãžIÍu2!‘…HæĮ?•qfÕÛÃqē ęd†Ļ3Wõ5KDi–w ÛĀ –I>w-ŸEįõĪvk:1nÉÛsĻļ XV‰8Ļ0<žœŠÆ‡Äšvœ‰e;O$Ņád—É!Kt$~5¸ļōâŸ5ÎyBPÜŦę#!‹{ãĩWDVId Ēî@o—–?ARĘųdNw/Sšz HĀí×=jdô™bOŗ\”~c$ô<’+!îLw+FJŗuįüâĩõ8 +lųHÁ î+ $žĩ7p¯˜ŽÜĮŨO?j)|GGģmNž 7'Ū>€cŠųr\uā¸ĒÖi•czãŽ*ŌĮļV;Afā’yÅ0‘2ļCž ÅK’~÷ü51^¨7t늚 Ę Ú;ÖĻlw͆,[•zą§FŒą•p°įŸÎ‚ģrI@É9éÍ.Ė‚ĮĻA昆3,$•ĮĄÍFļ.ŅķŨ Ep$e"3‚~īSš[c"D‡/ė:~57ÖÅ[K–ĄŽ@ °ČōE6dŽâŽ`Y\aR§L2÷īN$†(×ĩY!RWå×ˇZ‚âc -"Ä͖3R*˛”IíœU{Á'“•â9Ķ-RŨm#wxb…đ#Ä\ūōū”œQ†ęÖäo†upFė+G¯Ōžˇ–ĻäZ}ĸ?ōƒøõÆsŠō¯ÃĻOĒøNīÃņŦwžAūŌ0G–#IÎ.?ƒÃ0h2ŨAq¨ęīm­[ßģĪo $i˛Aįnō„cŒŸÂŸ"ÜîûCđĨöšĄ=Ĩŧڌ˛|ޞÅĶāØúWH]X~ņ‚Æ8ī^gāČ´2ˇwĮ’éW÷ME1fXw0Py\1íÍvŠŽÚę~ŸV͎]Dąš)˛ • ō LĸĀÍoéī­ũ š0ŋ°ĩč@"œá9í×kŖ3CöKûŪģG'ĩâöˇ‘Ú‹Įqg{ŠO+IqĻė'ĻčÔgĒ2IėMvū ‹DyöP@÷÷PŠnâŒm풃œ€š=jĨ•ΗKģÔ.u=R ˇ˛h •D- RšũāčĻ+Bî&žÚHûIō‘ėkÎ,`ļHū!ˆg4r$ÍšJÄO œā7éÅ0ģéšŋ‚5Ô.e’ū1Ō}¤´NžXčŊÍč:Ōå¸ÎŽĪšNƒ;^éđ:JɉĪ!Ü  ļ0?JĖĶouír M[LžÂ-3í%|ŠĐ–x_?Ū88G5ŌkQ­Æ‰yoļ@ Š}Å8#žzŠķ/Qš‹Á Ķĸž;;{ĩ•f™™†æ\íLŠdžÄ)Å]\.z›]Ɛ’`˙áŽĀTwöW+˛ę(fBAÛ( 29ž3^krˇēUŽ“áëÍqåKËæ\Œ‡…†$°$ô''ššĒX6‹†–:åüéũˇrĢÜî`‚coQĀ8>´šu;ŨJw´Ōî.má[‰ĸˆēCŋ`rLž•OÃ:œē÷…ėu+˜’).ĸķ Drv&ĐK;ØŨÍTø}yuĒø&ÚmFC$Ģ$Н)˲!K{đ*Šq ?Å}āÜ3ÆÚ}Á !R0>_BsI-u ĐFĩöyW[{'š˛ŖZ Są ô5ĻE ŒŒ€95ĀxNoë˙f×X‚+GģfžÕeÜĸ,ãË+ŗ‡œîĢ Ƨ⸠ņ:ôÖ0Įvč,R5hŒJÅvžûÎÉ鞔8õØ5žÉ#$8V<‚Ø ß>æ¨Kâ‹ÅņhĘeßhnEË2…`“Ô÷ĮJâīu­r? jW‡Yē[ĢMeícp‘üņų¨˜o—œŨ;×GzŠŸ4÷ΘɪĖy<˙ŦOOŠŖ–ÚŌä –$ō6ŒņBũDĪj¯>6Šc~{Sí5ëk‹ŊÁXrŪŧ’sĀĪSôÍC>­jtI.‘$+”rAVVĪ Žĸ•Ŗb¤ę9]\EĶ,bÔÛ[Ŗ\IÛÆ}*ÃézOŲĨĩōSeÁPë‚ĮOĄĒĢÛ§úYfKgR1–ög?JSŠÚOĻĘá›t#÷§i%RHÆsj=ÖOī<ÉĻŅ4“e“['”¯Ŋą7÷˛i-ŧ1¤Æ.‰€Lˇ/—’p}ŽxĒ—zĻyķ$Ël3,@ŠÜyÁ>ũëBĘīíÖĮŊ”/‘¸[lā`ƒģ~=Į´šŧKsJÎ ]6Õmm÷¤j>U,[ŽũyŽ[ZŧĶ/ŌIZå<+a‘%‡›pņ|ōe•ĪëÍE?†m.¸77(öČ&Y0ėŊH'Ŋk3’ā„ œúÔ 2L“°G;TmÁÎ8¤â†ĢOšZ—a B+X‰‰Žūfõ$ž¤úԆs?–8ˇ$ũ-´s>5¸Ü& ķû˙õę"2p‡8īëPÁĘRŨܒ‹,̰÷T˛KÁÁZ‰ yx)¸ƒ~ĩeFōŠĪQS FmÔ˛RÄo “ũ+”đ¸Æ„š<ũĸaøyŠėīGîp2Zá4uhôh'`|Ųˇ߯Šés[s+}ŗ1ŧîaŌŦD#VĢtĪ&ĢÛ̈ļǃ¸˙“W#f۟‘}*bDˇ&GPÎŽãŸaRĘaö¨…CĀä䐚'Ļ*e@UU˜yĮL֨͏+Æ>fnËÛęiø. î tāv™ 㞝3HŠ…ÜN:ļqLD ßjÍ‹°ÆOáR…^vœ’zņ˙×Ļ4˜˜.A=*D2ęˤ𸍠$’äã &܌dôĨ Œ’v’NÆFōš 0Ÿ˜{gõĒ#QĐíį8ĨgųN?Ũ+DŒB`0<ņĐTSČvd“ˇ$w8 DGŪY‰8ÆMfę:î“Ļų‚ōöŪĢšÖYü}:šä4¯øŸTņí‘Ņm„ˇ Ĩn>hG9<ũėŽzvĒRęv6ļW^%ĩ{Ŗ~ĐĖī0‘ÕƒÃ+2œ öÅjŠģęē=b: ŽO öĮQY>#†wđũėm—Ú.ŽchІHČ܌7đqWˇIļ2\žy˙*흸ˆÚø‚ŨQ[VŌZ+#Ķ–p ņØ&N=č„\˜™ÜxYnŦ<5§Û^Ú5ŊÄ,NĨ”䁌åIũkNH-$”\ĩ”/60%ō†ė}qšČÕŧ@ē>•ĻŅ=Ô2I'Ā“ĶĨT“ÆōKqsa¨ĩōÆ&Ž,!ķc'˛ÔŅi=@čEĸElãK[[K‚›REˇ_N2?n¤Á Ø›(îyî${™¤p‘Øüėč2@Ŧ+īYŪø5uhæēĩŠå HcŒyĘį#jŒã ƒĪN3Px*ãFžîéŦ$ÔfŋˇUŠWÔ. ä)žBŽ NÎځÔŲxkBĶĩ /­4ËHne$4‰É¨™īŠu‡‡´M&æK‹-6ÚԔ!ŒQ :ãéžk•ø…¨Ũ(i–ˇËgyr¯"?™ąļÄģČ#Ģøš¸÷ËâO…ō^Īĩ…ΚÍ&N>p‡?“/éNÍĢ“ŠĻ4_ ”Ü,t´ˇģP2° Y†r‹*ÉđׇŪ!&‹a叏6˄į?/§<כIkī†ž•L”ģļD/ž…rĀū+úWs}ãm?M–XîÖc,SN‹˜âfÆsžã 8¤Ķč7¯mŦĩ{IlŽaŽhAxÜg+ū—?„ôt¯ė™t›T˛ķ|á &ߛûÜAŽsA´K‰Ū%hŖžÚŨØī<3äœd÷ĀŽ‹^ņčÚū°đī6‘!îÜ?GįCŅŲđ_‡_AQŌ-ÚĖËæ•ËģŗnÎsz|ž đũƐš[ię–I ‘bBĘCŽ¸įß5åžņO‰ŧgâsk.ĩ-œqEįˆā…6Ŧŋ/Ž$rO5íŪ`2o ( Aįō§$āėŪĸLį"ø}á¸/f-î˛Æ#“rŽå ģ'§'ëIqđûÃ2Ceösų6LÆˇÆėdœp8Ĩ‹Sŋ˛ŊōõÁ€^EiPIŸĘŦę÷WžuОšHâĸ nNAúžÕŸĩ6ö2ēWÜ~‰áÂé´ÛUnArü ā įdđ=iŗø?Iēņ ė‚á¯"Ę"vTO\.@į¸īZŠu )ûÂŖĶĖ8Īš¨Žo ´&Iœ*’ÜN Whūę œį&>îæ[ÛË{̐ËnWiE)¸‘œc>ôË+^]AŒĐÅž*N[‘ĶŠūǟirŨ&›Ôĸū˛3\ÛĮ}~šUÜĻk>6Qą 7=Ā"ēĸiFvŌí@<*xˇaŠš™ā߀¨%I$dŸÂ™jķ1gåöđ=3TäĖėj) ˛HÂņڛŧ(žHæĸMĖäsqI¸Ÿ˜ōI?ČQ¸‰ Âí,2FãÎEsĩøJåš]=ŧ†Œ@ȸ#q;ŗœôíŠč$–DF1 lŽƒ­Vß32(Į9ūŋ•Lĸ™Ĩ9ōßMĖci¨_ÜęĐ\XĩĩĩâádķTœĶ×" Bō >ŌįO6 Ĩ—z°!sÂcžqÜ ÔbÁĨ*ã§$ķĪ֑@Ûcķ1ÎsĮJŽUÔĶÛˇĐŠcöõÕŽ&¸˛Xá”cwšqČ÷â›ĒI2kZi†!4‚9~LíãŽsÛĨZģÔa†vļiLŗí,b„n`?•n§TÔŌîĪPō¤ōZ#ŊTãŠ'ž)Y-Qģ|ŌVV,-ļĨeb˛Cn“ŪÍtf™PĩI<)l ãķǤjņčú•ģéŽĪ$ĨŅĊÛķĪÍͧ­oėiüĨ“ ŊH“MģFŲägąéÍ>A*īĒ2ĩQquĻÚÉ6Ÿ|’¨ßû‚HœtāqƒRÜ=ęč Ō[Ë%ôąĘ$“éīZR3yß#6 ãŋ4‘ũŲ$ÜÁ€juĐ^×Euŗ9Tšų|?glšeÁ–ļ(eķƒ˙꭛RīŽÜą˛šŠ7€ vi#'ąĪzn…w§‰īėĘ5Ŗhƒ}ĶÃg hF$•r¤`ŪŨ˛(äļ…JĩúŨŗjP[iĐ6™t~Į>%ā1v äô9Í[´Íu­[ €e…„.q†6ņõ=+eŽP sļÕ`1ŠĢmuö™e’6Ü)’¤`ƒƒG {kô2åžēM>ÕâĶîĸeÁ‹s(ۂČâ2k63{˙ũü7WNÂa6æ88Āę@ŊkcLÕoŽ-5 ĩ=>K5ļ‘Đ&|Ã"€qß=9íVĄŧŽCĮVRPFīųŌäe*ét35+—ŠMV1Ü,1ģ™bd;“pĀãĩB÷Ë­Š­ŊĮ—s†XÉw8Æâ¸Î2{úUÕĮ& /xpÄU×Đ¯]xˇTˇņhĐF‘o-ԊŌÅ/Û~S'¤‚qĶųրņ,ĐępiZ͋X\\mæI<Če#džØė@­×=î+Ŗ:{­J/iZ|p\ aˇZĸ BÁrwUÉāMÕfŌ5øoaĶåģÔågGVbĢšvā’š@ÅuĒąđČážÚÅYĻŨĘŲŋČRįkT#ĪŽ<3âiŧkĄČšLŗA$_ž3ēīHŲJŒ”āü¸5ĻēĩYŽÚČÛĩ€ĩō–åˇlō3‘úûWTæK¸Ę­2 (õÍC}Š\ÛĪf–V&ęf)3,Ę<…ĮŪÁûÜöŖąœ^Öm|i§ ˇƒWąŊ7–˙ž.ŽrĮ vŖĐÂū(–Ō)†™aksᯭÎdĖ|īl€9é[Å %Åvädô?L’6ÔS"䎤õ÷ų¯¸ŽIt{ŊKŎ÷ēž‡o=—Ų„V‚YSrxÆˇöĀŦŊGņ‘āÍ_E›J,Ō™~Æ‘ÜÆBŦŖI$cnI÷í^Š'€Ô$ã$VŊâĸĪbŖÜĮyt–Ūbʨą3GSÜđ;SįoD ™ŌüIũ‘á8?ás6—ÅsÚĒ7Úqģ†p§ž;֔ށ:ātŖŠįöõŋ‹|HiōË ÕZvŗLÄUļ†Ë^ØÎæ#ŧˇ™’~N9ëÁ&ĸSæęZS$¤ŗG™>|Ģa3ĪŽkFūm F¸Š ž yõöxŖX‰ir@*:ņȨ`_ŽŽÚuŧvŋÚą 4)Ī>š#ƒÍ% íá¯õĐąŠÜČnl,ü׊ —tL7€lįôŦ›OˇYOĢ}ŽiX¡\Iģjãv0{ÖŪŦ!]?Íēļy_9`ûY}NėŖÔ×7á›ëß^BˇdÃ#‚#‰˜ŦG#s ŸZ&™TeMz֙7Û´¸n6™# Á=Õ+īОxpM,ģMĄBĒ`*N‚˜Ŧdā;‡Lֈâ“ģm ĘĮ÷hŠ9Į_å@DāāžÜ~4Ų“vyB1°EDŗ‡ųpT¨Éž)‹qûaĮÉØõÚ1üŠ$ĩ i$Ą )!œōOųÅ":…PŒB‘‚:Ô­1g*ã'Ļ*Z¸ĶĩŽoÁņE&—rHV˜ÎK‘€XA>ŊčÖ,PkÚaļTĶnŽP§“CĶĶ5jm-īžķK¸k9œ5BnG'OJËûuū‘v×Z…Ģ\į…ēI*?ģŽÃÜâŗz+3š>yšÁīĐâ#ˇē_‡Ú҃SÔ|û-]⎔Ũ2ļĐč€yãĩĶĪîq8J;Ŗ‡¸ÔõKŸę/5ü­u§ęĸŅn ö˜„Џb:ũãœvē]> ģ_^č˛jˇW6ŗéët†r ÷”;F0;b´î|' ^h°isڕ˛ļųŌ4™Ķžäí#'žNM"xCRkČ­Ĩ[Ųâ0ųâęRåĮRØéŽ}yëCš…ĸ]ŨKá+i'× K%ôļū{ŽųeQ#(XĮMÄ(ĮéXķ]^ĮđëÄwK¨ßĮqgzņÃ<Įl Ÿ+‘ĶŠÖÃá -…Ē[ÜyQÎ'XÚîSåžʝŲÉÎ4Kā˙ ÉÜdūEÔĸIc*ŗ ķÃtî}OZ9âĩ \į–ÆūÚékâL[ę ;’ÁŒNGɑōƒŸJŲđ\×7š%Üw73É47ĶĀ'œîfUlŠŊ˙î—Ŗozŋi[›x„QĘ÷rƒ–į>ūƒŌ+BŗŌ­n ´’é šb[u˖ÉÎYXœŠ9ę9Ĩ)φ•ŽNKŊN?x†á5k“wĨ$FęLe‘]P ãŽãÕ¨4׋ƗVĒj7øĶžC#Ë˙ÅØíČúUoYiđĨŪ™n’F5 ė3I+J|Å,Ø$ķŽO­u–6:lZ[Ei)kr ¤‚ęFIįĄĮ4ܒų…ŽOÃŪ}ž‘ā¨ãšé!—w™ >BQÛ-ÜķŽø¨uØŽ_Þ,š]B÷íWģí„wD”ĸ8Æįc¨|cœÎ))ĢÜ9O@ ŧŽæūâûû%!Š=•É g1<<ŠĖ9ŽĪÄwO…õFÕĖ“[ZģÄÁsÎ8>ū´čŧ;ĄĢĮ"XBĄ6 ļÆÚ~RW8bBA5§$ŽĖŅ”C SëøwĨͰ/‡4mJ+)58ŧO$öז Uˇ™ ”€ÛĀ|€FcĘąĄļKŋø3ywŸ*ÄL2 ˜ß‘އ'ô5ØXø'Ãņ‹Ŗ‘ IpĨ\¤Ž:õĮ?/ž1Vâđļ†t”ĶŸOŽKkwß3šØÃ€U‰ČëØŅíĮcZ &ŠÎ>Õ9Åå‰÷HxÆō}}ëĘ­-/›ÂÕã×uTģ¸Õ…ģˇÚ2ģ^fRJž āuĪŌŊOû>Ļ1ĨŗGå•V#åÆ1‘ĪãÖ¨ÅāĨ´:pŌãkÜʑ™\•“xsŸÖ”%mÄ҃ŖÃyŖxŖÄö'[š!°ŠáfÔß)ļūN8 ĀāzV‰q=ŋŠî]~ū÷M})¯.ŪhË~væÆq×jôcáKëۖ´--ÜŪã39Y#=ˆ'ÛŌ˛lü#Ąéڍü6$–ęDrĩԌHΞ݁āUsĢ;ˆfã­YÖ?°´Åž“Ë„=ĸ*¸Ŗn!‡ÔŽk§ŒÎ]˜…!>‡ļ* `ķŨg`ļ9ÅHX*š9<äã5“×TY „Jão$ÃõĢņ˙Ģ\õĒ^v" ^äÕ¸›!õÚĖ8%ĖĒ–üÆļö‘Đž[wĨŊ˙ˆu;Ëæ×Ķ뚁 ˜’3„n †œƒUĩ;š—Ã.•u;ī2ĮQa°1Œ `ũŪO+´ŸĀŪžÖN¯saģûĂBģėšÁ?Z5OčZ´÷—Ų¸šņ@šHœ¯BGlđ9Ēįˆ’9ŨR6WqŪ\]ÜËŖĨœHōØ\Ÿ6Ōf90ãpnNkSÄSLē÷†äŠūæžđE,qŠ"í-ĪrxĢW?tK›ëyŲ&ŖŠ$kxåÛĸĩŸođŌætĶ#¸ņÔÃObbcųSåŽOaŽsքâ-Jš&ąĒϝŦI¨jŅ6›ks:ŧ~Co)`á8‘œõüjyžōŧAö¯Ękq3eą‹Ëôaķ=ž”“ˆkbõ›û [ÂÚmĨ­ˆļÔâ퉎ŒŠ‰UC69é“^ˆ˛œā¸lOLķxŧâ{mwÃ÷§Yŗž=:„ÆWä'BÎTu'­uĐõ=&Ūõĩ-bmBk‹†”F§°?áJIn„ZŋÖDrĨŒjōŨH¤ˆâĮԞÕRîéuą´¸û\_hÕAØÄ¨<­VŧŗÔíüIũĨcrÅ,b'ŽGÚTį¯?AëR_Ûß%۟|-VæX÷$¨’… HāŒūU‹nîį\akLˇŖ\ZÉÉgo,A$ÄĸEÁ-ŠĪĨyoˆßčrɧ}Žęāš}í‚ ,N>öG§AZŅj×f5×,ŨĪķqá܄'ûZ"„qŒ†ũ;Õuš _ëws,amtØ^cˇ;†÷9÷ (¨nŧ=âûÛm%$ÔtŸ;N™&ė|I°ar=ÁlĶâđūŗy­jWwícöFÔÚHą—2*Øa‘Ô–9‡­V‹K‘ŠcJņuÎĨ¨Gi>‹<0Ū@ŌŖ˛ģû¯šB‚GĄ"ŖøWAāˆöÄúLä7÷†ō8Įl*-;LņŽk^iˇ"Î#ž7+ĪÆHO Žš<­UĐ´/øwF´°´žĀ¯ “‚ûĖ‘pp2ŧr8öĄōÚ× oĄčĄÎąŗĪŸ Ĩōö¨_™ŋsLŗÜZ¤ˇųnËšĸ'$J˜Č7[ĩf'tėW¸Gķ<´C×s1<×ŖøĒÚû\šHôŊ\ŧōĖO’ŠķnÁ¯|rkēŸ”Åy#Ļ9b{Wáũ'TaâK{Í2kÕ&’d˜O”ہpBą9&Š%mAôßi:ĨļŸ‹”{Åf´’HņÁIåNsØã Væĸˇ0X]Mh‚IÖ608RÁxĪļ@ŽW°ę:ŲtÛ˙ Coqf‚6ÔˇGąÕFĐĘGÎIqøÕ[ũSZņo¯ãŠÎ!g¨y3ÛÛ͘îR6‘OŖ_J|š„ŧCĒ^Áu¨]ÜÉ}i§r‹lŠäN1¯MØPkĨô7ē$š‚ŲŪ[Y•ķጪ”Ā;•FOOäkŒŋļžŊēū×Ōü/¨XAÆˇēsíˆę ģ A×o¯|âģxuiīôYīEŋ‚l˛-¤¨Ģ#1€[äõ=ŠĘ=‡sœ˛Öŧ1Ĩø~Æđ´ŌŲÜ ¤÷Q™&˜î ōFqœõíVnņ<ÖŨHĘÎŌĶd v^ÛkŋW—ėÉrc‘$(Ä@,ŧ}Ü×ņ¯?û.§yáŋĀÚؓR¸–[páA*Ā(ĪÍÁrsD6hMfÅ>VuŠŌUx÷™X¸ ×$ķŠÕļņF‘o¤ĩđžY"3´DŽ8倿ŗĨ:•ÖģáÛ¸ôkĩ†Ö VāģF<˛ę8ÆN3Į­d\Ųjͤęö ŖŪČÍĢ‹¤’_.hÚU~2Āįč1É̞z0ØęŧYĒhÖē}ÅŊåÁŧM”X°gwË÷FqÉĀĢ~hbđv‹#Éķ‹(˜‡|•¯ãúÖ ‹RĩÕŭŌno"Õ-SĘ c-,eLoķtÉÎFFMkčo¨iūˇû'eíĸÆļ÷3*ī* rÃ!yĪ_J–´˛SŖLMū­ˇ++ƒŌ]=-ĪŲēh‡œˆäāqÆxĄIË@•5Jíęimۍ˞ä.94Ų¤ˇ‡ægQą9f=Ŋs—[Ĩö˛.Āđí÷ö’BúœöĨÕ ¸ĀÎڀiK}ĖsÎūŲüÅR‘>Å]kš¸¸–2A ÉێW­KTQ2́…bšv6öúm•œÎ-ŽfU¸’)ŗƒ€6į?(čžEĘüģļō:r+VËūA6¯$ŲvrHÁ9ŸÖšmąNšŒS,´]‹š\đFzÔsĖb‰¤DgÂį 9 vŦ‹ÆÔcC,WÃĘuYC&ņ‘÷šųzö§\ũĸįT¸ļļōQāEy$—'$ō{zĶæ@Šė˚eúęš|WIÆäá$ ‚FxŠe—Ë囿ėŲĀäÖV‡˜t0dÉÚŲ1Î*´Ú…īöDz§— ĩ,’‰6g˛O^øÅ Z ŌŧڎĮDU€$ đ­Ô՘â=NŨÆšPļĄ|ËmgĮŲĄRŒã?{Ÿ^úâŦÉ=åŗÚÛÂŅÚą„079`íÎSvp;{Ōįdô:(ØûÃ:ū†–%,ÎÜ0^›F3ŸéI‹,šA¯‡“kdnã#ųÔĄDkāzu5HÁčT¤ ØÉUÁ<Ö>ŖâOėíJÆĘc?Ú'HEuÛ1ãw9Ŋ?ŋĢĪ™ĨÜę—b}ž&y6õ`úÕÁ7Û/Ī„ĩ–h#ļŋŋBaNå —ąęx9øÚ ËÁĀ ØŽ3^ks¨jڗ‡<=­ŨŪDjÁ5ŧq2;än ¸ŒesŒWĨ}ˆ’Ŧ]°ĘΝ'4IXÍøĢGÕĩi´÷ĩ잎ŠÎå.TLŒåsÔ9Ĩ‡ÅO{ukĻ™ywm3˜NĄfāsÆr9äņZÚĖrĻ™rДGX[jK§ŽsŽzfŧīAöŌŅnē„öđbōĘŦO^ۏ>•KT3Ō Č"hāõüh„9,ÎĒ9럆÷Xms\°‘íĖv6¨öėą˛ŧ1ÎOaŽ+#GÖõ˜ÃŗKök‹]U ŪlGaläœK•°šĶęÚĸč–7ZÄ34.įXcÜĀw?LU˜n乊)Ō2"‘C€Ü‘‘ø×!âŊZ˙Qđ߈N›ÂÕ$ļæ'|ˇį(GnqĪ^jöˇŠjzn™ēÉm!‚ 1'›xÄųŒ â4ƒ’äúŌåĐw:GnWj.HëĮ9¤ $jĒąvŸoō+›“Wŋ›Rđú[x“Q´’GG…‹G @øČ‡ÕRĶÄ:Įö4’´–÷ĮT{6!UāíÜAlärqŸlŌäcšÛ.ī1ƒÄXXî”ĒėJáæÎ=Ž*ûQņ=ž,ĸŪûd ˛ -$nÁNUY€`HīëWī^ŗÕtkĢË9ä— #EnØTTܸËv=}iōvΖIKÎcÛĩzÉĢQȉ$%‹~•Ā?ˆ5¨ŧ/âæžÕŽtÛˇ† ;C"mĪ˓É,qÍj隆¯‹EŊ{Y žÍî­ŲŖ.ž~öhäas¨ ‘•Ģînœežĩ[PĶŦĩ{i-/ŪŲČg\Ą`ųIR ę sŪ š×ī|ûĢíBÖæ=Ä*‹V%$Úlão Weŗ €Ā–-ßÚĨûŽ×ŅHĮ ĨŦ+mnĢąbvĒj”É’|/ņ•ČŪŪk—?ūČąģŗ´‰tķtžmš““&Ķģæ>œūu•kâĪIáŨ3_“û9ā–øZ\ZŦ-™3/•š[wō*ų[ŅčĻâ6ž(ļ7p =ęĀē„#2nm¤ĮĨq~.×5Ū_š}ĩĩŒ@ šmīxIUPFĖzķĪlTēžą­/ˆ­tM>[Ë)nb{ėDŠW†ÛÛ ÛúRåmę<äUn„‚7@jĨÖ§m y.FO$ã3×é\UīŠõ–øs̈lĸž´ŧkIūRŅļ%Jōę5.§Ģëļū3}2 kK¸aŗ7›U Čæ 79%€ūÕ<Œ¤ŅØ˜ĘŽ>ī9cږ517#ę}Myį„ŧQâ={Tĩ•Ž´ilXÜÛG”ž÷ƒß{ŒôŽûįvĪ#=sŌĸqåŅ”›cāåĀéŽĩxĒ€ ävĒP# ߯Ē{n gņŦžÃšFõ€‹úŸjį­‰ūΕyâúLū@˙Zč5ÁÆyā×.K:écmŒ/؂Gũ3^Õ0~ņĒW‰¯î@qÁįŊX…8X°čGjŠlā’ÄŒbŦÂĮf Ž#žE(ŠDĻO-K ’ Āí‘R h×i ÍŲēŠ…AŖžZŸįe!aäô'd dIŒŽû¤ ㎠p8á7žŲÍC°ppĢĐ9ŠmxB8ÎÉĻ’@õ ŒŸ)8_CH’N—Nß-—ˇ?äŌC Ø7Ŧz†§˛9'AęiĸIšaœ“ž(ōÃpō cJjŠV,_Œ vd-‘Œ!T!¯ĄÜ„îÚâÖŲžâéAX7ņČįŸj”Ķ:jRiŽSt‡ ĖŠ×héÅ",F|‚Ł Ž+Zo1ĸžŲ ž…|ÁKãJžbõl>×.›ōŧjbŲ s#ˇđŒtõWFN”ŅŌX ÎæęN9ü*˞´B ÖėyÚ>īÔwŦ}_˰ŧģž&Ií˜,ųĄŽOAž˜9­:ō{ĩ‘ä´6Ž mÃÎA^"pœSobë@ˆépQpŦ| ú~u5­’@ōųf,_ĄÉÉŦíN[éĸIäž9$BŠsĀv=š¨lÂMFI-¤¸i"mÍ䐑žyõ§×a(žVîËöšnŸmđ x‚Ëōē)-‘Žœž) Ņ´ß´A:[ŧs@6¯ī1œúķU_SąŗÔ$•æ*%ÂĘHũØaĐį 8ãŪ™­^1ҤŊˇ¸uHŖÄĐ6gŽøĸęÃJmÚûšŌéšmíÁ¸–i ylÁˆ =4ÃĄééöB‘ÉūŽųŒ,푞yæĢGĪöZMmu"Ü*ÚøesŒō¯ĩFš¤wÖp]5úY<ސ3‚8`3ũii}PZĸÚZlZmĖũŦ…•×úĀ%l7?Ĩ14‹KUĩØ×lmøBe$L†âŨVwK˙8#bi\ŒįĮj’+ šJNoÄĐŌ…Ī\Ž(J,–ęw+Ūhö×Ī3Īs¸Ā,ģTãŒãč?ZŋZÚ¤1™YĻS–Ļ*¯mŽ-í.HļäâOJĨĒęīoŖM¨YųR˛‚W Č끚Ģ%¨^¤ũÖY—Iļ\%Žšę¯ĐŽũ*9tĢrŅN—+1@ŒQÁ.Ž{˙õé–_jRwÔ –¯`ūRŠ'#ôöŠŦn-¤;`™dÚNU_$rI¤”wa)Mi{ŽąŅâˇŗŋ˜ËØÉŒŽ=ŋ•U>B‹\šąVÜ!dR@ÎvîëŒÖŧWPÜČcÕ˛O*xâĨŒÄKŦlŽęvēî}iÚ,•9ĻĖíGN"EšŌå­d(¨Œ0aôíP]čSj‘ų-ŠfŲ€,Nā0psßé[fH”ŠbĢĩ{Ž1SÆ …eU#oU=häLiĒ$1ÛÅ‚T ÉĪAÆœ„ī<îÁëŒäÔní×$ą!TRŖ+æį¨ô§Ą‘_PļŠęĘkiáY!• HŽ~ø äW+Ãģ$ĩ˛5MZ+[)üë{t¸Œāũ͎wsÜ×YrUöíČãTV˛“KŧxõĢHĨT*ĶyĒÂܑÁ`O'ĄĻ›[qā YåŋÎŖŠD——"ījN?u( ī_—9ųG\Ô°øM#ÖnĩeÖuē–ÛėŲc Ŋ†6gƒÎsõČ­{+Č…›R‚îy ílj°9pč}¨•ŒÖĪqÅ´Æ~iPUŌŽiĘ\ü?ļ}ĮI‹\Ô#ˇ˛›íse|äs´p oÎē¸ZD†4iŒŽfG#,}p§ŠŽŪōÖöÜĪmqĖyĀxœ0-ߑH÷v¸rķD›8`då{séÉĄÉŊƑSUļ}BÆk1y-ŗH¸2ĊĮĀ æšßøCxbkjmž9­%dMŅ2^}ëĨ’ūÂÛcMu"Cûŗ,Šģū™ë˙×§4°Ģŗ…ëœqÜæ…&ļ‘ĪÁá썝õŗ¯Ü īĄHŸ0Æ@*ģC`rqīQÅāŖ –Õîi2ļÄI΁ād~5§ĒK ˛ĖđÚ9+ļYPyHę8ÎjęęVßk6"Ôōˇs‚p>´Û—Aœå˙ƒÖá5HaÔį‚×Sb÷ɰF )<‚{ŠŽķÂ&ūfiĩ›ĸ%˛ûūí Į'#—¨éŒâ玒ŨŽL q¸#q‹ĖąëJl˛Goƒ9 !w; úšJr’9é|18M&VÖ.M֚Vä"fEq‚Ŧ¸Į@;T āČNŸwes¨Ũ„įŽęĶ^ÚÍ8ŒOŽĢæ˛yĒJŠÜyéīīKš@QĐ|)‡n§š CPš YŪ;FĸÜw6œäķ]5°+žcŽOįPZŪ[=.ŪæÜÎ%2 §Ķž”æŋŽkÕļŠâ#1ĸ¸,šÆ}ĮįRÛ{ˆÂ—ÂR˙ÂQ/ˆ\ŊIšˇXŌ(ļ¤gTôcœŸJŠ€-Į‡aŌZÔ~Í Đģå‹ppÛš;0FãœWMkĒÚßIsmÜŧC°ĘŦËۜtŽ{MņŧwēŊĨ‚ŲH–ˇ7ÛÃsŧĪŪ ƒ•p~*×0ļĒ|=‡[Ô5KˇÖo㌠ŅĒĄå%r<•Ôņø>æ fÃX›Ä7Vp´xcÕžöp:“Ļ+f]Z›’ęÛËŪ2J0šõ9â§ų€–O0ã‹b“”Ŧå—áūß ęÚ,ēĩĖ‘ßJn†ŽRÁ‹ uËqUSÂ:Šj—7—^$¸–âęĪė˛H–é1ģ÷pXߎO5ŲCz’ÛîŠâ7;wŦËëĮcëYV÷rO!ũäNģŽrppøÔšJÅ#Mđœ:wˆŽ5û›ŗy*íŨå•2$ęH­t‰p0~nriŌĢdå1¸ņQ0TØAåjÎRæÕ–Zˆfæ6vģĐV›|ĢĀ<Ö|q@á°xĪsšŅUųFr8úâĨę´%™̓ķ¸ôÍsŅ¡z„d•+Ã)ÁšŽē]A{†Q\ä,‘ÛjEßnu?īĖuœŧo{BåôhüĨĮ~3ŌĨ°‰čâ¨ÃĖpÎãzUôËaC‚?/ֈŠD¨ ą`8×5 ‘v‚䞕.3‚IŧāT¨ĨŋyģĶÚ´!’GšŽrvß­=™[įMÜ`gÃ1Ûŗå Üã­"žâX˛Î9˙õĐ-Įųi“šŽî¸&¤Ų1?\ Ēíŋ¯sŽ”õāä7=:įŠhV-9w,2˜Îz͏ōĀ ×žJŠ"nd™CLüĢЃëRī‡ŽGcč8ü*ô(+ķnĪUĀëMfÜ ˆ@€Ū‡ōĻ‚ĄCHáqō÷ϤeÁ>kāãånžô˜垗­ũļúyŠ P ÎNãÆ ?SD^ģŽĘŌ‘5勓\„+Œm<ZßWEy[æŪ”ųtĐnĢR÷ŽsSšōĩÛ6cnŒļÍį܍ŋtí{ÔcN™ôXäąšŠyĐšr§ '' ĐtüĢfM)fÖWQkŲC 1ųA]§¨õëŪ­Ãimmk0Ā8Į̌sŸëIEģÜŠVŠK”ƸƒUķmī ŗŽāĖsÛųŖ+ÎAņõ§47˙ÛV÷fČē,&Tœšlœzãˇ“h‰“r…=Ē…õĘZˆ"]Ķ\HNÅČ’}‡Ŋ7č‘^ō˜u˜/"ˇkˆ‚4LĒFņžr2qŠŠ§ÆTÔŽ'f‰¤‘vŦ˜ãäéÎ­DWļW¸ˇš"R@rTąN ÔvŒņëxīn`'r.Ķ”8#ŋ~}é+ŪčĢŽVžö2õnîɎ[&ktē_ŨEí’>I8ęIÍ\ÖėeūĀk+[I–G /ãßūēéã Ą\ėÉÆqÉüęģąj4ŽÆ$_ā\ŸzmXJŗrV[ŅÍyöH`ŠÂįÎ1íÜTCŒr~ŋ^•V[7ŌaĶėU$˜¤ÂYĨX€KžŊĢzÚî ëHĻ„ŗ¤ƒräžõ;ü‘’vŠÆ99Å _¨Ŋ¯+Øæ­ˆƒYÔd6ōy#ÚL C‘{uäU}˛˙aiA­Ąˇ“ũ&-„•ę~éëÔWTˇ0ĨÄLān8 ŸĖR4ŦČÄg'§<‘G ũĩžĮ;u}ŊĨąļIöŖŧdĮ @ū´šuÄšuŲhŸišo5V3… }1[o+•;"PãĻķŒū†•Ĩ1Bã‘ɏxžÔr‹Ú+Z߉ĪŲ[Ę­ŠĮb-—L*ųĀ”ŽûqOĶ?ŗīĸˇōA3$F&‡8ŲĮĖĮ×­ta‚:?ģęMGyxļö˛;@CšÚĒŦ ’OևnWĩævH崨➠*;h”\DËæíę%ŗíõ̚ež–5ŊAdŽē‘3|ØØ3ßŊič§eŧF0†5 ØpTãÜU›cm5Ķ\Äи~ ÆŪĮáöĄq$B Tkyædâ&ō6íbz Ūž•ZŨô{Ŋ#^ļ]A-}pËŅE˜ã#k!aĶa*kĐ!ŋĩģ†fĩ•&hœÆøpÛ¸8<j†=^ÍĩOėÕš„^ėķ 矜.z‘éÍW?`ąĖi%ļŌŧHŠK8^ų4ũ§XábˇŌĮ-}§}tėæūŅ{pĸß%†ĪbØĪáYiīđÂâ]åÔĄ]—‹{fō<í˧¸GOJô¸u.ØGßéĘIáÂüzҊe›;`xĀúĐæú <Žöˇ†5ŨCM¸77:–čÃ*­Ā €qŒđjüūOx`l°Oe*Ü|ĒÉ 68$ļzõé^'ĖĀģŗ…ā­[ȒÄČ<´ Cß9îj}ĨÂĮ‘ũĢMÔ>øōÂĶėō$„ķZÃ$[×k(ÃÁÁúÖÍŽ§áûŸX]Å<gФS-žĘåmČäļ°:ņ]üvë<Ļ;xŖ‘Æ×!@.žūĸŽD’'ʑmÚ@ Ū•\ī°4đÕÛh–:ÍŽšļ™Ķ´Ī:ŌöÕ1$ƒæ+ ĄŒéXßÚÖZA‹ÄŪÕ­õû›Bڕŋ“šú|Ķ`Ũíî8Î1Í{ZĮ…+´~lŋSPCeg`Ž-Ŧ „Hxcˆ.ķīŽ´)÷æ>(˛đÄ ÉĶ&´ē†+ˆ'’XØėō€ĖÁO†n?…Ōt•Ô|E¨Ø#đܚNɈm–ōÜž3ÁĀĀĪĢzÖߊc7ļ2é>ĶlĨxá-æŠI€ËĮ$)5ŲnmÁ’Œā1Š@ŦPžĮƒG=ėx÷úđ–×SĐŪ5š-`Õ.­˜4ŅĮĀ`Hû¸ãzšM?OŌŧc¤'†`bÖĘk›„‚Q™ŽŨąîn››=ú‘šõS q™$J“"ėy=Ī­RˇĶė´ä1XÚÁnŽrR–5'׊—WȤŽrē.ŋâMWYh/|:Úm‚ĄÜōžį/Æ=~‚ē¨Āf Î{ŌLŪYf`N8Č5(.S ÄgéXÉŨíbքÖņĮÅ}zzÔ9U#h Y–#Ėųܯđ֜ƒpëĀëÍK"[™7ëœņČz×6ÁFvŌcgÛr3Ÿ‘kŖŋŨ´“ŒՏnô™ōü|“Ī~ŗ‡Ät'hļÜ‰Č ¸įŊLģ$|ę{ ޟ,\ŪÍŌĻBŦŋŧûäöÍH„€ŖQŸAÛųÔĨˇ }*!ōãkļKĘĨŗÁ=}+DfĀ  [$õÅ#3¤e‰%AĮ˙^”V Aä¸ä Š†Uöų …Č! zS°į%ƒĀBičJ•9XšcÛhįz3ŊžūŪ9'Š2cœ†,T§4ČüÖ/æ2ūƒČ÷Šį8BØã¯7įY7cUaņ‰”)åTŒcކœ!gpÂF#“ƒN–6BX.tôĒōJWįEmœe˜ō(zjœĻąĩŽîķŠÍįDۄęŅ9ßĶŽõkPq-íŗOpédÖÄŠŠf ōwåzā ØNĶÚîYžÍ Jį÷™PÅĢ>t˛Mi,L‡LKxKFé&Āœ3ĮõŦÚęvFq•—b„‘^Ãi§Ŗ]ÉŨJŪV9QŽПsSKkyiŊ›Ī"ū01?)<ž§ëNˇ3MöĢ{ß2ûN…†ITn< ˇ@9äV´:F“,1G9Ž6Ū˜ß{ÔķÎ?J¤›Ø™MEęAiį›ũrže1„1’ųŲ”'ŌŗÖ[õ˛ŅĻ]FBגa \|ĀžšÚŧ˛ąQ&!•§ž-ÛĖeŨúúTĸé͘™Ö-27îĪb9§ĘŲ ´ŋõąBÎęâŲõ˜Ĩ’Iâ´ÆÆ|n$ŽJö-”zšžå%ˇx‰”ÜũŌ¸ÔÕ´˛ĩĩ珕cv{‰A˛ļsÛרĒ4XkwQ‹;ŋ%X˜Ė’–c=I=ģQfˇ”d›DZũ杊ÜDn~Kˆsj>n@ÛK ēø’Ō9æk*͋ų˛ÍnÜÛGqk;f1nû×ÄqŒRIĨD÷ĻčÜ˞tvã:t8Ļâ÷jÂÖˇCmRå´UÕmD*ŒāʒB“´sëĪëZqO1ŧhÚÔ,)õ—=[ĶmgjētVpđO2!de…˜8'd}*Ü:ziī•!„+0“‰z`ííŠͰIAÆëĖΏ՝mĻIėé¸H‘ Ė’dā°üũ*[ÛŠ%:‚[DŗĸÃŗą\’Žˆøzg’ëĘÔ^/6qp…ŖVØF8įéíVäŅ%74zƒ4Af_/!˜ éëIķl;ĶVi•Ry-<ŗÛ"‰#ļ 3ĢĮĩ9õ)†›ßGŊŅTDŽV;Á=ŗëÅZ:Víû2{ äĄŒK´Œc Ēŗč2K§Cž-wnâHĻ …\ ß4ÚhĻ÷îV“Q}3Nŧš]9#xÜ*…ųCŽ™ä™Å:ãP’ëíV3ÚÉíäō0ųSÁ ŽāâVÂå4yîáe—)„A…C¸v'¯´ Ķ&™æ-9Xe@\äņž§Öv@ų-ĖĖĪŲÜÛũŽIĄHa`(Täą[ž™ĻC­´Öë{5ŌDe0ŗ_îÁã9<][áĘŖŧŽ?Ĩs6:kßÚOނҝ‚F9l6qž‡4īm'ŪrFÅūŽļNÅ-åh"‘Ā\úg¯áU~Đōø™|ԊÛ(Ŋ”–ÆL~ÛíQēK¨ŒđēI´Å—#hČ$Œ~5b=2ęâđÉ"A |ĸc’zœ—ÔŌŊØF0Œte˜/‘b†ÍŖ‚L•˜F응“žÂ¨iēĸZY*0}u" š.};TöpkE ´ËmåÛŠRųy0>PAøÖgöv­Œ–ĻÍ^tšķY„ĒARû‰ʗ3ÜĨëÔÖÔ5{[D• K+€L‚%jôËņWíŲî!GP>ecÜ:įĩˆõKϏ†;Gʁ•ĒŨXyô÷Ģ"ßYžŌ -îĖĸ¨6ōF ¯cČ˙ Ĩ+™ēQåZ ˆ`ōØįž*Z"\‘ĀČõúP\‚|šīŽžŧĶI>g$ö¯zŗžÂM ōŲå`#Q¸–āß5Įi*ÕušžŅiŖÆÚYēhDítŠƒ÷ö•äcļkŖž´‚xŪIYnęsĮã\¯‡<ŽčQĨ¯öÜĻE!‘"ō?zrs´ąāߊôÅTmgqؓNņš~ˇ}wĻĨšÛ_4,‘0všO”H$–ĒŲŨ\\üH–[=ídˇŌxrĘd#–==ŧĒOĨjVˇZĒ=Õāž… ‰ą ƒƒ“Ęđ=úԖú/ˆÄ¨\_XFí`Ö{ĄGX’COŽ?•W쭘XĩgâKŠĩČ4ë%íÅģĪlŌJ aHzcä<ƒÔÖKøÖōŪÖMIô%6đ]=´Ŧ.†õÄČyäúŽŊjΛāīŲjē~¤úĨŒ“[Ûŧ2âc0bâŞX•=Ŋ C/ƒĩ‡Đ.ôŲ/ôā÷7ĻíĨXÜį.Ž é¸ô§îÕ°ņĖēüú=֕öiEŠē…ŧāÁ×vÜ6ķĒQøŌâ]×RMhšķė†&¸ų›û¸<ƒųVŽ…ŠˇŠŽˇ%Å fû3Dąˇ;‰žģŋJÉ˙„/_ûzlWúy‚ÛRûtŅ÷$gÚØãĢõé.@ęk\M¯\éļ–ĖļĶFˇn6ž×æTĮ*3“ČöĢē–§=ƒĩĩĻ™sur!k‚‚Fō7Ŋ5sáÍFį]ąž˜ŲÆÖ÷>oÚa ˛´DÂW۞äž;Sĩí\Ö5w×°G§Ŋ›Cä\3-ÎrûW‡88äābĻŅžƒÔŋ7Š"‰49bąē›ûaKC‚Ģ´ų{œ‘ÉĮŌĢ†ŌõŠÆ›t—šQ"{V‘3€78Æ9ü+6ø‘Į†ĸ‘´Ļ:!Ā’Aŧ(ųOđœįŽjßü"ēŧķx¨\Kb#Ö"d‡c?îŽÂ‹¸c‘‚ įŽiû‹AXDņ[I¤Ųj—ē=ÄLé´NĘLŦčCÂã''°éZzģšow öBŅH`xå]ČãAĀܤJÃēđį‰&Ņtâ×}ĻĨĨȲZyÚ#ĩ6ųō č8­í<ëâÎâ{øôöģhņ pŗė$՛žIė8÷Ĩ.^ƒļ‡'ā-7Lž/ŖÚZ8ū֝DfĀAŒGOjv•{‡ĩßiæiN•b‘Ü[Ãģw”[9sĶ<`j}Âū(đü÷ëkq¤ŧ¸kŌ$Œc,yAū&Ž/ƒÃhZŝŨÔ¯¨‘$כB’ÃîasĀ^Ã5nJīQ ›Å×đ BI4ų•,m…ÎՐėpˊ¸p2:Ö縚C¯iZtšyXuw¸ŽāÜ—j#n=ĮįY°é^#Ô´Û­;\ŧ˛džÚHDļŅšf,¸ŪŲģ}k¤i¤6ąÛéSÅ3]E.ķ?”>@€W”>WšeÕņ\ˇzŨå„Zé[k•ˇžáŨc\Ū}ą‚É öĒZ_Ž,ĩz k+ĄČÍ É*Ę@äJ“ØjÍĻ•­GŽkO{kgũŸĢ‡†rd‹l{AQœ€^+/IĶ|KoĨ.ƒ-´:|"KûI™gt.0§d˙úé5 &usîy@`:úąj7–ŪĨxÆë”Đŧ:ē%ŨíÚę:…ÃÎ1u6üĪâũU×[G’Pâk—Bĩę]ŒĻWÍ\?2į#ĻjiIc*ą='ŠŗäŽÁÔĶš—ąs'UgŌ€-Û<XĐŧčōąMåf<p+oQc'ŒņīY)ģû2mŖūZŸũ–ŗ‡Ät}‘ą#UÚš<îŠĐ1S† ÜdņUŅtĨ€§”vŒ4nČ%HĮ˞søSA"ŌÉ´–hŅąÆwgéR)Ū0ÄmôR\Õv8 D`gƒÁŠ"Ȅ¸WąĢ3&AåÁHĻî•FĖÅšPTzāœSÉL1Üõ ÔLŠČv užĸCĸĮ žHĩ9а(ãčÎ*1(ge9ãšĨÚIÜxįæÍądģæfoĮūĩXWM¸ĪQĶŠÍS‡$üŋtqœuЃsˇ“Ô/\{Õĸ fv¨ëĶqëYđË›+ŊŌąĪņ0!1Ø ēĖ7*‘Ũ›¨Ģ5Œ #Íã?cĶJMēR|M~ęģ‹s“†>ØÎjÔZ՝ô‰o1ä?ģķcÜBx¨,í.æÔ¯¤k&Š;˜Ú3pÎĒFQ…ÎyÆjƝö‹§ĮÕbĶ’¸'{ķĮášI3Šzõ-ÜĪũœË,ĪÅŒĐbĒÚ_XŊÍĶDÍÄždˆTŽŽ1U™nĩ{8/j'ĩ¸9\2ɎĶô?:ŨŧLāŖÆd´9á‡ōÍ>ffŠĢ4÷.sMķ-%ķP™×÷R:7ĖIĮOJĄ ’­üQÕ|ÉL¤¤*ÛSw8uãąüĢ4‰×FIŦŽ˙ĐnG˜‚~čāđ9ûŲrägN!ˇžĘą‚üŲîIæ—1ĸĸŖĸ:;û”['inFcMŽOˇz}•ËfÛK#…Ũ iIāV=Ņ;ĩ8įˇ/æĀLRō6û¤öÁÍV[¤K­*éã“ė ncÜĘ@€1ôčißR+ÂßÖĮ[ūpSISÕŠŠiZ&É+ŠÉÜFßJÂđô&McSŊŗ`ļ3˛˜Á Øų˜ëMņ í„öínė3 čd”)œŒŒãŽ)šér=įʎ’âÚŌū8ÖxcŸoLĀ~ĩÄöēV•,ÛQ ļŒģ`pĒŖ?ČV&žŠ‰™t§Oû7ī|ļ-|ũzã5…ņCYEŌ Đm…Ášžtķ8ÉÛī› į=1õ̇ŧEXōi}ü?ņūģqĒÅŠå Ol`Ÿ#€3ƒŽ~ŧÔ1Yß gĮ1Ê^FæŪ&†V~bÜŦÛF{ŸJ΂ o üEĶ"ļ¸ģšÚ{/ŗÎ& áæ>qĀ$~ÕŋíûXĩ_ÜK<‚+˜-Ī’ÅY–2„ī0­¯Ą™§á[ËO|<Ōî5MCl3)—Ėœ~bNŅžq‚8ú×SĻkļÕˇŸĻ]%Ä p΄¤zį5ã×ĸĶPŅü{}gs>o []Įl R9 s§ĨuūÔŧ1ĸ5­žcyeĨtbˇi•œĘĒ ōr'Ō” ˇÕk$”É´ĖÁ[ëƒíRŲ_Ęöր 5y N;g“\ü×?o]kΖXÚ Â$WÛĀÎO¸ãõĨĩ˜ũŖÃĪļXĘ0 ōļ#ãÄ×5õšŲėŸ'+ū´šÔɆÜŦÅIbœŸCÚ ĶcŽÄ´vÆO/'&SģqÆIąŦÛûJ{ˉîĻ„ÅuåĸG&8ÁķPȓ4zÜKs ōķ崜„ų3Į¨íڞ—š*œ’qšŧúÁm]4؂K!™Ũ~퇨ükÆúÖš hGUą–É`‹‰VxË<ŒYB…ÁsõĢpDëĨ*&ĸD˛„&gAÚy*1nĩĪ|Xŋ˛ÁrZKqģy#)Ṁa’iIļõ2̝„í<=6Ą.‡o&˛mMä‹ŊŧĨ*Ē*¸=ĀÆMMqŦZ%ų°ķãķÂå0Üö5‰t9&˛´ļÔ`šk„;c‚@ĖPą't?ī°¤u,@$į?ÃQÜMû™]ŒžsŠņ÷´x?_ÔĄÔ¯‹ÚjN`‘n ļå°Î¯Ĩ8Į˜w=ĄŒŧŸl÷¨~Ė‹&örrrwŋ…qp.™ņ--ī/ wZcÉ/ŸrŌoeuÁäđpOLW=;đ1Yuļ‘uļļOôĻʧœks’6ŽõJŸ˜\õī9™Š vÜ•ÆYļĀAwÍyŪ¨Ųøž-Búâkģ Ž!ˇ‚kkĻSe0ÁÚS8*ÜqŪ´ü[¨|UŖø~îú[=:ō)%žXĨ1™YzGŧ`¨īīG%Øļ;˜ã` míÉ'šlʘ'9 `ãŠ5įn˙`Õt ŲkWŸŲ—’Oēå.I‘ŠV!'QķqĮbŧd=ūĩÅÛ[C§xNģ}oPI5ļM›Úf“ ‘/đ“žŧãÛ­dRųüâ™cŋž†K;šŖˇcp ¨‹ˇ _’y$uĪlĶöw žŖ!ōöũâOqÚąĩũq´[ uŗžâWtĻ&PĘž 3ôŽYí¯G‹´Í7ûoVX5>Fœ}ŖŖ!R qōõíYĶ^ęü1ņJĪwsrlî§ļŠiÎ_b灏÷?ãMCQ\éåņ]×öRß>‹¨E§I›í1ŧr˛Š6qLÖîŸyöë.RU’9SrÉ ƒĐŠÉŗģļĶüe}2$Ig’q€G–8ËõÅ鞝á˙č2M5Š_ŧÅĪ+ U%–0{g zãĨ'õZsÔ'™°ļÁՉöíęiŸmˇˇB΁ˇp?1éé\,7:…–ĩ­h¨ŨOgo§ũĒf“tĐ;Æō9õæĒġKi♓ZÔĖڊ,W n )V~\ä‘ׯŊ%L.zB]ųösMeqˇîön|p¤öúÕģhŪh`š[a ËÆ­${÷ˆØŽT‡ũk‚´KË]/Æ}ļĄzŠcrY&yËLĒaWáĪ=sÉėjYõ;÷Ō|ÖzŌā‘NÁÆ\4,KČ#ķĄBÂ~GĸĮˆU‡(}:ūUhHǧĨyŋˆõmÃ^1fģšū]"P-^ä`áˆ8'5-ÍΧŖk^¸‹W¸ŧ‹Q¸X.ĄšeepëŅā ¸ëÆ)82msŊž§ˇš4¸’ܲ&‹—Üũ+ŸĐ|=o Zĩ¤÷R[Ū‰rCmbI8 d’›_ņ éŪÕõ &ęęÂ>JHaøąĶHëÅs’ NŪįÃ7đ롡0ß\$wæ?-ķl¨ •éJ)ÛRãĄÚļ0xÖDחQ†1hßfef’āË÷Xmęs’sí\n­Šęŋ`ņĶ NņM™^ŌHØƒĘ ŗ§#&¯\Ü^§Šü< õˤēlŽđ;$u † u'yëéU*mj5š{V×īÎŦ4}'Č7ßf7 %Îī.8÷mw’Iúp XˇžōK(FĄKvPyĢ %{dW/t—+ãÍVō=Bå~ËĨÃ?Ų㠇Ã9ž3ˇ#ëķuĒ=äövöū(ŧ×.īRâØ˛ˇV“sļ3…-´œ`ŒRtôФėzqĖņHÉ´K*Ú ė \Ķ.ŧÛg{i­ŽÍÍŧ2ŸCôéX>ņ"ø€LcĶŽíXĮž˜2Ü~GŠé"C#ˇš¸\đŲÍc%mĮ{—ŖC$ŘĮ< ļä( ž€S!bŽ€uäu§šeF9ŠlËvdߊųąŒõ&šM€Ķ Lā›ÜŒúdÕĶ_?˒Ŋ2qŠÂ’Ę Ë"%÷soR ãȚÎ?Õ’Ô"`ˆšRöĮf"@ôAéUŸ/k’āŒŒuĢ P īŊC’ d;°ÜUz’{ÔǁđĀžŨHĻ!8ëķcûŊ)ęwČéĶ­hfĮ´`0ųôĨ3nŌ ũãŨNOåO îzR3•;pšÆ:Ķ1āš,+ŒĶ„gœˇ qQ„ b§<¨ę~ĩd!<'$ŧFhH]A—Cõūz’@ë[6§ÜxWÂ1Msļģ g†B„I˛N7uäÖˇöi;›zŨÛM¤č2.‘f“\D„ÁnͅfĪŠ>ųŦ}RãUĶáMoėąÜĪ \ÛDáv'Ūlœk—ŧ{‹AâŊ-5K—ŗ´ĩPJgc,Ÿ,99Į īī]LŦ!ø|ÆF–TM5˜šsûŧōO­GŗJÅ)ËWÜĪŗø1ąMF_j1éîĮ7 ÁņīŽ ^ŧ×A}¯ØEáßíą;Īb# ­ÜĪčãŋåYž ž~é—W{RļˤôÚ ū‚šm:ōöĪáĢŨØLlŌ]L‹m҃û§”/å’*Ķ•7ąkáŋŨkī>tkË;EUhæ¸y™Îp•Ņ"šFgu9褕ÆZj‰¯Ŧ%ÔōŌ;vwÄą°`HĀ*wÍQđ´ū2ÕŽmõ[ģĢQĨ] ūH#r!_—nsŸSŪĸPž¨wčw’ÜImk+[B’LĢōGĐjå¯VũtYviķ›ĢĢ‘3Cŗ!0FA#éNņÍíũ„Žo´›Õ†HY e‰\í €äƒŸ­@ēžģ xb÷U׎-îfŪžD6ã ĨđĄ Į<žŧÔû;õ5§W“Ą×ZÎZŅbh–NDNĄJŸ ŠcgT20|ôR+ƒļÕŊ(M+M‘_gt+ˆĘ‚6l×7?‰ŧCŠĨ靪ÚŊôÖĪ+yS…Æ7v“ƒíN´ņ ‹Â—:åå›ĨÕŊË[Kkd™CÚ9äÖ—˛}‹U%Üé­41ĩŊû>'Ü cžž¸f­.•§Äd  ĄG‰,į95ĪxsŎšĨÍՍ֘m&†$—ĖŒąB­Û$˜U[˙OgqĒ›]'íšV>×3JˇIUr@ëBĻīk ԓ[š×z~‰Ų´‰æ‚,›íāižiÃ9=ø¨`ˇžhžâÚŲö|ąģĒ–\× ¨]CŽëŪ Ô×O¸€›švŦę•ō÷ƒÁ9S€kĄŋņMœ |VÖîélNÛŠ-áRžųäGRqOŲÚÖ›{›kimo9ōlŅwđ]A÷Īz…t5Q=2Ņ˙4›ûŨ:ķÖ˛/ŧWkéËoiyxē”lđI0TŨ€ 1ĒmJÎûÅ6‰6›yoŠ}€Ėa.<ŒŠįxã4ųY&ĩ΅a<’Ms§ÛLedi"R\\ŒņīAĐ´s"I&›`ō"*ĻčTāƒíX×1Ō䞡†?ļNŗŖ=ŧ‘BJNüÁ[Œãũ+OEÖ-uÛÔėš%@tÁRĮøf“M 3T™]žw#Ŋ…W(ūy‘¤ÂöđC!Haܚj œ ßĸŠA”įĶ`žŪ[+¨ÄÉ•d9ųÁõīŪĒAám -ŪŌ-ĘdSÄt'vy­Ã;‰EõĪjį­|]i}x!ąŗÔ$‹ĸ]ĮlL.W¯Íø`zÕYôbč‘O Ô:mŠOʒĮĢ Æ0ǞøKAšîYŸG˛f–@ōģDöÎyüyŦ=;Äz6‹áÕlmoĐŪ:ųeI“{> Á$œÖäZĖW:aÔBŨÁl…Ų–[fY0Ŗ$íÆi5$ˆŧ3Ŗ5ō_ 2Ņ'‹\‹ü¸3Ž3֝¨hz^¯Rą‚éT’‹(Čã˙­Y0x¯LÔo4øRōî!}ûr`(ŽqģŽFqVîŧQĨé˛ĖŒ×3›eāÁ J°)îåGNŊę­ /Má*ëMK lb6а0ĸe|ĸAB0Tũ*¤~Ōb´’É,a’ÖCēUw2yÜšbKŽhÔ|S`–6ķE<“-Ęy°ũž3#Hƒ°tä~uŠi4W1[Ī9Žh„Ģō•Č8 œŌ÷’ ™W>ФĶ"´:u¸ĩŽQ2'*ĒøÆ@v*øAü:ĐÎDˇhį`dURĄˆéßļMIâũÅįy¤¸h-›d× lī?ĄpČĪoZļ5Í?ûItæ’QvmĘF"cē1ÜqŽũ:ĶJBž¤RøsIšūÚæK{›eĮ(-•tÎzU9|áöĩ’Ņ4â!•÷ÉM"Ģļ'æÁ¨5č:Ž… וÔ6ķ^Ŗ’ŨdüÄpđ3ŒõéžkKSņ“ĄI$7š‚Å!pîü°xļįbņÔāR÷‡ĄRĶÁ~˛¸žĀdhđŅ$ĶI*ÆGL+;Õ§ŦxrÃX€˙hZ‰Đč ÆŪĒr ŸqUŧM{ĻZxzåõYå†Ņ“l’Á¸¸cåĮNã4ųÜēb˛įŽA8ÍAĻøCMŌõÚ9mÁXEÅĖ’‹pF@äXš7ˆl4jz Ôo$ļu„GĶÉ1[†f Ą›$6ž¸ÍvSHW)rOŪ;zS•×Rĩ9Ŋ ÃsïjēŊ坝›ŨĸÃö{b8‰’Nśp…døŽßEĐuÚÔ­ĒĮ¨$Ī/ądƒ* ÚŖ'ļ* !ĩŊOĮZΒ|A¨Įagn6ųB@ėäc?ĨnEĒę:?Š-ô-JčŪZß@īgs U”2rČû@ŽAwĄŪûŽãu?hzœ—WˇĖeēŒ,Ū\î‹(Æ` dÕik úõ'ëÚ¯éžŅ´šä¸Ķôû{y\$¨œ‘ßƒŽ•BĶÅZMõīŲ-ŽI^,ģeIc8b=EEá Í6øj/§ĨƟĩŗKö‡-‰ãžĨŠĨŠwLėāļŠÃyÆJš5xdēĀã=ŋJŠŪF$ {‘šŅˆ†%NXõëœÔjC;ĸ뀸ÉĀ>ĩ3 Ī o^ū†„Šû„d8ÁnôFü` €0vįĨ6F)%_ üJ$‘á`Pų›†7taíNčDÄ.T)ĀÎrNsJC¯ËģpčšäĶ0dŒ,‚~˙Jĸn'IeØčáNî´Ō¸ŠÉáÄqčv‰æŠYHˆaÁë“õĸ? øvúĐÚžd Ū_Ëō‚¨lmČĮ|w­pķ:Č1ŪËo*ž^}ÅVĸčeĪá Ŧ?ŗF—Ų4žaŠ2P3c‚ØëøĶæđž‘&„4y-_ė*Ûŧ¨æqˇūœ÷+…´šXÁĘ7Rl'Üœ~5{Xđ…Žŋemd×VvöøØ–ŽxÆÜŒÆ8­ÅŠE˛NsžžÕ4g†%đOsĘû…ŽjEoâ!ŦSQ™üą“#‚…û­ÆHę~ύZø6ÃÐ]ę){ĒÜÚ[–4Øä%ဪīuâģ&yB nĩHŽī7͌įĶÛsąWŖx>ëVđvĨjĻ÷Jˇšģi­­Ũw0ˆ…`pyažŨ+ąŸÃ_Ú^ } ūö[§‘FÛĸYNr­Ü`~UÔĮ†SģŽzÍ:H āŗ•AÆÜqOÚ6î á!đ÷ŠâĶMŖøecļ$•íđŅѓÁå‰ĀôįŊ3Âū ŋđŊÔąGĒ >sší ØûĀį~9Ž÷ ¤ež*ģ$ŒFč¸8ÍĖ4Õ~k:öŦ˙Úđ˜į˜\[ŦîŒ Ú„ã ¸'Ļ{UÛß ø“WđŊ柊jļ­y)ˆÆaˆŦq…998É'ŠīŲf ĀÎj˛y˜Q´I;Šķ°Đāī<)â™aĶĩõk1­Ų´Ÿ1Mą˛8'NyO­§‡õ­¸¤AˆÂƒ‘œäš\özl&yėÚ.ŊĨGá{k>;ĩŌP—‘Ž7ŗÆĘĀČÆsŸĨYŧūŨ_Į{+YĮh֍4’Į‚IV Œä¨#§šî°Î cĀč6į&Ą—{ãã‘Ū…6Āō mCj@N:IĻG)JüØiH0åōÄgŌŖbŒíZĩ=î U’ $‰ãŠRÄaА r>—ÄēN•‘uáŲ0ûî ePI ƒģzús]úÆb#w*I ŋo\c­LĒY¸aĮĀSOK ž]Žģ7‚5FĐnãŧKávļ?z­7˜Tԁ]›ęZ•߆eŧ—E¸†éĸu[%mŌ÷W=9į8Ž•[Ę=J’sģE\lŨĮڛ“b<’ŌßXƒCđ¤gAŧfĶ.7Ī …U+Ü÷Üá[ŪjÔuØgŅ/oíĩ ÅŧÖąī*ĮūččŦĒmArŪų☞[aŒ{€Ž3ëOž‚<Žm÷Jđū—b-5ŠÚÛŧ–—v+‘Îäų-ÛoNŧq]kkš•ĻģŖiז‘˛_ÂRIŌP&T,Ā/÷xëī] ’b]W’GLũ=Ģ>ÛÃV0ø’}užâ[–M¨$`V€AŒãš?…ŨÆĪ=Ôm5 áöĩĸ]Ų´đGæÉ äRŠWVlüĘNė‚yāũkĄÔÍõŸ‹ôZ->âúėŪÖQl4eаČ8ãŽkoÆZ-ŪŊáģ:ĀÁ—D+4Ų\ƒÁ÷œzÖŽŽ—đhŅImÍāPŽ`Rã§^})šiq_$Œ_íl_Eŋ’ōMQ§xŌ°E¸2~ŖV|aĒęë6^ŧ† ›8äŽHíBŧŲa+Ws^Ļ-ĐŽBüũAzkF‡o–ŦYˆËĐ˙ú¨įŋ@ĐáüM%ÎĨā)ĄļŌ¯ZîúÜ@–Æ "yËķĀĪâ8Ē÷7Wv~/đuÔ|ŌĖöwPĩŽäGE ™<ŧ}zWĸ‹QÔ -ßōŽWWđ¯ˆī|SeŦÚ^éČļ*ëRÄį‡\>ėĻÅ(˸ns×ē6§Ļx~Ŗ°žâęķ[„ļöh$XTJŽWw…Qõ9Ļę ē_oĨÕŧ3uŦYjÁ'ˇ)j˛É›˜ŲO§sÆ+ԍ°Æ<Ĩ`ŊņŒzԖđF&’o,‚Ũ[h—8›<˙ĮKö]R]9ī!ĶåßqĻÄwļÆM§u+šĖ×õ-<ø:ÖKßYA-ü7 ĸĮi>\ˆ]ŲW8$ zâŊRâÚ ŪlPĄ“Î9Å@¤‡2͜ŽĮķĄL.pŅj˙Ų˙åž{Kį˛Õl-ŖˇšHY•\3d9ūŊ]Ā–FŸgT)3Ԟĩa­byVV\ã õĻĪi@•ūéū•-Üw<—MņEĻ“ņ7\ÕŽ ÔŸ{pĮ"Ú9ĉ´éۚŌûM׊|U¸-ĨŗĶ´Øä†Ín#1ŧ’8Ã9SŅ@Žîp[ƒ|ŧágK77Ėä7Ķĩ7?"’<™#¸Ô|!……œąęĐÜ#4-ļãĮļj"¯Æ>éāäuŠ!_-O.yČÉĀzŒ™ÉSģaÆ3×9§ŒąTāôīH0ŦŖËŨ‘Û?ãN-š#°ÍQėŦ *"ÎT“Oy(O÷žųÁ>õtš‘že^= Í"€ėU"lޤũiÜ Z… —áŗĪlƒHÖĢ"F˛NĢBœÖĄFY•ŲSĶ§'Ū™::*:•äÕFāŲDČC•d'Œņšą9-šØ‚~îŪ”ĸÖ-ģ¤F*y9õŠÄQ¤|D⓯Ášz2F,NP'Ą=? kÉ) ĄHÔuŠ„ .æįĪQKŗ-’6¯ĻqšZ ą6áî!{uФ´@āĸ–l˙zz¨0Đ SvrPũۘ9 LLūj§ ÆņųŌ´­¸‡ržNri]Ū–<ˇhĀ5<ûXųNč:gņĻ!J3žķęŖ úŌIs$)P÷Á9Ļ:I´a8Üž´ÜŪÔ4ÍxĄpFĶ܏đĻĮ+0ųļŽ{gŸĘĨŽÃræN};{TÄ‘aMĜ6xÅ+ØĢ”ü ˇ—ËŲČ÷Īz‘bũæpHĀÉĢS’ß ĪLqØTd*ĄUå}¨¸Šū_™)-p=ŋVnÂų]ĮĨÛ{3o+ƒ¸s˙×̐Gš‡<āķßëT™%YKîåHĪš!B['ЌŒTÍnB3~šaˇPÃc{‘œŅt-褎F,ņžŌÄũîãô"‰QU6€C˜9%ŋ”ĖøÆæÉíč3ų yQÍ&ŪÜķšŲđUrĒvē‘U¤#våVfëĪA“˙ÖĢ^SŽė&zÍAäˇņ9n‡Ŋ@Ē"‰Øîˆä‘Đš‚_ŪɇRT ķŠŅŽØ¨nÎp8Ĩû2ŗ; q9oŠĨrŠļą€rą…é‚•Y1ĸ ˛įžzûR2°eōá,s—¯Öž‘`…Ė€‘ÜæÄE#y’"ã8ĪļiūÅFáŅsúÕ¨­áVʎGRHĸ—ä”–_÷T 拈gf žšŖ-æņÎÁČĖ;ļ2Ųū%Āyb…ãvrN3Í ^7 îŽíOÄåˆ nŋ­Xo˜ė ŒzŒĘŖŠ8Ęn`˜Ŗ­+ˆØĘÀG(æ•c’ä取:đ;SĖé ɕáC@bqø ” .B’9ņJũ†BŅųDĪ .L¤’Ü qÍ[1ĢqĀ÷Į5ÁÔ8ŨĪ>Ô×q 1ü˜9lį#ĩ1â˙XąĐgđĻŧ\ô#xĮNņ Uyė(MŒÛbfĀÃ{{RaŖ ‰oCÔgÖ­ŦGoĖwgŠ߲:ŠÚ“ßĨ;ˆ…A;ˇĖč¤hâ1|Ō¤äz’=jØļ×a¸ãļ*6ļĸ(ÜHĪ4îo*8Ú­¸ĶņŠNģ†}1PųF,lPztlbĨķFH1ĪjÍžĄbŧĨÕ[s`ôë’j´˛2’Ĩ˙ÅZi‰p=OÍíU§P™Æ¸äš.RL§#–;ƒ€UIŽTÄ€ĩ+nĪîy5DE& –$tõÅ+š$F–­),~ĮĨyĖÚīˆâŌuCûJm'Uō IÄËš =Ė}ëĶĨŒŊģDÄî…C§TČëøuŽ6ËáĨ¨ąÔ-/uFéofYŲ•ü˛w8ÎIīŸAÅ]9E|@îö,jmu/ˆ5ÛAĒŨÃi sŽA”ûœeOügęk#SÕ/ôŨ/Âōjw‹§ŊœBę[Iŗ ‚•i9ÉRq‘žk˛ēđ&“¨M÷fæI#´û&vË éģÔä“Q\|4Ņ.lVŸP†5ˆEō\o Č'x9 ž=;U)Å ŖKÁäMáĢ;ŠXJ…Ųiq¸ņƒĪ9ô­ÕŽdL˜đ:žüÔ6“mĄé6ēm‚ļˇ]Ē:žš$žäœœÖ’¸U=^+'5r@ŧ…ƒpšęxâĨš]ņ ØqSJІĮ5JvXūERF1YÍĢCVcjąŨIĀZƒJ$Ã:¯_3#?AOŊbPąž>‚ŖŌpÂnz?ôŦiŋxč—ĀT‹ Ųã8ŨÚ­ ŽíÍĪo˙UQ‰K°ŪK>2:ņíR¨q!iĻV˜#ß5ĸZ„‹Á—vŪžƒ ŠŽŨĨŽĶÁõ |0Û.Op¤€*}ę#m˛ ôŽJŖ6M”Sč;Uv ­ōĄËŸ˜¨āR*üÜįwũ)6ā,0ŊŒĶą$h”úįĨJ‹Œgŧ 1_ŋ‚OfãôīOI\ŽŲ=8“Jåķdsߎ‚ŽYĪĩ‹(aü$`ū"ĒÆ€ž< „œŪĨŒ2ÉĀmāōUEęL‘$Ę";]‰ĪB&…,ë¸UÎzķK)&MÛB`tŠĄT#ÆŪwdį5L‘w c— Ū¤ô —ĪĘĘUģŒƕԂ 0ŽJŽj)cp vÜŖÄ? tW|ā"Įįŋ:™rUË8ĀÉ5YbōĐmM9r¯Â)÷Ī&€ąos$väŌĄ fێ­M #(9ĶÕY×k"íĪ=iŠÄrYĮ#eËãÚjHŗ:ė'ķ§ü]€+ūŪ1“LÁĮ™ķrKzzRķī5‹/bqĪ˙Z´ĩæ=ũ*Ķ#’ ęÛže#Œ*D“ƒšFŪŊ’ĐĨ[sˇņdTX2´žqî*ÁųĐėnĀæ›’U”œtĄ€Šģ8¯=˛:rBFŖų‡ úS×;Ahé‚9¨Ļ“vvÉ8ĀRC¸G–#o\´ÕÜÍĖJ#é‘ßķĻ´€Ø;F>ų§);w(É#‚iŒVwØĘŖJ–ßz†2… Ø(ūuēƒĀ-ŲOZ_ņ’§ŠĪÄ&øU˙„rHĪô§rF~EģœŠŠÖPK`gŠ˙ëTÛAę ㌎jGaŌF]šų“ûžžÔ Ā€P’:Ž?Jė ‘…ÁĀĄÚlST}ģrØāc§ãR€øät˜\†ÁŽ:įš2ō~R0ĸâ"gQÃŖ$ãĩ; č ÛÁāö |˓Ą¸íšvCd‡]§§i\b“ĀPX{Ž˙ãC41”‡’äôũsBaBüŲ=ũŠcTy…*sÎE‰ Äø>ÔâĢ´’Ãĩ ųb™S֕ÉœūЈ`es…9“RÆ 7đ¤*w G°Æ*HÉü…!6?ƒŌ˜C;'–DAnę{ŒS™€ä°›ļ¨ZŽö&ĀNNŅĶԞ´žf2:w¤vĀõ4ß0?>=MEĮ`%Jõ<ŸZŒ„ ˜'և“$Œā~Õ8%ÛĶžô2Ō"ž$uÛ"eIųš˙9Ēō°Ī?*ú{{Ķŧā ÆĖĀō[ŽūõHĪ7Ú$ )"ķĪĻ;“D>cHÄ*_åQ8tÍ!-’°jkVPG'ĻO?Z–ĘCÕUūW%fxįļjä1„F1žģ˜–Î)ą'…ĮŪođĢ Ãypp1‚~]Ŗ}ižj§Ū΍ÎFjĀÜpXĄqĮjŦT™” ôĪ÷šŠö’ŲdŠhe…ÛÉĀČķ3ĮAōäÔLAĪ>Ų lU8č$ĩ&$XûCg7qĀāãß­)™H_—¸&ĒÆrė2āv uüjqŲ˛į ã4Bíš›…lãđŠq’ ~ĮĩEąV‹œŠĮŊJû,˙æ2@Ág9M!•bĀ{zTKĀ`ĘĖsËfš Â3å–⁌}h 2+äĢü­Šg’œ9Éū´Æ™TŸ›=ôŠBĄp['áOķ˙ ‰ˆG`šg$qųÕ¨Ô,_($c‚Æ‘LpČ ŠÉ)70ue'i8ĪSõ¤R #F: %`í\v8¤Ų=EČķ-ģ#ņ41e@s‘ÅD6Ēå‰ņׯŊ ˞m%Ypp@éíBōĒ’/ŨŨ“Đū’îĢ/Ę 霚ŒĪ ܤ-0Iæ q“ƒØTėw‘†/“ÜPŲ,i8ĪaRã9ĀÉûSŗķĩ~)~PŖ Ī ĸÁq@˛G°÷ĨAáy 0'!ŗĐSŌ!ÉĮãL–5cQʏ˜ņéPH˛}ĸ2#ۊF@äŠėÕmĀĀ^FxČŖGĘÍéÅ āĢš‰Āãž:Ōî`ÃŽų4™|Ø郚a`Į O=€é@‰–āĻš {ëP;–rŋ0ĀAĮ˙ŽšŽŒÅN9>´›)!ቌq´Ōs ;’)…†~f`zuëO\‰å};RŽÅŽÜ=Fj‘ļ€FßaÍHō! ‡cú Ģ,šn ÔúQr‘?ŧ c$u œ~u†$ rŊ#JŲ]Į•0rYø=xRšBÚ¤žHčH§|Ûy-×)ąĻīžJ“ĪŋåVf súâĨ”>8ØĻH>ƒŸŊWb‰P7'“ŒcųUe,IL9į×ņŠŅŨža’O<ô\M„Ü@8ĪøPĘâE鎸Ŋ5bË3įņNžÃ'’¤ĐHÉX|ĖFy  ÷{ôŠŗˇÜæŖ‘ļđĀ“čC]AČąÃ¨Ĩs–9'œJĩŽ3ŒsžjŗĻá–ʨ÷Ši#ø¸8ĮįUô‚7܃ūÎ2zUDäõȁëU4Î%œ9”~#gđ2Ŧc÷™@Ģj¤mÜÜÚĒ)Q ƒČä˙úęÜdve°TÕĄHŗį*ļvĮË֞ˆŠŦø īÎMG۔Ž=MH`,Į,ÄqéZ+ą¯ E˜î'#'&ˆæÎK“ø¯&‚š-ˇË|žr9üh!•†v’_J/ ‚%#sKåŋ‹ˇ°ŠâŲģ0ÄōMA–+‚ĘGˇoëS*•ÉtÜĀ#ĄĻ˜‰F1œąũ#ą’Äcĩ4ē2|›0ŋŪķLY‰ œî=28?áO¨ `ĒWæ#žjAš”sōŽŪ†˜¸•$vĶÎCįhĪļrhBbešÃ3pš+Ë*=:Šjˇų„sŒõ4Ĩ—ė~lT!āČSŒ ę:ū”`‚2ą+s’[šf#v,OLtÍ!h-ÚĖrŲÉĪĩJS'k–cõĻn'(Čî3Į°Ĩ\ ‘¸ątĻōYO8ëNh¸ Ø,§,Ũ=ęhÂÆģXšã 9Ig}›ļđ8øU”–$ęG™Ą1nMĖĘH=rŖœŌŦÍ*ûŽ8#ëIÆsˇ/ԁBĮ–Cg×֋ƒJĢ ‹×Ģ=ŠĖŦf ŽėM#Ĩ€^OQšŌŖs`ájlVŧ J0ĮŽ?ZrĢœOņߕ+¸ķFrB:0˛!@îOZ‘†F cŋZ@0ˇqœ’åOá€ĒŠį1RcŽ3H§sķÛ§¤`Ø,cÚ:ƒHĄpøP‚zu>ŧt⇚W™PCē6/‘úԘ$— *úžâœ[pŽjĨ‡?t#ĩ” āqūM=‘ ŖĨ—ƒƒÚ•ÉQˇœžŲ€Ŧęß#¤jŨņŪļRF"ØĄrw{ū5ck/ĖĖ2aԚĢûÆËüŊqß4Y\w-ŦW˜åXŒ‚2ŋ֖(ŖĩApМd“üęl ¯$œõŖ`b~SíŽ)ŠáB!‰ę2y4ī4í#pČāô4Šĸ\7—בÍHą. qĐĀĻMÆ eĪĐb¤PG9É)1ûÂ8ÆM!ûŧdt CDؐĄÂŋb})XĘ_h ‚)vĄPĨAŒ3øŌ ”÷Ĩ° /ŌœGž <j7ÃŧÃ֐‘ŅōqĶ=膴ø“bŠ$šâŖV>i8RIāö§Iķ`ã''ŠīK†!ˆI•˛ŗ•`; ŒcéQ“ž~ņëčõ#pŲ î $ūU]Ō"Ø2ģģ3Iąĸ9e#$áԌíÛÖĒ™džČŖĄ ÅMpĀąĀRxũz¨ĢŖ3+tį$Ōši áƒ7'°ÔąáąŽ=…56¯¨$gŠ‚>!* Üg4ēŒ|PįĖÁĪĨH€!ÜėH=­7Ëg\Á‡O›Ĩ$*4j0Įp^Gøq@Ūųlį㚰¨ eFTwÍAršÆO$Tūœ:‘Ū’ĒŠ'oŨ\t䚐§ë֘ąQģnār:SūB°į”ÄJcˇcFÜąÚv(ęzgŪ”ÆôÎŅÔô¨ōĘX+zŠÎ)ˆ{•m'„ŠËĄ]Ŧ'§$Ԉg<ŽząäS3 `…_å@‡†nxf=XTæ/Ëŧž­Ö…Ü~QŸni‹š2üY ‚AŨšF:ƒÖ¸ į§üš¨ãžG,| Ļp?:q`Ėäf˜ōØˇŪ]Ŋ0O2láz¨ĪåG˜ÍJāzņ@UÎõߓœĶ4Ŧ!ÁY›€@ūU&NNÆÃz˙Z„0 ŠĀP@ÆO?=UNÆ+žŧЀČFÖfŨÎGz—îŠÂAî1€X§×ãúRŗlîģ`t?0 ŽKëē‰  äæ”–?yGˇCõŖƒÁ+:(9¤"X倰čií*ĘŖFFsUžPÃåmĮžx§æ)ÜØl ¤ô‰UūC͟â8íPēēĒŖq9sO6îöéįF›æ`ØæãIf’Q´á&Ŧ#ĢĸĖ@įĻ)¨Æ…€õŠA^S“ę:}i%aî?#†'¨Ą€Įĸˌ‚āqųRœž„įО”GaË1Î .0’8ÎjE+,dût¨ÕÜ߈Ÿjaä Hä`ņRƤŗ(Į#=yúR3ƒŽNhIQ&V';OaĮŌ„ė,qF¨TF3žqßņīNĀÜ@g¯Ŋ2ōō8.cŗûį‡ņüŠęąģpŲ :ôÅ $ÃÔ J•Ī`Ŗĩ<0‰\1į=i˜T$ōséH¤,Ø,zAH Ǟäž2NôĀņ´Ž˛@ÉÉäRŦ›œSŒũ3R3€B6tÚ:ĶĒp€N=)čKŋ¨Pŋ"’ŊAŨÁ5"šfÉq€ë@Ŧu;×<¯õéåÉj=FĀÍ˙â¤Û ~?á@XM˙Ū#oŽ:ĶX–|íHXąÁāQÍ4āƒŧ3¤ôũ) ÅNv…ė{͘ãæbWëQ4Ãå'Žø4#<{ô vc'ķe…„Ncb8~Āԑ<ŽŠæmGĮĖŖš q¸ŒõÉ4ŒUP—ÉnzsŠV+Ą,ŌVÜĀá­SšMņ~UéNgĖ„ėëžqÖŠĘÁĮpö4˜Ō#ī?uIäGCQž€ąÆOjqmŠå„ ž=項\’7žs×Ō¤ĄŅī Ėqˇ=jMˊvą4‘Į–,ØÍ<Jî;š'\,`’YƒF9ëN\˛d)šîi –ā.F{œSŅT;;6ę=Muė ¸ĪŊ+H °ĮC€1P>ėĢÆCšxÃ6Ö`OZW‹+ ĪŽ´ąÅ˜2:Ô1¯Ę7 qĶ=)ûöį ŽŨ(LM Ėėč¤ ŊÎ3O,@ÜGˇ¸  H >BįwRŪü)ʸ†,yÅG™7‚Ā˙Ë@3­<Ģo;™sÜņųq@‡ķ€sÁ4å'q;¸ëĪūĩWŠB$eÆā:3J‘wî  G$ŒÅ@ųI÷4‚L)n€KԐ#3œņŽ˜ĨUq€WsœîÆ(`=Jŧ7Œ€Ã…ĄYw¯(@#9Ą\n!Č €GëJԜnUäzPŽXAp SŽŒ|ŪšĸÜvįæ<ĨRĖXä3‚6ôüiÜCĐeËĩąŌœōAÚųãLBH$.9ä´åōņן`  D„:`Ã֎ĸŧdíĀė)€1 °$ōzP3ˇ!ˇzsMrŲ˛N1Zh48*?Ī5JÎvʞܜŠŅUŒ.Ö'č+hĢŽm U  ‡ė L°/$Äã¯Z¤ŽËB¨å‰(ŠxŽd%å\n;qÉĒ"ú\Ic}Ē ņ뎃֟>ö(Øb*{¸ŽCV] g'ƒœ˙…J&(Nc?ī ÖÃԐûTįwwĨL0ũŪzāqõĒr…ŖaŸ=ēU2 ŧ8ÆáÜĶD´ šØ&ÕāgéøĐ[#9åNŋã@*rW œä’(eÎÜ‘Ë}*‰ dw ~TÉ"iĸ’5S‡R2[šV1’˜ÃÔsĮáB '€#‚)Ü[:‘.ƒg$Wt$”ē—^Wä͌’J¨]Üg=j/‘ˆPŒį‚qRĸ…Ā“EĀ^J(s׎õ Y0U@āژ¸é’OROaHYPƒ’ĀôÁā{Ķb%19rBõãƒLÁ ģבĮŌ‘äcÉ\a{Ĩ6iĀU÷pqÉcøv÷Ĩ î$’1ĶžiŸŧ#”0<?Îh Ŋ1ĢĶ4Xä°É9éŽÔ‡3͒ŠŠ'ôÜÉķ8Áúū”ŋ p˙jįjė$œcÛņ @ƒtšÎBž9ĨÉä)ãŒÔ]7z~4†m‘Äßm#oŨÆ ‘ČPōаU=0I¨0bH×Ĩ=˜ˇã ,9؃Ã)°ķ,„zS6…ōA'˙­JÎO<íQڀˆs“ō€}*@NJdcŸLžšĒĄū`Ŧ8ÆíÍŌķNÜg銔ÁĸO4ž[íõ¨ZmŌíV-Ī<˙œPV  }æĮQÅD”ķ€1Ÿ­;ÃˀNÎ*#ũā' Į'œSHw3}ۊ)€ŧŠÁ9>¸ĨqØ՝€l•äOLÔDŗ7'bwį­H<¤œŒŒŊ1ļíÎO#ōĸā#nĮû8âŖFTdŋŪ93R•ęN8ëĶxÃ;}Đq–n>œĐá!¨#‚GŠĨdgŠŖAˇ,Ų+ž o-€$9 ëېÉT)N  ÷А‰~ī:Uh†ŗÉč­YFč[n= L8f (ãßŊFĄžg ØUîiųRFÜ|Ņ0ûē–Å.āŲ*ŖuĮjI“ģsØ…9TvÆjždÃŽŅž‡­'`ą`HI#uä˙Zz…vd@:œâĄ,Ã!pG|˙*F;IŪšÉėh@œoڕU†Â8 Ī?ZsšĪĘ@8"ƒ°.âŖqč3Ud'bįŽ1ؙ¤ŲbON03ô ˘fĮ¸Ĩ).œ0ÜŌ Oz†4E:y'…eLģXÛÖĩdäā'9ŦËŦm'ßŊd÷6ˆåTlQĩqК•€Ú :ƒšfåįĮ'4å °Ī×I 9ãä{šWëō°#ëN$€3ĐŲ¤Ü„ôįžŨž´¯ ŧVüF…}rsŸĖÔĄg89?tq‘ü4ãė=Gzõ0`šÉšÉČįĩiÅ3rĨ p1N:mŗc1sØî#‘Š#ˇˇBŒœģ˜˙Z rLą–Æâ3ŽŪ´åO›™P1P.å„eOp5.Pņån$d+֙ ˜Æėĸ†Š œū4ÂĒƒi=ĮîBŽÕ*z “øĐ$qōf#“ÆM"l4¨ÎC6sÕģĶĐĸpŨztüxÕĀČ÷u;šôŠ‚ œį‘ÖŠ•ōNôõüč1ÆĖ>O¯Ĩ1@ÜHāŸīÍJ ŦŽ}1A"0U?0xĀS֞Ût'Žžĩb5…UAÚšųąũÚG@¤l`AôîdŒąÉÛĪNĨJã AĻiU°ŲR¨@ÁĪô¤ ë°ķßĩĘä§ 9âš%ĖKž8'i~4åR@Wšo,ŋģ€qĪJwv`gÎ ÜF)$Väī\ã‚yĨ1’Ã1äû7Z6í;Ę Ō—Pæ@xĮ<}h‚l‰—oO”tô¤AæŽD[ŠiĮīW*:â€, “ÄSßœĻW< riD€m8øāûf¤DÉ'ÛĨȧ,aōĶÉÆJ㈋!dáG¨ĢRĻr@Į?áQšP1ŒƒÔvü¨}Áj"ĢŽvŠÁÆy ŗ*āqčj8áå–R˞Tû Ø`1×<`2|ÛŲNHÁšU!Ÿ úM*ΐ¤šëGîú…ų‰õ¤†Ü  p2wi<õæš[oã$R†ÜŦš#ļ:P9"HíUlĶ˙×HĘLņŒ €Xž1N’‘ˇ8'o9=¨B ô–ū‚ŗiÜÖ*Æčcŋã53ŗÜzQEt˜’ÜĶĨã=čĸ˜ē•˜aÁ4âIˆļyĸŠEwŽ{TĄ™c (ĸæā큚‰‰ O÷ēŅE9rFKOcŒT霃ØQEÄ$”g$ät➧÷Aˆ'ĨU2HŌFd9Į–)ZEpÄQECâ@įæÎĶÆj]Ė횘ž3ƒŌŠ(ę!ûŠ`ŒgøÆâr‡=:QE1ã >Rš<štĮ€Ą€‡Š(¤ÆN"Q* Č'9æĢģp÷ąEyČ*73ŌžWp's tÁĸŠĻ!Ģ’ŦI$Šœ1ŋ(Î;ũhĸČĨs°`(ÉÁ¤û웏īE0ˆļįĖG-Ž? q‘”ŠÜyėOŠ*D,ŽTĀ6"K ĪtĸŠldũ€8?6:PãæcÜqE!ĖJ3`“Œžib;œįžMP1Y@m ’Ŗ$Ņ&s´CE/p"ˆnnzƒ€{ĶēHG'ŒäžhĸŠ€Ã#*3ƒÍD˜)'ælä÷ĸŠŽĨ ,~Ш09' TĒY€bĒ íECÎV$ “×ÔÆv.rz (Ļö$„LĖvmÁ8S҈ķ1Œ0(ĸĄÃ0s†#†n=i2Ī31ÜWq#Š( ĄņNŌĖBŽæœrdPIÁäŠ( Cp7~iS.9'ĄĸŠ#’ÎO”ßH ŖëõĸŠ—¸Ä)æ€Ė͜đāsVbEF#ã9'š(¤a“ŗ,L ņ*&éƒĪƊ(|•;WĨ6I_j.xÁĸŠ ".Øõ¨ŌwÁühĸ’ģĘŇOO֖i^6}ŦxéžÔQC)ķ]Jģ\ļãžũë6ķR¸Š6(@'ڊ* QÆë"ŋĩfČß)û˚‹áέ}¨øĻ÷íW KFe^SŊy׍Wt"Ŋ›ĐįmÜ˙Ųleptonica-1.86.0/prog/brothers.150.jpg000066400000000000000000002366361506303110300174010ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀœM"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ác ˜ ‰8ÅN:W9¸˜9ö§c"—  fjQôĨ‘GÍLČRŽ”œRö ô÷  RšCÔScšR8Ŗš_á b Ígœb—N◍ÔŊH  ĩ vĨ#÷hwš9Ĩ#4¤b€n3AíN B8 Ŗ-îԁրŋ…€3ÎhÆxĨˇĩ.>j3øPyãŖ4)@ÁãŠ1Å"ķN:v¤^ūô ū´wįšrŒšN@ Ž 7œ q搎(†‚21üŠĀ ü=E ^iGS@88Ĩãu(â“įŌƒŠNŖé@8Å #úŌãu!āŒf€šL{tĨŽƒÖ#đ¤QÅ?nAâŒ`P#ŋ/zPŋ‰¤NsĀĄGԜG­"ŠõĮŊ094ŖŊ'ŋ8 sÁ oņFzfœjqߊN;Üp8ĨžĻ ֌iJâ˜Ķ4”ā:Rvæ é×ŊS¸#Ū›Î)€`P<ԊQÔņ@ #Ԑ ëN4‡Ĩ#aGzyãŌ“ôéHBtīH$šqΌPYsŽÔ {ŌôéJ´“ NŖĄˆwŠV‘CēŠîœĐiWĨ1 >î{ĐžôvÅ s“@ ŊéqHF{ԃÅ1 8¤n´´§ë@ī@4˜ uãĨ'V§úS3ĪãO â—ŊÅúPâ“SŗëH@æ€ ` \ōi/ RžĻ“ĩčGŌ—š)?‹­(“€hé’j$¸ŠRȒ)uę  ‰ÉāQœSWŒĐämë@ôĨãôĻE5įŠĖŽĒ=I  qF9÷īUÍõ˛ wˇ|Ķĸŧˇp˞ĄŠŨE‚åž 7‹":†R„RŒĐ⎔u ņß4āxĻũ)ĀņHÆ A9f—“ëLD;™šĶ˜í'áúQH °4ãĀô ÷æ—Åđ5r4îԇ°¤ųŗĮJLāŠqô¤ÆGáĪZJf=ēSŗĮcåõ4¸ ũ(ĪZw^39ž”`‘K֎Į9 éIŠ3@f{◃I×4¸ęO4‹“ŪÛ¤ÔRƒŌ”wĨ b€œˇĩ8 @4˜ŖĶŽ?ũTŠ=hŦxĪjL{Ō㊠Į ã#šN‡§~˜'ĨM!îũ¨č(¸äzŌ€1ŪĘ—4”*AÚŖQÁŠBáqRP´(Ŗ=3JŊiˆëšPxôô¤ĮZQÁĻ!hīŌ—ŒQÛ P”áČãĩ'n”ų^´˜ôĨ4†(;ū4ūOåIž´ ä{S#¸āf“==éØÂŌ5# ƒBāSˆĻc;ĶąĮjiāƒŪžyu BE(<Ķ~o­.9 =iéA9"œAĪ\PsšKw|@'ÍøhoŽfn¸ūfēIÃw pvšät{{ģ‰.#‚o)?‰€äšhLėˇ qÍf[é5)ĖĘVÜ}ĘŖĻ=ë›ËF›/ŨsÎ)ļ7—ŗYß+HZXūīX/sŖRFrk+UŌ>Ũ}¯ģ$ŸJĘŌä>t%.Ÿí ˙ŧG<]Vq=4l=Î3VŅ›N…$YKĢöĢvūyŦŌO´î7cĩZņJą´‰ōpíZúp'M€ąį`§} °ëXĩ´q ۓRĢ#gkŽ85ÎøŠ)~Ķo˛fU‘ļā‡ÖŦe\ZiĶGm1i%Á,ĮŦ;›QKäĢĢcĐԁ”÷¸‹–×UˇŒ\Š,ß0VČúĶXĻO6Üo#>ĸ‹Έ:T0Číšr÷5ˤSGâvŽ6b¸,r}E%ÔÚŌŦŌnXŖˆäīQ`šŌM#ÅlîĒY€$Ū¸ģûíRhÚw$LÜ mÍkÜŨj?ØQŨŦ‹Æ_ŽqUuU’m+Ov;É#-ß&š@ŲŌi‰$zuēČİA’jËw÷ŽgUēŋ7PŲZ’Ŗh?!äÕŊ%51,âå¤ōöáwã­&3PŨ@’ųm2oô'š—?8Įqœ×%¤‡RxnœŖšáÛÖģ{5EˇAĪ­ “îãQüés2)ĒĖĖr0)õ&úôŖÛh 恎(#Ū” ų4vãõĻļp)ÔP‘HŦŽ2§#ڝԐhĀSÆ(c'­# RįĄ õ4€L€z旯 ã&˜Įį@â‚Nhãց'֐õâÉ÷ĨČŊ!8ĮŊ7ŲíN#4­Ŋ'zwAøŌw¤uPx¸Å/ĩ&›ŒĨ<âã=(%2VĻSQ ā R1qÅ âŒö¤'&˜ Fæ”Qې8Ļ!ã§Ō”sÅ47 ķLڊ3ƒFFüP¸Hyĸ€ ŌņBô c€ãˇ\RLĶ2qĮZTjsO#™‘OČĀ jEÉ=Ĩ=(&„¨Āæ—ĩž(ĮjhPH9į4ūŋJi8Į¨§g=( ƒ;YL)žM§ ë\ūÕ´÷ $.pF2k¨##€sÅ4ÂĮ3§ŊÜ7ˇ—RÚI‡ ~”Ũ=oļ_4Pŧl˙2ķ]HāâpHϘŦrĻÖōōælĖĢōôēĨ JwŨĀⓁ­é÷ú„‹[|…äd÷­K(¤ĩĶĸŽ_žEâ­ū4ŖÍ-BĮ7âš[ģh"›kČĨ_ÖÅÁŌ[ČvėuĮzÔã=Šxn)°ąÄZÛ\ų֗ fʈĀĮ^zšÕŋŠî v;¸-ÚU+‚t{@ãžÔî+ô0ß7ˆŒī Xö`‘Đ V[ŨÉ,ˇQɲܒBĘ>•ÛqԚ"Œ9p̏õ8ĸác˜–âæo¤ÚVŒqĶԗPęØXÅŖ/  ę°AHN(ŽsVąŋ’kkëd"UQšGPkCL}JâšéDdŒ"ãúÖ°( JW ČŌu •×j…CgÎÎXJŸZšęÎ(Ö*˜H$úß›c w ļ.Öą´ƒįÚ7}qOĮĨ’)G T€¨ÅÔtč(J;tëA<ū4ãŌ€f“8§Æ Æ(Ī8¤9ČôĨĪz Īj'8Ĩ8ČÍ!<Đy “KQ@ëK@ÆisړuŖ¸ô "N&üPô™ ŒŠ=(õ ŒsNëôĻöõ ķõĨüŠ(ãš)8<ŌôÍœsøPƒīNüi3“A$(Ŋ3“ôŖíFxŖ4†f Æ*N”ÄáÚ¤ #SHäPX“Ō‚pÕDŽ4ƒۜķKŸNôütĨÉĻn§´Ā^ÔtŌO”ĩęs@9┑Å{Ķā ~¨ÉË “Ž=(3†šæ“ļIæ€2hrwR‘žôŅÔĶŊ¨°ÁsAü)Ŗ<“N^zĐ“ž”dG§4ŌOa@ ’Mč1GaKÔŅ`8nE8´ĶIëKĮĐœƒNĪö¤ĮÍۊSŒâ€9#7#ÅF į§jx‡QšU´Ŋ­8tŌãŪāæßšLq@sNūTœ‘@ eveÚÁ@<ņÖĨaœ h㞴ėŽh1Æ(šO~Ôü俘 Œ”¤sHN})sĮJ@gņ ŒvĨî)ŒĐädzŌĄO=(éŌ€(žô:Ō俀#ō‡šdÉÎ1ŒĶÛ§gšN}(ĄpÜR28ëKÔņJG84ЏŅŽ ô ö4ãĨ'l{ŌäSüč…sôģrÅ.Ü./q@ ōāĶ”֐œœ \ķ@†˛’}Švt4šíÍ&~lP4 ĩ ¤jv}:ĐyÅ3iœņNQÉ9ÍŠÍ.Üw œn?ΘΐNE8|ÍJ0čÃ(Æiyé@ã¯jLAÁ$R÷¤Æ{Q° ‚Z”žyŖ§j,i7„Œf—žhīŒPy`iÜ˙úŠšĀö§ך@f-; Í"RpiVŊžŠĘ2N‡€SX°ßęZ„Œm•U­W×§i¯Ä?€+Ŗąļ[{HãP8ũjöZõv0î%ÕėÍw ¤ōÎ*ö—Ŧ­áō¤eíčkJDWBŦŽk’ŧ‡û3S#Æw-5Ž€ô:ŲˍØöÖ*ɨę0ųļōˆĐ=3WoŸI‘ÁÁd¤Ōļ.ŸR@ÉÁ¤†Įéâå!ÛtÁœwkŊ;nsÍyô V5ÖŖs&ĸÖvģCmûÍØÖĪC\ÎŦ“Øj‹|ƒåjheäÖ,âķ¤Ŗ<€:Vģ´˛iĖņŒLɐ=ę?QƒP‹åáĮU5jiâļˆŧŽGzRŅMé†Oļg9ųsÖ´ÉÍS]FØŲ­ČoŨ“ÔĶ?ļ,vķÔ`ãšåå9n})ä TKĘ,ąļå=ÅNGJŠYV(ˡ@ Ž}ŧG4˛0‚Ô°íëZēē¸Ķå*!jļ…qi-°ŽÚę>lŽh3%×u%V’ ŠGŨ#­*ūę÷™mö&2wŦŊaŪą °aÛi‚Žūώ!ž…&)C×iÍ$ËÕ5+û9cH`ŪđØĪáZņ–eVq†#‘éUĻÔ­-åHd•|Æ8 ÖĻššŠÖ/6IWÔĐ2qÎM wLZ­gkz‚er:Ö­mÉįĨ¸„s@?5+g ’¤™%eUI4 ė”Žx¤Æ?ŠkĒŲŪËåC0f8¨õ]^5FNéDxc¯Ĩ+°ņU´-şÚ|Å)ˇ=J­§ëŧˇŨ€§ŊsWnN(Üp*œÚŊ•š*ķ*qƒRZß[ß)kyÔĐ2aœœö§ œzÖ]ÆŊco#Dō|ëÔR[ëV7"NĄ@x W4>ŋΎKŪŗ×[ą7 LÔ㞕mįŽ8üâãgŽh ’…įŠ0䚤šÅ“#ŋÚ*œdžõ<7pÜ'™ ‹"úŠ D˙zŒ˙*šņ$ßGŽäÎŗŌ´įžˇ‚<’CКrÎNęNsÁéUlĩ;[Ö"wÛŊYį‘@\R&°~ÕŠÉŦüļKe'$ŽúÖé`ĒKzÕ8ĩ;[‹ĪŗÄûÜ Ŋ(\SÆZk1ķĮĩR]VŌ+Ÿ!åÍUM~ÉîR%sÉÆqÅsk=sHM!íčiq֐Æį‘éJ Éæ¸#š^ôƒž:Q‚)úķAäõ¤té֓<ķNč=éã=čâ”r('!Čé@ąœ¯ŌœI"š1N<jJ8ÍHÕßw÷ŽÂ&ĖJsÆakÖ " ˜×æ_ŧ=EI¤ęŅe†g ëĀĪzŊŅ3oƒœ×/â­¨Fīmæļ/58ma 9=šĮˇõ]LĪ"ˆ֚Vk^š'Î ųâ›ĨiĐÅw Ė—‘ž)5Ą ĶĖqFF@ôŠ´ŠŧËD]ŦģáŠĐĪ­8p*#ĐsOŽ) vAäÔEaŊ”íuÎ +|ČĀ œW?ĻKycpūdä;rqԚûK“L•nl‹íˇĩi_mēĐL˛›``O­>ęđ΍olŽîünƨĩš-0ZĮHėĄrD‡Ãjˁ† 4ēn›ib˛IŗČ8ÅH֗ø}íĘîpŧõ§hRNą y dØ8cĀĻĸY@°ĮĢëÖŦ´ÜķA'#†:DYĢ ĀđAĒ+goĻÅ4ņ&ŌA&ŽĄË{V‰ėDžQ>Ip()h+%æ­%ԟ6Ėž}ëĒųÃdŠį|+2l–§~w] ’mF=1M’Žė¤ˇĩĮqQŪ“S°Tąk‰•v_j‚ŪOĩęķ^Î †N@㊞{“ŽÜC1:šŲ†)-ÕĖߨöļęGŸpņéV­ôë=8ۖRf'ŗÉ5ĒņY^YÎČJ *1ÚĒ[\Üj:ƒŪa*vSL¯å•#*°;Öfš8ƒN`Uظ mŨč •ü57AŽHà įpnôļPÅkâ â‰v#FPxüĒ –ŗŠÜļpFË,ž#y–7…+š—đŖ¨ˆu+Hŋá&ļ ¸.C7=išâIą—(ŌZ p:{Ջņ9ņŧĢ…PX*ŨÅÜŠ¨ũžîÜ5̝ĘÁs@ Đm,Ŗ¸šâÚmŸF ŠŨ,95Ėč–š­ÅĖa–ÜĒ#5Ņ÷éLcÉāVĢĻŨj7ŅĢČŠfŧžy÷­ō?‹ŊrĖŌq`íÆs‚) bĩœ6^#ĩK7āũā8ŠuûHî5ģDÁloįĩWŋ˜Ųę\Úڕ]Ŋ õŠõ‰n"ŊŗÔ ' Ŗ+ט‰uŊ&MžÎ6…p͒NjmK´ŠÂ+›ĨÚ[qėiڄĶę: ȑ2ÛßÍTYāKˇm\Įt&ŌÆīT–{‘N —'Ĩnh:UƜf3•ú*œÖmĩôúĖōÛģBÎYHë[ē~ ÷ÅÛėīcĄn§đĄĪŲiđOâ;˜Ĩũäk“†īI­i6ÖڅŦv˙ēœjąeů‰åy#b˛nÃÅSÖ/¤—UĖ,Ģ ņ•ëÍhë:5œ:KM"ķg¯ÖŽXĀ'đŌFų ÆzÔ:ŨĖséĀ>_TÉĢvŒÖÚiŗÄyÁíÅ!˜ē6…m}je™ÜÄm§Ņ­›OÖŽ,ěŖ)šMWļĩ˛+3•%ÉcHŨyŦ\_ŦL##j1īLFuļ› Į‰n"u>R’ØŠŧRŽ’Û|„Û(ä %ēŸMņ’ɤãåE[ÔõĄi|Ëkg@NG<Đ4DĶfžûUŗųoˇi„ö÷Žhę1\^›wč–É] O˜˙…vL6ҟéI€æUte`#5ÍhvņώzЌ/ íÍt7}žÖIŠ– 3…5Čh—ÛuŠÆÄLOA÷yĄ —äŌü$Čę‡Ę?9'Ą5Š-!‚8ev2ŧTŗ]˛ø›pķZ5]Ŧ  ƒÄķI3CnąąæÎ?Jb:-=‹iđ%ŽÁ“øU† §Ĩ;IĻÞ3 ‚¤sÅ\ę=jJBņ@Æ)1Ī4ŊúPcōĨã‘HN:ū”t&€ԀķŠC’xį…eŠXiĀ8īJ}Ē"I8Į€(0{SĪJbûĶąÅIC.ČŦûŌ|žÂŦģÅi‘ØRĀëšĢ‰™–úMŊą ģzˇjž)@ØSÅ!jb_ ”‘Åâ€đzf’úSv䃟ĀSČÉ QĪĩHqˇĨ āS°iŒhÁ^”åĸ šē†Î2SĩER_Ø0$ģb(§´Šâ•G=+;û{O#>wéWlîĄŧ„K e:P"RrN; ¤Č/JqéHhhã4ŧāŽGŊgęÄ:|Ģ#37#¤Ŋc¨Í0"ŠŪ(]š8ÕKuĀŠ~Rĩ+2¨%ˆԚ^Ŋ9 Qĸ‚‚0¸­8* ų öœ †9Ĩ* īš‘ŧI jĮ¨ĨXÖ4Û…€SĪN{Rņšjį8€;SĀxũ)ûØīJŸ*â€08Ŗ-Đ~5Mõk$šĮ™¸ĩtšEPŧđ)ފĮ%Įĩ=QK6’MAi{ęģ@ەN Įzœd¨íHsÁëNzŅڀ{w €zŒz?‹ĩ;ĪĨ""Ž‹ė)rjp ␃‘€(88 €ÔžÄRũ(ŖŽ)TuÍfĪŦZÁ|鷺J[QŌ´ûf€  S4o˜ b:dSŽA¤ÎO~( ŠPJƒõĨ1ŖđĀ­;gËFGn( (ĮzSv"œ…ûT„uæ›Ôs@ eFpYAúŌ¨Á"”rzđ( –'Ō€W,OĄŅåA#ĻE8/99Ą6(ģAŒŖî*;ļE˛›pvŋJœ¯OLU[û3yhĐ,†2ßÄ(+ÃB9Ŧč”ír#­o€…P âąt}ãMšb÷ĄÁŽæˇ6ō(bC]œ•úT°]ķĸWĮLŒÕ‚™9ÍŧphY"Š$T€T­Ŋ)ÛFA=ir0(ÔÁæŖX"ō‘"įŠ ]Ŗĩ NrM0…Ü­1Â4€°úTÅyöĻËrx  F2;R“ŠN=iF) i3AãƒHZ_­!8Ŗ'#ŠNÔšÃRgÛ Ō“Å&y‥úŅ´ BhÎ 3“§4ãĪJbô”ār:Ԕ4œæ—<`Ō äf˜„ #Ŋ&zœf€0Z”–¨BƒōŅ쌁MčšÍ;Pģ4đMDĀöŠWîĐ -ØuĨžÔŨŋ194Ē;šEukä&9W+X:Ū•okf˛AR Ít€÷ŦJƒN*O,F4"χ§Z^iåψ3–#9­‹e´ĶWėŠ( Į!XķYū?č2ķüuZō-ž#…ˆëL]î ö<¨ŦN0O4÷¸†‡•AÆpMsúÔH5 7P73`Ÿ^jYaŽãÄ(’ĻäōúO’+YWīÆGĨl­Ü ļ5D›GĘkÄcËĩƒn0`zRhˇIq{/ÚûAÆßL{RļÔŋŠÅËĮ—"<°m ō}Ēä—ļļaRY•p8ÉŦ=J#ļnFō įŌĒ^ÂúŽš4>b¨^oJęíŽáēMđČzdS¤™"]ÎáTu$Õ"Á4øMåŽXúvĒ–ŌØ0¸mąäA d‘jļW2„ŽufôŠdģˇYÖ&‘C‘œ\„ąÛÁygäĮ"‚Ų,ŨXf´nŖŽO§Y~o~)ŠæôWÖĶĖcŽdv§Owo<éQ3Ķ&šģ‹h´˙ÛũŸå É_JmŖGsâ9į$”ÚĀū! defãÖēģ‹˜íbķ%8QXWĐÈlĘ*‚zŽ•ĢĢų_Ų˛ŦN>´zŊōI>Im=Mgø~â+;+‰&p‹æw¨ŧ5moäKrāT3ۊ4(c¸kÁ(Ū7}ĶČ †Ūō ¨ŧč\2 ¨†Ģffō|ôŪ{fš¯9­tũB \KŽ; [}î-ĸš+„ä“Ú‹ÖË"†G8QÔÕ{]^Ōõ™bn<QjâM!ĸ‘ÉڝG| ÎđŌ&ÕįeBHĐRÍqĢØ LhMĀíÆ{Ķîĩ;[BŌĒ’:V—Ļ[˙i]Ŧ҇18(3øÕyí[TņÄO o ‘ØzSÕÅwÄ>tr+Gę F5K=Á~ŅãĀĢ[UŅ´KœČŌzcld†}ÎM 6[RŗIŒ-pĮPMY Ŧ žâ¸'Kžũ&q$xa‚[“š×ŊÔĨŅ!ˇļŲæá9n‚‹Ņg=(Åai:ķ_Ũų-nPsŌļũhņMĪÍ֚ܞ´Š1!'Ļ)ũÃ$wĨéP°ųü)ę )ĶĀu"Œö¨ö˛ēáÎ;Š^|ÃHƒ­.y¨Ôļ["ŖÁ2˜įŽ=i9äŌsœĐzԃÛŊ!4ÜūæÆqښi ‹ÜdŌsœv¤įƒKšBH`;\ãôxĄ€Ō >ÔņĀâšE(Ž´€ÎáŪ‘i@ã5% +Ī|R´bŸéIÅ1 Ž´Ė:÷§ķŸjkšĄ PįĨ.ÜņÍ(”s@h7fG4ņ͜R3cRƒŠÆįžiɂ2 įĨ;Pc ŒÖ=į‡ÅŨɐÜ0SÎŪ¸úVƌ qĀ4Đú~˜,JėAUĩ=[šãš B2ņķVšëO΀9Ķáû‰’čąN¤öúV¯öj˙hGwæ6UvãÖ¯…ôŖŒĐ#VŅįŋY' ū;Ôh$đKo*Ģ ņ]c­.Å1ŽtyîoŌåŽŲĢŽ”Ëī ™ÍÄSänMm,Ņ´…‚ŨÆiÍ@ô3SMk}2Xf20$ÉīXÚu´Ú•…Ť’ÁW<ķ]XÆ9¤DHÁÚĄA<āP#<6îˆfģbé÷p8­>ŠíĒĨߟ÷1Á•ŖöÛe“Ë3&ōqÜÔŲČ 42/tgēÔâē.=*KÍ ŠÅÂČņJ;­\šūÖ Ō $Včĩg¨â€1›Ay Ã\H˘'w|VĨÕē\@Ņ?FŠēh#žÔ°đķŲĖ[íLc?Ā;ũjæ—Ŗ<ĘDĖÛûzV˜â”p:Đ3(hP,SŖ3?œrÄÕ  ÍģZņŧ€sąIĐŧŅĄÃČ öɧÆsFĸ žÍ.-šb†:Öv—ĸ>;°šfCŅ1Įã[)ƒÖ˜Ä!ËŠ f}––Ö—sĖf/æœō:TWú^\‹ˆįx¤îEk´ˆˆd,`gu6Úæ¸ŧČ:gQ4¤ūÍ{IŸp9f<Ö]§‡īŦå& Ũąž¸kĨ8Í/h} Ž5$ŧûC€`éQÜhRO¨Įuö†ų!qŸÖˇsō@Ō‹C Sđ÷ÛnEÄS¤ÆjtŌ=.KCrėĪÕÍkƒÍ˜Œ­;Lk+6ˇ’S*ĮÅSžŌB֍oŧ¤fēô¤#*ĶEŽ yQœŧ˛ũųÕđː´‚+Ų ~u҃ķN  t'O{Sv˙1Č c’ÛÃō-äw7>o—ĐcúÖūŪ{ĐŖÅ NÖkģ'‚ÍԟJ‹OĶMļžmg4{qŠŌÆ .:qڀ9aá̏§cmuåFß\ũ+~4†Ú8ĨÄĨ78É5lôéAéEÄB௤UAO=E.)@đ c\|ĀŽÔ‡¨ĮZž)ßj@G’đĨLí4ėsNĀ…r͚PؐŒTƒŋ֐œŌ3Ôú¯ŊŌeKpjá+Đc>”Ü d `'V ~´Ģ‘ž:ŌņŠoQÍ3ŋ5'jn9Í °ô  Ōã9‘GnŊ(!öëAĮOįK“M @Įc#ŠLb”}xĨâĀqA$-POĨICCĐÃÍ×­!΍Bō@GAH Ī)ˆw´ËFÖO6`ĸNVš›ë›Këë9Ž×?0Ī =*M]"ŧÔ DBE 6Oč(ĸ‹S´“pYЕ<ô§.§m*ĄŽe>aÂûšį4{kkŖpÆ6Ē4ēĒM7š@@Íŗžæ€:­ŲéCé´’>†’9ĸ˜b9ŠđBœâž~´†64ōĶ'ęsNĪËŌŽi8'€BØ8ĨŨ…'ښO^ôõĮ˛9ρ‚sNxúQëLठJû÷ĨoģÅ"PŋæĀ¤WÉĮJQËFŒzܑۑœ!Æ'š=i2€ūô˙Ĩ'|Rž´iëF9Î8Ŗ!šĄĨíHõÜäSņ…ĸ€N!įŊ/SJGą@Äį8ĨĮ4cŊ/$piœsšz)3…ŠjŽÜŌĪJ ž´vÍ&'ĩāqL@§&”ŒŌɧ¯¯j¯OJS֛ž”ãž(/ZBģ†r:ԃŒĶAä xfq‚)ÃĨ(Č Ž}Š;ŌûP1p {õŦĶĸYy/Çl–Ī5Ą¸įŧ@Š’i6“[ĨģGō'ŨæŸ.—k-˛@ŅūíN@UœņšpSŌ‰aš[¯ÉĶīėËRŗ!ˆm”îzŧM!ūt ÄŊ{UˇV›<į;Pô÷5z 6,°ÃÁ'֟km3Ī@JĒŨęČ'ŠÅ 7H‡Mķ<ļf/ԓZr9ĨÎ4™Č #ŠhÎãN#֓u WŒ P8Ĩ<ûRįĀŧŸzāžiØĀôĄ¨­ÂķŌ„ųģwŪ p)€Đœõâŧšvė(Æh6PxÎ1Q熑F #jbxū”Đrzb€ ŠNžĻ”qŠA¸8ŖÚŋäŌ“Œ´„!íIÔR÷Ĩ#&€ƒŠ\”¸ãŽ LsJ1Ž”„āõĨ"jiX⚜S‡"¤c{uĨĐ xëŪ¨ôåõæ˜n™¸Ą†FŖņۀ̀iPôāŠ9،ķK‚ įŗKŒƒH˕Įzz¯„áģâ€Zéč(J帤=¨9ŨÅ/SHĮÍN ېœi9&˜ Ž 7ĶŊēŌŠV¤^ ¤aŗH:šRyâšG˜Ļ vČ.wˇũķXr0ÕncŒ(Œķœbώ0ÚMąČ’Å—€}ĒŦMÍu×,Oü´#ę*OíģcΕe ĢQ™&ŗ]„ü…Wĩ5Ž´™Ÿ˛ˇ‚‹ŽēŨ†OīĮâ*AŦXuûB×,ZŲ§f[ghņĀbŽ[›eĩŨ&žÎwc8  ĶĢØãū>ŖūܰōØ~°šīLdŲúÔĐž›3K Xú ,ÚkV¤ ûŠwöՀ8ûB×/¨Į¸ÛmnQÁ u5kLû4ÎĐ][ dRÛą‚h°\čŋĩŦˆ˙˜˙:–ŪúÚ䕊Uv@5ÉDÖ÷ȋlĸû}ęõ” câ?*2v0é@$’ĮÜė=ÉĒOŽéë!S0ã¸Su˜|ûTV"ËdãŠÃÕmm,mâ0¨}ũœŌ@΂fÆrvÎŖŪâŦÛ\Åp…á:ƒ‚Erē^‘ Ō9fTR8Zę-m"˛ƒË…vŠa¸ÛÍRŪÅŖYI˜ ĸŽC‡šããē{Ŋqcš4uV : žīZŊžIÉ0‘“¸’Eubų›K Äp3JÎąŽY€¤×-ĨMsŠj‘ܲ#RĮCUüGw3ß>e: ũęé¯u[{C+ŸĻjkK¸ī`DŲCßÉ^<ķh15Äd2¸HįĸVîÂŌŲcˆŦ=K0ûƀšÚöâ…`×;â%ŠŲ™Aäp*ΉĒË žrŅã‘Ū•˜Û6øÆ&yæšHuÛŲ/gˆ&câŗũĨ7´c ƒNšÔį¨ĨfĨ‰Āõ5ÁoP[‡¸BšÆ**æąĒ\OĨÚõ_4ÄwÅ z¸t Ŧ=Å;91\]ļ§}gĨ2„ØŠŦG­YŧÖ/×Nŗ~P˙x㊨°i OĮjŨęĪnŅČn>ņŠl5‹č<ųo•Ė@de{úQ`šÖg'9Ĩũq‘ëúŒ—i"¨13mTÅtÖĻtëp¤Čü(ô4ŠĀZÅŋņ-ĩœæV•‡ Ž‚° Õu;9.7›‘ŋßŌŠÂ—2ę,)™KA#Ÿz,;ûiūĶiáJīöŠIĀÉíPÂaX …āwŦ o^ˆCqis'Ũ.:ZCŊK­{O´“Ë’`[žŪqVm/`ž|\āãĩyÜqĄXžUv NBõŽ…n×GŅKx9&<įņ§a\ë}sIߊâ­õÍNŌę#vYĸ“ ;{Sõ zūMHĘ@ŧ)XžI#‰ ’0UKUe’0čr¤pGz䔤ô4cڐĘyæœā˜Î:ĶVœOËøRË[<°O{2š?ÆĻĩž=CRWš\Ÿ(íšuÍ~Š į4â°ŧ(Ā”)ÚãÔv5ĄĖYŪ‡˛X‰íæSnŗ}Ų@=ĒņŸ=ÍÂ\>CķŸjšĒÁq<) UY'JĀūL/û´bĄ{}jŨŖ•Ž ‹ËU :Ôzâ¤ŅŦC횸;?"ŸįDĖe‹Pa÷w1@ļÂ7‰Q@ažSÖîEĨØBģđ*ŨŸüxŎ>AXŪ&Į—'M )hËlŦķŨ`€p 3Wįģ– äkm)!U;-ƒK ëš|āö­3mmax—’K Ģõ5LFtZŦ‘(‹ĘËo,äŽ@ÍB"žķTÛą\Œ–ZFN[×zV˛¯ô {ŗŧf9Vč¸Ú(iW֖’\ūņV"ß/¸­Ģøõ]ŖF §žõ“…bY–fe€ÅoÁvŅĸPĒ\Häl<¸|E(r9fĒÍ4–7W ‹‡Č89âē|=Ū5ĘHCŖÖŗ`đėˇËænŠelŨ‹€xbíŌ魉ʰČö5‰œgžū5ŊĨhŅi¨YˆyVĮJfĢ ĻĨ*Č$(ãƒÆr)_Pļ†vˇs΍‰Ãa€8úU-JxßEąŒ:—QČĢ ˙„~Õ´ī˛d‚âũķXƒDyoŤqēÃųĨa÷ЊŠ#ēˇČČšöģ+f4vĨ[`ļũ*•ī‡"甐ÆP霊ĶĶė"Ķí„ķũæ=IĸãąĪé/öÕá įņŦģ{ļ‚öîDPĆę8ŽĄ4xīšåKåŗōƒĮ4CáÛHa–c(#'°öĸác“eFŌDžq/æsaVī&™ōÍö°­vđŦ"ÍŖYO˜NC‘ŌĻ“Ãqļ˜–Ģ!­ģyîh¸XĨĢŨE&FÁŽW8íÅgß]Dú” Ųe$‘é]ˇMkf;‹ō_ŪĢ'…!ŌFōæF9W ĸā‘ŠÜ$–Z|‰€UpqÛĨ¨jj4 ÃĘ ¸ã­] [>Ÿļö ‡!ę햗mchmÕw+}âŨč¸Xæŧ;wilv˖™ØÎ+GÅüÚÛķüŌŽÚøvÎÚûí)¸œåTôvûOƒP‹Ëœ3Á‘EÆr:ŊĘ͆×RĘ:ŠĪu÷ŖJœ'‰ŗ1+“ô­Û? ÚÚÜųŦÍ.>ęˇARÚļĸ.Á`wn(:EÅc`7Ŧ zÖÚ *âHâ îFX§5ŋ—Ĩr7ĐëzŒō[4[`-Įõ  ˙åĩkunGÍÁúVˇŒ7`ˆ]Ũ1Å3MĐolõXöãÉ, t—Öú„Té¸uÔ0ąÅjˇqŨC`ą8bŠØÕvę oėáü‘(ķĩˇeá›;;8–ē Ŧš­-õMV[iax.7y{Ņp!ņ °\Ae<'÷\¨8ôĢZ­ŨŊæ€L/••IĮSZ×:ĩΟ™ĘŦu‡Z–=Ņ4˙ąĖg“ž¤úŌ¸XäĩKčfĶ­"iØ8<Ž)ú•Ėͧ2¨< Ãņé[§ÂļBŒË6wg‘íOo XģFpÃ`ėz͏XÉÕgū 4eĮÖĢLV?Č„qšų‹z]Ú´×évK¸ų{RjļÔ%ąd“ŖīEĮb֟5´ļŋčŋęÔíôĒ>(čŽIÁÜ1Zvļ‰gAÂ(Æ}i/ė"ÔmL’¨ Ō’YwxIĶp%däw֗‡§ˇj+J†Qœ)=*õžmii5ģfE—īLŗđ坤í ÜųJwŽsLžŽ riebw–QSFžŖremŠųúæē|1e ؟æaœĒ‚sᛠ—ķ6´g<í=h¸Ôx:ëgŦÃ֋™!oÚŽSÎ ĐuÅuĪĸŲŊ‡ØÄ{cÎxëŸZ§…ŦĄšåŨGDcÆh¸Xᝒ!` 6&˙j¸Ō!ņlap@ãŸĨlŪørÚōņ',SÜŖTmá¨?´EŌ;*ƒžô\,gYˇüUŗäƒÁŦ¸åŽ-rvÂĮŊˇ3Æ{W]…Z‘ŧWmĮ9^Ŗš§{á[{™ĖŠ#FXå€\,iØÉm=ĸ=žß/ļ*Ör*ėí–†jaR4īõŖ‚1ۜQšoC@Ã}iĒÁËŸ–œ~ņ u įĨÉÉ ŽMR3Û4gۊ Á¤@…$ŸęÎ:âĐæ›!Ûojrö2ŧŽŧíÆŠÎ&Oœī\ōAÍX‚TVŧ/Ҟ:õĻŊų:oŲ~e=OĨh@°^\Cn‘<-’G&˜5Ôė2;F3׊ĢÖöŨZy’îl( ŠĖhöJa*ŲĶژĩ-}ĸæ(Ą-7—ōŖĢF˛ø~R įqõ5Ģ]$…"OųfĢļž_ü#ŗ|ˇ%…!›soĶáõÚ+#įōD¸čkKGĀĶaúV‰ˆōcgu.ĄĐ¯§ÜC‹0”°õĒku4W0ŧۂĢķÕ%ŦFm-ˆÁōä Gĩjj0E`˛ÄĘJŽ1T"6ÔZöwŽŪäCŽ8ĩWQÕî%Š[YcU'ŒŠ§ÚÚîĶK@~ŌƒŒTOgxÖŌMr§åqɤ1ōiˇJK‡—€ŋsÚŦY?›y§6WōŠæÔ-âŌ!Gå(0žõOLtkû0¤úšb:Yîc´ˇyd8UæŖąÔĸž…¤L€;5gø‰CXšëTô›M’īĖl˛0+Ú§ĄFŧ7Í%Ô˛ ã6Č1×58Õ--)™v)Á"š$1]N䀈@āņI§ÛEsĨŨ´ŒsĘķۘŽĄuK?(Lg@§ĄÍN.#1yĄNšĪÆÃbŗi\<ŋpŖŌ–YæA…L#ąQ`š×Ãy û„r+× ŸYŗļŸĘ–]Ŧ:ÖFĻ4,nƒåL|`÷Ŧ0#–kƒrÎdäŽ;š,;;mZĢւ.p쎆­Í”†t÷—ŸfŠVIEŨĪšˆīõMJGšŽeŠ(žđĪWMŠFN{”5ĘiP#hēƒą Ž´ŌYę- yæxŨ,™ę{ՙĩ;8„lĶ ÷Nz×!ör|1æ‚@äûöĻŨYŦz ĩÃiY°9č=(°\ídŊ†ÖWuzņM‹SŗļÅq?ZäŽf-cĻڒ 6 üé×ZtQëvöë–˛cpV÷ ąõ+XŽ’ŨæQ)čĻž/íšāÛŦĒf r´)˙ $1'p–hV/Äąä œjˇcŠŪÍâļiCBŦŨaZwšíĨœëÎsßhČ‹§lˇņ]ÄJ¸FÜ>ë3Qn/.ūĪ‘U÷;@ŧzŦļŪzĖĻ02NzT+¨éĪ,DOų8R:šätëS>‰|ÁʕÁĮcŽiú/˙~Ō”8ã{Ņ`šŨšĄuŦØÛ:ŖNģ˜ãœ}jãĻčYA#ƒÍp–Ģ&Š5ŦˆdrÅWØį­×ę:ŧЄYÕe|‡Z’MbŌÆ(EĖÁŨĀûŊũëšņ%ŦP]YÃāė ~™¨ĩË%]JÖČۊŋŌ€:mkVû€šŲ‘‰`Nj[ R‹H%–DY$w5‡Ŧipéú@YČ|†=ŗYMeˇDKÂXš|ž .w˛O CĖ’@ĢŽįŠ†KûXāķŒņėčz×4ßh玊æIV žsÛ­^šŅ…ž‡4ė[!÷ 'ĸŅ`:”Ô­$•"ĮŊų5mžQœ€&š?höķĮķHûՏ˞3]<똟Ž6šL VúÍĩÔō$R‚# Ž~´äÖlŨA*ųqđĮŌšŸ[¤×WĄHČüčŅíâ{ GÍRáĮ=ÆiŲÁq ÔBXd‡¸4æ #@ú×=ᛇû}=8­ËˆÖX 6pr !œļ™­]˙l4ÎļIč1]Tp]GžU—§¸ [8ĻÖZŲ‹y{ˆČëR@ōØ]ŪĮĨUī֝‰;}l&ō<ôķ?ģžj9u[(ŨŌK„ Ŗ$f¸í+J}IÄÂrŦæ=ÅV–ÅŽ´l˒L›K,;õĩÜ7‘ųHsÔT åšĢ;HŌĶLŠDI|Í힝+HRqINŖƒŌÆœH;™ $v¤ĪzRF)Ēx4€O~ôzĶ|SU@æ€2E@B1Æ)8Ąžá=ņHg' ;u6oųf˛ķųÕũSL7f~~…}j+(ŧķzŦ~lņZb__[ÅJļâTníZGÍõœ ņێ•Įs%ÂĖ#mÊ~™­oí™7ĒƊžAúUģĶr¯ģ`€Ŋ¨¯§ŽĪ>i•˛rBԚzbÚûo)´€}j]*Éd™ĸŸ.Aö­‹¸ĸˇĶeXÕQvž‚€C4oŸM‹8â¨ø˜".9ŨÖ­člœœķ“Px—ÍŖRę>†fœĻK?%X¯™&Öa銘Y_iķēD†XœsŠMØŨØĪšV oCNģēÔôæd˜8=0)ą!–ķŪZģˆ,Ø+uR 槑u‹čĘXŖ={UØĩč^0Bį?JĄuĒ4–“lo-ÜŠP>ô5žkf‚K‰I*ž€â¨čÅN¸…W'ŌĄ‚帆ŪiWpÛsú֍„I‰YaT1ôĻ#CÄP—͉@KāU-íRXI ‹8$}ã] ōÅlōu&¨ÁŦYOp-á,Iž…𮠩ûŌ\XŪÜhVŠä9tr6ޏõÅv›†9â—+Œâ‹ˆâ.´[Ëk;i„{XĶŊ-åĶËyg¨2ėÆ'Ža]N§j÷ÖmR˜˜÷Ŧ¨ü94G ÍÖčĶĸĒ˙Z.3ĩÛk…ÔãžˇX ķUŽ-59u8æh™d—Hč+šH–(Õ|Ǥ ČZ.8člĩ$ņvŒĮ—ÆF1PÃg¨Ų^ŪE%Օb8#ĩv~Ŗ4㌚.ĸŲ^6Ÿ~‚6Ѕc&ĸŅm5ŧH”IQžįČĀ˙ë×as}me<Š™éš0črČ#ŊpŪ[l 68ÍqąØë:Ą™"ōž_k´ŒĐOp)&+âK Éî-§Š2ä(ocPkē€{ü’Ōnjíųŗ]ˆ!¸ČČĨ8ęN09ŊVBëBQ4{Ļ-š•GAX\Éũ”ļ.„:Č^ä}+Đ'š8!y¤lFŖ$ûV]ĨŽ™¨]Fæ8<ƒŅOŌ‹ÎŨéWÖņZŨŦeŲe@ÎÜVŦŖSÔ´)XU]°Uq‚Et˜\{R61ĀĸácŅ,utŽ`ņ[ÄÛ°xÉŽĒ`ÍĒõ*@§™ÜĘ é“ŠxųšÅ 9 OÔlīĻFˆĒ:,J“OĶoílõš,åįŠŽˇi Ņp9Ÿ X]Û4ŌLŦ‘°ĀVî}k XÆžj\āJ@ĸã83cŠYę*Ä7Nü|¸õŠ´­:ká{1ÃRĄs]måĸŪBbveS×iÆ}ĒKx"ļ…b‰Eč)ÜV8í5;;ãn–åUÎYxĢë67qk,qIķļQ”gšî"¸†gq*pØíOŪ­éEÂÆ^…esonītų’FÜFzV§BN(GWRPƒƒŽ)pi…:šiëÅĄãŊ;RSIëJIⓂ:ҍyúŌNíIÔ@&x4Rœ ր2jI0"<öĄM#ĘE!˜ē! =Đīģ5ä~DŪ[’mɁAíK§ÉöYn˜Š![ŊjûŊž§ō|ÁĶ<WÖäy/ĄŠúŨ.-đÍŪ8¤•-Ūš(ä0iŅ\\ØHVæ(‰ Ŋ‚Úv–Ũ ũøĪĻ´IËjRrrŧfļĩŨe(˙d×0Ōįûe¸`ĄŗČ­˜õ8īŦĨįlV†ē ˙‰tSQx‰Đī¸SôÆÄz8Ļø‡&ÃĄÆáK¨xh⠉2]VöyĨšÕqg‘Rh÷Į§ũŸūZžāúU.x’;¸Ĩmģ”â‹kTŊ’÷Lˇ¸@@Vų‡Ą ë—é í,í>øĒH§Dš3¸lŒt5 iQ¨r\?+šb5å×Ü$x´'#¯­ˆgŽņV•8'#­dÔé+îCᎠ'ļŨB¨$ŠŲŗÖîäÕR9SlRtVŠŸPפŽíᴏĖdûĊ§(kŸ@Ē8P9•M$d×åUqy ą>” Û_ŌÛE‰7m ØšĘŸVÕ˛‹ōL>QŽ+SW´ˇ“KPŗG)Ęú\ėÉpļŅN× ÁNÉZtæk/BW|< dƒĪZÃ]{RY~ŌÄ´Lq´—éZš´ĶMáØåČÃ(ŨX˛JĸEēîF%—ŊjjēÅÚ%ŧ°¯–wnÖļ—~چ—æ˛îeX3XZœåt{H/Ė€ôæĩt9`‚ÚÜīe]ĖØĀÉĄė3–[{‰īäXc%ÃG\s] ūĢwi(ŠšOŋÎIÅPĶįū#—q32ûfŖž2\j7k9\Æ9Ā„j_ks˙e[ŨBž[3`ƒÍ2ķ[ŋŠÚŌãË Ž9ĪņVL­˙ p9ħ'Ō­k7QIĻXDŽĒįƒŌ˜zގ7“ Ŋēíš™AÎ~îjĩŽŗ¨Cs%Ĩ‰)#<`ũk?R”}ĻĘāq˜Ô’=ŠŅĪöÍ|H€ ƒôâĸ]sVš•2į üęΧĢ_]\ŊĨŠŲå ąS‚Äu¨<7uš•—‘€ Žj øĄūڔGt¨ŦrĖLö  š#ęŽŖ ķ34p‚ zûWbN:W ĸL֚ĶÃģáÁú ëtûá}h&S’0}Š0G3âÆ™ŽāWPøO­\MNōŌęÖ cUļt ¸äž*°ķ-A÷$ÕmFũ.ŽėŅË´`gŋ dúeūĄ6ŗYcØ íSi’Y›mļxhׂGsTüFŖû"fÆOΗP2´­Zæ->iäûÂĖjÅÖąë3HĀÍ÷Ttúb¤Ķf˛mhevIX‘úURđI§ ęCp‡åR}ę€ę´K›KYå†é[x™­SšÉđôōÜi ÎI*p ô­|T°ĪA֗8¤Ī͜ņG­!ŠNGÍ&iWցØCHaJ{Ķw`āqH¤<ŌöĪ N”ˆ:ZVĪéH;Rš!ŋ†`iōÍü…w`ō* c„˛]ZKą‹ §ĨOŖ2kĩoâ$YŗÛ똍ÎQŽáíVAĐ.§‘‰‡īGÉ4Ø!ąÔŅɡØĘpF0j7ˇČҏ Å&#hĘHĀt Šv Hî´1 ļv#ŠCŪ˛¤_)|č\ŒŒ2‘Ōē››Û{`<× };šætšîEY A!ų˛(@·@B4Å'<’iuĐŗ$ĀĪ šŽVÆ–“9¯ĢØN­ I•aŽEs–RNzr}zÖĩą}QÃí0ڨÕĢ"ę(­Žq ĸD>‡ôŽ’Ã[ĩ$;LD`Gž‘Øé(ŋu=IĒÚŊŲ™#ˇĮīrKÚ›ŽÆíåoš5l0öĒņé˙fž[…r` Oû´€§ĨÍo`ķ\Kķ:|¨;“Vt)~ŅŦO+ Ĩ`+Dķ%šEÉMÜ{ÖÆˆ‚-eãø1Īj`t—Vą^Û42ŒŖUtXb´{PĖČį,Miģ\œ*”z­ŖÎbYÔˇN´€ŽÃDļąg —cÆ[°Ē“øjÚI‹G#Æ É~}VŌŪa’€ĮôŠfŊˇ‘¤•BŋŨ$ŌÔ4"MĶė‚Ûa)ÔķÉ5DxZŨgÜec÷?úõ§.Ši Š:†nœÔ‹lōyk2ôCC* ÛÅqæ3—NĄ XŊđü˛+†1°āãĄyī-á`$•TžÄÔQkO)gRã­†‚ĮĨC äw*ėP.ßZĢ{áÛ{ģŸ83#–Ŋ]‚ūÚéØE*žŪ¸íLŸXŗ‚ábi—qëŽqOPЧŠirÖɃ g ™Įĩ^ˇķˇ™ŖÎvõëiî HÕÚEz1:Sŗ Ŗ W†#Ŧ*Ũ$žFĀŠ°t5šĨiqi°C¸šÉcÅ>ŪöŌöFX¤GdíPksÍo§;à I?ūĒlžĩkáv vĐx&Ž*ŌYšgˆa‰ôŦ}XÛbdŊšŗáwu­Ųnâ†ØLō(Ũš,E94+C§5ĸ‚¨[vsÎjĒøVĶėūS3Ũũū•ŖŠisIË´uĪĒŅëö2NbķpGC@ô&—D˛žÚ;w>ZíVî)l4;=?&4,į‚ÍÉŠ'Õm-<ŗ, û§ÔSaÕmgšhu.;RÔD'@ąŋiäŸáíŸZž×I´ŗI’(ø—īR\ßÚÚcΙTúXŪ Ô/-L3[L‚ãšŖQššŖ<ą!ŪsËâŗađĒËĸä퐚(ę{}*m7ÄĢ<‹Ôf)[€{ܞâ"ķ%*œ“OQ]Ö­ģĸåÆ ˙ ŋmk¤+ CŖŠŖcŽŲŪ\ŖrœÍ=ĩģšHLß:g…iqeĢ/ēGZdŪą•áb„y@ Į­]…Ą¸‰ãķ?ģ¸S/ĩKKĸyB’xMB |=c5âÜēá _xc’3€PŒcļ+Öĩ̘&ˇ{9Tà Č8ÎkrÖúØF%V™@, ôĻ"đ֞.<ŅãøAâŦŨčöwĸ?:?šÂí8âĻģžļŗBĶˉčSKiw ä"X:˙*C*ž‹i-äw, ;qŌĨŊŌ­oáĖ>éVháBŌ8Py8Ē6ēõ…åÁ‚90Ũ˛0ŌCBÕĨœ6Ë \ õĨšn h¤PČũEs>%Ôä7‹d’˜ããyšÖŌ$ˇĩĶwũ¨Ëįį~ÔXEyŧ3ÄŲʂAesÂ”øbÅäLPŧ;ûU›oé÷7ŠĪ†­•UŽX(ÔzŽ4Š%DPĒŖ”ėŌ#E.9ņž´ŠR8  ĀfÄÁÆiØČŠ::R)ÉįŠ I€{Ō‘´ž Š@#„ąûĸ×Šilq@Ŗš$áJj^Ŋ) ål/’Îöc( 1=ŊOyuepÆXÜŦ‡¨#†­—Ķ­ZC!‰KéGöu§_!?*ģܛÄZœđÄņšŒvJšKbE&q$|ũá]ömĄ?ęōĻ.НžBāûS¸Y™“k–ŽģžÍžOö€¨ėäĩē—Íē’4 ~XĮĩŽ‹bˏ$Ą¨›A˛ūaøŅp3oŽ-ķnåXBõy&–Âm4ÄEĀ\‚väsŠÕą+Ÿ]ÔXãîˇįEÅcö[(îâž×c"ũäÅj[ęZ[åR3ß+RXäpü˙ĩJŪ˛8ų\~4]ĖĄĢę°\Æ-á9ŒˇaY÷7åH␞2&ēDĐlUB˜‹ÎIæ—ûĮÜ~Ļ‹…ŽrÁ hļÜĖ5mÛ{ąĢú+‰õŲĨŒ|˜8­_ė;p9÷Ģvļ6öKˆc žĻ‹ŠÆˆg1X˛mfãëOĶŅŦūÛæâE$ôŋŦ؛Ë&XÔG"ą4›kÉāhöF ’Xw4-”Ąˇ[ĢK™Ũ˜œįÖŖžo7OˇRųdb1íVVŌūÉäļû9o4`qĮÖ¤ŧŅî-ė`-ÎI/´gÔÄAsŠ 3ÆâŨũĒÍÄi¯lbÆ S‘Ū‹ëkãšvÂ(<ÕĢũ>å.ėä‚xÎ|ĐMQ<ŨyQ€*ÅGZa´ût[Ēá3Œg­\žŗē}v)´•ät÷Ĩ[;¯øI7ųfîŊąB"ąUƒTģŽʅ sŌĢiö‘ŨAtōré÷yæļ­´Ųíõk’÷r)Ú˙Z’ŌōÆvá-ŧņކÜy­Ŗ@ŲĘĢyŠ5+$ˇąŗœ2IŒ’jÜēUÔ: "!i ›ŲGZ5;kûŊ6ČvÜŧŖ‘é@.TÃŦÚē!íęzĶu{Cŗ†$,Ŧ~ĩ5Ū—¨ mb,ĘĢČ9æ¤Õ!—QÕaˇŒæT@$=”Đév‚ßÄ&8wŅy'éZū †9tÉŠ%FAôĢ–tvQļŌYÛī9ęM7VļžįO–+|o#šę) …ŧPyJo˜8įîŠKšŨôû(¤vÛÉ?LÕy-î-cd”˜É8ōûĩk_h÷’éöo{™ Ŋ鈚5Ž„ėļ8 œķžÕĪË9%[vSģi“<é#˛ŋŧĐ ŧËļ_āŽ­ež‰Ē‹(ĻQ_!ëīHaŦGĶ4éCJm<öĻŪ[Ggye$“yäĶukK›+8f`@ã¸5sNŌīõ) {Ŧ¤PũŌG'Ŋ1 –õĪ ŦÄc ƒĶŠE㠝ËÖ´Ģ÷ÔDąD]F•1Zļ™wwaT 8#ŋJ`s÷JĒmf[ab ûÕũfHMūeŧ /ȃ§ÃáŨR{x˰Ę›‘]ž‹ByI8PˆĨpą_ÃAäL‘<­†Î\Vņíëõ¨ã†8P,hĒ?Ų <ŌšKA ÉÆ1ëGn)OŠNØЏīIœö§īL yĄ€âOJLgØP($Å Æi„ ô§”ž´ˆí3Bũi“ŋ•Č?„fĮÍ(8×9kŦ]?š6ųÔqŌ¯ZęģėyTn‚zģ æ°?7ĩ/õŽmuĢ´Hņ%Z5=B:!`¤1ۚBšŋqy ¤aålqO†t‘ļT÷ŽwSyĨĶbiĸÚÛšöĸFæÎÖēX÷ GN§Š\đMdŨk hü´Ũ,ƒU—Wģ{ [ĘÛ"IR°ôÍ/%‡8ŽI5ĢųŪ0ƒyÚŊk¨ËáBzĶrpqGãYZÕŨŜHđ‚pxŦsŠjv’+MĘ?¯Jë Å)uA–aSXZļŠ<Á $ŦÖŧÔ§‘lå\ą<ņÍ`v9â”áG퍔‰AėŋŌš;Í^õîZXØĮm˙ėą‘“@9Îq\Ûëw_Øë:(Ū[k6:Uq­ęį<ĩᘏŧh°nE.sۚæ.ĩÛŦ[4(ņ’:äúRĻŗ{mz‘Ũ"ĒHxō(°\é”{S†Ü“Ūš‹Írí§x­"ČOŧqšŊ-åÛhë(M“0úb‹06ō) ŠmÄfš+=OPŗŧH.˜˛0ęs×ĐՍsRŧĩŊ#ųc##Äh°:ôCčk˛mÄzP’ÆF]wõ<Ôęvļ÷)m$d~ƒÆÆuuöØßé!SĀcXYá×mÚOŪ7Ë´æ€:]CIƒRōüâĀ'#iĢq˜ā1Û+žs§RÔ-u…‚åÆÉGvÍ7LÔ¯ŸX’ ;‰ô ¨N})ĸhÚS¸.:ŽyĘ\jšŒŌÜ=œÉäÂzd՟ ‹Ģ››‹éøõĸĀteļdž­G Ô7E–Šœ0›x†KGQ€J‘Ī­qZeÍõĨäļvåDIėGzë( Œv¤Ĩr6zöĄ;ŊžPÍČz ŅŅu[‹‘qo9Vš!ÆŪôX.o Ŗšâ¸{šõ9C_ÂÛ5|cđĢ3ë:‡öSwģd X.vœ`TeˆÜ Ėkæãģ×&úŪĻļv× ;XŸâ5fßYģ¸ÕšÜJĄYH@CŒŅ`šÔ1ĪŗQũĻ?ĩ nw•Ũ͊įt{ũ@ę“ŲÜČ$ØājMîöY¯^Wķ3€}}¨¤āR‘ßĨqļēļ­|n!ˆŽņČ=6Š›NׯVÂîIņ'’ M Y;Sēk‰mW[6Âô:ˆ ā`bē-*îōúØÉqˆēGqëJĀhÍ,PFŌJÁu$ⲗĚsɰČFz1Ąã $p¨?!~}øŦ‹ĐæÎÁÄ*‘ĒŪcŠôĻ‚įv0ҧ‚)ÛąĮĨ`›ëãĻ`ĸC!;U@;ÃĶõMB×RH$Č˛>ŌŸĘ€;†‘°XzzĶ€ä× ~u Ÿԑ"ˇČ3Āš¨jwznŸēĢ]?Ęyã>´ŦøÆ}éŽH Ö‡¨ßÜ]Ëow îĮzÔŧšû-¤“ƒv(ÁcœÕ-WV‡Mƒ|™gnGS\ĒjZŊכ}˜Ž3ķ'aøRksMyggs 0#ƒŪ˜\č4­fmBrhņŽ2ĩmgžkÃV×0ÚŗÎėwãh'č‘֋…Œ]vdģĶĸ–Ũ> 3S‹˜Ž4XäɎ?œgœÖ°ĶmVËėĸ1åĩž‘keˆ ˛ÉÃnôĨpąÍéwvņč×vōJÛ8ŋąá5#Mö.qOo X›€áX(<Ļx5ąÛB#‰B¨ė9ĪÜÁĪĪ…gęˇJ4íŒ0dúWQŠięp„”•*rvĻ6ƒböŅBé‘FĪ4î+Ū§(ˇÖ­æÎün+ŗV,ÁRmÎyb•âɏq͊Đ\ĮJ.8Ģ;Åļņ$Ī0 3éRęķÅEnÎā*•<öފM&ÎKŅtŅ īڋŨ2ÖņŌIcđhūhî ûcã#¨#¨Ē‘č j4eÕNrOz.0u›æm2Ũ!gōXÄŽ3ÅW2ŲĨũœąI•L9ÍuķéÖ×0ˆd‰LKŒ ¯ũƒaö˜¤…ŲЇëEÂÆÍĖkâԕÜ\dôĮ˙ĶYĖ­Á [wzĨŨØšu!‡$VŽ´û[ģqņ‚ƒ§ˇŌ‹GDģĩ˜´P‘‚†w#ŠĢ:ÃÄļät5-†Ÿm§![tĀnXžĩaâIQ‘Ô2ž=)uÁéˇēEė&EVaĀ=ę;™Đícoŋ¸˛ũ+Š>Ķŧī3cũĐÜTך •äjŦ›6Œ)^0(¸ŦIŖÜ,úl% huj­…œv"ûĢÜõ5kĄĄŒL1šk 0§Ŋh=GzC āæ—ëŌ‚}qGõ nÛƒīšsʓĄĪj@#‚ži8`? s}Š4ˆ:ŠSցŒĶNp}é ĖÕ5Cg„@ Ÿ^՛ũ¯0’2.w÷ž^•Z}ņ_ČĶÆdšĪĨ6I-ˇKSƒØžĩh‹%žŠkpv >o~3WÖ4,O¸ÂŅLāG‰ąÆkgNš{>d”įb‘øS°V÷†O2f•<ĐƒĶëS Ûvۉ“æéĪZŽ…[Cœ‚zæ Ōtņy—2•(ÜZë !9Ŧ/3UšY0° Vę ب/ KIYW$  {{ŨVôēDŅ‡ jā¸ž†Æv¸Â畇z§áˇ-4āŽŧ֎¸û=Ûã¯ã@tŲ$šÂ'™ƒ3 æ­ˇjægķ­íėĻŽVŒņWī.æšú+(¤1åw3´°:dsHšÉ&°ÕŽ4ŨJ(Œ¯,Sâ9"Ē‹‹‰îī7Ë œ*šéĪŒT™ųkŽ…Ž.4Ųå{™q€ké÷ŖûI4‡åČŨžh°\×l‚sOUUN0+’ˇÔ$/t!–I7&zÕũc3“%ĆR>hÛúPâ™­bâ}¤ˇ>õ-ž­Ú@×R¨yZŠâuF†Ü§՗q Ú@™œBØOsQÔãŒy+7•#•ąž*ŨÅüvV"W`ü sËW/Š’[59ÉP ŠuEßĀŽ$’PĸÃ6­uÛ{ˇŽ4$;m=ǟˆ/îmäˆC!@sĶŊTĐŪĩvY (\~īwj—Å6āô‡ >•Ģ‹$jČĀĢrŽŌĘŪ˙Ä3@Äųdąíí-–ÖŲ!RHQ€IĄ‚+^j6r,w ĒîxĻnČ_ A'Īëښߥ:­ŋ0ÆMR×íĸ*üާZ\č!ņ •Åéĩūn€ž„Ōę:垜á$bÎ…yĮÖšÉ-Ąˇņ\1ÆĒАqÚ­GĄM>§w5Č#ģiëšÜmjÄYũĢÍ=ēįŌ̧‰tö103Û§Öš{8a•oá,ÅK'ÔUíIļŧͤžAûÔc´“Āâ€:×töI\Ž#ëGöĩœ–Op’Ģ"Ž}k”Ņlb¸–đJ„SžĻĨÃö^ Åw˜ĪJßĶuHÍĩÅÜ×A“wŨÆ6­nĮĘG3¨Y˚æNœás, ćŪāŒt¨e˛„xb; ?yŋ“NÁsޏÕ-mU|ŲÆdc¸Ēø—N•Ę™ cģŒ\q2NļĄą°0QĪŊiköĮ¨ÚÃjÔghëÍ+ÎĘŪâ+˜Ä°t=ÁŠ{ķŌĢØÛEenD¸P;Ռ CĘ—cˇ­Æ8ė)ŪôšĨéC3‘H8nixĻãŋz@8ō9Ļ)ä͇áF98  5ëLšANįĸŒĶú úRHĢ$L¯ĐŒC9÷Ô.o‹‹{`ËĶ8ÍQ’KÛwF–´†aéeíÉwTà Ī5§¨ZĩŨ¤ĄžrzTˇWĐŲÅæJØĻ;ŌÚŨÅy–"Jž9Ļ#2m.æk!ܛŖ š–ûL™Ļ†æ 4`ž†´žE ąĀ“J˛‰p<ÔĐt}ġĢwy"’œ"¯AM‹IžųįYT¤€ņŽkGÍD‹€ž¤ÔŠÁ›¨ÅcÛhķÃes ™I›§ UЋiélōāĢdãĄ­“€hë@XÅ´Đ^ÎęIPPŠcš[=2ėę"æå‘vŒ|ŋÅ[[Á qNR›ŽYKya˛—8õŦģ{„ŗ´ĩ|‰ũĪåšė'ĩW6ļīuö–LČŖ‚OJhG?Šé7ŽmD*[j8ėj;ˆ57œDŦ\ĀÖē(5Kk‹—ˇF>búŠąæÄ'ەG¤P?§é÷×wņŨŪ ‚?lVüCaqwrB2c9*:šÚ_”Ōä įŊŽšûmüöÖlTʃŋÃõ§_éú…ōŨÆ ‡Œ0í]4V–ļ­$ņÆšË5QŸÄ֑ĖcDyqÁ*(:ËIÔ$ß;ˆ¤pNJŖĻ5ųYííP:šÃŸJíŖ‘n­UđU$^0 eY&™§\ŧqĪû×8 œĐwđķψÖęÛ§-ŋŽ„úTVßéze˓Ш‡œ{Öü…ĩԊEf^īRON†)aȤ3‹…utS,q™ãŠÆėÕī˛>‘ŖIžo.yNxíí]DEmŽ5 ƒ ĸHŖ›Đ69§qX­Ŗ™ßL…§bd#$žĩâ 6ú}F)íĶz€1ŽĮ=ë§§Ĩ!$š@sš–™~÷6÷–ęĻdQŋ´°ØŨ>Ĩ|Éåā"ûWJ1Ō›*ŖDĘØÚF4ÂĮ4›Ų9bų–âSĶë]å´ ´QŗneP Ŧũ+ŽSe#:îÁô5ĢģPÂĮ'Šéš’k&ęĶ'yá‡nÜŌk-ėžD¨LŦĒzįÖēãÍ#Ǟ=ÅqE=Ūĩ%ÄíÛ˛Ô—:>§iŠ´–›ˆđëÛ>ĩĶØéļÚ~ã {KI95lōG9÷ĸāAgnÖöQÄĖYĀäúšÁņ—}{:< 4;ƒ]/VÆj…öĩmatJsōR‹Šč÷÷FÍ@V* 9mĨÔô+ŅsŨĄ "žyĪ­t77ąYÆ˛¸b€6ŒõĒͯXĨáļg"LĶŒĶ•ŦGu=ĩļœ[}˟3ÜVu…•ė7Ú^G(ĩ/ČėOoÂģAo\}¤¨2ãŊĒRÆā?. ũ™¨Zk.-cp˛cŒí ŖUŸs‚OzáŗĶڗŒ{Ō XåĄlŅ#2ôíÍ3S˛ÔdÖmŨ#,ŠkĀõÍuäÎĪjäot+ģqeÆ"lāũÜVžŦڍ°Ac’´Ž!?‡&JˆĄQ:Í“ŒVuåĨüVņŨÜH ‚Ą-“]–̧JÛÉ´]ō;Ö%¯‡<Ā>×rÆ8Øáz  z=ԗē\SIä`ãÚ¯ĮJ†Ų!ŠŨcˇËĩ0é˙× bhÎHÎqO<i9íH`ŲĮEž´ƒ’•šR8âŒņĪZ.pF1KĀ4ƒ§ŠÃš@`‘Æ=i˛ąHX…Ü@č*Z†å™ ‘—¨SHg4××Ī!‘[nÃĘ —Pē{Í1$+› UmJķÉ3œ…'ƒN–á_JTČzЁŠ5ÍĨ‰!B‰8 ŪŽiڍĖ6īæ#2ÆŖž‘HˇÚA=ĩJ˛G.†c˛čšaCXu;é¤ÉStÅS:Ŋį›"¤ā tĢēEĖrX˜7œõ—­žŠēfÆŌsš`tút’Īd­0*ūõ‰ŽÜÎn– qŽõĐ[L'dLí=21X>!;o!=‚˙ZžĄĐmã^ļ”Ė@*‘†īŠdWVÚJIƊ˙7š­FHî´_26(Õ Č<7´ˇ™ĐvĻˇÚ•Ô–ö˛'Ëŋ¨ÍOĢN‘GlĒIdįĻk>d‘4ë'~"ŨÛ¨Šõso,:K´•ãõ EXEôĖlԖķß×BžLjX(ČFE­ÔÆö-ķŽÕAę}(cG#&§¨5ôąŖĕ Ž•nMZúÆÖ%š0e|āˇZ¨ōĮˆžIxU~MYņ VÖá>냊jjš„°O*įpĨ‚öųôI¤Ŗ}ã×igˇšŌ%ōÜ4ĢĖŦģ{¸“Bž ßŊfācĩ,ώwš¤•.ĮhcÔSmõ ë¤IΘ’āō}}+9šĶc#oAõĢēƒ žÃä°r šĻË›ūNĐŖāzU)ö}uŌ912ąƒĀŠ­ä0ø‡k63ōū8¨Ŗ¸ûģ$ŗpONh˛ˇ,ŦĮ2mˆõŦj2[ˇˆōŊé[ŌĄIJ•,3ƒÚšoēœ<ô\ūĩ=FĮiˇwv÷ÂĘė–IxųōŦԎqĢŧVˉ •v­–+ÍjĐÂÅļ¨ GlTzcFž&lžF暠;8P¤ŦrB€k™Ô‘ ņ%Ģ`ÕÔņÂš ZXÛÄPR9éSÔÅŊH"kļeÚ%'įĶŪ´o5Qk7”ą4Žs=*[{+hŸĪ†0Yųß×5†—1Ųø‚å¯#8“„b3Å4ŒšôCNŽčDÍšļíīšą§jŅ^ÚČá 4yOjĄŦ\›+h–ÖÕJ7Ėo Yēr]Ém¨ŽHč8ëF€‹}}e˜*ÛLŅ–Āp8ПYV¸hm ’iSī0RŅ5šÉlö•œ1ˇŋ­VĶŽ[JÔî–ņ[÷œ‡ĮZ`oZjpÜÃ,Ŧ f3‡ ü5:§ÚÛlvķÛ KŽ aíŧģˇÔg…A'*ëô­]#Sˇ’Í-Ô–4ų1H Ŋ;QūĪ3GFViˆĀ­Š5FˇĩIą‰ųcÎIŽbÉĨŽækøĐŋ—&Jã¨5T™Žā‚øBŪ\n jÕŌõØõ–‡ËhÜ €k_¯$Ö.yi7›uŠj圎3Z6Wą_Ād„äƒí@#7_Ô.­-”[Œo8/é\íŊūŖir. ‰ęŲĩ|ZĪäÛā°BH#ÖšéäZˇWlúûSBg¤D “Éë\‰ŖvÖ-÷0Øús]>Ÿp.-ĸ”—85ĖøŽU•°ĪÜ#ņŠę2]V[Č5{HĄ™Š•ZÎבĶ]$…RvEKĒ߯úĩÔdí ¤ŸÆ›âI]V')EäzS_Ãú•ô÷Á0"íTŽu-NęöæĻXÖOdT´Ģŋ°ëA!%Ąí#֖ˆ!ņírˆąČ=Í1v—-ÄÖŊÂâBŧņŠČņåüĢFÆ8÷`˛žĩŊĢ=¸‘ ÊÃņTŅŽ˜ąļKŗe žŖ{2\ęĻĘŪũå>R¯=Mkęŗ_ŨA Ûŋ•Åŧˇr}+ õ—A‚ÄķCōíVŽ.šĶVŗK’|ˆã_—ĶŠĄčēĨîn-Y÷˛Ą)ģ“šĢmŠëWWGg1ˇĖ¸Ŋę]Ŗ ¸ōÁØCmŌĸĐīa´Õ'2îųÉUu9ĄņŊģ×LEȟvžt˛Ú^H&r÷zƒ\ŨŨČļņO°íGÎ;šëūÕįiipa ›ˆ=E&4qúSę_ž†ŌBžX,F+NÃ[Ô/`xUŅeI.GZÎŌ¯áĩēģi"§MU͝žÆķœŪ)"˜Ž–^úm ɤ“!*Äv÷ŦI.5(_­Ņmũpßw؊’Éį‡Ã÷R"ŸņŸAëU™ėΊ§ ö­üžßtwšŊŞ…o;(ûD€ ‘ŌšˇŸQfXūĐä\t¸9­iŽėī|;ÜČQ́’HŦ+$[DŅÜ3Ę*GŨ g iVĻĮOŠå€É>õs•QҤ’]&Ũå1AœõĢŪ•,ĄN()O°Í'†ÔŅĐõ4ā3͘ĨÛÍ“9<Ōp â€:’yŖō  ^Ô×”†äJ:ûS$pˆÎÄ4†gĻ‘l‹ æN3éKũkö_#ŽwwÍęļŦ˜/ZRģ&ĀMo6zŽõz’9ô˜ZĖ[ĢÎīzĩicŧ%F õĒúmĶKd$•†{“JšÍŖLbߎŲĮ‹0ē%‹Mĩ‚s,i†úÔSčļ÷7qƜäŪŸwyHĢįgûĻŗõ)omdIŌPc`Áü(Đ",hFZķN‚˙nA^„U ;[YĪ—>CĐúÖÁeD,ėī“NÁr4ŗ-~Ėņ‚+&m"Vqk…ļ-šŸŋŌ´ãÔm¤¤s)aژšĨĢy€Kū¯­-FLú|Z­ŗŽcP1TĻŅcšņY•|›qÜ}*ŨžĄ čc ?/\ŒQĨj÷&5wƒŒfžĸІĶAĩĩ”KËļ~]ŨĢLU_íc+Æ&]Ëך[kØ.ˇeV#ĩƏisr'u;ŗ’ëVŽ,Ą¸ƒČtOjŖĒę+iĐû$s…8Î)F­on°Į$ûŨ”sŠbĮJˇą…ÕíũKwöĻÅŖYDō2Æņ‚Ĩ:VŪw1G0,;U?\ˤoÅw@zŌlčÖ"ÛČō\į=ķL´Đ­-&ķ”37đîíUėuˆÖÖš˜yŽ*{­V(ĨŽ;cą=F(ŗ ĸĪöm™ēûIˆy€į4÷Ķ­eš ´ƒšĒچ§„aœ‚OEMR‹Äbæxb‚"› Ԙ@Æ*­Í…ĩétJä zÔį×ĩf\ëÖv—"Ŏy+ڐË6šMĨƒ3D˜cÜķU·j5ģMÁŨ´t&ĄÕĩĩˇĩWˇÄ…úĐTv>!€YŖ]KûĪâ§fGEØUŅėd•¤{ufc’ME&ģc#4Ā†éštšå”P,ÆPU¸ëJĖ.EŽ=ˆnj;R"åŅXŽ„ŠËoØ+ĒųßxgĀĢ×7ko§ŊÎrĄr(Áā)Æ= 9BíđŽ*ŨdÔí.¯..¤WCōāņųUī ]­Ŋ¤ōÜĪ…,.ÜSŌ-ŧ(ūbĊį¸Ԇ4c’ ûâąuMf(c˘péÛŪĨ­­…”§2nœ“īKPē5ÕB¨>•‚%bˆ=Hj•žše=ÁļY~~œô5p*M†ĸaŠpXäB0ĨOnĸ¸ĪÜÉũ¨!ķ]bdZÖú­–•§Æ†?.î§Ū˜ŠbÄ ‘"dŒ#Õ}#O66îۘƒÚššŨ¤–žzšŲßÛëLą×í/Ž –Î2:ŌÔ ×vp^EåĪuôÅU—C°˜DwUאF =šÍsgÅj5//oú(āļ2IõĻ;ØéPÅXÁUÎ* ­2Ōõƒ\BŦGCŪ¸­_PYu…ž)]Ŗ\ÛJę4īÚßN Uer27wĸšj}Æā x„û¸ãˇšUĨėkŅĄøÔ7ší•“„’B[¸QœUČ.Ąž4N¸Ĩa•âŅėĸ’9 áIíKq¤XŨL%–\įÖĒŪø‚ÖÎä@ĘėįĮlÔ'Äví¨%Ēeƒoė atn,jĒF0+'Ä:t—Ú~ČP4ŠŲڟģg-ã[‡ų—ščqLēņ-´Â-ÆBO%F@ĸĖ.ŠÚŒ°Û nm‚ÎVô­y´û[Š–IáFtčMRÕ5”ŗĶđí'{}kœšæúĘoPÜ͌”'Ĩ1Šiöą\5ÂBĸVÜWCąŽėÜŦCĖ<ķĐ›Mģ[ĢÜJ˛8Qŧ¯­EŠjöēs™Čb8fÉdĶ­f”Hđ#:ô$Tī2ė c1YŠâ+2DŌā°8āSõ=rŌÁpXŧ‡¨yÅatxM—“n žĨx¨äđŪ#)ōˆÛčzÔÖ:ÕĨė%ŌMŦŖ,­ÔTkâ9•ˆŸîœr(ŗ —œ möqcET:žmšŨaįŽšŦŨ[ÄËlŪMē†sƒ¸ô´ôR=NŨA0#Ŋ‰jAwáëI †8”(ŒūcŊ2/ ØGp%ÚÄā'"¤¸ņĩ×Ųؘ‘Õ”d ¯Žjĸ=69lį]ÎÃzQ¨ĢąEĀ`Nū.œW%áƒ%ÅôŌÍ4Ŧč;ļTæēÜūt1‡CC ūqGԐ ÛېœzR÷)#ĨvžiāŌã &1<÷¤ÜqKM'Đ(ĘæĄģˆMlņäō*aĪZŽpÍ„8lC9;;d{‰c“ ņëK°¸œ!āR[y"ÄĄä9Ö°ŌĨ‡N•î’A’+B^cC!ɲfHGōļ\õ­k}:y4׊U Āå3Q\i÷`vdŠÁ 9 ÔļģZ;iÚĐ+-°t(â}§Ũ5ŊąU%”`Ú¤ŧŌŽæŠÜŅy^ôKQUŽæŒĀč;֞š+fÆ9ˆÍW†ÂöúXÍÂŌ.øä֞Ģb×v[ī/#Ū†F`%_´äåONƗI‰PšW48¯cßО%õME—{Ŗ!\¤'-íL –gĘĩŋ1ļzã5>‰eÚpwŖd°Ģ6zŅ­ŌšPHSš]ÖūŌw…Đ{“JâąFÚŪ'×&ŠLėËqžĩ.…Ž­> §‚Âî-rIJ,’wvĨŌ´û˜õyg‘J&O>´Įb°iĄ@:g‘TĘ$š­˛ƒ¸ ÖÆģĻOtņÉnš#‚?­U}õ.-e@ 7JIƒÔÍ:{xõĨcoåĢđƒ=*mMnîĩi䀀ˆâ“LĐîåšIŽcn‡Š¤„ur1Į†Ÿ§[jPYŪB–Įæā–ãōĻØŧí`úZÂ|é’„{Ķ;–ß Ųn˜9=qRëöŠ –r´2€VĩŽôÆŌ(wÂrIčk/ÅI"ËmŊÁųqëJáb VÖ;]JØ[ŽĀÁOžkļL,*23Šåô"âúHįž'd@løŠž#K‹KاŽsŗ€¨ĨˆõČãū߄7ļîüęKģd›Ä°BÄöƒééRjzMíüÖ÷qr‹•čAŖSŅĩ{͡, ƒ‚ ­ėb“XŊąbV"2íPiV˜ņOîĄc–Ģri÷VPËŠ\JėģJSÅV˛Ņu´Ä< †gF☓a‘ÆÅqZ%ŊŧēôŠ"+(Ũ´kļōūRšíŒ×)káëčĩ‚ÁļD“ =GĨ$)kđĸęņŽÔUl—ëVāˇHŧGۄETßŠŗŽh2O(šI•p0Û¸ĀõĒžąķuG”1tˆcyî}ЈŠlŠuĒŨÂbŪŌ̟áį­vVÚY¤`¨ęsœžõËÜč:•ļ¤e´$ĢąÃƒĐZęŦ->Éd‘,ÒĮš4˜ŅÉxŽ(ãÔbug^OãQŪÅo%ũŠÛų‚†ŲëšĐ×ô[ëÛõšŊ0ũÚ­.Ą Ā‹Žåč§žh¸I ųpĒ€ŠČņQxv¤Ô.üčÕƒÁĮ5 ú-ãkÂč°ōĪ$ƒíԍއĢYŪŧ–Ŧ¸b~mŨAõ§p Ô.EŪ‹ģ|šČLS5EŅŦ1ŪGßž•Šw \akËŋĖa͚ĢqŖęˇ}Ē4k˜øÚOsJâ:]"Î ;Ä)´ē†nzœV'Œ-PC Į>`;zņŠŨĶ-ĻĩąTžMō÷ôՅâÁpm!w`ĢģGčiuC.ūŌŨ4+9âLJįæ9äĶîení#†%Į–Ãt9iZ]îĨK#h‡+ŸéWõMę}N9­@UĀŗŒcŊUÂÅ-.Ũ†ģ5ŧŅ„ÜŒ ¯jf…amsĒĪĢšS;A>õ~ÛEÔbÖūŅ)ÜĢÉ|ũî*ŊĻ‘ĒÃĒģÃû°ÄæCĶĸâąWÄQ*ęĘ  ģ@āWam6ļbPÁœ}+[Đo/gIáerĒއëZÚUŒÖÚ—q!iÄœâ“Ø}N[FĩŠōkī5CaIëžjŒŌ ąXFėĢô5ĒēNĢaq)´Úë&TŸj/<=vštaŧŠK0yĸácÃđšLO(f_œŽ¤Ö¯zÃđÅĨŝ‹‹…+š˛ö­Ū“܀iOëIÁ⎜R éF=øĨČüh#"€ pi;ōi{R(Ü`ÃĄĻ}E8ũi1ę)…ž)“JąDÎßtiG v¨/•ͤžXąŪĘZYËpōÃŧ8ėkgpš],ĘĸsÃÎīJ¸ÚÃižbczœWbQą é2–$ŽjMĀdœ×5†úŒņiņœ,‡ƒŌĒF×í)„IŸ0s“E„uJá—rāŽÄRƒ“PZÆaĩHÉÉ­bę…Ėz𯄄ÂúĐ3ŖßƒŒR“œW,×÷ņę%\Įĸv6ŸywũŖåË&åęĀöĻ#ĨÜGåËcHÃuŽoTŽöĪ@]×%ŽáƌqéU&Ô/í´wķÛtŦ~nāzPj~” u5ÄM{Ģ[­­ËĖvÉ÷TwúĶĩ^ũo# ΍SE‚įlzqFpkŒļÕu(ĩ˜c¸˜˛ČFSļ v<㎴ėō{ Š}aoŠB"Ÿ•<Æņ5Õä $ž\/Ã×5‘ĸ]ŨÁĒCnˇŖs’3E P;+ ´ës EŠį<œâŦāõŽGRžÔīuilėÜĸĮØp~´i–­5īŲ™–XãlHHä­­$tãš^â¸ģįŋģÔf_´ų-ĘGœqOWÔĻŌ§%ÕJ nčqE€ęlīņ\ĸ:„bŋ0ÆjÁúWe¨_EáŲn÷ØRŨTzÔ/ĒëMŽāHjØ/Ũž´XŽęö Œ“°QÛ=OŌŗíüMe4›ĩOK–y´č¤šBŗČÆ*Ū=)ãŠN§4áŒĶG\š@(ëÅ>ԙ÷¸õ 搞ii^) 3’(Á ž:RĮ4‚9¨Že´čϤ\b‚Š Ži å,îŧĄq’å?*ąūÉcĪß­{&7Sö}¨XüĮü*Ôz| iä2‚ŊęîA$ļĶiq™ƒ¯AAS6đx9މôˆãã¨ÆßZ[}"ÖŧÅB}íNãąvßs[G¸āíŽ{Q!5xÆėāŒ×N=*Ŧēm´÷"i,)“tĐļĩÖųŽ4đ#ˇ×DyÎõÁ>æ´äŌíe¸YŲNņéŌ¤{ínX ę(¸Ž~ĘdĶõi„¤ĒdŽ•>ˇ1‘­Ļä' bļf°ŗ¸I*)nšĪZšHm§UY0SÅ;Î듃ujéķ zéa--Ē6’Ŋ*),­d’9”č}*Ō°=ÅrwŦļēę<€ė\dRÚFo5i¤ˆ†B‡œ`s]՝ŊÚíš0Ūæ¤ˇˇŠÚ‘ UĮ1ŖKĨäąLHĢŽ™§ÜėŧB˛K÷“íšßk cv.<Ĩ2†ŗŸms2O$A>é¨āŅėāi]"ŊáéŠ.9­6U˙„zųGŪŊVF/áĮ@ōĘk¯‹H´† aŽ<$ŋ{š ´6kĮ ;ÕA;$Ņq´qחésĻZ@Ŗæ‹;ĢGT•¯4;YĄ$ĸ÷N*­ŊÔĀL‰ĨŠi2>áâē/éŌZiėˇ+†‘ŗ°ķM’†YŪ}ˇB*žäŒ†,:œV7‡/–ÜËnT™$#hÅvAcJ¨U*Ŧ:U”Fâ8€÷ĨrŦrZ‚XęˇO >áͧ4Øb–MúT!}Eu×:%…ÔÆI!ĪR*Ôvvņڋt|ĸ1ˇ\\§ >ŖįhąZŦl gæ=ĒÕåÔmáûXĻFYÜ5ÕÁĨY[ÆŅ¤ÎH#9Ē÷ú*^\[JģUb8(FA\,q×OfÖđc!œpÄ×yĻųŖMƒÍÉ}ƒ9Ē‘h|W"e‡-œ…'ZÃØqŠE.L@ÉÚxŽJœÛÍ~BķåˇķŽø`ņŪĒ:Ņ^V 2 ?EŌŨ˛õüe2>ÃÍŪFą’ äW[k¤ŲZ+ųP¨Ū0Ųį5b+xb‹ĘŽ5Tūč\,y÷ۙôƒf#$Ģn-č*ŅŊ’OF€6b—¯ĩviĻŲĸČĢn€I÷†Ū´čėíĸ‡ÉXFzŽ8ĸác›Ôõīü9šåYCdwŦûšÖ Úǃûš6ˇĩvŋcļÆ)<ŗÕ@â˜4û1möu‚?$œíĸác‘Õnã’ËOHÉ.€GJĩâwVąŗÎ<Ūžũ+¤—L´”&čŧŋšĮJÃÕ´ÛÖÕ#ēŽqž”ŽJŗ–úō-Bá<ąE#¯ŊtŨĒŊ™­PÜFŠ!ęĢÚŦ@Î#Åo'öœjāųaFķĒđȐë=ŧEíĀĮ\×s=•ŊČS4Håy)>Åoį,ĸŪŖąČĸöŽjHüMwæ8BW‚j â85;˜ˇ‚ōd)ėj׉­ä{ȌVlāōŌ äûU[=.âķRŠâ+fĩŽđĮZ\ÁcK¸°$„ķŽ&•åSá…ø"L2×_“c- Û§–ũF:Ķ_F˛kQmä9âÁŖ“ÔŽļŌŲrĨS­Xׯ6_ŲĖ’¨ŠéŽôĢ+¸#ŠH†Ôû¸ãš-ŒŪQxAō×jķڋ‚DēmážąIĖf=Ũ[či4TPާš‘‹×Ŋ'Nœ OĨâ€Ļ”’M AéŽĩ…e:Üå2@ãڙ˙Äļf `0ĢąäĐÁkæÉp\1ã4¯ŦÛFPģyíÚŗeHßCF+Ęô#ÖĢK :#Ã3}ãL.oVŲ.|ˇ|^Õĸ…XSkŽŧ…#x•AÉ$×MĖ6đƒ8 ÷Ąp’ˆëXF{‹ëƒ—ˉd"ˇAÜ2+2ūŅbą¸’4å†N(>ę;vĩi-Ž\˜ē–5^ÛO¸¸•cw&ūϘ¨HvBAWÅZŌZEÔa/Ād“éLFŲ§°Ōä#JĮßĨfi:‡Ųî]Ž$m›x×E~Û-’@öŦ=–kŲc’5` •ČäRšk¨Awnf_•G]ŨĒ­ÚK8…“Ķ=cÅ­ķ Sü+ۚą§i–w6Ë8 võį’h Kōk–ąĘŅ$§SÚ­Yę÷ĘZ#ŊAë\…Ę[èUŧŦäƒÖļü=nĘg˜)šÂᏠ.iZŅf•üҌœTږ÷ē}ÃFć#¸ŦXĄ…ôí> ē­ä8ĘėaŠŊ቞HŽ ’3#54ž$ļŽr†7)œoĮKÃR"‹¤bĩGäųúUĪ”ŠņĢ¤žGŌ€4uj$̓ÁšŒšŽ1E†§kiĨÄōI! Ø%†I=ëî//Ãđnëŋ"§ģX‡‡m {zĶ ›+¯Øųâ?1°ÃƒŽ+PW:ÚĮðvįĨCŠĒĮ ¨…āŽõ. ëũ§dč0¤cŊ+ŋ>ģie:Ûąbã‘ĐS­ĩë[›ŗdîėHáĢ™Ö-%Žû͔$lžĩjŌŅ[]ŒÛ'Ȁ3āđ8Ŗ@6u­déĒ‹†‘ųį 5ގ Úaģq°/ =ũĢÅ(ŲŲ—$~ũz8áĐíÖ% ¤ƒōŽŧP-ÛøšÖyÄn?Fn•ŸöŲßÄʑÜ3F[Æ>•GPˇHtÛ9A$=O­MͯZ9P›üSĸ/ŽSY’Ū Ō]Ã!HáOĨhišßÛŽÚXüš“9`ŲJ§Å%ŲB ž;*͛ņtøÊC!×îYuČÂČˡnėŲ^„ęd(Ač÷8ŦėūØˇb7cŋ4j†'ÖíŒIƒžŲ LŌ]f ĩbĒ%Ũ*č ąˆmŪäÚų‹Ē÷5‰ĻKoĢrķOCLŌdŠ+Ëđ$ũŲC‚iØfĸxŽļy"ŽŊÖ´ôŊZ-NÜÉ•*pĀöŽ?OޞŋgÛŧ/ËģúVŋ„Š-ĩÁĪ͸f“ijēŌiļû”n•¸U5¯ˆV}2YĀd\˛ž™Ē*Ex`”āÄ zUÛ{kx4'0ĸ+ŧ9cëÅÔĘĶĩŲ#ģšō홁 Ŋŋ č&×-ãŗŽë–úc­sš\06‰+ã~įĩCÄKáũ¯wü‡= 1\ÜŗņL7>TҘ8R{Ķ5_=÷‘A‚ãq=뜓"úŪI‚ŽH,jõđ‚oĮŪ7+œô¤YĨꉩÛyʅppTúĶĩB=:ÔĪ!ĪeĻĨ´ŽáŸ@™ū™ŦĪ*ž#2¤šC*éž"[ȤŠá‚JŲÚ@ā Vn‡Ē‹)îLōģĻ>Q×'5{ÃVvΧ4ī™rW-éTôb:Øu_”¤ö樊Ī\ŗŧ…äWØīãËoXÜÜũY˛NÁŽAa e{!n[ņ­ĪYÁ-ĄĄ@Îi; Eäņ-ŗ]M W0N}qWtÍZßSF1 œnĩËŲÁ>'xا%C}+GÃvŒˇw 1TĪ~h°.įeמũ–L$å9õõ­ūĮ9Ž[ÄöŅ˙hYļĐ †>ŧĐÂköMxöåļ•îÃŅˆ,eŧû:ą ~é#ƒ\į‰aŽ;Ûe@Pdū5cY‚8¯tÖV Ā ,槯[i§aI?¸ĩ%žĩiqb÷JøT8=EaÛ[‹\™v°Eč{ņPÛB‘ĪĢÃĢ´á}¨i|Edömr ėVÚF9ĻjZ‚]č3\YĘèāŠĀŌâOė+ų ā\U;ađĩØČœĐÁÛÍyyáŖ'Ú|ŠžûŖëTíüC¨Ų"ų鿯z3wüjáqš­ ˇilo…Ã}ė=*;WitÉáPrŋ0Āĸ+´ūĘ{M§Ė-ĮÄ>æōáŽ-Ũe›Žƒ5+KwkНīš@Ã'éQ\Æa{%•ūunXŧÍv4T;BķÍ"77Z­Ė‘,Æ8ĐÅEÅü—$—0ĄËįŌ™i$VēÄr‚¨ųPjmÖŪūkwyƒ ‘Ö„ĻâöúōVˇ“`‰€ žŧÔ:åāÕBE)Î =iú{˙gjS$ąÉ‡8\ ÷ŖY?gÖĄ˜ä/ÚMĩâ[ʗŨ9ÍaÚÅ5ļĩ5ŦRŨ‘ģÚēĢYÖæ™3´ôÍr÷wkoâšE;ÆŌ€gqt†î×Î-ą†ÍCŨËĻK/ڝDgžĩ6˜×÷ōʧšŽÔƒ Ũ(ŨŊ['éLCn/g}*-ō†$•Á⋋hm-ínĄ“÷„˚aļi4T˜DÄĢc võ§›ąwkoo•åÉ  [ë벘,í_Ë.‹~¤Úļ•Ÿ6I‚AäŽÕĒĪeĒÁ9F"äŽ3íWuÉÖķDŽâ5 žĸô˜ĩ9îbģyIˆõËuJ“Å›öÛäŒdĶ4 Ųæō­?‘2Y˙•?ÅJDvįi''æu…[Ģ‹ûí'ķˆŖŽ€TRËu.ļ›d*ÎT€ŨFė_[ØÄˆŲQ‚HęzqJ`kzdb^Ŋé.ĩ}ssyö-ÁQ;gФҭZöųR{É ĘĻîϙǛQŦąpėĄ†ũŋʝ`"›ÄË|ū´5üM{-ĩŧpÂJ™ īŠŠo ū•ĻĪu$¤†Qĩsž}ižļō 1ã•äQéRK§x€ÚÆ&8ÚONâĄÕZxg) @A'׎Õ.œæ˙ÄĢqˇ”9$j@iøĒåᴅP ;a˛3Yˇví`öš…Ž¤Ā+Û8ĢŪ1'ė°aIӜtŦyu5Kkk8áųāœgڄ ŗ-Åäū$ŒE1Īãæ›<_Ú~$h'P>QŽÕ Ļø†"Qˆ üT~–^%šæDpŧ€1í@|6ímĢ\Úy„Æ3€{āÕ­VãQûi€N †QĮséT´ûfŗ=ÎÖ Éϟ­Ėc×-Ÿ;Ŗ\ cہ’階ĄyÍļôvp$=ë'JûhbĶh™ŗĶ•ĄĸË"kˆWԜÅRĶõė ęNŒ\€@æ€-i^j:,‰´ŧ‘° @ę*õíüēnƒoåŽŲB䎕‘dŌŲh÷R4r/˜FĶĶņŠĩkáwĸZ’Ûš8î1 os{§ŨÚÉ%Ņ‘gÁ*[ĩkßëķÚÎcŽÎFÛԑÁŦ+û¸îĄĶÖ;ÄŖv5­Ļj7­•ē (ÂŒR`2ōKëA4ąylOŨĢdāU *Ę[%†IŧÆÎséWÍ!‰ųRĐE¤0íHytZBsÅ'F$Rįæ—ˇŊ7†4§4RQœw¤ ā B@“Ā ô¨.ö›Y7“ˇiÍ!ŠöđNAdFĮJyD)°¨ÛéXz<â(ᑨė^™ĢÍĒÛ q.sÎ0*õ&åˆ- ˇfh)=MZ(0pAëšĘŧÕc†Ų^"› ĨĶĩAuY8e'ĩb/Įo jʑ¨Vę1֞ąD#ōÂ.Ī@+:=bŨî<Žyā7jf˜ō=ũÁķ O˜3N+;h›rDĒū TĨÔĢA g fßíČ۟›ĩOe¨A|Ė#'#ąĨ`'†Î e"(ÕCu¤[ c(—É@㸗—ąŲۙžĀzÕ+[ĘčĨYKJ֒(Ÿ‘XŠČ$t ˜—v†éšÍģ×-íĨōļ—=ņÚ°õ;˙>xĖ@ǐ3@z„ˇfä˛WE9 Œæ›moy}ŠĨÜņR>Ũ3KkĢEkk ž÷y9>Õr}f(įbįژŽj3F¸/ˇ'Ļi’Ú[^m3FŽWĻErgÕ/ŨLĖÉ_JÜ]^ -ĖÄ瀝4æÚ*ĸP` ‚ęÆŪėm–5oz’7F*à ×9}¯MūČÕÆpŲū*tP[Įb8Đ*0)VڍF[ī:ÖlÚäQéņÜ!ŸîĄęiÚ~ĩėžV IũĶŪ–ĸš¨‘Å~Z¨U€WCeûĘY{ŒŌŨ’ļ˛H Ę)#Ÿjä4§ŽkøĖĄÚMû‹gĩ4;i-á¸R%@ãÜR˛@!ōSËé´ôŦgņ$1\l;EĐɎ+?_šŽam$,ÃvOĻEtđEml‰=Ū•$ĐCqÉQ]Ob+’Ö[ĪʖO7`Î3ÍmËŦC§YÄ%ËJPaGS@\ŠR[‰yqĢG´ŪžE‘ŖRëŅąČŦÛMnŪųBË Øk.ËÄ.“LˇEˆ •~”YŒØ]Ûíŧ€8˜äĢ‡Ú­YiļÖ!ŧˆ‚–ę{ūu’ž$ļš&rYOŨęM\Ķu¨u(ŠĘëü-JĖW4%ĩ‚xļI˛÷Ȥ†cƒČHÔF?‡T„ŸÂšKÄSÛ_˜`UÚ­†$uĻ3qtÛ§,Ž;W qšVeRWĄ"š {Ryáļ’&d #85Ŗgâ;xÖÚŲÃTũŗE„n}–¸YZ$2â#šwŲâ|ĩķ?ŊŽj†ĄĢÛéĨLŒKŠŊjkJ I7ĀŲĮPzŠ,%[T¸3Ŧ($=X HtûX%’T…UߊŦîąĩÛØąīČŨ^ßZV§oeojŽ!ˆ(s“Öƒaj`1y ąŽJã­R‹^ļ};írŠ6úŸj†ßÄ֗R•9<:Ņf#RK+i-Ä ‡EĮœm`; ‰>A…8éY˙Ûv‹pđ1`ë÷†)e×l–ÍŽ#“ĖUāÖ‹0šŖ,\FRDVSØÔiVŅlØb˛Åvec*ŽYŽ úV4īqŦkR[‹†UØSŦ‚Â(ŽdšÉi$9銱öh6lōSnsĸ°Æ­oŖC ¤ō´Ķ ÃįŖsŦÚ[Ų­Ë>RAōãŠĄjk;{…U–$d^@#Ĩ5ŦmŪD•áBé÷N:W<|Z$‚E˛JAG<×Ac4ŗXE$ëļBšaŠ,ŨÚÁu Iĸ§ąļÖ°ÛF•Đ tĶĨŧ,§ƒ$×:<\Ÿl ÂEˇ@ïå@+ĸJ0ęô5Z>ÖŪV’(Qõ uǎēíŊĨœ7;KŦŋt …üIiÔpØp2Ũ†iY¤övŌȲI3¯Ũ$r(šÂÚį‰aūĸšeîĶYO˛^U?Ä2^ĨÜ!d<)…Ά;x ]ąF¨žŠ1M{H$ ŧjÄŒŒâ’æęhˇĘûGŊd¯Šlšp˙'Ũ˙oéH uˇ‚.U›‚qÖĄ}.ÎYDĪ3g â˛5-V×RŅd’'*čxāƒSøjáŋąÚIĨ,–=ZKx匪 d=AÃajmžÎ`O/Ÿ—Vt^&˛{ŋ#æ8G ×|@Ö‹{p ˜É$dE˜\Ŋo Ø[\ ã‹į9Č}ãÉū›§ë\Ųų˛8Bŧ>īZ¯˙ 5“Í$Y* |¯ØŅfFŌļXŽĶĮzqëXúĖ×VĶ<¯æ(ėcÜVĀëš8 (4œŌ==i1Í(8Ĩ<ĩ'JCĪJ Ī „Æ:Ō)ĮëH>€Ō Ŗœ!øĪ¤'ŠŽd2Âč Í!œÅŗŗ](^1R"¨Ņ°2[­\ĩŅĨ‹ĖŨ Ã0;Ô+¤]d‰œÎUsÔÕܒ´ŅƒĨÆáH õĢė‚ tHåŠÃJ”éžAaæššÚÂ_°<ɸˇLv§q"ŽgÄE>éČ9ëVŦ_ËŊšˆ.:wŖMĶ'´œŗËˆĮđƒÖĻ‚ÁāÔ¤ēi¨#TÕP:ŦŨVĻ“oŗQ¸‘îĮÔ4ÔõF‘¤ pMt"@#\ØQp)ë*›&W$rĨgx~%GiQKI­ËģĩZû†ę{QpąŽHÁĪĨq7Ë x‰6.z“žį5Û9Îq\ū¯Ą\^j qnĘ8įŒb„ ŠâĻ…Œ ‹ķn1QëA#ąĶQC`Íjęz^YÄĢ(ķbyŋŠąÚKËûkXßÎh€8<zPĸŊßüL5‚̏Œö8ގJĶŖĶa*ŒKœ>ĩŸŠxzY'Vrm“—§?ZÕĶ,¤´ˇ 4†I\îv>´7 [Rã0rqŽĻ¸{ĻŽ_~ķ]Ų@ĘT€AÍj~k‹Á5ģĒûĀöĄ!ņp­ĩ˛Â ”Œ'JMbáÔ4ö6îÆvņšŊsáą%œQC1OÍÜÔÚõÍŌI¨Í”ˆ|›O4Šß)׎_qÂŽ"ŠÄÖá5Sō°ųr+fOÎēotʎ~sߐø]ĸ7Θ¤/΋…Œ˙[ŲÎŗ5Â)*ÃöŠl™WÅŗ€š8íNŌ|=w÷úOËœßÅYŸÃŗžĩö•”Kn8ę=¨¸jVĶbˇēņ ęČĸE$ã#Šąâ;.ÎŨāAåĀ~î{SŽ<=p5ask(XŲ˛üã´ÍvŌęęūŪÎ6aŒįœgŪ€)\O%ēY^Ég ÅĐ/õŽÆ)kd‘>ë¨"šü9ŠÜHÜĘ ГŸĘēģ{s a…_Ĩ õ)ãļĶ%’H÷ ^WÖ¸ŲQ¤Đ|åōÄ"S„ÛČükˇģĩ[Ë)-Üā8ÆkO Κtđ ĖÄ^ÜP”ĩ) “Aą €ëRø†$EĶļ'$:ôŠ[Ãw#MŽ9|Å}ŪßJģ{ĄO|–aįēsŽ´\,f]m˙„ĸՉ* ¯_Ĩ,Û[ÆŽ€Û¯Uđã]J'ˇ˜ŦŠųŊŠtŊX/îî2eéŠ.6.íãž,H ũkŅma:ôĐIePĀ3ŠėnŖy!eļˇcé\š]˙nšŽÚhng;aUOŪ‹…Œû‹X#ĐmæōÂĖHūu_VM^ŨeĀP5kEĄßų‹÷"KPAõ§kšÅåÜrÛl9āŅqXvˇb?ŗvÚB„)„ĪŨ˜Ĩŗ†Uˇd#ī9ãq­‹čŽôûK{hXæS‡’y5—6›Ģ;%›Fˊ~RlęôIb—K„ÂĄW#Ū´k+IŌ……ēnbe AįŽkPsŪ“ā Š^”™ãéH'Ŋįš\āSh'$ŌöŖĻE'LP4&~´Í/ƒš@`ģFpzRvÅ2na|uÁ¤2(¯`–fŠ7‡ĨU]L5éˇ1AĀ5§DŌęnۂIĢ&9?ļ]Q€'ŋ ­,E΅OZO5wm3隯ŗžh丈>æPpXÖc™‰iĖ˙ŧĪ4€ęå–(”´Žzš’?.HROzåo^y--ĖŽJĩlé0M M&å#åĻé§ZĮp$ŒõĻŨęéir"hØįĄspÆ8Î;×7Ŧ<ŸÚHHR6{ŌtâFuVÁį!l0Éšˆ¯nŖÔcķf7UK3Ũjz„‰ģ<ŋē3L›’ ŋˑÍsڝÅÔÛڗČ>fŠô˜¯–åƒËž0I=čfG!{dõ“o­<ˇßf’-œ‘œô­YԘøÆ}ë09Õ¤‹Ėų‰#qĄŲ‡ ÅGÄo!E‘K¯đæšŨ*IŌ[ĢU—-´í'ąŦΚ0ķyäLõ –˙[63$fŲ'5zÃS‚ũ?vØ~ęz×=ŠHíĨZī`YūöZ‚tūĪŧļ–´t4ÛtJÃē×^ÖīË0RØČ<ÖÔL0ŲÎFk‘ÖĮĒÆß7/§ëBufã÷aÎc<štw ,[Ŗ*Ũ¸5ÉëNC*īp‡¨ĪzB|jaCļ¤ū”X.u1ŪČŌʞI"5ÎāzŸJĢkâ+IĨ1ČĪņÖv„K_ŪKŊˆPxĪ^k6+S¨Éw;į)–ČĸÂ;tHģԂŊˆ§Œ=z×=áY¤’ Ŗf%TŒdôށˆ ŸzE߀8ĨfÁæ0 r1YēÜŗĮhL,gžx?…_[¸o-eRęy\ķPj:ĸéí(_ĖlpzW įĘa47$žyės]§˙ í:yHixĶ˚Ļŧ,$1!nŧô­h&BŽF q\nē¤ßà @ĄąČ=Mhę×7âÖĘ(eÆXu GFÎ0AÆ*ŦÎëj#ԅÆsXvwv–Sy×ÍÁʒq‘XAĖ$–ķ¸ry'Š,;kø„YÍå^[:´:Vĩõĩė{ā8}Eqúœ¯w{gĖvšMKmą×Lvîę› Ú{ņNĀv%ÕAų†}Í wsšâ-Œē”Wr\\ĘžHʀjƄú„ėįí-ä ;ƒzR°\ë–æ?4Į¸d ĶŧÔ 2Úâ-Ų˛ģš)°ŠNA9&Ģ@oî-–vōãËdžsE‚įĄä’F=ér§Ŋqķj2ˇ…ŌFb\ļÍÄķT.žÛeko8ŧ‰Fq“ÅžČ œŌ3RíĐ šÉКņôí×g%ŽT÷ÅhÜĀ. 1îec"Čėu/ãg…¸VÁÍZųqœƒī\…´éĢËeà $‚ËKi-û^6š.]Tą sN¹߆R2üęœŧÎB ˜áƒg5ĮÃũĄ­ô 1Ųy'¨öĨĐäž]>éãv(㞆‹ÎͤR­°Ģ2Ž@=ëK×Úöũí%„#ŒōĨRđ龒ygfŨ î>õ™akq6¯r‘Lcu,Kwë@Žė…cΠļÎ[Šå<;{rumd”ē.qŸ\×Q"–\sŠ (\ë–ņ^Gh€Ë+œ§îũkM\Ž3\Gˆ,…ėSÂä<‡$įŊEs6Ŗ§j1JfffPG<éE„w„€IÎ*œ:eœMt‘(ä“\ÉšÕ.ĩgļķļ’šĀ<(̚ÕĶ^ŪZË1“`āŸ^”X []nŌōđÛF[Ėę8â´ŗųWŸÁ,ÖúĨŪ$Øo›˛ŸjßŌn¯.t‰^g„|ķøŅ`FĖ7"[‰bßģū#ĐÔíŒdšãô+‹˜ė¯¤ķYķĪ­6 ¯î´XôķČĨk+@š’ëJ¤mĖ R}kT|ĸĮãŪ™ ;ĸˆcŽ؊z qMÃæĘ´5éĄ-ÉkĒRwŧÔvĢ*MŠ&1ŋHg5i˛}ļxÃ+€@ëMĀú+HŅ*67z×McgĨ°~y'ÔÔ˙gŒÆc1ŽÃÕqÅ;ŠĮ-sŌhVōl$#qÚŖf:”–éon\oôŽËˍP&ĐGQ/îŅW>‚‹…‚(ü¸ÕOaŠåĩđbÔã`ŽG\žįÚē˛ĮJVŠ9v—Eb9Å 8ŊRÖA4‘–U¨öĨŗ˛ąųl„Ĩ{ŠėŲTŽ@Īn)‹m/å¯™Ķv9§pąĖi-4Å´hX6āsÚĢZ^6š×PËfPGNõ؁E¤`ŠOŪjSŧádeGį!ˆ\,bøfŌXb’Y¨ü úQĒŪßŲ_!}˜ z×@Œ¸ pGJŖqĨ%Õō\M#Lb>Ųõ¤ ‰hSƒØÖ?Š#s§ƒ€ÃulÍ<6é™dT^ێ*%ž Õ*Œ’§Cƒš`qQ´pŪI˛c~:֝üîúŒ!ą“ĪJéÚÎØÃäųIåõێ*co ŒFcM‹ŅH⋅Ž7[; ŗ›É(Ėģ˜â’ûí •ø×rkŗ–(d$EaØšqŽ6@Ĩ¨č⋅Ž[X–MKFŠå!už`b8&Ęc;ËĢŅv BĨWn:cŠh‚ŨÕG–„/+ĮJ.ĢÅ<ZLČĮšb;ÔÚ[Ü_ęâáw˛…!؎œtŽĘHcš"’*˛ ŠK{h-bōáEEô\,pvˇ c5ÜR+Š”_éWü78ˇ¸šÚPUå.{ûU­a5íD–+E’(ų^3Ÿ­}•íæĒˇ÷qŦAzŪ‹…Œë—‚-F)šROąĒö“JēdāD­’ t95Ũų†v¯Ė>n:ĶŸja1ˆPFĮ•ƒEÂĮåŧ;ƒŧÜŠ¤Ô/cēĶŦâŒ6øA1]ԑlĘÁœ/ʝrŪVОhŋŗcĖŲÔô\Fî‡r—z\Esō Ŧ=ęüŽV"UI8āV~…Ļ6›cąÛ.ĮsĐV§ĮJW(ā-īŪ×]{Ģ”*rAt¨­īš HŪŧDībkŋ–ĘÖbL#“×#­G.›g,"'ˇ`č1ŌÅc“‚YæĩžœZ“€Ã֓EšgĶŽíQ[~ÂÁ…vąÁQ‘ ێ*,í­Ky1"nëÖ‹…Œ? LM”°rŦMcÚ^>ĢÜģÆå›pzíQmíÛjBy `TWē|W°Č¸Uw\o‘EĀåü3ē]RyŠ‘Á'æģ‚Ŗ“TôŨ. 6y$Ÿ™zģŒ`W¸#‘ņk>Â6TdšĨwr5i­E´r4Š 2â짊9sæ"°ĮqU­të[MÆÂä‘Nörūi‡ÄčÆ'^~)ÚĘöŪ*EôĄš_œö™q,buÚ]”gÕ¨u­Ņ7î‹H?jœnŅjS]ĀäTz_7Sv;MYØļÔâš‘†Ōƒj¯öŲi”´$FNg­Qˇ_ôKĸxũzšUWŅ#`~e=(BķYŽÚ@Šģ‰ÆOĨAŠ k›Eģ2“éëTīcĖŗaY€w4ˇiö}:8Žw0‰s{b‘ŗ1hŸą5­qĢGkxBYÔ Īže“Eˇ Œ‚ĸœŨY‰tĀĪĨ1¯ĢFl–bJ6yZŠũŊ pL$GÛŪ§Õl¤¸‡÷J¸^HõŦų>Ô,ĸ‘–?."01Í:§‘Ŧ<įPŽTœVzÅõ°c"^Ųí[AÚëMķÁhûvâšĢģĄˇK‰d $<@^r÷6‰,Š›°Ŧ˙ÉtĄˆ„đĀTšģÃiŊåÜ.zUŊ\nĶfÎ8\ŒŌę ˆõĮ‚Ö°|€mjĶū؉|†ÁŲ/CéX 6Šō nŨ‚3SŲA•ąwĮŠíLF˛kHožĪ$,š8R{ŌjZäv,"Dß/R=fH øŠ Ųâ4’&ß “Oņ}(Ą6¸ŖOŽUŒ‰dáV“MÖå–ámîĄ*įŖcŦũUĸÖåX˜ÁĮšĢW§ĘÕė˜1(@į֒Ņ×vŪĪBÄ 8ÛÉ5ˇˆˇĮ10üé÷TwĒįë7lŠwėČâ“EU0ßNÃæÁæ€&–é5=âfBŽĢ}úYxyf”–ÆBZĄĨímųCØ'mMcnˇ^ul„=(SâX–Í$ō˙zN į ­ëK¨îíRd?+ ķČÔŨ6åÎŽëGļkM6(ŸŽ2}‰Ą FÚSÄ^DŒâ!Æ3Ķ– ¤Ņu&ĩˆ4‰ģæ'­<6ßš$(˙ëT׊ƒÄö˙"⌟z2ÖŽ‹Ëã‘Ûøj;īŦÆ$ŒÉœ3ZĻč$ņ^ qčˇZ4DŽkÛĢyUZ=ŲįëL k­v8R1fG‘w*ŽŋW“Ä/œˇQ ŋiSëYŗHļū'P# ĒB€OĻņ<‰ˆQT “ŽüRS­MŠXŨ!Ę+wJĨŖjĢco4“JîI Мū5˛Ō@ú D˜Â ׎Oļ‰ôĢŲ¤%~éôĻ#Šš×!ƒLŽíõ~÷¨4í|ßJčĐųnp¸Ž^k•m.Ū v9'= u0Ĩš[-ʝŽņ=8¤2ņ4f2ŨĘd‡eíRiœˇ÷˛B-UpšëÚ;ÔĩšˇDO-˛Ūaį?JŌđūlja*ÜmAp:ŠtcŽ™5‘¯ë/ĻÃB É'sÚĩ`™&Œ:Ģ ƒ\ī‹@‘e9/÷¨CbGŽÜ]č׌Ŧ¨Ŗ,8Î{ÕM;ÄSZY*´ĮwsČŽäCá€bÁ(sŠÅ"˙„vycg.~Ŋ(ĐÂCnļņĖų㌠œĶlŧIouv *Ņ’~RŨë4…|7ŌD ãĶ`…ŖÔ4é^PŪ`ãQ`6ĩŨxØL°Bŋ9嘎ƒÚ­éڌZšųą8 ×7âZˆ–$1‚:sŌēģ42–ęŠŪ ë@ɚo-KāW#yâ[ĩÕO•ūŠnĖuŽžUb¸\f¸›%OøIœJ¨@vÎę1Ū!‘äž‚aš  ČĪJŲ˛ņ¨‘-›~p1Y~%Ž­B äøÔ:Ą„jV^PØ Ūô-„t—õ¤WY‡]ĢŌŗõ}uc¸Ž×Ë,íbĀāŸĨGĨŧ2k7@e‰ ‚jĻŧ¨Ū!¤.}šĻ†nM¯Û[]­ģ+}ܖĪN3Riš’j0Jčm$s\îŽ#o@§k.T;Šëm-­`WčĒ ų‚úŌ`Ž3N¸XĩŲ$2ɰ<ĩĶØëļwĢ!åX7ĨsöPDŪ*™`f vV8ÕŽu#“…V#Zb7Š->Õ°FæãĖíV¯õË[ãl—/Đ/§­`Z¤OáIÉQŊ[­&ĨĘfIĶßX ČüKc%ĘÅš‚Ÿâ#ŠšĢÚXe“$ôU䚿uxbLĶ„jĄ˜ )b'ņ ŠTķ({R°”™ž)į<8Ž Š_QŠU Ž”ô Ę}$Œ˜&d'Ž{Ôoĸ•ōĖRía÷Ī­h­Ô;ö™˜ÍKæ.>đüęĩ‘z|)jĐã õ=ÍAŒ‘1Ũ#4dįaéWˇ¨'gÆk15­— “ĮĩsÁ2úîīL&O-Ņ@@ząkŖ¨´1Oķ;rXvĢ^]ŊÉYöĢ8čjŪėȧp2!ĐJD˛–ˆ…f÷GŽčĢFæ7A€GJļķČ€ĪsNIЕÔƒĶšZŒÎŧŗ˜AēÉ!áØu5WûįĪØfĖįšßg@ÁK Į 4đĀž?Jb ¸‰>čŦVͤ¸ŽKIC,ãšŊS‚Ā~4DŨ€_s@tģcnąfn¤öĢWÉu E&vŸJd×qEœ]JāÔVZœWĒvzĻ@ĖO ‘qƒ>`ÎqÜÖ¤ÚUŧ‚ eD'åÅL×P¤Â#*‡=‰§ĩÂF…Ë ŖŊ-GĄN]&9īŌéœå1ōúÔ:–ˆo.xĨØũŌ´^á!]Ė@ĪLž´øÚ ō¤Œœ”î+÷ŊÅŧQīe1ŒÍEg eW¸œČPüƒ°­t–99GzƒKæĄ' 8ëÍ-GĄR].9ŽÍÎö PŽUĶôjōŗÎY\*;ƒ[:ēeH#ÚĄ’ōf<¨ŦĮ€M1hSąŅÖ„Oœ1œtQíNƒ¤ÜÆGãé[?i@˛6x’j­ĻĄ¨’ ™ŒŨč… Ōà û„—;wķļēxâĢA´ û„Tõ*O‹!ę 1æĐú—ÚŒäŲaYzڰבB¤íÁ=u~`ŨĀ{TrAi4åAČ$s@ĘēfļÎng“θa÷Ŋ*ŋü#hēÚvTŨ¸¨ë[ēã†}A§$Ą‰*AÔj#/PĐ ŋ˜Lddp0q۟wĄÃsd–āᐠ9ęjīˆžĘũĄkbPŧzšÖ°Ô ŋt/ČęŊÅSĶ4OąÚʏ&ųĪ`+ėeŌm.VyAY~TząõŽĮpõæĢKŧō$“"ąCō“ڍ@Į´Đ} "›));Áî*K}KM6ecæÎT„įô­ãÂöÅ5ĻU™€Qԓ@ÎV ŪųjétcfûĘsÅhEáÄļŗtB%•úŗ ׊43ĸ<üŦZ‘§Ž5Ë:Žzdҍ´inļ–‘Â9 fĒk:Wö­Ēĸž×SMhār0{Ô÷OifķE˜ƒ÷E *[hÉ’öo#1qË˙…rˇš]ŤâÉ7Ëŋ•Æp9ŽŗOÖĄŧˆųƒĘqÕZ´†ĮÆĶĮZaĄ“„ĸ%‹ąSŒ’;­…UR~čįŸé[Fö—Ë2(osMŊžKV¸—;>큑Ŧh_N˛E8QčEiiZpĶíļn.ėrĖ{š§Ĩę7ˇˇ„ÉËb CŪ´īîM­œŗĒî(¤ãր&+ķVxeNŦn„ĮË-¸¯|ÕŊX:¤nZ=ŒœuāÖŖēÆ bõ&BčÄÕt$RĮ1BœsYŖN“PÖŖÚ¯äĀicv+§´žYĄ-,a>bœZœ˛ĐOJ5“Ó&Šö‹{‘ąËއß率ežžIŖ”*ā+g¯ĐīÆE.O4‡ĄËj~žIb’ŅĀdPãƒĮzÛĶlM˜Üŧ‡ævõ5h¸į#Ž™¨ šŠrâUĘâ˜ÍŪŽÖ˛],ī°†n?JnĸĪ5ĩÃĘLk2ás×ëZļ:ĪÛu ,Ĩ‹cŠ8ô8­°\ cڍEtr‘xnú-Öâå~Î˙xSÕŦŦĸØ1AŒÕŽiIČëGR1H`GŊ#uŖĶXŽ ׌ҁƒGNhČ<Đ~đâœi¸Å.zŠųx €qIéšBH¤>8ĻĖ?pømŧu§ECp­%´ˆ:‘@ÎcƌŦ§Ė&E9t5,ÂO°ĀwœŒfŖŠ+˜ã™Dd/|ŠŸĘ´øO–H ĶdŸ1.ã !,p ÍIŗĖԙfäxŠ. qy,DÁ4딚×QûA„˛f€ĻģA$\…#Ĩ;QžI¯cˇȤsŠ—Mļ–k÷ģd(Đ‹X‚X¯Ōā!eāįŪŽ GyglōAĢ:Œ}ŖÄ%ņĮĩTģieĶė§ž#8ééBX†Ō{+ķ!ĖN§īƒM´¸žîâŨåe@ũ§9Ģöēƒj71"[ļÅb{¯¤Ī,ZĨÚÛį ~˜ ct{™­Rõã°zVj´w^d—3“¨=sWôš BōâxɋįšĪJĸ.SːÉjČ>Pŧb˜Ž›C‚4ÆA)“~CÁļŗxõ™,DŦ¨r ^âļŧ7m=Ŋœ"•W9UŦi/%ĩÖäŧ’qųM.Ŗč6Æ9dÔZĀÎë$¸Ģ:uĖ7°,„ėSˇ<ō*ŒwÁöķlf,28ĢļV—˛Ū]ˆĘĢĢmĪriˆeĩíáûZܟ0?Ė äZKČæŸZōRā’øŊąRhwS[Nö‹nYäa’GANԚm7\ķ’ C”v4ė×0%ŒW;ƒ’?•mhV6ŠYæ ŽBúÅÕtû& $î`KíŽõˇ ]ĪwnË,[UU c4=/EØxō0ŊąPÛî˛ņ3¤8T$åAāŒRëĐ\AŦ ¤‰öeiēmŧ×ēĄšH#ÁÉ>¸¤‰ęZŒŗ\E9@€ õ¤ģ’ķQÔVÍ\Æ@áIĮ>´Í6éôÛŠíä…Ë9ÛĮcJķų˛+0÷ëƒL IeģŌôč`¸”´˛>œ —QT]]ŽÄAĒž!iî,mgōH_ŧqÛŌ‰Ļš˙@w‰]0\}īZ@R ,~i<ÉdüЎ‘ģhvŗ4ä°'å'ĩ=%žžĐ¤ŒG”„Œœrj˛ÉuuĨy)R‚ĀriĨ¨ÜÜ5ŒI3FdP –ˇZn‘tZčˇË•,zV%ĖWī§[]îs$RmrAŠģg ŖÃ÷ĪövÚí•ã“LF—†,åHEËĖY]pĒOJŅ֒Y4ų–' Å{úU Jī§íe !Ā'ĨhjlņØ\2!”üŊi ät‹{‰Ŧîš)š5Œnų{ššs}=ᆠĖß:Č> Um&üÚéאė•$ųRŧŗÍეųV_ŊŒqLD×Fâ Z˛Løc’sĪԙЉĄąĶîRW2…áЎŗĩĮ‡mr@FÚĐRj˛ģiúnQÃÉČ ŋû|7¸pĶ`€ŽÚ,ˆŅY˛BŒŸZä5š^XM´˛íiąuĢKg}mB<™@ŗÎiũ|Ėētíp9õÅsūļŋwi­ä ;[=ë¤Ö‰ūĘš dlŦ ^-­A,M aõ(Z%×öõÄhø˜îũ=ëWBžņ…ė2ĘÎ#ČVcĐũk2Úá­üG4­–āŽ•&˜ķŨÅŠVÊaƒŪ˜Š’$¤ŊßÚØĪÉįßĩikWRÜéVr4›C˜gī͆åbŅæ„[Ÿ4œ4˜ã­XēuūĮ˛i‘É\ũ( Đ ēˇ´g ()ę+ũ&_ЉÁv`TúWOĨ]ĨŨŠē)Ŗ5Ėę3y>&Y @F0:ņK¨Ëv7W–ēķZK9‘$įéYˇ—סŌĘë97ÂĸņžjÍŧŋhņ#Ęąą;Ž*Ŋ•ė6:…ËËní!cåŠ})ˆë´ŋ?û:´eĮ9ĢcĮZŠŌc=Ŧr(Ė2TöŠģԔôČ ŒŒcŠ\PĮLR\íĨ&iĪ"”ū´ ņŪ›Đįĩ(éKÆ8ń<ãS9§w¤+ĪZC9ņÅ/npjĐÆĘ@šÎŪÔ ‘Y$ÎͤwÅ<` W;c},Ō"Eš—šļ5‚đ+${¤x‚ĒÄÜÖRĨ˛GįO 7QŸ¨Ŧ‰ĩ{2d6z ­oŦÎŗ…•2 ėÄtHrŊ1Ž”¨ĪÖąŽ5†ŽCQ’‹MVk™’5 Ÿ›éE€ĐģĩK‰Ą.ā9Į­YHâY7Pū¸ŦyäYP̐ėjhu B’FÅ@Ūh°WšuŊ㆐ŠĩopD5 aOĢ]yĪ šįÚĨ°ÕĨžŪc"$kœôX ļU, ãš`¸‚Sŗz1=‰ŽwLÔ.åŧrQāú-WŠSkŦŗųlpĮ E‚įaŒqŠT\Ŧ;S{Фˇš=’qTĩįģ‚D!ȃ ր:EUÉ<`ԇ8"šáŽ ƒ÷ÄĀ äՙõ¯&ö8V"ČĘG^h°\ÖØ¤í cĶm]ģp1éY:ԓß4@Tsƒéõ¨nu˙.ņŌŒŠ§ }(qQĩU2{qš“@=ņ\ÎĄĒ—’ŲdĄ!đz“Vä×ŧ‹Ŗ’ĖU{uĪĨbkXgĄer6;xĄŽ1ƒŒŒÖ}Æš6 9FWnˆzÕsâ66 0ˇ"E`¸=(ĄTSEƒ"°=ˆŦ9üBée éwœ6{UCT’.¸@ˑ÷¨°oÃą‘Já"ĻÄ€ĀÍ\øŠt‚ Į$ô52x˜ĸO!„O¸úûQ`5î.-,ÜÉ+GįŠ§E%ŊėbHĘĘ đz×%sGĞT›ŠۏjĐKÄŅo ŒQ3!ų‰=IíŠ,O€WPĒĢĐ+Ÿąņ–ėÛÜBc~ßũzeĮ‰ÂÜíˇ¤‰N¨°\év†úŌTĀôŦKĪ%ēF°ÄĪ3€BT5jāé Ū°}… )‚)”Ä…ĮFĮ4ˋKI IsdŠāĩfxnúkģcĒĮËŠŖÖuڔZ{Až2A'<æ€:ˆę€W1B$h›T/ „úōÛßĩĻ܈׎į)ēgˆûPkybōķ÷úôX.nyqF§…Tę}) []§Čāœ¸Á5ĸBØÎXžYā}+‘ŅoZƉÕF äĒ•Á†Ŗ…áۈvė|žĩ‰/ˆ$—D7QCķîØĀôš~§žŽ.%ˆÄ üGڋÍãNáĖjXt$g ô+•›Å3bKVBãä$ķ[VwÅĨŦ×`ųrÜs@\¸öņJHx•†sČŠ6ĸŽĐŖÆ+”—År­ÁdˇÍˇLžĩoS×Z*āRoģģ°ĸÁs}"Ž1ˆÕTz”āČ8ŽzĪÄ &—,Ī…y=šĢhū"¸¸™Ŗš&–Č*: æÕöo|ĄIØšÉÉ÷ĢQZÁ˛ÛŦk卤VM߉-ā”Â#‘ŲOÍŌ‹¯ÃoģÆ…Äžŧ`Rŗ ÜŲD‘ėAŽ)^Ü Č§ÕĪ…Ô&#äˇÍMmâ!6Ļm œ+S°\Ų{x˜‚褎™*¤Ú\7Éu#3”ûŠOĘ+2ãÅ1ÅzöūQ(™ŗÎjΝ¯Ã}ƒiYP´÷ĸĖ.rĒĀŠƒÁŖ†ĘÚ×q†BŨvŽĩÉYë÷rk˛ŗDĮo–?‡Ūļõ=z;&ōcĨœē;R°īŦ>ÕŽFāžŪqOĶôč4ë_&.sËÜ×:ž$šŧxmíá))q¸Žxī]Pnøüi´OgnČPěIÉëD–°Í”ņĢ ū8Љ9Ŧ-GđYČbŠ33)ųaH6 ‚(" AĐQ\YÁ:’ŅŽđ0ŽHĒ–ZÜ–\`Æ#ûĀöĒđø’Ōh¤s¸2ģÜŅf,iēDi’MåúŗU™,-efhQ¤ĢÉ ö‰įGqå§Ū×Ú°íĩûë;hw!hŋŧÃī­sĩáZ”wõĒ֗ŠwRG˜ģ‡ĩY?{ ô¤$öéA<҆"Œ(Ĩ=¨í׊LrhAëH1@öŖ¨úĐĮh9ŖŊ 8'4†sØÉÍ+T%¸RÚ›" ô#ÎzØ+ËrUĀãžĩEĀ`rGZŅ}2ŲŲ=h—FS"˜ÜĒãæĩw&Æt/ĶdVãæāâ›-¨…`‘\ļō9ô­ĶĻ[ĩŋ“Œ-$z\(ˆ„–sÍ;ˆĘ–+›kô‘6ģŋ4ë)fļÕvMˇt‡œSäŌîno&%ƑƓۭØhŪL‚k‡ŪãĻ;Qp+x‚Ĩ%ĪĘxÅWš,öž€ čŽ-bŧ‹ËdUK]&ŪĖ_tÔ\ ‚Ļ-TŽåËtéVė!ōīî€`~NHéZš<oŧ’ę Y˛ĶᴈĸrOŪcŪ‹• 0"áĪĄæMmƒ8ãžz×ŗŌmėîUÉfčjeŪ— šģPæAÎÕ?xŅÔv*i;YšlüĀ`{Ôū# ,H#åČ9§iC,—S¯'DôzúÎ=BÜG&@ŒP#šģd:ĸŠƒU†*Ú­Šį °gōĢ–Ū†9K#:ƒÂššqŖA=â\d˜āwĮJ.F|ŋ4k)Ë3éÅ.ŒŅŨÜÅ&3ĪĖŪÕĒēM¸ŋ7ybääŲĒķø}&žûBIĩ Ë.(ŒŨHcWˇ"AÎOAÍXSäø… Ŧŋ8CZ7ē7˛Į&ō›F0;Šmî…ܑēHQ”Hî(¸XËņÍÔü p*î°b:/î‚evîÛVõ=o-#[kĮ÷IĻÁĸĒik$…™ų-éB`d_0˙„rĶ8Ü[ĩYž"O BAmŠĪ†Į،Fv-œ‚z ´tXŸJK?0åNw{Ņp0u8Ö=*Ā.FsVõ'ԃm ´dUÛΉ­āŠ)™LC<æ¤ŊĐ~ԖĀM%B’{Š.2ī¤ū$IC üŠ×S/ü$ļō1žÕŠu []\$Ĩ™HĀlwŦVÖ!ŽWrFp zP }Â=Į‰BŲô#ž1SxqÂ]Ī˜ÂžÍԜÖö—ŖÁ§Ąe%äq˚Ŗ/†SûI.#“îÜÉß>Ô\,PÔäÅ“´*•ëĀÅMâIâ–Í<ˇVĘ8>ÕŖĒč ¨Ė˛Ŧ†7ß4۟Ã.˜–Ұœ‡#Š÷ĸáb΅,riąl ( ČÔ¤Į‹ Î8 Ö΍ĨfZ˛ŗn‘ÎI_QĐEíėWK.Â1¸cŽ(ę Ëp&ņ\ŋ"œdøUk9Ú?ŗÆé +xhA5UŊIƌå—j+ų:ģŪ4Ą“qeį&‹…kšŌ^3ōšãt›ˆmío š>€­wÉC҆ r†‡Ÿ°ydķN:2¤;‡†îH?+J8ĢēđÄ;dáo™kbĮEķ4˛ÜeYūn:JŠqĸCe§­šČōČ3"ģEÂÆlķ^,wŽ#„Q×ņŽĒ{íēAģîĮn•ί…¯ÂÆō#9ŨŸé]YąC§ũ—øvlÉ6 >ZMâmč7I÷1Đ{U›Ų–_ Úā‚ĘûO­_Å´ĢįåØž‚§ nŌVÕehmûģQpą0D_ @0öĒžh’ÆRHŪ_ņéZ6ēCψöM–`FáÚĄŌ|>ē{ģË'˜Į…ĀāPĀÆŌ›]šÎŌĨŽíŪ™§ø—ËûMĸFßn˜Í^ģđˇrĶCrc rÃj˙ÃņŨÛB‹)VˆaN(¸XĮÕ _í{6°Qõ§Ü”‡Åä…ôĢrøfIo"˜\ŠŽŖž*ĖžŽ]SírČJ€_qEÂÆ%ųˇ´ņ8‘”yc†;‘I`ø†bŖhÚÄôĒúͲ˙n´*ä#æcœ].“ĄGa <ŦfßííLV2<4ŅĨåĮ™ž„žzÔZåŊČÖĪ–Øķ°įšĐ´đÃÃ~gyEbĘĒRčڅũäō´…$Fųwpö4´š<’éúŲļ¸YøÜ­u)yo4­s+2žTÆŌŧ;,W+uy.é ˆ4âž!3[ÄŅŸxŸâ4]Ėč|œ×đާŦÍ ‘ÉlŸŊŠíŨÁīÅsŗxjC¨´ĐOå#d:Š.-Ėí![j09 m<éIĸŸŲ÷ŗ8*•ŋJҞđܰųûî9u* ˙:ŽÛCŋ†ÖâØĖ‚9:q֋…Šęč|$Ā2’{sEĪ”<' 2HÁô9­(|<Žm%“į'yaëYąø{Qw6Ī1Ęx9āū]ĻĮ†ØžqH­âÍW°˛KD !SVN1ÚĀœįG~´Ō}:ĐiÁÅ āf”ū´ŪAāŌžé:N$b#Ū‘[9ČĨÁ ´h<ž´Éåō"iÎj@#ĒĘĨXpEHĖÛ MŽ^C!TUč*īšĨw‰Ī\×=žoĻ€}͜âŖŪâÖhrvĢV– é~ĶĐ|Åį§5™Š_Km*Ŧ2r՞öÅtøæ.zņRjHm›'æ\Øŗ–uƒĖš•ėsWĸ•d\ÜW;wÄĐY†o,üĮÜĶmÃÛęn@a…ÉĸÂ:12 <ą"—î3ÍAs¨Ãm:Å#`šįāŽXõdPşw&Ÿ¨ĄšÖLyÆHJtņĪPCŒœõ§™R6 În‚š]BßėžLj_ƒ÷‰Šīdgžĩ8#'ŊŖûL>qĖQ äŒĶŖģ†\ˆäV#¨šÉbAŽ”bpWœuéNą†8învHSŽE šĩ+h$É2†=Šķę6ĐA洊F8ÚsšãîUŋ–^RLžÕ(Dm.įzžTQa\ëm/áģ‰^6ę:ĸĨ3Ąû˛&s‚3XļŅĮgĄ4ņŒHŅōsŪŗė4§žnb~&q/ž>⍔U\į ˜sĀô¤2†ĨxmĄĘ:ėõŠŦ§oŗ!HۇпüL ^Į×$T:„-–ž[ˇĖŖĶ;‘IÚwzgšUīšã'Šâ×Wˆ4åČ;šŲŽŒžĸ†Üšėk3Vģ–ÂÄˡÍh(Ī Ŧŋ@’iŒåˆ1œØŌúV¨nlÖ[—ErØã5vūé­í‰Œ§šÄ qšäĄŗhū~ö,¯…QëVõ€~Į`$ŨŧŒUa7œ"ˇY%*š>•RãQąČLrģY ŨĨ”!–G&ŗ ! G3N71ĨaÜī`˜Mr/Ũa‘NŨĪJŽÖ(#8P¸ZHU‘[|›\ž) IīííŖĖō*væ–’U SÜäīáŠ]ZUžv‘XĄJũE;Bķ"ŠõŅČURžÔÉšÖ=Ü­"ôŨÍV}bÚ;¸íYžwôč+’ĶôéĩYv˜å_œ÷¨ÍŖÜë­nƒŧüŪ”X.vˇˇm„Ą™ĘŦØÍX7ƃÍuCß&¸Ũb&:íŧ"FČšÍYēEžņØæfōÂ``ûQaÜęĊā:°Ųę ŧļ 9•6Ųã5ÉÁ;AŖ`dmą‚PįŌĒÁdŌčSܙ˜nt&‹Ū5Ä)˜Ō˜ûŲâĢ>­eäĘé2É匕SÍr,Îē ˛´­˛I~o@*9 ąūŅŽ8nH…€ÜÔX.w6w)wn“ ;XdzՂxëÍVˇ‚;{tŽ!„QÆ*Uuf h\ŸZzœJCŒ j°į˙JC įŽŪ"ō8UIĒPk׊æ ØZŠâ;v›K•ƒœ ĩáŊ7ĪIn„ĨJ‚ ~É5´}zKëŲ!•QA!…nyŠë•`G¨ŽF˛7:„đ™ ¨qSךąe=Ş™zÉ)!jŒôį­0šÚ,Šz0ĪĻiĸTgeģ—¨Ī5ČéZmÕŌÅx—lļ]IíTã†čëķ[™Ę;’‡Ĩ+ÚIik;yÍnãøąSŽõÉøqĻ‹P¸ĩ2–Eõ=ķ]NNáHhYgH ydm¨ƒ$Ö~›­ÁŠO$q#AĮŊ\šˆ\ÛÉ ĢŽ Î+•ÔŪÖd$•b=) gĄ<Šąī$mRĶSĩŊgČ NŧbšKIŽŽĄoæģ׌žœĶŧ?Ļ=ÂŊלȪ# ߊ4 |ÜLņŖSŠ*V‘TĖ>ĩÅčÖ2ĖĶ:\É–ũŊMhŌjZ¤ŅÜĖ؈üœãhÎŧQŸJĨ¨Ū›VS~ŪŲŽg^k¨ĩˆÕ%`YWnáS^[ßÁĸēÉ qÅŗÎ=(:/P:…˜œÆcÉÆ=jápW*¯r<(mōmÎâ:ãÚ˛ĖׇGYMËl€įņ4ßgŽ˜¤Ŧíi.4¸$‘˛ØÁ'ŊiŠC#g!‡Tžž”‡ÖåH8¤íJiŪÅ!ëŸJRZ^œ (‚dúŌ”wriš¤N)$ČBTdãŠ^ÔÉdXb29áFM!œā[ÛKˇ›É$ą=Ēu˛šû ŽSæsž•Šo¨Aw‡ŸCVK€ŧôĢģ&ɘRÅ;éžSe[Ĩ6ö ŌÎÔ˛’W­mÍw 0ųŽÃõ¨!Ô­ŽH€$ũĶOQڄW đ],E”(ãŌĨ´Gšå¯¤bĸô÷­YæXŅT tŊG˜o ’ ÜF sĐÜΡÆâ4Ë;2*ÍėsÅŠÅ0ŒŗāÁ5ĨĻi˛Z32ĮJ×Xdõ÷\,súŨŧōEû #–ĩC"^^Ii0„€¸Ķ6ķ‚*ŦzĄœ@Ž7į@39íŽS^Iŧ˛ČqČéOŠÚįûnáŒgĘ`A8ãĨn€=)ĻHÄ,7‚šYŨÄ÷0ŦGn -Š’ÚŌwŅ.â#kœsī]YĀĪJj:å†GŠÜ,céŅKsĄ4˜8!r1T4ļŋŗ¸6‹†I+ĒR:tĻŦąHˁ+Ãcĩâ̎Šë ŨötŸhĪ֔ƍ(%FWĄĮJdŗGLŽĒ8ęh* Ö~ģ˛é’$(Y‰äJŊŅČ3¸5&{@qHĪ„ņ2˛7˜1Û5{Sĩē›M˛Û;¨ųą×5š.›o5Ț@Y—ĸၸUĐ ;…Ŧs:ÅԆΠFˇŨ9@ÄuÅb°šöxÕ!!— W€+¸–Ō îg\” RGŌ“¯æ†8Īé@ë“H=y¤ÆM“H'ŠSœ&FqÍĩ'~:Põ?Ja#=iŨЁI¤3 Ôw' 26ō*@i—X$'ĻĶHg+3K%žSg Z3_L4ØŨPN5NÂdFKíÜ*bĖÚbƒ…ųúšĐ‚ŊĖžd°îBöõ¤— ØvGĩ> G™m‡Ȥ쐸>pqŽEYŸQ&ėÄŅ€Ēŧr*…„ūEÛËË`­\sÚģ)!~] žæ¨,öįŠ7†Fiˆé4íInáfeÚS­gÉâ Áōâ qI¤ÜÖŽŖxzĨ§}œ]9¸ (9 ęi ꠛí‹.ÜnÁŽ\ĘÃZWōö˙tWW ÛÂ‘ĀŽbTk¨ Ā ÍÆ­ĻŠruĩ¸ˆ)##ĒĩõÅÆŠ “æD'ū)<øäņubŒ })4ļSĒ\Šqķäb€>ąy<’=ĸ~ę>Ŋę}Ü^]ŊԋąJãĄŦĪŗ,wÅâŦdö=}Ē÷‡'´KmĘŖ"˜zĩĶŲۍrŨė+ ĶV–eŸË‰ė8'Ūˇ5ˆĪØ&bØPŊ+žĩ?ņ&¸\Šį§qI.I­Ũ¨YŅ2‡īdT:žĨtÂ2ŽU\Ā=)ĶŠM#‚FyäÕ{Đ ŲJTydúĶĐÚ_ŧZ@šēBĨF9ęjˇˆ^æí ÚŒx5&š:>‘û’ ‚Įj~›ö{66Dˆ¤`u¤2üBípëkõA’}j&ž]WNĨ‹fÁ’WÖĄŅ-ÕÚíØŒ.GZŠÖļ7e_;rp§ųĐK9ī,”]BXÆ=+~įÄBX%Hˇ<ĢČ=ĢŪ7}"áŧĀO)OģE‘n“íLFĢëķGq`ÄRyëVlĩŠĨÕ Ŧđė ÷}k:ëŪØķĐŲíR\H‹â¸™Ÿ €ü(cTņZ^4D¯Rj Ŋ~ę(ātƒadîŦû¨ŌßÄ,$l&üîoJŗŦĘ$6™pČNA_LŌ×öåÔw¤ĐlŠLc=j–ąŠŨ>ĒR2ę# ęMb_øšYƒƒU#Å2ũ”xš7,r§'ĩ1 â -íŖ–hą+õ}?Í}föâwI¸ĢÁSÚŦøä%Ôm”ŊzšÎ3ŪÁqéÛÉ` ­šK¤BV&PŖvio&’;s"Į¸’+>ëZk{ģhšļL|Ų­9ų‡IČč*FsIâÉü§B™ųqžžõvī^eĶíŨc>|Ŋu‘Ŗ4ës™vŦ`7 SësÆē••Ô@ö‚;wĻ"ļąĒKyj‘ŧ/+`ƒŪŸ¤_‹ ķAĩ6apŧąŠŌî[mjY’7'-ōÍoø}_ûOPXūYŦĢyc$¸%7rØ Đ†méšāē‚f¸AGÕsL‡Ä+sxąÃní8/ī\õˆûEí䋕]ŦqZŪ"X6ļÕąÚ;“M‰54˜ía22>AĀŠ­5ԟMšíŖ+åuQY°K=Ö¯t‰2Æ=Ԛ*+é÷čØn ú) •|]T&Ü[æíW.Њ@#¨ˇŠŧAu €7eTzSÕÚŪEyÍ Ęĩbj^%ō.Z+x|͇Æļ-a†ÖÛ˄ ˆ+•ōöõĮ IsšC:(uˆ&ĶMæHE0AôĒIâXdļiR) )ÆßëTtͲxvņp3ķfĢØíÃŗČš ““Š,#uüAk”w ¸ā/|Ôâ‹4ōÎ×!Į<}ÚÉûw>Šo4Œ3c×ÚĢJ!—Eļ‚øāsŠ4ļ‚â;¨DąœĢ Š˜ž9Ē:e¨ļŗ‰Hų‚€j÷ zqHĄG4qڐuĀŖ#8¤Î=hÆ)x9Ļ“Í)8ëFsôŖ¨&Œ`P1”SN9 æccŦĄ”Š” ‚Šbx&™Ōiv’8;ãŌ§žĘ+ˆ$aGLUK}F+‰tčIëQ.Ą0ŋ1HËåŽ¸Ēŗ…™´ˆ&…dM—E…ÄAXŽÎžõi.ā0´‹ (ŊMWŗÔc4˛:ˆÔņF¤Ũ].Ũî„įlņL—FŠ[¯9$*s’XŽîŨ“wšn™4ņoNÔīĩÛĘI×#ŪĻ_õ`ĢīJĀOŒcŠÎžŌíîÎĘKp?ŠŸ¨^­œJėÃũŪæĒPŨéō4N#‘FHö WKĶ™ŽÚęTØ:"z ļÚL1Ë,ŅdJāã'€MPŌuLDíu?FĀÍm‰â1yŪ`Øsšl1bđč’Ü’lōsšÖĶ´Øl"ŒšęĮŊ6JÚv)ĒÍéTŽõÕļēíŨĪĖsŌ‹0ē6'‰n"h¤V5ŸmĄA3 bŪ`ÆOjģĢ4i"6Aôĸk¨mT4ÎZ@TEˆéËk+ÎG­š476‘‡g—÷MLú­¤R…i”g§5+]ÂWÍLˇAš5 ĶJt˙ą°Ü¸äžšĒÚ~†ļģ™w†ÂĨ–ø›ĩ‚)#Ÿ™XöĢqÆ{5+Á YÛYĪŒX?,Į‚b@š`‚æ{'”:!ã'ÖĩÆ´˙Û­`ęžW@ ŋũ›ĻLųō!,:ā asÂ1Î äîŸēO¯ĩljēRępė.PŽGÖŽ¯“ÔĸĐ)­}n‡kL€ú@+:W‡c˛I|Ų7ģ‚š`U |# ¸ũÕĮîOPz×OÄS)xYsÔĶ–x¤,Ģ"’§ԐhW´ŗŽÖÕ ŒĢĮ=ëRĐŪI/a26OúĩęIŽŖéëYzļŽt°ŒbķŽ=)ŸĄh¯ ´¯r6™†6z –ĪÃki{į‰X 9 +bŌán­c” ĄÆpjGe\’Āz5 ŧ:̍Ép&`“´qÉŠôÍXÃ: yÜ}hMs1‡wQž™=iĘãËVl Ž™Ĩ¨ô9ģ_ É ŲgŸ÷ äĪ4ë¯ Í5ņ¸†}…Žs].T´įņ¤$',@ôj"h ŊēÂNė {Ö4^ sq „‘H éščˇ‚íIžM0Ŧŧ>mėgæ$Ë×oAPÃáÉc´–ÜŨ9Ī+ĄķXđ)CĄ•žh•Õ`m3JŠŅÛ āU ĘÁ2ŅJ'”N:Vô‘EqŲQ]=fŖ†X>X÷Ú)ˆ™ŌŒԝG¸Å!‹œŠoSŸJ:fŒįĨ xįŊ%(>ԄöÅâ—ŌšOåN´ LzR´ãMäķH P8Ļ\&ø}TĶûqM—&2R) æ´ĢT’ņ÷įä=Š'…NŦŅôLķVtËk¸o\•*„üÄĶĻļ¸TiŠƒO@+B:ŖPŌ]D™ōÂô¨Uö[āķģ$UÛ^dēuĪĖØî˙ŗJųdaēc¨  ÷R!VÉĪoASË+KäE¸ãŒķRIavÖę qĮzŗwa:[[ʰČ>lS^ūÖ8/#Š,Žā2kĻļˆÃqƒģhÁ&šĢšd•Ŗģ1•؁Īs]5”˙hļI1Âú™%@V'Ī<ŠK =#Ķ$¸9bčxĢ ļ’Xcō°œTšlwSiĢŗåڜsG@ęcYY¤öŗČË÷Aäô4rĐYöøôŠ.l,î!‘Ģđr}ĒUĶn%ŅŖÚ‡x}Û}E0**ĮŨˇîŪ=ØÎã֝=ŦrëbŦÜĶîmu ¤ˇ2FsŅ@wëKuo{¨˛E3đAÅgQkk¤ `íĩât_*7,wŒv­ģE“ėŅųį2cæŦŋC<ļˆ"MČæĀ槨úíĖJ-`“'{zÔú…ĒÛĨŗĢą‘Ā-“S_Áqũf 9ĀæĨÕa¸“ėną7ÜīT!ąŦsk‘`FĐN|Sã‰/õK•‰Eޤ[;¨ĩxäųVQœÕy]3U–Fļ&7$phúš“P”‡o.<āg­W‚Ũ_Vž PNpqÅYŌnžÉИš‚o^ĸ§IiĢÜI"€˛UņĀ  –e>Á8…Í?ÃēlwNn$c˜Ø`Sč6É4wRyy$ô4Ũ/bŧhDebŨ—$P:åI-¤FčPôŽoÃî°ĮxāáÕ2+ЏšØŋ>͌×%ĨAwėĐ´-ķŠ HéI ‘ÛŲ‹Ŋ:æöFc2AĪZk]<ÖvČfûO2¸íB;x<Ÿy0š(§šĢ6–ņ^ꗉxÛŲ2LŠŪá|Q÷ŪÉ8ãZāΧjĶÉ, UÉÆOņ   š…ĖaŽÁŅsīZēķŧvŧLU€ę gx_O•g’îD(Œ0 ÷­MfÖI´éÄJ]Ø`(Šę>‡(ļ!´ļ‡o47­Gzâá-ČÎÅvļī­,r^Įnúy…ūcÂíä—RĶn­`ĩ%Y€^p:ôĒ×i6QŲX*DI ķ{“\ī‰cfÔíÁÎ@Æzs].–ōÍĻÂō)FĀČ5ĪøŠ$Kûy6€võÍ.ŖčPÕ­›ûR+q!åT ž•Õé6RŲiëŌlį>•Ėj’2ꖷ (¤/sZÚÛ¤Ķ…ÃMä]Ûs×ĐPÁWŖ63d°ųNŽ+AąKŨE–G`SæīÍuV-öŠ…ōŦņā˙szWPë%3ÆD™û›c'Š1“qaÔqNˇßĻëŗĀ’’ģOŪ9ĪŠ/žĶkâap gp8#ß"K˙ÜTp§9íÅ1ŲØ\k1Ésö§ĢãņŠ‹X˛’V(ŧėŗĒüĮąéV4wŧĶ/žŅ­™ŧÆņĶ۟âu™58'ō‰EQ‚Ą ÉksĄi‘(-#íFa*ę)2JÄĖŧđXöĸôßęē:Ę`#ŖēĶô;û™LVŅÁ˛4ΘĮš¤P )é\§Šâ8†MĮƒ‚;WT;sĮzÁņ=´ķŲ †2ā6Hŗ"īívúeĮÚ\g(āJ’ėŨęsyfrUQHTīžõ\MqŠYÁaä•hŪ>žõfâŪëMÔ`ē´ˆˇØb˜Ŧí›Úi֊Ժ•8Ļę’^Ák`‚FPwīīW|E4ˇ:Uģ¤ ļHĮŨĒZœŌ=ϟ$¸Uę( ëNžˇq;<˛c)ž)ˇÜj:ŗÛÍ,‘ ĪĘ;Tē„Žu+CČÁ€8ĮŊEuvö:ė“4m´ö"iÂū{Ķk ˄˛r{]°hįˇ5Åé7Ģo­ŗ2“’#×Ĩv‹÷})1ŖÄsœæ6sķÁÅcF.Nöq"ˆäāÖˇuíÃL”*–ŨĮĨaÃ)˙„jXČ#~t eëģë¨ôlĘCĖp[ž+:î+æ #šfŪ3ÉŠ¯ŲßDŗųNŊCĢ] ķeå), tĻ#´ļböčįŠPMMŒŠ‚ÍX[FĮĘ*~IŠ(AīAäqŪ”š& Î9ëHIÍ/Nô?'ZQ‚1œP(÷ lSŠfíž´§ĨĪĩ 1N)zŠ`āšeĆ(Õr@ȆJOĨAqŨ'–Ä…īƒ\ōꗌ\īįĐÕĩÖÚįÍÎ9éWbnlÆŠoU*ŠŠ6ˇiąčp:Uõ„fŠāƒ¸pÕRĘ(æ{4nųKS¸šÕ™ oÆ}ĒkÆYė¤ 0LŒîôŦ ‰`švˆ>ßē Mníqcvå9aëĀ ƒM’ņ‚›ĨxĐķƒ[ģŖĶí”>Z/ã\õÔ֖$Qnų˜ôgRÔĨ1Û´-…q’)ØFŒšÔ1:Ŧ¨ĘdŌŽPņ†^„dW~y;ĮĖy&´¯ī§´ŽÕ!lŖ#֐÷[I"Ë6 CÆOh2…ŽKWšy'‰I hõŠfŊŋĩļ]ö°āzâ‹įOÉ"oRõ*‘éÍs“jŗ[ŲۅTķd •cKŋŧ–ėÛÜ 8ŨéE‚æÖė0õ§õĒķĘ-âiJä(ĪÎrúILņ§îTôÅt—ĐZĶ ôÆiö—ßF^"x8äW+ŦNnå†ečę0=ëĨŅĸ–+Y€yĀ  ÜëYŊåÔčĐH/ Z5}Y­&[ku +w=Ē”ZõÜ7>MÔ žøę(°-´‰Úæ;›É4c…Z՚(ŽáhåS´õŦfęIš Tdšŗg­3éŗË*âHFõ  x"ŠŪ ‘ T€¨[Tą†sLĒũÅaŽŗ~‚+‰c_ŗ9ĮËÚĢk‘A%ä&*ō€KœŅ`;‘\¤{ŌāxÍrV2Ū障V’Ëš‘ƒ]rzв69* ™(ÁÅV–O%M¤Ē‚xëXx‚ņnߤāŽôŌāvÅ9ļ‚+™Ŋņũ’)-â+Ŋˆ;…2Mvę9ag„Ŧ`eģŅ`šĐũ˛ØÜ˜Äąųƒ‚3ÍLņG.7*°Īqšáĩ(Ŗm[îᜃ“ØšŊĨę7Ų]še'Ņa\ëĀ  v8õö¨Üá23XšŽŊö9|˜Ŗ2IÔúP3hĒ™7õÅ9”7=ëÃ_[ŲŌ,§¯ ­Ö8LŠ_”(éíMtö‰>9ätŽ^˙ĒĨÉ‚Ö Á$ķV.YËRž˜â˛,õé.Ŧî%6Ä4]‡zĄĨx‚áī]n>usÁė´X.tÆž!Fģ}âŖ‹NŗˇĮ +øŦ›_E-ĶE4eâjôÚ͂("áyãƒE‚抨SAå…2YbYƒ+ ‚)ų¤t”ŽsTܡHĖ*æŽ#’ÂĀÉ8ų…k\iöˇ1Ǝ>Tû¸4ųl-æ´[}ŋģ9ĸās:ŠÆĐÚˇ‚ Âē6îŌ`ąBA}ƒqÅHÚeĢÚ-ģ'Ę:zŠ’ĮM‚ÁĘ'Š=h¸XnĢú§yPší:hF•u ’Į$ߊëRt1¸HÁŗeđũ‹‘…eú@s˛&-lŲ› ąã͚í Į–¸ĮAŠĨ&•iČäWÎ =M.—Ķ­I …ųļœg5¯aá˜-ތÍ'šųGLTķxvÖ[ãpĖã=W<.;ä†î“9"AĮĨM~ņ ŲmÆāØ­Åđå˛YMlŒÃĖ9ŨéQˇ…âm5mŧÂ[vüwĸⱉ¨ŨÅ&—j@]OŨĨEwv§T‚hʐQCgŒv5Đ7…mÚ(ĖmŅũãũę’˙Ãvˇh6~éĀá€ëEÄYĶ#°wŲJ—Ā.VŸŠÜũšÂy)d\āŠ4Í2-:ĶË^XũæõĢ2ÛG4-ƒ!Æ +Œāîfķ´´f˜Ü~AŌ­Ūĸˇ†m‚čØ×>˛10I¸ô$ô§Iá¸ZÁ-DŦ ÛŠÜ,cjžPŌtíŲW#¯ĩ6ōHƯdáōģW“[—~Š{kxŧÖHÆzæ–ãÃVˇ"îdt]Ē‹…Œ­Nč7ˆ­LlFG5Öcdc&ą´ßCe –Wķd^ž‚ļŠƒÅ!œw˜øąËļzr*ΉYöR.1œãņĢú‡!žģķÕĘ1Æīz~Ŗáø¯Ö"%dh×h>´Åc/Rp5û&N QœStRšzũ€oįWô˙ĩĩŌÍq?šÉ÷GĨXĩĐŌ×R’ėHvžp´\ M*įęJPXTžŽĶî ġt­ˆ4H ûKI›9ĪlÔN„tųe’I7nzQpąĪX¸ķēÆäm?ŌžÆŲ´ÉYĪ]ųÅjĮáļ‹Sû@—ÜŋŌēAˇʋ…ˆ´ö̈́$§—ō—ŌŦĨ"Œ(§f&(4‡4†!>”f“š\(%ąŠ Đ1¸âŽœ21A#4˜ĢJN=1Mi$]вžâ”ŋ´íD„očpjË_[¤K+8{×9mkæM0ā„ÎMLP$œeU¸Ēąßö¨a™TgĨ>kČĸ‹Íg;{×35ŗ­¤S60x̎ęŸaĩ“Ž;Ļuî-ŲåNÁĢ:;ÛŠd’elwE!Ų}˜Ęįi5jTÔeŒŠųģԖ—7+Š$&R˞™âēI&KhL˛Ē+–‰|ŊlR0ũ+oY’%°^¤ü zĐÁ ˇm;”$§Ą5CTÔĨ7_gŽbąô&Š]$‹äLĐŦaąČīR]ĄmN2@mā” äi%ÃLĐGtÛFNs[Ö7ņCn‘OpĻP9æą ?ĩdˆŒpp%Ŋ’žŽa`Jƒ’)ÔA{o6ī.@Ûy$•[ûrČ˜)Įë*Â}^æ‘`Uk->;‹éábÛPb2ß[FžkĘ “ÖŦ ˜¤Më +Œį5ÉIkܤNī*ãW¨ĸĘ':„+ē&Ō0hĐw:%ÖlŪđęÜp\ĮæĮ *:ŸJätë?7íYÃÔõŠb&=fU+ēLp{Q`ģ:•šŌė” „vāĶOŲUö!‰déÆ3XÚm’ÛéÍzŒÆFŒņPé6 yœåüœ;ŗ@ž°+d/<Ķ"ŋˇšFh%V>•âa$L x<õĒŗF-oíĖ1´aÔesքsŠŪ\]°3ų`Ųڇq soZã4ģ8nõ6ŠbW {æģtP¨t ‘“ŽOoŊˇ9b:ÕM?ÄĄ‚Įv6ž›ĮCVū8ŊsÚu¸Ķuá’÷úšéœ˜įđ¤åė5Ģ˙íE˛™F3‚1Č­éĩk[RVâ@‡ŪšˆQ"ņPTf=[ŽqV/Ąŗ¸Õ¤Šc,ŽËøhb:dŧ­ÍÂČ­Č5Î\xŠęS,–ƒo Z¨é*ëĨÜTFpĻ›hžšR6ėlî¯ĩ;æÜZġ ˇQĒĮ,|c¨Št}Y¯lˎ;i#Ž+ ÃOŨĸÍrĶ0FV;dw§éÖŋmĐ$‰k‡'4Ö}ēÛČķ„éåŽ7gŠš9DÜŦOzā-!itĢÅiHXˆ!sŪē¯FÃFˆą<äŒŌhhˇ¨j–Új˜Ÿ›€z¯ŠjĻ-'í–ģ_§^Ձâ[vûT ōîqôĢ—ÚrYøvUIYÃs@z^Ŧ/,{‚‘’Ûzã5Ą$Ëīf}k]¸ö gCĨjËŠÆė#)´āŒÖŽWAv´°–páíR´ļŋÔoĸžå6,]8Æk~Îō Ø|Č[p{T㓞˜ĸārQX_EŽå˛åķ¸tÅv#…´ŖĶLŠĢķ0÷  ŊrÎkː¨fÜ3Ú°>Í4)§›R 6Cír6ņAeU,Øw4!œ–ŠaslläDŪQđ3ČĻ$ËŽG3[üĖFp8é]5Íũĩ´"I[åõ4ëدŖ2DršĮJ.ÅĄÎÚZ^CŠ\Ąƒ>`o˜Ž)úE…ĘÅzĪ +2•\ņ“]_§JGiÆE+ÃÂ×0Į6œmÜ´ŧQWlb7úÖJ?'b=;Uû|—je¸Éô­=#LûČîûå”å;…ŒŊ ¯Nl%ƒ.w1ÅeÉņģ'“ gÜvŒz×{•^p=j6¸Ú § ,bžuu-ĸÉq$’ûúVûŽP l})ŲįĨāˇQHö+å×Ōģålg>õhÚj6ēÚ8C+°ÎėqÍv)lāf”cŌÂĮĻÛ^ĢÖ1:‚Œ:c&™mk/ü#ˇhą0”IČ"ģ0LÕuK+{Ÿ"IU$î1ëBlkKûcčwq$LP”c’OZM .m–âICGnĒKnÉŽ˛;Û1!%xūhŊĩŽöŅíÉÚu¨adr:&•%üōHå’Øž{næģ4‰a…cŒEŠiēgØ|’ cđ*üĶG eä`Ē:“EÂĮ3â›I`’(Ų‚“Ŗ54Éwq፭e |¸ÁĀ­Xõ;)Îâ3ĪLÕš%Ž$ˌĒ:h 'íW  ˜%ˆ…ŨĩKwŠĩ;+ƒĨŲ4PąØšlv­ûˆ,n¯ã2Ę Eȋ<~UmnížSʅĮs͆†F—w-”’Ũ ŽãĀ$c&ąôĢ+Ģä™Ék#可Ōēģû!{e%ží‡vĒēmÍ‰U–é^%\ ÖĐ%­ēŨÆ)ˇŽcĩf *ĮŠGBČĘ28&ÎÃS[-Byš6>fFŪã5§ĨĘtŨ2ęíҁ‘ž@GZą§øuāžyîJ:큌æ´ĩm9¯Ŧ„p°B¤0ãŠwŽwIÔ.fļHŧŒY؎iÜŨXCqhöŽL„ãĻkŠą´ō#G™PΌ3¨ëVØ&ė(¸Xä5=>xô[LFIRKÛ5aíîīŧ5ķĄŪŧ€G$ é™T¯J06āc\,sZ÷Nš !`ąĄÚq×Úŗôˇqe{‚$*N=Ģĩ ¨§īU!šĘâFHZ6q÷‚′9Ũ=ŨŦ–RCûŦ“æzUÖđÄJÃ2í=G­o$QĤ"ÔæŠ b(V0xQšv~j1F1Ī ^”Ŋ¨'ëšJ@'j9Å)šųyÍCx>ÔA>”*FÁ^(sĪJ3ÉɤR搀R“€}Š&‡ccԐĖĢkģĢĢļD§ŠIĒ,JĄ <ˇ­IĨHé$GĄ&ŖÔWXVn#&­nGBÅģÉkŠ‹_0ēŪ´¯âi­]ˆ8ŦˆOŸ­‡Œå}kvD3ĀčsvS[Ã4qŪuĢKĢĖtį=$Ē #^ÜeĀ R‡û>ä ÁõĻbęˇĸ0āä¤ÕOQ¸khqō$†â'IBÜHĮi—˛ ,-3ĀéšŊoŠ]-ƒË$|*ü¤÷Ŧøõ;č›ĪÜJ1čzVøAĄŒĀäVc˙ąBîfüãŊ0:›9žĶj’Ã8ŦĪ+›tÚšPy>•ĄĻŽ4ØŨĒ^!ĀąsģŒRęR\^Ac ‘ąĢ~ucPŋšGļ‘(āŊ‰Ēí } ˇ*ØaI#ŽČĘ@3úĶz˙Wš‚æ8cP œŽšĒŌj7đßŲÁ'øqÅ;U’&Ômä‚ ĶĄžŪmw{ãhõ¤#Tš–ņ­Ž0ĨoîÂįŌš{)Ŗ˙„‰°V$ ę@H#­9ÍjúčEąSdoÕŊj eģmuu&” dđø’ņ.$Žt Ų!@ėj֛¯Ü=ãAxĒ 0+Ÿē ]žl…~Ļ­ ëH¸e(sŽ˜"˜‹-Žę/<—6ęMēFEiÜxŠTĶmŽbˆ~ņ°ŲíŠĘŌfˆiwņHĘ ŒŒžĩå:%ēŋŨõ=1@ēžšsdĐbåĘ į<æą5PįTˇiíp§sUŋÜ@íhŠw’:bĢëWPĪyfČĀ U'zHŨBÚ9õdKBĘŌ|ÛķÁ­#PģĩÔ˙ŗîÜ8č =?­sz–ū †Ī( Đ SãŸÅHęC)`r>”Āė‰ ×+âIæ“S‚ÜäDqÆ~÷5Ôąų‡ĩr#¸WÕāÜÆ:CdZȆÚö†ØĻĖdcīUOVšY,Ņ Äg ąē“Ōjâ/í[I3•UŠn¯4­ŒĘøŒÎ:s@1o Ûü€ˇ¯~*6pšˇK„°äœõOE1ũēęY6…žiõˇ§k‹si$×CŪÅ@ū*‡Ī s?zą"Ûũ|ęNŌÃˇŊ]Ō ŗ{?:퐖`'Ĩ0GXŽ0ÃĄ§•8X€_ģŽ*NØŠ(NwŠLáŊéĮž:R<ŠA’((Įh˜¤< vĶzšAĐf€zĐØĪ|Đ)01;¯Jjšpã­!ŒX#Y o\S.m š‘A>Ŋꞧ¨5¨ Ī_jĖŽö_´ÆÂá›qų†*ŌdļtöpÚŽ#\Ū§ :•nAíT˙´mō˘CV7€›Nš .R—CˇyДõÅhÅo1lUE@×°!d Ū€ĶgÕmíļĢžOaÎ(Ô4=Œ3Į˛LōsQÜé0On‘'B*{{¨îÆô9§` ’Iâ€+&Ÿ˛Ė7¨õ¨BĩID˜$v“Å#ëVą1‰įU¨oíî!.’ OĩŠčēģUtĖ1]@R@MWūĐĩ0‡ķWi8ÍTÔåYĢÛNį$į­6](Jbˇ…v[ƒšŽy&´fĶmω#‘xV%Ļŗs +Īxsâļ.¯vX ˆž`GYŒ.4›kƒ0 ĻĮzQ¤Z}Ŧ\ų‡aŌŗtŨbId•îYV5čqĐÖÜwÉšŦ c9ėÅt@šM˛_}ŠWįôė+CąVŪę)îØ0ĸkČmÜ e ÍĐHbßXÃ}Ɂ8äڒ 8a´û2))Žsۚ5fē, ÉŽ”—­¤Á%“ éLW3ît2vÁk›sģŌ´Ž4Ëyėãĩ~ę*ĖĮ:SÜW9Ēß\E­Ŧi9 ‘;R­.‡m1€ąlD0zŌŪč–×Ķ,šJŽqŪ¤–ú&Q<ĀnO7öûųĢ´÷Ī māH!XcUFA¨éđę0„—§!‡QLmBŪ5Ytįå9ëSŧę#yŠŒîĪėSNļ[˛lĖxéXWz†hííĸÄ9ÜÎMnAŠZÎXG2ŊyŠ%ēŠ Í ëš5ČßJļ–É-^1ąF¨Ēú…ŗŲh¯ ’ÛO=jĮö¸ˇyĢåŸâÍ6ßYŗ„k(.Ũ­…/G E…ˇurÎëÔÖā`Čôǝy†™–5Ũ€M jíĩ&RĮ[*dķŠÉŧđõÛ´œÆįœ­\¸ÔmáĘ´ĘĶ<ÖĄâYVS ǍĮVaE˜]…-MąV‘ˤį}_°Đí,á|Įa‚ÍYēŗw{rŅL¨Ü;VÃjvĸFC2ŊyéIÜ.Šák'œž\rT*ôúEŦö+hlcĻ;T†ūŨciZUØŪÍGkĢÚ]ąōĨ¨ŗ„^ŗ¸‚ų_/€WŠúĶ.ü7itҜ˛l|ŊÅ:ãU} Ŋ´ņõũā=qZks’Ģ"’ŖJ5 Ŗ:ëÃÖWQĸ•*Č0zĶė4K;4Ũ'?;uĢâeaÃޏ5MõkHÉE™ ÷sFĄrčQ‘ĮÖ˛u]FErÅ$n“˙ ũ”ä\Â’CŠŨąÕíĩ7€åOQE„g\xb)L$Jß' žw ˇ} ZŪ¤K“ˆ`mīWŽŽâ´Ė–@ zĶ!ŋˇžÕĻŽPĘzҍô(Ëáģ9^7ÜāĻ:¸ŦŨSMVÖaō␝˜tĒŋÛwsß|ˇH\uŽ“RÔâĶ­ÖYį?uGSNĖW-ÄģcP:V^ĨĄ%í×ÚRVŽn>•ÆĩģG7VŽĸEÁe<â§Ō5OĩXŦ×Oąb4ĩ ĸH4X“PnÅä ??ZŠīÃöˇw^~I9 w­IgŠĖ’:Ē×5^-JÎHžD /,sԁčUÔt(u_›dˆ =*†Ŗ¤ÃeĸHĒ\rNzšŨK¨d‹ÎYTĄčŲ↚ ?vĖ­‘3ÔQfއĨ›¸Œ’;ya°cėkb˙Aˇŧ@AōäQ€GĨ_yí­Pŗ2"ĀSžÕ ĀŌÆÁÔ üĻžĸĐ¯Ļi˧[ų`îcÉoZ’öÉ/í8¸íT4Ũv;ųdFQ^FOQZÍ ˆZ9€=AĨ`ē2ôŨ -åŽ÷UL}Ü×Dd]Ąƒ ųĻũĸMâE* Īj= 7BUĶ^ ōZ^XÕR ywyywD@ĮZéƒ ncÚĄ™6yŠ_=3Í‹AëÔÚ)Ų§g"™žq@δ¤÷õ¤Æ­/lRīI‚hÉ4 Sڒ‚iŌ€0i+éNî9¤îE 5Š*%?5=ßbôŠĖę÷ u$Œ¤Š=j8g0˛ųVāšüjÔˇˇwåã‰>\ôQŨ¤žaF}Eh™×™ŖdxBL9$ ĩ=ğØŅ¯?7STá¸{›‰ ‹t’ v­™Ŧ\éJŧ ĐÁjfG§Č‚9ã%†2jFōÛLŅĀ]‡V=KĨ›Š7Ã(*ˆ1‚*ŧqßD“Å|ƒ9Čë@tRŨÉÖŧ„ŦDŒ+ŸŗŠAĻĘ%sÎA­}9ĖúzäîČÆ}h`s^OŸxÁ˛‚IÅX´€ų7qŒƒˇĻh0^Ú^IJIl‘ÅKĨÛܖēSŒŸZà ˛Y4y&9ܤ‘č(iS•9ĩI wQi712ƒĶbËOšmŖ+šČÜ;P*cÃGrōEOjž~/¸"Š}—Tqöģ?ÅÛŊĄ†ÄAģ, i3ÂÆ3m4’6åÁŽÔËwčˇ*ŦvŖŒ})VËTļvŽ4%dāžĸ¯IĨM“$QĘĮsŪY–4XAļIz1ãĨfk¨ ú˛9.~R=+OB’éĄōåˆ*F095S\ĩī#–‰\ŅÔ:\@–ēĨŽ×Āf4Ëh×QÖåęsŪĨÕ,ŽĨÔ-đŦK(ävĻGL¸yā*8ČįŠšnîáߐ€*ŽĒŠė…õ§¤eĩ,ø7jeŧpŪũ—aWvÁÍ\ŧ˛žioðĮzw]:Ņb× q3…AĪ=ęŊ­”wôļĶ3m,Ũ _Ķ"ēƒÄrĻŌĀįq>•Jųn,5÷xÆÛå8õĸā-äV+ ¸vT|ŊjĩŠŦz”6` dŠŋĢé7ų*™KœļzŽ-n Ö-üČJī āh ,!Šƨ°į¨tģbúŊĖrHÁ6ėŖ4û›+¸uí°Ģ…“Ã¸4ũ*Ūę×Yš&‰ØAb(¸Z<‘Å~`™NœöÍ7IŌŖ NdųÕúôÛ [›Ģë¸S(6ãũ)ú\šņ´D#-ķ?ZW{X#fę}Š€—7“\Ak ĖÁęOQW$Ō|›k™‘˜Eŗ*šëNšŅîĻĶí5ÜBāAN´ļŋšļš‘R#ōÂôÎ(ē+xo ĘÁČØûąšŸAͤšHŽŪVÂ4Í&Ūō[ ģrŒ#*q‘üTũß$ë)Ž$bX‘×ړÕÁšÖR͜ŦDކ:6ĶõãfŦLl9Ŋ3Wë"î8Y•H ã#Šąh'Ôu„ŧXZ4QÎh@C%Ŧqø‰ ‰pޤ°íČĻi>|W—ņČ¤šî*[•ž´Õä°SĮËĪ6÷ļW#Qōw,„åĄ  6Ėú]ÚFY$Rw{Ȳĩķ´;—w`‰õˇ‰“Lš/īu›§yߨwhmÛž8äŅqYî­ü2\‚ÍŒ“ČZ=6âI­Ĩ†GÜãs9=*ëÚÜÉᕌFC†ÎŪäU=6ķR`– I#ˇŊ0:Øb¤žI4đrIôĸ=ŪRīÆėsŠSĮj‘`¸ōiAįښāmöĨåiĸž¸Ķž†žxŪų ` æ“=iÄāuüč84ŧŸJLdf“ę)00ÅJT4d˜¨”T™āR^ŪÚ;mËÆNIŠĘ̌0SrwzœjĮo RHÔÜ œ–™iĘzP!UFivŒP:Ōāķ@î­#ē@œg8Šâ`‰Q :b“ ÷§(ĘS‡`ģ4p:RöФ1į9õ¤1øđE=@MõĨSŪ€Û40? ééKœŽ(Ĩ&rE*ž´¸Āé@ hP Í&xĨ¨ !āJö¤Î/Š`’8§mÁÁ4˜ô¤ÁČúĐč’ŦúŠzĸ… RĩĮzQÛé@j ôŦŨVÖęę!´A?7Ž+Lūĸ›ÎáL,rŅø{PxÄO0įĻkĨ˛´KK$ļÎā9īVį4ŧ֋€*@Ē ĨÆqH¤JqԐĀ1Æ2^)c¨Ō€~`G­9{šgŲãiD…°īŠ‘ŖBT˛‚GBGJšq#¯Ŋ0bnŨ´nõĻĩ´2•2FŦGBGJy8ĒN) ĖĸÚŲä™6Œíj;+„ž€La(sĀqČĢ,;vŖŽ€wĻœÜԐ 3ëM–ã§J]Ā @1"Ev* ԁ֝åĻũÛFáßŌã­&O8ũh5a†PĀž†— Ĩ4qĪĐYCŠ  ũE4$P¨ €z(§‘îiŦĀb˜ ´'ž)A Ĩ(4p3Žô€R0+>ãKŠęæ9ĻÉŲŅGJ›Pŧû›ÎTļŅŌ°á×īŽídh-ƒH¤téŠ`tĀ*á@˜Ļ”3\ôŪ!”iâxáĊû\Ɵ¨k7pXÛ\¤ [wj,#q#Xķ´uëCϤc“Ís÷ēõŤöø„‘ß4īí˸ŦešâØĢŒS°ĸ5@éBĒŠā W6Ū#¸6ŅΖšAū°öĢŌëH,až5Üōđ‰īJÁsRXÕĀÍR}JÂ>Îķ.ãÆ*Ĩž¯<¯-­Ü^\áI_zÃŅėPŧ˜ĘÄ;ēûͰ‰ [@āԈÔ&OĨcžšļbļđ4ąFq#Ԛž´Öa#s#Œķڕ‚æËÚ@Ķ hەBŸP:×'%öŖzéj鉚8âēäČA쓁@ 1ŒRcôƐ`ôŠČÍFŸyŗÚX‘0sB‘…ĪŌ…ą SX`ƒĮ€%č{Ņžž”šČ⃎ÔĀÄ~&?Zk@^O4‡š &8ëJŊ`8—4ƒšE?5ŸZo@{æœA¤8ځXQÍ&yü(Î3ÍĐ; H<âšy=($ķ@éÍ°Ā p'Ĩį94¤We>Ë/Ns\߇.PGw 1ÉS] ėk-œČãp*xŽ'Lļ2Ũ˜‰t'!Hõô5BeßŊ ÜųŒAŽ}MM¨ŨÃ6mũŌ`u=1[ĨÁ&™öMĄAŊ}j”-Ū9XšcÃcĨCą—Ēē2i“nĘí5Ŋs5ĩŪ•>ĮRĄqžŲÅEu A6ŸĒš_,åXķEå„Vڐ*nؙüi\,ĖĨh×ÃōÛų€Î{u¨Al,d“r“å#Fi4;EžgYļŠå;]Ū•oqq´'ŨÛĐS¸Œģ˘Žšk4nŦŒģN9ĒúUĖ0ëHQ&BÖĻ› Åe#ģ°“?w#Ĩ0x~(õ5ē‰ČPsŗč¸XĄ \,Wˇîë†bF{š›ÄD'Š=cpæŦFڐēY ÛŠûÕKÍ2[Ŋu’u%†U‡AGQØĸäÛjOߘ\Ė:VäÚô6÷Énāq–Ē;/Eo.ų[Ė åETžąšķWTė‰H;Âõ V:MāãŖŒœTj˜u!j‘ØįĨâ“4ÜÛ4 yģRqšPp9hÜ=zŌhĪ'4Ķ×Ŋ+Œ^´Ŋi3Šâ€0ÔņOaOŊ œb—4ßâŖŊ0iŨķMšpæ .GŊ4ŌôÍėM(8^išĀĄcEŽGԜ1L#8Ąi€üԃĪJnsŌÆ€$Všwpj,ņNVų@¤ÉČ uģ{{SF2E80$Š\ņGzAÁÍ<ĐĀî;PAĻĄÚ:ĶģQp͚P}é îČĨã4ĀxāzæŒā Ņž ČãšrãœņAéžæ“ĸĐOOZW`8žÔåįŠoR3O­0ôåĮ$cšoLķŠP9ÅAÁôĨÎy¤{Ĩ)ôéEĀw€GĨ4ûPŊŊ¨ĐdsIīBāA­sÁ Ņü4„â€dœRS@aŠAÎ3@ Œžô‡)K2)ŋ\Ú1ƒČ IĮãJ­ŠĨ=)'&†`pHöĨpŌ“ƒJi:qLژąD¤•Eķ)ĮųQ@ O8¤æ“ˇŊŽ{Ņp ķƒCËĩ€ õ™ÉúRąÍ ã†([ÆĢôō2AéŠ2h=E,sôŖ #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NBLOCKS 11 int main(int argc, char **argv) { char *filein, *fileout; l_uint8 *array1, *array2, *dataout, *dataout2; l_int32 i, blocksize, same; size_t nbytes, nout, nout2; L_BBUFFER *bb, *bb2; FILE *fp; if (argc != 3) return ERROR_INT(" Syntax: buffertest filein fileout", __func__, 1); filein = argv[1]; fileout = argv[2]; setLeptDebugOK(1); if ((array1 = l_binaryRead(filein, &nbytes)) == NULL) return ERROR_INT("array not made", __func__, 1); lept_stderr("Bytes read from file: %lu\n", (unsigned long)nbytes); /* Application of byte buffer ops: compress/decompress in memory */ #if 1 dataout = zlibCompress(array1, nbytes, &nout); l_binaryWrite(fileout, "w", dataout, nout); dataout2 = zlibUncompress(dataout, nout, &nout2); l_binaryWrite("/tmp/dataout2", "w", dataout2, nout2); filesAreIdentical(filein, "/tmp/dataout2", &same); if (same) lept_stderr("Correct: data is the same\n"); else lept_stderr("Error: data is different\n"); lept_stderr("nbytes in = %lu, nbytes comp = %lu, nbytes uncomp = %lu\n", (unsigned long)nbytes, (unsigned long)nout, (unsigned long)nout2); lept_free(dataout); lept_free(dataout2); #endif /* Low-level byte buffer read/write test */ #if 1 bb = bbufferCreate(array1, nbytes); bbufferRead(bb, array1, nbytes); array2 = (l_uint8 *)lept_calloc(2 * nbytes, sizeof(l_uint8)); lept_stderr(" Bytes initially in buffer: %d\n", bb->n); blocksize = (2 * nbytes) / NBLOCKS; for (i = 0; i <= NBLOCKS; i++) { bbufferWrite(bb, array2, blocksize, &nout); lept_stderr(" block %d: wrote %lu bytes\n", i + 1, (unsigned long)nout); } lept_stderr(" Bytes left in buffer: %d\n", bb->n); bb2 = bbufferCreate(NULL, 0); bbufferRead(bb2, array1, nbytes); fp = lept_fopen(fileout, "wb"); bbufferWriteStream(bb2, fp, nbytes, &nout); lept_stderr(" bytes written out to fileout: %lu\n", (unsigned long)nout); lept_fclose(fp); bbufferDestroy(&bb); bbufferDestroy(&bb2); lept_free(array2); #endif lept_free(array1); return 0; } leptonica-1.86.0/prog/bytea_reg.c000066400000000000000000000160361506303110300166360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * bytea_reg.c * * This tests the byte array utility. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" int main(int argc, char **argv) { char *str1, *str2; l_uint8 *data1, *data2; l_int32 i, n; size_t size1, size2, slice, total, start; FILE *fp; L_DNA *da; SARRAY *sa; L_BYTEA *lba1, *lba2, *lba3, *lba4; L_REGPARAMS *rp; #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "bytea_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/bytea"); /* Test basic init and join */ lba1 = l_byteaInitFromFile("feyn.tif"); lba2 = l_byteaInitFromFile("test24.jpg"); lba3 = l_byteaCopy(lba2, L_COPY); size1 = l_byteaGetSize(lba1); size2 = l_byteaGetSize(lba2); l_byteaJoin(lba1, &lba3); /* destroys lba3 */ l_byteaWrite("/tmp/lept/bytea/lba2.bya", lba2, 0, 0); regTestCheckFile(rp, "/tmp/lept/bytea/lba2.bya"); /* 0 */ /* Test split, using init from memory */ lba3 = l_byteaInitFromMem(lba1->data, size1); lba4 = l_byteaInitFromMem(lba1->data + size1, size2); regTestCompareStrings(rp, lba1->data, size1, lba3->data, lba3->size); regTestCompareStrings(rp, lba2->data, size2, lba4->data, lba4->size); /* 1, 2 */ l_byteaDestroy(&lba4); /* Test split using the split function */ l_byteaSplit(lba1, size1, &lba4); /* zeroes lba1 beyond size1 */ regTestCompareStrings(rp, lba2->data, size2, lba4->data, lba4->size); /* 3 */ l_byteaDestroy(&lba1); l_byteaDestroy(&lba2); l_byteaDestroy(&lba3); l_byteaDestroy(&lba4); /* Test appending with strings * In order to make sure it succeeds on windows, where text * lines are typically terminated with with "\r\n" instead * of '\n', we remove the '\r' characters. Also, note that * for files opened for read with "rb", as we do throughout * leptonica with fopenReadStream(), windows will not * append the '\r'. We have 3 ways to remove the '\r' * characters from the byte array data1 with size1 bytes: * str1 = (char *)arrayReplaceEachSequence(data1, size1, * (l_uint8 *)"\r", 1, NULL, 0, &size2, NULL); * str1 = stringReplaceEachSubstr((char *)data1, "\r", * "", NULL); * str1 = stringRemoveChars((char *)data1, "\r"); * which can then be used to initialize a L_Bytea using * lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); */ data1 = l_binaryRead("kernel_reg.c", &size1); #if 0 str1 = (char *)arrayReplaceEachSequence(data1, size1, (l_uint8 *)"\r", 1, NULL, 0, &size2, NULL); lba1 = l_byteaInitFromMem((l_uint8 *)str1, size2); #elif 0 str1 = stringReplaceEachSubstr((char *)data1, "\r", "", NULL); lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); #else str1 = stringRemoveChars((char *)data1, "\r"); lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); #endif sa = sarrayCreateLinesFromString(str1, 1); lba2 = l_byteaCreate(0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { str2 = sarrayGetString(sa, i, L_NOCOPY); l_byteaAppendString(lba2, str2); l_byteaAppendString(lba2, "\n"); } data2 = l_byteaGetData(lba1, &size2); regTestCompareStrings(rp, lba1->data, lba1->size, lba2->data, lba2->size); /* 4 */ lept_free(data1); lept_free(str1); sarrayDestroy(&sa); l_byteaDestroy(&lba1); l_byteaDestroy(&lba2); /* Test appending with binary data */ slice = 1000; total = nbytesInFile("breviar.38.150.jpg"); lba1 = l_byteaCreate(100); n = 2 + total / slice; /* using 1 is correct; using 2 gives two errors */ lept_stderr("******************************************************\n"); lept_stderr("* Testing error checking: ignore two reported errors *\n"); for (i = 0, start = 0; i < n; i++, start += slice) { data2 = l_binaryReadSelect("breviar.38.150.jpg", start, slice, &size2); l_byteaAppendData(lba1, data2, size2); lept_free(data2); } lept_stderr("******************************************************\n"); data1 = l_byteaGetData(lba1, &size1); data2 = l_binaryRead("breviar.38.150.jpg", &size2); regTestCompareStrings(rp, data1, size1, data2, size2); /* 5 */ l_byteaDestroy(&lba1); lept_free(data2); /* Test search */ convertToPdf("test24.jpg", L_JPEG_ENCODE, 0, "/tmp/lept/bytea/test24.pdf", 0, 0, 100, NULL, NULL, 0); lba1 = l_byteaInitFromFile("/tmp/lept/bytea/test24.pdf"); l_byteaFindEachSequence(lba1, (l_uint8 *)" 0 obj\n", 7, &da); n = l_dnaGetCount(da); regTestCompareValues(rp, 6, n, 0.0); /* 6 */ l_byteaDestroy(&lba1); l_dnaDestroy(&da); /* Test write to file */ lba1 = l_byteaInitFromFile("feyn.tif"); size1 = l_byteaGetSize(lba1); fp = lept_fopen("/tmp/lept/bytea/feyn.dat", "wb"); for (start = 0; start < size1; start += 1000) { l_byteaWriteStream(fp, lba1, start, 1000); } lept_fclose(fp); lba2 = l_byteaInitFromFile("/tmp/lept/bytea/feyn.dat"); regTestCompareStrings(rp, lba1->data, size1, lba2->data, lba2->size); /* 7 */ l_byteaDestroy(&lba1); l_byteaDestroy(&lba2); return regTestCleanup(rp); } leptonica-1.86.0/prog/candelabrum.011.jpg000066400000000000000000001640201506303110300200050ustar00rootroot00000000000000˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀTÄ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?į<=Ļ1<Ǟ\’[ĖuŨ´gäWP–åqŒsY^‘ÍÍÂ2sånãũîZéÂeA9ĩ&ĐŧôĮjĄŒCœ÷ϘōxÍOˇĖ€îC“ž´Ē§9č?úԀaMĒܖôöU${piZ0Œō>”ō›°N:ĶĘfŨ<Åm§?Z_#\ajØL€s“ÍIŽAö  ŸgF,2ARy(ÄŠČ<㚴Ūxų‰Í0ü€œĮ_Zböp:íLû*ĀrMZ+=ņDjßÄ9įŠC+­ēã'9=ĒHā€éŽÕc)ãšUā€zĐ>W_Ŋš˛ ráI°ņ‘Į­+ŊŋËËíĪJtvę1ƒœŊjv xnA¤R¤ä.r‹ũáŠQ#bŦā;tā´Õ‰C/ž(ēDxeÍ+G“§#õŠÕgĶdäĶļœõ‹¨đt8éKåe@ÚŽmČādŌDĨÁہXv‹YĄ;@^ úf˜°ŗš' =…](8éúŌ ųū÷áE…r™ˇį§ŠL%GŨĪg`'#9đ‡iØM”ŅąFڙa Ž3V‚į Ü9er{Ķĩ„ŲXE¸gœp{TŪY ĶĨ=v¸,'ڜß('#ĩ;"n@ņnãæĮJ_' qĶ•°)Ī<įšŪšJåŊĒõ€u<MĀ=F:Ōg#ļ)r•ÁSs‰}ų9Š#* ¯­1 _–į<~UUŨYČVŊĪ"‰ƒd Œ•Ā÷5ãGÄZūŦ8žöt•$ÃÄįäÛzô­iRu/c:•;\ö}Ŗļ@¤Ča´ô'Ž+ͯž%Ū™d]>Ōˆ,’d“īÛ‘?üBīķŪŽs„G•k-NĻoąė>Zį‰ã÷Ļä+nc´)=zW¯Œõôž1 ûHYįÅnj'QŗđvĄ6ˇvŌ]Ū˛ŦQn ĪaĐpOACÃĩk°UĶŲ†$BN*GAڗ :gĩxׇ ÔīĄx-Žåﴌ´“I~īNŧôũkKAÕĩ k†ššŋ™4ĀŦĢ’oysžũ)Ë ÕėÄĢߥęŖĀÆ}iģ°Ų#5æKâŊjk‰ŋŗmĘF€nICHzu>„Õ9<]ⷔmm¤mHúā˙:K .ãuŅ닀1ėsN/ķ{äW”x–ҁē6äČY#ųEkhߤŋŋŠŪūÚ!9Ũ:ąqi<<ŌžāĢŞ€]#Pė@4ŽāƒčF*Œē´VÂc&c#9Aģ9éŌšæņæœ× ŊĩÜĖšTqõ5œa)lâˇgS!Áį{tĻÆŲL˜čkÎô]>Ĩy¨ĖŅØ–Ûæ;ŗÂŽ=‡5{SņôP@cnLŦÃwÚ¨P{ņÖ´öŊ‘Ú6šÜ÷ÉéžÔĄž\s\…—‹gēĐõ ļļˆÜŲķļ2Yc ×9mņUōn$š;vlĒãžüō0(T&ī`uĸzšģrN:Ōģ‚āĪæv^9ÕÚŪkšÅŦą  ÅĘqÁëĶ„ō3íV5/ˆÚAi%Ŋ“ÎŗÃæ“ŋqƒÁäĪØĪĸ/ÚĮŠÛīōČŨ“Å tÜ$ âuĪęC`l-•–î/4šųČŧÔÖž7ŗŗŗŠ+˜ŪKæ@ķGk@cןZ=”­pöąŊŽČœŒZxlƒĮĨy^Ąã[Ģë[Ôĩžâĩ˛Œ  ę§žiņ|HÔʈ~ÅnnaÚL Sī“Uõy“íâzgÚ1 …ÁÆæ=jÁá ¯JáŦ"k.p—ŗg¤ŧ̅ž$ø•Ģn¸ūü$gõĒúŧÉöą=ŧ€Ü.GĶĩŋ&ŧŗū…Ķ]Øjĸ#ģíŖvGb‡úb¨ju‹ŊYZÎæ+k—ŖÆ2ĘV4*ĢØ˙ÕÆ0 ˇ Ŗ`ŲЌT0Lg†6*FG"§V Į\V/sQqĮŨšĪ4ü8ÍFËČ\÷íۘ…Q:wáې!Ž=ŠOZ…ūBp:ԱᓑČ4}태Ú€x ö4\ێjœuŠNáĢ¸dqškĘp1@Ėéoĩ‘û;œäbBqŸsR0@ێ0 r=îvlXÃ`íĪQÅ(}ârsIrsÖ§ę˜Ččj’3cCrį'ƒPČNÎ_J—Ämã?•D2Ī͍4É)O2[Ã$Ė@TRÄú2kÃ5 ŋíëĢ÷}ÄŦBgî÷ĪåÅ{n˛ģtkķˇ [š˙ĮMx–›Lë"ĄÚ›AĮĢ`õĀĪãŠíÁŲ&ÎlN­#kNđ„fÍu WPŠŌ͆AVˇ§ķ­ O čú§Ÿũ‘Š<˛Ä0ë4.Hã°#đ§xÂXė­t˜šŨ Š<}š@q—ž>„~&Šh—ē–c-é6ÖöWlā3a lqŽ3íZķNQæLĘŅO–Ýoa¨×6˜Hã…ūuã<n¸ŽzÍĮRļ¸š€5f #p˙2ķœĀķéZ6šˆŽŌęŪ[s˛+c{š[Šf<îöīXVļrĩiq /… H8ČĮũ}ëH++2%ŊŅĶ_éO yíQ„˜{‰•×Ėeî̟ğ\ĶŽô;é×ˎ;MĘ!¸æv#?SÆ:úÔQhËq͸$V÷E°’BĘW sĘîį­.ą¨Ũ[@šx™VRˌ9û¨qŽŦĶw˛e4ŒI'(ĸ4švķEŒīL˙öĮéT Ķ,ĨMÚBUđą[Ž üēūfĩŦt95žGIMŦMûÉ /!ūę~=ëBßS‡OÔm`ļŅm"–')ûį"FČîĮŒŸq[s%ĸ3åžį0ö× VI Ô]›!L㓎)ļwvvŠÍqŌÎŌņČr>ã<Gc^‹sŸsŦi×~AĩŸ-ē"@]Įƒ˙GZĩuiĻę–ík}loŽãs› ŨČlŒĮŋZmŨėû3…ĶĸĶõZm> ɖŅĶ͡ķÁ!H*ÃŋäsR%œ_Ī,pÜĨÕ°DbŒOîčŲëŽ;æ¨\øvōŌÚ]A]ŧ2mM·ؒ7pxã>õŊáVđß鲐ąÛÛÄÖ˛2ˇ,ŊA#ÚŽ[]­™[[Ķ ’9ī/!™nn0–č̰ŧ˜›—ŒŸ­s1ÛKjVIUJ@qō’Q]‰âÔ.uš‘¯ÃZ‚Šī… mÜz¯åL×â×ËN7kn¨Wȡō\ĀāđĐsN Ų.â’Õ‰gŽKkØ)ō!“åļˇQ"zƒČ÷ëVüCá‹;HƒSĩ’ōũ' É)|`z:ÎđܗM}"-äp\˛2@×lŨŽ™ ķÍhØhŪ!ԞöÅ.–ÔċĮ¸…‘}sČíJ^ëŪÃZŖž‰ĨŌä2¯’†Nr8ę:Å–ë,ztöŽî.‹ ¤rģîqõũkwM°2]Éx#ž[ĐÚŖe†lãœuŽsL§ÖaŽÕd߉'¨÷ôĨZwģ!Ŗčû4eĩ‰X傌öíSĒ€sšdc*8ę9ŠprOĨyŨNž€Ā•ĀÅOŊHF;ÔlÄōŊhâbÄv­<ä?ZŠ6ķ0Fv‘sSŽ@¤˜íaāĘ3ž§=)>`įåõŠÆ #…pĻ$R*į>†ž¯0;b¤šÎ(¤šŨd“vO§ŠeheiqŗØÜžHČ9úš‘r@R2q‚iú`ĘéOA3õíķ@0@œW)ŌÉbBA ‚t§ĄËĨ;v2¸īųŌ0#•l Æ­lC'v: ŒûÔY ņpjMŸ^ĸ( ;pzĶՋBŽ ŠúmڕZIëÁ¯ Ōæû>c vâo>ëĖwc ¨¤÷ãÚŊŽû+ap@F}ûWø|Yļ‹wįĖë2ĘdclV'#ŋŠí]x…œÕ÷D#‡X—TƨŪdĒģcdÆ įƒĮJŅđũ͸´ˇūÕÔ#û$.|ģVˆ?Íß9éëTüOÚfŋĶ! ,ģ(˙tĄ­[ŨÛ^‚ęûEn2<{€Žī”zãđ5ŌÚåIėsŲķ;õšÎŸĒ+L‰4%CBU dŒ`zbĨŗēˇģĶõ;é$dxŖeŽ5ہģŒ¨ô=+*÷R†‰7%–ęØųyeûËÛ ãœĐËiˇ>dLĮYHĘãƒô暆–{ƒ–ˇ%iw,Ēa°ĀmĮąõéZ.ģ§Oá䍤XDq¤L‡ŋËŅ@äô>õæp(Ā•NÕÎ:ņßņ¯C˙„OšĩŽ{KųáŽes†c#éQ]B˘Ē\×÷L{é4cĒŦëˀ9ÉĪԚū?:´ņBģGlå}pCäh‹Š[„“škNÔlí,Ŗŗ¸”ũ•%’v`Č ĘíÜū!–'‡P[Eŗ!0™˜ŗ6wöíܑíYØYØÍi ´éˇ˜ÉĀ,W'iၜ~́õ{€n%šöHž=Íö|,`g äßŪ“ŠÜ{õûËM_ė÷‰yž\'6í žį$qTį[K Ēņo™Ãn}ûĮŠ‘ŲĒ}a"ˇ‡OšFXĄ–Gd†&,##XžŧöãëY×7Q [p†U˜—V,Ü*g ĩiĸą2zŨ[¸R)ˇĀ#b$ęObOåúŌy˙0æ<×ĸḁëÎGįWôũ2ĪRžhīsˆļ¨`ęA#=9āŽ=)?áK{č‘ĩa,œ|ĻŪqÎyÎ{Sæė+I’ØŽ—–¤ˇĀ  E6;cžjžąŖÉĻÃm>Z+{˜ÃíÉ%J‘ëžõŊiöMÍ&k;RŧĻ“–}ųįæ `ū•{ƍƒé2ŲŽß awƒžŨ8Ŧ”ß>M9ާ#¤ØJˇ˛Ás÷f# ÛĄãOšŅöO‘j‚)|ϐĄŽā“œŌééĨD&ļ\\N…,P;ŸZÔļŋž+kÛėEz$mĖåqåœqō‘ū5rm2b“E-Á'Ņõw™D†5võõ#úSôûkČŦ..ÖÆÛ;Ø;…fR1é“éW|7}ogöáqsIũĀŧLT‹w-ܒ^LÜY$™†âá|ļŠ ÁãØÔÉģą¤Ŧ…’;m/BäÄ.˜› ĘįI==3ULĩĢXDĒ č20@ņÁú ÖÖŋm{wg Ãt%ų<ß,F2ÎārG~kxzm%ÕįÛcšē ēgU8PŖšíôŦųí—Éwc‘ņ,zQ‡L†Ę8Deät8f9ÛĪęjŊļĄnmĖo,&GmXáNIČö¯qĻiúŒ-˛%‰Pd&w$lÎ>oîķĶ­g[ø_TžGkhX€vįĖM˜ãœäžG?hœylČißBk/Ūy‰<ōČŽOî𠞝‡>œŠuŨŒT˛ē7‚@Ī›€Ä›¯8ΰâĢjÚUž›o %ߟy,…AFqÉä ûĶ4ņsq2FŌFÂ6åÎÕÔ.@ũ8ĸĘÜŅ vfŨęI¨ÉöĻe’ŌЕ6ĄžNĪŠ÷Ēēœ˙ۗ)e.”ļwÆZķ ;2'Š­XNÔMŦˇÖūk<ž8- ™Må‡ĶSE}&/Ëf҆ļq‹g•Û|L;0zr8úT'n›ĶûĖËy.5m3M‰=Ėjۘž 'ũ1[q˙jEn–ĐZ^b ’x†ÆÉ=ˇrGÍ;FW—iĨ"牨4íĶh'čŧûæ´ŽylîâŠÕe€ÄŦĮsžO¸Ëˉ/ŽÅĖĒŠŌ įöũqNļÅ%kIX8’Î 2>d ?VûųǚÍanHūĮ8Ģ,ÅqzãŠķžįbBŽ å¸?JcOũEH9ë‚heéFāFŅ@¤œN*F8lžiˆØÎ㑚4ņ°` đ1ŪžvãŽ*4A¸ŋ ‘ŒSØŧM ĀÁæ˜ÃåáoÂŖbJ#ĩĘŌ/Îy4S\ÔUčISK]ąß+`ūũø˙k Ŧ° TļqŧÔAl¯˜H„ķQĘxęW­r&v˸HNáÉ"œŪ—¸÷ŦƒhZfl\úv"˜9'ž)ÜŠįÔtĻF]—įB‡‘É˙ Ąœ2•až0G¨¯ŋŌN‘âW˛¸yb‚BŪ[Æq•`vū¸ņ¯ps‡íŽõâŪ/ņšÆ§%Ž"6ÖŌ2ÂĘŋ1ėI>™Žŧ%îŌØæÄÚĘåJÆkŊ:Úūōiī XĀ&'ÜPž ƒ’¤`į<j…ī ūΊ$ŋKUCG!\`œã|Ôī ęcks%̎ÛP‰J7úšŖ•>‡ŋzÜŊņ¤‘éĐŪ&‘m‰~ė‰(`čFē2vĩĖUžˇ04¨/ĩmJ=6æoŗ[Ę0Qåņ÷ŠúäŽM3Åz§öĻļĢlÅâ|˜ˆū/R>§úVt÷"˙Py¤b{ÆC‚Ē bpŪŖ§é[š7‡'ŋš8íÉ)ŧn°@QūĪŋëė;Û´_3%7%ƌģ­.ãNąˇģ ˜ŽŅ”ņx9÷ëôÍkAĢęŗh˙Ųör´vČWtŧr äãŽ*į‰^xžËCĸ´‰cQOÚ ?\qMģŌîŧ)Ē5üQIq`Ė>uÎäčpGįŌŖ™I+î>V›ļŝ2x-Xuko1“Ę’ņábęxc0:dÖÕĨĶŖ¸ûid¤.K.â22ÄÑĢkæōéĨûw6åÉDiߏ÷ŖÎ?!ЇN“U›Q{č,ŧŠ@g%`Š!ĀsSÉՍÉl…0žŨcxŠ1•n#Čãą JļeûE•ƒÜyvČŠ#ˇUQœ.G#$Ë{VCs­Ëö‡ļ+$¸dYTovôĪSųWIŦ"éÆŪÎëdé.ŲįĮG$*Ž?€zAU.ˆQęÄņ[è鐄ļ™ZŨˇ#2¸t#Čü̜´Ņ¤Ô´›ÛŸ´=¯ÎcaÕJƒøŸU¸FšAyąFø•cŒ*GčČŋnÕoCÕáļÛĖfH䉪B>fOBŊņČČįŠ"œa”ĩ14Ģ™-į†eÁ,l˜v]šëķÅtڐ[–ŽöŪÆ9îĨfĖr!ōävå~™ĮZĄũ˜.ôŲĄĩ…ĻXČk{œymŗ$…`Øã“ČĨ¸Õ¤Ķô˜të˜ŲãÚGĮ=~â‡ī; ēŦĖû‹íA-m4éā{Kx¤Ü Á˜õ9ûƝw,ˇW+xT™§ŒųÆ!ĮĮÁ÷ĨŽ}ĻŲíŖs%ą…(ĄĮâ:úU¯•Y\ČÃjÜgל˙“Z(é{åæ[kxmĄķg;|ŋõq–ËIŸä;ûŅa{5¤ ]s°ä  HÁâĢIĻę1iŠŠĪ[w}Ą›‚ŨķôĨ–éÉ+ųĐ> ǎC߇švOĖW%–[hīÁō‚Û?%Q†Bį§ø­ĪxŽ×RŌŖ°ŗŒ,HĘrŨzsøtŦK´ļûe¯—q#E"îę SЌtíZöSxrŧ–â9Lhû!įį—¯?KļŽÃWؚÎö÷Mļŗ–Gk=C*‘’W#㧨§ÛÉ–’΂iíå€ĸ¤ėFŪO ČįéYöķÜYŲËsŧßŲČQKu^xüĢ8‚s:h mW# 63Œã¯Nūĩ* ļ7'Ąuâå#ļe2ŊÂųQ&O<{OčkJ×íšN§uoûÉ^ÂĘęH ÃĻ{c‘Ö¯čÖÚT[æ‚påɕۊUQĐfĨÔõ 6 mN2ŧōāģŽ¨'9vė?§.WvąJ6ÔÄē´ēš•oŲüÂJ#ŗąč=OOĨ\Öl™ŠÛØC/™/ĘÆIœaY‰Ī^ƒ{MŊ°ĩŌ­­ręąČ\Ũ:išFsØ=*ŊGS“Q[ˆtûĢ+D#.Öۚ@ ÜvôĄ6Ũ‚É#rîM2ßOĩ†ŌųâŨR5xĖũ°FFGzįĩ[‹šĨ[ϊÚTŽPÆ{G py$ÛK?T{šŊÛ]͙!’@ÆaÎŌŦqŸjĘִˈôņš!XâgV]ߙ,s˛‡Š—{œāv“īKo&ĢŠ^ÜĩķēZ[Áē[[Nšč€ƒ“ŽįšÍÔvėW*šWÄ×v2|?YK[åcEX0ā^ĩÃCc4×v:fäfFX'$)ËúK˖’ō[+ĨûœS4ŸgNv>¸}I­MķûT‚ęKĩ5ÚåY\†U=†@ÕÂ<‘˛&Ræzžįh ÛD8ųTV‚ājĨž1œąĘŽ¨Ģƒ'ŽŽuĄ¤N1ĮZ\6â—nrqô§pŖց"˛¨RzO­>o›“šy$¯OƔÔ1yÆ1`™A¸į§J“=1HCr:ŌČÁ‡z‹ŒĒđ1ŌĻ|$öëP:œdžĻĒáw(oŧzQNâ$ōÔoFYIÚÜtœN* $ō1BŅo 7pF:כÁđŠūÖ^įSFI(ūb;dž¯LmĀn<įšÁ2zV°Š('Ęg8F[œ”ŋtī4ȗWJûB&Éī)ĨšđmÛ:Ŋļ­˛LnĖ–‘1Î1œāsÅu,į8į8ÎqÆi0NĀ\ãi'֟ĩží‰Â:Ô>j÷w&y5;YYĀ3Eŗ@øSô˙ xžÜ­ˇöĮ“iģŦĖH_öF8âŊ—Į’Í2c×oqéWíįˇčgėĄšÄx›Â…öĨm}Ļ]*É J™•ÎāWĄÎÕŅl5čä˙‰ŽĄ čĢ*8ēˇšĀé[[ž@rAÚ=éĀüų zœ€}Š:’qåcäIÜĮ›Áē5ÁG Ûļ2<–Ú2Ųä~”ĪøDļDŅĮĒۈÜō›bäøo^'°á9aķ{Ԋ˸ųWcšđ‹#2Ū^-Ã|ÆpA8Į#¨“Á/6•ĩūĸÍso‘ąpđ@`z€EuŌČĒvąÉÚIúS$8uØ3Č<õĢö“ļâåcƒŅŧŠGĒDÚŖÁ%Œd“ļD‡œdcÔįš×Ŋđ>v‰×pÉō_ū"ē"üG-¸Ķ& ‘†'°$ž)ē“n÷„V–8‹ę6-5’QHØ%cņŠĘ“ĀēÉMŋmˇxËnČØĪŽ1^œ]w효—žqéOÛÍ ŲAžuÃ{÷cį^Û ˙g-ūĐé> ĶtĮYĨ?j˜rAō¯üē1:ÂÄČĘĒ_ąĮZ{(1ƒĶ­)Ö¨ô¸ãN ĄâĩûāŠd†Hœ2–SÆ1Åa/Ãį}1Ökõ7™ ÆØ÷ük¸…;ņ• c=¨e+mŦ~oJ#RQVLRŒdîÎ*×Ã:ôwQĘ÷|†ŧĩŒŗaAî8āũ9¨gøyt muû^íōAÆėį ķú×{īf`¤| }iâ"%܀äį9æĢÛNú ŲÆÚ™ú&‘ũ—§=ĨÜËrō3I+Ic΁Ŧ|;KŸ6M&émð-įf}Q]šĄgŠûŧԞYŨTōFk59FWLˇ¸ŲŖĖÃŨyöĄēŗPB`U:ķbTbŽ,xcÄ|¯â­×8+g˙B<Đ~ũĄŒ˛k÷’OÕ°#ĄękąũÚ¸RĘņHÍLīUU6…<š^ŌkaōEœ2xg\M:$š´ķmg’â#$ä|Ŗ‘ĀÉ$ֆŸá ļŧ’˙Yž2\H-ūP­žH?€Žĸ]ŪYp}zSžPˀ2xü(u$Ñ&qšŸ…ĩϐĩ–š¸o‰˛0G~2?J´_]ŦqŨęZy@rĄq˙|×hH,Āc“Ø{R*ËÉ$/ĄTbpG Ū ēą™oKmJéHÄsƒkîĄ|'­j }[XžÔ´c1 dãîŒvģļÜæ‚ģ–BÉéǞĻŽsWđŨöŋ¤Z…åŦ>VÖg†ÎXuÁ=ļ+žžøĢ[í‹OÕ"‘2X,‹°öî3“^’šß÷{~tī-ŪX÷&“ŸŌˆÔ”tĪ#Á^)ļ§Š;mį†e—ŗî9­´%”ļ+5¤I:ėbˇ ĀĮ>ŊkͧBĨŒ) éP›!yÆzæŸļ“ŪÂöq[eÂûÖ\j1mÁ,ą‚yĮ­e7€üCn#ˇxâ1Hãî˸)ĪZöVA&ŪÁĻ´2H 3ĩÁcéVĢKŠ.ščhÚĀąC;T Õĩ`N8âŖSōŽƒ"I˙&š¯ŠŅaü’W'ëJ@āPh=r8Ļ!ŒUzxĨ''ü(+ōįzO,pĮ­aÜcĻ);OˇjPFũ) Ūąč(`G¸iwœß/Ō"’„tâ¤+ĩxÎr3šab,8îiPÆ $1ĸŦã<ŅLZšųzĄŸÄÖdŒÉ*ˆŠĶŅ5ŠW&ŨIõ?1˙ëÖX\ܡ9&šVį[؟’ ģišäž§?Ԝ܍Ž ?jõĮz´A ķŒtã4âŨĐfĨāķƒÚšF8ÎG>õD÷>*3ųgĪĨXOŧ ĪZ¤€9š5ąĪø–ū]7G–HKЛɁGRíĀüēÖOÃŊbKë ‹ įwŧ´b åŠ“ũGåPęzĨ•į-Ŗēē†+]6?3÷’V”ãˆū•…¨jvZ'ŖÔôû¸f´ēâu‰Ãc<6qøę…;ÖÚŊNyÍss-‘ęnɖpqQā3|¸ûÕ¸ķUN0sDlTßŪ5Ģą#Fŧt˛|T†57ļēÄĮp$ßé<âķÁ fĻwmz+‰4$—O5ĪøĘŽ<15Ŋē3K#F€ ˙hVûK–Ú<œZ‚7bî`TÅ´Ķ)Ųčrđø.ChÖĩ&” $¸é\ρúŸˆîtë­BôЂ“ŲkÕ%‘‹ôāķ/ž:ŋŨÜMûęē)ĘN2lÆi&ŦljžFŗŲ^^I:¨hãž@TûtŽžÎB,!3ÆRO,SÔr*UvÎF:Hį‚:ƒšÅĘRŌF‰$‡P@āK´A8æĒŖ:Æāmęž­q=Ļ{2ʑ;Š÷Å.[ģ JڜƯâkŊK[MBpŦNŲnqĶqôõ­Ąā‹/ą•kËæ¸l˙¤Ûp>¸Î+…øvCxŽVbwųG“Ü’3^´’ŸŪ)Úr3ZÕũÛQ‰7ĪīHķxüAŦø;\ūÎÕd{ģ"Aų,P˙Ÿé^§ņ]Aą8xœwpkΞ'ZƒĻé÷mķ2ČPœv#˙­[ŸîĻ›ÂV›Čcî ņN¤T §Ô!'¸ô;5Úģ~b0:TÛU“žHĒEßs6@Âđ1H˛ĘŦ žAņ\üĻÜĮ›ø÷ÃIkĢY>‰‰up$vE’Å0ŲīÖēøÉu˜ÆŸ¨0‹Sˆ`îãÍŋ×ÔTúØ2xßA˙a'n?Ũ…ã? ËįwFĘ]ÂÛĨHēļ?ˆ{ú×BjqQ—Ūbī9DíĩŊĶYˇTģW"0J…rš$cœuŽĀZUĩŽ…öé ĶYš#‡#Ļqڛá/oZ´WERú5ųqŧâÔUĪČÍá›y%$÷Ú˛jQ‹‹4RŒš’GLą39īĶ/–ƒŽWsėáēˇ'Ԛîň x\c8¨ŗ*čæüuļĐnõKģ¸n`ĖrŋxĮNõoÁÖâ]ĪPž{™Žf‹s´˛ŗO÷sTŧw!˙„:ųy' ˙Ą ŊāŠ^_ؒ2|ž§ęk[~īæguÎu0pxëR`t?•SVu}š'íĘOŌąå/™> ņZ\điöą‹V䅆ÃũĻ=‡_ʞ4ĢšV5ŊÔŽšGpˇ"4_ĻZá´‰æšøģv÷'įzF`ôÍzk>]7q‚kiG’ÉŠs]œ†ągŽxrŋĶīĨž´Oš[k¯‚ú†ëZžņ=Ÿˆ,Dđ!ƒėt'”?ā}kUȚ'Fo“Ą'ŊyOƒĐĩ^ĀúuŠX°`p9ī\æÃƒ…ˆ8ö§įqĀééLUįž´õ‘øĶAaųxĪãPË1@H]ūԒɗōÁ#›*Œ<į=é64ŒXĩë‰oäˇû6Ռ\x­­> ‚y͟Ū?;s÷GĨPĶô°ŗMpã™v°é[i šh$ú =qŽ*8BGëO–Qlā đ2*O֛!2īßú )į‘E+”MwLNp„¯ëX̟´7ÍÉ'WA¨ą@ŦˇĪ& ÃōO&šbu=‹DgėMž9˙ĨB#åč5*ā“ÎkDCC[nėw8Ļ Gš§°ČČĀâŖ'qßö§q ƒÉœņ\öšâ};D°¸ÜÄ×QŒ˛åģq]ųųŌą/|#ĄßŪKyueæNãįmíÉéĶ8ĢĻâŸŧD͎ēr~Đ4ŊOG[›ûXŽo.Îîü ˇCG|9ĨÚøriŦí-íä‰ÃĒaœžüžÕÚYiZ~”˛ +HāX äãÖŠßhúVĢ2IykėŠB–Î1Ÿ­míŸ=īĄ˛÷mÔÂđvĩĄĸÚE5ÔBítcf˜¯N:ôŽĩ`lnČ?6~•—máŌō+¨4øcš3”tΎ‘€ęGĩg9'+ĨAĨfWōËĢFp3Y~(_/Ã:Ą.ú3ƒžœŠÛȕ ĄĢéZŨŠĩģY=Û°’ɸĸ/ŪM­,PđÁK i…I 8=ĮVŒŧ/$„kZYdŋ€î`ŋÆqî?Q]>“¤Xh–† ŒHĮ-ķÉüjԎqœŒšĨQЎr'Há|ĒļšŽ^]ēl“ėąĮ"˙´ ä{Woäôų΁Ēv§i÷×ÖИæšŧÃqø ŅiĀ#8īDåÍ+ĄAYYŒxԜd“’j12ŲnWšrə1‘Œu§¤Š=V§QčE$* ŗ6<äזxb{xü{tĪ2$nfK`xæŊ;S´ĩÔí^ÎëqąšQˆãę+ ū0°#¸>kkNJ1iõ3šģV:$Œd7$qHːzŒäSp@°Æ¸DTg ›ŋē]š9ę3Ō˛lÕ$I`ĻĶĶôĨ–Ú;ˆŪ79W §ņ$ĘÜRrĘJ=čM‰Øō+;Áž.Už„@”-ũä'†ÎŊŠ☠ˇF㠎„õOPŌ4ũnØÅ}l’Œâ_ĄŦč<15Œ+Žģon:Dvļ>„Ž+YÍTIŊƒƒō0~%\ĨËXh֊eģ/ŊŖNHã~Ļģo i ĻhVrŒK ŪĖy#õĒÚ^§é×uo-ÜŖæžfÜįņ=+z9~l €0*gRņP] Œ=į&HöāÆŲ$duĻCnĨAs–QÅL˛*Ž\õĄœŨÛÚ˛4˛8ŊnúΈē4r\FĄ"—yg)aÆ*ėD1:+FFŪšƒ\ũĮƒ<;<ķK&˜IXŗą‘ŗž§ŋą§Ãmakœ"8Ŗá=?:Ōm4’")Ũļp>7đÆ›tĖĄČËŊéÂTË)Î{懓đ§§ëQvU‘æū1ŌŽt/ÛxĸĘ2ņ.Â'lqŸĄWuĨjVzŌWVĶ,ąČšã¨>„v§°-ˇrå[ךŸÁ:D×=ąē°‘Ėm&1†ü:~U§:’J[ĸ9]ŅŠ­ęēv‡§Éww"¯XĮ%Û°Öšxjæu­ęQ„¸žbÉQIĪ?ZŨĶŧ-¤é×"sÜÜ.1=˙lô­ÉeōԒ\ ž´9Ú<ąę%ģ˛KvHĮOj°Ņ—ä7B Aáēį<š¸€c¯~k+šØ“0ãåõŠr9Í/NOåHGĄâ€*ĸš”’ŠûÄÔ˛€HŨÉ#=ŠKc€i¸ųÎyæ˜1øcŒ3Í?’4¨2ŖāŊc֞IJ6Sģ$Ô|æ§$ ƒÎj3´ vĮJTt;ͲāHqĮ֊aråņŲI$}Î+šN/%īķčīQgT/ņsøÁrãÄk•hvt$V@0NúՌ6Iūà §î°6įqNB v"Ŧ†9ēväu¨;9qž īSžvzâŖįwŊ2DVÁ§^?*…°Įy#5;9>õ\n?LZ¤KegYXüøûÃ8ĻGØô#ŋ­^Ø d您8Įn‚jW'Ŗžĩ‹Œôf?oRwc…?á]ļãŋC\† >"xT"ûĒŖ­aĶoĄœÛM#ĻĶõ­7XI……ĘĖņā0~}ĢP.dR8Ž*ōqņ3N:hEfšėͤ`ãv;˙õĢĸņN°ú/‡Ž¯"ÚeQļ?f<úŅ(ę’ęz;ôīW˛˛•-g˜yøŨåĸ—l}&›gŠØęRÉĨÂČč>u# ŋPpj§„,VÃE‚ITĩíÚ‰į•šf-Ī'čj/éąļŸ.ąžEũ’™#™8$vˇ¨4ínQ]ÚæŗōĐÚ9'ĩs÷>5ĶV†Ũn/xqm`¸ëšĪņwˆ%—ÁW1õļžƒaúbēiPčú-ĩē*#Ë1äĶåQä&îėŠzGŠ,5k“k–+•É1J›IÕcW×Ŧ4qŨĖØ ¨æ?…MucgčÖŸo ‚Gņ.3Īåú×+ā[fÕī¯ĩëÔķ&i6ÄHČ^į†RQiËĸē|ŊMŧuĨĄés”‚¯,XūuÔ¨i ō‘ÚĒęēMŽŗfö×( ˛ķž úRjڒi,ˇ8ĸm@OV<ÖĄ´íƊŗ[&­ey¨ÜØC({ˆY@āvëSKĩ`ž"D‹c+€%<1âk øīVxŽÆËļW ķŸŧx÷9ü+ŌMŧwû&]é"ĘzEHrZÛ9s^į?Œ´CąÛPAtŠ'ņâĻ_č €uúŸáođŠ|KgnžԊÛġ$ƒŽ)ūˇ‰ü)ĻŗF…ŧŽĨA5^į/0ŊînSCGž‹VąKË}Ū\ō–\t$JmöŖiawko3íšæB‘¨įņúV…ŦÚ@°ÛFŠtU ķ˙DēÅŊæģot‹sc6-TH(‡æ8÷9?…Lb¤üŠmÅyžåē"āã ŦˏXÚjQéŗ´ŋi”‚"-øUÍ T‹[Ņ­¯âāH¸eĪ*Ũü띸‰ŋeÁmļ%ŽyÁÉĨęÔēOEcļ#1üŧņŒšĪÖ5KM"Ų&Ŋ˜¤Díېž:V–@؀uÉëX^8Ų˙^¨åūĖ)E^I0z'bö™oĢڋĢ'ß ā1Bŧū"›¨_Úh–Âęú_- š' Ŋ'…ˆ˙„_LÆ6ũ–2>ģEs,Ū$“QŗšōžÁ؃¸_ߞsø ÄÕ(§+tmFũNīĘ& ŒuĪ­`j-Ņ4íJk+ĢąŅ…Ū ąŒãIād랃Ė?é߸”g¸īøŒVĒhúlsM1´„Í+wt I>įéS¤[R÷’hÅ˙„ãçf58đŲn3ëĮsLņ•Ē_ũ’Æég‘cßō)#ã¯å\Ī„á‚Oxš7ˇ‰ĸWãŠí­´­>ÎøŨÛÚÅ ­Œ˜×oĪAĮZš¨ĮBcÍ-GŪN–V¯ss*E y.í¤†Tš%ŒîI0> Ö‰âO\/‡Lĸš/>gŨƒœâ03ū×?…EđöũįŅeĶn˜ Í6C€žÃîŸéøT8ûŧÅ){ÜĨÍSÄZ~zßM,F\ÄLÁŋ1šŽiVĒë9ēBV´ˊŸ˜č§B2œ'ہ$į ÆkgTņ—‡cŅîIÖáv”kp¤3įŒ`Õ¨ûŠÛr[ÕĢ›°ėšˇ†hœeW_pFiĘĨTŠįžĩ™0iÖŅ[+,"%Ŧr@Į&­¨PHŠŦ›.Ä{w1äĮãMšŲf1ŗ`llũjÃ08fœ$N9 )]ŽČUācũjš*Œ8ëúĶĸmɸŒņƒB÷$wĮ4…Lpiäîé¸ā÷Í1*yŠ7~4ŪĮ…8œJH‡œSˇíĪCš…[!’ę.Ų>RIãæ#ˇŌŊ kXîUã•IGųX ŒƒÛŠÍļđļ“cyöģ[vŠcœ••đßQœ¸ÉE?2%ėq’G7ÃũtÜĆ]đ'hے}ŋ^kĻņ™ņ…ĻŠÉŌO9‘xb5¯¨éļšƒŲŨÄ$…ņ‘üŽjž Øč°=Ŋ˜pŽÅˆi ÁöÍS¨ĨÕČ֝ Ī j‰ŖÛÂ˙-åLjfŒđČGŽ*¯Œõ&m)ô‹cæßŨ‹ ļŌy'Đbē ÍLŧ˜\Énc€d‰ĖlF;• šuŽ•ci9x`ĎiX–r=7h抗0rJÖ9xZâYY[ü÷J*˙6+OÃZä:Ɨ Vâ ,l~`Āc8ô÷Ž›h* ĶŠÉŧđΓy;Ī-ĸ ˆåã&69뒤gņŖ5i#Nč§yŠA%ô:Kīs…Ÿ¸¸īõŽsÁ×+ ^Ūhwīå;žûvn@xāūēûOŌP­Ŧ!>c–'sÄķKĨXę1$W–É2¨ã#‘ô=E>xĨËĐ9$ŨĘÚĻą‘b÷NCŋđGģĪL ĘÔä][^ĶôéZ(ŖkŠãlœaAõäšĐƒÂ:,+8ĩgt`SĖ•˜/ĐVdĐôΎh›EûP9ķrOJĸļY3ĞąŸBšû5ŧW›ŅŌ0Į=~€ÕŸk#Vđô*ī›˜–ã<œt?•mÜŲÃwÜ(xd2įQT4Ī i]Đēŗ€Į+)HÄcéšDãg¸84î„ņSÅ+¨Œšį=ũ)ŪÛ˙€n1 æĩ/´ë]NŅėîĸ/ãr‚F{ö§éēMĻ•oökHŲ"ŦåąôÉ⧙rXjšæ_ˆõcĄļÉB\OˆaįŗqŸÃ9Ģo‡ô¨ė’anā ĨÚ%%ąÜœU›ŨMÔŨöÎ)Ę )qĐUÛKdˇ!UАĄOzQĖšt#æÔāü1?ö'Šĩ/Č˙ģi ÖĀ9į‘•]Uđ´nļA°¯NGĐËᝯė–1‹‚ÛüܐÅŊsšą?‡4‹™¤–[L’pΎ–„Õ:‘nũŅ*›Z¸ŊˇļˆO$Ȉƒ,ŀVŠîŖŊđ>Ąpģ•d€2‡8ČĮZÔo h?)m6Ųã9=:VŪ•g¨Û,7–ŅÍ œ„n™*ĸše8IÜįôV 7Á—˛ČCd¤ã$ƒņĢZ6•jtëvšˇ‚{™ŋy4mėĮ'ŸNjōøoE­b4ûso¸?–W ZŌ´°ļ˛ ĩ‰"‰OƊ89Ž€ ôšįŠpžø•=¯Ë–ŠeQĀW?P:īŲ”J:gÕKī hzáēģĶŖ–fë#g?δb´ŽŪ†0ÁBŽâI{žhœâėƒW<įÂ˧ĮŪ&*ŲLöwOz†­h^éļš‹ÚÜIJC ”“ĪåNsŒ¤(ÂI·§Zkļ¯}kĪvėéæ(%#*ĀgņŦەƒÂ~:˛žHlu(Œ āđ•vēnk¤Û­ĩŒ&(ƒTšnŨŗUuo ézäąÉ¨A$­á?zÀ4ÕEÍŽÂävķ9ēK¨øj1"€obßUŽ“V“F]>qĢ5¸ĩa‡Ž˜õ?Jšqá"ôĀ.ėÖvB#HK6ŊWx}œnĶb=ÆI ~´œâŌ]†Ą+ļOa}m{ck4é¨ōՆŪ‚Žä98ĨŠÚ(‚¤hT`*ŽôЌiŒcŠŽdW+*3 Ã{uĻČšĩÎ^8ëW )Žz cKoP3Žhŋ`ˇrX6Ŧ*:T‰č8įŠl{Iî*O”“ÅIhRĀcŸ­"đN_9öĀĐ0ũ}úSÔg¨ĸāFÃ>ôōp;Ķ” ´Ž02Å1oCØt§2j`yü1Š”Ø8☇~4ÖÎG<͎sŒwĻŖœb3($ĸ” Ī*3ôĸ˜ƒP[˜Fā?$ôõǛčrOŠÅZÕ#o&6B2­œ¸8#ŊTiLā`vŽttą%ÉäôČ=ĒE\Ā9Îi Į¨Š0 jFrW5V&äîōŨ01œÔM´’ã­HHŒ GĩwąËōū4Ä5†T䞆˜˜P¸<ägšIY‚6Ņü& Iw܎{ĶBd¤íÁĪ9Ą¤<ã TL]Ą ŽH8Įj\3  ŽzS˛š-ģķá†ū*i” wM1‘•B¨œšO-˛8äUY QLŠIQžÜĶb;hä–cÉϞįnq´Žæ&†HãmŒCÃļGZ„īrĮ‹4;yLręVûŅ€aģ8íÚ´Ōá[lˆÛҁe+Üv¯8Ķn…"—J×ôÜÛÜČOÚĀŪŦ?į>ÕßÛ$kmƒEŗr6ãŠŌpQØˆÉ˛Ė’ŦvŪk| )$ąU×4ß,}l2Μ¸>ŊęĖŅ ­^@x¤RŦĐŒsšķĪ Üi6z-Éģļķ's‘ldųGNpGëD`¤› I§cšŠæŪî)&ļ™%Œ1ų‘ƒ}8ŠŖ”aTā<Õ oėÄ{8DÜ~õPöŨÍh›åÉČ E&Õ÷ ‹Pˇ–ōKe–6™H,›†åâ™yŠÚéņŠģž(C Ŋą\vĢcyŠu WIÍd"i!ũha–ũ1Z×~#ąŅŽ" ({ÅrSƒ¸Ɲ‘húÎö:˜ä܋†0ȧ xāSc´*†ČŊ‡4psc k= Ô§&ŊkŗoĨ1au0Ü `ŽyũkMämā2rzוjW°Ky/ˆŖ˜ĩä ĮÆÁ~^¸Į=õK}ˇ1¤Č¤‰¸}ĢŠ nâŠ>`ĀāŽrzVcøĢHˇē{YīaŠxÛkŦ‡n23Öļ~ÎsÜôŦËŊ#OŠ+‹™l yYŪG@Äācŋ°¨.ĖŠsn#øĢCT$ęļ˜ûŅČ­dšã!ҰĘÃĄŊpūĶ-/ŧ Šqm ‚G|—@HˆŽâ+A¤h6ĸG`:Sœcd(ĘM\‘dl¨n„ūUGTÖôŨ%‘o.â…ä(fäūtDÁÕÎN3ĮŊpž‰5­WZÖnP5ɸ1 a‹č=?úÔF)ĻŪČnRZw;K VßS…§˛žŖe?]G!ÆŪ•Áx†ė?hˇÖ*PßIä\Fœ 9‘øū•Ūyd庁ę)J)$×P‹m´Æ^ę0éËį^\E c{ļ?SU­5ũ6ī Ąk4÷Q%ļ=Ģ/ĮŅ)đ^Ŗ$˜;cAā3\ŗ­ŽŗeáũLQŠ•+Jb14hæ9 ĪļsU iÆäĘM;™æœČęšĻ@É#*Hč æĨ1`ĖĮ cژaÂl"˛ĐĶRŠÖlcž[)/-ÅĶō!2 Ävâ­ Ü9\6įŠķũR4…9ļ$ä{=zŲÎėŸîāÕĘ1­Ô˜š;[†åF}y¤IđßtmĮ?ZŒ~=ũ)ÉķŠ‡ãM°Ég8éHg$•ãĻAÆ*G…˜į°< ÔrDV=Ø9Áæųf,Fė6áĐv¨'RōCĮų¸§Ēx`āOû;9ųÉ[#šwKQYŊ HIãĐSœē¨\äy§ ų~÷8ëOÚ<šĪS@+ō#žĮĩL„•÷5.Xƒ¸ãŌĨGNŧSBbŒ})“ŽHžx8 žqÎ)2r üi§q4`ƒØu§†Ā sM9Į§zŨĪ֘‡dį!@Ļr'Ĩ?'×4Æ\ŽšÔĀc3+֊ –ä/Z(‹Šē6?ĀN?XŦ›väöįąpĀ߀ü˛cúŠÉ™ÁĐÍaŠĐփVBŗc9Q۟šĘz Wl3Čīš–%\÷Ē$wR<“Ԑ€íÍ9ˆ‘Ķ_jL“Æ;zĶ #ŽxįšV8Čā°8§°Qž D˛Œį¸ô÷§™ļžųüjå+ĢŦÂōfŽÉäŠ#+…%c\Į͚äŧ;.ĄŖhßdŸEēy|ÆbQĶ'?ŪŽĒBĀ|ØCĢl$NxĪzQvVĩw)h­~Öm&ĸ9RÉ#/eâ´wāqˇhĻc  áĪ›´Pęhzę3#FŽôkĩÅÍŖÁÄÁŖvu9 0ãÖŠ=—‹í5 E¤ŒĪ<@áQļųŽ›Ēŋ–4āŖ~âúžõ\Î÷'”ąæ xg5•­&Ąw¤ÉmĨ´iTŖ4ŦFÕį$cŊ]U&FNGjTFĐîĮZ•ŊĘnúCMŧ&bˇ7G“ĩ\„ôÎqøôŠŧ+iĒiÚLvZĄƒ÷$/įzûņÚĩÂūņŽ=:÷Ą@dŠīŌ›––ē–<Åä†ĪNõŸĒĩÍÆ‘u¤k$ōDŅÆŦÛGšĻĻŌI Ģģŗ+DŊÖn!1ëbÚhĐfD2Ę{œ?ZÜL:‚p~•FÛÃØÔ‘‡ÅL­¸ãuĄÅęZN¸˙-ĩ¸m!–Ōß÷*ĸl6Â,sūņâģĩ–>ŒF@ɨeV8ęy¨Ûæ ˇ cƒM˙+ôš[ąmόÉįĨr"nÜ1ŒĸÎQ€<œc4Ādۀ>÷563/5Đ]­ŒŒŌĨ7†éTK>Ōu=h Täãf‹j Nŧ– ĸLœdc›$ëÔ‚{ ¯ĩŪ?R§jCÆwg¯J,‚ė¸Ŧ}ã́VƒÆyĒĄīV"9÷ÆqP ĶԁC:õĨįĪ4ĒyäSؑ…ÔĻG9ëÍ'S? oLžišy8Ļ&;ĢqŌžā`p9¨ÃĒžz ^bPgīcëEFėwvĸ Œf˙÷-×ę+2ę5)¸Œ`Öŋ”?´Ę.î[qTŽcmŽ7Ŗ§ʎÆQQŒqúԈx Å9”‡< ~U p:5Ē2{‹ŊŒšÛōįąéR60@ô4BWkpi\aÉ‘LDC%€'Š .:ũ(îäƒŌ˜Ķ|„c'­\†>@ ž2ĒĖHn8Í+͝ĖFzb i¸åzƒE‰m>€hĀĘãæ¨ŲömʏëIįâÉ'­…Ё„ää<¨,ĮˇáQI9 Ō,ĖÅ!;1]Hļįx$`Sŧ´Ëqœښ$!Āqķ1MķA‘Æhŗ ĸFų 6įö4ŠXú;UcSM+Nkšʧäš[crFWü$ßņYFžPB<ĖL˜ŨN•ŠĢÉ<]ÄöĢ–5߉s´Éé^{,ą[ØiÚë^ŗ]5ņāČĀÉÃcŒđ1]‡ˆĩ˜"đôîŒdûJâōÆíۇoÃ5ŧŠęŦcčîXĐõØõ=jS*Â҆ķ”gä+ׯáIá­^ī\ŌÚōxaqdŒ(9ā‘Îk+gūÖcƒŖ_ ēđ@RœøņŸÆŦøGPˆé×qeĶƚYu ė,H8ôÅ'gaŠŊ.%ŋ‰õhĸW0Ú< }ö7HՃœn'?Jŋâ}OTŌæĶ͔°Že0’=Ä3wëúVo…~Åwwr“@Íp—r\CæÆĀcÃx§øžčũģK‰-îf0\¤ōyQڜúSå\ö°]ō|Tļn\<ā Ė‹€OĶĩsÖz†ŗ'Œîténm͜(&Ú°ā•nÎzûûU‹-|ęZŒp[ŲÜŦ>Yy%ž"˜9ā õīYšuâŸjÅ:¤ą$QČŅ0”’yÅLbõē–ƆŋĢŪE­Ųé6׹Xyņ4‚âD –ã5yīu+Â3^ۈæÔ …Ųļ•ˆ'Â˛üG5Œ÷˛Xęēd÷Âxϊ&b’t= KŖĪŠi~ Wŧˇ–âd¸,æ2ØÁČSCŠå@›ģ&đėúĨҊæmJÛ) ŨšT¤™ûŧuÍ÷ēͯ‹ll-îmūÉp! XÆFsß5C@ŗŽ?ŊƏöú\–ųdFD2gĄģũ*ÍëĖ|y`ëopŅE‘´Â"P3`Ž ,šŸ ]ō—<_Ŧę:-­­ũŖD`YB͏,ËԐsÆ4ž'ņéûu˜W–RĸÃrO_Ļ3Qk70ΝXé÷ˇ[€æWōXĮ–] öŌš‹ÛKË _ZŪ¤’‹mÖv!T’Ëŋ;āü) Ĩp”šnĮuwĢž‰áŗ¨jĖ‘‚DC ėzŸÂ˛./ŧSkĻ˙l˛tUÉbî ß ž¸öíK¯Zŋ‰ü- Tš%<Ë՝W›ÄĻķEšÖ;KĪí9bŲöf F:ã÷Ĩū`äuē6§oŦéß[s˸0GąükGI#§R+Ōĸ đhûFųZŪ=Ō,c9v<ãņ5ĐZ^Ûh.U]XÃn΍ŦĨ ]ļ4SčËå†ÜÖ”FqUA;/–ŨëLfpėۈÁgŠžV>d['ŽW×5’čPJ‰äĮ#ޤI ŦŅņ1‘ĮZ9t6¤˛ĀL€îĀô§Ą‚ņĶ­C$ŽbV-Ô㐌“ŒœpiØ9‘(O˜“‚3ĀÅ)@dûŋJĒebĨ™ŽCcØR¤ŒÄåĪÔōąķĸÛ Øië€[8ĮÖŠŽí‰–>üõĨaÃ7˜ĀîĀ4ųEÍræÎŸžG5"ã$ bšœĸ˙īĪ5 Æė㋸ŽĀg¨Šãø¨āä€)IOˇj.;.¤‚=§pcČ鞕°‡eÜ2AŠÕ—j’A$S$‘x9š.ĮdWû-ą™T•äTŋg\68éJ õÍ 8¸Iö(w:eŗqĶ4yap2H$ņšåuŋߨČ~ĮfĶŲÉnYn ø8éۊ‹Ãä›å‹TÕĸ°•B>{û{STånbyã{ GĖ 8Ĩō‘Ãd“ÁĪ5Âø“\Õ ×BŲĘŠonˆū^ܙIČĮô­ûŋčöa–č ÔeĸE,Tõįކ“„´œv:ˆ’OŊ9aG `œ×ØøžúÍõ&ģ–MBĀ€$%HbzÖēi|S§i––Íw#ĨÄ҉Û¤ägĸTäN,Ū0‚Ų œqÍ 3ÉČ7Ä[s"ĶgĮ ėę?5VķÅē…û˙gGas`ō’ĸXÎų?y@#מôŊ”Įí!Đīü pG´Ņn™'ŽõCE–ö=×ûE]mÆëÁāœwÆ3WžŅŒáXœķŽÕh­:’˜bØw(#äRĮ•ķˇĨF.G÷N1ž”Ķ2‰Áõ^j5‘gėę9뜁Šˆ@ZFVĪ\ƒR ‡Ë@>”‰8 ĪCJėVCšŨJ€M'Ų“nŌp=)Ī:ĒärAéM7'nvķ鞔]ŽČW… ぁL1|ģwjš' lœŌ9܄Ņv‚ɐŦ ‚„O=)ëlHG|SDI[#įdŠz\ĢrƒČŇē9#PNG'šC-īHf Ēy!›ŸjlŽøb‹•_SFĄĄb$PģW°Š9ā ‚ÚãΉoZŗÉ\ã&5ļ€9$gšyĮ?ZpeéÆ}ixQüčŽ˜ëíP6'æĻãæ9âŖ‘wwâ˜X7|èU€ÃcĻĮ׀ĀâĨÁįžŨčˆŽFzT¤gôχŽyŠ į ~4Ā&Šcž(ĻIeËÕ@ÎbsüĢ:õ†Öl`gE\WWÕw‚&ę>•—wp¸ ņ\ĢsŽŨF_4Gģ,yŪĩ$`îņŒÔPāČ<ŒāÔˆôāÔ͍vGaUŨžbØãĻ™@rGlT w1zdŒ,BôíP—* ¯qŪŦ” ĩ&Ži§bZšO{ĘI9Í?,Î@Áū Lœãĩ0@zâŽä¨•CˇšŌ¸Ī4×ËB„Œ°čUģ`§ Æ)\|ĨgYō ’^’PÉЙb˜ĢÁyéŪ›'?(‘ŪŽarj@ĘŧäŒTjÜŧž•:ĮƒĐį"¤| ߌđxĄ66‘\åvīíϞnŅĒÃŦnT”íšq+´3Nâå)ŗqĩG=8ŽéG3RŽJ\øŅv72rŊy¯‰5;)ĩ9-,í IId¸šÛÉãæÆ8îMzC¯‘ëë^[uĨ\éšėĸíTC4¯"H[†B[ŠíÉkj)]ÜĘĢvFŸˆ`[‹;QGd–áĄĀĘīÎ S‚?:ą¤č6wÖ˛^ŧŠ-_.Qr­H9nģx&Ĩš—OļđŊk öȌ…ļ͸D9#æöTēÅŦ:fŸswÜŪMyļp6FAč}*šŦM•îEced’}“NŊiôÍ@^!&æ…ļ’wõöŠu=Sō}˛ZEû€n™÷|ŲĪ9ĮōŦ[]R†ęŌ'ŗ•dS+¸Wlr2?Č­ûˇļĐŽ?â_zđLWĖ6÷íŖ§S§ÜŗŅÜĶSŌËU†÷Oĩē9åWû/˜0~PßîũtíÄÖyĸV‚x¸Ž‚âSžsžŨũO­GĒj6ZŽŖc~^áa—ä’M™6íˇ§đÉ q[Û6šŒ‹%ΰļvĀâ8!” _ĐšŒúQ)JÛ F%Öĩ‡Ãö:…ú0 Éæē3aAĸLÔZ4zĄ`÷dÚŪNĢēęic Äã“ĪoNÕKÄ^‘í ›Læ!š’LĖˤcø›ļzf¨ø~Ōë ˇ:mÃ%ôko€Ą€äļ2į§ÖĨYÆ÷Ôˇu+[B­ü|_cŸOŊi-f.ņ*Ą<ŽO$d€\Öm+FŌdĪ—ĒˆÚVÁämRŪũúæļ5´M#QĶí¤‚ęyAŨmZE‹'ĮŽgW[Yu­BéĩXfV'bĒ’ųÛ´.q€UÅķX†ŦwÚ°Ú˙‡í¯Ä~\Ž0čGÁĮĩjyĮŠs“žÕ‹á=įAĐŕÜë3—.6tP{ ūtAŠä“\ĶiIĨąŅtŽBąH:’­!‰‹GĮš˜JŖæ'ŽÔâáˆÉÔķ1ōĄĒ’ģΟΚcfn@Úx89ûĀŸ—œæ†!p7ߚ\ÖaĨY˜ÔeFėã-ŒqVĶ9VĪ4˜V Ŋ28ĸáb8Į–€[ŽivđpÁq͊‘$¸úSËbŽfEbŋŊvĀÉ÷¤Ž'^yŠĻ?ģ=Į’"ÅPä ˜â‹ąrĸ31cœƒ“R¤oå¸ 2ŪŨ)ۃƒĪ¯Ŋ/˜Ģ÷™GŠĸė|Š´€CAķqš‘˛ËŽž˜¨ÕԏįąÅHŸw€=Ĩ}uZh=GcúԌm俀F9ÎAüé29ö4ĀiDs‚´ũŸģĮJBFIācŽiÄE"L¯$ž”6X`wĸEluô‹Æs’ÄFÄŽ6Œš˛8Aš‹n$TĒŲãŊ$†Čˆ9˙)Í SƒŒŅNäØH:›ČStúŠÉš;‰P° j*™/‡Ũ8?˜Ŧ–ÎūänŽdvwŖÜÔąŋ}ÜUnsū.~^2lŒ;0’xĪCLÛ”āŽƒĩ`Ũjēœ:ģ[-´MuÚáĀʑßĐį5¸Œvp:qÖ­ÆÄŪãK•“œ{To#@6p 9ˇ:‘žpyĻÉÎ[#vŸĖŽO,NąåUÎR{õäWZã × a§[éū)ēMV5Øî×o#|ŒKdûdZԚZ˛'rœņÛXŨ>–^{¸ÄÂY-ãPØząÉãĐWW§ëvúŦ›x™. ^`|dzcGŌš(Ž/lĩQwĻ9ߨ7œļâßvA$ã~§=1ZW?dđõíåÍē“,Č"ߕߒĖ ZN)č÷3‹ļÆ5ö¯u¨^o¸¸Ķí ’Ėvaëžk ĶuK‹ŨB+ÛĶo ­” 6H3ÆOĶ8Ŧ¨üCĒŊĮڂŲ+ĒÉîÚÎ{WG4ĐøƒÂÉ{*MTiqËŖ­VI48ę÷0áy5Ár˙$M}*ŧ…'$Rs]ĩßö˙†ÅŨœĨę˛ģF؝¤úW™[›˜58í÷ĘĨX T~ŽÄqĪŊ#ÖzN˜úäŽËēiUaFsŒķĶ4ęÅElČÖu]SUA͝ *¤›u ķ0é–8Ī^õsLņ֗#G~.n.$ ËÆčøî;g˛ú ’o0áŌĻe88yOON}jĻŠĢG;oMo)¤bi2Ņ6NđAū,mÁô•ŦĐ¯gtÍčĩ +^€ęIí.ėXä˛m’ z‚ ƒIĸiŨéŊ‚fšhd/ąFũJ…†k"Ų'ƒW˛ūÚģ[¨5 š|'—Ņ€8ô=ķßĩMá{ gņĩūŖh˛&—˜Ņß8—8Æ3ÔyúTĩdėĘZĩsžu8č=Í ?x7gZ•0ÓĶ Wåë\×7hƒjėéëŠdš :-] ķö÷¤1ØÆzŽô\+Š&BpÄãšéJ䐅›ŒZ°DhIn76#Į‘ÂāÁ“#BĨؕb đqÅJŒvä/jzG€=)Â4nÜb‹‡+)įæ,Ī_Zošr“ŸJŅōņÁĀF 'õæŽa(üʼncÔ|´āIDΤXˆ ô椯ÜÚzū+”Ž€ á‡8Å+ Ę ŠœĀųs×Ĩ!]¸ÆzķC}Fĸ$*c…@¤tŠblä€?Mw$dãĨ9c A“ÎjueŲ%bS“É9ö§/Ū?ÎŖŲ‚8õĄnßĘŠ2GœtíųŅšwמEęi¤@yĻ bJļ1ĀéPŖš,@>Õ8Žqš ‚3í֖ G‘’¤sڞ[xĀČÅG•íÁ÷Ĩns׊âŦ’ ļIæŠF]įvŪÔT ŗEs8^ĸãņ—mŲ [w)ēéˆĪ10ü+0EÚG;ôŦŌö$/†Áô§n8Æ229Ēō(mŨ3š|nvä’r28­‘ˆUÛĨaũæ>¸ãdČĢĮ°Ļá™rŊri˜%xĪËŌČ°ŽÄ)!ąÖ”8ã-Îiŗ•ēô5^@JãœtëT•ÉnҘ)ĪJF¸]Øî}{Uv‰Ž1œmĮ4íāFsÖĒȆŲlHŒÅBŌ¨f'Ļ ›"UąëP„vŨ“Œ¨lp™1)8nhķōč›y œúT~TŽŒ/HžũčĄp1NČWd>ØŲŊĀæ’9bT€:äÔrE"ĀpØlĶĖnKās֋ M“¤ĀÄI8ČĻ<ã*cųqHąI厀¨¤ŧĀ ÎĶĶė…y IŲōŒŒÔžtb<ķÍTŒ4ë" ĒN@j]ĨH~_zVAĖÆŊĘĮ‘ūXĀ,Iė+.Ã[Ķ|F’Ûf`>Éãu'…ZÔėeŋŌŽ-•üŗ$lĒ۟Zā<;­Ūiļķ[G.ąåGš0ÜōîžIíZ QmnD¤ĶEų#ŊĐnĨ´V&Ü´Žū[ŒņЀqß ¤×SŸ´#ÚX6Áûĩį…ņúšÖ—Äí1ęúT+ƒˆŪdÜ}öļ ChžÔĨ& Ųm¤AÄF|`sĶ9äô­.Ö­Ûŗ)]ZIdCHޏÚá]0p020ĮĻGքŧ×ÚÚ-#Nšl`/–7Fž¤ö—pYZ=×ö†¤÷“(­ĨÉsÉË``t^ũĢŠđęØ%€‚ÍãûZÄ ø—oīdũážũ)ˇew¨$Û2Ž|4‚ëLą7oŸŗĘ <åԃŋūúlū™ŠkĐ-ƙy:cËÃFcU2'ûĄ…eCw¨ŪîmBā\[Iä¯*H|˙|ŠôYLGÃörkvĢs)Š5hĘo1°1Ī|Ō“qĩõWō9[m>Ym™T-…Ã1wãéõĻE#éę×K&DÛ*I‰#dã õõņSOŖiđÜČ.EƟ ´3HŽS^ĘÃĐƒŪ´gÖü%ĸ„–ĘÚ ›ŗ,F77ũôzQÍ}ĩ­žƒ´_ũ˛øjš¤1 †€ ?ímíøķúUĮņČŗšHîtÉā˛y$šoU89^Ã5“sã-l/ÚMŊ´ŽvŦģZEĪpX3YŲk^:ķÍ,r푚^"ė¨úu¤Ąz{ ˤO]K‚ŅFČA Î3Å9Ũ×Ëe*žÜTVÖb!‰X„‰Wž¸Š„ €ŦNd ņ\Új/šĘ]—jįÖ¤ķōPá“P´EŒœä2āԂ•üãM!ĢÜbą‘oīã֞nd*Á`AĄm؁ģ=ißf˓œ×­-fNȁ˛+‘õ§Āån|qŌ’X‹€˜Â‚1QŦS ‹3Üc<Š–Õ†“š Ųˆ+ÁbM5%eĢāāf…ƒ†,qœšy„‚ėx,1×ĩV„ûÂÜ\4PîE Üuč9Ļ´ōË­Žx˛ÂŌm§qŌ‘ŖdšŦ7Ė8K#Ÿ”ŽáÎHę)žtĪ ļT2i'ī]LŸ‚öŠŲL~Xft#Ŋ˜–ˇ&tŪxäÅ]GIč*ŧP¤H­J# ÄP÷ĐĩļĸžH!¸ôĨ ĪķMŒaŸzxPŊ:šHĄĀüžô;g­!û¤zŌŽƒÖ¨˛ČP2;äԅ”ąR0@Ļ3„]ũM<Ø ŒéM\üŦÜ(#Ö‘‡R¤dŠm?0îi“b´˛í|Ûąĸ–MŒĀãˇĸŗąĄrR7œädŸÂšuuyvxnšë]Ķ%˜cę9í\•ŧ˙ŧ#ũŦÚ˛‰ŧ–†¨lÅ [f8Á¨ão—w§Ŧ`õ.õëZ#6?p=h|`‡ķĒÂášū[`>ę+įoŠ#úTäķŒvõĢąK{šC†ob;l“QnؙQšŽ3ŪŠ+’ØŽ#i<Æ ķ€2x"ĸ,XįDX!Œ’ĖY‡~•IŲu\äw%—åķ$Ī7q×ķ­ũ+ÁöŌéÎu˜ŌYŨōč#õŽ’>ų|äąâœr¸#Œu­ĨROm ÔR1nt }#N¸›FbŋD&9d%ČĀÎy#Ž•…á=B+íAå’îs}< yųĖxÁ,sĐg ö5Ũmf•ōŦ ô‘C(ōĸXÎ2HP3IMŲĻģē8kÍęÛV˛Ķ&˜Īq{9š’â8ˆ Ę0¤Žsõ­ũa“KđÕĩ†°ōß ‡Ų%ŠĖ|’ŋN?*čÜŨÃleO:l”By uÅNCŲ–+ŠNmÚãQJö8˙‡†ũ­.Ŗŧ-7(€J„|gˇJŲņ7‡F­Ļ…†A[š•J.KpAąÖļJãf᜚°Tl`ņsRäųš–…%hōŗÎžZę1ÜŪ ģY!ąhÂųs¯ÁęöâģûK{;6ŲÁ(˙3Ô “ߊsĮ—bT‚>´*Švd€—;¸āšU‹â8؂Ã$…úÔŪjoļ2qƒTnŏÍ áŽN*]šuڃķēĸČw9ũۅ|ĒÎøŅQXŒãU…ŽE ¸ã‚)&mÃK) .Y‹ Šĸ×ėËÍ"‘ŗqÎĻĀJ§$ũyŦKč÷7‰ZĨŖšÚ˛Žĩ¨ŽË Rą.-+ Jė˛.#ÜĀ‘ōõÅ9gÃažčÉŦčŲʐUˇÉæ§^R‚œP”™qf‹ŒŸŊČ÷ O+à ÔúUTûЂ >ŋ…*ĢfÂąđ;ŅʇĖÉÚę= †IÆzRųņų@į9éīUÉ%Y8žôØūUˆ•.G=jl>bVØ s“Î84}ĸ48,GÔNŽ|Ōä`Ô4n„ŽU—❂ũKK2HĶ ;b§;HãÔU[`VÚ5ãu50 o$ŒäbĄîZÚäŠ9`zRŠų˜ØĶ2 ĮAÅōsˇ€¤„–ę0jRᘌõ4Æ‚=E28›pÉã4]ŽŨˡ AķÆ1ŒŽ*ĮÔ ņۚŊCŽ3šw&ď€?JäcŊ8 ĢΧzz¸c­Q%6C‘…ČÅ#¯#“ŌŠ›2ŽAĢHØŧ§ĸāœûWm i70Nk ņėaXc\™'øÖdv¨ÂíŒ`qXGEŠŌÉapŨ¸įš›Ėڙ`:UX”+aG5f29ĪlqZŖ&96…äŽŖŊ;œdH¤|žĻ“Ēu=Qs1ä…ÎAPČ ƒøõ§1 O^‡­0\+.O=øĢD16(=9 i|ĨfÎ9ĪÔÉ%%Wn9j/;įÜ +¸´ėÉš8EfČÆNiÂ?ģœŠƒÍ(iž{Äā¨šL.‰öcĢõ Ē6—ĸŅŽ_1$ûR\Ũu Î~´Y‰4Gs76˛Ã4jđ˛á•ēkĘílt›¸5yĄļfžI z}ŧE‹ Ķ8ëī^‰­B[ˇĶŒYAFiX ŽŖ­UđæŸu¤é1ÛJ‰"ÆäƒÜ“;šÖœšbŨȚģB?ˆmü=§XØŪųˇ7Æ$#Á=†N}ęŦž'˜j”ŌÚJ4ÛLD¤(,dÎ~œÔé¤]'‰Ž5’Õã‘W™…Æ=y㚨|9zúiķ]#ŧ×>mÃ/Ę –ÜĀ¤Đ”yt%ÚAfō­´ō‘`ˆĮœĮŸ—ÛŪ´?á&´u9YŲėʆpsšĪđqĀĒÚļu¨>ž–ōÃĩŠfn>l㠏NĻŗ đŽŖŒúhžÔ%ąįûĮg Š_qŽū´Ôa`ŧŽuz}įöž—+ °˛Œ2žœÂ¸í{Fˇŗđü"íd—Uē‘cŗŗÄ刌c=ĢŗÜÛ,e|ģkŸ¸˛×.ĩû[é­ėŒvˆÁ"ˇ,xŨž”CF9j‡øN†kŲ-dsĻeV īŸ™FāôæĨ—ÆZX¸ž˞ģŧhH8õäÕ9t-UtųbŽ[užöėÍtĄ˜ \}ŅŽOAž™Ē0ø_U5€g„-ĐHP÷ƒÎt^ė›m‘ī-Šqã 6ąģžÚ;†1F[Ë8%¸ķāÔß𔭕…Ŋ´˜Ũ<"K„1äŽqšŗĐf›Šč“ÍĨéúvœcŠeRåÆ~Eį§~yĒ÷šŖu­OķÄlnĖM3“ķíOāКIA‡ŧÉ5FÎÛIJj—„›].?-B —šNp>‹üë~?X<ŗÆw ļļÎ΃ŅOû^ÕËσ­\[˜ĻšÔ$ډ¸œœgס‘<-ŦÛZ_Å–­ ė˛G#„#ˇc%ēn1ĩ›äļGcŖë0júaŊŠ)Cí+"āäwú`ÖGÚėÛ3Gb÷hˇŒ‡aōÔÕËŨz·ŧ§_økģČB]\+ΤāÄvū˙éžĪssāØîC!WdŒˇ]€āUGĐĩËŊ1tĢNÚ+DŒ#‹XwP1Œ“ÆqWŽt{͚Už‰~ļ0ÚŌGŒî_O~ũ}kiždĶ{ŗ(Ģ4Ō:˛ƒ9 œŌ°U\`tô¨d,Ėí žÆ˜ėūQRÄ⑏æå7æ¤Ģœ‚:Uá"2*îã īTUËÆëš¸îMJäĨ°ÃãŪ…qī:™6…ä ũ(MĨ8oj€•i¸b¤} 5dgT#9Éf“aŠ.Ĩĩ 7ĖŊ)]ĒHléU#“īæS÷¸9¨Ëŗ+‘Ž>´XwšĄ" 2YąĀɧ“œŒäbĢZ“äŽöÉ#“S†#׌Ō{l9HĮ=*%gŨœdz z.F3Ō‚¸o”ū•#ÚiÜvæŖãšę(į c94Љ ŒprqŠP6ü¤ fž¸¤ÚŒ1úlDāāŠ\s×Ŋ¤ûv ˇ<õįB!ÜõÅÖlœ‘ú)Rl …P][>Ղûáēed+–Ít!Öm]‡P¨GĒ–¯ ŧŒF7 `ZæŲ{ĸ‚•Ü;K{r)‹ ×kČĨLŒØVčÁrtäL㌞<äœįŒž)2žĸĢbĨÜA_^+9uM>MЋûV`p@•M_˜đ'-?*ųōX™d}Ā$(r;ķūŅF’Š}v0Ģ7 î÷ˆÂ™ŖQūøæ˜×VĘáZâĮÍķH:c­xdČŦAŠ)÷Ÿ?ŽhÁofĀm sūFņĪå[}ZËs%Zũa:…˜‘syoĪyĢĪëOûMĢ)"ę§ŠŪ;u¯![M<ŗ+Yė#œĩĶņ4Ņm`0ŋgÎ2n›˙ĨėpöąęĶkdOûÍNÎ<Á™zRoi3ÅÆ§fJųę8¯/[&SļÅ õûS˙ņ5etYFÖM%V ĶIŒzõũŒ{‡<ģŽú–›+ŽÛûc´îâU§6§ĻŦeūßnT“Ī˜ y´ē\Ēŋ.ƒb é™\įķ’ĢũŖž}*ÄmĪv8üD”Ŋ„_QûFēĸē…„‰¸^Āwž`˙WŋĶՆoāÎ3*Šō3q`¤°Ųdņ÷f˙âéG’Ā2iö\u—˙‹Ļ°öę/jzˇöƔßíbH#ũrõĨūŲŌKũŖn Æ?z>žĩåĢnØØsŅB>?ô:RÖņ‚ÂÂÁú˙Ŗ(tpU<P:ļ”ĒŅ˙iZ‚š÷Ŗ Ō sGlíÔíK`dųËÚŧē3 8 ĨXŠ'ũž?ņúŗ‹<ú5ŗ`pČ$ãô{Ņž ÚĻ™ËBÜĨ‰ķFŋZ†MWIŖm´áŗæŒW˜Čļ ĶLļģIĪū?MöŦ…žÁhŧvg˙ã”{Ü=Ŗ=IŧCĸDĘŌjvĀgŋÔqZV¯Ô 5ŧŠ,N8tmĀķë^2đÚÆđ†ĩŗ!æTbŽŲžH>aūUčĨ á”RNW=†ęŠ””ctʅKĘĖ檁# 37q“ŪŦ, |Į“ŽĩÁøōúG¸ļHĶėköļUV;Žā8éĀcÍwבÜÚĮ:Į"Sę e(´“îhšŊ‹†8B4ŽUW#$œ •9ŖĖnŦĄČŽ#Gō|Eâ-fãTS$6ųPÛšĖhĢГŽõŊĄ;Ëš4w‹2•ķĸžEĀ8ãļiJ6•ÍFŽjēļÂɘ%˛2 ss•ēGŧdž3\fĨku§xēëRĐãųŖ%šĩĪ™÷cҏŠt™ôM[Å6ú……Ŧ*ÆŅäaå€É uÉ>ÉæŸ'[čëcˇxbq‚2ĀŌFđ\Hę’Ŗ4'c…9ÚqĐÕ{ÍB+9¯%XČÜú âŧu=ļˇŠ[]G4oyŪâdÛķŖ'ôŠPm7ØnI4Ž×íšqP>ßmŒqûÁÛņĢ&˜nB6cÕįō`ņ?ˆÄZ^íŠ#ĩQ0 CëĪ9íÍwz}ŧVÖVöđ!HĄ@¨„“Ž:sJk•] I’$ ´ŽĨĒDˇHå2(Œ1ī\˙‰u›í&m,ZG ũĻãÉ1ˆÆAĮo­eKâ­qmĩG–^n–ų›6×MģžQŒįëéDa&ŽœSą×\ŨÚĀíŌ'–ŌŦC–e^¸ę S´×tÅŊŗ2 w, :āđHú!ÖŦĄUžĐUFœcõîR#1_˜ŠVč;ņ^%­2ÂAĢŽĢ]úã8×^ģ´sbvD0Ko,R*Ë$71‚pĖŽ¤ú Ø?Š5ŠĸÛž¤VŨõw´ēaÄ/*ßCž`jpyQÆę˜Lœۏ<āÔĶO5Ôé ĸs$j|¤@>N„Īį]6´9“ŗ;đUķHÖPŒã˜9ūuĒiķ藑ZŪ?ÚŖo‰Č#qîŊHũzë<ĢÉĒé/ŅgģļpŽ[ŠŗúūUwÄÚ"jzLˆĒ|øK g$0íø×*Š(Ī–Fü‘”oÎgŧTUŽ&š9r>e~uÎ)ķŨŨDā]L.{—– Įˇ¯?NqY–:…Í‘Y-Ž&f>h Ã}GCøÖĖB gtqˆáŋ#åmŠãØÍúWKVÜÁką~Ռ‘*ÚC Á†Nõoé]ŽšínQ´ąAģîų Č÷$q\‘¨Ë§K0GPãîŲU ÷GsŒVÎĄâ+Ũ^Î-2)í§âIžTsÜĄsšÆp•ėļ4„•ĩ:É´+¸ĘŗļVn’y(Ĩsڎ”Ús„›ėâ0›Ë4#§|p3ųÔž˙„sS6÷÷öék4AÕcvp8˙€ÕĪjâYí-ā`č¨$āå]ŨÎ:‚*”¤ĨËЧĘã~ĻS¤ 33ÃlSnĖø=ĘŠã=˛síT|ČRVŒÉ ŋ.āņ:t<ƒėjÅ­¸eY§•^N>}¯3äd‚~ęŽėũZ—¤:CÅMj ŒĩŧVû‘šÁ ää“ëô­6Ѝ÷9ø­ßTÖ4ûËgÜBžBŽšü3]ķø7BqΞ …ĪĘī×ķŦØCqŦjÄjÂŲdh­—ļ:œžõØÃv.`WŒmFČįž3úV5ĒJöCZQVģ8Í~ĮAđå’Iũ’’Ë#@]ˆürkˆÆ.¤iíáW Č#.U s“]ŋŅdŸIãķĻ`@8$`tŽ6KE–ĐČvģ,‡q,ãō!‡äkz.ņģęeU{ÚŋŪbLÛ,$:ČÕœ×qāBÍŖŨûĢtûâ+‹ž6‰ãˆĀä#@[9ûũ1]÷à†‹°4ĖŲüúÔĢ )¯xŊ‡Ē0Ԟ[ģY&ž]Ŗ0°1ˇzc?ixwHžŌô˜lo.#œÄ0ŒŠGËØÖÕš9#5¨ęw6ū%Ņí­î#0\´‰4{A<.AĪjäæ”´:yԊ ÎēŊƧĻ^›9§âxĖ{ã”ö$d`Õ­Ã÷:uŨíä÷qĪ-äŠî=ŠĨF8äšŊou-¯žuÛVˆÎDLÍ ôCžĻ¯E{g=Ėņ\DōÅūąeúŠ—9ZÃQ‰Ī W˙„†]Iĩ(<Šc0›ųf¤Ī^O5=ŋ…ííu‰lĻûd°}’O55S–ėNGÖ¨Éá#!ÕOö„āj_ë—jđ:`qéÅUŅ/äĶ|TúMöˇöĨ’Ö7ÄŌ.Dåˆ*ŋáôŽÔ}ōGzĻå ”eŠĖ IĖSĮ¨ĖZ ChŖS…ĀųžšÕ(ŧņŲi–ÃQ—˰—ÍLÂ>c’yüČüjOxŠâÃŚU”Gm"ĨĶã 3î3ø[šĻĢgöģĨĀޞ.vÜú 9Ē+yŠĐwō(čēúLײÉyöĩNf#ĘÛĩôĀŨCAžīZ˛ŋ›×qX|Ŧ‚XaŽséüĢDk¨!T‘ŌxŒÉ2.Shë’:vüę”0Ō/$Š5iď´m{ww)įŨSƒÉ>ô1ÁΓֆÂÄO#†áGįE4ŽNëEHÉėŲ~Ô<ėĪ^ĩVåÉv'ĨKoĩ\ep6c sUî6í8Ÿfˇ6l¨Ŗg$‘Ôԁx99”Đ;ž}éėÁP‚p1Z#6C Ú9$ņPŒ+=*Ã2°ųX;sPĖģ0UĄ#XŽ76H÷¯‘dģÔo†Õ2Mt-ؗ5îĨÃįnkÅlm6ūWûN ÄöŪēđ¯vsb:ĩĢk‹Kä´ŋ…axĶ? įĻpOĨ3DąšēēœÁ‚đ(.š9#88­oˆÎŪŗcōcūŅi7ĸöKØŨ–ÚâHØģs•ü1üĢŽļ˛ŋĄĶODyˇ‰4™4­včŸčĖĸláVāūF˛āe†t>hF2˛7~ĮëšôĪÚĩēÛëÆ$ß$éŒī…žđĮˇZķë$Û|Ĩ$ÚA‘öã”ĪŸŪ\~FēŠTæŽĻ!ihK¨M ģMNŨUMÄl$U螝Ūüúū5­ĸę$xzsĻ[ËöËrä‚’)ĪŨ88üp+ HZĘĘc î!7A(Ëúä~U6™,vČË T¸„ųĒY¸uë†Æ70  îjĨvÂO[šē„71Ú[L×FĘ]Orʓí*ĮÜO8Î@õŦ .ÚIo™`XōĀ“œĢîO˙­]†Ŋqæ‰cį]ÅwtĸGf„WaĪ|Ų÷Ž2Ęúk ˜’†ÁEå—zc‘žŲĨMˇĩŅĩŽ4VĮ HZåÛmÉ vÆQN:1‘ÜV=ÅŅš‡Ętu}Ą!\px sų •×VÔĸ‹Ëĩš¸Gl—X~ķgŸ˜p{s]V—ĸBēŨ‹@›íc7WgŠŪOȤûf‡%¨ŌrfĩĪ—á¯2#•’8ŠŧfFīų“W´6-áí?Ä øņXū)_í+Ų,ūæÎŲîf¯´„Öˇ<9|7§äËŽI|{ÜŲ|VG?ãiÖ6Ōæ“Rá˛ÄĀí\Ļ—;O<Д ë!ā+l,?"+Ŧø“üK,éö‚?JĮŅ.ZÚPĖAŽŌÚDAŗŖņ5Ŋ7ûģ™Í{å­fŅV 3Q„ˇ“3ÂÄH,yé]ÃĖ?…W=ßũĒ­â+OŗxGGGR&…N0všŋđŲü$ŧ ųŦ?QYÍŪ•üˊ÷ūFũđģūÃēK!›Ļ…Ä@§ÆiŌØ.­áÉ ĩ–ãGtL >Ė|Įœ÷÷¯I™§ŽŌ~n2ĸ°D´6tÛÔķW1IáÍKȅäŽ`Nʑœų{Áʎü ØđüņËãÍJé-Ļ.-Ŗ1´‘Ī?JėtûËmJĐ]ڒcf+–RƒôĢŨ‘”)Ég’=j]ą*žÎį ×ÖŪ#ÖaÖ,&¸ûc¯ŲåXLŠņ€AÆk?Y7ĪâË1ĻŪK%ōĄŖ€˛ Q^‡¨XčĐ¤×ŗŦ1;Ŧa›8ÜzUШrFĨ%VÚØ=ôšįŪLsx¯F/§Í,iaå9’ÕˆV8Û¸‘Đũ+/V´ēŸTˇš—Cģ†Ū×Pw˜Á yŽ“ģ ā WĢōyĨ%Ž9#Šk;Ø#ŠŧĶäŸáåŨŽ•cqnwGo78ߒėXgzĪžĩ‹RđÕÛižŊ†âA ’" *ŲĀôQž}ë°×5ČôIlVKIfŠōuƒzLÕ¸oR[‹¸Zc[}¤Ë"ᜊöīMMĨ{"n×9xLļž.šņ´ÉÚ Ģ4ËåđŽĨ‰ŪOŨ<ŽkCC×n5=ĩ íq*oS'pr¤”÷Î(˙„ĸŌīÍĩŗ˛¸ŧš]a1íW mÍÁSÛÖĩ4™ŖģĶ-Ž#´’Ņ2 ‘6”öĮjRz]ĄÆ=™įZŽs}ĸ^ę2iZ‚ë]‰#@Ŧv…#gãG\u5Ô_5Æ­á˛O•ä¸hËÛʲ€Ā°!ąčkŠ*­Ôr)>ņe'V˙ öV9-/Ã÷ēGˆíÖ)M"—ĘV90ŗĘ{Ž2=9§Ú[ę'ĮZ…ĘÚ4V2B‘ų¯˜Š=9÷ŽĨ0ĖJķ†č{SĘm=:Ôē[–ĄmŽŦ5-*ķXŽ=5īŖŋ•ĨŠXäQ‚Ë‚¯’0ãQ6€WCŅt{Ûy.a†O߲0ڟ+ õĪVúWx‹€@š¨Ĩ´I3ĮĮ­Ų‚ĸēœž•i¨ésŪ}ąžÕq$pJƒ/*.ã‚?ŧ3zg‚-Ž-|>ņ]ÛK ŅČįĄæ$Œz×T-ÔcŠ$a.G—ĩēĩ‡ėŌÖã­Ûä/ĄéRîëÖ F `}jMØųHã=k'šĒØb(ĪrjeÚáÔR)ŨėNs@\7ÁĪĨ8ŋƒĪ§Ĩ4ĀüŠFÍėG L’\í9íŌ˜Ä—Ā<J\đ}@Š3îzS¸Ŧ5œŽ3Īė ķČã­ Ŧãi遚ã ¸*YHˆČ€ōĮڊ`rŠrÕądēģÎ ‚Zåw–lĻēKũĄrc“Ÿ/§P 8Ģy,Ĩˇš ļCČl~•ąŒœ¯zk+21É÷§˛üĄŊUŖ'š FIaD|U(œe0|€’Ä2;Ō8ÉįąÅ4  Š6Ņ€rkÆtæ˙‰¤ŽpqŠÂzúŗ×´Ë‘•ÎkÄôŌÉŠ2”;ˆ<™øŽĖ6Ō9qŖĐ Ž[›‹ ,%“OVû5ÅĐ?*ŗqŒzr9Žbââ˙Âw_gtlĘÛĘĀâXĪUo§_cõĒ‚“‡!2k›˜ŋāI š†´ø#|āķĶĢU}.ū]3Į7RÉÍ­õĐ:oR1üĮįSü:[}Fbŧ´ęqøÉÔī­$Ōīí<‰…Ü„“G*(Ā%ŊsžßĘĒÉÎH›žDĪM›dĐŧrÆ|ˇ]­žāņ\ƕŒ6÷:&°!Ÿė2æ#8Ŗr¸ĪåZžÔ_[Đ­îr í (˙lpĮņŽĮúZˆíõ^ ŽA¸TôĪãüë*kŪäf“nÜČå`Ņ“[Öæ[1äÛyÅ}íŸũj’O j×Fí"U‘­Ŗ(Âķ×wÎsU›WžÖ1gcō/˜72 ĄŽO¯é^ŽōÍugk5‚nIäácp’€7gیūUĶ9Ę0Œc#“Đ|75ö}ZÍmpaŖÎ2NN8öíëJž{8CĒÅ#ÂŪ[!ˆģ ķ^ŠŌD¨ÛĻUŧ“€ŊųüŽOMmââ–ņĮ”$‡Ļönw”ⲍIÉžRÜ#\ßĶuŗ—p—VËo=†RhÔ| Gą‡™í´›­jí3qvMޘA÷GåüëQˇƒSņ„Iá}<ƒgß­CjQoĖi4Ė_ĘZ >5BÎ.Ā\äãŽ;ÕÍ/DÔuígÖŪ(ĸÄ‹k ‡FŽ öŖĮņ´:Mĩâŗ)†å;sëjЍësę:.‡e é ęLYÛ´Ķ&ĩÜˆ–’w5|gq.ĮĄÍęcÆJ“áļÂŅ>üŽÄįžqũfkš3iD6é4’Ú›ČŒBCšŖ?6F}:VĮø˙┴e=Û>˙1¨••-;•gPéĩ$¸“MœYĪä\&9 į{ËņŽgÃÚæŠĢMfä,ÂŲžíZōžâĒŧcøz뤏pcņYZ~oĻ­čļ‘ã{šVuÆPˇqÚ˛‹Š™ŦŖ&q” ĪĪë×üšš÷Â:UöĄåÅši”,$#xzū4Üéö„Í¸Ž”DōÍ"ĒÆšfč1Œ“OŠō˜’X]dŽE܌ŧ‚* ėÚk á‰ãß"•boPqÜq‘íU4=-Â+8ßĖ .F9$“ØsŌ°÷lmī\ÍņŖĒZęēMŊÄQ%ÜĪowđ’;ûVSøŸY‹FžgōŨ•ō[4ŲT•įāáĒ׊BĪ­čqŧw ^wŠ6ũØÚTç8­Ī ØM§-–Ų'œvHAgÎw1îsÍkxE+Ŗ;Iˇc:KíZ}^/B8å0<ōŨ¤X;w`*‚zķÖĻđŪą{~šĨ…ķ &°”ĮįĒāH2pqëÅ^ŸEŗŋheËö˜†áŦ€c$zû՝;JŗĶ­ŒČQ]‹9-’íܓÜÔšÂÅ{9_SB&R€íŠGYŪ¤X‰/āģN8ŦēŅQ•9=čPIūtŠãĮZUÉū´ bŽN1øSą†äķ֚lāz͇LädˆÜ Č㨊 9Æs×”pŧ{SOŨíہɡ’Æ!Ö0Ū••]FrA"–H҆‘V(Msr'Ĩ3A”ĸŨ ’-õĘ#‘ōBäž)¸) œ? Y$1ęĖ¸$‘¸væ‘Āe1É´Š'ŒpjQ]Ab7õāS™šÛh8ö§,~Zâ™.×ãœUÅmܐ8t¨Ø‘Üõ§!NzqÍFĮkFiܛ:ąã¨ ô¯…ÖÛSž ’ą^Fā§l¤Z÷b21Žĩâ6á&ņ ĘmĀ›PDÛėe'úWVí؎‡g{ršĩqkyffĶ/ÜÜîėaųĀĀ4ž2žÉEÚŖYmãf™Ķ?| ?ņėū“Æ{ũ^×O´ŽFqģ„PĮkpz‘Ž˜ëŪ°üGu}-…ëÚ,2’&ÔŒĪ {Šn*Ḳe+]#[áúˆt ›’1žáˆú+ļ{ŨCQ‘mė䙤‘ĻŽJ’yįë]†ŗgā¸<0Yd_×ü+Đå{Y´Û”Vaæy.ÜcĮׯ֎:Jl‰|1FĪ‚äŧŅ5ÉtB&€]¯ŗČ÷tĪå]žŠeĨ§Og66ĘĨĮķŽcƐyÖZ´@ųÖ3)%GđĪëŠéâ•.-āš#”‘wƒėEcQŪĶ5†—â˙fœAķ2pųÆU Ščŧ'mŦI~’C+C\I+íLäã< _iÂÛÄžtQ— $ ŲÁūŸv1é*Ú vv÷eķĀ27¤r œWMJ‹‘y˜Æķō%Ô´ŲuޤĶ䎚;ˆĖ3E3Ĩ”Ütü+”Ö4¸ô]Áu"K{<‚IJ °PŋCĪá]ž“Ļļ˜.Ŗ–ˇ’_5.6g¨Īqšā<[k{q¯Aes yŽ hŌ2JĻNÉíÁ5•/‹–ú=¯mM‡zh‡O¸Ôįûķe#cÔ <ūgųV-åũŪŖâ‰õ+ ψD|¸Čä„éœ0O5Õkũ‘ĄEĻÚ¯™Úîx'ōæĄ›ÁoÉe=ŜÄb‡*ØîG˙^…5Ėį.ĄĘėĸēËI­[ÜJÃP¸îo0ŒzĮ5Ûøu—–@˙2ã=pÆšCJšĶ/āŠëTy !`áq€9'=kŖđ"ŌŽ­U÷Ŧ7’"ˇ¨â[8h*wSą?Č“ÂķA*ņ’¸ëķbš=gAŊŌüĻ]É—=ŦėYwd¨c‘úų×]ã5fđ•÷É÷UH%z ãĨfxĘÂķPŗˇYšÉ-ƒs TGã,ĀōxéŒķJ“˛KĨĮSVÛ.ë¨Õü)¤ß¨¤š…™zķ’üę˙Éū;d'$;˙čFąÕė|¤A"°ÜFÅz`—'Šđõü"P˛ōŪcgë¸ÔÎ+Ų´ģ• >tüŽÆkØā†Gl•›hÉãÚąôīé7Zb]šš4.#;ĸc‚I1Î+Bevķv 1‰”Ā×)‘ŦÉā˜4īė˙.ęÎXĘĄ™|÷ߍgE­Ks•ô:ĢkJa¨ÚÉs*5´DĪō01ŠÜ?•$~ ŌôģžōY•íÃŖ”gbƒ{`p9ękž6úˎzõĖēLīŦ–‘&FÃF Īû_ĨGqŖęĶÛéF ŧļ‚(ÖāJŖf$Wų—#ëO’=ÅĪ.‡%Äa]ŗŖ'š¨|sĸ\YnYf* ÄÛCÄãÖÔĨŌ)Yc,ÝĢÔņ͚āâŅuĄáČ,ΘūzęŸjÚeLŨģ×đŠ„"÷*S—C¯ĶüSĻ^ĨÛŦûRĶ™‹ĄL\qMÅÖrYß\ {Áö"­,F/Ÿiä6:ãÖAĶõ¯í­núÎŲ"yícKg•”†d㑞āņše•–ŋi{Ŧ] 8Ū{¸b<ķŠ‚ܞ)ō@JR5/üA¤ę:-éēŠīė*#Ūč¤d¸ ¸ ûŒúT÷ū0°Ķo'ŗ6÷ŗMmÉ ŠØCüYöŽr-]‡Âˇz2[Á$M:›|Ė ģqŨĀôãžÕĄ&›ĢIŽę—‹eŠâČA3€w žxé’GáG$;‹š} ëâí.úîÚŪœ›ĨŨ sŒā7sTmĩ-.Ų¯õ8$ēYȂXܜ4œOŽEPƒCÖĸŗđŨŧ–ĐŸėŲ33,ũFãĐĶ­´]JM?P‚÷L‚TšŊiš7›a\¤t`@§Ëŗi>‡Si¨Ã¨A °Ŧˆ ĘčTäę+@:† õ>õČÍoĢé~ HVáŸQ‰~GHĖģŽîߌ ū5ŋn.䕜ĸ—@x Žp~ĩœ ‹Œ™“k¯é66ڍō›•Oˆ—€AŌŽÃâKƒ~ŸŲF$–9`emŧœ€FH85Ë\čÚÕ֓} ب’įR!|õÂĻTō}~\~5zãOÕ[WÖŽ"ąÜˇ+o 3(Ë ūCæũ*Ü`ČR’5ŦüSĻ^Ío^jĩÄfX™âeWɞ  øŗN[).äIÄQܛVũŲ8pqÎ;VLVĢŪI,Ī—§ÆË9ŠÚJmãžGüjÎ…Žũ†úÆ;8dŠ]GíK/ž˛ī ŒcŽčöpžãö“ąŨ‡ ä đ­:L(3);ą€Ŋŋ*įfđũÅÍĶܝVö4Öę˄ĘãåãĩhhúEŪ™ip“ßOzŌ°(eęŧb˛åŠęiĪ)t7!•2žTyÁíQĮ¸&cœÔ‹´¨ÆEfÍVÂ1(ŦY°­:7 2>ū´ÉâYce+ę)–ĒÉlŒ:RB|‚qŽāđiÃåôĮ5<îÁĪn)ō['ßÄXb Š^āR?\džŋ…06ėqĮŋZ‘•HęF} ؍°2ÁKę)NN f”“ģãŒn œúúĐ"p7uĸšäƒĮ§­É#ŸbęGs•ŨųÔgŌcœmoCO‚ęJĖŦq=8Ļ<Ēņ°\ũā>••õ7č°€{ÔŨQŠ‘ú/§šŌ4ŌlÎsi´ŽÉWėß 98?cÉ=žo˙]sÚM¯™>‘h˛nc8“ 6¯Íœt"ē=py R"H>D+ĪšZÎŅíŽ!ņMc5Ĩûya%pÄųIëģĻãéŠ"ũŲ?6Z¤vÚ¤6÷ZUÍŧō¤qˆ=ėp2FękŸđ%č›G’Âfk MÎršãú×=ãkû›ũXipČVqŧÃ1įéĮįT<'u6‡Ž@ķ¨KkÅōÃ7CĪ ôČĮįJ4_˛wõŠīčŽĪĮs]i"ę8ÖGĩ%™IÆä# ?‘ü+•ˇ×îŪÖŪęâ/´­Ŧ{ Må0Ü Ÿīc¯5čō0uh˜ Å ŸâŧÂ}OÃúÅĖPŖĸíۂ@# ããÔQiÅÅô ē;ŖŌė.ĩ´æ¸ļØ&į…Įá\ˇ‡íRņ;\ÎÁƗnļÛēūY"¨ęū-žF¤SE4'?.å’rčočŅÂ=ā÷¸˜fo-§”žĨČÎč*yeŋ1ķ)5äT¸žĶŽ=Č?ũjËņIÕŽĩMBY>Õũ”‰ÎTHŽjį<ëęķMæģÃ…Ŋz~¸5Ĩŋsboû˝gŠ•&đžĒ¸å`=Ŋ9Ž^ßS]ē´ ÜŲŲÆž]´d,Š –rHW=úšęuäi<=Ģ!c˙ÎqøW“i“ÚŅg)ähŦüô=G_ŌĻ„/:˛ŗGwĢjãVđĨ­ĖQ4R äVCČČ$đz[?oƒ­ßŧîNŪ5•⛨o<+asm•ˇ71lہČVŸÃ×oøD-IP_}ÍJk÷_1ÁûëĐëöŒ(ĀÆ NģCxČ›;“Đ뛐¯ã=ķ^oq¨G i:„zÍߚ×ÂØĄ`ĘPģGsõŦcMÉĘĸ‰ę@ō0:į‘Mķ1 ¸ÛÆîÕĀAĒę:Kx–žšīė,ŅˆfVe9üįéŌh|3ŠŪCâr$°ķQQŽíāƒŋ%Ž=00)û-uĩĶCĐ ƒ1žõ‹Žę×LÚbÃrĨÕâ@ûÛwzqĪ×3,6đéļ]júŒÍžŅ‰2€ā7Tj'Ŋ’īÂŪ7—/ž[Ôm˙7F'׿šĨmAÔŌĮĸIšawE áÕŧ•LCo[Õõ/N˛•-āIæŋKr…ˇ ŒØ{‘ųWBî I¯5’â9|%ĸÍsvīęã2É)$(‘ņ“Ÿ@*KŲ šņ%Ŋ•Ė÷p°ķ2´‚9šáXįļZ§KK T=Ð9õ á\æŧëJÔ#ūØđā‚üȉ§9c”°ųTu “PÊÜé–´ˆī=Ō[‰’å&gI"wáöŸēĘ3Įĩ'Eė5UįÚîdņ[@€Zà y܎ŦĮå߂OáZŧqĶŊp0^y>"Ķ ĻĢq=ĨŤ˛JĻc(b aąëĪOjč<;}-ū‡ö‰oåÁ`dD(:ž0y ™Ķ˛¸ãSSKO{šĄŪ[-ģ,Ŧ¨†Ü đÜzúU–[?5æŅ]ŧ7j­s–Ö JË1ŨŗĖ#÷ŗáķ-§Šu­=nϏ†1 Š%—yV`wr %J×cK´Žŋ`ÜqMwœ+Ī/ęK¯ē귑ũŦŅÜa8éĶ#Ģ–“ŪAâ ŸQšqŠZ3Ī‘ĩX `TcJ~ĮĖNļģŗÁãëNČ į­pzTÚļĨu§ũŦŠ Ö{BwmÂp:û×CkĒÁqw{s3Kl`>čÎp>ŧTJ“LŌ5S[ášÎ2sC“ŽãæŖļo17úԌ¤āä‚k6­ĄĸwÔdmæĮ¸rpių8'ĒãšW_|j ņÆ{P&ƎšÉëO#:äS0TŒt)KdŽH°ķ\`äy>ÜČ9Úk‹8^Üņ*„ Č8éYž!“v“`œa¯ įæĪôĒŪ °ļē‚įZ´žË^$ûL^bŧP{wĪĨpĨt“:¤ėô9‹‹)õ­jöęŲ[ũ"FXwcæE_ŊĪnOQXˇąJúeŧÆbĪō™]žhđNųÖĨūēÎaŊŠr×{1 SącÚCnārIŽ˜¨-ėÃ[G 9s3#X æ'ŽßÖģbÚJį4­Đô? _GŦč°Üo>r“)ėāc˙¯Xl%Š ]VîLÅ/”ôĪę?¯¤^ÍŖøÍĸ”˜íĩ0v…RŨˆÁ įÔz×q¨Á§ĻÍg*“!CĮ~Įđ<×+Ŋ:ŠKcĄ{đˇSĘ4§ņŊeopėņE‡#øU“Œ{œ~uÖøöú%Š×K3>ųyjŽåLø{¤›oī.×yö ×õūUČx—P:ĻŊ¨M‡Ę,F:…ãü:ßãĢäŒ~ ~lģaÅŪˇufŽ“CFqë uūfŌõytûÅŲÚŦđ360PŦŋ^yūu>‘ĒĮ{ å@˙‹wĨt°kg\–uyŦŲY]Ģ팁€UÆ0xæŠąoĐ ŌßsĐíĨŗ¸–ęfËÂ枌wÆ+“ŅíbŗøŖ¨Á ,hÖû¯Ũ5wÃöV>Sk-ڛÛ÷ đ§—ØgŊBYaøŽŒrDļG§¨ũj኎2[XŲģ¤ßsĨÕ­÷éWč~ëÛļîŲ5äÚfë-_Dŧ’4ØBƒôĮ^ũ:׹\:Im"/>bmˆ5⹘ƒi‹v…ĸFÜč?9ũ+L=ėŅ5­ucŽž’ŧ§,3$ö´l<);›Pޟáė@x>Äú—īūŅŽ2{ûKĮ2Ŧī|ˇÄ¨Œ0`Ē2@ŽŋĀ?ņGéņ˛÷|čŌ¨Ÿŗų…6šūGS5Ŧņ͇WRŦ™ęQTΆ4@‹Ķmŧ¤;•6p:ũx$˛Co ×D•TRė}‡&ą-üi$ąÛ^OĨÉ›s(Ž;“ b 8¯P īX%;^&ŧŅŲ›qi:M”æuˇˇŠ{ČÎ@Lö>ĩJĶNđĆëL´M=°gˇMš8į‘íúWâ éī—ÄS\é7Ų‚Ážj‘mÆw×$xö­íūÎ Û[KÍ'ė÷6v"DšyČCÛךˇ %{‹š-íĄĶIĄéBâ{cÆ­+Ž3ŌĄŽÃAû,Ģ‰ļœŗCUÚį;ņéUÄwWvæîßIilãs(V`#*zŽ*–ŗept‹HXãž9$ļaˇ÷)$¨?­gË2œŖĐé×M°[Oą-Ŧ+nFL~X+×<Ž”Åđū–.RQal |ĨųG ŦmÄSęķŗ‹TKug`“,¤66ēãƒÜU‹˙^ÁŦŨéļšWŸ$6âto8(`xį?ŗNÃæƒWą˛ē] û$,įg”6į×ĨŽÆŪÚ$‚4Œ‚6ĒúV§Œdš“J”é“Gc¨Ÿ.9ÚEȓÁ_N4âk×Õ+[ .,ĸšŌHĒÛŗŅ˜qŒę{Rä˜s@܏Ją„!†Öö”,avƒÖĒOsĸéÖWm#ÛÃ˛ãb c‚įī ŖĒë÷–ž!ąĶėtä¸k˜ŨÜ´ 诞üG¨E{áÃö%‚X%HF ü¤1 zUIÚâ”âļ-KŖŸøJ4éôģ/&ČZʆâE Ī­Ž éé[ÚE¤Zk$-ÚĘėd˜āųŽIÜN8ëšĖļ×įˇÔcŌ/,<Š$šÕŌPË Qʞ ?G֒O FŪÁ!ÂČâŨXž}đh’›Aš‹Ąi?g>Ô(bĀy+€ØëŒuÅI•aov÷qZ“°ÃH¨7Ô÷Žj߯wsf3é #Ôc& ŗYĀÎ=‡ŊY‡Å€éWŗŨYÉÕ¤ßgxUƒoãhSß9. RĻjŋ‡´ĸn X[Ÿ´s)1ƒŋœķëÍ5P?k=Žc^„Įënt?„s6wt8˜IŋŧOšÍƒ‚2}Šƒšõ­ŒXö$¨ Á'ą¨É†:ņNé÷}}*"ÜõÍ1Ę Š#ˇjņ}&­o Ŗޚ'CčP‚>ĩíĮ vƒŌŧbÚf‹Ä-!R jˆ[˛Ė+¯ ´Ŧsb4iŒÕ­žÖęIšpĶÚ8ŠUq´ŸF_^1˙×Ē—sÍ=ÕŦlŲPG–9ĀÉí]g‰]5-ZhIvĢ„žęT}˛:p äzžk†ŪH5Ģ;rû—ÎO-đ@`[‚í]P•ãvsÍZZ‡âÉūɤŲÜ2ą]ÄĖ8Éū•ÁÍ,—+<ōÜI$/–@ĒIäzķ]˙‚އ ē—HÄÄW"°BėDŅFčîøĮ§§ķõã:ÜšĨUīXʋd)iōāß*žÜū\×]ĨiˇĻŲö…;dšŋČJŧdržãÚ¨gnŠĄŖ[ī…${Ž9ëúû­@úŗFTi›ä–>`0zg¸ö#×ĨT¯-ˆVAâghcļ†0ĄÕüØÖ3ē=Ŋž3ÔŨ}Ez‡~5mÚíqšĶįô`pkÍlíå–[ģ›ĻvBT…\üÜzwé]ĩ -.äĶ%pĐŨ+Oā‚AŽ3Y֏š§Béŋ^ĻĪ‹îãŌü;tĘĄZã÷jÆIÎOķ¯9ŅėíŽ'‹Ė¸•PœP“׿ēoNú†¯mĻBß$y™čŊū‚šeŠK;¸.aŽLe!zî^•]j~lšŽķ4nHŒŦ‰O(åԐ탌‚ÜäņĶĨQÔ`Ėí$8û,¤H Ÿį5ĐÅw풷•0îö'М“øqøôĒĪĨËe;­ŒŠK–VAķ ũ~=GŽ)XM\ÍŌ/­ėŽPē–G{|ũž–fl` ô +gÃRÉqâũ2ōYd–iüĐĖį¸^˜ėk1âšME[r Ēū§ļ}sÅ]đøšé Öæ Ōl‚ āšsŗMų :4zŧŅnŲÃũ xމe&ĨĒ[ÛÅ,A–7f2‚U=Oo˙U{Ã/Ɇ^+Ãô¸í!ŋŧQ Îcr™°ĻŅÆ=ÍsáåîČŪ´Rhך‰Ÿ@´Ôn>innpFP‘Ŗ…ÚrINO\×SđåŧĪĀ@ģ–Eüz˙Zåĩin#hlÚŌ{k}ŪlLኩG:˛k¯øs´ų/lãĻ{ˆDhÁKК~Ōl=œÉØh:Ũ¤šjęPKl"1ۇˆîđ2ŪmáFŅôro`dĶâhąåŸŸpÁ=x8Åuą>ā„íÉį#ĨXĀøY§Īõ ęk§]ˆĪÛ.îŌ;vk|CĀ$ī|’ Îö­‹ojVˇjûtrNlĶįˆļū,äw­÷ŊˇŽŗyņ ˆÎÆqģōĨ:…¤rbK˜‘đ Wp8'¯ŋŨIÚÂP÷9{o ßĻ¤Y˙hÍ25ŅĪĪŽƒīzV Đ/Ŧu{–ŗÔZ; æûD–æ NãËmlđ ö­÷ģ€]‹eš‡ÎÚ[ĘÜ7íQÄzQ’ä=ė@Û˛åą´ū4s͇,V˙BģŸZ˛Ôío[ƒE¸263Ü`ņÖ¨ÍáĢ/X´“PMڌË)‘`ÁLcŒnäaEtiĢéōÍ 1ŨĀŌLĄãA ÜĘz;ŠV°&4[ČL’3$jeˆęŌ’œÃ–™ Ą_ũŠo¯/bšō+R•D-ՈÉ$œJNđõŨ†’nĄ3€č% 1'$g¯&ē.­îÕūĪqĨŖ|í#ąŦ뚎n|Acmâ;h žwY\ō<~9?… rzŒVĻ<^Ŋˇ‡CA¨D˛Ø•ĖįĮ?7TsxBōx58æŋ¯.Vę9#ˆƒŠã<Žvm"ˇ==jˇ[ŧģhËĢm+¸g>”ŊŦ÷+ŲÄæu [Õ4˜í.u W•nS „…€z’9Ąô UuCPKģ]×6ÂO(ü¸čzķÔ×J÷1+•y‘IėHĪ=(k˜ŪOšžn3´°Î>”•IŲÄä-ŧ)ŠZÃĨK ÅšŊĶQĄÃËėN2JŋŖčW6×ڍíÔņ›‹æ–<íEQ€¯ÖēRę2x&ĢČ Č0WŠûY0öqEˆÔ"Ē.qKˇ÷ʼn#Œb™!9`s͚~wgžEdka}6ŌÄgZQ‚Gcژ˞ >äP˜ŽG^* %„c=Z“œžŖŽ)­N@é͚LhPX…‘ĮaVWŒu!š=N¸āf„L‡ųNr?JFČPqŪžuĀô¨ØN8íŌŦ‚ĢÆŌqŠ*)+ryĸ‹<¨Lsļž1‘ÎyŦŌJ¨goJԝī+arŦų>AķzW:Üé{8,r1‚3ĪZ‚Iõ­ËÎ1H~Q€3íšÕ1˛>œāTCĻ{€xŠļ€C0Īz@9Î8ĮĨRB"*¤Į§ŧ?R2ŽąŠ‹xˆžČe?2ļ÷ĀõĪé^ã2žXž¯×#K}sX„Ō5Č1…ęNėœzk¯ ŖhįÄ눿Ô.a†{VŧēpųíægųíƒsøV·t‰›SļÔõIâŠ8qäÃ4ÛŸÛŠā Â6Wū$w(yÃg?ŽG5 iŗÍ2ĢŲÜÂ=~ČĀøs]m]Yhs-ĪP×lÆą ŨZE4rJWrō>ōœãúWZÚXš wtú|ĘÄHŽ­„#§¯=Oj­—4mŊfā¨ÃōųŌ\ZO#įė¸Ūé6GãžjiÕZ㜜ėk&•aq§Ã9kkx• ™e“2M‡<ã’8ہoˇlņē6  ‘Ž)ķ6ģ“Y1ÛKhŒänyÛ `ÅyĢ’Ę<…•1É[rœ‘ß5Vķ$ŌÕR뾮 ûyüšŽfļčø`ŖåëÛÖĢ4KŖ.âSĐHXŋ߯7~jKh´ī Hö‘M#1+°ĮŅįPO&AÁ×k y`œŽüųRK§AžåŠŽ¤ŽíoâNŌ öČ2ō@=p­MF k=ú'߉Öî4ū K`}O^•Î4ÆāėŨEĐėČÆxûĮĀ͜"HLĶŋxXÎ2ëëøfŽPšiÅļĄÍĸŋˆüīÚdü¸ÆŸĩVŽMR%ŨnZHˇ7|­ČęF}?™¨/.!ž1å\€Ä€K–Ũõéũj֟ie4Úöki˜ŽåČH8?–zÕY$NåĢ=G]ŠāIĢH|Î3´c=út­?ÛęΉ Ô&w{;V.]ēnÆ6Œū‹njSSCz0[í­ų¯ĶŠ­{VžˇÍŊƧŠZ8CkËĮ CÅD­f–åGusיCBŖ#Ĩxኴi4ĪÜČōKû–FŒpĞTķZnĒ‘ŋ“âmDˇÜ -Ģ Ä˙*lōøTˆØËČ~<šíã^:ä îĪáXԃĻ÷6Š>uą$r"ŲˇÛĻ™CcbÅWåluöÍz7€ˇ'ƒ,đÜbCĪûÆŧŨôëŊxEŨÄoķŸŨm`à Ũ˜G&ŊGĀāÂĻõ clįũãOŌ‚܍kų­ĄŌîZéÕ`‘!sÆÆ+ĪtĢKhü ÜQJÍ,ëĸŅŗ‡$Œvã;W§Oå[ZK3tw° ’p3ĀīPčē–ĩĻĨíšH°ČXë´đpkžj7ąŧĄwfĪ>ÕmÍĒŧ€ØY6Hš#ķ¯Qō6Œô⤘'tÉĒöâö'%¤ęĻĮĀ6â.Ĩ†ŨKF3¸íāūX?•twicÜA‚\F$PÃ3SŨXÚŪĀ"š…e‹Ģ#yŠÖ8Ņ–ŖfÜ8ŗ”“ÔĨ,ÔbŗŧÔuŊ>{Ģ4רEÍˁ%@<œr8āæĩ–Ū9ļĩ’ŲZąōÔ% ‡@= ÆM[] [—íÖˇÚ~—zn‚ßLß2Ąč6íÉĮnEuv|zuĩŦnĖļņÃ1ä€1ZNĸKB#MˇŠįŠ{o'Š´‹Äąk5[›ˆæ&6i Ŋąß<qOĩ˛V´ņM¨Ķö›ËpŅo÷‘‡ĘąŽ}+ŧŗžŗÔÚcg2ËäHb“gfĢHŊˆ˙õÔûkiaû+ĢÜķ>h%×|3(ŗēmŦŪ]í™pÁ@Æq͝=+3ėv_đ‹4ąXČ.ŋĩw![vßåų™āã8Û^ˇáÎAÆ*sā ŧ=ŋũ‹îyâF–ž#ÖāŅmŒM5| ‘S0ÉãŒg‘T m>â_ ų6mĄÚG>ø 1! l’>nFkĶ\Är21ĀëXšŪ—ŠßęúUŧ؄R™œHä$mĀÄĶTŪĄ*mlGĸ\$÷ÚĖS­ŌÉāˆį¤q°á8&¸‹Ŋ:+Ëß-ĩŧ¨­ę­ĒĮ;[åųƒcåĮ$ķ^ŸcĨÛXŦÂĖebîîåËܞÃôŦßčˇÚmŪĨ5ÜÖō­ėū­€1Īl Q¨•ÚĻŨ‘ĖE•īŽÚŅ ĪŒgal9XŸÄã˛åÉáģČī`sâCrĖˇ÷Ĩ÷|ĨO]¸ĮN1^ĒĐæPûŨíOؙÎŪxĨí‡ėŽrÖĢâ%Ŋķ&¸ŗšØ)>JĄ NŪ~¸æ­éWZÅÚÜ&Ša˛ĒƒŽ@áŊEn˜ŖqH”`ņČŦŨDú*vęFĸ=ˆ ^ŸZ°¸JŦčŽņĀ=ÅIŊ˛ôāfŗ5ؔËÁĻ2ƒōƒÍ'ŨĮ4×D‘rG#Ŋ1 Sœvë@PZ—i“īH3Įր ÛN;vėŊ{Ķ ÎÁĮQRŠÆ(ĒØ_ ’G23´ôâĻûšúsÍDĖÁõâŠQeär[ۊŠS†ĀŠ*ŽM’Ĩ×yĀ_ē=}k:hō­“žõ }Ž_x‡OŠŦŲ÷’T1Ír­Î§ą]d Á€*:r1KÆîiļŽŊ*5 61‚ jŒXđãĻZ\ā`œwχÜ@#Ŋ8ž1Ÿîāb­Dā€GŠk˜ŸÁ:4÷S]ÍŽōšf_5ąœäôŽĄ°Ų œf ŽŖŽsW 8ėȔSÜæ¤đF°âÅ׎žk˙C˙F„¸Äc8?ŋnZę7ųļã$Œįšh…Ž2s–É>ĩj¤ģāģÉđ~ˆNī˛Č1Äīųõ¨ĶÁ:BH7l:‘į+§–Üįh'~4,.žSö˛î'Øæ_Áēv2“j)ŋĻۏņ(đ^Ÿƒū›ŠŠ=qs×ôށQˆA‘ßņĢ"ˇ'֏k.áÉĮ/mām6 æĻĢ’HK Ÿ ,ž°`ØēԆÕãũ-ĢĄû+d•}„įĨ>XÛ ÁYnØr.ˆätá,hˇÚŠ.1°OĀũ*SāģISÕ@GÚr?•t’æ Vᤅ6““ÔrqŪ‡Z}ÆŠĮąĮ ģíEˆā0q@đE›D?Ķĩ üœ™_Ęēų$íãˇʼnĖkëŽsGĩŸpöqėqĐø U›ū&—oAąO_¨ĢPx×râū˜n9Š#üÖēŁ•œœōا¤$wžzSu§ÜJšėr?đ¯âTfƒī-øö‹ŸŌ—ū°“1ÖąœƒøWrļä¯lúæ!ˇķ3ŽÔ{iwfģĪÆuûUUČÚĩEūXޝ@ŗ:>‡m§—ķ|•#ĖÆÜäúVĄƒįBĮÜR=ģ ?NxĨRRVÔ]ŅäŽÖW ‰‰įÚ¸Ÿjzއáãe´ēl˛yl 0•wšÎq×Ú웋U¸ļš'bŠ*b:€F+Ođ}Ŋ‚ZÃöĢĢ‹;wķb‚V]ĒũAāyį(„ŖËfŒ¯t2û̝§‰-m›ėfÚ{#ČFŨ(R8sŽŸJ|>!ÕĨÖõ8JY-†žāĘß6ō… ™õĸOÂ×bęFî"ˇ&éQvž÷Qœ}jö™áqg¨ęWOy$éūļ)p}9đ8ĻŨ; ĶŊŒĪx—ÄZ–¤˛]é4Ģ„2E.0c†‹<~uÕE¨Åq†)"e‰ļI´đ§ĐúW-māŊJĘ1oeâk¸,ԝyJÅW=[pøfÖ×F¸ĶŖ’`—!ŒĶũãŗub}iO‘ģĄÅOcDÉž@  õŸŽjí¤č÷7Ž ˛&#QüNN~dU3HM6 8Ĩ–Hâ]ĄäląO[đôZÃ@.ŽîbH[z,N,9‚HŠ\—×bŊû¯‚VëI×/téā’Ũā,Œ–+œ‚{œÖ׆ĩ-jú˙Ržæę -bŧ’ŨbX°ß. ž•tø~?íč5Wģ¸kˆĸōÕK(B§¨ĀķĪÖĻŌt m>úōâÚy˙#;BdĖaÉÉ zÕJQwdÆ2VE#ĒjúÆŖ“womŸ „ŦŅoķ_l÷QÎ8Ē7:ū­>(”O>œQĄŨF ä¯_~ĩŠqá_XmNÖúîĘYČ7 o&՗ŖąĻŪx.ÃPžōYfŧí€yŅÅ9Tb3ˇ×´sSY”.5-rMvĘÆŌkHÅÆįąxÉÚüdã>ü ĄŠuŋėŨ7S”Zũ•î…ŦņĒĖۊ–ˇN•Ō Ā—ö÷‰{z%‚ŗŠ2.6~]{ūMŧmũ—š—÷Ģ SũĄu$>sũŪ™įņĻĨNÂqÍmwU&w‚Í | ŽŦx†McGĢë֚ö™i{=¤°_ÄîvBTÆUsÉČé] î›ŖĻOax<č¤@¯ž ÷ãŋzãEž›ã N]Fkƒag˜1*ĮĨ*j-49s]2H|YĢŽ‡ ä‹k$­ŠFʐ īÚÁúÕŨ_ÄZ•†Ģn;Uˇk´ˇōÚLÉ(oâtĶdđLR#Fšėq Ÿ´¤@ŠT|îāëëIuāáqy5ĘęÄŌ\ĨĐí‘}ČÎ=ēSŊ+‡-KŽŊĒĪâûÛ(ŌÕl-?0ģ@`In}ēV՞Ĩk{ŋėwN#1G ƒīYÃlšėڊ^7•uKĢf‰YeÚ¸ö­ OĶ7ũŠÚ;r⨠gœ˙Z‰{>…ÅOФ˛†äÍ+t°}OZ@6(QĐqJn˜ŦM€„…Áõ¨Û Č$gŽM<ˇ8íMfĮ@y aš†Ü mŲ=鈸ãĩ?¨ÔwĻ!1ÎsŒõ✠By>´1ãÎ:ŌĒîlą>Ô ˆpIĮ'ëD¤ŸĨ8¯ĻGšŒ’:ņÍ4IJVũáä­ ŅÛ61ž(Ēą76ã˙ĮŠ‹úÖeÁPĖJŽņ­HQZđuŨå7ķ•vA•—ví\Ģs§ĄT˛:’:ĶN7ņØâ¤lŒwâĸ9 œŋk69FĐ~i͆õāsQĢÁsž 9_q,9튲 zŊëéš|÷1ÛIpbŲS˙ÖŽjųēUĩėēlę$˜BHû‡$Œ‚zŽ+ĻÖėßSŅîėâuY&B› 8īí\€đÖ¯˙´ZtĢiæZ˞CĩÉŪwqī[SPqךŒÜ¯Ąˇoâ;vŊÔí§íūņ’GÆ6úŌXøžĘōâž ‹´dÛ<Ʌ˜Ø˙JēCÔ¯nĩvŧ[xŖŋ…19%GĪÖ¤[ NîãKÃzxßē93į0 qøÕō@žišļž(°Ôu/ąĀ_~YrČ@ Ŋŋ,ūU§q{ ´—7R,QGÉ-ØW=áh/->Ūˇļ’Âe§F.¤aNZąâ{ ĩ}%í`#Í+ĸˇˆįŌq5ērĩËVŪ#ĶĻmiUãˆÍåÉVeõõZßĮ:,ĶE¸Ė‰*’$hÎ܌üšõãĩTšũKPˇÔZÁ텭ĢĒŖēî‘ØcîûœVbhÚÂhš%Ąŗ&[;ŋ6\J¸ >Ŋyũ*”!Ô\ō:ģOX]ØŨŪ+L‹iŸ9"ĮNh˛ņ>›ĒN-ā’@Íš›ã*{āžŊkm7W߯0ĶË č‚CûÔĪnOqƒĪT*FSÜ •ÉëEũáûˆ/æŧ€j‹ūîIeËdq×ĮáRÚ IüE¤ŪÉŖ]ÃĩƒÂŲ(Nî;íUaĶux|5ŖÄēdž}•˙Ÿ,;Ô ąČįîãũy“)6ĩGXž"Ō§ŗŧ¸ŠįrYĮ˜Ø:u#5-ŽŊĨÉ}oiäMqŸ˜Č¸ÎsŒW=sĸŪę’kˇÂŲ­dŊ˛ĐĀėģ܀~fÁ u­W°ˇÖNąŖ\ËŖÎ6+ÚNįUk¯Yę’ËĢŋ˜ˆYXĄ ę SЌņXū,“ËŧđũÁš‘ߨsŋh+‚N*‡Ãz~Ŗi{xZÖKKŒļ•ÕĘHN[f ÂTž$Šâ]WAHlî$Š ĩšY7*.äū4ŌJzmĮSq5Ũ6÷M¸ģļŊÉ„•’Bp\ô¨ôߨj24ˇ•P1)Važ d{×%{Ŗj:…¯‰"†ŌhˎŅĪ”mĒ€ú§ôĢWvˇēÖŗmuÅˆļˇ–6’eÚY@ ė9éB§āį#ĸ$Ōn/RÖ+´y؝ŖąÛÔКąw§XAöëĶo îP%uÉéÍs>kąme§ŪhŗC5šmiË\ nSœ’ŪÃŊYņČ_øDnˆŠ4N;ī^•. ™!ûGĘŲąšĻ\Á4ņ^ÂņC‘++ˇsQCâ"âŪyĸž‰ĸ„+HųáC Žk{ĨÕĩMZ=:XĄ–ÃČ”æ\gč9ĒņE{gáÍ(´gyāeYP Ėd)öää÷4ũ”CÚLëaÕė.^‚ūŨÚ@Y\eĮŽ*g™•ŲķÅp^Ķnâ"ŪãL¸KøĨšHî¤\ÁėüʉȎŖJ‡XŠ;¤Õn ¸%‡–ŅĻŪ=Å)AE诧)t:ĘĘOSڇ}ŊX(ÍA˙,g§Ĩ?`g!‰ä Á›­‡–ʇ>ãŊ1‰Đ☑°§+Χ¯$ƒÍœœöĢ*ËÁ'ĩVT"CŌ¤Œg${Š, ”H9ÆE;cÎAô¨ŅđÛŲ§ĢåöŽŊj‘  žābĄ‰dķ$ķv•Ũ”ĀíīSHĮˇLS\€øĻIz­įđ;QS\Ŗ´Äš+Dô!ŖQ ‹ØJŒ‚ŽéY—ŦMä€ôíZ‘0Ņ?ŧ3éÅd_0ûCsôŽCŠlDōmÉ'ŒãrA$gvF8ü*D`ʤsũ)q‰rp{ķVˆl¯Æ9Æ@朌OŨ Žzæ†ÂąĀ<Š`ŒĩY lבAĶJ Įfs遚åtßęSßXĪ=´#NÔâ….{“ĶšŌņtö‰áĢĄwũĘB.HËöéīĪá\}ēé“Cáfŧ™–ß˖9šĘ€ãĄã“Öē)Â.7g=I´ėza1Čq‘Éĩ[) Éđ¯8ēŊļūßĩ’ÍîĻĸ"2M8ĀU*ĢŸģŽæ¯Â$›ÄúÕÛ^\7öpYĸ$ų]ļ“ƒíÛ{ēÚߥØÉÆŲ9āŠgž›Ô6Ms’j7ēmüšä2M:-°Ũ–ČÎÜn mĮ`:U˙Ą_^Íē42”lA.’‰JwM›ųPšĮzz¯ë“Ū¸í Í6[ĨŠî[¤}<Ũm‘(ūÄcƒŸŌkqq§Ļ{m¨Í;^ČŠ—Ĩ[ę hĻĪĖķ™Š†āõīøU:zXJzÜîJmbsëĮĨ r+Ķ#Ž*įûTëZ —öËyŌC –H@*ÅAį‚~ĩœÚļģēƒj†Ag|mĖB0<ė62ĮôÅB ÚܡZŨßTĶŽ.ã…mŽžÎ#lŋÄ+J5 <ãZŖ%üI5´/"¤ˇ9§Š gZ”'T—OķĮÚc@姎­gĘËæL×*7ã‚iKǍĀÉ8é\Ļŋ}}štQŨI´ō•¸ž!ķ(ĮzgÖ˛Zķ\ƒÂė÷ķ‚’mĩ2DĄŠ1ã¸?ĨiM¤îCŠĐôA4 õž3RpĢ@+‡Ö//´Ũ4[žžVāÅ%Ë‹2ļ9P00 äĶnĩ-Rõŧ0°ęešņ ’€‚BČĪ#ž”Ŋ“}EíR:čĩ—S’Í-įÂ&ķ.ΐöÚ­^VãÂ:W u[û}WTˇ7vÁ ĩâyWb+ą#æ#éúÕK-WR–Âڃ\}–’9„{pĖĨˆöôĨė›ĩHîRÄduŖhR;W›Hú´ ļÔ?ĩfine° šÂã?—åZ'QÔĶPņ'PrZ b;GîØŠ<~TŨŅ‚­ŨĐRĖ=2H30b€Č™*ÅFF} yĨŽĄâ [C-̃ũ§!XÄXPw uo­t~ Ô.î#ÔlīnĖ–w’B˛ˇVį52ĸâ¯qÆ˛nÖ7õN1aŪ¯$÷ #Š$3ˇ\ öĀæ˛ŧ/cuÖ§{rdFģŸtÍBqCWG_ß˙ ·ȐāE9 ØŊ~ŋáS鎚†ŧ%Ŋ‡Q6ŅÅvŅŦ °*ƒģ<äāô#ųmPæN^…OÄGO[wūÍš"K8Ü=Aí[6÷m-ÍĖMk"$avĘØÛ&FxútŽ úîęīJˆŨŨĖ:úÆ””>āUÛŊz÷K˙„‰ÄåãĩxČ1p3͍Ī>•NŅ*vgoË3ēė*Tã$h?,‚MÃÁâ¸ëë—Đ4‹B×V–įĪōâV ‘ŗ6<Î: ĮN+;ğÚÚw†/ŧũXI“Eå´m–E' “އ¨¤Š]čĘutØôV#ˇĨ(PO9äŠÃŌÖXė‚ɨIwüK#¨§Jæ.ĩ›¯øI-$ļÕĻ™^˙ėĪÆDJœåIîÃ×éQMļŽSĒ’Øí5Mf×IHVe•䔑PĄwlu p*ĩģ{Ũ%õ {Ąą\˛˙ ĄĪÍY^OSģŋŸQû<ļ/n°6Ō|g9į-Œį=Ģ:Æ[č4oj1ę˛Ģ%ÅĀŲą>đā7LƒĀ­%ķ#Úŗŋ[Ŗ=œrŧF’0Í}å$t>õC\Ķ#Öôąd×Ã`Ėcį sīŠįRiõ=nĮL¸ž¸‚$ĶVā´RliÜār}ēÕ+}SQ’ÂÂ&ŋ™HÕÍĒNĖŅ ōxį˙­DiĩŗQ=;¸ķ*!vEåȟ~8§îW8#Ū¸QŠ^iŪ%ˆ]Mvļ-’÷s)p3“ÜsøVžœ/´Ô¸ŊÔuhæŗdRœįoœā aPé5­ËUWcŖĮ$míJā äcĩfZęđ^i+Šnh Ø_.¸;GŌĨ†ú BŌ›K$R8‡ø—_:4csŒvô5 ;y8äzuĒČû‰PO0:Հ 0=Ē øŒāâ€{úb•TĢ}ėŒž)zsĪJV‘äŨÉŨĮ°Ŗssxôô§ž”Æq—ŠÎ>”Ātj:į9ûPŋë7q͚fâ‰ĐúcŽJã4N¤ĘĖ:cœĶÉĖ| …~éSįdÕ"YFPZBqEm•F@âŠŅ".[œäd¯æ fę1į“°ëZS’ˇö˜<4Ŋ}x5WRtŌ’xqõ:–Æ\\0Å<âF83†íÁŠGLŒUĸÖB¤ņü=j&*œõ5bCŧƒĐqQē›Žõh‚ĩĖ÷°471$ČAAŽjˇö–ÖąÚŊģC lSëW]sŒc<ŠŒ9VĮĻ*“ka4Œ™ü-¤\Le{8„žaēäGôö¨ėt-/Myõ#N¸c$„‚ûžü~uģŧˇŪëÛ“[ÃbWįiûŅžng¨œŦŠN›k—ąX%ĢJ‰æ/•ąŗŽAR évwjˇˇÛ!Ũˇæ;W>ƒĩlÅ+"ŗž0M=TāņëøĐäī ãÛSš—š<“\.@× XLø<~"Ĩŋđ~›¨YZ[K+à!X6[Á&ēîw¨’Ö+ËsoqÉ ŠŒ2šŠ-5'ŲĮ] á; õ8/mî§E´Qk Œ vÎ2*&đ-ąĶËí÷‚/?ĪÎW–Æ9âē›[H,m’RÔUčN6ļGЧí%}ÃŲĮąĘéļĶuīžęæę@ A)&xÉõ>õr-ŋá&›Q™ã8ËQyã%sÆiΧA5Ė7 ŦdˇÉB” õāÆŦī`dôü*e6Ũî5kXáŧPöđë:dWōOkc´‚ęÛÍš)ÚĩŋˆÎ§dĶŨę<~YŠ[‡mÁųČ‚EváUÎn\‚)đ"Ć8âX͞ ĮãUí}Ûu˛ŧŽaj˛žŠŨ<û˜š(Zt“–B:7­C?‚a¸°ĶmūáZÁŽŲ—ˆ=GˇlWH`C4r1}钤9ÁúŽŸĨH‡t5ŌkŠ^ÎĄÎIā¨n.u)§Ô.Y¯PÆFF ũqŠ‚˛ĩémjíŌęŽAš˜cæ'đÆ=ëŦ]‚Bv(wåŽ:Ô˂ŧGļŸpöPėrįÂ6Ģá_ėI.î w‰8Ü0r튯‚,cK¯*æî1uÄØpŖ’py>Ļēō~ī=éĄC šČĮŌ—ĩŸqû8v9ÛéđK`Ææņ…úĶ}͜“Āü>•Ą¤ønĶE’y­^rg;¤2H[Ÿ_ūŊkĀär éRP1Ž:t¤ęM­ÆĄĐ˸đõŽĄôë#\B¸üÖG°  iƒTkõŽHæw'—+*ą QÁ5\xÆ#ĒÚŲļu ĩč W ›œz)į9ޘˇãŒđiˇ8îÄš%ĐįO„4wˇXLs™đ.™?Ŋ×­Z_i‘ŊĶų7Cīva ÷Ö§cŽõOTÕ"Ōl ËÅ$܅Ž(ÆYØô֗<Ū—)Æ VŠ–žŅm,î-Ą˛ŒAr1*NáØdš„x;HM"m5`ao> |äļGNOĨ\ŌuxuÍ=om„‘ å9ʐpA­ĩķ[°QĻõHΰԭtÛ´ļ-åGĮ$“øšÍ_čßi2ˆŨ[Ī€˛°Įp+iP‡%OĘ{{՜)\cø¤ĒK{Â=Œ‡đ֗&§ũ¤ö‘ĄœŽãž:īQÍá]iŽŦcŨps)Éųûž‡ÖļÖ0œúĘšũsÄRizĩŒ:tˇMtËa Q¸‡?‡z¨šÉčÉjWhģ'‡tš­âŠ[H¤.ØÃuAčZtē›,0,–P2Ûņ •á>Ÿ•sËã{Ĩąšâ]ÔŲMåß*•ˆz¯v<ŠÕš×î]“MŠÄIū„nĸs.7vĮN9Ģq¨‰S‡bÚhZRMréekœ‰¸ûųëšĸž đúK¸X‚ ä#HÅ˙tœUŨ[‡YŌ-īÚ!KŸ‘Ÿ=:֛ā ÃĄô¨rœ]Ž\c lŠ7vB[ máe‰™6Ģí ̓ĮáQhú%Ž“b–ŅûXšvęIëZMÁ˙gn-ˇŠævą\‘ŊÅEČÁė)ŲIÅ08 œâ‘X36TäpsRU‰NŌ1žŊ…!\/ž)Ē­¸ņ‘éI’;sĐ lįœSprïZRzgļ 4 Gåšhä`S*Ųę;”kˆCvqڟü*Aã'"€Ā!'UMˆŋ1Îy4ōr„zõ¨Áā19ędų†p9éMČ%PƒÉÅųAÜ2qĮĨĨČԑã˙L´˙Ë~™ö5§Ŧ¯´įĻW¸æRÚ­ˆĮGc˙ŽŌę͗lc=ČŽ>§OC ×k֑NŽr9Š üĎMFÜôę+Dg"^Ũ2i>÷¯Zj?ŸŒá°ÍZ$Œ`0įi9íQȊrA9ųYUšü§¨ß{A${ĶĖānŽÔāā€ĩ!ŒĒ[’;šBŦØSã+̌  …œ6€2O­!,ž8§õ9ã­;‰Ą™gV—åfûŲĢ €czSüø##ŸĘž:CŒ`uëEÂÖˇåaŽsŽ9ĸ4`Ų-ĀĐW8-ŒzRĢ€ģ@ ‘ũŌp)ÁC:œrOzn@'œŒJdÚAęs@ x'ĶHT6iŲ$gŽé@ā `į­!‹ŗû¸Î ?Ë%Iī)ĒJ–ãøx?LŦã?°Ī/Ļ}Í!  uæžUą×9š#'<įžæ– Ŧ"Į–-ž1øÔE‘œÄTˆp@#­<‹ÔãېÆm¨ ÆrqNh}zãŠSō‚wN:Ž‚ÄUõíQĖŦˇ’ŖĖÁÚLÔ €A9Į4Ŧ!8#ĮcČ΋âų5 +šŦžY­Žw+Mqģ?P[…ö<×­F€ŽN8éڛ kk’UߘäãÍ.âp;{zUÔĢĪkĸ!K”yBäƒÍaø’×S¸ĶÄ,‘G;6 ˛ŖƒĪøÖÉl‘“Ž™¤ÆĮ5 Vw-Å5cÃ:mæ›Ĩyeō¨Āã8äį'ņ­°''9äņŠÎƒN’ ^ęíŽä‘&U 9+p=ø­W S”Žî•‡ĐĀRĒ—#M4įŒc­Č%@ĪÖ Ģ0ĮZâÉŪŅ„Í38Q’H#““ĮĨv‡Æ0)’.å'ņ­!>Vg8s#ÍæĐüM-¯ˆ`ŽÂMFpÃ3.qžp~€u­ ­+č{ĻŪÛ-ŧSũƒė×_0;yĪõÛ29Ī\š\HĀņšŋnûėWs‡Ōü-˙†lėu¨ūÍ=Ģ0…á3$žÎk˛ĩ´K[mĸ,ŅÅEf9$:ÔŖŒō(‰#ŠjT`ÚĸSrܨAG` …ÚyĮįJ“Ķ=ų õÚz |ÔŽÔlhr´áō61ė2)Jüß×Ŋ ˜āgŖ­+ ázcœgĨ&vN?*D.H?Z{l+g֘†ãc“íKÆIÉJEAį zöĄ—Ģb€sMnØ#>”!r0ŠŖī`‘Īĩ5@|ãˇA@É\ã>”íØ°  œ@Áƒīœ{RwÁôę)ã$ķIî1L9č 'psC-éMÉWÉÆ}ûЀy ÚĪJkÄvôŖi'‘ÜQt„/ņu8õ¤ā–„ĶWnN8ĮĨN:Nõį)ü*P‡$1Á4 㗀2=zSÕąéĐSwÎxđ2zžƒĨ=šLŽŪM?oŨĸƒĪ­ām úôŠËMŧæ‘EiõSßĨ ŋ/¤ãqāđzæ˜Áļ  Í*Ú;due2H^x=ęĒą>Ŋ ¤ƒvŒŌlv.d†ÁŠęãĮJˆH§åĪ8é@vW .NAëJáb}ģF1ĮZg=û`šĒ‹sīS€ŲëČ"€܏^; CØP0§ņtĨãō¤Æ:1ŒsÜõ§(;>bqž)Ē7;SŗĮĪz@6EwvÅe  ŒHöeĪ8ũ)Y8#Š Є€H$fÎėÕ"ĄOOĨ&×J,FqƒéFOąĪz“q#NzC” ¨āĶ~Qžœ÷40įŽŊi  õô23ÜPÜPHÎ9Í÷Ļ€ Ā9 äĐztõÍZ2sHb g¯įNé׊@įĻiŽZ˜Ž1ß8Î:Ōų‰"Ž:ŠríĶ'­4(ŋŌ€ōä‘ÉÅ(JLd’9ãĨ#ĩ0ņ€=:RqښÃsŒÖœģ‰ úĶâ0éžõČ|ČĮJ—8ĀΝZb°9éšh*=éûN ¤ūš_Lˇ ŒÆIĮ=‰Ļš#bĪ+ƒøÔr°‰søfŠ •eœĢķŽ”VmÜÅĻČČOz+Ks¨õđÕ} ÎędmŽŦAęi#9ŽŧÔ 8ķO=éņ>yęy­R!–•DŖ!€éUĨiÆîÕ:Mō)%*üōh™‰ îÁã§6C(ÁÆ{Sēüž†Œļu÷ĒõQœžÔÕĩˆ3]Ŧã–­JŦûš4¨?v8ā:, ‘…eʞA=ęE*?-8aš˙j‘Ô†ãîã=hÅpp)NCŪ•G˃Î1HÃk’īœSĒß/'ļ*tĀbžõT ’3Ø`ÔąōŸZV(™0Ps€ 8<Šr‡ 9ŊéąĶ“Í; _ˆčxаĶđI Ī´XîËp(,ąˇ?…m?(üE1Û*3Æ(c¸œņÅąÁ'éM$2ļ{œSˇâÁĨ5ŸnI<éM™ËÚĢü"‚ĘĮéڔ‚<zĸGAé×Ŋ Ü@đ 2qõ§„Æ03Å-€c#ôŖp ãŸjRę§éžÔÖ9^ž´ rįÁ>”îFyĻ€?ŊÅÄ;šbĪSŽ”axās֚NōM$ŒFåãĨ8œg _za•ŽöWšRKšÆ=é'Ķã™Ne™sũÖ~”Æ[É ōqUώIXœķŽjÉ␅žFGZ.1ŽôŲLÛŖUpFIāsøŅ[8ŨĸĢ“ĘŠķ @ĀEUš&—hŠ+™t6čcȐ{š#ļ(ĸĩ‰“ÜVb”Ȥ&b§Ļ(ĸŦĪŠ&NHĪCBsIæŠ*ÄÉ#cīŸåR6ôôĸŠÅo”`zœƒ‘ô4Q@!ÍÂãéA'zƒš( ]Fã+ŸP)ņœøReĸH”eŽ?†Ĩv úQEÆÆäG֕ d9õĸŠ@‰˙‡ņÅ"¤ЌŅE"‘3˜aQāc‰ĸŠCT1Sm Ԋ)!1ˆRsԜe G đhĸ„1ĖrßARƒĀ=zŅE :Č ŽëúTTĖ R&q@į#Ԋ)ôpĀgŒôĨ*1øbŠ) UA‘õĨ¯wĸІƪĨDqäž1EĶƒ‘sž)#'“E ˆŲ¤*Npب •ōĖ@=(ĸš&hČëN^ryúQE4 '8÷¨Đä}qE!2\O­+ \ž(ĸ˜†Ô31yâŠ(ę2-9ËA!<ü˙ĐUˇ*€:sEØČžVŽ0jU9“${QEw (ĸŌ?˙Ųleptonica-1.86.0/prog/cat-and-mouse.png000066400000000000000000000362761506303110300177040ustar00rootroot00000000000000‰PNG  IHDR X ¸3PLTEūđš22‚k˜h pHYs.#.#xĨ?v IDATxœíŊMoãJšįŦ8ČȅáČŲƒ‘…YĖÖĩķ yÄŧ¨E/īWpĄŗfŅ<8*“j J›Æx{=•_aîŽS¨¤Ž€ã]ųt† `ŧi”C0îuÉdÜįAI”DÛrž—éŠvā¤,‘ü1¯ĪÃį…ą—ōR^ĘKy)/åĨŧ”­ŧķ˙ģü3 ˙{œyē7ƒkü_˜åߊŋŧ(÷8ĩŪ";!rHäö†‰Vé!ûԄ?^“Hī|^A„‡đH˛{{;ßŦ>-ÛåM7äÍ.dānšƒ]ŖÛ“nČI7dŗ;u@Šæ.ē~\Y7Ät?Žlã›ø ČęũnH‚ZØ' jyVģŅqí}k‚ōTM~2ˆĸ˙~>ĶԆú$Á” †CΰƒDĸŒî ČDcčôhTĘ˙rŅ‘Į¯D‘ŅÎ2–Ō÷tvÜj„PūŠn8/ķŅí:9ŗ4rOŽæ–F•3ŦrĒTF¸"/¸›_Q1æXjŌę\•éŦJíF‹ŠšÂ,ÕšĄ˙m@ūƒĻi`â.īœ;9˙DS2wetS‰:"Čg—ëÔHēBÉŨôĘƚqúÃ䀸Y•įs\āļæôOÉrCį¸ŸN§Ú-æRrí‹fŗ™^‘Ģ”âSēĢĢ˙Ŧ­ÕčbTĶ'&Æô‡Šb>Yčrú›Ņ´tĩĶ?ĖØø,šmB~c˜N'ēúVr¨sI3Į|BíUI,Ő tÁ,‘Ŗ‰Ą6ąŲądô}9Ķ‚ĖL"g:Ŗ˛ŽtD_Ķ}š HŸ Åxhė¯tLs‚ŋô›ô¤ Ū•JēTv*ÆÔú8‚ŒĘ_•I˧%A&ÚŌßU,Ŗ‹(@xš‘„1öįšĒ¤øÃ÷ŦČ$LJ‚ôčk–eb¸ÎNŠëˆQÁĄ§“Đ­etY2i^öâvĪ÷E[‚Hg  î!0Hˆ%ˆ¤ĖręBrÜ@čVčĘ-&Žé: $ڄ¸Ņ€¸%$%4A"ˇ„HŅ „ÎZB”‡XRō’ūeĒ">+ˆ 5N5ÔZ‚”˜ģ˛ŧĸ.ŧ„¸P“Č5"@Ü$*Ô¤`‘ $Zˆ’ËšXß&~ZÉh— db„ĪĢũ™!J4> x1›)–õŽä8ögŌķŊ XnA’%„FÂ2đ’¯ēpäĮ‰ĄA ŨÛvæ4Éâ¯Ëˇ-Hųī‡Ąá 2\Br\žõm’DLŅE˙ 1ˆ¤Ëƒ]īd˛åĩFūŊōŽ˙ãTgīIÅ4@fļ§FēĪė/ËŦ'¨kôohZ‘Ķi€üŸc@†—%Íҧ™nAh&ē›ĸ ģ÷næ!Ÿ¯]•ĶĐMRwé*qu濟4ËįeĻSnņyFs[úÉU€ä7ΚXÜQŒhšŖŪWĩ!˛Liēi9uwŊ¨Ķ2rS‚”ÂēôfZW,W—÷î\ŨÍ0Å^-jUQW]¸ŌũA~úTWu:ĩųĨûTĨcGŗ3õŪŧäõD霮ʜ¨Y-¯¯>9Z ܨ29“ÖŊŋV–š×U=×%]!—÷NĐČē-ķ"OäíŦēwųu•‹ûë:ŸÔØ;Ļ%=…jsÕG`Ec}1 ö˜)}5_ąū>Ų á |aq 5ö8á“ÂøßŖu=Z…͆(|ũC”ŨŊãP^ ˙:!΍ū…C^Ę_Zy×Hŗ¯—_ŧŪ:`%B¯ĨŪ“ÖĪo÷`Č2ȀŅrá‰Ē­#ËĢUŖŊc\‹ĐBøåß|á-ˆØBÜpōę†[G,˙Žžŧ&´U‚f˜›xąYMZk´Ų”p÷ƒˆrg&Äßo;!?Ŗ^ō…ŽšœuBÖû} Ҥķq…+í@h‘|IMønÃ˙đļģ:áī-H˙{Cž_M"/˛ōHhßģ{ėaß$bã4Æ"˛ÂēĖ„¤vFb"$ ũqŋ"aŗ ŠgĀÎÄlܖz?ĩŧ–ĢŦÄĀrbn9myŗšš"Ĩ=o%*ĩüĀäåĸRc#Ģ$gÂMhaÄqãkh9´—ēĸCŨb^Em-¤úpc…#Hji Qđēų[g’ U%kĩüĀäͧ:U%Žn䏋Üå ´w5lǜX3\Ŗ÷´“&Y#;ÍzĐb<ŧŠHØaš—ĨŠhģĮ$ãûŠņÚũQ M’|íŠh.üq|:q:šiW‹‹‰Nä)K&tļ–HĖĒ„ÄĨ2;=É @C7¨ás)F=`ĮGôķ>$G‰,"{dvœŽK’•Šé¸áŦŌ|fj%ųŒ h“Ē'ÅÄ&Į€ Xą^ÍpN՛Č3‚ŒJėú1@ú¯SAI]á\B2>#éÍĘÃÄöâļúXČ—t™õXĘ <Œc‚ HۚD1>d¸đ@ ôŖ>„žu43ī RË8ZBL/n+øüæsĨ…C[‘dJSī"ņÔCJēā¨ĐÉ$ÁᘯF&ĄË` daD÷Rˇ !9Z]x¨Hˆ4ŧ&Ņz@2H tČ ­S z )ļ A¤q]xUęšáVˆ°‚šč͚Z#b @Úãdá킏\AÄ5‰*{HTmÔ¤ÁĸHj AMzl‚†g‚ž˛„ŒaƒĻwąAƋÍ6Q „ūĄ.LUÃw@z|Ēŗˇģ„ôœaėW¨‰‘4Gō6@ÛÕ~+Žlû§ƒCÅ é¤ŋ=DNh69=ÎÎ ‚=Á|MFfpā!C˙XKę]bjėą•f Xōs‚Œļē°ēˆn]–ĨU m=Vęgų° ‘“įîrˆ‰RĖ×äĒĘ˙€Įå.§â&ZWÉËâŪ]T,]čžlwa5ˇN֑s9ÍÃi!ŨÍågÕéÕ'ã>°´ĘŨÕ ŦĒ™XÔ騎R:GĶOŗdNŨČŌĖY9šÍ™s–ĨsēF{VwŸ-u/5ŌČBŪ^Vn|O#0ŊžÕy)›žW ”÷.ŸVV÷Ū0¨8č¸&QeSÍk–+Ą™Wn´ŊįD'9•/1_Q-Ŗž'ŸÉm‡isí?,Us&ŋĶfõKš/ Z‹iŪ+Ø!žØU­4e÷-ŅP˙b Į?ä觀ŧ”—ōRūe”MëËŅú¯ĸeKŌhZŪŖ“K“¯ƒl-ië7SEË#H‹˜Δö­~eÛĄ­Âˇ 9kŊ%&Čú•z8$3otZßĪŖF+ŅDáåöōZ÷Ö+á@e™Āõsi™ŗœ?ŲzqurQ,§ŧß,— N#Ÿ…ĮEą K“ŨWūËōUD¯p€¨6äę 7<߂˛­†ķå¸= É Ë¯Ė5V &Kɐ¤ ‰w f"dëbCŽÚƒ-˙ ĢS[Oũ¯ÉɎ~ĨņޝG¤ĄY.J~COãāô€ö‰CŨį|ĸ_E´YeæĨ⌠ÂãŠL4.ŧĨ —"iÔ´!‘ûtgōRÁ@#•šUЁ*•šļĖŌUUÕōŌ7tŖKsŽ.hĢk2Įō"r“:š;-h/­>––&iJƒ‹Ķ‚vČmíĒģsÆé|ˆt˛¤Í=“UúÁ(‚ÔŸĢJ8ueĨšŅG{Ž>tŋqŒKFŽ ĨŦe­čĪ$ÂĻ9A樕ųŦmR"äÄ-fÆZŋYLa?ËXÄ “¤Œ˙sZ%ō‚ŽŽähZŪ~ŅY/å/ĸlj7vô;Ö#o—ŦÅÜĨēã-4&;eũvĶļm­ÁváĻmwą~“ÜĘôSÚqÖzņʋmũGdeAŌ˛6i†œ0Иė”uMŧō⩚°šŦ!įĢ{P'­ß͆ °SrŨ„Ŧ'īĩŅAŗFĻcUyˇ†x7™W{@ž wÔgv Ŧ RŽ!ŪšäđIHŸē„ˇ Ūī#ŪŖ&aAĨŖå~čK Įí ųIjōūs!į"Ų ŊGp“v"뭁vãHĐHxįšŅ+ėŌXHžį‡aAR,,įĸÂđ›MFäh&‰abņ˛ŅM/i¸ZoOÂoąžØ”;Uæeęę\ĀV.,$tjZ'tÔeEÛÕ ę]ĢÂČ-#Lî.ÕÄÍ?9ČGK€H)î>;æf6Á0[įîÜÉH‚¸ÍĐŠiõĩŖŗ U§‚ēÃĸļ b<úމáĖ8GBĮbD‚C|;‘’šôj8'!TĀ ‚ߌĒIšfô¸ÎŧÛĖwLĨ>5ĮėøTšŌXHįÉÖ g‚”&—‚Dzn3j؉hVĨŖŌfRž"!‡KgęO‰Ä h“:ö§’DB‚‹!HruĮLvAč°s)I$ɖ )hĪGjTRx^č˙.‘1'‰ÆIĩ„ä8۞RWQŖ ŦØA€čÁĢvĶŖĮ”á]8$)X ¨¯2@ü8ą1 e˛SZCĖeÆVU;ÜqTÂ[]v"Ė$ „’Äĩ™>ĨÛvĘ]…qûSŠ ÃÁfpJKŌ^'ÄUQ; ƒLō tfČEņą?ĩ$}&̓Ū@J˜w´!Å B˛¤÷ŗ$Sį”aîŠųRDX@â.ˆ¸ôÂ›kũ´l–ÏhĄ‹_eSLJŦwFëđƒĐ쯰CāŽmBš6a*ÆÛyëRxČaĶģ<$Ö´Ŗä¸ ĸšŪģžĒ)֐¯ä{6iU(š¸b¸tųš¨¤Ä‹š¯~ķŊËnAâō&ķŊv 9퐒 ‡Bąw05Ą+"ÅÆEh“x yC“ci4&›9šD÷áoÃĖ/yąá{×H›Az(¨ßŅĮĖ 9ŧœÖ{Cœ*˙ Žęäô*¨ĶX–Đ˜l>.ˇ Yxˆ.Ė+ææQԍ`vČB÷Ü úšpUNKÕōfäj:†N•uBgk‚$pu˛VĨ“S37ƒmH 7Ļø\đ*§īi‚ŋŠMÔąiĄ*ĖÉįLŨVų{œ**‡ŖāŖfķ ãŒútkĶ›MˆŧžT,5ųļ!&Wtžœ×ų˟ūAģB]^V$ŽņĪ&­ŠY^G5­[Ķ:ŋŠbáŪŦH´”š ›—r~]ŠĢbs0ŽŧŊ§ˇ„ûhũRę• ØáŪ“TDđ4eē„Ë&æM–õũ1ūTŋŒņˇßFKxŽ5&ģE>lk‚SĢK§ļŖĢ<ą€íĖ˙ZČŪÆ(ßōđĢÅ­ĸWŗĐ–įáßļM},ōN?ös´éCļQÄŪ:Ņļė(îá+ÉŊĩ!OųńÉŨ‡Ú.OŊ]"íKy)•b㯓ļ=ČæOO}ũHiÛs{eÂz‚x@ŠšŒ`Ÿĸ6NĻĨÅh‰tžuūÜU6ī æåëŸē!Ģ3xŅų{GáÅÆ´cZ“öŠæÕĩ÷^¨üvp˛ļŅŲ€Ŧæ”ˇĢV”a˛{ģ}ÉŨég_Čjéë¯ ‡ĘOÛzį’_ Y=EŗŽ‰ŧŌ]žLģ (/6jˇÉF^CVmĸŧįø>ÍqōŦš¨iųãCä´´ûB°`Œ ‘¤įˇÅ›Œy#‘¨8%‡ÂĻág´Ų !2?ƒ‡/ía4Ô˛ũęX'¯ĸmáˇ;ZÔ ~7ĐŽ@k§´N'÷ķF"jj•‘P¸ L í™Ũå…6M}UÍšē¤=ųljSÍhƒ>ĩ9¯Ķ ‡›JŒ ;™ōZ“žÂ"„6ž0qt^jR(\RúKģK7~od•ækHĄ Đ@,Xˆ‹:߅ M& ;™kį Éoaō´{ą$˛•6ëg$ŝdƒX įúvüÁÆ=¯"ÁŠD’95m,ûúę“ļJʝWNx“|t'šÄ éų(t‹Ė‰ĀtĄß‡GéKŧhÆ&ąŧĕxõAM“–Žg˛Û&…IyI‚įš‡Ä™’ŧ5ŪHDB×'ˆîAP5FxŗŽī„ÆÉk›ĀĢo.‹ėÜێøŪ%'Ļ`6Ėi¨IJŨXg…áZŪ@wĩZÍ%î&ŸMūG@”ä×uև;ŖĨß ˙DSd‘Ĩl V}¸§îOÍŨtáûx(w&H9¯¸öē“ĪШÔ,—sW8Mׅ‘HÍŨynręN4ĪJ(žŨÅŦRUZĻxnä' û¨‹DŽhžųXËąOŨÕQ ŨÉũmÎnjšņĖąŧüÖ2…p$Q=ČĩŌ$°Ĩt/Ĩ+ruK—IĄž Š_ŪęšÁ0-},“ôęĸ]dTŨ }ĖΰûĐ Uʉ‚zFĀĖ-×=o= ÛŦĮ|zHø?;XΊꐛũw–]zƒd/oņg”.Hö<{ŠíÁ“%?$ũXü ŒNČö[¤"Vũ€åŨOy)?e)ûņQŋŊ­eĐ˜ŧéôĨy\•Ņeģą*[zTŋ`™N_š4Ą<Ž›Ü;ŪP„›N{ŽGkÂ…tÔ$ęŽÉ–xŠĸWķ—ø¯+\š{ęV ŽéTSīBŧŲđö€l놞ŲšE@š]‡Ø8l{߲ģöc}j ë!j˛]é­ūí!ũ=+Û!AZ÷˛}č÷i“VŲÜÛ>9}RūPÎš„(%ŧ4,G™GžÉâ”ZŸ~…ĄČWūZQų–DŠ ô ō ’IËãđ^-ā'›í6 QJÄ88Đ0u1ģ§ųøN§s+*yIR$mJĪkæ^ɛéĸ"qË+="Įo!ü%ĸâk4“ÍvMĨDÖbՆŦéĪ…ĢŌ*å×:ŸĶęĘ2Úp›ēfÕĄø8Ĩ 3mˇķķĀ”DÉÜ$áKÍGãdŗ A”Ĩ‚N Ž™ødō*¨hĸļąâ‰Ũ76%™BōqyW‹ŋOŧŌCŒKÚÉ[›ÄĮˆÕ:ôš8،Ļ쐙Ā:.ŧ ÚϧũžäC‚@ëa3D)¨ŋƒāÂĩJÁuŨ‡ûAäRķ'›qÄ&‰Ŧtud”‡Ā}gd)ę€ÅjĖˊ $}]ĒŠNO'%˛h4ŪÉf´ ™ Ģøcähŧ÷F+9ę*xÖdPž%ęĢą€xĨĮadė[„ĨTÍĮ9‰[߅ aûDŽw Ąn˜%$ą‹q¤ĪYĐzx§ŋÃéĸJ˜QDˆ8ŠSW4šRŗč„D.@Hāĸ'î!—‘΋ ÆŌķ?äPAéACWM8Ųy'D:QEہ† §€đī"’áÖD[•õ§PgWîtÂ+Äj ši21ėčÂVáÛ44ȟ"-ļ!˙šĨG€hXŅâØh>ād3šwB¨ ŋ÷ū‘q¨‰‘üĪ‘Ļ2($–m"SHĐG(˙¸4Í]į [j>ādĶÕģ …ēđĐĀđd ‰ū9ŌĨņ ‰D,ē!G1 Aķá]S†Lŧī]4‰FÕD{ČŦ@éņ Cˆ_¤-5€\<IiŽđ4pWJāKCm õÄG[e4xČīÎ%ô0oB,åä8NÅRķŅdÜ IŨåH×4ēR8¸Î'´’Ēą˜ģi$zH ĨGŠX?ô„kĖ]ę#k4p˛š@”ÖMĸ”¤7WŗĘ;ДP:°ÜŌ cŨŒĻuIû´´t4h‘ˇU:n” iøæÆų RK͇ŠÕĨģ¯čđ ČŨg§ŽŪ›Ę;Đ0ņač ZZúĸrSZ9ÔŊÃT_BZöÕmO >-ąžø8ŦîŊÅÛø ų€“Íõũŧîxé._ų…0~Áüb|æ]ą—"ĩ_€ŖŠ-Âë|ãˇŽt÷Q˃æoîBŒ“ĮĘŖ;Šö}íwØ÷ƒ|¯P#ûBžW¨‘}ÕHß ˛oM:}ÆhČ÷*_æ)ķ\ȗyĘŧ”—ō`‰Ęf÷W_Ŋ}āPh9:CDđ§ ÂÍÆÚaåA/GŅi1Öå<ŗQ¤ ÎmbĨŽØÖˇ/Õ4¸­H­¯÷„ĀÄŌ_zu:߂Ŧô¨Å&¤yŌOŽ0ɯŋķ˙ŽßÚnAÂãä!€ęĻ,zē'$kføÖ&c †ŌÚöyÅVʑ§!â)ˆZCÚž3‡_i-E[Ã5dÛ䚐ÖÃŪ‚„:ŌSŨ…ėh`„°' Ģ:îBÎ÷„˜Fs÷cA"ûŠ•ÅëŒÎ=æ#‚a=JXī@” õSh7ĸRūaå;à IûÔ&–ķ28ĪpÍwÍ~0Čs9u*Ĩ̊š›ĢŠehT,h׋ô4ŽRĻÂD *^Ģ2%á‘Yķ’Ļ iskņ‹ē@¸ĩ¨¤MEDˆMŸų8qĶO5M2w5Aî]+Īĩ?P„ÄÃÜûÎĐÎŅ‘uúŪ‡))›ėBcnåī[ēÉdęĻ—Ú}¸)‰¸Cũ­ã#ƒČ‡xüĮ1âdTKßĀŗ,ū…õąœé)ėȓsŲõJęđ@‘ā# FŽYÂ$МĢqG¤§I*RČAOņ‰ˇā÷ž3ŦjIūŗ,„9Åģâ~Öë„(ˆ„9čr™âAV!=‡¤ž#%+ˆ!oĖbķŅÆ'ĪĐFuB$Â}„šėŊÆÛĘ ęW€X@r šŗ9‚Eų€šī zQÆ(#bš< Ņ€č/ü+QI„ˆ5!Čx8sU\Aŧ[ .6e¸33˛BÂÚdäŦ‡”B„án "Ã/Ëp#l1yÂ+˙¸ø˙û.@Ôd:qAķÎ+Ų† :dÚÔņIĢ=dÕBdä†ē™kÕz\…Æ—j‚t°û!=zëz\bčĸ%¤×ۆØY†a߀ŧVMīę„ČĸŠ[ŋŖ˜ēđT'KßúŪ´ ĐåŐc$žĸŪe^7B7o˙1$ŅöĢv$ dĐ@Nč @Nš˜&p2K™=¤ĢėB% %9´Įû•B3 ÚĘĮ˜ÎãAĘŽU~å}gč{SÅG4âŊ'œgRŒŽąŪ•>âXžˇô@—]XĖË%äĒ"HÍrÃ79ŽSG]ͲJ|ü †a•_h^åcW!Pũ’5LoŽ4 ÖûÎ@ãņfwĒ€û8̉YjÅįˆ´âūÖĨ&Ā¸īŖ¯ķ†–™ŠŊwéŒĻzíĘd0hGōž3Š ™ĖzRĶ–RuRIDAT6"ŊJoku]Dqovwą´–MJÖzuļ:„Ļ"æ- ŋĖԌCģŦø(Há=ȰɑĀ^Å[܈1ļ4ˆāZ>[2…¯üÃb{Û8āx÷ĢŊJŗk؎$ŋ.ũÖį/…†­îÃO  9Ũũj¯ĸš7a [ŸŗŨ¯ö*2Ø,Ÿ=ôû: âÚ Ĩė:đQȧũUJ?÷ęMyĘģĻ]ŌũŨ,Ņ3‚˜´ã÷<¯<RâĨŧ”GJ˙íīJōPy÷؏A$ũī˜­Ë”ũübž|5åņ$ĀĄ?rM‚'Í÷V?nG[Ļ×ėė)Hw^Ŗį@Ž™~ ˛^Xžž„$Ņ“õ˛ũĀōō8„úĮ‡Đå˙b }Ą˙ëŦ‰2Ōķ:´ČDæ•(Ū b‰‡pũФ—¨čŋÎđî ›wY…žŖtIŋ˙¤klí͸ȏ;7.ō2˛5ĸŒ šn÷„šåũkāojiĪĶŠû82"ôq¤~LõŊŖŊöXÎ/-IŸī‡Px”ÍšŒÎÄéčS—š…ķÎÛۑÔëWįUTuž_dņšB$f§†&_|úlÕšā> púa ­Ŧ7@Ų„ M2›#L ûöũ]il,ĻĶŅ”GBEæĐ¯LuVōō4Ib§c’EĒ„.)™6&ˇæäĨŅGxŨ¸ Ŗô([mâĮ ŪįrZ"ƒ/A`‘ŸgHä›K>4,ęŗXMá´aRú…‘L5$Š,?%ILŽF$¤J1ŋđųua€˛Ų&Lq]}úS$fÔžHä ˙‹DÜũ~Ŧ†Ō;21G@Ώ21$d§Ņ‚JWMFĨeIĸ üŽŒw¨ƒjÆëWĜ™XEō:@&Ķ2KŪd§RNšā‹(]ąĪၠĄ ]€ |ĒUɐLÖhWĮ’0W“7šŽœ°äTĒK^rę>Ū%§LļÍģV 1AjÄ(a°’zû“Ôņš×Č4$wĸ@ē›&qqG› “īi)ķ‹č$Z×[:솖ÖҜ;øõå˙¸&Čo+Qôj2ņvׄŽēŦIŠĐá蔴 ߔŪg'@Đ^,ĸKĶ"÷Å?ū™׀ŽUĪÄÛ )[y YČą+áÕÂ~KÃe›Č2#yHM54!Ĩi“ĸ„_ļ!2@ŌÂŽj ė˙ãĐČH- ÉÐÕ8yãÛQFRž=cöĢ&‘/4'ōją_ą^ÄjŽ_gáĻĸĮՋDĄØ°(;5ų…CYB5ņQFĻŖKŊ0lphCĨÎΠĶ8䯧Š™âÅydN$v)…^ęČdtáÆÃЅK›Šô–ú˙ܲ|ā܅OILs‹ĻŲ?ÄMoę„>ÂČ~@Ŋ ų°i$bR–îBG;%đ¤IgP–hV§—!Ę’˙ZDqĻ÷>kŽīŠMĮƍ\íX°0§k¯…`%¨•>!ŽŪ˛('*ëÔ xw~eĶRŪÎs´$)“˙>ŋūėŧ§&ÍĐW6įÕ7ŪčDTÔ}ķ‰+x•§> pjx…dae‡ yˆ}NSCÉĤøĩP”qķ­]ÃAØ%ž2Ķ÷F+'~å+°ķ¯&-”Ŧ;„‡Ęūj…M‡åļ`˙dŲ_|߄<Ë{Dī}äæĶŲßëčYĩŪ´“ŲߟŨģUí{ä6ū|õ Čū…˙N)ûGAų>ũ@žŋāüRūחâíļŊH§ųČVy۞“GÃ[vKĶžĮPēu…§!jlļėEvũ> ņĶŨf<’΂šl]uHķ‚ÉŗžŽIâžm”ŅëŅSkyZŌë†ŧ[ŸúŽķ<ũũ!ˆ[ē‚ ēČD CŦĶHÛS?NRXx0sâ{ 5ĖG’3‰ƒäu,…ąŦßī÷ä FčGoī۞ä!ģ#gu@z‚ ‘ū…ĪCS˜^ˆKōzė!ĶD"eLƌ’¤Ąm?^á75ņáBw “‘¨ĘL téțrH $Âų” ōo™ yi Rž"‚į!“,>l ˆ.˛áĶ‘uĘU?@ø•3Xlg uV¨øĨFđģZB|,ņŗo§ á}›ėĸxģ„˜mˆôäĨąą‡D )Ģ âŊ6K]dRE> *KI¤öƒjŽČū‡™í)˜ĖoõUDŗ –¤ÂįĨ ér´0–#P€œwHtƒČ•i…iĨFŌõzqįŌtQ‚ā­QNGî‚æļK§™íŧvéyŨgįĸ5$ũcSĩķ\Îačb/œSw GôĖ1uisĻîĸĘôæ’n3/}[+šëj ĄŅEv!4zK9×ė˜îũ]\…ŪCύyé`UBāëĘōēdUjÔÕøCÉrZCŌč:Hh´.aßv)$T}Ũa{E}—ˆŅčwÕŦtbäõōú8-@%žÄ$gtrŌz™Ôä1+Qt™kwŊ‰{BîL‰";mIēv‰O@SĸėyBĨĸŸ éRŸ<ŽRųˇBŠŽ9ĸĢ&FxÜDCt”t5üãQ?ļՅ…o…UĨÃÛ&ę R°*įūÚiPŌámķdâŒĮĘ>˛īKy)O–`<đn÷‡cDŨ\ŋ~ņļ}ėņ“ņk‚WK—ŊzŽxķåęĪÕēˇslžãŗ?„džļ‰„$Öĩ(néXÕĨ]“Õŧŧ},wOģ÷-ãum{vōī| Ë]Čļ(ˇ Ā{BļdŦOA|g Kyņ%ąÄŋO–!Ûėúȇ üË Éōø:üP›ü8­‚íSãī Žë{×$;"Q3ĄRú­ÆÕŧF‹ŦOÃ$˙$ŒÅ$^—ôؙ?Vhö + —2dĩŅ´p•Ņĸ‚ß9B0\Wų9CĖfōŋgA˛ †#S 3p1ŪÔbLâģEšŋ…Ī\Éö­”üO$„ §ĶIہ9{IžkLԃŗĀ1ށvepœÄņ,†pļĀωičœņ¤ÂąHH¤H $%S]ÄßÍŦ 9ä“rāu,‹ņ–ú4lŧ„(/wöųĩGņpá!|bq,RáĒhVĸéĮ€H9Ã3Š ™–I&Ė†ÅČ|Šč)C] ÄD&‡:$ĻsEq‹ŦĶmē“Šæxߏž°aj $]ļg}ŸG&W€ôčÄė˜đâŧ>%!Uˇ ęRē%DŒ ZláŗļP'ųˆ ^'‘ô=„õŸNyMԚāmČÜCũ™āU˛ĨIh^öQ1‘ƒ‚÷ũ5CŌd<*ãQ€$R°o>öeÍ+’ ™j%ūĮĩt#@øB]8nC2á!˙íšQ{'¯H/îqŨķ Ģ臝¯ú îrYņF°SŒîKúŗ Tæ!ĢĮeä ˙xĮgēmãÉa¨ žs˛bäĸŸÄ˙<\AęÃ&ß&f ’ų.ĖmMĮ‹V÷Š,×É@\,ģpŦĨŸŪĶ =ˆb&p~ˆŠ8 ckŲ…Û oâ"†ŗa ÂKņ㤧¸Ve,‹ŋ.Ū25ÖY|tˆ7ˆlŽšŠDųītō*@訉žĸšÄøšŨÍh‚ĐOYO ,kvN–e,Ęë’ēĐŲųņ!ô˜ Ė@Y˜Šfb ČXc0 ŦxÖ{Ã畆ŊâS‚ĐMoB*čVGÄTwáŦ,bq7Å Ëuîū š…­I•ÁpÄ͜ûPČ z:Žf]Úš!oY•ų6qsGĩwߞV–D#+A>Ž?[dv#šBéšûX1xō¤W4UG€”ōéÖæâŗ‡ĐÔ5:ŖƒtTĢģyäåâķ}{ĻyŖ:cé{~oĖD gŌôūžn1ĨŗķZtĸō”žĪŠÉÄíuåF÷†ÕĶ͕ –sÝB.œHŸōûE[|jj$ŗ‰"]Â2`€õô *ü.Ņëyių,N¨GĮGÔÅ&ÅWtNÉNOX ī0ą”ģÅzâ„~l ŖĪĖ÷Ëļ­ öJáōĖ|ŋlÛēc¯p%ĪĖ÷ģsŲŊjōĖ|ŋlÛĶi/Č3ķũ˛íŒž{Až™īw§ėyfžßŌŪ^=Xž™īwĸ÷9ęí÷ƒŧ”˙MË:¸HŖĪ(–¯jEû°mÛĄ‚=]Ö˛J˜›×jÕ>››ux-{ŽŊ˛q¯ĪfĻu­VÄWk•ė–ĶÍã.4Ë+Ŧ>=X|ĩžßˇŒFöĒÉúė&čÅ椕ۙ„“‡!Hģ›:ƒ ČÛåI%ûŲB‚Âę°wÛúídũé-ãúíCŨœ„Äš­šŦ!íŒēېÖ͟ÁÖ˙H´„øœą]‹?iÕIûsöŦŪŪ â5Ų€DÅ~VMØķjâ۟‚|¯ĸRŊ‚'^—G<@’fš˛$𕠐ŗlmjæ×pÜũFCëįúUŸÍ6I eÎ%í{ãnüjVĨ>Å.ÂŦŽmNŲK$𕗖×H99ū„TŋžäĖģĐQĨF$’9DƜÛsyéJ9mī…eŽSúžtuė.áŠđqQĨīéúÕ7´%žšmÉ/} ’++ÁÄčŠ~§$0°s9ŧ M>ÆūIn*@ €Z§ŗ*擙Un2ĮÜ$ŦHNŋuÃųLC1‰"z%r ¤účėņZGH\#ŨIzßIUDuåĶÔđrŅj; u }_Zdë…~Ø&!1mNĸá˜úČ$|DvŌ‘^°:|fâ]h˛c)懈dJGFUHŋą5N† īË 1H …ôĄ& rî“Ü"‡˜äXL ō{D0‰Œ×XČ×H1I|Ŧƒ.#Š j‰,ŌgģA^T@뉇xņ"I4YüŲø°¨1G0Zī§C^Fz?HŌ<ŽSŸ ˇO˙z_B î–SŸ2īŨ’Á…&uû@t 5ɲÆôYÖĒÉ| ųæŸúLūÛņ.4€@|Ø šõpcVÁráʁf§[ۂü՟ŠR3aBšŧB­ĮE‚%šÚfŗMĒōžĪŧ M–!ƒ?ĢâWŲdHbđ,Ë6)XOī4ü‘…—™ô‚ ˙7ANŗā§ķ(dæ!)ۆd€Đ&Ûjø÷ĸĶ âĩfƒ HwÃ{Ũ&2đŌÜZ>Žqų– =á!T“ž‡\Ū+ Ą”ŧwK–DđĶĄ†‡yžö yiŊؖÃŌ&JÂu‰~ŧ(UĻLD÷i—Õ | ĸŧy t–DW>q('Á[A‡â/†@ƗëÉKē˛ĘÔ{ë ´ūĮ’;ŨËį4V™}ōĻVÎ'đä‚cF„Öi‰ˇCŪ…& .4węēl\ŒÛ€H6cÍĨqī RĻĐ]HīØX‚žN ã ŖfjúŠĸEĄđnr:Câš Š˜Hœ’5ABšēÖÅBk@ĒÅBį•{o`č Õäņ… t ˇ×•ē,ā+SEëíę|RC-BK~ļrĄaQ{śĻFÚŧŊíËhģÆ'“;ėRipCWŨE‹D`í+šž{ÃÂËČp¸]ŧeëÕVĶ˙ĸyI“-ö §ģŧ Á‡ļxާcīFZ+BĨmČsƒ°îŲū~/1Ŋ]ö€ėÜøsƒ°>^¯šŪÎiÁDgTÆ/…đĪ¯mŸíÁō(o‚:Ęūy|›ōxF™nÉ^ÂÚäQ-Jg2‘—ō—^Ö*ŽeØ6ÅÛ˛*ęJúüö Čz`/­ŧˇģâÖĐīˆ’úTÚ°–ŋLsņí<4Û5–iâ Hë>ûŽjr Ō‘JūÉh›1q[÷ā ËāJž]Ģ›ļ҈ĢKKČļÅN­!oV2īëÖR˛Ė(†Ÿãō| ‘ÛĢΐūę!ˇj˛c%ǰR-/!VíĘ?1̚$­3v S4Ãäđ1[ûöš•Ÿč@­ [+2Lë€Į E$~>䱚ä’ECÍõew’Ôå°Ë‚!1';‹ŒOē@ģÖWHRpÆohjø5â:FĨĀwâīdŅalú7E^‘ RK(7\C‘I›Ė;7ŦåU)/ Yũ‹ēķ´p—ØúēņĩΧîĒTæoŦŨb^Á°3ÕųdĮôoĘI"úh PWĀkŨœüXʏw5ARdEÆ{žĶ~]+šË›™ģ$9ĀGķĐ pŪqķ¯ōÛ2&Y]ĘąŗI*ūΧĄÎ˛øWsq1" ēû#B‘!Âcc7™Mt’ōéÄÍįz1*mãΓŲMM˛K4›Íô7ېy‰69#›ÁE‘0…•H‚2Z”ÜÖ°ŸīĨđt8Ķ5M —äĄj>Ņ4Nđ ŦęIč%č۝6™ëاD¯IĩJécĄlCđ:ŸŽHõÕėPx*@”›BŠÍŦS‡„6ˆ¨ÁgUˆ›!ĮŠAŠä8@tL Jž qæĐCF$+/!˛ōzrÍÚíˆĻîj| a€ ‡gÚņ5Š!ÆÆ $ ž ņ*-‚¤CęČĩ!T“ÔAÂq;^X@⇗ĨUø6aÛ_ĸO#ŨlëqųP”Ņĸ‚øI—SNĖ)P1[B&[L=ßí] Äį:灘MBũŦ!3 L‹Đ…×mōDøøŊĄ†‡- AÎDąeÃ# úß ĪlčĶ_˙GĄš3Ō'Ąw1zĻ˙ž ’¨×‚ Ũ åGdĐđÃi€ˆ‘ļĮ€˜_˜Ķ˜Ī 2HE9ĶbŦÍ/„Ļŋ_dH•ũ›)âl8ųĐ, +Ą ą9hZöÉőģ¸ij"ŽĒBŅgc3‚Đܕģk7ĄŖ- /úļ%),@n ūéÚUÛījĶ"‡[‹tĐ_ fęÅ-ũų!8ᄁ˛ QZ‘z‘AœIĮˇnjĶ›šYņŲ:؁¤ãA ŨҐ˜Ōáå¤Dô7ĒԂH#ë.Ŧey/×5‡OŒü„(­VÍĖFJZ,ŽîŨ¸RWC'j~oreņÍ˜ēŦ܈Öē”éÚÄ,ŦŖ=ĩëŗä˙_ Ĩ‘nÜdTxĄE›Lņ;,‚!Ģ˙. ŌšõĻ åc‚yČ÷l{ęŪG6›¨/ėÔ¤č/€ėŽYžšû1!•oßũc‡ŦË3n,˙đüË?ģlG)ûQʓļ÷?H)~ ČKųWW ggŸŗÖįŽHĀī^7§=%¸†ģūķ›š†Ī2lJÃiOŽ2@Šn'7Ņ‚đŨ IZßΏ­Ō “ÜÕÄîU“¨ôQŠn­ų†ŧ^­ƒđĻļ[ŋuØÂĶá?{¤ņ††ģōŽKŨæ!ÚGmÕŗ ‡ōĄ—!ūÕ “Üvŋdx¯!‡Ģߐé ģĐZØ ąižQ““pėĢÍ6yÂ|cČŲŗ Ëcų$z ŌûbČ>5Ąž_EĨ¨…wpˆƒåˆ˙åȧˇ9ˆ‚ š/ŗ¤QĒāg_@a… +û \ĩĨîØķ– ųO‘‹BŨxËŖ+Vųô65"F aH͔žTY”*e§–ú8ũākwöM…û‡Jšķ­™CÖŠ2¯Uá!ōĘ[Ž”:‹>ģÂV“šŌWˆQ2Ņö[¯TŅNGÖŲČĢÔCāNÞ­šģpšMívpÖÃX*QÚķ%$XŽ”ĻĪr1.ĨMx–I%}¤~î T™ÍiㄙäîūŒäwƒl˜b<ũNžjrƒ{$ĮÁ&8îqDYM‚ø$–Š1Ũ˙ ~EŌ7AÎr)†ŗj^Ÿ€Z¨ rD;W‚ä5ØŠ˙ē Q,øÉ†6ɸI1õŸÄTA $€đŠA¨VĢ~],!Ą&|F‡äŸ#íHo;8+õ ÄdEWÄx‚ÉĖžųô6F‚¨FÎŅ$@^Šō×KČųąl|bÅEä!ņvpÖ&ŸM/@”ö“šÕ>• A ÄNĖ9’yĨŠp’ä+‚ģŠ÷WīDļDvaRļ!‰‡Č*$ēūĻô ’´&˙)@ b<„Ú$j2å´ ¯„kÕĤ„ëģ¤ IŠŲ2ÔH_ākrķĄ&l‚p@vŗˆ×RŽ!ąP“ōîë˛ ‹E˙펀°"øz)! žĮÜuĖN=īņŗ„džMĘģ´ ąī˜Ā杋-Čå?Ŧ>@|R›Čk•ø.Ú$ø6)kå!$ÜÆHÃ=đQ—XR„ĀhD?jÚÄCäc "Ô¤‡č+ŧĀH04ņZtĒųAN|MäÔ45™ę7 ŋũRKfŋځ&Čgsžœ U4DlUœ&—Ē'í3*U TëLÃ^3‹_ĶH7Í`šSZåp6“ÕNT^äŗ™—ÎŊoæŽA.hđ2¤ IŨ ĩs某Ķw čnMfüõ%Ua1 wÍŠŖNÜE•ļ!ĒJŨq Bk|~qË$g!bĢrÜēMN_Õéԍ,ĸIyĨČP#T ĸÁŌĄ9MÖC'iŪŽļ ‘ĪÆĻī•͝,GØ)BŊ7t°ĒE•÷„Å;đė×ųĖ ÄŊįŠZ=Ŋųėü™% ˛¨Ž*Ą•ŪVŖ7ųlŽ—Æ§Ą—„-4z)-ĒÉiÔõÖĪ{x“‡žFũøÕR4>Gĸ ÷yą—ōf›=÷„/)/Ĩg$žųy)/åĨŧ”—ōR^Ę˙vå˙ÛÃ'į<¤*YIENDŽB`‚leptonica-1.86.0/prog/cat.007.jpg000066400000000000000000004210071506303110300163050ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 20, Smoothing = 0 ˙ÛC(#(#!#-+(0”ÂEZw–EĨ4●Z iV sւ@ū*nĶž”í@Č?ÅIëšnßöi1ūÍH1ڍŋJƂ>´đ(ÛMëJF;â€ļ“oĩ7ŸZ\ĩqFÅŠ2Ū´š4›ĨX#<ŌīoJžâ€F=h ŋû4PŨPk2Ä5^ŧ*sPM÷…4SŠ--RĐQEĀ(ĸŠ%´”QEQERRŅ@ E-%QE0 (ĸ€ (ĸ€ (ÅRQK@ F(ĸ(ĸ@´PRŅE (ĸ€’–Š(ĸŠ(ĸŠ@RŅ@Q@&ii(ĨĸŠ(ĸŠ(ĸŠ(ĸ–€Š)h ŅEQERŅ@ E´RRŅ@ EPEP(Ĩĸ€ŠZJ)hĸ€ (ĸ€ (ĸ€ )i(ĸŠ( QK@Q@Q@¤Ĩĸ€ JZ(1F)h ĨĸŠLR▊m/jZJJ1KŠ(„QŠuĖQO¤Å7m!Zu-3mE>“͔l§âŠŒ Ļ˜ÆzTØ Š.B!ž”žPôŠ1F(¸WԜ OJ“Qp"ō=(6č{TÔQp+›eŖėĘGZąE¯ŲG­'ŲŊęŨ&(¸XĻmO­'؈̏Ŗî+ŧ’(h[ŌŽ`QŒŅpą@ĀŪ”Uũ´QpąfŌŌT”4ÔũņSš‚Oõ””´”´´´”´”RŌSĸŠ(RRŅ@ EPE´”QEQE%´”´”´S(Ĩĸ€Š( Š( “´Pb–Š(QE (ĸŠ)i)hĸŠ(ĸ–’€ (Ĩ¤EPE´”QEQERŌPE-RRŅ@Q@RĐQKERQ@RĐhĸŠ(ĸŠJZ( Š( Š( Š( Š)h¤Ĩĸ€ (ĸ€ (ĸ€ (Ĩ ĸ–“QKI@RĐQKE%RĐEPEPIKE%Q@Q@ E-”QEĸ–’€ (ŖRRŅ@ KŠ)h(Ĩĸ€ )i(ĸŠ(¤Ĩ¤ Š( ĨĸŠ(ĸŠžŌŌCj ?ÖTæ ŋ@´PKIK@ E-%1Q@RPEPKE”QEQEQEQEQE0ŠZJ(Ĩĸ€ŒRŅ@%-”RŅ@ KERRŅ@RĐQKEQE (Ĩ Š( ĸ–ŠJZJZ(ĸŠ(ĸŠ(ĸŠ(Ĩ¤ –Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ–’€ (ĸ€ (ĸ€ )h Š1K@ E´”QK@ E-RRŅ@ E-QEQEbŠ( Š( ĨĸŠ(Ĩ¤ Š(4QE”RŅ@ Ū–’–€RŅ@ EPE-”QERŌPEPEPE-”QK@ Š(ĸ€ (ĸ€ (ĸ€ŠZ(jJZCHcMBß~Ĩ5 }úSE)éI@Q@QLŠ( Š( AEPEPEPQKE%´PQKI@QLŠ( Š( Š;P(¤Ĩĸ€ (ĸ€ (Ĩ ĨĸŠ(ĸŠ(ĸŠ(ĸŠ@´Q@Q@”´QEQEQKE%-%-%-%( Š( Š( Š( ŒQK@ KEQEQEQEQIK@-P@ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)i)h(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ–€–Š((ĸ–€ŠZJ(4Q@Q@%-QEQERRŅ@ E-”RŅ@ (ĸŠ(ĸŠ((ĸ–€ŠZJ(ĸŠšŌšCHcM@ß|ÔÆĄū3@=)(4”´QERŌSĸŠ(ĸŠ(QEQEQEQEQEQEQE”RŌPGzZ)€”RŌPEb€ ZJZJZ( Š( Š( Š)h(ĸ– KE (ĸ€ (ĸ€ (ĸ€ (ĸ€Š( Š( ŠQEQEQERŌRĐEQEQEQERŌRĐEPEPEPEPEPKIE-Q@ EPE´RRŅ@RPŅEQE”RŅ@ E-%RŅ@%-%QE´”´RQEQEQERšJ)i)h( Ņ@Q@Q@RPŅE)¤4Ļ’Æ5Aüf§jƒø8Ō (ę(ĸ€ JZJ`QEQE (ĸ€ (ĸ€ (Ĩ ĸŠZJ)i(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)€RRŅ@%-QEQEQEQKE –Š(ĸŠ(Ĩ¤Ĩ ĸŠ(ĸŠZJZ(QEQERŌRĐQE-%RĐRŌQ@ EPŠZJZ))i(ĸ–’€Š( ŠZJ(ĸŠ(ĸ–€Š)h(ĸ–€–Š(ĸŠ(ĸŠ((Ĩĸ€–Š1@QŠ(Ŗĩ€–Š(ĸ’–€ (¤ –“Ŋ-QE”´PEPEPEPEPEPEPEP(ĸ€ (ĸ€ ´”QK@ EP´ĶNϚCÕûƧ5\}ã@Ĩ¤4ĸ€Š( ’–’˜Q@Q@‚Š( Š( ŠZJ(Ĩ¤ Š( Š( Š( ¤ĸŠ(ĸŠ(ĸŠ`QEQEQK@ KE%QE Š( Š( Š( ĸ’–€ J( Š)hĸŠ(ĸŠ(ĸEQE´”´QERRŅŪ€ ZJ(hĸŠ))h Š( Š( RŌQ@RĐIKGzJZ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŅEQEQEQE-%Q@Q@Q@”´QEQEQE”šĸ’€ (ĸ€%4ĶN4ĶHc ^ϧjzšqë@ Ņ@ĸŠ(¤Ĩ¤ĻEPEP ĸŠZJ)i(i)h Ĩĸ’€Š( Š( ’–’€ (ĸ€ (ĸ˜QHŠ( Š(ĻKIK@%-%´QHŠ( Š( Š( ”ŅE%P(ĸŠZ(ĸŠ(ĸŠ)i(Í-Q@”´QEQE ZJZ(ĸŠ(¤Ĩ Š( Š)h(ĸ–€ (ĸ€ (Å”´RĐQAëE-%PEPE(¤ Š)h(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ–€Š)h(ĸŠ(ĸŠ(ĸ@Q@-”QEQEQEQEQEQEQEPEP†šiƚi cT SˇCP-:”SiE0–’Š@-%SĸŠ(ĸŠ(RŌRĐE”´QE”´PEPEPE”´QE%QLŠ(¤E-%QE´”´Ā(ĸŠ@QEQEQEQE-%-%QGz(ĻJ\°j/:QÖ#LEš*¸¸ĮŪVĢpŦØ .OE7'=)Üŗ¸8æĸi§ ãŊM>ėŽŅŪĸ2˜å€ÁôĻžø§S;ĶģRRŌsFhh¤Í.hĸŒŅ@´€Ņ@ EPEPE´QEQEQF)h(Ĩ¤ RŅE”´PIKE%´”´”´”´QI@´PQKI@ii( Š Ĩ-%-”´Q@ E-%QK@ EPE-%RŅ@%-”RŌPAĨíH:ĐEPŅE€4QEQEQEQERQ@ši§i¤1÷MB*WûĻĸ^”w§S{ŌĶhĸŠ@QE0 (ĸ€EP ĸŠ î\dŨ)AږFŲaQ[˙Ž”ŽĮ냝 ôīLD¨K 'Ŋ! w¤ƒ ô¨—›’sė(͆šCEUˇÜfrXāUŽÔÂáE%- */=#ž:ņN퐐3×Ĩ0E%- JZJ(Ĩĸ€–Š(ĸŠ((Ĩĸ€–’–€ (ĸ€ (ĸ€ (ĸ€ (ĸ€Š( ĸ–ŠJ(ĨĻIéKIŠ(ŖŊŠ) ¯pŦfSģ Q\.ų/>¸Ģ¤⌊hW1NâE)´RDšũŲĻfã¨5bŒĶ¸üŲG#øP&bqåĩXÍ€wjĀRŌRĐIKEQE-Q@ IE´QERQ@ IKF(ĸŠ(4”´PIEϊ( Š( Š( Š( ĨĸŠ)(Ĩ ’–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ)(ĸ€Š( Š( ĨĸŠ))h ŠJZJZ  ĸŠ(¤Ĩĸ€ŠZ((ĸ–€ J( Š(  4Ķ1Š ŽOēj5éRI÷MFŊ)€RŠJp Š(¤ESĸŠZJZ( AIĶ“KHĀ0Áé@­y2zlûöąaĮj"XĪ˞ieŒHģM1X‰’ÜdúTa˙~9<Ö­*ā;Tb,L_={PϐšZkœ)ĀĪŠÎķīSK!:žV…ŧ¸˜œƒšV%–'n™Ļņģ ?$ ÔŲæĸM†BW¯z“Ŋ&4ApĄa8ãq慈ĮJKÃû =MJ „QíLC‹.qžiGj”›B’§,OZ–W*‘ōįš,ėx8Ŗ8Ēä큈lúRŖ„†Ę╀°§#4ĩQg`›đ6įĨYÎ@>´´wĸ‚x¤1*ŖnôņU§!§ŒUœZb’—4„âÅĸĒÉ#ųáÆjÎpŧöÄ-24 ’0;T´ (ĸŠ@QE-™´­-Q@ĸŠ(ĸŠ(ĸŠ4U{ä€™Ģu ÆAģ­?”´Qڊ(ĸŠ(ĸŠ(ĸŠ(Ĩ¤Ĩ Š)h)hĸ€ (ĸ€ (Ĩ ’–’€ ( PŅE%´Q@Q@Q@Q@Q@Phĸ’–€ ;ŅEQI@ E%-QEQEQEQEQ@ ŒQEQEĸŠ(ĸ–’€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ŠZ((ĸŠĶ 8ĶM!‘K÷ 1iōũÚbĶīNŪôá@QHŠ)i€”´Q@Q@‚ŌŅ@ E-”EuŖ´P ‚zR˛)]¤qKۃĐĶNJŸtb”P# æŒP"Ą2°ųąŠŠ)ˇ<ã§ŌPW…ö(|§Ÿz{n$†\ŠbŒQpą[\Á<Ķ@ķ6}ÜUĖړhÆ1Å;…ŠŅ,mŨ늜ȊÁ3ÉéH!@ۂķL’0Ķ#ķ‘H 鏪ŌĐ2Šæė{ YváßwĐRųn'/ŽÃųN›NIëL’Ä$˜”ž´üķL;Œ`Sn•^š¤2æķéSNũ˜Ī #uÉ>Ô¨ ¸“4ÄL˛ Œ•/jåY”`ķP˛ŦpžĶœÔ ؍Žq@‰•™”u^´¨ęųÚzT0ŒÜLi-˙労Ŧ2o1 ۞iۇ­SŒŠ+ 8?:UQŊŗĪoj,&Ÿ&=ņMŗ9‡&ŖbZ×$ķŠU*Ô0ü)o4UO1ĐĄ-ũGĨiÁAƒJÁrÎyŖ5XNû™6e‡ĨIž`>Ƌ?jCŌ— Ļ3…ęi b\+ļĖjcŌŠĮ†ŧcÛfb|ĻĮ^”ė!ŲsÅ(Á¨<ģf“ŒšKOø÷÷4X.XÍņQƌŠw6iųųhšĸ˜:S‡J@.hώ OĨ2 €‘ž(Z(ĸ€ )ÉĨ –RĐKIIœņ@ ¸RŠhŖpÎ(ÔQE´Q@fŠLRŅE”´PEPEŅ@Q@Š(ĸŠ(¤Ĩĸ€ (ĸ€ (ĸ€ JZ(ĸŠ(ĸŠ(ĸ’–€ (Ĩ ĸŠ(ĸŠ(ĸEQE´Q@ KIEQEQK@ EPEPEPE´€JJZJ(ĸŠ`<ĶM8ĶM!‘K÷iƒĨ:^ÔŅԘ8SE8PE-% Z(ĻEP ĸŠ(ĸŠ(ĸŠ( ´”´QI@CrŖ¯SST7‡÷SM ‹Ën ëŒÔ*YâiwWš°¸ŪœÕ6eɉēĶ@\…‹ÄŦ{ÔK—ŧ8' *Ueŧ Tq0äōi4ŽAÚ¸ĪŠĻ¤Ŧ_Ëpv#Ŋ$ņŗp2A¨°~Ԋ9Ú9  œŅۊ) k¸@KtĨéHåĪ—‘LBŠ(ĸ€Rũi’H#LžŊĒ11\gŪ€'¤ ƒKF)ĐĄz)¯ ģIÔT”`DÖęɰõ§DžXۜĶū”րą DâF(F™2,nŊÉČ5dŅEÂÅ`Žî¤Ą]ŊũižTväžõr—ĩ ÉÛk‚8ŤÚ/ˇ5pāõ`Š.+ÆŅ„āŸåLR éúU…†49 7ė҇/ÎM;X7ˇĨ-ž>sęißfPĂÃ=y§Cˆ’ 9ĸâ&Ēq’ķČOAVęģFé)d†ëI dY܊™^L’éK8•ˇŽ3B˙ŖČá†Cr)ˆUvkgŨڄĘÚezâœä›f$c=ЌqgéÅIŗ[nęqQĮ4†&l*K~m×efhČāœĐūaH7°įŌ„šz‹ž-›4@Ŗėë‘@őÃ)By4ą•Hž^‚ĢŸË)ęzS\4PO$Ņa–áKžĩ!8Ē­d@ qŪŦ7é Tëšy8͉čˆÎ8¤Ģ!;{~j­’áúšbÉ#<€ĮJv —M5Xn5é|¤|ĮŠĻĀäĖęĮ$wĸÁrŲäuĒq;­ÖÂsR KHĘœâŖ‡›Æ8éB@^ÍÕO9…ÆÂ)É6낇ŒQ`š,ŗyl )9Š3P4Ģį=j)n&TŒķE€šE07šqÖÕxsIę*ƒß­^ į5AãûņĄ/õ$Ô~v$ŲŪ‘äØ@ūņ¨"Ũ?cE€´ ķÍV´ I&}jHŖ(\“’i–Cåsß4˛Ŧ+M u ķJ; ŠŪ/7=č°ÍŒSIÅUģČō×=é.˛ dIÅ –ˇsF~j­tˈ„i˛É$jŽOZ,ėŌR+eõ´†!8Ēō],nTƒS˙Qģ˙^™Ћ 2ģqõŠjĨr™tŲ×=Ē͏EPĮ0%Ĩ4ÅucÁģÔô"ĀŒô¤('Š@x CûSriԃ­(´F'ôšŊšhČQš~E6!4`zPFEHc|´;Fiæ›Î(\žô^Õļ~îæĻÅĸã û2ų˛x¤–ĪŊkUŒSZ¤EPŲcŪ™-;[“×59āRŽ” Å寸ÁfĻYŖĻíëŒÕšZw o‹#4ˆ/$)Ā5wĩ'‚(¸oFU0 ÁĻŪ0(€zÕĖsJUOU‹…ˆËˆá zD SpãڜČŦĨHāĶb‰bZ@<Ö}ØÅÂ֏z¯=ˇšáƒ`ŠhU׃šeÛ‰÷ŠÚ CœzSnawUT b mjŽ0 ÛúbŦÆŒÔUuWŠw;rÆÃ“q L¤Ž@C’Ü0¸°84L<đØãm1AŧŽXõ§ŸŊPÚHY6žĸœgQ6ĖsHdÔÖ8"’IV1–ã4åè#Ĩ ŠSI@”QE-Q@Q@Q@Q@Q@Q@Q@”´QE€)(ĸ€ (ĸ€ĶM8ĶM nd4Rž~´Ŋé€áK@ĸQ@QLŠ( Š( BŌš( ¤Ā NPoŋŪ,jƒ 0*CI@ éUî#w•JŒâŦҊ`BQåaæ *ō2C˛ā9\`՜QŠ.+ĻlۓšĄ˜ŠŠŅ[†ĶLJp1ĶĨ;žwČ}é-ÆW÷52Æ ļ3Q‹}¨Bšĸâ"ÉŠ?ŧÔû•D­/| ™É $‘JĖ­Á ô —>d\RĘÎn+`b‘ÖC:ŧ $ČēëŠ|NÂfŽp)†v%Šô_ZXNųänzS"TÚūgPyj&ہŊi{Ķ7¤H;/jxÁÁ !ŽĻyąîÆášIÛl,Gj‚(|ËaÎ 9  .ÁT’iƒ.jķŨmnBŽ”ũų#íÔQ`-Ōvǐ™|9MKŒĐäžE ‹ ČĨŧÃÁÉĪĨ,(<´>œĶŪÜ4a tQyqė'4Ž”SĪŌÜcėĒ;ņJm[a@˙)9ĸhÂä­ üv‘’Ũpynõ$Ížōi­kaÁÜŊ¨0mu'Ūq#ĢĻÆÆiŦLÛQTûŅqōƜt  Ict †öĸi™dژéšd˝4cVOր'‰Ë $`Ņ,žZäôĻ[’ĐŒŅw˙ÍHb,ęĖ'ž•+JĒv“ÍE jcF#8¨á ūi98杀}áĖ4ô m•[Ļ* Ņ–ō)Ķô~LP"ĘD ŊJ Á]˜¤qķ×IŊfU Ô†K:<Š6 HŖ ëUĻy"‘0ÃĶĨ•–EEęh°xĸ̤„ą 9Ģp…<,&S’iÕR]ÃĨ9'Gm ķüé%¨ä‘SŠįŌ…”60hJ)ĄÁ<Ķŗ@ÃR”`Ž(éGZ(Č ĨíIK@h›žjŗĪ*L¨@Á4ļ(9¤´ )§­8škq@yÅ?ŠhėPI´R Ôâ”FAÍ.(ĸŠQEŖŠ(b“ĶŠ(6ķš1Í-âŠ(šCɧQ@G„PÜô įP(Ĩ( aEPEŠ(ĸŠZ)( ĸ’@ EPEPIKEQEQK@ E´”QEQE (ĸ€ (ĸ€–’Š(ĸŠ 5ēqĻ?Ü4 Žĩ*ÔkŌ¤Z`:’–’Q@QL–’Š´”´”QIŧ6g‘@ E#°E,z ƒŽáŌ€ŠMÃ8ČÍ-QI@ ¸m°ļ}*ģãėhsV™C 0ČĻ´(qĮN”ÄG6<čVš{™8Î*G„™ƒîéۏ‰ ÆGÍ×4ĀŽT)nŽw!FEf y^”É’B¨Ũƒš–Va`9î(šÜCã¸Ģ=ę´J>ĐY Ž~ĩf“)ãĘŊĪcV")oSPŨŽdˆŽ§Š°ĮddžÂ˜ […'î3ŒĶ/?Õ õ5’p ÂĨ¸äD=č°ä(ä€(RAĒō÷j‡îŠXĀ[—Q÷qH.Hą…‘Ÿ9&ŸŠ­ ËÎ@ČC­ŌĄIdUb j.cÄq˙ŗÖœ‚?1qËv BĩË,Û ūTøį&_-— ûw=…8ôâ}¨°4 KŗŸj…žkÄ”čOúc“A9žô  ŪUGÁ4čåNE@Οhû숤´9’CīŌ•†Kæ)|čjMã8Îj’¨kÖôø¸ŧu1E€”\8GÆŦvÍPXÁŊ>ÜÕú"ĨV‰ę*;ų>ĩ%Ö<†úTVÎ#´Ü{QĐ A….jšâ?3#ôĢq6øõĨ`¸üŠĨG+lBGjŽ—™NWëE‚ä—´R /ËëVnúÕy c;ēRĮ °pE0,fŠŽ'EÆ[žõ pĀ•lŠ@IEF•9aÅ*ļs@ÍĻĨ ‘@Å4qւj90ë´äPšĨĒĨ„뤒\Čĸš ˜Ü‘JÔę îi­ y= :ŨˆvŽZl M<…ųûvÛ3ÆyĨ5AŠfØ2Ū™o“tÄõī@ģPjE ĩ#)eBTdúRĻJFqQO)ˆ‚FE9æØŠÄpÔšƒQyé3OŨÆh´×pŊÆiK`fĒDáŽ_Ėü3B-#g¯z“ĨR€ˇœę9PjčéCīIKM Å!Š( uĨ  Wí§~ĩf Ļ5 %%9aČĨ‰jô§ĐB‚2)#…#9QŠUĪzpëHŧfMØų¨û2 7ŒæĻūtQpąf@ęvĩ3ėŽ˛ųŠü÷ÍZ>ÔNábˇâVuaĪZX`xšČ5cš  "†T™œ€sI r}Ą—ÕŋjZ.(åâēc´Ũ*đ< õ4q@Ą‚ Ŋ @GsP*fÄâ¯2ƒÃ Ō 6ÅŠ˜„#?•]ŒaGoj`ˇˆ6íŧÔĀPØĖÆ'Ļ*­ŠŠōÉĢr ‘ ž†Ŗ†ŲabA<Ņ}¯0&ívéR˜IæįŠķĀ]ƒ)à 6˛Ģ4­œ‚˜P)Á&§ļB–üõ5ēŋ’ė¤cŪ§ļ”ËŨŒŽ(^ŲĘų'ĩ>ؑ4€t°Å$m'æ‹XÜ4›Æ7PJūc9lātÅOfėŅŲâĸˆ›vue'=*Ė˜ōÃíI€üárjŦm$śvéV]IŒÜU[VXŅÕÎ4!°ĩâY3×4ķ)iJĻ*;O¤#š4–ą‚īŊˆ"˜‰~Đ oôę)é8vۂ FņGåíFÁ'‚iIüˇäö  ÃĨ1åU;IįڞxR×įšBŨsŠ”20Á¯I특¸äŠĒŠ ãã°ĻŠ/pÁ˛BņŠĻčΤŨķbĢB˛,rä;TQ dL†9•‚æ…54žb¨ ėÅ usōi §SGJZ´”´(ĸ€ (Ĩ ŠJ)QKŠJ(ĸŠ`-%-QE% (Ĩ ’–ŠJ)i(ĸŠ( E7ŨŠME/J0tņŌ›NQKI@QLŠ)hRRŌPKEŒ RÁ¨máh‹n įŌ§¤=h“GæF@&˜bÍļÎøŠ¨÷ĻFŨ*¤[NAäšĩŌ–ŠW;†ØŊÅErŠņ—@Ģ× Ȩ¸ūņÛéLD2ŗĸîzÔĐŲ•īDŗ:• ėiąÅ"‡=1LC\le!ōKzŌĘĖ%UÅ0Ŗ~Sɧ;v ä`PØˇŲ HŽc‰7§Ũ00î{TRĐÆŖŠÅLfU!@$õĀĄœInäzT ¤Ü°ÜAĮ# ŠÚL恋mŒķéRŽ•V܂ā8ÁVŠ0:S]Ö5Ë)Ā÷Ē׃*œõ=(×_ęƒ)"Ĩ@v¯=š¨n2°¨'<ĶąJ)Ü(R0*8ĨîĀāY$PvrIŠ"dŧmë@šD.˜(=}iÆD€4†8úŌ+äh,ĨpH¤Š5‰p§ƒLCŠh4¨ĸŖpYNÖÁĻZ;:ļãœPädsFõ¤“Jh("ØÎHÆjjoAšwŊE, )Ëfžˆ@;9¤ ģļägŌ€ĐûĐí'­*Eĩ‹1ÜOz|QZŦвļUCzRÁ#—nϧ&–‹…ŠA|™Ųˆ'Ķę[T`Ėė0ZŦvĨ\ ë0˜ûš›Ŋ'’‚O0šŸŠĨ{÷G<æ–įũBqSKn˛ļI"‰`*‚OËLD+ĩ#Į­I,Œ€…EÛ3•ųøĩ`ĩŧsyˆr¤`w¨6}Ŗs(Æ*ņPF*ēŖÂYvRsÅļŽrcaČĢhŲT0ÄÁÚG' ¨Äގ>X-!–ķMÍ.(+Í sJŊ(Å  böĻŽ8§Ss@‡gš) )Pæ‚}Š ĀšųhÎE4pÔĒy ã4íÔn‚8ĻÅ;8éK‘M) ‑@4Ō8Ĩ^” ZZ 4õ´´ÂzRhŨ¨ĻŒâ”ž(HĻHĄ”ƒÜSæƒÖ€)Ŧ3ĸB6šž|˜ņœ“ÖĨ^´´\B ZLāŅž(c=hĨõ šaFl•§Ō@ XQrŒd–É#gĄöŠēŅ@ˆ^ŲLaGči"ˇŲ&örÍSŠZ.0ëUÄ ŗ!5Xĸ"‰ã¸f#ƒHČĐNdQ¸7ZšE;…ŠæGkv%HôĻX˙Ģ ‚jŪ)1Ü .R[$š‡4CŜdæĻĸ E%- (ĸ€ (ĸ€ ZJZ@%´S¤Ĩĸ E-%-Q@Q@Q@ E´”RŌPEPj zŠœÔ˜P1ANŅN ¤ĸŠ(ĸŠ`´”P!i)h Š( ævHÉUɨėōb$÷5$ĮšöĻZqn´úQ.‰ųϟ,†8ōĢ“Q\0ŨœũŪ*pš Ié@ˆ!šg}Ĩ9õĢ=ĒÎųY‡AÅLzPÁ2¨É8ÕžëQ\āBŪâĸÚĒ2đ‹n–šš*3×ėRÅ&䁚^´” FEcķ(4‚$ )ô Dđ+Ų ûRKč‚)ĀŠ7ŽvįšUubpsŠ`Vh$ĘFW¯4éü̓iéÖŦSYwŒ.垸¨.øōÎ2Ģ bķÔf€*Ī&䏎 w§ģšŒgĒ1E‚å„`Č0x§T1ÅEˆ0Ļ^ķ>†Éˇ Ü`ԐɿϪ‚”löäS ųnœp(°Ī^õG–Ŗf˜Ĩ§ų#žh›ØĀ~šĄ ,Gū­s×úŦ$tdš4Ŧ˛*.2h°‘E@ŗ6X7UĨIˇ`#= j3P›””cŠu&y Į-:šŊhęiÍ:Žô m/jZ1@†ƒÅę(§­éqKŽh€sKF0h4˜¤īŠZP(ŪE(äŌ‘šLb€ֆéKۃ@:QH)z(éE´”QK@¤´QE%-”PŅEQŠ( Š( ĸŠ(¤ĸŠZ(ĸ€–Š)RZJ)hÅQERRŌPEPEŠ W—ī °jŧŸ|P1>˜:ĶÅQE-”´Ā(ĸŠ(ĸŠQۊ†å]ĸ*ƒ$Ō@…a ÜvŠÍ&)Ü wėU IÉŠ˜ųPœ*cČéM*Jˇ ŅqÚ˙ĒÉîsSö¤U ĀĻ€ ē8„æŖ8Ž(ߨĪJ’æ7‘­6DsnĢŽAĻ’†`ģ[Ŋ$R-É9ÚzĶd:–RW)°0aÁjš9š FF)ĢqšˆØF:Ķ`_.fPr¸ĪŌ’Ûd§Ū‹0•v'åĨYA•=*Ē2y8`H-Æ)Ņ’g| qŌ•€°ĸ2ۆ3PC>\zŌCūžLS­ūüŸZ`X¤ek–hŲ6ąäã8č* žeˆ{Ķä›c„ šŠˆ–Šî1 `0})VlÛon ,&Îh¨mäŪ™5*÷ RP1J}Š NÔtRŠc QE1ĸBrTsBBˆQÁę)ø¤Ī4ˆ[(~íôĄā%÷+ã<SPHh¸ HÄjS.Ŗy( ōiÔ+"ԁŌĢĀÎ唍Õs4}h¸âcnXŧb‹†cģښ@#‘E§#.čųīK(˙KRŲÁU’Šy*2(’5Ã4î+C`õā“LŒÎßw~S9ÁĨš&,¯Uĸā2(Ų%cŒĐTq`Ęe\ÎŦbRŽHÃvÅDUätĖdy4pUG•ŒĖ›öãĨZaĮj”›dFܐ)!’<ÅeGYBɎ})’Ą_%n´ëžX€įœņLDž~Ö Œąôĸ9qĘõgí§>•(E_0ô$P¤ČČX ֕fGjŧ-ŗčM2C,ĀÍ+ š÷ũZz˜H1ž¨o9}iˇMĖh:wĻ"ŌJ­œŌ‰TœgšĒ¨Ūr˛Ą Žj#Í`䃨԰îiČÍ.EB‡¯Ōž¤ÉČ⨉ĻÃõq¸ZĄm$ûĶ@ÉŌä‰<š@΍ĢUFDķnhéÔՉ&Øûr@ÉĄ=%B& qĐSí9ČÅ+ÉĻ”Eb2)b`čw¨^tØģē5H]Q2˜ŅQÅ pAÅ?4†-ĐsM’Qå¨J*­¤ÆIžŠķ܈°1’zP"z*Ą¸’<ÁôĢJ۔ZZTšg[ĨEI„`īUå1š>™Áû“šb÷4?œĄÂrzPYUđĖjŋ×Ä=鷄3Æ\Ņ`,†¸æ’oõ/ô¨ŖˆĮ!lä’äâúP,ĮņÍVY<›EnũІGM‡~I?0ĸĀ\^Ūĩi *  œŌŒšc69ô¨ŖēVÁ  RuéM2/—ŋašpéE4(Q… \qKԊ@AöeĪ pzŠ|ą qˇĄŠMЁ\ĀÆDbų+QO ­(e\īW^hĸáap u¨¯`#“č*qԊŖ"ŗZ.✲Ŗ…PšnüUŋ`( đĸáb„€>eCĩ‡Zģ&%'¸¤6ņŧÔ qÅ ‚D2}Ē+ <Ļ<`“SO“éUí#- Ãc=Šô ?čōg§4ļĐ+Ä ëš• +—įN‚7Š=­ŠWۋÏJF?Ŋe|‚z‘"“í Ė8Å5–FMŒ„žxjtŦL‰$9"…&9Ėy$Æh‘ J’vûېā|Ē(Ļi<揃Š– Ë9€zUt!ޤ>´č}ĸFí@5ËdáxaOëTd>lmō“Č̃–JM’>Ò@¨.f’ķ>bÄŅy÷TÅ0-EōÄŖĐRāAvå P:š<{TûŌ°Ëå€5BVoĩ…W8>õtŽõBCūšúSBdĪ$–ō(fܧ֭ƒ‘šĢ•ZŅ@Ė@Í[ČÆsĮ­'r*ĒÖ-“Ō™.Q$ zķE€´Đî˜Iģ§j’ĒÆX^2î$cŊ +ŧŒšh°Ŋ¨j &o0GzXåfvGrŅ`&Ŗ“P •,TŠÜ; ’9–P@×4 ĸĸûD{öîįĨK֐ČĻS$LŖŠ¨á"Ū=˛0Ŧg=*­éVˆmÁ9Ļ„YS‘x4Ŋé"\FŖÚ—”€J:ĶǤŗČ.<´ņĻžÔĸĄYŋyå¸ÃTô͋œí‚$\íP3×üPiؐ`ķJ˜ cʨBąäԃĨ0!ž*đpĀäTrC+ÆT{UĒZ.Yĸya8íIHÎŖau&­‘IEÂÂk=˛.Ãm8­hôŖJÎ@ĒEŲä3• ĢšcBۊÔNĶ>KëIfgĪ'5pD€’ëI nQ‚h¸X¯zA¯Ŋ-ŌnUÚ~aÚ¤–Õe}ň4=š,\†‹ˆe¤™V 0GZ˜°,9ĻÅ–NIęj8-Ū9ŲÉ⁖ZŖ9ÍęÕūĩFdĩp(BcīFc'<Ķ]<¸C);€ÍIu4@"šlĒL!BļãĮJ`X†O2%oZ–Ģ€m­zdEŧÆhÉ#Rc,SOŪĒĐŨ7Ë>ĩké’dÆvœĨc“3“Öގ N;U;^CMˇÛ‚ŒgĻË"ŧ |ŲŠn¤*DxuA4 $N”ЉäV0/ëQLG–ãˇj˜JB܊Ž~tiGU4 &WdąÉ늎Ũ@K “Ū§Bˇ6§wŊCe‘XčÖRœ2Ō­æ¨éë–sč*é4˜ĐėÕy.~ÔQĮRjÆ8Ŧųámī€pOj2eē"M’3ЊĩœšËJųiՇZҌmAž´4vqÅ/zĢ=Į“'+‘M7AHb§š,-÷ ōi‘¸•C`Šwz@(į&Ŗ¯ŗ<Ԁüš¨q“zã4bŌ†jJBqA8惂*9˜Ŧdú ”Ÿ—ŠnOjĢų!/æúTļr™P†ę)Ø ˆŠsJi¸ųŠú(Å -%´QE (ĸ€ (ÍQE†QK@%-)(ĸ…Q@Q@´”QEÖĒŌŦĢ&ĢÉū˛ˆ)â™Ūž)ˆZ))i )i)hĸŠ)ˆ(ĸŠ(īER_šųĨKq&Ü&9=éŋgÄŪ`sS#ÛŊ1mXn“Ōš Xœ)}jhĸ(ŒSPØFc rO4ÄOkÄ Sj.Å íKØŌ_­÷ĐRsŲ^ÄRFsvÔ§/vHčĸ˜‹ ¨\ļ~nôŲĘų,23ŠŠægŠŲ7Ÿŧi š%&Õ@<‘Ö¤PB€Nj ŖˇB§Š{ĘWbŧÔ/j3P Ž×d¯\QĘ {Ņ`š8揭—ëHbQJxϜu iŦČÉāv§uÎ=(h8=yŖš Œ*5†5}ʸ5'AE0!6ĘI;ŽQS(: LԊdíû™>•^ØIörššä1…‚ōMĘV`úPFĶ)ôĸÛY›ŪŸödV8$fˆí„ađÄîõĻ LRí‘r¤đj˙Qš­äHÁQØm^•dp1I‚*Ū9܈:1Ļ]ÆĒ‰´cššæ#&×_ŧ§ĨCr%}„ĄĀëL nd1Ēǜ4Čܤâ=ہĸāōåáO"¤ŠT–\"ņޏ  ũę‹ôūŋį{­P ûÛĨ$ t Ëvģ9ŠŠžā+•ÚN:âĻ(ČĒ´ĨŌBˆ8ã4n1v'å¤Ä@ųĮ5_ņāsũĶQ[Ā$ˆ×4X L"yėn*LÔâĒ2ˇ§Ō’åÂΉ3°ŽíE€ģ֖Ŗ‡}ęJCôĒ<‹qå [Ē=uķéM ’Ũ<‘e<ÕaF@ÍVÔ?Õ§~jE˜ŽŽÜô žSRŲ5(9¨ŪeG Ãīt§I*FãÉč) —9dāœVcTnK<@d`÷ĢãĨ6ER„fNZōāF…GŪ>”˜œRį5˜P“’id¸Úûw50&ĨÅCĀwØÃkzTŦ@úR`yGĘ0*iÚg`@ĀīV(Š„}¨0\É>ĩj IUå*AS¯j`6E,„ŒÔ6ÖŪCģ ûUœRW˜<Ė08aԘé4Ģą€ŋ=jPû¤ÚJ“ĩ; nŒ*õŠ„Ã+Gå„ Sš¸(Í y-ĖkéU‘LhȡŊģžhĸāAk †3ž§­1.¸1‘VŠžJoß´f‹€ūĸĄ–e„s×°ŠŗPKh“>ōM$fhŽdŨ™*ō '¸ĒĮONĄZQĩ@ĻÁŨEž#ŽĸĒ[æYOđ֗Z‚Ū)ŲsBabQōŽ“šmĀc lëQŲ‰dIž´€œđĨR´ޟ°ĢÎHRTdöĒVŠ"\32ēš#n7ÅTāw§n1Ū„•Å4[Âå ›‰žŪT☉Ūácpã­:GF…°r(khää¯&™-¸Xc…!”ãibRČÃV느vįŪ–Oŗmrb %Œ{Cˇđ“Å1ˆĻ˙Gö˜Ėž_9ЂБ‹E/bÄĨ¤ÅZ)i)€QKI@Q@QH–’Š-Q@„ĸŠZRQ@-%ĐE´”QŠ(ĻĢŋúÃV WžhCŊ”Ô¸&=ÛIQŪ‹”Ũ ķUb¸Ų ‰‡=4„_ŽE‘w)ȧæĒZÆŅły5dŒRhbāRöĻ“…§/NhQKšNԀJ)sH„œĶÔ¸Ļ‚IÅ(ë@ ֓Ŋ-écŠN3ȧRS˜â–Ša…䨧ĀéN¤4€[ ›ĖīSŌŅ@(ĸ–€ŠZJ)qIKšJZ( 4PM€(ĨPRŅEQE (ĸ€ ;ŅEEĸ€Ô´Q@Q@ 5Y˙Ö˛jŗŦ4!‡zxĻw§Šb Z(¤1h¤Ĩ Š(Ļ ĸŠ( ÷ĸšä„$ š¯j2ōÜĶŲK;ađGjm `x “H?tō1É'ĨPˆä”Ŋ¨Éįv >číŽ1î)žS ^G;ŗNœ‰$‰AĪzZāĐ;R7Ũ?JE @âSīÁŠ­\ŧ\ōAÅCjÆûH5$Š`ˇų=i˛QcT ŌG–s•ÆhČ ŗąēR°î,’˛N¨!ĒRBOAPIÍâ{ |åJ”ŨŒõ Ŗ‡PÃĨ:‘vĒ tģ”Œ‚¤v)}ÄdĶ…âŠ(4Ŋi)€`z O-3Ŗ5JŪyÆ= N:Đ_g9Û×Ū•bHƒīR FR(­˛G ã'Š•­˙qåĄį9Ĩˇ‰ĸ7ŽEMEĐĘdV `qD€ųĀœĢu]ÃGpd X0íڝĀKwO0 Rš5žËš T–čÆgŒÚŦ éE§nwË)é!U10sŒjāURpĻ5ŧlrGåEÅa" ĒĄGķ|šôĢ@ātĻÉrŦ:Hey‡úbũ) -sŒd(éOkf2WįŪ$.Ž$N["˜„]]ō0§ĨXlÍG ɃæqžÕ#ŒFi ĨjĘå1Ÿz–Ø)‘Éûũę+,Ŧ­yĨ‹åžl÷Ļ"GvyŠ'īNŽFfdoŧžę%.›'ô4ąÜJũ¨Ņ\ąÜ6dŽ´īĩŠ xëQÚŦ­I¤Üæ€, MũŠčø<ôÍUn,—dĶü™Gʀ(°r¤ )šÃ`Ō¸jFExÄ[’¤Šl 5§ÎIČĨŧâÔĶbâĐĶú,՞xĪbF"3ˇ¨ĒVáÄ%úœzÔ¯>` :÷ĸÃ&…™ĸ† EtdOH§$Ā@đ1Q\ČÍ˘Í âvxÕēfĨĮ C'Ō§íC&)qHN9ĄNFi ZjœšŠæsŖšŽÅ‰G'’M;ˇŪU.fo1cSŒõ4æ-nČwS֋kŠdq„fn¤Ķ˛3U`•Ūåԟ•hŨ4•<Se ų@$Õa1Y‘@ƀ.€`TR@ˇ)ÚŪĸ¤ę8ĨÅ !Šßkīf,ŪĻĻ#=hĻŦ¨ĖTGQ@ÅnąJ\æŸ2ŗĄU8&ži{Đk[g…ŽH ԗQ–„„5MŌ–‹…ŠöĢ"E‰3š{ü¨N úT‡Š;P+#–R3D/‹š”€}ĒõJwģ|ÍØôŠe´YļæôĢ!TāQŪ‹NéLĀ)'ž´d{`‹ÍZ‘D*Ũ*ná6‰_LQp"ą,ŅOCVCn;r ĸ8„i´TÛBȄOÖ+=§Ģ<Í"";`îíR$Íæu‘‘QJA\Rˇ7Ëė($ŌČ rE<ƊÉāÕhãß$™ÆsŪ:í6į<Đ2Ā‘0Úq5Rd AzîëK9-2GÎ;ûŌ°ĄŖZ-Ęī€BcŒĶ`%ØbC츁ĸÁrįփIŪĸžo-•Te›Ĩ!“ŠCQ$Ŧ$ō娪Īw—´įĻ"SIŠbLŽå0C “§†ôĸ›æ }ģ€oJvāOP īF}ip);ĐŅHŽŦH$R㊅ÛF}iE-FņĢ™sJ#@›@âŸMvؙÆqØP"%ĩE Ŋ4ZUrŠ!™f€F=jNôĀ€[#Ë-ŸCH°JYC0Úĩb”QpąRæZEd< ąŒ€)ßZZÅKėų;@&…Á˛ú ĩÁëFL Qp)[ČĢnA8#5 ļŧô&¯”ByQųRIHģXqEÂÅ9T,`ņ‘S^-@īÚĻōSËŲÚŖ{@ˍįņĸā*0§n*~ÂĢ›w2ÉíOˇŽDƒkŸ›ĩ Ĩ"ũÚŖ˜.ö1'Ö´â€+ÍūĻLúS,@äûĶî”ų$('>”–@ˆJ° ƒO ܁#¨7jjHŪj‰ãĨI*î•ĪŨõĨšÛ3"ĮËw#ĩ&•ƒUām’*ËrjIa•Ÿ üž•XûW5 7*ہ\ō*¤ŠÉ žOĢėûsœ`UV‘$“{žAB\€‘nëŠ~~jŠ'ÜĒĮŠ‘HcsH`_ ĪJËĻ2iė=*ĨŸGΝJ,ŨŲ8ĨV ŸZĄ—šuUE>ՊÜē–ʏZ,/öĒÂg’fDĀ ÜÔĢ4npŦ ôĒ.Íopˇ õ$¨į&cŒ0ŠķT-ˆ’v—?7Ĩ^^h`…ČĨÍ1zŌ÷4€\Ō0Í äšë@ōH§SGZ\ķ@ (Å)ÍŠ@h¤ŌGQH8˜…îsMCš\ĐۃÅ(Ļĩt ĶIãŠ9 C¨Ĩ4” Áĸ›üT­ÅŠCԌШ¤4ÕnphôQIHbŅEÄ-Q@ KIK@ E-”´Q@Q@QHŒQERŌPEPIKEŠZ(ŌĢ7ß5eēUc÷ xĻ }1 ERRŌQLĸŠ(QETW?ꊖ ŧp°íĪ&„ tËô¨2+IÆx51%mrŊvÔ36jīT„X˜ūåČôĻZÜ Yr-[éN€búRJ†į+`H"ύ.Î ëÔЀg˜ņƒ3d7QéVG##ĨU!ŠF¯ōĄīVA‚yΆD—tŦ€}Ūõ%CU,ÁšzJŦp4úJ@ęsķ)zŌ ąˇš˛(Î FŪkHāxϤĪ8Ļ!ÄRr3HΞ2įĩ$NdŒ1 ĸF •ß!īÍJzTBu2y|æ€ŪYnzûŌI’5]Ũ9ŠģQŽ(ŧĐģ˛`Œ-,ČÂE•HęOKEÂÅ}ō˛3Į ¨ĀWž7E ˙v’‹€j´ÃQˇjĩHņ̌0ÍA'Īw9¤^o˜ú š8R?ē9=é$ˇ&ė}¨¸Âw]ČÃŌŦ’j­ŧšK†āöŠņC•Ú†ž0:šs Šę1B9§M ­:ē€@éAIMŌČSÅ1 ÅĨš1†* RÄė$xŗČčM0ūęčģĩ‡ZX2÷KÎ1@Úšuæ§ķØČʀŊj;I3ŠûÅēQō†$6h0L>gáŠXfķŠR¤TMmī)-™–c€X´€ļj#:dŽsŠt¤ˆØJ‚Đŗ{į4$X‘ĪŊYÜB*ĩũËf™l€¤š'4tŠQ×Vȟ)˛r3V ĀĪaJĀ;­HK,ĄÚ6Ú ­Hn… ;qŠvĮz:šŽ˛ēČ@>n„RĩČIJ9  ):Ô"ę>AČ#৤¨ęYORÕxn<ŲY1Āčjr@ę@ bŠG P…8>´´™ Ą€DKšz˜ëHpTûÕ;B|éI֘‹Ŋ ) B20FE"ĒŠāô§Ô p7Ē[H DÔÁoŪÍëIË.vöëRĐ2­Ōb7gJ…´øĪŨ$UēZwˆZôo(Ũi-a1GĩŽjz)Ē|ļÚ2jŊœ.›ˇŠvŒqEÂÆ|(ë3–FįŌ‹u?jmĘp´(Å;…ŠâÖ4;ÔsU­A28~šīZ8¨¤˛G4\,SßŨīVd™b“ y5$q$uqQÍlŗHž”\,LŖŋ­ĨJ)(QNĸ€4w§E7šCNÅ /CJ8ėqIŠojQŌŽ)1Æ(ą÷§ŌÅ) bR59Ą†hd͇Z 灤éNÅ! c?Ž”ōØĨÛÎhÁŨš)û´‹N=)‰œšqĻ/-N4ÅáúĐ”´”´†´‚–˜‚Š( Š( Š( –Š()hĸ€ JZJ@QE-RPEPEP04QE0ÕcÔՓU¨ }4S…1 E%-!…QLĸŠ(QES]ūđE&Đâ›å&A#Ĩ>ŒP%O22 ã4FĨ# NqOĸ€ ­zG”š5f“õĄĢ9˙GÔŗ‚e‡ĶÖŦ2+ Å5ĸV@ŧ€:S¸ ō°îKōÃØ Q׿ƒNû8FâX÷4čĸe}ÎŲ8Ā bÅ)#Ŋ!f@äԘåDt9=h0˛ G4Ä!y#D;˛[ĩ>9Måš#5Ž D0xëÅ97¤į#ũû÷.܅ëV#`č ÕXŗH ɿρU#Ú§#4˜"Fe\n8ÍVl5īáißzđįĸŽ)¸íˆëŠYVÆE-R‘ß ņĀœŌ2Û¨lŽyõĸÁræ)*|ĮvåíOyDhXŽ”€ŒÉ œFŧúՊޞ…‘w¯ßčE=§Û0iÉči0¤f ¤žÔŝLĻ<Ķg(ęWw×$r+ŽWĨ8Ô[•cH ;ԛ†ŪŖš@æƒÖ…Å @ii§@ ŒŌā D9á@ˆĐ6āŖw­#ŒwsíRwĨ4ĀŦĒˡĻ)#„FŞYsRö¤Ī8Ļã*A¨ĒQ}ĒzȤ2 hž$(ØĮcQ"ËēÎãÖŽŌgĩ;ˆ­fPĢ)Ôė7!ĸœiVŲÖ$d~?6sšá|asVš5c’ ŸĨ+"ēí#Š.{šhTôƒ~=…O)ČûĶ °ķ|ĀĮ4î"4P׎O8ĸØ~öQü9§,#ŗĢŒˇ\ŌÛĀņ—,AŨé@ ´ æĘĀw☲ fžJŽ-ŧo2‘Á=i€5ŧōV9  mŲ8” ĀYЂZŽ Ŗ%Ã!éÚĄ 7F3ČÅ:ŅAš”ãĄâ‹xu¤v¤ž‚Ģĩâ#U¸öĸIÖky dāQ`ÚF¸/¸üŊ* "¸‚JyĻX°3`õŠÅÔf@˜;ŊÅ%'h'ŌĢÚÉ,ŦĖ˙wĩ:IΜ!Ldõ&’˛ĪrúP2Îi3Ucēy7™ÁŠ!œJ¤ãëJÁrzcļÕ-éPũĢ9*„¨īO2Ą‡nôXÁ1œ1Æ1SPDčČL})ŅÍ8ŨÍOIKM&ĮSKsÅ#œ/5›nĨîH,pzÕ$#TŅ@¨'Ëe})=4° ¨ŽâüŽ~_JIYÖõWwôĸĀ^cbœOKM^8Ĩn”gž´ĩ^yV%R{ÔČ۔uÍß6)ô´R ¤ö¤CšZ`%´Pi:RŅ@ IĩsžôęC@ĸŠ-%/4QEQEQE-Š( ŠJZ(ĸŠ))h¤QE-%(¤ĸ€Ō ZJQEFŨ*ŊXn•^Š)E § bŠ(¤0ĸŠ)€´RQ@…ĸŠ(ĸŠ(ĸŠJ(¤ŒĐŅFi3@5eV ę)Ā*4hËŗ/Ūī@‰MŠšÂÛŠ%!ũ)M&hmôĐÁ@4îÔ FđŠ9ÉڞĒ`tĻ$ČîQO"¤í@ˆd‰ˇ‡B÷¨ŌDäļ=ę×j)Ü ÁbpnAôĨ—‚ģĮĘG5bŽ´\,Wĩ €v“Å6ņI}3Í[íAPÃqEÂÅo.2Q˜’{QyōŽi!Ũö)3S›QŅ\…ô§´ ۘāw Qū†GsLļȹʘ?Âjdĩa pÎr (†I$S&ONô€œ.:šVę*ĩâĘJyyĢ(ÅŨ֐ÆMÂæ¨ØŪŗV„ .oßéM~uĩ-š˙M’šyÔ)ˆą4YPrĮĩ*L”# *¸īˆ'qR¤*%f KR°‚ )#n7,7zT¸âĘō2 øëŪĻÜĒČR홪äš[Å+ŽųëL Į˜EKÅf΁HÎî9̆tŽ5Ūq‘C@™?JŽåļÛąqMK˜Ũ‚ĢsMēųÔFSÍ$X)ō‹1ęjÕRŗ}ÎÃ?(āUÜĐĀ(Ŗ4×qcÅ;ĩXŨĄŠ§ĄĢîPGzZ;Đ=č bŠ(ĸŠ(ĸŠ(ĸ–Š(ĸŠ(ĸŠ(ĸŠ( QHĸ–ŠJ)sEP( 4QEQE#n†ĢöĢĐÔ 8SE: EP0ĸŠ)€QKE (ĸ€ JZB@†Ri27žM/€Ō–—@„Ŗĩ.ÚBUx~i&>õ18`=jq‘/šĒ@FŠ>Čįߊ‘Ų’Ũ9ÆzŸJaIV\ķ֞äT|¤u Cƒ”€ŗŸĨ5§t šÍĶSö`ßĨK9Ąր$ķ‚•RZœ’Ģ9QÔT3s?Zr׎}+ tQ3IŒÕ0 ô9¨ß3mŊ@˜K„T'ũčÜ ˜į9ĨĒ„ˇÛB䁊tNßht-(°\ŗHÄ"–'R{ÔctYįŠÁ/›ėb¤^ĖâÜT>lŽėÃ8SĐQ`š~j¤ŗL%¤r3ŒU˜ķåÃ Ū‹ĮņKM^”¤ŌšŖ­ Ĩ QŠĢs3,€FNīU¤`ĘīLCJ!ūųRyŸāķŌ‘zs@ą")UPëQ­ĒŠûĮnsŠœŌ+äŌŧÖåĻĮjAnâā9`jĪZJw ĘK†CíŨĨXŠ3j ä –Š.*21š%+Ž)ļČĀĘ ‘ššõĨ\,Rĩa2šÁ›7ĖŅ>0ģĒéō ĐŅĢ&Ö\IS!ãœqQŲņ™õ9Ģ‘ōŖķĻU$•bšę)Ü!č’įĻM3…ąĻ­<‡ËC´TRZš‰QHã֋‰‘Λ`ûŪ´ë‘ˆƒgœöĨš)Qv—¸4ˇƒl+ęM6@ŅĒsŪ–íˇB‡ÔŌJZH‘œņEØØ‘Ļ:PîâD(iķšP‡ģT7mōÆ3Ôԓ*Č<ōG,231HÅ9Ü+ œT…ˇ4nsˇŊ-ā>Y#ĩ!‡ÚԜķZL ėzUe‰žÔĀM¸\,(}iØEĄ8-€EJI šĪ”xÂõÍhPg­&†Sž8Ue$j<§û8a!Î:So‰Āô§Ä˛Œ–ĘԟAbr"]ß{ũĀņU¯X¤hTā“I”J r¸Í+ ļĨĒ ,ĘKœĨY’R° gŠVF4(qU~ŌZ=Û;š™d å8ėÔUQrĄ‡'¸Ģ "*îcHQŠjHŽ2§4ˆ<ĐûS#‘$bäŠI$*ÍVąá¤>Ļ€ģHIͰqHO8¤ŗKHHÅņÅ-#aFáHí„,M(č D!@4Ëy ŠK. =ēâ€bEbÁF}iŸg~ü|Ūĩ/E¨bevQÔPĨd!˛U‡qK".œ“Ôšx88Ĩ'TZ¸ķwqœâ­bŽŖ u4\ “Á4’‡ĀĶ&{Õŧg­WŽh¸ ėj+Ž-šĻšņ,‹†Î(;|})ZŲY÷dŒõŊ>8–5ÚŊ=ęLPs û@pÕb“4zĐr‚ņ•VÚ}sPŠ1Î_p#žzRÜŖŸ)*8ύč0BĒFi€íī,Æ8Ûzš|ģVę•x†âBüĐŌۂe–NĮĨ‡Y AÁÁ÷ĄfũÁd^E2؁§=Í$\Z3zæ€g+8*ų'Ö­Uí0-ÅOü4˜ČnĨeBONM@ˆüi/-Ö?g\zQĐų­,åļ…§E3y­ōGz­ 1ĘZ3–îIjĘîÎ~ųëíNÂ,Ėûaf eĢ3BĪ&™p sֈ$-8QĀĨa33JcA#ŽibŸs20ÃĩVBÖĶ—0=iöøyš\õíE‚åÜpiÜãšnisÅ!ˆĖrN)ĄûŦ?:dĖ mŸJĢh€ÄäŽsÅ;ŊšZĢe+6õcœTûū`)ūõFú@YPv95qœ/ZkF’rĀMčˆ(Ĩ})H¨ÍE˜” T1SįšL4hŨT{TrDŽĀŒtÅOFZŽ8’ v÷§˛†B§ĄĨ3'PajÃåķĖôĨžØČčTļŦŒi  fˇw‘c Ö­cF8Ĩ  7ČͅT'šÅOn B ‚1ëSŅNāRŋ8T^zæĨŨļë×mX Ŗ4˜Ž(¸XĖ”–YŸ$žž•fC‹"AęĸŦyãE!ōŠ.+€ÆžGN)•Ķ×ęÉĩO/`,֕mBbÉ ú͏ˆ„–ČšĮĻɖēHĀČQųԂ ļ„ÜģįK4 $Y"ûĀb Š9VvmģTöŠ%%a/Ü XVRÅĨĀĪ |ą #+@ʑ"´›–<æ’Õ‚Fė{NU’8L^Y$t4–¨Lo)Ķ‘œ4…Îėđ*I'“ėë'CI QŖuų‡N:ĶŽÁû b0xâ€͔Ä% cŌ•îHŒ: !+ö.lb˜b+c–ëŠ|“7ŲÖMŊzՁ [pįĻ3Ue8°Qę*F˙áJĀL“+Cæ”ŝ]đ3šŠēĮnqŸZŽu¸T”r:,;—ČāÕ+,‰OŊ^=*ĄÄŗCBŅp’9š\ŽEQˆ™LŒAjšĐHą°pzņš,˛‘ S ”,ÛũsWĘ ktĒŌD°ƒ#1'P€-gĖl’´Ö—{ŒĘW=QŦĖ9nԆÔÍ1[Ü1”Äį$wĢyâŗm”ŊË8û šĐŠLhŠåÂG“ųS-§ÜūY\†ųœƒU¤1Ēy‡Ū€YÄr*c$ÔõUDmsŊ' 54’ĸŦpM FXšvpÕĖ›°X{Rŗ“š“5îĻÜĀ)ū†€œ E90â„é@ĸŠ(i)hÅQ@ ĨĸŠJZ( Š(¤KIE0 1E€(ĨPQEQEQE! Š( dRũÃPvŠåû† Ļ1E:š)Ԅ-”´ (ĸŽÔÄ-%(ĸ€ RŌRĐœuĒą,ŸigeĀ=ęŨ&G@—cŽØ¤ˆŌLAôlIQÅ;ŠÅ¸ ᘂŽ@ÅŖ OZV…NJr U(lŗƒTėķžLõ̇Ĩ@Qĸ‘™WpoJ2bØãŊU‰Ų-ˎÍO÷;˛‘‘šûH 昋2HꋰrÔąH\0aķ)ÅFîÂDPÁ@iļ§ũaÎyë@ÂŲÖ5äđMY,Ē2XT”ĸļzĶäæHTũMYWWû¤uVŽđV*Í t§”ÜņP<īĄJ‚ĨY¨ÍöŸ(Ž´å—÷›X`š…˜ ŨĮ˛Đ€ĩLY‘É?/ZT‘\:´ĐҞąL~čäYTæŸUlqåš>ĩkņ ƒīF)O<Ō”QœPx @Ę€E PŖ`R“ÅC,ūS(+ÁĻŧˆ÷ˇ­(F1Ō¤ĪÖ`¤@'Ĩ #†ÜE“ģ=Ē\w ži{P{´y# ‹žsO‰H…U¸ T´iN˛W{÷ĸé™ˊļŅĢũå•TaF(¸XŦŅH7š|Ķ,Á9⎐ÁĻ**œ(QpąZØ$“xĪ=é ]—NŨe Rr2Ŧ{ŠXâXú~t\,)‘7ČĪĨ/zŽöĨ§âŦ@܏Ũž{U{0L-ƒŽjĖŅ´‘Ŋi–°ŧHCúĶč Ž!'ЍNč™2û‹EOrŒa;zÕR­ē<# u&„÷nŅ…+Ū‘e”ļ ãŽ)/[”R{æ§sōØ dPr1Žô-ÎX §Ą¨­9= Ļ€ĐJ§9F”˛ÄĮc',žĩ=QpąQšÉ ÁƤŽYvWā•dÔb<9cĪ œÕiņö˜ŊĒÕT”z‚„ sŒŨĮƒõĄ0oÃSŦJ¤°Ķ Č\1Ĩ1 ļûĶ}M6×T‡ÜԑĀc†åŊi"…ã‰×‚OLPQ–E‡\Ō0ōáYrwžsš’8[4l0j6ß$b-‡wLĐ’Ę؏ €ŨéâVŽß{ÜņQĘTb) •žĮŽH úPĸikɂ­úTŗÍåíČČ=ę’Ũ<’1Iw÷b÷  ÄĘp¤}ûÔW˜Ėy=énøcŽhšž i`H‡€Ų4ÆXä÷‡JŽEåņÁ¨Û‹ÕėŅ`-1à xæŠ; nŠą!WŌ¤´fËŠÎã4XeĒkT…8>´ėāfĢyĪ , „k#žđį88ĢRĖâ'cũãOCŽĶˇÖ€,ŧR;S%•T’p})É"ē‚§"ę(P(ČėEč(Č4J÷ŖéUŸˇ0ĪŠČeXlî)ØDÔb–Z@17ŪPivM¤qQÃ+I#+.ŠčlŠŒŖĄĻŦœœtÍX=)§NábĩÜD˛¸l{U•(“hr Å8QpÜU ¤‘åR+C…sI0##Ė‹2*´8…Lrd`ņĮZģ́K€z€iÜ,Rˇ‰Œ’¸Ā4IĮŗ6IĢžÔĮ]ĀŠ‹…Š–*ûw -°-4žg'Ū­ĮÆģT`S^s¸‚¨8ĸâąP'—xD}1W€9 KJ™Ú9¨'ˇyfWVdSe“b“Ūž8¨Ļ\Š=0)QInō1;ķëNļRcgf9"›&b…€<jhŨ^ŨPŒ*„W„Ë">Ö<ĩ#Lå– Ø$rh°†R9ôĸdōŽÃŸēF3@rŧryLrzW,ęŦ;zĶvų—+°ä֙*#†`vēö  čIˆ0qJųōÉ&™nYíԞ¸Š1Æ=jFVKĸIB„5,S—vHĮz†áL ũXJĀ[ģsT!Ææ1Œž{Ķ÷‰#fS‘Чh $„ŽsEŖ•ķTôŦ´īŊ'Ö¯ Ĩ§tûÕÎô˜Đĸ•›hÍ0Ÿ˜Sn¤ōá-Ū€Îæ†uQ“Yō4Ëš`AíOß)ļg~1Ō‚åÕpŨ .áëYés.īÚ¯‘Ķ“JĀ8ô ļžâ‘ēS&}‘f€Ūc(;—57jŦ“ƒruiÂåŨĪĨcÍ/N*5‘dŠČŠ(ŒvŒĐ$VUīœŦ?/sP&߲8aŪ…sBPZ3< ˇZœu¤0Ī4´‡­8P!™į“ [$E)8>ô““@ Næ‘úRGœRôfŒQ@Ĩ¤´Ā(ĸŠZ(ĸ€ô”´PQۊ)RŅEP( Š) ĸŒQ@ E-RQE%Q@Č&ûĩj’Za b pĻĶ…1 (¤´€Z(ĸ€ (ĸ˜-%ŲX,lOĻ*3û“SVČÁĐĄxQĨ1BĖĻCĮaLŒ”ļpNMXxQūđæ”Æ …b‹…ŠlåZ'čOZž*ŋŲōáÉĮN*Æ(`€Õ8 ¤e]ÜķVÜíR}Uŗnd'Œžô anK]ČHæĨ71ųNÁ5ŗ~úVëI+—ƒvŋ:b$ŧåc­SîPv᚝?/÷¤ŨFĨ-d†–Š,yšU„^¤…Ũ­Û°āR°OJLņUÕŨdąÎFhyˆbsˇ­Î*n âMĮ#ĩ,w ãĄšT¸ą†ë@v÷  u¤Ū ãpÍ)÷¤Đ:RŌPŌŽŪõR`Rę0Ŧ~nÕkĻ•SÔf‚Į´”€ˆA9 P^ ÉÕē¯4$ĄÃ i€ņ.ŦĜtĸhGV ĩ(āsB°'ĐL†āHĖI~ÕŊ“Ž•pŅÔb‹…Šl†“i*Ū•b&2|Å6Š“ĩĩ$˙VØëЧl@ˇ98Á9vŖ0ÆĖI^MŧũMžĻ›EížūĢ1Ā‘ä.p{S>ĘáČ_JwÉŅ‚Įŗæ+Ú¤ˇpņd ō(’ßšcš|0ųJA9'“H {Vlqŧ­ W#´OCŠĢkˆīšqšØŲX‚‘#Ԋ|LÂãjåŽĻ’â6YRP Û×$ss…!@î)ˆŠū™%:)íMFŪ´ČúLš¤€ƒx˙J°flļÅČ^ŧŅĪ›’¨x lwJĄ54 åAŒ‚}ŠXA0˜1ˇ­'Úc Fj¤NR ąÜšz¨û=ņš,;–ŒŖíëJXmę*;Ŧri]ĩ >đīš,.# š§ûÕI‹PGļhˇ?x‡,ž”X.[ČŖpi™UĨ•Ú.>´ŦÎ(N)œ3+˙zCráwí!=iØ.\`sÅ&pqLiÕ"WlāÔFáe!°(Đ<ŅLķãŨˇpÍ<˛¯R ’šÎšĀ§‘@äSdRņ˛ôČĨC¸wj¨ĸTƒĘäúÔļąĸzÔŠ‚âcŒŗ”īp,c#ǰÃE r ž´@"Ē Â¨Į‚'9eŠi˛}ÚP\J)•Ĩđ‰€ুÆ;cnPq¸gŌ‘¤D8fš¯öicv0°ÃužČØg.Õ?ŌŌ‹ZĘ)!,pM5Āģã;3W(ĸāõōæÜāf§îL/Z¨6ĶĖsˇĶ=ÉSfJũÜqQĖVH|ĮÚŽ$@B¨Ā6" Ɵ4Ë Z•Pa@ŖžŲ.Üy(õ!ĐČ4ŲÆ`lúSŅ<´;Sf‹ÍMģŠŌĨ &Øíõæ’ÍYŒķVaˇ1DSvsMŽŲâV ã֝ÄCe’dúĶÚķccn)öĐ<.Ų ƒéVH¨ Š<čĐ ¯-ĐUg‚X?UęE\ēˇ2(*9ZlŽĪM¸ŒP˜‰m¤ÄqÛ-W… Ŋˇ=zŌZŨÜŠ\R°ËķN¤ )h rsIŸš@ÖčhŒü´â3Å  ´ Đhĸ )hŠ`QEQۊ(ĸŒPQF)iQEQEbŠ)q@ EPIKE&h4Q@ EP2 :ŠēĶåę)‡­1€§SE:…ĸŠZ(ĸŠ`QK@Q@ fĨ‰āSQÃĻūÔËĩĖ$įĨ: ôĻ!ęcŪxÅH§ ŌĒWUS&sŒUž 0ŒŅUíÚĖIËՌķH`iĨĻ4Hæ5ŨŒŠˆ]!]ÅX b°ĸdĒāšiˇR1Î:ĶÚURƒŸ›Ĩ>€!’vƒ—ÖšÉ'ÚCã*Xĸ‹Y7ĢLJ›ĨFĨ’+–æŽĐT⋁Hcíy•ĮZp8gŲß­Z(žƒŠĢbC!s‚ 1*yvĮŽqQÛDĻär >Ũ|Črq’3RG—ĀŲ÷4ŠĪŗËf’{ԓįėŠsÍ!‚O)“#ifW6ęĄy žøĸ÷’Oj–I :F§Œ“PÎĖéė<|Ÿ$ņČ~îÜPYX^Æ ĮLÕÁTˁŽÔį€*f™…'“IŒ›4riîæĸš%m˜ŠQs8ĪãR—dĒNė`cœf–ã›HÉ<ņE‚å܃žj(b #ļzÔIŌqÁĶm\ĒģHŊīōϏ;N̓Ž*ĢI(‡Î øSüÉDCŒŽh°Â$âSķS‰Ā¨„ĮėŪi^zâ˜÷ Åŧ)Á  š¨Ë¨@ÄāRĮ*9Ā<úx94ϐuĄˆM ŗÆ[nᚒŠHŖíqíwâŽzl=EĐß1•ēRԀU[Y]ÖMĮvŪ”ëiŪVuuÁX ˆÎ&ŰQģiÄsHxčh´*Ž’;đŲĸÉKĀā“ƒRĩŧlrAÉëƒOPąĀW["+.IŖh%ŲåĢ •m]]w)ȤĪ8Ĩq•åˇ&ÜGjdąĖÖę9Ģšĸ‹…Šrų‹™sLŗFķí* _4p ÛÚŠāĮ|O¯BjđĻčļEž”€EžEgķČĨ3f1+'Ks`bj†(•íWsš`JĶ*Ä$ˇJ!˜7ČA ×ĢL¸š%Īpjt€‰ ŒÜE€ Ō‚sžQVæ<ŽxŦÆßr2ŒzÕįr°ƒŌ“@JØ)ëČŖFĖYõ§¯ Hfpę$vÍK¨(ڇžėTQډ56 >D­UÔE´~• Ō3í Ø"Ŗ‘Œ1ĢĢČĻÜĘĘņ”<5+ ¸ŧ(ÉéTī‘ƒ#žOJt“p‹÷›ô¨nÃ.ĀØ<į4$‚’PgŌ—ϝ*)sÍ (<*9' …ŗz ôĒÚū÷C@ĨĀ2mpTž™Ģ ķY2;yQî9`z֔g(¤õÅ6€“ŊžôÃ"Â¤ŅíQ¤ĮđxÍ0ŽÔ…°Ĩ= ʓŊC˜ķGjœPž´Ô‰U5%%–°UÉ< „]) v˙z€&ĸ‘]w)ȧPRҊ\PQE-QF(ĸŠ(4QK@ EPEč ŠZZ@%-%´”Q@Q@Q@ E´†Š  Ģ7ŪÃ֟/ßz`8S… §RĨ¤Ĩ Š( –Š)€RRŌP7‡íęiĘŪ]žHā”˛Â˛€”Hsą“ āzRb†•]ĻdļVxņJ†E•A$‚(°\-Ëy’+6všąU"r¯3žyĢ *˜„ ÔO nŲ#ڕ%IĘzTiãg}huPŠŒN)(¤0ŖŊ79b=)Tķ@‚—ā€hĨ 4HNJŒũ*ˆАŋ6jĮzæĀđ# t(z^ô´€Ē-ÜŽÂÃ`üénbvUH× ՀAͧp#lˆrG t¨-8e9ô5pS% c`:⋁Y ų;ü ķÅIpËöCƒÁ˛ũ—Ëū,tĢÆ Ž3@ˆY‚ØqI>ЁßaĄCĖ|ž”ĮļFPŧEĀ‚ģzõК'3$™ڝ%¸xƒ† "E)pŌ0ãŌ‹Œ—5Q‰ščŠÎÕ*čĒĪG9‘W ŒB1ÛÅņŒĶŪV{)[ bŗ °Î¤Å)Ä7eØ|Ŧ:Ķ%Ģ–gSÎĶÖ§oēj+v Y€ĀŠ\áŸJ]FU°ûõŠÕDØķŪĸ°Į’ŪšŠnũÎ;P …1y˜8ĄåķÅ@ 1Ž(~,‡Ō‹dL‡0įŪ•Ų1ĩē¤#U˛Ü~ņæœíūŠ <íĸšr4H“j)AËUx՚Đ`üÛjŧnæ&;ŽāqE‚æƒõ§ bŠÎÍ –ËzĐ'xĘ`Áģ ,2īZ8ĒŌÜ4sų{sž˜Ĩ[Ÿ‘‹Š]§Ĩ+=Eįƒ9‹ëMîå ûŌE:ŗtų‡ZŗôĸĢEpd‘Įđ­HŌn‰ˆëŽ(PA<qAĒÖqųjI9cÖŦƒžhj–ĸNÅPZš¸TWRá,0OŊCĖkۊÕhæˇÉ!IéŠeŦŽf‘]˛˜Č”…UŽHđĨ>´Š)¤qP›H‰ÎĶ5!<ĶĮJŽhU xĮB)ąÛˆÕ†ö;ģšž°ĸāUûŲæ|ž”û˜L°ė^Õ+“´2iŠÆHÍļŅ4p…nHŠO#ĩ(Ŗˇ4HˇĨ™ I~ŠRpzÕÎô>”îŋyTî'œŠeŲX—˛õ­1HQ[ǃEÂÅI—mĖoü'Ŋ2ņžd]ŲÁÎjųUeÚĀQŊ´R`éEĀ$`‘oĪRA"Îģ‡ãO1!ËĮ¤‚…JŠ<žô€yöĻHácËā}jNõ^â×Īl— zP€ĒU]ĖŽÃ ĐUčŽõWÆ8Ē§ü¯WŖ]‘Ēz lBö"ŗlsJ­éÅjU ČKNŒŖīuĄ ’YŞ-ų9nÕe0SڕPQč*šÜ8ēōĘüš  oŌ‘÷‰_ŧ?›3‰‰=Фí4l[¨¤Žčš`¨IZfžĀFã"’ÄŠ’SīNĀXˇ¸ƒÁu5RąæiqëO“큎Ũ¸  nŊģëT⏠lаÃ*{‰dKPHà 3ėÉ%°ãÆsB5”MD?SÍXǚ{ŗ#+…8Ģb“uĨĸŠ(ĸ–€–’–€ (ĸ€Š ( ĸ–“Ŋ )i”RŌPŌRŌPŅE”RŅ@ EPE¤ ĸ’ŠŠ'ßĻw§É÷Í0SņNŅN€Z(ĸ€ (Ĩ Ĩĸ’˜ EPRŅEéh ĸ–ŠŽX–QķQĶhä }ƒËs:ČHĀâĸhäũāØIcÁĢ”S¸eF6ÉÆ 튐LŦʧ'ŌĻĻí_A@ã?š˜ûšÂÛÆģr[ ŠĖ)‚6ã4žB•@ NA  đƒöÆŽ:S€VŊnĨ—Ė IĮ9ĻyN. ¯FĻ"Įj^ÕUüŅrÎÃV;y¤2Ŧ˛H.6§9§ŦÍ%œ|ŲÆ* s}ô§]Š;[°<Ķ,rļđŽ$db•ŽUX€¤ãФ¯ŪS–ĮÔV 4nŠÍ ,„ ¤œnéNķv7sU.WËEéē8ÍÄTX ™’qGdsTæ}÷j˜Ę¨äSâFũč „ę´Xw$H‚+€OÍPŲe•˛O^)öŌ X“×Ëõgë@ŽDBč@ĮZYdŠbxŌŗÛ1ہBhO™ģ“RT>Ëefč>)ÕØ)Ķ4)Ŗĩ€2jnD˛Æ1úŌj Ņ@-'Jŧß=pwŪ€%ÎO4„ÔRŌ{ĐčR¤pj8îŽBƒĮz“'Ŋ28R<ėÍHę °āĐ)ÔPŲŠRģŽ;SšØ4^îęmĘz@`FAâ˜ZŪOŗė ’A'ŲÕUrqƒWĸ‹…ˆ Dš\Æ*´q•ŧeĮĘyĢÔ`uĮ4\,TžRŅŠ zŽ,jÁ¸ĻŦH­ Z.Y[Q^zTט1mĮSO0F_vŅģŽhš!(œŌ€+[´ŠÅ$ņÅ2šåČõĢIܒıÉĻÛÛ¤,[9Ļ";qûÉHīQÄųÁÎŅØUˆĄ‘%n›Xæ›å´;„,­éڀÍÛt€įŗVŖ!”ÔĢĖÃh=Gk$žkFĀâËL8¨/ú8úՍ¤âĢjęG?…Û?fZ‚ŪlģFyĢ6ã6Š‚1P[`É(sÅ1á”H¸čGQRT­Á7’cĨYōY{Ōc9§TeÂO&ĨíHsĩIÆk:9ZKĀ[Œv­éY°œŪˇãM.ÜČReëŠĢqĩŠr~qÎsSܐÕQĄeŒH™(zŠhEË)ZHFîĸ›¨1XĶkIĨŗuhōCxÛ¤˛ ]CĄn ˆ×w']dwi6ž*Kgc “ŪĸU,dÄ{šîhÖ× 0!‡Jļ:UX%GRĄv‘Ú­IŒZBBŠ'ĩĄ–@Ģķ rJ’ŽVžEÉ-ö§$€Žw “¸¤Rg4HÛc,; \G^k>Ų–Us#ŨšŠ,Ĩf,‡‹˘ĸŒŌ æpqFÅÎíŖ>´qšvi€R2+ŽÖģĸ€#H#ŒĒi‚Ö N ŠčĸāC ēBå—9=jojAÅ( ÉČģXdT"Ū@›O—éVh ĸˆCÔǐ›ƒsķn۞sZsEĀZ(=);PŅIE--%´QE%/z;Ņ@t¤ ¤Ī4´b€ RĸŠ()hĸ€ J( Š( 4RҊJ)h  O÷ښ)_ī˜Į p¤´€Z(ĸ€ Z(ĻEPEPE%­-%PKIK@QHN>”bŒ€HO{:ŧģŽAāfr]Ö#ëNÂ-šJQŖ>œĐHQ“Ā€a•D› ųŠāƒŌĢĒĢ;žrĸŪo3*;vÁŖĨh¤JüŲĪ”ę:ĐE&sšB 2)Ô´ĀbD‰÷E1­ų;¨=E8L­)ø…Kš‚[}Ę WĨ0Á)™ˆ8ĢTb‹…ОÆë8•îÄS™ä1e9=XīAúŅp*C¸[6AÍ?ęņß5oĩ U€ ¯ōO֛pGŲž*ÛĀ‚8¨^Ō6\dÆ‹ˆ‚ã?gŒv8Š|Ļ-_j‘­Ôĉ w¤Kv žāŊ;+ãiĨSŗEķ상WXnUH"–)HÛō“’sI ‘ítĘŦzT Möp3ķg­G~ÖN̓ĮJ}Ā+"Ä)ęE1Nëpcsž)ë+ũĄĸ=:І">ØNxÆiҐ×ÎGLPŖģ_m=jŗ#…I9=…W„˙ĻÉI’×į‡ĸĀIÄWˇZT•ZLäÔb"­).>jd.VdI§CJĀ_ĻĘH‰ą×SLj“Ėģpų*;RHd°Ä#ˇua“M˛˙Sœ÷¤œĮ `p:f™nû-˛zj„KqŋrŦgÔāā'žõP\8„KŸÂ<Ė›q†íJĀZŪ”ˇ@*Š™â*AŨĶī´<#)éE†XĪ84§Žj´“áĀÚIôņ2ŧlGn´€”zR÷ĒņJ¤d0ÅN\,9€œQQÃ:ˤŒT´!æ›*–Œ…8>´‘ ą€Í“@QŒGj(¤hŅĀŪ Ōâ”`P HP&0aLҝŨ>ĸ¤bwCN GÆ>Q׊¨’ÛmÃKģŽÂŦvĻ|Ûņ@oĸ'nÆ;U¸ķåŽh(§Å:‹€‡;xëT"Šeģķ> ­ 3š¨ŧ芎ŊĒrylž*åŠÜ °[‘nW%I¨.`h 'vAëZ#Ĩ#a†\,TˇžÍ¸6r8¤˛i bäbŽp8Į<Œú."” ĩ۔mnËåāįĨK) {Ķŧb_35-AvAŗV* ˆŪHđ˜ëšH-—ũûæ›kh›ĻN*x!‘-Ú6Æ{TqCÔŖŽj‘ē1ܔÛÁ5t › Ф’)ÛyŖhŌ0§¨r”¸ČĨ ´PRĐi(zŌRŅԐ Š(4Ķ֘&’Š)Ŋh4”P8¤Ī4ŊФf€)i4´QE-0ŠZ1@ EPRŅ@¤E))h Š( ’ƒK@ E-%-%PEP÷ƒÔũiE1Ž´‚– EPŅEĀ(ĸ’€’–’€ V2ģUP@$ŦČčAĀĪ4ė"Z C­$θųGCH.>FvS…8ĸĀN)i¨ÁÔ0č}iԆŌ2¤z͍Šy ÆČIĪë†Ä°įZąÔķHč¯Ã8χ<Ž•Zô¨ŖšæŦtĀŖš?5qÜr(@FQĖĘÄ1ƒŠeĸ€]ŋÚÅLŠ#6daĮaL‚9#fRŋ.sšb" ^i@b1͚•Ę|^~´–ë ‘ËŽl™Č8Įˎô$s“ō9Ļ­Ķy[ĘqŪ™ÅĢ0Fi bõ  žbˆÃ“ŠjÜF{āûÔ2qmíĮ܇åž)Xd“"Ž ?Z—#nsUßt˙.vŒAļî#¸ĸÂ.‚(ÍS‚6Â>ãŌŖ2ĘÅŲ[OJ,;šɠІ L‘5.NiŊĒr‚O,†ŨšąTd˙ˆĻ–d˜Dę?5<š‚ķ“?ÅR–\ Đ—]ásĪĨ; ¨öFŌ†ĪĖ)į´,ˆä…`HëNĒv˙ņų6:õę×ņŌh €ÜšŠ\PvŽs´dS$Y7ÁŠ9ĄY_;Nq@›ti|ÎA”QBŲ'Ŋĩš)ˇv#=iÖĮũ ķīOŽŨ㉑\Ņ–Í#'ԁ°EōK¤Ôrī‰˜įŒuēʰ´{1īP2?WĘmŲäĶnwalS]ŠÚĢ㞴“öĮ4ɉû úb€í.ÛA\Ū–IČ;cäŽĩ$KēŲ6ŽqUáRdy  äyĮԈ§ÜáYH>õĀ‚ ŠŨOëMœN#”čiX ŽpËM{˜ÕļîĨbŒÕ †É[pũáBCšĸ$ÁÃH_U/1å.Ūz`ĶnNÔL(°Ž_2Á⁠éUnōa ž@¨ãŽSr'=EÍĀ öĒk3ŌĄžLtĢDf:Ąü~?ģBSq(ē üԞlŋi )Jaˇį$ Š)˙xc+†æ€-ąĀâ‘ŗˇŠŽnÔ>Æ4å¸Vm¸ ú@NšĮ5 \ėœDĘA4ã:Ļ9>‚Ģ3‰oĶđ:`_ĸĄ2áöđ)âEcŒŒŌW&ŪŖ yR‰>BĮĩIIL†U•w)âœX´ę*)ŒîˆíŖyįŊ8ãŊ-!Ņ@ 1Æ[qP[֟PM8‚ã,{Qmp'Œր'īEŽ(Ŗ­žx 4SX‘J9 õĨĸƒĮ4f“Ō+n4ęJZL“@9 ĨĻ’æ@ IF)h)hĸ€ ZJ(i(Ĩ ĸŠ(ĸŽÔPERĸŠ(ŖĩPRŅEQEQI@ĸŠ((¤§ c)i)E Z( Š( ’–Š`RQ@Æ ö=I6âË´õ¨“?lbTãt…ūԃvÄ:ų™ …e늮B7 ĖqΧZ‘X›‰d^€Rķ-˛ã4ž€tíJj;|ų ŸJÔ Ō3J!Œāõ&„vI|šr2 E ˙Mr{RÜô¨ŠˆĩڌŒâĢ+1ŧpsIöĻ\´Xw-f–ĸYP6ÖnsRREÔTR$…ÔŖ`w-'áKŠ(ĨTį `õĻ##x-%C2Š1ĻqĪŨĪĘ!rA4‘‡Į$r "Ā<Ī1›s”ĀcFé1‘wu’G+Âŧ{UšJ."[ʆĒČ|’ČëÎsĶ­^ūT¤ØQp ’Ažâ¸ö§C'šēSä@ÃdjĒÆA@‰}ę‰įQæŽÕŗ;Í“î(CėfHGûT\|˛ÄGC$’Ģ+#4­’HĨđū´ÄGˇĮ1J™–W-Đ EY>Ô\ĄÁ┊F æ€ UÅÄŖĐÕĄ÷ĒŠ"y7 ”Îä&:÷¤†Ĩ¨'™c#qëSŠÜĄ‡CHdWNéØ;r}*=?ũA>ĻĨģ˙gúTV?-¸Ī­>€5›Ėŧ(ä…, Ré‘~æ3ôĻLĤF>eęi-¤Ļ71į4Ä9†ųąÉ€}(ļr.Ė`üŊiōH¤ã9ÆiļėŠ9F1čŪ´nFÄL}Ē­‰vBĖIÉ⤙‰ˆŽ„œTv¯™J)ųPRčŖ‘ŽiGN´ŒzS‡JCÔŊŠ’:ƛ˜āT"é 돭ÁāP9ʁ,0zR¤ŠÜ!Ŗĩ¨č(;āŌÕgC%ÄmĢ Š\Ōf€<zFm*¨æc!q–= 8ßąÁRzPˆ‹ cÛŖļá•cԊ––€!kt1äcĄ÷ĻÅm˛O1œŗvÍ>YÖ"īO-‘Č e džÖ]†"TŽzÕŧ€3MY( ‹bĐ^XTĮ$‘Ą‘ŽĩĨIEĀĢr¯öP $zSíT›u ĨH㚜R⋀¹Ē€/ČĪlVSMFvҟZ WåÅgŃ|Ã?i‘ÍW[HŌMëiĻY đ:āR¸Íę×i­ci<ĖļęE´Q/™¸äz͏ˆ-ÁkÖŨÔ9Ā’‘×,–Û¤ķ#m­Ūĸ6Ō‰„ŠĀˇŊ+€Ûŧ˜ģsL˜bæ"8ÉŠî`wd‘@,:Šd‘O$ņš@=éL\žŲA9Ųßč×uģüĎƝ0)#nŒ˛˜ĸe#=;OČČîj%šS+¯ GJu„€G°į#9â™hĀŨIīԐ’yc…\Œy$“yp+7R*-@á'œôĻ\‚`ˆŸē1š™n:+¨ē˛N UxbĖl\“ØU°š#41™ė˙éäxâŦŗĮdaYĒÔ_Ŋ‡ĖbôÄX[„a…šqKÔÃqæ^˜ÕiUß)’IëJÃ4K…“Á žAÅSēlŲŽ="ÆEŽüœã#š,į#iW‘ÅQķ›ėjÄķNx‰$S’{R°Š­Č5Ī1d0äĶ!¸wW ÉSE€Mį˙ąV…Rļ¸f™ãĨ{ŖÉUʃ‚E ķŽ)Tĩ•V0īŪ›Ō4›9é@¸ä‘zTmÉŠGJ(ĸŠ@%(ĸŠ`/zJZ(ĸ’–€ J\Ņ@%-%R÷ĸ EPEPAĸŠ(Ĩ¤ Š( ĸ—4POÅŠ1…( RŌ¤Ĩĸ€ (¤ ĸ’–˜Q@5Đ8Ã ĶŠ(ĢĒ•Ô-nXmßōg8Ģ4¨¸„j…Ših eRW%Ī Ã­ Ä×!×î¨ëVX9*€0)ÜV ‰ŗq)ĻÄ3s!=ĒQųģÆAψ?zˆĻ"Z3 ”$õŠfÉļ@íM6Îc1†sž•3)ōöûPîfkˇLžiūc­ØLäéIh…T’^)7nžė(Ūi’Éąs‚i†uķŧžôNq}) ę6ĮPM8ˊØ,¨-ŖS ’:sQÆŪB98ĸš{ ŒƒÅ.r*“†TŠ#œ“ĪįR,O¤Žvb‹g­N‘‘Îîį4Snd~ĸ‹äÔ֐ŦŠĄrSP‹†YĀ ĮŠ“Î”Wą ™ņqåÛĩMŠĢ×Pú-Z,'C)'XÎ8õŠUƒ¨aĐÕkŠ­ÎĶԊž,Tz p=ŠGJ@2)¯€^ôs֖ŒP1ŖéHcF}åFáNÅ- šY*KgÔ0B34gpâĢÜĖĒ–4ĸ!ŒN0E+lņHōlˆļ3Ѝŗ–' YGR;Tá’KrWĻ(° mp'B@ÁjjĨ§q}jĐ'Í 7JE…HUNK0*yd…ąUm>k†Úŋ!į$P4īį8l€Ĩ6ĮÍ‚}jūÅ'%A4žZ.NĐ3֋ŸiˇígĨ+Æc|-ōį‘VÖÚ}ʸ?ZoØĐž {Qq\|ī…54–ģĨG *YmÖH“ŊĻĮÁy7éEÆJW8§âÅ¤EPEPKŠ( ŠQE”QK@%´€J(ĸ€’Š(i)h ĸŠZJ)M%%´POŅN ZZJZ(¤Ĩ ’–’€Š(ĻEPEPEPHxĨ¤=¨§‘L‘ü´Ũ‚qKœšŽđâŨŠ€á"ų{ÉÂĶԆЉBy ¯ŒŪ•¤HJ§¯J“6hĻ— ā1ëԜG¤vp3QA+JI#ĩML=× Áx^ϟ$~j$Š~i~´\ĸ‡Ę]쉍Œ2Į#ČÃUŖE´ą¸Xߖe§¤#‘•qßÖĻīF(¸"pēœ†æžŖ}¨ĢETōTR…P¸iÜDą4i¸ú`Rø{-JÆ­9¤Ęŗy€i ?ãũ ĸņˆ ŋŪ84åˇe˜Éģ9§Í•1ߨ4¯p€;NĘFŠ-I,˛p@Ĩš7dGۂŊE0&Ų8E,TŽsRÍ! 9Å$2å\ÜŅ3…qōˇz|M!c¸‚ž´Ī´1 ÁrŠqœÔp ­*#nMŧRˆđĮķJĀO$ęO'w@)c”H¤ŽŪĩ^dŨąb?2T–¯ē6ČÃE€k]‘: wĢ"@O^Ŋ*ŽŪ¨íŠuâāĮ´āįS°IŖ5U!dv;ø#ŒÔOē­ŋs“Ī4Ŧ;—ûŌÕk†‘c߯4Á4Ļ`A,qE‚åĘ:Uv‘âEĘå˜ôĨŽrėŅ°ÃŠV “I§­ ĀNb æĨK…’Sa@EC%Ę#ė'æô§Į*ɝ§‘Ö€4BUđGCLû1fV‘÷mč*|ŌqEĀué3Šæ€HjŊáe‹z1\T1hžIüPUXä¨&›+4hJŽãL–*!Sī@ōc,`Ī­< lmšõ¤ØŲaYnŒ:Lā¸g;ˆéSnÅ‹^ö)$ åõ4*DJ–jCԐqEĀ‚ō– ¨9ÅA,RąFā'jŊFiÜ, =zÕ;ۉ3寧ÜÕĖZS‚yÅ$RܸAMŧõ­5ÎiJ!<¨üŠi°3î‹ô'ĄâŦL¨N1ķ‘ÁФ‰daLŠŒ’2OŠ4\ Ögmģsš,˛måūīj­˜•b õžą*ÄQxƒN˙PĮŪ§ķU˛Ze´eŨj8­dKŖ!?-,„9ŦûĨ_>< dÖ™Õ ˆäyՖ2Uh@%É(c“V'•FŖĢf ģ Æ=¨ÜuâtÛŌ3Œ ū4ŠW–9ŧ´`wwĢ‘äB7ũáUTF'RėĞ™båü¨wb†Ë÷h$TvŽEKˇ-šC` J:šJu'zkØSŗĀõ °9ĄŽ0)œSj3H>ņŖ5.>jOâ§4ũúŠvi@ÁÉĻĩ(9 IĶ"œ m¤“ž”å( ¤nE:˜įЁJÕVØm$IK'–C“ƒJÂ,ž(č*Ŋˌ…€wSŖ™€o0`/Ĩ=&*šÉ]ČBˇCSŌŖƒN¤=hČ ˆ­/ŌĢ2nrrzU‘ŽÔĀ;ŅKM=iāĻ•0ÊSF(Ú S>ĪíØäԔŊ(€ŗīFÚØĮJtPˆĐŒäžIŠ:Rƒ@%‚O8Ôûá‹cõ¨Z@ց?ˆŽ1]ŋ™k¸t8¤Iš8Б…éLLvJ¤ķEÁ˙GĶŠŗqqåmĮ ÷¨¯X›_cŠmīú¤Į­G v8  Äž\IœŠpž2x9&ĒŨdˆWąŠ/@E”`įŦėø` HGBéŋxŦA*8§,ž]ĄtnôX ĀķEg•‘ 펜ã'ššY˜Ų TāŅaܰÎT7›„;•ˆÅ@d”Ā%b1éR\IæY–Å[vßnŒß{öv’X Ģ ˜í‘ŠüŊęēâČ Āí${vŸJ“ Ü+AæôZ.Á`UOBidô4‰œR‚sHŊ 1g¤1ƒķ –¨)ÎŖøUėįĄÍ ÜÆy§vČĒæ5yę9^Õ9l.hÎGJF׋–8å‘YC†€T¯üČÜązâŽŖŨc%qô  ˇĪ’?,&Ž2†]Ŧ2)"%ŖVeÚOQOĸāŠ‹…ρíK@ Iš3šŽY’ įŸA@ŅLŽE•7)⟊(ĸŠ1E =ŠqÅ æ”ŌRĶÅR“Å&3Í-âƒŌ€ CƒGZ>”§cŠ@iÔŅÅ æœx¤ žHâžŖ (´R)qÍ%-PE-%QEQEQۊ(ĸŠ@QEQEf–ĐAĸƒ@RPEPŠDĩ(Ļ1ii)iQE%QE0 (ĸ€ Šáb;Gnĩ)¨Ž‰īŽ(B qūŽŋJ„ÆîŠŠÜį9Š‘‚[Š=6Ô2m[u’2zĶY”¤Jp[Ŋ2œĮ¸°÷ĻČK]ÆWŽ)а.ŦīQۘ‹B‘™QrĮ–ĸš˙Põ#$FûŦ §ÕHĸÔ0ᇠÔÖōyąŪ€ŅیTîÍ,€œ…•fŨWÉL¨Î*WDq†PqëEĀĨ+ÄŧQO“;¯j­ĸeÆĐĩ#Û$‘„$āP2¤™jcŋZ{EžŨl*Ę[*Bb$•5ŗ€d%AéEÄJŋēŒ RŠ ÕkøKá°ĢPƒäŽî¸ e]ڇ=*hÉ[æŒ}ŨšĨHˇfPGŋliY~\b&F TŽ´)3:—*‡Ō•C›íå)īDÛ$G)ËÅ0ī&Ų uÍ;{Ak–9$qMXXĮģŽyĸ\OkōdíũķG˜A튚[“BU\Ѝd‘ZÃh<ôÅ6u1éĘ^)aîBD˛84 ´fQƒ†īP\˙ĮŠÔÖ¨ĻŲ@ĸĀ,—ŖíÉ'ĐT‘H%\ŠĒ0eϘžšĮ5f΄1-œŅ`'ÉÎA{Ä Įj”0/ĮãQ^œ@Ūâ„1,X uĩ4˙4eIÁ5N$Đ0$684#=˜“q (°‹ĄŠ0…˛}jLÕ3;%Ē?V4×yŖE•›9íJÃ.ƒķRæĢ´ā*˛ō[ ¨žáâ”+ĻOlQ`.‚=isTn'(ČÅx5"\ĢLdQ`-uσÎ*ŋÚĐ9ë€pM=æ@gQE€‘˛SÂFYē ‡ĪŒCS>3ß"€ É0%J’ŠiŖ !÷ĢdĐ÷ŋxFsRU[x‚HÎ $ÕŦņ@ 4IŸJUšÆ)ÕŠzŽ(EæŠ(4´Q@RĐEPQE€ )i QE (ĸ€ (ĸ€ ŅGJ(i;ŅERQ@Q@ņ‚sß ¨ĸs×ĩMLbŌĶE- ’–’€ (ĸ˜´”TWŧ‰ĩHÁëSQ@ˆŠn‡gļ*š5„&9&­)Ü ō(ŽxÜũŅÁ4ČŋyzÎ:õh€Ã 3BĒ¨Â€(¸¨nÎ-Û55Gôô”3¨ Æ95 ŽVīž”†Nŗ‚ĀFzJķ$lŽ Vąxwcžp*[ÅũÚÉũĶE€•dFl3@D2īĩ2-ŽÆAŒtTpĮܸč( –ûRUFfōLÁŽAéڝžU¤b ę(°E.1U…ÃÕŨ~RqRÉ(AęOAHmīJj8å1RaØÔhíHqN3NíU.˛ŗDG­4ē:ŅÚ ™dfPŒic4Œę3HZhÚ í##Ō‘ U@>´áKš‰íҟyÎ}iĸØ „ŽjV‘TeŽ9§ ;Āw–Œž´‹ Ž'—jąßŠFÉQpąM#–;bģ 'ԚûÍ ŒÄĀũ*ô}9§wĸāPœíŗU ‚i&]ÖҰä f´0ZMŖn=¨¸X¨†&Ø­†$đ̔ņ4mĘ yĄ‚)ßa÷Í:PˆãĨ&Ąū¤}jAøÔ;{Š:¯pK3Đã5%Öâe9ЧˇŪŠ†^•‚Y$S)\/LPf9ž‹ŠKœũĒd!RúÕ{yÚFu#•¤K‡pÛW!x'4€-fv™ĸ a}*áŦëšyzĐĪ0sNː@Ĩ'Ŋč¤ÖĒŨ^yYTå¨Ë"ļ Ķž•3ÂõĮ5žōܘŖm u&€-šJ'aqäÉÉĮĻc…&€ĩ&åā3U,dyB͕)fvIđ˜' ļ@a‚2)F*ĸŪ2:Ŧ aģŠģG‚-ĀėĸhVeÚŨ*A֘ÃįĐÕ!NI B$ zĶ^dÂąÁ=*Z­%ąķKÄû ëNŽH™w’ĮŊMF(¸ŦÕã¸tsžõ5â<‘mEÎjTQ‰“O9ĸāRE–;,ÆI#Ųc1Y –5ˇĩE;žéžÁpV‰åY-Šų¸ĢäN)ĸ÷n3EÄSxĖqCŸŧ =Ŗ/t$vP Í‰#R>\ōj+ÍĸhŒgŋj`;Qjg֧؈‹&>ęĶĨ'Qģ4õ‰V#$R¸%;­™Ņ0¤õŠãOôE=FÚpŗ^Âä§aŠ_,ÃhëœāqEĀĢbŠŅļFrjkG8•đ§ŠfžŽab˜ä÷Šâļ1Į'͖z‚Î=ĐČŲ=ņRZą–ŲˇFyĻÁŅ@čS9čEË$6Ž Ū”–,|š @ĻÄæD’C!č)lA)*A4–Ō,ŅĘŧöã­XŗÉOZ°ŖŠ¨<á°‘“hô%ŧë:n†9Ž9NEf” PŌQE EĀQEPEč ´ ((ĸ–€RŅH’Š\PQ֊ZJ(ĸ€QEŠ( ĸŠ(‚œœĶķL^´ņց‹Šu6–€ (ĸ€ (ĨĻIKI@ Q\J"ŒžįĨKP]ä…BZ ÷+š‡ícA˞ĩaGú8ûŋŌ ,ŅgE#§J`K4â2 &’+„•°ŊM=ãW`ĖTvʤŗ(ĀÎXŖ­Čo$•$éH ĒŦ ín\ŋ>õ4a2M0$ôÃ`Œš}€"6ŠÁį#ĄÍ>d/(īOŠh`ÜŠ€$1ÄŖ¸¨bII—īwĢ>”Ųh˜¤Qp*)2dŨŒķŽ•-ÃhJô8ÅFX­ą‡iŪxéV"LBĒÜPi™MĒ(<ņNœf✠ ‡*)d‰dPF:bÅa‘ÅļvrûqSdv5CŗqÜI>´Ëddwįž´˜ËĒ­Ø-,@zÕǝpŽĶF@Č b—)rŠCRM#%ÂĐĶŗ^'‰Čû\~Ƙ‰$‘„ĄF3ŒķDķ0ļÜĶ'Q+œ6ÖZlŒÆĶsgž(kyI„ĪI§-Â3;ûu¨%;mĻhŸŨqÁb‹ËyN6ž=Ē@@d Ĩ/Íäú–ëĩųãÁ#&•€¸1MfÚ1P0y’$cŒÔįĘW,KÔX.^§Ļiî@}EŠģ  lŦʄŠäSmĻiaÜŨj##[Y$”ˇ™Įa@ ´`’ųCĶæ§ĘžYzUmÕÚđŽyĪ&§¸Ŧ„Ļ3Š…Ķ͕#ëšŅJÍšÜÜIŪ¯y†8QØö憝ĩ#rÈÂ@OîwR ÚPīV ŠĪ¸ĮÛŖĀëR_gͅTāž)ØEĸĮv)ŲīYķfˆÔ1į¯ŊYkˆ”ífÁĨa–Ē÷ĪļÜāāĶ„ņšų†īkí^¸äûS@MhXۂĮ&ĻČč*Ĩ‹nFįŒņVzLÍ-0r3N‚}($%MŽvąFwäzÔ åsHIĮãJŊ9¤Īg9¨îC4 d‘RžÔ”VÅ$*ÃŽõĻbœ(`-4æHx Ž>´ģA* ŠzŠkŅ‘´7ĩEk <9ÅMœ "€šQԘا/JZJZ(Q@ ĸŠ(ĸŠ(ĸŠ(ĸƒE†”Š)QԊJ(ĸ–€ (ĸ€–ŠJ(ĸŠ( Ņ@ãĨ8uĻŽ”áLc…-%- (ĸ€ )i)€´QEZõą\MY¤#=@4€ĩ¯Ëץ˜æŲ’jî)žZg;FiÜDs?—ÁöZņņN–%•6Ÿ­9T":‚2¤zŠ){R„‡‹š=*ܯåĮÂäö¨"ŽØātŠ'‘•‘GsÉĻÅ)g(˂jpž2H'uÍCnAģsģqĮZH•ZâbF@=č°ˇ)\ä`÷ĻÅFΆĢ@3o.zsŠFŽČy&‹r–ŠĢ•6’wuÍâQ+¨PvŅ`šrƒL‰÷ÆŦF3OëHíQÉ:Æę„{ĶŨÖ5ËUYŨešž´Đ‰"œ:S5ršę˙Ĩ @¤8Q’qHŲ)”ëŽ(ÔÆEc’ ‘Isķ¤ 41ŋ$Pņ+Åŗ ŠJJ…m”FS9Ī­Gögl+8*§Š´ Í;…ŠŗÃ!ed hšYã`š VĪj  ĖĻHˆĮjŽ&!ėˎ1ŠŊÜP@ôĸā4#æL Šž€zô¤Up,˙ā4°ôAô5!´Œį¨Ĩ†ßËRģ‰ÖĀ¯¯ØÜ‘×5-ˆ˙FôŸepŦ‚O”öŠ-ĸhĸØH4ÄHŧ’*}ķŽH^õt)MU…d[‡‘€i!‰Ļxƒ•@jkipŽŗ°õ¨ b’H]Xn>”ÛU-æ¨ČĪ­1M:4€ĩKÍ%ļW‡cPĀëģFį 3ÅIfŒ°1Õ`M<ōqTåPˇąmã=qRKr‘ˆ"‹äōüą“ŒâĒ@$…Ã0;\ūU9—Í€˜ēûÔM#CåüŲĪQ@ Ŗ#Ö ’c•Eĩ@ĶJŗÆãڕ€žqہĀǝ;.#Q™éKåØÆÃ (°iIĻŊŠ\œô¤4¨œ3õ¤yPEŋĒûUMH‹ŸZ”|ļ˜øjŦĐJ’&SĨ=Ž9ǚy '’jĖ€Č=é=ĀUe•N¸HtQPÚÆ"ˆ€zšuŌ+ĀņHŠ‘][î~”ĩOOâõĢŖ‘@ãژÉŸy§1B–€‘$@ė\SÁâ‚j•S–=ņ@PۂŒžôî)hŨW!zÕĸq@ÉÔî€īql8^Ļ­5´RrČ3SQJāWK8Вƒ^[SNÂBOzĐ €FâĀÎĶŖ$o'v§›Ášį­\UUáFG%Ŧr¸vę(¸ÅaO­;Ĩ€`fZNv{ԃĨÕ¨ÍfŸÚH# M䊓­&)€ĶĀáF@#tĨÅ-7ĩ•§( J;Ķą@ī@ jU9¤#4 `PŅEQERŌRĐEĸ€ JZ ĸŠ({R (QGZ)”´t¤ ¤ĸŠ ĨPE u Š;Ņ@ëNÕ§ cKH)i´”´PIKE0 (ĸ€ JZ((Í- B;Q@ ZJ(R2Ģ˜f”w¨ĸ›Ėv\`ŠrBˆû”`Ķģ&ōŽrŪĩ5Āސŧp:õcéM19´UĮ˧8Ģ]éqEĀ‚)ƒŸģŒuȨ혙O\Õ°=…5cU9 úQpI<qž• ÁÕ^ę5tļxÅN „ĐPkŒĩÔJ~ī\Q0lˆô<Ô˛Ä]•Ô€ËëP´rũĄdāâšŗô¨°h.ō\2+UģĐÁÍâļŪzˆ.]ŸŖsšdí!´;¸9Į50fŠÛv2Tt¨îœŊ¸8Ā-K4‹öCƒí@‰€„HÜdtĄ&ÜÛYJ“Ķ=괙ō­ũ2*[Ŗ‰aãœŌ°ÉŒ¨k6 *Ȏ~VĢJĄ¯Đ˜Í$cmûŌ‹sпОæô¨b2y§@Ånd@NÜgš, rqéI m„)ųąÅUv™wČN<Z–IØ[ų‹ŒŅ`$„8Œ ÍOĒípËČW¯4‹yš—ä8jVÆN}ŠEB÷!XŒG\vŠQĈzwj(¤ āƒ@94šÅ"‘Îir('"ƒÚŒ.8¤=(ixĪSWîЇ'­ 1ÉPM:FŖqĮ8úŽxVdÃ~tKŊÜaENčJ‘ÁĻŘ_Ξh°´Ú@ķ AŅieˇ/2ČŦ;bŦɧp*yMÂČXUĻEoŧĨčiM+ZíAˆÆ9į f2ĒÄ/SZcŽ”î+\I†ž´ˆí™ÁcÆ)..ĸ'îS\žCČq@†8"øî8ČâŦ@‘,ŒĘInõ,¤ŖæúŅ)Ƌ€ˆų”ŽAŠ5Z;FIĖ›ø5cŊ&2ޤNvĢ'ןîÔwI1P€*MŽÖĨJüøÆ)ˆ‚Ö46¤ž´Š!’Ͳy\ŒŌēCC}9éIä´Vl¸%˜ö ‚fKį’=iYŲf;ˆÍ6Œ–-ozS?ú)kn ƒ‘LXô|ûՐ~SU,XyF<üÃĩ>Ūui.wsId–”pĩ^{…ƒ ŨęXđČ<Cy“9=CtÍjķŒb˛įĪڐۚû–d`8㊧hęģŌAÉ=ûÕšbŗã€*´v˙j‹y8nØ C­U€”ā…íLXÆĀHËį4ļŌ:Ŧ‘ŋ%iŪ`‘•>é=Å0bė'ur–åg–Såœ(÷§ZHĢ#BGĖ;úÔō°HŲēRę[q9—kžBZĐŠŲ ÆŌŦjßđĐÆ‡Š)¨~Z Å !Hnļlų=jÅS†ã|Ė›~oZt—J’˜Č9gŊ-UK•w 3žāŠ‰ IR”ĸ‹H,Ģrd)‘ŠXUÄō;)ЎÔŅEÂÆs6č{äũږRŋbōjŪŅÉĀæÅ QpąZb>ƜãR[¨ōPã ŠŪ6@¤p)ȋ€Ŋ¨¸ŠPv“ ‚NjÕ´~TewnĻŊļX˛6ÂzÔąÆ"MŖĨ ë2ÅÁępj #Gå7uæĻŧ˙S×ŋOZcBŅõāP€eĘ4p†r)Ņ,û‘˛J‘Ečc€ ÉĪ`ö|Ž8§Đ åæUy7aTôĮZ–Y[‰sŒœÕVÁĩ$–.{TŌ°]zŠTšq˜Tmī@ē ‡ØvžôÉ4õõ4Ų>”X ˛Ü,JŗƒéMq60O>Õ ØÅšp)ˇJŌ0Ĩ+eg˜(ašs0^§Jã äĒđAŠæHÚE.܁÷}h°ÉÃŧÔVķ+Čę:ŠŠĐäČŋ”Y™Î~éĸÂ,ŧEŽÃāĸ§?ĨRÜâ÷fx§=ÃŧĻ8ŋ„rMhJwjŠÃ4,HåicšmËŊpĨ+Į]Mäí%CqS ]Ą”‘U5ÂöĒÔ|"úb›øŖši$j@'nhŠi‘AÁaŸJUqŪ€qKüéĨ°j$ŌvrųSڀ&$ Pi…”¸ävĻMæ‡_/{Đí&p?*_­č¨ä(ښ°FŽ\ 1īOĸ‹^ō%tn[ 5,)åÄĒ{ ’’‹€§ĨQžÖg˜H8̌H†ģ“kŒäsPG °‚ąW9æŦPĮ4VØ.\üĪéQĖrh‹2ô"ŽŽE\ VÖīį4˛ g ŖPSå¨PNO5vīNāW´–ŲAāĶ.ækp¸čj×~”’F˛}õ•ĀXˆ1Ģâ”÷Ą@`PFAĄ  ëb>Ų&z┨:‰ã Ģ1YĮ›ÔœŌĩĒ4žfHojwYųԆ=)æYĖģZ3ˇ<‘lÂÍæy„š˛h`P‘žŅsäíę,5Āį*jܖė'ķĸ 7p{ĶL4ŠŌāė)Ü ÷a‡Ŋ;#}WŧŪąsžÕ%Šf„3Œ5HÉ[Ĩ”Ĩ8ÅãڀxZ9,)ŠBār)Í( ›NŖ€Oá tĨÅ☠ä́ ƒŒPÖ§/JkŠpęozp¤¤ŠZ@ihĸŒŌ`(ĸEQK@ E-%ŅԊ EPEPF(ĸ€Ԋ( ĸ–’€ŠZ(=iš)˜Į ZAKH–’ŠZ(ĸ˜Q@! 63Í-TM˙mųÎxíE€°Ō(‘Põ4ĒęųįÉķĢ‚2z-ã)Ŋ؂[Ō…rzLUUg0´ÛĪĒĘ6ô ëHÅRÔo2ĄÁÉ>ÔĨNŌÆjˇeG]ß{ŊLޞr§4îôĀŦŅJLgƒ´ôĢCĨ'z\RĨãeĐz5äČSvĐ_Z´Ę­Ô i‰å”NāAi)ĪŊ2Ũq)#“š˛!@.Fzâ˜-Ā‘X€Ôî"ČĩH KŒũî´éc0ĀėķųĶw˜¤]ŅOCš}ÖTĮ´œįŽîŗ  HnÔ\dŧm´āiĨŗvŊqŠ|“1“Ë@29§ÛĘ$OqÁĒáē3ŒŽ XˇTU>_z;„BĮ5RØ$¨ĘĮ’ŲĢOū­ž† ˛ĘĪ|Ō[ –ĸŧ0)[fŠ[Æ˛4…šņSHĒō ¸ÚJ,,/J*­ŗ…š?)āĶa’iˆaōúŅ`šnŒúT1ĖíÆ)‹9]Ĩ“ ŨiX T …§ Û@'éR,ŠSj,E2ĘX~Z“´ŲfX@ŨÜŅp5ˇ›Ļėm¨æļ’EEŪ0žĩiNG)sEĀĨ-´ŽęĀŽ)Í‚ãĖ0#jŅíA§pąRÚ)#w™jLrēm?1ëŠē:RŠ.3ՁŋĪáKōîd pOzŊĩwtĻŧ))Ë/4\,V’ábCĩG\TS3™"ÜG=…^0FcØWŠŒÚEĮ#Ąĸâ ŋ1ũjڜuéŠeۘŠ,AŗÂ^°}hEà ŲĻ]Hcˇfe˜"ÖĨ–1,Ez:Œ¤-ûÂsš[˛ņÃ͇īŠUķbˆÄ#;‡FĨģŠC g˜qLCŖŽMĘÅÉsšlJŌHŒųÚjʏŨŠį§J§fC\H}iEæÖä*yn.´ŗ×ņāúSÄԈä ՏaL7X‘PŠĶ?Ú#>”K˙!ž”ŦpąĘ# ä͌ę$ØNŊAqÍôY\oc‹eæXãËgĨN˛ ŠįŌŠĖK^*``I2 ’ü>”X R-)*äÔw“éTī…ŨƒĪ$;šO(H÷ˇJEq,a‡CU%ÜÚp/GoZšÕJ[ž=)XEĄĀĻîĩÉ'r6 VŠYψôãŠ,2ķČvž}jĩŒ¯!pįv͊u¤Ąã#ø”ķUí$+$ÛW?5;ĨīPĮ9yY6zX§Ąu:ŠH.rÁAuȤ%Čk†‹n1Ū§Ŧøxž”Ôé0īlc Ą ,ŅQ¤‚@Jœ@™:  E!öĻĮZ]ã#&€Ō“8ë@nqۚÃ&€v 8tĒLép˜sĩģUõā PE!¨nžd å úÔ å=hGŖŪšzPrhÔ´ÃÁ§f€ (¤ Í-Fs×(Â*AņŠ“ŊSˇf‹ÍB~čâ…ŨåÆãqry4X „d¯ešEÉ`=iŪcI)T8Ú9ĻZ’d”žNhTwg`Wt4‘Mæn9Zt‰7 }͊ŠĐpįՍ%ŽU“ uEIUŦųiOĢUœŒHdW™ÔÔN’O"åJ…õĢ.ʃ,p)}=)Üõ ÁĀČĨĨ¤oI€ã4äPmQNP%BčUN ¨āŖRĨŗéSĐ 0+ÛBņ ĐôĻ4lŗģl,âŽR ŅpąRŨZ8ŨHīMļp°Iž=Ēõ4€x"‹Dl8õÍYŒĄ…KcĒG ŽĒÖ¨ĨŲ%Oá@…ķ /ĩG4ļÜڜûĶÚŨIlę)R‘4jŨz{P{u?emŊI¤ˇ ÉĘíe*ÛÉ%C휊TŠC0wP0?:`@–I`8Ģeŧŧ8#žõY-åmŠšXņŠžVdˆž9ĮJ“ŠŖ5^Úf•áČŠņîjFQ¸$Ũ&}ĒÍß6ÍUe˙ÔĩYŧ8ˇĮŊP…Žm‘)e!zf¤–h×đsŌĄ›ū<°¨Ž9ˇ„žšĨ`/UMĖp*Ĩë‰ @zĶĨæâĪN´ÛÕXŊÍt` Rõ4ĖķÅ;îjŸŲįûP—+×ôĻ€š{1ÕÃmeĻ5Ģ´Ë'™ČëVąAéÍÅšwG€ëKr ČܞÂĨĪ~ÔŖ­!t¤‡ŠĨ{pŅ4ešã{ R’3NāTēW6xĮÍéO´;íĀÁãšąõ ātQp*ūåŊ…Q˛uČãœÕųÎ!síTlZ&ÜįŊ a1Ö æWėOļũé˙hÕ´Pn0)‚Ö5nW=ph¸ėÉĘG÷&Ė˛ą˛ÆŒĒOÍM‚ĶÉbĘįP1ķw1–ƒuÔ›ēŽ•4V¯ĨÞŧR<.“™!Á'¨4ØËŧ‘ķŠ€’•O'!ĒÜ6Îäüė*&ŠwĘdž€3¸Hōvž´æ˙Gģ@šÚÔûˆx¤AŊiZââ3´…^æ€pNJžõI,¯ ČŦrÔW-ėG§\ūúXÕ99 ˙‰"#Ö§”tÆ7t¨/¸š.~Ķ845ÍɉÕväô­:ÆŖwSĐ ‚øæxGŊ6E˙NŒ˜â‹/Û<S“R5ÂFFė€zUkĩę iڂķšĸĀXšUV^zÔû€“Ågß}č‡Ŋ:ũČXãÅ֋u][ŖôĨ@ĢŦą¨ū*ŊĐfÄā’â¨ĸí…ZX™Ž&vÉÚ)-”‹Ųr@ëNÂ/ž” bĒį1F@ĮRim&i$eldzR°Ë-N^”Ö§Ž”€QIŽiGJ(Ĩ¤ĨĻE´€RâŠ(ĸŠJZLŌŌRĸŽÔPE¨Q@PAĸƒÖ€ (ĸ€ JZ 6Š DRŌ ZcSŠĸHŠ( ĸŠ)€QER}iö)lgÚŖ‚O9K^””QUžC˛rzqŠrJÉožN´ėåFsšJ‡Íe*\­Ō§€;T9"ÎÂ'<ÔôP+ !ËŗĶaiV=:“SķJiÜ,Vˆˆ§—yĀ<Š-H>cZœĒž ­4Bƒ8\gŌ‹ˆŠ×¤‡?ÄM-Ÿú§?ízB#VU$f’(Z(ŲUŗŪ€"ļų`•ģäĐ‹_7??\Ķâ‰Ö6GÁŊ1„ž@‡aĪLöĻ]đÆAęjÜjU'ĨUš]‹ūëRŊʤJø8=)0' œOAMG‡CN4†BˇQ6yÆ=ĒA"`㚊n̞f#š  ,Äs֝€ģŒŅUŲwA/ˇĄ<õĸ+;F*:Q`,šJŽ%”ÜŧkŒ™§A+HĖŦå8ĸĀOF*g2‡ųqļË*z@9”0*à Ô`ÅmŒdõĨYĐļ?Z†÷īD;nĻĄüéMw¤K*žX­?¯5RũWČ-ģ8ÍX„b5úQ`(āŽzRâ“hUxPԊP(ÅBÖą3†#ž´éĄYĪ%h¸u œԓÛ4ģpĀĐTęUžéÍ+˛ĸåˆŪĀŠXKl`Fõ¨f‚wts†#ĐÕĩ`à äS‰ĸāU˜ĘQ†î)Đ’Ûq&ŦvĨĀ•ÂÅ'‘å1˛ãŌ­ãS,Nd'ļMC˜ĪN•MOüL‰íWŊĒ´E—ĖÉÍ4.ŨŅ LŠGļGˇŪ>ū3š´ČŽĨOCPũ™‚ėķHOJ."+yXÛzƒšŒŋ¸ô)Í\ōWËōĮt¨šŪM…WhŨÔĐfo6͘Œb›lŽđpĀLuĢ+jî*(-ã))ÚÃˇ­0c(udÚĩZ5JÂ& Ō@=)étZčŎĨ&†XúTsČ"@ŨķRãŽĩN˙î =s‘BVģhČķcŊ,—A" TŒÔMĖcÜUäķF ŲĮ֋‘.”˛¯$šYn#^3“íMH—ĘF – Ö ĩÁXrMâH aČĨ#+j”âxûgŠHœ 6˛ž­ š%ąQÜ.øJäŒĶĪAUī˛ Ü‚ $2XTEįĩ"˛öĒ’n6ˇ|ØÍBc“~1ڝ„h”˛h#æŦĻXˇžÍ††Gsq䐠e›Ĩ5Ž-žj¸¨õķļPpWõĒōNnJ!ãĒÂ4%‰g@ 8ëÅEĸÄāĢzTę6JũEHĮb–˜r9§Å/֒Š Ž?ilqJ 0dŌš7f“'v(isڌŠLķ@×.ũyāV’ãT m >æ\š™pj4ŧ ãÖŖ6ņ °dzTŲĸ€ –Ö9_{g"–H@šęŊ Mڒ€3ŽAą‚sŒUšáķĐ āŠČ5VâŪãx\€x­ÉA¸`÷؊RÛM)FgЧŨĀŌ*ēōëVI9§”\eHežGĻęMZ##´¸ đ)FßũIÔōxâ™o/úkŗŒnâ´N”ß-3Ŗ?Jwœ`CzûøĐÔđŒå¯NĻĨtIAĨ@„;h4Ŗ“<͇4 (Å´”ĸ’@ ֖’Š ¨Ĩ ŒQE”´bjJ)h(Ĩĸ€ JZ((ĸŠ(ĸŠ(ĸŠCEŠ :RŌ Z(§SE--Q@ ESĸŠ(áûT_ę~­SKŸ-°2qQZ+,;X`Ķč *åä*ÁĮŊG#yļšĮ ķŠ™K“œQxėō$ô4Ä%ĶŠŽ=§œŠļŋtU)€>Rí‰É¯tzRc@Ü)õĒ2ŠÜ1s¸šŊUoŋէքÆŌ P3d0ÍX'‹ žÂ 3’7€6Š’YJs“Rö¨LĒ%TūõHd@pX@ŖĩŽäS]<Ä+Ķ4€pæ—Ū™~Z…ÎqN  ‚)“ 1cfīARPM65Ų”îĢčM—ĨV[wDuW7­ Ÿe gëVr(íNáb¤‘ļ虔°Q‚†[–,¤Uē1Ō‹…а6nĨ,1E™Ė’žûĒŅԐ*Šų@\,Wļ!c˜ž9¨ŖČąr:æŦĩē'žzŒŅē¤e9 ͏ˆ–ö¨cžhģȖīOHūAڒæ)d•@!}éhU{ÉY*œ8Š×$r0j ¸‹Ē˛ŽTæČo"ōā\A<槖o&ĮŪ P\ĘdTį4ˇ$2E ÉU<ÕzĖŅĖąģ ÜvĢuUL 2\ˇ¨íVi1ĸ Ž–2šQu<†^üІ÷æ4é”5ô`ާaĮ:JHSČėiŌ}Â2EUéŠqĮËHŦ^ņÃ.å^ôĨ`,[D°Į€sžĻ–ãiŗƒÅVGx`”° ōæ•Ą˙C/“¸Œžh°°ļëšĩŠĢųV!ĪaÅEᏈKæd“÷h°Å-V–įc" ËŋjX§s3Dānĩ+ XÚSpÁ— Úύ`œĘîĨpV]!vNržÔ>(¨â™%ÎĶČę)ZdC‚ÜĐÅ!Ĩr)zĐC+iERŗézjĖîc˜uí@ĐUIɚ†Õ]ba$žyŠč0éMØģ÷ŊiÔ *ø;cåĪ&Ÿ=ËÅ:ĄPCtŠŨCŽdP ÄTHĘu5b[qôXFˆŖ85\"(ŪØ&’)㑰¯“Hd7syj@'qũ*krÆÕK’;ÕmGîäÆŦÁ˙Šô§ĐfcōČ#\ãëOK‡IÄrĀôaQ›2ĖN2§Ūĸ‘w]ĸ';qŸjjũhéÕ# (ĸ€KEbŠ(ĻŌ–“Ŋ/J@!ëKI֖€ ZJ)€´QEQE ZJ 0’Š)QGj(ĸƒE( ĨĸŠJ)qI@%-€Š(#4PQIKLbŅE€Z))hĸŠ)€´QE”ÉåĮģŋĨ86T1ãŠ:’Ŗ[Ÿ­K%(¤ãĩ( ¤&—Ŋ!  ×ā˜ÕŊ XB6aHč$B­ŌĄōĻ)ŗxÚ=Š€L|Éã‹'i8Ĩˆėĸ팊WŒ‰#u 0i7œķ8ĀPi<ÄIŽvœT’ÎŅėĀw\Ķ,Ø'Š9§ŨŽčIîŧŅÔDžiķ‚l?^Ô,ˆō•ū!׊mą.ĨÛĢS!9ŧ”ũ(°‰ŗ†S‡=*”1ĢÜĖ[ĸž”û2q(=8ĸÃ-QŠŠMŧ¸õ8§Į#-žö94ŦŒfŒT0ŧŒĀ6Ær*Å'z…‚ ’÷ īKMVVåH4š õĸ‚3J(¸¤ Á÷§QŪ€ĒŨ})(~ҚxŌĐ/nKrą§ĸ*(USé:PŽ*9āķSЎEKGZĨ434[p8ė;ŌËÉlŋ.{UÑīFr)Ü,TY؊ǯsĐäU°(ĀĨ¤Iåu}ĶQZ_­^tWÆáœPˆ¨0Ē;ˆĒ0oÎ{/•$$5û‘ØU‰ Iã}E$VÉĻE'š.7HĨiS÷‡Ĩ ČÖŀĀÛŌžĐĘ „qĩēƒNkqö-zâ€"ļOôQŒr3I§õ“ëO†9㉔ĀĀ–QÉ}ëŒķL@e–Yy :ŪFbčĮ%M6ÛtRIŊœŅgËĘOų E,pņ“(ķä*¸ĘõÍ2Õˇ]ČŪŊ)! ˛Ę¯÷‰â€,Į>ës&9Š‚ītE´‚ŅötĮįM‹M'ØŌb)7ÄwŠĨTĩ;l××5cx*0A>ԘÎEqp @z“ÚĨ'+Tõ<…'Žh@[Ž@҇ėiĘÁēT Ų‘ūÍVˇY$ļ]­›­CpÎ)r Sxäi9|(4–ķˇ|žTõ§`,ã1°ĪåUôöbŌb@=ę8ÚWˆÉģ< vœ W>ôŊրģ{ĶPõĄĖyéHcÅ/Ĩ@ō`NĐ :¸āķ@b—Ut¸RØÜ3ŪĨYUøF€E!Pà 2(czdPŒ{ 3­â¨a¨• vŅ`44wĄ*)}¨1ų”ôĨTTáT/ŌGրǎŪũE"€Ŗ€ö§Q@ŧk(à ŌGo6pI§5(¤āPW0ųņlÎ)`‹Ęˆ'\TŧLqEĀZĨöyM┐@5qrG"”Đ;¸$’Tu…Ļ\Å,Ž„F0ŧÕîÔ)î!žZ:ę”Ôˇ‰rĻ IõĨ•ÆPԁ1¨5bØnˇOaSc=FhEĀŖsv#ũÚúš….FHv=k@ÛDI%ĻũŽwÅ;Ą’E‰AvžŦwjŊŨš¸UÁÁ$ųQ*’:Ō(éšÍHĨ¤ŊŠ€QIFhԔ Z@QG´” Z`ĨÕéO ĸŠ(Ŗ­´ JZJ)i(¤IKEvĸŠAKE Š^Ԕ JZJ Q@)i)iŒ)i)iRŌRĐKIK@QژoW;ri÷MļØã¯JmŲâ\ķģš[ąūĮ¨Ļ"3ņ ĄjIži’ ĮM6\F°;ŠA“¨uíLCŖ>]ÃD:‘Vj›ķ¨aW&46YV$ÜÔÁ&×aā‚x§iė8īž\(šÉQŸĨ$pFšPh¸ã¸TŖŧMY_ŧxëL{XĖŪi57j@Uē\ÄW8br*YĘVEÃãķĢSÁæ… á”ņMHMæHĀļ01LEX’:TļØ7Ōíāb”ÛʗHđCzö§[ÛÉī#ãæĻY<ÃzČŽyĢļą>oÛéZ,2ŧž+:,ķŽ„c4 &iÛĖXc Ԛ}ĩÁyš'#¸¨6Ŧ7ßŧûŦ:Õ¨Da1ãwֆ2nõBōYéUsØw̝ģĩJ|ũž<ö &yÂŽįĘûSŖœH6ôoCU¯IiŖŗS%ģ’FaĮj,!EĐl'š‘Ø0ų[ĨUždY‚*hö˜Aîë@ ŪųŒgZŗŋƒ“ŒVmĒ#\Éėx§ą-zcl•…ō8lãĩ)=ęĨž˙:@ŲÛ5lwĨa‹Vš‡ŒÕI&u𧆠:9]#‘Ĩ/J,ƒķ7 ûĩDM(ŒĘ@ŲÖŦ5ĀKa(‹?JAPĩĘŦ )…2ų™ųH  ¨^FMVQ°#vj|‡VįĨIüTüUq:pÆŦŽh1M< y¨äāRIrN)Qƒ.AÍAuÍĢqړO]ļ “Ö˜9ĨĶKbœƒŊāâQŋŪŠâŠ{R (ĸ@ƌĨˇäņíRŌRĶ(Ĩ¤ ¤´”€(ĸ–€Š)h(ŖPRŠ( Š-%PE%-¤4)(  4´”´ )hĸ€ (ĸ˜ KIK@-% íƒ4\,9x@*ĻĄ‰éģšē:ĶdeBøP˜Č ĖldācĒPPzcšš;mŒ 98č)ܛŸ7ļ(j ŽE[ÆĒÂŪAuædb­vĄÜ˙¨nH8íTâķž ĘĮ ÕËŖļ…-ŸJŠÃũYB¤cÔQĐBM3™R ÛN2ƖÚSæē3gozdëåŨųŒ>F"ŨœÆ¸r@Ļg'˜äĪ\ԉqž6m¸ĀëUã.ö†1Œv&Ĩcö{Aœ7j@:; @ îč}jC*ęcœU;ĸvÂ0ô%÷üz¨ĸĀXŠDb@`M+ΊJ’3ÜS"P d/Z¯g‡;Œœ÷ĸà R äŦ:vĢŲæ¨ØãΔûÕ˛Ø0%ĸ‘z )ĨˆôÄHÛK|Ī##‘“ŒT)ΤÔûķ˙jŸQSîŒõÅEq#ÆÉąwdÔO;D~0};SæšōŲŽwwĨaܙ‰+éPËra(6ä7z|Ķ,j ōÍĐU;™7´Cpy€ŌëHN)&œqŠ@Š3Î)ŪԔ„ķZwlTRHcQZ\ŪLũĐxĸĀYéKŪĢ]Nņ˛"pÎzĶimŨLŒOX Š¸\ô¨įŸbŽÁš› ĒĸäĮ(2ĨyãIA¤HŖ„P)YÕ#ßÔ{UsxåЁœž” ĩŽjíVf I ;Š•:îSiÔÚŖÄœ¯Cۈā(rÎXÆjqHÄOX@îîd!˛0)-­ä…ļ’ ¸¸# äREĀ MÃ_•ZtđŧwdRŒ*čÍ\ öÆF.ĖģW°ŠÂŌõŖĩgKÆĸœ šö"ÖíˇōĢeG\ 1EĀ ]ŗČČÉ(eaĻ`ŽqVūÍũÛE=Đ2#ƒNāR”ĻĨ5ÁūÎ\1S}… .ØíĪJK•X,œ° ."“ĖļŒ ;¸§]§‘m…ãqæ–C,6jë'aÚĻŲöĢE Ԋ¨a‘ br9Íi aîëŠĒŠtŠ"mnÍ\{R`ĒßČŅ õ'kŽpjĩô-4`É8Ą ‚d"НĮ8椁üŊ<1ôĻË/™fSkn)c_7M(ČÄ'›"Û ‰ÚŦÛČdŒ7­VŠHElj+Õjäxō×hĀ#Ĩ&1ŽNEJ: F\ԁH¤–Š(ĸŠ(ĸ–˜ Kš)(h¤ĸ€ 3E€ZJ( ¤ĸŠ(ĸŠ)hĸ€ JZJ3IKA ĸŠ(P(´QE-QL–’–€ (ĸ€*I¸ŨÆ ī‘R]9HĀ4Æ9ŋAč(ģÉ´ÉÄĮ:"ƒĪSV&”Ec×ŌĄ.c¸@NāÔ^í1s×ĩOoIî3O¨â‰Gĩ>ÅíEWŊ$B œsL,đ˜ūbÁēæ‚åē(ëE ĸ–ÜTgÖŖ’į}ĒcīI@Ël¯@HžQ„įjJĸāUČî…Ô Ŋķ֝$î— ü‡ŒÕƒLtŪęOEæ˜Ĩ )Vë>|DũÜĶŽHķĄķS:+ŽdT-h R‚:SŲ‰{Ä ŲiĐÂë+ą#°§K %YŊÍ,129.Ų'Ō€%ŠMŲÍ(i ö¤2­‘ųĨ>ô­<Ģ—?pTvŒBĘW­G+î€|ą=*Ŧ#ENā ;ŊG Ėc!Š$ŠœˇP'ŒŒ†Ļ\ Å&GUxP3Į4ėŨĀōiAǁbÖC'štQ¸T“æ‹ģÆ)jœM$ĄČ|xŠ4`FāqÍËdfŠĢōʅļŽ*Uœ4&L:ŠAraQÉ0IprÕ]Ŗ…8#'˙9M‡īv  7 ؤYÉ ŲĮZŠVÆyÁÅ6ÖY˛ w"€ŗ¸QP[L%^:拒Æ-¨IĮ€ąô ŠŽ)Rrj@(që@¤<‚{¯"ER¤įŌ€'*`€iŽĄļ85Ú@eYĄ=3Sõæ€(Æąũ…‰?1Í>Î1-ĻŲÆr*sml•ëRŽS¸ˆÍr[=ŽzQ=¯ r6ūĩ`“@Ž1‰ØÂžxÅV[ya,#ĢõsĩĨ…´RÅ+exc֒äĘŗ(PvÕņČ¤Ûž´î¯AJi1ŠZ@eÆãû@ˇbi÷Įæ@OFéWŒIģ;F~”¯oË 'ÜS¸Š7eZÜrČSn¸{uî]X" ģbæ’[XåpíGĨŧßņû?Ũ¤ŧÁx}sW$dA^„Uylˇ°a!Č  ķˇ<͆j"/nT›Ö–Ö&H6šæ‹#6Ū¤íYđ‰Rûkœæ´JV^áU†O8ĒúW"O­X¸P#f'U},œgš}I¤6tĒ›˜Ęĸį UĢÄ+q¸ĘŽ´Ûâ’ĸė ąĪëÍ;íJËģkuÅL\ ž*’äHŅzļjk“ķƝ‰æ•€˛XpsKÁĒ­ˆŽP/F)#,n%ŽĸÚn‚=*ĩ´ŽČێHĄnŸs†Q•íž´X =č>ôÕl¨$`šQÍ ŠcHĒ~cJޤđƒī@<ZN)x ĨíAŖĩ U!@&šaŒŠ4üqGj.U 1J)hĐũßj¯olqƒSÜ2'DåŊ)ļ{Ö=Ž„bŸAÍ­°Ozš%o!TŒJžŒQp)Ā|čųääQ ˇrxŨ“ŠļW>•ÉÄ-ôĸábÕšõĻBŗ˜úįë(ŅíÆážjĶÄ­—Ņ}¨l ÖaL YAį#چÁÔF;-O Ú2EF-˜\yģķ튄1kæãpĨ=×ÎŪ¸R2=áuŸÍˆHäpIdGķ0 @Ų*¤%ĪzE˜ēI!r0~QKmģ|ļ\4CūŽŒ’ĻyãŽ´Āąi!–ÍÔTāÕxÜ­ą}›{Ie9œ6á‚*@°j†Ļ0ņšžzņT5CĖ~ĸšë§YR4^=jŲe† \ā2j­ŪĶf¸Å5ܝ8o“@‹kqpĄÁ'Ĩ;ÍMå7|Ū•#C°åFj4Ãj,GeĨa––@Ė@<ŠU™ Ā=*œgnĄ'Ļ).ĄŲ‰—בNÂ/îā8éU­dɜ–įéS‚ ˜īHcĮvϝRM(ûƀŠbIö§ž•¨ėŦņ@G"HHS’:Ķ•æl ŖĻd=ķK¨îW‰ē <Ķļĸ-¤ŅąĀ`M?éT.d,F[=Ēém‘‚z╆"Ī“ËŨķúT‡ŗ `׏#sOÔdeEUāE„ZßúfŸŠŖ2G¨(0ā Yˇ—ˎWcÍ; z‹!“1Š:Ō ŌCpFGŊ .v¨ØT7&]ƒÉ#9æĻ;w\s@ €F)ĢBøSņG€Ęޏa‘Q HKW8é“Sbĸ•üļ“Š‘ãWB„qUšĖ‘°ĘÅ=*ĖRŦŠšOãŪ‹ˆŽ8–(ö ĀĒĐZIɑŸįWx#ƒšJ.ŠĢ¨ 0‘ĻėõÅZĨ e7I †Đŋ61Š‹,, e61Ō´ Zw¤+%šŦ‹ÜĶžÃ`ˑzˇIži\ļ<ĻĪĨRŌđDŸZ¸č$]§8öĻAl1(O=AŖ ˆ/ûTA¸Œõ¤ŋ‰,‰€ĀŒcŊ]xÖEà ÔbÖ0yÉö&Ā|g÷JĖqĮ4Ēęã*Āj&Ėˆ 8ÍCglÖáƒ09¤Œf“`Í>@ÆėŖoę(NzĶÍĸ€šÃ4ę1@ l` ųqNĀôĨ>´ĖüĸœŊ(ĀÍ.8 7QO)ĨA=iŨE´”RŠ(ĸŠ))i(hĸŠ(ĸŠ@QEQEQE”´”QKŠJ(ĸŠJ(ÍB–’–˜ÅĸŠZ(ĸŠ@´QLŠ( –ŠJ-%PRöĸŠ))ԔŨ õ?J5^šwjjČŦÅAų‡Zg’<˙3ڛq9V^ĢÚ§ŖĨ;]ä”HëˇhĀ9ŠywĪJģH0zŠ.*Z7ČĮ§Íšl­ûŅ(_“8'ÖŽ˜×``Ôml›1EÄ8˛íŨœ U!†AČĻ<*`)“´SmŦ>ŧP1.°b|ŽÕX [d`0ÄõĢw;ÄU1“PKĸ(ãŲ§ĩ4!\4M Ğš54ĸVq°í\u¨&,Ά)ÎHˇ’8´,–ˆ“ÉÄēfBÁ:uĻZãČ|ûŅÍúd“E€°ŗ†‡Ėã‹p†1'8¨a˙øĐ¸]<ũ +l8+ģ#‹"7B T•ˆŗG|PüØđ˜­ Š˙ņū=6ÕÕûĩGū_ū‹WîŠĐî*Ĩád–2Ŧy=)÷2˛ēFŸyģÔ‡ÂįšĨ6DĨHāÔ2Ü™Az•îdAô¤ …aČRp{—Ŋ79>”‚TÉ]Ã"€@¤VĄ—#sJ(īÅ5dFbĄ#­:—‡‘J:PŽ1H¨Ģœ>”âØö¨n$hÕJ)lœq@TrÃØŪšÅ;¨÷ĨØá$dŽÄŌĪn%Œ ;@ŠŠG#4\ ŖMŦÛĒ9-œL%‰€=ķV{Đh¸#ļuē21Í$Š,˛mdũØéƒÖŽtĸ‹ˆŖf’ÆåH^ƖâIcš]Ŗå>Õv”€zŠwŊĶ´KŊF}¨ļ›ÎŒą9Š$ĄÚ2}éļŅyQm=IÉ cųĮ5‚BxMMšlą‰#*Iô¤-0ņ&i÷r• aģÔļöĸÅXœö4ŗÛ‰ŠēđëĐĶę"ŒĐĩ› #$¯zĩ<éå( îa‘K$ĖČT/ˇzŗåŽĐ6ƒŽ:PK¸YcäN=jÕØIcVc´AĨšĐĩĘē€vŠŽaķaÚ;tĻ)ˇĩ˛äŠP:Žõ-§ƒ>´ÖĖBoŠ5ia AÎ ‚2=iW;T´’Y%euāw̘ÁÍHĘ7r<2ƒÚŦĪpa…dۜÕMDŒ…Ī9Í>ņą\ō)ˆ”Ūâ5v‚žõ(1wǎl§OLœ 6LņFаwĸĀ[ûĀžĩWQ´cî÷4ˆ—ŠāąÍ.ĸßēÅ p§ļËîj)î13īRʧTļYû"zškXåų› ãĩRķŧ™Ŗt#õ\֐äfŗ^1-ĀÛÄQ÷­ĐcĨ wĨĻœæ—šCį¨Ēũ–R†<œãЎ4žTlĮ°ŦģrĻfž@O=1Mē÷­d, ÷ĢJC.ETLŪŠbp™āT˛Ü,%S˜ôÆŨÎÖā0PVϊ@ЉŒÕ é Ļ8đAŨČ̆XĸPĶÅ1†d™IC*JŽæ;h§æĄĶĻy7obM+ ŊEw RĶM;Ŋ&xĸjķ@éGz(Í!ĸ 4f˜ŊM9ĀĨ4ÕÆÚDÉÍ (ëQąÁŠõĻ)sHhw§ JQ@Q@Q@Š8 Š( ŠJZ@Š( Š( ŒQEéM%­Q@ EP ZJZc–’–-%´QE0 (ĸ€ ŠQڊ(ĸ–€ F8ã8Ĩ¤ÎUĩ™¤‘÷tÔņylY“Šęj?ģ#zą¨ãb°Lã׊vp2“€A4ėU7Q áĶî$txʓķvĸÃ,ԁUŧ×IÕ5YÍ šJ(ö ™pXéNĀÆ1TnôĄÅ:\Û\ Rv7jvįz^ô{ŅHŊ!įŠ^õ;‰‚ų}hû‘ĪZaļˆŠ]¸Õ%-EˆP Dm–PIĮĨZĸĀ Ė,Ŋ 65›xÜ0ëVqīEŪ.÷”ltĢãîŌҚWĨĀŲs‡îĶ'•^ę § ĩx€x#4Ãd‚PfĀ¯yĖđũiˇ<ŨÄ?Jŗ$+(Č#ĄĒ&´ÕÏ^ô>zúÕ)5⎙ÕüUGˇ—í`Æ;P„1—x¨„í#ĨHXÜ]É!WĶŊ"E/ڄ…F:uĨ*m%víLeā,NŖļSö‰Nz}ęHŪáæ …< Ôp8Žyƒ’Ũ(W–rÍ´aTg'ŊIåáķZ¯æ–o“ā/­>ĶЁÛ9¤ é‘NPņÖ§{¯-•?7J‚Ā)YÁɧj8%āôĸĀYšelåēIĘę@<Ž ÔRČžb/–YēŠŽŲ‰Ŋ”‘ƒŽ”XcáûH@~Nõs#ę†ĐuĮJēė:PÄô߰ÌGКbÕ×- øĒķ&Ļåŋ€qV  'zFļ )‘XŠ=qŪ€*ģ 5?öW­;PÁhŅGĖŨęQfĸ]ĘØ`ûĶŽ-L˛#+chĮ4ņ häž*kXÕ!P1œsL¸ĩ/ ĸ•9椂6DmÄn>¨`ŠÚÛÍėîß/ÖŽš@Rŋ™—lh~f¨.UāōÂģnnŧÔ׹‘čīJ/•cĘõ1Ĩá:â’WXl.2ÃX ]y´›H õ¤Šī|lÛGĸ ąÉôÍVĩų-d™ģįX âē •<•4S,ņ’šüjŒ’ŅĨ8qšŸLLBĖˆĐĐTaO4åĀRãĩ(R=NV‘Ķ4Ē01@ zP)OJæ-SĸŠ P( Š3E € ( t¤⒊(Ĩ¤ŖŊ-%-%†”ôŖ­%Q@h Ņ@)i)h´QE-Q@ @¤ĨĻA ž”SePҰn˜ DpLeg=â•ĻÚûB–=ņQ،FĮÔĶ#p^bN 8ÄZW 쇂Dc€Ų5 Qâķƒ“œÔ,Ä&âĄYOwĸÁr÷zu1yúĶŗHbŌ‘Š„Ũ —Ë æŸįF cë@¤2ÛXāöĻÅnË ŖķUžÔS¸d‘V"¸ō}inx–ŧUĒ:öĸāUwVŊŒƒÆ*ÃJˆáXüƔ*“Ŗ?JŽKu‘Ã“Č  Ĩ÷¤Ĩ€Ąq“~˜<Նƒ|Ąä9ÛĐ ŠH%7"PŪŽsMąæRYœÉ…€ ,r3ZoĪĖW!”Č 1čjH›e‹nāãĀt7/&ĀSƒß4圛ƒ_zK<tõĻ!ũĪ ¤2O´(lđqšœv5A‹Bäā´ĸ4€ ֔Pî¨Ĩ˜ā Ž+hĸ%”riŗZG3îbsMąžĒÁ}jĀ`@ ņë@ÉlÃ*Āc8ĻGgåÍæoÉī‘R›ˆˇãxŠs‘íEĀĢ5ģ´âHÛ9Ļ^Į'’Ĩ[îõ5wS$eM­ŌĀŽŅ™­Ôˇ\RŨ l)$ņÅHĒB¯AKڐŦ2AúRLĻ+ՏŒWēQ€zŒzwŦ{%לu¨ėŲG NAĢęđJ‰­ãf%."­Ķ‡ĩŔē›tßč€zãtŒ› üž•˛…”ŽqõĸāWģŨöhŗĐšw“æ:“qŽ*ҁ >YÉQQ%˜¤,ĢĐQp!¸Â߯}EGpž=ÍX’Íš4IĪĄĻÜ[M++)/AL €üßZ¯|æ4ܧĨO’Ē_īcšeĖtEG^ĸ’RXąmœœã4ąHbĩ=)fķßaƒ‚{RÃ’ČĻ`;ĶĪ:Efķâ~īĩ]„ī@ŪĸŠĮpąÂą´L7‘y|f‹}ĨT ‚iáãŊgßdO’i÷ ĐĪÃb‹ uû”€buX„î‰NrHSRæ }éí0ˇˇ Žp1@ķFęŖö†BŒø!˙Jq™„ė‰ƒžiX éOČÉb0{Šy ĀëEC%Â#mĪ#¨†áEšrX—ëU-.ŒāîĀ#ŌŦ“Å#2Ž7fŠ­:¤’"šäœ¸^(ßƊnņ=hšTˆs€x¤€õŖŠha€sÁĨ¤php0sMڄchÅ;hZG˜](QōĩgĩW9Ú3ôĨR)šËc4˛"ʸq‘LH"˛‹ƒíNÉŒņO  ĪjŦåՊ1ëŠzÛĒDQ:ž¤Ô´´\ ļöžCŸŸ öĻ]Úŧ˛+!QŽÆŽÅ'$tÅ;BhnY҈_—Ō’tåŧŋģéZ8ĸ‹ˆŖ|ŦÍãĄäS.ÚH‰Sĩy­™?J§\ ƒ ¨É'šmĘ,ãtįhŖ€zĶHÆ? .-öė#szgĨ6H–idÃu÷Ģ‹JûÕiŪ9ŗŽO­–Ī ßÉĢ=E$h¨ģT`RŌ—ŗ]L7a˛zՔ€ÅĄˆ äĶåĩŨ'˜ąˆäĶŌ3ä˜Ų‹gŊ1ôĐ>Ė9Í[÷ĒļöŌBøŪ6ÂŽ­&u÷Ës^zvŖ•ōŲIœQ{ ŌLŦąåWĐ͝RY=¨N94ĀeÉxV7yëK¨‚cFŨÁ=)—jíh‰jKėĩŦdÁÉ  ´VY?1 PÃq!…X&FyÅHĶ ,Üãæ“Me6å;æ€.Nņk–÷5$WœÆÃ*˛+R9č퓊 —­g™LĨTd¯_j‚ÔîÔ$=)Ö ™f ×4@@ÔĨĮJ¸gA7”OÍØRyņŗė 7zUY°u8ũ…6uŨŠ ^(°w„ûÄ ]čëō~•šęŌ_˜đ*ĘĀĐĖŌ yxč(°”ü´¨;æĒ%ä<ōjĖ,Ž›”äR§­?To֞>č Ĩ¤Ĩ Š QE˜ĸ–Š(ĸŠ(Į4 Z(ĸ’QÎhhÍĨ%- ĸƒ@čĸ€ )i:ĐQFh  úQIJ(´QE-QL–Š(Ĩ¤Ĩ AEPH})h b}i įŒĶ¨ Eeĩ).õΏ!ūĐ$$U“H:͏Š4Sd7\RF­r;ŒĢTëEÄW˛#Év¨žVx¤l¨1ÜÕĐôTfŪ"OË֋įũ0+DŦČāãh§u1ķĀĻ,RnØ:cŊ0 |Á#,OJˇnBĄĮ>õÉĄ,#\†<J’y$Š eģņH ûš3Šd-æFŒdT7.Ë$xû¤ķE†GŨw#wĢpehđrĸĢڏßH}úĶĸ9ŧ”úSb9–BvöëJ%BÛC Žĩ^Ī™%#ûÔŲaģ' )Xw.V)Í)éŠŦ¸ˇˇiSÍCķ–PXš<Ņ`//Ŋ/ZŠ<˛G,{O ØĶ–Yâ7Į#ŖëļĄĶá?4įq¤úLúҜĶpK ;" žâ(æ IŨč*FČqŠ­qFÍ7SīB(ŧ‡$nįԟņĖp’:Ö}‚%iXqVV5ĩw‘†íM .GŌĒÅqž]„$dgŊ=gO0ŠaHdæPųéælÜ3UnîŪ9‚FßZhQLÉĨIÎÉ c‰¤Üéi€ūķ‘@Å!Ŋ œ BŖĀĮĨ5QĒ>”ėŌ7ZI"ŽL_ƈāŽ,”^Oz~ih¸Ŋē3īVö¨ūÆ_1ŠôõĢT×!FOA@MoæH˛+muīL6’}Ąeķ3ŽŧTąÜÅ+mSĪĨMÍŦđ2ÍŪG­=g˜3¨LõĢiHô DF(Ør‹ųSÕUW ¸¤é@Į`wŖ”ƒ\æˆÉAĮR˛ĒۗéW(Nh¸n ûTyč;Ō–ß|ĄNp*éPz€ihvҟZ.+ZVu€ /=iփũ>ÆĨkxؒAį¨Í"Û퍑\€h¸ØŨ7ûƧ˜áú ŽŪ„XŠŲwŠŊFgBĨávÆ_ą§ÜĢ"ß÷ŗƒOHĨ‡(Ģ•'ƒš[Ä}‘œ´ķŠb,ÆģIÅ2į&Ũū”ą9‘7ÅE{¸BÄ*Vã"ļuKV מ)ÖIåŖģœĪ4Xа8Č9Š.ŋãÕđ*„jČ ´„'ƒNy‘CUŌ${eŪĮm n‰{qJĀ[Ŗŗ*œ‘MŽâ78ŨÍ/’‹—6ÜuĒpˇ–Ę’§á¨ETeˆۘŽžRöĒwdžTەŊiöÁÖåŽŨĒh°hīŠSE!†)rUžvķ–ˆÜz“Ú˜ķKˆÛFĸĀ]Ļ€7fĒÅ3‹)°N:ŌEpōĖëēxĸĀ\ĨĒĐÜYԌĻ‹°$(ĀįØPžôÖ8¨ė<…@9slnàĐå°3J§"ĸ2+ŕ9č¤BÜ3é@QF@îu4´™¤.3ŒĐŗÅ™ @ 3MpJ°Č4ŊúŅÁ Cqqž´ŅkrázÔĸ—P;Tw(#ą|ÄõĢ&ō›.K°ÆjŋŲexļĘßwî☁-”¤G8#ëLÂÍŠp2ŠáIYČģB }jo*Ũ9U8b0Gj[×Û*F23×[|ךH@9§ŨDÂxåU,P*X<֔ŗ.ÄĮր'Îjœ˛ąģXãlæŽâŗ ŦwÎĶ´ô4 ,EpėŌ!ÃčE5&ww‹9aŪŠYmQ÷j%>Tŗ§ĨK ÁgdnĒqšYîvÉąFX š‚Á2wˇ%J[E2M30Ī=čxîD°—‚§šz]ÆÃ$=qÅUše[b#°HĨŧũŨ”qŽô ŧ’,‹šO†hČ?0$U9_Ȱ= 5GĻî#æ<æ‹4äß,’€8¤Á Õ;$"ˁÕĒŧŪâHÕČQ֍ÆjUiVGģ]¤„Ÿz…ä’ÚØ#7īāAJ]–â$F'ûԄ^ŖŊ—šCŅڊ(Į ZA@ KE Š(Ļ(ĸŠ(RĐP)i)P( u ¤Ĩĸ€ QŠ)(Å-Pi)h ĸ–Đ)MŸKIK@ÅĸŠ(ĨĸŠ`QEg&–Ģ]Čę˜QÁī@‰ō -Dŋ%¸cŲsUüÆ YÎIāS°h¨^RH°ĸ)‹>ĮnŖŪ‹.8Ĩí@Ĩ¤j ŗˆHîjÁ¤ ČÍ0+F@ŗÎz H˜ C“ÚŦ”MĨvŒo‘(ĸāW”ŖÂ§Š5#|×hŦ2įé ķJÄmč(’&,ޘÜ)ˆfÛøĒĪĒŠÂį{.Aî)ŌÉ"\*¨ųOĩ ,HĮš‚k'æĨ ¸;ŌņĀĒ7//œŽxÅ^íTŽ7Q‚zS@Z”•ąÔ Ģ G´`@Ū^õbáü´ŨŒûUO!ö TŒã$SB-Û0)~žõškäPx&¤†P҇cŠ…ß™J@]ÅVydûbƧåÅYĪåTŲļNdã,p´!—hÅ!=ģŌæ E&hb6“šZnõÎ7 Õ+id{’7ƒÖ‹…~ĒŖÍ;ËôQíPy’}Ģfߓib‚Ą”†œuĒļ×I3#ÜP„Š4$ǁšyŒšZ(ˇØ6wv‰í Ė>1͊ŗHh¸ hËA°ļN1š‡ėŌ6ÅvRĒsVč  w8™fˆdČõŠ-ÄŦĖŌ.ßAS“ŠZ.%žaw˛@B’qW;qÖĄ1šķ$ ÷}Ēz ĀÅ~Ž˙t÷ĸåÃŨ&WjņUa†zO%6íØ1NāAIJüƒ/ІÔââRŧjäp¤d”P 5­ĸ-¸ŽO^zŅp+Y°i§#šĻŨƒ¤ŖąÁĢQ[$NĖšįĩ0ųДŅqZōb>÷J„&ŖĶŒf¯GÄTôXÚJ.ŧÕeŅp ü%šÚ1“ÚŖō™ĸCx`zúÕģ˜|øļ÷KpĄPū*:Ķ”¸S &ÔKl(r=*í"qœSĄb×îHä š €îP‚ėh7ae(O5=ķšiĩ2Ĩäs+œgšŠ/:’{Q&Vū=ŊúĐÜęCéE€žxŖ‡o•‡zH0GJ§+—ŧ Œ…íKDĖKŒ'aE€ŗĘĖĖ#mLOsT,#Rō7ŖRI)–â@ĖB¯ -¨î^ķtĨjŖĖ-¤'Ēt4øŪG)ļ@ĘzJV —Š /aM~œPŽ´Öä ĢzːddjKYKÛaŗ‘Ü÷ĸĀ\ā v8æ¨ũą’2võĢiŒFŽÍ€Ũ(cŌ“ ž‚™Š(ų4Ų%H,րîĸ‘ö+|Õ8÷Ŧ¤Úuˇ{VĻxĄ€´Qž9ĻoÅ:jBĀuéJ=({RČŒŒĐ{ŌUĐĄ- ${ai#9Í$’ˆ“sŠ`$VņBÄĸāžôĮ´ å•ĘįŽ)aģŠWžjCĶü â¨EŲLę_‡JŸrŒdT.Ŋüax8¤ģĘL ŠJÛ֕€Ŋ#`fžŧŒÕ“jIøĶKd‡k’Xķ“E€Đ4Į5Vūi!Ddîiˆ÷Î˙šˇ=)Xw-ÁÅUŗšI&3d -ä’XØŖc§­3NÍ.E04Š|ƐqšUŠn”&qÍ Ō•~í.i)h –Š:ĐKIE-Q@-%RŅEŌ’ŒŌĐ0Í  –ŽÔP)Ĩ Ĩĸ@( Q@┐))h€įĨ>Q@ ESĸŠ(Ŗ­^ęb€*õ& &ÕÎvŠBÁ$đDŗļ2a Āæ€$‘đNr;Šj[ĸ6îIõ5.p3MGWS‘@ Õį1Įj–Ž(œ*BK})mdcÁjļQO;E.=)ÜV+ƒÃ̀*ɨ…¸ĮĩJFh^äƒ ō)CųVŠG^‚ĸ’ 8ÆwtŠgŒ‹P¸åiˆO2Hļ—9 y§Ípb‘WnCT2°‘Qīg&(ę5'ĨLŗƒ&ÂĨZ•įHÎķPoרQŗËŧdÅ+Ë*ę゠AgōöųŠļQ CR[ÆœrGĖhõ!ĒÂb–ģĪ$qšˆĖč¨åōXō=(°î]\š\R)ã4š8æ ô¤īA`ĩF.#Î7 Ч“IB˛°ĘqI¸āƒ@ ۊ¤Ī´ķĀÍGÉ);O"ĀŽŪÛČv;ŗž•g”Ŋ R(Åįĸ€ƒKŪŽÔM­Ļ€Š†—ĩĐ/Ũ¤îiØâš€P:RŽ”b€Ȥoģ֝Ž)¸ (<Ž .i´Ŋ1C0M#HÅ JÃ"ƒCgPƒ 1Kڕ~č¤4Ōy¤ĶzŊ/G á°iH曌žiįƒ@N:Ržĸ”Ķz°ė÷ĨÜ3HGjOâ f€sL=y§q@ š\Ô`|ÄĐÉ  )1šjÄûRŽĻ€ Ašų¸ Pi9Íâ€Ô žô€åsH§Ž(㎴RnÍ)éHšę‡Ā8õĨ ŠnĶF ņŌĒę'‡ÜÕŽāS%Ž9€2l•MĒdVv6°Čô¨â Gœz—<ĐŒÁØ1LžŲ'Pč¨g„HT…ÉĪ_J˜ dšō˜ƒŠ¤vĩ˛¨>ģq “éU°ņ[ Ę„Ęŋgˇ §—8&…VĻÄ*;ԍžŲOņuąųÅĀdÚSž´gûaDc‚?*’)$[–‰ÛvZ‰r—…™H\c4ą>ëælÅ0%ķ¤yc ֙k“s1=sEąō ÔÛw˙I”ö'4€˜ŨŒgģT­*Ļ7œgĨQ}ČÆEæ"rE:VŨ{=1Ō‹ËK:ŋ Éj .&—>ĩ)…Dí nHéUíÔ;Kģˇj,đAéK‘Ķ5FŨČļ˙wĨDŖuąrXÉڋ ÔíEC3[Šn¸ĸFŲlö¤ĻŽj‘žtˆJv”=ģԑܓ I"íĮOz,•94ĻŠ­Ë+#:…VčAÍO,â2ŌĮâ€%ÆhíQŦĘbßĐ{ĶRę6 dŒ÷4tŠ(F éSž•Jø~ūīWz‚EÕz § ¯$QÍ(ŨÔ{Ôų 0;PŠĻ€sL‘ˆTä ĐŌŽ•CO'͔d9ĢāPũ))zRw Mv…Ŋ2Ūa:@RZN´qéF3E( RŌ”Ŋ¨:Ō‚isHÃŌ€šhæ”p)h0wgĩ ^sNΆ€(PrxĨ&–€ ¨"”t4´”ƒ4 îĨ4PįŠoj~ Ž"wėQ@ Qɧ‘ÅÅ€Ič(ā BjP÷x¤Æ9#„qŠ9Å)āf‚>Z$b€Ķ4Ēiéšô 9ÍŲ$zPŊ "u4 ōh^Ļ‘OĖEŠ n Ō(äšEÎOP¸ķ ?­3ŖĶ”æ€Eš@ viƚ)G"˜ SÉŖ?= ÔĐ´ÄļŽ7f\ķÔTŨĒ8gY‰ÚŲMįfsļ5¸†S†^†ĻĪjÍēÃ!rîà `QÅo4EúaĒå.}(¸-ā‘btqÔČÚHÄc,GCÚ¯Q֝ĀjîōÆá†Į5ÆDm'ŠąPÜĢv ֐2[…i'ëNēčǐ 5¤ˆŲíĀßéVāŒeWšĒHŲc21 ØzĶŽŲüČXnA‚*Xí"G 2yāŌ’K]Î]]”ˇ\R´ō—ąį)‰$ˇŒ1ÍJmSČō˛qëQ I°Ëō}(ˇŖ÷ĐëN—÷wQėãZ[›i$‘HÂtÍ$ąL÷ûF€#ģĀ猌į<ĶŽ¤&tˆëŠmÔs4ęÂ2BžÔë„ež9Â1Č †O.åĐ1(Fiđŧ— Īŧž,gĪvÂ`c4ËiÜa”ž=h–_)”ąčÔ˙´ĖÛĖ@l^¤ÔVŸ?š:I§ZFŦ„ŽyįĀ›íD@˛‘ÆpiMÚm Î|TwjąŲíN”ŖLéڕ€›Ī]››îSĸ’=…“…ëUã#ėpū) ėŠƒŠ,¨îGÚfše 6 íUm|ā˛&p 6á•nXČšR84X u\sց Î3ÍPš`G°“žôŒģ'‹ËŨœüŲĸÁs@°iĀņT'gĘĒßxP$’+ĩF|†4Ŧ2˙^´qM$/=)Tq“Ū€øŠ—Ŧ ČË€SĪŪŦĐÍ. 7á¨@ZŒ¸2ÄʧŊZR‡‘PĘ<ÅhĪztē‹pc4“Ŋ-WK¸ŲąČĪ|RŊÆ%+¸ zĐ2r)JdrĢņ¸íPĪx"”&3šrißJld•Ī­*įw4ú)áKz Õī0ÅĨbôöĸĀhRb¨Á;%ɊFÜ ÕėĐĀZ)3ІîfŠɌį9ÅŗYēš—ŊŖŊŖ•°´!ëGz† Ō_•[,*lPÔŅIŪ@(Å-'z8ÍÅ-€Ž)GLRŽ;ŅŌ€Žx§tƒ­)é@j^ÔÜņJŌa‰§ nis‘LĐŖ­ kō8äÎ:Qžy§PRŌRĐRņEhĸŠ@)  3Gz`-%´€(¤ĨĻŅIKH õĨíFh(Í-%-Q@ Iۊ(4”Ļ’€ QEžÅ-P1i(ĸ€ (ĸ˜Q@…ĸŠ(QEQEĨ´”JP*12´Ļ1ÔP¨ĀĮ­¨ĮjkDŒ¨¤1E%F˛vQÕzĶk}ššĮAOû6QĐ7 sSnPpN)EģBßeōō • Ūk¨##jđĨīEÂÅye1@­ˇ&¤ŠO20øÆiÎ2¤zŅ@ĸ€*ČÁ¯ŖöŅx6ĮĀÆO5`ÛĮŋy^~´é"WBĻ‹ˆĢå;9.)ŽĄ¯‘{cšœ@û†_*:qUÜ0ž:ãŊ4ŒwjĒ8aŌŖG.ŌĖ1Ķabv¸ķ$ĮQĻm¤pT•c‘Å|‚ĖIŅŗŪ•%s ųG+hšbm+‚ÔøNb\sÅCi¸Ü9#ŋ5hÎ7U,G\vĒön˸€XņNŗâiõĄ:έņ͏ô¤ŠHŲ G€;Õ{s‰'Â(ŗĩzVÎõāî4üÖ}Ŧ^l,ģą†§HÅŽg;TvĸÁrîyĨČĒÚąķH;GLÔķgĘb§ <žqJ8ĒqM+[ų™´ô‘äˇķ03ŒŅa\´Į“8BzātĒĸ餄°8ëOŽe0yĀ ¤1Д™Kųx9î*ÅCé$[ׁۅ煺‡é@QQĮ2K‡8ŖÍ]År3õ “ƒŠp¨™°ÂŸž}čԘ¤ÍéIHFESļ–Cs$lŲQžiwڐ¨<3H2M+gfģf€ą"’U@&™%´Nۙy=qQÛĪ#ÎņČWŌ­h)mŌXļô¨ÚČ4B1#mgĩ-´–Ĩ­ÄHØĮsMû+ũœFnSjŨĨš[ČōĢÉ´m銌Å*V‹~âp}+C¨Í&ęw”–ŦmžŧâÉ$Š<˛¤}âjāĸ‹Ÿ6Vų[äÔR/ō@<ņZ§éM 2rĸ‹ˆ­}/”ĢÆsSĀÁāR=)d‰&\HšĶÕU€hįœ#1ę#= Č­JŠhVaĪ :M1”¯ŒīV#šeĒUÉ$62jвÜG›!qØšHH|ŧ`vö ESo,‘Į–EUæĸģŽã^™ëS­ŧĀĒ´™Eė(šŪWēY ĸ€+°ŨÄŒŸÎ’íAšAëÖŦM­sĒ‚ŖËȘLŽĒXJ`[k…Î=éë÷ēÕfwK2åpŨ…>ÆC,[›Žjl2Á†¨ŊˆŨ÷†ß~ÕxMeŨ^Ô(ëM#O6÷pû€õ­9ŦČŽ ˆ.Ņģĩj09Ą‚ ē›ĘQę{UkÃ'¨ô§ßŠķ"oáÍ“‹Í Q2Įj…ŽZjŨ+8\Ą=ę Ö"Æ0:f‡…ĘFKŒ/"‹måHūųÅFeYQēĒĨ¤Ô?ŨOHdYŨÛ7aE†6ˋ™[͊ģæa€b5JŲą,įŪŖ…ŧ霸f€íE„i–ÁĨ,1šĄÛH+Ž™ĸ$ļe‹‘ˇ8÷Ĩ`/îĪj7 fĒÚJĶA†ëœU°1é@Ãw5^îI‘“ĘwŠIųÅWšáŖšXŲFõ  üÃ=qN#šĢuqäČĨ—+ëNkČĀRĀā÷  ĪŠpäTeƒ(#ĄĨ;ü¯“īvÍ1įD™bū&ŠMdøęyËgšŅ¸,!m‡†€vJ“ŌœŋvŗŦģÔķëšĩa1–2§ĒͰ‹žh\æ•x•jF!8§ŒMlR¨â˜ hĨ4”€-PKEQE˜ E%´´Q@ĸŠ(ëE%(€AKEQEPh ĐG4t”QEBŠ( aEPESRŌRĐHii B÷ Š ¯J:ō(ŖšQԊ){RQր Ģ xät­wĒŅåndOÍԚŌ4¨]ŋ…zZ‘Ļ3bĒ;ŠMä–ĪJ’Rˆú b&I•ˆã4ä’6 ËÛ­$jģTûu¨-9IsëJĀ"Gö!-ķnãÚŽ*āéUlÆcvæ$â’Ũ(Џ<ŒõĄlŅéKQ\KåŽŦp!‘Ũ<‘ĘF Æ*ČÉ×NäžØÃãƒVžErƛßZZŽ9UķŽę (‘ Āaš@8U,H/7”8éWēQŠLöīKøUKą‰ĸ œąĢcŌ€€a‚2)@` ^)(1a÷…ųŠ$ˇ ÛҊ7r*\RĐ"ßl[ō{â™Eĸ°9éV-ĩ¤2DŦô"›$oĮœŖp#­Š(¸B]ؘŽÕíš|ÁŧĻŽ*^ô”\ č¤T´d?{*HX}‹ƒü'5oĘBIØ9öĄbT¨QƒÔU\V)Û°[æm˙ ŸCS›XH#gĐĐmSĘōÁ {W;>ÍĪBj+m4‰ˇåaÅ[ˇˇōrž†›qnf‘vëEĀH×Č´f{ÍT žÜļŌ\œæ´Ų!NÄbŠŦsÄžX@Fx4Ņo&69 8ŠŖ†E!˒ ķI{ŒUKw8Ģ$°ļaąŌ›„r;%!ķĐÔŌĖá’0pOz…‚¸_•„šįŠ’t1Ü$Œ2¸æ€%ˇ™ŧ㠝Øčiņ}5MÆdÂ($X•'uô˜ÁÍ //T&äQwmëS ĮĨR°\ĢîûŲæ‹ ,ÛuÔ͎ĩ`NĨĘddv¨-}Ļlv4Æj'éEŽ"äs,ŒTjE9ĒjîÕõéJÃČ Ō–r+8:ņԓĩz➞eēHĮîģÍ;qŸ Ō‘ãŠĸGˆÍŧįŽ)ípūJʄdh°Gj .n ˇ•ĀíëNkÉDBQŲŪ•†]‚xĒō\yvâPšČéQ›ÜƯ´€{Ņ`-1æœ:sTč§œg­Z–eŽ=Äņ@ 8ĒŅŨ$‡õéN3 ûxĪր'ôĸŖG 2 Pzy¤ëíH?@ 8 a`)Ā÷ #ŒE"€ĮŌ‘Ø($šås@ĻėNę?*Ulš†é¤HËGŽ=hO*=Á‚ ũ)õZŌfš-í×8Ģ#Ū€‘\a—" ’Ō)‚÷Ģ5¸ŒĖcĪÍé@ ¨`ō˜’*5ŗpĀ4¤ĸôpQEĀŠ=ŧžpš ĶĄŽ_ĨÁcĐU‚ih¸m`’9_ĖO•ģĶV6´¸b˛7LUōiGJwLųm#:āž€TPKåŲ4lŦĩhšAABc)iŋęNG ÷§Gx^čÄSŒúÕŧ ņÅ"ĊÛöŪ´„)^sY÷x7ņķŌ´sPŊ¤NûČųŊhLe]M~D>ô_.,ĶÕnktBļxĻIf˛ RíŌĀ€™Ä0Į5ræ%ķkwC“LîĮsO ˛jB2íųÔØzŌ‘ŠSŪĒCe$wnõ>ĩfâFŽ"QKJl RÂļčÅr]†M§ÂbŒ—áĪQTüëåĘį¸Ģv/$¯$Ž1ŸjˆÅ*‚3TŌíšđŎŒâŽŌÖ§¯Ũ ´¸Å!öĸ–Š@&M-č –’ŠZ(ŖŊ0QE-‚—Ĩ”f– KE-&( Q@¨ĸ€ (PGj;QڀÍϊĄEP0ĸŠ(ĸŠ)€QE_ÂĒ!vŧ;û•lUXšŊ“éMožtQÆ;Ô/˙kķBgšWÚ ?xāRy m‘Ŗ'SÍZēˆËnTzÕe‘ÖFßͧ€a‘üŅ}šęEIĖ.ŒaËĄīLØ`¸YˆĘžĩj)Ŗ–Cą1×ؤ g8+Žjē\Ëä4€ŽŅÚŦ\Ŗ<ĢéUāXMŠķ1žâ ŧ•žŨõvП!w bĒ^ā[DaIâ­ÛļbrGZĀ)‘Ss7TÜ3Û9ōČR0iˇčÂOLԒmo6Plū[@sŽsO[ČöōOÖ fR)#…¤ą āŅ`/î;r Q>ĻOļjŌ ļę¤äã­UƒAÁį„âÁ:‘NV 8ĒsF+;ČŨĪJ4÷-ŽĀņJÃ.nëHi˛gË#Ú¨[Ë4ÔÔŅ`4ƒ2)UU;9ÚHŨXrĩ¸š4i6€€ã­@ž)ŊA$˙¸*ä‘QCw#ÆÎ#yĸĀ\fĀ$•´í0mˡ‘Ü€ĘČF;QÂaŧ /ŊXÍĒˇÚŖm-ߊdlá†Zzõ4g¯4Čæ›Í2îŗĮœdžÔ.NŌib}éj8XKNG4č HT„'“žhZCŌ–šĮŊ ¨Ĩ^P0FE īLŦK晏z’=)āEÉc@Í-1ŠÃ´Đ™-Ā3ˁ>cžž•qĻ1ēÄĒYņRGŒtĢyĪ%ËĸSFāOË2“Đƒ‚*šÃNVŖĶÛæu$õ¨āP׃Ķ$Q`-´Ņ†ō ˇ¯zz˛" ÚĒßFŠjĒŖ…õRŅŖwfPU슰Œ‰)X 6FÚ¤ô§w¨n@0ļGA@ZKæåAâ4æ(å˜āf Ķ0ū´ûäŪĒĘĀ2ž­>ĸ%i¤€¯›‚ã"¤šQ‹tŸį4î‘MōúÕéŖ%‘×J `$R™õĢŒg#ĻŗŽrø‰ybÜûU™š/žh° ¨If¤GWBŦŲmã:äā ÕčGQĐRhdšÉ zR (#šZNŊ*™`~yÅE§)bNM[¤ÆE.GJQ@ UāŽô¸ 8ô Đ• ˇ…ŸqAšŸ˜ÍG,)2laĀéíD0$…Ī>ĩ%â€U‘ °Č5XØŠRģÛ™ĢB–‹V+mˆČÎYHĮ=Ēi:‚‰.#ĢÔ´\„ؘ*œQLˇ+.ĢŨčÍ?ʕ$—÷eËô>”ëxËŖ!9Í]"”)ÜÉÄLOĨgŲH‰Ž =ëKڂĐP˜ŒÛ7ÂNAųēâ›+—ŗËI–?ÃZb4Ŗž´ŅmîĮ=h¸Z€öˌŽ•PnŠi ÆkN(’% æŖkuk1<ŽÔ\ļaØ-S˛ėOƒ×5vhDŠ´’*‰m­$$b•€CjWi/ÛĩáĘ&G^ÂĢÜųŋgˆ ŸJh ąœÄ¤õ"”ô¨ Ļ+`øÎJ Á‰ üĻ‹?jBxĻÆÁã ØŠst¤‡"ŽÔŨĀ.I¤YŖc€ĀšyĨ›‡­€ŠLâŒĐŸCHJ( a‚"rPg×üb”t Љ­ŖgßČ'Ž MGj†;t‹.FiąÚˆ¤g NîÆŦv¤Ī^u¤hĨUŒĻŅČõĢ$A4\ ĐÂâw•”(aŌŖŠYcģōĘáXÕĶĖ{ĻáFĸāKÆ*ĸIĮ1íMtW]Ž”GLå\zĶŽPĨÔNßpuĢQÃG1Ž3RW`§qoÄlЎķÆ)÷ęĒŧįgoZ˛°D§!Fi%…f‚:EĀĖ•ÜÂŦF×­^÷ÂŽßxŠoؕ˜yŽĖAVvŒ` PÆfæ_ØŌS‚EV‚ĖÅpdfĪĨXpLmˇŽ(`$daNæ5NÆ9–Fķ÷5wh9€ŠxCa99>›g&é$įåSPĖŗŠ‚ÆîI$Ēč#Cj &c!Hy*9&Ŧ”ųqYęJ]žĖĮ4Éaģ.ûvō:ĶĨģÛ!įMˇˆFÎĖAf==*)ĀmDniˆŗĐpÄđĢ×4ÁzĻ@*§Ą5ôb8žA€O4ۜ |AƒE€ˇ,á,x§Ã:JHCšĨ ymã+÷ÔŠ}ƒ‡™É]­ŽE+ËũĻyŠŽ:^ fOÃz7/ČԐÄĄ¸~tå`Fj•´(Åå#€xĻĀĻé¤%ˆU<NÃ/9 ¤zúU6cs"ä•ϟg!Ũ$,sˇĄ¨ėp.e4Ņ_ģKž)‚´Á¤0$…8㊊ŨĨeũčÁÍ;,Lę3Šeŧûí˘é@¨J;Äd,IĪĨXˇ'BWą DŌ8ŗŠVĀJû"ÛäéģœP2иŒ˙Ztˆ$B‡ĄJI#’ĀÆėpZąj\ÂĄúãŊ#g)Ęķw銎ka Ĩւr(¸ 94›ŠTæ†Æ:Pnã9§ƒ‘LP ĶĀ␠´uÚ3ëŠJZJ`Fâ=ģYF=1JˆŠ›T`Ô ëN€)AŒĘĨUxõxsMŊīJ)ŽqNSš8 RŅ@QŠ(斎ô˜¤Ņ@éE0 R)-QԊ% 4P8Ŗ4Ā( QHŒRRĐ0ĸŠZJ(Ŗ4”QۊÎĨ¤Ĩ (ĸ–˜ E´))h ĸŠ Q֊( ŠJuŠh°¤úT’´Ąˇv518VĪĨCeƒRiôueaÁSąU-‡îå=˛iĐîû99Į‹fŠĢnf*‡vAëNķËģ…ĀTëšV “Ĩ/~•Ú”¯ŒîãąL%ĪĘAA  z J^´w éFážMSēܡ ĩˆŨ֝z€B¸S°\ļ)sëM‹ũZũ)“Wo–3Ī4€yU=TR4i Ã.iŪ• ÎVåbÚ9ö‰Z2„qM[pIbBôöЍĸāWxJ^"î ĐņH`u'sĩXĸĀ¯hŒąãTø$ŌôĨ€Š|„ǰūLģ™Zõ5tž{Š­âa‚‚ÂÄ3Ÿô=JlÄ õÅZō“ËōÂüĩĩ“iÍû|y)ô§ֈĸ PI֝ŒŌJũÎØĐp æĨ6Ãtn˜PŊ}é×âeûÃĄĻ…ŲĄzzĶ´ÜžâB¯@)ĐæÉcōô #ÁrŌm%Ԉ#o6IŲH8˜ ˇid.<Îֈg™ãc‘ōŌZ7–d/‘Ū’ÚDIš€>”f9ŲíL€e…F—nņ–ōūīSIhĘ,ÜdgŖ‡"ÉņÜķJĀMöߓvÆ#š8œyBFûĻĒ&NôĀ‘į åB–Į\SŅÃŽAâĒDAą8$ãéO Åh~läõĸÂ, œ§U9dqíL“ÔÕÅûŖ=hcƒGlÔk'¯Ž)1Č=*8`ōŗ†$ØĨYŖcÃuŠ)Wʕ#tP9ÉÎiÃzYm(wtÅXīKEÅb Cû•Ž9¨c˛J$āįŋĨ]=E1âI]A"‹ŠŒ‹§Ēš}ĢŗVÆå8Í=áY0Ot"ˆâ¤ ä÷4åu~„vjŊŊš…Ø“œÕŠC*]ĮÄ~Ôûīø÷üEEtÜ)p*KÖŨ€ '¨C‹´1ĄfČ8§K9ŽDČj†vÆŋ{Ž(š M ‚2:Ņ`,I.×TQšW,^ũr¸ S†´î8⑈:ŠŸjšFi ÔŌŽEHÊ(¤ d3ÜŨQy,jv`ŠXôŸ4a.ãQõ̞§™/¨Ļ"švÄģõÍXG(e•›C;oį{P"iÔ˜œüĸ›hOŲÁ'4-fXõ+QÄ^+UnŖ¸ dˇ2´*`Š•NT:Õ[ĸ$Ą"§2* Üq@fŠ`‘_åt'†iĸŪ}ķN Œg¨ĸ—Ĩ Qģ8Cžæ^}jQ֚ͱIÁ>€𤜜ƒę*/˛(‘\äTÜ,¤€#ÖĨīL ˇpÉ++)éRN$û>#?5Ly„eHÎ3EĀ†ÍĄ;Ī â§īL‰5Ú?:z@Pƒ_Ļ­]nīŗ¯ĩŪ&líæĨĀ9Ĩ0*ŦQÉk“Œã­6ÖVŽØļŌĀŠžĖ‡€HÆjePĒF Flō~蓐îyĢŠ"}˜“÷@ÁĻŨ@gPƒO’-öæ1é@Ę!dU/v7jĩjęŅ|Ģ´ŽĸŖV؁]X0ĀiöąÔŗp[ĩ6"ĪĻ(nŪĩVÚi$‘•ĮĨY`r3R2Ŧļ¸|6õúS!KũÕ^ ĸęč–(Ēp:šHî2R4RŧķT#HÔ/r¨û@,G\vЉĒ>ËŠ¸'wĨJ?ÚcvI'Ō„ē‹, c ´L—< †Ö[— ŋũjv¤ŽŦģƒ ž´ Pô`ĨržPŠ%û¤ķEŌŦB6AŽzQa—à uĨâ¨]ļŲQ˜/Ē{|Fpõ¤Đ\ą@¨åWhŽÆÚj¤3ČÖîYÎåĸĀ_Ļ7P*5‘ĸļß)ÉëP‰äØ%t=¨°ÜČa„¸Å>ķbWé‘Uīœ5Š#Ą%Ą˙FOĨ>€OG9¤įu7y-Œ~4€ F4…ÔuaŸJkœs@ Oā0*/0‘€2jQĐPšS@ĸ€ ŌUã œšųOJ—iëšvÕūčüŠ€>PáN4‹Ū€#ûĩeĄfˆĢļI¨¤‚BŠĀĘô į"höą4ög[¤PĮkE2åXIāā@Ą›7q’ë‰Ĩ‰‡ŠīRÛČ\°#§zŽgĻ!‚Æ‹'Ę?yM.€Z¨^thËԊ•ŗ´ãŌŠŲŨą<’yĄ ‹gū˛F÷ĢA×$nĒ–ĮjLŪ„Ķ!ávÚYĪCéCB/‘ÍEt?pĮ8"– ūJī7Ŋ2ë?gsB–ĖÍn š°9UĨА2qDsēēŦŠîœĐ"Ū(ĨÍBnŖW(ÜC&Ļ3¨p¤ō{R ļsHŅÄŌ‡?x{ĐŖRŽ) P4´uĨ<ŠĢzĨbŪŦAgíKQےaBܒ*JMĒNp?*O*=Ûļ ŽôÉĻō%IČíD͝¤ũ KõĒQF%ē”äŽ=*Й …3ķSÜ3—V(O\wĻ€†ÔŗO,e‹ŌŖE>ņ&AëSà B>\äõ4âĘ .w0ųŅ§ Å4îÔ*¯^zÕÎÔgŽh¸&Y­ōŒŽÔë8Z8ÎጜVAČëKž)\tŦփÛ!Xä֍(vp3ëB`UŊVkrAÍC#ƒb0GLVŒjmsļĀĢ*•Ķ†î¸ŠíŋÔGŽÃš–X’dÚŲĮĩÄŠÅÎ1Š:‹2>v°8§¯Ũ'Õ{kO!Ų‹g=ĒŅûž˜¤|(˛Ŧ­)ũāõ4ÛT,<Æc×°+;JB‰1ԓŠžÖQ0+å… Ú˜ŠąĢ´ŌÄŦp+BŲdH@åĒ­ŦnˇOŊŊ[¸&p3ŠPŲÚq×ĩW´˜Ī惊y,›Ë—†Aī0‘X ¯Ĩ$WlÎcXōÂŖ° ´Üõ$ŅbT\K–VfŸ5™Jí+ÖĨS‘ĮzĄÍĖûO'8ŠĸK­ß>6JVßĘģ4}îæŸn ŧvAō{RFŸng2māb’Ųž ŋ œƒŌ˜TÕûÔãH>ũHĘ÷vėø’2D‹ĪÖ§…ËÄ 'ŽiˇĖD#>ĻĢ 7"žāŨhzŠÜN|Ō‚A¯SŪŽ­=žōJ‘ķu„2´ŧ.…¤ķ#~†¯ƒ‘šČē@8Pįo\VŦc>”؇šAUæaäōOAQ%˅YēR°ËԇéU¤œ 6¨f#Ž;Sā˜I’h]™¤hĘā­Nŋ7ZĄb3w1ôĢŅ´0$Å.8ŖĨÅ)¤‘˜HQM“Š]ÜĶĨíHM.hJÆԌŽi{ĐY€A”ĶoÜ\TœRcžh4UØ mô¨…œCp€ŨŗS/jŠ+dŠ#ĻCf°HY\ķÔŗE+-ŽÆbŽ@~HĨļˇō—9SÚ§´ ¨ šË61Ī=ĒxŖ"0˛a|Ԕ´Ę?qF=ŠũŠ?Š–ÅŅIE(Ĩ)%0E ĨZ))h¤ĨŖŊv Q@j( PE ĐAŖŊ- QœRŠæ€ĩ/j(ī@jN”´”´”Q@ÄĸŠ(:–’ŠcŠ( Š( AEPFh¤ 4fŅ@ œRæšzŠ3“@¤)(í@Ũŗĸ+!Į8 Ęņ„2r¸¤ŊlÂŖũĒGų–5q…õĒhr8 * fōBårS’dbHȤ2j;Ôk22ũÃŽF)´v GPG”¸¤Å7ËMÛļŒžô‹ jûÕpƒ9 ČĘWjSڀÚĢbŦÅöĢ=č=h¤6īāÄj'„2"†SĐįĨZíJ#Šw E`€1Ëw¨/\,%{šĩŪ‘€=@?Z@Rghí"Ûß>”×$ÜÆ7îâ¯R0@ĮĨ'“ ít§qXxÆ*­ō|ĸ@9SV2Tķ"e=Md1ĸģyø¨€nãŌŦA HU[¨¨V)EÖōŸ/Jb"gi$qš†Ū˜ĢNˌ¯œƒŪ™†ĩ¸f*J7ĨX…‹åĘmŠ0îS É8Zå$ۋ–¨Šīã/+Î͜TĖ­k°džãŌ„âA Ēą<ã@šaŗĖPôÅV˜–´MŧāķS„ˆ¤e˜“Øf‹û–Ädjŗ˛ŨuĒÅ×ôį4ˇ1yĐ>`2(@᎝‡÷F*ΰĒsĪģ°¯ŌcCem‘3 UKTŠxË?.O¯Jˇ#ĸĄ-͏ĒRŲ•ËÂøî4ö€ĄubNôŠØ U )›{#ō{UâršĄ‚ŒFqTRi…Č‹pÆjņ?!Ŧၨ}(B4ûrjŧ ,ėĄ~E8Í,ŗˆŲSĢ1āS@“yABžŋZ,ĄÉ Õat2F:f–K‘ǰ<Ō>){T-sžÂpjC"…É8´¤dĶEq• Ķ‹¤ž”N’â% õéRYÛ´A™ūķ”ؤk‡o(„EīŽĩ"K š0°ÆAĻ"qAäzU(]…ûĻâTv̤Žô† Fė)H`ŒŠAM–MˆĪ‚qØPcS•@3Mû$=vcčiŅIæÆgąŠ;Qp KH’@ę#Ū§úŅÍĸāW[vŠVxHÃuˆí›íi-ÛĒÍ 4\ w­8•yÛíVž7uĮ4¸ õ EkčÕd…<Uæí1¸‚Ž:Vz=ąNā"(ƒÖŠß\ßjg8ĢԄ)<€ C1ū͈ØlųĪņVŦ1&})ÍmÕō§Ā mˆÎŋFÄĮĻjĶ2#8?vĻ‘AĩÆE2;Xã}ãq=˛zQq”ėÉķæsšKMßj˜­[’Ø;—V*O\wĨ‚Ũ! Œ’ŨM)د˜÷Ģą>XƒÅE  †RęĮž ÔrÛLn„‘‘ˇ>´04JB)yÅ!¤13ƒŠ(h84ßâ ä’9@ëAhw4ĢīF>Z0hųÍōĐŌ…į4mųŗ@ œ>) |ÛE;lҌ6@  ÜĶéŧšpāPŅE™4 Z(´”Ŋ¨;ŅŃրŅF(¤IKE(Ĩ¤ĸ˜ E”Z))h4Ph Å”´™ĸŠ:ĐKE€( PhĸEQEĐhí@ÄëEPu-4RĶ´QEQE (ĸ€˜ Ë ÍTģšr~\đ*ÄÍåÂXvS°‰(īTI1ƎKją4Æ4Sˇ$ŒŅa“c“@Õx.D‚ŧՁ@(ÁÅ-€§yœ*€zæ’áƒDŠŧˇwđĻí\įÅb­Čâ0Oz°čQCÛĮ!ÜÚvÁˇolb‹UW'ņŠBoļU=qMkwÕ¸íNa"ÂĄF[ĄĻ0+å’FĶÉĢ1ÍSØŅLŒĒĮûÕ=ÄĻ$ sI6{ \œqÖĸ…üÄ F3OČÎ{ 2)ā¸?/Zá’Ø ™âSęi-[Íb3ÉĸÂ.+Ģ.ASĒ6Î#Ü‚@j|w‘“ƒ‘š,2Ëā!úU[Įs’qž)÷*S<ž*;vũöÁ÷TQĐEĶHy “IžÔ†/jIĸ‚ˇ=ŠÜŠ€ÜĢd.p;ĐĄœL ŒTŊęĨ‡įÔÕŧņM€´´ĐA§RŖøii:ĐæšQNAPAëÅ;”Ņ´(Ԙ–ą#ī ÍJzŌŽ”\æˇYą–#”ąGåŽŨÅžĩ!Ļ÷ aˇ1ÎîÚŨ6a?ÚT§ÜĢ=čÜ3Š.@eFāŸZ`’XŖŲ$läp ÕąëAįŊ•ŧeimĪAKö’.<ŧgĢ‚“bīŨ´nõ§p+^™%1úķUáīuĀÉÅif‘P ĨŌ“y#GN$ĩYtW]Ŧ3MŽŪ8ō@äúŅqX¤QâĖąŅ“ČĨžmÍĩdZ ?x•ÎvįŠYí–`;0äw­é˰ŒqÅ>ä9*čģ‚ōE>KF!irWڜđČ$.0L‚7;JķȧĩÂKm Lä |0gy1–ė:TÆ4(@P2=)SLâ'=ķVT!nõRôFt”¤điŅH^ī ˜äĐ#$j´dûÔņJŌK"°¯ĨC}!”hŌsL3(=E:7VĨ=I#‘AéMIž”¤ū4Å|’Æ)ĀƒĐƒQėYĢwĒ–ĢåßHĄÎą  8Ŗ›‡LķJHvĸ— ŒƒÅ&s@ ("€E í@éKA ZZ¯5ÂÁ2ĢÍM¸b€@ëMf"œ(ZZ(n--0r)A Ąš¤š^ôZ^ô™´ (¤œŌĐŅIJ(QIE-'zZčĸŽôQE-’—ŊRRŅ@QŠ(ĸ– EPi(Í J(ĸ€3ihĸ˜ÅĸŠ(ĸŠ(QE€*ŨŒÉ÷Š.˙Ô~4Ų`g8aĮj–d2D@ë֘ŠōnŽ$bwâŦá[kcĩU•Œą$aNîüTōˇ•n}qŠ$[^g`TõZČb úšŗCļ#7 ĒČâ2 >n¸Ģ)āŠĨûëS‘ĘP„Ë‘1x•›­?ŊCፀH^1NYāŽ¸'Ĩ$'To*n+žE9\|§8 ÔŊ:RpzRâ8Í!Pà 3õĨÅâ€(0 Ą”ŠīI¸NÎhˇXՂ“ķScļhՂŋ_jąéNî{xLJÁ°yŠDkœí§Š(¸In¯&ūC{Uhb&á'h­IÅ îg•ājU;°GzW$zƒN€8 LOäuÅAj´9īœÕŦ1ÚĢ‹R ……=¨@2ĮũQÖŦûT6ĐÉAajŽ8æD’v@‹gÅVŊwˆ!SŽjÉįĨRÔ|‰ÎAÍd‰,ÆUV)Ģ# ŠŽ3ēaĪÚGÚDdP’I8›ˆlRŋšŨU‰c€)!8=ĒŠšy.8žîy>´Žeœn,cß­2Ān™äė)¤ļšE}ŦpiūbƒŒōz ĪŊæeĮRjy"|rdäņŠ,"Öåõ¤.qT„Ąæ‘Ÿ%T| SDī # zQ`šĨ֗ĩgĮé$o’Áž÷5 iXbQŽsšŠu9…†ŪIč({‡†%gäĩ;p QŽjŗ\:DŽS9úQöœÛųØíԐh⡆63Ļ}ļ.sœø  =)9œģƒ‘ŒÕ[[—–á9¨°\ŧhíLGöÁ§VčxáGj(΍ƒÁÁ `tâĒ_1 šX‚*[2īg9&˜^ģE4EŸ•@Ī\Rƒƒ@ÉĪ­ #°ŖīUÃ}iĶÂŗĻÖ'Õ7FYŒ{zw$— ĸ6ÎM0m€E¸đr ¤ŠÕ–a$¸ÅZQJāQ’Öa;i2ÁM0—iŽ /4XŽ-؁ķ†Ļ{ôVE判ˇI,0@€ВK–ElzÔ¤=´Xå˜ü´í>& îā‚M:ú2Á¨SÍ> D¤ŦŅbĖ~öMhĮ5  j‘ÉÅLzTąŖ:ũ‰ÚƒšŠŌs Ǝ¸€EC:fū5=)n†û¨ã^@įŠĄ=Áķv Éô§E6ø¤~…sÅU…Yį”‡ŲŽ $‹ä[6ŌHc×֋6š„‡˙Rįę˙ T°˛Ãkâ “PذHd‘Ėy¤ˇ¸ Ø>”ņ*sÅf.ų#vÛšäč})÷*é/P͊,‚ĘŽ~Vœ:ÖuĒ0’#„Į#Ō´Ŋ&1M€āÔ7W"ĪVė*ŖÍ,q‰ƒģļ:Q`4"“ŽÕL\H,„„e§jŒ^8„2Žq÷úÜŠuQ[’ÍĐRŊÛ$‹! ž”X  RņP\\$*2ܚj]F]T¸É  8æ‚)Ĩžl RNā(4î”ÂØãŊ4Nƒ!˜õ  húÔK0 œŽ*E`Ø9´´g=)ãšpp;Ķ÷ETÔdOîÍ]ÎiœĘĸŗČļPĮ'Šķ@” ~uSļ.1JZ\Đ"Ū%}Á5)‚9Ĩ PsiËøf˜ņ,6ŽŠœb­ž´ÉPÉ*œ:Đ 62ĐžÖ#'šģ ˛DŒŖ'wZ‚ŌÚ[sˇr•=jįACb* yĄ •(zgĩ>;QģFYēՎ¸ĨÅŸeŅ~í“åæ’ŪãģgeųXõ­ QEĀŠ JŠëË!éDwFFEXĪûDЎô Qp(JŅĘîŗĻ}Ō*ŞåĩúŠœÜfŒq@ŠÖ×>sē•*ØDˆIU>”üАZÆhÍ S֊)-.))hQEfŽôP(i3EQE- JZ))h¤EPEč Š( 4RQ@Ä#4Ph  ÚZJZc ZJZ(ĸŠQE´””ęiĨ¤ī@ HzŅŪŽôîԙÍ/joNF&w–Aö>ĩ/z†P€ĻNtЁäŠ`>Š SķwˇĖĖ }ÜP2įz^õŧĨ÷ûËÅN(Ĩ;‚ŒúĶv'O_z”ô¤'Đ+ÆqŽ”ĮÚ,?'ŠŠĪ"Ãv3Í#B‘=@ĒČŨ˜l,ņŠšÚŌ‹ČŅCŋo>”ļķĸÜFëRôĻĮ–¸ÎIë@ pZĒZcčjÛ(`Ab@ˆĮhÆhŦæZģVĸâ%úSMĒm+“ˇĶ4øĶd{sœPØ^ä‚zƒÅG"ė†2„†'­Mu Í Žj9Ŗ”Ŧ`&võÅ1 pđÍNå‘üõ‰3Ö œŗMlaŠ–E)x˛ $r2Ėbäã Ķå˛~\Ļq@;ī<Ā2ǏÍC*‚ ņˇōϐžQՒŨ…*Č$öäÅCæn”" ČÉíIk–iŊÍG—T‚AųĒĐlMTƒ›š §AûÉĨŨČ °ŽFFiQ˛HĒvĘ>Ņ.AųzS­†ëšT’F:Q`-ąÁđsTavûD‹¸•SÅ(™Ļ•öžÅN>´XeŪ´Tŗb$õ“Lb\ã’p)ÄŊ2"yˆøĩM‰õ#š§vŌũ›įƒŽ•`?—jôŸAēo]ģˆúTVößgbCšjŨŸ—z ĐÕĒC!’ác•c`rŨ)ŌO8F?1éUŽ˙ãöOš€KqU9ū#LEĸx¤íLr†ã…Ĩ, œŠC͊(Č4qžhpx#đŖ"z((Ĩí@I KŒäЊ ˇH‰#%sStϓЁ­C;2ąPŨE[‡ˇĻĶÆjĮjCĀĸāAšōdmĖÃJH­!eÎY†3V…&qNāSŽ9D^W—ŽÛŗÚ›2´W*[>V;UŌāuĀĨᗱ\ q“pîŠV3Ú´@R(ĀĀ u¤õ†¤¤ÉcåĪ&›~SbF‡$ÕšgÎō]sŸZ¨ĀOzĢü‰Ū˜‰.ŋsb׊}¤;m@Ā;šúՉĄI”č)ā/@1EĀˉsŠa¸ÛÎ)ŗ8{ũČ)ĢōŲĮ3īÉ ßØFÎŦ21č:Ņp"Ôą„Pį=iQûˌšˇqnŗĒŒí+ĐŌÅÆrIcęh¸ō,r€ė#Š“9n:¯yiö†R⧍v(\äH\?—ž9¨ZĻøåšNx8ÍiM™ '¨ĒiĸÕ +Ž8jhė”˜$lõ8ĸ2ßlōânܚąi­ŗ#Ļ1ĶŪ›ančŌ<‹†=)€Ø› Ú -Ėí$â؎~b)ļHéu!d9'īvĪ*öG`pÊ@BŌ:LŖ’3EĪī&Ž.ųÍÃÍÔã…Ž<ģæcžŸ/Ŋ04cû˜¨ÁÛīPŧokŊ†[¸ëi~Ņ|cĩHVõ4áÅ&ߛ4  BũÚVäR(ÂĐž(Å.8¤ Pš2I"”)ŧîâ€ԟMjwj)´¸ Žhí@ĸ”PEPFi)E ŠJZ`-&(īGJQEĸQøĐ@ĸŠ^´QE¤Ĩ¤RŌRĐERŖŠ(ĸŠJ(ĸ@’”ŌPQE›KIKLbŅIK@‚Š( Š( ŅQ‡œ#>´˛Ę#ĀęOA@b“Ŋ1$,pĘTԃŠ`&(iqKŠ@'jNƒŠu!‘Lģve”u¤´ë'ûÔö€3—RA#ˆ"h™åM1ãÖĢ´„žp8ŠûTd–Rų)ōŽÔ!˛K5%ŪCüUhœU[iL’’W*Đ9Í šā)#‘éOķâŪŊ*ĩ°ũėÁ翉”Gn Ánh°‹1ČŦŧMAp?ŌĄ>§—F#eāįK˙PÆ‹pzŅJoņR‚i v*)'HÎ"¤'Ž*„ĖgģTĄ -´ŋ¸2(Č4‘L^"áOŌ™vû-ʎüRÜÚ ņN Ë6í ŒzĶđ=j 0“ךŸp=9¤1E8SF:ŌĐĶO^y¤y5Ë68Ë‘Ō€ĮŲãŨ´ūĸ‚Áąč(4›ÆAéÅ$p,D•'žĸžŒw)Č4ā(¤Pȗ ŲOSR$MŒÉČnÕ?jLāgŌ‹RĶ&æbzŌ…{yŨ 8Å2ŅątųČŨĶŠĐ§p(Ā’y˛\æ›Ûy¤Y‡ Č8Ģũ 5•I€4\,2ŨÊ*FxÅA|­˜ß)̃p”€Ë†ŠWãŗ 0$š.‰6J{dfŦ›h˜m(1O f2§ĩ;ˆ§å#¤m$„¯AUÖÎ5`Ųb@Og ĄFéļßCWA늩5Ŧ’N$:*ڌZAķī]\䂝î¯Z?á#4¯ÅrfEÜQN†'iÚinG€"s^Č2p=聛ín…‰PxĨ ģ‘ö–ĶÛesu!e ži€ņ+=Ë"ļĶZåŒaûƒŠl[b¸JqÎFiĶų{cڀ,C$ŒÄ2Œc ŠŠŌũĩžRy鞕%°0܄WŪŦ?*HX-믐ķPK"ŠÃ ˜Ã5BôœŌE%PäiF9ŖĨ-BđbĘv“HĐĀyëŸzW¸Tp¤š”ĪĻs ’FŌ‘ŅÍĘ6ߔwĢT´\,Vš‘â ĸį5:1hÁ#ŪŒP$.céUŦs4‡­O, )ų™ž‚–DYÃ= CwķMZKˇĖJ€õ5,đģČŽ˜Čæ›5ģ~ė ÎŪĸ˜…‘UmĮ<ÍAlŗ.sÉ8Še…ūĖTO$TS+ŧ*‹Ú€$ƒr[n'$ķQ¤’ŽŽI'})îî!RœsLDŲv›sÔ [ÂÎéĮ5<’ĩŧ+ÆqÁÅBÜßz(ĸõ‹mAüDPËvĨÂāķŪ’YCÆÉųãĩ/–Šâ(:ÕX„į<š,‚H Ž´ätlí`MQbÛ⇒dÔņ#ũĄ¤eÚĀŦ4XŖ"ƒČ¤Į†/朠Åķ@‡´S{Ԋ\RŽ”Ū{RŒĐ§&ØĶ^)sրsGJ@ŲĨ4R÷¤Ü)x4JZ4ĶJ;ĐŨ):PŅūōƒõ¤1Ŗ.ŌŖ”úZŠ(#ˆ‹zcŲÆōäg¨ęqKŠ.PÜ[‰Ôs´ŽAŠhī@Å Â@ŌČ/@*´Öō‹†x×vîū•ŖE¨ÁģŽ*Ŋė&EVA–Sš˛:Đh6åžXpÆ:äTÅüËU*1ŌŽcšQŽÂÄeĮ [&äŒb­iĖ ¸¨58†,ũÁĪZU‰#ûŠŽĸÚ"lp*pČΆEËgå5aÕdRŦ2 G¤Q¸` #ĻM˛“q6_k^âφ%‰d wÖϚÖ9›vJˇ¨ĨKuŽ"ŠHĪVīE§§†ČĪ&‹”捒1A§ģ8;yî)€Ûv,Ų•Į#Ō§úÕXU~ĐZ<„#Ÿ­YvڅŊ!‘ …/‚¤.qš•PeT™ËBŒp2ŨĒIyš…OJ,n’xĒđŦ˜Îx9⡛›Č¨¸$\EƒŒžhg¸ĒĶĖÂaļŅÜŌÃ1męNJô>´XeŠ1ÍAí$&LtŠPŅyƒĨ @âŖKˆŲK@sR‚:)ĻE€4튪z‰´0ûÛąMwˇĩ%*Œ(Ôb 0Á‘ÅĒ€iĮ€OĨVŽđ1#cq×1ˇŸyÎi¯n˛L˛ĶĩI‹ Ɵ¨§Qp2•õĒ‹m0ų7™Ģĸ“ÚĀ¯,OĢ,Cv1O…d;žOŧŨĨL(Ĩp)Ûyßha ;jāÔ´PO(īN"… ¯ZųŠŨčī@ ß4ɧ ( ķJ:æ€)ØãÔčiŊ8-q@ ^Aâ€x4¸#Ĩ b€ qJ:R…9Rf”ņAÍŅ“šUS[ī RHéBœõ ûĐŋtĐģڔ3H§å4ÔÁЁ…/zÆ1O¨hČ4zĶUx4îÔ/JA÷y  uÍ"æ”u¤hBHäsC)ĀÍ0ĐŌ“ĮĶĶ4)!s@íäsIƒHW&ŒäPŠ1A84nÉé@Ŗę<Õ 4EP|Ã"•UWî¨vŖ42+Œ0zTbÖlėätŠAĪJLņ@4Ķ ;eŠxĨę&ĩ…Û%*cE4*ĸíPôÛD˛ų~j—ĩŽ(EQUß~û~\uÍ^Z[Bōųą>Æ IE÷’Īōûĩ%Ũ´˛Ė¯ /­>O.S+šgĢFĀjƒĩwuĮ5F5¸[îAŲŸÂ¯æ– ZÎŊ,nSä;Põ­!īHÜāPG.‘RFėĶ/åWˇE\į¸ÅidfĒžĒáNāV0-ĖQ°v^*+ĸđ$Q8'ÕüqM–$™6¸Č¤KģXüƒ" 2Žžĩ5”ŒÖŠĪé֐ÛZF+éS…QÕc EsĖU"¤Ēđ[$Rr}jĀ ´ĶĮZpQí@ÆŅrTœFįķ5| Æ:Uy-ˇĸ€ØÛß:ä ŨÉĄ^íÎøã4˸•U6ņÍK(Îih ņF)Ĩ-4šUcš<Ōō͆sɤįĨ'UëKîhÎŗ@œ.E!$Gžô§îĐy\P˓H¤œ:-–Ÿj‹vŖøi#f€žhĪw&u4Ī֗4Đ9Ōđ 8ŠE9b=(M"Œ14ĻÚšÔî€ĩ5îÔÆÍ*ũÚE<šUû´ƒŠ _˜“J:â…īA?5eŠAô õ§3šuRRih¤Ļ!{ŅERŌQ@ E“ĩ-Q@-%b€’Š(¤ĸ–ÂŠ)(i)i((Ĩô'j:vĨ'րzĐ9Ĩ=)F1Æ(0(Å”P€ĸ@\ŌãŠ( ŠZJ@1@—ĩ/j`ĄqKK@ įNƒÍ(´´”šĸQ@.(īI@ EŠ(4RPږE´”´”QE%´PwĨĸŠC JZ(¤Ĩ¤ ĸŠ(6–’–˜ÂŠ( –’–€ dŦË dĶ鲒"oĄĄ‚Ė(ąîiŖ<ŽŲ!:RZĮŋ×5 ĒsŠĄÅ1ėÄtõ I(ˆHq´öĻ‚eĩuĮĖ)$qö šųąŌ€-wĨ¨í˙ÔŽ}*J‘‹HzÕK’ë:…r7TžcĮ*ŖōĄ§a•SÔøPČ­Ę(Ĩ'¤1‚$ģÔfÜųŪh~jĀĸ€+´N˛™#Į=i°¤ŠpĖËÁīViM;…ŠÆf[Ÿ/ôŗMäH'5`…Üj;…ܘ >Ŋ¨ɇPøÍ:QėWĐSą‘H 7ŋëã­Hv(cÚĸ{]ōŪsV nOf00%§UXîcŲ¸ąüĒÄn˛.å9€SEVævI’0pS@Ŋh5VK–Žu”jļH  ÷(ō}ĶÔÔČĄTØb”uĨ Rõ¤íK8 e ԏZc"°Ã("¤<Ķq@ H#ŒîUĶčĸ€4K*moÃÚĸŽ×k†w/Ž€ö̐Ņp kfVf…ö–ëO‚)’ŨMIÉĨŨ…§p)ĮoqxĶnÖīNˇ‚X­¤CÃF*ԜŽ”îŪÔ\ æ(E1 #-Š[Öo: ŧä ŧyōö4ŽÉãy ąˆåiļŸ-ėĀt,QIį<ÎĄ[TvŅL—.ėŧ6h)yΓSž hĮ-yŨĮZ¤æFŖx‹1čÕ3y°Ųƒ. fŽ•^Îgš#ģǜœZCPÍÛO­Sĩ–y÷.đ6÷ĢÍ÷Ōŗ´éPÜsœĶ@Yˇ¤Gtũj#s:Äe+…M2"ÁŽ.p~īŊG3Üíü4XEégd€JĒęj¨ĒŪQÁ8&œÎ‡M8#îâ“O m‚ ĐĐrük7RšˆÖn+*ôą7qÍeĢÕV‡ a”g"’Â_6?˜ō´ˇ,OuLjŒ–,ãŒŅĐFÚáŨĮŽ3Ž*BãŒsšĪŽšČ*ãšš4qĸąÉŦ1—w&¸1čjmŖ’y2YšÎi5Q•CR‚ËmŅ“Š}:Ņ$ŽY‹w&­fĢ[] ‹¤뚆’íä;ʅ8  ĖĄĐŠčj… )w*n$-Ii;xä9(zÔvĘZęrÅ/njk´üØōę!)ķ^?2žĨ‚áŪáâ`2Ŗ¨¤ĐFx§UĩbSø{ÔĐŨ”ÄĘU€ĸĀY¤j¸XØ. 1ė)b$ AÁ_ŧ;ŠšŠŽˇą0ÎH\ã&¤’TwšÂúІ—Úĸķã‡Ũōžôôuu܇ úPQ@-&iÔJ^Ԕ´ (Ĩ ëKEcQEbŽ´w Š(RŌQ@Š(P:Rw ĸ“4R´QI@ƒGjJ(ĸ€3ii)iŒ(ĸŠQE-2efŒ…ëOĸ€"Y# ÑQƒä8nA`ŅõîTWŽŲČá˜æ’F?fPØ,Įĩ[ëÅ0BŠŲÛEĀX×ljž‚žhĸîrnSE<ü÷+æč)“öĨb§ž)g?é10éëT"ÄŗČP71č(ŽPųČ ¯QPĘ?Ķ'–8‚;6ė“ëHbŦņˇ!ēTÃ ‚1ëT‡îĻ‘ ›ĨLņ…ĩ#Ļh°ŒRžj›el•9+ĘcOņ5 “wĨīUÖVY7 îôĢ€GAKŌĸķĖÁaė) éKœ´Å`[Ži ō+î#oj”ôâMiX)8' ĨŨ‚ f€ŌJ܊P;PE*í*F¨@āS¨ĸāUû1>nî3ŌŦšāĐiĐÛ ųąŸÖĄb°ĸ;F}ŊĒÅĖ^tXsQKŗÆą”ÛŽĻ˜˜ˇ`›`IĪ4øžxW‚1ÅLĐŖĐRô¤2ŖÜyw=ŧg­[īĪzkDŽÁ™A#Ą§Ž”˜]Üļ:ÔVØ$ũjĖ‘,ĢĩēS˛,lŠN 4"@ Ŗg¯ZKGhí]•wzTĸÔ$EØNļƒČnŨšÄBņōB‹Á…Fq'j´ÜÕkˆd$¨ģąÔP2˛“āL2BkS œÕ7ŒÜHŋ#;…KrDLz›8īIˇŪ ˛24gĖÎsŪŦAR0åŖĩ&Ü RŽ˜ Ž'=(#  õ æ‘X’xéNč)ŖŊ.ėĐO‡ëIÕhTņJy‹÷);NhĘ~ZwQL…čhüQM/Ŋ&>\÷ Ōô¨šō÷gš|`íÉ9 u ĐxĻO4ņGԚrEį4îô¤ŅŪ›ģœPúЍ¸tÅÍįĨ/CE41ߊq PGÉBŠéAĨÍGo•ŪũęLQۊMÃ8Å0ļN8ĒfÜČOÖ¯˛+dÕZšSëL °1ŒTkjI9öŠĨ¤&Ų6}(†Ū8s°c5-'z\UiėŌi73jĐ⒋XŲîĀ’FeĒc˜Œx‘АĶNh¸ÖxžXåPžõty¤íJ 9áYĸ* ĒĨãADĖWî‘W¨ĸāRŗļtfwãwjd$ŲÉ&õ%Xäb´ 7†÷ĸāQĩˆŗK3)ļ’ˆå”°![ž+Gڍ Œ`cŌĀΉ|ëÉ%ØZmŗˇJAëĀ5¤@Ļ"p@īE¤ŋō}ØéÅ ˙!NŋÃW ŧlۊ‚}iÚ$“zĻ×4\ ņƒũ§&N>^*O)m|ŲŨ‰ŨÔSî-„Î9GdP-…Ŗ‘Ë–ęMV¸d6k„Ú„äJ–ėėüvĀ Ųn‹Ëi ĨJÖåíŧ–lāc4 Š™ČūšÁvÚ&;ŒÔMm;Áå3€ qŽõ=´O!ŒŽ&Č'­(Ē6ÖķGtŌ9ų~ĩt@8RŌ 3@Ť4´h´Qڊ´éhQ@éA ĨŠ-QGj(ĸƒÖ€ :ŅE%-w bbŠZ(ĸE Ž´(ĸ’ŠÍĸŠ)ŒZ(ĸQ@ Hih Å´PvĨĸŠ)i1K@ZcF¯Á§Ōw ŧJādtéDqˆķ‚I=Í>‚xĻ2ÂZጴųTŧNŖŊ?ĩN]˙eėhŧ æĮĪSNŸåģF< SnĪīa'ĨY–Q Œąč)#Ÿįãi=*ĸwDãîį­?ëaÁį4Ŧ2ËLŠáāЎ%H8¨&Ŋ‹éIrPšL‚Įš,æE,0ĀĶÉĒF6 Å÷ĸäâpāúQa\ģĀ4ęŠ#˜ĸSĮ 4ɤš_›$žh°î\ā7ZRØĒŗĘđĸˇSŪ–yš=Œ@ÃR°ą@¨å™bŒ1įڛČwØĘPž™ī@niƚzŌę)Ą€ņJ$CüB˜Å(¤Č##@…<Ōt4´P0ÔwŖéAĀR}(ŊčĒÖĶ´å‰\(<ŗŠNôwŖ’ÜØČ-¨ œN…€#E:JĖĒõ  ƒF3J(€ ž”„vŧŅš€n(ŠSAæ€ qH íĮzvih<„w§' §uŖ­#SwcŠqëKé@  #ÎM.§”‡4Điԝč^)SŒŌâ€ŧP1’hÆZ” 회 8§´ųÁ Œļ}(F4˜ų¨ÁÉĨįž”^üT˜;ķŠSšAŪÔ –ĨíĄĐž”‡¨ úRČ â›ŌĐRëH>´ØŌ”öĻį֎{R‘Ōœ3ˇš(ëHN(SÎ(niąô§Dī@ žh´IĨí@ NE'jkp´š!hÊCĪJoAÍ8r8 fÛOŒÔOœT‹÷hq“ÖŠ;Đ:ŌĪ8Ĩ#Ŋ5ēĶN)€Đrq@ëŠŌ‘¸q@'œRƒM#œŠv(␚Z(ĸŠZ( Q@‚Š( ĨĸŠ Q@ Ū—ŊPKIEQEQE!…˜$ŌĐPiO†€Š(  Ú(ĸ˜ÅĸŠ(RŅI@Q@ EPEPŅE%-4”1 Ĩ› ë@ĨŌļNĶ´f§ãኤYM´†4!O­I ͈=ĀėŸĨ4:—+Ÿ˜v¨ G*Œ\íĮ4/úT‡9ÛĮ4X Ī™į }Ę~9¨c•ĶFz Q6_r3Ž(MÃĨ(Æ3Ue™’åU{õĢ € ;w5Vd‘ŽÕÂeWŊXF ƜŠxaĶ4uŖœQ֌R dHņŖ™A§§Ô܉$1í Š`JņĢ R8Ļ,ĢÁ'ļM4Îëpą2ŒœÔæ€"’ ōĢîÁ˛D$Bž´íëģnFīJwր*ŦWUbģAëI"š.Œ…ûĻ­†ĄÍ/ļh¸XĨ$. Õy"›w"˛Ļß^j˙CTĩAĮ\ĶLCŽÁ0ôĻ^2•Œžjâ€Ņ€FA†Ū">āĨq•oGúž~_Z”Ā ˆÍ'#§,‘$‰ą‡ЉlĒá‹ĮLŅq—UlĪĨ)9Râß,€œ’8̏Å!‘wĄŨĶNÚ0ņHĞ: ģ21BŠĒŅE4P:ųy,{hLl1ŗÛ3–#ĀÍI ąŗŨŸ˜Í5‘Z24mœŌÛ#5Ģ&Ō=hb2=™rįpĪ4°LĪoŊŽYj8äōíZ"­ŋžÔļŽ͎ŌHę(đË+°;¨ô§M6dōTdžĩ *-ÄfÎīŧjPŸņ0mȎ M Ē Œ.ŌE'ÚØ†uLĸ÷¤1F.Æ%ƜÔ6҇€‡rŖŊōȲ(eäi’ ¤ŸîŅĒÄ6ŒpM+ũ×ôÅ!•ė[dž™ëSĄ„tĮš—­‘žM2Ī&Čã=(fŪāM1N įųC;ĒŽžŖ.}đ(HÁÔ[“ĀÍy˜*’z ­gæļįv;IāS%—uÚĮœæįÎh‰ÎAĸĀZ mĨ˜“ĘĖė ejwžAgi,ÔX.]=jššQr#Ų”=é°Ü4„Ąeę(ŽåžÔbaôĨ`-ŠhäõǞŨˆæōđimn’9<ëE€ĩŠ\Uq{lsŒõíS–ÆPhiŦꋗ8ģšéPÎ#—ũšÅHŌ"ãsž”‹ Ī&ŠęyãąÅ>pĸÍŋŧ4ėßÖ–ĢØmW<՚@(ŌŠ\úPJBĘ ũir(öĸŽ*Ÿcg<šžŠ†ÚāN„…#ŊIŸš€:RRŌPŪ–ŠJZCEĨ%.3H)KÁ PŠRi(Æh¤QķgŊ-Ŋ)æ‘TŠ3J(ĄO4å÷ “@ #šR8 Đh¸âœŖQڀ†F)ĀqŠZ(iZ^Ôb€įSčĮ4P@Ãfˇ-š)Iö šPM:–€ 1EQE'zZZ)(hīENô´”´”Qš -Q@Q@Q@%)¤ bŅE% JZJ(ĸŠÍĨ¤ĸ˜ÅĸŠ(QETSËå/Oj–Ģ]”ã’i dėûc,GAœTQ],ˇz˜ŽSĩ* UT ŨčR@åQČČ1š°öˆōųš ÔÍēaÁĸāRHZ[¨œÕȓlJ¤äUūÄām÷qV•B QĐPÆ ?5PÔ@WFI­ƒ9Ē7M4€ĸ‚ĢīB;Ķû•į<Ôˇûûhģ‚G‚0‰–š'GkL;ˆéLAnHŗųNÜŌÂōÉdXš :S­ŅžÆĘT†ÛІ |ģFˆĢoí@G;Ŋžö<ƒÖ›˛˛†Ŗ¸¤ˇ˙{eIÁÎ*-¨ķ1QHédûZwÎ1Vg™­Ā%sëQ]—P“ØS¯_}ļr=Ŋé€åŧŪČ7zYdIdōÎOâ–ēŲŽ@ĒÖĘ˙jp +zŨŖd+x"¤?{5ZÚ%ŽY6ɸ“ČÅYÆ &2ļÆĪ´×"žˇĖO>•NP?ĩ-×Ëw^¤ķNĀXždE+ŧôÍ:7ĖA˛¸Ē˛ˆˇČpYņĪ)ļũ‘ĮŊĐ ‹2“ŒÎŸFAâ˛-ĄķĨ‘sÆ´­Ą0ÂŽãëCB%Î*–¤ų‰vį;ēÕˇéTĩ.‘ÜІˑd@™ę§†ĒŪL`ˇęx¨^WŒDwä7ZVA˜tÍ(5JyŸÎ(ŦyīSĀ]ŅKõīE€žŒŌtSš§öÖ˜Ú"ØĐĘZŠÆdA éI5ØYü˛÷  „ŅUŌ´Ĩyzæ—í‘îĀ'ŪĮkĩĶ5\Ũ$donCOûT'8æ€$'"Æģ€õ¸BÛwŠ|Ģą…•€īր'VĄ”äSŌ›,qǧŨ”2ˇ ij=Ãv*E›šÅ.pi€æZsį"€Ûm.iŽ Æ)qžhāäQH8Ĩ Š)h)i)hQE CE)ĸ€–’Ž”´QEQšJ@- (¤ĸŽ´RĶX‘Œ Ōæ€ô”Ŋé(ĸŠ(6Š(Ļ0Ĩ¤Ĩ AEPUnXŖ\ô5jĸąÉQšhč*Ŧ d¸wíŒUŽÜÔqÄą—ŊC?ü}Æ}Š.ÖÄ*iŖ/‚ŊWõĻŲæãéLEŽ‚ĒOĩ.8ϰܤ{R^Ķ÷ŒîܜÔËÉˌ`ö¨lō7Šę XŪ›{LDP ˛KõĢ r8Ē‘ ūiÉāĶŌbļĨĪQH =č5WÎpÉ7j‘į).šĪJ,2j^ĩJŠã ;Qį&ō™Á€QԚ’#įkŠ~ELāT7DŦ”āŠ›žE)š/ ŗu"¤9 €`Tô5 vŠ›—"ĻĪ84Ļ€+Ŋ˛ŧ›÷0#Ĩ*AĩüÆrÍÛ50Åʘ)VäČFA÷Ĩ@đL˙!enF*ĐhEÂÅ+wat商īj’I6\ĒsķU¯ÂšcV`ÅA#Ŋ ÜH"Pägš|r cÜ)dEu €i–ņyQėë@ˇJΚæę<žõŖT崑åŪuãŠ2˝åÆÎ{U4ƒĪˆĘNŌ}*ņ]Ņínr9¨)"‚ŊŗÚ„YĖÅd?sŒĶ%•^C"B š qļîKriŗÛ¯4úˆ-[uģäķUė•ŲäļŒÕĢ8ŠC‡\5D ÚĖ偨ܿ€m!ŧ,Gz˛ĮŠĨo=ËM‚۟src™SoŊ+ ´rG,ŪPÉįÚ¤Ī˚Š}ČSÜ)ķvU†øĘį§ŊI%ĀHD…N*ŧŠķĩJ˃.:f›ąšt BŽ´ėŒxŲÅ:ŠZČÂåСĘ*ŌÍ+ôĨ`+Ŧ¯<îˆÛ}ēĶᙚf†Lnũj¤€ÅpÍnrˆT–L+3æšb4) &yÅ#bĘæäũĢĘÁ5nĒ^…ŪŒx|ņīSG*ž@<¯Ph^ÔĮ™#ûė8ļ1Y×,âg;AnĀúQ`4T“”`jJĮi<ˇŽEIęiī9uĻĐ–­7<Đqœž•nĀę)- Іë"ŨŠą äPŒzâĢXHŌ@ œÕ“ŒĐ(#R,h§rĸƒę<æ€#’—ī¨4=´NYxjJ ąB‘.ÔÖŠ#nĢzŠąÚđ(-Öí$“Ôš›擞´šÜ8  ŲmT âŽ%ˇīÄŽûˆč*ŧ–×kķ)įŽjđŨ‘ƒŪ›b+5̉]‘Æ$ëDīn˛.Cg•Ģ}Š:Wi đÜŅđŨNkDõĸŽôŌšëTubČX…ëWûĶąÅ Bî6šŅT’¸8Å*HŒŠ\ŋĻ:Uā)Œšw…ĀŠgq!ØéĐúÔÚvãn g>õ;ĸ7, Ķ€`p(¸Ŧ˛qĒŨ˙´ķYŒ7jØ##˙­B›"ö%P7 [ÎoâČÍ^[xҎ…ųŊME%ŠI!ģ?Ĩ+ȂFî̆#œS!‰¤°ÚBžĻ¯ė6ˇ<`ûÕSbā•Iqū­yËh†rÆi÷ĘĢmŅJŗqdf_xäSn,¤™P =(¸Š÷ąŦpÄTa˛9§ß(6(ŨÆ9§ÜÚM2"îSļŸsm,ļŠã#­Es+Gi )ûÚsÛēɁJ÷Ži^ÖImQ[DéRĀ×,ÁdE :ŸZ§>õžP€lqš˛‰$Bf,NGĘ Í2âZų$Tʎ*Üčí 1ũū€3íÜ5‘+žT֙ųˆŦķŗË1l*~cZcĨ œŽ”›ˆėiôv¤18§R Z(Ŗĩ€Š( AEPQKIŠQÍRŅEQE —Ĩĸ˜'zZ(QE LŌ÷ĸ€ŅAĸ€3)i)iŒ)i)hQEQEf€ii(ĸ–’€jP1GzZ„Ç/Á=¨Hˆ‘œļI7zAL,VD’0ügwĨ5bfŗ)›9Å[íGj.+ŖxŠĸān ×ãØUŖ9ĀĪŌ›äĄmÅ~o\Đ*AžcžÔ Íä„úTĢnˆû†sA„ųĨÔã=iž ĄtĢ`‚j(!h¤v$j%2-ŪĄ¤ļæEˇZĒĩéŸ^äІÔŸyk úŸCW K, d ´!ƒįëR‘NāG "“z¯wk$ŗR1ŠšAÍv€;ŌJŦČv‘Ÿzvq֖ím剟~ŌŌŖŠ)Ŗ¸v1äCZŠ´î(ĀŦ.ßzŦ1VŌmĘ55Ĩ•ŋú4ō,œn9ˆ—}ņt īW ÁŌ€€Ô\V+Ë:ĨŠ59äÔrÚĮ,Îr*n؆Sš•<ô]šeæ™nŋ|õ"ŦËl$HĢ{SĶdÂEsžųīL 2}…2eˆāˎ;š”qU.­eøpvĄ–'¸ ĀEā ŧß|U°\)ĘžHĢč‡ ŋ–0)n77m$*ô§"Én%fûŖ•Ĩx^ Ŗ*.å=@§”–ádČ*¤`@†Įį5šŸĖ õÛڜĶ´ös×Ôi+Gjbtmø `RųmœĘßxö côņ‹AVTŒšĢ`ŅNLņLĩē/)Œ¯SCđŖ<FEâ3ŒĶ‰!sH8Š+@íÍŗMäŖĒ†ÄŌ§z:P§šu- ĸīGZāĶ7 \ŠaĨĪË@ŒĶS>”ŧÔ´R/­;¨ÔÖ8éG;Š1ķĐų UžÁēO5e!5iúR§Üæ‹€Ē¸P Éõ Š&õ cĩíM$‚)Ėp(PsÛŊ“Ž(4ŒvŒŌƒ•Í1É' ( ŠZ( ƒÎ<iƒƒNF$(Ī<Ņüb‡í@ÅfĀ zkŽE( i{Đč´´”PŌQE-Q@Z %-ŠSI@´”´QEQGzJZ)(wĨ¤¤i)i((Ĩĸ€3(ĸŠ`--%´QE(4RŌQ@ E ĸ€–RĐMbI=;5ĐĖ’@”Ā•X:îŠZ‚åZ†>™ Ėę‹!)ĸĀNsŠZŠI„{rĄ§yĒiāž”€y8ŖĨC,â7UÆrqSi€”›8sÔS¸ R;ԐU˸Ŋįå<âŦj6.Ü`bŖ[xÕˇsRŽ”Pi€IĮā‘R< ņ'“Îi _w=sŒÔßJ`VhĨ‘V7Úu#Ŋ%ĖOąB ŒķV‡Ŋ\ ‹§Ęx#5,†6“lŖå#ƒV!Ub~´\V+ŲîĮUƒSIū­ņ×SÔĀ}(÷ e["ģzįš,ŽD§ũĒ”ÛĄrA#=pią[ynJČp{MõĒV¨Iģœty#‚ĒđÁ$;ųSšÄŗbc`Į$6ĐąŽC’H5-´/ļā2OŧsD’ ¤Č4Ä2fqûÂA§\!71äį&˜Ëæ2ŒŦ€ķR܂“Dß :iš2ǧæcŠ<É"‘­š[ŋŊ2å)0åAæ’å„ĪĄĪ9ãĩJn.V2 Ō–{Ÿ&P¤uî*ŧŦė|ô4ˇGuĖ@úĐņ\ āŒuÍ;íkØ;AÆqLš]ą9Q‚Gjeŧ>m˜]øSE€¸y 8M2$ōã @īJė 0†¤c|øļįx§‰†AãÖ¨Xį …€=š§Yœ[Č ā)Ø Lë‚7 $"q=+>ED€2’_=j[ÅÍĸŋqŠ,äpčz2=j´kļĖ`ö¨ öŽwsE‚æ†hëŪŠÛ4lĮ9lœT1Ũ͂vîÅKŊöĒŌ\22Ė:SĄœŗ”uÚãĩ „&wd+‚žôąŨ+ĘcÚCZ¯iŸ´N}Īķ¤ˆįPûQaäP*:GíŠ™]r§#֐Įw ĶC|ØĨČÅ ĀįŠÕ¤úԃĨ-.3Iš3@ Žh ƒÍŒÆ€*¯ŨP=iĢ JåÕ@oZ’’€Pi;Қ^´¨¤$†€@ŖĨ`g4ctĸ€“­!lP(šS@Ĩ íŖqN4”€故{PŽ79¤į8§õ ¨ÉĨeôĨQšk}Ū”ŠÂķKJ(Ķ÷ŠÔPcšVéKGZaãķÍQŪ€-“RRtĨ Ŗ§Ĩ&h ašĨĮ4îĸŒb ‡†°)ôP1­Å&HėiũE/‘š(š @)i( Š(Íĩ%PKڊJZNô´†€ ZLŅH¤ĸŠ`RŅ@h¤Ĩ ’Š)RRŌPEPeQL´‚–€ (ĸ€ (ĸ€ (ÅQEĀZ))iŠáK@ĀuŠŠ0+^Ш RJá­ƒÉĀÅ[ĻyQī ´f‹…ˆ.Ë>´ŗô¨ŋ–X–Pę:aˇÕˇ—Ö˜†ÎĒnc‰œ™’!÷O\SωŒŠ"`‘ëI$lY$Q—^ĸ€Ë †NĖqšĩPFŌ;–uÚ=ęlņšC*°'PJ‘æa#*ĻBŒ“Qy€ßūĨ33‰s… Æ)ˆŗ‰:ĶĒŊ‰ũĮãVr1R2?6=ÅwGZx9Õ;Ēv"å۟'ú5ޝzv –FvĒL†VUcģ‚jYglFĒ~gĸÁrtį9¨$•ŌåPc Iž[sŪ™!-|žÂ‹piqP™öœ“č)ņĘ$$`†A¤Āĸ‘W‚GŠ՘¨#4ūÕ^4\矘õæĻS‘@QE :b§ŠŅc°cÍ ´)9?^ÔĀ‚gš”… Ž9ĢqK}øÚzHöė’™ Ô|QKo–ÜíĶڐ€7f‘xséU-|ŅpÉ!ÉÆjōŽ´†gÆ Õ˟1 ž”čä’Ū9<ĖüŊ(XÚÖᜂQģŠ‘•ŽaWûšĒ2ųFãĖ9‘ÚŸ$Îm|å89Ļy˜ļ1m;ČÆ1DČbąĀäĐųķĮ•ˆ+Üb%ÄČĸBCQÎãė ŊÎ)×n­g 3ž”X ÚwX„ǤŽôÃs!‹Ėv÷§9˙‰y*†‘?ūi÷šÛl%œĶcŊ\) ḨS1Šö‘†ļO”œš,ķ]$oˇ‰¤K”s¸g­V'Pt=ŗR,>\ŽŲvxX "ę]ÛÆ*DtqšT4ØÕ–F`8‹ÂMžwΈžŨã>”æ`ŧ’Ŧš|…ļo/%‰ÎīJŗ*‡°ē…āŅ`,ŗĮ=é]Â.MgÄģėAbxÎ >Ü‹<;sëE€ĩÂNNÎÕ6EeéŅåƒƒŒz֓`RhÜC@>õŸu$‘ē˛đ3Š’îY!ōاQ`.d~4Tį™ãˆJ̜uĻ ˇ 戞^üŅ`4i*8äÆwâÛc$ö ĐzÕzÁw2¤āą$ū\^ij—Íļ—$¨ˇq6üĒc *ˇ­Nh¨>×#æëíK-ÂDÁY°OJšŠ‚;„rB°$v§‰ŅxgĐĸ’FeŨ‘Zq‘v‚X`ûĐŗÅ Ų´yQ–ÜWšxQLĮĮŖĶéšĀĻųŠģ€4€‡ėō‰ĖšöÍ^Ÿ˜ž*ÕâÂÅ&ß$"„įĩ'•$O”uĢ´ŌĀ#"‹…ŠûÛ¤ŲÎ=('Ę=ĒÚǧŨP>•ÁÄ|ŪĸÄBƒü÷Sؑ~˜ūī5!‰dÉ :Tˆ+ī$ŗzŌawĘ$äįŠKd"2Į<œ úRDI$(@_~æŸk#Č>2ŧP"+\y˛ãĩ"?˜ØļGŨÅK2G+îÆ‘7[3)BĘOĻļŌŗÅ탚’FÆ=;ŌC¸Ļ\`žÔ’)d#<Ō]g’@ÎĨB¯cŪ›w#InŦ8’ßb+, ={ŌŨ`Û)Q…&˜‹VûÄ Ĩ¨á‘]0‡8Ԟ•#!K•i9Ģ*ČHäuZÛ{/֖#›šH杂兙2Ww"¤Y†#­QE ~xč9§Ž5Ž˜ĸĀ\^´Û‰„ ¸ŒĶ…TÔ0ŅGĖ 1¸d ØķOVÍWŠÛĮ˚ĢsK+! ‹ĸįŖšĢp¯æ&dĪ4YĖÎdV;ļž(°—Ī,\ė*MÃv܌úTJírčHĀéUÔIũ ÜŒõĸĀ_éÍAūtŒáGztŗâĩ ĸ•Ā‚{a+SąĮz!ˇŲn}ĖŨIĢĨBķŦnŽ3EŠY! QĪĩ$6oug7Ĩ[ō)qšwØå0ˇ.ڕāÚĀÅYoaÖĒÅ"‹šÁĸ ļžęŊsE„LoXÆdTų3ŒĶ/Ÿ|°?)4ë}ĻĀ3ŒäTw[MŦeGāRɸBĘ<đ 뉒 gōĒ÷āᏚ§šŒI^äqE†/Úãō„™;OĩËŌĨĄ€ \R´´¤qU>řUžBÁyÕŗŌĒjR×ū=‚•ö"‹)"8ųX­4en¨Ãv:SŤaÃŽW¨É{ēN„` VûDáÜí)ØÕÕ$ķTî5ĘlÆėōEXy–ųč`MģšųąLÄ‹šzzži MØëC7ČOëM”…^N*Ŧ˛;Fr§ËũhŅܖ˜ÆŧZą‹¸ŠašĢcĘōŒđ*']ŗŠŨķUagĮzR@ëU&[´pįæ=)˛0’g øDéSa—iIâ¨,Ížâ~bxÍ&ŲÃÆIfĪZv˙jSs1ĀņéUîŖ2FĘ:ŌY]ū[lõŠÕƒ(e<sYé;,>K/=LwAbA<ûS°›¨Ã8ëNŽ@ũū•B"šöšëSÁKfÜØíE„Yķœo\úfŸYác1į¯ËĪĩKa+4DBœE†['uRm9¨ä˜C )&ā:œSŗT#Ļ¤rwˇNjÕ¸e…UÎXPĐP)-TõŌb—ĩĶg9E愍Š}*)ŪXÔē€@õĸŌs:#˜ mbbx#=pzŌÉm )Ļ KKJāW’Í(,ß/Njo•@8ķUn-ÚvdÚV˜ o7’Č:*yāYãÚDų1íÎORiũ)\ ­k,VG]ƒĶ­:ęÕĨDXʀžĩdr)ĻhÔí.ôĸāCqnfˇQŅבQJ“\*ÆÉĩG$žõtš(¸¯r†8hßWKē&xԗ0ČŌĮ* ėę)’Į%ÅÄmŗb¯\ĶËũÍ,xVųNN:é–)Ā%GQŠŊôŖ¨ÅQ'ŽIÔE#ģcĨ>{ĩ†a\įŊN/EéLh#‘ÃēÃŊH9Ĩ ĸG^´€Ę8¯ļęŗ¨€-{}áRĩœ I)Éīš’KxåU2 Í;ˆ­pė9˙dbĸœĨ&īZ´öŅą™§OÍBJ¨ė(Ū~Å:dfĨžUYôÆ*qŦ>[ËīQŊ‘6™Đuš˙ĸĮôŠŠbdŽÔÛx nōÃíQ[ؘnRųĪjXĀ[Z~8Ē:„$ūôIˇhéVíķä&zí¤!įĨSÔĮú.ÚtÕk¸$¸]ĒĀ/|І&œ?ŅÖĄŧ!įXÜOJąg !G#héŠ'ĩH˛ĄÄ‹ß֘ŠRÁ%‹ ˛3Ž•{ÎÄŽîFi’A5ÂĒĘT(98Ќ1ļŨ˝Ŋ3C›pÂ5LusšiÆë"§"ŠŨY´“+"Ŗ­^U  €&vŖ&F:žkB1ąGaTf˛–kŊäüšëZ"›Œ3Ķ­‘ŠÎhîZč0,WwZŌÍ!ˆxRdõÅ;­( O´”QEŠ( Š)(i3ERŌQ@ IKš((ĸŠZ);QHÎh¤Ĩ ĸŠ(ĸŠLĐŠ(ĸ€3Ši)i€QEQE´wĻK'–šÆOjŽÕ™Ŗ$÷4ĀžÕynY¨\O†o78R1@õ ŠBá[Šu Z(ŊęĩČ/QéUáo!Ĩ¤ą_J́NĐ)ļäv4Ë7Û ™' Ō§6Ž7,rFíNŽÕc€Æ^ô„U\L3‚Fp*[)CĢ&"ša–2v"’F7f¤´ļ0å˜üƘ‘šp*•ę‚čƒīž>aTb~ Oe¤†ÅģXŠ8ÉŌI#yŠ}˙Z[€EácœōņÔĶ‘;Ą#Š ŽÃĨ1 ygŠd‹p9öĢõBįߖĮ ŌŦ\]ŦŠ$Ōc%fÁŖ’q%ēvŠG#pīY÷ĮtņŠ æåŒ'+€ÃŽj[fōm×pÆy5 ī/@zT—§ĘŖŽ@Ļ"UŊC’CcÖ¤IÖEŪ§z§uˆ­RM ĒAĪđŒŌ°­Ėd[ĄÁĸFb­‘šĨi’Î㎴ũ4“æ1čNh°ËokUÚ8°Ž‰(Á=§qLXQ[p^hŠėD—œōĒ(Œ—m'E ž;uË’ŨiĢlRŲã9Å;îk™$ sNōŲ uĪĖiâY\Ģ`5$đŗ"í9*r}č´ ;*“ĩ×õĢÃîÕU¤¸WPZˇˇŠŅVķˆG<ž1O…Z(qžŲ¨ī2 yéštėÆĶ8#&A)xˇTkaŧÉSD˛&áE6Å7+Č{šVQt!Ürz HdāîL9j+…&ę$J¨Fy˛áx§`%7(7c$/ZV¸D\ž†ŠÁI7 yÍIqQUn^qëJÚhJ…ögæëOČÆjĢ,ŗ— ‡šē1I Āw¨.™#t="ĸģvÜą/&™rĸ?-c8-×ėQ@Å18u¤8¤”ĩB9ĻYüŧî$~U4rēÜy2äg4X 4Uo=¤œĮ0ŊIĻÃs$“Č’(°Ãqžh5Cí>\äÁ8ÉŠ ši¤eیS°—@ÛK})ՙ—’ø°*kD5&ŦŠ(Č#4ĐŲ QŠ“#49Û9ÅTĶŖ#{°#'Ŋ\ČíFáŌ€ū•DÜH’HũŪ*˙JNĨV˛ˆĸ30ųž§xRN]A#Ą§†'$ŌĐÆâĸžŨ&ÆrčEJ)hĢŲįmãŊ:hĢĩŋ:ąE;DŲ1MĻMĖ:—ė§ėĻ0ß1ę}jÎ(\,WØ´ō{ã­°õFÚŌX.ÎŌĐЄZdI 3Tfpō"g,jŨÔs2m„žšĒbÆåGĘãžŧĶ@[ļ -§đņLŧ›Ëļ¸Š,Ąha+&2NhēfUã4†SžŠČIãš•á+`šb>õŌŧ—1BÄœņVīŖ‘íÄq b*A\ZrÄņJ75Ėp8z¯[EåˆG sUä†HŽüčĶváŒR„ÅúG!zâŦß6Ëbsė*-Ļû@•S%ēûT—vŌĘ"Œ`Ēũã@äųlŸ;ˆĀĢ09[$gÉĀæ’úŨä‰c;;Tļ‘ēBD¸É=(&ŋˆāĘ­†Ū€ŽôíĢũŅųRū†7qHSč ôęJ(´ (ĸ–Đ(ĸŠ(4Q@4RŌRhŖĩĀCíJ)( ĸŠ Š âŠ`(¤Iڎ´PQAĸ€3¨ĸŠ`-Q@Q@-1Ü"’ĮŸJHÉcL2+ũā:SĒšD}§9ŠÕūéÍG,-$ĒĀũڗ§Z3“Æ)híPŨ@NjlSdE‘6ˇJۜ[séUáȊGæŦ‹e €ÍˇŌåŽÂ€|¸Å;ˆŦĒÆķœĶægYŖ zĐ#™HEÆßZ%ÜĮÁ w idŽ}™Ũ‘‘OI˛ÅOP9¨YģČāŠƒ<„zqE€—í$’U UęjE•Z=ũĒŊąÄNPi ĪŲdôíE€´&B˛0iÁ]ĀäĒ  >œ6@/\R°ÉÉ ŧŌG*ģ‘ÖĢĀU˜íXE%Ē>N{Ņa\žA'˜?ËÜTĢĘÕW‘Öä&rÍ?Ío3ƌ ŽI4X Éį”uÅW…ņĘõ]Ą ÜāŅaܲxæ—Ō‘š^:R)4€O1wíÜ3ž”áÖĒJ3¨'lã4Ā—ÖšŽŽ2Ŧ Ea†Đ@+‚8ôφRšæ¤Å0"M…BáM*FąĻÕ•r3Ji\å„HUÃ/CBB`Į%ēšrį4íØë@Ũ.ö؜íĄāa0•0H H“$ŽPEIŪÂÅx dä|Ũ…X< Į^(<ŠW¤ņą•%°^ Trīķ–VRGaWąīJ;…†@ŦnëNo”“ڝQ]?—nĮž1@lØ5ĶČĮéštĻģyGŨŸe›|°<ՕPƒ ”6$Qĩ,ȏ=),¤Äī‘ķ5]ōc/ŋoÍëBAlYTn4\,SØ&ŋĮ^jįY€íڑ D¸1ŠHG‹ŽÆ}›mbįøÎ*ËOmąŽ ĨŠÕ"mܓÛ=Ў‹3†,AÔ*ũßjpû´ātÆ)ƒ…Ą~é▓ˆ>RiT|ŧõ  9æ€9\Q׊ÅĐŒ– õÅ­dĐ2"‚ĮŽ(­¨Å;Ĩ%:šHģšĨ'ÕãëJĮĨ.qA"šĮĨ @ Š\ŠoĨ|ÔāE.iŧn¤ĮÍ@ã4fšy4ŒpE?4LnŖŌ•Ŋ¨Ôfpihi 4÷ įūÔĖūÔšíMū:”RP ´RwφÉ8 Ņڛž)7t  ))7tŖ<āĐžqFqAāĶĖŲ  äæĒŪ[Ë3ŖFßwĩZ^”@míY%2ĘC9ũ*ßãM'Ŋ5›%&ęŨϝ۠ (¤RĐAâ“snäPiT‚>”;m\æ‚xÍ2_ģNūPŲ\ŌnīBôÅcé@ 4ū´€P(hŖ4”´R(Ĩ¤ ĐGz( ĸ’Š(ĸŠ-”šĸŠJZJZJ@-”PE†€ĸ’ŠĪĸŠ)€RŌRĐKIE0#¸šcŪ’×ũBŌ]0ÜŌÛcÉ\~4 |Îë“Ö‘ËrTc<Ō]ŋʨ:“S…6ž”ÄWÂ% Ü=ęxœŧ`š‚Q°™.Õ, ļ0šÉi 4’Ją˜đijŊŲũČķ@Ëęë•9ėö¨ā…~•¨~ЅXĐžÔ ‹aiî#ĒEäĐĘU•4Fˇ§š1@=ē9Ī ž¸§yjąųcOŖŊV6īålŪ1ڜ!‘a Ė*ĮJJ. ’4ÛĘĮÖŖ‹tw,Ŧ§æ=jå- ƒ^ņ́ܰrFz쁜āg֚ņŖũåî"¸ĒIŗĶ“Ii=¸ 3Îjɉ6lÆúRC Ф‘îh¸ė=ЍÆ@ĄjĩėeаlvÅYPBĨ +IŸˇĮôĸi ¸ō˛B’E’ĩĘɡÅ#-Ā”)Æ0iˆX›ÍL’ā‘MĶÁ˙Z•]¤BáqÆ{ÔV.(x9 GŋíŒ{÷Šå¸1Ė#ۜÔ18[™KqštĨ~Ųzր%†ã~ũÃhJOBči—J,WŒõÅ4Cæ[Ļ_ 9X UFųZr¸|äUi‘‹ĢDAeŠ}̇N˜ ō)XbÍ Ŧ‹*§<ûՅ`à ƒPMå™Ô–_áÅGjßé2¨āzP‰ŖFy#ąĒVŠdFĀéķU÷ #gŌŗmŅŪ967ķĻļ[ĩ ōŗą5g5"Lä*šWžD2p´ŦījB— õR erčĘ÷4ûyžE“wŪZ,oË+ U1LļĨ‘Õ€Â÷¤ļ¸i‹†+éM˛ŧ›Ŋq17-§ŊKUá”Ũ;Ž´æšUrœ–@ĸĀMŪ–ĸŠu”eh’eŒ€A$ö€õ‡ÎVĀiÂâ#pÜ´'j 0JŒ›”äQæ)Į=hƌķM|ÁīU,āžũč÷j4„GĻŽôÕ9|Sˆ ŌŌ”b€ôŖŪsŠ}¤ÅG4éûԈÁÔ2ô4¤ Lf”Ņڀ qHE•p ú^´˜ŖæŽÔŖ‘@ Žh9Îih<ŒPß"‘<Ķ…'z0x Ō°ŖŠLi{ԊNôœĐ3ŽiÜsHhäškgx#ņ§Đ(ŒØĨ„PŽFhāf”1@ ^ôŊN NôĄš"ŠZFëŠP1GÖƒÍ Ō—RvĨ(ŧcŠ äRK@8‹ĮŠwŊ( Ph(ĻŽCŽ´á֌ķ@ØĨīE&>\SBĩ;4´ ŌĐ(æ€G4Q@-%-%Q@Q@QŪ€ (ĸ€ PEPŌ (¤GJ( ŌRŌf€Š KIKLŠ(ĻKIK@@=E(p8ĸŠŽXVG OJsí4ę(‰3Ŗī*sV-˛c$õ&Ĩī@•;ˆ^€ÕkĪõc×5dt¨æ‡ÍP3ŠHcĸ!aR{ r@aßŊ@ņLcØb§Eځ}WWoĩ•É#Ģ,ž{F lyEАˆØ}­É8Ļ"E¸f%BWŽ)ņĖ tĄļ´‡#­6 3 Œō(u¸ˆ#ëR’ÉâŠË˙,€] š’nfOŨ4X ƒĐŌ⊈÷\2#ŖšWbķė,B¨įŦ-š:Ux$'zļH‚jrx cŗÅ 4×;c'Ō KT§“ŠŗF{ĶULę{ EuƚãŠ+`‘œS‡ZE`GQMÉŨ@hÍ(¤ ĻíäšZSHĖH͸¨ŨJņ#ã#‘MWs#)\ĐŌ$ÛĻ1‘‚))Ee*FA¨ÍAûÍ´ =î%A=*j­Īš]Š>ÔčaÎI䚐žh÷ĸábÄūjžœŌE ‘NXCuĢ9¤'4\ŽūQ“éU­ÖXwnŽ}*đ4ĸ‹…Šq<’Íķ‚Ē’Ø‘s)ÁúÕĖdԁEÂÅ+yI)õlĸ÷ūNpŖŸj.)X%“žĻŸdG›6=jȆ5l„ûPFŒYWú."ĩŋ7Ōũ)ą.nĻų°Õi-ãI ¯Ū4Ųm’FŨʡ¨§pm ŝ¯¸“Í%Đ-*´L7¨éV!…b\ ķL–ßtžb9Vö¤2œÉîQ¸u¤˛QöyœÔņ@ąĢdî-ԚbÛ2nU“ ŨŠ€Ë 1üF Š=ķH›ˆÁâ­[Āđ+ †‘PÅÉ9f^§9 DĘŦą¨s’;ÔGīzˇ ųKrqØU+eqæ Ŧ¤ō(I^hÔČÄpxj6܀úŠĪpMą1“ž{UÛnaR})1•Ūy"ēĀ\îč*cré0GA’8ÅW™‡ÛŖö5,Œ§QŒ‚švņt|ã.ĶڔŨˆäōŨ[=ąŪĄb¤Ŋø§_&@‘:­+#Ė<å^A4ÉnÚ9Ö02;ŌÁ ™„˜č1øÔwX7q`f‹. ĩ&Ĩ‰•mĶŠmīŦqŌĄ•GØFhsxīÅ7Ͱ"Š]äÄ3÷ąÍ-ĘŦ~´X.;QÁ1‘×5qXöĒ7§rÂŪ¤S¯ĸœ4XE܌RŠĒ öpŒŦŨy椙ØŧiÚ\uĸÃ-äTĘė†9€y÷ĒĖķG1‡væ<‚{RŨI4oŨ÷ēĐ€č;Ōgž*œķ´ecC†cŒĶw[…˜6{ŠVCĪúb*˙O­ éNĻįą¨ŪeŒáˆ€%īM'œTKsū1\ԴǞ,´5÷Ļ$Čį Áą§nÅ.)*FÁY€' §Ô¤H ‘ŧtæ€'Ĩč*?0"—Ėļ‚3õ ôÎiĒŲ8ĨÍRŧ™ SËPęZŖ ’;_5e%€ÉŠíf3@† LzP:RŌPŌŌK@Ši(´‚ŽhԆš ´”PŅEQIE-”´RRŌPŅIE-Phĸ’–J)( ¤Ĩ¤ ŌŌPEĸ€3č¤ĨĻESĨ¤Ĩ Š(ÍQEŖĨPŅEQԊB¤āšSHQOP9ĻÉŋ˜÷§Đ~D}—JAn› ŒâĨÆ /J…í÷`ī98éQĖ3:r} Z=*"%ÖE?2ö§p˛æė<į4Œ WMšVëNXŲĨķ_ôTôˆ1df#”Øg `Šœj4„,­'ö€YÎ"b}*P žýÁ Ō’8Ö1…P2Ēnkˇį‘ëSEBûˆ9ô§IæŪĩŠb‹`9mÄõ4î+b "6}jeMˆ@$RMyŅ€ãŊNËōŸĘ€ ˇiŲ›#ĨI¤Û—~ÕāxʝÜö§ÛöepA9 í/ŗĖãoĨN¯šwõV#ƒuc5m@00)ûÜĄ\QFszįũšKr ÔŧЧũ9‡ĩ0~nâ5`ĖĒFãŒôǞä]EKx9„šĸĀZķ<°§nõĒwyžäŌÜåJ1RÉÜ V –€B})°H˛G¸t¨P+[1V$`ŌYÆ<ŒäķE†[ŌâŗÔ9–TÜtæĻi^ uÎ ‡Š,žVš*ŧ"õŠÁÅTiž7U$ū”ĻV2ųq‘Āäš,“N †o7 Œ2õéfōˆĪ9č =ÃE ĘpN3š|ˇ) ÁÉክv䘡)5Oq˜Ģ…Zv@#Ŋ3ÍC)Œ6[Ō†q@íPÛŦk+6āŌid œQEp’šUČ#¨"žŌĸļ3ĪōĒvÄÉXwĻã֎´Å‘IÆáŸJEc…`M IڀG­P(ķE&BrHī“Ą¤bvŧœqL„Čə í@1FNâƒ>´ĶomÅ}jAGz.#[h•÷…ųŠÎéåŋ āĶ›§[ėCÍ/¸āžE0$´Œ%¸÷æ›=ˇšęčÛYjĀ(Ž[ŧų~gԑ֚ÖŌqņS<ÉųÛåue ÁīNā@öĻKuŒˇĖŊ FĐÍ0ē€ŠÍ\ČÆFĄXŝėNŪZƤ…æ–h^XQÂüëÚŽQš.(Ę$š(prIĨģ%‹Øc"¯Ģw™Ŗ.å^ĸ„Āˆ:%Âą Yē)/‹#IÛÍ,ģŽgMˆT/RF*õ)\ŠfŠ`¤¨ę)čņÉ"ˆãįšĮJ´:P  āEÆU¸ē6Ίˇ ÷ĢHwaąŒŠC> ($zĶķØR­ųŲŗ×ĩ7N˙rsĐÕŠ#IdP‘$k„PëL VL>Õ7<“JŋōrŊ1Î*ĘÛĤ•@ 8" €Í§ü~KŽ”ļG 'įšĩ¤q>õÎ~´=˛;nä×­^ÛÚmčjÔĶ$@n`2x¨…œb]ęĖ -ÍĸÜm%ˆ"“‚į5I˙ä"7ŒŽ8Ģ‘(Ž@ĒR(mD*’;šŦ—ÍĮČ?:õAē„3A’Hī’2ĀŠŠ§ĩ3LHFÚb–éÆEīÅHŌ Ā §ãņĒcešķ|Î3œRvŗ¯€ą1žĩĄšĢ=¤“\,Ā 4 žtx<“Kz‹q:}ėōj{Ģc>Ō)Zlö˛NĒ €mĻ!ŌÜY~F`GjŠy#–dVūun0ÉV9#ЍîíūŅÚpËȤ2‰ŽâƒuŽjĐ´™dƒp@ëQ¸1ųfHÁbjK{qšŒķģŽ(Dž) TpOĨIU`ąH$߸“VŠ)sIGJ\ņFx¤w 4§ÚŽôš PhÍE%-QEQ@é@ IŪ–’€ (Ŗ­QŠ(ĸŠ(Ĩ¤ĸ€ŠJ)š¤ĸŒĐIE†Š  ĪĸŠ)ˆZ(ĸ˜-%´”´”QFh 4Rö¤ ĨíIK@Tu?kO›5kŊV”ėēW#åÆ3M ’Ë#FĘ4é$ B–=Ē˜bé܋Áž„q@¤ÉÁ¨ĄĪĖ8ëP‚~ØØéŽhˆs&Gî 8 Đj´O  ՞‚Ž)’ąH™—¨§gQÎG’˙Jl2<ą“Āô4A+ŧŽ—Ŋ6Ī>@úŌ@įí2āpM1ę8ĨtõĄf žict|”üi Wpƒ&ˆäY*sAuÁį5^Ëũ[S@Š~”ĐxĨbÃŠZ€å!mÅ>ĩ!Å@ķ„ zš˜(‹jû”`Ō}|Ķ&N~´}Ĩ2zŸz‘\:îS‘@ÉmēA&ã‘ĐQ5š) Ŋ*Wuw1ĀĨV ģ‡ Ņp+<9F,2§š{,Ģ&@ܤr*r@ęqFsE,°Č8ŗŠmą‘aSĮzˇÚŽ”\,Q…dŗ2Ô—Ņ’ĀÎĶÍZh>”\,U/  ģŸųSUē3€Ũ*āES ~?ŪPqEÂÄPųE›ĘĮSQ]qw=*ÚĒ¨Â€$‘$Ŗ3EĀ­|@ōŊsV‰ųA ŲŖŧŲõëRĮÅÆI>Ļ€*Ũk¨—ˇĨ/–˙jĀĀį§š)8aĐŌG ™HāãĶŊĪæŗrIĻÛ.æĮASyŽÍ… ÔbŖKwŠbę†ë@ P?´=)c]ˇíŽԏŦūlddŒiŠ‹r\œ‚9ĻA2Ũ´d€S Y¤VäģHPÁrd˛ˇ\Pī$‹!U+Į´›4LĨ›;OJ[íÆ>ƒtjUX•ûÄÔ×Y6ęØāšxvŠØ6r@âœŗnˇô¨ÚDkF#°Å3´Ü/84X ˨ Så=ęy&Eæ7OjĒøk"sĐ`RΟėÕŨ׊V+]&Ū§ëS‡g ÕI;…y rŦ;ŸŪÍ *)-ÕÜ:’¯ę)ŋiVRÃˇQQÚŨ´îĘĀJ™-Õdķ ,ūĻĻ󚍧pĮÔ„ųGīTØÍg1Wԑ‡LUß1Sī0Ā“ĩ LŽøVĪĩ<ļŅÍ EBnc;‡iâUeÜŦõ i€'֔œsU[Ŋō0Ú5fFŧœ x9¤VÉĻ,¨ÃålÔbęÎ\q@Š,qŦĀĐP’+&ā~_Z€Ŧ/p$, ūhÉâáĻK2G€Į“Ú’)„ĘJ@gŠ4ŸÃÅ*t hīIŪ”u ęh ŌĐŌRŌPŅFi(hĸŠ(ĸƒ@RZ)( ĸ’–€ (ĸ€ (ĸ”PE”(ĸ™ôQEP‚–’Š3KE Ã˛Z“ø>ĸĸģ< ÷ŠûS ŠTųˇņV e@:ąâ™+™#:š•öān=ø Œ­ųĻíU¤c<sŸZ˛8¤!r)iŊĒĩÃ:P‘E†ZéFęWwhH,۔ņVȁĘŦrTdPčŽzö4´Ö‘T|Į gĶLŽ]Hɧ‰ôaN b…ÖFf †¤ķ$ûFÂÚ°:QځEr…ž•( €Ãf•ėî:ô4–Ė>Ņ/=jÂÆĒ €ižDk÷F¨§qÄŌ%ĮJd D2‘ÔV%U!{õ4Č ōƒ Ų @ l Ûäõ<æ›hvp;ԈdAĩHÛKmÆ6°õ  ˙†€xĒÛæûNÜ|”û‰Œ!p3žĻÉÉŌ•žī›܀Žü͈â€3än“'<Õō2­ŽõJ^o[bËMˆŠžX) įQuÛڝią.É :bŦĪƝU°HZ.nUÚ‘€IâŖˇŠH­™JüŨ…Z0Ü0E- )ÚE,0hōONiļąÍ›ä œ‘šŧh§p3¤C&ßŨ0—<œqNēŌH¤Á8ëWé  nK=ą}¤g ÅKb؈c°ÅZāŠ88ĸāP˜”ŋW~i†U}E ōĸ@=@?Z6.s´d{Qp(L z€~ē°Ō!r¨lu;*°Ã Бĸ}Õ‹FÆES.ã‚[Ĩ‡ö  ûUÁo}ÛsšC^fũŖw­´m˛ū@G'ĨūB‡oL|ØúU§…$ ‘‚;Š#…"ÎŅÉęM¤[´Ÿ§JBö§áVūÍōû~oZO˛Ä\>ī\͏‰@Ē:‹äāãŒÖ…E-ēHÁ˛U‡B)!¤+’ۋuĩ6Ā.ųHņVŖ…c$‚I=I¨E˜I +¤į  ÔÕ[uüģģp+@{T2[+IŊXŖúŠH Ėo“ ī=О–kôĩaŦH$mãž)ŌÚŦNpëüTĀŽ8]ųĨ‡# Ģ,@aÅG šä.jfŒz@eÃÉ}"°Č¤ŧėöÁPœÍM‘I|Ī4’NOjÄą,ÉąúS¸兤Š"€)$ūŲ_7ŅŖrzÔ˙eĒĄ—äąO–Ų$e`vēŒEĀ`ˇUŸĖ †?ÃUmãI/eVĒō@DŨ÷08Ļ%’Į1;dœŅp!ž_&ŲR<€O5!ĻŠ"ÎĒŗ$k*~†Ą[\2¯Eĸâ´opĘ.‹ËT:y9œŧOi­ã._ĮƒŽôĢhû”`÷ ;ĖÎ*ÄK _ŸŊĒAIŸzCRmĨëF@  ƒN¤Í-RJ(ĸŠ(h”f€’Š(xŖŊ%QE€)i(Í-”PE¨ Š( ’–’€ŅAĸ”(¤ĨĒQE´fŠ1@îŨ× Ā58éKڒ€+¤Oö‚äqRL:J–“ĩ¤ŋ,J™ÜŲÍZ\ėëŠ6.rÍ-1æĢ]úÕĒĢtŦÅp(@Įέ**ÔæĻ_”ô‰‚ĸ›,‚<ېæĸšĮ”ičÁ€#ĨGr~NzSC#A‚9=ęxTŦ`7QUā^5aAŠ.eōÁcցGi˒BŽ‚ĻCē ķvˊ2AŌnį iju¨Ŗ‘ÚGĪŨéĻv˜/Ę:Ņa“I'–›ąš#H—ŊG3ļb;Š[A‹u  }h‘ƒĨ8$RŠŠyĢõĢ+÷F(™*—BŖŊŊÍ÷˛<@2šā Tņ1)~¤sY÷ īp‘9)ÎjÄō”(ŠyjmˇFėTíįw™Ŗ$0Å>íŠĀøî)Xbũ­["4fĮR*XeYW#¨ëT-×ũ¨$œâĨ˛ ĒÛ\“NÂ,ŧ杰ĖN;RĮ*˝Ŋ¸5NÅØ™ōIÔsĸę:1ĸÁrܡ96*–oAKáÜŖ)WRˇlŪČO^qEá1Ū#ÉĸĀiҚnx5— ‚Ü“ĐzŌˇy1īۚt2ųŅĒWĶoˆG‚ ´Ĩ-íÔ§`&Ĩ¨|Č#eÁ#"’[ŦUA%y4€Ÿ4EEÉ$%ÁĀi‹wĀ9įĄ  ëc€)#•e@čĀ­E,ąąú7j—oÛÂĐų¤cŠ…Ž‘WvIĪõpčƒŪ€$Ŗ<ÕCy¸)Ú ŠŌ@ęŽ:’‘Îi äRŋJ‰›Žhv€;Đč ö ĐōĐËHG/Ũ  "ōM88¤A‚EāĐOÍKې‘@Îi⚤S¨ÍQ@4Qš(h¤ĸ Gj(ĻEPEPRŅFiQER´Q@ E%´”Q@ EP3>–RÕ(ĸŠ)i( Ĩ˜+(^¤ĶؕRŨjĀķŖĀĢdb…ˆų’Ŧ‘L”éëÖĨâ€"Ys1*Z¯¤“ķ9âŦœĐÆR7ÔSĖŅíÚÍLE#ĸȸaQų¸ 8ÅKœĐ*…PAM–?5qģū‚š˛Ģ6Ά€Ėiˇ9ĻÜGŊU€ÉSSv t DŒė &=Iە!CĘš°:P@#dS¸ˆâųaŨÜķP/lėOáVņĮß*<œ¯Z…[ũũږÔ˙Ŗ­/Ą ĸ8v!MĮ,J@EWļB˛:†ĘаWŽ)īDúĶæ—Ë@Š8Ļ]$Ž N(¸ ȎîžE1Y ĖĢģp"ÎåÛ1KĢ#üĢĐuĒō ȤĢgĨ]8Īz$m¨XôÕË"“×OūŠšã†F—1ã<âžĶ&ÍÖĢÂ?ĐØšaÎ9§a؆ܒ)Á\äT§™l7rH¨" FčŲÜ:sJÃ.†įŽiŲÍV(Ë9Å$ŒĀ ã,ë*6gæô¨dY"˜H˛÷”ČŖÛ~y÷ŠĨ”‰DjG<“GP&pÍ#TPČÅÚ3ÎŪ† 7.w ™ÛE‚å߯“hĸĄyö"2ÍĐPŗ6˙-€Ī^( –;ŌsPũŖ FÂqÆjSڀœi¯(wOŌ•J…Xn€V`JįZ—ĄĒ–uĪ_šŦ™úf†ēõĨσÅCzOpHúRĮj@jĩ€ĖE‹O­YČÍŖ8 Qہ‹MnM;8¤4R¸ LF9šõĻ]HŅÂYN´øŧ*ĮŠÄ;‚CUūČ ũâW=*Ö=(•ĀŠhVU xĮĨ nˇ,Ūõ'z Į\ ūCÆĪåÃrsÚĨ†ã9'’iėqJ(¸áYĐî–đČBšŋ.LlĢ÷ˆâ ˛…ĄFߌ“Mĸ’į͐`ē*=Û2Š;ē´$Bvîô§Ÿ­Ĩä%Â0ᚨîP¸‚ ãŖŽ):Qp*ĘeXÁ^N!Q4E'ĸ<ąä Ŋրy .Ā’=Ē”ŠŅŨ3˛LUú(¸[e7 JÆĨ™ ÜŽ˙쎭hR2+ 2‚=č¸ŦV´egmˆŽõ%Ä~l,íÅLĒa@ڏj.2–ž1 ‚0ĀķšŽČ1¸—ŌŽInŒÛššŸiaF(¸XŖfĻ7‘äRm/¨œ˜5qāG;ŽCzŠXaX˛W$ž¤Ķ¸ŦSōÚ+ū˜ ĐŅv†k¨Õyãšžę’ Ŧ2)"…"åG4Ž; WŒj‹¨—QUaÂö­PIn˛H$0î(@Uš"[čÔt\Sīrf…?‡9ŠžÎ7`I9éō²€đôĸâļ1sŊ˜–QĶûĸĒHX;Πܧ­_H‘¨G&Ŗ6¸BˆûPöĸã#ÚÂnĒņąY#ŠTÜ3Á̝j†AÆŪ†š-Ų¤W‘ÛĶ‹…Š÷g}ÂFŖ䚒ųĀļÁ-Ō¤–ĐK0}ØãRÍj’ltZvōŦ’<|ÍÅKŠĻŌ~čÁÅO=ēĖ€gzB[ĸðüĀķ@ĖÜ Ã|/ČĢŌ:E œm_JVĩß´3’ĢĐbŸ,+2ln™ĸā$2¤ëš;uŠ"Ŗ†v ëÖ¤īHåÅĀĨĸ€ ZLĐM-Å ĨÍ("Œæ‚y Rm¤Ōڀ u&iEQEQA “­-%-Qš(ĸŠZ)(Í-%RĨ¤Ĩ Ĩ¤ĸ€ (=h ŌŌPEP3>–’ŠĄ EPKIEV•ŗp˜­ZL▀*DwŨ“éSËæéŪžAČQ@÷šJļĶ<Ąæųƒ­IŠbš¯uĪ–*r9Ē×gƒ4 $¸Ę>ĸŸ¸ÜübŖ™ƒE´“M‘Y U÷æ€,Ë DŋņúĮÚ¤( #g ĻŠkqí@(éUų’Č[$”ä•ŌĖAã4X 5 Č˙h1ž”  ä7éL˙—ߐ3NTF@'āįž`/ŗĄ d€ŌŠÎAO#­9\eNE.ôĨ=)2 ę)sŠ3ÅŠĨ Ō€cԚcF9*3Q=Ī—&„šp› ĩSī@㎂E*ŲÁĨ9 ‹ėę"ØŦ@Ļ›såyaÎ>•#Ė‘¸ žjNųėh¸  FœãŊWh‡ÛÉŠįcũßZl*û‹Č0OtĒå>NĩFy•öm ×ŪŦ‚)hUķæđ vĻȌ—+# ŠāÕŧŅÁãĩ4tÜvô“Š­jÃːįŠē¤ ;‚€~”\ ×cÄÄqÜĶņ˜9`=zTĖĄ†dR$IŨ^´î+X:ƒ4M•Ī"­ĢoEoQQũ8ôÍJ:RcpOØëІŅAļɏ5dŽGĩ@-ŲFՓ {P-l2ؚd*d‰Ûfæ'¯ĨMoCšX‚Ļš‘K o+O­0$´"ÃõÛĖy MI°9ËTwHōEĩiu,OîG֖yļ$„G™’°c$ĶDRI ĨԂĮ"ŸQ7¤^`s¸ ‘RM+yEoJc36lmäcĨ,ęRŅPO)šTˆHqĪj’K‚ą‡ûT3ēũ˜`sI(-o1šuĶHmūp0yãĩJåZ†=¨Ž¤Sl@9Ījq`l[ž(Eâq€yŠMÂŽ3Ôö¨mQZØd ƒQœzųęiXe´['=:ûRQČÚāš„ÄÍ%/Øv¨ÃŠŦ“<˛:ĻQÎi°Ī$ŽĘ@x4X |PjÚd[/ķÆ)âwÚÆU*õĸĀ[ÎE1>ņæĢũĻHÔ;'Č:WŸnÖ^w ,˛(ŧĖėĘĘF;ԄÜv ŌWk†C ?ŠĻÎ*ŧ7K†ˆŽ6ÔrÜqå…9X „ŌÕDē&qĄSīVC|ÅM8°’qŽĩē ‘XÔŠ|ĢæDęQT!­UŖuČõϐá™&SRÕ;@Ŧá-ÉöĢy␠E&F(4Ŋ("ŒāR´ŖMÜ(,(ÃĨ…€ŠLҚZ)3FęZSIHi@éA‹Ō˜ ͊k’(ëšĨ*–šOÍNŠi<ķ@ –_,¨õ56j&Ua‡Ō¤Į€ u6–€IK@Q@w¤ī@ E”´QI@ ERĸŠ()h¤ Í¤ĸ€’Š((ĸŠPĸ’–¨BŅEQE´QEQE´”PÚĒžĒ --0D€ä(ĨtĨM:Š.)C÷ÉՎDŸ=j~ôP433Ęĩ–˜ į=‰fR{ôÅ0cíÜúTá6BŒŌyIŋv9õ Dm˙ŠqڑŋãčœōJ•âA9zP!_3z†ā€6¨ųŪ¤ äÛ9 sHС™ŧ0ĪlŌĮå˰%‡j‰U¸ÚîšĢ+ƒw\T‰ŖũŪ8ķS;yqįÅ;ĩ(Î*8¤ķ#Î1ÍIÚĘŗ•[„Čæ–QæĘ€qŽsM¸ \ĄÍ|uãžĩB-3„R[€)‹:đž• Öã°éÔŅpA€×"•€[ÎLgũĒĩœ §0%#'ÔTķlmĄ|ãր$Ũž)AČĒąä\˛¯ Ž#o;CšV –ú QČÅVRÉ6Âr¤f•\Ë;/*ĢéہŒ_’ô¨'õr¨…+}‚sšŊC&)~ĩŗ2Č#Œƈæc'— ¨°ĶI ŒTk>f1m9,ÁĨŲ‚zĐŧĶeÂļrzT€ķÍTŧ–/­ }E-!uLn PŽ­÷H4€ZŠšÂņ@úP1ę)¨Û—5U>[ōŖ8ëÍ0.Š  ŌE7čæÅ;Ĩ€{R€1€=(#Ԑ“ž(GĒ _"?, SDōĸ.FqKųą‡ĻE Â\āúŌIn÷ĢoQRãšZ@@-ÁV Äŗw¤û;nMī•^zUŒSըǰ$u§p!ģĻ °ō*dBąĒž Sę@3o•RÚ a”ąQƒĮZģŪ’Ā­42=Â:ôZ–e,05d0Î3Kü¨¸X§0‘ŽŅÄgj÷§I%Μ FĢ@‚84f‹Ÿ o´Ŧ…h>•bg‘b2Įø UŽô´\,W´‘ĨB\`Ô§¯4đxâH pˇNÁ#ĩ>‹sF„îîM5CCtÎĘJˇBJl1ŗ^4ĄJŠĻeÕ/UšĀÎ*Íꗷ;~ĩ9Pz€iqĮ4\ ,čÖ|žq€) )Ž4—#Ž \0ÆvÁŸĨ+Ǝ>uĸ‹…Š–›ŌéŖŨšqÖ­“†Éč)U>č”ĐØXĄnÃíī‚9Î 9€:—áũ*ŌÃmÁ>´ōĢģv}qEÄP‘ÔTöÅLöŒĖXL@=ĒÁ3Ŗ>¸§.;Œ2Gnád,ĮŊ6Ė!ˇ"Lg<歌SZ8ØüČ Ĩ”dO!_õyĀŠ¤ēHæōʓVPôƂ6}å~j~RiqGvĸ€ ´‚—4”´Q“E€ ZJ8  šJ(ŖQœZCƒJ}Ф‎=(ŒØâ€ŠZ`4ėĐæŠJ(hĸ’€ŽôfŠZ %RŌQ@-%´†Š)QEĀZ)(¤EPE%QE ĪĨ¤ĨĒ´RRĐEPKIE-”´QE-%-PE );ŌҊ Q@(Ĩĸ€ŒŌŌPĐx Py ^yĻČJĄ dúSč#ŠŠ)ÍԜԴ}h ´hNJ‚}i%uÚGŊŠøĨ(žXōöEF-†FX•Ē~´Ŋ¨¸O IˇiŌIąFezÔôvÅ Ö'YüÎzĐČæė>ߗĢ”Qpą\ŖũĢvߔ f”ƒÅö’Ŧ; žP6—ũ(;8ĢĀäf›€O#Ĩ:†W/CŸēGZ8kĀGämīB@_S•úRäS”JÅ ‘Ö ™$vh+tNõŪ&BÁí@@õ ŠŠ{+Į2dāĶn ąĀ$2žÔėņ÷ij8$*Ėė)b¸I‰ ž=E 34—†ÛPPĖņ],`–SúS%D¸ē(ƒk¯VĻ–Úä+ჴĀĶ)Ž2)ĀšÔ„ûR˜›Ō“ÉoJ7ŗAaŨhōÍ!Fî‚§øh%{ fS†{Š/ĄĨ=1I“éFiĨPŌlJ Rgځ†ÅėhōōzĐhSyCÔQäûŠSŒSK@ÅØÃĄ¤ÚŪ´{ŌķëH+Š_œRsũę9ūõ)vî ¤ßꆗæõ 3´oÜ4RîoJ(j’”ŌVe5ũĒsPĪڀ#^•*Ôj*ALĸŠ)”RŌPQJi)€QE(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĨÅ%QEQE0 (ĨÅ%.(ĸ))h ĨÅPQKF((Å-”RŅ@ E)¤Ā(Ĩĸ€ (ĸP(qEPIKEŖQ@(ÅPEPEPEPEPâŒQEĸŠ(ĸŠ( ŅE%´J–€ )H¤ Š)q@ E.(Å%¸¤ ”´PQKŠ1@ E.( Š)q@)hĸ€ JZ((ĨņŠZ( ŅE Ŗ´PP­-&))Ԙ ÅĨŖĩ ¸Q@ IŠZZ0j1O4‚‰ļ“m>Đ6Ҋ}&(Ũ´…iô 3hô Fž•&(\ĖKéMō”õ=QvJvƒ ãĨOŠ(쎐§ĩBúUœQNāV6ëŽ”Īŗ ÕŧQŠ.o˛Ž)ĻĐUŧRŅp)ũ—Ū“ėžõwQp)}—ېÚĩ]#4b‹…ŠÕŠ>ĖÕĄŠ1EÅc?ȒŠŋŠ(¸X°i)qIRPچnĸĻ5 ŊE4SÅ0SÅ0Š;QH’”ŌPIKE0Š( AKŠAK@(ÅPŠ1E” Z(ĸŠ(ÅĸŠ1F(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ ´QEQEQE.((ĨÅ ĸ—PQKF()qEbŒQEQEQEP)M%Q@Q@RĐi)h Š( Š( Š( bŠ(ÅQ@ĸŠ(ĸŠ(ĸ–€ŠZ1@ E.)(ĸЏĸŠ1IKE%¸¤ ƒE”´EĸŠ(Å%-”RâŒPQEPh¤4P \QEĨ-‹Ō–€ JZ((¸ĸ€ (ĸ€ RRŅ@ E-€ƒE€Š( Å™ĸ€,SM:’Æ†_ŧ*cPË÷… áM§ `/j(íE IKI@Q@¤Ĩ4‚˜…ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ Z(ĸŠ)€QE€(ĸŽôQJi(´Q@&ihÅQEQEQEQEQEQE´‡Ĩ ͚Z(ĸ€ŠZ(ĸŠ(ĸŠQ@ Š\QEŖQ@) -€–Š(4”´b€ŠZ((ĸŠ-PEPIKEQEQEQEQE%´PEPŠ1Eb’–ŠJ(ĸ€ LSŠ ”Q@(ŠZ(ĸ—”RâŒPQKE%¸Ŗ”Ph Š)q@ E.)((Ĩĸ€Š)ƒ€Š\Q@ŌRĶi F¨$ûÂĻ5 ũá@(¤Å( ĸŠ( ŅA ĸŠ)€JZJ-‚–€ (ĸ€Š( ĸ–ŒPQKŠ((Ĩ4”QKŠ1@ E.( ”´PQE SE€Š)q@ E.)(ϐRĐRŅEQEQE0 (ĸ¸ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ .( Š( Š( Š( ŠZ %ŠZ(ĸŠ(ĸŠ(ĸ–€ J( Š( Š( Š( Š( Š Š( Š(¸¤Ĩĸ€Š\QŠJ)qF((ĸŠ(ĸŠ(ĸŠ(ĸŠ ĸŠZB)h4Ú)h  ){Ph- Ĩ Š( Š( Š( Š( Š( ƒE€Š( ŌRŌPEPôÚu%!5 ũú”Ô,~zZ¤ P¨¤´Phĸ€Š(ĻEP ĸŠ(ĨÅPEPEPf–ŒQ@¤´PEPEPEPEPEPEPEPEPEPEPKEJSI@ EPEPEPEPEPEPE¸ ĸ—PŠ(ĸ€ (ĸ€ (ĨÅ%Q@Š-Q@´JPš(Ĩ ’”ŌPE´b’–ŠJ)qF((Ĩ ĐQE SH)h(Ĩ¤ KŠ(ĸŠ(ĸŠ(ĸŠ(4”´PIKF((Ĩ ĐQEQŠ( ƒE”¸ĸŠ(ĸŠ(ĸŠ(ĸ—”QEQEQEQEQEĸŠC@ (ÅQ@CJE4ŌĶP1ųęsP7ß  QJ(´Q@Q@¤Ĩ4”Ā(ĸŠ (´QEQEQEQEQEQEQEQEQEQEQEQEQE0 (ĸ-%-0 (ĸ¤´PEPEPEP@ĸŠSIEQE ZAK@Q@Q@Q@Ĩ¤´˜ĨĸŠ1EPE¸ ÍQ@ S@ KIK@%-‚–Š(ĸŠ(ĸŠ(ĸŠ((Ĩĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ QEJZ1@ EPKŠAK@ EŠ(ĸŠ-”QER⒌ĐEPEPEPEPIKE%´PƘiôĶHc WožjÁĒįīšZpĻĶ…-Q@Q@¤Ĩ4”Ā(ĸŠ (´QEQEQEQEQEQEQEQEQEQEQEQEQE0 (ĸ€  Z(ĸQ@Q@Q@Q@Q@R‗Q@Q@Q@Q@P(hĸŠ(ĸŠ(ĸŠ(ÍPE-%ƒÖ”qAæ€RŅERf–€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (Ļ€Š( Š( Š( Š( Š( ŌRŅ@Q@%-%´‚–€ (ĸ€ JZ((ĨņKEŖQ@(ÅPQKI@Ph3EPôĶNϚCjąûæŦšŦ~ņ S…4S…0Š(¤EPi)M%0 (ĸ€ ´(ĸŠ(ĸŠ(ĸŠ(ĸŠ)qH)h(ĸƒ@Q@Q@Q@Q@Q@QLŠ( Š( –Š)QEQEQEQEQ@Ĩ4”Q@ ĸŠN´´RtĨČės@RšZ(Ī4PKŠ(  RšA@ EPEPKH)h4”´b€Œâ—b€ ŅEPhĸ€–Š(ĸŠ1@Q@Q@Q@Q@Q@Q@´”QEQE SIE”ŌQ@Q@Q@Q@Q@Q@ A¤ÍQEQEQEQEQEQEQE.((ĸŠ(ĸŠJ)M%ĸŠ)1ϚqĻ1Wū#VĢ˙  pϊpĻ)i- (ĸ€IJi)€QE€Š( AEPEPEPEPEPFhĸ€ (ĸ€ (ĸ€ (ĨÅ%QLŠ(¤ESĸŠ( Q@ ĸŠ)QEQEQEQEt ‘P\r<ē}ĐūiØ tU_:āuŽ–;‰ …d Q`šf–’ŽÔ€­!2LTôQMĘ\„…#ĨI#¨|ŒfŖh;ūņéT„>fi$!X€Ŋj8¤+pļA§ēŒđy=i"‹‚XüŨĄr”QŒ *F-QŒĐRŅEQEQE´” Z(ĸ€ (ĸ€ (ĸ€ (ĸ€ (Ĩ ’Š(ĸƒ@é@RĐQJi(ĸ—PQKF((ĸŠ)i-%.(ĸ€Š(QKF()h ĐQEQEQE(”Ph Š( Š\RPEPEPEPEPEPE Z(ĸ€ŠZJ(ĸŠ %)¤ Š(¤Ƙiæ˜hÆéUûš°Ũ*ŋs@áMáLRŌ Z@QI@QL–RĐEP ĸĢ]ĖcTāÔĄöj,$ĸ [‚Xn\)čiōĖąœIôė”S#H2ŋˆ¨žč+´œRÅØä(aN Š(÷(ϐRĐQKŠOƀ (Ĩ Š(4”QE0 (ĸRĶÅ%-€E-QE (ĸ€ )qI@Q@Q@ŒQE¸Rf‹M4´†€)ȟ1 Hį­ÉpŦ áxÉ́G~h gb¨EIAi0ܧŊ'/v ôęÛ"žŖ4äTp)ķIKIHd;dHE3ɗ´ĩkŠ8Ļ"°I—¤€ĐĸãpÉ̘ĻĮ6æ(ˆ†Kš*´ĻXá§yņáI=EÉ(ϤŠųÚzR“Í!‹G֊¯#™fōՈÂå€isUBjā9ĒĘ7ˇĐ“ Ŗ2ۘeÜĖ›sZ‰NûÍĘ>Zth āŋ b$Y‡’]GŨãŅpFÖ+Áâ™(Dˇ`„ōi%âÚ<vjIUߠϤáÁãuāųą öŠ&gfö¤Ōâ6'Ĩ8KŠäméU0ąK"ÔqS4jļ¤cĩ $ōchļ¨= +ĸícœtÅ@˛ėך4ā]$M€āõ  TŊǜ ‹•Ë­R@¸gmā@Ë9éKTŒŽæGWÚ Ģō" hQE’€!'ÎōĘ÷ëDĶ´rĸ€jޟņûNŋŌ>´ė"æM0ĖĸQM*ʤã84›ãy8ÁqJÃÎ Õs¤Ŧ@íR3"đHúUHH7Ré@Ž]ĨÅ ĸÅ¤Í!cœRĐE!;A'ĨEĻV~8( “QQË0Œ…Á-č)pÍ´‚§Ū‚äÔR…'ĐTĶ4ÎŲ ,Š\T/.ÉU1÷ŠåR_/Ōz)ĸ€Š;f˜ōĸ3@ R++ŒŠS¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ–’€ (ĸ€ (ĸ€ ( ĐEPEP(ŖĩQEQEbŠ( Š( Š( Š( Š( E€ŒQE¤Ĩ ĐQEQEQKŠ1@ KŠ)3HŠ(ĻE”¸¤ĸŠ@&hĨÅ)ĻyĻE'Ũ5éSJpĻĄ)€ĸž)‚ž( QKHŠ( Š(ĻEP Å'JZ4JE?j@Į>•%Ųá?xķL~oڋŒ›ˆÁč*„9Ī—p˜āQīũá ģŗßŌ¤¸æę :÷§Hˆ¤°_˜ôÛgm’ÛĨBV`Cn<šąl›#9ûĮ¨ôĻČÛŽR1Đu  ƒw&—ŠCÅ)Į—clsHåß&Æ\‚Ü–švÍYØ<Íũč°ĨÅ%.8¤2&ž5;I9§yˆ1ķ ¯wƒ2 /ėMžŊjŦ"ĐįéKML*ĐN=i†€)OœP7 Œâ‘#  p­Fžq'îv  ;ņHĀ0ädŌžzuĻK!”ÎhĘ )¯šÉÎ}Šô¸ dF( Cl¤cœz|Ž#]ĮĨ*6õ :P!’CæAÁ^†’8Ødģnj˜°“Š( a-:°ZY՚"dÔÔĢ@lmUpC)ŠVbØH#ŽELi‹^õKFĨG ÔąŽ Įr)ûr¸4 b‹Jă:ąæ,pīUã)Æ$c’ šRŠTŠQpžrîÆ*QL (§ŠĨ7Ϥ››¸†)VßoÍŌnßĶĨ1ü\ÄGõ ĮķANXXÉŊÛ8éMHÜ\—$`Đ1°üōHÍĪ=é-¸šCڝåȒ6ĖŪ´Ûu’)rđĮ­.vQžzUWi~ŌĒ3˛–ægˆŽŅŸZVažõ;5žåSëN=i eĘå g€*+õl}MIpq’{Tv\GzĄ1ŗ–ŽäHFWց››‘"t¤ų×&6û‚˜SČšPjZ”•Ž{TvŸ'ÉÜōh¸gķÛōjw-rĮiįĨOq‚é“‚;Ķ"XĖŲf%Ŋ :Y€PŽO­Erqp…z÷ĸÚŌ”ĐHšRxŠāp¤įĩP.†õ Iį5x*)!ŒfCÔU!á}—[ {UúŖ ~øË'č*æījLūŲĸĒ^ŒnG8ôĻ™%)WęiXw.M-Všf@¨ŋ}ģĶ<ׂP’ƒŪ…q.Ũã‘vąÁíW•J§{ƒ"bŦŖcŠrJBqA`(āõéH‘ö!|d{T {ę5,îŠ 5nĘ šęzS°Öę'mĒN}*cÅUX7J˛ãĶÍÜAˆ$æ€'ĸ˛„ ž)7ŽÜî€uU'­^9ëڀ¸QG´b’–š( sUå¸ÚÛPe¨Į4U3q*:̍æŦ‚zãŠ~(Ļä͇J(ĸŖy‘!ÎMIE 9Ĩ ŠLŌĐEP@Ŗ"ŠSIEQE-%´b€Š\QŠJZ( Š( ÍQ@¸¤ –RĐER4”Ļ’€ (Ļ€ŌRŅ@ E)¤ Š(  M0ĶÍ0Đ2~íD¤—ĨEL xĻ u(Ĩ QHŠ( Š(ĻEP ¤'´hŗæA&ž2āę§57ĩ ;ˆŦŠŌL$uÆ*9cœČXgņÍ\8ĨcEh \r}i°+–b>†Ŧũ1@āŅpõÅgZC×4ŊčĨ˛í™×ŋŊN%Ũ)AŒô’@ŽŲÉSíB[ŦdNO­0eVb ō*Z¯9 ÎjqH S¨{•SKuĻĀ3֜ŅHnņ€inc’G\LH.›„Aœž´BLNŌĒG4éАŽŖ,ŧšUi_y+Ž!Bî’9r~aŪŖ@VŨՔäšwK,r 1\!y˜Ŗg Ô°ĘÎ\7Mä, OaPĀrŗã¯jC$7 Á>^™Še*ךŽŸdũyĻ>íôí@ņÍ-4°Š\Ōßü{ĩq Ž”—‡÷ŪŖ|¤1‘ÔœP„M* ~RqƒRtZäâX°zžhˆ”+1 G;:ĸåēS”‚ ƒÁéU.ōžŊ*mæ PIįP¸¨åŪvŒŽôÃ+ÆĘ\‚­éږYH‘S7"‹8 Ô/8Š@…M9'F O}h°QQ „$ĪCëSq@Ä— ĩúÔ­…'Ē]˛2ŒNhĐ9Ŋ)})r(v¤€IíUŽeteØqšŗôĨĮĒūsÆę˛`ƒÜU€r2:PGS3"â¤=88¨-æiƒv8  U6¨”cœŌ搜h˛Æ%\7JlPōš|RyŠN1õ§@´9“ĖSƒHûŨˇV <Ō¸2E2(nXæĨQ@ŧ@ĖpEF°fbėŲôĢ4~ĶĩÛ8L&zöŠ-÷y#wZ~3ÔS°1@ œ*ŒÍp_Å]#"”vĸāPC4’¨` žF8 ã4ÆĖâ+ŽĸĒY),sü=*÷Ļĸ„< *\‚.#nŨéˇI2ųž•qŖWašj@ˆŲU拈­túUĸęŸ3tÅ1í‘Ûsg4IxÂįô\ ĢÉȧF*8c.ŅÍHFE)ßÉōŦ]ûĐ`ũÜx:ĶŽ-^Y7‚8ŠÔŒ֝ĀK—ōí¸ôÅBˆČŗu#9ЧŒË ¨éUØČņ,AĮ\Ō$ĩˆ$ū4Čay 'ƒÅ>áZ;u‰EYˆm…WÚ¨ W{ÔĒ“ĶĨ,„ĮåžNãO˜4ˇŠâ‰™vĒGĘ´l˛?š‡qöĢáŽzâŗßkį éVî&FŊ*Z “@5‰“v1Rt2>ÔÁ: ,2čĨí@?.i:А:fRģH(ZxéM#špé@Š)hĸŠ(ĸŠ(ĸŠ(ĸŠ R S@ KH)hĸŠ(ĸŠLŌhĸŠ)(ÍQEQEJSI@Q@L4ķL4 ‚cŌŖ§ÍÔS0)âš8PŅE€(ĸŠ`QEQE CĀÍ-dPU—Íģp1O™Č•#OZŽ >ØØĀĨë~ Ē"9 čNJŒÔM3HpqڅŽÜzŠdą˜‘‰ÆO‹aåÛqÔô¤ēČ@9éQȇ단Ž”ØÛĪ•đW¨ĸĀ]¤ęhŌԌieŠĨ=jĨĶūũ=[4Ä&)@ĨŖP1§§BáŪ9øcŠšâr‘)CÉëNÂ'ķJ2 Cv‡9ųˆâ¤Œ>Ü?-HÔĶq‘ĪJ“ļĒņĘĪ+#1é@É †#ŠE‰#'­9ŽÕĪĨ69Ŗ ~tė˞§”q懑ڧũ)ĸE$¨ ‘L ÷‘*°=OJŗÛš ‚Ā‘ČĨ<Š@Ct$`/­FņČÂ5+ĐÕŽâ•Ŋ¨@Sœ“2|§ N•Õ‹,‹ūéÅYāŠ0aÅ1äėŅįœ|Ė%ļRŊZÚr(Ąv€Ĩqا9 "U䞸Ĩ“ū>cĪaS,´<(Ī’9ĸáb‚ ÚfŸtĄ $ dķJöĘōnÜsS4{І=iÜ,V0ŗĮX`r*ŌđĒâČL¨´X [Ђw MÉ×p¨v…ą8♴}‡=ÅāäpsIœUc)ŽĐc­FĖˡ‰=iX  æ‘Ã;zŌÆrĸ™q•Œ˛’æÄd ûÃÍIœv¨VVû)r~lR[Čb˜‹ TboÜ"–7bø#‚8"‹䔆˜Ķû@,G\RGp˛I´ÅNisŠ‹í æ˜Č9ĨY•œĻ0}(°΍&Îõ)=VH1p_°Š^hŅļ“ɤ"CųŌ”›—fėŒzŌ‚0F>´ \Ō =¨sžÔ˜ĻK"Ĥ“ƒŽ•Ŧ†E$ô&€-)* f"Aũã֐JņĘ#“úS°\ąŒū4LŅßR)$’å?(  #ô攁ģpÔSËå&ėg5]o›ē ļĐŖžâ9Kʛ[Ĩšd F3OÎi\cc‰bMĒ8§Ž)):#aŽ(ÍēíaÅAö08BúT­2ĒoÉĮĩJ“ ŠÍ1 JĒU{Õo˛žæPØCWsIÆi\eK{gpßĮjcZ>K+ķW¨î+cļd‰ōFâ*;u/Lũjõč¸XĨmũã°9íQÛãiį5ŖŪ\,Uš–HŨBôĢ1’Ņ‚zŌ• Ôf—Ĩ+€(ZZ(‡9§”P(qE¨ Š( Š( “4´b€ P SE‚–Š(ĸŠ(ŖRf EPQKF((ĸŠ(ŖŊJSI@Q@a§ž”Ã@ĘĶ}áMieûôƒ­0$ZQH:RŠ@-Q@—S4”Q@Q@‚œ})h  v䛇b¤fžÃËēķLUžų¤*Á§qX­$ĮĨFn•œ–\ŌŽāĀĮ†2>ā§pąŪK7Ũ?Ĩ#¨ûZėüqVJ+G´Ž)ĢGʎh¸åHÄĪJ95Ē] ŠÁ4†S—y@ÅxĪZŊE>ÕÄæ,`žô°†Ž SbDôT6ō;Ą/ØÔĀŽĩ6Jčgyô¨ÜæÜô);üáƒQLÅg§&Ŧ’Ë1ŽÜė)Æm°+ŸŧGÃl¨ĻKūŽAHdąÎūfĮ$dbŖŠLM) “‘Vpģ‡LâĢÁÖfü(Į˜Ĩ7 *˛2eÅTņâHüh,RÖ0ŋÄh°ÃáXރ7Kn&Rj㚠æęZ,“ë‘F*–íķXЁWsĐ@­AtėqÆMXZ÷ūYzN9QKPŧĨnjąíJ˛“¸0ÁZMIš†;€ÍŒzŸ¤1(¤y#C†l@unŒã@Rž”„…1Å 8 Šh*Ũ8§cPˆ‹sšqLAŠZËÉéMWV€€1Å:ŌĐcŌ‘†Ķ¨4͋Į)$]pÃ8§ÔSÍåq‘Hb¤J¨@ỉŒûÔą¸t ZqŒb(Æ ˇgVÆ9ÅKk‹l3`ĐÖä)U”öŠŖQÄD ÄQlûÔsKr¤p;ÕÁŌĢŪ°ōöŒ“H*ų–ģG G0ˇōöÔöä4CĩJ:ĶĄžÜ `ŠU˜*äpxĢ š Œp1Jā*ôĩá˙Gj”TįœI¨ †,Å$ŦĻÍTŸJą įĻ) ē1Å1á~Ίˆb‹}ŅK°ÃTí ŽJXâHÛ#¯Ŋ ĩ9ķ|ĶlÎ%sīS<;Id8õ¨,%ĪŊ(æüņÎ)#ų¯˜ú šKrĪæ+`Ķ"ļd”Éģ4Žä•BGĨRZ@ī´œUđRJ¨ ’';ÚŪ´Ĩ XŨ}j0˜´ßÎqSI ›mƒ“õĻ2Č-|Ŋ™4ĀšŲ‹BĨŽMM’* PÂ!¸`ŠœœŌ ÅV…˜ŽqQØ˙ŠæŸz؀¯zm– #šbxĨ&)ôĻÆ˙i¸ŽÜtč˙ãøų‡ŽŲĸá\ÆPŒ“Ú€.šØ„žÕJ7Ų ų˜äÔŗ$˛>üŖ¨Ēß;]cø…$†]’1(_njŧĨLéīVY„qzÍQĩËÜ3öÄh€6Š&@RIāSVEeMHĐú§~Ô=ķW@Ē:û”Đɀ˙D˙€Ôv ĄH#qhGû5 Ŧa­ÉīMĄGZæĢYH\ŨZ5#NZ–šŖ-Rb M•Â)b{SęĨülPļC$†_57™¤yÂ0P2ƙd?p E1h.ˇ‘ÁĒą%¤œ3m<J‘ˆPO`*šbkŸ18QVe%acę)XÃqæ“Ō–[„‹†Îj < ÛüG“R=¸–_˜dS[Äbš˛J8OōģW@㚖1EQ@Š( Š( Š( Š( Š( Š( Š( ĨÅRĸŠ(ĸŠ(ĸŠ %Q@hĨ4”QIš(SLj}1*I÷͐ōƜĸ˜ ZAKHŠ( ĸRĐQJi)€QE)‚‚OAKL™CFÁēb€ Ūk>Ę´˛MąļĒ–oj†Äa\ûŌÛˇ™q+UX›“‰ŖŪ:SDãp ¤gĄ5^.buTm¸F›ŗÜf‹zI?ŧzô„‘|Ļ ošō0})AÅë(āwXeKš2~!b8ŠãĪ?ʓ‚Ė1q$ОG4Ä'°€ĨīE!$€i™A§•‰ŖWá†E)‰6m¤ Qp!HryÉîi>Î6†jz(¸ŧƒä˜Ãš<†û8N7/"ŦqŌ—†6›‚ã Šë$„ŠųēUŗČ t  LÂáOš5,͘ŠŽÜįŊXíÅE2UQLDŠzUkĪõ‘û´šÕĎřyĨqLšš$€{ĶĘFŽėX–#œÔ­ț[ éL BŧŒĶ¸X¯čĨE<ŠéW˛H¨R Ŏc Šz-&kîvzšIĐEnƒ ĮãKxՎų§K’M2,‘ŗnÅlQ ÛË)"QHN)‚xÉÁn”†Héžj`|ÚqųĐJƒ‚@&‚*=Éc÷W§=jÆ)ˆĨx¤L/Ž0>”’&ô {ŌecU ÜôĄ°J1ëKÛ>´wÅ ĩ!QÎFiíĨ1ŒÛ׀Ļų)ŽƒQ™¤IÂ05gđ DB$NU@4’B$ äwŠŽ"Ų<ĸ§<÷4ÕˇØAf-Ž™Ģëԁ'åĖM*SĮz˜`ô âŽØĻ"Ą†FQÆŅÔŌ\Ŗ–@Ēv­\Q“ëEÂÄl3NqTÃm…“iĪjФ*aEÂÅHÆ,Τĸ$?qSÜ#Ž;vęŲT ŋ§Ĩ1 všY9žžIuÆ #ĩK âV¨X‘Upi\v ŗųei-˙ÖJsĀŠŪØHwdƒBDĒ…GŅpąZە“4ŠU\nRx5:[ĒŖ&ãķP°Ę‰QŌ‹ˆ˛1ÆxĄˆĖNän•!Œg­›ä'Ú¨Z ŌIÎ*ô‡÷X’*œ $LI9Ļ„Į[ĘfB9ĪZBĖo ĢRÅy# {S#Ü.K2‘“@ą’+FËsž) ˇŲ–9Æj[Å-n@ÕWUAœ÷â‹hNRĐ9䚆I&HÖBųļ)d˙ãøŠ â“(QM›~ĪŨõĨ ķQŨLaPGz@>"ûáÍ;<Ô/pRøÎi>Ô†ØqëNĀN[ißJX8 9Í=÷l!HŨHdo2Ŧĸ>æžÎrĮŗã öߘäƒVo3ąqĐb\ĻpAÁīS+81ōÜ6*śƒ“Čé@IôĨ˜&€~ZviGJ@23@ )zŒSZpéHÆ(ĸŠQEQEQEQEQEQEQEQE (ĸ€ (ĸ€ (ĸ€IJi((Ĩ4”QE!¨ĨûĻĨ¨eû†•EJŖŠˆTĢԘP(¤EP)i-QE0IKI@‚šÄ ɧ¯xŦc$ –9ĒXt ē#5ąŲkš…@kgōŲëLEÖ ’¤VVû­šŽß:ĮģĻ)ą ˇ!Wî‘@:öĨíÖĢ—ideC€´ø$2G“ԐРŌĸš_%AÆsHd›Aęü)ŦūV՟ĻõÛģĨKOQîT$;TaIÅG2„’0‡ˇcVŨCŽÖāU˛2OŊ6H÷AÚøĸ8‚:“Ôԛ‡9#4Ŗ§Z`V6ėT n M Đ+v§€3IېĮÛˇnŨEJw$˜Č>(<Š.1ĖLĒa@ôĸĖ’#Š@ãĨE mį3•Ā  ęĨ×ü|D=*ĶŽÂŖxÛqÎhL%\Ūq‘ÖĨŽ5YîÜĮ­>HV@Č#¸¤Ž8äŸZħĨSļEķĨČÎ*Ûō„‚jŧPHŽFZ„q"˜%$zâœ]–Å''Ō”C*[˛ ŅäģÚĒ‚´ô7’=›Ži$gk§Ub*A$ŒUBŽš¨‘xYįŽ”|ĻHíÁ.wf‹Ė˛GĪ'^B/9Îi.å‘=8ÍLŌ40.yc¤:JŠ&īJŠäīHÜr ķR'Í\rhfŖ–`Œ ąč>ĒũģųR,^ņ7.0*ËȨFãųT Íú÷8ĻŽ÷ŧ8ė:S°ŽZŽ SÅ5XđsQ]VS‘“QÛ2ų›YJ¸¤2čĒ÷÷Pn5>zUKÁ™ã÷ d°Āc‘›?)ŠŋW¸}ˆˆ É=i#b. ̏ęhfƒTâ’Gyã€hK‰LeŽ‹˔ „Íû1G֛öĸ#P…éš,,ŠM̜í¨EŌd z‘åTMÄŌŗŲĨ¨RQ#cĨÄŖš5`Ā…6cŠkZĢ(#Æ"ډōg‰IĀ4ų-wl$°o Î ô4\v!+6÷aŒt¨”´NEʐÕ(‰ÎāΏ‘H`”ĸŖ0 X-€08Ĩ P\‰6}ęHs°nëHcúÕ˙î9ĢĖp9Ēauŋi#4րÉĖfY•˜` {‰7ü§ Jš#ÖŠũäÉöŗo+I$ō*ĩžæ3ļ‹2<Ļã”Û<“=IĸÁri. DޝZ’Iö*ņËtĒ×l6ĸ÷Í>eW ™Ãc"‹ š9|¤NuΨ-Ë21ÎŪõ>õ-€Ã"›)Ú3éRvœŖ})  ‘žJc=éâXØ0âĒØ–CÛ4ËdVy éšĢ åđęFTäRƒéTm>ü˜č*Uģ‰W“ÍM‡rË“ÚŗÚc5Ԑ̍âA‘ČĒ|}ŋ€)Ą—$}‘ŗwǰ¨š&ąŨۚą3(ŒîéTČĒY3°ĶnŌF‘HnpjÍW´e0üŖžõ89¤ĀZ ŠLö¤0´EéiZ^”QEfHÃŊ)Å/jŗ¸’€ (¤#"€ņ¤īMÁ§r(´RfŽÔ ĨíMëJŧĐâŠCÅ(怊( Š( Š( Š( Š(´™Ĩ¤ Š( Š\RPERĸŠ(ĸŠ(ĸŠ( ŅA 4”Ļ’€ )(  C7Ü51¨fû†Št¨ÅH:SŠJZ@QEQE0 (ĸ%-%Š Ø2Ũ(=*Ĩãšųq…Īš@[āôīF8¨Ũü¨7wÅD”FÄũūĸ~”{ÕyY‹ uÅ:ŪBÁÕē­HcG9eĶđĮLT/0GT“S´ƒƒQÉ Ë÷ŗÅHiĨÔ6  c''ëNš!"ŽpÃĄ§ävũ))8Ī4Ž%pK;dԋĶĨ;ļ( @ThäûO™ˇJˆōÜyŒ6VâĒāSVōEe'wJB6Yļî­ŌŽāg8“hn)\,EŸAQZŸšSVYB LHPd‚iÜ,Ee÷ûõĢ*ęųÚŲ¨Ō Œ€j;Xö;āņړÎx¨ææĪĨ<æŖ¸VhĘ ëIX {ņķgƒCŠE‰Á;‰Ĩxæō{:{Ņ'˜æ0c#mX‰$:qHP9ĸ"RVˆą#Ų•8ŒŽ9ÅüŌ´¸ãR „RLĖĀ•42—ˆąäŽĩ^Ũ€’qÍ: VĖÃŽh Ž[‡VS"€SË0L(cĐU9˜ŗÅ–Ĩ—ū?#'Ļ:Ņ`š$3ībŦģXv¨m¤XÚR}j—Í?ŪÅEjž8<Ņ`šeY]wĮ­0OlÕUb,[¸§:d¤ šĸÃ}ū¨}jÄc÷KéŠĢ;ˇ=x§ÎĮ÷QƒŒĐĐTƒĀ ũ)j›oĩs‡‘ŽĻ fsÅ 03ČæŖˆföCMQ›æöĀļ3@¨üÅŨ´E=XáH>´€~)3Š7 Ȩä™REBZÉĩ)õ¤”§ˇĨ h]ŋErYûĖxŠ# 䎴Āv3A\ŠQAĨpŧcĩ!EôšŖ­6Žp:Ķ%BpM$“¤DÎM$ŗųhE=@W‡"‰`YHĪ֝žbĮœÅBîn Ä^Z°N§šĒŅFVä€IĀæ¯+\Šā÷Ļ;¤Y$P˜8Ļ8fŒ…ęiČęččiԀĢ2DŒ ĶbŠXË`ģŪŽ})4î"­ŦO>đ9Ќ”åjldQڋŽÄhĢ` Ĩ&ķqS‚kG¤f•†é Ā@úÔI*-°C×1Vö‚0i6y˜í#(ŒĮŒķŠ#ēŨ)MŊ*Ö*1a÷Í<ŌÎiÔ”€^ôŌŒŅ@Äh'šZB2x AŪ—˜Ĩ>”ŠiOLP8ŪwP:ĶĀϰÉá@ ŠCKA cE)éH:Đũ8 B”ŊŠîԁĮ4ƒĨ ֔t PÍ8S[­Ą›îÔÆĄœüŋ!š*%Š0K@ĸQ@QLŠ( AF(ĸ€ĒŨã|CŪ­“Ч<š°øžĸ ‹ÆdĀĀõŠčųHTašĸ€D !ø ō 2dĮ”ØÂĐņĪ ˜FäúU’jēˆw‚œĩHĶ"¸LüԀ{ pāR1AĪjC)_˙­5ĐÔû ‚÷›˜ÅMvŅČ>•BTBĒ5+‘åūđŒ…ŅE8ä Ķ&mÖhƋr0Ģۀ*+˛žC`‚j)œŦ 8ŨEÔ(–⁆}čkPEēdöŠqLļ¸_ĨHx¤Āh<Ō÷ĄG&€ÜŌؤāisŪŖ•D‰Œâ‘‹×5ÁŊLÄ"î'ŗí.˜•f÷?gųsךvár‡×žõ(9éT|Ô{PƒīUË`VķŠ`2k( œÔĒAP}GJŠq†ēûŠÖ­ÆÁ”Ō“˛Ėą&æĸ9ˆ* ėģ,xęsSG ۊ@?4ĸšzR¯LĐ1šĖĢÁlSĒßĪpˆ:÷§a4dœŌˆļŽÃI%1Äā’Xž(°ŗ“ŠQUŦě7>yõ̜š@8ž)qHZĢyōHXĮ÷V€-fŒÔ6Ō´ŠKEM@ ž);QGj–“mĘF;SŽNûˆãĐūjGvA¨Úëj†d!OCL¸ũåÄQ˙ ¸-B˜=Ę$JĮŠæį'•æōÕKÄ Ē;ž”ÉOú¸AāuĸšuĨEŒ98<{sŧsÚĄ¸Uû0>‚Ŗ‚Û˃s~X.\.Ē›‰āŌÆáķļŠdĩĀCƝj’p’¸ã=( – ¨[†jQĶ5•Žĩσí֐ĮQE†QEQE´”¸ Š( Š(¤EPEPEPEPQKŠJ(ĸŠ(ĸŠJ)i(ÅQ@5ĮAõŠÍWŸ  dKÖĨZˆuŠV˜ @ĸH Pi-Q@QLAE”QEQGz(ŖŊPE¸ ĸŠ2BÁ ^ĸĢĮs!Vb™­Y¸ŲôĒPžÛy5HEؤYc )H‚¨­ĀŠØ3:ņNY•œ ž™¤đĀ ĶdGØĮšzēžvœŌ¤”f&dâ€ęN§ëր!ĩB‘maŠšE/JNŊŠiĀNŊh*ÁīKÆM)ĐĒŋu@ Ž”´Ļ€#’5r ÎGĨF-ÔK¸d~5=  båŖm¤õ§Ã”¸<“O<ŌæĀ7ĄëU•ZŪF–RxÅZëړ ëNāU $…Ü‚20BčŪXQČ<šŅâô§pžŒU[u>y^Ęjāâ…P `9ĨpąZåĘƊ zšŠßū>ŽI>õtĸˇP !GEî*#fõˆíOŖĘ1ĀtŠ|„ ¸š‚,ģHĀ‘Ž(%ŧf(˛G'šŠÔŌģ ã֟hėčá‰8āKŗ!l8ųģPmX*HíÂæŖ” EōÔõÎMMģ,nŦŨi¯¯Š#Ž”h1n˜îŽ0x`3Oōg ŸwŌO ˛ŖŽY{S•¤yAe* PøĨ÷Ē‹3ũĢaû§ĨY=*lW‡ũŠļ_ęÔŅxŅ6ÖTŽÛ prj„O+˜ã%Ww4ĝŧĀ’. æĢũĄš0Aļ(În×-ģŠ,2gš+7—ŗé@ēö˛i’āߨôŖ|IÆb RBÃĄô4†xՈ&Ģ[°ûD§ņ¤’E0ąU<ž´Xeā@\įŠ@ËũáÍWvňĪ\qL‚ņŖƒš,Âqö,u§Ë”N1U’0o›ž)nÎ'Œ)Į<ŌpUKĻxŪ2­ŒšY$’7LļwvĸÃ,“´â—"ĢÜĖUÕWŠõϤĖ&ąŪ‹åĄE/aKŠ@2™<ĻÜqRâ ŧâŲ¨B'3gåÅMUėî3ęjËĢ’p)°8 ŸJŒO8įĻiėʃæ"ČÍĘĢė`rjlfŠLVKČöôĢģ”3@„4āxĻ’ ę(ČÅ×4Qz€[á‚æĸ¸ĘÄ˧T,§,rĸ˜‹„ QHhÁÅH H@î*+‡hãŪŋ­!™…¸“â˜ÉąM*§¨ØĨķ!ߊ"“ĖāŠb$ JáI=…(ĻČ쐝­ )Ų2wÔĪn^}ųãĄĨˇ‹ČB§œÔĢúS¸5¸,ĨĩZ0dŧ$ķƒRųSŦŽĘFĨI+R ŧĶ.-üŨ¤œbĸk/œÜwĢ|Rži\ —q;"ĸrY‰vƋíN´Ž2ˆG†áĘŽėÔŗō×sÍX4ŖĻ ŠCˆ1Ķ­Ks4‘ ÔÕ č!PØÜ3Z./'Ž)ãĨ ´QE (ĸŠ-PEPERĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Å%-bƒE! ƒE€Š( ¯?j°Õ^sԁ‘ĩ(¨…J)€´ (€Z(ĸ€ (ĸ€ (ĸ˜‚Š( īE֑U‚“ķÔXQMwTb4¨ÁÆTƒNĀ-&ižjoۚu ( tĸ€EؘŸ>•V}‰˙­Y’1"ín•ØĶ qéšb ĸįģ5ÖCDį#1…LB>‚šážMØéžÔî"Ā}@ädKß:bxQOk|Ę]_Ļ%ģ -’Ôh"'Øĸ?,į'­KxOîđÄÅ5Ą”„ā|Ļ–đņ sĪh1Ä´,Ÿ1;¸ĨšIUÛhMbg™ŌõÍDėzœį@VVko0õÅ2äe\ŽwSclX6;qSZcČ\sŽ´XW+ÂĖnœāã85bI‚ļÜ>Õ ōäā–¤…å—8æËQēČĄ–•ˆQ–8¨íŖĻ7gšŠųŽPæ‹a]MFŗ˜ĮéŪ›åHĶ)ĀUTPÄęAØvpjĩŪä@áˆæ­`ä ­¨ĒQīI iycdŨœõĢ(w"ļ:Ѝûŧ˜ÕĮÉV‰ cĀↀ“ĩĒé3Ģ"ēũīJ|’•"Œˇ\QaܔĐ:TfLCŊ”ŒuÅšB āã֕€œRša‘Q7“ōВ¤„€y*+…'“Úĸ)rö“ÔT¤DŌ ^Ģ?7ÃéLEˆcX×hæĨ¤(i\ŠJqÉĒ÷yX“Š`O×Ԛyæ“v'Ķ5]^YOĘ(o,yķœT„fĄŽ_2 Āō)‹pDBsŌ€'eČÁŠ (G()°Ęd@Äb“íä€Ôjų)ŗnҊCn TĒAœæƒŌ€ 00~ô}”,…ˇōjp8Ą™Teˆ\,VK]ŒÄ7Ū¤û3ųež•lāô´Ū7QpąVđ’ņā2éÃMāuĢÄdúĶv‚üEÄV¸_ßĮ#rĩ 1yĘß"§e ÁŅWî(\vŌĮ›šxÁ*•ę/uZˆmAô¤‹U¯Ø}ŸķVr=*íÄŨI„1ļgm¸'§SQÜOæCōôÎ)˙ee]Ģ!ĮŊ mļ<į4Ũ„!Ųcû . įŊ*y )ę“d#hôĄãuŸÍŒž´Ēôxâ›ÕęM+$ßiY gÛ°í"áš– vFÜXãÛPYĨägŠŗ/$HÅS…ģČĨIĪJ`IfÍž@I õ`ʙûÂĒYœŧ˛ SÚÅK¸æ‹ ä—Dy GqQXܟsKsûģb¤ķM˛uH[Đ2Ô¯åF[Ž*¸š(w_”ÔRČĶDÄgh4ųČ6@ÔR°^6m÷†š˙-‡áL”âÉöŠ.~[ĀSĐ0KEcڞ˛ŖGŧt¨‡Ôl”ņGJBęŌĀ\RhČĮ4¸¨/÷,ŲÁ1GN*ĨË´Æ0*ĈW=Å9ĸF9eúа;wmõŖŒTÎbud›bāŖ•P*íQMyB2‚ -éMIÕĻōų@Oŗ'™ŋŊ#ÛåË#Ī\TÔĸ€yhÉ÷4ÉáķPcĒō*Z(ŧK1¨Ā’+†;rÕÎųŖŊŪĩR˙”Q­[h ČÍNl=šííG˜Ešė<ôÍ[Ú ã”ŅWhĮĨ ˇí.A´û„ļäl:ûÔĸ(øųGסFb܂z⋅ˆ‹3XļîH&–< <ôéKtĸ;B™ OœāõĀ2 š+gqéL„0ģUa‚5<°oUØpWĨ7ȗĪYKqŠ4¤íf”ũĄũÚr‹ŋ3nGJf%žfΔ{zŌâĒÜÍ*HWƒVAČõŠh5wŲ“Ÿŧk@ôĒ„ˆũŠ .2ƒãŒVx‘ā ƒ•=ęõĮ6īƒÛŠŠ i´ãÎi€č/ õ¨ĻĐÍ`iÖå’ÚBŖ§J|R;Úš“§j:ũ‘™:vĄQ~ÂxįĒȤŲ93V×aĪĩÍËAĪjąÁWNˆįšĢcāŌ`qLš5į?ĨTž#Š4†Z …ĮJ;U[Ļd•$qI;Ȍ˜cÍ;¸ ”}â÷§­ĐƒHdSJąO&”H=UÔ‡=M[”ô§`Ķ(bŖ$Šć*zUh%ōdq'R{Ԗ‘°wán”1čĨĀŤ1Œ°HÎ)GzqŸJbIڗbÄ<Ōž”Ū›“@ ÔuĨŠAŌÚ (ë֐ô¤ wŌ4¤Ķhv¨9f–IÍ5ãIdSZŪ,` Š:ĐMÆą•ƒQ EĪŪ$zU€N8¤Ī͊E=¸˜Q%ģ<"=ũ*nô ŅqūÎíoå—Å ,2sVzҚ.2šA*@Č1ÍIiGÖTôcšU8ēōÛĄéVę˛BæāČįéVs@Mf eģ.Tã5¤i;JiL“Ǎ;sO¸šHæUQÅZÚ3ĐRíäŒĐA,Å)S¨¤kˇ §mÛmņO’“ī ŌÆ‹áxϘlWlėjŧķĮmcÍ5`Bū´Ų­„Ž 8Å E€r3E"ĒĨ-!‰@ĸ@ÅĸŠ(ĸŠ( šs@‚Š3E!…P(č(ƒ@ Š\Q@(Š( Ļ’€ )3FhhĸŠ))M%QE)ëU§ę*ÉëU§ę(ŠJŒTƒĨ1ĸE!€Ĩ¤´QEQEÄQIšʐ3Uáˇxå/¸Րi2~”ú •fF2qŠ"€ˆœ0Ã5O×ڔôĄ1 2P&<š–âG…4š5f­;B Y¤DÆ0{ ĐĻė\îĀÍ;ĩK2_õ/“Ž*œ* ›œr9Í]‘ˆTœ ƒėģP¨í4Đ21ÚŅyĪÍS”pĘãéN0'ËZ#ŽLæFā qLDPĮįÂėOĖOŌ­F ÆĒNHĒÁ%Œ2"ä1āՔPrGZCs!Ž"AÁmÔX .ũG4¸ĒWyDi įø|ÔbÎŲ]š¤ŦzæŽ1TšâCš`•r'ķ# ëE†Ŗ¤â“p Xô€QIQ%ĐbŌ=iÆtķ6sē€š%Ĩ0LŦåQښ&BÅKŽ´ėnŖy"ÂwëKlŽą€ã§":°ųNiÜgūNôŋJ1ƒTÆ~Ü@'wéIE.)œp)OJ†å¤HˇGÔ~”øŸ|aŊE0ĩ[Äįs/5)éQĖĖ‘8¤ĀÆ8Ļ#?ÃDæÄŠ nßJ…­”đ‚úSĶd‘cåŽ( J#ØĒÆ)„~PÆĖÕĩ!Āe96'Š`2$ôu¨íb’7rį ÔÃÛŊ´€ŠvKy_)â›váŪ đ}*īz)Ü^Ų&!›9Å,VŠ nRRãŠ^ԘuûČ˙Zļ[lE‡aš†[d–BĮ­LĒÛژ!‰nU¤sÍ-‘e•ã' tК&OõD.zŌÁˆ’NYēĶC*+í,3N&ĒÉjZq&xĢ+íŌ¤=(Ô -ŖŠB@ Ž)™žyZTw  'š\ĐĨ.[4§))Ū†ā Z0 ôĄzPKŒŠ1KŌ€x¤ÆyĄé‚ŌcæÍ ĀĨhžôÚwjn(ĘsHô%+Đ”´Ē8Ĩ CqͧQ@ÆRKŠ\P!¤RöĨŖ J)qE%Í-˜ RŌŠ-Q@Q@Š)q@ KŠ(¤EP 4”´b‰KE€–RĐEPE™ Š( bŠ(ĸŠ(4”´Ķ@ E%ãU§ûÂŦUæå…#jAŌŖjAԘP(¤)i-QEQE1%-Į}ˆ[¨-šv>ĩ<ŸęÛ>•^͈œûĶBb‡iKļė*ô§ ˇ@Ĩxf8ĻZãÉsÛ&’Ûßæõ$S°…I&U-Įų&mÄ*ô뚉@k[Ž2)÷ T“Î į ’ ŧĀ}GZšĒYŠųŸ<5[˜éģčAĮŊC{!HĀSËS ™ Ū€,ä÷ĨĻŠųG°§véš挎„â€8ǎ@¨F y8  =(*§ĒŠEĨ8Đ|´+´¨ĮĨ*D‰÷T Z)\?5@ >™¸Õ€qɨã•d¯­4‰aasænf”ŖĮ+2 î5=/QEĀd@…ÓUaˆ­Ã8*æ0xĨ EÂÅ;Ė€) rjs–ˇ8$TƓĨN)"X HŖpíŽĩ<—)/ËÔ~U'–ŒrTëLž/5p=¨¸ĮzG`ą’Ũ1B!HÕ}(tŪ…Hâ€*Gē)Qsš‘RˇĪ|¸ė)RÛiq t”é"&A"œbĐ†(Íųį Í2DSz8<š|P˛ÎdŨœŠŽL›åیĐ÷ cî¯@^”ŒíÛC:ĶŌ7k$ƒ4Æcöōqœ ‘–äÄĮ ŒŠbČ@ũ)Č Ũ!@ÍGļą=úPņH’*ŧ×LЏÎ{ÔāŒÔ€˛8D,FqÛÖ̤ĸ6PSjˇJ[ŠZK+ UšN”ĶEDaGüDņCDR\ãŪ­SÉPMn#"‹…Šcæž5SģhäĶÛĖ7ē:‚jĘǝŨS$…ääjwˆlØî‘AųsÅ\qŦk…đxŠcZ/ūü~™Šd™b {Ō]F]T栔™‘@R1Ö¨ Jë,y^ŊGpŅnÜ4Éw#Æ@îā]’ÁQ`fwi ŖËÁÎî”ûr°™úæ›pęŪ_ĻsŠ•fo4FˌŽ ĪąČÁ8ęj79ŧ\vÉegŽLĄĸšm¤ ūÔԙžMC1Ûd¨âŸ*!WĮĖ‹ ‘Ĩ@gĩEgÄ$úš!U6ŦÍÉ9äĶ­ú8úŌ`i{Q€ii NŧŅPÜ3¤eÔã\H°Ŧ„)ØEžĻšAÍG$ÛXr[  LÂ@’.7tĸĀJ:TRLce]šŨPŦÍöĖsÆ*Á–1 V1éE€ŒŅڒGHūņÁ4ˆë"åON´Ŧ–Žô‡ J2EuĒ,ė/ė8UŅéNÆzŽiĻW€==ęĸ°ėyĢŧ“ô¤(¤“Ö‹€wëÅķ´f‚8 WĶąË(&—œûSZ(É#YÖTfÖ>88Íķ\‚iĻ)>ÕæF1@d‹šÔė‘Ō”tæ‘ON)ŗįÉmŊqHc ĖaąžxŠUƒ ŠČĒ6˛ ‰–NŪĨ˛FTlô'Švg4 @9§c€æ‚@ĸšzĐį4¤SzS4™Ĩ¤ÁĨn6œ) J´SwsŠ} QE(4Q@ @ĨÅ (ĸŠQEQE (ĸ€ (ĸ€ (ĸ…%-&(ĨÅ Ĩ čh4Q@ KERRĶMQE)ĒĶ}ę˛j´ßxP1ĸž)‚ž:SŠ€-PESQEPh Đ ƒ@ĸKŠoj)Hâ€(ĮŠSԐt tĨ" bÔŖč* §ōX¤æ†šd 5 ž4nYA4͐(8§#‡\N4”›ƒmÁĻ5ēœ€HĩMKÛ\,A-žč–=Ũ:TąĄXļ“ŒS¨ÍŗG$qÔ)öÁ’=ޏÅLi@ "¸ķ%)Œb§ÎĄHvĘ_ŽjCĶ ã~įō{Ts˛ũ’5x⭅ ŧŒŌ4hĀeG& Ĩáā=ģĶŽy¸‡iÍNŅĢŽŌ8Ϥ „°É>įĨ CÍķڝs˙‘qNkmķoW۞´=ģ´ÁÊwšķ/Čn@Ĩ’#r2ļwv§Ë ,ĸTÆęhŠIcrįĐj4hsÜÕņO5QLØX•‚}jØu搁ÍVy›Îeߡ*ĐÅP••÷\8?)čÅIJG ¸<ž´’Ü:Î QÜnûy—.„DΧa\žâc ۑšlw;ŨPĄķLž ĀJžR€įi0%ęj&™‚3Á4ūF*´¸kôÔ!“‰PšPyĄ]CXf a›ū8ĀĻN›ŽÔzͰCŠčAĻXgWo—zǜ sW M äÕ{āv+ĢsŠĖ„;Î[Žh°@ëJ*Ļ÷ŠtVmÁ‡4ųĨ9Ø>P3Í “÷ĸĸ†S,;ņԘ—,ęNΝh°(Îj8æBd§jj\)Œ¸Xųjäî@iĘĄ ĄeVˆ¸?- $oÂ6hŠI‚ĀBè9´€~{U ’%ámš­äĶ<ŸßoĪĩ;+0Čģögæ§öĨ¨擁KÚĢ^yŠ›ŅąŠ`YKļĸ…ɉKMIŸÎ•Æ.8ÁéL&zS‡=i“HŅĄeâōS<(Í$$€n(†_60øÅ?4Ā­2,VÍ´T,€Y‡Î^ĩy”2•ajģA ’ÛGj[qæZ…|œŌ l0]įhč*H%Ôų}(õ '€ŗ‡B lP2ÉžC—Ģ;—Čâ‘][Ąé@#‚Uē.@"‡YręWp= \ĪjéJâ)´ ö`ŊĮ8ĨY¤bŠŒpsW(§p*^Í$EB~u4.Ī-RSÔf¸P1 AT-œ5ےx5x`ŠÍ5c „ŠŠ`ož‚”Ú€æŦ˜PļâŧŌ xÃîĮ4\ϊrĤ˜…(2E4§$UŒqMt…z.oįGæp äTö21 ü'ĸ8æˆPėjKx|­Ų9f94\īPøÜ3RĨ%Ŧ†ä8?.jčéHŪ7SúSXf€ŖĸŌwj@iĨsJÃ"€÷"PrF)T`Pcæ§Ķ9ŨO Š( Š( Š( –ŠLĐEP@ĸŠ(ĸ—”R⒀ (ĸQ@ƒE”QEQE›JhÅ%Q@ j´Į-VMV—īĐ1ĸž:S÷Ņ,gŖŠBÆĄ–"Ō+ŠÁ0à ö đ(ŧq8šķ¤’9 БyŦŽœŌņŠ.2’ŋ0ĄÅ[L ;R1Å0+^Qq“ÍG<š!ƒÅ]ĮRmõ€e95ĘF(yŒ€°ãĩ[ō—tgéHĐĢd•4ÄCdĀZļOLĶmņöY=rjĘ@XŨiŋeˆ€y÷ĸāCj@´?ŽiĢōéųõÍXŽ€¨ÎcQĩŠÚWyÚ{Qp$Ũb 2)-äądL:Žž´ņ‹pš4$RCČAĀĮ Šį rIĮŌ‰“Ę´ÛœœõĨŲ,.ŪXČn”Ų–_ I'‘@…Ž'ŲäŌÃ#ĻāT°ą0ęAZ­ ´1*@'Ŋvŗ^° Ō¯ãš Ō,WŽH>ÕxœĮõæ“ŲåĻ}zUK–”Á—ÆŌ¤ž„=æ›zãėę4ĐīX­•aÅ š*T:`7CQ\ķj˜įÎ*Q nąąn)4€j+Ž-ŸéOQ]œ[ˇŊЁj¤œ S’xŲņēĄFT°]ųäT22™# 0­ ¤iŦ2„”đ)¯÷H¤;"ɒ:կㇸĒvh~GzuŗœČ¤đ)a!TfÉ$1ĒöéļõÔp>ĘBęێy¨áV{É6œ{ĐãüęœR8ēuÜH,R3BĮ8äT1ôšq×X —ÍiŗüdÕH.Îc ëO’āųĻ8×qX Į4ĩ^+€ųÃĸ ‚g7.¤œQ`öĸ.<˛€zÕĄÅQ˜ˇ.jâJ"‹ÅšV˜ĮŒ›5^áp …jz6ė~´€–Re{0üéWr —ĩŒg4ĐI?á@…õĨS¤ãh”Râ™(,‡RhNÉŨ‹9÷̇Š`-%ĸ€ SģUyîD8ܧš|3 —* D¸ QšQEQEQKŠJ4¸ĸ€ JSH)bŠZ((ÍSh¤´”RŌRĸŠ(QE.((ÅPQKI@!Ĩ¤4”QE)ĒŌũú˛jŦ§į `)ËMņLBĐ(Ĩ¤0ĸŠ(ĸŠ(ĸŠ)ˆ(ĸŽ;šŠyÖ,¤Ô„€›U„+p™l–9ŠīŦ@ŦqUa$¨į y§3Ē1Á=ĒŦÃĘhJŽiŌ.frũ{@T†ä”fĢYKŽŲ¤Ÿ-tŠ=iX |į==E†Š*ŧ—&9v§5Ę#*rE;VˇG}ų!ŊĒ9-K°c!âŦƒĮ”Ž-‘Ãn Š"ƒĘ°lį­N89¨åŨåļÁķS ÜĮžHĪ~âĻ™7BPzqQ²;o‘p@ÅNG4ÄAŒ6Æc9énn R*×ŊX_zkFŽA*2) QŒTs‘å>qŌ¤Á¨Ū!"•j‚ÔĄ94؜ũŽLũJ,Ā\ _J{ÛŠŒF ôî";XQáRËÎzŌIŸˇ|ƒ°ÍOoˆmÜHĻŧ/įųˆÃž(¸ėG>Ų&:Sn×˙dėzĶá‚Hįf$hhäIŊ~”ÄK*&s÷šŠ3PZ  ēã 6;‡yĘ0Ā*ZËGŽ”fĢÍuåĘnAīSN{Q`¸æĒĻÛėg8ĢŲųšĒiƒ¨“ž(@ÉŽ#ķ"`:ƒšŦ'’Ü™Šo‚ŧy4ۈSėû†2_Zb-ƛ#UÎxëUIčČz9ghíĐí-‘UåoLrE$†^Yã*;˙*§%ĒÄTn$ž1Wcs"†ÆU߿ہœ…éL ˆĄPJâLŌ㚐1QE#1-œÔ’#lqUí]Ú'$䎔ė“ĀÅ#qÖĒĮs$Šß %jHĨķ“=84X JŽYŧŧ(cÚ¤=Ē­ÚēJ˛Ž”Ā›ĪÚá$R¤ôŠjoĩJ„qˇŽjö8¤ĀLâ‚xĸ—€h4ėâ“ ŒPæŽô˜Ŗč8QÁ4§š1@) ƒÔtŖš^hĶŗd¨Í?R 3@Č`ô¨šÖ6ã>N)3@ˆÅēĒíÆGŊ5mV3[ņ5c9™â‰Û đ‡SvĄiˆĒmßĘō‹:SÖFÁÜ7 ŊŸzQ֋…ēâ›0;Ņ“OéHNiFŲe„1(N})bR‹#8Án‚Žq@éÜ,Rŗa6āG4[ĘŠq#ā÷Å]ĀæĢƒĀ担ŠqŸ2ņ¤w8k™sbã`SVŪ%ä/4\,Sˇ#íoĪSÅIi”š@ŪŊęeļŒĀsD–ĘĮvH>ĸ‹…ŠöįuĖ…~īz-pndĢPÂąŠ ÔÔ?de›xlEÄF~küzSԁ¨:Ôįĩ>o˜¯ƒH–Î.<ŨāŅp#]Ō]HvįŖtČOSĐSÚ9"˜ÉÜZq‰å…ƒœč(3ũŒŋ;ąš| ū„I=Fj9ZD´dd”ë5>^ârM>€OŪ–›Ņ˛M;ŠŠĒ—nÂhÔôĢdTŽHk¨ĀĒ@\\āg­Ô/#4Â$;}čŠVķ69+HÚģ;Č ā˛*ĨĄ!%`2sOŠä¸|§Ũô40,w ÔpÍæƒō‘RâĸKŠoCKA<ãŒĐ9 LqKÔb—Ĩ0 Îp3ëNÅ.(¸ėA,&R¸ėsRJwŊWŠo5Ø@ÍW[P˛æŦš ĀĪaNā5•\n•Ų†yv+éRÆë.JšyéH¨§APIndœ>FL´‘š~9ĻH;qÅUĩˇtģ÷̜tŖ\Ž X‰N´Û6‘Đ™9úÔÛE9p: ŠåļÂØīÅUĩ`-¤­^ iN~QÍ Nܝؤ9ĸÕIˇm‡ MX6Ņ´ąÂąp™Å;…ˆw!†æČĸB^ņQžčíVÛ&™,+!ÎpGqEÅbœč!Jd=*ų8žõ ÛüáŲ‹ëLŊYŽĖū˜ėZ$´„úS0uÅ?¨€8â—< Đhoģ@9â—Ĩ&zQŸ›ڜGĨ&iÔ n(āPĮu QŒi¤|Ôã÷¨<ŌQŅąKÔâ€ԝŠĀdh) ŠP)SĨ;ĖSÅ4Ōæ€ÔdüØŠ23L+û˚\qJ:RJP(”Sˆ¤# );ĩ'j)@¤F}(°ÉĸœJŌ:ƒJ“ŖîÁûŊj˛q¨ž:cš-qžb@Æh°’D—î↑āˇ5RҰ&aĶĩņųĐ;7,ĮƒJĀ?PU0‡ĢÜ¯°Ē— Ĩ RriÖėdq‰>P:S°†“#œ­y1P¨2y5LRā(bŠVč94T ˛‹–E'ž•*Í$pŗMÔ(°\ĩڊĻ.] —†ôĢ™ãëHašŖĩ(éHϟÉÁÆié e Z%UxČ|`uÍAnņ§Éŋ>™Ļ"ÎėŅ@c"…)>čäŅÔu.isHõĨ âŠoCNÍ%Ŗ"Š;ŌĐ( ĸ“<▁ EP@Ķų<ė,;■„ņîĐÂŒĶŠ-Ō2iԘ Ú3֖ƒÆ”PÁ§ihÆ( qJ)i{PxųęAIŪ–€Đ(Ĩ Š( Š( ĸ—PEPEPE”€Z(ĸ€ (ĸ€ PQKA ĸŠ(QEPhĸ€Š\Q@ˇJ¨zŸ­[n†ĒžĻ„–œ)ĸž)€ ZJZC (ĸ€ (ĸĨ4Pi€”QHHQ“Ā ¤īPG7™3(ûĸ•å!Â(ËiØ é*8ĨŪŦHÁ^ĩš n)ÅË4ĸŖyU#ߨҿĸ°Ry=(°šJ3IšCĸēŒŧ$Ŋj^ÔgZŦÔrũ) ÄSKŧÎjÎ9 Gī(4î+ŽdV‰[Ĩ:l}Ēô3C ôéM6éæį"‹ˆ‰ägYHPã44ü÷Å=­“É፿€yR6)Ü īĨ‚ļ>cS9"”÷8&™%ŧ­p RÎ"^žÔ iF\lvõëNw/9Œ9GëKn6ųd1îi¤ˆ.ŲrŦ84€–ŌFu`ÜāÔæĄŽ\ÄÎRÛOįŠ8Æ NqÅA Á•ŲJãmY8ÅR˛?Ŋ”ûĶ@É>օ™pI$RŦšÛž*ĩĻ ĖÜRŲeVV'< ,.b™,‚5Î öĒæî\€b#š˛ĮtEąÚ•†V˛v‘ŽO==)—RbW QĐ ~Ÿ÷˙ĩSMIķ7úˆĻŽ#’2™ ÃĄ­ëYë™8nˆŧVˆįĨ&$&)1N>” C)0)HŖP1(ĨÅ CNiĘ8ĨíF1@ =h4w§ž´Õ4â{Rm—Đ)ÁëE 1ړhíĮԁÅ)āf…58ÁôšÍ(”ĀmĀ•mß†QÍ:ɝ Žig!ŦؘuZ†ÚFŽĐŋ(  Ôĩ\NĻ(äÍ5/QļđyĸĀZĸĸšuˆ õ=$W +mčŪ†QEQE (Æ)3@ EPEPERĸŠ(ĸŠ\PQKŠC@&ii(E’Š(ĸŠ(ĨÅ! aEPEPLx5[øYn†ĢcšņLņL–’–ÂŠ( E˜…ĸŠ()C!L•‚Š' VĖ~ņÎ;ĶŖæųΧJm‰ɂ99§CÅÜšīŌ¨‘ą Ī2ôÍ2nFOÍĶŽ”čÉũôƒŽp*7bbbŨAāš`X‘Hļ œ94ĈÉ>ö`qØPķ)Ž5e$œIp—Iŗ€zŠ@]Å!!A' Ĩ¨î jC å¸fd} K !úŠĮŽĮÖĻP1*FXæ›LQUŪëk‘´āRŧŠą‡=j¸ú)Š"Č2Ŋ"ʄā0Íô{ŌŅŽ(=sPN‡ÎInÛKtÅ`b)mōaSš`FĄäēÚ­YāņŽ”wĸ‹€¤0G$iŒPiE!ˆā2•=ęí’2JîæĻ=h§qX„ZĒîÚÄnĨ‚'?6sRŌŌ¸X\ÔTW„D*į•næāÂĘG5cÖPŨ@46!Qˇ n„Ķ…â“4†;­ÚPhĻ’‚i(ĶąH(&€ `ĶŠšÍ ŅA PŠ1Ji(Å. ëKšNÔvĨí@€ qINĸ€hīN#4˜ õŖŌ⒀ŽhīJG4cš(Ĩĸ€}iÃĨ4gáԐ&iH¤ĻR2,‹†į4ėqH éN¤´(4Q@ KHh4 dí˛>ÕSNÁŪ ĪzēĀÁäjD‘œĸã4Ä<ôÁéH:…ŌˇJ Ēã 2)ąÃG*¸4ģžlS¨…÷7QƒŌ­ŦŠ ŽzІk?1÷ 9ŠáR‰‚Ų4Û 4"\Œ:dŪ\›Ų‹ĩOšZWŖÚ6æ1žuĨЉƒ“ŪĻÍ&}h¸Ä™4BXĘԆŠPh. F< –Õd”uÆn‚3EÂÆt,ņDņųdąŠ4ōB2 ZšKEĀQE%EQÔ\y‘ŒŽMî<„ÁĢOr6]riØWNāE;°rG+Å2ĶČÎp:Tīo R8߲G€@¨¸ âÎRNéV,‘M˛ädį5#ÛŖCåô°C䍡ŗEÄT¸Ë_ Ī2@ÂëĖg§Ü[ųŦNt4Øa>ų[sP2×ŊQHŠ( ŒQEQ@¤E-  Rš)(ĸŠ(E‚–€ LŅEQJ(´S&()hĸ€ ( ĐRâRĐ0ĸŠ) ô5[ŊYējˇz¤1Mę--ŠC ( PâŠ(Ļ ĸŠ(ϰ # ĶŠ ,HœĒ€i’B%;ŗ´úÔÔQp"H•§oZėĀ°Ë’3œUƒAäķNáb)aÎŌ€e{avœ<€ ąŽsKŒķEÅa{šdĢē&^äqNÆ)h•ļßŗē9%ˆŗĶĨYh#fÜWšT‰’Ŗ§q¤‘Ū<āašŦČŦŅ _ŧGŊdŒŒdŌ´9c`­ üÃöW8ķƒKäŠ"ŧ¤ĶÖܲ“’Į=)fŒđŖŊZééÅ8ÕIZEšL}Ū•jĘ÷|[ĩ4KäÛ!Hĸųą*9†č"=TuĻ€•fe™RLŪ•g­VQš¸åąÚŦƒI ĶyÜšԁt™\ägÖĸžæ4įŋJK—1ÁÄXIã‘ĘŠäSŲŅÎĀU5 ßŖhQÍ:O!~pxÍ –Ôîb—Œõęœ„™OAŌŖ…Y­ärÍíÍCëԚj˛ĖVČįŠne…QŲō¤ō + šÚ”U[™¤‰Ž0Ũ)ÂáÖ@˛.t4X ¤įŌ™,ûbŽæô¤Š_7?ÂËڋØg/3!ÅMŪĒYßJO­NĶÆŦAoŌ‹&iAÍ40nTäSĀæÄ=i3FTœ Ļ<¨Žžņ ƒKÅ&9Å#¨*FOJ<NõVř•˛IÁĢG­.i8ƒL”•BWˇ4!<Đ9ĒöĶ´ĘK b„\Ērž´ėŒŌÕkkƒ1 Ž1V)ÅŌwŖĩšQŌ™NPĐ)):gš\ŌĶhí@¤ĻœJĻ—ĩ6—4¸ĸ“4RhÆi3J)€bŒQš\Đc´GZ))h <ĐE:Ša Fix&€:P’(Ȥ=(# @„<0"œzŌ”zPûP1A¤Ûہ‹Š;P§9§b éMqžiø¤#"€°§ bįoŌÎ)€´R)&@ Í/j1E Zĸ€ 1EP(4 Z1EÄ-%) PEPEŠ(ĸ—”RâŒR(Q@Q@P(i)M% )h ´”QEQE†ĸ€ôQE (ĸK÷MVbo¸j°ĒE§S@§ŠQ@ĸHbšAKEQE (ĸ˜Rf€Š( ĸŠ(ÅQ@hiMčLf–›+”B@Í(#š2\bĢYåØį¯JG`÷ž\Ÿw°ĒĐ9éŌ€Ēđąŧ`åGLĶŽØˆ8ûÄö  L`ēš=:SČīQÆ Ä3Ô ŠöšC}ˊ@]## #(+´´öĻÂí"naŠ—­ "HR3•^j@p3JhŠ‚kq+)ÉĻÉlėÁ„œŽ•gœQÛî8íäIŧÆ`}iû$ŠFd]ÁĒĀéŌ‚xÅŧp˛Á!#ænÕų‘Ú(sWW•ŖĪåLE"…Ŧ€ÁāĶĨq4qÆŧąÆGĨ[ę1@E^B€h¸o0žJˇQE×Îņ=čŊææ!œÔë +n ĪŠ S›įĪ\Q7ŌĶÔŌÂîĢzŠH↠åzŠÔ¯jdĪã'ŠíSÛ@Ņ–$đŨŠąî´ö4ސ!““ę(š”ĮÛ֝ėP¤äŅq›(šSÁŒŠwžI§\!7n<‘OŽI•D{#‚i.˜ŦņģōŠb-' 9Ĩ~‡éLŒ€1āv§JvÄĮڐĘö\DĮېÜČŖs€zRZ6-܃ȿĢËĖhėĀąę)ˆĶpt4ŲW1ˇŌˆyˆxÅ$Į÷OĨ$2Ŋ‘Ų 1隺Š Ęt¨-ŋãÉž†‹/ø÷fĻ!–’*K&ãüUqHnG#ÖĒZ(!Īšdr”Ša“׊M ŊšIāķĶ­/ˇzĪUfˇ ŠwuÍ:䰒0 G4X Ŧv‚OA֛ĢüĘr*/)Ö)|Œg4Û%+ }ß/R(°ÜČČĄSī5:o,o95_Ī.­'˅=*Ė # Ž´€xÎ*­Û: ĘØöŠæCcÉíTî˲ęzS@[ˆ–…Ięj\`TBAē–čąÎ˛6Ü>†€$ Ķ^TWÚH ŽHGjFdLlJ¤Č9 aĐR,Š~ëKŒũ*Œ ‹×  Eüጊ;Uƒ‹Æ˛:ũ*čs@ œŌ­4uĀĨäv c¨¤^”´(<ŠLĶerą–Q’;P”c­)¨ĄĘˆÁôŠ3ŠųNi1NÎM "€ôĨŠ;Ō˙: ' Röĸ€F9§ŠJ3@h=¨ŖŊ i{QE"ĶŠZZ(¤Í-QE (¤ĻŅEQŠ\QH4QERŅL´Q@QHŠ( ĸ—”RŌ Z(ĸŠJ\QEQE”Q@Q@fŠ( ŅK@)qE J(ĸ€+Npĩ]zT÷v Z`H)âš8 -- Ĩ¤EPEP ĸŠ)€RQEQôŖ4QIøQ@…Ĩ¤ĨühJ(´ŲîÛéKži—ŧĻ2M1éā”sžIĻΞ|ø†^ĻdފĘĘEL7 ø%OP)ˆeŖbFV8īR\°Ī¨^x¤…KNԐT"™sČŲ•ÉĪQ@ĀÛāžš¤ŸF¨ŊXâ’ŅqÉ<Ô21’ô/e4 ēĢ…ÆzRŠní –éDR,‹•¤Á¤.Ģ€ÄNĒ@Šyŧâ3ڄŊęNô¤Ū§Õ[X@Œš<œņQE•Îx§a=¸¤Æh ĩĮ8Ĩ­HÄÁ Žõ&RĖĮŠtĨ•‡P)–ķ´‘–#§j`KŪŠŦˇ[Ŗ/ˇÖĻŽA"†^†‹ĮļJ$Î1Ny yôŠO­QwŪ“/Ũ=3@Ŗ‘_;OJ~xéU#ųŽØĮ÷*Øį4 ŠB})iæ Āæ— ŌAādPŌ`ĸ”Ž)ZLsAāō)øĻ‘Í0ą"ĩzĶ>ÍËÖĻĨæ DĄGAM™<ČĘgŠ(Í0 Kr°ßֈĸxâ1îb§Í.F)\ qÛËpÚw؈…—9$ኞ0J1šw IcO+Ë ö4É÷Ĩ;IĮSWph¸ˆØŸŗžéP[žëfŒgv*ÔdãíĒ@Ņp(Ā‘ˆŲe8>•fÜĘ03NhQÎ⠚ NũNc=ģŌ_2ųJšįŠ´čma‘P5šˇRE ŒtŽŠJ˸°āT –ŋ]Ã*vļÎI^†šÖĮrČæhLDwJō5ϐųUFÆjI ’I„ĒzRy •‘Ž@§ Âė˛Ün+šHÅOlTÆĸ>zTr‰VRBî ĐS­bd^x9Î);6Ō­Sˇ8Ŋ“Ö­Ę@įÅPˇ‹Ļ$ŸjŠŦ{›Z¨&iäŪW[—.ĨGqTāe„2J9Ž:Ѝ4Ÿe†ÁúSEĖŪ@—ŒwĨšmÖŖh=Š…Xuįė+–šā-¨“šl3Čōmeāô"Ą fˆũ¤€4˜ËndJ,'’ä+•U,Ч}Š<0ŽõR˙Ar§<ÔΆÅĀlŽÔŦ2xäW@ãHn"'šĒę1§ uÅE6•3ŋéE€ž˛! õ :g†}jŧŅŦČsõĒņB ›9ÎGJ,#HļGJ\ŨF}3TVKŲįΑŦ‹¸ÉE†i4b¨^<‚Höš…ĶC* Ŏv4X P*‡›,Wdl†ŠæœŦ‹cqĨ`, :UhggÜĨ~eôĻÅu#3)PJŅ`-÷ŖéPEsæ3 ¸eíUc¸ĩwc=)Ø ,R9Ĩ<ÔsLŋŊ NĒËq †ëRųņgÆh°v¤Í/Îx¨šDc…py d™ÉŖŊ4`u qÆ3‘@…8Å›ŽôáԐ žh¤ĮĨ˜š[īzZ(ĸ€ (4PEPEPE&iitĸƒH(hĸŠ(ĸŠ Q@ E- ĸŠ(ĸŠ(ĸ—”u¤Ĩ ĐQE Ģpxԗ=…F”ú §Šhā) -PE.)(ĸŠ(QEĀB*ĩÜÍá:´jĩéũÁúЀrH~ĘŊ*Ė zô§9+cøRIōØëŠĢ>v.¨ãpÍG ™S'~´ü¯“ãČØûGĖ>lqé@I+yžTdŒ’hˇ”ģ2ˇ$w’neÂî'Š’Īn_uXeĒk:ĸîsN¨/ú3R*H¯ĘœĶ"ĢŲŽ" Žĩcđ AIü\šv*›Ī!wōūęœPēĪZjō ÷4ę1LōÔ9}Ŗ&žxĨÁ"•Ā—tl§¸ĻÛEäŠÎjn”b˜xĒ1‚ŌH˃ZģÁčxĒÂ"gōĀ!Ŋh,4ąą8Ī@%ĒÉˁœæ¤ˇ‡Ę\ĪZ—4\EkŠ%ŽUÛ÷jĘâ†Pњ1ÎhÁ&į ™˙Dnr@9Ģ/Č0Ã"˜°"Ģ84& ‚‹'=ÎiöåÖĶ1Š-šÚ0¸ûÔöņˆĶhcŠb Yî7ņđi§ũ&GV3WOZŦą´s3GÎîĸČ­‹CpanAĢŊ;TDDÍ,˜Ü{ ŒË/ÚņÎÁCØ<╱M^šĄ°XsH4™ žhaÅ)F'Ŋ\ŽŲH¯SšoØĄ sõĸāV˛lŨH}éaÁžž1SÅgRo\ūtŲ,ƒL][nzŅp,ķqP_mI=Aâ§TÚ¸ÎqP]@ķ.āRŗĸ­ˆ sëN¸Œ%š6>ZY-ĻhcO˨Pqčj€uÄŒļ‰ƒÉŽPE2đjÃÂŌÚĒ‘†Z…Ä— ą4eHęi |ņų–â@Nā;TjCڌ1ŨœuĢË#Û׌U+hOÚŲOŨ4’Wkh$ņÍDehŠbBÛēÔˇņ3 `3ˇ’)>Ņ "* /ߎ”Æ$×E*‚”ÜËĘŽĨEpãíąį€ž´\ē5Ô[N@ĸÂ4;Š’ĢĪ0‘RC(™(╆IE @RšJ(ĸŠ(4Q@(ĸŠ(QHŠ( Š( Š( Š %QK@ ŠZ( Š( ¤Í)¤ aEP;“ķ bSŽ~ø¤QL lÚ§’$“ŽiȋŽ(¸ĪcP^ŸôsõŠŪÍEuIÕĮ¯4!…¯Ël3Ō–`ĖĀĢíP9æ dœB#ÛĮ¨4ŲYe$mĀĻ"Å´Œđ1'qQYį2Ķ<Ņjû!ƒÚ›näÃ(ž´ ˜Ü1ËlÂϤ’eHÕÎpjÃû<Œ€{ÔröXÁõéE€´ˇģ’ éšl÷9Uõ¨î8’ RÜaŽĸQaYÕFIPŦv"ĸœF\8ĀéLĩų “3ց’ÅBÜį&Ĩ?N*Ĩš/nųcŸZlm)ˇ2oáiq@íJx ÎE¨õ¨ūĐû”IŒ7J, hĄF8Ō´É&HÆķOfĀÉč*”e'ž]ŨĮĀļ„H^”ōËeŽGH—fā1ëO“iC•ČÅ5IƜŠv}*­†67njKÍÂAÁ  ņžô˜ĩGmŸ nįŠ“œs@ @Å&Ņ֗ĩ &敚ĸĨ4ũĘ9Ú*;‰Ä=A#Ö¤VĄ‡JrũÚ3GjA@ Ÿ›4ŒWĻā /lP ÍīJĸ“<Đž´sGzQ@jAŠSԚ;tŖ´™É ô¤S‘NëMP@4ĻŽô ^ô€C֎ôwĸ˜ i)i^h{P9ëJqŠA@ EPŠŠC֖ŒQ@(ŖŊ€*Ü]˜% WåĨ´ĢHÜ=*vEoŧ§`vĻFE0DŠrT”bŧHį%Fi†Ú"ۊ ÔÔ´Đ$Éĩ¸Ô°D!jôÍIŠ(ĸŠ(ĸŠ(ĸŠ(ĸ–’€ (´”wĨ¤¤EPE—”QIšZ1IšQŌ€ (ĸ€ (ĸ€ ( ĐJZC@ÄÍQ@î?Ö RMĖ´å ZAKH`)i-(4”QE1A@éTîg?q2jééTŽš¸AM'’O.-ŨņPų’+!sŨŠox@õ—dâĮ^)ØD˛JTái`”HH#u¨äR>`~đäRYŽé^N€ņŠ‘Ž"ˇw5*2Č2§8Ǟ[ÆŨķ’j{hÄpŒu<Ō`KíM4ĩԈ×ũŽÂœRcžjibPĖASÛŌϧŊ0 įÍ"ÆĒr u-+\ÛGģ<ũ)ōž¨#•.(§pą]íÉumßv‰ĄwH˜$zՊ;{Qqš)Ŧø#Ķb2)SÍ[íŌŽ(¸āmļŽ0sLŪËf5{qJ@<â˜¤ŲÆGŨELĸ)Ž[{TÁARĻŦhœĸ€hķãß´7ÍéSš ąîŧ%GķW‡¤Æ ĐņTŦ™¤b;ūUmōT…ëU­Ą’2á€ÃwĐ29ŒdJÁˇåVcoô0[ŽÚŽmåčNsSëgĩ—1ŠEj™ˇfÉīK$žeŽO^”BÍšVCíL‘|ģ5Vā“šœĖ"ĩSß,Ŧ%Trîx¨ŽWt10fĻQõaÉ4 C;dí\€pjÂüĘLÕ Šķb|‚yuā>”X @ׯø-“ßō[kc°âĒÚ.õ“wŪZBŊęŧōˇž"F š˛8 UXæxįHrzˇ@ ´u ŌûPh@â€)3Å#3%zв‚zŌbĢÃpōLŅēJŗØŸJ,ƒ@ÍAĀ•˜cŠÁâ€üĐ ÍÍ)č(Ū }ãJ)hŽ2´„?4™ íN\bŒŌĐÅ'zCJ(ŠĨ^´˜âÅīu ĨÍ7Ŋ.(b€Ŋ)ŌRö –“ĩ80)ņÍ éKÛ4tāQŽ(^M;ŠhČĨ(hĸŠ(ĸŠ( Ņ@-%€ RŅEQEQEQE–E%¸ĸ€ (ĸ¤Ĩ4”QÔQEsKIERŅ@Q@Q@Q@%)¤ ŌĐx chĨĸ€(ÉĖ§Úž´×˙ZÔåĀxĨ¤Ĩ¤0´Q@ŠJ(ĸƒ@„ QKLÕ É7*Bœ ŧzSOԚCtģĸĐæĸ˜‰^Sš¸yķLHŅ[!pi’V}Æp -Ģ´¸=*g…’rąĨŠ4Œ| ũi ãåŌ/~jØUv€ĩĀ“< ąŠ¨ŨdÜ ĢŊę­Ō2ÉØuĄi”0Úzw¨e˜¤›UrëM–ā|ģ–#5Čî˛r{Ͱ<áäy´‚ę2’3íPä ;đĻĘŲá\rMā•ö†æĘX¨a‘UdP.ĸƒŽh•Ŋ #'XEĖüžŋJLáyĒĘ|ĢŊ€’¤grûÜą<JÃ/įå )1’cRŠ@1Á*BžjY÷?tâ§#ŌŠÛ1Q#'žiqÛbÆp*¸Ä`BA§‰ÅŧũÚdÅ^ҊũÜq@…ÕĐ8ŨJŌĒ`1ëQ[JžJ)nqŌ›}ÂĻC@‹€3‘J;ãĨG$BH”g"ŽJ/J‘Í~t¸Ī#­āf ˜UŨŨn•3ōš°r4jUYpGÁUy4Øn7ģ#.Ō*~ô€€Z&{ãŽ3ÅLۜ pô‡Š.0^ĩ_ɑš&=sVÍ/áNâ)ÉlÍ@Üį<Ņ4RȨ€goĨ\"€(¸Š÷ģųnŋy:ŠiåFe*Š×ëV@ôŖ¯ e"KßÁÚ8Í2vFÜãĄęøÅ4ĸąÉŅqîNlã ~j[œ410åF3VŪ0ānG–ž^ÍŖ”\ŖîÜN*´Ÿ)2ÂÜgær8U ĀëL6qį<ãĶ4îˆãĘÜäŠrĐr*9ĸĀPqéKm6g$u4˜É3’}Ē„üߨūUx˜ÕI-åkŸ1qŒĐ€Kąžæ0;Đęę0¤Œõ§É2¸ĮËL•ek…pœ b,}Ļ!!ByÎ*ŊĐÛ*ʇæôĢ&Øīdë‘U˜yw{Ÿîš6܆”á…iuü+:QÜÆb “×bîá Usš‘9>”īJŠ&ß|uŠ3ōTŒŦ÷$ČR$ߎĩ$,Ēp0 WąųgzQm“w&Ņōįšvˆå/$8Īĩ]ŽE:÷V!ūŸ'4ämēƒĒô=i€Û0ԁØÕ´j­3Kžį5orŠųˆ¤ĀpÅŖɘ,D“ëH]7cpĪĨ;q ƒŠĖ”¤h61/œîĢRĄ–ÉŨŒņNĀZ>ƛŠÎŒƒjãq:Նckk×,zf‹kéH[+¤Q`-öŖ¨ĒÜH$1ÉΧlt¤FiŠ2ČėŖøzŌ\ <Ŗŗĩ[MįÍĪ^)Ø R˰ŒĩFˇc#ršĒ÷ū’€ô“(–eN=(° ä )ĢŠwĐŌāRĶ ROĖ?:p#oQųĐŗéE4tÎisš3Í:™J8¤Š š˜)ŨŠ ĶģR)hÅ4œP÷ĸ‘Nášk¸EÜŨ(ũ)ECÄrŒĄŠAÍ.h¤Ī4ę`!▐žihĸŠ\PRâŠ(ĸŠ(ĸŠ(ĸŠ Š( –RšJ\R ZJ(&Š(4Q@)hĸ€ (ĸ€ JZ %!ëJ("‰E.(  -ĖĻž)§ũa§@ĮP( Z( ĐQE(ĸŠ(ĸŠ`&)"Ģ*÷nÕ%Q(Âņ94Ōã°A’p)#‘dû§š‚äæxŖ4š z  â4¨­´šxƃŌǎ9ķÍ:Ų™-œägh€}('*‘8ļwU¸ŽøÕZ_⠀AdZ\TNb”&Üæ€!E肐Á9b:õŠAʎ0i@ ~ĖžIĻŖk\íą´ņVč<Ņq /įĢ– d…žÜ ātĢ×¯ĨR-‹ŨÅOĨ0$K–‘†8Ā™ˆ#!8™4‘D&ĩi–<ƒE€ž8^iU¸æ¨Dæk'œĨEM,9Wn IēņR•ąŽî¸æĨېĨĸƒ@ KH)hĸŠ(ĸŠ( ŅIHŠ\Q@†–ŠJ3KŠ1@ Eĸ€ŠZ(ĸŠ( QKŌ€IE€ (ĸ‰ERW5 ¨ĮŪ5*Ķ´ )h ŅI@Q@‚Š( Š(4ĀCU3›ķ́VĪ" [lMæn$ĶLC%æú<Ņ'7 á,З*Ę~eéM†VgüÍNâ"‘ÄŔđqž)ņLĻÔŗ&DÜŸâ4}›mą9cÍ+\ĢÆ žc<ķZ1ā +ŌĒ;ųų[Nî:U¸Ô¤j§°ĻĀqéTŽŽnãĢ™Ē2ķ|´Ëõž ØŨÍ6IvŊȨ"@ör3uūT$+—K2O^”p}*‘$Øyč >ã)8'9Å; [҈ÃŊœTāU8įj Ō|”‚M)w‡ËÜŲVâ1Hj™ĖÛ# dæƒu˜<¤āŅ`'ŖĩBn“j’ĨiŪ‹´´Ô‘dSN€SŠa<`ĶĪ5›t1Å P400(ĒĶLÉ•ûƤĩwxˇ9Í0$+APĮ憟IŠWģ@8Ji oĮÍëRÍ\d-ŗī#šI ÖĻĨíEÄV02917^ĸ–X "sķ¯5`œri2‘‚(¸eßö¸÷ãđĢQ™6*sŠ‚åÚҰp*ī`AǏО¤ŌI¯j[•ap’:Šš×ĩ&4ŽhĨķ&ųTǁéVāIŽ})M (.!ēs!áģҁĩs€jÛ n <”ŨģhÍ;Xod pHâœŅBĒ˸üŨOŊK,+#eĪ¨Ļ›t(S:Ņp ˆ<7 āúŋЁU’ ˛‡f-Ž™Ģ=é1•'t7AJ+ØTvŽ|ų00=jšH\ÜųˆØ>ôØāhå,[;ēÕ+ŽÜ žF“’ļ§dŗúNŧ6ÕÜ­ĪŌ›neq"c9 5<ūcî /LTąLdˇ|ō@Æj8ˆļķÁÁŌūY—+ŒãÛažÅÔuĨƒÉ0ānb€&–āüǃ–æ ŋšgmĮ­C*$ī…;YGÔEŨŦX’§‹ œ]‚É„'ŽjYgHØ–cØSFmļ1ŠƒŸˇg8â‹r9–U$ ÔPŗFĘpŨ:Ô1Ä#wmų-ÔTVJĨ$gšVy]IB 4Imģ†jĨ–CH@ÍGō¤›%^§;…¤9ü)M53õ åąH‡ŗíwÉrČ]°=ęų=k:҈ģbOöŽÄ2uÅ1¸‘YK¨Ž*YŽ,)ÁīU%us Ũ“ŪĻŊ*LKÛ"‹ —í(ÎgĻiī*#c‚zU{€>Õ¨ēÜÁE€˛$BÛAæœX2@Ǟø˜F͜Tn|ÛĻK*öĸĀ[|›Ķ†LGëD^bÁ eĀė -‡ũM -§¨ņ–ŒåqĪé%ÆĖ{Urf’ÔÉģ=¨K&fƒ,sĪZœŽ2jŊ›´ ŨZaēsšTlÎ(h yÍ)ĻŠŨaÜtĻ´ģb'"QUV÷1†ōĪž)ßlā❀ąŪõ 0(<ôŕ°Ŧ)šųęJnWv€isž”´œgŽ)x<U/ōnj¤ŽhÖ0qŠL E8I=Šz­œdԐ:c@t UP8úRy1“Ŗ4Hâ4,z dS Q™☠đ#rG>Ôô‰=ģF E Įšė¸Æ*Æ{P"ˇŲwlzfŸ,"\ō‘éRFęäí9ĮZW`ŠIũ) ‰ad–,O­GŗÆXĢ›ĩL“$Ãå9Å?¯ÄV‚Ųã#-Lhgp" mĪŪĢØŖĄĨp!¸YߘqKhÉOŊRŌîĻ1„āąöĒĒévXĄÁéZ#“J@ĸā#{Vz°"Q+6īáĸpi ‚sŸ\P"ļžĀ[°Į"™`Wt€õŨŌŽm8­0DĒų Ō‹WP*0”é‚ĖBgk•5<ÖņĘۙri¯lŒAãĄ§p"°f;‘šĮz´ŋxŒūĩPˆsˇ<ÕUãŋ“瓸š^ôƒ94´†fÜĮúzš3ĒŖoû¸Ē’Į3]yž_CÚŦÜFe—4ÄQ "!‘AōĪojš ‘5ļq…EGû 1ē@ĮJX!o!†:ķL?!Âđ}=ĒKv_˛°NŠd‡æ,ĘÛņŠu”.#mʧ˜QÂcß5=œŠ%d+‡ö¤ļ"‘Œž 6Õī]‡*Zl ųąJ W–é!›aš°1ŒúԌGmĒ[âŖ‚t‘IQŒuŠˆØûU=8äJO­;:ÜÆ[ītëS$Š˙tæ¨Ų i¤$qš[3ļIŽ3ƒE€ŋHÍĩIÆp*—ö† ĖMÅZ‚Q2ncH )3É|dJŋ3ėŒžįŠĄœę|քą‰ŽiLI’BĘwœTö—|~ã­WxL Ō9Ƨią˛!fãw­^í@`Đ)´QEQEQEP( Š( Š))q@QHŠ(  \R Z(ĸŠJ(ĸ€ 3E¨P( Š)E&(Å­bŠ(¤35O&Ļ*ûÄTä`  (‚”R´bŠ(b’–ƒ@ ESĸŠ(*Ĩ¸köÍZlāã­U‚9#•‹Í4& ŪKI s6zw§ˇî§gĮ ;S#Œˆ¤sÕŠˆ&_ lį€inc"Āä.2j&ų `O$ĩ$Žëj€ ds@ ģ‘YcÛWc? õÅP“įh”~8­€öĄ€œæŠÎĒoUp1ŪŽ÷EÆûō´!“,J.F~^õc#8¨­ã1+)õÍG1hg “ĩŠ1ÍDĸA;š<ķQC4˛Ģ>SÍk‘EF“ƒöëLKŒ¸ŪĨAéE€˜SģTrʨÛ[­;xĀl´€ ŽJį‘ÚŒÔ0Gķ´ŒrXՎ´Āoĩ"*D6€O­8{ÕKÅÆĮ1<ĐÚ 5xRũi…žōƒAUÛˇŖ­ p;P2#o>čĸKt“ČĮJHfgŠĮ˜ˆ  ,­Ŋ˛(šwWVÁ9ũŗŊPČšXĘÆFŪšŠ/ŋÔÆqß&‹4Ķ \u#ԝ–UŽBî„Tw E ÷¤#šZ1“HtĒ÷Sˆ ‚Ū•dŪŗĩ•@aœąĻ€š #Võæ k‡’b€1×55ŋú„úUÔÛÜīˆîĪQ@‹pÜ1ŠOŧ=*f$)#Ō¨Ú2Ëpdc†ôĢ—Ũ˜zRĩÁ˜6GÔųĒļŦ#ũÖ9ÆIŠæ,¨J.M;ĖRJƒ’)G"ŗėé¤'Š­Æh2s@ví ŸZ\sAãĨ0H‚MĨšôŠ“Ė0,=ęnš íLū,Ōį'€07PƕzÔŦXäOJ›ĩéĀŒšč@g”ō#ôīOP,4hü2ƒNTT@EË*{JœĐ2[¤Žŗ‘éSb’œ9 Hģã+œgŊW‚ĐÂćČ=YvØ2sLŽá%mĒy !†Õĸg!Į4[[<3,j´)yĸāēƒM?(;T})āRt4˜oĩ‰L}ëBI<¸Ë‘ĐT™ČÅ4¨=E02ží¤“{&WĐÕĢ9üųOp*ז‡ĒƒøP‘"U@'ԁží–ķËĮ˜UĖĶ$gÜTfŸHašZAK@Q@Q@Ph´ (¤Ŗ4PŠ;QE (ĸ€ (ĸ€Q@éE( ĸŠ(Ŗĩčí@Q@Q@Z(´”RâŠC3f\žÕaũǏëRj€xĨĐiâÂŠ( ƒEJ)qI@QLĻ㞴“?–…ąš†Ė—ŪÄ÷Ļ„Xü3F9¨^G2”ˆŽNjHŸÍPũ¨Ôˆ#Ũ¸¯4é#.ĶԚōė#ĮŪŠIdđZB4#;€äԙĪJEeēĀĶņI€Ķ÷ĒĄ‚Q9`ŸJļE.Đ—ĪiÕÜaGlĶfŨ8a‚Ązf­ū4Œ9ŅqĀûā%†¨l¤ ’gԚļøˇĻ*ĩŠĢ! ;Ķ5ĪØØãĢfĨē˙W ĸŦR…01éQ UIbBô‹ŒŠ}ÂB㑌5$ėĄ 8<āTÅdĀn Ņ$Cl{~ōŅ ‚5´įnÕ"­ĶŪĢ ™åÃjŽÕc9ü*FŠ÷’lUPycP\Eąĸ;‰ÉčMMy`Ž9ÚzTČD|æŠ –&˜Ŗ*(šˆĻ-)úŽâĸœ+\DÄü‡ŊM‡Î%9oZ&NÎM€M/֙!ÂíRQZĮ¤Œ}jĘÍpfĒŲ•Xd-Ķ5 žXˆÁ뜞õVĸIŗNíéH2sKÜf¤ĮœzÕV•Ļœ¤m´-5.^4"@IŠv —:Ō¯Ēό#ɂ­ØvŠ&¸ōļą\ĢtÅ|sš;Ôč.ŨČ@n†Ÿ4‹ ߀X§¸hœe>SĐÔęr3Tîäßå ¤sŠŗ,‹MĮâ€%Í1äXÆXātĨ ,z lĢŽz @<āŒõ TsJxŠåA ;8€g“HyčiĴč“Ę…WŠī@Į‚zĄŠ:•U‘É̈¸ĪŊ5āŽF%”B°0 žáĝOLÕōQpŖ IÉИŠET_+§|T’™ŲŠ…ų{U…|‹ƒëO*p(.؜\9'šÔ“;ŌĸK`Ž]IÉëO”HP„Æ}č–œ|āûցéœāU;[ib”ŗãŌĨŧI,FyĄŒ™3×4îŊjPéWëRäįĨ ( Ų¨í\ã­>Vs|X€G4ÕY~Ũæ╖A~$ØqTBĖ—Ļ2ďz¸eŒ6 ŒÕ ĮûC~͊ˇ-ŦRļâ4˜Ŗ+Ÿ•ŦÛØö\'9Í\‚Ų`ÉROÔÕKö r˜Į .:nˆ¨î*šÄë1‚æ´8įņ4Ä9Ž.ˇ‘ė)n˜–3Ãj 7Ŧą†õŠgÉš„‘Ž:PɈncØ0¨ĢžĩJĀíWqĪĩ&05EĖ‚ķËW ZŊT[qÔ>Q’) &ŠVķĖRrGB*Æ*Ĩēīģg~=)~ØDĖ›2&€ą$bD*N¨âļX[*O4}¤lVÚrŨŠŅN˛įąEIŠ*5ž6'æqO,6įŲgȉ[pAš$…d9aš."āYųžō*I-‘†Nr=č–-čŖ8#Ŋ—¸ßæ“PF?Ú¤’ÖFÃy™#ÖŸŲ–$@qÎM2Ī>džšŠeˇI1Č>ÔØíÄlÅō(¸ÁĘĶzg# ×QÄNUWĨđ<,I ƒO•fÆģ¸æ‘*Ô0ŖŒUŪĩA<ÁxĐķÅK%íĀB>Rhb-dUkš^˜ÁõĢŠ_ˇ(”!Žû\ˆËæ' 8ÅKȒM…JˇŊA6Ö¸„px§˙{Í;Lײm9㊤¸Q* ÜžMW–@đ9Xđ Á4ë‚Í3É V(y"Ö.NāOepČ RēP`„üSî×e˛HíNÂ-š"ŠD&BŽX” šgœÅ_0õáiXf†1Mv(…€Î(‰ˇÄŦz‘DŸęœûPhîĖ€Ÿ,āu Մ‘d]ĘsíUŦȁšm§ĘŌ7D†˜ĻķX€¤cÖĻ#ŠŽE,ŸhĖ›CŌJ1HYA &ņž0Gs@Å&8 •<ÍN3ڀŌ—ôŖĩƒJǤÅEq#CuįëL 6œ´* i¤œ`öŠņLĮĨ1 Žō9Ši4Ž1ÛĮî\ŠGL…†FzâĻ^†Ö‹6Â'.¤ũ*ÆsH4ãÅ ųĢ> Ėō2ŽņžõĄŒõīUcI`,¨ ƒĶši€č_í2• Ž:Ô[Ũ`h‚OÔöĐųQœãq5?j."ŖÂE–Ā2Øį ’´ČëZ8ŒŠF01NāGjAļQíT”0¸h‡Ũ'&´‚…\Lō—~đ9Ĩp#ŧRm8íPĒۘˇ'Ō­í#å&™öhÉÜWĨŊđl=‡ĨZUP 3Ž´ŲmŖ˜†`x÷Š=Ў Å;FÔf9[<äĶŦr#˜Žĸ¤[@š įš}ĩą€ļ[!¨ēŊē<Đ8%9§Í‹OÚäëNû4ąąōœ}iķ[Čöâ0A4€†áZ!QČ#š.—d1pŲëNž9Z5M ã­%ÔsJŠōp= 0w#Ÿ-3Ã‘JŠËržZ2Ž9éágT‘>ō”ąK4“.å* ãgkÆEbjHeuŧh‹¸īQGæGzͰM,,MųbŦõ€IPļ 9ĮkC8Ā'&¨O'•}Ŋ‡qWUˇŪŧķCü įFK™"Ÿa@wtĢāûVuÉPZu¸"]’.Üôæ•î–)B0<Ô7D¨ÂöĻ܌ŪGšvj”—p‚´,čņ–Ž 9ĄTV`1‘Uėp-œöÉæ•†YŠD‘r‡ŠA•ˆÍĢķÜÔŸ.UIWĄá¨°DÔãëLuĨIá‡ZŠtÛgÁ(F8íO—aĘ9ĀRXĸōWh$Šœ Õ$‘ŖąŨžqÖĸbËē—.H>ÔŖŠ^ÜUKšä"eū.´Ų§–MÄŨ¨đ¤-ƒBļā)Ū v)ôÖ•â€&O;ĘĪ=idF…› ëYöĀũŊōsŠŗ=š+ĶŊ; °y*@=ępãnâxëYĻu–ÛˁVLn,Âõ4X›ČŗŒ‘õ:¸`5wUo Ā÷ŠíKEfY¸ Q`-–ĨŠÎ…Lņ´…ÎGJ’Æv0nvœQ`/R k ņHŅE¸¤ëKH(i)h ŊQ@iEPEPAĸƒ@)hĸQ@Q@Q@Q@Q@ĸŠ((ĸŠC3”T‚ĸCÅH*€x§ h§ C (ĸ€ (ĸ š(ĸ˜(ÅP(Í;ąŽi–ŋ-Š"¤šlBŨ9 E"ˏCT„ÆCÍ´„÷Š­˜=Ē([m“~4ą?“j22M æF'ŠĀŠä•cŒŗĨSGhQžYē `f  -\Éæ=MOUėĮú:ÔįŠLË%9"ĢAuæHÆĩNĀŦlsØÕ WdQLĸ˜‹ŪpųeNiũę˜I1nŧRĩÄjÅK~”Ŧ2\Ņځ‚Č aÁ=éÕJũąĮjēq@ ‘´’)$ÔŨĒ ŠZRŊI  ‡Šl‘$˜Ū â”ĒžøĸĀ…­"$}E"ڄ—~ōjz@č\Žá‘@ĩŽc(€N@¤¸†V‰QFBՂāqš]Øt@žHÁŠ<ƒ”îāŽqL™&’ue\Ē÷Ģ—ōÛåËŽ)NÎ7.$VÎ*yäfœD¨M%ŽåRŽĨNsM”ųW†FVâ˜ZĘÅŲŖĄ#­ZÕRųĨˆQŌ™ Ë5Ī”WZM ĩU¯Īú9kŊRÔÕh@-ãëV]Â!fāTxĄ‰u5 Üĸh×oŨŨŠÂ\Ģ0 ĨsĶ=ęr=9ĒĪwˆŧŸtp*×O€ i ‡Ŋ9H$ŒU)wG+oPU_Ją2Fʙ|Û֋6ā@ÁéKGZĨlŌ$ ÷JlŅųW(Į;_Ū‹ŋė ÆzUh%Tņ“Džhw}ÛUzRlœP9Ēë+=¯™ßÛ{‰ lųWЧ`.b“ƒQ üËrČŧô¨,ÎíĀžzŅ`.I• UÜ})ø¨é`ļ:‘JĀG ÁšBĨJ‘VGĨR°ųĨ•ŊMZÆ\ŽîGZvũésQ‰É y"ƒŽœŌ;Ōį4Ū‚E; ĐœMŗũj)”Čģ3Œ÷¨îËŗeĪ uĻŽ3žÔ§đlj–ĶÆIûšĸĀ–€{÷  ]¨RôgŠ@-#‘J)8īJā#"1ÉPiĀbŒ`P:͏ ŪŗįĩJžÕU­s7™ŋœĶ¸ŦxûĶdĩ8v$éRG2ɕ^ĢRŽ”„4.o^*¸ĩ*ŒĒøSÚŦŽ”šâ‹ŒĢģĮF[“ĶĪŗĖÅCãjœæ¯vÍ6‹ˆĒÂUvĖ{•ēS;˜É=Ŋ*öGãGãEĀĨf[áKĈĢ”w=Ēā8§z `gߒ,įŽzSo¤V1cëŌ´ÔHŅ#™A df_* RØËkĄ9?.ëV )R¤p{S"ˇŽėh÷4áĐQM3! pi ĪĩįPÔēŒŦ‘…\€N $vRE(pāžõjh–höŋįO¨eļSoæG÷€ÍM ė-?{§4}šQōyŸ%LđÅ8ĮJ."ƒ¸•$vuĢ6Ķ m‰~€sQÉm3ŽŨĒ=HŠV×eĢFĖERŲ"ŠxIØjՋŖ&Ã÷¤ˇ‘bˇ(ā†ch°ˆ‚ŌŒš`]a‘BŠÎ{ŠEÉNvæ´#Č\â¤d” ( ĸŠ(ĸŠ)QE™Ĩ Q@QL—Q@ ERĸŠ(ĸ–ƒ@ EPEPEPIKI@QHfr SĨŧÕąœ`ū5_ė¤ec“h=Edv~V7Sm†û؁Å>ÚŪX$ę Nkyáž20ŨiˆŠ!ūžøéíW˙ŠŠÁ ąÜ–a{ÕžKqIŒ¯{äfsÅA[ĻÖ!‰Á毟›#ÔU8ˆ‰č§ŒĐīG!ŽF9§\l2NN)šƒģ'œŅ;ƒd$bC‹ø 6ȑhJŽ{R†_ėüwÅE•ą;~đ4ĀsË4j­!ž•fY‚Dõ=*•Ë cyfīĮJščІ^ņBķŗƒE„iŠQ͚@iA¤1h…€ĨÍ-™Ĩ €hĸ€ (ĸ€”u¤Ĩ 4KŠ(ŦĒy f€0iÔb ōļíŖ4üQE0 \RRö Š( Š( Š;Ņ@Q@Š ƒE€Š( Š( 4QERŠC@Q@Q@6I@ š(ĸĘ OŧŠ )i´áH`)i- (ĸ€ JZ 0Š(  —åÂú-<ŋ—i‘ØS/Øyj;“Kp1gø Ą +åÚ¤ŖīÉĢYų7gļj´Į+î*B@ļ OĖWց ŗ‡bzšV–Fs‡ č=iļ§÷ŒšáxĄā;÷ō¯9ī@[ĘdSŸŧ85.xĒ– —‘ģÅZ=i1ĄÖ5ÜĮ‘d)ÍĀßJŠ ō.ą‚Ŋh@^RpzP@¨ ’\õ) Œ`ņKF)Ō0 ÆjŊ´LŽîF3Ú­Pa* -•ÛvNjsEC,`_˜†éb‡Ë$îË›Qpž S€ēÎėČ~n˜Ģ´bš`Sĩ,'“r‘ģڋÅÛ22un [4ŽĄą‘Ō‹ˆd˜ŽØƒũچĮkByĢ.Ą×dSR$;ĸāT‰7]H 銺hˆĄļ1<ķI-ēČsČ>Õ$1ŦIĩh¸ĮLÛbcč*Ĩ¨Íģœg<掘Ũ*¯‘"Ģ,l6“B%›lļ‘ģÔ@).NsS[Å"ÆŅ˛đ{ĶPËf-šįƒLE¸˛b]ŲÎ9ĒwQ´Æ7ōŨ*ōįg={Õ;ŗåŨFį8’é&tuzôÍ9d’Ö'mÛĒ)y™' ß4’:é |…Í;N͏ēČ4Ģ9ķüĸ¸8ÍDūĐÉ=ŠU”ęO§Z,Q4—*´qԎÕ2°ewŦé#´‘œŽ~`jômæD¤ )XWˇŧ…äT qP$1$ŲSķz˜“3Hd˛l„€y4ØāVōä•3Ra° ŧžô˛9ŠĶäāã­0-ätsLž!*mŨŒUIËq"“‘ŒŌŨģyQH­‚}(°ÕvĒŽzSģĶb$ÆĨŊ)Ų¤ž´éCOJĻ.d}î€lZ,ŧRP›Ĩ+ÉnÔ䘲P‚;P‡ RöĒâę7SŒŒv5ÅāBE;€ŗ\, sš’ˆt4’Û¤ËĩĮôc@ĢĐR63CgŠR3֔Ž)Ā§‚šŨ)GA@ KMĨ¸ĸ“4Pۊ( Š( Š(¤KIKL–RĐEw Š € (ĸ€ (ĸ€QE AԊ( Š QEQEĐĐhÍ%QFh Q@ ERAiôÕ§UęH´‚–€ (ĸ€ ”Ā(ĸŠ­qĖA`T0”=H§ŗzŌįßƒŌ›HŦqĀ“S5ēH~`r8ŠņH‹ˆŠf›dv9¤¸ē ÛFv÷̘äįŊ1Ąē §p!ĩ—{Ŗ *ŅëQĮ ĮŊęAÁ¤ÆˆîOî Cwč–@0T –â7•vĄÅ9QŒ%$9&š&?dy;Ķ6°ļķˇŨiņB~Ėņž2xĻ;Ÿŗˆ6Ũ3@‰%ÂDČ~õ9§uc#9¨§Y€‹Ö•¤WŊŒƒĀ}hiî<ŠB”'4‚ã2ųa4ËĐ|ĩîš[~CJŨHĸĀH÷ŠÚI$u§ nâF*” $‘Ë´ŒąüĒSĸĸĘŲaE€˛¸dSĄĒ–MšäĮLŅnNé‰'ņJÃ-ŌÍW˛fdbĞ{ՁÔŌ}é*´w3ē„/4Ģy”'a8ëŠvĀé@Ļųéä‰3Å$s$‡ ×Ԑ4-Ķ8Ī4Ŗ9Å-8į‘K@84ĮZR1Uī$h⠇Đ2Įo­  )#$ Ī\S¨Ѐį8Á¤XŸ”=Ē ‰f‡æÚĨjÂĘ ČČÍ0đĮ!‡"š-cWŪ2ÖĻ R¸MšōŽQV ^ĀbŸI@cˆĮz>lį“WŪ¨Ō=ŗŗąÉ5(ëLD¨ŌĒĒ ‘Í#DķAą—iĢ&ƒúŅp)JŖĒķÜŌ]ŠƀE^Ā=hvĸā@× ē9ät§Ã –=āc4Ëŧ˜ļ*äŸŌ yq…ô cĨɅžqT­~S =A5TFÚ&9)ÍE"Dđ¤jpßÚ[gmÍōWŊJđ#¨chāŠ#‰cSŽIîhB+Ųķ4žôDÅãoALļBŌɆ#rV5#Š=sL pĢËlĀ.âOrXũG2Å4[’,m<ķMžŨÚÜ"œ°ä斀[ŨĘ88æŖ•U|Įi2sÆ*ä(âŽ8íTV9]vdœķL (îö[ķü5/3Û Ÿ–•7}“knĶ"“˲*P‚GĨOosūæšäT^tí›=OŨĻÃ’Å”ĨM ¨–Ā7Ū^ԲܰD öėib¸q?“(QUĻÃ\G#”ū•eßí PåąœŅ`,ž(¨Zâ#/–-š˜qÅHưæĸ{¤CĩAb:âĨáOŽ*Ž ČRi ,K"Ëg#)Ī•2ÎXŌŨA`)^$†ÖECž*5ŗsŽqš`\Ū¸-‘Z#–78WPCyę;Tr0ķ TcÔR° @ÆHúĐ úÕMGˆŖ=ķKŗd6ã‚(°G´€į4ąÜ,“GZ‚Ë>tĢ“€i–i›Š'ƒ@ä;c,:PÚy… Hzž5į/pb [YŲؐķˇŊ ,P9Ĩí@´FTXČ{šąöhđ@Ī\TfÉvŦF}éÜ#…ļ‰YwníK}ÂíãĨ?ė˙"Žã•čiRܤÂMŲ=čĐąēųŊ1Í-ĢæáÔgoĨ/“"\4ƒi-•ŌvŪ¸ ۘš&â`Xã4ûId’¨°ĐŧĒT’ũĨ´ a‘9 }E \HČŌĨ-ÛīĩģईÅEeQ¸z÷ĸõ—Ęˆ9Î( —WîĘ›4Ë äŒ’p,dœöĒw<ŨFLŌ°Åŧ”˛*•ÆZ­ąÄ 8Ē÷¤~ė3ģ4ÛܓįŽ)j)UøīéJĶF­´°Ō̘_ĪY Ā]ɎFŽāĮ!¨°3H:iîLTWgũąSa“lƒKŠĄHm<Ņ#d ã5)š?bßĀc§`-‘ÍC2š\FpsP9’˛''Ŋ>{‚ˆŦŊXŠ@XAōŽîŊęĩÛË[ƒÚĨ–o)ŗtĒ—m&cW‡4ėåËF¨ŖטD‹ÆIā XfîāŠ @ĨíPũĒ ÛsœwĨ`% å”ã͊†ęäA# Oj’'ķ7¨ĻX š)I8ÁĢųŖŅÁ=Z@/jÍ'a@â€Ō›€ėfŠi¸č(aÅ  a´ƒÃlrTfŸž()\C^$eÚW"’Rē?yæ—S¸á|ËíŅŠkDŽiĒÎáEĀCô¨Ũ–Bņ6ŌzՓÅ%Wkså2oų›ŠĻyEˇ”ŗžŲ§v¨¸ŠfÕŪØ!#+HÖķŗŖš^ÕséKš.KØå‘UUGÔņXFåä•%.GĻM q4›Üæ™nÍ ÃŠFųš´(ĀÎ{͏Jˆ¯¤)jÄ,cL/¯­NÁXrúĶv€0ŖĐR¸ĸģķg1íĀėjŌãiĻcFÜ̆õ§Å+ې-[5|XdôÚjÄđ,ę’ôĻ EōLAŽ 4Ā‚Ô°ģ{sKfĖ–ŦČ2sĀŠVËl%‡֝o6į4\Eaw.Fč5lüĐŗr SÅ<i$ QąŒ‘F€Q͆wžõrh„Š:įÚĒŲÅ$,U—ƒŪĨģ–DP¨¤“ÜPsŨ†#žäÕčŦ* į–â0r­Ī|UČ]â˛ÜČõĄlô§(âŠÚ\ŧā†=ĒâŽ) Zkt§â‘‡ÕéBŽiG@híCPE"ũę_â¤QƒJZ€šG÷iĨũÚ4´‹žĻ–€ \R Z(4fzP(Ĩ¤¤KŠAK@) -‚—Q@(ĸŠ %PEPEPEPF(ĸ€ SM:šŨhšĸŠ(Mi☴áLĨ‚”RhĸŠZ))h4”´”Ph¤Í0)ËÍ0}œRŨŠxĮCšžĘÄS¸a/”ŠrO54ČÅC÷"žąĸœĒ€iįž´î"•Ą™ąō÷úŌģųŕŊ21VR5@Tp̘eRĘĒ0{Đļ’‹cTõ´"öį'­MHhŠ~ÄBЍä$ÁI÷*Kė”UŸzcbâ‰GĖžĸš;ËåĒĒ`“Ōˆæ%ŲX ĀvéPÍŲĄ Đ Nf†-ōGķ”Xc–č3 Š NКEF÷éTĨg>Vā“‘Š–čfâ!īE…rÎå'ķQœGŠl‡ũ=;T~Xm@Žq֋pįaĀÉ ü™'ĩ2Y œD ëIėb“’§ƒHeŧRU­ä‘Ÿæ`ĘGåVģ␠9Įjŧ33ĖČā=)Í?ÎUqj+_žæVÆėÎôt5OļŨŲ=ø§į8 äRNh$bŽõDƒöŨ›ˆ   f¯=M*Œ~TŊčĮ9 ŽxĨÅW¸¸1ČW$ЍšÉPO­9ãY>úƒJšÚ ęGJsEĀvŽ)’IJŒ0üjAš(¸dŗ  †9ÍHđoˆ?8čjnÔd⋈Ŧ°H~g~‚ŖhgdØ*Ŋ]íCtÍ;€„zTgmŗ{Ձ͚­~@ƒô!ŒˆˇØ0æ< ŗ}‰WƒššŅÃ@¸=*cœPØndķbHĶ–Ī"’č€cAÛuG8¤’$|eAĮz."ŊĪúČø@ĻŪ•/ƒžAâ­´JÉĩ€"Ą6Q‘č{.\¨“d`ũEnŝī)ëJöĘøųŽā:ĶābÉ’}h¸ÃpqUĸ…ä´ÂãžIĢew)SŪ̘&ŒWMcn׹įU¨@X†8¨n!gˇ@§%}iöâO/÷ŸĨ1Œ˛šÎĩF’Yc€}kCwîŽŅ“T-‹Ädcs@Ň˒7ːņOļ¸anĖĮ‘L‚]‘HH'‘Å2Ũ|ËiQ@‡‹‰<Ą)r~íM%Ëe0 ķPÃ$FOŪtäT“,sžĪēTpI .JŗIä3˛|š—%­üĀŋZdLÆÎ@I;x¨Đa͜Q`-Į2´Lp:Ôbö"Ŋé-Āû įˇJeŒjöä0Ī4Ŧ2Ķʑ¸ā‘ÅJ’įuÍS¸ÉžtŠš(LîÅFáĐQ`%F_hnjP0k0’ĒH¸¸5¤^1ր÷Š—#08ĩ8ŸŸŽ”ˏõ/ô¤K$i!$ąČéÍIi;34r°ÔœŠ¯-Ã,Œ¨ íõīRC!‘rƒéH 7vīKœu¤#'4™=Bns6§ëVAņŧ…Ta…iŒHQ›PŲŖ”œf€$ķڐŽiGÚŠŪܔP¨y=ÅZŅIũŌ“×ĒŅË%ÄŦđĢÅØ4ŋZĢop^Fūō÷Ģ'­;ŠL6ãŠCĀĨ4‹§ŨSÅ%--%ĸ€ N”´”c4@Ĩ ÅĨĨŌ3Å9WhŖŊ¨ĸK@ KEš:Ō Ō–Š) - (ĸ€ҊQÍ)¤QEPhĸ€Š\Q@&)h4bŠ;Q@&ihÅ%R‘iæšh´QE)­ÔČmĖnX7ĘzŠ."t’HœŽ2Į¯Ĩ[ FŽHīP›i›ĘpĒjĘ.ĜŸZ)ĀäÕ#ÎĨS^Ģ8Å5”:a”īUᕖv‰›xëšiXåpFqŽôX  Qō¨JŠ{¯%°PœÕ‘ž1Yú‰Ä‘æ„˙i Ā2‘ž•1$€}j•Ë ŒjŋxUßšÜ~čäŅ`:P}MBˇQ–#8ôŠ]ÕFXŠ@7ŨxĨ¤f@y`3ڞ@=¨8 õ¤Ũ“Į?…;Šâ€øíKĮJkp}čęhxŒh Ō@°ĄUTä P)[Š0ƄîÚ3ëI$š—ŸZ~iO4DUTÚcŌĄû$|ņÁĢ"J§8ë@GĮFƒImoä‘īS;'€ĘNsŪ‹ Äc‡C†‹ Ĩ[|™b01Vš.C¯ąd „īŪ–í$uQp=*ŅëNŨ) 9ĄēIv BÁ$Ô˙•!¤+ ŅîFB=ņV'ÆÛ~ö8Š}éŖĪzeČAˇÁ\uÍO,Šl°É̏Ī &ĐĨAĒāCbÁ­@EWfR>Õ}QPaTíL0&ũáFīZW¤Ņ¤¯#ŖmdëÍKm/î7ČpäÔĻÖ7$•äŅ$Iån‚•ĀX¤IA*x§ŽpEVąbš€OĢ$¤ô Ĩkķ_KŠlˆ­¨`úTĐÚ´3oß×ڑíœÜųĒĀ{S¸ˆØ*ę(ŠĮŌ­ųŅîÛ¸dzÕoŗOö.GáSIiļJüĮŊOŧ„Ą¨(VŠĢPÛŦí$ũjĻ ÛόzP†^_¸9íYš{i™ĸųÁ<â¯ˇĪnvvÕ{ ‹Ŗā6yÍAcąŲäĪÎ{UÜį ĒɋÉ<ŗōÅKqx`—fˊûtĨŠj>øÁõ§'Ũ¤1@Ĩ¤Ĩ˜ĸ–Š@%Q@QLŁK@P(hĸŠ(ĸŠQ@Š(ĸŠ(GJJ( Š(¤KH)M%Q@Q@Q@(Č Đ Pa§ši ŅE Ļ)Ԃ–˜  EPŅEfŒŌ⒘āQEP•ÕŽĐįŠ–øeúœÆ„ä¨Í‚E*xÍPŠ÷3Â\ƒŠIĨ ÅH!V¤K}¯š›q*I4l"Ų8e`:į4\ļ7PŋΟ!*NĒĩÄ&× NO9  ВŅ)=H§•ē2Į–=z Ōc*j÷CÜՈGîW>•_Pûˆ3ÎjvGl¤rp1LI–,ëč)É*:nSĀëíUŽįž>^3CBë Ÿ0%Žp(°•ƒt ÕKoøø—>´ûFBÄm*Ār)GæM.IņŠ,"æ1Ū–ĒÅ+¤üÉMŠâVD8Ũ“ƒJÃ-šNsP=Ã4…"\íęiņÍž"ũרĸĀHx8§ĩ_í(P;JV=ųāŅ`sH=iT•~Cšpe< úŌĮZ7 hÅŖĨ4œU9E0ņ$˜Ü3А`)ŧ◚@#à 2 2;tGÜ#Ĩ?ŪŖûB‰Ddšz€˛Aæ>ũÅOĩ6&BÁŗžĩ0ëKß­+\E,LŪP1īMx$1)Î]Nzժ֌öĻ §gxƒ ՋČŲŅ ķ´įë<@ōZŧŦ ‚:MˆĨq)sĘ@Ÿt ÜG) ëVø# 4˜ā‚3žÔ\ âh71EÎŅÎ*ŗFI#|?v´4Q€€zûĶVÚŲØ2)\ — õ5CP˙]Ģūõ^KT”îbŲö4!jE—ƒž´û§&ÅO÷ąš•íÖHv}‰Ąm˙pb‘ã\D7*Ģb¤uÅ6ė–ĩ‡=ņOû4ŽĄĮ–?:–æ2% yN”hĒBĀaŗŠ[ŌBĄä¨ëM&“fWîԓ”•ܘäS8r-ŲŖbsĐgĨ6ܖuħwu4B8äpœ¤d¸‰‘ ˙z€%šR÷F0ûqŪ– äd}æ^‡Ö˜Ę!ŧfq•nõ$’ĒĀī m9 ´ķEå™ zzT×S´1Š9=挭Ÿ,–-‚ ́ ‘āåIëE€’[‡…UļĻŦAõĒ7ĖĻ8”0#ŽeV%$đZ,‰ ô¤ŌEƜŠZ‘•Žå’8ÎÅãš‹NÉF=rzՋŗ‹WíUôßõ'ëT…땚2ßsŊ,ėĻXŒ]ú⋷ß*ô÷¨^9-%V(OZY¸sžNĐIĒë9‘Õ÷!뚷4>oĖŽõJâ›"^[ž(ÕÁv‹zg“šŠy]Ę$[ŗÜâ§eaj›TsyĐÄ%1ž) ŗBŨGSNį5.$@âϤv¨f”Ŗ„A–#šŠņšŠs/ŊA ŒP.&P=ÔÕŽ0sšÉ•+p¯÷˜äV•¸?gLõÅ6"@AP8¨>×HcŨœR`t¤nx"˜ŗ!bŠrèĸI’6˜@$ė)ąË„€rGj7û¤j•˜˙H“ëNĀhJSĐR)ĸzLvQŧ{ˇļrx  ŗMdW?2ƒNÅ v¨ä‚'9*3íOĮ4t4ԍbAJđE#neŌ<ŠŦŽ éRd(ÉÔ­ry¯#€1QBd…ŨĖxÅ]ę9¤ ´\ ‹-ŧÎÚûĸŦ‘‘HŠüŖJ.kl%ÄœgĨ6DW Šą, !ä`ûPU ``.IüKĶ53ĻmP)Hö‡Ę(ûSš1ĻÖų’ĀKg2oʅp0j;bžhVpy÷ŠDR„v,7ˇĨ0$*3.ę}hĐå>wc&iÉ+›-ûšŊBČāĘ -Đ͑羽° Ž(°w˛ŽFA=E32 Ė“éíSXaži”_šnƒš   ä1ž´´Æ–4 3c=ĒAíŪ¤drHąũķŠŠ+ŧojy;ĩ­ĐQ0oŒ8ÉĒ@YÎ:‘øĶ‡<ŒU)›yąŗ´‚Ÿgŧ;Ģ´tÍ hŽsU\°ŋTV8=ĒŪ*œ€IGĩ$H[íJŒ ĢtĢHąDĮwĩ;Ę]ũúT.ÂR艒99 DļėĪfÍ%Ė eÔZ#¸C“ ^1PÜÎÍj،€Ũ f6ߡ#4áQŖŦVęĪĐGŸ–œ)éH 3JĐęW Œ֑%ŽĐāš~i ĮĨ•N úG*qé@ ¤f‚Ũ‰É¨`™eŽ ô DLĻMÜtÅMÔPÃ+Šhã4 úõ  1ŒS‚âŒRa ryö§`mÚ@ĮĨ;j¨ģqVČ Ņ¨‰ĖQ•  Å+ށHâ’9VAōiÅŊ(e\O–ĐųcŠ{Hw6p(ŠT™w!☈­`ō#ÚNyĢĨgĘ÷+$‹åĻ=iļpËUņаާîāķK“NāČ&€´Ģ"u_Zl‹,ÅCŽ{æ­AõĨqn. W$÷ĒKtĘYŠüĮš­RŠ1Å#F‡Ē/åNāT•K(ØzšlŌĢYˆ”–jĐĀĐs´f‹瘭ÆG8Î)mŽÆė mŠJî⚈ąũÕ4†J*)fHT–l{zÔĩÖé3üÃ8  Fxärōį?ž•nŪF’-Į§ji°ˆŽ?–8ŧĨ ØSlBÆNę§r<‹Ĩ”ŽZē™Ô°™cu elrÜÔh'yNN{ÕØĐ,aqUŧ™ ‘Œ Ũ%‘"y°4–ëæĮ­MmnŅ‘švę*+exå}č@cœĶöSĀĨÆj•ĖĶ$ęąįm]ŽzâĻà o,ė늭k4’Æų?2ņVYžFúU-=€ŠCžsMø.Ĩ”˛„^Ϥĩ¸ķ‹0TāÕ{PŌä€IĨĶČJ22Mđ<Ō3Ķ5VX'gcģ}ĒxUÖ0$9>´X 㚯ÔIÔŊtO“ĀīÍTnuOÆ´HĪĪĩ6h>c˛2 ˜Č56šėČĘIĀĨēXÔyPŊēŸJ’ÍV,ÅÕąÉ¤"Čb”ãąÉĨÅ!4˜âŸŠ(Ŋ¨ĨÅ(Ō§Ĩ4â3J0Kš\Qր4áHE( Š( œšZJ ĨĸQL”ŅE%QHŠ(ĻĐi3E (ĨÅ%-J(ĸ€ (ĸ€ (Í%šiĮƒŠJf(§QHe!J ĨĒÔP(¤KI@  QK@%-€RéKMuĨOCL –Ÿņķ'9& ˙OSŽÕ,vÉī\ƒõĨ–"åYNzU\’ >kõíŠtōĢ Ā‚~´č (Åä9cÅCsG(0{Đ˜‰{qܑ۠'É Ī8ȧe´ųIĪZŽVÍSxf4}X:†◱¨­Á >•-KOPQĩ_Ž´HĢ"Ā rj[ĨŨlūÜÔ69q¸˙¨ ĒĄ@ĨqŽj­Ã™!€zŅō¯<°IR;Ōˇ$ŨĘ3ĀéVAã5VÜĨOMŗŨįIÜf€.Ķ&—ĘŒļ ¨Ūįk°€3N–dAaiôm譌dSąÍFŌĸ*’pJrČŽHVɨÔMĘIĨ 4„ įŊ:“÷ wÍ#(a‚3Fh\Ŧa>č™-ē;‚EL #gP*]§rxŽ.Uqß‚Žh^”†xXʲF@j„Ãqö…‘Āc̓W1ž´ Qq]üÕ˛0E>•Øŗ Ŗ°Šø¨h¸ Ī5@ČŋÚģUķLōļv ŅqކŠéT­y’+ąSšēÕÛ¤„ûQqĨTKlFIPܚží€˛ę9/“ËÆÔY)\lzfĀ.ûú c4đ?*• ˙Gō‹Q5ŦÍüvhsî[xĀ<VMž|­„?ZFƒĖ…boŧ;Ō~ũŠÄFÕXQ  (ˆĖZGä›jLļĖp Å7ʙ$Ŧaˇt&Ÿi‘Į p§4ËvÉÎjH]ÍãĄr@æĸ´fŒ˛ œŅ˙ĻHN~aŠ™$ōēŖ…ŸÎÁÕžōw¨bÄēšĀn†n K4ŸÃÎ‹čŽå˛… Aü*xfY”ö āÕ[ D›Ž:ĶŦ&_sš,;—sÆ+:Ûjß8nõ :Öt 6 Ũč@ÉUÛXĮ÷*Á‘#āžMTg0߃ڈˇ=ëđ ô4šmØ<Täcš‹MčįëD1:,ÁˆįĐŌXœZž:Œâ–įŠVÁüVvÍđ´ĨˆqīRÅ6Ĩ‰$g“E€ą+ s“RŧŒU;I,ŨÉÎ:fŪĩš˜ČA#4Ŧą÷ąKĪjĢlŌĩĢIģ$RE4ĪlĪžGĩ;lūtsš‚Ús$GĮĪĩÉŗĖØ6R°ÉÅ(4Ôq"+Ž„SąE€3ÍC<ÂnīŌĨāzËģ „r Č 5Tî¨^ę$bĨ†ELŖåÚŠ›Ë3ČHį9  *ɝšRĘ,ąĒöQĒĄ‘zÅBŒ ķ‰yŗ@ÁpAúRƒšĨÛxȜ§ZYŨ܆­]Î)sTvK)ŽAéšēÊvI¤##š IÍAíKœ“š¯‰ŧđ‚§9Í+€¸ëM Î õ§/ZSíEˆA÷ m6å\yųzŌI*Æģ˜āS¸ F(#pÆq@lķž Dn"R~cĮĩWû‚āJsW$W1Ÿ{¨ęā9 éEĀČk+’wnõÍXą†Xä0cWé§§q"IūÛš˛5ĸ;SiāqHaŠJ3A ĸš)zĐæŒĶiE.iE4ŌĐŅIšQ@Q@Q@Q@ Š(ĸ€ (ĸ€ J Rĸ—PŠ1EQE&hM%PEPEPEPOZ )Ļ“@ š)3E!•- ĨĒŠ€)i-–RĐIšSIL‘Ši’ļÄ-Œãĩ8 éGŊSļ‘Ĩ¸f#Õ$žāD§u§ajBę3Q@äģÆNvž(𕪨Ģœ{ķQųîÎÁN-ĩ71ĀĸJpJ°SÜĐ‘ŌŅŸNh=)0—rõ¨íâōPŽsÎjP}(Īj`W¸R%I‘Kc¨ĻÄ ˇ"RĨT sV‡J8Ą0*ZˇúLĮžOzK9@Įˇ­ā¸šg•íûFę."´ō™ , [ŪtŅ#J”ÚÄĀüŊi˛Ú‰ąŽ”ËÁ˜a§JžJ<ĒpJŌ\[ģĒa†VĻÚd€ŖōHÅ=§ļAlŠry&´;yNJfŒŦ{x¯ĩ:æi#‘BƒZM ĩÁ¨åuŠ&cڞ9ûT ĩšĮ894‘­Ä€Ąe[ĨJķâBĒ…ˆŠãûõVæĶĪpŲĀ %ĩėéۊ§" šœ'ËŗŊ_‰v ^¸âĢd‚v’1¸7P(B ļ/ ūSsģŊYŸfķ°üĮĩ$q<ˇ>sŽĐ: Šxķ(VmŖ9€đ™NtŖ×&˛Ø¯ĻXĻ­ŨÜm\š[‘ÍÃÅ2'2BŦÃūĢHe8n]ތoŒJt÷~\Á u^ŨÁÔ›š§Ëƒ¨Į)Ø ŖģfĮB¤ôĢ$ķÁŦųÎučjiŌč9ōČŲéE€˛ÜôŦÛķ)+ŧa{b­Û4ė›Ō Ôų1PUIˇã–ЉtU‚px­(¸~•˜b%° Ž”Đ­\­ãÆ>é=+HqT-ŖJÎ]ĪÕx ÍKęcž)GNiG#4 kd-9zRqÍ8cméJQւ)˚ræ“Ą§)€Ö8•E!ÍCúP2xî ĪäɂĮĄ*Đ5S …üĖyÍYlcĶ˜ šeˆ…?3€TBí7`‚8"ŖšmˇQ°äãĩ,Q—ē2•Ā#ŋz,‰]DeKXqQÚ¤qĄÁš5…Žĸãą§Ã‰påđvÍ0,yą÷ĮôĒA^EP´Œ4“4û&eIšáiXD÷ĄÚ5EĀ,y椎1xôĒ9twl–'Š{I)°É%H4Xfjaį­Rn˓y+ÜRÉį/˜í&1Đf€-ĘOŲ܎;T6 ŌA–byīNI ļLO\TV.Í›Ō€.íúŌHŠëĩ†GĨPûlģL™Ĩ]ŽQ*Å-€lvņÅū­qO”Đ)…Éč:ĶcHģ—‘UīĖĢÚ0ŊÍ:IJ‚=ęŦ†`$ #`y îĻøŦŋwNC˛ķdg(h°f•†æįږ–C…9Ēr—ØŒĪéL‘ĖrÂápĖ>lwĨ`5;sFF8ÅSž‘—ĘSÂļ7})—8€Fa=O@iØ ŲâŠhË{b”֐ zŌ¨ëJj9æFOĨ8*¯ŨP>”V]¤õĒÂđ‚ ÆBžõaä ō1šz cāJĄö‰DFS´/aV`›Î„8â‹ŋfˆ6íƒ>´mļâŧúÔ ņAŪ1šÍ-‡ÚŠÜÚK30: š‘ÔôĻŖŖ’Pį&0Ee‡i#v*ƒiķ3ßÎkKëKšœņÜ+? wÍI|ŗ1Cā;⮜”Ŗž†ĀŽ=Â% ÷ąR/—w¤1ŽIč)Ę8Ĩ4€úĐš'Z(sKڗƒÖĐã+@ûĸ–Š`8zV9aF2iû{š:-GÉ5!¤ q¤ĸŠ(ĸŠ@´ (¤斊`&yĸŠ(´ (zRfŠ)Ph ĐQKŠ1@'zZJZB)h ĩ%)éI@Q@ ĻĶČĻ‘HĸŠ)ŒĻ)i(Ļ…Š Š( RŌ Z(ĸŠ`’–ŒPHÍ ĒÃæũih CTaqŒ IcYÉÅ>Šc t*@ĒâØą_1ūUéVč§qƒŽ:t§´vĸĘk°ÛNĨŋ6ÕņÍ]Į4Œ€öĒâ+ÎCXüŧđ3L¸uû,h$āņÚ­lv6úSÚ28\}(ÖbLķqKpTĪzuŠ$ˇYX$Ԛöš—x|.ƒ~J *4ĖÍ)+¸įƒéRĨŧŠp ŽôyrÃ#yC!ģzSkmÂ$Îj| UYLĢn0~~ôûYZH?^•,dũꊒˇ˛mĢŨŗT `o%9Ą'†S"3cO4Î˛)~€u¨ŦņļsčM2Ųso Î2qNÂ, ҘŒãúĶb¸9Lp;ÔPIR'8āúŌÚĒũĒRCE€ˇ0 äöĄēzU8×Ī–bÄđx§BėđH7§zV<14`åŗ“‘Rwǐ;›Gb܎†›Ķē+uÅéät ņP=ÃvF dæ Âu<`ƒƒE€lÖÂllT¨ģ.sZJGpˆK @C-‰€en{Ôģ”š€ČČRöe•)?xu§]Įē8ņŨ;myčx§9ČÁD?tU{[†šgRxĪ€´y¤éKéš1é@ N„=é@hi6äįĄöĻĖå"f@¨íĨia ŨOĨHŅ#•õĄŖ ģ)Ũ¨ĸāFļé%O`YqJhSØ scâ›2´WQ¨fį­]–$”r9õ[ĒČ%›Ôš.!&ˆ™–Eáé9<íÎų8Ģ#Ū”ņ@ėSŽÖHL…XԖpIũøÚÕw9ĸ•ÄQŒ=Ģ2„.Oj'ĩ rXô̤qJ:zS¸ėWŗfû>ŌĨHĒ›r%Y'Ž+O­&(B)Û8K7 œŽ)–Ÿ=¤ąŽŊĒø AJAāEĀ̈́Ā"+*üËÚŽĢ¤VĄĀÂŌ•­âfÜTfžQY6ōŅp#ļ¸[…b ŒuŠ€āĶ"! ëOÁÁ¤2Ž qjxĨ˛âŅ֖æŨæ@ĄÆ=跂HFÖ`E1ō|ÃĢd%­.ŋ;¸ÍX’K61zŠh†IĻWeÚŠëL .¨T—ŠėIæŗ|‰ĐTˇ6ōĖß+āzT`œ +Š@OzČ葕åú{UWG´‘YÆåĢ’ÛģˆŲ~úSn7ΞXš4Āŗų‘†{RĶ6´PŖ$*+9ÚU;Æ5#,Ž•^î|:ķŽÕ`›4’ʐŠf8Ąœah­dŨ‘“Ā4ëÃN@r3H×QĪ)i Ú: –BnŦ˜ ātĒ{5<ĸŽĩbĖÆmĮ—øæ˜ŽžFF@äf›ĻĢ,LH Ā  Ũ'8YobfÛÎ~•d‚1Y×?跂@>V#-Ã:JH\äuâœĶ"Ĩ†}*;U H-ÍWą +JdäįŠ§`/pŅžųOL4žÆfĮĖ• %Aâ“NĀ’o÷¨ļ€]n´åƒ“NŠŽģ€pMEm ŒˇsO¸Vh›k#œŠ­e,’Zšvų‡ĶæiEgÚË<Ęā7 õ55”í(u~JœPŖŌš8ģĶģΚņ‰cÛģƒé@’ë}ŅÚZą#ˆãÜk:ÉBß:Ž‚¯]!xpŊsšb!7ŽŖsDvúŠŗĢ*SÁŦÕĻRŲێõ.–ÆO;s@Í ŒQh FŅHÎ8§f˜zĐx CJ)¤æš„䊒ŌįMŠ( é@¤Ī4¸¤M%-%QE0Ô ){PE(īE%- ĸŠ(ĸŠ(ĸŠ);RŅ@ EPzS <ôĻnhŖP2 Ĩ¤Ĩ P( PŅE ZAK@QLŠC@ 4”Q@‚Š( Å¤Í-¸ĸŠ(ī@¤‘ļ!oJd“$gäûR¤¨ã r}*ļŸķ—sÉÍL Ûpd\`õĻ˜Rhš2ÄéO8ŸĘ @斎h’ŠdĀ84‘F"@´ü{P(€ķ×Ĩ3Ȍt@3OÆhé@ˆÅē`27zTbÔ,lš<՜ņHzQp Š#ģd(âĸXdŽā•?+ÕĘ;ˆ§ķÛHøBÁšČ¤@aļ‘˜ĪÚŽ .8įš.dTŗaƒš›O+öp3Ō§Ú¸?(怊Ŗ úQp(ƨ.eŧņV-V [ĘÎ3Í>Kt˜‚Ã‘ŪŸb!…\MTŊ%Ĩ{VĮZŠhD¸įr !_¨< qVĀW=…Sš äe$ƒˇĨYŒšŒīPĩ6!g}’OĩgŖˆî”¯Jˇ9s" ™Næĸŋ_šą9ëÅ W'ėA ž*´2LmŧÍāõīR2Z1į" ÔY”`C})Œ´—­ŧĶ×Ƹ‘#YFÆô5xūĪÁ€y–č­"„„L$im¤,ģxãŪ‹ 'ŒSŨ‡Ų[Æ8Á¨`mÚsëƒ@ÉĐ(_oČ3Lģšh• ÅÎi"Ŋ—,F:€hŧmĸĮëE€ļ’ƒvlų¤KˆÜ€^™īPۜZ S€HȤx]ÄG*Æ0)Ø >d`ā°uĄĐ‚AŦųã˙O@ŨĀŠĻ€Co&2sÍ+kzqķiĮŠŗmíÚXŖ`psO’C%ŲBĒ‚‹ŧO)j—™æ8`Á{ṅ¯JC @=éÑMfĨA@ĀdRâŠ}ĻWV–9VT §ƒ@€Ē°ǟg’vŒĩ[=iXŅq­íÚ4voõÚŖ˛†XĨo1x'­]āp(¸% z0ĪjŋĶ­4”Ë‡Ų HĮKOlG"°>ĩ }(Hf€3Ŧ¤yģƒuôĨĶØ$#qĪJŅÂāđ)@Ā‹NM=Ëo šĩyQŨĀîiŨiYCĄR2 eÚĮûžĮŋ­jä(É8õYlĄYÁõ,ą‰cØÄíL 71Í(vØÁäúÔÖŗ!”ÅÜé?ŗb=…ImhļėJ’sE°ÄtČÍ9EQĶ›˛åžRję. æÄ' Jũ(eÉ│G4@8Õęiũ0u céhĸ€ (ĸzZJPi€R_zJ@QE0Rf–€ CFh4 (ĸ 1@Q@Q@ š)qE%ϐq@iϜ}i´”QŠ)TĸS…1- Ĩ Š( ĸ’–€ (¤Îi€QEG4ĢO=…$ĸŖˇc$!›Ŋ!ž0û æ‹%- įé@<Ö€œ)´Ŗ&€ƒE€i“ĐēŽ¤S¨  šw ã<æ§iŖ ĘĮinÁŲĸ}™ëL6¤Ģŗ>æaLD2ėXã/œâĻží'9Å1­å1 ãå4ë‘#´xN'ĀI7Å4hŒrãš|NëvagÜ1QI)7(å 1ČĨ†@×ÅĮz“Ī“ĪhĀöŠb”ģ28 ËUãeƒ’p:f–2^ævS‘‚(°° „¨8ŨOiã]웆EU‚2܃&ҟšsëīE†YY‘ŽsO%GŪ Š:„ģˆŽ;R*‹‹Š7“…éJÂ.wę)ETļrUÉųOo3@Ōáh°ËäPzTvōy+ĻžG4€QŌ ’éb”!S“SĒW|ß%4€ą=ÃEƒå’§ŊL¤˛ƒĶ#8Ēڇ íšš9Pí\áąC.ĸŽqF) ^´„RŅ@ Û(Į­#˛Ē'T6ŗųå¸ā(| R…ƒō¨gœÅĩ@ØņHghŲV@9ôĻtH‚jŠōūłAsÛŪ´qUQĸkŖ–29Íl›í$zTąÂąFU_Z&‘`‹{töĄîcą8n”ZGĀė :h°„鎕*˛ē†Sii\dÛ0˜Ũˇß)žDģ”4™U<*ŅÆ)…ÆHüM0)ÜA+\,‹Œ žā;Û^I.xā‚=Špá@,ÖDQŒß4ŲÕâēķ‘wāUÃ÷ˆ\ W^ $‘™ŨJŽĀõĻAtírŅȸĒÖ^õ’MɑN)2‘‚GJŽe/Ԋ—¤"Ę6N‘DË'†™tÁĖR„‘W^Ū)YFiZ$hļiÜEKü?“°äįŠ/8š §[H‘èäZ|ļë1]Ã8ĸāWŊÚ&ƒ‘Ö“P÷ZžKHäpÜņīDöŪrģéNā>,N9ĨŪ­Ŧ G#d,NęŠŪÕ c–Ī5 \A=Ŋh >ö=(›õ)5:”S ë@čæmp'Rq‚ KąyāĶc…"AАpyëTnyÔPzUĶUÚĐ´Ūfū}(LPÁHûäķMŊųc‡f#[É!EvŊČ$ 'Ž)õNķĖڞVqœqS;ēZîQ—Å)ČĨĒ֓´čÛ¸ Հ@¤W‘‡„įˇ5_M+ãÖ§ģp!|ņ‘PiŦ6ķUĐ_ÆNÉōŊĒ1'ÚdŒ>o4ûŧũĻ<ũĪëIxŠv˛#B{P‰‚ÎōžŦØ<ōH‘¨TÜHæ¨32Ė›×9Å+Ĩt[ôĒcdĨ’áGlU›šDvā•$7jŽPh[nŌ *Ÿwĩ °fk`[žÕdâĨĄˆfË .Ī Ücmiãô āš. |(Ž9ÆjËpĻŠˆ™îЯJšÔŸJTŋ;ŦÎŅŪ–ŌT6ÁwrĢÍZdVM¤d-ĸŒ̌õ§qtæd€āäÔ×âd‰gÉíSĨ´(ە4ŗ[G;aČî(Š?n“qÉĮoZvŸŸ´MŸŊžõ2ÚF’\ƒüéZĐ ÆûI늁v˙jļۘĢąę@Ē‚Á–Q"KČë‘Ö‹ëif c9Įjŗ›ëN8Ü¨ā–Vę*Mŧ‚{R•rĨ/BĢļęy˜ÚËRÅXāäÔwÃņãŠĨž)g–0…S’MP‰.’G•Hl)Æj; ]÷Ŗ6qŌ™tŽ/2ĘÅ1Šed¸e!†îœPŖšqs$AÉôĢ6o#Šķ:ƒU#•cÔÎvžõ¤1ÁƒÍ $Žô \R†Ji-™Ŗ4QE€QEP)M ĨĻQE€QE’”ŌRĸEQEQE”´čϚu4ŌĸŠ(HRŌ pĻKIK@Q@Ĩ¤´QEĀNĩ‘$Ÿ}sRĶOž”jĸĸíƒÅU{wA‚¤æŽΎj1ųúSL~΍ĄíéUŧ¯ôŊš8ęđã4¤dįĐ"ļ+ĮSÅ%ĸ•ļsV1žĸ‚8Āĸā€($âMÎ=é!”m—}Ķ sÔUąŽã%ēäÔpژĻßŧÂŦ8*z*„RDVĩi–ę =Ĩo°ĢƒƒL),q´!r āĶæˆ­š įš4Ķŧ‰N­ŒābĻ’QycĐzÕ+‰ƒųAAc­O1˙Iˆ“ōã­~ÔâEVĶūĐūSjkõÁΏ§(ÎĸHė8ĸĀHŗĢČTg#ą§ŧąŠÃ6*´guėč)ą‡•e!AÉĮŌ‹ ššG~Ŋ)AČíųÕibceķgzŠdÎzžiX !—b¸4Ëļdō‚žIÅ6rŅ΁ķÔRŨ¯‡?ŪĻÜČņ4{O^ X^šĒ׃3B=ÍM$Â2˜öX {Đ*8ĨįąE<äœT€;Ē.æÍ69–Q”9žÃ÷l=ĒĨ†<ˇÎŨ@ ō(Ād#׊d1“‰É  (l„ uŖ88ĨČÎ23@ÛDbC¸å˜æĨĮ<Ō‘@Ą€ȸ`¤HU@úSųĻHˊJ.’0ü0SR^”–ˇu9\`ՁH ļ íUåļĘ'ŽÕgĩ#:ĸüĮŲbĮ°ãÚĒŊ¤’aZA°vqX2åO^ôĸ˜†$B8v'ĨVŗŽhäs&qW4„Đ7J§xnö"žŖŊ\@JR9¤3$‹B°8ĪĨYšˆîŽeÛÔUĶÉäQŽÔî#>éūŌņŦ`ņ×5uFWŌ”¨ė)JįÔ\cgŒISŪ¨[i<§û¨kE—wԘ°ĸģ2õn´̍ē&ė4_%zį­]hċĩ€"Ąû+2~Ļ‹Zû! Í[s˛<’¤žŲfÚ[9M™NƒÖ€%‰Õ“*sNl9¨m ōnėԒ‚Ņ•S‚i §ĻŒųƒũĒe°ËMĮ§ÛC-ģrsO†ŪXšCCô§ ˆŦ_kI’vƒR‹øŗŒšŽÚ b‘ˇ‚jË[Âx((;ŠŖ6ų#vî•Mĸ’ßkš8ôĢ—6ûãP˜EG#É$~_–wƒBÔ3 X f¤'Iä@p*+[—™Ø8éŌ†2ā95OS9GŊ\d ĨŠ ÂĄĄ‚T6;s–ÛĶë_ô{BōtëŠ}ˆíĶÜåMÔCy3Í CžŲĨŖ!z|÷K ŠīP^2› WĐbĸšĪŲ" E€¸—‘ģmT6ˇM$ėĶ5”îIZ;sŎdÍ!ŠXËNCzÕēB)\ũÖÖ'8Á¨,Ŗ*YŊđ3VŠĨFw-všõ§NáŽãį€jáEëŠkDÉPM;ˆ­pĀŨÄ3ĐĐŲ7Ŗœpjv‚6;Šō(’ pÃĄ\×#ļũĞj|偄G ÜžĻŖĶķĩˇķÅ&Æ?)ÍPˇ}ŧ“ÔâŽČO–Áq’*Ŧ+,Vė… 'Ĩc•Ė–ąä [yl‹g$  ļJÔ°šŽĐü™ ō)ØD–Ō4Œ¤89Jƒ2ũ¸ādúSáŲö¤0ä÷‡Ĩ„ÔIn˜ĸĀ]RH†zw~* nR gĨI‡PGCJÃH'Ĩ@.Ղ@i×ųcŌĄŗĀ´>˜æ„§ĒsÜĩXķQIšĒļ'ō‘Û5ēI5ģPI?xĐĀŌÛÁÎj Đ>ČųëE˛ŧhC’= §6¯I–<Ú§­X8ĮĶ­UļČąN:úUrÆ9c ä–ûÔÚHqɤ#ŊjĨü’E°ŖqÜRÚsŌĸē˜Å eŖˆĖ&†SnsCN%RûFÔ=éØ á,Ņ+?Ū4âp}ę%ēSmæcØT/tҎī###"‹r kœ\yJšõ4ŋjEY”Ũ1$Ž9WüŒŅ`-HGįP¸Ō_,į4ä¸I$*:úR\ādžGÂJÄ'8¤¸p¨ČXa¤ļĸ¸÷47^ĸ”gÁ2âœÎŖˆéī@ 8˜æ”܂1PĮp’ĘŅŽũh\€qŠNj9 2žâ1ÛĩJJ 4Œ‘N#?J1Å1#éÍq֔Đ *Ž€ŒŒuëTã–Q{å;dzSč9Ļŧjø œ š9Ĩpą¤y(ĄséJT:yœ~îj.’Wd‚(‚Ę=āäāvĪéíVr61Đ Ÿĩ`拈d1ų ŗvjŋŲf2+ã'5pšFādôĄ0*5œ0—x8ŠŽaķá O#š•HaAúSŊ)Aí&‘T´€”č)בM(Œ*go$ÕÁ÷šŖŽßĨ+Nî'’Ũp9^Ô­$­mōĄ`b­˙ ‹Ÿ īģGHĘ>j}ŨĖ‘\ƒŽ*÷§…HŅpNW8ę()ÍɤŒP1ŪæíIˇ=éJį­ @搜âƒ@ š“F=h"€ŠwzBsAë@ŖĨ4ĩ.s@ #æĸN€Š§‚¨94&x¤ÚqÍ.)O4Öč)ßÃHzQŸ–€ĩh+‘ƒKHDQ€)94ÛíÆŠš'Ō§­-3ļČöABTķīM‘\˛:ÂUW­iö¤Ú1ŠwÔ9Œ6:Õö(į ķÅhžÔģAęĄļøN;¯JŖjąėu•ļāôÍiÚx¨¤ˇÛ,€Ņp*9Œ[~ė¸Īz{#M$M!U ęhŧ-ÕTasŽ*;ØŅ?,õ>´Ā}ø%â?ÃO{pĪŧš# Š|¯6%WôĻÅfąČ{6:dĐÔÎ@Å,jĻG¨ÍL֋įy˜jŲ•ŸÍķ3EІvÔ… @=iĐÂčōo#gĶä…üã,lŽi#†OœŗĖ)­¸šįją*EæF$|•ÛM´‚XI FĶCŖ­Ų‘6F9Ŗ@hÛ¤•GŨĻZÆˇŸ”ņRÃŅLėĘ0ŨÁ¨áķcšs哸õíLšq|ĒáģSŒ5҈9UqM”ąŋGØØN('ČŊ.AÚŪÔø&t¸hIĪ˜.'k–ˆÅ)–í§ BôĻÄGöƒį8  ĸšspĐÉÉ•ašaÎ PGPcØÖ&2ŖĖŌNcˆ}ŪĻĸ‡sjD¸ä [ŨÜĖž3DN ė1ĀĀį­0'šāFËœŽ”°\ r¤muę Tp[Pe$¯ĄŠ vÛ!fĮ"“@\ė+:ЧKšŧ8nzU+VōcŌ„ƞ4;YÆiáƒ(*r g<‘Ÿ5‘K0OĨM§î0ōr(°|ôJ †žæE?pp\<Ģc­féãũ!ĮqœĐ‰a1:<9<ÕÅÆFzĨ5ĶÂĘŽ˜ĪJ5e ą_Ĩ+ļČYH´šd˛€ĀË‚€ĩOaQ5ē4›ųÍ5nHp$] ņSõŠb,bHĘ3Q-žØŠ3į=*|š(¸ĘžD­ĩ†ÁNž72ĄEĘ­X§QqÉvŧV(qI#§+vjšÔĐŨyĻ(Ũ_P,>‚ˆ–3,Ūcm9Ģ{T…ĻIJ°æ•Ā„˛ĻČãMŲäf–Ü“{.xéŌĻkd%qÆßJjB#˜ēœį­;€Ë`ĻōbG–@3Íéģ˙!ÖfxØŨsIo°y™Á'‘F€A$~EÆŨ“Ĩ^†?-qœŸz§,r:uĖ™ãžÕb9ŸėĔÁCÅ*­œī.ī3¨ĢDÔØe+ō|‘ëš’9ČØpĄ¨õŅt@X:zņTķ\ĨUaÁčjI&HđSU/š–cSރY" •Š,"i.`2'4ļĶųŅnã>•[rI§ģ…Ú@ĨSäéûĮR:Ō°<ČËm ôĻMËG8ÍTtUą›Ö’áËŲ#ôaĮXeôPĒviĮõN䞨‚¤‚į4Ø#Ÿ1žōW¸ĸĀ^ik8ĖŌŧ™ SĀę͜ÆhžaČ8ĸĀOŠGV*BđiŲŊU[‰eÜcA´wĨ`e,’3̜í5o§ZŖĻ’ZV>ĩ,×`;*)mŊHíNĀYÎj‰Œ~ŌE>Vh÷-C¨ôS@.ۈeāŽ”Ņi œíƒĨ&=ŠOŊ¨;R`z~tdgę;‰D1“ßĩHŽ”ģW=Ci1•0Ü8뚞€#&ũÛA5-7ŊEG$+!Ž}i‚Î ÁĀ CSô¨§œCɏQ@ =ēL2x>ĸˆ X2rI>´ø¤YSrô§ŅpsÍU‚ÕĸœČ_ƒÔUĀi ĀÉĻ3fãzĢŒsRZÃ$Ģ0+ÚŦ† 2¤ĨŽ ZĻņÉÁš%Č=E\ŖđĻ|ŅÍu"žÍĄ}iúŽã RqÔÕÚ\Ņp!Œļ㠃ŒU[UŽé0 īZša‰IË(?Z. •ĸē/ʧĨZûLxLa‰ĀĮĨNĒôÅ4CÁEš"­ô‚NŌ§ˇXDĖ"Üԏ K÷”g֝kíP –ę7œÄ"Ŧ(ĒĸŌ5›ĖÎsVŨ#'&ąņК—R?ŧ‹žôåą+.˙4æ–{34‹‘Šw=D€ąmëëMŊÁ[vū#ŒÔÆÍÁ‘ō ĸęŲædŲ€Ģڋ€ËŒĩÜ1ŸģŽ”ËôU–-Ŗ=X’XĮ*ãzö¨nĄ¸‘‘Ęįo`hōā(ĪĨ(ûÔČYÚ,˛āúU;if7lœf•†hāæ–Š^Ū< ‘ëVã`Č­ę(—D­´˜ôŦû ÍĸŽAëZS.ø™}EQĶ™bÁĄĻ„Mwv¸<ÕĐI8ÅgZ‚÷Žã•ĪZŌ=č`Aquä$zĐoSĘĩ°i׉æÛ0Į qT ē$?Ũ94†iA0™7(#ëO<H(āb‘›æā‚(AKHž´´QE€ Zm(  QGzZ;ŅIÔĐ÷ QE ŌQE0 (ĸ€ ŅE€) -€ )@ĸ€QKI@))i(íHhĸ ÅėQ@Ęt -0KH)hĸŠ(ĸŠ((ŖŊé€QAŖ4(ĸŠ(ĸŠ)i)h¤Ĩ Đ †â=ä0ĪTÔŲ$XЖ?€Ļ€Î‘Y ßxœŠŅ>RgŽ*—¤É!9tUøÛr+tĩ6 $O“#õĸdß n*Œ@4*€ÛŠXf€ĨĪįU&fInOztR4w>KÜg4XE#ũąŖ-‘V‡ZĢüH}*ßz Ū›#ˆ×stŠÉ¨åx†C֐SšC†–šHPŖ íJg¨ šSÍĩŗ”îX—pįŊŸÜŋŌ€*é€ųMõĢ„`ņU4ÈëItZHNãŌ†€ģQܒ3)Áämč§ž*;ļÅĢũ( 'že%ŽTUĶĀOKȀũjĖŌŦQcĶĩ  õ¤į5OíRĒy­ōÍK-ÚĮ ɡ Ņ`,Qš¨o@@ėŒŌ›Čō8<ô&•€’â_""āfŸīˆ?LÕ}@†ĩ8éÅķF 'uíNĀZīAëA*â@_Zj:>@`iüņ@'ĐFväS†;ФGV'#ÔSeaå?<U´Ė˜9äĐáŽũh5Y!t•˜ÉzJŸ´´c¸Ōg=(&€ ģĨ xĪ-VlE_AŠ\qM•ü¸Ëc8 CŗšŠH#s–N}j(/äíŒāR ļûO’éˇŪ˜Éãc\"€)ÄsGAQ›„ķüŽwRw\vĒĐZųS;œsŌŦģ*!cŅjŽĸ•öŠ9ĻŌh™WŠFĘ ’Cæg :qGzBv¤4Ŋ¨4 AJi(&€ (´wŖŊčh¤Ĩí@vĸQ@Q@Q@ŠC@hĨŠ)- "Š( ëIKEQE )RŌS…1…Q@Q@Ph(ĸŠ`&jŊÍĀF “VqT.ÂũĄ@hEÍÁW-é’j4šV` CëIvvۑ늎q‹HĪĻ)ošE`Ų ƒŠ@Ų‡?ėÔ6+ō–=É" (ÆN)r1TĄQq$…ųĮJ’ŌBCĄ9ÚxĸĀYĸŠBB‚Xā @-G, 67ö¨ūŲ{íõÅLŒCAīL íb‡ŖVU1\ô§PiE銩k[‡$sVúRŠiŒ§p<ģ„”Œ¯JTa5ņ‘~čh€Ã‘@U\íf‹ˆĢjÛŽĨ>ĩcíųģ3ķR$1ÆûÔ`šaļS?š ÁĒ—˙v<úÕēĢsĘāŠātÆßŨDRE2UōĻ‹i<Zšæ$XʀJõÉ#\FJp= V‚,ĩÄJû°}*­ØŲp$Œå슴ĐDīš{Õd;æ/ĐôÍ H\\‰á‡jĐĀŦįéÃgõÅXššČ ŽsIĄ"Įz\iƒ(#Ŋ;­!‰Ö‚1KAæ€ĩŠ §t (¤'Š^Ų Bb€p)sÎ#/4 3ëKM#ž´ėq@€QŒsE/4ŌjLyĻ‘‘@ 3Š9Ĩ^”PsęhŅځœs@(ii 4RŌw “Ŋ qA u Ú1ŠnâœGÜs@TqJĘŦŋ0ŒŌã  č˜hpĢŌFŽFå]Ŧ†ũáČ9Ģ@f›3me;y^”˛@˛ōÑĐÔ€æ–•Ā†"Į$“ÜÔKgļmęįnsŠĩ@$ .i­ rņ>Âzâ¤ĩƒÉFÉË“Sf—Ôų­VUđJ.k°œc×—ĘĸļŠ–K`ČÜRId]Bų§ŽœS¸ ¨qjž‡ŗ`iāã9ŠĶZ<ą*oûŖŌ˜m%#ߔĸā"í{HįJlD-ū#Š'ļ`c(2tĻ,R‹ĩ˜¨įŌ€s¸_ S‚Õ"īļI™Ø‘Úĸš Á Œ*ėą™­H<Pxã2ZŽâ3NĶÎÛSÎ9¨ÖW[f‹aÜ8ĻÚJؐƒ¸zŌ-œîæ]ėHSLķätyD˜ xĩ›|˛.~féOļhŖŖ˜ Ā÷ī@‹ļ˛ųІīRŽĩŗ¯Ų÷íÚ=*;ką4ĨqŒRsĨGq˙ōģRœ†į‹i>”GLķëI1ÆĨžŧJv—÷$ô¤¨Õ}ąT"Ōʎ0:R$ą<‡.*ŊÁ+Ū2G­€ē”˜ô¤2ÛȋČŖ=Ģ?åūŅ1j|Īŧ”¸Č^5.§Ķ F’’E5‰ KČÎ)īR l™ëASģb[ĨMg‰ nŦhÅUŋbļãœdÕŽųǚ‚–‡>†’ÜdF °\˜S­ĮF뚋,ļ‹"603Ԉ.$x]،jm˛YCm,3KÔ{Ör+É6ŌÎNC }Į˜‘Ŗī ô4Ŧ2î .8ǟŊ2 Y Ī4ų'o7ˌŒÎh°(¨Á03 SƒŠDŧCˇƒ“E€ŗŠA֖ëHy>ųۚ•č{Ô7Ē ģ>ϟmÅēj`HhčdL+`į­9XĀ<94áMh’Lo§1ցĪ9¤i D~EÅB’\dАõĻČÂ8˞Ô\¨Āt œ7؟|aņŒúĶŊč$Ԋ;Ph¤ķJOQŽ)@â€[å§!ČæœRŒŠLüô1Ëâ‚ŧæ‚9ŊaĒJˆ†$T-Š;SFq@ 9ëAásIJzb€~\Ņ“ŒŌōāP>æ (äQÎ3HČhCŠČâģŒŌdėhR:P'Ĩ<0Ū7Ō“ķ@ › ÜIŽi™ÉúPĸíJsNíGjilS4ŒĩčzŌâ‘O͊~(5æž:R*āŌ˙é1Å/z †)3ž”áČæ€0)€ĀĮ8§ã"˜8sRŽ”Ō8ĻāĶÍ!â€(>” ŠBy  QĐŅւF@¤zĶ…%-0“8ŖéH9 œŌ“MčiO4f—Šn8Í/8 -š3ŽhęhKsŠSLۖÍ<ô¤tĨŊ4ä 8Ļ<â›ĩsĐsíKœŠ:@4!~”Į†6mÅ5(¤4ĀMŋ.1ÅG Ŧpšuš”5(94šæ™įķ§ÚD2G5!ˇFf8°D!\‘EĀ~åÎ܌úRTĨŒĨÚ°läôĢÜŌņÕĒē+hä ÜqRß#ŧ[QIîqPNI‚4ØŲĪĐ2kÉ<˛ŒA'Ĩ>YJlP@,3š­xKvã ÔjÍũŸ <ãŽiĀ˙ §'oAE‚ãū՟›Ë;3ŒÔ˛ËF ō­Ō ČūĖ8ôæĸ—'MLúŠV —L¨‘<ԋč§a–I‚@>™ĨĮ5›ķŧæ*ĖsÆ;Uģ2æŧ}éX ņ‘HĀ#8ĨéUW¸¸tF*Ģ@Ä6ß÷­_5Foˇ¸s–­XiŋzbA–s@ö¤ĄŽq( Œ2œ—§€Ie œ’zQ‹ĩ.Ŗ.zf ģwŽá$ÆTSŧØŽ€āƒ‘šģØRĶ7cŌ”˛įįĩ5åE`…€cڟžj ˆ_œpëŪ¤ˆƒwŪ 1ŠëH˛#œ)Ž´ŲQeųqUlWmÄĀtS°°(íÅžÔRŋÃJ  dät ĮzB9¨ŽŽ ¸Sŗ в—ˇ2ƒŽ;8ëIŽIĒöSŧČKã Ղy¤Žii ķKšC×"šp¤ riŲĻ3MĖ@–6ģ—‘@õæƒ÷ŠMhiīf” 21ڀiĮĻhãŌŽŪ´ûŲ5 8Ļc@<Đ@4„f”—Ķ÷ŠM"¯=éÄP:SHų…;Ĩ3ļM?æŪ—¯J6Đڐ.)pEņ@:ĶĪJjõĨÍ&8 đ)Ԍ8 ä‘@R)Œbš¤’sŌ€ړ4îÔÖÆ1HnÔā>ZČŖL§$͈¤C’iŨéRJN(-Å0šĪJUu*ŌžhŨM KGZ@0¯­&1Jrĩ‚(íGđûŌž”” ņ@&ôĨ)€ĸ“<Ⅴ?z€Ū—Ĩ ĄŊ¨ĨÅ Ĩī@ĨK@Q@Q@ĸ— R ŅI@Q@ \PŠ)h=())E īE-”bŠ(h¤Í€¤)i)i””Q@‚ƒE€Š(ĻEPŠŖwÍÜcŌ¯ŦöĨĨēšbüˆ{dR^˙ĒÜÔĶĮæEˇ?0éPyrĘÉŊp˜‰kI—Ú@¤Ũ'xÉ%{M¸Œ‰ŌU]Āu’%inZB ƒĶ4ļœÅ)îIÍ.žrŽž†›lvE('K§•ŠĄ‚.T7@5ģdsÚύŽOîOŽE$2­“l’@zÔØ™ÚīģᤠĨæÜ}ę’ß›įĒ{ˇN´…œāgéUĖ’M9HÛiĐNŌ#ƒ÷“­HÉņAĒÉyš 8œSå¸ ‘9ĪJ,ãĨ <ô¨­Ĩia O4õ‘K ĸĀI¸ãqéšp#=ž”Ų"Iry•Vā‘y3ր/Hi;Ōî€LāR2+˜M™#,¸âˆ]¤…\÷Ļļ.Ō¸ų})ąA{°>÷­,’ĶsSã`Ęw\ŲĻOÎv“œSŽ ķ } t?z;敝%ą’BØÛŪĨ… Įĩ?EŠŖčcũڇS ƃ#9ĢŸô!Ÿ–¨EK|¸Ûå'žjėr‰áŌĢXslŪš Ōi˙zAØMtšQŌŖFŲ Ā‘ÚžŦŖ°ԐĮR“JzŌ¨Á  Ûų¤e+°ĒįŠīVí3ä 튯ĒĢëV­ĪîĐz lEgšIîZ8ßh^Ļîŗ´Ät5^qåŨ…ˇ¤ ’Íē—õ†–įȡsœqUŦŒ[œžO%ãūā§R}*9KČÃĸŒRk‰$I〭Öĸk™ėGGZ–äh‚¨cīP‰~Ī8Y#PqL äRRäB}i´Ų%Xc,Ũ)āŠŠ¨œÂĒ?ˆĐđʲĻõüœÔV›D*ƒ¨ÔŊųĄ€w đj'Ž)Bģ`šwÁŪ1@įgž´™dPiĄû¤Ĩ!ž-ûKķOŦíA@ž< Ö´p>”wâœ:ŌŠ;š@/J9¨%Iep˙(ę*]ß­0 rô¤Å*Đh4­öĸėÂ(Ëmęh°‡€j.`@0ę J:PŧŠ^ôƒ­/zdRŠqéMÍ*‚(UÃJ .hŖ4ië@r(ÆzŅFhĨĪš¤< 0q@éG&Ž(Ē0)īqOŖ Z( —éOJ)hĸQ@Š( ĸŠ( ôĨ Ō))h4” )GZ((ĸŠNô´( ĸ–’€ƒGj &hŖRQL ĸŠ(Ph¤ Š(ĻfŒŅE=hĒ2Čī:FiĄĪ$Ōdœū5^ņĘÂ[ŠiÄ3FW?7ZĩŌ“ņ¨eŦŅķ…īI Í,Ž?„t =ēČÄō3×4j¨ģTSÖ5Ë~đAP!ÕÄo"á;õŠŗ@4†W(DÂB2@ä{ÔVĄ–é‹!Ēîh=iÜED" §ßĀn†’|é:úÕ˛ŠÃ 3õ¤*6íŠ.8Fl\Ž=ipžMNÖąí#īGžAˆL͏ ˰ųG8¨„RˆĒāõÍN° Ää{b‘Rqĩ q֋€’eocžœŌ\sôĨpíz¯´āqšdÍūžŦx  ĮĨ ûĩ^{¯.`›r§ŊY`{ŌĮü{ž}*Ŋŧâ8QXzÔ׌ŗZŽÄ}pzS@[šXĐ üƒŌŊ,öĒ—gũ /–pŪTE0Ø­ŅuōËŠČ™o07ŽqPBQ­¤*¸=ÁíE™Ú>ũ)X yÁ ā~42īFU8$U(Ķ́Ĩ$îíNģŲÉE€ĩ f8öŗdZ~jģÍ ŗ7bĸŠæf •7ĩõÅW’āų›"PÄ št7U$vāŅ`&¨§˜B„•$zĶä`Š–8Næu{V4n6‡CNÅGoÄO@´ī9áXI ĐQž(,ŖˆíH­‘Ķņ d8éMÎx4¤dT#–f¸hˇãŌ€/ãõĨ fǤ“ -ūeõŦ&˜ ´nÎ(Ú7g>´î´„tĨp$j˙yA>´ĒĄWhzR÷ĸ‘Ŧ(„í\f¤Æ(īA DÛ$ø-ž)ËlÉĨ=i$tw9§p*ũŒ !€=yŠĸ‰bMĢߊŠxa‘Č=)ĀÅ +ÁiåJŌnÎj+Čȑ%׀*úĶ4v†HéNā9IĀĪĨ8œr) ÷Ļį§ëH —Š%ĀQđŧՋp|ĩ 0@ŠŠéKÖ†ÄgĀ|‹‡ķN2r  mkđņ—Š"ޞ#ũå‘#TáF)Ü ą.ėd<ōUŗCį˜Œ}ëO怋Ô(ڋNė¸ģB§jĶu$‘ãę*ė‘Ŧ€Å$pFŖ4&e™mÕKįĨ>)aŊzRMĖģ§­,0ŦIĩOâBå@*Œ× 3oPƒŽ;ÕüsÍGɃۅîŧTėĄ—j#EU€>”ĀŖ¸‘eląDyg<ķRIo­šÍ*DąŽÔށ>JŽŲÅxû Ž: žâ!,{MV{I [<ˁĐ@Ã`¸=p) 2ˆ„FEJ!/måž3ڈ„ë…r6J`ArJNYԕ#¨íV­HōW" ‘gÆÍęŨ=ĒkXü˜‚ļs֐Ë#­e)a|åFO=kP7zʍŋĶË`ã4 eÛbÍ\`ķUãģ”îP€•Ģ ¤Õ&Ss.q‚x E“4†e.{RÅ>ųLl¸qQM3ŦËd.{šŽ˙Ën=ČĸÃ'{´I|ļ4čîQäŲ‚ŊU˜Ô­=˙ä&ŸJvԒ¤XŪyôĨIRUÜŦ0:ûU(r÷î_œtŠÚ8āŽBxŨڕ€•g‰Č Ü˙:Iüļ@˛ã•JW_ÜlRž2:Ôē€Z1āįX iĩPs…íNar*•Øo*22Tc"dęCm'č{Q`-Ž)¯¸î)2{Žiæå€ēąR*;=Ō@Y؜œsR_ĮĢS4ė}œsM "ōDÜHtŸ›F%c}0Œ…>ϧ†Sį4R˜t÷Ą ,cŊŒūTĒ8¤y§”b“v3ŽM Ā€M!;yôŦéGž@āģĨ_¸Ą`ŊqU`nĸ ßSŠ•\0Č9Ŋg[HžCŖ}˙CVlQŌ"unGZēŅyą•~„S@[ Ąķs‡<Ԗs‘ y‡„īOˈcB6ûĶāļTB¤g=sE,Ë&ų”įzԖr'Ģ“‘ɧ]ÛƒlH2:bŸo—n¨V#“CģēĖûä'ŋ­-” 1‡nu>´Í­ĨŒlÄt"Ÿg Zißj`^įiį vĒ3É?Û>LíÍ^Ą'ŠŠęĖÔŖTØ@äžkLYšŖ Č3Ԛė\DĸÕ]4–žVĢqĐ ŧäU==J\H¤â‹I ]O¯´{Vo2ę9Į kLô1‘O*›Û8īŠhŧŖ/ƒĩzņRʁЊčEfBä#[w-E€ŅITŪ§zjÜÂ[hqšƒPM˛"p;⋨Ņ,Õ@#Ņ` KJާ=jĖ8XSđâÅpyâ‹{Œg#ZBÁz‘T&_ø—ŖsŠ|‹ŋORIČĸĀ^āŽĸNEf*7Ø|Ōí¸t攙 §ž\îģQ`4č>ÕIîŠYŦYĒ34‘yL\ą~ĸ‹ 3ŽhÉĪĩUžáÄžZ2ŠÆNjkRí\síH Ŋ*´7ڕBüęÉöĒŠtÆčÂëC@ Š cĨWžía˜FĘNFiVé  O#4`Ž3H(9¤a”#ž('Ŋ_j†b:⟠ÂM÷rĄŦëY–ÚWį“ŪĨ´Fk—}ÃŌ„iGCHŧŌwR'ZJĸ€ (ĨÅQE´” Z(¤į4ę( P!i„sO4”‚–Š) (ĸŠ`QEQE u ĸŠ 4õ ĐiE&(ĸŠ@R´‚–˜ÂŠ( Ō Z(4”QLŒŌ”‚€4fƒGj-Ĩ4tĨ=(ĸ“4´´RfŒĐŅE Š*™5!TôäĐÁ•‡QUmá’Xļ6ąĸØX“’M&å7Ŧ¯Ķļjúæ“ė3UācįČ ’ƒĨIs!†-ĀdŌnŊižZąäI ‰Y¸$t¤ša aڀ ģBąĸōËS.By‘l ķÚŽ‚%$d7­0C…Ĩp°“Cį"‚pGB*!hRDpđëV¨÷4ÄA4%dCķŠ"ŽQ¸ŗeˆÆ*edoēA§:RļiDė’fŽ“ÅE>YfÉf=ÍÔŌ‹œ…ƒĒI8Ē6EK˓ÁéšŋˇvsČô¨ÚÖ&ū>”Ņy‚%įË^næozzZ¤OšüčkoŪ™Ęîę)ÜDv?ëĻúĶ"^îU=*kxf' Ķaˇ’;“&~Rh—+åų0Œí<ŌÜĒÛÉ Æx8ŠnáiB:}å=錞Nč]6ĒrM2äē\FUŽĩ>FhrەŊi—lEĖ_Ĩ§xÔõ  $ŧá îiĐNÍ+ÆÄŊĮz‰—Ęē¸ĘŠą‘É!ō͏¤Ą˛*´×f)ļ˜ÎCV8Ē7Ŗ1wĀĄ ¸gEuSüC"–i’!ķ“Đ Š|~hTzŠI‰kČÆ@ãŒŅaã™%$)ÁŠDą–8qĮZŠ(LwEË žÂ ´@ķĖÍČņE†_V šihđC0ÍTŗ8Yųā(ŗO2wä’yĸĀ.ŸŒËĪņv̤ú*†ŸÁīSfVCæeēŒh@\ŗ5ˆ$ØÎjwˇ2y¤míëE†_$Iā暌˛ ĄČĒąĘĶŲš'æĻéęû3ģäĪJ,Ū™¤\ļqN#wŌ…\R¤HĶē1Č^•o­Q´Čē›=sS=Ķ,Œ"Bõ§`,LsI Ģ<{ÅIHOZqã=Ј,M4]BA;úPŖ­4ȅöīôĨ%BnĪČ5ZŌš¤r @A9Ĩ(8õŌ“Ę€ŠQÆM7ôŖĻ(IäR5R´,nĨ‰ņšŧFhĸœ0GJaR†+žh Æ*¤Ī*ČĄƒÔՌž(ØÍ1āŠC–@iĀķN ¤j‹ĩFE-ĒČû*ŪÕ6q@9ĸāC ĒÂIS’{š˜ƒĮĩ.i4hpĖրF{Ô hëÎČ>Õ(–28uüéáƒsڋ€ËˆxŠĀÕFˇžEX™‡–ϝn4qéEÄQŧˇ‘ĸTŒd->hK0¤|Â­Ņš.Tž|–Â?(€ĩ3‰ž!ŨĶĄšJ.qķˆ‹ËlôĻŗˇØ<ŋ-éŌ´épéNã3fC-‚¯QSG<Ë]šn˜ĮJš´câš#@Ų ĸâ)]Ĩ™ˇŽŖŠīSiĖÍœ LņG#eĐęięĒĒ€ė)ãY™SĢÔ+L€EVpŦ‚@ėúЀĢvöŒY†hŧ ßEíVf´ŽYCļsLk2‡ sõ§pâk¤ˆã%(†ârO™PsWã˜ČĮj.†gCŧWy9ĮÛVxŽL9%\[f‰™Ą|ę :a—bÛ­*:ާõĨoŊToā™ĨV$z ĩqâ( RĐ0š)i  –EQE´Q@ƒ´™Ŗ4QERf–Š ĨĸŠ(RŌ ´PQERR⒀E-”RdŅH b–E1…Q@ŠJ(ĸŠ`Ĩ4RŌb€GjB@äô]fķ.ļŠĘ@‹<â”ôĮ‘Pdž´Ēá×#?JĨÔģ˛HĒ÷ÃÉ’pi §Ļ–āˇJšÅgÛĖį-…QīWÁū.ƓĀqĶĨ*œōĖ—JĒØVéOIf3”f ĢŪ†Yí‘Í6MÂ2TķŒÔi%•Ö^ϟŪt.q†Pr(° ´™ĻB[ąíVESĶÎØžĖjdšGŒ¸ÎZ—ž)ÕKŽđß/Ŋ*Í:@ųĢØÁȤ¨mÁF~”\+d‘éKœOjEĪŊ ĄR2¤2•ĄęnAĻ´¯"LA ĮÖŽEq1e&˜Ö–$¯^´î"-4ūčũzUĀrH¨aˇXX”īSFM&1¸á…P˛…eķCõyՙTā‘Ö ´ļxå˛ 0vqöjčÕLb$íÍŽÚ)-TpŊęÍē˜­ÂšäUK{f>LĒsëRęD‹n8憄ZĘôœĮiÁ"¨ÁnÛŖ“yÆ9æ’áHķå˙tE†_ŖĄæĢZ;ÍhpŪĩ ´ŗĖΛžīsJĀ_Í-S´ĨŪ¯Õ)~ŌīŧĀ…ëš,ĸp)W$U>ĐÍkæėųŗŒP—.’ĸH 銖ægˆĻÔÜ æĨĪŒUyŽüŠDl§Ą§Īp! InÔėģ4āA5 ŦŠHã×=Š‹uãŒãĻidP}(SĀ=)Ō@Ķ"ŠÃ= 2xĒĒņPæ•dˇčäIrœŠŽcSeĶøj=4âØä÷õ§`4);Ҝ-'Qš@-sJ@ëIJ(4””´PŠ)- ZJ3@ EPEPEŠ(§Š) ĐŅE¸  (¤⒗ĩ%4QŠ(RZC@ Aĸ‚((ĸŠ@RĨ”´ÆQE’”ŌPES(ĸŠB đzĩJÜvĀtÕĶĐÕ+b>ĐüöĒBd’ŪFŊąšs9€„S_AOĩ5Žo—ØsN "iJ㑎iĐF`ŒŗžM&#šYëMĩc x˜ž*@t’¸%ŅÃ(ę*xäËŪĒ´F%‘ĪĻ1RŲŠ ŸzleƒIKÔfАuĨčhcš\JCŒĶ4õ Ĩ1ŖYĢt4ō(€kmĮŊ6â3,EGŠæƒÖ‹ˆl)åÁŗž;Uh`•.ˇÅ\í@Î ;ŽÁ‘¸ĶL1’X É§ŒbƒÅ…ĩš6õātĢũé@ĄŽ“Ô ˇĘL*ÃĒž´ļЈ ¯V6†M¤dP S¸Šv„G$¨Į9ĻÛgžÜÕŠaÁČõŖÉ_+`āwŊĄ?f“ô[|ļrÜÔŅ@ąžiŸd!HōžÔŽ-W6mžsLˇMœŒG=ĒÄP´ŧR?â•>įŊ/zOâÍ-&9 Îœi¤sNÅ ¤t)HČρŠMˆB€hxcå”KŠ^(Šo6å@­G%Ŧ/'˜ĘwTų4™õĸā@ö‘HûČ9ö§KmĀnÎGjPh‹ˆŽ*šį֘,—Í2!ĒĮjQq•ËįķCŸzļ™Į'íĐÜŽÖÜIÁ€&š¸ ų8œfĢLĶ#;÷c֗‘F Û×Ķg،.=@>}i÷(d`Qŋxƒ54ļČûËũzQ%cš\Ģb‹^ KZJHôĀōŲ(VPzš ˛Ã^ģē“Pũ…—åYp‡ĩXˆmÆöČQɧĢ̌ŠČö¨§ˇķ-ŧĨnŨiļVíeYÉíHd§;ąTuģ­\ô5FūŪi™v¯„ę?Đ˙ā5[O‰^Ũō;žjaįũ‘WËųą‚*+ežŪ&"Aė P…˛œ°‘“´ņWW§ÖĢY[´AÆÎqQC,˙l(AŲH Ņž)ĮīU+Šįˇqå¯ËŒ“VaËšž´€˜RšAž´( RĐ0ĸŠ(ĨÅ Ĩ Aڊ( Š( aڌQE&(@ “´´J;Ņ@ë@Ļ’%-‰HE-”„ŌŌPQIE )ŌŌfLbŅEJZJ(4QLĸŠ(ϐ6ā }î")â/†C‡Ø (Åä9cSŌž”\E?%ãwdŨKk…ZI8ĢTuČ= ƒÜŦ’‚ĘJƒŌŦÚIæ+vāSšŪ'()ŅFą.Ĩ €ü*d’6ÂÆY}EM@üŠ Ž.ˆûŅ8§ ØORGÔTؤ*§øGåLÄØÄ€“OÁÍFmâ$€éR)i@>”U`—JÄĢŠր,wĨĒûî×Ŧaž†“íR¯Ū€ū€ŗĐPWI,›6}ę|RŅCsJp œĶDˆŨ~tP9Ą†áNĮãF1@ U RŽ)qH(¯Đœfĸ‚q1*ŠZœņTmX æÉĮ44‚UbBœã­8´žŖÖŖ†8ÆL|äŌ\ņŠ ú QŦČd1˙JzSWō§v¤P( )z÷¨TĘg!‡ÉÚĨ#€ˆ[qEĪ­6H’FË '֞­+ÛG¸>ŪEJŪÔā8¤=iÜ‘š0FsPfU*’•ĩXcŽMGÄr>Ôo›¸ Š1 aTvëU#ˇ™.  Ģį§ÖŒņ@† …Š3•÷Å&híĪ Dû§4  wOĨ!Å<jUáNzŅ×c –Ĩaķ ) ķրÆG41HĀĶą@Ļž{S‡Jn⎴Ķū˛”å˜\e¨iM‘šņBôĄąŠü´ėņIŪ‘Gg‘@ N9ĨŨMŧ)A¨-Š^œŌ0RŸē( ĨŒŌmŖĸĐ’: B3C4áŌ€xŖîĐøÛB @ >픎Ô@ E.Ú ņH€qA¤P@Ŗ9äSq@Ōdâ•Ië@ĸ–õ Ļą;iI¤ĪČi+3íMHĸ-ŋ`ŨëNv•:SŨéi;Phh¤Í§¤Š֚Ŗ<šīyëEPgR0Ļ€sÍIͤn'lĐąF¤'å¤ã4mÂ<ąR9õ§$~Z…ëJ4nÁÅ;ĩčŖ4 ^ôR Z(ĨÅ%QEQEQJ%Š\Pi)¤´QGj)i-’–ŌĸŠ % (”Ph Å´R†§Í˛AŅÜ} '؜}ŲÛõb•xĻhãæ}ËVi­ TmP<“æŽ°Ę2:Õh­^"Ä8;Š bYåĄ”7LšŽČ"]ŧņRÅąB뜱4Č"š8qķuÄ6؁—ã¯Ŋ5"&øŽãõ§ i'ŧŊĨ~ņ¤ÜaŊg*pzb€%–F3Ŧļ94č%e˜Á!Ëuĸ•ŧģÁ+}Æ‘°–øČŋuGZ,đÎī;ÆGŨ¨Íî%d1œŽÔËgÍė¤÷éI ŋ‘÷ĸĀZķ×Éķô‰pŽø Š=3Ū Ô3ˆĮđįš|–ėĖ’Ę8Ĩ`-ŒŌŠb­?8Ō’"Ž{U(qöį+´ë_ßÜJdį4€ˇŌz  /žŸJNøĒ>y’áķ’Ŗ %“ŋĖŽ3Æj@´4˗xâ.˜â¤īQŨôgÔZ;‰åˆē  TÖŌ™ĸ%†Ē–“4Pđ§ny5y€Žegš`(np)ũjŒW,vŸ,áŽ3SŊĪ—!EŒą4X ÎA “šbJ%MęԘ/"lōAŠ79Ŗ>ĩJ&RPįĮ¸‰~R˙7Ō€'SsHQB‘ŗváŒuĻE"ģ° Kړ8Ĩ=)¤`f€œŠgņS”‚)„€ø Ō‘IK@éMœĶ›šu'J\PhÍ.8ÁŖĩ€ qŠ\qŠCԐäа'”Š@ŲäRzB §¨Â⛚p4‡­!8¤ŌP„‘A8§ 94u8 Ž”ĶąK@ _ēE*ä-)â@P>í.i("Œ|”¤ P=(îŌŽ”¸Ž”ƒĨ"¸æŽüPM*ũãBHŖ4 b€Ô<ĶēŒSThJJ;ShOJ撁Á sÅ4R‘šJîP˜ÛKŽ)LP!W­6L)ʸæ™!†hOáĨ@ĮJS@ÄĨ”ŖŠZ(ĸQ@Q@ (&ŒŅ@ KF( Š( Š)hĸŠ)QE˜ AĸŠ@'jÅP0 ŅA ĸŠ)ž)i)iŒ3Fhĸ€ (Ļ€ƒE&i€Rf”ŌPJN%œJ Aw¤vŖŋZZ;Đ=hÁÍ斌Q@  ÁÍ;5É2Ą°O.yĒžc°#”Ō[Vš5ûĒ*ÁlqœU æFã¯ZŧAĪ"‡¸ĨÜr ƒčjX¤Y3´ôĒŽūEŲ=/1ZģŽ¤f€'.Ŋ7 ÔāyąČÅD¨ŋb2\Ņ<†K'¯XEČ"QORâGŽŨJYĻ’8â|į<,2ÕU{‹‡Ž5p Žų¤ûY@ §Ęzb‹fUÅĮ"Ĩ’t‹ŗ“ØQ`$ĻŽ)"•eRTũGĨ;€ošžfÂĀJxôÅ@V'”˛ā¸Š—ĻOZSԚM8Ķæ€ŒŅžiÄq=@&‘âķUFßJO"a)V5Q€™ ÂxƒƤ=9ĻBÚۂķMûaÃ.AúÔ úSōvŌ¸†KËĶøT"Õō HHYâīEÆ"ž1NÍ7Ŋ-*¤‚fhŨ‰¨•%Šäģ&CuÅhh=ŠÜ lk7˜¨YZŸ É!,ë´gV‡Ō†4Bx¨.Mģũ8ŠĀ¤hÔŽŌ2) §ĻŅē1ã5jčíˇ`:bœ#DåT úPč˛)V˜Šö!~Î1‚E •äypĒ6ŒfĻŽ„‹€i ĒfÉē͏ ĶŋãŨ‡Ą4ËĻI‰ĮZš;e˜Ģ{TqŲl,VCÍ$䩜¯­>Î14¸Œ“ÖŸ“DIŪ=i FH„Œ`2åL6ņÄ9=sN1IæÆč›@āûĶŪԛuBrã‘@[†dŨ…UęisĸÔ7ŧƒŗŠ3ōš­z…íÆĖį98¤2co,`IŧˇÚ¤Ô Æņ˛62zT.ûĻXČ“ÅMɉûšĄ u$°ŦnƒÁyNåúfŗ/ĻY{AÚ95Ĩ+F¤t"ĀŽ}ĒĩÍÃ[•;2§­[ČéTuCû¤īŌ’˙mÚĒ΅Uē_ļ)pĨĐúÔ7„}–1Ô*uĶ`ÕVĖĶ$kĪSĐS"$mŖ*{fĢLÛâ$pio˛—00M+qæIBãpĻŗŽđ7ĨTžˆ)Y€é֝—qpŽ@­Ķ‘ËRŦ‹ NjĶ4—Ē€dÔûKy’āŗ !íš,Ū Č9üi˂3YÖŅ .åRNĐsŒĶė‰rĮ“´tX ؤĀčfÅ)ôõ¤ “,ŗˆ0Ú*Í´žbāä2điŽ%ûS|áWŠļ3UōAëNĀZ'žŧҜSTĖŗHHČڝ¨ļš–WŪGČ:š,Ōr:P:UĩJęō&Ũ ôĢVĶyЇĮ=é-š@sÅ/J@)T3\-ē†~†¤$æŠjX0Zie§Ũ™ŨíM´ēûFrģH¤´˙EúU[7— įu;Ĩë@¨ÖE|•9Š“Ĩ 21HxÕäĐŗKŸ–Ķdqe›   ąšNՙí6ĸ¤d/Ĩ_¸s.㨠#ך^ÕBŨLÖæS!ŨõŠlĻiaį’3@¨ĒzŒ­@Ŗa‰ÅOķ ī$ļ3ÍMž:Đ*ƒM<„´rlv-ĩëŒ2õƒë@F)ŒĄēŠpéI@…Š^ô”w ĸŠ( ZAK@‚Š1EQEQK@Q@ĸŠ(´Q@Q@%- EP04”Ļ’€ (4†€ )(¤2…@ĻŅE€ƒE%˜Ĩ Ķ))hŽY<´'Ô6l\ČĮ=jÃā#qÚĢØōîj1Cŧŗ°VĀZtR‰Ž~aÖĸļ8iŊ%Ģ|ŌŅa%a Ãæ'ŠÄƒ`f;sU ¨PÍG­NČ&TūíJ’#~*ŒĘ#ž=ƒëŠŧ3IŒŠ(<ŅH›riØâ“ĩ;€ČâHؕšŅڐö¤7p} =—teŒT†ĪjwL¤É„&T÷ĸå-– „ûÕĘ(¸į>eĸņČ<ĶneFHĀ=&¯aôĻŖ#åExĀÛ.=ŠnH1žõa Ķk*7ĩģ=č¸]ĮÜ vÅ!õį§LԆÔyÁ9ô˛BĖâD8aŪĀ[x^)œ“÷ģUŒyéPAFÅŨ÷1ŠYÆīHe4ííŽ3Å!ץˆdĐąĖˇ>a^¸•nŧÁF1LCĸfKĶâĘGz´Î¨pÄ險eŧŪPāņÍZžÖ9ŽãœúŠ,1îá`X`Žĩæ< PĄīVžöG?Z!hžÅĩđƒBû4E„llᚰ~íSĶÔŦLO9a2āqĀÍZbœ)\e("ž)Ū@ĒC{Ķ Žh¯ ˛pūõ|^(¸ Ũ:SIË _Ĩ&h†Ōˇ2yŠHoģŠ[/Ũ4ŠĘAcÅ^ão<Ō`x暟 !åRÛ=:Ո<“Įd‘ÖĢÁ"Û´Ģ6rO\f¤ĶTåÛRxĻVÂãtpAīŪŽÂčļ…Ņg#Ď~dëN ģ6āmô¤kkĩ™ĘíÁĢcŪĸŽÚ(œ˛. ŠGZCj†¨ [­h¯sj.qšˆԚ–˜ûˇ\j 0‚ōœrZŦĮmåÄcH>ÕXyD˛ČC{P"(~[ųQ~é5 ˛ ųK Ū• 6ĸ,œ–fęMBÖ2ą(o—<Đ2ëR¨âĒßC#Ļõ} uæ–ŝ­”ˇZ@ZÅdbŠV$)*2GjĘF˙‰¯ĐņZS˙wÖW—8ģķŒG¯JĶ™<ûr§å,8öĻÄfŦ2„i-ōbô5vÂDxļĸíÚy¨bžKXŧ™"f#€E>ŌŲÄr–;ZCųP^âG^~TäÔļ4°–'ŋV{7†ŨÛÍ$šv—ōËî>˜  $cČFÜ3ģmCb¨÷-#ļ–hÃŽpi%ŠZQE–ŒQ@‚Š(QKF()hĸ€ (ĸ€ ;ŅGzZ(ŖĩQIšZ J(ĸĀŌRšJ)1KE%QHfpĨ‚–˜ EPESĸŠ((Ĩ4”ŠrÁ œņQYîE!Ԏj×zFϘ2ŸUŽr(ˇRļîË÷J´ņĢFMJŒ ."ą.ļMŋƒØRŖ˜í”m횞H–LÉĮjŽH‹ĻTtíL åÖ6I*ßŪíZ ‚3ëŌ¨}žI™wĒ; ējāž”˜=¨Čõ!<ĩ^[UvÎâ) ĩÁhP[HŋvcøŌnŗ‘&jŦĶHŨ*ĩģN%Û(ČĢ ÷j@2HĨ3M,<ž”ČŽ"`~|}hA֝Ž)Ķ9Ü1õ§ņŽš bŽÔáŌ€ŒShīJA )hÚ€¨ĻãšpÅ7J:t¨æPbcČĀíQØ1hy$Ÿz`XĀĨ\{R8`‡oZd>aLČ9Í+€ü)žDlI*)ãĐQƒEĮaí\¨ĸĩXœČ3“Sö恜Qp8^E Ļ •œ¨ ‘ÔSÁâÍ5Ÿg4ŊGJj9=é͌Đqš(}:Rņģ­&9 Žhæ¤~Šh14ú)­æ€Ÿ›ZwņS•8§ƒ@ ’E4š€1“Bį9 ƒÎ)MFšÜM<œPrž”Žy§“Í#‘Å.iAĪ)3@šœy4ŅÁ4Ģր ķA#”o÷Đ­ F>U ô§i įŠEujˇJ2pÃĻ)ÖđŦ\ņ×5"āŽ´´ ZZ(QE´´Q@„4Qš3@ E%-QE´Rf€ ŅEf”QE”´@ Ĩ4”SĸŠ)™ ŅŠ `(ĸƒ@ ER8RŌ QLbŅEP(ĸ˜A@ EP" ‰„JG;ˆâ’ŅËE’rsŪ–đ=é-8ˇ@)Ÿ2E-Ž´ô:nüęŊŸ-/šĸב*ĀÍÎå#9§ųU’<‹€:į5v4Ā<Š@;ühÆj´%žéųųGk40i¤=iÔR)hĸ€OQAåh¤Ļy\šh‚2§1­?gŠ€[DAqøŌ U‡`~ĩ`iOŌ€ ‚ˆ’Ώ{Յ9Ϝ‘J8 JX°j/6äc0įéSœ†Í;4€¯ö˛ŋz čŋˆ0ü*ĪjäøS8§I(zSúŠjĒ/ŨP3N< @2LyL=ĒĨŗ˛Zŗ.>SŪ§™ļÂĮČÅVˆfĀõĒ[ķË[yˆ84‰>ë5‡Nĩ]ŽŨ9}M>&AcĩģņE„KŲoēpFA¨#ĶĄÎŠáPžå=)aŋ–‹ šY–6Z•$G]ĘĀã­SæŋpãØR Ų~Č>éŠVa-ėņí,zāԀŽ}Ē­âqÛQĐzS¸‹qsgŌ•—r‘ę)–ęŅĮĩ›u:PÆ&Û÷ąÅHˏ!ķDÎj–rŅā$z‘EŧSC.XpzÔבŗ2H€ezÕŽVã÷jÁ1ĐÔq92d(ÛēU¨äšR~BŖęŗë†ˆųšę-đ&hÎy8nO5a[ĻMT¸Z'l¸ÍK<å„EIUbrhŅK šō¤9ã9Ĩ{‡[Ą^CUŅ”_) JãŠ§ČĄuf?)īE‚ä‹pßhō™I%ęÅ)Œ¯NâĄV¨{ IÔ}š~ŧŅ`šj;ČŨ°@Z#ēY\ŨОô’ˆĄˇ-ŗ!J­;7™T.1ŠVÅåĪ–čĒ~ĩ+ĩ^ûĄČęÔˇø[p¸Į4XeĩPmĀ^ÔĢ"7 āšŠrJ[B đØÍ-âŦQFŅ¤2;Ņ`.äg◠wĒWä˜â Äâ™w‘n ŨŸZ,….)‘’PéOŠ@ SP’X6”lVōrxĒZĄũÜZ–U/hXą.i4ōZܒIįŊKô?ø V˛Yؔl`š`]lė;O͎*+a2ŖyĮ-šŽ—’ŨØcrg4CpÍhōŋcڕ€’ā4–W*Wž*-9ÚH˜ąÎ 44ōZ—B°éŠ]3ũCzæŸ@.Қ â¤ę)´š ”úĶsbš$AOŠUeNk>Öq βŒ{ÔļJZæG@|ŗE€ž(Ąpjŧ—‘F圊@N  ŨDĖ7&žō$Cįp 0œrj4¸ŽGØ­ĪĨ:)NPƒTcuSŽŋʀ4(iMPŠ Į\QUåˇy'Yđ$PųæŪ›Ū”dšRhÍi1Î(4UvģMåQYĘõÅ:+„›…Č#¨=¨~ԀP: (ŖQ@ (ašQԃ@ŖęAK@ (¤Ĩ Bž”h q@Rf€Š;Q@/jJ^ԙĸŠ(´Q@Q@Q@Ėdô €Gz ÔQE š(ŖĩÍ™âŒĐš)3E!™ôĸ’–˜ EPESĸŠ(4”Q@†I  $ØSmå2Į¸ŠŽõWasÔt§Zqn PyŅԙ]ģãĩTļųüÖ#$œ [f-ŠįĸĀY 0#îĩGˑŖDN>ĩ4ä¤JAæ€'Ā<žž´îŊꙚGV2qŽsW9īH#"Ō—ĩĨ(>ôR Z.mPۀ§v¤Ŗĩ ÔH¸'J¯ö@§ä‘ÖŦŠZŽ-åvsøĐRé+}j~ôŊŠÜ iÉa(tÅOMĪ4Ŗ­ GĄb Ō ‘ ČúŠŗHUOđĘ€"ûL'ūZ xš2>úĐŅFzĸūUYÂßÏĨ0'R8 ĶĒ X3´ž}j\Ō”oĄŦÛI–%rÜûVŒ§1öĒ*˛ ŋ Ĩ°•VyŨn~” ¨Nî â8 jã°ZŌ–Õw‡ ŌÛJŠpXfœ 09RFˆÉ&Đ]€Áö§YœŲ{f‹´0ycëJx÷ŦëXËÛĘI'͚š ™l™Ī%h°Ët•J5™ ĢÄįoĩK4’R$8b2OĨ+c 2‹€6üž´ØätœÁ!ÜqibžéĄ*>ĸ€ąAĒŌ]Íą7#5a2ƒ‚3ëH›b–=$3¤ŲØsZt€yOôĒZfĘ} ;xûb‘˛WŠĄö‰Ü 8#ĩI-ÄÂeFyĸšdnIr€ČnôãHb vi1Īĩ(äq@ n´Ķ8ĻųŅ™ŧ°~jŽ)€€‚=Š8ÅEvZ;vtāŠuš2@ŦOQ@e ¸#" ŽãŌƒŠB ĄåtĻIK÷†jAKەöHƒ‚=é$´G“yāՒ3F9ĸāA$!áō˜ÔmdĨ~f%‡CVč\d[cL:ô&™5´“B°-žĻ­ĐY@ä€{ ."ģ[™-Ö7#rô5Ã4ęÔS×Ö¯q‚(Zwė2HˆąŒíæ™tŗÍ/–x毎´Ŋ菊í#Įh[n”Ûždbã‘VˆsÍ&Ĩ4MRԁdAĪ^ÕĄI€;RHğEĮJ­e0Š+N+H` hĀ#•1f;Yœ‚į[bK cū.¸­Ēx##Ō€ˆ§åP>”\ PÎĸČĄ'xÅaS)8$ôĢžZ Ŗ&‘ar ڀ+›Ā.ŧ‡Ķ5%ÅÂÛ Ū ÍIäF_Ė(7zĶ.‘Z o=¨ĐcÖE•—Ą§šÚŒ}EmŽSØTÄf€3-ĄaÚCÎp=Š-™íîŧ ĮhÚ˛ģ4/ŗ=i`ĩōÜģļį4\Dę8ĒZ„#˨Ášŧ4’ÅæBÉëHe ]ŗÎŌ€0ĄrúŽqŽĢ–ÆŪ6RA9ĨšŨ™–Dl:÷§qˇîu0Ž:Rų §ôŠŖˇs(šg”pJ‰íî>Ųį¨ü(ë}ÜŌōVĢŪųŋg^wwÅ-¯˜mÔIŪô†NËÍg< Ēí=EhãåÅeĘ%7ÁĖgõš{ģ‰RxÕ CÍ<ÆŽÁƒÔ7(cšų#¯J/eW¸”jv¤Ōĸ° ÁOŊ(uēĀũ*m"šÚīœãŒRCf–ėYY !”’Cetū`✿ĨĩO6éĻC„ĪJm°[™Ĩķ†H8Ō‘c6炯¤ínc┠ŠkˆíÔ8Í:)VXïCHd˜¤íKGjQԊâ—Pf–ŒQ@Š(ŠJ(Rb–Š;QKI@3E@Š-A@ EPEPi¤ŒS%­QH"Š( aŠJZBhÅ™ĸ▐RĶ ZAK@QLƒE”†Š;P"Ĩņįš’Û›P=E>HRB7  5 Ŋ*€­jH‚\u‹f nėĮŒĶŪ ›Ë# ÔSŧ€-ŧžô\Dr*ũ˜I#ũÛāR õ¨Ų$h„;6ZYãÂF2@^(YŪ l0n˜Ģƒ8Ŧųˆ–HÕ9 Ū¯ĸáhcBŌõĻ“ōšŦ.ŲN L}ÅM€ˇ@Ē˙lNāÂ¤[˜Oņâ€%4”‹"9X^Ũh Z3֓<Đ "KEÍ.)1@ žqKŪ›Ū€y bšJ^´Đs@‡@y Đ4’"Čģ[8¨ãļŽ&ܙëRsMi8f˜ ,fT+ģĻÛۘ]ûíŠ~đˇjHæYIÚzP?f3ípēĶā‰ĸ…ŖāúTāâŠWRåŠŪDÆI§A 7Ž@A5exĄŗ´‘ÉĀ­ūT%0Y×Ļ)¯˜îc™¸ 9ĸÜo)ĩOj¸T6CER,ŗß̧*ŊŰ:ƒ°éV•U8@öĻ‹xŧĀáp}¨¸ėU™GĪ4/ŽĖĩrŨˇÄŦz‘Lk8Yŗ‚3ך˜(PFĄ€˛s} QĶ:J=Å]qš įĒÖö­š=h¸5¯]¯…<‘D–åĻYCāŽ•g¯Zi¤ŒŅÛ4n´JöRވ ëDNVëbî(}i÷pŗ•âE,3I+€#*ŖŽiF:‹ û֏aÍgJĪ ķ>Üîč*úœ¨$c"†"˙øķzH_eŠļ3ĐQ~ŅXTK1K(yčhCˇLŦ‚ULUĸ3Y— °ļāŪ¸­AĐĶ×I zRĮp’;(ā¯Z­¨ ËžhÕ`’EbŊ¨ÆęãqāāžÕ#: ĐÕh^["ĒWФŧM–‘)mÄÍđ’2pSŽÉãk>î4ŠŪ6Aķg­Os‡É´qëE„Zlm Ķ&%)Ŋ°W§5JԈīö!;)ú†Vx˜ddŌs@JõöÉũÛ1ÉøI[G1ļū2(Ö9ëF=ꅴ‚FR%!ģŠĢĖĄåP:ĐƒŌ“õĒö“ŧņ¸8Ū*('æx°2§Ŋ^Æ:ŌUkk†’gĀ})Ļáä‘Ö>^æ€-Ž{ŅÚĒÁwēw\ëQ‹šbRƒa  ŊésÍ5He :wzlą ŌĸˇšYÉØ$ÜÄ˙JŖĨtzšh ĸšŨ˜\Џ fŗõ3…É"­Įr­!”ŖƋ›Ŋ ņMÅ!ŽāŌ´ƒ­:€{œQ¸gįŌĸšad‚~•JŌF–ōGĩ:œšv<ķM(Ŧ9QųSZ3@ :RæĒÅv$ĸÚF;Րhŧ–ˆōyˆÅ î;ŌĮląžōK?ŠŠúQր+Ũ[-ʀĮwŠ ˆE č*J(¸ĨŖ§5\Å$›|Ū”0Ĩ¤3KœĐEQ@ŠP(qE¨ AE¸ ĸŠ(ĸŠ( QE)¤RĐE’€ŠJ3@ IKA ĸŠ) J)M! ĸŠ(ÛEPpĨ¤´ - Ĩ4QIFi€´™ĸŠ(íE¨9Ļ‚•9Û2Åō÷ëIhvÛøĶqÁŖØĒŠēey7ˇĻ*O0ÉjYOĖKŽiqŽ=j›NÂ8Õ .zņV^O.,ˇŪŖQ tāxĒÂáÃ¨éÍY^” CšQ͚S@ū9ĐĒä/jģŸ|ŌôĨp)ĖŌųâ.„c”Čhā‘•1“ÂÕā}éx&‹œW˚#e\˜âœīū• ‘˜ĶxpHĨĪAųQp(i§kHŦÉČâ’ÕÕo%fČĪ+E°i›W=;BҁŋįƒĮJuŠōnfW gĻjáE!F}iäeúŅp+\˛Ío*ÄËԎôČÅģÚŽöĮļjōF¨ģT;ZˆYĀ\>Îhí,pÛįhSĄ•fMëœf‰aIĸ1ˇ I )mN”†,ŋęœ{Vfœ¯š‚äķZr t*IúTÚ$,Y })Ļ „¸§ÍéŠeĐÅúė9æ­}Ž"ۈ$úæ–+xã“p\Ÿz.!ŌJē͎ŽŨÄá}j ›QpĀ–ÛŠ‘í÷Ûųa¸ĮZCĢō‡"¤ĒZ|eāåsÅ^aŠk`Ž@âŗtņ›ŠM_œˇ”v šÍ´Y­æËÄØn)ƒ-^ČŠBģ‹*Ŧ–Ō[(”ØÕۋ=xûÑQËö‰!ōŒx §qE2ĩēČ́ŠŖ4¤n|ŒšíWÅĒ5ēFã zU+Ë]˛ezb’B) ,vŽĩ^(ŲíŽ&ÁĀ*ĀĸØÆ ­û,N†6.xČéBK†2HrTõĢ‹ÖŠiÖė…Æ § Öûg”S8ĄŒŧE#¨ĮĐRäīTîæ—sB‘qI^ɖ9<ĮČÜVĻ:V#Čâé0‡)ĀZŲ‰™ã ë‚{S`8ôĒÂö/7ËÃnÍYŦíN=Ž“¯¤RÚÜŖKåķģÜRÉq-ĩÎ WĶÔHZcÉĪĶ#ųĩ9āqšvės$§ä9Įj·Q¸ÅĖSQeĪS‚)ÉÆŽØĻ#PtĸsNŠĸƒIE–€( RQš- ŽÔ (ĸŠRšJZ)( ŖQ@))h īJh¤ Š(¤04†–šh4™Å-%-Q@Ėú(ĸ€Š(ĻQJi(ĸŠ(ĸŠ +ŪĮˇÖ›řúSî"’Eڝ1Dq1ˇØÜ dvŸņėô–ĮũĮŊ"1‚ŒŠÉčiÂûį­üȑd8+ItāˆHīÍ6GfXÔåûĶĻRŠ ?Ã@ĒŊĘĘņŪ¯zbŠ_´xä‘Å\Rv/Ž(`¸ ž9¨žŅíĨĀ5#%Æ(Ļųˆz0üéĀƒŪ€KGŠ8Í/Z:Px¤ĐA õŖŊ”SiWĨ;4Æ<ŌԐ;P1¸â•F9Ŗ§´;æœ)´´ĪĄĒūLą1ōHÚ{°}iĒęĮ‚3M+Á‘ČĖÄdŌEą<‡îĢeˆâŠ.ŠUˇ‘Á'"› ?g@" ¯SëZ”`."•ëīŠ?—Ū­BÁŖVāsš~Å8ČRā~”\ VŒ Ėã<ž”ËP…ĨY9äUõ‰ =ę7´ŽBI>ĸĀ­" ˛m„ã8čiÉ‰ĻœHHĮŨ§ElË9”°fÁô ąãŠ…nËå`†÷ĨŽxä_‘ŗõíU_LPüņIĮ^iÔb€:ûŌŖlŨ†=Šqķdšl>ü‚â€%\.BŒ{R“Išw‘š )<hzŌįŠaāŅ!Û8č(ūü \ÖmŠk­ėîAjKŨŪHØä/CNĀ\4cš3E üiÃč)ŧ“Nš0ČëL1Fdķ Ū´ōy ŌAâ€I9Ļ“Ú— iUė÷Ũ ƒsœÕŧSs“N ĸš‹Î€§|qRô¤Ü(;hŧ˜8ëQOjÆA,-ĩÅY~4šĸāSļ´hæ3LŲcéL6ķĨņ™T5ŠQŠ." ą+[Ÿ+īzS4å˜FŪvzņššÚŠ`´‚–RĐQKF(-P@ĸŠZ)3EQE´Q@z(ĸ€ (ĸ€IJi)QE ))OJJJCŌ—Ŋ€Š(  QJ(QEĀ %PEPEP ‚ RͤڎÔęCHė\įhÍ#ĸēá…;´ZǏbÄãĻjsĐ{RŠZiéQũš&ä Í<Ķģ wg ū} 4Ú 3ÆŦ(¸ŌŲŅÁķ „ÕŽGZ1@{ÕqvTœÂÕ`ŸšƒÉæ€ ûjgæV…/Û!ĪŪ#đŠx/ĐR”ĪZū-Ņ—æhW ņõĨĪŸ¤hšëV¤R0Rxv\ņéUÄOŽč2›§–x‹3sŪĄ2Jˇ~YrxĻ‹h$y›°Ģ@ŠŠrĶ,Čą¸Ã{U”Rn9nô˜čhlŧĶCRgq¤•bĸŽŖbUpOzxŖ”ģ}*-bsķ.j^sCf€#kdōüžvũj?ą&ÍŖ }jÁ&Š.1ŠHŧĩĀŖ´ļō 6ėķŌ§Å(4\E ˆŠ^+†ÎæééZĨ4Ēî W'֍Ų4\^ÍfŨīk€Ū[`ĩ§ß4ŊiĻĪ7 Ģ =´m!#âôâ—ė6āciúæ ˛@Įfyõ§q˙ įKQ÷beęŊjéĻē—ÔRRÛ3î*>AŠˆmO Č^™ĢVp!*q’sš.m‹Č˛F@aNâ*ĖJj@=)Ōø™¨ôŠÚVŸÍ™ojd–˛ĩךš`\f y8§Ø9ŊWēįˆ*SíĸhĸUs’*FJzâ¨m Ēí*ûš¨›iū×į|§'ôĻ€mĖ`ę;0į‰ĘŋS z–âŪfēYP) =j9a¸{•—`ų}éˆĩ-ĖQļ×lQ,RĄÚāŒr)Ū)0Ō -īMą"ļÅ °Å!”|Ļgy-˛qõĢ|ĘtSkį“ëInZĐ4r#œ‚-¤,×o.\ņ‘LEâ1Iš¯uv ‘PŽsḚ́u ëR1ŲŒŌ1äR’8ÅAíCu¤x Ķ~ņĨ| S•xÉĻVŸMP99§ž”‡Ĩ1~õ?ĩ0pi§īŅÕšŖĐsژpiIæ u¤į}IœRxĻŊ;øh!ĪZu1:Ԕ”Ŋ¨Å™ĨŖPEPEPEŠ(RĐEPEPhĸŠJ(ĸŠ(”¤ ƒE€Š(¤ (ĸ˜Ã4QE0 (ĸ€ (ĸ€ ( Đ ŒŌ S@‚–€Ž” Ju (Í)QI@ĻĘˈJ š\āfĢ›ĸĘûP•é‘L -fi’1ŠzH˛ō:Õ{NŨŗÍXŒÅË&9ęE0œ6)ĮšR2?$Š6ĪĨ FF(ÆMUĶųWÉčjßJLv¤QŽ)Ũø4c֐Ŋ9 Đ(4ŌNęwJCÍ(&Ži…Đ8BÃqíO=2B|ļsŠŖoļîIŒļGjĐ—ļ)ĻŌYfc"‘š}̈"xäáôĢxÉ œ)Ü,TŗFÄŽGŪ¨Ąt[WVûŲų åsE€ģ,ëōO@)á]ö2”CUîũĻ#‚3IpäŨÄW­Ëfx÷Ü2)Ë"ąš§")ÔPãšFu0J9@ŋ֗„|Üf ģ.–ėTŸzC%'æôî1‘Ōŗ@‰3ķĨ™Ú0Įq=iØ Ü֏_Ō¨Čl‰ ļHÎjKš],‡†Ĩ`-QÖŠ\M$w äuН$’$ܘãŽiØ qšQŌ¨™„Q•*KöŠæœÁ î;Q`,t¤ÕUšu™#” 7qAģ 1ŒĄ$Q`-įŠĒŅ]+FŌl8^ĸ{MÜ˙… -SiąĘ’&õô„Žšâ›É(;RLQHizS pr))sJāG-ŧS`ēäŠz¨  -0zŌ€3š)E/˜ Ņž(#=Šzš3Í@o!ųdŲ  bŒņHyĨ “´ŌęŦ2@'ĩ.0is‘N<ŌŽ( –¤e9SÅ-5†ęwEÅ.(  !šŠi84P!{QEQEQE;Ph4PMPEPĐh¤ ŒŅK@ š(ĸ€ (ĸÂŠ( ĸ–’€ƒIEQE (QEÆQE0 (ĸ€IKI@hĸŠTųJ6Ÿ˜Ô €›˜ãŒš,…-@.]¤/­>iDJ ĪĨ;úZ‰ĻD`°O"¤-ÉQ` .iŠĀô"œzRČĻįšâ”q@Ė?rø=Ē RĢtĩlsÔf {U,y šba)úc=),ĀōåpI§GlņįkđGJuŧM 0bsNāAi“x$ātÁŠ­$,˛#í¨m”HĘģšÅKn†$’Fˇj%‰Û§ũĒIĨĻVԖ™)$d-ČÍ$2ˆaxŸī:Kö’m„Š3Ž´ßĩĖd)īQ…ōôöŨÆî‚‘Û94X.Xi•ʐsRÉ2FfÆzUKŧ X‡Šō˛f%ÚXãŠ,,¤Š %[§Z‚­ķ˛6)–ŧÜĘ ė)-•MÔ¤Œ€zQ`škˉæŪHŪ:T†Šĸút§13\ēn!VËDãąÅ/sYđok–Vs…Šc’Crņīā(°(ĒĐLí;DÜâƒrK°HōŠÍ –)EWûH0ų˜öÅ\yˇiSīJĀXé@éHrE*Ÿ—š(¨žŅl+g5!8ĐŅ“ŒP1Œ˙ZD`äãĩ(ęxëKKF(ĩôĨči1Í@8Šc¯ĘĀIf›vĪ%ãę)-åymˇõnÔjk”˜'šœôĒļĶJîâA‚´áxŽåUNE0% €sÎj!gsƒôĪą\ŦŽS õŠņÅ-@ŠX–Höˇā}*ļŲ bwŪ­”sŽ(¸ėV{fiÄĒø4Öĩ”Ü,ĄÁĮĩZķKNā!ÎEAxØˇ|UŒĶ&‰fŒĄã4ĸĨĸ„IåĮĨxÚæÜH ֞ö˛4>W™ÅXQ*qŪ‹ˆ§3´ņ$B6 ܚuÚ@Bš¸Ô™â‹ŽÆmĖždČĀ|ŖĒųÁg"Ÿĩq÷GåJG\FmĸŸ´˜Üp‡"ĨԔ“ƒ­[ō×y` 1ęiŇĖ3š.aö]č@ÜĮ>• ājƒĶŊ\H"FÜĒĻIkËŊĪ֋€éÕV 0ã< Ģoĩtį= •qâWŒĄā‡ė1ųE7z‚ßpĶÜŽi`§ŗÛæ ŊøĢ6ö‰2äŨ‰¨ūÄT“SØSēäÛmÎH8Î(ģ‰Rp0I⧸ļ3"ĸž6Ķfĩ–P€HŪyĸāG{”a(0IĮ^9yĸ‹¯¨õŠ'ˇšR„˛üŧņN–՝’U :ū´h[ĸč›#î*ÍŊp ×Ģj'‘Á— aŪĸ†ŪX.Y‚§Ū RũâíĮz‰ĄR(Xœķšž(æ[֕“¸ëMeŽûÎXcu~āīJßv ži#ļVTËžŪ”ļĶ™ĸ,F8"Éú&k8Ėeģebv/aZņT =ŊĶJ¨\7P)€ëv•ÖT9 ü$ÔzjļXƒĀ<Šš*ą1”õJŌc hŠĖŪ”ĀÔRÉéHĢŽ)N' U–éĖæ4ĀÛØõ5!Ÿeŋ˜āįŌŠHą\rŪ\Š:'ß&œ„įƒĪŊ;h]2•/Õn†¤’ä+íU,q“UÖ(gsÆ0 ĻÍųKBøeŒĐØeĻîGĩ?pĢXĘd‡æ8âŦpĪHEėEĘrėEHŗFŅ—VųGSéTV9&ĄŠ×lc›šv7Úc,9ĮĻjĩāPŒ֞ÖŌMXeqІrßnˆvͰÍ@B¸N0ʐ~•VuĨĖ|cø}j+'Íė¨š:JĀL—j× Ū@ëK, <ŠXVŠŦJu'SœiosŅ22zQ`4AĮ… ;Ž*ė„K@ā7ZdûŦæFRvž š,*øíL¸•ĸ\ĒîĒ—˛:ÜDQđR]´–ōÆw’¨Ĩa •¤MÅqSŒÕ+éYŲ4’ô ƒÔbˇ•k+ģ4@‰$ ´ģąĐtŠna3:qÅEx@1°ájˇģī=@  pÂÂpģžī&¯žüÕ[#ŊäSVˆ¤Æ'j1‘KJ1Š@ R{Ōž””qM$…'J8¤  VlUŲJžOJģĮz\zŅŪÂÃ@ēĐȤä¨$Sđ3Hz␘Ŧģ\5Ķ‚2hrÜ,؜€ ㊓í įyg!Ē$hĄÛ?1=*#˙!ZYķҤØ8¤yH°úUböžaM¸ę ģŊ@܂öŖrįīÎ¨Ė†ÚŨĘąųŋJIbX­Vuûũũč°Žh´bŠ\šk($”šm„ÁÎGQE†^ęiGĨQžčˆ"+÷ŸŊVŽt@ĖáēįĩņĖSƒdãŌ“p'†!›4†$,piųęj;Ÿøöq@†Ap׊&=2i-îæhÜWŌŖĶ÷D{Ķ”ž“ [žÕVCšZŠ…”íÆÖAŠxŠĩ>):ļHš¤ĶIĮzwZŦöĒXļöûĐ2Ęô¤ į5[ėŦ>ėÎ)<‰ĮIĪâ)č"ŅæŒP@ŗŠ>kdvŠÅ (Ĩę*ŗ] rģ[jąAT"îäŠwÚa'` c‡Ĩ8*4‘ūVĨī@†ˆŖÎB(5X\ą›Ë œwĢc­fÅ˙Íūņχ$ ŌŽ)z „ÜFŦzœuÅ '(ĻŦˆÉ¸–š&Fx´dP0zbŒdPzRˇëN ŠĨs4ĐēœüĻ€/n¤ 0ÁäUg™ÆĀ˜rFMI#˜ŖŪFHŠz"Š;F)[œTķ™A`ŧRÅp$”ŽÆãŊM",‹ĩÆEG %3R‘Í&)Ŧ2¸ĪZ­öķH> ÕžÔĒ3íMUl•dŊ‰Ļ–[wiüÔ}­VM <Ņvajép%/¸ãšK‹y%¸Y ´ėeŽ)]ĘsNā6XŧčJļ3ŠĢ*ĪäˆJå}E^=)§Ú‹ZälĶņč4ģIiå„$š}ņ?e*riönr89§qM,2PsO™$EHČõČéVΠzāJã*Īt`˜(PAš˛9įÔfšQ[ī(&Ÿ@ÆĶQMÍĢ“éRāf‡]6‘Å (é˜ÃzæUÔeŽzUˆ­c‰÷&:Ciōø;z̈Ž?ä&Jž;Õŋ5…fÁ=ŠąĀ‘’Ā|ĮŊ2kA,Ë&ėbÉՂ‚X€(Ū:Žj ˜üȈ ´/9ĻØî0ø<@û}i“Ü>})[8ŲÃŧ,Ē2HÅ *é_uũ3š–ũĀŲPKôĻYC,WQƒÜšæÜĪ´Ģa×Ĩ>ĸ(É ļ€Iœ¨­™<•‘Û栕'š?-Đ*÷ õŠM˛HŠŽ8^Ô0(ÎûrĘrdnŖŌ¯DcĀЧwkʈâ­ 6öĀĒØĻF!Ā;øŠl#ōâÚÄn<Ÿj§æÜ‡.“íVl ŧ’4ƒ }¨įz3ÍU[—ûg•ŗåõĢ@rMM†SÔ˛-ĪÖĸ‰%6™*Ũ5rxŒÖîŊûUhfHíŒoÁ€1ÖŠ ĸm>U–*…ĮaV‰U.&DgaŒœUō4˜ŅVęđÛ¸_,zInöēŽÂKRßÅæ@qÉ^EAdægÜø;8X Rܤ8 ’ĮøGZ#¸WrŒ ˇĄĒ÷_.Ŗ #åĸôĩĀÃ;‰æ‹.šŋ‡5nY’"7œgĨSŧâūíK¨œˆ}ڝ†Z71+fëO’xã Ŋ€ÍQžɇûŲ§j  O' f•€ĩįÄĮ‰ķĨ2ĮœúÕ ÄTĩ‡hœQz‹@UpŪ´X ĀŽzc­(`IÁéY÷ŽG•ĪÍŒŌ˜å[ĩ1#*t4X įšdņĸÛŋiöŠqÚ¨ęeâdG ôâJĸŽrGzv8Ēw.Ëb$ C9¨™įûŸĖ9❀Ņ­īPÚĖ^ŲdsۚSwĀķ "ŧē6áU~ķw4ۉ&ļ‰eķ ƒŒƒFĸąKnļũßzĸæxŅáKF1LFĖOæ"ŋ¨ÍIPÛȒĭŨ銘ûR QK@ĀŌ SI@…ĸƒŌPŅERf–ŒPEPEP0ĸŠ(ĸŠ;ŌQE ))i)€uŖĨR;ĐN(¤#&€´Rö¤ QE!”i)i)€Ph Ķ(ĸŠ(Q@…ĸE&(ĨÍ€ ĐGĨ Đ 1K¤`{SF1@¤8íKü4€SGjEäS€ ķJ ƒUîĻŠQÆ‹c4ęBĪ-ųĐķ/”‹šŠØ æŽ CĄØŖ 0ę*F!ąĪXŌ†¨á˜Jģ–œíąK‚4ŖĨE âe,ŖŠ“8  0aųSA–ŒuNčáIäÄGÜæŊöĻ"(āŽ7ÜŖš˜6hé@ë@ 'ũŗękDÔfŪ&9(3ë@29fċžX•ĘH\œÔëm¸p9÷¨äļ˖ö֍2Ņ•:“ĀÍ:Ø/ØX‘Į&ĻH–4Ú;õ5ŲdXÚ0ãiéO@ŨU´ķ‘ĐM´,lßo^@§¤rĨŖ 5QĖ‘2ciÎE%ŗŠ•FJ°ëžõ|Ã͚¤Qå–2cÚWŠõ̃Ŋ 7éP^"ÉlrqŽ•2đ U.˛Ė ëšHctâ§vyozēËŊv5˜AzY~ækI$ šS‘NĀRą“ĘyUŽ5fĪî3ŦsTŽ­ÖŖÖˆUTvĄˆ~=i’:ÆĨŲ°)ČâŠęYÂĐõ¤2tšFe^Fzdu¨¤ģÅĐA÷{Ō<,Æ"d\ cŠĀ:ˆāUXW4 š ĐiîtĄ>ī5#t Ûžyâ Ķķöorjiųū•6dgôÖĀ\ÎOP~”„V|¤D#(äą8>õx7LŅ`Š6¨č1ŸJ3ŒŠ­s9IU ÎM ,ãžô™É¨"ŌŌķŽâ›įHąųŦCéNĀZÅN̐ô#Žj5š"E&Đ˙tæ‹Į´Ĩn$c­L͎§ZƒíKįų%NGztîģ=ØcéH†t›;J“ņ¨#hâˇo/§Ze”æ`ÛąœĶ°KRĖp ęĘJŠ‚īPĀzÔŅ"ĸN”€ÎAz¨^ĀĨ#q@ wUÆæëOVdGĩAr¨ĐšlÍ<l2hÎqKÅ7ės@4´„sK@hÍAveDßsP%ĶĩŠ“pߜF ^ČÅ(“ëQBe)™1¸ôÅVRƒĐŊ0.íŗŸZv1ŌĒK<ˆęĄ2§5$’˜`.˒;RÔ Š hNJ‚~• ­Á¸BÛvŒāsH—{î !MdQÔU{‹ąnFå$–)<ÄFj°6{ÔPZŦ!ļŸŧsSšgĨ9íÖeÃpGCL†ĐG wbíÛ&§Ĩ÷ĸâ*Ëf$œIŧätŗÛ Ŗ›yŦÔfd`Øl×ڋŒĒÖM*ŽeÉ^•-ÅŖM  qrjhĨIä`qOÎ(¸Žlå•P\ īLžŌæm™+ōôæ´G'֐°íEÄUžÚIŖCĀt÷§C-Ë>׌*ô&ŦQšw PÕ7ŧjˆ…ŊÅ]īJ:P2ŒĻG°ˆÛqéMo4éūQ‰‹cŌ´()ÜEkoŗäB1Į4˙°ÛķûąSûæ”W•õŗ:#D3åôO0šÜÆ÷‘ŽE_¤īNāWą€ÛÛ<ˇSUĄģœŪ˜Ø„ôÅhũhĀÎp3@ĸii %)¤ BĐP1qIFh @hĸŠQEQEQEQEPi -›œRƒš@¸¤´ĶEw “­88¨ĶvpÔüQNâŠC(Ph¤ĻAĸƒLĸŠ(¤Ĩĸ€Pi( @) ;ŠÕXy4¤PŅGQÆ(äĶÎ(&‚(8Åâ—ĩ§Ĩ"ôĨÍ4)q@ š‚ô ’9õŠj ĀĖ›UK}(@:Đ˙Ŗ¨5 Á­Ž|ŅÎ{ –ĶpŒRĻ&Eëy;gĨ4!m˙};Kœgˇz–äâ¨v_œƒOš_Ūe;Š  -BĒycīM-ßËnÕZĘLČӓ֤šBōl(ÛGR(°î-Ģ*ĄŒu^ĩ:ķT­°Á$žĩĄŒzR`„”ôŖŊ;ŒC(^ČwĸĄÃf­GƒŊU¸*ŌŗŽBŠąjs ’y=ŠąPÍ!ÎN5Y.$iŒ{E+kЧv¨!”ÉģåÆĶ֐Ũ¯8R@ęE;ÉĨq–=)ąĘ’.PņL’A$ WEG`súŅ`,æéL‡F=iãžô€ZN§šZL`dĐ; žqIČ sšLs@ Ā ž‚‚1Ūĸ™¤|´Č=hF$¤ETQŠEuęiØÉĸāF`RÁ›’:TŒ2sAĄGŊÆãŸJl°ŦŠĩú{S™•‡įN#ր*‹CŊI•^€Ķ§ļi$FØ wĢ$ RåEĀdhÉŌriÉЊRyŖ9Ļ3ī0˛ É5Zdû#ÄČAėjéëJzP˜ĶG+D˜„ŽĪÖŽBKFŦÃŌĨĪqEÂÂäfŠNŅŧĨ&\(čÕwŠBĒŨT­fĒŗÛČ đî*G‘ †Ėá€Æ*đEĶm 6íƒ4\,Q‘YDOb*Û´eQ›Ļ=Ēr€ĻŌ*ŗ\?'‰âÄW'vŠĮADAÚōBH ؝ŦĶÍŪ ėiō[ī}áļž:Š.‡b(á1ˇ0$Œ‘MąâŲÛæĻŽ]ÆI7ã56˛Däoų=)\,CjU”• IĮ5fÍ$9Ži>Í,eŒî Ô–Đ´jÅÎYēĐ"V'nj+ŠZ+feáē ›ļ*9áķā)Đö¤2+u‘f'q\“M˛ėŖš_ônaōšÆ3E‚¸ˆŖĄ\qÍ1 ižhd ü‚phĶäwV IÁęi°yy‘ˆËN &žY‘”ƒšĐ$ҚSÁįĨ4g“Hb>m#ƒÅeDVÍ­÷sWnåTųI9>•^ōÖu?9ũj@ƒĮåYˇęb¸I@ĢWãUn KÄķ öy¤€U>mĀ#ĸŸx7[IŸJ‡L_Ũ=ÍOynüõšGŲŊ÷‚˙9 KĻ0O;Ē(ˆ›`đ}č° Ē˛1OēwXĸHō23VÆ#ęÜh˛Â†F)ˆ‚Đȡ-6F:g5wŌĸŠÚ8\˛ƒ“ëR—Å&0fÁ"Ä7;)YyZĢ}>Ō§‘Č_Z@ZIREʰ#ëԚ‰͡õĒļNäG@­ÜSl†Ų§@č)Ø |ŗČ2=Tš´ŋ2dwŦëvižbÃy ž”ĨĨļą!ú“Íú2ôČ'ëTĩEÜq“Í(ĩv‚7‰°üi/Žß<y4X ųĀāRŽÜÕKŲŲ6F¤ĮŌ˛Ep‚ åqķfÔäRũ)ƒīņŪž4€)NÅ!čiŸsy<3ˆÁj’øˇŲ÷ī*ÜtĒē‰iŒ ˇ}nsŽ‚€’ĘG6¨ĖsžõaBŨ_ė•ČĀČŠ-nMÄ\đĘpi4"ßĺâš>å$|ƒ@Āļ Hz€ëO-Q@Ĩ¤Ĩī@Š(™âŠ( aFhŖ­RŌPE.)(ĨĸŠ %)¤ Å-RĸŠ( (¤Æ)M%ĸŠ) Ą@ĸ–˜¤4Ļ’˜ EPEP!qHsŽ)h4 3÷;Ũ&ņŽjÍԅ#O,qP6MøÍ:ôüŅ}jŦ “÷[‚y뚒áˆx™[<Ķo¸GŊ<äÅŪ‹•Ūã Ę÷Še‰5\ą¨Ã´RˆßŨÅ6įts sœvĸÃ,G.XŖ€TĩN2'¸ķsŒtsŽi”RâŒR8īKųĐ.=(ŖŽi$ ÑÜR⿜3@Å Fw.sęiĖĄŊ:ƒNāAm …˜įŠŠ›œŒã4 Z.Âag=wSn–Vu(NZ°IȧĻ(¸ŽB¨>”ŦĄĐŠ<1Ō–n-ÄQ6Öb=*k8ņrrOj°TŧŌđb˜ ÍTģ9RUã×l FE‘6°ČĄ#}›ŽŦ3L°Ã ?Yjā•ŲŽIWÚ¨ÄCmūĒPNFN*K,}‘´ķÄØûŅo CFį4\­QZŪ\ôÍ-ŗhų=(ŠĸVEi=hŠŽV\Ņ @$’)ČpŊ)Čf–Õ¤ķ1ˇ õĨˇŧ€ÆA=$nÉdČTįÜP%K–û vëŒTfwDG.=E$1™lŠ÷ŠRXÖģ2ã‚1@ ĄĒ §hĨ Så'ĻVų~íSžaæD3Č<ÔĄ“Ü\~RA¤7h åHĪJƒP˙–~†‹ŗû¸šāU`/ņGbEV›Ī C ZtR\Äą u•€¯m˛IŸÎÁlņš’қΑ%âĸ1‹™mÛĀ4ë99ŧ‡úúͰíF1Lc´d‘ÖœIÛRZ1M\‘Jį aZ:Đä‚1ĐĐN:PGŅéJO­Ôb€)sK@A@4hã8´vŖ4”p¤&ŽÔ„.i{Ķ ԔPzŅA AœŅšAÅķ@ Ķš¤â‚3Hī@4ÜÜ QG€ÔzŌņM1@é@ BˇP ¨8¤ĸ€ ‰œí¤( Ž )4šâ€Kí^”¯H0ã"œ [ÅnEÆ{S œ;÷íųŗœÔŲæ—­ļŅĪųãԟ"$ÂįôîÔŊ¨Ī4€ŲĨ¤4,G ¨n-ÚGWGÃ/JŸ8šãŠĢŗŦ­$Œ °ĮË{iaÜCUŪô}(¸Šb `•š7PiĪnķ[”áJļqE0(¯ÚV?(EĪ÷ŗLŧ†fhļŽũŊMhöĸ•ĀŖso$ąŖ¨Ã¯84ø§¸Ēų;ęM[ĨīL ætÚŅĪ\UČK4(_9Å<ûŅž1HaAéEPF ĨŽĒ“ŽŧU‹ŧÍhĨ'¸ĢüzQíڝÄfÛĘņÚy~[nÆ-…ģĮ 3šŽjîĨ- BŪæi.Z7\(ö§]ŨKlÃbqŒ“W@@¨nâ’h„iŒ´€_>%p:ÔëĐTpÅåDМāT”´PiŠ(ŊčĸŠ%Q@KŠ( (¤ëK@Š RRĐi(ĸ€ (ĸQ@%/jJ))i RŅHf}ĸŠ  (ĸ€IJi(ĸŠ(Py֊(Ÿ‘/ŸŋŽĩ%ÄFAģ¸č*Įj ;ˆ§)kˆŒu&qœĢÁĢXÍqEĀĨ!ķ§A T„ϐũ1ÅXU ĐHņ,„ŽôîGM—`'JŊéQŦ*­¸dŸSR)\h: Œ\Ò `ŠyĻėNč?*Q•ô§ū4\,UI11Î(Š팞`1č*ÖznpØ<ŅqX­w’ČĻ68jʂ#¯§ʔp:Ķƒ;zPįÅ;4™¤IéKžsH3Œ‚iÜP[– ‘ž—ŊŽhÎãÅ;ŒSiV€AÎiGŪĨšP0s@ ū#@Ą¸4ƒƒ@^ϟŽ)‹Á§æ€šœ:ŌwŖ?5.yÅ.3MœĶŗÅ' ŅÎiîiĀäs@hôĄq¸ĐÍ@3Í(ŖŠ u4œŠŖ¨4(ųO4fŒŌ¨ã“APÆir8¤?tR‘Ā #4Ŋi¤SņÅ&):S…!ZA֝šh7ģy iëBķš@;ĩÍ1ziGJ`8Ō'9 PMž)Ŗ­ķŠv8¤=(÷ ƒ@™Á dķJž”î 4´ÃÃSÅŊ1ŽZ}5×'é@ë֔ņÍ 攎(íšf€8Ŗž})ĘŲ^)Ą¤ @ X)Å8sLqԜ§ŠuQ@ŖĨPš(ĸ€ (ĸ€ ŅE¨ĸŠ(ĸ–ƒ@ ERĸŠ 0 (Í€(ĸŠ)(ĸ€ )3A4QIš) ŖEUQE”¸ĸŠJ)¤ BҊ;Ņ@(Åĸ€RŅ@ E.(ÅĸŠ\PM¤QŠ`% ėQ@ Š:šZJRN8¤QĪZ‚Š' ĸ6YTäPĩ ČĨ'ž)F(¸Œ qéšÉÍš" 6Ą˜Ÿ1†}ę| ´/\ ße#¤Ė 9!•[&RÃŪĻ  .ĀâœŊ)ĨŠCTlššO­\|•!zšĢoo,2ōASLLļŧ zVt[šæLšžX€p3TMí ˆķBjŨ€+~4Ī1ūÛå†ÂâŖįiÆđBžŪ”÷;Ī0‚WĀ‘&qxbnF)ŗ\ēÜųas‘Å1$Ũ¸Š†JĘ5%$ô‹ –+‚#v•víũi>СuÂ7CI|Ĩĸų}zSnJĩŠ€FFi§ĸąƒÜR‹…Ā$§ŊC8Û§€}Šd éü08ĸĀYwUMå°ŊihŲ°Ō¨JXÅ’yīS$2Ŗ—) åÜr1HYF3Á4ŒHäUmDn¸=iZ šÆA?ZQŽũjœĒŲ‡x į4Éįo˛GŒå¸4ė"úsȍ.GAYÁ]^3l¸ëšYKũ¸(n´X ũ;qHĀĪJĸZHîü˛ÄƒR3™nüŗĒ3E€‰”& ĒŊÍ^nŸQ‘Dw¨}@5bc+8ÛōŽ:ĐÚ¨m%iQę§\Lō´b0JŸZ,ĒUëPA1—x+†^ÕZŌW°9oéE€ŅÎ3Lž_%7H§H:T7ŋņęßJ@I‚XÁ€iÃĨCe˙ĢNŒ7ŒĐĢīGSō 8 w8¤BpƗĐ QÛւ(E”cĩ(Å!Ļ‚I#¸÷ qëKU¯ÖčqŠ[WgYŽI  đ1@’‚ÛW&€Š1HE°3@ Ã"ŒqH­‘J84c4´g4f€rN)ßZŽ÷(ŗČ94é.cÂ3s@˙$ņ@o×ŲåSdF[ŒtĸÁrĖįĖąf=ÅGjå-AÁ ”Œāéũqō♠Ĩ,2ŸxP2ctČŅī@Ķ5q…zÕyĪĪÜ*ΠAĩR: +žŲ˜Ā ŽķŠüœS!uh‚į$ZyCJ-¨Č~Ôŧ´Bė98íMščS$gĨWŗBķČ ė9ŠZ$K9„n_}Ё-œæh†ė’;Ւ*ŽžGŲ”ddÕžÕ, ÛĪøūŠŸsšá_ŠĻßôČĒęĄÚãŌ›ŦëüÄ E|” â¨\÷ʀd/cSGo"Ũ`ž0(°ËK*C }hŪĨs¸cëYöQ#\ĘČRp(˛…]æ œp3E€ŋ^yĨܧĄņĒzvI™;ŪĄˇˆ5ėĒIŸZ,˜#ą¨…ēũ§ÎĪLUXœĮxbÉ ŒŠeģ7ÛĘä÷ĸĀjgˇĨûVdÍ/ÛՐ Nže´s;ą`:R°iqŠÉŨ#[‰–FŪNqÚ´!vh”ˇ\s@įZî3,$î*WœRO'—8ė*”k$Öo)s“@Ōؚ6ËĪzĐŦí,ūí†y”ÜųÍ'ÎČŖŽ´Ähô¤b@ČĒÖ3´°ūķ;ĮNĩ`ã†Uŧ’dŒŠ;Ņ@Q@Phĸ’ŠZ))hĸƒI@ E!ô PŌf”ŌPŠ R(ÍRĸŽôPEPM%-((¤Í†RĸŠ*€(ĸŠ))i(ĸƒEJ(##Ŋ ’ã÷ę‹Č=MM$‹în•ET-čQĐ–üđŖÖĒĀH.F@`FzSŪT€c×ĨWēQöhĪqNšŪ2qŸSE„XķQ_i8'Ĩ89$ ÕUA$ęí cŽÔ“ü×1ĄééE†[ ĄÍ.*œŸ¸š@ŧ+uĢ›ŗŠV {ŌUyŽZ)”ÎiXeƒT§ÚoFyŠ„ęXIõ¤key|ĀĮ9§ą$ąÄˆÅ€įÔĶŧ´mˇ=jeâ—Ņp"XBÂČKwĻE-ģFøįĨNNM+{tĸãąYLąF# “ØŅ*ēL’‘ž>lUÃĨ!ĸâ+ĻfģBŠ`mˇ¯Û#­\8ĨĀ'8§pąNn“-VLņŦ ų¨ōã ¸ ֘Öčōų‡9¤Æ‹Ų17ĐŅĐĶdŖ` *éĮ‡úŠruQmnđ6K qļq1”IÉéUq C˛ü§EaĐQm…ģ‘rqOŠ‚ØĻE‰rĖËÃQ  iËąb0p1M˛g˜“šX‹ĀΛ ÉČ"™lė—,ŋä(~UĻš1Î# ‘ëRĪ2ĀĄ9Ĩ`š-5ų\ŠlR‰c :R“ڐĖéՖémÄšŅ•KÂTu"¨Ũœ^'Ĩhā{ÕPRæmŋÎF)ÚsŊsÅI<éĖjĀŪ›kąˌƒĮ&€.b0Î7ĻhSÉĒ7H"šY1Á<ÔØeũĘOŪd/SŠ‚(‘§2.qÚĸ¸ŧ>J§A@zŒį5FĖ“q($žjH˜Įtņ•ÆEGg˙SUX Āw¤'V7Ū9YäÚSg4ŦŊę%›tŦ›HĮz˜ŒT1\$˛2…ô(ëKš„ÍČQ›ž’ÆíĩXé@Ī­!8Æâ(ĮIŸäH~^Ū”-@ŧ#ŽE(ĒHq{ļ3”"ŽûĐЧŠ2zö¤S’hŨE&xúRҊ3Å&ëF( b€?B‹ƒĀæŒĐzP@¸Ú1éHąF (Í( ymÆÁŠV†7Ë+ōúS¨h¸†Åq1šxŖw&Œæ€"–Ö9NîUŊE*Aq4jN­IGN´\ đÚ_vō}X\ƒíFsKšĢqjg8“t̆TÎHīKš:͏\Ûq,m†ąG0ŧ˛dã•?j3“Íœ6ĶG,Ž~jH-î!w Š ÉæŽž´„ķJāW˛†H˘ÃņUá-öųŠOĄ­pMf²ĮtÎŅ““Nâ,%ģųÍ3ā1TAqΘS9â´ģwü¨f‹Ÿ4Sĩ‘cČnHĖąH‡ÂĨîiOZ.|R\@žW’XŽvĢëģ`Ū>nôār)zĐ2Gæ@Č{Õ8šX`h L}­ôf‹ŒËąwĖmeZ–-ÖrH2ĘĮ#|SēŠAnī"ŗ:íÉāT¤dRŅHe;đæÜ"Š$œœT>Ž…GC‘V;Rw  ûXMŊëĄ+Ž "ÆáåVŒŗ1áģZ'×Ō‚O‹ˆŖ§Į%ģ˛:œÕÆļ‰Ø“ĶÍ.hĸ50Šô #­ÔžX¸Äļíˇ¸Í3í,9A´œuĢ\5F%„ÛæCøfŽĻ<ŧ(ĀíHi–5ËU[ɕ Ct"‹ŦųđƒĶ<Ķĩ m‰¸Îyφ[$*eē jMœĒú>\`gæ•ĸ‘ŨåPjÖ9Ē×ëû’Üä´*Ŋđ?e|RC"ļˆIo¸ąŨž9ŠíCŦ ?\÷ĒvąģÆŦŽxn•fô°ˇ, zPЋ$ūtŖ¨Ē’°Š@įžĸ¤œ0Â\c X XäŌn^k]āā¨įŪĄŠi^6p@Åđ`zSēU[iüČˡëQũĻWĨLmSŌ‹v”tĒíuˆņËv4 –IV9@Ët"\ŗŠJ Ą’}˛m NH dŊ訄Ëåy‡Ž”ÕēBĀ`€z@ŽN(=i’Ęą¨.qškĘŖø†{P;“Qši`'ŠE`Xā‚(ôƒ“FjĩūVęÄé@ģ÷ j­žãfbsV‡W-H °:fŒb›b‹ŋƒŠq4Ā4™ąLž%A*O=¨üdĐy¨"ģIŗ´)đΓˇ´Îi@į4ŧPzP:ŖlĶÃ÷ˆ:M'ԁ@ĸ“ĩ!8Æp3ęhÔP)(ii:RįÜP)i3øRĐE%-QERf–€ AKH(Í-Q@Q@Rf ESĸŠ)QŠ( IE)¤4Ph))hÅ%sE!”hĸŠ  (ĸ€ (ĸ€ LŅE Қ(ÆiIH7ÜôûāvŠė IöE¸1¤•ˆW4î"¯øôø¨ĻʇŸj‘á’E@wÍK,;á #Ĩäųl¤õĮ֒bZî,ŌȒÍĩY0Ŋ:æ=˛Fã8Kî#ß&­/*>•Nā‰ĨŒ!Î:ÕĐ0ŌĢ]Ļō9ÛVĒ 9¨"’ŧMš@9Î(ą_Ū>yĮZĢ \v\Ķė:ÉõĒb-Œtā~4§ŠŠ(Œī`ų`: zŗ=–YšÅHÉûRcR5âVzāĶå’UēŠāĶÍ:Õq<žiˆ¨$w§Á1”ē˛ā­ ’fF]¤cŊ?Îj8§Y—n úĐn#€I÷¨P8¤¤2 –= Ԝ)æ€:POJëA { SšųncÚqšˇœP…4€OAJ9ĐA<HōĐōTJba¸#Ą¨^ˏ“$tÍZ&u D-™É$rĻĮå×{üĸŦĨŌ‹ˆ\üØíQŨĢŧEԔŊŠ Ģi­‚)oCŧ[T“ÚŦGz.{bD*Ĩ#ŽjŦŠčŏCWČĪCKÔS¸ŠVÍåÚ°e9ËfQk"žn*ō€3JUN8î;,ԛwQÔÔļOBUČČÎAĢ!N@Å4ÃJi\,UšũęE Ru)û1‘ąābŦ]›ų}*4÷*АŸ˜ÖŠĖžlŒŅž×NŖ5tõÍBöčĖ[ž´RVg˛ĪĄæ¤¸ė*A°jÂÂĢŒ”ÔBĪąrPrĐˆnNm"-ÉâŸ{ÄpābĻ–$[2:TrZÉ$jōWĨ@-Čmˆß{8õ–lŽĪ´$ō)훑”ƒ´r %ŧLŗ3°ˇaH #5^˙›B}ęŅ<Ģ:ŧ–ĨUI&„1l?ãŲqęinĻō•9=*+gh ÚŅļE3Ęy ‘Аsœ,’`…e2¨4ˇSēĸIųN8ĻÍ/™h"ī8ĮJK”+kĘã4Ā’âi!dƒŒæ¤š™â…dQ‘ß5VîQ-ē*zgŠžņĮ؀Ī$tĸÂ÷;mÖBŋ3tĸ)]äÚ鸊ƒ15¤JüįŒŽÆ’ÜŽĘ+īR3‘HeŪ„RļŒĐÜ)ËqH × mtȧĢBÄq…Jxžxž~„tÕbÎo20ĩS —RR{Ôē—6Ų÷¨Ž×müd›P´ühXplĀ^ĘĢρšøæŦÁ˙`îÕM;īËH.i ^ũj2ĘælfœƒƒšC"ŊMö¯íÍCĻ€Öų<ķÍXščŌéUtĶûƒėj ˇ";é‡Až*ę0$sÍSAÔä =éCÔvōžÔX BÄæU?1ę3RƒŒĨ+ŠHžĸž„ÍzčĮ*ĸ•€QSTÆ ĢüŒ Ŗˇf¨ļ?Ĩ]‘Í&¨ôŌ # Ūf"€ĘŖöǚk;‡gbFjKŠÆE ąã^)W)vĸŽhGĶ=čéšDË.szT7P™c8$ČÅJN×Á#đr8 ÖDl­nŅą"Lâ­Îíkjĸ0OiØ ™ŧÕ-Mq¸ŸQLxÜZyŪa/ŒĶŪO;LföĸĀKjÄÚĮĪj°¤ãšŠeÍŦ~ÕlRh¨gftbØ#ĐÔØŗĩŨÜDA#'ր/6TŒ”ōj†¤vČiŗĄ[6ãæpsšvC9|zTW“xK/^•šEI“•ĸáâžĐŗĀúŅ` ”[ „äžžÕ=œÍ,˜`įœa¸Hw}čú…Ģösyđ.;P"Ø9Å$6;P˛&vîôĨČŨŠCš(íE ( 4”Q@” Z(ĸ€ŠN´´Ļ’ŠZ@QšĻIKIHŠ( Š( ƒE&hŖĩPqE- ŖESĸŠ(ĸŠ(”RҊJB3KMpJ§Ā<Å/°iÃĩ^ÚÚHŠŌŽIĐŅp* 9…ÃJgĩIģ‹ƒ3āœtg4™é@c‚UēiŽÜCJđÉÆX1–āŠĢŠŌ’1͈†ä],ÅA?ZžéfhąŪŠÁ§?CK“ž)Ü ķ %ûžšßĪAKšsˇ#wĨ/z@Vk5iËķÍT[V7˜eb„õ­LÔâŒúqLEÚqŠQ֐Py¤%´ežō“VnaķŖÛš—p–_Ļh'<ŅqBN°y%3ØjOŗ˛Yy(1ëVM§P2Ŋ”R$Pj1ČŊÉ'fjîiGL÷ĻžĩJöŪ[‡]ģ@_ZˇFBŠ,qH ˇV¯4* ŒzlļŗÉląn^:ÕÅ`˕ Š\Ņp"Ž Bˆø%E6ęÛ·`āŽEXéKôĸāRxƒĘōrqŒæĨ´ļû<{[ŠäĶÚxגÃđ§ŖĢŽT‚=hI´÷ûP‘XmÎjčœœŌâ”b€ĩQ@Š)(hĸŽ”RQE-‚–€ âŽ(ĸ€ (ĸQL4QE (¤Í-™Ŗ4LRŅ@¤ĸ€ (ĸ”hĸƒLŠJZ”´PIšSI@#}͚ZFĻ;B äĶīzĮR%¸÷Š?JK”2(ĒĶÛßõJ>”É7o†–Mķ*ĻŌ0y&Ĩ• *•ŲNā2SåL…†sSH7FpqĮ5Zf3ēŽĩfAļ>Ԁ‚ËŖũjÕUą#}jÖ0i1ŠxBė:qÖ¯ˇJĄvA) 'h@uhĪCČÍYŒô¨a„Å!%˛qDĒF>f B''đâĸ‰]AsÎj;yí‰'‘D3nÎį;iŒ|ųŗ#`KlĖđ‚Įš†V‘í™øŽ”ûv lô€'ÅjsĀ%p¤ã4öš4l3sR´S#•$ÎĶŌš(ĮŊ*)Y„d¨Ļž0ä9—ÚŖˆ4qfFÉš•YYC/ ĐÁúR=(č3JsH…UPŌ™å&ũÛFie%bb:ŠŽÚC,[›Öž +ÛÆī¸ŽMÛG#sŸj–Ž)\,!LŽŌ21PAĐHBúUŒf–ĀíØ>čŸoĩI BÆrO&Ÿž1@ĸã#šGt*sQF’<ÂGPÎŦĩô”&"˛ĢĮt\)e4‡ŦÅ VÁ4u4\ YazΑœUÖĩ=„NĄÉ?)<`Ķ".á2HæôíI§YäBIAۘ5ėõâ-Ą–_0ČA8ĢŅ狁]­‹¸ivۃ—qĘņÆ*Ërh4îj¯ö`„üäu¨l’HåtfÜ=jÖ8Å4(SōāQp$éÍCuŗŽÄÛ´õÍHÎĒšcĮ­ʒ Ŗ€‚ÖaŒĢāŽØ¤’Ôŧ‚El8Ô%˜H [ÉÚŦ+qKš.6ÖĸŨHÜXŸČ<ƒÖtĨĪ\œA‰]˞ĀÔ‘Ā‘.ÔĻũ +—#Ž(Žå$rv4ĀIlâšMė}Ē]ŖzSē␞qHšZAK@Q@Q@Q@ ëKF(ĸŠ(ĸŠ(ĸŠJ@-Q@ Ĩĸ€ %fŠ)(ĸŠ(Í™ĸ”¨ĸŠ`QE (ĸ€ (ĸ€ ;QHiN?øū8õ§]äK÷ĸ8äI÷ėČ&Ĩ¸ˆČŖyOÄ2ûũRŸöĒ9Ën‹<ņOŧáP!ęM:xņåˇ÷iÜČq:™ úRĪ1%O™tC˛95aåXd튍ŲÆ ;‡ZĐÅQã)9sÚ¯•˜!*ĨápāŠ#ŒÕĶÅW› "QBJZܡR)ļ˛<Œûģ†ÜåÚ>Ų&Ĩ˛Æé~ŧS°‰Ī™į>J“Ŋ@%´ųG§<įĖ(‰ģhÉ5#+˜ã,8ëB>øÃŒÔfA-ŗžœt¤‚UX@ŠZFeU NĄY_îœĐ÷ëBĒĻJŽOZ@A8ČĪĨ(<Đąži;`Đ@#ĩR%)xČ ÛŠˇžš¤ė1Aæ@*“ĐP^€ P8 ŒŌ¸ 0Dy+I)%G^Õ!u¨Úx‘öŗsL›e$ō@<¯g ˇģSÖDcÁ§š`G >VâNXԂ€hęiY’U‘ą‚­ØĶÄėÆ.įĨL8§t  DJļžVßZ|{Ŗŗųđ*Îh§p*Ú1Xö Z´NGŊ&3ŠSԐ5EîzQv7ˆä*:Õ˛Ą†üM@ëŌ€!Y i`É=ũ*)—,ōBø#¨ĪZ´ˆ¨IPFmãg$¯Z.HdXõÅSžÎ@w<ÕåP¨ôƍ]J°ëBl¨Ė~î6ķQZ’od-×ĩ?ėŲ $‚%°cŊ[kúŠwBŗ#CˇRpŊ\Q ļːĩMQ,Nį=M ļVHwj.†Am‘w ãĩ6LÅ),ĄĐœįŌ§KsŦû˛Zšm\FWxÚ}hĐVc/B›u`2MI"¯ØĪ˛Ņ4āTHc•­™OSÆ(ƒæĶōI8§ÚĮ‹PĀži#‰Å›FÃĩ-°—ËËĩG–›e Äāõ§Xŗ0§FKvËnäK`d0#'4–J|ųOĄŠŧįĸ"Ō3PÁ †ęE`yn8¤iԁįаĶ1ŸĘŒĀd斍ōŨpâ Cäß;8Ān†•púƒ2ō uX ~ÔEÃEŗ'ô8âŠ@뎝~SŌŽŽH9Š#åpiÄP˜üiØ Į^ęRˆÁT“Žĩdō1Q\˙Į´˜ė(žœY %‰Îi5Ę€Jgš4ŧų ŸZ}܇ņÍU€Šm5ļ7qŌŽĻpûØæŗæ´0/™`Žĩf;€–ë$§¤Đ œŋ@ FMM8o,”ī×éYķLv´ƒĢž>•ĄEî1Ū‹QHi f5ŲŽŊéÚtŽÅĐōĨ>ōUB2ĄSéEŠŽĄ Xd‘@:M&Fė iÁ‚E9@Ĩ Æ*ēÉn÷ëXįĩgä_åéíNĀXkˆÖ@Œ~l~t}Ļ=á2A=3UŽ€ūĶpíEû(ēƒié֋{øiÕĮ­Wšd!’]ĢŽ”A*6昰ĮJŠž[9ļåIíRŲåšiK|įĩ%ĢysJ&<“OJ=÷áâ^æ NO4?AUgģōgŲ°‘ëVKnPÃԐĮ¯JZE9ZZ)i( ĸ’ŠZ)3K@Q@Rf€Š( Š))´RRĐIJi(ĸŠ(¤Ĩ ĐQE&hQEJŠ(ĻEP ĸŠ(ĸŠ)€QE!8 8î)jĒ%gšPríV&qeģĶųīAëĪ5_ÍuUwÁ ÚĨyUSqĸĀ8"ƒŖ4É!IÜ:S>ĐWnô 7J”ē¨ËŊ)j&Í3ō’*Ę‚ĢƒLYQēŸ@õĒō+ųčĀd °OZŦ¨ayzRXœ3‚į<ÕŽŊÅ/éÍ;ˆĻ˛}ģĩ:ß䚐7ņzՃĸ‘âIHįÔPĮäHD1ũŸÎ8īSˆWË1އ­4Û'–S$@ fO" ų9éDx¤:Sš ĸ…lé@üá)|žüQ  }ŋŒôĨÅAā­:H™nˆ3íLD”]o1õ‸ËrĘ€ĸ™”ŋ œņO#ɸg •n¸¨„ģn÷° Å^Å@ōâaāˇŊN+õĒlĄo78áģŌ*OŊ]qķ/ĨGg#š|’yīRFąos\rj+6 \-Å1@Ē3cû@qÁĢŪõŸu˙ĸ„1×Ŗd¨T`žÂ­– Š[ŠoģÃ7Ė{fĸ‘‰ŧD?t”aY_• ũ){ãúÕf>Uę… :Sq˙š8"•€ˇøô¨äŠF™Y[åĒ$Ę^”RvĶŽ$u¸ˆÃQ`,bŒq’jŧŗp"CSB;Įp"vÜČĸĀXšZĒ%Ū˜ķōâ–)ŸíF' ÷⋾s ŋ(ã9ĒÆĸšęELō°“bĄnų  @ŖŊGĄŅ˜ģÔfĢÃpÍ; â‹zŽôëKHbRRą2M0LŒ@ 2z x¤&†tQ–lf…euʐhEŠ7.HdPqœņ@ëKõëMČõ§:Ņq ‘š^“54Ā^(ā“ęiž(öĨqØVœāgրˆNJ­!{Ԋ._ī Đąĸ}ĐԌķJh¸ŅF͸¨Í já‚Ū´1`ŋ(ɨmįi$ue¯^h÷ˇ‰›%yŠ 0Ĩ8ķM"•Æ5“x+Î F–‘Ļ@ÎlÔ–Ēâh…-’0ÁrTkc\nlzUĒ+@//q#ļi°Û˜ƒ/˜Hė*|‘GA𝝒ėwdĸšmnHžÆĻ–E—8ĪzTƒî}i€ÔˇĀcSÉęj8-fˆ$5e$2¤CHĢՀöĨp!ĩˇh åÁÜi‰m*\ī2eIĢ!čr=Š{͏ 9/ĮJmĖm,E4üŒĐ˛+ĩŗŠWHd†#íQĮm4s4›”n5o4Qqáļ1ĖŌą%ÂNŌ¯–~^õk9™§qųÄgn7c­Cg,ŽŌ,‡$ŗMŽ4‡!2ri\ *…i"(§âĨ'<ĶY•FX€=h ;wˇRÁĪĨK4+(Ã~tŠ"? Āũ)ŠpĻ_+Ô\}•Û†”•ôКd ´`Sū´f‹ZęĐJЍ‘Ū¤HvD1ÅKHeN›ÅŸöj6K;iđX¤‡VcŽÆ­dāQ{ķEĀŖ=ŦÍr$Fã<Õā:QE/ëP 8–_0gvsÖ§úTsģF™DŪ}#[ÄōodËzĐmĄ'%iņļä F ę)Ô\ŠP=( P2)ûĘր 0ĩV¸š+:„{‘Mšwļ‘7°toAF \ا’ ŅéJ@ĸ€KH)hŖšb8ͲŸLT30hã8§M!0*Ôb‰…ŧ`Ž”Ā&*ûKeqĐÔÎ9‡#ŅČL7QŌ§Ũ˛Ī\s@8ũė{z÷Å]ä §#…d‘x'ąĢjrzŌ`;85ZęY#*AāՓU/OȟZC$ķ]ųSéS‚C†ĸ“›CūíGføˇ˜‹TT"ā1RœfĻŒŽ”†#0A–8ω€ÃŽhšÛžyâĒÄĒm čÃŊ\<ŌÔ6ešļxāfĻāŸūŊ-.i1Žh#4€ZBę–‹€”ŒĄÆNÅĀjĸ Â€*1o}áyŠŠ:uĨq†j -ŧšÍXĸÄ$cj’qL–-î$^TƒĨ\V'yďŽ: dŠ šķPgŒUš;QqcŽ_ĩ‰pG­-Ķ~ūīSHYcbƒ,*˜Ķ˜Æ>e=1L į;•› "âé2UG\UŋᯎiqÆŌ•ĀĢ!ōŨ#Ļ̍ÔIåP ô¨ÍĒųģÁ#ŋ\ ŪTFÃNõĮ>•NîÄ7;ĒŌ‚jUÔXėAĶ'šĀŽ‘qˇŸ,bdÚ߁¨„3d+H Jdx{÷Ȩ‹÷wíû§œT“BŪp–#†Æ4°BË)–LoæeEÎ;Ô6yk™Î0Iĸł4ĒĮiŨŪ‹Wk›ĶŪ‹ šK˛˛Ē ÔĶ’U’=ãUŧ㠛 ĒëKbshÃëJĀJˇq08'Š–)U܇"ŠiĀ“8üŠlŗļ`:įŠ,+–æ%$nÎ:āT‚D)ģpÛëUl@’V–æ™tvę‘ļFėE†[YŖs€Ü˙:’Ēĩģ9‰ƒ´vīS]ļÎGP(“ÉBāH•2Ô+YmašX‘M–p9&;&Ûči€Z¯‘3  S-UgVyâOĢSŠkvž8ĒÚo¸=Aé@ gû5ߖ>áéW7(ę@ĒWã7q€2hŋP$„gāâ‹s(C|ĀŽøĻĀ‘.|ŖœõĻũP>ÜüÂĢYąMŽŖĨ+u¤@pXf•˜.7ĒčĶ[ŋš=}*IĐ­‡Ėw0î;Q`.nØ ĶdqlįœÎĒãvšøļõ§Ã‰,>sœ´X -įĻā1SĩSM ääIæ­ānäāúRh>Õ Ōîļ|öŠAæ›pšū” ĢĻíōOŽzĶ]üŊOqéŠ4ž#qŪ‡5%,rĒj9‘ŽŌß7ĨH§­Pģ$]DWŠĨ\y’ž@Í+ÛÆeļbŊ}ĒŦ2@֌¸f:÷Ģ778 džŊUŽŲ$‹~pÄg"€ˇd$'^ßJœā5GM‘Ø2ą$Œšē>ũ+Y/wĪåŽE> †–VR›v÷Ē×č`•gŒōzÕĢ5" įī74c5^îá MÁAۋŖ ʁsžĻŖÔM¸\üĮM;%¯š täTfâcmၒ(”™4ī•y qQv°ōŧĻÜF:SÜ3Ŧ Ú­8\Ež$SøÕ{x<ËEŽ`F;tŠ•¸ĮÉŌ€+߯˛ĖĄ ķOL…šKyTÜĻđŧVįˇqrŗD3ŽŲ¤š)nЇ]¨9ë@‹hÛĐ0N5å჎HĻÚI,‘æaƒHeĄE&h 4´”PŌfŠ(Í-%fŠ;Ņ@ëKIšZ(ĸŠ(ĸƒHŠAK@&ii(ÍĸŠ ĸŠ(3E&hĸŠĨE ĨĻ ÍQLÅ7Ŋ.h4{ŅGj( ŅHzq@ A¤\ãšZg”™ÎŅN*ÁRŅ@›xķžâžWpôÅ?ëE+´!RÄ`zTā`ØRŅLÕKÝ r*ßzL C yTÁ°˜ŒSDL–Œ0ryĢ!W=;‚0zSU"Wˇ›hjŌ`"ČÅBĐ)nOĖi֜à =sE‚å¯5D{ķōĐ&ˆ€CŒĢlsm0=ĸŪ56ŒHÉæ‹Ënáb,xÍ2 „ÉģĄô¨aėHnŲĨ˛QäîĮ4XeēNi2F8Ĩ-č*@dÄŦ,GQP+;[@7žĻ§ŸũC}* aēÔ ŸJĄ1đĘæŨ‡+Kk1œ1#S-ŲGĨA§ļ#o­ØÉĻ f Ũ9.r´—Ry–AąŠVmrõ§T ŽŨXö„]€ÁŽ3H MõĻ4莸'š¤iŖÜyūtėŒsÚĸkĨWØĘÜô4ųPĮč*Ĩˊīß^”xwĨĶŽšâ„uaōM8ķ֊)xH¤QԌRzP1ŨŠ1@Í&ė5)éÍķP¤r XŗåOARãہÔj9'Åh ŧÆ=*)"MŦÛėg5¤í*ļėp{Sy#I>úæ•Sî€)GZ0sJ㰋jłŒšEŠ4lĒ€}E:ŠkÁ‡s(Í5mbGŪ ƒõŠ=¨^§4\,0ÛÄ[vŪOZRvŒgĩKMjlã\í,?|é %I9õĻ›…Ž@ŒMI,Ģ åŗOQ 6 1(å3éGŲPÄQ˛sÎj`AÄR;(AE‰-˜™I ŠœR¤pxĻC2Ę C§Ō`WĖĢąeÂzS­­ÚFėŠč*qÉĸ‹€îõ€ŦŦņI´ˇQÚĻĪ4é\– ?™#nzŠæŨį2°U˛i:Ž)ÜâĨ$bĄˇļh %Á ×gÕ%;ĩRŪŅâ|īG8ĸkidē+āU‚ĀrŨŠąN“nŲÔS*ŒuĻË•J’Fi‹:´­ÎEJ +GdäĢ7™  $€ozfŸhpOֆuRUČįĩg§RāšãĀÖíHqŠam­ėiĮîäR–ŖGÉÆ*J(¤Í ĸŠ(ĸŠ(ĸŠ(ĸŠ ŌŌuPŌfŒŅL”RQH ŌfŠ(ĸŠ(ĸƒ@ Aĸ’…Q@E-Šb (ĸ˜†€h{QFh Š(Í-Rf€Š( “´™ ĸŠ(Å Q@ ŌŖyJļÕ]ÍéRÕyca!<üŨÅHŗØa´úT†¨JJ˛r¯ŽT‚ QšS€3HĨOB  :šˇ4t4 Ōāš†éÚ4 §52Č ôŖP€zIąsœ š^Ôb 0Į×hĪ­!ļ‹ íæ–YI¸Š:ŒĶ¸X‰ HÛrŽM#[‚ÄĢĪ\TŖ4- H•"(;÷¨–ŨŌ2Šũ}ĒÁ&šÎĒpXLDQĀb‰œæ›rE€OČ*ÎAŠLR¸Ëʡ$ícĀ̇Žĩ”@äō:T§šEr߸l š‚ÍđžYVĪJMŖ9Į4\Vn#lúUK!YF3šēĀ9Ļ*"B€iÜ öėŋj“ļMI}ÅļĻ&āÁyõĻMœ¸-€(¸4ĄbŒmÜH¨åcö¸ķÆ=*uˇ]›ŸCGŲ“œõĸčīļ—ˆg'ŊDnˆbŸseÜO qŠh„ĖŠÅŽE-Ái„7LSo Æ Šæ‡ĖEėĀpj)-™ÂåųZKÆ;ãAĀ=hXŨ.‘J¯z|Й#QÆáŌ”,ėWwĘß­>H\Õ)X‰I”‡Ļ;U͸įëUȐK)či Ye1ÚŠGÎO™86ņŦÉ9æœ`cfŖg85ÎĶD#ØCg“L .&cå*œoĨØņܲ×Ō›,-û§”)ūqbĢ9Qa\mŧ’—Bß(Ĩy&؀ôĪzŠŨņvĖĀ€ÔnŪ’†Ü[8‹ ąžuąn™ž@G' 4–­ļQڒÒĻ9jb%ûC2ŧŠŖjÔņJ˛ÆwĒļâ%ŽE›‚J™ž8ĄŪ‹…Ō°îNN(5sŦ˸*lôŠ ÷"ÁSõ ÜǰĘsQjXڜŌŨm:āb¨DķÎ"QÆKtÕ¸ļ:•'ĻjĩĀoôv9¤ŧÁhŠõÍÛÁū‘Ö­K$i%VžxOpqNÔČÉ dˇ [ö‘ÍæÂø¨¨ŽyĩÎp0jH°ÖŠîķE€’ˆ¯îēg‘O2Æ cNČâŪLuŅi‰#fa–'šVÚÍgkŠEš7ĢgjĨžščil‡ī&ŗE„[IROēĀĶLčŦA=*Ŋ–<ÉĮĄéL´V‘¤Œ“Žh°Ëęęã*r)r9¨-aōC)`Į=ģRĪ•‰Ęõ€įÄ ˙JeÕĮŲĐĪŊUˇˆÍm´0\žsOŧešįæ+Æh°‹ą8t ę:RģRĖp6Ô tO!ū”†7í`ãžŌĸ“×ĨPŗˇYí›w­,Ā‹äRF❀¸’$§å<ÕK/–yÅJ°ėŸy“,{Tv˙-ėŖ¯Ĩ0,EX§DÜd¯*⏜œõíUŌwyV&_RE6ôN$Cq߆_¨o?ãŲū”øËykģŽ)ˇ(ŌBĘŊM *édų =ø¨āÁÔeôŠŦā–ßr¸õÍ"ŲČŗ´ĀĪJ °ŨÍ 1ÚÃĨ6>5FÕf;}˛y’6įŖû#ųæa ÎzRą2^ÉæōGj 5 žyöĢRZ–“͍öąëLû ķ7Ŧ‡=ÍĖ„. zzĘčj­ÜÄ É÷};ĶŦC a‘LŌ*œŠ–˜Š†&Ÿ@Q@ĸŠ3Fhĸ€ŠJ(ĸ—RĸŠ(ĸŠ)€QE€(ĸŠ(ĸƒ@ š(ĸ€IJi 4QESRQšbŠ(ĻnH4ķHFhëE Ĩ 4wĸ–€“Ŋw ŒŅE-'z( RšJ(ŖŊ!Ĩ ĻK:ÅÁ<öüņQÉ Jr€+yąą.ėKvâŽ#n@ØëPHĪLŠ@U J )† R‰ŧ§‘áWEU¸3!QõĄ$Ī•jNrqQüËš“éSL…ã*=*Ä[ųEîÔÄ-ËoļVÕf/õkôĒĶ.Ë4CÖ§˙ŅÁÆp(^”u¨ ŸÎ$cŠķīHdRĪå:Š3O’UŗÍUŧlĖ‹ŲH§ŪŸŨ¯Ö€%3"ã9įÚ¤RķũT`{T˛ČņąqÅ;5Qˆ¨¸a(ęx&ϊâF`­¨ļ‹ŠXm BBapÁ~å[āÕ( Ãqå1Č=*īJLhLb”ŌŅŽ)ŅKF1EŌ›ļž:Q@„RŌb˜4´RĘāĐŧ N>”˜Å4‡ŪF)€™¤<ŌâŒP[Ĩ ͊\g­8œ{Ҝâ—w¤103K€zŌ´ ĩˇ`f—˜ Øš<hTUl¨Ķ¨ h‘ŽY4’"˜Č+‘éO4(ĩ´E71 ĐzUŠ( E=E~TõŠã‰^4b;RÍ ÎbF=)ŅĮåĻĐIôîŧaĶc ŠbÁÔãĻOJ–Ž´†E5ēĖŲrÜs։m–PRž´vĸâ#ōG•å“ĮŊ2;b¨SyÁŠĮJ(vÂ<ā’ZC$ÍKŸJCĶ´î)éãį‘IĪ5a­A‘\Žî¸ĻÁoå;09ŦÜQqX†+o*Rčįž ÷Ļĩ¨ķ Ŗm&ŦäŌž´€dqˆĮ“ÔĶČ­(äQ@šä•rĒ{TĻk(“Z“S¸Č`ƒÉÎ\ļiĪõ*XŒÔč<Ō Âōą#ĐĶäe °ÁÅ>”PKjŠIË{“MKXã“x-ŸsSæšN(ÁoũØųŊj6­čŪ\u÷Ģ@ō(eVÆā=hDu1¯sW 1“¸¨Ī­9UW)či€ÖE‘6˛‚)4Œ|ŠԜ8 œpi›ļíŖ>´āĒvҟZANĐĮ ĨëIHAí@ QšJ(ÍŠ(;ŌŅE (Ĩ @hĸŠFP˂Ĩ=Ŋ¨ĸ€ŠJ3@ EPERĸŠ)€QEfŠ(¤ŌQE0 ZJ)´RfŒĶi(ĸQ@J(4”QERĸŠ)ˆZ)3E0 CÍ:P¸ĸŠ(ĸŠ.)-ŖQ@ F)h ”´Ph§Q@ E-PŠ(ĸ€ L ZƒŽqKŠ1Š8Ī ­8ĮQ@ HŅI*1šz1EFđŖ’HäĐđ̍Sœ ’Š…íCķÅK•LšS֎´Ŋę YKÆĀgŽj^ô´ BŪw˜í’=)'ŽV2ž*ldŌž˜Í0'=qÍ?´Īģųî×g8ęEh¨!@>”‹i÷TSēĶ`QE!….)æ Š1EQEQEQE€ )-QEQEfŠ(fŒŅEŠNôf€Š(¤EP0ĸƒEQIšZ(ĸ€ JZ((4RPE&h¤:ZJ*Ä-Q@Q@Š(h¤Í-QEQE5I$æœ(ĸ€ŠLŌĐEPFhĸ€ ŅERŌRĐEPƒE Ĩ ĸŠ(h¤Ĩ IšZZ &h RŌ Z(ƒH(hĸŠ@Ŗ4Q@ E™ ĸ“4´ 3KIE-™ĸ€Š( J )i( ĸ“4š ”Sihh¤Íf–’ŠZ)3K@Q@ĸŠ(Q@ E™ īEč4 FéÅ QԊ( Š( RŌRĐEPEPKIEQEfŠ(ĨÅPEPŌtĸŠ(ĸŠ(hĸ i3EQEPĐi3E \ŌQ@ E% =8¤—4Đ1ÍE%- (¤Í´Ūôę(ÍRÍQ@Q@Q@-%fŠ( ŌQE%Q@čĸŠĄĨ¤Ļ€E€Š( Š( ĸ’ŒĐŅIK@Q@Q@ E%-QEQEQE-‚–€Ji( Š( RŌQš\QEQE ZJ3@ i´QEP(ĸ€’ŒŅH–Š)€QE€(Q@ÅĸŠ(ĸŠ(QE (ĸŠ)i:Z(ĸŠ(ĸŠ(ĸŠZ))hĸŠ(ĸŠ(ĸŠ(Ļ’Š)h¤ ĸRĐEP@ŖŊ´QA Í/jJ3@ E%-QI@ E Ĩ 4fŠ(Ĩ¤Ŗ4´QEQEQE )3Fh´RfŒĐŅIE-Ph3Fhĸ€ŠJZ@QE0 (ĸ€ (ĸ€ŠwjJ)´RfŠZ)(Í-™Ŗ4´QE™ĸŠ3A4Q@ š(ĸ€ (ĸ”…-%-Q!EP@ĸŠZ(ĸ€ (ĸ€ (ĸ€KIEŖ4Q@ E Ĩ Š( ĸ’–€ (ĸ€ (ĸ€Ĩ” Z(ĸ€ (ĸ€ (ĸ€KIFhhĸŠ(ĸŠ(ĸŠ-%-vĸŽÔQEf–’ŠZ(ĸQ@Š( ŒŅE(éE Ĩ Š( –’Š3E.(QEQEP(ĸ€Š( Š( ŠLҚZ)(´QE–’ŠZ)( 斌Ņ@Ĩ4”PEPEPEPKI@ ĸŠ(ĸŠ(Ŗ4Q@hÍPš(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ ELŌŌRĶĸ“4Rh¤Ļ€ )(´QEQEu¤Í ĸ’–€ (ĸ€IA4„Đ0Í™ĸ€*QED‹E% ĸŠ(Ŗ4Q@hÍPŅIFhhĸŠ(ĸŠ)i(´QEQEŖ4Q@ E Ĩ Š( 4QE–’ŒĐŅEQEQš( 4fŠ(h¤´QEfŒŅEŖ4Q@ E Ĩ ŒŅE!†hÍPš3EšĸRĐEPšZJ(h4Ph3Å h PæŒŅEŖ4Q@hÍPƒFi)hÍQ@Q@Q@ii( ĸŠ(ĸŠ(Ŗ4Q@hÍ!8Ĩ´RQšZ)3K@Q@™Ĩ 4fŠ(ÍĸŠ3Fhĸ€ŠJ(ÍĸŠZ)( Š( 4´”@ Iš( 4fŠ)fŠ( R撁@ E”´QHM0ŒŌfƒHÍĐis@ šZfi7P”•j7Đ2J*/3Ĩ;Ėö ŅMžÔš ĸ“4PhĨ¤ ĸŠ(˙Ųleptonica-1.86.0/prog/cavalerie.11.jpg000066400000000000000000007255771506303110300174270ustar00rootroot00000000000000˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āä9"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?âÜfŽĮZwŠYr5ĘÎĸŖ/Z‚A‘ÅZ~Nx¨]r´ŦqQr3š—œqLۓ@ÆãpÍ3o•0íHTgíE§$@õŗl0<~5q—&„˜{S¸XĮē˛ĮN8Ļ­„}ĮëZōF :sU¤< ŽfO") DäíãĨ9-cdV6–āS•6ļ bå#Ņg”˙ŗB?…r}ĒuQŒŅˇŊ+•dU’(Á\(<Ōųqį;ja$äRųcŌ‹ŠÄnĀANUį*]Š4đ™öĸáb<Ā}qN§_j”¨§ŌˆrHžŧSö6?*”¨ŠvZ.;Ŗ€ĄN øÅJąĒüØÉíLn[8¤(ŒĶJ<ã¤#=čÚh¸˜×9=0ĸöQųTė1€Ĩ… ZÖ6;ļ.Oĩ=mâ˜×J˛i<ŗÔôs1ōĸ5@ "NĮžƒō§œP:tĨqŲ 1Ļ1ĩ*o–„ũÕüŠĖH4äRĮĨ "'´‰Į¯åP›8‡XĮãWˆÆ*23ÔSģ‘ŲEŗ>JŸÂũ—rņ¨Ī`zTˑŠ˜|ÜãĨ+ąrĻQ:DũŪ˙Ū¤:Ež>éųĢĮŋ­8æŸ3îˆŖũ‘nğΐčļøáÛ?ZĐķĨ \ōî‘3N†‡%d"Ŗm ‘6 Ų8ÅFÄĶö’gM-Ķî’ĮũÚ`ŌîJä¨ÜÖØåĒE$E?i"}’0˛Ž00š?N)ŖLē,WËäWG’;đi:š=ŖdŽté—CūYäûR2ë(Ô×H:äĐIlqŌjÃŲ#š:uČp~tÃep:ÄĮé]+ô¤AëԟĩböHåü™Toʃ ƒ!…ueU—Aü)Œ¨ )ûPöG.ˆáIü(*Aäõޘžœ••ÚÆ™Ü ũhöĸöG0G< 6žãŠęü¨Ô’Åq´sGĩōeær¸WC6› UŠäöĒĮJ‰Ãíü)LjN›2ŋZÕM%s€ųÚĻ]yf§íŊ›11ŪŽâļΏčÍIũ‘yfü /hƒŲŗŊ/PEmdEę3Htˆûøš~Ō!ėŲŽ(ÆsŠ×8?Ä:ŒæR0(ö‘g##VŠŅˆ8ķú CŖKü.֟™8^'éQ>āŖ™+*âŒUŸą\Ęb°Ü˙Īũ)ķ!r˛¸TÂÚbäeõīTčīTN§E ŅĖ쑁¨.äË×ņŦ›s ”ydƒíWšÎây5#ģÃĩDNMHũi¤s@ Å9hÅ8 ­LFŖš”h@§ )Á@ĮԐĨQëJéNP< r(4ėr(FôŖœ8ŖļiĖÚPŖ‘JWŽk(ŦëĮáPžÕa—Ą cĩĘė:ņīQ`zbŦ@# ãŽÔū´Ō ŠiđGZ”SÅ7ųúĐ$äŅŽzSœRĒûĐlģ°Á#š­ Á9íW€sÖ¨ĘŲ<hÕ<ԀÎ)ˆ HŠYļšb$EũŪqM*jl `t¤ÛīJãą^)Bf¤ ĪJRŧc4hÍ<œPĒIæ¤ÛڋŽÃ1Í< \ t¤š§ĨUÉŠĨpëP•ÃqV}3QÍ*¯§ZLâŠ恍eÁĻ€IëÅ<ôëLį‘@>3N)ږ2JķNnqHŧ°{QŗĨKÅ! ļ tæ—n)ûsHËÆ9 ØsīQˇŠ OĨ4‚9‹…†įĨCĐT`eĒUįĄŒ^ϜĢĶ4Ą@<Ķ•piŌ š]Ÿ;aéNÚAÍ #Å4Œž=*`8Í4¯˜~0xĨ#ž´ŖŪ‹€˜ÉÍ 84Ŋ3JE8)§¯åÉš@r(‡“J Å;iŠ~œR `TerjĀRA&šTõ cqOÛÅ(Z“o^i6įš™—Š6዁-3o5>Đi¸ų°hÕŌŸ´õ§Ē gۜWĶĨ S‚sI´€OZ”­ S@íéKˇ§­<Ž;Rũ(zĶČĮ=évŽ)qŸĨ ą8nœSÁĪj níO ÍDĘ2zNƒžĩ#/j=äœãڝÂÃqĀî= &ōRí#”Ĩ2}(¸Ŧ3`=‡ĨFU@íÅNšW#E+…ŒĶkæÍ•ČĸĻ[VŒ Į°Ô 9Î8Ĩ ƒīR*đ9 -`đ*]Ŗn{Qˇ94€„dw§)§~4āŊé@ ëM#-ĮJyáM ãĩ ¸8=*@ ĮëRŽ1ƒ@ŅŌO4¤v§:Ōmœæ€+ˇ)U{š ĪãKJ €/øŌ2ôŠQN(#ĩ!ĀÅ!^įĩOˇéԘĀãšEŒ‚)vôĮZp^ūĩ" Îh›=)TqČŠf‚˜ c 2OaNۑKø r¯^h= äâšž*v^•'“@­)>ôā9ëNQ¸ą ņ†ÁRqĪ6p06ŽED8Į4˙RĮ~iÄdį­ eĀÎ2{S1øÔû}O2įŸZbąX)ûŨģ @§Ž8íOpČ8ĻŠvz6dp(ŒÔŠ=iĀ{â€"ŲëHW‘čjÆÚŒŒãÅEjœįõŠį§4c§ ˇĀãĨ8ŌĒķڀØŌĐôÍ<Š0( JëNAÍ+ڀG^)Ã!†E"Œļ*WNr)€Üô§č{ҎĨ9G<‘Ō€{S°3Čâ•W'ڝ°įļ(2ģ[ uĨČūíJëĀ Ķ6ûĐ!ģyŖĨ#š°ŲĮQTĀŦāæĸ“žũ*W$nõÅB­žz@F˓Áæ˜Wžĩ9ŋĨF@=ŠĶΏÎjfQÉĻ?`(ĐF3N€8ŠAÁūt‰˛xīôŦ‹‰Mm0ũāŦ̐|âq֜E-†Ä8éVĶ…õ^ÉÍ\Eâ›C Š8*"†_›üip1ŠW€€:Ę˜vúԍ€*28 ̍õĨrĀšŠXņV ~ô`úäTÃJŌŦc )ôĨp ƒĶõĻŗŒôĢAŌÄĨŗŠC)ž‡Šr¯Ę2¸5i”cĨ0 ՍUē)HÎFŪ>´îž8ā C"#Ņzúš~ßQíOÚ;v§lųz}h¸…;ģ`ôŠ‚îŌĒņĀÍ< +Í "|tĀύsˇõŠĘqĐŌl` ŒOŨ4ģ—ûĻ”ĄIŪ€ Œ–Ŗ`¸ÎŌj@ <Ō°ãPuw+S CÕM"Į’xĢ* ‘ĶŌ†16ĄõĻ–QÆ H‘JcpsH•CãđЁÅJ‘äqON( F6į#ƒQĀĢ%zÅFËĪžĩ íô¤krø=qũ+.ë‰pMjã2cž†˛īīŽiĮqËa n*ęŒUKaŪŦą ¤–ÚęMS$VPĮ­FČG äSåšĮīS=ųÍÚ¸y÷OøQf+ĄÜ‘ĀŖcTgPļ9lēiŸÚļųČYŅi¨ąs"ėk´bĻ VgöÍēũØä'߃­.>[wüN(åa΍0 uĨ*ëYŸÛXņî˙ëRląų˙õ¨äa΍nëKƒšÃūט“ūŒß™˙ •uiŽŲûd˙….F>dkŪ™Ž3Y‡V¸ā ‰˙ Štxô˙…>F.tiíz͇ŗFŖxGüƒäüøS†Ĩ{›L“øRåcįFŽ;öĨ ĪZÎūŅŧ=4ŲįūŸÚŋçÉ˙|9sŖQš˜.xéXãRž6FŲŌũąr>ū(˙€ąū”r1ķŖX¨ÁņHcÍe˙lĘT˙ KõÃũ–“ûqņƒdíéK’Bį‰Ļã#5QŽĩžuÁÔÛãūÚgúRmÆzÃų1˙âhäųâh¯4­šĪ>՗ũšę¯˙Zœ5¨Éæ#Ÿ]˙ũj|Œ9âjF¸įŊN0§Ĩb˙n ˙– ƒč˙ũjkņdæŨĮüRäsÄŲQø{S¸éXëânž[ƒøT‡^ļaK’]ƒÁ28§qīYK¯ZŠ7Oņ§oØ˙yÁô8˙9%Ø|ņîhɨۯ<ÕOíģãÍ#ūLū׹ëį1˙€7øQË.ÁĖģ—pëIˇŒ÷ĒŋÚļmœHs˙\Ûü(ūŌ´ ÄÄ˙Āü(ŗė;ĸb?Z‘#*¨žˇcū°ŸĒ7øTé{jÍ2/ûĮŘ]?:'éQũ˛ÕžíÄ_÷ØĨûD˙­CôaFŖīF ÆE"HŒOī÷Ēmņ…8eüč1×­7#qįĶédŒgĶpĻ)FlSĮ­LĘ3׎iĀt¨€į¯áš•A鷏J@?sHzP28#Ŋ;ƒÚ‚úsS(Üš'ŸJ—ŒŠr’:sŠ”œΚFЧė !Žš>ÔÖ>øĨÚxĨیä āįĨ(CģØSĘķģĩ?*ŽAâČynFh`r?ĨIĶ€8 DasøĐF*QČéA^x4ĀEd\ {Ō¨$`Qœ´†Fã‘WqOžG4ÕÁę9 CD6GsÍ?iļi@*Àix-ך\dd;QˇæëJØQœāwĨī͌PriXôŠqéšMÅNé@ ؁Î9īP¸Îú Ë3 ÔOM0#9qíRčO\R@éOĻ{÷  î Ŗ“‘N<ƘŦ$ ‚1œRLw3œS6̌8äTŌ'ĄÁĻĒņژŦQ¯đ¨'“NP¸#aN ķd÷ĨŒŒPŧąŒg?…4F…đ HĮåRũÜšõ _9o›ÛšqÉĀ* ĩ(ä’xô¤_™ˆĮ4Ä Ŗ8<ã­H.84ĄxÎ*@ŧŊ;€ô”ĒwõĻ÷ÎĮzyuôrƙüjCíúTkÆ8Ѓ‚{ĐLcw')}˙:0#Ķę(Ũė(U˛A ŒûÕyq€3R+’Ä΍ĻÜ`.@&ĸˇVcøT2ā*° $T2 ŒuJˆcõĻŧ€=éPaąÚ—tÆhQέ  ž3œT„x=hÆI=(_/^iá~”­ōŠ;sëŠ~1ÔP4DįcÛits9­yøõ/3–§ ÂDöËōĶ5ŅØįŒw÷Ší×å*-H H}ĮķKr%ąļŸhÖŅË*õ@I.iÆ -zØûjI2ē*‘‘ûĩŸĨSﰊHÜ1,3ËđĒZęŲM,oĶŖ1'ũû?áJˇzr„Aô@)œ ÷b_Ī˙­Oû,'“yė˙õ¨Đ5j–I€ ņčĸũ¯l9 /♍ūÍyŠ?sƒūņ KŅō4h=E:Ũ¨‰GÕ(ūÛĩ*p$?€˙o—îŖũĪņ§ĄûÁ™ÚĢEĸ ČoöŊ +!ΰãõ§ jĪ…ËūŸã@‘ŖŧGõ§l‰sˆŅ}@UĮōĨhör ›\ˇ ĀvüøÕc­/™¸­4Qqō;eF?.?• j€įn? éOŨė+ČXüAm°nI=?ūSü~•:ĸíĀĪü˙€?ΞvĀ>…yūĻ—ģØ/"¸ņ Žq˛_ČqúŌ¯ˆ,ķ÷d8úZ €@>¸äæ•!X‰ÃĒ}HúŸåGģØw‘ņ™Û7ˇüißđYļŖÜ/øĶŧˆ€ŒcŲp?§ kr Ä}Ų?ĪķĨî…ä7ûvĀõŸ¨˙?ˇ-=Xũ ŸëIå[Ž‘DNŠƛöH&ūĨúÃųДBōũˇfŧāP?ƜšÅŖtcƒéņ¨Mą0Eų/?ΏėëR?ãŌ3Ÿöô_ëEĸ‘9ÕŦ”dČĀēh]kOÛū¸õé°Ô aoEĒ{Áūt>ßvMŋãĪøŅh…äY]gO ”˙ß ū(ÕlOIO?ôÍŋŠ 6×§Ųēú֔i–]ĐmäėÔ­ŪEá¨Ø–‘Hõd?áOûf›ŽeˇĪ¸Et{yFzv—5 Đ­ŲĮ=ØéGģÜ~÷bęÉĻ7ÚûŽi :{!ļ#{ ŠĒ4 AÎ%Ž.)ÃÖäüŗÎŖ¯QūŊŪá¯bרlŒ[@~Š)­ĻYôû2ãØbǟ@O})‡@x[ŠÕTҧp׹déVDķū<ßãJ4KįČ?÷ۍTūÁ|ņ¨ē˙ĀGøŌŽ‹xŋwS#ë?֟Ė_öédč:y˙–M˙}ˇøĶá˛ėŽ>Qb_7?ÚAũsĮō4cjKĶP?÷ĶëE˙ŧ;tyđũĻxyĮŅŋúÔĶáč ââé~Ž?“û3UÆî~˛8 iš¨?ņ÷˙‘ž‹ŋæ—`>‡?ņõqŸváH|=?4ķƏ°kHß-ėx÷v˙ Ļš‹¨ÉôĪ˙Z‹ŋæ ; oDĮ?h”lR'†ã˙H Ļ˜|B§‰đ+ũE8.ŧ‡¨?÷Å;Ëų…eØwü#‘ō~Đāũ(Đ]H>€˙CNķ5ā9‰O¸d O­)ų­ŗøéJōî?wąö-Æ~[÷ĀõŨ˙ÅRķļĸãéŸņĨûn°¯Ÿą˙lړûWTîĶÛ>Ņ7øĶ÷ƒŨhˇãĻĻįę[üiãJÕ ųČÃ4ŅĢ߃ķiōūŊHēŊæyĶäķɅ/|=ҧMÕT.˙ļĪūĶeŦŠČēPG?ĖT§ZēRsb˙ŽEÛŌ7Ųc?ôĶ˙­Gŧīr']ũvĨ Ž•$ũDu(ņķēÛđ?ūĩ/ü$P.7Bß÷×˙Z{°{ŊÆ#kč1äŖgĻvCNzđ<ÚEĶŽ?ÁĒAâ;S˙,¤ü8xŠĐŸš(áƋ>Áu܋íšŌãuœ\ú+3íúĀÉ{ŲÕŖ¯Yp~įøĐ5ëÆö—øŅgüĄ§ķF̍rZÄņé Ōfû<éí˙|¸ū•quĢŧĘß÷Éū”æÖ´ū†~?ë›…/ût2ˆ×/1Ξ˙\7øSŋˇ§ÛķYcũé6˙1W“WĶú ¸÷ŋÂžē•™Æ&īĐ#…/ût5ūc)ŧBœÚ/ôØé@ņ@˙Eë0˙ ×kë?ųîŖęĄol†ŨÂ=‹āŅuüĄ¯s)|DšÃ[sę%áN˙„ŽÜ|Æ > Ö¨ēĩ<ũĻŸI8Klď:éķE×aëÜË_ړÄŸĸƒN ļĮ0\ķūĮ˙^´Ymw}¨­‹ˆ-ŋī•Ĩxö{šHkÖœĮ8˙€ņ§oYääK˙|ņ̆ÆÄŒ›[ûö?ėÛsöH?īÁi”ÎģcŒ—aõZš§7>y˙žøU§Ķ,Ë/ú$#Ûm3û&ē›XĪáJđxŒjÖî7úĢéR.Š`F>Õ=7sL}Nc˙Ŗxb?­3ûLc‘nAö‘ŋƏsĖ=ōí !˙/qßT}žČ ũĸ!˙_û ĪÔ{6žiƒAĩÚCI+(9 ĮéE ‘dęMœ\ÄGûÂĄ…™l âüXTmĄZú¸Į˛éH4;]ŋz@~‹ūũĐ÷‰žÛkøų‹'ũą@ŋļVš‹Ü*3 ÛāfYˇĘ?Ĩ@t;vs‰%üÆ•/w¸^EīļZąé0ßcš“íļœ¤Ã˙}Š ēšëįęŋáAĐmÆ14Üzí˙ ~īpŧģ q‰ĸ?đ1Í=™7ĨsõŦņáčXqq0Ī _đ¤>‡§Ú$ũ(÷{ŠōėkĢü=jUŨÔ=ë ūĶ˙,ŽŲH=ÃņTá \āâü˙ß-ū4íâģėm`‡éÁ束—œÖĐīTn]EÁaJēVŠ—Snz|íN˸s>ÆęãŽiØõÍ`ϟĒc-¨úaS-ϰ9[¨Î=X˙QG*îŪFāɸúV*CŽ—ĮÛ ö+ŸéRų:ŋüũÁ˙|˙õ¨åķ?÷$–ŠŖ\§LĐ"RNpGqRmTč* Ĩvį PžI9ĒʀAž;Ô.NE0+˛áxϜåR˛ázöÉ\dRŦ”88Ĩ “Öƒžrh"ŧ?ZR¸Ō•‡ĶĨ(\¯•.FAĀíXø>iúÖŨŲ*§×‘Œ?ÔÕGaHš üž•_S8Ķä΍ūun0 Uue˙‰lž¤¯ķ§ˆ‰l%Ā#Dv'ôĻÚmûščøS‚ŧgčsähƒŠÂ>}ŽqNîAģ#>šĪō4ė.0Jd{ˆ§ŽÜõ\{ū4\,A$eTÜ??ž*š|¸)9ö­™å#>‹ū P4,§›>ų˙>68–ûŋúÔŲ›Øâã?¨ŠBˇBÜã˙ûTĮ‹xã8˙gŸä?­ +Ã!b@úåįVáUŨÂū ˙CPų+a‘ëęM9\{ķ<A@Ž0ØÜõĮōŠS'…# ˙/ūąĒŅ’$`čx?¨ūĩh.3•´sXVšŠ-­XķoûƒˇųúŽô6ŸhĘsm ã?pd~Ÿ¯JĐkL6õ|yĸ0Ø,@=3ūÂ̘V)gÚä/Ų#íü?įü揰Yž ´|œp?Ī?įycu'ßįúSī÷Īp9>ßį4ų˜šJMĨY !C“ę/ķúTMŖØ6ËČ˙|˙ų÷­.F0ßSķū{ŠC‡į# däā˙ŸķÍ>f.TežgƒûŖŽ˙;ˆ˙>´ÆŌ,°~G_\HF?Īų¨ĘA$ 0ęÆ?—ôüi ü¸î;úŸķš|ΏšWc,höŲ <ęOŸüĪŌĸ—HDÁÆN[<~_¯ķ­|d0< qĮô˙>”‡rŽFW9ú{õũAü{SæbqF ąPn&n;˙žĪĨ0ØÅŸšáųé€9ükx¤lČ=ĪOķøņėjģÛ'đđxāpGų˙"̜\Ļ1ŗŒpŗ8Áųƒ/OJh†E`r9 |Ŗ¯ųôÍj›p7NœúéĻÄĸŲÁ?ūŋūąüiķĄrŗ7ũ#ßAäm‘¤˙I&á€'?.yĢom SÁcĀ9íūĨ#Âį9‘Īŋ^3ô§q4U&ã%VæRG\1ĪJzŊĘEäÜũߜœûuū´’!ŨŧN˜ôįúMVcœdņבøõÅ1j'ą‘ŋÉũhēˆ;’įp÷cĪˇãMUÉ=Ųšõäzã?Ž)åƒ)NŪyü˙JZŖŋ´5.Ú8$ޏ{âšo¯Ä¸ķķĪ^zũ1šBQœ•ā1 ‘ČÉ˙>ĻĄ9uh“¯§^ĩEĖŖ H'åŸËƒūčʓF !›Ã?äŌå]…v]]bųFá27;y*A­ę* ~P•g<ž§īŽrŠūB—qũįåŠ|̰]÷4[_ŋŠ!‘ŨOøŌĻģv#ÁŠ3Ø\‘˙Vr°Â3Ę[1õî)ųSŒ37Ž.´ųcØ9ŸsDx†Rr`R~˜ūĩ2kͰȞnēßũjÍ؃• ‚3÷OOĻqôĨÚos´ũ})rG°sHÔ}~HĀ-dËčI8ūTĪøIĨ˙ŸhŋīŖYŗ ŲA8ĪĨCöEąiĄךiÚNīOJ“ ŒŽi˜Âr:õŽsr&č@Ēį$ŸNĸŦäbĸ~¸P2žŨ*r;÷Ģ 0yäÔe@i{æ“#ÜRĒäg§JqR:P}TũhŒxzR˛€9❟—ƒž(c)^§Ėeēá˙ØģžqĀŦ§\ŊTE"ÔYĀÅVÖ8ĶŸÔ°éõĢ‘}ŅTĩŸøņ˙ļ‹ũjŖņ"e°ˇŋ.‹×Ģũ*(qöxàgéî*}LcIéōÔvÁŧx ÷G@ĄĒ[÷$~‹˙Ö'ųPûã˙­üŠĮ!°ÁŽŋÛķ&ãŧ3éģü ­€`ûØ˙ŲŠā÷-ŸĮ§ū=B–Ü9˙ŧGõ!cĐžšĮūÍI‚+ČČÎā?ĻjDPĘ ¯ũ“˙ÄÔrbAĩŽpxų‡õ&¤@ĒĄp§ņ_đĄŒv<ÃAMhÉ9?¯'ųŸåKJ¨üŽ?!KŋÃ= gĶųRŨ§$aúsÁúUFˇ3zœãž1ũ3V÷¨Ž?öZcMČĀfĀāä˙>)ę†&"BãķĪ˙_ú֒øã'ôūF¨y›…ÚqœžI•Mm0(v!bØÎ3õ=?+˄Û;Tgš?Ō—š9úęj–<…W=’3ųëL3¸Čۜp7ĪæiXw,€G cĮũķ¤ãƒüEOøVY–>do›;~īņëúTûÃŽâāņÁ?âh°^ā¤áąôãų)|ÁŸĶŒ˙ņTÖ#1CŽåšŖÚfl*đ8, ãüh°É –e × AūdštMėŠx8ūB€p>_ĮĖSƒԃĮC´˙Z„îė@ĮŸÎ¤bАr=ŋÉĻl8C˙|ņũiČĢÎāüÅ!‹ßîā˙ ?ŠĢ!¤î?Ī­Tx÷šČëÃŠ %T`!Î9Į?•!ÜĩæēĻâ2{ĮéÅ3Ė“ĻáQ…ÁíŸ@øū”ä;N7zŲ,s•Sœūđ˙•fP­ũįPė$nņč¨9cŸ^GôĸÃØ´Ō Pw/¯^´Ķ"v˛ž?ŊP) 8ûāŸũ–ŽO8lôäņū”Ŧ;ƒJ˙0EúĶVwČČđĮøŌ0ĪFë@ˆūŦ~?ĨˇĢ)bqŽÔy™ČUn{í5 ‡/‚sõæ­Éā|ūŊ!ĸš28Ál}?Ĩ ŪŖ†n=yūukË#č|˙0qĐsØR¸ [žßûę¤F߯?Z“gŌ”Žx]ÂmÂÔDķRļs¤ 0M <͈ÎqKŽéø›!ÎŋlĶ‹*‚XņŪžqT/f4?;ĒęúÔÖĸnÄÖSˆ<ĶҘãéž*ŌātéUl­šŽ¸'ųšļ qDˇ°/Í)éĮjvLR1éJã#ÆáÖ¤P@į4Н=Ē@ @„ŲÎiN1Öœ 擯NԆGĐņ֚ę1éô4üã¨üqIü]F(¸˜ ČÁõÅ5mq÷qާ"§#*0;ĶŗƒœqNâąIālũ҃ÎAéųĶEĄP2ūũ0k@ãâŖo]ŊŠķНnæ0ŠĮLŽ:ŠH*šūö ^#*8ãĐTH¸lÔcķĻ›EMŒÍ…ÚØã ū–yž:ãˇéSî}ŲßÁūđÎĪĩ;bžų~ĩWPÆ@Č=ŋˇ˙[ķĻĘŖ9#‚­‘Žëƒų˙ŸķŠĘĢ ž}øĪųõ⋒@1ŧįŽžŪŸįō åyPõõ˙?äԌ¨Čū}ŋJ­ŧöũ@<ŸŠĻ+ųOŪR1éÛôū@Sv†÷Įų÷ūϤT%ÆdŽ0?ūsû>•Y$ČčHĸö F(É8@_n?úŨ>ĩņEŊT''• {úZÔ}*L“æ¨ |§¯˙Ē k9Đķâ9üOZ‡o"ŒÖh¤–Ns’xaõéųÔfĐ×rœāƒÆ}Ŋ*ÜĩI‹"ŊŗÔūËĢ2™‘(l’§ŸķڅS 8isKb d2>SØô8ŋ…@ĀŠŗ3¸Žã˙­ūīéZ’+ ,ޏüūÆ0E†Ãžxũúõĸ‘ŒÂ –v͌gõ÷ũj"ĨH Ēâ#ƒŸ@:{b´ $’bžšnN}čû,Ĩʈˇįåé×=ųĒš6(íÁ;—õ{~Ĩ"ÛpščN:韮*ː@-ČĀĮˇįũ*Ąš‡¸#õd{Ķ@ô$_¸ŖåTļ ĪŲãōëNEPĘÜį’Ŗü_ËČŅ@;eũæÉ89Į¯ō);sÎāúcųs@ą:)ų‰āÄĶV?•įqÁæO Š! ‘ąpT1R<ū4°Ē` üĮœūúĶ€'™FTcĢgüūTāÁTAÎs¨õĪ֞¨ŠÉž„õ˙>}ibŧąXûũ(@4O˜¯ķüĒ@Ŗ$ärO8ô˙?¤MܒÍÁ$ž;zŸj™T€7㑏åū:Š]›i ’zcūĪ1`úÎĻ•ˆ2ĂĮ9=>SîiŪXõ1fÜ(éQHÛW9ČŨyĨŲ‚}:ĶņžE$6BžĩE,š˜ƒŽzSq…Î)@§9Ĩ°;HÎ)ØÚOĄ41Œ@í'¯ŌžĒ@Æ7ĻîôŠcįĨ+NárO8âŗ@ų‰$œV­ÎījĖ#ŠõæĒ,$I§üiąžķ….1×%ŋƑ~dqWvúāS‘Đ Ÿ¨?ĐĐœŽ2GÔ˙‰ĻņÎĻr ˙:•”/pˇų™æÆˆęOOքÂÃ*O÷GõĨ†~vā˙9ŠĀķÚä˙ĀøŌP§sŖū†‹ŠÄmnXcœäŽøS‘’ĮqÉ8#ü)Ĩ‘Tąû§ũœúéę¯åüŋ)=ķũ(¸ Ãŗ€ =WqÆ=éčĨ(QĐ ĪéOā3yú˙Jy_›•8ŽĖ*M"&DpAÁ=ųÛ˙ÖĨH#č#$㌏ĐÔĄ[? |w?7øĶˆfSōŸaŒ˙JWŠÂŨQ˛Ų,œ‚?1SgĖÆTgÔ`˙*q"2ČĪLŋւw&2‡#ëüÅ ‚§Ą÷ЧeGSŸÄŸæ ą@{ōŒūFž3Ā>áOô4†E…,p§+˙ÖŠ2pĪ#¨ũ•;c‘Č~û_ÔFRÎīË˙ą øāŋḏëKŒcåÁĮ\`˙*0ŧ`!˙žĀS¸Æ1ĮOķķP.Ušr}‰Īô§7žFGōZp úzū(ԐĨG99õ˙¤1CÛ2OpŌėÉû§˙ĻđíÕN8éŸëN!ŒĸŽ(`#…ÜuéũM U{ŽGđíÍ) įæaĮ7˙Zœģ?‰ŗíū› •YGš"ĨT*FãÁë†&žĒ„ qéĶāŖ§éŠM•aQp3īRAúĶJātúõŠĮvĮ­K¤€1HFįđĨž Œ{ŌíõéH#9Ŗo‘ŠyQÆ>”t ČéQÆ _Ä˙:›įĶڍGLsš.Ü1N8˙'ց¸=hŦIR2W°5ŸöEB$ÎcRKĨ­h ģA’~•[O‘æ<ŗˇ_aūM5ĻĸdļŅypĒäĮâjԌ“Öš įƒR¯é BŖ ëëA`ôĨ úR•$`Ž”Ū)äã§ZB==iC``*օgšL’xm­ˇ=NĢKąB´xˆä2¯{ū=iĢ"6œđ1…útëQšÁđŪŖžŸųéN‰`Û„c‚ų˙ ÕԆ@P‚*8'?‡ųüę% yŠ uQĀũjËchbũ>^XôĀĪũoŠ]Ëķ°9Ü q×ü?Î*–ĸzæa&Ō^2;z˙‡Ŋ P đ8#úŸđ…@ĖXnāÁ˙?LN į€Ny 3ž?/ĖĨYb€‡§<œ€OoQ߀)쨄váœäīÆ>``Ā“žTŸËŸĶšF!<ˇcČ8įëūĀ<˜`n;pßĖSŲYXgû ŒĻqŸĻúôĢ€&P3ķduöÁ84m_(ĀFIíßĩ*Ž {˙…? H”`ŽcūĪ֔m Æâ Á8útŠW,zöėyúŸOķۘ XÛ+ÛŒsõ>Ÿ§ëOF ÷HÔŧãđ˙ë}z¤Šˇí?ß×˙ŽĄ:đ1×y?ãū?Ō‹€“Đ/ûāgķãō´ß<‘M˜m1đsŋ?CųÕn=čb;Åj']˸sÅJŨi¤2˙ZšNĸ Ø#ņ”ĶĪ͝+ Ā7č*&8'Ķ­!‘¸cÂ?CŌ¤VÉ>Ɛ‚7s@ č1×ŌĸbÜqéS֚~R{ƒÍ nGAÍ9rúS„ã§õŠQqøŌ*\ũķĮPk;ĩĨsĀÃ$Օ O_ ˙AKįsՊuú˙ŸÆ‹…ˆT˛ ˛¸ėÍNåß>^ūõ0ˇV^"PAÁũzŒ[.H¯˙Z.˜j†nRppŖĶ8ū”Ļ@xŨíÕiŅ@yߐM𿜠*pe?îŗ…ƒÛyRGéMûššüÆŦ"ˆ ŲIbJŒ*ą?tœu˙&‹ŒTčIČœšxī´téPų œG°ŒSâ×9ÆOšĀ¤2P›{ŽjAĐg9Ļųn1†˙Ÿz‘SŒjF%8/z]§žĢhĄ{äRã×Ĩ8¨Î28Ŗž=Šp§§4šäsOĀ L#…7RÆ*@  Ļ”€8Ļ}ųÛoˇŸ˜āãĶŠŠíc1ZDŦ~mšorzÕkœĪ} ;¸$ÃĢ +Híž‚ŠčŦJÜf=*]Ÿ)Ļ÷ãŋzUÎpOåPP…q׏­)Æ3Ås7zãĪ;Į †4ƒ‚Üã?ÎĒ1rؙI-΍š9Íe^jŌÆæ;8Ö@:ČÄãđĮZŖs-ܑ˛4ė`d ɞOĐū)mDŋBĒPaš'§ =ŊĶŪ­BÚ˛\ēꡭ)¤äqާqLƒ[ŋ´ •ķš^0N3ÁT÷ļŸn´K ¤āo'ĪëTo"¸ˆcŠ%Xˆf!GĖ1×ķëžj×+ŌÄ6ŅĶÛ]Au rÅ"•qĮ׏ЯÚš¯ß"Ī42đd}Ņ€:9Ęē… Tķ×§ŒãĘėkt5”nžž†‘XāšV^;dUxÕãRŒxƒŒ’;Raž§•*O='U~tņ‘@Ā’ëH8=:Sû~4’8DÎ{qߚ@Wi–’įĸŠŠMĮ,øĪ§`jĒŽ\+nęXõŋ_ĪŪžšL7-NĪåWk ÷ ’:gŽ˜ĪųüĒ" /N§–GéR åšīˇ°ü1ūĮ,üāÛå'üGę)ĸYlfÜJq×;IŸøR§˜ę7“ˇ?*õ8˙"”í‘YK66H˙b˜ 6ōĖPĻ3‘Û?įüô`Nß(< ņ‘ū•"¤î;Iį,qũAũM'eÃcû¸'ü‘5›ąXŸ9ûŊžžŋˆĻ+ސ‰P€/MÅ~cųôúdS<Ŋˆģ×aė#?Ÿņ´ ļI¯ëū"šKo-…@N:㗀؎hØÄ[-õ ĄĒ[÷8ˇŪÉ;˜ãįūzV“īáâÎ>R ˇ?—øU@€cwĖyÃ1ČęqŠi‰­H’M€ļâFbsMȍG”ą€;Žq˙׊ r cŒpAü0Ī֑Š•ųØœ ņúiˆ§vã{HČÆŅĮĶŋųæĢ\Č9bŗđ{û˙ŽjäŠQ÷ŊģŸRO?įņŦŒŗ319~I’}Į¯áž•Q%Ürî-ōŒIŽAŸŽ9ĮįøQ€€ŒüⓐĀĶę?•7ĖÜ6¸ėžzv?‡'Ōž¸9 Fî‡QĪLūœāU’8%#}ßtŒį>ŨĐFÕaÎU°đGüõúS•@e@ BÄíįŋ9Ĩ*<ŦpŠģųŋ#Ô~9‘‚°î>ŧŸJO7nē2~f¤eæĀŽŖoˆÅԘŅRī9w'5FlqŠģtq&3YėI|qÖĒ!"ėäíYē˙Ũ´rd#ô˙ëÖĨļcŽ+7_#ušėÜū´‡ÄDūū û>īķØsų •°l@ĀR¸ #§~åúôí§OĐņ&žXu᧝˙eM2)?0S˙ôÉĸãË  ú†Īô¤ŗ‚ߊ˙1¸ˆÃčŧ͉ rvõ=QŗŸČP AĶ!ąÛīc˙f¤ÜÎ~ŋũ•9‹‚Xd č ‘H š”ã=Ã…!‰ŊA8{d˙ėÕÚ"lb ŽšÃ&ĐåĪ|y˙Įk)1ķ'9ÆĶĀüĒ’š-›_ŧX™ļíĻ ĮøSīî\uÃt/ ļŒ;|ÁFI` 8§ Ëm8čO?Šâ¤cB´j]āgúҐÄnņČũęÔŋ.ÁˇpúdLR18lāû–Z.ŖÉ]ĒŊpwõŠFX•7Ą&0#îĀĮ98ũ*E`‡RĮ<`˙U&Ŗ9RpWià Ü~ŧS‚ƒ¸ z <ũGĝŧÁ˜ÃzĄÁú{ՄĀ@ĀÄsœĮŊ&RԌŽ;㨧0Rß(Î~¤S@epH.s׸ü…*¨’BŒá9ũi hRĒ…qؕãR" ŧ?*@@AÁ>‘)øĮR)\„Ÿī{õũiUœ÷9ŠÁ´ nÜdĮ­!L.1RĒ į'ņ4a”œƒH€oj ÷ė`^ô…~n‚€°ƒ<į’)áw! ž´ŌŪ:Sđyô†…}Ć$w§õĮq@ā)~aІQLN?Z—͍ϕäzPÉÍ#ŠĖq§ô~ŋVÔ\$Ac–Į÷GZkQ2ĩ‚´ˇrĖߏVäū˜­™ā“ÍUŌŖoą,÷å&Cž8=?LUÜuđĸOP['^Ԍ1Î3N'ōõÍ7>üR…¯]M E !öãs”ëŒāV=œJđą`}ŒpųüqģĐęq‡™~`ŽĖä{ãõŦ›)"ˇE(ĸ$üŖũgšô#ŧ_ģĄŒ–ē•Žl›cĀļŒqô$˙Ö¨n.Īo*åVŲUnė}đAüéuY"ēP\ylÅp6ˇ'§L˙ÖúV}Ο Ŋ›Č[ ^7d¨$qžæĩIu!ŗĢˇ™wšwȰHėŧéųY÷ú’ywĐČ–@lg–8úzįbRˆÚ$‰ČʆcœžÕ}Ō¸Gf%Áa׎@8üM%I^āį} m(9Č[8čôolvÉũ+ŊSōgŋŌ¸ :CÔm#ËĐgåüŋ­w°?HPęQíYVÜԖćõ¨eRāōC„TŦoN”ˆČüEbjŠT’OЧƒ€2ĩ(ņŌ…ÁĪ€N?WžE@nHāc'>ĩ`ŲæĢĖ 6íÃ;p~™Ļ„ČÂa ,~iŧ Œ`ôųOOķøTnÛNF2X`zū_įųĶã„Čû˜Ē3ōô?įü曤åIo›ęÎ*1ƒ4iÃÆî3ų“ųÕŗ€œķūEVPģÛ`’G Ÿ|ĶB`;§˙[˙×QåØ†ÂŒp1Ņ1ųĨH˸21Į=ũŋúßĨ1°¤ y+ÛëČūcéM0°Ōš`ÜŨ9įôįō?Zd‘/›÷NOŽz€>ŋįô•ōëTŒ€Øé́ũ}úS6ėųBŠ$F?Īųė)ĻIõ §§ _ķéÍ<Ÿ``ŗpyÁúp˜§ˇĖ~öáП˙_ų÷¤‰7LHe''ŽxĪčhžX  į;zãĶĢ3’r9=G͝§{ūŋ…]yQcs’ÄōJ’§ôĒJåĀ lāˇcíß?įŠhDoŧ`|ãļŅžÜžĮōũ;Ō)Ā žF$c’z÷ė?Ī­$€`/ÉČ䁜ū]ĪJ†âe„ 瓎 ķú˙ŸÖĢrz’?(Á~S‚98íųūŧ}+ ';HųO𑎾žŋĖãĢF­ęÛĸĀ<îAßú÷˙õU[¨<‡ÎĐōëņĮéW4&Nårģŗ— Ôšsž˙ŽĻiG]‹ÉįH{‰ÅFHvīnxëĶNO¯°ŠB –ÆŌ8é“ĶÛčqОzŽÚ0+€Å€ÉšĮŸ&‰MųQÜŽGļčz]ĮŒāR1ƒß‚˜$úSØy›‰ ķ7vöį?•!‘ē‚Ō_$gœœ^GĶž)U‚6ÜĄųq€Ŗ?Ëü~ĸ”ķä@8üķü)ÅvžŌ;A7ŸōĻĮšyS‘žĒ$öĢ#Ų,?ŊÉ?ŸĶͰ¨ ũī09Ës’OųõĢ[@Q›ŒĀúúõ¤Ámr˙XNI§ę;œbžÜ`8ņVR?%Ā H'ægéūzíTđ #'éíū*.;gSN: îį“‘ëõ­o˛ŠĘŧ#r¨#捋=Ģ{đoĘ#DŒûĶARĮƟŒqž”0Ęã5ĖnŠÛxĀ階EĪ㚙—§P2j98Bh`AˇúöÅ+§?{‚iŸ1ŨŽœR(06āSz=iĀĪBĻą;xŠC ĀzԁWŊ°xū”ąŽĮ&†4eŨåfĀ=°*ž | ÕÛņļ\ŸAũj´ ŗÖĒ;.ÁU—⇲ã˙J؈€9Žk#ħÛ°^’u˙?J¨?x‰ü$Ū%éŠé§ëƒPCwEV]´dđüsVŧBâV‡$?ŦČʛTSƒō į“ĶķūuqøH“´ P¯ 0yc?ČŌn'8ūd˙!TQÚ9Føã nãôĢK{e$t䃏įCCš`3+cįéܜ1RHyúdSLyĘĮrôü?Í*Ė=đĮú °0Áƒœ*ƒü”ĶĶ<¤í?Ũ?üHĻ%š#žyâÔ¸S˙<ÉôųúôŠDŒä?Ųn?­0:ķLöNjEF lRŖČSČ`¸Ūā˙´Įú@ˆĐãZŒz˙ú…IąÉāčXūTÁˇĄĪsųą§ÉĪɒä˙ĚGˇ,I\Ň_ĖͰøŸĸķüęM¤`@Wú icœy̌|ß7˙e@ T¸ĮĘ˙Ųip0šĪû˙Ųi㑄 °÷ÎZ Q˜ˇPŸũ+ŒŒčĒW=p¤ũ˛bf“PķC° Á˛OzãéíZR Ž&0R~æ?öJÉĩûŌnĮiÛū~•qŲ‘&l>UĘî*ŪŨM9KųaĶ'sRO–Ĩ•Up9Æ?đ”H)‚ƒŽĒ@?@*F.æą ˙´ÄSÖ“ĶŽ$˙ëRaŗōôíō(Ŗ´üĀsÜ­(|‘†ĮL–?Š™Ü>¸§×°Ļ‘Œ‡ĪP?ĸŌIÁSė3Čü;~4€‘d]āōIū.NqÚŽ­Ę<ÁˇļAČ5Ey'w͓‚I˙95"ČĘŲ^‡ˇ¯ ¤ŅIšc›•ÃcŌŖkp?Ī˙¯šKI"c…UBđjĐÉįŽĸŖbŠˆød 9ÛģwüębHw˜y逕:į/yĮ‡Zã¤\1Î1œōh‘ƒĮއüiāp>^}9Ēęė+åsß9ÁôĮøTĘ娌Ž9cO¯JRÜĮĨŒî=3īN]Ŧ:}é EÉ;úR`ä)Å@>æœA\{P;Į—_Zx ž{{P3ģ­q ŽipIÁ´ėtäf†ČëHĨ!Ā=éHãß5Vęo+b(&I íę h@÷=ÄļõcĐW9sįj7ë´˛DÎ}_”¤Œʔį$s“IĀęEdh7)Î=钰Ž|}Õ-ŒûT¤ü“Ō ē*-Ų•K)9?…09Ų™oĨžŪ_ųfā3įÜ’GāüëūäÅtöĶÂÆL‘¸“žŧsߎū´ãšūĪģ¸yĐÉŌnFŧ1õųŋCUīnÚú%ØâF'<ŦH0znžõÕ‘Ī'qÖBIaI]ˇ3”0áWšĮŊWÕĸo%.ąéĮųūU} Ā Ū\ ““īQČĸū#s—nģxĻžˇKw+ēæ5ÚwėéŗŠīKag*Ŧ§8 1€Ič:}Ė-ä8Â6āņb=}úõģ‡îáˇWō•˜ˇ* nqŒœcüûUJI"cŗ2X%/"Ž:6 ߎ—5Ũ؆ūΎŨÔ 'ˇ˙Ǟmü7›"šœí/Ž3õ>ÆēUB€ įŠ5+$o´ÄaëIŒpOje{āúöĨlíãéY €0~ž”ciāR-Û&œW§ë@ ãĩC3€8MĪÔŸŽ}*VS“ØëÍU™˙tŌgŽÄöĮĐЄ2%77’{SYķĩmķĪåŸķšq&W'øsͧ˙ĢëũiĄ‰•ÉÆĘ01ūsūxĒ$k‘ˇæ‘ÜwūŸëO1瞒,>á'§ÖŸ@˗ČP>P{ŸķëëD§23Cq×ĶųŸZ.2%S,™Ā wđώĖzu^qųŸzylay†sŽƒü)Æe‹;Ž[ŠĻ"ŧąb=ÛqéūũUō)žČíūĪZsČZ}‘ĮČ<šüé )ģ!Q›ž$úœU"}V,dŽséūĪZ†73!Øŋ'=I˙ƜÛĪÍšsž@>üûúö –ØHUĀ^ŸįˇĨȚM¨R01čĮåŸäjĢLī1ÆŅžzå¸į¯?áR°ÜānbÄŒsųc?§ãYčdYeVÁų‰LqÜ˙_ķĮ‘/sGy|üNãīõūšô&˛nōōŗ’3ßw?§ų>ĩa¤cí#Hb2?Ύ×5MG~Iį ķüŋ—&É!›ËËp8wāÆFAū\~5āųz‚QĪnxŖđ HLė'€§'œōŧ{éڑqŗ¸]ĄK˜>¸?ĄüiAbɜŠŒcæSôā˙‡­Zĩ Iœ:m#r=Oˇ­&´î_ũæ8RG°n§ü˙úé…sA¸‘ŸÔ˙ŸŌ”ų RrWåĪų˙>ôđH Á˜wįËį¸ŠFņŋ|ō’sœöíí]7žÕÍ] א‚(ŲčOã]fĶJOaÁnJĀg"Ŗ-”Ũœc>õ#įô¨‰ÚģOJĀŪÂ3Ŗ& |î}*C€A#>ÔÖû¤ã“HsĀéM?*ãûR `dzĶNzdŠC#aōĪ=(æ“īJĘœķĮcQ†Éã‘@X{.WŽsH™8ö§L|â•F}h¸ÖæF§ū°ãŌĄ„`ëVõ@<ÃúÕHē­ZØOrô# “ޏÅeø”ĸCĶa}+f@>•‘âB œOÁaÆ=:øXíu‰Ō“rÃ?‘Ŧ{{…1Ǟí vüūŖŽą]:čúŽļé"Túdu˙?kręg$ų´åŅÔä0Áį4ˆˆí׎zūŸĘĄ[y“•lŠ=}˙—įŠjÍ(âPÜđØūĩB.ÄĨ[÷dŠÁ$sŠž+×Uăå#$ĄĒqΎp¤‚:ëíÛĩ<sÆ9āãŋũzVî;šqKØ+(ãčëÍXPĮ $zư 9å[•ā˙ž}*xŽŽmåa!§]Ύ­KaŠw6 ˆu=+ŸČ“üŠÄžvŒ;dqü–Ē%üD€äÆÁļüÄõüZĘHŽ3ëĮõ?ŌĄĻŠNãÃČ8,F=sĪũôi3ŊÁOcœË iá[' ͏˙ë kīėAūϐĮ8`cžTŒ~@Qæv, cŒ7˙eQí 3”,O@úiU¤,˓ōņ€…@ëŸõ‹˙}güiL{˜ˆĀõ ū$Ō!m žFūô*p‰ŸnøŌVųV;fBĒĨ†2GõĀŦ¸+ģ+‚ÜίęGdQ‚yęĘ;~Ēڂņ(e$ã#ŒŧkXčŒįšv؅@\rpAÆ MJđā|ɸ‘ĪČOęÕ´¤B˟”@Ī\lzTč ¨ũØõ˙W˙רc!,!`5Úz7˙X˜2í“Û*č ŖÉĘãËĪûĒ9ũj3‹ķF{ā3øŽhҁ`î*wū,‘˙`S†J`‚Ëę¸#ōā:]”3lQŒ“ˇūfĨCŊC˛Š9ĮļNF~‚ÅÚ¤nÁôÜ1øđā)Ņí<9ĮoΔílqžį˙˛ū‚€9n}8-üé .ō ɎãeYY&ā‚G÷—¨¨#Ü?ŋŒõ#oįÍI•fŨøë˙Ö¤ĘDßiÛđ=W~4õU• !r:Ô%÷œg۟ūĩFģã;ĸ rیjGrfO—•{gü˙/ƜŽCylÛJŽüæ€įhĮ9€OãĪų4Äp´ōö#ųІ:įĄGN}ąMÁČā‘Ú”§=zŌü€AīīK÷›¯áQ‚7uŽiŲ^}sĶ9 iŽė}8™ũ)å°HúPnxĀ4„qžhoģúŠ~8āŌ™<{RĨ•TŗrjąÃ8|õ\Sg•¤¨ĀxĪŠč.iř°ĀgŒķū}ûúUXEû>“jí#ŧˆÎOŨ8ÉõĮõĻhWBi¤o,Ą•CœœœŽôüé5;Ų đ„•N|Ȉč;‘īKáëd*ׅ‰cō"ŒaAÁ?­hū˛/īY„tëŠhįžx=éíÁüiqÎsÅdh0oQøVĖ’-ÉbėĒōܧRHȚŪ|˜Ÿ' ÂՉ‘P¤›>ã)ô#Ÿ¨8Í\7&[}ãģBAÎ_Œ÷āÖ­ĩ˛iö[—$ˇōæ’XŧírR Qåã`:(ĮõęA_­hÃfo¯ŲgĀĩ€eļņ“ØgÛŌē´F)kql4q=ģ]Ũí ČSü#ąÍf\ÂtëåsÎNŌr uW1ũ„ė`ĮođŽŸ—Ī\YÜßĸ]ˁÆ@ĮTEŨęT•–…}`o+…!F%€8<×č Úđæ ×0}šW,čĄŖv<˛õĢ?Q˛Ÿėdy,qBŒqĪ­dčō›f†rxW “Ī˞jšR…„¤z Á^sô§dāÔx#œpiŨOOJå7š<“ƒéOƒƒƒô¨ÆIã$Îi˙6Ņ€yĻ!@‡ŌÆ#4€ņ˙ÖĨgʏ§4†5ĘHÁ88ÉĒwDíX׌äķūḨˇj¯*üûÔ‚į ŒqßĪôϘ™WiŒUzãŽ;˙‡âi`ˆĨÔî##?ÖŽ2f'EĀ,ŊqøTPƒˇ$(#:͏­Š(LĶnU;píĶÛ˙¯CŠËpqWŒžÔë`“$ŧņÜTŒĒß*ā\ū_Z.&S ÍŧįĸŸĮō˙>•ķs†f!‰ā{{TĶ022āqßÛü÷5CeˆČČÆĪéúUĄ2ŧ IpNŖÖĨáX( sÁld`Ÿ˙U<&FÕhp8˙?įŠlČ#@6•ÜqĮBį ‘ĪPĪųújIXíd@zryĶüûTq8ŽReUēeúŸ­1qģ>\ƒĶÛéüwņĒrųk(PPéģž}=ģ߆jü’ß0ęxfPŖđę*âiíÂåÉÜŖoéĪOŠĘRåá~Psīøã˙­×ЉX˛…ĪcôãüĶ5 ßå š˜rdŒqūI¨Š ų]ĄÛ…lņødū™ÅZbÉ% z8#‘ëĀūuČC°‚šĘœtėG˙¯ĩJUs€N匌du‚•†2c‹Č?7ËÆGŸN+ĒßõüĢ”ū&(ŧ˙ÁíũkŦÜßäTÔč8-ÉY°Ŗ"šĘ98§–$OįŠkôükbģŽ*6ÆŌ9ΰИnUüiŦ™\JW+ËcĐķJFGL­#`6SéI¸āt¤1§ƒĮõ¨œՂ3)9æŖpvž3šO•‘Ū¤ ƒĪjjdDiã˛sHhĖÔFeĪ5Fw~5z˙ŪÜU;UËdf´[ [—ã-ÅdxŒ7Ų!Ë1ĖŊą­@pI=+#[%įąˆƒ†õ?AũjŠüDOáÄę"P9ũ1J‹ûļ ãØ˙Je;AœíĪОMN›$_™ŋÂĒåãØË™NânöŠe‚¤ąõRNE†X †ā˙yT3R!ąė˙ALV\ˡŽAØ)L‡C}~r–*Ãq-ČaŽ@?ĶĩHã׎;˙Ÿđ¨‹ eWrŽÛp?1ōĢÜtúR#FCV Ę:öüiņ••w€x;š9ĪOķúTjđ;įˇųâĻ‘’ÜŒgԁ‡hRŠp#$į¯4˙ŧ9Á=FgNváŊÔp)^Hŗķø<ū@äŌ9ųzôŖˆČyĒîŌŖ6ÖČŸoæJ|vO–Uã‚1œ~|Đ$ÉJļrŒp &ųAŨ´8#ŸķúR†q÷א?„dđ§’Œã¸) īĩ^ānuLôäúūT *Žp~_Ë?įŸĖUMRüAlęoÛÎO'üõĻk×knžP!ų;wcˇķÚŠ[h& ´_?šō(Ų' žšõ8­cģ3mėŒŊ ÚōûQrą+nâãŸZī,ėĸ˛ˇXcč9=Ɥn—8ÃüšĶôéJ¤ų‡Ųj4Ž{bōôīšy¸"›´7 A“Ö˛, ú÷‹Ŧ$-§ĖĖģüÅ…ÆUûįØÂļˆÛÔūšŸZŖH|¨ĀČËl8-Á'ōõpܙėfčiũĻõ¤).īA×8÷<ō*kCi›{K7nOĪ)āū˙…Pļļ¸ōŪĐ¯PÍ*p Q“ß§ë[:?‡árfš,îōĻ0éøÖōåNō2\Û#)ĩŊNX÷ļČ×”„ų‘õĨ‡PÔ%„ųWėÃڊœ~•ĨĒŪ-œ%ÚI?*B=ą\å‚1˜Č$Ā?Å؁ĪZ¨¤ÕėKnöšfįûBâ3›ŠąŒ.q×Ļ‘Äd´2íË(+*Č>ŋį˙×fęõm‘Ių™¸ ß5LęīY…¸RH ã=>´ÕÚ‰žƒ ų°Į.áķ"žŧTŒ¤žŖ“Ú˛ŧ3}ÉũŅ#i¨<ū}+`Ž0k’JÎĮJwW" { yųT LŌãoĨŨÅ!‰€TŽGãHNҌuôĨ œŪÆšĀ)S@ãëMe,¤ Ū´ ōxã4áČ8šoQÁÍF^šĪ<ÔŖ†qAlžĻ€ ‘DE¤ y cÔôî€úĀQ4bHŠ’T qĶÔ3L¸ÚŦ ū.ôÄPL ķ\Ÿ˙_ëOX÷’[Ûü?O­9 ŽAÆ?ķúĶĨ9VcŽ:ū<˙3ųU1X—FÔĮ?×ųū‰HbrØ#§Ë“ú˙…`Â6 2“ČĮōsūI¨™Q¤Ŗ’[Ķü}@cK\ŗõÜ_˙¯ū4ā‘šV#ø‡ÃüôĒ’ŖųĨ˛Ē88āwõ§# psœ øvũEU‰¸æ•Ũ“JŠ^>Ŗ ũI¨Ûkķ¨ãíĮëäjY$ä3Ĩē“ƒŸĪßT;9VeWž¸;›˙ä~&˜Š“"*eŨB¨ÆBƒ“žøĪëYîXK§“¸qŒ÷ę1Z7QŗBĮË`Ād( ? cŌ˛„ĪËÜîÆrz÷÷ĢÉbÜrB€HĀ zœr?´ésŠ^€ÆĨI ĀČõĨĮž4ļ )ČÜHéR:“8Ī4ÄÆ…ĮŊ!c¸֜N}įMeä@ŒÍAAf$ũCoÆ*Kãûō(ļO˜f¯ =Åaķ<ÖNĨÎ§ĻŽxķ?öa[’ƒ×Ŧ=@Öėlƒ˙ ē{™Īaū&æ[5É™ƒ$s ËÆ@å€ūuģ¯ãÎŗ ÜûŠĢ´‚HëĶŊkdŒ§ģ(Į4…7E>HįcāŒ}­&Ŗ âhđŲûß××õĄíâ|—Oœ÷=G>´Ņߐ1ÛčÜ÷={Õ;1YĸĶ^@¤p7äØũzœmrHÆ6į§ųüf2Ģ‚l“Øûw? ¯_˓Ā'ŒsŌ—(īÜĐu"6cĶlc=HũsųšW t(Ë ņžĢđ:đsķŌĨ_r•mĘĮō˙ë÷Šã ¸ũŪžŋįņ¨žL°CđŽ1éí˙Ö§{…’&áđx'.8ôĮųô¤Tʏ—!Įā?Ī­G$*9PWięŊ9ūT e„üęUĪĖŊãE‡t[ŠęxCa•—oŨ~qøÖŒ:‚ē˛HĨI rÃëÛŽ$Œãq đƒĮ§ųę(°ŋėņĪüņIÅ0NÅģļŽIŖdōŠc׎ĄF]]x#ˇq×ü˙QŌĢÆTN˜ÁČüņū}ęA)P›ÎTd.Oˇˇ~ߕ+ɐĘŦ6ž™í‘Įųö­SķģjąĮûLGôŦPûpĀôĪâp8õūŋJÚˇ4(|ĀrČųĪ"ĻE!1&Õ*š'$`cØsQÉo$r°†čČ@ü9ÅYi>Gû˜īū€3<įœÃĨEĘE` “ŨpHū”ĄrÜä°ä‘ÉūJÉxÃ"į¨"ą°ģƒ×$˙`ū´ÄÁÆIÜW=>m§ôl֕b$įËŪ&ū„ÔĨP/$l3¸ã˙B‘7Ŗ{m_čGō ËePíĶ–<‡P?éž?™ĻˆU÷˙Ч&ÃƘΰōĮøšCČ$ÆÖV=ƒÜũˆŦk -Œßđ¤U rC•õ$‘ũ)@āāqŸá<~ŸãHįvķ#ü) #ŦޘĒFw|žüũ?ZG\ļā6{ gņ˙ Hd[äI—.ŦŸt7B=˛*c((ÂBæãúS*WqÁ“FŨā'$xGãTć­Ę:1 Ćųz~­J’JŠæŊ‰8ũ*2„ŸŊ’:dîũ:~´åPUšįAā˙ŸjM ÔŅ.S9ÉR~÷ ÷§đX‘Ž{ÕËä°\Ÿ˜˙QëWÁGҁėę*^…!ü.KÅR‹-#HĮÎxöč?JąrėbÚN tôãšD&N8õę}š˙=hC9ũz/6xĄfĘÁúņũkCX“˜áSČ@øū•FL\xŽÕN6ŠŨČĮLŸĄíųU›|^ë˜|Š™ˇ§ô­;÷6íâō`H˙ē f¤`i1€0Ũ;iĢ.[lŠvÁČ5‰ â2:š6gĶ=( 3Īĩ(qŒsõ Ú2N*…å”w,đËīĮų掖Üp ü(²•a¸4Ķq—–2Ãv ąW „hÉāᎧôÆ=늡‰Ŗ;¤rÍüGŨõĒ—‘åSt[Q‘×?ĶŖ.åä ŠéW's8Ģ/í-ĩ :†QīķŌŠ.b‡6āĢ÷wdSī.nĄ•DVŌĘPqøÖúôļúŖ+˛cpA‚áHō΍âŽ*ODÅ&–æUĘÜ˙hÉ%¸RĒvŖ0úÕ]`{™”9, üĖ̌“˙Ö­uG6ę€obzÉÍmi6PÂaķ!ũîK“ŒžsŸĨjįʈQšsAŌO‹ÎÚRYQ|ÄOZÔ#æ,§¯Z—\QM^zŽ;W+mģŗtŦŦ†’9õxŖ8ųîũųõĻW9äR¤˜Wœu❒ĮŽ”n#Ã4 \Œ4šÃd`z͈9éëQŸĀūĀxėOķ ¨ŨÎzĶ9ŒŊiëķĀüé Ć58-Ā'ˇŠĒ›žlKíūĪÖ§ž;Qp܆õ¨CvëĀŋĪøU­‰`'9,xįüū”ĨH??L÷ā~9īúũ) 0ÜHĀĪ˙įüķN-ˇåĀ<}0}9˙<šd‘A€ã?ē8üņúÕ+ûą'—cČ%¸wÎ?—éVŲˇ198ūŖ§ōü˙SY7-1Ū˛[I!\@î=0ÎjĸŽÉoC=¯dščųO"‘ü-ČĀįˇ˙ŽŦ ɟ ä県ûöõOû"ūeķâ KdļĶø{ņV!V´>\&æ,͐JÕÛĄõu)m$hîK€Ŗ`ņ—Jŧpd`H;AoĀ0j„šoÚâ2yŽ„(āŽr;‚)BMimåĮ*?—Ņ ĮŋĶšO`Ô˛0ŧBIõLéüĒ íÂČdTC 8ût˙=éöō āyqģ9āũvŸįV6‚0 œ*AĮäŸČũhŲs"@!ūĶĀ÷9ũ;Ô!ËŪYÁÆ:ņž˜=¸gō­I"Ũķd9;ƒã öįüjœļ¯ 6„(āā qŽ?ĪZ´ÉeuiwäīnÆ ė{zöæŸÁđ›ƒ´=~îiÅ$ķ”Ŧ, ŽØõ?Ęĸ-ķdņ&xāOŠõū§éLC€ķ^ÎNF08ėz pÃníĄ›$:zƒúĶP(r3€Ē{õ?F˙=i˙6ĀŽÜÎzûŋ…1X]ģP+dq 'ĐoņÍ9‰B¸8\`ūG93‘š†X…*‡ˇĶ¸ĪŊ?rá˛Æ@ÎôĮķ íÚXļ28Á>ã§ôŠ7mŒŸ(f%cHØ˙OsMļ_?#îŖ6XŠã<đ1RHæyƒ´cb܅í9įéÎi +ōá†Ū=G\ŽÕb)rP1“ŸĘŖ 6 ą*Î}ŽOåô§ÄÆ2ŧårxmØãˇ˙[Ĩ7¨lO-ŽÛĪ :žœˇŊuÜúŠäŦÆíVã!ņŽįÖģ/ũĄXÔčk%ä`õ"Ŗ$Ķ•útã20ĀīXŗR'õÍB͑ĀĪz˛ĘJô¨vĄŠ-lFFArJ†-ÉĪAOÃnÆOŒĐŨˆLš4¯Í÷xōėŒŽ:R)S&ÜāõÅ9Áëé@ˆđëHŲīN @ķškcō()ˇDĩĶ t5b#ÉĀķÜ÷Í>3’=Ēē%‘w'=EsچN짌ķœÎē/c×ÖšûôĮˆlÆyāūĻ´§š•M„׈kĢ^OũMD2Œ§wãú˙Zvĩƒ ķÉR^æĸ|HÁ9/>ŧũ+XėŒåģ“#jv¸ŸOÃŊIē˛,Ž~lnã‘øš–c\1ۖ'“Ķۏ֔¯”Y×&6˙Įyëč(ŋ`$*ŽNŨĮ‘Ôw8é2ŖIĪ˙_ü(īC 6>bsëÜņQ´ą/ČĮERĮ°ú~U,dwŦËnĒH ČׁíV5ķBƒÉ=r9•WŊ;“îlŒ€ūĀSŖžÚFæ(C`¯:ū´Ūȝ.ĮųGj˛ÉąWŽ9Aß­2k‰-üŖ"ų€Œ~įĩNCcq—˛÷č*7Hå™#įk@qüčŋq‘-ėNSq*FT†äūũz‘6ʄɏËė?ũ}6k`΍–ęGļ?úõPÅ=ŗĖ‚"zŠČ=?Įõ§döÚ46įĖÁ$ 뎟—_jTbKāđXß§_ūŊSŽíÎÂãqúđ1Ž•X†ōŨĄˆBFãÎzúûúĐĶŅ+*° Č>đûŊø˙ëz„FŅ–ōÛwƧãSB I?ĮŋĄĨčŖæįœtã?ūĒ@B&_ųh °O|~ŋΞÉ`FÕ<ô#üņßō§y¸ FyĀČȸ¨žŒMˇ§ļ(ēqō“×!áĶüúU¨n„0ˆÛyQȸüąYë,‹÷Šœ ߗ˙[š|s,ƒn~bz\¸&t\C#Yá„mČúš‘O–¸Ü Õl¯JĀç$0n ÷`^\$™,˛ ÆCĮL÷÷ŦÜKR6IR€qÉĀävĀĒė¸f ŒđÛ ×Ĩ6 F cRŌ‹ƒ÷GõuT2|›?!€Ū1õ5Ļ=ČÄ Ô`‘č€Ņ…)œ“ûÅŋÄ͚Ö0 lŠaōäįô¨ Ē쐌u8ÁÆG?{\{”œ‘ĮÉü–‚ė™˙ˆĻÉĀ ĘÅr~W=Ŋģū”‹TÚéģa9üNæ1g ˇ9ë¸g˙f5&A9lŒôŨž?đ¨†v•/ø/ÁjE#•ËūĪ_ÄęhĮžî,AĮŠūš?Ĩ"žGÎI<ŽĮķå8?ĘØ`qÛúqųš@ĮnĐ~SÔuøī™¤1OĖI9 Ž.ĩŒ0Ũˇ,;Īä?ŠŠ0HÚ3˙äˏĖĐĘ8Pēé‚GáĐP&BcŖøOoĶŸåĄ‰ÆGéĪųė)¨dÆ[ž;á°~§úTĒ7 \ķũi0#xöā§W¯č:Sã•ĸFGĐîãĶũzÚɅ'8Ī—ZG 8§lc#éր%YDî°P1ž ëũįVá1ÉĪĪZ¯o€IųŗžyéūxĢRŋɸ SƒÜqīÍ&4rÎ=CyûØlįƒŽũhé­$V˛NģCJß)qĀQĮøÕ=SjŦ˛ôÚvãnOBEL¸ÆŽs@Ęí h„íÛ­ˇ™nsĀ<jK‹ûheT/žF8؜ŸĮԈ%ŧcĀÆ3ĮŌž¤érĨåũœ1ížcmÃ×ë\Ģĩŧ˛Î’ŗĢž$“¨úWCĢXEt쎑đФŊ(6­âŸ:2įŠË•Š2§ 1ūĩ?ÚX7Ím /l>üÁŠkR“-Ũ]7?g‚áûÖĶ?‘ŠâÔm^MŒZ)3˛Ļŗ]Ŧæ;™6ūņฌãōĄÚQÄĢs¤Ÿ8˙žēÆ“Š ŗ^鐜c#¸ëūzÔ  d‡ųūUŸ’¨ŌMĶėķō§ũÖū•%Ŋô39”Å2đŅ7_ÃׯéK•ĄŪåŊÅōTāw$ŸķÍ?˃ÆŌ‘\ÆĒ¤ ž¸=OųĮé@,NáœcФÉķĢÉ˙9>õĢ‚ĸ#†ŪĒqÎy?—˙ĒŦš]ŋ)āÖ×Z•ÛT’ŲÛ ínOB}1ŸŌĒ:‰Øjká5ilĨ…„Y ¯ģ í‘ŠƒU`ŽŅ^įŒgÕõˇŒÁ ¸€bC¸ēXg#5•ŠĘŽÁÔW88ⴍ¯Ą›Ø“Nš—ÍXʁ†66ąžŋ­3YšxöƅtܙVųÖD‹&K#Ų'éMĘņ˛4ŒÜdl’G9öãüķZrër[ŌÅĢ{ÆI!|ĒČėƒŽGLûu?•mHŠËäá~čé߃ū}kœÛšá$‚äíÎ@ÆF+¤•Üg,s‘œ†Æ_ķڔÖÃCŋx§rUcŒî#węAũiˆ.2~ķÔcôĻy˜Bå‰ÉĮ˙Xū•?͗hV Lāāgô§Ō bIēƒ Ģķ/CĪŗ/ëĪÖ˛3ŊIÛמŊ?úŲ­‰%ãl`ƒō éŽį?!U^ŲǯЁA?1<Ÿûį§áøÕGA5r€+ŧ.Ā=8'ŋ+įÅ;æ1î`Xn,9Ü ˙<ž¸éMh@e 8o˜ž1Č÷į5##(g؜OROŋŠôöĢš"p¸eSøsŒˇĐņųjP›n įƒÎ}ūƒˇĐF͜ŋ*îū=ũjÔ*6˘ã9|rģĶŠüp)ė!§t(`Ãdüîv˙aøŸ§AB°q–ãpÎ uÕ%Œu-“ŸZBy÷ô§78ÛÔ÷Å'|pri›yPzzŠSÛéAûãĩ)é–íژˆņÁįŋŒĮ"•Į=!ä &Q“/3?|ˇ­>!ŽOJl‡3=MJ įn:Õ xđ? ÁÔW$°Įã[ø#¨‰¨ oiĀp6ŸëWMŲ™MhTח…Šãî÷úŌ[ 1īÁÜŨˇ=ŠuâMũ˛ŒįÛĶ&ĄW0GĩšLārOnūĩŧ~e/‰—0 *9íĀü8Kšˆ\1_âÎpsž˙ĐTlÄí_wÆ1ųt¨Ĩ¸.0K‘ЏëJ× Øb‰æųąÔąÂĶĨmáUA*y;sƒYÄÉ S!nœzt=3øÔL‘͐xĪOįO—¸ŽhŽíī÷O gûŠ_$$8Sןä?úūÕEK¨n\ôäķĶĨH¯ Á,įœķČĮ=h°°u9$¯R6ޏ>ūĩ$7^ffãëĮjŠ Į™´áK§ß˙×V•Kp @ŲíŪ“ķä\Pŗ(‘On œgîķUÜ$dČĨC1 rß7?^M0LĐn WbŒŒ'ŋ¯§HÕ@KÅŋāGž™Ĩkrˇ’aŠmbęíéĐUSĻ?—ē2Hƒü>˙áZæ0ņģ“ ĮSĀ÷÷¨Tˇ ¤P~_֝Â×2ÚÚál Ę ͎_đĢīŅFã´ã$rF@8üjGÛöf );xĀī…ã˙¯MģÄÁˆÛsą Āúgŋā(ŊØ[@3뉎xaß§ųæĨ$ššqÔŸÂĄÁ€ÉÚ r8Á<õíĐâžĨe)ĩ•˜ Qū?­!PQ ō#å˙?ãM’ŲJĄFyėONԀ0RØ''Ôķ˙Öö§- šOÉ÷IéÛüâA$LFNÜ’1Īâ*_´Æ‚ŒŖžÄ{˙úŠĖTČ07 úŸŽiŦUĸåAƧųíFâĩ‡´a…å˛=9Įø˙õëzĪpļ‰rXĀ { ¤ēt2[#3÷ ȍ•yĀ÷?Ę´Ŗ \HéØfūXœÍ(\Ą*Ž3Ī÷DAhö¯OoŸųņS.ÚXčBįõÍ,Š\˙6q€Aū€VedŽU”Áëšļįō¨œąV„‚Ŗ'€=rsVŲLx!•yčH\~dšS:eB“ž˙>iÜV+̆;Fö9ûšČũ…KL•ę$(~œ~f’U,ČĮ!z¨Æ*&—k°s‚pĀū<ôön0î• {į¤wRIČŨÄņQ‡ŪĨČéŅCøš~NŨäŽäŸøĸĀ=r˸Gc×˙­I•Ųģģį<éüéĪ͏|ž˙‰ū”,znĪõ4 z!— ,;įųd *Ed’W=ÉÛúõ¨ãs匀 ˛3ũiɅ%A žÃ˙­“H ]ŧî'đ~}ę)9!‰čŋ-HYƒŒ1í?úôŒžbīãŽKģ$ [@V?›ŗ?ĪųëVŨKGÁĀ$U;R ¸Ā†SœcÚ§šPŅmy„.qžŊLĐ÷Øæĩéą1!ĮĘĶž8ÎîéZZuÄriQI$Ņ‚æ$í\‹‘QPKg"LžA rC ‘ę˙=k+ô4°„¨Bd‚0Iũh7Y)i&2>^ŪôŊ2åL(e2ŗ'ŨcŖč8ÉĒąÚA§¤—×Ŧfé¸ãđ3MY‹RčÕVqk"ŒrĪ…éÛ×ôĒözœú…ĐEQä“´`=ķę}*;ųÕŅwí–ÅN1Įųüę]’J䜩 ôĀ˙ėŠŲZáw{" ֤߀H]ƒĐz~9Ģŗ?”E CŠ@ĢÃ'ĖŽƒ•õ'ÔRAzŦîąČ$ûQSēš[;§/y/—ĩ‘@įŽMPš˛HH@›NÎ ƒ×ņ=Öļd˜KÎz0īOķŠ‚xü•‘ËącōŽÁG§ãëT™-Ž ĮÎY”Ģ”ÂėWųH',útĒÆŨcŠ"A‘d?xFĶë˙Ö÷ĢēĒ3Īoq’-Kļė’:“éØUxđ^(xō0@löįs˙ęÅt§ĄƒZŽŽĐų¨fÁ?{ĶRI˙<ôÖvQéAæŽî'§˙_ÔĶ´ëTą´ûLņƒ1Ī–§\ÖUõĶLÅÉ ¸áFxūÄ~ŋNš6åĄĸJ*ėlŅîf¸ķ0Xä0äŸ÷qĶæ>œfˆ#`˜lSÔäŸsߊëRĀ aåQ$‡ĖzU3mĮã˙Ö§ä.ĨIPˇËē@Ĩ°=ĒŊ´û„Ö˛ŗÂJĘÉį8#žGˇą ’߲>eR9"­^Z[Ûüņ L2Á÷įÖ§žÚĘrŋžĩy#WF†T`ã ô†›ē‚A+\…Ė RdzŽ}9Ą¤Á6‡e’ŲŒG{0#ߨåĨKÉ&šXn%PėĻ>VįƒëZ~z1WōČūéS×ņ˙=k>MBęĘā %ģąÁ'9ÎįųS‚h$Ķ6âŧV˛A1ũāÉÉîqūĪ5…¨ČŦYžQ’ræŽÍzͯލ„œãi#Îąn!™˜Lr?>•PVdɏ\˛Å˛x–)āŋ> ~`U&Ž ‚>÷\Œc?įķĻí €á]õĢÖV°Č ĘŽd\púôĻڐ;KĪš)ČAÆx¯¯˙ZŲÚČØÄĒ“œЃ˙ÖĻ@ąDŦcÎũ1×ëM,ФíL•˙d÷ö˙õÖmŨ–‘6_ 2Ȥ)9ų€įūūJ^1ĪĖF;tüÆ,T; Į)’cųŸZņo)ģo=ŨGËņŠ͸áļôû7øŸ­9YXaČÉa‚÷ûßį֔HžfŅ÷~öW˙ŦGô?ZnNJâPTNsøœ?΁؎âo-X#~õŽyŸLį9úäÕq'šSœ‚@ āP2öëIq¸É’Ę'=NĮųúšj‡ÁeĮĘŊ=ēãķ­R!îL‘Ŗ]§xÉĪÔsøô÷§9|œä!Üä‘ËņëמsNSäGæ€ķĩ|Ũr}‡^ũĒ& ›†ĘF{õ$îéšzŠQ—ĮĖNÂ1ĮˇCų ėuBx#,ûŒTcŒgø›9 Ž=ąõôŠœˇ ~~0p>‡úŸzb0ØáĘđXœzŋŽ)Ā)ÎŅŋ’:gĐv¤E2HR0H#oŋũtåU<ļ=úãņŸëë@"{-ЧN\{žõ×~5ĮéãŠIsõOđ5×cũ‘ųÖUw4hā6;Žõs“ČųLŲÉäĶ üŧ~uƒ6Ėt${ ‰ĪËīRČĮ÷…DØ ŽŊŗP22>SŒüS߯#`š°įŒP1IãĨĪN”„ôĪJnįĀ$|ņë֚۠´„c§rGZL¤ŒŖ‘1'‘“SŠÁw¨f^}OķŠ—†įôĒ+ +äįĖKÜ!ü>õl6vāV,ŋō4ÚH˙ŖUCŠ•BĻŧƒûJqōqŸ­*FÛāŽ~žŸäSõū5[ny۟ÔĶ…ŗôĮáÔâļ_ 2 –CĮŪûƒ;{:…v‘šļ19ÉÉņHíŧ“ÕN1†íô§|ũ×ęs„ĪjŌÖ3ę)Ā< u/׊)Üp ãøyíëšRpčĮéŊi Ü oŧßONM!‹RëÆrIųģŽũ1ū{Ō"† 8đđ?‡ŋ™˙>´´ä0{qÆhzĢ4LP KcöũoåEŦ§ÍęB“ģ$įúrOcQYܲĻå' $ĄühtCÁ$ā–`08ƒĶ¨¨ˇBĘHS’@úp™ūZŽeÁØqÎSĮ֙ŗK4[…Ã1ĪËé˙ę§Û¤ÛŽųؒ˜ c¯éų –nD ČÎw×#Ōĸ–@ę­!mŅɑ´mĮŠūUjDČAųpß^Ÿį°Ē@7ŲYû qõĻģö`ĶHŪZdm#vÜã‚=‡žĀ¤ā`õÎįךQl^ī{ÅyÃ.ŨôéĶ։bXSŒĒŦ›˛9āãžüâšļÄžäØōĶfōĨÆw!xãņĒĻŲ’Y<ĀCŽw`ō?Lų‘œ~ķ%•Gœtëß­"JR $wŪāc9ČāZ5C Ŗ|ĒŲ ÃČüŋ –ķļŌ‹W$šā“øtĒow33EŽ'ÎIÁö÷Ē˙heŖ‰ų‚įų“č*v¸›:–Ôb‘ÄFІrUzcÁ& kųa•rˇާ'úŠį6ŧŒ‰vĀäūYü˙6čäcĐô¤ŠĄķŗ­Zļ$ķŖČČņú ҎŊˇēU÷ŲyĮį\TwˇQŽVāp㓏qĪųü¤Ö|ˇ0=ģ¯ņc ¨įü÷Štģí;Āc’Uš=ÁūBƒ€™äsČ?Ԋ此ģ &´Ŋy"=ˇ—_Ävũ>•r=bX.â*‘xüAéY8>…)\Ô1÷cøHãĀS%P$ØT’š?¯_ĐS펥ģ‹t2Ą^F7ဤ™iƌŽ„ŽNŊJčSĀ3Œ0\ŖŒķéNŪË(ų ŸUa“īëúĶŅ—qĮ¸ŒO=}zŸŌœS+€8į˧æjŽ+ ߎA΁Ÿũ˜Đ@Î3ķØįúŸåF\ŽqĐûœqųšLŗ ÷9ū\RRr2žŧŒuü˛2)K•Ā;zō2ôëPoČ ŒÃąų`Q`Šœ.š,&Îrįõ/ķŠĐÆw•'Ļ fĒī āeo]ąįŸÆŦFxÉeúÛú ĐĐġfø Š yĪëKĒÎbˇ•—ũh]¨vnõϐę9ĐŖvJ–8Ö šhÔ­ĄÛĖė}…?Ƌ]‹ĨŒÍB†É#ŽÕ ÛŒŽœgņŽqŖarŊ€ĀÉčy˙ëë/!ß!\œņ×õüzVL–ˆšlgķ×˙úų­á#)FėÜĐož},ÄĖģ­Üįœôô­K‰ÕmŨōĢ*āœž3Ž?\žyö(|É2Vâ6œöûŋįŪ“\ÕZâs …1¨Ī¯5›…æZĸkÚ^Į5°2åŅHō“éü_įĶĨT’ŪMbíŽfŦâbŖn{Ž€~$ūuJĮuÔ ŦpƀË!íÎ0=øŽš1q%´*ĢQū Đũ× ×ŊšŸ,Âie,Ëģ ČU˙×ūqZ[-bye;KqëߏSĐ~R Pg"5<3ž‡?¯˙XûS¯įY$_%ąąÕ@ÛÝÃåäõĪ•/]´ÔKíDųąĨh–G ‘‚¨î?>ÔĮÖcˇÃ#Jã$WöíLē|ČâŪSYŒË*‡Œæŗ.cˇ–õžÕ$&XÜËģ ͟öpERŠŲĸ\žįOk$WÁā`WŽ;‚yæšíNᎎ"Ķ vQēgīˇŽ?OƝhņEkĄI,.Åß,Å˙ŊÚŗė^ĩK‹™÷šS.Ũ¯đ˙ IYąˇth“iÍnĮ Ę=ē\õꎕĨoÔY¤UXā;ˆĮ\Į¸Öҧ“ ;ņJáf_˛¸ŗyiqqÕCgšŠŠ…ų%n-ĩ23ÉĀāzÕ+7ļģŋĘ2Q‰āy㌃zÔKT’Ûtņ4JpÛŗ´ũjl“*íĢúK$’î\L<Âą¤­ķƒķúzqVôųü‰Ļˇ•$hĻËÜ,8$}EE-˜‘åaˆĒIßŧî¤~UgOž‚wahˌŠ#$ō Įâ?*Ņęˆ[ˆđÃi¤E#ūņ6ŽüŒ€ āƒųVŌn¸yŖ!ą\ČO-Û˙­ŽÕŽæx }9ą!(éÁGį‘ųV-Ũžs3˛–t 27`÷ž~•PܙlkÛ\‰ŖWeŲ‘ĐsúÔāĻî âŗtŌEš‚rāžsW@'˙?&ĩØ–˜˜ß•øO§õ˙Z§?›$!”P%Ž7vYũŌŦ€Y°¤Œr=ifÛš'ōÉ R"w‚ãĶ𤁭 KĮōĸļ˜#B#u ė ˛ŌĻDRĻTä`‘€{Tˇ´¸°ŗW1’Ō2r6xã=3ÖϚ'hNŨ™û¸Õ§™Ēa”ČV'1‚zö¨™"‹zŗ´ŌÁcō֍ĩļmūy rœp{ō3íI%ŖDA˜āä” ō3õ§ÍĐ,eZ´?lGŸ„ qnõŊå*ųFuŽžIŦŠíH%Ĩwœįœū'ōŠ-/’%ōäa~BꠞzgõõĸZęh_â šČÁ ´ŠÎ;՛{wq°:Ģax¯nğéVšįį߀åM§h_Ž˙>ĩŸ)”ũæq’AVīֈŽāŲ”6][į<ė9üsũ)a’ádiAäc Ÿ\ŅÉĀl nnØõĮŊ^‚Ū=Ųt‘2ŋ.[=F)˛mØ|-ĀU‘Bģˇ gųUÅ$ʕëžL—ãI^TŠČ‡?tœgųJc?š1ōœŽ„‚zûŒ˙žĩ˛Ę×K"oerH#‘žNŊ˙ƒĒáPäárX}˛?Ī_J˛ā´‰É “€FíÁS&Q؃ōq•ĮĘšųˆúôüéĻ&ŦFdÜ˙( 6GĶ=yn}Oč)ĖÍ؊œ§%G'ōūT›°Â01Œgnˇ˙Ž¸8 ˙xu_§Nųæ˜ˆÉ œüÄp0 įß Œū´åpĀ “´`sƒß¨˙ IF`yĀÉ#€Iõ5P*œ¨Č鐯ųՐîV"<Šā€r§×?į ’KH#$•éøįüę.‡īNpC߯ųô4āüĮpÛČĘôéū~´.žĮû^4 ‘Ŋrs͌˙Jëŗīú×)ĨGˇXP@p˙Đ u{G÷ŋJĘŽæ´ö/Å÷ÚrÌjy9' ÅFp­Į\Ö ÔŽy#ĩ1†áœséR°Į~ FäŽøõŠ āœÛĄ¨YA\r*rs¸0ā÷Īj‡ŒųRœ€2ŲĮZČ4Ąp>ĸādg­1‘88ĐķNųĶ[vx?.9Ā=ŠŒį#Îõ52øÔ8ũî~ĩ4c<ÕüqÚą%?ņUÛ€|ž&­ÍŲ…'+€įŸ,˙#WĻU:ëÜęÖū›@ü÷T-‘÷ĪoÖ§ÖqũŗĪT˙BĒ÷mū‹…P¤ŌļÂŒeņ2‚‚¤šé‚1S…ųNUŒôoķūqQų`w 88?áR ;ŠųžŋuxéZ=ˆ[¤9éĪ 3ÛŪ¤ÉUaĶ Üāöė(;†á– 2HSÛ¯4b>U$Á/qÜŌō›vî]š=ÆŪūŊi …^¸ú`ŋŸ~´ÕPX‡įbį=Í*įË8ö<ũ:CWī`ķČãéúĐFá‡#æcÎzœŽũ˙Ī­9Æ=qߎ6úv˙>”ŨÅw`ņ“žŖ#ĶÛü)‹¨č[˓‘ŒđHęzõ˙ëUâQ°ŋ{qīČÖsgĘX0ëÛŋųūU§$K woemŖ>Ÿį֓ė:ÂR— ą† Đ+nĮzt­ģ\r1üū÷×?Š÷Ŧ`ŪLĖȀFŸ›<ĮØÖË:ŋ͐ =Į9ü˙3ôŦäŠDw_9g$ĶОŋ§O~j™Œų  CŽ9*qôŋúõr~„1ŽƒĻy=ûū*ŗ‡eXķæ9=}(]‡æ>ŠßÜt+ƒĐöéųŅ2Ž÷,[ƒƒĪ^ŧgđč<)EށySÎ8nçãLfc!ÁÉS“ššęŨOaôĨ}BÚ7:…V%Bįhūēõ5^W,áƒüŠÜõ'9ã'ÜÔōĖņHŘ`Əš´ØmĖ­´ä“Į¯×žžĩĸІUXw8æ^×ūŖR‹]Ã×'ūžũ˙^õp ČĀ_rō¤|†ÚWÁ?Ėū§ĩE_#ƒœķÔã>ßį˙ՆˆB¨9 į×××üôĢn@!oŧqÛüįõôĨe%ĀįjķĮįŸķÅŠ~IF 2Ŗž@OåVÎ+"1uËųė=8ü=ĒxaYg‘ˆĮËĮéūÛ"ĨŊÚņų HGĀņų ¤å¨XĀ*ņ°x›Ëe<8ú“W`×&T yΎnŒ2hĀ$õŒô˙?ūĒĢäpá€Éôõô˙õzûÕŲ=ÉģFíģ[ܟ2ÂāÃ)( úŽ•Ĩ¤Ņ([¸öœdHŖ<}#ëŌ¸ß,ĄH œz˙žGųŖgĢē/•v<Ä#%Āįņõū•Jv:‡usŊĀ–H \œõŠŌXŲ”Ũ鑸ŸĮœū•‡˜Č¸ŗbIÚr­ų˙>žÂ™y­,jĢ`ČxmĮpSø Ī‘Ŋ§7s}ʕn‡æ?‘Ũũ)˛(Y>eŒËĮęĨrPž‘LFYq’ ˙Zs4˛GļIäÎ2Ŗqį×üũE5IŽĸįšÕģíEų|öč*´ˇÂI–DTrĘŧũšåŧĻĪÎ*qķū{͐Ģ; ’zúņŸķųÕ{4K™š'‰-TWāåÛ¯õ­KËkˆ÷Âā‘ÉJ˙3\dļA•™˛H$2įų‡z’ÃÎąēmП–U…?áMĶVĐJnúĘ•vTV\ŗãq#?SŠÎž{–¸žîĖ+3ʆAUZdzč…í¤éČRTšôëMŌįˇkZo_0>Tņ‡=û}k4š4ŊĘRkŗ4›'ĩųŽ Ú˙x~=i'ž2Įåňíōd°įߏ@:ŌjŸeWXåVIáqßžq֒Ũq¸—fÜaP0ĀöęqüĢD–ö"ė[ŠAˇĩ@¸*™$gÛŌĢ*´—’6ãnwõ\ä÷ô§‚.%;H1ĸāŸŠĢ-Ž?Ū6$)ÜõÎqü‰§{ ×,iÁĨĩąˇ‰pō\ųĪ“÷•Jã#ķüĢŖZEu*˛„ķfŨĢ&ÅVŅ-&HÎõ(Ž?„ãß­Yž}ÍäųŒc‡÷“2ŒåŊ=:氖¯CHčĩ/A3Å*ļ@āzr=ŋ¯ĩU¤!„ÅYo 8Č?–j{iŸí*Mëŧ äĒđ9ũ?ZĄ}pą^C47U°§ĖIëīÉü=*Uīb›VââŌ{IN {X7ąž1ādõŦxnüöM•„„:ã 8cÉ'{ÕéÚKŨ‹B\1;RŨ•wįb}=9Ģ{!˛ˇfÅÅÁ9ų“œtUā{gˇZŅY"Ĩ[›”‚+}6)“íHöœ…‘ĄĮ\gn{šĶVö‡åĐƒĪøÖ™`ŌM{}sÎܰn厑øVœ× ËK‡Ę—įĀ?tôĄĢ=;ęËķobąÉu ~\sĐ˙?ķš‹Z|Č"É ´ >€Ÿ›˙ō¨4û§ģÕ GÉ Kdûūũuĩ&&™ķō€ā{ā'ūÍR•¤Sz,[ΖYÛī3õ˙ĪŌ´]šQŒũúÕVĐ2Ú§ †ääžõ#1SpOŋøÕŊČDž^˜ú˙õĒ{}Fé%KxlŧÍüų†N8ėAöLJ$Î1ר,4°Åį:äā2„Ž)4ŠWšŅ, ģ{}æę+ĸ …lžIíSC‘ Áˆ$÷Ēב´Öü€JÅnhôG!urÖÂo.gŲ6TĄÉôÉëü豆8%ŒÜ 8f ÍŋiÆWũĶÔæ´"F“THRH2Ą1Ü8āã§åŽ´—˙k ,~M˛LíąeEÉsÆ3éĮÖē/ĐÆŨFÉy<Gq<3îŒLœ†įnėv<Xú™ž“#ÉuĀûĖjũŧĻMŽVTˇų˜š;ƒxČėFk&Yŋ´n’YŲļ;`yX9üČĩTU‰zčiX"­¸ $ƒū˙ÖĢ€íûĖØ˙w˙­TŖ•m抁xŲp¤‘ŧũā:UŊÎNH c<ŠLkAÁžlƒíĘÔą†1Č †*ÂDāŸ˙XZ…Yԑķ`ū4Éįh#2žFÚTFÄ‘׏аîs’[˜ė'Áfˇv_p?AūMo,›ŖÛ;ĮL1œõūŸŌĄÕ<ëĢE7hąČä,ąœ‘ĪSū “Ü›p€:1V$súņŸđ­/tBVv4ŽØT}ĸáQ˜}Õāį׏đî*´÷ ŗb†59-üGņíüū˜¤Š4ˆīÚK1åˆäũ{öč?:lëž//zĢ/lã~CųŌ[ŒlĻՐĄÉūđž1Ôõ˙=*ŊÍē˛āĀĐ“ŽŨp8įŪŽ€cE Ē„¯ĻŌ=ų<ŽßĨS’ņ ’+Ŧš$œãׯ_Ô~4ÕÄö3W͍˜“’œ)8üûU†S* 1Ä“ŋ'¯§ĶëP4Š˙ŊčIäũ}ëFŪú܁Ō2ÜaX1ÆyĪqšˇrPļöí‘+epwdqØwéĶüõ­—>Xƒōîéß׏ĶڗpŒ18ÎNŪ¸˙<Đ@$ ŖĮ+Đ˙ß8βm–ŧ†ģeÎ6į9ÉÚOô4$%~PĀíhcßļxūBģ$…' 6žŋøņũGáV!–Ū; 3 rWOP3‚(lv*žČŽ‘Ė~NųM‡šãÔ<ȤU'lnÚEĮ^*8¤Fš+I›kā ã Âū|ŸÂĻcxŸ,Čė¤āSĀüGCUą;ŒH9|(三ūĩ ۝ áˆÔ1^; ū4Ũ‹¸Č’¸åũssüęe`@ }į#>Øä~”Ä7ųĄHį$úz ŽŸĨ2Hƒcq‡8lúņÔ}Zrʙ 6IL1ôĨ%Ú0„ sߟCôÅ0܄ÂôéģĪ×Û˙×OCą‹•ā|Į F=:tũ)60|‡=øSųņÅ€cķŽģr?.).š ëc÷˜ÆØ˙ë×[˙5Ęé*?ļĄōyĪđęō=JĘŽåĶØĐã$Ŋj)8$ô53ŠŽA\ėŲČpį$fŖ`:ķš™€āāšˆlƒ×ԐȨIüĒ 1œäÔė ã"ŖPƒéĮĨ!_›äbũâHëۜęvex&‘ųĀ={Ķ"o™FJv…!ų@šö§…ÉÅ"ŒŗÜôŠĶ9íP°ũįļMIÃUöäŒV+ŒøĻd ˙ß5ļkyņ`9čŸû)LJS: úŪīíËr8;ūÍU¤Ydˇ# HÁ8īøtūĩoX-ũŋģĪŠô m*‚q‘ۏ\lžˆÆJí™ĘŒc$Ģd÷cëôĨķPėXœ€zp*ˆ• ˕āc•ĢÖĒėģöĢ3?L•Ŗv"×"A3 *ŠI‚ųÅ8#Î$đrõø¤2īTą*ØūõšôíO/”éķđxŨĶ Ĩ}F5pŌ.á’?ÚĪņzžn¸c8É?{ŋ_ČS”åđAHĪ9={ ĢBģO\{ô?‰ũ) 6§،ž>īéøĶZÜnbsÎzt˙?J\a˛8Ú1×ũĶųÔĄƒ;Ž3ķœāņž=z~94ĩ*<Ã8ÁÆ9=jĖ(ģ†rHn÷Í2hÎ÷ Ã§û]?Ī5$fHĻ,Ą'g0s×ëMėJÜFBģ@'Ø ŸÔÕĢy&š´GķTāˇuãÛķ\ĸČqšŲÁŽI?äÔēpÛ ÆÁSŧ“ÔeNžßZ™lRܟėŲVY3´íįŋNŋ§įQn"ÛÍŨÃɒ3Æž~•}€9ÁČÁįׯį˙Uã;aqĩĪ9 GéīúÔĻSBģyhųAÜ@aĀåģR}Ĩ%&B퓎ũĪAĐRœfP8;ļtū>ĻĄŠĖß2ũķ•įÔķL‘˛(y™dÜçf'}+NŌ0ĄzČ3‘ÜķŌ˛Ë‘”ˤŒúf­énŅÜ}™›÷re‘°@<ëD¯a­Ë^JFĀŊxĪ_¨ëõúŠ€Û’áÛ'q8Oųä~cÔ֏d—q]œ{ëŸÖ ˜ūøœåAíĀ?ãĮģ „ÆŅžĐž §~ĪôõĨ• qFƒũt‡ šëøú_ņ§Ī{kĢ$‹+“ąž§üöô éRX@âVŊ¸@$n=Ŋ‡ųū™Ģév- -íŧČālū#ĀcܟËLŽÂ¨…ķ%sžîxĮaū}=ęŨÛŗĩ dSœÁú}8üqõ¨âˇÚÄtô˙?ūĄBîĻâ3ũĐ~ŋũÖĒ]BFЧŒgw¯šũ?JÕÚ]ūT%@éúū|ūžÕBᥠļįÎĐĢÉ$uúúЧ¨šFS|†zqūzū]j9c`y^˙×üû֜6ŌLw:xJįԞŊúķÍ2il­Ã"ō¯ îÎ?üĢE-HąVÖyí˛mß$ŽF8úū´Ô‰æš+xbGį×ß?…$S0Ļ+;np?É˙"­Û4OĩTäŽHÎxĪ<~'ųũ[OJŗdvY.N0@äօũŠg”!,2xĪōĪáę %œ†a–P?Î2??CVn$T´ß!=˙ú˙ũc\íģ›$ŦsF=Ũps€3ųķHʀl÷ŋ\gįõļBÄU†^& ‚Žä_OūŊ9åŒČc@I>€sųū~ĩĒ3`€Pēgŋúv˙?ZpŒg–S21ÉũĪįU#*ääsÎSéūsBÜ6íŦŊxĮųįÛ˙ÕNÂ,Ã$LÚčąÚr’g@OįųSŽt)C/˙ܝãūÆ ņIōąÚHčzcüãķĢöˇ8‹2lŒDä{ŠĮÔwÔļÖÅ+39m|Ō]$f—‚SœĮœ~_áH1ŧl“ŧŦN?/ķë[REo{oöŨ9ȓ9b#×˙įŪŗŽ#ķ@p N pqĶųķč(LEģ 4´ˇif eîōG ūį­Ë}=Ĩ”\ΏŸž!8ôĪ>˜âŗė5Y"|N¨“û×Į 1Įá[RÚ^ėūÛQžF1įĶŽj$䊍žÄ2/˜Īq}ŧ-ƒÉų˜ŒãŽ1H˛[ϜíĐÃlΐÁƒ;Ÿ|g­[čv÷Ķ^Ļė s“ųĶ4Ú&˜Ëĩíclô;qũj9Ŗą\¯qÖLŠZī›|ĄÃ‡$’028ĢŸ%ɘ¤/6 ōí§¯kô‡ŗ,ÖûmAķĐĮēžĩ™uŦT“sį@[æT•Ô0ôÎ3ųPĸ¤ôcæ˛ÕõíR uĶ´Ö1ģągÃdÔį¸'ú{Ս6ČéZz<욿Rį'œāË5[OŠÂ;W3ØGoœáœūŖŸÂĻŧŋ͇“'ÛÁe]€FŲãŽqÛ§ëUĶ•æËWm-ĩ™rÎŒgwōÍsÍ/—&čÜĩģ}vžā˙žqZDÃpŠņŦ˛.Á1ŸJ Đ”™ŒPfB¤4~j’G^ETU„Ëú:ę衠FÛíĮZ—Z*<၌ąä˙ļ•GEíõč!–?(ą9 Û*qZė%„ģ;1ũTˇķQI¯|iû¤Q9kdārŖŋĩI†+‚ZŠĀŦ–qe†BãĻ3Vv ũåΎACÜА ßûØŠ š[sæŧd…<íúRm*Á#ļÚf īĄKÔĩĄĘîBGąõ§E(bčOá˙×Ŧ~€ųlQņŲ‡ō­›4(Ũ‚îî‘YÉ$Zm“E@pøVvĨn’+üŋ;(9¸ö'´pP r+2éYÜíÎF@•1z”Ö‡4…&F3I˛v‹=}˙!SÚÉ­ÚËnˆÖčåT …XŖš=j=FŲVō%ĀåņŒcų“V氞O6 qō2å×#ŒõëͧēŽ}nAbĐĨüžZƒæüųPALö5Ģ•#ŖgéÚ¨Xà *Qbeu8`øUŽƒ´c Š–ãŽÃĖx>‡4ĮˇiŒqÆæ7$Ãą OON) Ļs€=÷ ’ē\šXœđsƒŒz{ŌÕsŸ.ôëך‘ƒˆØäq’õĢĖ x$aę2OéøžĩríOö%ķķŠR}2ŋũzĸ7 í ÛĻsė=#ÖŽ÷%Ģ ī7ĮĶĶŋL㎕RõerωPvëŽxöīØSI!€ff ʞëūGn*ÍšidWä$ŧ ŖŒäp3ŸķīOmCr(wĢ7ÜĮ]¸įĻ3øōiæî ¨ČqÛx'˙ąÅo%ŖŧFU`Œ°TęGq*'Ķ˙ŅvíŠ2š˙õ˙…G:+—CžžÆ8“ÉXä,3Á-žš˙=Ģ=m'´•¤$—ĒērGĶÖūŖļAå\ÉmŒŸ-˜ŒgÜã"˛^ø…™Ü`’Ŗú9üsZEļfĐÛ{•Ÿ{Ę €0YĀĀį§˙XVĩšˇō•a‘HėCč:~5ė×m`ÁģÆ?/ķÍhé˛F×ģŒîÉcŒãž1•æœĸf–öĀ\ įđ3øœ~Y¨Č"›jš ˆŅšË1Č=zũ $ÉpēÛÉ # 7ķįį4ZÃx÷ 2@#EÎŌĮšęGōŦúYŌ´ĩļ†áŽ‚“#ĄįđįųSUˇÍ3”w$8鏯oJ‡PģšHÄSᐏē˙/ę:ÕQtŲS×ģ$‚?īŦ~”ŌoV&ŌĐŧÄczāsī×ëȤhwüųŒį¸éųJdS¤Ŧ@ÜpÍČīĐãôĢBąrO8į?ŌžÂ+ˆ—3÷[ųŸAJЌ1a6įŽŋQéūEXTëÆäœqåŸ¨ÕËŽ@!GąũzŸĀū\,B҆]ŦA\€­ĮOĐū”…F㴗Rۈ˙P­ĢƸ“Æ}1üšüéT–|ŋąāƒīõũ ¤&;Hëd’8ũ~_ūĩuYöŽWJeūÛbáēg?Āk¨üJÎĻåÁhjˇ *";TŦ2EFAükœØˆŒqŒT.}šÅK!*„ã§5`ŒŽOj,2§h+MsÜ:˜œôĒė2F”n €J’ūOP=FÍ´gƒN8Ųß4Âx 3ŸJw\ö§†ķMå°OĨv=¸âĸ„Ŗ~´!ÉÎsN˜ü Ž?ŋ×ĨP=Ëy=Ģ GüU¯ųæ?•nŽFyŦ4ų|`}âČÕʝN„šÛâr@OSŒwõ§ ÜŅ“ŒņĪoΐ¨uôë1Ą$/~5Q‘­Tm}ŨĪŋáZĨtŒž™$ŧž:֌#;vņŧũuœŲPYWoĘNsššhā"–ųOÅ[Z}ILĒ.DL¤Ŗ,FOˇš˙8÷ģ8چQ¸ĮČÆ9ŸįŊW”+F0 –r:{g¯á˙ęŠ-Ÿ ĘqˇĄ¨ÍC)ŅĮÂŠäp0įō•66܋О;샸ŸŌž˜ÜŠ$‘œôcéÔĶVˆŒņĪā{˙@*…Đ uÁ‚{|ŋĨKî ˜Ür8˙?ÎŖ0˛ž9SŒŒqˇ°ëøŌŗ8Ü äÄÎN?SC$¤obF# ųųÅM„ŧxĀ%8ŨĮ˙^>• …p@ôoq÷ãSƤĖĨH6ŨĪũT=nÅ3īąÎbN×ķĨŗÛˇˆÔ€ÎyāuĐņš]ŒŲšnBqø -c%ZTdĄÆŽOŪÁĮįSr™ v!“¨žz˙{¯?×đĒSBß!€y­ÎÎHõÁŠŪS}ČĘŲb{ņķzr>ƒËņŲ´v°#ķĪŠ¤Ž„õc‚7s•=Hsü]tĨwËá†ÖŨŸ›¯Ūū´ÍÉä¨(*G]Ēxolš0ޏ@ā‘ÜōiŽå`–Cpw§Ąëڟ;Ēš7 Čr9āōN=úŌ!XnsʲáHüōzúRŧxØå€# åēž{Õ­Ž–ÚušŨ%C¸§§¯õZĄĢ‚ēt˙/m!zN úsúJƎkĢ6ĀÜ FNā:zt<ö­{=rŌä.ĐBį į”oΧqĪĩfâĶē.÷Ņˇ€Åqƒ¤1ÂļNœsëútëN1ŊŅųÕŌüTzŒ…%Ã;¨ŲÉ<€qߞšíũkĨžĩŠös‚ČO#‚?Īõčk,–Îaķ§ÆŨÃߏ¯~”FWÔN6ІŗÛŽ 1ĪON>Ŋ=}jĩĖeJąÎAųĪoZŋb‚Œ!ƒs•ÉĮ| sŽ*ÍÕĒ– õnFBĻ1Üvô÷Ēæŗތ@WÜ0éŸķ×ķĮ4°\Ŋŧ‹2ÁOÜČéÎ?ķŌ–hLĮ'up?Éūu^Xä\œ’Ŧü;Ÿ×ŠĩŠ7ąģi¤ÕĢ AŦ„i áuÉC×#ÛüûU‹Ë@–īÃhbūG˙¯žõ–¨bgu įlo“–ô?—ųíKŪV%Ģ3ǃXˇšgōÆĀSúâ¤{Ør‹ĘÎzĸD üÚ¸äškH˜n„ŽX|År9ũkFë‹Rdŗ•]sÂ9;};ķ“YēilZŸsf{õ ÞđŒs…`>ŖũjĚ%Œ ’‹W™“Ų÷úÕkn ÆYÍ´Ŗ!ՏįŽ:~—´QĖÛ¤ŸÂe™Ë~˜¨´ļ-[sV9<øÂÄbUQÂãîū•Îj+Ĩ5ÖfŒÜJšaˆl÷ÉÉÕrįV†æ†ōŲûÛUĪāsî*ĸ­‚Jf[ÜŠGšSwõÅ8+-JV-"ĩŽŪō[9 a}æĄšîĶBi˛EÉQ3°ę īėMYŊŋŧveˆ˜ĶHánOÔ˙…Tû%ÛÆYãTÜpK“Œįœäāđ=ūĩ˛îČ}‘VîæöŌkYČķHa0# ÎqĮC][M%ŞÜJ‡%ĮŽŪ—s)cį>>ԌG%SŽ98įđÖØŠšĐü…ÁšÛåįĐ}ßĶõ5:2ĄØČĶTÃ$öĀ“ąÎÖõŋįÖ´DxįœŽØŦ— iqįv#“ˇđŸČcęĩĻ  ^¸Ĩ.á—PpQ˛Ú§nOɚ`Œ–°éÜ qÛ´Ž?*ŸAŒû¤a õĮõ­‹<•?3“ŽOJÂi32CÍ+?ZčŦaōmÔVsœ1Īz™Ž#䔉°°<`Į|ū”ÄŒ…bŲÉõ*ÄŠÎ:bđ‡$ŒuįĨAg+ĒÃļí&ÁÚŽr1ŸNj"ø+4Q7™n ¤ŠAÜ1Č#Ž­YĄØķ ’vއļ+ •Mäž\ūH Ŋ 0QF÷ô÷ވęŒdĩ5¯%ŠúÖ=B‰Ņņ¯ĩB€cv‚;Rio$zFĸ$‡Ėw Á‚0ĒƒËœDģŲg,xŖ— 6^eB'čičBA4ŦxĀ\ķۓúí¨ÎÕlaXöQŽOaVÄI °BģrZR=É?‰$~T€ĨĢ˙ĸč–vģs$š•—œôÉūĨg!ÎrŖq¯lzŸĪųՍaÛRÖÂÄK$ Ú¤÷9ūĩ_ „™0ŲɆôúŸĖ ÕÅh'¸ą™@Š ÷Bs´{<ãĶŪĩímmȉ¤ÚH-ûĀ} °ĪåYqN  Â+p[Čë́Īã×u¯KÜĮ$h!r[h$šžzŅ+°FėWųĢ #9!qõÉã˙ÕQĪ}73ҌŒŒ€Øgô¨ŦībwbĄ°ĘĒ8ü}ũĢ2ey&–rŖîŗÃÛԜVJ*åļTŊ×,#`‘#†t ŽŊ:Ö*#Å$šO˜ŽzpsČ˙ íŒ ĒnŽ8äØ7sÆz~5ËęLD›Ii~Q× õ­Ą+čg(õfsÃåĀî’f5č9ÆkĸŌl,#•ÉA0ûۈ؜ųņ\úĢEæÂí¸`õūuŪ\ K%ÚŦéŽ?ŧ˙õš*JÚQˇ3HË{fcŲ¸üķTÚâāy]îŪ¤…ōÆ2;wVˇœ5h›hV ĶžŸĖTWW1Y’DāŽ wôÍbZ2¯4Ņ~E‘zB‚qúf˛æß`5ģ*:Ž}A­;Ûąöf{y2čz§šöõôŦk›öŧĘgxÜã‘~u´.˧nƒėdXąōԐ9Æ1íÛņČ­¨,Øá›ˆ8ādū|zæâ yåųwûļl{āō9ôÅtą—ƒLvĘ}BŒ€02zcÔâœÉ‹-Å{KmČSˇžŋŸZĢ-͍܊ˆ˜āŗsųU)’Ü\Ŗ+pw˙^Õ]‚G&"!p2?Ę8úņõ¤ĸ6Ë _vH ~ņČ9˙õT€’0Q—“ČúUXŽR’҈Æ}sߟ§ÖŦF8ĀĪ˖>˙įZĻ$î?JQũ°åŽ~l“˙jéˇ-szVĒG’y=tu•]ˆÆÃrGJ€˜ôŽMLØ$ņPē’üvklDÄ?9ëÍGĶߎ´ķōöđp)­ŽGJLdDíÎî™ëŽ”Åĩˆ¸>.ę##˙­ĩnƒ5rÛN‘Ôo89åG9éŸoķ֛jÄÅj:I‚Cæl`.pÃ'8ã'ڒ7uO-cíWs´`“ךü}ęęXÄtK“’JãšöČëVÕ"ˇRr?ŲČĪäk.dšœ†WķX™TŠ+OaŽ9¨îÛ ¨›ƒvļ1ÉíĶ=8É­I%Ü `Î=\g˙’ĢĮļ1¨\ŒŸ¯˙_֎nĸą–˛›#$0ĄĪĖsN3'Žzã‘Ôž\ūË{Ģ„QŖ Œpŧôéõ˙ԃFļ‰2ßx3Žúũ)šÅ‹9XOīfe/ԝĘ2WæõíŌ¤e;€QˇܑrOLsÎ:WIsm °ÎcŸÎĸ‡KV¸3ȏiڌ ĀõúŅíS: *kĩ\Õ#ŒúqųÔŌiP؁šŲÔq‚3€?§&ˇX•J #ŽĶ’>žé’Ão:fVäĘîʑøüę9Ų\¨æTm1”[*“Ÿ|ätíÅmXk–:XY„RîÁĪŪĮĐņŸûę–M*ēb˛I’C‚Ŧ 'ũĪJ˟Oļ3F I$˜įtg3‚Äũ^õ~ė‰÷ĸoH„˰’wšÆGaœüËū•ČøŸQWÂ’ŋÖüGŽßĀÖäŦē‘$ĖC͡žäžĀŒ× 77^c.pK7R ëœöĪøÕRގåĐąo0ÁV<āuõzqõüjô(͜‘Į,xã§s˙ęëaQB¨SÔÆ;‘ŸäOZv|É$‹>ļNNqÛļsøVŒÍŨ8k| ˜+cˇ×äãōíŒV…ü^Uû°ųĸ’T¨āū?QÖ˛īFÛ+–€ŗ¤c=€^‡ķũ+nÕVûH‚w¤ Ž; ŒcžĪzOEq¯"¨Ã1-Ŋ—vs¸2{˙WoCPM9ÛÉĄųĪøģnŧR­€sƒÁV˙=ĨšÔfU ŒŨxútũ;RæÔ-tgYËåMåĘ>PH''é×ōũ>•­xÍognģ˜*žÖeūô?Oéô5•{k2ą#pęÁäs‘ū}ąg¨ĢÆ`ēBŅ8ÃØ8˙?¯ŽF¯ĒĻ„úf l˜[OrÎTāų‹Į|`į§n}q߉uxš Ŗž@JƒĩÁëƒĮæ?Ā÷ŦíVÅ`´‰„ƒŽØĨ_ãƒzŸĄĢš5ŲžŅÚŪRsōÛ¨==oËŌ“_iģ1—Ŧcē†áH(ųF<žOĶ>˜Á?ίÅ.tFvˇŨĪLôÆ3íÜķÅeö¨.lÁgeS´įĄSÁägž?Î),.EŨŠžGŸqč?ÃņīšĐIęMŠFĒDƒ!ēũ}Īų=qšĸäß§æ=ꍮĸÖmŋ%ã'ų̂ũkj9æŨĻwwČôĮ¯_ķšÅ§sK§š•Į<{eT""w wãˇ˙Ô~•Yė„žļ;]–^Ŋķ’1ÛôöĢZ„J^@Tđ ã9aۊcŋÚ YŖbŽŖ’0}1˙Öūĸ­ybļŅx2Oũ>? ŗirŌÆVHßĖn #×˙¯ųæÅrļ÷ÂVīōē°æ¯_Ā›˜ˇd āķģ>ũķëū5M >Ĩ” Ėw ę~aîsųä˙œŠ÷ļėQ€KŽƒüįōüX—Ė€͜ã8˙8ũ?VKK‡$ŦŠČy8Čũ8õũ}ņEĩ„ĸŪ8X•šōOCķzúcüŸŅ¯xdmōL'EëŅIôįŠ•tĐb °‡ęOO__åų9tļ2Ō#ĻíšųũÎiŨ yÛK&(ÕsČĀ㏯CšŅĶīŖĶī„™Aņ ôÉįđ˙Ë}¸;›kIlsîsĮųüęO˛ŲÂ7(Ü}1‘ūzžą+= W75{ „°PbcõŸ^„}ŊgX<´Ŧr8ū%õ­"ū9âūĪšÛ‚?tŪŖĶü?*†úÁá“9`CnFQœQëî;ũzÂv÷YNÛĸQėdŽØĒ÷möxĘÆM|˙!Å÷.îC€˛Ą¸p{ŠĶ†ÎEŪŌ(;~BũCrIīĶ';PôܸērYڏ9Øyō ųųVƒ^ƒsJ•oiė# Û âĨŽ4ove{‚Aaíęi6;ÆŅĀĻéÃAûŧ÷ėOô椖fŌ´É.ĻĀģšáWûƒ°ü>ŌâFŋš!-  <#ĄÃĩsڝôšĨūōŒpĒzcëĶüûQĖÂöFˇ…l‘–K×™X¤yįdŸåųUŨ~Ö9´æš ûčyWqžGŌ­č‰åčļę2r 'ܓKlŅŧ Œ—Ū1øœÖĸOŪšJ>ęG  Č#æSÁĐsøŸz°ˇ@‚ˆ6FŅĶ>_ĶŌ‹"m6GL;@X•~Ŗņ<ûœõĒĻPčÃĖgîÉĶōį§ųī[čö3ÕŦŽŽ$¸‰$””lųaƒøqĮ˙^ˇ.5 kHĻPŌŠŧãžk×Lš]7˨ƃæYąĮ¸ëų ”Øo14˛˛H[jOëš‰YąĻė>MlŧŪ[ÚÍÎ<ÃÍgjŽ—+pƒ÷dm,@ų}˙ZŅšđô÷rG-Æ NÃéÁ tÍWÖosi%­ĢÛ$jÁCų™rGû4F×÷BWˇŧeMoo,aĮ'æÉ<÷ŽģJœ6›|°UÚ{q\^›ĘŒdũ¤˙Ÿjŗũ­v†c`JDāģwqĀīëŒū5S‡6‚Œ­ŠØNaũÉį€1ۏË5“Š?Ų sČ`Ŗ‚zúéUíu‘un¯1ToTaƒøuŠ^N6ĐÍĮ*Hüˇ?į1†ēŽRĐ˒ęHn%ĄįœzŲg™Ž$dqĪč*adņEŋwÎŖq\įšNÔD›ČR>ņíßüâēŒYzÆ&-•Dꭒ ō~=ĪjۊĶū%ōĸÚۍ¸ˇ¯˙ް­äžÖBņ‚0A{ĨlAr“ēÜyČŽ9e“QYÎåÆÅKÂĪđ˛ܤuÖ¨GŒ7͏UᏛcoąÜ …,{Ÿ¯ëYęwŠõä|ŖĻ?ũuQؗšc™Jįā×Ū¯Û;:ā Á<:ãüū[ėåŦƒŽK`į†î6ÛrWnĐx8ā{Žų?*Ŗķ4ô‚U`@ĮéÉ˙čņí\Ū€„ęŌ1˙žoųî˙ë×MíXÔÜÖ¤`œô¨ß‘Áä{ÔĖŪ†Ą›ëX‘0Î~•ÎpxŠ8۞§Ą¨˜á˛F*JHa ’5 ž™úԌzƒøT|{ŌcC Ž´ÖbH ÔđĨ9œžôÉīĐw¤4E Î͎ŋ4Ē2=08¤bB r䃎Ŋ¨c3xTךÖĄ‡–Ģ[yrWœâ°œmņ|GŽbįō5ŧLV ņj“ĐEũ?úõPëčgS§ŠWVųõÄäi˙?VģŒdŠĻŊųĩš;í¨_đ¨/GŒ€ ÁtEla-Ų0üĮœįü˙ŸĘ§ˇ'˘) 7;pqü¸˙ëUxÃe~lķĀ_âÎũ~ŸįXšRĮ@@õ?Ãū5aūeHų+ģ’ąô¨Ž x˛đ°ČéÔõE(öcÎG“ŸöOū‚›*I†Uųp’2ž)ĒŦčoÉʞŧ>•ĩce1äŽé9ČíĪjrvŽCkfë#QÎp0Oņgüæ´@p¸€u˙ūŖjkĒp\ŒsĶüöúTHŪaÎܐ@įŽ˜ũīY7rŦ‘4’¤ißpOˇ¯ô>ĩ’„¸ä¨Ž9Č?\gŪ¤]Ä*8ãŋsƒîqÁôǧtŌŦG%BüäcënrhH­pN|˛­'˜#2 ĀČVͅĒZÂĸ`¯'B[“Æ¨[Øėvžc“¸”đŋũ~ŋũjÔBrägü˙*R}QÎÁ˛ĒŽ ?§4Į’+hs4Ģœ–Æī^;˙:Ž{¨â´wķ(2XŒ…Īr+™–e’FaēF–|ĶŽŋČ~ôQÁģÃ\pE¸dfāį“úõę Ŋz)FWˆđ¤Āôätk&FŪJÄžY 9éĶ×đüÍA[ tŪøÎÔ]ŲõÎŪO`~&ļTâfæË˛js]HŖ#䴄sŒûŽj3-ėiĩn‚Ä<ž¸öīP.Xd”‡8RÜqëšĐŌí–f7’°hs’ ë€3ŽšĻŌH”Ûeģc¨ŨÄĸIÁˇęæDé×ķĮˇÖ¤ˇ’ÚiLDZÕw4ˇŠųÎ÷ūĘŽÉĘËûŸ*Ņ[yÁ8Éč?Ü•‡Žk1˜M…‘ƍؑčČũ+5īh‹vZŗ+_ÕRÔÚ8Á1#€gžIëÍ%™‡ŧž8ÛÉ#§¯¯ŠúdĶt×f3KãÕAā×§ŋhO ˇˆÅS!āžéëĐsî=8Ųģ{¨Î×Օ.į0ÄH@ųŗœOÃų~5`‘ŨVābŋ$€‘Č˙?ËéV$••ØmĢ۞™‡ųzpEVp‹É@#Œ€Gą õéüŊi­„îElņŲŧ;p›{Î2Ŗü˙‘ZšOî4­Čq†ÉãéŸķū-5OļIŠÂcÁLú¨ĀüĮëRhˇ>™fød‘7*‘߸ˇn?/BĨŦlRŅ–Xŧ7ō‘“¸(<ūžÃĶü. "oîõR}8īūčŸn'$˛aGîÜdä`ãëÛų~ÅŌÛl‘×tMęųIúûƒĮųĘąeLOHÉ\ ôéūūąÅ`jYFíËg<Øaųb­\&†Č%a˜˜0ūį×°­”-37-ޤÃ%ˇ‰"“aÚãs0‚ ũük-%vģĮvųũÆ<¯ˇáZ÷n,m..ūŸ‡õŦ[”Ût[Qž1ĪjP]ÂL•ãļŊˊę˛9*WĻ>ŋz¸`eŌĖ,ÃäPį¨ÎGl÷ũ>•ŽÃ˝\ĩ<ūįđĢf"@ĘCDŲ íœūõĢhHĸbxĨÚrŋŨb@ÁúՏ6îÎAž@ĘT˛Œ‚ųëÅHaY ų‡F+ÎiÖÖØÅ8ųēncÔõũ})ļ+2kMV2 :r0[ä^8÷Š’úf%Ą€Ž‡%21õĮ\šK{1%ŌF6üį4ûėOˇQūÂßIĩ-Ņä•ëˇņÍe)F= Šr8ƒ<ŦËpĖš#€Wú˙œúÔņDz,ÍģÃ6ߟųë]üvv֑m‚ˆ° ~uĒięrī…֍ØlŽTŸ¨Į?JĒ›)͞9ĐŦûdmŖ¸8úœõŋsdV—žŪö<œTš\Ĩ:ŪĨ(‰8m“"ÉÉ÷ z}xĒÃŌGĮœŊs¸ŒcÛ¯°ŽœŖ1SÁÉZ…â‹*6F3Đú{bš¨ÖˆSԇL3ÁfmįæXōTŠÎáõöĪëTåģ×Pȋ”‘Œ€Ÿ~}ĒĖáâ"HŗûĻۃ ņÜ}ĪéEÜōÂ'ØYpX(C`ŸĮ­%kÜ:Xˇ˜/ĸČdGՕ'‡ā’ā’DDb_{gëŠ,.ĸˆĪNÁ€Ü‡ŗÔū7@Ų-üD:S%EdÎFâÜŠŌļekd‘@ÎFîsŌŠŊZwG•‹ÎߕAÎ_ūˇŌœUXmä÷géƒéū*„2Žō1Ā*Ų9Įč>˜üjBO ä…<U˙?‡Ō ¤ÉôŖP”ûÁúĨtY÷Zį´L­ü¤˙Ķ@xī•ŽƒwûCōŦĒ|EÁhk°Ā5I"Ļ9 Ž• šíX›žAëúS1ōéÜÔ˛|įđ¨HÚ}9īQbŦ1ˆ<ãĨFO°įŌĻdOŠôëQ9ÅB>´Éˆ8Ō¤ Ÿ™…DH$‚zgĩE& Jr‚ĢœvĻļ@ŠqÜSf“(ÍŊ#cü¨:įßÛˇõĀâĨŽ5ŒmŒ.RyΎųü "ūė %x'=Oųū›ÃädĀP:z˙žžÆ¤ąÉųSƒ‘úsĪāqQÅ—&ōI,sˇŠ'=3GڔgĘü‡ī8ūŸ įĨR7OČg}Ü(u둎~ŋūĒijĩŌ¤y €z{˙ŸķŽ•YîZY?xŽ‘´`åŊHįY%å›{îī\z}ũf™)Áf!Uūņ-Ë{îęüR€šŽk<đ91ķænŦWļr¤Îxá.ņûšä܎ŖĩBŌ>U7^HR`œ}ÕNj'$BTüĄT§ΰ=æ~•J6&ⲗÂ…čdã<`ÎqŽO¸¨ļn\eš|™ëJ --îkŖų:;ÁÚw_öĨQžBG (8ëÜķųŸKē‚„Ņâ‰Sîíëęj-6Ō[ɞ΃q‘eģgp$úãņũR˛W­ØmŊ„ˇįėöņaĀä×Q§xY …EŨÁ-Ž‘Į~Ļļ4ëtû4Ž ,įĢ\úSÄÂ@f%ŲrQŽž¸õ>õ„ǎĸ6ŒÜÍo X…&'ÜāßŌšä‡ÉšVš5wAÃpKˇl~Ÿ¯áŲÄLō3$hęĨļŒį˛}kŠģwyæ%FÉĨ,Ŗû ôüzSĻÛēdÍ%Ē'‹Ä"ŨĨxâ6ŗ–Īķ'ëVíu# š›÷€ąČ ĖĖqÉ Æjž‹áמáî<õ{qōüËķ?ũy­9´[FKHģ†`ר8õĒ—"vy­råƒļ¤‘\ĘsBįøģW. Ē’˛7˜gđö5ĪÜŪ\č‘ų@n@Ė ‘ž¸€?‡JĖ„’RÎĮVqĐ}1šMŸ;L6g+ß>ų&ŗ§ŧiÚx`ŒloųlĮāûsô4Ō¸›ąlj’>æ‚HWād“ØĮ_ō)Ž5 ”/°Ų™˛Oōōüi–ēxšõΚžLh l<6IÉü€ZžöÆŨ#më3c•HŽĀŖęp?:z&-lsz­öĨk#%Ę•bGõūuJ ā†9bvķĶ[#€:įį˙¯Sęj–¤}’ęeväÄį=ēãĄFk ŠāąØ\ņ…f<˙/Öē"“F2m3­:ęĩč*Ō˛|ÕWUôÆ3Ür8ë[0.ÎĻGR6•‘ŽPúØņ^|6Ę#O˜?y”Ũ8>Ũ+^Æ3%(žfnʑÆxõëŪĸtŌØ¸Í,Ø.Pō9éųæ›ÚÛĄ†]Īgeāz{Ž•XMPUöŨŖÆ<ĶūGÜWiČûĖAãę?úõ›E܎KuzûŊķĐāÎļԒF3YA˛h!l2ŠŊ aZ7`ˆĸMō7lār{TËQ­M/– íæš6ÔnŽĩãĄōĀÂã¯jߚŪâb ĶÆ‘ŽH ’}šĻZZAe,ˇ*G•Øääõ$ūCđĒ‹I$Ųö’É–å¤UQ'üûÖ]Ė–rÛĀ֌ę2Ä÷ˇŽr{˙úënëP[eyd 4' |åOCŠæqæĖ÷-Į.Å@lasĮīĪáW õ&VŲe­ė7ĘáFTö8éK>iqāŒz ôŽ^×P6“äœFN'õŽžÛP†hU‹ŽHÎāsS(¸ėRičĖÔĐÅŖŗÁ0‘ČÆŲoÂĸC›ŗâ :4c?AZ÷ÅpÛVB’„6*I"ŽPžvãÁΏŖ™õ*[ā˛[ĖûJ2œŒūfŽ4¨Ÿ}—4×ŧ‚>Nsˇ¯SY†Ļ’/ČpŧeE^™¤“lm¤ŠÚĨúš1Æęr l ÷˙št‹ŠÆsË{u"ˇˇĨ`hcũ&|ī1[[ŠŦ§šŦ6:"8<Õv9Āâ¤PʸųąÛ&ĸsķ äāÁ›!­ĮĶŌŖÁ,rI!įšīPŖîc•ųrĨ!ˆĘv’O^ƒŌŖ 2Oj™ĮËߎâĄ<ãšCLįŸZ‡~0НԘĒÃ,ŨHÁq€qšU$duĮëMá8<zƒąĩ—#u2.§LAaŸZīcФ —äV=§'ģí˜ŋøšÚÛÁôĮJÅ´$øžđqūĢ˙‰Ē†ĖĘ{ĸ”„žąt0Iɨīū}…HįĪĩ?8ÕnˆÁ ļr\ŸZmûüņqĪā+ĄnŒ_Pˇ`ūëF:­Mo]ÁTįž*ŧ%¤ˇŒĮĀé‘ÛšąË$ K §ëCBņˇ˜҃ĪĪoĖTčĄNҐ}ų˙?ĨDĀocžũąūįųZXŲ‚†Į#'¯§ųĮ˙^[NrO¯ˇųü)Đķ2 œžHä{Ÿūŗ0zwŸųüžĩ""ƒŲ^¸cę3ū{{R/1Ā]ßNšéģüū>ü:,8v†$ÎxŌ뚤cžŠ'đūõe`ÉW|ã*Š!~ž˙į¯J†Q"VĪŪ< Ŗü˙ŸzĢstōKåeŲN~ŊųįųŽ­’> >šįëÛüûôŦۆeP„—^\ˇnžŸ§õĸ:˛ĩÔ¨—ōNXõcôë‘ųrGZŽ1å:+$lTsœ(Î{ôéīŠUɑKƒ“åÔĶœŽ´āœmF`€¤žŧ=ķÆ:VĻc"ätÚ_, Įžį¯>€ƒõ¤E8; ųąƒĐāgԃĮĨZ„^.O*[$žzõ÷"Ŗ"Páqà ›ÛĻsėJábI%w}Ō#ߜvîTŸJ…–@§ĖŨž GŨ#ß<úZ’B eONWqįŽI9úœRŽÕ/1ŽF éžqƒŸĐįéT#CEĩŠ[ĐĪą„’1ôg2xŦj’ßŪēE+-°8P ]ÜāŸÄ֝ėͧhn‡âėũҟ•N͟^‚ąnc…g‰X”3†ŪsøúzúéCWqËEbŦ~`ÜĖ#NĎN;ũšŸĖ â;dڊ0ōN}9깥îŧāʑ3yŨŸ¯Cøsšģae%Ėk)ã=Ëu˜}=ø­­š k ČcQR6‚sĮ#üķî5Ŧnl…1ŕP[=7süŋ!ëU¯ŖŽ mŪØīéČûņVm×mģ;/#'•ā‡ô†˛–Ēæ‹A÷sģĢŦFn˙įŋ­dIžęę;t'ėSŒüĮ¯×Œ~gÖ´.IųåÚ9'hãŠ/ŒķÚŽéž’6Ynō1 įÔúōB}(æQ@ĶlŠ In‹€ éžzū_–zæ‹X U ŪBsĩzs€9ĮŋŸLÖÅõŦ–é ÜļĐÆ¤2ÆĒĖLŸjˆŨÛiQ,pŪįho~Ÿ§Tķ]Y Į[˛€]ĖŠ¸ŠîI9d zõ˙žĩ"ë:dLV×N–' P[?Ė˙*­Ī‰ŽŌ_Ũ\YîHsŨ¸={sYĶøŗTŽ4Q,K';sƒüĪ'?ZĨ÷2FĶk3„ˇ‡Oˇ Ģ‚X}?>šīV™/fÁ™ŨWáW=ú˙>}ŗ\ˆ×ĩk’åŪÃå~_^ƒ5Š&—stę÷2JáŽAv …ĮŋLū?…˜”Ž[¸ŸNĩųæŧÜé’y„úäãôãŪŠĪâ9Lb-=ŧxååų›˜íž9įđhO!ĘmĮNOũ:wüûÔrh0ŽåÆpU”žĮĻ:˙õéĨânCWO–úO>öāĘXŽKup3ĮB?/ÎyŦ­Ö=Ū_–3’  G׊üšéÅX&ŧĶĨhÚ'Ø2Y@<vôƯŊ[ē†;D ą9R=}ų•SŊÅŖE[s&Doä§tû÷ĮĨtC P1`ĨHã$Ũy9ƟͨĩŸ%ĘiÖņF\<¤pN÷žžŊŋ&$×z—,9ˤķ뜟ŠÉŠw~ƒVD—˛K#­r@ãv0Ŗ×æ$ūĻŗŗy§Üli&rÃ?ũFĩî4ģŅØ‚[đ§×Ž=+žEķfN亜ÊĮOQĶĩTuBfÍ­åŊãyrF‰!8+“‚zŽ?úūÔųôᐇGĀáųĀôČú~†ąŽ2߸üÕ;Œ‹œŒsëÆ*͞ąåÆīvŅü[yĮĐûâŽWē ­™Ą¤]ĩÉĩBlŽ[Ã€§ųÍ3Ä1ySDŅ‚‹å•Æ>é_oķũ*)åĩŋCģ•q•‘mŖ=HĪūĒēˆ.tŲ-ĨŊŠcƒ‡īÛ¯_ëRô|Ãéb;“žhĄ KEfî?Īõ­ß@b2Å]Ę.{„Q“ôäãķŦˆârė„n‘€įō˙#PjŌ}¸Ī,1î‰X!ŽŌĀã=zgÛŊL––*;š×:ŖĪ4‘G÷YögĀëųŸĐאyqF¨ˀ6ögƔ’ÖáCdŦg4›0Z5ˇÜŽįxĀČũp=}ęå´r+#Ä šcčzw?äÕ{Ø\yrIĶ67c¯Q[:"1’[hĻ@¸‹’I'N?Âļ“÷nfˇąĶZ¤ĶZDŠŽT’NįŽr2ãÖ§M=Ö<•,C (ÛÆ>§úÖ]Ūˇvā-§î°ÆÕŪ}89ūU—=ÍÕŅÍÔĨÛ´į§fš”[5rFėŌēhåķ#r0žjŸ÷OįBŨ”å;Qŗ¸Œįūúæ°â¸Ô R&ךˇĪܕ–OĐķVl❘J°ŦD‡ËÎā=ÆN:v§ËĻ ĨŠbi7ų1™/"ĻCÁ=øĪĩj­ŸŸ1P?uģį ‰Íc’Ëpą|­*üČ:m>¤{fēA( ]*¨IÁę~ĩ3ō*(§u+iķGļÖÅvHAÁ\tü9ú{Ķo5Ō#æ6ĐÄ!IdduOéL›ÎģŠâpÛQA3•$n'čŽe‰¸–ÚK™ä“q ¸I#$ķūˆÅ0rhÄÔĀy†đ@ørŖūcúÕ_&C–ŨŒÄ?y…v:ŊĻtøR(ŒŠãw˜'wšgšÅ:CėI&Lŋ éŌē!5cCSĪbAel–n‘éZr2ą˜‘ĩOŪįžŊ?: ¸†F¸†"ņ ÎÂÄsŽŪßÎĩ4í?į.ģ”o႑Ā$c¯§5RjÂIŪÆĘí’!'îûX“ÅYļˇ7bW‘ÜBŋ.9Āįō¤;FS8Į/Ÿä*ŪžåŦY#ų]”ät9ČãčEs7ĄēÜËÔĄKÖĪ/8!Ãū$HúUüJë)m1į‘vœúā˙õ¨ÕõIĖŪDĘĐŋ(ø<ęqíX¯1bË máO †ƒĐ洌nĩ3rŗĐéUŽXÕōBãTæģēŊmŅĶc÷#§ROåXĖāīÜŋņ ™?ˆü+{GUŋŽßžáxÎŊ7q)9m4›9ƒ]ŦEˇˇîËNyīדųTōÅąÜĒ3ŋS÷XūĩŖu4–Ņ Š› aqÛųVšÕĮ›äKϏcĶËpĮzVkšZ—+- ē…úĸ…–ŅĘ˙ĩŒ}p+:DJKc7Ë×a9ĮøVõôMwí‚äÛ§ôŦ) –Ô´a_Ë$sūI­bô3kšö„Žč&icm¸Ū¤ū}jōŨ]´ƒÉ/}ĖØSũj}*}FMą/îĮ ėxŸSW&ĶE¤J äˇPõ÷Ēml$˜Ųe¸p|É"|.HžãŠ8ĪZßĀô5Īøtîžā˙˛•ĐsXOâ7†ÆąäĀc´į8ôЈ<ôĪÖŖ>žâšŲ˛!pr{ķõĻ/ĘĨOLԒ|܁“ži‡*0yÍ!nƒsŪŖ1Ķ)ōcÉã 5`žOzC’1žÜT{Ã‚H#Š•y>âšVÎsī@Ęōt=éø%éNpO8Îzįž” ķ›Ĩ,C-I:ĮØĶ ûŲĒčÍĐOŌąŦķ˙ =ßōË?ú m6rõŦ[ŸŪ’0|ŗüÅT6fsŨĘÕīH'īøî{ĶoyōŽņmÎsŽũjb‡û^ôŽO8<}*Žųw´xnäõĪJč[ŖÔ†Ų‚9P223ø˙úĒÉ I …ÆsĪR2Ë.rÚ@ėÎ3VĻeŦƒĶ œņĪŠúS{“ąj˛íŪÍ´“€XōjS$–Ō)xđ`Āō? Ĩ†G‰>lHÆHĮų˙8Ģ2ČY0ÁŗúuūŸ×ÔÔ5ŠIčM*ˆä< }GĄ˙'üZŒ Ú3‚@;†qøõĒ;ÉØ՗éÎ*ŊgnĘppF čx#Ûõ¤ôE-G—ė@xTžãßÜ˙œĶĮÚ7r0ĢÎsœõúzŽĻZX*€˙ČūZGqŒĄRĄą×ß˙×˙ë5ĘąÄČĄrÅG#ęzö˙ëöī^qĩÁ=ˆÁ˙žO•8ąō×dAĮNü˙Zl0™rėJ¯cŠĀíøúęŦIUƒaIBԟE$žqũ?ŸÖ§[ ãæ#Ÿ—€ŋ‡Aî*âAe(ŽÄ‰'luüE>Rn ‡€qūøí>fĨ$ˇGPĮøSîúr:b8Ļ’ĸ=ہVč Īō ūæ˜ĶoĖŦ+|™žÄžOü ßÚĄ–FxŨNxQžwc=Č?Nŧû v„rmšMËšØģdŽ;ö?ŸÕ­„âr˛ŋ>f?˙&šąĘŔ1fā§’=äûøwĒíöEVsöPØÉYXî?÷ĪųëBšSš„ÆîHĖî>úm?(°9­jQG.™Č$Íģm%™Ž?Ã˙¯B 4ēušáH ¤sëĶüö­ °ŠĨJI÷  Ņą|œņÎHU7Ē´1ŦĨÛsū’…€ȐÃŽF2?õŽ‚ßSĩ™Ä2 Rxķ‘Û'ŋâ§ëT,í ģˆD>K€sS€ŪÃ˙_jÕąo2ŨŒĘ<ØrČĮaéĮˇz‰´Į”ށ–ōVäg*¤ŒƒŒg¨æœōĸ¯&ØÁÉcÆsôÎ~ž§0Īr–Ņ4ÅAgc[đüŠÉxæēc,ŲĪ,m̧:ŸW}Áģ)ŽéļOû˜äē¸*ÄlŒöŨéœE â{Ģš#ĩ•v-´ŨFZȎ/3…P›ČųT`ļ;û} 8Čû^U2H.ÃˇĶüiōD\Ėĩ šîßdû0ũÚ=y힕Y {Š–F•Áé)9ũ}ķW ˛Ųķ¸EäŸĄĢ\^=Ņō,áo/Ą įüŽ{úS^BwęE;Ĩ§ ĄF?ū¯ķÅQXYÁc’9lžŸũrjG§[@ĖnîrGQŧ!8푚Ŋ ũ˜ßBgęŒdzdž}r~”ų­°Zû™ZR^ZŪ ĸ†@åŒy۞æē[šŖ°ĩĶ´lNBĻ~cøqüūĩ›e¨jÚŨßŲė T Î˙ųäNGOÃōކßĀđČYīîäšFęSåķéYԒNō.mhrqÜ\“%‘h“~0 >Ų;ŋúõŠiwŽ\Ēų:|raA/oÃ?…u+ám=WiYAʆlāúæĩ,1Ē1$´qÉ5œĢ.ˆĩIõg$r,ņ0°{Un+šĶžN?ĪĩRh…ÉQKô1ŽpqÔ ú. wŌŦĶ'ɄQÁúÖdē^mģŦ!ēĮ÷•ŊpŧcųR^āéö9*K‰<ÃL $ ą>äÜg×ŅŠÚÚÅÍÖķœ7– úüzõö/ü={ ™šŽ7ĮĘŦ1õÉĮáUŦŧ °ķ.æirĢā7â9ĢSĩdōÉ=ĪČfÕnwEnō.s”•Īūĩ2xzU$Ēžb€HEŨųž+­6ĐÛ[í*yū}i°*PĮk>b\žŪŋĨĶMČ¯Šmáë‚XÉ($¯'o_Ď8ãúŠĩ“ [ŧṇ2ztĮĀ֜ŠÅö V t˜õ§‘r ŧđIūG8ü*äËQF`Ōėˇn˛0|ƒ?†ãJ4‹ 2D e9ÂHrqëūE_3l[p Ã`ōOn2x§[Å%˕ ’@Ā>Ū˙•NĀ’*Åa °,ˆ˛?C$œûõę*É]ŠÅB8`F}ųũkDØĢ>Ņ*ˇrĩ^kãɑĪ^IGä*y¯š\ļ1ĩ YR5 ą“å œ?á[ÚdŦm!ˇ ö˙& ēĶ BŦ¯ēáu$`duãŪ§˛ž9Ŗķ2˛U9÷Ĩ'x‚Z–.ŦíîáÄȧ=¸úĩČęļŌi× ų‘ŗo]ŲčO¯ųúv|ÉûÕ;í:ÖūŽxIŲéD%g¨å˜øŲR"?Î6Šô'ˇÖ¨kzÕĩŨŦ6°ŗ%ĮWR§ƒčCŪĨˇđõ×Ú&¤ Y2ŽĶq‘øTIáˇKŀŪɘŸ;1ĶÛđö­—%îdųŦbIĻÎ!ķí\4‡’0>ŋŌ’hĪpŠŧsōŒcđú×nžļX~IæSˇå`Ũũkôšôۖ”ēÍ"ëŧu=¸īTĒĻK§cmÖâ_ßnQÁd|ŋ€5xC}Å#9RŸŽ:ŸëW$×!Ŋ„Ûę6ÍŊNVXTyÆî‡ŋj KyíŪ[YˇĒũåtÃzgüČšÜj+ĄETIlĒ›ã?ėr téëV ĩš*÷ ÃčāÕô°’$•‡+°ōO~žÕ W‰X|囀įčj9ģËÜÉVD’B¤ä rG8鎘§†Nwģ6;N?T50öļZsKûąįŗ1#ļ02?†ãÄ0Åļ Hå//ņ7N:wúPĸŪĀÚZ˰ÁwŊĐ3Ę`÷ã>žÜõZãS–éâ†JÆ Ŗ€qķËnü,TVrÃqˇœûĪQ+eߏ~HöŠåąûDūrl 0 ,{˛ãÁ§džĸģčtöŅE ĒC]ĒCU?ą4Đí „nęOøÕH.VÔ%ŧ“KŠPāŸūĩM6ĩmoÛžá×øbŦ­+č]ĶZ–fļ ˆ6Ē_l×1Š_ÚŊ”ëk8֔äÃÔņ[ęk:té ÉĢ$‰‚?JÃļđũ•ÞWS&0Đ}žĩpI?xRō1"vŠÆ)CŸ0žŸįđŽM†a§Œ ŽK_Ÿˇž*žģ Ŋ­¸Ž €āqÉ&ŗ#Ö'°‹ĘČiTp;rkVšÖ†IōŊN•īRŲĻ/nzm•~´ûmRŪÖ YÕ¸|Ŋ§ųõŽ&K˛—.ėí“ŪNœTqJéŒK…ãåę3ũ(t{T7ĩ+ˆī‹Ŧ›NY{Ô;öŦŗ4âE‰7Œn ˇ'ˆüęČg¸€š8_Šœņú˙úę])?×‡ĀŒ”ÁÁ&ĢáDŊYĘÛX8Í9ĩpĢ*pc’ĖŊ}Iãü÷ĨÔ:ŗĀŌ>íU ÷4åTEÛĀÆsŽŨjäļėpTŽxūg¨˙ ƒBœgœr3õũ}ëDČh‰“¸= ãü˙œĶĸڏDƒŸ\ĐJî‰ų}?Ī_ūĩ,xšác 6O§ĶÄnxq{]ŠĮį[Ø>ՋáĐwÎs˙,ŖūĩšųW<ßŧm v„Ÿ—ŒŒúԞŧÔn7zÖ,Ũ r˧œqښAJqÁSĪj˜đØ95,cdŸ¨âŖ“ŒjsĨrpqéQ“— 08¤VāÜgxķŌ™!a€HįŌ”6AĪqƒMlœ?€CáF{ž3H€€ŲôéīN|ėžôõl æĖ›ƒ‚yīIÃqRÜĢ%Žr}*ŧæäUĄ=˧ą´˙›Zŧ$yq˙|˙lˇÜÉīíXēIĒßú‡lūũj¨ėȞčĄ˙1‹åßĪįš/›89n¸āį°ô j×ųč_ŽūŋZmė„ē´u9$ŸNĢuē1* ČQČ9éVd i(8\dc׊„üČNá÷O^ĸŦ ՜ã•ųšäzÕ2IP-ƒ Ŗäg§éíP!k’žc”?Ũ sü¨ŗbĢ„efŋb}j4vYn퓞ĸĀlÛÁp€Čķ÷ēgüįķéV>Đ7‚@ČÁūDë9.q‚€ ¨Č§ķĢ|ÅLlXƒ‚ ô>ŨqĪ­fŅkBŌ´ŦœcžPā};¯?ãSÅn÷ŗ8“}y'>˙úõX(RQ¤%Šå‰RIīƒÅjÄÎyų†H?ŌĄģ†5´`ŽÜw `ū„T n‹¸îInŋˆâŦŗÆ™bÁ2qģ8įę?ÂĢ´˛P{’vŸûëåJėDm+Æ@\1#˜‚[úŠ,ČN –eč–Sø‘ĀÕĸ  čÆČũAŦų7ĘūYf\ũôŨŧđJ8öQW!€™ŲōĄFūĐwQÛ'ÔäÔXf”3fŨˇŽâO§fĪžN:TBeoē í_žÖ9ɇŊC."TF_›<+Ÿ/å'§'õ5h]WC’Nârvą8įŒgœtīĐ ŒĢF‚ķ´ļ[‘ŒãĶĶNšŠ˜HŖx)=WÔdžž ô]ĸl/ ŠxlF21úĶ5HD LĖx ÉRsߎxãķ+B+YĻđüÖöæIļ8(WĄ v}?ƨ†E wČ~é’FzŽšĮ×ŧVŦ°!xaŒCŒ’Ë˙ÖČüč“ ŗnmFčĖŨž8>üœ{gˇô“PÔcŽŪKXÛ͙”n.qĮŋ§°į¯j­q§ "#Čų'ęŲ'ōŦø4kɆ`ėËįõ8jROVÁˇ˛&†ŪG™IJ€>V*y˙ë{˙*ŋö9ĸdø<åcwČõúĘģôˆ-íÕ‘ ôŦ iļL#n<Áž‡ú~<PĒs;"š9UŲ€îNâ”ąÂœ’{gˇ5sN´XKuÜ>fØsĒĶ!A,ĨČäLägōüęŨÖ"ĩmų] Ÿ›¨÷įōĢ}„ģ™zž ¤x”ļ0FĪŋj†Ų\ĀûTGä•Lļ;séߏ¨¨‘šFa ,Ä ßtœsßŽĻŸ$m ō]ČÚ 6sÎNzžGJĶ—K}nH-ã€Y@ËšÉį°9úūĩ4i”°ā`剌#ßž=r*hÆģByj ’H'q ūĩkDhcNG ›ˆ?\dŸ| ‡&ŠID+ ŒpAŽ<åŒRf8ĮĖ{~}Ģf8’,2įÕÉŠŽf=Em°aWfûģS%ō:g?Ö­EĢŪ2|đ(`>T~ üsũ+šQoSx´´7€@÷Ú0 7ÎĒŧŦŽBĖŲųjĢ SĘKĪ"ãwŖč3úք0›XHQ¸c€ ūĻĄčUî"M;)2Z…Î "¤Ü1Ž3Ĩ&đĒ2ü÷ČĒ“^˜DwĮ;OO^˜Ą+ė;Ø}ÕЀmwc'=÷ŦÉ/X„ĊġĖpOā>Z&S%ĘnbÛNāĘIūBĸ€įīt™‡ķī×˙­Z$‘ ļ#¤ŽĒß´Ō÷DŪσt#=Ŧëč2ÂÛdčJŊė{įZEAã=x™}jĪ•I>|`rO=ŋ•(î(uŦÁŠéyėāgôëųfŽiúŒ7ōÉs+p>aĪ2FdŪ¸ŪOcˇCĮĩ\%ËgØû(ä‹OWōąnƒpÅGÔvĪ8Å>7Š%IáxÕ… —#ņäwīV.¯ekxįŗØ!ILW1ș#œr=3ĀÖ.Ą ŊŲ’{86E+$@›žHĪ|*KŪÜOMģ[‹Wąy°™<…' ¤œtÁHČĮĩb=2[ۉ.īŨdKgÛH>LŽŸ‡JęTĒGĮE‡jR¨Ō˛`›ģ1ī|;i2,mĮ8Ú95É_éĪjÅJ€r@īôįÚŊ™vƒÎĨr> )$Í’pœí?ĻÍ*Sw°ęE%sœ‚f…‰ ĩOœcͧzča‰ŦábRÁÉ*Áx,yžqūŽfUōŸŽØũoŌ´ôSb‹IđPüą3vûu÷ü+y§m ĸ͏˛nĩ’1ŋgs{ÔöëT#Ô0"t9ä ÷=?ž+T'9¸û™ÁŦ›ÁäĪŧsōFG§¯JÎ:čS4-ĩ6NrÄ7Nx˙´íF÷ĪĶæKnaÔ~Ŋë=gāwĮ8˙?ˎj8ß3d…¨č3ß>˙äQƝpģØŋf>Í c‚ᝧĨVÔ5°˛DãĻŽxũøüÍ6yrB@ũO>ŋ¯ĨgO(ØIÜĀķ™ŋ¯ųīT•Ũ؛ĶBĒą2îi qˇß}06ŽÜúõꕤ[¤ķ ’O?ä֔J]YÂá#ĪđĢ‘ R¤éŲ$ŠÃpųF~÷áׁ îqĀéßü˙‘LģMˇ.Ęäž2zgŽ)ņ.mc)ĪL㞯˙ǟAu4tĢc&W,s ōū—ŊiKÃ æė{qŸķî*Ļ›"ĩēŽÁ‘ō‘Įķįüū5'šŪ~UžP=Fâ1Yģļh†\Ī oaĪ#äūŋįÚŗŪuy S‘ü'=ŋĪķ5=öŲpp‘úûVtAâ}Œr uāô­"´š ģ’y…KįƒŽ•zÂÜÆĪÁ'Š[KUˆ}¯&yÛÉCÛ§ųÅZĘįpÆp@īūĪjģ "߆đVcÛˏûčV÷™ūÃ~uƒáÁ˜åaĀØŸÍĢgÛķŽyüFđØÜ`6ãäĶ@)įæŸĨ1¸˙ ŚĄ‚øÔzŠƒÎŠx<IϐsÁ¤ĘDrü§lg4Ō2¸`1Ķô§ČōOoJŒ€GN•% ¸ tč1Ll“Ž)Ä\œĐųšõ>”Ãa„b1Í4Œã'ųRģ ŽO8ôĻg–=)+j€úvĒP1õĢ’yĒsUasTļšp}Î9ĸu=LôÃúûĩlŒl†ą´LũŋRã?ŧĮęÕ¤~g=Ņ@aĩ;ÖČĀ”öΝ­%Ų+2üÊ8=‡áMOøūŧéū¸ņ×ø:ī"H÷gŋ`㎂ˇ[˜=Šë†ĪĖpGSÛōŠĸcö7˛JõÎx¨•ÉŒŊõŠ`,fU uäcę};U1-HÖ',6ōyųŊũēTà ˜pĨ:į‘˙ëü*AČ< W¨— ėsëEÂÅÛt’dTín ͊֎ą2@SĄ‰éíÔ~ĩZÂŒĒ}ËÉĪųũMmāĪ*¸Î˙=ĢŊt4Šî$¨°œ‘–mĄˇQšK™¤vU‰ĮAũĐ=úĐÎÎ뇐 ’8į§?O֗–1´hĪÔ3ˇ§Š÷ūulĄéĀi2ԁÆĪåßëI+˜ÎŪ+úE5ˍJË*ũÔLÄüĒ#6Ä%ƒ(žP˙…š™_vq?ėü§ō$~bĒ6Čâ! õåT§=ķ’÷âŦŋīq#ķR DIJ!ęåÜšË~$gķĢBdo„‡$ ņ€{ŽĢøäLuhŒQŖlæ?9‹+ęA;@öŠÉq,¤ŒûB“ōūD`ŸĮ5bĪLE_2rģĪŪā;įÛųwKVM¯ĄŌũāN–ĄsĪ øjÍē[ŧĻiPąūŽ:ãŸzבŠ‘ˆŨšSã‘õįųR}•p’ˆXąč1ü‰ũjNcå*Į$3ąUP@…/ã‚:{āũië ($Ģ$Ãuä÷Q˙×ãŠéW>ĘeLgwmāäsũ•<Ā" ˛ŦpŽv€Ãn¯ĶųđjyŠą›—WvÎcČ䝲Hū_Ō¯éąõh˙įœ?9Žũ}§SŨZ‰r¸,#Ÿ`ÃéžG_­_Ņ"Ų’ãĪËÛ#×Ĩ-ŖŠĄw!HXŒō1ÔWvōÎŌ`’ĖB œõÁéŽkŦÖŽ6ÛɰPņžyâ¸iŽc‚āǜ„8 `œĶķ>ŠŅPĒËĘße‡t Co xëíYšōK'–˛‰÷“ŒķÆsPK<ˇR°ÆÄOŪ†P~r1؎˙§į‘W¡†{yŖeÜRĄˆÆG‘y3ÜH‘¤™pĄ—žįķ5r sĻ[$–ÄĘ ’Û@ëŽyę?úõŋ*Pą‹ošįc$ŒąæÜø;TœgëXëĪgt Ô4â…ÎÕhÎw};ĶŖÕŌcæCp™ū4~‡éŽ•Rī^šˆn’×pŒõĮų"ŗŒėŅr—TÉõK;iã|ęÜy8ŒdtŦ¨Œ2ŪGn›ĀąūŸįĶō­6ŗq;îT~znéëü‡äGáŧL¯ēWN1–Ī×üúVĘ -Lš“gq+,ą\[õ;F1ë‚xúb¨_\5´ĄT+I7–Á\t8?Ô  šœÃOŠe7ífĪ2Š%y-ŧŗIâI圖ōäaãŒ^Ÿ–=+%9“(ëvw‘Û}Ž9pŠ3Iķta´‘üå\ĖPŗÃ¨.øÉū {פ^ÅîUÃa†8žœd˜Ŧ°ÛE0 8 ŖÛđ˙&´…M”50•>ĪÂģ¤#ĻO>ŋ_ūˇį ĖžtSMķæųÔ íúũjÕüŲj/rą™TŽéĮzĢko3[ų“l Î]— j­šëCĻ‹[ŌB;Xsîų­;mJ(ãA mM …žŋ§ųÍyÜną\|ĕŨČöŽŠÚæMB_&Ū=îßÜĀãŋl ķųzVS¤‘q¨Ųš{‚]šãå#§˙ĒŠŨĢkb&LË$‰2H[…eęšíßķ5¯cŖChË4§ĖŸhËąáŨôŦFķûCSÖû];į$ņ ˙}Vqĩė‹–ÚįšO´‰(ĻP˛'fäô=šüęo[2´čvŧI-ČåägÜr*ŋЧKH-ėĄF,Bā/\­]ŲŦô¸Ôžų$ųŗŒdv?ĪãMüøŠz“$Nu $>]ĩÜhø*`Sš….Ú×Zĩ–R]†%9ŽGåōÎļtûxgĶX:ĀĖ‘Č:žõÎ+Xd¸Ôíâļļyd„€S /Cū}E}ŽĨMOIš˛žâæŨK[ŗo`‡”îxôëĶĨiYj( hä#,ĀČãÛ­l ˇ¤ ´epIúcŊcÉĄ fgDpŋ>Sœm>Ø}˙ZŽdÕ¤-;ĸÅÕ¤ŗ˜í­¤eMūdÁãĶëū ‘,JIäõĒēeĩÕĨ°†gG äˇRŊÉ'ĩDģŒŊFüE ãĻyÅqú† c-Ŋ iåBŲ™éĮ{Ö˙ˆ/-`ŒĮ„.9ÁÉ#üôĀI$—R´ŽŲ ƒĶ?A]cĨĖ*H™åËpۉ,Gų˙'ņĄŖrIƒŽœ’.ϚŠŋÂ;sƒüĮųíJX’AœƒÔņū?¯­nd_‡ZuĘ͸Ą#>ũëNŌîŌų|ĨÜ[q—Ô×;\Î3Ûüķ׊hŪ’)RvŠ;ēT¸'ą\ĪŠŅĪĻ”š6‘qČ“üūžĩF‘g¤\l ā“ŸķƒOĩÕCۋyļ ŗōļÍõ÷ĻĘBˇ +ôĮõ˙?JēÜztĨ$.Hë‚xéũũ~ĩŸ,ƒpÁāäŒ^}yĢÜp p{zz˙ž*(`7l9Ā8…ZНÉė|ĔeSŨGOđ55ܨ¨’¯ŽˆqĪųūž”Įe‚A.ĐɌ`•PŦ——;×F@$ãŽ˙JVžŖØtp™]–5<đĖxĀúŸķųTŠōŒ–@ŧĮ?ųrÄQ…P@į Güŋ?Ëë3F“ °Éīģü>ŋįŽƒbąF;‡‹ŽöSÉÁ57ö’HKK¤‘œū<ņPÜŖ#íFĀĮņš˙=ęŗFŲ]ŧˇQęzwīNɊå°áƒ0,rHķÅ8€Sđƒœzūu 2aGN1ķÚĨ, XäãŠáģúũqū<Đĩi/™Öl˛œܜuü?úßĀ˜* Glß úõĢ"ÖFŽUnrąĮņ­dVōĪ#wĮ_OķųRc-xdbÚoĀ~­[˜áą˜f;ŸûéĢkⱟÄk…Äã€SœqĪJy$ša °ƒ6#$Ž9Ļš§ąįĄÆx¤4FØ$ú˙õĒ5!—å>ŧ {–œŽœzjeT.pHįŦPÍ §ž)IÚI9>”¸ŽNIōœs@ÉĘįŒT\maü\.>„ųĶØÄˇĶefũãD6÷ęHÅk%ĒBį<Žįę1NŒCŒãwĘIÜ}ņ֑™3´ČR{įŠŦÛmš$‘h`•ˆģG ŋáMdi￈mŨæ<đ7M[XŲˆ'-×.Øü&Ī)Ķh^Ę į>Ū”\,RxT2–~ŖK+`ūgúTéd­#DpCĪ õæĻPʅ°Č^IúÔÄ1S÷BŸzWDMj…ļ_šäˆ-ēÄ)čWņÎãĖėŽ* ­äށÆûÜԭs"aY\Ž™ōÍ!’MėHãzŸ¯øSÔZt"Čåƒ#;ũҐ—4Ö.ËbÜgžä’2Ėųōøá”c'ééQ„fÉÚqé°c4ĀlĖ€3o*Ä ģpëYq^ÜŲ;%úĨTΞyZŌ’MĨQ”üø'’OÆŖšÆDˇXNîzūz}*“čÉiˇ į•fT*zC}Æ*‘<¯9ŗ´r@ ëūaG,ē]ķĒ+›WėFā‡ÔNŋ‘­ĀQÚ0ēČGŽŌzã?J§ ;—āĶ•öÍ:Œc;O¯éÅ\[Å1v íųBô Ž{UČ$˙EĖÃ*ĞCwÎ8ŽV’y5Fû:Šķ†UčGŋáQš2¤ÔQۛ€Aā÷ö§›¨Ôƒųg5ÆC-ô%ŧå9Q06üŒõõ˙?\ Y./Ņ~D— Ã/–r8ô˙?ã^ËĖ^ĐęÚ{{¸ÕØų‘ĪîžĮŠģĮ!"ÆŅĶÚŧæ=JúÔm–9–'ČÜČqŽŖ>ŸOjągâ›Û)S,@œzâ›ĸú T]NÖ{ĩˆ3d++“Ô&73:ÆUÜđ€ˇôžøę{š§{ŠÍŠ• …ŨĀ`ÄŗO˙õÕË[w¯"€šĀ’1ôīôéíUrjÉræv3#Š=6ņ噃—DÎIāgpËžzԚ{j77†==Äp ČģTûã<õŠ-ŒWwöÉ,dFĄ¤`_ Į¯ŋøũkOOh..mdß°rÕPöTuúšnz\J:ØÃ¸đÆĻθKW}ÂUēö8úÖx i)‚ä]Dę::îüGP~ĻģëËxLŧ6;Fyüqúâ[…Tæb$ČIG#ŋ>žŊũ)BŖ–Œr‚ŽĨ­*Āj…,UK3ķc<{sŸį]5œ6qÄÉl‘„ĪP:öëøVvšßdŅŽn•OČŲ#í\qüę;“NbŽÅāķC#ãR9čx#jÎWeFȗPŌVŲūĶmå¤{–#œŋ­`Kæ,É=´Ä]+L9$ąĮaĪãÚģhį- NÜîÎxč}*ŋîîn›z‚°‘Õzˇ_͊#6ˇŠ{ũĖē”ą,wHĘ[•Hø8õ#ĶĄŦM6Ââ}`ũšÆKdVųÚnp?•zÔ)qlUÂärŦyŠį¯uĩ€}ã(Tc+ЌÕÂMč‘2ŠNí”|Cukö -ŦD˛Ũ#áˆBzuÜk˜kŖå;Tm 7ž+R‹W¸6ëöšwœyq(÷9úg&ēk/ Y@é%Ō+˜Č‡=ĪŠũ+NhĶVdYÉŨ֍á;ŊH nËCnÜäcsũvÚuļšŋfŗ„*˙“’xî}zU™ZG`ķc°éüŗY:žŽšm¸‚2 ŽylãnOR{sĮĩbį*ŽÆŠ*­â dDæÚˇ`ųā~`õĻxvÄÆáãUgŒtA?\¯ũķYZ^Ÿ&ŠzėęĘzžzpúāÅ=k§Ŋ™-l]Á9;WÕzãņūĩR\Ģ•ĩ|Ėæu˙ĩüE9>Z°˙õŒ~L~×Å˃‚3ÛۏéˇõŦ ß2ų’ đG*§ˇåž=k …ļ;Ęބ~§ųŸĘ•GĐpîTNķá-¸ÂL€c¤dįôä~4q>] €Į Å`kY}m|ÂÛFÕ|1áH˙ZmåĨæŠHÜËj@õZŪM Šāž@¨Į8?€ü˙8ÜĸãĘĄ>lÆrQŽŸ‡§ˇN˜ĄîŸ!íÎÜuÎr8į߸æĢ• ¤§ےq˙ęũqŌ…ÃrŲ=O@0;ô=}+ ąęį†!KtĀ$˙?Ą‡ŌĻãh ķ`ä“ģž˙Nqųûšˆŗ+eâĀÆp8ëõĮŪū]Š$+ĩžú0<Ééũ?Ÿĩ0$YXą,ĮīÎ3éN0L„z.Ļyúö˙<Į †8ۀ:€Øį˧øÕ˛x€@'Œ}ˇ8āČĶ`2Hƒåã 8Á8û§˙¯ū}*4 žNOqLÔüÚ_8ų‡ ō:vę>˜ö¨§ ˇ!Պī!†y˙?įĨ5ØLIHĀyČę@ĮOëZ0ČínėXnPÁ‰ãüö˙9Ŧô—‘ēwgüņõĢqãėĶuæ Č@˙?ūēLˇáÁļ)úįv?V­lĘđøų.ĄÍĢcÔūU„ū#hėfã¯j‰$ũj| šëPŗ+cšĀ܏‚Í͊hč2:õĄ“æqM.)äōúôÕĮķ4÷Écž•įcĶŠéHĄNylƒC…ôî)ųzzS$ q@7~zŌmų_=¨bšĐAßÎOJŅ•#$™æ™‘īRËՎ:œÔP.XâŠlrĶ÷ŦŽo}LŠJ×|Ž9ŦgËē?íåW…™KâFeŠĖ’ņËIœ\ƒKu"§–~īlnëĀęh˛āēîÜ:Ÿ÷}9Ģ`€‡#ú{ZÚöfVē3 Č\ôä.ūϟĄũņ ’¸QĮ#éWŧ#ËÁįÛŋ É¤6q†e@*FŌx?‡&›’%E•ˁäf^„~#ūĪ6`T(ŧ)‘Čã˙¯Q}…Ŗ;C.pA,Ûi!ķ"ûČÁzƒIŲėRvÜēŗ@p0vķĶõãųÔö,Xŗį#Žåā§ĶüûŌ4D` ü3ĮôõéRą–Ú`HāđéųvŠ­#ˇ=Áķ?u q’ÃŋĨEėUŽ6ŌÆ•šbk6ŽßNüz֑–8ÔųJ 0'õĪáĪãT'žÃ2Á×-– sŽ>›ēûUp ánesĩGŪa¸ ķĮž^:Ōjúąíąv[đHʂ§îž?>üUÛI”įŒĐ0úõéY>Zn•ACŽ=ķČëžOĩ[Yä‚aąTcîĻ 8āŽü“ĮAIĨ°'ÔŲWRI îOįūM9BŽ͓“ƒŸĐšÍ‚vŨēI8l1 œûįĘ´mųØ7ׂ+6%*íSŽôđã#$gëLŠBËķ+ĶGķĻ\JaF!Ûv `c€;ŸÎîE82ĒGĩ2`e° yįĄ8̌€đÁ[#<~?ÎŗnfˇÆd‘’`AELo|äņŽƒŽjĩãjēž-āˇ6°“ûÉ$#?—SúUr˛yŦ\’ņŽdk{0˛HŸ|öLúĶ$ŅmŒ{īĨ2€z3íAíÁüjåĨŦË :“ՏrOsSŽÂÅļäŽæ•í°ųoĢ)ÛéÚdEL6är  Ā­ņÆsšŽĶG“‰‡ĄÛÉÍ5Ļ@ ¨8üØÕ‘ldąƒøSYÛgˤâŗfš•pņ¯Qķn'ˇ¯iĘĖņ†ÜÛũJķķīE…ĖLĀ´‚ qģø€į˙ĪŊ+Û?uƀrōMD…^V mBŧq´Ÿ_~įIa¨C$pĀ$ËėÉ=yÎ1ųŠvauÔl4K—UcŒhúÕpíÆÚ_ņ5˛ņÆčQ•ŪŦëČ­í—q¸H $ƒn=ŗŌ„î ÆĘčA]Ā“÷WwëÍJa8ʁũäË(Úũw ‚Ā™A÷ĢA-"Œ XqĖI4Û°’š&Ũ›YAVųXącÔâĨžŌk†1‰[tX(į̍úž YšŅ$FYyāzÎ&â #ÉiXžũĒBn{ úPŸ`ĩŒI†éĄ†sļiī_ģ‘íØ×ę~¸†Âáĸi-ĸgĀųUB3´öãžĩbYep„YÂĄÆJįĮĄ?§"ĢYF°Īq,ŽˆŌļũėÎŋā­lļ1ęj ī&fŪ’ohĖqC;TŸ~™õ=ąU#˛ØåK1$ąį' įŋĶķũÖÉō0 Ān;Īļ3˙ę÷ĨLōHʑķ ã°9ūŋŸj[,‡÷y˛AķÆ}x9˙Ū”'Œ¸c%XŽ:ûOQO\Ŧ…r̐_č=}‘ö4Á—'Ę›8pÆ{{žÔnbV‹?1V8 ĪÔœ˙ic´ĩW?"ŋŒøÉ÷üęĀ´šEbĐ9\`ũ?ßüâĢļā|˛qĪ_ŧÄú~Ÿ§~”_ŗRUļHŸËH°9Ũ€;úô˙Ĩ<) ¨†î>^N{sÛķĪ֙ ˛ą@1Ķgq˙č{â´í­âˇ•VbōÜ}áÉĶ=Ē[°ÖģĸŌmP2%‘øÉuãōč*Â[EũÜiôDי ‹Í˜đ§€UĩÕ­n‘JOā? ÷āō+-YψfŖĒĨŠå!irBŽúūUÂ]j:žĸĄĶäS’÷sĪáū5Ōkú‹žÛx—,ß ät#ų×# }˙fĩ`áŨXe\útޚQ˛šIjuūÔúÎö،°bá;˛éúÕC˞ŗō7ŗÄX˜†s´c#ō#đÉĒū1Ø_G!p¨pŲJåH8Īo˙WãQęqvû|ļ‹$€A+בČëú}2rûėMû§CaŠ™âX–0× ld$€Nz˙S隨Žm1ËĘÜģã–?Ōšũdē*­ĩJĄ•ö“ĪŠüqRŪjŗRU˛›P´”íÃ.@ęx<˙*ÎQ×BԒZ–umXÚIĸdyN#dÕÆLwüĒ•ŋ†%Ŋ“Í쐭š9Pk°÷ēŸz~ŒŗŪj@lĸũōEsĪgVôÅuŒÄüąC—&ˆyĩek[ {DvФiŽ€uŠJŧķžE)rHVfĪ~Ŧ§ĸ íŨíĶ?oŌŗŗeč„ÔulĨbųĻíÜz˙Uü댎Ū]SS .æV;_ũĶÜ}Tįę3[%^ų˜ ä8 GĪåĮũķŪŽZBļŧ›?zĖNIëÉĀíœū [GŨ^fOŪô,Z@‘˙ŖÄ$íôÎņâߍ7Qˆ^]ĨžFŧķĶ#Û¸˙ëúUč[Ųq# ÜãëTŧ¨Ë|ÉIQžĄG_įÄÖię[ZXm°_6W÷|('Đu?9Ģ[rŽ~÷ÉÉūMQô[ô䓟sß˙e‰¨î'0ÆÍ†b8õ'ũ ühŨ‚0ĩš|ÍV]ģI\šÁāvüéZ>*4ÛxÁųZtR9õŦØáû^­ț‘ĨÎūŊ?\0ü=…køĒ6k8vāâLŽį¯9úŅčâGFcøĒÎ3áĢIÖ0%Pƒ8ėEqÍėíUÚ#Síū}+Ō|IjĪ }@Č*>€Öeŋ‡ÖûD†XÉķļ¸Ãˇæõü˙:ŌEęLáyNžËØ= =ūŊ1ÚļaŨm7œ 6CÜzU+Ûcg¨‘*ēílāc8=?¨>ĩgy¸ ëPp{qééĮô­^ĻIXŪŗš+č†ŌNq˜÷=z Šs¤Y# V1wėäԞÜVBÅäĘ%đØ$zÕë}b5/ŋē>QƒõīéY¸ĩđ—{îZ7 Œ  c׏qéžõFIāpK’6ŽÛŋ'ƒžŪüTr=”ĮĖ ŦO8ÜĻ›…‰Lvčž2Ũ˙åUĘ"—–eģä'Ę3ķWä@Ņũđ_ŋß×§¯ôĒņ mnVYÉğ+0ÚsĀ­é0íĮŪÚŨ1ųwã¯aMą%s2DŨ„G ęÃ'>ƒĶôǎm(Į<ķô˙Įk{fW!ÃŊ2:{§_ʲîĘĒälߞüķĶ×Ąâ… hŠĖų*čK‘H\1āũ*iŲGŽŪ=å°Ęx`¤ņƒúūu@æO3nŲ¯˙¯ü ĩŋpäqŒ‘œžŸōĒhK°ã”?Â0r@QÛÛđ?(%FÂΜų†ÁÜœžƒüŠŠF áFĪ#=GNŊ˙Ī5:°ÜĻ0@ÎtŨ=šũ{ũh ž§{€Ä’qˇ¸<ŊĪų4ÕĖuÁ$ciņéÔōŊũŊhbrĘ‚0A>™8ãųzRĒ ūZ”<đŦüņŸSßųPąQ¸(žĄēaŊŪŪ•,ę‚Āā€Ãŋ# įüŸJĢîÁwmę§Ũ?AôôĪĨX_äŖvO9ū/Ô˙žôũÅ[!Ü m ũĶëūH÷¨į;˜e ÛÁÚsØķíDl6pÉ÷xųO§ųũ) ķq"ã8ʎŖ'üķíN€ĖQrUsŸĄŋĩ[@…ĐĀSü8íPĀ|ąšK­ˇvAüúæ$„Ģī ü§<`úŸĨ : ]GúĪęÆĩr}ë+D äÜãŸß‘úUŨĮûÆą’ŧ™ĒvHß$ˆō§ŸZˆŒJ”œŠÆÜw5ų:Ŗ=+›Ą„g=pj&œu㊕ø=EDF[h.p<ŒS[€xéO/÷6āĨ0ąÎG­1Ŗ>ëđsPÛ –æv=ÔSmŽéTļšađzV7‡ŽmŽXôŨũ+e†@+ÃĀ.āņÞ ¸ü,Ę_2í'E^[œôät˙ ĩæ įÚzp}ģįŠŠ`‰Ûv>~Ÿ—Ōވ•ÎV5<įA˙?nís%Øzŗ`’ g8Îô"–ō›aÆĪ–8úÔ oÚBüĮ¯<˙ZrÂrļAĪĘį ëūxŠĐz–båČ.ŧwūŧTMķ6FN1•Čė;œÔAŨOī˜mųw‘ôĮøRŦë´7Ė,ˇøQa\RŨTœžėqúVŒ 0$SÎG$ᝪc_ƨÆņIœJwđüį¯åS0b¤OĖqĪ~AļĨŅâ¤Č>cˇ nŋįōŠIhĸDF@IÁČ9ÉĮqīU v2Ąf'Ž0ÛēéĀį°÷Šæ9™[ī)ÛęxlqĪŸ§­C,7ĘīåŦe™‡*8 Č${}īaĮĩ8ŧ1ųdTä.1ģ{d`zĶ#ŽO,ėĮ… šöî:™#rĄ•…Æõ sōõĪ#'>”5ŧ{@PĪ‚1…@€õÎį oΤtrŽJé,7|Ô~ŠĄąrĒėgŠÚ?Į#õĢąYƃîPW ŠÍÉĸĘH&,Ād¯rņÛßķëíRÆ’’y’œ+’[ōÁ{j¸Ám€`Ÿ_ʤ1X3÷HŠæ(ËpÆ2#dD/J|Öö÷›EÄ>xSōî\Š”F8Aüĩ‚ĐęאCm5ŋŲF˙–MáöLøĪoƝFs|Ļ%PžfțnK>b}‡ęk`Ŧ¨ĖK{uĒŋ.ÄۛrĨļ› ŧ…‹ŒeÎN?Į5ŸĢhvķ¯˜Š‡PHĀcœöã§áW,/ÅíĖ1ļVŨĘ6Aΰ%͜3Ɲ+€ v?RæiŽÉŖ‚žŪæÚ/ɆTÎI;÷Ā75ĐiËĻ”Wēžũŋ/ÂĸļđÕÅĘ,ąÉŗ$å‹`}G¯n•\‹y2yžČĩgâÉ<Ā—–ãiČ=›ĄāņõŦ™oõk‹›8´ ČJÉę{įōŽ’Ķ‘G&ë˃9v€1éô­ht­>4‹dÚ=W¯Ą=ŠķÁ?t9$÷8k‹Į)i„œōÜ}€ę8īšÕąđÍã@0Ļ08ũâŽŨ<û{ũ8ŽŅ!Š%ÄqĒ…qOãŊĒ]gk$5K[ŗœ´đ U>|ĒÜR8ÎqÖĩ-ô[f ŸûĖŖķ­`pyÆ($ r3YšļZ‚[ ´1Ō›€jp჌ûRdŒ† Ō¤Ą vČĶÁŨŖÔúsRI(ŒãøģYî^B‡^žžßãôI؆sŒģūŋĀú“Y‡uÔÁ‚1ˇäĢS3\LąDIĻHëõúŸëVĄļ XÆ Éę@č?š­hCģ!†Ô[Û< á‰9ī}XŠĢoÛ5ĻŪĩjÖØYYm8g-ŽįŌ‹éqÛ —R˜!áTdãסøūUŒÎōHîķžä×$~ĄpJŠ;ÁlrØčsū<ũŗãP÷1Dā…=ŋē t?€ũ)ę0Šō†ų†ûzæT¯Ø8!įíÆåˇķ5 Ä>ėŒgīÔp –ãUõ¨žc)o,“ÜŽOë‘øR[ƒØÎĐ­Ëj{Ų1¤ąã§?øö:ÖÕ`ÉiИåøđMGáčY-]ß%˜¸Œgüĩu˙{ ÷˙<Šr~đE{ļ)ë…E’nS*ŠM Ų1ā¸?÷ҍüE†´DåŗųV´¸ļiĐã<‚Øú’­/˛hĀņĻ™öˆbš…˜Ŧ‰ĮŨúzä×'LMÎ8Νā1^Ĩ}Ú-Ú3ŽGá^S ¨šSˇ89īÎ?ú˙įˇE7v2¨ŦČeI"cHcԃĪųīRE5Ą(Œŋ¸^ ^!ZO˜+8ûšÚs׏éVã*wI¯n?ĪųãG-ļĻEÅš\;[‘ģ¯Cú~uS`vĘ/?tm^ŸįúWLŒ˛vû~_ũ×đŽ-)Ž˜OŗO~GéBˇ-Ėwļ2"eÉÛĀOįV ē1Όė\¸Ú ęš â´n4yĄ\FÂC€Ŗö˙?Z­sĨ]CnĶÉ E<ˇ#'_Z\ɊÍ2ųmÃ'Ļ3Đ˙ß_áééX×1˛ąyúŸáūM^ĶîKŽFJä0ãw¯ŋOR5bx‘—#‚:üŋž~•;2īĨÎv QōW'oCųTe<™>VۜŽĨi"V˜’‘Æp~ĻĒ´jøa‘é€Āõú÷üj™ˆ–c9=;sžŊ˙úÕiŒņˇĄ^ŧ/#O×úÔ §vv…8'?×Ü̎!*„Vā Ā;ģņ͊l Č ŃÉĀmÃøēŸįŪ¤Ã)xŪÎ?‡§oņüj6Ü#ŪĀmĮü$õgŸ¯ARąÃCnęąü;ڐ ƒ[k ¤däãåœz~žĩ&ĀB ļN6˙ˇáĪԚOîųŨ*?ē;Ÿ¯ęj’6ŽGų¤Œá¸Ė}ųÉ o1S‘(yĪN‡ō˙>”‹.dûųaÔ7Õŗū}Í4ے–ü#×ëúy,Iŧ˙_JpQšr Ęãž}}sV-WËPryåW9>ž¸<ŠMØ,O^Eē’Fđ :g§įȝFå~l€ÁžVbq´3ų~„zĶ˝­† Œ‘ĪLāū\§ášƒåy0…÷āü„õéƒĀíøō*EˆãķNc]ÜíS?!î>¸ĮJЌ‡*ÍģqįåpŖĶüņŪŗ"›ŖߓŒ÷ôįŸÎŽ+ ĻDûwãĄëÍ&y¨ŒTq´>å˙ęŠ÷ĸFCqūųãõĒ h‘c÷Áœ &Ō~œ˙Xc 9V'YXdūF˛f‰’ •ļ€Wq8ÁaGÛ2p‹š‡ņc? ˙ €´AĀPë€~laOūĩ?ėǍ<É ž~ƒŠ4 ˛ÃÎ `Jvd‚ –SųTÜm˙6ü0OŸđüT,ɒX.â‰@?¨ūϚî3d†=ō'6õįķ¨d…C) ¤)ĘāŒãØāžĻ­Ė$ĮNqĮū”‚!#c'9˙h`lANⰆPĮ…frųGOnI”/œļā8ôüøüÍ;(YS=žOáÎJĖˆ9<’yüsHv ¸pØeqšXˇ<ôÍ.Ĩp†ÉĨFŒã¸į•Ҥ‰Ôîd#ģęjĢZË#~ķø .rW¯LwõĄX Ö:’ā6āŅ‘ģį‡^‡?ū稆ü$‡$āũ;žk™Ŋą–ŲĖ*LG;‘+éũ~™ÍWļԃČĒŽ¤nÁ ûsZ8)j‰Rļ†ũÕÜnĻōņËD„ų†!N8Ü}I=Ģ”ēģ{šcēuTV›!*ō:Vã=ÕšEaĩ”ŽĪ_lqúVb§•• ÜęIaЏ$‘lît›ÕkTî”^>™Įķ§Å~ŗ_´°p8$W,ˇĪncu%•FĮĪSĪ׎I˙9Ģ6WMuÛ+ģŋQœsΏëīÚŗpę_´čvG’yãōĻÎS–U-ōĮšā~4–đĘZINz˛•\ŸÆ˛gŊŽ[ØŠrĐŠsĪ ÄqĮŽ3ųÖI\ŅŊ5O"Ū )ÄZ)<ĄcÔū#õ­Im˜Ū[Î žr˙ëUYī…ÔĻh3ȀcŒäcŠ÷ūu|ēĢ…fMīʏ\úÅ6ŪâVĩŠrÚ¤:ĸ].Čԃæ`ãqĮSø ŠŠjÂĶÄōŠd •hÃûßOΟÂŦ^Ũ9†eO(K#a9Šõį§ĩyŪ˛¸šgß0D8PĆAũÜíÎ:úuīWNĪR'+lYÖ5Ą¨8ķaįk{ üØ˙8Ŧûx…Á\Ë 8îdįž}9?͚¤Y”üØå;zdķé]7‡áÚ¤0Jų]†G qĐtņÔíč`Ŋæ>=*KgŠ]ÅĈd]ƒaã Œôú˙=ˆ’c|ÚÎĨl#D“Ģ(ܨ üЃ#§ŋŊtâ$eXöđ1…Į§JY’9"hæPŅ‘Č5ČęÜčöv8*KÉZį_K9$IigsČ]Ŗ°Áëõ§YøsXšĀČd†Ūâå՜6r¨ 8#’Oŋ×ĩÕĨ°*dETÚŧôíŌƒ,—,?žücđ§íD‹Ģ2lô ]9MÍõÃÜM¸1w8PŪĀ{æ¯˙hd&&qܰ#ōjD°W—ˏs+į€z ´‘,mō¨qPåwvRVØÎ’ââ(„´gŒc‚ĪōüáK™œ¸×Ž2~žŸįÖ­^9™Õˆg8ûŸ×õô¨Ä`ã#¸#ųúAŪ„'{‰įĘP—¸˙?įõ*“\’Į“€ų˙? –üÃ#Šîũ×éKåŒyÆĶųÄĐ’,íÆFOcéN3‘Ôt8éīP uî÷úz{ziÛvŽIĪ~ü8ũ>´ŦcĖō3œ|ŖŽėĶ^y6°Āųģã˙?§āh ˙äôĪCß˙Ž~€R2‚ $œœcšõ˙?íSƒžrO=ũŋP?HWsœëū}ŠėäœHõ'úūB§…$p#įŋōĸö %žĐN:œûĶų:•ĘĮvS…9ēŸ\uõĒz‰‘áhĶn6’[˛Kv=‘YHF{ļ¤p¤ĒNqÛü÷öŠžĶ%Ņŧ˛,ČģˆĪŨČĪč9ü+;Ãsyļ÷M<žcI9NOl>kNeËP: ÛüN?W%gbSē¸ŲFœōē“üA@ŋ–VąA$˜‚År[A<ū|ŸŖU›ã”Ž-ÄeĪō?™ĪáU-_摗…<`vūŦß4-„÷.ˆ$RƜ|Įž§ŠĮãĘŗī7yl™ÁŨŋŽNęŌ‹¨cžíū~§ôĒ7¨#XĄVËČēˇ=?ĪGphģ§ÂąXFŒXsž;~˜ĨļBŪk‘Č;rԟįÂ¤8ŠĒF0Ã˙­KųQ*dԟRjnQ­ˇ0ķ€X)Ä˙JÔļ_*Ú€T§ĩdkŸ<žX<ã˙#˙f­{u˙C‡ŸāįÚŠü(•ģ$-žNq^?|+ŲҁVYYrxčH¯^nVF+ÍĩH”ęˇņ•l,ė@$Ø÷ú˙œÖ´›3ĢĐ˂USüLčOŌ´íæY ĀÊéúûgđüj‹YÆÜ"āŠÜ|ŧœuü=?Îp-ŊÄ`dĢcĨđ,į?ũ~õĐėĖ–†äŧyũŊ:ūcüđw-!ŒÄÅb‡MÜÉíúū•Æ(ģL~ėŒđ3Į\ōĢß^Ļ$ôĪ˙_éų~Q(7ŗ—‘ŲYl–yw1‘Ā#|Šíõ˙>ĩâKĀÄYĢ($‚ŲčZūŲ†Č[ÚĘ@”Ą‘Ø(Âį-ƒëÁĮĪs%ėŌL27Č öÍg7+˛į-,*0IōļyĪ˙>jĘßK‘<Ö‚$ū§JƒË*|˛vŠ8SëØwëßü)ęNŌIĘäįøxãĻ8éŸķĶmĖʗWW2HފŨŗ×Ŋ2)IEČäŒōqß­^Qå†ÁäƒČ_Ī“ųž[ö}á‚á9įs_|ͧōöĒēˆ€r¤/BmŊøöô?,Ģ€@įĖH'Üį8˙éJXĄĘHãūÚdw=‡ųį֞x ¸ÆH;GĢ{úã‚r6偃‘ØO@Įņ¤27˜`—^ųlú{JXĸbąčH'ũnŨjAvÅ-Áę3ÎO_ƤE)æŋį=}:˙žh¸Xm˛K˜į'ü˙Z:įøÔũGųüŠËÔįœįž3īŸņĮl‘ʲz}áųP€é|?‘Ĩŧä˙!ũ)|Åūõ.‚Ōĸãø›ųš§š=Ecö™}Ûņœc…=ę=Ē3€:úT§>ÜõâŖ, {úŽ+˜é!qģkķãĩV8Gųæ­ļHÆ}*ŗ ŧ1ŠC" î<õ´Öá@ÉúŠR1ĀU8#™ ČU9Īą vĀ*OԚį’ŧ ĨÁ*2øS=qŒہĸ[=zņŌŽ‘œ‚•Ã’>ôcˇn: ĘŧÁ*1ڋ {Quמã­YôĒč'šrRAŽsHųt›“ĮS˙ ŠŪģbļîÃøTķjÂĶT āņË?ōpøLįē1၌[ƒ(\˙ôīNKīŨqŧ§ĩ=‚ĢÂļÖ8ävĢHģË#Ŗtü}?Æē0KBˆ™Ķ’Ōd‚>`åĮb+§| Ø\uÉép*bx%€É?_Ķ­$–đ9%Đ)ĮŋÆĻéŽĖHī”ĘC‡#_ūĩKÄE—i x§ĶU­P…FŪņsúSfˇuá“n:/ņé˙Ö§dfœ>[:˛’NŨ9õõÖŽÚBí0=F™ųéīĶ üĒ´‹—S°Œ<{€8íÔVҎdLĮ9˙ë¨Ŧ§%ąq]JÅ#Œäē{âNü?Ɵ(`V3ƒš‰@úūMZXT6UØļ:nÎĶ“Dŗ$`)t,N¸ŸŽz~ Vw*ŨĂ8ŧŌĨ1 į Î*äq¯;[ž¤nĮáĮOÄTh•V)NņÃÆÃƒôĪ­;íqw“ŧįnŌÄĄüŠjVƒžĶāžcr0ÄtüĒŠE;íĨō›î¨byõÆ*&äw’1ō*ķ“Ņ}ųüō}ø§4ƒiÜŽŽr¸Æ~œ~$švÉ&ŧšTķ|ŊPė#ŽŨ9?‡å@ģËûÕA(䑯Ņëę?*¨`ۋŋîÁËdԎGâTTā(‹‚Ž2 ˙~´Y äŌJT…TD'’@ŧĖ1üę %ÚČlqËzäŠū†”šÎ|ØÃtې9öÎ[ô¨åCšX™ ëķįķØ1õÍ5 =IŨŒlČŦų!K7ōûĮō§Gā˜÷nČÚP`œ{wöÁĒų@v¯–9˙žOÖ§UČų›–ā(8ûuČöįÕ#&YG”@mŪ ¸9ü9ūB•$vlc°Üß-FÁ š8äd“úæhk3‚wz“Įū?E‡qęÎNũŗ‚=xSĀĻE"ČÅYHŨœ}FOęE7;‰U™ūō)'đΝHĄōąQĮČr?œ~”˜X”]ąČĄŋųãÖšgDm͊âdË{ pk¤RĄ Į~?¯ūÍB‰Pƒ#ÜņøëDdâîĢîpą]ėu Íĩ”“œzõĮL˙JŧRs)`9Āb: tôČĀ'ŊtWz5Á2ŧ[d'ptb§¯Ū˛›G‚&c Ō*.I CLc¯Š­šâČqh¤‘(V OŨõOoÚôĢz4 o¨Ŧūlq//;tëũ=ĢBÛGVŲĨ•N>XÕpqîÜcéZļz]­„Í2Æ#ŒŧŌįķãŽũęe5aÆåč=ĒčūfFíĘÄĢ~ĩĪiöŒū7Ô§PÆ8ÕæÄW§åšˇâ;kxÛėšœĒüŌFŋ*ũ~•‡ĩ˜/n&‰^B‚F`~ų<ˁPŖ$›)´ÚFļŖeĄe$O— Ž{}GZáīĩ{ģBÖ˛,´īB\nR;ƒõâŊH䌎kĪŧq§o!ÜFBņØ`ŽŊ;úņN‹WŗUĨŅ™sâk۟ŨĒŠyļāžØ c°÷¤†ÆoŗŠžG^2P?AôäķīU,.Ž’}‘ĘšUëü@wâŦFæéEåŖc‚zdúö˙õWKļ1Ŋõc–ÆÕvŽĮc<~ëÁēCÄdÔ%l—%žp,T'ƒî§ˆÜŨ]ËnäaH^\zāô•ŅŦô %ŗ„™NNöË3I'ÔÖ3ũÕŠ¤#ozFĘeF5CPŗ¸œo†F÷\ûöŽv_:Sįã¯QéÔãĶĻFMoh:ŧzŒeN7‘Îsë^A鞝k' GŪ5挝‰4øĄ`CDË"x’?úÕĨN§Ú‹ģw!Š?ŨäVmܤŦB~īĄöĻO'˜ōNŅĮ'Ō§#ijģÄĶ:–áFHų!´R_ēĮŸ_Ėû ‘@ã#ˇ9˙?äöĢ+mŨ›>™Ĩh[¯Jw&ÅS€™íëū—šĨ‘ĮäķũN°ŒßļMIRÛē^sū{Ņpąû¤“€yëū!B(ÁÎI#¯ų˙ÚŦ,D¸žNN{ũh0€2Įgō§pąÆÂ6Ž:wĮˇųęj-›°sœ™ūŋį×ŌŽKđ¨1×ééLÆ¸.q¸ā94Ž+€ å‡Ļ?ĪĶō$­ŧ{¤}ŸSY÷šÁ˛š'˛xíØ˙­Č8ჁūEZÕ#ˆiķLUY‚pŨOāj­°Ž:Úáocķw•’ ÷luũiט6’ō1°Œã§_F@š5ĢFč÷Œryū´ũJA›pÄļ3KíXwĶS Ã֛몛í.ÜÆ1ƒÉģŽIN6á=OķëT4Y‚FRÎá˜äą$œ ˇĨZĪmĻġX2’Îũų$žŋT÷l˜ė‘[WdųF01Î:ķŸéģô¨ FØš# Ip?ˆä“ü›ķĻß3›ĨQ‚AÎ=øĀ˙ĐüĶ­J… *8Ôņ ?īĒ}÷/[ŸŪ… îūš?•V›2jĐ 6Œ~y˙žZˇoPX`åļƒĶüķšŽÖ1-Ãˁ‚N?úųŌB[ƒĩTą\v,Ļ;ũ^ÔĮ* Ũ äąëÎzz˙_Ą¤ˆc…€~č<}xĮ>ã۞“p<̏`p¤õųyÉįŋåĐŌ#ãˇ<sĶĐcŋ§ˇ,UÃaCr )ްäū'§”­ˇk|¸ę@¯_ͧ$^Ɓ_G=Õҏub€ éôĻÛ[ŧ2+M„DûĄ[Ģvū_¨ĢAßv7.rW-€\ãˇā?™¸ˆĮX¯'æûß1#“ū}Å?"|ĮžčÆĮ\჌€GLÔô˙Õ`Œļvļ{€ wčz~cđę¯`š›o.ãy#îĐgųäS'ƒ äãvx88­|đd'æĘ¸ŋbsūzRM{°‘‰ÆUxn3ČüzŠŽaX| ^5#iÎ2NŅØgŒj,Úr‚‰ ØĀĪNGŽ?ũU ebË8 ĒyÜA8ã>ĮõúÕĢ%šØY—rŖô/MGĄ3i[s˛dķ Ë/ŊPx¤†LH¸=˜ß^õ­u"Ekļ6*sØî÷ũk5.ÅĘ$r2ĒgæĀįę?:QlˆŨĩvíSĐgĶūēläyD㑌ĮüœT €1ĀÁãøSnN"éÆėtãüū?δDn’…tčĀûģŸ˙B5ĪgũŖ]œBéą đAūf¸¯5Ģ(-Y¤ļGŦõ<Q㜓ŸltŠ6œįļy¨ųØā×)ŌDĮ¨É÷Á¨É~•#)Ū>¤Ô,]Ŗ4†G'8<õüĒŋä ŒäÔw˛ļėŠčØācą˙'ūZ¨;Ę QÔ7å“éĶלũę1'}ŒĘĖŲ^sĪ]¸ū×Ŋ3Ī"T QY:+9süŋOĄĢ‹…+¸đ1ŒôĪâ1žzc¯ņRIl0w…y9Į~˜ãũߊĸč,ÆÛÉ sģŠ€r9둌ãžĩ`OŒĮ€š<žÜ¨õĪ@Z†;hãl‚FG yP?¨ õ¤.Z\;n,c(sžÃĐRvcEÄs!ĖnZ,•ų Đ?Z@ĘåÂĒ’7ÆĀdũF?ô:‰ŪPČ2#q#ņ$ûäpēĪČQ–AÉųžaī“ũHаîLŽĄ `ęG,ĮâF?_üzŖÜ¤ŗŽŋ1ũs˙R°~bũĐ?ö_ƙ”a,Hl1=3čröo‹ãÁcōîv•\ęđW‰@Z2§ū+<&P¨ ƒ†Ü•ôŠŖ>P Ē™9Ę'ŧ)Įķ§a\ĶIÕ~Rųlp ƒíĶ}68đ§fžĒÁú?3TD˛8XqģÍÎ=° ŋ ɇŪyķ8ëčNOę*Z°ĐĸL˜īeīÆįĮä)ŲeÃ2‚‹g‘éÎOä)Áö‘ąHˆüōqüéâg3J@€ž™öäūfÅđXTį•Įáūy¨›aNÍģ†w āį<ŒO­R›Wc#%ēEnŦ¸ũ \}xúRĻĨv6ųQ4Ē2_`Áö˙˜ÔX𐎉xgV“Sœ–RVeP zwöäÕwJË’H˙7îÕåę~‹ĐūdĪįcí ;cũ ~Oļ Ą#áŖÜŅ€ÜVpAĮūƒV´Dõb‘Đ]Žā~U,{úž:zUVš‚îÖ"’×uT š?ˆ{žŠķ€{@sÁCŧ { ô”ÅpX(#h]Wœ˙ŗÔū MfīöĀÎâĄč?ĪOķíXîĻ.ã)“ōį–93߯ā*¨ÂF sē7Häg##v}~„vęc˜,‹Āƒ–įŋ^‡˙˛SN0IÜNMĢÖ%ĄÕ! 8ŨäŖ§l ŨŗŊšÂE’ŨÖ5)´äuęr=ēŠĮ˜*H“(ÃÂā⁜‚;~Ŗōčtæ‰\0E\>cƒ‚[đ ZĘĪFB稏ū(ģhŲ§#;OsĪ åģtõëÆk*ãP{Ŋ*>âKdāsęƒ‘’j“Ŧˆųu;[9ÃeŽ=đƒĪ?‰íL]åÃc~Ęz‘ÔņŽ­ƒŸlŽF1IA-‡ĖŲ(™ą¸œ¨1 ¯b}p1ũÜÖē ]ĩž ‡v ޤŸÃú>ŧ į÷’"ĒļH*Iäמã°ë]_†4´7PĘS…\Œđ1ôtįīM*(ę8]ŊܜƒØ{;=é`‘žžÔšĩpb`Œž¤Ņ€ŽôåNĨ zm>”āZnrÅIéԜ¤}áĶ æ°Ü~”@r={Są‘œ}*)%ŽŨ,‹į̐*@ #=Å0sÎ2GJ¯5å´ųĶF€}ė°Ē1]6ŖĒ\ĀŽ~Ëm„}ŧoöĪ ίÉok=´–†$ōŠėd ƒNÖܛßadšŽ;6š. ! äs‘ŒÔZvé,’æei×y˙dƒōÅex¨ũ‡Ã&™€Úąƒ‘œëøVíē*[DĢĒ€sÅ6Ŋۋ­ŠÄ]&ājîQīY-,Ģā˜ČSä¨ųēãĶō­m|Ęē<É2ˈ”{ąĮjĖ×mÚÛÃöúlŌĖĒǍ‹’@'PŲz“-ÍM9|­"ÕoË į: ¤MGLÂ>{?$œ*įĶUôˇw€A/˧ûÄcô˙=*Ė1Co Å…EUS{k”,´ņal‘)wØģC9ÉÅY;€$äúTüí QČšV ķƒJí°ĩŽzā4—QļØÉũ2ĮūRZ.w:ŧ~U#8Æ1˙˛ūF™"‡‘ø`ƒ¨˙gĪoWĢļČvülܐ{äįø÷éZ=ˆ[“JÁl™W—j jKtÛ@ÁíūG’!vXņŸĶüæ–ī‹i2züšĮŠÅAEXːœ( wŸ§_đ…. Ė‘ 3Ûúqõ"Ļŗ‹lĮ Ũ}‡§æMRÕ%SŖsĮ@;wūyü)­É{ÖŲkˆ™W̃ƒéÕPEu™ÃrsvqnŊŒžq†qô ŸÆēL{Ž*Ļ(l1†î€ĄŽCƐ”ûÚ+˛ˆ^§pČĮâ+ą=Æ+Äļ†īBēT ^0%\úŠÍŨ¤˜M]’NzîSÛ§_ČžNKīCÁįåíėOļGOč)Q<€@<ũ0?Ī_ÉÛCB;õãØcÆ??Lvės p¤‘Œ 7tãßß˙ÕVėldÔĨ1'$Š,[ŒŽƒĶ'üō*ŖØØ+‘÷°G“€zŋĪÜV˙…Ķ3ˏ•bå‡Ũ^zsė*&ÚWEFÍØÆŋOą\ŧ3ܐ]x㜠žƒ“Ķõí €T€ûų*ä={ŽŋáU.õYnå–Ip[jœt×ôũ(Žãy)•ÆsīÜúôĢQvÔ‹Ģ—WüšôĪ\Œ…ž/‘÷–ã r1ģhîO_ķøÔLĖrÎvn1Į üOį"€Ēäq„Î}>ŧ ƒBËԌ Đ$žsëę?qMD\nj’#ąéųcüôé*ˇŨ(ĘIęIę>‡üúõ¤ōÁ Č;š*Nqīõ˙'֕Áî,+Ŋ‰ų@÷Į$ņßĶü÷Ģ@lÆNrŒcŽsôíũ1 'Lg܁üĮųāŌ0K0 œt_Ô÷˙'Ō“Ūh(ŧāFCß§'=}˙­_Ķ´øŽ˜Ë,(ųq€3õ8˙?ĨRB]ŧ°Bî8 ČöĮ§ų5ŌĆŪ×ˌ:û~Y5vEEÚĩ­ĸY°TD•y­,ˇąU įĢo^I<ŸķŽÂĄTKAĘ° cÁ5niĸU?(ņĮōã֍•ƒ}L‹ģ–U1l+ķpsßōâŗŖ KķA9üšĢ—ÅXĒņא?:Š(ˇÆ¤ŽâO=?.kXÚÄ;ܖ&vÆųzüš8—Z&Äô-ŽSŒŸ_įéJ„xúrGõížũ 4žŧ|øÛž{˙ŸĘŽĸ:Û#ˇIˆđCœãÚ¸~}+¸ĩ]ē"âÜgūųŽ?ū*)õ*}W= Dx<š¨+ōõĸÆārĶڸιŒN:œTrŨ@ÕaļW•āôÍ!ô"b}G­0IíÍ<¨įŽ3Ÿ­0ČÆ1Į\ŌĀņĶÔâŖ …#Ž=EHpz zgĩ#Æ8ۊ…˙Õ?~EX“‡ë‘ÔT’äpM2Ļ)`äQ1Č8§[/5§A Վ4ŠČ?ÁUT”đēdņå‘×ũĒĩĢ)ūʸ}Ū˙Z¤I˙„URTu˙~Ž;/S)|_#.Õ?ŅPuXyFI%‡_”0Û ´-ĸîrĘŖ'üZŠ–ei1=‹Œ~]ëfõ1Z‰I+ŨųcŸáäõū”đŽ‚žæęHQŸĶŸĘ´Ö-ƒrޏ'ČO| XŸîŠã˙gÅfæ_)Vvf‘ˇ‡^0zÄ#O*į;‘ØžŲ$‘ī€Î(fŦß.0įœū´ķl§†}ŧļ'ķ*Ԇ ĻV“q7Ė ?‘bGåëJōŗ?“sÔd}ß|˙˛­6$˜ÆÖ=vđI÷Įīü&œá˜m@NĶ–^†8īÕGցb¯!ÆÜž öęsôÉ˙v‘a ۀų^9Û˙­Žßv“ĖÆÖf܃‚Oøœ~,8§d‰8FmÌc‘ÛëôĮĩIÚzŒH#v>˙įzTų1ŸŨ‚qƯ§CøpŪ¨´ Éļ2Ģ#1ųAˆĀ'1‘íŌ•Ŗ†TōĨŪĒN>dÚˇLČŌ°ØĪ?)…!SIČQīž€ŸÁĒAnĪ,U~`v`…>āŸ÷MHĀŧ§Ë eƒüÃОGR>•uHŽ?ųįŸlgëĐûäŌo°ėRŽ9 ėe+×ĐÃũĐüv‘BÄcúp]q;Ķũ>†¤3*‡Ž$s€ĢÁ>˜8øíMÅP8“ļÎvLŒ?Ãĩ`Vx\ņÎÔä`zŽ8úíZ†æ˛ė}Ũƒœķи€?ā4û†‚âāÆeĪĖWŽũ{¯'ÚŖ04‚v'hlîãÜķĮ=8Í;âQ˛a‡Ū!Fâ{xōjŧŒXāÜ3:Ÿē›wųnįŖ’áųiŒ‚!Õ<ÎIIU8ÁPq될˙ß-LyŖU‡ ģ<0ƒĪˇvP} 3í0(š/3Ë;€žĘsøgëBAqˇjĻ7–eōŗō“÷—éÁú| {Õu‘AųK!o›-Á#F1īßō~ŗCšFāĀ‚Χ%ŗĀõZŠÛNQŦždP´.­÷‡ĀĀëéô§{-DÕö1ī,ppûXö ãķ<đ= Ģ6/>Øg`ĶĮ€?yy9ãzél<6ōYЏáĪ`psĪëÅdk: ƒítŠÎ‰–ßÁãž?Jj¤eîļ.*ä_dûSU ‚Bį'dũûqĮnĩ2øbņÆV&*Ã9oĶ>ŲįŨ;ÔÖSˆ.í¯ˇC€s’ ū.?*ī†NU†r=+9ÔqظÁKs‡´đ­Ā¸ЄČbõį’1ęzđGJÚ`šuŅōwpīrA'ëŽkrfÁ#÷TœÖš3ēe/+ōNö#Üū]ķP¤įš|Ē;mŧ‚HAŸAũ)øČĪ"ŗôYšrĢ}ø˜Ŗ؎߭hۏ=ēVOGcDôųũi@į´u*PpF• QÅrúæĄ¨Ûęöv\Ē­Ã¨b¨2Ē[žyë][}Gå\ĘÉyãˆŖAmã/ķŽ˜éõjē{Ũ“=KŨÃRŖ–6iG"M䲞Į“Zr›KI§'Z“UtØnc{š.ö_”¨*6…piښ5Ūr‘ŒŗÆÛ9ëøŌ{Ø6ÔĄāŪt•ĪĪ<˛JĮ×-é[あEr^Õ­-´Õ°ē˜E,,Á7te'<}3Ščüįģ]°oD<4ŒĨx˙g?ÎĒiķ;Š rĸŽŊcũ¯ŖČ‘ ˧*=qū5CGņ[ÚCa¨+Įq‡X?§AÁŽQUa@ĀQØ BˆXļÕŨÜãšJzYƒ‹ŊŅYa3ĘŗJ¸˙ĢS×'øŊN‘"ģ: ÜîiAķNuęn;š#Š`į$”Œ‚?‘¨ xé@Įd98úTs˛ˆXļvāä{T¨ÃÕkį1Û4˜'Šė?Šâ{Sn’AbŲ>€ƒ˙ÅgđJÔĩ@ qĪ?įfDË$‰‚N1ÔuũũŠ[Vņâ<äžžž˙&Ž[ÄP|ņĪŠĒ—ō>Ų,qū}7¯–į ôŦIäi.%l†sßĐŸųéJ;Ž[ļĘVŲ '$ķŪąu&Ãg•ĪŒ*FHīĮ'Ôö§åųvÆWŠg3Vv!9( g9SīŨŊēĶÚēΤoĸßĘũJ“Ą}OÖš]™2€r2:Ą:œ×Ee+CāũI€;ˆe䌜¨֕MPáŖ9;"|´9#q,NxĮ˙ŦTvę#ŒŧŽBpšd!Ž×§Üˆ*ûũU‘—(\d„>ŦxãéĪå[–ŅLœ+)ĪĖPvę{÷Č˙‡ÛžÕQųW=3“ßüöĢ )~ā÷€˙?åVÉZŽrU6RO¯˙_üđj2@1î°ëØc˙Ī);—hČ9ãīß˙Õõ¨›'iÁĀ=zúz~ĨÕ$zJ€2ŋe;pv×ļO_ÖģYÛfŒã°ˇ=ŋŲŽOËoJŠ]GSĄę,ÁpĨąQ‘Á §×Šq`ã'’1M'98Ī5ÆueĀ< c¨qķįS`€89úÔlq߁>@ëĐTYOOcRąz‘ęjˆđ6äā“RƆ6s‘ČįŠc)<9ú’Xg?âĸ˜į<üŊ !‘ČA ƒŲō¯JUņˇ­+ķnøÁíLfTŖŒŒtĸÛ?•cŸnâ´"Õ[Täqũjƒ€Ūˆgǟü{5ĄĢ].\`gĖV{|ž°så/ķpŲz˜ĪwčU˛DK8ÚWÉ#!HĪØæœú—ŲO0¸Fį°ũ;Ԛryļ&>fL#üũ Gy ĸ°(ėF{ú`ū•ĻęFŠhZ˛ŧ†éąĄdĪFU˙BeHWayčs˙×7˛Gr ķ ŽA<ä~5ŅÚ^ â į#‘¸đīē%e҈†íĘsÃH9˙Į˙Ī4ĀĒåT$J€?ǎ?jžK˛ Ŧ’á‡dõ÷ų…4έą%į''¯ÕÍIAŒāFOlųeš˙žH?új˜*$gl€Œ`I ~kU–V›$er‚sĀÁųzĘÛō§ Ą—¨į§˙[>ŋ-š>į]åˇcÁ~ ˙\qHYÔí 0FXĪ>¤wŸ_ŧ*4FØUXo‹Đãaũ0īžžô¤š*¤Ÿ{ ÛÜûsÔã¯Ū¤ČĪ&įĘąÎwąāuÆOáŒ˙ãÆˆŲđWĘ9o›`Čcæ=FpŪ `3>æHpHln=:û˜ŌîķcQæ Ää ž™Ā<āđ§ë@eķ[!C7BH Ãë–8㟨Ļ2㇠7í\ž{¸#ĐđjH–9ØųŠÄŒüŦÄ™ī}F0H‰(V(Ö3÷wwägœãúgĐŌ¸ČūĪĸ Ŧ,@R#éœrü˛jQTXÄō°\ņÁ?÷ČĪę)~˖8 €ß0ÛĮ_lqõÚ=Ēd؃ģkĒđA;ą`p)\+ˆXUG‰Aā˜Įķ&•ā"L‹Ќõā?R$o4Šëō(ÎĐĄA'=ržŨОĒI¯,ĢÉ@Asžŧtė(ę2–øcˆŧ8Ãg>^U ū˜įÖŠą™ä*üŦU‡ˇķƒßVĻ—Ę}Ņų’7 3ļvŒ„tčũ@Ô>hŪU¤SŒd)īÉé鏯 ­ ‰c•Uwƒ€Ē€ÁÎ1ų˙J6Ž‹ŠS†ĮUlĻWčpSÅ2IB€ĖŸ:’6OŊĪǜįˇ~§Ō$¤’Fî_’ä)b~ ûqũ¸0žYŗöy$rÃ.ã'×ī2zŸåÅ6[[ˆįŲįߓŒzøĢbä`¨Åˆā°$“Ø3Ī~ũĪģōģÚ%'?+žŧįŒ…Ī8õįéš.ĐY‘gA–æ2rĖįOPz}š8ôŠ–GVp]ō~@ Œt<68ú`{š ŋž,û”ޝ¸ŧ?ŸĮŋaHķGž5RļžŽŽx¸“ŸÃŽÃŊ€ÉFUà ˇ¨ęË÷’xę8üOR{UdķÔ"HpIíÔķôëė0j{‰@ū4*sÁ+• ö*Oō{C!wÚ23ĩšG9ÉĀÆTõ˙“ŌŠ ˛ąŪĮqÜd$ķŒˇ×ŠëõôãŠRfbrۋdIb9įŸOR~„TįäB¸!pT€*ęp?\ũ( ŦĂĨ†âĖ@9éčņÁĒ,ĒîäHlįŽ1×ëÉ÷âɰē°`0~`svã§N9Ü}ģQ$å"ØĖËōmĖFA ô$gąî;âĢŧ›Ü€Į$‚NG’8ã¯\ߊ, ËC–i9 ļz~ũoË´tũM"ŧIÔ’ā\ĘŲ+Á’pßÂO׹) !vž3”\`ŋáõ^€¯œSCMŖÖ –;¨RhH1ŋ*EÄŗDĘ˙2ˇv5įē?ˆ'ĶúŅËŠûŋäđ=ēWiąisSDß+7Ė3ŧŸŌš'Mŝ¨š9ûŊûžKe2ZģnhČģį9Î:tšCųēd?2’Ņ‚§OlT×6Ņß"Ģ™gŸ‘ąŸķũj‰“MŅŲPM$Š;ČöœžŨqI˙[¨%Ęî]š;–˜ž ûŅ:}ū`ĨbĪoäÎĐš$6ė‘Áātö-ũkVĶR†ížGRŽ~F–ã¸íŪBßz¤ˆ(çŋÖˆļ˜ÚēЃFSļV#‡Ä˜ĪrO˙Zĩ8 ’>†Ēé1mĩVįs(ÎzņW[ԀJ™nTv¸$u§įœdņM64`ŗ)mØ Z‘ŠĀûߘé\–ˆâoę÷2HĄPRp:ąã˙ÖKKWŨƒÔdŒūU6vļĢû‹hâĪ'jÍ\edÉiļŒũR{™l&‹M‚I.dM¨ÅvĒįžN+BÎÛėļPێDHŠ×Đb§ ͊~WړzXÖåTĩ…$ķ+¸ōXš›wō?*w4˜^Fy4† ĮpëÍ!'“ųRŒqĪ^´zūš4jū¤RœąČÅ5€ĮLÁ9§+…e<ņ@ãoQœT8ųŽ:÷ŠPûŠFUĪ$dq@ƒ#'‘ĮŋJĢŠcČ› É$u“õÅY _AT5&QęíÁ=ŋQ“ėĻĒ;Š[-yŋ2í9'Ÿūޟđ ܍vĸŽGJĘĶãW”˛’xžœõ×ulˇœ}sN[“VŠÄXvÉŦ‹ŪŨEŸãn1Øu˙˙­G oÎqŽ@=ąĪ隝ϯ>ŌX¨'fąīúŸüxĶZ {šn@‹ch8ôŦ´­šr]đ\ËxüEnËōÄĎGķíúÖM´^lāąČ9>ü˙ ŋ™ĸ,R,ÛĻÉBB€~Ŋ˙ĮņĢ==0zsPĮ’|Â0[žŸįļ)fšŠFTÉĀÜ@ɤƨ—ĢG…sŽ•âAgœD„/†>øĮOƨ˙oę`yĪž@ÉũÔ@‚=wsú ĩNL—4tZ…”WÖW˛ũŲTŽ}c^hEßŲķ#%uÁü˙1ęk­ŗņtLvÜ€Āœ†AĮrAĀĒZ†šē†Ĩ%íŖƒĨK?‹āt=3ĪÖ´ī $e6ĨĒ9ōu cŽîF}ũOˇˇÖē=>ŨŽ<7<<æe•Čč`1ëĀū´ąøa‘CÉ1 Œ|§‘ūsWĨ´[="[H—ũdû{p ũTĻžˆJ/ŠĘdˆåœ)ųNĸ˙õë<#9`ÁdäœtįĮ­mŨÁäĮĩ¸g*sÂ˛‹F„#p>ņĮ<÷ŠŌ2"ÆĨĨŧŗM0Ÿ%pėJcĀãŊn!,>d ‘–ÕIŽN¤<՗ģo˜~üãÚļRMf{VÄFH%.Ūēš™&RhКŗ…h҇`s´åMIBíŨĐaIĪį’*Īŗhį+ĘÍ/ŨØO_ßnÆļ(ÄPztÆr}Į|~?JÍč5¨‚<ãšĀ‚yīßų`ûS‘2įä‡č}6ŪB‹(rHœr0?§OoĨVē—?UPsƒsū}˙3‘w•zîĢ…#–Î=·ĨU´ēŎqŋų˙>ūĩ,“ŗįƒpyõú_\âĩQŗ3ŊĘ,íĀÚH>Ų?OéO,Ü'ņÉëü˙úÔÕA#ä€ :…XŠ3c/ĐŽ?ĪĨđ$pˆÛs˛īn9 ā~=úū^õ(_˜ p\~?­&ķ2Fp7qīüą˙÷§¸îáp@#ųOnŪĩ7†09#'#ŋŽ;ūôĨs‰+ƒõį¨˙?ūĒ— :~¯ĶŽs˙ęõ¨\~ô <*Á=r) gYw‘ĸČ2yƒ˜Ås>§ķŽž˙"U=vüĢ–Û'÷k:{1ĖôĮ=Î4‡$íãĪŊLÜ(隅ņ×'§Zä;QéĶ9= C# ÷äRš¸Qˇ|§ƒéHL…šÁ’{i…NF9Æ*Vū/›“ÅFrz;rqHhˆœzŽ})˛ŽO'ŊHŲ8č1ëQ¸Âv¤2)ęF;sI)Ä$㨐|Üô470šc2n03ëš}°ĘŒ÷¨îF_­Im€:qWĐD:Ī:\ŋ†8˙hUKž<' “Į•1W5Ļ+¤ÎĮÛųŠŠ¨a|*šę"úVŲz˜ĪwčGdTXÆ6Č'ųä [Ļ% ‚;˙LŸnŨŠļwĨ´"B ˆ×ælŽŪĩCQŋG;ģ.wūÄ÷éĶô­nD6ŦRbĸë `|§ą>žÕĄk2ĀŌŖ1 A@§¨į=+%ŒĀ‰›æ8oˡųįÔV”eU¤ßˡ89­%kY;ĘR&>gß9d ûŌÛ΂pwë– įˇåUnK†Œ‘’ŊˇOĨ3`l)ÆUˆų˜ã§šéū{ĐĸFÄ÷Š4r9@끜r?>ƒüôĒÖˇ ŽHdr@Ī#Ô˙õúU ŦS ųÁÁīėČŠmAYĐe‡#8N{{ŌqIíšņŨ&åA„-Ķ'~ƒ×§#ÔælR6y ~gŒõ=2pj—”įc“ÆļûŊ?:•%;AŪ7•l“סÔVm-Ęō-ųlcŪ mššÆOąéØķī×ĩ'–ęä– ÎÜępzäuāuô¨~Ņ"ŗŨŽÄŒcņõĢi—WdHv¤?qH=īúRÛqî]ļˇ*W ŋ6z×'¯˙\Õ¤TMĒCüŖÁČáų H´Š ‰q8G#'ŸlŌËdĐ&Pēäũäo˜ûãŋįY6›-&‡ģŲį́ųqPI?O¸TÎzņúTé´ Ai?~GۏĀg#ęjKxž —så˛ŲČõ˙9Ĩ{×ėę$žaaĶ*[?VãTŪÍ"$ķŨˆÂ(r¸üÉīĐw5ŗ$ PP?éUe‘v”ûJ&I1'Ė21‚?‘¤›F#éŌĮ!€˙Ė ú įR4Äŋčō„+Î֑J˙čdūĩ9-›Íl0ĀRģŊŗĐįō¤YĻ*Åí=SĖ#˙FZŌė‹" [$áz~Ÿ0?‡DÁ$}„ãĒ2–ú÷éßŋŋJˇēEË&åƒÆeĪäĀ˙:‡ũ!‘#WV=ˇôĮô4lĄ šļWļãSœãŽœ~~•IöȅB‡lämŽũA?ŸķíjYU•4‹pJ,ģąŸQĪ~Ŧ­äšfSy>YįЏ\֑Dɖįŧx2Ë*¤I•-Ŋ˛Üō1Į~˙Ÿ­gÉĢNŌ9Ō •‡<÷9áŌ¨‰$^TĪ,nėB/$öãôĢ7Ķ?“Ä[¤~ ™Īä=kUķ˛O+ĖX2ŗg8’äū=ûÔ–ē„ąf'@rN`%O^ãô÷Ļ[Äøo5TÉ,I'ßŋøķU‘qp‚>yääöÉĪ_JŌÉčMÚ7#Ôaœ•ÜPąæU@sī͝NŖŋa¤ âÄ/s•ôčNr~œũEs˛íö`)čTúVÎœÆæÅrrã*@\ą{ôúôTJ6W);씑ĩ‚Ĩ‹‰’qČ ŧõÆÔ†Œ#ˇŨ@ ü­œsôëëę3J ĩÆŌ›‰Î%Ãqƒƒķdô=ųôŠ$ĸ…Ė„(Âå˜ nʂI3‘Žs@ė9[kôÛČĀėF~ŋ7_öÎ>”Í(V9 ãĪņĮ§ cŠlLąÅšv‘•ÉåÎwdžAõî=EH$ Ēû‚‚B‚ČđŸâ'å÷€ÁRČĖHŸø˙¨Šŗ]ų„įs)íōįúÖwoVU•´/['—nǤ3ÎĻ8#ĩåŽ=¨ dã#uAvT`í#ŸjpûĀ“ũ)Ŋ(õĨäS•‘xĀÉ!bJōÎ3Øū|/ũôkb\¤Eˇm?7Ĩc:$PČH-Ęį<ߑĮՏĨTH‘6•jļФ+ģ,r:s×õ­įƒP[œžKrNqūyÍLÄîāœŽ´Ię8ėfjšvĪŪ˙ā“Jåû ũ?¨§^&æ#׌ū8ŽhŌŗöc#.7šo§ų9Ēž„ÛŪ$Ô2nã‚Kt˙õ ŸÂ›kynō PF@ö<ŸĶđ§].e@Î6Ÿ—hŊÃņĢ,Û#$á°:ŌžƒęU‘ūĪf÷į9ú~xŽQā“RŧkÉėײžd€äv0mßęÅû„EđXƒ’sĪ úr* i6F “ÆĒėJĻAnO׎ŨÍi5"Zčc\4ųtŅÛÆ~ōšų[xĀãę*ėQÚÉa"Á—†V%_Aė8ũ)×vąÎ’ÉåĘrŨˇōÆ3žŸ­rōĄšx#RR7Œ{qí’=+XŽnĻRv!Ôm•ŲH=õ^yČņį=;U‹ ZãLŧ˜Â*ņž0F=T ũyĮ­GĒÜí‘ĘĖXdnã Üéū5’1qq dã)š}3íúÖés-LīgĄéZnĻ/áßĢ!gÛĀ#äV‰§Í&ĐÁ‹€[8ÁĪáŠķ;JâÖXĖw.dT!Ž3`+ŽŌ/—Q…KĢųč§æ,FG­sN—.ĢchÔšzōĶNŧ‘ĻfBÜdnãĶͧŸyáû)ŖQäāĢ)'P{~U¯%ēĸäü8N§Ûō¨ļČ1MOņÛ°ã¸Î=ęS}ÚîsļūžIÚHeüģÉ9ã§øÔ°ßÜé× owÔu ŒuĪR>šŽ’=BĀWšąĶŒŽ¤˙‡åPß5­Ôd8V98'ŽsĪQíøU)ˇņ"\WFbjšrŨŦz•„ŠHīp˙ūzT:~šŅųwRe\žŋ'׎‡đŠÛv›]ڝĘ%ÄģCú6?…ąžõ™}kë}˛ÉĮ™ŒÉ B1úū5jÍY’ôwFƒ\ųI,…ˆbp ?—'˙¯ųWā<,ļÁļũà úŽØĒVëŧļŅĪíĪ××Ĩk¤DË0+í!w;{‡éëū~ˇ#ļœ‘˙,ō:p[ō˙Ÿ¸Ša‡ĘQ˛÷<×׌ÔŌA‚0[‚ éøqŸķߥĖ ĀxÜ÷™šĮķĮųīNÆė…V<`åsū<ūžæ˜4€œc<ãĶįĶ´˜b ŒįžŋĖû˙œš@Îx\sĀ˙Ī~zķô§ŽáōœôĀ`_§éĶڑČŨĐņĮâĪøXXvŒpzū?‡éô ‚äc­č1‘üŋČôĻK—"¯1žp¸Įü*âDPŗĶ”GcŸåūMWpâ,‘†GųqŒ|Ŋ)& éĩS.^AÁ_ũW-…ūņŽ›WÜēt™ū&_ÃæĘeŊ*i­ žįĢŋ  #ųUr[9éĶÖŦ šSģąãĨBA$‘\gaXœûrGâ˜_(횑”†'üõ¨  œŒu÷ @Ã*9įéQœ‚T.!8ʓĮõ¨Ûiž=jKDLI'€¨˜Œ°#…JÁXîāc'ĩ2N9^h';IīÍ,›ŧƒŒ`ö ) “Ķ<ûĶ_!œ‚xĸāe\`1&Ĩļ/5ÉįĨMnŒŠŅė"Ļž?âK9ÉÎķ¤đʆ>Zg…;_?ņ)“Đ‘FĒđāė'ō­#˛õ2–īĐĀ2Čļ‘++°lįˇzĨ0ˆ0f›hîį‘é[l!ÄAáTƒœņ_JŖĢXrv9äpī‘]jö0iÚãlã72 ՛ûūY­įj‚8c<ô­VŌĨˆ PÁ\0ČüzÕÖRG™’ ŒÆ3øžiIë¨ŌvĐĢrU%I‘‚˜új(§HÛ÷€œ~?í ēҤ„Œn9Ú7žĻ˛¤o)üļfmŖ€Û¯S„Į‹FW$ŧŒdđ9?•O§åî™ķĀ9ÉĀãëz¨Ŧ%esķ ÎxÍmÛ@‘F#ŒbĀ– œķųS“˛UĮ•'žcÛü+jĮI’į÷ŗ4‰AØĢŗw>Ũ?ZĢĨĸĪspŖvÃŒ€1ŒwĪá] ™`Vw€Įø 朞ČÚ1ęÉV ‹lH¨Į_Į×ëR;,0¯™°)áT/OĮ§éX˙Ú2üÍûžŖi\×ô"šˇJaÜũÔĪß 9Ŧų_Rų—Cv)L˜1Ä6ŦÎ?.)ō\ĸ6Ũ€>ƒëYëw$˜I“АĐ{ņŒÄRī ´ī܀?§>╇ĖYžäÉâ\|Ą ~<Ō3—…ef<ŽB÷˙žsUĖ„Ģ|Ī͐Ĩž_ŠÁũEW”Č[hu( õŋ?<i ä÷K$Lk!Į¯O~HũAĒ rˌŠĩÕ8—v3õRâÂĒLĘÎÛOͰäa“õÍC:2‰Ãė$cÎ{oū•ĸ‰ ˛U%؅a„í }“ú‘‚ņōģ‚2ßšįūú(3×Hņ|˛I´Žąœ įũ’0iÂ2äŦaq€KyHÃ˙'Ĩ0DļōÅûÁō/€ˆqø€"´Öؑ<ÁÉeØ3õųHü˙*k™ÃF‚!Â]r~¤‘úŠkģ „9 2YfųT}{˙ßT$ ˜În#{™9PŒ¨ĄJŲČĮâ˙Z@˛j6ķGØPäĪī8QíĪáVuŸ>?6āIķ|lj8'¯žkĨąđåŦ҉bICĢF8#˜ëĐô­%5vB3˛1ŧ7áĮ¸ˇģMÄrG*G ū_įšŊqŖ‹÷ˇ—/,˛įqe$*į€8ĪōޞH"0!Ā^ H'ëTĩkË+@%Ŋ‘0ƒ!{ú×?´”¤kėԉ᭤N|ŲĻMĒ8ų—§įū,Vlo34ŌÁ”§cŒäë]Ģ­Į{]>5E=db¸¨‹)U ģē‚qČĘāûnjŨî™uĮŖdā§B éˇņ$U9&܅ŽdÆw†ųŽp$ō8úō:SVz ~c".bcÉ8čr3ˇģü€Ī'&œY“r• Ą#¯Ā|ģäđi—æ”ô` 1Îp=úŽŊ)ҐTņÉLppLäcŸ`SLBeÄJÍŗ’F@íŽN @ŠTģ+„]ĘKÚqęG'œŽN)ŦĖ“I¸°É}Ā͎9<†ãįåéOR$tQÉŨ€ Œ¯Húū˜¤3ŊĶ_ĖŌŦŽ"OR=yüęũ‚î*ÄüĄG=?‡Ÿ§DcĶŦĀūä}:}áĶķ­k<ĨĒģ qø á‘ÕØčF?Zãŋāk6=Z!0Šâ)-˜#ļ 7üd_Ö´ pqÚĄĢšcø 0Iq܀iŠųÆZl’Įā֐ɉ `ôúV|Zĩŧ÷ĸÕ ķ mš{n3üûÖNĢâhm! *0–FP— ž ė>•{F°x]¯o6›éAČQÄHyÚ=údúÕōŲ]‘Íwdj€wŒĪN´­Œ‚G|Đ_w@@úSFIĪ ~•†ā¤‚A÷¤ä‘ČĀëHG͜ņéŠkČ#^ƒvqŌ€cŒš89^˙OęiKF\.{˙ŸjØ˛°ã-‘ŸĶų“ųTWn P?ôΝ‰šn<ŗ°ã§áO'iį§ŠŦķ}kkoæ\:"°Ü98ĪJ•^äŨëˇ*Ų–#Ļh°&,īŧ˜ÁĀęIĒd`ԑ×jŦŠ0e 7^pi𠎠ˆdĀā.Pë‰rģĮĻWīøuĒŖJ’Ü÷Čŋ˙V=Ė…›cdņ’žšč?ūÂĸ´ û¤ë¸ũãßž¯ä;U-Œžåôc\c§#4c8==Å9ÂĸaN~”Ķ Œ~"¤ĸéÂ9éƒų~ĸ›bŖËrš š<Į‘ü鎌@!>örŋ‡OũūufŌ0–ĘS–āúŽƒôĢĄ=F6ī´FŲ*ŲĀĪ×ô­>YO'=˛*°ĪmÁ˙?—įSžFŪ„÷Í&4ŽY´Pëtņ,˜\m.WëÛŊgÛęąÛ˛Æ6E8U}ãõÉĀ÷ĀS]5ĘyÖo–*„dņÛŌ¸]_vƆBęËŅ •'Ќœū•Ŋ?{Fe=†ŪŖ|éí Œ°yXëĮ˙\ŠÉĩ瞚7W’ˆĨÁ— cŒgķŽrŌņm$o”ŧŒ íÆ‰|Ìc>˙։¯e¸XüųВ ž˜#ųezzVꕑ—=Ų_Rš]>dļū>fĸ‚G ÃîžrGlãåTH—c ÷ ņøņüĒXė.fž3e˛HĢŊĐ#5ž‰kqļą‚ŧ/\ŒQū5ĶxYöŽz §7|cüŠĮ“Lē†Ų…Í´Ņ„Ŗ2‘¸ī]–ƒ¤Íf‰,¤#ÎÅäö#ëXՒå4„]͋„…ĸ"PŦŦHcרúW8NŲK[$ŋ+|æ;†SĄÎ+§‘TŠųU‡AŒō=…yö´ŋdŋ;¤uŒōdįÛߡlZ’ž†“v:¸u@V[VŸ# K Čũ:TÖéo~åÛITƒ*8=ĀÆ%õė`=îc0`œ{úū5ŗiއŒ„‘|æRH§øbĒPkbTģ›W:ģĐI-´‡†Č=đGqí\–ĄŧlrĶD~b¤Ŗ&Ū¸Āü*[7{zÖ(î î“?+įf=3č)Ū'Ķ˚ė˛îX‘•ũØÉÆ;UArģ6)4ÕŌ(Íwr $"^Z˛˙ē˙ä*Ĩ ŨМO #,Į9ėAčMY–FĶä3 ŅÁ`ƒŸ¨éŽ ŧ‚ŪXEÍēĒņ—A€w#Ÿb*Õ$C4VDhĈß)įЌ~]ĮĄū¤čYČŸî˙ 8˙#Ō™¸ˇ‰~rU€qŒđīČôę~™§-Ņ7 ą ģ—tŨ¸úÜRJáļåÔ Ü’9 œįęy÷˙=Ü2íĀÜ ôĮ˙[ ĮņĻEp‹/īT#īpÜũyéW× ‚ƒŽ9ä=Ž?×°Ąģ XŽ_0;`*ŽųęyĮzūPcč0=û}8˙wۃ2–!Bîį?įōãč*<8$äppyúúúúŽĻHČSŽƒÔvįüô÷Ē×'uŌ’GܓžųÁūŋãŪ¤W ÖΏįõĮjŠ)&~rđ"š@uZč Ĩŋ_ŧŋúŽ?Ė÷ũ+ŦםŋąåÎ7n^Ÿī åwŸîŠšz!ĪsÕÛnpGĖy¨ØzcđŠXäpFj,“Æx"š˛ŗ.[p3Qą1Čų‡ĩLÁ›<öâĸ ŽûŌcHˆđ25-žúÔŦ­Øā֙ÔņĮ%‘œr:æšÃ˜üjFŽČeLœ2āqø~ŸĨ m˜##€X¯p?”ZTÜ)˙CŸ­H–ōȸãW ŸëĮÔR‹t Axäg¯åˇ“õÍMĮb$ōãv pĘqôßü˛>•BIRĄß˜žU† ūŒ+UŦ<ÂĨD…ČųŲúũ3ĶØį¯jĢũŸ/›°Š…ņ*ĄĶHVfsä“÷žS6pŽģOļFU­ {LFÍ A¨'”Æ?ā øÆĩĨX-ÂôbŲšōxÆsÔū5BkŌ™˛ĀĪCĀ˙€7ëG3{’!¸ļŽņ™Ū?4cČūUZHŖmÎÄ1pĨĖOÄ˙õĒÂLķąu FpÆ3ŋ'怸æšd•ØŠY8ĮĖ[säãÔĄ?į­5pvļŅČŖŒ2ĸcxSÉ˙yw~ĻĒĪlĮNe´ÉI8Qr?‹PgR†R#7ČAˇņ)üØUŒÆdōŲ‘UTæO”dãžr?ô*­Q;ŖŋšâyÖ,H˛üȀŖƒÛŽNZī´Ëũ9tĩŧ‘ÄI(;Ë9zäzôÆOʓ1f¤!=“Žy™=*Œr0Fĩ™Ø‰īĐîĮŠāV˛‡:!K•ž‡kâ-.âäAepÄíoČ ¯ųâ¸˙Ã9Ö \ōĨN8īĮ­V˛†yį‚āYųĶ,qäÍīžŸ§zęŧWnMŊ­ä€’åĘęGŊf’§=:–ÛœNJ'{{…6ŠoCˇj ŸNNs×ÚŦ.“(đŌ]?˜$VnzzŠét}FÛgžD¸|dnāĮ sۚ‹Ä.áežUęeToOJŽwÍa(Ģ\âJG įįc63õ铞;ĶDBYDCDƒĪ æ=zēļą\ų;01€qŒ“Áéū}k>ĶuŊĪ’ Ū0@mšú×Bf'U Z´ú„ōÆÎŠ?x@Ú)Ī>ŊG_^õŲÛĒē °ÜqĶ'üãĶë\,72Z]­Ä[2 3/›ü'‚29ôëĶ jÛx…Ŧđ>ĘdL’§Í߯ž•ËR.[ÂI#¨ķĐ‚9`zãׯąį¯¸Ž;Ä:qĩēŽXYüИ›w9õë€~ÕŅé-Ėŗß2ŒÉĩĶšF3ĀĮ\dr=OJÍņLŠö{dÚ‹–ÚHÁęGâZŠzJČŠë’U%0™į)ÂÍ×ät=EJ2a>a¸ $gzüĀsę>ņ§4lŦĮāŽIĀ\ûŋ;V…–…synYXEW‚÷ˆãŋŸZérKs$›Đ͌#¨Ę°Æîzœđ;sƒĀĪ^jĘdRsŗ{0Ūp@üAšųkJm ö(ÆŲ#Ÿi“iÉĮ?ŞžūύXG Ŋ‰rT‰ dä~¸įÎ:ž*nžĖvąč‘DR(ØÆyô ˙Jŋl‰WûŖR1Ū1“…Æx˙dÕÆ FAéÅpČęŠ0ŖŗTžöĘ8ˇ•‰ķqģh8Į`*}?PZÅiy&ë¤ũŲ rāŽ´B—QëWąÆådWė+ų˙:´m-ĶRWh“s.UļŽūĩM­™)=ĐéfxĄ&8]ˆÉã“ødÖ]Õ鍖K‰‚ļß/äĶė YÖdR‚v†<āēžXŸáõĘEö}6'ÔŨî “|¸įž§¯ŋŊ8F┚f–‡~ Ô$ÖŽŅ–ĀAėGoSé]r¨<āgÚ¸Gu.Ģwu.!ķc8…GîäŸĪų×tĄ€Įĩ*ēJÅSøn7€z~´Ēųāƒč9§Į;”cĩ/–:Âŗ(ŽģZĢÜ?īålĮųü?ZšŗëTeVķŅų*ŋ1PzįúS@Ęķ]E ‰Č7ķė;õ'đŦˇÖo– -Ĩˆ;ŽĀđˇĄô EŨšÛ,jĸE‰œ°œüšũI§Ū[ŧ÷1cnųÃãž?ÉWķ­Fm˛]}PØB3žxĶŽ03Ō´­d’U”Ë”CŠœņßķŦũmĪö†•ĪqŋžƒhÍ]ę]IYT‹TŒŠ'ĖHč;€įŪ“øPīīˆW;Ž0}éÛvƒō‚;sO;Áár{*ŊÍÃÆ0PGqŒûT%r›)Ü6æÂÉÎOaëø˙ }jհ€:N¯ķüjŒK<žfҌõ?Åīüŋ =kAC*ôÉOą+š9L+ÐŦTj@ä“ū4ŲXĒŧ‚xÔŒĪ‰n1ģŒ?/Ô/ũõZ0Â#ˆÆÕ¯ĨQA™_9î=†˙Ų?*ē<Ė9ŒķŌ›oĖNÁ4Иn} 9ƒ™Í5Ĩؤää) ‰ÛãĶüūUB˙IŠå]–0Îܕ.p}ûųUĸáÛoéūHüĒĀ9éúÕ]­…žį /„nfg“ ĩcpO—'ÚOsXĐhĀVļ)ķāzHõė8'žz×Ēä×ëHvđãéZĒōJÆNŠ<îĮÒŨ YĢŽXČ?1ÆsÎĐ;˙œˇOđũޟqö˜ƒ vOL“Žŋ—ĶšŅwO´@é‘ū{TŽÉs´šĨ:˛ãMDæüGpZCmÃĸ %} Ν?LûVŧLˇŦą’QĀ ûņ˙Öũ+Ô/LÚŖ\Æp'ČG9v'ĄéĮŽ=*֋ŦG`ōY^1Xđ6ųAíô˙VáîĢĨާUĩŽrŲāŽG_åŪš?éeæ†Eäo•Į׎?Īa]mĨÔWvŪ|DäÍ>âÖ;•Û"Ģr=ë8˕•(ķ#ĮĻ‚}*éŖ!Ö ~ī^;ÖĩĩŒ:•žõ#wMËÛĶ ‘Zž-Ķ”8šDųq‰į#ūŸČz×;i$Ú-×ĖCBßuĪŨ“šėRįÖį3\ŽĖ×Ņ}.îA,K*“Ŋf Čƒ‚z“Q¸„“Ģ€åAaCĀ<˙/ÆĒE+NBÂLvĒwäß_LžyãĩLp ;šęōp~›˙ųŸJžˇ)mb2ĀĢ)åví䞝ORã?AčNk2Î)m'h†×ŨĮ'Ļ2}?kĻÆ –PĮ8 āä˙ČĪ>õÍŗĘĄ×z´gäXžzŽ€gšü>´Ôē ĸŊä˛;Įm@¯–šÆGą=*4˛ģiUšĄŒ—wQũjĖãlv÷ąÛIĀę×ۚwž—,cK•u\8—įéU}4Z—_HŠKu>~ō+ #íÛūĒΞĢŸ"H÷|دų˙õÖ­ĄM/IW˜†Pr¤.Xg×Ū™sp/-\Á${vĘTdĻ2éP›ŋÚEh%2)į•ãĪCĶ}ÉŠG#vÚ1€ Œ~ühÄĻ8ƒ’¤rŦOu?×üjô`îÜĀœ‡'¯~ įĶŋëVĄ!cČé× ?æ?ž.븹Î]Tļ}sR>ᲂÄc‘ƒôįž?.>´Ôē‰G IŊZ€{›ÚīÍĨ:úēÔW-äzé<@ĀiŅúųÑŦO+ÛõŦáđ•-ĪMqĮ•ßŌ§?NOĨE†ÉÁõŽC°ƒ$–īŽ™¨ÛŠã°&Ĩar1Qãođķô¤!b$pzqQ6w‘øT˝^:ķQ“¸ƒčz⁍Á8QúTrvŸÂ¤' ¯Ĩ1žđ8"‘ōÀėECp’;æŦ1$mĮjŠršv< 1Ļ8p={f§´ĘąA73â­Ā9Æ*ŪÂ3ŧLâ[zyŖ?‘ĻxđAä–_ähņ/:bg¯š?‘ŖÄ|čŅī:˙#ZÃė˜ĪvLˆ~Í;[å‹víōšÁÖ?(9āŠ‡ŌļĸMļŅ)\üƒĒÛŨ+UäŠ<ā Ÿî ԟÄDö3ĄPİÆė~=?] grČ 0Ž3ßģA\ũŠį¯NOļ;Ÿ§jÜįæ*§ŒØĪępk5} āíŠRvŨ6Ōx Cœžŧ} —N€´ ’ŋ(á[šĮēûfĒÜ7īĻ,Ų+ŒdƒéīÖ´4°ĸ7wȰ uīķZMZ#O™šđŧ‡ žŅž[v=pwãĪZ`ĘË$봀IVœöšīÜũE[ŠÚeŒyX1ûÁ‰ū™ĪˇRy8ëVaŗrÄËŧ’ũÛļ={žŨa\üČŌĖ­>cg%•q´Ķ׏Ãč;ԑ@ăĩF=>ŸëÚ¯‹Vų›fq“†>ŋ†Oõõ¨Ū)<´cģKs´ú`?ä*yŠą$LnjŦyä¯^=žŧqŌŽ-§–w†Ü01ŒÃĩ%€Anxe÷>ž€€?LRÜĘU ŽŦ3Ī=ĪųüĒÔ´•ŽJĶE lĖvŒāŒĶÜÆ<ÁÔ,l ?˙ ĒJG*–mĖĮhÉā~ ā}3øT­öÁXŖĀõúu*h˛Ø-äâL$f0FŌcU$ņüiešėbOßcž<œŸĮņô¨ÜÅdˆ?s•9ü<ĘĖ–U’]ŖË*q¸”^GļúÕE\MØŗs92˜÷ä 3ūáÁΏ5WĪ-#°YˆØC3>­ĀüSW6ņŧ¨)čw˛üxí˙Į¨]˛ČbR\ŽXųg9>û ŌÄÜdō*;J …y#Î?āL­˙ĄĶJo‘s‰p…SÛšFāū4Čĸ…f‰ßÍķ Ÿw#v{q÷ēzԀÆc˜°\0Â0ÃķŠØ‘Tŧ×_08(îØØ#ķ<Ē&™%%Üí e ūG'õ¤ û+Ã/ŅØvī’d~TBŅų•“t$Û[(Ož@_į@XŖĒ[ĪrčąF]c#r ÚÍĮaÎy5BãMœ‘n2  b[<Ž;ņßŋ9­õŽ5˛ė æä–L ús„ũjhÁ6˙Ũ#ášĘūŸ(ü^ŠMĄ8Ļič÷Š`>Ņ5Ä}Ød–¨ūf_ëZ…ÔVÖú{ÉÎs.Ėǝ#ž9Ē÷LÂöÜÆ„…MšˆžFOR2=:f¯\=Øŋŗ˛ĩ¸x-Ø8™¸ ÉÆF}ąĪ§5 );˛ŽícŠŠÎæ2˛^ŠH“rĒ‚7°öé$y˜L2DâŦōéõúÖæĨĨ_\j^EßGcÜ;uĮbÍũ8ɧK ĩũŊ#<}öÉdŽ?ĪķŨLÍĮĄJÚ=ą \•2.ā€:uŽŲÍRģļ"åUApÉG^œv?äUûÉU`Hc*¸Î76ņõ=ũ+1¯^o,Į!GVm<€8ëĶōϝ{‰ĩąąŧ*(e%ƒĸœ:ā?ŨũléúŨėŠė+f,|É Ū3ŲWŸ ĮąŠ´-Ŋ+ĸšö+hiĨ ƒŽyΰūŸ¨ŽiMėŖõcāˇŽŌ'lHšįŸĢß'ŋōŽ]ԅõépŦą'ʙæ^I8㸓Îĩ/uŠī_ˌÉ}äUÆæ9ԟ ęjˇG3lÔ"ŽčŽ7cʓŠ‘ĮLđqԈEÅŨ “MYøoJ[ŌōČ‘Ü(yēžG^}x×Ms,pFd“ Øco@?Î>´í* Ķ”[̧˜ÆB˛( Ÿ|}=†+Ä×[Ļû:šų"x9=Oôž:ŌožvCK–:›HåļąD(@Ęįúßūžk+S†õ;k•qŗl§‚=yčzTV^$ˇû:‹ˆå`˙ëŦCTūÔŋķ#ÂC¨ŲÜÜûzņū4ãMßPrV=6(ĖlëÔcŽMMĮ_×# ‹Č霞Ô<Š€–*=3\ŦÜÉ쏏M~ŌŨ.īåväįčrCĢ\Ii4SÉōÆŦAp8YÉļ2ß]ãÎo•sĀ÷>ŋ•bk—ŌŪÚÃjˆ͂āöį§×ō¤UÚD7ĄĒjÍy­;JÛ,íÎp™;Ž8ü“ĮÖĸŊ՞YŖ¸û.ËPÅ|ų9ØaqUnϊÖé!¤_W`={ŒĻ=(‰ĩ X-Š '“j—ä„ Î8íųú×JŠĩĖoŠŠāĢ;ĢÍfMBY€XP ‰A:ôpŧ0äôÁŦ}EMM0<æW~d“îķŽīŠYo†øÕT*ĄÂ‚rpœûô5ÍR\ōē6‡ēĩ6˛¸Į#Ō“p*xúl_ęÆã–æãĶ‚ŒqYG+â?¯•Y‹d’ÃpöīĐ~§ôŠæ)#9ū={~ĩVTbUļåx<EĮęiĄ3ÚXä×õ ’Åc„,*äô'éšĶĶŖ77’^ŧ[UWˈ0$ãé´~Č´ûK"$ą,I;˜äc9˙tĖVĩ´A" HÜG͏SÖŽR] Š}H[Oˇ{ąu*y’ōī9 ôl°#ą ┎߅!E$íÅAZČâ8ŲÛ8čÄą|ŧŽyã˙ĻWŽ›{,JxC—+ĪĶõĻG™)#Đdį§^ŸįÔúU-õ$ļ…Dc ‚zķŸ˙]LŅ šĮNØäĶČãύÛrņ‚>ĩ# Bsž=¨n! ƒãô˙ ՔûœÎĄ›;qĀ>ŧgųŅÔRŪ  €p8÷鸁øU‚„Ÿē1ę I ,û™Hųxö=qüĒR7NG=)ą$UŲ¸āū^ęŅmųŽ+DŽ} ¨gÁ\äm$c¯ųâ„36‰¸č0Ŗˇéú*žá’Ō&’FÚ~JKyaˇG–gTÆ[×Đ~9Š­üĢëq9ÚŪrœq´ú:§ÜŸ!‘bhRUk¨aô5 MŧŒ÷÷ŠÄ1Á *Œ"ŖØ•NĘéoVrc S9Î@ŸÖleÜ\ÔJ’ã9ĮcķĮįT5mU§ˇh‚á €yëyí˙ÖõŠ/­Ėĸ5BĀpŊsßøé˙&˛'ˆåJn „8%HÉ'ũîžš=ĢxÅna)=‘I˜É:¸ ĘÁ˜đw ¸÷ëĶßĐTwqy–‘É bhÔ|¸ ž ĄūĢO+I(vÁš1œq¸|Į 8éč­ZžRIfPp~đ>`ę=~|ãԁÚļl„? ę1$Ų°ąÉķ ÉáąĘō=Ģĸ†åLī ¸‘č? ķģ6’Ūáâ$ūô aÚôéۏĪŪģ}ĘH‘îå/æ\vąčŊŗžŧbąĢĩ4ƒoAuˆã{wV 3¯O_ ˙=+‚ˇT>mšRU÷sĮQŽ@ãúũ+wÅ:ŒÖú´C˜ÁÉ?ÉũkžĶŨĻNãp.9esßßķĨ(ĩ‘6š‹8°)ĀÎ0ŋ‡Võ'Ŋ~’.ÕŨI9$n~$)ã=}z}_¸Âŗd āųåWsÔöĻHĨČķ2UvŸGeāŸČwũ*îI!y7œ™p§Ũsôfũ1ĀäĶ;‚Į°ģ€Č1ėķ>Õ*$Á‹ g ŸĪ<“úv§ąųļˆĐĮ.„(ô˙:ôŖ`"6îŒ2ŧåŖ*Ŧ¯˙O_Ö û8ķîYu žäķéWYö}đ÷ ¯L8âÁ;Ęmą•Īŋ9đ=~•IØVš-ÕÜW€GåL!QœIōîė0ÎįÉĪ?íšÖžæsØĨgē4' OËČžƒŌˇ7);9 ļīåXvjmŖž@<ūCú×M§ZIqpų›Ë‘ōd~\ÕÍØPWFj顗˛¤*J¤€;×K¤é+aV ×.ۉ 8öįđ­‚8‚ė •@É˙=…6K¸mĮĖÄÉ́’9鞕Ī*’–ˆÕA-K'(ø ^[nr?Īĩ5›Ėŧį§Lá~ĩ÷ĒËå3äņžGåœū”$ —Uü”ŪĖÅIęN{ū•QŽåfbąÂĄō[ßÁĮáP $Æž~Xō¸=°QųôéV6āĒėp~đG>ũ?@OЧk ã7y˛9Ž2ŖžÖÜŋLúĨ8É$p.cĩNÆq˙ 6*˜Ā€‚XđՉČÕiAgRĨ÷’{‚"GüĶHW'f•s)YHt•~ŋR3úÕI‹Č›™‡˜ã’Č3ų˛ƒ˙S&Tw Ē…9#ūų?֘’ąW1īŲ8šü‹έ,q0™K:(䋐ā4É}Ķ™[sÄš>kĪũ´ OHËGąB’Ëķ4‰ģƒčWwōĻų\ÜG§[Ŧģ_s´)õ鎝1THļ–×W‘Į堊äī2ŸîĻqÛŽ^‡AÔ&,$ŧ[Œžß(ãō­Xâ?ÚÖ AH ûA=øš~Ģu*Gĩæ ŒÉ$kĪ$p?–k76Ū†œŠ-N{PŅaąˇØî0ĮIp6Žã 8ũ=̐Õd0^n†čāŠBë‘õĮļzt­ŊJ$™Đ^[ÛJII%Œí9ļįŽzâ¸ûÄōnq›”ã)^Ũq]4ĸúŗ ąŅé2ÉŊdY™•Ô丕¸Į'ĪŊmÉ3|ŗČÛX€Cˇ\Ž8fä˙ĀIŦ-'rÛÆŦā&Æbxú‘ŸĘēė;¨ÕČxôGlˇ¯`:{TT˛z•íĄQËĖp¯ĩ÷“¸ŽIč@ūųéWėĩ h§’DūЍFl ‚ĮęíTbˇž”˜ūČBÕH##ŋšúb¯ÚiąÎŪnĸ%B@ ķc×hį™īPímJWšZ÷Äû, lëm+Q.K0<ķÛĩrO=ũü˛É*ɇS‚}Ûˇā1[֝e ’Ú3ËjÃiR储Ī@~ŧU”@‘™W÷‹ĩˆWČ#ĐĪā>ĩqåŠēDģˇŠĘËk,qísžBsƒÉÉ#~_TH÷;€ČÆN=Ī­mj+˙Ūŗ@į9B¸ü3ū~•œ"XË2ˆŲI;võΡOC6ĩ:Ũ™,7ēš6W(Ns‘ķŪ珴{kؔÜ<ŒBđæLO§§˙Zŧļ ŪÕåG-åJs•=ĮsūzŠÔ´ŧ–t>np @ú…Ռé6j-™čIáÍ Íķ9.ę7ķˇĖ>€ķŪ´l ŌÜŽÂĐŽĨŒWÛ<âŧßN´Č72îōÔ~íqܸį#Ž3×֒ķZģšsēfrN1æciĪô-ĮNƒŌ˛t›všjit=[Ō]íÚM?d.;§č1ūyüøK›™ ŅūŅ\¸ ËÁOq’:įą§éž!žÁĮ—#ŧ#‘—rˇā;āĖzUí[T͝DM†{a†{u°ā"Ē0pvš–¨Čō@É*vą.Lo´ƒØgO^§ŠÅmÎ$œį•<ļ?YҎØî6žPd¨L ;ēė=k^ĘÚ{ŠVŪ8üƐđJöã,qÆyīēŽZ-DˇØô "e“Dˇ‘ŸcÆ85$ģŽ I'Éāĸ• “Ķ'Ķ“ŌĸŌ4“cg S°+•@Nãמ;p>•5ÉYĻ(Ąŗ^‡ŸđŽž‡OCöfšrŌĒųJx\d7oæÕ‰{Ē}˜ČĘ"7TžŊøāũ2kOW슯ŗÃˆOrIÉü Õ hŠÎēĩđ ’Ė āûƒõˇŠJ7{;ŪČo‡ü5(öąæ \;ļ’8ÉnüúzWam™Ĩ(ŗļXĄ#N§ ÉüĮ_Z]_PM.ÁįegcŠĢ’Í‚. y­ÖĢ)’i]–YÉ%ä !ãg8rväį€N?Ls߯zu„l‰‹æ–ĻŖØįŌ€GĻ Ĩqō“ƒžŧˆåcnN÷í\ÆäR˙Ŧœ0Īø š‡pLķƒÛ<ČdŌČ|ĖĢqžšüØūXBō—ec@R=yĮ偸šĄŖĖ•]Ŗ!ąíĮúäkLcįÕJÂ<ŖJÄv8úvüúū5w) &\ g'×5^ęfˆ ŦK1ÂՇlœ?QYÎ<Į26?{œāz{‡Öģ N@+š™Ëž3ž˙?‡5~8ŧĨP9÷Ēļč$”Éü*03ëūGųÅ[¯Ŋ HĮ'ƒÜPW’r>” Ųį¯nE#d÷Î})  ĩR|™9'Ÿë˙ÖķĢRžüĀqšĒ fĘŠ=xüŋĻãBh“%@=G>ŧԊ aE1WGˇZqfî’:c4÷RŖšĒ_ÃiI+azÆIŸz{•@<9*į­rÚčķ⎉pZi•pz˙ĀsWŨ‘'dXÔ_ū)æŧ`¨ėœ ’@>ū§#5Ч¤ûl—Ëd‚° uc€?Æŗõá.B€d•#P9āâĩu[—ŗĶŲĸųĻ$$j9$ž€U=Ŧ$ĩ.GšNrSɎĘÚE+š‹d÷cÜÔā”+ÁéŒfŗĩŠG”‘n7,aëū}*åIŲ]™° ŌÁœ)8ŊīĒʸōŧĀŗ#7—¸0WˇĘTûŽõ§#ŗDí÷c?īũáĮ×vįYSŠ‘Ú4uû¸^N28¨9'ÜöŅØ€FĪ12#ŗ Ŗ唜Š8éԎ°Šėckģ•ģʀÜå8ëߟ\ŸJ[H$¸ēaCģq` §ĮĶrūįŠŽžÂÆ->Œdšáœ“éúQ9¨ĄÆ-œmΛ<)´RR˜V'¨Æ}:~cŌģÅMļʤc ÚŖ‘ĐÜĮ#f0:Œc×đ¨î¯bˆˇīQ ŽI”¤ähĸĸr>.ļUEuŲ¸pzŒkÂ/&É]”lļâ }OCî"¯_Ūjũ°1ŠÚvûÜāõ顖8ÔĢā*Š›ž?ŲŽãqįŽ tÆę6f/WqŒ˜ãœn¸ëķęĮ§n)"Ž3ļLŽzã9Āé’īŖĮĨHĘąĄōQČ@^üĪš$úPŠ&~E•›nCøQéԏø ;ˆ„ē¸Ŧ6ŽéßøN=ÉäûŌŖ˛nA#?67°Ü§ķ§,o´ U×8ː0ÉõúįĐ œÛ Ģį 70GãĶ>ŨÍBZ•î|ų…†H;˜ō>¸Š•Hd™\úzŽß§æŸc˜Ę!åĀP ¸ŸĐũ1Z:lŒ…ĸrv‡Ī~xüéļ–ĸI•å>Y,NOāĪéR9‘Ž7tüøĮCô흨,…°!<˛OËķ?ō§-Œ+ōˆH9%ãņãĩčŽVaŠDĪ ž6˙Lį§ŋ˙Yņ•mü“ËߟõüúÖ衂 !Č`ÛģŒ{ŠÅ8Zā‡2}6QÎ;6–Ę–M ‘“Ķß˙×HÅ6Ŗƒ÷{į8ļ|–čŪ`Ī\/_ürŗ#Čņm°e+…ôÁõ„īv ˙āÃléŖ˙|‘Zģ_ĶôĒ-Aö[||˙*ŨÚ= %đĄõeÆĪlũj>¤9ČęyІã¨ö¨ÎīŊˇ$×1ÔF˒Ŧ Ī=iŒĒAuéžÔąĘ_=đ;R =})čqۊÁāՂyų{ûuÍFFæ' ­FŖn‘QË´îā÷õgÁfÁĀ´ŲdãÁųO4*1ņ֟6>ĪÉĻÅČīO¸ @sÎh0gȸpjũŋ)Ī œU ’ÆĨ_ļ@bČ=r*ŪÂęgx˜cJŨŨe¨5Îļ^›•ôZÃhú™Owč00G“ČEãwNûU‹¨;‘‹ä†īŸ÷ër2É*X¯Č:ļŪŪė?•Pūθģ;ŖBÁŽ21ëÍi“ÔÎIÛCÕ3#…ÃsÔ œ û~uŨh°ˆė؄ŗĀœ`z~5•§xušb×,BŽ>QÜū&ˇ˜Ån|´Â69leˆĮŠúT՚–ˆtâÖŦ†kŋ6O%GUÎār8<ôĒî>ę’ß1ŖïéíC:îܸ'§ĩ"Jc‘^EA´Ã#ũk›ˇÕ~Ëo M%ŧlĒōD›‡ĪNsžjŖv‰•‘Ŗ M&ŌâōGuķ[Ã,ˇĪSX×īŦZÍo§¤’m>kģ  tĮôĪøV­æ­i,SŪ<Ņ5ĸĤ3&H럔÷ČãŌ¸{Īļ3Ēȅq‰ĸXŽzqˇ Į\u­)ÁË[jD¤—S6ûRŊ’gšy˜ã*v6mčb™$ÚÆí!Ɉb>QĪ ëÔÔwä—Ēcē†'XKĩÍSTŽmĢ3Íú_3,÷- }4lßY ū´āšIšH03’%PN=ˆ?Îē#oom "4T@7aqÛ9˙ō+Pš†D‘՟p ũG#ūžÕ ßb­mÆÛ˙`Ī!D¸ļW~gŸËjįIŠĖ™c †‡F^Ŗoå“ī\…íŗ|ŌFFX`ž~ŸãõĒv’Ma'ú%ûÂČP )íķG_¨­}ŸfG:ėu aq>ø‘VHÎ~WRšãûšĮŋ'đŦûŸj‘LŌ[ذœ+.Î{ŌĻąÖŽ!ųn`Y#ˇ}¤õę:võŅÛxŸLļŒ™/$đ< @üyūu-ԋФĸ÷<úīLžĩv:|ĒĢÜÆBž;céūsUmÚ1ģÍ*!3"’ žģOũlׯ[jš^Ŧ ŧ‚fۂĄ°ß‘æšígÂđ3’=˜9.ŋ.O8Čā~$ÕBŋI+*VÕ3ƒģŋ2Ę#B>•# Ā'ũiwK*+“čŖ’xã§voŌ´æđԉ“ų@1Âî1÷ĀÛúœU)ôÉáÚ0듙wnÉųQõˆ­”ĸö3iõYK`ŒĄ{îãđj{¸EƒkHí-Pŗp=É8ú×M x2[´ŽæäŊŊŗ‚ÜàĮÔdgЊî!ļĶ´hĘ[DˆŧNXũXķԏαeeĢ56õ<įKđNšw"ŧņhöŸŪHpz uĪøW¤éZ\EĸFš°vūCĐsŌĻKø8ž’~ŋáUígk÷€Â8ü?>AŽiԔ÷5ŒTv-Ō.T€„}īn?Æŗ/.íŦā;øŠ6šęrozÔģr–Ĩcã/^˜Ā¯7ņ6ĸČíÉæaķĩ[ …*pæv ˕sâMnUĀ 6‚0WûÃŲsųW}%͡‡ô¸`a 8“Ød˙:å| `ŗĩģŊvY.œlŽ!׎§čI•eëZĨÍÕī˜åP’Nƒ,G^:(ü1[Ę<ōå["šUú×ĩŅŠÜ;2|Ŧ"ÜaųĀāžGé\ëš?$!%‚ø˜p99ųÎ(ž]Ė"mŔmÃ8žßÄ}I¤xXŠ(§‘¸ģT}ŌãĐ{ņĀ÷ވÅEš6hé(ķ],ūVôU6œĀn§ž¨ÜįûÆŊoM„ÛØCYöŽ7cŋLW“Zš‚Uāt*ÎVIÁĪlc#Ž0+ĶôĢ“%œe‰ÜTgœ˙?Öšą6ĨcKĖÜÅ@Ī?Īü*¯—h#9#Û˙ŽqRgi,OŠ˙?¨¤Îw“ÉÆ?*æ6+Ę2ËGąķųœ ¯0`ŅÄ÷ŽvdûčÔ˙ĀEZ ĢCšŽgž úäĶl”KpĶģg z˙^?™÷Ļ&XTFĄz*ôĨ„`ˇ>ô’0ķ99<€?Ī#ŽūŧTÜĸĨŪâģ@Ꭵ˙=ũŗU™pģI'¯ŋŽ={ūBŽ;åōsžƒéūF~‚ Tg›a“€O_R~ŧįņ•D“ZÆ#„>õ)AÔ/ëNÂĸ*¯ Ž”œœ‘ŸjCn‘Į­(PT)ÅF1‘Čô¨•AŽ{úP[Ļ ûŧ°QËéßôķĨ‰2yRz“ƒßŋęOåQæHNgčíĮ˙b?V×dHu' Ļ$.AeôãŠĘÕõƒĻÆJĀŌ98ÜW õ5f[ŠNĨon°‘ĄÉ‘Ž3€8ņŦŸžÄ˛€Ŋ2ņžŧЍFí&)=43üChŋښy…™Ž@““Œāū„ņíNŊ"oiņƒ´îF3´āžO| ß5ŧ’Üx…äē(XB˃ĮŪų¸îO?=žQ⨘îqå¯9?МūuĒĐË}KšČi.´ČP;ˇœŽĘ98Ī&ļŌ XK*¯˜3ŽûúôZė™§“ᙆcî¯÷EZ#$įĨbåucdĩš —×=¨:ĪzAÁAÁ9ã˙ņÜūUĐHB#7 ęVš ZfvÚAcķq‘Ôņú0Āūđǁ3ėDš&w3Āœœį˜oĪŌ–=gũŲģ8Wú ķüšÕí6Ũ]÷š8ƒœ‚sÔ}Bįū['æ ŸJnvŅŖr­Ž  RˆKíŒŸ_ĖķQŨŪÛÛĀĪ%ĀHQļČŲ䘠œ=ķYwZ™}xˇŲÄķÜō}û„Ķ~ņM;h>ÆæŌëĖ6ņ2„8 Ņcw¸Īã\O#•õh’Đ1”)"ēûįfŖe"ÆV ÛČ}‡Œ‘ō?:äüDŅËŽą, ĄØ}7Č‘ŽÕĩ-%teSXاąĩĘŒŲÝŋ3č?ĨKĸ–+ķd’Ųœ]¤ûéŋšcPĮs)?x9ŸŊ´˜čiÄģíķ÷e7F˛)$ėp¸éĐßs2M¨U3ą‚ņJāÛ%öÖĸEC€†/—?)Ø=ķ’6üN AŊwĀ`Č@}˙ā4÷Žcq´Ŧĸ6^x ×# ūy¤2睒ÁRUÔ0Áôāžŋ'=…Zūe\sœtôČāū‡°Ļ@Ø0ōÉĮĖXŽ"ü?iėčŽ!ÜwŠÎũÜ˙ zgÛĶi6+XƝ rNąÎ9ú{“Ž8æĩ Q*‰å“œüĖ&?äTVŅK8Όt20ĶąķŠîíŽģ¤āÅjšI$dÃ6:*“ŠkĄF*0„nĸĢOs9ķ=ĮĮōĄ’ú ‘3ßÂaã×ü÷Šŗ*âiĶŗŧ‚H É?|gn?ā'ũjž<ˇ`#PÄžøídęŽ Õ>Ũ;Uˆ5(Ŗ.˛‹‚XđX§ ū}ëGėMû—ĘЁĩAÉeãķéYP˛@ˍĨsĮЊŋĖ ļR<ļĀ•<ú|ÜÖxbüTyŨ‘ŋę1ÔTĨN˙n•R eFkœę"gN0i$$ķŒw§2įķŒäū}i¤:mĮ4€fÎ8¨H;˜~Uc'8íQ?\ô&€##ŒđzĶXĀ`€qÉŠV-Ē}I<š“ž@ŨÛڐ"Ŗ(ķ†Ū$툉aĀĨu+*Œö4O‘Æ2Ozc9éÜ3nSzÕ´ Փp?Ō?Ūä ØļĀ„pxĢ{ Š›â†ÆãũĄúsũ+3]hļŠĐáôWü\Ā鑁Ái@ũ Rņ Ÿ˛ZÄOpåZĶŲĪv\ĩ‰‹")+Į8ãŒ{üĒėD6ė•Xā`JĒãÉC kķun:ĶPĘU|Ãōõ‡åIę5Ąĸ.+pOEäūYžC&÷`Fzgh?ˆúūŊ$EÛܟķõã˙¯M-!2ēŽq‚zû~ŋäŌHä`#4c‘ŅW9éõ˙=ZIXķœtīéίãL_“w!súû˙ž>•6ŅÆAûš9aĀ=˙O§ûÔ rx•\ ʆ00~^?Īæ>”­”ĀSŅrAįŋ?Žj7–%`…îrqÛŋ˙_>ãĨWš¸P~ī –ûŖ§§?C“īEŽ eÜr$g#“nŧ{Ž*厝=ëæáÆ*9ėoä}*=>ĖŪÍæ°Åē>qžŽĮ#éĪĩjMqödŋš#>Z¤wã§įIžˆ¤ē˛­…Æ’—~LhûЕY¤\†aɞŸ§ĩl\s§ČĐGÆõĘĢ•Æk€đūĻą\?œÂHL›Ų$tãīķÚēĢ+¯ėģĮą¸|Zą „ā.‡>ŸãJ¤a Ũúęú…ŦjōÉnT“œĶ“Ķķ­­2ûQVŧ˙>'äį9ü3Qk6ē…œ.~Ûd͓‰¸¨ôū°j :"c7ÚtÆĪĪ 9A˙ëúöÕģ5rĶ;(Ų/mÆā[¨=аÆ-¤Û‚ģûÕxâDŗBËž]Ũ•?‡ĩˈ,ŗĘGĖŖ#Š=pO#†ĩ~ÂÍí0Ûb1ėåOą<ú}}nëéĒ1Tĩ<üøCTž ë` éˇ-ŽF2yägØÖ’h~4˛AömEØáiCãūúÚŊHö™ëKązįúvŦŨyv4öhō[ĮņT7;Žãķ —6ąœ gīã§\Ö˙‡-.õŠŅ¯m(cÃ3œâSŲA9ČĪ'ÚÉn% 13ĶüũjÔKŗjŒ R­uk SŗÜ†âXí!i[!OŧöįZŸWžōmÆđ¤=yč:w? ŽˇÄē{žˇ›(PxūŋI¤h–šU˛ŋ–›Šá˜|ķīŌ”bŽ÷ŽôčgØhr\2éŲ`TŒ1ûŧõČ÷#čk^[ˆāC8Î < ˙Â×ŧ] m,ŽnnFĐGé\õĮŠ’ŌŨŖŽS,î|ãЃŋL“ŸaԚ§9ę.hĮCĄņˆ’ÆŨãC™œ˛|Ũŗ×§į^u$ī}3ĖÎHbHĪ'Ķߏ§I5õڙįÚ]†įęÉč1×?OʧØļždv˜˙9'Čį=t ÆR“âØlŖS;~Ō1€:ã§ũõ׌ԏzÛ Îâ!ō 63v‘ÜûũxĒņēDáPp Vų@\÷Î23Āü&´ĩšūæ8Ö]ŲmŦŌą /$‘ų“×ŊhüÉë ë{Yn¯ČË+ŋ0ũŊ‰īž´ũFk[-:K;mĪ+.ĮsĪl cüŒVÅÚ[iv…-šwl‡?y›ž=ąÛį\[‰Z´+ąōōT†äaēįS{Pzhl°dKyÄKą 6đŲžš=YģuÕéú Ŗ[ŗ?˜äŽėãîĮ^WpĖ‘đĒÍč ÄŪįqĮĻ;×Ŧhl˛éŅHÁO'9ųGøV8‘­-Ë~c,ņ'IbsØõâžû°Ä}îŠ}ūčũsT„ŒuRz¤c-Đxã‘WĒg÷…Fxčz2MrŊ Šō2Ęäė^‡Đcôū5rÎ0ä¤¸c5ŸÄˇ(‹Ęģ>ƒ¨ũūuzęāÛZ3ƒ†<.yį×­°yŒS›Ö;‡zzŸéVČ9 {JĨ§G‹c9ná{œõúĶŪ\‚𧓏ÔzúzMj aÔ9,8Į ô_ëø ąd.â0O¯§ųæĄ‰<ÖŨŒ…99=}1íüÍ\ŲĀĮAEú/Œ~Õ*s‚r1RHJŽJŒtÕxēéÆA˙?_Ɓ’ų˜boČ Ĩr[–äîųvûdgķ8Ox"Pėę€āĮŒôĮâxü+[Ô.m,MÄ>Ėüą8Ā÷ääúŽ*ŖŨ‰rHքo“p\ācëןԟÄV>ģ%ČÔėíšu1Ë*~ė nüĪé[š]§Ų,"BXË´3’yfĮ5…{^øÂÚɎ(ˌW‚8˙)Ãâb–ĮAÂæ!  lãúW-⠖oXZŖ}ĀXãŗÁü2ākZîítŋ˛ZD €ŒXŒ~dXPYI6ŠũĄ#>Đģ!Áqܟ¯>˙0éUoxSwК{)ĄÅĄʄÆ˙ė‚;ãĐcŋđÖļŸmŧŲTųˇ9nIúŸlãūQƉ]ƒhŒnOÄõūõXļŒKxbSœrHã_Ī˙BĨ'pJĖĶí'¨ô ũҌņO`pNqČ?ZĖĐĖÕĻōŦØËq‚qŸlÖh<Ÿ‘‰`õ郎Ųų>§5ŖŽHLŠp kģ=ũĪõ˙€ÔÖ§f÷ژ€?‡9īß7ũō+Xé™=d]͐F„/LgŽü ~€~u|ŽOJ¯l€vŽzã¯Ķų­;HúVmęZØn2¸ĪOԘƒÃJ“nNy—$v<ô¤2í˛]Û´r`‚AAƒ\6¤×Yģ–XãIō¨’0Æs‘Ô{Õčdc•'éŠįĩˆĸ[ļg(đēą$ •*AäSZĶ•™EĨÎ\D凖˛?(dîAā~bŦ- U|Æo›GAŸËŪˇ÷[‘ ’Æäõ‘Չâ ä4€œôųō5¯´3å2¤įj˜ÛîāôĮ\ü§×Ž*1Q6MĘNŊŸL?=;dûÖĶ% ųTŽ ûëÁ>ƒ#§ļ)c`аm#|˖˙ĐÉ….~ÁĘdĒ–Â¨&&įa]§ņ$˟ĨZļ°†%§GĀÃĒ„Įļ˙ķŠĐ>kũÂÛ@“ŧėÕJâ˙k4pÎÁÁ%‰=yĮ͊.ہk’å",ˆáĻ_˜ŒvÉÎT’Y&9y&Ûģ…ŨĩOü Ώ Åķ—XŲ‰lŧ˜,}G˙¨ÔĘ •Ų/˜Į–T]­øœ¨4ôÚĮ€BŸģĮũô2*ĘXą ǐŊWîž1LōæŽRÉŽ@Á߅#ęʄūĩ™ƒ˛†ÛLų#=ūbOj7 ‰ 0¤˜’2[9Ī”˙Aj]đ ]ą ÁũÚ˙SUdmAHd‹?(_õd&§í›t°ÄĖüōĮįĪ5v&ä¯å*īû4™ÎčŸĘ­y>æŗ_ 4ęΉ8äã¯é€uÉ<āÔÛ?tŸÆ›Œ ãÎt…\ûsüę"ŦÅ@Ü1SãjáWõĨ *@§=iU2¯CŸ­7`p9Į'=jFËĪ~*%müG¯Ŋ!‰¸ŒđOlŠcsÎGĨHÅCd`öâ›!\sÉāPĸüĘxíŒŌJ?qÅK"üä}0*+ŧ uĮĶ9éđ×$އÖĩ-IXĀ ĮšŦš@3ãßĩj[ŸŨãŸĨi"Lo|ŅÚĀ dŊ˙ĪŊ3Äc2Ú(įį<~TīgíÚbö3sų¨ū´ßŽë›8Ë7OĒ֐û?3}ĸ`IJ–iķ’Oų˙>ŌīŒ:g–č6õ?6ĀpĻČá čĻ2ĮŋķĶ­¸Čũ…霐>ŋĪąĻ‰KBJ %}F=qū}ēJHĀļâŅXĐūEPÄ"‚áqœķĐ}?ž? ,&833¨v;ļ1õĮ§np? Pą]‹2“œŽ€öÉ'Ûąüj2…›-ˇÁßÉė=ņú~*ŨŽœnįûLcœžp}:žy˙Mģj 6WʰP€`–ĪŪôôūũ{ļÚuÍɌËÉî=ē{ÖÕĻml2ą‚{ŗ’Oך•ĨŠŌ3쁂Į œķY:‹PęÆģĨ¨X€\ õ˙>ĩWX!4;‰J…ČRũķȧ‘įÃ,ąĢnW Ī÷qūOáT5ۀ4å´TáŖāšĮOķũxQZĄÉčrZB<ė yDH÷čxįŋO˙]u–ņϝ¤˙gÍÍÜKēĘpWˇˇ Ŧ/(›pš2!#pÆYOlõāË9ĢÛ&ĩ+å‚Ļ6ķA ūšëĪlÖõ5f1vFމss %ŗ¸Ø§Fį;8ãč+B˙GI%å˜ Ä~ņŒŽšõ4ËįÅv‡‰GÎqžq×=ŋ,úWUisįŲ‘rzäÖ2ēÕCUfSŌīŌd*Ė€ ¤˙L˙’kEā|ų°,ßyIā÷Ž|Ę!ēvmČČۊž÷ąõãĐ¯~žŌTšŲXߌøTKMKŽē2‘Ėg.ĘØĘ'9ČĮĄĪCíUĩ=.á¤7eŪI0˛Ŗ67cŖ=ĮĐúVđ@ $ʔ à zÔŠ5ŠN)œ=åôūž9¤ŒÜęW ™ZR0ĢĐ´ “´Uģī GŠYˈJ_Ė Č¨z3´gŽ8ëÆFiŗĀš…ÔōʎGœZ9 _•Hü‰÷Ījĩo¨jųŲo"xsėF>ß­mwöw2˛žģƞÖ Ž 2׎øõÎ1Ќ}*Ŋˆ;w”Ψ\Ãņįšëõų ŋUŲŊ%Cš‘Æ0=xéîGã\v ˛5ģąĘĒäŽ1ŽŋË?į5ĶN\ÖšŒÕļ1öČĖ%.XžNãū*ÕĶį ‚2ÂāŽx#ƒŨ€ėxĒqđāpže$ã=Ožĩ`Ÿ˛“$+ŧ:€@鎚É˙ëÖ¯] ֆúa Cô˞¸ÎxëÁ=jÅtŠę ą)œŖ>NNT‘Ī=‡n+›†ũ^3Ŧ÷@Éîx$$õãš_ĩ”(æ ᡎÎAĮ¯CˇņŦ\ T´;ģ]BÚ+wT9B7`d‘ŽX`ãŽGO_­,šŦqĘQT?!eRqƒč2p2qéõ5Ä ųDlĘ ĨBņĐ€pFIÆ:zfĩtëwš¸n_#§ī07¯N+7NÚ˛”ÛØë-k‡ØĒrIČÛĮ#ƒÛ˙¯[‰nãq-ũãAŌąÎĄoiiåÅĩ˛ä}3×ŋ‘§r8bDwBŲšãŠ<~ŌšZmčô]M“F0ĀíĀė? ¨eŊļ€_æÆHįüāרø¤ĢnpģG2yÆyî9ã§ĒzŌ;‰į¸á>`ō ęNsŒûūb´TĨkę+ØīWrąãvI˙WôĢR2ŠŧØüÕČ\øēØĐ”ān\…ÆOˇ<)„Ũ}?JÖ8o{R]4*Í-ÅĖûägbîHÉØwøô4Ō ĖĒw\gņĪôŠâO0瞇#î˛äcOĮĶĨH’ŦęČé†Q‚ŸÔWeės„R+æ'PŽŽŊõ­ kĸÖĨJ!¸‡ ԍÉĮÎ{Ö3Åå˛Žũˆlg8ãųūu"LČÂįs‚ĪūĐ>õ.(i]¤V—pŦ–Öq1 #ųŽNÖíŸLĪâ}1Ŗ`ĢËą#Ü1œaTđxúpOžÚåí.^ÎāŨ@D‘l;ö‚Ū§ééZ­¯DTI›š “ŋNŨ:˙JÆQfą‘´nžY#ēŗ— pŖų˙įT4čw3uC"ōØ*lu8#‘ß5ŗŗdĶfR€žF2:g—æj•c¸ģ++6ė:ēŧŒķČĪcĮoĘĒ7JÂvܧį0ēI˜oÚë!upr§Ģwʡã“^‰áKÂtī-_qX°[’3Ûæ^•æž^$RH"FŲģ'‚1–Įg¸âē]8ĶKî,ūYÆI*ˆ˜Œņ…aĮøT֍â8=NĘÎ_>öWqœąį<&˙há‡=ēV‘w*ĮoĖĘOŋOæįōŦ‡žbķ<Į*FíŋyFTaÂņÔÖĖŽ E äŽ=‡ķĮ%Šŧ^‚iĘdžYB€Ŗ…ÁéíīÆÚĪÖĻ3ę–öŠØËČÎry'ô˙ĮMlØ[˜-ļžIrFF0é‡ķĩôŸ<9b?‡ ~ü‡ņ4–íƒØŪ“äŒ*dq´ÆUQŧ¤m=1ÜtĪô€ąrpBƒōā“ĮAūp?‚ÅËîĮaÂ˙œ*”QpŠ'#4ũÜvāf˜Ō*!•Ø*c9n1YšÖŽ4ũ9n’1,dģvOŽhIˇ 7d^–`ËĒ¨į‘Ž?ĪéU#žŽāÉąŦ |„ûüúzUd’yŦŖivũĻáz0â<Œŗcũžƒč9æ›xæÖŪ;+x_nŨ˜y üGëÛ>¤úU$+˜ZļíORĩ€ąhdasË É'ō}j˙ˆĄy§ŌŦ8ũũĀ.ûŊ˙Īĩ&œf¸ņ{4‘íöåJƒŦHüûūU-ԋ/­F-âgŽø čUĨõ^Hކėͤ7đKO1Û$˙ŸZæėeŨâÍB핊G–'$qú~ĩŽÖSŨęĸņœÃBŅ(# KKN˜ŦũDEqØ[E$hŨJŠmįžyÉ<õojˆöîTˆū ×N?‡ ßŨgŽzõ?÷Í\…|§ 2ģFŌ>S“ø˙÷ĀĸÚ/.4l $üÛNsü‹zq…ŠJeö˙I]ŨˆāNžMž‚ˇQŠ6#?`8n¤Üû˙ß"ŽéĐėƒĖaŸ0út‘üķøÕ1JQ9)Œœ°ä ??ZÜĮ– †Į$t/°ÖāOÎ1‘JĖĒ sO 1ü_PÔdۍ[# ԓéĮŽqųÔ­JlÄy Ėû÷ ž î\ŒöũŗõoJ¸BĸŦ`ng Ôô˙ėGüÕxZVv.œcĻũ`ŸoœUĐ š˛Ėz¨é×$ãÄĀkFB'ĩ]Ē ų˛xb?_æąŒO\ôĸ55ācÔ €NqPZ‘ŒLSAާëDŽ‘Ŗ;”UL’ĮŒ{×/ãŊ͊ÆīpĀã÷KÆ~§ã-œ’Ü騜`ü둸ē“QņCĩēŧYBb ĒÄyŒFy^ŧ V÷Œ5]_0Ø[‹H\íÜ[sˇ#Ķ×°­ũ?J66‘Æ^7cËdŽKœgŽ}1[(8+Ës7>m‹.KääŒõ“?‘SHČŨH—ã*[?žĘ˜YʔdĢ~ž]ĮōČ7?ÜüjĻč,Č8R19Œ~›iV9lā’\§îč6ûN?į˙!ŌũŖ]â&įŠØŋünJŌvaƒn-ģūčõęē&áķ8Úzā~œŸÔ{Ô×eĶfG–í”Bà Ī9ÆÅåGëX,i%ķ–9 Š ŽųÁî\UÄŲĢ&Ĩemû°b/ŒlLsüĮč*3ĒĘŅí! ÜßĶôĨhw[ĸ@$8!|âšÖōHOÍ1=‰„œ ¤‘7t× Å 6?ˆ&zã<€{úÔOsp‘ĸ,€?;Áܸô?xĘĻ‚ß*H Œü¤ūÆ ēb.ĨXōFÅā >ŋOåTŦ'r ‹;‚ĶÆXō>vü¸Ë{MН†•ųã’:ã9$T0ŧî›Úãœr~UzŅ‘1uÉūöŸ_Z­ŦA$™YAÉáŠãŸ­%”N5Ø‹éœöÚMNR4š\*c#‚āƒØTv˙„…Ę1ũĶ‘÷)ßF+j^ņe†?ÄHūUŗĮĄŦ_ĩ<ÎJÜßėJĪėŖEģ7ōÛNA­3§8=M)_ˇžŧZ]Ŗa÷Žc¤T‚CúvĻŗb>@#<yÎėdqŒŸĨDøūöGĨ!6ė1€:âŖ ĩŽSéÚĨq‚9鞕88ÆsH ąQīõ¤Á#æ'ņ§ŒļE#0ߌõŊčŗŽ‡SU¯Aû:ā‘ƒØǔz’sš§|ģ­ĀÎiĪÉūŋ­hÃ÷sÛĨgš>xãŊiCĀÛ̐Œ{ ĻŒ™ŋĒÔ~$U6+Ķ%¸üV¤Öˆ:ž”O3˙fZoˆđu ?qã'ų­m˛c/´$’,Iø2\T;<ģP1 Œđ3ëÔu˙>“0yf)Ģŗķ€=úķųÉD¤ ,0~9÷õ ãĻ]€.0Ä ąAĪĶ˙­šĒ°/¯åū'îū_ãR°Ųŋ{0P6úĮ˙Ž?ôŲËÁ9\r?‡=Į§åŸÃÔ@Ëö:|×*˛3'–y9???Ĩm,_gSąISüOūŊp’Į$.ŌÚÍ4gvâCöāzV֍â7–Hė5 ĸfųc›# õ÷÷Ĩ87ĒI-Ķ[Ũ,˛ƒ8?īV”ģŽdŽ8'q÷p “ŽĖr3ëúž•Í+ÜÖ*čĮūׁ‡iÚÅ',zäū};p1Îi]j–ŝd{ŖœüÛFn‡üņŠëĶÂ,Š-ūĻB1Á@6ä8ô˙ ×OčŅ[ļøÃ‘ÅČų~´Ŋ­8•ėäĪ-ūҰ¤$tfįķᚊ]J7rʎA9SëÛō÷Åzø'Ã÷ē‘ĩˇšT“a—÷g*W8ęs͎LÕđ긛Öi cj¯ p9üķôSZ*ÔČtæpw+€Ą„j8ŒcŽ?Ļ*˛ą8Áær+šŸĀ Á+ 1î8Čë÷p;ô˙'ŽsPĶ$Ķå $c īü=šĶĶׯ"ĩHËc7 -ĘH6Fq‘œž3ųŠ´9ÚXsŒžŧg˙Ö:„2+…<€pG<Ž˙NŸ¯ĩN›Z0]˜ą\c8ņ×?SúžôØ" éfcĮÔ~*?ā=éLą°‘ ų”÷įœ{ũ=ęVV9*Ŧ ué‘Į匎OséVn¸ 9Q đH8üâ)6>o›„™‚Č ˆá‡˙_ü:õ¤žŲbĘ6A\c“ŽßĪüš)`ûŠmÁŨۏķĮãTĮšĄÆ3ŒŲŌ€#ąģX#ō%?ē-“×­Xģˇâ@äÆĀœîÜŪ'žĪJ¯:s¸į*ŧ?ĪųéEĨÎĐbsšp¤õ#qÔzĮVę„´Ņ“ļ’C&ĶČö˙zāæ´ŦŽŸq60KŽķ‘ŒzsŒ0ũ+=–挏õeÕŽŒmętš…íĨĸų“Αä€78Oę ąÉĩ@Y<‘œįŽ˜öĘŗo,lõãļh×ĘVĄGpr?@ü ŽŪNmíȅC\1 l˙.§č N–˛(įŧ_}#Y‹(ƒ#ˆŲƒs¸öü2 úЉ0ËĻéK…JĄûmEĐdÕyã’oéļŌųf(AœĒrzäœKcĩ:ū'žņ\8e0[Ä|ÂOvô,‘ô­••‘›ģģ6c• =⍨c"GŨŒsŸë˙|ĶíYcYŽfPNãČĮEü?™5YÅÕėŅ,1$8,Ōp$î0:õųN‚ļDûÍŧüŨ­dô4F‡m:ę—@Ëįclč3Ûŋ&ļ-´Ø-ÜÎrķ1ËK'-øzUĖdŒâĒŪŨ­ŦLÎęšÜyÁ=đ?øRrmčH¯Ē^›;r,ûĮŠãķŦģQæ1w8gfÁ9üßúzr* K‰]Ig Ž¸<ę{ĩ^tq)` X œō8ĀëÎŅjídMîɌ‰ȅ|˛02øĮlgļ:`zšŠI8ÜFáĩ7ôrqÔđy˙xŌä1`Cą<ō9ÁũsúŸJ‰‰čŖ'–„î'’yúį4†ZĩˆÍ>į)åÆpHū&ė?ķÖ´ã;É!˛Tķ‚qTcCn‚5ۏmÄ˙œ}ôĢ‘2Įnƒž§ŽXŸņАŅ;.HãÖąõ"–c ;œ_—>ŧúāãęjäĖЏ2Bģ=2úŸ`+5á‚S`Ň#=@ü{ķųˇĩ8ƒ5Œœ+pŊ_ß˙­ÉüĨ† ōĒ@qÆ0z~€Ā}ę$\d/@sōôü?Ī@žĩĨkŠ2p7N;{~ŸĨ ‰"V=5ZęöÚĘ6–æUÚ9ĪĐwŠŨyãƒõ¯9ņV› ë]ŨMæC#ŒvČãˇĮę3NRvl''tgøŖÅ3ëŗ5•Ŗŧv,Û"ōįą8ę=éY6fW͚"쀯 FG<ûûúqš†0MÆŒ1Úsžäw'ÍÆ:We X¤“ĩÄŋ2ÄV'ī1čzöũúôĮkjœlŽUyJėģĄčŅŲšT`ŸģLÆ>Ŗž+oÍCĘŽáîĪ‘éÆÚpt*~r˙ėÔšVQƒ‘õĪūÍ\r“nėčQ˛ąRHķ"°Œ7͜mΝ.šËæB¤Á†Î1ŒįîUĶ´ €G<õũi™ î3Ô0ëųŅpąZ( šĖh¸įŽįūøÅ5aU, \äp?_–­™HK’Iį{ķT.5{xT’Āņ¸pæięÁŲnRÖí’!lø_šSΜ?ėķX[m[÷‚5(p7ŽOĐWAsmrb™e4YųvÉííÅgIK9r§w%‘}zį“ZÅŲÉkrI‹Ŋ”{baI8ížĢŽūĩQĀ[˛“ÔIŸ¯~jĶŖĮcˆš]ˇa8g?(ūuVIJ€ĖŦŖ?wÉøĩRdFéФ[•GL6>÷\æĸŧ_ôŌŌáAÉm ŽxÅYąōÃĘ cv9P3רÛõ¨n÷5ôŽ|ĩ(åK9ö>ôú‰ėeŎĘ1Ķŋ­hXlō܇æā¨Q÷üë'^;ĩ-;-Āl}2GøVÆīĨdßē‹[ŗ}×+€;ö¤#rũãAÆiėyÆzō ųÆ7t8Ŧ”F͍ĀņߎôŲ@üŨũŠNPåSéFAV,yŊEõ*Ä;H98äsQ ėWîãŽiQļ‚RÎ ę1ߊQ͑ȴ3Ģéc<‰Gãķ-Gâ3˙; H(ÎzpžŸ\~5œéÅëąq¨Ö‡w}i ÄŌåČŋu”ã˙×Úš ræIŪŲgĘÍlfĮЌū}Ŋél5Š4DÁ+Ķ‹ųn Üb9ÆG'Ž}ę׈ė#& Hqƒ¸úô˙950,ĩŸ2Đælîĩ)›œ įŽqQŒUۋcmtĶû‰XöčØč~¸Ŧt&|{’FA㯠ëõÅu6MÕ´Ë– CũīģÁįŋˇ˙Zˇšą”u5rŋfhÕpŸy ņŽ=?ĩģ´ácT˛4lC׏^:cؚeœŦĖ-e\K sŽ>A‘ųęjHã0]Ŧ…đ3¸lūŊēžØ5c_A’];X[C‹‹y<ŗ‘Čx>œtíô­˜äŖB$ųX r??N#ļ{ŠŽsVvˇģēHĻ?69uOOSô­[Y™Ņ| ŊžÃŽ~ŸŽ3ÜŖĨÁ3UĄ’UBąˇoB1ß:ä{ŒfļĨ*WMžaū‰$ką_îŋōä~Ģ‚DŦ ī!íŽ=0ę:¯!5›1%‘@ŧš@RĘ{g?0ü‡ãÜŽ†•ƒīÕu #lâ;d0>\“ĮļhŊđũŊå‹ĀC*LĶA2˜œÛīTôŠdŪ6Ō>ŌsŸúiˇkãĘ:éų‘Ģqš†Úz•ŅĀøĻ-ĖWļŠ)mŦåŌÎŪRA#×ß­yõč‰Ë ŠhÁS! Čéķ(ÆOŽ?™¯qÕ´ËmBŲ’umģH8ä˙#\vĨám&ÎÜũ˛æu 8HņōŽNGō­čÖIY™TĻÛē<ŌÚ\:1 †ų[=ũ'ŸOJą)Ü%,J‡SœôęzzA[7y’it)d¸ļ\0Y“Ë|ûÃtú×<˛9nÁ2eOˇL˙ZëRRÕí5¸I‰ 9ã¯4Ā6nį#4[‚Y@#ītũzU‰Ā?t)Ī?SÛüšĢˆ’Ūâkb<˛ˇ;{qųWK¤ę+,­ķ…Ã}Ų[Īß=ú×- ,0wcøy˙õ˙ž•ŗ§ÂĪ,gË ūb¯ŋ'OķžĩœŌeÅ´ÎģÄ0¯ ´qĻ@~wĐcƒZúž§ũ“¤Û´“ų—΀DķmãīÆõ¤4¸`´Ž%ty(YŨwc˜ ŧzĢŪ,2΍I˛ ˛áã%ŽxsĶú× ’z6d#Gec-ŨÜM%ŨĮü|Í1ŠárOO§ĩkæ]É0…‰ĸ+wÜA?ĪNk•Öõ+ˆu ‹}!÷ Ëtíģkô ƒ ĀÖˇ…ôÉ­ žinÆĨs‰'fŋ„sÛ¯OSNQĶ™‰7˛6ä*ŒōœārĀu÷Ũ‡­qzū—öģļ2r $Ÿūž‚ģØĄycÄņĻāzŒuˇ^+Y•"‚XŖeiļā:ķÔ˞*iĘŌĐsWZž=u”€ˇāmÆëĶüũ hZ[ģ"„R~čäŽ{)✝Lōxč [’ĐŨjF-ŦĘ̟•A$ũ=8ĪÖŽ-Xüã?>ŅĶ€Ü{qÛ¨æģœôÔæQędĮeÎÕ-Ôm$šÛ¯?ī¨ī •Aff-‘ĐܟÔnkzT؎Î3…ū>I?Â{|‹‘ė­sŌF$ŧ*„¨Ü|šį gëôëÍ8ģ‰č_dF}­ŧîãžG ÉôÁũk.PŠp@ʓ÷KČ>§éÖĩå‡Ë@ëĮÂŨ9ĮæOZĄsąr=^˜s‘ŽĮڜX4gŨŗ,‡ˆÜnúœ}:õĨŗĪžĨws ;AäüΝjYmäœb7rU~ãúStÄfÔ!K_’šČ#דÅ]ô#Š+6ËŖ´(d8Álƒƒę99ā`zįŠŌœîĶĄ‰¤´B‡äŒ°8č3ž§CQCŖ¸1ÚëpzzķųõãđĢBF{;suÛķ`>0W$ÁÁ?äÔŊ‘kr”Î"ä ]ŕyāv'žåäûš7ģ9#Æ2AĮŽ1ŒuÛúf™>ĀĖŠ¤íã‚äö=;SL7˜ãpp ÉėIī•=Ē’SĸŅ.L‹$`áIp1X#!p3†Ž÷Mŧ‚2Ȥ  dî9MÜy?*t¯?ĐDæiŸ÷a@Q¸.F2H-Đm^ r@Ž–Æäˆön/#ĒÆ ‡mۙT„äˆÜ×-hŨ›SfĻŗ¨< ąŨI“ŋNŽx1īU|"OØNĶēS3n>¤gú˜˙JÍ{ą|ŅĖŲ;ķ•\đ§.Ā ōvČÃwĩXĐ­ĩM6ya‰ā’ØšTg'‚HŽz!&ŗq´,UÛw:æšō'Dˆ•Îz r}°WōŠbŲ4įP“2\[…äíéģŦJ¤–>~æ¸s)—Ŗ€螸ÉõūԈEmKxŌ(ߐÖMlc[éŗŽ¯5üĨSĖ]qš”wĮaØw­ˇ†7‘öí÷\‘Æũ?:°_jäüĒ=:ū¸ĪæiąÄfÄE~Oãöíũ—ūúĄĘû‚E›Uʉ˜îÜ>RGQëø˙,UŦsÔPĨFĀqQĪ ‚"îxvü*FÉ<’0 cĮ'đŽu¯. åÉĀ]åIĮ1Æ~éõĨžyu9ūaˆĖiˇƒč}ûˇa÷jU f…A¨Sģƒč{zqūŅĢJÄŪėh‰ĸ@Ā•|åŽÜãšoNO<ō ‚F`Ē r1ĮŒgŠô˙žŠ0ģUHÎöÎNyá{įį°ŊL°eryb:~}ęMDā×䤌n9íĮn ?VŠá…C‰ *Ŗ×=OâsødĶüœČÍ‚¯ŠüN@öæČb­ÔHčNŸ†zAaņ ‘Ā#æ'$åūp>ĩaP8p9Võ=ĪķĸÚ-€´™ÜøéëŸķüĒ­ÍД…îqˇųę?§įĐRÄ7Nf˜),‹ÉĀ8zãĶ‚}đ=h8Íģ¸nŋCīëīŸJPBƒŗ°¨ąŽÉ$kįŽā# …‰UlcÜ“čsĐÖ´cy_ą%hØËĶa’{ ’˙t üŨščq͜đzŪ‡e-Žhļæå  n“ʉc׀ĮÚ˛´­ėí›s#I &íĨGN2:ū•­ššc—ÜdõîKqúVĩf¤Č„ZÔI5hלHÄôÚx#ūûâĒ˞âKYlW'^­JŅŦ1‡uT$`¨Sī¤"N DW†zg¯zËBĩcŸP‘Ņŧˆ `ŗ1$~ūĩœÖŗ8/Ŋ™Øōë!ä˙NĩvK“<(ą¤hK(~ ãÛw“~aä† N99#ԚĐ(KlđFģŨ”?÷°Ûģô<“õæ¨ų‹4Ļ8ãÜTüĘĒÜņëÛųÖëÁជ čA;s•íĶQ喕ļĒEĮ$ąRAķ§Í šu3$ĩw@ˀTÉ!Ü1Χ­WŠĐÎėbãŠwúî'?–k[ėĐĻâH‹gå$ŸlwũjTxm„ÄŠ:…öŖœ9ošR ÄQąķ ą 1Ų#§ŊNļļļą˜âUQ´’ķõõ§ŦŅ.UeVĮĖpsĮšĮ4×XTČy^N៭+ÜlŽ,ãžB´[ņ+)ū™ĻI`ža•Šžë}}3ZM!W6žsœĮ#kd,ÎȊ~ę“úÕ)2Z(Ib˛1ÄDœũâ¸{t4­§ÁĐP19~šúãpˍÄEÕę͎öõ¨ŗĖÃË@‰ž¤āÂØŦ˙*("Ũ ]ŖŸ_N+2İņ,܇īūåiÉjîņ´“— c8ÅfÚøŠ.Hę9>ƒÖĒ;1=ĐũcįÖtäåÁéūĐ­Ī,˙x~UŠnmrČķ.ßũ ˙­[;ĻūķR’Ņ nΙˇnÎsކ›ˇå?1^ĶÎŨį‚?:aGĖŧįŠįgIVL´rsMhüÚú@ĪzđAÚ0>•ržŸ/LT–DßĻj4!A<ãĶ÷ę2OP+|ƒéØP"6!GNzTrTāúJF$`ŌĄ”ēŒ’I=ēRc@ ÉĮNjĩø>Zœf§,6n9Īj‡Paä)=ERΎúūëR߅ÁéYŊfú֜8Ųô­$I‹Ģ˙ČH’ĘĄņ …5K6Tvū!ūgS%ŧEĨî’0ÂĒx‚@5Knx+Á˙Vąû&RûC €’ĖÄļyīū>ũĮ퍤œĒ°BsČ=?,Ÿ_ĶØUiWÍp×xĀķÛĶúPŽæ3ĩŗßhŽ Æ?û_­ic;Œ›~öīį'qį>ũũ{Žiƒĸķ´dãåoSœ€,SŨüȏMŋw=‡^‡ä?­G“ b€’7nې3ßßũīΌZ!˛dŨÜŠķ0¯ĄíÆ:Œu==ę˓‚ŦÄcæ+Į O˙UH#ų›A į!AúÁĪ×üJŠũé ŊÍģ“œ÷Čluīøķ@ú . ļeęKåĢ(›—‚@#Ōē='UąÔceļĀ ÷Ž?!ūĨ`ŦPæKy†VdōÎ0`xãˇ'ĄéøcĒ^i7†T8toŊÔyįÛ.*~ĄĖât2ÅËŠšÃ‡žŋĶĮéSiZŖ\é §I’x”ųûČG#<ôãđÅ>;č¯`‚GšĶåš<äŽ9äuĮŋ˙\SŦôPg†÷ÍhãCæ_Žq‘Û9'˙ÕRÚęROĄÉAō€JĩōBņŸ\zžŧôŠ5´æî0Ž€e‘['o_Īüú⤥ ũĀ;RÉō“•$cĐcļĻ-YÜ*˛+F$xīÛŽ8úq[KS5Ąģ°jLŌBëö„L‰ í ûį“Տüōˇā‘š']“!$ĄGąéĐcŠëŪ˛#„,æâ'¸ā}xĪ˙Z´yXŽV3įŖärøę>…ã\ŠÁĨąĸcīĸĖlî°ųųÎsĶõ'ôüÖÎYâÛ2 @8 3Ÿ]ĀOL`đjÁd–ÔyaŠēŖ8č0?]ßįĨ[|Ën‹™ q†w8Úr3œö8õĨĐŽēĪ–+¨FŖ=>˜ĪN¤`ôû§‚*ë\Gö¸Ĩ-ž8˜p08äzcztô'6Âe“tLŖi\€î@úü ŧ8ę*ÍĀ3Į%ŗąß$D$ˆwã€}}qy“Z•ŠgQŸOŋFŽE{ieļīĮMČ{žœwė+­BĸČē°1ž2Ŗąäq^q=Åĩ枆)$†s!ÚrvŖõÃwööėnxc_Í&ĸ­kx8ˆI‘¸€OjsƒĩĐŖ-luđ܆DŪŋ3’¤c¸õĒj–ä˛D˛Ëq9<ÆÚ¯ˇ‚sƒōƒÅ:Ũü˜^1¸˛8ŋsČĪåŠĨ•(ēĩš_.mcUē9<úœg5’I=M59ƒ ßꆧŠOÚeFÛ [™ž˛8QôĪĩRŗđÂ]jsÛKēîebdšI<¸ãnā.2Äzûū5ĢŽxŠIŽN™ĨŠäËpš\äôF{ã?LûčhšLÖΓ+46h7üĖĨnšlu§į]ōQģĐÅ$Ū‡qᛋ Ų-^HY‘ގĖĀsĐwö˙ëÔ –9‘Į^1‘īú~UŌéˆ5_?šŒĘģ˜í= _ĄZî’ÂĘß>Uš+(á‚ķųÕĘŗ“i)j*´Ņ5 ēÚÚ\ä(;vį=H'ķôĐØøb[R˛]ʆHˆ-:’8'ô˙$öō8X‚9Æ=yíXšžŖē€ÎGËĐO͌c= Í֔´Eû(ĆM˙g¸ÚÜūîBFGÔįŋõĒ–Ĩ˛Ę7’†2¤Ļ8?‰īČüĢ“ŧŋšžŊ=ÅWŸ˜đĮ<ū]jí„ĐZ\Å%älōîÚXį Ķ§^GĶëZ{%Höčj]ęBĘÖÔXŲȲÛ \FœŽČ1œúâē_ ÛŪiē`2Ą’ævķĨf,ĮÔúūŊrdwúėsĪŨB™9Į'ß8õ?_AÜGŽI`.3ĀĪ< ÎĸvĩŠ‹Wš˛&•Á2FǏČ$ô÷Ž[XēŨ …ķҊ€ĀulgđOŽ1×_{ŠĪ"ģ0`ĖģUųĮž‡ŽHĀŽsPģžy&ėšŨŽzrĀĪųéQN•)!ļ6ë4ŗGōIšū파õČ ätôôéÍt­gF ˜Š9Ü­ÁÉĮÎ3Īãč+"äŅ,ŽY<æËÁČS“žŪŪĒí­Ä˛™pĐĮ#-É#‘ÔôãŽj厤Įą­"ĮŒĒs…ÚIįqĮ\÷úŒäōqX–ÖĘ&ûHLdā*œāž€ž=xŽģPž9‹/—$`•Øām9äõ8?Ôö-Ō;RISûļ goÄö˙9­!;+(Ũ˜W7@Lĸ@ÛĪĪĩGN˜đ… ņ–į$đ§Ô{Ÿ~Ũ†j§5íɚBØ%°Xcpõúg?•lKlĻÛjĸ•ÁۓŒāˇPzŸCZčˆÔŒ2ŽÃ ō8n˜üķúŌčö¤øĮČ(˛1bŲ<“éÜûT—C÷ÎŖōØ,ėqŽŨOëéZš<;ÉîfCX$Ād•$ôÎyöÆzSnŅbJėÉÔQZÕdu[¯ã¯áŒã§ŪcŒâĸ´ ÖL,ŽLûāŸ÷Ŋ;gĩjŨA$ēkB–˛mô‘ôbäôŦ[˙a~sĩH˙k{¯nŸAN: kP#vŨ§q+´úŒer1õN*ˇĖI˙ž„ãN<õ­NÄļâĖ:–ÜNĪSÉęF Im?ßā÷Ü0Ī=x_ģõæŽö'skLDŠÚ1#‡’Ã'hëķmäåQÆ8ûÕrmåqtĪĖßŧ2Âņ‚If'†v8˙g5NŠ#Ë€Ēą>\íUĀĘļÁĀÂÉęNj é¤YY ˛žÃ¸yjAŪ9ärΚ<œŠĮvk˛—kö¯0ŪFRĘ3Ôíāq‘šp=EuúDŠ#į!•#œ|Ä`(éĶ+“ö+‡:2ĢI‰bØËpAÉ=Íu~”˜‡–2 . Čū“׿%āUWēzŒ_(*Įk`†9霂=įđĨÜ×xĪ?wˇ=ŋôø5@ŗĢP7ãŽ0?1ÆJWíÜø,:ãšį'ōĪũô+Œéšg*ĀˁÎsøįųˇåWmaXĄûĄYOAØžųĒ–‘™dPĀ÷˜ú~$~J=jüŸ(Ī _CPßA¤2îãėđäļ čz˙Ÿūĩ`ĘäōåI @Į~Āã×',}*ÍÕĪÚeÂđ™ĮĖp1×§SëĮ°īUíÕ!F6˜…Ü8Ā~\“éWdKw$UÛŗ,Áņŧžy<ãŽãŽũ– vŲ>Ķ–d$H:ą'ÔôˇíSᐰUņȑF6{õúcŋŨäfĒ!ivŠŒã§=ŗéĐÎjŌËÖą™i%Ëõš=ũņĮEĢ`D Œ…Lô~@įęÕ+UĘĨ™yãü?H÷¯[Ģ·@v‰Ī~_ĨCcD9]ģw|ŋîķĮā}EZHŖĩWyėw`O㚘…‰ ĒŽĻŗ'ģķܖâ5áAlg×˙Ž{RÜz"k‹ĸè Ų;}ØwüĒĢ‹9W`sūČĮ<ö>žƒR¨1ƒ$ƒį8tĮįĶéÛŠæšvîŲ’;õĮNūĀgü’)“p¸)œ¨˙g:~˜ü=kRÕ<¨€ûfĢZ[î>aáTđOš˜ˇÔšŋŋˇ?Ĩ&úæ8R0EE’}Žø–ÛFamĶ’ëėO Íp×–ģĢČZâú{d ŸŗÛūëž1Ī'ëÉöĢ…'%}‘2šG_âm~8ĨŖG5ôß"Æ[„ĪRHé\îŸažČJ7žN|ÅRqžĀg {÷īíVÎŪ;RĪnŌ0S†lĖ~Ŋ˙OĨ^K”iãˆ:’Xr}Oå[(¨Ģ#6îîËÁŠ1Ŗ¯û#?Š˙ëšŊčđŠßn Č*Hŋ'úVUĩÁ|7Ųâ)ž\°ÂôõĢũØčp+Ic_Ū)Ķ€ė¤ūūCÄĖWUļ#d[¸ú‘Zō6Ø/(œß_ãYž(8Ö!ČĪîFüûÚô1–ĖĖ7Ž6ƒôīôĮŋAøÔ€†SЁÆsŊ9înãĩ@€ǍO+ū<ûu9íÅJėnN8šũyĮĐ ķõ­´2C¸vY #˛Øg¨$ņßo_­(T Ė;qÁ$u#ŋûŪÜĶ"fgmѰÉõĮž9ĮԎƤ{Ėaŋ'vāŧõī€}yäg×2ę|äÂąāāôčĩBF¨;¤y‡Ūô˙x˜č=Ĩ%­ûZĖ^2ĮÍt=N1ųwúŌwč=:•ėšęÂėũ”l~U×ŋáĶúÕËũNúę —"O'vÆŋ ëÔLž•Ŧ畤ƒÍ2]× Ŋq×ųđ[– kÔbʐ› į’?<ĶéIË[´RŽ–LãŌvHVˆŒŠ-Ķļ6×Šũzuh eUÜÛÃ\cNũ=Ŋį¸úKڃ4` rįõëô5b]2ÉĸE™Pŗ)8˛x÷=ē} _:#‘™p]HņAœŽ×PwsŧzņūzŊitfˆ0iųĀĮvÚųÍgŽ—åįĄ2cŒsôĪ?ÔT–¯%”­ąXFã%HĀSÔĪûŋN;œågąKMËļš´•­†Õeà ,â8÷?—ĩũVŒfN #}띸n'ëėEI$Kō´xsPNAøįü‘O‚ÎkÉöÆĻWCĘņĩ€ÎAö$~ŧķƒQ}.h‘Ō$ ! >PvĘČâáOׯPkWÅ:{&Ŗ§D–˛Â›œĸUq“‘ŽE6mÉ´ÚŌ5Ėã‰@‘V(°Ib sîyÅrēĮНŪxėíõD—Ę FöÉģvx!¸ėG4E95Ę)5îCd´ežæw{ˆâ]Go!NĸLwc{Õë] Q¤—FŋK§n†XČ9[=:qXú Š)5é Ž(dU+d$1<‚>īOq]•Ũü~ĖXÃwiv7,ˆÆ&o¨ûšįļ:ô­'tí"ŽŽÎĸ–ãȖtĘcČŖ‰,>‡ķ¨ĩyĨ&xhōŽpåēnĀÎ=ģ×'ĸx“KûkY=ĩ͕´ĮĖ $áÄn1‚a×­z B/ŗåX1 ~đwqÁâšgĒ7‹æG ÚuüēčV;$jHTۏB? üh×5Éæ˜YÛˡļÉ;F ą?(ôÄĖ-c–wō74HŧŗՈ99ūžsŠęĢ>ûH2ļë€BÍoN<öfs|ēô]PÚßŊņ —sˇįëĶ“]‡ü%Ab%Øä^qížÆŧĖLĐą ËéžH˙§éCOy8gYA9 Û=ŋ­m:*NėĘ5Guw¯É1d.ąį?*räîä{dW?y$ĶģI+ēĢ ž,NrI=š#Ķ“X tčy@šlžŖ8˙ëæ­¤’yŧį Ü“Į‡_ķÅ5MGa9ÜģŸ"E Ė`đéßđĮķ¨ĩ ‘”.ū_ûƒ¯˙ũ|ōj¨ŊxžVų‰8R8Ī'ˇÔ ފōɖÎqŒõäįūĄVŖÜ›‡‡§Ķoĸ–Ū÷ŗ¸Äs+ˇÛ=1õ­ĢË-gL!š'šļrÍmīܨüŊz×-áŲ žWˇšPrģ' NzôõīĮ=ųĢ7> Žū-ͨ „–]‘§9į¯?ĘĒCŦęööQÍq%žąĨMĮžiėxĀ>Ä~5VīQ‚Âäˆŋ´´Āv°pģĄäũėŒƒĶŽ1ĮZÎŌŲ§SJ?„e ¨‘ˇ§îútį¯^˙¨bœŪg‘”jwžĖņ’F}đưuoxĢL€ND—1Äxœ;ūĢ xây˜ŊĖfR0Bąã?L~ĩq…W­ÄåĨŽēãI´ĐÛdV’ęW{3I#÷ÉûØāāgųb…Éē{,Ë!Žōãåo,ų{Ž0íĀÉĀã7f˜lȜíÜpĮo”ņøņU/ŧK<–Ļ%ÛÎĐsķ1î9˙HíëWsęK”z5iSėōA–É(­œå‹œÉ⥚’PffPzÛ9#ôĢÖ(ãKb aåä°ãŽĮŽ{ÖÜŧ¨Î÷dRŖ#!‡ĘŲ ū§đjŅ͐F ˜žNS=9N PÚÎßZΉ ­˛!šdŠn¸ÛĪŽp+UÁ J“0Ũ´ž@1ƒũŲĀįzÖ,<ŸēF’S;ķ(•ŗ‚HčŖ Îîy8”VSH¯1fMĘĀÉģi'|Ø,F[ާēԚƒųY€ĄH-ą”ŒâcÛÉPUHέ”à }áŽqīrN8n(K@oRvgĮ–ĖĨ› ⍠’yÎîwŒôûĩŋáųÜŨĸ+cÍįxbĮ'’>Wぃ\ëžd'įņpA,vqíü8Ķ)Z6r%o>`ÚJīäúõØį *dއŠč ųˇ*­øl^qų ûd*Är7Dyįũ:üw˙÷ŦÛk6Ō 7åą÷Øį=O'žūûĢ6ōą…ŸËe åWpÎŽO°Īû¯ë\-ĻoZĘĒ…ˆ’Hôöü8…gjZ™ ǟ”| ƒÁ<Œũ:ūŊĢ:īQû0û:ČÂ^”$įî¯×œžŧ‘īIiûÂōČëÆ pÃĮp8˙t`n¤ĄÕ”å} ļû™.ˆq€ä˙õō3íK,ņDˆ~EĪŨ ę8öãØ1¨Ų˜Fo8Āį‘Û¯¯QŸ÷Īj§q´ĮžIŌ4?w)œŒrqč=6ŽæšÔD„ɨ\ĸ‰•bNG°īĮbr:tČF*ÂÜ:Aj‚WR6ņ׏AŒņØ/­S 4åílá!enˆrĀsËĮ''ÜõãĶiúT6YB´…ŗ÷>§üöœšBIąm´ôŽ0ō3<œ’Ûēū];ôîIĢłŒãš¤ )=6ãĻ+'RÔ.›lvîf”pX1œgüūk=[/bFæk™ŧ”R‘ƒĪÍČ˙ũĪēŌNeáTöüú};u95:uūåy|ĩŽ<6âØģœû3Đvę÷ˆtŊ&'ķ'[ëļác„üŖŸ_đÉũI´›Ņ{nk¤rJ~á,}ņķūyāS›UŌ4æ+y0ūw7 gĐZæn5-[WKöPÄņŗ#Ķ˙×éU"ĶmĄ|LJf?3‘ŧįß'éíVŠŽŦNWŲDū;ŅâÛ勊yā$GŸĨaŪøÃWŧf–Īa}Ķsˇ¸öĮĩĮåŒib§aų?Š\ĀLĻFX•ƒc÷€Ž?/įÆĒ0ŠčK“}HVŪŲ\J×J͟9ēõ%ąÉî3ôĄBįrƒäŠ#zuu ÕĢË(vž÷9#žäsøæ˜˛¸ūô„‚ŒõĪģV„ˇÛ$ę’ŊˆAĮČ÷xÛÛūė¸mRrā1v‚+"7‘CLöŒŒĮūZIšÆsųzŲ˛ŗÂ7cf˙VÅ ‚zuĀíëJCE€ĪŊœ+ ä~ Āö š ō9n¤– :õõ==ūĩDè­Æ×ļÛ&Gī"dŸAŽO_Cõ¨ÅÔŅ–UIIÆ`ŠãÔ÷úÖvžÃŊˇ4ŪWWØÍÖ'ā3vÎcŸÂŖģ–(ŧ>JĒ’YÕzcå$ úâŗÜŨ?ČĐÆ ?. HõÚŊš¤ˇą™Ë(Pd Ļ"­ŒsŒŸCøSåļá~ğo/‰7Ä[ĒČí’ä>ÔÉ%Iö„ƒ–i#?RqW_Hf&@G˜p ŦY˜ä:Ģ.s gBĐCÆI_lŒãéŌ„â 2 Շ(Îų ũ˙^­Æ‰4f8ĸ ¸į2øÁô¨ÖōÎĘYƒĩr÷üŠĶĘ#I NTŖ)Ã~gųSˇ`ML­ #eXÉ ķ+ Üđ+P%īä$+…ųä€;ã$įŋįZSJĸ0æŪA‚p§?‰)ŸÂŠĖĄĻqƒšÎāXsƒųzû~ Žš’ŲL.įų;˜eqœœŽŖšöāķŪ›:Ā.7nĮníץãëSŠĮĘF ;gč:c§J†wĖgæĘôČ=8ĮåœÃĸ$ŠlظũásԒ§ü;ūŸ…n+ÆÖņŦ¯#c*û‡,ŋõĪjį R&%6…ęN8õÆ;t#ĨtÖv˛ĩš8ۂKā¨ÁüOĶŪĒvG@‹pĀŋÎ0ęqõ˙õTŸ) Ģ †÷Æ?ĨÚáQžüģ‡Ũũ2E0ĖŪYFŒ†ûņ’1í’F ČąŌ/Č ‹å\€úũ*ž†›ĩËŧ ‡Āãæ”é‰BIš“ƒ¸¨?ĮåK  ]fp9R˛čKŠe‹Ē&šŒÂUl@ūŸĀņ­ŊĢYáŧYÎ6ŒgꆷvûÎŗŸCHõ6ČR Ī'ÖĄTŨœœ}*wlŊ{įĩBIāđ9āŠĀč#ČPy<œcĨD~e äsôЈ$dŒwÎi…8É Hd,rF}ę&ÁʎŊķSąÆ@Χš„žqÆā9Í #۔Nzæ—h “Č<ԝ”2¸ÎHí@Ęí‘×Û"ŠßäĸĪqäcķĒw¤mU>†š`˙Ën™­Hžk1OīĘÖŦ@ž:Õ˛LKŗ˙fœH˙–oüŽ+3Äüë7\Bãžæ­+Ö?đ•iŊ°§ų=gx”ŠÆ3˙,ôū&­áņ/Cž{3QFũĄ¸Î~™äžĀTā˜ŅŽI¯ģũ=99=>•ČAqÔ¯QĮĶÚĻRX)dđ0Hö˙#¸É­Ų‘ ÜB6pN™ã¯ ëú!šrØŠÔŽF;¤;aR1SŋFz€r;ņ‘øwũGlķÚBzđŧŽzLNčgžblH3…!wm8Īr!Š˜IŊƒgŒį99oNš=¨¨öy‚M˛íÁÜā{đ3ô÷ũ)Ëåäyl¤n ĀÆ8Á(Ē,E#L¸ûį‚KyÆ8ÎsĶôįŲËrą[~3‘¸žyęqë˙×ëUÖ9Õvđ¸8˙X==?ÉúŌ‹S"…,Ŗī(“‘žøõīE %m¨Ŗ<ˇ˜c ÆĢũšícž ,E.UÏāBWxīįŊ*BMĻAĢxĒí7û/O[ĉ§ēÆONœúũ+ŸĩĩŨĪpą,vöĐŧ€đs´GH÷5ŌŤŲĀąK;-ÃFģ°pF3Ķņ'Ž{T&bđÕŦ1-Ûû¸ųTtāpqę+X´ŊØõ!ĻõeO)íŧj k›á įĸãqüIŽŖUŧ[ČUŽUXęÉÄ}cÛĪüŸĘ˛<‘jz=æ‡pūSO‹‹f#î˛ôaœg‘ÛĐÖ¤ÚMÛĪqmtĸĩÂŖ ‰ãČūŊūĩiIĻ8ŨĢŖ7ġ´šß§Ģ¨ū,ĮŽxāãŪŠË¤ëąëO›u,~M˛H꒷nH9ã9Īē G¨ąKįŲö=Žņû¨*TũQųՍKVû]}ž"úÔjķ0\ˆä(#מ‡ņ⒜—ģ¸ÜSÔâĻžšÖDųFŠ&xá,Ō(ã8ėyúUmJŪØ@ŸŲÖwQŲ7K1ų˜ā÷{ū?—mā[ssqsy"įj„\ u$ãôäœõЈî-¤…ŖP HĨ1ÁãķĸUš’§Ė¯sÁ¤†8˛YŽÄļL÷į˙Ŧ}ÅUōĖlŽģŖeįv9ūē÷Ąĸé‚o1lmćŒŦ`S[ÃēLČ6ØĀ„.Ū}?úÕ_[]…õwÜđņ,Wq*HŖÎîØûßāy¤$ˇÃ(bĢ—*Nu¯FÕžÚ\ŋ›§J-[ø”Š(Ũ1ôŦĪøBu;|–XîÂō6đŪįüúVŠŧŅ™ēRG.Ņ$0`Ŋ9ü{ vū¨ĸųĄYÉĮ\Lg°ãúķ[ˇé ’&ŗ.ãũd!Ų]û¤súÖBĀ.ĻļÜl nûÃ#Ž}8­T“D4͆°“ËĐgrdļ>Bfķ í|+xnã{YßpĮŨ+É]ØĪŽ0}ūĩËxjôËŖÆ|Äo™AĀ#éÜäšę=ëĩŅ­ ļēCá úúœãŌšk=,Í鎨́ĨjĩܒĸŧG: Üō@ë€1\ŪŖ¨Ûę:žÍ2ÅcEV*Hėųģöč>ž•ŨXYũŸÄ7ĘĮ^Ædũ pßúŦËoXøfūid™gkŌa‰ÁTÆį=y8ŨŊj#5}~E8ļy„wú”RēBâ2‡ČxäÔāt•Ŋ͜H˙ifb†Ãžãü˙-iŗ$§Tƒq…‚@#?˜ũ>ĩrYí"Īđœįëļ6–¨æwZ3OÃŪ-šĐŽK: ­eâxOŨqĶ8õ÷ŽŠ,Ŧī ūĐŌo<›y Šž{‚JuôĮŊyĘÄŪ^ũ§ß?įüâ´4bûAē2Û0ž7Ģ{SRõŽãŒ­¤ļ=VCWĶ-ĸô›kģ\͇ŨĪû`ū˛oŧŖëŅ›&qm>~t)´ĮzŠ˙8Ēö(Ņĩ"<™dŅoŸeoŨ“Û#Ą€Ģķkf…¯Š,ĸ’ —jj|ŠR\r?—ĩsZqzhÍīĩÕ}ákũ>fŽP / /Ĩe:I;Ô¨?įŸÎģ[čnŗįé÷_oļe$|ؐz‚zį§=øŦŽā¸ÛÄ{Nr ōŖéé˙Öë]P›kS E-ŒÕaą•yrOëjĐRSDO•šcĪBx=}OĻ8֞öų ägÆ×ũ‡§aÖϚ#Ĩ´{‡ÜsƒÁäö÷ũ:Õ6˜ĩDšrfmĪ$‘üŖ'÷ŽF9ų‡n*ü¨ÂČKä€ãzíđ =ĀeųGTF/& ÄŦlOēO¨ĮąaĀ<ІisĖ™ūwyvČägœuúÔîÆ…f_=XØQ“×=đsƒÜōi¨DP˛>ퟘ‚O+Č vųÆO¨â¤dd1ą,ŽrŠßđ,nw>”Ö|ŖnŌ¤ģ ĀۏŊÉl@īÎWۘĖ…Ų›yÜ šˆ*0Xā‘Ÿīs‘RDĨ™vÆ6ci í=OĻėdđ>_JĒB)\(,nČ\q’{œääūTø‚ĒÆ?1ÚyL~ī׊=>_J“;_7K¸ųG,@ÂđN[é¸zVÃMxʄ$ Fp}1ÔôĮüŋŊXžš‘´šU3‡}ŲČ9nqŸ¨ĮzĶHRáw’Ŧ§ģ}ĐF}ø=Ö¸§ņ;Øj[-˃p#lÅ܏›<āžā䓏ö97Ø$ˇËc Œ}āŽĐq’@ūģ°2Tc"­…RŒÎŒœ˛āv$‘č8ČõÚŊĒ;̏íķd%šĀ. ä÷cčĩ7oBŦŒ™u{‹vuŊŌĨhnc`ę@ČÁĮ p8ū÷­XŅâūŲ‘dK…‘ŗ—éÉŨŠ´û uI%teōs÷OeõāzöˇŨŸA†IV[v{K¤ûˇ0ā1˙{ŗb)JIiÔoSJÖÖ+HȊ0 đ@?ũ~žõ.Uŗ0U’ĮĮęž Ô|1k¨ÜZjĪƊc”ŽÄŽGōŽGRņ&§âk¯ŗHM•¯U€gsSę8<öĨ “ŋ@•D´;M[ĮÚnžūUĸŊä܏Ũũ܏~˙‡į\äž-ņŖ(1ŸąĮ’p¨ôäū9¨Eggl‚0Ģ‘ĖŽÁŽIãĻōĢfáÂų(Ō7ŽUUNyīÁį$ÖęŽČΚMęĚ9īVōūíđrWvâžāœū„zjiö)+°FDbA}Ĩ›öŗĮŊ:IL%šprG†>   }yüj(‘Ñq–i‡į>Ųãķ"š¸Ž]W€2¤` €pXŠĮ_Ë۞ôųîbųŧĀĘėŊųb˛ļFĶIˆĻ…CtF.G`HúģTÆ2‘ȉ6â>dÎėúvČüͨm˛äWĸo-X‚9dņÜũ긝å Ā gvŌë“Įōü*'~ũ¨#H#Ÿđ9ëS mįt\acē‚ųВ+m*ꭕųC€š> ä˙QĮJ†Kˆ…]#nŠ0¸>û€Í^_ŨJ$†V Œ)9oÄsĪjkķČ>rØĖN9üCwĄ0ąN9`XäÆņ“ž8ųĪäõŠ-õ Ę4k,‡n@ ëŸâô=Ēi`1ã1ĀĒ,L¯'ņĄQŠíFÜåą`āØ~bēēËF6•zhŽ~b‹€pĮüĄĻ’ōn9—x^ŊĪ#ķKr^Į?4,Ģg~zŽzõģ÷ã°ŽČū^Öęr 29Î>žĮˇ­t•ŧ_ei$hüü 0%XúäúW9hRÖđ=Ätc# Ã#Ķ>Ų­ îŒä­Ą=…’Čī´ˆšÛŽ`OŌēTÆÔė ā}ŸåT­¤ˇ•ÚMŧyaČ+Įl’qų ŸÎ¨U.3–•ō äj$ÛKQŗJŽeŒŗt%ŗĮáˇü* Œg  ķ?ʐĸíË#<HüI?ŌŖŲåŽÁ”œķ’úū5*ŒM7ËûĀqŒđØĖĨĄž5ËļĪ?oö–¤Ų. 9 0>ƒ‘Pčŋļ.ˇäČ?ņåĢû,—ē,ŗÅZ=ˆHĪø×EķzŠæã˙‘­‰ŨŲëĶ÷c˙­[Ü˙ĪFüĢ9ô*=MöΞ}é¯ū¯ëëŪžsœ€0yÁĶX€Î1ÔÖI /O×Ú[ ƒŽŠˆPĀî>žÕ3ŅŗžjF5œãiįĨAŒōO?Z™ÕKĢdœīTdnãî¨ô40dy8ü)ŽI$w?ÃéR ŲĮO^ôÂ2CgĮNԍÎx䎙÷Ē—Ëûĩ=}jár]ģqØ{ÕkÜAāņÎ 1ŖœāV¤M…ÎpōŦŗ“qëšÔˆüŧŌ­’d^aŧW`¸äFIüšŗ|Nö„C8ũØÉöËV•ĮüÖŖy]sė՛âlޤ‡¯î1Œã9c[Ķø—ĄĪ=ŸŠŒû`s‘ØuëŸë“Oųrėž}O^žŸäj?0Šá°2pížßŸcëKŋ œÎ랜 vį°Žƒä+rÆãŽ:qž;éíMS“–BNÜũ9'ˇųč *“’AËŧĮ‚sNqĪséô¤‰Ō31äˇāqß˙Ô Éæ’XŒ¨$ãüöĀũ:ۈ:š`r“LڑŨIET;ûú’?­2UUP¨ƒ;BũŨØũ:ŅŖ¨˛Ė`$ƒ¸ ÎŊj&Ÿ. ųTõRČĪ>žõ‹ Gå?cœäņœŒ¨úũ)ČY@8“‚0ÜäôĮ9ũ?•qTKš2ۉ]2I9Į1ī“Đöõ4Ī3įP;JŠlŸ@9îãąįŒŽiÃËfÁ ĩGuÆOAÉSƒ“ÁéČéŠn¢Š\`–ĀŨëčG^˜ ]LlsšļŒĖs×w͑íÔgÜĶ&cƒ8‰ĀāŽœcqÆO*ĨH­•Ę:īäī8Ææę2§ž¤wôϰÎȜ÷! (õäĪąũ(ę a][åGŽDQÔļ@éĀlt>„÷úĶMÅÚČXŨÜ"‚2čÄÃĶpqųįŊ?ĖĀ+ĩÔ9,.͜āäcLôúŌE yƒiAŽF7ؓ€@ü˙:ačZ‡RÔ-$ŲĶČŧŖ¤ėq€=ÆsĶšč­5îíYLqĘÍÆė0Č?đ!ũ}jĨŸ…Ĩ1‡ŖÜŒäģzĐ˙\ī˙féö%ĶËRQYˇˇ$í-íéĪá\õ'ąŦc$eŨĘ%ĩ—ÉŠV‘„™}ģPŒį9>Ā Žj¯Œ­ÍūĩŖÚBĀ —bžË–ëô?•t7ˇgÜё)ĪČÁ˙w˙‹sîúøPō&ûy7gērû˙ĨLĮ%Ĩ‚ÎÎKx ۜ šŅnŪW´=› îõŽŪũŖÕŧ4ˇņ9GL\#ĒW¯éšãSmÅ ĢŦdéúÄępr ßŗ~‡ŪēÍ#m­Ôú BčĪzÆŲÁ÷ô>āæĸĨô‘QęŒ[‹+ģøbÕô•ËÜ.Ŗß˙ūēĶūÍûHÖÕžv“deąÕ‘ãØšŗáhôÉāe`c˜ä’ ëŸÆĨ’ãû/Vēķ×t73)F'ÅČũ3RäîŌKvUđ}‘ŗĶnc.3ö†cŽĮŌĩŽ­ÃHeĶžū_Pĩ §ë2ŦĨŒ7$•ĪbŠ•j^*ΏnXîuābĸnōšqÚÂæ7Š7“ČĻĨĀ3´QC:U=9Ū87bÁeeĪsĮĮ5 ŨĮ•4ä0Š3_˜ŒTZîÃoBÆĻō؏ĖX(ĀĮSČ̍Ļ5TûÞ•KRmŅ[ŽIráĮnęÅŨáĶėŧÖßTâcĀíĐ/Ôå5>ĩâ9eŽo)a‰s/<͇Ŋr­¨ŨčW oymo—ehYPCŠĮˇn3ī^ĨĨZ<6í$îZævķ&>į@: WĐ­5ĢF†î1¸q€r‡ąļTĨĒ3”/ĒÜņã*ŲęŪldPØ'åpr>Ÿ™ā× éWKö]A<—Ü ĮžŪŊ;ūxôķFĘM:˛JĄÚÚSŨz‚;Įõæļŧ;ĒK˙drf†Ōŧœ’N3×{cÕŅVŅē1„š^§Ĩ¤ėĶZJāWe8€T˙õŊĢ?Ä6ŌLe”„GŽ3ß.pOÔGŊV7öRapĖŦ$;ĪãĮ§ëÖ¸mWÅ$–vI.¤ļŽDHܞS\ôéļô6œŌZ}ÂYiz,j3Į ĘŧDܒšSœq…į„0Įļ8%DŦ •RArp=ŗ˙ęéSÛ¤˛Ü}ĻiiîäąčIä÷÷¨‘‡ˆ$âį§‘Ā8âēé׊Ī)sÁh™•ãÂ.HÆ{õÎ0@=}AĀĒ3Ļ.r¸'†Ķ¯_ÄWg>•ļ–. '$‚đ˙ã8ĀĮ5ÉĪK‡ÉÃįČãͧĐ~žšdI4T1ås܌āv˙?áZ:nˇ>Ÿ‘0­˙,›'oû§ˇō ÛģQĶ#<×ô'Ąíô¨dˇql)Î1ģų÷ûvĩZKF-V§CkU7šK3.å;Q@=pHÆx9äw5Būę ˛"¤‡%€ûĒGa͎ōõ›gvú|¤LÃĄ'ƒ×ōĢwë”ÆU!sĪ'ōĪ|`G-™Wē ’O–8՘§Ž:ū}†?úÂŽŨ¨ŠĒTōŽá´ĮÎ=@Éô5Bß_Äq‚H#ŒsĪAõü+VęŨ‘[r°Ú3å’9į<Œ}Ī4Û°ˇ*‹‚™ķį<ã–îÎ>b8ĮSL°A#n~fbFTįžŊ°ÃũîyĶÃ<€32¸mė¤r <į<žŧŸnõaQB´`ŒˑÉÛÔHā`đ:{ҰȿÖ\Č>r2s‚NÜî$nĪ8$ä˙{ŠiŊs…ĮĘ2WˇŨÁ¯Ęō:ķRģíX$R¤ü¯ûŊ¸ .§§Ŋ!,ĻUۇËģ-ę œã8ųxÉŊ ĐØË!„Fč›H<˛íBNTôėIõ=zTļāK8ÛĐdįߎŨ9õĢ1}čTĀBØžī$ú}Ķ“Æ:0ÍUxßz’7d œ>„p~iĄ3°đôĶI„I!“-ĘØLã9'éƒôē°„FFJû:į§Š?NÜZæük™f(ų70^ęĮđÆ}‰Ž™Œ;¤ĘķÆâíĪļOåŸûi\5_ŊĄŅ ØS#<&FiD*ybšåäššîķŲvO¸$ž9=Į=2qNF7pŗ•įxc‚Ųŋ­2uōåōā˜ļĐ*98Š"Ž,Š-|ОŪYe#>āŠ8öÁĐí¸%ĐaÜĒ#–EH„„ėc‚8#%ô˙g5 lg“ėĸDD<ę0OĶ5bTĄ–4ā•ōry÷Ú<oĨI aŸ,e'–aį8'ķüsŽŲ¤;ĘÛJŦ„ļAbįø gzhLíÎHT`˛nĢëփ~cmŠ#3í< ũíÜtîj3<¸˜6īŪ8ųÉ sķ‘ęvअ“ ™ŠBą¤`n'w?øîGįŠW1DjDĨ“*6ŗüžģA8üAĻF7™åbĘÖ.ÜöÁ$Ÿ¯Ļ …l(u‰NÖËg'Ī_ŠČōoŠ"w3)d1ÂĘŲÎ;āāAųPĘ#‰<øĘ‚øRÛ°qūΝÔ|¨T¸?*¸ŪFūsĐp3ų6ĐbVXĻķŅ\ēL|ŧúuíÆúÕԄH">vũĘ,č˜<{~€Õ¤Ôb’=ĄB+dÚÛxô$Œ˙ž*ŧĒ|äiHWˆš\~ņ?Js¨ur‰—Ûŋ$-ĪrG?LR˛c[Ўvęä+*ˇaŋaü9?­KÄęŽīŸLÆß7øūuIĘQ´.ų‰m¤ūDsėqS]m€O.Nr’0$ŽØ˙능Ģô57ŗüŪXōņņļ=ķĪ>†–Q¯Ģ,ŒŊ` læą ‹ ē*Џûõ>Ū´ÕÔĨ˛@Ë%YÉÚS¯ŋøRä}u:Ģk92/ÎČ\ä}98ôæ˛.uČáē’/°@ÁIĘĮƒĪļ1ĶĨWÅWžPŪ"8éØgĻ1ūqY3Ī–IÚ52ŗäâV=Oöĸ4ŨũášĢhh^krŪ3ŗCj8 ŽyäõéëY,<Âėa„‚K“ĀÆSSy‘mŨåõ_ē%|“íJ’DĨTĻāGyķéZE[dKz|’ޤ*<¤œ{šŊcu5ŠUmĻ&9ō÷qߞŊj=Ņ>$0°lũŅ+c•!e,T›GĘ ˇäxĢßrmfkŲęŨM‰‰VÛōėŲõį9ŠÅÆōŦę9 oËų˙õĢ:ŪQĄEØq™sœŒžĸŖmM…Ėk!RŽ~n‡ëQËØwļæŗė/Â8:†'ôįųÔZUēÕ¤íŽŦ?ÂĢ>ĄlUö÷ũ×ÅēUŋ Ą{ëÉ=I'wģõŠ5hąŪōoĪ‹%õķ˙Đmú~•ƒh›ŧWr:ūƒ]'“˙MįYÔ{ ĸĀž3ôÍAĀm'מĩ)Įlf˜vĸ‚Hį5ÎΔC"mLū‡ÖÆC.ÜrāsR†ŨžĀƚW 0zPR¯ˇ€ôéëQ6Kāį#¯Ļ*{ŨōI#W;‹ĮĻ(cä “ë“Ls’UāõĨ F@Ā‘÷Ŋ˛)9881HXAČäŒÕ{Ėy*1ŒŠŗÛ¨ãō¨/Ž =n´ âķp{āÖŦcåŦ¨qöĸ}MlÄkFIƒ1˙ŠžŲs˙, ˙ĐLJ‰@:¤D`~č3ūŅíô­+ŋ“Æ~đœûęŠëëˇV‹'­Î9Į9oņ­áēô0žĪÔįÛPāŨvcŽŖ¯nÔÆ3–‚@Oã1ëہÅlYĘ<íluÉŦËÉQŸ†nH^Ãß5ēw1jȍAŊģ†@#'đ˙?kE@tųONŊAŦÔĮ‘ˇ9č0OéŠÕt26B`gŒ¨'¯L€(“•HîCŗ+ˇ%Fî€ū~ĩTS¸äžÄŽär1ĶžŋŦ’…{Ųrã#wĻ­#ĀH’éœ$ķÔtÎpzZHo]ˆ3äü…Īaˇö0:qčĮĨKŊ¤Œgs+üŲ$øN Ī÷ŸJrũĸPÉWô,A?¯~œúV…ž…st$ƒf8bûN=ÉãžsëëMÉ-ē{čc3*ķąáļŽũ˃ŽN{ōF9idQü{FOĖŖŋsž~•ÕÁĸi™_>ėē˙BŌdžŧļŦžĄ•ōĸ•7õŲąoéYûTRƒ8šГ0O8“ō{~qŽëüédÆÖ .Ûdl’p:“ŽFqžTôīÍn d?d›åV˙W4Ÿ.}íųÔMĸÜ$›gŒEĐ+— ?ģÜcŽsŽž˜Ģį‹+ą—m]Č-ĄD>fc˙Įp8˙ ×k§éYAæäË!!˛üã![ŒöÎ_ZI´KI#‘ÔaJ1B€r –âčZ•o(Õ2Tž2¸ú|Ņ•˙Ö5&Û˛4ŒmĢ-Ipˆr2ė œ}îé"ūFĢy9>æÁ!F8Î[‘ôŪī‘Q[ŖĘIRÎĢû°vāüĮ`˙Į|Ī|â­EËp 8 „“ķcßîĮ÷gkŲļoxk ÚYWĖŨ•A¯Ķi÷!Ē}FŅl ­ūĪoÄlÍæ´NķĒđū8Ī=3õŦ› SYÕ, å@…×Ė$“ÕÎ˞”+ŋ@ÛÔŧ÷Vv–¯e¨ÁæXÎā8ī œA?‡^ãŊ[ņ\o§ëzD™}<Ž×Qņãŋ¨˙ToĄũÕÄrF$\´ĶæŸįü*l÷E]lÉ.%7:ŊĄØIRz1ųUct5o-įėļ‘īu#†|ŒŸ­3S‰­uüŦŽĸd„gīáßŊsÚmé>4ŧĶ#<ŨLC>9 ÷?OOZ¸Fęëą2•Jų@ķÉ+ŸĨE-ÚĄŗĒđqšąøõ÷ĢûsĪoūŊr^*ŊxlnŖbH;{˙ŸķČÆ+™ØŌNĘįâĸ/u nQ†â į’§Žŋįōã#MoôĢyB„U*~^BœãžxúūŧfíŧŠsŦGiæ(+PH6y<ū]N”ä°{MD|Žu-Î0™Ī;˙Nũ=ĸå8÷w; lËtŒœÄÃŪƒã×ųĶu(ä†_43˛0Ŧ‹ØņØäw<úRŒÍ7xc‚äúö~;ã,+KKšmÖTǃĩ ‰Ũ[éōųš[kTnĩ9=zûA˛ģ ebíq´Iē)Œpb>‚¨øwK:†ŠΠ/Ī1EÉéŒ `đI÷ūĩč×z…~KʑocķHŽTįđ=~´ÍÃVēFŖ=×Ú<á ŲaČÉÉĪŠČ^Ų(ĩÔ^Íķ]˜zōēÛHĮ;˛Iįœ ÔmüyäÅpfÖF™ŲCšų‰?)sĮ .¤ë:‡‡ÍĀy'd( Gƒ×˙­ŠÅ›G†ØnŽPœIänôėO˙[ģ§U%aNŨÎČX§ØālČhøã‚;žžœtY-ܧņaW Üd}ū?QÔv.ąĨŪĶũÜķŽNÜõ=ynšüĘ)ÎRāŗÆTGŧāmqĶ$¯n™Ã=7ęcäbËüčLyL‚w/<ã9į=úzƒPÃrbV–…ŽHŨО¤cąVįMŪ`Ī!‰å‡Lz{žžūÕMÎÉXnPw7%úäãžß•hļ!ĸEÆcĻCĮ˙_ŋ˙Z§:ŖÂH™Ø’0ŧr;vã°ö¤Š&D. íQ“œˇø~”ÂđŪ ˜”)Æ˙ū+Š?áKpØz\Û\0PIu'(~„~˜Î:Õī)ZŲŲ_q;IXō3Éäįødã [9#ÆäÆzųöŠíî^‰hūélnÎFG˙އŸsj`yä“Ė“Ë`>fJļAęz|ŲäŒį§'ψmXK¨Ą˜íbx!†qŒn=†}~jša‘ļŨ„|§{mãĻsĮSĪSO’ĸ…L„mĄŠŽWŸU=?>”TD`[(’§æA‘Ķ ÉĮ>¸ëŽyŠlmúíRԕåNå “Īį׌gŖž’2Ŗ!9Éë…äûûūĶÃĻ‹h¯q,q*õŨ€X÷ÔķĶüĸu-ĸܨÂåũ:Äi–Éc (S¸đzį>ŲÎ}ņØT—Ú•­œ--ÃDˆ…#æbxéԟŧ~ģĮJįīŧaß+M‰XŽ ŗôd‘õė=ÍrķÉ5ėqqqæIŗø‰Æ08č+ŌmŪFŽI+"MFęmjņįšPˆ¯ˆā`[héÎzœįQyLŽĒ.đz,|úg§Ō§KBŗ˛æšNŋÛđĨh{m1ÜAĀįĒú}kĸéhŒŌęA!™w3•äˆÎG˛ņĐūU$aWkĖyáGūî*dŠJæF#ŒŒc†öëS@Žœ¸~öīųæƓcIŦ%ĖRÎĢ–”ãp>Ē9­íĨMĻVä’F= 8ÆÎ;VEô*gžAŒîqŒdį99ãۘĐå b‘‰ c#¸6ĐŖu¨9[ca¯Ž|֑I?1ŲÔ?Ø÷4 ˅t!Č Œ”9\ãė÷ĪįY_g Į āe†zåOˇĩH–’tø@ÎÜŗũ=ŊéYÔŊq,ĶĮ˛åŒˆrI‘3ëĮ)īPC=̈́{"‘d‹pÄō7`r Æ9ũę$tJdŠ5ážîH? ö÷§‘2<¨Ø…í!ę7u˙gõ§ä\pÕ呞[æ1Á_›#ā~‚ˆžYŲcPĮ–+ã—­W’ĶÍ#t1Ÿģæ ž¤c§ĩ@ žÎF’$†h†wæËÆ{zûŅh…Ų¨/¯÷˜÷ȍĐcxÆ=8˙8ŠK–PŒ¤ãsĪqXĻUyLÅ*0,%íJ‘Iįâ-§ Waę29öŖ•“4ËĘŗ ļāT0 úįoKu9*­q!lƒË7lŽNßÖ˛’Ū@XP‘ޞ9Č žp}ģU„ŠeSš ásÎæČĀ=ĪŊ' Üŧ—’ļځQÍ×Ļ21Î=ę4ē–7-ė c ˛‘ü†3U^'‰Ņw„%sąųųŠķƒíQá‰,ņE‘€F×đŸ*Í?ĩ0ÚRáМ“ûæįš{^ą‰#ķ°1žŋ'Ōą‹JbÜö2ysƒëūÕOļ`9lÂa”œsŒuĨʇv_–õųin08séëjŽ/Ũ|ŖgpX1ŠŦF ˇ%˜gt|ŽHõö¨ZŅ”ŸÜۀėã'î†Å5‰Éܟí΍˜Žerā'˜õ§>Ŗ)”˛^J#gŸÃŪĒMfäå g€Į.=ũéÚE"L"䐟@=č´A\¸“ėƒ!ÉČūöIÁéN†āēŧrlSĩŠŽY‹c<ķŌĢ[FĶLĢ6͏mųXƒė3ŸÆļÚŲ,šHá]î˜É>Ōt'ŽŨ*ed4Žf}­”Ģn‡ Î1 į?_jV¸ßŨqą=ãߒj×ŲŅUÃ|ĢdĄb~r==ņUķiŒGĘgũFO1ƒÖž@ndËŠÛģkņĪ×۟ Û<\BÅ@#;ũŋÆŽDm’Ge+Į•  |ßũjaŽŨ˜ČĮ7(?ÁĮķĄúˉĻ~BĪĪ Íū{ŌEræ@Ģ,ŧę>BP+ĸōĪĄüëšŗy?á*šb8ØŲt^wûCōŽz‹SHlk!räę1‚ārŨ>čĒgĀ$ĨE’wd㯁ĐGæ]Ų @ĻdáãŪĨeÜ*6ôš€.0šä pqškäā8éęjš ’qÍLîBîā7ŊEœHúœP1ŠģˇĒįļM<•Á䜯4 ;G''†$ #‚Iâ3㞜ŸJ̍dz˛ÄdđöL*Āį1ŖˇQöœŽ9=Ģi+"ū—×Ŋnĸ†AŠš1Xį5iŪ›1úĩTņ)#WŗŲÁōÛ×ŪŽjĒ_ÄēǞ‘ôÉÍRņ2†Ö-ĮúŗœŒúÖđŪ>†ÚE9[y ÂJägoûՍyōČHĪŪ=2§÷Gįë[ŦåX€ÃŒ Ũ{.kāą†üÍü,¨­éîc2d`ĘíÄm8,č@­`ÎÄĄp¤žƒúĖØÂĄŽŠaú?ZБÕíą%AÚ ?J$ĩŊ ~qy’"ōUzđQĪUË+uÅ´DɑąÂĮBŖœįōéUR"6ŠSœ€žģ°9į×ņüûŊ.Ú-#N}á EųÆæ aN}ąūEEIō­Ũ™ÆĘŪ8mâķ.ĻûĒsč=ĪåÖĒΗH$ē?heaģˆŖ>ƒÕšč?ŪˇmáE“í7|Ī/øô>€W9Žx˜Ã/ŲŦ¤Œ,yũâŽŲĮ˙¯YÆōv4•’Õ–“¨6îå4û<ā OÍ'ŅãÁ$ûšĪŊm3M•aĩŪܯųG~˜ÚZĮM~íÃĮ˛Ą9y[™Ž›ŋ„{ bî2dĖŖa@Ƨ\ĪSéÚļ7ÔĮ™t7­õ[ۖ ö+qōødúėLúV­žųü™ĨųēAČP‰Á?Nū™ė+›ŌâQp\,…†6ž@äsŽū˙á]]ŧF(ÄaU؁ą¸ā sÛåÉ˙Ž‚ĸi'cH6É<ЁUŨ gåö§ždP;’+9É$`n1¤2ŽN];ģˇ9č@Šįs1HŅÚIƒnŨ°’vŲėOÛÖ§ĩc€Š,)`§hIg˜nˆŦ֊åoš5Ŧr5Ŧ'æČX[ļGâsõ'ĨoÛÛųw.æđ6éĶ­A§ŲŒFP‚0Ĩ‰=v˛ō;tj Ãn ÷Æ:ōžĩŒäkĄ›Ši˛]ÚĮ1åŗ6ŌģOŨm Ûv dØčéúÁ_2#h–ŪX•¸-+ļN8ę;të]’ÄĒ˙3'?+c=ĮõĒ÷Q"nsÍ3Ž ėßJ…QĨd7õ9›ĩh™‹p|ŘTúō2¯^ˆV,Sɧją\ŧß1 JŠāˇN ĪĄ Æ0EtwË1ŧCī3ģûĀČ'û§Ķƒ\åčRĘ<ØÃą(ōr}ONrH>ŋ'¨įĸčc=ÚßFucŦDĀ(ÄrüJ{įGųöįŧ[ MiĒÛøƒL—ėĖėĢ+Ƙ*N0Äwĸ´t=A-ĸ6×?=šœ“gŒĻ@÷ãÖēĮŽÚöĶc"ˏēG˛MÂE4¤Ž J_íŗØŽ‹n‚č|Ņ6{g9Ÿ\{ éõ­!um6HTĒļÜÆār¤ĐtĒ2ÚĻ’ōYŨ[›Ŋ*^HeÜcö÷ë+ ôō•uöĢ HL…_îƒéüŠģhĐ-4g=ĨŨ5ƍy§Î„O܈x(Ç>•ĻØõ2(1ŖfcÃsØúg?ŽXņEˇØ&:ô $d˛­ÄXåx<ž{ūFŗäÜN<YÛûŋv>2ú€?.ĀVŠ]_š ÛFt~7™c´Ķ.ã-”¸v%q“üǧ´•77úĖĘY¤Ų ˛:ŸÆŗ|Wt˛ø{MˆĖ¤ųŒhôcÛŽ?.ÕŪhļ˙dŅ,ĸ;‹y œœōFOëPß-;ĩÉžPŽ"ÚYÛĄî}kˆņē8+“;ĪĖŽ8ëÖģ9Ķ~Ŗ98Īnx§vôíé\oGV)=O|~ŸŠâĻ–“ETøO*É雪#į8ØŨĪö—ü21ž{9ã?§^šä‡ÛÉį#ßĶØÕÍ:ãėģą…ŧĘČëˇ<ãƒČĮ\ôg؜qv= ÅãŊĩYØî#īįqŸ™įëøš–DHË´‘áOęC霅įëŸaU|8%].ŅíyqeÆã•ö`r}ފÚŲîmđʨAžö>Įœûįé\2vléWhÍtŊŽ6šË0Õ*ŒŖžPԖž%ŽĪĖ1ÚËæFqåģyëķč}ųéH5 2w‚IĸÃs„8īÎė~[VZ”w*ė۔ņŸ*By9벓ķW)kĨĘÃÄ3ŪL#‹pgPU–>„ú˙‡øÉĢH!…RMÎ[į,HbG_ĀņéÔp mEg ;ŒQ„.w gĘø‡Sh`š]ÅQ™šįąŒcŋā€ßãW yōI17Ėrp={~"ĨnWQËŠ2JāƒƒŌĨyģ(ˇ‡hü¤ú9ũęĘÁ'–˜+¸˜|ĄĪ’[îW;{`•Į÷څ$ u#–tˆĘ#„+ ũČĪĖūūÕ]ޤÃĒZ€Ųn¤“͝QW%‡Ė›f`|ĪN9—ü*MŦžhŨ0Ã68įÃ•4Öâ×c%ÛÍΟjŋ3ä€OrŋįņĒë đ!k)$*LS(eĀđ{wâˇô`ZI%AcøŖ¨ƒˆđÆbr‡å' ĩ @âP‚î=ĨYœJ eJŅXéRKpL_'˜äü či÷–fîCå”ą‰Āås&8ü˙ZĒo§ļ‰ĸÔ" ģJŦÉ# ^F8ûŋZ~€ŧÉZîHÜNü䏞}Į­OmsûĸMŖīųO˒z?=ÅH$Y6˜ŧdđU@ë>”¨v;$fi)=Bˉî"Ŧã¸äGū*W¸a [Ė{áũ7÷ÅŒÄĀ.Üyqé:F‚;ĖCÉČ/œūđúP?4D.™BæŲ‡Î§Šé–”ÉnWĘQĩwl#÷gR¤Å[•č:;ĶX™—ČŒ.02Ųėž”Y\Wv!ŸQL‘ą1ķŽzŽGøUƒ>øC‹ģyŒãåŲH į/ŪāV5HÕO™ķpö@Ļí°ĩŊËVŠ+,АTmUÎNOˇˇëZ3M>Efuq'8įGZδ‘väŧĨŋv1€?¯5ŖpDēd§¸ qŅũzt¨–åc]Đ"đXHŲÉųĪû^õZËY#0AĀœ~åO kä€ 8ŋŪ˙zĢØGū.A!ÉÆßîũj¯Ŗ&×eé"ˆ­ãČg(s&:ũ)Ļ8üį_ŗF6’>ė`}äö§3Ž ?yŗ÷=dį­3NāĖČwåĮMëéJáč(ˆ$ÆŪWŽږâ0\:ũöÆ ŒÃ͝J@á•Á-ģƒŊēæ‹ļ—l€NOŪ?Ŋß!˛SÄČĐō$¯?ŧ<ôŦ¸÷Ū›0H#רĢōš^K6Sžd_īįˇÖ¨on ˇŌĒ"~c–g.@( nˇá†mČ úÖl2Øqė8ôރÃzÜēœp˜?÷Õ*Ÿ jŅjÄîņ=É'øX~ĩĐgëų×9§Žuæ$ä0“˙aũ+¤ōOˇũķ\õ75†ÆëĀõ#8S Œ žøīūqRŋ ˆôįųTRvõ˙>õÎ΁ Ęąįžø¨“Œw5.H|`ĀÖ Ëۇnĸ€#o˜F|Ķ~eÜJ~´æÁlņJIĒnCgŋni1Œ9 đԁC! Ę2qךb•V䌑’éM2äa°ôĻ1ķ6HëÅWžųPpAÉĢhG\ôéT5B6†$ļŅڗR‘lŸé™ë[ą°l Ö%ŠŨ>;õ­¨˛1ƒZŠ €ßâû 1x˙…Pņ _í‹AÁ>Y'8˙k׊ҜoņĨą'îÆô?û5PņΈā?ņîzgũ¯JŪ¯Cž[?R¸ŲœŽqģš#†Ũí\íėKį—Úš ČĮøœ˙õķé]Ŗ÷Ŧ€rßëÎ7ī7ˇĨ`ę ĒÎ7Ž00ßč8⡧š”öԕ˙AĮæ ũEh°,2 ÎAĀe#ô÷ŦČU0š w?‡¯Ķ×ĩixã;?w zįÅ9n%ągGˆ%âLQÕb9Œ ÄįįųWB—įV°+aæKŽ!īøc˙ĮzĨáȈ3IŨF7ŒûqÛĒ˙ãžôí–đü— ÃŨ\6ō;(ë˙ ŸÎ°ž­šGdU×/â’WsąŖ°úw÷8ÁIēFؐ[ƒ×8Ínë7âKšž}Ë(IÎqū?JȊ&ķY™6’BtÎsøs]4ŖË ģ˛Õ­ēŠ @Va€åÆOSœžõrЁžB,@<ã{‘ô ŽŧĶ!e Ō•ËGAČ'¯>ŨZ–ES7 ũėsŸSĮ¸xĮ41ĨØŅŅ6„ą#~Ķ)$āätüˆ?^+váâū_Qŗ+ē§ x‚šô k#G‘„1qå0d*GaģŽÄđ§îŽõrņɅČ\(É0ŖŽ0[ęw„ž#Xė…`*ģC°9pNCā§^{ėbG`+ĄĶ-e #É9[æö؟üq?+æî‘™UXīa¸‚ĀœžO\‡u˃]–ž€ÅS$cå^s€šÁ÷UoÆŗ¨ėTvÜõ Wīc#×w\ũE\†%ëŸLœã?‡áQÂ7 €2@ūGų9ŠâR‘åØîĀ‘\ėÜs2pIĪ ÔmŊa˜íÎŅÎGû§†ūu3˛ėÚHäg&˛õ ØŪ<3åC„!G|~j}Ŋ$ĩĐLÅģw’2ûK3åTĻH}ŖvŪG@3•<ķÁŦšcŽWp|Ą Ú¸ÜG‘Éų9ī€zŠŗ=Ā(d.Ž€ÅŽ„ÁąĐq÷ĮëKi QĘŦ#PŲĄ‰ËH˙ž˛qÜīWBĐËvM ögmŠ0xĪ?7×>€đH=1RGuye‹kƒnČįptų$āŅI>?Ũ­­V8_˜”ÚĨXÃžĮ§į9 ãĩQģgĩ“|’1•ēãĄ< ‚z˙ŊéĪ÷…$î6Š“øęâŌãČÕ´­đ˛Že‡•9õS߃Į¨§™íîā}O×+"đĶÚH~čîJõĪŋדHЋˆ_!FųJ˛ü¸?/pz÷Į÷yËŧđmȘ^č›íîS•T;wgߞÛN?Ú#ĩRPôü‰÷ŊMģ_YøƒOžÎę?Ū4Ee‰đ$ŽO<8ôĮZ⤴ŧŅŽ~ÆĘX;…Ôņ(äc?ĖuĒW:ŦŸlíOÔ#ûŌĸāîø‡|˙ŸJÚmcO×t˙ą]J ¸B9Ŗ*°ã+õôôú ÕAÃm™üÛî. Ģá˙´Ã6 ˜ŸÄ wįüņíéz%Ú]čÖ˛‰f%į߸‹+).š)g1‹‚žTĖuĮ_¯ŋˇÖēÚÍeg=”§" ŠĄõR/ķũ+ļqô4‚ŗ7ĸŒũĄåĀ ĮüũkĪŧi?˜āxČË ā m˙™Ēą"Ō;yœÄļs€sü$uÜ=Fx­Ī G¸˜ĖØ}¤`#tčNá‡#úŠíœŊÖÎxĨs¨Ģā6Ö\}Œũ}đy­í6Đĸƒ…Qū‘ĮķũXUH<Ĩ•7ɀ›‰UlįųÎŪIÉÆEjEuEVRŋ6wd.y=;{Ÿn+Ī“:—rö˙ĘĖ0)ÚN;kžI¸Ō¯ĖžZ˛}āĪŽ˙ŪgÎyęMwŒ™b¨ŋx|Į<Đ P ˇ%6•Å3?OŧŽęÁŒŋpŽ­ø¤×3âŋ K¨ k4*ۉ ŧ†cŽqÆž>•×lU˜¸~z˜ņøgĒI9į4Ŗ7t7ՙâx_VļS‹l66‡yUHúsĪõĢ ėîDĄeŒįv `N8¯Ą>Įk)a-ŧDõųgëUÛBŌÁ?čQŸ˜7¯>Ū•Ķ]ˇF.…ö<gD\ ÆåÎHãÔô˙ë}*5<„dʂĐ:vüy?­{­Īƒ´+˜Č}6%ŨÉdųHüĢÕ~M§Ü›Û ×1 §ī§ā>ö+hba-•-O:Ōá˛`K§Ąúđ9Š×Ü3ē§#æëƒĮcéøSõ ym¯É*ĘÜ9įŋøæ˜Ņ™Š‚ÛCapN2G˓žŊÉā{tŽ‹Ļcbt_-—°T¯¸+ÁõûŊ9úw¨.ƒų0v€ vÛ}?ÄßHūe¤r8%ĪÔv?Â?As4‰ˇž1œíPzŽ}qÔÉV+ŽžË‡q´uũOķœuĢ‘ŲŦc(ÂSŅ•N{ž8ČūžŨę#æ.Q‡D^=xôéúUûuŧŨĄS´™vā\uéClĨiāxmƒ°&fr[×'°=ũ?üÚˇŽXėۙ2ƒ†'$*Žĸ H@’i#ĸ>ÔDáO—œķÔō>˜ö"üöo–ŒļǃģYˇtZVeɒHî g™Q_ËŸųhįũ)ŽĖöĖ´cĪ1§øSÔÜĄQwŋÜūƒŠˆļmX$8ܘᛴcÜ}zT—rY $l•Pí“åļO2ņÅ*Ą[ˆÔ˛ˆˇķĢyy9<Ô˞O•"oÜ>ûųíßŋzM‹ķ09œ}=ķې;ngÛ _Ũm䓏CīWj a9AË8ũÛ{ûUuæâ#ŧÜˇP=øU xi§–06tũÛuR{XQ[™nęŌˇÍˇsČq´œ}ßCëL¸ÛövÉS͍ū6횲‡qŨŽûYĪŨQ×8¨Žš`„˛š=7lĮÛĐUõąŖ•T<"vÚ9Úr§ßÜÕ¤™VBæPÁ‰Îb§= BD‘ĖK ~dŽv=ŊędK¨ã˜8œ¨f<yįô5,{Ņãx‘ƒDB° gŦ~´¨SÉ*Ȥė8 ā˙Ģ?ãPŲąŠčG –$iA$¸ÛéžŖÚŽFUāųP9(wGĪîÔzgŊL´**äW’IJžå]ŋ>$ĪSũiûãa#*0Îāp}ß֒t‘üÙ˛Cž’úb‰QÉ?ë†ē㏚OJVĐ/Š ],SŽf(ųR3ĐüŅ˙…VyVTeĖnJõÎqō7ŋĩ_ZGsŗ`¯ž9‹ÛüjBīDuōō¨8ũÛû{Õ]™Eŧšh€Č ’gø×ąúÔŅĢB|ÄО2f‰$XŪDÛß'”+š=1N‰6¸ī'ŊĄ'П&›‡ļš[Y@_ē8$.îGÔTqŨ‹vŲ~€$,Ęß)88Ī ų…kŖą‰š=ęYI M˙LÛąüiLČ’G$‰šIz'_^”)_qĩmQJuŒÆåV=„1 2ĀũÁÔqSɰÎHr–H˙X}~´ĮĶn, iĄŽC§¤‚7VäĄ,9Sßîôí]¯Ŗ<&›=Ĩŗ4ېÜ:1'oŠúöéŠNKD$ēœēÛd1˜†ČT?íõŠøÔ†™WæÁ'Ũúū•NŅĩ¤B;…t¸F]Ë < ŽzĖTmžn9ė=ãį­6î X¨ÎVŨž`Äc‹ŸŧhPëŽ$Ú<Î1ŽĘ)_cÛų‰)œ€?žhÆmŧĪ)đÛČŊ)ú  Û1,s°"Rpŧô"´ŽE™sš,įOFÎqׯzĪĶÛũ,2Č9@d,ŪYÜ3ž6ŽŨúšRŨęUFQK;Ôķöiŧk žÉp<˛~÷ũ3Sũß\ÔPJÍhš/Ü€÷oZU äÂs&D=xcáUa˛áöĘį†|‘Ö_öj44…ŧĶËs‡=ĘûRų{ÚL¤„ų÷~ŋ9:n9QÆ˙pôÍMŦ nˆķÔ`åÔŽâuŸ-ČÎ=ū˙˛Ķ‰MŽ āíøËŗ&Xr>ĩ{É ė€`•`6‚ ¤U(ŅÄjw 8ÜLÕĢīpd”2š#yåöŅøO䴗đ:úgük 2@(f<ŋNJŪđļĶc+)™?*Šŋ Pø„Ō\Éâ+€ËūŠdUĮŸ?û5uúættÆĩpáˆÉ—8īķ-t~hõũ+›šCcĸ+ō1 Āūt…pOQ‘R‚@ëL‘—î#ĩsÜŦGŨ ŽÕk1äžyИöđ:‘ø˙ZŒŒĒō3Š +āŽJãqÅ SÁ_@*fęw1!yāņP°%°28æČJāqøöĻŧAļã–ŨúĶ‚ ļ ôĨ$=°1LA…1ŽO^žĩWPP`#šéV†ėc<VŋĪ–WduŠ{•ĐífëŠÚDįØsYĒDĎķ­˜ųMŊČëVÄsÃįņÁ9á"<ĀVŗüF|ßÂÎČéžģĢBØÅiwžĐŽqėĩ›Ģ8oąÜUD'8ę>ŖÖˇ‡ÄŊymķé‡Vų€,G—øĸ\Õđg}Íŧü āîÁįŋ#˙×ÅoŗFĀ• Į†ĘĮOö[ÔÖîl…aGCÛūĶÛņ­éŪæR°čžP>Y6šáŋúãųUá#+b‰NwcÛˇŊQ„)uRHŒOæ ūĩi#Lz*§°ÆrE6$u FßÃˇA†˜˛dõ öcWäŗZMĨžŪ"l˙'ķcE‘Šk{8@°.Ø=Øãúšą­€ö7JŦwÂ¯Ôąā~UÉ)7#Ą%ĘyUŅu†â2T–‘C9É$˙CųŌ¨V „*0]ws€y˙ëgéV54úŦŖvuļ8~™­U„”DĮ?)-qžųöŽôôšÆ÷-ĸ€Ēģ‚rm#ŋ9ûÃéÛđ§Í0{`ڛÎHĪ_L?¯ æ‘wa o”ŋ@Ũx?{ŋôž”’ô@žčū`Iéב€;uė)u(ßŌU¤ˇtœ6Á9ā¤gõÅ,åĨĢ!Rä‚PI<úüę§ņĪ\ŠĢĻĘ%Y°ÜKГœž§¯''č>ĸí㊸T.Ãį`r3ģ•cúŸëŽįņ-=Ę4ūY坙̈́ íšœgžFkąĶüŖną‡bš?6>îsīō×Ŗę”vųvŋđBîä>ņ÷ÉĪZėŦ/#ŽęŖ qŖŽsĮŪ'ëŠÂĒ5ĻŅšíBÎyÆî3éR,e—$āôé֛Šáļ°ã˛˙œuÍXÆ,š'Đ×9­ĘWR6RŲ' 3ž:W5ĢJņĘ圞Ōsƒ´õ=uāŽ•Õ^Š0šlzãĩ2čį í<#ˇŋ=Ž<đr+J{“'ĄA ™bšQšO•îNėOOēŊE]ĶÕĸŠR˛(7gL¤8Ë)ģ+× d‘ČëØuŽjĮÄl ŦĶ8  ŌíAƒÎT"‚8nŊŽ:­n}Ŋoa \nle‹Č\–#…b8č8!OzäpqfęIĐĢŠéˇan]&ņ–ˆįŒāū'ßëXÚŊî‹Ģ;É"ŧwģHķu 1ÛĮQ÷GĶŋz˜ĶžûätzÖˇoš]G,…Vˆgđ[ōÎ>ŖÖ—NņuŌŸW8ķ™ĮāĮĩp×>ģxä]:ô^'$Å,e 8Īžxęqų`YXą";’‚FÆîqĶLūXīƒĒŖˇ3u$žĮģĮ,7Y$VSÜv&Ãˇ ¯6Ķl5ģ=€Í’ Æeœ Ŋ>šũ}MwV"s펜œu?ŽzbšįXļŅ_YĐ4ŨZ2ˇ–ą´ƒîĘŋ+¯Đ×''ô–KK트,Œ2K u9ūx¯@’@ĘŸöš¨>ą`Ę~Ė.bSÃE’OÔzõīÕĒĄ9­Ŗē9+ęļčÆ$Ž`¤ļQ0ÜōÍÛ¯Qƒ\öĄĄ^Á)70OoąŽč› p8ĪCcÛ é^…gâ›R]•IsąĘ/~‡ōÆ?ßļŋ´Ô"1´ĖåxÉ{Œ×ÛN;ĸ=œ^ĮŠ[Ú%´¸—{8N ‡¯NÜÖ­Ŧ%Äū[žO gĸ?ĨwÚįáģYn4Ų Š˙¨ŨōcĪŨū^Õįīk=­Ũėw1OæŽåd“‚2§ü{VŅ¨ĻŽˇ!ÆÎʼnc•ÖFY$û’ŽU¸Xö¨öŋØK32˙yįî{{Ķü‡&@Ņ:ė‚Kz üĒDû#‚“.īVÁô§`ēčZų…ÛeŖTÜN Xį{sŌĢɅāÄFĖķũØ˙˛Ę Á]n ؟õëô¨UÚ8]‘‡–˰ķåŒô¤Û%pĻgčøRܨ8?ë},VHÜ4JUģ1^ņSä2:ĢĖ­–ū Ŋ/ĩ9]Rá73ŗqÃŠŨøQ°u)‰6^ÂKŽī/8Ūzķū5uL†&ųōY21>1ûˇãįëY‘šļÛĨÚ ¨Ë/#ŸAšŅE\33Æīå b<˙Ë'ôÔJÖAĻLą$ř› æ\ î95ŅÄ ‹†ā\đw7ŊKrŌ]ȊÂI>G|Š˙?Z‡ŧŒK2ã‘ļ,wcÍhŧČōŅBąG,‰!r@ãäAũjEHËI*Ŧ*āĻæüã>Õ3…ŒÜTpXôũĐ˙ŌĢŦŌ´`ščÄãūš{}ZJāírAi7ː.dį?Įõ§ÛMJŠō)ÄXūüũ*õ•Íåʤq\ŗųŊ>fį'•´ž žŽŅYĨœŒ ß Œcø{ÔJinROĄpČÆMĻ&ûØ?ŨsÛëNs‰Ÿ ‘ąŠ˙žĩf]'PļgI‚Á_Ū¨Uɘpz÷Uŧ[Ôi_ė°8PKÆā cœc‘ķõéÅ ôAĻėXdo>-Ūxċ€­œüŅûž*4jUĨÎÃÎ?陨íf†yԁŅÔíč@Üŋ•:5’5Råœáŋé˙^Ŧî>dfi0Īˑ“Ķ–O­ +ōۛæĻ;—Š‹Jķāö3ņķį?ŊņéPĸˇŪ-3gnn:1ĻŽ-^0<Ā>QœāõgņíOÚ­ Ũ“ûĉQą*ŒĖebTdŒ˙^žŌ—€ŸvXãŅqšv&÷; Eow§Ü[4cN$m¤mnN>Ŋ?ZŪŋ‚¨9QŠ‘ÜŽūŸūĒã4]FKŲŖ)#Ŧû—s‚åÆ>ĻēÛ{9aˇ>o–Á$dŗgŋʸę&Ĩsĸ6hķ¯Hö7h#–YUcōˇ7ĖvāŽlōp{f ŽY.&S(/‡ųyęËéôũ)ū7ŽtԓteCd+uWú÷ĮõŦKÉŦã‰n#?f‘‡•!Č ķgNĩŲx#ģIÜŅ2LĐ 1ųGV?ŪjŠ,›E“ôô57—ēÕ ,yÚŧ—'øŊWļėqŒzãŌAëԖÅT^C § ÉĪĢMČk9#,Ã)ОØ^ÃéYÖHí{°ē7ĘOgĨiM"‹C^vF{ė^Ũ?ũu2ÜkEs&Ų“ėę‡Á†sŨœú})-#ō-‘>Pvnãqë{qSÄĄYIo,ÚC1†ĪđúæĨĘpB íõCÛÚŠžÂëv8"‰ÎUHÉ\ín~cĪZa yM•LũÆîßüæĻųūĐĘ ?9Ī,Oß5ĄŠŒ 9 ņÄ~õ7ĸ'ffI@ÜŖ ĢúIīLŧLG&zĪĘßŪŋZ•˙š<ō=x’–î5XÜîRw§Ė?úÕQZ’ödˇŽvž¨į˜õ5švˆÔeGîÎ Zŗ1Qo”€Ŋdā§˙Z ō••ķHzŽŖüjŽ G–AdÆH/¨Ž—ÂQíĶ›=7å\ä{0Û'ßq×ēŸ !:|ĖĮ™Ķđ~Ąņ ҰukŦc3øރüŠĀĐQŽĨ~p@Ūãũá]÷OįXTÜŌ CĄe`g'>˜Å1Õķ“Ķ(éƒRÁf)8¨äĀ Į< W9š)+™=xüéŒq׀qĘ¤qÔú v¨ČĘîĪN§=č(aÎHĀį­F͸䑀1’*GË­:S ‚ į#=zÔ°+d+Ë7$Ũi n`O\œ˙ŸZ”íęËô¨cVI,ŇūôĀx%NĶÔtÍVÔŽĶ†^ŨjÖpGŠę|.„ sKŠkc"%;ČĒŧ ŗíš|āb´Ux#j™&‹gÅ÷­ž \ĄQũ+*ņ‹xĸčÆNAP@ŨūĀíZZaķ/‘Í'§Ė|˛‘lž8ƒŲ{įōŽ~ėŖL͔l’xÚ>Ŋũ:ߐH!ķ1ŗķŅ{qX“3™ˆũáøŊ8Į?•k ĖåĒ'ˇ9Øvž ^ŋR [i°gî‘é˙×Ē1e¤‰|žp9ī×čķĢ–ĨŖšt(2à ä?•9-B/CĨҝ|‡! ˛Ûq]Ū§ęj6ņI3Û¤EÉŪXžƒ*įÎąī§û+­ōŊģ/Ž d †Ūe’éŖÁ`ŽęNŌ§ŸĀÖ|‰ę>f´3üWCâ)KPíË(ČāāãôĒĄÚ$û@xĪĖdõãú~mZž+"ú(.×,ÅqĮ|moÔV%”ęĒROõLģƒōŒį#üúÖđø”ž&lÁi$‘3'ĖÛÃįŒžüž~ŖčEI}kåZ´JČĢŊ˜ŨqĪZƒM¸0;[ĖÄ.AûŖ ȇ˙­ĨlŨD“Äņ‚ĨœqŽãļŗmŠjkšNvĘįË#eI “ĪøŸĘļu?gŠHÛqPĎšįĮLgķŽxĢÆōĢFŅšRGQęOáSŦ¯$*€†įIëūf´qģššvV.YHípr‘ģļÕPH$Ÿ“ß#8¯ņÛĶõy-Ō?0šF*s#62~Iõ'žŒúW/;ˇōŠVĘw;ēņߊävą&x|¸ŌBUrÁ. U\“é—#ũ×Īj‰Å=ĮĪAŌĩd`…ßmÃ㏧s´ú+¤K…o—qߜŖ;Ojō˜Ĩ”HUâiBÃc0äģí+G]ŋõŌéZ¸ Ļ`ĪæŠÛŧí$î œĀŊŊrN•ĩGDeŅšŲ2ËĪOLæąõ}'΁ÂgĐN}ũķÚŨ­â\CĒŲ\’]Ž6Ž˜>ãŊ]l::–ųņÛüūUŽŠ—šÃĮjöß!LCd‚ ‚O9ãúđÕ ąˆäĘŠOŪl$ļŪpSęŨË{ÃŊv—ļ‹,!Ų Į'Œ}~ŧæ.Ŧ(ÛtAflôĮ8ÎIā0^ŧpkU;îC‰5…ßÚaBXd"í, ×7ˇĄ5ÂE=šļģY‘ą‡Ā Áõ9'žø?ZÂ|WŠBĖŗÜÄcg#čüŽõzĪPD…Ûce ŗmČdq’;FV†ēĄßšĪkŪē´ öCíėĖíį÷|ã͝LƒŠäãšâÎC‰$QōžXKF ũ ũ8¯nͰĐŦO(”2ž„wÃ>§Īéö˛Ø™^Ū' ĢFŦOæ=ĢXWkŨ‘œŠßTyļģˆÕ’R§k,#h#?*ŠëןâÆGm=¯üČrw8Ā\‚spvŽp@ČëžĢōņXŌÅmpҞļ•āǎ|Į¯¨ëëT?´_nsŒŽĶžãŠúįüŽ•Đ šē2skCĄšâ),› Fzdãg ˙x˙ģßûÕÕø2ģûDrĀŦąūđÆĘËdŒQõįļ+͓P‘ڙpÁŽ?ŊÎß§$ôĮō¯Gøyp–ö÷×;Ģ•D ‚xÎIįԎ˙Ļ+:ĘĐ*›ŧ j 7XĶÖXė12ÆŧchPŧ°+Ø wá^d—„“9UFf'ĮĪ×§|ú ôŋ]Ų<đŪ}Ē-6ä3ŧŸëž?‹˙¯^S;.Đq9r{ú}s˙ęŖ~P̏“ŨHÎŅšbÁžmęädwúô÷öYŸ<ŒôįüûšM€ˇîķŸuéĶĪüņK*åCn ā›’=>ŋūēęV1š-ŊõÅ´ĘŅąĮ##8Æ:}õĢÍŽJŅ•t$ާß>ŊĮCŽFWž:võīĶڔF'îād=ŋ'e›BKK;’z– ˙žúÕxåžZ) 7ãĪųĪéNŽĪ‚G''=ęíž“,č$‰AOīnÚ1Ķ#üšI›*-õîŌÎC zŽŋáų{RÄ/ d!y ŧã?oÅŖÃ bāĘw6B € ŠÍXŽŪo-6A0å{ŗŽuĐŽFˇ3ôÍnęĘTŨ+Ą<í8ëÜķî}uƒÄ:.­&ũFĘcō†CžˇĮ$öéØņĪÍš¨ĻŪ|í;ō ÜGĨUûģ Ė. nX=:T¸FZėUÜt;ÛFŅ2­Ĩ$°Ū GŽ~€ŒCčy:đKa J˙ÚėTœ¨Ulã>ž™Čé×߯™CgŨYåBvŒyÃĄ=ŋ oØöÆTÉpČ@ųDÃĢ{bąt.÷4SilzDúĻžžcÅŦÎ[Š!ąÆIöô?.q\íīŠ5}>Böú´S*žžyį“€=Ŋ}¸Žut˜Zr]wįžnߕdęčķ0‘7Æö?įŽÃš¨ŅŠÜ—Qū…ã›M^ę+=cL¤f˜FįžOŽkoSŽŌÂōÖßJĶáČ|Ĩ9 89ãŋé^SĨÉuĸꖷčá„r+˛õĘõo>!×ėcõŗÚ°ĩ7TņĪéí%¡W)ĮPOQĮˇCĶZöŋ™‚IT6øŨHčĘzuā˙,qˇš‘‚âh–6û$č]P”š8ôčxū•ĶN ˜NIoÚjPʇdr€Ás‘´žG_jŗäĘč)1ų)Iüķ“w,—D˛eŧ°WÜŖŽsøĶô‰ŒR:–ƒĢ.čqÅt4ėdžļ6´ņÜ.ØK˙Į0ōĐ˙…0¤Ž’Û ō\ƒōīVŧĪß!>IũįA“˙-˙Jė,|!ú|R\M"Ë,hÛQTųqÜįXʧ.æę<ËCĪüļWr-OF‰F>āõúՍ˛‚ę-Û+¸œēsķ(ôŽ›RđMä1HösErܑ ŦAĄâšÔ”´ō[ˎxķž&—_ĶŪŠMKbymŖ:? ډõf’â ŊW;˛Kœ1ĶiŽÕŨˆų“hīĪ8Ŧ-XiÚls\KÍpIߜq’Bįņ5ĩu2Áąv W;@;×%GyĮDp>9t–„åÁčN6ž+žųGfÔÉPÆĘ›ÄڔwwbÉn‹øúcô˙ë†U@ÆĐãkޜZŠšĪ'vėVŽpcUŽ6l2qÔįœŌFÁ-îßøyëõŠT”ˇU8)Ø{ÔR:` Į…|ƒšĢĩömذķ<ūīĄR3Å]ģ_ôx™ŽåÛ!pFqō k:Ø&é–;c$r?•h_6Ë ä…;Fā2ŧ§åR՘nR•TDĒ5;@$Ė:Ũ:d2—ļWrŊ äČsÂSIs Œ>K”æNû‡Ĩ@°ēÄnP ŒJ’TĪ­4÷/†&lü„?ōПã¨dvTČØ ā9ôށᴀ}ąv‚ŽĪ˙רĖ3´lđF2Xw(?ÃōĨ`Ŋē—$”ÃÍ$pLŋõ×֝vÅՏšO͏õƒÕÆŠ´sˇĘ.3“‘÷Û˙ëūuaDĨđōäHޏ?ʍ˜õh†čūíÔdœ&3 ?ÃôúUiåBcaĪĪīV¤ Ґ9%SøĀ1éUæ-BŸ0¸pĮZ¤C}H•#Ûä8süYé]…2,.OëũŲZäMËšŗ’Yˆlfģ_ FEœüœyŖé÷ώÂ:{ø}ƒ^߀w~­[ūZzûę°|43y|AS]&=˙JįĢņSøMfpNÖRŲĪ p( ŽAûúSÛ|Ų§Lg֚č8ËwäÖÄ=āöÅC!TR?9Ģ´čųūĩTä;œvíß­#Œŗ)õÆ3ŸJd´ā Ëüô§ČpWž;÷5_ ėIVôãHcNį˙ įīuúP —āīÍ;#r P?ũtŠY˛6€HÎų÷ bŠÆpHãŠÎÕã€VšŠV䎘â˛uFũéėŌęRØŠjNkEAT#ŗír Œæ¯īBœķTÉ9íUŧEŦ“ũü~lÂąŠĄÔŽNäR.$ûÛzy‰ũãŠÛđņ-Ģky”søąŦ{pĪĢŪíb?yģ9aÕķÛükĻ?ųŌŲ|Čeļ`8N .>ęõŸįXw ĸ^WŒļwÉŸá=? Ūŧۯ˖ ޤ˙ ö/X7|õ(ĀÆ9$ūׯOZŪ™”Ë6ØVG*6‚@ã>ø$Ō§/å^¨1ķƒÔĀŊ3U ‡†pØÂ‘žšĪû\ūĩ-æīŗųĢ•æŽœ ņ˙õĶkRS4¸ēG#mģA&xĀ|ß™û =ígIÛJ&͜7B~¤‚?­mvė<ÄlW`§*zsÔöúÖæ2Ky$S–d z }ųÅg6ŌeĢ6QÔŦL7Ōۜq’~düđGá\ƒÆ`ģʐvOAéé^—uf)lfÆå­ÉéŧƒĶ+ÛĶé\fąk°ˆ”-ˇ’ŧãž=~}éԟAT‰EŨDIp†C"ŦvđĀduíë[ģܲ“pÛXî Ŧ ˙õW>˛­€6â@Áčy˙ķšÕŅĐâXŲļ.ô †b>™Šíõ­d´".ėMFÜZjbá4nH!ŽwÔ~9ũj͜6ĶĖŽÎLcƒŒ…$)<“Ī'<ö4^[¤‹åÆģd™‘¸‘‚8Īę=)–‰ÕŨU°Û•“gõāgØcŊ+Ū%[Qš„?fģw \`ÆŖr°#ˇzūCĩEû[°•<ŧ¨ Kžr Ž ߯đņÚē[˜åŖĢYį‚ĘKßįëūŨq—Kk˛ŒĒyáxá†8ëķúÍ|Ú ZjwV&ŌūŨUv.JģĒŦsМõÁõnƤą´û4°íY‡"<œėvüzr?ˆr9Ž.ÆwŠō#Š Ûĩ?0#‡^ũ3ƒ]EŽĻĐĸ´Û ¤;ŠûËéœí•céYN l\džįE§ÜJ›–'˙+ã!ˇ‚ŖĐO'¸8<[ÖwÛÄ\_æ@į<Œöö䏧5ĮAŠÅ+CķßĐ0Á|˜ŗōw$GFÆF jŲÜE Θ ÷“?6GÍĮ#wQŒ0=k @ÕOąŲÂĐË ¸!cnF:tčOL~•CP‰dO™2MÁíĪA׆ãĐÖuŊëmˆyģIUÁuÆĶÉÜ}åČõĨ<É<*l¯!\ ŲÁëÆ;lP+&r3YË’“Š…]ä dqzg§=ĀÁĒw >t•ÚP7ĻÁķtˇNāg uSÍt-ģ!TŨ‡ßŸ,’1ˇ†ã‡ŌĢ˘™Ų—h+š™Ü„å†rāŨ—¯SZÆL™<2Ëæ„g`ŅÍâršČ<äc$āķõŋ­ Ú\įbž;āįŽ˜8įÛ#ëXzPzŖ9Ÿd%g<1ëĐ/^FH>ĩ?ˆuHŋą¤Ãíyblm<ļsžŪ¸#§"ĨĢË@Ų+Š™ ˇ˜îÄĖK1$ōsÜ˙ú˙ÍŽrF:úVŨŨļČ7É2’Į˓Ü˙ēzuæŗ™b H0 å{ü;tüĢԋĐâ’ÔŽ›÷(<|Ü~?Īá^ŋáÍ2[OE4€ų#s)S˜ŗ€Đ㞟{ë^]nˆrž8ߜ›ŽqÛüûW¯iū/Ņ›Bˇ€ÜG­¸Is ÎsØW>&í+#Z6OR˛Ž°\YĪecĄČų[Ķ į‘Îs+Îõ[1m¨:E'˜ŠÄ)Ø3Øžž¸Ž÷í–zÅ۟p7¤O?Ų$GaēHÎJ“Ž@˙Ņņv‡ksk ´InĶO.0ĒX“Īŋū”'É+>Ļ’2Đō3!Ą2mÚJnØ*ŖŽ:Ûôéˆ,0x!JŽhÆ:vëūsZŌé˛Ú]Īi,Gˎp’äãîa߯˙_šŽ 2ÅPȁ\8Ī<įbÁ˙õ×Z‘Īc=킩Ū7/!p6ōîô˙=jT´i”´ģüÄęÉĮš˙õÕײ‰ܲI&NK6'°¯?‡­HiQå |˜õéڎnÃˇq‡NØvÉ*É(PBÅA=qú}jŲˇs­…ÚåX¤ãœUVĨHļĨT 2¨É°ĨRâUŒ´…”^¤ŌģļĨ$ŽYxfY2eXØc›v9Čúw2Å+ÆUĻ‹nT/}R‡ír3ŗ|î8  gį4‹אŦmÕđq…*HĪbMHË+k MŲ‡$}Ō’AÎ:{Š#†@vėBølđāäœvÕ†l(ōx9'kŽ^F?s[Üģļ l,Č~a‘ČÁ9ę(¸"tYZgŨK´ä >xį­#G(}¤Fx]ģr:qÎEPTš•6˛1äŊēķĐsÖĨ„^ËpŠ–rīFÎ<ėSˇ˜¯bxāUĀŽÃnÁ9úVUáÄķ¨RQļ’w{ƒžžįüķZßéfD2ĘbÚ‘æ–?Lwâ˛/’{Äî;wuķî8˙Ä ×zįešÔŠbšsg 'œãũÕÎO<äÖˇā×­Ží’{¸Ī4’°'jᗜs•Īų5Î^H-ė›oūUëŸo÷AúôīTc`UrJ… įztûæŽE-ÁĘÛˆõÕšÔŽŽŖHÁ"ŽėJŽ9ã īëYÚ4KĩĨlî‘ŅA$ú’O^k&Ú5 äˇ8ŽHĪRq]DqųvÁK’!8ęi4ŖT8žgĖO)ĘTųēü˙ũaN†é8Ę"ŗ”&Üüę}Ŋ)ûB@ųq‘÷~hĮˇ­F@rŤÜxÁ.‡ĶŪ§GąV}IĄœK¨t’OIyëīOYĐHĖDo`˙÷īLËŒ).Ã`o^\P€$ÅR›´‹ųŌweh‰¤¸‚(™‡”ŖkێTô÷ųŠÔQHŦėD™žę<Īđå yķ[åÁ:ķŌ€Û# —&pN$Ÿ_Ԑ|Čáēš0ŗíŖĀYą“ƒéŽyωaPÁ¤S Œ/Í0;ąúÔá÷ZĮÃpšÃJ§ˇ­1åˇąÁ'ī§Z,+ô1åHÉ*Ī´36ÜœߡjaKi ß3A< ú˙SWor‘/Ëģ$H\ŽGqÍgDˇJųäā’­Įéūx­SЇŊÂÖķR@gm¤îg$|Ģ’:ękŌĄ1ĢųEöÃ2Ŗ&Pā¯UĮį‚+Ę´Ķ=¤‹8GJpFyüĢŲ49ã¸Ņí䌅Á=1Årb7šĩ>ÆT7ÚDėEš¸HGW2“¤{qĮŗu„ĶÛËyoŦeo#™ØF¤œvÜΝJė/ŸËļy6dŒrNäū ōũnūīRÕZ.d¸Œ)ŽPØ*ŒŲiôĪÖĸšrc›˛9GQw´k;Œũĸā•āܯ^Į?­cÉ2Û,ŒŌŲ9?0=˙uw^ļH÷×Moq3áUˆrF'ŋ'ō÷Ž^úÖ]6ũáiCI•ܧƒĪzæģá(ŊÍ$Öã‹€Ĩ‰by “}=jåŦ2G~›â7•!‡áÁëīøS-ô÷¸2LęQG%qø˙*Đĩ¸ļI.!"@6–Üīåíßĩ6Ėē“HĒbÆAÜįŒž˙S^ŖāũHę~´ŸŪD<‰3ę  ūX?yrĮ Ę Č*ŲĀĀœc'šëŧŽZAq.’dXÚāų–䁂ØÁ§“ąÚĮaļTU Tƒƒœ‡'ĩSÔõ–’…Ž›B€ƒõ=ĪëTõûqĻŪÉ,{Äs™KdyŠ>oŽy÷ãķå.ޤžFu#ŧĩdg#ܟsĐûWT)ŠjŒ%6´`-ã“Rv÷ŦGsļ ė?Ęĩ”D̎l` Úį{šmŽ™ h#ŠŒ3ŦO׎É˛iठĖíŋqXÕ“õ\œõퟭi&˜ŖtC"@ą!ųCnčōNôČã‹Ė cČg pëSīRI¤ÄUe72ų`íBw Įņ“úûUa¤ŦI$Æv”Štr6‘ęHĪéB°93HB%Tu؏"`í@3éūJšwhĨ'IfFålđy 1é÷}+:9eˇh•˙x¤l`šį’Õ~ęö)P"˘Î$ 23éRî c<\Ǝ¤)`Ĩ~ņ^Ā÷ĮŊ q–8|ė#īƒü}=jI§7=r89›œķžŪô‹2•8˜ ßuëĶĨ0š$—ž[S3œ`f`1Î}=ĒŋŨ‘ļ^Į,ā÷SĮåSIt˜­Āē~üāõ¤ķĀ(í:ŽūwyįŽ´$ Ļ3íA_/ î%1ü^Ųū!LKĐ%TdŒėąVŧĖÂ1pąŠū!3çŌĸ{–ˆ“,ĒÃ.Év÷ĒBdk!mŒ¨PAQȤhÎũš)Æī3­XƒPˇ6.6‘’7HL ‚ö]ķ)Š]ûąÎsÆO­ ģ‰Ĩbģ(+¸Ä)9ķŽëÂŲ6W9>jõ=~EŽ!UŨ$ų_hSüČÛëøW{áŋaœ€9‘OūCJŠĪŨ*žå “æ^6 ?'Cõ5Ķn_ÖšĪŠō.>đŒō=tx?ŨĪWâ6§đšíĐd(ĀÍ šā7bœHß÷pۊN\āį ķÎ˛5!pĀČZŦ.íŒ=ÍX|÷ëƒíūxĒŦÃsnp03ŠC#%OL¨ÁĮք,@ĮŪ9<ƒÍ`:äļI gėi…d“€y¤4FäÜ qƒÖ¤@8cÅ5Bãq^r ?Ļ>œ Gë‚OÔzVf¤,A=+Pd…įĩPÔ>`ācņļe#:ŲēzŠĐRÅHÛYļœ8^kYFåĒ™'3áŖ›ÍX‘Ōe5dˇ7lvŨ€üšéĪ÷úVׅ>í'īÎæ ˙Zį­J‹ûÅ¡Î;Ø˙˛kŠ+ÉüŽfė—ĖŗyŗnÍŦX‘Ô}Ņ׎•ƒ:˛Ī‚­‚AÃq‘ßå?ũa[W@ēœårK+pØ?…aÎTHUÆ9 z9 ĪÖĐ2–„ĒĄTBįŒ˙œvãqöīq…`Ãܧž˜˙?T žTNKËĩIÎAĪoץ?JģĶpہqcŒ å}˙_zlHŖn‚ÚüeIFB@Úx8éīĮ5rŪâkAm4 $xX…ĘđWƒúūf™:ĢK‘0;#ĀÎ=ˆįžāz~z{mae †y<Ė?]š$}20MĻŦéõ}‡KĩÔSˆÃ+Į(år}AČ?_zã&ÔGöĄ“n-ŽIIc€ũ=ŽAü}ĢŊ°HæŌŸNpLũÂpB•æqø×kÖ&Âōâ5`T•Ôc Ā˙NՕ ]ŖJˇÜĄ$žl'‚ŧįÛ9ÉĮãųՋidŽ\`…8wĪLŽŸaUŌ-D˛gĘÎ<Ûķą‘ķ@Wr–*?7\qÛ9ÔŅ‚Đé$Ā•ĻFeP§‘sĶ$¯ųŧ-ĶJ›•&““ķãžp3Ī#đĢļģJ9pė"$œ!ÁP;ŒúN’%ģŖáa<9o§č{~ÁÎ:;õE­?TKvŲ(īp;)ČĮqŽŨH?ėŌę֐ÜÚy°8s° €ˇqįŠî=zúŠĀß=¤ËŽĘËÎTã `ôšüjĖz„Đo Éåšb œ‚ ū@Œurkt+ôe y^hŽī-¸*03‘Žŋ?äÖ´L “ .ĀĸCˇ?)\7 ŒîäŒöÎG5BņbžF:Ŧ¤ą~wnį#ņ÷č}ģÖYæ„ōNĶÃdäc_¨ĢĩÉŊ™ŗ™â‘ĸŽ2$Ā]ŋŪëč@õ?)íWmõķšHäg펐7uwŪr‹ČįąV$724b7)ōüĘzGN1øšÆä2Ž_?:}8Į9ų?†ĨĮšIö;‹~Ũ„cŧȑˆ$d1'oC†<Ļ{åEiĨäKDˆS~Ãģ°lrČĮ9ųŠķ€÷A3¨ĀĄŗš˛s‘üG‡9<jøžörėėA<+KôÁį?2zˇĶĩa*HÕMČi%mÎŦŗlÜ+îÁę0~b7x.9éQųš*ŅŌ2ˆ˜f9įå=6žz|§ĄPk–‚ųĸŒD'$rė@%WƒÛ'<ÆĶÖ­I|ÎĄ JŌäby#==ûß);”äÔ{6S’:+['žG)rāį €FōÎŅÔã`<õĒž­amioļæä<ĘCĪËĐXõ8ãæôĪŊaØøŠkIbÚāml†Ũƒī@nrO,‹ƒŠįŧCŽÉŠÜ4[¨$pxQČĀąķzg=)ƔÜŧ„æ­Š‘ŽŖq?’ŋšsÉčLÜN=°. Xú`đsīÛüņ]UŸŲ4šmˆäoäĄŗĮ@Ø'æČŽRUĖŦU÷NīĪų˙ ëƒča$BĖ@jąfFÁ_ĪĖŸĮ¯åD0´Ž“Į^3ŽœŸëøV D‚#"î$zeqĐgŖË߃VŲ ˇŧžÁ‘㐎ÂF~RGCƒ×ōīÖģ-;Ɨv˙fÔ5‹’O•:€ØÚƒ×Ž `i:j1}Ļ\%ē „Üœ˙=Ŋ:~•ŅdÜ$äũsÔqnĖÚ*KSNŪÛIÖ./uV;U9H|ˇ ŧãs3w=¸úÖEĖąés{ÛĄ Y 7 Ŧ rĘsARĮ Ī„v:Éh“Bįæ-ĖoܞXįÃĐTSiŒ!¸´?jeuLǁUųCc ęjˆ¨÷)ļÖŎV‹"ͲģÉ  šÆsČĪ~›H÷Ē0N×0+‘‡~ĐTõåBķ׊N{Tĸ[”Ha xRƒnX.Î{ŧ VŠáiDyĘ&Ãôė>CŒ˛*’ė-zŽš[ręĪm „ˇ SØcčÃ֚o‘Ųã,Ļ%\]vŠíȧ^?Zs\9”“6æ1ęf ž‡d}MJÍ Į˛)–\ĒŽæČãûĮ‚:`~ūBWž„w3/É’H‘ˆà &CĪ$íR=ŠĻ#J7l*ž āŒāõ#ŊG˛9RXŅLjw!‰TprCĮŸn? mÄq­Ä* ›xFˆÆ[ō8Á˙z§Bēˆ’ÕĨV•‘yÆ„ô_n†œ.XĐKŪÜHÉ úōsØgŋU…Ņo0PF0NÅĀĀ<ōہĮԞ•Q´ģĩœ[MË ĨâÛ¸Žr'žžŸ­5Ę-H嘎ú‘žüQOŒæHΘŋ+ãqĀÁäũOEktōlˇBÍĖxÁô0ÉúœĶåŌįĩ‹sÚIŠ@r#˙VOüãōôŖ@ÔU™XŽc@Æa?9ũ=8ãéYšžLēœžø˜‘´įŊOסãŪĩ$°–8\ųjŽĘ6ŗ pé’AĮ>äU IÚ V2ėVMžQ KwãAU!KĖš˜É*!l#bŒt#‚zûRļäļ-ŒdõSžŸLô<ū4––ÆIBHø,cë˙ÖŠ.cyįŽŨ,ėIä ôįņ­[čf‹ē™uIž3ĩ‰ÚÅIŒOZ֟NŠ@Wy €1.N8<‚xĢ"Î8-ŧ†XJŦ[7ˆÜƒĶޝ4Æ €FŪo(U.čxÜ9Ŧy›wF–˛ąÅR/&Áœ*—$zä~=ūŊŠßd‚DFgWØ2ä` ã$cß=é˛ ‘‚0_“Ž]Bã6>ųöÍY-f™d-É<XëųĐî;ĸcÅVicÜŌS ö=:đ"Ĩ[pQcŒ)Œäüœ`2AÎ?š œ dƒøf Œžî1‘÷Gn™9§´ŪXPAÉ=ÜûŒ1ôôéFĸšŲVTũĶšvʰō1Ā$žũ—ė΍…’dBĀŠÚAãēHëÔTČō6ÕķpÃ%Ėnā§>ŲÉãĻģ1‘m,Î2‘ļ úä ŒúQw°ZÃMŒme˜•vã9#§'úĶ˙˛Ąw?ŋ+"’pĨŽ}ļžŖđĨe¸īPeŠ,ãļ[¸īƒĨX{‰]ŠvŠų™ŧŌ@=›Ÿ^r:Ôģôe+XŽētJ˙<ĖXƒj°#ßåΧųÔijîͧ8?*Ø?@sSĘæSãvŒØë×sqŽ:ķ@˜‘š%pĘ$\ôÆ:ãĄ§¨´C I>XÉ#wœ~xįņN+cFÖÛHšĪũÃā2ČŲ_¨ĮôÅĄųˇmb¸ųĖŖT~4yˇ YPĘÁ—“z}ø}j$š–ŖĶĐõÆtšo1^9Á<t5ĘIáˆ#žZ‰7`žBØÆpFz¸âšt“PōÍ.îb‰žōG(ŽsžßŽ¯ÃļZ›Ü^^Mw!…Ũ¤bÛQ‡O­`ãÉ}MSæčMĒé‡LWēV’E¤nŠģĄĮ#˙^kĘ/mæŸPŊģēÅ#Čs!Aũ+Ųĩ×hėä%°1ō9Žzũ+ÍEÕ5ũDŊ­°ŠÉN|Æ_—˙¯øV”%dÛdUö+éöŠˆ‘0IJ`ēÎođÎ=Ŋöíŧ.úȓĘĸ Ã‡ÎĮ}?kA´xtpœĪ?ü´•ø$ûûr=2;ŠąáËąa­MíûģÍž[>øÎņįŸPiĘŖzÄJ)hÎ?UđūĢáđÆōq§÷З3ëÔqøVؚ+ˆ.í%ßõmųųĸäu˙=ëÛ ķĸ’k[åķ"-ûŠČu8[ߜ{כxŗÃRx~ũ55š;IŽŌ"&ė=ÔöĒĨ[™ōŊɝ;jŽßSž!ŧ/ą!ŨĪ˜ûŒuô?\rzģåøĒ=>O-ĸ( r§!ŽúŲü+"×_š–ŗHP•80šĘ°ávŠëŽŧN:Vi>wņ6%…ÃĢQČĪâ:S…&˜JĻēߍZ&ŅžŅƒŊ'd“ ‚WđáņęåėėŪ}—ÂĻčÁFäŽ3ūH+wTÕ"×tIV(‚ ’ÆLoÁ?Q‚p}Žk>+ˆåĩŽ_*2Æ5$2pX 7sßü(…ãŦåq— -­ģ‡2#. ŊíԃŸÆ›!™°Å×q•)‰î}rßŌĻFH[Ȏ)Ҥ*=~l¸úbĢG ˆÁˇĢ—‚3Č‘ßĶ<ՓԐ<ÖņÂc`œá\Ą*Ųę7Ķž Š–4JŽ‘ye÷“}§Ž:ä¯ŋ~1ŠĻ×*n Â1ÜyŒģGđÎĮō§+Æ]ÔÛ§•) ˛ rQž;ķë֋0mä Žd–(ãwQ‚Ųã“ÉĪNø9íMŽÖdcm YŧŧŽwdôOáN‰*ĒƒĖ’•ÚŪ„¸ņįŌžĻÚ-ˆģ•›äg‘ÜR2?ņÚLdM§DIEæū.ėzãītú}j[míwm-máˇ*¯OÁąõ$֝ŽŸrËwwūĄ[ʍ¨ķŽ>Qėy­č¯ˇĖ°(ՎH%Č8'œ`…g)ĩĸ-E3:PŌΎ'?.¯^3‘õüĒ Ÿ×å*ĩĐ(´Ÿx}âyÆuÎ9âļtË94Ûyĩ †K ōĄqąG|ŏã\Ōžˇ5Q¸ÕÆn!cŗČ^GŽ Éø­ámî ĩÆ2@üļŠŪĶæ2jžĻ6ūé ŎGāq\Ί˜ŗ]Ą"ØOŪÎN?*ĒKßB¨ũĶĪ3B~h†đ6ã O†iˇŽæI`3éÎG>ĻĄ´™Ą–L1ų° ?Ũ-ÉũZžīy´‚U?Ā"bŊۆįßæĮå]}N~†žœŠ˙éALd̘É.ĀgsĮ ŖĶŠŧ"bÛ—îĄØ|Á.˛1ķ?Ąč:äi,žĢœˆÛp†:ŠöôúŠÖép>Mā1'^˙6ŪŨNG\gÛ)Ũ3Hęˆî´ä¸ˆŖÃ(ŲĀ-ĮNĨI<ņƒÛč:×?,Oe8ŽPŦā€yíÉí]:$‘Ņ–̈“¸#=üŗũj9žĪ-›Å;†‡đvļvļ^=˙öjQ‡(\åX0NÁā~•ˆ, žBã9ΎáۏËn˙O’ÉŸcų°ƒ’ĘN}AÆ?ũužq¸?\Ÿņ­•š2iŖZÅT"h–d'æ'ą9˙#ȝÛjV‹ r 'r…Į<[ŌšÄ”(Ãzr~œ_éSn,ۃĀîŨœäŒwę?:N5ŽšÁŸĸüųW ƒėqÔH<Ž7wĢâédV `RC•IwvAĪļ+‘€åŲIVÁ˙‘ėƯÆ÷3mķˇrį“Đƒœōp:ôĮJÍĀĨ#¤6qHĀŠE˜6ĶĐîüÄaŗž2SÖ¨ËąÛ˛d˜Ųv:ˆĪ Q{õ!ŋ‡Ō­Į GhßxÉW$qŒ`’O\õĪĨfę—wˇŲäe >[ŽvŸpŽ0sĩzVqģvFb•ėæu†9Uų†×Ęō8)Ú:ž0wVv™jnĩHä%˛÷ātīžôéåVa˜‚äŽųį$u'Šæ´|?§‰īÃIˆ„ķČĪN9íÉëŽ? Ųégģ,ę¨ZEļ´'Ą'n~QÉãn>NõÎÜB!ef\Ž2<õú~cŽĩÜiv2]]Ü_\Į‚TL7dã $÷O#5Îę–ŅĻĢ:”bą6}G9ü@íõŠ„Ŧė9ĮŠKĘHŖÎ 1@s߯{œzV׆´Õî>ŅrŦļą:g~;dņŽSŠÆ‘âXöKŊ÷™5čV˛>—aᇔ‡9äõÚ Ī9îŽ3ĪT“KM 7vk…ąQRU~Pč…L˙N>†Ļ[ ŗ%Ëgų[Îaãå¯ķÅs {xQaK“͖9ÚÃ>¤AÉ?)#ˇJ– ™D ō#†ģíŨ€x*Oßņâš\stüŽŠM:%–æHåVeĀ bÕîGwšÅ9Ä4ę냸ˆëÁRK}k5ÛūYäEMÄmwT¸Î8Īû_Τ´ņ8>P¸ ˇ—ūã8Î6āūķÚĨÆCæFŅž ˆÃģ†Y¸Q $0pr=}ņíQ›m>|O ĩfWÊ*p}W¯×ߊŠöû+ČÕĸ0¯šáƒ˜öūöįÁĪ8õôФ{7.î-ļ‘Â%ĪLüų§~ŠY…É#Ķí¯ ˆ IQ¨bÁđ3ČāŒŽ:7ũķMŸÃö*yˇ‰7@ö_ī}qíUūÃÎ Æ#i8I3×8ā)ú¯ŌŖ….ĸŊ_˛ÃrTî;v°LŸĢĪĨ?F/T6=&Í[lpĸ´œ“ˆŨI#Ÿ—˙Ž֘ž…^E‡ũõ5e÷\(ëųšŌAŠy~\˛–Ü7&ķ#žŊ2¸Ÿ7J%‚øĄ•ĻųĨW ?Ķ…Áí÷ĪԚ“žádúÃOu!ø´•NQ™xôŨĪãÆŽÅÔ;X'Ú#•X6ÂXî§ķ"ŖLf\\Nīn ĘÅqø1õÛVÚIūfŽÂŲЏŊŠ-Čî3“ßøēPŨÆŦŠķ]$­ö†´EęÍ˛āŒ›ÛâĨûrFžXų\ŋČŒsÉë…đ>ũęVžpĮĖļš›nā°Ææ>” ™˛Āŗ•%‚Ģ`îôá°?ĩ(ęWz~›e$ˇ…9>Z™Ÿ8áyoo_ÂŧĶWÕßQ›t`ĮDŦ(¸Ā'šĀëôôŠ|AswŦk 6Ä[v1…S€yį€NzšK{H\ÆĀ—Ž<*’~ņōz]”ā ŽÎyIÉŲ gÚZĄU#ŖœäsÎ9Ž2߅T˛XŪņ吙“øžŧv­_ŊÄVÍܝÛFR{ō9đSũęeŧjļÉɃąėA#ëøvüzU§ŖdÛduí¤ŨmV‚8ļ|Ĩ–QާĶ#ˇãŌŠI§ŪÅÎļsąÜUÂŗgoįûnĪ~•Õč7sĸY‚$mĘQXoĀ‘Ôg;uîjĐX‘‰tÚ¤” ! ´BÖš=ŖLߑ4pctN|¸g‘•ˆŪųQžCī˙Ö¤Œ“‹gŒŖ+ ĘŊ9ęrGObáÛˇ…ҧLÜ8E †ëž›‡^=ąŖĖ…›ÉrŠ ‚RCšIéĶ~3øÍ?iä‹ĄĀŗ”,æ’r#Ø€8ĮëĮjhŒ$*w6×`AÚ¤¨<>oÂģã§–°Ú0c÷@R ˛ đ}ÆÖĢOáÛK…Ė1Em"ŽŅļ¸ãÜpsČ'ߓTĒ­™<Œåc;¤ÜĶËģ&22AģŗĪåīRDŠ$’9YÃâVlŖ>úŽâĩÃĶĀÆSs›:™“ G~3É?‘õø~Xö ŽY–@ ŲnWĐã#Œw\Š|ņî%s8ÜB˛ų…š6ÁûšČõÎqúÔ_k2*°q™ė+z˙˛Ŗü;u4úd‘7™m 1Ē|Ŗ&1ߌgOÎĸˇ20áē+?™šä큃T­k Öö!ÎßŨĸ™dcČ፿>ŊiXnMė œ Ō2Œ}¯ļ*ōi_3í`¸NÛûpsÛĶ­94;Þrˇ>[đXŸqƒųš\Ęā“3Zl#´qēģpP(?ON;d“RēĮ&ÕbŖn~i"Áaū?O˙UčôÛĶ"“.í‘ofQũÖ÷úÔ(_o9ÆŠ9äž ÷§ÍØIudqÍ$oĩ6„ xōã=?ŸLv­mBæ Öę=AŪEAG36ŨŖøq¯5QŦgš?1aÛ´ã÷ĖséŨ‡ā1RôŠRΨĒK0c‚ õ'×˙­ŌĨōĩŠJëc ą¸šņMįØīb1Åo—cđÃ<™įÎģ!ŦH¨ĒĒÕUÚ°<#h`ŠāCŗ$îŨŽšį'žk¤rŖųæšgkŲlkÜæu¨—ÍO•Ë€#§ü˙ZĮ{'–ÁOŪ\pxÛø˙‚÷5Đj ÷WB5Ũ€QÁõ= ŠĨˇ+l¨u\…Įą#ˇ˙\úSR˛ĩ.žįhd „ä‘ėG˙ĒŗīĄĩ×4ËŨ=đTŽÃžÄũ֏ę ]iÖÚĖK(ĮeŽ9ĮøúW"u -ŧQ{häĒH##?ōĪĖÛßÔ6ãøšQ‹{t 3Ėīm™CŖ ˛Ŗtnđp^ÉČnĨōÚ ą.Īá|ä}oūĩu^#´1kĻVUDŊE‘žLícō>úÜ×)} Á:ÍsōœŠ8ëeA?‘55ÛKŠ._~ÉNÅØFėä’ņ8ĪŊnj:e§ˆ´ˆ€r…pņ¸íãtü*ö:éútžt˙j’<ŧY\=GsŪ˛RLˇ™Ģ§ÜÆļŅåÂūYäŧûÔÚŧ÷n7H™F\ĒđÍÔ~X#ņŽ" nxôŠn÷Ą’CąąĀRrü˛}yĪQX)ŽŨ´­s;™e8 í€×ˇų5q Ûģ&U´ąÕ杉5MF2pc0)Ŋ>ŋ2žÔ"3rV&Cž)éôā÷čr;Öw4kąRũ%ûŌ•v]¤o`9˙ozßđĐ?Ø$œ}ãøüĸąo—/Ė`.cô’9į }h(ˆ‚§n0xÆ)͍§''˙].Í­’zã­}ÖčyëC%Pf‚Û‡vÅgęgvFČÍj'`F~••¨6 đ Î{Š]J[l™ų rã5ĸĖ<ļ$đk>ĶžÃÚŽĖ§ėŌđOČ•[ܓŸđŦkũ“s&Lî3í\åË„*᠚éü&?âœnx2Čz{ ætâĪíR@lul•ē…Ž¨ī#–[DšņŲ”‡T ’1Ÿvëōž?Ĩs†EY߆ā‘īĐ}JéīZ@üŒ@$0ę[ß§¯ŌšŠA3|Ė͞ŸũjŪ™”î_F-…!‚ļG͸cžŲČĢ>Y"ģÆ7ˇŸá'Ø6Ú­lā°?(Æw~øÛëčkKN‘mõ ÛËFû‘žl䞝ũp:™ėƖ¨čĸō4ģš$—(DŽŋÆųŪ¤˙ŧXø+=õCZžUË\H6D:"/wĮš’įĄ¨õ7’} ļe^F ķ÷‘Kã>āŽ(°š-'E–ūBq3y`gūYŽū8üõÍb–—ęhÛŊ‹—ŌÁĻXÃgk"ĩ­ 9Ÿõ˛œåŊĀįņ5ĀjívÄ9ųT’ՏË•XÔĩiõĢĶÛXäŨú`g¤;¤E'ËFæ=Oé]áĘŽ÷0œųļ,Y€“Į!}™Ëå¸ČPOęGįPÛetRĀ{ƒŸĶųS–IJG’Íû˜×Š Ÿ˙P¤ļ")›;pŧg¨ôüēŸÂĩķ ÜļōT\;`Ą ĀŽ9Üp:s܎jŅēŲˇÍ*Y3€yĮŖāIëČõą]ä}ÄldqƒĘž:ķž1ڝ),w(BĮī€UAČĪĄĪ~yíøâõfĢbi.›.Š+)p˰ģ ĀörFAú~´­xč“2\ąÃ ŋæžsĶ8E”˜ĻÛ"Ģ´ÁT€‚:ぁĶĐzôĸČFZhĮ—‚r÷#¯ņÎ{ūr š­åÎŲTÆņļՊPāečN:zķžũ+:ķEŠxc–xžN˛“šŋē;g ú UR‘Į"Ŧi‚]“įÂû‚Į8úũiūb~íY eGd†Ļ?ĪzI4îęŽvkiā|JˇĻėq˙Ö¨ÆŅؓŒ=ĢŖhmnüČ gÎy#åü{wëT§ąļdšX˜Äë†ríĪ #ϕǙ.=‡iļ“Ü9 iķ`<‡õxįxāWKi§Ghņ᝙]A"2̏Ŋ 8Į}‡Úŗô¸ÅžœŌ<›p§vz”œŒūq’3WėIššķDŽIuRYžī?ws‘õ$pzfą›špĐ[ëé7ÁÚi;ˆ-\ãƒŨž•ÎŨy,Ÿ*īŪAB m$ô €đĩšwB4oŨĒü™*ĀŖĪ-–PxÚ˛'C œNGŽ~lsؑíN[š˜Å„Œ brA9;˛~ŧņęĘ[ ˛ÄXœd&:c>š!{zW& ÖĨ^Úí“rôŨ€p:ÎF>•yuĢä`&[ËÉ#iĪ`Ô}ę6W9ÔĮŽÛš¸ĩPåļŖæ ØéĮËČ>Ųq/-d‘ –Ö Āe А¯OČ}8öŽU5KW–cÄĻB-4¯ādŽ œ÷'đŠŽĨŠ`§UQÚģ‰žpSƒÆ~^+7ORųô;‹C§_,væPålŲ#•ü0qõũ)Ķé:|0Ģ-ĢÃI ¯ '<Ä×ÜūU›™Nˇ˜Ļ—!ÆqôQœŒœzŗö‹ģ‰I›ˆ[˜Ŋ˛:ƒÜ/ãSČīŖ5ÎÉžÎŪ`{ĢfüÄžp{d•üŗÅX„ųĮlq@øûĪƒÆO^IôīŠâ#ŊPąJėĪŽ ˆį?Ļztv=L(%ŧŨĐąȈ”Î230Ī'Ō§Ų˛šÕŽŽ8ō$Ü+¸üŲĪāW˙Šü*IfCؒ26™>FR=ŽņĻ Íļ֑Š#ÃÉÔhĀnÚ!°>§4ēžģ…ģ]42ÉGōáˇ? #'áYŲŪÖ*ęך?š–b9näXaNšĀ?NIéčÖ˛5höŽÎV{­įƒû|ųÍrˇɨÍį^U,NJq āĐtŦųĨŅF`ĄļČ2@÷éŸé[FŠŨ‘)ž‡gk┊(ī5 8mĄ;Šųë8ãÛ'ôë͚ÄēņÕŌIŦ+eb–I72™Ā}2EWÔÔ\ r ˜Ę+.2I'ž=1ūqYŗKq3šüĀጜ?ëZBœwąR3í­Ļš@@Yîîø'‘īÖ´Zö;8<Î }ÕPNėô'æįšú‘ÅAöĨķ#ZÚŨLĨĘŠ… .qŒg•ŌiŪŧ¸/wŠ ļŌ|ā““ŅoÃ8ö̜ĸž"b›Ų°‚kÖųĐĮū.ËĮOŽÖŽ„ųPĒĨĀ)€Ë3cúbēĪZĮgáøcˇŦi:¸X{#;øņ×ĩrX+×mÅTˇ'd`wĀíÉ?¨#>upqŗąÜxrT>‚FS!W~3¸õįĄî?Úˇ{Ye+ …;@Q"ŸMŧ˙ˆ÷Íø>÷ʆîŨ˛žS‡JqßĒž¤kbîîŨž2ŌÛė*~WO`Œgķük–q|Ö6‹\ˇ-\MšFUqķķ˜~€œŸÄÔ×JéĖĒŅ‚_ƒĪŖ§đũ+9ãšdÎJ’įŗŖļ9?­D–Ķ PŒ’gøŸ$ū`ž=ø’VŲžeŠTg[…\œ8iōôÆ\zņúR,qČčÍ”ĊĒxQĮáƒíYH×v“¯–æĮ&W;†=1­_E†U ëÉ@Wp=Fx‰úRĩî^˜Fą’íū-­€F'œ~uTÜAp¨âu9`Ŗw¸€?—ãR›9duiČTårũ~Ŧ­U›HO.CK?{ X÷ ’~œRĶ`ÔYĸ‚h™înOĖāųā˙3õ˜4‹(nH a“*ĀûŒžüv?Z­¨X]Ŧ!ŧ՜€ĖčAČĪĒ0™ÍeÛ]:ÄĢ-ØD ´fB°zĮčō­#Ņ’äēŖ¨†Å—ĖH``æiĀęXqøĮéDSŨ[*ĢŦdƒ‚ģđūúôŦ›m^(# žYŒä+HžYq܂Įú7ājũˇˆ-VTŽâˆØĸĮävįˇJRŒ—@Mt-ģ´˛GÖ;%x÷ˆYqī•ëĪbGĩ>;(dˇHáŽßËÁ˜˛OŽOÃč)ÖĶĀTKlpH°nxÆxĮōĢĘYČ23nĀdÚ=ûžĻ ˛ĸÂöNĖ"Ž8Ĩr6— ķc Ã!ôŠ|Ų7Šy6 ū­Į¯ ¸˞{Ō–ķda•åūe“ĶŋáëU'ŽBŽ„ ØqĮüuüiî-M&ņ-e•%, @6Äg'õæˇn ˆĘŽžšé\Ĩĩ˛ÜŨÆXPę_+’aĐãđ5Ö=r3ÍD÷LŲÄ6vŗNß1į8ņĪôīQ[jpŧ`F9Î =3õíúUOJĻÆDę1ŽCÔpxíūz×-ÔįVĶíF⎠–Č 0~õp‡2™ë BB“Âđĸ¸ëË@—SIgžY76⋃Ÿ@Nœô!I%pÃĩbŧ"{“"á€^š'‘ž˜?¯đúTEØĻŽs>+hĩ+:h‘w ™H<qĪķŽKTĩy›~Æ]ŲedäÜāãųW{Ē[” 2ŠHįs~Ž{c>ÜÖĄåmģXd` °=ĮârGķī]4įkÎ'# G 8ׂqĶ9õũNWÔ#L ŽÅ\¯#u˙ë~õgU;gGL(ŨœĄ<x>§üãĨ5ĐKn¤ Ų#ŸQũGĩtŽæ/ą™z›n7pgúŸËüšŗĸj÷NĄ ÄsmFIz>Įü*fĩíÖ7unÖĶ‘īŽŋūēĘxžÚØSÎû{ũ=*´jĖ—tî{|Ģė <$įWBT둁ųš!ĩ;J“\"7+đ}úŸ 5äē^§{§€ö,91õSČ=‡~G5čžņUύ´čbŧļĢ’Lu#ŸŖ~uÅ:2ŠēÕ0¨¤k˜yšb7dųĖā.ŋȊœ,Ū_Ę w ­Đ{gp¤Ž‹">x0’Šõ!Ičm#ˆ‰’ãĖfR–_˜÷H˜‚?ā+[GŌ˛|,wi÷1?ŋ#oāĩąˇÜß5•O‰šAû¨Ūe’yūĩ „1}Į TšbzôéQKÜą ŽŦ^BĨĘ)=OzŽîą\ädöŠŲAeQÅV <Ē0YHÎIÆ)1‘I¸Č UŲģg8ü)¸lAu'Ŋ,™ÁÊ ž  ņČ”ē”0žŲ9äR°Î1ž:šqÚ $ãОiŒāƒ‘ŸĨ0‡8üū••¨4‡#9ëZŖ‰0 ÄŋoŪKĪRx¤ˇ+Ą åVîm…Ã/hØū•VČár īŠžūDM6īŸ!û{ž¤t1ü7ˆüÎ8?žlŠ˙ į-#ÄR )@ÃnqÁõ8Ž—B|Į$Į1ũZší-<Čd–o4Ą72zp§ã]QŪ^§3Ú#ov3a#BAë˜ĀęĮ°˙8Åsšpƒ ŠÆA?QĶ'žžūÕŅÜ3‚r#ž˙~û‡ŧvŦæ2 .Ür}Ž_Į5ĩ3)î^C$’JÎnâ OcÁäU6äĩåēˆĪúÕ q‚Ũ'üúU6Qļė ÎÜgŠôĮę*ŊœMö­ÛąfÜéÉsÜūít ŲŖ~ÆK—A+)´ ļáĪ$ūœ°üjŸŠ.6Yi6ˆUmVMĢũæä“üŋ ~‘vlõ9b\#Ā"˜gvA Ķąü귉!‘VÚ`ŧ`gˇ,?BGüĄ/}~ë1„Uŗ3) U ķ–ūU-ĩfb8 UFzüY+‰ +æ&Aād˙úÆ? EcŦ¤†(y÷ãúfˇ2Ęž|cr„HˇzķŒūdåN´DûPW;Q€'ä~bļ9c”œ‡Č“ĐōCQČĄQ}Tã=>_\˙žôü‚čŅŽHâ@˛áŖ#‘ÎHn1ūE]R’Ĩƒ.ŌĒĀÎøø=ÃĩQ–pûʧ˜ŦJ‚FÖĮ§š˙ŲĒänãË0CĮŗ{įōė;úVl¸ę5æ0Ė͟3z>üč áąÛÉúÔLō˛ÄŅŪ*Äljx zwpOā=ęҊåŸsáL ¨˜dŒō;ƒĮSĮŊ7™3)ķcyŒd°-Æ[8Į§qÛ­$Ęw(ûÛĖV\w!qëÜdôÉöÍH‘Č›#–™“„čHīĪq߯ąĒÍ0ļ‘ `ÅÂÔ{Œ˙/ĮŠ}ōUXc~Õāc ôÆyãMĻMŅemŨ.:mDųK20 ęyž¸Ĩi.Ây ō+‘w2äŒyî8În´˜bĒ%tEj+2ũĶÛ;8äĮŽk_b+xâķĘpÕįķƒ’= JܧbúēĻŽĒdR¤”į¯tĪũŖW,Vo°šHÃæ$V(G#îĀę įīUI Y4Č*d‘‚•+ʂAÎ~ž¸Z™sbb¸‡äÆÜH[¤÷`AvĘqŽš¤õCẺäIK>M€0d*Äã!Čę=9Ž~ūéZFu9dāčßN@ĸŧÔ<ĨŲd, :¨Ú÷âyæĒ,rI&ĀA,ØĀÉŧôįųúUÆՓ)v/ią­ŨęŦÎÚ2CÎ=žč#'Ōĩ€1´öėâyYԐv9^ R[žÜŒIi 6P”S äåžBGB7ŖļG׊BĀöčRAÃļ_›#Žņōœûô횖îĮmŽ-–ŪGWe s9ĘņÁíŽ$ãŌ ō,ÂÚŪ+¯Ę¨sķu봓Ÿl}{Ôí„ĒH"#;B¨āŒœ ÉĪŌ›-ŧŋi+•hS)ØŽÜs’Ųᨌ{P‘^YZĮ͜q3𹡘ęšôį­FúkÆî3 Øō¤}Îx9à }pHíÖŦŦĶØƒ $¨˛š0ŒqžxĮŽiûŪ[Ĩf•å˜EķW ĖŊ䜌ƒÎ)ĻÂĘæ ņÉA#ÄĮ†Gų{ƒô#ŋoƜ%>øVUÉyĪnrĐúVôÉē×tĸB˛%Œŧ˜ã$ƒƒØŖ>–ˇ įCo,0“€đÆZ=Ę1ܟĮ“TĨܗĐ@-Üŋząn•å…ŽBŒ!°A9ęO¯oūŊOĸ^4Ë9Ā:‚wN Ĩ(ét5-l͙Ą–ØË 8Œ263¸8ī–Āᩇũ&E$DBŠķ†$m@7O=qW$>TŌ)BcCJ [ˇtŨŅã׹ŒwĒ’ÉyÆdvA™$$lĪ įgĐČāÖi–ŅĄjī†Žf!›ŲāXúg#[Ŏs4ĒYd@ÛK8fQŒdāņQÛÅ!íŧ*˜.Ė2ãŧ3ÛCQę6íŠ@ ,*–R nÜŦzüŲÆņmqI/zėmûĻdšĢ$`(b ‘Č$|Į=ķíYō_ąÎĶŽAÆpĸÂú2SĘg ķœpsČāĐö:ƒŠso!\ ÛēôäVéE6ŲfįUûUŧ#Íũęįp+€Aõ=1[:^ow wšŽĸ‰ŽUC’vŽ™8;xŽ ĖĶôR—70ģņōFQĀs´œ/O§\×DßkØŌ@“C"ŠrĒ’ƒ=ƒ´{’k9ģiâēŗĨ‚ķKEˇĩą‡Î ųc€6Áץ@O˙^§šęK“ēo0Ļ9ßcčIúWŋh’Y'ĮČ8ëXîcĐ RũĄĐFžtld`ģ”¯Ķ …@JsŽŧũ+ŌÔ͜ÚņãIáûÛ[–>jFoĘāŠš'Œã§Ōš$u˜Ä¨[/÷Á9‘vd–-ĄlƁ‚ÆN:ŸĮë\ô2‡ŠŨĨf”’IĀ“éëĐzûķĩ8Ų7v[Ķ)2,1ĖžS’7l\ņ׊Î3íیĐZÆņH¨˛ļP1ÆĘ ãŌ<žÜb¸û˜Õ¸Vc+Ūj(Ī$ëĀĪm§=8ąŖ]ĩå›$ūW™ m-"¨Į\„$ôĮ&”Õ×0Aô7ŖŊHBŽåŲšŒSĮ¸×n'ō֙.Ĩ$>IhæMĸg ’s’rĖöŦÉ.&쎂Qį<( žiy#æÛéŅ…UēœC"Ī `vĻҞzį,ü˙úŽ)r' ų™ŅÅĢNöėŪRĩ¸‘Ŗų­ØŦ˜īō g毝 ‚æËeÄ)nŽAUŽČį×õĮZ\ÉÎ×lķî@9=[q‰íZú{ÜÆ›íA*ĮrŋæOĸĻO^ė*e l5+îm0Ā<á:Ŗni-ÕzœŸĨ[fÔ-aFķRXÂ䝤>ÎĮ§ĶJĀyŲ$‘…Ųˆ¨ÎÕØŽŽZB˙Ę´Võ7G<!ožĄ˛ īģn2je]Kzī Kq`ÁY˛œŠôßōŸø>ôökk˜ų*ŠÍ„.›eOũõPKskfuhdQŸ3”Ü^rŦ3Ō¨Oy41ĢFn ?rYOqÎö¤•Đ\ģ>‹f<Éâ7Æ7ĮōŽŪLcųU)­$ĩˇ*¤m"@GCüJ1˙}sN{όDZ%lļ[í*w“ŽÎO¯§ZļˇŅ°&hļ°;„™ČĶãĶŋz~đŊŌĩŊĖė¨ ųŧĖä“˙Čt5uˇI våžmÄG¯'˙­P%Íŧæ9žÄŧe„…•Čõ ųšą â6äYØ0n6°sŽ?īąIlJW|D¤NC6~éTü#?•$*ŅÆ nōL˜šS˙ŪۀfüØ~#,Å.ŌgU/('aÎKĀŊúpį­tˆ;Tŧ(Üx<÷Ŧ}Ų^âIŽÂäį$7^¤ŸįųV´˛F„)9ä#?ũz‰˜×ã“S˜¨VEËļĶÎO¯'§ãíÂj7ÛøˇNeqļ%V#ã=¯'ë^›âŠËDē!vîS¸˙Oķ˙Ö¯9ŧŅFĢĻ›˜söĨáIlā| wūœõފ-[S*‹ąę:ĩéļŗBöŒœŒg¨äuĸÂo:Ō7%O›Ķ*x<’}ķí\ۃ~úΊúuĐŲum…*ƒzqūŠÛĶn.@Čļ,œîI<~u„Ŗm ¸íBvWb @O†ü=y#éšäîšæ}œ)8Ž>lđIëĮ^sé]}öZ'`ŒHRBôĪsíĶÛ­s6ēxXä”Ģ2žJ‚§$cŠNsž=OĩTI&ž™‚āØéʞ¸ūžŧŦ‹ģL2E?tpHĪ{sĀVώjÍzĀ †* dtČė;~gšĢwEjņŒĸ1ĮžCžŪ˜õŽØŊĘÖ¤ˆeˇÃHŖT1ČÜÄU{´K¸ÄlOšÚsŽ:˙ŸJŲ´ĩ+ĻŽ Ūß8 a{8ëN•‰|Ū]ʡCßpū8÷ΧjiŨƒVE[¯*Qš†ŋt辟QĪõÖ*đ¸Ã”•vŧn§ 1Œ|Ũr:äņŌ°g*ˇlyÚāƒĶ>˜ĢęL– ŠŖĮķÛ>ÕrD&zΉŦC¨ZÃy4…fu1šøÆ:~Ŗ đjįÛQ™Ė’S8 Áyė9ĀüÖš/<fâ QeVQ6Öį‘ÁãņL÷ŽÖâŪ$™ Ŋ•šqŒšP6lw¯:ĸQ“Gd/(ĻSĩ{™‰k8÷É$“c鐓ŸcYw>ŗ—Ėŧ… WlwīķY@|ô`Ÿj߂ņßo› ĸŗ`ü{Vvģy …‘ģGP[€6’ôëūsD[ž€Ōļ§Š]ętą\[MŪ§9_^Ŗ‚?Jíŧ/ĄĮ§XGq4a¯f]Ō>9ôįŊeÚE3ZÃks:4í"™˛s’_‘č:‘Ūģ> ČĀ' éWRzrĸiÅ^å+Ø7Ą<ķôÁõÎxŦ[˜ãō{ī\z¯NųĀæēWÆĘ}+ÔSũ.HĀų8ÎHį?‡ųëQOV\Î{QĩDl ˆņÎŅ‘ŽįßüõéY)ēŌáY[å[ƒ´ú}3ŸÆĩīą"ŗp  9ŨŸlũ9ĪøV<¸’#Ŋq×$tĪų˙=Ģļ’ÜčRđßXK¸ļüa¸dœüŧzŨĶHo Ũr>äƒ˙ŽÖR%Rģänęs‚p:ôÍvúa+ákŖØ¤„ ˙ŗŠÎŦRF”år diķ:ÎĮŸBˇšõ•sžliN $‰??‘ks/ękž§ÄÍĄđŖ}s•FīQĐÔl¤0Áœæ¤I Œz{ĶfŲR'#kĻ…+Šv02rqĮ={˙:‚DĖdģ įåÂķRJų$/O?ԘBHĀd¨^:õägõĻQ "0Âįv Ī|gĩ.âGĘĀĪ_ƕTა^žôg~pFĶÜR°Æ;HS“×$u4Ą8%€_¯ZT°ųsȟJL9ŨČāüŲô h,@ëŸÕHķ›ĻsÍoEŨŒtŽsSbnY[ îⅸúØr§ęĢ˙ĢÁĪú‡ūF< €tŠuX×û.íŋé‹˙č&Ģíö14†˙Š(˜Šn>ĨĢœą‘Ŗˇu+Æ$#k1ĪSĐŽ˙ZčtP_ÁŠ0Fc”~­XšZ3[ŋ˸ų­”dsčOáÅtĮG/S™ęĸ4Ã4¸(#Aķc 0įôúVzé’ČI&AÆd;ēœCë]@P˛ŽK’„cĮL ãØ`ôčāg`Û'bIUiwļßöx>Ā~5jMËs˜“N–'ˇI&vÜÄ(PvŒ{c'¨üęˎ#"ÚŌŨäEpU˜ũ¸āĒŽŗÍi^Į,W°Üm”)ĖLōîOe8 ÉĒ:\Mŧ†=Í 1ĘŦ 0Ũ ‚>§&¯šęė›kbk&ĩŗ|ĘŽ’ģ…šØ–Ę¯`pˇ>¤ņRŨym=ŗs„X5HĘ;60? {ÅÖŪYrG,ĘĖŽšÆčĪQ´€}ų­[6ŠÆ)Ö@˛vF€Ģ(į;IîyŠ}ĮĻĮ¨]Á ÁN_ëųU[˛žb˜ÉÁ ˙ŸįWģŽĸĸ0$Œ‚HĮЊ§2îvXķŗ{lS×˙ë×B0h´JLŦäb9žyVgķ85W'kBĮįRTņÅ:YŠJ6á€,äsĶëū4Âĸ•ü@ëMĄŪDÖō‡|åe`āpo^Xū5}Ô;ÆR7U+d2y'“éĪOĮŊg˜Ä1oa‚žIPęH8ëĮ<‘øcŪˇÆ"Ųą×÷k¸HĨÕą÷ˆ?Ôcęk9>ĨĨĐ­mlŪ[$ʋƒ¸Ä09 ’ār3š|ĐD?q¸nNĨĀĪĻ@9õüMM.ŅÄ&}€Ģ*`yLū§ŖaĖPŖ”TsŨˇ§?(=úįœã57ęW‘ ZEäã$…'“é€ÃƒØô÷5 ˆŲXK$6 *”×īqøūu§lîcÎėaÁvT/LoΝ8SQũ™ˇĘîUĀÚÎ P=??ŊBab+kv2ÍŊ3)#h`Āg$`‘ëÛˇŊdŪ87ąÅ š>ęŗ9įŽžŪĩˇ2-ŦË4Dbx8ÆsRzüxÖ˛4ģ§n_vr:ķŸķũ*ŖÜRė[šũ’x%Ägœtī‘üúūu.Ĩ ƅˆ’5 „įîņƒė{gĨfĮ™v¤ímš'ß_ę*ö¸Œ†##Ģz^G9ČîqƒÛĩ;+Ą]Ųŗ"-ĖÁ‡ßl‘‘Œ{đ{WGšŲÂæV‰$ũco ?s€yúw'šĘŌmūÕ1/ˤpĒÛqĮ8ūĩģ4Č&bQ…`!laG#§sJo[V—!k–Vķ%‘L;ķ,ß9Ú@aō‘ŸĒįېJg™@vU#÷‡%ļķʡˇĮQīN[hƒ1|¤žzŠ “ĮR†=‡Öš ŽI Į(B›ļĘ ãĸ€_Œ{~ĩ%­F\ēÛĘĸ.ũĢå°_˜ vÛ´tëÔgŊ=]eœ¯ą\ä™Q‚0OÁ⁨R‹ûB8ˆyOĩ$ķ•ņvrO wĢ,KA4b 7ĘË*orƒ€T4gh2iŠ:}ĨËo†V#Z('×€ c°Š‘`0ėō™†åųį€S¸õŒr9§\-ŖE ´r:Š q=yfŽ9#x§ĸŽ  1aWįdv ã•Nũ:Sē™Y^1,le‰™H,Ŗ 9ęp8ãëOo!LŒÁd˜ü[“ĀęA@úŠšŽą!UQåīQŊy,mŖžŧņŸĨUo<%ē´Ą%f2âC¸ _^‡į­ †ÚŠčˇHąĘ‹åɒ¨/Đ Ũ“댑ÅgÍĨ\$lƒiŒ—ätį’3Ōĩ^čö’îæMꒆs ã $qŒķĪLÕ ]ÄH#@QF<įlš$sķ`qĶņĸ-ô [ŠRÚpĐ YPaú>Ņžũō=M:Âú=‡įV8ÚÄÁė9ü}ųŠ4ļ‹ėė˛ bŧœ”Áįŧ3ííô5$1Ö#DTbp§Īā>§§ā*ž„ĨąĻņ4‰ ˜.¨l˙c÷yü­DÂíĻāĖŒ0‡Á#ågĶŽ9ÍK<‘š.boņ"° UČãæ-œuūč¨8Ŗ–†! [ÂCnéšš{į¯QYĸÉ÷Îč@‚œ"‰đTõĮļ{æŖ2¨fbŽą…såŗ2ļxĀfԌãŠôĒæÜ,~LO -°ĘzGŽ)Ë8 æ+eŒ‰ŊVEĪ၎žŠØ.XŽI|֓‰žá™˛UI#<åŗ‘Ķą¨•ã‚â#"ŨnYQ‚  ņīͰīօōÁD” `Hp&ēœ’IÚqøžOjf功h.ÕV™ žyÛĪášV˜.I Ã0‘¸‰‰Ā Ÿ×Ú§3!Ũ ˆģåÔÆņn+Û;FėöÁüĒē’)™^LN2 Ÿh;Bž~`ŧ“Āđ§Ā˛˛¤hōå(-$›prA yūcĩú.e#a3ÛĄ ŦčĀį§ĘrŊųãę;É+;eÜ˙HÜäį<•nũ08ëLŽid ¤īYc*č†L–ĪĘs͝?…=nŽ rČVGPßŧ_ߌsĐö÷n”ƒMË UŖœ!ŠäFΰÎæ,Sī\įĪ ˇdhŲFKd‘íč?Ī×oĖdM¯eMĄeōØíS҆æķĩNũ1™ã(7ņ*‘ķĪ g§OΊ¨č)j_ōDö‘â‰É]Á™đΞ Įû^ŋzžœĖšĢÆv™%‹‡‰F7gø~SĐdpG­E§]‰aD|ČŅ’vŗƒžķėŋ—â$D:ËũäXōÁR7/`ƒOrŨ;Ōļč<Í;¨Ā’īˇl‘íuŠi8ör>ĒŒË´ÁPŧR2ģ4`FĄČū,`pIãŠh•o"i-Ag0lhBeēŽĘ¸īž~™¨L)í#îķqPFB…āpģŠ÷?{+ąE¨%E~×På %ˆ*:ä.î¸ū÷åI˛ÜȰÅēÉûá¨í–9÷¨Ļ™6ƒĖ_ŧˆ H<“Õųįļ~•+ųmÜqĸoM¨N͋ƒÆî×=šų~´€šÍŽ%V{`# fÛk.N2"—čXU¨—ÎŽ$ōFl–_”0ôqvãЃYÍ3°•ũĸHJ˛™\7Ę:¨ž?}*Ô§rȓÛųc"eR…@ĪS´āwëåĩ&†ËŒč‹åĒ|ū\nŒĀņ‚UP: ZąXPIēÁ('Ž~úƒÛšŦųgŠÂrcŒåAfį'ˇ x÷?…0ÉtŌūč¤ną%B‘žŦ:~9úÔ¨ĘÅī˛y6ģÆčĄ*pYx8D 9ЃמŠ­söחöņoxâ˰ȁF>Ē1įąúՍƗ[|ØgE<’0'ܰô&Ģ’L\Čė!ŗ‘yxĒIĘŋcÉüÁ•ašnûÎ$eÜÉcŊsíŸJå?ˇ-`o‘Sp;D\ĪN ÷ÍhÚ]ŧ𙕝e(Į1ŽåNzãđŠ”%ģd|­7mm¨7!rg?ˆōĻĪ%čæRĐŽŒ¤IÛ“š@üEAėģŨc^A…‹!`{“€éSũŠÛ÷™”îl€Č€:m-Éü1QfUŅŌøtČ4Ų<Üā¸* ę6¯šãņĒWim|÷ˇJF2ŧn'אsĐwkYâ;xãwyōK[=ÃķĘøžņcĪĖ Á^1ų{žõœ=é•-"sz˙‰[]ēŠ|âÉäØŽ;ķ]Ėf_ ø~Ū ‹8n÷4¸pvÉÆ0s×zW•Z,Đ^G2æîķ“ČÚr:į9 ãŠé'ņ'Š‹4"ō÷ ųKģžā`“øs]3§{F;ÆvģfŪŖįAum;ĨĨĖĒQ@XĘ2qÎįü;×e§Ų  ā|ÍĶszâŧĮÃļmģmu+Ü]—!üŅČ#ŋ<ŽN:ô¯VŠ]đ) Œõ8ÅsÕV˛5ĻīŠBöҜŅ]Cu#¸éåųU{˜~ĪnX*€Įj`㯠ãĢhoe<ŧšÆ×Ŗ´l•PÉ<ņßŋŋ˙ŽŗORŲÁę÷ŦÎėG×åOŧ ûžOLU=:mZ?*ې)ÁeÆxÎ:÷īŽũq[zw‡/5›‘=›{El̝`Ŗņ#L æĩ§×m4Ø×OĐŦÚäŠÃ4yĀėNpwS]NvŌ;˜ōõg?qĄjvÖ{î-äČÆY$qÎp3ŽŋOåĮjO´˜oœ›¯'ūųīׯcë^‰cĢZ™mīĖōEvK%ĘNNH8#' NyéQø›C]VÁ¯ŦĸHŽ”•@˙X¸äŽ8<ƒN9eī QēĐķ…Y­Ņm8ĪųƘ§X].Lāú?,ņŸz–H •Ė1–ŽNK¸`wĀŊP’'GØëŒœŽŖņũk­jŦsŊ5;ī†ę"׎ƒ\,WžĒHíÜqúû×tĶ´Ē­ ĶntÎQęOnŊ=ĢĮôMZæŌō)ãbgˆäe¸ps}ąœ×Ŧh×Ú~ĩĻË%ĄefųevJøíî+‹ĨĖuQ’k”†îäk[œ f ÄŖgqļ÷#ōąĩHŸ[Õ [UF‚8ŸjÎJƒßĮĨkj1Gac5IJÜ9Y”F™˙„)Į9Æ_ÚjO"\ŧ‘I1fdV"9 īÁĻ’¸MžĻÍÅŊļ‘–Âh¤ōĨÜņī,Ŧr3Œ“ķõŊĩÜWVË5ģG\ŒōHîcˇ´uŪ8#w#čk§đ%ėŌËčsÍg¤“(ąÎ;Sųr_H͜ŗOø}i"ŸlTļėô zį>ŋįķ¯A#ŽãŦY¤W8b°ãžGĨw6D'…nFOܗŋÔWk!ÉĮÍ*öčAõú]Ŋ¨?đ‡Îzü“ŸĢVUēKŠ'†T­„„¨Üf#đ ­ŧŋĨbøp°Ķې1!ëôˇ“ūÍsTø™ŧĸŽŒŋ3ģ8äæŠI 'd`(ž:Ôå=y9äķUålŒsî@ëYČ,rAĀ89˙ëTL¤rÛÎ1‘ÖŦ:Ē‚Žp¨<äõĒĨ‹`ƒŒ{p}iŒFPTF6äžßūĒpĀųW…ÔūrqœxĻą§#!ģãŠC@6•'oįŋĨBKđÁČ5)RŠ™`ĮuVcąAfnHv¤ЌūĖjÄ Â3ÔæēhĪ9Į^yįŠåõ ÖGb{{ĶŽå=‹ļ#jߕK¨˛˙dŨ’?å‹įūų5ĖŸJ›Pé—({Ä˙ČŅÔ]  đxPs‘6?īĻŽoLŒ4Sā~ũŽqŽÄķôŽ“Ã§g…"įOũ ̟°ûB$Ín<ÉĖv#+ž˜Įį]1zËÔå–Ņ-—MŦŖŒ‚åÚ?Ã×ūųô"U*Ą}Ō2‡Û Æ}=ÍWMRØĘ¨ĸ¸äl‘˜mƒŸģž}ũę˛HņĖ^VuķNb2ĄF[ŽzäŒúÕÛ¸Ži<0ŨÅå4#'cíÛÃ{}—>æŗ%ĶĨ˛[‡FŽGŠ2”‡–;qߊÁ­Ü\‘TĪ,„`žîqÜ ēãō§Éo:'Ųf"RŠą7=xœũsRĨmãs—“K[[nĸˆ9™””$–=1ĶüŽ•-ÅĩåŊˆ‚îâtŨC7"2>›€?ĄūuĢ8ŽîɒļYãpĮp6sÎIcøņôĻšž'…ī÷°ƒ=pÛIĪAŒqÚ¯Ŋɲ[%#ē•´Ũ4—F“É ŧ÷$œøŽzįG >ųbĖd™Î cž=qūxށÚ[‰¤ˇļ´uūF(ëˇÁ(ôč4é,läÖՐ$„ÄÎ@u<ž?´Rą›G?<l”ŧLėišÁĪ'œãæÆ9E‚In°ųĖŋ?–waąĶ§=ũĢ~ú‡ļ`f‚ fų„‹—fqÆO?í\dtŠŖĶŖŗŗĩ(’=ÛHĒų1ķsŒįŸË?ƒįĐ9u2ŌŽ/ˇ'd~ha gia×9#¯Nšįˇ&d¸ķI‹”3Ēãŋī0§ąūb•,âŒČ"Bæ5æDÚ2e}zԌ˛9!a“pûÛJ:dž›BŒ“úÖmÜ´’Fl‘$ €Œ"žÖd īRrå§ōĮքĨ°¨uŽ@̂0O 8>¸üjüˆ]$ r~WˇJōų˛6ũĄŠA–xH!•`É tlžP.ŲĄ0v*ŦJg| ˇpv-ōŒô?)ĮŊxČãÛŋ5ĐÉ­Újš{ ˆ‚\7 ’79ČĪíŽxŽbōĘú) ĐIįԌÅFxĮR|ĮāđۛÁĮĶŠÍÆÅŠ›ĀđĒŠa´3Ž¸ę€ ƒØšl3"ŒH†I$Ŗ É'!Gčzō*Q4žG“0/V‚ÜûŠÁb@=*´†hī(†Ü:ĸÛŽî@ö¤ßruŧ *4|¯—!ܸ üŋŧĀĪļzqNîŲ帙 hÁiāpXŊ>fŊWķî^V`$`ā@$€đ@ÎGŽzTfā†?<Ÿ?ĘT¸žč Sí“NšĸcDE„ Y ųˆ6‘ â xSƒJË #ŦĒÆšDfŒ¤um8?ÄIŦsžƒŋĘ­Y"ŦžÚėŖ1xļKˇž ‘ųdäõįúTWšŽnwÆKášf8#ën}=Åē§%†Uøã¯QØuüi‘ W[‰^~Pžũø ú{}h˛Ü.öGC;2BŅvØšq,'iŒŒ– PįŸâc߁U&rą,ķdH1‘x ~ėƒôükŨk)åwwi!8‘˛x|ąöĪZcK¨‘@Î0Ø˙õūœSåcSí $á‘æão—°ˇî€ã˙ ņۚķFĻ78÷‡ Aü}ųúUīeŽ}čFĀ€YI.?1šŽ]™ŧÆvgΜ‘Ž9Ī4r‡1´&ķ„ņÆFí–@ōrHŨŒgԞÕ:„ūœž8Ŧ§%˂lÄŅŧģÛé,îb1ŧJv™ ääį¯S’Ažëf}#ėQE2šeVX7āšÛķe@=OŋĐôZ~ik7œNņä&ȀXĪ 8įĶ­T×ĘNūLöâ@” ÅKÉÃN85Îę^Z¨éŠį:„NúĢApȸŨ 3Ēę0ÁAÎ=ĮķēŊ˛IæZ€‘¨ÁrÁšõã§áZzޚīqGmĮž5ܧ;ƒt'đöĖŪŲ\ÛHQÖlƒ€$RŋĖ ė‡ŠÍ"ĨØžP‘SÁđ<~•ĶZ¤SYģ$!U™Tú€ 'ŽbXžß3ŽžÕ×hVSŠŲĸ,ōK”ÆF22z­:Zá×Ų^âåŌX¸E‰A,3ž2˛qøŨ“Ãwznš÷lã ŅŖãvO'€3Œõ%ĢKYMCLŌZãOH- …7ŧ*¤Č{žAÁ8õüéŖ^—M˛ˆßCÖw Ģ ¤d‚ãŒqĪÔ×'<ž¨ß•-ÆĩõĖR™‚¤Ģ‘ˇvíÄHõėGÖ¸=VũŽelšR~čÉįíÅhx‡Ä6ˇd,)`¸îÎ:ãüąĮãX6z”` Mæ–ĀpHØ;ãkzTÚ\Ö3œîėhXۈíĻ.i†ŅÉ ä€W ߉qí_Ë\(Ååž8ųxāgßqĒP_Å+ä4^imĄ]qžyÁ8#ą'u\†@0öķᘝģn>cģ¸žzržâ[Y´ëFRą9Uuũā# NzcŒõõéÖŊ)UmUˇŒtčN8į­bh:lgIŽvB|×$6p9=ķÉëß­hjŌų łœrŲ?áū5ÉQķ;ÅY\t:ŠŦR3đ¸įˇ1ø ¯.xés-úÚĒáļG-ø’AX–Z‘͇Úītë‰"'rI ×n3žŧķYĶ|Kš+Ũˇ0[PÄ ˛øééƒô§roŨ@æ–į]}mņėŧÔ%h”äÆ1ŋ=¨§%õĨ”K E.9{Mc#éū*ļYt}^KiåŅpŊü_Š—uāmFHL)ŦŧŅŋ-–žyäŸō)(­¤ė{¤\Ô|QáĪ3͚ IĨBOđŗäcõČõí\Ū™ņęoĮúB-$“f<ķÆryôÍgj~ŊĶX)ÚčÜŠ^ĮĐāžzúûfšģ‹YmåœrNAéĪ Î+˛ŠĩĻĻŠ4ÎŖÆzRiēÃÜÂ7[ČŲØvļ9#ô˙8ŦYŖŽH2ŧ!å6ƒĪŽ1žHíū:–ˇég™Ö?50˛ “Čägz˙õķ ´ÖRČ`%Ŗ`I_ÁģŠūĩpēV}“MŨ"ûĐvnÆHĮNJę<-¨%ϰŅ“W”gvĀW ũ:Žŧ×;É ÃĢ€Sp7ļAã¯æ? ššˇ6ō[Ežd‘5U-‘€;Ķ¯äæš•…gsŌáēwVņKfÛŅÊāŧiī‘Ķž3Ššöã˙FB%ŒĪD§|đ9ēv́Ŗ–˛˛žŽ1ÔôíĮ4ũ3SKû‹ą ŒC›C/VėI˙=́Ũ|ŽŊËęZU…ĐĖhQÆ>dއ¯ūusÂÉn5 C2ģaŽãÖēÁmBĢ ’NTž˙ãX÷zKدlā”îsß^žĩJĨ×+…Ņ¯ Š lIôŽOġŽQĐŠ%1ŒOn3˙׎­w4qÎ9Į<÷W¯-˙xō+ljã§§ŋoĶĨ—ŧ/c¸fk™cį;ēžI=)cS+$K´3`.~ŸOzŒü­šē“ÎN:į˙¯ūE\‚6ˇ‡Î6{÷˙?•z#“Š3…ėq€Ūį<~‚ģXJ ˃ÃE7ķjķûvfŧI0OÎ Ā8é]ė/…¸ËA#~y5…eą­'š7‡ƒf™#Ė$ū mīOOÔV?†ŗũŠœãsĶØ ÕڞÕË?‰ˇ*:l@æ  8Ā8ųyÍH[e›99õĮéYX˛ˆ<ŒpA(SāķĪŽÕhüšß>•]⌨mĢÆpØ}( Næä’9ëŸĘšŽÎĖ­ĐŊȧåv“œ‚Höüi |ā…íC(s–` ›ąæ -ķ]qųÔîHÛÂäįŸJ…ÕHc•nAĀ) á[ūŊsˇā¸ĮS] +…=rGZįĩ0EÖW##Ļ([ĄgKv9ÉĢŽáĻ]v"'9˙€š­§‘{ŽâŦë¨ŅoYގũĶûBčačŦ„7/8IN1ĶæjÎŌ#Ļ”c÷ŸøēûcųV­ˆ1x/gt2ûčļ?bØžŨ&Ū5?<ÎW “Ÿá끁Īq] [úœīKz žŪ+ß6kŠseũÛ@ĪBx'ĄÎö=ë›kø…ÉQž Ĩۏ]ߟ\֏‰oĶ|Zl3En0Øā;÷˙?ZĀFÃF@ œÃü˙…uSŽ—g<孑ē.nŽ÷5ާ*ļ2ayLrOâ験íPiëōaoîÄŖĢ;Ÿ|ûÖj9Ā\‘ĐāqŒ˙_Ö¯GĒÜĒĸLŅ^DŊ#š\āFᖟ-ē 3JÛœK".§œW!gÚ9S<œyúVÔ1ʛŖ“ΡÆĐû~e>Ŧ¤6O¸ũ3\ęI¤]:īY,Ĩ႟š2zãzô÷Sõ¤û>§Ļ‘unŽņĖи–6ä#ŠÍÂ/m R~§dÖl'Ų÷ÆH#MĢŽä“õÉĒRy[ŨÄÖŅÃČĘÁÉãr€õĪ5™§xŠ ‰Ŗ†æäylą,Š >„3ęMtBöXĸIJ)uęī2ešë…aųgŠÉ§ËMKb„qŲĀ)"@‹ —õÉÔ÷#ĨBžU‰g ,ĨūVmĒÛĶ‡=ë]n_Í+ĸ&e9XîqëŸ;'éÚĄžQFy„18™•™?ŨQ1üø¤›FCŨ#q°ÉØdd„gčAį§č*<ôÚōy(Ķwn…°BĪ”s×Ŋl&dÚ[Ηų‰–d?í>™üęĒŪ'–.AvbĢ2rOrwŒžü~5iŽÂh„yæ?ôu‹Ë ũ¨ ŋgõü)đÃsu*ŗÜÄÎĀ…)¤.;ō’?AV•]¤܉#ûŌ3TÔī'éUņ-ÂÜ4wå!$™1*rŨÉË߀įĨ+ô u(NMĨČIíšFCē]ŒI×z˙,ôĄoä¸,ĶGq CÕÉĩ 9ÜĀ.3ŽzŠėĨbGģ9RíõõĐūuIŦ €HÁ#’QÂî‘Į'p›õæ­5Ԇģ;­Ŧ›UcbJ‰T•qũāĻ‘Û$~ë2h´ëĢR|ČU™Ęƒm ã‚XF2=ēũ*áŠÜ!…`ļķîcîGã9-æ’O€1šv6ņÎâeâ ͐Oã~1ŽįĶĨ5ĻÃ0.´BŨĄŒaFâĖ‹>ŧ6ÁĪZ¯&™¨ŗ2î6ĐX$é&ī įđé]470nōcž4Lîōĸāúįģ7Ļ)åU6}ĒMĄŠ°iĨVķ†ĀeP9ã¯ĩZœˆåG9 Íõ„E%C$yč˙2ö'žŠĒ-.w%،÷“ĐgÜĸēT Ŗ5ÄŅČÅTūđŊ,ɒ:qŌĢ^iv­˛9lĻŽaŨ‰‘@ÎĐŋ^ϟ:bIc*ƒæ)\‚‡'qĪæ1‘KöU2ŠÜĘXß6N::žëDéonĸK[Øü˛ØLÛũ‡AÉĪ ãÖĢęGČv76ؙ”íu“p<āsœôúöĻĨq5bļ/l‰ļķ÷dPr@Î0Âĸ’í$wwˇ@äõ^ƒˇB?Î*ä,ŦļrcWûާ<Čێ9Î2?tâ#gQņ†% üú€y0 ëNúė"´ūG–ČU÷‚­äƒō÷į>§˙ÕW<¤'ÎÛ"ųch“~‚aœō?:Ģ"LŖĘYœŦ$ēG~}ũéŦ ļĶß}›ƒ“‚sų˙úŠXw'@ĐĢÆžw-ûÔ¸EnÜîÎHõęYŒÍæ´O8‡PČrĮ‘‘ÆpŊS–æÚ]ÛGž6´hp éįÅ4nŽÂǏeãn‰ œŅa\ŠëjąÃ°uÂîÜqxĀĀ<đsL7ËUP:9ÜqüúÔ¯ )Rĸ7 Ą÷‚NņÆįsĮÍŽWdŠSāĮŒg¯?‡ķĒDęG…]Í'9ę8ãüúqRJÅdL¨p­ ã¯ã×)Ļ68ų–9$.:uÆ>ĩ–YKtUĮ#8æ˜ķ\!Û÷`ö#ßđĸK†}Ų‘ūŧw“Įŧ“@Œāž  6zķÛĩ0—r6ā9uũ(lbÛAįŽ.iãīØ 62č8ôâ˜S›°č÷ëŌ›ØpwũˆüŠØW&ķ3ÁLn6#>ŸĶĨ#&åÎÃ÷@åN3õĪ×ōĻŽšdŸ”tüŠčŖ€{$Ë?•!ōō*’œB3ŽÃŸzO/9ČČ>SūsVW’Pũá–? }=*ĪŲV ›qįbH9ÃįŠ\ÖŽf˛āČTmĪC“čzŌ>A%TŒzđ}ŗũkal9ؐ‚x1}āĖ8<Žŧõ÷§ 9B4ŒËPTˇ˜UyÎÕäqĶ4šĐų[1cųą€ÍÔā7j”e<ô¯ĶšÔūĪÍÚwũļ‘“õíJt´`P˛ #RJmˇĪz9Đrŗ#q €ÜŖÛÚļôÛŅ'–ŦËæÃÆõÆ99É āœ~´ÜâO+*čęæŅbØÄ¸Ÿ,'ũėWŦI¨ !į^ãcNŽ9bvįķŧö8™ˇÄĢģn0%‰ųFœœzįđŽŊ/cĶ, åęábA #°grX\‚?ũUË[Ūi›ÃKŖgN$[6í2Œ;ėā7u¸?…aë:ŌYj1ZŨ2†ųX2¯ĘÊu_OzÖģģ–ū\ y¸2Áî“ų×ã ī´ŨX_ĸĢC„„Ú21°‚OÕ°+*qæ–ĨÍŲhdøžķėúŸd BĮnsÁ÷<įņ5ØßÚkxzÚî[pd– ˘č}wüë˜ąĶ­ŧI¯Ä˛ČžV>î˙ŋޤŧā×m­Ę‘Z­ŧhŸt|ƒLté˙ë­fíËšŲŗČīmŪÔĘÁzĢôüũzī|ŦÚ: +–Xîö„ŗ€Øę=īŽõĖk–í™•āÛÆz“ųÖNžž[ĘZQ™NF{ÃۊÚQU!К|’=ËR1%Ģ$˛ˆãˆōÓˇúוĮâil´Ã¤Lž`ˇwŒnä`ÛōüģVmī‰5&1[M;ė~F'$ã§ķũ*ގ IâM@ĸäų„ūgįSJ.’ęsj‡ËŦ2˝ I œÂ€qœö˙8œÕ&‘~Đ|Ļ`ŽŲŽGOn˙N)ĸŲ‚ƒ÷Tu$tūžŸ—įe­~ĶnŌG€đįž@'ĀâēHĘíŒ$8>ûĮŧöŧŽĻŽ÷—WKmķĖ\0ør=ČĮN:Œ­b™1qæ'ץÁaÛ8ãüŠī<¤-ÄĶj3G€ĄŒ°ÎIŸËÆŗĒųcrā¯#ŊŌ"ú=œ°¨Î·š/lĸž$ņÔ˙Ÿ­YŠ4„sHā Ņ}øô¯:úv ¤0‡î§@s:tĪÖš}kLŌÖŪfh§rTØËqīíč)ū&ņ#éņUN§A鞜ŽžžÕį秊ޝ‰ČrOsOĪßđ­éR“ÔĘuĐÍšėˇŒ#“Ë+‘¸Ā=Ålh>/Ö,o)n¤ē´Į9Ũ×҈Č5kŖęzšī†Ú@œüåH×§ôŽŋÃ~HŽPK˞dŧ@ÚŖ¨\ŒķœWUIAFŌÔÂ*Wē/^ŪÅŠ@öâM­Ę˛åXgƒ“‘ÔūŽ8R,\ŽwNUœzœ÷8ī×ÖŊ7SđÄ7×ĨöՀęz¯§ũ?,öŽ{ÆvF“oˇR4 íåÜėšīŒt{āzVĻ“IԋŗlķéŨāģGŒ˛Édzäû˜ôõŠ?´„ŒXÉ@<~YUÜ×7CŒžÜ`u÷¤hH;‰9Į#œsКí˛9‘ĄĮrácMåËˇīgŸ_Jô_ øf=&ŋēÁē ėW9X‡nŨkŠđ_*˛Øãlũ6‘^Ĩ¨MäÛČp@ÛÆR}sôŽLDš|¨čĨnfbę°=÷úu“¯ÛŨ 6Üä}yŦM:ōãLžh¤„Ã’d(OđņČ÷?lxNéīžÔĶ`(bĄ¸Ũœ~#õ­-gD‹Tˆ*āeų5Ÿ7+äeōš.d?OÖí¯"R]w d+r;ŌĻą —@ėrš_Ŋž3^{w ū™6˨—¯›ķ˙>õJ}[ÎZe”ģyīß?į5~Á=ˆöÍnzvŖĢCkjX˛˙wh#’•yÆĨŠK¨]Hšbģ¸TųšööĶņĒŌk2ͅBį‚nį=ēžĪkÖōÁä+ŧJ;r¨ęOą˙"ĩ…?gŠ2Ÿ9NŌՊų˛ zdRGåLē”O1E}‘Ž@#¯ãķššęi&¸ ˇåNŊ1ŸqΎCUŒe-‹€0<įņūƒ§¸­Wvdû ˇ?ŋRŲÉ< ~Ÿ‡ųé^ˆ˙Â$}<‚zzןÚFĪ"¸—‚Ã#ŋŪ˙õįđ¯Co—ÂE{‹`0+*ũ )uáŧ˙dĮģ1ī[Ÿøõdøwwö:Ķqį­ģŨ*æŸÄΈėĐ įpéŽÕ1%HČ=HĮ51P¤}…E*ģ`Ž3Œũ dh3xw ¤7 ŒÔ,FT`“ģtĪĨN@˸sũʍ°'åPÜ['ņŠĘ'ôĪūj2O@ãĻOō§šŪܰĮl~#ü*3´zz ͸ŒžltĻļ\púTˆ>RI‹‹s@ÄR0̓Í`ęCũ#‚q[ÁycĀ=>•ĪßįÍã×Ĩ rēY  ķN×Ûo‡¯‡Ā–Ė6ÁœfĄņ#”đåŅĀäĒ:Í/…H<¯@Ų+‹xúĮâkŸ[¨ŦlZg\ũ™QOv,Nzž˜ONĩŋ{¯‚ĸ(ũÄ=}~Zã59OŲâˇnY™¤ažƒ Ÿî­tŌWŋŠÍQÚŪ†1•Œ’YÎXõīīNgÛ`¸īõįüú˙ƒä ĩHä ę{Ÿzlpy×);r `süžŸvčsZŒú­ĐYD›YļĒ‚ĢsÛļ?*ī-üĸÛBdš }ėˇú öŽbŌõ-gˇŠ/™ÉÂā*}?Īë߲ĩˇ7ļá¯dxâ'åWyô'ŋĐ ã­)_{#ĸ”QĘjžļļ¸Í„‡`“kÆė8Ķ<ÁĮn?Îx=9õŽ?QŅ/’æFŠËũĒā‚Ę{įŸĶß íTę_F)ÂÚĄļzœōquĻĮ3Äyģˇq ĢĮ\Žūˇc¨[^J¯¨Oģ˛áŧŠīžUŋJvŗ´Ä€Č˙3ųfUlž™ĀëŒTãJūԅ&žßdlęĢ$Œ]š8'o=>ž•2’˜¯4ąM*Éöŗu‚CŒ`‡!ÉėŊũĒÔZ åâūū#Y ‘†úÚŦ\ęš6„ŠcžãĖ#y ß§Č}+Õüswq"ųPX‡„L;7Ôāúņ€GŊDTĨđĸ›ŠÜę.<1cHîīÎYK3|Šģ1ŒcŊgÉ Øĩąk[ŅČŲTy#*ÃĶ%IĘŧîmz\““HJė/+1céÉ?ĐUÔĨŪ6ÖõV#5ŦhOĢ!ՏDz,ėm-­'(Æ9˜S)åžÃb8SĪâĨ73ŦĮ)“,@0Ë!c8ÜeČĮčk€´×nŖG‹í$Dã•eĪëÖŽEâ ÍōÜ2ÜČ02ãÔzđzStšh™ÕpÖĖtۀá]Ėj{ōd98=pE6îÖiY>yĩi“`1,ąˇ–HĘíy6€ņm˙hÂBņœā“UĄDXâģoæ`eØ2āôh†ãīrjĖļļ×)+f!¸‚\ųJ2 ųB†īžžĩȅHX´F=›„ÂBŊÂoķĪ@:qM0Hö˛8Ė ! ĻT8äĪRyč1×­>ETˆFčPŋͤŸ*“Æ6‡ÂũXõíH‹Ķ‚E‘*…ZI' Iú‰äv§Á™yL]âmå'i\õU–i_Q öĐ$.¤ErŌ.|šwŽd퇿*aĶĮqŲ.ād“l ŅēpNâ[œ`ÔHd[xāeA3÷2+r1ŽW˙'éI§īZO*\ŧØ2\zŽčˆQŸS@ĖÛŊ! >Ô$"Æđíį;‰¯ÖąnŒr6_1MŽrģIéØqīžõØD‘™]íųÔvɍ}zˇā :æÂÚî‹É“ËF@ķ~îKŽø{ ĨRےá}Œ+;Í.K/ŗęZyķUOīāA’3œŸ~˜×5ŅéēVƒŦ[G%š‰áų›~S×ĶĶŋą>‚°SGH'+0rR"€“ŽO˸’;Zģ°"”'ĖmĒčŦ60SŽ9œeŽqŌ”ĩÖ,jësR˙ÂCs•Ŗ›‹‡ Ō*Ä2^syĪP:ŽĻšmKF:|Ō@ė†hžķ.6äx9ëĮNšČĮúöĢŽŲé‘Oɤšą0į)œŸĪôŽS˜I¨jWr˛ųwH#aČ8ús€Ũ@<ö5*’{—8#•–K5o7’3ÉÁlã×wīõâ˛Ãe€rxūĄZBášáƒ’A9ųš8˙9īëČÍSŊˇû<åT|­ėųÁޏœí K)ƒŒchā˙ß4čū々SĶͅǤ(ä~đŠŲōŅšÁÆsõíTNÄĀŠ`ÝŖ%DtũđGm Ķü÷4‹į+´7fĮķâŖÍŨĮrŒŽCDXĀ<Q9ũiëĩ_ ÷Č8?­h[Ø´˛(`cfbĒˏį=<ūUz bĖ%Ú1ŊXÜaOõ"ĨÍ!¨ŗ†<;ā/ČĮ=ĮŪĪøĶá…ä”F˛Čś8Īâ8í[a)"+Gåö4éÂጜ §§=xĢKlûÁû(HŲU|ÁXžHRæūFĄÔE¨\ĆŲŧŲŨæũÍĨ°vĪãZÃûĨ•ĪĘĘžk¨_$î‘ížkJ+$‰ Eß<&īéÆÕ\āķßōŠt.H28î'Ÿīĩr*îRˇ ŽŪJ̓X˙Ô;n<ũĪëĮŊOöaÚšĘ āpŌÔôbĒĻ*Tšo)ĨGwÜ瞔Æ?Œ“ŸĶŋzˆ´‚nĸdĩ6oŒĮ$õØsģÛ8ü*5)GŌKš ™ÚhŒÁWŒX¯=úqīNN.‘›•"ÆĐvŗá dˇŠî*ÉhÕ  3<˜ÂHfÁč6a‚~Ū”ˆŖi2C‹I3™9įŪVqĪE㎴“ " ,%D3/˜p2…HvĮ* |ŋލÍĢĮ–W,ÁvdHpŽ;šīō¨ĢÄũŌĖ!‡pō•mØŽ{¸ņ×'ې:-ËēFņĖːáÔČę%†ü&ČĄ6= Ëcx“ŖÜÂc‰ČīųqŨw‚ÚÉČĄíîN&R¯$gl…7–Ū#oN¸É÷ĨDŽî,´Nßc".õßęXXû|Ô˛›Ŗ*´˜a˜ÜÂÁ=2ČBņŽ™4îÅĨ‚+o5ųLwŅ ąįž6noøJp!Y~uBiŋÕņؘøôÂÆĻklM†‰œŽįPčĞ8,6‚F;ą>•Ye /˜Ō*ēmŨûÍŋ/ģyƒë€3H –lļÍ ĐėŠEˍ΋ædc€Čāžŧđ{j­ŪŠ$oĮŲ­‘Ŗ,°§Í&X}æ\ņ€}}āŋj@†@ņY@ÛH8Îܰ÷$ŸjÍÕÁ˛ŧ`𛋀ŪH`v¨$s‚Ē3ŒķÛ­Wzļ–„2øēw3˜šyŽĻÂ4˛€¯p’~žÕ•u~×!­ƒąË đj•Ä׃Ė.îŦĢN28 })ļqy˛ ŌÚ/Į>Ÿ_JčPŠÕ96vģLŊI$‰ Œ¤nT`uų?ŽqĮ\ĶŧKâ Ģ ˙fGkÚĶ7%›Ž=?aÆ÷žC`–d“ƒ×üsßë[š†î5”He˜ac•N}ÉŦ¤ĸĨĖÍ3VDĶj2Ã,d‘Ī;?ũķíSø˛ĶHŌîáK—QgíKāzc“]uރcáÛ9įi0Á ŧãļ}ŋũ^•įs oĖÆ2 ļi‹ŧ¯÷¤<Įķcžyô&ŊwÁĐų˛utŦŌĖ=ĮōåZÁi.a›aRp{”ō=Á¯YĶgû?†ôČè/ kƒÉˇį]‡î$eGâgC샏gĶžjĩÍÂÛÄ[!yÎXãō*h€ ęô¨nĨR‡;pŊsœW Üé{uâŨz4ļŅ—,IcÉ :ô÷ÎzWoÍûįW$ ĀÛčO?JŨņlļÍĒ˛Û  ¸L7vãåßĨgBаĒdŽFg‚GŋžŋũoNšQ‚ąÅ'yĩÍÆ—t$ļ|1‚3Ÿ¨8âģŊ][Ÿ#PO(I,^i$!āāŨ˙ â%‡8 @@{öį°ã0ūīÔtŠ,/OŊIâÜ ûę<Á‘Ÿūˇį֔⤂2å;-cQžÕüU.• ŌĨ…¯úŀ°2œA+Č Wâ­9,¯X#XápÃ~?Öģ‹-6Ō5{Ģo-ĮÍķ°bAįĄôč)šöŸũĨĨÉjÛŧÎ M‡Æáūķ˙JÆQ’KcYG™jyˇ’ŅĮæŗģÔîú…VË39;Ž~ÃéÜ*šv˛E IŦ‘ąVW?0>ô-¸,¨ô,į8īÅv_ŠÎUČpŅėG^‡qÎē;Ä÷3Û :úc"U&Ī>Āž¤vūu•utʰŠ!ˆUˆëÛ§ŋ§–ëJŧŗÍš—qÛÎĮaĶ隉(ËF5Ėļ:ŊũŦ5KŽ m $ąÎHü9ū•ÜÃrŗ"ã'#<ũ?ũUåP]/"¸u/(„ķĪ$qøœ{ôޞekq%´­"2õ^ĪlzōÕËVŨÍéÎČęåŠ)"-0ũÜãŪšŨCÃ|ģ™UWyČ#žjx5&žÛyå nOSĶé˙˛šX5(nslîÛĶ (<úpsž•œTŖąmÆ[œ>ĄŖCdĖPąŽ˜ĪøT°„0Ä6m@žįžžž¸íëZZüa\ČØFätĪōüĪĐeۗ0#| t9'õāöįŊuĻÜu0jĖŽ[d?3žAÎҁžžßNïz­xáÚ>c’>ŋ×üŽÕfâBŦF9†zö栉KŗMæ¸ŨčFˇųū–ˆdļŠûČIŒũđ7vätü˙•w“œøQ8āÛÆ3a\Ŧæk˜˜ XҁQŸAĪ…w— ˇÂ‘"Æ?īšĘļčŌžĖ“Ãl‡F$VļŅū×åY#ûĀÆ[ÄÖÎ?ŨŽiüLčƒ÷Q´Ė sŪĸ6Héč)Pŗp@úS‚é‘Î+2„Š#rđŖž•§ŸŧŖw8#ĩO.N0Î95\āB|ŽĻĘō0ƒÆzĶ6Ž˜Æ}NjYXnãœã4Dū3S ‚ãSŒˆĸāāwZķ;š^kŠ7Ÿ(Ī׎ŋZôírA˙Ÿ܋üŠķęI_™‰úœ×ffrWŨ"Tg‹iÜYy\/QūZtĸ‰îˆS—o—?ĖÔDĄbyP/'žƒŒr=qüŊiŸ˛„V ˛¸!F3˙ĮŊncęZĶ™ceēŸīîĘî ß#ĶŽāŽ2Em§ŒZy b2íŅeÎĐ=O°öāzƒXŲˇ‘˙ŖÄŪ@ŧ…B¨ú‘ųã¯å]]—ƒ˛[˜Éŋ%„kŗ:å˛z÷ YTt÷‘¤yē–:Ŋ›Ēŧ’´}8íØqĪ^Ĩ\–ōKœ$#Ēä™ PzŽŸŸÜÔ mĻé ŒņƊ‚§$â<įŽÛMaj.ķ“NŒĀĖÎp ķúūĩÎĄĖũÔlåĘĩgB$°Ōm'šâX˜āų‡`˙WĐõŽSņD÷6ą“+ZÛ*ĒĒŽĮäôčNĩËÜjūav’A<ä’8ų@īŒ÷˙€īXZ=ņ*HēšŽ0{ (`ŊyuČÛĶ&ĩd3Øî¸ģĶā–2 ėQˆ<‚PåOâŖ­sOâ6‹Đĩå"‚˛HĪ18ķ<´9ô&^zAõ¨."U@"ŊŒ|ģ.UByÚZaČ•5žĩÔĘ#Ô",¤m†í^SūÉ PŸĘ§¸‘ŖB.Ã$jAYŽKē“œå™w'§NjĶÔŊÅ/-¤yϊė‘8aqķp;“pOķö¨å¤(ŌJ<ߛsŧĖ ŅOī˛<3čk}ŦŌōĨų|ˇb[īb\§N9=Ŋk2{d3ŠQÛb„CœŽ Ũ7vü)Š\MXŖų…­Û2Ŗvd푖!į¯ę vn[šRpø 3¸‡\€Ą'|āĪáSKgæF ¨ yģr9iXŒ0ûšĀöĒ?d+&DqšČG0üŽŊÁŨ2=OL֊ıewķ‚ÃjŌÂ_,ĀŦ^2:Ža¨Į 5ViŒjÉo”Ä|ß0E•ŒüYˆĀîxįŠ‚îÕ*Ė!Ywā(  2C0L7^šĀ¨§Xgh¤UY$ĒBOÔŽįšėzU¤‰š5ÆŦķ3 “`šœČũ=0žÃˇaŌŠ‹ģ֑U&–WĖT Ŋ@Ā'øâ:úúSŲ'û?ž•‚!ˆŒįî’š&‘ĄņĢJā„ÁÁ*[ļTesßÜz¤‘.åK‰$(yȓ”%Gôoō8Ē­2īázr$ ēc‰S1˛YŽÖ 8lû0Æ}HüĒ9mdŒ~dS’Ā’}ãb­X—s_CÕÉ’Í(^vŽüsČüåVõšōŠĒÛFsŖ÷õRy>™ÉūđŽi-Ļ\‘͓•)ČĮÔTÁj1•Â;mČucR ãļ3Ž•‹šåŠģXb8ķÃɐ8äu_qū{jåä 5´lģ7ŗ…öéíųvãŽrkޜ`‚g#qp}xRr8ę3]™imk “¤šU 3HČÁO b¤ūéÍ•ĩMčfEáČpei|ÍšŪŖ0NãsvãÖ­ Zļ!ī_žVdŨô\gôZčV´ ˜âeīŸ(=6íāā}樞u‡VĶIJ}žĀ~bÛÂ/# Ž8Æ;uéY{I3NDŒxü9m;âŪ?•‰ZBK æŽĮ¤ÃĮû1S$eP§=H ™c]}Įƒ|÷Sö”~F?vŠĶč9ũ?´<&åúLQg–Q1'ԝŖ§`:VN˛}JTßcˆx]îv‚%2“'™4,îG ”`{p=éUw- Lq:°oRί=5Ų\ø^é QÂWRHA3FŦsĮ¯ķ÷Ŧ5Ŋܰ\4äą;‰20FÆæūĻ…;•Ëb“ŋ™ß2)ĸ`ĨQؘ@¨˛:õ94‚™Ļp7H[; š˜ãĘUGlņøT˛ÉĄwÜʓÆbĶnķO×ÍãžÃQ"ŦŪa–(Ū]ßv4gļ~Fߏ\㎴Ņ%rĪ ol*6É3ŧãæė:Ôí"G`Į"#Ž"‘Y!ãĐ/-ųūÎdh§ŽÜĸĢ2BĒtÄ §z¸-í<æļšŽHnc?4SŽr Æ:zķV!ĶėņŧK žUƒ`õz{ŽjššLր,ęV4”üąŗ ¯=Ë0lútūu5ŦJī< K, īXÚFÚI™ÍjGĻÁŠCpUXåaÔgĶ'ųÖČ´Ķãy$q˛žCĘŦŨ;€™52Ÿb”FíRG˜ ŋKÍÆ?ˆšnŨĀ Û[ÉpË !$Û÷՗–# ąuū~ĩŪ*üŋŧŖ<.}˛NMTÔ-`x‹ĩĸÎį…3Ÿ§ÉĪãÅJĢܧhKڅCąm؆ +ž€ãË˙Џž)ûXyį3‘æE)Ąö5ŌAŖO,h]ÖŪ Äkæ(îŖ€đĨ_ Ú P^â(čdëø–<{OÚ!r>†=ļ{¨ÚÄøŨœōŖ“†nŪØ÷ÍIuáRō s#$0eAĮ~C§­u$F"TD*…Âmoä E;­¤O$˛´hŖŸ€=˛˙:Íԕô/’6<į]Đ!ˇ˛¸wpŠŗ0P¤Î^üķŒqÍdGáËį–ÜŲĮpķČÜ+G͌œņĶ'é]ī…oOˆ5ģËë¨c1CĮmšwÜžs]¤pÅošâUVîbŋĮ˙¯[:ō‡ē÷2öJZžvŋuyÛ9qČw8^䊗GžķMžKq Üģ:‡A÷™FHįŋĘ~ŧô5Ņë1Ķt‡hî';×ĒĸnĮœqÆ¸SXˇ“]Ķĩ ōGn÷jūd‘œ…ÁíęsŸÆˆšÔøK–;ū&›Rk(Ø1…*ĮsĪNW ֗o 3¤ŽĀOoĨwW>&ĐîĄ,ū$PI< Iz ˙ž+ûsMˇôëWš™G—¨ûМˇNį¯5tÜĸ­b&ĸŨîI žûKŠŽwEk{ŽGpĒûœë]†oĸļ„éîʒģcCĀ8ÚĀwåĪ<ķ\-åİ\[ÜŨH'šyw—h(;Ag~ņŌē?įSÕ$ԙņ1mHʐ2üžįĶëĪ55#îŨ•MûÖGvÄ‚N=ø¯,ņėÚĻĨ/–šŽŧÃŽqÁüõ×ĨJŦęQ¸8=Ģ—ņ%”z ˆ‘ ČÉ/×ķĪŋôŦh´¤kQ]y¨Æd˛ą‘pF$BAô;‡ū…šõí$Ã–|ĖaŠ<äŒĮą˙>•åōöą 3ļ;ƒœœōʧ˙ēkÔĩ-fÛNŌ­ŽÜoļu蠏—šŪŊė‘•;jÉŽĻ°Eā‘’'§r -ôôü=…7Q×Ŧ¯CĮj×xuÚUúœņųķéԏ̴ŪlŲ‹s‘ƒŒŅJŠŪBŠQė‰I&=•ļö#?Ÿ?įōÍ:ŧŽ´&I=O?¯æ~)ghž5EÆr–ųOķéœö˙čã$䃐:cr>ų}:ŽckНĩsŒÚ8āvôĮôüz–<„ &wŧā`rF?§ĒŽ´ėev1Æ:{gŋįŲ%x°AÉxĀčqü˙Ãhę†vŧ7zs[K![b-Ė03´}ĪcøÖĨŤKkÉ]ΘŽÃų× ĻÜO sÅnTa™đœŒŽ‡ŒtüzVŧzÜĻåsãåĪā1éųū8N›æē5ŒÕĩ45Ŋ*=f#ŽåAb÷nĀCú âŖCÂ9cØĘpá‰VÎGn†ēy59Î˙%T°ũæZ\õę8õ?fÜ[M –F…]ĢĶēŲõūUpēV{+=Q×øRĘ´Ņ8UÜۉ'ĸ‘¸c‘Ž9üëOT´†ęÎEtCÆĐ`uՇā˧o´Øž ˆ7ŖmĀ žHõ÷ôõŽžîc ˆ”ošPÂ4^×=€ŽYŨLŪ6p<ĸâŅáš[uVīmnAûšŸO^‡­%†§w§`ÂäĄāĄä‚3ų~ë_Ō.-ĻûLņÄEŲ¸HHBHဧņÁëĪļHØļá ļAbîĀĢԍŨũyü+Ž-Ií8ŗgHÕÉ,[Œ¸lwéëŽ:E;R ŗ4‘Rm#õ鎸Á˙&°<ąWŠL%IáIĪ=uÚV×ViqŠ\Ŧ0‘Ģ^GĘ:˙õ…L’‹æ*>ōąs{$Ęãpe8É9Īų˙ëÕxå3,¤ā’Û˜ãžūžžžĩģy7†ã¸1[A+J‡Q1ūžž•ĪI4I)ĘčHaœ÷nŸįĩ\ú- ^k_,œŠįOųü?‚I^į ¤c īלšĮÛlėNå㯭1$ēu!h9ũuĸDܖŨĸà jųšĪ|+Ŋē`Ū^|¸ē}V¸[hZ c˜î““ÔķÅw:šxdĪ 5Ŧ*îiėÉü6ö@¯9oũÖŽäôoÎŗ4xČĶ#  ˙–ãZ{ sOâfņŲĨpųcĮÖĸ82Nr;uūu>žr8Ā͸/´€:bŗ.ã 9āļ;öĻ68cĀ=séO ØČ ãŠÅFOŽqœ}Ūĸ•ÆBđĢáˆã=E6āvôĪķŠņō“‚ŌĢŋ ;§CHhaØ~lGOåMnNrAŽĩ#’#ātáß8‚‡ļ<§$Žzīnî‡ē%#Ę'9Ŧ ÔË1įŌŽå=‰,I¸Ē>/$x}Ę‘*žõ~ÄķŽ8Ŧ˙“˙ėû@Ũæ'?đ*Ö3ŸĀÉ5• áŊĖqv˙wü+Î5wÃqŒžŧõ˙?ËŋŖx…•<.0:ˆū`+ĖLnÃr>Ū2ys\˙ZęÃėÎZĪTs‰—Ŗ<ãü˙ŸÂĩ|)¤KĒ^gak<Í­ßėņĪ­cGįUrKuôôįší<){kkĻ_B‡|‹ĩđį89>œw­jļĄî™A^Z›Æk;>5@|ŽNy'îõĮSĶĶŠŦ GÅ73åĩļ÷o;n.=Bō=đՉĒ^ĩÄą07c'Œ.sČĀęp{wāÖkFÍķ>o+‚„œāū=ŋ•ĸ–˛.UČąuĒĮ0ŪÆk™úyŗl(é߃žõ˜×Ü6ŌØRGĘŖĶüŠVTT ŸB#æË#Û=MIl˜†ŨŒpH`qøĮŋJŨ$Œ[lhƒį ųįh?{éīĶŽŧÔĢíÛ ŠĨ÷pĮCĪ'ÛëL2+y‹ŊPã9Á!›§qž}š­ I¯LJQ<Ņō€Ģ†o›9=Éë“Ø °%q4í âáKĮáŦr1“Û=#ō­ûģ›_ ØQ#}Cīˇ˙Ū9ėŊ†=¸4ŨSRƒÂ–æËOÚڜ¨7Ė?傑Đĩ¯\’xŽJšæQ!Ũ#’Hg9,GQīúÖjķÕė[´t[“E´˛3rĮ^{ōG¯>¸#ĩP é089ŪŽM!?"Ęà ‚Å獯ŅüŊ;tnjš$íÂã8ôô­Q›neË;ēg4Žęßx|ŨΝéV ŠĻ"â2à 6՛Pą‘ Ëē°XŲšVõÁ$ t¯4Yä7ĘIĮĖ:ÖŅ.¤ąáo”:į‘÷‡uÆ2AãŽÆŗĢ(—NM3¸ŋLŊQļ-ã,Ãߗ˙ĢŸy§"Íĸj7‘näÄę0GŠPĮr+ŗŗˇŽ;wĩŌÕ\yˇo–ÜÄsŽ~cŒ{žÕ›¯Ú[iÖmÄš‰<&ōÆ Tz}{×jkcĻQēš‚úÅöž[ûSDˆîšk"mänų!x?ˆĢ6ZƏrč-õ?%ˆ ą_Â##žq"Œ~cŌĒÛŤjƒcWĶnDe†&fV#ąrOĨ`܋Ģi•ŽR Ȳ›^āv5˛ŠzlfäÖ§s%Ŧŋe2ŊŒN‹Ÿ.KXŌd žĖŖåãŠ"Ģ›[)cÃ#Á‘R%A•čGgžäŒÕ;Âvךtχw¤´Š¸*ČXgŋúûÕ{“â‹-ĒéVēŧ1p&EÛ.=™yĪáX­tLĶĄ iŅG8bŌæFí+ŒmÁ#ןĨLš]ŗ4eĐ´Ž~ūü3´Y“8é€:ã?JKĢhSÜFŋhŧŅĻR Šå|ČÛ8,>nžõ}ĸšÖîŲ"šĩ,K=•Ã7'Ø$søŸj§u¸“EI´]:íÔ€%Œqą•\Ž2I'h$ũOŊŠŋŲ’“Ė)dG‘x„g9!×ÔúT–Ū ĐŖˇš×U‚úŪ䐘­Ęƒ0~^ĩĄĄášai-EŲž\K ÜØ˙h cņĸķ]ÂŅeė›FË,$"ĄdTq¸†UČĪLûTSx~Öācė$‡…ŧaĪ¸.? ÆēÉ/ŧ?¤Z[N֍ĘßģSošķëĪķĪ5mŧMŖŦ+"ŪÄdu&8X„rGđāô9õ¨įžęårĮŠÅ˙(˜ÚHø;TyXŨžģ‚žWōΏĒWz Á*¨ļDS‰!PX…QÔáYįŸé]QņI[ãƞb#įI†+ũđ.W¯ ×ŧIĻZÛÛΖ˩I0ŨíÅy ¨×4Ôę^ĖV…´9“Ĩ-RHv>S# aĪrĀĪ`qüĒėL¨‹3Xē2§Ęl#ŋ}k{Þ$]KP62ØÁ æ=įÉ'o၂:~"ēčÃYc#ĮĄüF}Ē]N;Ļ’ÎKXcyŌSĄ€Vę@8¨f“WhY.4ûYõHæ˙I å5.ūÆt–ĒA ¸˛{ãŒzô§ø:+ æžâE§ąåÔ>§×ۀ?›qÍ|ewZeĪ‘/ !d§ Ī#܌ũk™Õô•ˇ–K‹Så\Æxa€?¤ņŸĄô­“ēåd8ÛTz ;G̀;{T3Î- ũãČvÆžøÉΰ5áĪJ6‚ņR;ˆČŸ”ƒĶšūuąvĢö÷EIŽęŨʆæũ?ZÅÆŌŗ4ŊÕĐķ ĶŽã|QŊ5Ûú‚ZHå“íKo8ʖGUĀp:ũĪOō,§–Ø`lŊFeI.|YÎ~îxęy?…$GˆtÕ`ŽaÔaŽ@Jîi?Qß5ÉAŠ^X]5žĢi:ĘTL[ōĮ9ĮC‘^žPvĀČŦũ[EĩÖlZŪę<‚ĮÆJQW –Ō[(ßTsą\ÚŨáŖ¸‚L¨mĨä{nÚGũôMiGy$hąÁ.{‘Ë‘ų(Ô,o|5ĢIhí\HÍĘOQ‚3Á÷Įĩt:N¯Ûķ%z—qæu >>¤įž o*:]= ŖSŖ;Ķ40âV°# UØzōã•A$r™$UÚŦ Wnß|œįß8ĒÖwQL0ĸHŲHBTú6ÁœõČŠŪ6û0šDˆÄ–+†ôûîÜūš“ę[ÄC6ô`r~i†=˛8úŠ”0VāĪ-†vä(ÍP6Š ųjōršoŗŠū ŋđÔæBĒÆ(œ2‚2&Č_ĄÜūDŅ`šqˇšcŖļ?Õ8ūf°i-._ēõ9WŌbģÕ/ ˇ-¤G.Â$ũÜjxÆG'ļ=yŽĶÂtzeÄ)9”3sĮlīÔ×1y$ļšŊåËKų'Y"FŽ ĄŊ8Á˙>Õb,GQ•ŽGĚ|s B‚Iīž€}{q߯¯¤RÄJö‘U(Ģ]fŽŌÆÍš‡AŒđ:Ã˙­N2Œ)l÷8Éé×ü?ĐļŌÄÆę"ÁBÉŧ˙“ÖŠÅnMč…Čáļ~œO~üfēîŒ,ŅnÂ1y1FĐŲf=í×éßׯ\ڞÂ?/ Ɍ “Į\÷āžFzgŸ7SœøõŪ°’ #iڈXÃ<€Oļ|gĨQû@”ŗ C .pđä{}ZU9â/0#íÎ@#ļS¸öĀĒyGrx/&°¸KÄũÜÃ'• Œ­÷xĮ~ū•éVWŪEm~IÅõüOJō„”ÉpͰЎͧvōã"ģ¯ Ũ‹'ėåɞÚO1A$™#$V˙ĘŧtšĨ)kcĮŦ*Û+Ŧ2@8•ŦäIÉû×4â•æēŽ%wQü@ŗgn2sĐzŌkšũĖöh¤dEp8ÍAm(‚õq(8,dtį/nŋūǝĒCēW`s—;q铸Õ$šĩnÄ#Ėc’Fyį°˙ëUąfFĮ/#"Ą°€l TäqŒ‚}3Wô]BįJû‚L €€sųqU/"PĻ6Kx¨Ų(ß3Ąīüŋ*E‘\ĖøÆäÜ=}ĮĩSšė´ōŗČŌ $ŪFsĮ_ķøĶÖę"¨š)‚v¨>ßūŋ˙UvËÎ΋hĖ‹œGˇ‘ė í5Ŧ7‡āÂ>ūā× ģîb$áTîį×ükš×ACŠ>ŒH’“ũ+‹XšCf]ŅĮüKîÆYúŧjößö›ōĒ:B…ĶbÁH'“דWr=+š[›­Ž‹åp2G'&Ŗ989įņMY ‘ūpaˇžZũöŨČ?Ä~•‘b‘špŨRBTģጜšœ°cŒ6ĐsŌĄ$ƒ’Ü`õëøR ‹€}yãúÔ Îė ` ¸æĻ™˛Äwc“š‹¨ĀJ D|Œ}­@įƒĀŠßnHøĒĖÁ™W<2{RHĸV$A€ĀįīX—‰„'jÚex8î+"|IaĘįZKqô ĶĨŪpTŠūuŒ|ô.ŖfÍrGÕ/ˇüSLySk fŒĻũÖMâ@à m*áā8ČĀ ĄN Éî{ô˙‚ĒäÛĶŪ­Á9¯%ÕNÃčIëųSbа!ßsq°ļÆ-ĀÉÆOluqW/m-­­Č‹Q‚iC*”‘ĶŽđB÷čS]€+gj ô<€:õ?OĮ5™åŗFĀĢtぜ`ŠžĨt#¸ļ1ãÆx$8ĪLuĪåSÃ"ܸ*ãcũĐzuÆ=ztq,ЅB<ÕûÜĪp õūUP†ŠPĀäd0õü})ˆô˙ kķßĮĨiÖÅbŽ‘Ž@ęTr#ëĶŌĨŧņĻĻíoĩזQŋyĪBäqīßņŽ M×.´P^ÛHTL¸p9 ž į=ųŽĻ÷5Ũ•ÄļĐH™ō­3n xĮđF+’tŌwhŪ3mXŋ(fŒĀĢ*üÄŠ 0r1—ĀøÆzyŦ ×Wž@ÎqÃ§ĪOĮō­™5F••‹gd’Ŗ0ĮBYPzzÖ&ĨIS‚3Æz}Oŋ § ÂFĪ…|C>$Ņd’ˍÜÎ#Æ>~89įJė5ÛYYųĸ2XpÁžc“Ų@ûÐs0G<âŧŖI¸šÚæį뺈äu–Æqœœgč;všm¨M=ĘC{s#‡cČËķlĮ#¨ŨÛ¯OĐĒ”“wÍĨcR.­ļ=OKW\ãsÁ´ČąūTË Z]3]øgR–ÎāĻc‰e;I“‘œŽzvīQ[x@ԂĮauv˛ģ”O3a2`|Į ~9öéV4ûô)ĖNŪ_—>ČXŖœch*žųÔģ/…Ø­^ú˜×ÚžĢĻO%–ŊĨ¤á‰AŒ¸īdpßR aÍ6,…Ŗ jįЕĮâŧãĸŊ:âHî k…$åŦöřAãŽæŧ˙Uđ›,˛M`­J§p”AĪaéĪŠ>ĩtįē8žš‘E6¨¨>Į¨5ÄJ›Bą õÁäņÉęZYĩV+ĩšˆ˜vŠ'¨ÎwwüëD–ĘåŌd1IÁāƒũkJ=^â•%ķŅštqŒũ{~ŗc+÷%‹Äˇ6×*č¨Q#Pë¸`uāž 9éŠģŠmŽ!Ũ,đ2št•¸RHÉ ô U^ãO7]Yl 9x”ļ>P? Õytũ>áZ_–nÉ"‚G°#“˙|ŠMEîŠNKfu0ĩē$SYNŖc"Ü#wäa‰ôëŪü Ų°Õ&ŗ”Î×O-Đ-ûYƒ8.ĮƒĪĘđ\Ã,VķÛąH^goŦî‘÷[éøņĸÖņmįˇO5‰D ˊ02§zœŸCŸz%ŅîĨģž)'Oļ–E+ėrõŦũšžås3×,¯!Ô-VhöÜ0VČV‘Ö§$¯8׿ZnŸ6›píÂŊØōŲLŸ)Ü6‚8ĪŽ@ÆA˙ Œ>Õf˛ˇšŧÔcÂgųCŊŗ<ūĩ—˛ģj:—Īey‰{hgF"GČå Bã͌ķõí\æĢ-Ė'eÆé0x+Ž9ëŨ‡ũô+ĄT†ëG‚ūÕ É:îŒĪ|įéƒųVF¤R]Š5Љ×dˇ-šÎ7žĨŨXåõ *LOKŨėcyUū5÷ôö8SZžņ´wž]Ĩá+! d–īœļ!KßŧNĸ9ŗ„aČ'ĶžŋŸzäĀw¤gRĪž3ŠÚŠmАG÷Bō>œũk/KÔ-Ö5e¸+rŸ0āōųzzČV”ˇ-åiĐŽÜŗßÄ9`A'’zW;VfÉĻ:ÆĖÜȀĢ"/ÎÃÉÚ0Ol¯^:ōyëY^5Úˇ6 aR5 Œ˙vükĒĶ-VÚĐ(Ęŗ|Ägē\ĪÂ­Í†ā6į O§˜™Īä(ƒ÷ФŊŌŨÎŗs-ĢKl‹h@g“p'ˇ_ķ‘\EĩŧēÎĨwwy$…SrŖ(/’>ēÜņˇT°˛*䍡P3CĮÎĒYÛ­Œ(GÁw Crr7p:gŽEkƝbŽÅ]Zââ5ōá 6F$d‘~iU?ŸŽN+}íŽŦ4ųĸžs-ĨōļōŪBq͌—×Ē2Ā苸ŦLce]Ā''8ãrúõÚšŽKPēÔõ MOq-Ę/–>X(ëŒyé×5j<ÚŨŽĢCs&•dĸ2TBå7`Ž8[Ķ=ĪŌ¯Û§šąŖJĄ<Ī™p2A(āXĐũErú^¯ē%‚&‘H@dJp8e*yúõŽ–iĨšąM4¯Ų­dĪ+Ē“čĨ†ÁĮ~}DâĶ*.čĀņ…Ž÷‚ęŌFÛ ’qēšõČį5ÖikũáO´žWB—Ú3´wüë•Õãt›lō[ÄĢ,°bCã%˛ˆéĶ<~5čpXĄĶ-íIÜ"I=ņĮ>üR¨í‡Ģf†íîÚįRŊ/ŧäĸˇp3Ī~ĩÂëWßmÔnËLëJßŨČÉĪåúW°ŧą”^õĮWę¨Ŗ_UYcqĘõb $ú˙‘éNƒæ“bĒ­‡ęAĄđ܌Įíq&p;+ž™ūuAī&ąŋYāÎYp§ČzbŽjø:B ĀņxÎNBˇQũáڍBŲe‚O-ƒ?ßķœgÜįĶŠúŽ•ŧvÔÉųzGŒ¤’/Ū‡Čzg$q˙ęĢZž¯ņķį…ęzqôíūsį0ļ֍ŖŊ:˙ŸÂ¯#‚/Ū#sĮ`O¯§øRtbĐ*Ģ3^ÂeŲ<„ (ã¯L‘‘õč?JŠBŸn†`ÛžW  ;dcĩA5k ‘ãæ$ ŒdwĒ‘ßJo"’Y(nųįŸjĩ{“ÍĄĐČá¯6ą-‘÷[žséųwĪšī+dš*ä)9$g-“ŽŖÜ~œŒŒV}Üm4ÉSø{{q]oˆąũŸnGB͏ûôõ„ŨäbŦ™KÚ4Ģ^1˜ÔįđĢxoA˙|Õ]'H´ã'ĘQŸÂ­e}ķŽi-Yēzˡ,ÎO\˙Ÿj@ë•RĮ8ģ+äsÍ /ēcŽÕ‘ ˛nŲÆOzĻ嘌uĮjļĘĄr}ܞIÅ@O8ā÷ĨaĻW+‡lįG˙ĒĸÉ$–ĀĮjžQ•,G¯­Bā ōF:Ō’B’sõĻ}æĘüĒ:â!Q¸’OÁæ™Yœnã&˜ôˆāįƒÍcŪą8íŌļ$ °7jĸ$FųÍ(î_AļƒĶ¨ŦĪ:\đĶÆ1øšĶĩË ++Å˙6‘ŊÂ˙#ZĶøŅ•O—|eŖ*žōŖēÕËĸ#ØĢȧqU s’p=ןÑÜ]?Œ[:T@äî˜(Įē°ŦO°mąķ! ¤ĸœ ËģÉÉüúzŌļĻũßR8åt ĄW,mĮįĶßÔU™t52#ŧ ›ažøãyû⧡O6r™rs‚sŽË}zúZņĮˇi‚9Îîūŧ~ dwœ¤ÖĨčb'ƒŦ<ƖIf*'o>įøŽ:Ôŋđ‹éPš&Ä|Û Ī=šĪSÉĪŗ ŨFų ÷+ˇœčWˇĶ#ØPv¨R‡ œŽ öÁÆŨÁö¨ö“îW$LŸėK1 }š%X΀ščsÎs‘õŪ=ÅJļĢn<ŌŧĘģK1ØĪ˙Ī#Ž€°ö­$yˇÎFx?^0~ģšŠ#˛ē.ĪĩÆ3ģ'`>įüūj9ŸV1.āY.Ąļ†!Î]Blā÷áyáXd§ë\¯‹īëWŠūbCg“î‡@:~UßŲé‰äKŠ]^$p"3”Tēčp{g¨äšōkûļžŧžđīŨ;’ģ˜ąĮa“Î@ū•ŊzWėeWEę430rʼn'Ž3ô{ö¨ŽI2NŪ‡žŖÛ9Ĩ?ēˆm$;|ƒúgÛü(˛ÁJÆÄô, ŽĢn9č~”ŠíëŌ§Ģ'ü{Ģž~Lœ7äsZQޟb˜ģ$¸ûŪL`üžÄ“Į͝¨ĄĘĀ‘˜Žá•¸;úTŦÛâ^~SĀ'¤ûVƒŨÛ\Č;KXI?u™¸?\`õĒeĄHĐāĒcĶЃ×ßĻūCąšŽŅ8#?‡\UŠ$Že‰'ŠįŸS×>ÃĨG,N|ÕōÃdŖlᇮiđ§aŗÁĒÜD‘áŸĘ•€VānįëÚˇt]NM2āŲKĨšųyNųįüāV ēČô ČÎ9§ĖĨrr9R3ĮéīS$žŒ¤ėtĶ]j——ŪPžáØ}ÄG8ŌĒŪŧq/nĄwôC¸Ā U;rH"•¤ŒĮģŧŒzŸZ§",áFIį CPĄ¨Üģ ĄYâ™ŗĐ‡BAŽ*eģĖlJaųãsŒū'ŌŗLcnGŽ9ŠŦŖfģŒđ` ôŽ}šĢiX”ŪÅÔēhY‹–ˆŒŠ’ÁįĶ#?…lYx˛álĸ°’ååˇāŲ&šgR-YF-=M|d€HۃŠā`xĀā˙,{WDŠ6Œ”ŅŨC+Å46Æ]Bœgœų'ķÉúŠžK˜Āŗ7*e‰äMÅØŗãpmĀ7';qĮ1¯?[šRHœyLĀæ6Ú9ö'G=lV¤w÷z]˜•æešQēˇg`'cv8ūRsÚĄŌ-Lę`>v§¨Jˇ–#ˇfEÉĘ/Ė~éčI\îw­M4Č&Š7gMˆYUAL{ā:€.ŊMyä—M€3´1¯´ļO͝#ü*x –âædk‚ąŠ>|&PGĖŪŊž:G˛îÅÎuÚĒÂÖQ}ŦJmc4āu änjšä‘Œ pIÅwzWœtģcp?~ČĮP įķ¯)Ķ.T×´Ča‡Ęą‚AäŖ)%Žá—oRG¯W­´ņ$›E zØĮųÍaYr¤i;Ũ‹3ˆãiĻQ^KząŪx‚iTpĨˆSœ’sĐqüŊ:÷ëüUâA—,0 ŗ€NîzŊÍyËZÆÎĨå ŪŠ*üšīĐũ1ôéZPƒI˛jÍ7djë›}-2 Mq+La=OmÅÄqų<ķëΝ_Ėū=Š5k“i–ą‚ŌÁdŽ{īš§f%ŨĤ%?Cœį°´cĻĻMģ‘á„ŌylAØãęp?ĪéVa…Ļ$”bG8e?ā}ŋÎ U¯؋ũv@`vãĻ{VŒH`mÛ6¸äüĢĮ˙ĪõÍļIzqvÛÜ@ˆÁü*Ũ°ü„šā2qƒœúsÍ:úä5Ãözā~_įōĢH–ÍmYíä;”˛‚ n<§­M&¨×h"DGA–ííŸķ銯¸œ€sŖōŖ# ˛Ū”rĢܞŨüĻ`^Uęp3íÖ­ŦË%sΑÁ˙ëvüĢ5^=Ē00ŪĮ§ų?JXŲՋDØÂåˇƒÛŋ֛AsMc!„PK ú`ō1Ž„ôũ;ČHŲæŋw%ø=ž\‘Ž‹×͜tĒk“xÛ°ÃÆGž{R˙h9d_1I ķ9ōąSf;—ŗnáŽpÛX€s‘oūĩ2M<ųnÁ‚0xīũj!Šą+yōūŊ:í--â]:0ĖŦ›ysČ'<˙MD¤âTcĖr2[ÍoY €UČ?)ÉÆŪqØÖ|÷ +6_ ˛’:g¨ŽúâÂ)ŠÆ21ƒŒã ûLõŽ/Y´[;Ŗå—õü¤ĮCČė)ÍI„ãbŠ“‚Ä Bīč –P0Yžaķũ}Ô{Ô\:āËgč(h,úƒģą™cĖfbÍĐ ~tæČ+“ןŧ0ߍDŽ(Ü@=˙Ē—æ“k`ū¸ūF‚Ë9 dē‰3øqŽ?AļŗÂîŧŒg’Ë–Āü‡4ásclĖ#ˆŨq€_åSčqÔŌ­†8HŨ‚Ū#$g¯ųôĒ€{įëÖĻēš’æw’Vđ°ĀĄ"'•bŨž˜Ēč&D;NéJ$ÊîĶÖ=ŅĘã•ĩc§ÃŦķD]™CÁ÷ä ™Ī^4¤ŌM–­<=ut…žĪpЧ9pãĘīîs“ĀŠîėlÛF‡2ÂąŗĻGķ[1“Žžßc隄9ėÂD‰€E†f9ã;Cœō@Čk+Åvˇ)se=ãD‹<@Ã|4|ä–ĄÁŊ1\˛ŧåĘ͕ĸŽĮņuŊÁŽi%K‚ÛCÎ0T˙yˆäã¨Ĩđūģ&Ē“$đ¤FW <ŖyĮš9ėfŌ-og’(¤lˆÕ ws´įå^=sČâŦØk’éÖÛA;DXīØbNNNF88ĮˇäŨ(ÛŨ›ž§{ĢȲĮnpŅK0=;œWCŊJ´ėĮHĖxõ ų÷¯3¸×n˜ŗ:Ä@<úœļGAÉįŪ }VõΚK‰2mb2Ũ yôČŠXvúƒĒ—CÔ\ÛųŊPž§îāúœų}yŦÛÍ Nž=ĸVrĄC}ĸ<`tųJ€+Īã×īãB‚ōëh=VéųôįŪ´!ņ…üQōÉ"'ũcĶ=ΧZ~ÆqÕ0ö‘{•õ}ãLu‘^&9ß ãëƒĀ¨­įˇŽP“ŠŊātį‰Žž.ģTŠ;0ŒIģ=?ĮôĻjϟtŌĸYBŗIÍē6ôîWŸ­hœļ’!ĨēdZåÕ˛ŲiŸa—f`ß7^dÉ ĮÔū|ᤂ@ĄåG]ã*Ė0 <ũ;ūĩĻŌ[Aų’yČĖÂ2 *¨g÷˙&ļÅÍž¯ĻCė‘“:ųE†R5'‘ž‹ßŠÉ㊤ųDõg; —îYĀL&\—žūœúR ĮXcxēeI8õĮãM´Q3)ņĪ`3Į1črĨgģ’ĮŒôëø ´¯Š7ąˇg*Dūe­É‚@0ĄĀ`=šūžší[Qę÷ĒÁĨ‰pĢ‘%Ē…“>ųúÖ¸ą3do!‡N}*ė´,rJ™ę§%I?ׁS( JĮUq ÅĢ4w3HÛ°a‘Xû“°qôæą<æšįpˆÎŨy9 ķp¤ĪsÍY[ÉɤķfDfų›+ļpp=ƒwã–õĢVĪo,jIHĀ<äō{wΝ]ž§0´+rÅ ĶūS%›Ø3ZŌ]ĮŒōQ‰?}ę헆4íEÉw<áAĖ•Ėö ũß^qYŌJZȧÉpw(Įū:~÷p:ƒÜ‘W3Į$RÛ¸IŖ)QĶåėxéĶ#§ T4ŪĖĢĨšŧžŌ°w;îŨ“š×8ôČ~š|~ ŌÕ_˟8^…žüšĮ§?–jîâK{ĩK{…Ųpã‚Z@Ž}@U cô­‰×W’#ŸŌO™†3îŦ%:‹FÍ`ö0!đU¤ žKu@Ãī(Œë‚͏Ė=iG†,÷’˜Y8LyˆŦ=1‚3ĪšŽ‰˙ĮÆ\&XˆeôÁÔrŨȝ–@‹Ô¤ŌČâŌ’œŸRšWCZßNxåM>âčDr‹‰ˇe$gšĘ¸˙„ĶU’æRĶZ[ĪŅĸĩqĐÖˇĶT‚\!ŧŽw* Vģ^_§­ME(ܲB9<*BßĻsĮԟ5ē ×ęsö—Ú6‡ u}sĒÍŸ.;qˆŖc÷°=GŊ‡Ä‰^ŗZi“Ãŧa ¯ķtëųÖø˛ŗ* IŨ„Xąģ=OÎ2~ĩ<‚ЍōƒĩB)$gûĖ}q֎h^í\V—Fye֓Žęˇss ˙ŧų—h<˙õëJËÂWVĖ.MĢÚŰÃi#Œā˙œ×¤=ę>Îą™HžV gŠũæ1ÍCzc–ŌH­įxŠ/Ę;Žl“ĪĻsWíäôBöQZžoĻxaõ;%šl^sÄAp< äđG­j7…-- Ũ<Ž"PÎĖČU€Tf%„đIæ´<3uöÛûpæųą•V8įēķĀ8#5o^’C§ĖŠĨVXŲ m!SwRN1Ķ=Í9T—7(”cËvsqéÍo‰U'’â^B\@ÁõYôŽ:āTÍĄBąË%ÕĪ™tHwiT0|ƒÆGNĀúbē]>á.ė#ģ¸@˛7É"°|pCÛ5m Ūėč3ˆPŠįŽv“š—QÜj(ä?ŗ-cšu1šY0댚!ˆųŗĐuįļ=hˇĐgÕK"íļą€Ē´—Y”77sŽĀ`{šÕ—Kc­[^Jļ’) …ĪĖ΂FNvėĮ°¨u}ŽũĻūåí“,ļūfČsĀsT§æ'gH‡K´ĩYŽŋ|¯?— Ėį‡#€UOĶö­Û‘Ė1Ŗü›ĮČŦŧÃč?Zâõ /õmÃč¯%ŧAUnį¸Å;Qņ$vמ"ŧļî‚( „HĮnüØ_ķŌ˛pri–¤’0|GēÆū%[ŒÛ̇Ž>ICÁ۞ gųVn™ÚÆŽ–jÜ<„9@ÕĪĖ}°9ĢzôIOšME×˕자JįōâŽé0Éá­[ɝCQĖV°ŒePõn=Ĩu'hy˜Úōō2/īaoęÉšŖÎČ@lp:sé€)RîŪ8Éļāg`cíÔÎ?[–žˇuķgO9˜“!ķTōzņÎ9õ­ƒŖÛĸŒ@Ģ€˙GQũFMKŠ rKs‹70n+Ŗí9ÚGLútôę*Áx&RĘ+Œ•äs×üöüēWđ֗3æk$E# P=KõĒŋđ†éĢ+‚ķ.%UÕp:āáÉõūtŊŦGėäq°…^1ž ĀëÚŠÃcs3 E¸Ü1ø×¤Ûx;KYpËewLĖ ŋĶōĢiĨĀždkŲ‡%TúŽ;_Z¯Ŧ%ĸ˛osÎáĐ/3—†d;CŨä~´ų4 ŌKI6Œė›Īl“Įã^“ũŸŧž\q•bHŨw3gĶ%G>*Äēq‰Ûķrę2=0M;ûä¤XQ—Sō—Qƒîsúôöŗeåō¤VÎ*ĒzãøAũ? I,īWŖ}ÅA.˙ú ??ʏŦ1{$y’iWk€>Bü‚YBÔcëÅ"i×.㠝͸+ČHîÆŊ.HeōŧŲÚUQōw}÷/CūMTŲ dŒĒķŒÂÄ~ŋ ~Ũ‡˛Gž=„ČrĒ팸;FąüŋŌŅ%ŋ°ŧ†ÄnÛ\Æ7`˜8Žš­íˆÄāœGūœTOl…ĨœŠÃœ¤ ûäķÍ7VęÍ BÚĄĶH`ššÜ)3Ę Æ˛g ęáŋSø×!â9ā@#SšA æŧ0§=ũë¨Ŋ´¸ģ,a'bš•-Îņ÷XūŋãY’xig™ĻŊš’BN3ą—ôÛÅM7ģąÍ6ŽB(攐‹{ūqV“Kšv%ÄhĒ71,Ūŋ…ufŪ …Ŋˇ’đĄrĮŒ÷j+Ûfx𠃟šē8”ŽügúVŪŌæ|† XČ „•Ĩ9ÆQH^{dôÍ fc`ŋ!<\äąūī˙*ģ9"]ĸÛō’Ē[húˇO¨ĸ%‰s#ŦĻ\mQĖ‹ČįG隮g¸ŦŒõ„ŠÃų–MĮ§<ãˇøTĨ^C!b¨äÄãÔgĻ=ęã˛HŦUL„Ą€8ú˙1OG˛Ÿ3Ÿ}Žâ?ĪJ9‚ÄvŅĘ=ĀãË;\1“×đŽķÄMåClšČ,G?Jâ!*n˜ĒŦhdd@+˛ņ9Ũ¨ÉČsĶükŸ4Ž‘f­‡üƒ­Gũ2NūÂŦl>ĩ ēĒÚ¤cŽ?*›ošŽWšē:0ž Œg įō¨ŖpIĮ$`ŌžcŒū4F č§ĐõŦ™¨ō7}Ī­A¸ō{žp?JuÃŋ@9ĀųÔ2d€Uˆ…+Œg’NHõǧ€MXå˛_’88ĒųÁ'qÎ0xÍ1Œi03Î0HéB“@ūT‡q'wr}hMģ†qģž;RiđÖĮņ?Ĩsw-—Ûœ×G#(Œ„c5Ė\nr}¸ĨĘčYĩ8ĀuŦo°û=‚†å§Æ?é[VËōzĘņ2n:dgū~:~­/TøxŅw鑌 ų¸˙ĮMr—Úl.$‘bāüÁ–2˜ôqGZëŧ`āi1ļîDĀãÆądwgË$lûÁ8Áę#>ŸŪ­čĘŅF5Wŧr“ĩė‰@ëh÷Į™īU kĢ ˆĻš)ÔđN§˙ŽēKm<Ëk‘ŖoaŒāōü§€¤ööĢ&ŌLåŠmā2Ÿ4ŪŋÃÍtķ­Œ9nhčž#˛HbmC g!ØŦ~Ī't?ėŖˇnÕŌî’Ō´Y\‰íą¸0;Æ=Ā==×§Ĩpécc'›n&‰゠ŽCpØŪOēPč熭áŌÛ6I3 ­ąĩÃ;ķŠÂTÔĩ‰Ē›[ķĘæí VqmmΌätčšüzœ1ßÍ|Sâ‰uë %”G ū/sūĒMRÔŧA3;a-#ûŦ€…í’ųĐW=-Ŧ°0YŒôĮĨJ:ŊČŠQŊÄņڔ`§Š™íf&HĘņģæãÛ֚°Éžœväņ]0#ØIĀĮãF͓́ŧ*Ō[Iŋc**xf‘õ<ʤ[RÜųsí\*ģŧąÜž1NãąUvŒ÷āķĶôëR‹Ž˜Ęž2rsO–Īc2¯Ė*G;ŊqĪéÍŌ7 NO$ŖņnžÔނ˄žOå)9ųkRĪFÔ5U/ŧŌ)l; Ũ0z¯oiŠĘell%Ôg>ŲāûŊŌØÄĘĻę8ۀ–÷rp:œz™7Фģ‘Ũé3ię­{•Īq9`;ßôǚ~•yĢLŅXÄŌ* šŸSĶ'Ĩ)™f•Úųî›h(?BIāU‹}FŪÕd‹mĶÂG’îį¨{Q­ŧÂĘäōiW:l*na導`̓ę2i,ôk‹Í;í2!VØYI##¯ŧŽh:ĨŦņH§KDaË$j<1ÂôüĨgxą[˛IngŒØ-Āā˜?OŊaérWĶUB˙ĨrNcd~Ų×~U\ŒsČԇR€ƛÉ*ÄĨ[ļņvŌūÉļu8 Ž_ tÚ~đŊŅ‹ŖČ#YCˇ.`sš>•^E/°L㏚äVŠņbHĨ„1AÛD{ölž™ėr)ŋđ“Ā× ōÂ ˆÂ€?•įدtĄs§Mk‘fŽXÁęĒÜúŒÕ­8[ģ€ōÛ9ÚP3Ęd<`āõÆAŪĨ…´=FULM` üŖ?LæM\qĨ"Ė$ž?0Hc¸‰ąĀÉ` tį¨â“–€—c2EDˆū<ʇ9F%5ëî?:lâÆö9'–úk‹ĮrJCl}âH^õvīLąšXæ‹Q†%ņ` ã$‘ĮåIšū_—–×Q/˜B´¤íÚ‰HĪßīÅ$ÖáfQÔ.ÎŽįē_2T˙HH⤍ÁĮšÍ:?´ _0^F9vÆx8•RžØB);FX‚1īŽüT–z\÷ĸSåHžV71힝H̞HG=´ėÄŧ2P`€}:˙úĒĢ)Ft*ëœs Û ~•ŅXXOˇ_ļÄA11—PH\āwį&ŗ/ŅÖsįÛËlIÆįņųIJîÃŗĩĘ%W ģĘ'o8)Āü3ĪëRĮ6æˆÉÎĶĪa÷xëڝäNcg@YT|Īc×§ztrA˞‰X|Ĩd sŒ‘øķTHD¨SĘ.Š„l$=Îzg‘ëôŠ&uڎfÃÆ2~p2O˙&ĸ[šUļV2  ”,@ëÆĻ)âîō0Д‚Í>¸Ü9ü3KQÜjFĖ“*0;€?)l`}A<}jcįr„fämP¤cˇwĻ›‹\ŦK‡<dž+ŸĻpO֝žęWŸ,6ėmXN{ôŠØ.W¸’YdÜÍũæ?ĨCŒôëū}ëIãHŃ8¸Î}ūī?Z|ÚĨꇊE°8fQĶŽéNâĩĖļ‚AŸ”íŽ?:j‚‡#ĶvĢÂmBfû‘íëĪaÍ7ė××N7E$¤˙=(¸ŦZŽu:qˇeŖmäūg8út¨Ė“DÆh›§+r§ļ÷Ē?ėÍI ˙@ē }"ođĻĩžĨlÃˊH¤€/|ô4´ßRĐÕî%—'ĄaÁįļF=Xsž KĢHIĘģ6â[šúŒ~x–įĨfI<¯÷„{~ ˙<ÔhC Ū9ãĮڎT>c}îc‘U˛n2=} 3Á­3]ēąCte…Gúĸŀt~ æå˛”Aį!ˆÄs˛+g“ü' ßŌŠîØŲÆt˙’;Ôō&Ŧ>fÎŪįÅēĩĘyac‚ wĢF›Ęcܜ~†–ßEÔõR—3A.ū’Kz$={*“Ļk“{ŠgHÕKã#ęOáū:é´ f I–{é#äĩø°9Î}Ŋ3YĘĢŨE'wŠĐ[ørk)UÄzc ån>a‘ÎĩĸļŗHdŌŽíÜŋË.™3å˙"úd×3/4Ėũü§ŽL‘’ōūu—?Œm ļŽČ@i›ņûģk/gR[šsÅlÎäM,dCzëî"îU@ęĨMms,Rųr Ã(Ãܖáƒ`‚ŖŸēr äpzW—'ˆĸO!ūĘŽč[s>ķģ#ĢvëZēŠ--T}˛J XÂ"c¯,KsĪaD¨É Ug¤Ë)ÉoŪĄéŧ4ÄĪhũ@ĒhV,pIõy‡é™ųV]ĻĩĨ^0 FŦŊ7LĒqé€ËüĒ˙Úwc˜6x į“ų!ÍsĩËšĒ×c#SŠDŊļXeVš2y– JĨUš,gp8œņŠeĨáÖlŽâēˆÅ{ō剔 § 9(qĪŋøÔúŒļ—Éö;—w Ĩ“kúō:˙žkųī4ë”ŊIâ‘ĮĘōų„ģŽ‡~ãŽG5´}ån¤=úSÁo ÚŨEn‘2ŨĮāų$0ÎyĮ+ŸåÚ¯ĖĨXBUƒ‚OŲđ˜*JEe[Ģ霴,˜ĮlķĀü1YUĩåũ˜kk>;dûŅ<V>ģ˜Žĩ_UŌ5+)Lúhĩ|íxrŽÖ#ۚJ:ÚáĖí{-ƚË’ dlu Xß8æ˛ãhˇģ )ųŗHö1ÕM+ÄĘBĀ–ŗE/ņŦP—>ĄAO°Ž‰ícÔQ!1Īí2BÅwq‘ŸĀô=?ZM8é!ĢKc_%׹ˇQ–Ø8ú_ĘŖKxĢ$HX¨LC‘éōˇĶЇQ—QŅT ‹s< æG+ëß$ĀÖUΈ#vōʀWīÉĩđéúįđ­[Z'mÍ[›8Ō-‚$°ûĸ4RŲ¨!Š)"FF>U“čsúÖ0ÖVVyĘ.îĻČĮ8îvķųTsę’į Á‡jĐ1ŸĄ­$C’ÜŌ–&{‡[iÔīû§›đå›ōǞˇĀcnÛÛįbŘRŽ@ũ*ēę‹(R4$Ÿ°Įįū44ŅĒ4yc)âLƒÔˇũĢIõ&čž?(ģía$Ē2˛ Ø ƒøb”Į2‚)3)ų¤Á€ĪëøS79¸XŖY˜ėÎ\˛ūƒõ V5Ī Œ~gxԖĮ 'đ§aĒŋTō˜)VP[v~QžāzzWWâV,-Ā˙hķõZå­FëÛmģ ĮpۖČîOĨtū$ÜÍl˜$˛°wų’˛ŸÄ#đŗp¨€āž”™oAM|…äôéLŨīúW5Î°*ŽOBG9īGĘyČĪ ÁÃc<į 1 6qž >•…›5#“ōÍîN ĻķŽ€ đ1Ú¤‘@i'#ķ¨Ü¨ųsúôĻ1ŒSĪ=ŗU™ĘĻā‡đõŠÉũÛ0=‡ZĒîųÉP×ԐÖa“Žŧ’iĀ䁒zqÔR7˝ÄéNVwÉ=ēĐ0”(į9Öšģ‘ū”Tg¯×AprzŒ‚1øį%*×,Ü˙:#šObũˇ }k#ÄCũ3Hū~GķZׇ1ķV.ŧ?âmŖy3Ž3׿ZԟÄgSáã7 §EžšūDÖ2K ˛Ŧ’"‚Ã9s?†õBkWĮ:Tk˙M2=k’ˇÔgĩ•ņ$YšRäa‡\åąŸŽMtRāsԕĻYĩq“ÚČĘHČ$*Œ¤ā‘īž¸¨ŽŽoI)§ĀąFx%cBė{ÂįÛņ54Ķ­ÃŦČŲ¸tØ ‚AägoLsŸöj­Úŧ´I> `*)…uë÷›ōÅl–ˇfwčE'ö|_jlθ"ÆFˇĘ>Qøâ´%æ™b #G™QʇŖÁÉ=0zõ˛Ąĩ¸x|ųllzÛģŲGŪcUîo!’pļûŖ‚5ŠT`9Ī‚NOãŠĢ\‹ØÔ\šF–ƌÄ•”1댱 \jŋÚ!TųXĮ8Ē3žƒå>ũę˛\}šäŧHĘAųe“aĮ|ŸNߕ>-Irp…œ€­ŧƒí,Ž´ėÂåŖäųYV ü€1-öąĮž1øÕfDUV11ÉäíG×=>ŋáO k3:î‘Øã2 ŋŒöāÔ@ĄmŒĀ1÷`.{AŨĮo֒ibŗ‰Ķįß6㑕#š̤đ…%Rp­áOLįæ,3É› ˙ę€ŪЎŋ3w…ũ)˙hy÷#ũã#n aĪ֝…t(¤–@Yē‚…@lāđ1ō÷˙ëRė`ĒÂ$ØrJ1ĶsœøäĶĨ™\#<§ pŽĖI~;ĻæĮAĪCŠbÄ>Ö@ ˇ’¯ ㎅D|ôĻ#—f*Jˇ—ŧM¸°äËōžū•'Í,ņžYãU ÉÁä‚H?Ÿ8§ou”†Ü‡ŧYuΰhĪJĒŌ¨&9”„“Ąä`ûčhՉ“<HÆč›jķ–;Pä*ŒZylŠĀĩädp>įSž¤Ú#ųŖd€y ôÉã?Ĩ,×QZ—Ø!ÜGËŗļO'Ž€q@h6ā-˛°XH—8u`>Px Ŗœz}j)fB!Q†;ŨĪäÚŠš’G'ËÁ$cuūĩ"ØL\.Đr2vļėÃ>•IwÆĮžVō‘†ė2ÅAöæĻō™Ty„ÃvD€ŒtÉÆ.ĩz8%†-‰ą`I`˛u g#*3žœ˜I!ˆŖŗ°PķŒ•ÜŒ(ã“cIŖˇŽHĖ…T ÉzöP6ņõéR6P°ąyĒė “×wæ§ũäęŪdk¸ųķ/,ÄũãšēûtĄ–i‘ē,ˆ§åĒ“ĪŪ|“ūÎ)\šN[H„lB0sÂŽpAîsˇôāÔEnGÎáTRá‡r2ëWw?šs.Ø˛Ŧr&2Ct÷¨EĘG)š8ŪV_˜ íĪSĐú æÂÅu7­Ā¸lāu“™&§Šö[r‰tžh$†ąr>œS^ęi›zĮ(zäŸĖSˇNĘžÛg^CčÍ4ĩ,žD‰n˛€|‡ üVuíú81Ûŧ„7\嚍`YÆé&räŖiįØ1úÔmm&7ļ3…,ŲĀ8Î8ū’ŠLmļ‡Ã,Kĩ"‡o÷Œ{¸úžkBßÄ7*uß?4NK)ÆrGN Ö2Å$LĖcsˇī §­—< œ“ØUrĻ+ŗĄ¸ŠÜųz‹‰ ?)ųĘz€8?Ĩ_ŗļ˛ŧW˜å`ß4Gj†į8ä`ãúsËYŨ4,Đēõn ĄöĖwŽŽŋâgËBĀȞT¸Ģ68Á/Ë)E­‹‹[”ÍĒ4í1JķĮōːĶļāIúÖ ´ĐD_é?oļē_ŋ ÂĒ˞ßxd{â´.õqcˇŪi IG#“´Ą$÷ÎÁõ?RN­#j:Twr7‡!e$ãœō:lŽœfĨ6üŠŅtđÔr$~8˙žZ•¯ŧ7ʘ aĀ%Ϗ<lW.‚9‹'’…Č*ģwõëģúJy˛Kq™‘Ķ “č2:U¸.­’¤ú#ŖūÕđė jOaoŧû芍ŧCĸ§ÜĶá t?`s˙Ƃ(ã1ŧĒeSœ"ääņÛĶÚ­ÚŪÛAšĻŅÄČ͘÷9FtĶšN9žÅãã ĩ´h{ūéÕ?Ą¨'ņĨäŊZFé#+ũŸũģĻH ˆPx[žq˙~ęĒh/šN‡ršį+tūÉIEuˆÛí"ŗxšų—äsÜ1ū˜Ē—wחļqûę¤?đŽ1ÜooP‹M¸ôčĮįĨW?šWsœß(0°(if‘˛ō#ûĮ5žmôY0‹ŠH06åíäÉĪ<ã"œē~‰*Œk ¤–9hfôĀū|é Fûč–Eg§dƒķ“ĪPx­é4Ŋ gËÖâ3 ŖŒģëQ˙fé’F€ë6Ŗh;dĪ^O>ŸįsĻ,Â'}x§Īđuá[ãIąČŲ­Z˛åŗ—#ôĪŊ/ØbG]—–eNÂĀ^€åŗĮj9Đr3#=>@ įœ:Ŗ,jĘr6āíÁĮÖē°Q;.ėÔ6AžõxŒõį§<Šré— nˆ.ÅVõ\c=Ė?/ÔRįCPlĀi§ŽFhåa‚§å~‡ąūEoh:ĨŌK$‚{ƒ.|ĩ”€Ü€9=I†jvŅå™g܃ë‚.Cw?69ô'>槗Dēŗ°‚Ũ#Œ‹ĩ2™üÄVČ'åäŒÁÎ:Ör”dŦTbĶšŠŽŧZm´B[×k•,ÅXŦJägh^˜ŋ'8ĪzϚŦ2§™g‚XOķ\*ōGAŽ;qĮn'ˆâšÔ,žŅäĖ›>Đžb8ķT`Tž žŊÅd[_ėé" æ8ų>aƒ‘žžŸJˆÅrĢî\¤ų´:Ûû¯ HâYΘ„ļÖ{f;ķג0qíŌ¤OčhÅl쀐ą'°ÆA\KŲ<ŒÁEVS…ÚsܐsQļ”ī¸å(Ė?v"<`ûûtæejÃÚ;ÄēŽ‹y2ŨŒuba$Šįi~*§%ĀKxÖĮ^,Æ%fÃ"ä`™ˆúá\Tú|°Žéb(7™ļƒĶˇ=i Ž&¤XĸR“´}BúŸOΊQKfK¨ú*čēLåīZûT˛ í#‰QŸSÔ{œVüZ-Ĩŗ"Ú¨rŠÁPÎ1øGū5æ¯g,(­ĩ°Ē<ŗ“¸ũ8öĪáéVíĩ{ģ!åĨԍDjŖƒŽÁ—úsĪZ%NOfš]Sk_"F Čö†,¨FOφ/ĘŗõcL…’;‹Â&+“JÆx9 Ėķ^~u‹š ŖĘDe~pÀā÷ôīYīp˙+(9ÚßN9āTĮŽŦŠUĶCĶš¤ĨîmË…Ü‡ĶŠ_ųÅrzŒŅ›û™Dƒ ģ€ƒäíĮ@? `Ž+–ķ8ÁéĪ?N)ņˌ“×  €O?§zÖ4Tv3uˇ7´2ĘąÎrƒn~WŒzž•¯§kĖĘBČŊˇuëĶ߯áĪŨŽzŪô4â;‚9! ã!†đyútëīIå˛›Ë$`g#kžŨ~Ŋ쿉E=ĶļĮgöļTŨŗzōŋ˜Ŋ?‡¸ã‚Õ˜7gtz{ŽŖeĘK¤pĀũkŠņ‚ˍ÷[8ōö原á=ž†˛Uēļ™RtŠ"Nb–7+°õÚN}8ôükSNņMßßš;‚‚Jŗ}ហ…ã§^ŸJˆÂpw‰Nq–Œâf[Ë+¯.ā\G:đąEFfËg''ģ}sŠôģû­'Y‰ Ôm¤Ru¸Đ}ŅĪąā×Ēh2XČdˇu¸ˇ$áÔr€uÜC]0ŠÍŖŅ˜ÎÛb’3ˆ-å¯Ė6“†#Ôcų⤏/lˆŌJNXŗvš_äjš2ī\Æ0: }úÔû#•,y,¸Čü¸­ˆš>čÄÎá|›@Å\ pá dĸgsÔņū5WUŨąJu(Įūœäūõ˜ŒąØnœãۓĮ§4€ÕŌ˛omrîËÆ2=Į5ÕxqšŅqČG?NRš-įÔ,ų9VĮã~ĩ×x„˙¤[žø?ˆÜšŽyühÖ? 7]É ōpiģ‡ĩ Fār:ž 3zz æ:ĻL;m'Î3QœfÎ[8ĩ,ķÎ}ĀĻb9-“ĮJÄÔW?6ܝj šn€ö1ū(øãŒ÷ĒÎAœāõ `Wåۜį¯åQQ•āzgÚĻ9|qͧJŦÜzõÍ!fvv$œ`\PNĐĄp@ô ’Ũ“ŸŌšŒØPN‰ŽržsžÕ€ĢķîäæļīŽÛ7'ƒ‚+ˡŽŧã4DĻ_LíéíŠÄÖž}kGČÆ$'ōx˙ÆˇSưuŒŸhŲéŊēŧŋáZSøŒĒl'ˇfG‚8sž=̃•ĀbĄÂžü„`÷uôįÖŊÄZuîĨl°Û”+œāŒ’qrøO\…›b@FIøfē¨J*6lį­åĸ2ÃFī$! ,Øąô$gŒÔÍĢßŦŋ%ĮNė\‘ęXŠš]TŪYôŲÆ?é“6?B*œÖ7+!Ũk*)ã.Ō>™WBqf’"¸šyÛíĘ÷’Ø>™N ¨V9R!›‡‡x ­žr?ßÎ08ÍBnIæpĮ æBũ:`üŨ=ZzŪīfŪÎdf%Ÿįf9ūķō¸üjlĮt>8Ũ˙}+î’x#‘ũīĨ=Ōú,ČŗšËe$c…Ŗ™I^û>ÔŽ‡fA$āĮČ#ų`ŠĘG=āŽüŠôíUåKvU*ā ę\sĮo”céÍ_Ke`beu*6Žp̓īHƌĖÆō’G\‡ķŧ7šĸčMë…nsŒ˙žÕÕhžMäq´×@aÆõ–P x>§ŋ@zŪ˛Í¤r¨qģåÚėKgwīgšĀ⡛Nh. G(ߎk†Ī÷yQĪéNV’t͍I#šÕ HĒ'•?åĪ'3÷ąÛ5Ÿ}c…įĨK‰2'ŪvîāürprįŽÔ°ŦĢJ%pĒI <Đž2NFôĨqدÅ$O#ʙÛÔ0ōFĖ‘ôįšBĢm!,ˆ7ŦņÉמ~:ņŠ™¤‚Ē1`mq#Š?x…bOJp‘āf9‹ËĒguÎwķEĮb„ŅÂ\”R…īõĒ@„`ŸNjq;?ՂہbîŦŽ>o˜ūĸžĻwŨ#>Q;Qš2p}ŊžųĻ‘4mūī&eƒOēœzŠb šŒĀōâ@Uœg9ā{§5 Å ˛ĒĄÎŌ1įĻ{œįĨ_i'ˇĢKŪsļB˜8Āw=zlČZ,4áĸ ‘(ŸĶÎīŌ„ÄŅIm™‚”WÜ Ŗdäô÷õĻÅnä%(wd8wĮ?N•*̰Ũ %É īV=†÷Šüæl ’y›f'nī÷†pžÄSlŦŅF[풀1ĮLüŧgĻ}3Iēę%+ŧnÁoŪ.FãĶ9į×ųՙ^xäcåHæow*G=˛GO™åĖa*ÅHgËī` 7šlsúWŗÃz^U™˜ykšžlã=ëP´|ęNJŸ˜cņūBޞIŊJüÛ_wˊn™Ā<#K*’La°rrXFōHΑNâąAL°ā…qÁ‘[=ûĶ–îU$ųPō“ëéīWŧR|Ņģ1mØh؁úƒMËl>öŒŽŸŨ'Š0˙ ͏X„^[ģ îvƒÂĩm/ ŊK{I&cme÷(ĘĻy ÉĮ5žæ)>vĻrJäāå$žŸ‘¨ü‡fÛÉÎ#sëaß<Ô´˜Ķ:ŠTĘÆTŠ+a)gDŒXöcÜāƒX×Vö˙,Vˇw21ē˜ d˙õęŧÅĩąŠK}đ“ŋ+•Æ8ČíõãŨ*ĩŪ§öœF‘˜cĮāäL`Ķ’eĻd*Zō`p2Ž ãۊEŒ&æû|˜¨t<ã°.?ĪjĄå§ĘŦŲ9įķéūE<†@ŠY†vį {đ̰Ž\1ŧ‡d×r•˜īÁ™^)ÎG‘ãŽér1ôÆH<{ÕbÍ&áö™Y˜ķŽz“‘Ō˜âE'lÎĀņˌsëΎ¯j,"ΘņŽO–Ų!ĀNzg8Ī?…C Œ°!‹*Š Á'îûc×§Ō’=ŅÆë#áđBáĮSŒį‘ÛõëDė˛ąhōüđy%TĀ9#xÜ´e°­ŗx<ƒčO֚hÉ9(nFxéR7š˛oaûĀÄ1d<œzĒĮ!ŗˇß§üĒ„Į;É`AĪ#õĻåŖã đ:6F=:ûĐ@R3Đ œzĶ—îĢ œļ9?˛Žø0ÉééבS-Ë*,XĶ9ĀہĪˇãšĒO—9#îŨ¨ÁĨ …°Aįëúđh°îj;–E‘[õ'Œᓨ:ô¨ášhdÜQNBđɑČĪō~œUXY×€ä0É āļIũ)Å_”ŧŒįQëúƒøTÛ īÔրÅ6Z%ʓķ&<(nŨēwú`ņP^Ûļԑ#]ÛC2˜‘sÎĶĐ˙A@k<ļ‘ gršÆWŽÎAũGķĢÖ÷čŌGŊU_åūč!öū_IjÎčĢŨY•ŦeˇIŪ9c ž=§xŠõ=;ãügqũ:zgđ5‘DɸvŒq„ëžŪŲõÍM‡rÄöNūfXą¤D+0íëĶÛ>Ũë9’XCyŠUŸąČõĢąē‡ Lc÷Š[@tûØ#?‡Ō†Ež5ķ$ Ã19ROæÜ˙?­ZmnKÔ¨$áĮ#ņíÍX<ÆĨ1ûÐINzŽ8ü*)!hŖĘÉĮW!ÆH#Ļ4Õ#cˇa÷2:ķOq\×ŅAmVÜš;ÖPŦrr~a×5Õx‹hĩÉ8Ų&!\ļ†Ĩuh oB8Įņ/°ŽŸ_˙] a$īę+ Ÿ5‡Ât9=sŠ2?ē*Bvœ1*õŖqõŽS ß?–:õ'ĩ.ŨíŅŽOŽ1HĒL  uĮõŠ7(iĀ“ž;ÖLÔŽå› Žx'< dĒĀP âĨ'¨B}qßXœįžhŽŦ­ØĀõũi… p2Ũ)ß>IP=ĶpÁŨ׹=*Gr#„sĀã&—w_|ޏíA]ü.Ф.Ë'pr9¤Áĩ'o+jĶk>˛ĻåãÖ¯ęEŧŽFN:ū5M PĒÃˇSŪŠl6ZLeAÍs&YåÖ´¤ļG6æØė8r×N=8ŽUņ>‘“Ā|~šū•Ĩ'iÔøJĶŨxĻÂ@†Kkƒ‘÷W$dāgŠ’kÄØpÚDRím§`'‘ôc[1ÛŨGyzãĘhåpęێá…Æ;u÷ĻéŅŪX‰„ĒfáË[1É?ĢæļF|­=ؐū-žˇ;nôWŒúĘ?•Hž6ļ^f€¯¨Vę•~öoõ‹+¤1ĀŅ+ōXˇŪ+ø­څá vd X•wĢ š;‰ë€:ã­ë[ŊÜŠŒôyr$įaĪ뚰5Ī Ü’d†"O?=ļqúRËuü—ZU´ŒåÄJqû͸ĪUãœãÖŖ¸ˇĐŲFŨ)$-‘ĻōšČÆxčzâ‹Gŗ Ëš+?…%6–ønŸčŒ?öZ†}?Âr Ûi {ų.?Ĩ%§†´kŞqdĄȍVFQÆx=Č'éUoŧ9Ļ[¤eˇg‘å.^žƒšk–öģļŊåđËćÔÜ"jÄ~đ¤§?iÜ=čJ†×BŌnc&×Pŋ] d,ĖČČę= [OÆXõMG9ÁÄĀ˙JŋŧÆŖ˛‡'€ôĮɸ/9b°ũAĻŋ€´Ļ$G<Ü0ą=•1đrKjWė]ŋ Ē§Á¯’WP@@›Í%7üāãũŅĮáū˜Éō]])ė¨?Û šb€ūŖū;ōœę߉ĩ^ZŽwüâQ_ĘđÎĘN$ŋŧ>œ)ĮéM ,Båoæ#ũ¨ÆJą˙ļ ­ÆĢ\ æ)ëáUrWVo¨•‡ō{I88/å*Ÿ…ö˜oäQüAcä˙ãԟđŦ ōjŽŋė˜û,ÕĪė-fŪ˙Ú77Pĸå˙åŌ<@­ˇDÄ⹛ōëKÚOųÒ?ĘgÉđÃ-¸jā7§Ų˛?V5ü0”ˇUˆíį fŖ?­k˙fx…¤!ŽbîÜOĪū?Q=‡Š2Z9ã#ūģËũ^i?æAÉå3á”åpu8[ÅžÜūF¤‹á”¨ĒWR„įœ`HüI5sû;Ådîy )Ôú5)Ņ}ĻėrDî3˙Ž×SãØĨŨœfŒūšĻã堔˙Mã#ųÕ{I÷BöpėĖáā qT"Ü@ŨŖRgŸvš~jīÃÍŒpZé‰Įũņ[$øÄŽšyˆqõŨMķ|a…Ä7炞ÁÖ—´ŠŨŗ‡fcˇÃ­aäŪŌĀÜct—LĮße9>j|Ÿ´Z¯š•Î?ņÚÔķŧd7ˇ­Æ1ū×ō÷§´Ū5 …Šv÷ķm˙–Ú~Ō§tΙ–˙5väęĐ1%Īđĸ?‡zŧX_íhrã­hßâ˛0ŠrŊpvDßû(§ĪSē$;34xRROĮ7'úFß5ãlļĘ?ëŠ˙â*üڏ‹Đ|qŽäÚ)Įä)"ŋņcÍöŖė-@˙4sT™SūÖĻîŖÎ´Ŧdc˙˛Ņ'ÃmD¸ÛyižœČü˙ãĩz]kÅqö{Ŧ“Ū5˙ãtãŦøÅq˛ŌFīšâ ü–ŽjŊĐšaŲ”áģ´#~i$?û-E˙ įV˙žöšĪŊ8˙Đ3ZoŽxĀËp>–ÍĮéOūÜņZcÍļ@ āg˙âhæĢŨ,;3"įáîļBˇÚ-X ί‘ôƚŽßĀ:ģ"Hnæs˙Æø­ßøH|L>_ėŲÜ[?øR˙oø ā 3æÚOđŖž¯ų)öfø{Ē…'ušĻs˙Ä iøuŽââÍWnÜoc…˙žk}ĩœėđŧö…€ũj'ÖüQæŲpŧDŨīš9ę÷AËĖÆo‡:ŠÜMŨ–[’z˙ß4'íd.Eå˜nœnį=–ļŋĩ|NáwÚĘ­ŽĢ˙ĨūŅņ ?ę¯:tü…G=Nč9aؘ2øYŒī’æŲÁ}ÍûĮ9'ŒôüęUøsŠ"0ûL`¸!ļߞkm5/6GŲoŸ=ČAĪũú_xŦÍ35ŊŌ ĀJĄĀ÷ų=~”ũĨNč\ėĖ?øWēŌ7îäļ 0A߃ĮJrøÄ ŪÂˡiS;cnzqÚˇ>ŨâuZŪ1ôÄC˙eŖí~'l‚ę?m¨’Qí*wBä‡fc¯ƒ5Āå™âGÜ[)3?ĶŖđ>­ģ] px$ũrkHßøŸqÄ7÷ˆDŖûOÄøųmŽ{ų9˙ÚtsT}PųaŲ™+āMUĨbVÁHĮįÅ<ü?Ô@ÜZ"}Ž+L^øĩ˛vN=ŧ ?œtƒRņpų>ÍpĮÔĸcņųõ; å‡fgŠųš5õ!†A'ÃÍSŅÉįą“[ŸÚ>28ÅŖņ€ˆ?Ĩ!ŊņŽĐE¤Ã~ū&ŽzŊĐš!ؘđ¯u2Üš?Â[˙¯Gü :˛‚ @F@?Ŋnƒ§zŨ7~/bļ¸Ûß#˙˛Đ/|ŹĮø’*~Ō§tėĖ5𨆎ŨUŊ%'֒_j$°#oÃŊoîņsģ0ĮĸC˙ÅTBO+0xf‘Ly(­Ō§tėĖgđVĒFöV9ôu'ëËu¤˙„'Rq†ŽB1Ī1ũšļšķÄҜŊĩČ#Ķc$ĨūŌņ&ė­á㓔õŽŽzĐZ™•˙ް*‰Â¨Ä̟ũ™'†5}ŒÃ̰iSúāąįŪļ[PņQũ‚Qī‚Í˙ÆŠTŠä'yœĘxrô;ėë•äw\*t=J1ļ;)‚‚XĪ8ĮeíÚļßÄZš^Æl{Ųļ?ô:hņFŖÔéŌcūŊ˜g˙§ĪS°š`d&…ĒĮķģ*͐?Ũ¤nŧĀīĩ˜)۞_: mÜ)lŽķŅJ'éÍ?ūģ¤UĻIŸpFhæŠØ\°î`ž›Š™wÉģˇnÜŅÎN{tПbžØ#{[Ž >T¤ ÷˙?•tCÅsą!´ŲũFĐOōϟ]“Æ•/ՁŌŽiö,;˜aŊ†û5Čä|š1Į¯5šTķļãÂã‚VŲžcękŖoŨé˛'*jAâ ąÁĶĨ_ûdÔÔįØN1}Jz4Wūtáđ0Ā´EyéWü@ĨŽ­ĶׯŊ"øŽāœ-›1SĪĘxǎZŒ×—ļōIŒ/įÖ§ŪrģēŖdu|Œ.ėãŠLO֜Į<æ›ŧ{Ö§Iŗ•ãÔõ§ė~ƒŸ­+ą89ã4œ ŊĀį?djŠĖĀÛˇs×=j68Éã *ą0‘øÔ ƒéę) fÕņÃžĻŖĮfbYn8§äX¯oJ@Į9@Ø$žqíHāÛOČ;ņ¨Hi+Ž4ōşžf˜§.Ų9ëH¤TÔIdîGNĸxpŊąWīÉōsūØūĩFOŧ¤qÍĻL„nė0+˙Ÿi#8ÉcųfļC™Á#=+S|øŸEn„ŗåZĶÜĘŖĐč˜äœ Rãå Cœž3‘L ĨvÔ<Ī•=WpRûŒÔ!ņԜŒ ö DÛÆ§y Ņąw;˙“BģŠŠ1šyãëEÂÄI+ØãŒ(mÃjŽžŋZ…­” ą€ųŨ…ûŲa˛Ŧ0Ų÷ö¨XdįßōĻ [1r¤m够{nG`89ã€:UÕOĢI“؁ŒUrfb§ĩMR9ä(z‚VËģ‰"Ũ+[ųĸ`2¨#ųēŠ8Ī^ Bģø[Œí˙ÖĢ]Ąp3ÔTļ1„68<įˇĨ 1Ī'ąĮԜ g”åųŽ?Ÿõ ˙ #d(sæž1Øũ(Y‚Ė,Ԅ–āũ})œcŽžÆ˜Ln[k{Œį4c'Šĩ0Ųģ’@íÉĻŦˆ@q‘ŨM ׀ ŊˇŌ˜UOO^8ũE?'Ķ“ĪJBĮÁtĻ€%r{qHPr0äúS˛G8#ĩFĪܞ´€HЌäŽz´Tqōn=ģ p`AÁÅ!QŲšäķLž t8ĻĪ<q™n.$%Üā=éünĀāõ>õ—âyü#: 8ĩ~sĪCN*îÂz+—Ƨ§ųi:]&É …/ ’ÁÆ9âŦ˜Ûz¸™×æåF0JĀđúÜ]čÚ}´đĸŲ-”{HrK¸Į^1Wīĩtļē´ĩˇ‹í7%ļÛBĒũæ'ž(qŗ˛z]š 4ģĮŅŧą`ē+W=3éœPÃ;xQí\ũÃÁ¯ë÷rF↕_ƒ…cÁüjęk>dšNmöF"ãįæ2võĄÅ­I#…ûŖßšØė?0#9ĒqęĻęöōŪŪ4chʒ3ąr3Į͚IīfŽĀ\,žÂΆ@6`‚ QĘĮ~Ĩ°Å›p|ã¨īNķ›š$pk }fVƒI–Öcŋ‘9gÁU+ŋˆž”æ,rĒFqĀ`kœ}Gû7R×îŌŸĘŽd €„ŸŌ´Úōßû^ŅDÍs1<ĒŽ ūúÜ”‰šöŠb—0¯’vČIČCŒķøTņČŌF˛ŦҞ˛†aŋ^•ʒˤøŠŠŽLĶ ā~ékVmHXéúj„2=ÁŽ”p2WšúMð”ģšĮp$nBŊđ§ŸÖ˜|Τũ҃TėŽnį’á.­ b268|ųƒĒĻ—Ģ&ĻÃb *›ų‘6xV}yöŠåes2H nÜ0 C$ÅãܧŸPzԅQp¸O8Å `‘ęjDŒÁHÜ8īŪ”Ė{ņČĮđ cđ¤jŠh‰ŦŖ–@e”Î퐄•bĮ¯Ļ%Ņ¸ą’i˸ØŅ’6îųvŸL`ņß5Ąũžņ^5ÅŦūI“ũlewĢžĮ¨ÁĮz´ö|ĖĨģœb̘‹w1Ŗ¸Ô^GO$$HŦT˜ŽO (?_Ō¯ZÍpÉ#Îģ‰ŲÐ2zũF*ÎŨØ;Ž3ڑ‘ŸņĄģôV2niæI|‰A"ŧNŧ2‘Æ=Éķ4Ī:ū5‰Rܔ moAŽŋ_Ō´÷dôĮ֗'œ*¯ŌÂą“e%ņi0Z"X3|€å‰Ësė8Ļk &Ô,ÉV]Ų7^¤VÄ1*.и_JĮÖÎÛûRG(÷ęÂŽ.ō"JČßČíÉ"—°üÅ3’Gĩ/”?ģYšH!›§éJYˇ`` qL.Hšî…ČÎדYLĀd3ŒuīU¤/°‚Į>įņŠå(ÔX†,&ŒBJcœu4ŒĘ#P ĮåL•ÁŊšëM.rOJLhe\“{JNé ü*0ۆ$ĀúĶ”„r=zõ&Čĩ"4ËķĨR*¤ ĨOzItäcž;ÕmØcÁĄ"›,D2?ΚŨ~TĩÖô‰Ĩ$(•ŗÁ˜9ŽjO ەũŨÄ úm_čW>UlĨŌ‡ÚOū…O’ÉæŸcēL•ôö§ŠČÆ:sÖ¸¸ŧ1~Ã÷:šįؕū@Ō¯‡ŧC f;õ8fęOåŠ^Î?Ė>yv;ÎÜ㞜TG)ģæ$z“\öoŠĸ;…ûčŽ˙B4Öo§ĘLŦĒD•Ë´{NéfįÁûžƒ5få(Ā2TާëR!9ČeäŽé\ü'2Œ†ļIîīŒ~†ŦEãuxđÖąļ;,„ū›*}ŒûÚÄîLĢ’ ŖÍ\Æ?,WĶdĶî6įøWŋãŠą˙ •Š}žå}7*‘˙ĄRö3ėWĩs¯B¤ƒ€Iã=ņKŊ˜ęéŒöŽN?ØnũęH= üjqâũ(ļLŽû”Ŋœģ T‹ęt…Á~÷lôģČ'# z÷Ža|]¤4„y˛ķ˙LÎ*Ä^*ŌY†ûšSˇúĻ˙ \’ėņîty`1úäÔĘøÎrŊsŠâ*Cvä㧔ߟŨŠO‰´ĀØ3ž?닟éK’]‡Īæîõ=ĮįMvã¨5‡˙ N•üWMŸ{w˙ aņnŪč‘ט¯åG$ģ”{›rp7duÍ#8ûšZÂ˙„§I`Hšp;f˙ ŧWĨ)9ģoûđ˙áO’]…Īæû1XĮAŽƒu4ļ3ÔVøŸHsƒtØīˆ$?û-Juũ+fápÜ C ˙Ųhä—`į]͝Ł$ļG^)°PöŦøHôŸ”ũ¯uÄ/åM˙„ĢGÆMĶœq ˙…’ėëšĩ–\rOļ)FN~f>ØŦfņ^’2Ģ3œöō_ķûŧPÂŧ{—×OMÛ;HōŨ¨ķ]›ŽĐ8ĒöšJG57SŗXĢ,9e<‚ĢÂW¤0˙‰oõMū ņ›ŋwڜãKņ˙ŽĐ”ÄåEt‰aÔnnėī$ˇ7$ãØXÃ=éSŨi†âö)ÍˉåŖFc*ŲĮ8#¯lûÕņn– ī–`!ų˙Įi?á.Ņ۟ĩ>ęb~ņÚ->ÁxA„XZ[ ‹€-$ ›—ríĶ‚GJŗũ˜ąęfüK/˜bėb āzã=IŦĶâÍ.Ķä˙Ķ˙ ÅÚA@>ĐŲäHöZ›čléÆ+›ģ‹Y^šæU nÆ7Cú{UwŅíãĶmlá–Xbļ‘]–SœœZjø‹GßōÎã=ĖüŠĪâM€cú‚øQiö Į¸É,?ĶĻē[Īž`¨W€šĮãÉ­x›l@bØÁ8Ŧ´×ôR5(OįRŽŋ¤sB,ã=OøRq—b”ĸēš\2œ1üĒģi–Īz—§zÜŦ~Ydã+œāöëUá"Ņ€˙ŒEŊÁ˙ t~$ŌQƒ5ęí=RJK sEõ/iēTVeļy#ÁfÛybNIüÍémf’s$­#2:ŽA?AT‡Š4ĸáŌëq‚?øU–ņ>–Ŗ&éˆ8ČX\ã˙ĸĶėr=3C‹KYŌ)å–)âŠPO\>”ë ō šŗŖ-&U;ņßô&›'‰4°ŲYÛčbq˙˛Ķá ĶŨ'š*Æ)ûũEî —B†eÔ\MūžĄe+ˇ xãŽ*fŌÔßZ\ĩÄĖö¨Č •ÃŒįaUŽŊŖ6s|‡åÅ9uŨ&<…ģb ÎX9ū”{áxÚ$&Îö×í„ŧ‘žRJį'ƒ—Œ€*ÃéPΧEi+I"ÄTŖ–ÃĢ/BĮ5Lø‹MŲ¸ ˜‰°JCâ]+<ŪÆ9Ī1ŋøQi…āh­ŦpÄāI3ä`ģšfÆ=iļļ hë1y&˜F#ß&7¸Šé{ëõĮP|ˇ8ũ)#ņFŒXƒŠFŪû[Ō’Œû ¸÷5ī kĄo˛icČ$"3÷đښY—9č9Ē1xŖG(T_&pppÃđéH5í5”ŸˇÅŸS‘ųQË.ÂæsE[)¸s‘Ÿz@ûĶ'ąÎk4kúZ“ģQˇr Aņ“´•ÔmÆ?ÚŖ‘ö4{š‰Č끜ĶLģvüģ†q‘Ō¨JcŸí sĮfÆ×tÂ9ŧƒĶ;čå}ƒ™w.ÜĪö{y$ŗ˛)!dą¸Ŧģ+˛$“Ü.ëƒgqÉ'§'đŠ?á ĶúdMŽ€f’?i˜ĪÚ2ũ2cŌŠ).„ˇ÷ UÔŦäû:,ΞdJ]O/#ŠųyéœŅnú„°ŧm ÖķŪ,’<ģyGā"û1Ī}ĩ3x—JP!įŒC'˙Qé.IĘFzųūV—ō“î÷túÅŦŽĢ:Ģ*Ä#Ø|ĮkąÑÎ)"—Rˇ˛žuķ1â |”h=~n9¤oéJ?×Jí™ ņ^”9įŋđ˙SEĨØ/ã.ĨÔnMÍŗ%ɂYš06Ļ2Ė8īœsŌ¤ĩģÔķķE2Ä Cnp 㜞8æ˜ū.Ķ…@õhĮūÍQéåˆ ũ?įŦ_ü];K°Žģšús܋|Ū;4ÎKĀÂ{ Κōöîîvĩ’a .Ē  Ãíåų=s÷jĢxŽÅ—îH Ī›˙MOépYųQ4‘ėMĒ~FĮŋ Í ÷°s-ŽLoõĩG#Ap"Ŗ!*ŦĮ“ë…ņĪj#šÕgB°4›.743X#-ĐįžØ¨†ŋ§2˙Ŧ—éäIū×lIĮ›1öû<ŸüMBOąw]ʑĀëĻ[Y˜§†)ĨywĮ&Ũš@^Þū9ĨvšŌĩGx%X|á&ÍÂI ;Č=ņ‘īVŋá °ŒrķLĀ˙áP˙lÚĘāÍpæ5lĒ‹i}3Į5~ķŨ§sQ¤dŠ3!mĖB°Aœũ*FÖįą#ĩg wN\ūūAßũKįųS˙ļôōH2IĶ<Â˙áQĘûuܸ 0ÎiÜAī×5—&ģĨÆ9šo§”ßáKˆ,°ŗHĮũ˜\˙J9_`æ]Í\€āūt:Î+?ûf×?~¯Ųä˙âiąhW9ŸÖŌ….V+ŽåĶŽFf˜ĖGŋj úÅ Ä˙ø˙áQ˙mŲn'2¯ĻaođĒå}ƒ™[qķ}ŠāƒĶëŌŗÎšf82Iƒ˙L[ü)ŖU˛ īžŋęŸŸŌŠEö24ÁĮqXZĪͨB¸ųžQų–˙ ŅĨ› ųŽ=üļŌ˛of†ķÄĻ'WÂ.1ęü*āõ&M5ĄŅ“Ī˙ŽßZŒœ“œ wšž˙•fQĐŎîq֜K2ž9ÆáÆ*8‰’C‚ƒš›{2 ×ŊfÍH°pAãŠcÍBā’Ŗ9Ī'TĖ%°IUæb쨟™sÛې AK9ĄĀhĘãhÎsš‰bœ–'w¤ yëÍ&4>˜õ¨øķA'ŋôâFĶŽ€v5mŽäŽĻ‘ßđS“TÝØĪā \ž9ˇR3š_'Û=ë,1iI>ÔE͘nëĶĩsr==*~čÉäw*1ā d„˜ÆG^ TG…Î;įžÔéĪbŧcĩAŋg' }j’&āĮæäq܊PHpÃąĮŖķ3ČũEKnžcã `ôĻ+—íÎ× s’3ČĢ/€zō8ĒÉō䆧ÜXgŌĄ”ƒwõši;”gíÍ;4Įn:“ց2&Uāō)ę8õôúTeįæįŪ¤GëÉäSîJÄKeS‘ČĻ=•ŖÖsæĨ‹ÛëĮëR:p}é]”’)'MÎ[O´ĮlÂŋáO:.Ü.ПO!­€O ¤TāƒÍ.gÜvFshēN2ÔgŽ"_đ¤] K_ųq€ tÆ3Zr ÃqnsPŗ¨ąŨÅ>iw*ėT>ĶsjpUÜ#I˙ž”ÃD„Âæ@?ô*ĐļÚÎØ'ՌāĒI€ō]C–=Œqá$!—ŸhņŠWÂŒ˛IĪ_ßH?öjŌi[ϏЄ€€;gŠ|ķî.Xö1˙áŌ,_>­pã˙f4ŖÂÚQ6ė}TĪ!˙ŲĢgxĪ?.ĻzuëKž]ĮÉÆ#x/G›Č`eĮ+x3HTė’ž:™äĮū…[`õtæŦÂáĸhÛG#žhö’î.Hö9Gđ†’X~âA´˙ĪćúĶ„´ŋ•Ds=˙øĒędYIdõĒÍ `g8ö4{Iw${ųđvŠA˙EoßŋøÔgÂJ‹yũˇņŽ‹[†#éQ˛`…ŪØ÷§í%Ü\‘ėsƒÂzRŒeK‡˙|)§‰I"āƒÛĪqũk¤pS'wSƒōõ¨XHØ*ÜÛhö’î‘ėaKá )š1ĖOŧŦ­5<ĸdąĩlgœĘ˙ã] ų‹÷qˇĄ,yŠBe Îi>áÉÆøKF1jũ?įŗ˙'ü"úRļDĄöžL:ß`@ųX3Ōĸ‘Hį#ũ¨ö’î>Hö0_Ã:s1.ĶÛĪ“˙Š¨ÛšOSŧ˙ ņüë}P‘ō;‘M`ŋ@(ö’î‘ėa˙Â)¤ ÂÜöķŸüjDđ–ŒzA/ĶÎņ­€Ž9Č5$l 6âŊFpEŌ}ÅÉÆ!đΓĪŲĨāDĪū4įđϘûHIÁ+ž&ņ­rāæ ÁIéƒSBpĒ €89ühö’î>Hö9˙øD´Ĩ`ŦˇŸI‡đ–“˙@ƒƒķŸđ5ŅA*šųŊ˙• 3žü =¤û‹’=Žpø+G$n3ą=‹¯øT‡Á:>ĖyR_žˇÎŨ¤ąŨÛvisŒvú=Ŧû‡ŗcŸ Ņ‰ÂÆųĪr§ųŠ_øC4ĩ?ĮĮ;BĮ˙Ä×AžF9ú haIũ){I÷Hö0?á ĶKā3°ôōZü!úJãzĘGCķ㐭áœn“Š•ÆāÆ1Ķ(ö’î>Xö9ãāÍ%zG&ÜtķM'ü!zK,S=ecũk ČáN7p0iÂL66¯¨ö’îąėsđ„hųdĀwcHŪ ŌgõJßfŗã9÷Ļ7=ŗÅŌ}Ò=ŒđV”r$3•éÕžÚ¯oā}6%cHØā`/ŋ^=1]8?1ÜGE5œįŠŗš~Ö}ÅėãØĀi}H—éōņ4čį?ģ“?DãôŽ€ŨõŨô9¤.2§{I÷Hö0‚t€š öÂ˙ņ4iY%|ádû-oåŠm'œb&ÁƒÛôŖÚO¸š#ØįOƒ4Â8’ë>ÅGūËL> ͰO›tsęČš×EæŽBūéœā7ū´ũ¤û‡ŗcœĶÆ6ÍuėOū&á;5aļ{€1Ũb˙â+ĸķ7 õ‘ÚšIę(ö“î.Hv0áļī4­õH˙øŠiđ–›üK!OŨū‚ˇŗî? ’#j~Ō]Ò=Œ1á‹w'ÚB1SĮá)OKŸiÜZÕ/ž)>aČäSKž]Õv3×Ã:OVˇrOŦō?ūí)H"ãū›?øÕķ!ĀųMœeŋZ9åÜ|Ģąœt-0~ĖIëūą˙Ƙú-Ž@0ą+˙i xã5ØãŊŌî&‘šÚœÃŨ›<€eņĻ˙Â9¤āŸ˛uõ‘˙Æ´ŲHĀQŠˆą{úSæ—ryWc<øwIlæÕ‡=¯ū5xcI/Åģa3˙jŠÎqõĻ’GB? |ōîąėghėëV88˙Z˙ãM>ŌG+nëô™ŋÆĩƒŒį{Ō;īhį—qō.Æ1đŽ–†ásé1Ļ éŋŪ¸YøVČs€Au4×qĶ8ლ|ō•†Ŧ#ã3ˇ§Ė? Š?áĶØƒ‰‡ü¯+ap:÷¤.xãđšåÜ9Wc5ŧ9§į†˜ˇģƒũ)?á´?Å&bŠĶūų­`s‘O Éãčiķ˸rĮą“˙œĖ§ę?…Đl\|Í+v?0˙ Ō’>8Ī'šX—kĮ=sG4ģ‹–=Š+á;(įĶ/Šwü#úzˇ1Įũ4oņ­•8Ũ͚ īĪ§Ī.âå]Š_ØV|ą7ĶÍņĻ Äžb`?ëĄ˙Ņķ œZA’ô§Í.áĘģßđŽØ˛ä ī‚?ÂĨļŅ-mŽt.ėŖ61üĢCiےxĨŒôí۟<ģ‹•!qøįQėúŌļ <}ę<öjAĖk6Z,™žŊÅ5Āe#"åÚ7œõŖĘߕŅAęyŠbÜąœœqīQI[Ôîų”đpƤNßŊSĪj‰ąmXÆpG rŽpsQ(8áĶ?Z”+Ë˙} ’‡wĨ pŲÉõÍ4‰60Âđ{0¨öĖxž¸ę !–`āį8銎hÃmÆF<ö¤eœ`…'ˇĨ5„˧÷l3׃@2höŠĘõéVUÎÜxüj´@Ā•'Ôm5m Žą˛ņé֕Æ)AŋvO×Ŗį8úTNYÆÖMØįæ9b›°H  ÕÉčpO Ĩ,_ĖÕ?5”œäSÄāëô  ËA§Ĩˆá›#¯zŦō䎝iCžOX /4!Į#éÍ ãœcŸz n0xžÔĢ6GĖš tô¤¯ .SĐsÚ˜Ė„’ÜLÔ-)8 ¸˙ G4Œ ãƒøķL.Jō¨lÃ֑0[o;Nô5\d•l ņO, +g>œâ€&2÷^€ÎŦ+ų‘ü¤ôôŦĀÄ0“ĐôÅM ÁۓËzāŽ(ˇ‚I9Æ@Å1šä÷ë×4âK3‘ČéīHĨŗpF bÂmm§ž)’'\ŽO2ļTüŖ=°i–8ޏÍ+ų<(ĄĻÃäŧw4é#!ņ†?Ļ*ģ–TlŽFxÍ1w˃‘ėjXÆAį¯ĨSBYŗĪ Ģ"VČ ĮĐv§a¸!#å=Ī­:6ĀÆT•w&Iœbšdí Ŗ"ärr:Ōų›žl:qŪĢų„‘Ŗ>Ôå8+ģ“ę§ ”>8ä{ŌķŽsõĮJŽeÁ˜.{ŸZp|ȜtâD™0āĶ”Ēärw{tĒĘÅW ’žižk Túht°U'°āSKĸ¨9ã×™yâJyįę(IĻ=Ž3Q7îÆ7sŽ´žk’A<Ž˜éI¸‘īųæ€7æ Šgvi7Žå 䊄Ž—ÆmØČĮ\q@‹(įÔ^hĨ˛ $T Ã{ŌĻܞ˜īíL ˇí4ĐåŽÜ1#ŋĨ5¸xƒŠˆ1/Øúqր-$Lc Ŗ&Ŗ'įČaŽAŅ9QÎvQ—%‰4 ęų€=)yĪÎŖCžr0=iK?ą/œvíIģ×;…&đsŽôŌųœĶ$•Æpxö¨É'’IŨÁlņM9äņ@üž¤S!8ÎÖĄv=ëJ lx§`%ŨœŒQœrG~)ĄJ‚NO֓9\~?JĄK|Ã9â˜ĖsúR9*vúÔnWÁĻI!äu ôĻ;ÆryχQÉäQģ#ÂąCŒ÷ĮŌŖi8#ĘœėJu♀$SÁÉ^HįĩF\‚AÛוƒŗ Į’MDHޝĢDÅâ$zœsÁ/Ũ•F}j‘ü. īÍyLW“ÂÛŖ™Đ˙˛ÄVŋŠ5;RģfY@í"æĄáŸFTq Ē=Fe9*E7ÍpHü뗃Į’aVâĖv7_έ§Œ´š ßnéõ\ãō5›Ĩ5ĐĩVŠēŦŦ~•f&Œ×8ūÔ-ˆ’Éâ `AčqíMRĖåZ<íLEŅ eĀP7d’zE¸(ûp õéŌĸD鐨ĮĨ)8ã$đi)˜ĻrŠO_ē)ë.>fPF8Č˙ëT gŽ3NV (Î)hPHC°VĀäcÔr)\˛Ž1ūč§ ĨŽrxÅ!AÉ8 Œh@ÕČÚGā`zí“Ėcü 1ūČĄNy ‚Z#qžßZ5Î06(ÉÂōjKs‚4;zezĶŽ;Æ1Ū•c#8Ј—íÁ4 zeO&—íˆĮJėMU”÷ˆÆ: Ō+8QĮŠŦQhĘĒGȘš" šUš…Ŗ+°7VĮ1A€Û†Ķę)ǘ_ŧ™Īéü1QxË'^ø  Ątb[ĘLØԛŖÜG–=Į5{U‚î Ũ6†ëøS™‚H}}(æ•@9Aƒ÷N­0H…ŗå§äišČá[Žzđj5?1=):L2v˜í֔ʊ82}ĪŌĄū?rrN;fc1ŽNM4°îÁEĀ9ãƒŪƒ†8zͰ‹+*n cSŧw_6-ã÷#'š&ĢīŲķ6éO#œÛ†Yķcäų`cļM&ôaÂw<ŠĄÄSÉ"Ŗî1­ŽÆ§É>ãۚ,Á⠝ŖœŌyą´ ž*Ä`dîĪŌ2OZįņĒųÉāzžüԌņČA@‹ņãî¯ášƒx4 œdgühÂõôŌ3É8ūTödcōƇüũhW#bĖĶā~ ĶIÜIÎGp 0,]Ü ĀúæŖiPļ`sۚšaœšœíĨ`$ķT‚ @c؊cK(0 īLįnČĻāô ԎsNČDŪld•GcÅ3ÎQÕ#įĐhXŲ¸$ƒõ BĖF0x4hîRŖ*ŖˇJE¸ŽUqÔP ÆŖ8Ųƚ`XûPi8T˜Ĩāqõ .N\d|œŸŌœGđ“UÎõüiTüŖ4,AūŸĨG$™§=j'p=N:ÔD‘’(,+ÉũJp—“œ0ëœ ˆ Ã=ŠĘ€?NŊč0”äôüR™2{géQcaÆxúĐ=Æ Q,ˇŽ3ŸJlˇcŽ@öÅ2NšĒ˛sœ’i¤"+ëö‰íÜzpižû_­2u)GŠõ¨˙wíZ$ˆ;ŧrĮž)ˆBsÉĸŠĀ˛œŦTdųÖNĄw-ē“ÜãŠĸŠkpg!ĒkW‰†Ĩ°pHé\ÜÚæŖ8ųŽX˜^(ĸģ)Å[c’m•dšž`ŗHãҘšabŦ1Ԋ+mˆšũöúŌQE2B”QE1‰ERĸ“4Q@āŌî đHú(Ą"Ũ\F~Iå_Ŗš{^ŨšîfltĖ„ŅECM–#×uX× ¨\éŧšĩ‹5Ä<_šöeSũ(ĸĨÂ=ŠS’ęZOkCŦ°ˇÖ!ũ*ÚøßUpwĮjŲë˜ĪøŅEsJ[#hĘMnhAâËæw“l1­˙ÅT6ž$žI› Ī8 žūæŠ+;+3TŪ†‹x‹P•”ī œ.@ūu ÔŽ^2 ‡¨9É˙(Ĩea6î$—˛yY!N <恨Ü-˛Ø°Î?,ŅEKEĄ&ÔfŠ•BnëČīRļĩtJąc$ãi˙(ĸČW.šz„VPĄ°*՞Ĩs$›™ųĸŠV.-›VדšsĮëWîF|NŲĸŠÂFŠ–DŸģV(„ũ)áÁF>RdzQEfö,vüē|‹ķu⑤ųūâ~TQHe“.jãƒŌŠ]\ē&T(8¨ĸŽ$°I™ß,ĮU¸xL¨ôĸŠlHlęŦ: š#hL`ãčĸ‘DŗDǜfž-“Ë~tQSÔeYdōŨP"sI5•$ōųlûĪ8íEq$oW~ösšyžWV˞ÜĨUą %pUÁä~Tļ9{‡ŪĖŲ$rzsEē’@YÛ WˇËMą\Ŗ;ĖzæŠ)-†:iY'Ø1ŒgĨ KO"ŒŠ( sĄÁ Ķ"š×$+Á€äQE:]ļų1ƀˇ$ã­%´"ļėqE4`1R@ų5!:bŠ)0#uĄCgÛԊ)ĸáN>đæ—b‘ž”QMÖPˆqÔ ÕvœŦ DÉ<ņEЂivITO™€ŸCœQE!3*k™˜oŪAVČĮdŨK ĶšīõĸŠŅ­‹ÎŋŽ´Â¸ŅEAH‹$ŧGŌž¤úš(¤ÆWÔ$xãÂļ3Î{ÕXĻ‘ˆVrzuĸŠĩđ™õ%feËn9 Ļw´Q@ĐåvVl1ã֝Ŧđäã“éE0ęH¸Ē÷(*§’ŖéE"Bė\ã։x4QLĄJ(^)ŽĒ‘ä(ČĸŠ‘ž6¯Ę9<Ôžl`` (ĻIimČíJ8|õĸŠY@āâ•9Į¸ĸŠhĮäŽõVDVBāä(ĢD•n0̐dų­íE´LŲ˙Ųleptonica-1.86.0/prog/cavalerie.29.jpg000066400000000000000000006040431506303110300174200ustar00rootroot00000000000000˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀäĄ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷ú(¨Ä*HiŖu…KER:žš –Ô-Ixũjņ.‚ŠYõŊ5Tu&î0ëJčvfĨˆŪ1đĘŽOˆtŖôŧŒ˙#PÉãŋ Äm~Āįû˛†ūT]™ĐŅ\´Ÿü!ĩËsŸîĢ7ō]ū*x.6Úu Oû6Ķ0üÂQĖģ‡+ėv4Wß<¤í)XâÖ\~ĢUÛã/„A8šņąélyŖ™w+ėzæ­ņŋÂʤ‹}Q` LŸÍęœ˙<9ūīHÖ¤nÃʈĪĖŖ™+ėzĩä/ņ˙I*<­SbOGxÔcđcQŋĮËn<¯Ü7ŽûĨ\~Jis å}bĸŧ]ū>ļđ#đĀaŽ­¨`įūũšž<Ũ–%|9¯`oI?žÁGF*Úî–nãČ?|¤!_îŽ>”á ãîĘmä?cæ}D|sá ¤˙ÂQĸā ņ˙ŲĒø‡āäBĮÄēa˛Ü+Čs_2yC7Ë_AųQí|…ė|ĪĨdøĄā¨—-âSÎ>@Ė *Ŧŋ<7kęsũËY›ų!¯ kĐ _(ƒš=¯ũ‰ôŸü…ÕĻu˛Ÿú ĒĪņĪÁ*åVâú@?‰lߎ x/”3Iå€x—ļōcæ{›||đ€bŗz‹aƒųĩV?´'…Ā8Ōuã˙l"˙ãĩã^{Rų}ąGļōcæzķūĐúBSAÕËv #ķÜj´ŋ´U‚ĻcđÕķ7ŖĖĒ?<ōĪ(įĨ/•ôŖÛyąķ=&_Ú5@W„äcß}ößå¨öŒģ'÷~E÷_˙ÚbŧčÃģ)D\ô{`ö>gy'íĢ—ũ׆­Uqҧv?žŅUŸö…ņ!sŗCĶU{ųîĮŦ@æ—ĘÎ(öÃö>gNh;tŨĀÛLH˙Čĩ]ž;øá˜¤ŧ-#ķzįü°OJQ9âmäÄ֓ãŽŲ ‹›T'ø–Ņr?<ŠĢ/Æoˆ .°ąœõK(súĄĒB’qŸ­(ˇRO{a{2I>.|@—ŧC/Ũĩ…’Uy~'øęVÜŪ#ŧųU~AEKä/ úRų Œm•/mä?cæPˆ^3‘ˡ‰ĩ@O÷g*?!ÅWoxą˜ąņFˇ’{jų­snœüƒō¤û,cøåOÛyąķ0[Äēû‚]ÕX ŪÉĪū=UÛVÔäR¯Š^˛žĒĶšõŽ”ÛĄĮȸúS~Íūü¨öŪAėNYįžPIäpFrGëQÍuÂŨ:ė_ʏ˛ÆOÜ•/käĮĖävҊė ē÷GåGŲĶ …ÛČ=‘Įāô ŒvŽÃėČ€ _˛&1ąhöŪAėN?ÔÎ+ąû,DįË_ƚma˙žkųQí—`ö>g#Š+­6ąˆšúP-ãÛÂøQí|ƒØœ˜bēÁoÎ~Tīŗ  ?*=¨{3‘ ô /5×}•?¸1ôĨû,}vʏkäĮĖäqūqEuâÕ1ŖéŠ_˛&>čįڏmäÄãČÅ.?*ëÅŦ}vʔÚGũÁ“íGļōbq­ÖWeö(ŋį˜üŠ „YbūT{o ö/šĮQŠė› 9Ø)Ÿ?t~T{dŜŽ8ĨQ]a˛‹8 }GöŲ‰(ŋ•Ųą}ÎmˆD&¨;dœ×mũŸćÔÉ4ëcƒä§åMVBtYĮCs$-”oÃĩk[jQɅ“äo~•¤úd%ąä¨J‘tČqĖIø-7UĻĖËû‘i›X]Mv_ؐ÷ŒcÜSŋŗ-ØĒOûæ—ļH&Î,Ҋė˙˛­H?š_ƚt›nq~Tũ˛ąg/kNķÚ­đ9=Ģli‘(˙VôƒĻC´ü‚jƒŲ3œšLcžÕŅĮĻÂ~íOÔSƛ˙–j1ĪJ^ÕŲ3šĮ4`WR4ØJUĶ-Ī>ZūTŊĒdÎYÍN>‡ķޤépã"5ô8ŸŲvār€ûâjƒØŗ—Å.2zWP4ČH×ōĻ6™Ÿ¸¸úQíP{s8ĨĀ5Ō.Ũŗ„QøPt˜H c\ũ)ûTɜØŖŽ‹û*ÜôŒ R"ß$”#ņŖÚĄ{&s S€ãšč†lßÁN:°?s4ŊǞg<WڗÁ'ĨoÔšiW@´?ōÄ~´ũĒdˁÜ~tĄ”ē|=dA>V>„ĶÃv tûčŅíb/e##+ŽXS•ךÖģxfÛūšŖT2ø~5$’~&Ÿ´‹fĖ˙6-ÜēŠpž,ũņTŽ­ZŌrœgƒPãšĩŠ›F¨š%?|W´|-~%$•hú`‰ô5āŖ¯jũžŸm߈ŖĮŪKfĪĻ ŋãM žįEU(ĸŠųFAæ>į%˜õ-ɨŒc<ĨXeĮJa¸Žvš5ÁāT[<Š´Âĸ+š"ŒķHÉéRGzv8¤Bƒ4Ō¸5; fĐOŠĸJîŋ.1LÛÅYeôĻíö§p*˛sL‘qŠļĘ C8ĀZnAˇŠU^ųŠü´Ą9éEĘhhJ~1ÔR…÷ëŪ€TPIҜĐVĨÛKˇž”î!G5"GÆ <..Üõ¤"26Gz”(R…ÃįÔSĀöĸ㰁}iÛr:S‚įSąž8¤;lÛÎ)1R‘Í&(R{ԁĮJ\`úԊŊú b2šģpEI´tÁĨÛĪJW†íĮŌ´ãĐT‹4âšÍ!•]‚Žh\īO’ ã&œ‘ātüh¸•>”Ī5`§ļhÛNāW1ƒŒuĨáš"§ žqKˇ§€ˆ'¯JpNj@ ãũiØÔģpĀb€ ŲM)éVļsŌ›ˇ8ãĨ *mÁ įķĨ)͊ŗˇĩ7aü0+íÁéK´jqŨN)Į_`#‘NŲÍMŗŽivŒûP^:SÄ}3ÖĨ OÛĀãņ  b˜c9ĢDQŠ@TōÎŪzŌyukg4žXŗÛĨ S㚠āŒP%4áHWЧ*ācڀ#ņJS‘Síã­&Îô€‡ËįŽ´ˇ>ĩ>ÜžĻŽ3@„ÉÅ(9 M§+ČīOۓր"ØéLhųāU’(ōûĐ2™˙ÕHPqV]ہžyĨ öŸ@1Í#E‘Ō­y`vŖe•É=i2jæÂ ¨ÂNiŠÄE(ŒtTÁ}E9“"€ –#°Ĩ1Ž)ʧ8ã.ĖŽÔ€¨cëÂŖdũŲtŠČĻ4yR;ĶœíOUÜ0>*Pŧ{÷ĨT}h0˜'§)ʇh隐/$œķNTé@…捧Œdõ8\ûö4…0) ŒŠíĶژč_ž†§ Ī^()í@Ō3’Đæ¤Uaōž}~•0Nzr)BäįP"˜‘ŗŦ:zvŅę?R‘ĪŊ4ØÅF#$“ ŸŌ†SŒAĩH:vÍ0 ęiĀØõŠҎžÜP0{SÂķ@VŨÎ6ū´đ įŠ`āįQK*xĢöĻČCŠ@r:´9|s’k,ېpX č5Sr Ŧ—E Ī­uAčsMj@° ōâŊƒābÖu¨Æ ĩŧlO|†?âkɖ á›ŌŊWāS2øŸRL­e’1Ü:ãųš´õ!­yĸŠ*Č (ĸ€>Ye5Uļ@NGåQĻ?â;J¤pj2X`jfÃī@íÍ8Ž3А(īKˇ=Š ŽÃ'ĨFGa‡ĩDAÍ"+MÛôÍO€E!\v§p+•=qUîG)WYjĩĐÁLS¸$B䧄â•GËOQJãcB=ø§l*ŖŠ‘WŠV^”î+íŖĨێšĻ•\,0/•V¤ÛÁĨQEÂà aēĶ•yÅ;=)Ui\/Ny§müiáGáK‚qHv"e“Ō›Œš™īI´°Ô\DJš'=Ē@:RĒäķR…öÍ"ÛŪ€ŧÔģ8ĪķĨUÁ÷õ  ‘ÆiJqš'&žœR^ÔĄxĮ9ŠŠĐŖĨEˇÔĐWĩHWPA#Ž(´ ԟļœƒ@ UÅ8Žķ§č9ĨÆGJh†)ÁsÅ*¯nõ ^ũč0ŧQˇÔ›G@)vb€" žƒŠpQO ÉüéBœP1q@\T€JŠę(˜ (sRmĮ4¤qJāEŠvßΞĢëKŗ‘@íŪ“oĨĮĨ&ŪM #ÆqÅ&ʓoš1ԘėÁ¤<0ŠväR•´Üū4ĄqRc R…ČÅF&”ĄĮ&¤UĀ霞´ĄNrh-§=8Ŗg.híį§ČÍMˇ9ö /å@íĨۑR•įühŲÍEˇ"œА/ˇZr§$÷ ÂûPWĒBŊģQˇƒ@•įĨztŠĮŌ†\ö Šācĩ*ķڝˇÚœĢÍ4/9ŖmJži  ō %F­Ü äՒšSšjÆä {R2üšīíL^GĨN=é0:c­1•Ō™åüŨņéV6á€öĨÚ W †§æĻ)ųĐWoZƒĘPûģžžôģzņSČĻíĪ4 }iŒ¤ŠĮŦâšWz`Bjp#đ§ŋĨ.28ī@„*xÅĮ9ö§ãš*įéHbĒ€7/~Ԙîiˎ ņíOũ CŽ ÛŅK}*RŖ¤ ķw4Ė Q°/qÍIŽp3N*}(ŊéƒŌĻö”¯~ô–=ŠŪ_ãíO Šx÷ ÂķAà  JÛ@Éã֚ąé@†y|d7”*xÎ*ajR3ÛĀ=ų¤l`yŠ8äSJį¯Îj7=sYŽ2Zš˜ÛpqYĖŖŠ÷ūUŅ Œ%¸ČFĮųë^—đDŸøMîĀ'iĶ_#jqÍFÃÛ­XaŒj6_zā;ŠĖ;SëŽ*vš‹u!ˆĸ—ĨNĮ~8 ˜Td ™šĻ•÷ JņHËÅIˇņ¤ĮnqLpk7o2}kYÔcŠĪÚ’gđ i€ŠPsIˇ¤ˆs@‹1Œš‘—'Ži"íRãH åry4›8ã5`¨įÅ&3L6ņFŅéSéIŗJ4F8Ԋœ÷  ābž0j ^˙•.=zĶđzPA=č3ĮséRã­q@ O iqOÆ'Ļ)ĀŧŌíĨ)Oĩ´â¸Į=ņ@ipOŊ(^ų§ $āvŖmI´c¨¤ÁôôņÔd] äw§í§sHãŽ)6ûĶԌ˙SAÔ§•ˎ• dĮZ°Ã늅ÁÆ:Ķ V˙YœvŦŧaGŪūU­ĒŒ°ĪĨdį§Ô˙*ŪKr§qũk¨ø`Æ/‰Z)Æ~i_X\Zæ€Ėd˙žÕĐ|=sÄM”ûíŋš‘ũkH™Hú‚Š(­Œ‚Š( œNÎy¨Ž? œŒsÍFFq^y܊ädZŒ§99ãéQsÍ:Ҋ^†”ã  ČĨ!ĶØqFŅŽ´ĻõéSmϞJ‰“ŽĩJTÃkA†1ĮZĢp ī@Öå=š&¤‰pyëJĢÍô}&ŌE(\L)āzP#ŗ“Ķ4ėŲūĨ ĐHÆiUOÔRėô¤20 ŒŠPŧtŠD}EҌ~4Āh^)—GŒōÜ~u6Ū?”Ļ0Hb:tÍFˆŽ˜Š1ŠrŠÅɤyŖg4āŊévé@ `@$PŖ ĶąĪĩ8í@…č­;į4đ3ڔ'L Œ(Á4ĄF9ü*BŖiéī@^¤Š@FGOƔ(n¸Å?h֜=(¸ˆņԂ=§lâžãԃĮ4 `LĶ‚€}ū”ü`R‘Œz÷¤x9ãš\c𧅁Īր8 Šâž)ØÔõûQp#+֍ŋ0ŠH÷ĨŲÍDŽŊhÚ?€3ôŖn;Đ,ŧ`uõĨÛÅHP1Ķ<Đ{>^š÷Ĩ(qRpįŠeqŪ€"#ļ)vđ})ƠޏŦ8Áf€#P9éøR*’ +Š‘€ĪP98 ū4†GĘđJ‘yõ§m¯'ĩ*ŽzĐ!ŠÉ9ĪZTPŊ8 r¯N(4mÉãĨ)qHG nŪ8ëHTä)ä``ņN ãŠD=)āwĨÚ=)ØÚ:Đ1Ĩr94„cĻŠīڐ¯oց ôĨxĮķáœôãŽGĐS,‘žƒš<“úTdíRv’O Āã'žÔ§•Č4i!—8"•y㔃Øôρ“Ö˜ ŒŠb—ŸņĨĮåHrh ĮN”ũ¸Æ¤<…€ÜāĶsOpOJNŊ•!üÅ*…8įđÍ ą$đ8S€Á åÍ&9öĨfuįڐķ×ųPˆƒ€)>ŋJqĀ9¤äĶژIÁäš:õ@Č€ž ČÍ!cŒsM'Ž@úR¨Î9í@9üģÔN TĖj7^9?…bkęđ85‡ģîįŽá[ÚĮÜ_¯ZÁaÄgÆkxlc=Č{0ô&¯ø|íņ.’ŲÆ/ 9ôũâÕ#ՇšūU.šáuK&cĩVxÉ'Ķx­ úîŠ(ރĸŠ(į—Ī=ę&wĢ.Ŗ$íø¨H8ŽÕįä ĪΘzãųTØÁÆj2:qšCcKŽM(QƒįRzsCęh É8Š6sšB¸üi "p0iųAīR5&0)\zÕKÕĖCŽõxŽj­čũĐĪ÷¨ÜĒ’"¯Ėp})˙ŧģōäõnŋ•*ggLš” ž•%°Š ‡ŽIę}jmŧædĨ?Šd Šp ƗīLB׊\qŌ”´¸8?­'Ĩ&—oõ÷§/n”ivœdįķĨĀã=M(ĮրWŸé@ROZRW=håš4„gƒŸĘ`jR{sKĩˆ„eqÎ(Ûšsß>”āZ\r8¤0ێ”ĪOĨ?)x¨1íÍ`S'Ĩ ëŒ~žš?ũjSÂķKÜđi1žŖž”€éíJWœf•F)vú~&€ã¸4Ē>´åSˇšvĶĀ ņ‘@QyĮԟŗwëY×ÚŞ—"-˔/œ|¤˙JmØ–æ†>`r@éŠ ôĮëY â]2Iĸ‰%rō°UĖlOÔVĀ`GLĶi­Á4ö c ŌŲė)N4žŧ @rO ĨqÅ&yÅ(8 Ņq‡ŌœGáš@F\eûb‹€˜īԐ‚)ÄãŒ`|ņŠ@8œžôŌ;Ō–ÁŒ”¤œœÔ\cÛĩ)Č< laąÍ řÁĻôúš\3éAŨ9ôĒ­éd˛ũē ŠÁÅ-^Ā^Ā$`sMôâ™ņÜD˛ÄęčÜŠSEIÆHíCp:~"ŠÎĩ)į9Îh¸ 3ۜŊģSTg➧'†āį‚08īH[h'›ÎsŽ=)\L‘œ`ĐܞԛžoLŌ9ÁgßîŧdbŽĻŖ“ßÖšŌ įÁÅ &@\JŖ4ČŨd¨žG*ŒqEĀ6†ëØĶÃŽŨhÉÆ);`Žč¸ AĮ§õ `PA'=>”xŖŠ qíJ-Āæ #ž‡“Jå=Å8ô Œúv\`į/§)ÁĪę)xãÖĀ¯áúĐFŠR˜ƒÁ4cüæ #ųQˇœŽôá×$œSC)8=G|Ķ}iĀ1<{SĀäzŌcŒš`7Į¯Ō™Œd`đxŠxä}hÆOA‘@ ÛĮ==i…rxâĻÎp 7äãքÄ3&Õ~´ÖÎBŽũéøĀãˇĀ8J:Ņ“ø})@ã4äƒNãŽô}z})xÁĮAŪ€ŨhëÛ4g=ŗj\ät Ž@ô¤9Īđiā€1Ãø 9õ4NsŌ‚qրyÁ ׊L7¯J2Æ2)ĻŪ)€¤qÍ' ´Ķüi{vüig$sĮ4À=éümÆiŽvŽE1˜ÚĐ ‚2;wŦÁ… ŪÕʘzV æúé[Ãc)îFØā_ʒˡŨF ØôÍ;~?ĘŖ?ęûĩĸ!ŸcQLŠA,I PĀz}táEPĪėwdƒPąØy$ŠöéVHrGSPI–'¨ŧĶŧw`‘éÍ6F“ŒãŌ–uƒ×=ÅDĖqŒķŒĐĒ8ũƒé@ČĮøQˇ##¯ÖÔį@9ĨÅ!*§œ ņO Æ8 •ÉįJLņĀėsÛې/¯…yÉ…<6ôâ;ŸÂ¤E'¨ë@ Æ(Å;nGANט ßŋlĐzņN#ß­!m$ĀNĻäšy<` BzsL$ž !0=qŪ”(8æ|@ {R…ÜĀúR€3ŽØëŠx¯Ĩė)TaŗJÛÔs@ցƒ°@Ė{ åŧbU´|‘É‘q]^ÜņŽĩƒâ-.÷U€[[É CÍŧ’:`úSƒ´“dĪá*[ģ^>™gsĻųPŪŽäYFFÜ?č!"1#¸ I>Նm[‚ŊŒË+íBÛQļ´Õ"‹ũ#>\‘1ÆG84íkTŋ°ģ‚ kXĻjî|}*Üz}ÍÕõŊÕđ…Mļ|´ˆ“’xÉ'ųTZĩåÆŖc5ĩŦr%ŗo,Ōcq#éM8ķ [îû23aœā÷…ũˇŠ Š•tô“ėō,o‰y!šāw8­›%Ŋo5¯8ōĀ$hŲ×8ëtũA.o.ÂßΚ@đģK“nzf”m­ÆÛļ‡G2Œg$UYŧØā’h#ķ$åBÛsøÕíŸ( rqÍE:Ȗė!Eg …VløÖhŖO†Úk˜nE”68äu­mJüéÖÆãČy”cvÂīÍcÅĸ_KĨ[éŗÁqĢæI•÷1˛p1ÆkO^ˇž}*K[hLŽøP9äŸĨhųoĄ)ģ]Ķ¯§ģyŖžÍíš0¤!ƒžãéW‚Ė}dž˜ˇ s*ConÉģ û؟§\ž0+\( čj%šKc”ņ}ԉokcRmsĶåãÖļ_K´Kh pÎ:uõĒž%Ņ_UŗŒĀÁn`mņîãwĩHšĨÃŲ¯™Ļ\‹Åp/ĘOûŨ1Z^ņV#Ģš.™eö$ļ,X 1Ū™m¨Gw{wo`öÄ+ņ×>•4^}Ļ–qēiÕApœ’ŪՇekwg¨ÛŨ47yņ2Ü ĩ‹dt<⓸TĨ{ÜwĩŦm^j)ĻÅ–äļĐŅĻB“ĀΧZsŪ•Ô–ĖÛĖXŽã hŸáS^ŲĨå”ļŽN×\ũĶØū¨čâęhâú=“’#Į˛ņŸÄäū4´ĩĮ­ė[Ô.ÖĘŅîd$E,ÉÅIo:ÜCé÷$Pč}PÖb7’[Ú*L˜4Žą’ĄG8?ˆž2Ļ–ļŗĮ*ĩš1‚ęFåÉÚGáŠ-îÜ/­‰-ĩužŧkxᝠWß‘īRęđiņF÷.U]?…cØ\Éi>Ĩ8ąŊ6mŅ/ī žũ*ūžZ]WʐÎė„$h_OA隧Ía);lĩo^A 3yd܅y>ÆĢ\ëÖ6÷fŨ§čÁ[(ØëŒ —OŊÍĀÛ+ +y˛Gŗ9Īˌ˜ũk#TŠIõKÃRIŦLŅ”8—fKqÔqõĄE_PmĨs ’á-ak‰˛¨ĢķaIĮā*;øoáií›| ũâĨyüiZę4ˇšRâ0„c;ŗéŒfĒxl“ ÛÆU•med+ƒøÔÛKŽú…¯ˆ´įuŒJřöõÎ=+`8i3Ę⟯š;aw÷Wo¯‹‚ČŸg?ŧÁ#Žyü+¤‡QŠ}RâÅQüØQYدËĪ`iÎ)l(ļ÷.`c&“bz{R†ãsڌüš uŦËä0ĮãNã=ésÎ{ŌļÜzoSŸ×4֔ʁΠü¨Ã<~´¤‚:ũ)ŊÆyŖi`3ô '¸¤<ôŠÉéIÉéë@HPF:äįÛ­IŒJFĻ{ĐaŸ›ŽsÅ@ ãIį*éûõĖ]ĩĶx,äēžŪĄŲqË{¨Ģ’Ũއ#$’(ÁįŋáOˇqIĶķ¤1ƒ$vĻCu!äŠh<˙úč:g1ž3Nۀ íči[œū”ÄDà O\zĶōHsF8ūbƒĐzŠ.ƒÎyĨ#ۃÉĀŒôõĸā4ķšįŠĨįĩ#Š 88ĮZ;v.9ĪZų9ôc Į­94€Ė:÷Ŗ§LPHÉ=AŖį ŒŲņ ‘LëüŠŖŋ_ÄR‚AāäRwu œsMßéÅ)é‘üčÁ#Š4‘ŽX~U‡äĪKŽ3ÍC#*“Ô⨠}Xã­a›uú ßÖ÷bšū|‘é´VÔö2žãe8f>„˙*„6ält"Ĩ'.ߏōĻ•ŋ/Ö´D]i˛´ģIÁxąé•jŗŧ>í/†ôšžÎ&8õ(+Fē Š( `3Q08æ¤$ôÎi§“Šķōŧ‘įļIĒō(ܸ8Î*ԙ\c¯ZŠAÆqĪ^´ ‰°;T›9ĪûRĒņ‘š ĐzĐpM?sLU#ƒ×4€cqL=L@"ĸ+îiu¨.ĮîMY" š„š–RÜǃŠ•j8ĮĘ*d‹bĪ\c<āĶÁG5ËA ĩžģĀŽA”9”ˇ38ģÖÖU2#`P‚Hį8õĀĒQVą.NįEæd)#<āŌ-ÂI,¨ŒŖĀ`LķÍehÖö~|“Y]Ŧ›ŖU( =ČõŦ”†8¨ŅH˙iIʰŪr#;rØúÍ.Tô‘Ø{uĻąČĮLV–ĻĨ%ŊŽŨíĻ Ųå?Z‚ÖKî´ļ#9ĩ1¸ßhOŋ&Ž@æ:Hnbž/6)änĪ‘dûÃđs\„ZE¤[ DgQxGÍ´s€GĻqVnímE’ŧ7P˝ĻÉōÆø^TĀõôṙ35ĩûûģ 0\ڄ,$ KvãŌĩUžA–ņ‚+œÕZá˜ÄžS"ČŲaķ| eŌ[\ëq]Ũ´M O˛žĐr˜(}séG*h9ĩ: søvĻž1Ī^+ž-üJ›äķĖŌŦŦCÆUy ;­IŠĮēüp\ŨŧQIlÄ)E,{õŠåÔ|Æņ\Æœ‚š˜åéö]\ĘĘī*¨-ĩĨAŦ[#āûŅÍwcĸ‡Ŋ”‰ŽR’āŸõ÷éG ųސĘ7“k6ÅÉUŸÂ–6DŽQ˛†*Ã{į5ŽMq–îU!|ãĶËv>ĩ7Ÿs<övßiōÁ˛Ō29ã¯ˇ\{ŅĘ.cxŒŒŽiPgž+Ÿ¸žöŌ[QqxŪHæ„„õačjîŠsq卤.#ŪÅļįhû āã9ũ)r˜Ō<6OnÔđzw{Ŗokm3\™gŽlŅʉ”Ÿģõŋą¨ oF%#{#‘š•Q™d€+íˇ)Ž}’âE…‡”Ļ?–UĮ8oīgĩIusq6Ą-…ģ,e!32nŨ’@dqÅ.]GĖ^ĩē†úŲ'ˇÄÄāãÁĮz”#ą9ŽwM–{=#GŠ=¤J^7]ž›ˆ­ *âæ{{ŗ&ŌņJņŠ1Å7 HžãTąļ•Ŗšá@*2HøĨP˛•áŽ+˜ĻŖ sģO•áEEßq4ĖĶšį=áOŊļ1jztV"sį°bģ€'ņõ§ĘŽĐs;\ß]§>´ xŦ(5Kš­4åUSuqģ{Ēpį$GˇzYĩ BŪ9."Š ÷Tģ8á[ƒÆ}=ér0æFŪÔūuZ{ëki!ŠiUfÛ÷cYņę7Íeä#Î˜ĒšRœ3sßķĒWFũô+—UWkŗŊ2?*ję'# žx-cif‘"LāģˌŅĀŽæŅؘļĶÉíÛú֌Z”6IŠ]-ŖîK’Üš }ēŠn„ĨÜÜ]āe‡$Ķē ŦuÖÜ-菺hžŲ€n ŧã§C‘QĻŗx'–+=Ŗ‹Î8Ÿ!‡ˇZ\Œ|ČÛ$ŽīLķí/qæģn{zâŠ&ĢžâŪ'€¤sCį#îH#Û"ĢCĢYŊÛŨˆa,$ëĩgvÎMŦ9‘ģŒläSåN=3X°kW/K%“D 2ėŨ‘Ž€äHô̚mėē…ˇ›ÅrIL@‚¸ 21Œ÷Ģ1ëąIi<Ī Ņ43Z'Q¸šÆ\wõŖ‘‡24=Hâ˛ZÆk­^+ë¯-#ļ ą$đXœŨĒÉÖ`{]ųs*ŦžSĄL˛ļqŽ=ČĢ6ō­Ũˆ›k) đëĩ‡8äSWBvcļƒČüé;Ķ­8}ÁĮ$”‡į5#Æ;#°&üÉŖ¨ä) :`Ѝ{R•;väôÅ'Ũ ķĀĻ!BôõĻ•ĮQúSą¸‚Oĩ!-׃ÍsƒŽ¸ã"—Ž*PÜžJP2z⁠Î܁ۯ4ŊHb“į$įĩ"Œ9lļlô <1ŸĨ ČgŽ´ÎZcž´˜9n1Ķۃėx ‘ŽŊ)ĄŊ¸Į­(};R`†''4™ų¨ÎOQL0ČĮåLîIü)N9˙nÎhįåIģžä}(Ī#>ĸļIĻ’1ÅDŪ  Š\äzRdguí@ĖXe ŽwnO°ŽƒWČÅ`0Ä#é[ĶØĘ{‘c.Ūŧ˙*Sķ ĶúŌ Ëžx?ƜÜôÛũkC6}Qágđ^„ėrͧے}O–ĩŗX$øB,I?a‹¯ûĸˇëuąƒ (ĸ˜ČëLÚš´pr<Ô-‚ĩy‡ C2ĀšŽáƒôŽe$ũzTŠÍ¸0x¤eî8Ĩąö4Œļrr;QÔsJĨNéÆéL5#~tŪØ {ô¨nAō­˛úUių…Á¤ŲQ)Fŧdg=*uđ¨ãG5(Đp_QN#‘Ō›ƒÅKÅ2ãĶéOQ•#ŋŌ‘@´ü)’7ĩÍ8āt¤’q@ ŒšÎzĶIÁÍ8r(¸:zjGMāĻXéŪž0A­;9â€Āô†%”t §¨# ԁ~\t¤•Ö^V*Š'đĀ`´ˆũĖ`'#åj”EĮĩ#Pšû qY6úĩÔĸÕå˛ÛÛmÄœŽ ô˙í†Ë8ļų ĮŲÜoä6íšsMŊč}•ŋŲ x/ ŗJîŖ9ÜX“ŽzÕņrc…É EfMŠC& 6ZÉ/ŲßĘA?1Ā$ vūĩ'öĮ›pcŠŲäÍō‹Œį= Æ1€}čią&‘ʍT(6õÆ)ĄĘ qØb¨YjO{3§Ųöƅ”Ÿ0R0GlöŠ5 ķa Nļī1–A€äôĨg{ërÜqĸtŒ.y8§Go‘åĄ˜aŽŅČ÷5ššģŦw+qk$sAĩŧ°ÛˇЂ(md&Ÿ{;ې֯†@Ų€x?>V+ŖQ!Ž|¸ŅSĩ@¨dFo.% Č8oŠÍ6ŪâKˆI`0å°`ŲŧV}ũܓA{Ŧ!–8ȑļā•ΐ9Ą'pm°ėx˛Ą0Ã9†÷ŠŌ5aąmô"°íoŪ k+KxwĘ-–FųIĮsSKŦĪöđ-ĻŲĨŒHRWØIĪ*ŧ`‘C‹¸]{ALĢŽUNŪG(wØĨąŠÎĩÔ%ÔĄŽXŦÁ´•ŠîgųŠō7cĮãR“e]ˆœ s1ČŪ0 ÕôųeÖāŧÄFâhĘŗōAÎ1ŽÕ•Ŗ]Ég•¯Ų—ėŌÍ4háų3žœTˇW[t‹ö†Õ‘žÕåČįw+“ĪLƒŒ{Õr´ô%É5syâ‚}ŒËĘÄ´ûR-•˛ĒoÚr?v89ëY–ķ­•ŌŲAĻüĀ',ƒå°OáŽÕ-žŗöš“e´† •$<äc€yīRĶhŧlm$–IŪ&w]ŽÅXzdÚe”ņG ļē'ÜRƒ ô¨tŨSûEZD’å\¸ ŒãĩI{vš#’yĘn1ĮŒ…éÎHZW°îŦ#éÖRȎÖņnŪ:cĨKyem}Žî• v>ĩ‹ŖŨÅaáû8ą–fp  ų‰9$ãŠØ˛ŧ‹Qˇ7Ų¸ĻčAÁĄĻ4Æ˙fŲ:BĻÖIžBëƒ+ōŲëŸÎĩŠåp gŪ™ŗŊĖ9Q“w¤ ˆmŖŽáá6ėŦ…@9ĀĮCUWÃÂ8āEžœ%2Į§i?‡ųÍo`įŒQˇžhæ`♕sĻũŖRˇŊ3¸hAPF=sõ¨áĐ´5ËŊ­ģīŽ" c=Ā­‚OËČ=)UNū˜Ŗ™…‘ˆú$Íi$m}ĮžI„uÎėuõ=ļ›%ž­=Ę\ ĮsGâĀũ+TąČúE_˜ãōŖ‹•ũæ‹rRé-īŒpNŪ`“8bAëéS.›yöšn>×’Ka Ė}ī×ԚØsÎÎ)TnäzĶįaʎsûū§47qˇFœ§ ‡ŗ×ŠžM&ę[{øÄņfâe‡åÆ8ëė+g'î8Ŗ8åÉã"Žv (ÆÔâ{oˇ_KŌŌ´lķIŧŦkĩŽÂĩ7pNr>” Î2@ÎhraƌH´ËøK%ŧē{ŗIuRrTvīÖĨŅí50öķ´/k"ģ9>ÊÚ]‹Ô`÷Ļ–¸į<ĐæØšVį=‡| ´¤ĩĖFāœ79$ãõ?ĨLú~ĸ‘Ū”6姸Ž—€GNZÜĘŠįĄį8§cō4s°äG5&¨ļ™uh‘Ûaî˙qNxöÅiÜéh'7wp8 qM„āį‘ŽkD$ũėuÆ)NCd}ß§4s°åDJ¸\OãM`qR7œÆ@j522Ã8č?¯ëHc@ØĐTƒQÍ;í“F9ü:ĐįœŌđGtĄēdņBŽÜĶĀi˛.î:jw=I4ãŒt4Ā„ ėm=y4ėyĪáGÔsHDg‚?•7Š'Ō¤8č üi§ę}i€ŪHÂã&›’3šq<ņøSNzrhįošB{Í! u8ü($ ĀS3“M.ĄĀ$‚zqL,rH#”Ō9Sģ8čhSĪĮ¸ūTÂĮ‘Å!~G ;›øvTü>Ņv@ˇ ú]=r? _áΐTä‘#ƒúŠëĢuą‹ (ĸ˜ #sŪĸ8äce†j=§‚kË=ŗIõĀ#ĖāŸĨ[ jˇAõĨp Á#“J0p}ņO+Éi6sNā?g4ĸާŊ3Î8Ļ‘ķ”Žzf<ŌlØІ~!ĨY ‚aûš8ėiĘq›ŊJ¸ÉÍ21ÆsRŽ{Tš1ʐœL üęB>OzŖ1RŒõ Œ‘Úœé@ ÜâšÄí8â¤Āų­ š4f2{R…ãéÎjLgԌ~^´qÍ=}hŲÆzSÕGŠ4Œō ,°,Ņ“i=úI ĖvPĨT)'<õÅOqĸßÉį%Ŋė+ š(¯$6rA9é[ oβOo0ā3 $~52nÚ~ĩ|īĄ¨ÉNģˇž•íī‘a™„’ÄcÉ ÜŠíšKm6ęŌūO*íE¤’L&<•'“ƒõ­F',{Đ{‘øTķ1ōŖ&ßJ’-SíŌÎ$qŒb=Ĩ†s–į“Px‘ÂZZūņcauV qĪ\{Vß\ņÎj9mᕁš4|tÜ ĶRÖėt˛(I§M$S°ēęUUĒ`*ƒœŸ¯~õhw&Ūúw[°28ÚpĮ>‚ļ6° ØRKsڎv…Ę™VdŽÎ8epŌ*í,ŖãÚŗįŅî^ęæ[{Ī&;”Äą”ÎNÜ=+e9äŒRŽxāc¯J\Ėv1ŖŅŽ6ZÉ aš†/%b:Ž€ŠôõŠõ ME"ī”Ĩ nŒƜäÄ÷­@ŦĀœtŠO9ɧÎ÷)P봌‚0k'NŅ.4į) ÂĐ34p˜ÁۜņŸLšØSōœcÖģqŽ•*Mdõ0Ŗđüņ%Ž5E´­*æ!ÉnšįÜūté4KŠm/aû\@ÜÎ&Ī”~^œuöŗž āũ ?a{SsbåFjØN5TŊ–x›÷KFą|ƒŸZOĶ/ėÉ[ØÚÅwyjcËŽz ûfĩTœ˙U)fđ)s0åF>™ĨĪiŠÜŨLa 2*í‰J†aՈõ4ûÛ+åÕŖŊąhxÄS¤šč !†;ŒšÖüã֐–ųæŽg{‡*9Ø´­F ;GSoö›g|+UŅ9ô5ˇjŗ uŦk)å„t~u&OzĶÁË.(ropI#ŸMęhuhg0ĸ^Hd‘‰(xÆx‚Ĩ{]^ãHēˇš†i#ōĐĻFsÁb~ĢopÎ1Į@sIËzz|ėQ“•ØÔí.(UÜÂûd$äāį§û?­6ÃFh/õ %#Ȕ‘ ŽĒ—ũk^I„Ax<ôāĀ…ãÜRįaʎ~2øÃe§Mb IūĐī…?( ŽLŅöMVÖĪQ6đDŗËuæ§Í¸$gņĀŽŒX Pķˇø4ųØr ŅH;Sļū)AÉÆ9õ§W`‚ˆÕs‚AĨÚ6uÁ'ōĨc9â—2OŌ§ŒqÅ;m=‚°ûÄqÍ€zšaąģ"€ŧdv§ā’~™¤`LŊxô ÎzSJĄG¯­J0ŲīŠ |šã´ Sž¸üč+9š“b3øSH\§é@†”įÔúPŅüĀäįâ‚qĪ­<õ8ä@ĒÄĐ#žũŠÄ€¤ƒƒÚ”QŽ(ŒœŠX˙u¸ķķāöĨf•āâ†?('šĀĻ!ŦŖvá~”(ËIæœr9Čúx=h¤äņúTˆ¸ĪĄíHp;ŒĶžŖb€ŋ0ĪCĶ„[œįžiĀüÜôŖ’:ãŊ ¸†î=iv‘ŒuĮįG<{Rœúôé@ r-ÔRc#"‚riĀ=(ąnÆéR(ĀĮZk0y§ĩXŒgĶրƒ¸ tϞ„ž§rôį¸öũ(*‡åŊE&ÅUF ”įĶ‘MČ'ŋĩ ĀĮ•5¸lŒsÚĨ @¯ZB˜'ƒ‘Ú™$dčx¤ÆĮéNč}rsI‚ÆzįĨ&<÷ tŠJįši};ņ@ Ũ“‚Ĩ‚ŧžôpGBԌ`pqNāFØČ8LŌ’:m4æĪųĀx=xöĻ!­Ī öõϏį8õ§’qŸĨ0“žq@$úūÖäHö1=)„ŽéL'⑘žķÅsČÔynÆ{Sōįp^NzPNPúS ŊĮŊ n{s͚pâŸö­9>ųZÄqũ hf}đÃ|8Ķ(Ķ˙\˙Zí+†øG'™đūÕq“Jŋ_œŸë]ÍoŒ^áESá…Ûy˛3MV;đÄcÛĩ?ĘÖō)Ļ>r1ĪåädáøõõϞã ã֟ˇĻ9ÁĻēļp:R(`8Įë‘Kõ¤ŽšÍ'”Ā%ļOJmëUĨÕ4č¤d–ōuᔸȨÎĩĨƒˇÁ˙}SŗŅh§R[9¤+•ÁŊŠĀ|Û˛IjĪūŪĶ7cí<˙¸ßáJu‹¸aß[…¯°ô."’C6K*{)aZĻ筘9ķŽƒ÷Mū>ąhP˛´§´ūrą]Ö ŖœŠxAŽüUaĒÚ2ãū¸?øS†¯i´'?Ky?øš,Âč´ß/–0}zõŦá­Zˇ<Ķŗ˙…HēÕ¨<Įw˙€˛súRåcē.Ē cœšV@N9ĒgY´āėē˙Āi?øšsjöœN1˙NŌņ4r°ē,3“NĮP Gûf׆Ûq{w˙ qÕŦ—ŧŨ9ũÃ˙…+>Ãē-čsĮŦšälzÕ/íĢ—2Hšé˜_ü)ËŦiŨ<ōûŒ?Ĩauܸœāũ=¨ ôSĶž* Ö´ßųú\tû§ŌƒŦé„˙ĮäCwŠĸΰ]ļ ŒqíŠrFN? Ī:ö–ō>8Č$ŌwJfÛöØŗõÅat]Ā-‚xíF'$ ôÍg˙oéję~ÛÁÅ9ĩũ)T7Û"äâŽWØ.‹ÅO^ JeØzžõN=wJ“^ÅĪŠ§ oK, _[ķęāQgØ.‹†2ˡ$õÎ(†6XļđGjĩ4šúÜ˙M5õŊ1T•Ô-x˙Ļ‚‹0šucĨ8‚c zT†ąĨņBלËe˙SŦé‡jŸ÷ųƕ˜]P€6āž)ÁNIúUXĩ; AÛ}lNxÄ˚zjVNšļųœH´4ĮĄdą…üé2:ã4Õšˇa'ą× iˇÜΌ’?ž)j1ãîõ&šĪNÔĒņ51܆§€ũáųĐ!ģvĮ&›–füĶIĮ&îyčE1†{ kéíi‡+žŧú¨â›’8úSÂiŒšM=†xô4ĪOziÆzāÔn˛qR@æ˜r#§Z`GĪlzĶX`đjBAíŽ i_oʘˆņīëŠFuÕ!Œdū4Üä÷9÷ ˜g<ʙôíV6“ęĩ4Į‘‘“LëM>āT…Ũ‡) 2ĩVÅšãŋŨö˙×֗ĪpkyFįĨm ŒĨ¸G“/˙֕ÔŽāzüéW‰H÷4a\zëTIôÁ×-ām¤î@?Cũkŋ¯9ø,ėŪ ēĸ߸M‘ŸękŅĢĸ;ËpĸŠ)’xeŦ†âŌ [†tV8÷!Ĩr+$vÖWÚRĻK8$“I$3uëŠŊv­id—Izīw #y.@œ:œŽõį8ĒFö:ŠĄiķÜĒ+ƒĻ&ܸÉ•Ÿ-Í坕ŖĩÛŗWe`œ–ޝ­I¤•k­QˇcuáĮoāJž]Ėj°ŊFeO0 e,ŧ#ëUu„hˇÁš?ˆ…c4Z[ŧÂ7‘šŌÕv¯,ėۇsJ1ē•™ÖtŒæ›ZHdZĮ2†Ô0 0yö§z‚†ĶH=¸§“IŽ1@ lô¨fæĮĄŠČ㨤\ÄÃØĐ4g[Œ úTčš9÷¨-AŲøU¨đ~•&ŦUzyŪŦ*Jh†Æíã§…ųqÛ֞Œ^ÔÉØ{PG#ÖcŪ”|{Pûô§xŠEéOPM 枚ü~”Ŗ×ŌŽ<CsŠ1ęqJĻ@ü)@Áé@Ž*yu/í+†´qDâ"Œ1흧ųÕG¸ŋ.åĩØq€q“ŸũģŌ¸ÎõôĻíÎk_iägÉæpĸkÖMÉŽ ö%ūËAžíÉÛČŦFr āûæģĸ:t9 /Lņš~×Čs…y.Ũķũ¸ØĮEI?‘íåųĩŲĪËŅb—ü+ē“€>RrqĮo­(Lzō09éGĩ!Ä1¸Ųąõ{™8Č rj!áņŠŪ€„[ɚô„ ₞¸ĮLQí|…ėÎ68Ž J?ĩoų>Í52++Ąø˜j+´“ģė˛*íuÆr)øČi{Qō1ˇQ˜_ę@ąĮüzIĪëBZÎ%ņ3Õ1ųö—ōë]Î3œūā:|ŊhöŦ9 ,îb NĨĒdŋņé/ŽiÉÚ)ÆĢŠ1'Ąĩ—Œ×tŖšB|Kڇ!ÅGi>Ũŋښ‚ČzŸŗK“I=ŊÆâ¯ŒOŲĨŽä)į=iO.qøQíâÚíOË­^Œ ÛËĮéQ0ģ‡jzāãŽ`c<ÕŨČģ—æšS ƒÉę3Kڐᝯļ¯üOYˇGŽLŸüvĨoíGÛ­2įƒûˇÉ˙ĮkĩdwīHą•Éc“֏jĖâÔA k{: íåļ˜Ī|Œ7끏#…~ŋ÷Íw%9Å(œsZ~×Č\‡ ŋPÂŽÆčüã´ÆšũŖ$ø‚"IĀ[üvģō ũ:ô¤3ĐuŖÚųŲųœRęØ˙„‚Ÿx˙âjX¤Ô—ū'Ņ0õ*ÜãĩŪtúR€•äŅí|…ėÎ*iõ#ÛŽÛs×˙âj/´j6Q­Ųä‘Á8üVģÃČūT…@==~´Ŋ§ųÄ õBš:֙ĮAšĒÔk-đ*NŠĻ1ĪĒu˙žkē ?/éJĐĄū>اí|ƒ‘œ™¨boôÂĨ¸§åRŧxČIt‚sÁ-ËúWlbCŒÆŊ;ŠCM€mãüTRö‹°ųsŠTŊ°Ct"?)‚õą‹-$ƒÉ‹?ÎģoąÛ[ÂG`PR >öpÜÄŋáOÚ.ÂöláVŪûs(Ōtļ\v?čÕ'Øõ/ö6œņíĪÜQŸüzģSĨiäÖߌKūö6–ügZį˙RŋáGĩ]…ėŲÆ-BE8ŅmPœœ…ëôŠá|?÷xnņęėŽ‡Ĩ““§Û€}"ø{H<}‚=…?hƒ‘œ|v÷Ÿ;Ká•6Ī0úĶŪápG†äSžÍ(8üëŗūĀŌÁĘY¨ãą#úĶƒĻ|ŖėĮ#ŋ˜ßãGĩBägË?ũ ÷'#÷“sAiU>ž§Ë]“xOb1Š{bgÖŖ:“uû@įĩ˃˙f§íPr4qÆYUžmP ‚ Ę8ëéK ܑÄŌu§ ‘s/#ōŽą<9fšË]î ˟ãQ [C,Mi5ÔQ ų‘­Ë€}į­Ō"ä‘ÍޤDd›ITĒ>Ķ'AÛĨL.ÔøõÕ+Ķí.kĨ_ڞLך˙¯§˙“ûÜ/ü}ß­ĶņúĐęDj,ä ō‡eúšŋL ļúöĻÛꑡ(cÕ˛?éí€ūU՝ ,`^_ũ>ŌÔÕŅB1˙‰†ĄČéį“OÚD\˛9ŖŦGæ`˙jmÎ3ö“×ōĄĩe …}H펙ĮøWFú>AÚ7ãįgúSŋ˛HBŋÚ7ŧvķAū”šĸ;HæNĢ´íiĩAŽ€LüņL]TFėëT'ĶÎSüÅtƒL‘œ¨Ô/p}Xü¨ūĖ—pÎŖzAã‚ŋüM>x‹–G<5ą´mŧÔ:’ÉĮéJubÚu Dds÷={VųĶ'#Jė}Bũ–”iŗ˙ĐFäúü‘ņ˙ŽŅÍåg=ŽbRŋÚZ‘sļ7ũM8ë8o—UÔ:˙ĪĪĐ&—(˙˜„ÍõŠ3˙˛Ķ[G™›‹ãŒã›hÎ?J\Ņ+0ã֎åVŧ9é›hÎjĖ:ü[„äIkUā~´†‰8|ũšGŧ ûa^~ī5;|ÊaāqúQp1uÔŨ`üVŨŋŽ+¤ÖŠ ŠŽq@N:šŪŖ)n ?zIõ4‘Ü ÌëR.w“îiŧ˜SŪŦƒÜ>ŗ _‚Né ĀŊ6ŧŗā6¨3Īž§đ^§[Įc nQEP6đˇŪŠ3•Į+ÛŌ 6Ģi%ĸÛÆ8!‘Wh9úUS¯F’ˆåĩšŒ™D%Š‚ĒHrAčsWn¯a˛ƒÎšpądpO'úטԎûĸ­Ū™m{&gFČB™W+ō“žĮÔU˙°í<ĀŲ”âu¸Éü`cų*™æQk{‹Y,2!É\ r={:|w–ōŠhįFļģĄëJė,˜ˇļ¯uc<˛ŖH…70ČãĻkãBŋkic m.mâ„d˛Ÿc“ŸÂēdeؤ8`zۜæü84”œFâ™VÆ9áĶ ŠæO6t@LũãëSžW! nŊHČûzĶO#Š{ ž´Ō7øFi÷OŌĨ8¨Øq@#&ԝ§Ķm?#Uí‡ĩeF Ôz¯Ė9Î*EĮOƚš'R.֙›C‚đG­#ŽËJ[jä“Ö‘ŽqLۜ§$uĮĨ7vÎMH"˜‡cŌž –öρĮzx ĐíĪojx8āPíÅ Å!€_›ŌŽqĮQNëŠBšg“@ŗ§ƒÁčj>’ œHęIyÍ ŋ4Ä ^h'sŪ”€ `uĨ)‘מŧŌ7ĮägĨ;gB¤cŊ?$…5ˇ r3žôũŖƒÛ=čØ  b‚IĪˆOŊ"€_Ĩ<ž?• 'wĩ;8⛷Ūž#°H >´î įĪzCō㔊e”€:įņĨ$ā{ĐGéN`sšC"`xĮ>”0ä{Sö‚Ø&°ŧWĢIĨijmŋãâgÆØÎ=OųõNJævėŽÍĖdtĨ=Ī5‹†ĐY ģģŧ–č€Z= 탁Wt{[Ģ]68o$i'ŗ!l–‰ūĄĨ҉7ØšīƒīBōsĮNÕĖX‹īøL/,[Pē{[xÖTV`rN8'94ŨtŨZëēd_ÜŠܛ]C98÷§É­Ž.m/c§9+×9Ŗ%Aäc֕! ˆ™bÆXōkÅMyöTƒO™ĸ¸+$„Šäĸ¯#ë’)E]ØmŲ\č7§æī֚[0ëŌŗŧ=vš–…gr–ØōyÜ89üĒŋŠŖškÛkšíårdml9ĻŖīr‹›Ũššŋå#ŊžRqĪÖ¸éī¯ôË=ø^I:]”Yĸ”@9^2+­ž'’Ų–LR€ûCcßJ6+’nŧf‚[Œzķ\ŋ‡īĩGSžŠæüyvrė"QærG'ˇNÕĩŠEĒ0ļtŠ˜Îģ—n2:õĮJNv`ĨusC9Pr)Þ{s\ƒŪkøŠßG7ÖĄæŒĘdįåāņŪÕ줨ępËxˇ÷~|NUĸu@āîsŽÔÜ,ˇ+šNJ0<‘üŠwdĪN+žÕ.u|AagčHo đbRShƒŪĨąÔnĶ_›Gŧ1HV/6)Ŗrš 9įš94¸sjnāŒ1AnHÅGp—ŨūÍ"$äaZEÜ3îszF§Žk3\#XÄņHŅ1ą F9Îî:ŌQē¸9YØę[AĮŊ!†HįëT´ŲįģĶ!žæ/&ā‚$Œ‚6°$¯`)5aî <zĶs—ũ)åJƒĮĖzņ\­×ˆu Mj=5ô´iŽ2bÅĮsÉ㎔ã-´–§Päp58įÔ÷¨Ļ{•˛%ļų° ˆH=Ā&˛t rMk|‹dņBŒQ™¤‚ĨŽ×Õėn¯¸´ŌĘËĮOįR¨u ÄxĻ2sŒb¤€ ŽqÍ1œõĨ\€8>üŌK¨Æi€Æ`ŸĨ';Ā'ĩ=†AŠn>`qߑ@ ?/^8ĻļvnÖ¤uĮEÎiŒšROj`FW+‘×i ¨<’:ÔÁrā0;÷¨XxSĨ_ņ¤Î㎃×46ƒ×ĀôÍ&FqßĶ4å;†8üéģG@==¨*9įŠ`<ž:qJ‡åã$L'h$įJ$Áõ BHFr6į­K &%'ņÍWíe8>ĸœBგGm,g‘œf†lpzTi¸Fŗ1Ō‘õ_Z@RųČéMb8ééNãŋōĻ‘¸c}(3žœņF22HĪ 42áp Īĩ.ŨŲ= Á4=é:68āPG<ũF)€™Æ:Ņ‘ÔwčiÍĐúcԚN×”r#Š_CžŊxĻ‚ äŨŠr÷ë@ üŽŊŊ)œqŒ{Sˇ ũ &:~´Ä3pã#ôĨ;OqųQ´}zԁĮZnÜp)6‚"œŲ4Œã‰´œS\j“ũë™SãŪēWū<ߏN•ÉÆ0eĀ­éėe=ËāÉ˙ū´€|‰õ4ąß{n˙ ũRŧĨY6=‡āƒm­.FāВ=žđ5ë5ã˙ŨDšâ,đOņ¯`ވ|&ø‚Š(Ē$ųæįIž•'ÃBÆKˆĨb8LdtöoZĩšëMh`MîJ ĐƒŪ¯ZLnm`œ¨S$jäĶ#4ķĶ5åš;Ę*ÆE´S õ-đ2¤Ž ķ€`žãųW=pŽ–FKģ)%{bQĶ ÛJޤã§ŊvÍĀíZÎÕŦ¤ŋĩ[xäXȎY—?tįÔwÔĩÔn'5¨-Ŋĩ„¤eĻ{EaĩGĘ#<ƒģ8ÔÕØŽIÕ5Û3-Û¤Q4p$ŋ+ātí]# eų€4Ôļ‰%2,HŽWi` všôR;ä瞊i­Ú eĸ~ĢS8 Ķ•xĻ‘ųT0ŽyĻãš{)1ƒŌŒ#ĩFũ*^´Įæ“2íøéëVF?ÔvãæĨPCŽĻŒruŠ?•1G4ōF=HĒ%†}xŒÃ>ší@9—` ģœûöψGONâ¤QíH1õ枃8ÉãֆI< S‡NԜ“‘Šv1ž($ôõ§…ÁįŠM­ˇv)K/–ÎÜ2sØ ;ž=) a?V@WÃ#ŪŽ Œg4€ŠHų Č÷íOĀŨۘcÛĐ9=ęB>nyųiˆ20ŧ`g‚iqŸsNîoĨ"ƒ´’h…3#7mŋ•8`p~´„>ĶĐņŠV …Ī˂I ē‚wdãôu$ ķŠ&=Ŗ“ĐPäģÆiĒ6“ž‡šĨÜt94™ãŽ{R•%Hד@ƒÆN}ÉĨ2nįŌ”ôŌ§?/OZƒN$'ŒŽÔŽ™éjUBqž84žb`{ԙEDĒqČĶ•[•#ŋڐÆ)¤Č=kÆZ\ēŽjĨώ“ĖUÄ;ãßĨt[I§ĸ‚=zUEōģŠJęÆE¯‰tŲ,iîãŠU\Iœ2ļ9ęjî™u5朗Ååŧ›™T‚\š÷Æ*ŗŖ8snęIÔÁ ^˜>ô¤×@Š}N Ŋ6įĮz¸ž#‰V2_˜``sÉŖ^“M˛ņ6ŽaxŖXå>v;9}+˛}´rKhõN07P“ė9­=ĸš<Ģ ’Æđ ŖuhØz×,nŦu_]ƒĒ4k"8ü™BîŗķŽGēŋ/ tÆÁŌ OĩHō–ÆĀc„úŠˆÉ"œ[9?^ÛY_jBÜŖÆ&-lÅÁŪ9ŊüëoÅĶÁ†oIYĶ [‘ĐVömŦ!Z+HåŒ Ā{Ķ崆tSqr•nPqųÕ9§.bTZŽDƒLŋĶė.K,÷0˜ .áw8#Ōē=č‰;UG,x^ÚÂÚÕáˇŽ6|ą@$T×GqÁqŧN¸*ã ū2wcJČæ<#4Šë€H…šė•ų‡#-ŌēđŲ~•Ÿ‘aŦąØÛŖĄYcŌ´ våqNm7tM+måĖGâU“yŠąmČ-¸`pũkŗWųĪĘzsÖ˛‡‡tŒāéļビå ĶTAqĒ…@0cNIÚÁÕîs>##ū}ųžX/"–dp=jđiū!Ŋ°ÔJ›ŲhŽ_ŦŠØztô­ĢKģî'ą‚IY˛]—$ö§\hzuđŠ;‹("]ą‚9Qč Ršĩ˜š]îiîOõ&¸ØļĨ jqC{$ × ¨Ë´đ1ž3ƒõŽžâÆŪæÕŦæˆ4B”Éč:V_ü"š*‹d¨1Ž ũyæ”d’a$ÛFĩėqšˇJąļÆeč[8=ęÉr=ˆĒzu’iöim„2@ôį5e”į’j¯Ąjö$,[5Æëˆē+Ö&úušÂœäâ°ī<5iw|ˇsyö˜ĪČâcō}=:ÕA¤õ&iĩĄ¸„āŒtę+’đ<‘Ž•¨6ā.ß,N8ĀŽĸH –ž@žT æŠøīČĮéY6ž´ŗĩžÚ;‹–ˇœ7™8!‹ Ԉĩf˜I;ĻÄ™f]]d9Ž:žõWLĶĄŌėã˛ĩÜ Œn9=sÖ§u%€ČG] OAY€#ô¤ČÉÁ⃐ĢĪCFŌK7AšaįĪZzœãÔS@-´:BaÉ”ôb<ūđsրČāQާĶڐõ˛i nÜdK×åíõĨĮsŪ†Qšyüq@ aÛoë@į$8ōØb:zRíx" zsւF1ĮįNN)§“īLîyāzš3Į>ÔgƒØĐA sœ{PppHôĻîĮ^™ĨfČãōĻ;ĐŽãĩ.NqĪÖ›ģžÆ‚@íLC†O¯åM#Ą ä‚(ëéŒR×Žžô߯¤ĀĪ9¨Ī-ĪãLÉ9õ4gŽ@{žy¤$õįŪ€\‘éųŌgŋõŖ'9˜r:(Xƒ˙ë¨Û‘Đūtšį˙­HXc˙­L íO‹)s“šåĐäJk¨ÕAk7Qƒ•<× ¤ +ž•ŅKc*›—;ūū)ī…5N%ãÔSŖč?ßĒ$õ_‚NPÕŖĮ- g?BÆŊ–ŧOāŦ§ûP h?F_ņ¯l­éü&3ø‚Š(Ģ ųģíA§´wHí°ŠÄ mlö9ū•râIŽ5‰m#šh8Ģ´ŧ’G9ė1ÛÖ´åŌle#}œŒ}ÁĀΝ2ķLĩē’9g‹/v•bŧwuÕæķ#ˇ•˜ë{|ÆDi+Ũ e1ōqģ>üqD:Č‘`ũĶ2ŧŅŗōƝB i6“lđJŸŧ_2Q1mä•qÜgéUn´§ŠŽæX]Ų@%÷}ėŌŧ^ãŗ*ˇˆf[Xåû8ŅÜLČã­œāN0jĮü$6¤,Õ7fO+ĖV{nīģ×īTãĶĨūĐ}1.ÄļÅ+äĖ8ÁāãëVWOģ°’ûʑ>Âų”aKJ­ˇpzf‹Dz›ØČĪ8Å4(^ŠčŸjūĮļûvã>ߛpÁëÆ}ņŠŧGáŠÉčĘDdĶHõ§‘ČĻŠfxĻã֟ŠB1ֆRÜĄB;äԸ䚎1ûĶŽy5/¯ŊA¨å^O4ãÅ ĪjVûØũiĸÕîs֞z~”ÜrH§ä‘L›=r)Ŗ pč;Ķū§=qN€išĮ9īJ:uéրšÆJ ĢŽĶЎ”cˇjP¤1Hˇ8ëKˇÆIÍ.ܜÔ}Ū{P“H:t&ĸB œŠtoģ!}rhLg­{cĨ!œ.OJF`ˆņĮ[^äķ_cqNâ3Ō‘ĨS'—¸#!r3Нuy ¤ܝÄíTQ–fėîk–kû[­^sėˇaCoĒHs‘Œã:#Į)$vGëIÛÚš™|_fļˇ`ž;¸GüzL;}?mXŨ­õ”jŦ‹4bMŦy¤á%¸)'ąp`¨é@<„UKģËk8Œ—˜āģÉükÃ˛AkĻŪkR"ŧ˜ēc…A÷@ŊhQŌãrŗąÔ3ķŒgŠ\ĀÅdžˇĻÄ-˜ŨŒ\¨h¸'p'ˇGZĶ,~QœqIώ Ü\/?0Čéš8aGĻkŸņ5Ü2iMe¨÷“ēƑŦ˜ląÆxįŽĩmŽ-ôÛ8ŦRî%¸Ø#e~Xžõ\ē\\ښëČÎr)Iįq?†+“2Įq¨[čßm‚ˇNÉ.גB~îAĪ\“ŠØŽkMCb÷ŦÅžTÉēBIāzĶq°”B3ڝŽ#Ū¨ÉĒØÄfY.áSl¸ų3Ķ5R_ZGŦ[ik"—u;Ü8ų \zš•Ęm#`œyāö¤É JŖgĢŲjMĨĘJđļWĩ[ÜüiZۅî<–?Ԍ19Îr8ÎëfYĩ=*ndG{Œ2Æøų@ÉĪå[_inEˇžžp\ė.7›ŽˆI–7yįâ”å°AĮŊUˇŧĩž2‹kˆĨ1¯ąÁ÷Ē:ūĄsĨirŪ@°‘åŧÜķØŽųĄ&Ũ†Ũ•Í‘€01HpGŨæšÛMkQMGNˇŧŽŨŌú"ĘaÜ2yļ+u¤ W.1rG'Ō‡„¤™0QŽœĶ8ڑd …úõĒvúĨŊܗQ۝ōÛ6ÆCÆN;ÄsE›Ņ Ģ´î==)FsÅV´žY­#–â…rŅ–iôČĢD'i8cÛ=iЛ8<ĐzãŊЧ>‚˜ÄčyČôĨ䐞´Œw{bšB1Å%įūnmÜôĻdĮáÍ.~_~Ŗšk7ëL'œ~4ōÁ—#ĄÁ¨ĪN€ãۚ'Ĩ4ę>”18?ãMÎ=ûSr;cŸzL¨ū}iīƒA8˙õQaX˙ר‰ĮAúĶ›ƒüĒ2r0éNĀAzҟ§C\sŠ&Fčvx6Î0rGĨrG˜fükjfu FDĮđëI#”Œ`€wž?io߯ûŖúTScËîIsZ%Š čz_ÁÜøÆō6ļžėxî$ŒS^õ_>üÜž8˜ƒÃYH§ÜnCũ}[ĮcnQEQ'‡Yj°_ąîVŠ$ĮŌ’ßQˇŊ‘ã…Ë2rĀŠ23ÔdišMĩÜ ¨`_-B,‘œ—šãĩfi0_C¨š¸ŗh‘ĸ( •ؘb@zįųטŌÔîģ'×55´ˇD†åcēi pI€<bj÷› NbĄ‘FJų€úVŦŌÁ-ėMi+ŦÆ)c’8Ë´€AĮLc?Fɉa…Ŗa:]K$Œf& rOĻQíG*h9ĩ:4‚ÜNgXãķļā¸Q¸Bi÷­ĩ¤“°ČKmNA\ĻÎ} •úđOJz…Ī=B7{N§ŽÔ ¯Į™01Áįąœ >´GJp=ŗČė*‰9§r0ō“ĶŊHŋ{4_|zSņއđĻô$šxˇjv9õĨž”Ē:ûŌ¨ĀúPƒC&îzxéÍ) é@ėāŸJ1´d ‘ į<‘Mû íŋĒ[]}–H,,ÉtķF֙ûqØ ƒÃVĻiRK6T’=ī,׌ĘOđ/N™æēĀà z ^ÃŽW>–NŦÃņJJÚ7Ųā‚YMĖŠ‡!s–ũ?Ŗs5ĀÔ%G˛‘žÅl$Š4Bc ‚sžäpõÍuA‡LsNP!ēRS˛°8õ0ŧ5`bŅãkˆBŧŸŧÃŽ'’[ܞŨ¸Ļx–40&{f¸c eˆUãÔāWEĀ b™Ÿn: \Ū÷0ÜtąÄęIi ´×˛G Ôę$ŠŨ4Q %Вy5<‘”¸Ķāū˔ €×!Ën|áDč'莸Œ u4¤ÎjŊ§‘<‡Šyƒ35ŒĸâūëōÎņ’yĮ`žüÔĐÚŪFúŊÂŲI˜áû<*ąô õį$Ÿa]’Ÿozw=}hö°reŌK§YhÖĶŲÜ4Ŗŋ-æ`mū$ũkĨĶ-ßK†3l>74jIÚĮ“Éę}ęįPJR@ā™NęÃQŗ0ŖÖē˙ąÛ5¨ĩ6ņˆ +ĮN:P-ãËČ#E2 R ĶS˛.§ĨØÃt/õëˉÍŦS´Ņeąŋ`ę}ģõ¨­’ŪßÂą:(ˇšÔ%)æ NN] ~xŽæ;X˜ļ „&Ũ›F1éŠd–6ķ=ģŧ7ŲÉōÉs>”ŨAr•Ôi¨Ū>“%āŠŪ.Ú(&Fāøõ< ŗVˇ~4rÍįų6Š%ŧĢ&Bā•#ƒß?Ĩtąi։~÷ŠBâUÃJæ?EiĨŲiķÍ-ŊŧQ<ŋ| ÆhsV‹šŸâ;ˋ{{[{i)¯%ō„Œpq’sۊËû´z Âl0iåķ—d…›ã žNHę:×K}§ŲęQGä *ŖēHúmĄ¸†äÛÅæBģãîoJ•48ļÎwLœj $Ô/ĨŽæÄfKdm ā—õĪZŠĨČ`Ķãģŗg7š…ËF HHE#<äāŖķŽ´éļl÷NÖņæäm•ąËŒc“PŪh––°ZKnŋg€‚ФŽ8ĮjĨR"äfėē–š¯o~ĶÉ{r ŦĶ‘ėrjkãĢŲkHī–[›Éō ; chįŸq[¯akįÛH°(kpV8Į§j¯>mwĢĮŠLdyb]ˆūAƒœã×?Ō’šę,Ė[GTŧŠKY…ĩĸLT—÷Ēŋ{ߒ8ˇ5Dj—Ķ3(ŧ9ģēÛ(PüÍøãšiáĢ#9ˇ†•A/Šy!}(‹Ãú|[2DßčĒV0\‘ŸSęxũ)ķÄN21¤ģÖ.ĩ›číîb† V]ĖWr€9#>¤UĢ+ÍFūín1Y[ûĨAģjsq˙„šōö{–c§Á1†!\ŽŦŪŊ¸éLÖ4ûM+O{KmŅ.ĄrĄ”tUæÚ>ƒķ55Ļ™Ēč’]Ϙ-n-g”ĘĢ<… Lzô"“ûVķ­'–Kk‰í!&3)%LŦųb{āiu}ô3ÖÛj[MfÚ yĖĐI Á"Ä!$ĖĀ:ôĒâ§1;*Y6—$E*°ŧn'§'?•2ëAÔŅíįļ’Öâåe’iÄā„f`ĀôQĶéZWú}äŪ6‘N{ĩ2åpŦCŽ:ÔŊŌŊâGÔ%…,KÚ0{še Į•''ׁUîüAŦǐÛËrūhƒ1ãnķÛ'úgZk71Íy{ötģHm`˛ąąn'š?ĨAiŖę‰6š] †(#;Ö6'iô­ģqÔŧacRš|^cœsŊžč'Øs]$`ōr+œˇ]ZÂĪRÔZŨZww‘-ԃŧįąöP0oiķËs§[Ës“4ˆãūéôĨ1œČ7G´ 1či˜ā’>n•)ô4„üÍACIÁQ‚I^Ô˛ ÆsíK“ƒJĮրWäÉ“?)b§“R0ŲÎzöσ’x `0raéHUY— Î9÷ĨnWŠJ@Ø& "ŽT’ÜzSBŽųÆxŠOLņøRŲ<5ņ°?*  c'Ŋ!N ûŌm€ sž•+˛–īōœāw `gŽ ąH$S8ÁcŒzՃˇv8ÍFÄŦƒ+Æ9Ļ&3mš?­3;;ŽAŠ Ąę2i Ž8ôĻ+l*ŋxå|Îrp!TÆ08öĻ ØĐ+H8Æy=3PÎ’šĀôĢGnÔĪ)H/į˜ã×ÔĶpC `úĶąŽšŌt=čģ)Ų ž=E&0p(!ģžh¤āg=(-Āā{Đx\āœvšāõ éųŅģƒŽ(į’) ãŊ8žãĀĮ4ÜrG?ZúŌŧĶ@ Æ™_֔ķĶ&_ց oŊĪ1Ž:įéNcÉ=Šŧ`œûæŠ|Ã’(bĮÖšNyū”™Áäįđ ÜNzõ¤f<õ¤aמE&xëúP dƒÖ“Ļ:‘F8ęĻąöüiŒCÔdĶNéւ@#Ĩ1Ž3?:bŒö¨ÉüéŲ'éL-‘Ō˜Ü6ØXšäTäĪžģëŦ—>YšåXby”{?ĨkOМĮ+|ëĪđƒRãå'ũŖUÔæ|Č*á?īĐƒŽødÁ~#iåũaq_H×ÍœGãũ!˜ûōŧ{Ŗë_KÖ°ØĘ{…QVAáãEĶĸetĩTeÉrĪ^•ö-šÄąĸē"ÄŅ7 zЎy}Œ>eˁ˜*œÉéU†¯bö_jûJˆˇÉr:Œu¯*ō;ô؂}bdķæƒˇaČíūsPĮĄĨ†Xī%6Ęås’Ŋ:gšĐ{ģTÚÍsÜģ°X \~Čî…ËBÖōDÖīmÁžbxĮhŧ‚ČČ˙„~á-Œ\ĮûÛqm)1‘•Ãx8$RKŖŪ¤Ŧa0íûZɐä(@§ˇ^?ZŪ ¸›ņĒBúOí‰,JĻŅ”>y<ãĄJC˛Ŗ‹åĶUu K€Ė (ããôĢü暧9éÅ8T7vRŲۑœĐGâĻā¨ääŌĐ2EFÕ)'¨¨Ÿ99 PßIõ§ŒsíL'÷ōc­=G¯­eÔß ¨žNß­ qŪ•†3VCĪŊ?i˜9 įOœãëL–‘īNÆ;SFXSĀįÅaį g=)Ęp &“Ķš~š ¤éŽzö¨Đ• “RnäņHƒÔĶĀé×Ūvü¸ĪŊĒĮ—*Cž”3s€x4€sƒHŒƒĘH÷éJ˛Įœ ú|ÔáČĀ= ĘÍÃ)?ZMāœ’ }hÎIę3Hw¸9ö§nCЌuāĶŖ­ÎŅ“ĪJ§CôĻî?Cšųãĩ#OĐTr4‘Æ ĄwãåįRqžŧš\äā˙úč‘’v–8č{w'PO㴜ĐR?Ũ€Xđ1MÁoN´ōO§Z^üõë@ į}OZ9 sõ§(ぎÔ*ōO§…~mųü)W'ކ†mĢĶëKģh'ö Č&L`ëFŨÃßéSdr{žÔ=h"ĄīF>\tęLmlĶ3Ķĩ ō ŽŊéAûRđÃÅŖzR ˘9?Zs)@m­Š6ļđęqƒL W^yÛå€{6OAVp̜ņØTŠŸ6 ôŖnҌĐ‘œ€p:ŌČŲá0w/˚6ኞ„}č˜(IÁ÷§ā†äR2–8ãĶۓšĖĘ gŽ?\Ĩ")Ūžĩ0bS9õ ;ėaúÔŖč)¸¸`Ŗ?Zz’HČÁô4§ô¤ÁŨŌ”’zķJ:g9æ ûŲėzĶöņ‚9Í"­Čȧŗį°Īz`0Žæœ‰×Ž}hB$}3J[œ¯JFã€<Ķrrŋ/~jRr7)ŊŗÆ(I#ƒJA#ũiįÆ) änN;ԐHĮãN9úŅÆ3īڐ Îqõ¤q’j\ ŧâ‘P2į=8 đJNØ=ĒOŊ‘éFĐ"˜įq'ˇ­5¸##53q‘Qļ2ĨcĪ͏į­MØäqQŖŽÕB"ĮĖxëFÃü_IĶڐ’8ņ߈ōÄā`ŌŊéā¤ã?J+͚`0ŽA4ÆĪZ‚×ښĘAÎE#'’;Ō•#Ŋ)ûØĨųäĐ劤n”öļGéQFÎč Oíž)€âp1šQĪ?iúŒ{RnĮ>ž”üŒzzŌ=)ĒŲ$J įë@†g×n-žâĘåüų,33,ĘۗqëÁë]ėk+PƒŠĀÅS]ŠĘdKh܄îëųĐĻŽĮĘĘŪâŗu{ôŧRĀŠR[b>\’É­žĩZÂĘÚĘ´™ÉXÔŸZŗÛœŨËJĘĀ܁Ԛßtg­(Lž´d‘Î{ŌÃĶ4ÃÎrjF¨Ī_­!ĸ™˙‡ãۜ§Ŗr~Đāû*~yöŦú›t$1Na’i‹Īō§ˇPJ˛ÜSĀČÉĻnÁæœ2WúĶđ@ÁĨĀ´ÁĀæŸ‘ŽžÔvwtÆj0^õ ã§á@…'˙­OĮqŒĶAīĐS×$tÆhņœq\˙“ū);žšRŒ1ūđŽ€}Đ1ČëX~4ū;ŨØ ÔãøÅT>$)ü,æî4Í+¯ isHë3HnYFXfĸ’ĪI‰rúDãŽĸé¸ũ*ÖĢ6ÍJr¨ Ē¸e >īŊ3HĩQēKK‰ä1•, Iķ)ãĻÁ­õŨ˜i˛(-ތå é3r3‘zßáHÖz!g\)mũWŪĩ5ũ2-ėímdŸtĖÍæÉ'Ũ“€b$ĒŌy QĘîv ’pO^øŸŌ­;ę‰ĩ–¤‰g¤Č?uĻ_cĶíx¨§ ]&Į™k~3Î>ØŋáRĀ86ą1§ĖĀ<™Ā댟J¤§”S6U¸m­¸13œķĪķĸ÷~Cĩ–ģ’]Yi˛ézŒļŠļąĢ2ā2ÍŽÃë^¤/FŗWoģn…‹öFkĪeųt]x §lp¯īšîîŧãĸÅ 0´†UDp˜Pãqę;fŗĒî‘t՛+hz­ÅõÅôWXWWY"P8Ę˙õëRí¤û,Æ7ōåōÎ×Ā88ôŽ~]8čū$ŗ—N˛ak$f;€‡“ōõ=k~⎓6ČŨSŽ‚˛’WMĖÎĐĩXŽė-cšî)oZ‘ĶpŨĶĐUøĩ+9§G:@¤u÷ĮĩaéļŌĪ˜˛iķ[Od¸y$ ?€Ž9$¤Ņmž(á‚īI™gĩF ;>ä'ĘķÔũ)¸­D¤ÍXum>ieDģ‰ž%Üã=sî*Q¨Ų;Äî Ķ Æœ{z×=ĨÅwĨe#éķEn-ž˜‹æ“’8ëU-d’(ôhOģÎ儇É$rãš9sŗĢļÖ4Ûĩ”Awy$‰ā6ā⟧ŊGĨČŪCēYåiYŸkd&NBūšãķi÷‘Cc)’+ã9Âí§™ģ Ū¸ūUˇŖũ–{ˆŦn­ŒŒ ĩĮßrԞ(”RZ.ėŊquŦbK‰Ŗ… Ú °QŸÆą4ģ‹ëí&Æëí,\\7˜Ø]­f?€ãíIŪß_ˇ¸–Î[›F€Ä<´Ūc}Ųä{Ž3íRø]ļéO ÛË$Ō|¯Ū ’1ëÅ´nŧŦhFĐydŨBDĮlxqķô´ĒØÅ(Žā3l æ îôúķ\ē4°ÛÛYļwēßR3XIR…Ø‚=zŌ^ZÄŋ] a1’[đ åžī+ÆzƒO‘ ÅÂÛÄķKÄqŠf>Ād×?c{ĢëVŋnļ{{[f'ɎX‹ŗŨˆ#…k]ÄēŽ<r‰Ą*r¤ČôükEž“IŌ“NÔ,n–xFÕ1BβŽÄĶņÅLVŽÛŽOTJšĨŨžŖÔd†Ö´2:ž¸`'ô­™/­Ą'yŖÉ÷w ‘‘Zę'¸×ĸ¸ŸOŸaąu ĻāŽy۞*¯“sko¤\Ía{"ÁnĐI9ņ†Ā<Ž >Tė.fŽ‹ûJČʋö¸CHyƒæ_QëH5{˛›ŸļÁä†ŲæĪ§ÖąĩkGˇŅėnôËWIm2BŲßĩ¸#ŋ­KwhÖ#J‚IdōÃ!•T°LŽ@ęOŠāQʆäÉu ë…×4dˇœk–}āwar9ô­y'H#2Jꑁ’ėØš;dž!áä{;Ĩ6…Äšˆüŋ)QúÖˇ‰Ą¸“M‰­ā3ųS¤¯ õ‘Aä{öüŠ8̤ [ŗJ=BÉā{„ŧ Nă }Í,z…´ųéqEœo6įëXWDŨ;č´ųü¨î§W‹k¸ pÛz¤˙…WÔbûeļ¯:ÚĖ`™āX—Élģ/Ūp¸Čã>Ôųs3ĸ›Plî."š)*Kmpp@č}*†•{q(Ynī-ØInŗų ģZ,Œœû`ŽjäkÖŦ°ÚIåM`[° ŨĮN¸+M€˜.‘åĩŸhŌ–&>C¸rW§Ĩ *ÂæÔ“OÖnöÆk̍…ŊÜ/!‰ļ¯—ƒōāõ9÷ô5ĐũĒŨgX ņųÄp…ÆãøW!fËlÚˇĶl[g…ŋŅÉ*ųbϞ‚ŋš×P‚ķí?lķ‘ÕĮį*ۀė1Á=ŠĘ(JLëwrryÎk2ęūTņ”f# é&đ:‚Ŗ=sīSęžsi7Ÿdí&ãŽqÚšËK#ûSEšÚ%Ęŧr~ėŠ ´pN99ÍL#}J“ļ‡]šYĘĢèÎHĨ)mĄ=‡õŽ7N–Ú=^Ūb˛"ËŅŗ˛6ö;aG?OZ‹J‚ÎÖ åSeҏ)#`î*C lí§ėÅÎwEÉPFáÔfąuûûËbÖËķŽR,2pOoĘŗ´$Ž/Ë qŦŌIÆÂ˛&_”“ą>•kŒ"&˜ģžežĪS…“ĮĨ )I nņšĐō‘œgĨ(lãœWŠŨZ˙kųŪcf ä/+™o*0>įķ'Ĩiø’I—GBĢ#@Ķ'Ú<°säįžœúRäÛĖ|ۛęŲ‚=1HAÉôôŽZvĶcļŠ]9‚iōŨFˇ&<ĒmÁü8õǚ“ÃČĩœ%ˆX|ŗ˜U—w!H>˜ČĄBāåc˛’UŽ&w8 2OĩPŌīīošFšĶĘļdY Hāyäv5ŽŅZ[_ꖱÜ7ŲŪČJGžO͖į9äb“JŧzEšÍ'Ųg´2ßš@ÎxĀĪųU…ÍŠÕ&0„ŒŠDn8î3\‰’áŦ-Ąûlâ!Š5ŧrĮ.âär{ā÷¤žļ)qĢFÚĨā[käf#æēū_Žhö~aÎvˆūÆéR‘‘˙׎N?´čqMß,ķŠŪíTmbŖ Œ;wä×JØé¯%Ô¯;ƅŨ œ=ŠĘ6ØJWÜK‹û{i⎚@’ÎHqÆĨGĪōŽ~fģēŋŅ.n|‘ Č΋;—1’=J– Náõ˜ídŽ5ŠS ƒŊvô$įŽÔųEÍŠšĀÔŨØS´žä×=ˇ~æ ¤ŗˆ[=Éļve•ˇméSÚjˇZÄöĸ8DQ;!LH6ŪāûQČÙ'$r?ZođōNGëN-Į^ũ)9ė*FF3œô™Ī#&Đ~”ÜméրOQqI‘Īķ§<ũŠŊr;Ķ­ŒriĨ+ Rg=ENĶĐcëRŠ#ŠˆņĶ­)é×…0ąž;vÍ78F=Í/lc8ôĻžh¸Ĩ7<ŽiŲĶIöĻHäíHHĄR€3ķdĐĀ9įéIŅĶڌs‘éJ@īŒĶHįđĻc9ÁüŠģx<`t})2☰ÉÁõôëI‚IĪZ“_ƓiÁŠBåëúRcˇĨKˇœL Î)Vä~áųįiŽNôæâB{ČŽÆ@:“ĀŽJéGÚåíZĶ܉38éåS[’ÖüŸãnO֚[ĄĮōŠ‘qĐ9­LėkømŠø›Ie8eŊ„ƒīŧWÔÕōžŒJë6,¤†1Gc¸WՕĨ3:EV†gtZŒķ.G<`Ôä`? ˆƒÚŧƒŅãßŊ&)ä^FyÍ0ō8¤0@>n3MÚ#Ē 1#ŒŌ°ÎyÅ Š@ôĪūßZEëíN=¨‚‘ŗßŠ^4@ =ũ)‡ļjCQsíHe 8ģl{SģđzS&˙Ļü)ās횎ĻŊ SÍ9đ8#ŠHĮJqį9 Q"KŽFi{zRŸģ‘ځ ŽsKŸO_Zh94 “L‘ũN§p=)€cĨH9 pđ?ZxįƒúĶ@éR0}M8 ÂņĢ…đ•æėdė×įē23×5Îxīđ‹L É ˙ŧ*ŠüH™ü,æĩ&“ûSPEUŧcq+ōŸÎŽč6æ/FąKҘYˇĸíRx¨5…hõû‘æ$i$ĄwčšEæ¯h*ƒÅ$ž`XĨPøĀ cŽšŽ‡nS~aŪ4ÚÚĻ™˜ÄÁcrҐ~aÆEbŦ áßĖd9aÉĐ|¸ééô­ŸËk*īĩD26}+) Ŧvū{°2yÄ ōÚ _L€AüéÂܨ'~ga x—6_"‘ģc€#ԃīëP˛-ÛM4Í*]–R‹+väãŒtíøÖŠŽø˜ķŖ ¤ˆŪ\ōášĸU^[‡ŠT‰A°ČÛI¸ī×Ŋ¨OpjÖšŌ4&ļ’]mú˙žÕŪ]ę `šz29$  Ķ>ÕÂßčzēõÂ[€Ū§Ėjėupz>G?mˆČÔKTŽZŅģ$1ewĨ\ÃnA9ÖÅÕŌkā\–Fģ02(ũØM„ķ‘÷tJ@OĩbՍSš7 u<@•T–R§ āõĨ–T‚&‘‚ÆŠY‰ėæ°ĄŧŋXĸ’KĸäjMnû‘~dÜ@8íPęS\KŖøŽ™aųP• QIsO“Ry´5ŦĩHīnfˇōĨŠX‘\Ŧƒī+t#Ú¯åŽKč3\õš8ņ-Üŋhp‘ÚBūPÆa¸éœwüj}&įTžWŽŅY՚DČųA.Ü ät948õAw6ļm~}8Ž@€y5Ÿâ;ÉôũâîՕ$Œ) ˞āZĢöNÛSkYŽc™'ļ’XYbÚceĮĪ#šJ7W•´69*ĮŽiėĘ`×7cŠjRZé‚k˜ÚMG?”–Ą2ï$Ķîõ[ËK{ؖXĖļˇF%hōFx#4ųÂæG@Ã9īõĨn uĪZį.ĩ-GFšö;š"ē"4nÜžÜ0 ÕĮ¸žĩÔ㴖t˜Oo#Ŧ…(ëŽÃ¨įô¤âĮĖC¸ĀšažnÜ0iŖ™{Žså\ŋÛuk› *c¨7s `Æ89žyvįUēĶßSķY%û%ŧNŸ&Üŗd}˛)ō0æGGŒc=ĮZFnG‹5åõė6Í*Nn`‘Đ”ĀGPoá9Ēö–¤Ķčō\ËÅ&4i‚nįžôšs$t 9RMW›Q†ŌâŪÚRÁî XūRA gŠŽĻ–—KŖi ŽøâšÂ.ޝŧ?qqĮ33‘0´lx9įŠ#ƒv:fÉÅG$Š<…DRI=k#OŧÔīü̍ü“NĘčH $zgwž)|Zhoĩ°žlaĀWxĄG[ôš§a{ôeãŨĩ V …H?CVĘņXrŨj3ßßZØVĩT Œ30ÎO|vâœúâkëg;¤ą_)Z"VaŒļŗgˇ ÷Ŗ—°s…4Ž9Į'ŌŠkˇ“iú<×V剎īŽG$ëQ ­FÚū[iž 2Ũ怅1íe m<ž9ŌQm\ą§å< SUTĀrqXpj÷ގņ´Š+Ån“Fâ.0n:üΠÕuŧÖn-4ŠEŞ5܀äˇO,œ›ÔJ|Œ9–æúOÉ$(ęŌĮČĘį‘š‘‘%ÚY•ädt5‰qĒ\YÍĢŽks Uےāu9é“RIĒ[Ø\Ī5˛1ˆ&ÖU듆%Cį­Ŧ\ÆÂ‚[îôåÉ ëU´Ëƒweį†Ef;^ō‘žŧô>՝qĒ_ɨŨÚY[‰ ŦjHĀųŨ†@Î၎üŌIėUҞ:äŽiģŠČA ãĨcŪę:…­ōÅūŽŠp [–RyĀ*Į?Žj6ŋÔcÖ.RGļ6ļļë,€q${ņԚ‹26âš’Ų‘;Ļ:œ*]ÁB’vîlrq“Y——ŽäXFŠ<bäãʤä“ĮpUūĶģ¸Ķô뛋+R—ūrÛr>ö1Á4ųš‘Ō`Wh+éHca*"Pž›F?*Č:ĩËŪ\-Ĩ™–8&0収z gŋĨ2į[ģ‚ßSZÄÍe(\o8u*Gy¤ĸÆÚ6FFLc=9QŌ‘Ŧíå€E-ŧo9 ĘøõĒ3jw#Y|VˆëåŦŦæ]¸RÄ1ÔTVZܡR@éi'ŲĻf á[åP8cÆ0qØ÷rŊÅt_}:ŅŌ5kXp‡ Ļ0Bũ=)eĶl]¤”ÚĀĪ Ã–Œß^*Ļ•Ŧ6­uˇ(„nVķ`ä‚Ŧ;7ĩjË`cŠփҭ GMąķ‘ūÉåB ˆĮĘŊĮëMFĶ`ØŅŲDĨAU!z+;S쏟ÄVz2Jņ@ņ§t8,9ÂįˇJļtč´š~ŨĖą[DŒf‰¤gVë‚O"žŊŧaņčút1Šn¨°Éž0ŦFÖõëN}*ËÎ2ųG&O0 ė/ũíšÆh]R=ņĮ%ŧŅ4Čd‹pŧĀÉŽ;Љ-fKiÚė­Æī,ų=HÎG׊- ÷IæĐėf°›'tŖÎa¸ūJąqg Չŗ˜"e An?_zŦŪ ąK.ÜLŠ,ŪHS,¯ĶĨBŪ$°y“íˆäōä  „ô-Įæ‹L^čĪøFí ”–ĶMupmWš]Æ?uô>õr 5‚Ė[e˜6w´Īš›=hģÕ--^Dvbb]ō”BDkęOj’éŌ;9&iŌ$’%#!}Ŋ Éî %ą™oĄ-ŧ–øžē+—‰ `Ŋ:b›„‘Nŗ­ŨČhįgQ‘üG$9Ļ™'ūßĶŨˇ–Ųœ…Pđ>ŊëVfŽŲ ÎȑŽY˜ā ĻØŦŒŸėV[möĮûFãäļíߖiŌiu8u .G‡pŒmŨ‰îj—PÕ ‹Jēē†HŨĄ^z1čüES´Ŋ’=ZæÂâú9xŒÄhrÄĀc­5Ík‹ŨŊĐ 䎴ÆOz2~Pyu=j ƒĶöϰįŠx/LzI´/ĐúĐxã×ĖķÁéRcũ;T}Ĩn˙õĶ]pN:QģdœĐy$äãéLCIãÎ’@Ļ÷ôúRôõÅ0ĖŖœëQƒÛš§œ~?Jaã9 p?ũtĐA<ņN¤LZ(ĸ´ ņ!ĢYIį„HĀ,dx==jš6ŽH–Ded``x#ֹ֋všÍ6›=œą´cÍEw.pp2JįųÖž›æžŸnČŅŅĀ_lJōåŽôîOõ´ŽR9‘˜ ÅCqëŠEŧļ•]ãž6T;XĢ´úät{x]- ĩąK¨'™f‘“æã8ÁŒQU|ûfŌ5(ŖPžeŒeWiÉ*Xrq÷ŗˇ>ôũš¸)”ˇŅî–r’Ũ,~bÅģëŽ{dа¯•€#=Ĩqw1iKvŠo4šhx㸃ۨŠā– ] ×Ë ĸÃ$ Á.›y sÜäNjG_ŨœûŠ3)Úvœw+—đl¨Õąyd`ÎÅ÷#ƒ’}2:Šęųɨ”y]‡uqŽ}é|ŲöŖ<ã4c9Š(gji˙­0žũ¨3g8ŧ?…IŸÎĄēéGŽÂĨøVOsn„ņ’}ĒFŊj$펕+7ØĢ$ilbÎÍ0t§H­–/påNœæriAđ4Ä?¸ņR ŨíQŽŊ>”đMI´?ƜĶÁɧ¨9Į4ņ×<æŧsđŒË€3Fr}ÕŌ ūUĖøéŋ➠Îæ0:ē& 2õ­­]ĄÃŅ.Öoŧv¨ĀŠô8ßÄę˜]É›ļ¨?/OÎĢ^3žš¨’ĒGœ Ž›§Ōĩ2ĪQ3Kum IŒm nbAč>kg~S.aŪ-šg4roŗēŽŪÜķĪaÍbšŠ9<֊5RĖvHpHéžW#°̝]Ųßjv÷Vē•–"…^BONÆŗĘ§•ōŨéÛÉ!ä7,31ÛëN? nDh@Ι˜,Фü¸8ëéPŒXČĶ!2˜z1ßL“ųÕĩŠ 'ķnõK(ĄEVŨ'đ1ŒôæĒ)ÜŌIäáČPA$¨O¯|û͞jÁ{;ÔX+T}›˙Cc^5•­ÚGö˜P˜dÜ3´úŠķKŋØzŽĮ ™mÁĀéËWĨIrļņŕwwųQdšÆx˙ëÖU’ąpwnä2hú\ō9–Ęg0–\üŪĩjáåŽđÂeuéāšükFģQ&¯up˛Æ>Øc“īU@qÉ?JĐ:ÕĒÛ5ÉcU›Če(KČ gÔVm;Ø´ÕŽ-ž•–ÛßBįLĶ´yČļqŸj_ė /dŅ‹P`<ÅØl~>‘u‹s˸–&ļĮ˜’FUšû¸ķQގ™:KĐxÃČdA€N„į>Ô{ÁNûd7Fß÷ШDbíĐtĪ<ū4ËM ÂÆõîmŖdbI ŧėRzšĀ5F×Xŗŗ†ũåyˇÆÂiˇ.â.0O@ü*÷öŨąXŲûå,3ÖžN8÷÷ĸŌt‹ÄŅKsáûËh if‘6ĸ''=yŠėôëo˛+ĨIdˆ#™‹ãŒ“3éDZŜŌ@‘ČīöˆŒąíBw(ëƒëíQoŲ}ž ‚Îcžo%Ëčā㠞œæ…Ík—š)ŅŦ…”6ƌ‘ĀÛĸÚįrcœŠĪ×tá‡îmí –iftvۖg`Ā’OĐ~•§e¨E~ŽŅ,QĘ錑×ĩ—â N4Ōoĸ†i„ŅÆAh–Ũ˛ĀqN<ÜÁ+XÔK&ŗd13,čO8ŗ1^ĘI9īMIļ‰ËLîËå‡y 2¯÷AíüęĢZXŲÛ‹š˜¸…BļŅĀÜÄtīõŠî5‹ i䷒GiŖA#$qŗ§ŋ•¤éšŸ-„vM‚X<`HŲB=r;ĶÛH´ķg,ŽßhŒG"ŗ’ Žƒũ:[°D‰Ė…ÖhüåōŅ›äãæ8j§ŠĨqáĢšíæ’&E^6Áę×5ėîčļš=°mûĻf˜•žBJĄęíüę%ĐėŅ­ ™ĮØĪîšØ_ņôŠn5K[Û+32GæHUIØž§õĢŨÁ™ēyU` Ė'Œ”¯ ´I˜BFŌą`đ۟°4MpžK#vÚšėxô¨õKĖŌä’ÖyíåâiŒĄ(\ÔtëŌ­ÁŦYËÔ¤ŧ"ÜâQ,eHôāúöĄ)% ;0‹DąˇžkČQÖGrÄ,ŒˇŽÜã5fúÆßPˆCsšŖÜÕrš#ĻqīPKŠ[įĻâ‡Ė+åáŧÔqjÖŅGg5Ćx|ĕãÆđI'€ĩ–áĻÄ×Z%ÅÜwl$ķ•BYXQŲ°yüji4›GŊKˇŪ]$ķwĄņØéœRÚ]ĮqhˇjŽ‘0$y̎_Ĩd\ę }â &;yn%ķÖDmāŽĮžôÕØ‘oÅOqáûˆmâye“* ž ˙Ją™m%‹#¤Į·cųŽÅŸáÉäu5^ÅâŌ– $“Ė™ähP–|“ˇqę@Š›]°KEäuO;Č9˛Ļ1Z5Ų›˛4ĐlŖ!”Üo1ųFC3d¯o˚Y4+wˇˇĩķ.-\ÖckofĢįˊŨEČß.kęČģ6i3^‰Lގ` ŸŽ”ØtĄmmä‹ëĮ!ƒ+ŧģˆĮAĶŦíTjÚ}Ä‡Pß4F9Z5Ūl:œ t įŠmĒXŨ$ōÃ:•ą#Žß~{Pų­¸h?NĶâĶmŒ130.ÎĖį–brOThËĒԚâŪRÉ}ĸ@:gŠ‘ĩ8A$ír8Ā/ŊJ•ĪBA­K§bŌ:}ĄwüÆÉ# Ôž‚—Ŋ¸ôąR˙Eûl’Žį "6áyÎFFAČõĻŽŽŋnûQē‹B!™” ãwįĨ&ĩǤžŋšĶn—Ė‚2C(ÎĶÁč}ĢBÔŗÚB_–1Š'š8îŌIŗ:ĶC6vīj7 Œ¤qšR#ĶŽ`ĐÔiÖvKy6ÛYDbĢ“Žƒ§jՙŌ(šYQrXāsXļz‘ģ×oãK´–Î(—iRIĪ#éŪ„äõĸ´-.’ËŠIwäđ¤ŦHWiWaõĮj­ ŊÜ×Ļ;ųaŠė.ø‚)€9<ö­K{û[§ōíæGd\ã<ā÷ú{Ök]Ë}ĒÜ[[\$1Ų2–]ÛÉä`Ą6 +bĶ5?ˇItĪ'!e(#9Īõ›¤O§ŗĮüĻÔnōâ(ŋ&sÆ{šŅŠęÚä7“2IŒŗÁŦįŊš_C` ›fĩiNä0lu˙=hģadˆCķ­ųŠęå?6(ö`â#<ąîkv%xâ@\ģ ŗulwĻ b—zĮ23Fy ĀāûúVmŨõĘ%˛´PŨŪ9^˜¨’ÄtĪL~4k VCõ-%¯/íīíĻōo-ÁUf\ĢŠę¤Qqc¨C,W—ÅÄŅųp)9$}âO§ĨE Üß]+ŨŨŨCäüņėDÆ[nėŸ\+mĘŦƒĶƒCmh 'Š’l¯dkIfh Z#lÚN$rģrxāuãžĩJ×Gž†-*7h ŲHîÅY˛āäqĮxÖŨũĖVV]HO—ī8īíUãQ0.ûhŌV•@ÚۀŒōI郌­ °i\ÉmRkaĨŋ´>؟1€ÆAĮŨëOŧŅīŽmõ‘ˆ7^ŧf0d<sĮĩlj—Ma§Ü^"0D[i8Î=ņV-ŨĨˇŠB¸, ãĶ#Ĩ>g¸šVÆš}ŌęrÜ}‚Ūæ+ĩMé+ŒÄĀ`ā‘Č­;ä'L¸‚(‹3FČqŒ‘ŽõbIļM ~[ļōAe Æy§°`8=}Ē[e$ĩ9ˆ`ģŠûBy,§+mlĐʝĘÄë͊šâ;Y¯4˛–ņų’G*Iåg`$VߕĀ>ų¨Šįž7gŌ̟TÉåŌĮ/¨ÄeĐ¯Z .æ9îŠY>g8īÔđ)mĻ{Ü;ŲÜ4wiŽEˆā9Ü{WHĘKį¸æŖea´pÑO˜\ŖˆĮ^riŊr:TÎqPåĒF/(ä{w¤-ƒ‚qô§ã$į­FS@ Û+ëL#=)åēã<{S Kji@@ãķ¤ä ├ԓ֎¤ČS€ķʆė)Ė3ĪįĻ;ÔD`pØāš˜°Č MĪÍĐq^Ač™:>>ŸąÍ"Ižf”2)\n9i3O „ΝZ``9Ž_Į|č°'!šę1‘Û­u8Į"°ŧ_-áéf¸ˇ +ėķ sœg#ëUī"fŊÖs÷:nĄ%ũķĨˇšŗI¸:H€ĀÛ=ǏŌ5­1°N0Ĩ9÷ÎęŨƒÁ:°Į ‚EÜ íķ›üißđ‚hŖmĀÁč'a[*‘[¸9-L4ŊA”íŌŨ]@ęc?֚4]GËO3K“pëķG‚qÉ<û;sëZÖžĶ.üšĸŠo˛Ę›„ŋimŨxãŪ­?twRēūyŖÚ%ũÁFĖ4ŌõÍĨČ3ž–xüę ô}Jc6“#q‚SükĄoixIxzųƟ˙&”eāį?ëÍŅ7ëķ§$ŦrÖwv^ÔÍŨĢAžxJ)#ÔįĄúW{wmy4Vwv&/>NɉĘÃdtíY§Ā:4…ˇ=ĶŽûĻ5ĶĮŽ!“€0*jTObĄ´g9Ŧĸę Ek‹…”sĶåtãÖœēUüv—VÁmŲdģK•a#g ņūÎ+vi’ÚÖYæ}ąFĨ܁ČdÕ{+ôŊķv#ĄMŖį@ ‚:Žgš\¨ČÕĸš#¨ĖÉ۔Ž(ƒšûāœgR1Īj‰­îŽžŅĻ][¤w—ÂQp%ķ>á 6Œ ˙ZčŽláŧĄ¸D–&ęŦ2 2ÖÂŪĪŲáTfbIĮNhRĐu2/,õ[ũæÖKk§™&Bܞ?J}펠×VWööÖķȐ˜gˇ™đ0H9V#ą•´]bᝀ94ôåGŋ<Ōį)‹{m~—úeŨĨ¤.đ$‰,BMĒĄąĐãļ=*Œ:~§ũŠ4ŲôøĪ™pŪc ”…Ënüņų×NęzvíŌ…R­ŋžhSC#@ŽūÚĪė×ĐĒXˆ˜8%ĶļqÜ }j•Õž§öĩĩŊ´sÁ|Ds.ԌSOôâē/â“M‘Œ1I1W}€¨2ÍĮ@=hæÖáËĄĖęZnĨ{n"[ÔĩšÆOššÜ*Į#ĶsZQ[Ūa¯šÍU^ĖBBĘ Ū 8éøfĩá&HŅĘēníq‚=Ŋ?gæ8§ÎÁCŠÉͤęCIąŠ+DŠōŪ ‘Ü$ød9į>ĒGjØ×í.o4 ė­bW–`%ļ…į$ūu¨c㓞zPI9´œŪā s˛Ųęę-tē}ŊÔw1"ʒȍÔcƒƒ‘WĩŊ>]CIōmv,ŅēK?t•9Áöâ´ö˛€A•PļԚæíĄ†ÖSn“í ģ—¨Æs׌ũhæo^Ádˇ(^kę<ąĩŒ1ÎΘS0<ķl †ãMÔ.Ĩԉ†5ķÚ)"Ė™æÁíy1áäY†åuRŸå]'ÍÎĪĨ¸Āųsš9ØrŠí÷‡¤ĩŋTŠęHZ&1ļFqŒû}+>Ö%šŌ¤ŸNUû+29Y—Û¸{{uŽ“ô)‘īBr™:ŧu§ŪY@ŗ5ŦŒZ6}™ ¤pk,Øj˛Øŧ/bĄ˙´EÉ"a‚ģˇqüŋéc”›™ 8Ú –+…lúũ*C¸gv2GjÚVfeé–×QëēÄļū\7 6đܨĮëÖĢÍi{¤kˇ…”jˇģUķĄ Շā˙õëyAÜĮ4;ˆšeĮZ9Ôįĩ'Ôõ=6e]8ĒHŅųqoRü6Xˇ88õíŅ֕mDëE¸ŽĻ2§#=+~ŪcqoĘŽģÔ6ŲĢ úА†ųļāSOžÁËs*ÎÚģ;Ÿ?K’ҧŒE'˜Á‹ 2 āf¨XYŨ'†nÍå§Úo$ŒÆan<ÅAĩG^ø'ņ­˜ĩ(Ž59´ā’‰`]،) ĶϏ­mSō ęIĀĪaYŧĐ_K­ØŽŨÛ ŒĢČqŒņ×ō­š.nm|>ŗBˆ“Eܡ$€09éߏ֎Ûˎ1EqĘ:†ô§ÉŋŠëÁ†yėhržčj&>Ŧnnô[[ˆ­‹J¯ĖįĢÉ_¯øVeŸR¸Ôŧ›+˜ZęÅ6–<ŽöÎ@ŽŦ‚ç8¤ÆÔä~t)ØN72tfI˙}&™5¤čž[<¤ÁNIÅeĪow=߈V˛¯ž‘ų,Wh}Ŗ 3ī]N1´ `zS-Ž!šG1°!Y‘‘†E ZÜ9zēA‚áäš[Ģi™6k‚IĀ=Iéũj­ŲhŧX%û=ËÄļ/dą¸ļāéœV›ę-ōŲís3¨JŠÆp[ 8Ģ|ĀÆhŊ˜[ĄÉir"ŪŠ–Ūdˇ—OŲ†ąNCrqŪ‹Gáˇ1ŋ™2H|ļ;AR0xãšëŽá—Šė3Ÿj~ĐJg*ĮĨZnY–ŪŪōO<$g!XļÆÁŒûUŊQ,cĶ´Ķ–H$ž1•[;I;¸ĀĀįŌēƒČxĨļãnHíš~Đ41|Kĩˇ„n`PŠÆĢî=A×ĨSģ¸ļ¸Ô$Žōõā†kxÍ̝B?‹iĮŪĪãŌē‡a‚ ņUŽ.íŦŅZâHâ@pĨØ(ŠRč6ēœŪ§sk"jÖ×ķbâ4&Ų]ŠîMœōsš´nícÔāķŽUmî4˙—÷¸F`GNzũ+xˆä;š5lŽ âŖ&Ú[‘ōžHš Á+øv§Ė.^ĻŅ–/ ¸ŧb\˛Ë‰IŪv†į’*#w4z­â_ĘÍÛ@ģŸr"–_› ÍuÖÜ"aPåÁōŸoJbŲ[Fމo¤ƒį õŖ™++iÉŖ<ĶMjÄÖČnĄ¨ŪEp$TPĐb˛€müq׎{Q#ŪÜxškTšD‚Ž]žVKF ŊsŖØŨ<ŌMw›Čv\‘ĐāŖzĶÆ—gáŧ\îŪÄ: gs+™dČÆM5—c§j‘ÁS“ÁĻIĪZ‚†d€GN:Ô]úԧМÔYG*O qLC”úôúĶ[ qNEsJãâ€#õ¤÷úԐIČnžÔ ô>”ĀU#‘íÍ4ō1ŸÖŽ8捸ķ@†žš¨đppsŸSR˜ũi¤{՝xÍFr3RōCƒž:}h° Ô”Üäú­8‚Ĩy$zS9×4=ÁíȤ uãš3Ž1Iœ `; dcƒL;h$tä{ĶzpsŸj€œŒg8¤?Z3õ¤$q֘Ä<ŒuĻžiIôĻ×­0Û ‚{W+Š?üL Á\WQ!ʧ5ËęJ é tĨ=Ėįą_}ŨĮëVP,ØņŌ RUŋĪZ|[ŧÉ[ŗū•ĄčšįÚž¤đ´†_č˛{ļcZųr?ģøWĶž bū Ņ íe@  ē{‘PÜĸŠ+c#Č[“MĀĀūUR]VĘ-âK¨  ųn€ô&Ģk×7ú×VS‘8pĄ¸üy*.įĄti˛ƒÁÁĻ0č1ŪĄûm˛[=ÃÜÄ#Nˌî{SÍĖ å*fA”ų‡Ė=ŊjZci8Ą+Į_JI ō\Š€8ĪLöĒZ%ė×ÚEĩÔû˛ŽHP@ŸZ,íqÜžŧr˂\攒@ S|đRE,ŧ08Ĩĩ"„¯z  ÜqÜԟ§͊ŗƒRTg$œŌ›x3tŖũšzã×]ŽnSvŌđCÜÕlI5!öĻ'žrE2XŧiÄS |ØāĶûb˜˜Ūâž9č)ŧ xë֘…֞ŧˇ õĻNjDÆ8¤!é“Oã’*1×9Š`ŸÂ†@ëĮ5‡ã'Aák°Î‹ŧ7§ ā{ņ[¸įŪ›:¯– PüŽŊ­T]É–ĒĮŽ_[›F0ŪæT´)ĪŪR9$ãŸLWOq<:<ŗ ‡’đŗ ļņޠՐʏ| Đʤa“ œcNI’ĸŅÉhÂÚ3ĸ´W<–N\Ks…Įņߊ›J{KÛËâņŖ TËķNŨ›nsęyįšé$€2˛Ä6*v¸@všÉK¸™í~×öe6Ō 3n„ooSžž´ų“-ŒsŠÛEo§Æ÷anaÔdŪä2.įáŊąŠ˛%’Kv{IZKģr|•cÂįGį]°‰_ˉ†ė°eį=ˆŠw„ p“C˜ųY…ĄIgwp“ÚęO+ˆ6ŧŽr9oöžĩĢũĨęëĻēL’˛WdÂ6:€jxÕT–U ¸äāc5[D×Ļč‚ĶōԜüŖžŊKią¤Ō+øŽáŦôÂãDŽR†6`ūUĪ]ų:d-kop—TĖā†k]Ä ÛŊ=3ŌģEmÁĀ ¯#T1Y[%ą€[Äą8ų“`ÁúŠq’HlKŗ6‹öŒĀšQ埗¯<ũk˜’{Ŋ|KŠÜÁ%쇎 pFͰ¸ĪjëcHáŒEaF¨Ā˛4í.h5FōâJ\hČ;™p1ÜqøQ•Å$Ũ‘­ŪĘmKÉs,w‘ŲG7–ŗĘry'Ÿ›=1ƒŌ¯Nßnņ=Ŧ)}2Āöžhō&ĀfWö9į5ĩ-Ŋ›šžâ_Îč ߒ:RCŖ,3C$`luAÂöÁôÅĘÛ+ S.īk˛°‰™J1VG#Ū°ŦoÄچˆVøˇdÆe힂Ž23ŒäšéRG#ĩU]+L_œiöÁÜ¸…zŸÂ”ZKQ´ÛĐįíŪî+m2õõ‰$’üÛēŗ‚Œ›ØtĮ^5ŅjčãEŧe•Ŗa 2ȍ´‚G4ßėŊ<ĒFlmƧ˪ĘÔ{ņMÕaģēĶÍŦHŠed•¤ÎTŒ¨iļ›šLÄkŠgŊĩŗ’ü[Įũž’DĪ# îx' Œ‘ĮÖĩæŖk Ŧ1Z6Ą˜Ķ}ŌȨ îp}šŠŋŗ,厎†âŪ9Ō<ÔĢM "4wH÷ļÔã'Ō‡$úMÔívļšÅĶj>eÖ" øP0§w‘ÍMys5Îĩ}ju$ŗhâSv#‚2X`€p}sŌˇ…› CZ@D‡sƒųŠõ4I§YNčŌYÂæ.´`íúQ΃••¤ēž[”ˇû ’ÛáAģIPœšÍaiˇk…§D—&(&ģ–9&-Ž2Ä{gšë6+¨GPČAÖĒ:Ų,æ†ŪŪÕVLŸ,Ä6Įņ֒’ĩŦ 32ęP–žT“ēĩŌŽÕbĪ‚?ÕĢįŠë’xŸöۉtm5Í܂UÔD/ûÎY7‘†=øšŲĶtģaĨ˜§†ŌhÚf”,kš“Û=qVΓ§4e žĶ&üyC“ëĶ­W2Z ͕fŋžŠK…lģ#Ge˜ē•b#€sĪJĖļ™n.´iSQžSt­į(›ƒû˛z í]8‰ ā ÃŧŌŪ=~ĘöŌŪŽ ūnRK grE(´9&Q†õÅŽžZúap5…˜ōÛ†į€:ĶįžvŌĩ-D]I ÕŊÃ,håP§ Ĩzį[Ré:]ÃI$ļP<ŽCҌ“Û54š}œ’ųĪk ”`īØ3ĮJ9šYe4íâ[čĨ–O,[Ââ2rœįđŠë#‘ÅUą×.ŽãIØ@#†ŨĨģ*ÁˆÚ9ö?—Ŋ[´Ņ#ąŊBōōGųŊ—vā3ŒņīSŲipYâŠJŨHdpŪã§Ķ¯įJņ 2ϟĒŨĮÃ['ŲቤĪ@œeFrIĪ~G§ęˇ÷ŲĶMēÃ|a ܌ˇĐƒƒVôũ=>ŠŪîčôĒFŌąįĐcųĶbŅcˇ†Ę4ģ¸ fÛĸo¸įŽx$Sn!i Đn5¸įšđÂcȋ°AV#éŽ* öšAmöhfˇ6Ŋd<XdãĐUũ7MūΒ}—SIŽ\Däa 98üifĶ÷ęÉ~.$W˜‚€ģvžOlõÅ.eÍqŲŲ­5Y'ģÆÕ"&ÜËn;—nÖã¨ĒZ-­žžņÚ¤ēÜo#JØ\ß1-‚q’8Ģv~{[ˆf]FrȍĖ‹Č'<ņ×<ûĶWÃĪ‘ÚßÉÖe„Rė*ŨTŽôī}âÃ]í]>;›“?›ĩę ˇ¯×#j8|@&šØ}ŠtŠyLA؏•#ę*Ãéwweu%āsj;Ŗûåēô#Yt[¨mmâQ ɚɈŒå‰#ī{š=ŅęIũššōÖhü˙ŗS“ģĻqũĐ{ÕoD^=ˇ0ÍôJvą÷ĮZąŸ¨Y_H-Žâ6RĖe1ŧd˛r@9čOķĨÖėn5mŌ‰ 3¤ß>y*zqBåMŊ˜“k–p]´ ĘäX،`;tÎOQÚœē•´÷†Õ …ˇ˛nØv^ QQÛi÷öZŒæ3löķÉį>üīF=@õUx´ëøuĪļ ŠšBVbOičqÔŅhŠėÚ$ää)˜įôŠHPĮ˜Ã" ˛&J—žx÷ŠØq*6Jb#ÆĶJÄöīHAČĪéOÚŖœt DEp2)1šr?ŸZLã­X`ĄqíëP0=yüꀈļy#¯Ö'§z”ä’♌Žū”!ąČöĻÆiäu<õõĻß\w CrŊ39ã#"’1€i§$tëLžã4ÎBŽAÅ)ä`ņHOJhCYēsM'’IĨīۚO^HĻĀį§­4‘KČäūÂOŊ1pTæšûßøũaĐm­É Úx5…vÃíg>•pܙlW_¸ŋ_ëVŖûÍé…ū•MpAÛqįņ̃†~qōéZ2ÆsŒÕôŋ€ØˇtrNŅĀ@N+æ(;GlúWášĪÃí'œü˙ŖŽžäTwGUEVÆG͡W~UŦEā›7qvsšzƒú֝äĸãÁ˛IXmĄH œ tĮ­t,”†ô €1ĀéšōÜîw¨Øã§šĮėōŪÅĨĢIŒĸųƒ9%q͐â¨EsiĨNq$ą2ۘ$B¤âN¨{08ČôŽũ2üÕ ‰0ĮhûÛēwõ§ír˜šäļņŪië´X;8rĮåߏ—wū=ø×=nÖSũ†‹á+XXķķ‰pOFÆßÎģ{‹h.Ô$đŖ¨!°Ã##ĄĻ.dm!ڌ]Áōą<‘īRĻ’+nį9áׁ|Q¨"üŌËē_1[!—yá‡f#é]Ē‘YÛArķEoI'ßuP }OzĩžíŪĻRģšQVAîMϐŊqKßĻ*JGZcv§ˇJŒõ¤2Úūũ Ŗži÷_4ËéŠ@2­f÷6[ĪP}iŨģĶsúSČöĒDąŒ{́éīMažiçĐS$PnŧS‡CéLčÃ=)ãāIČûŊŠ'8âŗõ›Ųôí6[¨mŌāGË#>ÜįĄ­­,"id†3o )trI' ×Ōĸmfí`ši,qåCį– ĮUÉ^ŋJf™ĨđĘZÜ4‹ö„ų‰ûĘŨ€Āü*Ė:tâĘ[K­E§ķ#1Š(Ē@Į_sWî‘Ģ59ŪúÚÜ[Ļۛc2ąü¤Áõ=j MVîæę+VŗŽ9C0¸Rį÷`ãœöĻ[藰]ÛNڗ˜mâh€0•8÷ö§.‹r5 {Á¨fhà ÉæU'8<öíéEĸ‘˛X ŌHënŌd*õ>ƒÖ˛õ-:KģŊ>HKŖÃ0s r^¤cžzVŖÆe\¯ÁÆĻÅÜä-î<J-Vá\XÎÎđ]’z6Y=Ž? čt˛ËĨynRˆąÉ.ŋŪ>ĮĩRˇĐn--ZÁī˚aʈZ1¸ü%Ŋ? —DĶotô0Ü_ ˆc"P˜ÚžįšĢ“‹Fqē-júšéļFãaw,#WbpSŸ\šĩĶîne͘›v@J’Ēá瑏ÅYÔôÁŠÚB…\I‰ÕƒPŨiW×ēQŗŸR¤#tžHQúŌ/RīĄYüEtvƒJrÖČ& ĖŧÆsĪ׎•bMmüÛh­lŪw¸ˇ7 p89úŠc莿ōvŧM×Vâ8ۀy7šĒRÛËm¯čö^F˛Eg"hōp6įŋ×ĩ;EėMä‹Û0^iņĢG"K+˜ž<ŠSķ}8#ņĸÃR mmi ´ōNáĘÆĀ&ÔVÆI=ēëK.ƒ$~DÖW†¸åy ށ„…ūđaĮ)÷zUü——ļ÷Ņ­ô(ŅČ^2c‘XįŒ}h÷GīŽež=rÎú šåí&S¸^U—ŠÎ=yr*øņ -i§Ę""KÔŪ‘ŗ2IüiŌé÷­¨ÛÜșŖâ ÂpŰIëęF=Qļļ°6ˇ‹›5h՞#ļD8āŒõãĩëĩÃŪ[ú}ęęQŨŦrF¯‘˛A‚0qQ\ęę—_bļļ’æáSĖdBŅÛ$žõfØN"_´:<™ųĘ.ā9Ŧģë íõÕėîV&1lš9#Ü ‘Ü`Ô¤›)ˇbkmun ˆ[YíŠå #‚šāūTŠąø‚Õ7ĮåyX!ĀfœŲ#¯ĨfévŗŪčz=Ũ”ņ$ÖÁ›ĄemĀ‚c­khļ7v\Gs,2+Ėō¯–¤ą$į'ۜ’[›{ƒë¤&įɔ؉<ŗ?ÎíšÆsŒ÷¨ŽŧB-Íáû ËÅi I¤@\āä äõ¨°n>ĀÚgÚ#&o0ü§~ÍÛļuĮ^ū”ûúâĶU‰n op˜ĪČ0}…ˆ^FÄԈayļŗRûWŠĀÍfØkņß5 6—GxĨĄ’@ģX’89gëWŪ;‡°1Ší=š íŨŒ}qY6ē-õŊļKnE;Îo+ĮājR]FÛeļđâEf™.æwTL"/įĐŠŠ$ņ$S›iŪâCHįh˛G>Į•&Ч\ÜŨÚŪŲN‘\ÛîĖRČęŨAĮĐSu ũF {i$ĩxÉŨp °ßč^:~UK•î-VċĢČĐ[ĘÖ2ŦŗŗĄÜ2@äž1ĀīL—^„Ca2ÛNâõąEƒ‚pyöĒöú^¯­´ˇ°ēÂĮx*ß:cœœ~´Øt[Ø`Ōâķ­Čą”Č>F†Į^ŧ“NŅ Č‘Í#\E&pÁį¨éš{ępZ^jĶ. ÚÆ'Īëƒ‚ĢœųĒÍĄß9áķmƒMz.÷mb6?AÍ>ãEģ¸}TųЅŊ‰bFĘ`c>ũMˆ^E›mqsÅ´ļÉä…y ác'‚qÔqI§ø†û¸aH$ :3FųĪĘ?ŊģšˆčŗË{Í$&´kgĮp#ōŠt{ GN k=ä3ÛB›#ũŅGlœãĨ&Ŗ`NEÛģÕˇ¸KhĄiįugŠåÉ$ôøÖ§Ĩū–¤fBI ˛‚ČCįŽaô­=COģ›Pļŋ°ž8§ dJ›•АyÁęĨŅlnôø.VęHdß3Ę­‘÷ŽNi&”tžŖ Ö-î.Yq!q„ ŽPá€į?˜í\ėJšŲnŽbc-Æĸđ°pxˆg÷l=>QĮŽjũž™Ģ‹ûkŠĨļs’ķ7Ė­Ķõéąé:ĀKq˛Ø˛^ŊŲq‚OË÷}ĪåVŦļbw{ĸüžgåØÃ¸C‚ŲX`€ũäįÛ=(_ÂnĄ…m.ØÍ+Gl[Hį8´Û-FŌúHBÛIfō´Ë#1Ū›ŽHÆ9įžjœļšÔšĨÅĖ1Û—ʁŪC˜—<œmÆMMŖqŨØØžÔíôß$L’Ÿ=ö Ž2ÜūQ|Aeö›ĻÆļîXÚ" 鑸õĒ^'i‘ôg‰TʡČ]°G8§_čw—vZ‹ Ũ^ˆ×fķą÷Î9?€ĻŖ+ƒnú.īėŽĩČy’X™å c*ÛĘųđÅ=uģ&’%S,ŅrFHUē[Ķ5冠u5x-fcoäÍÎ@älqŌŖžĶ5 ĩ{K¨"†R›æŽB3ûČËü^ÔYŲžX``ķíXž#ÔĨĶ⎒9 †|Íå€Ō’÷ÆM:ũīcÕôõĩ¸[6Ų`dlį,[ˇ`* Zø5Û}FÎØ]§`–… ÎAh0fÆON+M¤Xĸ2HĘĒŖ,ĖxW1žĄĨę‘ŨÚiÛáēF j˛ ļís“ĀÎ9Ā­­jĘ]KGēŗ‚I"a 鞸úPŌ¸&ė55>iĖk6X!“iFå}GĨLēŒ­k2“r›ĸāáĮ'Ž=+ ‹›­~Ú ĢQo2XČCn,Ŗn*ĩœZ”-ĸ$ē\ę,7Į!VRWh#ž•\ˆ\ĖڱΕe ŋē}­1yÄ3íė8ęzœZ™õ+ L×PŦNÛŲ° z}}Ē鷺.ˇ§Ũ¤RK) uQ’ģ€ų‡åÆŗe˛šß}’B%ÔŌįËĀ%2}Î?ZVOVļˆčmo-o!-mbÍd*°ā×=*ųQ<Ö:ī60€îô9ëTnާˇŽíÖdŠ"3žž1Ž>ĩÎjīlĘëmo"ĩF16æÎTc‚9'đĢwˇ–†ūūmáV]0°+¸äã¯~E%š—íuYįŊĶĄhP-ŨŠ˜•8ÎĩĘtäņú×!ā[ėōŖL4æLĀrûä_Ëm-Ũ”ŋÚlnö2ÍĶš›īúôÜz‰KĄÖļ3Įō¨ķš•ØĪÖŖRqÛĩfX™ÁĮåQ÷čjVč1PēÉį)Üģ0Asž1ÍcGäIüč#KƒžHüčĮ§NüͤÛÁĀ9<ņR0ĪCÎ8Å0’4ÎŖÚŒ0^Årz}i@ĀČéëLqéBĒ–'ŒSŠŸĀĶJgúĐ"9*qQãŒp? ™šõëL+š "aÔÔ{x럭X+šˆātÍ!=zŒwĻ0Æp@ž•.=šĻŽyĻéøS dãNcā˙JŒĄ ~”ÄEÆ9ãž?:¯}Mw9üЁ{qL cĩNĘyëĨ1†G  ė:c­`_üˇžØŽ‘—žG5ÎjKēüjŌ‘5ĄR%ĀVÆ>cüęŅn[ā]†zo58!¤?îZԀˇĻE}đąƒ|:Ķ9!ĻÛ÷Îkį[8úšú#á,Š˙í@ę˛Ę×y?ÔUÃâ" ÜQEŠ‘ä p3“HO'Ŋ)ĩ1cAÁ¯ ôAķ’7b˜Ät>´áÁ$Ōã¤1šųĨ/ĩ0(VĪzS’āãŒRēÍ<;SâxœĶųühƒĪOĨsGAÍ sČĻ0 jCĶ4ÂŲ eKûÄúSĐrh¸ûé׀iF0 d÷6ŽÃ@Á>§Ō¤“ ÉĄy\f­ÆWõ§Ž@=3M,3‚qN€)ˆPiũh u9ĮĨo§­bMĒĨ¤ĶÜ7{įkNģÃxv)-Ž•­┴ …m„Ķži(]\9ŦiÜjĶ}¤\Ev‘ÛÅ~-Z6Æp7ž‡'ô­ļŊ´c‘Žĸ ã(ZA†ĸ¸û‰ŧ¸gsk6Čĩq9CŨđ2=ĒÍÔļōjŌÉuk|öw–Ȑ4°ųyĘ:g9ĢpDŠ3ŦvŒÂYØ1bxüę]BÎæØÜAs‡ģnīéQM}íĄŒ…ėDnONĪS\ž’Š›ŖIö7Ž(%+xžA~Ō˜c ëPĸš-ĘĮdˇ6ÛC­Äe°§xÁ>‚‘îícŠY^â0ƒæÃäúúW+zŒm5›¨`-jna–%T9%Jīeøũ 2kģmFm}a…œĪd† aaŋÉāŽš#ũ™<öÜëEÕˇŲÖ´Įå7Ũbã˙¯I ĩŪ“?—¸ũÆ8įčk”•íãžÂí-ŽŖŌÚEBWː‘’TüŒĶ5ˆmŦc˛kX$˜Į-n!f#0āĒã¯ŌŽMGĖvŒ?ņęʏPēģ՞;8á{kiW îCnÆNŪ;dV¨ÎÕíë\2NĸÃ][bÆ3¨,’y\ą„íÜG¯CSÜrgsՃķų÷ œį+’¸N›GžkCäšhؙS’Ŗî ū¯áŲãŸBļ™mÍŧnˆËæ==Ŋ=¨q˛¸)]ØÕÉ=ûŌIHŦ’d#æ 2 q÷°éŗx§SˇÔd"9 ‰ãFnyP;ÔWō8ŌmmīˇKyũžä,Ŗ€sÃ3æp>œÕrl.s´‚-Į qĤä„PŧūÉîŲ'{fŽYb;v4›FīB{W0ËiŠk;L|å’Ųƒ¸dŒmôîåTf‹N/ˆŖ ŊY¤Bœ¸mÅ ĖweÔŪB“Æ3۟ōēl'ŽĮW#xm_UužžTˇžŅŲÖ=ĘAÎā>SƒĶ§ĩ2â8­|Ki´It]â‹Ë“p’-Ŗ!Ô÷__ƒ€ÜŽĀ€0 ĮZŽîvĩ°šácķ<”.Wv2Éį隩3F5ø2×^ažP?sŒŽOû^•>Š,qéWfWĻ'RO¸Ā¨KT;če[ëŗŨIĸ´VÁ ÔL™Ūųu 2v­Ų[ʉœ“ō)$úW§ŪDļŪ *ĄŒ8p[ųįņޝTh˛Ž…ÈÄÁ˜ļŪŪĩsVv&-Ų˛.ōöķOovŌF˛Bé&Igc­h¸#ĄöÅqļōØ&‹ŖÁæ†ķ lÄī˜ËíäžrEędŊĩ[ßÜL6Ē43ĘĀũíך2îuM/–EPíĩw¤ö§Â˛ąÆ?:āwéķØ[4Û ŦZŦžh*q1l;wPcļ``TÎãŌ”ŖĘ8Ęåu ģŊNHėâ…í —ÉŨČmØíį´dŪC@šQĶ'3\4 øsZØsåj>jíä„Ūŋ7Ž1ŸÖ¯Í6īSÖüšcōϰRĨxŪp䟯Njœ R:Č<É!¤_-ʂČvĶÜgŊ=˛pkŒģEˇĐ4M^’gļŽ8Ũ@Îåeۏ¨b?Z~Ŗ§ŲYG éŌ¸ f+6$+ģ(A'u8šųŽģhį'éíKÎy#ŌšŠ_XŨę/i4r"ڃËĀ\l'š9Î+¯—>[É!Iõ2ŠNâ‘ķd3M Ąį“ÛŠäŧ:đŨ}’iuL_Ŗ9¸„đėØ9SĪAÔqÚŖĩ”Ĩž}öųŪio R¸, ~'œÕrt9Ô]é#u™åČrFĶëÁĢC<.}ēVO‰/&°Ņžhyˆ˛ČŊR2Ā1…gęĐiī5†¤íÍNūiD„ōŲÎFxĪ4”[@ÚLÖÕu!¤Û$æ—tɁĮšĐ휑Æk“ÕSJ —Éuß@T!Ę ÜšäũzԚĩëŨ’—Íē;¸jžÅ[•†pŲœãŠ|—Ņ šÆíėæĘÂâëa“ĘC!@pNJK ¯ˇéÖ÷…<ŋ>5“a9ÆFzĶub?°¯ß*PÛžnTÖ7 4Z=Ŗ^‹HÁ]HãtŊčŒnĘĖę@,€(# ÜÕkmöÚ:¸ûcĮ>hĀķ0:ņXÚmÔ×,zŋÛ¤–sĘđäm$víŒ~)(Ü|Ö4˙˛Ą:§ö‰i>ĐbŸ0ãoĻ:UĖāã&°Ŗ¸ģ‰4kt÷õÕfC¤2–ĘŽØĮåUí.u/*ÎîkíÁīšŨâØĄJîeĻsĀīUĘÅĖŠ5ãŊ̞9!\Įe##qíSO*ÚÂōĘqĸ’!\Üw“YÛëRŖūņõ!˜ü sß Ģz“ę–:]äÂé2­„œ¨Č ’@Îhp1Ŗĸ’j—zīB‹#¸\•s%Žp>ĩo´xÂ˙8ÚC“øĩOĒ]ÉÖvąH#’ęS˜Fv¤ôõ8Ā¤ãŽƒOMIíoáē¸ē‚0áí˜+†LrFxõâŦĮ‚9q\ĘĪ>”ÚěÄ÷wk#(Q–U8ã5ĩaöåšqxQĸ|Ŗ‘ŋ§9J%j ô'žîŪĶæxĄ ™.OãGÚ"ŧÔōļ†ß¸cšôŦ˙[Į=Ĩ’HĄÕī"R§¸'ĨaleŅī4Y2M™“Ė'œÂ˛~døĨМšg] ņÜBd…ŌT'†FƞĀŋĘGÖ¨hÃēxɁOéV¯náĶė'ē”e"Bäõ-kd4îŽÅk‹uē[V•ė7*gæ wÅ)Œ+—T‰`5‹+\§ˆėn/ŧ€ĸÚfQN>é æĨŗÕ/.įļf˛"Úá î,c+’x9öĻãØ\Æéų‡RE3FĮáR|¸â™ü]* œœâ˜G=ÅJĘ3ŽßZ„Æx昌ņƒĮjL{S˜dđzv¤ãŽhç’)Ā$īRŒu¤w~_ÔĶ ĶŽ( ‘Ž9õ§‘Žq֑9ę öĻ€n@ā¨úŌ?w#('Á¨Xx'" g֍ŋpzNhSƒŪ˜ eĀČīP°ã€9ŠØ’úô„äô4Ä@}xĻ‘“ÛķŠ™IãúŠ(#ŸįM|~8Ŗf9拁ŅĐEGĩOˇžôŨ¤gp>Ôî"ĄÅ4ĄĀéSí<đsHWžsŸzwTŽOøW;~ _Ÿq]C¨ĢšÔ“mųĩpz‘-Š nĖiũŋÜ R츚nxsĪČ­ndĮ@0Ãë_B|pŪ ‚ ]H§ß…?Öž|AČÆz˙Z÷Ī‚ōođmŌã]û¯×÷qŸëW ȖĮŖQEŠ™áS.ĸno˜¤m‘+.õܙîīØšŅœÃæ&…ȧéYŨĀū‚Vfhŋt SĮģģž´í x΍*Ģ C,Ēz€Ŗy#¯lbŧÆ´šŪž¤:^Ŗ|ļšŒĮ$R•PŒØĶ˛fMĄˇ€ āķúW3a37‚&û+î’4•HNŖæ'ķĮ5GQ†Ųãēû+[­ž “Ë$Æã´‘ĀʁúPâ›ėŽÉŽy¨h—ŗ_iĸ{“Í‘@qōąū••y%ˇöfŠgVO‘—Ėŋ(J†>™ĮåYl§ömŠ+]÷J$c¸,›ōŧ’9Úr ¤Ąt>k3ģW!Üg<ãéRŊķŠä4Վ/\ĢĖŌK*1GWČ`6‚v#ŠŽÃßœŖf\]Äí֗hÁ¤č3FüjF1ēSŪ§ûĶ^h Ÿī'Nôā=:SnÜúĶ—Ef÷6_„dqHž´ãõæšsĪ5H†1€aÍô GˇZs`ļÅ\c“Uī.cĩ€ŧŌ"'ŗ:ûՎpŦ_Û\Ė-'˛Ëqm/š ‘°$ĮéšqIąKbũžĄm—ĩš)ĐpJ08>”^ßÛéą,×LcGqā–=…§jÍ;ưŲĮg{spĐÎgiEÉ=˛zT:ÍäŌÛ\Y\ŌZŪ[1FĢ0##ąëWÉīXŽm.tēwŲîÚîIe¸¸(cS&ߑ3ŖwõĢĘ0š dvŦKKRšöō+U…ĢĒ a˜€NI ƒØQqŠ^Úk[ÎЋsleƒ rX į<‘Į×4œ[iīĩm8yˇrŖ<yĪåRIsP †lBĒXŋ ĮZÃyį‡ÄļxČÅ4é$`Š@Ũšwq“ė*{+ŊOP‚$ˇO˛ÜBÎŨĖ”įßĨ>PžĻäZ…”W6­ž)2Uˆ# J˛ŽHlŠ7Ö/„ Åá;ä(FXãøn‚3Đ÷Š’ŗąQÕ\‰ĨĪXK¨‘—pLōGŽ=)äÃh䑓\VŖs4~$YĖ-b˜[™Ž6žéīŸŧIéÚē7ŧģĖļHđųeķãr„ÛąƒĪ#ōĒpą*IÜĶ%ƒ6å gåĨnN'ĩÎ GVŧūÅx䷏íP4˛)C‚@uĪząkŠjw“­íÃZũ Åƒ„RTļíŲÎGLRäh|ČŨãŌ™Ôííą$Öobŗšo&Đ^ f\Ÿ™K(Čô?5Nڕá׿°†Ú "6y ˜mŦ cÔRåathČcŠ íTQ’NĮŊF— qrÛ’&_Ŗ ĨSžŧšYŽlí IdŽŌ™hŗ€0Oŗô;ÖĩŌ´UYnaa¸ļ •Rzc‘O—Kƒjåë}6â?ÍŠ;Db’@FA­%xĖĒĒéģĻSIž›P‚F–4GŽw‹älƒ´ã5ˋU˜kđÅbeš’í„2F˜ØØāîūiÚī^„ŪËCĩo—Œc?•.ŪH#¯zÚÕîôų"ŽhŖ(¯ ,ÎNéK`OĄ5aĩ ÷Ö.,á‚ŨŖ…Ë4„oQSĘĘæEØīíĨģkXæFš1šĐ0ʎ•;ē̍l œN3ôŽsDžqŖÚÎöųŌA0ÉÚšbKœGëSPŨŲé7OiûEȏsåˇĖ7/Įšn‚–†ņéĶ'8¤Ŗ1Du%z¨ašĮŌ/5+Ģëå¸X>Ííėc¸ŒœŽzÖ=õ˛Yk—ZĖ1lk;¨„Ĩ7DČp=ÎhPÖĖ´:ũȏbnƒÖ¤ä`rsŪš€ŊņĻ—vę¯3,YįåEāãũíĮ?JŲ´ÖŽV†Ö[Tgėˆ‘B¤Är(pbæ5,>Ö Äƒ´ S°Üb+"Ŗ´m÷Xu‹oâ ąequ5œf%˜ÁII-'™ˇۜT̍Éeˇ]<Ŗ=Š ÄĒČĖ 3ŒŒsŸZ9Xs#VIí­”$y§1q>ž´í  āôŽ][™!˛i­āķâŋ‹É*˙+gđČŠíĩ[Ų,ŽÚkhÚâŪëėÄBINqķāyúQËĨĮusNęōÖÉîϊbwdžÕØŽOXŊūŌđéyc@ĐęÆŪ[nVÁ}5֞2sŠN6@ØĖg†Ps‚ŧ Pą˛rƒvŦģŊRāj ccRLųŌ4ŦB¨Î$āÔVšä÷+ĻŗZĮß,ŸÆIF\‘ېhå{…ÖÆ´‘ÄĪæ2.G‘ÍJ1ƒĮÅsŗjí6—÷VHĸü@ĀČp¤I´8ãÔt­{ëŅh ŒŧŗČ#‰7c-ÉäöĐâÂč’!jg”F"2(ÄģqģčÔæĩļ(ŖėņGîĮZåĆŌÜŪZFä¤~d).C.Â>öojÕūĐž]f++{Hšßėé+fl2‚ØĪNqŽ•N/ “]MWEhđËŋ=AīQm`ÔGp —@WøéD—*ē„vžLÄēķ|ƒĄ>ĩ—âĪ…‘b°]]¤S0=S“ĮĨ&ôij:;ŊøĮfŸg˜”Å…$uۑ‚~•~]>ÂWrövîÎb҃¸™?…s×ĶOy5…ŗE΍^KdĐdŸĀzŌģņŊŊ÷،nR4gšn‰ĖįЧД×SZDI!hd.…Yr§đĒī§Ųk+pGÁ÷Š´‘WL’9``V2…c;HS÷OĨSˇĶ,`¸iā´†7ŧę¸$žĩ™Ļ]Ûév Änng"æãË^#27n ~~zŌ[‡ˇXįܒÜų|/Ëģq=‡ĻjšZØWOrKk [yÜÅ &Ņ„ Ÿ—=vŽƒđĻfXŦQGöp72 ÜØ ×=zÖ0û-ô ¨jbF’íIĩ…9xâ ŽĮšoz׃\Ķæû.Įv$ųySČ叠āķCO “CãĶ,<ģˆ…ŧe.@2Ŗd‡÷ÁĻ+O[v˛Ā[ž @O$zœæ™ Ûjë08XĸIy$oã顊Ī~)§_°h'˜™ q(}ŪYųԓ‚žŖƒÍ÷@Đŗũ—gáŊpÃ˒HôëEũ…ļĄ•p…‚ĘCUŊA–šĩ­ėōÅōcA!b¸R§8 ū ‡]˛žs‰Ę\?’ÁJޤr(´ƒŨtKˇ1ŧr:\æ+ĘĖŒsÉëĮZŗgc”E#2c<™š8éÉ5Yĩ‹%ŠŪ_7 2‡_“´œ}"ĻmZÅ ĄŽS0ēÄũđĮ ÷4{Ė=Қ†›Ŗåų’Ü(ˇ …~nĮëIsĻGq ŠæI•$‘opzXukYĩ9´øōd‹Š#åŨÉĀúįS^^ÚXÅæ]MHNãÔûzŅī-ɕ-ôh#û /35–|­ĪĐŒuâŽ\Ā—–˛ÚĖ ŠT*ã=1õ8§ŽŨįEšLa>Ŋ>;Öv…)ž{›™ŽA72†~V!Ā!sÆzū4õz‹M‡ÁáųbžÖGÔî&+&ÉNä8ųz{uëOĶôY´Û´ ¨ÜŊ¤yō­ØŒ.{gаĢ2kzlVķNnĄhāûå8=€õ5n†ōŨfŒ‡V7CøPå. ’¸øĖ2&׌ž3Įæ)xiũųĻ0éPPŒŽ8"ĸ9ŒdÔŧúũi‡“ëLDeØđOÍôíJŠk˜(aĮãë@63Å1ēôö8 z´g§#4ÄyôëšLāûwĨŪ7Ō9äúõÆh<ÃČÂFcKœœöĄ°ßáLD N{ū”ĶÁéR0ĪN”Æ0᧎ZNs€? PĮąôgԚ‘ÉõĀǏągŠ`ÁÔTŒ0N9ã4ŪAÍ&a}Š8Ž?:vpqÆ($ũ(¸Î A?áJāgš ČĀÎhŒĻ0R´âĀņéL=°qLÛ?æĩ|˙h=8Ž•ņž+™Ö25úV”÷&[Į˜ōAûÍÅFíļP3Ī–­Hü/8ÆæūTÁ–ī'ĻÃĶņŽ„bĮFäāú˙{ĮÁKx_RL` ōč+ÁĶj;dđ {‡ĀŲ hēēgäJĀ{•įų ¸nDļ=VŠ(­LĪ"(6ctÅW–â$˛¤l°V8Č“øUK}Yî5I­‚ū`ŨĐJúã>ÕOU#ûoH$ ŗJ ‘ūÁ¯+—[3Đž—F˛IŅ,‘:´o‚zzQ$1×krFŪ s>$t*ŌÚ9] 16ƒķÁÁĮŠÅiÍ­˜î­c†ÖKƒsœĨY@ Į¯ÔQĘít>eŗ4žåË’5tĮŨ`üĒmfĢĩ „+>āĨ@Ŋ~ĩg­‰žËu{jđšĩ’`áÁP )<ߎĩ§poN•,ö [Ø] rN‡ĻE%}GĖŦo%ĒŨ5Ā‚%†Ķ @­YūU‡ĨøŠCRkUˆ†)"° í89ŊĢpŠ–šz”š{Gf›ßüiËëA<‘R1Œ vĻqëM8 h‚~CJĘ4“ž°Ŗ9QÍg-Íc°AäuĻŽū”ŊAãښ%ˆNGš_č)&”`Ž Q,vOtīKģŒâ‘pN;t§¯ iˆHį$äķR¨$œõíLČ'"œ­Į|ŲÆ8'Í<ÄgԚ§šx~”†8öĨgę:DZ“A1š{yĄÎÉ! 0 ņW”Žĸ Ôĩ4Ģ/.[ ÎV>ƒŪšŊô%ĨmJŠáû$P<Ūh—ĪûFüÉæ{=:qŒb‰ŧ=isE,“–’Q4’‡LņہNMvĀÁÍ: ŸA䃜sB@ĪJ|zΝ$Ë ^FĪ$†%PŨXuW˜­94;wÔ>Ø%ēŽVP’ųsĶv:šQŠ+ũ^ÆßĘbÖĪö‡b‡h zdœ~UŖqyolđŦĶŦo+ė@Į ¨˙ĩl~QöČrŔ|ã’ŋ{ō¤œˇÉ4¨eÔãÔäķcCPÃiSÔŠŠĶBˇąŽHāžčDĀ…Í%cĪ÷GjˇõŊŨŋm*Éâ쇍ëY0ę7šÍũĖ6R‹kgōžpžGBဝ4×0;žƒnš šTdÉ)T|Á?ũGšžļž]‚[$ÎŦąˆÄƒ†3ĪzÂԞؑ&Ÿ5ô…Ž.AYØÉ€X’¸Ŗņ¯qĢXZÛ$ō] …†UÁŨ¸zŒuĄŪÂV*Ë A.ˆtŠ..Zģ+ģįÅ,š2Ik!ŧŧYaĘķMĻEë†ĀæŦgM[Åĩ{ØDĖ@X÷|ĞœTņ]ÛÜxeGTfV đëEä‡h˛Œz Ãd‹wuēĖ‘î*q•īÃņ^\ÜJ×wf(ß.ߐĻ1ŒƒĮ|zÕ¸ôß+P–ņnĻß,K´Œ/C͝'ķ¨5ké–k}>łŨÜe‹•Ī”ƒĢúz~˜0ĶŠŋmÎŌŅņČ8Ũ…er$ĐD6vÖÉ{qļŪ_5X…į9āņƒÉÍ  ĒÚÛŽ—-įķãÎŌAÉã§NOŊ]“S´ŽųlžtYʇN8'ķ5*]ۙ6yņŨŗhqŨqõĨÍ ´JļZcYj“­Ô Ėžg’@ÂąÆNzö¨ŖŅH¸ž’{š'†íH–E x°ĪAR\]N÷›bxá‚&lŌ‘ƒūʏęzU¸ī ‘SeÄoŧ•\89#’áEØėļ3΅˙+ątR;5)+ĀR0yü)°øė÷PŨ é™ã’GEÉÉã'ˇ>‚´ūßiûßô¨s<Áōũ})¯ynVeŽæņŸ.ĪMÜņG4…ĘŒõĐc:]œÜJË,Æ`āŅšmŲ4ų´i.ėÚëPžYŌE’+€Ē­„`}sšŊ¤*'ž4*‡*Ø>™=ûTų#$š9˜rŖ*]!Ļ‚įÔgw†a?˜UFXtã nŠæ1:ũĸā\? FáŽ1ŽAĀāÕmJæú˙U–ĶMŊ!Ķ{‘æ‚HéÁĪĩtˆ×.ĘęsÅ6ä‚Éŗü4$ļšŨīŽ<ŠnĮ ™ }=@ĢPiĪŊ=÷˜ÛÄųĮ͎ƒĮĻ ē¸y|Gew(!ˆĪ1a_qÂ)õį'đ­fžØOå4ŅŦw,3\PÜŦ$‘Šé!î[Q†ę[[˜âÚÍuë‚5›¤iįPđî”ëq%Ŋͯ!ÕA œ‚#Đ×EåŦä$7HÅwá$íĪ_§ŊfEy-׉ž+kŊÖP@dP¤œs× =ũ(MÚĀŌŊĘãÎ,žÄoŨĐ\}¤đwnÁõä֞­ĻļŖmÅ9‚xdÅ*ŒíaĮNã’1SM=Ŋ’gcRØŨ#€2{dÔĨģÆėnášĮ­.in>Uą‰˙ũˉ¨ K{ŪÆąą´ŒŽ};U¯ėģ…Õ žKĀĻ8V F6Č į<ũĶ’}kE'ļ!ĪRė \8É÷´Ë{Ëkĩ-Á€r™eÁūFŸ4…ʆÉĪ{âyĸ•h66OŪ>âąu×Ôæ¸’Î-9&ļ*ŦŽņīWoBw ¸õށ¤æUÃXsJpr9”­¨ÚšĮŲŪž‰x_YĶšØ•ōãžž׎9<’zĶŽ,4íTÜŨ&ģ)cšHŽ1ü g¯^OŠãšëˆėyŸ5Ž•i××–āDģ™ü Oõjd¸Ųúu¸ģŽūŌyc‰G“ķ¨c(V'p' $ֆ¯e6Ŗ§xdHˇHĨ÷ŽāT‘Ž:āS,_Ršt–ā@–íī(ž6'€Nyã¯ŊiļÖ ČëĪJ–ÚwJÖ9˙ėiĨžwšá^ÕįYŲBáä* Ũļ‚šĒ÷6Siú$Öŕīu+’ēäe¤<ūsųWJã`XŖ'į\ū+ęSÅ{qe™bķ–ErØ\ũGOĄĒR{’â–ˆ‡\ĶŪį‘%ĀšHí"æĮ@ į…įqúS¯ü}qõĢíjž}ÖøŖ´uxâŧō2Aãéõ­b3€MmXS1ĨŌd_ IωĻĖô_ ôâĒ âpÂáãâDŦu!L‘ņĪ=OšŽ‰ĮŠíQ†cqŗĘ“7y‡zôõÍJ›*2ôí>âŪkÉ.Š7Ú%Pp <đöëUŽ,õ/ŪÂ8Ŗŗh4“ēČQܜŒsÚˇĘņōđ=Š01ÅĪqō˜VšL‘ęwŊŦ- äŗļYBŽã į'>õ‡¨ũĸÉåŠ?–FžP!ôãšÆqØ`{į¯ėqÅcÜjíĶÁgi-Ԗ陊0xÎŅž§ØU)IėKŠBč–×–ŅN÷ȋ4ķ4„)Üyā#Ĩ_u~´‰Ÿ+šÍîm‡€~^{ĶIÚ:1Nę âšJAŽhéĮjPŊķT@õÆzŌ¯ŪįôĻĒŽ´õîM0Æ8ĨųĻ…Įzw=¨ë۞HsĪåQŽ0:ķR ,ŪԀQŒņXž%†úî‘É2™É8G8>ďŌļĘ`œuĸHċ†é×­8ģ;“%ucln&×ϚōĶΈ”1>ņ´^}wdķOđū”mā–ęō[ŠĻiv”9 §žĩ¸ąÚ§ÖĩŊēĶsbQHäĩÛëŊIį‚Ņž8-ČGnf$äzãl“éUŖŅīⷅ ĻVÎņE‘ķĖŲ īˇŠ÷5ڕ8 šF¸éÍR¨Ō°œw2´[,´Û{{…C ųˆVĪ'’I=NrĄĻÛęē<7VVÖQÎg’)Ú`n9ų‡^*ũļ°ˇW1Ŧō˜Ėiqˇ(ėéÎqÁįâĩcR“‚ŨO֕ÚŊÁ$ö9ģËųožÖЉV%‚ē„ Œ´Œ=7cjlz<‘ęPÚËh×iD%2íäžWŠ%ąĮJčĨ“ėđ´Î2ąŠvĮˇ=ęĩŊüwzdZƒ.žgī8!OŽ?:jNĀâŽfŪÅ.—soö+.aŨ,Ŧ7 ŦŦF 'ø@-Uî,uˇû*ZŦ‘ųMq#)<ĒFĶ×ļã×ĨiŨëÖ–ŅĄ1ĖÅã•X‰dBq–ĢTrÍn%ö9]6ÃPŽm.ÜŲ„ŽŲ^WbãF8ËÉlnā{¯§ĨęS_j×𕉭á#ʑäķ•9ā‘ŽŪĩ­8Éឝé6ąlđ1éŪ“÷E(ÛcŸ×ĸšûSŌíRÖYbI<é ĮLžΧđøŸuõĖöŌŖ\LHyŌT| ×ķ5˛4cå=Amu=ĒĮmvm¤ÜĖc<ŒÔsiarës y&—WÕuˇḯB.wšų›øčü+*h/ßRkšŦnĨ’ v`Ä`î`xwé…3ë]†`4ûO)$iYœË$Õ™ŽIĢE\õÆsšŽ{l.F÷8K[ë+ĢPöS2ZÂĶ ō™OĢđxí‘é]hÖÚ,Bke‚áÉg ĖI'œ{“ĮjÚp{ ßZ§{ouqlRÚso6āÂ@ĄąíƒIΘj9écēŋmröÚ9$péf‹„jA“oŋ&ļôģXmmšAÂōaœHۛŽ́ØtĢzU„ZuŠÛĢ3ą%ŨÛĢš9$ū&›Ōi÷IÄŦŒ>¸â”Ĩ}:SZœŊ„?Úú…äđەˇšč;Î@¤g€ŊÉ, 4ņc-މŠj‹hVų¤wveĸ_珿ļô)tũÚŌTE‘#ÚBôĪ­jv#Jnvz…ÕÎ[OŅíĨĶ’ō(.igXn@ũî J㎚õį5ZÍŽo4Ä{M1á’ÆhÚDÚŌ\2ā휟ĶŌģ%=8Æ:Sv…#c—´aČrsii.‘moœņËu"Äī8ËGå‰Į@zûäÕV´ŦĨŒi’Ēß],h˜äDžŋŨOv'ĩw#  *+*ãĩ?hÃŲœÍŽ‘]][‘c†6^ /%ũų8ÕkÄosöK{h!šHį˜$ūHųļrH™āgĐÖî0qˇŒõ¤tÜAüžĩ<úÜ|ēXåü+ĐēÔ{nĻ\ a~UU€sžųĒ:×ÛõMŠ-…ɉŽŧĄŪǤķč3ŧ}xī]¸/ûĐîåž´ųũîk —KtZUŪĄŦ\ĩ͑Š!p w#Zcb ÷ }*ĩŧ’Á%ÛØLL ,ŗųˆwÜNãhP;ĒŽ=+ēÁĘņ׃BŒ mī‘OÚ!ȝ&k 7MĩKgšI~[ˇN†7l'˛–ãč*ׅâēDŋyí|‘$ć+´ą`î€?éUrNG4Ķšc ('Ō“›jÃQŗšÎÍžoËŜ“Ä!U‹)˜ÕNKą=2xëXöŅĘčoEÃē[ŋœ^" ŌŋëĩG•ÜœŒš  v9)ØN ”Úd’:ŲÉ7Ø­J™<˛D“8įhĮ d ÍOũ“ˇZ%‚[ Q™nn>P1‚qĖO>•ŲŖįo^ƍšäŽiûF.C’ąŅ­îõ™ĸžŪæ(ŦäŨí‰QpF äå˛xôæˇdÔLZĖ:y€‘,eÄĄĮėW¯ãZ<ņŽ*ŧv0Gw%ÚÂĢ<€|r@÷¤å}ÆŖmŒŊgP¸K…´‚)°aiãéžßĪŌąmâؚ}Ô ˛\܉|ŅķmQŊ° péõŽĖįk|§'ĨdéÚ}īۍūŖ"I:!Š ‹€œ’}ÎåN2I Qw04›OļEY-Ūō厜ė+åFƒ9Ø`sšÕ𚗷ŧģû+ÆˇîFoâQĀĀ<ôÉęIއ$Ži@ ˜ÁÔ9ŨX,îqöĒ÷CQFwHáqo.F3€dluę@ÄÖÆŠ}ũ™á˜¤ĩeŪ"‰LƒũHl ‘ė?ZÜxï=:Ō4BUÚë‘Ü0ÍËM•ęrM2>“§ŊÄ÷ pæęOŧ>Pōyäö=ÍWŒÎē~ĨŦũĻáŖ†å ķ S“sŗžqí]šQ•mš cđ¤TSO,ūî8ŖÚ ’æF…j!†K¯ˇĄ(6^3–$œķĪOJįŪūäØy‰}87÷lbÁËy)ĮËéœvõޝPŗ–ōÍ­â¸{`Ü1E•Á ôúÔĐYÛÁo1Dĸ8PG#8Æ)Š%ĢąĮÃŦę7p–SöŠđ +ģdj¤íOV8ëīíS9Ô!{]>k÷Šââ/:_:_¸wmTBOŪįžvõŠoíu/d´ģTŗe%‘@¨1ŽAÁĪ\Ž•ĐÛG$–V’ßAģT°3ĩˆįĩS••ÉI˛åūČĐŪyå3=´<ģurSõ5Ī/Û-"ĩŌāxŖš–?>ęiqĖ’sÎxĮ@:Vž¯gw¨ŧvbŨ>ČŌ#É/™ÉU9+|Uųlmdš[š-ãk”RB>eÆĨ4‘M6Ė;™nmõ8EŪĸÖČÎî¨Ŧ‚3 cÔg'#<úÔj7VŅK™/^IUæÚģ"-…>š‰ÅoßXÚ^,myl“ŽäĘäƒíM›Lą¸š‚æ{uimÉōØöĻĻē‹•ô1<ũGûJîŌ+ĎŪŌŲGHFØØ āRú ąĸ\jz„âöâHŌŲĶ+ ‘œéČãÔ÷é[ÚÛÃįė‰WĪ%äã;Ž1ĪáQØYZØBa´!BwQŽi9+Îæą­ÎĻę;6E‘â7%nŠŧđFM6ģY!Ķtĩėö^\rJØ!Ī Ũyč{w=kJé—rđeϐ;Į“œū=jx´›X5/c€ YBį°č8AŠ|Ņļ„ÚW4—p?JB iŖ%O88ę:#ĩ@=Ž:æŗ4Ü)¤ŽIŠåÚzz‡šæ“síOôũi |§~´Āfî1K°yĮzFī‘õρÁGցčsē˜Ė2““íéOaƒČĻ’˙ޘ }ÅH^Ž(î)Ũ‡Ĩ8 UŨÅ!cķpO51ëSN:ÔGc­7-Žizäņ@”ƒĐq֘ =qĪ4ĖžNM9€<ä}i‡Ûžø   Č4ÜÄķīNā€8ü)¤ä/ON”ĀFČéøĶzŒsøĶ¸Æ8ϜdúĐ! F2ix98÷ šioČĶ@5Áâšũlƒ<8÷­ōÃ8âšíyĪÚ-ũ2zVÜ™ėg°čMƟhõÖū×ô§dī‹ĶwøVÆLd+—Îz׎üe–˛„üÍd`͟æ+Écų\é^ŠđZ@Ō`‘ĀŽ'ÎãĮ̟AUu> ô‡ÍˆKåHUŽG¯įN-'Š2ÛCœ–îįK˛k;;ŨÉo‘”–Gû‘Ž:w$ķÍ6˙^Ôcšŋx&]ŠEŧ9P#G'æb{‘ũ tĨÚK|ˇ’Û§Ú@v}:~>ô&›dąĸ XvĮ!‘PpĮŋÖ´įb9deY^]ßęņŽĮœI#ŗ. ÖāFHĮ#5sÄ,īaŒNË-ėĢW¨SËûäĩmekeįx"į-°c5—göOÄŪĪi=´6°˛"Ė0LŒy#đ}ęn›ŋ`Õ+˛žęâtkFH4č F‘œ ęš_¨ųž;æ­čwSŪéËs<™‘Øå6ōČ8+ī‚5*éÚhžÉŽs™T oį?Î¤ļˇ‚Ä Š4Č(m1¤ŅĖk:´šŒoˆm§—ėč@AÚ'ĸđ@õĢöW3ßŨ*EoiöĪŗ/üAF29ėp:zÕåĐô´hŲláڌe^úÖeÔ nn,tģ æõúHû‰¸üŲ$ņޏW‹VBŗZą4éÖÚŲõ)įiæžfhŌBĢšáI8įĶž™¨_Õ_H’ë}ŧo=ȆɍŠ3šˆĪׯaī] Ō,ˇZĢ[Ŗũ‘6B[ø1ũG‡ĻÃŧkh!fd<ÔûŸ­Ņę˛1'×nī,/ŒR }ō%ĩžW 2Hg>ū›jũŦ÷Qj°éæņZmüÂÍLŖ%HŨž6üŋZˇƒĻEHļŠR L¨ 'įõ9ę~´EŖŲÛ šV0$ŧŨæ6I$ŖÛđ¤åJ]MeKˆXeI#oēČr )áąĪZƒM˛ƒN˛ŠŌŨvà =*ĀĀ›“’JÍīĄĻ `rHô’0X÷OĨæ#=9Í5ē`ō7`PķŽÔ¤@Į‘Xš*I yĮ˜ŊøúPAÉ'œƒŠüšüéŅ.åfŋ4Ķå{õé@ŠĪŋ­;#šn™œöÆßëNeų†?šŨĐõ§tÎ(ĀŽ8âŒdë@ŋ7nOiį-Mߊü)y œ÷ĮāxĻĪ×ŋĨ9yb)OĄíÜRyÍ*žŖ“Å"ąäg­1C†bXOCØzSā×ŋĩn äLR. 9ĀĨęG9ÍJŽĄyž)ŽCt€įĻÉ P!ÜÅ)ãæŸJjsÎriYy#?Zãs´ũ)Ė03M¯CÁéŠqsëš4œŒđ{Sr~QĶ#ō§)Į$ķéHbcĻiK Ø•& Sš2Q˛súSå xéô8ĨršÅ3’ôIīց Ķ#=š˜Į§4ÉŠĪn(%‡9'ĩŠ3ÉįúRã-‘×ĐH Ī4c<āZfFG=}ŠũŊŗëMiž´¤ä{ũ)Kį¯lS\°ĀëHpÆ}sLÎ000=Ч§´ģģc‘ß4›Ž@ jN@ä⁓ŒŠ7s’\qښ\ÃĶ4 ã†qŸOjR7sŸL O3 Ę@9ëHåȁLCJœwÍ ’ŧ1'ŋ4æl¨ųF}5ŽŨ¤(úž´€pF 1ÉūT ōˆ4ŋ΀ĖJāŠoŊ;øxæ˜xļ=Š€ÜûĐs˙Ö °Áųϰel ×4FSéÍ4dĪéOĪ~)Ĩ}1LCrr2N)ŒI$wŨŠā  ĄĻœ†ä b=89¤;ŊņO<~4Æ#o$rx sŒ1éLdāūU.=ū”ĶԐ(.€uëڐŒzķR˛`ß¯"˜W=ŋJ`FŲëšaįuŠO\mäįĩ0aĀ#œr(,œŅōõįķ§í†;ô¤#ž•0#äąĪAĀĻļ1Ö¤$ĮژyéČúP"2zzTl8ŠŽ4„’sT"#čsšįĩņļh?ŪūĩŅšī`Ínr~÷õ¤>"eąFOēyî?•;pĖ#Ž[ ¨.lRg‚qŠŽō!rN?ʡąõ-–_ÂŊ/āŧŲņ…ė{zØšŨôx˙ÆŧĖ˜zāWŖ|}ž5™=Œ€˙ßQŸéN;ĄKcŪqEVæ’äí55įŠ~ŪƒŌ›´āķ^Aé <9ČÍ5°G<úĶČãŽqLÛōķĪãHb1‡¯Ļ)HĪ=éĄ@`{ĶŊGCH¤(¤ØHĩ"ŖÚX“ëRƒš@5”/Фz {6áŠnĶÉí@ˇ M3Œz•ŽRĸ cŠĘwÜB8î*9AÅO}ūŖ ˙ĒŅ}Āk6k‰×šzįĶŠëžxÍ4K€.i8õĻĢ?˜C †ĪZĸXņž;SĀųsIŸĘœZ8 öĨg­4d €yŠČ rsš—n8ÅF™ÜjS“ƒšÔUëŠxčj1–jQ æ€0Üpp)¸‘Đv÷§ÉˇzjŸī (ƒšVSŽœŸZAō€Ą@”į~™^0  Î)Ė8ã­FŎ‘Ú…įc 恎ÎAæĀ댚wėiųʂ@ãŊKLāã'ڛ&ŨÄdfšq¸qøŌ:aKc ŠÔRN1š gԐ¸ĮĨ<Ži `ā…(6N9ŽwSņDZwˆl´ŋ$ą™”<Ĩ°6@üxĐîFÕÙ^ÆŌĻO´ŦŖĐgéH\„ČMd>žâúîĶo&X'™ †Rp äãÍJMė ØØ.p0=)‡‹ķČÁŦüVnŦĨēŗŌ¯'†=°Ú98Æs[0],ö°Ü#Ė@á~Ŗ8ĻâÖā¤žÅŖ"‘ˇv‘úÖ>'3j‡NM.īíJ7:ą@xį9÷ēeX†÷ĀP2Xž‚‡ˇĶØs/ËĪn”adPr=ë ~īWĻŌ´ŋ6Ų`šy‚#ŠÕ­#TžūkĢ{‹#m-ąPĘ_vwxöĻâÖâRFžģZÅÖüE†Đ‰í.%0Ud ´ąí’zÖĨ¤ōMÉ%ģĀį Æė _ÄqJÎ×ÕėKˇ9>ô`p9õ¤™™QČBÄ);ō}…aÚx•¯Ĩž(4ģļ{vŲ2–@TķęŪԒo`æKswoĘH8Ļ`.}{œU]?P›ORĮ‰6IH89Ģ!š<`PՆĮm,įŌ…Œb‘đĀŽzōa_xŽM?Y‹Nm:gyÎ a"áĮôüi¤Û˛inoūt¸ũk+M×bžÔ'ąx&ˇē€xĨ§¨ œŠvŊŦļ‹d.ÍŖÜCĢˇ8ƒÖŽW{2ÜĶDœ(ĀëÅ#€r{wŦSâO˛ęļšŒļĻčâ‡B} 5ļr3ßֆšÜLhėÅ2>eÁôÍd?‰ ‹U[Y^}ОQB. ōėcŠĩkĢGsy-¤–×6ōÆĒĮÎP2 ‚sČŖ•¤ɗ”1ېTcŊfkõž„ĸK˜.ž3ÉxbÜĢÎ9=ZģgĄe ŨšũÔ¨IāãŪ•ŽWą?{}i§-č=+Nņ=Žŗ{-ŊĩĶ$-ĩį*õÎJˇĒëvē2ĢŨ¤ūQ™"ĘŊš#§Zn-; ę×4zGOūŊPŌõHuh<č#¸X¸*ŌÄT8=ÆzІī_ŗŗŋK’āM/'û§ŊŽö2ą¤Q 9íGæüÜõÍ?ļsƒī@ $āg9¤'äņN ŸŊÂ›Œ?ĩ11§88ūtÜ*C‚Į§4Öú~”Ä@äį#ņįĨđrr:õ§ķcŽ(*ØīĮJˆ°LnčN&ėƒū5!qL#O˜ $ƒĶ¯JcdįžOŊ=ęFi1žÄāúPuīÎ=i­ĮLtîi[åįŸĘ›@äĐvävĻ•įˇįROĶXdsLD{xéëQ•ãŒ}*bržūôÂ9Í4vSÖ°5åÄÖÃՍtg¨ëôŦ}}lxáJŌ›÷‰’ĐŸQĩĪԈA'×4“Œųƒ<´č˛#O@@ũ+ŖĄR\â\A]˙Â|w‡ļ”7Ķ ˜įėAũ?Æģ…‡Ä ŽP}˙vœwB‘ôUQ[˜žSŠa'šxŨæ@)„Øä˜Ķ€0đŨJ~^™Ļ`ŒņÅ!ÜBA#ž5ŽTāãŪžŨ{w¨ÎyÂtāŌc>cœņNĸ0K9#ާŽOj–qŠ#Ž‚”ķéMĀlgđĻX=Ē&É=jgl¨õ¨Üc€LĪž˙vô5V."Ž_mëũjœcä&ĄšĮbtÔ´ũKSĶ/īcĩã7M:ÜyØmąüŖ öO~õÜhˇŋښEā“ī gB?<Õ{/-ž”Úzj7Ļ&î]rŊrËĐæ¤Ņ4(4({‹‡‰Ží“0!Oļ­g$ÕģÆ-3;ÆHÍĨØƌ/ĸ! j•´›ühë ū—˛]ą°9éß8÷õŽ‹TŅmõ…‰n%œ$lV7Ú7˙Z‡PđíĻĄ ēÜÉpŌĀKGp˛mŊ@Ĩ$ŦÁŎti˛d/ÍĀ9Æ)Ar€¤ãÛXM´ šYvqžVËФŧˇ’ęąÜËnIûņ$ûr gÔĐæž3ÉáĮ%†>Đųö͘؃`ŽNEfhž] |¸/ndƒ“åI´‚Įä ö­f ÁČéĮōĒ›NMĸ`­3•´ūUöp ˛d˙ģZŪ#ŽgđΠ!??ÃŽãŋéUãđ܃U}Pj—?kxÂōĐ zcĐ6D{@'œ÷ÛWLI;4sž •%đĨŸ”Wå,øˇ܅ĄûTȅ ÂĒ00qÎÜūFŗ-ŧ7…ĖŌi—sŲŦ§sÂĄ^<ú€ÃŠŊcĻĨƒM(’I§˜ƒ,˛ŗã§N°Ĩ+6Ún’G?ãÅdĶŸ•oS#õŽ­xŨŸŽ}+'\đø×„QÍ{<0ÆwˆâUåšä’)×:,—‘ŽuKš"ŒPāāásƒŪ›iÅ ÕIŗ_aÃsÉũ+ŅEđÖŧH,Ė-'ÚĖš88Æ;WZáŪ'XßËv]ĒĀgož‹aáŲ,..Ž Õ.÷'tĖ荸ķÎ1ĮSJ-$ÂIŨbĘ4ës0Ų;D­>F }Ŗ9÷ãôĢ6$ôíUôí7ė"w{‰.&÷ŧ˛c'°=*ØÎGOj—¸ÖÃv79=z×#â,Įã/J0Ųf ¤āgŒ ū5×āļzÖ%˙‡SÔ ŧ›Q•^Ų‹@Š€‡ƒéĪNõPi;ąI6´OŅ.S_ēÖī^4Šå¤Pä„^:“Œž=)ž5C˙­ĪB‘ŽFŒVíēÉ ˛Íæ¸ęåBįđG[ŅļŦūĖ÷“à }ô‹nFrqښ—ŧ›´˛0'&ûÅ:}Ļ­˛ŖUšĐ/"gã‚Į§N•Ø:œú“Ö˛o<5ŖĻ%ŨÔōŧL 3Ģ$x`0zzV••´–ļëˇ2ܰ[xg é§ū=“>Փâ_0xŸÃģ]ÃČTÆxësF°šĶ4øí'¸Že‰BÆËC~NJĄĒhēŽĢkz5âû+—V ã=wsĪOj\íƒMÆÅ‹I..ī.>Ųe@‰•÷|Œ99ú¯OjŖãt-á΍‡'ũáWĶOÔ_Q†âîū6‚ H†Šlc-’sÆxĻxƒLēÕôæ°ˇ¸†Ĩ‘ 7ŒjIĨ$ÁߕœåËŽģĢéē\č,ÅēĨÂŗ}éxč¸ātũ+šQƒž¨Žv˙ÃSßéöąËxŠyjWČš†2¤Á9éSOo¯ų6*š„"E¸{ŦxĻ9˙&ŠÚVŗēŊŅ´ä–Ûĩv‘ÉÍ“ŒcĨJ“×57qČíŠČ´ –'Ž1Į4¤v =ŠĖÁ#ŪCmņɤë†ãߊ4‘‘Ķڐõ, ņÍ<“ķoZMûP‚8úķ@†t9íôÅ.ūҁžšüh<jfëéO%ˆ…7pnA Đ-ŒûĶ/ąĻŒ‘Đš€zā1čF(T’rF8 g°ŖéF{w Ō8éŠCõ4­ōä’?*@@>š CzTgŽqSqL#<÷Ļ"5Q´ziāoz“v'đĻė1Žĸ€Ž2ŋ˜x=ā}ŠÜã§#ڛŒ“LL@ ĪëNČÎ=ģš :ãß7 Í ÎāH‚G4Ö8=9î3ScПĘĸaķsژ #åāÎ‘@9ɏ~´ōĪâ*2}åڀ"8qi3Œā ôëÖ•ēœ‚?­3qĮ˙Z˜9ôĪ\f™œ`Ԙ9Čį>ÜĶŽ€Đ[øˆÅ7ÜcéJAĮŋŌ‚HõúS¤€N=éŪø ƒœņĪZaĀxĻ!ŒÂ׈cnĀįæ­ˇ9\šÄ׹åBÄ˙Ĩ\>"eą…sÁ=¸QRF…!\œåŗD„1~:JOîA÷Žž†=G™[Šė~ÉDŅÎp7Lŋî$Ž4đí]gÃĻ ãŨ˜€<öúÆĀ~ϚÜĖú[4QEn`ya1ÉĻ0sÍ('#œŽiœƒ€sĪĨx፠Ā8ÁõĻļIäSۆÎqPų…ˇnŠ@.9ĨéH_ Œņš@Đsžô plƒIÉ=p} "1.Aį4ķœį°¤YqųĶGš{ßZaŽi„p*'æŦ×åühJķū=ÚĒG(‘Īnī›yjœ_pŒcŪĻFØzˇhëSFFډWŠ–<¤’ Ĩ<Qg0pxŠTsŽÕD0=3ŠoŋZ“šL~TÅ`EH§ €GZ‘G͞i60Z‘}Oĸķ=*@@Ԁ”āŒRr)2GŽ=)ûr}čÂcåÔc8"˜Ō.ũ€á€Ĩ'šāņFI'šĖÖ5uŅíMˎĮÎ| ÁęrG•Œ–I{ũŠFķ‚Šzā6j”WDš$ėÎĢw=Ojnx=ÅTŠö ëh.­ĨÃ(}}jÂcĪ8ėjv+Aųʞ1õ ŽAĪNõ}¨ŪA¯iÖæK€Í(e%•WŠÎqÜĮZŲ#5a\SĪ ö ŧîČôĻ“×'Mcx{Pšŧ°–îî_27Ö.cņëƒNĪpžļ78É“MF*Čāûz1īÜŌ äzâšQ]pā0Îpyæ˜˛,ŒBœķƒLŽînĻļYCODW=3E€ŗŽxŌ“)Ÿ}-䷖–v„Į¸ųŗĖT¨ŨîOõ­RĢ–?SE„˜¸\c‘L'‚3YO{tŪ G§x÷FĘÎ~Ԑ‰e31 ~ęđ9'úP•Ås\œöƒ<ž™÷Ļ[<­m\F‘ĖW.¨Û”cŪžAc‘@Ä`=sŽ)1ÆHëúSMÄ>ŲŧÔėßåîųļôÎ=3OO_j@#*įŽ¸Ĩ >\ˇ^ôCtę+6Æūęã\ŋŗeˆÛ[*€ęíÍÎßĀ:i\.id(=ûšyásԐc8Í(l§˙^#v3øŌg…éÎ`/ˆäkû‹DŌ.Úkt"†îžŸÅßŌĩ4íFKM†îܟ*Q‘¸`ŽqƒúÕ8ĩĢi–ķČķüéLįŒ÷Ļģ˛Ļā…ˆ=3Jî7HʙĀ9l š‘‰ÁÁ'œĶ˛¸ÛÔÕgŊˇŠú6$M:ŗ ÁÁÛמ•`ķõÍ0 ƒĪ~hž4ƒ8=)’ĒĖ äFNNô…aų_›œûŌ É oÎŗtkéĩM.+šíÖ&vĒžėŽx9ĀëWҊį¯Í6ŦÅē¸8Ųß8āĶ#ëÖ˛î|@É}¨Z‹7˛@&f¸lô_lŒõĢÚuÚę|kF˛ĸ¸F€Fi¸´$Ņ6GMüįšĻ’šĀ˙ ­&ŖkЁô™PȨ~QÜúUļ1Čöâ–ð9Ī4z䁯pE‘Ôr=*0 īąį8úP;p:JBä+zuëN!Tc)Ą'9ī@ÅË’xúRdm?áO*vŋ1TŒĪZ!$šíéHîe99ĮJF` ž†ĸŽXŨ™ARĀōdLĶɁ%Į ø pcžøĻá{sJvíĪé@ãq$Žhge €y4ÅEv€ cNíĐq@œį?&Nzū´Âz ö§ã#'ŒPˇ=yĮōĻôīõ§‚9ãšnz‚0hœũŊiœ`ņųšq=yúSNzŸJ äōGJiqüéÄÃ9įڜƒvâ d‘˙ëÔoÁČéõЈ*y úS¯øĐ;ķN´Ŋ€ĮëFҏ‘ĪCJØ ÆyöĻ!‡‘L8Ũ‘Œô9§ĮôĻƒœÛ Øāp8ėiŊzõÍ9˛€*NqÁúS91ˇ°÷ÍBWI?­L˙2ûj‰e#úP=üi|tôÍ&ũ˛*˛žsƒŠo͸ƒĶéL@ciũM3ŽŨũéøāsô¨ņŽƒŽ´ĀLŒ€Rv įžõ'ÔūH@íÆ+[;’1Ī_é['¯zÆÖ~ė|˙\7&[2ķ‘ד'ėã=sū4˛œŗûŠa? _öŋÆē“$a’įŊuaŒôbOíņ<į\¤¯ķ2/'5Ķx4˜|Sĸ3Iž€~nŖúŅØ¨(ĸŠč0<š0c…7°&œIëŽiÛrĐŧO5ãÜõeČëÍDã€1Ū§Āį=Ē5ÚŲëøŠ@E"‚ęsøSĀÚ3ACŧ üŋJ\ã9¤1‰†rz朂sšplÆh\Ŗĩ7Â2qŠ~ŪŊ"ŒëHįŌĸs‘АžHĻēME+¯õôĒh6¨úUێa|úU5û˜č;T3Hė*’㊞295=ĒHÁ ãSCd‹†į¸ŠãķQŠįŽ´üôĻC$?wņĻ6O9éC€Ĩ'šKg=y4ŅÃqO_Ŋė)ˆc=˛iËÛĀwwöõûŊčLāy§įN÷¨Ôæžëæ.NôpUķ˛y™ķō03Š“ ž§Ĩ@įœĐ3ņũÜņč‹kí2,LÉ ž‚ĩįž×@Đ9™8  ˙÷ɨõo Yj×h¸šäŒ$rár:zÔ°xoO†tša=܈vne2lúÅiÍTˆŗģg/§¤öÚN›¤ĘënL2]ĪžO/XásÉk­ŅŦEŽolnãjįĖlääįŋnio´;QŊ†îîß͖!…É8ëžGCÍ_Ųģ į”§pŒlrv¤÷VÖfo3ÉÚ^ģA˙ؘøTO}%߉4ë[‹ųK!ķgŠ,ųeķ…E¨Ÿcøt§DĶ „ļcŒA3ī‘Fãœä‘Îr*Xt›+k…ē‚Ú8戃*ôQØSįarČĪņ5íÅŽ…#[ô‰˜Bœã–;GķŽv)eŌâš{K’Đ[F˜|Ŗ30L/sß5ÛÜØÃ{ †ęš,ƒĩÆEE&“a>œlŌ#jqû ¸^>”Ŗ$•Ŧ-ģœŧ4ĩ_Gz—wRĨĒ—rČrĖOĀÉ8ĀÅGiuë7—gQ™ūÉlv4‡?1wÛŅF{×Nú›5´ŌYÄmā}ŅĮˇåS늒M"ÂX.`kHŧĢ“™•Wnķג*šĐr3‰Ņîßé֏,™2Ŋ䤚bY¸Uúr{piöQÅgwĒÛŪOyäÄōHÅT”gœO|fģ(tm:HícI!ā0vzjIt 2}94Æĩėƒ #^}hö‘bähÎđäæŨŨ}ˇíÜ#(feVQÎ ęyį‰Žļ\éļ÷Gũf‘¤P$*šT> “Ķž+Ąˇ´†Îˇˇb‰ÕEĢjZ]ŽĢj-îвšJ’Ĩ[ÔĐÔ).k˛­ĨŒĐ ąĐ`I§ŠÕA=Â:CžĒAęā}*_ĮŠYO4SOigs'ÉĢGÆ͜dŒÂ´!đ~ž—h÷æ÷0ûLÅĀĮN:č .8ôU9öbQî2ŪííŖ‚5!#PĢ“žÅqÚĻŦú…ĨØ7žLotlāŽ7 s†v=q×Úģ\ƒÔŊk* čđ—ago—Î;šųšįõ50’NėrM茉|ÍEĨąŗžVPļˆŦ…ļĐIrxāsŽĻŦÛēŨxÎD{‰ž8m’{}’„r­'ųV´:&§. –ę.ĨûŌ{cŽÂ—NŅ´ũ)ä6vÉ?Ū#ŠöÉíĪJnhXjú‚é:]ÅüĒD ?ˆöËGvŗköŋožķšÖq*gäYEUŨŋ.kŽŧ˛ˇÔ-dˇēÍ‚Q†R ˇĐôËfŨ œHÆ/'!yŲĪ­(Ę)j9&Ė=&MCVÔí¯įž C?Ųc”œŖ (eéÜžsŌ›ĨKĨö˛|Ų$ēēd‚3!ğ0Dũ:úfŦ_ÅĻxgJžĶO„ĮuvŒ°"f‘úž}EiÅĸYÉŖY顐yŅŠō䁸ŧ{æŠÉ|‰ŗ0VöK¤GUg6Đ4ŽŖ>QƒŒ(ĮĘŖ<“éYz~Ģus-¤^Î^öīĪ‘ˇ‘ļ% *ÛqĮÖģ–Ō4ân ÚÆq•+(Á+Œ‘ĐcŌŖĩđö™mso,6ǞÛĮåÄŸ”wĀõäķ֎x‡+9Í8-îģŽ^Įs)ē„´(í׹č=ĢcÂMįø~ÖéŪg–eĖžk–ų‡Ęqž€‘ŸÆŦŸ éKbÖ?dKIæ°Ür_×9Í^ˇ˛†ÎŪ-ŖXáˆaQGJRšjČqގ25TÃxÖąĘaH`7ʸŨŒáUsܜūU§]ÜÁcŧ›Ģĸ÷Ws;(02xÎGN0kĨģĐ´ëÛįŧšÜI3Åäą$ão=ēg“Í2ãÃzUÃÛy–ŠVØb5Ž#ŋãB”R°8ŗúˆ­ô‹)/į1ŨJË,ŅLwe+†< •uŠ6€ŧ“ŒzÖ{h–OĒ ötãĄÜp2=jŨÅē]BđĘ_cŽ F*1ÍLšvV8Ũ"ũZ˙[šˇž;e¸¸ōZ`„ļÕų{t=jôúŒZM¤ÖVl°[X Ĩ8,ōc!TũÉ÷­/Ãē~#Ib%MĀ‚ĻVeúāœgŪŖ“ÂúTÆäÉvš2BdnšŽxč:UšÅŋ"yZF ˇēŦ=ŧwžmíÜؐ€ <å—Đ(čqéNÔ-îßSŌ´ĢŨMå5ŽEUNų01×'…téĨYĮ}Ō°Äb‹_@:S‘huíB„Ũyb5br{Ǝt>V`˙l^[]ęSĘæk;0°GPL’’Ëw=3Ķ“íRīÖ­ėõké.2éîáe_ŨČ$ņž9ŸSWÂzzØ\[y—'í Zc/īģƒÛš’_XŊ¤v% vbVbBFqī‘G4Eičņ•Ķ"vš–ãÍhyHŨ†ä=3XZžĨw{o_Ē.ācĀĪ ŗg ËkŦO¨hĖí1Ĩȸ`ĻF3úSO„ėŪū[Ϗ¸hĨK%ŠŨ3ú‘ŪŠĘ,•GgŦŪG§Áæ7ŊhLķI'ʐĄ'i`;ãÕAĩũV"ŌęO%¤ē¸P€'D$| g9#ž}kZīÃŪ΍K-äûnÔ-@00ŋΆđÕē‹sŽĻŲ_f@b]†7œ÷)@-#ī[ÔĨĐõIHÁiÅŊąDęO <āœíV­u¨ô—v'ēœÚĐĀHÚp9$œķ“Ÿz˜x>Ũl,íÔėHd~pd8ũoĂ(„k…U På(ž§+â{ũ×ÂŪ8ŖŽĄ7!fÜIĀ`;ž83V`Õî<Ëš.€ō"؊ą¯Ėe?Ā9äôüMI†o¯uæ8šK‡Ė|<§…nŊtøZH ˇ59‹Į9äeq ôRsÍ6ā+Hu留ĪĢË °BÁųeÜ1ûŠž™Į5VßUX }F ]Ũؙ3ŧ¯^Ĩ[˙„v[kMDY]7ÚŽ‹i <ã=:œĩ*x~o/OCô„Ąá˛= 4‚N8æ¤n8'ôϟs†īLöĶ ąÉ#õŠvž§_Jynr?*ĻGúvÍDAëũjÉP ,xëQ•4ÄWe’z{Ķ:€Aā÷ÍNëŒdrOĨGŒúŠ€Â>˙ZŒŒv<ûÔÄįûÜûRúūT[ƒĮëQsĮZdäæĸ t技ŠĮ^ĩ‘­) ëƒ[Ey"ąĩŦ,)īg5¤^ĸ–Æ<Ę<ÆúbšČp™ūđū´éA2ɏ¯ķĻÉšcdÃ­nŒXõˆyĖqßük đëų^#Ņä%/`lzâAX17,O\˙SZÚDÍ­`če¸†}CŠ:ĄõN(ŖWIÎyYv@âšŲ DRŦđG2 "††΍Ŗ*XkĮ=1ā÷üiĢÔā”C|Ä ôĻ´ņÆŅĢûÆÚ¤)<ã?‡J@+dœcõĻ“×ŠŠîīɸˇˆE,žkė%!8''ۊ—*…ę:Ō “ONzš‚yŖƒI70UÉę}*A¤1wH9ĻÎ{҃Ī#žhī@žššF=ũŠHëÍ!é@ʡ÷Mô5M@āÕëŸõoūéĒ ūėŠ†k„‰ŠŖ9{Ôx槏žZ˜õÆ{ũiTüŊ逧qˇ­Q,2Hõđę( Ā#Šx<3MU8āĶ€ œž3‘L¯^*”ÅD3ž´æV`ąõ! 0äŠBsžZ@6>ŌI" ģŧ†ÂŅŽnœG r·šLÃ/~´ÕœœŒÖ‡ŧUkâ ģØ ‰Ûœ†'!ÆqšßŒ’‡rūŊЏ¸ģ0M=P¤rJžÜĶC“ÔN fkúÆ•ŖO}qČbÁ(äá†qÔUKMfōMBŌÎúÚ8~× ’9a“pApzĶPm\NVv7Į<~TsėŸĨgj×W`'Nž*āģ ¤ ¤öČīV Ü ¸’XŌ">ųqŒúgĨM˜î] R>‚š_ €piˆwlĮ9Ē1õģļÎ|ø¸ã;ĮZwÚ"2ˆˇ§™Ô&á’>”É0=ŠĀādUTšAu:KäŦ1í(ÂLˇNwÕ4rĮ(m…_iĮĘA怸đFpOĖiXŒã#?ĘŖ’EŠ##Oö› Ŧ­PšŊĶįžôÆ \:A´mSŒõĸ×Wõ66āŸĨã<ÔhFPęęc<M"Nķ+ŠŠ  !ĸOlņNãąÅ1I)U#åę­Rļ–îMVė; ļjƃ‰ęXūƒÂæn´€Žį­bëZ…íö–ļŪRÃur!—x$ã“Įā kĸķe—Ė#!r3Ĩ 0š.@=)ÎÉĪ֗ œr8āâ˛mu;‰ŧGs§˛ÆaŠ•]AÎI#Ÿj-qˇc]@'Ļ}é7aˆšĖķÛZę—E ŗ4QĻ2Gr;’ 2Â}Mîf7rZ´LŠŅ$@‡\õ“ĮŊę+šęA<ˇZí9w¨ŅĘįĒ {§*Ÿk„[HÎP!pŲëŒų4†]b$br)įÕx¤š’k„{fŽ4#˓p>`#ž;bĻĪ$€yö āHæ”ģéQ —“éNœPĀ~ÜgnĐSOĖ:ō:ÖtšœÉâ(4Ņ ˜dĨ2nä`ãüjøĀcĮ'Ŋ;4$Į‚1ëīARW!†sØTo,pÆBFæ8”›sĮâpą=3MĮ ŸrjP›˜‚qŠFĀcĪéL@9#ĩs­NĘ:įđÅ0Œz„Ī\ûÔDuĪãS÷üЌXvÆ)Üäúũi6ņÛķŠ™wpzjM¤d~´ÄW`=ŗõĻ2œā}jĪ–8=}éŦķúĶ@SdëČČŦ]tj¯÷Ģ hũø>õ…¯ÆŪBƒĶ>ĩ¤7ļ0؁ŧŸAzdŦDjsČeéøĶ¤b¸¨ŽWmģ˙ŧŋÖēQƒw¤œ ˙:ĐĶZe–Ū@v•`Tûæ¨ÆčŦų<’^QūŽvļĶ´āƒĶ­ Hú×4T~lß_Ίč1<iĩČíÂęÄ$Ķ~ĐL`döčsZŅę°CĨXÜ^ĘąŊÂ&Ü÷b§Y& įd&ĖÍœuĻĪŖE%ĨŊ”mļÚ6Ŗ|ĮhäOĐ~åIŞŠMjUņ<Œ4čcķžšâ8¤•N )<œöéŒÖ=‚Akypc‡UōF阂āķĪ8ŽÂâÚ›s č˛Fã Ŧ2 sēV%MNÖûM g-Ā–v€č:c­’哞…(.æ[, ɌÚŌšFũ į¯AOņPhŌđŠ 2GŒîR€ŊÎĩĶÃēMšY#˛Pé/šŧ“‡õÕšėĄģˇXįxWWŸâ ūbĨÍ^čŽWc†ņĩļ’ļĀĘæK(á‘rĘΘwˇ^Kz{Wy Ëqs!ų\v5^ûH°ŋv–æÖ)$hü˛Ė9ÛéVãb#@   tĨ$ŌCŒlÅ9ĶyįãߌĶO™Cv÷ö¨Ž~lúÔဨŽ)Œ¯1ųĐÖzôĮåZ7ĄĮĨg'ŨÔKsHl:>ĩK<ÔIžGãRÆ>\P†Į‘Ëdqüčäh>ųæûŧqŠĸ1Āúv§XgۚŪĨ-Ú FŅøĶÆ Ļ‘ŪžāŸÎč){ôö sĐԜ @įœTËĀÍD:{į5)8'ŊFŦ9'=xŽwÆw9Ō†™îšÔ]`‰~¤dũt…pä–8æ¸;-nÆ÷ÆS_^\[dhmc#ž2ÍĮ°ũkJk[ö"oKw0<(íá˙­¤§ËZČ÷ģĖÎŊh6Îq^1â;¨fņ—Ú}ΚŽVe)[ņÕëÚeōjmŊÜmōʁš8­kĢÚFt]¯føŋđ‹ŪĻÖfxöĒĒ’IČãŠ4Ũ>ÍôØĩ DŽæĶf%Ëyk´nq˙×­˛ŦĀgƒŪĢ FÛûLéâ_ô­žfĖsˇÖąOK#VĩšČÛ[ _ iW)c8XåSząEļB`‚9Á ŅŠÁhšlWpĪŲ&¸UģˇgI˜¸0<‚sĮã]Ãp ÜN)ã,ĀæĢÚu'“B†˜OöU˜05šō“÷G9NÉé/:ŌŠop!2ÜDĖđą—,FŒNO°ŽŽãYĶmn|™īíâ—û¯ ˙ ĩ õŦŗŦ1ŨDō˛ų%}~žô“jú ęrÖ:JÅây´öĩŒŲA!ŋŒ•\m øĮđŖ6“ufđŋöĪÚÉFwæeX7÷B÷Īģ‚[‘ŒuĻuãwZ9Äĸqš—æøĄÕ¤ķĸ@ÄNæØFzsķbēZÛĮŖÛ5ŧ K´ !\žbAīÅi(#’x5R}VÚĘūÚÚiÂÍrJĄē““jČvļĻVģ4vz唚”-&œbtË.Š1#žŲņŦ‹9aHm×ĘqcĨ7Ú#1"Û7 tN+ģp˛/ĖxmY™‚ĒŒ’x…;+ ÚÜáĩâ{]VdB,$Ŋļ0ík0#Ėeˇ^}Ky”?đ’Û[BąÂöHÉj@/ķ1ß;kŦ}BĐ]Ciö„ķĻC$hK/¯ŌŸw{oeupĮũæ4ųØrœŦ k§lējŦW7:d€˛qēL)LúŸŊOđ°’{6Oļ č 1Ë‘xŨ¸…ķĶ$×W ‰4QĪ‚H¤PUÔä؊x[#Ži9éa¨œī‰Ļ]čģ˙†ũ$ )8P¤xéČŦ™nmŖ×­įXå=JA#˜™¤åÆ@áIč9ŽéƒÔđjî"´¤™Â&å\ŸR@ķ"…++Xz™ž%ybŌˆ’4 4fåS¯•ģįé×ü3\˙›k.ĨĒŽ‚Ē­q§)ˆB›7°fÎŪ1͌ú×}*GįL` Œ`qŽ(ŒŦĢŗ‹ēLģđîĨ=¨šy>Ę#Û,Ev‘Ģ´(ƒõĻN–ĶęqÛ,q#éCˆ†ÜŋĖ{wä~•Ú° g=éHaĐŅΧ!b–6Úž–"dC=ƒ‰°Ü9ųŨīÃ~ĩŸĶNĸIuå›tģš7c“€wāzōvū•ŨĢy‹˜äVPO įŊ<(ÁF;qG8rœŨÃA/ˆRÖFĘ5žõG%–<äaž”ųŪŪ;Û¯ėš‘l˙ŗ¤3´„ü#€Ũ}ëĢ ˞IqHˆˆT]§¨ĀūT)”ät÷†ÛUĐŨ.˜ŊŨŖ ƒL[yÚ¤×9­ívyítKŲmw’=Ā ËßøÉĢŪZËPÃĄÚ8úS”ß^ôœŽî;hr–ōi‰ŽÛĪĻN’ŧ–Rã—,ųR'īx§øy­.垙5"×iyđŧĖ@Î˙Ąé]2AoR–ņ!Rv€c=qõ§¤jŦĖĒĒO$€?ZnDÚÆŒÜévĪwū ]Åæ6âRÃ=?­TÛĻũĻöÉZĮoYī“#Ë*Ie$äļî㞕ÕŧBXĘē†SÕXf“b0\ĸœtČ}(R˛°5ws’†å-¯4sĢJ!k=Ö_9ö‡`S˙kŸi÷ļ>kËĸ#Ũ2ŗ›†R­‚@$5Ū<)1S$hÛNAeÎĩF–vËĸÛB¨•P€}E>t.S™ļš+ŊRánu!ėW¤,$áĘŠųTdũŌ=ģš4{ĩ˙„™áyÃL%š)ã˜˛˛î+ĄčGA]O‘›æėC!Ũ´gZX­­á’I#‚4•ūķ*€OÔŌįŽƗ1Įĸ(’HҚę ž¸pOä+>ęH/ĩëč.õ5´“1ũ•ģ´d õ'=+ąp§”āō:Ô&ŪT‘ĸBę0­°eGąĸ2˛°8율šŲâåI'’ežfɧ÷e §LwČī]ĻHĶ.YY”Ŧ.A^ž)ÂÚ!rnDQųÅqæ#Üõĸõe’Æâ8‘ZGBǰ9ã¯4›ģAf‘Ęi0Ã÷°j3O5ČXî!ywŠ]„“ŽÄúĶ´ÛÖ:å˜kį™.R1šL$„8ÛąIãŽ1šÛđū™•ĨÛZē[-ÚDF|w'šˇ™a –6ĘÁ‹ą(ç§Zˇ5vJNĮ cømŽ'ŋēp×ĸÍÁ*Ē&Ā?—ô­y§{-VāÚ]Opąi&h‘æŪƒ~•Ņ› 'āk8 /ËĮ卭õ䲡ŽU‘-āVD  ˜ŌipåhåėĖ– ym­Āō=ŖaYķ™0Į$…Áぎj÷‡'k˜.–InšheŲ,W,ÄáF@aÔĩǚE„+0ŠÆŨq‰Æo­>ÎÎÚĘ&ŽÖ‰‹ŊÉî}i9&šš0u‹Ģíû=5gX"’&—%ĘyŒA\Õ]H_éÖļ?m{ģˆ÷,°Fä —Rŧ}ĢŖžĶluUž´Šp§)ŧgOJdš>Ÿ1‰šÎ=Ņ!Ž2 ĒzŠրĶÔį^=ö„!ÖnY%ŽY|ĐÃæ /¨?Ū#•oM¸ŋÔDw‘ŧ ÖDęB@\mČ=&´…ĨĄˆXÄ#ˇŧ@dmnøįÚ¤EĶáŊ’ō;UIŨˇ3†#'ĻqĶ>øĻäŦ%s›KíOûTÔ ųgˇyc +•ø?—zōįRģÔnlôé9- FäŊ›š”{b¯OK ėÖ°JŲtYn=ûŌ\hZmŨÄ3M ™b@›ÄŦ¤¯Ą ķøŅ͇++ĢČõKëg¸P"˛I×j +e˛—õ¨ķS4HáģH¤ŧˇg‘Ė!˛ÁCŽŨkBûB˛ŊŸíR$›Äf3åČSrsÁ­%ž‰eؤw6̈‹ĖĮüqŒvŖš!fS†įTžē–{iÁŅ…Ŗ;BíS†'žîãđâĢé—׏¯Ímur‰ËâÕŖÚvƒō˛ˇņqÖĩƑcĸ÷ŅŦË+ÎĢ3fõ+œ¯imŠĮr‚Wt#!!Îp ŅÔVf˛ã äĐÜiĀv#­&:āsšĖąųē`úSņžqĪ֚¤ŠkļŒžĀ0 ã$?SXpÁwŒ’YÚÜČö1ĄËÔĪ_jÖķjÚ<–Ú­˛Āķ)Y#ŽMØãŸZŠĮA÷Đ]Iw<°ÄŅ4Œ2œ=‡Ŋe’w-ŨęRƒXē–FXę RD x8' įÛĨlęM%Ž—wqfh vAîâŗG„íáōLw×Ámä2B‚@DyÎ@ã§5ŊÃ&91JM]XjũN{Â6V§Ã’…Iá “; —bNAõôĒ—v2iÚÕĒi) r­„Ē.J€Ž¤ ŊHüjúxa-…ŽŖ}iąc.6 õÆA+Ÿj˛4t’9ĸžé PxĀ`@VäōA$įœÕs+ŪäŲÚÅ(õËËģM)máCs{žR0PÎažHīDú–Šjšd—pÛ[¤ōų7b„į!ąƒôÍK˙ͯح!Šîō'ŗ$[Ė’č§Ēį#ę*åæ‹§Ŗ>—4Ō˛0Ęí—Č9Î}i^7ĨbŒz†¨Ú]ĨÃĨ´opÄųĨČSRAl’xč{Ö}ÅÉÔåđϠƍīpÁ‚ŸöNqíÅt7úLWÍe‰į€Ú6c1;cƒÚ¨¯†-ĸKHŌöø-¤†H~e;Iú¯§)E™ļÛw*ˇôæĢę’tģšR8ä) 6É>ë`t5_RŌEö§§ŨD6Ŧ_ÍÉŪx#`ö9ÉĪĨ\ēļKĢ)mŪFE• Ld=Á¨VĐŖ›FKøzcÆ[O‘‚ Œ…ā{Uen_Ä:JEģFË0ĤāåyéŌ­Į GŌéwtßc‹ÉŒ„ã üŊđ?*žīM[ģû[Ī´MÛgb&Ũ§<6rQÅ_2ēNÅuiãÕ­´ķŧ1Je"<{ĘĮHŌĄ]jüØÃqåÛnūĐ6r.ŸŸnGU#Ÿ5Š}q>Ŗsgafˇ2Y"Kķ ‡;Fw qߟ§ĄkŖ%ĻĢ=ôwW%gåáf7` Ũ:ā ŽûÃĐÜęũ.Ží&*Íŧ|Å€xëīJņ¸ėėSŊÕõ;;Ô…ãˇŒ]FĸØ˛’¤ŒŖŨēņOÕĩ›Ũ4ģ´0ė‰b,ī‘į8!=1לÔ×ū[÷¸yoŽ„rDą* §Ëƒō’ É#­G?†ŌéĨiu ĸf…#|…9(r§ō@āšPÔnĄĒjpjļÖĐ[4v֋rY9ĪēilĩÛۋû;[‹XR+ëSĩr×\šīK‚t˛ÛpķĩģĻōR2¤‚KĶåëŽôë_ ›OėöKųˆ°#R‹‚§ƒž=)‰áŌļ‰oĸä “q—‰HbrH#§SšĻā/xdÚŦwz~™q-Œr ¯V" œDáˆÜ8į})÷ZũÄ"ūDĶ÷Cg8Šgķ€8;~`1Ī 8Ĩ‡ÃoĨŊˇö‹0‚īí(^ qÉ;zûžjK¯É=ŽĨoöÜ éDŒ|œíā yûĸ—šp÷„mRö-bų$ŠėûXVIĖ;Ôf'į§J-u‹Š´ļĢöv˜@#BH’QSļæ^Í<—NbšˇÜ@#rĪQÔŅkĸĪ™%œē¤ķFc1Ež4lžŦqGģ`ÖäŨÍÄúz\YĮĐ#t—s) `v=ĒK=biīáļšĐFŗÂōÆ7ãk† g"žē„éŒˇŽVÆ3ƒų]ŧúpåPØhÚ\Ú\=ü’Iå¨ķˆ?1ëž4>Qj6Ã]ža`ōXyv÷ncVķƒ2° Ôc§Ę{Ķô]KQŋ–펭aŽæ’4xåÉųN1Œ}yŠ-ôO.+ÍŲd´˜Ė1Ī#ŸöIĨéré’]tdˇ–V–8аąÉįŊ ÆÎrų×Ŋcßk[ęOeolķ2CįHpĮ$(AäāÔē6œö y“ ŽYŧČŖ’C!A€:œõ ŸÆ–īK3ęK¨ZŪËk7–#}Ē]AČČ=ÆM$•Ęģdrk7tĩ‡K™îĐ\”yBmįI=Å_ĶîãžŌ­ī’6h„ŠŒyÕ°“ûI¯–čgėū@W=폜ŒķôĨĶŦĨĶôXėVuw‰ ,ž^>‡ū´>[hNˇ04˜ÖËKŋžÔI{}4‘5Æ~eÉc‚{Œ.? ŊyĒ$šUë\ZOļ •ÖpIʐA㌑MOŨ[é6v°ß šŌ:9L<îČ+ģũŖŪ‘´ké4ûëfŊ€ĩÅĘÜ0Ÿ—I}TU>Vīqkkßëmgyyoöf†H”5KĀ㎧­MwŦ›s%œÍåF’\maˆÕ›Ū<”Ûũ7íÚĻxf öf>bŽ7ŠÁūúU5[YŌ/ĩ[™Ņ/áŌDǑȅŠ0lärFxā qøÕĢm~ŌâęQ\­Ã2ÂęĘÛ°3’ČdRßX\ÜëļWÉ$+ ē:2ą`Ä8ŸN1Å7EŗÕ4¸Ąŗ–âÕėáQÂ7˜ËØÃVWŠ“ęz”Z_’˛C<<…QaMİĮéL“Z´IcË˜tÎŪ#w…nr#ˇz]^ÆîūëN–Ũ  i?œÁ؂܁€}JĄĨjwW˛J˛[˛-ÄS@ŦėŖ ŒĢ:įœķڄŖmAļMuŽX[O2ŋœÍnáf+prN1Ž”ûũjŌĘi_3ä@ō4q—BHéUŽôģéā×c o‚ˆĪšF>@ŧņĮLÕønŽu äŽŲeĩō.–)–`3‚HôôĮ^M5ÄÛ7'Ôa†Á/%gŽŖ†Œ†į Į\ÕTņ‰ļ–F2ĸÂTH3Ķ# ŌËĒčúmŪžĒŦ’Gq2œÆŌ~‡ôĒFOĀ8îBŠ…ō œŠP6ÍÊڛ™í˕’üĮŪĨ@_\žÜU[MNÖöõmã–E/ÍEhĘî^™ŠËšĶõ}Bâ÷ĪŗŽwb & ącĪį=ĒöŠ—Kp æ‹og"ŰÍĢ#́õĄÅ%pMÜŨę0ŦqëNę~i‡#=Í;ߌVe€÷ķĨÎ{QÉô¤ŨÁ8?Z8įŽ{8Ļā–#?Jp n!hS—öÍ Ā8ęzQ})Žx=MÄÎ=ķRo$NjģrN0x#ĩ%Ûæ8éLCøįŒÔ-×w8ÁnĮŊ1‘Oø ¯žŧœĐ ÆüMHP Š`};S„žqŸz ļ܌ûķGPxÆiw ģsīŌ€#!ŗƒ××4ÂHāõú͈$õ•FĮםͭ3æ'œ •lSŽF<JkrŪŪÔĐ $ž‡ŸzL9Ĩį#Š´6ėcÄDøÁ9úT ķíSNAÉ.0yÍ0+žXŽ2=Ģ]ČãˇˆÁčqõŦ=y”ĒAÁŋĩi‰-Œ9y—'Žũj'Ė$vūĩ< 9ôūt„UĀûÄ]&V'EUrŖĻN?:°§äâĢ…ũéüM¸yĨ?Ûļ˙ķÎoûäÎėĸŦ›#Û4ÖßĨY7÷­ã?øčĸK„Šæ(Y´ģ°Bä ō{W;á_ĩI0wģf‰líÛÉ(1†ŒØÁ­-VK˜õ=b¸x㙤FE“°zzŠâ”m+JWFŗ)<`uöŦí?T]EĨŧņ ÁF‘0$SЏjłöúæ+T{§cqc0uÚ1æ)=>ĩVÚōk­"ŌŌ+š-ŒZ`Z2v^:‘ĐcõĨČڝˆQŽ‚ŗl¯..oomæĩ yFģz‘œûozįoīnVÆęOí Ņ›L‚æôCiä ŽŊ9āV}Ŋáđ‰ˇ6˛G{læXwc,ęņ0{ôüi(Ģ\mô7Æ­c,rHˇ1•‰ö9ŖwÜûS†Šeöf˜ŨF‘ŖmvvÛ´ž€įĄäVGötņÚiS$M#Áqö‹ˆøË ¸p[ĨC¨i—‹ĢÜGk&ÛĄ G`3ė<ą§ãéBŠŲŗ¯crf0ŨÂënš˜īûƒÔû{Ķí5+køØÚLŗ*œ1\~ĩ‘e$چ Í§Ë-ŧöI ‚îÁĪ\7éRxv+øŖš[Ôb‹.Ø%•@‘ã[—48Ģ\iģšwˇļÖ0fæá!-õü|VW†õV›Ã‘^ęJÅĨ‘D„HŪ@Oԟ|o,ŧEo¨%„ˇ–īnmØC‚ņ6ėîÁ#ƒĐũ+*ÂÎū1arÚ|ʖˇ—&HˆÚå°ę3Î3úœSQ\ĸmÜéF¯aöuŽáXwųeŲļßŨįĄö k:lļr\Ĩė o ĎaŊs÷eÔīuödšŋˇ–8N7ŒŽį ž§ĨMĢX\ŨIâ5M>V[ĢxÖ…Ãē‚=}Į_J9cÜ9™ŋmĒXß4ĐÚŨÃ,‘ ¸V¨õúU=:å.5+‡ûzJ]• “€ƒ‚Ã=rIÉÕFīMššÔ ÃjđŦšSÛÜ+’ëRčē´_hŅ$´ē‚)§’@ĀôáIÁÆ{Ri%teŊr"ma¸Žė[\A hË9UsŨHī‘WmįKģdžDqęr Q×VrÖ“Ü2\nß-Ę~`23×ņÍEáxŽ ŌÚÚîÖKvŠi9rŋ>æ-‘ƒĶ‘JŪčīīūĐN-…ÜBãîmÜ3ģĶëíY:ļ$Ž;=Bō¨™ĻPƒŒ…vč:TZŧąY4ĢŊ.y6\<ŸjLr Ńį9ĪN*­ĩž °iÎÚlÆHĩ9n%ûšØÛđz˙´?*ĨĒbmîtÃP´{߲ˆÅĮ8Œ7''˙ÕI.§eĀļ7P‰ˇ1īĪ§ÖšĶo¨ b —L¸H"ŋ•Ę!\ęW~Ks’rzVôˆīmé—z\ŽáåûVTÆāą`ų';ēqŠN(jF°Õlbqy YŸdgw Āãß4KĒiĐL#–öŨw—´ČŨĮ^Es%o ļ[6ŌŽÛÉÕžŌ]2ŧfBĀŽzķVoŦ§šĮÄatŲËÜČ­ōÆXėQŸĖ9s3 ģÔm,ˆÎąœnačž§Đ{ÔōL5Ũ5\—c€swv˛lÜKqĨ]ŨÚßÁ_)ö”Ā ŖÃœū&´uÛY›N€Ú[MŦŅĖmĮWE<¨÷î>”šVrļ—ĒĪjˆˇ‹5œQDęPÛšü;ÖŊĩũŊë2Û\G)Q¸…`xíøW/wîĨsŦ}ŸNģ…ŽėâePĄŠ–Ę“ž ­ žStēeŨŦūRÆĪrĜŖ,NԜ’ĩÁ2ũÍåĩ™i¸Š"ßtHásųŌK¨Y[0Ž{˜QĘį øĪĄúV,­q§øŠúIôû‹¸.âŒBņGæ…ÁCũŅžyãšĨä"jˇÖ÷ē]íÅĩÛ§–öä˜ö#a€"…:Ņwlˇ"Ų§‹Ī<ˆ÷ĮŋNĩ“ÛYäO41 %Ü/žÂą#ļ–/D-ėä{yf2N'‡åˆĒadG÷銓ÄŪ?i2OlgGˇJ¤>aū0Iir+‡1˛×6ëh.ež%ƒŧĶ ÛíÍ>Kģql’‰áÚã(ėã :đ{ņ\ėVakj ĀˆęIo!oŗĄ‘}rxč7sTှƒŖC.pŪF Ūr5ą`ÉĮ<|Ÿ*î.ftßږ;ÚĮuoö…]ÛL23×č3O†õc°‚[É­•Ü ”“äf˙džĩŽļđÅŦꐞ–ūT§’ëoš6ˆČ ĐöĮZĄ ÚØøzęk+ƆS‰ 0’)>_›hÁĮĘGãG* cßYĮR=Ô ˛ŨŗHo§­XQ•ûĸ¸ũVČÃĄĶ4û é*C,>jHŽŲd~ĨO|šŪžūæĶPąļû›{Ÿ“ĖY>e`¤ũÜtãŽi8ö ÷+ßŨŨI¨ĮĻXM 7KNÎëŋh1ĮRJŧ—–ÎŦĻâ’0|ž1×éŠÉ¸‚câö1A*ŖéíŸË;|ÂŲˇŌ™áëXö[¤Úeô™˜Æí$āîÆxrĢõ6VîÚO-Vx‹Ę7Fĸ@wQëYz-õÍōäˇōÆL7rEŧ€UxŦĢšŽ= tĢÕûÎŗ!ˆRU€#G=iŊįŲ'˜Ø^cŠe9 ¯zĖ]*ĘôŊܖrÅ$˙ëF*[|Ęŗėoėîõí;ĘŊ%ĶØIļc‚ã`įīc>õw@™˙áŠãĖ’æuāą,X†lr~‚‡.kšÖ!€pƒåqŠŠ™mm}%ÜqēË7úÆŪÄ1úŠËĶoÖã@MQ5 gÔ#Ûų †p§åŲÛĶž)Ņ4Ņ6…47ĶÎ×í‰Õ›rc-¸‹‚;SåatnlĮ^‡ÛĨ›äRŋuz‘\֞×izú•Ëŧˇ­ĄÜdËãŒuųG5ŠoĒŪÍĢĩŖisE͋‚ÃŪ˙ZN6k—ˆ$ØlķŽ”€~SÉIbãĪ>™ †ÁéžÔŠ9įųt§ã gžŲÅN>Ų§cpyëJ6’süŠ@ÛПzjŒŠÎy…ƤÆGÃ÷°zP}r( 2x;žiBōAëڜÂhŖ’3œŠ_˜gŠ#ĩ)ÆāF2{Rc'#įÄ5”įœÔR|Ãĩ9õāįĨFxÎ4Ū;įۚG=ÍHËčqĪĐ:‘Ķڀ#*z÷čyϞeĀŪĨeôĀü)sŽ˜Ļ"\éLĀÜ ÔŽ2ŖÚšW8äcųP;s͌{Ō‘Ž>QíN*2:ķRl' Î;ĶŽŪsÍFņøU˛Ÿ\Ô)Ī9zĶB+0öđŦ]tf͸ƒ[Ž>\⟯°õČĘÛŗc?CíZCqKc uäqéüé 1‡-ŒäOŸ†_ÃųҰŦ ?Úų×MĖ…;„Œ{Œ˙:k>TÎsĪ5<ƒ÷¯Đõūu aWå`sü¨BdyoîĘŠ˜ßäŅVEĪKđ֗lt­+QŨ)ŸėQ¯ß;HÛÜwÆMZÔ!žëU°Dļc 2yÍ9aˇŖ¸ëžEKá…TđՂ.HHözđHū•¨@ Ž2:Šā”š“;"—)„<1ĨĨāT|ŗ˛°žŊøÔ۟iŅiÍYyžBą‰ l‘Đdô>+xāŖ•eMO3î;#›ŗŅmĩ N‹VąÅĖˆžoŧ00yĨ[¸Đtë‹,ŪÜxĶ'‚:×Į+‚GáM“)9;ŽČįî|/¤IQ›5Ųp˜$m ×ųÖ­ŦÚÛ%ŧ)ļ8Ô*¯ g§^”ĖO¨ŠmŊĘI-…?tņŠhä~´î1Ī4`f #8=*2OáS*&Î=č ƒĶ°Ē?0üsWŪ¨Ž2Į×Úĸ[š@EīÅŧúR÷Ā╆&‚™+{÷í@ä L’ũFÜ`}iàĒFlrôÅ<rF9¨×8ĪQR)$⁀ 1 šRqŸÖ”z~Tc€{j‘õ÷§ŽԚƒÎ1SmpE“Ā?#cæ#PĀ‘…lG tŦ?Ë%ŋ‡'’ š܀˛ã$3Û­4Žė&ėŽtų3ģU ­nÆÅå‘ĪīDbCž€ūbŠ\F;Í?MŽ˙™â‘ŒÍ“•*z:*ŽĄq-ŨĨüWRÆZJâ`¸Ú7FĻŠGR´:§Qģ“Ķĩ7œįÔW;ŠjZ–Ÿ¨­u­o\Ã0ˆÉ ŖĒÔú…Åžŗ{?zyšXˆ>H tⓃ1°8AËg4š÷Æ3X:gö´ĐAxo!’ -‹ˇĖ.pAP`r2išuöĄ(ŅŽ'ēWPƒÆ"Qĩ‚nŊž”r1ŅęέR‹QŠkŲė¤WŽhpWwI˙ũCÂąÜ=„ˇßËp­4ĒE)WaœŽ{tíLžŊēƒQ@ŗFÉöØ ōãPĘ€ÎâG žx=Ŗ—V…ÍĨ͍Nö-3N’î`ūTC,“Š’Îá.íbš\Ē˸Vë‚3UĩÄßáũDŅdíūÉŦKBæË@´1\¤ ēx•6€Î\(Ā ƒōûæ…­ŊN’Y´›]쐪'đ ôžŸ åģ0Š@Jī=qĶđĢģOm ‡!™Tœ{Šæôuēą°ŌŪņfĩ–QĀҁÅ‰ ŽrB×˜ît§%4å|¨Ęã'ŊsúDږĻŅ^­Ôh†áü؋ä—fÜpzæ›gy{ũŋmŪyąÜyáÕ@ōÔŠãaĀ<^hqaĖtxā‘ƒK߯ã\ÂęëĻÚHo[ÍŠĩ“å\:yĨpF:ā˜ëP›ËËׯ…ü’n|•Ž@ģ"0Ļ@(äbæ:;+Ņx'*ŽŠ­sŅČęGļr? ą° Ī$öǚd7ŅÜOö‹ˆeˇ!|Ĩ^9$€^•™qŠ]ËoŦŨÁt-˙ŗŨŌ8ļŠVØĄ‰|Œķ“ĐŽ(åmč; ŠČį¯<šURÉĮLšįâÔnn./Ú(Ž›ÜjsŲ#‘ĀëšŌĐ.gģŅ,ϏmŌI;9ÜHÉãĩ'ˇ+ŽĶ¯…ô ^3ņšIbc’Œ?Ļ0Aô4_jpiīn—fnfĮĩILžÕ“ĻęWrë‘K:ʗĖdƒËRŒØØŒĩgÄ +hš\í8ąų5žõ‚ú¸'­ <äūUÎÜęwpë–Éö¤(÷Ļ…2ų{ ļ2#‘šÕÖõĶ4šnS`}é—ûĒY‚î>Ã9ĨĘî—p¸§R€ęíĻ aķ‰ÚvėÎ:ŅqŠŲÃb—ŪD•s–„ŗđO¯@k*;[¨cĄ(‚ąôÍâĪĩÉÍÚʈ õrWŨ(åŪũs^=wK‘ŖŧSēQXįĸ‘ŒÆ¯<14Š&Ô2"­Ž@=qųV'ˆ-ŖÆ{tnåĢ;79!Āíš¯&§¨ØZji,ąÜÜAuČČaöā=7j7Z ú7>ŋ­(ʒHøŽzs¯GĨ_H¯Ī‰-Ë*ŗ8æ zb¤ˇÔ¯/´ËĢûYaxRX<ĀYö‚ĖĮļ Æ=.Qߥ­ŠjVÚVŸ%åہË-Œđ8õ ųÁmũqŽÕÉęķÜ^xcÄV“ČŌũ˜ I=„Š ܎<×]Û´Ļ ņ™‚hō7ęE7!\SÔōËLfܧ-ÁČ5aŖ\įg'ƒQ´g¸8úTŒb’Wˇļ *H܂xĪ­.Ū@?…&ŪpE ŽNOZPÁØŠaė(ÆŒR”éĮn¤ķLB%—ôĨ8.ãFĀÃõÉĨ+Ÿ›4lb2Ž!ųąëīQŧ(ĘQ‘Ys÷YAđĢv!āu¨Û°Bƒ@ÎsŒtŦk; äņMÍņ6˙ež‹hÎī”’§9­ļ G ~T(FqM;ŠRéöHÂQkn yÃyC#=qÅI ĩŊŧdApŽsĩ(ĪsS2gå cˆw¨´õČ÷âĨ™Œq‡1Ÿ™‚íĮ<œf´0ÂLžF:Ôf5TÆIĮ<ŸÆ‹U—äh\|ØÛõŠ”’HnGQHį#§>”†@ ߟ֞ÍĀëĪ~˜ Œrp5¸ĮN‡Ѐ҂xwëOÉČČúŠCÎ3N6=E ČĀįŠqš‡$ddGĨ#tā‘JBõīL9 éëR wĮĩ4ŽŧŽæ€@9ë×֗oÅ!úfžŒ§Ō€0x<@h(Or{b—jˇLR…1@ߊÆsėy¨•0NYŽîqš´FA$`gĩFWžŪüS¸6C  ōž ŌŖpЏP~QéŌ‘”c;zûP"ģ.:ŒÔ{{cŠ€##za<~Ŋ)ˆ¯ĖŲį)ĘÃqųT…xĪô¤Ā#Ąúâ˜41ŨO•FBļA#ōŠ­3•ãü) Š6đ3ôâ jT7͑•ôÍt‡•=ķīXÚō§ö{9ÍTĸ–Į-t~pO}´ō?pxî?™¤š•ī• IPĪoÎēLFŪI˛bpsúUhY¤į=ęKŒĢ*ŸŊŽ*–ŪčJ‚9īV´Dģļ[û y˙:*˙ߝš‚Į øs`ŅŖUT–eA+éZ-€rzįŌŗô,}‚uPĨõڀ;q%_ląÆ+ާÆÎ¨|(F9-ōž=Ē7=ÖÉ•)ëéSLl6IĮĐÖe"6$āá˛JGÉQĪŊ8‚8Ļ’Kí ôÎqÅ!ÁÆN3NÚwãŲeKxšI]R4™Û€­8Ãž9 ֐Œu§(ĮԃŒR ‘tąąž+ˆÍËJ‰åƒ$ėۇ=}z֍Κ?.1Š“ģN{ķK™÷ +™ļz›b“‹[`žjØvā sĮáK‰§Æļj–ė>ÉĖŊ|'ëĪãW×(¸ F2FiåJí# bŽf&Œû"ĮL–âKX =ÃžŊĪę<=ĻÜI3ÍhÎáß,@,;ãđ­mģG'ĩ‡ąĮJ.÷Ў6‘^YIk,gÉqĩ•XŒLƒŌŗæđž—:ž[’ CŠ‘žéėyä}zVę¨ ´žŪi6q•9>´&ОĨ{,mŌÚŪ1H8U&ŠXøwLĶŽ|ûkQ‚pKŗmĪR$ô­UI9É>ÔФî9ëĶŽÆ‘œšŸĸúŠYėD–2(į'ŠôÍ2?éQÜ$éd‚DČ­¸Ŧy8į§JÕ9Í*ũáúŅwÜ,Œ+Ÿ hˇw2M%Ļd™üĮe•ĮÍę0xü*×öšˇWdB×)å͸’`A8ė9ö­&\˛āāŧu¤äžOĶæ—på(éš=†’’-˛Å¸ÄIôäö¤¸Ņ4û™ä–Xw4D 1 &:nāū5ĸÄnÁū#ÅsžzŌģÜ3oü;ĻęwQÍuoēUM€Ģ˛‚Ŋp@<­ZĶ´ģ]&Õm-!1Āq¸ž¸ƒiÎsÚ¤rHëĶڋļ…ÔÃˇđŪ“m, ĻŨËÄÛØíĪ\sĶÛĨOŠi6š …Ž’Fō|afeÚŪŧĪŊhíԍōŽqEŨî= ; h÷m$˛A!g›Îoß>w g=ũkJōÎë9ín# Ģą”÷gačõȧõûĮœQĖØėŒ[ ØX\ŦŅũ ˛BbVk‡'ię:ū^• đöž‚Õ9qi“ ųīōg͟|}+W×$ûRīÅMõ #8č–&V‘ĸ“kÉį4AÛËgīéœāĶ—G´7W!e].ŲXLüŽØãŨ+D2Æ‘€:sÖ¤E;I$äôĸėVF,^Ķ`Аȧ0;ü™ëŪ…đΗgXey˙hÛö‡âAÎîžŧÖŋ–03HCĀQĖû…‘˜úš÷“É ŧM“Š•ļˇšĀ<jm3HˇŌĸ)nĶļ@–f€:“Ā̘<ô§îŋ….gŗ‘{ X^ęlL’´f) S2 Ž*/øG4ķ¤$ÜĸąH'pāŖ ôā VąÉ\gĄāâœ2<äĶSbå3tÍ*ÛHI"ļķv;"I “žé֒ķD˛Ô/~ŌâH.‘v‰ārCëøÖžs’xéLū-šü(æw¸Y?đØ›3nņ\8i¯'žÛŨ‡B͜œ~\S΅§J—Ąá‘…į3Hčy<OJÕÂ*ŠÛøRĒâ23ƒŠ9Ÿ@ą›Ļivú\"(w y3JÎ~œž”GĄØÅĸ#ÉcdÁ]Äģ¨÷ĢęW'Ą§ž~œqG0XËo éL—!Ōãũ!TL ÃüātĪ?OĘŦÃcmË\¤!n ÚB؁ĐzÕÖ?!ũqÍ4+ däúâŽfÅaČŲ6F)X|Ä™¤@Ã#üŠcķ23Đõč¸Xi Žp¸'’hfPŲÃ~Tũ¤Ã­§O<Đ",ĒH~R~‚¤.ƒÔRl=ˆĪ^ix­ĘFĨÜ ôĻí%HÜŋQJW P 2āņßŊ!sžHôϏƌë‘ÖšĀã9āt cüÁ°œ0ö§•Î:s‚iŒ7Ü~Ts´€HãЈF” ÜĮqPHVL\äįObį1Œ÷ĻļH\°ô¤‚3 '8ėh28'ÉĐNæ=š î-ĀČúô dęãã9üéšW$dzf›ģČ9Î).Ą0ŲŽhŌģz …$Iė'åb§*G5g†'ž}3M*¤cnh\ŸŸsíۜxô柍ĮæKšæ7lw ˛LXo #̓Ōģ­;H´Čcąq%˛‘ƒn“ž~š§ŽĻĒ…6Ā(1û§ˇŌŦÅ vҤpĸĮŒA€L§uaĨf?€¤~TÃNÎ@#Ŋ4ã, fPܝ„T/×#š›sQļ1ւˆîÕ(ؙ\cĄĢÎ8&¨.|÷įš‰Ā ø#ƒJ̆ëO#æÎx¤^OJ”6# ŖŒjF8ŠNœTDāķZ"X+ö0;ŖãŒŽ*4<įÚĨFĪÉ%QĮ=‡įRÆĀGn*ƒÆ9Š”{Đ rū4å8ĻŽ0;ô§ŒƒÚĮķNûĒ0sŽh\÷Æ)_€>´&ČFĄĪZpĪ ˓ß֔ž8Á,z@î/Ėen3šŽ1Ÿ­FH2Žvõ§Ē—ƒĮ^(%†į,xÍHÄā€?GäũzR9ųķƒũ(`8–2q´zͰBõÉ&˜6ŠäŌžƒpôįŠãšdįŽ”oā‘Đu¤$męy$Šiųƒ`P!Ų8ÉęyĨŨŒwÂŖß§Ĩ G™ĶŒuĨrķŒžzЃ9Ũ×?•.SŸÂ€ zŌí8Ss…įgŠ“¤éøĶO-Û”Ä Ü,x=)ÄGö46:œņčh`.RāŠĮtĨ$įž(Âü¤‚sJÄdįŸ~´ĮĻ)ĖFÜJh9ãĨ9Uw͐\sž=iǤ““ŸJz°Á¯S@“ ŽqčE; ģ2õËšl4››¨Ž!„ĀĨØÉđ@€29éÉÉ‡ŪŸâų$ŧDĶ"˛ž–9όÜÉ Ę#Č$ÜņÚĻÕ>ÕŽ!Ōmėį†ĘR÷¯–HU<’qJŌ)$Ž#lßZ,‘+ÜD6 h͆lúÆ­–e=Lq\͆”×ÕÛŪXL)CC#H<˛ŠrqÉįĄŽ—záŽŌp¤œ𖭰ˤžæëÄōÅĖ,í-ÔH›FV$ŽzđŖõ­Ė@pXcrƒČú×!a>¤ÚouŌO¨O$˛9ų ŽÁUÚępqÚ­xJÖXtÉ䏺kY§˜ČŲPĨŊ:€ķÔĶqeëŨBęMTivmâ/9ä¸ÉųI PA=9įŽ=jŽ‘}¯ęđĨƜRŪá  `qŋn2x~?úÕĄŦŪÃĻ[ŊÚZK5Ņ8Œ08Î8č8Ē>AáUÉv7ŧĢ,,„ČÄžãžŖšÃpëbí¯ö–Ņ.oRQãrĘų™ Ž;ōũMh[ßÚ\Ų­Ėw 䓀å°3œwŽ*ÂŪTđũŪ öš„š…ČōœI!œ€ÛWÉôĢz¤˛é°ę0Km§Nå…7/›ĀÕv៝4ÜPŽv[yÆF ÎsH›cĢ;NCũ+ž>-˛fōė­¯.¤hHá*x-€*į‡ėf´ŠîæâášģœĖņFxL€ĪsĮ'ÔÔ¸Ų]Œ×îsĐúQ€8Ī&Ŗv|ëøõ§æ3IÉæĨ”4ŋÜSēįúSˏį>”3 Äs’:Jā*įiqúԃ9ĀĮLõĻŽüqéFå'9==)Ļ„8r29¤=ąŒSWīíĮ$piF܁Ώ"„&<0\g֐ŧ õÅ Œ`ūĩ1Žä÷Ļ+#'œúqHØ^‡ōĨ8ũ:TI0‘lųsÆAëŌ€Ŗ$ü¤ 6ņķ>´Öų\.9ĮŌPÆyÅ#ŽPíÆ}3B€Ę4Ս|°ØŽ„Œš~Å)gÛ"€fx$gĩGĩųČž*]¸[‘Œ˜T;FĖr[4Š ŒņÉČ$u  n¸ FFE=€ČüŲoĩ…É+Ī˙*ˆŠÎ <€ŠsĘį'äPqŒqÁīL$ sĪĩ?āŠÉ<ã5ƒō0våŊhEPq&”œcĘ’>zžGjrN9īĪJ¯įl*Iķ¨[.Ã9QĶŌŦHŠėœwéQ7mœg‘@ÆųįąĪõRzĐc‚N)TGB@Ļ1돠ö§öĐŌĒã#ÔņH1‘Œdv4n9įŪ‡VR1üęFSƒÎ;đ*7nÎh2DdęM(<'֛üXāqĀ‚zA@ČāįŸįIüX _ÔJrƒĪą@¯Ū™"Œ÷ĨSˇ%ä3Hį#íšCŋkĀۚ^­‚¸Įzt‹ŧ¸Č'p8äw  ŒNiŒNFiōœãQŠa'Üzc#8Ú1Ī4ĶŽ„ ö§| pHúĶOŨīųôĻ!‡žF8¤úr=čfg<}i‡ąī×­#Ā‚åT¯W63įŠCĐ{Uŗ÷¸ãš¯v@ĩ”CŪŠn#†›îDsØįšk6åoĄū”Hwũ#ô53dHŊ~Sũ+ą+˜6Z:tʞ_æĮåP+ü¨G ūĩ$`ŗāžr1I š.ŅīE.eôhMV[ˆmüEâ8'ž$q¨ŧ›K€v˜â9ũj–ąŠE<66öˇ[ˏ,ŧlAÚ –ŽGLS5¨vøĢÆxŗ73 ˆSŪΙÕHG}˜IąģbšŸž_jŽPŽN3īYTKÚ6mMžDO Ioi¤Į}<ķÉ5ĐbۙœŒÜãļ3øV…ļškwĒËa ĘYQXK坌Ī^1Xļļ7ņÃm3é>p†K„h%d¤šYrHã#ŪŽ4ĨļĢ-Ŧan-“ĘvmIHŒtäsíYI&ŨËM›ũ\sé\ļžŸđ’ÜjWRÜ,v÷OooR˛l Õ¸#$“ŪēhüĶn‚`<ŨŖ~Ū™īlÖéZž“{|ÚOؚ Į2ųSąS‡Ģ z㊕ŗ)”ė|Msž°Ig5íä+0v•Cˆ›i9=đAÅtv—1ŪŲAu>TņŦ‹ž¸aŸëXÖž¸ąKU‚hĮo:Jō™$‚[ļV´ô{)tíÖĘiG‚1õ¯ļ(—/A+õ.•Æ4÷ĀüjAן΍ĒA<ņPQ*6ãĨLzœTLīšE"Î1T 3cÖ´vœÕ@3#}j$m8Ī@@ 1œf‘ų%AėeEHØ0î @{äU†Āg>õĪz¤Čc”gžÆœŊM4 cž”áŽį?ŌŦ–JÔž,Á& B1Žž†ĻJɀ8īNc§jEĮ9§.‚hė`Œš {ņL>†žJÉÆ}č#-‡ [ođ8ÁĮĻ€Ö¤^brEŒ€8ĀāS•Ô’TƒM2´āzSŅrėčyĸĀÁˆ'oLu␍ŋÄ)ÅOu÷¨öî'§ĻMqÛąZpČŋ4„Ą›1““Ōœ1ĪCŠV-ĪSõŖ9ü3M2*†geT^I<­F.`i#gˆŧŠž1¸e‡¨õíq\ąšJ†ëž”Œäcđ=)v´Í$r;ōqHb sëŪĀÉ8ÅVžō ybIĨDi_ˈ1Æöôl>AÆ!܌2ô9” a[ļxÍ/đ÷´ŨÄPū”Ä;ŽsJƒæĮĨ ęééORFr1JøpxŖh“üŠĀáy8Ē÷wpŲۙį•#@@%ēs§a\”°ŨR*ŊßQž6?'ž;[y&™Õ! 37@)XbŽ3ĶŊ&09 õĨ÷ ä0Čãō§ŗ§=0ONôÆĢ.pĮ“HîĪôĻÃ4SŅJ˛YXôИŒh°\įšku ÜķŌ›=ÔVąģÜOQâv úš|nލęÁ‘—p äĨÃgƒĪ|Qŗ` u§nŽhŨ€Fxô&ÜnĶ´ü¸īÅķ6:͐đJn@:qŌ€aT“ų“A\öā{ĐŊ8íÅ.y$u­C5Ŧ71”PÁļį¸9ķĨ âX Đ,j1ρŒüŲۜž´Ŧ )#‚)w( žqÍ)ęOИ €sØö¨ä!‡'§ÖŦ2ŒqÁâŖ*ã´ Œ ļyĨ§ë@ųŗØ÷Ĩ ŽŸĘ€g˙ZQČÎ)Š=xôŔĀkmÚ8į â˜I})[9<ũi„œãúĶ9éŌĒŪû;ハJ•™ųLUo$Q—5H“ŽûÁ9čHũ QŒíŨŽčsųUâ1ûõĒPŠÄ…†NÃü̞,Á’Û–hž¸ĖÕČ˙ÖņíU­Gî@=ĖÕ¨€~~T=Á- 6ˇŠĸŸz*F{ÂņĮ‰đI/=ģũ?ŅĐėĩco5GW7|EÖÖŪ4hŪw‘˜ũÆōØ)Įqōã…§ŦÜŲénˇąų6†XKm cúŠüëņŊFiIûˆéx§Ūcl„r‡ŽŒ:Š\ œ‘\ÄÚĻĄŧÚųņî“Sk`˙spÁįļ}éō˙kGĢiV“ę ¤'”‹‡ØĘ@$CƒŒV.ŠGBîŽ1ëC2ŒßÚšKq}äßž¨ŽÎŽ%ļÜIŨ¸v'åÛ́۴|E/–tØŨĘ[Ív#œîÚ6íb=`'zÁ}.k7¨Ĩ1HrNs\DˇÖĶEöšqiį^ZÆŌ6U“ĒäõÁČJŲđdŅŋ„ôåV R ­ŽpsŌ‡ +‚•Ũėc˙¯F{vĨ9Í!& ģ < ‡Šũ*6î(úU<…˜įjëzÕ6éã=ë9ĶÜVPXœRcėiũ9í@*Qlkc`¨ą€EXdāTdc>ĩh͌ÁŨŠA÷ēSöôĨ ÎN*Ņ,rEML~Š-Ž*D[úP…(ÅHj%ûT ˙ʋˆUŨČ<ũ)˗‹.Ķ“Ā9úR gÉæ¤íÔ~4„ÆãæQŽÔŖ ¸4˜;ÁciĀ˃oZqÚ-Ļßę–Īww$VŅĮ" &c‚Üžø#šŊ•Ŋˇ‹îĨArá-pžk°ÜYÁāŸAĶĨYģŅŽĸņÖ4éáI¤‹Ę¸Žu%dQĐärĢVÖ7(nŽįš9.įP™U!FpŖž2IĪŊjäˇō!.ä6Ū![ųŦ“ėW0Åz… ™öሠ€IgōĻC­ũĸę(ŌÖW‚y%‘yÆ ˆėšsMļŅo­­´xūŅnWO9sƒķĨq׎ YĶ´ëŨ6F‰/ĸ}<;2Fb;ÔNŨŲÆ})>^Š‹!iü/~ˆc¸gsųņR[ę‹jĢY­ŒpyĘō!Õ@ŨОG{ÕÍBÉõ-6îĐHąũĸŒ1 ‘ŒÕeŌf¸ˇ1ęW1LŪC[ƒ E Á<“ɤšåÔor­Ũ×ö–“{k5‹ –ÍåËetcĪCš­go ëZĘíFm5‡° €âkRßLÔSJšŌįTŽbŅyQČm°@Æ2~o˜ãéQÁĸMoqĻÎ×Ұŗˇ0cx8'w(§t•…nŖí5ļŊ–ĐĮc7Ųî m“ ō¨ ß.0q؞ĸĻÖu Ģd––É3O8Œî“o\œ~ A¤i7ZS´Ū[$EBšPzũHŠõ6mBqmp-î fI=ã€FČāįÖ§Ũæōļ(ęĶ$… [Čķ[´dˆ†öV,­ĪAžG̝O ÚŖŨY„ŗŗr‹"ɖfÂāmī’ŨjÃéWŠŠÉskĒĸ—iž&„0f ŠĪː:sL—ÃÍpu8gŊ&Ōøî„ÃDøQŲ˙d”Õē†Ĩ;R¸ŧššÚk…QÄŖvÖÎr2Ę9ūĻ,õ+k8`ķ."äļė$ÕŊ>ÚūÚ&[Û˙ļ6R! ęy95OSŅæģžƒQ˛ŋkK¸Ŗ1–($WBs‚¤Žô´¸t"ūÚ¸•Ŧ"K›íP4˲ ´€Cd{úV–‘{ũĢĻEwöv˜˛‘bú]‰ĩ{6éd”0M¸Ūňę{“CåĘZ†ŗqi=ävÖKp,āY§/&ÎxQƒ“…>•V˙T+gO{™"…/4,Ã';ay<¸ĒúŗE7ˆf-ŠÛÛ x WP†d“2 vûÕģk+ë˙˛ęņ^6w4";ˆÄ[•Ô´ín‡ŸÖŠ$…š-Öĩt&š }9¤’tš+$žY*Û¸čyqLšÖbžû4 f×hĩl¸€ŧh9$ūUĨLš•ÕäwĨžx^,íÁ89Ī?xúUoøFgŠ;iĢImwgŲüåˆ0’?FR}ēŌ\ŖÔ”ëmwglšky“Ā'd’`Ļ1¸ŽŖ9§Ûk>nŠŧ–ž\sųĢģäÆyʑĀ8$šzčķ6ąi¨AÛȀÂUâ|I$c tU|5qä7_ÚĨϊg3[‚Y[Ē’OĻ#ˇj=Ņ]‰āčãƒFš(€—sŽĐ8ņW¯5ŗę"Æ+všQœø …Ā(<’§JCŅ&Ō…ĀžņnIeÛMĨ‰'øŽzū”ˇÚ$Ķj‰ŠXęirɓ÷aÖDÎ@ ÷<Ōm91ėŠ—’ũ¯VĶ<ËgÛ%ŦĶy3 ÛTm ô#$~5?„žFđå–čDh"Q/¸°÷Šît›‰õ{˙ĩŽËhž"†>_v76AtŊjéwÚ5ĩŊŊK‹xžXŰĒäžNyëMĩË`ę-ŪŗsĨqciĻËpöņ¤ŦDĒ Ģgžü?á!Žhí>Ë ‘îb3lrWbŽp ÎxĮÖŗķ$Ū:ŋˇ´ģHXŲEģ+¸’ēr0FG¯Zŋ7‡äˇk'Ōī~Ë-´F"dĖYœÃ#œķœ÷Ą¨­Åv5u›Éu môį1\[™¤ķdņüĘ:Lū5 j†×MwĶė$gkö…â’PNí˙1žũģ ŋ6™tڝō^ xb1N­DŠHŲp•‚0ŧsÆ=:RØéڍ–§r+ėfš7 3’%qË mįœã‘NČ57ŠôČåuvœˆî>Í#ˆb>@Ã60:ÖŦŌ-ŧ3\JÍĩTą'ė9ŽrīGÔî4rÖ;hŒ——žt_ŊåųyÄâŠÅ+Ą]›G]°m:°îVwÛŦdģr6œŒĻ*;­FŨ:H­ne†i÷" y‹žvã#×ÔVNģcmep–Đ<ú}ĖØˆÎ14RIÜzž3Vu;MVkëTév÷#Ã5Ą˜|ĒÄÁˆÁn­BŲÆIüiŒŸn*2rOô)\÷ú{Ķ6ã9Č˜îÁč*i'#œ~÷\p­ž˙JiäcŒzæ˜gדJaaĀĪŌ‰=‰úæ ŪzztæšB˜ą9ĪåYúŽčíKTš¸íΝãTîÁ6Ė9īVˇĘ1ų'øō5Z<„l˙sĨOŒõū÷ô5å’z#ô5֌ !oŨGŽœųšš$ĀĒą¨HãĮ9˙:ŗ–äņqCOĮ÷OįE?hĸ ŽS×ĩ¨7üHÕ Ęņ˙ľԕSÃf>ā*„zŦVö1 nXYÉæBwãŸ|F2?××N>$Ũ āļl~¸šņ Ž{uõŦą÷Œē?1įđũ…ÄW1O’Įq7œûœđūŖĶˇåO]Â7ĩ‘!!­†Ø‰rJg9īß<֛ s‘MPrų=ũ+ ŗ[#>ÛFąĩŧšî hãžbwēŽNz՛›hn hgŠ9cn]AđŠū]øÎ)ã9ŊĒ]ĀŖö SpX|¸°bRƒ Aڟ¤6ˆ ‰#AĀT\ø~5+7ĘBą Ķ8éAR0'ĩ-F`fš@īŪžG4Ŋ€ë@°ÛLoŊĮJ‘ÎN1MaéEĘDŽõHŒĖE]qž{U&ȝžžĩœiŠŖ2õéNĪÎÃĮëLRD›ŗÅJFyŠ)Šë•ü)‡€*RN1Æ}*‘{yĮJ0rE(<iq’j„ ØäņS“‘ÅDpjeāôĒ*Ž:įÖ¤AĀuĻŠ§Ž‚“$péPj)cc%Ôŋr1šž•hzôŦ_ŲÜ_xnîŪŲKIōļÅęĀHüSŠģą-ģ×Äs›Az4[Ļą&uaģo÷ļuÅnYŨÃ{iÕģ !‘w+(ę Q:֛Š.Ėņˆ„_*)“ģßļ+Ōí$Ņ|7ŖO|ĻîöËcʍ÷p}˛G|Šĸnw.sÛˇÁ“Œqę1\zŪiÂĮVeÅēßŖŒā2sĀBsŸlÕS=¸ĐomĖĸ/ŗęą˛$r0 H§ŽœcqũhäcŧįcÛĨe Jäx é~\fØÚyá€ų˛.:ãˆ|›+¯YéG !†a.sԉ6úŨČŠ,.ôVņeŦú`cžÎE-Dmę@é×­ 6L.u‚ļÖ`7 f°/5Ģë{­v%ˇˆUžÄüų Nī“Tõ3hŪ$ŊƒV’âŽ-Ņ-dH÷9Ū í8lú`ô¨õ „VÖá26HU]ĘNXã=ÎüčQH:‹[¯3N´š‘X‘8ˆŒÕ‚ ØcŽkŽ[˜7iRŪ›ą>žą+GuI?ˆ0ÚH$`gÚļ5Xílü$hˇeŽ ¨Oš#O×#ĻjeF™¯ Š,{âu”gĢŠ“͉]UäEvûĒXdũ=k›đÄ jē´B#™Ōhö@É2qøāÕ{Gļ]cTąÕėg–æ{­ĐIäß6°.ßÃ֟&ás¨ķ%1îA!• xä•ĸWBã’7 ¨Ž^Õ!}fęĪS[ÅģûwŸȎÉĄ @0=Š4¤xæLmÎw+‘Ö8›ÄS°’Tx7ZĪä—EAŨČi íÖ¤žKm?Xĩ–{y ,C”€ČÁ)Ā<ãօ ŲÕ bDcˇF,1Y7ēÜ&Ōl“Ë6ˇI)—æĘŒŒôæšËŗËáí/ŗË#‹yc Ņ[hČ+Ž[ͧ~j]:Wk¯ īˇēSoo$rīūBP(ÉĮr 5 įV÷pÂ"’ûėđ<Įg ģœ.:ŸNÕoíVū`FšˆI'(ĨĀ-ôõŽ Ëļ]%—oĩ#H†ûc,üíĮLWDvãZŋĩŊŗŊX.„FŲ­ámĻ0Ŗ •\}(ägOuŠéöĖb¸ŋļ†Uę˛LĒGāM\Æņ’ĨqēįŲ^†7ŌŽdˇˆũŽâXmšC,¸ų8č:õĮJŪšÕŽ-tûĻĶdŲ;Fŗ)€špGÍÉíéPáĩ†ŸsFIŌËM"FŊ™œúԁЅ%—•Îwņ\î¤ŅÛxŽÖæũ?ĐžČŅÄĖ…‘%Ũ“ŸBWúĊĘ'};ØĀڍɊ)á``ÛCÃ;x>ĸšĐŽzåtŪĨHĮPxĒąęmķulq€H•N3øÖ/„Œ1ļ­kn Ãë˜ŖÚB„`˞ŲŨTŖŅÄ>1’ÃėĒtų\jJÁUpĨ ôõ!¨åWaŠ×⠋æFš Xdũz¯-ˤˇ>pˇŅF?™Ī|îāp9Írˇ¨įK×lå…˙ĩešsk…%Ÿ§”PöĻ %ũĒÉ{âLYåŌŖ,$‘Cįry_Ԛ€\ė-Ė¡`ãpeįņŠ<ČŲŨU•ˆá€9ĮÖ°´øâ> oė8Ö)Ũ„aSgī6ã$qÎGZŖkåLŪûF9âæëä*Q6Áøę[{ķK”.uk"6@ų†1ÁÎ+2 Bæ]vōÉM 6é,dpK1a†<˙wŌšĢ+tļđũÕÜŽdKö…ƒĩˇ›œQ´į階ētšĻŦÖpíˇšĶTņ*š@N1ô§Ékƒg[nŌ xÚ`Š#(,îP}ôŠqŊŸÎAŒW)o­ÜŪų‘Žžņʏ+‡NĄēúS –ÖÛDĶá‘eō~Ũ4)ƒå•Ëí$ŽŌÎ)8βif †%‘]šiÚ¸<Ž9íÅ;;X–ÂķžŊk‹‚DūÅđīšXIk¨ˆÛz•(ū9öÛúT¯Iy♭bc~Ę븴@6Ūß{?>@š×¤ˆw2ē:ķŌ•ĻˆŽC.ßŧI#ë\]ĸh×z%ũÍŗ]Íū€a’ˆ…CŲH 2Ûģōiš~™§É¨xyMĖm§:ŨˆgÂā6G'!ąŸđĻŠŠįlķG"VuTāī$íÍ?ĖGÕÁR20A¸+o2ÛAĐåž+IJ´ē™gbbŅdˇ–J‘Čúqšŋsi§ŧÚ Fŗ=ŧ—rąĢÁ•ŗ• `#ļ9¤á¨\ę%ē‚Ū%’i4fĨV'Voˆĩ;+@ēŋŗHžH‚$Œ<zæîã˛M1ÔÛ --5Ĩ;[ÂDH'ûŧ‘Zū*ōcđMĖPGąd‰Ō2P@ ÔqBšô: ōĶ~ÍÄ ÆOĩ8ŗœwŽ>öK)õÛČĩ9ŽR ģhÖŅŌ-ĀŽā§i*ŲúvĸčGoâčJ!ģ3OeXKÕáÕģĻ:öÎhä ›°,s×ĶÖŖĘļIĀ­`øēÚ8ŦáÖD*ķéĶ$ÄmÉxķ†_ČįđŦģëtŌ´ŨOŠŅ§2ßŧ1‚Č$n9PĮŽÂ’õėu—3\Į,~EŋšŒę†j÷nzãŌŦ‘–Jä¯RÂÚĪEkkˇ–)5U‘ÎŅ‚I ۞•[P0›_\ĩäž}­â›vûC ‡jœuÜ1ėiōįf\ī ĮcŪ—ûŋ_Zã¯Ļˇ¸ņ5ũŽĄö@aAdåF ‘ķ2īnĪéRĪqöo<—),Šysx&HdčTŽI÷Ŗ\ĮXä‚yœšRp2ãŪšÍ^æ&ņ zÔļē|ļĖQ„Ļ%yw`‚ÃAžõ—erļöŪžâöO"Iî"yeœíuųöî$āô4(ļ‚į[stmR7K.æ DC$dã'' īRJ‰qnĐžB‘ƒĩŠœ}F pí{ģÃķIĄ0ōĩ‘Ÿ´|ŗ(]šÎJã5ĐxÆi-´4’+‰aeš„oŽM¤‚āî0M;ú’ÚŦZ XiÖļŦļR—PûËßīĪcĪâ=ëTĢ .3–Éâš;­ÉĒOŖÉŦÉivŠöōĪ!ÜĖËîČ GœŌęMwsyygm}p×Ņų&ŨŖŸdj„ —“ķ\cųn:ļ$tĪĩ1š\`ä{uŽ[P˛ßx…bÔîĸKXæcaōļÆ<’ #Ö‹‹ÛũKXŽÆ+Äĩ §$ņƒ)Mō6rÜqéG# C/*ļ@ô¤hÆÕĀbHäbšû˜õ9ĩ†ąūג ējÍēQ™O đO5šEÆĢŦxzY5)­äŸO31ˆŽŨÃa8wĪ4(_¨sx8šĀÛŌ¤Á#<ũ)6¨Ãķ“G$ũj #898úÔdüØį۟!äÁ8Æ:Ô-Á*ÁįĨ„fūöqۚD*_o ŽŲĨlg<~"˜¤y›€Įa@#š$ôÍ4ņČįžiäž:{œPyč:ô cƒ€S°08Vd9Î@žôx?ž)ė0ÄåŗŽ˜Ļ Ÿ\‘LBÁĀüEBI{œ“ĮųÔNŊųf˜: ÅV|/ œÕ™>`:įëP:AôÍR$„ã×Z†ā~áΎj™—čGÖĄ˜%Á§LÕÅČûYäo栌€Ĩ1ÎĶũjËÆ7 ßŪ˙Ŧƒīļpqú×Z0e˜ÜĄãUõĢQd1?JĒ€,PúĖÕČņ’Cֆ4Yų?ž´T^Zz~´TXgĩx“#â2d|­¤Žl‰›üE5ČÜ:–ĪĨOâpËãûxWŌĨû‰cĪū„*6Pp}=ë,Oņ Ąđœ uīÆ)ā&’Yá…âŽIZf؀ŸŧpN? jB v5ÎjBF0qšFÉâĒG{)ÕŽ,Ž"ō‚(’ȕzĄˇ¸Ģ䊁I!'Š•y'ÕFIå]NÔŊģÆėķįî0#|ŸĘ­P… ÷¤āœ=ŠŨqH@ĮJ1ŋŸĪÖ¤>é‡=i1ĸj›ߟĨ^u8âŠ7úĶĶ ‰ĶŽüT€ķŒœS …8ĀĮĨ Æ{ķR['ÆxĪ&™´įæ§ãĪ4ÁÍR!‘ã<Ō€9ĨŪŽŽ*„ œāôôŠTŽ:ĶT}1O Ī{Ķ%A†ĮnÕ ëĮJ9Éč~•)¯NzS!ĀsPÜÜÃenķO*Å s€2j~Ũ5‡ã(c“ÂZŽä,[Į¨#EWvŅßh:nŠ&ã’B\BČä0jƚË^Ķcf˙„–ßėŠšöÜģ3WX°[Ú[Û=ÄąŲ$ėcÁQōŠäāúSŧDE߂¯ä’ŒŊŠqƒ §Áô ֊é¤ÉŅ“ŲZęe–KŊR)† on0í’I5ŽToûÞŧV<Ōȉgh‘ųąÚĮ+4¤ã,>UãčyĒĐøŠ{Ų4ņif›îá‘ķ,¤ŲVS€sÉŠiąĢ#ŖÃēqčqMØQÛdp‡ŋqucc˛Ū(įģ’X˜ČÄĮGœôÁ<ŠĀãôĢZĄqŠXŧ×Åŧ`FXįi*NOPHⓋZ…î\šŧ‚Ę#=Ôé kŊÎ{U¯ŧG8ëŽ rž#ž}SÃúŒ–Ģĩ†S–cŊŠ8Ü@éÔwëíWîu{ŋļŪÛØŲų­iä'Ėv xãķ×ڎ]sFęūÖÆKu¸¸HžâAA.Ū‚Ž`„ŨĶĄŽwÅ=Fk N8'9=Öŗ{oĒÁÁÃ%āˇsŧ‚š c9ŽÔųtĐ.m9ÛÉ$ā õ¨žūoã´$‰dBāãåėObp#XúĩÖ¤ž#Ķ­lĨˇHåŽIdŒļâģz}ø÷ëI÷¤ņŨ[Ų†‰n™<Æ`ģv‡Mß{'œü¸īøÔōŒčX™2Uąž”s´īl‘\Ĩž¯Ŧ.o<ím4סLSiSšōNXÂđ8­Ũ:[įYÅô ¤˜‰˛>tĀä€H¯zZĶĢé˙Úz]Ɵį´)2lfTÉÚzĘĨŗˇ’ŪĘšo1‘BīØv=ž”ûɞ Iæk2D\n< ÖĻģŠ4z<÷vÖĸĪQÚ ÄÍž'eÜ3ž8=:SIĩamŠģq7ŲíĻšą)fĀ”č%Žxãž ˆHîC\Įü$WâËRŧ¸‚Õāļ¸kUE-š¤ķ‚sÆ0ßĨMq}¨čēdîö0Įm‘¤R`‘ˇßfEbp§ĻåG#ΑČO^ TēÔmŦ^%šœÄgq`ƒķ1č7O¸kŊ:9f’Ú]˸< šg¨ü+šŧšīW‹CÕ?Ņ–Îkø]" |Ā !rŲÁ8ę1Å(ÆīQˇĄŲ.q‚Äq×֐“ųO*(K)=›ĻGž `ÅŠęˇ—ŗ5ŦfÚŋŗb2Bŗģ õĀÅ-†ŗwqâ;›厄DĪ‹gF4cîČ­œ0=øâŽV:šį8ã 4Ād¯8Ís÷šÅíĻŗwg3Z$ÍŽ-ŸĘf$ƒ‚§æäAę*;WXŠâßMH šøYũĻáÖ,ŽI!PÃÎ{tŖ‘…ΗÁč{Đ\ī#Ëv9Ŧ(5JMVÖÎhĄˇyė åHŪb2‚8<›˙¯T\՟B°Ö‰„@Ī‹Øãˆŗ*n#rsôČŖ‘…ÎŦŦ͞A4Ś&ŸÉķcķ€ÎĖķ§ZŖĸKq.•ÕŨÄS˙xĻĀzÉÉĮZäŦė:Šø†kc>“s$“Į2.é-‹€2øäŽn™ĻŖv&Ī@ÎGŪķœU;­VĘĘx!šēŽ'”…Dcˍ4Vēšˇ7wĮ$Öꉷäí'“ÉûV!ēžÛTņeŪ"’[XáhÕųV2Ø?¯ãIGWq~âĮî)Yļ#1ā(9'ĩbÁpúĖVa!ōĨ˛ûB‘œĢd yžÔī ę7úž–.¯Õa”|‚"ŲČ,9ú QËÔ.\Ķĩ[]PI%•ÂΈŠS‘¸‘úÕ°įx\î ī\V™z4ģ=E­âYg—Z–Ū%ė ú ÅtšL÷Ķ {h°•—°Ž8ÉĮ9iĘ6Ф§zAœíĪZį-ڕõ°Žá# đ+ƒ‡ÛŦEŦĩŒÍeĩėŪâ6XÛåe ?7#žŧQĘĮs pq÷‡Z‰."™ļÅ,nÁŠ|Œ#¨ã¸Ŧ[]bæáô&ōāTÔĄg‘BČÁ7psČč:Tžģ’ūŌéæ‚Ú)bŊ– Œ¨%N õÉõŖ•Ĩq^æĶ.rpô `xär s6šæĨ~âæÚČ=—Úš ų„jH2nĪPGŨÅV“ÄÚŦV÷ŊĄŠŪ˙ėmûōä€ãÜ…W$Ž+måŨŊĨŋ›s4PÆ0 9~´ČÚŲõĮkzŒÚ—†õûëXã¸ŗØ3›”†Ã)ɎͯM§ĩÔWö CÚ!0˸H7ÚI ’?:9\Ũ珆ۨĪ3ĮiÕä üMDŗ[IwĩZ'œ&áČ.ų⚯Myuá^ ģ=Ē-<Á Rw'n9>ôøļÅ▒8ÔšŌļîÆė1ū@PĸípšŌ“æ P =ĩei:pĶ4,5O˛J#r2ÜŠ%‰xprk6ËYģXt8ôí.*ōŨĨyÛvŽ#ÜzšãHRm&ܘD’-ėGÉp8üčIŪŨÁĩšŦtë2#XÛį{~épĮÔņךž{K{´Q<HŠrÔ0čk üKöež[ũ6[k›_/‰‰D„Á¤íR§ˆĖV÷Oqg"ŧ-/,Ž_Äįž8ĨË$;ŖZk+{ƒšÖ G÷eãgĶŌšŊGAēžŧÔ}2Âå§ų`š‘°bL‚1œƒ“‘Ö¯ˆlŽ..,eEØĩ™ÕļTqķ šÁmqŠ%Õŧ°­Œi+0!ƒ†$.îqԚRBvmĄØÃ—-ŊŧŌ4+Ō<|̀>÷¯J’įBŌîbļ[>ÖDļ_ŨųG öö¨˙ˇ>Í’_XŨÛ(U)ŧ+y„ĄFŌ~l0}iˇ [eģŲ\¤ÖĐųīP“9aķ`ã#9ĸŌaĄsû2ĖÍö—ˇF•âō˃ŗûŧvĒw˜ëgēĘ?ôV˙G]Ŧ|ŧŸ¯NjEÖb7ąÛyå­MÔg‚F29Ī#ĩR´ņ…¤÷VHöW°Å{"icÂ9ôõĸŌ Ŗp/΁ž3˙Ö¨öåXŒŽ0jۀŲlT Ą={TŒ…†}sôĒĪNO>ĩiąˇ$úT䏟ĄĪN(cEs í$đ3i uÉøa‘ÍVúãåŒ áh$^§Ž=sAŽĻ„\Į×Ōˇ8=Į¨ĄŨģúƒĀ§mÚ p=éŨøōĻy;Đ"]ÍĶĩ#ŋ^ԈĀp:})“Ŗ˙¯@ˆÕD`á;ŒwĄÆãôíš\ŸÂ‘TęGá@ČČV<Œ{Ķāģķ̏=ĀĒį9īŒ{S3ž¸ŗũęc•cōīƒN<ņŒâŖÚCg˙­@ƒ nŧĶN1Îvõ§˛ås“­2(öFŗ6ŅÓųĶÖéÔ~Upyú •€'99÷5uëšb"e?Ķ•¨Y Īļ*Ës÷€ĪnI¨_g8Ļ+0$ "Š\“äČ0qŽ3Ö¯ēāqŒuĒWI˜#ąÅZdœ“/;÷ŋŠĒĒ™]Ā˙ Ī͚š/näōvū´–zė-įöƒK$ņHÛĮnKG’Ø#yHŸ­iĻ…YØÛ% dĘņí d¨ĀĪ椃Iĩ˛¸’xw—‘BÎ[ 3€3ØdÖ ÄÚĖÁēÕ._Wŗhæ‘"yâS\mGF$Há˛29č* vę{Ŋ&kš,īmN%ÃI´Ooœ|§‘Œõ­ËŸiw—Msqj$•ö–$žvô?ZŊ5ŦRZŧŠŅ:•e#‚QK™+4g-…´r­Û[=ͅĶ3ŧŒBnÚTāžŲĮá[>¸Š]&UŽ#—rņ˛‰7Ļጔ?ŨÍo}Ž”´‹ĩI@Héôĸ;xmáCFƒĸĸ€áIĘęÃQŗ$Á, Į°Í)¨ÆYy#œ^jB•&89§°ëŽôÂŧû}h(…ųM†gĪ=*팿Š:âOÚÎF”÷#bsžM*Ÿ›? øÍ: 5(Ņ’ŽëԚsČ4âsÁíԐŒf¨ĖŒuUē“+‡oåNōl”‘J-XJËĸéqä­ŧ’”‡UÎĶQ“ĪéKŦö/mtņ%”/&Āwå‰>šÔÃ_ŌˇÛÂoíüÉÁhĮ˜9Áķį§Ö§û}›ŪU¸‰ĻÎĶņ@Î>¸íCręG'ĒéQiÂĘÎ}Jâ(žęKƒpŅ@Ųθ#’ÄŒÖ÷‡§ģ˜]ŦŌ´öŠ([Yš:íāĀ<ŽkZYáˇ]ķÉiģģ€2~Ŋéļ÷öwžŪî Ŗ‰ JĪŽ:t4ܛAk3 ›PŠ-Næ[Ö.Đ")Pä‚H$gŸJ´ÚëáwĨyīĮ3Æ ąĐ°*@<õ̰j62ÛÉqė[ÆO˜ë(*ŸSÚĒËâ-&'€>ŖnWdV nœžßũz/!Yęz4z ĩV쏄A(™LAyučNAĒSxb å–S|’=ČšYF×g§åÚ´aŧ_>éĨģļ0ÂĀœ†ÜüĮ?n*{KûKÖsĖr•Á!O v${Ōģ[ČĄ¨hK¨ęvW‹wqo%¨ ˜ęqsØâ‹_YÚjŨÛ\^"HæSl%>QcÔãŪĩˆ*ĀŽŪéáūQĀ JZX,s˙đŠX˙fM§Éuxđ<žtY“’~B“ëWJŽ&[Wiu"œ‹Éwoö'đ­3žIäã>´.I€â‡&ÂÆYŽá?ŗJå„0fPO\đ§8Âŗŧ§Gq i—3\ÜÍ5ē|ąĖ~X_8Į9ŽŅĄEš‚=EWd!v¯nų§ĖŌWf4>´uõ”ķ\Oė†IC°ČrrYp9Áü)"đų‚ÅĄ‹UÔ`á–Y%ÜFpF ōxĮō­Ô8^yĮNiŸ9fÚŽyĨÎĮbŽ‘ĸZčÚ|vvۚ8Áųœ‚[''?‰Ŧxü(bTžKxîöņ# °sŸrz×L™ ČÚGÎiãæëLPĻÖĀâŒqáøSUmB ģČD­æKIˆä~>b1׎q֖ßÃöëĢ& ķÜĘņ‡¤Ŧ ĮŧåąÆ2x­Q€ŊI_ZD]¨ĮN;RæcąÎęékŠø—Lą žâÖCu)ÁP ž‡-ˇjšĒxz Vö åģš˛ŧ…|ą-ģ€Y Î ‚+M-Ņ%–`‹æ>2@äâĨHÉ=ŊŠķ5kŒ}GÃËwqg:ß^Á5˛üȤ2‘ÎqÖŖĩđŧVļV–ËŠ^ųv͐ŋPĮ rĨnüė 1ëŠnōãääObŖ×sģXV3t Íí ¸žhËūøƒˇ=píīYv[iŒQęwCJŪÍöPW¯ŨŨ×oĩté‘bÆ}i¨Ž‹ąa’@ôsąō™:ƒũˆ%EŋškrH‚Ũ× “œSîiéáû_´ęsŊÅËhFc™NÜcãŒ+Y˛7´wéHÁĀáFIĪ'ŒRæ{ŠŨ [O ­­Ô+ĒßI$0˜?xW•=ŨíÖ´ô}* +Oû ÜâØ O˛5ąÔŽvÉx/ŠĄ,ãŸîôČ•uī/LAHÛĖ ē:ņ֟;AcįÂépē°kųÉԂyŋ"ü›pŪ=)Ãĸk)íĩ;Ų/Ĩ¸‡ÉķJÚŊxžprsœ čX0PĘ{ķĮ8¤ft—ŋ<Š|Ė,Žyôš´[6ëWžágQ‘á\…ôã'ÔŌρq§%ãja™í>Ë´Û€2AÎz俎žf9OsŌ’PĮ…ĮĻ““ Ô~šĩMZę{_NGˆšˇ’6ÆF3ÁāsWüI§\kZ[Z\f$ĸBģļė9}@­B›ˆ-‘´gƒŠRŽ0AëG;ŊÕZĮ3?‡o5 –Ô/Įö”žYI jÃåœĻSÉ$ũj[‹MvãD’ŪMFŧ.˜xã1 Āāį‘éŠŪÚŲÎáĮj‡˜W%ē¨ëG;‘ËŸ ę-¤ęļ‹shs2ĪØY@pTœķĶåS%đūŗ&ŖũĄqfĢo—€6c’>WöĪ_ZëX1Wåw™¤`r=1۞iûFˆÁ:vąĒi ĄufˇQɰU€ÜŒ[>¸č:T˛éwš„÷÷M3KdÖp¤n]@l’Đ;ãŠÚ!p¸#§aÖ¤TʎšsK™…‘ĖYiÚÚ]Au~Ö ą{f;įą‘ŒüĩCÃĐ]jžŅîhcŗ´u™ JÍ#”ÎėĶ9ޞö玖 ´R­×‘PéÚmļŸnļÖđˆáÜ[j“€OÖĢÛĖ\ĻŦr†Aķ¤gĻ E!,^iJė”(Ë{ŽÔޤgƒéY˛†m$ äãéL’6Āo˜‘ĮZ˜gō힔ŽßģÚ˙ ėŠ"’¸>ŖĨ0g’¸?ė“S˛‚8ÁĮlu¨ūņ%QLb}z{Ķ™x ŸÖ•TŠ qN`p:sLD`‘ŒtéŒĶ$čxĪ?•:@Cdđ=ģP~t úu#ĨGƒĪ8üiP–ÎT¯=ĪZw@>oŌ—iŨׯĩ 2yr1IŒbG'Ō€¤uõĒ“Čą•Ü2XíĢ7'ķŪ o› ~ĸ˜•įæhÔŗ!qģĶč*¤ՍĖŅËŖ€Û4žQ 2ŲöéŠĮE:îĄ$V“˙¤iŠąŧ‘‡Æ2z0¨n-.õH­”Y\ۙtŠm‹J msˇũvŸŌšųQĩŲŌŲjv牐@Īē0¤ĢĄR ƒƒØŠ§ŠëđiŽQíî. jS ‚"Rp dûž”ĪųâŪC>‹œûTŒ¤Č@ëōŽŸãY%ĩŊąƒWŋ€Ûĩ­ÅĒŦĢ&CŠ^>\prz•ÍaŨÚæ¨×”Ũ,BÎQū˜mŗ¨ÚÁwĮPE/‡o"ŧŌáļ6Č&’?,š|äŸsÍeÜé:´ēŋÚ-Ĩĩ[_ĩĮxV@ÛķåėaĮĀÍjøwIšŌôé-îeķ;ĘĻ0F7ØįܚMFÚ ^æ¨ “ĪĻ)ŨŊēQœcƒBäÔ0šaúTŒxÎzuĻŸZLdN S—ũ`ĸ¯0ëT¤œz¨‘Ĩ=ÆÆzäQųŋZq=:ņMĪj‚Ų9 ŠfĶĪĨHp;R7#hˁČniG“Na’æhæ=1T€vO)āwÅ0š˜sõĻHäČÅ9^š4ĐFyëRã+ôæ€$ŠŦĪũ økQ6ÁŒÆŨļ*žsŽØ­>{Žõ& ôį¨Ļžˇ!Ŗ‡‚ō-SÂ/—§Ëü6-c B‡ ŽIÁū´ŗGcĒøgRšÂŌņî ”Xیd…ŒzWlQŗzÔĒ Ž•N§a(črqymĒčאéS g‚Hú6<Ļ,„‡Ęy¨t "Xlõ "õîíŽAr\˜I,Heąœ˜Ī5ĐI­é‘ ×ņŗÛ+<ąFC:…ëōŽjåÜZ…•ŊÜŧšH™8>Ô9;l #ÆÄ'†ŲĖ{Â\ĀÅvįv$^*Ŋ͏6§¨ÃĻOäI§ų-jË{‡ÎG‘Æ{æ¯_=‡‰Vm$\Ũ)dfDĀp­Á Ā‚7Ū•ģdœÜp7{ņG5’@ÕŲĮÄnĻ:âËĻ]yfž[6.Bۂsœžū™ ÚÉomáûĄŖÍ!‡+sPáŒ{rG~{×h3žs­Jū=hs …æy:x‚;kI7M,2Få ¸ī´Æ¯Å3ŧŨę֚ÚßyjĄ.į—žtAîI$‚]Ę3RHQ–ÂĨĻØībá$€F6÷æ”üę1ÅVĶ5}WOŠōŲ[É|…ŪģOŽŸ…]ãŠŋQCZ€žcËĶ4Å;Œįš¨u‹AĒ 8yĪ6@b‘3*20ÕĢģˆí-dē™cw6Ô,qôŅf+’6OÁĄ˛ch=ō)U‹…e9VuėįœŌ Ŗy„–āvŠ ¤JƒÁŸ­4/$ôĪjãJ<}(ŗÛĻ*9Žb‚æ$^rU ĄaĀĪ$ ƧĶ\Ņ`š!ģd:šrĮšÃgÜ{ŌđÜ͆ŌĀqô .4Žäøõ¤¯P}éĖpp§8(ۅVĀö ė#ÛŒį­ šm ÔåÂsôæŖde—*O8ëŌ‹ vĖ19œ ŒŠģūtõÎF3¨ W#%G=Š% YIžEH“Œ‘ƒũî´0NSLW+9•vŒƒč:TÅIų€ūUKWÔbŅôĢ‹û„wŽÜÂ1šˆĪjąĮkĀBŅ[iŒķũh×pš!\'Žš¤w \ņK•<’0}ŠYUY[$ŽE ā+ķ`x恐ØmĮqÖŗĩ-Wû>Ũ\Æ%Ë|Ã8ÚŊYŋũ*úˇ?{Ŋh°†nAĪjp\w?•PļKŨšëHā3ncܚCŒ?P)INdzS‡8뎴¤‚F'9ëÍ'Îc$)VųKg4ŖåāķŒôĻ´ąĮ;ēĒŽKôõŽaüo`ÁŧĢ;éŋa˙Yy<¨üųU(ˇ°Žu[āŽŖŪ˜Ę@$ĪjfđˌˁŒt9§)$f¤b0#îí>Ų¤?2āã"ĒĪgi*E5Üi,…G` Īĩ[‰Ã3rAįš` N6Œc¨ĨØ8Č­1ŨČ Ļ23ĐŅæd¯ÍĐtÍ9ÎxôÅ4āŒķĮĩFĪ‚sЌĶZMęW ėsŠC… OŒPpŋĻ̏ėAĒ——Ņiņ‰nųeÖ%Ú7dąĀZkČ gųî{S•A*xķUˇėV%°psšymĨ€aŒq@ÁĪŠB1īQīũŲÚG¯JŒ?͟˜uë@HiS–éÖĸ“ü]¸3JķE;Š’ĀuĸábD ļIæžÎôíĮJEbΌ}:SʍŲŗBÖ\7Ķ ’ĘB‘õéRžņĶüÔYų°9õÍFÄ×ņ¤Tę2´ ŠEãĐúT8bĨJv–jąŒd}3M Œ|gQŸŽEJņž˙^ĄaŽŖĀU46æäįô‡Øœúį­#m¨ÂG$ƒĮļi€Œũ9āûÔ¤āœŽNiÎØ0=qU§``q“Ā=Š 9+ƒ´(aڒÜ~éry˙ŠĄōUr “Nˇ?w>ŋÔ×WCØ"âŪ<uŋXUî{ƒQ(˙GCÛ üÅJ  ŋáIˇ`˛¸™oîŸĘŠ~åõĸØ÷‰1ŗ§†|˛‚Oí”ÚĖ3˙,&$~•^G=j÷ÄVĶC` W‡$v\ZĨ’r;RÅüHš ('Ž´Öcå¤f#ŊJcq“Jä:Æ3üĒĻŖak¨ŲŊ­Ü~d-Ë.8ät̜ŽNNyæŖmÛNAúŌØc"ˇŽŪŪ(ĸDPǏčžô?& ?9NTž  ^`7iŨœū*¯ĘIÉĻ„ËŒN`PIĮŊ0܄ŒqÛ=ÍFFHFXN´×éRĐČž•Na™Gl ēÎEU—™ĪđÖrØÖ‘žsŠEËtænƒŒŒô ä␍ŧdķIÆ´I˙ ŋˆ”đdĶõöÅlølČū Ķŧ–E—ėhˆČoŽõ#xrÉõ›ų᧸CŸ9‡Č„ĐUÛ=.ÖÃMžr@Ē5‰PxĀ$ä~¤¤šûˆIÜæŧ9s„ôĸnb)7Č]cÃD 60š;Îā;tíV­ĩ›û‹-äÉũ˛S ëŗƒ…~G§+WâđÆ ĩĩŧ?hŽ;Y ą¸lŠ ‚3œã“Å8xSM6Kd‚xãYŧô+;FõSœŽü{ĶŧXYŖōķS“N¸A¨ä‡UŽÕeX€,¤§QĮŠĪ­nęwSéZ:3˝pĪ>s&30]Äz įŸđ‰i‘[ŨZ˛Îņ\¸‘÷Ü1!Æ0Þį­_“N´ŸN6D%ļ(Į!Î@é’~i7ÔįŽn5[õhĸfhlÔ Đ *ŲlƒČųZąíĶøƒNˇ7 ö÷š{ÎŅė 6 ‚{žôŨ?Iû'‰oPXH4Ųm#žāH,Hå‹c [ˇđžk=ŧņ[ʲ[ņ}ĻCÁĮ^GŽ”ß* J—3[ęÖZš<•[f°F怚$÷¨öŪ'‰ôŋ ŗip˛ų|Ž~N•ąŠh–ŖĀ÷Q$1KŒŽšëķ)đ¤“C°yíį)(’Ų DË;Ēzô?Ni)$9mūęCĶŦäXäē’|Éōä*; ŒūŒ×[¤Žĸļ!uV‰§Ø1žŠŸ—tPx,ëėjëøwM’úÎí­w\Y Žf$¨;ķ|ÕØ\ę^ŧą´€Ë4ā(”Č<’GĨ-kcâëTđũîĄÛæŋ´énãÆ ‰ÔØ”įíH#ÔŖđŨå˙öÁ’Ķ^Ee“{1ęvŖļ+§Ķ4Û;K|Ãfļī*1X†cėNN@įž)°hU’ĪžŸK:•*đęz§ĩ7$1 kûFđė ŠË*Üī>aånQĀėGãT ēÔŦô&¸:ģK%Ö m•ä ĸŪ°'8îWQĨÛ­¨ˇ´D¤˜>f; ëۘžŌU/Ŗ6HÉxû§FbUŽsĐôëž(æAfGĨC}h÷oģYŖ.ģs"ãÍĩsĪĩ]ŗž´Õ­Ėö7qÍ%|ČÎāŦ?­%†•eĨÛyvëg’I?Riļ6+b.]Nųg”Í&Ô ¸ā ĶP*OQœŽŸqŦ6‰c­ļ­4ō}¯É’Ũ•BH†R„` îį?…_’ęņÁ§ģ]YŽžŅ,ŽÖ$$‚yÁÅ\oiO#ČöjÎĶyĮ$ũūėxĪZšI\KcžŸUÕ-?ˇošøI Œí @Ņ.ҏ!RHįåŨøÕŨQī´]2âôjtW΍q3Ū ōāž{Vŧz6ž‹vÉnHģ'í İ\‚iļžĶ--%ļŠĖ}žeØé#Üžœ“ÅO2 2-*ĶQˇēœŨŨ í™Ë ÛŨO9įjđxŦŊBōōâv[mF[Oėī’8R4%ˆ@û˜°'œā`Ž•ģa¤ØéQencVĀ$šcĮA’OôŦŋhâûLŊšÆÁ%ž–`ÛYšĮ<€p=iĻš­{‹ÖÔo­ūÛ2ĄĶŖ¸ŒĒŽQōqߎzÔVúũÔZ-¯Ú6É=¸’MÁ …)õ$€+Pi6š[Ū^ب¸Hüŧ;Á{ŠÚpZWđŪ-”g†Ũŗ]˛ŸCœÎ•Đ+”ĩČîĶĀwņę/×BŅÖWN›iy=úiöSŦ+‚L °RĖāŸ”ä =ën]2Ō}<éķ[Ąļ%F=8íUnt.é`iŦ͸ÛŲUôČ9#ØŌMuŒ›ÛŨFËWŗû]é†ŲÄ1UĖOĖŽĖv#ĨYņĄq ¨ŽæKp×0!d#Ą×ķü+NM&Âk”š{T2!VVŒōœtČíéSŪÚŲßAöKäIb”āÆãīÍ5%tÄ҃r÷wWZDI,Š7Üã2ÎY€Rāp1PÉ{{g{¯^5į™ ŒJVØGōŸŨîāõŸĮĩ>…ĨĪ5´’ØÆæŨBÄJũÕô÷Z“û*Áĩ)oŒ¸–/)Ë1ÃŽ1‚šÁ㎔ųje‰5čŦŽ'_*čũ“|jBäÍÛn1ōãąįŪŦx{PmBÍå{Ĩ¸(ûN`1: ̝b TöÚŸgm,E2Ã(ÚTÎįhë…ÉųyôĢViÉ7™¤2ČōIšˆęM&ĶĐÎrĪQÕŽ¯,1tUĨžEēĩ)6ʤ ëÎÉëģŠOí^5;š&‚Hāŧk8ĸōJየG-ž€7#ڛĻéķĒÅö8ĩ;;ŗ8–t–v0(Ũ—<0#8Į?JߏCĶãļŧƒĘfŽíĖ“#Č͖=ÆOĶŌŠ¸Ąjck7wđ­ö’×"S>›,ņĖbŖ/ 08Á ÁíīT4éMĻŖŖÜ1ũÄ^gTQČÆÂyŽ™´;CÛäžI%‹Éi^Sŧ&s´ĶúÕx|7aoqk25Á{hŧ¨Á™ˆŲŸēGB?…%kÅ;+ÍvōŪ;õˇ…á–ŅĻEfQķ‘”UÁäu?ũjw†5 FÖWēž't`­ŒÆđąĢ)?‘īWl<7§XŦđFnŧĒPBĶšDVęgŠąa¤Zé¯s,-+ËrᤒVǗøI¸Ų‰^į#ĒÚO¨k7zĸÜZÁ,v×Ví÷įōÎâcĪLŒgœVŪy6¯5õŊîtčČE„ÂËãæõČüsKqáēUšöÚúūĖÍķOmIŽāž2E2ßÃÖöġÖW1Ŧ˜vļGÄEņÄwãõ曔Z°$î_ÖĩĻŲyÉÉ4Ō¤1+p71ĀÉôīøV-öŠŦXĻ­§É-ĸŨFË€Ā–Ę‘ģũžšī[×ÖvšŊ“YŨ)h¤ÁvÖr#Ą°l-"—ÄzŪ9ŊšÚkHíÄĶ;€ ¸#ÅJ6°Ųf;ÛæÖŌE€Į%‰šQ!ƒŖi$ôäÕk NũŪęŪŗ<ņڋ…T÷lr 7'8#¨üĒÜK{ęõKéĘÛ5ŠķrČ{p1ųæ–×ÃPŲķũá?dû',ŋp8ÛÔdū|ŅîĻTZî°Ú† ĐXfōxc2ØÆ}÷}xŠĻŊÔî.dˇO†{Ģ2ŽPĖ˓‚HĀžpzÕæđĤØéÂöņaŗ‘^6 ģ˛ŋw'oj’īð]jßÚ1Ū^[JčQíĶpÁįÜU^"ÔŖ&Ĩq}yŸf’Gi*Dãģų˛āCQÛj÷mâK>OŗÆ‘ČUa‘Yd‘1Ÿ1OCĪaÚ´ŋ°#]j]FÖöîÜĘTĪ dl‘‡BAp9ÅFúmŦĻ ÷3Éäŗ´PļFŊŽ3øgŠWˆõ/–P¤ā}3Ōšģrų­ĩ BŪ •„¯Ģ“æ>Ėo#°Įo\V–™¤5žŠwåy+r@Š-’2KŸrOOjŽ+›Ø–ęhí/$ķ'ˇa˜ãvP9+•n=z§ÕnGö Dˇain—13į Ŧāú–Ŧˇˆ4ËH-WSž.'‰c)léĮŽhÕ<9öén'ƒPžŲgļû<°ĒŠV ué÷ģUˆ´H^ŌÚ+åŠōX*Ë$+ģŽ˜ôŖÜ°ũãS•”.AĀĀâŦÆK('éŠŦˇd‘ĀÍ[ `qß5($7ãąŖ1*–Ā`ÄöŠØ|ŨFOQž´Ō˃ĀĪNM>¤‘Į’*¸ųXŒ}*Á ĘņžÕLtĮ^x dg¯Ë͏Í'EČ}iåôĀĻ䌚‹¨üņJ1œ’3šnqÉ=zRō œõÄ;)ŗAį ‘Ÿ\Rl ŖŸįKÎūøĮ<Ō˜<ŠÁīŌ”N}ąJH<ûķL!cl¨Æ=Z]ų\J‹''Ÿ\TˇcëLeÎqƒíš3wΠú°ãđ§!&?ĪÖ˙VÁųÛúTˆ6´YéÅ;Øyoę(§īRßū ūČĶX …Õ­7{ ÔU,IôĢß2žIxÛŖd͓Ûí1ëXâíæšŨ­)lå Ī0ģĀہß9ŖĩBĄŗ%pÛ~öአ|cv8¤Yĸ™™DfS† rEVÕŽĨąŅī.­Ķ˚YÕHę@ČŽK\č%(w}ēŌžXũkžŌüA)ŌāžõžõŽnZ+wļƒ‡lŒāt=}*__*莖ǓÉq5ŦĨVÉ@Ū>€PâīaŪčØ+ķ(Uf?0íõĢ; õ뗷×í´ČtÍ8DĶ~æŪ6*ã*\§iäôÉĮA[é{ÆHâš92ŠŒ \úŽÕ-X/rU8įԚĖKsžĩ åO­3ŋZ@ˆÎyÉúR‘N#qޏīWXdU<Ôį ¨–Æ”÷N;ã­9}3ÅįÍ ÜíÁĪ\âĄ2L€yŌ6œ™Š;R6:zûU™1ämíJÍįĩ.9ãĨ4 xųŊjP3×5 Ļ J¸#Ÿ¯JdŽæ*jT8Čüę0r:Ԋ?”Ôö¨o¯ĸĶleŊš}ÄĨ˜õãüj\|ŊūžĩK^†Yü=¨Åã+ÛH¨RvškrY^ߌ$šlÍvąG.p! ¸ŒøĢSkšl$´— TfpŦU}ŨÄ äuŽzÖ-GQĐü5*éŗ#YˆEv@vĘn#ƒœã¯)Ķn!×īLēŅXØīAŽGõuĻ'‰ôİˇŊ2š†w1ÆD.IeÎF1~STī-/áÔ´Ģû>X"– Y‚ ˇ8č úU4`hÖæÆ4–ĶPûK´ 2fãßæ(­Áļu‘_Ãsh—ˆ˙¸te+ōã99éÅsōęBûÅú2ÚŊÚÂŅÎX2:G Ú ‘œī[Z›j:EŨ–đx˜n9^>oŊíEĸ“Ųęë šÍuû2ʆ5<˛į‚I9ĪĻ+k#i9ÎøsOÔl’Ū Ũ"ÆˇO+íp¸Ũ(ˇ#=NM^ŅßT{ũF;ŲÅÅŧR(‚Q—ž2Ëî?ZR[‚'ÔĩĢ])í…ÂĘíræ8„QÜØ'} g˯éz†|nx•[M‰˛Efā vÎA8īUŧdg‰ô  f¤jŠä…åXs€MMyá웨o.ŧøĄÔĻ’cÚ F†/ēy ä‚qßښОlN÷ Ŋ×Õ´˜ĸˇ2´{ „ŗüÄn`ĘHä õ5iu/Dķl‘į‘  ]ŸĖōŲČĀËĮī™ĀĻjNšŠé–ŅO&ž.cģŽāė.¨@Î $úņŠuļ“ĢØk7’Ûũ†[+É„íæ–ķ"lĀ`|Î9ũÛ žįĖorŦˇ-öWT¸dˆ IôÁԟ ņ Ō–ĘíđˆÆdŒ•‰Ÿn5FįEÕ%‹ÄJ‰mGf<,&[åöĪzĩŸĒCâXīÂ[ií#†ā3ČĘXüŧs×ڕĸš7WņiÉȤ•ŧ¸c_ŧí‚p?zÕFņ Œv—‰ĸkiV)ã*KÆÍŒd܎GēŽ™sq{§ß[il¤vō¤;UՔŠÁÁEejÔîŦu†O!nõ)bÄm!ÛGŒsŽIĮ§jQQę6Í7Öāh—my$1b"EPH$ƒŒr={V‡ĩ5HĐ"Ŋ–äIs#ˆ™ *øŨ•œũqíZ÷VzĖZÜZ•‚Ûŋ›n°\Á$¤Á$2§8Ük:ĮCÖ#ŗŅ`¸Ž×6O,€LÜŠ 2>^ŋ1ãØzÕ%Šy|SĻ ąyÆ?´}˜Ę-Ø"Iœm$Z¸úíŒ:ˆŗs&á*ĀōÉD‘†UI÷ČŦ‰4=TéWļéŋ.Ŗö´Ė§Dđ~^ühÕ´­nōūY †×Ë[˜'„yĨ7lÆāĀ/'9äį€0)Z7ρÖ,ėgÖ¤’kˇûÃ:÷,cnA@;ÉĨ!ąĸ´w>l˛7––Ė%žb^G>õRīDŋē#-ĀÔĸTˆ™&ĖˇËø÷¤ŧŅu9$ŌīāK'ēļ€Ã4ą1ēŋuąrŊqEĸ“Eâ­5…™Ž큚ļėÛļõwĨ‹Åštëjí.$0ĢÉ*‰3ŦzI>›¨ËĢč×~UĒĮh¯į*Ę@—Qˇœ~öĒK j‰ĻGĨ¯˜š§Ûŋ×6 ī-ˇîõįZ6 ŗEŧKaáˇs )"ÛÉ'UÎ^š<‘ȍâ>'‚G¸Ä3yH b‘ˇËc¨¤ąŌĩVčÅötû›´n“p–"y`<ôäUkŊRšĮ]…#ˇ}p$…ŧÅ]Ē9ųzüšüh´Bėšoâ:ėú9ĩšŨ›å’§ ž}õ>¯övļ‰nĮ;KūŠč2âL6 9™¤ŠÖúÜ_€ÚŨÅ“qmčČ` `ƒŸZvĢėâ×ėQÛ8i–F*JāũÖÁÁÉ´ē°ÉŦ/aÔlŌâ) ‰ō>e*A‚1ÔƒX^ŋ~îĨšyžâd@C<’íĀîxĨičZ}ö›ĻŊŦë2Ë#ÄQÉ‹ äqË{Ö]žŦYiļļÍ Ŗē]É,„NAŏĘÅrĖĮ8§eĒĐŲjߨGwŨ ‰šNĶģÜc×­dĮâũa$Ō„˜˛+i0Xq׎joi×ÚfŠļwqÃæÂ[aIIÉ9$Ž2OŊbÛčZŧZ^™i%ĩš{mAޜ­ĮrÄĮ_ŸôĄ(ŨÜ5: MrÂ{7ģIȊ9<Ļ 6í#9$Ž1U¯5Ģi4ƒpˇŗÛ ˜BŌ,z8`6•#ŒôäwĒؚ”PędXA)ŸP[˜Á‘XėųFyā0ۑš¯.“ŠËĨjveBķ_,ņˇžåŪŦs逸ĄF!Šŗwâ?N’å'šmĐm2ĒFÎcÜ2 Ā8§‰p‘É›‘€e đAīXØŪIuŽ8ŗ,ˇ–‰ @:å˜+ßũŋŌ­iņęļī¤Ų­Ŧ+dļÁn‹ļ]]@.:ŠV]spüŊœŌ09ũzĶō¸9ííMØ “ŒķŒTZBØ FAĪ9öéL'%œ¨Ū@ÁČ5jDVîv‘Îi8Ũ¸pŨÉâÜ7Hˇeō*LęJõāJpŒyÉc’sÖ¤Æ×?(ô9É4Ä7 ĮĄÅ4)g$íS"å>nqÜ÷§đ?(üéŽc<BE" “œ˛cį8:zĐyëČútĻvwuõÅG$|ũúÕą÷ĪŽ ËtõŖpšO` €ŋ5Žėü™?]*ëQ9ÁÆ>”†R–S9#ČsĮĄĮZŗōnäūŊ(ÆzôĮ\ŌąW"UíŽEJŖcđĀ ŠGÁ÷ĨQ•ۏ̤KGáQ1mŧƒéÅLxÜ@ŸjŒpĻl ƒĀíQʑ÷A÷ŠÉ=‡×ŠiRG÷\.Đ:}hÆz‘î*fxÁúS_îgųS= į…ĄpžŖĶĨ);ąœ€=és€Īŋ4€o‘Œį¸Ŗ‰${bĪ9Î>´™ö˙P@ĮņŒškũĐ@9úTƒ$˙:ƒŧ{š¯Ÿ›øŋ*p$c‚Ĩ#ž€Swgûŋ•TXgŪŖe;ēøÔƒŽÃđ֟ūĩˆ‚ÜÖŖ•O_ĖÔåģįô¨Xäõäb™DLL{cF3¸‘SöŨšiÉÁ;šúP"XdđjģĸÆ3ė*ë#duüÅWxœ‚qĪniĄ^>íÍA4 ÆĮāÕß"hĀķ‚äŒå[Šd¨|—Āū‚*Ž+4¤,N1ķy˜éî)Đåyė 1QÜ.YÆ:98üEL§ƒÁ-Įâ+ĢĄ‰dŗūŲūU``<`įi¨˜Ū1ƒæŸäiėpœsÅUÉŗĘ?ßTøö4R¸Īwø›—Āęz m˜P.#8ũ+Í4ˇŗH|>ÖląžŲŖ‘WåĖŪ_9õ9ŊGâ*†đĒI "#ņūËĢJʒˇ ąGō”p}ĒąNÖ"‚Üãü"Ö2 –´IŠGmå΍]¤N$ļy$š–ūöīUđ­äĐŲ2]E.$ĩ ¸ļÉåČä]Xˆ.p-ŨjŦ­VŪڊįš'ŋ|×–ˇ:,p+xö÷ņëšV‘zÖRHÉ5§–A28‘Wļ>é>æˇ5‹mSûB;Ë DœMlmg‰äŲåäî žøÉÍtũŊ1Iō˛ûTšë°Ō9 6Ã_ŗ’ÎTŽŅVh!Žō)\–“å܄pr¸ük[KĐ,ôĻē–Æ/-ŽX3å‰ÉÉ˙×ųzû÷Ą Čü'+ŽÖŒ.9Ļ‘œqS* Ŧ@9úSÃ`Ži 1œúÆŖ#-š”‚ztúS~š¨ÜŪ/8⯰ÁüjĪúÄ=ųŦįąĨ=ďķŖį'ķĨ58}1ļ ŅŠ:s×ֆā(ę7p•R3!ĪOņ§ķcÛ֛\~]iøËd}*˜åäcœu§tSŽHĻ‚1īR§$}=)ˆPcR/×õĻŊ“üŠā|ĀĪ‘yj@29ėj4`Ā'žyūU&ü.īA۞õH– „ä`°îq‘íN8tR0yüĒ6fųŽĮJ–ɛÄ6ßObVęK˜@gŽ;Y€z0}iS^†MBÚÖ(&qqf×qžĐˇœō+ ŋok˙cšˇˇqm3F_ąÆ0íYŗ¸[wE‘Žc¸”éķĮ$‹ĀgVv?Öŧˆ›ÜŨŅĩ8ĩŊ-A"xĸ™I ü‘‚G8úVĒ dÜÛŧßLÔ%Cđõ”sĮmoqįvb*[ H ŒžzŽ•Ûhi4{E5ō^°‘ˆ•Og…ęrGLŌ”l š.Â(drI–Át[GÔĩt›kõˆĸĪp‚Ea_Ü Ũz÷Mģŋ’ÕÕ$€G)Œžíۘžø {Õ_\—´đūœgdļk|FÅLŽĨF7@sŠ9t ”Ķ˜ŒxŽWķ!ō×;sÜú:ĶĮ͞øúWũķÅhĻîB!ÖM°—8ķĸo_O¤đ¤ ũĩŦĘúÄ“%ė‘ˆ$›*WjüÛ}{fŽMįZîąĮ#žBĻI'Đ Õ]2ęKģfk¨–)’BŦŖ Á=?:j=?#ĐĮ8>âŒd€y5Äę×q_kæĒļvįOGĩw$+Îö  ÃÖˇŽŽŗ´y_Q`ą,{Ž|Ŗ)uã$Ķ#ŋj—ŽšU9„’Ŗ‚3מ•l‡ų[ Ÿjå<3{kĢySŪę2ϝ͇ƒĪ*T‚@O/Ą]žÔ’žŖ:āG˜FI4¤€9ŽKÕ#_؃д‹qáåyđ&`ãn“´Ž@Æ3ƒÅhø;dđ]Ũ›ģŠåŽækrrãh•8ėpzĶq˛w:CÞ2 g9§œs\žŠø˛;;ûš-ėžĖŧ@ĖcG“qÜ 9īYúŒ^;[Ŋ`Ádtđ֓ĖŲŪĝĖ n3“Bˆ\Úš×ĨƒXŊ°[ÖÚËíjÁĀ2rFÜcŽAæ´4‹ŗŠi—Í„ÜD˛lÎíšë\ɖņÄ×jäč$4Ĩ†[ œŸ¨įņŦû;đļŪ´›Q[k'͎w!PHaÎ2qšŽKĄ\ô"…F į…ڇ@ŽYwĶl´ųŽ­&Ąiž%0\—æpUÁ!ņĶ=+ĩfû˛1Ÿ~• Yĩ$ vä’8įĨ.öÎ69Éį:– ŗÛkr]ßÜ[ęVĶ‘m ÎŅíL „(8mܞõ§­ŪAewŽC5렚Â9`F˜Ž_’œõČ*šsĢynŖˆC##†&U#jcsÎJ|×[[É4˛mŽ5.Ğ€ Ÿë\ĨĨߙ¯xm—PgIôų6U˜*ōFy9Č­*7…ĩ3$›?Ņ›øļî8ā~4œlŌ –ôŨBâū?:[ˇ‰Õ^Ō†2)į>éö­TmÜôį“\ŊŒĐŪ]ZZÜËļÛû6)!MĒį8r<‘ôÍgYÜM¨]hסˇK‰tdå ŅŠÄe°Aäcžôų5 Ņ(€ne]Į“ÔŅ"áF0sÅyäūDúf•æĄ/“ą4srT„öåŗ×sū5Ū;:i¸ˇv$`ÆYËĀãž˙ZN6î:âqmi,æ3'–ģ äU4NcL‚ú8$7(8ČįŋåX^ŧˇÔėm.įÕ]ĩ-įD׆w!8lņXÚ 0ŪømĸŊ”GsÂIšJš+ōôSäŨĪBčü‘J198ĪJâ´}By5Ģ1.Ą,ŅÜĮp$”ļØÜĢĨéŒãßŪ›k%Ũž‹w}>ątĘ/ʤ ›¯|Ž)r0šÜā¤ãŊU°ŧ{Ëvá1)vå˛YĀolã8÷ËŪO}§é××+up–ō]ER\JXÅ#sį“בš“T–÷Oĩ„0\ŪÆĨՏú[´a2cW${×Gá˘îü7e,S˝vĮFđ͐ģđN’PÎŋuw)u'¯8ĻĄ ŽwEH*AīĮ֛!ōÆ6$yāqĮJ̤[Ë• SjöDc›ī ž3“œtĪĩ`øzãûLKusŠNē’]H˛Aæí'—Ķ@į÷ĨĘ;›Ú¯ĩb/aŽX”ģ I0å89ZĐRO rJķí)MŊ֗{ Ô؟TšŖ ō&C‚žšæ¯Û]Ü/‰,ÉÔæ—ĪģžU[÷!UI ǐ2G|Õ8k Žuļ—q\™ļG*ˆ¤1čW$wę9ę*Y" {ķ\EŪŠ‡u‰˙´'2ZęžTrŖ1īAŽ;žÕŌģOéŠÚĻĨ$‘#ķæåŽO ;};T¸X.^[„ōPĸnF<éOVrˇEdŠ)!pņ8 Ŧ§‚q\&ЍŪŨG­Ũ&Ģ%¤úmÃ,vą0І2Ûšö¤ŖqļwnåPđÄNŦ—Õ[ûn 8ZČRX™ÖcŒq׎Ŋ˙ZĮŧŊģ†ī\„ßÍļ+$š‡‡įÎ8é•n[ãkáGÖļG-âY+™Jũã´qÛ<ĶäļQŒ¸Í;vėŊĨso-åžĄ§Â/šá/Ą”ˇ˜ ėu]Á—`vÁöĒ:]öĒáû™ĩž=L2͉@R° žĸŸ#$vC*px Žã#˜æ†b_ņLŅ“‘‚1늑=9ņ5Ōb<`<ƒŌCúƒQM"Ŧ0ķŒcųĶą<ۏ!×ųŽB$‰ ņšŅ#;–ŧī֊g—íE=}ņ Užkûē-”ø‘úŠË2î9\āöÅløéC|>ņ ø•Üž}|ĻŦK=Ŧ/Ā܁˛}Å,^ČX~Ŗˇ§­5(NÍ riÛFîŖ❐įÕÂt‘ÜĮ$cĮŨŽ ôâĻ1ķÁ<Ž”†>ėsÆ:Ōî#Ž~•$y å‰÷ FJ ūtČ7”!Į–IéíHĸus´˙…4į$äž(€/÷ĻIœ~utíüęcÖ˜Ã Ā¤R+ļ}敨ÉB8Æ{Õ÷ûŲ&¨Ūpˌu5œö4†ãF^š&žqģŽ)į#ŠVäp8¨FŒwÉãøĶ”ņÎxĻKÁ÷ôÅR3IO#Ŋ.s܎ôÜņĀ?•8 žŧ¤&tMU‘F3ŒĶ4Gâ{\ÚJđĖ–—ryP\ģ]šĮČ*œ]ÉM '…´Yo&ģšĘ)fœ1¤ŗVSCŌŖ"]:ÛdjB%AôüÍeIãKtŽYN›~a‚ëė˛Č~GȍŲ9ČüéīâëUƒQ’{;ČeĶö™ĄeļœāŒcņ§i…Ņ ē–-ÉlmÅŗ6ã–6“ëŠĐ´ˇ†Ō†Ö8ÔaQT°Žwū ežXŋŗī‹¤ā.Á–Œ÷ö÷ФņeƒEhcäFXƒƒo|’ 9eÔ.k+OžšŠâæŌ)gˆb6‘Æi"Ņ´ØíVŅ,!ČۂmVõôÍ7P‡SĶ"ŧ‰H+‚GôŠu¸ūĖēk גÆ,ņķãÖ–ˇ°ô'm:ÅâŠ)Ŧádˆæ51Œ!ĮĨ,v:}ļŖö¤†ŧ¸p;zšâuÍ/N7ĩ"ōōå^w‘Ųä( ŗŲī͊ŲŊŗĐtˇbÃ;\ŗ.áķm ØĪĒĘĝ"Įi{nà )ĩÔlô[ÜCiå#‰å\+“Ÿ•HęAĒÍ⸟FÔo­íĻŌO!Ë´É/(õ QĘÅsf{kivŧŅDÅA‘Ûøž”5Ŧ›ØÁdfØ2kƒ’ßO‚æō}dĩІ5ĩ”3įĪšq–8'(`÷A>•ĐéšüFĪNĩ‡NšWJŦ'“hBī$‘•éīƒMĮ¨îo=•´ą*Ko ĒōŖ/ĶŌĸŊ°‹Pĩ6Ķ—ąÕ7/÷OĩYRJ€6ķĪJĀņeÜđi–‘ĸ—W°ÛĘGđÆÎ^zqëRĩ`m R˜i\ãå›ēUŸßÜéūÔ.mUŧĄ€Āā¯m߅;=͡ŗŧŒ‡HfÚÜĢ(l0ú÷§ÉkÛHŖlr”lÖ=´–ú}ãYXiҤĪlˇ_ģm‚L|ŧņ×Ūĸ]iofđũĶiˋŊė’ŗäĀ|˛ÄŽāVbš´Övī)gĩ„šęÆ Iãü)e$>CŲĀŅîŨ°ÄģsëŒuŦË‹é ō,e– åhã”Īų HĀ9î+5ŧOĢIĻÅvšJo–ė@‹įo+ëÁã÷ö§Ë šĶIcm/”dļ‰ĖXØY1ũ=*}ģ‰ 7¨æšéüHđĪ2-„’Oo4ņ!%ƒ0ÎÅÚ'ātŠÆēōk˛iąZ1XŠ _x ģ†íÛ%z}éYŒ_h­Ģč÷–Ģ\JųŗdmƒÔ{tĢ˙eŽâíŧ0]­ō†=@$g[TÕNšđEĢÜÍpÅ#Pv¨Ú rŨ¸¨/ŠaŖĘ–N#ÔY“æp lāŒs÷O9§­…ÔØ[+(B"YÛĒEĘmŒ ŸîņÅI-ŧWP˜åŠ9GRŽ ˙:ÎŌ5yuGŋ[ųYN`m¯ŧ1ƒëéXĶøÎæŨoe<Ļ;+ ÃÔpHÁ_S‚8÷ĄEļGPú}¤°ŦOmnŅĄÜ¨c†8ü)ŗÅg BiŌH—GP6ŠéYxša.Ģ î$2ØB'’ <Ô ã:VnĩĒ _ÂzũĨÍĸÃqm%Cų‹ķ.å āņéڅpoC¨u„°ˆÍ•ŗÄ~l”Š>Ŋ>•c|f_/ĖU”.ā€ŒãéTMôZv‰ĖĖÂ(áNÉ$€ԜV šøM>×yj-|5ųÜ‘ŧIž”%p:ŌlyĻ[+a4ø‰rãÜ㚁ô]8)§Zܘ~^s‘ĮF×ÄąĪ%”Éļ{ëķaWœ؈<jģ¤ęGUˇĩŖÂĨC#oVVVāŠ##¸íIĻ ĸ+]J†E’=:Õ\;:ūėd1ęj+í!§ĩžĻX”y•å‚D ’ŽüāāôįŠ×:Øļ×­4Ų,n?ŌKySMŒ@Éīœ§4‡ÄBbyí^)'™ŖŽ6uįoŪl‚F8?§­5Ė2+ Žnf{§‰a6‘á‘€9,ÃÎ:vĢ’čētZ|–éļëm/߅b[ę?*Ēž!ˇēK1ö;—“<*Nr}z§™/‰ŒzmŨâéĶēYÎ`¸Rę xÆ[ž@ČéCRbĐą‡4ąj–įJˇ6ĒwĖCnzgëīZņA¤pB#8ÚĢ€>‚ŗtDßË;ÅnŅÛR9|ĀË6?ˆØzÖ¯™ĩ@9 œuĨŽĖeK­/NÔfī,⏒ŨIbŋJûKkhē}ŖZ+nyjWwŽ=kžÔ—âŧÉĐJōÆ˛°W+÷sÎ*ׁĐGĄŲŖ–O6EdYŋŧAīÍ:ōÂ+‹ lĸe†7O(•LöãÚ˛ßÅ ہkqū‚Ë˸Ą pxį¯j–ãÄqÛŨËĩšwŽĶíkˇn8õĪ­–ĐEonÆ›"‰B ô`VŠ´ÔôŲūËc š„ "ĖĘĒTdI>ÂŽčšģęÚz\ŊœÖÅĐ0tl€r¤uÔū&ﺚîŨl¯n$ĩUi1nÂļyÎ}æR ŸC°ÔÖīôčÚqÃģ’ öČëÖŦAĻÚYØ}ŽŪKmĨL}CÔsÖĢ6ŊfņĀöÂ[†–=V%Éō˙ŧsŠ#ņÃ؈D’-⹅Õ8%FH>„cŊđô mĘßũ\L¸ŒÄ›ĻbU=“ōĻ)ŋđŽé™ĩ_ŗ°[6ßžûsU˙á(˛Ktđ],_iû)QægĀ'ŒÖžŖ åēÎXCã‰cØËėGZ2 hüĞ3ˇĨ#ʑüāČÍ<Á$töæŖš(*ĀãŌĨą GYãų œ)ߥ“+ŒīA+°:Z Æ2\úP?ũTšGš¤QÉQÖ¨@GlŸĘ˜7gžHöŠv’TœĮĩEü^ô¤\oŨ9l恒qˇZ3à Æ[ß7ĶŌ r=1OĮ#‚})¤vĀãڀŒüĘ͏~)wœã×4Õā‘œĨÔņÛŌ€''åéŽyéQžüūĩ(`ČúqLaĪ{ķABnnĮđÍGģųžĩ!\ Œã d­0ą%qÍ4ąŨØã§4÷<ā=)ŒĀŽÅ#f9*Ę1Û4Íİ ŸĻ)]¸Ā#?ZanBî ;ÁûŋCŒÔl1Îß8§!Ā ž â˜FyíøĐN{0lŧÕY˜”8'õæ§lsUf`cqˇ î R%œĩĀ ÷N áēĶ.?׸Ũןԟ í#ũ¯Lv¨<Ī9ŲąĪôŽ”ŒˆÔfy‰é•¨YÂFØ\áš§Čv4Ė`QL`pˎŧ֨ȗĖ>ϊfWԊ@}=âĨßá mqœØN1Žŋģjå´ÖčÖŒîļŒô˙dėõ„i4KôQ–ki§i¯ ŌomĄŌ4æšô‰cģ´eL~XŪ(Éę~ī_jŧLn‘4›:ŨWQԄ6ööņ­ÕÕҎŽGĀ(īĮ¸JƒÃ×WbÅõMWTˆÃs‚¨ØEˆ‚AžÜĩ,–pßYÉ=Øo'Y–!žR~FSęzr?:Ši{hÚ^œ&yÚÉVæŲ˛Øėãh8ā§OūŊrrûļ:/ŠßŪęv†îîâ(ā|å¸9éŒuĒø—J€×Aƒí ˛6lĮŒîātĒZ¨ŠÃCĶvZ]:ÛÍÄnjÍÁeļĄtČÖÅEæÁ+‰S×§ãØÕOėëąâ ä:|2ZŨáÅáp/Ũ„+ŒdôãëKáģ-vÚ$ļԞĶɡˆC‹%¤€Ė{qŽ)4­Ą]N™NyãņĄŽN1Æ:Ō(m€qœR“œcŒT a?LûĶIä˙…8dįü)žŋã@ČÜ`÷ÅgŪgzqŪ´Õ+žŲŦįąĨ=ÆcJR0Ŗž´öUëĪzVhÔhĮ\ĶeįŒĖSĐûĶX| ŸJ´fČ:wãëRøĶz:ņ@'=ū•HLœ¸ŽjUô¨TAŊXzb™#”üšĀÎiÍČÉĮĩ&÷JzõĮ?J[ˆP1Æ}jŽąm=և{olϚ;GĖ1ĪįW{ķiw§-ĶŋaT•„ÎZÛFԒ}͆ßËĶíž BČrÁ”/{Í,>Ŋ};KĶ.ßėÚ}ÂJ˛);äT$¨+ŒĶ'&ēˆdYbWƒŖ ĘĘrõ.Đ˟›#ŪĢ“drx_RšŌõ Sqnw¨ Āv1ÚSˇ˙ûšf§á}Nę}fA-ļŨJâÆĶ˜ĘŒ}zŸŌģ'hĐė1 762OAKŒäcëOžAdr?ØZŠÔäĩ¨#O6Ëzîéę* ëVú\îÂ&ļ*ęŪ\ņ“߸}CũŸ ĩáˇŗ´BžJGÔāAí€>æ°>ŏm§ix—E4ˇˇ€*,Fqķ•?\×G­q}¨Ę–ÂÖ0LĐM+HC‡ “ĩq‚ uõĨšŅ´ĮŽk„ŌmgœŸ7nĐĻFę}ũéŪÛˆČąđíÅö“Ļ_¯˛ß ņķpZPr0OPöÅk>s?ˆ Ôgģ ˛a0ÁŠílļyņŽĩ¨˛ÅŊ`Ū‚bŧ ÜĒôÎ=*ŽĢ¨Ki-Ĩ­ēD×7’2ÄebmRĜsŽ?ZWlekË-FiķC,ņAkŧĘ|ā#”@]IÎOLTšū‹sŦZÁo Ō@b¸ŽãsÆ[%ā8#Ŋ_ą’iôøeē Šūđ[žä ßÖAÕuFúítf`ŗv‚FŸvæ&î1Đ@9÷Ą]?A sáÛÆ]B+[čáƒPbgWˆŗ)+ĩŠrÎ;ôĨM hofšÖæ…ė’Ō8Ū2J„Î ;†~ņ⡠™fŗI lĘ‘ŋ„ãĄúVV¯ĒM§ŨéI Q<7w>L’ûƒilßîšW{ ΡđÕũ´úDņjQŗˇû,™€Ÿ2<ŠãæųOËZzö‘&ĩĨÜXEtļūzėg)ŋ zņ‘ZQK Ãæ¤¨ŅŽC†uõ§¤‘É‚¸*zr(ģŨÎÜø{QkË+Ģ}V8eŠÜÚÎßgŨŊ2TāäZÎŗŗUŧŅô(o~×>›)3´qōĶÉeRĮĻrÃŋzí€PŦJŒûwĻ Xˇq‚~biķŒ-#Ãچ‹'5U“LBZ( z䓷~zséšÎÔ˜m?ĩ#įÚŦßÉá>bÛXnųž÷ĩv&é_ˆ č{Ö/ˆŽo“Fiôyck ë´y~``N1ÁīëØf‹ģˆĒú&ĸšģŪŲęI Ü*‹¸ŪáŲ@—Ÿ”ã×4ëŋÍy¯Zę]Į˛Ö_1ÄLmÆÍāōšįĨm,ņ#*I"$Œ2ĒN a\žĨâ]ZÎËÄŌ"ZnŌä`Ü­ķ+Nîzá‡Ĩæ{ ›Ū‘uŠų mxD’’'BË(Æ0pAã¯Ĩc/„oĄŅŦmâÔá[› ĖļŌ>\sà ķ÷5×Ŧč‘Gæ˛“Œ1ōƒęy5ēÄĘ8-ĐÕ-:KĮ[—ēPĘŪZĘÆ8÷8'ņŖ™ģ•â›6šĶ`XdHī’ę6ĩaÉX/ĶæŦęz$ō›´éã‚æČ‘• #)löëWÚ.."šxb’XŗåJTšëƒÚ ×u)´{øã´ ŽpN:B{$Ĩ-OHÕ/-,¤ŠęÔ_ÛN&ÜҰ‰¸e#'ŖzÕHt]z+=Jŧ°Ũy1“Ėō߀ĀíĶ­u3 ã GLĐrpA#šëB“Ac–ƒÃēŞ›}ca¨Ãožm#.mÁ?2ķÛĶĶ5Ô$eaE.YÔ ąQÉúS‡'hę9ëH ´•ôëIļ÷ŸŧŅ.î|SeĢĨÄ­š:Ų\0ÁÉÍYđî“u¤ØÍĖöōoæW‰Hå˜ą'ą5ąŊG§" ‡Ã×ú}–”֍o-ÕŦŌË"ĘåQŧĖä ×`v õöĒãošvŒ—ųUÖíwC¨?āj›.ƏŸŊ´×B2d.ürcŌŖv'pčAĢŧúl€wqē´FlnŅę:*lZ)ˆúžáKiQ~ķ!ęEy?…ôm2īÂú5äÖ0I<–áãœ"õüĢ×+Ëŧ|Ÿiræ+tŽûxū”ņ &†ėĶ6ˆÁ…Ŧî-Ÿ,uõúÔțĀéJJÉvķžôbŧuŽuŨĮ!G2j&ęG~Ø4΄ā ö⥐ČĮ!°sųRĢøŌ…Áæ %ˆûØôÅ,,NđNíšÅHŲ8#ˇ QמiW!TļôĄ'ž(-ŒÎÚė7ÄmYY˜GįÁ†xMŧŅs}kŒ#ē‹*ũĸ–Idä)B6cû āzšî<3ŖÉŖi­gq$R9ä0Ė[œúZMAÛ÷qüĮ$…ŸSTæ“%#‰ŅY`ņl–í7Ûë4ąÜ¤ėY@aōH§Ļ¯øĒčÛ˙eŊĀ—û8Üŧۜ#åŨáÎ3]0‰–TMĮŠ ƒNeÎÁė:ÔskrŦyŧ‹i“Ž6œsm üĄLüƒ–Ú=:ūĩô[ûņŽĒļ—*éqN›åb7î"ļ´Í"âÃVÔŽ&š)"ģ”H¨ąČ@ Œ“čjˆbVÜgŲy"ŠÉl+NĨ,3ø§PŗÕu)-#h#6_(s¸Ą#īgņ¨õ ‹vÕŧKlnÔąŌãU20É ?æyw?$Ф§ĖžŖ4*Ą1ūđņ’4ÔÂĮžI{o"čƒQŊkm9´ÕĘ:yĀĀä+šŌÖ;mÚ8n%–Œm’lî`:œSŽĻļąŽ5ēhbŒČ<Âæ'€=M\ãm9Š”Ž4<Ķ/Q4ÛõØZ˙nŗ\í<‹wîŲČ>™Šu)b’×Å&Æqũš,Ŗ`Ņ>\s„¸Ûœw5ŪųžŖ§Ē¨%p¸ôãųõ¸ŦqęēKøâÚ[­$út2Zžãķ¸f郂qЎŽMlŗpÚ´—iguh‘ÚI špWz•ŠļqčkOÆ đ Ü ÛČT„:–rÃ÷ŨÅuD2ŋ7ŒĶZ2Ę7wûÔšĩAcŠIėdÔäŸYUkGĶĄ†tųz0GßÎ=úUM*Ųĸģđĸę7Ú­Äoæ.NÃ÷ĶŒôyÆ1č Ĩ-É_~hįŽ3ĀQØ 2aˇ“{Ãy%3ķļĐN9ãJ¯ŠYhŗøĪTƒRˇWYm!1¨RŲœdü]+ē ’pœ§Žk2"hŧCqĒ5Ō2Ë Â"T)$ێO'ĩ ^ķdØå—NGšđÅļ­ šOŗJ“ųŽ2ĀÄt9ûƒNĩŅ`Ô`ņE„`-ÛI *GͰa‡¯Í‘ų×w’rGéHĖ%‰ŸĨãąį°Â÷>ŋÖí­Z;›ŗRųŌ$ÚŽ×kū•%ėz|ēíî•=Üé,ą[q°Üvœg#ž+ŗēÔlô內¸H„Ž#OrzjēYØ8>†Ž~ĄcŸĐĸ͚;›Ŋ2ęIâ¸)ģ1mEĀĮĘĄ@éÖš]n}:[]zÛTÜē¤Rš€8?ę˛ íˇ×ĨŲĪ?Ja‰]ÎđčséB–ˇ‡ÔNŸy¯ĪĨuÕjBh¤c6zPŠ îŅÅļ2í¸ąŒžũ+’đŧņ]Á ķëhķynmÉÃnĮÍŋ-Øã°JîH’ ŌĢϟkHŅÛB'ËËZ”ė†ŅÁéW6Æ/“4E‡š˜ķ:¤cÛĩVŌæ]OSŽIĩ÷ˇÔŌéŧÛ@ŦˆcōuÆÜ t¯DVÄ#}– ŽGî‡N8 ŲÛ-Û\‹x|ėcÍōÆė}zÕ:ˆ9IYW+ĮAĀæ„ø@Z\äq͊N^3Y$Y"ād×ÖŖrW9éNÎx=>´›\ cϐ„,vĶpqĶŠ§Ŧ|gœ*B §=(‘+ĪãīMÁÎ0sõŠ™XāqīL nĀūT Œ†QÉæ›Đį$gÔԘ8íéŌŖ#'oôĀ Į˃úQ‘Œū´Í§Ôįˇjr\R šÎ~ϚĘ2N1š™0ŧĶdmŨ‡įL:•Ųx8ééAÃ2ŒcÔėpE2Nļ~´ $@Ŗŋķ¨00•!ŨĪëLÚpA#ž9 9ÉÎ*#žį§ĨHËė1QČęzĶŌĮĻsĮ^•3žūûĒCąAééԘ`āãŒ("ę?ÚĻuˇãŌĨaÆy_ę+ĸ&lcđy9;M2NPä÷éøSßÛ×gõ¨ääÜüĢDdÅķĐQPî>ŸĨV&ėúōŧÃÂčSÂļq/Íå´Šœc;eqũ+ĶëĖü.Thīë¸×'īq'?įŌž+āDĐ~ņŦCm üÔL˛ydnBJ–Cŗ#Î°õmNæĶPĶ !1]LRRųʀĨ˛?#^}Žuš'qųI ūTĨA]š÷>õVãPĩˇ–(暆)e FŦÃæįRZjvW˛ÍŊÔrŧĒ7Ü?ä~”ŦÆ[1)<‚21OETŽOPÔ ŋņ^\Ną@g3G UĮ^‚ON•{Gņm†š=ĒJ4 ¨Ã¯LŒŽÜPâ÷ <䑃Å'zUÜPn9鞔„mÁæ4‹fc.yĀcÎ=ĒtÔb\Í WL lo~ÆäÜ Á÷ėÎ1Ķ8īZÛ7SÜ}†Å&†Úc …ĻÚĖF7mížägMü5ptīŗ&ĸ ›ßļnû?}ûņŒôÍ=4 `Õî/-uI`ˇ¸”Kql#R ޤĶ=ņUîŠĖeበV:ĸZ,ēu´Ļ9I‡ 6ŌĀcæS,‘ōÃsne ž9íŪ­A Ģ^^–tē…ax ( `õĪĖ:=ŅtnëQkG6$_~ą‚ÜsžŪ•6ĢŦ\YęvVPXŦÍvc™ļTgž)ú7‡ŽteRââÎ1ļ$E@ c'ĨdøĸŪOøHŧ<õmåķä€ PPķƒ×=?,Ž>…-kTūÕĶ­RâĪė÷6ēŊŧs#>í­šH ãC~ĩ­}â‹Xõ–‘ĶdĨ?ŧBĨŊ8ŨY,–č0mĸNJāāzŧÕ{]XjoáÛÆĶ` zŽæBŲh–[ Į9¯5׆įžîŪęVX%[cm;,*Ūjg=úĩGM˛6ˇš6•os-ŲŌŲÖiĘ*ŖĐũáĐúĶĐZ–´ī^ę[MobMĨ˸V!—bvģ1Á# õīYVū ņš%•Ōŧ‰.¯„1ą™žé‘†ÛĮ yõ­ŨÃmŖ\“§töJĖÉfáJ!cœgĀÉĀÍ@<SKûę÷;bē6­åŽ`!‹cũ¯ŧzŌN!¨ÉŧOŠŦĶÁoĻ‹™íÉv#J+ŽO¯J×Õĩ Ģ[X¤ĩŗķe‘Õ6ąâ0Įī6;õLø^EÔō×Wžˇ’eEš‰ŠŒų‡ĘØôĢ:ֈúĩŦP­ėĐäG`†+؁āj—kĄ”‰.ĨŅ–õ-íŨ’üYĖ’§2܇ͿšŸMÕîîuŊOOšŠ-ļf=¯9`āœ}1QĮá‹Iž°:•Û-ĖÂto¤ pĀë¸gš“LđԚ~­u~ÚĨÅË\ĒųĢ" ÜËĐđ?AMō­­ęVšė:e•„s´ÖĪ:ŧ“liÆ:QYúoŒoīJy´´Kkų1n2É"îūtųMkęŨë‘ꋨ˜ž;v#‚0ŨOæŦč|–ÖštIĒ8ūĪ™ĻŧĨų‰Ī ųˇįíBå°j\‹ÄwXĩ´žŅaŽæyaMėD™@Hb¸ÆĶƒ‚=ǧ‚RÛT‚6ŖÕ.&1›"ĨO ¯Û–īûVā:]=Ęa‘¸T’FĐVމĸŽ‹ņĨÔĶŦŗ4Íæ„á˜ä‘€(mZČkÄ7ךƆ÷0}•tÅŊŽ=­¸ČÁ& ģ9Āų‡LtīZˇ:Χ.Ą{›bŗ­›¤d˛9˜n,6āØäŌ^ø> žŌ‘jWđ[ÜMį#eد¸1` į’3Ž•eŧ0‡XmF ûč`ĸuŠ@bŧÃzbã`ÔĢk¯\Üx–]6HmâXߊĘSn|ÅėÃ<`TúĻŖ¨iÚϜĢģi÷RyRJCoG䁎˜8Ā÷ŠßÑ6ąo¨Éus+@îņG#.Ô.0yÆqč3Š‹ÄņCu¤)‹îØ$%AųH`KdtÚ9ü)ipÖÅõŊVŗŒAĶ_\2ĀŅĄĀA%°[œ‘ČëRļĢĢÛ>›öģ(c7ße`ųË!Î×'ĮCšĐÔü?gŠÚZÃįOlmX4[¸VB8Č=ģR_xn-CK†ŅĩŅ,-ÄWEÁ8čzcđÅ ”ĖÄÕõ›‹-`ZÅj×V7Z 6%PĄ˛īÁis5ë ^ö(¯fYÚ TH œŽ3ü"vâÔ]SÄz…ĨƤ–Ö6ī„I3ŧŗ,Ŧ 8x=})×^!š7moabf‘-EĶRsģ;TcĻpyĢ2ølNu÷ퟎ[Ŧ‹ŅAéדųÔgÂÛ.-Ž-õKģ{˜ [v–5OŪ č ŒûŌ÷FZšúėčoxļ‚;oæyŋÜlgNk O×/ī4Ũ5/!‚K‹äYTÄI K uÎ=ú×U5šĪdöī#ņ™Ž F ôÍ`[ø8EĻŲ[ļĢsöĢ‹kˆÕU‘0Üc 0;Đ­Ô.EîĩkqĨYZYÁ•fy#š”îÚŽ†ÃĩMŋ¨^\A5žæYŊŅ€‘BTɸņÔtĮãWįđė“Üé×KĒ]‹›0ĀČfeb ã‡AM°đâX]HöڕâZ4ĻQi•ōՉÉÁÆqĪLĶē.ˇĒIĻZDņDygHĖ$"–8ÜÄv'‰5;]?W¸–ŪŅÛN•"ĖnÁdÎܜœöaĮ¨5{Åöū~öc$đÅq*G-Ä+ģĘ^šaƒ•āĮŌŗėtŠu+kí.KédŌŲ#ōî oÉ%Tc`œwĨ­¨/ĩVÎÛséöĸXā’w>kylđŠp>b9æ¨ęWŨøˇOd‰<ŖĨĪ,!É9cˇ ņ選šĶÔŧ0šŦˆōßÜöfļd]¸`ŨO#†úS$đË›[…Õ.°Z5˛åP‚S͝ō§fF‰ŦÉi hļvÉ-Äö›ËylÁQp9 ĪVöŽ“JēēŊ°ŠæîÉ­faķBíƜ˙“Yø@Aga­ÄW’ „EÜã(ÃŖ+FãCk‰´ų[Qģ͛ī*1Įņ(—+ØÍUaƒšN $m?P(yʞqéRBĒwŒŨ "Ĩ †N!N Æ Ķš ¸ĮJ 1Ē1‚ŖĐA8$ąõ8¤'bT¸=ųÍ8waœŸSŌĻ)ÉûßĨG‚PÎG­ģœ=M4‡ŧM9ƒöîqQ˗B 08ĪŌ˜Ā-ĀėhĮ9ĩĸų ūĩRhŗŸģ­4ÁŖ‘—+|FzŒ~ĩšŲķĄcŅF?ņęŌģ]ē‰@`ûÖs˜Į ūĩÕž[ŠGīœ“˙,ĪķĻHŒĪōЊūôöķĄÔfė ūUw"Äx”TŪQõ•\,}_^q3Ec­BˇO&ĢŠėŽ7*ß,ŒF<y>šîĩåuÕū´ĶÚÅ!WģÛŊÆ[ŸÎĩÄi ™ŅøŽWvžōî_í+¨,ļŸjîfÁ<{søÕeZĖ´–Qęsĸ‰$-åđ=z“ų×r4Ģ$­…°Î >ZöāvíR,0ŖnX㜒ŊpķčtōœV—d‰ymöŸ}2a0˛ĢmUVbú•85Ģá›;˜ŸP ™-2ĻqY$–L÷žšŽŸ@ür)Ą{T9\ĢUĻ—­I…”úqŽ+Xįļi|åÃ+.Đāu˙ëÖ¯…lĩk8<FÚÆ(Ŗ@ˆmōYČãsvé[ÖwQŨÛųą ¸Jž Ō’+™žōh^ÕŌU);VBz€Īôœ›Đ,J‰Ž į47-ŽqĨĸˇĄķVâ&guWĒ‚Np3Ķ֓QŽŨ5Ŗ4Ö7ËĻ]Ųaû, ģãšYTdg#ō§Ę˜\íMÅ瞆š,¸ųFņķ}=j@W=GLā×hļzř°ą’u?gļ{Y­ËŒrdt¯|×_ŠĮq>›sŠ)tаˆŸīqĪÖĨ­†‹Q˛ķÚsÎPČ3ĀĪJQd,]Ûūû"síëøW g%˛jŪ‡û2k[ø|Čæ@TäDAųē7<õīQ\]5ĨĨ“é—åŦõ“;ėĩb<ŗ#°e `đÁWČMÎōŌķ}ÍŌÉqjņÆĘĒ"r]8ä?ĄĪOj̝k)ŖŲG"˜Äķ$†äof'ØŸÂŗ4DhÔôÕ´įŠIEõžČņŧŦĒBįĻyã5ÂčWV——pŨ\Á%­Ė–Ö>Čę˛`n<‘†8ŋZ46[= A”iRĢÚ܃|Ÿf+#+Œļ ßô§Č–sŦÕŧKkaáû­FÖhĻ(6FwîS!āz˞[éüGuk>Ŋ7“§yWå@8%‘ņØmãĶ=ëXąšŧ´ņöú}ĶGyä%ē vŨ$‹’ŌÆWŒ œtĢW°Ūj¯ˆa‚Æí îŸBĪ ";($Š'€NqøÕ$Ŧ'šÚcIxe™o-ÄQĻįbà 9Á>Įœ}õĨü}œņN€ā´d§ĩrBÚOCŧwĐ5H'xŌ)|Įũáŗōe‰!O=9­/ Gûáĩ8Y.áöģĮåŧĘ0ēŽäĐT4’¸Đxŗ^KŅŽŊėQ_ Ļ$%K°ū횹^[k——3Ũ¸Ķ|…;e*u*}09Īsí\ļ§ęéZö—&“s=Äķ<ņ\Eõ‘Kŧįī˜ë[úü7Zˇ†•-!Mž)ŧ‰@V+†(rp Ŋ;+fįÄÚmåāš‡ąīuĪ=>^:ōzW+cîĨŠYY\k÷Ë%Ξˇķ.É2¸Æ ‚~^œUíbÖ÷QŊģŋ‹Nēō†™%Ģ#G‰%w9Rz/¯ŋ^MH_i˜Ķ¯#F6RÉĩ~I1œām<͊I \֝;ŧqŪÄÁ˜üÜazz;‘M˙„—G8 ĢXļPČžŋtwëŌ°|;d`˛‰.|?w å•ąˆĖX:1ÆĪ›øž•KLŌî­ĄđŧRé3ĒÚ|ķąr…<ķ’A¤â†v ĢX>žē‚^ۛS˙-DƒoĻ3GöÆžĐ¤ßmˇ1ŗl dŨŨyīí\\ēeėz^˙ėËĻK}YîŦ#uDđ¨ylâ‹PųŨR_Ũ98gĀ8$ri8čFH9$pxĒחÖÖ*ęæ(œfG 3õ5SAÔäÕ´{kÉíÄRĖôS•b2qÆGÖŗu. ņiš“O{›)m"D ŪS$’ čAûRļļ`mŽĨg!R/`mč\bUų—šô÷ĒĶęh-ŖžÚöËËy•7É&Tķ‚īZäė\ÁĨxgPwÁ™dx!ŪT6vüŖœfĄDfđäjē}Ų–gÎt6žilŽ:môúUrÎū[ØĄ…äšD‰e›h_Ѝ­õKŠÚ+{Ëye ¤r õŸâe?đŠęÃĘ,~Ë)ÁûϰôĢ'ÔeĐo­4ų,ÅĩŖ,ŗ:<1÷89튕̰šŅ顸¸ēˇ–öȕžōøāũĶ‘ųSuQN•{.›sk-˴Фīč3‚öŽcMĶæŸH’Åt›ÛmfŪÆHâf>Vâ1ō18ÃAVmnÅī‡%UŅníîlėÚ ¯ûåv•\rÃ>ž•\ēÜW7´mb û(7]ÛÉtaF–4`J’nŖ­Yœûâ‚úuå‚¸ĘŒāšã­ígķmcļĶî"•´SoŧĀĘn‘ĮCLŌ#´“G¸it]B;Ë[7ŧåwN€@NHÎŖ•ÎŧjVsĖVŪú åRE$/ŠôĶ,5­?Vvû ės%YU†F ?+‰ŌáHnŧ(ÂÂh`hŽIĩe9+˜ãûÃŋÖĩ|">[W˛šŪęŪyŽđV؀|(”@™Ō\ęÖWb ›Č!™žę4ĄOˇųĩKkƒm-ė+räb&”nį§ČBĶXøƒXŗŊŌnnÖūá^+„ˆ8d*žõZū+„Ōu­[9ßPēģv‚O)Šēą~06ũF1G \í¤Ôė­äÜ]Á€…*ķ(9=*7ÖlĸÔš×qĨĶ&ā…ûgúûW!¨ZC4ū'ķ,Ĩ•ŪÖ4ŽAlÄŧ;N:į)đĩ˛øÂÚYė&fšĶc(˙g,UÁ$“ÆAw§Č‚įYũŖjđÉ"ŨĀV5ËļđBûŸĘowos{{ˆĨąļáúWĢAāØf}Į™ č7а”’HU؎ÉÆAޟÃGO˜^^éđ]Æ&“sŊĀ ČÁG Ëđ¤ãeqĻA¯jz…žŗŖÛÚKŠęāĮ'ɓ€2qøfĩdÔ-…Đĩ7âá×"2ÃwåÖšī]$˙‡~IÛɝ¤“dlÛQ†ÜœZæn51˙ „ÖzdĪĩė ‚Ŧd•Ųˆ9lcņØU(s$.k3ĶÁÆ6cžØāÔØ8°ĄPôĄ‚˛xŦË(?FÛąōį=y4õų¤ČŠéß4Ž€ ĪN”2Túū4ŒĀäôëH€‚ ߟ~haÎŌ÷ŰÂŨü=i`¨ã§4ėr0[į‘ÄTœī>™"€°T”ãŠBF3ōôëSˆÉųyÅFņ¤ ŠApۖöÆiģFė‘ô✙Sƒžž´ãģo?1•ĪB@tĻã įōŠŽõ4Ā?ģŒv9 Á##dcķ­}] jŖˇõŦž *2ūúޏ=i-Iʁ#c¯–jŊŲdVęzâŦą%ŗÜĄ§lã¯íĨ4ō§–į>™Í5€ –4BŨÁëTîņåã9Á*ãœëU.°#>ÄÖĸ[Crģ3āNLô·Īčh\Æ+4lËC.3žôˆsĮ­(Ž@ĪáHÉhɈÃįi1ōŽzûĀ=)Ãg:dˆ8`ŨũęUāŽŧ{ÔxĪl÷éR/Ė™ãōĻœÁæ¤åČ#$zĶTį‚2Gĩ=P˛đGâ)’Į+`t'Ūĸš¸†ĘŪK›‰6CË1įϜœôöǚĒnŌorĨŲäÆŨ5K°™%ĨÅĩå”wė˛A*îS‚SĐķSŅDkŸ\ ä<;}¨iÚf†—ÛɧMhZ,ī„e†rpA ~•ĄĨęÚÍčĩģ6*֗4ØSÆP¸îĪĐU8™Ķ¸Fqž”ß(:ũÕ#ĄÕÍéēÆĨww5œÂŲ'6Båv!>Sdƒ|Į8õ¤°×ĩ “áŲ?ŅÂęQ1™B•„e˛ŧôÎ8ĨČĮsj =ãÔæž–v•Å@KԁŽš r}*Í´đß[ŦđŅą![iÁÆ~œW)a­ęãI‚[Š`ē{ëˇļc‹i\;䜎#jđ8íÍtēD×Ëk$WöŠlą9HBķFÁĀ'˜Í=ÂâÍŠŲZĪ ¤ŗ"M3mDÁĪ=>^ĩhžFÎyâ¸øõŠ´û\°Y§Šō Rp>d@€ū-ŸÎ¯]ę:Ū¤ęwrÅ‹h„´˜>g÷Uccš|sĄšž+($ģ•ÄpÆĨܕ?*ŽĻaso¨ŲÃyjÛá™ÆÅH$œk öúæMFûMs @úcNŧr¤’¸<ō?*Ąĸj×1čžĶėĄÜōiÂfaˇp pÉ4ųtĩčztũhldcęxŽVãTזķCąceÅäR™Ã)“i@FzŽ?ZĪŗņ.¸bĶ.į{)-æÔZÂx㉃š”8$˙ŗĶšįv0 zqQžk}kž‡WÕīn.ŌŅ ŧ7†Ûkǐ‰Ũœõ c°õĒw"ÕãRē d-ôûī!Ŗ*Åä)Člā>zJ ums“íŠMŖ¯ŨÁĀæšë+­Zoj°=ÍŋØ-ü¯ŨÎāI9ëžŋNÕĐ$‰!*9æ+ÎĨ Xf6­aúŪ—xú’ÚÉhĖcˆí&BÃiûqÅlü¸ĮL× ĢEwŦk÷×ēlBæ#´ģ´b\a'Č„‚VƇĒM¯jWļˇ’ĻŸ ›g‰ˏųƒddĀúįœU8ģ\W: œôtÁ4‹Ķ'úY>$Ôī´ë;Y,„&Yo"€ų⑇mŧbŗæ×õ 2=ZĮˇžâÚX#‚DŒĸ‘.,2qƒžô”[Ô:fäåyíŠU)ÉôÛ\Ũū§Šiw—vq Ám:Kģy]6ídĀ*Ār1MĶõMu­. Ų­å‚ūҧP‘•1ē…8Î㜆öŖ“¨îup$Œį<Ķ/mP°¸˛˜¸ŠxÚ6(p@#ąŦgRš‡WĶ4ËSo|d-;‚ÛU$ęsßۚ×wņ_[i&æžD’f¸ōē"ÛœnųšíĮŊ+uf- žĶk=íü÷iŸ :Ē*ą,B“ŒÆĩ÷‰$t$×#'ˆ5]°ÃÛ ĩÕ „ŽčÛÚX8ņÆ2* GRÖ˛/ĄCykŠEjĶG Dr„7p~~yė}i¸6;˜đ§ƒÛĄ4ÖÚ3œÎNjæķ[_Zék}lĘ-âf6§/‰6°7ËĮō¤ŅõoTkMB$Ŧį•üÅbĄV!6‘ķČįÕ.“hÚv“kc,Ūo‘Œ1§ĩ]É?LSyÃ6܎:”īĨ†Žq€֜H^qøŠgŪ$`ã9ĨYČ>õ "ÄĮ'ۊS•¯_zŒ2ķĨ9œņ×é@ dĮŪ âš&÷ČŠŊ¸ô<ūTÆ-¸:ķÎh%Ž@=ķM,ĀdõĨ‘]ö” ´Ž~_֕ƒ˜Éã~9sÍ42ÆGJˆá$ę2xÍ=|ÂĀŒŠg— |ƒŒãŽŧbˆp‡õŖ2TgđĨe“j÷Ądߔ`~âÄ-ÍŋãÛQ˜ Ô•ä}ÜŽpMN+ō`‘Ô ÔlĨ™y_Cõ˙"†ã•cúf¤ā€=F:ņPĸ’ųnŲŠ@Ęã§ĐS’̓ŠkĐ=iã‡!ģú dŒw| ãŨh6ā˙éÁŸ~´,…‰ā÷íN# ›ŽŧŠC!( ūuĻž{Ž89öÉn8Į­€OÔĐ×('1֘Ølņø )éÆOļzRíÜ{Ķ„8ÁõÛAĮP=ČÅ)Ā$@ôŌpAĀ$ûĐ€Äį íŠjį’AÅ(äįŠúŌ1oŧĮ~(P—œüÕSԟĶŨˎœ})ĘØsí@(sŽß5Eķnu÷ŠGĖģF3ô¤+ˇƒÉÔ đLķžŊzՃĘäõúTĩzqH¤Æ•yĪ­3g ƒjvr8ĪŊ0đ}qLc[Žƒ?E¨Ënp}ĒIvž0zķQ°ÁĪËíÍ1ÌōÛ}qP‚v‘’I‘ģĐ­@åÆā(Įë¨?ļĮsˇ5ˆ@R ‰ũksÄ ˇUČãËaõŦ Ã9øO_­uSøQĪ=aœ–d˙:™NKũsU6?į‘ūĩ:Kƒ5l”XÜ=(¨ļŅSĘUĪĒ+ĖN›øâ[÷ įŦ°*Į ŧ`‚:u_å^^y2ų~9ņ'Í÷ÖÖOLf2ŋû-ub?†ÎZ?wsƒÅGÉc’? Č°Íøģūæ3°P@$ņ֗pdp98¨Ô.܀ØĮzpūT€Up ÔąČ$Ũˇ’>´Õ\1ĀĪĨIoĕ‰ˇzŌĒ8Æp3Q•'¯Ö¤Ûˇ†9īœTmžx8úb‹€„rH$}Fy?ԚœãéLĮĖ:ņI2úã8ǎ\DOn:ũjŅœžŧũ*ĩ×’=ŋg-!šX‘3×?•å‰ŋcJĮäמ)āÉ2“ õ¤ķũi@ęryj@u­“€’9éKƒŽpE-Ž(v˜‡cåôô§ŠŒŽ´ÁŽũ)ȧpĮNôÄJ22ÅJŖō=j%į¯:gäķL–"ĻÜüÃų¨/mžk  ´É&ķÛ#ũjØS“÷ēzR• r=éė#ŸŅŧ7’ą+]ÜŨŦ*Vōą1ō€=8įĩOĨxz--%ŠÛƁ•’8^\¤@ö^3Įl“ŠÕ1ßģ‚8ŒgƒøÕ9;‰$féŪļĶĻļ/.ä{{ŗ…g2u€pIūĩˇ…4ûI-9rĐ/Ú T‚ zS.ĩĢčŧga¤Ã,dšåfhō롰9īô§xBîæëD^N×įLžcãqÛ#íĐU>d¯qi{7„´æ˛–Ô=ЉæķãũņˏļP˙$Ö­ĸYÛųjš¸,rŌ\>öôĮĩaiZܝõÍŌë;!´šHšÔ(ę0ĒŲÆzäņÖĩˇtֆ;•Ŋ_ŗÉ!„ųķ§Ž}iK›f Åsá]2CŠyĻiĄ†Yø$}Ō08#ôŠĶDˇeƟ,÷wΆ73Č]ļãĩ:ķ_Ķôøî¤¸¸Uû2†•;”ã|u†­gĒÚ´öō¤g~x]…ŠxZŸÎû~Ą+›oŗ1’Pw'_J{xVÄZØÁב5KÅ]ŨÜqĐՔ״ŋ9`ŅœPŪŠŋ…8kÚkũ™’î&[ĻÛ Hs“Ā?…;Č4] ÖKĢ+–k‘=š˛Äâfū.šįœûÔ+á;ŗKekĄw&é?|Ųg9ĪԓøÔí¯iëwöwģO3xŒŠ[Û5Ÿ¯j3Ûkē1ÜÉ2ÜēKãlƒfFxĪ\{RWØ ôHĩGÔ{¸šWK N˸JŽü~5ūŗšÖúŲ§ģ^ÍįM‰wqĶŽĘ?*°šŊ”—kfˇĩÉŨōcīc¨Ą#¸Ąâ]7KŊˇŗžb–pJŧ=•-FNš ŧԚŦw^t‘ĸHžoîßhĀ$cŽ)4Ŋ7PÔnáŽ(~ÖĘ|¨‡h?1˙h’Iü*õäI¯YLoURy>X$)ÜŦXÅžá¯õ5ŋŠt‹Č$š+Á˛ÚĮžvŽ;äŽ)ëa ?…lgÕæÔašŧĩš|}ĄmĻ(˛ãÔcõĨ‡ÂÖ6ÚãęVĪ<[ČfļI18wîqZ6šĨø‘`f@Û$VRŦ‡ÁdqƒXW:ĒjÕõ¨Ôfŗ´ŌŌ)$–2są$†Čû¸~&ØWIĩÖ †;ƒ XĨY—Ëbŋ2ôĪŽ5 ž°ž[ŲfG˜^ĸ¤ĘėH!~îb;REŽiōš!–/8ĢĢ))ũāJÉ>*˛°ŗĶ7ŪMv×hĖ“Ĩš>bŽrT Å%ÍĐf‰Đ­<ģ„•î&3Åäŧ˛9,#ūč=‡_ëMMŅ.Ŧį_?}’á&R@SÁžzž‚ŦŪęvļvMyp]aD˕VmŖ×š¯ŋ`×0Û4„<đųņa““œc¸â•äõ=ĮYX–édķ!}ņI…A)ĄZmˇ1™ãžÛw—8”™0ß{%ŗģ>ų¨m|QĨ^]ÁŊÖãsū¤ųnČÎ@b1žŖ=ĘÛÅ,ōL"Ž5,ĪČčŧ–€P>Ķņn?zžEÁē æ^S՘÷<ŸÎ’ãÃZuÔwąČķ‘zë$¸˜ä:ãk/Ą•:ĮÄē^Ŗp–Ö׊ķHžbŽÂ7Žås×đĨ]~ÉæB—rë!de`§7CĶԟŧEĄYAĄÜ5Ė0ų*Í;6WЌķĪ<÷¨,|/§Øj2^Û “s™"gō•R8Ī4õņ>˜đZˎ ŅŨJbˆˆ_ķŒ—ƒ‘Ū´äšŠŪši8Ŗ]ÎÎxžM+°)ęZ5–ą,xŽínwÆĢ#  ũîäzÕ'đ†™rí#A6Zāܐg}ĸCԁž3ß֟‰´Ųf{ƒFžaiats€Ë‘ČĪZqņeˆŽãzĘŪ?1ãh_a?x2E%Ė;"æ­¤Úk–ezŦb,ŦĘŽTœŽGŊG…§Gc5‘€Ë ĀyÆiG“ bsĮoJŠ/ŲO{il†]×PųĐą…‚ēí pqÛ#ŠÎ¸ņŪ‘„—6Í5ÉWT*–îŋyļõ#ˇ?§­ ŸdK iˆQsŽC$îĖČ?‡q9Û=ęTŅ4ä¸ļœBâ[hĖQ;ĒFÆqé×ĐU9]­Œ~yũîĸąŸ˙ŽŒļ §Ĩˇ• Íį&Ų›r7LŠÎG•ut-9Řh6Ne…™ˆ~ä“É?Zš*4ҏY\+Ž2‡uõÉxG]K/YKw<ŗÜO<¨‰y$míĮ'ĐwéM]ĢÚą ÉqŒIÜŖéX‡Åzk@“n™ŪHü•‰™÷'Ūāg§­kCwļ‘ÜFÛŖ‘C)īČĨabKcˇŌ”6G gĄÅ`CâÍ:æūöÔųđ›F!ÚXYW’sŽ?ĩŗk 6Šy5ËÉæ˜Ļx<—Ŋ˛2 p>ÔųXÎÜ7'9ÁįšBrÖĩ‹˙ ›åŖ™eų‘¤* rU‚Ė1Ā÷¤ŸÄZ\Z‚[ũŦŗMnĨ™@oēI=ŗJĖ ­Í‚yāSwœ÷ÆyŦ­wZˇŅ4™o§2§"ÄöĮøšŖ˙ –›b÷†œeCBã?6ßOīRI°:-Ė_tíŪ‚ĘĮĻk$øƒMKÁlĶŋ2ų>aŧŋ3û›ņˇ=ąš§?‹ô(d’ÖKÁÉ|†ųmosŽ=zSŗėĪ9Šrr1ųœV^ŦōŽ•vmįd‘amŽ{zĘđæŗˇ…t™/Ž%–âxwŽIõ<OqÍm\¤‚Gâ%°GjŗÅD0Ar÷XK’Ëۙ—ī c9†”x‹N—MûlWāßå€ąļō˙ŨیįÛY°ĖNHäwÅ4œđNA+ߌ\€7™:!”C™mäQŧœäuĪ­YŨ‰{Å7 Ÿc¸ķPŽÁØō=JVk Í?,"(ÁP:iw–āä`cīV x§MŠÖæf’u*ŗ+BĘÄ1ųpÉÉĢú^Чjˇ9*r>e äu‡Ú˜ČQČĀÉĮŅō‚9õæ˜ÎT–9s“X÷ū*Ōl'0ÍzE`Ė=2@ĀĸÍėŲQ÷HāōŌGžG§Ĩf˙nXî‹^ôLŒäŗĐã*¨K‡ÖSSûlƒNKc¸3,į=°I'ÛŪ€ŨYpÄūbšđŖíߞ5ĩ`ī(Y°b‹Î`čÉûŋī ‘î),|G¤ę7‚ÖÖíe˜§˜Ģƒ‚=‰4Y††ŽO ķ{‚zŌ‚1Ûėi2[Živ¸āĨ ãĻ;m< Ø*dã3×#8õmČČÁĪjŒF2zzԐB‚z˙:xÜ1œŌ$īšŽā‡ÆyôÆiĀdnī́Šs*‘sIķį´ēąTƒŒzPHë€3ĶŪ”—ŗÔRuSéLCsŋ Č4‡œđ}čbC GaHYŠđs@ ÆÖå†ič7eI惒G^ ¤Ü#>™ ×]§ŊøŽ…8$Ÿp:SY™ĀÉûži¤w @ûÅyüŠK`O”ßL“=AīHĄŨGSQ7ŽpxéObČĀôæ˜T•õ4 ÃäŠiČ ’OáFņŸ›ŽœĶnhæí‚xíÅ0äôĪĩ0Žüũ=) į˜ bHū!횧+|¸$œûՆ*įŽ•^^‡#ëë@ÎS^ųī"';ļÖ°#PH꧝oëŠEĖgü­ũ+ 6¯˛Ÿį]tūšząØųÉë˜ĪõŠ#'Ėn8qLŨûŌüōoëR ¨ĒC÷ˇĨģĄĸ‘GÕį÷ĄcņūšĪßŗŗsŸŦÃú ô ķ]ÛŲxįQI‹ĩi6¨6 c-Āã'å]5Õéŗ’—ƍd1ȊęÁ‘—!āZd7]<‰üˇ1žÃŦ:ƒT#Ôá:5´ö–äĮ6Øá‰†Ü“ĀĐ uô‹c}}gÄ)ĨåΧ*íSæ*‰+žˇZķŦv\ė _ëLߍ¸tÍe›CūŠ.'Háž3•2Ģ{gúÖŨëbÛÍ}MotĶrŽŅ„[v]š Œņ†÷äRŗc;…p qŸÂ”• 0Hî+ÎŪK‡Ņ…¤šō¤zÂÛ46Ų|§a_âÍtļrëëąéņ[#čđÁąŽä“tŒā~*N m’?‡¸ä擧ĄúTÛNAāzqP•ŲœqëR1šŽÄTdm§’@Î0sHOĖFŪé1‘H1ŠŠzŖČ9īŽŸZēŲašĨyÄ ė*%ąpŨœ:ƸųŊģĶĸ98ÆZk´r)Ņ ō{w’:iF9ė{RœĮųŅ‚ŧžéĮŖc”ÜčOļ iœuė7røöÆößO¸’ÚÚ #’EU–c&´|!ksaĨÉk}g$,.$‘K`UØ‘ĐščUJ|ØnäÖD>)ŗšŌÆq؎öäÚ dPUÃķsĮCWw%k KÜĘûü~ĸŋŲI$ē‡Ú!”áK 0ēŒgĒ +UūĮÔíÛM™Ĩ7Âî"·Ė”ダ~_Öģä\ävĨÚ§îž;šØŦqļz–§&ēSJš¯l8YĘrĀ?ĘpNÍ[oyŠø~X^ŪKK‰mšF ˛É ãŌ­ŪjŲÎ-Äw1[Æd*BqĀüMR‡ÅVw1É$6ZƒˆË)ÅĢļYzŒŒŒįŠ5k`ØÉWŧū×đíĩîžmφ9”ęĘØŒŒŸZ§ŸĒÛÚé6mŖ]°ÔšWut*Ņ’ä3ūĐë]k]KX°’[kˆŽã…Ĩ\ž<ŦíĘ0’A°éŽ3ųSæ ĨŽ‘=•ėĐ^hĸííŽ ŧ„ÍŸ˜Ëė=*Ūĩayq­č’Ão$°ÛĖŌLęĘ0 O<œ×Hgåõ¤“úŽj\ĩ¸ĶÒ%ˆ‘ėc–­ĖČÜ0„qŌēŊ3Q:‘ŧ…­ĖKk9„špÁØN1Øgĸ ƒ’AĀĮ4ųšĐHĮÔė§Ô4{›Eh^>HÂäbšĢ; uu-)îtčãŠÚÍ흒å[’néūĪOzîÛi(úVNĄĒ‹Kä˛ļ´–ōã`–Hâe\eļä–#ŋAėjSč3™ˇŅĩ;{ ÜX‡kŸ2bŗ/ wG¯ ŸÂēMR7“Iž96î0[ųMhV@:P*;¸bģļ’i6Hģ_aÚqߞÔ7}Á~‰ouĢéž™ėžĪ”AÄŦę|ĪŨ•@9ÁČ'8éV<7Ļßiëoi{ŖZîĩ,ũ] aÎÜ Îã]&›e—c •ļ˙"%؁ܒč2jg8$œôÁūt9?oˆb‚ÎĐéŖŗÕčH.S÷ĒY˜c=>÷zéŧIĨŪkz%å„"y#F@Ũ úqÆĻ˛×ឲûTv—;~Ōm™‡ †Û¸ã8\÷§Ükkĸ–‘Y\\č’˰îäį8Āü(mļ ‹Ģ]c\ŌŪ}5,nâxĨ|ęË##+ōŽāuüĒK­*˙V֞ō{Sf‹§ÉjĒōĢ´Œį9ųI ~ĩÔY1’=;R’Ŗœ€~”šģÂivZüWúŪhÁ"ąļkWeēFęnúŊ>´äŅĩˆŧ-‘´Oļ& .c‡ÎR$_8IŒö=Ew2 Ÿ+[+¨Íy8Y÷!ՀžO œz­}kkŌ%–.¤Õ~Ņlžj䂸$ āœnČ8āæģUl†įŊjíŒ‚D'GũĶoŽHØŖ!Æ2#ąĄL,rRÚIw§ßÛ[XÎ5(nâŧ–9Ų?zKųH;G F=Š÷Zn­ŠÉ­ĄĶūĖo#†HZGF\ĻÆÁīĨuÖļ°Y‚°Ģįsģ’ÎĮܞM?Í-ČR1Ķ&›‚Į16˜÷ē%ÂIáčíį“`x`L÷ƒ2#&­iVúĨ¯‡_Ë _Ē3y˛€ÁFN cƒĮ^k^ūäŲŲÜ]23ˆ#g*¤dāgŠ‹OŊ]FÂÚéPĒ\B$T~¸#8ũi]Ø,VŅįžŧĐ!žú8ÖæElų`…a¸€pyŒÆšMJÛQŌôj›Xåˇē¸ĨȐ otJžx=+žÜ28õOQąĩÔ-žíŪFāÄ+”äŒãߚjV`և9ĢiÚĄš×ŌÄÜ&ŖhąĮ ‘@FUa‚ ĪqÍi^i—Zƒ¤°Hŧ‹Ļ€"Ŗ°ÆåĮŒđqúĶ—ÄvF5Ŧww‘ä5Ėpŗ¨ מ­õĢ6zÍŊåüÖļ削$”ŗ! Uų46û XĪēąžŊšûcYÉ‘c4B"ČZGp>QƒŒ u8ëT!Ķ5n|*ßŲŽÂŽáƒ§ČYôĪ<äņ]›($~•Žé%s“ę %>ƒ°ģļ‘œûŌ† ëČÅ6HØí āŽsJŦ?1Ī>ô†+)ÛũsHƒ#iį֜ ûÜgŊ œįŠvÜsøSxđqė:Sđ:៭4ō3ŸÖˇķíM wJÅIÆîE0uížô h¤äQMĪ8įԟŒuūTҎ<¨˜2@Î?LĶz€:ôĢxÜŖōuî 08éۜ~ī§ĩ Ũ“ÔP~t==č3ģž ĪĨ“׏ãĻ(ŒrŠ oŨęráA'=O”ŒFpZO”ōh(S’§æ>´Đė Îr)ĨF1ŸZBAaĀĮ­!Ž9Éëî ¨_ƒĀ9#֞vƒ×56ãĪåŠ`4ŽĶž˙ZßžØ§ļ9ÆMG&3üYĻLŲę0qQ3­ßZ‘ØnsõĒō2pOãLs^?ŧ‡#€ÂAĀôÛũkc[vķ#ŨĶqŦĖeGĀ™Ž˜i n1x¸?õÉŋ­>0C0>‚šĀ}ĨGũ3oëOFųĻŅüĒÄI“E?ĐŅHgԕåž7˛ēšø‰ļw›€MŽ˛.?ß$WŠW ¯œ|D´8}&N}q2ë]užqĶø‘¨iˇš–ˆāŧŠE™dEĘ̃Įō1ÅR˙„jIâvšÔĨYÚãí)5ēÚ7Û´ã9Č#ąŽˆ8.^Ŋꆭzö°D‘Hk‰–Ų†B–=q‘œMy‰ŗ´YmV"X™æ˜,%IlŗˇŨMečŗxZÚÚîŲÕåļX§Žrû¸¯'*3ž+V ëxÂ[\^Å-Ō!ŪĀm @ųõÆxĒ2xŖMû-åÄ3ĩĀļ€ÎDQŸ=Tãž{Žé+뀗ūŊ%Så°ˇp\HÁŖ š€Ā'=N+V—ĘWèÜcČÚĢéú‚ßéņŪ$3ÆU(ߑįé\—‡u×TĶ$—LOļębėÉvÍķ¨Iė#Û ? VoqËö?ÖĄr éÅIģ<`ô5œcŌ¤Œb‘‰ĪëK“ÎúQ hdRč29UKž!sWų}ĒéÅŗŸjÎ[Ãr™ ˇŽŪ†ˆŖÛ)“/ķ xüŠÅ—h yéJ§hėīY&lÉĐg×éŠr‚?éL[=9ȧū5hɈA#ŸåGĖ89” āžŸ;€:šĸF„c'SJô}:ĶF_ĖSøÛԚҎƒBzTĢĪ_Ī5#žâœŒs×隤K,'`{šG$BūYU8;KįëJ„18ĮĨ>UFl†yڟRN7Aģž7ņCsŠĩčšŗyZEQå‰ÕsĀųpŪũ*ž›wĒĮmĄjręorˇ’,3ÛɁķgæ\AįņŽ–Kŗō^nĘÚ~eĪP2ú՗áM´Ũ2!wd°^Ģžæ%[Ģ žÄ ŅĩkŠÃô9õ=D苸ŧ†žO6"Ųڀ˛„o`IõŦ›6Q¤i8ä&ŧę餟ã]D:› ķŪĮh‘Ī)%ŨxÜOSŒã>ũicđŦ?aSÉæ“€įøēõ÷ĨĖ‚Æ}ĨŪąĢĪ4Ö×6đŦÆ&ŒœíÛ÷˜sœ÷ŌgØü+;ûKmDßÅÃēCÁ$t$t$qÍj@ ŸNj[žÃZ—É€5}m§—B$xŽ †EĀ+ÜgU|2ŋØŪ´¸ģ$íÚæbG?6\ū<ÖÍö•aŠŌūÚ;„@p˛ō?*zi–QYHām\1/ ‚0F=*¯ ēœœšž¨tKFi-ífē ē.ŨŅ<„u?îí'>„ņVVMPŨ˙ei×ēŗXÖKŠYw;0 ŒIÂzrIę+ut-*;h-–ÂÜCo –$Į ßŪ÷<÷Š—KąkÉ.ÖŌ´H64ģ~b1ŽŋJwB)h÷ŗŪŪę†iž[yDi´)•Ãwܤ}*ĻšŦ5­âZE"ÄDF{™ÎĮpŽîĮô5ģceiĻÚũžĘÚ("'”03īUįĶ,n. ÄÖąI.ÃgŒ´öĪâ:WW8Pšd1ŲK_j-íÔėč .@$mŨķ čqƒÅw:}ŊÚi–ë{:Ívą+ Āfî@ĒĢĄé§ėäéöÃėÃf!ō įĮš×\`‚ø“ËųTፍRBŗ8kûfĘĪ\‘5ëŖũ—t‚=û?x)*ÜsׁZ—WZŽĢâûuQe%ŧqũœ#;†Kā}ū˜įÎē™|7ŖĖ’ĄĶm™f`ԃÑÜúš$đū<–ī. n›"i# Tƒ&‡$+-õÕ¯![Ë놷žt†Ũíä á~h䏨'Ž~•Ō^ëÚu†Ģi§ĪpæįRíb 'ŽqžjÁŅôˇÔVũŦĄ7c¤ÛāqŒũqÅ:ķL†ōęÕäfōmœJąiF'ž3ĀõŠm1ÚġėŒ6Æķ!që^}ĻßĪ}Ĩišŗë—Ÿn›QHĨļáÁMƒĐ ôr[§Žk—×ŧ:ŗ^XĪĨXÚ˜oę垍ĖĒã9'ųSƒ[0f-õũÕžŽ—ÔŽRæ×RHā&c¸+lĀ>ŖēÖÄķÜßÜëÄßÍkũž‹ä,n/î÷īaü@’FĢuá­ōi..´Ûi&”#•Ë{ՙ4=&UPl b¨#ođŠ}@ô4ųŽ_NÖĩ õ+;‹‰IY´Su%Ēā.đWwÉĪ­Ee{u<žŧ]^i XO ˛ė˙Vͅd`ŒWbÚM“ę ¨}•EŌĮå,˜ä/§ŌšËí[x›IŧŌôˆÄqHīs${%”¯Ô‘œŅtõöĶė$MBW”k j䁗ŒHFcĐ}ękiõNęæh/’Ũāŋōŧ§o•#R8+ŽKsžõš/†tYn$žM:#4Ž%fˇ¯$Ú—.¤šƒØDnÆĶæ•įŽ„úãúRmy‹(9ĮÁč3É…txaē6ëqq:¸N$` Ÿ—͐ 'ĩw“ÁÄ/‰š$Rw}āzÖrøoF0à i–ū\NdEŲ€ŦF Ĩ’Ô[Ãw÷wūąē¸”ŧŌ ø<ã'đŦÉæŋŧņVąĻޝsk6ŅMQÚĮ99+’ŧ?ZéŦôû2†ÎÚ+xË)āzšį×Dk]j7zdOhöérHUūe'œuĶWcčQĩŧ¸ŋÖô‰&ũŨÍÆ“#;/ģ/#ĶÖ ˛Ô$•<1x×h÷3¸Ÿî‚˙#dœt?*ĘēųtËŧKÆļ‹í(FŲ|ŋ˜{gŌĢŽ…¤BâHtÛPâO7>HÎī^{ĶæAc–šķRm7RÔSX¸k›-EâŽÛr”uB dä*{íNæ-i _1TÔ"ˇhÕąŖ/Ė­ž­Ôätâĩ<5ĸIowŠ]jt1ÜĪxķÃ( ėŋ‡=F9üëVmLšIm>ÚG†v0Š,GBN9ĻÚLNJöKŲŽŧO!Õ.+>\1‘ē,úgƒ[žˇ1hvŸérŪ°mŋ(ųFĀĢë§XĀķēŲAœ8ˆĀߞšãš’ĘÎŌÂÜAgpB9ÆĄG'š—$ĘG#Ŧ] B}vŌįP’Õlá8c}žb´y,Ŋ“Æ*ĩŧ÷RIŖiŅ_Ĩ˛)$PĖWĖlc¨<íÆqī]ŪĻ_LŗŨY[O*ŠU’D @=FjĐt—†dĶėÚ?Õ#FO§Ĩ>eaYÜæĩ[ÛÛÛ›Q•í„pÁ,ÖŦšYXũįēˇéÍkøĒ†đļĻ–{–A `)ÎGqųf´įĶŦ'•.$ĩˇiŖÆÉ `•ĮLĩĩ0ˆĨĖ´ ^žÄøVÉā‘VÖ;uÉÜ\›?ŽsXšĖ'ûGYšĘíí~ÍĻÃ"ų €qŧ¨ú` ę‡4´ƒĻÁæ[÷|1õ+П¨ŠŸIͧ’I^ĘŨ¤”v1XzZ9’w 3Ÿ’įQÔ5gĶmīcļōėŌEŨ&ŨĖųËt9zžûUŋ°{;!as{)ōŧ˘ÔŗõČõÆ;ÖÄÚ&“vĐ ė­d˙,[ŖOaW6 #*Ŗ:qI´4DņîĀßŅąĀįā9Æ?1R0_ĀžÆgįžM!Ü@˜ĮîĐģ”ã }ņR° Ô/Ž Ļ“ķs´{æ€ XœņŠGSˇ?Ĩ)Æ:¯”܃Ā*Gԁ ÁĪąÛšiSž2yĮ&¤#=‡åM*ÑĶéր’;gņ¨Ũšú_éR0= wÛQž{*ŽZ28Í0°É$âŸrM$ĒW8<¸ d} ‡éI“ĘãŽŊ) ‚sƒī@PyČüčv˙>”wcŸĘ‘Æā Æ~´Á÷ŗŸÆÉĀqM9ÉÆqžÆx;FZiÚr¯å֘UĘōÍßŊEŧR:uŖ9qΧZˆė1@ĐgIŌųôõŖyö¨ˆläûfŽ.ŧzšŒœ‚28Ļ““œvįÆr0˙ČĶWåŨiOÍq<Â›×uJ˛Iŧßz* Š)ØW>ޝ5øu5‡ˆtûˆŸËŨĻŨ'™ũßß[äūæŊ*¸o[Į?Œ<<&$…­/ŖenAĪ’z}ŽĒŋ9!ņ#‹×˛Ķĸę_ĸÎōũ˜ĖÃzėjļIÜ3‘“ÔÖ׉ž8×HvF%/âmĄ 0AØŦQģ%ŒapôŠ3éLLíč:T€8­°Æë@ÆyĪåQČû\ 'ųSÁÆĢ qĪ#đĨũ=8σĮ sГN=Lzæ€3ÎqԜvœ Ôc‚nø5 ûï^ĩH’exüŠ×-Ϙ+HQI¸Éã ÉÅF ‚AT˛.čØ GJ¤&cé~'´Ôâ˛híîē2ۊ1°€ÅšāsMÄVWwĸŪØLå‘äˆųclʧ ´įąõÅgxÃ÷:FšŠ\ĘŅŨÉĩMŲÚ—údųU[='YļÕ,ŽîÍüŸ9$įîģČxéŒ~ĩmD•sløŠŌX,%‰'XīfōĸcGä79uŠ‹âģ7šH…ĩŅ™'û9ˆF7ÆrsŒsšÂūĘ×#ŠĘŨ!´xlīšážAu%ø#oßīS^Øk§Ä1ęļvļŠ$l#ÁŸ‰!Ááž_Ŋ“סrÄ5:ËĢû{’i˜üÍļ4UÜÎŪ€w5ƒĸkHš§‰/nŪk{hZ˛|å>Nx$ã'ŌŦëÖ7רÜXŨ¤âeŽGų_‚ĨIíO5˜ú>¯Šk ˜mmMâBņ˜žŲ#9Œr3ÔԊVsxxŗLUē4Š$ &Đįį8\m$OĢpjIqn×ŗ"#xä„Ģ)F=~k[=WPŅ&ˇģŌôŊķí LÛ\ÉŨ´`÷qV4-?T°ĐÎöQspĖ{¤-„ū/ŽqëŠVQđxŋJš­ܕšÜ!oŗžŒåGxéSé“i’ŨĢŋ–“] ¸“8Û´ķžEbŲxV†ËAˇ‘ms§ÎŌĘRSķ |Ŋ~Ō™ƒĒKk~ސ †Ô>Ûnd|ŖôXcŽüũŠÚ iŨxO{'o:ę/.xā”ÄštrAPzŒŸCXÚän&ņ‰Žâ`>Å ‰ļV0ŽNßNGJÕÔôÍWPđīŲÖÖŌŪįΎALv ŦīmëĮĨVÔ4^úmvDû* NŲ-ãũķ|›A#o}ƅdÖėô›hŽ7ŗ­ĒĘęƒ%P–<ũ}ęÔzõœŗaĘæØ]G˛2wÆHåO~ĸ˛%ŅõKkč¯#´ąŧZGmœÔš6̧k˛Eö)l¯%ķÛÍŨæFĮ€ėz{TwÔŽ ņhm•ĩ'NéOĘįåëÆxõĄ(†Ļü$ņifÆā¨D>zŽTnĪ_AĮ_ZąĢëPi+jōĮ+ ä Ž"ß1éT Ķ58|J÷ĮėÆÖâŪ8å]íŊ7tėFMUņļøôũ>XŠoP€¨rv“¸ĶžĻ’IÉ!—müUg5ĩäĶ$öÍhUe†xö¸ÜpŊûįŽi’xĸŌ ›éĄš‡ėrųSÂ@,¤ãАGĖsUäŅu&‹PŧI-FĄt‘Æ˛cDC“É““Î8ãŠĪ›ÂúĨ֛ŦZy–J—ė$OÛcaA‘“ƒžųíEĸU–¤—öžxŠâ XŽŲĶc ¸5mâX/ rÅowöF‘Ŗ` „Œķ×v8<㊠Nm;…~Ė8BHĪ|\Ū…ĄjļvGI¸žŌM.=늜Čs€{ g¯ĩ%m@šÚܰōâš@ņÉ$^Y ]S¯åsÛ5gÃúķkzzŪ=•ÅĒ• Ģ'!Á¨ô}#Y˛°ūĪēš´{XĄ0Ã$qˇ˜Ã]Ũ¸™ÍOáÍ;QĶtXlun^Įä‚€c-žôß/AjBž.ˇ“Pkh­ä’5œ[ųŠrwį ×õ?Z…ü] ”ˇöuâ¡diˆ]Ģ&@g8ɝIĨčē–“}r"Ŋˇm6IžqÆLˆXä¨lãĻ _˧\[›ËmĶ_‹ÍŪ[0ÁļõõP3OŨ J~.Õ^ë[YÉ*EŽiFØ‰ÉÆFqWŸ\ŽÎō×KŽÆæW0G!hÂíDČ]ēÛéUĩO jˇÚļöēēYęvŽX‹2šz ēšŅÖcŋ¸š€¯ØūË"$dg'$‚Oß-€ŠE*ÛĖ-ZÜĘ!ŽpāåŽ@Ęõ‘Á÷JmyėŦ§žĮLžIŸTû4‘É89c€HÉã=fŽYøbHm-4ųnŅėm&YŦX‘ö cœqĮ=đ:Trxbõ´ûˆŖÔa-¨‹øŸÉ;Cg;HĪ#ŠK”ÍgÔDVpÍy [Ë#,kmÄ1č8ĪįŌŽŏ˞:Ē:ŧŒšBÃcu*ę¨Y#‰vįžāĀá{úÖĢ#¨$›ouĀ'ŪĸÚĘZøĘŪęŪ9˛¯’&š6ŦøRLāķw8ƒÖ­[xšÎ[ۙ-§ļk)|Šĸ‘FāĮz9ČīUbđŽĨũ’ļ}o•Ô~ŪH°NíÛzú÷ŠåĐĩkUÖä´šļGž•$!†Đ0'ÜŖĄ5oIą/é8=–§#*GO\Õv#¯4‰ŲA$uĪ#ŦO#>‚Ļ`9†G=jŦÅWŒtÎjŽ{X}ĶB?Ú=ŊĒĒũĐsž~†­jĈ@Į •VUÃ(Œ°Žˆü&oq~úĮņ0¨†wGŽ˜ũ*elŧ$ĪNßAP)owúÕ"Y.īaEWķ֊,+ŸX×ã#Å“ ô¤ ûÆūË]ĨqŪ4@uŋ ɜĨĪ>ļōũ–ģ*| ä‡Ä€0í˙õŅķ‚ ‹1út§:–sĐ`Ų¯$îĨĪŪāfŒāgžN)ę…~ķ““‘íOXō9=É4­pHØ8ô¤"3#2GJ“ :…ähaŸ¨\nj°\⁎r@ÉĨ~v¨ĮįJqĀ=Š iáIAíMsø{Ķûãˇjųįņ¤ØŅŒŽųĒW ũ–LŸā5tķéīŪŠŪāZĘO?)âĸ[Cs7!GĩMÔÎĢŖãn{õöĢ(āķëĮ‘ĐËŒIüęAĮF<ûĶ# wN9ãÚŠČBbzæ”NpiÜdŠųHŒJ˛GŽF ‚qÁ9ëš`Á^Ųô§)¨^;ĶBž@íÍJ§œāņQŠˆ÷æŸĪ÷zcî"`Ŗ$w56ßģž3čj!€ ųG ¤žš0iW3Gƒ"DĖ‹Œ’Ø8ũj‘,–E*ŊzõĒsnVyR0rAÅr|ë&áËë§“Uš¸nžrĪ ųÆzON01TĻ‘bĶ›UūŌ§‹XōÆnß/ÎŽÜā¤Õō Héĩ­I´¨ `ķ•î#‹ö…ŪÛs͜fĩ•Ėx,Œ˙ sž5ōáŌac*¨[Ø †ĀÎ$ųsøV<×KuŦj0Üëcš9ãû>N•… §ĖÉČ<J7Wõ= BšÉ'Žž´psũkÎõŊKė‰âxP‘R9mÎTŠ+ÉNsŒįŽ•Š17ž(ĶmŋĩnR,ŒĨ`ŸhfG\wČ$\SåÎАŦ:āū”í¸+õŽÅĪoáB{[‰!’(ŅĐōäsY֓OĨg$¤×ŪZI$Ūs‰&PtsŒT¤Ú¸\ėž\'uâš9|O¨Ũ5˛ØišŊæŗyn6īTë¸c‚r0=ųéYÚUßÚîåŗ“VšHŽtŅ)s>79$PI*į…WŌ$Šŋ ʲŠs§Ë¯›02ĨZŠęKgĸ…ĘneÚØŽsOādãŽāWáé_Q[[™5åŸ9¸ļÜwŗķ”`[€§ĻéV5¨WÅŠaŠ^5ĩ¨˛ÂÆs Ë&â,É ÷ÍMĩ°Îē4 6ƒ€iZ<˜įŽõįˇsųēģiķëŸf€YŖZÍ$‡÷™Îd Aa×=kOÄķ\[ø"yĄÔî>ŅH~ĶÚdé“ĮcG.Ã:Â{õ>š§Ŧ˜`9āŨk€š†įûbūÄkē‰Œéĸė˛Ę2$ @Į sP]ęŗ\ø{F’{ų|ųtæ•Ŗ‰üļg ŋŧ.Ž|ô§Č+ž•ˇ—žœŌr1÷<õŽ"ģN†Ôg sa!¸Js¨œŽų'ĨW‹S‘´*+Ëų…ŗßMo=ËKĩŠŖ>Ā\tÎ'ÖŽV|nįzšwČN\õī^vnEž•ĒËŖp`ļÕ!ōåûS6ÔũŪņģ<Ž psSK¨ē?‰MÛLéoÄc&Âwoeįų{Rå ķāŽ~^:āU]Fíė´Û›¸ÕĄ‰¤ Ų€3ÉÅs~ŠÂKû››-^;´{uSo|ĢĪŪ ą;ģVfˇsaqĒk6ZÕÃD#ˇCcČUJ”;ŠúļîáBŽŖ;-ū]KH˛Ŋ•â••‘œ ]RųôŨęú(|į‚6“Ë/´0'žk€´Ô­å@ˇšÔ­íŦN˜6<Œv4Ŗ‚C@Î3]%äk€î!ûc^*YHÞdNhqŗ ·NŊūĐŌínˆ f…d*Nq¸gõ8u ŒūĩįL!K[ŋßÍs+iîn-üķ*Š‡ü§v>ĩ?†ÚŲā:”:ū[ė,eˆrÁąķ;‚Ä–SôĄÄIž€ (H#Ž +#“ŌŧĮNžŨõ Û4š}—ZZH˜¸;å“ —qÂ@õįtÖÖŗxoīüŊAŪfq î|26‚q“Æ{æēÍ4¤}ô–z€ŋPŌHŦ+ Ģ׏lšRVŠŅīRA=ĮJōĖ:ã§ŊpŪ{;čŦŽ˙ĩIÔ#ÍÔ ėrÄ|Ūfy8=?JËŌå[X|3Š6Ĩ+Ü\Ũ43´—,ÁЇ*N1´rŒīĩ-LX¤j‘y—J"‚2ÛAb äāā`—Nžî}>)/­…ĩÃæD8SŸ_ÖšŸ‹c>ŒnĻō—íā|ŗ2Ĩ['‚;ãžŲ÷Ŧ‹íFŪĀâû"ßQXåržZ˙Õã<¯}ĮŠ=é¨Ũ ŗē˛ĶŦ,ÚÆÖZ^\ĸãw×Ö­– <ķÁ5įo¤ų^0:JĮ(ˇģ’;ÔpÍō"Ū€įĄ;īĒ{yWēŪ§i}¨‹+˜§AhŒ˜aÚTÆIîsž)rų…Îîb+Ÿ\y`Xņž{Wk“Z؝Эn. I˛)mciH;ŠuLŸ\ôĢrĩi˙ÚRˆÛOĸ+‚ĄäGt<÷ĪŽ=¨äęĮlķ˛DåT3*Ÿ”ô5áíkûoIûcĀ!>kÆ6~éÆsøVNˇukļö­ÃAi-ŗM.+š|>ĐA=׊8í9#¨ãđŽ ÃQXŪ_+]ŪMĩ ä’I  Ũ@ã%6öÎ* B"Õī XC Mâķc#üĖNÉęãi¸Ø.vŸhRIvQÜgŠS2…Pg'æ÷‚ÍíoĄj˙ÚëŠĻŲd‰šC2…ÚøĀ]ŧc5?‰VĘŅ|Ok%ŠiŽ9āA#;0\1ÁÎhäÎũæXY72 ጐ3ÅcÚęדøŸRĶLp˜m`ŽHČo™‹g‚z•ÉxĸâÖIe’įžAi ‘ģFXF“˜đ88ęrJŅ3ÛŨkž pXE6–…ŠCõ(uÎÎ+ĸË N+‰p‹x$Ôgž3R9oKw9Ž ĶĻÕ<.פ6ũ/6ō”Âđzõâ¤đéĩŋšsy4Zŧ725Ä}İäã%pG|p)rõ ĘÜ&ũžbg3R€Įšķ[8ü?mâv–V[7[hSīI4ė@/“×ëõŽãOÕmĩI/’×Í g1‚Mëˇæž´J6GfĖ€ĀņéU^Y—÷`—8ČSVHR3î)Œļl8 ƒøTŒv9¨˙vœØČīœQü'œįۚs¸ƒˇ§MÔ°3ĪåL,7dn… 3ōãĶ4Æ+œ2M0Ä`äāž9ŪXž9˙z¤ÜŒôÆ)Ÿ.?•5‰9ÆzĶ2FFĪŊ;!›>¸¤ €|P2"Ãp0iŠÜāmæW?1ü3Q’ŲÉĪŋ57ÔŽ‚“œô=6Đzg}FE7y9œqœĶ°H#ī֘ $Žsė(ÚOņ1JSĀ÷úõ¤qōįĶ4Ŧ Q€ßFăƜ}jGnsÁã‘PŸ]Ã'ĐPB9ôÉįĨFũ:)õ9§œ}Gĩ4ž‡8õæ‘COQĮˇj#;r=ĒR6ŽâŖ=:õÔ2ė ŧg×ŋįKqkĘí¸ˇŽ`§*Aūu¨ĪkĄËwâĩēĨé…%AÉ$÷=:önmmWžĀÚGgöĩu9ÜšÆÜz憯ĒjæÆŌéí°Ë°‚žbÛôČâqkÔb;˜"š<įlĒdtāÖ&Ÿâ•ŧžÆ7Ķî PˆÉo,›pø ā’=jOkrč~ēÔaˆ4Č FHā18üéYŪÚĸÚVœ9û¨;vgË_ģŒméĶĩ$zvž‚%û ’ŅíŒ|„õĮf°Ŧü= Ƌ—W7oŠM-z'`áČĪ˃€=:Vsę>Öĩ›“k-čKKiga(]Ē‚p{œīO–û0ŋsŗ]>ÁL^]Ĩ¨1ąíˆ  úqÅIœ6ī6°Į9(ąāũkûĉktmĄĨtļûKøāũĐ89cƒÅ%ĮŠ–ÚDŽ[)BIh×jÎáIU•Áä0ĪJ9X\›HŌ§ĩŸUûZÛ4wr*ąlĄv@ô_‚×N‚åDq[E>Ė ¨ĒûGôŦŲüI=Ŋ¤Rž›!Û5ËÄ\|‘Œqž…šéTÆ~$[]Dƒ÷ÚK=ÛįSĪāhIŊXŽu1CXbDRy€~4KmޞI9^…3×éGšØR@ëŽkēņ=újz†aŖ›Š,‘$'íwĪAޏ–ŖØčZĘÚHEģZÂŅĻ Ą@@ü*Į’ G# §GĻ+›ļņKj é–fieļ,’>Ā‹¸''9ö5—‹ŪūãN‰,ŲEëË of# YHĮû=sM&#ĄHa€‚â\ōŸĘ›­´o#¤Ŗ?aĪõõŽzĪ…s¨>š<Û[¯w|[ˍ.”+p9ĮįŽØŖ•…ÎŖė–ûdXíĄÛ)&@ą 9õ>ŋ61gl#ˇ-aÄq`.ãčsķxļDŊ¸‚ ˜[JĘ#,Íšą .>\ķ’:T^.}ˇB–(RYSQRŖpŒHÜztũ(QwÔ.uE#Ë2njõ!?Z`‚ ŋęcĀä ƒÉŪx„Ka:_iCÍˇģŠ mÚ~æRŽFHüĒ{ßIm{s‹]‹RĢ(@û™› …#€sÉYŌyi&wŒŒã$üé†ŪîÆ™››`É#Ą>¸ŽwQņmŤēšÁĨŖĶÂŧĖf ō°Î@į'¯ŖŠkMŅ$Ւš$ˆMŗ![iõĨĘՇsD¤k œíۊTHqōޤdô XŌŪđEqG"ã) ņėk›¸ÖĻē7]õ€ˇû]¤’@|Āâ@ āpyǚ&ą>—á ";{9͉—sžÄ$ÁäįÆŸ+°ŽuSØÚNėĶC°rĘíôú{TrGcg™üˆcŒ”(QĶđŦ•ņ^Ki¯›quj.Šŧ›ã8<“ĮŠjšØrļ“iōK<—3[ÜrĘŖî9\ö I1Ũ,ÖđOĩf†)•Nā`úŒ÷Ļ-Ĩ˛Dņ$,nK2ˆÆ <œŒuŦK˙ÉĶ-ĩ„Ķ4$“( ¸ä Ā#8ëœu´’ĢüÅYNÁāŒúĐî†J¨ąĻÅ01Š… œWi{q;&D|eõĮĨAĒj1éļs]Ü Įd…ęyā~9Žq§ģOØŨę1AIa3.MÅ@(NxŒĐ•ÄÎÂXcxÚ2 ÆF •ĮĨD–6Ē‹CŌ6UpGĨcKé˛Ü[Ɩú“ˆĢ’ČÅw.áŽāvčk?ū ĸĶíäąĶ#YgÔŪŨã‚ ;ŽOsƒô§ĘØ\ë>Įjcŧ%•Pƒ îjs"2|à žüÖ'ˆ5ĢŨ3ÃÂöU7dĸŨƘÉy8ĨYŋ{ƒfãNqōĄ%ļ¨ ’>ÔYÚássĘNÕ$qĪj iÉ ãŠįWė˛iƒLŗŠUž‚IžR†6LņÎ8Ēļ^)ŋ”éoq§ÛĨŊô¯nY',U×wlt;Oz9XŽtövwq;ÚÍꥒ6 ˛*×đä’AŽKÔnôx.gKH¤°“S˜LÉ&<ɡ!q‚ÖĩŖ×u ĢĻ{:Î;ĄoƜ÷gxīŠ_@š{_ŌĻÕŦĸļŠå`ōæIK÷ũĶ‘Ā#¸ޤˆJrp0ükžĶĩmOP×/­…ĨĸÚZNŅ;‡m˙t2:w9§ë:­ũļŠaa§ÛÛI%Ôr8yœ€Ĩę9ŌŗØˆ°P‰įĻ !ēņô5Į§ŠîäĶ`AgÕõŦŨ—E*7䍸5,úö­kĻA<úlbioŞ+ąŒ2ąÂž9#'Så`ubb>T%~éÛԜĘ’1ČÉĀŽaõÍkíM§Ûé0ĩę[%ÆšÂüĂ íäđqQĮâ§ģ‚Ålíî.!i¤ ųj§ih';¸ü(åasĻōĐs÷€Įzz„ŒĄTœąÂõ>ĩÎ˙ÂA|f˛ĩIeēēˇiŧšfiƒÆ{úSí|@o,ldŠŅíߘĢnŌ`)BCØûŖqÎE.V6bģˇ—Í 4n#8pŧí>‡ĐÔģ”œŽã°¯>‚āŲé$ŸPĶ’HÎĨ‰-–\(ČNāsÉģĩ[('†Õî­cšLĻŽz:Ķqh4ŠßĻ3N q•'¯-Wģ ãŪžŦ‘čjF8ōIųëÂĶH'$géC6NT/ãLnŖ+íԁ žqŸĮ4Įȝ4§üâŧ‚? `DG¯ŽOĮáN›¤îPßņ7´Lž?­u•É|Fm<+Ԅˆ Ô,䑀Î\G“]Ō؜kr§ö.œ%{°Û ]ˇ™ ÅŊs×5u#Xã@ėĢXŖÄļ뤭ŧįdŅC&JžaNArI—Œī ūtîĀ’Ų."‰yDŗ`īd`9ôŽ^ķÃZŧļš…žŠد$iUeŒ–Ff à ũÜûwޚ9ãu¯/LƒIn­m­šâi#H|ĖO„ÚØ*jz\ÚŽ‡q§Í8O ¤TÂîõ=3Û5˜š&ēēÛŽoí%w˛6ŦPFI|Ũs×ųWN$BŠČĘËØ¯JõíÅÍŽv?Ūĸh8ģļŲIĩŋvĮĖĘlõãÖļu .-_MšÂāĘUō?QīSĢĢÁR@į•]K(,{qÍ&Ûƒk¤ëļļcO]RÍâQĩ.^ķ”tÚOŊ6įÃWw/ŠÄÆ /mRؖˇ%”.FėîäĮ°íZ—‚ú;ĢImXŧ(Åg€7)ū Ou=ŗČ'Ú´Û“ŽŋŪ§w¸ŽsûPŠū;ëmN(Ž>Îļķ†ļ,’*“‚vA=éú´, NUíĨÄ'úÄ<:Ÿ¨­ŌŅž8Î=sY~ÕŽĩ¯ūŌ°Ŗ[^Én‚<UqĪ?Z{‹Č‡ZĐŽu‰—oäŧM„7'øĮ?x9ĪZŠÛÃw°ę–WŌęQ´ļÖßf`ļÛwŠ įīđxŅ4ņ‚Ī'<~t5ĖžeŒlĀ#=3EŨŦ>§ÜÛkŒ¯upö“ė1Į,ģ€nKÂ9Ղ •~ ŪÛÚjkÉavØ’Œrx č'Õf‡ÄöÖ% rZI1beeesŒaĢcHeÁî3Eíķž‡ÂŠe4闟f’;clŪd~bēä°'‘ķIĪš¨Á͝˜ąÕ Wļ—qö†„6÷|†ĘäpwzúUßëSi‘[%Ŧ°}ĸK¨b1š v3`2ëÖļūÚ Ō=Ô*ĒÛX™@úCNėLx*âM*īN“Y..ÅŅakČl†ū÷9 WQu`/tŲlî\mš#ŽČÁ"ŽīIüƒžA\íž§ŠjŌ{›4Ķmî$ˇ¸‰ķæ1Pel˙xã”]°+[øWPMãGŧÖĨ¸…íšŪ"-ÕJŠž­Âž<1x?एÕ|×Ķœ7Ų@ߕۏŊĮük}īmc‹Îk˜D]7<ŖôÆjC,Aw†M§wäRrac‹ÃWļZĨÍ͖ŗ,×s Ĩ… W;ģícĶ Õ?ˆ4iõUŗ0ß=œļ͉Ņü ā°8õ­KBÎÚ–kˆQ%a1?y@=jO>-›Ë!SČ=ąëG3Ü,`\øiīôéc:ûT×Í-Į”b„A(īëë@đÕÕžĩ5ũŽ­%ŧw;Zæ„8f”Ÿēqõ­¯ĩ[0WIâen 0iéq fQ$EÔá”c¨Ŗ™ÎÜøZIŸ[ÍöTPĨZ3ûŧ uŨĪSéQøŽÛėžÔ-ngVōėĘû™GgØqW5b{ oGļŒÁä]Ėé6å9)`AΎĨiKyk%¸v–#vb ūŧQvŦĀį´Í*MCNļžšų'¸kM?–6Ä ÜÉíÔTiá—Ną´mIž+Hžž@ÃĢ gsĪŋJé…õĢD’G4Q;U•† ô^īTŗļŠ[‰.ŖXáæV ߨŖ™ô†>¸ˇ67ēŦŅŨÚÃövÂd˛•íŽÆŦ]xzúKåŊ˛Õ^ ž†ä´!Ä g ŽnOˇ5­o}mw’ÖTnŒŸåY~!tņV›ĻÛ\[Éo"ĘnSĢ!Q‘ȝ•t"îĘhŒßhˆĸũį•SPkéžD—?mļĄŸĖA=9÷ĸíhƒC6/ ƒ-€šēkˆ,9`9äĶĨVJ,"† D,ĐŪ›Čåhr7rĪ#“[Öž™¨¤Ÿa쎟`ĖLnzgJ¸ÅU°~÷ûŧQĖÖâĐÉÖ4'ÖtwąkŸ*LŖ,ÁÃ) œ}E@šÅŊ䗩|>Ų<+îÖųV#8`3ōœ;ĶuÍ~˙KÕ4ÛKX-¤[é @É!R­Ô’äcŪˇ$¸Xãķ'’$ 9rp;´‚Ú˜ļŪŠÕė ›„14qĻÕįwVÛÙMBáídœÜf ~sÔ ã88Īj’ÛÃQÚj\Ú_]ÃŌ^ÕYLlŨĪ##=Ā5r+ûX 6w—öŋm*\û.}{TÃT´Ø]Aĩ›`!†3č­+°*Øḩß^ŪGq4xūd‰&ÜnÆ20`cëÖĪ/‹´ İ”I÷Éh*0AkbumĒę7w¯ũåĄUŸhXØgv]¸Į^ųŦßklš+Üéwj$[ˆQŲTĀ#ĄÁĒW¸‹3ø^ĘæÉ!ŽiíįŠsp—Q8ķ<ĶÕšįĻ1ŠMCÃÆúÚÎ)ĩ †kiÖāHĘĨ™Áã8øStíFåüM­[ÜN¤ „m p$’{ô­+]JÎųŸė—QˡÏzM´=nāI7Äg‚Ū˙ėäéĢŧĸĢD„ĪCƒšĐ›Â‘BöSiWrØOkEŧ “ÍF9!ëĪ9÷§ëZœ°ŪŲiļMwˇģĘ<‹šQUrI“ØuīWmŽŲb†Ģģwģ‚3Íė S잰ŦA.#ęÖzž,Ö°ŧD4C/ŋ$‚=AëYã¡Û[}KĘŧĩžYbŸČĘ퐒Č˞G>ž•­sŠŲÛ$˛Ou ,JK’ßwr?’¤¸„M¨ČG E.f‚Æ øVåėõ;9õ âúuŸxƒ”#oû_ėŠÔ}Mšú;ۋ($ŧ]§Ī1 ät"ŗīõ§ÄšMŒĀņ\ëˇ,ĄT°į<~UŠöûC7Ų…Ė>wh÷ß—ZÕ‹ęA<žiķß§T߂_điå €:ņÁëRėqČĮ=i2xéÛ4¸ā>œsHrzņØP8äzŌ•Ī÷&œryŖ=;ͧûš÷ĻF8ô§œ`u#ëMlsĪš `xMŊ}84ÌtįéHøäķĮŊ4ŨųúŌ$dįķÅ1€aĪU*Ŗ“ÔÔxÁã÷Áâ€9Ē›¸ÉOJÁØõ+Į§Đx—÷sÂ[ûâšÖ ‡ÕJŪūĘÖ OduŸN՝&#ōæíįGŊŪÖ8KųK°ČۘŽįÔÔūXüŖp9ŒāúÕsjMŽ;ˆí-5™§ĩšh†°&]¨Ā%0Į•ČäĩRIČđÖĢnöĶîWYR1nÜ)”8*:Ž5é9*H#õĨÚܜ‘øöĄLÛĮwã}EŌŎĩ¤Mo3ÛĢ"îä1Č ŧįųU/ %†Ú+Ũ?QKí6ŪO7ĖŠ)#į96ė{šô@00 ­LeRrzįŗf—0Qaol4¯ #é“oKŠÎëF%P†1ĮC•öüĒH‹[é7B;;ĄimŦ4Ō[ŦEsnIÁPF ÎĨzƒ(ėņę‚HÉ$đqĮZ¯iä8Hi’éöĶĀ.š;N)ˆ‘XÁŽÜ .Ú¯ĒEfļ^&ŗļˇCM ÂO”cđ:gŽq^ƒŗŽzZ2W#nqЁILmvW6é %΍d$ˇ*^(‡ųšáąŽæ¨ęš”úˇ§ŋĶ’HäžßxŒŧ Ācž3[ˇVŠyhĐIŸ-Æ.T‘鐕MKiqėH× Ē€; W[ÉÄöWšũĸhéڛđDŋ&6ŪÎx<ã5‡§ëúS LŠ&ĩߢÛ(ŪYP¤ã× ¯L\ŠÁV…+YDP0…r­ŧ|ƒ ú˙õꔗa4s^)ŧąKÛ {Ėą™eTFBbrT˜$ˇ<ŽĻ¯x2Užđƒ‘Ú8)DˆAÜį¯Öĩ@É;ˇ|S/e¸ŽĘo˛3lų7äŽīp;T§Ĩ‡mNB‚ŪįJĐįĶŖjÎŌÃ÷[ˆpėx+€qīŒRÅŠDÉ|Ļ\Û wĖē˙Ë ŲŨŒöā×Iāũ:ķKĐ"ŗŧd,Žååp Ī^äū­Ã‡Îā cšÍS–ĸHķnKi4Ī}“lšs$ „e ĮRoĀ\â’æ/žģŠ ŗ‰­ÛF€D~iNz}í¸į­zJĸ Ø zŌ‚­ģ F:į)Ø,y¸ÔôÛ[/ÜjvÂh†˜đ0šuYFÎÁÁųXtŽŗÂPËmáø‘ŅKHđĮ ;Ŗ˜•SøbˇXÞmŊi p3žz­LĨt42¸Õl†Œm/låMfĘũ&šÛ–lyĀīŨŽ…NM¯ę6ÖįÅVmm3>ŖwĀ[ļÖVŗŽĮzôE]ŧ–Îy\,Iācîō+Ģņ)ŠÛÃAV ~ÄĢT… 01ƒōņČĮJčXö÷⟴¸`˙f‡+†Į˜CMáją˜4Wkvˆ! *|‡*ön:Öļ‰ŠYÜxâöXa–1wo‰š_0‚Řäqõ=q]¸BmÎGĩ!Éô9yŽ?ÆFĩ=kËgžÕ'“Ė ((@$r+6chlîŜņé ~ķˆ|–cöĢmÆ@Ũ“Œq‘]û °á€ë§: ôö⒖–;ÔcwĶõÍJ;I>Æ÷VōžYėÛŊÕN8ũ*ĨôņëđũŽĘwvqŧėäÛģ'žüņëÚŊIb ¸íßS į“Î*šŧ‰ąË{ßĪũm%´˛@Â4ō„.[Ą8õ8ŦKkčŽÔ9\is§^iŗę~’ÖÍ­åE’Y *LĻ€ũ:RĮč:RnRxo¯Zc€_;€ã@ ×Ļ(=GģL,3ÉČö¤9ĪÆ}(„Ũģ9ų `$’2ŲéÛđĪ_jfōOjqŠįž{SäĶëR9āŽA?Jh'$įë@!œ6IÆÚۘú‘Č9¤QĪņųØ Ž?Fx'€?ā5aÉÛԟlÔ, úrÔ!oČöi 6Iõö§”ųpHČūķTgޤ~}((0Á}@V*pX~ŸˇxūĮsQŋ1üčŽ ú“Û‘Qųlr:)÷éO+ÉÎÜR… ÉÆ{P1ǜž;ŅōƒŒ uĄđORaCįōéÆ(ŽAĒįŽFÜwĀŠÛ*2)„eŋ,S™ņ:¨#Ėąž‰@ʡ|AōÉcœ:ˇëXŒ3æ~Îē)ü&Ü'åO`oZÄę‘}1°zũh$÷^”ØĪŽ=€:ûU#81ĪŠN܂)Cd ㊠ŖÖ´$OáÁ$úqOšĪ4‡€cß4šĀ%4„<õĮN˙Zv2Č˜#ž;õ§ā‘€3éLC׊ Ūžä×4ÔūŧŠp`n})ˆ•Ā ž9§î9,ßwũڋ=Î>”āĀpXß&†Éč}*@¤į ã=ę$Qœ’¸Š Gŧ ƒëց GB1’qŌŖ!ļr9úU°ƒ‹āGō<Đä ܑíMe-÷ ;âĨÚãJcƒŽ2G hą@9Č#ëP ĩlАØīŨ=CũE! ō‚Ŧ1ۚF äũ@Š0ųŗõÃא@<}îô€œ zTģÉNvƒØsPōŽî}sNí\s† cŽ9(ėx4ä$d6:) €FqųõĨcĮ<ņëŌ€N€O°Ĩ ŏN†ˆ×+ž:ũ)§ŒƒŽ}Ј~î¯Ŋ5[9äŸ}ԙ €OéN#Ąž¸ äfQĮ @mÄ×4n+ׁžxŖÛŸņ¤—nHë‘Ķۜ Æ?˜¨ĮaíéŪ—püčä’@ĮĶĨ&ܓËō1Ši`9yõ¤\g,ĮC@ËãŋTdĮ“ø58 #z `VRX1ÁëōĐ™xë眞ã#Œgž›Œ°åŗîŊiÁã Äc°ĀkI¸¸ßYĻnõéœu§l˙Ŋŋâh§烸S€ 9nŌ>`@ÁĪ­ ‡  úf’t%~\÷ęM7$ 2į= 4îsõÁĨ ÆÜ§Jˆn ‚¸ÔĶ€Ë1žĀSö`c#ļ;ĶLÉÄ­dmĒępOō€ˇßŪ”‘’0Ĩ99”’ÀsŠb ?•FI$íįŌ¤ä.{cšÁŖ?0cŠoB^?ģšqBŒH9ūęį§zvī—9x4€rņÎ;R>XSëíFC̜õÅ(b gđÍ ¤cŒ¯4ƒĐŽ=Zž¨> DÅ5Î8!ēķŸŌzr¤}i2t_įN%ķŒiČ˙7¨9 =8效Xƒ/'ŋ8<’?ŊŠi%TŒŸöēĐ‘øwœŧįФ rsƒĶuŠ#îgŽ2Am߉¤# ÛÔŌđOlûPK4d }1LįpÚŪŊ3IČn1Žŧ\Áäöâ”9ü¨¸†H¤—å+ˇžqĮjQĩzä~×>ĮōhĄ”6=xĻōFHÔŊNAįëQI/•Ã“ī‘Hh“ĮŽ qJrzuĪ`)Ë(m qëHÄĘ}ŗŌŽ;ŊsŠo͎¨Å)lōœúši ‚Z0åNyéNlퟕ•äįیr'Ķ­ 1´‚Üúâĸ õëũÚ~Ō'§ģSYÕO$ÄĶÛŋ=€¨ŲOCģ늘íÆrŧ÷ÍDã H+ųĐD0w}M7øÁ>ô7ĖMĮņ§Ē(\cđéACB¤däZi Á>š4ãÁČ4n¨ĪˇĨ !<œ~E!Î9~4Hˆl§j@ārzŠ`1Á* šŒāáëڞĮ>ĩã’ˇzaø‰Wbœ€U†0=Į€ųüqšÚņqßŪą\ũūz)ūuŅOá2–äsˇĘŨīū芤8@˙ôÍJŦÄ21?ķĪ#ūųŠYɁ{ ˙3ZԗSr=įE;ĪĒ+ÅŅŦž ×cq•}>áHõ6­šĪ×U_Ãڒ°MŦ ‚8#aŽã„ĀĶd2i6Oœîˇ˛}ÔT¤[#CÃōųžŌ_<ĩŒ§ŦkW™ŗŒdâŧ™nv­†ˇNįŧT ĩˆ }ŠĖsíøSON*Ë^zœuäâc' RŒg#Ÿ|Rā–''‘IŒvJ¨ĪJAר'Ŋxé@@–nũ(pJ–<Ž€ûÔg#´˜1 9īĮJ^ŖnyŗPŠų˛0}ņŌ¤/ßúš@LŒCm%ąéš{(a‚ė1͚­ĀíÅLŦ§œ~&˜˜ŒvpŲđh*IĪ^š§–'Š˙€ĶC*œ1!›ŒzĐ8RŖîđiŦ›‡U…ÁČ÷H^Ļ„2ŽÂ ¤ãĐSd÷˙bŽ4aČ üĮžę†DØ?xw-ūÂår™RqÉî.ŌWŒúđĸŸÂƒ?:nQ‰ĀÆ9Ánô•Æ ü)§r’Ŧ:{S†ûRņœ`îMžĩ @9<æ‚px9ũ(dœžM7ĪđqO-ŒŽ>„tĄ°€“ÔŒHãž´Ĩ‰\ņÍ&ā{ŒŠ@Ą āöÉëHqģéčԆ A8 āE8IČ$S\)Æ}9Í9ƀ&V=H÷íK´į8?‰¨#PŖœø*ĘČ ƒôéL[äëGË× õÉĨęI¸ĨÎp~sØâ€ s•\÷ix8<ŒŠpB§u6āpq×īt  Œ"÷éM?zžG'Ž>´Ļ<|ÁÔqë@†…Ë͌÷Å(ÉāGŊ#Aá<Ō…ČÃÎ88 ÁĀëŠP§\âš8$m_đĨåzmĪq@ČÁĪZO-KŠ8Ęô8äR&Ûģ<úsR€Aü(ŒŖpîON:Ō/Ę99ĮLŠ”¸=úzSåROô&Ž †qƒžxĻ|Á.å†`;ĐĖv:ņ¤Đp›ŠŲÚ tfĻžAų—ž‡īŧ:uį…ëH¨ųqø“Q9Rq€qĪĨ;qQ›ŽÛj7 WÔpiˆvG ÅžîšU'Շ 89čráš2}yņM,Bņ“˙Ļŗ…R8Ī÷ēP‡ÎåQŽā“ƒĐŽ´„‚=}sLŨ€?¨Ĩ`%rxëõéLrI…Į\œv ’:sŠ€3Áž´ÃÉK’GCųS]ÎF ^šĻŨŨāûĶdõũ)ī˟˜œŽCƌœūx¤Æ<’ ˛ŽOĻ*)N}GąZgvrq階F'$túĐr2ņ× zS˛Årģŗô¨ļā‚Gū=RŒŸF¤6<ü§ŨFû†1ģ=ųžvž8?Zi*yãĻ!€ew|Ųũ)Ŧ} É÷Ĩr¸ã—J`BåąÛ§ pœĶŒc¯Ë΍ ĄĒ6’~„Ķ?„˜Ri\r1ˇũŪE7~Ú2Lcį`xÍFÎÁ€?\g4įm§“ôĻđF>céŠFcĮNœZao—cŊ&0xÉ&˜øĪ@vi3ŽzqPŸ˜˜ŽqÎ)ė@p{õĒėŨ¸Sę( ™˙Ë ONŋZÄ~D¸ÉĖmüÍlë˛fŨ˛ũ+ČŒüŦ?S[Ãc)=HČĪQˇĨ=¸†?úãúî4ŠOŨŸãJy‚,õōČũMh@yũß֊¯ŋũĒ)õ­Cv YÎ$˜Ø;ņSQ]Įį^?ƒ4&=?ŗāįūŲ­jp嘆éíX~ lx#DG2ZF¤uÁųVã…aČ 3ž{Đד5ī3ē; |rä÷4΃‚3O ąāg4#Œ`pjBy§)‘ĶéMÆĐO'ę)sÜqßĩ eŽNiz ãAF8ĀÆ=MĪ€pq×8÷ũ(õ~„ŸĨ?h\€:uã…Wq_^yĸÃ!`1ˇ5˜@ëV\¨\įķ˙ ­/Ũ5.&€ŠČîjH:ô=3Ū›!Ęr:RCŽ"˛GSØÕ„íôĮĨ+‡g1ũ=jÛ"Š1ĀÎ:ZkĒ•ųīJ:‘Ī×§,#§áTH‚=Ŋ7~bĨē‚O>‚˜¸`ņŌ“šSŽŊ*€”ļlŸ`h ˤŧ=@Å `:c>ôđÄ‹ųÕ ¸##¤ ũŌ@ąMø…I€ycŪ‚G&í¤ ÃßĶÖQЃ¸wõ¨ˇrŒõ杅S’´1ÁæÆüúÔ#<Ÿũ4ėû`Đŋ1nOAëƒNS‚zŸ|âĄŲč§=<6W ¸”Č1퓎¸ŨPBáĨķI$žrŖúT‹—#ĶŨj]ĒŧíīÔ <Ā7†ÎČã,´z~‚•7lîÆHįÚĻōBĘNG=Јƒ@Ú3žyZ—8Ü ÷ÛS•8?­DŨ†@úž”1•™F ÃÛ¨˜ `‘Įj´#P@1ڙąŋ„öĘãËn#đ Žė`āŌ”SũĐAūé§PN>ęh7 ūU§$뚘)qõÆ)Ĩs× gĐS… œĶ@č9ãĄĢ"P`ŗښĻpM š ”ãž1֗'Ž~•&Ā܀;î§ycŽ@=ēâ€åˇnp:TdČĪįVđŧėÁõÜôÚ;ņ@!Ē |îךRÁ”Ž}(ŲĐĢŠÉnYIS1׿ÚŪį­J˜¨Ū›å˛ž ^”žO œķËô  r§¸~\f¤q?.~ƒ‘UߧmÔūA#r‘õ DS @Ā Q’;>”Ö9îĶ4Đp21Žü(ėH~NxôÆ ę=*2ß>@})ã*0x?JkƒĪR;zĶHjŗq'=€ÅFT?™ĄĄ\Œ §ķ€ŪŊé¤qÃ­/\‚1ëHbd uĪ|ŠCĮĘAÉöĨĀ'‡8'­P č2i€ĄO`@ɤ* āŽA<Ō)Š#ž8ÍHŨ>eĮq@€Yq¸ã­&pŧuœTOā8ĨÁ,xųģ|´€nŪUyëJQr1ôĪģ‰ū÷?ėÔjî]˛[j{ãā~5U×ã=‚æ¤'#ž;Ôepäķ“ĮZ`4’Q槊V`yĮžvŌ36OÃ&é‘Y,Bđ7+VŅØ‡šŨûāZ@IŽ.ŋpK8˙w?­63ēqž~aZĘŲ_z(į֊wëĘ(ĸģ3Ė|&ŽžąŽ oBGO–FųVčÁāįđkÂéŗCRcēģŒņ× Ü`äūuåTøŲÛŪšúŌ`Â…ÎāPIÁÆ}* Œž3Nį'h¤bO HúsšQū5#öíÆI49sA'q {’Mœxė °@'ƒéPgj“ŽũĒf'°qUÆÆM h~)<č*ŧ‡†īR0ã#ëPÉ÷~ĩ –ˇ0ܜžœ×5$9 œRH>WĮLæˆ{Պ:™ŖJe˜PVšî×'SĸéëC€['ũ*‘‹0.?RŒ.{üÕ’>^ĩ"ļ;ŸÄU’ĮĮOįJrSųŌíČāgŌ“*ßšdŠ íÜAÎ*E,v’ČäŌĸĘqĩ—§ ЧЈ/.Ŗūx4ĶN3Ā<Ĩ($ō2j5u ÆO°SN,āįūÕW$x<îüņO8ųwqÚŖ+ũāzät§`Hüq@‡ė%ˇŒ8ĪZ$$`z@SyéĪb:ūTĨqØāv"€XĢdg뚒"I$“žyÍDy`ūT‹Îx ę6Ō°2`sØ{RAãԘ1œ/…Hy<†HĻ!Ė:€N1éRÆå@’1× āōį'ßĨ'ƒčiØ %ÁF=0“‚ėÚŖV1īĪ4áĐāŠĮN(˛aO;Ā?J în?SŠRC)ÉútĨʅÎ;āRĄ›øēō2(‘vˇƒßuIÃr7â4­ĘA?QLEr¤Žƒ?^´ŌéŒũ*L…ų€oĄiåF ˇ×š,1ˆ PO\t§’IõĀŖןMÔŊųÆ>š l9ŨĪåG\OĻ)å$äøŌmāĮs@ å‚AÁ>ĻŖ*~éã×­Mē@öŖhÎ0@ô¤  ;qęjL^@<úTĻ ũî= 3äĶŪĢ`܃<ũÂAčvÔžQ cÎqHĀ&89íķS÷ŗlcœš4›W` œũŋ>āP 9Ú;‚Z›€¸ųŽh3ļ6Ũqž5€;‡ãN*¸û ~7˅>´€ErWæoMÜTĘÅG9#ÔsU‰ ’[>”ôqßđ  ÃmPAĮą4›ķŒŒ~ÍÄņĐũ)ĒHãĨHFzcōĨ=:zâŖŨ–į€N>´Ŗ*HbŖŸSŠ“œwČíI†-…ũi¤ã¸§#mbq×ļ(yS‚§=ōÔÖ䁜qĮĖido3Ŋ}Ē2~î=íĮ88įīriĮqס&šŖ$’ä)ā’¸ã°ˆã$  Žœį4ÜŨyš8ÎXõíڙķžÄzæĮn Œ}:R†įŋqB’CŽŸz‘ĪPô*`†N9õ♸äžqšAÎAČÆsƒI•#ր Ÿ'ŋcŠzœ†ų¸úÔy\äFz…Ĩ y9ãڀ9<{æŖu¸Į'žiŨ2G=ūíŖ8 ëŠhuJaČld Žôâq€r~”ցÃgé@ÃpÛĪãÅ)e*ŌrđsŽ9Ļî;°Ccë@…%V=Í´cŋ`)v’qĪN)øÚ=GcšŒˇ^søĐ u#­0‚{ķúS‰üOĩ3 ą"Æ3aō§ŒúRīųO<^)q“œ=é^„Ž=(ąČ%ˆmĘŨ˙T„|‡Œ­Ei [bETĪ@1֛¸ázŠM¸Ī„cd’3Œ÷ÍG¸¯Ĩ4ž ü…8’GĀĶzgÃĨ#xSųu `ĖAöúŌzsīAb}ū‚‘؆Āę:æ€_”‘ŽĒ"y43œ‘ŒSPg’įš d˜9ÎGĨ<šŸįQgûžôÍܜāƒíŌ€ą;˛ėëĪŽjģyëøŅģ ėzœRqž.´Dx8$cŽNjTŽŨsƒš™˜ō8>ÕPqš2Ą8 d,1Áõæ›íÁJ{‚y鎸4Ō8õį›9Ļ€dƒ´}F8¨ØüŖ¯Đ yšĮãL'sLD.[=cÖĄ”°RpjvÁnÜT2ĻiÜFĩ—ļpC Öiū3œūUŠĢ†1Ø@Į­dîÚc=Acđŧ6"ExĪŨ û~´ļĘDp–=Ü~‚’ßaÆ?ũu*#ˆq€[ō­3KŠ_hôĸ¤Įû4T”}kEWyÄyˇ‡­­üK“åjˇČ ô2VÁ#ģööŦ­_ZU Ŧ^d“ë)c˙ĄVŽzũãôåÕøŲŲ…rˌŸÃŠi Š֔á{õÉ46v؞ՙcTŒä'éŲįžqÖŖ?7OƜÄ/fĀ9Šö%9ÉúS7ÆXduY>éúĶ[8Ā ĸ•€BŲ'ã­4ĄëÛÅĀŠą‘œņÕiŒA`FIíHh‹Ļyéč*1ŗ­LØ$ũ;ÔŌĨ–Œ9›b9'hĪ\wÍInrŖ8ôĻ7;Î9Î)Đ䙹GSØŋÂä͞ č?*dg8ČĮ¸Ą˛­´ŒXáŒōԁČÃmū4ĪŪ&žN?ĮĒ$™XuųsėÔėüÜÉãīu¨āāū)ÃqīT„ɉ'úšB}§9=˙ fŸ›nۃ­>3Ô|Āw4\DŖ9õ qŸį“H[ÎxíŪž 0ųIägš}I¸ęAšūtũĖwšjãpų°}M.qÁāĐ!ŒĮdœ÷¤3gœĶ›;GäĶWåęIĸĀ#—7Š@ŦŧsˇØfœ6“Ã­!?6Ūīē!\r §ĮŨqíÅ&sÉ9ŠØË˜éߚ`0‚Sŋ^ ÔA ļĻŊRļŪ:g×ŌŖ{ŪÃ"žåÎ͟\ÔB1ŋņę­NØRxČúTdcéėŊéŪĮŠ4ũØ^˜Å&FĶ… Ā&ĮŊ.á¸uĮ͊]ų~>ĩŨëÎi\na@ŗ dgÜSI ōN3ØÕrp?ÅMô‡mbÖâ8\œ÷‘\–*ØéĶw5šž~‹HĖFAā÷ĸĀNN:mÁ˙kĨ.å$}ßpÔ*䎝=ŠÄœq’§Ú v ãnŪŨxĻnėgÛŊ1ÍFŲÁ`‘@ĮoęxīÅ Ā9üu¨]Čų”6G|õ¤ÜIÎZ“qÜØĘāS3ÆNī™‘Ķž§Ŋ.˙—°?JCŒdŽxĪzxl¤Ô*Nx=éāãˇ?Jb6ŅžŧŽiHãĄõäÔ9lƒČô⤠=r~”̀ܠ{šoFwķëO'nHŨųSXe‰‰ôĀ $0ä'Ôæœc# `ũiČģyË`ú␖ ØīŌ€HRFx8éMc‘Û#چĢwÁõ4„įŽ: I\“ž=П1Éô<Ž™ đ1sL'‚ÄúäŌLļ23ƒÔSO ×ųS9ĪĮ֌ƒ×oį@ŽšÂH=IüixĮúÔnAāžø6Tį9Ž 4Nģęir}FGĩFθŨœ™ÅHà vįĨ!aŧ3¯bßʘH=˙JCŒį&€ĖęÔķQŗœ÷ü į#ī{ЈÉëîhĒĪ>ا6‚GĨ7#Œ×֚I –Uęh°q‘¸•įĻŠ‘ģ?ZGUۂCšQŨGN('ķëÖŖ?xœŸzœģžøŸÂš°ūīá@ŅQœŊ(`3Æßʞr2§wãQ3žŋJÄdáˆoåÖĸųąÆ*Vų¤$ ƒīČϰā|§ëš`BśGåHĮœrOáHãä8 ŠtQĮ­1–ÃfŖcÆüÍ=ŲC`mę‚ŨTĶ™ĢäÛHOĨsīÆÅ?Ū?ČWA̎úŖ#…Ŧ˜‰îz~ˇ§ą+ےqĐg508‚3×÷Œ*Æ"éNˆ–Gũ4jŅŖ;ô%ÚžĸŠ6š(°\úƊ(ŽĶķ$¨ø…ĢĢÍų•BSZ‡ģ}ŦÛB?á ņBmĀ 8úÛÃZ|IížĩæVøŲŲ… ɂ~\T|uúÔ䁎AĐS~cĪŪ˛,`8îŌåG¨Īš|k†*%9lĀŌŧõ<ŒôÍFŲŽ™ė9§‚JōX×Æ`ôŪ“(F=ķ×ÔŌ('Û….H*ŒķČ⿐ rLgÚ pTc­Näōjŗœj‰Œ“÷yûĮųЊA˙ëS\bWãøH¤dūF˛:™rnšëLÜßÄ<hCbÆŖ0ŽŖ>˙5=_8>´šVÉ%sڀ 1°ęŦqÎA¤fĪĩO9{˙:cļJŸ”a@ ČÁ1ÔãœRTōžũh' ×#Ô L“ƒšđG\ `+6ā>^G|Ôdķœ?:U8āįąëŠßƒīHO8˜>îwž•'ÔŌ8į  —ŸaH 'œRŽOŠR2qƒø” RĮžOŊ9H{>Ļ›ŗ/O ĨSˇ'ĶĨ8āĻ8ĪÖŖ$gĸŸÆžšõa‚7~´Y0S,åHGPG°Š"`x9÷ɍɨN8Īá@Č[*)ųAÁĘ˙Zv9ČG÷i›ˆ',zžôeąÁãېĮcúSsĪąô¤žŊ{â€;ņĮĩ.FŪ=ēÔg“ĪûŅ‘×#Jd‚G8'ŒPąäāŽ„šfų‡Ė6wãšMÅą‚F8<Ķ Ÿņ vO ŸŌ˜[č=2MĄãˇ4™ TûhëķO§Ĩ9x8ÁééMW8€ŲÍ OSÄĐ1ÛšĮ̓MvãÄg9ô¤WåĪŊ'ĮīŐ1œįũėP0ĕĪ>ô`ã ˙ &Jļ< ã×pČ*úÔoŽ•#`÷9õÅDۀ<‘ųbĸ'<‚1Å4’QĶĻ)ė$ņč4Îz Øü( eúÔY+S ä¨6°æĩw>âŠ>čüsâ@q†6Ž>žV?šš´Crƒ>ųâŧÚ˙Äg]?… X‚rÃĶ“ŠU8äžŊąM7r9īÎiX8ĮŠŦMv$ƒƒė Ļ+|Ų}@ ē ûĘûdÔe‡@I=†*F‡ŒgŽ}ɤŒœqĮJESēr¤#’T÷ÁīIŒ čfN88š$| `uéQŗduÉ‚•ÆG!ųą˙Ö¨]ąéíOsœ‘ė;T zœŽĩ Ņ­Ėō`äš>GCĮĩBF.&ë÷oz‘qģ´ŪOvÍ1îÁĪCHd„ŗz{Ԍ3OëQ|ĩ A?Z;Ž2ĻhįÛ>ôn99$cڑœĒå€öéL S-œˇ~*6R8Čöâ‘X˜ƒĪĻi[,šĮ>„ô D|’n}1M+•äô>”ār:­2NXĀŌ¤)aJBäāŨ{Ō:ãë֚ÛAāJp}Ųō5u ôíšn791īÅFK0 J$ādƒš ˜É$āô•Ĩ‡×Ŗ$ŒŸ\Đ2Į8\ũ&J§Ũlvųj võqūÕÜšÂį¤Đ!ĕĢtõ¤' ũî”ŌUOđžācŠ;Œí  P0úgÜHX‚§>´ŧŅsė)¤aŊ{}Ū´„)$ž3žß5>Øî4ÎGAŒûRí rŽL†˜Ā7ÍۃÛ=)ێė’ŧöæ™Îy.§ļOZw=w1īŠ@)eãæSøqNĘúÅxĻn=l™ R0^?MÔÄ8đxūų¤nÜlR+‘“éËâŖw(G GûŲ¤;Ú§œ{Ôm–õīšfđOUį§Zp Ôõ¨¸ėHųé†ü)™$ũ(9-÷ŗFėŽ ’=(¤žģ€w4¤ŽÄgØķMĪŠ˙Įi‚zŸûæ€ ŽN‰ąŧ=‡4ōäm`=E4K–Į$Œqš1KÆÅX`ÁÛÁ¨Ų˜dŠü–Ļi2ØÜŲ÷4ÔBzā {‘LPJķõ?-<7yãڑūTsŸ÷ŠšyīķRĖyüŠNr9n=1Mm¸Ā>æ`ŽNŪ{æ€Ųnģŋ:LnRî?ÚÂrŸá@ę9OʀŒw?÷Õ8l#æÆãĮ-MĀqôÅ&@ āøJbv ûŧŸZcm8üĶÎ;6 …Ũ‡OũÜØÛ8ÍGģ$Œ.?–<ôõ›w¯č(iL€j ũAëüŠįq ĀôÍFÁî;ĶÎ0F~”Öl9úS‡’}M#c€ë@ą$āôúTFHíR˃Œđj´‡hČĀę„SÔ?ąN9ۑõŽu2ÆÃ×&ˇud”rĩÍÂßp˜˙ ښЙ=I:&}IūBĸ’WHؓĮ™š{0Ž)ĖĄĸu#øÅhŒŲKÎz*įŲOĨ§2"Ō>ĩĸŠ+¤į8 cøƒŽrÖÍÆ?íĒ˙ėĩe$˙#UuOŨüGÔFīõš]ŖãĶ\ °ŒžqœbŧėGņ×KáBƒŊŋ‹ėqM}ŖåÎOĸ?9ė=*ģ°aŲSßĩ`͏å÷Ō'œāvĀĀĻ䃁Āõ O朜{7%%Xœ™§`ōBķčzT[ö”äžâ€íÜāžpM!ŠŲč1šdĨAÉĀčE)l/${Ķ8`'¯jCCN:ö¨váŗŸÂ¤l—'=8"˜qÎ:T˛‘šā æaŊëOŒŸNŨéŽ[í2`ņšUįŒn+t=‹iĀÁëî)d ‘ę1H*ZPĮÉüęŅ“ 8#Ū€qŸÖ–Įņ úS˛{ū9Z´HUØõ፧džNri™Áä}ŠĘ{d~tĀzą ÆML ĶņĒãnĀĪŽ)û€AīŽ”ÄɁœŒg'ĖšãņÍ41Îr´d0Č õ DįqÁįž)Ä0ĮĘø¨—…öæ§OGN´ÉØ~üŽ1ƒëJ2$9'§lT/Ŧgę) I( ŗ1ĀʞN{qŽŧT'w"€ĀŽM+ ą= „p üķJ:dô#štMåŋãÔ bbåJäcđ4ŒĘŊJūĩ)Øy\t=˜ėĀŽ¤zâ€ļJ𾧟ķši`Ęp ę)į'éŒāSB–L’Į⁠FyöÅ?7Qžŧ SˆQČ$ĀŠ¤yĶ’(đŲsŽŨxŖvĶČ={Ž•ėwlz“NXãˇûų Ŗ|šĮž1JŽUąƒõ¸tZ]ÁH =(ĀmŋÄøĪlPŌá‡$œtŨÖĄ%8#hü 48ÉÄkīōĐ 9ŨŽOĢS99õān¨8ÎxÛM*šįĶ B 'ŒŠSؚŒ|¤pŸS֐ŗd Ø8ėi¤g‘ę1@"N1Įqœæ“v0AۃÍ1X?H`pOˇi“žëŠr°Ī? Ļ†ų*=˙L­ę[ëÅvG퍀zŸz“vå€Ũę1ņ g8#4*y#§sLÛü>ãm)sŸoĻiã&wĀŌ,Į8ĀīL$—P[œāū}( ‘Č>œQšÉĪÔS<Â9ÜsÜ Ro-€ öųēS"°ÉRGũķQT’:})`į'>™¤cģšÁõj@(|’zúR0ōø¨ŲpGŽ89Í*ŊŊy $[ņ4×ېĖIí‚qŠpų›ëJˀ3‚}zP8Œr3Žôå*>āĶZB¨B7Ė&ĢXÜ\L¯öˆŅX1kuįųĐU‹ƒ‚§éŠ#¨ ãĄZMØāā­7pÛÁ_ĻhđN3ƒAp}î{äT[žoŧœôČ4€cœß4€•›ŽãņωIāƒŽ‡&ŖÜO<ß4đŲäū+@„x挐@~f“ ë‘ŸîŌ€f†h…ķĀƔwΠ&Ÿ´ˇ]ĮÛm1‰\įxī@GLōį¯Ũæ†aœáp=š¨7§Jif|ô "f‘F08Ļ™”dûT6 üŲúÔy€#ëJãHœą ŖđŨÁˆÎyúqP€ĪĄ N võĪ"˜Xsō>RGãMbûį4į9SLcĀŠæ Ŧyį#Ķ4ÖĀaĮīR†äŒjCČûā\SYÆqsÚĢąBÄĮįK 'įđZEÜĒOÎ{gmŠŦA!G°*•äāuūíFƒ÷‰ĮR HäĢFy î;ô"šœw­4ŒļT“ßĻiX0ųôi9AõÅ4;ĪŨ'Ԑō0ŲâƒĪđsõ î%ēš“væ.~Š›G@ŖÔŌ”$€HC@ĮyŠX⎿ã43}N}Zĸ!$Īš ˜ã+LC˛zįP’ vüéÛļōÁϏœČt •HíĪZ‰¸ė '’ Hl°÷ĮZLd\ãĐP'œTdį#ōŠØqԏ¨¨[ŒuĻ"aåHI<2;â—‹7'֐‘Œšb"glŽ„UwčxũjËs’ĸĢɜ—?CTv ¸ļ~rv‘\ã(D2>đĪë]ņ˙Fl¨č{õŽoʛšËĩ´6"@yčqķâ—nĮp 9aŸČTlę PNCüęb3ÍØ2ŸŌŦ‹\ˇĩŋÉĸ›Å\w>ĒĸŠ+´ã8 t*|G•žbΪŐ=i?øŖS€sĀÁEâ=Ģņ Üān}%ŗī‰—ú§gšôįšķąÄ:Š|"ģüØĮûTe˛ÂŖ?ŨZT##>˜ĻļË,xåĢ›$&ÜcxRsFāsØzĪįHrĢ…8€uĻ0$⌟vč>”†ā€īķĶ™Ã}ßĐSXã“ėŠEāãņ4Š•ˇr­7¯^ZW#=Iū´Į qŒ“Í!ĄdÆ{ūœŅ’Fú‘ŌŠ8ļOBF=i˜p üj4l¯=)ß{Ž3î1Mxäõ?˜§Ŗc’ïJ„ũėô#ļō ¨šĻ"päs“ŒPĖҌ w1Į4ÎĨ‡ŽsOãųN;Š™Iõ9ëOÜqüGĶ‘P\‘…ļ)ržĒ})ŠÅ€NėÃۊ@Į'īgđæĄ/Č9SßĨ(l ė>\Đ"ĀnŲ=:PĮ-Ķķ5Y˜ᗏö)ū`Ų¸œäņōĐÂŐwŊ’}é™Áå°}é"÷Wė´oÜ9ũšMšYYXöÆwR’ĒNGŽM1 $`ž:|´ōĮųŊđ)ˆnŗ‚Ԛn\8į4ōāŒî|wÍā6>lü\Pe[?.ēĶI$tÉī…ëN‘U”ŊG95 ?F cXáG84$đÔQ’Øås˙ĻŠBĀ€ ÷ŠdHŲ<ž>”ģú`ņîz¯ŅōBú}ęPØ<÷Ļ€X‚Iöj‘Ô˙ãÕ›ĄS>ƒÖš%ųąš0~´ ÄåŗÆđ}rÜŌ >QÉëP™X0äöiÁ›oVü4+OĨ+ĀŦEB[`sЎ(YöÉųŌ‰|øĐújBs‚7z㊉Üį8fš¤i^2NŌ2:qųĶ!bFHcõô ąl›ķ¨É~8' æ€íĀ!G§Í@Á”n Ã8į÷§īéƒúķQī/ûļ }ižaGÚÛGԁ dí֐då@ö9¨Lƒq\ũ)܎WĶîĐÛ°X—_j ƒš>Ŋę5o˜ŒOĩ |(å€í@É āpÃđZRA\‚{4ß4€yltÆ)Š#• ī#ØĐ!åö“ËN( ĪW>Ŗ9ūĪlĶŽGwâqHn=ƒúdb“Ģgk{Ķ>cÆˇ4ÄüÁīĒ`;ŠāgÛۚÎ~^ŖA¸cäĨ+`ãvŅÍ( pĨëÆVš@dZByÎīԁ’o;y#ëļš[¸o¯›ģ‚GáLY÷¤!ûŽĖO”„1ÔÕ Į>´¸*>UlŸz$㓟Zvz“¸úŒĶTá˛W>ŲÍä#įë@• sõĨĀ0Čúô¨ˇĪɓõ¤#æí dĄÃd˙ĮЁ€2O}ŨjĄ[ĸõëŌŖ, c)ĮšĸábqĩAĘŽHîÕsÆÕ?Sš70éˇÜb€ũÁP=1@ƃļO˜qĀ=)įČ ĮĨ†ã+ũ)§›péH@ãgF(˛4›Ž2O¯Ž Å0%ÜwdlRĨz÷ô¨Ė:žÆ†•đ9 ,JXgīũ) Ī ū\TFgÅúŌnß×#ÜtĻÉ'$°ÜSОáąčOJ­,ŸŊ ˇ#…K )^:L€PN{š^ ûƒ8õ¨Ų‰9ũiTÁüčŒŊ[gëNŨú ”ĨL`ũzÔg#‚Œš8cfŋZ@Ã<Āč3Mpv“žõ¤,06p9 wzŽéMr6€ ãÜԁœ¯ˇŊ0ļŪ2?īœĐ&=Xü<{Rn r9ü)ĻmŖ’=qM-•úãŠvåō;ãÔ i' qô¤=F;zšŒ’ ÆÚ î>Ŧ÷Įzil¤÷'4܁‘‘ŒúĶi<°üčfõö¨ØwÛÁŪ§ā)ōj>`@=ÁĻŪƒØæšAÆp2;æŸō°ÆW늍÷2ņ´žŲ‰ô_~j 8<āTÕ3ƒTŌģ}Ū„W>X,HĮüõŽ‚đ+[9$÷ĮÎČ1zã5´‘_2y[Ņ€­[ęĨūíTå’UĮņëVsōČ3Ž­îJ-`z­Üũ(ŖP>ŦĸŠ+´ã8?ž;Ō‚€ôËĄœzI FpÔķRøĐ•ņ—‡N>Si|¤ã€snĄ¨NŪÉöÆ+ĪÄügU„vöÁëČSr›¸ íÁ&“waMÎ9í\ÆÃ؂zû뀄 Ÿ€æ“pÎāņ階S•,sĪZ‘Ą¤ą9nįøđ n ÄW§ƒ@į ũiŒCüžû‰4а¤’Aāäđ:⛌0Ī8æŽ2ĪōĻų˜ÎéÛĩįۏzŒpzūԌ‘׌ū$Ôy˙“IŒŒķ#wķÍ ā4…ÔHŲÛøŌ8}kĻũ Küœ°üE ę3°ŒúSrH-Īnā,UĸėsŠÍFŪĘü\Ô%—Ą ųS•ũ u"­"$dŽ6+1Žõ(bÉ|ب3–8įčÔõc´7ø DŠzĮëJ%¸ôÛQî ž$īŠzœ.~|})0u`eûŊhTpĘq؊`l“†`iĨˆã{sÛP+†_TņÅ*IÃp9=—5]į†įéRrHĪŊLÎŖ†nS]ŽT‚ĮĐ ‰eRįŠã=)ĘÛ°NF}O4†Bz1ô=iDä ¤ˇNqQČŗōöĒ$…BSž”8¤9QķôĮŦn €|ÂsYÖŦĨ”1ę h0Ôã<‘MĮŽũđhf÷8ūu0ÔmÜŖ*Ãõĸâi~I9Į÷¨éÔûę€ۜzŌ†Âđ#֘ Ķ%LcŽi„ėįrôî <ę4“‚rŨ;t¤ + ’Ÿ•DęŦA #ÃÍK¸…ûĮߊØŠwˇN´ nđŸ1eĮŽÚyu'‡Sô^EfürŲõÛJPũėŋÔ P$SĶîRdî˙žE 4™˙h cŦŽFTņÜSíĮi1ü)>nŋ6;æŧĻâŽpz˙JMū›ĀëķC%WeR2įžž”š% ŸÆĄĪNŖžģŠÄ:sīր&Éūįū=֛ŧũŌ8úĶĮįJÄŅqī@„c‚ …ü 8HãíÛQōœŒįŌ—8$ø˜bxÁR=89p#'>‡ŠjØų€#ĐR†ļą!‡FÅĨ™x>Ŋ…Ÿzį…ŠYˇ`üįą#)\ũķØæ€˛Ä=r8ĨŨŸâcžāŌ2ā„Ōė-†(0G\ķ@ Œ’~´Ôcčqۚxƒ’2ߘŠÔ‚‰YI9AĪrsŠ“ ãîŌķÜ ÷§„ Ücž1@†6ē=ˆ§+ņĀđ§zܟlSH‘ÔzŠ.wÎGŊ#‘É'=ir7õĮÔdũŌ¤ãéEĀSģ?_Aړ“ü'͊prØûäz曎¤N{ņHbyeˆëÉĨÆĶžŋCŠC’sÆŋJg9ä΀ĘÎÃøˇŌ3ƒ°ø#œƒ‚žāŌ^qŗđŌ€ˇŨ^:aé{Ŋ9Šå°GÜĪŽ)ĘKYq銋ø ¸ôÍ?ĖPĢ…\ũzĐß/”ķš›'‚§đ {Ž-ķãëL8ÎIÕoûFāåF>čM9ä9ÚK#Ž8 "u“ HJMÃ#§§JŒaG,ø?J~3÷IéŌ€°')Ÿjzžr ú…Ļg  üzRĢĶ~;“@‰<āœ}*ŗį8ų>•1ÃáŊ95 ä ylÜã“@!ĨJŒüÃđ¤bvāįęiãČ÷jaŠĘįčiŒ‰ XüĶA;A#ëNr~īß5"ŠUä.}M!)÷r?ē.ÔxīT bNvb€Š×!}ąÁ áÚ1ÛūO\¨ÉÆqųÔJvœäôëNVČ?0cžqíH§ž0~”Ī0 N:J``y¸ôŦMúsōį"š]ë’:sIŸ—īuę2Hä{U¤fÉ n–Ŋ°zˇō¨K)ĀëÜŌy˜Č+ÁĮJ´Ik9 ŸlR,€’7 Î:úÔ"@1=jU|žĮ#ĄÉ%žøÁūõ=NĐ@bWĐ€ƒ’¸=˜wúŌĢô, ,čYš¨''Š'ۘ­ĪŪ~”Ėõ9üŽ(ûšíÉŠãĢd*„ä6F .ū:¨ !Éäôāx7ĪÖĢîb­(ŲÉûÅr(í´įCSļ•ė™=Ē čXī„4/Î@ß˙ŽöĻ"ė $”a—=F5iŖ<ŒŽ*­ŽŨųČČÅ_Ā$—§dĄČÁY8AΝZ‘đ?ģRsPöļõ;IãîđOŌĻÜ|°Ė{ã" ųqĀŌ“%ˆų¸įôō ( Zrã8āņÅ0#ōwķ'NĸĨŽ%‚ĘëÅ1ˆ9ÆÜûôŅ'͒Ũ}ŠsËPĘģĮļ)›Hld{Š€Éšđ ęxŠwnaĀ㸧q9ČĮéMØātÅHdtb}Ž ¨›i鑎Ÿ7ZO”âãڑ€Āäō} s¸āœŊIŧ9 c[9ō=ę)bŪĄDŽ„09ÉÁÎ>ĒrNqõĻyk´ráHÃœ¨ü)7rF~”ūąøSË`v^(ƒĶ#đĄw˙ äeVœN9įĄâžØ#’Gą D@0åˇí9IRpXcچ9ëŋķ ¸Č$ŋžhŦXƒËgųÔ.¤Ãq8į+s~u G¸åU¸čsAHhBĮ8`}7dR˜Ü‚XgņĻäŖā ûwŠü==ņŠŒ&ÕÚA>ÔĒĖã‚ŪĀĪŽęhĀ'8ĪŊ÷—#ņό÷ūtŪŲhAÎPĻ€°ō}7ÍNBƒč 5œIeãˇZˆ°ÉÆúS&ōIÆ=(ķ@Ø AÆq‘øTlįžžŖŒS\ƒĪo֐˛ôö¨ˇļ0yãžaĀëĮŌ‹ ã†29úS‰ ¸$ņĶ Q†#?1ÍÉ{qôÍ<ËČČSQŠ0Ø>Õ9õaę3H_‘•ĪšnhpYWÔÜį9Ϙ¤ę3œ ši;O Ø@ũåíô&Ą;ƒ ×ĻiáņŸ™@¨ËŽíÎxĀëL¸úSwc#pČíŠfė`įņÅ&üŒ‡'ƒ4XBü§Ŗözš #¨úSI*qķ~Tģ‡8Éô+ë×´Æõũ ŒāŒįĻM1˜ŠÆŪŊNhÉÎ0sėiRGOzk7#€÷ĻČ#jëœSîģA1ģT°įkZxc“Œgũę|ada>´č—QWDQĩF}ĪZlpƒĀ8bœ6˙*Ö1!˛?ē2WŋÕÚÆÔ0‰Üárq|wŦ;ízââL[“ cīîk:YåˇK#;€Xæ´ŅšĄģz’3K'œŽ~e~ƒééZ.Šul’G’Ô{×9OYFظŠjVW5dąÛģŽIŦ›‹B­/ŧūuĨe¨ļåŠsšcÔ}jk¸‘øę?­i™›ē9ŋ)ģE_û#˙tŅ@\ú~Š(Ž“œâū .'đĖĄąP§LũëiŋÂŗČrYŗZ_}ōAM^2=ķĢ˙ŗU…L–æ¸q_:h|${Bdüĸĸw/“īŠy˞ / ϞœgŪšЈJāúęsN ŧŒäzŠa÷*Ļri†0œÔ”+˛˛°8*zķHūƒzâŖËÆ0:āP\‘ƒÚŒs¸’Wæ“w°ĮֆÎzz ¯#“¸<ķëABÉ.ūI=OAM,6điŒp8ĪRzÔ{ō=yéCˇīÎ ŒqC>[Ēįęrglž1Š7–į?ĩ7čZB 2Į­3~r2Ū™ĻŠį`ũ*"pįî‚Ú̊3dĻP'<ķ‘IæpÛĪJŽd' o÷Į8ĨW''ņZ˛ üÂdž8j‘\ä›9Æ{ũ*Ą”>`ūđâžuȸȁƒvåÔ “ ŽFsŸLUE”nûĀsÆOZ•ˇpŪØ  ˜ ķë´JR\?Šq+ÁLŽHäPeT\ąīĪJzŋ8cŒŽւũHū”ĐG9Ā>™¨Ęgąpqš”š#p=ÆE7Ė*Ų!ķœpi€r~Uôjt˜` õÎhGÁį2{sS*HWøŽÚīU!ĀØ§ąËUĨHĀ˙Vŋƒt E˜r™?89ĢhÎßww>õ@`.Jž;†ŠŅ”6Äš´ÛČų‘›ņĻ1u#=sž)U”mÎĪ֚ûF8>ƒ Đ@JœE]§œTGžę:æ•e(2„`W ĒːŸnĸ€@Įéũ܊x`Ē~`ã‘QodųŠúãĨ*Č ŸŊÉúĐS&ŽAæî/˙ŽņVAO$ģk4Ģ`õĢ‘6ŅÎū8Íhĩ¸mÁ`Go–Ŗ‘vķœ)|Ŋ)ģļ(l¸ĐŌį+ŽIã­2@ëŨ}ĄdubFî™Ī§ĄxÉ\3Į4å—n} !ģrr~hōÁoã9=}*CˇwŨü Î)ĨĀę§§v c„@ä‚GĻi6ŽÃ4ĀEÁéƒL šØúĐ%•ÎđzĢ āšŠRNåÍHy@äT;ˇ¨P­ ŧ…'0G­)]Ð0*0â@@Ā#Ŋ#ąāœ~Ŋ  Távž{Ķ~ī“×8Īĩ;ĘĪZi9Ü;Ldۘc;qŒ@•AÁzÔHräoƚrŊdīŒbX°[%J‘Ąâœz†l*ŖHŅîq!éĶĩ=%-’d,;mĸã°ų†Č#늉Ÿ'ž@ëëC€WĢįEĪ'$ãŪ€&†T,Á•‡>jo7 .ėКĒy÷4…¯$qß=Š‹…€ŽØĻ;ņĀÎ9æĢ–*9`Aį¯jržz~cœĶ‰˛9#4WŠÕa“–æü°NFėŌäāüų9ė*=ã8ÜC})w`n\z怰š#’Ė ilˇ$ķP´›!Æx¨Ä„Œ7Ęq“@ėZ<‚@síHrĮ€ÜZŦÔuČ'9ôŠÃŲĪ|šÄ9Æ66î„æ™†-ķÁõn)ųę ĸ°Îxʀßüz˜~ņĀĨ¨l0˜Íˇw¤P2?;2˛”#orięęÜŠ_ΐžrr€n´|ŋŪB1Ÿģ@Ü1ÕF aÁųqQ4„dGā´y‹".Ha‚1LĨ—%FŅč1Lķr3šF=ēĐØÂ‡$3Œšnål‚XžŖŠQ)<ŊÜbŸ¸÷ÉJ` s¸ūTíųîĮ=¨„ž„‘øS$>Ų>Ļ•ž^yüúUw9R0ÜĶĖŽœŲäReš7Nõģ6}Í1Ü89#­1<k6pJœ÷¨ˇN3Žüõ 1ĮŨo΁3ō>\Œg&—9*€=jšr2y Ɓ’ ž?,;——gچ~@,§=ņš†?•qÔc)Y°~Rļ(+7ûX# Å7y<ŨzâŖ,AęO¨#¨¤ŪUķ¸ŸÆ€ÃwŠ ūtÜ0Κ÷Ĩ,3Ā?39ę?ņęP7g Ÿ­#œíįŪĄÎ×$ƒŽÄĩ ŒØf˜öņ֘Ä7ĘHĄŨžŋΔžxŨúPĮ#ņPIJŧŠyāmÆ=ŠŽãw͜zĶLœüĮ> w˜S HÅX´bĖ 2{ ŖÎ>ķx5zՁ\ĖERÜL׈ļŅé\æģŦ™dkKiŒ Hāu>€úVÕĖĪ›q*}ôŒ‘Ÿ\W ’NI$ž¤ÖÛ#1E8SE8PŠi)hkbÆäܯ•&LŠŧ7­cŠz;#‡RC)Č"œ]˜¤Ž¯!ŋģEQūŌ—ÖŠÛ™؟IŅEĐsœÄPŖIŌ¤nŠĢ[õ$¯ō&ą|Ėšč@íšÜøŽū›wleu+2 ė|ôũMsĖSqšôQšâÅ|HęĄŗ%W'Ąéč)ąŒ×qĻ|˛Nī`NDH ÷}9Ž6t$HĖ9ÚØ=öЉŽŅÔ÷Z29ÎæĻ!įh÷'4†…åˆöā(⑘" ĖĮzcHŊģ Œ‘ˇ,{c4‹@Îd)8=;TŽãŸj|ØįßqÅW,¸<’(ŽĮŽŖØ˜=9Āč)°8'Ō ry=Ŋ})€×e.IÁ#žpi qIÔæŠË&]°qíŒņLķˆLåqQËŠ­ô4’RßaĮB3P™ĀmĨ‚ŸB:Õt˜įå$Ÿ@Ôâå›ũAĒH†É  ‘÷~ƒŠUrxs÷ēUV_”ā6ūLˆ°<ķŅ—ĒĚLČ~SÛĄ§y„…b;Ž*™,X6ÕúfŸ’1„Qôj,"ō30sÅYW7FĮûĩž‡ĮƒR†`šR?všpNGŽÍ7Ė3ķŒwühĀ`XnÔÐHl÷įųSCæ(Á'Ûۜ%R1üÍU`ŦAų­!-Ī(sī@X˛ĮŽúæ„|ƒō•įžĩX;ûĢרį4ô`3ķ‘ĐŠÄäƒÜ^j?0NAįĐŌ†Įŋ!M Ô'ąÍ0° ŲRŖšâ¤ŨĶ ×Ņj"[>cL \’ĖŨ9ĀīHV͌ÃĐü´+€ŸĨ7$Ž­ųSIų°2h VÜ[9?…9HÁ“īQŠÉČSéƒOG8Į­8l|ĮŽ1ŠMŦzŠR}>÷Ŗą×š ČPÎsIÆáĀį¯46ĖôÁë×­G‘Ā SĀã ãßĨ+6å3Q\n ¸4ĨĀįpĮԁX{@¯ŋjis¸įqÚŖ3qË= ĐO˜2ĒO¸LĐIžQ֘X˙{>Õ ‚ážėS÷Ԝl¯ņ˙×DzŦ ČüФÂčŽ[íœmĻ Îŗė*ŲŌuWĀūĪž<÷‡ô§ajÛ°šuæ}ã#õĒä—a9GšžY“Ŗ’~”+ąRŋũķZđŽëN¸}Ņ>™QüÍ*xW^vĮö| …ĻAũiĒsėÅĪæIgČ_žœ)?{§Lōke<ޜÍ2CO ֈÁ ûGô§ė§Ø^ŌĖ&-ÁÃ~&˜ cr=û×H< Ŧ•éj=Œ¤ãô§˙ÂĢ?}bûī˙ÄĶTjvĩ‡s—i ÷Í@ΐG­v#áîĸNîĶoüãôŖūŊÛ6Ŗ ¯´dãõĒT*v'ÚÚÅ̆\äƚ[ž?Zîãøi 6ǃÜ[į˙fŠWáĸ¨IöˇĮūÍMaęv'ÛCšįĨōsĩ}ōiwrH*=yÍz"ü5´ęڄ¤úˆĀūĩ"ü5Ķ‚āŪŨgšGô§õzƒÛCšæÄ¯9Ø=ķJ ÛÆÜzôßøWIëu}ŸPé˙ÄT‹đīES÷dzøSú´ÅíâyЎČ~aŸj7sœ’+Ô×ĀZœ˜§ače8ũ*AāoŽļnÃĐÎ˙ĐĶú´Åíây9”¨äŊi7+u׎/‚|<šÆœzî•Īķj‘<áô .Į'ųšU—púÄOŪ8ۏĻęi~?„{×´¯…ô%\ &ЏxŠ‡t@1ũ‘aøÛ!ū”ūĢ.âúÂėxyŸîŽ Bōœį8¯|>˜#NŗtũÂ˙…JļŠÁ–ÖGB#ŸÕ_q}av>YWĄqø r“&āĄØü"žƒXŖC•ESę)ôūĢæXō>y×2)híį~ĮjđŠLԝ7.xÃÔ@Ė?•}E?ĒŽâúÃėxĐõĻ\#Q`G_ŗ9ū•~ĶÃēԁ&õ~ąöú)Ŧ2îX}Ô|1¯ÜiSCqæļ##<“é\ęü=ņ[ŖF“>ōÆ?›WДUû‘íYāQü7ņc–ŨŽ"ūŒjxūøĄķ›XŪyüŗ^íEÆ!ídx„ üH˖û{4įú)Š—á7ˆJ‚n4Õ>†gū‰^ĶE?c{Y:>k8ߨŽ@.öZœ|"ŋĪ:­°įĩzŨũ”CÚČōŸøTô‹ūüū*Šõj(öQė/i ĸŠ+BOâH˙Š"ä÷V„~1åwš?{žœQEqb÷GU ™3  wúķQî$“Āéڊ+küŧõįŊEæ‘€>‚Š)  Íõ¨™‹aFŽRZPœdôÉæĸ îåLŅEPŲUœ”ū•Vf*§ļhĸš%œv­ŦŨŲë&Šė(8aõĢö—ŗMnļįŽŪôQZI+îi@Ûŗ:S‹ûhĸŗ5’6Ö>ôd‡ĀĸŠŠ.ŪG&œĖG\QEfSĀ^ž•u'î¯nÔQI2`đGN”Ŧ^ôQHFŖ~2:´ŠÎNq×4QIŒ`\§ķŠ3žâŠ(ō{ŽÄPŌ0^Ŋ(ĸ“ØdyëNOšfSĐ1E2T‘•€1K3ŋN´QHEk‰YTđ?Ŧ’ŗĘƒÁĸŠĄŠ$9aĩx•bƌ¨=ēQE1ä¯Ļ}*uŒã(Šb]”d•]ˆ?ĨRĘNÁëëK““ÍUu¤d“Î;ÔN“ŪŠ*F1AāīoΝˇOSۊ)r=ō*Kõ@ä“îhĸÆĮ“ĐwŠ÷rx÷ĸŠŽ^Y~´’"Æ QÛŊSC#Šg.A#J]ہÜĒq’8ĸŠ6)å{R.“E3(Į#ĨMēÉrî uÁ÷ĸЍ‘"øŌĄxՌ’äāđGøUäđœ˛ƒ-Į'ŗđĸŠÖFm˛đđvž­“=Û{_ū&ž<#ĻĢnĖį=ŧĪūĩWLaÆ2”ģ’¯…´°yŠCõÔ‹á$ ąlúĘßãE´iÃ˛1s—qãÚHkwoņ§.Ĩ"í1`}hĸ´öpė‰į—q˙ØēYÆtûsXÁ§'M>Đcū˜¯øQE>Hö3î=tû%#mĨ¸úDŋáR-´ r°Æ>ˆS˛Ų"ĒŽv¨ANĸŠ`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˙Ųleptonica-1.86.0/prog/ccbord_reg.c000066400000000000000000000214001506303110300167550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ccbord_reg.c * * Regression test for border-following representations of binary images. * This uses the steps in ccbordtest.c to test specified images. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" void RunCCBordTest(const char *fname, L_REGPARAMS *rp); int main(int argc, char **argv) { L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/ccbord"); RunCCBordTest("feyn-fract.tif", rp); RunCCBordTest("dreyfus1.png", rp); return regTestCleanup(rp); } /* ----------------------------------------------- */ void RunCCBordTest(const char *fname, L_REGPARAMS *rp) { char *svgstr; l_int32 count, disp; CCBORDA *ccba, *ccba2; PIX *pixs, *pixd, *pixd2, *pixd3; PIX *pixt, *pixc, *pixc2; pixs = pixRead(fname); disp = rp->display; /*------------------------------------------------------------------* * Get border representation and verify border pixels * *------------------------------------------------------------------*/ if(disp) lept_stderr("Get border representation..."); ccba = pixGetAllCCBorders(pixs); /* Get global locs directly and display borders */ if (disp) lept_stderr("Convert from local to global locs..."); ccbaGenerateGlobalLocs(ccba); if (disp) lept_stderr("display border representation..."); pixd = ccbaDisplayBorder(ccba); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0,7 */ pixDisplayWithTitle(pixd, 0, 0, NULL, rp->display); pixDestroy(&pixd); /* Get step chain code, then global coords, and display borders */ if (disp) lept_stderr("get step chain code..."); ccbaGenerateStepChains(ccba); if (disp) lept_stderr("convert from step chain to global locs..."); ccbaStepChainsToPixCoords(ccba, CCB_GLOBAL_COORDS); if (disp) lept_stderr("display border representation\n"); pixd = ccbaDisplayBorder(ccba); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1,8 */ pixDisplayWithTitle(pixd, 200, 0, NULL, rp->display); /* Check if border pixels are in original set */ lept_stderr("Check if border pixels are in original set\n"); pixt = pixSubtract(NULL, pixd, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) lept_stderr(" ==> all border pixels are in original set\n"); else lept_stderr(" ==> %d border pixels are not in original set\n", count); pixDestroy(&pixt); /* Display image */ lept_stderr("Reconstruct image\n"); pixc = ccbaDisplayImage2(ccba); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 2,9 */ pixDisplayWithTitle(pixc, 400, 0, NULL, rp->display); /* Check with original to see if correct */ pixXor(pixc, pixc, pixs); pixCountPixels(pixc, &count, NULL); if (count == 0) lept_stderr(" ==> perfect direct reconstruction\n"); else { l_int32 w, h, i, j; l_uint32 val; lept_stderr(" ==> %d pixels in error in reconstruction\n", count); #if 1 w = pixGetWidth(pixc); h = pixGetHeight(pixc); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc, j, i, &val); if (val == 1) lept_stderr("bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/lept/ccbord/badpixels1.png", pixc, IFF_PNG); #endif } /*----------------------------------------------------------* * Write to file (compressed) and read back * *----------------------------------------------------------*/ if (disp) lept_stderr("Write serialized step data..."); ccbaWrite("/tmp/lept/ccbord/stepdata.ccb", ccba); if (disp) lept_stderr("read serialized step data..."); ccba2 = ccbaRead("/tmp/lept/ccbord/stepdata.ccb"); /* Display the border pixels again */ if (disp) lept_stderr("convert from step chain to global locs..."); ccbaStepChainsToPixCoords(ccba2, CCB_GLOBAL_COORDS); if (disp) lept_stderr("display border representation\n"); pixd2 = ccbaDisplayBorder(ccba2); regTestWritePixAndCheck(rp, pixd2, IFF_PNG); /* 3,10 */ pixDisplayWithTitle(pixd2, 600, 0, NULL, rp->display); /* Check if border pixels are same as first time */ lept_stderr("Check border after write/read\n"); pixXor(pixd2, pixd2, pixd); pixCountPixels(pixd2, &count, NULL); if (count == 0) lept_stderr(" ==> perfect w/r border recon\n"); else lept_stderr(" ==> %d pixels in error in w/r recon\n", count); pixDestroy(&pixd2); /* Display image again */ if (disp) lept_stderr("Convert from step chain to local coords...\n"); ccbaStepChainsToPixCoords(ccba2, CCB_LOCAL_COORDS); lept_stderr("Reconstruct image from file\n"); pixc2 = ccbaDisplayImage2(ccba2); regTestWritePixAndCheck(rp, pixc2, IFF_PNG); /* 4,11 */ pixDisplayWithTitle(pixc2, 800, 0, NULL, rp->display); /* Check with original to see if correct */ pixXor(pixc2, pixc2, pixs); pixCountPixels(pixc2, &count, NULL); if (count == 0) lept_stderr(" ==> perfect image recon\n"); else { l_int32 w, h, i, j; l_uint32 val; lept_stderr(" ==> %d pixels in error in image recon\n", count); #if 1 w = pixGetWidth(pixc2); h = pixGetHeight(pixc2); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc2, j, i, &val); if (val == 1) lept_stderr("bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/lept/ccbord/badpixels2.png", pixc, IFF_PNG); #endif } /*----------------------------------------------------------* * Make, display and check single path border for svg * *----------------------------------------------------------*/ /* Make local single path border for svg */ if (disp) lept_stderr("Make local single path borders for svg ..."); ccbaGenerateSinglePath(ccba); /* Generate global single path border */ if (disp) lept_stderr("generate global single path borders ..."); ccbaGenerateSPGlobalLocs(ccba, CCB_SAVE_TURNING_PTS); /* Display border pixels from single path */ if (disp) lept_stderr("display border from single path\n"); pixd3 = ccbaDisplaySPBorder(ccba); regTestWritePixAndCheck(rp, pixd3, IFF_PNG); /* 5,12 */ pixDisplayWithTitle(pixd3, 1000, 0, NULL, rp->display); /* Check if border pixels are in original set */ lept_stderr("Check if border pixels are in original set\n"); pixt = pixSubtract(NULL, pixd3, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) lept_stderr(" ==> all border pixels are in original set\n"); else lept_stderr(" ==> %d border pixels are not in original set\n", count); lept_stderr("============================================\n"); pixDestroy(&pixt); pixDestroy(&pixd3); /* Output in svg file format */ svgstr = ccbaWriteSVGString(ccba); regTestWriteDataAndCheck(rp, svgstr, strlen(svgstr), "ccb"); /* 6,13 */ ccbaDestroy(&ccba2); ccbaDestroy(&ccba); pixDestroy(&pixs); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixc2); lept_free(svgstr); } leptonica-1.86.0/prog/ccbordtest.c000066400000000000000000000216011506303110300170230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ccbordtest.c * * Comprehensive test for border-following representations * of binary images. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 count; CCBORDA *ccba, *ccba2; PIX *pixs, *pixd, *pixd2, *pixd3; PIX *pixt, *pixc, *pixc2; if (argc != 2) return ERROR_INT(" Syntax: ccbordtest filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); lept_mkdir("lept/ccbord"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); lept_stderr("Get border representation..."); startTimer(); ccba = pixGetAllCCBorders(pixs); lept_stderr("%6.3f sec\n", stopTimer()); /* Get global locs directly and display borders */ lept_stderr("Convert from local to global locs..."); startTimer(); ccbaGenerateGlobalLocs(ccba); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Display border representation..."); startTimer(); pixd = ccbaDisplayBorder(ccba); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkborder1.png", pixd, IFF_PNG); pixDestroy(&pixd); /* Get step chain code, then global coords, and display borders */ lept_stderr("Get step chain code..."); startTimer(); ccbaGenerateStepChains(ccba); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Convert from step chain to global locs..."); startTimer(); ccbaStepChainsToPixCoords(ccba, CCB_GLOBAL_COORDS); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Display border representation..."); startTimer(); pixd = ccbaDisplayBorder(ccba); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkborder1.png", pixd, IFF_PNG); /* Check if border pixels are in original set */ lept_stderr("Check if border pixels are in original set ...\n"); pixt = pixSubtract(NULL, pixd, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) lept_stderr(" all border pixels are in original set\n"); else lept_stderr(" %d border pixels are not in original set\n", count); pixDestroy(&pixt); /* Display image */ lept_stderr("Reconstruct image ..."); startTimer(); /* pixc = ccbaDisplayImage1(ccba); */ pixc = ccbaDisplayImage2(ccba); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkrecon1.png", pixc, IFF_PNG); /* check with original to see if correct */ lept_stderr("Check with original to see if correct ...\n"); pixXor(pixc, pixc, pixs); pixCountPixels(pixc, &count, NULL); if (count == 0) lept_stderr(" perfect direct recon\n"); else { l_int32 w, h, i, j; l_uint32 val; lept_stderr(" %d pixels in error in recon\n", count); #if 1 w = pixGetWidth(pixc); h = pixGetHeight(pixc); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc, j, i, &val); if (val == 1) lept_stderr("bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/lept/ccbord/junkbadpixels.png", pixc, IFF_PNG); #endif } /*----------------------------------------------------------* * write to file (compressed) and read back * *----------------------------------------------------------*/ lept_stderr("Write serialized step data..."); startTimer(); ccbaWrite("/tmp/junkstepout", ccba); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Read serialized step data..."); startTimer(); ccba2 = ccbaRead("/tmp/junkstepout"); lept_stderr("%6.3f sec\n", stopTimer()); /* display the border pixels again */ lept_stderr("Convert from step chain to global locs..."); startTimer(); ccbaStepChainsToPixCoords(ccba2, CCB_GLOBAL_COORDS); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Display border representation..."); startTimer(); pixd2 = ccbaDisplayBorder(ccba2); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkborder2.png", pixd2, IFF_PNG); /* check if border pixels are same as first time */ pixXor(pixd2, pixd2, pixd); pixCountPixels(pixd2, &count, NULL); if (count == 0) lept_stderr(" perfect w/r border recon\n"); else lept_stderr(" %d pixels in error in w/r recon\n", count); pixDestroy(&pixd2); /* display image again */ lept_stderr("Convert from step chain to local coords..."); startTimer(); ccbaStepChainsToPixCoords(ccba2, CCB_LOCAL_COORDS); lept_stderr("%6.3f sec\n", stopTimer()); lept_stderr("Reconstruct image from file ..."); startTimer(); /* pixc2 = ccbaDisplayImage1(ccba2); */ pixc2 = ccbaDisplayImage2(ccba2); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkrecon2.png", pixc2, IFF_PNG); /* check with original to see if correct */ lept_stderr("Check with original to see if correct ...\n"); pixXor(pixc2, pixc2, pixs); pixCountPixels(pixc2, &count, NULL); if (count == 0) lept_stderr(" perfect image recon\n"); else { l_int32 w, h, i, j; l_uint32 val; lept_stderr(" %d pixels in error in image recon\n", count); #if 1 w = pixGetWidth(pixc2); h = pixGetHeight(pixc2); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc2, j, i, &val); if (val == 1) lept_stderr("bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/lept/ccbord/junkbadpixels2.png", pixc2, IFF_PNG); #endif } /*----------------------------------------------------------* * make, display and check single path border for svg * *----------------------------------------------------------*/ /* make local single path border for svg */ lept_stderr("Make local single path borders for svg ..."); startTimer(); ccbaGenerateSinglePath(ccba); lept_stderr("%6.3f sec\n", stopTimer()); /* generate global single path border */ lept_stderr("Generate global single path borders ..."); startTimer(); ccbaGenerateSPGlobalLocs(ccba, CCB_SAVE_TURNING_PTS); lept_stderr("%6.3f sec\n", stopTimer()); /* display border pixels from single path */ lept_stderr("Display border from single path..."); startTimer(); pixd3 = ccbaDisplaySPBorder(ccba); lept_stderr("%6.3f sec\n", stopTimer()); pixWrite("/tmp/lept/ccbord/junkborder3.png", pixd3, IFF_PNG); /* check if border pixels are in original set */ lept_stderr("Check if border pixels are in original set ...\n"); pixt = pixSubtract(NULL, pixd3, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) lept_stderr(" all border pixels are in original set\n"); else lept_stderr(" %d border pixels are not in original set\n", count); pixDestroy(&pixt); pixDestroy(&pixd3); /* output in svg file format */ lept_stderr("Write output in svg file format ...\n"); startTimer(); ccbaWriteSVG("/tmp/junksvg", ccba); lept_stderr("%6.3f sec\n", stopTimer()); ccbaDestroy(&ccba2); ccbaDestroy(&ccba); pixDestroy(&pixs); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixc2); return 0; } leptonica-1.86.0/prog/cctest1.c000066400000000000000000000105461506303110300162430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * cctest1.c * * This is a test of the following function: * * BOXA *pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity) * * pixs: input pix * ppixa: &pixa ( pixa of each c.c.) * connectivity (4 or 8) * boxa: returned array of boxes of c.c. * * Use NULL for &pixa if you don't want the pixa array. * * It also demonstrates a few display modes. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NTIMES 2 l_int32 main(l_int32 argc, char **argv) { char *filein; l_int32 i, n, count; BOX *box; BOXA *boxa; PIX *pixs, *pixd; PIXA *pixa; PIXCMAP *cmap; if (argc != 2) return ERROR_INT(" Syntax: cctest1 filein", __func__, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", __func__, 1); /* Test speed of pixCountConnComp() */ startTimer(); for (i = 0; i < NTIMES; i++) pixCountConnComp(pixs, 4, &count); lept_stderr("Time to compute 4-cc: %6.3f sec\n", stopTimer()/NTIMES); lept_stderr("Number of 4-cc: %d\n", count); startTimer(); for (i = 0; i < NTIMES; i++) pixCountConnComp(pixs, 8, &count); lept_stderr("Time to compute 8-cc: %6.3f sec\n", stopTimer()/NTIMES); lept_stderr("Number of 8-cc: %d\n", count); /* Test speed of pixConnComp(), with only boxa output */ startTimer(); for (i = 0; i < NTIMES; i++) { boxa = pixConnComp(pixs, NULL, 4); boxaDestroy(&boxa); } lept_stderr("Time to compute 4-cc: %6.3f sec\n", stopTimer()/NTIMES); startTimer(); for (i = 0; i < NTIMES; i++) { boxa = pixConnComp(pixs, NULL, 8); boxaDestroy(&boxa); } lept_stderr("Time to compute 8-cc: %6.3f sec\n", stopTimer()/NTIMES); /* Draw outline of each c.c. box */ boxa = pixConnComp(pixs, NULL, 4); n = boxaGetCount(boxa); lept_stderr("Num 4-cc boxes: %d\n", n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixRenderBox(pixs, box, 3, L_FLIP_PIXELS); boxDestroy(&box); /* remember, clones need to be destroyed */ } boxaDestroy(&boxa); /* Display each component as a random color in cmapped 8 bpp. * Background is color 0; it is set to white. */ boxa = pixConnComp(pixs, &pixa, 4); pixd = pixaDisplayRandomCmap(pixa, pixGetWidth(pixs), pixGetHeight(pixs)); cmap = pixGetColormap(pixd); pixcmapResetColor(cmap, 0, 255, 255, 255); /* reset background to white */ pixDisplay(pixd, 100, 100); boxaDestroy(&boxa); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/ccthin1_reg.c000066400000000000000000000175441506303110300170700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ccthin1_reg.c * * Tests the "best" cc-preserving thinning functions. * Displays all the strong cc-preserving 3x3 Sels. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { BOX *box; PIX *pix1, *pix2; PIXA *pixa; SEL *sel, *sel1, *sel2, *sel3; SELA *sela, *sela4, *sela8, *sela48; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Generate and display all of the 4-cc sels */ sela4 = sela4ccThin(NULL); pix1 = selaDisplayInPix(sela4, 35, 3, 15, 3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 400, 0, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); selaDestroy(&sela4); /* Generate and display all of the 8-cc sels */ sela8 = sela8ccThin(NULL); pix1 = selaDisplayInPix(sela8, 35, 3, 15, 3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 850, 0, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); selaDestroy(&sela8); /* Generate and display all of the 4 and 8-cc preserving sels */ sela48 = sela4and8ccThin(NULL); pix1 = selaDisplayInPix(sela48, 35, 3, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 1300, 0, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); selaDestroy(&sela48); /* Generate and display three of the 4-cc sels and their rotations */ sela = sela4ccThin(NULL); sela4 = selaCreate(0); selaFindSelByName(sela, "sel_4_1", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, L_COPY); selaAddSel(sela4, sel1, "sel_4_1_90", L_INSERT); selaAddSel(sela4, sel2, "sel_4_1_180", L_INSERT); selaAddSel(sela4, sel3, "sel_4_1_270", L_INSERT); selaFindSelByName(sela, "sel_4_2", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, L_COPY); selaAddSel(sela4, sel1, "sel_4_2_90", L_INSERT); selaAddSel(sela4, sel2, "sel_4_2_180", L_INSERT); selaAddSel(sela4, sel3, "sel_4_2_270", L_INSERT); selaFindSelByName(sela, "sel_4_3", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, L_COPY); selaAddSel(sela4, sel1, "sel_4_3_90", L_INSERT); selaAddSel(sela4, sel2, "sel_4_3_180", L_INSERT); selaAddSel(sela4, sel3, "sel_4_3_270", L_INSERT); pix1 = selaDisplayInPix(sela4, 35, 3, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 400, 500, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); selaDestroy(&sela); selaDestroy(&sela4); /* Generate and display four of the 8-cc sels and their rotations */ sela = sela8ccThin(NULL); sela8 = selaCreate(0); selaFindSelByName(sela, "sel_8_2", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, L_COPY); selaAddSel(sela8, sel1, "sel_8_2_90", L_INSERT); selaAddSel(sela8, sel2, "sel_8_2_180", L_INSERT); selaAddSel(sela8, sel3, "sel_8_2_270", L_INSERT); selaFindSelByName(sela, "sel_8_3", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, L_COPY); selaAddSel(sela8, sel1, "sel_8_3_90", L_INSERT); selaAddSel(sela8, sel2, "sel_8_3_180", L_INSERT); selaAddSel(sela8, sel3, "sel_8_3_270", L_INSERT); selaFindSelByName(sela, "sel_8_5", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, L_COPY); selaAddSel(sela8, sel1, "sel_8_5_90", L_INSERT); selaAddSel(sela8, sel2, "sel_8_5_180", L_INSERT); selaAddSel(sela8, sel3, "sel_8_5_270", L_INSERT); selaFindSelByName(sela, "sel_8_6", NULL, &sel); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, L_COPY); selaAddSel(sela8, sel1, "sel_8_6_90", L_INSERT); selaAddSel(sela8, sel2, "sel_8_6_180", L_INSERT); selaAddSel(sela8, sel3, "sel_8_6_270", L_INSERT); pix1 = selaDisplayInPix(sela8, 35, 3, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 1000, 500, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); selaDestroy(&sela); selaDestroy(&sela8); /* Optional display */ if (rp->display) { lept_mkdir("/lept/thin"); lept_stderr("Writing to: /tmp/lept/thin/ccthin1-1.pdf"); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "Thin 1 Sels", "/tmp/lept/thin/ccthin1-1.pdf"); } pixaDestroy(&pixa); pixa = pixaCreate(0); /* Test the best 4 and 8 cc thinning */ pix2 = pixRead("feyn.tif"); box = boxCreate(683, 799, 970, 479); pix1 = pixClipRectangle(pix2, box, NULL); boxDestroy(&box); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix2 = pixThinConnected(pix1, L_THIN_FG, 4, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 6 */ pixaAddPix(pixa, pix2, L_INSERT); pix2 = pixThinConnected(pix1, L_THIN_BG, 4, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 7 */ pixaAddPix(pixa, pix2, L_INSERT); pix2 = pixThinConnected(pix1, L_THIN_FG, 8, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 8 */ pixaAddPix(pixa, pix2, L_INSERT); pix2 = pixThinConnected(pix1, L_THIN_BG, 8, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 9 */ pixaAddPix(pixa, pix2, L_INSERT); /* Display tiled */ pix1 = pixaDisplayTiledAndScaled(pixa, 8, 500, 1, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); if (rp->display) { lept_stderr("Writing to: /tmp/lept/thin/ccthin1-2.pdf"); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "Thin 1 Results", "/tmp/lept/thin/ccthin1-2.pdf"); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/ccthin2_reg.c000066400000000000000000000155461506303110300170710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ccthin2_reg.c * * Tests: * - The examples in pixThinConnectedBySet() * - Use of thinning and thickening in stroke width normalization */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i; BOX *box; PIX *pixs, *pix1, *pix2; PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5; PIXAA *paa; L_REGPARAMS *rp; SELA *sela; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "ccthin_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Clip to foreground to see if there are any boundary * artifacts from thinning and thickening. (There are not.) */ pix1 = pixRead("feyn.tif"); box = boxCreate(683, 799, 970, 479); pix2 = pixClipRectangle(pix1, box, NULL); pixClipToForeground(pix2, &pixs, NULL); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); pixa1 = pixaCreate(0); sela = selaMakeThinSets(1, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(2, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(3, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(4, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(5, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(6, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(7, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(8, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(9, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(10, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_BG, sela, 5); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); sela = selaMakeThinSets(11, 0); pix1 = pixThinConnectedBySet(pixs, L_THIN_BG, sela, 5); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixaAddPix(pixa1, pix1, L_INSERT); selaDestroy(&sela); /* Display the thinning results */ pix1 = pixaDisplayTiledAndScaled(pixa1, 8, 500, 1, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ if (rp->display) { lept_mkdir("lept/thin"); pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); lept_stderr("Writing to: /tmp/lept/thin/ccthin2-1.pdf"); pixaConvertToPdf(pixa1, 0, 1.0, 0, 0, "Thin 2 Results", "/tmp/lept/thin/ccthin2-1.pdf"); } pixDestroy(&pix1); pixDestroy(&pixs); pixaDestroy(&pixa1); /* Show thinning using width normalization */ paa = pixaaCreate(3); pixa1 = l_bootnum_gen3(); pixa2 = pixaScaleToSize(pixa1, 0, 36); pixaaAddPixa(paa, pixa2, L_INSERT); pixa3 = pixaScaleToSizeRel(pixa2, -4, 0); pixaaAddPixa(paa, pixa3, L_INSERT); pixa3 = pixaScaleToSizeRel(pixa2, 4, 0); pixaaAddPixa(paa, pixa3, L_INSERT); pixa5 = pixaCreate(6); for (i = 0; i < 3; i++) { pixa3 = pixaaGetPixa(paa, i, L_CLONE); pix1 = pixaDisplayTiledInColumns(pixa3, 15, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12, 14, 16 */ pixaAddPix(pixa5, pix1, L_INSERT); pixa4 = pixaSetStrokeWidth(pixa3, 5, 1, 8); /* pixa4 = pixaSetStrokeWidth(pixa3, 1, 1, 8); */ pix1 = pixaDisplayTiledInColumns(pixa4, 15, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13, 15, 17 */ pixaAddPix(pixa5, pix1, L_INSERT); pixaDestroy(&pixa3); pixaDestroy(&pixa4); } pix1 = pixaDisplayTiledInColumns(pixa5, 2, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ if (rp->display) { pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); lept_stderr("Writing to: /tmp/lept/thin/ccthin2-2.pdf"); pixaConvertToPdf(pixa5, 0, 1.0, 0, 0, "Thin strokes", "/tmp/lept/thin/ccthin2-2.pdf"); } pixaaDestroy(&paa); pixaDestroy(&pixa1); pixaDestroy(&pixa5); pixDestroy(&pix1); return regTestCleanup(rp); } leptonica-1.86.0/prog/char.tif000066400000000000000000000003501506303110300161420ustar00rootroot00000000000000II**&ĄŖä&`ƒĶŅËĶz˙_]˙˙`‚ôö\xkac˙đ!Øā(ĀĀleptonica-1.86.0/prog/chars-10.tif000066400000000000000000000053441506303110300165530ustar00rootroot00000000000000II*& & T?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čr`ĐūA]ČrC`{Č,šw$ų ÎH†•‚j™‘Ō ´ä2ŧ†TČ5Á šhrüŽČöT#0PbN’  ō & ĶUâČg˜FzøA¤ÚAž•P=$ŒL4ŌÂAšM˙ŖyūŊ+iú6mmt‚ ¤ßô–é6’NŠ6$•„sĐtmfL)pD•­īJģ˙õíúļÁtŨr:ŌZĢ˙¯_éu¤Ø1Ee.?^“˙¯˙Ē^ÆC)מžēôĩū˙ü}.Šl#‹Õz㯭U˙ä~Ŋ¤•8Aõ_ĢŌ´ŋĸ#öé-*[Kũũ%ķvˇ_ęAģ’{úØĄöéT—„TÃKūÕom$¨†/Į˙Õ*âķząVŋ^Ä6+RAĨwĨũ.8UæÛͧ˙`Å$ũØ_úĄ¸AĐĩaļž>ÃŅ„Á›—_Ôģ zn|ÚH;E×üH’w×ô„:Xđ›Ņ†Ø¯ žđŒM[ü‚ŠrÄĨî’AÚKČ6ä“i_ū—é:[×I6˙ßÛÛü;×ũq4 Îë¸ũU‚qé%íĨøĨúZū’OX˙˙ˇ˙ÚZ]ú_Ī—ėU¯OéĘ!•uëë˙˙Û]kú]duŊ/ŦDØ˙é%ûŋÍ‚ ¯]iZíĶĨÚIvWÖÚMÃü*jū‘Čë뤞’ÖÕ}$žĐe×WÚZÚ[i?ô˙áém¤ØFņļŋ¤ôk8a&ŌI´‚ i¯b) Ä&!0ē魆 b qL0‚VHXˆˆ0X†4ø¨¤„"BAŠÄ(,†@#ˆ‹iV""#ū•{Ĩ¯Ũ%Xļ´;ĐíĨļ–#˙˙˙˙˙˙˙˙˙˙˙˙ų°Ur†C  ‚؁ââų €" â#°UĶ˛Į Dd2@ŋiĨĖN<ŗP ‚åÁ APČ92AČ`‚(Ce$Č.pAn0dŒ@ȇ „N‡hd1ÖAų2Q ÁÃG8†îá†Đi ĶTĶĶxGˆ99°rs #áĒi§Ũ4“ĒĶGŒ4Č4Ų/˛ė‰0fÂA›ƒ `‚ Gģ C @Ų@˛ ,6‚.3‚ÃA‡ 0ƒ Á Ō›ōæÂ6ø6“YĖ>Đ[íé7ļ“{¤}÷ũ[ĻęiĐAŋĐ^ßúO˙ĨÚېo´ƒ}˙˙i=í¤ÚZ_¤Ú{¯ˇū—˙Ĩüēé^é^é˙ëN“Ö—OM˯ĨíõŌ˙ú\ēkßMūß˙ūõß}¯äČ:NˇûīŽ5_ú_ËŽŪŋĨū#ÚŪŽ“ĐĨ…‡Šõũ/ĩöũ˙˙zta{ĢI,,4¨ @ŸĢé}˙˙Ĩī^ßß÷ĨÚõtÚNŠdā$íÅ=_Kųō#¯ū—ÚûézI˙ūûĢt–˜A %_ßJˇ˙¯ũ/zû÷ë}(ŊZëĨøAT—ĨpÁ˙˙˙ ž˙oũ/ŌeÕû^ޚmRđA.\i}{ÄņĮĮúûĨí˙„ŋ<ŲĐ3>ôę˙t–ĐAa†–—­Í˙ü_ßí˙Ÿ˙@˜ß×ļÅ%ˆ@„0ŌũkÁŋįœ›?~ë˙üŽ †˙uû_Ŧ ƒ .ēWßúzūoסū7îCRŸõjô›K ƒuéu}ŪŋöA܌ũŋĩöû˙ėûW¯FK§īŌCßë˙‹˙Û÷¯oëëm˙zÕĩJôļ_Õ+˙ņĮ Fė?ĩöũ}vß˙ëĒoK A6í­K‡ûî˙û~õūūߡūÚWŪ¯Öd2˂ ­´_„•˙Ōû˙öū×Ûîžŋ˙ØßJõÃģhĢöúČ#í˙ûy}ëÛŨvŌÛ!Ą˙Xę4›Ō!‡Ã B ą•ôŊ˙ũŊ.?oē˙oŽéŽŋKČ9aAŽ-*ŋoKö˙ũŋÚö6ŌÛKo_^&ôŊ0Ąƒ$Øi+é0Č.>ũ‡˙í˙ūÚ[i}ÖÚ_¤ß¯t-°—x$Ø\ŌÛ˙ö˙¯v[ -ģKƒš}}%üãA4Є™ „ †a™”  đƒaĄ„Ũv$l0A$lWM$ÃAĄíPxM1 ÁLB@‚„‚ a„aA†!b‚ ¸„6ŋ X kŠˆˆ0„DB"   Hˆ‹B.!DB &ŧDGĄĄ"":ZôƒŌ lqŌEĖč€ĩ¨ÄƁŽã˙˙˙˙˙˙˙˙˙˙˙˙ųz^„†˙<G §d˛v@’ YĢ lã!—Ë„Č+LH2y (!˛ARÛįŊ4ŸWM?Ko¯ pt]Ãø8?˙Ļž˙äÃ`˙˙0Ģë´×‚˙ô“uū#˙˙úú˙˙úM˙˙˙˙k˙˙˙¤õ—„ŗōø†Xää^á ĄËâ N_hÂĮ  rã `rr#‹ä˙ۂ!—< ČeP!/<†U4) ų‘{M ƒ!•āŠ„,2S!ŗH0rčŠĻ ‘,ƒœē^¯˙Kž˜PŒ8Fæ‰Ã9¸ 1LA`ŠĻ ˜F`ŠĸįTa´N  0A‚Á…h ¸Ÿ˙ÛÛ|ģhÁĐAĐA°¨&´bī Ŋš1]ĄÛĸ턚Õ+īŋ@ôÕ$—˙ĨĐnŨ é:V Ø7ŗa B ƒƒč, Bl16“`ØmāďWlÁúĶí+Žŋũ[Ū›KW_Jëũ/úÕēmzk˙ooĻŌK˙ë×^›÷§ũ.šz~ũ|q˙KOuŌK˛ ,…ŌoŪ†ĩ˙˙Đ_ū—õÕ˙.Š7MéVčū" ęŋ˙˙¯˙īēüĖ ũŌoø­h%†1ƒKōÂ?øû¯ø˙˙˙ö˙Ōm&Ž’oI Å~Į˙æÁ§Ĩ˙6Ÿ˙˙ūÃũē˙mô›ŌH5ú˙ūõ˙ˇ˙˙˙†˙×IŊ=%oJ‡õ˙˙a„ŋö˙˙úüūöũ-Ŋ/ĮôŊ+žđÄ/ũŋ˙ŋ[đŨ-}Ū•˙˙˙. ö˙˙Žŋ  wūū›¤›}"#˙ūŊ;Ģéí˙û¯ŋ˙ĢĶi]ë_˙úWkz˙ė?˙ēŌĩúõŽĩx¤—˙ė"ëtŲvŅulŠúûūũ ›_[;ÃEÕ­¤›tŋ˙m-L0Ŧ4­†Nk§ĻÃM0§mĨ &Â0¨4ę)ŠŊôŽ’ ˙ėTēÅ*6 xA¸@Ápa†ÃAE1 8aĶPúuaŧū ˜BB؈ã#†A ›A0ą BiĄĄĮüDDEˆâ8ˆˆ˙a'ūŋōåŌ×û˙˙˙ĮëŌm.h ô—÷Kzē¯HJÄ]/Č-㨎ÚIzļ  u†! “ ĩˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā@…]] Ô Ü (ĀĀleptonica-1.86.0/prog/chars-12.tif000066400000000000000000000062621506303110300165550ustar00rootroot00000000000000II*ô & Z o˙˙˙˙˙˙˙˙˙˙˙˙ų €Ėr‚Į$‚‚›\uČ3ÆAĻ(†žתcŅ šŌƒEr 0‹„4‡!¯dˆd𤠕ÃĐšI7Ļ ČePŒ&C8@ƒ=zP ͡Ié7¤ļÁS? hŲ´qŋ\ ŌmQIYéÂϚX@Š Ú7ūŒEÛî’uVœmmt“¤ß֖[TžŠ´ŌĨŅʂ‚ ķØĻ ē˙Tžž—ÖīZ¸]]:.ē]$ęß^ŋëô“†(¸Ĩq÷˙¤Š˙Ē˙­$ģ5ū´/K¯KŨu˙_Ō܆dW~ū—Öŋˇ˙ãõi%ļ÷õ˙õŌ´ŋČm¨ũWJŧ E@éWIzC˙ųņûuZI%Ĩūū—úV—ú}ũlPíÕëũiyĻģ +ũH(‚W{ĒUí}~Š%áI0Ō×ū˜{itDŅqo_č_Ĩũ1 ũ׈0Ä$“^ūŋČĸ\ãxAĢm¯ĩėé­pŋô ×„ Ēi0í|ka¤Œr!Ž—é# × â\Ū› # ūČž“lØ)˙ū„6–7:A›ū¤H#sJßČ2“!ĩĸ_¤ūõj‚ ĩ[ÚQ.Ū“j˙õū•ĨôôĄ°ŌõáŌJéŋõ_Ō×,wõIĮ˙ũĩoō QUúO~õŊtA–ÉFé%ö—âˇõ¯ę–¸×˙í˙֖—ū–õųãú_ū–C6ë˙KÕ?ūÛ¯ŌRƒ×ú_˙ô—ėS×ū•ŽCC¤Ũ/Id ‚ˆë×ûoōPA‘×­.ŋÖ­RĶM¤›IļāŠÕŽ‘vūŌ}^’íŌūĐ2Į´ēM^´.ŌŪ­*ĩ \=$ž˜0Bßū­$ÖĐIØIēVŌAđxKl$ÄÜôęÃHz–H†nŦ0“ $Ŧ0Ki­C Ä&kKZ Å|B¸„ÅSˆ(ėDDX†iŧhv„A„, Â…Č ĮŠ!u_ÛĒ_ŌJŊŋ\[I!Ũ([iŨuX˙˙˙˙˙˙˙˙˙˙ä Áˆ xA €T ˜i@đ ‚ƒ!°n!܇ƒáĖ!ˇ eō‡Č4— †ud2Ō\˜ d6jBjAõ ú}HJƤ3@ÁČb„3d 2 †z´ •„MT!Ē-H/ɐ`2đƒÃų‡á ˙ũá á„xƒ†Ž0ãũđEé„|ƒRS'čØ$†‰‘œ†\ČžCDČü#€ė†Ī Goäų˙8 †ŖGÁC!˛Â 2&Ja%4 GĪ`΁‚˛i M­hÛhØ#ØA°‚ žÂ˜@Ō;M4ĶH&ž¤m„AØA´ž\!Á4Ķ´Ōš œ=Ll ƒöŌ|0÷Ũ'˙ŌíoIŊŌotŸ˙×öé´Š/m&×Ōđ˙é?ū—÷¤ŪÚMí¯˙Ŋv“jõĨĨ¤÷ē^ßúU˙ĨëzOé?˙ŋŪÚî“ii{¤Üēúûéú\ē|ē~Ūû{Ĩ_ûĨũÕúXõkú_xâŋū—ōëˇ¯ëū˙_ũͤéWČn@ąõ!!ę˙ū‡˙A}¯ŋWõˆã÷čÂĢki XX} ųjũ%ūŋú^õíęū¯˙î•˙túXXi*9:ęõû˙˙Kí~ū˙Ŋ+ū÷J÷I´’Č $ÁÕ ˜Ũ_¯ōō˙ũ/ÛŌô’˙ũŌ÷Jë¯L ƒ Uŧ$ģ˙Ĩ˙Ĩö—ˇ˙ū”?˙¯umRėA†–•ixAW˙˙ú^˙ŋž–úL÷ęŪÅi%á :¤ŋx¯˙øaKí/oũ/ u ?ēMũSt—„ ĸa†‚˙̃ū8ø˙_īü%ųÎĘpiũũjúĨ°‚†Z^¯8A˙˙ņi{į?đAŋŪĩoļ+Ä °ÃKŌ^ōŋŸ|~p4~ũ˙oũ…û†˙ׯŨ, „0iI{Â?˙8ŸÚ^˙ãûd5ũŊĩé=, ƒiuûī˙˙íûūߐڟú^ÚÛIpƒu~’W߯ũ`ü7ú^ß˙í‡ūūŊ˙īú\{ũ÷˙ˇ÷ũú^–ÛūõĢt•épÁ-ũ$ũ˙}܆Ī˙Û÷¯oo˙_֛Ōà ›ÛDuŠ€ĮīņÆÃ˙íũ¯ŋŋíĶizž–dI„Ũ…×˙Ō˙˙Û÷¯oëëo˙_oJô°ÃÂ]ŠÂG„¯Û˙o˙Øyí}Ŋ×mvČ7õūēWō >< Ŧ0˜„ģé^–Aw˙˙o]ŠûîžļîģÛ¨ãĢŌđÂlZI+öôĩÛ˙ö˙ũŊ´ļëĩ_¨ŨŌoKČ-9 0A͆Å-úoK­ŋ˙o÷ö7­´ˇëujŠ_KĶ a›i-é6C8ú_ˇ˙í˙^íĨÚ[zö—é^ž@­°•>a…Â_ˇ˙íëŋģ -´ļîļôôßKøm°ÂKj 2i‘i‚ė5×öÔj×a„°Ã wa-ƒš}} ģĐxXgĖ E€Đ Å!†Y2 ę äЅІ5Čg҃C!„8"` °`‘ú2vˆ҇!—Ŗô 0d č‡Ō‡„Đbj¸b īíÖôíÃŦ1 Ûb°ēt›ŋÂ`„D Xˆ¸`„!`„_ˆˆô"4"$ø"":áęzI ĸã5¨fŌ JoB pĸŦh˜jFÂ˙˙˙˙˙˙˙˙˙˙ Xr Ô5Į!›3ī!@đ1d°‚Ő<2 †Ŧ6†ĖĨë ŅČyÃdԁŧČkš@‰jš oœ ēĒĒĒi˙ßēi(˛|E܁F'd4Y KKo˙Ũ!˙˙M/_ü‚Ø,ŋ˙Ėm}-Ļŧ˙×˙Ä˙zĻ××ú˙õë˙˙˙Ļ×˙˙˙W˙˙˙ô­"Ÿä3? Ņųáüáœrs Đ9Á–y ąČ`r8˙˙ģÉ˃TČeS á<šË€\…ėx.d~ \Á \Č5PÎAŧƒÁAHA3ÂŽDĄ y „‚g Ā˙JÅ=0A„4nh 2L†É"zY ķMCdĶGd3ÍČ10¨Ûh "ÍŨtīw˙˙pŒ #gŲÂ6 úzčĻšĻ‚ Ē #eÕ á|0@Á™ `Ú `ϝ˙Jč>ē4AŌŊ&´a˛ ,†ĖŌČ(´a´aČ(Äa´œ†ĖF  ƒDÚ͍8;Ķôé?Iũ>ÜB ̤&Á›ųĀP!÷Đ\B B ą6“lBŌx—uČlˇ}{î´´ŋũnžĨĶū—Oú]WOŨ:\'˙ú֛Vũū›o×K÷¯ôēiëWĻ×Įkö÷ĩtēĒK˛0ƒúũt˙ˇū˙„ŋ÷Ģ˙Ģõ´]i´ĩŊĐi˙Mūĸ–ŋ˙ú ˙×ôží×ēÅ7I ļĐi~"@đ0}˙†˙ũ˙÷ūP_÷[ĻĩH%†Ņ¸KđFk˙ĮÚ_ņ˙ŋūÁ˙ĨuîôĄ‡„?Â<ū ëūm?˙˙ũ‡û~­¯}7ĒA¯Đ/˙œ Kií˙˙˙áŋôžēŊRŊ*é˙°Ō˙Û˙˙ëđoöûßļé'ü_Ģŋدũŋ˙ŋ[ōŸū–•¤‹īTŋë×ûà ˙o˙úëđ˙˙ú[Ō˙˙õęú.Ÿö˙ũ×˙ aßÕēucVīĸ˙×Ûm}ö˙ūëIŋūũbŠ&Ũ$—˙õŌīoK˙o˙˙­~ŊXũ+/˙í[IļÂ0°ČGĶ˙Û˙öŌ´› ëv‹­4ęú_˙ØK¸M‘†Øa.Fû˙ÛJĐPÂ6ŊÖgl%ŋTÛI/˙ą f ƒ 0ÂLB™†q`‹  Č`Œƒ0Č!0Aˆ™†Á°Ō†b@!‚QQS01܃Đ˙ũŽ_Å4Ŧ+m;žÚģģN؅Âô!;]Wģ_˙´4A„Â؈â!› bMģЎ8ú؈ˆˆFqG¯ü$˙˙Ģūŋųĩu˙_˙˙ú^ŖézMüœéē]÷_¤Ü,EÖŧ‚Ø5Žĸ=¤—Ú[ UņXbˆ 0†HjAP4°ÁRíb"#˙˙˙˙˙˙˙˙˙˙˙˙&MMë ĸ Ē (ĀĀleptonica-1.86.0/prog/chars-14.tif000066400000000000000000000070341506303110300165550ustar00rootroot00000000000000II*^ & do˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūC 3ŋČqČ0ä2AĻüd<,-ÖAVŲ2D6øI˛ҐiōĐAĒd4æCjČCV7&ADČi~PŒÁ š†¨=[† ƒ  ÂX.`ƒ×Á@ēn–’nŠ6 š}„lƒáõHŪ^ &ÕŸVC-ÕPM…A„֐-A7ūXuē :I6RM‚=ŅâĪđ•$é7ū–u§ÕĶÕ[ApƒpAÖ\‚˜+i7˙^•Ōô•ŨUpēzm]*JŸU_õõÛ ę­Âé´ŋŌõÖ˙ëū礰ÅĢĮũŌô´žŊë_õÖģ zūū—Ĩ˙ŋ]õŌĢä!kŌë˙Ōõ˙ü}tǰŪŋņŌôŠ+Žüƒ"Oę­$ģ§vņëõ×üˆũĩ]*WJú˙Tž’ē˙OŊę!îęŋTžO×m/õ bČīí%Šöžŋęŧ=&Wũ×xm*ĒÚŊT’ôŌ%Ü4ĩ˙Ļ B\‰Zã˙ô—Åá“ßõņ iWwëôˆf¸M.pžj×ÚöS†Ü'÷ _øƒ]ĶϝBģ‘ŊšxõúW]:JØawđڐœ“ŗ€Oõũ)m-§„PÍ‰}~¤t Œ0Ößúū„7âÜ'¤m¯ëeæĄŨ7ų€" ĩ/é:_ļŠÚü‚ēL=+jß˙_¤ÚũtŽI†Öޝũ/õë}Õ&Į˙éuzōҝé:@iũ-ūˆY7Zooük­-ŌŌĮ_ĨöŌũK˙K¯Ōũŋúoëzõôŋ  ˙´ŋ]t¨ƒV___I}ąO]u¤AŠūž—¤ŋ˙ũõ×ô´˛o¯\‚¤1ēĨĶoų k Hôū“ÖĢéiĻŋÖëˇ~ ƒí---´ž’m$ĩ]oI+î]&ŋ¤PËŽÖ˙Đ_uŪ–ôØA’w˙ĻëC´ˇIŌVŌ ÷¤“i0Â9Š×­]$ՆNA6’V’_]Aá-°“ëZĻH†ZuˆD†E0Ōà ´×†"Aˆ&iŋĻ•ŠúØLBIŠ  ŅLCZCˆ0BÁ† C 3¸ˆž’ˆˆˆũÕ~ęĩ÷Tžé%^ÚŌâŨ(úPļŌēŨ,G˙˙˙˙˙˙˙˙˙ f .@đÕ †JЁ : ( xf†@Y9rQČ7r ÷É9l:ÔPCT h Ā€d4VCÖCÅd1YĄë Ō‚ Â7 †brjČj'!˜Ŧ2Č=d2Q">2 L†Ž Ŋ( ⁂l0ƒ †d8 ÃA„ Ō†ƒpƒ´0Á„ †xa4A Ōa¤ÖëĶ<í„f<Œ:r 0õ„f/ĀÁĘā`ˆetāežÜ6C*3ƒ<„f#!›„%œā.``°aht̰ŒÄ 7!&" cby# ŧ AéĒj’ĢJôn  @ÃÁ°‚ L<>ôũ=Ö`6.`m߇AÃá˙ú ûĐMí ›Ūē˙×Om&ę—H8A{i>ūU˙ĨÚŪ‚ î‚ í¤˙ûuûi:Z]6“ûĨí˙¤˙ú_úOÚOëõ˙ę“Õ֗ôÚ0ž—ˇū—˙ĨĖ&Œ,ÂzŪë{×˙ļ¯{jéibé7ßĨ÷˙˙øK˙ÛŌoŌo×˙ú˙Iĩë x¤ô˙^øâ—˙ĨíĨíûū˙ˆã˙hÂíĶĐŽûôCÛk~Ŗß¨˙éûzWé_˙ļ—ÚV•¤–$ ›:ú­ūŋôžŌ˙ß÷˙˙z÷WŌÂÃ\#Ėí[Õ×˙Kßöõú_Ģũ´ĩon­$˛ŽL$‚˙¯ŧƒžAß˙Ōũ/o¯ęõ˙ûô´›J´Â0×I­'Ō­˙ë˙A{ˇ÷¯é_˙¤ûizé„aĨ¯÷„—˙×˙KôŊŊ_Ĩ~˜ļ“÷ÆÚIx A†’IzO„ ˙˙˙KÛũŋôŋ IĢ˙ëÚt’đ‚ 4睏˙˙ãũ/Ō˙ũ/ÂLÖ˙tĩtšžļ‚ƒ@aĨ¯×%Ãgã˙OÛũŋđ—æC"O÷ß~é.ĐAa‡]zŧā˙˙ņĨí˙–ā˜ū—ˇzX„ijŠwƒ˙8˙~ßí˙ÂũÁŋÛI÷Ģb’ÂAƒA}i>ßķ€ųĀ˙9ŋŌö˙ĮöČkÕ˙õjēXAõũíũ˙û~ß˙˙îAT˙ēV¯Ŗ ĩX@ƒiz¤“ī˙˙˙ˇú^ß`ß÷˙û¯=}q}ŪŋöCFŸû~ßíũ}mŋūéZI7Ĩߡé{ŋ˙ŋ˙ˇũ{{ûûoûi{é7ĨÃũiër]˙ˇí¯ˇëÚî˙˙W¯Ö 0‚ouJ`zũŋūß˙ũ××īVŊSzXa„ˇr:¤—ī×ŋ˙ˇíĨíī˙ˇ˙jûĒWŽ2 `A;a' mũ˙ß˙ˇ˙í÷[uˇũ=i^¯Ĩ†+bĸ‹´žŸK!÷˙öō´Ŋŋ_]˛ ŪŊmŌoH†ĮÃaĻ[zŪ—÷˙íū˙ˇˇ[u˙ßņŊUõá†!؊KôŪŋˇ˙áŋâŊŊĩív˙ÕęŖWŌōnC2à ˆ6Å­>­é~ß˙°õßūŌŪļôļę7t¯_A‚@Ã$ÛKŊ&ôŋo˙ÛūŊ´ļŌÛĩízĨ}/O A&ÚKé0Čl|%ŽÃ˙ö˙vŌØi]„šúoI~ƒ ļJ›Á&Kė?˙oK¯v[imà l0—é_Køx,0aĄL*¤Ø0ŠĻž›hiēiģ “a„“nI6*šum4>’ Ļ(‚€ČcTbAh ÅaŠ!ž˛˛¯!˛ļ )ôČJˆcL1D2Ģ Ą„C*ļ!i­§čƒ!•Zíaá4 ĸœD ipÉpQ˙kÜ0Xb°°×ô˙ˆ0B"AP1 Ēˆâ"8ˆp`„!`„.œDGQĄ xj؈ˆõ„Ŧ õ¤ĨF=*A)ĀØ‘X1Aēĸé\!Į˙˙˙˙˙˙˙˙ü†ŅA0Tŋ˛O H <7‚†¤ڂ 1d↔~@đ7‚ 3 x4ÍHˁāĶ2ŗKaķÁšˆ5âABáH*Ađ*[}=¤A›ˆ |‹šŽM2 ø†ŋWūĒîw[w]ŋí/Q˙˙ũ_Ōúōa˜˙˙ļžģMx_˙K¯ņ_˙Û_˙˙ũ/õ˙˙ũĩ˙˙˙Ōë˙˙˙Iĩ˙˙˙˙˙%ūCSˆ| Ų˙˙¤Ü¸i\”Čjy‰ä ×=AĸŒ‚vC. Čf ƒ\Č5A)ÔĄ7 ^ aČfÁ܁A w!­Ä..˙üB0@ ōN=0P]r =4ÁS ÁB‚ cČ~ōŅHD×˙˙I°ž˜PĄ0ÂFČęS!°āē‚Ļ™ M ÁB H0uFč‚ƒ>đH0A´3āāĻ˙í„loL#…āč ØI&´`ßč/FŨ7ŖÂ7ĻąVŠ‚ûīnĒK˙Ōč>Œ  ƒ ŌôŸA c7Í,‰†Ōrņ&Č(Ä`V‚ Ŗ'R0‚gN´ÚN–—˙íī›I¤&ČlÅg§ũ.˜Ļ➛ˆAŌâ]ĨČ(ĪŊĩŋ˙ũ.ރĨ¤ëõu„UÕĢĶitîĩKŽŠ/˙Ûw¯ū›Õé˙KĻžoץ˙Ũ[öŌuŌü‚˙Ĩļ“Žŋ˙ú_˙OM¯V?õŖ Ķi] ImĖËū›˙˙˙ũ˙ũũ}˙kÖŊ:Ō[„  ē¯˙˙éúû˙ûĶktÅzĨ°Đ4ŋ!˙á¯×ü_˙īëėŸŋ§Ún’¯FĖ0—ä2y›?øû_û˙˙˙ŲÔ ũŌũ}Raácü#Ã˙ō Ūŋį˙˙˙ØŪÚMĶwI7ô_ ŋūp5ö—ūß˙˙ūũŌũm×}$¯Ōú˙Øa/ũŋ˙ūŋ˙õēúJũĄũ/˙ö!í˙˙˙ä5éũũ>‹ĻŪ—ãú_Ũū/ũŋ˙ēÖü÷IĩŌVõK˙˙KûŲ€Ö˙ˇ˙˙×īũũ7¤÷I˙ôūß˙ŋīä2Ũ˙tĩô­ÕHw˙ũuģÛŌ˙Û˙ûKJ˙ũ}Ž)&ú¯˙õéļ××˙o˙ßë_¯XĒumŊ/˙ítŊ[ ãë˙ˇ˙ö•¤Ú÷ö‹ĢũqI˙ĸū †BŽÚ[kßūß˙ˇPŌ°Œ/Ĩeŧ4žŠ&Ũ%˙öÂ\0“ + %°Âō\ ˙ØūÚP †—ÚQLU´î­ŌĨ˙ėBƒˆLS' ˆ1Ŧ2 k4 A‰5lƒęC›I8!ÔC@ĐJ)ˆY*†v¤á•đJC˙úŅ;Xam˙ė.ŋ؅5ņ ĻˇĻŠß˙đ„ 0„0BDq`„DDC9X†A„4ø?â""!ņG˙ôƒ˙_øI˙˙ōā_ú_ū—˙×˙ū­¯xõ_]pÁ?ũ[^H:¯Ķh/ĻęŊDq/ČãĨļ•}ŽÚIz°Á"ƒO ë B„2 ĩV!öą˙˙˙˙˙˙˙˙˙˙˙˙ū žttV  (ĀĀleptonica-1.86.0/prog/chars-16.tif000066400000000000000000000077421506303110300165650ustar00rootroot00000000000000II*$& 4ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čxč†HgÉ‹ōĐ@đl´Ķō”+˛%ä:ˆ+đ$“d6Ũ" S!ļä5hCV„ †R‚ ŽADČcČeL†Ŧđ^ŦjT›ƒÂaÁ a×RĄŖl:N’mRá°Pƒ Ĩ„ G 0ŽX@Ō ĒzŲ‘ëAÂϟ„ ƒaõÂ9m'¤mô›OŌl4|Úá¤é7ū‚íĒN’M§I-„}g†áũI7Wū–é'Ĩ´ūœ ¸A´ŦĀ))°Ņ]_Ž’úm§ēIn Ié´]tU6•ūŋ¯K¤­†×ŽO_ékûũkūŊuaŠ'i+cíî—ĨŌé_¯_õ­.˙ë_õ¤ŋ˙×ũ}*l:_īZ^–ŋŋ˙˙ZZęAŽõ˙ôŊ.Ŋ˙[¤ŧ#7ú˙˙ÖëŊČ) U­$Ø#ę:[xú^Õ¯ų ¨ũÕ]$ŧ%ū’ú¯_á>ûĒŌ§Ō_ǝ%õL4ŋī÷UˆKm_˙ëāĒÚWūC*ȗ{iUnÂŊ/Õ*ô“ -z_o´•¯˙¤\]ũ0Đ_īō… BŦ…]˙ô’öĄV)ŋ먃 % ¯ú_Š—:į†đ0õöĩd¸2$Õn ˙I5áĶVkã[ B9ČZütŋĢŽƒq0M+ĩõà "Ō°g˙ū”¸Ú]h|#˜l0ĨŋƒxA¤Ū?Ĩúˆmqn›IbūCST‚8Ũ;˙˙AēŪĩH;_e—oH6ˇųą2 ‰Ōũ-n’ ´—øt’ĩoũ/ô›¯­UÁ…˙ˇĶtß˙ū–ģīTØ˙î’ũ×ę—ZN„† ŸI^ē ądKß§V˙ xK¯ôŋõ­z˙IotŋŸŌ×úWŦ˙Û˙īŌŪŊ}ôŋm/Ō×JˆiwëõôC)˙ûm'¯ëH†˜˙ŋ^—Kô—ņū—ôžAC×KŌZ˙˙ĩkīé6—Ĩ}zäpC.?ŌKĻßō ąŨiuˇęēĨ„ÂūÚÛđR–ēWúOI7Iw~ēIul7­SŪ´ˆbz]Õ˙H/ūôˇV Š?úĨ~†Ú[i:I6ŠjŊ^’WL0‡ũ{ĨŦ4ŽÂMŌéˇzXz[a&&Úm-t›I°Â ; 6–ÚAÕ/(ā‚H1  ×ôûiĖąD4Ä1 °’L4Am5āÄVL&ūÖÅ|.°Å˞""A­ `ĢĄHR !`„0ƒCČwZÄDD­/mR˙ĒKÛI~’îŌKÅ´¨w¤ļŌ´ļŌŨŦG˙˙˙˙˙˙˙ h ܁āËĄ oŠ@( āÚÃX‚!ĩ Į Iy°i™T&C]!  „4 j ĀĄĩ6 ‚`A !AŦ2dÁ Tˆ‚`€h&T 00†* õÆ„1VA}2 æC!—ÄÁ!ŦŸƒІf˙˙[Á80˙úāŸixL vCi #@ō ĐBA¨ ‚ƒƒČ™!—2s!—4|2ĖÁQĖĀÃ!›ˆøPČ4œ‹D|(dNE:<&ˆlĄ Đ hä6fŽw_aŗáÁ`ėđ0™ā^ všiĻĄ4é6ĐA a°@Úl9đöšjšē ^‰¤Í‚…Í“ø0íÁ°wđøtũ.÷ĐAˇmÛIώ}ŋ\=øIh Ú0ũĐO†ū“_ú^ˇ¤ŪÚMî“˙ũ?ÚN—ôč&×m&ļ˙Ōũ.ûŌot›ÛKë÷ûĻÕēŌöŌ ßĨí˙Ĩ˙ézŪ“}¤ß˙˙iZĢÕ¤Šii:0ģĨīū—˙„ģ˜Y„ôŸtŸtŋ˙˙m'KKŨß^ßú_ū—0ĢīĶMū˙ût÷ZMũc­Ĩúûxâŋū—Ũ{zß­ú˙ūē0ģ~–š €ĘâĶīõ˙×˙ Ŋ×ī§õÄq÷ūÕ´›ĄK Hƒķk}(÷ę?ú_uíëũ˙ukúNŠaaŌ‚fîŸë¯ũ/uöū˙ŋ˙Õééē´’ÂÁ­#Í˙zKūŋú_uíęũ+é_í×ßĢÕdģ ÃŦ &Ō˙ ģä˙KŨ}úõ¯˙õŌÕ´­%Ķ ÃT’īKÛ˙¯ũ/ēûûëŊ+ũę÷ĻéÕ-AuīĨč*˙˙˙Kßö˙˙é‡ũîˇé7Iv ÃKJŊđ’˙ú˙é}ĨíęúJúP˙×§V;Jŧ ƒ $’õ¸`˙˙é{ūßú_„™ÔžŨĶëáA L0Ō˙§ˆë¯č/´Ŋ˙Ōü$ȀlūēŨ5i%´X`ŌÕ~ā˙Ž?ũ?īü%ųˆ`˙zē}ˇI- ‚à .ĢIį‚˙˙Åū—ˇūYÁ0˙Ŋ×^ôą,i~—x7˙ķÁ—ø~ßí˙°_¸a˙¯WVÅV! :×Ōö˙žĪ˙ųíūžßøūŲ ĄŊ{ûŽA†—I{í˙ž˙ūߡ^ß˙íW×û[_OKa×é-īõž˙ūßë˙˙[SGīOMĒ6›Ipƒk˙OŨ˙˙˙ˇíסŨwöū˙é/K„¯TŊũėƒzŋö˙_o˙öÃūëĨ}7×kŋUûõū÷˙ˇíסŋŋļ˙õī­ëà úĨū8ä3'˙ˇúû~—Ĩŋũ펒OĨ† žßTl3ūõû˙ˇí×ũũũŋî—W¤Ū–aˇŅuJŸß¯˙ũŋ×Ûß˙oū˙ž°Ã!Ē&&ļŌĐKī˙íûuíú[ÖßûĨĨĒOŽxA mĨĨOīĨ÷˙íūžßk˙Ĩ÷Ũ%zDFxA[Ä"vˇÕënûūŪACíסŊo[d Å{ûéV NL%¯Vú˙˙öõ˙ī´ģKoûŨ*ô›ŌđÂlF•ūôĩÛ˙ö˙Š÷Û÷öôˇ_ؤ¯¯ xj@a„K´ģŌoKö˙ũŋßÛŨ-´ŋûĻ*ĩ}|ū† Iļ•?Má.ģ˙ö˙¯c´ģKoK×~›ŌôÔ0 a„–õa.ú_ˇ˙ė=-˙m-´ļîģKŨ+Ō]h0 6Ōü$à a-pÃ˙ö˙ũØimĨˇim…jŠ_Kü6‚à VđIƒ”ƒŸ[a­ŨöÚ­ĩî+a Žė%lKô¯ ž<-ƒ *hB hBCV *ĒęÜkĻ›°a% 0I[ƒ 'î­Ļ‡žAˆD jAŠÂ0‚ƒPĄ!Đ ‚!â‚õ4CŒ õ;ˆfˆb Ņ B Ö04ĶT 0d2Ä.Õ„Đaz%ÁT)Vŧ˙îŋøaa…¸aa…ũŽ" Áˆ3¨d†ƒPdB"."! Ļˆ0B/ÄDt„G‚ŧˆXF€m Ēč>¨ zZŌFÔĐi¤@˜ƒŌ.ĐQ¨iP5Ĩ$3‘ ĸĄģđ‡˙˙˙˙˙˙ōáĪĻš ‘`ā¯8įd[ Ģd a›d5,†ĨūC!Ay<6ü)ÔČ ŗ Û0–Ãؘ4HiāHáŽ… ´AH!— ĩˇÂu¯]4ũęԁ÷<99îM2ø†ßVūꗤ?ú÷ũ¯¯˙˙čâ×ĨĶ^@Ėã˙ę×ũĻŧ/˙Ģū¸…˙ô­/˙¯ū÷ũ˙ũ+_˙˙ū›˙˙˙õ×˙˙˙Ļ˙˙˙ũ]/˙˙ūކĨ2/l™ /ČiūCR™)Ô‚qČfšO!§ĻC^„4āŽdhIČeÁ. \ų§!žg‚āŽ6šL ŋ^Er+#ˆb˙ũ\A‚@đ@đAá× c‚ ÁB(@Á ŦHfp,qzŦ… †ąĮ˙Մô„0Žhę “<ôČA čŌČhB Aš „pƒ Ũ ĄÎ…FĮF y €f€@Á(0›‚ a/˙̧Ļ„lp‚ …&=?Đ/ žš7 Â85¨H4Úi…°Ōh50_˙VŠôl˜A tœ*ĩŖdČey ˛ũ6Ãd z6M&Čôlšé#ČcŪžŨ´žŋ˙Õč>‚ ¤'JåãÁ–ž!;ž–ĝˆN“nÂAŨR}ßõĻū´ŋũ+Ū!6–t›Ÿ ¤˙ĨĶON­ÅK‰sJä ÷ļ“vŽ“­%˙ôôŨ=kū“Ķ ēiēm'Ļ×§˙˙Z´ēŌ˙õŋõt´ŋëũ.̝ŋއ˙ēũēoęˇū››˙Û×ßôŊßtž›_ąũÕŅ„Ōt´…W˛ <@‡ũ_ô…-˙đ—˙˙ĨÕ˙Õ˙i^•ni˙Vû˙˙˙č/˙īīö×Ļéēt’Ka i~"@đW§¯˙˙ú_ūŋūƝūë̤Xa ×ōÕ§ëÉÄũÅ˙ūūŋ5g›­Ŋ6AĨų €ĖĄģ˙ŋū˙˙˙ö÷][IõI‡„’ Wá˙•béĪ'˙˙˙ˇ˙O^ī¤Ū’@×á˙ųāÛÚ_û˙ũ~ ūÚÚˇWi$ũPkôžŋöë˙o˙˙˙ ˙×ë~•ū_Ĩ˙ūà í˙˙˙äũŋKĨnŋV‡˙ûŋÃŋö˙ūū¯Č*Oũ&öôczĨøū—Ĩ˙ƒ˙ˇ˙ũkøīëT›zK˙˙ŨûåÃkūß˙ŋ×ä3!˙tĩz[ĩK˙˙ĢŊđ—ūß˙ëí˙úûöŠ?¤C˙úëëz_û˙uĨ˙ūÚÅt•ˇ_˙˙Ķm¯¯ūß˙ŋ­¯×kÖĮMę’˙ũ…Ōí[×˙o˙í+Ļ×˙XÚŌmŠK˙ûFĐMļŒ,2úûūŨZ ĩí+$;hŋki}*˙ö †“ ‡†Øa.Uû˙ÛJÂPÂ6ŋÚpÂ_ZM´ŋ˙Åp °ŦBļ5†ļē°kk­ļ”4ĩ´˜Ļ+VôũŠ8g0…1ĩ$tC=M^š@`Öä­Č%d1YĢ”šÂƔB d3§†TÔ 3S´ AčūÂéσXam˙ė.ŋ؅<“ âškzéÚ˙ü44 `ƒB!Y2`@ÂÄ Đaâ8ãõB""!xŽ#ˆˆˆ×ūA˙˙ŧ$˙×ū“ūŋųÆ%˙˙ū—_Oúūļ—ã×õü0žž­ĨŖ géWĶię@đj€Œ§tĢŌÛI/ f oö—öÛ %ņá†D w AĨ†!12õÂÁšāŦĩˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā@ ‹‹ŌÚ(ĀĀleptonica-1.86.0/prog/chars-18.tif000066400000000000000000000106621506303110300165620ustar00rootroot00000000000000II*ô& &Ÿ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ČdĨîC$5\†w ļ<âAÁJN˛ —ÛĈp*MVHiЂŗlĄ Ē7‚–C=UÅĖĄÉáH3á x xA…I¸:0 ‚0An& x]B'ŗ¤$ÚjaPi… K  õŦ†jto]&úņ0ĄiaŅá†ōᕤŒ7­izTl*iøAR6‚ īŌ8ĖIôƒ¤“wÕ6 ¨ĖĢh-'A7×Ĩ†–Ō ôéŌ¤āŒüøŽoĐT“i?Ž‚ß~ž–Ķ][Apƒpf3`ßžßúũZKé7uUÂéé´atĒ’´¯õK×ũ/ ę­ÂéŌŌŌ߯ßŌę’l7DAęąöũ/I-u˙Ō˙˙[ Q~Ģz^õéi}_õ˙ĨĒTᎷūĩôŋ˙˙˙úĨˇ_÷]/­/Wõ×ũ-%Ŧ) KĨú˙õû¯˙ņū֎˝ņ¤Ŋ--{ōâžô–’K`ėuīKņîŋ˙ĩúKÂW×ú_¤•¯îC*˙ôœ$§¯]˙Kúnŋ¤{ĨÅ Ũ_Kô—äsIm/õ Ņd%ßt”/k×õ¤ŧ=&A_öŊí¯^Âo¯é$ŧR9ė4ĩ˙ÛÛI&ˆ5ŋ¯ú_đƒIŠoúĨÔ1 L…÷˙¤ %Ũĩ¯ŋą>Ą$IūŋČ5éķãĒtÃŋëĻB%5î _ԃK‚ é¨aļž×°ŌGņëúM.ƒz8NŽÂøû'!Œ"ĮëúĖ ?§ˆ éqÃâ^¸6‘ô›ąūŋ¨@ÚXēM¨Aدü†Ē| uoúūŋŨ=$…īJ¤ÃjßäÅëô›KzuH5ô@ÜSŌm'˙ ¤!IŌũ´’m¤ŋÃi$ßë˙WũzN/ũút›˙ĒëKK#ũ*lũ%Ŋēō‚÷¯é:ûęéyŦ!/ÕŋõĢôŋôˇøUúTßi~*ū–ŋ­uŽŋ¯ˇ˙_Ĩ˙Ōē˙é~Ú_Žē[ׯ×Ņ ¸˙÷ßë­*!ĢÛõë˙é}ļ—_úÔú^’×ú˙b­uoŌēČt¯Kë˙Ōûkúë§^˙ũ,†ÔĖēũ~Ÿü‚´.ēW[ͤ•¤–O_¤m‡ų ¯ Y”ßĨĨÚ^¯ĨŨ˙¯}°ŪĩMzŌnŋm.ŌKU˙¤ēn^“Ļ×D kļ•é=%Ũõz[i0Â)úëĨ­ĨÚN—jũt’N­„{ŋũ6’kh$ÛI´’m ‚ęžØašë¯a¤C6 ˇXa"p †VAī[!¨A$Ń ×Ļ•ŠˆÕˆQ5†qLU1A°˜ZƒX0˜A§ĄÚĻžÂa(a !ĻB kŌ !a`ƒC !°"-ĨЈˆúKīU_k¯Ŋ%ũĒUīZęÚIV-ĨCŊ%Ú°ļŌ´ļŌÚab?˙˙˙˙ų@Ė‚]D2Aļ˛ĄŠŠÁKBƒ!ø xFAl L‚’2@dÔP&CP¤ä5 . †\  ¸2 ƒČjjC_BІbr `Č5 TAŦl Č`A 0A‚å8`ˆÍ@ä`1 ED6y Аb„x†‚ŧ‚ØlԆØÄāÁ ÎEÁŠ`˙˙­áƒAÅūApÔ&ža†Â4aƒ#@pà Á0X`ƒpƒ†Faà 0ŒÃ°ÃG‚Ⴀ&0˜$à û¯°ƒR ô! hŠ}5œƒĐƒJŠĖĄ ÚÍĄ Ę#āĐh TNŒƒ^ Ôrŗ„k Ū„0 f„ AF:8 éOuĻ@@ƒŅ aŲl"í 4ĶM5M]] ›ah&Ø@ÚAæĖÁíSĶîC(éę šÁ´f =Ãa î īē ˙ôˇVŨ ÃÃiI˙Ũũ4ƒxm*K„6žč'Û˙ ?ū—}é7ļozëūë÷Iũ- é7ö—†˙Ōũ/_IūŸŌ~Ÿũ×´­/ûAĶŨ/oũ/˙/īIŊ´›Û˙ũŌ-.&˙_oūŋũ.Öa=&ũ&ũ/˙ŋÕĩn´ĩzna~Ģõ˙ôš…›]ŊouŊ˙˙uĩí'],toŌû˙K˙ŌûKÛéūŸ˙˙ē{ŪŽŋŌē_o˙KßûÖũo×ų…I´›HRČd Č?Nˇô?éū—Ũ{ûū˙î–ˇęé%…‡¤Ctũ.߯ū—ēûz_Ĩ˙ũūûuzXX: Üëz˙õ˙Ĩ÷^ßß÷×ûĢiu¤éV¤ö˙ú¯˙˙KŨ}ŋ~•õŋîžÕ´­%ÂíęŨ?¯ä|ŋú îžõõūŋ˙§ÛßK x– ÃI “úŪ—ˇ˙˙é{¯ˇ×õëēZū“i% Â0Ōę+§Ō¯˙¯ũ/ŋßīŽúŋīžé´ēKL A†ēúŪ_˙˙ú^é{~úJúL?Ūžzm í/§ÁŋŽĢ˙Ĩ÷ûzúū”öēû¤—„`ŌI}x‚˙˙˙Ōũ/ŋôŋ 2œũ7´ô—„ąpÃKĒû•—ũuãũ/oö˙ŌüR 6ūékÕZĨ´X0ĐZúOüq˙éū—ŋøKķhÁ˙{~­ēUā‚à .ŋšđ˙˙ņ~ßí˙“Ķø ÃũëĻũē\0‚ 4ž’§Č=?ū|?Ĩí˙Âũ ßúëĶqĨˆAaĨĒë{Ά3á˙>Ÿŋ÷ūÁ~Ø7ũũZĻŌX@ƒŋéö˙Ãá˙ũŋēö˙ĮöČ2 ũŌm_ô°‚ ]i/ˇõ˙˙íû¯ˇ˙û8Ķû˙ĶkÂ6—Ĩ÷ŋ˙˙ūÃû¯~ëēė÷ŽŽ‘Ŋépƒ˙ŌOŨëž÷˙†ũ×Û˙ũ°ßúęę—ĨÂĻũb÷˙r˙íũ×ŪūūÛūß×íépÂūŠ/ũ÷˙ˇîžß¯ûŋũ6­Ō_\0žõW÷øãj§ūßŨ{^—oũ¯úMë† ›ŊVl˙×ė?ūßēû÷÷í˙ŊuǎĨ†Aoĸę’_ŋ^˙ūßßíīīíŋúęß^–aŨˇéw÷˙˙ûĨ÷õõˇūŨ7]$Ū–  qp‚tœ$“ûé}˙û~ßíöŊ¯ū—ëĒßᇄļˆDķž¯ũ˙ũŧˆôŊŊëzÛ!”õũ¯ˇ¤úD2Ŗ < ›bšI'ÕŊ,xī˙ÛũŋÛí.ëoûŪēę›ŌđÃÁà ‚¯˙Kö˙ũŋâŊöũ×o÷]XØÖôŧ0Ä ›^úoK­ŋ˙o÷ûŨ.ŌûKēbŊ'ëČ †Da´’}[×˙˙ÛŌëÛîļëoũzŌŊ|ƒfĖđÁ„ †—}7ĨŽß˙ˇûûimĨˇĨļ—ĩž•i¨0 [ +é0ČfĨûūßõîÚ[imõÚĩZMé. “aĨW„› „ė?˙o÷÷m-´žŌÛK}+Ō˙ 4à /¤Á„”%Žß˙°õëöŌÛKnŌāÁ}Ĩ}%ôƒÁlImA&-t(Tà SM=6Ô7M7a„“a„“nI6)ĒŌ´Ô/ááaˆH4Є „$4à šiéļ†žšna›I°Đa$ÚũXiĮĩAá4D3+!œ@A@ˆj bƒpd0 ‚āō °aH0ĸ †ģˆ5 Q pâ @a…ģ‚L Ākĩ‡„ /€Ę @ŗ†I†Wëz˙pÂøal&ĒĢüR`„D!S†@(ˆˆĐ‹ƒ$ õ!ŖQ ņ„G‚ˈˆŽ¸F`JP@úÂZAõ zI#c)ÆGP• MÁę1õ !´QPŌĶD CnøC°ą˙˙˙˙˙!¯Š 4{íHd†T< ā ČČđANJČ6Y {ü†@<<üāOáHS x)ų l>N ø z ā¤B? āŦA ĸÛá´ŋČŲ ģôļúuRČūŒå4Ķ!•ä˙˙îŌ4ŨëĨ_Hõī}4Ŋō¨?˙Î'ú^ūŋūŽŋíW‚˙ũ]zė ׅ˙õu˙˙˙ę×˙ß˙Ōzõ˙˙ũĩ˙˙˙Ō˙˙˙˙o˙˙˙Ō×˙˙˙Û¯˙˙ũ-!¯L„ō “!­<†ŦōôČŗ ØäČ59Čbd5`‹2g!ŽäIUĄČ49ˆe!Ĩ6AÃiČ2aÃL ˙Õļx `„) ŽČ/< a 0@ÁB5 ÖPPR‘t!„ęA5 šČ1äŦ‰§˙õˆAá0ƒa9¨ Ŋ2‡ Üúä œ&™ ŗĻd2ŽdBäŦƒ įūû˙˙õm=#c„xl(Gˆˆ …Đ,*i…L#ãaPaQÁa z#ˆ7ĸcƒhØ(4s`ē˙ú°Ž Ķđ°‚AÁPAŦ'ú ĶO  ƒMÕÚĻē“ĩ_˙¤ôŅÁĐA t›Ō}!™ä ~‚Čeú8Tp™ ŋGĐM1čāØA!•ęĄŌ!ŗČ1÷MŪÚŋĨ˙ûtúAIŌ˛9&ĸģélB Bv!:Nč6“ē6õĖGĻīëM֕%˙étņNēN“ęĪhA˙K„ÂxAÕ¸§KˆNŽ?ô÷ēM×_˙ˇŨ6—ēßWWú Ļ›ĢĻéĩé¯ũĩÖ­-tŋũ/zztŋ÷ßđ—ūëĶ×O˙õzļ—Z˙ūØõkúO¯_éuO^ŨkãīētôŪ)%ļA¯lŌũũ˙Ō÷÷KÛ^¯ûK˜ũĨĒ_„û¤5÷˙ū‚˙ũūž˙ûô›WĒKm—éūŋ˙øK˙ûßø?ÛKJ÷ĢT’ÛAĨø‰Āāõ˙ë˙_˙_˙d0Ķ˙žëŌ‚ƒŽkų €V¯×ãī˙‹˙ũũ~SƒGÛ­+Ļ›ŌAƒ ~˙úôŋī˙˙˙a˙­īž’L=$ƒøFb˙ųH–˙ųä˙˙˙öūéi[ôŪ•ŋ@ŋū|6—ūß˙˙ūũēûŪÕ/ŌŋKë˙m/ũŋ˙ūŋ˙ÖÕé7Ĩ},0ŋK˙ũ†_û˙˙ø7ûtõkwĨ~Đū—÷ą_û˙ߐV#ũŅé%ø˙ú˙á…˙ˇ˙ũi~ûÕ¤ôģõ˙é}x0_ûū˙ūû_ĩIģI/˙˙mĩ}oû˙ũ?iw˙§Ié&ß_˙ũ/ü%˙ˇ˙ö–ˇ˙ęÚßj•Ū‘ã˙õęíoK˙o˙˙¯˙ר˙}$ŋ˙ũ[}Ŋ/ũŋ˙nĩĩúõ}§¤›o¯˙ė.—kë˙ˇ˙úV“k˙kW•ūŒ- ˜mŖ ŲĶ˙Û˙öûAZö•Ú6ĩN“nŋ˙ļ— &ė%à ßūß˙ļ”4›Ú˙dŨ†[Ŋ+ŌK˙ö\A0ČXa„à Ę@Ė˙°˙ũ´Ą‚ †øiG×Ĩn’˙ûf)Šb­ŠNvž› 4Âv°ÂQLBĐf‹ 5IŊ:ˇH˙QĖ$íI]؝†A’@.S†‰ ܆]9c$0B09 ˆP˜Y ‚"5!ƒO Iƒ×˙ØZA„ l˙û ˙ØSÉŊĶ i§­˙˙†„ hA„ ؈â2D 0ąhCø?â""!â8Ž""#˙á ˙_øH?˙ū—ũé?ëúŲÁŋ˙˙ŌëŌz˙˙û^×é}'ŽÔūך€Ž•zMĨ˙˙ƒ ];iW¤#ˆęž@ŅģiWĻ–ÚI|{ $—ÖÃÁ\pA<7°ƒ­ˆQDÁ‘öŌí!îū˙ĨäYõi~ëûĒQUĩé/é/‚ĒÃJ˙˛ BŨíĨ°•Úŋũ$ĢÂĒK_é[Øh$ĢļŊ/ô’đš‘hŦ4ŋõāđÅy Úxß˙H/ˆxA¤Ä&˙ū0Á$¤Gú_¨$–¸AĶëõė—jk[˙ôCRĨæb´“PÃŋßä˜ šī˙Ĩ\ o Ķ ĩö°ôyC­Ž—ũĨÂ}&ˇ¯Pa¤“dâ]˙úHāÃún ´‚ †´ŋPŪCJņũ/Ō‚ Ĩ´é>Ž6à }.CT"A“ŋ˙ô-Ž/ ´‚@ÜWūCi>æM˙ĨúO]îŠØ^˙0ÚH ÚWųō˛?Ōm-뤃a¤ŧAFIŊŋ˙ũ'˙m*vŋđÚKjßũ%úV—פāÁīĶ×ūŋ]k‘GI&Æŋô–öëúKõxŨw_÷ũ[üáŗoŌ×úWú „.zTŪÚū)~–ŋ­uūžŨū—ū’ē˙éékĨŊõ˙˙ļ“×õĨD5˙}/KĒ!šū—Ûkk˙¤A´˙õÕ~ŋÛ¯ŌoŌ ]tŊW˙Ĩû˙֓Ž@Ä-éz_˙ũĩú_ĨuôëúYÁāƒM˙¤—NũdouŌũŋ¤­$°ƒO˙Ũm†ū @đßēé´Ŋ+ÕôŊ:×I+îŽ?ôēÛIŌ­$´íj˙é¸Ōi6–‘jí/¯Vé/õô’t˜h2w­}ũŌí&ŌĢP—˙Kml#Č×?é{KVŌM°“t­¤‚˙áé$ÚLęĶkî“i&°ÂW $ØI[H%˙ÃÂ[h&!žēöŌ Ō‘e rrsMĨL0‚-ĻŊˆ„“ĐaŌL%ŦVÄ& V Ķ °a`ÁiŌƒXbÂá1 ƒÄDHj萆0¯Å ÂCBPY "2‚üC.úŦĀČ Ŗ€xkƒĀxjœ  ŧD[TązŌũRũē¤ŋI}[é/m$ŋę’Å´”wTļé…ļíĨļ–õ´Ö#˙˙˙˙˙˙˙˙˙˙ųPi‚œ†H- l V@đ,ŦāQĄ°12ä ÁŠ8ETUr€C k’ĐĐKT¤  *Ã@.U‚å@t €×5Ą¨0uĸ 4ʰŌ"`ČU†‘Pd PaA ã`Á{!ĸ˛ 0†mh™ )Ø ‚A\bȰ+°Đ%8ič˙˙ĩŧ ä\6ƒƒW˙ä# ¸uáaá˙˙ī8a ˙ũpšÚúad(PXCL\†P¨EÂ!˜A ŌfC4‚„#@Í$›D€Ëd4æ88d4´"88d4´"‡äA§ČA™PŒ‰Ú>V˜D€¨f`Œ D6P30!ŗ@Īf€Ä#@/iϚiĶĶm @Û4Ú ŗ@]„}ĻĻŦ4@Â(„%>~Ņ īAČ( Č(ˇ ŪĐAÚiϚA4ÚNĐA†Â0Ü7AæÃ‹Tû­Ōn Ģœ„aŽÚ> īá ˙ú_Ū“{i7ēO[˙^­¤ÚT–‚  ƒw¸IŦ7ū‚ũ.Öôƒ{iöŌ}˙Ŋéũ.öĐ^ßô—˙Ĩũé7é7éũĨ­6­Ĩūé6ž—ˇū“˙éwŪ“î“{}īˇúOZZM ž÷_oũ/˙KÖmzžëõ˙ûŽÕēm-/Ōm_¯oūŋũ.m9ĩÛŌot›Ūŋ˙]i´ž´ēzoŋKßũũ/×īWõ˙ũëŋ[^ąÕŌ_oR˙ôŊēöúŋĢõūÕĩÛ§K_Jûúû˙˙Đ_¯ˇĢúŋâ8ûüÚŽ“t)d2Mȧߤ‡HôŊëßīû˙ūžé´­RÂÁęC'ö—˙˙˙ĨöžŪ“úO˙öēOˇŊ%…‡TßoUī×˙KŪŊŋžģëũé˙Ō´Ģ RĖßĨõ[ũé}¯ß˙úßöˇļ“i:Ž ´k}ôŋ˙ū—Ŋ{zžĒũŋĨũ7IdK Z]:OĨūC—<>†AÛJŸVôŋo˙Ûũū6ŌôļõÛÚŽ›ëĶ @­´–ô›Â_ˇ˙í˙ûļ–Ũ}ĨÚ_KzK§† •°–úL2ąĨŽß˙ˇŽ×ŊĨ°ŌÛēÛ [¤ú˙†A[ $•á&Kŋa˙ûūė4ļÂ[ví'kJô—TĐXa„ŋƒ )ŌØkßíĒívᰖÃKģKa„ŋÛŌ žÁ„v„&F ˆHi† STôØq§ĻģI†A&ÜI6jki&ĶCú ƒ!’ t ‚!Ą@fąd6( ²Q.Ą†  D@gėÔHƒR†  ÔĄ‡:!¨­Šë†A­GÖAˆ@Ø  Â@pĐ5Öà @) pÄ,1 aĄ kđ“\4x&ƒōLHĐ*pČf˙ßßÜ0Xan ,0ŠŪŋƄDB"Ad@ˆX"8ˆ‡H'A‚zĄ ļ ^C$3Ė‚Ų~$AČ)q pāÍÄzސˆâ,Ė `Ķč zZĒ–ƒô‘Ė• ˆ…É?D@n=B=(aDę(°ž @Â聰3á?˙˙˙˙˙˙˙˙˙˙<-d4V@Ô á°mgä2CnČdČA €ŪČŲhkfAˇ?!N@đŗ!‘øRƒųždæXaūįĄ°5 xĄ<4 Ģĸ[|Đ5$yČ,YŒôļútŌõÂiú÷ũ¤@đIČũ)ÁūĶ!•2 s˙­wŌŽī[˙izC˙¯Ēú˙˙˙<Ÿénא5(˙ô´ŋëđŋ˙M¯Ž /˙é^ŋÄ˙úĩ˙ú˙õ×˙˙ę×˙˙˙W˙˙˙ô­/˙˙˙o˙˙˙Ō˙˙˙˙m˙˙ôšĀÚ' ) 2 ŗ!ĩųÉä)‘(Cj5?Ōr$Č12 ŽDĄsÚ‚dNDr PEâˆČk9@đRr˙ôÜ đ@ČmjAŗ\ aAr @ÁB( aPĄ0E8fAAHhD¨‚ã,ƒÔA„ŅäD¨†ŋ˙WƒÂaÂ=2 T bšāŠĻAĸ‰„ ČeQByš"žĢÚ˙˙õa=(G†Â"Áâ ÃE@Ƅ4i Y„Ķ `4GÆČҤ6h¨đ´F$BĐC?PŒ´p€_˙ĢŖbŊ0 𰂠„Aõũé„õAôŽ  ƒ„:M…IŦ#Ä˙Az’@×č˙ĖÁOií˙˙õøoû¯ŌnÖ¯č5øA}íĨ˙ˇ˙˙˙†˙×JôŪ’~”_Ĩ˙ūÚ_û˙˙ø7ûĶ{˙Ĩz´?˙Ũūà í˙˙ũų}?ĩ×I6ÕŌ˙˙būß˙Ũi~AMŋĶz7ž’˙˙Ōũŧ0ŋö˙˙˙đí+]$›ĩ¯˙K÷Ã0í˙ûũ~˙žõz[Ō_˙ũ]ū˙í˙˙ZˇäŖūŌÕõoŌ D˙ëëxK˙o˙íz˙_ŋJ›m%˙˙^›Ŋôŋö˙ũũo˙ĩzzŊ+ôŋ˙×JÛ[×˙o˙úéĩúūÖ64žÕ*˙û_{__ũŋ˙´­-õzĒVØĒ_˙ÖĐVÚ0­Ø>ŋû˙Ûí&ö•ļŒ,né^ŋ˙ļŋi7a-°Ŋ˙í˙ûĨh+_ō(öŪ´›i/˙ᄸa& ; %Ã^@ƒ7ūß˙ÚV“ ĪÚV†ëĨ}/˙âƒ&V*Øa%‡vē°kkŨļ” ˜­m&)ŠũęÚH˙Ú˛ĸ)ƒj  †8aÂØ@Á pØiE0°Šp.ÂUPnÖačūŽmŧ@0(†ÂöA‚ķ `— 9 !‚āÎ€ä@!Đ ƒ&˛ ÁĘ &˜Pu´‡¯˙ĩĐh4[‡˙Ø/˙búA…ņMˇŽļŸ˙ÃhA‚„BYpÉ  °`…ˆ`ƒA‚ņq˙œ$ 0#œHdƒGb9Ãđˆˆ×ū"‚!œøø˙öOũá'˙˙ŌŌ˙Č˙˙˙¯ūõß×^•¯˙˙˙ã×é=v×ûKšÃGJŊ Ú_˙ûi~Ú_¨”⋁¨fD~Ŋ!´’ō€ÔëÚ_Ú[a$Ŋ Øa’¯°ÂA$Đu†!D Ä@üa… ád  XvG0Į ,DD˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ā  ĮĮÅ|„(ĀĀleptonica-1.86.0/prog/chars-4.tif000066400000000000000000000026461506303110300165000ustar00rootroot00000000000000II*č& M˙˙˙˙˙˙˙˙˙˙˙˙?†įb †Į!ąČ9rĮ x5Aˆ xg‚øC@ä0ær˛ Fžh"ŸHĄôœ ¯@Žä‚ aņT%w„q˙ŅĄéŌŽ•‘ÁqJ­ GG܏>Gá"īN“#˜~ŋ˙ę•[ ÕcĢî‚(}.ŋü†!~:Ĩ+ ŋ|qUõ­đËĨ])Ãz_éW8>ėWî5Ï ū?úA4šsJí|!`Ū‚)҆Ō™ŒKú×§Ņ}°Ę_ ãĨOˇų aĮũ'ˆĨAÁ˙˙öë~–@Č8˙¯Ö@ür}AÕ+îīČäž´´xŽ×ĢiU¤–ŊhEl6!ēéjÁ‚ 9ĀÎ ƒV %ˆˆƒDzhDDDDGvGõãi$;ˆã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä2^Č„Ž@‰ĪÄ䥥ü†0ÜCá …Á Y=“ ņčAŽ Ŋ1d0r ˛ †˛Ë¸ îIČ$r}ö‰Øeö‹ļvÃ/C/B0l4A ĐipÂģa—˜EÛ ŧŅr<^†˜L&šÚ´ԎKŨ3÷A>ßt˙ĨßzAŊŌ î“˙í֞ęÚédŅČk=īõņĮũ/á˙ßâ8˙ˇíĶt>@đÎáaŌ¤"‡@ŽúIoéū—§@Š}Ŋ/Ōú˙ׄPęÃŌKÂ0Ԥ̸˙Ė>aøū+˙˙}-đJp4}ēŌēØŌÄ ˆg˜aĨĨé7/?㏗/ūé{á/Ša˙˙ũ% „6—ëßōö^ä¯ūO÷ûãđE9īûijũē[kƅHįûŌĮ˙ˇî—ˇŨw[o˙ąQĸ?ü2āA˜XebWīÖL}˙ũŧ˜üîģŽßû}+zD‡Čœ‚îpl†‡h5úL<%ŽÃ˙ö˙kØØa-´ļČ8év—O^—éG `°Å'hS3†c „O °ĐĶĐiģ‚lPNŅāÎô“a4‡˙üW˙ī˙Á˙{h"Ÿnú]‘ÃÎ?áŋü¸hÚ_đŠ˙˙ũŋ˙ôŋWŌÃ_×÷ūÃ˙Û˙û˙đØvƛ /Ä×Kĩo…˙ˇ˙ŽAq˙]ęī¤X˙˙SÎĘvpŖāîĶĶm4ͰąS€@2‡AÎáÁ”íS„›iũqz"8ˆˆˆˆČá—ĮԆŦé˙˙ĩũ&G ^#i/…Ø4‚a4ą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€€wIIß–ž(ĀĀleptonica-1.86.0/prog/chars-6.tif000066400000000000000000000035041506303110300164740ustar00rootroot00000000000000II*†& t ˙˙˙˙˙˙˙˙˙˙˙˙˙˙Č Ŗö@đ.ä3š†@GČ+Á W3 Čh‚1ČĩJČ(z!Ŗlr8†| ]ČB ‚ä_hŋô@Žę“d}Qy… Ļē ‚10?Ņ|Ōn’uĻO.Ú.ÚČᔎ*A7A˙¤ŋ×épÄ]OOSéké_Ōũ}iVŪC@ú_ŋ¯ũø!ãë’áŌßzô…m/ō ¸eāWļ•PÕÁ˙ũ$ŧŦé‡_éülRŅsņúũ$—‹RąXvģM{4ŸŊkũr;vhI†ÚøømMhžÃ.Üzũ"!qzoŧ؂)ü†tŌČj†A¯×ôžˇ§I[Ã/ŨRoŋČmŽ—účA˙ĶĨú_ļ—â•ú_ú[˙`¯ļ+˙KH†ōõô˛ îA‡˙IaëQ4Ũ'ô­,‚î“iV’]§÷Õ6“ †–´¯´´PŌÛJŌVŌKÚø†ŦS<›ūЊhŠ)ŠIŠ b" ÕƒZCBĸ""""aĄŌĄÖŌ×é!Ũ!ĮĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ČŽC 7†[iˆ>C 5øƒ!–ä †Â8dЃ†CAČbdæCĖ‚L‚Lžķ!ŗ| öBa !6L†„Ų0Ž †fxų¨"čœ Áę@ĐlIö48˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų|!Œû yA˛ČÁh!¯Ŧ‚‹ h7 Ür„ ŲĒŠ § ÃĒĨˇūpčŽ Ÿ!’?ũh"}zũ˙nŋÄ}ũ-ũ˙ū›ĸ/=Ųd6FC>d4fC)Č>N2 9ąČeņ ãšČ(˛‡ ÝČ1™“ĮČ?9; đN>Č/O˙\B/=y‚/ š‹įÁåpP]pĨaøŽEæ ˜Dv,*hŧĐ0ĄĩN–҆˙ũ&éģ.tƒĨj“Q#Ė8}ÃfÃ@bGšM†p“AŗŽ“¨pá„Đa(h Ķ Ą˙ˇū“† &?étĶͤŨ6ž8† î¯ĢŽĩ˙ô›éŌŋūŋŌúëútēŋŨ]5aēŠIm# ÄH3wū‡˙üW˙ī˙΁ēäOt—čžŌü#˙˜iÂ)˙˙˙ö˙uĩ×uĻô’ Wč/˙ö+˙o˙˙˙˙ë̤ũ/Äũ+ŊŊ—ö˙ūũ+ōĮūö7ätŋ˙¯O¯×ūß˙ē]ū­Ôi[Dß˙íS C0í E;ež‰Áû˙áĨ $Ø^Ō‡a}Ĩn’˙ũ†{Š lpØ ƒÂAá70ƒ8a 1QLAáņ#Ļī„›t?˙e͈Ž""""2áĨĄĮī ?ë˙Úŋ˙ႏ˙MĨ÷¤—Ģuˆ°Ō¯„v($`ƒŦDD˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€€FF~4<(ĀĀleptonica-1.86.0/prog/chars-8.tif000066400000000000000000000044441506303110300165020ustar00rootroot00000000000000II*f& vŋ˙˙˙˙˙˙˙˙˙˙ū@đXRƒhä ŽAĮ! OUrn[š ¨!!›a4™3 †@o ߈r <‚Ž!› ˆ ŊDâ ;_fËÁ¨E÷KwA˜TÂiPJ‘ˆ4]ŋ\#kÕ>“d6:ZM‚ĻÍl ZM¤ß~–é6̤“iŌTÚ1åÍÂmeÁĨK„I:ß__ôžļĖ>ŧ-'§‘×Kũ'úU˙]jœ1ĨØûŽž–—÷˙īõŌKjAģé×^—˙˙øúÚIx#h¸eW|qĨüR´ŋČgr UíĨLPũ}­yų.˙é0fpaīKJÛW¯ëIqyų&Vŋü[Y3Ö7×ôC`á%ææŠ¤Åĩ[*_aõë„$yė6×qÔ0čž#€ÛãĨúČí¯WAŌEöĎŋä úĸķJß˙ô…ēĮĢTƒm~CZŠtˇMūAĩ9 J/ôëŊt­Š^ Ã..Š6­ūA•úũ- đ1ŨRúũŌüVũ/ūˇ¯Čg×öëúŌŌȏ××Ĩ_¯¸˙Wôˆ( ÃÕézYH!˙Ō_Øvš ¨ Øõ֓Ĩēē^•vŸũSi6Ę_Z§ÚZ:ēîēIē Õé/L0ŋ֓iZà ]„˜a%l$—M/I(1#´˙ĩąD6!bbbÄ Ab"$e‘Gē ē­ŊRûi%Xļ•ô;#ƒŦG˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōPGČdĮʙ§!•Š  Č:rtäC$r‚‚‚\AAŋcČ'ķ Ū„ęC*„6j@Å`A9%æA<Šä_ üBĀ&A†a0°đÎ6áAœ Č7˛VC=’°G C<CDŲ6D  Á`Ám†Ãaaƒ6a„ašr6P`— ⁄ÖZMĢ0Ëļ aĻĐmhtAŅpN˙Ĩé> a´¸Pč6‚ ;īˇM^  ƒÔ*鴃~éxoü%˙éwŪ‚o´›õ˙˙֛ÛKKWJĶôŊ˙Ō˙ôŊ`Š_u}ŌũŌŋŌ}Wž]}/ŧq¯˙K—NG^ô›ô›˙úûôöŌ´ž˛†œW"Vx´¯ņÛõũúû˙ˆãūōꓤé XVXAGWßI"‘G˙ôŊŋßJũ/_öŌęûî’ȸA0õIúú­˙Ō˙Ōũ/oũ/ę˙û_bRĶ ÃJ’­nÁ/˙˙ũ/oöũúßJf tŊ֛Kđ‚ ]~ņà /é~—ßøKķû( ¯ßĨt÷Iméà -WJæ ˙|Ø_Ä?Û˙?~0˙÷˙cKA0ëéwÁŋ映˙0ŸÚ^˙ãølũŌ÷īK@ƒiuŌWßûī˙íûūßũūAĢŋžŌ´‘tÚ^›Ģ׏{Ō˙˛ûi}÷˙ļ÷Kßū¸a/ô¤pŸ˙pk˙oßöũ/Km˙ŊŌô›Ōà ™ÛDuIoßũß˙oí/}ũŋoũëīIŊ,0Č7NCl‘ĮßīK!Gī˙ÛČQ÷ũžëëČgõÖ6)}HQđ`Ä œX¤ŌŊ[Ōũŋ˙ož+īm-ĩÛēīŽēoKČ*9 `‚!šíŠ ~›Ō×ŋ˙o÷ö7¯­Ŋ}&ŸIúôÔ0› %Ŋ&Čqđ—í˙ûz_îà mĨˇĨ°azioI~ƒh,0`—ØH0`Š„Ŧ-† ožÛL-ĩ{°ÂVà ]Á„^“zKĩ‡„Đb Á„„„ C č B  ‚#  <2 L1ƒt!ІQ 'đ”2ЇˆˆˆˆˆˆŽ"""!ÄA„"""""#Ž-õH=$‚.ĘĖ 4@Ô2ņĄĐã˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä<†?[ x9[ d ė‚Ĩtwūŋȅ˙ã˙äB˙ņ˙ō!ø˙ųŋüüˆ_˙˙˙˙˙˙˙˙˙˙!•r!đĮäOđŸč?Ķü'úr!~˙¸ũ_Ķ˙˙ūäBũ¯˙˙˙ú˙˙ŋõ×ī"˙ę?ŪD/×õĩøjD/ĩøaĩøĮá…˙ã˙˙˙üˆ_˙ūŋ˙˙ũ˙˙˙˙˙˙˙˙˙˙˙˙˙õd8ކŸų( (€(;Ā'˙;B˙Į˙˙ÎĐŋ˙˙˙˙˙ÎĐŋ\ķ´/˙˙Į˙;B˙˙üĘŧŽ˙úzs´/éé˙é÷ŋ÷Ŧ¯s´˙×û×˙ŋ˙ãūˇ˙˙˙ęvBūÖ˙ûíGũuūÃ_ė,0_ãŒíū˙ø˙˙˙˙˙˙įh_ø˙˙ųÚ?˙˙˙ūŋņ˙˙˙˙ų ‚Q)‚å ķ •€'k_˙¯˙˙˙˙˙˙˙˙˙˙˙˙ō#˙Üüˆ˙˙˙˙˙˙˙˙ü˙¯˙˙˙˙˙˙ō#˙ņ˙˙˙˙ī˙ȅ˙ã˙˙ūFū˙˙˙ø˙ų˙ø˙ųŋü˙˙˙˙˙ČĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ëäÜ/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų6‘˙ā éŅŅŧÄ(,,leptonica-1.86.0/prog/checkerboard2.tif000066400000000000000000000060161506303110300177300ustar00rootroot00000000000000II*P & K˙˙ōĄ”9Į(}%dpÉxKdpÉŠA! lãč PĮĒH…øBˆčē§Đ‹)ô]  đŸE­é”øBôõÂOO č=<.ƒĶŅÕŊxH7Ķ§Â „ŊX‡„*̤Ä=&ôŸI‡„zMéô¯ ŅO¤Åé0E>“g|$íé0ŠũÄQ¤Á„˜„Sé/Ė^‚ ˇ¤ é'zKz PxKOIP#ž• Ę|%H^–֑Ũ ôØKéŌ„Á„)ôŖēi=4#Õ=0ŽË đƒBa=4/TĄĘAĄ˛8dŦ&›.§L!鮚„Âzi頊}4’(}4ī „!éÎĮúaÃĶI„Sá4Ŋ4˜Ŋ0‚`Žújé}a1„LēZM1”úM6qôšh%„>qôjiˆzTĶ$š0úMS.„Cč&šcŧ$ 'oIĻŊ&šp‚8ú ĻļG Š“  īxIϰ‚hãé4Âb)‘Āđg¤ĶA×A4×E>“ §k 4Đz;é4Ât’Ōi§ĐL&°‘ܧŌiĻ!ˇ„š cZ I A´;é0“iEtI´„šQ\ąôšUAŲJD{JC1×ŲzAÖÂ+ MHŖé&ŌIĢ#åĀđÛĨ ÂÛé) ąŨW‡ĐJÕw%A6 {0úJœ$ˆŽ•&C5Õ"§Žƒ_V“L.AͤĶ^đ› 4×6“M}1L&šĶT×&GÃ6 Ļ’r8”ĶMGM4×M0˜\&MuM5!ĮĶM5ôĶ ¨œ}4Ķîw&M fuĶM4˜M0š ôĶM úiĒRë„Âi0ƒéĻ“ä4EÃéĻa26ƒm4ĐM]tÂi4Į„ŌiĻ]tĐM4ĮĻ“L'!Ļ>˜I„ĶŽ&šrŖé4ĶA—D ´˜M5úM0˜LxIϚ}ĶMŅĢM4Ķé4ĶM>“L&šđ“ Ϛ ž{A5L&ĸë IϚi%`´ša4Ķ8IϚi—]&ša0˛‡#ABi ĐÆ ¤ĶUX]&˜AĻĨŌ ¤ĶMøA4ĶMlzL&˜T úM4Đĸ: é4Âib=&ša&V¸JĢ x˜] ÂN" IĸųĄMtš Ōatš ´@ņŽ\$Ōm&š.ē „­ ĶfH‚ŽiZUFô‚mb4? éHeēi…$ÃZiĻˆë –ĶMIGL&šéd2Į¤Ķ Ŗk„”'Ϛhz ZM4ÂéRl šiŖ\&Ōa0šxZL$ĶĩͤÅ4ÂkĻŌjšaté0ƒM5Âa„P˜MuĶM4ytÕ4ĶHëϚa0šEĀđŅ ĻNÖɏĻMSWHąôĶM !!ĶM4ĶRc„ˆƒęšjšč!ÂiĻMqĶL&˜\%ĻM”­ čãéϚh ô)a5MRåÃTŽ Ķ IėΘM4š…Õ4ŌkbˆfϚh&x!ĶL&¯øM4Ą0ƒ%šôÂi4ĶD5‡ĶM&š’¤Žš¤ĶAôĢM0˜ŠÂi0˜M5ĻiϘZh&ši­iĻŠ­Ô&a2­K 4Õ4ô–“M4ĶZL&ši…ŖTŠĻ˜Mi0šiϚŌiĻ šÂM0šiĻuKIϚh4Ū‚ĻŠĒkI„Ķ σXIĒi„˜KIϚiĻ+IĻMƒ A4ĶMUa&M4Â*i„ÂkIϚϴš…M5 šiĻ„á‡ÂL&šaôŠĸNĶIé4Ņa4@đL ›M&z „Ōm ~h|Ĩa< é„•JĐL&ēMÚēM4“I°”SM=Aŋ°•Ē!— ϏH ÚV•5L$Sé&Ö:aBô–”†XôĢk¤­iŌi„ĐG}Ŧ,&éϚa𗤝Âiĸ‘N:Jēl$ĶL+Ū–›JŌi„ĶcŌ¤é2ŖĻšh2Ŧ§ŌĶh&!4ĶYNAŦ|'A8IĻXĮN“ $ĶL ÂdĶĨÕ4Ņ AqĶi5M4֙p.GÅĢ 4ÂiϘ&–&L*aa>wĶĶM4в‡&JM4ĶL&™N":Ēa4Õ\†8úi„ĶMA¨á0šjP°G-4Õ4Âhb&M4ĶM4āã–ãĒϚi¯Žša0ši„‚Éž ϘM8ąĶM4Ķ ēiϚi>Š…M4ŸMS Š>˜M4ÂMxM4ĶI„TĶM&ŸM0˜I„Ôî€xĻŠ¤ĶOĻTšh>M*jĒi0¨4M4šaWĻ•4ĶAôÂM4Ķ^*iĻ™ŪᲴÂa4Â}&M0š}&šĻš}’iϚiô˜UL&š|$ĶL&Š„úTÂiĻ>‚iϚh4É(”šiϚi𓠡Bi§ŌiϚi„úTÂiĻO šiϚ§ŌjšiϟI„ĶMSO„ЍL ĶNkŌiϚ„C3˜Oč&˜MSAĐJŠĻˆfĐM¯Ōa4ĶD M¤Ú 4Ķ „m+Oé4ÕĘļ“jØ_ĨL&Ō°”WĐMSAIĩ xI„ĶJԴ̤ĶL$ÚĮ!›tŠĒVŌk š„ÖÖC1ô×IϚQ¤é5ŌiĻŊ6“\% ĻC.)<&ēM4)'ĻÂPˆRč&Ą<Ÿ ĐM„Ÿé4Ōm&Ō`ÂA…ôĄi鰔T/„šL'I°i¯¤)ĻԈPšúDN6iĻž‚TÔ0‚iĻžĄ4ĶĶL, ãá4Ķ Ļ˜OĮTÂiĻL/ĻǘTĶ\†ĶM5M4×BiϚi…ČwÂiĻL*Ž:i…M4ÂkéĒi„ĶMrĮÔ&šĻšk¤XúvšjšakKL&šiĻņ aT(M0šai-4ĶL&šk ´ĶM4ĶMhtÂĻŠĒa}SL&Š„Đ ™Cá4Õ0šz”úi„ĶL&@‚zĒiϚh*ĶM4ĶM0ŌĶ ¨TĶ Ē{iϘM4 ˇPši„ĐŠÛM4Õ`ģM4ĶA3"č"ŸpšĒ×1ũĩL&•1Iö˜MRiŌÛM4šiŠŨ4)Ļ™„jŽûL&š°…5L&eD¨ŨŪ ϘŠâšĻĒļ4Ķ ­Ļša4Ėš´ĶTĶĶM4Ķ[ &škiϚiš%ĶM0Ą1[M4ĶMmSTĶ „„ĶMm4ĶM5´ĶL&uM5Mm0šiĻļPŠĻēiϚamSL&šÚiϘMm5M4× „ÂϘ[TĶU[M4Âh5ĶTĶ ļš _iĻļ ƒaSMtĐMϚam4›L&šÚiiĒŽŠ6šÚal&‚[ ĨhHč.šÄâ@M-ĒĸŽšimR…M4ļ“ĶM0‚ôé5M-ĩĶ …]´ÚM4Đ^ ŠĻ–Úm&ša-´ØIϚ^Ą‚L(Mļ˜ĒiĨļM5KÔ&ša-´ĶL&‚ÛM4ĶK´Ô*in Ϛ[jši„ļĶM0š^šĻ¨-´ĶT×l(L&˜AvšiĻ–éϚimĻŠ„ŌíS Šm„ÂiĻ‚Ũ4ĶL%ÚĒiĨļši„ŌŨ4Âi ģM5L%ļ&šimĻŠĒ^ši„ŌÛM0šimϚĄ[aBÂõŸUąTĶ[M4×M4ÖĶ šÚĻ „ĶU´ĶMm5MuM5´Âa0ļM5ĶMVÕS[M4ÖĶ „× ĻĄmSMm5MtĶMm0škiĻ …TÖĶMVĶM5ĶM5°Ą4ÂÚj]4ÔŠĨ´Ņ Žh†\Ø­Ē6‚mm0‚mÚé¤é6ļJÂVÕ&ÕČē]5´­VĶ kbļĢiX\&”y]ú!šúļÂzt—§„ôļĶĨ¤ļÕ¤ÚK´ôôá6mļĶh+ 4ļՅl$+´Ä&)nšh(€ØH ū  (,,leptonica-1.86.0/prog/checkerboard_reg.c000066400000000000000000000064501506303110300201450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * checkerboard_reg.c * * This tests the function that locates corners where four checkerboard * squares are joined. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void LocateCheckerboardCorners(L_REGPARAMS *rp, const char *fname, l_int32 nsels); int main(int argc, char **argv) { L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; LocateCheckerboardCorners(rp, "checkerboard1.tif", 2); LocateCheckerboardCorners(rp, "checkerboard2.tif", 4); return regTestCleanup(rp); } void LocateCheckerboardCorners(L_REGPARAMS *rp, const char *fname, l_int32 nsels) { l_int32 w, h, n, i; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1; PTA *pta1; pix1 = pixRead(fname); pixa1 = pixaCreate(0); pixFindCheckerboardCorners(pix1, 15, 3, nsels, &pix2, &pta1, pixa1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0, 3 */ pix3 = pixaDisplayTiledInColumns(pixa1, 1, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 1, 4 */ pixDisplayWithTitle(pix3, 100 * (nsels - 2), 100, NULL, rp->display); pixGetDimensions(pix1, &w, &h, NULL); pix4 = pixGenerateFromPta(pta1, w, h); pixDilateBrick(pix4, pix4, 5, 5); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 2, 5 */ pixDestroy(&pix1); if (rp->display) { n = pixaGetCount(pixa1); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); pixDisplay(pix1, 350 + 200 * i, 300 * (nsels - 2)); pixDestroy(&pix1); } } pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixa1); ptaDestroy(&pta1); } leptonica-1.86.0/prog/church.png000066400000000000000000001776421506303110300165260ustar00rootroot00000000000000‰PNG  IHDR:˙îr¸gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœėŊī~ÜH–x΍™$ĨRw{ē=×oágô{ĮûsĪxēģJ%‰dfˆˆ{÷Ã@d’T‰jĒT”ō”~¨d& ãāūŋÁ˙û˙ųox"ōāûgĪ5?ģĪŋÎŋågŧœézÆ/Ov5ŊĨ÷Œ3ž=œĨëgŧ<›tũ6âZgœņ[ÆYēžqƋÁ™ŽgœņbđdeøŠJī9î÷ëā|Ÿ|Ũû|ūĪ8ãÅāL×3Îx18ĶõŒ3^ Ît=㌃3]Ī8ãÅāL×3Îx1ø>éǟŧṹĻūLîūMP`Ú!Lģé—ŋŪO?ūyûwmŋZŸá§âųJ °Oū‡ßԍĻB4€ßĄ€ b ‰™4āK^ī“îįųßôĪėIŅiûš‹ŋ ôøÅ/n{2–ŗhH*€Āˆ ÉÄUJƒ8ŋÔõ>õ~žˇ×öÜĢé%bõĨP„˜Ē2ËJ=×;~C8ĶõĨÁdyÜÕ(:ŋ¯„XÔ • ÁÎ\ũļpĻë ;éĘ8욿mu…™ÕžŌ8Īø8ĶõĨÁ%&'5Øé æ>CņĪmÚAC÷Œogēž,¸\UF3@Šn¤Šģ™@ŖP„î;>ã[Ā™Ž/Ēč‚Ö¸3YŗĮéŒoŌõŠM^žk˙oĪßĻMƝ$ŒSzDPÔRLUSŒ…–ķP‰”’ˆOlīšúéžžįKŸ÷ķú{ŸĨë˝ HĀÄ@XÔŦ’ˆ BZŗtũĻpĻë˃ÛĨ 1€PÂĨddŅAЊƒ c Ĩ~íņ~Søē­ŋ8]ŋ7Ĩ÷‹ÂˆÉŗ„`žÄ‘¨„5ÔC-c@–Ļ JáĢŽ÷ŒgÃyÁČ w#)LáVZ3čXÆ[{ŅAXChÍÚb™Ųā=ãđJ×s_âĪ… 0QJ0 T4[>”ūV0Ļ& ™öŨe…Ŗ8K׉ĨîÆc¯æ„ūBŒĒŊUÍ ˜AõŦ?+žŽqwv˙>ļëŸũÚc>ŋ‰˜ĐDLÄ&Š`J„‘jb0Qc@#F@hȒuēõOŊ¸įi×ģ~qÆG$+É{øg#åIû›ųk;؊|-Áū´8ÛSÃĨ"bv¤é“$Eõáû3ŋ/'[‘ø =Ŧ˜Ė%7 °B2’hęļo˜ĢT %KŽÆ)U¨JƒŌÄ ¤"&ķVåŗ‚܇§Ũ¸/|œį:īcFܯ3ÎįġŊũ<|ęņÍę˛*ԟYöãŸæÍcŽ0Â(ŦŒ@˜ŌHˆ0Uą`(2å**0ÁŠÄpAM—ĀÆ'ęŒ_gÛuÂsŲ$ūô]?ƒ?îT{âyU@°‚ˆgǧ ‹Qè–J ĐD į’œo gē>3rú ’Ë‹į9]nģ>ë?Ÿ’A ,°J“ÍD%˜-’PŊFg%Ŋ¸gåRĻ*Ÿ3~Ģ8ĶuÂ×ōø=éŧ„ Ũdå”ŋO`UĻ *Ė@6PPÁbĢ0íɑĀ™ĢŋuœŖrĪ ’ÎĀû/ž ʉW¨znhfQJUÍĻFTŠÂ”ē­;ėĘYxÆogé:ášŌ9ŠžŧķŒ•Li$XH TŠ‹ĄšÎp °cĸžRcY{ևÃ8Ķõ™áÆę  ö9 s‘ a"”€ ĒZUZVÕŪ_ĸâ™Ģŋm|‡}†ŋėyt,Ũ'đį— q,0kÚ.…v(ÕĒBØÆVŦĸdÖŌvQĒæŦ18ļ€ŊúŅ“žņÛÁËāę Ė@1#Ml„‰LfAŗûq÷Ž>„rhĨuÎcų…Úng|Mœ•á—”`ˆD0ŖŠ*‚DHÆĢ6čtĄ´z!P0• æYP O/pI+īvÆWƙŽ/ j¤LM`T‹)VĮŨ‡M;üū*Éö‡”›:X]ĩP*ƒˇøØqŠëŦŠ3~›8Ķõ…4PhŦVi mĐŧö?Ģ•í…^vBŠÆCoZLļ}ĘŅõX}ÆWřŽ/ FfĒĻJÕ<ŽũuĐQû‹J(¨16ÛtÕ' ãtf{_Ņ5,ąŲŗtũmãL׆)ˆ‹j0 D8–~ÜøĄE¨c´Ą¨EBi$vÖõjrú@ØæČųMãL×gÆŌã—Ktd*!ŧ\OėÆrwZMĢŠFa‚Õz¨ãMˇa B“Ú ĩ(AcîŠö@PøZuÁü`FĐôŽąä—ųękīp}u§{Ŧ˙°S‰}~"|>έ՞æ =ƒÁ—E† @Xd Ŗøō5>ĪĢ)`äjN+ÍlЇĢ˛¤XĐĐH@­0¤$‰šŒ;NēÛØv{­×.5”’“Ô×!wē˕Ua$¤‘ĐBBŠŦ Š !š™ëÄô5˛¨˜×!õ‘Ļ”¨™Z1…AÍ jŨ*p¯ū8*}=ĻĢņáTĮ§öõ}jāįĘ/øŌũ‡ÚĪđ—Õĩx`ąŠDUœ€TŖĀhD ŅĖT:UĩR´økRALÉÁąöZZs‹j¯ãÃuĐ~÷a?0ß2G–ČB1U´5üŠh[ Õ­]i,$JÃÔĒ$J„¤Ce0ĄÂĖŦÂĖLaĻ ^#ë)– #…" ­ž MEđ‰ąķ*[ĶĀgŅúwáL×į„ט:cŊF\Ą ûbSĸđšr5RƒÚ\‡A iɄ‰ŠY…­ jw(ŊÖŦĩXXs´œ’EĢĒiąZŦŌL` igÚ{åŧ€`‰ĸ%06 QB€D†+e0¨/åAÉĨęôˆ $! LķkqeÛĀYœēy|ö]='Ît}fLĢ•/}HEÍæ‰k“QĢ5Šš@!‘ĄFÔb=ŦjX˛æœëhĩ˜fŒˇA”¤X…š()DĶBk A…(( 9[RUĐĖ`€dŖBĒb0ŠUĒ *•¨Ed|ĨlB1$ÆÖų ĻXI5)0ĩ8E‹„IÇ‰Ō—k—ŖŽŽ/˜PęyÕŲĪÚâķÃ-U÷ģęÔĨpfé´ËÜŨÁ[žRh‚Ô`5Ģ õ°ƒe”ŅJ¯u´7¨KwÖŲ*uŽĶ`5ĖĘaÄĐīŦÃ.‡<ôВ1†&‚Ņ'÷<4ĸV-:ĩ\"ƒˆA`}ߓ”čīL4 ũ‰ĢŪƌ€ļm`îąJUw\_-6IĨĄ´RLk@Ē&ZŒĸÂvĶ645ÖJĢ•ëĐŽŌtéetņ؈ŋĩ¸čKŠŋ} ĩÉ(€¨ĒĒZ-B$2QĢ–>öũaWĮęģČĄ%ˇ-Õ°ĖĸĻÕ  )đO0a@đ2xÕĸŠj5ĩ€äl7ŌÆU_‹I5@UWŅŅģ<á*V957B¯ĘLcÎ=C !Æ P1BÕ`Íūo…Íeėļ›f‹ØæĘŦ2*aA()HD°j†ęM•žo/Ĩ/ņםŸgéúĖhÛNUÍLk5+bH„ˆÔPŗ–ÁōĄ û2ėuXo›x…âžĖ˛ œęÚmÎ@ĢĒQl`š™ŲÜCx˛M—ÅĶ ĒröWÜMģõ§f0Ōũˇ.iFX Â2k‘¤ĻV닕}(ļÛĐ\¤´ŅĐÕą‚c­šƒ ņÜęīÁ™ŽĪŒZ„@‹¤QĨVh+6îķ¸Ģũ­ ģ:ĊX ä€âŊ—ŧ§ĄÁ`dpš P&$uP­´É $ˆŝ,ŗÛI:ĩ(]hI› /Ģ÷e ŸĒsą:Š‚gUšA+’LÛ`jcoųÖbgiô ŠKí̌hH`* +„`}âjîgÜáL×įá°kbŠ)Ļ(bĩč˜ûÛ:î7īXšoYÆ`cŲÄ"L3Q‰ žš‰  ‘žÚ2ĻæŋMĒÅŗŽ FRDHˆˆĐךÔbfäT ë-‰‡ŠB™kÖ!“ûڔĸJ#Ė‚M1RĨTĄ˜yâ•ú""~ŌjŅĒjŖRķžŽ cWÃF›ŊĻmj_Å$U ĐĒĩÔÔŧlcįëâL×į…uAr°Âą–ņP†ÛŧŋļqW÷ÄÆ`% 4M@ ‚F0€Áæ&‡Žß’S튴Zmō š44˜HDa)"B˜™@Œ‚…ģ‰a“ƒâ¨–õŽCâJ7U=ßŽcM 0P@Šōāņ^$ˆŅÔĒ•J-ã¸gē`¤ë™Ž(M”P„fgMøķqĻësB —— ģqŋßnōáÖÆ=ëtlm ,1 QÄkVĢfU0(-RŒ¤‰43ĸúē訓%ŦęVD‰HŠ€Ļf4ĩbjƒ8kŧžKtįV4Ę1u¸Ũė%:bœÍāYŋ6›-Sįdš‘ˆ)x´™Š˛”ĸ#Ųo›í8–RÆ2ė™v˛šÜļ–ļģĸõŧ†åįâL×į…æūZ×ũíMûĄŽ‡Ps4ŅB¨KB÷›)ˆØĻ&sķ`˜Tƒ¯‹ejŪ‰TÕTUi  BĄ)Ė›ŖsfžY5 Ũ-Tu7Îęå§nZæ;wõq­F™Öö˜Ŋ_!ÚÍF+L üŸ¯§%!ˆå!g–ƒåCĐ>Ö}nŽBŧĒ<Ķõ3×ŅOŲū:xꨞ4~;ņģœū1Îb\6gģzĻū” kŠfNípûĶŋ"īt$÷bc h@ÍB`ō÷ ũžWāZ¨{‚ŦŒĻĻfÕũĄf4˜ h‚( ÍË_”Šã,Š jĒ žéĩ@Kĩ×ÍŦ×˙JrIry“wÁEÅ9ŊĻĪ.ú!›Z ‹Â&ĩ‰ÃXĐ M:d-×5\woū‰R—bCôLãã__WsmųTįëāŠœøĄGˎ‡(wôâö1Æ>W}Ģs=§KĻųø°A%bˆ>Y‰ę9DfU+%t"IŠÔĄ ×ãpĢãõøĶŸƒBkÅ fϚb”9Š×MB„ŠßRė.¯Ø;F˜ĒÖI Ļs[%…bŒĒǙЅšÂHh03Āŗ‘¨æŧ¤FˆÄ(""RJP8)ˇf°Ô€ÕBKXžB"ĐÃ@æÂ^ÍX-›÷zŖŠH6T×ŗSŒd h–Ģ ĨĀĘ.ėâ64Æme—ƒ†ŦŒiSMĄ5Rĸ֚KŅ7Šč-å\˜s0æĘ'Ÿ•TĸbŒ/‚ąŸ×&>ânĩĪ_ŪâËËØåDŸ>Ē'˙>î¸zÚXėŽ„™qrĪRLă)ëXĮŊˇš˙P†käëFĮ€â Á­<čųŧĶ0Œ:éŽ3‘–ĪQ@&O3$‚ķÍoU­ĩzb†­āqCsēšŦBŌía/A'šdŒK1 ¸lČdąÎiĮ$EĒjd¨6U¤WsÖ{ČŊ\•TĀŒPA)‡ŋ"lę°Aē@zâe+›65^čcfZĢ !&Ih&2åXë”u4[&aZđö[č~‡ļĢN wų3E Kļú´+X'…SĒ'´ fš×ŧËûkŨ_—ūļŽ{čĄãJĩ&š¨ž@őŠíOŲž%Ëj­qފHÎŲy0švŠîĩĨfInĻŪíÁˌâŌ8ÆčD­ĩ–R|HĒzGBûXSšõ ]Ā´HÕÖņ“āÎ/æĄžyøĻP¯Mnk’t•؈mĖFŠÖ2ÃŪâvi X!Z•QuáĒ›#¨wKû¸ßi:oT?ŋ|_tV’îՙēxâÁ.ģfŽÚYD ōPķ­ęíxķŖ•”ō!b­„B](J›ō 9Ų‡ZV ŪåũŲĐļma!­ŋšĐõ„ą€ž˙đŽdJŠëēÍfŗŲlüģ<Æú‚ģuË#c­“bSáû\Ũ3?­püĐqhL”$2g kÍĮą‡Ceķ*ČÆ Y ‰Č"lqĖ+3ũ¯˙õŋø×—íâX~TĀ>„ĩfžöÉ7O¸˜Đķ– fϰb)Ŗ„–ZÆa€Ž€Ļ`!hļ(–â!Wßī(ËéMpŌ’ øļÃO\ßušA7UŸãāžÔ%)—Y6oLŠ7‹ 1xåIAÕK y8ŧī?üÔßŧEŪ5ĄŠÎ= Ā*Mm„IŠí|\ÃÔÕĄŽ/ÖĖ3–ŽŽtí^“g™ë‹?ÉësÜÔ\Hi˙4oČ&rTTuųԃŠO˙ÚŋZËVu÷NĘii!™Ē[UKŖŪHē1Fcđ¯1†M4Ĩŋ|_t…I)ĒUÕ Qh‘…5ī>ŧģūđļŋũІ1DƒŠ’H)™yˇ$+Ĩ( ÅēÔÜŠģĶŅOŨ?X3ä‰#=1J—YîÆŪ}"ųG>ī9į]ˆˆ¯}žpfĄÄ€]Îâîč…ķ÷œŌŋ0ΏŧŋxļN¸Ŋ É õõEųë _TÚĻžÉ ¨Vĩ=×ėĐ4 l˛ˆiP„bV~ųæžX|_tUB•ĨēŸAŦXîKŪŊ˙ņßōîC`iBÔZ2i!H)ÅŧÅŲbņEkJ)¤MŦ˜œŸã,ûtOėä•YŅ•ĮŠk}xí=á*ŽåöÉIũ“?ÖG¤ëcé'ĸ~}œûRôžC{ųbÖ €æ‰¨Ē:”ūC0 !AØæĢJößčŗÚ Ŋ|_tXÁĘHĩ ŦČÃpû~¸ũyķļąąk$ŠZ-rRĖf‡8@Z@ZFW#%p•løđÔôOž6ЇĨ´ŠęœQxwĸ˛ŠFz IDATŋ?5a1œd8bå:žĮ‡ųüŲŌuyXpÕãd^čĘ9pīŌ|Áh˜˜„@!´ĩŒ|k´I§O ”ҊžéŠœ¯=€_ j ˆĐ1īwī˙vķķ_YúĻA @Õj 1Db‰VU->ÍŧėۗšX5YēŽ$ÜŗÍhéaSĪŅ\h0aŒbsÔejM ÄYu…“ô5¨ŗ/ėzŠ-#qĪYŊ° @x¤Ĩũ‰Ëgļ)]昙•2ųTֆëz/[O!úÎk)稊vę[rO•ÉĒÖˇ~ēĘ­OˇēĮ̓f­„/šđŌfÕáe÷fæīŸ8ĀÔlĨĖH ĒQlnÛæ"Āvã.ī>H؄6Š ‡ņ) ÂÅSųōØū>‹ž;éZËØ4͸ŋ=ô×o#KdÕ2 ÜîąũėüY •ĩNgFŨŲl÷'ú“đ zy˙˜ūüöPĀi9‚ģšN,^>âÚ]Ō›OŽôąã/ɉËcÂ+'-T'Ũ~žéfąŠ `ÄĊrl˜L{ŒˇŠ‰m•d8ęgßáß ž/ēŠJVËųķ˙ú?ūŸ—QfŅƒÖ P0ˇYōųęÕĐ奈/˙›Ô˛%ÛŪģ~Œ¸kDz:‡žq2Ũq͈ÅīĮOē\ūšæū\=öôĪ1ø‹O'aÎŲ§ģ×ĩqŽĶŽĘíŔũČ mvce ã¸¤1sv_à đUomZ$Į× čKMŪ@+.QęØŪ—‹ąĻcŧßÎęĀ‹§Ģ+H21č'A*V?ŧ}÷ã˙ų×ũõģËmŌ\ÃX›h¨ M…”Éë̆ŠģÁņb°X*Wg IN/WųŽ$ķB™žŒŽ[ú?ēę¯×›Z‰[,0˙b-eÉ=:ņũŦu×;}ÛPZk"Ԛęg§Ŗé\×:W\5]K§uôÅĪ˜ËøāīÕu]­UĢNĢ҆~†Ąk7‹ĩUMÂååĨŸhĮģŗGŦjVUĨ %Ž•$3ŒŖE! ,kôĒ•ũO˙ķęōŧúSæë6#‚Y5ŗāŊŪŨîŝal¯qö,x*/>ž˙‹—Ž Ä|e^ĀD’ ”-ĨX-mLv7ywJ˜¤ 1PÔ+4@Ģ€]"¨f50zGÃ]šJâ›pōØž×mėžļlfÎŦ“Ũv"'9gGōyŲíÄŗb“ųí.‚”¸WŗēŪrĩ>å2žØĨņeœĀĮVJYž)˜m×—ōŅ‚ZQ ›sĄĖõŗĒŠ*Ū9ÎíÅLû÷ĨŲÆfĐŽüöîį{ú”䗭8Næ‹įÛģ!B(Ĩ”šÛ.ööíÛũ~Ÿs&éæÍ/[– átđšQÃSy"—NŪ\žŧXG5×$\\;˨\­9ö)ã\TÖ:ᘹ÷­ĶŌË\^>ōúzŗKû‹“Ķ āDÔ/zûŦhF–:öíÖ!Ā|3‘yÁõ#ŧ0ŽâŽnBždŠÎZ¨Åĩ4¤ ûŨíO?ūÕŦ2˜fPSu¯yyîŧJãœ|‡{âqxXÃÉėŊ„XųZ§ŠŸy›ĢÉN ĶæŗcY~jSˎũ^ĢYū´'ËZŖ^Ÿú#û?vą6+äKÆRAkY?ƒÖŲÂ'÷áūy—k4ŗåū,‡23DXōXÆÁr/]@ čÄՅąËœyIëÅĶõ1nÔZÕ46 ˜fɇwo¯ß˙üzĶ$TŸ(Փڠ Nģ4ā˜`'ī?˙e<×9’ē40Íæ˙æUŪĻ=Cë#§[ÛˇXiÔ'îŋxĨi(öÛ\D\ŠYTŒĨĮãą'§ŗĮ킔Ō2TW.&æĶ@Ķz°gÛ322yūŠ[IĀâxđũ_’˙éeĶUĻeīæĨšß”V§gt !$–ūööí_˙ŊäÃæÕ6č`fj*đBgėä‡\KWÍÉ8ąå|zŨĮcŌu­[b5q9ĢãÜqˇ>¸}mdâ‘L‰ą˜ŽËņũPĻÚÄjxė,'šÄ‹2ĖxįÃLļ­{}Ģ×#Y¤čr„õÀi5Ģ11-yĮáF$"ÄZ• ĮÁ}iv+đŌé āhá™ÕB(Zk.!2$^xûĶ˙ŪÅ"Y U…!Š@­ÔZņĀ´ģëŧā1=íņ Ŋz"ÁîŸk9#ēĀŅZX)œke{&ĖŖĸĮ¤ëBĄĩ4{ĒšžĐ­o9ĩŪX7gōûc\ŽËeĩļåÔāxu›īVLŠ5ĻØ(†qūļk¯BĐ1Ļ-(î"0=Ŗŗ2ü̃JŊ‹z+÷‰ŦUՔb2ėv‡›ë×ŋŋtV&ŖH@ÎfPŗEPȒ{Dr†!æŗ*Ĩô´1žäŪ“K'˛čdÖÎ;˜ĒMũ܎ĩôšįƒũPޏz,++"ŪÆq†­Û…ˇíZÛôC­@'‘˜Ļiū,ėÍ9w›ÖŸbž×ąAįč8{šũĶÍfsŦ/L÷ĐÛ5-ĒošžGēÛí–Aú‹å˜ë›°<7ž–ČFHŽšw–ąģĖwę—'Ĩ  ŗķéÅā…ĶĶŠķ40įĶMpŊn÷ī~ūŠ?ė/DņE7æšįãŸĘĶ_ĖĖ[1 …a*§^DĸĪE7´ÖÚ ÖZ}Ÿ|KDtGŸÖ–7§īÜąqöš9ĮJ¯…Õeœž†:ŊsŒ!Æ@BÕ§>c qžŖ Á¸<}œ-k‰zīē°ČáåõrO–ā'WîĢÅU{ĸY§˜íį…Ŋ1F’Ã0ø§Ēã8n6˙îԒr~8úęū˛Õōđ€ÔšƒI— u܏7ČW­üŽUA;J_ąŧ$ˇ0žē =`Šˆ 1Ęázũá­ÕĄ‰m @Õ9Îą¤û W§Gĩ˙ōfPĖʉĄõ‘Á8‹ÖĮCÎņ Įu9Ŧ|ū-;,ĕዋ¸Č™Å„ŗ•)XJ†Áŋ^kmSZÎkĮ>U]ĩ€Á=•ĮūáÃá0÷¯ą…íã8ÆäOЏđŲ)ä|[ÆšČđaüøūĖZîÛápđÛâŋ]Ķ4˜ŨËkųŸRō}\Ų^ä˙dĐÎkfšĩfäRķ-,ƒi•͗ÅŌ/žŽķʏGwß vØŨöģÛ@t1¤(Ege˜X*ÕėČ\\čZĩÚÜWm™ë‹nÉŋ.įīΑžERĩmģčŠKķËĮJ)‹Ŧđ)ØuVšöüžŽcĘy?ā0 ŽFú´nšÆéęBiĮq×/ĮY‹ÍRŠ‹ôquÎ:ļšÔZ?_hœRä´qy)%’ž§'úŸ%×ŖjŅ™CMĶÄ]—ņģá? ü+ËČũ[ŽãLĶ`$ôܓˆŦRÍj_ķŠ͞āŨ4qđÂō_<]O°č:f&Jíon¯sģ&Ļe”øŌ4e'B*IT•;jƒ8ųNdŽŽæĘ…cĻPķ%:eØ_ė÷ûå|Ĩ”…™}ŋw1•sv?ĘZ3”ã°Ē™öŊå<Ļ”ŽŽŽü°žīÄhšÆåmŒąmÛZëĪ?ū´Čöĩv-"———vģŨ0 mÛ:˙]į\¤Ų2æŽëüZ‡Ã0 ‹Á\Žŗß=˙bÛļWWWųË_Näļ˙yąŊt3x§%fqę6į|8öûŊ?8üDŋûŨīÚļõ¯øÅ.×ģXZ!"‚bš bÅō8ė™ŽĻ”,~™ũÃØo…ŽÔõĻÖjQ†ž˙đáƒUM› ZĒzĀmųyîˆģĖ™rčŨ;åŦEīyng ėNõĩÜeâĶŨuTgŦ™+ÖŲĀjÅ#C°Z!‚”BŒąÖä–ö\Áã9•ˆQB  (Ü3\EdģŨ^\\ˆČõõõáppq§Ē‡ÃÁVæ(fÉ< ƒ đwīŪ]__/Â-DqŲîÆųvģmÛöōōōöövŅ æ“üáõw#õ}}}Ũ÷Ŋ‹Öa´mÛu]ÎyˇÛØl6777ûũŪiųæÍ?TÛļÃ04Ms?ÅbRøZ3T›Ø*ŅûörūŨ}Ųæģâ—ÔFüŗčęÜøÄ­wÛųôũŸ´ĸX˛ÉÄ pĪD#yčûŨ­YMĄ­uŦ%„ž$dE×ģŠš˜v˜‚ÔĒ0ĨéÔë TUW¨įx€ f1…Zk)yGį¤Ī{Ÿ”NÂq‡ap)ņģßŊ ŗ†,wžázšŲ.,­ĩ–:ÖZ­–Íļ†˜RúáÕUJi“â8Ž1Æq}įÕļImõrۚyņŠŅĄ€ rŲ5o^_ øî­ Mäļ‰cÉu8(<mžg @øÃĢË×o^ XÆC>ėÖDQĐ´´MjSS´Šš4]ûúĸ{}ĩy}Ņ1ˆ€Eks5õŖũé~cŦĩž{WnQĄYšČą/ĩV$iâ&0ä$$_]nūáŋ˙ķŸ˙íúúúŨûŸ÷‡;Ō//ŽŪŧy3?2\3’Š#ŒYBĩZ ”)R­ŽcŸ´¨” ĒEĨˆUķ7umJÍĒņŠmu÷;?uū?uûØņ! >ŊĪ0ęÔ<ōxK!`ž$āzkVa ØÉ–÷Žđ™Ûų’ŒPƙĀ“\]t˙ú˙ūĩ?Ü´Qj­]ģÉZ´ä”Ļ5YĩÎ~”j@)uJ‘™rĀ÷77ŨvSJÉĩBR šķ”1äų„šĩīw)bčw.NäqPÕĢĢĢ uģŲl6›aŪŊacÚnÚmÛ5mlۖĻģŨŽé?ūãŸŦU5-NJĒUŗĮ'ģŽ5áB~‘˙āúĄˇ;r-ŨMĮZëúũ˙uķ‡拂1 ÁTK­0CŲ›Ųú‡ūøæB͂čE×4øĄĒÖRĻ}Č B‘ĢËdyWU_mÂå?ū~yߡJ­RĶ\lÛ¨ų?˙éūžg3P¤kÛĻmCĐRöøãī.ß\6ûũ~r ũã~úé§žī[)WŋÕMĘäö2ĨöUáũûŸwģžëÚRëåĢĢ›Ÿ~ŧ¸¸zũę3VĩfJĀāW@‘ëČūvŌF%kėaa­Y%PŖhŽYųä•Ĩ1rJūTĒ<2˙Ÿk+á1˜úDéz—č÷ąšÉ_mëí`ĸGC¨ĸŒÃŽô{ÔQ‚"ˆ’ÚV„fČ9Û]õÕÅ% VĩÔ1j ąiš”ĸ$ĒjE !†FLmŦƒ ˜¨dËP‹e+”ˆáÕÕf{ŅmļmÛļã8ž˙žīûļK]×m/ēívŗŊčŽ^]H)mšMÛļQ("eōĐk‡ūöÕæÂABˆ‚Zë8†qŒą MōœfļI\lŨeÕ÷}ŒņęęĘÅōvÛũéoJ]öÆŨŖ#"ŽŦÚ*FåâŊišĩnš(Ī‹MË9ėäĒõÍ͍ ¯Ÿû$˙ķ?ūƒĖuöî1J)Ĩ”r­}ߗRÜÁ; ƒûēēŽģēėü…ŋ/"Ũv“ēm›sŨívûũ~ŋÉųūũû›››ˇoß]]~HŠŨlļ———1F&F1…+ĨÂrD ¨B HŗVu˙žNļ‚ķôæ´ąY›4h°~Å9˙ ØŽ _-9ĒFĶ ģÛũÍĩå1†ÅV›”ÔŠV5+_#œk%, ƒ+(LfķX†RŦ´ąĨTTôãŒ Õ čļ]“ˆš.7­ŗeĶm.7ÛMĶÖZ¯ŽŽ6›M×u‹×g.Á“ĻiAr„…Æ<æœsĖĨŽVkŒqĶĻĨíŊ[˜î^Z;ĸœKĘ¤Ė @Tss•ÅĶë÷ĘVžm;Žŗ]œØ ë܉å#÷Ãzē…ķÜ#+‹mņ0ųw]i—ŨH)ĩmcôãø;§Ųī÷îv )öš/6Ûö‡Íđjhbssscj­Düđîũ‡›ëīŽ›ÔũáhbLmrŋéR"SÛĀlÁ B9ė‡˜ÁÔE)É8]ŊPs @ˆ7Ö —S@äkēŸ× ņ úķS•í§c%WM@ĨŠ@ƒ°ŋŨv7Đ$ ĻjÅŦ‚ƒ¤azˆˆ¤FPĩīoonrŠ5ģlŠŠor#"Tu÷ SŠ"HŠš¸Ø\nģ€ŌĻ0ú~ÚÔ´›îÕå•Ä@Ãæb›Bō¨Ĩ†iČĩL „NƒÍfĶÄpuuU‡ŧßīģÉËmˇŲl‚Léģūā‘Õ‹‹ w–ÃāFē.žúžoš¸iÚRGKf ŊØ1–ËÅĄŊTˇqœzJĻįH¸7;ÆčÖr­ĩëēåģۜÍ3ž´üJŗĩyĄ įšËÛļmũ[nG”RŽo÷íf#›Ļų§ú'’CŸonv?ūøöōō˛m[2Ôj‡~÷/˙ō/סŽ~wųģßŋysuŲ5ŠÛtVt€ĀũáļŨRû!T˜ŒV¨œŗ‰—,ÖĘĨ'Ė"o…ĻöĨįō/áeKW#ÔsS¸´'œÜ}M”÷ũ~SôĨĒ*ŦVŒ…2-y3ĢTTšĘЏ}Ž1ļ]2ę8no¯Û”&õ/ĄŅj×4]×í›čŗĘæ&÷)P€Žiļ]ģMíXËåf+)æ~¨°ąīKJ1‘†$!„ˆĒÅS !F2ÄØuštyyš+×ëDwTĢjĶ4Yë"å\Đš[Û=ŽNZˇ]cė8Į‡ũh.ĮHnˇ[[eđ­3“4V^nOîõ+õ‘?;<Žã¯ë ’ˇˇˇ]×-q`WnÍėõåeJɝmūā!,ÅĢ.“SJÛíÖUčŽiÛĻŅ2†C×n/..ģÔmšÍÕöâ/íß~úņííí>cÛļÛŽ3šøˇ{{7Û^]žyũCļĐįČtĒ‘h„‚HQE •••ÁîžøT_Ōdōe ĻÍ0šgž&žMēž6Ž÷í˙DČũ(ĒāĐ÷%įĨ‰‚9–P5GB$¨YĮ)+–R:ô‡<ômÛvíĢÍEÛ&šØ4c?¤(mģišč…eÛíåÕÕE)*‘¨ZTAZJmƒÖŧm;MšJq3ŦpdÕÕĖŦ ҃ēE•j)DÕ“éjŲívZrjBX„Ú&’Ėyė‡aŗš 陷î|ōé~qq‘RrĄįœ !t]W†ŅįŊKHĪ^đ ž%%sāÔ=UˡČUõ\D‡E˜/)}ß÷}of.iŨĻ]˛ÚļÕšƒqÎŲcŅëTaĪUZž#%įZąDŋrÎûũ.ĨĻiÛļũĄëēūįÎcšžžŪívīŪŊ{û~×ļĐZßŊ}ģŋū0zJSØmã&„t –ChB Հj(FΊæÄT¨Ãš°Ž¤A‰`Ô3į_SÆžlé ŋËsÄUPs9Ĩ”í&Ĩ”ę˜…Iĸ™æ(bĨĢZbŒmjvû[SŨ´ÍvÛ^lšÍĻ‹—f¯ķž7ÔÛÍļMąĨXŠmˇiLI1a•ū:rh›Ļī{ĪT‘ D}@ņ(eÎYÍÆq„PK&iĩ‡<ô!˛aáļ\\ĸ—ûũAdUnļöô,Ņc'ä~ŋWGģŽ[lN—„KâîROã"ÚĪĩŽģ’tGŽĶ{G7/Iúaeną8ĸ‹Ôiæ‰M˙?uoÖ$Ir¤‰éa‡ģGddÖŲhsœŲ…ųDƊPČō…"üå|á>,G–ģؙÁ4€žęĘƌÃŨÍLUų îžŅ˜L&%Ų]Y‘‘îĻĻǟ~úéVõˆÁĶ]O\¯;x–püđ(ĩ!"ĻũÉĻ[k ™C—S|ūÃO€ˆĮŸũâįĒōūë¯ę<ÖyŦ2í$F8•Ї†qxÎaŸ¸W„ÖĖV9—Ũ qáĒ^5TßëOŪ\ŲlšSESak&Eįĩ9ŅĐ%A‹ !ąâ0 7C_Ļs?ôģŨÎé;ÍTāÕËģišy7ô}ŋsē"‚yį‡.S°Ôš˜MÃi‹#|ī^#=1Æ&‚@n'hĄī{Ë9w ëFDL]L ‘›é–nȓĮÉ1Æžīūšŋŋ?ŸĪZ›hŨív›Uģņ8VŧÅĸîžDdˇÛÁڎs_ķéũ;~”¸ąm°ŗģĮaŪŊ{įgŠŗ”6æā8Īļ°t*ÕÖ įW¸dĒ1Æãķįwbpz<ŠiäRÄ%ŨW‘&ĨUŠ-„ÛžëvC˙Ķ˙ūoĻyLfīûÜ=žÎķé‘0ŧ}Ŧˇ—YĢŪÜMģ›—ŠŋE`"™‘âǰĒā:*ģæŽß'Ųø÷6WûÍŋųõßąˆžûcëoî÷ŗuĘŽ$)bĐĘ<įAÛ8ēÛ|:Ūŋ“ËûŋüôYŸ°Í§įwÃŽËožūĸÉÅRčēnČéŲáfņ  ˇ‡ũ~×ī÷{įܓYŒ1ÅB¸;܀Ą‚-Báf >KGE´ĩ:!A )Ĩ"ãu]ᤅāępˇ&‚ą–2Īŗ—súžīûĒÔÚL¤īûũ~‡ˆįĶãé|fŽ+53§Â—RnnnœNč{ũrš0ķn×_ާÃncŧŋŋ÷ŌņØÍZÆqœĻéææ&į|<îîîüõã8v]įėfŪ× ąî9=bGDˇ´yžßŊ{w8üqx{Ž1Æ8MĶ8ގˇˇZ§”N§“?‹œŗW›DdžįËé4ė÷]LEZ$œÆK› 3km—ˈv77ačO§étĖÃE†˜ú7 úWãųüūūC˙öÃĮĮË>R‡“ßŧyx:•˜÷?ūņŸ˙đĪū<įaT¨MB „Ä HÍŦ´fÚ8†‚čĖHšëNãø=ZėŸ’wŨlŨ´ņŧ‹Ú‘‚žÃLs9Ī‹ČéxOVn“´q”ĶŲ¤§÷'SŅĻ Q …É"#"Á'¯_ö)-ãR`´€ÔTíŠAĖûõBd02k„$fÖ¤h iÃf`ÂėčÎÖäĨWâēĩŽa#Ų#ĸšsĢĩĩk††evŖ͝ĘIļî |>‡—Æ` IDATx÷ÅßũÅO˙G‹]ęw!īąj“Y[•nˇ Ė˜™U2h*rš|—HĐŋŨú“1WŧŌj­Å[kīŪ|ų÷Ÿũím˛ĶųAĢcdš.Į›ž{õüļ VÔŨ0ÔilĩŧxõŠRĀrLî7B‘—ē"“kĒm gŒ‹íŲJ$ØĘ‚ęģŲ¯ST=D,ĩ@ŒQÍĻy6€€DĻēQüũ÷‚]Ø˛Yũt@t'ã/Î9§Ô)Â&ÁUüâÖâI 7ĻģI›-6æŽË!Y‡…6ߎÖâ*JčM0ۛlQĪáú?•RœŗąĨĻžw]įw¸Öęä ˇŌË49^ÅĖÎ| ĸÛÛÛ |öŠą×ĸÔ YŧlÎÅdĪD”"ą´ŌZ—2U-ãDĀF€‘b ų°ŋŲíĢÁ_˙ä¯î/īŪ?žƒc0­Uš<–ķņ?ũ?īB¸9<Û^ ģy¸íŌŽīûŌ&BBM šĀH‘Æá÷ũų×]2æēí?sΗËåË_}ö’ë!Y;Ú4Į”‡ˆģ>´”ĀÚmo˜ŗíéîöF¤šČŨËWc1ã@Dq%˜ 0!ĒŠ.5IPĶ&ĩÖŽ{*xlļjëlˆ \ŲLwgE°&c™Å`fsĢDLÁB3mĩidL´ēJ3c|=éREmMU§i‘ČĶÂĒRĘ2ęb)‹t]įöæĻâĻĒLä‚É›ãÂĩaÍMÅKp>ŸĮc×u^ÔõģŊ5…oNøę÷ŖĶßĐĪĮˇæy†aû\x˛íŧđW>>>Æ=úõ÷ô¸iG‡˛nnn==‘žīŊ›įņņņp8ø11Žs)s„HjÍ´ (¨f$ωÍR ánģūėĮŸĖĩ}|<ž˙ááÂĩÕōđøæã‡/Aqs÷ōîŇۗûģįEĐ Si5¤H1ĸ؟Xîú}­k”r+Ä?>~üÁ]}ļHûųĸCŸsâŽKR­īrCˆŧ‹‘#´Vb ‚hÛģĒŖmēMpmĻ1P@@ƒ­öáÚÄĒF„O#sˊ4˛@hˆČD1ĜĒĒTChĻM ˆ į^UË$ĒJ`×x,ŲRU"Ę)xŗ´ēYŅÖėâՔžīŨPWÂ0-S)eš&]ûėrΞU2ŗG¤nÃp%ėvmŸ[@žˇ#t]į>֝§S Îįŗ—…ģw:N_~ų%"žzõjŋß{MÅCbwÔn? WéŽŋĀ™nlPķÖhžåđî$ũömį…[û6ŽŲCô-ĶŽ1ΗYDÜåē/;¯0ģ1;éJĐØļĶPA´ÖĒR_ŋ~­*ãų8ˇÚD(†Ãm˙ōÕŗ×/ī¤ŲXęņtžœÎ÷_|önltĒаûņOūũ˙ęßaØ9šŅž9\áßzũɘĢ]éņ8­ôŨģwĮã̃äĄO)•2ĨžCĐRËÔZ:Ņb'œÄˆ÷TφfˀI404D äˇÂÉOt4#ÄŠVŠKˇÉ—ųNŨWXšDf„U%Sk­N#!Ą XUADE0BŨļ īŧĨ{ĶŦ M—›hĄī:Ž*Ģr7­ÚŽë8WĘūƒđMb°WMœ´¸Ņ’rΰJCø}öwŪhŊ°ÂŸÉŊŸãē›öDwˇÛš7ö*Ž]S7ō 6÷"­70šé:f†ëÄiÍE_T¤Õu)ˇVZ™‰ˆ#"S­U­ISU2Wļ$@ŽÅ…Š ĨĀFbÖZ‘!wa×ĶÍĀÃ@ņ}U9Oe:}<_$ŪŊŧ3ũK‚ŽÖf!$ø§Æ#üAW@Ąų;}]ĢOŪ đ‡øęÍĢ×\jīļņšoRgU“ãĮīžüåÃģ¯ķĢOúáĀÁjUĒ™Šˆ)NcÉ}RƒqšŨ §”s522[dø :25+Í Ä Ąĩ–b" ē™+Ž”wĮWyŽ0ŗšõļ1„6—ąĖ‘8äÄ>ˆYԘPÉ@Dˇ>Õe7Ģ*%ŽM`#c-ŖÖY@ˆŗĮ¨ĩVĐgĪžĪĮ> ÚnwŗÛõˆÜZ1Bqīís}ŧ}ž÷ũ>æ>†œûŨ˯ûũŽOųt:ÅSU›Ļ ÔRˆ†*ĩ š`Xˆ™§Ķ)Ĩä­ Î7ô`ûūū~ˇëcŒĩÎNîO)å)$Īe>~üøöíÛÂ~ŋwjÔ~ŋ†Áū%xG'EOĶä!Ղ6Ø2žˆVОšāXJš"šYˆÄ9 @ q.ã<ÍĩV#D&d&¨ĮËÉO¨ōĢÛũŗ›Ũ?}y.úŸøúĄž~ųâîp{ą<`€‚IøC퀂Œ‚"üÎ_‘€ū…_AՖĨë¯ÜjļKD$¨­QĘ=jé/÷—wŋüôn÷âîÅeǎû˜æķcK­BrםΆS "P Č JÁÆydŽDāITΚL33ˇUķVU‘€‰C įđ…ĀÃr‚šLŽrrĮQg] VĩĸÔ&χṹįãišæ@LćũÍeĨĩ@ôņtŽŌnoŖˆxô8Žc)… Rˇ=š…Ø0!5c4.§VÕ@§IĘÜĨĐÅ[?hĘtaŠÎ21Q@&î† ÄÃíķķåōöÃ=ŨÜ=CĸĶe>uĮÁ Ípčvûa—ĶŖļÖĘtŗņxœŠ´ÛĀh>.Ĩââûũįyôcļ”ų|>u]—sĒĩ†ˆĻđõ—ŸĮ˜_ŋ~-ĩūėŋü])đūÃ˙đ͟ūÔ*´”Üķ3ķ_|á]SoooSęO§Ķeŧø‹˜o%3@U#@ĢÅZcŽ(Ĩ)bá<Îs1&€Ü÷đđđ€&1F†D‚¤w]Ō]úÁëŽpûhĪNŗD¤h2ÃÚŋNjŋã×Ĩũũwų Œß!úMsīBøŨŋŽīû/üĒßõ}Xų$ßZ¸°##´rré o/ „Č„Šĸ ˜-a$‰‰ 4¨į&Ĩ”Žƒģžī—ē¨J3UU1U0 $fbfŽZEe)œ:=Xu™ŖCW Öō#Ą™yâI@ā 2RÛ4MešÍ,Ĩ”RbyĒųrXˇ˙,’§‚äy< Ã0  L0MS›pJĘŧ4 ˜ŗ“A ÆXZB[33œĖÃlŽˆh@D!Ĝ8 ”W(KQUģnhsĢZĐÉÉmšj)}ÚmwĀŖŒŨn‡ˆķ<1ŗh5æ( ÚTĻZk­ōîŨģËårsŗ0Ÿ?˙üķ­뱆˙jqU*ļ•åņ:Ô_įģ›9ؐĀĐõu D [éØĪUA0Đ&fÍȔ A§Ø ˜( U$€lú=vģũŽ_ũá‘ũFûŊåŽø]åf\Câo}1ŠĀô|>×ZŸßíāJ(Ín@æi,Å*Ģĩ’?ū­†é ‹!ˇäĶŽÄ„™ƒ§–Mžš’ŨCd_¯ˇŽ]Šln—äW帔ƒ@îŌŊ¯E¯b]4%ĸĀ´aH€HDē&ąsîûŪŠ‚[ēČkÃ]‰’ŽwƒĄFÚ ˜R3& ŧô^`dÆ>ĮÄČjdHÁ S ‚ŽëK)ĸÔĨ]Ė™E+2J­b4—i3ŗÖ "ēÔ<Ī* RJĖĄĖįZkßī˜ųŋ/^ŧđ’ØããŖÃ×[Á VNĸŽ=:ūOOüĕĀŧáØūãēŒŨ,ßÖ–Š âvdkC™™)ŖŠjˆĩ5!12XOO"Bũ^[^˙Ø ĻkĄēoŦíackítz”ēT6„%Ĩ+Z°I͆ϭ5ÖĨ¤áfãĖéēt6_‡ë“!Åë"+ÂÔ<•ZŗŠøŲ¨ ›åë*Zí[ĐÛexÕm­‘Ÿ ""B`Τ”HÁ@ėĒĮ͋CdĢÚŊ_ŗŖDž‰ũĸ•˛ëg+ų¯hĢĘ9*xđ‰$XįVŨŠVil1„š™a fD#dv!Ļ€“ˆƒ^‘œĖLDŊ넇ōėŲŗ”ēišN§Ķ~ŋw, ¯¤ętĨ4ų˛+mä ÛtįŽ&Z"‘'˜}{CX‡‰ĀÚ{¤k' ßĻjԚ7æĀU5ëúJLŋgÍÄ?6īúE ×Ē.ˆH „4ĶétČk­ÕĒ­5ŅÖLECĩ5—R 0U ¸PöTuš&đæ”Z5oˇ‡ĒLjj "n~@ū5b4$¯ˇ¸'Tŗ@Oūa;ŨˇXŅ­W}ĐZk"6iĩVFxęb­bļė]4ķ“%į\eé\Û \ī&ŨÉ×U%XÚčŊčšsŽ‘‰@¤Ēęĸ6e` ÕZO—sĢ*bĩ FNːöû}ŠÜĘ|šL9DkĩB$A`&Vķt)^(ō3ąÖ VũŠ1í÷īwķNG§6īW‡}sė2Ņ“*åŋØÚrā§įĻ›W‚˛xÅ<Ŗĩnė?žD%HĢš°&h{}d;Ā hüÜÉŋâŌīĘ}ũąyWxBÉQÁ3uCZR|"D<NĶųãB+/Ĩ´T•ŅLEĨīē†"Ē 3sĮŨĒ^ˇGˇu¸ |ŗ!AU—gŋšĮ%î#D6C‘ęĩĘÅJéięŽÜZߋž™|ø˙l’u{Ų–ŋŅSûô?°5¯z@čÅ­ōąÜšĢíą÷õ]?^ŸMëömcmĮķŠV™K;Î"–bĮĖ?ūáz@âTQ҈€7…Z[ršĻqáô3ˇUŌ}Škŋ|ųRUO§Ķétâĩ[čÚĸü Ŋį~+tmŅūu$Œß$ZŅJŸÂĢÖü\ŊšúZk­3nŊøKžˆõ×ZSėiČÆ— !xšŊ,B@ „ÄO­ ˆĸz›:"ŽáŨĀžŊ~#ĪņĐģ^é-ĸŽL fd ŅĻiRiŠc'[kf‰‰B ” v>ŗ$q-;U­âčŽnÅG<ū8´ĨŖfˆBØ1áꊀL­5mMb\ĀØÍė7÷ĩ™ëæĀW†ā˛BÁ›NmÁBĨÕ!æmœ›â"&"@Ë´¨T˜RęûŪŗâ-‘Ū6+Øĸ–Ôuĸ9šŠviđQmĒZĘtšœ.—‹*L§ §8.é: ūâ—ŋ­‡Ą˙ҧ?xųâyŽŒ)DDV­ĩÂĒ•†&%ĨÎŗÄ”RŒŊßUÍypž¤ÛŒˆĮyž‡Ãĩ•n˙ãö)ĢFÔ „ušÎvDę:šÖbėÖÖãDK?"Ņ Å)%3yxx`æĀH€`FĐU’ (éļŲūđHĶSöģ˙o˙û˙ųûŊ™ãøŋøÅ/ŧŽíEŽßôúoÅ-Ûĸīęwõ@“ĀĮVŦēAčÕ¨mNØä˙đŗ¯ŋøÕÍĐk&õîĐŋ~õŦÕM´IÎ}mŌu=2Ē55eĸ#yķô†ĩ8‰Ü‰ãT‡UŨË[ŊK)ĨJU5@lĸĨІ˜ 0Ļ8Îãųr)Â\fØ7āgSU€Ö t˛^Ŗ—šëĖŦxG› .Hį$4XÚĶcāœsqĸˆãä"uíûņëö˙đđĐZķĪe pžæ.g39}ŸûŽW05•ZËųt:NĮã-„4ô]L$Rąé"špŊQ ī{ŋ6"ęûVR|â XJ)ōSâ*")WŠ'ũE&ĸúv5ĀoģĮ‡›GōûPk­EX•Ŗ 1xī;3›Éų2šZo)Ņnnv÷‡Ą73Qšn÷wãüpšÎãåü0NgS !0Ņû‡ķéR_Ŋj?|ũrHč+'6ŅårQ՛ũmk͝šGæîQUŸâ7*GŽĮã0 ŽûŖņūžŠė/ļđ¤†W­Æeķ|sŽŅWnļ„čÚm,Ŧd„§Ė9F–5´ŲŒž m|/ë÷ļ1g“muD kcäwžūˇ8ŪߞȡŨöãÚb Œx|¸?ÎīēNĻĶv[]PßcĄ27dŒ1"##1mI­ę˜ūāieäâUøúôt(w]J´Ĩô‡„jh€€R ‰dnŌ„a™bØVŠÎåq´u‚Ķ–y:îŌZc„Žë@åršH-1ņs×'"šįŲ¤zĢ "vÜ9ų × W¯: ļôĖ?WĢíՋ×"v>§iōq?Ķ4ĪįŨŽ÷jĘų|$ĸũ~8}#ŠĩڔÜŋ€ģĶT?Ü?Ū/_ŋšŸĢX†ū1ešŪĮ9˙͟"įÜw]w>ŸĪᑆaOŖ‡ĮĖŅĖŸŧ"ŽõU\CS/­mwɍ<Ĩôūũ{˙ėWĀÁ“žĶuŲ ÖŌĩS…õߎéo=Ü-Û'X~–F~ÚW˙†ËĮüĻõ{›ëÆx ėģm;üū…ËŲNJëŨ$3E5 RJ ¤ˆ?~l­fžËdMļœ“™‰8Ĩ”Õj"D2ooCÄH‹Š÷šøÃžö„ļĸˆūĢ}÷×*§Ķqž¤ī‡ũūCOˆ@ÄÅuŸŧ¨ŋēŠlOßŖžcžĩ™ü°fŠ1j(į[[DtUÕļPV(Å?×VL†ĨGįy!yWē´—q¯r:J)1ōá°Ī9ģŽīûĨ( ŠC—r?ä›]˙r’›Ũūë7÷Įã\Ļ:ėúÔĨiǟųîvn÷ËāŸŨŽ÷6Z˙€šnJč¸J"Ž×Ûp×į׿9š§ô~Ž9léYĀöįmīÚ\¯MŽÄÍĢ#"­r4Qķ'ČOČœkõņĄßŗsũũÍÕSžãņøøøøâÅ 0ŗyžũ^˙úúŊ§Ģ0W×!kĩĩwīŪĩ:ßžū§ib¸žš†ëo !),t‹Úér>¯áU×dkŌǍP Uŧ”ˆlíŅõß봁-UÖuԍƒLĐÄY‡6MSjRĀõM[ķNŊÎÜļrĸgŗ[T\×a6Ö&ĮÉ_I‹ "ų´Ž9å@´¨[2sņXĄYb Đšûų2^ΊÛ˙đ“ģ”bJéíģĐÉ4íúŽ™ AĻiĘ9§”÷{ĮQÄ|ŸÄMq(Ũp2^‰û[ŋũĶ*°Ėžloļ9Fˇp7õë“kÛ-.\^J‰1ÃāíëĻ[ŊGä‰éIäu*Ģđ•ĒÚoRž˙ÃŦß^' pÕķģŦyû>3ŖH=îSJ9ĻīüDLhŅŅū@ Á I艀+‹ŒĀ@ `ĪCîvũ°ßīëĨ!MqĒsŠKäIDā{‡Yב­Œ”B ĸRĢ„°œ˛ŽßÕuXJ­ˆ‰I´‰ĩ&mæ˜cČ)Õyjįņ2M§t.ģąūâW_üÕtųä/ræ.1sH)í†a:ž1,Œ]yÂĩVvžúRŪd{ŽÃ0D΀>*01œÎ" Ôr-ĻZg÷Š‹×˙Â<Īã¸Kŧ˜é'NŒQš w7ã8z”(­•Ú$œ1ĨĐõŠë"VifĘĖ1twŧS315cd"5ŗ››<ÕfڞŨŪÔĸ!ž'UŗáîƎbŠf*ĨÎS×Ĩ”úRĘårŠnnn˜`Į2Íįņr{sĶVĒ5d5Q1Q"ŠBŠ‘ƒ˜–i>•“Į8*r`ŠfbŠDDĖTš‰SpYJCS45i^IžĻR2Đ¨Æ8H€DĄĩEĀ҈ˆŦ5”ԈĐ čŊdßÃâ˙õ˙øŋ€hŊ~D˙ŽTö MMĨõC_ĘüđđđîŨÛ2O¯^ŊÜ ĘĶ€Zįq×Ĩ.ōÃũ{n—>Éņķ7ŋú¯o?ëpėbKІ..)ŠĄ7Ċ(LĘhԈ€ˆI‰‰0„‰ĘxzõėY›ĻņtbjR_ŊzöéĢ;-S›.ÃНÆË8]BJˆ"cæ”8†”Sę(đ4—ËųŦĒ)00AN Z™MæËt~$Ŧ]D´RkŠÍ†Ũ͇÷oß?4! ÜīöETŅĒÔĒíõë—9w§ã%…92#˜IkĩĖ*„Ōj œSd"SQi„āļˆč!̊‡oĨ”iXTWĀLTš"ŒĶč^ÔãOqNß0 Ēzš\ŧŌÛáo„ÚÚ\&fdBésúĄÄHD@b ! b­ĸSCĶ@‘E@6c"ŽŦ†!wģįņ4–0 ÍĸåĨŽh’s˜Ë¨ĒVÛĖh] ŒĀˆĖ‘ˆę\†Ą‹/įs-sÎ)§¨"9ÅBßåžërŠ„Ļ`h†*†Č9eDž§š5…œ1†)&D( K‘ Ļé<ŽŖĒ0320҆Ä!f3L!2C)•b§fĒ !ŖC€$ ĖbÃ^0 gĀ@f ˛ĘųŨ˙ü~ Á~˟ā{č[~xƒ.ÁGįĄ—yfÆÃÍîĮ?úTjÉ (…3i—#ĸŪß˙įŸũŋoŪŧųøņÃëįÃöFrįŠ™–Ķ×7w/ģŨķØŨv7¯:‚Ŧ&M°ĸAäȘR$X~Š˜ŠŠ6AĐDˆ.uŸr×uEk+ĻĻM¤Jku…[Q‰‰ ĸ€~š@ģ.:¸´§9‰DMšZ“ĀÆ.Ĩg%ŗˇˇœnž]ÆŲjÃĻČ!Y-&φžne &Ļͤ.öOõ›-HķDk+€-ųqkËPcDbUm¨ 1UhUk­M*V ÄĖLm­ {“š§Į°đ%Åũ”ŌĐī€ƒ†HĻjĢ ßpc—‘3ĩMs™ˆ1 P0C5QOį§šŠZ›kŖŠÅÜSÎ}?@l#Z›gSS 4—QĻbÄģũíáp¸ŋŋ5bbLq™Uëņ‘ˆUđI%Ė!˜ÎsU­Ĩ8eBC 3ŧ’Í"o4ö<ĸÕYęŦڈ RTl¤c™ûž1ĸ™613TcäVՈŧŸ̀ -˜Ķ…ˇhJÁ@ŋe¨ËČޏüÕLŅ@™@Īēv]˙úųŗVæD¤dĩoßž˙đeoc÷ IDATöĢ7_~y|ü8M—ŒÖŠuœûn¸ŲwS™›4¨ÉdsĀÔ÷Cä>Ė€cÕŲTą „Öˆˆ­P|+s@L!uƒĨn¨ķd6ĢŠ^ÉöÂjm†čl´Ÿp~Éu…˜‰ˆ¸ĩ&Z 0ÆH°•}ß-ĸ3€0ŠQb51i9@uXĢã¸4ÆđŦcģšōvũ}Oh­ ’Š6Ä%ŋĘ93c+‹€¨c0~ĩ[õČËēŨĐuüœ˙unâŸPaÁÛ@cāc&Žĩ6% ŽIUAAm••"[ޘˆČ‰˜1Ĩ”SĪ1›­ÅîŦˆ_9ˆ¸š–b&ĩ^&ā`ĀãÍÍÍ870ÉŽČ`ßã'-Jn´Æüŧķ‡ģĨ [ÖĒĒ"ļÍ1)rHæĸĒĩTĮĢBbjĒ„M1“Ģņ˜™ųąŒHFėģ!Ø:čđ{[aŅž€UÉÁũŦIõėĖÔ?´öōö&3Ô2ëxŌ2e$˜Ļō÷ŗŪLįãЅŸüč6Ä;k’eļĀĐZ›ĪĮãųøņžã×SĨOü“ÛįŸîŸŊ†”ƒī^C+tåZ)"!" ykŋ2ŦMjLOz_Ē Wc]D‡† ‡x$ŧ2îũĒnHjBôáŪ‰šrzøp´RË|Že2‚cS°sŽĻÕ´‰ĮWdf¸vėn6ékĢm˜ävŠßB5ũ;Ķ4u]úžë’ÔXk5"˛õ­Ņ“X?­œ´*üž”:Ms+@E“bbæĮųøx:O#—ĻĨŠ"ämŽÄ ˆLˆ@„F ĒZ1ä*áx§R•Š™uZûi`!„˜sßíÆé R Ë=p Nã<û•oâÆ>˜Ã‰VÛv}¯leSđÚgfŪ¨Ģ8&Ŧx•xOŦŠ!„RÎ(,jĩV"ķ°rf$`5k (>Ũ|P5[ɯ¸=$ķŌ+"~ŋŧϰoÔm-!¨ˆ˙Í(2CS0E“š–_~ö˙ø˙MĨūāõ‹.ķÃĮ÷RN‰ėîYžģŨģš~ęBˆ‹å”éŦeŠh&ešæË$ŋœæûÛˇŨÍ3 sė÷ģnč”ķđüĪ  !‰BmR´`@b"U­&ŦŌ\kW•6ŠŠ™Á•RæˇŦ<ŧw ĖčĶĶīĮNąČ ”ULsîún4ä]ŸrB ‡ž) ˛™4F HŒ™3…HŒ¨ßЁáŠ,ą•Á6J]ļꂊ€ÚæŸU]%ˈ(ÆBx<Ŋ ë,ƒik-ÄKĖ\JąĻˆ(fĸ•LcŒÜąĨķÃņ|‘„XEEėSŸĀĀ„LĖ‘@ĘŦĒĨˆQęJU1T3YčÖQhmO)ŲR¸"f4ļsL=2?>>Ē‹i85r‹#ėĒ ģ=Ķ Wķ˜Ų˙Õeˇ‚Ëæ]Ŋp8‰"ЉQąJm'‘z:@u×ûä;kÚ8d/Yų$:# ¸2™ĐOЧļ“īu…Õĩę6zĐĐ4'iĻ @‰ˆŅTļv~û‰œžūlŧ˙˛ĪiĀ››ÔU,jC—,ZiĶŦŌ°K—sšŲß"q`žģŊŲínZÕĮãE!ÎÅĘųÃWĮã8S ûģÛ~č&ā?*y˙üæpGŅĶ"&0‘†ĻĸZ¤5•L MįŠ“Ã2íSģ†w_,×@Éc-&ÄET‰™c ]îrŽhˆL…˜ģA0Lĩ~ø˜K3&Pd†Œ‘p‹L˜#ÃW´Õk˙šå™ÔųFL)m—ļÔ qč{3īe-Ú 3S^z\7“—šļ­ėŖĨ\ú¨ĩæąKkM&/ Õ"šėá\PĀȁ5ŠfV͐Œ€ŊĄĩyS 9 4b 1Ļ.&¤˜ëV]\Ŋĸ™ÕļˆŅLĶxūøģūöŽ˜yš&įlyŦ먎f_SķqmlÜÜŦ3(<đnģ5^~ÄĖ °ëģiē”Vˇ#˛%53,Ĩš|cĒ-SdfQŧ”å:~Ēj fb&j&âȝi(ü›Ž`€āŖŨQŅ”@Д ÖË$elu 91hmš˙ņo˙ã>…úđņy§‡C¸Í˛K0g|ûp2ę æĀ]NˆÖ¯õõå<Ĩ.—SŒq?čņņãW_ŊŨīîn/æFĶ4Á| 2Âãųũũi~ûæÃëũ%˙åw÷ėE¤Ô0Fl­Š ‚,-]W&ēņTļ8cc§4‰ˆ+Ŧ]=ÔE€Į‰PĒ&ĸ9ÆŽ }×3#§”¤ÕR+L7ÃĐįā4ĩR$­á(3fd@F Ċ ø´“ė›C\ÉÃË ÷Ž ?ÕVh‡™W ģfųøô qZ˙%{ËĢ#Æ'îB“ĻĖlŠM[Š6Mm*,Ė:]Æyž+˜4d Ā´~™šÉ˜ˆ¤!ÆĖ9isĢÕ`HŅĄQ•Û:^ ë2ėS˜uŽ!w9gCŧŊŊUkž`ķÕÔŲÍ[úž\#Q×%?ÂZ­Ũ:Ĩ6ĢÛĖÕ*†„Ģ˜ã/EĨV+œ)b„!娖yHƌĖ˜´ļZ…Bg&M­¨.<Äīw¤€)ĸAC††Pßüęįķtlķ92 90c§všßũ"ŪŪî#öĪÃ00´VŽÚĻW/īúž‘yœJĢ]× Cßå!uŨîæ†™C Üįņ‹÷īg°SŠ Zi‘m7äŨĐ=žÛøx~8îûĀ?xŪAĻS­ Á$&ŠÍFÂČŗ¸-žÕEËMˆ8FS­*ĸ./į†ŊĀˆ zÂÃŨGÅ41s#ŦR˜ ưßÅũn×ŦaČMjŒš”‰Ā‰0 (˜’#‚ z_i[žŠĢ’C[5Š›‹H…@D1F3EQõft !äŲŗ5éwƒ'ĢDä›qĮ‡|šL1uĪ_ŧÜnw‡ˇīŪ(ȏ~øI”ŲŪõņÍP'˛‚2GÔ.2°VųøîíŸ˙*wŠËQë8dúáĢį}Ļ6ĖH)‹)"15b& ÖDÔÁˆHZ›ĻĖrށ(&ŗÖ*˜ļÖŪžyķķøûÛÛÃápĢĘs5 aTdd&æÚJ™ĻĄË‰ŠM3š”:‹‰S”7ʎ­ z~āšŠÆSÎfbô*7#†Ā*:McdîēŧÛíRŠ`Zk5×LÉcȍ/åû˛ëē­PäR ¸ĘöŌ&\æuPΗéūū‘b$ĘbļÛbLjF1rŒؚaŸģÃÍžâ@!öũ΀ß?į"wwwešęķ›ŽĄĩ2!Ą)¤!‚Y“Š”R¸Â,Ō3[ßĨ‡°qBWâgĀãéė@Ŋ•|ė@XÕ$q `f"|8>ŪŪŪv}Wj5& ÄãnŲŧ3@k:׉ !įÔ÷ÃeĮËšërą-í[čgČDĖaéÅūĩõ› ėģ^ûĪYūná/^§Ķéë_~ųõW_œī§ņ||üp~¸˙Áëį\/e#ÃMŪīĄJ 0Žįķå("ŠB!ä!ˇĻEÚŨŨ]ÎYš™iŒąKšVQ5TDãRÎģ]î‡WcëōđæËˇkāDįķųÇrzüČūÉ_îîNįņÍ/ūŋ‡Į3§á“ũųáöšaė‡ŨáîŲЧž‹Œ$RiE‰žŅrqf|ën^ßŪí˙rÎ!p nMžF°ŽãØMešäx<ž˙XÆJE.—‹Jé2sß÷ Ŧ ŒdÂKŦŽWËÅĩĸŌJ†…íŧrhˇéē.Ĩc$‚@ĀĖ>qËG${ĩà Ō=3a‰~—>XU5YFE€¸”YiM 32#,ÃÕTĀh•ŨAd0ĢĒqaäâģ›Ik-Bô™R CĪąÃČ#ÎMĘiē€ļ„ōâķ‚0Ą92ü[lōßl…ĶWw˙ūËĪŪ™ŲMŽģÛnLˇw7ŲL5…¸Û÷D4ĪŖ5 ÃÔÎí&õũ>Ėc)m~öâ9Ėã¤ĒĄK‰#!‚V11 ~ŗ8ä~÷åWīCŋߕVĖlØ híÕaOm|ûËã8ž=ß=۝.cũøåšœ°Ü<2Eh L¤JÜ 9´0‡Ģh+ÆfKƒÎõŊFD/nß÷ĩíDôblŒąë†Ķé’ûą4nUÆŠŒ-1)’! čĶ|*U0å”`­ ÉĒđdÃAŋĩæZä|Ĩ`ëŪʏˆ¸0Ÿ|d^-x5Ģf™û4ĪŽŒÁëˇëgė÷ˆôI@ˆ &æH†j¨M@ÔUŅ ĖˆĖ´ÖsÖĩŲ…ÉŲë¸JŋæZk7û››ĸ ŒÆIį2á*ŽĢ.‡§{žĨ ĖÜV=Q‡ĩE¤6Ļ >äˆëGĢ‰xą‘UüüęrdfįāÅ\_ČÕv˜@Û2EÅ߭֙""™ÃÂŽ#įŧĸīšîú_ūĶ˙mf¨íÅ>ėvģũ~@ÄąĖRJ‘Š6"ˇĻũ°7 >_ˆ(p¤¨0×â[JjSm‘1¨*Æ4[ ˆkf @­ĩaķáÃ/ßŨ‡ÛžëRHŨĢWŸhĮãŪîsbΤHmw7ŧ|õōūá|žĮrŌ鱛ΏZ&c6„>­ŧ˜Ģ5mŌi\ÛÖ¯-ö×oÄårQ 9&‡\¯ŦÖúË_ũ*#§Û~8äKĐFŠI‰;ÂiTŅ2–y*“Ö9Ϗ€ėë~˛+Ąƒmfņf„`*öÍ °š—Öš*˜*3/zŠˆˆ÷j—R.— ė÷Ūū\‰VᅍĄŪĨčtE\iŌĸ@…s¸\ Ų#wQ% $ bjĸ đĢĨLŖĒ‚ŠHÕÖTæZkyĀU–5Ĩ”ÃŅ‚aU›K|(.¯uõ5Įö'č Ŧž/āÚkq}œŅĒÕkÖē…‹‚™Ų\Ûé2ãØwI´šČ“ÍĻ]“b1oųáē_ũīļYÂĩ­\ũƒCā˛Ú$Čŧ4[u]w8æš<>\úÃ>¤>e=•:ÕV­ÎĶšÎcĀŌD€)æ”s$ĸ""öífw˙ë5,mč>nģ~Dd& ÁCAŋ433[Ėu7ØZ2qÃāUQa /77č×ā'?‘Ā9ĩǜRČ\TIąV1ĸ`Ž8ŗU}L´YŠŠXĢ â„§íúmâZk/sĘaȉŅŦ4‘E{]×Ū—íDÛ*į+ĪŲüōJ•'ųNĢŧVā_kÛTU1% ›j­ŨK ÍÄT ŸXP‹éĩÖĀÄV9[ŠaŨŽ6A2DsŅŋīsbd¸9ėR 4Žį:JLŠëēām܀ h@9äÂ<žũöĒHĶFD]ŽŪŨÂ1€ˆĄÕÚɔĐ ´‰#Íeœ'9ÜLģ}Įųå˗ģΙ‰Â§?ūķãTާĪow/_>Ûīōx<Öņ(jC´.§æĶå”ĖnYWī$MÍ6ÍÉÕÍ.%5ŗĩ­q3¤_/‡˜ēá<ÍOösĩc-ĸAe2P )g QŠŗ"ųIWÍâ^*Ü\ë– ˜g•ÛÂĩZč¯efDS}’äôŸEDEcfŽž}„í}ōSb+æŋՙũeē~"øĻę’˙5Ļ4ÍÕmžë:4ÕŖjDbŒŅ (˜!ÆįšŠ/]ĘXJ ¤k î§LێwUũ^ËŽ(&#1E 9öÃā14˜įyĄ×!“*XĢ,ZJŅ&ÄÄĖ€€j0˛Ļ*ú˙÷n=’,ə˜ŨÜ#"/UŨ§ĪeΙ!‡ËiW+@HzÖ  aązDRäė3œĶŨuÉˏ¸ģ™éÁ"ĸ˛ĪģZh%ЅîĒėŦ7ˇÛgß§ŽØÔZefA(ÖZYĘ8#hņZ“›VÕü–pnæ*"-xFžÄîÂÖÎ!Âčũl^ņKžLÛ¸E~ņ‹?ũÍo?/K%tu˜æĸ(œ 莤n Zŧ´ÖúḎzoÔ{ûôė.ĄwÜ%"BĖ´5fī÷Žđ_Kž[åßÃဈ×ë5Ļį‚ÅocėĮ–WÕψMUÍÔÁˆ(eÖKEf‚jˆ1;bČb#D67Ue4`f°&„ŨЇ$'aĄÆHļ‘ZæœO§ÄÔëqČ9x)]؈ãĘaƒF€˙‘7‘Ąû6L8IUcų"|Ѝi}†÷DŲኇ.‰P)Ĩ•Ōu)üé–3ĮV GÎ9×ĖÂĖãXĘŌ@ļ ´uŅ\ãŋ{l”˙˙^+ĩ9õ}ŗ†Ë˛LĶ퇟ũŧ”YÕÜw֌ZęōūáQkŠZ3ᔨŨÔ Ŗ¤^k-­Eę¯ĒĨ4DfF”>įãņøøxîûūĮßz÷î+LãmY¸ĪK-—iΊģ^ŽŋūÍĶWųûīČ—[ņųęZ]ßĨdˆˇyZĻ Ô(8™‚{āĀ ˜Čāäh•“0×Xh¯āŠ&Á뎆îŽ2dÂ` ]ˆĀ‰’Ā?üđųeŦcKB]’”ąķžSBroTkYæZk#ˇ^„‰Āũ­\ŠãŧaÖîjNĀ´ŖaznŽÖZc’Ø3q>†ÃL,‹/čR &@N2t}ČÖ4S­ÍÜÁЙy)Ķ4E6Ģe^Rî:IfF{Ü@Ћ­[Ú4Ļ@……ˆŨœ9u]7F")Ą4 ,KakU„ŗĒuî†ū|>ˇēx]0%6¤Ĩč2ĪŅ+†­€ŋgōģ×õ­vUJ)e6#b6kĒÕlmÛ¨jJģFząģhwl›ūúĐ%3¨ĨÖy‘ZšcĄēˇæ@ ŽC§­äœSęĻR[­ä 0ĄUBWT#'ō‹č'"§°sLüŖß˙Oûz—ŗáö2€P›rë$5u–ôp~Ŧm)ķŌešÜ^ĢbáDÄXUÕ žŧ0A Z€@–Ļ”L-Đŗāž˜ûœ™’đašæeĒYo†]Îŋūõ¯¯ŗžĒų5ɧ˅8UĪ„Ŋģ~˙ŗīŨũ¯~ķņáĐ3&gvė‰ąKr|xt9\ūîãmnųp^tĄÜŠ#7‡yž9wĒí|<ē+Ú:î`f   ĸ#9#QŸ2öæĒu.ķüŨ׎ ´æt03$K1+ūË~ķO¯KMŌÜp0ĮVT ēÜIęcœ3ÆG Ū¨ÃW•n ø‹smY–yžƒĮh ÄŽUË"á–ÛR´f<‡@Õj+C—āōō\KiĒ„Ļ]–Ĩ”ĨV@Ė)!QĢĩ,S×u9'†LD­aqŗņz;F4UrR-M‡ÜyqdAĻTŠ×yŅÆ–%ˆ–ëĨ?Õ,ub¯¨Ėšę\ Ŧ|Q¨ĩIîĻÛ¨e: =˛¸ûņxüîááršDH[DE&ØÄõÚĻĩu<‡ÃAU_¯ķÆ‚ĩ.­qôZ(Ĩސ‘ÂōÍŦ5ˇ‡ĮĮRĘååõųųĩKųx:€Ķ8ЁdÉĨ´”ÍëéđȌcšž˙đ*ŪnˇnČŌ§Z€ŧ.ĩcM͔'O‹zëhCėŪE Tb9+ī4R˙#_9Ô",ä.‘l'o@A@sˇæĘĻ•Sfw‚ĩ—í ā†ā„^:īė]„Č­™­đ>&DI"Hâ†)%k]0WŊžž~úôãĮOמfúaîp:MÕ,mŠĮáĐ8ÍešÜ–iZŨ÷_Ū?ŧĶÛK3EĢ ˛@6oˆ¤fĨĩZŊ–’˜2:X;Ũĸ—ãænŽ螁™ÁõíLCp‚Đn7Åā`°Ļĩ–I+š7$ y†øxÕuHÚW3S”šv?ÜĄ…÷īėߌ-ģąO¨ZŗĨĒÕ,2œN§n¨mYĻŅ6ņĨĻí>&¤-× F˙/RßõČxĢfē;yĖ9Ą+h ĀŖ‡–­64UfVWÕXƒ•ú9%„Ļ­Ąš7ˇĸMZu ėĪÛo‰XSk"‰KU[{}UUsŨÃõjKõ­ęļ/‘ģw}´ĖĻZAp43ę ã~ü.‡āĀ{‘œHČ܁ęf-ūyžŊ@­ÕĐÍŅ@:éM`!SmÕQ„2uLP€đ˙ÍWøOøŠžNŗZt€ ĀCž Ā˜vÅ+Ũ=ąÔŠˆN¨āt?ĒN ĖëL‘š# ą1’šÅw H dĻ, šŖtÃqøđí‰)ŗô]ęĪęčœÖĘ9?t]gāãx§‘Ŋú‡ķņxR°”V§R"^ =UŒĖ°ÖUŦ-ÉZzSØ6’ƒĢŖšĘF—ąoˆ-QDDŧW؅=Í´ÖÚí­ŋ{ˇyĪĮSēîˆÍ†W!đŊr [Ã&˛ŲŊ?ąWTSŠ˜дʎ 0›VŲĘūėöÚscÕļßæjNëM­¤f–Ĩ”ęĒ=“´ik-CCÁũ§Ü÷ ˆĻ°D†Á”%&—‘ÔpįUē/ în=Õ}‘ã˛÷‚°)äL„˛cBÖ¯wæzm+Ä?˜Ö73Žã)ÂoĩĒŽĶ4Ųâî‚MSJDŊ"T§æēר™ųŸUsÃ"e ėč÷•ļōtĘ.Ræ†w,‡°,Á*ŠSöė,F@LHŠëbŌ$PāXښ÷&@ÕE­šĨœķÃû‡ŅwS­¯—›™ŲõvįŠ„Ėŧ,K—r@öL+2×ÚŽˇé›Įŋ\n˲Œ‹ÕZ 6;÷¸Z'Ú-ÎĖ\ßĖÔĀ܈h¯9ÄãŨođmÕîzĄ9įEwkÄŨǎJ’FI–ļ|•ˆæˇ×“đKôÂū9ņÍ ī?œˆ8€˛—vQĢŽíž÷¸ÕKŪl;>ˇßŽ÷×}ī§ÜÕĀvĢN)š/Ē*šķ-Ģ SŠä~YB5oûÆ]%đęۀ Ŧ=g€PZpĢhĘĖ”˛WÕĮĮGߞÚ~°ņWŋ]äö Ž×ë~ļRPÃņšÁž=)|ŗ×¸)ÜØęcTõ'xØēžĀĐZCĄÄjëČÎ0  (8sWk­ē™ũ3ˇqb¨ŪāX‡íī‚ Ô$"`ÍTŊ´ļžĶL æ€ ˆ€F“'a*ļ’ȲŽđn᎛™Vp%€jĩԅYÚ2-ŗ?žWĒąî]õރæšhn"r8Cך}ūü|H„­5ČũĘ æosÎŊkŨīvę6Ūž×ã÷MO_ú[ØîĸëēE=Ĩ$Tß<! ´ĩJIFîJ8éŪ9ėvx˙X6k÷Ü wŽ~ŋ"2GŋģÎ@;īUĢ(ŸîΟë25rAčēŽ†Ž?JÎOOOoˇžå áã˛÷1Ü) Uf6…ZĢ3íx]UØÎDXįū™Y„ö§ģžÍĨ5Cwv­wĖq0ˆē–Rüø´,ĶųüČũŠXn­v‰…xÍTU56 S<ģ7WD ŽĸŨ\ß,ö? —RTmߏҤ…ÍKDäŠĒ4ƒÆ IDATКÕŒHB˛îuģ“„Ŋ÷xWSų§NũŊ¤Û ûŽŋÛ{a´°5B~‚4đMÛ÷ųüģĪJ~Îyioá@Jiŧ-~Įöž¯ĖŠėoŪ? ļ`~‹|_ēZLRk­×km>)%‡ÕėAlš´1¸—˜ųx<ÎË˙4ŗR fŲõĮļUŨ˙ļļŲ÷ۏé药īnÆ6\”M˂Ė`¨ÍIUDRP¨miĨ™ h5kHĀäHøO8õ?æ+¸ūx+l¨K´un#v@Õ&("Ō"Ŧ'tü"8|ē`¸ ûû–Ä>.ËâÄUázo͍&jVJ3ęÆŠČ8Í/¯ciŪå# ģsŠãĐw’ģlNTÕįRJƒeŠĖŖŧŪF-Ķ4c߉Rõšĸū†eúōĪZDØ˛îÃÎũŽü˝=/Kķ/tGŨa:‚īļä­a­)11"¯1ŨĄsvē_:ŋSžÚëē$Nč>ŽŖ-ĩÔYkŲwBO,6Žm,áģ;l īˇ]—īŨ~_"Ō@åNŗw)đČ[wS€Rа#ŠģG•!’CûĶųļ[úž_Ļ››DL^tŊžãņ¨Vc>.üsœw§Ķiŋ}‰ˆˆ}žwt„oÃ0,íĶOĖu Ė‚Âq›žûŅæŊ“ø<#ĸš—R°Iˆ¸7B*čāę­ZĶEåŸb=ž8ŽŧK €Ë´Ė€ĐLSāÚĘÖøZŗyB‘5 2樎::”ytw׈,$"Ët{~~îO?~z˛>|L//Ī͏Üęk×o×q^TxČ]v#pę„YˆŽĶōüúĒVįŠKÔę4=ŸĪ]zõz™Í-=@};wīɈĖÁ1LÂĩšģ¯Ä7ĮûOŊ†ađU Ŗ*‹ģ››zëûžW-{īADRbúáIØ~92ļ§ĩ°å˙fŪ!‰ˆ(37Í­,1æÚuŪ ‹ÆC‰'ņ>‹ú˛Û#ĀX XlĩÅä]’S:NČΎŽčNĢ6pŗ>‰[ŠmĖ9/úV¯ęē~ŅŸÜåÜ÷Ŋ;•Rˆ˜( ¯@Kéz¤D"ķ<;xDmÕDVU:ķžįĮZkÄoÎ?P™""q@Ŧ)(ĨˆSöÛßĪ”Čuãķō˜ãYHffŪTįœÁˆšKĒĒ€,Ôwš&.+āáÃâeÛ÷ ! !9":apģrk ¤ËƒģޚöčŽRœ‰$€’›7@fv%uGväÚUˇĻŽĒ×qFÄeY^^^B„—™‘Ōx°ˆ4ך”ŌėxęģãŖ”2×RZYĻZkŸz˛Z­Kæ”Riõ6ßŪģß~ķ…8į¯>|×M:Ų§vk‚ÔÜV\.nĄx­B™ÁŨŨZk€ŒÂI’ƒ8šîŗ/āũYšYÎŨ´ĒZī{ŠÕÍ->: oķģŨZkũņ[x_"ĒÚKzĢ+CØ0 RüWÖXīút”ĄĨáJŲ#0š“ũ‘XüŨę!€€[SXÛ¯āä°jP€D Î͉0F? ģŽīûž„I$‘$‚ĒÎUKYQÔ~'Cūŋ˙|>ŸĮcwzw™ĻŠ8K…÷_Sü\´uũ*æĩŲ¸ĖĀT­`3+­5ĩŲlhĩļĨP߉Hßæ~”ÜKî~õįr}ū M™ĨŽķ˛,ĩ-D€æQ;33CÛÄŨ€`ëô8ß1bšEųĮ}Äķģ_Pģ{…¯únS5d!f†”rÎ]ץÔLt|s\~WÚŲ?–îp°ãöŽ=‚ĩÖÎĮ#"Ü^$u///{$ė›åÄūŽĪļąŌ(´†VU\ØúÛīĮ×iZ–q‘Š,ʉ™Ņ0,ř‰Ú2'”aY–]ˇ0ōŊŊôZJ)ķŒ(ž˙]š5ĢĩîMžũ iš>mŒ|ĮŠHDŧ,ëÚĒF[køī3Ž={'ĸčÛÅq°fvolqUf††î­ŗZĮBBÅÛ<Ī‹/Ôšƒ^ÆËņøū˙“™n¯ũö÷¯ëjLQBaafDŋ^¯đĻD›kOēîŽÂ¯VmĶRdYĘív‹%‹=!"Ÿ_¯ˇĨö×§iĮ‘ˆēŧŧ÷MUŸæÂyFæĨ–ĨÕâúáÃëē$ī„až„Ļ­Öļ˜läcÃptĮįįįËģ“pG–îuŅ| ÚPÖÂŊš!žÆ-94‚bԚ6ÛØ ŦTOoF¸ķŽqī}ßw•žk­†Ō–E<ĻĖkE­čMĩŽĢ[ßĖž˛ūäÁĀæ#’Œ„ ÉŅWxpđ4†ųíhxâ7éŨDÚö–nÉ0l'1Û‡ØĻÕÖ^‘㊗Ę]×ęJá o 0„č{m­ĖķĖÅ!’rFʑ&ĸZįR ‘#ķ0 `ÍÔÉioęÆÛDh_U"šįšÖĄœn/ßg%ņŨz͚YÂÂ#ô}΀žE7ĢZg`ÜcÁ`;õ|ũĄģē5rl­ĩÚn tė=eFæŪú?Š­îO˙''đĮAКģŖWPõĸj õr]ß5v€š!b…ęņ8OĶ4Š[,å8ˇĮ¯VĒ—âq—V›ž˙öį˲Œĩxsq€SūøôTÛRkũüųŗ6ˇĒez™8QŸķųt:ô‡ŽÃrė„ņ8JB™M—eáÔž^ĮŋüËŋ~wė>ŧ×§Ŋ2ŅĖ ,(õŅԈ6ˆŸˆkk­:ķZ QÆ7û،\~*uīYÆązācšmíÁž;LsM‚Ē%Ŧĩ–Z—”{Į5îŊ˙4ÛDh÷ƒ`ĮÂ!V˜0úC‡ŽĮRįÍŊ‹ģCt­`ƒ%ėĖũ÷=^úƒn5-CĔ„ÕŒ™C*7āž­CKņ!Ĩ&fvĶŨ7m§åŨ/^ŠĖÄRJuYŨænŽĮ㑙k[^__k­Ņ‰ˆW­u†ø‹m3ĢÕp§ž0 ‚7ß4‡ÖŒˇ”.î+đąæą8˛)n›G/2ۃø÷ |3—åųõÕĀģÀLķ<†Ø0ô‰Ė­6Dt€¯ŋũ–ĶK{~žĻŠ:C/H^žŽķmūÄü:U]–Ú ĒV`fž=.›Ąæ ĩš"˛`0ƒŦŌWØ:‚Ąģƒ!¤ûÅ$Gwsŧ^¯Fb&îN"yüđđūØLË-NĮÃáՓK)¤Ē´ÕāËvîū``t ēāh!Š:ŦíņZ+Ņ!1áä{‡Éī˛å0­Aƒyį>&܇ JYÃĄø:ˆģ˛aJ ’ĖŠōŧ„6Xˆū)hč9!ēXŗš6¤JŒ([J­•ĘIĒÖZÕĖsŸģĈ\UÃTÜZ”mĩÎ]—s./ååųrģŨęWv8YR§šë kLD(LsYXŌ ė”ÜÍCs•ŨmYĻ”RJ])Å)ŠėŽÍ´j+ĩít<āæĀ†ČŖo聜‰_AÕA€Eëōī˙ũ˙ūūũeøęĢ_ũį˙ęŨ‡œÁA a+y8lZDû6Š.ú&•Ŗ5€ž(‰šššŽŗŦËĶåÄ+š!čȌ6ô›<ŊŧRLWšrĘ]î}œ§Ëâ㠓&ėßwÃ@)kŠDĨÔu7€6~SúüéšëēœúÖÚõ6^¯×ãņø§úķÖZ×ēãIú!"ųАRę‚é˜ûūûøõ6õĮãüãīŸ>ŋüüO×:ŪÚˇú‹§OŸŒČ ĩ”vĢĒ3%ÉR‹Öâ]7H†2ßZ+ČĸœšbM‰@)`)ÅĢæū@ k͈ @ą.ĩ.֝—#"ę^j­Usî›Ķ8ˇÖ, ų|z,6gĩ2Ī“¯"Ģ>ä–Ö÷$!y#ūĶ;"ÄÕmŌ6‰sa_ũu-íršu)q+s˜b­K@=?Tmžįaö’Á#įØčvŽíhÖy9<$D¯ĩ‰šĀģ‡÷/ˇ[™Įîđ`In/×$|~8Nã"’ɝ܁)‡ &ä^šī{|ē Iŗ cßRęĖj+ srDD†œŅÔŦ9Ąj&"DĮųz[œŽŌk­qQh€’ģŽ0儨nÆ"ÔhįRږ–‡”ĻY­åõõJ+¯2—2ˇÖR2g7ė‡ãÕęeO‰Ĩ´Y˜ƒŽ ˜ŊšļĨ&ffĢÕsöԙđRšUŦGē=˙Ũŋ¯_×ųåŋú¯˙ûÃųkNÃdŽæŠą 3ĸĢĄÂ^š’uš´ęÖPk&wĢĐĒļÅZŅZŧ)xe+Œ3ä@ŒÛ ‚€0ŖãĒ{;Īķå6΋Žs–䜀DĄsį†ZŽĸpîļAÜPÕ¯×QUsÎÃpÄĩģ¸™"bß÷)Ĩ(H†6‰ˆˆ¤ØÄ€!áf‡Ķ V‰¨ļúųã§Y~ŊާwܝH‘įšú+,Ҏ>0ÚV°æä׿ĻddPų>‘œĀ)ps×HĀ™“¤u>.R)[–q/—ÉЍCYnP–ƒ@­5 ēl÷}ēĸ°õĮīŗ,A‘%¨n 9qgŪĸ`r>ĒĒjĩV–/ÄclĢΟĪįč[„FsXŦįã‘yŨĘ" Z[ŗ—×§Uy-’s_õNŨ]„ÍĖĸ>¤#Ŗ_5Ãķq1˜ëd’;n-ĸ-ɌŌš[ep$Ę,ŽoGwTˇŋų›_˙øé9"¯˙öŋûoš:3*¸j5t2UU °~ÄŊæŊļÅA9Ēņ‚HŽāˆH€nāîÍ̀HĐš¯Ī‚Ė›é:ę@č]יĩî$ 1’Ļ>Z5€”r—ģwĮņ˜tž_¯Ÿķŋũ_ūį?˙‹ųgņ_0÷?^F”!wũ4MdDh‚"ÚĐ eŧ€+”Ö´Y›ĩ,Đ jYŦ˛7%S„&fæî‚ĐB’bkī€ëJ'A}(’2ąV-ã4-Õ՜D$hG#ļŠŒfÍÁāuøūũûΟ?_.—žīĪį3­rē’Ĩ›įŲ7â\Û(įaŖŸŨŖ;wG¤œķRt†ŽK×ë5ċžŸŸsî @°ˇ"R’ˇŌ‚í°–p+ēŦųa[­¸a†×\wÃîí o„Ā{â(ĸëõĒĀČŌęL­Ēf3‹ąpIČAs÷ąû҆°ģ¯1ėU_fļļDČl%ļIą¨ Š*m!ņŪ_ĩmŖÜątœ§‡c¸tۉÍĻię†õ~ŖMå°OM˛hĸô:˙ƒˆ‚ėÍ´ÔjāÄ YÜÖwoŽû‘d­ēÕPggmˆķ<ßnˇãņ(]~zzŠĩ”R>ūžŽ„¸2ÎîĒV$,]×EE*ĸbÜ*Ōiûdŋ+°ų0FÄ(Y¯› )âŌ([ÄĶéRZ–ĨĒ2‚ˆdu¯Ēģl$ C×uiœu¯ĪO7p:=<ž˙îįG…9#q˛NœÜĐ+šēŽę•ęM—+jQ­­ĢÍ´ētí…ÔŧĄĢĢĄ¯‡æpxدmO6÷ ĸ€5$"Ę)'3{ĩFnœr+ ‰3‡ÅuX9ŧëO‹œaQlČ9‡Fđ<ĪįĮ‡€ŋĘĈa8Ë˛ė‹ËÛäŅ ī~||Ŧĩž<_ äɤ–ķ[p?ÅßĖõŌ•rF7v7BÚ/Ōūąę9lÅļŨ8Ŗģ~×ŖGīzĒq~FL›RĘY„]ĒŊĨŠ÷šë}<ė÷] æRŠļ¨sJ’ČÍJütõD9ፙíŠŅū[âšÜO~¯™€ßnˇ7K+F.‡–ĀĖ€ØĖÔ-„Ī×АƒAÕAÕ[͘ĒCDS ´ÖTÕåÍáģ;˜ávqUÍũ6ŪũŨ쇔{U Ée™‰ĀA‰@@\ˆŗ ˇĻÂ͘Ũmā'l=- fvx0 ÔČÜ ī°â¸UŒīãíÃ)ZĢĩÁŪũF'~wî?ũūī˙Ũŋų_˙åŋļī~ø“šļ6?uæiD-ĐjkĩļĨĩĻÍŨŠĐLÖ˚›{Z¨gFgG ė>¸“[dÕļš#ņ‰ĨėÚJ$IGk­Ö†€fŽģp´ #Áļ—ŋÜ§Ķéx<†Úõz}~~ž^¯ūŸũę|>÷}?MĶ<ĪąÄv7S_Š&´Rā0œžū@9õˆøđđn†”:" ŌzB^ēĸÍvÍÍŨŠÂ;…šŽƒčf֖Åi—ēø˛ö´SE ļĩ[yåų āaîZ˙˛ßˆģĢFąņ‹ŊmũŪûîŸ6MSĢŽˆ)§ŽËämš&f ĸĮ€ŽëēĖ"RęŧU›M†1ĐJBc{åœS’—OŸ‡Ą;Ÿ"[“™HŨ‰¨Ē•RÜßē—­5 Ęrc^—‰Ä@‹ļŌL Č@ņ ‘Õĩ‡˙dÄ$)Éęũšļĸ:MĶét2 Ôå~øŲŌę8]ŋz˙8ô=Į†Cˇ”R—Ĩ¨ņ}šßƉų€[9`=ô ‰Čvnņ YŒ÷z끎„bl€{Ģ Ēr7¤”]kėh%6×ę‚C/ˇëō›ŋũĢžK_=ž2ķôúÜėpũũīĀģ˜#0:"4Ē#zĨ ĨûŸˆ–å†$H”e  `\Jîâ Ë8]>}8BYBnS!fŅؐnķb€(LDČ÷{+ŧĄƒ›íƒ ´!EâÆ‚ qw˜ą¸?~DÄĮĮGfŽJ}ŦQxW8ŨÂ$$ ēz9Ī}ßĢúũCōœd(Ĩ9ŗĐ¯f–”Vf†āÚŦĒzJ‰×čqk‰īw,+ꠖ`?SUCÔÕļøĶ÷OkŅw-Ÿ6đ`ŋÎ=ēŪ7ÜOĖUUh<āļõ÷•‰ķ4Š"Áį`w\ ûĮÆ;÷QXē˟Ŗ7(\R7äĖĖĨi­Yh?vœ|ÕqĀí@C"”:míN¯Ņ÷ØŦ5€=õ ”X˜šmļÆ_§ĶéõzÕÚNĮĄkéĐõéÛ¯OCčĒĀÍ„Í .˜ˇĀžTÄŲ/` %`Ã‘öÎMŧ˜=Čq fûÛˇŠĐĻbĸ$:ĪsIŒÎŌK~­åuZÎįĮÖÚßũí_ũÕÃ?ü`ĶøôúPfA#pFg&@vdF%l?Á”ÜŅX=hß!üî*sŋģ8‰Â¯F c…T–:/ĩgIė@äMĖÍ Ã_ÅHģ;°­Yũĩī<ĪDVJ€ãņøđøūp<ᜟ_>ūüyY–ãņšöģaė9Ąo SwGtĸÔÉátSXJ‹qhD´ÔVšV5ŗ–$Ã{¸ëūUm!ņBĻې8ĨÔæJDĢEØjŗļÁ0qŗü¨ëļֆahNKkDÅî|øēKې˜ˆfh1KģˆŪÅ(ī^‘î^)Ĩ$}`qUU˜šÖŲĖî1Ē÷vî[z?"ĸŨŠîÚ¨<œ`W‘twD(Ĩô‡Đ°kĒ*,ûÉ Ln1Č`@Á[K@3đĒ­jSsuÄ/'+TužöŦR[SGbéD›¯ĩįátž˙Ųˇœhčķ˛Le^ĖĖ´š{)ízŊ"1IŊ÷ąmîM{2wĸÅâ˖đī0ßŦũx<€9Z17fv k­¸ƒšˆ˜"%$F5mĨĀÃãáōzûë˙ë˙čŲß=ž§éõĄOč•ÜĀÕ’9ŖŨ ˛9¸‚ gĄ Ü]ÁŦĪŲ›9 šë$‰ˆˇ%Ũé]l—ĸK3drŖÖ0‡NŖŅúûČcžüK¸c,ßããŖģŋžž4ēö—ËĨëēëõzŊ^ŋųæ›p˜x ßâ+)q13†A„sΑâ>]^ZkīvNÛāŋ{˛ ÷æˇ˙ AĀ…I›!7ā~†įéæ_žÂūˆßčWöč."üjX­t]k˛6h׸ÃG8h û:Áŗí‡ũž€{Āv:žEäōr­ĩr"fŽu,} %š™YîdˇÕŨiģûņxŒĐ=ėvۗÂķ<ŽãŅ23ŦŘũŦŧ?ԉÜj]Zkf!Eū,)p&kq{OãL‰˙ģŸD{ą-ŪĐ´9rƜû>Ĩ´×ˇÔjÎr: $˜O“…îmkĢdÆķËëÃÃģ=Ûß܃;jĀĘÎqãPJIwæ€lq"pÕ&r ŋj~>ž–eŠs‰ÃÎJŗZëqRJEĢjk@Ēę By8ŸK™į‡áĐŊ<}z~úôÃ7īiH  ZEwp% '`_ZđĢdfvŪũÖĒČDA BˆčĒēzėúŊ­ĩŲåũ¯ūb*í6-s3n€Ņ7s a愈Ąk¤Ļā’OŨ0O§ãų|8‡ÃáņŨ;Ii8ßøp8Ôėéååwŋ˙‡$ķ˛,ß}÷Ũž EåcY–OŸ>ũöˇŋũøņcœ—šš Ϝ¨Š!QĘYRę‡Á —R ļ6N‹-Ŋˇ÷§îëwĮ>‘[]–åųõ‰ÜL§qŧŧ^ēž—Ô?== áÚ@"’ÜĨ$¨­ z—%TŠ$ą#ŽãįÎëõÖ‹âË­|~šũūãŗ¤ŽļÖę‚ϧ!˙‹_|ŸŦ.æZkƒÍ†ßj0wEŦŊF’ŌĒäR*Ĩ].m&ÂL`Džŗô9!Â<-Ķ4ÕŌZk’xHđë‹ĖŨcŽ–x<Đũ|>…jAXl)ĩë{ŧŽŖ9ĒAmm.ušdq#õ9$&YëLîLŗ0!0ąV­ÅąĒ}ęČžyw~<L+ŗÔÖúžĻyË2ᜐxYj3ûôéãģwīžúę}øym Ũ%ņ;Iâ­]o×××Ë<Ī]×}ûíĪž˙ūûĶųŒˆã8ƤW€´÷#/–b%åÔ!ŌmĮej­V­Á|ßĨäfŽÁ°cUÕŨ‰xŠĨO‰™–yZæYRŠÄxŊæ”Z)æā(/ˇéˇŋâÔ×Ō8w­š#æ._/­ķŸ˙Ų/ĮËËÃéāŪjYúÃĀ’jĢÄ2œÎ$9&úEK$bIĒļ3K‰¸›Ö>§RæÛõ2OŖicB"$Â.'f’ąhm^0"‰ķŽ"öĩįÁĖ9 %^ 5åK2Î`ßۃmGæ§Ī/€kZ;Īs¨žmSÅĒ9Āũ¤ĸm¯=€ŲũüÁk†ngxڔšļeY„]|ë!…×ĩë°!ĸmŽâ_{ūPuÅߛOĖ .ŦoŠT„;9'N˛˛ĒęĘ´Zpc*•MyuØą›į ÍÄĖJJo™BŦŋpfæĐÚ(ė.ÎÁŨãáVSāíÁë*ŖvņhrÎČššĢķ\ ˆāŧ4EēۊĄ7G%'˜n—ÚĄä!w)"ų:Z°!4E2§…îœ3įÔyŠz§Š”hÄ]ŸĮ”×)ĸ$¤J"rĖâîĩčĮ§ctkĸã`fŅ_ØÃ“ũŲ­IJk€_ôē÷#l¯ ŋŊßLîēn[¤Ŋ–ŨAƒēxsãŦŠŌ9¯„Ŗ IDATž(9иŒ/—ëĮ§ĪĮÃiœ¯āÖ UUˇ”R3hĻ ˆL†XLĄÕxR)%ķčą9Ts5ĶÚ—ŪsƒÄ5‹YsWw5kîčÍ,ļB$™DÄIâHË9 §UŽw›ųŠøą5@fá2&Iš†Ą;ŸKãˇÛ-ė*ëÂí„éÆīО–#¨ƒ:¨š"E˜;yhF!2`PœŊŲšoķĘĒ a5×ø´NĖ ĖQ|ĒŲģOü%¸öĢĨÖ1íæ*"āLn{žíˇî€ģģ†ōū#ŋĢNĮĄ†ĖhېŨŊ­2sN™™Įqė6a(ftûģwīĸsæwŦ{~ą?ī­ūĖė_ŽõÕŗ:ļR!ČZƒ‡ áôprTmÚ§tč;5Z.:•ÂkŪģî1â'zĢŽļ"‚œd.“Öff]ēŧÁ,sYŠļ&"ķ2חËõvģũéŸũr_Ĩ=$ž_äû‡efD ĸ ŧ?Jf†; gÜĒ ˆf‰‘€cPÚs^÷ !QA" ƒİwŠūųåúëŋûŨųŋē\^†ĖŠëoˇ›õũPËR­s¨ģ5-­ÔZ3;`L;0"TSLl]*"ö9í[ÅŨ‰0:ÆRWE9åv†BėĒ5äēsîûÃ.1§.zn÷Oz/–ŽŲÛf Ã0¸?&ďŸÆP^ĸMq¨ëēX÷ŊŒš–ōČu]úŨÁūĄwŨŸY)…¨­'ËÖĀĻŌjČ,¸*°mŖ^Ģ:įÕ4 ĶiųÉ/ōŖhY–jÖ,ŧ-â~~o×If†­ÖÚŽ MDÂP€ˇ!¯¨û­õÔRtÕÅ˘ˆ€qo0ŽĶ-öbøÕ§§'w˙đáƒmj”ņÎm ĀR΂ˆŅp÷eŠDäøF1ĄĒÍŧ”Ō ú.2BBt$tq€$`čÜe95ŧ¤™á­r`ã1bmëșŽZúžœ°´:M“Ģe!×φ` Ŧ54ÍLÂÉÁK^JČŊFZąÎšoå4ŊãšÛŨŦ™ CနÖĨĒ1뙉׊Ņ7Gēr9nõĒ8Ȉ‘Ũē!FéĩVlÅÍÅÍĖ€8Éĸö÷ŋûņ—ŋø9H2‚EÉV!)ŦܯU­ 0ē‡l,!Y@Q’,S~Ã~ėiÔę]š^ÜWu-5@ Eda1đ”ōņxėĄ#ųϘāwõøĮf‚ûžgF]–Ŋ&ifËE8Üul,wO)ĨŽ[–jāāĢļGãʃ–8ĐŪ€ØZU~ë¯Ŧf„“€Š•ÅMˇ;‡ũŲx(֙Š!ũö…wu÷•ÅîT§ļ7¨ęĒ|ŦĒęd†ˆ÷ģ{ŗÄkw)ØKķkí DÄ5JD[_KSÉėfF@XkŊ^¯Ĩ”ãņ ģ×]bs›iģË]ˇŖ#'J)ÍęëT]˜ĸÛ4ŽˆH`ŧ˜ØÅn¯7`#Ŧ)#X'rC€eY­2´7æZ5÷ZkĘ9gĻaĒúŧŦšO­•rÎæ­ÎŠxɜȀ›yęt8œžûÖLŸö†ģÄ­ŧ{Ôũ§ĻÛzŪÄfĢĩs4“"`cfFWt]ÍDŽÎ°Ž%Fu-đo­xšĢĨN@¨ļfHũp$°įëåˇŋ˙ôŗoŪ1Á8]˛°¤ĀĄĀ˜˜›"xfÔjĖHčĻ-v ¤”„—ģŨewënųŸūĮ˙aiušĻį—×OO——Ëõ:ĪĩéW_5ÍՈ‡>÷}mĒúE(ō“¯{)5~Yø1f,f‡Ã!|ČããããããĶĶĶ8ŽŅƒŊŋ˛ø/Ĩ4"ō;žĩŨJŌ‹ˆžæiëŅčļ’$xę2ļVƒš?ʨQk‰Ū#;¸a­‹—€ļžŲáOÂT - Û†—Øî×ī‚‹ØN’låÜŊ,›öĒõ†gŒFŅ~Žņ…ĒŠÖ=¸`ĻõûÍTĩëS¨ŒGūķđđpģŨbēØlÄĀ–Fēķáp0kãXâbrÎ!r:ÎuY–in˲4ķ AđJqՑ!'tD8J Ν°k3%ˇûx쿎 —†aČBĩ GĩWŨ=ZtØZážĪîja9­Š'pBˇ”R?œSâqž›\čĩÆķ đŨiÄßMmY–Ļ–‡ļÄÕZSUØĖ7VO ´š™ÂÚYdØ(Š ÔĖS(>ē~l˛J Ę`ØURƒßüîwīOųЙ¯ÉĸģS ų˜ššgBN]Ô/F‰b8Š#B'”é0}!h€w“˜ōŨC<Ŋkö}mP 8˙å˙ũëĪ—ÛRSJÁàLâÖĐ߲ü2ŅÚũŽø[xzz ĨfĮņõõõãĮã8ūęWŋō­7¨ēkRŽ/„ˇīķÉû“"^÷žŨŨÜĀŗđū5Sõ”ŌB0ڇNkEPúŌģŪ{Q"‚āé×íĖsŋĮ-3°Či՞ģîm9SøUÛHââã|C2í¯ÕW€@ôÉ`›ö†ašĻČQ÷ķ%ūWĖŠ¤”ĸi˛,‹ŦĘQŦnã\Įqį6Ī3˛¤ÜE‘ųÛ÷0€EėdHdbė'ÖęÅĐŗˆĒv"į“°SbępŪŗqfæŽëcĢsmÍA (Ĩ4œŽˇi,Ĩ€ŗ"Ä03mÕŨÉȐܡjÃĨėĢĘQN˜ĸo`é-hZI9’į}¯/Ë2ŽãÃáĀJNî›æ!8š›!€éϟRkEá5i9ŌWŪA]–ev¤Ô `)°äôųųųãįOĮūg‡ÃÁtŠ­Ąj# Ø0LĜ„‰Ņ‘€Ņ‘H 23DBvŖåîŧN큃Å0žčō¸;&âääI€åß ,đųRU]ÕŖŌ˛´âîģ(ÜÃÛ˛ú냛=Ŋ>i]†Ą‹…sהøt:u]ü‰{Ÿ ŠÍš2#ĸÆŊĩ`îęhčdĀaoÚŦ—4 ÷X„€bUÍ HNQYafW„JÆŅ‡CÛ{’``Q’ˆ)&¨ĸŽfŽļŽ#ĄVŒ„€Dpš+ųĘ÷ģ×´Í,šÛēI ‡ģH)ÕŌ™ÅɅīē>æÎĀ@(,Ė@ ã͒t{&,"tđ[s!xkfÚ\DRĘMÕɑÔaŠ­Õ2–Ú‡Čßē$œōétėSX'Đãŧ €Ķ@ΉØĻšk­k;øHYSīÚ¨jbpņâÆĶíâ}—!g4C$W›ĮŠ0œCßu`hĩļ”sL ą0q6 U¯Zsb"ĒKŠĩļR0Kâ$'ķøŠˆŒ¤h"Ô ‘œõ­6Īŗ0Ëwß­ų›#Pķ$°&\„ä@nčn¸Ōq“š‹yĮôĐĨoŽķ'_ œw˜ĻYēœR7^ĻOĪ?˙Ųw§×ĪSĶvękę nĄ2ᘍy4Dp+•ŽŽA­­)4 ’ƒĄĄšš’{āōF.čŠj Ú)•×į—ļbJDDđ˙öfŊ’də˜-gqå.šÖÖŨÃæ4%AÂHéa ŊЋô¨˙+@¯#J5Ã&‡ÍîĒŦĒĖĘģD„/į3̓šû*’Ŗ@!q+*+"Ž‡Ûąí[XUĩU0ÂëpuķÅRŠ×ˇĨÎ"•I+Ÿ?ÜíĶÚ[8pĻ˙÷÷=ķŸ˙ųī>?}ffĸ@!´ĻUŒ §qn"X#ļš @h„N3¤he*ØcĩąjDĖûCØDI(@Ļ@ĨÖĶi]ÜzC›[Š]×ŨÜtRŠ•šív] ‹N;šĄ("RĘĨĖķežĖˆĄÛ…&ÖÅhA§ņČĩÍFŨ8!vŠ‹)-B-ēĘ&•RîîîdÕ_gāČBNĒ ÚĖW`)ķnßĩBĒVJõuŋJíûūöö>ÅNÄj]ܙ[S !ÕZĮqL)1ĮZ‘˜c™uŽS­sęũávžg Ķ4ŊûōkCÚ ķ_¤žīY]Gų-WûĖūpØH)agęDdškĖũ4MumįZâ~ßs0€9†„:ÕVËôģ z Q¨‘Ą!ĸ‡ ˜[J€āb Ŋzeũŧ:5'úƒ!1ĮÜÕĶO؛PĩyŽOoîßzCÄnEʔ˜RJČÆŲVM8FôŸÁ11m­s'ĩķ$vsčwh“Ö:O+Ŗĸ(ĒR‡dX␠‚ÖÚH•Jks-Ēd*f&ZŅ€™ģØĮ†ĩ Õ ´Lz9öķ<›TĩVë ĩ‹ŲuyX„ˆ" Bd@@đh‘qîē„ĒMęėV|ķ<"īB),ŠPۈõą7`DCb"!ĸ&Š@;d53ĢĨœá͇?Ūžē˙ōŨņĮĪgJq×÷Ōj“Ô†!ÄįĶe˜Jä(͕+°á.@EĻØeD§ųĶO?v‡=^Æ3BVhĘą;==kĶB™Į§§‡īŋ˙îp8„Č)æ2áÃãčKæT Y( Îŗ1Q#—BV@Øh0ā"ŽČčHE"$ æØån˙öŨWģũņöææ2 ŗ–5D‹ÎEؐŨ™65j ēÉėŲÕbÛ%Ôh9{5`3VÔV´6fęŦR̈xĪ ËPté ›4­cėb€Vg‘ˆ–M : Ī99Ō<5Q@ÕVęØĻK›ĮVæÖvc ‘ÚjEÆfFÄ[¸âĒ3 WÆ6[¸zDf ‚‚‚$ÅĖŲĒ/b.^ōé‚:„­ĪwßdDdÆEÜĶġKĩúnTšjSc4D ` ĻĩLČH@ÕááÍ´šlēë__wķã8nĶZ‡”ōķyōˇ9Ɯ˜Ņ@@Ú\j[‘3¤:—™9Ŧ‚ŦfBXÔ"˜ų0vM˯ŲDdĮqEd#‡ā•ā†égfww]ˇßīi]é{Īë `ëuÍ\pFŨAҘĢ8sΡāšRčv "ûÃͯ˙ėˇŸūĒÖÚīBŠ•SŦRQHéãᇝžŸßßߔy `b­Tërff€f†*0MãÃĶįažųæĢtšv M¨ē¸ĸ֘Q¤6Šĸ b fFÚW ĖJĩÖašOÃeŦv™ÛÔŦyķĻāƒÔæ54lmĸ-A‹Ž*``ĘBDÆRî÷­•”vĩÁ0”RJN]ŋۧ؇”]×ĮSDČfÄhd¨^mRWĒBFČ@Õ\Ü Õ¤1a ¤ÚĻiĸEgĖL̊“ŧ‚ëbkmˆÁV•]Q…PšqŽĖfVD*HiŽŠŒ­A+¨SmÚĨÜõ1ŅÍŨÍ1­Đ‹ÖZŌõ4o8mĒۓD´hŖz¯ÅČË‘”€LcY‚Į(ĨØ÷}k-„é/Æũ×3-3cFD“Új­ĄoPģ}.ĨŒãāXHĪ˙OOûŽ!äœpåĻųÔ×UžŸĪoėûž9*„~—Æy*ĨŒŗĖePmĐvģŨ4¨ØurÕYBH]ˇĢkØ#",2Ũ„¸MČ~&Âl@‚„ē8n/ŠkgW/ôˆČAræÂސs~õęÕáp ĸ‡‡‡ZĢ#Ā|s‹ˆ1F§Âjy9•ŧ” ô8ß§Įãņ›_ŨßŊ~HoŪž˙ōËĮŋũ‡oexâŧ/m" fc~øüôđôôæîļŠ€ēN‡J3R…iœæ§Ķ0 —ņüÕW_ˆČų|N™R Âfr8ė|ŒNũŽģŋŋŊššņoļ”´ŋk;sĮRJ)ujŌ„/E›‘!‹ đJ×WˆZ äõĻ4âĨe4@5¤˜;8Q™™ũwx8ÜQ×íbŒŧËEgfŸ‰Ž¤- P4a6B15RČZ@íc¨ Lš‰B0˛Ĩ Wķåí:és_k­ĩ˜0{zQUjéĩĪ9ĩ֊ČXĘX*Æ~ŗVŠ(÷7ũ7ī^7ĩ>w9ĮĀŌwÁw|!$Âp]č^c*ôg¨š—xŪ†Ÿ¸y tEdÔˆ™œĸ}žFC@Nā–ŖÖjĢ"˛Ûí UTTÄԈ"wq|Öi­‘8‡HZ[gTãŽīSžįyšË4Ĩ”ĀÃÕ×$ŨîPĢ4m DĄJã\žOQœJ3ĐŽË!°ČŒ$101…˜A‘BDto>æy.DÄāĒü‹Īe$īV‰ę+!įÔĢ"z¸^¯!~qŠÍLD‰Č-Åķúđ@ED¨nPÍõE šn#hD`ŽĀ°ˆā€qäũ~Wëüôt˛Ôũö_ūųž˙ūņųņÕû~žĮũņĻUeĸqž>?M_ΠŠĻ†cĮYu*ĩž.įĶpfæ~ßŊzõęo~˙×?|ûĮũáw„  ŽA…† Ēs-s)†s N§Ķ\įđ˙õß5Š2ORËLlŠ7¯Ūb`%4E1%RG]ą+núxXC]”üÜ6‘ŪŧēG°Ķļ~ÂPkPŗmåĸāL"xáÁǟˆ`­P@bæ„Ös˛}ÛÕįĪ•@Kö}îûŨŦ6^ Å˜†ˇEĢ:‰™1F"b$Ũň n‚ņRˆŠĶ\ÆqD–y¸Ûŋ~všC˛VfŅŲuÜ ÚK­ûŌĪ_-fļX53@Õe‘øbH)PktŽFHˆ&MįŠ¸ägi*ĩÖ*-ÖčÆŧ@9(˜Š-Âˌ­Gå M5äL1"ĸQŪí00ō Č P9ÄRŒŲ9XĘ{—ų}~ž>|øđí‡ī?üø“ŪÜÜ|ųūÍá°3h„’2Ŋ{÷6å= 3@ā3§HĒ ËAfëNEUUŧŒgĸHŲB”•ŸÁ 7eĶmÉŧ,¨˜sįÉ#Ž:Øž†ØŠ˙Á7ˆĮũÁ列Ņ:)A@ôÁ,1­Ķ¤ĒĶ4ũá˙|čˇŋūŗßž˙ūĶķ?Ô6ĒU_ų3"~:ŸŸĪˇû$&Lb>]žžŸŸkks-UZß÷wwwĨ”OŸ>=<œZs ŌůPUŲí‚Æq|>ŸĮ#p& ZP$0V`ĀH$>š6QcB&6{iVU•‰ą›\mR|PŽ&ājiϙҤ‘Ė‘HUë8´ÖÜ{šéŽ3jūō¨¸î @5˘‘€ˆŒĩęŽ$% H 9H"ĸĻĖŅ[CU…ån€ÖZ@âng&.˛æk,8ŸOO§K3ߐ+qŒĻĶS)e×į91ŪŪôDlȇ~¨ĩæZgاė{TžÚÃētmĢ+äĪbõ…íÁųŨKe[WE’-xfPi*m6BTĢbjØĻš“45B&T 3C ŠTĒ€O’cÁSÜ !$(Ĩœ/cmc4„~—M3oE@ĀĻibŽŌė|>?=>~øá‡>~úRĩÁ\•æRĘ*šãsŠėL L)ŠaA&3Tõ§ˆ˜Š‚!*ŠsˇÅTln„AŽ,Nļ^wsÁ˛+šū2øŊÚÃ/"ZMâũbēåˆ-žPo` ØËfØļá1đųáōŨĮĮûû×_~ųë?ûõŸ>~žs>Ö2kErՔ‡§§Û›ˇf Ä!™ÖZėpØS Ė\JųøņãÍÍ›õŨ>Å`ũtˇŗ23ÕĒZEĪÃ4ÖŠb.ĪĶėw9wdcĮø‚v€ÅÚÃÖŽá…a *cˇĨbīou•Vێŭ@#ĸËå"Ļ ņ—Ũôœ×Amō(‹ˆ@HŽéąR) ü ívģģģģšÂw˙Īåļ<<>>~ņĢ/īīoūūãíM8]°Úē”§áäđø†€L5Dˆ‘9†ģW÷!uĪĪΟ>ũ#˙ę›ßÔ×oonîb Zį6Ä<Íĸc+ĨÄš  ž/Ķ4 ËgūŸūÛßūíßü]Šđ›ß|ũöÕëĮĶųĮ?õĮģ˙ėŋúof…ĒȁPq÷Žũ¤š‹m™ Ē…H‘)0aŒq—ģ”Ã>ĶéüXĻ9æÔįn‘ejĨ6FâL´´9ô}Æ3€Ą z¸˛ŖXLLDDĨQŸ2Į”ōqžĢYí23ę<Ë8™™KČ#úr“(qŒ‘vyį'˚ú Đå|væT åœ&@%EĀKRÄŧĄû}›ZkEĸاŖšĩÖ"Ō5_OWŨ ]Ĩ=~ņgÄe¯ Ö@ÔL‡Ž×1 bŒ€ÚJkÉũ^í ūĩŪŽÄāÕˇVw5Ŧĸ fĶ0>žë\(p ņ2ãexxz4ҝžųúîæöņųa˜'bG<@äēJm)d2šÖVĒϐW Ŋ"ZīoˇˇĮq:Ô÷ī^Ģ606ĪĨ´2Ĩ4Šív8=ģŽ{÷îÍíííņxŒ‰”;îĒ”I^k?MsĢę0}¯lįy>N}ß{Änü^DŒ9…BŠfæZyc9įåīŦüxŋbŽķÉŧ)έúTųņ鄈ģŨá2žŽ?~úiëįsû?˙í߯ūå_üz¨ķ§ŸĒQ-JØívģˆt~~ē=ä˙ú_ũÅ×_Ŋ9==—KŊŒĶíí}ˇëŸžĪ Ä??>ÄC Dh&ԊHcCšË‚SA4¸*ņår1ŗĐŖ|ųfŸg+S;öéxw@h $fMunUĀTUcHĒĸĻ b )P $„Č˜cčRČ9v)įœS¤ķķgMC@ÆæēhRI›LjUeĄ|¨ę mu&4DbkĒjŌHåhIæIĨ1˜Ëž1Į”rė|ō…ˆä#Ĩ@Wށ[IžąpTŗ÷ ¤Ēd¨fĖŅg—´v䴖˙ā\ŸāƓ°¸Ēo;¨­0ūg¨ĸĩĩ†*ˆËŲ`/˜d§Œ"5@2BO¤hĐ rĖĪOÃé,`dP¤ĄÆx¸{í{3Įqœ%Œįš SNw¯ßĢĒ@8Mĩjā´C&ŋ 8‘)QęŽS­5Uĩ”yßw€Qˆčūū~.—Ķų|{s0Co2Ĩë:TÅķã“ĮŪnˇ !¸-°˙„ÜâSDŧŒ­UjmĶfQįŅåS7ŋxte-į… Ę -lcŌéJr +ô¨ŋЈ˜ĸ x'’BĖ9—":ˇ:ĪsĢâYēV=‡=üđ~øđũë/Ūíēū§ĪĪjDĄj™•C ĨÖy\črMjmWŠĸË ÃĀĖ™ØáxLšßusĢm.Ekä$&`l¨ĄcûæÍĢHUîöųÍëÛū!S—´L†Ņ]ōTИ0„ ĩ˜!‚Æ€]Ї]Ūõšáxؑ)ĄÆHČD†V¤\‚F$ĻÍZC2ˆāZ6@n÷B`ŦHāē¸"hĖ#'fhMą ¤Ė€e #0æ—EāV#yuí’9  îbë…cęÖĒJĖĐuÚˌ#!ŦŊ, "FߞĒ˜Ã>Eß뇮Ԉ2V}É)RAÜl Á™ ŧ-60ub”hSŅ&búĶ8}ûáģįĮ§ŨaŋīwĨUŠ cŦÃV€šj@D6Šbc<"2MĶT„R€\^Å{P Ķ\DAZ)0å˜B ģ›ŨŽĪĒRÛŦÚpˇÛÅHԊ™ĒˆĒë’Db ‰ĪeŒ9qLÃpvŗœĮ§KŲËĒÆĖ^ßŋŪīŽ›wН‘ÜWõf}1T }ਃßēU"[õëWxŧu BŠĩų¨U ™#›Rîú”vs1(oŋøĻ üÛ÷==•ˇīéÕŨũ<‹ Ės)ĶH9v‰S×K m­Íķ\k5ˆ¤ĒLÁSIāSbƨ@S­K×jÆ ÔPM‘€0h™ŋūæĢÛãáééŠëēŨᨕƒ‚FĻĐ@[CՆhĀj SŠûŽßīēũŽÛ÷13kĢB (1ŠĪ)†ĶķŠž5SESD$D╎3 IDATMĘŲ0+ÄĻd -2*ƒ@@nhM\ŽT Ô@›´Ę!DF^Ќ>0DÜ]Įĸ!ĸކ%WáēœÄŨ>Äõ[ÚĖP@qUįrĒ6ã" TU]\ĨƯģŠëģä=œ€ŋę$›/ņa›^‚ ^É;!ri* +YM:n­Ķ4Mc ąßīnonnZkÃ04ĩË8§ŽB!’(ˆÁņxã”W Ґ€*1īvģZg 4PCō´Æj™Š!bÎ1Pä1’„Ö*1Áį‡Ÿ†oΎwûožųÚ3Ā201k"¨ûžį7oĻyØívNú†ķǁėŒYt[d7 .Ŧ˜{ŧMЃWÁ´ &ô3I/bˇī÷å„\•™WQ$&ÄĻ*͚‚Z3ƒĻ @CāįynU§qūôéĶa×ßß~˙ˇįß~÷ŗ_ßíã8~õîũ4M0w1f$ŠęÎj^8Ę¨ĩ Ĩ”žÛ™ģĸsŒ‘šéeœKĢÍy Žų  ÍjkĖbā7¯^ņîI=ŸĪȄd‘ƒqhLJ@jhjڜąwŗO}Š}Ÿģ]Î)"kZįƒ6ŅVjmuÚJæR Ē…"GhÖ P­Öę; EK)ušK9BdÛ$ÚVã)€ÖDÅŅ6 `jØÄ 54Rđ%ŗųw€ĩúB|Ĩ ĄÁIū•™]ũ€,‚ôH°ĮAE 9šÉŗĩĒ€€Ļ j¸Ô§ôr˝Õ^í]ņh­ÅČ1˛*cŪYŠ*Úú*HĶįqŦúBUņcģ”rsss¸šuÔĸķS×_ÆIÁ¤‰ˆÔB‹,?ėēœû2ƒĀēŊ÷ęÔЀ—QB ļß50#W*C”ÖZkŗ´šĪ2"ĩO§}ßĮėWTÕDŨį!åŪMPēž÷Uūūx ĸÖĘ&Ī_k™Æ‘!úÅQ pĨ4t*Ŋ6ö¯ōCpĨëīÛ×ëĶįŠÖâ„'ĖDti„P@­*F0´š67ŠĶo˙şŨŪ>öŨūũ—_åœĪÃĐ÷ũĶķƒĩCh­`™ërĐÖŌPÄTÔ´šÂråՈh ˌ¤ŪxJ¤čæ-Ŧ¨Ĩ–ÖŠ+˜†ŋüËīžũöģwī^×yžŊŊũŨģ÷Įûn¨đņņÜĒ?ƒSāSfxsčSÄ.Ϙ€ ļŠÖ2i-Ō  (†ÅŊĖRJĀą'¤"MĚš4Ķy´)Āa×sĘŅ"k! ˆlfĻPĩŠŗĢ›‘Ąĸ€)ÍÉc A_ö%ˆĢ°%‘j_ÂcŖíü"ģ:œr­€Œ€­UW7X÷ĖÎkG@ŗĒž€ĄIĸĢ+ėv¨˙'zW áE>†V +]˜€/`l™[==_\sË6ÄĀ0ÆÄĖŌTĨSČ9ģ"d+e˜9t)a@É]$€ËtI!„Hmn­4CŸLI3bRCRAĢdbf!ĮČĖ­ P }ß§Āįķ˙æ7ŋÚīúy´č`^–ņˆHũîĐuÉCÎåŖąĖÕĢ\‘åIpˆ‡îāÁiĢcˆƒ ŊdÛęa#G;l[œmüfĢŸŦ—n!ß5 12kMM›HkŽ72Åš–ŽëŲ ƒŠK¯úŠ–Ī]×˙įņ_˜bSĶf¨ŽƒĖ“S°Ņ@TÚÜTU´V˛Åí(qŒ´ˆˆX̆hl ģäúz¨ĒRË\ë,ZßžyŸģžūf? Ã<ˇžßŋzķî믜>üô°¯6T­ĨˆÕB×õ‡]ŪEčYȚÔ֊€¨hÕ& ŲiyŌfÛ"„›äĐ*šNeVŠ€ĻŪY)˜´"Ēf˜÷Ōe TŅ™ Š rĻ(€ĻČ1RSæg " ";ÍNÛænPŊ-]¨Pū•ąIˇpu΂˙Åu_ fÂDčÂ>ˆęė@/”PEA ¤€[8VAŽļĻ[ÁöO†ĢŽ´ūZ+\ųšúķxŠrPĸĢj¨ęufFU¨UĻéėSMæ >åfjh-‡RČ}ŽÅĤiĩ2mžc&FS4e¨­43f`ĢssŠ”ię:DE63Ô6O ÆéŌĘø˜cĒķÔĖĖi6u Āzīä{?REǧ@eæĨ%_7Ģŧj÷mAWÍ šâHۍ{ũ–—’ØÛ]Į0úáv¯ū ã8!æX›žĪ7sR ÖڏB¤yž÷ģ#Į`f÷÷÷9'Ša.9QŠz9Ÿk­b Ŧ–2u}L"ŖŅTĻ&`žxŧÃį‡3b !0› )’%dˆÜŒ- €ĩVK™š"Ę1]†“hĪį‹6¸š9ŪŪ t8Ÿnî_ßûãũũãyüôđxēŒĀ&lJ *UdŪ[ü`cJS™ŊšĒĩĩ"ĒËöøøĖąš™”Ų@bŒZkåUĨ ŠjmēՊ9˛åÜA0d dāNs†hF .]Ušē,“i—,‹äaėÛ !ŗÅ^ũgؙĩ˛rd‘yoj )ˇn‚-yÂĘËPķ%“ęrü‹TŠj¨(h AArė ÕûŪíOįˆ:ǍžøŖŦÍęķŪTDv‡=Nķ<Ŗ™ˇĩ>…–ãņū|~FäÃaˇÛæy,Ĩ1c)c 1îBŋë\8ÆÛZb”Ö†a˜į9Đ☜s–˛@áUŦŲ‚ÚsĖđ6˜%‚­÷>yŋënož>žLÔĩ¸öû=:'Á ‰–ú<ĪĪĪ^îēhßīûžŸĻ)F‡é­ĩyŽ­i)tRÕču„ÄûžzzēQwÃSUC+MKŠÛ1į›vīķCHšO&0Œķpyæ˜Í`œGPčã×ßü†™§ŠėvģĒ2Žc8úÕûÕ¯îįšüôpĒE|F­ÚBŗƒkß×*Ölžë8 @db ŧWm"ˆŽĖHn̈́Ā)…ĨT4‘6—6Ä¸ëēžĪĩĘ.Eūf÷÷9ėS˜§ŗiũâËw*íÕí],ežÎ'”zčc&ÔyÎ!ļŌS.† 0]æĻ˜ŠĐTl,6U”j—"ē hF@ŒbÖŒŲˆ(&å@ĮCŸ˛Õ}G ęl‚å6Ĩeoj­ã4ĩZÁ‰ņîæ˜cS‘Æ„!2˜•yęRÄĩiTqė§Šš­ca¯lpVĨÖZTũØöšļv9Ģ.ģCQiĩ”ZŠ´ęxü%Cš™iĨC\ˆ@ā "Äūŧ™´Rk™Žû]ŠÔj)ԚŠs§Õ“17‘Úš¨ŽĶtēœßž˙ÂĶą ‹6i Đj)ĘRâ@@ŒĒZ[yķú5 —‹Šöš—*e*9fFžĮIšÆÁ –jbŽaÕTĢ›-æĖ1RŒ!įō\rį‚ˇ÷ ÄPĨ”‰÷ģ}—{Š•_ßŋęr×jŠĨ !¸Î-"0#Õš@$fC4ĀÚ‰Dmš‹†˜IĒ>;G¤H1Æd*ã04­j}6fF„c5ĩ&ÚDKŠE 9ŒEĒØ0Węö7 ātžĻĒũÍĢŠĘT”sNŨ8Į{ŦbN褞ß!q3+U§yžæÚŧœ3ãĀš‹bĘ=qTãÖtįË0‘JZt‘:C DrIEFƒ&"b€CącŽunO ˛ËŲZ•RŽ9ßß"P" ˙Ë˙ü?^.§áôđüø8—7o^ƒļƒJ™‡Ķ<Œ`’™ØĖįŖĶ0à JXŠ``ĸp™Æe5bbĻ´?ĊhŦh d(`„$€ŦË^D ͛ü ‰ŧdA@!ߤ Ī|`ŲŌš3 ˛!YXäíô Hä} Åe\ą°vסÁõáĪĖ<Ä`•>ęēŽ[ ĪįķuSŠĢœĪéņÁ‹=p…ÛŽëRĘĒ jMË*N)Š1nˉ­õŨöxå†RĮąÖĒ&.6`f.<ü¨j“ŠŠHBpŊõqsÎģ~ŪáOĶ",čŖŠÅå)đ0Ž“´æũĻ0Å smbH!…$!uČ}åē )§ËđņĮŸJ>}úôūíÛŽënö—¤ŠÚjiuŋßã*šĨho2CˆfËÎŲvŒÕ@Mĩ‰] >ˆúÜû˛Äĩ/‰°Ö:ÍåáiTÃØeŸĮbˆ™¸ĩÖíēZĢMMÕÎĶ,"ĶģwožNŗQ ]`æŌšTÁRqœüû%ĸ”ƒ×ĒSаJˈĸĒĸˆ˜ęÜÚËw‡@ÆŦjŠËčj5S_oÂHŲĖ@mœëeœŨ<’‰rLljĩĩiüūôô÷ŋ˙÷˙æßü÷)…đÅûˇĨ}ũđéĶ8]žųõŋ@Äa:JΧËķePCJIŒJ“hM‡a¨UŒI00ĮaĄ‰‚"B × kåųf†đŌ–lĄBKv]âuaØŦõĄ-2> `Q„ZG Á[ˇD°*˙áb"øŌĩ^UČÛgđ'ˇŨ)­6Ûpķų-\—… Áņ̝jõĄũŌ2 ÃāÆįÛm88"’VōâO‹ą hzb/ĨŌ"lŗŒ"ę“˙„>tņQÍ5n\é‹ĶU4ÕF)Ĩũž!Ô*­5C !´Ëķ2„°ąaüˇö'[k8 ‚:úīéááûīŋ> 1Âųųųë¯ŋžģ9øEđ¯Ëyq‡:BĐ'ˇÛÆU.â'Ļ -¨2’ËAE5Dw^VAÚԊ4až ”VK{|~BĜûišö‡›ãîxH)ŠÂ§OŸJ9äiŌZk×un!ë;Ÿˇ/P§u˛°|›ĶŧŨĢ>e_ĮŠ$"­-vx!„DŽã‘W+áíRÍŦČdĢl*3ŒÕæ.Ļ}ŸÕĘÍÍņíë›2>|w9?ÛŽ¨ŌĨđæöNk‰onnCę`.í|™.ÃÄ1+ÆRĒfĻCN°ø|ÁęĄnĒÚõ=€ €1.¤4üg&,/›É­={š /ŋÚ´fÖ@Å_ŅŠÖKÚĻFlK/¨N7xy5ĻĢņĪuL^žíīû§Úånûœ°Šå€ß^ץîÉ-N)ô}/Ģ}ŖėۊōĨÕ-ÎoâYW‚ˆChCŪ&Ÿ›ķ #.VÛ¸ÅĖbŒĪĪĪÛĮÖ‹™š˜­‹-u#šCdBBt),‰Ū=>Ŋ4ŗn‰/üŋjctr×1žŋŋīúäŗ.]k=8A-Ĩ$"Û.Š_o’=€UÕÛZĨ.Ļ­5Ё°J#ĸœsS)ĨųŦ!„ ëäÉ?ör„Åpš\úž‡V§iR…RJ™Ļ `šÔļų¯^ŊÚæ)ۊģÖ:×FÛ}SņXđˇ{šÉ›,ˇÕõfĀ–×ÔÕ70ûĩÍ!‰h=Ÿ XÛuáõëˇ9Ŋ;w)ÅŨŽ ņSÕq8?>=vģOyŒųøĶãå2ÍĨiŽØÔj“f™ī;/c÷W Ģ+ģŸ9ÔOŨ$đŸ W¸J­ËŠŌ3įĻKmŧ oҌL”Đ˜€ŧņ!¤b€ZkĢ*"1‡eš/Į ¨ŧ f~Ž?KōWŽ„xå[ĩũ|ŊGŊŽžžžx{„„8ŧXEˆj]lā\MÂē´sũvŽAÁD‰81u3ИS\GÍ@Ą65üĨŊ­JÂye/¸­\ŅbŒuuFŋ– "ƊfVUX…EhĘ2TSļŪM!ĶÁēž{û–bŒÄqįŋ˙û?noüÅonīvû"2Į§Ķ¨bã8š™Cķ}8wwį›ŦÎ ?ī›l=|gD$Z&…Ē*MÅģ¸é¯ŦÚfū§r œâv([kc›_ŨŪ\NÚ$fĘ92Y`;ēœķn—C@ėēŽ úžĻqžKėb|x|‹…f¤Eę<B ¤˛čSģm–Ųâū:Ī3"2"đ? âųY¸ūĶŲՀl…ų-4ZĀĨ 5‡Ņ !3!nR Kąęš5¯ÚōF/ĄĨ¨˙d1ŧ…ĐvŖø*Κlzũ¸>t^~6HŠsōFšķ˙Ũ“•ũēēaÃT+*fžĻIVwI]Š*[´#kĘŊØ˛ĸđĻÔĩ3œĀē2[,ØR ´h>ŗ­ríĮŅÚ¸äįŽ‘]Â×Ķßzƒ(ØÕÖÄßNZķ[9įœC¤ŽëŅĖ.—‹÷Ĩžic~Ađę•įí–lˇs9]îÉV"dSES`æyžįššDĒĩÎeŽyWĢ”vō}üôé÷ŋ˙ũũ›ˇĮãą”2\F_Ø Ã0 Ķëˇ_ēA–7‹ÛēC4—HŽ×•ˇąÂŽĒJÄļöáËQnhĻ d ×íŽØî%f&&”Ö&ÕÚõņÕŨ16¨ã4Īe ļËĐÂņ°Ë9įKJi×ZUĀ¨ÆŸ>?Īb@Ik­ĨY lČmĩÚX8yĖB(ÕM8ÆûO‡ëō;ü<Q('Ŧoë"Î+^/8\Ÿ€B"ÖLÉŒĀ(„Č1´Ö ĀdōōŽēį×$Ŧ ĀĒaËųĀ/~ĮÛîjk>ņ+ zĄøK–œ­r¸›œ˙VŨÍS߈Č0Œ¯ëû~šfßé{=ŦĒ! 7}Yäzz^õüā×ÖąbßĮBJŲkZßÍÖZŨÜšļęĻėļë—ułT^!A[ėW`ŲĢė÷ûZØĖrÎ}ʈč\åárņF×ë[ž˛ķ#×ÔVĢŋ°[Ěš ‚[ô˛™ē_ˆF6–:ĪÕjSDl­MĨĘy>‡Zk-˛?y&ĸS†ĩ‰›Ņ…ũņöxûēī÷ûŨá|>ÃāJËĶ49SgÃc,Æ(ËyņR—ŅÚ^™Ųĸ/éĮĒu ×Ģq B3mŽ!ė‚;1§ī˙TËĐÅ€Ē ˆ2Z Đ:aGg]ˇ€á~ŧ|÷á\ŋē :ŒîxiM!s`~ĄAšƒģ:ÖęqŅLt‹˙ßĮĪ*ŸEûPŅĀhŧ]~QDDRDô(2 ĸ ˛ėĀBŠ9įĶųė˙“Klš”98â˙ŸÁīÎm6ģ} ĩ”ë0žŽūņ‰ƒ€M*ķ’ķ}Qšx´¤ä)tˇÛųp†RJĢĩĩĢΆO8ŧõjÖÃOũ˜ēįįsSņøŒ1vĪã8ęŦ‡ˆÆqėē.p´Ÿq˛×z_0ˇˆ˜SöOâņŗÅ˜Ø˛2<\SJhËVVO=U-uĒĩvģ7oŪô9~ūüŲ?ŧ‰ËG1Ā Hs̊K)ū1ŧ÷^ęI€~ģ´„n1,eöˆoĩÎķĐtáŦ61īœĮš(\|nüõ¯~ũôôÄ1ŨŨŊōåķ0•ËåB„e~F ķų|š\ÜáÎMÃ6ļû^ā8röĨ.ÃeîĶ4yu}U>Ŧ@/ŨŨöĐ"E7UC4“ËåVßŧ}eußu)'B°ÃŽ;vfōũw?Leä˙õøW1Ļqš§qŪīæfŋ˙ß~zŧPŪõ‡ûfxf3s\Tbė#J-ĩļĻBČĄÍÜīļßīįyšĻŠīskõ|>q☞‰JkŌĒ´ ĻL˜T˜Š´cŠÁ/ôf÷ "ī¤}ũģëûĶé4—íR›ZŠUUKĢÛ8mãn=­ŸÛõlĨ‰káĒĸoSÅ,åütē?ŸÎ€|ss‹@"VZ+ĩšsā”8DĸКP1äÜD§Šˆ¨  ã%7÷“íęų‡ô&Å ŨZkŠ­Ŧ'ø4Íö‚Fö9Ķb6+"ĻæC•Ļ"ĨĒ(æā|5U& …īZK™Z­*ußÅ>…œ‚’)h#‚œĶĶÃâ8Í|ķę9}øņĮ÷—õ0ČūÕÛw_ūúæÕĢÜíTę<Qī;Üæ.`^ؐkiÚ ŊÔs’ˆŦ P1]ŗuĒü‹k„ČÁÉj`@æv^ĸfD!ĨŽCŽ]LĒ5ĶąĖLĘîė¯CäYÅ?›'ėēw­ÄŽßŽ\~‘ķeÕŨ÷ƒÖÕFĻi Ģ}Ģ.šƒËō…GŦŰÛ`#â8Žž?Įã~ŋŋššyzøėgÁæ é+“išÜ[ČsŨår™įŲ†iö‰”­r0~ęßŨŨG˙ āOƐ˜ãápĮĖĩÎf˜bž§ō§?ũéOúĶī~÷į.íYJSՔR×-cpOt>ßÚäTŽ'mū#v=‚.(ŋ&DÄŊ4õ2aéoE1į< ÅÅ8SVå$[f°v"vEîÉfFîŪcfß~øĄ5Ŋģģ#NÄYÄŸŸž=Ėöû}ČŠīû32 ãŦĒįq˜jķž†˜sÎËĮØ$ tŨ{yžn1RJ†ËV˙U†áxŧŊnŽˆČīsA\vUWV3c—42\Ôšˆ€w]lŅ“.4†ĒRęû÷ī ŌĶķ3îōé2ũáūđŊ€Ÿ?> íËąŧ{÷.§ĸj%¸•ž÷uKw‡Ģ6x5ëz‰ ÉŠQęđŽKéŋHžŧ,6‘(záäč&ä€hR uabI3U­Ĩp´ Éí)3ģL333EXo/[ՆÖ9_įušëĻÅQÎ{-/“ĖÜŌbe´{}ãsZƒ”‹bDôŨLĖŨb2Rę0ÍĒJ!îĮũ~/ĩäœcJĶú(Žk ÄČĢŲ´ē7ô2&°¸#"Îöö4åĨxa×ī‡ģi,—ËŖĒžyķæõë7ķ\˙đWõ篞īîî\ė7„d†"ĸŽa~Įlqbh@ˆĖ ŒĀ˜9Q ÁÃõē˙w­PwĶY ‰BŒ]×iŪl‘ŋ…ëõˇ°ƒ×5 š!‹˜ĖĨ•Ëô|:§”b„Ú$į~ˇÛíŽ÷ø6ƒiŽcž[U‘2W1UÕˁ98Ųjíķ‘'p›OŋČ+t1đĪš>°NjV(ĸcŌÖ:ßˤ*Ž=vĨŸÅÃŅņæžî„ĀĖ‘ŠK™P Q™8€Y-“ŋ~xæŠH—ķTõÏŋ˙ôYēƒĀ?>œÆŲĖžúō=!á ú|CۚŖîĖ­.ŠÄččy‡Ä/5đļ)ôĪK§žŸˆČÎ/Օcj@€Ė1Hks.ã4BíĘYš€mipi;ÉũŌá6y&d´*ŋ˜‡Ŋ4ž˙ˆ:ƒˆaŊá\÷ĀûĪãįΟģŽs…^/ŸÆq<ŸĪw¯_yĖxQ7 ƒˆ8ĖÕĄKē"WĪįŗ™u]īaæ›|‚ˆ_ÁŧX ųĢĨÜ-kĖu‚åĩē¯pŧ$žN€ķūŽ5×L¨ß˙Ãá°O9ŧ~ũvŋ?ŪŪÜ1Į´dƒŠÖ:ķFëŋÎxžcņĻDČįĶŠīŗĮ§ļVoøĨôpÕṴ̄|õęՏ?}úüų3ÜÜÜx[ąâļd W˙ĒÖSÉÄĀ•ÂRΆÔDO§Ë0L)u}T…įįg÷o)ÍšŖęņ3‹Šy×_ôöŽ~'øņęãH[Gbū5ŠęÜßĶžī]˧SÛo!*ķT‰yiƒ‰ˆ‘|l´j@ĸAŒœ#š‰hÄ023/’ôĪĪĪ"¨?ŪÜoįÚūøíg„žĪķe~> įķEj1[ŧ9–*EŅméLlu‘÷Q“ ų:‘“!0Â[p]WÄÃJŗđoHDĐP”TÍPŊfVm̀ˆ‘BDjfÖTԅŧ]æÛ%q›Šˆú€VėžooŨd]Í~iNģŨ"Û3Û9â5-ŽlißmlūT^ņ&pš\ÜČÜ'ĸždēŽsą”ŌÍ͍ËyΉˇ7Hs ũŸ˜ģÖÚétŌqWėE@âMûõ1+D.eŧf~jM>ŸrŽģŨn¸\žŪŊ{ķîŨ—ģ}—RĻHÄ8sÜÆ?ס/Ŧ‚ WąĘ"VJY´uÖIīrM[k ÍīŨč‚ ĢaŠ^‘%ŽßČk‡åØbnĻfā]kS1CSŦUbʈH1äŨ>v=PĀ‹čX*S)­ļVë*[å=cˆ!FŋŊ‘Õ^ôœļ_|2ŧÕŊÛgsŠq˙~ųŠīŨÚ ƒOÅÔTD"ō˛ˆōėæĨžĶIĀ Ā{”RŦĩ’U$dˆ‰ĐĀå@ĩIØnĢ´aŦüîÃßüŨÆI9ÂĨ@€.%§b´q€¨âƖˆĀQąĩ@ũŋ™ˇķmŲŅeÚV¯>ŦāŲ”’)÷Āų|ĮŅ@EûĘfŗ=įļēŽ;Oķ”ō8§‡§ŊÕB@.ļ]Œ ų Ēž0MŖ\ĖÍ-oČ˛DcM¨>ĪĐZŗAÖ xŗs"jšæx<ڋ´”ėx<ūņß~˙íƒŖØ÷ũÃÃĶáđôø8ž~sõöíĪĮqôˆėĀ:ĢĒĘ9€C@ī´€Qm­¨CđdęoĐvÍų|6Œ­]!5|Î-ŽƒķM ›nkéÆáp°ېŧš„רk?Ëj+îWLÁŠÆÁ­vID´iZ-…—+Ų4 /‹´ˆ0"*(úõžVÁŊZ{;įŦTYĐ`ãŦĨlõeö~W4Á‘sK- ‹+ÄØ’Šˆ–bĶÚĻīŗÎiŅ"zˆd÷š@6ē5i#ˆø˙ū?ūņ¯ßū™3o7Ũõn÷æĢ¯N™>žgR‡jeSįP‘ĸē‚DāŧÍ/)")ĄØĮjäl!Ķ"x&‰dX4¸E¤eP@!u‰EŠ(3$fMŲ@H“"ô!Ršfgzč÷žm{‚ Ž ,*ĖŦ$č")‚*ĒõuIH˜UQŧĄŅ& Å]? jƜ…ÁyB-ŠL9ÅŽGTĩõ!ē|Ķ Ō—ĪŸ>}út:†aøđáÃ8Ž ×`Uû.9gĖüœÁÚĄ1žĀÛˇoßŊ{÷áÃKļũ…ūu­`U0˛(}<ûž70ÖBÖ~ŋ?eģϧitž^žŲŊyķęææfšFīÉ{_ōėõm“s~x|4ûņU0Ķ9K\cŒ•E̐…ˆd.–n8įB‡ L„mŒįņØų`¤Ŋ÷c×u§iô+KUií*xo=XQĩ?hŪ<‹˛Ēđ2,‚Î;%Sŧp.8ږ(į" ΁€ĻœSZÅĀ*9›Ū !Äč¨0;PõŅÁ: kaD‘”Ō8Î9grΊâ”ōøųŗ÷^T‘Č–žXĢ?įLāŗ åDdYû āP ŊQ"@GDA”É–#’SgöēéZá,…˜ŗą;•ˇÃŠîËį‡"tÕuonož~ũâÕMwŗ ßŧ}ũōåæŨŸäëo~ĩzœĻĶU^žžKf†‡ũņŸ˙øį˙ķû}˙ņ#:jûvQˇA( lkÔD•\´]ĀËۂ7a=įPĮņčnnnŊ Š8ÎŖQGŠŠ°0( CōDÔ­BXÖ˛"į‹Ú—Ļíē~đ>€A.YUœ#›ÍGĸ}Ûõĸ*Ŧā] MĶÄօP˛ sŪEC;ŖwÁy7 WsšEpØ ÎÅÃéx:M.øOŸNᓯļAôOß~ûũ_ŋũîp:ÛĐæūpdQ@JšäÂĸĻQ…E|ˆ>DBãEãrBɅHäClÚŽiģÂ|<Ļyö!öàōŖŽ­E\É4Ön]˛"Íf×Ûfh} !úÛÛëģûÛ6ÆŽģíŌôôøE$°pnšp<›ŽiÚ¨€ęŖVöÁĨŸ§ķdYōé|Ę9Qp>zeeQIiĮŅ;g &TA‰PYŠį’s)€€„…ųx:yx<Į\ØļõXš'ĸ0—4•T´åižæ4 ¨¨°°säŧ'#â"–”œ@Œ!F¯’SžŅģ~3¨:B"¤ÃîĒßmûMÚÖĩÁ}ūđ@ēŽõĻqŪö›Í՜’sŪo_ŧÚõí/_Ūž}škátzü÷âūNãí¯ŋš˙ŋüøūũûŽũpåÛ@.Äžy÷ņáĪßŊ{˙áép=¤\ūŖŋŊŪĸŠi… ŠÁÂsYHy˛ė°ocBeG>Qg(ŗ‡(¨Ö\c\ˆˆjtGČŗŊO(°Œ8]xN¤´(wĄ[Y3“JYZN%s)e"š`š§‘hÁœĮÚPŌƒq—qŋ<îįy!ØÜ,ƒĻ"ŦY”–aÚËŦ>Ŧ}jžīû˛l1œ‚*×>–ĩ7*š*„°Ûíŧ÷ĶēĻՃ+ŧdô#ôXŠ3M9÷åá“ēFš´]üúo~öŗ7÷Mp…“LőĻydΨ(%įœį’MްrŧĖ0ŗą­Ĩi¯Ķ¸īMė!„ā+Ë끐”@MÍÃŌ§"Ė.Ĩīß!4¯îÛĄu3žĪ{D ŅÃ˛Y‰×ōDE„s>ŸÆčckС*Žį)AfV[ÁˆˆDF2įžcũ;Ŧõi ë@Û/ŧāđē§DŪûyʀuuĨ[Ģ$ xŠUEë %(ŠŠŪęĸЉØÅF„ËœŒ‚‚ĶEõFQmv Ė79BÎytG$E¤ļīĐQlģRŠÁuŪkÉ(sƒÜ8õNEķiNŒĄéwüë_žÁ‡ínĶ7ąˆüđîÃûīß˙Ũģ’āfK40Oo^ŋ^&É hR5Yī°°>Āv$"š‡zr9§|ߡÂÂ\Â3÷š˙&gtĩ^CņŅ ¨ÖĘA­?[Ÿ§hÃÆq4&ƒ•.ų@V/UbÍ bË6Įq´JĪ­ƒ55Å fâ%ŧ\s]ûÁívÛ4ļŦq,%+s)Ëlš•FfŌõÉ­žrĢ2˜^ —¸Ō ʲ]Č6ÍåŦǧĶéũ‡Ī?|xĖĖ?œžöį7ÃĢ—w„0ĪŖiÛĒ0"l†%…N%ŗˆßÚ˛˛ōė’Y¯)…‹΄äKJ§,ÂÂ%„°Š;S6…b€?ũņOO\rđŽˆržK)!Ķ=3…*ˆĘšJ9I‘Ė9˜9ÍŠ[PbxĻ"í Ô ž–CB+ˇšškõž5Q}îų/WXˆJž„$œ‰õ —ķ+ÕČŊ‹DÎú°čF8›ĻpÉĨ(:2šŽˆh‘âÄčŖ§]ŒÎ#!¨#24Äî‚Õ&Öís2ͨY§c:?]uūõĢäå‡÷ ēííŨ‡Īûũá”sŲn¯å¯ųëq"pRōÕĻųŨøģ_}ķ7(įã~ú›¯^()ØĸS g“ū‰=C ­|Tī0ĨÉ9ėû^X4zē$XV{‹vVE§Ôû¨ÖR3œˆŦƒ&—ˇĮîœ÷Ū-ÖŌŦãŅëꉷī´’ˆŒTdŧ" \†÷\ÚaũX/—[Gįöööúú­Û41Ī3ķÂÁ0đŪÃ`4`{‘PĮ—ŊĪiŽŋ̚+3[a Ķ4D<ĪķÃĶaw{˙ōå̜ĶŠÜŪ´/îníįēž#DUņŽšļk›eÃw.KÃÛpÜmpÔŧ†ŦŖæū¸"xį'-œŌ$…ÖžˆäeYMNO>|øøņƒ‚ĐÍ\LēcëK9)œŠ¤eŧvžĶ4M9™0"Ŧu•ąÔÁÎCJŗ^\Ÿj™õU×o^Ú(ĪüGëەúã•ȇÅēŋfĨF °!dīÍë¯ļm Î{ËŖ탊]įœ@´‰ŽoBôØß*ްk[ëŌ‹ēmpÎy¸Ũõ_Ũ\ŨtØw5ÄĄęņđø9ėŽúãqÚ\ü÷īŪßmo;/œ2:Đ’ÛĄ}ąģ Pœ čÂĮG$!˛„@  )  Ŧ‚Ņ2HÎ,Ĩ*ųÚqŽK—˙ĀqŊnÁĸ—Hhnu…æ°aũøō^Öį_&T.hebˇláÅRAkĸâ:A~ų<´.Yē´a–Œĩo UDlÛv:ÍEáB[¸:ėÚŧ­<ŠBž— ;š˜q7ãš õĒÚļíËû‡ŌļíĻëq´CŸUJšē6˛0 ųœŗH1šo×̝$GcMÁ ķV—ß6^ƒķ!’ąD@öJZvĪ8GYŲŖ'ˆč›ˇ_—”?}ū ,¨‹ægc;˛0€Ûëɰt’UmŖÂŗž‡sŅ>]DÜų‚ûM뎍šĐJxŦÍ^û/"˛…Cˆ\ÍÕhõļâú°OK) –ņ)"9[ękt—qÛöõϜŅy_@˛0x$p¨R@ĄõÃĐ´ŠWtB)$đ]wŲÖ !Ø`"ēĀË|ˇoßÜŊØÆ<폧H…˙ņũËģ÷S:ÎÜuŅ9T–2žĮÃĶéČÁsß,Š‹ôķ¯^KN„ÆČE RD@ƒ…‹ĩST ‹OVģÂ<ĪÁģÍfƒˆäˆ`™Ŋ¯×¨ZŠy¸5cQį\ˆÁû¨ë7ķ*Ú`Šce˙TsåuÜåeĩO/‡NĖT,LŲˇxkÂķ"r>ŸēŽ˜UĨ îëOĖuą–œŅF+‰sqnaZ ĩP`=]ŲČ´NXÔĒU%^āÉ|˛‹cŒM÷ũû÷Ķ<}ūü‘Yßž}ķÍ7oûa(Ėû§=‹´]kĀĩĒ2K*É9ĪĢ8¨)ŧ,ÖDFvĮĩÕ´¸6ō6Ô¨ ƜmQ!,˛ 9W2#QĶvŪû›ëÛ~hˇÛíëׯ6›>įl1ošbēôä¸hÎ%1Ή\e}ÅŊ3–Č3<Ą kķ ÃÛÆ’vKjø‚ų\o>WUē„ŒRVrˆŽ{aŽkoO5•,*kDŽČ!ĄTZW×ZŠ$ŠŅœmß9$PÍķänˇÛíĻw Ūap8S)ĨíšzrŒ¯ĻĒKŖ>œĪđôųķüÂCˇ‘<–ņ €™ ܐĨP›MKŪųíæü% Ãf€Ûën74/n†ŽņM>Nr6žĢ )ÕúeØOQQ9ÛrôEžÃ9ąÁn€g—vk+=0ÆHčLĒÉBAåĘŲ[us6öŋ•XŸ×Ėšr€­wovbLCf>5ļ¯Ô[~y.ƒíe€uÎu]g¤E\‰ įķQs‰Ņ3ŗUÅöŦ5bE—ûąöŌ0 Ö 4+Â5ũfæ:-dš1"6]*Ķt•Ątp<Ÿ‡ÃŸūđ‡ũ~wûwŋųÛÛÛ[)1M#"6܉ņŗĮŅUŒÆŧ;^dûfc9s™R+Ą!oņG´´1ÔP_JŠģûåÕŨũnsÕ4aLcJ P‰É# “2ŗ |•™Ņ/í?EB[ētkä#…ÆoˇÛĸR˙ˇ2UęŊ¸ôŅvkÖR…Ö=Æ?~ˆĢd¨9Ÿ%Ē €Ë¨öbĢ(Ė"E‘ŠsŽmÛ6JIãiö„„Ú6ŽīštÎÆKLĶÜöĪÚú˛^"ú ĀÍ^ßņi:įÖënĶĖĖ^ÜüŨ ļ7˙ķ˙át„×wWãy~spĨč|įqßŧŧ’tú×?}wssƒˆŦä0ˆ™@ŧák¸ä-ę dšÎnõC +M˜Áũtõ2-šŒ´ôL@Ü.¨yĮßęû´Oíū=<<Ô\ēÂEfĖ6’zŲ'4uÂJ}zzĒf\Âe´'ú˙ĐBĒßšžž6 ã§Ķé˗ONa:D4Ā9\hŽY|3S„ĩ¨&X°šÔYŽJDU Ŧj xīķ›ŋS1KŪlˇã8ūū÷ŋ˙‡xH ŋüęģģģģûû{T\q@˯Ņģž_{%5ЅfÄ:õŪ7Ąq^ká3ÃJAp"âˆNûCÛļĒ\ &›nŧĒÆDąpŅRō”r)Âũ00hĨ%\ĻW—¤ŊNk™jÉF]ĮŅm#™áõū\:Ļz.TŌ˛0ų•$ŖØˆ8Lj´øb@ąĨėD4g.)m¸oڑKNs@đÁS<;‡Ę š3 .įœĨ6—ūˇ˙ō5h.ã!Ÿ÷-ÁõŽšz CÛmogŒŸį§s“îĪųx8=>|AT”tģŨŧšŋmˇ/ŽĮq|x|Dß´Ãv˜ ĢU!ĨpNĖl'Vņō0 ž°Î) Z\^ōŪ=GD4Ÿ!VRÆcۀúšdķũ+~čpLƒˆ–qj\†-šÕrԎ¸9ãyž ŋ­Ķd§Ķéx<G´j üävÖpVÅ3ķŽF9!\]]ĪįÂũũ}Ķ4OOOĮã‘$åŽkė…•RēŽ3č¸īûÃá`ō™Ã0į‘™Ĩ,ōkö‡ƒ9Ë*,dÚnĮņÜõWÛëëqœđûwīŋũö;tî/ų2 øģßūũíõõģīŋŊŋŲūöī˙.Mķ~˙xžO‹mo6–DÔ4žJaØa‘”ŌŸcۉHfįœæ\ÄÄÄ=‹…š\€Éq•2Mį겭ĒwÎ)(õWD<6į†>čĒČĶ÷ũÕՕˆûœ3ēu€B Ī3Ã6ėÉĖEŧŖā…ažg-Ō4MĶtˆz>rN×Û͋7ĖyN#į<įœ•\›ļ*’Æ3 wMôĀ_ũė5—9Ķ7_˙âđøôO˙ôO/îŽũ믝_P› ąiãfŗņo_î8§§ā4oÚŸC×ø-j¸i^ė6įųîãūÓÃŧšîo^Ŋy}wŋÛJû‡ũĶ—q•ËfčcÄĮ_~øøQĀ7M,ŽĀ{ÚļmB×5MhCw1zbs€¤ ŪyÄgc¨ũO{UÕŗâŗÂĶvãZnŲĪ>>>Ã`7˛fŧ"b’ĒšVeõĶÕÂ-z¨Ē™čnˇĢĻf€ŲU§~éVė*ë…ĄŅŒĀÂĩ9s+Į㞏áõöfģŽëēŽúW k–Æ[đ˛Ž;įÚļĩ1K}k´)ĨœN'ëž0ŗsP “"EU€noo]h期öGO0įBDtŪÅļ]ĸMEŋ`ÍĪũĒ„h% "rQ–ĖĨLŸÃ96äWĨEÂižį)Sđ>4FœTA´(›w›A §čtŅYVrÚ\&Y†ڍ0ÛuŨnˇŽ6{ÃáŦ?Wĩ—på$Úu3_Ŧ+š/÷ėßg[ōŦ÷zL) #"ī…”J)i÷ÕŋTĶŌ`ËũšĻąæ°­!-ĖlųBĶ4ÛíÖ\LÉôËrSHBNŗJqÎŲ žs.ļŨ͋‘÷O釟?}üŧģÚmķų˧ģģÛĻ ĩšZ‹Ošh§AĀž`VëĒöæ| !HÉ5šįäbđĄ‰1Jšš$""GĒd:!ŪûbÚ=†É0Q.ĸ*Ąu&/"ĪZYÆ-\T]Sž§y$O•ßo÷ŅÆ-ĖŊšƒļ„ÎŽ?Ž’+ ĮRbDDī×´ žE˜ŠMƊ8 'Â\đp8ŠO yúxÕá<‘ĸ'G QDÎ(r5 i:ú@€r8í7Ãöß˙ũoģžéûæņibæÍfc<NæÜíx¯ŗ”BˆYsÎH<+áĶÆ oŽģĶëģ?Ŋ˙´éڛë­M`öM|ųōĨ=ûũJ(/ļREG]?%BpQQD@X HE/k@Ë1HķlÕl–ę‰1;¤UP?„€Žŧ‹5o>5įlî͐']!ūU§C+ŊÉ`ŒqˇÛYųg÷¸ŦR=/Õ;W̚Ëcú“|Øbĸ5 °”R/-PLĶĜk§Áތ}YÅeå˛<+Ģ➝<y˙ū=Ŧåē=­ĒzīšÖuC׌™K)JŪ[Ē/@]Ķ]__ÍįķáxN)N§žocŗĩ:ĸūķAqŨDNĢڛ95$uH!,ĨJ(öĒlUãˆäûŽs!p.D|H`9ėBȅ §Tæ\Ԝ Å @Õ5\`9Ž9#"āÂ[""DãßĢ@g+^¨ĒåY6¨+îxyõĮl.zUŌZģJÛļŦ0Īyž˛G‚`)ė}´‰ôišESŒ.gŸJfæ.øĄëĸ(Ę\œ ‘ȜÆačŊwķ<‡&SRÎāēęģĢ7ąd*įėŋ|zßļŅEgķĨyfžušĻÛís&d€ŦŅĮ!Ō&øífķâÅũũũĢĄkĮĶžYÛĐ Ãõ×o˙\æ4O"=ĸį ęɁÉ9Đ*,ČĒ˸ŸęŠm"ĒŽFZf¨x|˛¤…ĻRŅ‘j9°JÂ3ô÷#?ģ+Z–`›)žÍūMŗ§š(ŽĮŖÍ˛ŅÍnks°5ÆÚešššą|ØlĖ^šhšĻs*s7l¯Žī~ņ‹_ŧf|ÜŸĻ”ŸöĮãūpjBŨũ›×w¯^kÉ]×ôm-6Ãi9¤]ŽÃáPĢ ;ĶvîûžŸĶ(…sΝ+ >zī­ÍH„Ū{Gá8žģHÉ"!§4“Ų@fíûh ‡0Ģ %ļžzšÚāĒöĀëZ×Oc×um×éJį„šrĢŧc)Ξlã8õ˜ŲsŽQaŠlŅҜØ6=į4Ĩ4žNãņx<<é×ߤŸŊžÛ\]žĻyqŲ÷wˇmŗÁũų”Æ)ėbŗŲl¸¤ļ‹>ĐûŸŋũū]apÔŧ~ķæņņņåŨõ0 †#‘ąvŖ}Ķ,ŲT.ÂčÁųf¸" Œ¸h*9Ĩi]ā,?~NķŧéÚ‹„ØOcöŽiÛ2sIJ‘iÎsĸíĩ sĸsĄqKĐ;Mŗ}~L9ōŪãķԟgē6_,)°3 ¨đ ̞ĄŽMB >k‘ķŒø›•Ō*ugIĻšąœseØYŽ/Ŧޜ°OÍ\ģŽģ|%ĩ‘[“‚”R]ømŅĀRKãCĶ4•’v۝­cļŠÔ€k;Ž•ĪĖŊ¨ŠũĘĒ e/ ŦZÖm÷xšmúĸsÂRX`JķœĶápúūjĶŖpÛ ›Í†ĶėPĶx:mËRGûí?ą \ˆčO/ķđÅÉæBfö.n6›iÎ"ĸĖmlÉã3;š|Yl{.eARp. ˆva8…ˇ• Ŋaŧãx:O77wM×3s•ƒ˛ëY{ûĨövđĸmSáģ›Á/ũΚ—†øãĶŪG !HC¤Bã]Û4Ítū”3ã8lbĶ4,“äĪ9ĖZ4ΉŊIąO ķ°iE$į9„ĸī†ŨŋûÕ/§ÃįËĀcģP˙°xŖ'dןtIMEÜ9Š0,9IENDŽB`‚leptonica-1.86.0/prog/circle_reg.c000066400000000000000000000125201506303110300167650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * circle_reg.c * * Extract the digits from within a circle. In some cases the circle * touches the digits, so this cannot be done by simply selecting * connected components. * * Method: * (1) Find a solid circle that covers the fg pixels. * (2) Progressively erode the circle, computing the number of * 8-connected components after each successive 3x3 erosion. * (3) Stop when the minimum number of components is first reached, * after passing the maximum number of components. Disregard the * original image in the counting, because it can have noise. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 num_erodes = 8; int main(int argc, char **argv) { l_int32 i, k, count, n, maxloc, maxval, minval; NUMA *na; PIX *pixs, *pixsi, *pixc, *pixoc, *pix1, *pix2, *pix3; PIXA *pixas, *pixa1, *pixa2; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "circle_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Read the images */ pixas = pixaRead("circles.pa"); n = pixaGetCount(pixas); pixa2 = pixaCreate(0); for (k = 0; k < n; k++) { pixa1 = pixaCreate(0); na = numaCreate(0); pixs = pixaGetPix(pixas, k, L_COPY); pixaAddPix(pixa1, pixs, L_INSERT); pixsi = pixInvert(NULL, pixs); pixc = pixCreateTemplate(pixs); pixSetOrClearBorder(pixc, 1, 1, 1, 1, PIX_SET); pixSeedfillBinary(pixc, pixc, pixsi, 4); pixInvert(pixc, pixc); pixoc = pixCopy(NULL, pixc); /* original circle */ pixaAddPix(pixa1, pixoc, L_INSERT); pix1 = pixAnd(NULL, pixs, pixc); pixaAddPix(pixa1, pix1, L_INSERT); pixCountConnComp(pix1, 8, &count); numaAddNumber(na, count); if (rp->display) lept_stderr("count[0] = %d\n", count); for (i = 1; i < num_erodes; i++) { pixErodeBrick(pixc, pixc, 3, 3); pix1 = pixAnd(NULL, pixs, pixc); pixaAddPix(pixa1, pix1, L_INSERT); pixCountConnComp(pix1, 8, &count); numaAddNumber(na, count); if (rp->display) lept_stderr("count[%d] = %d\n", i, count); } /* Find the max value, not including the original image, which * may have noise. Then find the first occurrence of the * min value that follows this max value. */ maxval = maxloc = 0; for (i = 1; i < num_erodes; i++) { /* get max value starting at 1 */ numaGetIValue(na, i, &count); if (count > maxval) { maxval = count; maxloc = i; } } minval = 1000; for (i = maxloc + 1; i < num_erodes; i++) { /* get the min value */ numaGetIValue(na, i, &count); if (count < minval) minval = count; } for (i = maxloc + 1; i < num_erodes; i++) { /* get first occurrence */ numaGetIValue(na, i, &count); if (count == minval) break; } pix1 = pixErodeBrick(NULL, pixoc, 2 * i + 1, 2 * i + 1); pix2 = pixAnd(NULL, pixs, pix1); pixaAddPix(pixa1, pix2, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa1, 11, 1.0, 10, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); pixaAddPix(pixa2, pix3, L_INSERT); pixaDestroy(&pixa1); pixDestroy(&pix1); pixDestroy(&pixsi); pixDestroy(&pixc); numaDestroy(&na); } pix1 = pixaDisplayTiledInColumns(pixa2, 1, 1.0, 10, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixaDestroy(&pixas); pixaDestroy(&pixa2); pixDestroy(&pix1); return regTestCleanup(rp); } leptonica-1.86.0/prog/circles.pa000066400000000000000000000103561506303110300164760ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 12 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDRBEÖ* ũ pHYs.#.#xĨ?vëIDAT(‘ĩŌ1nÃ0 PęE´f*ĸ,€]tčØ#ô*2ä6dzĖ-ĢŌĨ7Öw}ˇ—ūǟé”XØÕ÷ääIENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDRCE9čfà pHYs.#.#xĨ?vũIDAT(‘ĩŌ1jÄ0Đ1 lĸ „ š‡Ų9Ė^ ÛĨ˛ŊâŌW’Ģ-s-.ŌÚlŖ€Đd4–bö+ŧFHķŋ€ķrpWEØeÍPe<ĶĒGTdîUžežT §4‰ŧęœÔŪj`ˎ’:r˜ô*QŦéĮī¤úÂņ, īÔãé'ÉĶ`T>RÄĶTT]W…yRũFš›j-mķļŠ6šũ1Ë×*9_–ĸ§"•—Āå; ĀσjŸDÆę›Ņ%ÍzƋÎVŖLnŌä`:˛Y–­ĻŅKVJjĄŊÍtËŲsÉ>´Ĩ6ÍĒOöš7ģôđP:īčŽŋé^öFíčNIENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR>Cė‹ö pHYs.#.#xĨ?vIDAT(‘­Ō1jÄ0@Ņ1*\ēMđB.,ø*9BJCã°j{@Žbŗ…¯1ÂEÚiTOF#-9@âęaÆ ų2p~"ü#ĸ)˜ĄËĒĄåQAŖb‘Ņ.Á2īmB#ķ`oV;Á”đÂM¨ÁGC äc… đ.Tx'øÃÁÅđV…Įm?¯c,XvúR8ƍīū ‚‹į[Ån°ũPÔÜdžŧëĖÄVßČņ múĘ1ņZ0$X2V¤ūÁ*°7į‡Īæ,įŲ =™7G‚ d ‚žšn`¨u÷˜ú,ˇPĶ--1ĩ!_%¯VE‰¯CĮŗ–5›|;¯Đd å*?˙ū'ül6ŦÖčIIIENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDRGK §É pHYs.#.#xĨ?v÷IDAT(‘ŊŌANÃ0ĐŠRá>‚ŅeŽÄ 0¨‹,9‡iǜ”*0;/,Æßv‹XÉŌ“ĨØ?3´'ãŋtéJ°M+†Ļ'Ā̏f§JFĸUn ĒՋUķÆ—TĪGĘaĮuĶHe*t¯IÖRҟyĮMSSP)ZšÖĢ6Õĩ¨.ÔdˇĻ—dģ˛ģjėJU ‚Ŋn ų‰™e-\Q’Ũ‰ˇF$ž>˛žĘĨÁfŲã^ڝy”žorå.oZPDōĩļä6đĸÅß°•ĩ;7œÕåŸOÚ3aOƒvRf°õwōdZ×1iŗđ8÷Ĩ ë†cšfŸņÕ>L÷áÔīC&ūÃ+w˙üíļ/!ôĩlĒæ?IENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR>?æFL pHYs.#.#xĨ?võIDAT(‘Ņ1jÄ0Đ1.Üt]$ +å%¨Ø&+Ų¸ØkØø™íT ú;#ɐ¤K †' ßŖ?„öũLąhĒĸĄ‚Ūĸa‹ā`XôĢ7$ 8ƒË#ŽŠâ™°*$,wEŽk\‘$d#‰Ī¯„;RņōLØOø*ž(V öåB¸Đ:$ā‰p…fv0đAøŦŖUČø˜OpėМũE‡3h œ%ß*.ß ƒa2zv6ęQ:öâ´ ÅŨ`d¸vĶ'ņ\kI9X-âgŠ‹5æļA Ņ'qú*ŪĪV­đÚ3{Ėuy|~Ž …†2ūuīÔR>\¨ÜžIENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDRBBË/=E pHYs.#.#xĨ?vëIDAT(‘ĩŌ=ŽÂ0āA)s%GAÛs„• ĸ ä\…(%Wˆ• 8‘,?æĮxE6‘’/˛Gŋ Ą^7úzkĻžŠhcĘôKĻØcTŗGvĒ‘Ģ{Չ‹ÎĒ+&¯žYyāwŦ‘DÉŗ˛G^`EQ­ĀÆ´ˆāTĨ)˙˜&ä\Yw$ÖEõlZ›–=T÷ĻGĶĨéÚ*Ü[eøĶlš ‘ĶVWûÛs’"ŪPœ(؉bSYž•üGV…3öĄ&InŦév'Õō%ēņ˜l q@´É¤-^Å]Õ ōŖĢĘäŋüs^1Uīŗ’Y˙ÉIENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDRFEßÁ­‡ pHYs.#.#xĨ?vûIDAT(‘ŊŌ1j1Đ[¨ÔBt‹T]&đ2¤PéÚøŠmļØkėâ>¨TĄĖdf$™Ä*ŨæĄ¤ŅŸęO…˙R6CĄŠØĻ `šÎ ĒöDkPM\ęEčČV'Ē ZQ‘š$Ę1īâŦĸ-ĮM´Ņ5‡Ž… D3Ĩ‹hĄÄŧ˛xSҁëų‡z>ü^Žđå‘›‚Ą)Gę*ĄËU?„Cō9•ûM­Ģor]‰ŋ;ŊĮrĶLŊŪ÷JŠkŖšú­%t)áĸųÅußZ’H3åŒ'ԜŅōēŠĖmįHû6ŖÕs?Kž¯īZáīÎééãķøūōøę.6[˛IENDŽB`‚leptonica-1.86.0/prog/cleanpdf.c000066400000000000000000000206101506303110300164420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * cleanpdf.c * * This program is intended to take as input a set of pdf files that have * been constructed from poorly compressed images -- typically images * that have been scanned in grayscale or color but should be rendered * in black and white (1 bpp). It cleans, compresses and concatenates * them, generating a single pdf composed of tiff-g4 compressed images. * * It will also take as input clean, orthographically-generated pdfs, * and concatenate them into a single pdf file of images. * * Syntax: * cleanpdf basedir resolution contrast rotation opensize title fileout * * A typical command is: * cleanpdf . 300 0 0 0 none * * The %basedir is a directory where the input pdf files are located. * The program will operate on every file in this directory with * the ".pdf" extension. Use "." if the files are in the current directory. * * We use adaptive thresholding. After background normalization, the * a global threshold of about 180 is effective, and the resulting * binarization is relatively insensitive to the value. * * The output %resolution parameter can take on two values: * 300 (binarize at the same resolution as the gray or color input, * which is typically 300 ppi) * 600 (binarize at twice the resolution of the gray or color input, * by doing an interpolated 2x expansion on the grayscale * image, followed by thresholding to 1 bpp) * At 300 ppi, an 8.5 x 11 page would have 2550 x 3300 pixels. * You can also input 0 for the default output resolution of 300 ppi. * * The %contrast parameter adjusts the binarization to avoid losing input * details that are too light. It takes on 10 values from 1 to 10, where * 1 is the lightest value and it removes noise. Use of 0 will default * to 1. Suggested value is 1 unless important details are lost on * binarization. * * The %rotation parameter is an integer that specifies the rotation * to be applied to each image: * 0 no rotation (default) * 1 90 degrees cw * 2 180 degrees cw * 3 270 degrees cw * * The %opensize parameter is the size of a square morphological * structuring element used to remove speckle noise generated by poor * quality scanner thresholding to 1 bpp on images with dark background. * Allowed values are 0 (no-op), 2 and 3, where 2 causes a 2x2 opening, etc. * Nonzero values are rarely used. 2 is recommended because 3, which * removes any FG pixels that are not part of a 3x3 block of FG pixels, * is often too aggressive. * * The %title is the title given to the pdf. Use %title == "none" * to omit the title. * * The pdf output is written to %fileout. It is advisable (but not * required) to have a '.pdf' extension. * * Whenever possible, the images will be deskewed. * * As the first step in processing, images are saved in the directory * /tmp/lept/renderpdf/, as RGB at 300 ppi in ppm format. Each image * is about 26MB. * * Some pdf files have oversize media boxes. PDF is a * resolution-independent format for storing data that can be imaged. * Usually the data is stored in fonts, which are a description of the * shape that can be rendered at different image resolutions. We often * deal here with images that are made up of a fixed number of pixels, * and thus are not resolution independent. It is necessary for image * specification to include data for the renderer that says how big * (in inches) to display or print the image. That is done with /MediaBox, * whose 3rd and 4th parameters are the width and height of the output * image in printer points. (1 printer point = 1/72 inch). To prevent * pdf files with incorrect use of /MediaBox from forcing the renderer * to make oversize images, we find the median media box width and height. * If the larger of the two is significantly bigger than 792 printer * points, corresponding to 11 inches, we compensate with a resolution * below 300 ppi that will make the largest image dimension about * 3300 pixels. If no media box is found, it is necessary to render * a test image using a small resolution and find the size of the image. * * Notes on using filenames with internal spaces. * * The file-handling functions in leptonica do not support filenames * that have spaces. To use cleanpdf in linux with such input * filenames, substitute an ascii character for the spaces; e.g., '^'. * char *newstr = stringReplaceEachSubstr(str, " ", "^", NULL); * Then run cleanpdf on the file(s). * * To get an output filename with spaces, use single quotes; e.g., * cleanpdf dir [...] title 'quoted filename with spaces' * * N.B. This requires running pdftoppm from the Poppler package * of pdf utilities. For non-unix systems, this requires * installation of the cygwin Poppler package: * https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86/poppler/ * poppler-0.26.5-1 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { char *basedir, *title, *fileout; l_int32 res, contrast, rotation, opensize, render_res; SARRAY *safiles; if (argc != 8) return ERROR_INT( "\n Syntax: cleanpdf basedir resolution " "contrast rotation opensize title fileout", __func__, 1); basedir = argv[1]; res = atoi(argv[2]); contrast = atoi(argv[3]); rotation = atoi(argv[4]); opensize = atoi(argv[5]); title = argv[6]; fileout = argv[7]; if (res == 0) res = 300; if (res != 300 && res != 600) { L_ERROR("invalid res = %d; res must be in {0, 300, 600}\n", __func__, res); return 1; } if (contrast == 0) contrast = 1; if (contrast < 1 || contrast > 10) { L_ERROR("invalid contrast = %d; contrast must be in {1,...,10}\n", __func__, contrast); return 1; } if (rotation < 0 || rotation > 3) { L_ERROR("invalid rotation = %d; rotation must be in {0,1,2,3}\n", __func__, rotation); return 1; } if (opensize > 3) { L_ERROR("invalid opensize = %d; opensize must be <= 3\n", __func__, opensize); return 1; } setLeptDebugOK(1); /* Render all images from pdfs */ if (l_pdfRenderFiles(basedir, NULL, 300, &safiles)) return ERROR_INT_1("rendering failed from basedir", basedir, __func__, 1); /* Clean, deskew and compress */ lept_stderr("cleaning ...\n"); cleanTo1bppFilesToPdf(safiles, res, contrast, rotation, opensize, title, fileout); sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/prog/cmapquant_reg.c000066400000000000000000000120711506303110300175160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * cmapquant_reg.c * * Tests quantization of rgb image to a specific colormap. * Does this by starting with a grayscale image, doing a grayscale * quantization with a colormap in the dest, then adding new * colors, scaling (which removes the colormap), and finally * re-quantizing back to the original colormap. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define LEVEL 3 #define MIN_DEPTH 4 int main(int argc, char **argv) { BOX *box; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIX *pix8, *pix9; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("lucasta-frag.jpg"); /* Convert to 4 bpp with 6 levels and a colormap */ pix1 = pixThresholdTo4bpp(pixs, 6, 1); /* Color some non-white pixels, preserving antialiasing, and * adding these colors to the colormap */ box = boxCreate(120, 30, 200, 200); pixColorGray(pix1, box, L_PAINT_DARK, 220, 0, 0, 255); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); boxDestroy(&box); /* Scale up by 1.5; losing the colormap */ pix2 = pixScale(pix1, 1.5, 1.5); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); /* Octcube quantize using the same colormap */ startTimer(); cmap = pixGetColormap(pix1); pix3 = pixOctcubeQuantFromCmap(pix2, cmap, MIN_DEPTH, LEVEL, L_EUCLIDEAN_DISTANCE); lept_stderr("Time to re-quantize to cmap = %7.3f sec\n", stopTimer()); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix3, 0, 0, NULL, rp->display); /* Convert the quantized image to rgb */ pix4 = pixConvertTo32(pix3); /* Re-quantize using median cut */ pix5 = pixMedianCutQuant(pix4, 0); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix5, 0, 0, NULL, rp->display); /* Re-quantize to few colors using median cut */ pix6 = pixFewColorsMedianCutQuantMixed(pix4, 30, 30, 100, 0, 0, 0); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix6, 0, 0, NULL, rp->display); /* Octcube quantize mixed with gray */ startTimer(); pix7 = pixOctcubeQuantMixedWithGray(pix2, 4, 5, 5); lept_stderr("Time to re-quantize mixed = %7.3f sec\n", stopTimer()); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix7, 0, 0, NULL, rp->display); /* Fixed octcube quantization */ startTimer(); pix8 = pixFixedOctcubeQuant256(pix2, 0); lept_stderr("Time to re-quantize 256 = %7.3f sec\n", stopTimer()); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix8, 0, 0, NULL, rp->display); /* Remove unused colors */ startTimer(); pix9 = pixCopy(NULL, pix8); pixRemoveUnusedColors(pix9); lept_stderr("Time to remove unused colors = %7.3f sec\n", stopTimer()); regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix8, 0, 0, NULL, rp->display); /* Compare before and after colors removed */ regTestComparePix(rp, pix8, pix9); /* 8 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); return regTestCleanup(rp); } leptonica-1.86.0/prog/coffeebeans.png000066400000000000000000000046211506303110300174740ustar00rootroot00000000000000‰PNG  IHDRt •ËgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IņIDATxœĨ™=r9…QĒ –Œ ֘40& †zn0WāhŌP¨0Ö8{‡Ŋ Ž‚5ÖÜÚcʨ­ä{‰ŸúĄZǐZb÷Į 3‘™@Ķ­_}Ėu ˙nĀ~7pųn`¸|ũķմ׀+†\¯đˇ€]š+Ā| ˜ÎŊR€pîøøs“āāûv`y'tž˜ß Za¸ĸpŒË;ĄVhČEĻ1Û-0ĢHˆī;ąöÔoąL*ë¸BY˙c†n ¸LÔo‹+>Ø%žŨ•“<ˇŦ+ °ĻßXĖôĻĀNáÆl.hö@6ˇ°uŠųP€9 &ļۘL/,'°Ž rŪ60¨°ĀØ}äPaÄÄf(œ4aV8ÎÁa}ķûC˜ ˜Ī8ũEšđĨ—#ātī)4˜ Ŧǰõf—ø9~"īēŗ!˜Tæ8(ōnĀ/īFųC`’׃Â$đŗĐÆ_u+vÖ6™6ē:c´wëv@ÜąŖ)Õ1ė e‚*ĀīrU”ž˙]09ŗKE›~‘ÅĖŽŠAz†œzt›Ģ8 t Í´WYņ’|ÔRl8â„â­đ:Ęb >bŽ â ũŠÛN˛]Q¨rHR0—ąRđeĸ­ŧ} ˜Íđ˜`_úК¨ĄŋÄYņå~ŗãÍęÅHQøĨƒ[Ā˙–€‰›ˇŌˇPˆ|Ÿr<–ŗ­X1ØCt“Ž"ÉÜ|2 8Âwc"ūĀLæ"€Lāô Düž ŽŅT! ž~¤‚o¤nÎ9•r#Áō‘ ū†€ŧÕē0BLė}œŗˆ`Š€O0ssū3~‘wŖÉäGŖ[ —'Úđ‹ž×Q÷@0—Eß=ē¸-Žq|î—Ļ-€¸ī.ūŊ5’ øŽŠQS?ŽīTAŧų\ņöœîģƒBŦŨ¤Āéąâô“*‰‚?3Ŗ^€ĸPŲAĘ16„'˙ų‰ÁĨžšX€›ZĀ“A pwZYšXŗčr<$ū˜5áÂ5EĄ[5jē…9-}rh5éMØ]} š.)Ŧ~Uā’ē'„p“øĖH8€ēhJ;$aŌ$ƒÍËÍY¤l-úCD?"œj…ēčŒxŗSļĻ  vîús͝Øz ėV€y—ėĀ´īž Đĸ°ûūģ Œ;Ū€ÄįO€¤°ĘôÂūP)āgw¤UČĮ2Ä{*ÚpĻ0e… Y°=SxdšpĒđ3‚ÄęQA€WĻZŲŌQlŲoPP`Š­mXĪ?kÁ ›ęiČęĩZQëi(°hŅ – ŗœá\ 0l–°Ī ĻYũ# ‰nļQĀրų nwĀ’ÕŦIáļŪB8FÅdan,,&Āũâ.īˆ‚#ĐV€4‘.õ[<€feBĀ#­ī)íŒF)ÖS8n úaÁæ@œžm3Ŗ´åļR ä‘Ęē' Ÿ1})Y1úÂŸįmtŽŠū]€s˜ˇ– ĀÁŅ­;?Ņvé׎Ŧ;˙ĖR`P ,]RųL¯W9Âø{ļ(3Ds´܏&=^clcŌßd ]î h 8ž˜ĨäußpZũ°‡›ŲĀr|§›Y :uȖŒŋõ#ĨŅ}’“˛ÍŪ$ĐXtᒁË-ĀmŦkĘņeLĀÉé>Îôb€ŒŽ%ĮĸéĮŗęuƒGn´[{fw‘†k å Ø/]¸Cš|bëxjā#˛Éo.ē9›ļIŸvÚŋošĪՋ"8Gœ}ɀįÍ2ĀãBhLŖį¨‘ >§ä ;ņjJt  _ymeõÔ"qÛõm ôzũ8MėmûEր;(Š™¸d 6ēWÜ˙Æ–C´X øŗ´ąLbâ ëķŊ2"§Ņr@`ææĩPZ­8š9­†ÛõaŒl¸Xipo“‹×‘­yŋęmŦŲ+6÷–c1-‹TT°¨ŲÚ'Āz4)Ŧ†íqĢÉčĩ×ķ¯eÉU€E’ÉŌi\ /ā­i§E˛ô­>7'ŧĢäUõør C_ÆķWõ„oÖ xÄĶĮҚ5°–[Ú ËášVĶ- •\ōl‡˜č* _MiA Đ.ĀW}Î` —`‰qyŠ6“ŊnHfˆQƒ%ŽQULņ îÅėZ=Ā̝Æū)+ũ[Đí/jĖ7ÔØá `ũ”ûĪ“¯elíée–‡VĻáôëGÜú͝ļ ĀeÛĻČ90ĀĶŨã™B¯“<û•í(ž5¨€Nī(N°ß˜žt_ūÍl'͌ĮutIMEŌ‚š_IENDŽB`‚leptonica-1.86.0/prog/color-wheel-hue.jpg000066400000000000000000000170041506303110300202260ustar00rootroot00000000000000˙Ø˙āJFIFdd˙ėDucky2˙îAdobedĀ˙ۄ         #"""#''''''''''     !! !!''''''''''˙ĀÆÆ"˙Äĸ  s!1AQa"q2‘ĄąB#ÁRŅá3bđ$r‚ņ%C4S’ĸ˛csÂ5D'“Ŗŗ6TdtÃŌâ&ƒ „”EF¤´VĶU(ōãķÄÔäôeu…•ĨĩÅÕåõfv†–ĻļÆÖæö7GWgw‡—§ˇĮ×į÷8HXhxˆ˜¨¸ČØčø)9IYiy‰™ŠšÉŲéų*:JZjzŠšĒēĘÚęúm!1AQa"q‘2ĄąđÁŅá#BRbrņ3$4C‚’S%ĸc˛ÂsŌ5âDƒT“ &6E'dtU7ōŖŗÃ()Ķãķ„”¤´ÄÔäôeu…•ĨĩÅÕåõFVfv†–ĻļÆÖæöGWgw‡—§ˇĮ×į÷8HXhxˆ˜¨¸ČØčø9IYiy‰™ŠšÉŲéų*:JZjzŠšĒēĘÚęú˙Ú ?īųŗfÅ]›6lUŲŗfÅ]›6jgí4äúõÚm F›Âiwßü•Ŋ†W›6,8Î\ĶŽ8Gœ¤h ČDY4zw<đÛFĶ\HąDģŗš ŖæN7™ĸi ÛX]ÜÆĄ™jžĶIŋZdv_Ŧ^L.ĩ)~ŗ:’cZqŠ*íHcЧúĖ÷탴Ųá5!”:ø&÷ōČëũŽ02 Q˜ņåŋWõb#âZđg†\ãôo~[„Đų‘Á Ō/˜xoün2˙ƛiWßđ0ōŗfŗũvú†›ũ.Oøˇcųxw–˙ğöĒž˙ƒūĢ剅@ũ|+Ķā‡ūĢf͏ú6íõ ?úY˙ůåáŪW1×ū•wŊ* XGüÎũyRų§MĩxWQYlVqUšu%bÁBK$lë%ļä@>5ĘÂ[—õ¤rĮ’š€N>Ëp{gŽ–Aâ`Ā`>Ą8Ȏá#)Wɞ=gcˆŠųŗe!€e5R*Ü㗐 FŊŌH:DÂ8AĢXIņ[ˇ˛ĩ >)ˇ~'$öa˛ŧ•mg­ĨÛėËJ9ßû™Â˙dž?j›•ÖömhĩĀ SāÉ×öŸÃųߌÚ\¸ˇ"ãüáËö'ŗf͛ŽėŲŗbŽÍ›6*ėŲŗbŽÍ›6*ėŲ˛™‚Šf (ܓ°o õ-fĮJQõ—-3ŠÅmį3öĒ íūQĸŽį.ŧÍ}}#ÅĨÄmmFÂú` BAôa5x;˙Ā÷ÂØmŌīV’i2Ī+‘ČūgjŸč;g=Ú~Ōi´ŧX´õŸ(Ûcû¸ŸéKŠō>]T!b>Š}ˆĢíGQՁK†6–mˇÕ!b˙L´?ėRƒÄ°ÄQ5ÆĄETPė^lâuēũNŗ'‰ŠČeŨPõcŅĀɒy ČߗGcŖC<2‘Z8Cōđü Ž7)ך2׍A‡P|FbŠē<ŽĮÜyŖø2BcøH?&A›´›ëņÍU,ÃãâjœėŒ[0 yƒOT Čģ6lØJâOJq×ĸüÎa†ĸĮŒkؒOŅOë…ų•„ToŊÍĶÆĄÎ?są˛GČc•Ŗ}¤`?AĮfËA ‚ ¸!šZĶUÔô°ĢkûUØÛĖ˙žEU ôfz–$Ž’ëö” d›NÖ,5NKm%&ym¤%NÕd=ĢŅ…Tö'"xœĮ)FpCÆyG"’ŽĶ’:Ę~G:NÎöŖSƒ‡ŦF1ˇūôyúž?7 >ƒîXũģøc?͑<Ī&–é™–U§×8ņ VŗǞõĢŧGPw9-5pFvē=nŸY„fĶΊ'cĩžâ^\3Å.Šîî>æķf͙-n͛6*ėŲŗbŽČæ'˜L.ƒhôšp$ŧe;Ŧ_ŗÍÎįü‘ī“[SˇŅôëJ꾔 ˈęĖ~E÷f ᗷ—ä÷÷g•Å˙$§A]‚­e@ =†k;WWāaāŠåØwˆõ.Ŗļõß–Ķøp5“5\ãâ—č ū¯¨ãkzh:,ĀŗTôũ_.’\æ™!ĐĩÃ[+ÆŦdŌ)ėû1'§†pēŊŪ\C~r˜ķtēĐâŦ9ĪĢ”d‹Čų˛ŦŲēî3fŠÛ;6lØĒ7HsÂxũÕ!d˙RAÎŋđ|†a%”ž–Ŗ…¸FOniņ¨ųņį‡yŠdâūxũíé4Y8ôøĪP8Oųģ;6lŲC’•ß°ič?e@?¯øā\jJŗƒ"75,Öûņb¤ŽTØĶ™Â&#„ķ{ą€1}›6l,Œ’T‰y9 í•,ŅÂĩsJôĪË f™į~M͞ø ŗ3-ÎÁˇ#3ÜVޟëeÖQĘ6xœNÔ§žKŧ•¨´ē蛇/q§…DcÕíÍDLOr´âß*÷Čv)k{6™wĨnĨŪ ķzÉSԋæ@¨˙( č;_ų=HŒbËQŸpūlžQÚ:1› zņī>øü^Ģ›ˇž¨#šˇq$3"ɋҕ‡%#æ1\īžYŲŗfÅ]›6yģ]ũ¤IŲŽÖhø¯.!ŋ9DuķnëAÚU‡9ߔdzųKĪ͔âsOēz’š …Pff=UAfcØ\Î/g"2ØŨÜŊ(+Æ$ŋŌPņ]ŊÉė2IŖųv-=ÖúōO­ę\x™ČãuûKo'€=ÍKįļ_Ų=ƒŸ\FYŪ,õŸĒUŌôōwØtōÉšôĮŋŠ÷%–^YŸRUŸWi-#h-`‘Ŗ˜Tį,ŅU¨ĮáCˇrząų3Hx‰õá]Fđø˙ÅŲ"͝ÖÍŅāÅXđC†?ÎR>d—e!X ō–”ŦXK}Sã¨^÷ķ„ôĒęß ÷úũåzSŧØ{›-üž—ũCúHūĻ|rūqų° ´-g@>œ úKFŒĸ쁧#LĒ´ø“â û,r­î!ē‰gˇpņˇB6ĄĀî;wĐ0›Sōí•ûŊĖ$Ųß°ŽáUäáw *°*ãį¸ėFh{S؜ƒ,ÚB0å;˜Ÿî¤۟wÉÍĶëå Ž_T{˙ˆ~ļ;‰Ī2Ā…Û~ÁGS‰jĄē¤*DŦcĩŧˆŸĢÉ!ĶŽJ†xYĪ@Cō‰Û d–I›”†§°ė€Î?7gj4Ų|=L2;˙ˆwĎaÜi¸sŽ(Jâ9ŸĐÜĶÉ9éˇ@;W͛ ;6ŲŗfÂŦ—ÉēĄ†GŅ'oĢ5>jX~ƒņ¯ą#ĸäĶ9/)Ŗxî-˜%Ė %Ī@ëŌžĮėˇą9ĶtŊFVÂø6YAä‡Ē:’¯{Ģ3šėæ4ŪÍäÁQ=ō‡đËô<Ījé|Ū$GŖ.ūéuÜŲŗféÖģ8˙ž5čõWĐļ!­lKEÃŊG¨ãÚĢOĸšÔuŠL6Ŗ0­cļ™Å ÃŽpÁi"ĸ…*Ā;¯Ü7ÍjbÔåÁáéāgg×DCŖÎŨ´z“O5ãHŲūŽ:5ö…,Ųn­÷ŠTxĶoŧmPjÛK˛†ÆŅxÅ …ũĻ Pģžė{œ›6u`(lÛģ6lØUŲŗfÅ]›6lUŠé–zńúnĄ–ÖåJHŊŗ)ėAÜæ2[Üé÷“éwÛÜÛÆO÷ė-_Naĩ>*|@t5Îĩ„>hŅĢf'ĩQúFŌ¯lNÜÁûp1đp>†ĄÍgköxÖiĖb?{ŽåŒųõēNogęΟ5Ÿĸ{L~Ÿƒ͍ŽE‘­@=A؂6*Ãąb1ŲĀH“ Ņ˜!ęÁ7Ųą6ž¨gEj~áˆĩō°„üöūšd4ųgô@Ÿ>CæYF—!hŦ9ōŽĻtũKę2ŸôM@Ž pĮå"Š|ĀņČŗŪLŨ(ŖÛûq–¯0Ôôéã5š;ģr…‰§Å"ÆÕņøXæã˛4ųđjņdââ">(Ëj.?hiŋ”öˇ–ß—ũãą7‚)*]A$SŲŠū°ß͓”c!RƒĐîR2”MĐ{ÆČg´Û÷NT×ö‡!OĀū8‘‚áz aūCoķ!¸āė؁›˛tYw8„|=?g/ą´gæŊãôŠdŸ—~^[듯Ū'îmĨ”N(LÃg•ÔЎėW­y)ÎĨ‘/ËĶ]qátãūIÄr[“Á§Į§Æ1cúc|ų“Ū_DėČB?‡,q™ëę˜â6]›6lĩÍvl‹čÖĄæĪ5é7.­iĨIbļHQ=ˇ­'&ęÕo'×|×ŦØęuˇļ•z&ūž )+;$ėY‰ûBąŽ*ô ØMŖtūSVf[m9n‹ĐSÕ0z•ãԜģd/2ųˇZO"ŲØę‘é×>`ĶînīîŦsÕāŽŒlP-yž‡zžl"ĐôĪ2ØÜI&ĩ¯Ž­'ā[(íxŊAįÎ7rv¨ĻâŽÍ›6*ķ;FšnŊÚ|P†K™V•Q$l‘—Zė9ķûœƒ5–g–ĻŋŊiD ? •ūbĮgL4;[\TöūōŠį7Ú8qGU9GA•Hš}öö=ˆ8ôXå-ĖLĸ/šŲŗfĖWnė}Ŋ~ģdAĄúŨĩ˙Œņã1k2ŖP°å¸7vÃī]§ū˙õã÷¸úßņMGü*îKÚķf͝CįčjŖGÔ?Všƒo÷ÛxįÎ˯Tčz˜QÉžŠ=÷>›mœk,Į×āōžÖōŅûō˙ŧvlŲ˛Į“vlŲąW¤ū^­4kƒü×NäœCødˇ"—l­ŖŨŠvÁ‰î}[o äŋ(<Īŧž™Ųßâ:_øF/÷ŲŗfĀåŧĘĶÉz/˜|÷į¯1i_ZdĶÅ”Ķ JũP =6C|Cz`8ü• ļąį­ @ąú•ŽŖĸÁohhâžD¸SGrAŨ…wÛ:ÎlUæ0y÷L‹Ę) Ëg|ždŽĀXęwą¸XŊ +ũ2…ˇįʔÂ=g@ŗŌ˙å^XyˇO–÷OĶ´Û¨5ˇ‚{•Iũ+p€ũUYžØ4Î՛aI˙Ã{s”ôŲėn$ˆ5ÃKiynŦˆĀÎíIĢôš7͛vlŲąWœūbĮ[LŠ˙{ŠöpÔäS&˜ĩúî—áé\×qה˛œ˙iŒŸę‡˛ė/ņ˙Z_{ŗf͘.ŲØĨ¯¯XōØ}n×Įũ˙:bxĨ°c{cÄĐũnÔõ§Iã'.Ķ˙‹úņûÜ}oøĻŖū?÷%íšŗfÎĄķô˛9hú‚6Ķ ›ÆŨs‹įkÔí$ŋĶo,a˜ÛËs°ĮpLm"Q^$×<Įæ­kĖž^ÕŽt[•†)mŸŽ‘°/iHĪđŋQ™Ũ›ĸÍ­Īų|=™Į+20dbŦ:049I€<ļkŸeĮø2ũau=ąPú…Š“OôĢsSŋIPä _PˇâbĘŊū!øīøäˇÉˇwÚîˇki ¸g…’âY*B*DęĖĖhiā=ōx1ËÆĮÃŋŦŧ‹Ģí=L:=DæcĀ1Ęå}âƒŪ3f͝3æŽÎUųßåaĒhI¯ÚĨn´ŗûú ÚŨÄOú‡•sĒâsÁ Ė2[Ü ’UŖ–6Ü2°âĘGv—Q“M¨ÅŠÄjx¤$>‘äP@ ƒČėø‡6HŧīåŠ|Šæ;Ŋ!Á0Šõm$#íÂä”>ôč}ÆGsØ´šŦz­>-N#pË!åŪ˜;8‰‰1=›6lŊ‹˛qųkįKŋ'ęsĘļīycs ‹d`ŋŨ$žŽŸ"roo%Ėžœ@WŠ'j ’Û[Gk;u'Š9Ī{EŠĶĪO= Į‰<”Mîëq/ëwŸžf“§.>Qo“é¯-ųģDķMš—LŸ÷Č?g-x˙ÖJô÷{žQ‚i­gŽęÖW‚â#Ę)ĸbާÅXo;Ë?›ŗCÂĪÍząėŖQ~1ī4#í|Ķū<û>ƒ&?T=q˙d>dđ‘ŧwkØ3`[ FĮTļ[Ŋ:â;Ģwé,LkáˇCí‚ŗ ĨŲŗfÅ]›Ū^ŲéÖīw}‚˙đ9(ÂRä.‹Qǟ f]į”cī“Ņĩín×AĶ.u —^PÆī,ÁZFQP‹^ĩ9æBūëTŊŸQŊRæåĖ’ˇMĪ`<Ø{cu J˙UškÍJâK̇ë$†Ļx¨čŖĀ °:žŲ‹Ú:L˛Ä%ÅÁŧĸūņî{ŋg{2’y3HO&XˆņQÆ9˜īĖKŊŧŲŗf…ë]›6lUÛSįōÃËGEĐ˙H]FûSã3ÚX)XŖöëČüũŗ—ųË_â]z(§NV”ž÷?Gū20§Ęšč@:›NÎÁąÍ.ģGô—ƒöËĩ8ĨÍÄvdÍ_Îū|9ü›Í›6lž)ŲŗfÅ^aų×åA­ytkVÉ[Ũ"ŽÔgˇjz‹°ũŸĩ÷į›3ÛōĮŅŧR¨xäRŽŒ* °Ą<‘ųå†ōŸ™Ž´Åč¯ûû6ßx_ėŠžŧOÂsĩö7´ĒY;;!ÚW“ ˙8}p˙Ģæãę!°˜éąbøŊĩ´—Rãë7`2­­¤ēG˙Yģ’[khícÆ>gš9Ņö¯jĮK Í!īŠķî ĻͧŠ[@}žAĢkX­c ũĻîq|ŲŗŽ”Ĩ)H™$îI=]° :;6lØаķ¯å‰~ŋŖ\˜%fDxĪÅœ˜/īb¨ ׿;“'į'œĮÛŲˇmôÎŲŋĢÍoüjŌžä”uø˜Ų_åpe”§<`‘CģĪŖąĐč°e„˛fÆ%꥚ŊĪC˙•Ëæęwe_hŸūĒæœžmīŸŋîŸūĒg<͏ä4ŋęlŋ[™ü™Ŗ˙Q9~´ķ[ķ­æ;‘yĒܘmcፂ Ø~ŋ-Äâ? <1L×å€Į9@rosĐ顎aQˆLE7f͛ ܸĮ/ŽąÍ/iv<øœâ?ŨŌæéu<5!ÛøIéä|›ÍėO`3dãōÃËĻĩŅ}pœŦ´Âŗ5iFšŋēOŧrú3Q‡˒0yų­ĨŽĮĄŌeÕdūéΙúcņ/Qō–ŋÃZ qN´ŋģĨÅéęCđÅōEÛį\•f͝ b#ė øūlŲ3ežl§Šy$e#ŪdėŲŗakvlŲąWg5üåō›kŪ^]JÎ'“PĶš$j]ž!d^* 4û_FtŦŲn ų0f†|2áž9 Dų… Gp_#ÚÛGmãíä÷ÅķĐ^hüŧŅ<ÉÎáę:“oõČTQĪü]Áū{7žqŸ1yG\ōĔԠ­ąn1^ÅņBŪT'ÁŠí\Üb×ĮQ"g"2HŲâ7ÄOŸW/ā@ˆôÖĀ$yŗfĖ–Įf͉\Nļđ´­Ŋ( îĖxĒí^¤Ķ =ũåĖ͐v>”u§ŲN´§‹WÄāFŽ Žy9Ģ9íɉf§MĒqLˇ¨ŽūgŪyŊ&Ÿ‡†Ē ūąæėŲŗdە"4jxâØM8#5ēčTÄ˙œ>Đė4r¸˙4ũíæÍ›0ܧf͓ß*ūWjú×Ŋ[–™`h@uũü‚ŋą}õ›č¤",šqõZÍ>–yæ :◔cՇéZeöŗ{§Dgē–ŧ6‘$ĩ ô_”4ōæƒk§Ušãę]˛īĘgŨž.ôû#Ø`­ËúO—mĻ•n!SORCŧ’ûR9ÜūĄÛ 3Z0áŽYäĮ.}ßŌŪ;ļ;o/haĮ#qę‘år÷AŲŗfË+ŗf͊ģ6lØĢŗf͊ģšn"x.#Yb’7•”õ ­ąĻlUægü¤´šįwå—“u62’aoøÆû´-ĮË9>ŖĻßéMeŠÛ=­Â˙ē䨴‡Ŗ/ēšgŠđ­ĸézåŠŗÕm’æē‡ŸæGŸps3ģ&:Œũqķú‡¸ļÃ4†Įqöž]ĀwÍS ]ų°ĩTÜĐĶâãOĖŋ”ڍ‹5Ī—œßÚõúŦ„ „˙Tü+ ûĪ9UÂLšĖWŧ2ڑG' Á¨$jŖS‰ø€ú3i‹6<Ü<ģ"Áæ:îũsãˆ=lûŖģYŗfĖ×ĨvlŲąW`„5QđEŦrĪ*ÛĀ,Ō1ƀŗ1=•Fäæ.ļ7‹‹ųĻÛôŲcŽdĖˆÄÉ4.ß/ųW[ķ4ū–—nZ%4–ęO†˙ÖūĘÔûg@ō—å%x_y§ė4訃ŋûūEéūǟ§ļuk[[k(Ö΂Ū1Hâ‰B"Žģ*Đf–y€Ú;ųôuŨĄí8^=ņ%ū¨~ũQՉyWōãEōŲKšŋ܆¤´"æU#`kXc߉˙(’|)“LŲŗȓdÛĘįĪ—<ÎLĶ3‘ę;6l؝›6lUŲŗfÅ]›6lUŲŗfÅ]›6lUŲŗfÅ]‘gūU‡é9˙Ä? JüZú˙Ôūŗö‡ĢëüŨņĨ{SļlØGĮā‘ΝÁüĒJ~ãü?ĮˇĨõ:uíÃlPĘŦíú ŋü˛f̈́|YķÜåUĶĐ?OÕ+˜ĘŦíú čú¯LŲ°˙ĻOúwČ-Š˙Žvéõ\0ŅĀ˙Z ?F}s‰§ÔũWíSĶøŠ›6Čũ_J~“õüy|YlŲ˛ļ§f͛vlŲąWf͛vlŲąW˙Ųleptonica-1.86.0/prog/colorcontent_reg.c000066400000000000000000000154051506303110300202420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorcontent_reg.c * * This tests various color content functions, including a simple * color quantization method. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { //char *fname[64]; char fname[] = "/tmp/lept/colorcontent/maskgen.pdf"; l_uint32 *colors; l_int32 ncolors, w, h; l_float32 fcolor; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa1; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "colorcontent_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Find the most populated colors */ pix1 = pixRead("fish24.jpg"); pixGetMostPopulatedColors(pix1, 2, 3, 10, &colors, NULL); pix2 = pixDisplayColorArray(colors, 10, 200, 5, 6); pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ lept_free(colors); pixDestroy(&pix2); /* Do a simple color quantization with sigbits = 2 */ pix2 = pixSimpleColorQuantize(pix1, 2, 3, 10); pixDisplayWithTitle(pix2, 0, 400, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pix3 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); regTestComparePix(rp, pix2, pix3); /* 2 */ pixNumColors(pix3, 1, &ncolors); regTestCompareValues(rp, ncolors, 10, 0.0); /* 3 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Do a simple color quantization with sigbits = 3. * Roundoff from different jpeg decompression algorithms can * result in differing numbers of colors by a few percent. */ pix1 = pixRead("wyom.jpg"); pixNumColors(pix1, 1, &ncolors); /* >255, so should give 0 */ regTestCompareValues(rp, ncolors, 132165, 10000.0); /* 4 */ pix2 = pixSimpleColorQuantize(pix1, 3, 3, 20); pixDisplayWithTitle(pix2, 1000, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 5 */ ncolors = pixcmapGetCount(pixGetColormap(pix2)); regTestCompareValues(rp, ncolors, 20, 0.0); /* 6 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Find the number of perceptually significant gray intensities */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); pixNumSignificantGrayColors(pix2, 20, 236, 0.0001, 1, &ncolors); regTestCompareValues(rp, ncolors, 219, 0.0); /* 7 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Find background color in image with light color regions */ pix1 = pixRead("map.057.jpg"); pixa1 = pixaCreate(0); pixFindColorRegions(pix1, NULL, 4, 200, 70, 10, 90, 0.05, &fcolor, &pix2, NULL, pixa1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 8 */ pix3 = pixaDisplayTiledInColumns(pixa1, 5, 0.3, 20, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix3, 1000, 500, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa1); /* Show binary classification of RGB colors using a plane */ pix1 = pixMakeGamutRGB(3); pix2 = pixMakeArbMaskFromRGB(pix1, -0.5, -0.5, 1.0, 20); pixGetDimensions(pix1, &w, &h, NULL); pix3 = pixCreate(w, h, 32); pixSetAll(pix3); pixCombineMasked(pix3, pix1, pix2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 11 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix3, 0, 1300, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Show use of more than one plane to further restrict the allowed region of RGB color space */ pixa1 = pixaCreate(0); pix1 = pixMakeGamutRGB(3); pix2 = pixMakeArbMaskFromRGB(pix1, -0.5, -0.5, 1.0, 20); pix3 = pixMakeArbMaskFromRGB(pix1, 1.5, -0.5, -1.0, 0); pix4 = pixMakeArbMaskFromRGB(pix1, 0.4, 0.3, 0.3, 60); pixInvert(pix4, pix4); pix5 = pixSubtract(NULL, pix2, pix3); pix6 = pixSubtract(NULL, pix5, pix4); pixGetDimensions(pix1, &w, &h, NULL); pix7 = pixCreate(w, h, 32); pixSetAll(pix7); pixCombineMasked(pix7, pix1, pix6); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 13 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 14 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 15 */ regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 16 */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 17 */ pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix4, L_INSERT); pixaAddPix(pixa1, pix5, L_INSERT); pixaAddPix(pixa1, pix6, L_INSERT); pixaAddPix(pixa1, pix7, L_INSERT); lept_mkdir("lept/colorcontent"); l_pdfSetDateAndVersion(FALSE); pixaConvertToPdf(pixa1, 0, 0.5, L_FLATE_ENCODE, 0, NULL, fname); regTestCheckFile(rp, fname); /* 18 */ lept_stderr("Wrote %s\n", fname); if (rp->display) { pix8 = pixaDisplayTiledInColumns(pixa1, 2, 0.5, 15, 2); pixDisplay(pix8, 800, 1300); pixDestroy(&pix8); } pixaDestroy(&pixa1); return regTestCleanup(rp); } leptonica-1.86.0/prog/colorfill_reg.c000066400000000000000000000143311506303110300175130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorfill_reg.c * * This tests the utility that does color segmentation by region growing. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static PIX *makeSmallTestPix(l_uint32 c1, l_uint32 c2); int main(int argc, char **argv) { L_COLORFILL *cf; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test on a small image */ pix1 = makeSmallTestPix(0x3070A000, 0xA0703000); pix2 = pixExpandReplicate(pix1, 15); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); pixDestroy(&pix2); cf = l_colorfillCreate(pix1, 1, 1); pixColorContentByLocation(cf, 0, 0, 0, 70, 15, 3, 1, 1); pix2 = pixaDisplayTiledInColumns(cf->pixadb, cf->nx, 1.0, 10, 1); pix3 = pixExpandReplicate(pix2, 10); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix3, 300, 0, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); l_colorfillDestroy(&cf); /* Test on simple random image with many colors (1 tile and 4 tiles */ pixa1 = makeColorfillTestData(350, 350, 35, 100); pixa2 = pixaCreate(5); pix1 = pixaGetPix(pixa1, 0, L_COPY); pix2 = pixConvertTo32(pix1); pixDestroy(&pix1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ pixaAddPix(pixa2, pix2, L_INSERT); cf = l_colorfillCreate(pix2, 1, 1); /* 1 tile */ pixColorContentByLocation(cf, 0, 0, 0, 70, 30, 500, 1, 1); pix3 = pixaDisplayTiledInColumns(cf->pixam, cf->nx, 1.0, 10, 1); pix4 = pixaDisplayTiledInColumns(cf->pixadb, cf->nx, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixaAddPix(pixa2, pix3, L_INSERT); pixaAddPix(pixa2, pix4, L_INSERT); l_colorfillDestroy(&cf); cf = l_colorfillCreate(pix2, 2, 2); /* 4 tiles */ pixColorContentByLocation(cf, 0, 0, 0, 70, 30, 500, 1, 1); pix3 = pixaDisplayTiledInColumns(cf->pixam, cf->nx, 1.0, 10, 1); pix4 = pixaDisplayTiledInColumns(cf->pixadb, cf->nx, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 5 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 6 */ pixaAddPix(pixa2, pix3, L_INSERT); pixaAddPix(pixa2, pix4, L_INSERT); if (rp->display) { pix1 = pixaDisplayTiledInColumns(pixa2, 5, 1.0, 15, 2); pixDisplay(pix1, 0, 400); pixDestroy(&pix1); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); l_colorfillDestroy(&cf); /* Test on an image with lots of color (with 1 tile and 9 tiles) */ pix1 = pixRead("lyra.005.jpg"); pix2 = pixScale(pix1, 0.5, 0.5); pixDestroy(&pix1); cf = l_colorfillCreate(pix2, 1, 1); /* 1 tile */ pixColorContentByLocation(cf, 0, 0, 0, 70, 30, 100, 1, 1); pix3 = pixaDisplayTiledInColumns(cf->pixam, cf->nx, 1.0, 10, 1); pix4 = pixaDisplayTiledInColumns(cf->pixadb, cf->nx, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 7 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 8 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 9 */ pixa2 = pixaCreate(3); pixaAddPix(pixa2, pix2, L_COPY); pixaAddPix(pixa2, pix3, L_INSERT); pixaAddPix(pixa2, pix4, L_INSERT); if (rp->display) { pix1 = pixaDisplayTiledInColumns(pixa2, 3, 0.8, 15, 2); pixDisplay(pix1, 0, 650); pixDestroy(&pix1); } l_colorfillDestroy(&cf); pixaDestroy(&pixa2); cf = l_colorfillCreate(pix2, 3, 3); /* 9 tiles */ pixColorContentByLocation(cf, 0, 0, 0, 70, 30, 100, 1, 1); pix3 = pixaDisplayTiledInColumns(cf->pixam, cf->nx, 1.0, 10, 1); pix4 = pixaDisplayTiledInColumns(cf->pixadb, cf->nx, 1.0, 10, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 10 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 11 */ pixa2 = pixaCreate(2); pixaAddPix(pixa2, pix3, L_INSERT); pixaAddPix(pixa2, pix4, L_INSERT); if (rp->display) { pix1 = pixaDisplayTiledInColumns(pixa2, 2, 0.8, 15, 2); pixDisplay(pix1, 0, 1000); pixDestroy(&pix1); } l_colorfillDestroy(&cf); pixDestroy(&pix2); pixaDestroy(&pixa2); return regTestCleanup(rp); } static PIX *makeSmallTestPix(l_uint32 c1, l_uint32 c2) { l_int32 i, j; PIX *pix1; pix1 = pixCreate(17, 17, 32); pixSetAllArbitrary(pix1, c1); for (i = 0; i < 15; i++) { for (j = 0; j < i; j++) pixSetPixel(pix1, j, i, c2); } for (i = 0; i < 15; i++) { for (j = 17 - i; j < 17; j++) pixSetPixel(pix1, j, i, c2); } for (i = 9; i < 17; i++) pixSetPixel(pix1, 8, i, c1); return pix1; } leptonica-1.86.0/prog/coloring_reg.c000066400000000000000000000136371506303110300173520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * coloring_reg.c * * This tests simple coloring functions. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static const char *bgcolors[] = {"255 255 235", "255 245 235", "255 235 245", "235 245 255"}; l_int32 main(int argc, char **argv) { char buf[512]; l_int32 i, n, index; l_int32 rval[4], gval[4], bval[4]; l_uint32 scolor, dcolor; L_BMF *bmf; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "coloring_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Read in the bg colors */ for (i = 0; i < 4; i++) sscanf(bgcolors[i], "%d %d %d", &rval[i], &gval[i], &bval[i]); bmf = bmfCreate("fonts", 8); /* Get the input image (100 ppi resolution) */ pix0 = pixRead("harmoniam100-11.png"); cmap = pixGetColormap(pix0); pixa = pixaCreate(0); /* Do cmapped coloring on the white pixels only */ pixcmapGetIndex(cmap, 255, 255, 255, &index); /* index of white pixels */ for (i = 0; i < 4; i++) { pixcmapResetColor(cmap, index, rval[i], gval[i], bval[i]); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix1 = pixAddSingleTextblock(pix0, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix1, L_INSERT); } /* Do cmapped background coloring on all the pixels */ for (i = 0; i < 4; i++) { scolor = 0xffffff00; /* source color */ composeRGBPixel(rval[i], gval[i], bval[i], &dcolor); /* dest color */ pix1 = pixShiftByComponent(NULL, pix0, scolor, dcolor); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } /* Do background coloring on rgb */ pix1 = pixConvertTo32(pix0); for (i = 0; i < 4; i++) { scolor = 0xffffff00; composeRGBPixel(rval[i], gval[i], bval[i], &dcolor); pix2 = pixShiftByComponent(NULL, pix1, scolor, dcolor); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); /* Compare cmapped & rgb foreground coloring */ scolor = 0x0; /* source color */ composeRGBPixel(200, 30, 150, &dcolor); /* ugly fg dest color */ pix1 = pixShiftByComponent(NULL, pix0, scolor, dcolor); /* cmapped */ snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", 200, 100, 50); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixConvertTo32(pix0); pix4 = pixShiftByComponent(NULL, pix3, scolor, dcolor); /* rgb */ snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", 200, 100, 50); pix5 = pixAddSingleTextblock(pix4, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix5, L_INSERT); regTestComparePix(rp, pix1, pix4); regTestComparePix(rp, pix2, pix5); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); /* Log all the results */ n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); pixDestroy(&pix1); } /* If in testing mode, make a pdf */ if (rp->display) { pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Colored background", "/tmp/lept/regout/coloring.pdf"); L_INFO("Output pdf: /tmp/lept/regout/coloring.pdf\n", rp->testname); } pixaDestroy(&pixa); pixDestroy(&pix0); bmfDestroy(&bmf); return regTestCleanup(rp); } leptonica-1.86.0/prog/colorize_reg.c000066400000000000000000000272651506303110300173660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorize_reg.c * * This regresstion test demonstrates the detection of red highlight * color in an image, and the generation of a colormapped version * with clean background and colorized highlighting. * * The input image is rgb. Other examples are breviar.32 and amoris.2. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" PIX *TestForRedColor(L_REGPARAMS *rp, const char *fname, l_float32 gold_red, L_BMF *bmf); l_int32 main(int argc, char **argv) { l_int32 irval, igval, ibval; l_float32 rval, gval, bval, fract, fgfract; L_BMF *bmf; BOX *box; BOXA *boxa; FPIX *fpix; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIX *pix8, *pix9, *pix10, *pix11, *pix12, *pix13, *pix14, *pix15; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "colorize_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); pixs = pixRead("breviar.38.150.jpg"); pixaAddPix(pixa, pixs, L_CLONE); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixs, 0, 0, "Input image", rp->display); /* Extract the blue component, which is small in all the text * regions, including in the highlight color region */ pix1 = pixGetRGBComponent(pixs, COLOR_BLUE); pixaAddPix(pixa, pix1, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pix1, 200, 0, "Blue component", rp->display); /* Do a background normalization, with the background set to * approximately 200 */ pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); pixaAddPix(pixa, pix2, L_COPY); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 2 */ pixDisplayWithTitle(pix2, 400, 0, "BG normalized to 200", rp->display); /* Do a linear transform on the gray pixels, with 50 going to * black and 160 going to white. 50 is sufficiently low to * make both the red and black print quite dark. Quantize * to a few equally spaced gray levels. This is the image * to which highlight color will be applied. */ pixGammaTRC(pix2, pix2, 1.0, 50, 160); pix3 = pixThresholdOn8bpp(pix2, 7, 1); pixaAddPix(pixa, pix3, L_CLONE); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 3 */ pixDisplayWithTitle(pix3, 600, 0, "Basic quantized with white bg", rp->display); /* Identify the regions of red text. First, make a mask * consisting of all pixels such that (R-B)/B is larger * than 2.0. This will have all the red, plus a lot of * the dark pixels. */ fpix = pixComponentFunction(pixs, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0); pix4 = fpixThresholdToPix(fpix, 2.0); pixInvert(pix4, pix4); /* red plus some dark text */ pixaAddPix(pixa, pix4, L_CLONE); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix4, 800, 0, "Red plus dark pixels", rp->display); /* Make a mask consisting of all the red and background pixels */ pix5 = pixGetRGBComponent(pixs, COLOR_RED); pix6 = pixThresholdToBinary(pix5, 128); pixInvert(pix6, pix6); /* red plus background (white) */ /* Intersect the two masks to get a mask consisting of pixels * that are almost certainly red. This is the seed. */ pix7 = pixAnd(NULL, pix4, pix6); /* red only (seed) */ pixaAddPix(pixa, pix7, L_COPY); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix7, 0, 600, "Seed for red color", rp->display); /* Make the clipping mask by thresholding the image with * the background cleaned to white. */ pix8 = pixThresholdToBinary(pix2, 230); /* mask */ pixaAddPix(pixa, pix8, L_CLONE); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix8, 200, 600, "Clipping mask for red components", rp->display); /* Fill into the mask from the seed */ pixSeedfillBinary(pix7, pix7, pix8, 8); /* filled: red plus touching */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix7, 400, 600, "Red component mask filled", rp->display); /* Small closing on regions to be colored */ pix9 = pixMorphSequence(pix7, "c5.1", 0); pixaAddPix(pixa, pix9, L_CLONE); regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix9, 600, 600, "Components defining regions allowing coloring", rp->display); /* Sanity check on amount to be colored. Only accept images * with less than 10% of all the pixels with highlight color */ pixForegroundFraction(pix9, &fgfract); if (fgfract >= 0.10) { L_INFO("too much highlighting: fract = %6.3f; removing it\n", rp->testname, fgfract); pixClearAll(pix9); pixSetPixel(pix9, 0, 0, 1); } /* Get a color to paint that is representative of the * actual highlight color in the image. Scale each * color component up from the average by an amount necessary * to saturate the red. Then divide the green and * blue components by 2.0. */ pixGetAverageMaskedRGB(pixs, pix7, 0, 0, 1, L_MEAN_ABSVAL, &rval, &gval, &bval); fract = 255.0 / rval; irval = lept_roundftoi(fract * rval); igval = lept_roundftoi(fract * gval / 2.0); ibval = lept_roundftoi(fract * bval / 2.0); lept_stderr("(r,g,b) = (%d,%d,%d)\n", irval, igval, ibval); /* Test mask-based colorization on gray and cmapped gray */ pix10 = pixColorGrayMasked(pix2, pix9, L_PAINT_DARK, 225, irval, igval, ibval); pixaAddPix(pixa, pix10, L_CLONE); regTestWritePixAndCheck(rp, pix10, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix10, 800, 600, "Colorize mask gray", rp->display); pixaAddPix(pixa, pixs, L_CLONE); pix11 = pixColorGrayMasked(pix3, pix9, L_PAINT_DARK, 225, irval, igval, ibval); pixaAddPix(pixa, pix11, L_CLONE); regTestWritePixAndCheck(rp, pix11, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix11, 900, 600, "Colorize mask cmapped", rp->display); /* Get the bounding boxes of the mask components to be colored */ boxa = pixConnCompBB(pix9, 8); /* Test region colorization on gray and cmapped gray */ pix12 = pixColorGrayRegions(pix2, boxa, L_PAINT_DARK, 220, 0, 255, 0); pixaAddPix(pixa, pix12, L_CLONE); regTestWritePixAndCheck(rp, pix12, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix12, 900, 600, "Colorize boxa gray", rp->display); box = boxCreate(200, 200, 250, 350); pix13 = pixCopy(NULL, pix2); pixColorGray(pix13, box, L_PAINT_DARK, 220, 0, 0, 255); pixaAddPix(pixa, pix13, L_CLONE); regTestWritePixAndCheck(rp, pix13, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix13, 1000, 600, "Colorize box gray", rp->display); pix14 = pixThresholdTo4bpp(pix2, 6, 1); pix15 = pixColorGrayRegions(pix14, boxa, L_PAINT_DARK, 220, 0, 0, 255); pixaAddPix(pixa, pix15, L_CLONE); regTestWritePixAndCheck(rp, pix15, IFF_PNG); /* 13 */ pixDisplayWithTitle(pix15, 1100, 600, "Colorize boxa cmap", rp->display); pixColorGrayCmap(pix14, box, L_PAINT_DARK, 0, 255, 255); pixaAddPix(pixa, pix14, L_CLONE); regTestWritePixAndCheck(rp, pix14, IFF_PNG); /* 14 */ pixDisplayWithTitle(pix14, 1200, 600, "Colorize box cmap", rp->display); boxDestroy(&box); /* Generate a pdf of the intermediate results */ lept_mkdir("lept/color"); L_INFO("Writing to /tmp/lept/color/colorize.pdf\n", rp->testname); pixaConvertToPdf(pixa, 90, 1.0, 0, 0, "Colorizing highlighted text", "/tmp/lept/color/colorize.pdf"); pixaDestroy(&pixa); fpixDestroy(&fpix); boxDestroy(&box); boxaDestroy(&boxa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); pixDestroy(&pix12); pixDestroy(&pix13); pixDestroy(&pix14); pixDestroy(&pix15); /* Test the color detector */ pixa = pixaCreate(7); bmf = bmfCreate(NULL, 4); pix1 = TestForRedColor(rp, "brev.06.75.jpg", 1, bmf); /* 14 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.10.75.jpg", 0, bmf); /* 15 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.14.75.jpg", 1, bmf); /* 16 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.20.75.jpg", 1, bmf); /* 17 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.36.75.jpg", 0, bmf); /* 18 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.53.75.jpg", 1, bmf); /* 19 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = TestForRedColor(rp, "brev.56.75.jpg", 1, bmf); /* 20 */ pixaAddPix(pixa, pix1, L_INSERT); /* Generate a pdf of the color detector results */ L_INFO("Writing to /tmp/lept/color/colordetect.pdf\n", rp->testname); pixaConvertToPdf(pixa, 45, 1.0, 0, 0, "Color detection", "/tmp/lept/color/colordetect.pdf"); pixaDestroy(&pixa); bmfDestroy(&bmf); return regTestCleanup(rp); } PIX * TestForRedColor(L_REGPARAMS *rp, const char *fname, l_float32 gold_red, L_BMF *bmf) { char text[64]; PIX *pix1, *pix2; l_int32 hasred; l_float32 ratio; pix1 = pixRead(fname); pixHasHighlightRed(pix1, 1, 0.0001, 2.5, &hasred, &ratio, NULL); regTestCompareValues(rp, gold_red, hasred, 0.0); if (hasred) snprintf(text, sizeof(text), "Has red: ratio = %6.1f", ratio); else snprintf(text, sizeof(text), "Does not have red: ratio = %6.1f", ratio); pix2 = pixAddSingleTextblock(pix1, bmf, text, 0x0000ff00, L_ADD_BELOW, NULL); pixDestroy(&pix1); return pix2; } leptonica-1.86.0/prog/colormask_reg.c000066400000000000000000000142721506303110300175240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colormask_reg.c * * This tests the ability to identify regions in HSV color space * by analyzing the HS histogram and building masks that cover * peaks in HS. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, x, y, rval, gval, bval; l_uint32 pixel1, pixel2; l_float32 frval, fgval, fbval; NUMA *nahue, *nasat, *napk; PIX *pixs, *pixhsv, *pixh, *pixg, *pixf, *pixd, *pixr; PIX *pix1, *pix2, *pix3; PIXA *pixa, *pixapk; PTA *ptapk; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "colormask_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Make a graded frame color */ pixs = pixCreate(650, 900, 32); for (i = 0; i < 900; i++) { rval = 40 + i / 30; for (j = 0; j < 650; j++) { gval = 255 - j / 30; bval = 70 + j / 30; composeRGBPixel(rval, gval, bval, &pixel1); pixSetPixel(pixs, j, i, pixel1); } } /* Place an image inside the frame and convert to HSV */ pix1 = pixRead("1555.003.jpg"); pix2 = pixScale(pix1, 0.5, 0.5); pixRasterop(pixs, 100, 100, 2000, 2000, PIX_SRC, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDisplayWithTitle(pixs, 400, 0, "Input image", rp->display); pixa = pixaCreate(0); pixhsv = pixConvertRGBToHSV(NULL, pixs); /* Work in the HS projection of HSV */ pixh = pixMakeHistoHS(pixhsv, 5, &nahue, &nasat); pixg = pixMaxDynamicRange(pixh, L_LOG_SCALE); pixf = pixConvertGrayToFalseColor(pixg, 1.0); regTestWritePixAndCheck(rp, pixf, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixf, 100, 0, "False color HS histo", rp->display); pixaAddPix(pixa, pixs, L_COPY); pixaAddPix(pixa, pixhsv, L_INSERT); pixaAddPix(pixa, pixg, L_INSERT); pixaAddPix(pixa, pixf, L_INSERT); gplotSimple1(nahue, GPLOT_PNG, "/tmp/lept/regout/junkhue", "Histogram of hue values"); pix3 = pixRead("/tmp/lept/regout/junkhue.png"); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix3, 100, 300, "Histo of hue", rp->display); pixaAddPix(pixa, pix3, L_INSERT); gplotSimple1(nasat, GPLOT_PNG, "/tmp/lept/regout/junksat", "Histogram of saturation values"); pix3 = pixRead("/tmp/lept/regout/junksat.png"); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix3, 100, 800, "Histo of saturation", rp->display); pixaAddPix(pixa, pix3, L_INSERT); pixd = pixaDisplayTiledAndScaled(pixa, 32, 270, 7, 0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 0, 400, "Hue and Saturation Mosaic", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); numaDestroy(&nahue); numaDestroy(&nasat); /* Find all the peaks */ pixFindHistoPeaksHSV(pixh, L_HS_HISTO, 20, 20, 6, 2.0, &ptapk, &napk, &pixapk); numaWriteStderr(napk); ptaWriteStream(stderr, ptapk, 1); pixd = pixaDisplayTiledInRows(pixapk, 32, 1400, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixd, 0, 550, "Peaks in HS", rp->display); pixDestroy(&pixh); pixDestroy(&pixd); pixaDestroy(&pixapk); /* Make masks for each of the peaks */ pixa = pixaCreate(0); pixr = pixScaleBySampling(pixs, 0.4, 0.4); for (i = 0; i < 6; i++) { ptaGetIPt(ptapk, i, &x, &y); pix1 = pixMakeRangeMaskHS(pixr, y, 20, x, 20, L_INCLUDE_REGION); pixaAddPix(pixa, pix1, L_INSERT); pixGetAverageMaskedRGB(pixr, pix1, 0, 0, 1, L_MEAN_ABSVAL, &frval, &fgval, &fbval); composeRGBPixel((l_int32)frval, (l_int32)fgval, (l_int32)fbval, &pixel1); pixGetPixelAverage(pixr, pix1, 0, 0, 1, &pixel2); regTestCompareValues(rp, pixel1 >> 8, pixel2 >> 8, 0.0); /* 5 - 10 */ pix2 = pixCreateTemplate(pixr); pixSetAll(pix2); pixPaintThroughMask(pix2, pix1, 0, 0, pixel1); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixCreateTemplate(pixr); pixSetAllArbitrary(pix3, pixel1); pixaAddPix(pixa, pix3, L_INSERT); } pixd = pixaDisplayTiledAndScaled(pixa, 32, 225, 3, 0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 8 */ pixDisplayWithTitle(pixd, 600, 0, "Masks over peaks", rp->display); pixDestroy(&pixs); pixDestroy(&pixr); pixDestroy(&pixd); pixaDestroy(&pixa); ptaDestroy(&ptapk); numaDestroy(&napk); return regTestCleanup(rp); } leptonica-1.86.0/prog/colormorph_reg.c000066400000000000000000000076051506303110300177200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colormorph_reg.c * * Regression test for simple color morphological operations */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 SIZE = 7; int main(int argc, char **argv) { char buf[256]; PIX *pixs, *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("wyom.jpg"); pixa = pixaCreate(0); pix1 = pixColorMorph(pixs, L_MORPH_DILATE, SIZE, SIZE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 0 */ snprintf(buf, sizeof(buf), "d%d.%d", SIZE, SIZE); pix2 = pixColorMorphSequence(pixs, buf, 0, 0); regTestComparePix(rp, pix1, pix2); /* 1 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixColorMorph(pixs, L_MORPH_ERODE, SIZE, SIZE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 2 */ snprintf(buf, sizeof(buf), "e%d.%d", SIZE, SIZE); pix2 = pixColorMorphSequence(pixs, buf, 0, 0); regTestComparePix(rp, pix1, pix2); /* 3 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixColorMorph(pixs, L_MORPH_OPEN, SIZE, SIZE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 4 */ snprintf(buf, sizeof(buf), "o%d.%d", SIZE, SIZE); pix2 = pixColorMorphSequence(pixs, buf, 0, 0); regTestComparePix(rp, pix1, pix2); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixColorMorph(pixs, L_MORPH_CLOSE, SIZE, SIZE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 6 */ snprintf(buf, sizeof(buf), "c%d.%d", SIZE, SIZE); pix2 = pixColorMorphSequence(pixs, buf, 0, 0); regTestComparePix(rp, pix1, pix2); /* 7 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); if (rp->display) { lept_mkdir("lept/cmorph"); lept_stderr("Writing to: /tmp/lept/cmorph/colormorph.pdf\n"); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, "colormorph-test", "/tmp/lept/cmorph/colormorph.pdf"); lept_stderr("Writing to: /tmp/lept/cmorph/colormorph.jpg\n"); pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 30, 2); pixWrite("/tmp/lept/cmorph/colormorph.jpg", pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } pixaDestroy(&pixa); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/colorpage.030.jpg000066400000000000000000001573011506303110300175100ustar00rootroot00000000000000˙Ø˙āJFIFKK˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Ā A"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?č`æ?ÄâĨ• ¸ũØúÔŨ̜؊1E â”ô ŽôfŒĶÅ—5NęgŽL)ĀĀ4÷%ģj[ bŗžĶ/gŖí2˙zŸ+'TzÖhē—zĩËĮĖ?*9XsŖG4ĩšnæĪ ú _ĩËŨŋJ|Ŧ9Ņĸi3ÍPû\žĸ^J;ĘŽVčŅÍž/%õZ>Ų!ūīåG+:4(ü+?í’ŗųRũļOEü¨åa΋ôf¨ Ų=ƒzųč´r°įF¤Íg›×ė Đ/ÜõEŖ•‡ôfŠ}ŋū™ū´}ŧwO֎VčģœzPOGíüũÃųŌ˙h ũÃųŅĘĮÎģ—sIšĻ/×û†ˇ/÷ Ŧ9×ræisUaēY[h\cžjĀĨ°ĶM\wjCFx¤ÎhšŖ4™¤'֋ę)šâÜâ€ŅHŲÁۂ{f6:ā,¨¤&‚h°\(ĻģĒ)g!@’p0\BA"T wČü(ŗat‰i*3qMæU N2XŸJ ņā10Į‘ƒíE´ Ąæ“Ŋ0Ké"’NëéJY@$°uöúŅ`ųޤ4Ī:" …GR?Uuq•eaęiXģŠi e$€Ā‘ב‘HYwmÜ7zgŸĘCAM4õ ˛îÚHΧzB˜nqFĄp4ÃO=é„ŌĶL4ķõĻ“ĪZŒĶ HiĻ€#"“m<Đ(jžĸ6Ŧí ūĩqšĢĒp‘×Eūĩ ģã0Ĩ+iļ‡÷C>•#jŅ-‘âŠ\QųŅOQ[s>õ7nĩ§úõŠé!õ—ĩ!ŖPšJCGŌ¨Ē7§÷ŖŨ˙ģT/īGûĸĒ;‘=ˆ A}3Ái,ą,‹œ6p*Ÿ>ôŌ20pAíÔĐÄ˟Sš)܌̯ĖÍō^™ãņŠ-¯ķĪ9Fc-8 €qbqW„qīÜQK dJ̍F‘éō**¨$p9ĶĐŗ‚hÕĀeĪ@ĘAüēĶĪ'õ ōˇįF9ôÅ1‘ÉÅœŠ^é ô¤ž)y)9æ€Āāæ”ō@æ‚(#Ĩa;ņ@īŪŽ§9ŖÖ€"¸¸[xLŽ€{ õ4ˋԷ`]‰P0 ŋ™íRËÍ FųÚŨqÁü*)lb™÷9~O 7ĄÁöČ­‘`ē–Ûģ“Đwü¨fŠÛCŋēĸWP§h$|ŖW xÍäR})@4Æ!ĪcAÉ ôÎ:PfxƒíķSwĻáœũ)ėØûÄ;“ŠŖäKĩŖāåËoČUo•FâHÁį‘ŽÁöĻ­­Øīvm¤ķ÷Úsú⨛#Lr úwĒÅ0!`wÃĪ͑׌cĨZĩ‰â´‰$ûĘ üãž~´HŊcŸ8įĶúŠž[œU ™OĶúŠŋQQ%Š´>A4Ū€úŌô¤%†O”ķŌĒj2[n@“pĀ$Ã9#'Ž3TĸÕ_wĖEEåūWÉr¤8ã‘ÁÆh_ڐv'Žõ“6ĒōÄ~ÎĄ]CAy…0>¸'ņúTęŦÛBÃ$„ ąČČ`>Ŋ?ÃŊj ˙õģĶOÔ6ˇkqj&(î$zņę= UūׯDLJG!ŗ‚Ičxä{ІNp{Q“НĪ›d.‘ {‚ôĪ?L~F=U–lÍX#?(.āߏnÔ~ũK)•ŗ2`:ž•LÚĘąZČrû3Š cŽ*ŨĨĐ爰ãÁn\gŽõëPÉĒE`ŅÉōĪäŒdŽz|ė)E=Jˇ6ĶŗJčŒI”¨ÆqÉĮoĨ(ĩ›ė.Ļ2'ILƒ=į¨öĮjˇ§ķ,hŽÛē°¨ČÎ2 =)÷W‰lß2ŗ0BøQœ*ã'°Č§ĖûėŅVÖŪX&˜¸Ü€rKÎ?jˇ›¤dwYŖ- °r9õĢvWOs5Á+ˆŅöŠčO“øæŖ}VšD))ØNX(ĀیķžŲ”‡ĘŠI Ģo7™–0ĒĻÕ8éĶšūĩnŌ'"EVHÄ![#›=qN“T…ö,´ãåî @'Ü÷ü(ŸQUĘ ËŖ*ëÔ?™Ļåq([¨Ø\ÃwtĖ—e …<ņƒÚĢųSeŒŖ‹Ÿ;%°xõ9úbŦEŠGå&AVÃm…ˆũH¨ÆŦ†TŨ,L§¤CüŽi\|ˇęDR_#aVFlįŽzįéL„´WnŌFZ˜˙ Č'ĄüŗW—Q‡ Yŗ‚sĩI “øŌš5+Rį#o]ĘA<‘éĪ ŅÍä.KkrÛvĀÅ1ŗéU[RƒˇåN6ŦIČ'ųS´Šå w„žsŒz}*YĨôyi |Õžˇo˜IrĀįŽŋÎŖŠhÕŗ˙T>•Ŗ0Š!“ĩYÕIÉyŠm?Õ-2ū(į„Ã'Ψ8$*Ō;‘>Ĩ_"Ûūz?ũöhŦĪėšŋįˇū‚Ē;܉ėAŪ—ƒ@öĄˆœU]O›'ãø”ã­ĢŠô6Ī2ŪĩÄēš’a†(–Fķ6ĐĮƐ\]įū=c>ŋŊ˙ëQs˙!+od|~•?øW"ŧĄ+#Ļ8É\Ž §{&X<ļŲŋ!ƒ2=ŊęÍSOų úâô!WEuQ“œ{˜ÔJ2˛âÆŒsA­LØëKAé@ AQŪ€HzŌĐh­¯ü}^wũā˙Đ­cŠĢlBÍxÍĐKĪā‹M]F]ʓyDØ"“inėU›zĪžhúĒuQ(¯î›ŌŦG"Ëȇ*Ā}Gji§°œZč;žŧRŅôĻ#ĩKvbÛA.Ā œãv=ĨiÜÎ-ã QÛ$.zãôĒĮû0ÜuƒÎ-Ķ99Î}zæ¯~„įü8ĻÚ{šÜ¤÷N/šƒËPœyö;Ôļ—qŪ#4jĀ>đęČéR“´•ŒžqĶžzŌE PĻ"EPN~^üT'~´bŌŒĶՎ|ÆĮ§õx‚xĒ6'įo÷jđn g#h|!ŽũęŊíÚYĀō9ÉPX/98įž•9'šŖ¨ÁåDŗ›c/$Š#¤ąâîÚtÛ1‹đŽė˓ŠcËĻā̤™<}2ãô¨&Ķ!XËIréˇ˜IĀ•9Áėãņ4Ë]2`Ėd`˜“xĀ$@Î~îI÷  Cû4ųd-šãr €H9?N)Ŗû9]HŽÜ(RC| `œëÉ<{ÔQéP6˙hŨ€ŦĘ@$íˇŽŸ­ ŖŽÂ<ķŒmRqÎrxĮnÔĸ‚x~]‰s€}˙>j˜kÕ#Ī$šlŦėe 2…eP €ĘG§ĢŽz‰üjŽŖÅǁõˆ?ņá@Čå%õ f*T˜œāã#•ëŽ*ČÕyųÕ ˙ŽNyú­XŊy8ŋâ|‘ÛCá SúC˙ŗUÚĨü„›Ú˙ĄēkĐà ĩž6Pi;ÖÆaEQ@‚“#8Ī?­¯OjÃPWˆácŋvøË3Žs†9Čüx i\Ö¸ŧŠØ&ī˜Ā'šöĮ­6[Ča–4v Ɍ žN9"‹ģ5ēÆddųJ’¸ųÆGãŽĩújĪ2ČōąŲ€8Œ~^Ŋ¨‘‘‹ķ‘÷Ī^˙"Ԗ\YÁ˙\Āũ*ēEû|ÛG˜†îøÚ8ũ*Å ˙D‡ūš¯ōŽgŽŦ:WdÂ7Đ÷öĻi˙ņáoĮüŗ‡Ÿ'úļúJK„õ͐Ĩ‚z1b:šLRŅ^Ëctˁuæß7~wãvzb´į„ˁDŽ„r§ûҞAfˇ>~X°6Ž…ąõčh¸›ČU;ōváqīI$Ži9JVģ(_iŗ\M$‘Ęd@ŒN@Î?^žÄÔöÖĶEr]ß)ŒpĒ8Ā#§<÷Í#]Ę/doîŖfÚI鞚ū”čõ${gœĮ( ~î '€sß֞„]–û*CÛ¯­gŨjf–XĘglA“'‰ė ŗęÍ(Œ+Ųã€2? ÷ F•ßoĨ]ƒšŠ`2Íô{=k9Ãá@Ûũ gjļ÷ė6Ā—ā2$ c‘éZ„Ũ~••­]É/0Œ´LÁųÉ#AāķúR(­qg|â}Ģ!ķ@2WoĮ@zT‰ųh / V@A;ēōIÚG8ę(‹S“ÍĒ!&Fģđ@`0¯°ĪJ#ÕĨBĘ"g‘šĮ|Ä;tíš@IĻÁrˇM-¸c Ģ1`ۘœ ûŽ1L’ ¤š™”JcyrJ> ]ƒį 9Č÷ôÍ:=NåÖŨšÛq›\œƒé‘ĪáKvō=ø†+–B <§ąŽĘ:œt=ŗí@J—_ŲH¤î¸P›öā“ČŨúUA¤ÆRPvģ.ė`˙(ĪĄ\ĨYĩԚiŨ5U ė ļIÚØ9ųãõöËy[ÖÅKgį8áC3Đū”0ÔÄ”›†Õ ÁČÎ{dcŽ€{Ô ˇåK:LIŒ(w);ų8>ÄGOzļš„“ŪĀąą3:˛–å° ôíø€ęˇE‘ŅL{d܊Ũƒ…§\v –îōI&͛DŽän#vqĶČĨS|Y]ÖRíäĨ2ŖŽė qČäæŽAyK‰RÛˍ1uoÁ9ãr¯_‰53}đĸī`Š 1õ<{}(¸—PÛjî($Ä`•lĀ ~Gš~Ÿ5ëÍÜØÉķe6€Ū¤`uö=sÅ,šÆ#“dpÎŌHÁÄ<}NGãR L™ŧ9A# @ÉÁöķ d7R\Ĩ툃*ąwˆëģw=j|­4Ú ŧŠ|ö€’6w@ã¸ĸ KrĪ;gĘUF^0~aĐû“Æ}čû|’ßEq”!˜I vœué†ķ@îöÜîzĢyD–ųWooRGáI%íøi6œŪU|˛sˇn?2OåV…ŨĮÚŨUŅâ„n™‚cŠz˙õĒdÔâ{i&1ČĢÜŠÆp@ Ž}㯁ŸPšʨ8ÚZ2qķ€~ŖôÍ>ŌōæK˜â”¤˛ĢƒÁ`=G|úÔĪĒěŗŦvâ 8'éŸNÔ R=Ũ čGŪ=zxZKÛ̈î D äŧ–Áí€3I§ ”’3–‘™ŽN{Ž3č=…ęˆĐČd´nc;Aųˆ¯R?jGŋ‰ ŽV û•?.OĨ2âŧšYŖ•˜J]#ģH$ŲĀĪqWôû‰n!-)Œ’3Į# ņJ58 •ÁS•ÆâiדúĶ#ÔP[™J33.ÕÉ<1ÎGáÎ;šĒ5‡ÜQU‚°SÁÉž žÄĶ^ũÚV‰Šā0”•=H=ũGķĢĮP‡2ŽYn6žIč=ōj3¨Û‚r\`㕠“Œž>†XĪŌ<)°bų ƒ”Č'诖[ÉOĖĮ šÎÖ?0 ŨŗßūUyoâvÆŌ+š-‚ĶŠÆ)Éy˛„RK0Ī*{„ūcLD÷S´Ęĩ•™”“€¤äg>”ŗ\Jn+…`\ķ2ŋĪ'ō§ËmæDl°Lāƒ€08úÍHˇļėøĪ͐9Sœįūc¤Ā突üë?Y˙e˙}˜­Ígë_ņęŖ¯ķ ŖVΘWéRšįŠŠËũJgĐTÎFyÕĄ1™ĸŒŅLAiū }jÅAgū }MNjVÅuĐhŖŊ0Ŋwĸ˜ŦU Ėųüc ĢõŸyū¸ŸaN;‘=Žrõ^MGĖvv‚ũĐBž>‡ŋĄ­ÎŨGįY—¯aoríqoš— Ė8Éā“õ´•••JœŠÔv˙õU™1GJЍÜ õ–?ũUŋoJ̍ŨF?é˛čB˜ē—R/h[˙BZŸéPI˙!Dö…ŋô!SŽÕäâŋ‰ō;¨ü1˙ČJOhGķ5rŠÄâe/ũr_æÕpv¯Cü(œĩ~6éMą˜CKړĀL˙ZÆKy?´ŋg}ŪqÉō—`8!ēįßÜÖĐäúJÍģ–ũnąnšBWh*#ō{įĩ FˆöčĪõŖ4Ŗ'Ÿ_Ɛu昌õâÚ˙=w>ī‘V-†-ĸėåUÉ˙Aŋ>­'ōĢÜGūāūUįãvŠõ:đëV,ü@įũ“üĢ—‹+íw\¨čäqc]=ÁÄD?Ęš˜ø}”VšrMKäF/K!Îō$M0Ā?ōŅŋÆē{RÆÖ’NÅ9'98ËIūŠŋŨ?Ęē›PE´_îä+Ш’ĩ‘ËÚo9 äŖƒëRžŸĶĶüâŅÚ˛)ŨˆAl“ÔôÍ$qGlžBā}§Ž”‡4Į†)ŗÆŒO]Ã=ô4‹(ūbÆĄČÆā' įō§Ņ@´ūY˙ ŊT,:ž=Ēîk7šŧ>O¯÷ǎPÁ'— ,åK…Û“É5`“Š­sg ËŖK“ŗ Ī1Ÿn§Ĩ"ˆRˇâUOŪĖĒŽ¸Éے3Œr:âš5fhÉD“!`TĻaÁ˙ĪZ޿ƯÔ,—ĘSnNX´ŠéÛ֑mlo E’FuSģ ƒ‚6‚xíŽ1é@ŒöĻy)ŠvƒōĒž„‘ÎQŸO­=‹–gDgÎŌLd–#9†9ôīO{E{ˇi\‡${žŸĐTK…&i–YBÄä;F1ÜdŒô Įw§ųŽQPmĀ-ŗ!ƒ Øäc SDš^åEāˇûSę ĨÃ+Å#ÆPŠLtWnĮ>•Ti° äļ‘ȉ•J aš°Oˇ'ô¤2ôRX™Uãy‡åVU¸cō ¨¤–;p˛Gv œŸęGqÉi¨Ļ/Ū’ŅÁ‚¨'§ė0}øô§Oi ÷2.7.œ„zägõü(ZËo,3Īoj¤;;@Cœ~¤÷ÅEļ'xkt…!mÛhRŨ× ö dzįŌ§†ÜŽäÁq÷Û*’rG¯_ŌĄŽÄ˜c‰&O.jĮœrrrzœį'Žs@,L&B‘ˆÜcqčA9ũN)V+&ũÚØˇīp­ÉČę?ĪCLEtôĩYpS~Üį8ĮoĀÔvzi´•ÍŨ˛=„ÆîíĮ¯ŋĨJŗãķc- îá×p}8Å*Įg†Å’1Œ—åAÆsîxëč*´úI•Ĩc2'˜~á8Üįļ)˛é2<˛ “Œ#øäŽŨ‡JIV<ą  ÉCĩ‰äsČÁũ*Aob!hÁO.PüäįøŒ ‚M)Ú{‰uT™JÛ÷FįąûqH4­ĖŦÆ…‘[ pY€ũ1×ŋj,––pX u˛š$IëČ$c'ØėĻö2į/ƒ&ÉđLŒņÆhkt§´gR[#-Ȝ€O|æĄŸIyR@$_›{ į,:č?^=9‘ŦlUYˆÂČG%ČÉÜHÁĪ\“Čį’:Paŗž…IÜÁ7/,sלœú¯z’âŅeļŠ$Ž­ƒĐāŒöīÍQ:DŖ$4@žŖį,GäqøP2ĶiÖĨKĮŽãÆ[q=xäGØ­ü´U,d°ebĪPHėsDö^e”0¨L#Š!‰+€sŒœŸoÆŠ.“2Fye@]˒`098÷§Ö€,ĩ¤’;mû†â¯ČaĶņÁĮЊlvļōČÎ1!9Œ7B>‡ü*tŲÄ7>āI “€¯p~šíŌŽ[E$!‘öāŗ7’2Äãō8ü( 5Œ÷üāä°į8$îĪæ(ŽÎä.C}‰ÁÉũjŲQŸNô„Ā4Ž(2ßnÜɎƒžœcƒŽ8â—ėž'‰ČÚۘœԑ۞§Ķ­\}OĨ*‘Ž´‰ąöúâŗõ‘ūˆŪĖVŠÖ~ŗ˙‡ę?˜¨c5l˙Ô¯ĐTŽ2sQY˙Š_ Š¯hLn”SëAû‘õŠÍAh?p>ϧ5+bē‰Gz ˜ یŅAĻj…įúė{tõöĢõŸy8įĻ9ljœö1.wÜj ‚ŅdNđ \F3Đäuä`āf¯ÎÍ´†% ȤĒö8ŠĖÔZXīCnŒā¤)ËsÎH `qÖĩԒ °Á#$w¨É˜‹¨Ũ}œo. åA B‚Ķ’OlÕëéėpļĖģIÚäg¯Ö¯`ņ‘× ĮZĢ~~Xs™Ķ=}~´Æ1‰mEŠR`'nA#,8Ģ]ĪüLū˙ėÕcũ]Åg#xl&4ādū´ķĐũ+2ė‘ŠÅöŒũ˜ÆvōB—ÎNHöéŸzEę0=̈́đÄTģĄQžĪ&Š\ØO5ÜsFJŦ`6ü†%ēuāãŋZ ē–;äĩ@Æ=˙.åmÅ Î~ĸĄÔ/æ/sn‡ ĒH`#}ųę*M…ŌéķÆYŧöŸ0ÄwŒũ3QD“ąļ1.é qĐõŌ•ĩ[¨œ‡$U‚Š~|ƒŽŲÆ28ãéOË\,(aefĀ“ dā}N:ŸÂ-ĩŌÛ ũæ|ÍŌ#H +ƒ‘ģŽüã5W(ķŧ…ĖEpāœ‚ØëÜŖ'ŒŒæĸTš˜BA„+”%Ā$(9Ęį>ƒ¯Ŋ> VF@q´•,I`XŽ ¤1‚Úų vGg1Ē K‚>sœ õ įėGREi{æŦæ,ģQYƒŒŦہį ŒpJš§ę]o"(Xăkœį×ĶooëU†ŗ#FJDŒÅˆûä¸[#ƒúãųĶX[^Į$ "ȑĸ(Ā*W€Agžz`ztæ˜éŠ>PbŲ“ˆ É;NsôāNõ*j2\^[*mDiYr o“9Æ:r0GĨ2ûS•%% TĖV€c…āŸNO€ 7ĻhŨ|ŨŠĀ¨fÉa>Ŗ8ũi’5äm÷#‘•X ÚŇEũjÁÔäķ„+ŠķU‘ˆĘķĪL`ãߞ¸Ē×Z„’Áæ,AG#ÆĀ†åH#s@ûO••äVTųJ¨ Ŋsž ķüŠōĩáŠÜ…d,ŽĀÛN0LŒúpy§>ŽŅy‹$t[käģO\wŨרŠGÕ^'v•pŠōą˛HQߎ õ÷ a<×Ëk$r‰K€äd~jē5ô,ÂŪ' ´„)Rŧå°s§B"­O̘KŖ@ÅĶql7 Á÷§­Iy|mļ1 Ęci01Čg¯~x EY–æ{)ƒ YwÆP”ņ[޸᎝Zk˙9crÁ ų_ĘÉq¸ŒôëV† >É<í •eČĪ@x=:úĶTå$…Ձ ŒƒÎÂßČƀ)ÛÜ^/’HePŠšLx;ˇsŽ1ĶĶ­īne´’VbÎ>PŸ2ŠûĮį¯N=ęVՒD`ĐH Š!Hû›€Æ}?•$đCō$,ƒ“ģ€ ÚŽŌ€+ZIvްŽäVf!š2KííÆ:âŸö›ā#ģ ŦLdō0: đNqô`ęąáO•!ĮŒ.)=}MIé{c3Ä@S?1Ķë@ĘKt‘€ŪJ‚¤īˇ9=€5^Ũ´q°ÚĘáN˙,áNFn5pęą0G&ÖPCmä8ü*4Ôa…†@IīčĀ˙ú¨–âIĻdX\Ø@S‘Œ{įR%ÅÉ,oŧ„vOã“Į^ I. ĒĀ*‘ą°ų’0ďu4öŊ#ŽM§pÁž^úôLŪ\Ē–;˛N”'/AR:ũ*KiŽ ÖãĀ‘‚°Áp€ķ§6¤¯1Ŗ€@áIõô50ēAx•‹†(¤đ?І‹ËĪNŸįŠŖŦĮ›{cųŠŧ§ĄKWčOū{І3JËũBŸoéR?ÔvG)öū”I:,ŒŽv…ū& p8…ZE3íĪX˙īĄū4S5§úÆĻ5 §úžŊÍLjVÅu4éhĻbŒRšJ`!ÍPŧ˙^séZŗî˙ãāũ|S‰œö0%(ÚĸĖ$‰“å_ŧ¤ƒČ#'ŋlVÁũO5NY`†ņā܁ŋj÷?\ö늸ԟ~ÕfL>•V˙ū]Įũ6_ëV€ü*­÷&ÛžfČĶcKQŒ?âf}Ąú̍MũĸúŠĀ¯#üFvŌø ¸ÆĄpéšÕĒāõĒvÃũ:ä˙˛ƒ˙BĢxĪ5éPū9jüL_­”{P:ÖĻv2)1Æ)E VF3ƒ‚zVrApoŧĶ B[,Ū`*F=:úV—ozĄįHڊ*K˜ž R#Žsš‹āqAëíFp9ā‘HzȌæ˙Ußš—ųš¸ŖåØU&?ņ'š8ędįūÕt}ßÂŧėoŲ:đû2ßøķŸũÆūFšÕ(ú č¯Ž,g?ôĖ˙#\đûŖ#ĩteģIúâ÷Ce˙R˙î˙Jëˆ×č+““ũSc]j` ú îĢšÍOa{R`ŌæŒÖEˆ4¸ Ņ@>”ŖĨæŒĐũ?ŖūtU?îŊ^œŽˆl€ôæ¨]j m9GIbÛAUã<ķ€}^?\U ­ĸ{˙:WR #Ɇ$ŧōzb‘CĢ$*JĖ&‚s‚G~ø=O¯ØõTmĨ•“vėPIÃ#ÉéīLļ‡NōžŅ”Hßī— esƒĪԊ“ėR“”a‚×#!‰œŒäPŋ´b ´ĢŖįt#Š lžÔÄÔā6čfĘ3Eæ´ž 2=Ŋ)í§[4Ģ'ī Œ`ī<õ#&˜t‹B0 ƒäŲßģ´)ũ¤ō mQca)Æå;”8ÆqÅJúŦy,p8!IŽ }?ĮŌ™(´ģōâi$;CDŦĒv’AgĄāT‰§[ĄåY—œ+@Ü0Oâ?™ĻÅwlÂCŌP60pAã×úâĸ[ËÚŦc W9ÛĀĘį#wņÆjXtûkXåHAQ*…'9'~˙Dt‹v]Žō•d~M˜Č‡ķ¤…ŨŠĘ ėWįa1œã€ëH×|Ÿŧ".pIQœņÁãÜuĨ:r?úŲä“1´Y$ ƒŒ‘€9āc—ĢLI\HvôP Č ‘Œg€:t'׀´ņæōBįēđOP õéųĶ|ËFģKU†6%_æĮ ČÜ?ĶF}Ë+ O* @ΏÎqĪãRÁ§ĮâA+PûPãÄÎ9ä ‚K‹'¸æœ(€>bAץõÍHŌiÂ@X@]˜¯dą#Û ĩé ´1X…ą ~´č´ĩ…#U˜)ˇ+‘‚0p2x'Ŋ9ŽåüŪFĐJō@äŽGâåŠt†ÎxËŽPˆpíî?OŌĄ‡Kō¤FiŧÍŽŽAL!Hõî4û[2Ü ˜ŦAØ9ā~$ūtČ'´–Ũˇ@"ŠPˇ0’z†Ÿ´€™Ą˛WPpB‡9ė;žƒŒj•"ˇiĄƒ!91äņÛ>ÃōĒËϰEb1’Œā¯=zŧĶāĶĖs#ųŠJžF1œ?Ĩ ¨ŋĘŠj˙ņâ˙JēŖŌŠęãũOĨCÜŖFËū=×éPÜŲyŗ—Č c<āuįÚĨ˛˙uĪĨUģ7hsđ€ņˇŽø~ĩh–Ųļ˙ķŌOĶühĒŪ]īĢūBŠb6m?Ô­NjŊ§úÆŦT­Šę4ҊZ)€”SIL=j…Ø>yĮüĢBŗŽÎ'lqN$Oc Úé3 D¤–(ģvƒ?L~9­L÷üŋ—ãTŲMGČcÖÆ>b sž0}zÕŪÎŦÉŖ!ĶPķŽLŠåĄ69 =Č<͜\-Ĩ ?ë>Ņ•H63īŠÕ˙ŽMUž˙[i×ũp˙ĐZ€L-ũĸûą‘ ƒŽ€åēUŠ„˙ČJOh“ųĩN0+ÉŝÔ~AlĶŽrqÂĐÕÁĶÍs:šĢjRį¨UčHė} WÚ°ú1˙õ°ôÛ§äp՚Sg]úP īY^'ɜ$ 2Iūßņ­jĻŦė-Āž))h¤¯lûbŠGeåMg-ÉH=ú‘‚jņū\ôŦT_.åXîŽģGA×úPÆ_žõ ”!F`0X¨\œ įžHíN’î8Žbˇ$ī”ž†éK=¤rĘŽā† @<ädCÍ4Ų@ŌĮ+G™å\ž{˙‰ö V)™´yÔ0$2ÉcÔUđjŽÅ4Ŧ ۉ8Á'qÆjõyø×ąÕAhĘ÷įũãūšˇō5€:Vöĸq§Ü×6ūU‚: ×NZŊŲ|Œq{Ą˛Ģ?JëaGĩro÷ß­uŧcŠíĢšÍ ‚Š4qYŠ1KڀŒĶģRvŖO#ũjíSĶ˙ÕŋÖ­öŦätCd)Ŧë­<ĪrĪæ¯´zŽŌOļsÍhf˜Wš¤Qž4üic-r:ã yĪOJŦtšL…•â; 㠎1øpFĢÍēIlĘķ$ áK ôíéUn,ofûM°¸0„Ģa 8Äā÷ ūɸC&ŽO Œ>î¸äHÉĮjˇ§XŊĒ8•”ŗ Ģ1ßג;ԐÍuũ›,ä$U,ƒË*zŒ=û~uBíîĻXĘß,R2íBāŪŖ9ä@#˛¸]=ėWËĀRĢ.ãœā‘“R[ZĪ­Ę˰<ŒYBąĀʀ9ĀäÚŠ­ŨÄ ņĸ‚‘(ÚĐ@ųŊ0 Ƙ ƒN¸XíŲ¤e|0iäA>ÃđÍGöKõ„’ŌwÄČ6ļ3Î;g#žsČéU>Õv–b5†$Fä‚Q˜|šõÉ#čjÚŪÉ=ÂÆP`Ü å6°wÔgĩ]@˧z” ā}øõ§`tÍeOĒH‹#,JÛw¤ĘTņŸĪŠ˜^ŋØ.gdBĐá°;Ų¤â1ŒsFßSƒéYoŠĘŦĘbBQ71ߌåK g¨íĀĄ59ÚTŒA]€9ĮŨ-éÔŒP™\wëúŅ´tũ+,jŦLcĘÎUd;¸'‚}ąPÛꎰĒĖ7’FæŨÉÜĖ:{`PÆßNŨhĀĪ^ՖڔĖ"uŠ0’Ã’0šĮO§Ē”Cž6%cģ’Ĩr@:ņøĐ–ßSŌ‚ŧfĒ5ãĨ›\4$2mÜ=@<õÎj%ÔËĘ`įĖVÚøa€29Ž} åũ´Ō3YRjS1‰Ėa"*îFāą Čé“SE„­K.âØqŒ û†ģPJ\öĻ‘ĀôĨP]Pļw@T`œîüšĄũ( Ę“m=XŸ1¨ 4/÷ü)ģrqüT[æy-–ä0 ĮüE6]CËē0ydˇ@sÁāSųZ…ËezsJŖœæ¨ZÜË4āÅJ䌏•č=XŌŲß4n‡{–c3Ō‹ÍEǚˇüxKūéĢkU5_øđ—ũĶPĘ4,ú:zåUŽīLs4*¸#ŖgžéLՋm“>ƒųTwZ%Æ$TŪÄeŠŽ;ŽV‰dų?ŪÚ,˙žŸ˙ )ˆĩiū }MNj Aû‘õ5?j•ą]Dĸ”Ō`bŠ)€•Bčp}xĢæ¨]spßĶéN$OcƯŦ†Ü9P=9đ­ ūĨQ1HnŖ)f‘…|´™RJāúsWĀ5Ą U[Đ<ëA˙MŋöVĢG—ZĢy˙™=&?ú PÁ!ƒūBsį´iüÚ§¨Gü„Ž3ũÄĢTد˙xÎúZAˆÎĨ7ļßä*¸ŊO~sŠOŸQ˙ Š€u¯{ ü(úeeûÆlhũs˙MöQZ¸Ŧ}xcˇ•^TBdčĖč+Kí0vž#ôqū5”šģ-&Ō˛%î)O|R#+¨d!‡¨äRÉ¤=€uæŗ#YWX%`u›“¸áŽŪ¸éÛëZ}ˇ5k OĒ›•ÉU'v[c¯})‚ØØߎ(4¤Æ)öãĨ 3DãšūoWqÅSÁūÅOrŋ̌:ģŽ+ÎÆîŽĒ2ŽĨƝqūáūU„:ÖîŠÆ?û†°ĢĢ-øІ3uč5ĮËøæ+ŦŽU‡ŨšõÕvÛWsžŌ—Đė ŠĸŠ)˜Å( QŪ€/éã÷mõĢžõSOēo÷ŋĨ[öŦätGáôãđ÷ŦųoŠŨ=ŧp´…>ķ‚@ũ1Z8ĒW?aķəb2A'ŠŽžŠVM]%ōØ,¤†…č9ę"k*ėȔ@É*F ŒúķŠ| a=˛Ü˜#Dc¸Āî9ëę?1JéĻÄģŸĘUŋØ‚q“‘ī@ÅĢĻ|rûI|æ gœõŠíĢ$nŠ)7°%(€ädŽįŌ•!°Æv"ǐßÁĮ#ųž 9m,[*)+Đ;— ƒß#¯AÅ 5?--ĖČyšX‘ŒįŋįSčö9!•‘Äe î8ĀÆ{įéI<6b0% ļ(ČÆãÂ㑌ûwĪ5Éb–*ōąJāî$“ģ#œį¨žžÔĀCĢ ŸĘ ÉÆYâ¤7`3NS‰‘ç˜ÅW#ŠŨŽžįųĐ"ą7~@ReT ˒Aēˇlį Ĩ:eąd 8ÚIs×vî?ŸĮڀĨnūZ6I|`„mŖ$ÉéČüéōęC,Ģ!ÆÖĮI'nīOJjé–čWū]ŧdsĩ‰ЧɧÃ$¯#3åÛqäwiĮ” ęIq*Ę ¤—$01ĐåN:ˆF†Ō!#æÆ3ÆŌ•4Ø#!•äŦ[ •!vŒ{cƒ@Ķ-ÄnˆŌ*¸@@#§#zõÍ5Žlncu 2Si!`3Œ=xĻĨ՚ã…T”T*Åp>c€sŽŧzzZSĨŎ%”uëƒü[oZA¤Ä#%“ ¨0q‚‹ ū'ņéīH âÃc+‚ˇ$má˛x=9įŌ‚ÖF(æ NˆÁ#āqž:ņéQ. ¨<Į^tų@`ĀlŽū”õ°AH˛0hY™žs‘øšlo§ČˈąT(䑜ôîķĻK}gžQT –‰‹  3§QŌ™2Fčî62°ĄJõúŌ’]5ew&V Åۅ†å@ ,vŗBÖqŧqŽ3ĩ@AéŒ}iĸM=ö˛ų,cčF \žß•:ÚÁmĨi÷ūČyëÛĨWĩĶ[˂Ydņ´œįžāõÍNĻĮjāC€§n0FŌGķ$p3ž*š˛IY" C(íĀŲĪéHtxųR?/Ū9œČ#‚9æ—û4sēfbŃerNUAį=~\ķĶ&€û™ K—d€ųˆųxú€áAūĪŽB§ėęāįƒœķøŸÖ‘tÕI„žfė1;YAū-ÞØ&’]8K$æã~z(ã!G¯û?­!ŽÆ#•XWË<”žŖ¯ĩ5.­gRí°0;Nâ dĶ4ÕĶ‚`‰@*äŒF #¸>Ŋ{ÔoĻFq‡?/^Xú˙ĩúP‹%œnL~H*J’¤dqĪčŋĨ>'´3Ē'•ŧ€1‘Æ•BÚp'q—99 ¯^[ßũŖúSíėDr̉Xí ãœÔū4 *úõSU˙ ŋÜ?Ę­¯č*ĻĢ͌ŖÕOō¨eôâ Ŧd˙t*ŠęÁ'v%ŲsØGųÎ:“K9˛ŒŒōŖqÚĒÜÁq4ōė-°œ}ōN?ņĢD˛_ą'÷Īũō(¨<›¯ųå'ũü˙ëŅLFĨ§úõŠĒ+_õ#ęjZ•ąAHhŖĀ( ôŖĩ0­g]ߡųė+Fŗîŋ×°ú!T‘؃đ öĀĪ=#ōīJzRíVdc¤‘™'\ŒžK('sבžƒTގ ž§ošũōH+zœÂ´Á=ÍVšæîĶũķ˙ šˆ×ūBũ”éøÔũę˙ûž;'ō55x؏â3ē—ĀŽzû?ÚīũT55ņÎĄqūđ˙ĐEB1^ūJQô<ēĪßoĖŽ5 ÎHRwŖØSŒiƒ”_N@¤‹Ģ˙ŋR~b¸įu&})ŌŽ  dø+cqZc¯šËĐãģ6lb ‡ dÚzãĻ?­iŋōč§é(ūĸĩOCÉŠÉ´;ę:Õ;[˛IšgvRÚ@ÁĀã°}œvė ĀnNÆãéWOq@ë¤Ė˛ī3,ŒQŗg.UŗƒÛqW뭚Ũ6Ĩ fāŸ—’Bã&Ŧí9õŖa *šĨÚE^:Ō$ö hĮZ@¯4m8ŖiãšÆi1īJTõÍ8¤ƒI´”m4„R¸¤*=hÚqÍ!€ ´Ũ u4¤6i9 aˇŪšWŽiH9¤l怯Ŋ4¨â)„iԪ֐ õĨ įÜM ŠUPi84¨:C&ZĢŠŒŲÉūéūUijŽĨ͜ŋîŸåRŽĨĮ”]OČ?•VŊžd’H—bž@9äqV4¯øņ‹ũÁD÷–ņČÂ@T‚zŽG×8Ē[ƟÚŌ˙u:*ļZx~_ũj*„_ĩ˙R>ĻύmÔŠŠģÔ­Šę%bLƒEĀLV}×ü|7áüĢ@ûV}×3ˇÖŠ=ˆr(´§§fcGķǎ'ũ2Ķũö˙ĐM[$(Ëzôǎ#ũ6ĖV˙Đh1?ãúä˙ē?JšĄúë¯Tëū芸éšņąõŨI{ŠĮ={˙÷īũT"Ĩģ˙û÷Ā˙ĮED+č0˙‰åÖˇ;õņ˙ŧjLĶ!ūņΤÅqMŪLú<:ũÔ}ĢÃō ō?ķ5Žk+Ã#ū$ņûģ˙čFĩˆČĒ[\ū&aZŽ&÷žOũ Ô܆×îČsÖi?ô3S‘Íjļ9e¸S[îœzSN)’ĢnÜĪ#ū$öÃ×ĘūkWUR?âSj3˙<ŋšÕĸ9¯3ņ#ŗ´e=[ūAŌķ×õŠyÍmjŲ{û•˙ЅcsÚģ2īáŋS—ũåčE6v~#ųАtĻN>Aūō˙1O­ą?Gv]đ1ŅGæĪ d¨iIGĖ:W_ũ“Œbōã˙?û-r–ƒ7ļÃÖd˙ЅwC=k(臋IÍ÷ļRZAįĨܯĩĐlp¸ °­; tĢ:ŋüƒČõ’1˙ŠŦ=ëHģŖĪžAZ\CŠwŌ¨Ėа˙R~Ļ­Uk üMZŦätĮa 3‘O4ĖûR( 8ĸ”œ @M¸„š\šR}¨#ĨqŧšPI<öŖ>ĸc?&H§Ī=(cÍ ’r(ÉĨÜ;Šņ ’qG>´ãĮQI‘@ ÉĨŌäR3@8Ļ‚y§ZCŠ@3'=i ĶÆfN 4ą=jCŽ}i§P1ģŽ3LÉŠ'ĐPy"›¸š‘ąM8Í #,sM,GãRSIŨÄP¤“Ō”b…æÉWš­¨ôI?Ũ?ĘŦ­WÔ9ļ“ũږटôĸĮŠIí[†,p^H ãŽŋŸáFÎŸOđåPÜØÍ%˸1ícęA ãâ­Éü˜įŗ˙ßbŠƒėSĪ83ūSĨhrĄūĩ1¨­ԏŠūu)ĨĐ 4 CK@(ÅwĻ1§Ĩg\ķpÜ˙œV‘éY×ũ!ꑜö"ÁcœĐG<ŌōĩY™Nū &XĘĸH˛QŽ ‡H?…7ėRyV؛lŽ3ˇp<jíūTX Oi8¸–XfEJ˛AĀûS„LПûdÆ­ŅÉŦåJwhĨ9++˜’h“É+Čnc˜#>ƒßڐčw¤ņ˙ßükVúGŠŌWC†Uāã8Ēķ߲7™™cTÜp?Úãôí[)8¤“Ņ´›l š Äkfŗ3@,Äã]Ā¸č)âYē›IGŅ”˙Zŧh>ÂąŠF5r.LCΏ´h’Ō\’§’Ŋ2 īíYæŌėg6˛q׀kĨ'ÜÆk:ßT킺C´6ߘ18ŒœtĮOzŌ”U(ĩˆ¨ŨF›1ä´š`ÚÍÔgåė ;ė÷#9ˇ˜ĀøVāÔíZ1&öÁm™*sœz})´-üī+sŠHÉqę1NiMŨ›PŦčĻĸˇîbÛ$ąŨÛģÃ0T•I>Y8‚OJëFĢhzŗûd˙áT-î"¸Fx[pāŒqî=ęn)($ˇ ˜‰TwhMFūŪâŨb‰™œĘ‡t`O8ĮAIŸj_ķŌ‚=F*’ą„Ÿ0”Ŗë@é@h؏ôqŸSVĒĩˆũĀúš˛k6tĮaÚyŨ´Š#4„ŒŌã=é úš) õpĩ7nivûĐã4qHTÚ§E) ŌqīŌ€ŧu4 j2)6ž´mãŪ€ÉÉ"Œ R8 ƒŠ^ëIļ“i¤9í@íƒŌz1I‚=(#یŨ¨#ž(¤N:搨ĨÁ4Ō .)ĻāôqHA bĶHõ§֘A怏zišS“I´ķH• x"‹‡+(ã4*ø´Ôúõ¤û}~j.ŒŖŠ*÷ØãõaHl͟™¸æ‹‹•”H =ÅDÖĐ´KAąz/§?*Ķ6KŸži ’Ã‘E՘ãKĩ‚0RŲ8sč!Ķڜö6r˜Ī=O\“īܟÎĩÆ7ŸË4ß°ô˙JwAĘĖË[(ŦŅ– Bˇ''' cų œzˇöžôŖė,z8?…DōȨqŠ1Å[6L?ŒS~ÄũœsNč9_bŽ:b—ëV~Ä˙ß\vŖėrg–ühē+,ŲÜŠĢ ŧf8‚ąƒÚϓ՛ĮDéz 4š qG=čŨFhœö ’:wĨ=¨Īĩ0–éFæāÄf‚hĒy4=)ŠLŒĐn8¤Üi䎔œŌ€¸Š7R3œPHâ€Ķ4„ž‚”ū€ũ($ŠBĊRF=éŨÜQ¸úSŗĪJBr€Fji4‘é@Xa'ō¤'Ĩ) ö¤ČĮ4 ija&Ĩ zSHö¤3Mlæ¤8Ļž´ĘUĨ4 CŊ* á›wúzTWŋęéI‚ĸqĻÁūāūU$ĸÖ)˧ËrCsž?f‹˙ Øq×hūTË­;͕Ũ\e˛J‘œp:~_­R%‘˙dųęĪãEZō_ûË˙|ŅLEË_õëũMHqQÚ˙¨_ęjSÍ.…( QLŅږ“ë@!ø÷ĨúRsīƒL OoËI”ãī ㌟¯Ģk|ŗ†<| ņÁãę=ŦŖ`Ųf‰%†2:ôüI¤ûŠÜ¤į öÁÁĪ<~Jw"ΰąG€¤rmÉå¸ÉÁÁíëÅI,!Ā@ÁBÜcž8ôâŖ[(ÁËcœ`qôî@üidĩ!mÄgŒ`pOĮüh¸ÕûĩÜåÚF$ōqĮoå‘D6ĢXļî=s““õ$Ę–H ŽHr3Œqœ`ôū•˛9âVĮ{€Gø~Ļ‹ŠÖč7ėLŋ1œņČ'#ßڔÄÉQ %äˇLtīžzcŠ_˛6ĐĸB9Ī~:âŪIČÁÁ˙ųS [ĄŲ%å›##Žr@rsíüéM¤ĀįĪ`@dāôĪų÷§ĮŠûË}î2q“Đū‘ Ÿæ>nFrČĮ9ū\Qp°Ģ žDˆōnv=rqĐd{gš_*o5XT0ķŽ¸ũ)°C$LYŸ Œ`“×gô?:(æŪ ’ä ’ÎNéրB:\31W'ŽxŊiĢČ~d,§Üduũ:~TįK‚īķ‚AŽ@Īø‰#ēWŨ¸Āg§ä˙3Â˜7¨í—›A’G#ŒgÛ׌.Õ@VÜ3žqĮ<ʝ‹ŋēqƒß€@$?J|ÍpųKš@ÎĪŊDĸísŒœ`öÉÆô?Kš(”p:‘ŒĀŽj5ÉĮ}ĮhÎ ãŽ=¸4ān՟ 2FrpA8ĮŸũz1ÄĪ$ĒŽvĄ<Žøôü(ynCąķœ€qīœŌ nŖ\g¨×­'Ÿt¸-8ëĩO=?Š?Ĩ ¸+ÜĒFI x$œŽŊšŠČĐžū8A?Ž:Ō$ŗ’›‘Fæ Ž3ŸķíI4“ Y1TQĮ#=h˜;ĪQ„MÎG$ôÛÜĶEĖÄq ėr?ĪoÖĻ2>#ÜÜ2Ø ƒ5–`¨A$íų€2G'đ4n. R"#Īž9ūb§7°y…R `įžOJo*EcŪÍÔŒr1ÛÜ~´Ôģ2‚0¤¯<ō;tŖA\`ģ”1b™SŒ.pN˙R*ĩ ¯"ądۃ€3œúš­ß Ĩ9vé÷p2qô9ü*Ô/ž5r0O9ühjÃZîJ9ŠZAŌ”ätŠ( 4ņ֝Ôr)„s@\2=ir !pAÍ/ {ĐFO›=čxž”pFE4Šõ§mã­|´pyíAž1@…­)‘ŽÔ…x¤ dR°É›hĮ4…})H曃ĪmāĐŖ9įņĻ’wį4cŒRÛ į¤`žôŌ(įœķH`GŊ4G&ƒ@ M=čläb‘ŗšCM=iXņM š@ûĐ:ŌüŠGZCŊ*;ÎmÛčjU¨Ž˙Ô?û´˜!t_ųÞFŅüŠ’ ”ŋ%UŲ†rö4ũūA°˙¸?•ßyWĨ2ã :ķŸ×H™÷Ÿō(Ēڑ˙Īü¨Ļ#FÛũBũOķ5/jŠÛũH˙=ÍKKĄ]DīJ=é)i€Phĸ€M'šp¤&˜9 žÔíī@Æx šÅŽ´P âg4zRđOj;€)†áßĨúPx :¨f 'g_$Ē€rH9Š˙Ī4ž˜Ĩ°;Ŋ F+’UYÃ(nInN3ŽßįšxKŒ…ķ6¨#§'œ~€~fŦņߌŌ͏ZÅ+¨§’BbČ]›zōrG#ŪψL7Ā@‚x'§Įb‹ų –Īr´*æ@Ė\HÃ3ĮąÍDŌŨ ,č¤c #§ĢĀ9¤Į¯9íF€×™L´ÛĸŒ¨Éb8OĪô§ÛK,ĨK€äāŽœsÔõĢC˙­H\p  IĻüŠp)1Å.8 ĄķÉúQĮ_ëG~´c4 AöĪōĨõĪz(4qž)ĸ5 ¸÷Į=ŋžlŌ`ô 4Hä3($SŽ1Ā Lq@Đ!ãŽ(ÅĻ)sHb” <Ķ s@qCgŧŌĩ„ŠŲÆ9ĀüyĸéôĨÜA¨[rJāåqĐāÎšÚ„k.1„,ÍÎWüh[+yr–`wcœõ žŪ R›$R^>X‚?F y'Š4Íä,—č“ǎ˛į~ #ŨšëJ×Ņ‹åpŘg‚:ã˙­L60ƊĒäėSÚAdd~”6<˛:‚cŒõíFīØLˆĄŗ¸ˇ#<` ĶÖęĀYA$ö䞟ãUĶN‹iÛ30ËnÁ¨^)SNU1eÉ1‘ƒ´מ hire§š8ŨUŨU@OZhš„’ĢĮ'ŸÃųІîČÜČÍÚŒpH9ÉüĒŦ63Áö&z62FœuéÍ .āäīd‹âę-äP†ÜX`äšwÚ"Āa"`‚AĪ\úNJél; Ŗåäá‰õ÷Ĩ]5͂yŒ‚IÆ?´YåØŧ’¤‘,ˆĀŠČé@‘Ie9ô=jŗZģiëo¸UpČuØģ>üĸƒ´2q‚x\Ōĩúƒ“Kbøps†iŲČãŋJÁ’‹#!LdÚÉųúž=8Ģ)§Ëæ†bĨ c´m䃏ķšv]ÅĖûŊ .xĒļ6ÆÚ8a?1É9äãų՜ƒSbÕÚÔpéKŠAĐS!ˆzS æži„sŠ21Ív ¨ÅG­0 JRE&ŅA\Ōã|¤ŌĮŌí>Z;ö §Š äö Å)4፤؊.zP@搊CØ=h uíŠBĻ‚§Ö€Ō‚;f“iĨ ņ@ ´zĐFH4`÷ϐhÛמ 5€M8ƒŠi<Ō€ĐŌsKĐr1HA态ÜĶvƒÖ”ŒĶH ĀšĀö§m<ĶJš@&ŅBã4m$uæ…Îrh*Ķ.ÔŋŌž´ÛŸõOôŠ`7D˙t?îÔ׍뀯 ûqF}ų5‹˙ ØŊ6åI=ûG3ĻÄ!Ovž:~•KbYÛīúkųŠ*×Ûe˙Ÿa˙Äh[¨_§õŠ3ÍGm˙éôūĩ)Ąl>ĸQ@ Đ0Ŗĩ@éHi{Ōj`€zŅßĩ/Oë@Ŧ4žhÉëJsG^)ŒzŌJNĨ˙8 4)OëŠĖÔcyŽŖDPs ’@‡ę)’Xܕp3ÃqlnɆ _ŧ™­í$•s*üŖĻOoÖ˛oî.ín]äpĢąÜCîxã­>kʛšhÚ\ī-ģ*_$äŽr3ĶƒMK[ĩ‘‰b6d†Æx9ã>˙ĨIs<ļúdŒ%ÍÉ.1ÄáF=‰Į=qOŌå–XÜË!#Ė*ĒÄnqœį§lQĖ šY ŧO,ā¨^Ž;“ŒúTēcģĘÆFšÃg“Î~Šˇ×ŌÁw&Āí0WoR~PsėGŠ,ˆî´Ēŋ; Įfæ#ĐÔĐä­¨”,î˜ÉđoØ$.@ ’F:UģÃqåFaˇqĐ1‚GųâĢb3¸ŧ)@ÄôėĄp>´ŲõuFLFë‡a"•(Î1ĮVë‘Jčj6žŖBŪDĶ–@XšŒŒä`|TĸKÁ*Ė## ”#<œƒĮ§­=õHC0 ČĒå :Œ N9Οü7ąĸI™•Ā c'ÜsÚĢ™v%–äzl×Ōt)÷Š€Éā`tÅhw,%´‰Ņ+@X"Ĩ´ö)]!3íAĮŽ( ä}("‰ßŠR=*(<ķ@\J:tīJzRuâ€ҁIKŽ(GANĻŽ”ęCԘFzSÍ0)˜4¸=(š 9Ļ!0hį4n4š?!Î0iOlR’qëHOá@ Íâ‚ŨˆŖqÍ!&“sõ§ŨøŌ?*@=é ÁR–íAaé@Ä$‘Í&y§nÉÆ4„āâ€Xҏū4É├”„œsHO~œSŗÆi hŦx„ņJXbšHÅq R#8§nώúŌ„ša'đŠ ÂF(ϚyëNcĪN)ĨŗųŌ¸î=iS4¤āŌ)É⁒­6ãũS})ËMŸ˜›éR4OųEßå,ˇ6ÂWI6’eāœtÎ*-ūAŅē)ĶŲÃ4ŽK°aÔ8īéT‰bųļ~ą˙ß?ũj*/ėīúx“ūųSŠm˙éū{Ôĩ°ũÂũ?­IBØmˆ(ŖP QEĻ CėqžãˇŊ€ ?­TmFĐ v™@Éč<}åÍr€Ô'ŖÂd>Xœ§Ė(PˆČįvOëV"ÕŧЅ }Ō|Ņ‚@ܸÎsŸķųĶüë Ō†ŠYpŗžĪÔ sô¤dĶhŠÛ‚­¸Ļ\‘œ}x⁍mb ˜Ü+}ÃĮ8`¤žÃƒJšŧlQ~Ī*‡ä㠐:įœSn#ĶîËIĄF†ķsœc#Ž ãĐŌ*iņÛĢË"į‰gɇö¸9=¨V ŠYJĻPoĀ åKtĪb¤mZŒĮ)bĀ$‚ĨãSמ)RÚÄėųQpØ@\íʎ3Īķõ¤šÚÂËHˆ†īžrqĪLī@O|¨´hÎ&RĘp00ĨĮøTpęÖíjŗJ0xØp¤¨9ü$FÎéW d‘ˇ#Ą9ô?­é–! š( ū°ŒäōĨ=ī!{;™^71DYXmÉ8āŸÎŖūŌ‹uÂHģ2q¸0 zq× ĪsV>ĮŲį‡-˛RK Ų#={qUŽ,-Œ›$–RĶā“š@cĐö“F O-Ũ˜-æē§9+‘yÁĮ8Í$w–ĖČ鑒~L zsÎ=úUy-,'S;…ˆāž#'â>žÔåĶ`˜,Ë3ļâdV㖠ŸĀF 9įąy™#)*‚ÎĀažbĄHõĪëHNšîHŲ!ßؘŸ+Î=x4“icdžYf2‚¤’ąmè'4ų4¸_pg! ¯Ë9Īn>â€!›ė7ĻXÃGÆ?mØ$žāsíŌ§ §ČAˆ…c‹ ‘ųāúÕOėÔšG/ƒ3Žjށvƒ€úŲŠäŌˇžã*°ÜĖCG¸a°NA>ŖŽÔa­l挊TeMÄü؜îüķßڐÛ[œ2IķBąrŨF úwė1QĨƒĮosˁ6q‘Ŋr@į9'‘ĶŌ ]ūmŌŠĘHĄļArs׌c¯ķ  8‘"…R<ĐčėįŋŋáYí§ąĶdļ,šÉÆvŽFzäįÖĸ“Jf’f]€660%JŽ8d1Įā­j_j2~ĩ†ēu˝2H…@™r2|° =AëÛ T“éˇ.ĻÕČb\€§fĮ~NëÔŦō"Xāgę3H'ˆ¤NH—xn8úņÍf-Ĩā[y+æ?9$c ŽÜŽ?ÕzuÜPÂąĨul€Áč #ŠÚ,î,$“ĀÍ"2ČĄ†R8 äÎ6ˇ/¤ÜBŪišE!UåäŒpx'ˇ××°_€â"ęÃvߟĒ팄ûzS_ĻsúŌ#†dČ5Bxf1Ų…26ĮOŸž‡9õ#jĨoŖēDĸeŒ*nÆ RCg>ĄZč8ĨíQÄĘ@ä–dāOr@īR CM$N¤ P! ›… Pv Ÿj\ŒsIˇšé@GĨ(ÁĻā9Ĩ‘Ū€ŒgQ•ö (Æ9¤ ëë@Fhã=9ŖožhØ) h;GjāķA\“@{Å!ÁÉ=iJ“íM)J0)HŌ§ŠH=¨Å4¨Å.ZBĻ€ĒõÍ!QJGĻ‘ĪmįųŌīAô¤+ŽiÄ"šĀzŌ‘I‚hŌ9¤ R=OJF¤Āi4.;RæœŖæë@É’õMôĨZI˙՟ĨHh™:tCÕi'´™ŽDā2žŒAÎųÅ.‰˙ č˙ŨÆ})—7SÁ3€Ļá÷‡b9ü?Z¤K!û%ī÷Ļ˙ŋ§ühŠ>Û?÷cüĮøŅLFÍŋü{ŽoëOĻÛ˙¨J} aõŊwĸ€ 3F(Ļ_î°$€AÅeC¤ĀđnŽâFŽEÎī—æĘmĪAØdgëZŽ BR09ÆN+-:ú8ļ,€2ÂH@(cŒ‚Aíõ  ßM†ádEš.˙™@ Į¯_ɐis ‰Bį2)āî$tėAäœķGØfû3¯–›•˜(bõāūžÕ$6ˇ{%ąųĸdb[!›' lÄÔÄM23)ÜeŠa€Hå<ņ’Ũ>˜Ļސlks†Ø€ ŋ{i\3Î1Ž9į­AĨüN­ ē6ÔS™FAČīķmäŠsE¨ˆĪ<1‰ūķ)ÃavãØyÍZ‡Lxn|Ņ0`ŋ) |åąÉëô¤¸Ōši.˜H˜™H”’¤¨SΧéœŌß-ô~Xļ¸Ų´āŒ†Ü¸'ŸMßäÔõ=ûOšģá'ĄŠ<ŧĐ1Ōi.îä4_3†1•8#fÜ`ƒÆAĨm.Cœ˜œŦ‚EfS¸üOļ0?ڝt×lq˜¨Æ1šP 6îŖąĮæ*ŋļMg u”ŗÚ?˜Ą3—Ú0õÎq͚åˆė&K)íÄĒĨÛ*Fp=ŗīŽ)°iŌGäGĩK “° ˙d’xåĒēŋI#ŧ(|,įHĮR3íÖĨ¸¸ģŽōDF`­$jĄ•U#’Žs@ŽGuĨM4ˇ2#"‰VL“ŋl$㌞ Ô°Z]$Ņ`62œ†' ŗi\}Fö¨ÎŖvŠ32€Áļ„ōÛ*r߇ ŸÖš5­Äî@]d8@S$į žF9Ŗ@š%Õ­ëŧÆ'`ÄąR$ĮĘSqęœm.eĶníؘ?ģ.ŸĀāžx$đĒëŦ\˜Æäˆ;… œĒŠdŨƒŒž´éõy×Ī "D'B˙ņGŽŧ 囁pÉÅlņ˛0Ü”¸9ƒĐ™*Ū› @ ‹0ÎÚÃ?tį¯\š’ãQheØĒ­…F<ãx-ƒˇéÖĒĨŨĮØíäyv™î ģŒÉ{gÉõ ¯öš€¤ĘÁ,K°gŽœūZYū7ËYŲĖĖs€F00ĮĻ{ՙīEŒ­c2Xe†WAzŲ§]jbÚgF€ŧqíÜĘŲ?08Âūūth*F/­ÚA Éå™ēė(/Á^9ųIã˙ÕL‘îžŅæ4nŨų—Ėāđ8 ~UiõAŊÄŲë„!ˇŒ@ĪüūBœēŧN7,Pø í,H‡¨äu .T{ëņÂaÔ9ɌÄ rx<õëÖŦŊĖ˙Ų×ā3Æå~錎q‘ØĶŖÕc—fØäMė˜Ü ä6ėt?ėšAŦۘ‹˜å\`§ ‚Aãĸžŧôõ Ōöi¯LO°ĄŪW‚6°QÎNr 5šÄQDW|ǏR1´sžøĢ’ęÅ Ü € KĖũM(ž€Į5Ѝ#GzvÁüiˆĪ“XK˛Ŧ%P1“Ÿ•UŊ{îÅ9õW‹yHŅ‚´‡æsü%F:wĪéSÛęļīn‘û‚§$Œ˙ēsôŠP°Üā€ģĘN=Ŋ8¤2ÕȕãHãmŦ |Ä—ÚsĮcÍ5uyI/äŠEX€Äœ– ž:āĮ^•zmpŖU%N)‚\jĒ]Y˙iŽ(ļ;F8ŨIéĮŽ)ˆĶ‰üȕÁ0sÁúžôęE °māctÅ;ĩ%4ŽzĶŠ§=¨Ĩ™ühæ€ §Ži[8íš@Nh<šÉɏÂâš?:RHF(läsA'psÍ7 īKĪZ7qFãé@gļhĪzMū´ Pî$f“J[ŋ>ôd“Å –#šSĀāŌ“ŽÔ…ŗ(„ķŠicN' 7gŠi$S2G­<ˇjBÔÕëɤ$äúS‹Rf€wÂiåŗ’8ĻâÄÁõĻd┷ZF8wĨÔëBį<ŌëBœžO0%ZIŋÕ7Ō”RMūŦũ*FGĸČ>?Ąū5$ˇŅ¤JœtÎsQhŸōéĪįR40<Ōcŧ7f#œ*‘,Ÿ+ũĶúQQų ũ÷˙ž¨Ē$ģoūĄ>•'zeŋú…úSé-Šę!ëE-% b˜ °Šd0ScŽ+Û¸ĨY ķwĮud “ĩŗœg •ŋ#ˆãyÚ2@'$cšÅeŽŽ†åARatBŦ1ĖĖŖ<÷ {Ѝ:ę[‹vy<žÆĐ@ į ==k=u™Ö0ŦMšUPpîʞzáG9pjÖÆ0Ûeį•,1Ôã>´ëK›]Ëk ˛…ÜĢšNÜ2zã9įۘĩĨ’EU gL7§¯?_P j<ËäHņ˛ąPqƒ‘ŸN=ęąÔ-cnFŨ„F?øĨÅ*^ŲĻcF*K‧%ŽNqŽô€Ą­*J`’#$d…<Š(ĖH㞜æ´ŦŽÍŗJņĒc°`Œœū$sM¸–ÚÖEķ4KįuÆh†îĖ|ą:¯pĄĮ 1Æ ũE@5rL{mÉ2)ķņ†Î3Įc=E ÖŖ(¤ÂĘ]UKnĮOĄ=Ŋ>•1—M I0ŧpT›’;uô4Đ,õPę@@Ė<ãŊ=ēP;’ÚŪ5ÅÃÆĐ˜ÕQ[ rA9#đūUÖŦ°G+$lÅ<Ā­2Œ‘ŒúŌ’ Û C,Kų‹´• lK`ķĮķŌŦ<r$Ō2ÆĀƒæxä žŧ9üŠ€ã9†Éeœnl Ā`uéßļ}i—éöČÔē˛Ģ 'Édö#8ū´ÅšĘîÉK•ķY€ Į?֝#Yŧ˛ŨcÎĐrJãŽ3“ĮzWí™>Õąƒœ)E9Ȑrz`qũ({Ûrą:ēŸ0ŽŖ'HČđ;úRŊ…ŧ‘…}ėb푀FôÁĒĘl%†Ô/˜ĒÎ,)ˆ`œt=h*ęV˛Åž<ŗ•R„ģ¸q×īIĄi-ĒoÛuƒ´Ąˆéƒ€h]*Ø`ĢČ €Ąƒō0Ĩp= #hļĮ‚ŌÆŌģ€si9ĮĻ) q›N.68Uhņ´ũ1Æq×Ŋ6ÛėķęW.Џ…C¸¨Æ0qŒô¸4ķ§!”HĶJĖW I83Įlöõ§ŲØ­ĢJīšüp8ė={˙Zb!†[ ƒĢ$HŅ9]¤0qŸ§8üjMē~ä ËČÉęsÛ=ņPļšĻl-Ã,š†Ī.ūŖō4Čte‹…—9]¸1‚G?˙× dŅCĻ3¨‰Ą,1´+‚FÆ>™ĪК­sidL) ˆÃ7PI*œrĀ9§Øf  ƒū¯gŠĮūŸ&›‡392g%҆ qÛŊ!–+2ÁdI2Æ8w0R8ūÕ!ąˇxÖ,¨Åļ9É9=ũyíT˙˛dkUS*‡0ŧnYrI8įŽãŽYZ=ŧŽÎcbĖH`¤6 Î ôņíŠoö]°#iue~ ā’1˙}ôõ¨î,íî„/"´ŠT‡c´œc'ŽN=*9tÉd,Ępf †+¸§¨ĮÔÆĶ.&3ËI´dāN1ÁƒL kuB^BŌ|ĖN2ä€#ļ…V:d2ŦĢįKËIœ€>đ†~‡Š[ Yíįc+…rI;€¯t<Õ{›+ĮyŠiq!ČPŧB 6‘vĒ€IĀ'Û˙ÕNĻ !FîŊųĪ=éŨŠ€‡Ŋ7&œzSr ëšLĶŊ'g>´„įĨ/nhĀ \ BA4|šâ€: 1ĪZ ! @R@ĪĨxÆi˜„ 6ö ¯Ŋ@¤8Í8Š4Ōž´0)¤ V^žÔŨžô™4Š\{ŠF^zŽi nëM%iYzgĩ!QŠnE*õ₸ĄG4˜ Iŋ՟Ĩ(¤›ˆÎ}*XČô?øđOĮųšIė]î„ĒČFíÄcüy¤Đķöö'ųš%žâ;Ļ^vœ˛‚šĪņøķøU"YŲnũķ4R}Ļīßūų4Uۀ~å>”úlęSéN8¤p ŅŠ)€”z^Ԇ€.ÉTî9ĀÆ9Éâ¨5Žž>e İČWĪ!˛8ĪbÄū=ō+AĐHŦĘ° ûŽãōŦ¨ôE‰YŲŽäl¸Î6I#¨Ué@Ž-5Ū(ĸ$ã,Œ˛0¯aĮĩMkgŧÎėÁ¤.ė:ü ž@8čúUfŅŲ‚,ggėé— Ī>Ø˙8Š/´ŲnތĢ"ÚT9åXuzņôâ€,=´ˇ"åŖ (!ˇg8 ןÃŌĄ]ÛrŦA ļzŽz÷õ˙ĻÚ›dXü•, ä ÁãÔøĶ†:ŗ´f4ÜX ާû$c@v)wƒ#ēá pÐqŸå×4Čė ,˛î‘ŠĘÎ 8$“ČÆF@#ÜU$Ōî‹îFQŒ•PåBęp1ۏŠĮJÂų=Ž ~đŒbB}9ƜSÄZLpʲ ¤bŽæÁÎņÜOԚēB‡žĐė#< rXŸĖ1üĒ {čĨŲ¤%J1ĖϡpOpE>îŌė\ÎņØî¤”p€¤2}~”€‘tĨŒÆÁšF‰BíÚp€=?ˆõŠ­lĖwŲËÅpYšĮÁsˇ<ãîãŸjŸVģšëǃnÎ00Kdsô==éVĘ!F]XĢ0p‡LûGŽüÜŧq´ŠF ėĀķ´m¤uį`žžĻŦËy HŽĀ’Čd  ŸĀëÔuĒöđØ]Eąģ†W.AīŒõ s×ßÖĻ6–¯ ĀXÔĸílÁ\įžŨ}2Ūņ. Ë2 8í$ļ@$Īb0!Ô,p¤œŊ„ãi9ãž˙Ō4ļđ\,ŒV9rėāœ`J‚=23"˛ČMģ!s‚Û›$téžN9äĐĻûO‘™™—#ģ!ÁĀíÎzĶEՉeXŅ6•%6¸ņΝˇ¯Ŋ6-)L#ĪvĢVB>Lšn8īīS6›?™ 9CÎ;I#<{ž”ØĻĶæŽ%Q qÆ{ŲĮĄ’ŌÅ.˙Ŗ`ÜPa@䟡Ī?\ÔąiqÅ,n$cą@*Ę@$Ë8Ī~iˇrŨ\LâäåB¸ŽTgņã?-@lĮL‚ÕĻ&EÜtũ:õĒĖą[ ÃHŠŽė– cŒŽ™ëŽ3ÛŊY4‚ūqLĄÕž\€ ĪmŖüâ¤ŋˇygL2ÆŠ1€<’¸du Ni0‚ĐÛ$a‰*B}z›%…­Î7rŖ‰qH'Šä UūĮ‘B¤G…ląe<&đ:ūõŠmtŗ…üŨ  Ëā“š›Ÿl7é@c§õÎiiZ^Ԇ›Č§”™ÜŌ“íAŖ#Ŋ&ę POQ‘ŽhŪÔ JhÁ4ģ‡ĨšāR)1րžâĀu¸Ņ€{ĐdsI‘éK€?@Ŋ&sĐPH§åA =¨+×&€ŒsԌŠ Ž!\P3ړ+éJ@é0 …4‘žÔ¸ z@7儏lR•÷Í!>˜Ļäqõ§‘“Ö™Å @4ŌFiÄ ōiĨE°ĄH'ŠN0h\v¤‹I?Ü?JQ֒oõf“_A˙&˙}ŋ™ŠŪ×^z¸ÜOBãƒôīPč\Y’2>vūf›t—Bá™ĘvÁvēĶ[ËøúQY~eī÷$˙ŋũj*„oÁūĨ>‚œi°ŠO÷ §šIh CEŠ`!ëKGzLûS’Č‘DŌHÁQy?ūŽõFKË(Ã(@Tü¯(898ãĻ2GĨ]¸†;ˆ)(ã}=ęŗéą:žųec"f, sŸ^Nic\Y+Ģ(`2î#€qVcHE¨T@a ģ{cĻ>ƒœÕS¤ÂÎÎ$pX’zItÆüsV ĩđˆŌGØ 2ŧ“‘Į~ƒŠc*E5ė*ķAĄ$Žü’ aõĀäzԖ×Biĸdn¨Ë äsčzzPŽ—ëįĮpYœ†Ē )\ãHnOĶđshŅ´F&™ŠžAĀ0@€žØĮlQfąĮ§žY‡ €¸~3“×ąÎ=é[i˛xJNāCžqœcžƒ'ķ4Ĩ;Β´øa°ŋîĀŨ†ĪtÎy¨—Kb` tŒ!&s‚sßßô  1ŲØŖ$‘…2ĄHā``wĮCŒžØŠ&´ˇžBīøáˆ#*ßAtGPĒ%Œ… •;[ A$ztÚK:ēyĘ>ųœØāú€z~ĩ[¸ŗWĶåĩ€„22Ny'’zúķL]>ŪFfc!bq#v@'ôdT6ÚtņÜĮ34yĖBäŒN>įŽGø2ãK¸•ä*Sæ2ËW%qی`úõâ€-ĨŒ,"ŌH`}Á›ƒœcc=ēz´ÄŌâ‰QVW Ž3ˇ‚1Ķž§ŽOPZ]O3Čģ„Ff;K”#îáēg‚§Ž=Š˙`š-ČĄäŠRYŧÃķ 0ËØPģ 8­4RŗŖFŖœtQ€sŒôÅC&ŽŽģ|Ō6įoã,ũy¯j‚;=DFŨĖ€/Ė$=a†;’}ģŌEo¨Ą™S†à ģ'įšĩ¨Y=Ķ#GåäG"eŗÆā L~ĩPiW Ā”XĘãåQœņČ+ĶŪÍødŽĨüĸH;é¸‘ĶŒS#žö=ōÚŌÎ×o˜×‘ėŽ8ë@īí§™ hX+#d–'8ęãßúÕHôûąn3)YÕ×-æ Ô1Į$ã×\]ڙ]Čd}ûæ0d>¤`œ@)-¯æˆĮ%÷ĘŲglIč=G­bI,īB\*´¤žŦØnqÔį>ž´ĻÖqtC $bÍåT į=2įŌ–ËR¸Û¤†"Y9lŠbIČäį§ąĢwWŸf’%h÷ A rŨĮˆūF€)Gs|̇¨#m„“įqķ#8“@–øĘW%œČûL‘/ɕį ŠÆĒ_aKvÚōÎ Ÿ¨ÛͧJTՑŅmæ>cŗž3ŸĮ_Ū VŒF$°čs‚@#Ąį<úû’ūVķŨ EļgR¤ƒž™Ī¨­,ZŦmåĢ$‡y6Đ劀FOpyõ jVŌH˜ŽFpû nėg8č?J§ĖÖööŗIķŸšf`HŒļNxäõíųRrE„JË Š FâzŽÄî•Z í6(žRFė8),ƒƒƒÔ`ž” k枌íŠ3ēGD>f3´žrp2xãØÕNYRĐË ˛ēø]š8Á=zãĐrh7Ö%ŠõdŒ‘‘Î1ßĩ,—–,s#ĄØx% į8$üāqہļ¸/qq B0Úq×#8úŽ R\_,7iBÅúa‡ @#ˇŨ˙•˧ģĄ2Ģ3ČgģrŖˇb1øSĨ–Ękˆ‰Ž9Ûfá‚Tí$dõėq@ġÕūPōƒ"Ģq‚6pIúŽ~”ˇˇ°ÁxŠđŧ’(8ۅÜÛ@䎧ƒĮCS‹;pČÂ1ĩHĀė?ĪŊ,ļ°M'™"n|I=ŽG~ĮšŽš´ •$ō%@?ˆĮGĒÁ Œ…y„mĘį‚pū'ˇLdÔÉaj˜Ûí¸ã‚HĪ<ā“Ö‘4ûdōvĄSí;3ĐķČĪ89 Íu.÷b@áFzœtū§ĩ@ڍĸōÛ˛pq°’r <_zš[HϘJá‹W†#rú™ãQ˙f[¸. `)Ũ’ôįF "ßŲ€J¸`“´€2šĪNāõü=ŠöĀüĒčŧ´ķÎßš éVÆ=ĨXæ!sČQĶņ÷”Ų4ČåûķJĮn ųN~`ŲÆ:ä}ëF *I`ęŦģp8$ĶŽ=đE<]ØŗÆË$lĖáTŽ É§ĮãQEĨE Šë+’2H!H'qa×Ũģbˆ´Ĩ‰ĸe™‰fŌ@9Ú¤ĖŌw˙ëRŌ Z!Î)š4§Ĩ&}¨ n€N9 7SŒb‚qNĀ!&”(ČĮJ2;ĐnôĨ øĐHĪJPAôĨp¸úPXúRäuŖ#͊BÜir@擎Œƒ×ĩŊŠ7sJ@¤ ĀíH[8Å)Ú;RpzPŊOĩŽh¤ f€(Č4!ĀڐšR;Ō ‡ŌÜņN*=ZB­! SIįԜqŠn4 BrO­7>´î QsųĘqœqI…íŽ8ü+ínnĖĀĖTŗä g8<ž•d1ĪSū4rƒmĒā`öã0:qMÂ"$ 2 zųŸÖ¨îny4aÜĶå"Ųĩˇ*¨`ˆĒghØ0ŋAÛĩHČŦT˛‚T‚ Įŋˇ¨īlįqüč?÷.Pį--•° Œļ† ûįķĻĨ´evB‹ĩˇ.œЍ˛|Ņį8ū*9Cœ”iփˆ c'ą$~Dįņĸ-2ÖF ” ŽX]šÁ'ˇ¨„ŌCšQq&xj9XųÉ­í„1H_2F.åA“ߝ?Z­“A ČĖfŒŊI€Fˇ'Š“í2uÜ?*ĖŖžhåa΂M2Df‰;|Ā’B€1‘×ۚFŌ` (wØ2Q¸1ÔdŧņŽ”īĩH:āĐ.Ÿ=ŌŗtB4ˆÆ1+‘¸`s‡-ÔäštRÁål—SîS°FŌ ŧûĶøSĩš0Ū„€iâíŋē aĖ‹H@ˇ0N1š\{ÕQv¸0(û^?ƒ‘ם˜s"Ö(īUžŲĘ~šŖíƒûĻ‹0æE‘×Uĩ¯u#ōâv‡ĸĩ+0ē,gŽi;T&í=¯Ĩę3Ī"‹1Ũw4ኮ.ĸĪ-úS–â2@ķŽÔ|‚éõ'RŌ”´†4âātĨ<Ōb€ôĨãëAĮ4›i€`PqŠķAëN4Ũ§Ö—S° ˇ"ŒPTúŌm9¤€Á¤+Ôæ€y¤9 ôŌmĪĨ+ āĶHëŽôĄsČÅQAČP&M)\Ķ ‘NbĀûSI=úP1Į8éšfjROĶڐqĶ­NzŌ}¨É zúRĨM!¤ĶIë@ ŒĐ;ĐI"šIÅ9<ĶJæ—'Ō€yäR* € 1Mät§(=čņI'Ü?JQDŸpũ KWŅ?ãÍŋßoũÕÖ<œU-‹6˙Ž˙ĄēĮžjĸKēŠ2(Ļȇî“éũ)ƛú´ÃųRæ’ ŅIŪ–˜ⅈĐsŸŨ5PΝ~ãũKVMܒÅnΆqę }įéW9“zĐyņUlgšus2ˇŦšãžôÍZ'Šĸ ũŖtOĸwĪcVę­š˙Oģ>čÆŦƒĮ< ŠhdQĶ­0ŠOLŠ^Ũ( °¤ ŅÔņ@ÍEs:ÛÄdu, €vŒž¸ŠE$‘Ŧą•q•?Ķ‘úĐĀĻu8ViĸÚÅŖ ` FRĨY†tš| ņ†āŽH ū ÔO§Ûģģ2ą,1ĮŽsŸĖN• Å´AŦ )ē1#pÜįåc“žų搓4ƒ€jSų͏.­e‘æÛ0 6 đ5;In­ĸŽ0¤Ŗ ãm>Øę}?ZĨĒ_ÜÛŨČąHUB‚Ŗh9ãžHÍh^ÜI˜xS|Ė@U “Éũ3QėÔ[}ĮĖŨŠbÔvšoŨ˜B€0v×ˇ9æ§0ßųĨVRą’9.GAޏÎOŠČĻBfpV5ōɌrH#vsŸqŠ}ļŠö—EXXnlON3ŸéФ–kxˇũĄ? ādãsЎŊꠃPLâGn!ˆÁåšõœÔ÷WōAp҈w…ÛÎFNCdū¤MV2Ø*Į$r1ÆqŽ3žIĮSÁP6ôÁāĪQĪüÂŅ*Ÿ1Y›næä‚=@ Ÿ­,—Wų„LÉĀCķžxč8÷Š×TŒÄYŖpāŸ—'¯ ˙ĀM/ö­ž×ÆYŅC•į’:zã#4ô!ŽöũĸpĀ>SaFĶëГZ2I4(Ķ.Æ'äŒãÜ d7pM+ÅåãÎG>¸8=ųĢ1ōę=Įn´õ4Į֔R”ĩMĀŌfôĻäĐķE7&‚qJā8ŅLĪ­(olPģQL'Ÿj]Ô\Rv¤-íH[Ÿjp¤Į4…¸įŊ&á@Å'á@98Í!lgրŌīI¸`QŸz? Š7w4LPOŊ&}čbŌ“īIŸz@!ö‡Ū‚qM'Ž(úSKR“žëېãĶĨwĩ0“OČīHqØRĨ*’zĐ1œ`b”P1â’O¸~”ĸ‰>áúTŊ€ƒE˙6˙Ž˙Ąĩ+Ƅo`š8įŒÕMū=ūē7ū…RßDŌE…]Įž8Ą˙ĨĄ,—)ëEeb˙Õŋīš)ÜGEúĩú SŠD˙VŋAJi aAĸŠ`% ŅŪ€"¸˙RØŦ˅‘\m?)Æ Œū8­+õ-ôŦĢį i.âT2•Ü8ãƒĮ5q3–å-"YĨG–%ÆÖųąœr99āū§ž+?F -† ßyAđ;āf§žū/#ļ}ÆIxĀœÖ¨-ōonøãrč4ŨICũ™eZ^@8ČÚßáNĩ#íˇc#;ÔП”R_˙ŦĩôÛ˙ejÎϐ~…CY"3eoũÂ2;3 OąAØH´Œ?­YĀĮ4qÆ+ÆöŗîÎūTVļÉԕßcDIËr<šŅ˙Ĩü„Į´'˙Btׯ‡mĶMŗŠĒJNÁëœP((­ĖŠwōÁ>ÄD Ë%‰ú ~ut¨ĪĮÎ=Ģ;TvŽd`6’>đv |€÷õ¤ŋĻĒŨĮŨ˜?ßoũÕŖŪĒ܏ôģO÷Û˙A42Õ¤õ4d{zPFzāņõ¤÷=O~xâŽ}čëĶžø§ŋQj€ã́úsT€|ņīNÅčĩ‚ãJŠl•ã#>ŋãM1DH&%$r!¤ĸĀFĐBÃ$ ÁQŒqūôĻ›hĄōĀØAÆų56qÅæ‹Ę˙bĩÃ/€1Éc=.§ķ4 `Xˆ”N2208ëíV(÷Ŗ@špEŒčYúœžyÉãęjxĮīëũi”ø‡īę?CĨ( RŠÍëMĨ#ƒE "ƒƒE&=éØ$bĪJ\ u ;Ņ`âš0iHĪJM´€R3I@"‚9ͯj6ŒuϐqKƒšP9Ļ‘’riXņMĮ<õ Ú=hÚ=h#'J9Û@qŠB´˜4œĐ•¤Ûî(9¤čúR¤$ĐA¤yã4) ķHs@GĪJLPri4„w&€;ĐA ô¤1¨ĨZiäĐŧP%ZWû‡éH)_îĨOA•ôoøôoúčßú¨îī‡L^1“Ž=¸Š4s‹GÆ3æ7_÷:{¨VfŽUĀa/­4I[ûA˙į™üč§yÚwũ2˙žEV¸Ÿq~‚–‘>ęũ)M$DĸŠ)€(ĸ€ šâŦéœĮēŠvU$(ęH+JįũK~“~ę–s8]§qŨŒ­hŒįŊ†ØÎ÷ou rp ~D^Ãņ§Ék ŗ$Žšt䑞xĪ<āöĒÚ@QjÅJœš'aG°vüyĢųūTČz­aŒßŨHQKŦCmä ‹Æ}9§ßs%¨íæžũ>VĨ´ĪÚ¯3˙=Gū€´ÛīõļØ˙ž‡˙AjÎŽ”ߥPøŌ$ ûQëš3é^ču"ūBY˙ĻGõaWj”?ōoh‡ķ?áWkÚà 5~&÷Ŗ¯fŒÖæF^¯¸Ël›r„ą?.qĶŽ‡ˇoÖ´Į@zgÛĨfjąŧäEäHJ•ŅUŗĀîOúV„JˉsƒÆ3HcųéUŽãöĐ´Į˙5gëUn?ãö×=ˇ˙č4uųōÁΖßĘĢÅemå¯îT@ÆxöúzՍCū<.1˙<Ûų„Qė+‡&­gcĻ‚N÷DĘß?ęČú*9āHŒOH§ÍAËą$Á$wĢ„ÔCˆŊåOæ+–I9¤ÛÜÚq\­ØģKøŌ”WŗĐā (Ŗ4wŖ>”RSuëKIš(´øÖĻ}GķĻSâ˙\ŸZ]ni ZhéN™Đ!æ“§Ĩ6€ƒAÍ('4‡ƒEĀ(Á “Fã@<ú Až)Aį§Z3֐'4„œsKģڐ”ąFN})ÄņԚNhÜvæˇ<ŌätŖp q@ š Ôš) ëĀâ€Ä LäŒŌ–čzB@<ŽE!cĪĩ&iIāg4qŒ‘Á 'Ž)¤œūâW‡†!'ŠLõ h$ 0“HZœOm×ũu˙ŲV›zŌ­qŨ›˙A5oú´´QôáŪdPsŠIí˙čMWMRˇņ2˜žŅ'ķj¸z×ĩ‡_ģ‰ÅWâaŠQ֓4væˇ2(j72Ã,*˛*#•ÉäcƒÛ¯5=Ų”$fįĖPØČ'éרĒzwēEØäęŒAŒ‚sŽ~ĢS‡jC1üûÜžæ”(aŧˆÁ)ÉáF9āyЌ“î°v‹t¤6᝸ād˙õĢK>œžÕVø˙ļĪõ< vĄÅ…Ν”ßČŌ/ 3íü¨ÔãÂãūšˇōĨQōŠāÆũŸ™Ņ‡ØZ‚ëŦūš§ķŠę ‘ķĀüõ_ęk’Šũâõ7ŸÂËŋ_J(4öĪ8AփE€īEŠ)€¸Ĩ¤Í ĶāæeúÔu$ĖŋZ]ˇ4…- ëKŪ˛7 CA¤4\bŌc֌Қ J.␁KšLЁAûQš3NĀ Ō`Rᚠ¤vŌmėŌ@9 “ĪZ\Ō@¸ÁīA^ôϐĐqAb–ƒ@ *) Ķ!¤vâšFy§C@ÆcœŌü鯐Đ^i¤SZCH­*ņHM(9‴7Ũ?"Ķ›îš–Q_G˙yũ5æiˇ2]67$cŽ;H?¸—ž%oæhšžĖŅ2œ‚9Æ23úfš%ũēúgúŅS}ŽßŅīƒūUØtPht~H4†Š)€vĸŠ AvqëYwØ63nV Ą^žø­K¯õ_dę3YFŪJõ¯õéšŅOr#ŠĖ¤lYCœŒ7ĄéĶü2écģ:œ2+l ‚Ąˆ9ÁäúķKĨ°6j2‚¯Ôƒøˇži’S˛ķ ÕÉų|ŋ4ôÎz/éÅ-Đkĩã{—˙^–ˆš?ôØ˙!IuŸļÛg? ŦĢ ˛éüh“ŒR⁞}(šņâ;q˙ ũŖAúĩ[ÍSļĪÛî=’1˙ĄUÃ^ŪøQG _‰Ũëb ÍA¯íËDĖF ⑓쑐p;œ‘ĪjĶg¯ųíYwĒWS…ü˛Ä€C|ĮÁÆ:œZ`{ŅÔ5VCJúå'ķZÛ-‚3 PÛrOôúĶÚPœäyOüŌ†]G› ‡rŋáOãĩG¨˙ĮŒ¤sQO+ÎÆîŽœ>ĖQPĪūž×ūē˙ė­S÷Ēķô‹_účôŽj ÷‘õ6›÷YsëéAö¤=isÅ{gž%AšS֊BqÉŖđ RQĪ4ĩ-ˇ3¯ÖĸôÅKmūšitwF€Ĩ&tŖ5‘¸‡­!ĨnœĶMgš\ķMisÍŖ4†“4âhÍ4Qš.ŗHM&y Đæ‚ifŒĶIæƒ@ÍZhéÉ ô $öŖ4Ū{RhƓ4œži 4Ļ“4€šBi SHi !$Piϐ“ŠBŲ ŌCÍ4“@…4¨zĶ §'CHdĢNsōšjži\üĻĨôžqé)ãׁQŪ%ĘLīp˃“Ûķ§é‹ŸúęĻÜ^´w%0ŠęÉô?Κ ûmĮ÷ūũ+GrúûęŠĸM>“4Ŋ…% 3E%ƒE¯wūŦ}ĄŦËįŠ;G{„ŽFĐ{āp}ÍiŨ˙Ģ_ņŦ­H9ą“Ë8n9Î8ČĪ?OqZ-Œåņ„ŅOh¯e#įj'ĶßŪ‡ēeŊKa!†I‘Á9Āūgڍ;Æ=¸ ‚:äu>įųš˜Á›Í1¯™ŊŪ™[ P´ņ‡RâV;r <äRÎ3¨Á˙\ßšĶŦ1åĘqɕųī÷$ŧę1{FßúÖ5ßî™Ĩ?Œ›ŖĩbŧS¸†Ô˙Ĩ]ö”ãĩnĒZô‹¯÷Ôãĸ­âŊĘ ÷qô<úŪ`1EŌ“ŽõŠ[‹2éOŗ~\ryíČëž}€ĢXĘāņŸoéū{V]ĪŧnYz€~\õ'8īžÆĩFx˙?΄6ŒÕŌļ&Ԙ)9ĀØ0\=ÁëúT˙h[.į\Gb åzžũ:*ņĒ­˙!(ķ˙øˆÖ§ĀËtfƒũhí^Ō84‚–tĻzŅڔŌv fŠ3Aë@â§ĩ˙\*ôŠm׏Ą¤ĮŅ ?ĨúRKšĖÜkuĻâœŨiϐÃJ3@¤Ī4§§™ h4´iëAëHzŌäw Ŋ!4JC@4„š &y ”gŠh Đ“A¤&ƒŌ€=Š âŽÔĶHž)3Š !=¨KR3qHi§Ĩ!jLķJi´Āĩ0žxĨ=)š žiéQž´ôči2ŌŋÜ4Õ4¯÷OŌĨ”ŠÚIųŽ}¤ū”님ÁŠDR䞃ß8Å3Iû÷~ž`ūBŸ=ŦSLĖŦCŊÜgéM ’mƒûņ˙ßcühĒ_Ųm˙=ũō(Ē$éõ¤ õ¤ `hÍæŠ);ŌŅ@îūāúÖNĒĘ,dŨ™œa3´“‘ßÛúV­ŲųĶ5‘ĒC<Ņ …Ų ã¯8ëÆ3ŒûV‹c)|A¤ŸôȏËÉl/K˙×Y?ô#M—F?h›ų­:Ãū=ßķÕ˙ô3M“ūB)˙\ū„+ Gđ™Ĩ/ŠĨŖ¸¯í ´˙_tOŧúÕĒšūâÚúå!ōđXšI9Ú3ȤÍĐëđ#úš÷hÁû8ÛąįԗŧũMî‚0;Ö ÖŽæŅˆū•Šepn­c™“i|’3œsŽŋ…hĶ] M=Šw0ÆÚĒō•Á ۈš8ãôėkKëŸĮ­cŗgX@eS‡#nã‘׎ŋŌļ}ˆÆi!ĩ°Uf˙Š˙×˙ЅX9\˙ČH{Dô!C&Ŗ˙mŒōĘ?ņáRāÔZüzßrčBĻ+ÍĮnŽš?QāÔ3ôģaîĮ˙Šęŧ§ũ6Ûūüŋúõ†ø¨Ö§ÂËg­¤Í¯eâ“´†˜(Åĸ€ PzŅK@Šm@ķö5Šíqæū“ØqŨAŦŽn4õĻŌž´” (4Q@ š(4b€SOZQÅ€ŌQE­­ƒ@ =h4Í”R Ōž””RNE.i ”†!¤÷ĸŠ˜yâži†€M=iĮ4Ķ@i„SÍ4怏zzt"Ŗ#š‘;ŌUâ•ūéúR îū,¤UŌŋÖŨ{H?¤ēļœNŌDHŸ”āĶ´°<ËŦ˙ĪOOaCÜIĶŖˇ¨ČÆÆŠ ’ü˙Ū—ō4UOí6˙ž?Šĸ™'GšCJi´ fŒŌQš 0 ģûƒëU Zģ8UúÕSZ#î!>´…ôĒIo0ÔZS÷2NíųĘāaqėFsM˛I,1ösĮY$˙Ѝ#sŠ sˆū…Nļ‚H7)2Ä.Ė’O\Ÿ_JIá”܉bt\.Ōß9ⲭ(8ŽĨĶiJäæ’Ą wĮ0ŸlGú_÷a?đ"3úW›õZŊޝk ÷Bãũ˙ũ”T"´'Ōīd¸’LÃķļpXņĀöö¨Î•{ØDāgü+ŨŖ%(ˇĒ<ú‘nMĸ§ŋoéXū˃×Ķ×˙×YGLŊ"4#ūēõĢbÆ&‚Ęä:(uĮT’–ÁmÆ >/ĩyáäļâģ¸ÎIô÷?[{{ CíJ23ĶĢ+Ûü*¯ÚY˙ĻG˙BgžTrcÔŠąVh`¤Œį<‘ԁĄum~ŽŋúĢâĢj9û!ሠ„íäãp'J/ îÍéĘ0¯?JJĘú4ZIęOUä˙ëqėßČPo`ī PEgꗀKnÖķa—vJāã cÖąÃĶ’ĒŽ™u$š^ĻŅč=h<q\×öČãí_˜_đ§ VätēSí…˙ëWŗĘŅÃsŖíŠJĄ¤ŨËt˛ųŽŦPā1‘ŠĐŠØ`}¨ĸŒĐ 'ĩ éJ9ëETöƒ÷ŋ…ASÚ­>Ãü)=‡ ŅpRQԐšÎÆãN3IJzŌCFi3E- Ŗ4f€ ņFh†€Đ(Ŗ PhmŊé ĨŽÔ”„ŅœĐh aM=)ŨŠĻ š3A¤ÅM4Ϛh 4Ÿjv)§­!íMĨ4†€ĶĐņQš‘:RAJßtŌ VäTą•´Īŋuū˙ôŗÜÅöŽ•ČÉɏoëFÃŨŋũĸx`‘Ęŗ|ė{ŸĻ)Ą1›ô˙îG˙|õ¨Ļ}†ųėßĨB:x™æ”Ķi¨P(ĸ€ŠJ3L ÷gä_­T$væ´YUą¸g*&XTí` žŨęĶIĘ-ęS&ŒķW|ˆĪđÎÛÅĪĘ8ëNäōy”ÉĮJ†öWŠŅ䏗Ž}+Gėņ}Š ŧ\žžŋĨCŸ—Q¸ŗé1ã€0 äõ## ÅLÚ ŧkâ6ãæ6p3ĶŽĩ´m#=I>Į(6‘ß'zûQt>WØÃM]âWˆĢH@Æāq0QúՉn.DJ#  3l’z}0:Ņk˜î8$ Q‘HöHĘĖeû¤¨$~>Ôî–Âå)[ÜĮr @xō=EL=ędĶãˆˇ–n98fœ-NxĶ] Áô  ō9ŠÍŠ=4†ÕķÔ~Ts p}ˆiāõįŪ§û3ö*:OŗIŸá§t¯ąäį=*+‰ŌŪ?1ķ´qГ׊5d[ÉØøÔ76q–Ã!uŽÄu”›AĘŅ]o­ĘŠ ~n„ƒīūĨķĸ*X:=Á¨Fˆ (ū_B=ũŊûPú9*Š7(Q‚0Ü䞤Ņpŗ%Y p¤2Āp1Ûŋâ)Ū\L9D?PjĒčáB†ÜĀAp1˙ũM[‚ŲĄ#ˆ@HäāS¸š}î \žpÍ;4Ĩēߕ!WÂ*.+y'ĩ8É}Eøĸáo h4™ĪAAéÍÃĨX´ÆķôĒ ņšŗi÷ÛÜRl¨­QrŠ!éYÜÜC֛Ji(ĸŒŅī@¤íKŠL{Đž(Ŗ†€E¤4ĸŅHzĐIKŪ“4}h4Ph÷¤ĮϊC°¤4´†€ŠBsJzRī@„'ĩ4ķN4Ķ@ äRsۜiĻ€zĶM8ŌiÍH*3֜ %ã÷iƒ4ãŌĨŒƒMû÷8ū˙ūĘ)—Œķ4‘Čšc߂0;S´ãķÜķȓú †é᎙Ų2c'ŒŽLÕ-4#û-Į¤Ÿ÷Ņ˙)ßÚũÄüÍÅsŖ4†”ĶqŠCę-Ŗ4či žÔSĪJáŪėå€$=‡z›ĩE;ēíũâqĶØĶžĸiX†8'Ā%öœį“ÆG}InķHĖđ 8>øúĶYŽ3÷Aį~>˙į4'#…r:p=ūŋĨ2v$HŲ#| ģØĪôpΰ= $į'}yũ)Lŗė?ģÁÆž™ūtųEI87ŋĶ4Á늛•$…ˇ=GųĪķ4öiÕÆ c˙×Á÷¤2~čŒāHí×ųԐĖe /§9Ķ­^ŦHŪc €)ĪcŸįH$•ä FĀOãŽsũ9¤32—ŨÂĢcĶ ãüiĢxģ˛ËŒã䎟éBˇaíÔW¸b[j đFr@'?ČŌ‹ļ9ũŲ'ņųũ|S;UJđ[ļÍ0]ŽáB‘éĪđ >`—[˜)Œ‚Ä pĨiČg$€¨zwäqÜ,Ž@{ž‡œsQ­Ō3”`Æ{r1V1øf“h=‡?ĨŸr´Æv7#ļ3ß? 4á$LŽvüМđ;TĨts֑!T(ášÅŸr#4D sĮNzāūĻ•9"- 6HÁéæ*FĒ/ÔŌPŽŨƒiôâˉdˇ 6 Āãú@6ŌCŲČë׏ņŠ ā  cߤ6ņį…Æ=Īî‚Ė`‚Á‰<õÎyũIüŠØ€+a”ōx? ŧdä)˙×ū*O˛ÄF0H>Ŋŋúßā)h+>Âxc’ ëۜķøĶÕË$ČV䃓žūŲ¤’“nâNҁĶqL6¨T€ÄÜî™ũ(Đ,ûÆ"šËŧ˙ë¨ūËĮNAëŽ īJm1'Ļ=ķü˙•)ĩÜ\ŒžŨē˙0Ô’Q$Ãā°>œcúTBŨ"@’8?™ũ)~ĖØ HFsÛĻsū4vl|Å@b@?Â:Į֋ƒZlH‘•’ĖsĀÆ?žj?&㠇Ļy<đ?™“ʸŨģˎ$äķĪ˙^¤%\™w`āzūš ŋ@XåElČYˆė:ūyũ(‰yg$ā`g äŸę*R}zƒJOįJåXĸ“&”R´”Q@ =h4J( ô¤ 8¤Ĩ¤ ‡­.hūt†ŒQE&8Ŗ´Pb“´”ԐŠZC@hÆ)i ŠB´¤žÔ†€ŒC“JzŅ@ "šE8õ¤4ĶM4ķLÁ īHyĨ4†€ŠrtϚrô¤‹JßwđĻ­8ôŠc+éÃ÷×GũĄü…V‚W,­‚{‡ņŠ,—iœ‘Î1īŌĢ]%ÂNeˆ’¤öįčj˜ß˛I˙=ņķE|˙ß˙Į ÉšŅ”™Ĩ'“M4ŠE!Ŗ4šŖ4”f˜äį5Ķ,* gíã×ĩ8õ¨/!kˆ‚.Ė É#€sÛŊ5a=Ņ,rŦ ”9ÁÁėAôĨ2(—Ë-ķ‘œ{ĩCėsU, ĢāH= ÷Ãgqķô,U€`ܓœŽÕI'Ԏi-ҍNyš§xʐ~ŸZ °ÜoÃ,ą|Ķô4ֆķoôl îāūYĸ˸sž¨ŌíĐķA`“Æ¨ZJītáŲ˙‹ƒƒĪ_¨Î)“E1‘ˆq1`@Î?Z9uÜ|ú]#KžxéJ:Õ i.šUä ŖĒđxį=i.e¸f™ÚĄ~Q‚Iė}sG.ĄÍĻÆ†s͜ô Md!hēHØlādrŠ™îæōåų‘YĐķ96t÷FŽqJzU;{—’cÁPģƒœđ2<Ôrj-|FRÃäc~šĨfËrų<ãŊ dqÍ(=ûÕ3¨F7b6áļ)÷Æ)Vų  8ÉįįųĐâéõ-įŠ3qPIsnŗž Āādā~ĩ %ŧ“:€ĢœÁ=sEÉ"Ņ rxÅ/n•N°Čžf˜Īpq“øQo|$ŧÕ9É9ÎxĮáE˜s.åĖŅ‘šˆ\DN€įĶß§ō¤YãxL ‹žŅ1Á¤ČíPÅqǤŽ#8ėiáԁ†ôü:Ōŗė]ĮŅ×ŠĻŽy#ژ%Œ°@ĀŗŒsŸ^hÔ4%āwĨĪĨ7Šü)Ež)3@ ô 8ëIš_n´˜ëš))N%-úĐhāķԌsIõĸ€H(9õ QŠOƖ€Š1či 4ĮŊ=č"€}i 9 “‘FM)>ԀNOjB=ŠsÅ&OzB=Š (=Š #ĩ!ϚR}ФûP})=øĨ,H¤$ņ@†i§íL$ô #šQÅ ô4áH-<ž=i‚Û5,ĸ;&ÜgįĮ°ĀĒ÷/ŅR ¯Č'üņRØŪ\Gū‚’Yĸi)€Čā8č;öę*™ö”_ÜԊw“ačŸ÷ÕDØŪ=i3JĨ!Š( †ŠZNôfuĻx¤ĪJSI@ š3IE.yīA#یQL@ž¸Ĩ$~"“éAõ °ŧ• ÔâŪárI A’jRĻKKGŠô8ĸâkMf¸x °g •“œįĀS…åš.9PyūAâ‡ļW ŨŠœ‚O<įQ ŖevrG'ˇoCUtÉ´‘(ģļÆ|ĀąžŪôO<’1 åA,Ŗ=3ũ*'´ŽhĐ r60{Œ˙*kéáƒ0Œ†Į3Œ˙/֍īkYUíĘŦ˜aĪ#ž9ũ)ˆļķ‡Äk„%NqĪ~?Blķ"ķ&íĀÆĮ¸ŠŖĸŽe 2ėÄqĀāõčĶŖŊ‡ e<) rOlõ[EÍ3Āí ŧœvšëPĨ„ĒĀŗ#āäŠČ ,R›IB°Iķ2'$db™?"Ė‘Á,ā?.'ԇۊRÜi'­9Å4žzR“ŪšOĩœņÅ!”™ë@€ŸjiÉæ”į֐æ€õĨúԊC)ĮîūÁN'åü*XČ,īŽ}7ä)'‚ærI1ģiÎIŸAE†<ëœ˙ú eÕŧ†ãÍF98 Ф&EũŽ?įĄü¨¤ÅĮ÷_ķĸ™'H{ŌfƒÖŌ,>´f“4PŅڒ­Ŗ–T†6’C„QÉÁ8üŠzŊjŊô/qg,)ˇ.¤N)a]Xe[?O~isĮÖĒÛ@đË;0PdpŲS“÷@#QQß[ÜÉ*=ŗí+Õr@8 üÁö4{<x—ĻA=k)âžIYQ¤níŲĪ Î Ī$zŋn_ȏĖpáÁįŒķųú˙ˆšį=ŗÖŽßNžÕ‹"]Ģ—_8ēpHœ°Ú??J™įžP[kd° 0ÃõČÉϧoJcũžäȈ˙&s¸˛OĖĀ~$EĨÍĐŅ3aAEf*rFÃÁ'Ў´€ŲíTî<ÆģFQŊR7ePG-Æ?֟{,‘YLņā:Ą# žŪ•A5Žiƒ::nm§'‚}3€Ié@Åcp“CŠL +H1ÎxĪ<õ$œ­hߙÂO-\ģŽĐ r3ߏLū• ĨûÜ΋ĩJļFyČbáVnn< €(fáFpÁ=~‚˜“ÛOhčaËížáÚ:(PI4“Í4˛1*é’Ã€Ā ĖĀqRÛjŒa_1IYíP9ųI$c§­NښF$iceUr€‚2F$‚}ū´€­Ą.õDPŲ •l“‚Ä?ā#&ŸĢ+Ē’ˆUņ†€ŧž§ˇ?Ĩ=Ž­ƒLZ9FōcgÎ 9ÎŽĸĸÂĒĢ…U°Ļ=¨ŊŊܒÍ+ĩZ-ėŊÎæ2jæI=*ŒWļĄÁ,Ę'iĮ9Į8āpiįQƒĖPîØ1ÜAŨ0s‘L.[ŨŽ´šÍWkČ8‘ īŽžôĸæ, Ō"œdŒŽ8æ€'ÍĻ#¤‹š2ôƜĨ€l2GLōhô™3$č^2JƒŒ@?BzĶ^N(Ô zŌvφĘ–ČīųPøŖ#ĩ'Ŋ(Î(Ų¤Í¤=( ϜõĸÍ&y¤9¤9 3M4 ĐŗFi™4¤žÔėĐzĶO Rg“ī@‡3MÅ&ãŌ€šO­4Ū“yéŠ~i 4ą ĩ.h=8Ļ†ëž”nĪjR}¨ČíMgÁÅ&hMš[ƒŽ´…ŋ:SԐ÷ ˇĻ¨M!¤$Ōn @i &˙jMÔwĨÂŲĮā{Ōõ§ōūÁN=)1•ėÖŨöĮō˧™'nq#úķԟcūēëũ˙č)'ēT•ŖeÎ?M DûĮŋįEEö¨ŲüÉš˛zŌ æ“5%†hÍ&hĀvi3HhÍTÔe¸Šö`ÅĪ Ī@qžzĻî3+DrÄČ0sî{trîwI Á+`ˇq€xôäÖ‘n \ũ™Øą`H~FĄôëíÃ_íˇa ˆČ#?)CĀؐr=øĀú{ĶD÷)31*ۑ M¤rG`[’Įa@ ÖĄYā 8ÜĨzc<ū9ühŧŧĩVP˛m` ž@ä.F} ¤“N…•‹HāŲ;†9?ČTö&Ief”`I¸íÁ †ČíĶš´eOü¤Ž& .€sųÔhē}ŌšeE!˜0Ũ´ƒ¤đ{āTZĨ™2pm;°āŸÄ‘UE‚Jß%ŌąäŒįæÜr÷ūTaŖˇr` 5q+îä1É ‚O¨Ģm"(]ÎîÎ3žΖÁÖHļ„pYxۅP†qžäöŠÚȋkh•Á009aœđ{~?Ĩ(Ķ`ĀP\…Ú1ģƒ‚p:{šŽ[($rO!ųLh23Đųë[7ˇ',šōÕ3ķNû’JŽ,.V5ÔļHs’v0ž„’áL N˜Ž¤‰ßs;°;˛O§sĐúPÚjKÆŗp3Æ*Å@99ô=*ŗŊ;Žé ÁÆ% (Æ9ūđ&–H¯ÉrĻ@Nâ¤88\ëČ4€ŋmoäËŪûÆČũ*)ėÚYˉĶČåJ’^õZAzŌI•”!`G#8Ū Á¸˙9Ģ6Mrd“í°3…*'=ō([( ĩĸDBîA—€}Āū•^kYÚI™B1fXąep>Ÿ­D÷7‘Ä­ûÆbä‘å € ĮqíQ<× r$(ųÆŌģH÷€už9ĪĨH–—€(wbU06˂=ŗ“AõëŌ•až™ļí8Œüäž3Á ŒöŖûBp ˛˜ §KciįšiÔĻ’ŨŨB#Ē´‚O dõ'j+ėĻķ*ãh;\íģŋĻ*ũŸÚ<¤ûF2g›w|ÕQ}"šCƒ)L‚HÎvšžÎíŽK@čr <œņ×°  ™¤4gŠC@Ä'šŠ7{PM&M)jį@¤É š7 PįŒŅžô€ƒÉdP!Aã4nhČR|¤P¸”šãĨ7ŽÔ{Pä=i§h4`Á āž´dqĀŖÎŽx ¯Ŋ)Āį҃íJÃ8æ“oŊ)Á¤ĀÍ 4‡“hI^i\HGŊQ@ĶNÜPWéM#(8Į=)>P)O"šGZ!ÁäŌ”)¤P–…(æšqJ1Æ)ņN'åü)‚œOĘ~”˜Č,?×\˙ž?Ĩž8&rŽõ88#Šeũõ×ûãų mÕŠ–Fulāzt˙:hLO"?ųęJ*/&ķÕīĒ*‰:2{RZCPhÅŅš`) ķIž(=( ŠaMąĖš€W#Î*‰$ŗ]Ž<¤`2#=zgōŠ.ĄYļ—r…IیdäxúŽēlMU‘ļnŨšééژ‰ė$‡SÜH7œduī‘Ÿ¨¤Hmf„ģFUA`rÄŒŠį=88úÔriž` NÃ-¸ņĮEąũßÔԍi›)`2ąÜWn$ôĪŋ­<ĮjąH €¯ķąß×s×Đ~”Īėûb03ƒÎ7›v˙ *´æ•Ũ–TčB¸*==ĮëRÛŲŧ7/)*ÛŊ ČÎ8ÆzqÅaÍkgÍ2I”$œäÆ}1ž1M´ŗ i˖fˆ!#ŒœcsÖĄš°še› §~ėH'pĀŽĮšžę ^’"@S†PÛI<ŽĮšCĻĻ͂SŒLįnßåڛũ™‚ÄLāTœ`ĒŠãūÖŖh/Y īel`y‡=FáøøPŅŨåLÛAPp'įõéրtÄYÖQ!ۜ8ÁāddúÔû6X”8*ͨųr °8úäPÉv˛ŽÄ§ŪÁsĮ=Āæ†–÷ ƒ ›`';NáôÎ9÷†kYMž&@đrrœ{{~dŌĩ•Úģ´G`bąsČ%H™Ā<û՗žuļˇr6ŗí¤íãĶ늆ÆIĻēy&%H‰8䜓Ÿķš|–Ōũš fŠ@å,Â@#vņÛ~$Ԃ˙c˛˛1˔ŽH}rZ’ÎxåRąFę€åI\ÉäÄP‹ÃrņíGr#•É<ōNi˛j.Q˜ÎÅėĸãđúÔŅ]K$-8Ø"W Šœ‚r;đxĮz”ÜBmžĐÃ(I* ëĮL˙œPI5'[…aʀã`<ä2€I?\ū5/ö‹oThqšųÁÁ$¨éôũjCqj[)-ÆJpO9į9ĮéLYė\‚ĸ=AŽ ã‚=Oæh{Yš{u‘Ô!lĢÎ9õüǜ—7Q}Ģįŧ…SĘ}îG_aŠ˜OkEå*Ÿ0ã)€rF}˛)Ō-ĻųĘn“lô ĻŖĨ_vâvįiČäķĶ‘úQ5č†éŖd&5UÜ@É$ä1ôũi˜˛Wķ8ArÜ{ût>ŸJEor<āI.œ7rŧ8&€/` Ęە—’ y8ëœ š&F]ČŨÉãņEm­%ŧššÃåXņ–Č9éÔU¸ĸŽ?™d–ã-õ8  ķIšAA恆i ”ƒŊ'hzqGŌīIz:€ĻF=čÀh ֐qžų¤ müiü'9Ŗæ÷ ŽsM#šLš 8PãŪ“ô™9dņ@ šä0s֚IͨpyŖ$ BĊ ÂņÍ!cĨ&N>´™ AM9Ĩ {ĶKf€šiÉæ”ļ04š Bi4¤ņM,sÍ)ãšTæ‚Į4„š ûŌŽ)¤šp¤ÅîŸĨ4u§”˜Ęö÷×?ī˙AI?š—×;0{äoŽ),īŽ‡ûcų 'ē1\˛í$}00)Ą2‡7üôũ ¯š}˙J)ŠÆĄīHh'“M=jK4RfŒĶh<æ“4‡’>´VúŨådt JîępFAÁT{+ĸIܐ@ĄŒ÷…[šžHæWåVÎX)nAzŒķT ēš4  dėpN2[=ûqMvÖ;•¸v”ąÎŒíŽ1ۚmÂ]<íˇyŒ§ËŒ`đr<õ5 ęSՊ.xųyģ˛>‡ŒRhĖJäF’åΧ4 ãYîāˆđȊ€ÁÁqüڞŌß!ĘĢÉ÷ļ‚€ÁÁ?—×ڑ/˜‡FQ #p F§úŸŌ”ę.ĸGÁlneS€0đO^Ļ€ ‰Ž^ §y•aŽáœú`{ š{;Á˛r3‘“Œp;ž;ŌCt%•ŖË´[ļAÁūt닕ļ@Î 9#wĪ4H_ʸÂĻŨĮ†É8/´c=89§Mđ„,džN `cž3ĶCVŽ.#ˇPŌ;ŗŖ'ū€šŽKÛt X¨ß€yô÷-ÔíŅT’ʸ'ą įTâԙ $¨Y‹6Ō§¯Î@zU‡ēĩ*ÂF(9Ќž‰¨å–ČFäĮāWhŒ‚};œĐŸ´*Û¤V@–dQ××ĨEũ ¤ÆĻ)U¤bŖåįŋ>ã‘Û­Īm$mØĒ2Ĩ Ž„ãПæ(kkU(Ŧr™cœä2rĪāÕÔmܨÚáŸîŧ°ÉįôįéJ/­_9 đ %IÁ'ž¤~4ČlāHÔ;ît?v œ’ôęxīJÚ}ŗdކéČ ûōĪøĐÍ՛­´†˜8Ā8$ņ؊tkk4~bG. ä(ééųÔ`TŠg;Á^šÆIlūuf8„q%›=IĀ'ō {8S1Ē1Ū0ĢŽXô?Οj” {n@XˇžI=ŋũUĶÔl"B|Ŋ dĀ'ķ'ššâ1)Œ ČášÎãõ4ȅŦņ™PíVÉe F:į#8ĪZ ‰ 0…>Y#'‘ßŋŊg1†1*6p@lÎī¯ŌŽKkCÁųvŽHä˙:„Z[I0 ė­QÆ88õėyæœÚrŠÆÄT\ā‘Œ‘‘ß’:­ö …}Ë"Ģāā@ÚF1R=ŊŠEÂ„Ŗ%€“0AĮˇ@;Đ‘`ĸUu‘°60HĀô? ¤ŊŗŠw<†< šČįŽ}šüę!>LŖ{/Î0_;žn>˜ëŠŗ{fü˛ä:d,ĐĮ2ąI0$ãi;rĄqÁöŠ,ížÎ˛|ęCĀų@9üŗUŒ7‘3K|ÁC¨ŠāĮ¨'“Hâäŗ–A/ŅFäĪâ­9tÉĮƒō… €äãÜdUĢwXHC˜1;¯ļÉĒQËw,xp‹€Ą';GÆIæ¯Ú<ŽeķOʁˇë@…!¤Í! b0hšBM4sڀԅ¨§=¨É Đ[›Ŋ(A#›ˆĪnöŖpë@ ¸ĐúR‚Üãģš¤ŨíI‘Š2(w{PZ2)2(ŨÜŌÉĀĨ;qIĀ =}Š7r(8įœfŒPn(ŨÍ!Æy¤ŠRŪ”3M8č#ہ HÆM4‘AšB­!aŽ””‡!éڀ ŲĻîĪJ^)8Í ˇáN)š¯́ô  âPO“[O?ŋš˙x!Nš’=å$PFëŸđĻi˙ëîßū‚Ÿq ČũvļzuÍ4&?)ūĮëESû ŋķÜ~´SŖ4†ži3RX´)3FxSIžhÍ4š`Aqv uVF;#íۚ‰u‚‚Á‰¨“´1=})×2[yč“ĸüĘHcĀę8Ν4É#ą\—1¸S†Æ3ĮAõĮåLĨÜW,a*ë¸w`cÆsī@ēˇTĒHÚœ2 Ŋ 6ŲmËÄ0Ę͑’pz? wŲ ĘT’>cōį9ĮæhÄģĩy(#iÚHa´ôÆpzuâ‘î-ōŅĄVRKm÷Œcš"œÖTPG7Œ?=)q߇õ¨•ŗA9#6q’9įéúTObŗ+0Uc@ä¸ œôęqAĩc2pĢ…%°¸SÎTcØæ€%{¤,|ĮųČĀÎ3Ž=GáLžŌ'y%iAųN@Āųã×ųÔO¸1•.š°K‚@Áü1K-Ë‡Sĩƒ€\árAįŽ1@ž'ŒōUXšlœœãų}Š×6Âi?ÖíŪģH#’ įze´W‰™Ë3‘ÁÜ'$ŒŨ{úUF†ņîW%Q°r2>UĀüH4diîņ°LŒ2˜zŸĨ1´é~aš Į$qŋwō&‘šõ|ÍĻ@@~P}0sëĮķĄäŧW|n`Ŗų`äqÎ>:ûPšÉÖBÉąI°ųˆųvæsU§†âÕ q¸ķĩeäƒĮ$ô:Ŗ´‘”ēą› ”ÁÚX ãŽŪÕÜÍe8*\°Č œ d{vö  ˇqÍ,Qų&AÄüÛOŨ8™ĒÅ/QN<ÀĐJ wūöjEŊ“ė“JB—Œã؎1Ī_ķڙ>Ŗ"4¨eŅ “€@ĖĐ č!I&â`ŅqßĻwsCËx‘’ŦŘ˙Ģ ĮČæ§†ņĨ™ x-¸g#ã¯9=Ē5 1å V|m9°ņÁ  ėÜ*˛0uf‘Č##qū†Ąžōâ)ŲQÕIÂāäü…ĪÔcöš1]ųl ĒÉ-ž~‹@Ôĸ*IW9wũpO^”Ôŧ˜ÍcË!˜Ø8#nIũĒK›Ī"xãĀ!ˆŧ:TÍ/îL‹×€<އͭRKũÆá@hËšÚA^œžĸ€'ēģkw ¨ŽeŽXƒÁc¯5ę/°‹ī—sqÃr;uÍ,“Úųë+’5+‚ 8Į¸æžfŗ$†Ø }á´sÉįôü{P6¤¤ +Žüu=p;Vĸ™%ŠÎ1žúÕSösļ [ÛÎ?Į5b)c~"e`ŧ`ĮļN)  Đ0&“9íA¤Å)ŊMJn"kg˜.åPsÆOCÁü*œ‚C–ûĮžÍH¯lYŽää’I ņÔĐ#ŧˇÆį*ˇ-€xã=qéOYą ųdįqČ#œņú˙:kYFÂEā:á°AŒgō’A;ŪV åvž8+ĐtüčG{GmÎé–Į9Áã‘ĪlsúĶ|ĢBF6‚@ ČéĶ‘ëL[1wBX0;ԏŊ’{žH¨…ˆXā 0]¤g8$œƒ×č1@‡#(‡*Ä.Õl€8uôĒ?&ÖGdˇ”zœ=ŗø~• éįåÛ"‘x~bsׯ?Ĩ7û>N xÎF0@l9 ûС˛‚EÍų%‰'98ĮōĮåBÚD’F Ū8Î;ztAĀ1°@S’sÁĪŠ}†uwÛ0 AÚ 9'?‰Īá@Ÿų{€š€r Ŗļ0ôĢņ#*vIbOŠ$‘ųšĸ-î0¤3.š.pˇĄüęÕĸēGûÍų' ;8Āî=ÅZÍ!4™âš;4fŖ'Ō&ŒÔy9¤'.hÍE¸ĐĐ™ T{Ĩ(9Īĩ]䎜~ĸæŲöąÁÜpĶסķ¨Ú[Iž \a ´Đúū"ƒc#Á ž|ŽqõÅ´Ų‚ČÄŠLqĶž{PŦÖm ģl(Ü@ĐĶĄšŅßå¨?/$FxäzšAhŨĸŪH8Á dc†*'ĶËî&QÎîĢĮ$z˙ŗ@ˆ-ÉW'#99ÁČũM ˛„āWs0x}OëQ-Y„›Á“ŒIãŸ|Seŗ’I¤pęCdcĮB3×ĶŊ:;3ĘHŦ<ĩnpN0xįŋ=søT˛YĢšo0‚[wÁ;JúzTR[ÎÍ PP ܐO#8äQ$—[+† •ČųqÛĄæ€$ˇŗXzšoĀg ~ƒĨA=‹ Īo%¸\p2Á9ö¤ōn„ƒ1ēč7r>œR"]FcP˛§æ;“ž¨  MƒJČ °9ܤ–Īā1Å2;)HÜHŒcy'?†F)ˆoRÆBN܍ Œsúℒé6edĀQōÔįˇ÷¸  ÚÉŧ‘†Ã˛ā0$äã¯=3ßúĶVÖAq6Ģgh'—üO?…B..ą¸‡ųC6‘¸āü˙JIŽfhJ“ŒŽC*‘“‘Į8õ  EqæJČ\å—fŒ:sę*ã2fR;†äc>§9į¯Zš[ˇIdĻÔU# äî8ū•ÛŨĀ-´¨vƒ‚Ibō ¯ÚްÆŪ˜õÍIvXķr@!AÉČĮoBhƒ¸@w€qģd㊑nZQošNî‡@õæ€ I.Qw|ĖʀļS–äîũ*xϏûHŽL uųNNFIĪ×#đ¨MĖęåļ¸ÜŲĀČįŌmxķ2D›Žđā€?<Đ•ŗ,ū|ŒŽėÁ#ÅOgpĶÆYĀ :tõīÖĒ[ę vų Tˇ ƒœāĪ|õĢąJ˛†* H ņƒŪ€'Í!īH  b?ŗHM!n(âԀņīMČŖ"€ĩ(n)?A@f€Ã8õ¤ĪZLsž”ėŒāŌîЇŽ3Í.(r)8Ō9Ŗū) ôĻ‘œsF2:ĐģõϜgŠAĮ|Ņ‚ Å÷ĻāŌ ķšBˇž´īMäšNxÍ;7#ĶIįŠCš)'š 7ƒœĶ ;ĐsôĻb€y8¤éH:ƒAu¤…Ļbœ(‚x¤†“‘ųî?ßū‚§læĢŲ}ų˙ßū‚§cÍ4!(¤ÍÄhä促MĪ4‡­MËš3MÍ RŋZLŌ@îdˇWNGc‚8üŗNX  š-І$‘Ÿ¯>õÅĄ™Ųƒ€Q‚3ÂļG>õvE$W.Ŧú2Iõ÷ÅR=¤l(XŽÖ ĘNC‚:ķĪōĢ‘‚ą¨b ==?/ÃÚĒËlÍ3HH8!OLGõ¨žÅ0YÎ0rsĀ˙<š F"ĖĪ‚ėXŒpsĀ÷ā RY.|ՔeĄœdŒ˙*Žâ)˛ÛŒœ‚N=)ŸfŲMĘģģÎr3Įéũh‰dĨqčĖ xÚW =Á<ûTą@öį*ęÄís‚F=}Jlĸbĸ‰‘‡p3׏Ĩ%؛Īķ#JĮōāg ‘Û×%ŨĢLĘņžÆ_ÄGëP›9•Ųĸpšã!Žx@ŖāĨāvļIË01íROv#“Ę Év88ãđ4¸ēAĨÆĶ°ƒß‡ÖĻ F€ÍģŽŌ'Áၚ‰/ÎčÉ`dc“ˇ8ĮĶ4ķœ2˛üšįč8<G_Jaŧ“?ÂØ 7yéŠjj2 "€x$ē[ĶÔT‘Ū‚Ė$RâsŒqúĶæ–Æ's€g>č5ŋsō˜Ô ČŧĐu†&3ō‚qžq€}?ÚĨ[›_)@¨āe {vĨ/hۙ„g9ā`ôĪoĨ2[æ8D"Dœ‘‚QúÔņÜĢ̐Ŧ6‘€åž?úõ-Ŗ08Ī8Î>žÔąKnYŠÄ1'ƒßúĐ B'V+“Œu\ņĮŋ|■ƒ,ģŒœPÄNFh[Ē…ąĐāđxéčĨ$+ĖÂ<†\ƒœāw#ķ4ī´[1+ÁÁä<œ‘ĮЎԋ$篃•ų†v ū] D"ļiB†}āž:`†ÉĮęjx­Ō'ŪŦ܂#žI'§Š?29-\2EØÄ`€§y–Éē@ČšRIqūEDlՉ++ŊéÆH'?•0Ø LØÜ ō œŸĮųĐâ Mģ~\鸜}Ī­Ii•ÁbƒšŦÖYߗS¸į%rsHë͊ąm… – –b;cž˜  ¤4”†ÅۚyRƒ@ JL{ŌŌd㎴ãF=éš4dĐ€æ‚4ܚ7w~(Ō=č­.O4œŌ¸ö¤Üz{вh'('Ž´¸æ€ƐąĨH[÷ -M'<Đ[‘JH8éIģ֓p=h,?Ĩ)n˜¤'Z ŠĨ‡Ĩĩ!$ŽsFsHHéL“Û'4dI¸wŖpÅ4œ“FījMŪÔš9§fŖÎih=  ž &23ķĪū˙ô$ŌÔ1Æ3ÜTVgįŸũīč)Ķ“1ŗ`ũyϐ˜}Ļī/äh¨>Æŋß?ĸ˜ŽlįŸÂŒĶzuŖ5ŽÍ&i &i€ėŌgüx¤Í  —Irf ap23Į€úūšâíwm/•ÎNA6ãßšuÅÔ°ĖGšHĀ=ō?CŠc_2ōŅ‚<A gčsšbēãÍķ 88#;FBîãŋõWūĖuÃ!ˆ¯RFx÷ÕŊ&AĀÁÚÆw’~‚”]ēC ŽrØČĶVâāJ”'АX~ÖĨ¸šhåDP 7;˜û¯9ĻÕn”N0ãųŌ‹ØÉčNI žŋ€  Šu*ļö}ÈÎŪ“éV ķí}ąŽåRÄnt=0:qÛ֝ö˜ŧ–—i!pÛĪ8?֚—6đáTĻW•ĪĮրí… ByĮ^ې×ĨKȕ™B:ßōĻoUHTÚ˙783Ī#¯Ĩ -˛ŋČP3“’;‘Ôû{Đ×Ē„†W8,ĀÁūu$Ō¤eC‚Kđ0:ņũ?ĨBÉjŲ,S “ŨrA?ĘĨeŲ #ä$¨ĪŸČĐ}ļZdųœ6ĮœŽ:õŠļŌ€ō*n#œŽzgĮ`j%‚‰ ģ…ä!'u`ĐöPīT28ŨG<HüIžĪDA āuč8āöĨ1ÚŗŽŗ y#ŋ*cZîpæVfųyĮ\ŽžäÔQÛø¨…‰(ęˌ˘oBI˙PÖÚ6܄BÁōyÉ?˜Á>õ#YB@QŖŧ=zAUÚĘMĖĘU r2:€éíRÃnë*ŗ *Šā1 }˙_°&wˇ dāg89ü?­;ėãȖ2ų2d“€0H§ļ*9Ōc9ub?61ÁČÆ}ęŖ–?x˕$ÉÎO_^ŪÔemöJŦŌŧĖ0IĮ#¯éQÍg#‰6˛.ö'‘ßp~ĩ-Ųv1*Ų2ŌũxíôĢ´Æáƒî œ”Ž0sëë@ 6“$:Œ–=}H8üpi­k9oŨ•Ãc…^”éd¸ ęp6đFŪšõÍ$[[vHûܑŸĶ4-¸’ TĻw36āIĮ9О LŦU[÷d6ųHš§<Ë Š‹Ø Nl{ķOšš02ƒžyāã#üh .€s#˛˜#īžš=*Ũŗ3B­!ų›œuĮĩSĒŦˆs9éķŸŌŦŲģInÛqÜ™ĮéE€˛ !īMÉ ô¤’(-Iģ=Š  É 7ZLâ”ļ;SKԙ ķI¸v ° nö 0ĻũihÛŠ Ō“"Ž(IéFE4ö RÛĻ’;RhĮŊ00éG„s֐ō=čÔÍ4zAŪ€HÍ'¤Æi§&āŠCŽ”Ü{ĐFhIㇴĶF;g4ŖšĨâšGn)>´¤Š27ëŠ=hsÍ;4˃ĐŌįáJzSA ôŠc!ŗûķ˙ŋũEžepÜŠč}),ĪĪ?ûßĐS.L‘Éæ.6ã23žôЙ>Öõ4U_´KūĮåEPŦlæŒŅڊ‚Ã4RP(Î;ҚCE/ųæšUI9Pwr>”´S3xÁEätcü÷ ÃP k´g=E<õĸ}š°3Œ1ן֚maįFAdŒŽƧíA Mŧ{pÄA ņŒø cYÆNI|äœįĄČ9üÅXĸ€!’ŲdERė6äÆNAÎ3Qĩ’ŲüŲČw?Ę­Qڀ+-   +)@ÎqČôāS “â0˛Pį$ryĐUÃEUû3ˆáPT´lO9Áę==ķP9ʨʒv7” gëŸÎ´(¤ĐÜ|į'æ#>02:uSĖSyQ‚X˛Éž_ørq“í‘V¨ī@\,R[q€H'p~•kĨ,~vlƒØ`ôõÍhSMPfšxœ6î#lŊpN;zĶ’âāž¤ĄãĻĮˇ5tRPaq"[c—Ū@ãä˙LTiel†ÚbĪ֗­0ujĒ—ĖÁrŠ7tË _ÄR‹ÖåL`’Í€p=G^iŌĒo­Cw÷ŋí­MËIp1ōĄB@'œ‚9ö¤ãfB9ęČã ģ¯Ķ"ĒÅ˙˙ģPG÷Oã˙ Đ‰ŊUÉ*Hô``ߞiâō< Á†Nߛ=ũë4ũÃūëč4ų>÷ü˙Đčn#•ļ0‰<œōyũ3V@ 0ÌVd~?účßú­1÷E.hÍ%(¤ĮjJ( ƒŽ”RPŽ)1KA Ž:Đ})( ¯4„q֊(1īGn´Q@=é9§Rw g94ĶJi 1ĪzsÅP“ž´ŌO­:’€Z >´ĸ‘¨ŧš 4´Ŋ¨œõ4sNīHh§&‚;ĶŠ(éšviĻ–€Rž””–gæ›Ūū‚‹‰v8R2¸â’ĪīMū˙ô—ŸsđĻ€_´Įë˙ŽŅT¨Ē˙Ųleptonica-1.86.0/prog/colorquant_reg.c000066400000000000000000000212471506303110300177210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorquant_reg.c * * Regression test for various color quantizers */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 MAX_WIDTH = 350; static const char *image[4] = {"marge.jpg", "test24.jpg", "juditharismax.jpg", "hardlight2_2.jpg"}; static l_int32 TestImage(const char *filename, l_int32 i, L_REGPARAMS *rp); static void PixSave32(PIXA *pixa, PIX *pixc, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 i; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; for (i = 0; i < 4; i++) { /* if (i != 2) continue; */ TestImage(image[i], i, rp); } return regTestCleanup(rp); } static l_int32 TestImage(const char *filename, l_int32 i, L_REGPARAMS *rp) { char buf[256]; l_int32 w, h; l_float32 factor; PIX *pix, *pixs, *pixc, *pix32, *pixt, *pixd; PIXA *pixa; if ((pix = pixRead(filename)) == NULL) { rp->success = FALSE; return ERROR_INT_1("pix not made", filename, __func__, 1); } pixGetDimensions(pix, &w, &h, NULL); if (w > MAX_WIDTH) { factor = (l_float32)MAX_WIDTH / (l_float32)w; pixs = pixScale(pix, factor, factor); } else pixs = pixClone(pix); pixDestroy(&pix); pixa = pixaCreate(0); /* Median cut quantizer (no dither; 5 sigbits) */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 16, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 128, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 256, 5, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (with dither; 5 sigbits) */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 16, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 128, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 256, 5, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (no dither; 6 sigbits) */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 16, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 128, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 256, 6, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (with dither; 6 sigbits) */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 16, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 128, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 256, 6, 10, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (mixed color/gray) */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixMedianCutQuantMixed(pixs, 20, 10, 0, 0, 0); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantMixed(pixs, 60, 20, 0, 0, 0); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantMixed(pixs, 180, 40, 0, 0, 0); PixSave32(pixa, pixc, rp); /* Simple 256 cube octcube quantizer */ pixaAddPix(pixa, pixs, L_COPY); pixc = pixFixedOctcubeQuant256(pixs, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuant256(pixs, 1); /* dither */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuant256(pixs, 1); /* dither */ PixSave32(pixa, pixc, rp); /* 2-pass octree quantizer */ pixc = pixOctreeColorQuant(pixs, 128, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 240, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 128, 1); /* dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 240, 1); /* dither */ PixSave32(pixa, pixc, rp); /* Simple adaptive quantization to 4 or 8 bpp, specifying ncolors */ pixc = pixOctreeQuantNumColors(pixs, 8, 0); /* fixed: 8 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 16, 0); /* fixed: 16 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 64, 0); /* fixed: 64 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 256, 0); /* fixed: 256 colors */ PixSave32(pixa, pixc, rp); /* Quantize to fully populated octree (RGB) at given level */ pixc = pixFixedOctcubeQuantGenRGB(pixs, 2); /* level 2 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 3); /* level 3 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 4); /* level 4 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 5); /* level 5 */ PixSave32(pixa, pixc, rp); /* Generate 32 bpp RGB image with num colors <= 256 */ pixt = pixOctreeQuantNumColors(pixs, 256, 0); /* cmapped version */ pix32 = pixRemoveColormap(pixt, REMOVE_CMAP_BASED_ON_SRC); /* Quantize image with few colors at fixed octree leaf level */ pixc = pixFewColorsOctcubeQuant1(pix32, 2); /* level 2 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 3); /* level 3 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 4); /* level 4 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 5); /* level 5 */ PixSave32(pixa, pixc, rp); /* Quantize image by population */ pixc = pixOctreeQuantByPopulation(pixs, 3, 0); /* level 3, no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 3, 1); /* level 3, dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 4, 0); /* level 4, no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 4, 1); /* level 4, dither */ PixSave32(pixa, pixc, rp); /* Mixed color/gray octree quantizer */ pixaAddPix(pixa, pixt, L_COPY); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 10); /* max delta = 10 */ PixSave32(pixa, pixc, rp); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 30); /* max delta = 30 */ PixSave32(pixa, pixc, rp); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 50); /* max delta = 50 */ PixSave32(pixa, pixc, rp); /* Run the high-level converter */ pixaAddPix(pixa, pixt, L_COPY); pixc = pixConvertRGBToColormap(pix32, 1); PixSave32(pixa, pixc, rp); pixDestroy(&pix32); pixDestroy(&pixt); pixd = pixaDisplayTiledInColumns(pixa, 4, 1.0, 25, 2); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); snprintf(buf, sizeof(buf), "/tmp/lept/regout/disp.%d.jpg", i); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } static void PixSave32(PIXA *pixa, PIX *pixc, L_REGPARAMS *rp) { PIX *pix32; pix32 = pixConvertTo32(pixc); pixaAddPix(pixa, pix32, L_INSERT); regTestWritePixAndCheck(rp, pix32, IFF_JFIF_JPEG); pixDestroy(&pixc); } leptonica-1.86.0/prog/colorseg.jpg000066400000000000000000001537061506303110300170560ustar00rootroot00000000000000˙Ø˙āJFIF??˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā˜!"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ŋŊ§2nyšœ~ų ~¤V…ŊíĮú›¨_ũ׹N6ėš‰J˙|?úÔĶĨZˇĖÖąL§žŅ¸~=ëÕúĎ'F=•—xؤd˙õęŨĨ™`‘FŧtŽR+ xķ-ŧĶÆō‘Č öâ­X^k6ÄGą2įɝŋ^ôž´îՅė|ĪK´‚;;eBF{š_1›'8ÕįįÅ>"ļp—0YĖŊ˜å3øķWׯ76ņīŧŅåUá”8ū•ĪÍwvmg˛;™ÃđIõ~&<°Zâí$ŅĻ;!Ô­Ët¸Sų™Ųė\[FŧŌ qUfedÍFnAō8 úsMČ ņU“) WĘČÅR•TÎrŲZ‘äÚ0 6W—s.}kĸ*ڙ7} ōÜlRŖ­@—˛§ņfŦŨŲŽZ2sžEfôā×DdŒ&䙭opō ,zš†é€$îĒ‘\˜—hæĸfyž Šövw+ŸK ,Ÿ6:ÔdŠíRŧ=j2ĄO­iîØHĖ`ô '5(ĨØGzEc"ŌímÍIååĒ@1ė)Ãn(MĄYĀäĶ֜E);ą­ĀīIšF曚VÉÍH bĸžš'ŦZ&RŖéN3ā`Te)énHÉĨ§Qę5Ĩ'ŠĻ,Åzp}jG‡mGågŪ¨­;9$žM&I5"A“ЁÜĶY–<…Įzēķ,ÛĘņôã=jÆíũë8\G7Û0=iJ›š/Ú)žg fĒ ú’zP' xÔōp¸'š˛ˇ!NÅdyŽ€īM20SœäôŦŨ+—ĪcZKŖæsS ”ŽOJጤŠ9ĄĨĪVÅ7‡LJŠĐĩŌôqPIyÔX¨e‚N;äÕ¯1ļ¯-KØ(ÚļN'>acÍ §$qNŽŠy™"ãƒė)7üŖKš,(Ĩ‘RLeyę´sų§ `/PjÁ_0„Á'ŋjÎIŪė´ôæ@ģw Öt­‰C.J÷5v+X˛Dŗ¨#ĩCyHšŽLOZĒn)ØRš•wNûō*ŦļL‘Č>¸­?“iR @Ų ĀįmuÂmhsĘ s$Ĩ!Z°É´úĶŽ‹˜X€­&ڟoŌĩWÚMĩ1ÜQphm&ڒ›Š.!„Rb¤Å&) ZB•6)  å*6P*Á- +íôTģhĸāf¨–ŖÍ˙ãOž{WÚ{ĄéøŽÕN)‚A4gĸ“ĪājuX.čܤ̸0úבtö=!$‘ÄëåH:6p?M{ˆãdKĻ$ŧ!´—ēŌK{‘Ü0˛‘ģdvŦÛ 8ÚßĪŽi ]ĖpŖĶiöŦe?zĀo"Č0¸¸‡ē1ä~?ĐĶbÆâ-Ÿcw‚NŸ€˙ ÍŅ5%ÕA+ÅônAXÛ9^Äö?…jJTao#û˛§ų⯛KŒj+đ ´§ąåŖēļļœ˙ĻÛ"7üôÛšMHķÁW"x1ÍĮ^†¨O­XØā%Đd=b ˇä{Ræ@Nšeŧ L^dŽ%ˇrž’jöƒäÕîüžÎ‘A5ƒ7А˙gZ˛ŽûÎWōíYSę7÷™Y.H rcˆ‡.ĸE(št;+¯_éŽŨØÜ.3Č!ŋéQŸ‰sų[`Ķ•ĻõÜv˙r6ÚTĶ˜ īJzū´E……šAyv€īĢų įž--.k5÷¨x¯]Ԙ´—Æ?—õ5ĢĄxĖ0[mTüŨāûßãYpËԏ„Jv |Įh?ÖĄžÖÎāˆģÛ¸€ĀņũzVTŗ Ķ•úĪGsÕŦá†íC,čĘy֓à 0aâŧ5ƙ0ŪĐ{úÕ×i ģ„Ŧ•äĘ´†@ŋđÎ? ×ŖgĩÕ3‰áũž–;—ߊą,Ũ°=Mrö×úÍąī-å‡ÕģŦĨđ™*\ģ”ŽíR 6ą,j¸FjÔė\†SNˇˇ’CœdgĢR´u…Ū…p˜"[™: ÖūĪT‹,ߝKFÃˌOzÍ×] TJQé$Y,ūéĒŌéS$ģ@ĪA]:‡3M`ŦûZįúē5ö1ą…m¤ČĶ‘Hrjōh›vî=+LîĸžNW€j%^m”ŠE2ÛÆå…Gą@ĀĒ€;€#Ūĸ’$2`MT}AÁ 'TX 0*õä%FāGJĢĢĘ7nWDd­ve(ģØĢ$„ Ļ䖭kĢōžBCSY 8ô­Š´ö0¨šzˆËŪ€i =(­Ė‰îį&Ž@QS8æŠnÆ1VbfnØšqÜ´X0ÅA)n€Ķ_x`ĢÉöĨˇ.GĘF}Mf’]KmŊ‚–Ģ 2mÂāŠkéÅq‰9īšĒņ´GŽG@h\˛ęņčXĘĘ9•J›Pn 3U!l6 \ŠÍĻ ę}(•–áŪČk]ĘŒŽjŔ!‡š˙1=HēR(mėÍéƒVbD†%tŽyԍ­XÂWŧˆåTÁãëMŒn=h–PŪÕˇ=jRv)ŊK‚(å °įÚ­Eg •ÎS…žašÔ‰” õ5…FãąŦlȟOˇo˜Æ3P\ÛFđ4dę*äŽBã5TŠį9ЌĨģciŨ֝äŖ8nLÕ…¤ kĒkhŗ)Î:Mš 4j;]‘ÄģYœŌĄwtU].ŨĄQ´^ôÕ°†5+ąjŌĘLJąRK’X˙vĄJoŠmE¯íâôÆŪ˜ŦØmŒŧ“ZRʲ RyŧŗŌēéšZĮ<í{”äËŠ=)•+ĖO­3ЌXĘJ~=Š1íUq 4†¤Å&Ú.DS ÔäSJŌ¸XƒoԊ—đĸŒöRÚû=Ī–ŽāšęĀ`ūU­ÛÍcÍ&P1ŋŖfšũI¯ŌheY'ERŅ€¤89įĄæ§ÔîŦŒ!šEŽíd]‡p ßųđĸėKr{ƒļš„Ę%iÔēƒŋŊIkaéōį,Ēc-”ÆrŋŊA+˙béčĒ’ũĸ@ÃĖĀØAëÔg<ĘĄĨĢ[Í­ ¸us=ĻŖôS30˙xZšK‹m۟)d2”nGĐ×ÜĒā†įĻ=kĨƒ^x$Dc†PНđą×Ū§’Tõ‰wŒÕ¤vZw‰Ö&ōõ%hÜqö˜ũõčMtČ’Ff•ŅēÉmČ?ī!Ž&ąÕt7?Ũ'“ôõĨˇžûC¸ ĨŒYėpĐö5×GĨ¤ôg5L<ĸŽŽüm1’¸1÷ōÆô˙!ä~׎7‹ ĒŅv˙–ˆ?ŧĩOLÕĄÕ@hÆųĀų‚“/áŅ…^_Ū9dĖŽ:´$Ģõ^†ģšXØZˆČō‘Qŋ‹8čãúĶĄŠkRV+ÛÄ`+LLå[ôŠ”‚ĖČw7ņ4ck÷điXG‚?‹ËŠŸ…0hlW¤2cíÆP?†HaõōÍiØxĢQÎŅí×Ŧ–ņ<ũk/‚œ`ĸúeÔ~yi gœĖ[#ūúūt7uf$’ØôKMoOԔ*Jđ?˙¯øUõ*Ŋ:W•ũܕ'Ąāg˙e?Ą­+MvūĶČŖūY°įō<ūDÔ[ĄW= įbĒf˜gXxšČ~釯#ķíøÖŒwbL8`AčA­!g)w7ƒn3IŧÕîc –<Ō5øŨÁŠölŽtX’R‡Ģū|æ—í*Ęw`Õ)÷<ŸģëXAu"Ræäŧ˜ÉÆ1M[‹€x,1*ĄYNEE=™ <ž­W.Ä;îE5Û2žk>¯É§ĘAe!€ĨĩŌ¤•˙| ę;šÚ2„Uîe(ĘNÆmŗqŖ(BĐČOYo Ä@u*OL֐Ģ­•9Gr]J09´¸ÎSzōą5։Gö\3[FK§2˛ÅŊ8'¯SYW–Ē!!f`Iā7}ŋÆ­ÅtÚvĐyr””Åæ\cü)IsĸoĻ„˛jž}šÉ3Ȉ’Gņ‘×ŋJÍ7ˇWXJŨ8!“Í^vŒzđk1īË^H#Î\ 6î}ąëZâÎdŌ$Û3Í*• *Ē9ÉÔTrYÜzîC¨ęËvmŌÚ/œ |Į×#ųvĒ0=ûĐŦĮjŸ”9&˜Ī*AyvËxɓԟSŌļ Ŧ6šBÎYMÂ.öÃõôõĩœd¯veš.ds6ļäG„o*Āä^œŠ§y1’ņˆ¸+ƒŠîÚŨîfûzH‚íX+)ä‘ôéļšų´xžyZI ČX–ÆÍhĒFã…äĖÛ[ų#Â?ĖŖ§¨ŽßKšž¸Ķ× ö¤™œzƒÖš4ҎM˛9sœã+×ۊļÚ­Ô6‰lĒĢcoNOŊgU)|(ë¤íšĐų;öŨéŽF96ÁCZú‹\•‡TŒK´āL>Yũk„Ķ59-&)|˛x`~ë}kĨķlõdį÷Xãũ¯§­8V•-ÄTŖęˇ;ØäKÅVŠEšʂvĘŋFīKūĩļ˙­uūų&_Ąī\ĩåæ‘& ‡„œ•aōŸ§ĄŽĪNŋMZØ2&80ĖpãũÖī^:ŠkCŠp”™ddÆKIčß$Ŗčz@HvŸŪwrOđj‡ũŲ;ŋéĮ ø5!ÁũÛ˙\Ž8˙žZ´ ÅPd˙ Ã~(x?…&8 `¨ęČU<Â”āáåįˆî?öWĨ`Kä†ug8?đ„åwg*?‹%€ü~ōĶĄššØ‡ŠVU=2Fâ8üéŽqŧũƒüø0āĶy߁įĒũĮ?‡F  ¨uÖRŠpŒ î?—øVŦ-Ęo†Eqėz}ErIĐ õEÍôĨVtmņHĘËüHIĮ×ø‡ëZFŦ‘ščvx<ĩH’•k›ˇÖĻEũū$_īä>Ÿž+Rø&ÆŲcü-Á˙ëÖŅŠ8¸šK)<ŌųįwĨTsOÉ<֜¨žfiĨ²€*Ė$°?_zʈôÉ­6ĒnČ&šĒFČÚÔ¸Øôąĩ(^CæČ^Å[žčŽĻ €îF)SR‹æC¤šY‹å>qƒši­É™KĒōÚ W9Šękîsʏc.Š–X#Ī#Úĸ­“š‹M¤´ ĶŖŠQ’p94Oļ8n¸¤öZ“Åg4„ =MlĮgmå.åRĀVpŋŽ”‚˙8ŽIŠËČ郄KbÆ=Íąļ‚{Qöæ9o­T7ųč)¯w#šjw+šōmQ€C¸‰ViÎīVWO8Ĩãž*ŽŖģ%]ėCÉŠ–YßîāSžĘ|­øU›e*iJzh5ŊI=ЎhõNX$w;zzšÖT܇8Ą™<Ž­ĪĨa 3W Ŗ+ė˛õ ūtĸŲú֊€ĘI"‘œéZûVČäE%‰ÉĮJ™Ŧ s7åC;sQ}Ą‚”āŅī=ƒNĨYĮ“Á WS¯ č“[ŨĻ•r-Ų;Ā`{×.ĐŊŦÂx RŲųQ×vqßįĄ­ÍF4õ#zŨI+íč˜Ū˛•äŒggĒ>› Ō’âXŅ NįÆX“Æ;úņū5›ũŦFŨ§ÜU´Č/<Ųe”oÛ'+éĮQíå]ÅÅŨåɝB$L™@<Â@ŋĨg)éŠ2Ēž†|šrj3Ōi™ ŦQœv=ž§?…XĶ|?,:uä—>l2ZžĐøoģuā‘úUķ´ē+š˛Ä1Ã*qŠ‚ãZ쏰¸¯g3M&X69įŪĸ-¤bĨ-‘VōôÚiŸē¸uŊw w€rŧķžšÍcC=Ä’G<žtaÃI°ũåęp{qZQFˇ6Ō6¨’4i vRЇČÉnäVÅÕŨ’xN :×NE›ĖŪĶ:ü­ížõjŅFņ’Ļ`ŊėˇZŠûRA˜×9`šĀÉĢŪ!€y,¨ëãvrMSļŧēē—süŠœ…QĐā=Ģ>ú9fžMŠJF@lúš”›šGleh]™÷•€¯ĨX˛Ŋ¸„í`^?~ŖéVĄ˛ŨL“[ŧÎÅ|~aũ*3{j!e0Ÿ8ŊŌĩž–ą•ĶwšŌYøŠ4…cģ>t2F]?ÄS4O%…Ü­v%žŲD$ E“žŽgí6ėŧŏĄ InÃ8&/ŨģĄT\ú\ôãë&]˛Á<ŅöY6ąFÎkA<[ĸēa/NĪųãuqôlqųה~āō%ĮÔR„NĶ/ō­ũŗ1tYėÚæ“8dƒQˇR0NāŠúĩöī•ŽdL˙0xĪЎ•ã"9…ÁÍJc™y۟ ĻĢĄ{)v=ŠÔÅōH ôI>hĪãچ,Ÿ"‚Ož3ô=ĢĮ#ÔĩØîgAč$`?,ÕģëŖlWŗ'%I~DUûdOŗ‘ë-ō€$ųAûĸSšûŽ98Á˛đų˙ Č?­y•ˇõkiFËüHŅ ­õŠģÄ ¤Î-`\õQ¸)˙€œŠĨQĘĪ@?+€I{7ČĮū÷Z˜SæÚ ũĐ6ˇũōx?…r ņ×ËÁą’<ŽUdWBŨ8ĮįW!ņļ‘4;X\Bįœ‘īOÑOÖÛj76Đūb¯PA8úŽŖõ­{mb @,úõ_θh|QŖ\ ŋmDeä ˇcđld~5r-VÆåÂÅynîz*î?FWļŲ‘(&wčá”`Aî*a3*õŽŪöX$ũÄÅO÷ ?ĐÖĩžŧ r…Orå[FŦ^æn loI1nϘ˛r @’Ã2î†U‘}O­)n8Ž•gą“mā/šõĨûV5K&Š~Íí4ŗ‡āTĨŖŠ$´%ļ÷4d杁KNⰙĨæŒ(¸4œĐhɤŒöŠ æĸÍ9KgŽ´˜Ņ§Ā Ƨ™ō1ëUE¤Ĩw9lŽ `0Ûëšįj7Ŋ΅Ím‰D§ŊOšqÎĒŌYē ‡ÍTŨ"´(Š-ÉĮttpæĢ\HdlžEdšÆiŸkSJ4ÔkĢĻ@ĢķqéÍBķįĄŦæ¸wëšh‘ŗZ*D:ĻŦ`šžƒnĨšn+>;–CĪ4öŧcĐRä•ĮÎē—%ō•vŽĩ8\üŖ4י›’j2洄"SLCč0ŠRiĩ˛1l]ØĻûŅI@M%ŧPQKÅōā‡>ĩŠå€OÕ9lŽ-"V™6‰åķÁî;UčO”‘°ämį5ķĩšÕ¤ 0ĮŽõŋᛙ–ËhFæ\EŸátë|ųUĶf•ŠÆüdŖ0 8ÍM§Eq¤jI,ŅÍņJš‰—nTƒœūüęîTŦՍˆõ+x ‰%ĶŖžd˜I$‹ÕÔöĪP?ÂŽŲÜ#\›¨apå’ƌķŸ^2*†§haԚUh|2Å’#ŽV­Ûė°#Ã)hwŸ’q´‚ ëQk#‰ų^žé™`Ø U ÁīÂĒËŊDW;˜ã>J,qõú“éRMqö…S-¸‰8Go įß"ĸ:c$BHîcv,B¯œūÍJúK–DēŒHË3\# ڒ&0Ē ÷ŊëM4hžÜ÷Öö‰oip(Ŗgß°…>§œķŽôš}õ”ņOæž'—$Ŗ`0<ķéÍAsxdŧ’Hĸ3Ū¨ËäŠÎAôQ-ËöĢĮ,đéy{W’ŪWžH?ĄqŠKVO;($meã OAīôõ¨#ģŧ{%ŗÕgfÚYT Ļ_=*S,1˛ƒ°N€ČüFk6fքš„F’:áR"Œå€.;cŦë)mbˆGöt–F%I$ŒgĄë֝5ũē\¸xÖâÅDj0ŖÜĩ žžB<;ŦĨAEÆĶĪ@G~)ĨĨ˜âģ ¨’ŧҰ`œ¨'“ĮãEô‚[}’Ë–EŲ/ņsŒįĩ2kF‰dļÚ>ĶĐoB“ׯSīVŌ kRT‘îC*†Q•SõíéIŲ#tŖĸDQ}ŖMļŽéŗîáŲN8éĘ¨ČōërM4î¨č 3—9é€:ûšˇŠË}åĮ¨”|øv5^-BãJĪžVgS’$ƒÁ֔áÍnĨԜ“ˇTca3āz֏(6Ji&šÛQNOßéĪcV,‚´Ōm/1ÉĢĩ'ĖėȖÔ7ĨÜÛˇņ­ôÕ¸É įĩĻ${JĖų,ZŅQ“W¸TŒæĩ }iŸg$Ŧq[öēĪr‘Ky$q7Ū}›ļĻjœv..#†HēqÔzįˇOÖĸppÜjq“ą” qœ7éKļp>WüŽ+DZĖā˜öm÷Ļ.€1ŠĪL~Îm^ÃįŠvšPÍp§ŠúŌ‹ģŒ|Ã?P*ËC:‚LŖ<Ô2(čqЉA­Đã+ėČÅãŸŊ˙ß4}Š8ĖCđ8§ar>RqŠwČqĪOjč Iõf„¸GãšA$ :°ü)ŪZ1Ā#'ĩWš)f'“I.€ÚĩɃĮÆ&Æ}jdŽfåV csu5J4Ë*œĢ‚w)ę*YŖ„[–ÄnáÜw8:Ŋv!Ų̤N&ž!”$cŸã•]WÕAW;{4ĶlîX 0F!ŽNGęG°¯Qđ=žžtͧÍS˛¨‘dwëZRJrålÂsQg§øÄLž[ÜĘ7ŪZ ØôČkÛ Éˇˆē•bƒ œqëŪ›kaid[[Eã“å \ūU`âŊJT•>§-Iķė7m§S€âļš•ˆņIŠ”ƒI´Ņpå#Å(&Ú1EÂÃE)ĶąIŠ.E&*MšŖm ÅYļƒsnbT•āįŊ;Ėoī—v´*)-Í8+cw¤k#āÖ9f'ФÉõ5—˛FžÕšbā`åĒ1>xĒc¯z™#^ |Ē"æoF9ŧĨ\mĒÂ6n­c#“ÍŒdqøPĻĐÜܠв ĖŧS3éW&‘]qšŠZÆM­L¤­°ÜŌSąFUɰĘ1OⓊ.+ 4„ââÂÄ[hÅIÅ% íŖm?>Ôf‹…†QOÅî>jŗ†]Z1Hō]¨ā“Á_OÖ§†3ļ<ä0EP‚Y#ēi ÍžãÆŌp:wŽ–ŪŪ9ęŠ@&FŨ÷ūž•ķĩ4HõiÉ'ŠVÚY-.’âU`Ėw$‡#ž3ŸcZs‹›¤y]Ã<ÅJ6ōÅĀ<ļ{tîqTį’Ž0Ēíoʍã%õĮŊZˇŋˇ†ÔZÛÂUL‚LČ3ž1Åcæ*nÉ.[ė@\ˆÉ$œÛũ{~JîÕå˛yßlgq“nUNqKį­Åą7,ŠˆųI9ĪP{uĒ777n‘Ē63–OálŸūĩ5Ģ1 #†p×n.¤8Qū GTvčĶŪFî]TŽOE>ŋ…#Æ#ƒÍ;„Ÿ)r§Įū_•Go֑ž_”sčq[QXX>Ĩy,R5­žīŨFĮsÎ5KO¸†˙_¸kÉîÍ÷ąž3č>œÕí2ĖEg*]ÂQÃaY˜ŒˇĄãÛŊiQ˗SXJĖeĸ}ĸņŦ­iBŗ–-´ “íZšv“g¨iö}GČq0DˆĮבÉ>*įĨ„A¨œ2°&} īSëËseohâRĶåZ-˜ĮM§ē֊¤ÔTbMEī3Būúm;R’ØOˇÉAR+´cžüXQJßÚ2”sĩ͜Ŗ5Ž×2? sÎry5Ŗ§Üä˙Ī3ũ*ę;ÂĖĒkŪF”nP(i3,gПåYw×/Đ ĮhãÖĢũŽG.wč3Ōļ§U(¤LâųŲĐNÆûύXŠōũãUmõ 2ĄÉČÁ$÷ĢļņîĮ¯Îk:ķRIšPMHŗĮĨ6(C Č$˙:Ŧ÷CoËÃįƒSŲÜŖ¨V$1ÉŽĩ5tŽVš+Ë]A¸zU˜Û˞ĻŌØčj,îÕwÚGčjŪĶ€=ĢÎÄ;T;čFđ2¯"Í-˸“Ā*Γ`ŗH Ü~ņ&x‡ėŌ~?Ę´´{xÍĸ;7ĖÜc5 Mĸ*Ú[jÂUxŽ—ÁnéĒĸĒķ‚ūuËŨ,§ËH/ƒĪn1]ŋƒí^ÖâGše.œŽ8'ˇŊ74Î6wyŖtĨ¯\ÆÃļŒSŗ…Å62ÉŠÖäR¸ÆķIšĮ ĶzĶę;õ¤ĸ€i´Qži€nâšIĨ4”(ÁĸŒĐQGPæ—4ÚZ]ƛ“KHh D$šNiÜRS¸Ŧ7š1Uīoíė#pûT‚sôŦ‹/YŨÍ$mˆĘĖ#\ˇŪķôâĸUcrŗb„e‘7)ČŒũ*Öôņ$q›•W‘Ę=sMÎ+VÕ—Š LąϞāÕs ådT䌹ô´2GJ/ØîIöqũņJą&0ĮŸZ‡'ÔŌdúŌŗŌčMöuūũ[ۊ,Įt|ļ †ō‹ų ¸`ãļkjÃkAfã§^”Mcx­m‡nyY0IôõÅ$´Pn œÎŧ*ŽčôhęÚ.ÜKm éĻp§¨oo^õ C,ŗG/ʰŒqžŲ¨LO5ĀYēSŖžâ9|“ÎŒ0}k?2§/3jxĨv†ķ†ŪŖ Î}sÆiˇYY!•ĄĖKōcqÆ1Į?Š qž<˛I˔į§CëŪ–ÜÚÜií ļųŗķ*‚9ĮOJG#ww*Ãw,,/´G ķŖŽA$Ž:ŠŠöĪė’JærĖcč§ä÷ō˛Ī#5ē¤}DXçãŸéWoÖ(ėãō¸•Øų‹€Ŗ<ŸLņÅ7ύ—c:úf¸XŦƒį~ŖÛųŠ’ ˆ˙ÖHĨËŽDˆz§éR‹ Ģ˨Œ)ō"Šbüĸ“ëĮéR\O†ô–(Ū@~p#Ā yøĨĐ-q°Gg›ŸtŽøfMĀc“Üô˙ëĶ…´ÛG0aÜĖ Mķlė¸Īõ¨ÎŠš™ĢFāUk[˙´)Œ¤ãx¸õĸĪp5NŸdŌāŽ{pSp’)˛Ūšįō§]Ã5•ˡķ.f;ɂyíéœ{ÖL˛ŧJXĮ’˙0,܎Ä:š ã,qŊÖY9ŪO'ļsS+ģ oSĘTÄüdl(˙Š%ů—4“3™,Ŧ:įë:;řüąî'#Ļ=1MØķŠTRĖãõ /˜ë§Fôų™ŊíṸ'Tœá¸\ûúUëX#3Íüq2ų›’uä9ŖÔbŗĖvöíæ,žt‹ËFŖ~§ž)o5 bŨ,á€x˜uŒôĮˇWTĸ“ŅÍôëUšHa•"Y uķ ÆAÉíœqíT Ú]Om#tÚXÆk6+ųí$Ã+,€į#×üšĩ`ÅįvbK“ßš$Ÿ+5ĸ¯5sUüDl {)#BFåVņ€ÃŪąoĩĢí_Č[ëŲ'X¤AĮŨ•°Oڀ˙dUžøüiĶ„R¸N+™ŽUBx~UĢρöŦ~CĶđŦe;H­,˙¤ƒūÁǟÂʧņ" QAē0oz¨Š…™zzÕ­Xļ ˙vŠ/G˙vˆ|('ņ1bB$å”ū5ģ§äĀ˙ī įĸæAÖēM7ū=Ĩ˙úTÕøJŖņęŽ\ƒĶëR‚É"œJŦ§÷­Úžü$šĐÁ­Kö Ō_Æ[ åēũ+h¯Ėk J˙ČģōßĘē u5Ë]ûĮn{Ļ}Ú˙ŖJ~ŋƤԎ4iûŧ€z“Ö’ķ?f—ę•6ÎįeŦkœm\ķžzͧŦLą} ‹™]^/•ƒ˛ŊEu:fĄed-eˇ‘šY\ #Œgõé\ūž?”ČIÂuĮ8˙õUËhEŨĶJˆB¸8Ŗ=ŊN+Ž–‹C…ž¯ ĸHÕ×ĄŠ€ãĩaé7f-1āˆÔpģĖEY:ĩŽqŊ‰ô kЋē"ö4™J÷¤™&ފpąģ}N*Õn_„Hã­É­=IlÛĪĨ„—W9$ĖğĀ~Uf+ųpãyõ5.@j`â“Õ5Ô@2Â§ŠęN7m>†Žq؞—đ¤ũj1sH#YÉũĐyĄÍ-ØŦHiĩVãTŗˇĻyĶ`$œÖd^'ˇ–ûĘØV"›ƒ“ĪLš‰V„wcåf÷JJã[Å÷&RR(Ú2ß(œzWScvˇÖqÜ.áČ8>”Ą^3—*‹f“4VċFMâ“=逤úšÉÖu•ĶĄaų—ųW<­sšžŖp§Ōšz˛jK<¤¸WfbX€Ã5j-ŧÖ‘Ė rĖ0āņYYuwemÃØfšį6×)V=ĪÃZĮöƒ’Čņųã!ÕHâĩ_+Į|{~÷đZZŗ/˜áŸp1×ÚģīøĒßCTų˛1åwcë]xz‘ķt3–ŽÆûįÃU4ÍJZÆ;¸ČãĄę*ÕuÂjJčÉ ¤Å-&jî+fŠĮ‚Ũ]Įo}äĒPŽW-œį'ëũjÜöÖë"JķÂęÃyˆXgÜË4“4{Nq tĪ­_‰c¸8•^oŧ‘„Čc¯s_?%ĄØ›OBCg4ōąˇˇ< ū>ƒVĨmnÖO1YA ÔÕzÚĘF:IQb„ųĮˇÖĒŪI¤ļŅ"î'!Ųša× úãĩB5r”žË÷yF4Œōöœēœ†čMPķ;â<`äcŒûŠ–ÎI.cgnFs!Čr2MPĸgC"2H†u;‡ĩ%Š)84™u˜ ä\"äīgQ–uܜū5jMJFę`¯ŊKËÁĮ^üuŦ€íįžr@FzZĐ{„šeÜûąđĪž+F´"zl[ģ%˜Éæąf¤™`8É õíYâK8cÛ =Îã‰##vŅߟ•>âvļžxī›įŽrväUoėØmc‰„Ąä‘ §=;{õŠ"W™ ũ¯‘¸‚6X7üĸNIĮįš}€ß°e$aŽ;RۘĢ%ÜšV]Ęŧđzũ{šĶ°†9ížS*5ŦryH$;H>š§'muaŗ\—1I ›Ëy’¯ĖŪØõ5Ą|ĶĨļŸ-ĄÛNv|͓ųâŦ_ČJC4ūd‰æ ĸ;ČëôãĩE§Xhę7?e˜C ŌŖHØČã5—›Uõ+]Z$™HŖō\œmc€žš&ĐÃjđĀ$f+‡™G_`; uĀ{›ævæÎíĘy'Žr{ͤąxŖeY˛Xôî@äKDv)Zlʖ(QG‰Ō8I—’ĘŊĻkzM­ŊėįJšû]Ŗ:ˆūR‘Ķ\Â¯ėQÍ܎Y•Š˜ ã#ŨIÉéíPÛë zäØÛ†Î.+Ą9=ŽDĖ[Ģ+›e"x<ëŽj֚|ÜĢ­­æąuĪ;ųĶGæHŌā)įúbĒiZmÃE%ÖÕĸí9`~•ZĘ,Ō‹÷‘Ŧ‚n×ŨF%ųÅięŅ4—C`Č ÔU$‚Pãä?T>UO‰•˜âĩôŖūŸîĩf›iđŌĶTĨÔjÉü,)üHf˛?Ō—ũÚ ƒ‡úVĻ­IrĨ@J ļĶ ß'QD>>&AũāôŽL˙isũ˙éX+k0`J~ĩģύ›Ÿâū•~¨|füļoZ‘ųŲëJmĻķXėā÷ÍL “åã8ëÍj–†2ܓJâę?÷›ųWDŧŠĪZÁĶ‘’ú0Ãs] \1É_â;pÚÄŖvŲfü•&ŸĪo íũÖ2ß/^}in×ũ~Î*։1ûcfV0Xāg<÷ũ*¨Ģ§c,RØĶˇ™0j…HļtČmĖÃs×üúÖ3ØŠēÂáÛn ŧ˙/Âĩ,ŲcˇØėvČšq]˜xJ5)Aė]MIŠžcڝ‰âŦ‹î0ÅN2Nk"úY~Ëæ(𨃓č1Tlg’Y[rmĀmŨIĪ"ļN|öaȎĄ¤d|į‘ß4ô琑‚+o]¨$°8ÆqŸZ—TÂÄã•xxĪđņŽ—WĸZ™û}66ZâPqЏzrI!-“ėkž[ë‡[x“$'ÎíĶÛúUÆškko4L¯!å:ŽpAĄNîÍ Ōw˛6ŧŲBäĒãëŠeϧ ÄÂ5‘A÷ī\ũÖ­uudˆ›s78Îx˙õU{e’ÂpėÁŸx*°ôŽjÕd’)A­ÎÚúîK].æD$Œ‘ĪĩpĐę2ŽÉVB>n¤ôĢڞ­s<ŠŅ1Ž ’)įp>Į¯oʘå˜ĘŒŅâ@Æ8Ŧ*ĩ;cQŽŲ§ōXŽqīÖŦÚÜ[B˛Ã#°‘“>bÃŒüŊŊĢUiŦeŽ'ō ČÛÎ28ĨEģģü›iE\×­f¯ XąĖąJ°đC€rĩÚxs[ĩŗĶž'F)ÛëõŽ.D÷ō.ÕáJãøÖ”qÉ%ģŧ08Ën>ÄöĻĻĶē@Ņé-ŠÚ"Ŗ4¸~\÷¤MVŌK†eųר#ĀÉquvÖۓ÷PÄôĮ>Ÿ†*k‹†VK… ą’$éĪŋÔņ-ÉsĐŧč˙žŋ5Ž"U-Ŋxë\\zōŨLX8ƒĸˆŲO¯\Ņ6¨D>Ķ,JāŽqĶ=k_ŦĀ^ĘfažFQ,ƒt§æ#=fMŦ”ՃƇž^r9įŪĢ]JË{(I ‘Œ e^áÖ˛ŊÕŧŠæ~nCm'ĨpVn[¨ĩŖ7ouüˇJ‹ Š*JŽ0 ŋ:é^ūÆ=:á´ķ(ŪžV{“ĮĄ닟í“ÚîU‘™ĘávÕ­ĨiŒŌ,WS‹Réōŧƒ<㏴+ukRYPâíQÖp[%špnĸŗŅq<¨W?/Nk\xub–f‘ĨTL”‘Tũ¸ÅQnérŌG ’āž~šŦÚeĸ”Šą2ā*āpp~šY˜‰FB7 OcSą!ˇ-Đp8ųNAÍRŠŌņ p}X`éPâŪÃ6ô›‰ė›Jb™KmnXŸĘĢø“V}cR’GUŽ5ų[ļâ;û’ÃO,efĖRíÂüķŦâģ[ƒž)ˆ F@ČüéÆNÍ"m­ÎÃÁŨÜ,žS;’}€õ¯Kûsu;GÖŧCOûcHíb0ƒ9l/ä+Ą]B˙ÉŨŸ į5ĩ îšĩŒį}ĪNūŅ]ÛH]ØÎĨ7§U\{šķ4Õå&_1ƒ¸Á Ņ&ĩ¨<Xw ą<äú×BÅŽÄōHôߡîΊōīí­Sū{\~´SúÔ{ŗ‘ÍĀąÄŒ„OFūíOŨÂ9|,†5ĶŖ:ú‘Mû<čyVûģŊjÂŨÂā[ēyq„?Ŋ —-ƒŽ}3^73= Њ^āßļÅq (’ë‚ øōHĨ*Jt鞭Īc¯ŊRUōŽå$ųN­[ˉ•”…yČëéŌ•ĐF”ãšzu—™%õģ´( R_æ†};ȒĮíkäK¤ƒ)Úxöîjԑīf‘ *ĄrĨqųV\`FNŖėčNÜ dúgŠëWjEŪåĄ–é“Å Šĩ‘ņœæĒJR$ŽdNŲPĪNEh§›sö1ĮĪ6FF=3øVs{‡&2ĘPą9āgˇōĢF}JîL @`¤Š=Įjĩo"ÎVGTFū Hėyčj˛ü¸CģaÎōr3žĩ=ÍũĻéŧ¨ƒÚÛå°?áĮã@†ĩņ…pą&×píšH_`9äbŦØfH¤šBBHä(Î{?úĒą ŠZ[Z‡1ʤ—@=ĮāK+Oȁ/ʨ?ģRö)- ‹y0 ;†îI9öĪ?ŌĨ…ŪRd,#刞ÄöĪ9ëڑ-ô˙°‡’iZāäíQÂûåøÕģÛËV>ČDj ´\rEfŨĶ{"Ä7qÛ[L°Ã Ëŋæn{ņūsŠrË$Ļ;8Ņ&KPŌ1QÆ ÎOsÖ˛ o$LМĪîĪ IĮ?áRڗĩ›Īˆ÷<â—%ˇyŨ’ĖŠs¨ČĀ'Č r€`į“ÃĨR›M‰ũbģcvu̎E.år!hŅ q–į?…%Ä—H—(Į€S§Ô§tTebĨ¸4Rmf1đ8?üënūvŋˇDKEF‰6‘EŗŽN:Õ{dG“s˜Ņ3ōą#æ=đ:Õ[쉭ŽLĢtH îyáŊ‰äæšn+šúšÚ7\ĨtĶd”’–ōɎ “Kũ‹xĮ"Â|×RïI,3 /o(ģ˜r[ž‡Ûšt–ˇ,3IöÉb?1R8÷ã­+ĪĄŅi%aƒDē fÎq˙lOøT‹¤Lŋ7ŲewōøT âiW‹ųíō¯øScņV´Ŧ ^¸Ę?ÂŖšlے1,9ēŊŧ™éĘkXÖ<}VĻ˙„‹T0īŽũ۞x~öÖŠ(9Ŋ—ž(\Í ¨Ą ¤y(˙žiâŪ%C€?*…õ]FFÜ×rį×5%ĨŨíÄÄ´ō°yĄ§`Vė'•8ÂdûSŧˆ€ÉD˙žjÃÁ;H‡ÉrKwëRĩ¤ōDÛ!ũÔsHžX”Öƒ† öjn’G­[]:õšKY˜wÂ[-"úä”H`r1Š-)hŠ)-”—I„]Āɂ=5ØišaŌãŽKTPŋu˜c “‚•cÉcwĻ#īÄnÄĢÁ#ĩ6 šĸŖŠĖj==?zØl2äģzŗŠŧš™Ŗ,6báĸ0ŦŠ?Հx$tΊ]SPhí¸Š JŠíĮ"¤FiIvŋîä%NŪŖūŊPš*ĶA"đå°Ã×'šę“šŗgä™ĘÉöÚŦ„˙ īøĶį0CrĶ]€į@ÉĮķĒpŨ€îãkoB ČĀÅ2îb`Ž!Á qžŧõŠR\úŠäíuÍđŖČÜØÉ99ãŪ–öøĒ˜dTķ.ŌŨņYVw.Õ žzšK˙0^Å0ÎÅ/“Œ•8˙ëRSŠzlÅ}da SĮäįÍ”“Đ ˙S´™I€ÜgĻA9˙ Fßːą?&KÆ1ŌĄ$=˛ēåJ‚úŸzQ“ė;›Ö˛[ūųČ,ʅÆ˙Ž›ĄnÆ(ÚÚ=͒\.qך§ždĨÁũŪ§ŋcĮä€Čő+š2Ā^ĀĐĨŊA;›ßYJÉ ˆ†U!2ę:§šsÜۘîíáE†L‚ˆ>`CXÛÎūfe9Āj_2{¯´YšâEŨœô9įĨt4ãēĩiíĻX`PŌ*Š9)üķZ7ßc’8âĩŽ8˜ß&éÉüë“Ījņ;ąX$ Įž­‚;}*]RIy?xä>3œu¤ŠÆLI.§NˇđŠ*ž[vü§=úÔōŊ´kûØŖ ü`)ëÛ"šßiyģ…YÉô˙*ЖüÅxe ŽĨ‰—ÅÛō¤čk ėygdW/ NĒ2ˆĢŪ¤üÄWx WÎáÎĒwēŦMjŗqf;ķü\cuöĢŧĖ’¸+NkNI\›‹mdšwĩ…Ns÷F õŠ+D i^šÚŦĩnb@Y”2ŗ‚p9­eēWķąIļ6#h?įÖĻQi{ÚXĘ =´NËČāsNHŦHû.Ėc*8úTz¤¯2Ŧeh''ŒTu  ųlŒŨqøTˇ%¸Ë(ã\.p:qL3Ǐ-é…ǰ^<…Ą+Œ įÔTæëËÃLØĪ@hæî.+†„í*’u Ũ1čj&ļÉ&T—Ęš­u|#MĶ.å'ĸĸˇŋĩg-å¸#ųm‰č=#˛vmđD8ėĸĻû:Û6,gŌ0I¨Ĩųâķ`88$Ž>đ¨ÅÂ[îUģãąÅgvžŦj-–"ĩŗ`“pZ1N6¸"A`ŖŠĪQķĸļ$ū"jHÅÃ6UK)?14Ôû‡+':N› ›Ä1z’ æŖŸN†TūīĘ_áQŌĻ,ëŨ€xĪ4$Oŧžđ íŽÕW$Ž4k"ÜDœđü*ŧZB#8Tōōx'ŸĘĩFąSŠsH¸ ŌmĮP:PÆe˙e?üđ‹ōáEjīˇõūúĸĻÚæwBę6ųˇî•w>Įão:ŠrđEʒžFŗéÎĨmIãs=äWŲ+`=…E¨XŊ˛Ų\+y¯(.!Æ3ЏqGS>yOs4Ė^ļË Ž[ĸõÅ8›O´:ą’H€ØŒ§dõ÷ĢĄ–?<$p¤‚0ŋ)ĮĄÍ@˛ÛÚjŠ1ļYcbc×ŊĢDȓč6[x­öÁ#ãæ,ĨøãĶ#=xĒŽķ2Њ89åUyĻOzĩx.īfē w-ägO¨ô§ÃoØ7-ŗņ!%°}{})ĨĨÂ#-b0Ú¨UGSēWl¸āOZŗo-ė‘írCä.㏙GĄ=ž•41ŗÜŖuˇ‚lÁōߟô§ęmok!ŽŌ  š–f=ÎMDŸB”’dĢpŦąÚŦq#3aXƒ¸äôôŠËæ×ɟ`f“pbpÛ˙¯X)vÉ(IrpNy槎įĖ-Ëįb˛ƒģ‚9?ũj‡MËąÔ\46ķÖI<°Z8Ķ Ž¸÷˙ëV\÷‰$˙gw¤ßu”`Ÿ­gI*E$ ÄÆ`ŋ8-pN1íŠ}´s}‘eiJîbąá‡QŒä~"‹Yę$ŽĮ\°’áZ4!Wå`Oœš$¸{ #öx]Éœ˜×-Ék!öyˆu'qG>ųõëųVjJ×MģmŒ‡!N:gųĐõŲ’‘ˇĻ€%/3¤Ģ n.§*Ø>ÁĸķAģģ¸{Č]nP:ßėöm#ĘĘG.0 ãŠŖ¨]Íj"1;fAšOLqôК—7ē])(°¨ąļlÜäāŧz֕ž—zšdą=ŗĢ”;SOpEg-ƤđG˛v1Ü[9ÎHĢīyxē{J“K €ã8úœ˙úĢĸŒ'Ėųģ2œtF\6ˇ)6—}ģũ”˙ëSîm7)Ν|¯ŒŨ ­AoŦęi9Y/g ;3UļŧžŊ4ŌKŽ=ë 4ö4MInhč[ ۛ‘" SȆ2H,O$‘܏ÄûV]ĩŌi—2dFĪ¤K˜ëÁ­+;›ˆˆˆ‡ķN=qN{<ÆI!ųےqÖŖÅęSŠ’Ņ”5 Úę(å0*į1Û˛ä~XũjM/Xē˛D°ÛÂÍšžE-ųb´ÎR§÷R…ÉéT¤‚%1Eę„āŠ~Ņ_b}›ĩŽjO\ûAšļēˇžÔ“ŗtC ú• úūˇ!ûPhŸü*ŦZY–xŪ5rØozÚdĘØĶĘíä°/^ŸĨi ßs*QŅ3bMLĩ„rÅ,ĸ_ YŽ cī÷?ֲ䚸kŖpō˛ƒ̜Ü˙*!šyYŧČʅã–Č?ˆ>ŋʘŅÉwq$ K鴐@í]ô㔌Ŧ’"Ŋi/A€H~WŨ–ÂČŦûwtŪîܧœŒdtÍXŧf†îÁÃ! äÔrČŖœ! XãĮO­:¸…­ŗ9į; w 2n=ŠŒņŪĢÛJŦņÉ0RÉd=Qũ(ķ˜+íÚ œįĪ§J¯{užâ7ōˆB§o<\ĘĢræčfĨvO Û8vLą*ƒŒã4@ņÎąģp rĶ˙ÕųVWœ!Ė˝"”ųÂö9āŒži%Ô ‚ö“:Ž~h[˛GĨ—$ėļí#RŅ’îáÚHpŅ)ÁaœƒÆ™§^ģK,ÂFķ•Čā€j[kÅ eĪ™;¨ØzœįJŽnRFl䜨{~*ŠÛ]tI•`æI­Éd(Ëģ͜tôĢM•#@¤H˜ HlãßųRĊí#¤1m' āõčã˛;n ÃčžĸĩSĩãØ¤Z¸qąY™NĀī†l‚Ô70ĪōļoŪË—üöŠUd$2ųK¸† [ŸķĀĒwr7ØĻBdȔ*hķ$‚7.ÛBĸßĖfØw˛ĢĐgŒÖyroŖTmĪpG×֞5h“æÂŒ”cÔú{v¨2ąŨ,jĮEmŲāsüŽkĸ-GUÔm—éĨÔ"Ô ĸôÁéKpVâbÄâCŲäcĻk.æeUķc!KX’?JļŗY0K6įƒîjĨ8ĮŨ7@žuReōˇ… øã9˙֐l•ĘšÉSÔŧ˙õéâkY$Q垐GŠ"œ-ļ^Nˇ8'yĄ=? rŠfĐ62ė­ÅĄ~˜o”œņךX™å€ęÅømØČ95›n^ki$ÉXènFpMiƈĶųŌ6øË0+×fķŦŨdĨg°œ‹nŲųm 1Ī^˙ÖŦRgœ˜dTVČlŽŧ˙>Õ3ŗéÍl@o=ƒ7āGO  ą˜üģ€TĢ“•TŽ™­”“ĩƙf ×3;•Ÿ9P;ö4Č5=Í*¸.WĻ8ãü Aq/›3ž9>ĸŠČ8”ã;—ĄīÍJP0[›đM˛é€bŅē¨,{žŖf[Ņ-ŖHŌAëÍdÂ>Íd7ä1PpGS¯jd˜*J¨2¸Œ€;W-Zz]ĶÜŲB˛Æ‚\7CŠy[X#wB~s‚aX6Wŋš‘œdÜՃ|ī Uü>ōã?äÖœš‰wŊëiĸKDÉ#ĶŪ…žd˜™÷MÁö÷Ŧš&AnŲwM¤sÖĒÚß,ąˆe$’q’sŽy­}NVû™ŗæZģÉ$nP‚HëL3ųvŲBIįĶđĒnšcÎ@ĪQš­%ô–ō‹n8āį°qŠjƒ™ėˏyēEÁägŋ5p\Ha&áī\ôoæ]ŒzžŖÚĩ.âNNÆÆO_ĨS‹!ļ[k˜Ú0ĘsÔãÖŠOËH˛F7ŽÃv?Jt÷ą,JĄŅFIéČíMGĘŗåO†):’ؤÅŨy˙>Ō˙ߊO>Oī~§ü(ŖšCē9ۋSh$`#hëÁņ@Đ/f™WÍM¸ø z`úsÅkZ"BÖÁUw´<ÛAíü9==h¸Ô'ēš[eT…`Ī Ŋšįđ¨uFŧŅļ§=}gÖčĒŪmę°4æP:įđéUŦ˛iÍ(‰PŪĄˆ'å×õŽ™ôæ{hÁEŽ@>I8#} ĒĶ[Eg‹”ōĄĖĮssЀ 8ÎčJ)œ›yáT%?_Ö¤ķfå%*Æ=Ž öކ=&ČÛE$ąXŠ#cˇ)Ž1ĪéP&mĮæÛËą&.u'œ;b§˜Ņō¨ŲūۛeíænîÜ}ķT$2 ‚ŅŠCģ+ÎOZí5­ā‰‰ĩ™î ģ™{ ?‡Z&Ņ⚲Žę'e2F<Ær!ŒķŽGjŅIndŌšÅŨ âM˙x’HÖŧVŋgą˛ˇ¸Ü‹xá˃÷GŨđųD4øŪū(Ą˜J%e\ãš85ģ,_ë*ēZnŽŨ6fc…r8Ŋ隤…ĐĘąŽâŅ%Ļ ‰Gđ“‘õū•zéf´R)RÔ6Xq׎?ũTįyboŗŨ˛ĸŋŠ"Bx>j{I–-:O.͍ā•<ģ§‘” Î9=šâŗßRt2$Ō˙ŌŧųĪj0ISˇ>™ô&¤„XĒ2 xÉbOÎĕôæĻŒÆ÷ŪA`˛>Adl¨ÁúfĸÖ'”ųQl1ÆĒšbŖil Ø#ˇ‹ëat+ũ™Ļi#]Š ŠŖ,ãžũûÕëK{xŽ<š­ŽšX› ŋ>œRÄÂ8ū{Ā%GÄg$6[žíõõĸëQ vˇâáGÍŗå,§žsīĪZo īîØrZũĻâ8IbĖáļu {ūu>áÉbgŊŊF ˆãčAŽ;W4ŊE,ĸŽō+o*Ėo“’IįžOåZڝͧØÛėû•Ũ ŨŲs×÷įĨgĒvF•‘•qĻ]k"E´.60_”g×đ¨5_ K7Ģqm ÅCæĘÉ'ųãđŽ›LĶėîb†)‘DfÛdg‘ƒž˙Z.áKVĖnČw€ė¸Ī?֛¨âÂ-%va[hĢh’ų÷Ģ $ųv/VéøÕĨĶ-nS͖éVBfe%#lqŽØõĢķۇ"8،!B_øšõíÛŠÕˇ‡|"ՌLÁ\§ŽŊŗZĘ­•ú°Nįęö‘éúŖĮĪÛ#Îá F\úƒ uļöļĪŖZŊēėYŲL›ce ŽŖ’sõšqḅ6öSr XmõÎüâŦĪkX‰Gmîãô=ķ<ûŌm5Ąŋ5Ž~!bnĨ¸šî´Ģ€Ø!¤ú։‡Mē‘Gļ›Œû@ ŸLV'øÔ¯ CąÜOÚ3×Ûgõ¨‡Ã-Ÿí—Đ(8ũiŲuŧÅļŌ<šŠE{æ);”™Ãûã­M¯i7v>z$ŽÉķ.S'ŽŖ>ã֝ÃKeû÷÷č˜ĢļūĶ 97—dûIåJQL¨ļĩ9=2I!*Ĩr‚@æĩ&û,‘–áÆŅü/ԞßĨuxGGŽ!ÖĀ9™ŗëëZÖÖvv‡÷cęKSĩšS’‘įĢŦ Œn¤)b퓏¯įŌĒ AáÔatË4‹‚<’¸ÅzˆnĸK_Ũ] gŊņī^NĖŠ{Á$!Ž6ˇ*žŲúūŸ•ŪKfqÔm—R ãi ß0Āû¸ęxÍbKxđEå¨ķ\äįÔg͊ŗ%üp¯ú4†2‡lm''Žŧ˙JĒo-WOXy“Hw”qíĪĐvŠmËsw¸ÛĢįŽĶÍ Áœõ'8āLS„2Ëf×Wîå0FĮ ōîã˙ĨR›O˜Ų Lrĸ’s)Ũž?úüûŋ§Ū;ÛĨ´&Fg\3*(úsÛōĻŌJč{- Úuė&æ@ŒÍōínĢĪQëøÔw։6Ąn–ļŅŸ%™ūeÚCŽ˙*l¯ĩš#‰å?3L,pz}¤)‹†'Ë_5rŒo×8¨įģšęZēĩ…%Hí§i$ÚIgųG\ŧ}GãOˇ‘Ąu•†ÅTÚČ[ĄîqīƒY6–SC|ÂŨŖåYĪđõŠ…ŽnōXd,Îd@_áļ{w­"ՒEĮÔémBš 7ˇŪ˙ģ™éúÖ^žĪˉČΊŠĀ“Ą?ŽE^šŸ}Ā‹ldÚTî9ëũkMģ-XŠ}"K’bXŽx˙õS–ķeģCæ+3.KmäÚŦE!ĘäW'îō2?:KȅŊĻ[ČšŨ´õīúú×TĻ´ļÅŋ ōâŠRH}Ā’6㯎qTކå7žP¯ĘĮ8õr) ØÕ\ĶNúėÆ[ĖéäîvÉ<‘VĘ āĘTF‡#Šāw÷ĒöĘą2쀨#H—zŋöhÍ­ÕÔŌ.Nč—häŸĖ~UŦĒģč5"„ÖÛC—‘QÍĶĸú|1ØyŌCĮ˜›3č9üA5Ÿ) ‹l <ĮŪĪNy#ŠŨÕdhlŋŗXŠXFAQÆ9ū†Ļ›r•ÖČjZ™öŌZÅjdh™|ŪxÛĪCžũi֒E8èT`>`:qĶ?\To<7N<Đî€ÚŖäœzƒP„Ú*´r$qÔņÛųs[JO›wԒ8dEQÕ dnGŪ=6ņęzUt’HBT,‘õŨ×čsVbģ8ī1đg’?:ĄmæG{*žB†-ßüæĸ5yfãЕ-M3Į¸†Ūn3Ÿđ¤ŠTžäą]ģ”cņĪzĢĢ9ĄÛĀŒ˙‡­%¸uÜÛžcŽŖĪ5Ņ*žį˜Û%KķĶp>RsÆ­ nŖŽTnÎå>ŧV%ÄÍ<ŒY1埐‘ÛđϤĻ}­#2€ØīĮ5ŗ”Zģč;š,’´ûbctų‡#ŪŽO4$ęĖ@Ũ’xúUK‚aÛæß"‚Ŧ*ÕÄąI1FX‡ ÷â¸*ģÁ4+č>Tˇ-%ĨtíčGĶ=ĒÜąCšef1m듟ĨW˛1ĩËĸÄĸ@Y}OáVa‹l æ°Č9āįąœŧ˜ĖŒÅ˙?—ø ßãElųķëũô?ÆŠĪ™‘ö÷&UųĘj)ā+8ę9üęKT++¤‘ą.~U$ķÍEqi—Xw@°0gßķqׁøR.ø¯s’7ƒ’¤ũŌo|×9’dĢļåĩ!‡–CŒđëųœÖnąwoqą!gĢm—#höō­ŽŲŅ㖠ŅÉ0›s6Ķ€^ĮŠÕ3i2•\°cæ89ÚØę?¨´ƒšÚļV‘^Ø[š„ŗ€<ˇ?x cŽGŊMt˛y°yqžG%ÛÆrNsߜÕm>ö[x „đAP§'øy¨Ŧī>âAcvČcÉo˜”cג?ũTۈ9>åŊHĒŨĀęŧ™3œ°n?Ÿķ¨4›Qg#ƒ÷ŧĻYCąpc#ü;SĻ’EžÜo/~ā_šČÉü1TumVXĖļčŌĢFA\ĢúŧgōĨícEŦnW–ö‘,/ņŧ:Ŋ?‘˙aYᅮLŗÅ Œ°T?1#ž8ëÅj,č é]Ęāą=y_^˙%ÅØŽØ0ēY\ÆįėĘ #+Á`@Ī?Zˇĩ‰ō2ÅĩÅååĨÖ Dp¸ã~Q1ڍVúîæf!Ø[ĸ†\r¤äc’Oz|ö×ņZíŊßއĘRTt ēĩXÆĸYf`žkŠ+c¨î;Sķ`Šú|×sÜf ‘IߞĮ@=ęię+äCnwķˇ`đ:JŌKEM7}ąx$¸Û’äîví˙Ö¨âĶ.á]ː0ÎĶŌ1öĘâfu…¤×Ũ{HÄ)ƒįpXõãŒîŠ`´ßĻMq"Č$f\)QŋSĪqŠ“[Zj.Ģh‘)ÚcLr9 gĐã­gM¯\Ü\,Í#ģ„T*GŪ c§ášzËaŖĨą—O]2ōč4H)S•ŨØātüj+{iEŽōĒcB˛+Ëm選æšHīÚˇ‘ˇr‡îöükrKįkŨŗ•@¤!(ŨúņøVrƒZĄ;ŖŠ‡Vša6ĸžUįõOíĻx<¯0ųË÷AˇÁíY֗Ў2,ĻCoĀÚ­†n!RÛN-ne‘Ĩ eJŒƒųūkԇ~ĻĩÜ‚HÖe^!Aäŧ‘Öļ­8Ŗü.ߘã=kÖįėåÖ*E+æļ É;@úÖÂÉsrmÂ3C>ė,*„=ųéØsëNNīCUŠZųåY#Ų)G …UęŋLSĻŧ7ō¤$;)sķ‘ßņ=ĒYe’U#>\›ģįĄ>õnm!šŲ[Ī"}Ā4oōš3׊ôĸ›•ė\op2ûÃĘö…Œ ģˆÚ;v¨âŪgˆôä“üéŌørYÄrb #`3×>‡Ö‘ŧ+l­qyhœgķÍtķs=•fĩ*ÍãÛÖ8X#üTUGņޞ˙2€ôÚøVąŅt8dÔ˙v:F“ÃPGĩŽį”÷C/˙XŅv;#Ÿ“ÄēäĘss7āHĒ3_ęĶ8ĖĶ’}ÍtíĢxj.c˛–O÷‰¨Ī‰´Ø@0hČ}öÎ•Áœ]ÍŨÜd†–*C,õ¨ėm$J†ÜÚF§ō5Ų?Ч›1ÃŖBCņ†Œ`ũzŠŖ}%û@Íök8^' T"ņœōcÖ´Œ%(ˇ Ķ{˜˜´âß •—8ČúšŦ˜]Y•Ũ ƒ´ō=ëϰԚiŽáVH˜ā ÛN zfšëûm+ÂV ´î9qŽ*j +ŗ[<‚Y4¨|É"ōŠōŨÁãŋ'ŸjˡuŌm|ČefÎA;ļ‚Ŋ°?¯bĘŗsz#eO•—$U‹Į˛š†3ŧĢÁd įŽ=ũëŖ%ރíÚļ<ЍļtËuāūŖęM=bōZw|˛üȄũĐ{VLąÉmq Œå 1V<€qõæļâvæDũč)ōŋÃÜJ‰éĒEČP,%đŠKd3Ž?ČĻĮžîč‘Ē-æČÁIöüęąkˆ‹Ē e@0$g”č!ģŋũÕ¨S,@8PÉŦ•Čąf{BV+˜T- •'Ÿz† ĸûJbY#8ÂīŸų5tĪ­ËÚ\åp6ĻÕČ`z V yˇzŖ%ļr”ŒŽOņø~•ĸģ/[3ō#Ė@3ōue=ęģŧ’ÎĘØĘäí#ĐsЁîĨ/ Ãch Į#¯J†šFáļ“‚wI‘×ŌģŖ/uzsh]/‘!Ã#ųUNIãŋŋZŠizĪe,ˆŌ˜N{ķÅD—ÍilġWãž?¯įVBBmŸd‘É!fqÔõéX)¨ËR•îAe‰aIv|Ų'¯Ëūp{Ôh!{™~Ņ؊H ܁ž Ž2kOEŧ),˙čņyŪRn8Wp r3Ā˙•Åä/,F6*  žƒéĪķ¨uĨ6öfnNã--–K‰VIÉ8 Ū‡9ä~­FöŅ‹—ũčhUF72F{õĒ;Y"ŽCˇËÁ$ßŪôę*ÛOķ-ŧą– Û\ŽÆ_Ëō¨œÛ•Å&ĖŨ0 ZY$‘öŖ` Æ9OųīVÂc[eŸk;dˇ\rxöę*xHėžxãT(KNz‘ŸĨRoŽ’"`( ’8ÎI8nj•õcL´î ”ēMąrPnā1õ÷Éũ(Ô/Ũė™Cy‡h%SŒ)ļū\å##GÁō9-×v}†éTŪŪRfŦA"m¤Ąäœ`}=ĢZ2JMžÂ/éęp“ •<ļk žīųSo¯žæyå=ljš’0ņ•PP~„Õx&ęWa´H8Ü×\eTôŨ–ôZvÁ–F‘Éo-rT‡qõĢi(ģ°zŗåą)ëÜĶghΛZÉÚ°‘ōsƒĐ׏zÎĩ`ŦŽ<œ`˙žkWFēąsYv÷0!o)}ßׯzŽŌ'†æHŽ"++KË3į§Oo^}ęžFUU‡`{ÔW˛:Üye‚!ûŦN ĪzbŗŲ6„ŸRK÷Gŋˆ Ÿ•zUœG'(°nĮžŸd\ąy2 ąa€G\b¯YE ™d*ņ¸|ÜņũÜnõSĢtÎâI‰ŒlĀežøąÍD–â=A#(@nxĨUŦ왕ļåvšcĘ(]0  RIÎ ÉĪŊvR÷Ą¯SEŠmHž_& T†;÷ˇ^:įԟs¨ų—ņDJ’„‚r8ÅAfDEæ”ŗFäîÛü>›x-Öæ?-ŧļÁ%H9 ķéŪšäÕŌėFĖŌKø “l`âÎNqÔū§’ėC˜ųĨAđŦK‹Š„~L;•˜áŠ‚ i÷PܸF,\ā‡ŋNk:“æm ɒiM˙•UėŏڎŲpą9XÔŽ2Nqƒßio„Ļãíŋ(o=™NrH_oƕî%¸Ķ-m6.öœ„Ī9é×ķ5ŧom [vļíyrÛT̏gõö­í>Ä@Îâ@ßŪR(įRé˙f¸ÔLęDpÎęƒ`įŽ™ã8­9ŦŌô‘gVįʈŸô< zz}+:’mØŪ…$˛ŽVe H;€ī‘úU¨ŽfiK wųĀŦčŌm5ss+–)ĩúŠF?ZM—~1ģnp8ũk ]yZ"(¤‘ÕDkˇ /?–MY†Tˇ™Ž 08š'8úÕ î"oÜãsP6~oč}iépĢ ãQ1É\ˇ|qČīŸÃŠ„›)˜ē˛õ_22dPŌFWsėĪÔcķŠĸšmFáŖņÉĘXĸ'īā`öīĪĨbExŅ@eŨåĖ‘Ŧną6ųÉÉü=ëKKēK{I(˙žËÎ[€œĩHųąųÕßRú“[ßÎ,b˛ižS°ĢÄSz€īëOÔ´3=Ŗ_´ōaÂ"*3ŨpN~‡Š“C{9aûÕYČ69Ũ‘ÎXúsŽÕÔÛ"ÉtUŲÕ`0S÷°1ČöįšÚ&Đvg'†üŪ|šä#žßūĩZÂs °NAčYMzÜv˛ēĢōž˜§ËerƒĒĒ՟§ŗfüį–Åá ‡ˆŋīcÖ­Įá Đ`´j|ô¯@KzvaūËcúSÖĘÍ1úžĨO*ęUŽyļĨŖ.—n%.ĶsƒˆøŽxŦKkd¸ŋ„‘#2”uę7sŒ~­z‰ôˆĩ-=RŪ"Ĩ\pŖ'ͧ§<įĩyŋ†ní‘Ë_G,RyĒR[t7 äō3ø×Ą‡kŲ´ˆ’îO¨čpÚĖÖŠep]ŗĮR8ĪsÍeŪx^ķT+,P ļ!T˙!íĪ5ŲxŽĐVĘâÔ]Nc‰¤ ü¨€rįũ+CÁūtšŽg(b¸xĀÎōsüķŠ‰ģŅV!Á=Õ´;ÛiĘGarĄ LGōŋZ¯gÜF71ɰ6]|ŧûŒŽü×Ōo´r 7 fĢ´h™ÍŽ[8'ų×-îŦÉöI œk8ž@į >Ķ•ī÷{Õé.mįžA˙ž•BEôÆEzų°ĩ¸ŊƝáLŠ ?•Gs iwIĩ­lÆ?é˜ū•›‚ęČt.x´wę; „ĮŌ1T íÎ=+kK„Û[-äAã˜į€21ī]¤ž Ņ ų-Čn<¨Ī<˙úĢQđl°šk ë“)bĀ´{A?\đG%ö%Ō’9Kø§âyJîˆķIĪųęjKĩūÉÔd’Å7ōr8eāį’F3ô¨ĩu;6û$ŗ :į<’îĀZØČ˙hW–ēāS'™žō‚ČüķT-nâŧ캊î/2 Ėr#$tíگ܀mm]ŖŽ˜ĒMĨf'tŠŗŨĮksį†k0 į8ÅZPŨ4U"‰~f]€ącÉ$ŋJVY!’I åIۑ€™ā“ØäUkéV]Ō#/Ę@ā¯ŋ¯ĨKՐÕ˗ o}"4jSĖÜę™ 88äv8ôŦí.XāļēTVY!}ęŲ?2ŽĒŪĮĄ­‘§Ų=ĩĘM+ũĄFÄ>Húœ“Ÿ˙Uc[@§ÄKm6ķāÉ´í,į˙=)E§r’ąrwVwBęáy!9üzš—dQ;HX,ŽÄžā`úsžĩÔ ‚í ¤ŗu*ÄņČācŸJ’ÖØK<ŗĮû?*FząŊš?äT5mĖŲ[0$‚Da!f HėOJ[iúîĘ&į ‚xĮ§ŋJI-ŠGž%TL’yŽ™öīKmy6ލ|čäÜp9#×ÔņT’X"ŌÖ0Ëfër`gh×wŪÉQsģôŦoĩĪi{ėRîFFzķŽĩŅ_\› Õ1É"LÖåĸ8ĪBÅGžFEbiŅĩÕ˙6ī=Žc7ˇãW%r˜Û™§Û)cšßäĀäg#ĨTŒŊŧ„J|äáyŖ`$Šå–’HŖøČʐO?^ĩBîp’—G%Øņ­ØÚmÅÍŧåmŪGF|°v_­,qģHVäˆäCąƒ& Ryũ*žœ“ΧČĻų#žTĮƒ¸Ŗ”ë{Ų% $BŌ†áācüĮ_ZLM˜¤Û‚7āîāgž™?ZfĄ\"ĘRPUą„ĒŽŖ'Öĸb’Ī2´…‚ŋĖHĀ'üôúÔņŪ<”ËĨiRÛršā˙…;Ũ$E‹đĒy—.Yy'üķW´{;yfŲs.<ĄŧÄOz]>ÎÖi¤ģ–áXŦ›öã–OĻ:ŌLQ’âKuRĢō’8=ŋúūÕ;ģ_AÚâjĒ!ŋōž=“eIƒœŒƒŽÜĮŊ@7$eFzúķŽŪ•,…šę &$œm>Ŋ}ū”Ņ˜n‚¯~|žŨO?•uɸZ%=ĢnZâFEUs°œK€ į ^•šlš8æ…É3—UQ ¸?—åZqK Ŧkä:ŗ˛ŽŖŒœ÷öŦËYZęäŦŧ€Kښįnũ„•÷"‚C6§†áj:ŒN•oėŽ— ņJŌ6Ģœe¨’IÚF ŠŗĶ5~Î-›Ū$ÎOgZĘ*틗R—•Š˙ĪõĮũũĸˇŧš?čũōŋüMW+‘w2J™nŲwJž0YqĀĮjx‘>ØŅ)Ôcqč=qš¯ĐÄĸGwU6gOĨ>;ËyƐ1•œ†UqéÜķÖš\tš ˆŠ!ƒ‘ą1x9=+é” –b§w8įú ¸ Œnx.vī“’TqÆMPž'Y•Qā‹‘đ r}}?:qÕÜwbén˛Å5¤rČę<ĀINrHüúŌĒFĮtŠdgî§úc>œņßK$ĒÚČTŸ4xÆ@#ņŠŪÖ8îâx†Ö•‘“čéÅhäÁŨ•d–K¸ņ!TrpoĨNŌ ũ”‚ã(¯Ô?­R¸‘DÆŪ Í 3…įnp1č*Á†3 0•‘„™M˂ĮčsøT]DĨr{ŅÃ3„Î×Ā d¸~ĩiąæV:ĸĻߙ}H˙ëÕčĖÂĮ͝ŧīf<‚rsQÜŽlâU$î~asĮzh3•Dwˆ×c(ā•Ûš˛1UM´b$Fh÷˙npI#Û$ūUĒ‘¸Qf@ĄH*zŽÕ#Á­ëXKj E°ŗä:B=j•UÔĻ-´Vq°xäķ6œģ1ĪAŽŪĩ%´š‚å#FÁ DJåš LųÔw6öö6“ bęrōFzÕË-6îK@öÖîĒ€oųģœ“ž:cŪ´Zę2 Fæ0ímeHԇž@íūzÕimâˇĶ xîSå>v¯ĖŦāqõĀ#>õdi—SÍ{vģ.–떆㌅ëÉU‹2įL€C+/Ú77ššäˆū5I¨ĄŊ†YÅ •„f”˛ÜŪdaHr īߚŅAæIۜķų]NhDļÂDvß/šĪ†Jʟ6ŦîŦ¤ŽÄeËŽ1ĮŌ°nî÷'¨ûģ=ÖQË$ûKČXš!€3“œsZvv‰ĻųWO$sĘrūSĀ‘Ôĩ‘mfu ÅÚ­ŊĻŨǁ.:ĒņŽœÕŲâOˇGäŒ0l9ųŽxíôöĢz"¯cM¯ímŋx–Đŧ€’A9aĶ‘Žõ’ĐA ˜Kžy°ZR|ĩį€}xâŦ ĩģIb¸y/MÅ@;qœŽ0ąôũGn™~'“d2JĨŒq&IåéOäRėhØÛØg­Ē[‘,Š^K‰æÜzgõūēĩsaYû%ō‹ōÆT̀qœ8īëX‘*FÖĶFĘæx\ʈH(GMŲāœžqHu).¤HđŦ ¸7ĖĮ=â+)\­:ŊōŌUd¸/HÉã~ß~pz V´rę6ŪD2y˛Ūf2xČīŽūõĀڈ âį}ģ+“œ’Aî=ÍtÚvœŅÉ‚l´ĨåŒr0×8ũkH•Đtw ˜P˜ÆķĪžkxۇų,†XWį§RkÔUÎÕ|ŸĻk˯QāÕĩIÉV0ĖD‘ĩ l¯ØrO¨úUŌm=#ĄņU°h4éWIdSŦ˛ã ¯#I9¨<é(ž˙p¯"Ëû–9$Žāũ?:ˆŲF¤Ü[ČÂHØ4 #'9įˇéīMđx„/ä<žHP‘ÂD„gĻxŨØ~Ģģõ:ÕÜq¸†Į#réNĘ $¨9>õmôâbPˆõ!Ž?­7û1†aqĶ,+šŪEčT$\ŸÎšĄcËIÎ[¯Ia3L*ū™#ŠĢqÍš­”!8ČaCVØ †ÛFPôÃ`ĶY VF(Ø~PÎHĄYûDG¯ÍJō2ÆHŒąūîjnÔĨ4]Jŗ6ŨĻPHt%:ã5‡ÖڐlN"‘ŽJ¨ČÉũ{~ĩči!+–čØĸšķ•üŌ8ę˙œŅ}EȞ§‹_x!4™Ä/ŠÅ\ŅĄi =ąôÎĢęÖŅÛA؊KŊ~f~īO§lús^Ŋ­Øé—P4ē…ĢN‰ÎåfGĐWžjÖļhakfˆÚ°a`–Ú9ČúĶ’Ōæ[#”ˇŠßP˜}ŦųK8î˙CëüęŊĻûЧˇ–c/„FČ)ūĐũ=ĢĨžÖ’X•HSc^ĀZÍ´Š[i…´ĘĨļ`ģg*2qÛØV\ÉŖ‹hëa"XŦ(Áķæ?vÜIÎ}íõĢ"ÄŧîōĄˆ+•wdŠĨ6Æĸ™FH9U<Ôūŋ\VŊĖæõÁ˜3Æ2 ×<¤ÔՐŸsš‡A+ėČ;qũjIãû5ÄIčU”/Ŗã 3õ9ŠO•lŖySå$0|žįœgÔUYíe‚ėÛ°ûļ =ÃŸzߚ2ؖŦD|‰bAKōŽ_~0Įļ1UZF3E°œ+ŽüõŸCZWđÄ^HÒ˜'Œ“ŽŋŌ› ļR‰g‹Ėe–8Į˙\Š6 Y—/bīĢĘY" ˆ žĪā ū5™& -ĘŗGûŲ ’wuSƯj¨¸ĩ:tqųm#HÂVī’=8įņ5åŧˆGSmĮwåííTĸŦ;u.CwdŠ|…7\dėW úA¨a$Y'dXÔ `6Aę>QYS!i|ĖŠ*ß1ė}ņR›Ģ§ÚR8Úpôã§ŌļåHn&Ũ™$‰"Ww™ĘŖˆĀ*}?ĪĩjIllnE•ÆœWËS0™˜ƒˇÛˇáUôDšŧ†)#ex°Ŧ‚,ūņéĀëĮją<ˇ’Āmæ/ĩIAē<61ĐûšÂRÔVėSŒBÖÍÉĩņō6A9Î@$w;ZeĖr<í!ōė9üĢYᴚÍR8Úėũ8=zwĪō§$ pđÍ4¨ĸ¨U?7^ŋ–hæ°Xæ ´2íSōd‚TqŽõĐ&‰z Šer°Ė‚í9;‰ÃôŠËhŗ]G’Ž~`HŨęJŲŽūé´|G,6rEō"ķ9ü;ĶŊÚ†2ؑĘȧhlzņúR[ÎVpfųˇ“´ÁāãĩNÖeJ˜XĘO"BG'¸ÔRYZJoŠž…ƒ7<žkIÉÉŨƒÔĶû=ĪÛA9H$ˇsōŽÕRÚŪAw<äŗļRŨjĶ„OJķÜl ßu”2ãqŒgĶëB”tßŧv,Œ\qŒbĨTe(ģ‘Įf#V˜ FO˙ÕWEÎU7ĘŠ ŒqøtīUd”Ål‡ YIųHëīŠ„_¨›ĖV+Lœs’xĮĩDJjƎøŋįĄüĮøŅYŸkķŅ5˙ *Ž…t@đĮ% Äؙ†ā›F Āã¯ãŌ ‚ҍÜQØî žsõU”œÁĻ!ōC KĻp:žŊ{bĢîšō8§Ëyh6nUāp0+ž\ČĘÃÔÉnĄæ"Ø ĮÍדÁ}jS!žS„ŧĄ2W“Ķ ôíH°Â—s Ä|G䃆ã“ĪLS į $jUžL‚ŋNÆŗvzÔ˜˜ÄŠ#*nUxۀzgߊeÂludbŲÆƒōķÆOĶ­ZGXfqšYfyl2=īPM¨ÄodÎR7‘Æę)rë Zč€OŊfA{–2ZQÃ1Î@ôūU)ã:“ Úe$ļæĪxé߃PŪÁ !GvfÄmĀûÄõč?ÆĨ]Y0+i-4ęéŊ–-ĮrîųAėxúUØĨg‘ ( '  ˇ_įĮãTíîíņÔUߎÄä.G?§ëN{ĨÄvаp ŧ˙áīčĻÚĸ3ÎOA’ĮЎāΞK ēåž%ÚI¸ )Éā/qßķŠ,Ëj> š ĻŽ_/ą!v€ôÆAąŧ c‡Zž)V@øÄ~ƒŽI÷Å7-ô‰urX…Qė*1{æ` č āŌåIãągÔļø’ŪÂeSÉĪOĶôŦ}įąŽÆÉšráVáÃĀÍ6FšxĘ´ėĀÕ{DŽi%‰2Ģ9ôāãņÍYtrŧc¯~*T˜ėQŲ&á‚ÄžÔŌ\›“ƒŪ­¸pF"RŪĨ>jāų,;ŸãMj ¯-ËÛÛŗI‘ĐdœûzÔQ›Ī)„ĶŽ\¨ ojŋ,Lņ4goÛ­6' Á|Åûė:š™Ļ$ČnLmlŪhr‡ŽÕĪ—Jā5ĮˆÃ0…V'†@ ¯×mu‡U‰D…mŒOģ ‚0A˙ÁÖtUˇ‡)>čá;ļ‘ķ×˙=k6™]ŅÆÁ"Î"v€0Ã#ūž*I 5ĪÚ% *6!AœãĪQ˙ÖĢvÖ(ĶđvĢd$yį˙×V§´đ,‘Í•Y?(“ž?JÉAęÎUŽĻ22˜øÚC|ĒTüĀc#?‰ĻYÎ.gŨ*ė|ĩšĪßŋåVå´^O ÂI@€Hb29ôĻFAķ F6’ŊĶˇz‡ĩÉnÅhÚY•íŅ YOņžWđäūUFâ)Ŧn <§@ #$㎠äkFėy*ŗ[ąŒ‘°Š=ķÁü…D-#’5fSƒ÷öuįŽ?>õQ^čÍģ´–âŪØ°„4yÜCu^Ŋ:}Ÿ™g*J ”˜Ņ›ī?\ŌZ[\ßN~ÆģmÔá‹0ęsŽO_ūĩMiĨąŠ 'l€K¨í×9öī[6îc8Y5&‡s<NāŨpųëS$SĨ“[€ ’Á?ũlVŅŌŌ„xŲÆģYąķÁĮā•G=ŖŖGåF]CCz… ŨĐįíôģe‚Y%¸ōČ=U į°'=O§=*Xĸ}>đĢÁ7I+ŒūšZŲŧšhČļđGŧÎĪO_R{æĨd” ˆę˜@ԟ3ę užĸ,t˜.må–)vČŧ†brIäķ˙×5: KIî"Ŋžk‰¤9Œ„ŽŖ>ßÎĄš?4§™( (zŒđ=ęK˛Đ›tŠ(ŲØä9^‡ąæĸČvžˆI-Qå`X&¸ü˙J¯=ĢŧË iËÂ.8ükRIf22ĒĘ@'Ą^Ē"H‚D‘å?6ŅÔō)]6)"žc3]¨Ŧš, ŸÎŗõkGûSLp’ÜŽrXgŸëW„ŗ•ûD@,JŖhqĮn`š ē„Sę ãq$ôÜZže؋ėŦ—Q5´s1tY}ėzĘ´ô‹ ōn$ļįˆî>•ręËLˇą b’‹€šo4–,3Ô{öü Gmsŗē­ybŖ&09Ν~~´IôX­U¸/ļ5Ûļr?xūŸ^ŧUe3Æŋg;>Qš‡Ę8ëHngšÔcŽ-én€>Čûđ9üķOÕ¤¸•mĶėČ-öīųš<žk;Ĩ5iĘÜ9‰bCys#Í$&;ҐvéŒõ›=™KŲ&‰”Ä~ôduíŌ¤[§´V,æI$ķƒ×­6 ¤Ũu ĖĒe\Ų-ķcW'mĘūd?ķë/ũü4UĪ7Q˙ Y˙ŋ‹ū4R ™ķ#çŧ )ä6uĪĩ kqgoŧˇ!cîڅYƒc 0ŠžæĘHT–ų%+Ŋ9íųs1Ž*;adör\›‰Ūī~ãåĮNŽmҚV&ĩ{™K0ō˙ŨR8üũūĩ´R´âxÔĢá–ØŲßĻ=ŋZ’ L[ÜH¯lŗ/– ‚1×Ļ1Ķĩ]?cģ´ĩ¤ŅÛJxōÆō =8ūTŊ›zĸŦėd´P¤ ŽA yQķ1ôũ)ÖŒfôՒiUŽüūN* XũžXžUY­Û’0AÁįŽÜUÛcl‘\HöR1%JvŨđ:ū5ję7C[šŖÁsx’FÉnîD'ÆuÉ=F;^•—ŠZD“ĘŒí!;@mİíž2*¤÷Our"ą š [$ž1ĮQZĻÔôHîžĪ(ōd"yŸî1cž9Ŗ›™/ ŅŊŠ–VĶ۔‰ŦōānÜSõíO’iŖgK‡&TBŧ™ž—ëP,žtmqq"#>@H-œœĮ×ÚĢ[[ÅÂũēėĊ›ŧŨģ‰>‡ßŸŌ—-ŲKM‰ef{9_ˆ› QĘļ8᜿œt{?>Ô΍[CŅ’Ā‚Åë‘îO­Qģŧ+ĻĀér NÅaōđÁ°>bqПzn™r>īãßÚŠē  °C!v*bCž˙Ä{ Œâû[4qik3É´Kmú˙žõŋ¤iRy“­ũ„’Â~rČŽ@qœûVQĻåĒCåģ9›/Ū´ûKÆĄ’‘úz×§xoLƒMˇbîŗĖŖœ!%~šĮōļūŅūÚÂŪÖåX÷y)ĀĶ9ÁįĨnÛXØA‘āŠßÄÍ×ëÖˇQļæ°‚ŽĨĩvÚ]ŋīcĨ*H ā`ąíO(ĨcŒt'9Ļų*Šv6ÜrŦĨ˙xÁWŅGõŠÔDŧėõÅBĒWœˇ\‘šÂXsę(‹;ãœWęļđꗒ¤LŌŦŽĘ¸;žQƒĪåëÖģÍkR{7€ŸŪYžRf˛ŅŅž•Ák-jēœ÷™&€ˇ—ŧ$äzāūT)kŠCCÃ˛„Ņĩ*=ė҃!| œqĪéPøD%žŊ`“¸1 ō’}sĪBgi“´2LŪs)‘6öāîäŒvč:eĨĘiwi:IōÄDĒØ?1ËdcZ š#ŪŊjeDŽô 2u9˙'ņĻ=á{‰beØĘ0÷ņ§rŌDX•CMšDQ¨eÄöũ*uĖęP0Œ`z3úÔBO20y,¸ÂŽ8āķÍXšbHŲã!%Ũ‚{ķZ_Aõ*Ų´ĖčbG“ķįŸĀU—ōįĀžcæTųA9ūŧÔj…R­ĩx'ŒãĨ=  i2sōį$įŌ¤\ĒåXžŽ~Vųr>PAĪjsâd%\++a°s’?—ZkAē@77Ėx=¸ëV­â¸ŠQō)߁ëØūĩ]ĘŽ@ĐIŊîgΙ?ˆˇAΎōĒ÷ōÂ$‘–8ËŠ/ÜdũkF[šbĶĖlTÂäī’?‹ëYĶ@īļ ŨĀã9’O¨8™ë$žZ4yʓŸĄ­AvŅG™)!Ŗ ‚2{cšOą‡E§nēŠt)ÄÉ(?(ČĮ ĶoR64cÔ4Ĩˇˇy ŦY@,ĮęzsĪãXē‰Ž}PÍ ^\2„ \sĖԗĘ6•peW9ČČ9ãÖˇ(ö娃œÜQĨ†ˇ,ųK˙A+īûéŋПėįũ¯Ķü(ŦėW)}~gģWpBm Ē1ū3V´ķ MR:˜\fT,T{ ¯NqT=J@ ]ņ€ėŽwzŽ?aUî`•ÖEMģAÎ1œŸ§4(­ ĩšĄ Āēšk¨"ŽÕČu•ˆ’@:qÖŽI;];ĘĖë]ĐÆ§)Ķ#ˇŽk'C´YŦ§–I˜‰ ģFYHįŋŋĨ%ũÂÚ~â7ŪÁvŒ’ ūF´“iY ˇs6÷Îy˰įw`Oo\WyĻ_Ϥ÷WWŲ˛Db6ą­ŗ¨É#ĻãŠËđî­š<Š RßĖ|ąĒ6 #Ž}IâŦũ’>ę÷QÕ¯#yŽT-$ÜD¸?­ą¤t9Ôɨˆ•¤Hqū°)%GsĮjÜŗĶĩmSM §*˙f[ģ˛,ŽœCîO5KXÔ/5XÕUEĀĩ‡/tąme\ô> qT!žīG–c=šâEYw+}=*RV§CkĻ_ØjąÚMi ŽI@u?(ī“ßž™Š÷ÃēėŋŲfÁ¤aS¨ÃõĀõ$StëŊ?RŊ¸šˇ{‹Kx홮Ą–l369ÚNs\öj&ņ{f- ĸųėĘúąƒÆãÉĢ=JZhiÜ鎚mäēKOö2WØíp ‚0HÎ;‘øS…%Ô-¤—JƒĖą Ûf’EVā`āwô⟨Ūŋˆô˄:YXGæ Ņv6Î>fĪ@ĨMe.­¤!ĩōŖGO1áæ(V?ŠĻėĩ)¤ˇ2¤ĐU4-ÖIžK˞$p“Ž;ƒũ*Ŋ›Ī˛ ąX‚â;†ļÁ†ÎXg¨9öŽ–ûIÔ5;››ĢËÃĻ›(ŅŌ"w›¸Úx†ĒĻ‹›k;ŨÜĮ,süūZ€æåTƒ¸ĘōE+騚uĐ|úN€ˇ Ës{&Ie´`Û{Œ pŊsøUm&÷O†Ķ7Ös7Ė aĘîíĶëééR@-­#ŸQĶ5ƒouä…Ø-ŲŽÃüô>Ų§é63ÃĸÍwvž[ÛΎv—ÛÆ0=ę|ĮfŲ ĐMy¨0ą‚U‘äcå1!†GN}–˛­Dˇ•˜´˜8hË`ąĪOnĩÔÍĒZĨÍÄąHĐŪüÍĖĖCļ{c§ ü+&įV[›m%‘%I%i/f‰Sv8Ûˇ¸ę3š„‰qF4¯uyxaÚVœDŧg‚xã€öâ¨KĨ}ēåã‚VX PĸėČü+ Ķā_ˇÜ4PKuh‰ŗÎ#g—“ŒđzŸ~š­ËKk{‹ûŠĄ„$A I¸ `đš´ųvĀá[LŽ1;X~ō8B–mĒNp>EĪ=ũkKKĶĻÔuHœ§–ģƒ•$ųäfŊMĶtæ„Ë0/Æ×ÜĘ b_|w8­m'NĶážXGŲ'ËÚrØ'šĮ|~•ĸ×sodgčwV–v‡q‘]šv㓓ë]-õ´Ų1NėH߆ĪJ|VĒĪ•Ãv#8Š’Ęv”Į$cvҐ=3Tĩ4JÃã™ąģå#9ÍNvŽOCÜāUEōáo*Ę5iXŒœęqWmôtœ‰¯UšQͰ…5šYfķŽL1ŗP hĪŋz¸Šˇ†Íi$|°ĒĒ; ‹û>ԒŠMƟ#’*¸éI“´á@úՎ͠XË)eo@äÕ9-ŨyIŸčĀRpcæGŦéú¤7’G&ė2ĻũšīüĢ›¸–IZęIeu‘ŅåČĪĶŠ¯MÔ ęAžŲЕûĘT’ÃĐcĄ¯6ģ˛ÔnîĨē€îIU‰ Ā ƒœzšäŠNIÚį-Xkî˜÷Ģ.õ´ˇŸËi›˛g$˙!Tįw†yŖ{g’c…( “‚¸ }s[ĪĨIJârCGēĪ8ĀĮ_›­bj ­€qŧāüŋ­E)ēråHĮXĘÅ-2âęK´ŧÆ|Œ>ŖúVũÚĸÕtHиE$ŒsU|?ciwm‘#GÃ3(ÆN> ˙ž+V÷^)öËf)’eę6đ3îOō5ŧ•å}‹P‹÷™ę]ŒqCrm#ûVŅ—#ŸÔu­x•pŪņ%Åö¤Ë+Ŧ*’}ÉĢšŪš5Ϥ-ãf/ŗ+8ßķę1VšjčęHĩtjęP[A÷U!’V8`§ˆĮnŊ¸öŽ/Pšû%›\$ÉŲgƒķĶ>ãåSĮ¨_ßŨÜ?œkÅŅ†âÃ×&š­~H…Áf|Į!9*FĐOeųąô8?Ōą~ķ9\›d7ˆeÂ`3ˇvėwįę*ŗ;ų#ĘUŧ”eI8~<ÔvūXÛįHFHĮ<Ÿ˙UO=ƒËqÂ0FUL¸ų@¨ĒZ^âę,S´r,§įÂíõCßņ4Čņ$!˙u%ˇā’OøŠ’úæíAІ+mä•ļHû.ČWׯ~‚´Ôvv:´Öo4g˜ņ‚bÎj˜}ŽHƒ˛Ā_åäQüĒH]-ô˛ĒŦĘ#×;Hëų‘Y JŅF§ø\eĮLōOô…EŽŽœĢŽėüÃqČčzúU™5>?(ĮBĢģļv÷>ŊųĒPyōĖ‘•uˆ\Œ€?įJŸģfdAĩÚ1Į’ih4ÚE™/cų^g%w™:Ō´ tHNŲQÖAÆīLŲũ+ZĒå‘É‘ĪŒū\ŊæQ!C" ˇŽOn}2?ÕšfĘŪ@Æā6õáIĪ$õūUv=ģä$ģ°~Ē…”íxœdG& õ$GęjY%tˇ•lFÆōGqĮõ¤Æ‰ŖØ$’ÜíhÁáņĶ˜m”HԘŠŦˆ )—×õ¨ĄģŽPTā0/ ÉÆp1ŠˆOqnūbm˜áŠЌ˙€SKRԇ–(ÆŒr1ÅH%.ä9ÜČ'vp; ¤ōɕJXŽeXĨŽQ4˛# •Įo˙UŧĪPJÅģĢ;xŽ ŽŸ,—1˛˛ˆJļO'<z˛-dAma pyˇ ĩ^V’Nwîāz՛~k]NŪô"ģ[á`\cėüŌŪOĨÜ]ŪKĒI=¸’"Â3ķH­ũŪz īVh×b[Ú}„Ö˛jŠ59$û9PģŖō˛2wc°?Ĩ^“Lļģēžvŧ¸ÕĘ1-Ûģā0Áû™äcúVU†‹m¨hRj÷ÉŽįšÆÁÔmĪ^•Ž¨ÆŠ#†y&ž_–Fsœū‡×ķm _ą‘ Š(>Ũ-Õ¸ŒĪ´Úo&MŊˇO_ÂēŽöIŽu ŽKyVÆ|ųI“œ\Ą°Oˇ…Üįsüŧ)ĪLúWUŖęļ6ŸŖžÂ›oĒYÚÁumxˇm› `)lg>Ũ+"{-^ĶðĪsĻŦ6ÂL} €‹ē{ãü*ē´w×^kÜ<ŦĒ ĄÉ`ˇMĩ:—´šĐ/#T’ ”ŽõÉ8ž09ÁĢskÚzČa–ÅZŌVg;Đđ:ŠĀŽKģËØ–Ō+ˇ•W'`åz~č;V叆Fĩv’\™mܘĮIĮ¨įŠ• îRcžš“PÔu)ŪÚeQō€#$c§ĐwĶi^žķ•>Ęū^gč=}p;ā×iᯠG`~Ņníošˆ‘dƒk8:ž>ĩÔ-•¸< vÎK7$ū5N Ö)SGmāšŒ™5 X Ē/Ë' Nyč=+vŲ _ ģIŨƒŒvŽ œŽ4ØŒzûRä4åFŸáˆŦŧÃÎÅČ?7nØúUÁ¤ĸIæ Ũũī,güķVžę`Y%—f…F-ƒĀ÷ÕbĶܗ{ÜŗfD\@ĖpŧDAãį“ôr0HŪc*šÆÂN^ߏęjĨô6eũâOPI8 ĻMtĢlū[ē™Ā8åį8ö“o˜™AļhxrØ]^E´H†É;zœžĪjëĩ"m1žŌbdŒd9°#’wqŽ=+—‹R‰u ”FÚB̉2I?7#=ķÁü ZÖ ŅĶ-š9Ũä*2#p;süčVH荔,Sˇ‚‚Iã‘CܖĖÅqōp1õŦ+÷Š Ļkb×2sģ(¸b:sÔ?ŨŊˆBÎōbYcR YåØŽ Įâ:ᝧē3Ȕ~đ€yœ‘øŠ†îˤģ™ōBVĐ@Ûsōō:TVˇŗ*șÆ6Š<ķÁū5vyD“}w ¨ÉČä{Öŗ,-×ûz8ƒĄ†2KnĀĪ_ÃĩZō–6ÁpXČaˆ'ĪødÖŨĒH`å3üXéũk+ėŌLĪ äq÷y?L}søVž“u>eä2,đH Č>Päcwöũiš-˜Ŧˆ˜}‘UåĖ.ÌũīAė9Ē1i×wÍ"ĢĮŨ;°3ĮÔųUõ”@Ȳofv¨ūņŸÆ‘ĻIÉË1' äüĢ>wĐWą "ˇ‘â@Ī´.Âyū!“íĐÖ|1Š$Ú|ō*(ūô÷éú֖ŽëËXŧĶ$y<ŗqŽÕYô×Yļ2§Ę$$äô4ų´(ÍŽ¤F­€ė0đžŸįëL .âŦۗmĀįŋZԆX!ggĩe“vˇ`)čx55ÆŖ ImåÆ,¸eųāƒū{ÕÜ,R¸ĩj"7Yrũ} Šc‚[AÁ HÎYšo@9úԑĮ$׹J˜%2įž?ÄŠūrĮɑ•mšĮ g–H?…oBŌJ+Ąĸ[ôS[Oį°ōC•ÚržøŠØ¸XíÚEį I䛊üĒ(Äw+ >LāČ\÷ãņŖėŒ×S$GĪŽ=ĒØ÷6Ëp<’¸b3‚¸ācŊ69ÖÛO”ËģsŒÆ3Î0{r3øŌHŦÆĮ pģŽCúÔŠģĸˍ˜ë: cšĪ[Ļ Vam|÷W"c&;˛NüņW"ŋh/Œ ;ĢH ėSÃį¨?­PX@#Y7”| €{gŨ)mlįZ,YĘʐN9=:ņTüÃSE%–O5uĀ܃1ųZ”>Ų Ā'°õĢs• û°ŌGægvĐ rŧp?ZÎv|ã<0 ‘ü?ᔓųĨ‚;‡•x2ˇSßĒAs‚70SŒšãM"EöëÔûMÃažvpšŽx?•KŠXĨHŖ.-åËÚ@(:ō¤f¯–úĄŲą.ŒrHė'‚Aāp?ĨGf†b‹#ĒÆÜí<ŋŊAų6Œōn*8eŗSĮŠ m#…lãH;đCzõīéB@ŧËsŠ]Ĩv ÷TĮÎOĄöФH’…€9ā™7cgÔ+>Ké/åŁą„|qīīÖĻžŪ?&Öxüˆ‰[Ædų‰ÉᆴåI6Šģ$¸Ž …b@3ƒšŽyĪZŽ‘"BA' ã×¨ ••Ė‹<"@H!ÉVČĀũÍ2(Ū[ĨwąašˆŽ#(oņĮJ”ŽĮvf~īū{~§ü(­_ŗG˙>×÷ėņ4SēÆÚßXLÉæd‰õ p{įYąÉ›ČX\𐍓qÆŪœ÷ôĒÉĻ^ČōAlŽUąœtČ÷üęũļ—ŠˆZĩršûÞų5§*DĩĄaå”BPĄ•WĢ–öĮáIōÃo”!@S…ĪËÜû)ˇąMknCToŧëĪ#Œ~ĩŸįˆžHāRA]¤H9ü=éB [ ĖØˇš28ÖÅMēŋ™)aœq“Nå[—˛čšëĨŗVŠėšrAAĐį§ĩq÷-um<>e™&% ČÉ'đīÍKŦļų3!;˜TgĘ¯’Æ‘ĐčldŌgļk 5oĸ’íļ\ؐ9¯~8üé¯uöčaĶu ¯ĩkxˎYÆ=GN˜Ŧˆnāĩš)ŦYâž<•’6ĮQŒôãԖÚԨΠ‹—RA–/“’yöæÛR&9"ųvģrsĪųÖävđ%坭ũ˛ŽÁ'cÎôȨtJ;æyZx–áÛ!ž%Īą˙kŸZeŒÖé{ i–äJÃ#nx8ü˙:ĘIĻ $oŪK§Å’@žKˇîŠČU‡%ą‘¨J—ŗ•ĶÖ+8ãļT&!™$#'žFZŪīWÖæ¸ŧ–aõō—ũ`g ãŲhö6vĖŽš{FėŌĨ‹íõ´ÖSœ†Æ=ĒL‚>đ ŦņöRžģ¨;ĀĀ9&īÆOI8¨'ŊŽÍ<˂¨žŊsė+&Yî5\™7CmŸ‘GV§ü)7aÚå‰uc!ōíœN rj™Cš™#ÜĮž*ÔPĮ—j™ČÁ#Z‡;•Ëb€iPŠ?ŦũN FŽö\ 6üĘĄíŌ´eiĨ—MąŽ0Ŗ“õ4’G‹ĩĐ0Æ0ECåęV§“]GĻ&¯fļ—3\Cæ.ôųЎŪõŦ[ŧē¤hĪæ#áwŠ?8=: úbŊ^NŌm]å´°ÛøĸMėžŒW ã=p yĮö”ē…ÔģíŌ-[qŒņŽÃũk.KjŽJ‘HŠ,2ZĢ41pũ3‚W>‡ŽjļŖ5ũÜīrōšA†ÛĮ@@üJŪ]5ĻŌËM¨Ą‘Fá˜qß̓œķ\Åũô°ČŠŽKöņےyǃd´ė[Ķ[d˛ ´~†ˇwũŠ2Ûo˜Ŗkîl¨ Œƒ˙}įĄģHĨąļA‡ÂôČ럭Msq<{ĸ$Jzũãũãîj\o+ąy›VĶIqį?˜ņ•T,œĪAęMtƒoûåy ,K|ۈ ąū‚š¸ĶLƒK‘…Ô‹4Ēŗ$ØĮ^Ÿ­\ŗŠeĶä™\2ĮnĖWv?‡Ī“YK}FŸCJæéԙ‹†iäāɅ ‡9'Ķ;žšĮŊVk‹X™­^ŨÆH›rã>įœÆ¨}ĸīT´Œˆâ‘˜q=@ÉöãĩJēœ÷61„áV!‚ÛsŪĸÄĘFRBɐLĘn#9Č=^k_Dēē;´ømĒ\ĘŽö HÎP ÉĒÆfkXŌMžiÉTuä¨íÅkij-zeˇÚ 2Ž™œųâ̘„îė[¸˛šŽÚkĶncFŖâƒĪįÁŦ‰|´P%ųAlūĩjūũî.ÖĘL "’Áęy÷Éü*…ãGkĢ1ˇ/-cŨķ:ü¯ÆpGļOåY¤ŪĢaI\KYe–ÖYü—‘†.BärOĨ]– JŠú4a)ΐõ=AUt-EāŠD:Ã6^TīŒã˜Æ†ôÅr%’ ¸ @*pãœõæŽ)=ʍ+Yî!{m˘Ú>l:ŸĀqZV÷ˆšžėYÅÁ!7G{Ą$Ö]´mDŽ#ŒíRGŪ'#?įڕÚŲD!0ãy;œįŸÖŠ>ã‹,I ĻĪc4ä´x"?,_<åQŒb°’9'ĩ+ũØcnb0ĪŌŽĘ|ĻtXmų08ņÁõĒķęSʐ%œ0ن*,{ŸCNášnyŖ‰0ãæîÛpG̓ųÖeú´SåQÍĘrs“Đ‘ųõö­tģ"ÎW™wË`°Æ'ŗ¯›íše|ˆ°B÷įßŋ˙Zē0s´Ûō)2{ ,HQã–#Ļ?úßΙÍÔzˆ–3Ŋ•ŗÕģãüúÔö÷RY,%$Ia}Ō9<{éPX™ÅÚ]Å(†4#&CĮļįœÖS~ûl›6ĮˇšęĸæŲÔ,Q˛žü{äâ˜ûã’TKpđĄųßĐqÔáĢę“^_*ŊÃÜŗRØũOΰī.ŨoįLąŠ0ÔgņŦŌģĐMY—´ß.köķŦŲ•ÎUaaĮRNy#RũļØiķ*Ąi]ĀķKãË[0sh˛ųĄ1’į$¸ükQ. Į,#šUĮÍĮĖ@ČĪ#­K˛vcH.ā{'‘-ŧØßvĀdõčxŦÛxĻÔnfgŪ́ĩ7Œį€ĮãVŖŽŖmj—œn Ō1á}ĪåüĢk_Ž•dD‡Ėã|Š1Ŋ˛8í֞Č,aĪlbͤYQ–äQ’3‘“ŸåÅTŪģš'!6ÆTdg˙×W.e1FNsššęŨĨDëäéŗųŅĒŗã O<÷Í$ûĖûhŖŽvFg’%ÜŖmįĶŋ¨æ´–Äg™C – ô÷üEUŠîŪ+D´[uy YXō/çb-nĻh.Ž^QÃ;SNãž–fĶi–ÖZtKss,SĖUüÖ@Z<8ĪNŋ­W:ÅĨƒÜO%ԗˇqŠHr>Luzķ\ŨÅåŲž{h'yXŸ/$HįGN•ķ…ãÅv’G3íØB÷Īqž3Z%Ą\ŨŽūĐ=?īëŅXŲ˙ôßōj(ģ´‘Ôëļš„1\ÛĀbšWĒĖv ņ’=>‚˛´øØÚÜIú\BAdNâ9ž•Ēm IæMexųÁÚˇ~`ō*h˙|ŗ°kfQ•.1ŽÄc=Æļ”w;y`ŨĖiŧ9öŨņ+¨´†27'9Āįß…-†@+w5Õ¨ōØb îaūĶf­˙føœšœ…$ŦëųâĻ:Ük‡x Ævõ=3ž?ĪqI-ËÜܰM)Æé °Bš.Üûķ“Yū ļđIJË+FŦāX€%Ŋ*˛išåÍ´ŒļŅËĐpĮč?Z†"y@†™-ÜŠŅĨ—î?\ĶæĸŒ$ĶíõEX´˛ŽŨĻâiî÷Æp>œÔąü8Ô[åIāfb2Äā(ūĩŪZÜÍ h‘iŒĄ+)ĮĨK&ĻÄrėĮ_׃։+“ĘŽSMøoua'˜n võĮđ5­iđęÚ)ãššq<ˆ~éPũzÖĄēWcģÄŨŧĀWķÍ[]BŲ"\ÄJ¨Éɨäę4ąhŌ#Įx’ÕT¯”¨å‘Ā­Hí’$Tpƒ Į Tp\<° Ŗd= ԟöĐ ¤˙!ūî‘ėiØĢĮ_Η b:‘Á*ŠPĖcîh°ĮĄô?ĨIœMV’åbœ…Ā5MŽgŊĘ[îD'R?đb/Īy o` āÉ'éREį˛Ģ€#øSƒĮJ¯gĻĮnĒî“O˜GĖ~žĩmæ ãŊ>ĸcÚWNK‚qŒGöŠYđ˜}Žų“#š’8Ä+œŸÎŽí r×ÚØr긎ėU˜¯žS`úŋ5˜Đ‚ĨōĒ0ëî´ĄTE<÷ĸ-ą4N§,8Īb*ŽĄĒIj„[Ú<¯ˇåįõ⤑Ô)éPHá°ŋ7'ĩSˆą^ÜNˇW$ģÁb0ØßZÕķ4ÁuEEq4p¯īœô^Ĩ°īYm4ĶÎpSCu˙=+'ԍi.Đ&#xËd į8Ļ™Až@}ĪJĻlÔ i" G4‚/Ëqü#¸>ĩ:ŠdĪ8POĐSAvrą^ĀÉl%qžz͌!@ÍÉÜzŽJZ09ŸØ}˛Ņ vđ;(9iY@QÜō2OĐט^ÚĮku ŸgČWn sØô?ŨxâYn,ž{´Ũ‘€ Ü{į§ÁŨëwš”°GYˇ†=ĨUfČˆ#éXĨvĖ*5{”õXŽa†ŲŠĘņu=î??éYĶDˇ0¤ōÆ^H¤Ų,}7ĪáÅoĪfãN{ŊĖōÄûĸYWįÉãŸ^ŋʨ)ģšÅ,į)åŒĢK`ˇÕ‡Z##%;­HƋxšöŠ4ągJ‚“ˇ‘׎jšĨ:œ.'Ž5ÉSĮLņũ’Ę;¨m Ũļlwã“Á<ú՛ûhėĀkc• °–ęĮ¯ öūuwWՄ瞂I"œHŅČßë`Û÷ÆO§=+{M1­ĩėq”h—äRܜg?Ō˛4w˛žs-ĘÍö˛Wcā•Ą>Ŋ8ü+j{i BŗÂ–‹0“8ÁaŽ qסãXUÕęM–ā Žã)$w– $ŽyōCČãۈŦEŽ •[“"Ģ@ŅđAČžĒü7EÆŪ#-§Ę ˜ãŒūUQ§‚HUZߖ]ũ÷`€O¯JÉčKŗ%8¸GXöųĒ›¸^>ņÛ¸üĢJĘ$ŗ™¤š]œ†gWČlr¸Įâ+âęm=Qî1ö4rFŠsĐáGb?WÔĩw™ĘFd '*ƒåŒ8÷į˙ÕUŨ\­7DˇŪd—īxmÂZ íʂF3×˙¯U,lō<ÆÖe˜‘Ģūp>´ļ×SÃGä1UU›āžqúô­;bMœÁPWއ9˙Ųk9ˇY=GũŠŦŠ0Q9$rũMIī‘4QŲÚųR’v ;€ę:Vk\HĸEØĀ2ŠRxū?ũoΚŌI{<2ĖbILdFĄzđ?žiĮFÉļĻŪ–˛ŪŲ{¯ĻÛŽëÆÎ2}úYW“CäbæHCĒ)‘7´däwĢöŅėē:\7ŒÖ“)rō—sœz♍ĻÜ.T/„O°2GāqųÕ§Ĩ†Õ´0å7ˇŊÜ1\}‘ˆU7 #ö>ÕŋsĢéđhØčęҤ€ˆ™NsĮ;~:túW?q{udßf[‰„oŌ=ĮnH뎝MhiÖ¤Ķ\°Uˆ¯šPōĀ‚qĀūuMÛ`MŪČivß+Ļ6"ĻAë9Īâ?ZŠ!ČyVl+ôfP ~_äTˇōÁopļį_-™‹ŽqÆGJÃŗķ+‚Í˔\?O›9ũ:o–ō`žĻŜr\Ã*Ÿ–'”Æ>Ŋũ*+Hŧé\HHUeTō“Į?OÖ´Ąš/QCțT˛ŒŽĪjŨŌĸŅ#ŗ?ki$MåPTŒsž™ūĩrlqWÔĀh\K:yĨUœ2ŽA côãđŦØŅü˜ÃGŋ2•’i99;WOŦE§˜Ŧ¤™î. iÕׅ䜌™âš‹“0ģ#ÎÂFĨŲG ÷?­R}î´mEãh­ŪE‘•K3å[‘O¸Ž8,‘­Ž9SŽIúúõŦpd—Ä$¸ Tt‚kL–h†c%Zp„tdäĀ rš V„Æææk…ž,°KģŖ\`ņųÕ¨ķfdžRX• Tg&ǞnŊĩŽ5 ąf-G|gõ­Ō7ˇĘnš1`aBô9÷¤ÖŖ}Š%­ūĪ8,öÆr^?*ŌĶ<‹Ŗ'îĀd “Æ;ķĀŦd°7‰ž!)Æāœdp)× e0Z<‹)PĒĖܜq´ķŒS˛sM¯&ēa$ž[4` ` )ŌÅ,ĶÜė2€ęÄåp{Đö¤˛6ĶÚ˛CßģĖ$œ§AŌ›5ąpBĻP|Ŧ3ĖS„šerJ¯¸Ęō 9ßŗ9ųOAVbšX$[…TŪ¤āΏü氊Oŗ3˜ķ)8üŗųTžVäŠß:p;•î܂úč6e’}fK˜Ë?.$EĀV¯˙^¯Ūŗ^CáL˜‡–ėHĪ$úJĪo,[I€Ė ´qĶŊhC3ØD#‡ÉōK˸įŋ_έ^åE­LŒC˙='˙ŋtVˇkũô˙ŋg˙‹ĸĢ”Zõ•œåÃ$1ŠwcÉlv#ĨO9û<*ŅĘģõ,ŖÖ–Ė-ŧr¤Q‚FŒNĐOŋ°Í1 >wî›įcķ9ûŊ2ö=}+ąDël{FĄ¤bûĸP6ŋB}GéTī5;5ä{9…s€{Û<õĢlņî "•‡d Ŋō Ļųvæ)í`ƒīāĖ0\cšĸÚaZ8ėãu”,’ŒíQœ˙Tķ3>ĶōČ>[°qÕfĘÕ mŦ’…Ā;U˜§Kå S*ąāŠāũqE˛ĸ–V„ ũĖyų˜…𩠎dģFžXDĪžsОmļÎ~ę{úRƒ‰ OĐöūTlO:îyĻ3[Æ8ųQzŸzu՜ÛDąÛŠRՒ2ŋΊˇ%ĀŽ ĸbđ0¤ãęjyÄlŪbģ)RrĖãÅ&DoÚ\<ļi 9åã'#žŖû­2(ĄWŠæpāįÉ#ߚŅĩšHlļDI#9 8÷Ē žUÚ§ ŖĘĻIŊ‡v6Ϗļōâģ’=ØŸŪŗaҧŗÔ"ŧ›R72Į’žjļÕü^ŋoŨ]mūdrģ€ë’; T÷3I!I-ŨYÜâG?t}jBáö›Ī1„ĐÛJTná™p3î8ëV—SŊ‹b›f\ŒUđ1P]ĩŲlF‚U@XÔ/ũõũīĨBļqj-d—zĪŧ’RBŽ*šP]—¯t\| ‚H˙RŲ‘59ÕĸŪĘ7 nPaųŠmÅģA1„#´dīÚčŋ˙Z’â! qĮ4kķą"@ŧũirę –āž‚X•ŖW98#?Tģ™Ų‡Ę¸Ú@$tëÅeĪ"ũ–āÃ<^V@žHĪo_ËŌĒ­ģy1°Ÿ,H$r­oåųĶäÖáĖuOqhą+}¨3ķ@üč[„î$ጠ×?+]yicļw(Ÿb8?OjDSl"n#;Žwˇ$ŸC‘EÄtm?3øV}ÎŽ‘˛Į ‰œčĒ}ÎåXķĪŠ´ Š(-ģt¤nįֈå“g–mLhŖ;•Á?äQq¤‹°ŦŌÎĶË!bÕĀQíÅZV >Q›¨ŦëmNØ&˜Æ~ú0ūc,ú…ƒ&#šVcƒÁę+vh’F”Ō#7ĘĖŨ°x¨ļÂį…‡>õJíŪģō9ĪQĪú՛‰ö˛>ÍŦ>Sâ˙ÕRĀ´IĮá\•Ã$ē„pEvĒ2ß!ã/ŽŲūUÕ)YwFÄ /?T†ÎÂĀŧ‚4R ąväßš‰+‰Ģžsâ[K›}Ōh'b0ûăŽøP~œsÖ¸mɚâe–;— 2LdUõ#Ķņ¯oÖŽĢgå+ĢĀÄĢI˜ÚÜvī^~ū*ngĶŖâ|ųFŪxę{víSkFÆS§wĄ’oŦ­Ōâ¤i°˜ )ÚF?úø5—oi:…8æ,äĄ$ŧzöüęåŋ„î¯]|…ķ%2dēFGœķøõ­–đÆ lmfō7g'r€02:įŒãŋĩŧĒčĮ‘ĮcšEYįGȌ29 SV ?˜K9d<éČÆsWot+‹tķâVˆKŒHNr;ã¨Ii%ŧĄZAšPykâ'œ÷íj åO*Î>RĸDŊnŽ92ŽĪ?ˏJ¨Ú¸žĐų‰"\|¨™ĀR1Î}ķMĶ/Ļļ˜Ëgi72`ã }Šu!š’IAÎÜķū4Ŧ¯¨¯ ¤ę0BŒĖį @°Gq$ĐC¸NČį•Î={~uT›°åW{B‡iT“î¨˙?­CˇËhßvH$r1O^ô8‹bÕ¤ŌÜ:›ŲYŌ’rė?•^ÔĄˇbō¯b¸’D…p8÷î? †ú?ą-Ŗą¨Ųĩ@vœŸ^iˇ?gxícšT@Đ ą<Ä})hUÕŦZŠæî;SEķš‘‰ąØ~~U­ĸ_XZ^J÷ī$a]1‚Āäg×৆[ģˆ.Äi ]Î[ ųæĨš°ėΎ1Öf*!‰÷6îAΧB~†“Wz=M‰"ē֗PÖ<ØĖ+ōÆŽØgo< tŖŌŦĨžŽIˇ+Im ä/uĒū öÍexbˇķ× ō–\É$vü*ĨöT’Á&Ä<Ą™O ˙ nî +\ĻĶHncp@Œā Ž˜čäkjŪn5;8î]aĨÜ]ēcüņTäÕôĩ‰Ŧƒ•™ä}į=‰ËéZÖÖOr`{ŗJŖd‰)Â1 `1‘íړŽĸQ459ômšĘ %3 æ‚Øįũ?z§ĒŲC čœ3āyc÷íYōézĨŦˇ"XŖvŒå’6ÉÁįåõŦ-SQš‘Ē;Ęä¯Î `:`~<ŽģiZōĐ] KduŪ#ĘįĄãB(bŠ"“Píŧgž;:‰$áMŗĄ!J6_~†´Ž´ûqĸÅw Øyã*ŗ!^"SĮ'סãDbödF-“ēĘļnИĐũ͜'đĪįT\Kk,&yLŒØįv1õ­dšŌĻŌb†_7íČCɆʷŗzuūu%ÎŽĸņÃOĩäO)•Ô0õ'ێTĸŅvļá!Ÿqo$ˆÉˇy;Bˇob=ēķTĖv“j[Ī!…OžęÁČÆ8î:TōCq#„¸-*ãŒļ7œv÷995Ĩ¨ép]hĸōÖŅ€,í …ĀļzƒĶÖĨFÃåkR´Í}iŠXŗË–Ė}¤ plã?•BļÖđAŽMŌ1"‘Čā“Æ˛ÅŲg{9CåpũI—ōĢ +ÛŨM,fEíVCО:{cÆ­´ĩ”oązßKšŪY‹ŲÛĘ}ÍÉ{‘Ž*;¨ä´žk+yâBãæAœ“ĪōūTĢŦ]܈nf¸/˛Sŗ=šËĻŋšHî-šA¨’á†3Đž´žŖ÷Y‚lîŦo˜Üy‹,nNdëˇĩD°KŲ6ą6įˇ×ôކ[kŨBîK™#iŲ@bûz õü}=*‰‚oąN× @gĘŖJO§&—0žÄ:{}öY Â+cwūu§5ŽÛ5y&JüŦ`OķÅQš ąFeyÎOģÔĤLJ´b,Q×#˙׊†î aŨ]AäŽĻ™;Jƒhųb:ÆŸD&BģÅ$Û†Ķˇ‚0ÃÛ֎kô*-ą{PĨĪŋ'Š@I%æÎā <ņŒôūUzÖ8%•VVa=Wūŧt¨äÃsû†2’Û÷†–*ã'`Eo>×ūž?īļ˙+Gmˇüû7ũößãE>dQčfÖŨ•b’åŗÆ^üŠgÎō…U!pŊō:tĒÎĒ<Š™O æ2I=sĮŊG)•Îôš@ÃX6¨ũ+ŌHëfŧģ>R‘ž2qĶÚĄeT 6O=‰=ÉĻÍû¨ŗ–Üsĩ@ä4:ÆÛ€˜F[ ߘ¤;—¤¸‘´äĶãCš@ŨŒšíšphâUŒ’A<3üž•Žōŧw˙Ŋ;ļš9Xķ.Ĩ˜ŽØË`3 JWę—™§īCŌ.9ČÚ5V;ødG ķĐŋ•Gæ ą•˜Ÿ™:âĨo.PvžAČ$müŋ:`LŒ|ÎĒį5E:Ēڐ]ÕŲˇŧœS.Rx!Nį1nM3prËs†Œœn€¤Įb›āĘĘPān-†Ÿzˇ•eī,°Q‘žpqŌ§{H%Hå’\ä#Š,GaŸūĩgŨÜ'څ¤xHی¨ôīև¨–…Ø€ˆ(–TÉ;˜nįBGzŠž+i<âĄüÆ%÷ËŋķĒŨ´V¸vvyŽ+öĮJž+T•.Ø8’F; į;NsÛ­ %°nQF{™ūŨ‰@ C@ (?˙^­F°ĖŒ.V(@ŌyžüU›}67Œ#ĪåJ8tS3ë΍jöæŪEŠUiŖ|eäŨģ¨ééM ,ų,“[Á#HųĘ6~)×{읺 âųˇ:€G3ųV|úžm´{AčąÄ7sĮįPÍĒ:\m‰#¨g.x\ûuSĩЙĨ2Į=ŧŌGpĸ5Ú 0äãÔÔ-6Õ \.ĮáNK6GŒæ‹¸ŒæÔBæhF×`#¨é’9¤UK´W‰ŧĄŊBĒ`U—z•u ČLĶKt°Ŗ$œŗ䍸ĪLūUĨ6ĻׯomĨ[ĘĀå‰hđŖéŸæ­:ķm¯0ŗ rĨĮËíĪJ§ö™o-lBD@Úiå{ČÕ!1<ÉČ‘(>^uįåÅH—)ˇbãví‡vO>â‹#2Ɲ3‰FŖcúāzTwl-OÚ¤ÂŖ0UebIĪŽi;$ åĢ–]…JæMģUc_”ëUSLŗyē‚2ÅHUaĪ^HĮāk8ëSÁo+\ĒEpą‚ĘŧŽã>ĸŦéē´WVâô…ldI¸ Ÿ—=ž¤VQ’“°st#ēĐâ $7ÄãĸĢg?Lįž8ėˇļ įŊŅ•cųˆ’1‘ΎøVÄÍNüĖܒO>Ô×(ds(ŒĮ“œąāc"œŖŽ…&ŅJ=^ũ-VfĩŠUr@h؂xĪB)YįSsoqmŠdRG8ô̰ÉhņyĀ~ķp@NTvāzry§}ąB ‹ËĘČPúžũhpē?r­ŦZ"ŨG-¤ņoUÚ¨øzŅĢMr’$0RÁpp}:j Û;=Fę /‚ųe3žÆlbĢ]xqĄ‚Ūm?Qš‰™ŽV\ŸĩgėŌÔĨ$ŅšĸŪHļ(˛Û¤R–T^åZ‹{čüŖ)^ä+`Ÿ­p &¯bî^X¤Æl#-žqŒņÔv¨­u Ģ›‰fxd‰ÆõoéW ‘z37gąÚˇ…íåē3—ŒõÆGŋ5Įø›L˛m`ØŲÂDËÁ^FėgiļךØĶüC{Û?Î3Á`WÆŠ[jö2x¨ÉxÂ'bsŋ@œáiԆsgAŧw)oktP.Kn¸÷č?Į솿Ævß…Tߎxũø×ģ[=¤ÛÄE8āTu/ ØßĢ„ŒōH8üxü+7AĮb}š<š&Īūē?’QŒgßę)“´‘9ģwf˜Į#!ÁąAüĢĶĩ?†Î\5ŖGšrx,ŲäŒūqā›ë_6–,`‘רãĨdîˇF|3Œ ö™Ô™ üĢ áAĄĮnio 7HNŌ=v°í´˙õģ×fū ¸¸ĩYJ@ÛļO6<\ķ‚G8ķXچ‘p— k+°(1NCdd~€Š—ĻãtŨŒeša"ųdˆ€eĪđ|ũOķĸ;ÉėĻY`rũÎ8'į=GZŲL˛UÉ`§'€úį¨Ģ0éRKs"´`^\œc¨īڛhN,ÕĐaŽę&ņ'”Æ­ ķ˜ŸĄĀúÖ”d…\–FB ëëŸlTōĮyËs %´q†Ww°ķÁŠôMRæĶíÄ2,’E°ĄR|܎€ãŽ˜=(ļË{!ˇ/co-ŗŲÉ)Ü7ŧŖ‚¤dcķ?…kÜIĻĪáæ¸ˇģō.Ą?ŊŪßxāpär= eßjÁmá[P% 7c’Ûs“Û“Ÿ~•5Äfúd†ßxrFN~f=ųϐžŽĮC¤ę‹|Ë ]#!XŲ\ ÉíĪ=ūĩ=Ôj׍ÄŅÛ^Ém…eˆ–IJķžŲ9Ī…piúuĖģä’SūĨÉČũ kØũĒ YRĘáŨ§‘V8•yf'žžô8[aZÛüŪĮ ųˇˇ‚č!YQŖT €ß]§§Ō˛­‘ŽP%´˛$Qæ!$´œôč:UgžÔ5-Ž™ša L1ÁãˇĨiZË&Ÿõn_Čʸxēįéž)4û„“zÜX#ŽkëģˆIXÔa™Gßn8ŊÍlŨnŦŦô›ˆÛc Vd”8įĄėp•eŲY< Kf’DŒŗîUÆņę­Rst,ÖK˜ŲŖģöÁĮ*Wp‹ļů=ĖQÚ§I~ō A9QéÆ3ëJŗmŠßi÷ =Xä>hÛæ“É ÆŽL&×-,×Îķõ4B"|žåˇcŊ`N˛5Ė÷,Ë>7n#cĻ}3Uč÷Đŋü–ļ÷QĪl“5ØĘNŨīČéƒR´´M13ɰ.@'i##ú~u‘cg9¸F3mÚH3üg‚÷së]ŽŖûšôũDĨ´;Œžo—–cüôŠ’ž…Zúķ3Ehą”+Ŋˆ`LtũI­[;´H¸d(“t€sÎ3õ¨n<Ąf‹$J[ådnr8˙=k6Æũâ€Ā ßžáJĮą?ŸoŌĨĘē›6WÃÆeNH-Á8õöÆi÷×Ōj\ŠeŒ2Xŗg?€éĮŊ7H°†úi–ęábØŖ;”ã'üū•vÚŲŽ&`¸DœØ-O^•}¯mH§’GÄOlÁ‰;K ãœüž”ŨCHˇFl.›0fÄŽĢ‚¸ã ņĐÔÚuŨŋömáģ—a!™K ¨ãŋ~¤tŦ[¤o.tå!ļļĐGqۚ]J}É%cgpmĘrŠwČĪ­?!Ĩ$F$$t–Iĩ3æũÎ7ŒņŽįÚ´nŽ!†`ŗ„Į ˛įv}MKIŊĖŌšë„l.Ō@ČúTPBÂRĖųfį§ARɲ(QŧÔbÃ'ã×5 nY”ã€Ŗքĩf;ėÍũīüˆ(ĻyĮūyMúŅEÄzFœÍ*´n¯æ8"0€x$Ž˜÷ĢRÆa´2îˇĖGqåšÉ9úôCO‡Q¸k—kˆRLüĖ>f-Ų@ŠŪŨV ­§ŧ3˛8wä0'ŠĪĐö¯\î.åHГĮßĪūŋõĻBŗC1kŌ ”´iĐgĄÅ,6wbu¸iq⠃æ\ūŸ…6;‡Y[Ëķļ „s8g æ€&ō•Zdƒ÷HüˇĸŠ´Ņĸ§ÎĖŲ%O̓׭0F‰:ģ32•č€ÖĒ4äʈĒķ1nŋĀŖļONÕ6cĐ´Éîō×Ļãԏ§įųS.Ÿ[ų[ȑąˆĮ ÛúRÜĒ”[€Ëōœ†nšĪųëOyŽgŧ!î”ĀĐ7zg­KÜkÆ÷b§wŪā~éRË4,ĻVFȲĮyč{S¸[QWÎ3,›[šĮvaĪAšr} ŪÍŦ FXąv]š뚁ĩT”Š;IrX(=ņJ#„ÛȌ„Œ?Õš8ÉĪ<}(†y…õ)<š/Œŧcƒ´ōsĶą¤eí-ĐÆŅį{#õŨ‘‚ ?|6Đܜ’Q˛C šįŌ5ūĶuˆĸD9$–åĪĪnũéĻ+„áYÕq&üųƒøĮ§ĶŊ'ØÛÉ܃"IČgáO<¯ZĢ3ęĐŨˇŲcRv2įváŸĮˇō­ˇ öO*éÁ@`cōsŽh[Ģ&™•ĒlģdpwΏc=š%€ΛÁųéīÍNc’ÍÅÚų›ĶÛũzŠ ‹ĩÄ-ØlÆCÂän#ԞŨčŦiÛÛÍ4ûÔÔ@ę6į§čj–Ąi+_'Ss‘ q•˙=i|ûģXöÛÄ𜑷ÜÜtëÅ,šĖ’HËÂbáÎq“ØŸņĨ¸-†ZÅÆ@dRIųAv?­2âî7_*âHZ5#īŽp ^ô“ysl› æ ĢÄņŽßФ JĒHņągÚ9ĮAÅ'm˜ns—ÚUŪ­bŽąŦRīÂ)bvŒvéWôm;K0ËWŗŌ†;yŸO\gšŌļJÎg•9E÷įī‘VÕČ “ËeäŧH?AøŌI^čZˇ´H mĀcÔö4m[ˆüšQveđwpO^”ô´ûK͟9˛ˇ*ŪŧûI#Æ&6ęęF ŗd€OĨ0,â‡ËHÜĸÄ7Á?:ú䚞 d.ˆSËšĩSPÜm$I ōÉ$lr>e¯â*ēĒ $d€ä‚Į~ã¸âŖ–/PL}Ο]Â2˛3lR=šũ̘›Nu׸€F§ËQŧtęGākŽ}F/5y>ddäqJÉņ íŒ^"‰ŧäû!Pä(ĀČ' ķ×éZ[ v!ĩģš w8Q΋š­XjkŨJ;ÃļA%¤Ž Uߌū=+žĨ&ŨĶ4Œ—R͝Ĩ™žCötFsšÃÄyüiˇz6Ÿą„đ°g’™ qOΝ5{O)2:hG1ÜX‚˜+č1V”)#5Ėži=Ũ¸ük)Q›EsGŠĮęŠūĖ‹KuO.PšûvāįåãxīÚ¸Ģ­:}0F˛•7^v$ØšÛ9äuüëÚĶLBDÆĖr}k.īÃKyĖÉ,›FĐŖ`æ’Ŗ%ĄŒãąã×vļöÁᑋŽį|Ädz“Ž™ãŪ˛ÂĢĮpļŖ`$ũíÅAč~ŋá^¯qāë{™<–šfh”ƒŗ÷ŗģž‡ük<+h..m ”Û¨&äČ\p¯_ZQMt"Tģ­ÖĻúͯŲÎÕ¯-úŸīŽ1ÆNIgŋzŖ`öÖēž/!•q´Į&ÂpÃ9÷ĀÅtŗøB]šīíqËō$ ŋūĩsˇēt°Oö´-•2Iš1ŽxÉ'ëTŽŨ…Ęî_…tûß5ËË%ĩŦr‚Á`0HĮ=r=ęÍÕŗj7éē,PíĘņĩÉ'Šΰæ–Ōß3†š—˜ū‡üj[-zædXâũΏ*FėũzõĪâ˛zČęm~Īcz֡ȡÛÄUŖÎ{‚ĪuŊėQ­¤Ŧ¯+•ˆ3ãvr}ÕGPu[˜å0] ˛ĒėīȐÔ }zÔQ^\}­¤ØņÅ!Cé_ÃĶŪ„Ŧ´Ŧíc_IēģŌnÜ[NÂëË1î*ÅN:íĮZcË=­íÕŨāW™Ø‚Ã’Ųá‡ŊW€{9Úîā,›÷DPnŪŪį¨ĻÆėŗâ②ŧØ+Į^z÷¤úö&ÎÖ4,ö'QˇdY$`˛/˜w*ŽœcŒšKũ'6És4wHbc9ų'ëüĒĄģŽĪSÛŠdÚ ŠÍ‘ƒÎp=*k[Æ,đ’žCBqÃcü=jYI-‡Ī# g–6ܛØyā  ʨGö´ČCB'Ėpuéšģu Įî@bxUõÆp?:m–™yq+ÜņōäIČãôÉüĒ<ē’,—Vķ0V’-Į†änP~ŊęÔ7­2ÂCÛ[p<`tߟÂŦMĢX^hņÃx¤Ũ¸uIQšRqĶcŊRĶžÍĶÛ_‹‘ĐA€sÖ•šŗ@ÖφąqcŸgqcļYKys \īĪ'jŖy­Ũہnå#H°DJĄvœJ‚ūSw5­„âU]’&펿ã?•eÅ%ÂŨ;/#grŽãž ZÜM›é¨éōi Ak Û¤ub[w<éôĢvÚĩ­ĒIæ9‘Hc(!‡Ļ=3\æ€öú}ķß˛Ã´œ6ÖĪR=ĒÕėīŠę“ImāĒ#ĶĶžiŲ'qÅÛS híõˇEíáķ!ã=?OÂĒ[Ā%ĶĨ†e‘úąØ=^‚ĸhn4ې—vŌ U†@qœžëV.oá´uģ´žE‘Áä2}F?‘ęlŲZ5s?Ėšöü¨ĻlK˙=WōZ*Ŋ™6‰éĄ¯•#¸Ü\”ÂOĄü)†ŲXfFv?(< ōHzUkÍNÖ XDC>V†<˙×ĻÛ´’ŋîĖnŌ)‰ čŊz7žĮS˛z—„SĘķoüšRü~´C$Q‡™J WTœü?ÆĢÜȲ~āÎcØÄąŽ09ÍIk4vņ,ĻŨšB¤䓏_ZlHŸlí!e`$?2"ŽnjšWxŗ$ÅäVųaQÂ×ÛųÔ˛ĖYB%ōķĪËÆ};Tą?žË#.écVFôĮJʒ?`“;ĐtPpj[&ڞ98N0>SœuĮ~*ĨĖ‹ÄEąĘÜ“VŌFpé$˛BŽsæ ™Š:ĢIēgaķ|ß>{ôĪž 1¤ĩt.ˇK R1ũzg4õå_*ÖGaÉ X{ļ}jŊĩ­ÁyhÄĮ ĩœŧxÉ˙́âÚĸÁ-ԓ“׎jꈎ­DrbH0Q°Üŗo¨úU Ô$–ûX7>^z~Õ9VŪ+tš‹;20tõũ)+€ëX#¸ŊwŖuØvOŨ˙õTrYÜ â×kË–ĀĪŽ_ūŊiÛ˛5ļ>ΉoWZŠ!H$Ÿ0D2‡'=ēįĨa܎h"[¸üöŪd^vžFįžsSˆDN&ąš@Šv°dųœzäSíü•ÕVøZ#Ļ#!2_<žĪJKėCk4Û#WũįĖqĮĻ;QĄ%S%Ĩëo0Á˛ŨŽĪz¸–—2ķn2"î9“$•ŸnMVˇi#1ŧ%Pĸīlü™āw<ācķĢâe‚nK,ŌG—g=ŋ‡¯­0OB(˛š‘Ä{‰;a,0Íß늡,övÅ^5Ž9$pMč…cœaW=<ņUoÍŨ´ââxoãhÁųņØ/ŋ¨ŦÉôm^öâ9Ϗ‚ 3/^zđ*yģ!Ü鄯s!ۙË)3˙ųãˇųë:ųŅĖĸb%ķŽĀŠ[aÄņÔvĒöđ]Ëp.#›äBvĄÚqN=sÍGq#ÜßÄÍypÆAûËXy úžœ ~] Ė–ÖÍåQw8`ƒ$lR œqíūE[žōëxTZA<‚É7”1üúbŸ>M×î÷ēĘÄ4O19L`~Ŗõ¨5;˜í­ceļFÜ2rxã ÷ώÔ7`l`ą>qoß°Ãō>€ôãĩHגOhŅGwL…R[' *uŽQ;NŽbÆb/ĶÛ߯ōÍWĢ{)ģ4L8 ŖŊqõéÅ+…ÆÄ`’%XÚLÄĀHd` õ#Đõĸ ŽîåS#nd3JqĮ=ō;R]Lßd–čGĘšlČĀ˙õĢ>ÍuĩÔŧÁ,o ōËHŦĨW<öĮaß4îŦ-MIædháŋgåB‚å€>ŧgēUĩ‡ęY<ÆŨ1o›æcĐYHˆōåe¸ˆ|܂d9éĐã=k™k™­ĩÉĐÍrʼnlŋ!}Hü8š[cŦzZČe†ĐÅæüÎlũsēîŸiŦęzi1Ĩģn3 8lƒ´cšÖŧzíũõģÁfŅ’ĀŖŠÛŋõü)N´Žh–FŒyN ā;`ĮŪŦƒq ŨÉb‘ZVūK<ƒoQV_A–3<Ķ €BˇãĨ^>hōâ’7ŽRä¸ęAáqëLšÕ^+iZ[v”ÎũŌqë×­ ­ØČ^ÎÖ7ũ͚:ôÁĀāõĀũ:Ēt‡¸ÄĒĘYpCœ‚ßĶëVtDúEŖĪ6d–āļëZvRĮ.§ä– S–,p+5ŊĐîrrZ:1IÔ¤‹Ã0zâ“dbdBŪfŌÎG˙ŽģcdŽ1IÃt šÄ6JK$1‚Û‰S×¸­ĶV#3îE´ŒČr˜āũ{ŌÜĄŸtW "bÂŲ•Kyw6žSHŦøÆuįˇåT#’D‡ËtzoÉĶž´Ö›ŲØxŽĄQ$BũÜ gđ5zrĘŨŦâ7Â˙-qÍls—¸úæĒ …žBãÜ ČāƒõīM;ŒîäP÷ €ŦX’YžŨęÂXBŽY‰l˙{“\5–Ŗunš†e-œ­ōŸÆĩ­üK{ââ$rŊGCū)&6Ά]"ÍÕˇÂã9=OãY:Ɛ&‚(⺊T~Jģ‚ z}}[ĩņ%ŦįlŦ#8į5ą ņN7#Ŗ.: $ņŨkJŌôči,ą"ŋ•*Úwaˆ9{öé\…öˆīz˙fĩ*CųFT/oūŊ}weo}“q Ir†k"į@ļŠOĩ[ÚĢÎ ŋh$Ö2Ĩ/˛+8_žĻŌ§œ˛+)ųY‰á?ĨmøQˇ…Íåá‘Ū/”|nĪøqĮŊzNŗāKb7‹ › G“ÆP1\s\ÜžƒM‹Ëk¨á• FčŌ3ƒĪ^{ÔMi°ĨŨœĢ^ÆōÉ ¯åBî] ŽæÆ2ˇaŠ| 'ŧÚÎ<–?{'Ôö˙ëÖũĮ…ƧyˇĶüȆsAoS“I}āģ› fÔ,.eEV"eĮĻGŌĨĮMÁt3o4ģ›kDžú/,°*¯Ū\÷˙>ÕVX`pāyŽĘąŸUöũ+ĻŊkŨnÎŨ)`Ž79āsÁ˙ëÖ4ši˛™!¸ßK;ÂUTBŨŽ+=z‹•ĸ)ŽS͌ũĄQ×'æ8É#ˇŠéúÖÆŸo%ā‹Ę˙RŦŒd~žõÎŧQŨۉĻ*Â<äĸ‘Īg×zŌFˇļ‘ D‰nb7{į=k9E^æOI\XžÛOÖĻĩŊgHČ œŽĶ×ë[o¯âÚōxƒ4q|ž[€íŒ›==ą\ŽĢk7Ëu$ą3;žōzsî9Ģē&œÚ•Ãī–5…P+&1ŧžv÷­[ĸ”ēčzMÕęŊô(؈|ĜƒÁí֙Ļ}™/EŨ×ī—8uVČ=‡jģlļÖŗ¸•>bŊļˆ12 ƒØ`dū!7bÕcŽäē2 žHįąę9éW¤’ĐZģ\Cž2’wž;ƒūzÕ]='wĄ7Ø$˙ Œ?ø ˙ŲŅXžhõoķøQUĘ-OW˛Ō¤6#Ø1ĀtĻ3Āúņš–n܈Õö¯_}ĪŊWmėt‘$讒ā` ãØgŸĘŠ(@ËŗGašOõoåÆIÅG|Éhcķ"‚VŒXôĐņE6ÔXtõtÄ  #ŁÁĢÄ`0Įæ4›Ķn?„ŒÎ?*(ĸÚČãKI˛@ķXą ŽŸįŠXZâtØŽ€Â|¸ÁĮoĮQ@ėRw1\.ë¸Ô+e@RL‡ŠOząqå¨WŖ N3đ‚(ĸŽ*藹fqqōeFQÆûž„ÖtqÂ5 l ‹Ī‘y‘˛Ų<äįT­ÆËī5ĪŲVWdX3å+`ŸķœV}Ī•ŗīf^„÷į֊*^Œ–jËcqönü¨•v §;ā‚Âąõ ĘĘŦ⏉Nõq¸áG-ôG֊)ėėJ/âŧ‰ae—j( #¨üŋúãÖĢ<Ž.ÃlfO3pŠD ÆG~I>œQE]•Á[ܙ6yB%lĘYAČį§FZŽT†ėĮŦK=܉æF<Î$Bs•ĪŗĮĨVQm˛šĐYãˆCŧöĩãž™É=zû~”—×ŗÛÁS´:€ĨÆ PAĮ֊(ml9oŦŖíļ2™SË }ÕcÛØžŋIgą[ŧÂ$GÜŖĖÚĨ•sČõÉõĸŠĶbVåo9b¸™Ō‚2KáˇdeąžjHŲîLĢ*|ŧ°ųÆx#¨}čĸĻ_ )uęļömy^ĸs=úĪ#Ī“Œ—“ļr=hĸŗâ‰Ɍå˜ĀQīÛ°ëéUQo5e’Î ô†V\yĄ9äŽzäw”QR;”Ėn?ŗŽn%YI–3œ{zņĪ^•~æ÷ė;§Ûlí !ËãwČzˇ^8īE¤w4ÁiŠé늤ÆDuÉ}Ų8ĪןëTåĶíáû;üą‰ís‚: Gc‘ÚŠ+ÉļŅmir!ĻŨCÂŅė! žZrHîyü˙ ǍP,Hnžūũqڊ*á&D„2m}ÄãoúCVRæh2ŅHĘHūFhĸĩ$Ųąņ%Ú(,VEÃŸÎˇ-õûIB‰A‰˜ņÆyĸŠĨ¨pÍ Â "uuėESŊŅ4ŨBužōÆ ¤Q´4ˆ Š)Ę(kk++q¨†5ØV%Õąš†h–ÜĮ|Ž'؁ĐQEDĸ•Ŧ3:ĮÁMļúaÎY†üzdô­éôxŽāŽ+†i8۟ŧ=­TÆ*÷%˜÷~Ō–9Qá"?€(8ëŽĩÅjŧōūYāTSœ؆ ÷lqÅTԄtŸu Ũd†8„¯ m8Oõgī}q˙ëŦÅZ¤­:ŊŽÃļ6BA'=>ŸZ(Ž)+JČÎjĪ@°xĄģŠâ$Pû%Čģ€A˙~ 6), large regions get the same color, * and there are few colors in the final result. * * The other two parameters, maxcolors and finalcolors, can be * set small (~4) or large (~20). When set large, @maxdist will * be most influential in determining the actual number of colors. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 MaxColors[] = {4, 8, 16}; static const l_int32 FinalColors[] = {4, 8, 16}; int main(int argc, char **argv) { l_int32 i, j, k, maxdist, maxcolors, selsize, finalcolors; l_int32 nc, rval, gval, bval; PIX *pixs, *pix1, *pix2; PIXA *pixa; PIXCMAP *cmap, *cmapr; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("tetons.jpg"); for (k = 0; k < 3; k++) { maxcolors = MaxColors[k]; finalcolors = FinalColors[k]; pixa = pixaCreate(0); for (i = 1; i <= 9; i++) { maxdist = 20 * i; for (j = 0; j <= 6; j++) { selsize = j; pix1 = pixColorSegment(pixs, maxdist, maxcolors, selsize, finalcolors, 0); pixaAddPix(pixa, pix1, L_INSERT); } } pix2 = pixaDisplayTiledInColumns(pixa, 7, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 0, 1, 2 */ pixDisplayWithTitle(pix2, 100, k * 300, "colorseg", rp->display); pixDestroy(&pix2); pixaDestroy(&pixa); } pixDestroy(&pixs); pixs = pixRead("wyom.jpg"); pix1 = pixColorSegment(pixs, 50, 6, 6, 6, 0); cmap = pixGetColormap(pix1); nc = pixcmapGetCount(cmap); cmapr = pixcmapCreateRandom(8, 0, 0); for (i = 0; i < nc; i++) { pix2 = pixMakeMaskFromVal(pix1, i); pixcmapGetColor(cmapr, i, &rval, &gval, &bval); pixRenderHashMaskArb(pixs, pix2, 0, 0, 8, 3, i % 4, 0, rval, gval, bval); pixDestroy(&pix2); } regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 4 */ pixDisplayWithTitle(pix1, 800, 0, NULL, rp->display); pixDisplayWithTitle(pixs, 800, 640, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixs); pixcmapDestroy(&cmapr); return regTestCleanup(rp); } leptonica-1.86.0/prog/colorsegtest.c000066400000000000000000000075271506303110300174170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorsegtest.c * * See colorseg.c for details. * * Just for fun, try these combinations of the 4 parameters below on * the image tetons.jpg: * 30 20 5 10 (20 colors) * 40 20 7 15 (19 colors) * 50 12 5 12 (12 colors) * 50 12 3 12 (12 colors) * 30 13 3 13 (12 colors) * 30 20 3 20 (20 colors) * 15 20 5 15 (19 colors) * 80 20 3 20 (12 colors) * 100 15 5 15 (7 colors) * 100 15 2 15 (7 colors) * 100 15 0 15 (7 colors) * 30 15 0 15 (12 colors) * 150 15 0 15 (4 colors) * 150 15 2 15 (4 colors) * 180 6 2 6 (3 colors) * 180 6 0 6 (3 colors) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 MAX_DIST = 120; static const l_int32 MAX_COLORS = 15; static const l_int32 SEL_SIZE = 4; static const l_int32 FINAL_COLORS = 15; int main(int argc, char **argv) { l_int32 max_dist, max_colors, sel_size, final_colors; PIX *pixs, *pixd, *pixt; char *filein, *fileout; if (argc != 3 && argc != 7) return ERROR_INT( "Syntax: colorsegtest filein fileout" " [max_dist max_colors sel_size final_colors]\n" " Default values are: max_dist = 120\n" " max_colors = 15\n" " sel_size = 4\n" " final_colors = 15\n", __func__, 1); filein = argv[1]; fileout = argv[2]; if (argc == 3) { /* use default values */ max_dist = MAX_DIST; max_colors = MAX_COLORS; sel_size = SEL_SIZE; final_colors = FINAL_COLORS; } else { /* 6 input args */ max_dist = atoi(argv[3]); max_colors = atoi(argv[4]); sel_size = atoi(argv[5]); final_colors = atoi(argv[6]); } setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); startTimer(); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixd = pixColorSegment(pixt, max_dist, max_colors, sel_size, final_colors, 1); lept_stderr("Time to segment: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/colorspace_reg.c000066400000000000000000000205431506303110300176620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * colorspace_reg.c * * Tests: * - conversions between HSV and both RGB and colormapped images. * - global linear color mapping and extraction of color magnitude */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char label[512]; l_int32 rval, gval, bval, w, h, i, j, rwhite, gwhite, bwhite, count; l_uint32 pixel; GPLOT *gplot1, *gplot2; NUMA *naseq, *na; NUMAA *naa1, *naa2; PIX *pixs, *pix0, *pix1, *pix2, *pix3; PIX *pixr, *pixg, *pixb; /* for color content extraction */ PIXA *pixa, *pixat; PIXCMAP *cmap; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "colorspace_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Generate a pdf of results when called with display */ pixa = pixaCreate(0); /* Generate colors by sampling hue with max sat and value. * This image has been saved as 19-colors.png. */ pixat = pixaCreate(19); for (i = 0; i < 19; i++) { convertHSVToRGB((240 * i / 18), 255, 255, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &pixel); pix1 = pixCreate(50, 100, 32); pixSetAllArbitrary(pix1, pixel); pixaAddPix(pixat, pix1, L_INSERT); } pix2 = pixaDisplayTiledInRows(pixat, 32, 1100, 1.0, 0, 0, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ pixaAddPix(pixa, pix2, L_INSERT); pixaDestroy(&pixat); /* Colorspace conversion in rgb */ pixs = pixRead("wyom.jpg"); pixaAddPix(pixa, pixs, L_INSERT); pix3 = pixConvertRGBToHSV(NULL, pixs); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pix3, L_COPY); pixConvertHSVToRGB(pix3, pix3); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 2 */ pixaAddPix(pixa, pix3, L_INSERT); /* Colorspace conversion on a colormap */ pix3 = pixOctreeQuantNumColors(pixs, 25, 0); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 3 */ pixaAddPix(pixa, pix3, L_COPY); cmap = pixGetColormap(pix3); if (rp->display) pixcmapWriteStream(stderr, cmap); pixcmapConvertRGBToHSV(cmap); if (rp->display) pixcmapWriteStream(stderr, cmap); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 4 */ pixaAddPix(pixa, pix3, L_COPY); pixcmapConvertHSVToRGB(cmap); if (rp->display) pixcmapWriteStream(stderr, cmap); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 5 */ pixaAddPix(pixa, pix3, L_INSERT); /* Color content extraction */ pixColorContent(pixs, 0, 0, 0, 0, &pixr, &pixg, &pixb); regTestWritePixAndCheck(rp, pixr, IFF_JFIF_JPEG); /* 6 */ pixaAddPix(pixa, pixr, L_INSERT); regTestWritePixAndCheck(rp, pixg, IFF_JFIF_JPEG); /* 7 */ pixaAddPix(pixa, pixg, L_INSERT); regTestWritePixAndCheck(rp, pixb, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pixb, L_INSERT); /* Color content measurement. This tests the global * mapping of (r,g,b) --> (white), for 20 different * values of (r,g,b). For each mappings, we compute * the color magnitude and threshold it at six values. * For each of those six thresholds, we plot the * fraction of pixels that exceeds the threshold * color magnitude, where the red value (mapped to * white) goes between 100 and 195. */ pixat = pixaCreate(20); naseq = numaMakeSequence(100, 5, 20); naa1 = numaaCreate(6); naa2 = numaaCreate(6); for (i = 0; i < 6; i++) { na = numaCreate(20); numaaAddNuma(naa1, na, L_COPY); numaaAddNuma(naa2, na, L_INSERT); } pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < 20; i++) { rwhite = 100 + 5 * i; gwhite = 200 - 5 * i; bwhite = 150; pix0 = pixGlobalNormRGB(NULL, pixs, rwhite, gwhite, bwhite, 255); pixaAddPix(pixat, pix0, L_INSERT); pix1 = pixColorMagnitude(pixs, rwhite, gwhite, bwhite, L_AVE_MAX_DIFF_2); for (j = 0; j < 6; j++) { pix2 = pixThresholdToBinary(pix1, 30 + 10 * j); pixInvert(pix2, pix2); pixCountPixels(pix2, &count, NULL); na = numaaGetNuma(naa1, j, L_CLONE); numaAddNumber(na, (l_float32)count / (l_float32)(w * h)); numaDestroy(&na); pixDestroy(&pix2); } pixDestroy(&pix1); pix1 = pixColorMagnitude(pixs, rwhite, gwhite, bwhite, L_INTERMED_DIFF); for (j = 0; j < 6; j++) { pix2 = pixThresholdToBinary(pix1, 30 + 10 * j); pixInvert(pix2, pix2); pixCountPixels(pix2, &count, NULL); na = numaaGetNuma(naa2, j, L_CLONE); numaAddNumber(na, (l_float32)count / (l_float32)(w * h)); numaDestroy(&na); pixDestroy(&pix2); } pixDestroy(&pix1); } gplot1 = gplotCreate("/tmp/lept/regout/colorspace.10", GPLOT_PNG, "Fraction with given color (diff from average)", "white point space for red", "amount of color"); gplot2 = gplotCreate("/tmp/lept/regout/colorspace.11", GPLOT_PNG, "Fraction with given color (min diff)", "white point space for red", "amount of color"); for (j = 0; j < 6; j++) { na = numaaGetNuma(naa1, j, L_CLONE); snprintf(label, sizeof(label), "thresh %d", 30 + 10 * j); gplotAddPlot(gplot1, naseq, na, GPLOT_LINES, label); numaDestroy(&na); na = numaaGetNuma(naa2, j, L_CLONE); gplotAddPlot(gplot2, naseq, na, GPLOT_LINES, label); numaDestroy(&na); } gplotMakeOutput(gplot1); gplotMakeOutput(gplot2); gplotDestroy(&gplot1); gplotDestroy(&gplot2); pix1 = pixaDisplayTiledAndScaled(pixat, 32, 250, 4, 0, 10, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 9 */ pixaAddPix(pixa, pix1, L_INSERT); pixDisplayWithTitle(pix1, 0, 100, "Color magnitude", rp->display); pixaDestroy(&pixat); numaDestroy(&naseq); numaaDestroy(&naa1); numaaDestroy(&naa2); /* Save as golden files, or check against them */ regTestCheckFile(rp, "/tmp/lept/regout/colorspace.10.png"); /* 10 */ regTestCheckFile(rp, "/tmp/lept/regout/colorspace.11.png"); /* 11 */ if (rp->display) { pix3 = pixRead("/tmp/lept/regout/colorspace.10.png"); pixaAddPix(pixa, pix3, L_INSERT); pix3 = pixRead("/tmp/lept/regout/colorspace.11.png"); pixaAddPix(pixa, pix3, L_INSERT); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "colorspace tests", "/tmp/lept/regout/colorspace.pdf"); L_INFO("Output pdf: /tmp/lept/regout/colorspace.pdf\n", rp->testname); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/comap.063.jpg000066400000000000000000001030651506303110300166400ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀŖË"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷ú(Ŧã¯iāę–@˙×Â˙sFŠÎ˙„ƒF˙ ­ū/øŅũŋŖ˙ĐVËū˙¯øĐ+ŖFŠÎūŪŌüÅ,˙īú˙/öiÚßå˙hQYßÛÚGũė˙īō˙ÛúA˙˜Ÿũū_ņ§fũŋŖžšĨŸũ˙_ņ¤˙„ƒGÎ?ĩlŋīú˙}‚æ•›˙ ˙AK/ûūŋãGü$63ũĢe˙×ühŗŅĨEfÂEĸįÚÖ?øŋãGü$Z.3ũ­e˙×üiҧEfčÍĶUŗ?öŲƗûH˙ §ũū_ņ .+7ūū‚–÷ųƏøH4q˙1K?ûüŋãNĖf•›˙ ˙A[?ûūŋãI˙ Š?æ+e˙—ühŗҧEe˙ÂKĄ˙Đ^Įū˙¯øŅ˙ &‰Œ˙kYcūģ¯øŌ ŖRŠË˙„E˙ ­ŸũūZ_øHtoú ÚßŅE‚čĶĸŗ?á!Ņ˙č'i˙–øEU%ĩ[0$™—Ö˜ÍJ+øŋÃŖŽˇ§˙āB˙J|má yÖė‡ũĩīøM<9Œ˙lÚcÔIKÚG¸{)˙+7čĒ–•žŠj.ln#¸„’Ær ­f¨†ĩ°¯÷Ōš[3ūmÉ˙RŨÕ?ÜoĄŽRĮūAÖ§?ōÅ?ô]t:œÕúœķÎ˜NāāŌ“ĐsFr:bēq=ķLÆN:S‡<␞3ü¨q÷Š2@äæ—Š ã­ūô`ôĪj Í'SƒúPߓøQĪlzCÆ2E Ɯŗ“Æiâķ×4qל÷Ŗ‘×­TmSO˙§Û!}Ģ*ąÚIĀäāsF€‘l’qœŠA€j{ld‰ Ôå$"ob:€=G9Š÷š¤­Đvh9¤={ķŪ— ¤ÎFsõĻ éĮå@ësëAĀÍ&6ū‚>cíAë÷Š3’(Æ3@ ĀAÎ) ĀĀ'š3Ī?ũj^ŧĐ’W€}Ģ“ņÕÂÅĨÅÚ ™œbÛaq ĪVQÎ_J源1^}Ģ\K6ŋ|nÃyb$›~ōãÔá†s\Øēœ”öŊĪG*Ã{|BMÚژ֖ĶęŗGϏē[‡+ķ4{p3† ¯zúWŦA[[Į CäB(Ī@+Žđ…“ĪŠŨęRã(ˇˆ}pĖzũ;õÚsŽ´`āÔ9žėyŊyTÄ8=Ŗ {ƒÆ“‘ßķŖ?äŌgŒŽ+Ŧō†°āc9Äø˛âyĩX`WAįkG’ÅŊķĶåWnĀsĪ_jãŲ~8ī\Ė€Ë"ŗ°ēŒ€yĢâV’]iĐĢlĒ&üāŒd‘ę9đŽ*U%ė§wwųž/NXÚqŖŖ¸ĪÍiu­¤rAq ƒh‘‘‡$B…l e'ôŦäV1Éã8隚KÄû 1ͧ´ˇpŽĪ8\íÜ œgå=īųÕ’đΛČhIbėíČôÚü9ô÷Åe^JO™=՗Ķt#Čâ×GÛÕ°ōĀaAũ(-°~čą9į›Ã-zgŽ(!aųzäÖ—ÜŋĖõl8ĒĒīc—ĪLRĶX nŪwš;}=i´™ØOn‹ö>ŪAawî4ĒžA;š$qAÄkōg}4.ãŊ‰Ũîiio/Ņ—ČPüĖpž”ŦI /ŨīL eRšÂö§‡TũØęESŊüûtIX†TålŌ2äāŽÆ€ģ9—ųŌa™ÎFŠ^iü˙D!IiUČ_QFøãų %ŋ#ļÕÛįÔQ´F…ˇ6:f‡k[§oķ ˇ‚Ō÷ĮĨ&âĖUI HCNŏAA0ŲĮĸîū‚…wd÷  ŖĖäúKÄ ŒŪ´Ā­¸ûĻŽŸ¯VBœÜ`´{RÆ2sëéAg,y Ü⛠XHaķ8öŖ˛û—ų…ē Ŗh,äî=)ģ>˜/lŌí. ŒƍŪ~| pH4_[ũĪPøz1áė@ž_ũ ē횇ƒ'ũtŧ˙Ā̝ĪÔWu?‰ū4ũX÷û‡é\üƒíI˙ž(ņŅ]c}Ķ\‰Îk×ũJč"ģhu8+ô&BNūt`PNtãN;âŽĸ—9ë×ړlŸÂ€Į֐Œ Qôæšūg–ŪYČ;w €}Å 9ÍKã$ÉåZŗÜ9'¨ë–=ãœc‘Eũ‹iö­Šx—QM¸ē•D•QW'éÉâ¸ģKEŋŧ‚ĪJŨvĨy ÍĸĢ€ ‚s¸ö áÔį5”æŅ´ ™ÚŨxĄÄæ ˛žtōˇ!˜“3>>XÔBâqųW!s/ˆĄ:•ëZų@¨ ĒIŠ ĨØä1 ūąS,2Nwū ĶlŦî&ŋēkņzTųwé“R¨Î@ã‚8­}V+dŧgˇĶ-.fY"iGÚBvĄ#3žqŽ+ÔrÜŪ4ŌØã­áņÄqGäÉjėŌ4!d%dV8?.î:‚rj_ xrūyīo.¤‚Ņ-ŨíxBIE+ž Âāƒ“÷ēqĪĸØģ˛ÍĻ2öōyy6‚6†8á€ëÚŦČËc&Ԙ;ˇtĮ|ĐæŲJ `Ú,FŅ5[ #ĮļŪHˇģā˙­Ú ‚øäéî,Ú]ęj÷–ˇ"i>ˆâu,­ĩH Ē ĘįŽr>ĩÚÃöšāFĩöÖÅq4Eˆ^Į€2?‡ˇéX÷ēŧúLëzŅŲ°w÷JŲŽMā§q8 @šëÍ OA8 ŠhŽ#E$rĄåY ū"œ2GaUáYÍÄŋg[hĨ;ÄBBä1$’{r8`WbÕjqĩŽ‚ô?JCéëA˙ Oá=iˆ\äqĪŊ78aÛ= .xĀĨsÅ ĀÍΤ÷æ”pIüЃ3ĩŲæƒCģšVEQķĒš‘îOá^} ąI;ģÜĻg;ŲÛ,Äc?\p? õAŽÅ>’Úéõ;4,[jđŦūY,rHîk‹FSWLörœtpŌåq߯SWÂW1™¯-ē;m‘G¨ōãķԑÚŧą5˜tû”š¨RXNAsĮĄzuĪĶÚŊCÖĄ×,>Õ ļŦnĀ'uĶÁT÷9ĩļ3Î0ę5X;Šyš[q֓ąīõ g=ų¤c]ĮŽGu:ZÚM<¤lŠ6‘ž€d˙*ķŖ$ˇ3=Ũá ,§{z{ėčŗ*L€Ņ¸*Ę{ƒÖ¸-JĪė×īoą!EDb@ãÉÎÜũI¯;Ÿ%īĄôÕŇ|ĩ—Ũåæ{y­7<;’ZĮTPd ĖėÁ°Ä: ^´‡|ä`”˛[5ŊԐĘĨ<ˇ*öãôÅ0¸ßą­DŖ.f–ëîG]*‘tã.kŨn8ļå+ų‡^3N ˘Ũښ6Ä2ŧˇŌ“kæ3ŒzVz[ËņfļĐQ™[.p(.Tųh;šLŧÄā RĘŖˁG•ž]ŧÁ Į pOlR/&ķž”Ē7eänhWg;G=hģŨoÕ˙Áža„ČÍF>gõÅ;&%*œöČ ¤;œäRōéĶĖj(Œ!'n“&LÄŽ Rąy[ ϐ•nĩW×ú˛FĘ%rI ŋ<§éÍKĩ#@ÎFę‹kËԝĸ•ôoī}ũÕĩfs„8Q×ڕļĒâ0 ĻīÁōÔuī֜€ĖXĶ]­čģú‹P*0BséMÎHÁ (Ú]÷ąāš /…N‚Žŋ¯a‹æ"$ôÍ4â#ēN~´ė".@ËôÅ"¨qēCČĨĨŧŋwHÛ˛BŸzVbXNOsHŸ÷`a}ir!ų@“O[Ĩסųƒ=Cáō•đęƒ×Δ˙ãÕ×W!đôáÕ ×Η?÷Õuü×u?…‰ū4ũXöû§é\—}¯ũqOũWZ˙qž•ÉYČ>Ķū¸§ū‚+˛†ėā¯Đ”öįōĻ“‚x§cĮéLÉÎ8õÔsŠpqŠLöÆisÆyĻö84†/ pxĒ2jQ‹å°ˇŽKĢÖŒQ„laA+Ž}jޤ5Mf7ąŅËÃqëö XõƒÆėqČ?A[š6–|/yx˛Ü ˜îäi#eĩ-p@;Ųz€IŽãšįŠZÚ#jt¯Ģ9›˙kÚåÍ´Z´ mk•˜,L’¤eO˝•äg 9k­Ķü?g0Kéa d´ŠŅžX×%rzŗ|Į“ĶõĢéē’ēgŽŨ‰ÜĨ—8ųĪ^z㎸9­;ÕÎÛ{*)b°‰-ä†BĶ dyYÎ1“ ééL]2°šŅKė—qgfËd÷Ī­^Í4ķJČŖ"Ö;Ã=Ā[„†}Ëį†ząÚtä:ķŸŠ~ooâ{) XÕHIæl€ã<ėį+īÆqÎ*[ž‹âæš˙„jđZīĒÅ:ė,㚯'‰rŖĖû p;W6"n).‡ŗ•`éÖŊJšĨĐÍģ[Øä[Ĩģ¸0Æûü´r,n9UĪlđå^—ŖjŪéļ뎰ŨĖP3˜ūR}öõמÜŠXà ,q÷¸zāc­:ÚÖ=(fͤĘ•2BåXƒ×'Ŋ*8§MŲĢÜčĮeXūģcԉ‚“Ž9ük™đöŊ<Ō­ûog?š˜˙ÚŪũp{ũzôÃˇjõiUXŪ'ĘbpÕ0õ:‹QqëMÉ$ķĪō¤Éœķ@'>õŠ€ŋ^ũ1GC‚~´ƒÉÖVĩ­.‘o X„ŗĘNÄ-´`rI8ú~tĨ%ķ2ŠRY¨A]ŗWšÍ4ũŦũX‹XĩiZ9#;eŒķĩēđ{ŒV€9|ĮéJR\Ču!*rp’Õũ–v‘ĄŒģãsœgüÍSÔl š5Ũ•Ž-šTmžXn<ŸĪŸÎ´1×4…€'u'ĩ7fˆWNįĻxŠ] ĶOÔĸu„ĻaV JŊpŧœÁž+]ŧ_§Ģ¨xoôo܃ˇō<ūĸt"Ōî)mžX'a ŅI”$3éÁ Ž}Erql0‡f9##šķj՝šŅôX,&å*ŠŌ[ĨųũžŠa¨îŗĢ¸(AWũŌŽk\Ō¯î<@īkhåļŧ’äāŠãŽĮãXÜ]Iše1’PŠ#œbĩlüC¨Øųp™Üáq ųČí§ę)GĻš*¯¸ˇ”b0ĩ=ĻWˇr‘B+GÉ`¤  d™#`ę=Ôä~ĸŽę÷t—0ŨXŠC*ŋmaŗŊ;öëšĸģn÷ŽIÅBZ=;÷ō=ē&…æ­{Ļu7ÖÚn¯Õ~ŌīPé7š8>‡“Ås×:„÷D4Ž0!ĩ#tJaüGßōĢžKwÖŲ˛[ēcŗôāūũjļŠhšvĄ-ŧdœmdÜyÚúāÂējNs¤§kk¯üĮÂPĨO,5[ĘËŨŋâA4ļÆU•ŖK’đ!,!aÔ}}iƒįr;^*œÁ’e¸y6Ą![Į$ā`{đ:ņīSÛÚ!ÎŽũĘĻrÍßŪëÔö0ÉĶ^ÉŨÛ¯—AėÛ[ĪQK°F7s֍â!ˇ1ôĨ be0(lŗáx_Zq>VrÔkËËÔj=Á]Q0Üļ(T.s(č3Í07šįԃē~GʸÅ/;úŋō(7ą!îôæ—+H;›Ū°ÍBĸ >`¨ŌÚ¯—q[¸›úÆ9įŒĶŸ2ˇîÆŋåMPŌ0 H\ūíŪ[ėŒgŽž‚žˇķüí¨ÖÚ īįMas'^ŲŠp°Ũ{ã4Ė3ūņø_jWVŅéߊ.(-'ah."!#žŧŌžéØō^(ųcpwÕ>Í|ŋVNÚ0"ď‚sԚĘĶaņĩ3ĀĄq&B@äŽ)w´„"‚‹ë{ëÜwÎ1Č>”üĶ'—Í5ŠÂFI !J˙\Téo/ŇCĶū–Ģ1įΗ?÷Õuü×!đõŗáđ@ãĪ—ųŠëø¯F >3üyúąī÷é\•˜Â߃ūŠ?ŽĩūáúW”ÚøĐHļ–Öē5ė‡ˆËɄUÚz2ËÎ;×M)Æ-ÜâĢ+XėcßÚ yĄY„&hÄÄnˆõĮ^ÕÆ]ëž!M>y$‚Ũ$I^mÚÎHáQ‡ŨøVƉā­pO§ß]ę ĸ¸•74ĨPŒ(MŨŽN2;֞Ũ^ČËØŗfiÖ€’Ë)XaRî߀č=ĪĪÛ[ø_Ö¯q%ŽĻ …ĀMæDÎ|˛3…<œ÷é^§i6Ú\% 30_2IģČ@Ā$žô˛jVņģĸy’ėûūLeÂ}HīíÖ˛II›FŠFG‡t<'a+\^‰äĀ’âDߓ€HÉcķ? VĩœRI3ŪNŦŽÃdqˇTOry?€íP[îGcŒq]ˇÄW“ít-# fW <pOĶ?­q ōËаâ¸ņn\ŠmÔú\š‡-7Zû‹šBíA“J¨ ũ~ĩŧßēĀo!xāúä~9V—ĮJæjŪHö!8Î*QŲ‘¸i>U%qʰū:øā×eĄkéŠGäŨāŊSˇĘķ3ŧs†^pN;W Īŋ!;wĻ`ÂÉ*ļۈ˜4o€JšŪ…yR•Ōųve—G ­$ļ=/܊ÃÕõ›í&õŲ"žŌQō0ŖĢ đAõ;ֆ‘y%ū“ou*Ēŧ‹ķép•axÂåA˛ˇVÔ´Ŧč0@'ķ?‘¯^´ß˛r‰ō,?´Å*SW×SWH× Õ^X„O ņ¨fG 䌂ˇĩCŦčoĢ^ZJ.DQÄŽŽĻ<“œrxéYz‡v—6z“Ņ~öÖÎí¤ŒcÜw­ cđiĶ‹{x ÍČpŽ„2Ē ļôāzöŦÔíJõjSPÅÛīú<šG…lĐM ˆ;c;KI3z⠟Ëš}ÄÍy Åŧ--Ĩ˛Ą –Û#’8ɰ9õĮJ­ss-Ėíq,†I›ī7@=€ė*3 RD|ĐáaÁŽ˜ˇ%eĸíÔ÷pš"ŠUjģÉūgUsŦÛi66öÖÄō˛ōŦØp9p9ŨČ㏨Ž{SÕoõpNR8A%–ez9V(҈1ƈÛÂãÛõ§—ɍž&¤ŋˆëÂå($䚤ēßökyĄ$VšPÍ$r Ú@9ęsüúRųy]íŒg8ĢûŦ™98 nķ€ĩƒ›k™čSŖ m¸õՍÜfoĪJ@U@IoZy}­˛<~!ߘ“Í.–û—ų”âEI––EųĪĮZvį‘Šr4¸2aØá}*îĸ°Š ˛ Žr}3ŌĒ7“ĶÁԜi+ÉØčü3oĢČJ’`p=ƒ6GãÆęŠĢŗjųæę$ z ŖĄüÉĢž7_‡īu9á3áŖįhdĐÜ÷ŽĻIŪåžwbėze&ēĒĩ ƒg‹Nļ:Ĩ˛´WΈ]™§§zRûF#ëÜĐŽQAÛJ ÄvõnŊ{×#í÷/ķ=ËkacPf?Zf%Žj1ƒŊČÁŖqvų8^´—¯Īąi[aKŒĐõŠØ~÷.GzF"5X÷¤Q…Ü˙x 4ˇ—âĀzeŸsåV†$¨>SŪ‘wNqœHd<°>cO[ųūę9‚ĀšąôŖibŌ>zPĢĖ“õϐZC•ÂRô?АŪfRqšvBeTeę?0 Ŧc‚qš“1ƛÉÜôí˛ˇËüÂ레ɐķéH¤89 Ķ­2|Î@ĮcA‘¤TČæo~ŋ‚(k7”v įÔ ænÉôĨĘĤKš@9“ dņImũ]‰ĨÔf֘tۊBr<´ÍHŌ3Ģž´Ž%ũß.FM>Ëî]ŊEËØDÛåÉ-ښĒårBúPcįĖcFį˜áGËE÷{˙"QøzWūᡧ'ķŽģĮ|;ãàc4œûæģkžšU‹Ä˙~Ŧ‘ūéúW)ŖøV)tkDÔn>ØFčūPŽBģGĘėŋ|d)č>ę÷Žąžéǚ_ü‚l˙ë‚č"ĩąBĮ”¸ÁPyžy ;RŠFâ/åvx­ wYe`Y}Än9íč=ĪĩY†Ū+h#†%ÛjWĐ ĢdD÷77€|’HÛyTuúdļ?úõ{<Đ11Ōzv8Ļ3*Šf`Ē9$œ@Å÷ÍQÖ/ÛLŌ//–/5­áiBnÛģhÎ3ÚĒKâŊ9<¨īâP›Õ-Į˜XqĶoÁÎ=+*ęūmv"í,¤M­˜Y%ŽėėOJ¸Áļg:Š(Ģoeŧ¸ÔŽ#€ŪŨ0y$1Œ( äôëSÜ5š„ĨĶ ŠOo`'ˇ=éÎŅĀ‹Ŋ•Ē=O`=Oĩ[˙„u58jhʄf(Õ°čØû䎌3Æ:{ö锪cš”ŨÍ= Ĩ“Hˇi]œJ;udÉÚOü֙ovÖņÁíŽ5 Ŗ9ĀžNņ\gj8ˆžT˛éŠæ'œĢ)۞vŧãę+‰wPģQyÍ^×o›R×o.†âžaDfÂ/c͝įTŽČ†F3ÖŧÚīšvzų™öY}O žē‹ éöŌ]ŨYj$¸pörãæGä˛äv<§5cPĶol%eš?Ün;eQō‘ÛéøÕ[X./ĩ+X`bŗų‹&í§ ĒĀ’}=>¤W¤į Œuƒ]Ô(ûj~ūëŠâcqrËņMRwOVē\ķRÂ<äĶv}× ŗ1ÂĒōXž€ ė.|/i4Í$.öûēĸ`¯ā;UK‘§ømã0Ä.ĩĘĢɂŖûĮå¸?c,§ŦĨeßĢ:–{ąQŖæÍM2ė­*Ō•Ëŗa‚)mŦÄąéĐqšĘņeœHą_ōevX„Žū­sú…åÕũčēšV¯úŋ%ŠyCũ“×ę{ũ8ĻIĒŪŪ:ÚßČŽlÔ2r_ql3{ācķõ­'ŠƒĻāŖ§C—”â)b!ZRÕŊMíÄ6özrZ_üČÉT+8(9Q‘íĮ>•‰qpס“Ėc d,õ°8ã ÂrHā Va€5Ë:͜T%­ŋÚÃå´hU•Xî˙¤čT;÷ž6õĄ”KąĪĩ -1+œ-cæžoüŽņY؈X†=N)HX×pji}Ŧc^~”ĄDGssëGKL@Č7=!4yhõŖæ~{PĖ2%”Õū‚ ąƒŊM ˜$ËŌ”Uy8éŠjĮįXâ•Ö¯īä/1įmúS$†"ĘąŠ”–AÃĄА°o‘>”Ģļ.–íOUĨžB”SZĸg 8™ŅYûÉüęL4­ģ ŠrŠ,L™ HÎIڃå§w>âŒ_ē5˜`*ģڞ į,{fšvÄĀĢdû _/#ĖcøRŌŪ_‹žčų›į;EöļÁČõ¤gi˜*p<Ņæ*.9/Z~ĢåØ|ĀHrO9â+ŊąJE9~pzŠ~LŒ’ŸĢ˙ [Ü‹ũĨų8Æęiq  ŽÔHŽ÷ęyÅ-,—Ũįę1Á7|Ō|SK™3éš\4ŧô_ĨC°Xš#ŽiõūŦ…%qœB6)Ë)Ņ~īų9č(cNy>ÔÕS/ĖĮĐt§ufúuķô#a͙††`ŠbJ_÷``w4 Ŧ#i5˛ˇĸ˙3Dî8ĸ„ÜįæĻĶ}ōBƒIŗ’LãŌ†bĖ ŖŠŖŅüû ņō&IĪQJ1 ’IĄĘ(OĖ)F ģsīSĨŧŋ‚횀ÛI&í@8 ”í ëڔ7’v. <æžˇˇ^ŨĪMøz…|:r<ų~Eu˙r?ÆßĶËüÅuŧץMûˆølWņįęÉ_îŸĨUŌŋäe˙^ņ˙č"­?ÜoĨdϧg¤xjÖîúu†ļBĖ}“qĀžüĢSœÖīU5)Ŧn#že‰&RÄãŒgõŠĄ™.mâž"Lr¨u$H##ƒŌ¨Å7ē¤×MJ°ĒÅ2ƒ‡‹`ū dwԘËvnĪe<~S4jJcN:T§ŠĨ¤<ĶGWԗIŌn¯J 1XËŪ{.O'šK—ÔuéÖMEMĨœe,‘Ã`>o1‡Q“÷G/=p-_ß\jzģÆĸėÛG+N÷™@ÉôÚ2GÕsRdņŒ čĨOí3š­W{"8a†Ú!1$h:*.üUˇΠ×qÚCo°LŠ ×%q¸°$n#æû¤ō1ÅOtĻ[vOÍ):ĮË5×Ē*(UTt §Vm;"iSRՙzg‡í4ۉnwIqu+ī2ÎrTíۅuāzÖŽhũiqë\ĮZĐ3Å!Á¤ééUu/ĩ>rļ.ąŨųmå3@lqÁ ¤Žy´&ĩ×/ā˜0‰ĀyĮl¤ÆKHsK0}ōM;É%Ëą24§æ-ß>ũąL Ԍ¸ĀåMĻÛŲuî}Î<´bŸcKÃnÍâ8ö†LķۏëŠŅÕ5mGFXíĖßiē“÷†I#QQ‘´ÁÉã×Í‰Ļ…ÃZÎđLQ,xȡ#ĶųÖž#Ķ"Inc‚öß/"õ+ŒŠ88;O?JîÃÔũßŗZ>‡ÎfxnL\kՍāô˙‡54mf×XˇŨ*ΜMyCũGŊrzĩŧ°kQ9æGķCyXņųr? ĘŗĨÕž`üâXø9<Ÿ¨ö9;šķšS,“LÜŧŽrOøuíYÖÄ:‘PkŪ]NĖY<6#ÚAû­ĘGVåžŧÔkųæg\61ģÔ‚œS ŊˆÉíHIŸ“Đ äžîū¯ünČVsģhû§Š ė„į4…Õ0‹’}Š9—“Ú—OëQ×ĖclPXČ1?ZMÅÉa(fōŽØųÉíO[Û¯ā†)Ø ŽŽ{÷¤ÛŧæC@hÚ#ČA9ϜĖwįQũ_ü„8>īgniI6ŅÉÆ)Ŧã#Č?Δa,Nę=WËõBāųŽhÜd}ÉÂãži˜2’°ŖĻh2Æ59ëO[ųūC™‚/ɂԸPģØüŪ†›ÄԚL3íМã4•­úõ`.Zn:īKŧ*ėP2{Ō;88 íŒn^[˙Ģ˜„—įĩŗ¸ái6‰ų=Š 4ß"Žôĸî÷ë×ū ,›X‡^§ė,{XļN)DÂc&.Æ%ûúŅĶúģ!¯ë¸›Z\žOԟæHĀĀĶFį“™üéńxūTŪöëø Šy9cŌ’1ĪīURėrۘ¤ÃNĀãŽüŌžīīä1|ÆfGˌf¸BÄ/$ĶwnQyā5ųØîô§ä×ČblÚDŽŲî)§|ܧ ;âœĒ\åÎߚFc’‘ž=hWŋŸāę0ąĒŽGĨ ŖnX|ŲĨ“FIõ¤ØOī§Ĩ ÖōüY›I ŽĶ­ĀõéOŪ¨B"đx'5@PBjzHvĒæJîž]ŧʋōĀC“īL!¤;›NAüRį?ĨihgŌ•úß^˙äXŒûÆØÆŌ€9-íK‘ƜŸ§JGEWŪį“Û­%Û§âÄÚąéßIoäŽ~Ņ/_¨Žēš‡Ŧ[ÃĄšæyzũEuŲ¯BŸĀˆÅ~ŦšOõmô5į-<—‘ø~ëW´ˆY[Ÿ•uÂi¤pN6nƍĸÉ6ĩeqîX‹M#įFŌŖŽä–ũ u=+đ|Ö÷}đÉ#\ũĄüņ*t9ĘŠ•ĮjčēŠåœšĨs˛œmīžôœŅGARj„|´nņŠā|QãbÛŦ´i†DˇKĪü?Ģ~^ĸ'5vmF…Jķä‚ÔÁņiĩoŪ=šĘ ĸLtķųąúgß5ˆå˛Š@īB3†?(õīJ\/Č={ ķĨ')ß¯ā´ÃŌtiƛwi áQ8åĨ0Ā“ĶĻā;rĸÆwš´ĶēF%~íBō3V“Đp}ëąĐ=(]°uëéJv¨ų9aëMKšį(ŌÚčŋ[Č]¤ļį#J$sąäSrePŊ§oü‹ËSÖöëØe ‡ÆZ!”no”hį—%OŊ#eČÚpč^Oæˇ—Â'JD)ÁåšĨf–9īÅ @THįž´Y[Ëņ ,*‚Ä4‡ HIcąĘhÁŸpÆDj~jzßĪđBÛÜŨHĒIķôíJŠąüĪķëBŠwų Ž‚GķîĀĖr A*ĒBōí!m§l@ā͈e‰=ąKĸ_r˙1 csžiA36ÃÂĶp\ob;f•‰e:z˙]Râ<"€M7o”Kĩ(Â&ŅËP ąËį….—ū˜„*Îwt^Ļ‘Ÿ€#ëÜŌî,ÛŨ>ԛ„9U&Ÿ[učŋĖb¨Ą›–úR`Ė2ãh´ģ6•wéõ †•ŗŅGz<īķũ„ž#QĮ­("/—ĢR3)ÂÄ0zvÕ š˛\QŌĪnĀ  ZRô¤9cˆōĨ]ĶŸŒr(ŪxDüéĢßĪđA¨­„ÆĐIĮ¯z@§c“žÜŌ‚°›–Ĩ-ŊÉÛKúŋp–œ pŊ+>>D=3C9“„\ķCmQĀËQåø˜Xa/É=ŗMÃ1¸SÚ¤+ģįsČādÔdų§ ĀŸw÷ŋō&]ÁØî+üE)2’Ūô™ØLj2}iҍ‹æs“Ú›ŅWdĮqÛL;p´ķ"qړ #ž0šĨvb,“Ū–¯Oødj,g ÉúĶvˇYO^Ôâ(‘ÍéM Ī‚Ë€=M%ßīäL–‡Ļü=mŪĮo>\~bēú㞀<>0xķåūbģ x¯BŸĀˆÄ˙~Ŧ–O¸~•ÆxI´1žļbVē™—vpˆŠ¤NAĪĶĐWhßtÖ‚ãŠ/ižRŨöqķ’K~šįŊk~‡5ĩšēiĨ'š‚ętĩļ–ylqĄv>€ še×^&Ņė&¸†úú;gƒ„ų ô+Ÿŧ>™Ž_[ņ…îĄdŅxf9Vä]ĒAōIÍÅ˛Ã ×Œú{Š} mBūįY–§lBŽNR0Ž€œĮĩ^úõë[ƂĩŲĪ*īĄ^ÎŲā‹7upØ2Í!åČč8AÅ6ÚÂ;;gjĪ|ÅH<ĄbOĪBxĢYëPÜ]Ai’â@ŠX($’z+{$aĢg?s{'‡üK§Ī-õÄĘžTŗ2‰ Ęšfƌ|Ü;žøŽīū}`'T´ĮQž}Ģ—QŗH"—{2Č Ž6v8ëĀã§×ŠŽúœK™ŪÆí`;ŧY‡]¸šåš‡7ÅšÕOÚ[HÜ蛯Üy?ÚQ3šŠ‚Uy€yééN¸ņv…ob×m¨ÂȨD9v#°^§ëĶŋJÅŗŊ‚ņ D][‚é"”uã¸<Ņugip[ÎHüĮ]ĸLãЃÔJ=’qŧd ŗR´‘ÍkŪ3ŧÖÔÃ6ļ-cVËÉÛįnÃØ~f° ė0Ŋ€íRĩˇŲ‘K0’2JG28u|uÁķߞj4Ũ)Ác˛ŧŠŽWwû˙ČûĖ (ƊtvęÁ‰rg3NųQ:‚ôŒâĸū”lÛķŋJËK[§O3°@6KôĮy„~íGÆi2°(0)*¨0ŋ?~)īēųvÜũî§žiĨKąc÷3NDŨ“!įĶĐL›‘AĮ¨uŋ^Ŧc‹ įŊæ<úQ‘Oé@B‘ģöĨĨŧŋ Á”å˛î &ūLjŊ¨mŌghųAëA*€mÉjÕģ`BrܡĄ¤ÚYˇ9})ʅyNÄĶCž^Āõ§}[ûßųœ| SŽØˆaËŌ"ųŸq@_(åÎsŌ—OëQ^ x29#ڕYĨ;G“FŨŒ/Ō‚ĀŸŨ āsO¯Ÿā€„yE7JPĄ .h "sŋŊ2e›—Mvę’ĖOd4ŒB`&yāĐY|ĩ8…eˆm#-֟•ž_æ!J*íÉĮJNf›!hÛˇæ“!i–'`Âw4z?Ÿč\ļx P0Ã'ĩ DcåęhÛōųÉŖKy~"č"Šs—ā”ĄŽāŠ0=hbfđĩ¸ōÔ ãkũl€!ÆI¤PĀų­ųP¸NėîĪŠÛ/žô˙Ģ÷ôä´§+ōZk0ØX ‘ō =ép!åyÍ+lžåū` QˇsœˇjD-'v¯cëNōōĸF#֘wNAŊč]˙Ū‚lV}Ÿ*ŊÅ;+ĖNIõëLČXöĒåķBŽs!ÎíĻŋđY<ĖįˌÜg&šĮxNĻšCˇø=éYÄ@9Í=oeŋāß¨aUxû˙ZE üČŨ:AUSŊŽ}qHwK‡{ŅŌéü˙ČCüß0”ąāë;y$u¨Ũ”ŠŽG\SŖ*ˆwįwnjZĶU§oÔ¤ûŠQ2>Ą÷JÃjüšëJKÃđŋΐą" įžˇķüoņ=7áō*h<é?˜ŽŋZä|ģt,žtŸĖëqī]ôĩ‚>üyú˛wáŌ˛ü9k—‡l!Œ’žJŋ>­ķԚÔ¸ßC\‚ęˇéļvÚ]Ü1ĒZEž}žgĖWîŽp0OÔVŅ‹“˛9\”UŲÖ×%ã-Z(ŖM/;Ūå~hTî3Lr{4ņĒjĐÆÖûãœ7Üš`´ŊõÆ1īXÚN–Öî÷ˇhMėÜąfŪÃØˇsú=ô9sYŖ)V´4Ë,DĄYx9$„ã,}Āü:Ž™ĒVĸîyžŌoŅ–Ž1å†02qĀīŽOšŠn,æę9f’MˆŒžJœ)Î3œrz:U p¨ (讋;Ũœ÷V˛ ô$ūÍęSßŪŪX¤˛beMĀ\–Āa—/Ķ Q[w3˛Č-āUiˆÜK*/bqĪ<ā}j >W[ĢĢy …ŧÕØRqô=ÎO"ŗ•HĘ~ÎúŠÎöܡF•kuĸ^ų †x ōã‰Is†rKnbNIS‘ĪAĪž¨nq’:U]L o­‘-ĸ•âc<´¨ĪĘÁ=A?đu­Ã\– Šd8x÷g‡=ÅyõÕĻŌ?Đöđ2r¤ŽŦ%ɉĪ$žAˆ'\Ŗņíí\MėÆūúKËĩI°ą’¸!ã#דųÖ÷ŠîT‹KU‰s)8ėęßĨ`"ËõŽZ“ŌŨ;ÎMŋm$D-TâB†* ObEH͸â!ŒRä̈́<(=iļÕÉ>õžˇ×sԌTvZŠ ylŠųáE&ĪãsÅŪaÄ`…Ĩžßb….TėNô›|Ŗš‰Í.UP€rū´ˆĻOõ™ 4ˇ—âÄ4žp:Đ[ŒF9öŖĖ$ųk=iØœÉ§å÷/ķǁFį$šéÎÜúPŋī€'43~T~ôüŋŪĸ°årÅ[4›Ü'օL‚Ī’@¤R͏ÂúŠ.õ{˙ F,؏ }hĪ”š_ŊI¸F<ĩ÷§(6dįŽæ+ÁõK#ŸĻiŋ4ĀŽF/,wōúPÍŊŋv8õ§×OøzÜ ũØ1Ą@Œįq>´¤,c9Ŋ3H#Ū7Éú”´ˇ—âÅt'Í!É8^œĐĖĒBÆ?\™0Ē zˆAË2)ë{[^Áa!¸’NzRl2°bvKˇŧ‡ƒŌ–ŧ)ŏįúĐRáâ(ŠŠĻŽØã!š=ŠĖV5Âāį­7Ë ĄÎ3éKKy~$Ëđƒ÷ŸwԐŗŧ.y4ōĻsģĻōj Ēžēīø"uąJŽI´Ũ‡‰ëŒĶ°ąŋ–#Ĩ ės÷qŪ;üû!c:üŧZ]ȸUåÅ1ŖÂEœ ,n-ĪZVŲ}ËüĘæĐô˙‡ČWÃųoŧg—ųŠëĢ‘øzūg‡AÆŸ.Gâ+ŽŽúwåW>+­yú˛y9FôÁŽN7*ļ¨ą¨´6¨w ›ņ˙=kž¸~•ÅXm§î.r`Ĩŧ‡øGp¸ŽĒM'Ģ8k&Ōąc984ß|3R‹[ļûÎ:ōcĻú€ēŦÆÁwyn¤g÷âēTâŨ“9Ü$ˇŸ|ö¨/nœŗœ|ŖŒžį€?€}ŅųbĢīfųŒW<›æo¯V{ØejJÂģōÆ0}h is“G0č<ŊĖáR­nËņfėA™p­ōŠRD*sšF&Q„b”m{Ąų¯'ÎÜûPJrUiYˆ/÷}ÍÎv§Ũ4õŋŸ~€8°UÚ ĨŒ*‚dīHUcärieūr1Š-师æ~xJ„Dyc¯zğ* JJ ÁęE?&ž@&ÕO>ÔĶēb Ī§Ũ’øŽh,O0)Ģ÷׸Ä'#b)Í*áīzR>"ûŋ3b•S ČĮ>Ɩ–ōüE Đ ˜/žôģ‰m‰´|Ķ8Qš@ōÔsÜĶļž}ģģ–ÆYēŌÆd~ŊiTyk™9' Ļ…,˙>öĨįø÷ôæ\áE—TeķëH[˛>˜į0(lōhėžåū`9TũįŪė)Ģ™\îČ^´í†LHĮJFc1؄ Sîū˙!7–å#ˆŖŧœũirHÆ_õ¤U‰”Œ‚Žž_‹26ķÂĐXžcëŠA—!z(랔šX†Aú 5Û¯O!ŠJĸŒ ĩ"ŽåŨ'=)vųadb 4ÖV–n”|ūbY¤ũŪp´ũŪ_îÔg×Ö`Ęé~ELķŅä×Ëõ`(3—ų‰íž”ŒĪp¸ )~eĀãŠMėí°;ģ߯ō+¸áb ķJPb RemÎŅ‚ĮŋĨ R§{ũŌsŠ]<ŋ n,6J7“û¸ûwĄ˜Ę~@į­9‚( Įéԟ—áØO°Ā,†<úŌbû߅<ĶņüRœž´Ō^RĸSGw÷ŋōÛ$ė\(â†!|ŧn=čÜŠß­8…„sÉs¤&‚˛Œ“Ü€AČīØWMLuČéM6Ņ-)+3Č5öÖãÕ7KįØF ŦH’}áŨ‰Ũ:VŊÄÖWi´Íé&ãū´q÷\û׸\ŲÛŨĀĐ\ÄŗDŨQÆErš‡-Ÿ{iķ˜‚BJ7(?^ŖņÍsVĨ)74îĪsÃS‡ŗœ-æŋR†—~ēˆ¸”“%JpAõĢJ<Áûˊ¯g`4¸žĘŅ„’‘œ†8v{į9ŠÜ™>`Ā*ŽsĀÅgkiø›)F^ôv)ß°‰#AÍŗn>éŅąøũ@¤{Ķ]ŦûÜá ˆUOš=‡×“ÚĄu¸Ôí†×Žœ+.æ<äĀœsZ(ģ—š?¯Ru~‡Ē[^­üķŨ Fßæ ;1÷@ĪnāúÕV!WbrkļŊļļīhå–'Ævđx ×=Ži°éoo$ųr’…Y˛wuČüĪáYÎ:¯ÁžkS—ČĘUUåˆÍ4nv ‚qŽ”í›ÜHNqHĮzí@=3Yuū´=!ÄXAlRã‘ą@ڃ‚Ū˜¤\–ųĪ-ŋ^áqIi€#}h6íQķPX‚JpUæ8-K˛kN‹üÄ5xɐrzSrŌ3 |´đ¯(.HP9†@ÃËP=o~Ŋ|‚āåP/“Đ‘JŪÃ'­"•‹‡99éMPKå¸Z^Ÿp->AáG4ģĀ]ŠŧĐėIXŸJB8÷íčhˇü7ų€Š<¯ŋĄĨ™‰q„ôÍ  ŗŸĨ L­´túˇ÷˙ĀfÁ OjRžXČÃ5ˆÆÅä÷Í*¨ˇIž”ēZˆhVpŽ=ŠtÃhRũķž‰õĨ‘ļüąsĀÉ4펛ūAÔ2l,GZE@Ŗ2cņĨ‘…|üôĐĻQ¸°ãļiikôę.‚üÅú€”;`#\ŌīŪ<´4 °įw$Õz¯—ęÄ ›Nķ֓a˜‚FĨ R[s‘´zPĖKíOģęiz={ūƒãbƐˆ|Ã&™<đÚF]¤D\€YŽ?VūĶŗ0´+í8 dŸË­[ČWEÄ9”ôéA,ØUČLõ¨íå[ødqŗqúTģŗû´÷ĸúųūbäü¨2MB|äŒũ)@Xr­Ëb –Qo Í9Äj ĮZ?¯Q\”Šœį īAaˇlx-ŽĩVÂöKøL‚"‰ŧ¨ÎGcVÛlJ }īZvŲ}ËüÁ;Øb`¸Ëö¤\ĘrÜ-.ˁ#rԌZe%8 B}oę˙ČÜGîĶéŸJQūŽrIíI‘° $“@]ƒ25?NâĨžgô§92 F:uĻ ō8 ØôŦå=Šë?Á n#€Œ}E*ŽåũáĨ Âwœ{zS fO˜đš¤ļēÛ¸ –•Ęēzö¤˙Tv¨$ˇiĮ-…Œr;Ö§‡tvÖ5H­p SæJ[€# 7~'8üiĨwĘ×ËõfUĒF•79l‡iŪÕu–h-â` ŗ0PAĪLũ?•t’ü?“û9ąt>ŲÔ1?ģžŋé^€ˆą¨UPĒ îū5ÚŠA;Ÿ-W4ÄÍŨ;zīƒ,ĻĶ´™-g]˛Ĩě†AëƒÚēLJÎ́ûU÷L}Ĩŋô­UĨec‚Ss“”ˇdī÷éU4ųØ˙×ŧúĢo÷éU4sĮūŊã˙ĐEYÚ(ĸ€"eÃ{SxŠ$RyjūŖga7w īēŦ~fõĀę [t8Ë帚Õõ b¸)ûũĄC! Ÿ~ĮŊQēąē&Ô1pØT6ƒģ{įܚЍŪę7—iS,¯.ĶÁ˜œÃ&Sũāk–OŪ×îũOnœ-˜ÖŒFwū‚‚Ļo˜—ØĐœįĖl­!“cmŒqŽ”ĩž›÷5ëæ8WåĢ–ņ ˇö…ŧr UŽ6ecüy#?–į]O|ãž:W?âkSĩ…응î\]¤ŠvįŌL¸U¤ÎŲä%=ˆS„įčëįø!kpą.ĶËã­*cvdĩÖx~Ÿ˙ŋõōßú VgiÃũ"÷Ÿųyoũ+F"wûôǚ?ü,?ëÚ?ũUÆû§éT´oųX×´úĒõ˜ĪZ0(c…>ĩÅko뒱lųĖĮ„äā{prZėä!âŧ[Åņŧž)ÔÃ.ĘšœväwãëYVv‰ß—PuĢY3¤†úÚL [ˆĨą¸#ôИ"Lķé^x!‰0äbQŅ͆ę9­3Ä3[¯—¨ƒ,L0 ˙ŧ?¨˙ë×"Š˙Ü÷*águĒęu ZnFqNŪǏxSà ÄCFz9R”Xū|rkM4]:žBÆÍŒ¸—&¯Ļ\\Me<‘2G’âUŊpO´Žé€=pˇ-ŨŨ ´>0Įü*e&ĩëÛąĩ^ÖVdlŅĢ;DIŒČvųsĮ^zc­ūfúŠr\´”Ķ–oEõöŦ/­×Ū{0\ąKņą”ė„Û^[¤fÚvyĨToŊZ4ˇ—nĨ~C@lnlíĨrĖLíëHĻƌ§;ųC`äúŅ­õÜî Q åŠĒ €™Ō”.ÆįŋįCeؕČA֗Ŗųū€Œ‡`íß4 ˆ0:ąĄŲ@ڜ0āâ9üØŖKj´ė/Čęîr;Pßŧ#h@&bCpĸ‚ûIEĒÖū€“bíŒdöĨt'ļ)ļãÎFzŅŗsyŽpAKKy ĐrŠ“ƒ÷­ĘąDéŒA-*€œ9"‚ÛWbõÅîž]ŠļÔdúĐȕ‰ĮĨUsæ`žŲ¤œüĮ ڏ;üûúÅ$ĘFĖ€ 2Yã‚Ũä'f gœ_klN3QĪ 4.ŦĪķŒ§Pē/š˜ŌĐÉm|m]¤˛9!ˆPžâæėæâRÃ<"åP~˙Ą’×w˜C(mŖ =>”g?{4a .m˙A{Œôŧ@¤čph:ÃŖ­(Æ?­ Į9įځ1¸Á4dg§g<“Iģ ˙…ŸÖ“<͆)ŸÆw֌œsĐPGĸŒį֘˜0ː{UÛLZÁ&!€’ˇđû7ˇŊRäc ŸŠ¤ ķA•Zjk˘ęMy$ŅÎ%]ė„t5ŪĢqwƒĘXĸnŧîb?§ëT†å§ņúPėĖ–6W€FÜžƒĄ§%ÅÔ(ĢÅLRēf›Û<ãŌ“œPeËsJMuČUĢtËp~ŊÅ‹R¸Ŋ‹N°M,ģ°˛ļĐRAüøŦĖg=kŖđnyŠxŠĘ{x“k:É,Ŋ)õ=1īU{E8¨F•NúĨĨĪWđæžžŽC{ fēŲžāqˇÍō@;×5ÕÁq Ė^d¤ąį‘ƒ ū Ē=ķL›Kŗš”É,@ģ RTŸŠkŊ+hŠ9NNRÕ˛ayjĖǎ–bU@eˆęŌĨ‘˛ĩU´Ë3ÖŌŨø CD§Đt¨<ģ‹eˇQ=°åb-‡ŲOF€ãžŒ†;O?é7ŋõđßúVˆéYZDņ\ŊÜŅ6QŽļvŽAŽ{VĻh`Yo¸~•ÎéWΧŲéĸúę/"{41áv*ĢĮRI!ŋN•Ņ7Ũ?JĖĶ&ˇˇĐ´Ķ<௠ŧALŒNÁĶ=é°/[ŨCuødW\āãąô#ąŠĒœēmœō´˛[Fe~˛‡c†¨ŽCŞ šĮIm!.Œz“Éŗr°Ūaä‡ä ę >ÆĻSQW‘ĨRĢ5îÍ]Æzvíj ŨŪ 1ũæč>}ĢËõ+æģÔîo™v=ąļoÜTcgčV%TĐi|š~ĩÁ:ŽŨ¯ÁåÔđĢ›v3ËbwļH÷8¤sæđƒz2Îp2žĖ";sĶ5ßΧ‘Ūҏk =”Íš9ÁƜœœ¯CZö>%žvę0I0æe+’3ŨxíééY;GßnH¤Á—§SRėũYÍS N~EKP“Rž¤­öt‘’%ČŲsüǁ˛‰Iy KķÎpOR_Į5`‰åĸŒû lcoÍ&qžô97ũn\(Â1JßđJĶ[‹ĪBĘĘW#q ŒōO¯­Zķr6 âĢŪ+ĖĒĒ›ãŪ *žŖúÔË4L›ĸbqÁAÆqÍĸ/"–’ą"âr2ب–;˛Bâ”!sšČŖ™ō ŠZŨ÷ęÍÛ§–;v§mP¤“ķhų`Č=)66í퀾Դˇ—æÍ#Ėáh/ÉTzĐؐ1Ū‚T&–ö§ũ[°|Ŗœf ‘#d{f…ķ æ€ZFĸŠ{üĀīÉĀõ§6‚ {Ō3ÉTīÔĐvÄ7įæ?­_wüųŊ… .ĖAáiv™æ#õŖsI…^3éOú~@=Žß•=:ĐBÆ294oe {ĶUv6\ā_רÅČ7ļ;R2Ē=h;™øûš¤s‚B~´uķüƒ¨íËØ>÷¸¨fY 0•;7tĩKÄcq~ÂŗõXŽî Ũb5åÕIŪۘŠß!=Ž}"TmE š9ëRĨ!AJņ´ŒcđŖœĐ÷=våVœūtwÍ&^´ŧsAb{qց×ôŖ°ū”~tcüæ”÷>”ĶŒúpęzš7ß Í֌p(Æ{R€zQĮĄ¤ĪJbn´` œqKž~”c#­ą1Œ˙…/CÎi¯OZ;qژ sĪŒã'˜į4§îŸZ.y˙ô/…úÄÍs¤ĖÁ^áŧčrxb >¸ūuᇠÆ+OAĶī5=rŌŪĖėŸ˜˛g6ōNĪZpm4âpæ4aW(ÍÛ¯Ü} ūI Œ‚*šĢ*åOáY„sĮzrļÆö¯DøP°MC+ƒ‚9Á§!Y~n6öÍ UW°æ‘™Ÿ¤ÄąO|Ē0霌w*„ūĻĩxŦû>ĶyƒĮÚū€•ŖŠŲ3ũĶôŦ Oļ‹Iŗ+;ŊŦjZGg8Ú8ų‰ĀöŽŨ*Ž–é‡fîÁQmŖ%˜ā´Sę"žĄmwampú:DĀĀDäáX”¨ÁØãĩxõÅē\<ŌHĶM+ny_–$ŽžÕí&KËđdĩeˇ„}Į–"LžøČÂū§Ûŋ7Šx ci-ĨŲvĖÎĖÃäœā÷G§_ưĢKŸUĐõ2ŧ],<ß´[õėyš ä“AS/ÎxvûHģŌŽz„MpJōažØĒxvqR ņÖ¸Ü'5ךõ°Ģ Įš.ūcX‡Pą }) _œeģTow´­rއkeHįëŠvĐãÍŨ¸učiZĘĪEø‰J2^ëĐ.~cšBÛHT9´ģŧŪ)r¨˜Æ[•Ģ^ÅAî?1ëM›@"ä’äāv¤g;ĀAëBŊô߸kķæav)ÕT1A¨ĘŌē)xĶœdåĒŅXãä}é Ũæ*AŽÆ…k>ÄĩĨĐæ%ß#!~”į`ŸęÆIQí˙vņG,Ū`a2íõüiaŊˆ6ÖVW<ÞāäSkoÁ Ÿ[2Ę¯Ë™4™ķI3Ō‚ÎãÂŌģ€ƒˇZ_ץbŗˆŽÄŸj@ĸ"]ģöŖ„_›ælw¤ä™1Š:Z€Ŧ_œđ=) y€;ŠBÄđ™Û́C]ŧŸZ;/ģČqF2ĮĨ ōüŌ=éžl>iV‘|íģļnį¸Ŧ]WP{­ö‚=Ўņ5¯ę%vė‰5MLŸô{Imß;¨á@íéŸūŊSūĐŋhŧ“8UÉˉĖAĶÂĢ …z 8éCŗĐëXxõÔžšÍĖh7ÛĮ&Ņķį-ôãŠŲˇšŽú?69“8ąí\š E*‘qģnė>¸úgš-÷™Õ¤Ōŧȸfō׀*šjvaš8įW` ƜŽ:ķŌądŋš’ÔÚ¸B ”ØSŠŦČŦ6˛ŠQĐÅ[t&4§+­û]ZŪæ}ˆ$É]žāĩ<č¤;ČąŖ0POvôŽ]”qĨ9ŪW_.YžHÁƪ탌u4_[Ąē3ž†Ļŗ5š…b ŇAķĨfĮŊ0"/ Ą~‚œ~ #zTũšc‡^ÔwÎ)2=1@4!{Ō`bŒä˙Zō=é€qĪhĪlûu gŒíAĪũ)ÝøŖņŖ€2iˆ^ũM'Ō“žÔŖ§á@› ädķĪjP0IqŽ´™É BôÅ ­ u =é|ņJxÆM!ü>´ëđvƒŠhvĄ5Ŗ<˛BĻEķ ŽPk˛ļĶlŦÚ3mgF41Ģ*BžŖ>ä æž܉< yɆic?÷ÖīũšēūšÆp;×}=b™ųö2u=´Ą97fú‰AëĮčĮãSĮlÎ2NīZ—°[o2 ŧzæ­ šęsօ…c!Į¯Ŋ Į63ž)ˇrĨЁsx@˙—ƒ˙ %h•Ÿ§Ÿô›Ū?åā˙č Z40díŌ°´xeÔ4ËšC´pÆRČB 3sĶ=°&ˇ[ĨSŌ?äc˙^ņ˙č"ŸPč]¤ ´´SFīH˛ŋhšîŪ9ŒMē=ã;M4hÚzLˇ"ĘÜN‡+*ÄĄúZ„dHŽgÜōoDąx—ĖØTInŒOf`X ĸ¸ŦËo+ąæĐļHÁĘg9ūõKÅ:-ÄōŽĄjí…M˛Ŧy.= Ž@Į|s]R—'3ßĸėrGPÄ`ûtü++đ ŽzƒNÚ\íĨUOÔ9ŖŌũzŌwéúR5yé֓ôŖ<õ掸 ŠĀŖ<ŅôéIŪĀvzķųQƒH;⏭uæg“GÔҏĻx€m!xĀĀÅįƒG8Čëü¨ÛÍ.O}EŒ‚($ãĨ¸¸ĨčpzŌw4X“’sŒŠQփɠL;sÔŅ~)9āf›Īô ›ôįœŅœ˙:BxéBúSNM&ŠP܀y¤nœPHĮã]ßÃ^ÚĮPģͧhã7›^&”āúr+R)ą†ĀøYģÖŧ<­z’™ cžËōĘ2pAî@>õÜÚXˆ>ŧW|eÍĪĪëR•)¸>…€sKIKۃ0ÔÉ>čįŊ>Ŗ“€=iFĀ˙Ĩßs˙/'˙EĨib˛tÁ‹Ëü É˙Đĩ€â"wû¤{VnˇZM–ĄetRI-"]ÛC+m^„žšČVķ Õ =OTPĒ-ŖĀ|ĸŠ j^HÅė@G áKF=÷ƒëŠŧ  Œæ‚*‰ŅėËĢ`™Ī”%a˙€goéKP$]WOvÚˇÖÅŗŒ —?ÎŦc֚Ņ!aEdÆ6‘Æ=+)üÍn$šxSFæƒÆ;•Æ}Hãˇ@ ŸęV‚ÁoŽ|ÅvF€IåÄI ĀöŦÖX&ÕŽu­Ėj$JŦģITĪ$v9'đŦEļâYoLx’v, ›fNĀ}8íęM9× Î1í]Té%f÷9gYËN„XüsíU¯.MŖÜϘ¯üŗ…rĮžÂ­vāҁŽNEjČ[ž}ĒęwšÔM Ë6û3)ģ0ëø æ.ŦWNģKģuch˜2" üā“Ķæ`įŠŽĶÄĸ×ûMbĩÍÚZãoMĮĪž?ˆŦĨäUC,…Û R2A#ˇL•ãÔįUšO™ŸcFžĻ JĘ;Ë->ĶNˆĨ¤+cšŠŽ\ú“Ū­`žÜ×#ņ< -%Č+LjãR¸í“ƒČči˛ø‡_°–îĘk4ž@ Ã.DExĀb>`FyãĶđ¯CÛōüQi8đS“JRoŗşŲ˙ÚGh3]°DžmĒs†'ōãŌŗÂˆ@?•2,Ŧ+æšyØ1‰ÜYģ’OZr/y+Č­SÚIĘÖ_™öx+ÃQPnāĀČw… ēēlNž´…‹Ē8Ĩpąƒŗ–üë;lžī/S´U+ÁÆîƚåܝ”ģQ#›Ō‘I›#ĸŽøŖģûßųĖ‹•Ųœ{ĐÛT|Ÿ{=…'™ĩŧĩĮĨ;˛ŪÔ[e÷ÁģKŋ,=ú×+s8’âgØŅmؐŽņük§VF—ƒšmĸ5å‰ã€=ynøsDKļĩÖ/!U !ˆŽ6rT“‘Ī=9­čŅ•IY}į33§‚÷¯wØå´ Ūk™‘Ų­Ŧ€æb>f>Š?¯JëĩéˇVˆļ`ÚJƒåeƒ}A5Ö•=; i°NĩëSÃBåĩĪ’ÄįXĒÕŊĒ“ļHā5?ÚXxrk…’Wŧ‚-ėŲųXޏéŒ×Žz×ŦxŖR‡KĐŽYÆį™(Ќīb–Oá^NŖ >ëĪÆF1’Q>̇qëRœĒļõŅŋÄ: Rg^iĮĩ'Cžœ×ôaīMõĄUrNîk¨đn•§j°ŨKx2ńVėĀ… I‰åx­ŠRu%ʎÃOKÚO_"–‘ĻZÎ$‹RąÔ&ķ9Ą’Ėا$d/|Š•&ļļZd/odgŪ•–á'M­ ySņ'ˇ÷kŅôû+8[YEå-ÂyŽI•˜{tÅs>4đô÷R>Ģ –hĄ Ҝ¨ģ‰ĮrrkОƝŖšņ˜\ÉVĮ)×~ë}ôōüN“éKÎiˆęĘ0*{ƒOĪlæŧ§}™ú dšēxāҜžM)Æ8¤ČôëéHaHsøŌįJPF}¨ ˆG×ņ ~}(}O{›ĨdÔ.€ķSvB('húķÍv‘ļÖÆ[ ĩßĩ™ųî2q–"nęå’ĀrM ‘OCHĢŽO&œ@=yĒ9Ä/Æ˜û˜sĀÍHG R>JĐ#?NĀģž\Ÿøų?úV–­giü]_×É˙Ņq֏áHdÕū@zũzÅ˙ ŠŧŨ+ŸŌ"ŋˇŅl'†ęk-á&ŨŌ1•Ú2€9ôÉ˙°:*­ļĄmtŽUķ;ÆÄSÜÔŖąqy3Eif€X5ěC¨$ev†Ī#Û¨õĨp4î."ĩĻžDŽ5ęÎØņŽ6æY5v{‡š`“pŽ8ä*†<2\ŽI<ķÚŽx†fûFԙ`ž9b–(ŨãÆā Č)ÆîžÜÔã­tP‚zŗž´ÚŅ:PGôŖ4}z×QĘW# WԐÃ53 `Np:‰†Â9ĨĸĶ(^i67ķ,ĶĀZLÄd€ã¨Ģ‰Š5Ž5TEPŖ w¸ôâ€ŊOjžU{ŖG95föŒŽyŦÍ_L:”1ˆĨTž<ėf\‚ä~•jôÆ?ziëšRŠ’å–çRTæ§Ē<æHÖwIÆŲPWü=Ŋę<´Į ŊĢžÕ,#ÔlÚUߌŖ‘’‡×˙­õŽQ$342ŒŦC¯]ĻŧœNĶ|Ņ˙†>×+ĖžˇY|hFuÁEČ4Š=ÅÎIéš”ˇV÷¤Í—lî+Ky~gŦŋ0ÎۉųzĐKũÖ1šqc&tŨ Pu&Ģ[ųö Â'ûtƒ#—˜GRO@=ų¤æ1šēúUŊ*kQĒEq}čԏ)‹|ą?÷ˆü°{'›ŗz>§6*´ŠQ”âŽŅÖčÚ\Ze„hc_´0Ũ+õ%8Ī Îĩi)Ø8é§ĐQĪBxĮŌž‚1QI#ķšÍÍšKv:;˜fyc˛Đ°W\}Ķ€qų^wâOęë“[i×>L6Ͱâ!—q÷ŗ¸r3Į•šâ‘â"O¤JҰ“.͙ČĪ8aĪé^u}}>Ŗx×wW˜ęųjFâ7zœvŽei%ÉkEåĐŠ5Vv’ļŨŸš,ŪëúžŖhm¯gK„Îå2DFõqīųÖpúŌæŌŧÖÛÜû:4)Ņē¤ŦŸaÁ˛ĒŌÎâFHĀāŒąŠÆGįTåŨ:ö 7ôū•PIŊL3Õ)Pæƒŗĩ¤l’IÍzŋ…Ŧbšđ,6‰3"Ü+ī’07+9ę:ŽŸ…yQmŧ.}ëĐü¯Ã§øZvŋpļö“Ŗž~„öí^… %+t>'0æœnú„ÜŲ@‰ ¯q(%lŋÔ7sė1Y^!ņuž‹j… iî$sÎĪ-ą‘ģŋøú֕†šĻęnņØŪÁ;¯UFãéé^kãûá­B‰4/#hTĀ‘eį$÷<=˛=kϤí ŞnšuĸĒ-:˜îæI$™Āķ%rîUB‚O^J@Fxũj˛\ŽĘ@eôĨ rDoĮŠņÜ$Ũ™úD1xhS,’]üŪ09ŖŋĩSiĨuÆU¸1ũãē?^āRöRĩÂ9ŽÍA?ŸBØĪĩ.9Ļ+ĢgkdƒƒN5B÷Ô2xÍÉ&ƒŌƒ‘LČ ’@š¨ŧøđ6î>áIÍGq*¤ĢyÉgéSŽ;qéNÖÔĮÚsIÆ/bš–6š/\‘Č=jČ=¸¤íĀũis’Gz1ĩî/ZNqžŋÅéJ `ū´/oÂŊ'áfƒop×ÕÂo’L0ŅNĐK{žp=9Ēūøs­ĨŲęw׎‘Ė7ˆ#^Jį›ŦĖY] rÆpņąåOøzõ›om ĩ˙‰†œļĶ.Ę֯ĆVĮËÛžAë8ŨĨäąęšŗDmÖeÜŌ[Ųū˜ƒžs“ĀėkHËŲ̧r$GkXĶÁíIĐõu´‰Œ 5­ËHÜ#¸aačNę>ĩ:uũÄĄ<ŗŽ2ŌMĩ‡Đnk_m:2ŊŠ˙AQÉn@äsŠß‡AļUũûÉ9?Ūl(˙€ŒĪ51Ņt˙/`˛ƒ~ā>šëšÍâDh¨>į,UąžœRrpH­Ųt$FUÄŅĄã‡ĮАOįšįWĖļ‰cģr'S˛BČG͜gĻ0N0}ęãR2%Ķ’$=?—Ôũ)O|vĻt<V@™@ ž9îkÄ:ö†.­ˇy¨>xÕļųŖąÎG gëųW@AÆ3֐ƒÍLáĮ–F´kN”ÔāõG™yW’žũΎŦrä:ûsũ:FģFlí‘<“?LW_âm>)lÍāĘÍÕČ<2–é“\ˇ˜î×ãb(û)éũ#î2ÜoÖésė֏°yˆc_$†ČāŠCĩy|ė*ŧŠÖgĖ€Ë|ŅzƒÔCMķ.8Û‚Ĩ¸_0d}E`’ˇ—âÎÉMlË#.ÄɜcĻiŽKo@™Lc´Ô™nĪČÛH§BŋQRyj'ƒš:ųū@Ņ×xU.ŋᡒöidšP$ų›;ĸøųÖÖF}ũ+ÃŦš4PĢ%ŋîŲAôč[pûØ'āWŊE§M8Ÿâ"ãVQ—qzņjōé'FÕ¤ˇ›÷‘öI8é‚? õãÆEck^ŗÖb‘Ų6Ũ˜öG7?.G™'?ZŒEk-ÎüŖ0ú•~i|/Fy6NzŠoŠ­hw¡/‰™„myĀįŽ:ū•˜AüĢĮœ%Ë#ô>&–"ôĐĢ͊§8ÍÁŪAüÍ]QéU.‰Į€yVũĸŸÄc™ĢáŸČ`;:žM&Õs€Oj]Ŗ^ÂĢČī$Ą0꛰XÁŽŖäŨ‹pÍ<ŌA<îC؂Tã#?…EÂåb}4<¸1”,ā¯=\`lĪ'õJ÷ļĸĒ‡Ÿš€Ū˘)ķ°üépĪķ"ƒ%Î9 CJ/LzQ’˙* RĒģG-Ž´ ’ŅV"ņŒÁĀüŋĨZ'Į"ŗĖjFd=95rW“ģ!ρÍJ!sė)Z%_áfö§ĖO(‘€Nã÷GSS‡F<0üę–ŌŌzíĨ •F¸Œ‚Ī"PŖOF>€zŸį\YBĒB‚X ąšĮķ5íöÚ+Ŧ)‚į$ŗb}ÉäŌ=Ŧ2,‚HQŧÅØųPwCę+’ŧ=´“}S‹–.)^į‹Ē’ųĪŋ4€™ p€ÖŸ‰´+­PHãt{i´R?Ū8ęõ\ÖįÛÚyeÂņąpOæp?Zā”\[_Ō>ĻŽ"5iĒ‘ŲūîĀÆxŲvÇ89ņĻÚßÛŨFÍq ÆåeÁ“ üöé,Ą¸FųJąÃ/¨éÍV…Ú ŌhUŽÆųCņ¸zTôūĩ:#JZÛūėôItĢīĩĖÄ[°+1Æp:ƒcüÍwQʗ¤ą:ŧn ĢÁœ×ŒŪßK{…*bŒu@Ų }ṵ̃đŠ#,Ú\Ž6F<ČAëŒüÃéĐū5ۄ¯Ë.GŗüžÎōÆāņqéēũNä€;Ōv‘š\qČ˙ CĀ'ž+Õ>Lķīˆ†i5-2S{HŽąÛÉį˙Ēē—€ŪÃD¸Ŋ’ũåž÷˜Âí^>÷9ôÍv^%Ķíī4Ô¸˜l¤KöXcž@5ĸĪmwn#.’EqÂįīĄū‡õŽwFmŊŲčĮ0­0ĨhŽŨO ŽvŠA6čÉ'øh¸`¯s•ūŋŌĩüUĨéú]˙•at“Į!`Ņnĸe ?Ÿčk c2Žų[å9#ķŽ ŌJgŅRĖ}ŽĶŨö×3(ēA8Ī_ķšvĐÃĄW=Ļ,e™K;œtÎ*BĮ;@âĢ[ųœ=EŨÁ j1Á$ĄÎ2r đ?Îjcˆúri?Ú'“ØŅĨŧ„ČÄҎŪlaœ}jPÛČÁų}}i ™9'ŒĶU°|ĨÎJŸoJõäŲŧŗ…>´…Üy'ļ)rm<ąõĄFæķŖúõ_ ÜsI÷Žvęfcž†Œ€NŋZz˙]Ę@V!‡B?ĪĩD§dÉÜ\Üđš›aČÚĨߎj–Ļi%Lm9Į<˙OĘŗ”ŌŊŽüĩYĮ~[ˆGÚ"ČUōÉāyüE6+HŌ-͍,y;ÎBûTÂܘö´Ā Į˙^œ-Ŗ =ņž3ë\üŨĄöŌSq×ĖjÍ Æ 28Å(grhF‰Æü:ĶĖQîfؤ‘×üb‘ē„ēŋ¸÷·w:lžĩ‡Nw>@Û:ŋ ’Ÿ™‡Ķ'lWUŪžiĩÖĩ+-:īOļēx­n™ZU^GĄę3€¨Ž¯áĮŠO×ĻĄy;Û]¨‰<ŲK,ož>ņāGņZÂģVLųŌ˛wK_;מiiz3]‡Ī‹Š1ƒHis@ Æ}éi)M "”°\ƒŌĢgw$ä“Vd]ĘAĪ5T–`­Z!ĸ-3ū>īŋëã˙iĨjū•ĻöËÜ˙ĪĮūĶJÔëIîR,IĐWm%ŌÅf‘ZŖÂaBō´ģvņĶn =į]ü‡gĨyū‘*ũŽ+iniĸ‰ Ÿ$ Œ€8ÁãĶņފ˜WØĩ኎Ķ\6ŅŲĩĒ2ų—†V‰‡Ė7)āîČQô=w°2kĖtVéu+Ĩķâ0b9äÚËö…ų¸ōŽö9ƒė0}ÃT´Õ`3YËæ"žÖ%Jqœ`qXĪâ4§đ—<Ā~č&”0>ƝLaÆjKE0H;‚Ŋ!ĮëŠqãŠfmžyã¨.Û[…ˆsoöqŗ•Nã¸súW(įĘ8N§ŌŊĸæém #š‘ö* É'÷éĐוxßIŋҤļÕãmŅÜšûEžÕ ’œNŋˆ>ĩÍZ•ũå÷îYŽÖ8y/C‡ŧļkIöHá‹åÎIūõ æ­Č‘_}ĸî%HdC™ōXc!¸üŋ ŽÂÆįT¸K{8Y\ "ŒŸ˙UrŲŊ¨ŖV1‡žíb cõŠ-ϚÖę˜N&‰Ã!Á<ú¯õ­ßxJ÷Ãļ—7rDÂrT„nQēí÷ã<J­áX„ū*°RĀlf“æ8Îđ=ęÕ7ÎĸĖkbčĪ :ą÷ĸ“;ZÔī§§5Ģŧ^l,€Ā`sߑų×AŽũúbø úŅøWšōĢ^įæ•f§7%y#ÆË…oÚ%9e’=‚ŸĐšōn&ŗ¸Ymå’9•JĢĢĀ‚?*÷k›hŽí¤ˇ¸@đČĨ]āƒ^OâŅĩÔvvļ ‡Čų` [j䓁–üķíXW…õ:đU÷Üį™›sI#ŗČĮ,ĖĒ}ɤ OÍÛÜĐ>lãŌŽ]°Ë\gĢ``[îŽZRBŖ9úŌ…?…8¨Qž úQĐbī`ûRHÉāgŠP Ė(8ĮON(ŋ_ëärHîŌHŠĩqÃA.Hg×cËîE_×ĖDy1üŌŽ}QO\HĮ—į׈HK *?Ų8 îf;@ĀõĨ˙WSéL&D?Ķ‚?Ƒe@H8,1EƒAĀ:ęėc"­ÛČeBKÁ°HĒŠ‰@mĀŽ:ƒÖŸ (ĀîÁëéYԊkĖõrĖLãUSŨ>…Ėvô­Ī hCÄ^ ŠÅŲÖ-$ŦŊB¨íŸrãXÉĘé`ŗ;UÉāW°|?đ~ĢáŨF{Ģß$E< )ÜÁˇ>œg?…eNRØõsLbÃĐiJŌ{‹ü*t H­ĒÍ-—”˛YxBXŽŌzg§į\ÉüĢŪŧyh.|#ŠÄ’ą @û¤7ô¯Ō´Ģ^īėöÛxRī#œ,j;“ÛŽ*ëBŌ\ĢsŸ*Ė\3•gđõ#ˇĶī.­įš‚ŨŪt˛ųPcš­ģ?ji1ęȖĸg˙GYc99ÉáGÉ=ž•éÚU¨Ņô[=*ËMķ$hōī"ņ+`o}§#īę1[V}Üá&ÖLKf8ĸ_Ũ¯<6ņcNqZF„wgŠĪëNņ¤’]üˆ4Emô[8uV;› ˜’įūYŗrpIŽšāņ[Čęęe# ƒj&‚6(§iÜ Œ€}GįYŪhŌīœ‹yE”áHōSxI2ÅžQČĪËĐc5˛VVG‚Ûnė×éF{“­gEŦÛŧAĨ†ęŨģ¤ļîü@#ō5JâöMJeļŠÖE°.k™H@y RwsĐä|ĶËĮS’\5›ĪS!ao÷w}ī¯ŪŖmzŨ4{{ĩ‘ˆÜĻ6d€I'‚#Ą=kOjã ŦÍpųz=Ú ũëDV% Īü#įƒcEķÛ­T;šĩŗĻžŦÅTkcŦ‰ËD¤íÜTƒÅRŊÖ-ŦnR „ĨŠīce€œsÎå\ä"æŨ v÷×PAü1++ö {f’Ū6–Ynyäl´Œ'qė?™īX*ú›:ęÚ}ŊĖ7pŦöō¤‘ˇFC‘Sb¸õė%7–û—3ÄDĒ:ņũėt>ØŽļ9HÖH™Z6̐G¨ŦįcXMMRT7ŲÛ´÷2,Q/VcÅfÛx†Úęé`1On$â)&PCč9Č>Į¨ŗÜĻŌŅ›€šf:ФÚƙč˛7q›Á /ĖQŽ0w9Î3šŊšN@#Ž ”†5QVBqĪj–˜ŖqÜéO4 ŽHÂZKrW$wĢ”P3 ŦŦwĮjÖU?tŸĄ­?õ§q3œÖÉąfv RHœx:‘ŸlĶīŦāÔ,å´šA$3)FĐúzzŊŦÁ%Ŕ‘Å™ģ ę S?6Ü÷ÆqUmäŠ[xä„ūéÔ2q—q@&ÖĮŸKđ˛ēv´Ô]!‘ :KãŽÜ‚;ũ+Ēđ÷†t˙ ØĨŊ¤`˰,ŗ‘ķ9ūƒ=Ģk?†h#9ūt(ĨĒGE\]ją´äÚ<Ûâ­ĩäŅXĖ–ą›Xs™‡.ŦŨG˛ü į×õÎđ€–Ö‹ĢË"Ë,ęv3åüĖ=8ĀãĐ×ĒÜ[Åso$3¨xJ˛0āƒÔW3ŦVÜZ[Æ#†ˆD^€˙fĒĨM{Nfņ’xE‡ZYũū¤Øė;ûPW$ûS㈟ģĶÜĶÄDIÚy Ā#ž+RĶ­¤Đî#ÔĮÚ"C%ÃybÃwē%vä ķÔÕ-VØOĻŨÄĢķɧæĨ% āõ<æ”z͉ĀQųP2åUų¸uÍzŋ‡ž[ĩšÉŦË*Ü8Ī• zƒ“ô¯1Eļ}ęF Sʔ0O¯Ĩ&ЍšÆŊ}¤ø#EŅė历Ņ'ļæ{•WcĶŽ8ŦMkᆗŠŪÉwŌZĮîãEōԁŽJŋfcT[ŗë-4Š—6‚Ä#ŗ0Ü;q\ŽąŖ^ø~ųŦ¯bŲ.ĐÃ0*z}85<­F¤$ė™˜ṕ×ëNTũæ:qÍŲķu?JPĨūcĀĮqS§ČŅ ÁvįsJO;Tc4ŦKĢĀīJ¨)ƒŸĨ°Ö  Á&ˇtĪkļ˜u+;S4K!ŒĒ‘ģ ĶŠëÚĩ>hPk^(){šmÚRŒxŨ•>Ŗ“Įĩ{åŊŊ¤Kŧ1ÃôHĐ(€ĒģœÕkr;-Ī_†%:hÁē€Aŧ_OÖŖ›á˙ˆtû¨Ą6^q¸ÚĒĐļåSĪ {z×ĐØ *¯@)¸§QaņÕhOž'ađ¯K†Ú1uqq%ĘēČŌÆáFG8ÖŊ/ _įM$ļ1̈ĢYŪ¤ŽAqČŧbÎEsš‡4Û+ģ›ģKHáˇi3†-Ŋ—#w=$ā;úc§q¸uOZ̓ū%×1Yî&ŌQļfËFĘ +žëĮqôÆeĪ$œSŅĻĄem¨^5åÔIŊĒҟÃqĀÆŪ9.\ÁĸIË`qævė9#ņŠÂsŗĩŽk]^ö)›XüÅš¸žy9 <Ė@ę:Žįķ5$Ņ¤Đ´R*˛7XdĪ6V÷÷“Ü]ZČ#Wn8Q´dõ9į=Mi¯éĐV‘Ûb%žäZ\uÅĪîãO*XäKhŠ–FčOLļWė öŨŗĶÛÅ<ŠöˇĮqšD(Y˛I đAĮĨ7ÃļŅy&hci’igÛķ0'×˙˙€Öæ+Šnōl킴QšējČÚn.ge=LĨ1ô B FŨDjĐ] û­+4orûņW A÷Å<G™û5IÎX-Wŋ” ø3ũōiÆHÔ˛ęhßÄÅՁüH€ĄÎ+7QEšâÆ)Fč^ā†S҈F##Ķ#?P(ŒąÍy8†×PžicefŸrˆáä0 b0s€{wŧēR¨-ö›ŋ8ōeļIõÛ÷ b´#‰#@ąĒĒŽF>XƜjVķ@ņĖ×9GŒ„E ´á‰Æsœr?*ĢĻG4vm Āo#ŅmĀ(?(¸ @įž+ eƜVcĸë &čÄwŖc0C¨$¸9tĪš`EĶJ 'úՋ˜ļÉĀšˆ+mČJ &`ÛHŦûßKst—ÜyAQå‡YWāƒčAmÚ!H‰n¤ôŠĪZ.ĶĐSG#so5ŒŅ,¯à !]c)ĩģ)ų^qͧŊ ķqų×O=˛LĒēˇŪVę+*].M´ŌEĪß:~ŧ  VĐ­eŠĪ:bdĮDģQUW=įUĩBËOT7ˇvöûÎΐ)o = ŨMV?žģÂúCŌ~Ĩ‹~˜ĢĐčöPŽcÔŗĖ~¤ķU,Bč(P}NÂŋ ô&Fa5Ã̜#0XŒđ9WvҤMœŸÆŽ**(DPĒ:ĩrß[NōŨ•sžsšiU–…OąöĻ ū.*šˆåd'"ŗĩ? éÚŧh×öqĪ´aw 0Äs[IŠĪSęiôœŠŠhņ=Cá%ûj“}‚hÄļäķœ‚ ö8§­pÚ֗.Ŧ\éŌ2ąˇ}Ĩ”đx?‘õ ‹”`:âŧSâg‡īžÚ…ŧo,SD­)EĪ–GĘĐāsS-uG]ŌŊ¤Ī9fĀÛīÖ¤†•Õ"¤™ŽTd’}Isgq§°Žæ "w]Ā:ČõæŊ§áo‡VÃB7÷ļa/&”´o$`:ĮŒwķPŖ÷Ô¨ĄîAđĪÁ×z0}^ô”¸šƒbە ĸ“Ÿ›=øé^Œ2Í͚¸õniü֞‡›“ģ#1ņÆi1‚Å}‰ŠŗLnųĮJ˜čÍų҇ÁĄOĘ=iŲ c6’ęÎ ]ęËļ#´VŽĀ…@2V§ŊˇŠC ģ—Û¸ĒFÎ@9đĄüĒĩ°iõ!uģÉ‘ŪEÚe9]ŧuā×x E×qĮë/Tˆŧ‚´‘Į y#Sƒ"Ŗúãž1ŪļHâĒĘa´4&Qˇ›iSA/ĪŠ8 ‚ŲČíĶĶ­\Æ3ĪëX­4íĻ!)7@Oĸb€rŒz(ÍhYęÚ}ԋ3Å,ŒĨÂĢp‘Û¨Ē!ąūsUŠn~`%0ōÂ2S?Qüú{ŅŦHÕR7(d•jđˤā€{qž}ĒŌ"FŠŠ€*€ė”NĒ›Ë%ŧŌ[†°ŨėŊH÷ŋ\U‹][Ģ‹‹qarģ„˜í W+‘ō‚I>œ=q˛@=FjíĄš6xĮv¨DRĢmÁė¨Īcš5m,ŒĶ(G•üĪ(ōžüdŸRk@įŸoŦZJI'•+d~€†+‚zrAĀÎM_Ü9ũ)ė+é`ũ˛ø˙ĶĮūŌŽļ>ĩĻĮõø?ķņ˙´Ŗ­~=jåĮbyz ämôJ hbkU%P•˜`āc5ŲQéU¸ėL ĨšÉ˙g_“ͨöŲhūÎŋ-ë°Ž¯Ԍ{UĒĶ'ØÃąĘ CŒÚûú´}‡PŨ˛ûúĩÕâŽ=(öōc“:~Ŗ“ūˆŋ÷øSF¨Å”xĪüöúW]´QŠ=´…ėbrGOԇKDĪũwáN:ˆÆm˙žÃü+ĢĮĩĨí§Ü~Æ9ĸK­ZZĨ­Ö•Ž%Ú˛EvŦXᏠcķ5ĢöÛŽú{˙ßä˙ŊŠ1íY"‰ģģ#‹úųŠū4 Ģ ?äãūÚ§øÕŪ”ŊE0(ËŦĮƒßÔ˙Ēī{-ôS5‰ōĸVe_9sŧņžŊ†īŖ[&“Ō€(}˛čĖ=žžrmģ˙ {ßåĢäbô  ?kģ˙ {ßä˙¯rōÜDŅÍĨ‰cn¨ōĄ­n1FĨŸ´‡S‚ņåxæ{}ģR¸éķ1cœđzc¯zž.Ž€ ē~?į˛Ö†)hͰĸîísū€zįũrŅöËÁĮØ?ō2։Ō(ē‡Û/:}ƒ˙#-kŧĮüxûūĩ{cžihĩŪgū<?ë¸˙ >×y˙>ún?¯ã’ž€Pûeîy°_ûū?ļ^cū<ũū˜æ–€P7—Ÿô÷ü…lŧ˙ŸüŽĩ|ŅNë°˙mŧ˙Ÿ˙փ{yŸųœ×eĢøãĨ…+ŽĀg›ËÜČ<˙ßåĒ)ö‘ĒK9ą´Ą|õČÁlœzū•ŊšnÕŨœ žø§uØV1%ˇOqŖĮ,ąnōÚIíĪ\fŦ­Åā˙—ßYÅiņŠ1EÂÆyģŊëö˙‡øQöģîŸaOûū?¯û )Škží`Ÿ÷˙˙ą¤ûUņ<Ø'ũ˙˙ëV†ŖËw|>Ÿ÷ü…;íWŊėWū˙đĢô” ÅēŠōb˛GfąÜĻ6KįŸPpĀG=ęØģŋØģŦbŨŽ@ŸŒ˙ß5|Ņ@>Õ}Î,Ŗ˙ŋ˙ũFŌßąčq€?éˇ˙Z´čĒNÂ2ˇ_ŽEšß˙ūĩUš´¸¸ÛžÁršÁKĻBsÔČöŽ‚õŖ˜\§/kĨ^A¨Ŋߨ`bOĩČBuË`Ž2sŽAZ[õ,qgo˙ ˙ÄVĩ&)Ü9Lú™?ņįoúøoū"‚Ú‘?ņåo˙-˙ÄVšČŠģTs˛i’M#I&“dKũņįļũáŗ øæčåĸeūČą;†2e%‡ŅļfēJ(¸YZ=…ͧž×,Ĩ¤—xũæōÅ^NŅũĶÚĩąIŠ\ĐÆ‹tQEPQHŠ(¤IERŅEĩ%PīEPwĨQ@zP:QEõĨĸŠJ; ( ¤ĸŠCEP?†Š) J(ĸ KEĀiëGz(¤QE†Š(ĻÅQHƒEĀ;ĐhĸzR (Ļ÷Ĩ=hĸ(õĸŠ(äQE J( ŌŠ( ´QLG˙Ųleptonica-1.86.0/prog/comap.068.jpg000066400000000000000000000733321506303110300166500ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀĒÍ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷?z3M/Åc7‰,ÕŨDWmĩŠî[w#ƒJJ-ė'$ˇ6ŗFxŦ_øIlX¯đOđ¤%ąūåįūI˙ÄĶä}‰įslҜV7ü$–<|ˇø 'øR˙ÂG`Hē˙ĀY?øš9%Ø9×scuV1ņ&ësøÚÉ˙ÄŅ˙ &Éß>?ëÚOū&—+x÷6ŗÅíX˙đ’i¸æIGÖŌøHôž÷úŖéG$ģ™9¤Ī5ޔȿ“Ĩ1 UO$'ũķM1ĮĐÅܸü=Š@ČÆ=čžT]áŒũPSZÚ܎m ˙ŋ`æĨĮsúQõ_ėV`sgnOũqSũ)~ÃeŸøķļúy+Snš8éŠQœäôöĸČD?a˛Á?bļįū™/øVOˆa´´ŅŽ.#†Î/,nfxÔŊĀ8āžÆˇŨĮBk–Ö.äŸÄkjÃËŅ—U*NđØųŗĐck uëDģŗļēąkFšŅ'1Ÿ%eX€0Î2ŲČįįŊw>‰ Ļ—oĖPĪ:ŽdwrXœžŨŗÂąŦífŊņ-¨9Z!ūn¤åTcš={tŽÃ8”cÔS—b°Ķėú›H=°‚—û:˟øõ‹öjČäqŌ ­,ˆæeCafŋōė™>•‡â$Ųökk(•›Ėg˛QĮ œįôޘũÜb°u´-ķÎč_?ƒ/øÔJ(¸;™ĐMqglNĀ耺žWs˙Ü?,VžˇjE‚ŨZ\OÆčF.$Úāœ`ŒûƒYÎÂ8$—åRy8č*Íã~ëO˛WĖQ[¤„įĸįō'ëôĨĘļŨ÷+ksÉ-“ŲßOl÷†Ųö™PÅ~bÛ°  Ũ{úŅm$¯ˇÚ¯9žŲ!Î3œķŸZd†;|ŊĮ—<#ĘÚĐģy‘¯Ũ#oq’2:ÕUÕÍDšÎP˛6ØÚ0͑ęA¯ĶöĘI^å]ėjy—ĮŨØ×R!’äŽ//z˙ĪܟãFF1úRŧÉô̞3$2Ü1|9˙Ÿš?Ɓqv9•đ÷Oū4ÜöσōƒũirG°]“ģÜČBøÛÃRũļ˙ođ˙ļäÔ#¸Į4ŧíô§Ęƒ™÷&ēˆËžĩĮZĮ´cž+°qĪ­qö¤}–.ß-iGsÛ"nū´ƒ‚qœRœb“é]8ār:QßĻ>”99Ŗ<āķ@ sÎ)qÎ×ß™ã8)<€p;×5qã=>+Š-`ŠYįÚ7„ AšéĪéīFŖ¤ØÚ@ú†§Ēę čÁÄŋh Ģg€Šŧ ôĀ×) ¯Ûĩ(ėtz$¸š2nž…‘€ÛÆ€’}NON1œÚĶczpLęn|TÁbŠÚ[/´ŊēĖĨ÷‘)líHׂsĀÉ sõĪęS^xækÆĩEļm‹ˆ9‡÷ƒ{d¨Uˆ’Ė āuŽŋÂz}Ž™{&§{o¨[^\F¨RvŨh~éã€zcšč5–ˆI#Ecku,q %ķ‰`PƒŽY˜dv&ąsžĻą‚GĻ[xŠâÆŲ"†[;)šļ’9•˙u†$`†Į'8ôŠ4 YģÖîdģ{{ilÛīˆ‰ũãŠfsŒeŗœöéÖŊÅįMÁˆÉÖ5Ú0ÃĶęUÜK™– –§›MŖZ\$×ļ6â´bĖČY§f`wŖæÁôĀ­{;[XÜN‹šâœА3\Äeäši..…ÅÁ ˇ : Ä×^T+ŽäųŽĚ:éWUĩŒ$qáŽ0ĒåP§×9ëØgØTJû• lnhŽU™IÁ’Fz§Ÿũ ēņ8í\\3I˛ ÷D—1aÎ*0Ã>Fk§Ķĩ85(‰‹*ęxÛĒį8ö#ƒ‚*Ķ"jĖŊhČé@>˙Ĩ.OÔU7\ŧ×Fūīí8a!‹žOãøbēƒÔä× –ÃNąŖJcŽ0L †eãF ˙úĒeŊ ‡˛#ŠGų•ÁR3ÛÔöņŊã=Ŧ¯ēébŨmpŨHų\ŽŖ$~~ĩxŽ*kI-VÎWû¤˛dq†aúņøŠÃc;Ũ]6HĩÔö4Ŗ$ãúSË=’XųōdúüƝ’8ëíMjãžūô€öÍ!'÷ąÖœsÛŋĩĮ~Ôq×ךĮįAųrs׎h§ƒƒ“M8įœSšíA—'ņĸãH# {⌜tãØSĀĪ\sڐuŒb€°ĐFÜtöÍ8Æ3IåH=}i `ƒÉõ =i¤ īNÚGL‘M>Øuö ˇ€ 4įü )mŲįŠ7 ŧžŨ¨Ŧ8æšqôĨûŲȍ5Ļ3é@WŽOáQ°Āįĩ<äã4ĶÜõ ‘ΎzaČ<Ž´ãÜ^4’q× ŸÁC }žģĶŋû5Ö×%āĄ†ŋ8Įī˙AްžkЧÄÎē ,7Ŋr‡6P¸Ŋ~•מŊ+Žŗė0cūyŽ?*ēŗ:Ũ ÉëČ¤æŒōr84gåÆ?]8îx¤ä{R~tŊúh ~9ĒO¨#jk§ZD×WƒHА°Šū'`ßË5Jų/5ÕģŌ4û„ļŊ„Ģģ,›ŋwÎ3Ķ‘ŒsŽõĩa¤ßČö÷3ÁvÜZ*!(Á~fÜHãĮŋzÂĨ[ijt¯Ģ1/´ŪsÅVŋžŽÆ%wŲØ*F¤e˙Ģ4ösƒĀĄ‘Yy¨=*Ĩô7čĖĄ’D ôÄķwVG ŒûbĩŋˇtĪųū}™Ā#đ<Õ WO‹Y†u{2.­1– čzcąũscpņ‡ųčTö>†„ŪČ|ĢsŦIeŨŦ¨zlƒ\Ūˇ3Eâ hš9›íäD27)%ŗß8 ĄĒ†TšÖcm(lŗÆXwˇįšŅ‹Xš?,^Z­Į–ĮFFᜌíĮĄė  ´*Fé,+"įkGۜ‹i cŖzqüC‘úSŨÃSC%”Ë%ŦûØ(ÚF:Lž„qQäŒgÎ„î6i_YIw<7–iÉŖŨ#Ú§€Tôäã#ōŦy@uO˛——aIÖFg<„RvŽ„ƒŸÖ­éĸHī㴎B-åæDĮ+ŒĄäp8ëÅFmÚĘCg. Fƒ?‰{ĐņCė$5ž=ĀĢ´ÉŸ-äP#ī+Üu÷ŸŸ—ĐÖ]ĶŊļĄÆ'’ …nîHŽ3VėįkˆŲäĩ’OËŊČõâšvŅ”Ņkšį"”pŧĶKF(hĮ<€iˆ7‘ÛŠdƒÚ“pÎ1ŠqëÔCJãņČųA÷Ļg ~t õœØ?¨ <ž8y ô<ãœqIŒŠ8ÁúuĻãOŌšÃ âžzÆ)3Čįô ,E´qĶžôŊ”ķ’ØcÖ˜ĘxÁéÔzŌ¸Ŧ4“žŧĶIg94âHíŸjc`dž? `!äœĶŽŖž=)Ø ‘ÔS2HÂūtoéŠiõÆyāSˆįŠaëíHĢÁ|Įzé°˙ĐuFšoķ įōÜč ]Q5ĮSâgm?…¯Ō¸Û.,-ķÚ$ãđŽÅÎ y$~ ÖĄŽ˙ŗ-íáDäÉ>X ķõũá€$ãčéÍEęMH9lv$úšŽ÷ÖË<6æaæÎ ˆ($>98 bš‹›?ÃorÍqxgŽį`ōĸSĄļđûĒFÉ$•ąŖx[qaus~ņ\DÍ$Ša2 ā'\ š<Īĩhę¤ėf¨žĻĢģî1C—3“xôÉ8 ŸÂąB×uÍnęSq>•ežK •Ü\íä2ũŨŧā¤gd×qg§YéЈlāŽ%)Ú98é“ÔŸsL:†ö?eˇšáWh\BÄgđÍbęIîmIÚ6‡cáKGÛ<˛4’ԐĖY‰ḿ“É=rkNÖyšōávČÃdq–Ī–žūįŠúÚ ļ+wĒIt¨â4cjCd“€zp@'ŋ•Ļ'Š‹ÜŅ!@Ā>´t ŸĘ“4 vxĮjMŪãķŦ}[ÄēfŒö›€ŌU0Äwɖ|ŖœVtž$†ęŅí¯m&˛‘ĨŽ2%ÁpĐäž´XNKcwLÃA$ã“4ō>ãüK¸…?MĄqíW9¤@pĩ) dSĪŧ4Ō,q ,ĖĮ^hĄ}ŠÂ0Íå†āėĪ˟ÃŅøÉŲ§°€ˇî˜Hå ➔Á>¸ÉŽuˇÛwÁ##5ŅJ.×9ęŊl8œŒh$ sīTėn%šŧÅUu8`:9Į ÎGáV‡¯ÖļLČIz•oē߁„VΏĒĩژ.SĘš‹å9aûßö—§š9õ¤QœŒb€QÍ;“b1nĸäÜ`JũŅĶ>Ŋ:ãđŠ[Œg=8â€NĶŽ™Ē×ö–Ę~Ņuxá˜gdņFˆ,ËöfÖm>ԁĻČę@ÂãņŨúSõ DēÅÁo—Ę Ŗŗ˙~•‡ŽŌGŧÔfS 0ÆĒ}â‡æÉĄöëųÔlīq,×2!W•˛õPü‡>õ)ÜVÔeÕē]ÄđŋŨlgÜéSwgF@ũiNä}ęŊ $sڂŖ:ûŌsÔōiyĖdœ÷ŪTôöëéW9ÎĸDvfY/ĻōÚîč+<ˆ€ĀQŒđŋsSÜO0“s$qŖš‘€žįևdˇK)UČUUO`īĮJēē_Ä´„?v%‚§ûă÷ž=ëyMGCž0rw-h;ƑX˛ ŪQc’cÉۓߌ~­/|ÔvöņÛ@D¸Ž5 Ŗ9âŸ×Šå:֊Į'â÷ˆÜX e3míČÎ͎ú\áûŧŽžõ5ũ×Û5kËĸO.2FÅā }sųÔ9ä‚rkޚ´NjŽė§§ØFu;¨î•' ÛIŪ)3Čvã§XŖs?Ønņ›`$õ™,@SųŌLÔĶu[{;qiy8FŒí‹p?2c#žøä~E¤ûUÜ÷C~ŲíÜĨNŅ…G4ü`uQž8*ĢČjāqœŸaJî1Ū”gw ’2{Qq€o”ŠpĪ_­Į8õ ~¤u ‰ÚúQ÷[¯´ŖæŠCĩ—Ÿ­Bä1×ļhĀ ž(Ü  dP@eŊ ÁBëHˇģœHĖÁÁ7N öGLtĢøl’2GsJqģ’"†Ž!'hˇrˆXÉĩ0ĀõÉÆyõÎjQĶ⎙#Ÿ Ĩƒ’IâŸBl'U>üPĒz­.U[§ëIķdÔÄ/įJ`9¤ņFā^´Ŋ 2:Ķ |ÃõÅ8žsHv†Î)…îäzg֝ƒÁĮáMoģĪ_CJ[rŒqíI zį×­#94¤v-QˇËęIÉŁÎīB°*1Î{šCî=é;ķĐņš6?=BŽ)šäaN)O<}3Ō‚qÛķ c1ŽG>ÔŌXp>ĻžĮĶרĻd~”ŒØ4Æ\ã˙­R0uúSõĻ%~ŧŌŒgķ§ũE& ;ŌĢđN~Åvq‚nū€•Ô s~ Pļ8Č&áŋôސõŽ*šÉ‘Ų$˙Vįũ“Ttą&ČĶŧúĢŗœE!˙d˙*įî5Û] Bą’ā<ŽđĒà CsĘÁ3ĩGsĮëPŅhŪ'ëT¯ŽmV -Ž%ĨŒ¨AË6xāwĢČ^‘ŅŖ%C27UãĄúU[&sŨ UŠ6ūøRI?BOJC-[yĸŌ?‰|ĩķ?ŪĮ?­??CG_˙]!ä‘M (ëí§i71ĒŧŅĄ#‡sŽ9äâšÆˇžÕ.c¸ÕŪ0ą2ns×%Ôfh|…|ÄF=s×ôÉü+Ģ´Ēͧd:POVgiú–<ˇÆdē˜†yĨ;œ¸āöė8洇Đ)ŨM`tŽÎxéšæŽũę­úÜ5Ā´p—3å:68¤uęŠ!ũīÚ°3ČÆ=ˆ?­BØ 2yĪ­5s–fffbYŲÎXˇ|ûŌãŽĸģ"­r=ÉlIÕ Lgģ Õqū;jĖ÷ڕ‹$M÷|ų1…D@HĀÆ '\<öI  ¯ ̐ޘƃÔr0GøJŌۚŨŒ_žŠØ .¸ŨŽ ņvžŖđ§Ô†iiú„„E‘‡›Ë$yųûÖĖmĨv˛`ČÎ\7vC÷.Ÿ…Qą# wÜȍ$yËÉ=G= YH˜HŌË3Ë;ā3šë×€rzQŽ€•‡úJChû@“fĖîį#úŌ›‚ĮƒĪjCČ ų⨥ãhnyĪ­ĀĀÍpr¤ÁëéH ā( ‘ííÅ4’ŧ ĐTNÔĀvyĪįJJîįŸĨ4sŒdņÍ(ä(WĶųŌ ôÉõâ‚ÜŒwĻüŨûņšx=9ĪáFA\Ÿņ¤ @Æ8ühā~_Lš;gô4d“ׯ4ö#ü(ŲQĪãÅ!õô3H ü)ę:ús@éÉuķ¤Ž{âœxʘ Á>—=;qM ˙*|ņEȰã÷xāR`Û"œcÂ“qüče!w zŌ!ŒpyéŪ”qĮ)°zq@1āw4„ßĩ/=zÍ&8Ļ!Œ1ƒšiäã={T­Œb˜y€ž(B°œCøĶwņŌ…’OŊ'N1õ44yĮN(.Č"š į…4ŋthcX§ųÔo€NFEKÉÔmŽšô€i'žÔĖüŲ}§dŒābŒō§š¤[āÎtëŸúųoũ+¤5Îø8cL˜úÜ?ōZčĢŽ{ŗ˛ $ŧ;m&˙ŽmüĢ‚IŽĄ—FŋžnDN‘EōŅ—°IÉIwŒwî¯ãÎsßËcúWáũJ;ŸIĨÉmŠ„l$āėl‚ĀĄCŸaI|,NîHę ļPoĩŨÆ$VĪ‘ŠD8ÁÆ:œgž™Åi…ĀĀ“¨č ^Õ&ĸp9īUīEÃYL-J‰Ę…Ž0j~9¤=)‰œĩĄŒÚDą†PŠkŠV\„õ8Æj…Øk g]ēÉ7ʨ­ž‘ō v9˙Ā….Ļúļ—ëÛ4g! #ą¸>ĩ× ]%Ôâ”lŲŖkŗë6˧—o™dbØ#*Ę  sÔ÷+ŖņëX¸†}2TE–;Ĩ™Úæ9—ŽĮw>Ŗ}og‘ŪšĻÛzTÕĸ;ŠéJx9=)ŖuAa“L=x§3ĒŠf “ĀŽ3Yņ#ßļĶ’Û;^áx/ęĐĩųzÕ(ļėL¤‘ŸĢKēåãÛ ĮæX 㠏Ä~yǤŸÎš#X×b€čJUÛˇž9ޏŽUc™ģąÅš<õīQÉo Ø m§ôįˇ˙ZœN´ėsÆyéÍPT Ģ€:cŠ\āä ņ֓ëŪ”œūT€ ÎsĪaH  ú1ÜÄ3@ œĻ3NĪËøúRuāûRsĪP=hķ~î{RgŽ(úûš;OZ`(?6;᜚͟įŠC×$g>Ô.IÆxÅ/täsJyPHāqAĪLúŌsП €ž œõ旞ŖâšžGN)ye SĐüņAĮB8=ŗJ1´įZ0q͌Đp?: *sÎ=i8 t§sÆÄ(ČÎ{Žô“ŽôŪ¸={ R2Ī_z@(ÉéÎhá[sJIũcH@ ž00Ü?ūŗIÁ?փĶ#¯Ō†ČAéõ cô”ė÷ÅFAö§‚:qœö Lsdū<Ōc*pF;ņKĮž:f›Ī¯nô۝8ĐÑÛéO œäJa?68?J7Gl~4‡Įæ‡ĨFG'ŗšūUĐÍsž $čėi¤įņŽŒ× ū&vE莛t}!ũÖ„­ā]-¯bT t勅Á`§hÎyūÔÖÖŠÆ•xx˙P˙ú Ē> øoM+ĶėŅįë´gõĨĐksLôRdgŽ)9=ęĻĨ§Ü]É퐐šÆãĐîNãHļĖ۟YYÜÜÛÜAx%…€Û /˜u؟ČāJĀÕĩ=o[ļŠ>­,ũĨˇĘėt!O\r Č#ûõĢvōîžöé#[ˡ2KˇøFTĪp=ęá'ĄŽ˜Ņ]w9%Yô"ĩˇ[H(˸ęĪ#nf>Ŧ{šlVqAcöHCER FÄĄę*~ū•^öū>–eŠm F…ŽOAĮLûÖÖF:˜—MŖxšÆã7ÆÕ“a6ÃÎf 2CîōqČ=Ŋøė‰tĨmrŪg÷<§ŨŽĮÎ;g֚ۍvŌá*%™æŒČ‘Äŋ6Bxį˙UW˙„‰Õž™s¸21cŽx˙?ZÆpMÜÚ5$•ŦtŸđ—é&āÂä•Āf˛V'IĮ^˙B=i. 9Ņsųm/ū„kĸ'šįŧ1ŖcūšČņķ] ÷ŽüLë‡Â†jŋōŊ8Īú<Ÿú ĸÚííb†ڈ œ˙:n°ĮûûÚŪOũ×9upúģŗŨCjģUs~2Ä÷ÁÎÜ{~4FLr’Šģ:Ŗž{~Įx‡V7š”ze[‡Œ‡g(¯A|v\gä‘RIũĸ-ŪÖ+Âm™xŧz.îģOsÉū‘iš|z}°@Ė`7˛Œ}Ŋŋũ}ëHŌw1TՑaæD™Y„(ŧ’68Qéž2N~õZÆ ÛeÔ×Sŋ˜7,%ˆTÜÁĪ$Ā ˜ØĀ×ĸí“tÁvĖNҜđ:­YČīĐÖę:Ũ˜ßK!{ūĘ\ ũb{¨ŅŽŲg1 Q••Į9#'‘Īlä âĩoĩ šs›ĸ˜˙ÖČFėîëëNŌ.šâŪIZYŧÅfJ—4ß)J-.c›†ŌâŌų–ūh~Ô#XÕ"ETÛ×åã=I̧ƒVõ–šįQHa„rĖųÉsĐqčΎ™ä ’ IãáÔr¸R(ášAœž3šqKĪÔĶJ`!å0sÅį [ã4€Ž@98Į&€9éĨ&{ô€eO°ÆiŲ8É s“ž”äŠ@yŨßԜBŠĪë@9?­ ÁΝԗhĪqī@'œdzĐ!0dRžĮéIŽx€|‘éŠ`+ƒų ^N;æ˜:øÅ9rËĶĨh#,0qīšAˇœ})O#ŒP{ƒúR7´īNŸ4Áāž;Đä…ëÎh##ž´~֚¤žŧzĐģäō:Ķwq“ßōĨSŒäŌgģŋ!@žĸņĮ`i„|Äd~4•ēdzĐ˞;{SÔV\†?-!äûg×­9ŽåĮϐ|P 8=˙JL’Þ;q‚:Br8ũi’5ˆŨœqßĐ@āõ§ž8ö÷¨ÛÔqHb°ɤĮĘėŪĒëˇņ$ƒúV”åš•HÉėVÅZˇũxũÕŋļ.˙ˆĒ^j ÉlÛ+qVt8<ā‚:Ž+hԌ´F2§%Ģ?*ĪÖ¯…žŸûgĄĮ9=qîMh–9ė3ôŽ~ęōûökyDļVČ,qŸËgëDÛH)ĮšIažŲWČĪ’ŨWŒĻ~™5*Ë=´¯5—’ÎSiYsŽG#ęiŌĮɉv´l0U†sP˜'Ā´õYrãđ9ČŽ[ž‡cIĢ2EŒŌÍ&ų]‹9Æ2ztú`~ Í´˛Ü `”DÅvą)¸NãĻOįOx§aįĻw. ädā€{SΌ`¯p3BzÜvVą™fŽdš[‡vã"Ÿ•@'īĐįŸZ¸=>•VĸĩS& ģ˜;í’‡JŗHĪzęųUÎI-@āŽåJÖ$š@p;s@$õāÕėöĮęúįķ ũĀ3IĐōr ø{c?žØã ¤ŸéAādŒĐ1FAôüiAíšNŲéĶšÁÉ뚟LPpq×üiF\ķŌ“ĮœĐ€\ ŠLc¸úõĨęŧņøRĶ4 ÷&Œ‚:ũhįŽ( F0>”üĀvAî2&@ ™æŒn鞘Ŗ⑯(éœĐ0>¸õ Wĩ.8æĀUÉãpAö¤,KŒ3ëKВ;ĐG#ŠÚ¤ÉÚxį Ŗh+øį­PXcK‚)Ũ<įÔb€ŧ=sš Ã}ėQœž}h8Į֎ųS\?ã@į úæqü¨8į"Ā^NAŌcƒÆI8ĪéHF[š“ÁīÛ™¸ RqہøĶXíę(ā6H<Ԑ1É÷¤ę8úҎp6ķųšC÷1œ~ÔŖ…äķØbš¤ã$Íę&8´ĀsĀũ<õ=i‡Ž1Í14œqéQžėzcĩ<ŒŸoĨ!rrEš#mÄįĻ`–ādûԄdäÔÌs@Î㠝]ō˙č×­Ō3X~húî“˙F5nāžėí‡Â†ë#:%˙ũ{É˙ šŸ’x<įš‡Yņ%ŋôī'ū‚jā~ĩ%+ķIy/¤ģa/( |ÂT¯ĄņĀâˇvķQ:ã SM­¤ôgš_éW1^4š”`Ë!Æá÷vUõĮžøĒÆ6IVHÆÆÖČáĮŊz„°Į4M¨˛# 20Č#ÜVŖá;k¸] šK}Ýyúō??´U.­$féëĄĘÛ8¸ĩYXžĀįĄįŊI¸4xA‚ZsF •í_)ŒlĢĐqĮˇ÷ ož>U™ôõžĻÄ7¤[´`(ÛJޤ7ŽáJnne”GŗB[’Ō`¨ëíQũ’YdFēŸ%X:Į{ž{ûqÚ­åFŪ<Ōļ f@īlMĩĘâRü8Ŗ“Īsž?\*oĨ>æÚ+á!ÚÛ˛ŒTįíõ5TF-īL!™ĸtķ3–*AÁëØäcčkxTŲ3ÃĒ'$ÎIüiG\îâš0SģcûVÆ éųfƒčsŠ^ŋ7@}č‡ÉÅ$ņųŌ€Aüp}éáM)ųĪC@É8?­&xĮžiĀôĮJLœįßg€O\õĨ9>”ŖGŧ{S:œƜăÍbjŪ"ļą2ÛÁž{Å\2ąĀfč;wÍē8ÜŌ\%đŧŌ4¤¸|Ĝ`ôëÚĸ:xwˇ—íâ}Äŗ’Œtč? ˇgŽ5Ũģj…ū”ã’Ø8Ļ1U!°I4–ÁzN‘Ë0éNųCŠ`4`{Õ Í%ũÁ“å*¨Ą@ūH9ú“ųUũĘŦxČĒ3ŖÅ¨ k,ęÁrsųJ¨4¤›"Ļą&īÁãĩ Ž:ū4ƒÁõĻį œ]G(å`€9ĻîÃg¯ŌŒãéߚPO9 vžG§J@98īH¤Ū´™$O|u  9+Æ}E!<îįņĻ‚Iíļ€ŨW§Ō€ 鑊U?1Ā<Ķ~Å)$Č˙ëЀyÆOõĨĮĶG_č(¨ĮäiˆsÁÎëGۚ `xú柑ÁÅ*ädn˜Ęōy c=1ÍÅĪz^ƒ ãÔô āķĮi3ÉééF÷éī@1G¸úQŽš'>†ž>S× Ĩ9ÆyÅ0:cĨ/8éųŌj]Øäķę}(gåäôĻŧ‹nfU^¤ąÅs^&ņ•ž€(\Üēä(aĩGŠ5æēΉõMq˜\ÎVr!…ãI´ˇö6âqžĮĐ ,n ÕđÅ[iÎëŸzķ_x–IîI´• ° ed9,ßŨĪ âŗSÆsXéØiЈ÷D|ųd%Ĩ?yĪã\š'ņ¤åĻ‚Œ]îÎķÃ~=†ÂÎ ÛRÄģVHšüÁ¯@˛Ôm5+uš´fˆņ•?ĪŌŧ¨­M^ģĐoÖíē6âH‰áĮøû͌ûĮĒ=ȑÜŌ188Į¨hú՞ˇbˇ6˛dtd?yЊŋÁãņfcyÚíIœˇ>´ģp˜ ķסjÃvAĮ×)^qŽÔŪ@>ū´Ŧ3éžÂ€H' ŌOzkuãŠĀdʁ0p6ޕָCKāę’ÆģdP-ķÉœˇļxĮˇÖš‰7åžEŲËdņĮŊz–ŸÚévHǞG #čVĨĨ)FîäĮ“ëQ1ų…JÕ }ņ\įAŸĨôAūüŸúUŗÖĒiŸņčŋV˙К­šLvļŦČ"äcĒãõpŠëū%sįžŅ˙ šô Î5¨Á=xϜƒ@ “‘ũkÍuMZÉ5+÷YR8|ōƒ$¸ĀcūĐ?ÎŊ%†OŽ+Áf\\ĖįkĘe1Æ2NãŸÖĩ§7fD§Ęu6×öˇŦ7 #ŠÉPyüĒrIäqŠâŨSp$aģpTúƒÚĩlu—ÖŌ G>qˇâ˙ŌtmĒjßsvÖŽęQœí'ÔI"Ģ ][!]ÅwŒĻâqÎĄ4ŧÄQÔ|{ĸYF|™žĶ.Ũʑ ôÍp:įŒõMdFC÷\zõũÄVšíš+"ņ$$ō‡ü=ëÄfËPēĶnŜÍ crúUBDĘ7=;Mņõ•æŖ5ŊĘ}™|ģŋ“ŽxãÖŖņ'l­´ų"Ķ.–[ĮĘ€‰Íycē’O'4‘Oœ\ˆÔĶüIĒi×BhŽå~~d‘‹+}AŽūÃâ™wuŧ‘Ë| ī ūuå~ØŖ­%&†âtÔuKm:ÆyŪxƒEuFp 8ȍeč>1Ķõ[XÄķĮ× ņŋ˖?Ũö¯ witŒYŊXæģ¯„+m?!ˇšŗ‚ád‰ŲLĢģËeƒŲ⛝ļ§}uđ†—m5Ģß\[+ĘŗŸ!¤  0BŸēy<õ#ą]aĒ g)˜]Z\YĮ?ˇpÁŠF“UUōĖŽŲĀ”HT}Jcô×$›nįBVV.‰žøúU6m]‰r¨ 7!o|œã͝j–˜î@d<¯§†CčGcHW*éD6zŽSVÍRŅņũ›û‚Žž´7[´™”1RÅ2õqUã–k Ųāō¯.‘öȍØ=n$8}ãV5s˙ķž3,_ú1h:­’<āP}éŠOĢâh¸‡[ęvwm˛ˆÚNv[ āŒzŽū”ûģČ,­žâædŠgs€*+¨ážąuY+RU9Ø{0> ķ^[âŋĮ¯Ü[Ã&;@ÛČcČN7)î0ŧsWs2e.UscUø‰+LcŌmPÄ3ûë~ĸŽßZáQ6ÄŒ×Í;<9ÁÁÅ#gķ‚9ŽØÁEhs99n&Ü `œŌĄ[Aŧ+``F9ėj€Ž5kfÚFƒ#åņ¸zcņ­;}rXĸ } €Ģƒ"ÉĀ8î1ÜÖŗ÷eF‹Z‚=ÚÆøæ‘ŽJmcōN5ķÕz?Áß^iž+‹HRdŗÔ „ũĮ Haų`ÔÉ]Šôœ'÷ N=ę˛Lč1ËéS Ž?*ÄŅĻ# õÖ}Ũ„sÉæ(Ü(ų&Q†R:sÜ{*û0įōĒîI#ķH“?Cķ?ąlüāS  lsWÍTŌGüK-Os ~•lņLc5• §d ­, Š2-[X‘bĸ¨ūč[W?čIŸųøƒ˙FĨKqtļƊÉ+œ$kՏôš¤#–ņ–›sũvm'e„Č˛Ë Œex ÎGČúט•?/Įn+ÛNŸ5Ęws0wûÉ áîŖŒū=~+Yđ-•Ô{ŦmdU #Ā~ßô­¨ÔPŅŖ9ÁËTy‰Â–žĻ“i+Ž8įŠŋ}¤ŨØj2Ų<`Í:t#Čü*;}:îōgKxžVQ¸ŦjXãđÍusÆ×š‡+)sˇ-ڂŧäį'–ëö†HЌ’čxøāJˆ)ÛķUu¸ŦĐt“hÅ"¯7RœāäŅŅōHÁÎhÍ÷@ú攀î9¤îBããŠŨ'Û4yĒIĘãõĨĸÍڛ65˜ČäÆnęzŠÎÜr1Œk"’2HläpA¤ĐĶ:’~^¸>´dÉÍs0Ī,ĨÃK3„9}ÎNGCĮOzÜĩÔmo ßį_áq†Æzū5;;1–ÆyįëNöĀ= '$“ŠAĀĮ\ZC$Īč§œäc4›‚Šf!@9íQ,ņ¯qíŠĨ.ä¸v=­™2X€É'ŠŦڅšÅ4íuŽy­ŧŸ_JķOøáĩ.+KD–Üš&qģ¨čé\”sÍRĒēĮ.7¨lĮLúĐä(ļ{ĩŽŠc¨‰ ĖsÎ×(sķŠšAƒdXõÃ(?Ĩx~™­_čÎīcpcߍˌĢcÔUŊGÅZĻĨuorg0Ë f0ВšÉäū<~Tųrģ›~>ŌtÍ0Zĩ¤+Ķ;´˜rxãˇnMq,ķËs)’y^YVvɨë7fî‹K¸Z:Ņ‚h8†ķF>læ“>”¸ Œ)Aė(¤ĪĨqKI“GM/CíH:◁ôŖ¯JNsĪëJAĮ˙^“ëEĀCô ō(č(jH#3N‘.2ėp2N*jwŠŦėĖ?žšC-˨!鎸QØ“LÕp-c?ôķūŽJ珯1HBc?Jn3O"ƒL ($ķ6/™ģņÎ=3L(ĒŀSÜՂ3Æj&S˝ãōõč¤P1q'ˎŠX‘úk•ģŗ6!^%TžĒs<ņüĢģņ=¯Ųõˇ“ĒŨF$= €¤~[Oį\~š k&APåBƒÔ‘×đūfģ)ŋu3šZ6ŒŨܕqõŖ'iĪQ͉ @ö¤8 IīúÖ¤ÜÄ|Ø=iŧôíKÆÕ$’AÁŖČr—€ŧîëëI¸’ŒcĨåŨĐķž”âI ž„R<*Ā÷† ÕOĩ%sĶô„íÃcqĮAŪ‹t[Iŧ¸š2Cq´˜BãĢdžHéž+TcåõõŦŨ‚ģ˛3JîPrF8É'­h cŪŗEÁÆŌ{w¤‡ëKžA>š “ŸŠ  ņŽ1Xū&ÖÆƒĨ5ĀMķJūZ.q‚Aįô­ƒœWZá~$KØlâ28‘™P ô$˙ŸZ˛ĩąÎxSÄØwĶ}¤ģÚʤē¯'cũ+âH帖D]¨ÎJŠ9 ųÍĮzĘúXR}ņ¤É=(<hsž éÍôŖš¨ÁĻįŒb—“@ 0:Ņ“Ú“Ĩŗ@ Žôgž(īĪ4™ äš0擓KŠ3ÎE'CŌŽM(éÍAF=čÅ.8Ŗ™įŠ4lņŠLҁžhŠ\õ¤ÁĮZLäԜĐ3KŽ”‡@sŒŅĀĨÁ"ŊĀ_ ī”9–( ŠAßÚŧĶĮšEīÛdÕ$xŪÔí<§ļ>š5é$üŖžx<ÖnģŖĮ­é­fō´y`á€ÎĨ%t Ųž'×ĩW[âodY ģY^hÃb@ËʎĮé\—j†­ĄĸažN(ÁĪZ9'Š1Īz@¸į'Ĩ&GJ;P‘š94p(ī@ŒâŒ œŌgŌ€ŋ4qš9îh8˜ “š1Ižx O&/9öŖŽ”d‘Å0˜Ŗ¤RČҚRI(6ŠL OZSŒPېķŌ—#ÜPzŅÆ)@8搜ˇĻ_:ū;Ŗkɏ;cœnLã‚G|uÅ}Cā-rOø:ÃPĸiŲJJ"@ŠŦ¤Œcˇ¯”ķé]ˇÃß\ø>üÁ>éṫhûĄéŊ}ũGzRWEBVw>žwJ§5päV}ŧęÁ&•Œ† QZ9ČöŦ´†6i„SɨÍ"¯/ĩX5Vs„ž 4 ŠĨø”Ú×˙ôVZ­Ĩ`iVŋõÅ?ôVOZCDZÔžMĨŧ…ŋŌā^OúÅŠ ”že“y2õØI1ˇ¨+Đ}G4j\ĨˇŊĖÎŽ¨ųE+§ũ đ°ûmŋ­Ā>ôĪšãˆÅK=äá|×ųŸîĸ‚Ėß@959Œx ÔZ[ZäÛÛÃx>ZĪåL×Pˇy<ȎĮ %‰ãÉô€ÉŠØņëMžî"1JĄā}š­aj2\ØŲKc™&ûA0ÛLÎ L¯;ēcžsĀëM&&ėQ ŧ›X¸’ÖÉæĶŅCÆĘŽFAÎvņ˙ÖĒÖļâÚŨbÂnÉfÛĐą$ąüI5t Xöƨ‚ĄÆÁޏÁDäsrˇ}++\Ô¯4ë`ÖļžgĘKJŲÛ=@úû ÕÆ:öôĻžÁ ŲŽAŪŠˆķ ã6Ģ0}Bf› PĒ=‡¨ĨđŊœiâ%ŗģA,SŦŒŦ[ī´€}ĀVúäÔŗ´77sKkKw“1 _áā ~¸÷ĢVēFĨ%ęX§†t ų…vwG‰rŊËMėwņĒD#ETQ…Uzb÷rIĀŽ&”›ļ‚Q/ąIz~É–Ünh§hąƒœŸŋáVŗĀČÍ(ÎáŒâŽœũ(ąBƒ–Á$Hž™'ž(•ãéŌžųëīLįÅ)āŒÃ4c$‚Ø÷¤ܐ)ˆ\6Ō9ëĮmäš<įŪģŸNüö  Ũv{{méîŅŪŨ“dŠ‹–ÃqũkÅdDYQ‹(bãŽ+Üîîc‚% †f!B9ÉúÕũÂf$ˇØÛ=ĖŌ (cĮ@šj‰+Ŋ¤ĸ<đ—Ã[­KĘžÕÃAfF勪Č=ũëZZ¯ÂB×ņ>™w‹Faæ,Į,ƒ<ãŠõmŖ€? iį…W"#ÚģžãoGáX-'‚åæŽwdmęRGķŠãq“^šņsS´]6ĶL^čĘ&+Ũ3øįô¯#ÆMg%fkÚģ•ãŪ?Đîtß]^IŦS; BNŪ{ŸSœãŪŽQ˛"3æv9š9äŌįŠJĖĐ8Í(ëÅĩÅæ”Z4cœĐĀŖSõĢöRą ¤Oĸŧ9¤IĨxkN°xRCĢ"žđ§¸Éë] ŽÔöÎxE5+_ éĐjlīs {œa™A;Iģqī]C(+Ōš%šĐÆ“Qšs7Xą$“ÔŸR}zÔ×sJu„Ú´2=ŋĖrĨXĢu$ãæî9ĢnjUŽr֓r°Ō;qQ˛ T˜Ééõ ķ‘ŠØÉ€āņKž=yÅ<Ą9ŸzEĸŦzUŒ7-s˛ ŗģw<aĐ~h‚zjwŨ$ĶNHĀcŽíīú׎´yÜ `z×ĩiZŊî™e1+Ī剟ž:ãÖēqPQIGc–ŒÜ›rw.%ŲFXî—Éđ­œŖŸcëėp~ĩÉ|E×4;]};P˙Hš•wEnŒCėÄ˙:×få$Œ‡ ČÐFAá>8‰ĩrâHˇ¨ļ&$‰Û,Ę ųžœņė+’Ōz#ĸ6NīDq`ãŽôŧž´‚8ŠVÚâNR=0†°Qodu6–ä zõĨ8Į¯ÛéS.žVûšŠ,/l• ˇĄĒ•9Å]ĻLjBNÉęF3KƒJ§Ĩ'8¨,? ĨĮ4 ~™>™¤æē_ iˇņÉ=ÎNĮ 8Iöމ´=6De6‰‚:‚Eirjč—4Œ? iVˇV’ŨN‹#(†@āũy­gđ֗!ßä“Ņ\âŽŲiÖö /ŲĐ ‚W< }jڌ’Mj ’ŗ2”Ũôd0ÃĩĒÁEā ‘A#ëJ1Hr =ŊęėNėFqÅwž đš\*ęē„{Ą<ÛÄÆ˙húAøúW?§øGUÕ$(4IŽd•J¨ĪŋÃ5ėÖéii ˛d¤(ąŠ>€`*į­Q5hŗHCĢ֜•ÚÄ=OZLãškO"šžĻÉØœāüЇž´ØäãaëëN=3PjÆTĩ‹+Ÿh[ųē՟¨Ÿôŋúā˙ČŌ Oøõ‘Šj;aļŨĸú ‘‰Ŗ;Äh’ÚÚ¤ˆŽĻéNdpŦĨs‚Æ sqspŪloæŦę¤΍?Ôöâē?dÃg˙_#§ûXI ųšäMx<‡šōĐN{œvފjņØåĒũãA5‰'—ė7ķÚĀ Ŗ4ūg—æ.s´)īÆ8Á­™nŦtĢhÖI#‚"NÁëÜā~ĻšË=ëUĩs}:ZHĒ"š"Ë?o›¯Ļ9§Ūh7Öe_O_>E+‚Ά`:Ģn=1čzŠĘÉŊ 7)zîk]FTŸOš†æh†Š7˛gã~>ĩZ9X÷ÆÁ—8Č=ĮcīíUu8âŽŨ$Ô,ĨCRx(}CŠãđ9ĮjĩĨé¯nĘ}&EXųw°Ęš*N~›q9'’zšŅO“mQ›‡>ú1sĐԚŊ>•2lû;‰W0•ļļ}A†?K}&gŽe1ķÄqĶŨąœũ1W핉ö2šGcc;N=qUÃ,€•uuÎ R~bē%ŌŦPô8XâuĮęNIĨ¸Ķ­.dK€ëō°īj=ŗėh¨ÛŠÎ@éېķÔāUÍKH–(„öĶÜÉå¸cå;ô\ŸÔņĮ5H:1ნ4lŧzōkHÍ2%MĄOj:œqIŸN”qžyĢÜĖdc=ũëĪ.[ŖRÛXÕ-´ų´ë{–ŽÚS–9%€Æ ‚zíTDyfi$ws՝Ë֚'W+ĩ”ØõŠ üŲ&ˆĶ‚ÕY SŦŲÛÛ+´‚$ķ=qÍIš™AŖjąĄXĀ ŅE-R%ļ÷R@bj ģ8nU<ĀrA§ ˏ&”(ÛÉéJj2\˛Õ2qwLãÎTāŽG™9­mGNHĄ{ˆŲ˜īÉ ˛ŽHé_?V”ŠK–HöéTU#tŠmíĖ÷ ‘ķžƒÖŖ‰ žÃÖēkK­í‚đYžų#įĩi† ëJ×ĐĪYR›6´M2+umŋ;ސ}kBČgšD‰˛ņļÆéūq\Ä7ËđÚÜ2H7ĖĶ>”Ļ5dŊŒpJí†RÛmŽW]+]i<ĶH ƒY:dW2ȲŊĖídfã<‚­l¤O+"*–vl^r}+ûŽÍėmuq1–PĢš‰Āu>•Ĩ ŲÍw¯éņÅ™ū“¸ *°cŸl^āī Ļd——ņfíÛĖHÜÜq€1ž¸į§ÔYé–ļ+ ´ˇHŧÆŪûS\˛­ŅÆžĖ›Ĩ'COÚ@ä~”Ü×:4Ķ äT•q@`ī8Š\ÁÜPËS’zâĖŒ1ú–hļŧãæäû ĄŠļtëÂØ@üĀM[i1ōŠã×™Ēãû*õ‡Qœ˙ĀM+6ĨčqåŒ8ūTâi â!Jx4™Fwˆ?ÕØ˙×ĪūĶzÃÔŪâ;RaŒJ§+$a°J‘ŒŽLįŽ}+kÄrÄgū^ö›×/yu{mu#~ō(Yđ˛™Ëåõ8tęÕŧ¸ÎY¯}ū’æęl‹›…‚%Å!-ægp{•.zķÅu˜ã ŽÃv¯å›ëĢiŖŧ‘v–v]Ŧ™Ęí HãŽO>õĐįŠĘ[›Ga01Š1œgōĨ”ŋZ’€ŒŌb–ĶہíL<Ԛc’Đ4!â˛5=ŽŽ#–9V9S*Ŕ°*yÆäuú֘”œä`ûT'“ÖšvÔ|ŊÎnvû4†;’ąžNEp;Ãˇo֔†^+ŖuVAR25Kû&×ęū‡'ķĢöȏ`Ī/ņâI¨Ū[Em’}™_|ƒ$‘Āõ#üƒ\|ÖĶÛŦo$ECôĪåČíĐõ¯ŖÄ1ōü¤ØŖh]ŧéXž$đÅžš¤‹DT†HŽčŠ˙g§×M w%Ŗ%Ą…\'5Úzž äÅ Ŗ8­ItY!•Ō_•ãbŽĨú08#§¨Ēw6RÁ÷rЎ;‡=úđ¯IbiĘÖw8] ­Y¯¤x™lā‚ÎųJÆĢĩeAžĒ˙Q]tRĮ,*ņļôuHčA¯+o0„vBxČäŨŌ5ķ¤)âyāc•Úü§¨í˙׎Z¸{ëzuēHô­ú%Aa$ĄeR|•c˧^>œ ąô¯—Sŋ¸ŋK֙’h›t tžƒúú×°húˆÕ4‹[ŨĄLą‚Ę@aÁžk”]4Ž\j)ˇb˙lõ¤ÚpOĩ;ŽsČŖķâ˛4<#û˙Åū6Õ1ˆ€š“Ėv(S´Đ “Ä>]Ha3ŗ´ČX>A§Aí^§i§[iŪ.š™[kjnU'*ß0Įââj_čpkV‰æIåÉíŒN8Č'ˇAUIAKŪį6­î-žÖfŠNŖœƒÁ­Í%˜ééŅˆũjƯĨĢÍ,ą422n> āŠŽĘŪ[[fˆ2ˇĖOŨŽĘ%Nˇ2W‰…jĘĨ+=Éö4ĖK9 I\ũĒ@ąŠl“LXÜY‡'8ĒSĩH>ĩßuŽŦâ“č™™xXŒr?iĘâFn¸Å;v[hL)cĀô§Ŧ]ցĨŦHv)ÎsFü?Ę:ŠˆÂ‰UFå9ãŊÖb#~:ŽžüV5ķŨ=Ŋ´đ[Íį#‰ EÔ``ä78Į=ŗÍtŌŌ'%_ˆŨđ¨œhqI6Iķ$Jå„c įc[ší^}áīÚé,mžk™†;^ĄļŒ„ۜqĮŠŽō7(u9sXKsĸ/M wzƒNÎE3ŠÚH=3ÅICéJ ¤ČĮŊŠĒîYŊõĢI8Í4Ž=ÅNÅcôü}(Ī\1SĐg¯?Ĩ@zö÷ Ņ;ŽĮ…6p~´ø”09íN•p€įš}H˛ÎO4„ō8 õ'úĐzqցą ĻɸÄvëN(ę;Ķ2gˆŧsæāŗM¸´…ēî'$ŸĮ5Júšļŧs’jö-bÚ^9tČĐīŨļIŒ9ōž\‚ āžWzōMNÚ}:kģ;ČŧՍŠąĄ=1Čú×e*ˇĶąÍR™Îl;ØČŠO”/‘V.­>ĖņálíĀã­ĄxWP×&"ŪXqĖ„q^Ύ‡'4™åēRįåHÂų‰ĩoøg^Ô4fžŪŌÜ]E)Ü#g+ĩąÔČëôŦ­KOŸMŋžĘq‰!rĻģ·–atĢ›­Š^IĘĢq 3õ&Ŗ8û;îUž{N›|ē–ŸÚ&Á 9VęŦü5päqÍ1cX°¨Š ’p9'$ū|ĶųĮJōÎĶÎ> ßĘē͕ŧ2ËA S8 šOŨÄåˇļNOá\߃ü5?ŠüKi¤ÄūZJÄË)€e×r*“ŌâŗŊŒq^ŠđkÅ7Úēš<Öw3YęŽĸ0ƒũ[˙˜ëôŽūįĀ^͝´ųö7—já$V•%˜@=˙‡Žĩ×Účˇ^I¨™Ú׈1 "Ą]ÄŖ$õŦŨDĘå:*JÍڍą"ņf@w$SŽIäoÎ~‡gŊ\ļ¸vą\ !e@āŖ#5™D™íL'֜Ė5—;ļĄxöĖR8Fn$ŒŲ=ĮšīŒzĐüƒNŧôĻ5gÉĸYŽky—‘4GOš9Ũøæ ˛€Øę]Opg„É™Ÿ?u€āt Ų  ŗŽ2#žk/T$iw„˙ĪūU§p23ßŌ˛õ|&ķ'ūXˇōĒčKĐЏî~&ŠT'ãGJ–R2uīŊe˙]›Ÿûfՙ(†q%ĢŋĖWs*1 čxät5ŠŽ}û5Î?xĮ˙?ãYļ k,ŌĢÉ$’íŪō0$íįŪēŠ|'_ˆÍ[[MVú+–´†E Í!’'āž¤õ΍nhģėuXíįm“Äæ8 ¨U`AžŊØãĶéGl˙:dŅE<{%@ËÔdt>ŖĐÕ:iĢ;D’¤q4ŽBĸ‚YY0x‚ k›ymŖoš#āŽL‘÷+K•ŧ×L;î¸rzIČĢdģXÆ=k5GšŖŦú(P X:MÂŲŨ}‰¤" 0<+¨Ķc[ÛŊëšv6Œ”•Įuę)Íf^k0ÛČĐBsp1”C€šéšųûRGŽØ›I..&KaŦĖCũGĄhŗJås+ØŌ#8ĻŖR=ĒG~ôâŖŊ/ Ōú}h]ã9;FEE‚OÂŽƒL1ĢÄPUô+SG8#Ĩ\Øn´ß-@8ÉFT@.ĩpFč#-˙}8¯ø^ßZe™\Cp ‚á3ŧ{ôéŠŅ‘6kAæBšËĀûŲå˛}xéėOŌđäu˙ëЛZ•Ęšąį6? _[>Ą4/mnĖvFĖĩwö–pXÛ%ŊŦKH>U_JąÜŠ11ŠŠNRŅ’ –ĮĪúŽyâŲ-Ĩ…mgģēÉČ\œžOSé^™ é+Ŗéڀž`PĶ2C9$gˇąâ &Îu]EáVēļddqÆõū™üę!ŸŠŽĪnę¤ģ}ĮŠ{6üÃiON¸4c§z\ԉ*_A%ͲÄĸ6 ę$ 2 gæüq\4ģK+ˆnáĘOrįzr@÷$WĨė`žĩįßĸ|é¯ĐbQŸûæˇÃģUZ™UøÂPüž´å‘Z:>‰sŽ_%­ĸnâ=”zšôhžÁąIŧ`ÜnÁÎ?NJîĢ‹ĨIÚZŗ–žĨEt)ÚĖ€ž=ŠÛÄ×ē_øIš°–+xV)ŒeQđ1žÄņüĢƒÕžj6,2} .>Uũzū•4ąô§ņ>Rį„Šĩ8}Á_u¤É"ˇī|!ĢØZ ™mX(ë•e˙ЀŦ"͕ WT'ĢÅŖšP”>%aĒ›ÜiNĀž¸ ) I=i@Ub3œÕˇ2n4žTį NVę P¸#Ĩ4ŦZv‚ž{Չt›ģ{¨ZLŦ͌vžáÖŊ3Ā~°Õ4[mVüŗ4ŽYg€ŦG=šĮ§ã^Ē4Û3p. Ŧ&~Ōlŋ:ōĢæŒšb¯cŅŖ‚räĪ™æŅõ(d*lß;wg ŽžšÅs‡uojŋbĶmš[†;œôTËžÅ6°™<ÃoÆŨÛFq隧Ĩø{IҤ¸—N°‚ŲîtĻ%Æãũ°â¸kãdŽ­cކ4on§ü-øsĒxC[ÔĻÕbŗ•$X&B†ÉÎ܌ƒĪĩząPhéJ)Ž6îîtžmņCĀ?đ–ØÛŨAw ĩ՞FųÛc=rqÁČ­_đ¯„ôī xiHŗ fp×ã—Į''ĸž#Œ×SŠG3$E#ķcI’ÄĀé\wÅHéoĢi¤$ģ 8tëėFzQE؈tí.xD’ÛÃö–%˜…fNvŠėN=+HYŸaŋ‰’HõI$~įÄŦ¤{ۃīIk}p—"ŌúķFXĻ1€2?ˆp_JC4Y>ūĩ”t E#˒æ%F‘Į3*ŖcéÛ§ĩkd}*´ˇh„*fGūâr{ū]Zb3Ž4Ųde€ęŽ$å€ÂŽŧǃžGqúSíí-ôe+m ÅhÜēŽ~VĪ-īœōOLfŦ¤r,‹=ĈYPŽHÆv÷'žE/›íĮŊ;O´Ã(ÄRÆįũ–üõgBŪvŖqrå‚ĀMŧJqĶå,}y uė=é5ɤˇŗûLlĒ!ų‰Æp=ŊûcĻHĪûhcŠ,ŖJūaŪÍ/Ūb{ŸNÜP•ÁądHŲ~ĩCVSũ“tëīZ$íĪŌ¨j‡ū%ˇôÚëT-ËņŒ'âh"–?¸(5 ´dkŧMeūķ˙č5K"Žëx76|ŸųiÛØU>2:W]„â­ņācƒø>ÔŋJ@8Îĩ2'ƒôĨëԚ:Ō…îh“$o‹…O$._xųqīQ.k"f8ÎÃ×ʑ‚°÷Úpߍ-ŦļNËhō?œ^)‚7ۀîAˇN.Ĩ4w°Č-´u ø ,LjũyĀ öĪ'xŦŨö6QVÜKoąĀÍknĐ̝ĖŅ# ÃßE3PŽi,ŌCnīF™G#¯ž*K{H,ĶeŧKõ8ŸŠîiō)ßk´naqŲÔ7Ė3Į°Éü*ŨÔHZŊ ļé ĖņYŖ\@$YŽfgo•°=Č`§§ ējĮōÅsq9$EĢžHdĄĢ‘ĸGTEEŒ SÎ=ú×ڑLéÂ6ZJņL:—f?ŗyúį#ô§Ôēy6‡ũ¯5ŋ–ßëW1ŽhĸÃ)ũ–æS›‹×é÷`_,~g-úŠd°Ko;꒤C’Î#%G×oķÍ_ęyŦû+xešæyaîėĨ™A*Ũžœ`ū4˜ĘÖļw î÷WIjø!ˆ•ČĪĖHû€ņō€:vÉkėwôk×Ģ8ķGáČlū&´Í& ĸÂ9Ëš/ãØŌÂĖ-Ž×÷í´oFųxQ׆>ēķ[“×­Iyl.뿀ņæ!‘§ąü?…W´-- ’@Ģ4lnÉV+}ņš:—H0JLcĶüi߉  œtÍ2ČĻ….`heGRŦ:pk.RG1íĨŒ7îØŗ#˙k‚3î:ûWDqĮéOÛMI­Œ¤”ē¤x’0Jl`HeÎv°āÎĻÆVÍΗĆUfŠfęËŅŋŪׯŊR:eęļļ“ß{& ­Îē#Y[S’Te} ›ũu…â_.ŧļ6îæ/ßcvqŒŠąī´~5ÖĻ#ö‰Â¯u„~›?Ÿká­ŌėŨAdĢ9`Í&ö$‘ČÎO4ëąåâ¨*VļÄ{ļ°ĀĢ6V—7׹Û[F^I@äĶ´ës{ko{Ėŗ$xĪ°ÖžƒŅ<+ĨčQ¯Ų  *œ‰[¨8#ĀŸz1Xĩ‡÷Tu íu{xNÆm+Ã:u•ʨž(XÆļĖ€s×č)Ģõ +į›ģší%eaĸUΧyŠ:‘øB„r f…<ã  Č4ãÍ4ĸžĸ‚ƒš?LĐ1…×pįœÕ%ŗ ōŠf†YŪHsÔŠÁĪĐļâ=ˆĢ7ļææŌ{t”Äf‰8Ų‘Œū´Ũ2Q>››Q2˜ų:qĮÜP3/AÆ+âfŸR–BbŗeA‚IŠfm w ˙ŊŌļŨYSių‡céXú”kÕĩæÂÂŪáOFFād{1jĨb}!ŗÚļ‡Ļ2TĀ ?*œPmŒ"EĒ6€Df‹jŠY %s‚O?‡Z˛ÃŒāŅdb9ÜųüЇŒŠŖ3ŊíãZFōG8ķŨIRr2Oã’GĶ×iĖEŋŧXˆÁ]áŽ;€Äũ~˜ĻNå‰!IcdtVVe# B+ņ?ąšā‘žĪ‘æbA¨'¯L;z–ûÃņOi%ŊŊÕÅĒ˜Ö&ųblũåŋŽ^ĩ…œPܤ2Å,2Æ Ģ}Ņ1č]{įžũĪãC]Ŋ+;Uėõä üØV‰ŦũTãOqūÚčkL4#Ī–)Zt|EøšLZĖÕõ=>Kˇ†HĨDh÷ œzéTΓu˙?6įūŲ0˙ŲĢ{˜ĒSiYā›ģ0˛nĪüˇˇ'ũÆ˙?˛îĀâKqôŨ[ØÅiûIw'ŲGą…ũ›v8ŨnāL?ĨNŧĪüģcūē7˙[¸æ€hö’îÎ=Œ§^B[˙ßæ˙â(:}ņ9 mĮũ<7˙[ØČéIŽ8{IweÆ͝sūŽß?õđßüEG5†¯öĶÚC`^,Vk‡ÁJã!=ú×GÜQéG´—Qû8­‘Jĩ)|ë[Q.đ—$Œûe)ækĖĮ¤Géq˙ØÕŧ{QŠÍSķī1ą¯“ƒüÅ)¸ģ {LĩshĮJP:P2ššī§ŋĶÍOņ¨lžęÚŲVM>f™ūyYeŒ‚įŽ>n‡°§žhĀĪA@>×1ō¸đ8˙øē Ü˙ô ē˙žĸ˙âęØĐb— č jŸ§öuĪũõ˙Y×PĪ—šÆÂî ‡?9F„ÉęŲ'$uĪZÜ š6ŽĀ~T‘l÷‘Šqku+ķIˆ†īĀ=X˛ßaģĪo¸öjĐÚ=)QŽ(ô)‹ˇĪ67@}˙ЧĖøķē˙žøÕŊƒŠJTÃŊ­Ø˙ļTīˇ ëow˙~ü*ŪŅé@QéL ŸÚ˙Ī ŋüđĨūЈbēöí'˙W6JMĸ?´ĄīŪëŌOū&œē„?ķÎį˙d˙âjŪĀhØ3ßķ  gRˇÎ ]ā$ŋüM8jā}˟ü“˙‰Ģ{AÅ(\÷?SūŌˇôŸéöi?øšQŠ[tũî}āqũ*ŪŅĪ_ΗnO§ãG wZ¤+k3F\ʨÅĄ~N8íYpéڅÄ7ųJŒvēį×PSŽ üčŲî:wėšČhÚ†ôYūĶŖÎŠŗ¨rsĐŨ9މu[ ŒŨÂė_wË“ŸÎŗÜĶ”Üĩ“ģŠZ"¨Õ´üdŪۏŦ‚í5y7öŖūÚ¯øÕŋ,žįŸzíΠĻV]cMaÅũŠĪũ6_ņĻ_MŒßڎ?į˛˙\ ĮSIågŠ4/0+_M'FĐ˙Ûu˙lēƒŖ¨ÛŽA–eČ÷ëW @˙ũ)<•=pG¸ÎŲÉĨ™MĨũÔ2Ę̏3Ū4‘ĘŊ Ãg=G=EnĨí˜Pæß`"â¤û4GøWūųĶg?ęŖ˙žøPkŨ[GÚ"ÉßJā[]ÛI’!ŽE*Øqœ¸öė9Š?ûöŋáQ˙dX‘ÍŦë˙…Ri%}Œ“a ”K¯+KÆLĢ 9Ā;BįŠęiĻ˙Rą˛´ Y’"Ųžk†A“ˇ€„Œ­k"Ãĩŋũú_đĻÃ9ûļ}|•˙ +tæ–dkÛĨHŽ.ũŌļī-ŨR{žI>æŽāū´OäũŽÜ˙Û˙ chZq›S˙lü)§`qûÖnĨi<ëö†5ē…ŗ>Bx*HįÔ ¸t3žŸfí‚˙…0čgũŦ˙īÂ˙…>dO+3-Îĩ’('\|†Iv¸>­ĩpGĐfĸŋššˆŽm$x’2(>bũī”bĩNƒĻtû§á˙…0hzr°ael AäWCIĸŌdD3HzĶņĩ@ôĻ‚Ņ=ŠQÔRšn(Į4´‡¨ “ƒGzpé@„ëGlŠC֗ĩ QüŠĮ ¤í@1KŽ”vĨ=&€2)GŨŖ° #Ž”qGĨ(ë@ ƒJ0i„Ō Z\uéAęh4zRŌ/AN¨ÅU éGŊ §ž‚€ŌIږ€ڗĐ)}(ĀŖéH>õ( Å. ­8}Ú`攨¤)E&(7Jô¤ŗEŠh)E%:‰ÍfK@„ĨĸŽô˜ Ž8Ĩĸ€M7ŪHzPJiÍ<ô¤4‰ЇŠ÷ĻĒ3R7ô¨Ja¨Î{SÍ6˙Ųleptonica-1.86.0/prog/comap.073.jpg000066400000000000000000000724251506303110300166460ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ö"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷ú(Ē—ZŒrŦr ˛–ˇˇÖ€Ŋ‹tVoöŨ¯üķš˙ŋ-Göå¯üķē˙ŋ ū\’ėO<{šTVgöåŽ?ÕÜ˙߆˙ šjåĪũųjV}ƒž=Í:+7ûnÛūy\˙ߓGöŨˇüķš˙ŋ-EŸ`įsJŠÎūÚĩūåĮũųođ kV§ø.?īÃ…¯°ų—sF“ž1øÕí›_îĪ˙~[ü)?ļ­='˙ŋ ūų%Ø9—sFŠÎ:Ũ˜ę.?đ˙íģBqļã˙ßü)ržÂįsFŠÎūÛ´ūíĮūŋøR˙lÚzO˙~ü(ŗėŅîhQYįY´ķßūü?øRmŲ˙Ķüđ§Ë.ÃēîhŅYßÛvY˙—ü“˙‰¤ūŨ˛˙§ü“˙‰Ĩf.x÷4¨ŦīíË?Kü“ü(Ũ‘˙ž˙ø'˙EŸaķ.捝ũˇeë7ūÉ˙ÄĐuË 3™˙đOū&ŽYveÜŅĸŗˇŦ}n?đOū&“ûvĮūž?đOū&‹1sĮš§IÎzq\õĪŽŧ=gröׯ9Ča“#=3ōĶŦŧk j3<6wÍ4ˆģ™R §÷}éj>eÜč(ŦīíË}éŋđOū&ëļ#ŧ˙ø'˙O•öeÜŌíEfzĮÖã˙e˙âhūŨ°ūõĮūI˙ÄŌŗ4{š}Š8ŽzĪĮĄ7“iy$ŌmŨĩmĨāß5v_éđÆŌHķ…Q’~Í!Ā˙žhŗŅŠÔŅŌąĄņV‘qd/!šwļ*[ÍIˇŠûĩž>!øY˜…Ր‘Ô¤ã˙¤î´Ž§­!5˟ˆ>ã˜Įũq“˙‰¤˙……á|˙ČO˙ I˙ÄŌš<ņîtūôfšøX˙  Īũq“˙‰Ĩ?đËĖLߙ?øšž=ˊ8Žgū˙ ĐQīĶ˙ņ4Âážúĸ˙ß§˙âh2îtŲö¤Î s_đŸøcū‚‹˙~¤˙âi?á`x`puA˙~¤˙âh¸šãÜé4¸5Ėˆį:ĸ˙ߙ?øš?á`x_ū‚Š˙~¤˙âh¸sĮšĶQžÕÍø_øš ˙ļRņ4ŋđžø`Œ˙j§ũûđĸãæ]Γĩ/zæá>đÁ˙˜Ēߡ˙ Cã˙ ˙ĐZ?ûö˙üMĖģ7|PIí\Īü, ˙ĐU?īԟüM⅁ÁՓūũ?˙@sĮšĶtgŒ×1˙ ÂŨõUĮ¯•'˙K˙ Â˙ôOûõ'˙EÞ=Λ­Ė˙ÂĀđŋũ“ūũ?˙J<á~ŋÚŅ˙ߡ˙ ™w:^ũikŸŗņŸ‡õØ­-u(åžS„@Œ2í[Ų wۊilQ@É+S\ę°˙×ģw˙hVåbjōƒ×Čoũ kZ3Ģđ2ļx­ ?ËŸ“ž(éÚģ!†<3ųš‰“€AĪŠŠ‹(“ÍFlū”đ‡=? šRƒ Ā9yÅ/”ÍœŒŸ­&y~4öåŠ‡Č œ‘ŠxŽŋøõīŒcŪšĐ’ €:SeŲO$˛,q ÜėN’OĨ &Æ8ĮëMÂōs;îĒ6ŽŸĢ‡đÜxDŲĮ$CIw}kϏ&æF`#…Ÿ€@$íxuõĸęמƀQˇ#ųšM¤œßUŽuũ:Ũc{‹††)Ąķå]Ŗ>ŧŽƒ¯0õĢZ}Ė¯ÚmĻ&2JÃ×4s+Úáf_w˙ĩHTôĮã“M0ŠtÉÍ 9r $ŲߊĻ1U88É˙kNÆĪ4ß$üß6s@÷Į¨4ģ|ūtg 1čiŨ¨1P: ŗĨßž“¨ųâŨddWâ˜x čj+ˈon ŸŲöÖč3„Ž2>˜öíKašs-]Šį“œqHX”ØÄžXYsŽ­ŒRđ*˧æŒîÁƒ994Įʀ {Š>öOJŊÉ(ô'‚ZLv=hō¸2ÆžTŦ `’„˙x uëīŠĐéĶĨ`ÂDuˇč÷WöF{Ghå‘×kŒtaÎĮ9+V”š ĐMŖ`Ø`yŪēéÉĩfrÔI= yâ“>ĸĸMášÎü)ˆ\Č3œf´3''įļ)ČĀéģÁ`yRg9'ФØÅ ųÍ<Ļ~•#ĶĩŊ$û…‡‘Ī"ŧ§Į‹wˆf–hŽ×jleVØĒ9=8;zŠÎ9ŦíoHƒ[Ō府˜ã&6ÁÃΛW&JęĮÛ\…xg@X#Ģ€xÎqúWˇZ\ÅymĖ/ē)T:c^;Ēč:މ{y#é÷_d ōŖ­/NM`~bM&AudîãĨåų¨#šČ`?:3Ži3Į§¸ Đm¤ū.iN:ĶN[š@(88¸÷Ŗ¨8Ĩ¨Í'šéM' Sž÷Š>īԟ =2}($ŋOJ1Ž´Aā`P!xÚ09Ļõāõ đëHAë@9$PĐNGĘ)Lž´Ŧ&‚vž(Æāi7`āuÅ0:¯üW:AĪ&c˙ 5} Ōžyđ(?đœhų˙žį˙@júŽZßę`˙‡ķEV'Y1Ŧ\ŸíxëƒčBˇJĀÕ˙ä-ũ{ˇū„+j_3­đ2šT•Få A†Rr˙ŦX{kČIk3M'Ũuø#:qõ¨õV lļėۉ#˛“ĪčüEjŽœRļŖD6ÖÆ#ŧ†I%mĖØĮ`0aÅqŪ?ņQŌ!l 'Ú'ˆžė ›y'úWq^#ņÎîßŎ3\+yW 4NAP =0{{û֐Š”ŦĖq8^'7¨ŨĪŠÍ4—ŗ<Í;Ŧ’’qš”`="´ŧĒØhš„ŅęsÁ¨JąšÉ<㜁üëÛ€@lpHÎ*ā #HĮĖ”Œo gƒ̧‘/„ōãU§y;žīŽHŌxÛ(ĘcJY˛pF=ÅxŊ†ĨuĨ]¤ö“Ųp įåaœí#¸äūuęÚ6­ĩ§%ĖxV?,‘į”aÔS×cxÎ2ØĐÜ2§“ ö4‡Ž1×Ŋ%Ü\útŖ“Å/lzšF` ą#dÔĘõæžzfŧúÃĮŗOŦ*Ü@‚Ęyq„zdáIį¯=?Jīx÷ԉV{ņÉĮ‡>ĮŊW7q%ÂÛ´ņųÎ2#fˆöjlŽj”“Šņ>‰ĒĮ¯{I,Ėą ꭖRŧaW6AéQÛ|En´Ų<Å]˛vãƒō°ãķŽƒW×m,/í-ŋ´"Žv•UâdÜ žģˆûžÄūUÄø×MˇąÖÖ[w@.TģÂŖî0=āYüÁŠŌú6⮎†×ℎVæÚâß?Ä0ëúsúVļĸx‹Ã×vö7PHgˆˆÜĘ­Û?ˆ䛆vĶėn§Ķ&2ŲJĐI‚2œd’ãCLÎ5ģ—5ķDŠÍG’ãËq÷”œzöô5›ģäâēë%åŗiúô)pÂĖČĪmˌuĮ"¸Ø†Č#\ĒNú8­âu~Õ,`ļŊĶ5|¨Žē3}ŪFÖöãĶŧA$^+ĻčņLđ+Kv\ŗČš {tįÕÉāŽs×Ĩwš…÷€­oa@¯klĻ'Ī# §×œ­&ŠŒ›Ž›œÅú=‹iîŖ’ŅÉŗsC'PF9 ž÷Ŧ‘–Q¸`úRē€ŧ=ĮjˆŽÃ*yLU˛Ų§cĻ1ëŪ™7æŽŊ ÉÅ ãëڐˇ?/Z^Ŗ'­31z˜Ŗ!N=hå‡§ŌŒđ=E .õϜîtĨČīMÎãŽÂ˜ N0@Îi}ÎzS:qŠTSœŠ@)lãcŽO֐€SJ…į4Ā ČŖ įqHA<öĨ ķŒPGf”Æiqō!$Š.­/BI4šųqېrj!9éHFGZ )>īZč<“ã}ž?~ô¯ĄGNkįŸäøãHôķ˙öS_C å­ņĻ øoÔZ(ĸą; OJįõs˙x?ëŨŋô%­ķ\WŒŽõ;MNĀéļk9x™$vÉę9Į<šŌŌLÎĸn-"á'n}*ÍũĨ¸>â0Q<Íģ†íž¸ũ+š´ÅÔPJōĒēL{[S°ÆC)c’x ĶŗsÎ'Ō|Ēęŧ¯Ģ]ŪũŽÔí.ˆß0$žv̓}+Ą×VĐįTSrNÉlášY†ËŒƒđÎIĀI$ŠĨâ +^Ô­"˛O…!ģ•bfi I s!…*q˜ũ+§Đü3cŖZĸFŌ\NˆSΜ–lģΧĨh\\ˆ4U’i›;cAÉÆ2yāG&˛YIXŌ4RÜæ4Ÿ‡ÚvŸ,ˇ7—wˇ°‚Æáådfc×;OL`cÚļΧû¸—›ą#ō<Ā?…}GŠéŽ9Îi÷īyqe%ŗŲķŽÅdmęšęIĀÆ:ôÁÆ=Ēę€8éŠČØz•Į+N ŋŨ8õ¨ˇON)Ā ŧæ˜ķჁH]CŽN~•^úūĶI´ûMėĸ(w,TžIĀéī\øņUíÅĶ5ސĪiĻ6icČ~tĪqˇŽ9Ī֚MėDˇ6ŽOĒÛ$d#sÉčšRâsųf´vĐA;qYšMÔW~ČŦŽf REÚĀlP槑éZBBôŠ‹ĐF,Ęūuå?õ›+ĢģK sæÜÚ3y˛)ĘŽā>OsĀ'Ķę%žĮ0V`ŇžoGĘ.y$d“ÔšÖ”Sw9qucËܐļy4Œr>ZQÚV;Ø„Ēā`āŒöĪŨÜzö§+ŖW‘ę9Ž„õˇTyŽ-$Į€ æĩ4 v}ü:a­¤ \!3ĘûŒū5“ČlįŠ2sĀĸ×ÉÅŨŅc}o¨Ú-Ũ¤‚X\t8<’ņ&–ĘTļ˜CpW÷rmkvāõįžžš-dØ‰Č‚xŲŧļ9Æ9øĪå^…ws”×R“å…Û°ŠnëSļæW8hū jķ˜īlmÜÆÅ$¤pq×5Ũ+Å}d)ÃUüëŠÄÔū!)ŽX´ÛIƒrĢq pBõ<úãņé\öŗâ[íl4Sb;erR%ū!Ÿ”ˇŠ‘Ûšvor%YGH?ƒõÛ íV÷S˜,Ō,y–FË9¸Į_ĮĨE?Ž5™Ĩ2E,qÆ~ėB0@SÉ?•sy=:P8â… 2Wk"X¤ŨGpȲ•eua‘!'?Z.'ûMÜĶíe‘¤Úq’N3ߨšĪ=é2AĮj­ž„96Ŧ8Ÿ|šN “Žôd)ϜĨWĄ#‰¤@ÆŪzĶsƒÅ5‰Q‘ÉĮrķŖAĨ}¯“õĮčž,ˇž ŽŪ2‘ĸî,:ãæŖčqëHFFiX SšˆâvŸZCĮ=Š=ēš?{Ĩ CHNŪi p:Ōlœ‚sƊ:Ÿj"˜ÅåāšÍíŠAÁ÷4äcĨzM7ˇÍCapG&ŒŒæ˜{{Q’zCČĨõõ ƒƒÎ1éG9ãĨndméHāŌß4Ÿw­÷é@€Tâ“õëA!sšB¸nI§čAācŸitŸ˙djúžzđ9ĪôŒp>Ņ˙˛ĩ} \ĩž#ÔÁ|Ô8ĸ“<ûQXdįĨ`_iđ_xŠŌi é,Îcx¤d8.šp85žzVsøž!˙§S˙Ą  {[ÅĒ0ˇ…#Vvbq–'$ū$“VI\dĶ}ZgԘ‘ķ,<íÂ"–b}*…ŗ‚÷¨K‰˜ąįqUėšöēg4ë÷3:ZFĀ’VIIū ŸĖ‘ĪŌ­Drň vQÆ]ŋ)>ÕŠlāį‘H˙ë^y¤Ũƒ@ Ķ“@Įâ˛¯ŊMNAāŽõĪ'wsĸ ĘÄw—pYZKss"¤1Œģˇa_;:ãJõo‰×…ojĄĀ¸Ÿæe8_—§×=ā5åīsZŅ]N,dĩQ"ŗ´RFBÉ ‰Ŋt5Ũ\h–ž*Ķ—UԐ[Ū3bDs…fAĀëĶžõÄ1ĀāgŠôŋé˛iš(y\īģo<Š9`ãZÚĪC WjĪcΝtëŨ>&öŲás÷w•ž„pj¸ ví–6ڍģAw Ë9ÇÔz›AđֆysnŠŠ÷LŽŌ öI9?…S°::čĖOén¯s„‚5a n2zú‘øŸJė­åˇÖtųw,RÚĘY>W˛'LäzúWk>)žÕã’ŨvÛŲ1‰ ^ÁôVęWzLS\ØĖŅ>Ɓ÷”ŽÔ{ŠÎM—Æ>ę5-o#ĐüN×0h!¸‘ÉhōF3ßąü^ņ/Š—\ŗ†ÚYa\HæGÎÆQÎsíŌšĩ\ ‡JCĪ)[[™ûGf‡‚qHŨwRā ‚i9ÎJf@Į=փ÷sیā(u4ưĨ&r0:ƒCuãĨÚA ķÔķM?0aīNnI4ÂN8ühqŽi9š\ gõ¤ÆyĻ0Įû#ōĨ^´Œr§Ŗ§=i0aƒÎzPx8rËÍãŠ@!āäŅÉÁíJ84™'ŒQp ÷ ‚háMwí@~`jpéīHĮž(āsۚā3ÎÚ>đƒĪLfIÎsĪJ“ƒ‚y4ÜdsLΡœPN8ī@wsC͆PNõĨį§joÜ4FOSLpčiøųēņHßwåĨ¸#n)ŧž´î‹žŋJFų×Ļ({Āäi#ūžū‚kčlņí_=x'oü&ē@˙§ũ”×Ѓ"šk|GЃūĖ\âŠâŠČë'=+9ŋä7ũzˇū„ĩ zÎlnĮ˙^­˙Ą-Pé­"ÅÉ#D˜žĀuŦ}+Ä0ë7ˇQYÛĖÖ°qöŗžâ ¯ŠĪâ*ÆĄ2ÍXDÁĨ¸HSĒ~ķAĖĶd&$ ŊNK‹e$ÂŲÔŽæ‘€}?Ĩ^ÜŠsž;ĖŅ×ÚĄ—i~ $0,[“ĪšŽWRŧÔīu ģ;[”ļąED2ĸ7›ŋ9}­œtų}ŋ–Ļģy4‘ÛÛ;GspûÕA1¨å›ŸAĀ÷"˛íĸû=ŧp—2P Ëäû“ÍkNĪ]ŒjÔåŅ mm ´~T)ĩw<’I'$’yÍ2î;ģ–†×OwK1ˆr„Ī;ķĀg¸$О0NAæ´4É[ģ’8–]Ē{ƒoū…玍ųcĄ„4ĩ!ŗđÔm3Üꎷ’ųĢ$(AōáÚ8ÚžšÉÉĪoJܐá:Ōą ÖŖwpÖš›šÔ•´#]ŨúĐāHyč?: č)8‰°Čū†eœ,pÎĨãŨ3<;yüëĘ Ü8Ž˙âu…ØŊˇžid{&] ĘÅ'ĶļGc^|O 褴ĐķąNõ ÂūéV6ŒŪͧI%ļ´ Į!A!ÚÔ^g:Öī†uҤ_‘;š˛‘v¸m˜Îš'8õĢi|ŒŠK•š:?ŽæˇÔûVV{iÜãjdÄOaܨŊã­õ }Ž;ˆŲaa4lmq‚÷āŸĘ¸ßĮ¤Ļ§ú\âO<<˛…lĒ’Aēž+ ģIŖ3ԖT'åõ8õĨm4ØšNŪė„%ˇ€( .xāõĻŗg§•G7jόõPOŌ –Įj0Ö§¨…#<ž´ŌwQ‚“Ō†$tĻ0 .āsAųI>´ryŠ=2Ú8484Ŋ:u¤* Í ŠÁ„…}i[æSH=éŒ^sƒM?Ĩ/%H9¤ûˌ☠÷O9Ĩ7jOÔԌô4ļ@)įh8ŽMöĻđ­‚sHuÁ4™Ü¸`îÉ7ŋ:bÍtŦ‹"X?—Ŋ°ĨË žÜ‘ÍkM^Z™ÔmGB_\4–ĨB ~MÃĢL‡$ĮÛŊA$íü ŌÃŊŒ …cAÆbĒčS-փcp-ūÍæ@å` ŧtúUü• ļ"gŽ:gƒMÎ})^>ΚĻ}ÖųžôŒ dM­ōŽëgĘGQū­ŗ“ģ>ŧr?ģHG˙JŗâģQ}á̏XĖlސęBäzãsךĨė!˛Ķâ´GˇYšf|7@8āū=+ĸ”´9ĒĮŪĐԞUˇ…Ĩ'‘÷WģĀä×A¤ZËg§C ÃŖÍķ3˛)Q–bĮ“ë\ŊÄâÛSĶŽfˇymá”ŗČŦ?tHØŽã ĮÛģ(\ŦXd09RĢ&Ũ‡J:\yŽ@5€g…J›ņÅV•NâI>ØŦM@cđ ÷Å"ā-sž)ņu¯‡â1)_ēå ĪŨŊęiØNJ*ėĢņPļĩđŊŤÜËtBE<äw}?ī^9Æ8ĢzŽŖwĒ^Éu{3K3zčaíUxN}kĸœ9V§›^¯´•ĐG#ĩ=1G\Ū”đšw9ÄÎÖÉīN œwĻũîĻ•Hč(ę1¤sœņé@8&“<‘ځ ‘Û­~”Šv6={Ō‘Žjt™ŨĮJ3ÛŊî(ež”\ö#ŖĄZLnäv ō8ëë@6R ƒĪJwQ“Ôv¤ûÃڀ§AÅ' Í;ļÚL|¸<š5†yíHxSŗÆ1Iœ THsJqœPF:ķ@8jLā¯h ’ĖQ=y¤Č^”ÎîԆxÂâƒÎ1F2)NŸ{š=ģQ‚ĀڎO€ 7ۜ­7;¸=¨§ũšhŽ´‡ÚÜ÷Ļ!@ŨÎi8+Å/;ąÚ¤b˜ƒšČ¤å¸&ŽÉ4ž†€ 09 ƒš2ĪzzRčČ~)xÚ2yĻ!„ΐœ/Ŋ8ōHíHJ¨ fī‚—>2ŌyûHūFž†Ī+įŸdx×IĪO´ũ×ĐÕÍ[â=<ĀũC=¨¤æŠÄë,†š/G ߊ4›)•]&RJ˛nVwāúrĸēĶĐ×9vTxÛM Íe0^‹rŸä ZvÕŅģIĶŽ”ęaã¨üiˆ§Ēę#L°kļˆĘˆĘCǜŽ7`ĪLķXˇž)–āšf—u*tō¨6w#$ų{ķŨ5ëĻŋŋM*5O"×,y$ä˛Ļ1ŽÁ=1ëKôÆ+HSæÜĘuytFŸĻ^i\ßę7LŌJÆŪ %.-Ôą8Ŋ1Æ@â´Ú(ÚE‘ŖRņ“ąˆäd`â­g#T,Āą8z×BŠŠ˛9ܜŲNûOŽíe}Ē&xŧ­äg œôõ÷§x[Tm;FōoloĄōōŲgiž\‘…ųÖRxŋN˙„–}Uš ˜ciYĨP€3A?ÃÍqˇŋ-"-Ž•,ÉÎZYBgĶąŸ#՚C™lzũĮ‰ĸŽ’; éˆû¨‘`“ÛŠú~|Ô_đ’G•iŦobØ `œg?)$ķĮŧÃNøÁĨ]^Å Ũœö¸ųĻ,#g¸ã§>ũ+ŊkûHė ķ\'ŲJ‰<ÜåJž‡4F{1ē“[ŖÄŋ.”›}&Úh‰_ĩOÖ8ëĩOOŠ€¯=–Ig•æ–Fyå™Û%Š5×x¤éZÅŨĢZę6‚č‹,Įcx€8į8õÍqä2ģ#) ¤Ģ)ėGQZB)lqה›×a21š@2§=¨ĀVÎ)$JŋCœPÄqGŨš ;xÅÜŧŌĮ"šX’*üŊhcķsJNF;ŌsíKĐãõ B€sIÁ sچä T€™Š:A B ĮJ.1s†Įj3ƒHNxĨč0zĐsģqâ7 âŽH9éH2)ŒqõÍ1šš#¤äuĄ•¤ūÎM);qŽ”ßģÍ/QɤÎIM8Îx ûPŒcޤäR€Ōįpô Î;Ry ķĶ­"ão=itŲ$đx ’ŧŽ´ŅČŒ…8ĸÃą¸ĶO#9ÅÅÎ(įĀ8Į‘Í&1Kˇ'&–‚98¤ Sģ R`qÅ03ži‹šŨžÔÔP&xĪ4ܜõĀĨíÎ:Đ2N('nĨŨČ&›ÂņøŅ‚4¤†m.FÎy4Ü<~”â\Đ#wÁ'>4Ōs˙?û)¯ĄE|õā“Ÿé?õß˙e5ô/á\Õž#ÔÁ˙æJ(͉ÖX= dÉ rxŽ YAxíaôËkXô5Īj×­iŠb Ū|–eb*›€mÓč^}*ēŠ[d‘Tĩ=JÛI˛’ęęETQōŠ<ģvUÉŦ†D™§[ËĄ9ĮīRØĮl1ĪLbĢÜŲMÕėé.Å9ULxĀ\ž3žį=q[ûūÚ$:Tˇw^eåÆU&Ǐųœ˙xúÆĻ) qßÅn ąä +d#É^6rs“Á­)Q$‰‘†QŒÂ›1Û°ācA…U ۖÖ] 9ˇbCo,IģbŒ ĖXūg“X^-ūÔ čĖÉ4ŠLĒNܞNGŨĀäņĮŊięÚŊĻ‹ĨĪ{*¤PŠ<œ=€ɯ—âvšwŽÛ]\LbĶâšYMŦ# <Š=[Œõã4§4•‡ˇŠĐ/„‚ũ”×Đ`q\Õū#ÕÁ˙æ-œâŠÄë,ž†šm~&›PXŅĘĩ Hū!ÆG#>Ü×RzW=ĒÁu6ąŲcĘÛÁäÛüC§ĩ…”ĩ"wåv)DŽåŨTÄu8ëJydŢjRˆa„ųé&s˙|æŖŧ´ŊĶėĻē˜C,0Ą‘ü˛Á°N'ņޟiÔãörė7’qŽ;Ī SĮ<ÜDáĸ‘CĢv Œæ¨kž!˛Đ´Š/Ž[Z(‘˛ŌžÁGõĸ]ďøŗ¯SÅ?`‰‹A§/åčd<ąūCđŽ!‡-ÕĖ——s\Ės$Ō4Ž}I95;c5ͭ΄ŦuZĪÄoYĐãŌghØ"ŖųQá¤Æ1“ŸaĶĘRA’}xĨÎāHé@ËZ\pžŖN7D͂žžŸŽ+ŊŲ° p¸­•uxw`įp+ĩÎėÖÔļē8qOŪ@Į b(Ā=čÎÜHAČ9­NPŊŠs´QŒŠ î\į‘@\N{ôŖ 8ĨûĮĄãĨ(ÂđzĐ@ÉÉĨÎSFî´rŖúRHãÕëƒÅ;˙k|āÅ;xëŪĐķIØúŅÉĐĀ<Š Į Rås@88=iY€¸ęhÎņ֐g<ž .qĮj^€&xã­/nzŌtühĮ9Í4ņš2V”įŒbā ÷Ē`cš0rF(#* Ås)Áé@FÎ=iS¸î)1‘Ī Ih'Ŋæã§Ŋ ųx¤ã<ž(e4ŸÄhéĶĄ§`Œ{ĐqŸZg­Hj@(98 ŧôzu¤ãŒõ Bã'Ĩļœ Ė´g<Í 'į֓ Ō€^M7ž˜ĀĄŊĘ9ŖČæ€Bž'Ĩ>ø8íG`Qü_/4`}éÛ „Ō—?ÃHĘO>”§”ã­`ä÷ϜāãĨ.29ëHNTŒb‹Ŋāųt‘˙Mų˙žM}ŠųķÁ5ŌAĮü|ėĻž„+šˇÄzx?áŋP4QŒŅX…ƒŌŗ?ÛĀ͝ūÍZgĄŦžˇĮũzũ ­ —ę ›uēĩšŨÉ *b:āŒTؤÅ2N+Ä^×fŅdˇĶgĩ|‚­O-='ŸÃę+ČŽ­§ŗšhnᒠãāĮ"G˙Zž’a‘ŠĪÕ4];VŒ&Ąe¯ X|ËônŖđ­cU­Îj¸e?…ØųC_Ōíí×ípžÍė•Ž9ëŠĀ=ëÛū)|2˛Ķŧ=6šĻŨĖĢhA{y˜2ífå8ÎrG\׈ãÔ6›÷v*”cin7Šæ›Č$šseގZ6ß'Ū‘e>čŲ^GrP6ĶČ=ã?ZíŦī"Ô-ŧøw…ÎლāÆHÁéJ%tÛļF]ŧŽnjœLjŅU5ęz€'­4p*+G’[Xd™vģ(,ž•c ĩŌĩ<įŊ„/äM)ädĶsEIĮŠČÉ =œōr)gpâ÷@4§ī`Px ˜æ“Ą‘Jß7ĩŊ &6ķ‘CpGĨŠŖ<ãĩ;‡ŽœŌcŽi~īsɤčIĪZ@'ß ņŽô¤sžÔd(Č@ÁŖø°i;ô¤'w"’KH˜Åų}čûÚh`{gĨ!8'E&q‘š”Ž3œRcž”zv¤1O?w‡OZĘ@šXâ–dyĄ†Y#N *œņü)‚LhŗÍ.x+O’ ˆãIŪ&Xd8V=˙Ô΀‘Ö€jŠ;ûQŒŽsFwtõ ŖQ¸9Ĩ1Č#IxT.T/ޏúgúP̏`ö hCę3G@HÎiÃēŠC„ĪŊ1 ŗŒžŖšB7{S°A$ôĻŗ`ņŌ—P>´€dķJx9Ļ’XîÍ‚“ĮåHÍKž8ŖĐw{PNŪ”rŨ($*hî—Ŗßëw†×Nˇ3Ėš‚€ŠQųšë>č/ĸxu^fVžô‹†Āû€¨ÚšöũIŽŠūéī\ōĒīdzT°ąI9îy­ŋÃų4/ØęVsÆúz\¯É#12ĮO˜dõÍzwĩgßuˇ˙¯¨˙hÖR“oSĻŒQIEIĄ`ô5—×Ä˙Ķ ˙ĐÍj†˛ČÎŋžŸčƒ˙CĒBeę8¤Áõ¤'Ŗ<ĸG)íI‚;Õ{ûÛm>Ę[ģÉŌxWt’9ĀQë@ņžá øtŅ—qFyč9oũ”WÍ;sI#Кõ‹_tĪYYéz;Í%ŧ3f•ãØ…<ã–ëŽÕå“‘S‰›ÔExéy÷ œP9ëTH`‘Å*„ŪžfvdnĮ\wĨƒÜâ˜zsLGĸB”T… 0ĨIŖŦíôŪX#6Āëō°SéĐãĩh ä×ZŗW<™EŴƀzšJPw”p3LAˇ'­'ßZ0GZ ņŌ•€?‘Í.0sF ( äJ ‚iIp9¤Œ@#|͚Fäq֝ß“…Ļ}ķMÎāIíJTƒ“M9Īgˇ9Ŗ ÁôĨ<`Ž´ƒžM!€į¯JԃķŠ2:Nh:úŌšíNā‘HrIŽN@ÛHzõĨáH I柠!§æôĨ-•ôĮz–[›MŧH¯LũOĐéÚ$Eŗ'™pWqķ:)ôĮN=hJå¨ļbŲi7ä põķuÃúôŽē4Æ#U Ēx”⏪œöõ§cDŦŦUÔ!ŽęÆX¤ ~RÃoPGCÅq$ķĄ{xeEŨ)R>Q‚•Ūāū?J @ôZāŌgRqmĮūL˜ÚĮĄäU‹+)u "?•q—îŒãķ˙ 믴čĩaĨ•C cüŠ’ŪÂÖԟŗÛĮ#ĸ‘īJÄō̈ö–íoä4(Ņ€„ Âąîü8ŗĢĪ'9ØŖņÍt*  ruÕ&SGŸē˛;ĄRާ §¨4˜Č$ūģ WIŽũ ! rŋuņÁö>ÕČÍ –ķ4s!IĒžŪū╌\lD2ÁâœqKɍø“A"†ÃSyŨŌώļžöbDŌ2ÄãM–)a•ĸš6ŽEę­Cî;=ÆpŋZKOv曜°R@ĪŊ!'ûĩĶx JˇÕՉg9˛ŋY‘dr捀Ũ˛@8ūĩŲZ\ũ˛Õgō¤‹q?#ŒƒMÅ+¤h‘ˆãEEŒ pë€Ô?•.8ü9Ģ›H<ŅČ⠊\9=iTž•- nq“ųŌ`g$ö§€ Æ?:RŧķJ25ڀ'›ŠúԀP ŒŠ>īzB8æŪ”sJAę=h@ץ85KQĶbÔ Ú˙,Š>IåÄ{UÜ`r3BŒˇI…‘ÆŲi˛ i-.íōĒØō•Æŧ‘ūE[o ˛ÍûģĨœŸ™rG<Īm;L)qIJČd)ũŪĮéZė‹"˜ŨC) Œƒ\smŗĐ§舤žļĩe\G=70T°_ZŪFMŧņɁ’šQÔTPÚÁnCQûÛ.~¸ĻÜ[,Ŧ˛+įCōJŊG¨> ÷×5L}ß>Gũ|ĨhV÷3%ÍĨŊŌ(gš]’Į¯€Iėx'ës=ĒM: ERÁčkōÔ]ęĻ3,ņ˙Ąã÷NT䡨­ŗŌ˛f¸‚ßWq2DŸeęėûŪõ@2UŌÖ)/m'ƒ…Y$eCtÆ2N3ÆqVaģ†í[ɑ\Ŗę:ŠP´vÚîđąåDĘcÜ=ŗ×˙¯Yū%Ôė|7fēŨԊ‹ ōŨŠPĮîSžGãĶ­ÉjJL¯âoé´ķoî †cˇŒæI?ÃÜņ^!âž-´6/gĩ ˜JIg8 žû įŧEĢžšâCRw,.'r™?(įÛ—œ>søV“ap>œũi@QĮZFlôūT sŸj’EÆqéUĨą†S ĂN3ÚŦd°ö ā`ņM6…b„v„NÆSÎ8>Õx(äČ#¸â–ŨØ­4ž8ܛ ĩGvô­Ũŗfņ‚~G8ôÁ˙&°ŽGõ­m3UŠRÖU*2@|ŒrIįĶ­iBJ3ģ0ÄŸhŽl”‚Ã5"“ĐĶH ×ĸyƒAëÍŽOJ1ßŊĪJ4éԌ…ÆEãHĄ}J.rܚN iNFEtā `&Ūi#Ô¸čiîR$ļar}iĮãŽ;Ķqsڐ lô¤ÎO)AÜqH͊cé‘A]Į41š9qš@†Ÿ›ŽœŅž uĨn1ŽE5†#ƒŽž”ąáˇQyôÂ9ü8§`†äĐ!FÔŖ&”Œ*E'8íŌ”Đ üŧŸZ2}šĨ8`R0ˇĨĀĮãI€cŒŠ~áœĪaJáa0y=úRƒ•\bõ&š[p zSßtätĨÅ$mÔ6sëJzãU!9éô¨É,{įļ*\`úҐš÷Ļ{2 įŊ vŽD‘>ünŽš<¤üŠĖIčEFî‘ũæ îMÍY=t=2Âö-BÎ;˜NQĮCÕOp}ÅYÅsŪ´š5î$ %Ķ #OAŒøŒĘē‚:× Ņž”uIąE*ŒŠb{Ruô9ŒJL¤ŠˇĘ­%™` [ĩ žĮkhâŗ¯~ũ¯ũ}/ō5ŖČ¨) E% °zĖŲëŅ–E,-ŽŸ0­3Ōŗ”˙ÄõëĶ˙fĀš4)qČ2ŽĨOĐņ^ņ§NÔmõ{ ŠŽg¸ą’- ũØää` ƒž§ŌŊĒi渕­í]¤ &<„õwl~ô¨ĨĐŦ.B­ä&ņPîTēc*†ū𠑚M&&|ŧ’?­'|+ŲüUđU¤ŧđíȉBŗ›I˛Ų tFëĪĄüëÉĄĐõk‹WēƒKŧ–Ũ֑ fPGlY¸2D šėp+N k°č+­ÉĻNēq yä¨ęp Î3ߐ;J°>õ-5¸‚;uŖéŊ)¤cƒĮĩ $''ŽŊЏ8ÆrqMÆ&3íũh¸äņÅ9X+Ģg0'š¤ÚCšMŖn ũ(¸5sǎģ‚ņI‰÷má†0GáRĢáXzWé׎8ČūĩvÂûû=d_(ēļ qĪ˙ĢųWd1)é#‚ĻĨîŗŖQØ÷ϜĢbĸļŧ†ō0Đŋ?ħ¨úŠœōq]JJZŖ‘Ļ˜„íHAnsJĒrsøSImøãĀRARZžŊh?.M ä“F€ô bŒqŽ)~g*¨ŒĖN¨É?…:ÍÔđŒŠdmšlņցÚá ŧˇ3yvņ™ŽAõ5¸|1´E2\gsĘwtÆz…kYXĨ°†6,7%SSž¸ö§cXÆÆ4ūļtmÜÂę0íÛūš˙<ÖNĨĨͧšqēK| IÁ<`˙Ŋv =ûŅ$jņ22ŖĢa‘ųTļSŠ8ĩ×9čiņC5Ė‚;x¤•‡]ƒ }OAĶŊt áĀtËxe—mĖ*@‘H VļŸc…ĸ‡sd–lrĖ{ÔܟgŠÆÚØ]Ūŗ¤ķŧôĪ^*Ē)?xAÁąô¯EuČČbrqTī4ģ;ėųöčÎqķŽŽzŽiĻ7Lâģ˛ĒŖî ]§$„W]Ŗ[IiĻG‘퐖fV'ŸÃ #DT*(G`J@E•*šĮéJn*vx;"qЏą´!sÔã­.zđiOËĀéF1“LBģđĻį2cĐSđ9Ņ÷BhcC€Į€0ÃéF3Í9AaĀĮJ‘uĨtųƒvĻļBā‘AđE0´/?ΘpFH9Į4ā™84ŋt`´™r1GŪįŊ)āž)…[ą CķôÍ 'iÎqIü9ĄšäEšĄÚZßëIÚ"h_ Ŋ—æOb;fģkM&ÂĀ7Ų­bŒ¸Ãn,= <×ĸČ"×lƒÚ€  dԄsÆ*΍ô•ĸ‘dV*ęrWShĖöÉ.w˛ääbšĢdw Ę •<NĩÖ.pķ]xdėßC‡ֈA–ρ֤†Ā¨Č}yŽÃˆ0s×ېąqG ÍG 6ŧ=b¯#^>s•E>ī'õÅZ›B Ģũ­%øHUG;‡§×¯įG‡ š;#ˇÉ+nDôŋkuõ§}57KAKų÷¤9=4í§Jv1Đri6P ĶœķJ=ņ@ņŠ' ŒT\a׊ qߡŊ! 9 (Ī=M(ëëšBvúsHP62qøŅŅ€S@Āķ€94ŖĪziĀÆzŌ= .ጠCÔķNSHp5¸ƒ֗OKáĨÜ5ŗ…e/8ÁũkŅŧ5đļ+cŪēâi†ŅũĀÚ?ÅôéõŽęūÚŪōĘ[" ‰°Ē@ôā‚8úVĐÃŨ^G<Ēëd|ØË,NņMÆęH*ë†÷ĐÄdÍuēˇÃũvŌōakm%å¸ÎÉU×%{eIā×*đKī °Ę“#aã(wÔņ׊ÂTåŅĸiė3܁ëAnÃb +ģ ‚ÚÖyƒžÅ1Ą`O§Ŋv6Ÿ 5éŅgĩˇWBÄ;’Ę{īėM(͜ļ@ä–į >oOέŲXKyĘác ‚ĮˇŌŊ†úf—Ūkz‹IP$H¨W$ŧ’2@éT^ĪÂú{ėąmJėĄ$ƒ(Ž6'ÔíÉĮN•´(YûæU*Z>éÎ[čâÚéewGEä ¸9íZÜQ ÅcȧîPqĪŊu :Dķ§9MŨ‹¸mõρ•ųģ͉zĐFFsНȁœįE1‡UÉāķRīęšh÷ëNã:= úkĨ’EÄ*ĄYW#ĨmėĘãÁF]rŧˆzå\¯¯§Ô×A j’;ĩ”ÎÎH/ąÉĮpI˙?•gvã$ôęníũ({敛tëMb`=)ŒP ·ŒāRũãÆ(?tãĶŊ“ž€Rāƒ“FqĮ^)eŊ(HÎ) î1Fzä8‡lҍČ#“K€F?•3![•FnaĖČ%”Ü3ëĶéIĄĸP†ŽĮ­E ŌÜĢ´yĘļe#ļAįļ9Š9ę}=h¸˜`zŌõ=84 0ņHėÄSš9;zR7ˏΤPyæĄ9ÎI=RÕčŪĖ>ņ´FØnM4’xį”ņÉĒ`áĶéČÅ f*GSbč[8§ŽKsÁë@9ęG­GËpŊ+åTI&œ`}(N)Ŧv‘‚A§9É SHíL9ÎOįM9VŠC+ď֗'oĻ=č ˇŠŅn‚NÎčôk F JÉ."nŧ2÷FîŊY ÉžÕįē-ÔöZÕˇ­'œÛ @Ū0yį͝āGzô0Ąyæ¸ĨWcŌ§5(ÜSÃf”ô¤?0æ0čNLT”Y‰v¯šæ•ūáĨ^ƒéHøØEAe;Ã͡ũ|¯ō5xĄ{÷­‡ũ<¯ō5|q@ú EPí÷McHÉ'ˆVÖHL‰-™$•ĘŒ8āūĨlž†ŗ€?Û9ĩŋÚ4 û,Ö¯ḗŒđĐJĮoÕO%~>”äžQ †í~Ī)ûĄ›*˙ÚŦÄpJcGæ!Yēú2äSj0īd…dœŽÂģ‚ũOLûu¤†ëΜĸ–YB䤈PãבČúU¤M€*U\PŨÚCsķ° ō˛•ú‚9Ąz4Í6âęDŪcRÉ'.Ũ”qԞ:W7ڝæœöš’DRIˌÛ÷â=ŲTÆŅč={ÕËÉîgš‚Öm„ځ#J‡"F*T`vã$qMį<ˇá[ĶϟŧÎzĩ|¨o)Į%•BęĒŲÁÍXä÷ũ*"Ŧ€Ž2+ į<×ĮÚ׉´âE´kk§ŗí[˜[.į¯'øĪ5åˇ2Īs;Ī<ōŧīɕœ–Î1×é_Axžō=7××MN"<°™< ûsÍxf‘ jzô­jĶ×.ŲWęOjá­Íώ:)ËCŌūܛ&ėÉqÉ FÁzŽÅ÷ROš¯@ffĮ| ō-/á˙‰F™>oūĀî¤ _0üāžwādëšĐˇđߊ´-.K¸õ ^ëÍŨ"¤Í (ĮĘGĖsœ÷Į­kMÔI&ŒįËĢšÚøŠûOŗŅåû|fX¤ÂypĪĪnGNšö¯)ÜäŽÅÜv)mß/lœuĢڕî¯yöÛé"gō–5XPĒ€ 9äžNjŧ9ëZĢîö8ĒÍ7d)ÍîņրNvĐWiäæĒŨĖ„\Éįړãĩ(9Ī}åâ–āpôĪ4˜Á,M;¨9ëHšÉäPōĀRZČRú,;X1 }qíūEBĖTĒ(f,pA$Ÿ ­ÍÂ÷ˇú„_lļž 2ŽÎH Į|¤Fsüé5tiļÍûy$ŋ\XÄōåļ‰F;ģ {VŨž‡mo}Ŗũ*iW’U>Āt´ ‚;[T‚Ö8ŖPˆŠ0…Z8( $€@=OžGá]W9ÎqÚš7¸’ōú{ĸFûD\üÁG¯ã“øĐˇ­aÅpšÁ¤#œįđĨ9nJ@[v:ŠŖ0<įüæŒړw–2HĮŠĒŗ]<ĒRÕWr]x\“‚zõíHkPšy%˙G€fWFl!ųÆ9āw=jw°ayī<8ÖŅŦlĶÉ ęIc 99sZņX؛Ÿ2Ū%ļŊŽ&UV\mĪŠŊĐsúÕŲmįK’ÖæV”ÉG‘FŌr9Æ:TŪæÉYÕžížd˜/).Ø< ôØ ¤žžÕ^ė.“<6—,BJ؂\1RNHBĮĄĮ'š™['ĨZ1¯ģ/›ģ Āú÷§`v€}i„āķīMv 9ëøĶXt _֎‡Ž•V&âuã­āõīA 9§øĐ!ŅH1ĩŋ•<ž Ā4ȲĮ==*^ŦNyĸãĐj†Î{ûŌ°#Ą<Ķļ’ 5qâhŽŪē/D#öįš.–āŲ¤wž .HäŒûVDŪ!˛ŽŅ3Čø;PŠ?\`V-Ū¯yv ģˆã'îGÆ~§­ÖØ–ŌÜęgģ‚&iãˆuÃ*ĪoØ+žsä€X&1īĪ5˰;‹9äžæšWŅvG?dwē^ŗ¤Ļĩfׯéæ{íV?u‰éÁĮų护pkĮ|áu˸īo#Ɨ9É*e t힧ÛėC8ÅsTŪį~üēĄ{ŒsRĮ;˜ „ <;xŦŲŌ™&68U'“ĘúS¤a´ÂŖ Į'Œx4íœpįRYRôūöĐzŨ/ō5ĄY÷Ŗ÷ļŋõôŋÉĢCëHÍ~PÍŪ¨§ü…˙íØčUyēÃŊ[ĒĄŋ‘×åg“f>o\ŠaspŅY¨ōiĪäŋ™5š$Ŗ.é$@{É#ŽŌĄŊÕ'MŠĄōĸi%ķã`T qƒŽHɸüi\ ŽõÎj„Z¤‘ÁnÍ%˛i_ŽF_ö‡'=¸­#o|ąŦŅŪ´Ž0LNˆ¨ūŖ‘íĪ×5‹ HnoQáōĘÜ1Û¸ŧGģŌ’NZ™UmGAŅÃA„Q"rv€2iūøŖŽxĨģA; R8ŖĻ3A{Đ!ŒÃ#¨*F#ƒQ[Û[؁´Ãįdhgč*|úĶY7`Aõ eY8 T0 2ŌĨÚę0§8õ¤1eÎ9÷ĄĄžu¯ø5ėÔŨi~tņ–ËÛõ(=WšܚäÎíü‚āäcŊ­ƒFĮp8õŽ ÆÚ/“7öŦ ˆä!gtnŋ‡ßĩ;Õ§ö‘Č“…ČëëFíÜĶU€ĪĖ?JqëŸjG8ƒ$āĐT.9§K€@ĪZ <|ÄņGSĮz1ģ ŅėÅv^Ō–Wm]Āe]ĐÁõÎŋ§į]š9ēûÖ7‡5[mKOQ,B64+§Ļ=m]qŒqPģąIGB įōcVX¤”;„ų8ÉÆOˇŊgëw3[Û@‘ į!‘F <û€GĄ{k%̈́ĐFûĐǎNk–ēĩž7{9ä’2U[䔰a“‚  ôū´ī}ŨĩcdéuplLü~´Øa3ą‘Ųœä–=ū*UÎ0sH= U—C;ž @aÅG<¯` ‹Ē ŨN3úԙ ` Ôŋ,!A$g˙˜ Ē͙ØĖÃŗũŅô*ÍŽĶŠŲS!ĀžÖ#õūTۜŽÕėņ¨ž2UâųÔúCŅ nt2éVS_ũļH‰šŲ剐TgĪpč˜),IšcœPxÅ7ZÕā]!ĩÃŦˇ1˛ÄŅ)Ūšn Ô`ãœT]˜ļú´šé’YŠˆíŽ$‰bN›”ã$˙üąéš¸OŦ}2+¨l#Ã˛Q•xˆ+æĀny G¯ĐúրžYĀĀcīKōË¯éTļ3–äėxę1M|ãŪĄeēã÷°¯ũŗ'˙fĻ=–æķL­įŽDƒˇļ==Ē–ä’ŒžŊEđ*ēŨí”C9bp0zķÖŦz{ÕîH—Œũ(ÆŽ)1ĮĖ:R‚IÅM qš§w­ŲŲ9BÍ,€á–1ŋRjÃK´ ō€z÷>ŸZāÉti›K–%ŠÃ'“úŌlRvÔëG‰l™Ih§ÛG?­r!ˇ"íĮĄzĘĩ…(Ā…K¯Ų PîÎR)Ŗ•ФŠY~ōį•úŽĸĨéŒVõͅ­æ>Ņo„tb>aô=Ec^hĻÖę;›$md‘<ŌXō?3sŒíž;ÕFē{ŠTÕįŌ“Ž9ĻG#ģH­G$oĩŅČČ8ļGB)ųä‚1ô­“OTbÄ+’s÷MTšŗ‚âŨá‘wÅ (ĘzE]Āėj7āŒ;y6ģāé´ŋ2x#ķ,ãäJ¤ŒĩëõįŽĩ€eĘãxėzĮĩ{d¨¤Š­‚A¨5äÚåœVÕå´+ˆ’L ë€@`?Z—ØÆŦÕŅĘ7ėt(ĮĻėsôŠ6ķœĶJ¤‰ĩ†GŊD‹90ë°†#$JF:žGĨČÆj,ą ĖĄŊYJ›l‘KM›^ĩ7>'I$yVđ´‚<ũæÎ#ž3^Č?+c=Íy‡†ĩ5Ķ5´–L,ЊF#;AäĖÂŊGhۍšã4¯ŠÕIŪ#†ûÜV>ģ6ëxĪÆ ûĘÄ?‘ü=ëO<sÅ#ĸË$ąĢĄęŦ2 nsV”ä}i:ôūuĄ{Ŗ´fYífŽ$åĖMĘ9ÆĮŌąėŽę†ËiQ\Ą9ÆFiŖ6ŦY>€öĒ÷Ÿņå98;PˇåĪôЃ¯$0$uô¨ŽËi*ㆍ‡æ ķ&Ī=ŋ:ByãĨ6'ķaōFTëT5mEl­E"™›ä \÷Į=>”žsDáOqQ$1G¸ÆI<:šãŦĩB2I!ws—G9qéÅoXki{x-Œ *YNėįĪķĻ˜ŽžĖÖ?7Bis­5âWŸZ“ËPyW(hG2iÛYģāSļ¨ÉœÃv9§Ę3oNËwoîr}”‚‘Šx¤Ī—"8kg§‘sĶõÍR“ķ¤‡!Xll ō9?øŠ`X=sچ!Fė…QÉ' Ēír@%`™ÔrHLcđ$gđ¤v- hrŒŦHęƝûЎō^OdĶ[BėÅvÄ27 õ~{ã§ÖšY#–602î3´!ÆA=:~uÕŪkVÖŅʈw·`Lķ}})š ÷—6’ItÁ‘NØ`ˇ¯åëQĻČM\ÄšŌ¯íÛi…ĨLq$C>ēŠŠŊ‘üˇWV …tē–ŗVãėŗG,¯Â„pvįøŽ+›rŌąšG2HüŗæĶŅÍ$(÷5ĶčūÕu"KõŲ 4[íUœffĪC×hĀ={â™āÚx‹Z6÷Ō˛Å~o–¤!|ŋLœWļȁUBŽÕƒŌ˛K;u:0øu(ķHã|āŗáŌ÷ˇS‰/ĨaE,C9 ၓí]‡ zŌ9?Ž+&ܝŲŲ¨Ģ!,>P?P0&N2ķĨaßŋŊ"‡ô¤éÍ4};ž}(;qN‰ą'֓Ũ)S‡=H/1æZüßōôŊŋŲ5ĄToī-ëåOū:jõC4tĸŒãŊ;\ū¤?âm˙§a˙Ąč;MsÚĄ˙‰ĸp2-†9˙h֔ū$gWāfąöČȖ–H ų•Ô0’sĀ긎ƒÃ¯4ąM4ŗČᝑcf,kpO'üŒW&Š žRūíß ģĻ;U*2HČÉĀ$g#¸ŽãGŗŽŌÅ@ĩkyī•÷įŠÎNjĒXšQ4A&ŖeöcņŠ(Ú3+#azŌ+dŸcŠZž:Đ9! z j>ėät4ėd`ôŖhԁĮZj1$‚9ū : Peæ‹Íė\Mθ;1´°ā1séø ÆšIímí´¨8iF YėwgĄú}k­ĻŋÜnãĄĢG9SR9}ę%× Đį­6g>P*A‚sZŅév;™ūÅl7ōqŒū•VMÉØ˜üÛpNJDä)ü:Ā ŅbS7‡kfdĖÉŒœ’~UQ–cčs^}â'ZšÕî¯EģHË*€Šŋ8ōįŽ>•ė6ÚuĨ›–†Ž~f˙žŽMN¨BœqÖŗö÷{ XnefĪž/,.´ëļˇŊˇ’ŪUäŖŽŪŖąJ…¸Æ1^Īã? A­émqŧĮuk4rg¨ā•9õĮāk·†mļŠû]ÎH˙g˙‰­á55~¨ã̇p–›ã*ŧeXŸJŽ'–7d`dDÆ[Ązw­ WE:}Æķ&c‘ąīˌ×Û¯ĩQ1Ęͤ…—|Ä3íŠmÚÚ2e!Æ8*Gį^áoCĒÛ-œ’yo OņÜ{ãúי˜X+$n“œc‘ëƒųÕģI䰚‹\$°ËŽūߏJ™'šTįĘĪc-…'¤-ŧ`q‘ƒL‚æ+ĢHî pņČ앁â¤Į§ZwV:ŠēŦM&wa™šŦpxükŅ4ßøIá–ōææh­ü¸íá`: üÜsÔWvsÜfšûŊ3DŊÔ´į’+dG*Ā]Žŧî ž=¤ôÔšÄj–‡A×§†ÕÚ5B mžv¯9üĢ{KŊ… c°Jŋ,Š;ūŊ\ņbhˇZdW“JyPũšxÁ%žRĀuSƒ×ôŽ+‰#$Ã#Æä`”b)īĒ0—¸õØėĸ2 "3 Äž@ÚO?6Ū?Zâs•ŪX–nXž¤÷ÍL.'Eˇ3ŒtV~ĩÜrÄ÷ëÜĶHÎsOa1ĨKAs˛R9ˆpÔT ž¨Î8)؅tîu­â+û˛HĮĀŋÂŦYk6פŦe•ĀË#Ž@ūĩĞ–ÖâK[„š—^6ž„zQЧ:{ŖŧķšéŠO; ĻĒÛNˇVŅ˃åu ôöŠ cōŠæ´,€  õĻ•EËgœzÔ{°ģ}:ŌcûĮˇAEƒ`;[#“Į§Z§2ŧÛIwģŋ’‡äFΞ8ŌŦ\N–đÉ< ųqŽæĮ9úW=w¯ŊÅœĐ P‚UÚI“8ĪáRûŌÜĮšssu#Ē„ķŗ.>öĐ}ũÎMFĢ+K˛I€„œ•næí‘Đԏ ČÁ÷2āc q‘M°ÛQrzž˙MŽeÍ­ÄiaIn 7c€}3NI—‘2c‚IĀ¤ØĄ€€.=M=z‘tu î­,ŧLĻũĻDVÅ"79ĪÔqŸå^Ņ#ŖeC Ò3Í|ßōÅ*I˛KVS‚čEKs¨]\ŪKu4înebÍ āîõãĨa:O›C˛Ž%B­CįŽy¤Ææ˛|7­E¯hņ^Æ0˙rdĪ*ã¯į×8ŦÎÛĻŽ&??Z\ƐQÎM…ã)8*LSqO‰76ãĐtŠV5^Ôė`tÅCe$Rģ8{oúø_äjøúÖ}ßl?éå‘Ģũ)&Š9ĸ€'n‡ÎkæõR' 'Ų€W+ģqíŪē6<åĩÕ+ĒCsO4p¨˛íf “’ĮŋáZSø‘>eßÅ}“í1Íå#3Ŗ UrGcúbģ=: ĶāŠY<ĮUÁlįđĪ|tŽ'XKÁ:\څU˜åfäm,?‡‘ƒíĪ5oÞ$ĶėĄƒGPO•Í¸* $ōwzãāqšēËŠvŪÔ´ĐsNŦMÃŊ- ĸ IFhúĶÆ(įž”ŖĨ¨§lFGsÅIœŽ*´Î§qÆ›ĐhAĀ< 3œĶ Ŋ=)IëŸL ÎÁp8ëŪ”nFvôŖ>´€Ą¯ÛK}ĄŨÛĀģå* n ƒŽ}qŠān"žŲ‘nm愚ÂīR؆Ŋ4ÜW=}Ĩ˙ÂKk<7 XËŦF)d”<NœđÆĩ§S“C´šõ<×ÄV°Ŋ˛ÜI*Ã$@„ČáķÎ߯ˆį°÷—VltŊNU$1Íæ†ÜŖüōŌ¨jŸ`žk3ĘIō}ē×bw<šÆûøCKŽ3]Ž™đōöęÂK­Játõŗ"˛å†rŪƒÛ¯Ō¸Üãp8Ā$d(RMŠt圖įE Ëâ$ŗ-ĻCæZ#Û&r*¤ķëĶŊz29x‘Ę•ÜĄŠ‘ĘûVg†bXŧ3b¨wüãģĮųÖ¨äb•—CĒ*ĘÁ’ y'ˆdwņF ŗcÎķxAÉہˇ ëgīuâšĪApļîÚ}wu‹y—†'œp9ãuS2ąæŋx>îĩ)OˆXÆUžđ%H#H8Á÷(û§Šo}AŽišÜ2{vĨčyéMū.œP„æJ\ū”™ĮN”Įj€Ûœõ  ž”}ãšOŊĮJ<Ži¨\XˇîX‰ËFŨ?JčŦukk˛f9ŋ¸Į¯Đ÷ūuɃÎÜqMĀQƒĪ4–›)ÛsŊ<ķŽ}hÆFH?Zâí¯ŽŦ˙ÔĖQs¤d~UŦž$_$oļo3žÆOõĒæîW2fÔŠÄ/ ‹šHaę+ŸÕthŦ-EÄM. €fČU9öĪ\w­‹û}@•ˆ¸pģ™Yp@ūUzíâƒOšI”đ*3øjƜÛvgf&Œc(œė6ķ^OŅ<“HÁQdąô­Í;ÁZÕö˛Út–æŲŖ§–L2ÆČäėå]‚<5qĸŧڝĖQI8‡1ÂÁŨ˛ŨÛĮ#<×]ޝ~ņÉ=į‘hęCĀn`Gā•?đ#×ĩ­gh…,"qNG!āí*MRžEÔ'š˛‹m ģŸš|ü Žũ˙ í­u[;ļTŠeķH?#­Į`÷¯Ĩ]ŠŅ!UDÂĸ *¯@*NÄŨYH…ķĀŨ 1Æ×ėsÚ˛æęuÆĒȖŠ //<Å Ĩ\„ÁĘČpĀņH=sĮQĮĸÍw>ЖÖS<­Â‰G–š÷n@i]fK5áŽ_"(Úią¸ĸROA×ÔđxĻG6Ąmķ]XŦÃnCZžN}ÕąúRéP4vīö†íÜ´Ė€€Olgœ`>•ĄéJãQęT°Ŋ7ąĘZ…ãpĨ䌨aú0üsVūĻŗėK5õüǐîĄIîę ļ=žP?ZEoī-ũ=/ū‚Õ|{Ö}áĖ–ž×K˙ šĐQKEJŨ `ę<ęk˙^ë˙Ą5oˇ ×;ĢEæßųEŲC[(Ę1SÕēŌ´ĨņWáflĶ[MĶ&&{F-…ÉāsŽ;āûõ¨-4ËvŧžvˇÕĀ¯–Xœ–<ä÷Į5zÎÎ+8Œqgibäŗd’NMXöí]N7w9ÃĪ$3ÜÚËtîĶHA!1ƒ§đš:÷׋ehķ°ÜFŽqš‰ĀsīJĄdāä„Pj?˛@&YJË’>c‚qԎį¯_ZÅŅ×CUZŅąŗoŦŖ:Įu˜ā6íČOaģŒ~ V¯Zåˇ$ŠW‚ÁR*ö“x!gŗžL`î„ģu\rš=ÁĪኚ”ųuEĶĢÍŖ6訞æâ2ŧąŦcĢŗãYskeÛũ‘?ŧvÚ­ūî'ëüë4›ØÕÉGVlŅ‘X˛øŖN"3ũĸGōÅēŽdŨ‚qŽ˜ĀëŌŦ&ąm-’O!0+ģG‡įg<ŒŒpyéEšÜ.*ƒ€A>™Ļ續SŸ~”āP #c ŠlsÅ:îŠDp VšC+•hÜåpŊ™¯Í] cŖ1.r ^ÜR°îVĘ7\z@v‚8õĢR2ŊķÍDMļÅuBą ãŽßĄüĒyBãĪN˜ĒV,Ģ{¨BL)á”rpX7ëW@+Đ ũS´ åĖRmwųŪhã#8ŽØ֓?]đ–“â2ŪC"ÜØ&‰öļ=1Đõî)šOƒôŨ*÷í…ĨģģŦk-ÆĶ´ā9į¯ZčŠģ~\įŽiķģZäōF÷ļĨMJ+‰´é㴑c¸t"7uÜĒOr;׉iŪ[¯.—ĢÄđ<Ōy\rxÁØ'¯wĪVFš J-Ž6(dœpŧ€U€údÎޜíŖFuŠsZWØ Ŧ Æ8ÅÁ<~ĐzR```âēŽs ÉíĶŪ ’Ø=Ô7 Į|JĘ<|Øę? ˛ą4`ō +…1ņ”pE¯°†BbV‘•qŊ‰<ŸÃĪ‘ÎãÉúWOã˜ökęųáíĶķ Ãü*Į‚ŧ ^;Ķ•1’ÆŊSRøUi#FtËé ųžq8ķ=ąƒŸŠŦ áŨū§=ō]Cw KēPŖ(î@ÉČO#ĨjĒEõ9凊‡à íõ§ô4ėnb1Æ(û¤/sWÔÂãvíäi¤w"Ÿ÷Z“oņq@›ŠŋŖéSk:Ŧ:mąQ,¤ü͜(œœ}*™RĀt5ô6…ĻÃĻhöļŅClą(,š°2IīĪzΤÔQŅBĩzė:Đžë֚„ϞÅÍžg˜X1ÎA ņĪ\V–§ābįNš…Ҙ}Ā3㠜c­z7AIXûië M+cá?‡K*ŋÛ0ųąĄl?‰ļŸ^ÕŪhÚŸ ÛËŸ‰%ČĀšnpSô­*C›eĶĨ-ĮÕôûmNîÎ6ˇ…îc%ÖfMÍ ŽĨ} 8ĮįÚļ*­Ũ ŸFÂ+”˙W(cę=ĒQm\¯vö–đ„ah$UE,v`žÜ‘ģn}‰ŠWU˛ŨļI„¨,°õą‘RŲ\ũŽĘ)ČÚ]~eūët#đ@č‹Āü}—ĩM@ŧ;œI`Ær=¯SUäģkI’)‰”¸Â„Œ†-ÉĀíĐLcžĩr¨jÖ2ŨĀlT\E":î8 †Šl3Žĸé°=žo  üã9ų'>§'“VęļŖį]i­Ū @ČęCz€A> ū5wļh ”o?Ö[×Ō˙#WûÕ ĪŋmĪüŊ/ō5~ŽëE7Ĩ`ž sú—ü…ĶėË˙ĄčĀ5Īj_ō__ŗ/ū„Õ­/ˆÎˇĀČp?NŊ%(įŠë8Æ ’6ņœS‚– ž:t/úĮペ~=4ībĢM=ŧjR’+lÛŧúôĪB ĩ“œb>ęÛMˇ†Üé¤ÉڒÃá†:“Æ1Ÿ^Ų¨›ih‹„Szģ|Ũ%ˆ5–GCōqSÚ][Ũ# V,‘ŧ!P>™?…:úI¯ļ¯‘Qų€¸/ķ8ž8<ãjT…Æ=xĸ}4“˛e{éŅ#Ž6ķ^Uąį;s–éČųA9ö­Ģ8^æî+ˆĄH,b’ÚU˜§v; R´_øœÚycæË`qŗ˙ãÛ?ÎkĨ…gīcî”Æ“d¸B•‰*>Šxé,ci‘3A(wÄ#Ђ#ųUē++ūÍvÜ5ķę‘(?Ži?ŗ-™ĸķÛÖrdüŗĶđĢĩî*’(h ŠÄīŠ§¸l”ōÃÉåį¸';@õŠ,´˜ g2ĸI#Äō&{*žā{œTšTyĶ-Ëã!0pz‘Ôū'šŧˆĻsęNiMôĢF<#F§–X‘[ęÅd-Ŋ֝q§5ÕÂ8 Đ28 āŗŧĮŠHĮ' Ē—ĸîŅãrĘ\† :‚#¯ĐRjā( šãÚŠX^Ģ8ËįíJ¤m!°3ÁĢ‚96ŽGPjšAŽ#AŅĶMĩ[k(Wĸ ĀúÔäķĐ⌜rkÉĪshSQØwĩ$2îėzŠyn9Ĩ7aÛđA2ßrE‘[Š0ŽÔnߍ6#ˇ*q‘Zrū&đ%ŽĩlĻÆ;{Ål‰ Žá€ëėk‚ņ7åđ֕ë_­Éi„LĢ Pšį;Ļ?öƒĮ5ĪxÂÅ5o ŪĀ DķcÁÆYyûVąŠ%ĄÍV„$›KSÂēąÍsž­k kļ­<“iwJį{ČĀîqî+WĀÚ ÆŠ¯ÚŨĩŠ66ÍæHîŋ)8;@Čį’Ķđއ++žtiJRQ°žđMîšp’]G-ļœWwœTfNœ(ÎyĪ\cŽõíq"Įĸ *€…K\“““ģ=Z4cMYúŌöĸ’¤Ô^§4t4‚‚ĨĒēÉĩ˛y€ėUž˜…û įđŠ..ÖŪIĨ'b ļj­p÷PIY8!RŌ˛…bIü¨`Zˇ…míÖÉUOR{“īRöæ™”‰ļâĒ>¸§ĐLũšyaųVec0sĀ’6`['?/^4 v’Ũ×ie€rVžF”Fv‰žeQ’ČÜ0ūGūPE¨CmŊ^9•IgR`ažøÆ=xéBŊÄjgĩW¸ēJ°ĮÍ3 ÁęI#ŅĪr#d:‡\õÁĒē`Ũö™ˇ“6É Ée>€ŽÃ=é sßHSlVsũ đD!Aõ.21ô&ĒßëVQFíĻš`ŽFßōŽ‹ ”u$īÅkšB§=č3ÉšŧŊļyāōRYČ*ÂFm sœu=jį5$ņčˇ{[ g:ūéA?,ƒøTtų \T˛x¤Ü"ˆ NÃ=˜”Ä2ôæKoúú_ũÕņÅfĪ,SĩŗC"HĸåyF}ĶéZ4 \ŅEa‡•{ĻMwp“Åp‘‘Â"ųÁĪ÷‡­j‘ōšbŸ})ĻÖ¨M'Ŗ1F‰xåú ÷˙F?ü](Ņo9ÍôøøēÛ QUí%ܟeÆ hˇ îĐp9f<˙ãôåŅīC ë~y˙c˙ÅÖčj0DlÛ¸īœU{Y÷˛cč×Ŗ“}o˙€Í˙ÅĐtkÖ8ûlë˙Í˙ÅÖԐX|ÛˇtôŠj}¤ģ‡˛‡cčןķûūŸū.‘ô{ÁĪÛ <ņūŽøēŪŖũ¤ģŲĮąÎ6‘Ē­ŌĪiĢZFëFÁí ŽH?ķĐzV°MK7™˙Ž ˙ÅÕ˛ ‚ë@cz—+îRI+"ĻÍKū~-?īÃņtlÔņ˙Ÿ÷áŋøēˇ† ä€}¨ÚN2ĮÖĘN5%ũĸ͍ę˙‹¨åĩÔä‚TvĘdRģÄ ņŒž´N >ÔĐJ6;ONzR°#‡P†5&ŗTP@…¸ūOŲŠĪ{OûōßüU]ëGJ,|‹ŠÛ÷ք˙×&˙âŠQu€ųö‡ŽžSņUxÔG÷MĮÜ?Ĩ&˙F¸ŋ(dk Āōâܖ+Ī-Į&Ž$:„Q,k5ŽÕFcsĀ˙UéJڜÖúåfĩRzâ6˙⩆=UIũåĢúæßüUj(8ĄÅ™™JځāËjŨ7˙NÛ¨˛Úįūšˇ˙W'Aˇp ÔfEä‚}Ģ7lRw+ŪK_ûößãF5ģíī†˙´0ātõ¤ģ8Ŋ%Žå%‹ģ–Ûũ†˙x‡PnYíž›[ήě ÎzšŒqZŲäĖãéį6Ÿ÷ÍHøā=ŽO‘ŋÆŽ”v明ŲO†yk_ûåŋÆŖhõū+\úáŋƯĐM™Ļ-Hždĩ#¸!Š—Vš…Ũš‹u¨”ũÖ=éZ˜¤Āíšw>UŋZžyáŠņ­ú*Ē­ P0Ü0*ãŽå#ÖĄ‰Îv͌Ņq“¨Ō×ķjLę$t´˙ž›ü*įJNƋŒ§Kû–Ÿ÷Ķ…28õŲÎmÛ{nÃHÄ/`qĀãõ5š(¸ķ¨ŽÖŸ›…ę\ļŋ›UĖv¤>ô€¨´EĻÁw5NŪ=BĘGŽ1iå;ąĀ!īŽ:{}kcŌ õŌ°Ū]AvZ˙ßmūģĩ7mĩÆ;3…[*2:Q´mÆ8ôĻ€Ĩē„€ļ¸éŒĩ*žĸĀámz˙yŋÂŽ( 0qzwãE{‹vƒėzlhü9X‘č28ū•ĸ‰yj‘­ĸFŖjdžĐW;Rf†+âaųu˙Į¨Íų< _ûéŋ­ŅSa”åKšc)$vŽ­Õ[$ŌĸK9c(RÚÁJ}Ũ¨F>œqZ&Š 2F›,ēŒw,°ÄÉ g1ģüāŒŽ‡īw­qŠ>ķëO¤ņEQ@điˆ~UúQE:–Š(Rœã QE1ÂIĪū皊(`QEQEfŠ(ŒÛ”ã'œqM#æD:š(  )hĸ€Ŗ”r ôĪ4Q@⌏^hĸ€<ԃE€F”‚8÷Ļ Ņ@úQE5ĸV9Å AúŅE¸úAÍPM"Š(´ƒ§ŌŠ(('ĸŠNĩ  PX`ÎEPƒÔĶšÅPsKE€LķŠ4QL uĸŠ(ĸŠ(ÅPÍQ@ĩQ@ŖĩPrųõŠ4QC(ĸŠ@˙Ųleptonica-1.86.0/prog/comap.100.jpg000066400000000000000000001137131506303110300166310ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀÂÎ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷<āņGz3Iž9¨qÍ!ŌŅ@ ۊ:vĨČ s@éJ)?^ôšâQÛf€GjniAĪSLŖˇph )sĪ4™æÃĻi€î:P8Å7ŽÆ”šéHFi4Í8riqL šPÔėQMÍ(<в(úSAÍ.hÔRŖpĻŅIž(4´´™æŠZ)3E0Š( Š(ĻEPEPEPERĸŠ)”œŌ“Iš 0ņKģ­7ĩ!#Ži„qNcĨ1‰ ‘L=iääôĻ1Å0ķF=čŨ‘IŠC,œĩ͍rúM˰ÚŦ~cĒîfÎĪÕŌ•Ęčņ¤ˇ¨˛"ēī¸8eøÍ2:–ŋļo@û–‡ūßáGöÍî?ÕÚcĶ{…kũ†×¯Ų`˙ŋb”YZ˙ĪŦ?÷ė…1ÜĮūŲŋ˜- ˙Ž­˙ÄŅũĩ¨–Ö„Í˙ÄÖšą´˙ŸX?īØ˙ >ÁfzŲÁ˙~–‹\ ­ę˙Į­žz¯oū&”kzékgĮũ7oū"ŽD4šoî,ã†ØÜ[ĸ4¨"\¨|íĪöšĩũŸdGüz[˙ßĨ˙ B3?ļoŋįÖЎä\7˙@Öo°Ņ-}ãáŋøŠÔû–1öX?īФūβ˙Ÿ;ûôŋáB0ë7Ā˙ĮĨ¯ūˇ˙GöÍūãĘÔ˙ÛËņĻl,€ĮØí˙īŌ˙…`˛žtU؂W|ƘËÛwãū\-Oŋڛ˙Ņũš}Ā66Ü˙ĶÛņēĒG>”‡$qŠV5¯ˆ¯nmŖœiöĘdŠēbAî?ÕÔĮ[ŧëö|ã š?üEc‹+ˆKũ’á#GbÅ$‹xRy8äc'žũhGÔ"m¯oÃ<̓TÚoMĨgŠĻ5Ëá˙0ëÂíŋøŨ6Ū[ÂŌ> 3…ē$Ÿ@>JƒiĮōæ›,BDØÃ ö'ņ¤­ÔíĄ4>'šžibM>$G­rÃdšČ>ĩcûj÷<éö˙…Ņ˙ãu•hn|§ų•””b~l úõâ­ÆrëU(Ųč(7mKŸÛW˜čāQ˙â)šwŸųÃõûQ˙â+ ˙R6:†Ÿ<)í'˜Ō`*⿞5͡kjļč‘ ’ &F+8 ąņČ1^į­MË;_íģÎ?â_ˇúW˙aJuĢŧ˙Č>,û\˙öÆßkš“ęKŗMkn×k „mCū× ŧc¯CWŦõŗqŦũÔhŗÃ;^EÆõôā0āđŪ” įKũšwųF~—?ũ1üCp’F§.\ā>Fz˙vĒM †•ƒ°Qœ ,*†Âæ[ËTžKgˇ,~TsÎ=}Ē”šēå¯/S_ûjëūé˙˙‰ŖûjėuĶ—ŋhüMQ–@‘3ŗIô™iž™n&>lĄU¤d^ĨSŽÎ)ZŅæ7ŊĘnCâ9§2ė͞#r„‰Æ qĮ>ŸPjĄņļŨ]tĪėŠÚāß$Ē@Ī5WN-k¤ŲĄFŪņdnÆI'ˇÖ ‡1QŊž ͌‚"<ÆyÁãÚ´ĨĶr]Ģ6ŦŖÜč†ģp@?ŲøL´ŋۗČĶū˙-dĩãJ÷pZĄ7áx•YˆČôĻØjååŲ Ô*d¨$gžĩ.œ­qûHŪÆœž"žôŠđė+"œëRL –Ōæuũędęą=ēZ@˛ lŽXūėz‘Üuũ)—“ÛM:}š]ą e‘ˆäđ?SMS“JÂu[šĩžķF4銰Č>l|ûę”k˛įūAŗ˙ßČ˙øĒ§˙)wíߎp3QŧŒ—Q \ŖĢĀt#ūĩ6mŲshhoIĪüK.8˙Ļ‘˙ņT }ËmūĖšŨŒã|]?īē¨§ÍŒÕÔtČo”4ĐũĨˇEŋüŖqöëDbå˛ĻŖģ6˙ˇe˙ Ußũ÷˙@לŒ˙eŨcũøŋøē§ŅĪMĐōŦ§‚)Ãä“SĒeÁŽ1˙fŨ˙ßQņtp˙Đ6īĻ~ô_ü]gC,¤ŋ™—‡!9ÎåūõNO9­7 ĶšgûuŗėËĖ˙Ŋ˙T.|kok¨Ác.—¨ųķ˙ĢDAüwĶŨ˜ĩ°Øā‘o­rÖO}ŧļúģ!ŪmŽš@ųę=ĨmF’¨¤ßOŧį¯UÁÅ.¯~‡h5æ?ķ Ŋ뎱ņtīíÃßMŧë˙T”‚$Žš¤ĪĖ;{Ö ˇ×ÂĻãĻŪ…'˜ŋøē†ßÄđŨ@“Áay$N2L\˙ãõg#æŖiĀP z }<Äīrá×@˙˜mé˙ŋ_ü]GˆŌhVTĶoJ0Č?ē˙âęŗdsU-‹A4–ŨT éŸî“ČüčhJéŠöhÕ:ęãŲ÷ öâ?ū.˜uą˙@ûĪü‡˙ÅÕBÃqį$R<įķÆ)rĪöđ˙ uīå˙LūÛR?ãÂđgÔ'˙UōšŖ`õä{qGPO=AĮlÕIĖĶKwųą¸l`|Ãn_^;UĀšq“é@Ā^^ø ,$r,ˆŽ„0a• ä{Šx?R0\ŲîkEY!bIžR§ŠÚz~ķĢŗĮs’0G%Hn ‘ÔĨ‡Ų¨Ųd8‘8õĀ?û)̧ŒįCU/ĸv$ˆn’GVā‚?"jx%KˆRh˛QÔ2äc­\•â™ŌM wFėâVîļ?LŌŦI$J^_ö—ŊsÉw¯C6ī˛I2ČX´nP˜‰s´ § \ÉXŧMx$ͤL’ŪҌ– tžN~Ÿ•Múo]Čļđž ņõđž¸īô Kh‘$Īą#ÎC8ۂkx–âl@ēUÄW2¨ķŖmƒ-´äātÎ~•3x}eÔYį‚-—ËV,ON˜ į­iIS’÷ŒĒJq~âŊÍšZF…ŗFΜ|Į~”čüÉ"S2„“*?•:(Âä `ôqŽ1PĘōË3[Y yą†sÂGčX˙AĪĐsXÎqŒu5Šmˆ!]Zė@ Ŋ¤aŧöBBŗpduîH˜=j=cW°đ­˛%­¤-3üÆ$`‡hãqîũušelļVVöĒۄ1ĒnÆ7`c4˝6Ęô˙ĨÚA1Æ3"qõŽW„ĒŠWMĮ˛6ĢN~ÍĒNŌîsö÷RM§­îk#ÛŨÆL1*“åK’ œtR{ô=2*/XK4÷q%âĖ÷2ƒ2**0BČ+yũ+̆­ĸH`‰"‰` —îœĐņmFQ‚Ņí䄨ģÆRzŖã–Ęų!–g–)W1ŧŠ ī%rí‚8ėjdŠHPšä㌚ąĒ[ÉqmÄĄĨŠU‘W8Î8 gž Ŧč šÔnÚ)bšĩĩD†6´ŒIųwxûžŊkjX…ėī'¨JŸŊ ‡P/Žm‘FĐ Ęg¸"–{ļķ~ĪmŸ&0'jîyü†jŨÅæŸ¤Ig§ŧ"8î‹,aS*Xc‚=Ni[GĖlŽ^Ô‘Ē´`û2>€WW-ĨR6Ob9ŽŖ-ˇ›åæ]ĸB:&p?:P~īĘĒÅqqˆîŖ"FFxĘŠ]ÛNÚIÁw9Č Ô“Äˇö CĸČŧáļ°īÔVņjZô'T´&;>U$eŗëT.ŦôËûąmso’Æžf:Į^œâĢjšx:yF‘˙u ķė p0:ûÔúžm]'ĶËo.?1pĖĒÉį×5ĐŖËxËô0ræŸŗ’4R%Š$Ž4 ‰ĀUSZâ!3Ddũ꧙ˇÛ§øÔŦ #‚;ŠŽg™ZŠpΉœl\}ûV)]ęlôZY_Ûj!žĪ r€o^ęHÎ YķĻ”ŽãÄ{Q.^ow`5ŊíÆC ˜)*`íċƒĮôĒēŽ•kĢڋ{ÛCnVzUš_ʏ~Į|c*Ŗœg“ŠeĩÄ7p‰a`čGŪūžÕJR‹įŽ–”dš%¨øŅa‰cAĩT`)Į“č:ņO#ííPŅgkÁ}@˙õÔjŲz!į„Á§éŒū,‘[¯š@ĄLŽÛ‰ĮōǞĩŲ.Mģ"-Ķ qnĢ÷üä!Eĩģ!ieÍ!9ÁÎx€ĢlH\ņLžjNZY QÖíÆ;i2GôÅ)-œž@=1Moŧ{Š’ČÛPĮ|ŌäÆ?F^ŧš—E9ģŋŨhĮū;[‘ŖquĮņ ˙Įk_ĩHË]øŽgB˙¸Žz¤ŧĀÅtŧdW3 ŒÜ@Įę¤˙Ѕ0:b3G Å§´L V6¤>ĶŽéV@|ąŗŪJ=mQ˙}Hüļ{W5uŖë7šũåÂjØŲKPĢĀģŽ Žâ@'åL—<āžJĪũ 1˙ ň´ôī˙MŊ‡áްuŋ‡ÚEĶ6éb‡ėōsÎčū^~ øÔzĮÂß ëVۿŒ~HŊY œąîÎr[ūšoÃŋßxßQĶ%ŧKģ &ÚČ׌0eí÷WĄõ }ÜGJAŌ” Čī\á˙_8ū[?oöt‡§ÎIÄĶ|§sķŸö4^` G˜ ’3ĐSÄ<âhÉë÷†k2îÂõĩ ģ›qlcšĩH?xĆrOž×ĩfIáYžČņ*Ú+5Ĩŧ ã‚6bÍ÷{†?Ö§Qčuâ OīcųFXnĄ¤ Ё“Žq\Ô^šŠ{‰<Č$ųņąv9 #+áy#c­:_^\Ër&’'‚íã–eU‘Õø(@ūîŅž>čĻŽ-ŒHŦBGP"œw“Đ~"šˆŧ1xZâ9į…’æ! Ķ(*ėždŽĮÆHp>ĩĐiąÜçA㤗 W‘NC‘Æ{rzū4žĨˆÜ;{tŦæŪąÉ¨Xąel™!Ú“oŠŅۃéƒÍPĶŪæycģļHRB4YÚëŒäÆŠCš-“)ZI ܎֞DFX§;Œ™ÂĒã9üx¤Hnm‹EorBy@ī´Ąî:Š‚ÎtŗŲk1ÆŲû3?Ę!yč@ãƒë5;†{ųŅĪek-õš’ē(;ĖVVĪžËÁ—$1ė8ĀöĨ’Íė§Ēë#*•&gÆã ˙žkWrîÚHŨŒã<šŠŌžÔ¤ÜÄÛÚ2áGF—¯?@TsíJŽ*PØŖBc#íĄ<øîĨŸoÎÉĢëĘĮ5 ēˆS ž*)ˆX¤ŪzGLö¤Ņ|A{{ŠÜi×6!&‚BŽčß*¯88<öZē4 ;”ļ@Ín˙Ff“Ë ‚zõã¸r?@ü*1 Æ€%Ŋíô ‰1˙}†55Ž“­ē[ų×.̟Ŋ)œä“ˇ’IükŽĩXTVGT#(Ŋ‹ŋh€Éåy¨eÁ¸gōŠČÉĒ3ÛÅY¤h~Đ:  Ô˙:ŧ3œvŽi$’h¸ˇĒbįwáJÛÍ4§ÖŽsœÔib…ˇŖâŸJ\š™ˇ:l×öŸ}ž#ol˛ģs d~•¤p8Ĩ$ˇJŠæ/:‹Í’"Ãã8aô5̍æâ¤öЅĩÔį4Í=aÔoîËCæáėĒ )8ÜŠÕmšÆzōk=mŽ›,ōI!„0>īŧO%_Ԍ’=qę*+úõÄÄ<ąXDÁFÂUĨ8ÎwutėG<âŊ9UJ÷šÎŖgĘÄׁíaąųŨ܉Ã0g' __Ž+I­õų3YĖGXÂ4gūúÜßʤ´Ōa˛šiáY (ĸI É'Œā~UwĘ*Kž1\•1rm(čaE&ÛęeĨļ§.ë1!`FËc†R;î`2 öā{ÕOļj6—ˇ¨ŲũžÅl–#æzą8ä¨žĘÆ%U\z™<"ęŲāš"É *Ã=AëS Tãņj9RORŽäe ÷” ¯^85BkgˇēŽÉŽ$’㑁rĻŨŖ†3÷žŧuĒđ[ŪAz°Ž$ą ;ļdÜBOQå^6ĒG™3 7fe#ˆöéLXŅ2Ɗ…‰$Ž3õ¨|Ŋᘌ•ՄiŽpyi9pIĀéči’H‘DŌžĒî'=Ēm4pYc N7dqū5VŌŲīlŖ’ygu!ˆPûU†N8r1ųÕÆs=‰”õ˛Üˇr\J.ĻVEÅ7N:œwįŪ­–ãĸúæ™(Ũ Žj)Ąr6ĶŊLŲIX†=_O¸•aKČLŒpxÉü*Éû‚Ģt6Ø7)z v§eÉbĘØnÃĩ9rũ‘G›ígŒāuüéŦzžĻĒ…+W<)Øbr*OOÂĻÅ`ü¸ô5ezãĩFÁ€<aíH…‡Tā€8ŌsE ŨߑĶrč5Žxâąt+=ø=wĻGüļÎ)l4ZĪ#šæ|?>ßū¸É˙Ą-t ķ\ŋ‡qæÛᝑ&1ūōĐIĐÃwoq$‰ É#ÄpáNJžGķ~ŌĨwXŖi‚ĸŒ–=ŦKĶė/.¤ˇû\#l@î̇w ŋŪ‘˙ČĢ’ę0Éĸ­ôlĘ@uŗ•÷B(õ=žĄixqmsÄ sąŗ€zUž†¸?øK|áNH/uŗôq,N“Û´o´á†ė Éī“ę}jČø­āƒĮü$6ß÷Ã˙ņ4“ 3Š‹Tą¸”EÜ/#UÁ'Īō?‘ôĢ< $ää⸭_ jWHžžņR_ ˇo,ČĮEL%cŒ“šęĢ<ĮwôûŋüM4˜X’ßTąģp–×pJĖ Ž 88?­X–hāĨ–EDQ–f8{šãī¤wëF*ŦkÖsONö×đüÉÃS•*J6×ÔŧĮpĒ÷%"’)ĖRHāųjgˆÉ?—Z›<â˜ŌÅ "Ë"Š‘ļ cĮĐ{×*|§CZ–$¸ˆŦˆPjžé­d†6—ÍŠC°2œ2{įˇĨg[ß5ĻŽ;ˆîŠlõ'°ųÕgkB"‰Ånė6Ę͉î×=2}ũĢXĮK7§õø™Ę]–ĻŽ\šAķôâĢģ…ŽĮYĶŌSĩ‡â?•6IīhŦí•—*?ŪČ@k5Nû2šģ– ž9ĸ%71SšJœcROQTüÉė€k§Yc,‘WiLúL÷˙õÕĖ’FJ6zlwõĐu š‚BķG^EHČîmāēˆÃqsFØĘē†ķĻÛZÅgnE‰Ķ'$Ôį÷ sÁ4ų­ĐVW¸$k´P[…ō~”ŊF UžŽŨ­[íĻéAD#Ií€jh%ÅŠŽ†vČĨX}ESģt+ûÖ$ČRäbœF9ĻųˆĖP0Ū%sČĄũ JîŠ#ē´ļģˆ%ĖĖ î "†úÖ2Ú_A<ļÖļąŦ-!håb<´SÎ6ƒœ‚OÜVđÉëL’híãg• ęĖpiN¤āíd“ÜÉļ’FķcŸa–) o´`„=ÁXŧ×s2ÄÍ HC:Ÿ™Čė8ūUZƒKy¨É ą’ãn”6ÕT$äpSW … FVmîĖĖÄ “šöaxÂīs’MIŲl2;Hãwr^Bˡ2ļî:â§cōŠØÉÆ8 įÔRmŊĘI-†zqĪjCž˙JdHņʼnf8ęØÛŸÂžį<‚íÅ iTlNH}*BŲįŒqLlŠC#ā`}sHNN3ƒOÚHÎ@ú a^ų÷Í7’O4™;ēņŠ>bH<šCÎF*Y҆.u ūņ?ôZĮĨdčĉīĪs"˙čĩŋ –;ą•§JÍ$–6Í#6YŒ*I>įČôM/i˙‰u¯$ô…ÂĨ­üũGųĐu[ pncĪ^´Ø^#Ņü5§é—:Į‡tëŠ#Ú6›T/# í$žEblđr\ŦSøwFQą˜˜­Ŗ~ŠŽ1ō ü­œûí¤Ôtél“ÂĀáĒ5ģŅԍ˛Ú tĀQŠÔæŦuÆ˙gŗĶa„´€yqŲl Øę09ãœúTËĢøfeŨö&_ܙ0mÎ œŒŽ„¯ĩĐŊ#‚^Ôã§Đ×CŦöe@*2=ŋĪĨã(Má_ˆæšŅ,.)–ŨX×"šžđŖŸiX˙¯D˙ ×ūÔ°^>Ųoé0Pu=< ũ˛ ŋõĐQttßi#Jú^™kfōad0DЏFp9ëYŽ@š›= ōčFˇNŠa“›Ë|×AX‹$rŧŦ¤id*GB7ž”âA9Ļ+€ ‘ß­88 ĮŊ.q’pí֘ˆŨH“˰ÆÁŒZRü ¸#?Nôö#ß­q‘Ę‹Ü4œ{≠buVĮWĘ”¸\’@ 3ŌĒÅu<÷RF–Ëä)]˛ŗcvFOĒQoTL¤–ŒAröČ÷’F#HĒFG͚š…PË "īÃE6jJ?—y"eŌUU ˇøT: 7ؚYŽcšyÛĖb­Ān•ŖŠö|÷3Rjĸ…†ži-ØŧA‰<Ņ$›†íÄ~Ŗđ­po5˜×!RĐyÄ÷bÁ” úc9ü*qĶ*ŽwöĻY,î%ē’BK dį›<1ÁĮC×ŋ&.ĨIÁGsz4á 6´5ĩ ‡ˇŗšTÁōĸgÁã8įĨ-ĨâŪZÃs nŽAšIČ"ĒŽĩŠ–ķ[ņķ›Đ]à Ž*å•Ž›“n›#ÜX.I ŸOAí^l’Œ-$ų¯ø:š]= ƒąz};SåfåâĄ”Üŗ„bUĮ2>OäŖüj?&g;öNO"4Uū`Ôr÷cæļČĀņŗŠ[^ŊžœÃÍ#G!Øš Īl(āz⊎Ēk‹w¨Íq Ŋco•AĘüŖŋ˙3Úģ,ဠąÜĖNKrzÔûARëVĒF? ×ĖžY=Ų@ZA¸Í`xiXšã'ÂŦåō˘ˇå N3S(L`œRĸÎ5›{–ĸ–Ãe‘ų@Æ3HŌ¸|ŧzy)œ3Ō•c@9įĩNÃ!2y‘Ę ° ‚3š€ÛƜڅ‚NÅ:î:Ŋ…Ü2íTl¯#žQŅ$0ܐŗæL #Ķ5¤9ŦÚčg.[Ų’YŨÉ4īoéÆ}8ūõÍj:RxW“_ĩC%ŗæF –É''#^rIÎO^‚‰$Ũ×P‹čÎÆ#„Sę)†VÉÚĮZ¯§jÚĨĸĪlÜdČ}‡Ú­ė$t=EgęXÂĖXd@ǎšŧVO HŽ|ŅÃ(ČÎ@Įę* C]Ķ´Ä>e3 ȄŧķÁ÷5~os 2„ „ #ÜŧŒŒƒĪJ¸ō§y+“$íĻäĄËrGŗ•“H´¸ģšs5˟”`šÎvā­YģŊļ˛ĮœŲwá"Q—sčzŠÖŤ]ß(ķAĖqg+ĶÕŊOåZErÆōŲū?đ æĶvŽ˙‘Y,īeũíÕüË;ĒBÛR3éâüzՁnC5Ũã#ČŋtíÂÆė <õÉĢûōÍRÕ-¤¸ŌįŠ(÷3c(×#räúŽGãKÚĘZ= öqZ™v×eÅÍÔ12ZLCĮģĢrāv~§ŊX2Œœ0?Ÿ–ŪTŅų‘ÆTr…X`ŠËņ.>­coojņÆé8}ō ÛFÖÁ=Ez‘J1ąŽėÕaW‘¸úŌ™˛Tœséü딇ÃWik-ŧĐĀQØIōÜ6áūŽ"+¸Žz‚w{Ôx[Rx‚˙ŖË ,@ I´ā/ĘāēäŽËq§~Â;%l¯9l“MltëÆk——BÔåœÂŅĪh֒[ų¤ ŒŽwv{ØRÉáģÃĻÜZ™ŖŪōFûÆ$hķģ ‚ØV˙‰ĻNōōãŋūØÛ1‚zû×sá[Í÷Š QH˛ĘŒ…™m <Č$Ģp8æĨ_ߎĢöŸ&ˇËl€:‘.¤/˧•Æė –4uw+íÁ Îq͍ĪZä,ŧ5ĢÁŖžžĶ,O"ÆßhGû…cčĮ;€9Ī#­9ü9u'™+ZCōMnā¤šÚĶ&?~´÷Š2Āí8“ŽõģČës+áģé>ÆģÍŋ•$’G.YåP{īĪc×'=+{Lŗ’ĶN‚;AŪc'nIįÜĐŽ‚K=퓿/ū€+\ÖF„}Coi”ã‹[%\nžØ ÁĨvMë\=„2>›ld¸pĻ1…L/^ĩIÉÛĄ}U'n})›IÉį;qM°ĢēRį2ŋ?^i>Ël1F˙z?”ū•V]Åyv%Á$ņĪ\úŌ;¸õ¨›í.c™_=Ŗ‘øđĄe¸ˆâT.~ü@ņßîõūt[ŗnå–Îͧ<öÅ4 Ĝq×”ÕĐ:UÆå>Ŗ čQŠCĒK´įJÛŗĮvĻË"ÄĨŨ°Ē2ĮŌĄkŊß,1Jîxå đMEŊ´´dØ`A9#ÜԌ`Ũy5Tę –ė]XĖ:ÆŊzã<ãJGÕŠcæ?-™C•'ĻFĪžŽĖM]Âąn„Ɯ˂:“OĀvõ¤'Ĩ ­ÆjžŖûˆūÖFt*JTN^jņ\žÔÖx—jŗ(/‚qÍT]É’ē05qŠk´ĘîTA Ŧ˜-Ô㜑[ĄÖHĐŖn^ģŋŊīPGaiĸUŒ†BX9bH'ŠäûՐU‚˛ĀãĄõu&¤’] éÁÅļĘRĢM}ągX„eäP~÷#ūŋ^jk;VĩGMæfy –+Œz}Gi6ëûĸŦ˛ŠÚwŠčzmü1ŸÆŽJû!i8‚sšS›Šåč8Å7Ė!įå Œ÷īCãŠčMZ}ĖÚ}ŊÃ_ĘŗIČU‘JFqŒÆėûčb]äw—Y—j“ūÉ#ˇ\ôí\_ZŅėäW†ÖįWĩ23ˆm$á@_žTõÎ~P~„ã¸íŧ#Ú (!@ĀʛcØôûkvmūTj…€ÆpÎ*pëߎ •e7vo¨ė0‡<€p: qBޤn"œIÆp(ķU@’k2‚@ŲÍFwîā61Š™$‘œ{<Å*@4Äŋf…į`åQrBŒ“ôÍ$2ĩÄK"¤ĒŽĄR9ô<Š´)œŒRWnjŽ­°Ŧī{$Ņ<ō$l Ā‘G;N3ĪāEX—8ø Ž/ŗÆî¨#G‘‹°Ž1“ëÚ¤)ā֓ß@ŽÚŒ%ŽáXzĖ!ŠÔD×Έ׉Õ€Ũđ@ĮZč ŠŒ{Ôļ‘j6Ím3˛ŠepČ@`AČëZáęĒsģØĘŊ78Y ŗ¸¸ČP‡€Î1‚qQIlļ-Ō4ŽĘUeŪÅŗ ˯įëUĨА\G{;ę1"¸gĮ•€Įá[ūö×láNäÁĐö5rp…šet÷%)KFŦÖÆ׆’\I§Í-„ę #g€āsŸĀvĨÔt+­CTķÉ†‘"ŧnÂUÚė̓ÛvTg=õ­)Ĩ“Oû;5āx‹ėųÔ”)$ąõĀöŠ#i¯XÍæŊ´=#]Ŗs´r?!SĘŌæž…ķëkąčÖöĶ3Ú[ũ˛ųH2Ī:|Ą•0qÛ'ÛĻOŌļĨnĀōoĮúą^zAŠ­Â$Vq$!,Āmúdö­ž Ĩ)Įkl(Šos"ĐnÖĨš†Â_õ’IF@HāqŽįšĶmû›č*MčŦŠ ¸Ũ€@МųŲP)â­ƒģ‘Æĩ##lsÎ*rWŠ"āŽ B}K9ũF9,nMŌ9×ĸQ´å€}>æ¤.û˛ čjέ,g%š¸….>YbY$ Ŋ•ƒ×ĻF*ŧ7)qSG’(aô"Ŋ,4ÜĄgĐį¨ŦĮŖ3‰ôŖ‘ŲX€O<ôééR1ÁƒŸSFpĀúô&ēH \Ģšåŋ>)dbTāâžĖ õ÷Ĩã¯Ö F9lũęä‚CdņŽŪĩcyé‚)§%yúŒšWĖÍß c9|‚NNœÕ‚Ð8ĻĮķ D[Øa†zūbšec‘’}OĨ-ÅĖVąĢĘHí‰8ôQ'ŧŲį4;ŖaģĘA†QøžOˇJ-̉É'cWÃĮæÔ?ëāčĩ­žkÃr‰ÆĄ"Ģ…7nõ*Õ§c[„Ô5ĐĨĒ&jķËY.l­´ų^áåļxÂɕ‹åČlœqŽ}kĐہ‘ÅqzcĻZŋēOåLLˇÉQ2Ã ŌŦxÎ ĒZ9Áđ)˙d9ØÅ_vĀį3Í0ŠÆKu#š@˜?xõĨ.q“šBųņĶ4Ģo$vÖëĖĘŅ|™ÚHĮcœzU‰î–PĪš‚ @ biXž0â¨ĪfĀ -†%‰ō¨ĖBgéĶŋjŅrĘZųĸ´&x&ŧÆôŸ6åÛĄČõ5pĻqôŦ9SVXŪg˜ŗ#(ËįpÎ +Zļ—‹uSž3ĩÔö8Ī­UH4Ž×‘4æ›ŗÜuÅǎd‘sĩ—Ŋkžē°–Ęušŗ…Ŗš.KėÚŲ$ą¤äpĮ’ÅtŪgCžC" P¤‹šXķÍBzYš5Õ"G‚6Ÿ !QŊAŨƒõĀŠv“ÛAn ¸{V[wD›k8ČúOHä…Ęų˜ųļôÎ;TVڌ7‘3Û¸‘Š;0$ųŠœO… ŽE=mf++Üw•ˆÂœqP͋xL’00ōOüš{JÅH7AL{XŽw—.w"Ž7p¤CØäõöãŋŧ)^ÚnAkbŗ+Ũ\Įûé$Ūģ¸dQn9>äÕÁĮũ*ĩ­ÔžlÖĶᤋ8Üã^ ]WÂ~ę9sj*i[AŽ„°oJA"Šj†â}6Xm™dÚ †Û€HÉΰÍ^ķžcԌ{Rå´S¸Ôĩ°čãØŧã>ÔŅ62zR̟0væ–9 ú‘SŠCŲd@˛*88a‘Öœ#nœsš<åŪÜį8ĨķģŽž´õØEfą–=U.á•B2š6\î#8`sÁįjPréž}é|ˍbäŌ+–cЁNRrjâŒl.CqÜĐĘI= 8ɀLüütæ¤bŦDž@Æ9ĄcÚI'Ņnņ.Đ[$uÁĄĶågGŽiD“ÆØeã+éŸķŪ¯āgũsUŽm÷•šQ23œnä¸Ę땓(´ų‘! .ØÆ9$ÕKe†yŽÎŅ$nĀėÃhãßŋįK,ˇRÉöu‚4āîgË.0:3ÔūUr8ÄQ$yÜUBäžxŖā^bøŸ’"ŽÚxФxL䌓úš¯gĨíjKõD֎Ņ(bXĸžØč1íÚ´0zā —BųāēŸ?4ˇOĮ÷vá?öLū5ɉŠ(ÃGšŊ8EģX˜‹ų“Ę iĪ“ęŖü*ŽhšÆhĻWžd9I’äģ€ëÔcņ­3Į5ËjÆãNņ7ŠæÉį̏Ģwæ0ĘŠā’7ÔôŽÔģÛCYCKßS¤‚HgO2WRqš[5)^ū!ëYļŗũšI¤‘O—s>čŨFTd÷Žr:šˇ=Ŧŗ][JˇrÅD–1‰sëžÔĨĨžƒŒÛZ-F\Ų™žx™RMģNáGoÄf¨Ųé6SGou䔸G åŪ/<ķČ?ZŋzōĢBˆūTr>הJúž9é“ũjĖ%ŦB$É',rI<’OԚ×ÛÔT”yŋáŧĖũ”Fėp×ōh wt׊Í)šhÃ.—8bÜđ7JÃč§č6š>°ņH–3ÅrˆŗČIųQÉ'$žų{ívį9Ĩ€b°į{ō”,4{M*'ŽŅ ŦޞŲËm ŸČ ´!ÃåŽV§MT7Éæēųr”ŒíiUr ã§¯ãŒRŠ”ŽĐ›Œw'ō”0#ųĶļˆų­C äSÎb„īCŖ=×ŊHí•Ûžã48ĩŖĶÕá_VŧeÉ# Aãw͑ųųÕŊޞ92~í”@0Tķ“ŸËōĒNbk‹fĘȒŗō>ōŗŋ\~t9ģÕÔn2ąŗ‰‹d‹p˛yąü…¤`KҏãžĩpƄf WbN:‘Î)ČYT Ìū5mļËJĘÄžX*9?(P`tŦŸjéēíÔ$Ģĸ¤ ā’;EÔæÔ´‹{Éa6ī(ÉFũGąëZēT•Wĩíķ#ÚĮÚ{.ļšrĪOŽÚ9U ĖĶ<ŦzX“˙Öü*ĀE‡­1Ļ įp'JØfxüĢ)JRw‘i$Ŧ‰}ēP¨¨ÄķL.ųÎ@įš]íō’sÉíKÔēî„ ™ Jņ€*ĩÕáƒn¤}ˆ‹Œį÷#°&œSnŅŅjfËiw§ļų ŧˇčYS'šQçåK $ˆ˛ÆÛ‘—*ĀđE[j3ĒāÃl;į÷ũ?c.“ĢÁ ,wpųŗ+4N '‘åŸ_Zô(ÖVĩI#žIũ”[žęŨ%ōŨß=‚ØúāqJžLÉæ#–^Į?ĨUͤ_°DéŒ:ī$œ–'’Iī։-ã‘Ũ‰p˛6Z5lãŊvÚ&W„›ŲBDō eå¤nķč§ĶÔĐēUžâX<§$5‹ã'ļjĘ3@3Ė# Ŋ '7ötEģÔc8†á-ĀޤĻŪ9F>˜ũj Ŧ›y’ŪY!ÜrÁpA>¸#ķĮZąx‹4! į!˛:‚xôĒ–ŌËn^)ŧÂb#•Č įˇúöĒŽ×[ŠVNĪa‰Ē[­ˇ›)’6ۖ܄ ôĀ8Į^)ú| lj@ ä¸ :gœZ´î]Qz`ŒŒŌyŽŒŊqIÍY¤‡ģŨąUv(SĐT^XÚã×4ĸgîœPd$c ČČŦÍ Ú „[åâāč´­cYmÉ~Hũ#ˇOõiZôŠe“\‡ã0øzÁO$ÂŦā\˙ZîØņéŪŧīGž{[m8EįĖ"GˆۘĘį$û¯åëA&øfĮ'¯­.@ëƒU!ŋIa’ •‰dCƒß†SĮ=jŪéĶŊ4gø‡^ô¸üAQĮ÷xę;„ķĸhˇ˛nK)ägԚcūaØUkŠ$ŨåHŖu9ŒįÔ늖ŪŨ-mŌ‹yh07’=ÍfkōAucjŠŽ.k,‰šXd u<įĄéTšOȗvŦOĻK˙.Ū‘Z0ųFÜGLn>¸5ŖœūRÔ~öä¨<ÜĶø@ü¸Ģ`{Šuä*jŅ Įj\œôZCČ:ŌtūX­Ũũ nODŦC%ÅÍÂ•ļ„Æ ŸßMōãЁÔū8ĢPB–đ$Q *ÄžäûĶ€'¨éNĪœîŦFÎīQĢp“ąUCN2}iĖ7GqĪ4rA7Öå$CsoŊã–-Ģ4g*ÄdF>Įú KyÖp7ĒøØr§úzœ ŖÖŗ-áûNŗq|]ļDĸŲ ąüČđZÅ)EķtūŦfī.^ĻĄ Š\t4ŠīB‚sšÉhjGqmÕģC„Ö™$EEskÜa.aŽU :ƒĪ­(I))Hļ›Fa €8<:S~QÁ “Ū ’Ö-3RHamįVuøQÁę8ö51ÉęŧtJõĄ%%ĖŽi&˜ė¯Oæ)›cĪŽ(*Är8íëHAö$ŽĒÔdį¸Ē7+WÖ˛*Š™›f0 ƒČôįÕĀÎOŊg)דK4d‰H 63´`§¸įųÕÁjėDö4ÖÜvžqŽ*?Ũ‚)ÜĮ˜Āž‚ °>XÁĀĪ\â˜v‘ŒVãˇŠ¤lĀ⁗gQŒđ{įžõ{$9¤Ę?FÎ8=?*]€zŒuį5|Ōģ4‚åV ĮvHÆ>”4“#ūT¸Rzõ9ŖjķˇéRPŦ>\ņ‘Í#8Įĩ=°FŌxĮĨFSæ9,GĨ.@ûĀãéIŋæ÷íÖĄ_ĩ\Īp-â‰ã‚i ļJƒpGqÅHēeÕ܎oėņ*ĢĮ%ņ1āvc*đŽėĨ 1úPY¤—S™•V6xâđIVcîH?Aõ5­ĖRD%G Ģ)ėk˜°†Öî&™ œ6ÂîIö ö5{G Üēqf’Íˆ.XåNåô>•ËZ“ū#f°’ølnų ą#ĩ(”ƛŗBzúĶ‚ ~UĘk¨å`܆â(ސG,AÔãĨJ‹†'ך r0M ŲŨ ĢčʂĘŅ”Œ¨0|ĩb¨~̜U¨„b5Ž$Ē8 0§‚į“ƒÅ* RqĐ͔ܖŦJ)jĶ& LQæ¨ŋZUw1'M2—ŦŅžčåPęŪ ō)[KôÉLĒŨ3ŒúRųČŖ<š@ƒ$dúP!]¸ÉRŅė‘X3x4JŪZ:ĶV<œäņĐzS ņJŽG .HfR8ę8Ēú|Ņ6ØÄA‰[w#&­y;”üĮ'ŠĪk{Ģ#7‘Ë˃įà ŽT sÎHúⴍĨ^Ļrv•Í*đNsôĨ픐W<ū•kĖBD|Ž0īRlVātEEŦõ4ķ¤lŪÜSLęFA#LJĘ(OãM1ƒĀ'ąŠ˙1 ûÜŅæĢ:ŽØĻˆw˜’(Xņ#~‡hˇ§sÛ=(ķT| ôõĻų'¸ô#ķĨŲŗøš>ÕZą’É“ĮŌŠ\J—wKfŖ÷HCÎO~á?}žĩyA9Ē) ˇÔØoĘ\Š|‘ŅԁõūޟWԉôObë:ž†œÅBdš…6>cYļ2`œTĨ2ĄGõ™bT—“HplsIäíČŨ×üsN TqÎNh˛@fkb7Ņnd?ë!C*ĨYFA—ëP9TËW8Î+VKe–#“HĨXv õŦ+ˆ.´Ø@™…ÅĸŒ‚áĐî;Ž>đü@ë]¸Z‘^ë3ŠõDĨÁĪÍßԐ°S×ä`Ķ6 z8*Ø#)Ŧ…ŧ8č+šØÄēöĒ9ģš[0ÁbÛæJ@É#8zzįĩ[™TĖĘFInœU(ÖK‹¸æv‘\ŒoĪ`č:æ´§ÜÎ}ģ—™”“–i›Ķ'S|—c4 ĪĘÃĻ+2Ãxā`cŽE5ä @t&)ē’=:~5ˆ…É ņĐô f‡›)¨c7#˙EG[‘áõÛđ8ĪÚGū‹J×?ZL{ŋŨ>¸Ž+M8Ōm¤)Î?ŲÚšĀ5Į魝*Ôņƒ tú d˛+û§ŗļžãtkF[-’CgŒãĩX†Et#cÜT7öR^*…ēxTpĘǤ8÷Tļ–ņŲÚGEŒj r@Ī­jų=šîdšųßaĪWĸhÃ(`āÜt5_M i¨‰13C˙|ą_éWYˆˆ2ęjŽ—“`•&fipšĀÜÅąĪÖŗšĨøŽ’îxÎP1^F:pxĻK Äą¯–XƒŒ…XŠ!Ú'ëžOķĒŗ™.Ļ’Ú2U@‘ņČĪaīŽūâŠ+ģ­ ēÉŦÖÆŨŖˆHĀ1ŒuĮ8ĮNĮšŅ X?^įĨ1--ŅÕÖ ŖŒl*˜a€ã‘D¤‚1jâtLžīLg`3ßâ¤ĩW–—4P\Á$ĢË*8$}GãPY Ŧ÷ƒJm ŋ‘„1'qĀ9pG8Î{y]CÍ0­Ēų個ŪëŸÃGãW4\ˆîāÛË*} ĢãķcZ¤ sÉÅyōÄN2hŨSMöV‚ŌÔÄö9yņŊ‰ä˙ž€ ˇ*ŧ–’Į †9 W;I—h$ç ?š›Öæ‹c–ļûe•”p6›0t]¸FWR~ģ‰=Íiiļ÷PŪ\Ũ\,Iæ$qǤ…Ī˸äđ?ŊZÁFsÔQ´r6ŒV͝)ÆĪbT]ĐĶ1\cKæ8ČúĶ€ĀōŖ ÆqXhXąģ1 ĘšR@éNãøF(!AÉ8¤25brIä㊕œ•ã­AĀĨ;AƒEÄDd%sø÷Ļ["ÚÚÃClq EėN¨{iÅW$mų´°[[‘y…Iū”á#z}iĘąîÆ5Y¯ôôų—p(ŠU†L¸dlmSîr0=Åeg%€œSĨs3šHü§ExđÁže#Ŋ$RCw–9HÉ8aČ88?­ Ļv‘p6ŒņR‡Äa›ĶžŸ\ōŅH S‚ äjāí$ĐĨfš8Ũ1mŦüm*CÄöÆh‚ŅÛyįå ïsĶžÕי\œįë\Ŧē]ȏNÔ-<ۆˇeI!Ɵ)ے#>ŊzWWąF(šŗ° î“yaŒõãԈŸ;'ƒŽiʀ>qÛlT9ÍF… “ dôט) )8ĶŲ’9Ϙ“ƒŸ­î3*}"Ük6–ÖPw)YÆũsÎÜ}öÅg\ÜKĻ8ŌŖÅ"oGŠ üŒˇAƒŸLúWIå#g ūu âBtë˜å„ÄáĮĒāæē(֒’ŽäN ͜ÃΡŌ-ž$hÆL§ĮĪ~}=*đpsŸJmĨĸCi aJ”Eã9į͌Kž„ãô¯ZmlļG$ŨîÛPy'Ī7ØõīR° €O9ũi…īë“PY8ĀČëęiĻRč*{DšįTĶĐŌãĖīšŽē$nŌ5ÛŊËKģ=qˇ>õDĪ-œIė3!RcYˆd ņŒs’9Æ=̧䑀¨,Ąk{"æEUšĪ8І"Q×rÜv2­ôų¯†ûÄh­IĘĀOÍ õAūĪįéWîôø.Ņāá>éF)Ž1؎8{UĐ9ä‚=(îGJĘUe'ĖZ‚JÅH-#ŗC„BŲÂúû÷5aU‰Ôf¤áxëGŖ˜vŒŠ‹ ᜠŸôĮQJH#ĩ$ĀÉ[h—VŽ9bWŒæxCŒ„˜CķøšĶ¸`W#ԊŠw(7vHĖœí`‘øp ¸&Ū:vVĩ/¤ŧŒā­t†u'‘ôéFé Č'§ĨKšwžŋJ]ęAë$ÍÉe H ÆiU˜ˇ#ž{Tƒ‚G‚E$Š)8Ā={U)īE´@š˜ávĄ%°ÕĖĮ#5Vf_í+6’’äËōķųų֐JORdÚZŦZO´ĘcŠXíÛ ‹¸“œŧõ­)>U$gđĸFPģŗN'Ž=*g>gĖ*ą f!pŨs@wŲž¸ã§Z•][§z€IĨäYöÆî@ĒQ‘Ôâ—+€q֐āķHd #ŒŨ Įj†¯pRŌH7|ķ)õ#ôã'đ­n1Öą¯­ķS$šh–(Œ‹åĖqÔį ķ­¨8ŠŠKdgVî6]t+4‡¸`˙2vÅt.ŧ•Ī=}*ÄzKJä]_M*€ą/”Oģ09ü°=Ē˚-ƒ@ąG„ĄÜ˛GÆõŨԟ\į=ëŽX¸'kĒ,Ëf([ŨGĻ(2c ¸9äT×wvQ™’āŨ¤oF‹÷˜îA^=6Ô r’1ŒĮ,nAeFP°îFGŌˇ…XÍhDĸ㸛ߌs¸āl’2ä|§ŊLÎ3’E6R€|ŨzņZģáķē+Âzũ§˙dJ×ŦœĮ|yē8˙žĩE†‹lŌš7Ų6l1ütW\܊ãôø„ē-¤r.āÖčŋĘ*‘,|—€Č!ˇÄ˛NĐà î:U‚b2×So=H ā0jd#@¨ĒŖ°QŠw;ąTä–ÄōˇšP$(U9ÉÉ'’ĮԚ4͎[š9{hØgũ–|˙čCķŠ0 ÔJ|­jÉķ0I üFņ˙ ~ĩÍ‰Ö Ö“ĐŊqûF9åĖ ĀȍŗÉ?QŽ{sWTĢÁSĶ­:¨\C´°ÜÅÄ›e*¸Ęˇ˙ĀļūĩįߟNĻÍ8]ô/÷¤ ƒÖ”ž”ƒšĪcQ1ha•ãņĨį>‚ŽøÃuŖ>ÔĮ–(•ÚIæ,§ō5ĪŪxŽ)Zčņ‹ÛĻ`ƒ ¤÷„šoÚ./[Ć 6Џbrb$ghĮŋAVa˛† Š\ļ6îw,@ô5ŦWŗÕîfũũđD‘Æ4TAŅT`ŸØc­/~Ø :VMŗD´*^Z4ĮΉ‚NĒB7ô>ĸnEÄ1Κ ęägĩZ9 UĶːĪhˆ˛ķŊq ÷÷ô5¤]ՙ›\Žč›Ëp÷Í(Œá†x4–÷ ųÁúU[Ôek)–o-‰?ÂĀä~a+D61ToĮ™uaĐA›'ĻÕ'§ãúV”ž/ŋō"ŖĐ˜DqŒĮõÍ=U”7“œT§å™,3YļY‹äã$cŽÔ鑤PĢųÔ¸ņHœbČ<§ŨʎŸŌ›å°RH㜠՜s’jĨíāˇ)~[ÜHĀ$lØ8'8ÉĮZ¨§'d'%Xđ¸‰F3́ÅeŽfցŒ8ŒnĀFÁÆzdņ˙|аÖĒ´.>AĘÅnJî[Š?Ģ‘Į0ŦQ(T^€V—4õģü´Ļ֖B("v8Ā sšGîQЎyŠ[§Âp;V;›"Ŗ!XČ'õöƒ'›y$˛‘ļÚGHãAŒ´OrAúsŪēvūu“{§JĶŊŜŠ’°b8ųƒę8Ī?C[Мc+ČΤ[ZŠČ.ÔÖRQŽ{ j_8‚håŠbæ<Ûnā3€ØÁāgéV 8ę3^š•õG5Ŧ[đīü{]äcũ(÷˙ak_<ÖV‚?qy˙_-˙ ­jõĄ‰āũ+‘Ōō4›<Ž|„˙ĐEuÍ÷OŌš=;.͌%? E‚sëøQ쓁Í/oĶ4`‹ųĶ2ØÁëU/÷$)pŠK[Čŗ`rp§æĮü"­=×Ŋ.20@ÛÆxŠ’æN ™¨ŦŽ‹"°ea•#Ą›< q ÄX…aŒŽĸ¨hd-ƒÛ’ŅĨh€ô^Ē?ī–ZÔäŽŊ+ČŗŒŧŅפ–ĻtËaŗÁ<ŌmŪ7ŧÂ9>ā‘éĮĩ^†Xæ@ҏe=0iü‡§zĢqcė%Gh'>dxûÄ}jÛSøˇîG+ÂY#ņM–háMŌ:"Ž2Į5Ÿt×đ*7Ÿ‡¤ŽąazŒļ0)íĨ[LņŧōKr†A+ä)Œwâ…N+Y?¸äôŠÔį΋os<­5ŨÕâ<Œélŋ0eđ7‘÷q'¯p{ Ëm(EÂR(Ø|énĨ7×-œŸŌĩ9ëF{fio„|ŸĖGŧvɲ%Ā'$į$ŸROSR€NA␠“ôĨÆFk&îîËJĘČPx#¸ųri3ƒÅ`õ‖”áqÍ ‘F0}čŧš}¤ŗŧŗ[E#°—PŨ>´Í˛Øļ!F–Ø˙9hū™<nĩmrisĮ&­MėõDō.š1ÉŅ #dunA5&wB*œļí †ęŲFí¸’ 0$˙ëõūUŪîîekĢrÚ6û†3ēEÉįūĐgŠjŸ6ązZęrîĩ5xĮŠĨį“ŒSQ¨u`U†AäTs[Ãrģ'‰$QÎr+4ĩÔļôē& †R=Į5ÖVˇ.¯qR•)uAŖ€4Øßh )22€¤œãŨ? ŧ9ÍSŧ$ųXŖiE]öØĩÕdŗŒģDĐŦŠĨ‹ÎHÆO@xĀö5¤8<šÍŊ$^Úũí$žA|°Ëŋv~Ŗį?hõ“UW¤ģĸ)éxö äâĶŒĶsKõŦMl($đ(įšL‘Ō‘¸]ŨĀĻ"™#ûr- å­Ø>:`2íūmúÕāúÖ~ ĪĮ~„~ā3qû”˙ĐE;]##<~ä€1Û"šIu]`jW"6Qa؁œĻYĒËĮ ā“‘ĶĐԚnŋqöەÔ%+n‘ƒî°dũä€7ēĒ{įŊ18`O΂x<­rC]Õʨû(ÎæK} ™a+¸m<Āuä¯lđēfĩŠ\\DŽí!iŖG‰ĸÚV3ģ>@ãHįé֕ÆuVŦ:ŊÄ,ØķŖYgĢ †ũ6VĮ\`~uÎ^J!„^G"‰-I™wt?)¨&ē•]û¤€JžŪÕæâ!Ë;ĨubC€hīíL'÷šŖĖFū!Ö°ęiqũrJĄq v!n!ĖKæ"ē/Ũ`[o#×žŪ•pʘ0üęļ Aļ2) aa(_īmįįž*éŋzŨ>—y ļF1Q¤Čāe*@ ƒÖ”Č€íŪšúÔ4]Éë@':TbE´Įä1JpãųTbD†Ō†\r€XēŖm*d†ā­ ëĪ­'˜§€GôÖ(ÜČ÷ĸĀ+:˛˛œō9ÆEx ŽÅ4ǞũėvÆi@3ģŋ­1öÉj A—ŒLtī´ū¸?Ĩt÷…2ZÂŊI{Ÿ×õ̎ëAQ¸Ã¨Í_?[jG'DôCmT'h$ōI$“’sõ5#L_CQy`‚ ķęiH ĄIäTŪîå­‘ÔN×pÜÛN‘ĘŠČCŠeu88ę1ŒS]Pâ;PˆštWf/ė úįĩZō”‚3O ­išYĢ™ēwwNÃmo`šˇŠxÉ*†\_Z‘fN+;û:[| +”Ž&Į"—˙ŗČĮԚīqg*ĻY`nXĐŠˆûŽr=˙:%/˙˜ũŖKŪF§ž€ãļ:ŌųĢÎOOJŠo=Ņ&Úá%یė?—õüŠņgd3$ŠI]ČĀō#B+'™i§Ē&–8n`’ŲđUԂ^jŊÁšÛķã%$¨ ã?ˆÁüjĘÄËîÎ{UK­6Ūæq1ĘL8YPᖮ.-r˛dųĸ]FäRyËŧ(CT´õ3Y+I!2)h؈ûÅIRf­˜‚˛qnĩ.6m1Åķ+ĸp0($f›Ī§1xŠĐ*3ČÔw3Ák’i#IÚ }*0$'ŖuĒ—Éå}’gRR'ųķĐnAü ¤#yY“7eqút‘ŧˇ‚ Lf]ęåp‘–įāÕüĒũãŒô¨Wxm#¯zCäģū4MŠIŊ‡ĘŦL €k>ōH枆Á?3‰ŸžUU”ã¤ãđÍ_ˆbČ ÷ÍQŅå6q´‰$•Ë’¸į8ãØ`Âǚ˛s&níEu/”P8ACWæÆ;Đßt€yŦ}hČ4[ŊĄĀ1m'?t üŦãģ#KŲŖÕtšˆīíhäŦĘp?:†gH`ŨÃėŗ~ėŸ|6ãUØhQ‚đ ¨ RČU!s.6¨%˛8ĮZėú’îbëXÔ¸š‚Ū=Ō°ÚÄdšėš ]ŪBdk–ļ˒ˆ!\…ÉÆėäįôŦ[Ém'šŗ˜GbåPĒ áˆ0ÎWũk'Úûā“Ÿ´>s×ĩk’ˇ'œūåûüĻš=4ÄĒĪ'Ÿ!ū:+Ŧ›ũK˙ē•qÖ¯,ZE“Į”,)šAÃ}ŅŌŽ*úÉÛRđœŌāqZŦˇČWpŽãgЌ˙úéÂöŨ•ŗ(P?ž ˙:|¯°”ãܟĀëZL7\ņ\ĩ՞ ×—6ׯ—~Õh¤;3Ā*qĮ œ}}sR;R’Fgģž;ČĀ W/–čßŨųGĨ.Yv:FΠUaŽIcŽd’P?¸ųc?…t_˜Öš›íFÚ6áϘÂÂ67ƒƒĐw­k;ƆΚˇ’Fŧ…ÜLEqbŠĘéĒDŌāŌį'Ú¨>§¯†hˇ.čÃ(ĖžĀœûĩæ3´ņÔWĄ%š´eą'°āԜ`ÔaÆyūt3ķĶųŌÔ­,ȋʹÆ<Ŗ˜ķ˙<ĪOˑøUŽ9=ę„2gVšÛķ-=ķ•ūGņĢĨ€'øģœUUøŒéü#ĀÍ.$piˆw’AOč+3@Æ:ã×Ĩ ĮJSĶq¨ŒƒéژavöČĨÚ ŠŒHģ‡^qR!ÜĮ=(ķHPxÜԈÔ@  Ŗ­(ņR ĩOđŒQ°Đ‰e@U†AÁįsOÛßĨacôĨ ģx—œŌŒ)Ļ1†5#;E)Dāí•;øēqGĘŧw¤3’Īĩ.ØÁáG>ÔÍĀŽŊ)CŠ„#ī įڙæE’~”ö üļ3īJ3Č žõIˆÅŋ´ × "’XnVDŽO-Ô)ČÚGc“‘‘Xļ“bßĖ֑ŠŌ›.b9Œ€R,1ĮBp0sÚ:D@l ĪģHî5XB,CČ]ōČFIVÜģ:r öĀ­Ô”ū-íų4á°ũ6ū OOŽí"(’gh~¸ūUl<ûœįĶŊ oĸG "ĸ¨PĢĀUö˙.1ƒĮ=k Œû"…ŽĮ–7}Ą‰tcķ?_€“ÛéYͰŌî//ü2ŨŅYü˛7 ‚pqÛûV–ˆ™x? ŌĸŋŊŅ‘MŲr˛\îâ€1Á4„‘Û­sÚą43¯ä[™ °ļš/.Ö+ō1‘ęHũj5îāk!s˛Ę@FTŗ`@bxŽšÅIuMZÂeÆNøČqŒįßũkAcnšޟh騸˙LÃŲŠˇĖ?z/ĘJ<Åh÷v÷Ļųy'ž3ŸÆ€ŒĻÃĄ˛*† ’jîŌHÉǍ͓kŠ0Ō6ėüăÉ÷§—­5@Éįķ§ĮoÆŗ,CČö¨ūL1øTŋ{ØTEP23íL7ĪįOFÂr3QˆČpI=Ŋ*XūS´SŲÎ9Ĩį>Ԁpriy Ԍp`(į< i8äöĨ<i…Îr (&ƒ€x /<įĨ),zP@Z:¸üh ×=h…>cƒÁ¤žj^ŖĩFĻ"![4ä@…bsëMuv|ŠĀ¤ōäÜ÷æÅaÂČÉæŗgŽōĘKË´Ž;•)ÆdÚQFNÜ9ęyÍi8m‹´ßZĨŠ$ËjŅĢaæe‰OĻã‚“øV´Ĩ­žĖÎĸŌũĀ*‚2(ōT¯-šŽ(Ū8Ö5Č9íNō¤> }jWĐĩą[RˇķløöHŽPŧGä*k{˜nĄ‰íæIS8ܧ=ĒB­ŨgßĨT’Í­n~Ķj ‘Ûtąî8“åĮ < Ō-J<ģv!Ū/™$ņÖŽĸ™‘Ī ʇ!‡āĶÍebîšĐËÕfdŗ[„ŒģÃ*?nšė0NjđŸs|̐xëíOkxŨJ°Čaƒî+/DKa{ŋyufœ­šŠßˇęg{NŨ˙CGĖ=@Ȥ”…ÚG­'•ž˙/P)ˊËÉāV-ØÔ‰e8‚XįōÍV՘ĨdĮÚ<ÅœãNúrs횴sŽjĻĨŦö“Æ­ ‚mėŠpH ŒR3œV”­ÎEUî˛Đ”™v€1ĪJĨŦ0["ĨsēHÆ=~uâ­ÄđË–&ȨÁĪ9ĄĒēĸG-ŒČķ¤yBr͌cœŅOJˆ&̓ą[Q°Žé'–ŨL7l„$Ģ!PX ×āÕk{¯57˜ŲX1VRrCA˜5Ą5Üēj^N˛*¤ĒŠ$ĀĮæk.Ūs,˛ŽÆ–FF[;íéžįÜ×^ŊSŲÔKB;ą\tĮ4Âø<įč)Æ5¸4ÖAƒ×ЊėĐČc˔ųTįßĩ$˛2A9Å9Ŗ{ķ֚ë•*sôĨ õ"2s‘Ôf‘ĨʑŒ3ô§˛!įžG4Ãüܜį­Ĩ Į„§=gŸÎ´ë/@ãOg8¸~ĩ§ÔԔË#ũlāoå\ƞâ[kŽG’™ü…t×?ņé7ûüĢ–° 4ë^åŠŋėŠd—8‘Îi8ã'¯zNįûÕyå”KŊ¸ q.v†č ucė?R@īIĩv ]ؚkˆm”4ލ ‚y>ÃÔÔ~tîĨĸĶîOŨ$*gđbüĢBĪL†ŅŧÆ&kƒ÷ĻŊôŨ­`ž­qKߍ•.æTt†T¸ŊÃʧ)r‘Ÿ_öŋåZJw>ôŽøĮÍ&āXzW4§);ŗU´C˜B;Ša¨ÛڞėqšfîŧôīëR˜Xv2IÉæ“’Xv=ŗBžpH9íMŪÄ0˛hpF9íJÁŽÎE!f9đ§1ÉīëNã$ĪqKČ>™¤^;š\qÍMĀ <ņÅdÉs&ĄŖÉ.“p†bŽF\ƒƒüĢU°WbĢA 6¤pCQƒÂ"ā ķĐV°’ŽļÖ˙"&›Ķ§âSĐÛU{ū×XÖč9ģ<ėN8ÍkFp29īQ†bøÛĮ˙ZŸõũ)TŸ<œ­kô[8ōÅF÷$÷&žxρ¸sڗ9 ČŌŒrhę1GŊöĸāŠRK P0rM&yĀQp‘z\ᚌ°V#Ŋ —9#úP €}ÍöâŖ.\Ōyš$ŒSß9ƒ2Œt¤38Æ8ÎiæE^y4W ķOä´¤Û§­Pŧ¸wžą…öĸog܉€Ā_¯ĖOáZyUĮŋJ§vžnĨeŸę~iõuÆßæOáWIĢŪŨM´'Yب;y¤2ģ`ŨjÆĐ /ņt¨ēėY™ŧg8ĮĨ‹y}˙Z¤ S[å•õū”ĐžÚX^I­œĮqą´žø=A?•3ûZ8ÄŋiˇžŲSŌ&Cmšüēֆī­ûVŠiüJæ|­|,Ŧ.xÖH]]ĄƒYWé-”ŸÚ6…fãp„æĻ3×Go­_ē´“ÍŲL-å'æų+ũGįČĒŗXj†Ũ§ûrŊę†ōŅŦ\į‚3É÷>ƒŪļ¤ĸų•ŸGũ~&ušŗEØŽ|ÕVCōžôÆ*xÁ ã<X3ęĸčÖKQK?Ōes`č6ã×įžknÖqugęĨDˆię23\ķI7mĸîĶ)'īu=}'˜í;ĮŨÍXڐĒAĨâģ…í‚ ‰˜#nĀGķq×ÅIŲGöˆa–qķ´…rwzäÔږ<•‹b;Nâ5qƒĪ?†*ŌGåÁŧ…ąū/zŪU‚ˇS%Îú•ä+ h\+FāŠR2#œÖŧ˛[˛™ØI|ļųh™Â{œ`ųú×PTc'ųW5% ¸’uWvÛ,/¸ŠFĖmč:{į&¯ /zÃĢ.?soûŲä˙*i‘‰ûĀ*|’I$ æƒôëɯBæbí‡9­ Ä6 ęWፍŒdäõΠÖBĘr>ŧTbBķŽŊĒÁ#qĪCL!Jđ(CÃÜéÎĮŒĪ!˙ĮĢSéY^˙tŋõķ/ū†kS%]œYĪĪüŗoå\ļ™p’X@Ŗpe… V\‘üĢŠģâŌlĪ6ūUĮĪØ-§†"n(öq•ā‘īÆzÕÅ'Ŗ3“kThÍpBŌĘvĸŒŸķëSivŌĄ–æávM6NžZƒëÉ'ëíYÖí-Ö­ 70˜Ō3`ÁØåœôëJßz+~UÁŠ“æä7Ŗgī'Œž´ryĪ1TōŸj7vÁĮŌ¸ėÍî9ŲE†ėuÍFØ~0ŲÔĢ€9Ÿphâ@"›š@ÆŪG?J įŒ6>†švƒžqúšs’x=éžb‚p( ’[žØ¤Üŧ˜Ĩ<@ČīP\JÆxíS9ĸåc w=ēņôŠ•”/98öĨķä~Q|Žö“jÆ^?ąôĢ; Bō).É*š|—Ëc<žĩą×žjœ––rŪÅxđ+ÜÄ ¤…NT’{¸-Ŗ2Ī'—@É’NšĒĒÔåˎ{úųM8ŽW˛Ø°HŠåĮˇn)ŸiˆÛyÉēE)ŧm°ÆxĒēvĄoĒX­Ôü†ÆĮ`0яËę gbî]N0 ŠPŽ;VEŽŦˇēäĀʖŽci ûÄĶŽœ‘×ĒÖĒē(ÆãÍ AÎ1Ō—!Nz…eG+ âæF$RąW%ž§jLö˜fSÎî”4ŠëøzRWĮn9aÅÆ8"Ą;Y‰Ü1Hģc>Ôė&ÂąŨԊC´ŒuĻĻÜā°â“)‚ õ ˇ•.Å@Q’IĀ3ÚŨ|ÖōÅ*úÆĀŌĄģŗļžŗ’ŪįįŠA†]ØČú×;ĄxfWēžÎöE‰\FĐē†Ū +}‰ŽštŠJ”œĨi/- 'R¤jE(Ũ?3­TxâˆČÆFQÎáHBŽHqŸzæ7-ģGˇJ§ŠÛË"‘ĸ´ˆË"ÆJœāŲ÷ŠÃ ۗ=jA|û)"†PŽĀ`įŽppzcņĢĨ¤ŅâËĶ%ŨŦsĻv8 21R–xíU,.b¸ŗ…ã ˆSGqÆ>•dI?y:RV“At˜îŧšk‘š>´yŠ[…7å2.8'ųT”I’Ô§‘IœQМÕ!"°pv÷ÉŠ†H ĶŅ_^”×—ēúUk—¨ZC‘`Ãũ÷Ė!…lnÜ3Į^ÜúúÖO†¯gĩō´{¸ä•?ŅŨã1‚U'>Ŗž;q]%Ė0ŪFĐÜĮąąĢ ƒÅeô[ë;y­mNWŠŖ<ä˜ãŸÎļ^ü|˙­L~ kŗ5Œn8ã'ŋŊ$ D’;6GRzæĨg$8'5CXv}3ȏ—‚ūđęÃ=žPyŦ`š¤“5œšbŲ¤oyp÷ī÷2É c.ėīœ Ņ‡N}Mö,` į­?hSŸSšU%ĖÂåVwÆ:÷ŦYYu[i”ŗFaÆyRšlũ:ūžĩēëÎk#S´™îĸžˇWœ"ša‘“Ë’xįÛ˜5B\ĩaQ^%fœtÅ0ƒšŠƒīK ĀžÜN‚–#0x8?¨Ĩ,šžĩë^į)Á ml栞Uˇ…¤ˆ^ƒŽäā ĻŦ´ ŊŽqT5yTZŠ ™DĢå(Ūāä/ãƒĪnOj.MĒYŲö¤Gį*įiPpGãV¸(YyNĮ4öuÜI#åT6iķ,æ6ğēŖ(Oē˙†(šáŅ1ķ×íįūû5̚Čđؑt§8vûDš`ģAųĪlšÖ&—Qĸ[Â>Å?§–ŲüĢ—˛ iÖßõÉ?Žš÷‹Îyō›ųį-?ãĘúæŋʂI2ë"´ˆā=QĪŠcŊ¸´Ø’†¸8ÜŠķByÁüĨÜWŊÍLĄĢImj™ŸŽęwémi{Ϟ}‘dũķ6r9Ûʞ sĀäŖÖˇlîVöÎ…dÛ"îųGęōŦļßl’4ŧ€ąy Ú9ī`ú÷úÕ]&Sa­IfŌĢ[\Š– ŌŠg'œí'qã#=>^‚¸kRä7§Rû7Ą‡×öĻ 0Ø>ôāAāzæ57ĖF8Í8 uĻ—ÂœuĻyŖã•É"„IÉ#Ĩ8ôÎzVnŠĢGĨY ™ŖwRÁT&>ņé’xéĪr)÷ˆuæg€Ũ[˛# åĮOQš,Į~…ģ{ˆ.•ž ã•íbŒéÅR´Õú•õœĻ$x'F üÎ<¤|˙ãĮōŖL˛’ÖK‰e1™îY^@™Ú ĸ§÷Í]ŏ$qF˛> ¸P vä÷╂æNĨew7ˆ,§Ž#%´Q6đYBoŪ„91ČŨęūŠaũ§`öģ•ČÉdŨųr0AÁĢaÆNqĮëN$Ķģ !‘ĄŽ{1U \žN;ũj;+8l- ´€ (#@ē€1×ŊN\.y“#æĀ4ƒB+m:ÖŌi$‚Žå˜ļâycšēž2yЧ.â5•3Ŧ2*ŧēĨēš–x—Ëûãp$~OU¸ûm‡“m4°ģÉ_Ëu°qũĐGãZ(TVi2 ôf´1G I(௃T`Rp9õŽBîVļ†ßYgŽMҤ„‡hĶ C’'Ũ…AvJļąqå—cä¤.dØwu*GbŧúŠ=œØ*‘Zë͊P1‘TQiä)iĘPrß \įŽ{ûRų÷ōgĘŗHˆ8&y:ũæ—˛–Ė~Ō= ģr=éB€ž§ŌĒ<ڎÖÚÃŧpĻ!OŋLÕhîõ$¸’kíŨ$ېyž;gŽ)Ē2kFžô'U-qĒ Δ€;f¨Iĸˆ´ÖWQyE‹y=rš*{{û[„CÄldÎҜƒƒÁįą¨tæ•ÚĐĨRK“…įÚĒY¯úuūHȑũs^ĪĨ]ŨģÛNņÖŪâŪčđyRö[Ļā@~fœ5ŧ{ŠĻ–}‹2H"‚Œ`tĒŗęVļō*ÍqlF@v ÅMö¨ <Ä*G ‘ƒøÔōËąWMÚãL¤‚įTõ9öiWmüëmÚ2A#ƒúÔ­~$•ÖÚ6Ρ úfŠ˙o[ÚQˇ{WˆĀS —Œü¤ g9ëÅoN”ÛēWōęc:ąJÍØģ ‘ UĒųj}=ŋ*˜ĘƒĒ͡ģ’Ũ's§\y,ÛŖ@ĢšsËz䏭8ëQ,ŋĶoãnFāŋŠ’=øĸT&Û˛¸*ŅK] å†Q'#5!\˜›€zãđĻĮ<øŠē69SsO?ëŒuŦžFħ&šŲdĀ<Ķ€Į›ēŌ?#Ļ_ öÅ/•× É4Ց™ļ˛Œæ–';Õr+šŌėAåÎ{æŗõ+äHĻĩyđĘŦšVãvįįļkFRĀŠRzãŠŲa‘ÁéN3q|ČRŠ’ŗ+ÁsöĩÃDđʸ-ã ‡čĪJŠŽÚK-ŸÚ!¸’-ȑLc9Äî1šą~Ē—VwO™åļ͌Š˙ĀąQjSOy$`ģ,MÆė“øV”îĒEÃK˙ÃOXIKĄ|€ĘŒ¤`‚;͈Ü9Ŧ(õyRŲ-:ã;B‚ōFĒ?"OéNG¤ū|bÄRcØ~øã€‡øšā÷•œ¨Ít5Œãc^Dķ3ĐcĨ")ŒÄk›&āČV}BéĨ#8IvŨš—É™OÉx‡Ž|ŨßúkoĒNۓíb2KY´ŲŨŲŪga ãæSËm#č>Ũ)Å9#žšZkVģhū×uu8æZ@€F~@¤đO_ZŠÄö—3ۈ.nm1nÆ]ŊķÆIöŽÚJj6–æĩô4v`ũáßĩQŊŽė# –ķ™Ęã°FūŖķĻŊÆ ĀĸÚŦNÍĖÍ uQô⓸U‹k8á-3;Í+pŌČy#Đc€=…^ Iåœ`ãôψÎ;zį!$GLqQŗ4Š  ēaG/?đ3Zu› Č3Ž}/ū†kLõŠl§¸ëķ˙ûúä˙Č×;jŅ`ôÍŽ‡QãNš˙Ž/˙ šįíW6°Ú5ūTŅ„Ã ûQ¸Â”F3ÔS6v˜ šTH\žqŒp2yãŪĒMĮqŖÅq¨Ag,*Âãũf8Ā9gßõŠæŒ´ö¨ÉiÕ°zaNãŸËųVs[¯‰…˛?UĘ["[Krõå”7ö’ÚΗ(ÁÚpG9Äœ(UūĩŸũ¯Ņ›OŧTîØFĮāŸŌ”já‰)axéũí¨šüüÅSĨS°šŖÜžy€éL<YsīYWĖë€"ŠÔ7Ž3~§ŸÎĢy‘;úĩÚ?Ã?–>˜\ëīZà RJö%ւvšš;4qąHšVūęã?Џŧģd˙ˇ(ōÖĒGq¨[ _Ũ]'c+˜ÜBBßūĩ Ô¯r3a?Ũ¸ĪķQSėgŗpæO[[C.^ņ™¤';UØ"ŽĀ3õ#­bļŦø=Gœ˙ãUn5‹¤!Ú8Ũúns!üFOæ*Öoãâm&YáL>cîŒ~u§˛ŽõHžjKMÍlZZDwEÅ’>^ƒԚb:ØÆ˛dHøFNú ÂąŽ¤edkČφŨdRęąp0F 3cåĪ\ĮĐ ĀxīYUN+•îT,åt,qƅŲ#Tf9bũjLw4€Žĸ—Œ€M`ßSdŦ/=Š ’Äb—=TVtŒú—ÚmSj@§Ę’B -Įˎ|gš¨Į›}Ĩ.Ra~fmmå›#!ČØ˜õÉę>™Š,ížÍˇĘĮ|ũæ=OųíV2ãĩ(ėh”´åZ!(ģŪAÖĢO§ÛN|JŦü—Aĩŗë‘Č5g98ėix“š˜ÉĮgaĘ)čĖäĶū{vš>kų€“ßæīô¤“Ly#16ŖpÁ†`‡˙eĢŌneÂõÃÎėíZûiŪ÷üŒŨ(íb(tëX#1¤Kĩ€V-ÉltÎzÔgJĩķˇ-ÔĒ1ʂz:fŦۂ?<Ԉ›p9ũi{I÷+’6اĨ[ˆėŒ*ÄĮ ¯| œåW~ΧÎqČãĄĒšvLs”9„Îæ'ūđ'$ũ73ßsËsק֝WīąSK‘ذ%š4žFXÍÅ ‰—žyîiJ>ãĐÖf†séƒN3]éę’ōĀNR==üšŋĖW‘C<'rļzõ¸#ąņÁĪĻ5—ĒZĮhūØŧ7J91–Fč7ƒÁũ}ëhÚĢ´ŸŊßüĖZözĮnÆŲīAõüÅ57lņģã֝ ķÎ8Ŧ<™¨ÖD ¸ā{Ķ–4¨ÁĒÄąB 'ų՜āķTôŒg ÎqƒQä†`IGnôŌĖ6[<@å¤W–˛[MŽ0Hę=÷öšVÄŲ L—žaŠRpJĻã–éōž3Z7÷okjŌZSō ĮV'5ž‚c<ŌĘāË)ļ.ĀqĪĨwá ÜyĨ˛zzœÕŸŊîīÔ|‘FĐ Ã5–W‚éN*Ü;qPîl qęEu?ËV9ũsK…?Ĩ2"Ûžķcm3•ÎŌUAü…0¸ķ #y3Å)b"$uÅ3sSŒtëHĘÁäg4ĶōŒq֑äeČÎNqšf1îET7P@Æ=)žT|žsĶ­#;’ÄcĻ) ļĶ“˙Ö  oãû,˙=æ˙ŅZMÖŗ<=ƕ˙mæ˙ŅZ„ÔØaŠi—õÅ˙ôXPļŅ÷ũڏŌļõC"đ˙Ķ˙ĐMaÁlƒ8FOáTI(úšË×ĩCiw åēOîĮéR‘‘ũ(i§f$ĶWDQŖÜ^Æb-ŧ™y ĮnTų{VžÅŪX(É'šË°šk[Šî$HŅî ĮĐĮ×å58Ölwaæh—ûōÆŅŠú3+ÎÄ9JnËczVQģę]n H́Í$WĪø%ŽUūō0aųŠŠy¨äû=˛Ŧ—Ënû‘ƒĐˇøwöëXF.NČÕ´•Ų­ûëģKāÃÎÃÔŠP3øļ hxdjĸÜE¤ļō<“^ÎģšM„€žžŠ=ŋ­Yšá ¸f‘ūėj9?ũozõiR”"ĸŅÉ)ÆM´]Ŧoå€d”ôD8õöüi¯=Û( lĪBĖ0>ŋũj-btGy $rÍÎp:ųVAÅkĸŲŽõš0 39’gûÎÓė=ĩL@(T€U†<Ņ‘ØįKmģ˛ŌIXŽ, €$\˙vF֐Z3”…ßÛë×õĢ=G?!9ĪOj|ō'’$Io;Œk‚Ö$’ßRy4l#ķŠ‚ƒĪúô¤9ŨĐgĨ{खÄEŽ Ą`yČÆ9ĻÃöņĒEs€™WčYIũjrŖUĪSĐÖ˛xhIėWĩqDŅjņęW‰mc3#ĻãpĨtĮ¯}3ZVļâÖˆHÎ$ŗžX’I'ņ5€,PÅûõY&.Īš~]„˙tõ\ԘįdōßPģōG7ŒŸmØŨúÖUp¯áƒĐtę}Š-N— 61ց“×É] šnQ’&e+s ä.zgŅÃ+4(Í÷ŠŒ×5Z.›WfņŠĖ[íÁéJAÆOj¯įĶųĶ’MĮÛ¯ZÆÅ\—w Žô×ŨĀÁ68'ĩAqz–ņf_žGʃī9ôš‹nČKVOšžî &¨_O)í!Üץ €~Pr7ØOáOKÛģÂ ?(ŒĶļ0}@ČüŗRB†’C!’W#{°€8ķÉ­”yŪæMķĢGbh”Å DŖhEqĐ x–VQßĶŪæNëGŽÖ;ęh ,cbIČöĨķ$*XGĩn2H§ Ā8Ú}čŊųä .Ą[ˆL.#)zŒSŒ¤Ģaz~4˙ãŒB|­0jęĖĄoŠFŒ-nwC,QĻö˜…V'=yûĻ´öđ G$B@ÛB 6•WeÎ?úŪՙΙc!Ŗ@ŒŦrU€Á´•šæŽ†qæO•–ŧÄ GįFånr8÷¨V&U+ōŸj MĐcîíŦÍ ĀRw`;ŌyƒvÜ{ŠHԠßjl¨D™vãžÔŌģ˛2/%Yĩ•…ĶŪ2ۛĄŨŒ=°EJ]AÆFMgŲ¤“Ž.ûä™YŪ돧­Z6ö/´ZöšTR‡oéœQw÷ģŠ\nîIāãŒSDĒĖBžœûR4dm<ÉÎj=„Žč8ĪJE.ĨĪ?­)ä푁éQ0}¸Ú¤į¯qR“Œ`đ:äP:)‡ŌŖŪc$dôĻbÄã“Ôį­*ŖĀ⁎$dŽj6u-É>Ŋ)̀rOˇz‰‰2ö…/SĪZitÚ8öúiåäd¯Cš6đŧį-Íič#ū%cķŪoũÕĨÉŦŨcK˙ËyŋôcV–EKĒ˙Č÷ūŊß˙A5‹ú¤°~ĩĢ˙Č"÷ūŊä˙ĐMcD–„z b¨ TdŸ—ŽiäāŌcŸ_ZS‚xūT÷›Ŋ šŲY”flūƒ°ö“ĨI´\g)$!ģyx÷ ŦsĩOĶš§AŒī‘ƒÍ/ßl~ƒĐ °Jc?…7*įŽÜPåĻ…%ՒgcĨ9Įʙ‘œņøĶ˛ä⤠iŲåŋ olŒGZ3ĀĮZ`/ļAæķœ ԇté@>ÔĨô¨Œ‡éOĀč;ŠŒŽsĪs@dā俜r‚2Ļ ēįž)ËČŠĄŽ•VėųŌEj„d°wöU ū§ķĢ8Æ9ņĒ֘ķŽÛ ą“û\ČūĩPŌė‰ëĄs§+Īķ¤9 í@ÎŅÉÅ/<úT–1ãI#hŨC+ Ŧ§¸Ē–ō=†Š&Ø/dˇ¨IŧĪ'įn0é×'Ō¯Ø į’:‰ÁMY”¤Ķē&Ĩu$ŋč$pĒäũĨ.ŪØ<`{w k‚-{i$!FZHˆ‘õėßĨ)#pETžHöÛÁ3ŦpM2¤ŽĮ/$‚}đūXKN1ŋb•I\ŗĒkRŲŪEiefˇSüÖ &Ā$pprIU­(ÛŊœw(VIdQįI˜ˇpsČÁãĢņŌæömF܇ŽHŅÔđā1/QÎ> Ôī§YNÍ$ļ°Č[Šd4,:t•¯š>Ķ÷ŽúŒÕ]ĩ&š‚ŪáâŠ1‡‰ŲwĘGr:…ãņ'Ōļtëčoc`’hđ$‰ūōœ~ŖßŊgŦ1GĮ*"ŒQ€*ĶÃLō4Ķ*JŠ’ÆŦ¸Ā'ū#ЌŅ<2qIn\jģŨšņjšdÎȗ–ėËÉÁĮsî*âË'B;ŠÄkkwĢDŽŠ÷ôôĸĘe´đȑé!Ũ Šé¸9ELãđŽz´9-g{—œÛšw:…ŠU¸¸Š6a¤üØõĮ\{ÖcŨ6Ŗu,ŪK ˛°˜ÕFü–Ë‘“ÛŠK{$€e‰i™$#ævõ?áS}œäĮŽ ×M<4cŦĩ3•VË:]×Ú –9Ũ^h%1ģáÕNĒ‘øæ´HT9ëšĀˇHĶ_ļ‚4ļōĪßÁ\r2ß­o`īE=‡ÃZ iAŪ7d¤‚*…ėo6Ąn Ég|x˙ZŊqõ㊊īX‰\[YK÷eĘߑÉ`9ãĮŠ–šē1žŪú{xg‰€ÎũĄÔŽúä~áCßļ‚•žKép¯ČųĶĖëˇv==떟Q6w4˜ZXØÍæ|°¨YNėņė~ĩ ŗj2ˇ@ĮîY€˙ĮÅiõi5͉EŗÜ×į%ŗœôÅGŠĮ$ē]ŸɰŖĢcŋOÆĢé×BôŊ{ņĢ@ƒ´…l68'ąŦã.I§Õ2¤šĸ҇ ątō” q´Ž1ƒR‰7tãŸaC-ÍŦ˛FeŠRĖc8ÉnO˒@毤b1Ԝúšö&’–‡6ÜSc[$ú …dÁäcŽ8Ģ8ÉāÎĢČąÃČîB¨$œôjRšc ņĢ-ƒ‚@īÖĒÉĒ”YĨ\üÍ'÷ü*8,āÔYîĻA æ8ƒŠ úŸđĢÂŲ@ኮ0Į´j1vd')+ĸ­ĻŠo|•ŧ2’$R§ĶĨOæĻŅÁįŊGqg#– &BJ–ŖüúS-Ũ$+Œ#¸UËFOō=ÆsIÅ=bmi"u`ã# Ķz–GKTi%eĀęIYī@cˇI]¤…ÚW„įT¨ˇąNin=æŒ)gp uĪjŒÜAŋh•KõĀ#5ZlHˆeUyĪŪvPI=ņíHÚMžÂŋgŒ¯`v÷Ē÷6¸¯6nhCū%cūēË˙Ŗ´1Yē „ŅãUP K(ūÚ5iɚŊČĩƒø˙ĶŧŸú Ŧ˜˙Õ.A•Ģ­ČP韺I˙ šČRB{œÕԔܚMŲãŸj ĀÉ9ŖŠÎp}¨ĩų,‘ÛŽGžûK˂Oč*I!‰Â!O•*N:qK<Ü(Y7Ai؏­Ek#IÎۙY”ŸĄ#ŸĀUũ•b>ÖŊI˜|ÄŌ§^”­’ŧOzbĄÉ įœT=°Aúæ˜T7RqęzĶߔųIâŖÚF22Z˜Œæ”įôÅ8Æ3Kˇ‘É´€~=sŸ­!ĀôqÎ'-ëøSr Æi7œįہÛ9>ųĻžŧŠxà sŸZ`+בOÚHô¨™Ię3Ō€$UÁ⟯œĨUëīQ%ĪįšzŽč‚C@5ɔ˜­U› ĩĨĀÚž¸ĪSũjxaKhB a“’IÉ$õ& °ĀĩHđÄLl1ÆGņųÕ xĮ?QU'gʈŠēæcà ŒšBŪŪôƒîõËu¤nAëRXå8;H>´Œ ŽGâj"Ōmęr)I°ÁãŌ€ō{zSļ+ŠWSÔ֙ķt=}}i Ëo Hí…sNÍč"+âEˇ•Ęō‘čzŸĀdū2Eå¨PĐ1Q[¤’J.nr‘÷õ÷˙õTķĪ´&[‰q§%˜đ*ŸH­HOy0ō÷( ķšPŋ&R)ęÁŖ œ‚84̐8ę}EAcX8ÉĒ\éqO(–7hĨ-š˜eƒãĀ<ŸP:â¯įŽŖšQÂäv¤Õ÷Đv$öëÍ&ãØœR’'ÜŌ’ww•ÆÜA6‹hcļ@Ö^pnHĖjXnŖ“ĪQWã˙DŒ^X]bBJHĪ$EqŲsÆ=Ģ ^R´éę‡FŊŊŲhËÚģ!ŧĩTÁ”ķ ŽˆGüGéP,¤¨# €*;$ąKqRŒņÍ%”6–‰j6F‚y'ëR1NėųĮž•Zâ$—r˛˛ąÃ+GŊĒßîũãHDd€qžÔ'mP5}ĘZ[Á •blæ1,I>äûUí¸gžGŌĨhÔō@ÆjcFã­7&÷ļꓡ ­ƒšO*3ÖŦ``œãŽĨ!šZŸõÖ^ŋõŅĢ@âŗ´!)G?ëf˙ŅZ8¤d:Ņ˙‰˙ũ{É˙ šĮ¸Ŋk[[8ĐīĪũ;É˙ šĖLėį4É/ŸūŊ&ĀqõÅ?8íIÃ æ˜ Œõ˙žĒ­Ôbô˜Î×VáÁ8įŸzģ€xĪŌ›"$ą2?*ÃS‹ŗ&JčiNĮÆ†@;ŸÎĢØĖf´RíķĻQ‰ëHįëÁĢYV^´I4ė8ģ̉ąO|ū4Ō õõ§ąęI¤ šëøŠCoÉĮÔŌėPŲÜ}3“KÆ'?J^Üĩ&Î9'ۚ]ƒ1#ũęôüh ŒdņíHm ‘īš]Ŋˇwæœ$š̓@#īÁŠ  :v98ˌîÜ0}čT9fTv’âíĄŠf#_Ū0\āúdņŌ­Hû#r0JŠo3t<ôëoCļÔĄŋ›íŸjōË6Ã$…€\r\ŽĄŋ‡>õŅōã¸ėi$u‰ Čę u'€$˛)äŲ0ÜÅA`ŖŠöĒđÂŌySĪ9rôE#hÎqŽ9Ā4é]§Söhäfa#Ēžüõü*H-ŧ˜cŒ@Čö¯ÂŧĖū'äM“œ‰3Īb* ÛH/íŪā—‰úāāÔÆ>¸Ī‘bĘã×ĩD[‹ē-¤Õš8ü¸Ö4|"ûS™¸Ė<úRĮ=xéíHąđy#=@~{ųšú‘Nį$ų‡Ž3PųGūũu"łwJCŒõ¸õÎ8 1Û/4s–ôôĻų=‰÷Ļ›öäyŪôĒXJ¤šlLS<•ÜX`sž•!8™@î)/#9ã=ĢPŧģ]Q­|ķkŲÕĄEŋːąNAčņÔîö­ŽqĐgĐĐqđ gŠīŌÁúk<ņÁŊÎâĸB#Vāmë–ÁÕiüOyķBÚafN…%bŽ>īr ÷…u`äž)Dǧ4’w RĪ_ԘGö Ûåō|ĐøÚK1†8Ā^~ŖÖŗî5Ũ<[iöÆāAŦÜA˛Å*Y[ī’Áāƒé]ŗ, :ČŅFŌ ;ŽW<W7Ži:mũÛ_Į`’jpmU™įhnGxČüëŖh­ą†#—‘Üč Mļ҈Ë0€‡=ĒŅÎŅš‡´ÆkpÂ&ŒŽ¨ÜãĨ%ËųvŌ¸;HRCuÁŦZ|Öf‰Ž[Ŗ6ČųķÜŨ  ž]‘Č; ?<Õš-Qî#¸ōTΊ@r9ã#>œʓN–3aP@d ÉÎ3VˇŽNOOZēŸBĻŊÔ •×ĨG6ö (ãSū\ힸôĻ‚zuŦÍØŖn~Ŗ­0Ŗ3šAÁâ¤ŪŒžOlP\c9â€áI'­V˅Ā-ÚĻŪ§¸Į\ n3f€!o1ēnÎ9Ļéũîϧb2~œÔnãœû@-“¤!˙Ļŗ语*ÍĐAūĮ=|ŲŋôcV—ĩ&4V×?ä¨×ŧŸú ŦĩÆ29­}RšŌŽāLo’EÉĀÉŦŗm¨ã‹$ú€ū”‘Očzfk¨į›$ūx˙ ޤy‘įŋīĮøSØBdg€i y§ mGū|—ū˙-4ÚęGū\”ûųËBœŋč×&BÛb—‰čŦ9ö?Ō­*ã‘ƒīšŽk]cēąŒƒÕ^@Oæ 6×OÔ­‘Á˛ÜY‰ ˛¨ ė2zU;5~¤+§bcžœ{ZhP§Js[ę%HūÎ|˙×T˙hļԃø—ą÷ķSüjv/qįĶm)#Œ (ˇÔ@č˙Sühęø—?ũũühÜÜ3×´/­gÔOöt˜˙Ž‘˙ņTá M˙ÛH˙øĒnxúúRãœ~š¤1_įŲ“˙]c˙â¨0_˙ Ųķ˙]c˙⨍ŖĶÔl§ņúԆ@Ž?ŗn? "˙âę/#PÛ˙ ģŽzūō?ū.€z˛ōpqŒĶ'„›‚0ōĘ =:`TŠĸK¸ĮŠ’/ū.ž°_Ēø•Ü“Üī‹˙‹Ļ›č'Á€“øķJz qŸjE†û¯ö]Č˙ļ‘ņtyZˆāiw?Œ‘ņtžãHwį@nzã<âE~:é7_÷ō/ū.åŪį?ŲWYô2E˙ÅҰÎâ4Œ€Ür3Í;Ęž#.äg‹˙‹ĻųWáüJŽąŽģâ˙âč@(˙8Ŗ¯?…'—|3˙̝ûî/ū.Ÿ˛øĖ*ë#¸xūĪIj0xÅ0ŠŨÔĶÂŪãūAW|ûÅ˙ÅŌ8ŊP3ĨŨ}w˙ÅĶØĘNXœđhU~Ĝ”zzi—’ņTŅöîö]ß#?Á˙ÅSø`Fr)pŪá})3yŽt˯Ž˙Š =ŪüKnķėĢ˙ÅR °lœ{cšfŲ3œg֐=Ū3ũ›wŒ˙p/›voė˲=6ņĻ$ØÄãŽ{Ō”˛(#§ãQnؒēuâāpKēāČĄ´ûÎA˙–ũzO@DŊö¤ĀbzsīHL˙ķãyøBi…įŸėûÎ9æBō°¸õ戒Fî cŠ`šœŒ}‚đ1Īüą4Š$ũ •áĀōÁŗB|Ŧl*ģG˛ō,0 ᔌuĪųúÔÍq %~Á|H˙§véųS“5ŪZÆô*.Gú;žOžŸÎĩ¤í+ŗ:Ēņ˛n\K:ĨUøaœķÉĻj4vr2 šĀAâ'õ4Ô¸œ\Híc{´€ũųÆ}Ŋę žîęCYŨĮ°8û3–|sן•7Ęę_Ą1æTíԞ QmkC$.Њ„ ãâŖ7?bžu˙Eã˙¤7Z_78Á´“˙‰ŦŨÛģ5I- „grüؐŋ)REFˇ[ēY߀?éŌOū&ŖkĻ…ŗž'˙ĄË˙ÄŌ°ÃĘ'œ€PņGĖ0¸Ļ § Íĩņ$ œœ㴟kÆ´ŋį§ú$ŸüMØÛrãPˆU‰ā `ŧÚ9´Ŋˇú$ŋüM4] ŧÚŪžOK9øšZBIWrœcņ—…ĀČÁ⑯í˙FŊįƒ›IøšCzŸwėןO˛É˙ÄĐĶ@lč_ōŒ˙ĶIôcVëÅQŅ•—Jˆ::ÎÛ]Jœb2"¯sSšOrfЧĩ3gûMŸ­IGãTAŧߝ?ÚoϟJ>´€nĖtvüčۑ÷š— ĶĄ?ÛoĨ~û~tūôP ī΍œũö§ôŖŌ§ûíN ĪŪj^ôgš6œ}öũ(ØO94Ŗ8ĨĪ4€hCœų‡?…9ŪÄ~ėúRŠfÎūTll}ķROåLín>sų pSũķųSąIې ĩŋŧ~¸ +cīœ})ŲĨéLílũķųRėnīú pĨ#Ž(›?….Įëŋô§cŽi{ņ@ ØũŸôĨÚøûÃō§Ōö öŋ÷ŋJ]­ũáųT¨Đe\ōX~TŨũáųTācŠZ„#ãŋJ_-û2ÂĻĨČæČ<šBšúS‚Ię?*Ÿ­”îJ˛z¯åJ¨ÅÃ1SƒRãRãŌ€°HpIRœRAãéHų1€8Ǎ…°\Hø^IëÛŪ‚ÎUËr ųzsLDíī7 `ŒzpU;õ¨ZFÉÁcëĮNižküĮqH  ŧ˜Æ~^žô‚ôāTŠFŅL™ļ¨;ą@ÄhcüÍ'”šúœõ¨‹–#st#Š’ ˜˛Ny4•{ũiŒ‡vāƒôŠ%á ŨŽ*ēJKĒ“ØPü¤SėE1áCˇ†*byÕY$"bqŸni ĄCÜúõĻ„@Ĩ„į9ĻyŦW9Oķ¨ŲöŖss‘éLCž%>ŧ{Ķ5-ģķJŌØÜļ:T/1nī×h1úĶiŲĪŊ4Ôė2sŌ’Š)’ Ō›ÚŠ(OZAEĀQŌŽÔQHî~”ÅPZię~”QLƒéJ(ĸÅíGaEž”ŖĨP ū/ƒڊ)€”ĻŠ(ĸŠ(ĸ€øŠÍEĢŪ“ÖŠ([Ŋ;°ĸŠUû´IŠ) ^ôáÔQEī­(ĸŠ^Ô´Q@ū´¸ëôĸЇîÔQBĶÔR‘EŲ:QßņĸŠcú/֕zš(Ą‚yoƐ€qE‡¯áQã­RęNôÆhāQE1 ĀÚxīP=P1iƒŠĸŠLŖ˙Ųleptonica-1.86.0/prog/comap.110.jpg000066400000000000000000001340211506303110300166250ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀĨ“"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?õēp<ŌsßĩĒIž(ÎŪMsSÛÃ.§~ĶE62ëœ ‹íP5ĩĄL‹dö>__ŌĩTî¯s7RÎÖ:­Ā°ÃP[n5ĘŦ6 Đ&?ë™˙ @F"Q×ø)û/1{_#Ģ ❒zW&!´ b%ĪûĻ›å[ áP~eæ×Čë˛pzæ…<õ…r~U˜\á?3LT˛Ē˙ßgühöO¸Ŋ¯‘Ø6@Î(VĪCšä\YgũhŸŧoņĸ?˛m?žī˙=ØZ=—˜{UØëúžŊ){äTZ—ÂĖKÂwį˙ŠÖŲ6žqíö‡˙âŠûÜ=˛ėuđ)sÍr˙f_ųé?ūI˙ÅQöp8ķn}˙Ō$˙âŠ{ˇGQœsJ rßg<ëŦ{\É˙ÅS šÍÅįūI˙ÅQėdŪ'Xx¤ŨÎ+–X0 ũĻ÷˙¤˙âĒ3 ˙7Ŋs˙2ņTũƒnŽŧœ1Bĩrâü}^āLŸüU g›ģĪü “˙ŠĨėdŪ'SģŪ•Nk“ō]˜ƒwyíū’˙ãNû;vģŧ˙†˙=„ƒÛÄę—urŸfoųũŊ˙†˙Qo ũ6÷ū˙š=„ƒÛÄęˇwÍ(l×("›võįOųí˙Ö§§BķūūđŖØČ~Ū'T(ÍrÅ.q˙!ßûøôŖeÎ8Ô¯īĨ˙âhö2ˇ‰ÔÍ8åB]ņ˙;ßûé?øšRˇ™˙Ĩīį˙Gąũ´N âŒ×/ļ÷ļĢ{˙˙øŠŊÆĩ¯8>‘ņ{ ÛDęw{ԃ“ÅrĢöįŊįũķ˙J>ߜkŪcũØŋøŠ=Œ‡íâu9ËFNk–fž?Ú÷œą˙NÎĄĶû^ė÷"˙â(ö2m¨ÍņŌš}×˙ôē$ą˙N/¨‘ŸíkŸûâ/ū"—ą{h0åĨšÚ†?ä-sôōâ˙â)ē—#ûRûõ˙Gą{hFhÍs>nĻGü…f˙ŋQ˙ņ45-ŋō—ūũGū{ļ‰Ķg֔+–iĩ0šūĶ~ŖūXĮūņqŠĐIŗ˙\ü(ö2mĻÍ?…sFįSĮü„A˙ļ @ēÕ?č ?đhö2ļŌį‘KßĩsjÕ1˙ë˙€ëIö­Wø?Əe!{h&i2s\āŧÕ0IŋˆãūĮøŌ›ÍTgŅā?˙eGą˜ũŦ{sÅČÆ+–ēšoøū‡˙ŋû*ŪęáN/-ķ˙^ŋũ•ÆaíĸtĄģQšæVûXÉÍåŽ;fÔ˙ņtÖŋÖĀûmŽ?ōėøē=”ƒÛ@ę3Í.q\Ęßęûr.ís˙^Í˙ÅĶūßĢāĨY˙ā+ņt{‡ĩ‡sĸn{ãŠ2p+œûn­˙?Vø ßü])ŋÕ˙įæË˙[˙ŽQė§Ø=´;HæŽz×6ú†Ž˙I°ëŪÕ˙øåPÕ¸ũũ–?ëŲŋøē=”ƒÚĮšŌg&ƒČÅsÚZ¸$yÖ__ŗŋ˙N–̎‰Ŧ‰˙¯w˙âé{)vkįG@c×ĩsKŠjü~öĮūü?˙NmGW 1-á˙ņt{)vkįIš3\ÚęZą<Édí‹˙ņt˙íW=lŋīÛ˙ņT{)vĩ‡sĄĪ§ZQ\áÔõ^ÆË?î?˙NūŌÕq˙.D˙¸˙üUĘ]ƒÚĮšŅ Q\éÔĩoîYÁĮõŖûSVūå—ū?ū4{)vĩsĄ'=h'Šįŋĩ5^ģ,ŋ ôßí}WŨh GáX~ÕNŗāũ2üą/%¸ķŊ~VũA­˜ÉcĮņ CÜôųą^”&JžsC Œ6¯™­Ûq˙–ÜsūÃUlūZŗŦ˙˯_õŊŋÜjŦ@ŽĒ? ËYûŠR9ëGJozÔČ^ƚ@8Ījq'đĻI´‘ž}¨víÎ7~4Ũ…˜đ´ĒäRŲ?6=ņ@/ J ';úԝ?`"œū%GœģTžšëHRĩ'áKîzĶ/×ĩ8qŌ™üyõėņ@÷Ĩ8 tŖ4€9ĸŒûQžhIÉ•áđi䜜j6b\Šb%Æįš:œzRņŽhŌž1֘ßpĶģĐ1Ääāԃ“ŏƐzĐG§ųĶC‡˛ ûb žÜ{SÛĄëÍ ‡ápz*Dã"† ‘ÛŽ¸¤VŠĨl`ąŸZ’+ëI6ė쁋 ˛ƒ‘ëīõŦü:ņxuôĜ™. ũĸ]ÄnÉMŋŨį˙žŠ.|54÷2:Ü$j1 ļKÆcV*Į<ŊŗŸaNít—sz+ˆ¸Žh˜§-ąōWëN–â$|ąŽ1¸éߥŽq<=~Ģwh'ˇ[{ĻU‘Đ“)P(P ã’Ÿ÷FūÔ“í0}¨@"8,QÂÆGgÜÃëK™ö .įOŠ*†HäRyhÎEX zV6‡Ĩ/Î,ҍu‰(ĮËÆģAĪņ1õ˙ ׃p*‘ Ãķ§ŽëÍ3#­< r’@⑉ÉĨĶO&€ ņĪáIžzŌŽ3Í79j“<ƒčzúËX}^ây w€ „6HŒĀčsĪ^•§’Fs˙ÖõŦÛf{ˇķn_å˙wä˙ĪãYÕo—C|:NWem^"+ņõļɖ,dIqŽįũ}jΙ %°réV‰‰ĪČĀ3ÜúUYoōũėmí­ÆVyäRĀĮøÔī5žŸ¨—™ŌĻ… -Á'8aŪ•ÜROpšæģ[АpÚNMUŸ Ģi~ķ]„?ˆ'˙eŠ’HæŖ`ëũå`ŲüEU¸ōäÖtx<\ų¤˙čÁUSá"ŸÆŽđō:fŸžj4įšxëÖ¸‘Ú!<ŅG´P>hĀéīGzR8 .sĮōđúĖôZÖßņã= kÛØVIéWŋõŨŋĨlÁ°Â8æ5ūBĩŸÂŒaņ1č6äqø äB`ä:â‚0úõ™¨ôčAöõīü…q^$?iđߋ¯qmšÖ6˙f49?÷Û¸ü+ŽģēK îä8H"ižÃ“\‡‰ŒOÃkËkɒ+™m,<¯ķ8ũâin5š‰đWTķôCLf­gķPz#öüÁ¯PB§@+ᝄš¨Ķümŧ„Ŋ‰ aœ Ān_ũ}ŸxwãŽi įr0 ,xæ‚LŊd[āõŋû#U^}AĢzŅ[‚|ĶÛũ†ĒŠ;ņųWU„å­ņúŌcŠō ãŒu­L‚˜üöüuĻ8$™úĶÉ÷õĻ€ģŊúu§( QänÁęOå@c?N >ôtúĐ!Ą~vŠ8â›üD͇J@.:Ņõé@čqJ{c­0?Ö~ņŠ3đ§ŽÔŖ$❚LķĮZ_ƀ v=)˙Ē€isĮJBqõīM/ķ‘ŒdĶž”Á÷ų s´ņĶ ņMq“š4Ö?!朚ĮZcũĶīN?Ũã§ų˙>ÔđHΧzéÚ˛ŲÃyŠųŌųJvÆ˛žZcpۜdüĮ?JŅ 1‘Â˛…U6ãØŌppI÷͚ 8éĪ­VŊ¸’ÚÎIaŒģŽ02q×8ã“ĮŊV°Õb•„7Ā&,Dxų<Äč+@88öÁīVæ“ąŽ×4ÁÁė~ŋįŸūŊ`ũž++ģ§7Čû&"H$—æ# Á•O8\āÔÜVįLôĪJcÆW[’¤pjjC›TĮ Yj‡?@A$d`ž§ëëOÉÁ¨Ÿ9ĮQĐSū•§¨…=/n:ĶsīFr1šUÔĸŽ[xÄĒ,fUn„gûAü)ÖÅ gŗ•ˇ< ŸâŒũĶøēšnĻØŌ.ÆGú§‰Uûģ {Å ęÂD˙W2ģjô3Eq– HĪFCĮ˙Zē#8Kgs -ĐķŒúR}=hééIČĢ d„֜˜+œqŠGõĪĩŪI͡~ŨĒAŸNĩģ‘ŒûT šíô Æ>^sŠ$cŠL ïNôæPÚž¸ĮjryÉüjQ͜âÍ8 hįÂŸzbiŽyā͏īÍ!Î}=čŊiG,8Ĩƒ×4m% b~ŸĖũ*™ m¨fÄW?2žÂAÛęG#ũĶWˆĀ5[P…ĨąŽ7 ķ#cü,ŧķ隙Æčērå•ÅæÚU=ŠŽTŠ]ęz†°ŋÚaGA€ëŧgЌŠq!Ōrkī3eŌ­_5-Rí,ĘqôaüĒm>Ä[ęķË4ˇÁIü;ĐĢđįGģÕ-õ}9ŗĩ&Y•á#˛°?2tį‘ÍuŅ‘ģíO<)ųē IĪį­=ņÆqĮ4 Ā8ܝvŽüV}†ˇc{:Ão).I • ¤ņ“ßä?•7Yņėv˙ËC˙ 5V#kX }”(c™ļĶ˙ëĒcîūÕGá9+|C˛sŠ1G'ŠÔČCĮĄ§)ĨėƒĶ­0 ÁcË…į§ÔķUâ쎜Šâ)Ûj˛09#°"–öŪ[>{heX¤’6E‘†B“Æq߯jį­ü3%ŦĐÉę+Á1–0Čpģ‘”†$äđTuū–ßaŲw:ÔlBŖ5íēŦœ!2¸ƒÎ9íN[ë6d s2åâAķs۞k& å!ĶŖ’kfK!BÆß3yeA''šcøŠ“HŅ_L“â•cÜĖ™}Č `gąlˇÔš.û‘}īm#iRK¨•‚°iÁô>ŸOjž&Ü>V`šëßúū5ĪIáëĮšķöęæ}ƒxöG8Ë1#ĻMiišdö7÷WRÎŽn’=ËÆÔˇN sž”]ö .ŒŅÚUĮ—ŌmĀéGN8Ē$i9ãĩ*†cŪųiÛĨ<Znr?Rŧ‚Ŋš§ō“GzAšSß4hëõ ×!°iF7šyü('×ĮÆá‘Å?ŒP9æŒņŽôÖ­w{khTÜÜEīģæHwŽ?:uÕÁ„"¤Í$‡j¤Asžŧ– bŗ5d¸š‚´Ø5´iÛGįŠĘŗU(ˇ…ŌũŨOxbģ6ŒėŅ2o„šÉĀ<Ž{ã ū5pœ)üĒ[‹{{ņåNŲdmĀÅ&ÖCęäUUĐėĮˇ>×4Ē?ā,Hü1ë\ÔņŽ´‘ŅS Í+ōŧ¸[X<ĶČ Ē„N¤“íßŊ6Ī2QÖķ[HãrŦĒšnį*;ÍÂ<63%ŧ3 Ąe\˙FŌ:ã§ĢZkhnŖōŽ!Šd'8•C öāņNxũšāîŸ1\ō;~„¨į `g'§æxÉ4(ÉkEk9!ížP~ĒFŌ>ŖōĒ7Ņj1Y\C5ˇÚŖ’'A-ˇQ‘™ Īá-ôĩŖųūÍ ģY›J jˆÂÅnÚé-Ŗ'†—ʏnOáVÛį@đ:u¨-Ļ{‹H.Á–5r= Šå$įŽ*]î\DŒÆrĒ>ô’v—9ü(S¸ņž;RēŖŽãÔw¤ŧ†)ÎpxÎqTîtÕyÅ´ÆÚåžņ šd˙}r3õ⯌˛āqKōãMIÅŨ; Å=1ž×TˇũīÚ"ģ_â‹ĘōÎ?Ų%>€į>Ŋj)5}9 ķžō(‡÷\á˛;c¨>ÕēA*A8ė0ĨPŊŠŨ-ŽĨōcŅ•irF=~¸ŽēXʋ}NZ¸H?„Î3jW@ÍoiˇČØ.YŖw¸ÁĮЁŌĨĩēËäÜ@`œŒĒ´ƒåHôīZj¤F‹)Œ|S'ĩŠîĘp9VS‚§ÔÕQÆN3ÕŨđąq÷Jä€Äã‘ÍI€3TÖI­nžËvåËs ØĮ˜=ĀãwĶØņĐ\\l㜎 ë^Ĩ:‘šN'Ÿ88;1¨¤sÆ(lc¸į­NŪχéÁ=:˛=úfŸN=x¨ƒqëĪJ•x Đđ8Ĩč>´ÃŸ\æÚ€íLnźëMbx NĮƒ§4nĮ¤qQÎU ‘˜áB1?@2@jAÍgëŊ#°^ˇLUņÚ1Ëūœ}HĨ'ĄQW’%ąWūËĩa„Hä*RTŒķN*Cĩ# ”ä×čÚȇ) !ø4ûiíÖą€&\S rjKbĻöÔ(įΠG^9zŌįĩ zæ—ÖbRŅ@¸ QĐĐĨsŦ>{ŋúí'ū„kp"Ŋ’#¨dhĀe#¨#Ĩaž~×˙]æøų­ÕȌcøGjÖ 3§ņ3ÂåbŗEö’74eU$rãŊL×ãvFŠ`N:l˙ėëU29üM9°9ã'Ĩfhc üįū&Úh=ķ˙lŽ{ÅpXiÚ˛Ŋ…ũĘí˙G˟>NĶ˙-f#§B}kR}vö+ûõŦm pąb&PFXņÆ ī’1Cx–æ(6s4Фģ/ŠũīåœsÆ)\:?5ŧČܤ˙ `øĶŦ.s [˙ßoūéâIžmšMËEķu8bNqDoĮĸ¯é:‘Ô^E6¯ÄCķsģ'wâ„;ŽĮ’7ÆŨQ—kø~ÜŠā‚íƒėxŽ‹á¯‰ ņ&Šx‰ĸA§ĩ´~b´.ÄĖGCĮņô–¯œšr`/š§`mšēîû.vœČq˙|šĢü ÕÍ\‘ö~ŋ|˙č&ЁĮ\ķ]T~ޝÄ(ÉéIĪz\`įĩĮ8­L@SōOū´Į;HČρšA{ĶØuéO;ĶH!ēsĶĨ.2síI×? _lĐ@ų›đ§´ jđíÅ8t iqE.y Žũ)Āb›Ū=)ØÍ8šcž¸ô§ŌĪ"€\žiĮzP8ãķÅo –i4nbĄĩÔ§ĖM5°[īsš¯bKŗnŅH¨Q)ÁMĮ āįœuÆ)#˛…ÕÛMsrĸ9|¸ŌJōŠÉĮŪ9$zqXTÄBšæ6…MŲ]MŧFI[j ÷'ņ椆Tž!$N$F9RŊķ×ņĒrÆņIöĮfG˙Q9<ąāžÎ1‘ßŒŽ„ŌŲiÖˇ4WHí:Ō•Õ%8fPp{‚1Î+9b”cΕŅQÃļųÔ}ŧŋmÔD°|Đ[̆•~ë9Ā ŋNõĢ&7°# äcÔžŨęŒK–ße#Ë´l}Ÿ<*žéíę3ëŠŋĐíũHĮé^]yšžfzTbĸšLļŅȆāũ\8ļÚ=sŒžĢœ }x¯:ņŊŽŠ ÔŌhúhžešōÚÛėūzÃD*Ë.ögÉŨĮW­6ÃsšŖy¤iúSyeĨ ÍÁõŊ0­$îØåF˛0|+muuáĶm=Ãy‰Ø—Øá˛g9!XēuöíZöļ¤j×wpOs°„Š5Ú2y!I$įžœUčíŌŌØAiP댈Đ.}8­s~Ōu+MVū˙VU3ČB¤…$w#šŅNΜەģ.æ54ŠŖ3~âÖ8)-Ą‰Z[jĄ‡B8úū•v >ŅrŠ8`ÔįšŠā”ŽMŠYö“ÁûĮž?ZM?ūAÖ§p+å(ā÷Ås=b™Đ´‘ađqÜæž2ƒ‘ôĻ7 Ĩ}zĶđÜNk6X Œ`g4$aąJ =#ÃuÅqƒõ4` úS‰ÜŖ“‚2Í@ÉQĀíU/ŨÖ8 V;§!`G Õŋ ã܊ˇ‚ëéTĻĩ(C…‰öcûÜgņۜ~5tÖ¤Tؚ2PŖEUQ€éObąōğ¯j6’Øb8 ēoŪW&{@EŧbC™ĮÔ✹dęxéP¤ūtaĀ*ā•‘UnâĻOģž@ĸ[Š]Aä Ų=ø8*Gp{ę?ũyĖoėN'Ž ˙ž°§ÎŠAüĮ_JĶ`Ą\Oj˜‚Ë’Hõ­)V'x“RŒj/xĀ֚įŋ…1ÚfōĪãœ*qÕôÖžßjG¨?ÆļvīÎÖ$JcA€ lšėūĐ}ŽOŠ.æ0ÖôĖ|ˇŅˇēÃķ§kK8ÍėCũãŠÛ%HhôĮJr`}îMOö„ģę1îaoN,6]#‘Ú \ū@‘5‹}t¨í÷VPPˇĶpĩķ´đ;R4Q˛4s"ȍÕYAđīGö„ēĄũF6ÜĢÎ8ã=ŠŦHǎš4V֓Íc4ö…Q˜,Resî0 ~é—­°Ö'Á˙¨##éũ+Ąc`ãĒg;ÁÉKBKš vSČP¤lÁ˜d ãĶü+—Åw6’ÆēŒ˛3EĘB.[?:ˇņ)ƜqŒ0í]?öEÖŨËŦ]įũ¸ĸaø€ƒ" -¨[ˇbéAĀ–×h?Š3qøVątä÷ą/ R+š”Ū/h´ņu6žQ ŧw <܂Ž@\ŧOĪkmôīZ"ŲÍ8ēŽ4ŠMā(˜‚GÉlķ‘ëš[=GPM’ °ĩ?,f^r8;W¯Š<ÕöŅ´ÉžÕĨĶm¤’Đx՚,tãÎšëbÕíszfõ’ąYqmā̇‡*} 9˛¸Ú2*kûv/ö¨ōîl‹™—Ôz°Īâ3PŦ‚X×f ‘Á*éÔUҤ“NĖ„ĮŒąÂĻĩeļDwœ#PäDXI–Í, ˙-=UN ã¯û­WĐGhŊ>ŖL÷§ŒT1 ERƒÖŒvŖ”Ŗ¨Žl)&āIšN=~cZ)ŠĸF­į ū5EFeš>—˙čf†ÎrOZëPRŠ9yÜdÍíHs‘ų˙tڰ㘧˙žGøÖr÷Ļ8˛W4ŊŠm#HęSķūÅ3ûVßpų'8˙bŠ„ 8Ŗ}iû‡ļ‘ Ú­šä¤Ø˙Žf‘5ke'+(õÉŋÂŗĪ+HŠÎqŒQė{fi6Ģj@Ȕû›ʕukl ‰‡ũąođŦÆĮzŌ§û¤b—ąAí¤MyĶĀ"ß˜Øŗf2ŧm#ŠĻr;{v¨ÎXįT˜=¸Ŧ#dg)s0į4žÃŊ!ägԌįšĸ@1ÜR|ÔžØüi–#ڀͧŊ0Ēnį֕I$į=x¨ÉÎHÎ{P"b1ĐԊčqŠÎhũãSŠa܎¤ĶąÜĐ1K‘ĪĨƒžÔŖ¯JÁęSĩž†æBĒ "ā‘œd~UsŠLYGöå™EØKˆÆ6ī ŽzgĄũ*đĮ,Ē#ÍöĮ+t¯îũ)ŦĀ)bBÎOjŠÖîÚéXÛΒmëƒĶđü ;¤ė¢b ŊBĐoDņę„gv:Äd~"Ąĩ­åŦN$ŗĖ\—]Ő÷Á äg=ē•Ŧ¯ŦđĐJ÷iüQJÁ_ūÜô8úŠå–2“÷^‡LpÕ-Ėĩ2íå‰meŪ^âØÅög’2n*7Fp;Øö"´ĻŗX¯0wųj.“ûð=Ę˙/•Ŗ7îá´[îķ•cø,mĖŠYbÕ,ĶyŲ}÷!O.@{`C~8ã5ƒ S{š¨ÖŌVÕPCylRUķ"plc¸ ö>„S,,œNÆif–VÜōKŒņĐ`p?ũgŊ-œ-icmo+.čãU;NFqÛÚŦ¯–¯-Î[t=Ũ;j2eI!eeŸŧ„døö5NÖ×_cRL.†Hƒė‚šîŋ0Į×ĒûĒ÷=jĨür†Šå71‰Žå^ŦĨH8õ#ƒŽøĒĻôŗ×UšiœmČ=M->Ÿ­SmZíä@åļķīūl01‰‡SĐŠČŠ”%ĐÔâö`­¸Î;Ķw;IĨRå˛Å!ô\mŨŒ¨ `p[סųöĒÚVŅĻĀš?(Ûõ ã?Ž3V¤ƒ‡ Gųũ*ļ–ņÉĨ[4Gp€O¸āūĸ´O÷l‡ņ–Û$€xëJ0­‚sšlƒpMŪŊ)āî\Ȩfˆ^rAû¸Ąp§ŋ*Uų¸éŠLa›,Ãoĩ…ÉQøŌãŗŌŽOõ.Aa§å;›ĄĒ×°ũĸÜǐ¯÷‘öįk„žrEYáNÖëM9į'ŒSŒĩWF}ĨĶO#ÆčÉ< nSČ9˙ ēI 2ãŪĒÉeG!ŽERmČ ö>Ŗõô§Į9“trâ9Ŗ8xÁū^ĸĩ—ŊĒ":hĖŨfRv‚K;¤´ˇˇ 4˛Î\ÂėG$ãœđ*K]n Ø/'•^Ō+Yü‚×g…# ôûØĮĩj U9_Đæŗ5BŌxˇy&Ev;PcĖ+€äw#VMŨęV¨Õ@1ާaH¨AĪjxåE+ŒÜy8ôĨ\dŒdĶXgœãڜ˕ÆE`VÔ…ŖBī'ĖQr:ū'đŠQH#QŖhü8¨Ĩõ;`†)Ŋ”úÔį¸^ÕŗøT{‘våØ\mžž”ck|ĢÅ"—ƒNƒŒ Ļŗ(PŋÄOJ2qšF8úøŌ 'r}Ē9n'(v=UA<{Õ“÷Sl™MEk§ŠÛísˏ` ›ŨĪ^}+>3›‹ĨD(žfåc¨āôį50Š!0û7˜~đ,äsÛ šCV,į%XĀ ö(acŪ?‰æO'+=‰T)_štŋĩ4ņü>y˙ĐŠ­ü"Ha"œmÁ'×Ļ)ú|ōĪŦé’6āF;6˛…ũÛc¯~ĩn›IˇũzëFöGlĸžzŠjŒķOī\æ‚Íę*@Å)ŒbôúņV#ŸQ‰nëâ_ũ ¨|”ĮŠŠ–{ƒ˙O˙čmN Ûükē;Sø˜Á’rOJkdˇ­H͌ė(Ī^)’&8äc0'Ļj|sŪĸÚOaī@…nV.3Đ{ŠvE&rĮ§Ō€ž ͚cˇ’)ãĻ}i€Â9ÆĻP<̓ĪũoåK§0ŽââŲŽ2Ūj)é†ëų0cø×.2s„/taãNĶ!ûåãī(­ÔåŌ)7OĄ'_a×ųŪŧąķÄsDŪEÄ#÷oˇ#|¤qōûg>•iIÉP1ڀ@8?7ĩxō­9K™ŊN4cŌE[VŗĩōŪQ,…™™•vŒ“œ“Vˆ$r}ë3íú„Ķß[ÚYƯo"ĸŊË˛Ģ‚9aÎ28­‹ Ę4ÛFō€œsŒŅR k&:rŒ•ōršU•ę=iy ŽÔŖ qŽĩ‹4Dm‡^00iĀ)QœéJW ’ *ü Ŗ%0ÜŧqČŠUF:sL“’ÃSņÆ@Zi]à =Ģ:}&›Ŧ㎕mË \dúčkQ°$ķHA#+ÅTfãą2Š{•,įYWܓ§ßÔ‚‡Û=ĒĮĘ`ņĒ×CopyW>„ō§ķČüjĶ&ėnŧúÕNÛô6hk†p3ūÆĢiÅbķmČÛ(•Ųƒw‰ōĮåW jø'–ОÛĨÂǰ(ÉĘ2œ2cڅ++0jîčY6Ģ)<Œõ§āį+Ķ5Mž×Ž›|ˇüú~‚§ĩ¸(ېÄępŅ?Oō?…h>~ä¸Uų€§ã"‘ûŖŸCš1ĩžcÅCŋRÅ8ę úR.GĘŖŠ8SĪz@ 8Ķ3ƒ4ūr1ԚãnOS@†"’ØTvŪhW,čsú{ƒū}jÂų™tĻˁ†ĀĪŌŠ;1I\­č !¸CŸēdpUž„õĒÊŨÎĶõŖ`™Jē+î‘Áü*›1Ķß Iļėsū¤˙ņ?ƝImš)¸–nmRúÎ[I÷å]­åšBGÔsõĮcY’MŖę_K4iÃQĮ’Kc<* œ€9?w§&ˇ—-'ŒķĮJŽæÖ ČL3&đ`AÁt ö<õÍew{2ˆí.ŌúÖ;˜wnĖ0AîŊKœŽkj:f­ss¨ÜÛÛhļđíFė`îhĮ/÷~™Ú$“ĐÃ:M Ë1¸Č8Æ=ąÛči°¸>I 2lz˙ŸåT4đė÷2† …Ø,!‰Øwž}zū5z@AÉ$ÅU‹ęR$cå–?4F~ŧ~UpmFDIj™h ~ŋ/ĸԉ‚:âĄoŋ¸ōsųT䝙QÍB.÷€ąÃņō¨Á͡6IÉãķr 5N Ãđ§)Æ84¸ ÁÎi@Ü0(‡åbĖx5 '¯J‹åkrjMየIôZîÁĸՕ›ÚČŲénĮ˙aūa‘Æ+6I.– ĩ­Œ’ėÛ'Š\Žŋ^ŋ@+MŗÁÁįŠÖĸŲüŒāîÚî4 Ž{Ō,ãĶ­; Ār*7Ë)+Ã`œöüJ…ī4ŠzjQ’æYnåe1G ōā—8¸Zã~Ņ/ūŒjVĀ“Ÿį]ŅØâžã6…|íĄĪ͞E<œ9¨ß†ÆOJdcŋ֐1čgŌ—iĀę}é6x+š¸/Ašj’1Oe$pyĻĄįN}i€ŒĀ ļœ„mĄō˙ 9#Ÿja*ŲĮ ķŒū4™\•Ā8īNnĸ€˜Ĩ=I¤4īŠ įÚĄ¸ž+u +í v¨’O§s͠ЉtĮÖĢDņĪĢÄ#u‘`ŨĘą;XáGčZ˛­QSƒlēpį•„†ú dōüŌŽÜųrnF?ƒjĮų>ũĒÆĻëũ—+Ks0,r Šr@\ū'ųÕ [{xĄķw”PĨ›Ģ`c5–*éŨWĄėžäø ŧpëŧŌ… bÆzū5Ôs€á›=sK‚ϝVúĶđO™ôëNã#­' ŠR~j`"đėGĩE)1]ÚÎ:ųžSēücūúÚā4ŲîŧŽĖ˙"".YÎwė#`7l0î*L‚˜\äqČÅ!žGZ>e=p)ŨŠÖ`šxä` gČĨlõ'ІPš&ĪŁ‚}é[8Ë=)X،`ü܊d‚:Q¸;rŖ¸§žy&€ō)NAįĄĨûËĀ„qןjŠâ=ŧ7¯ĘßŨnĮđ4–ŗ›‹d™ÆÖ?+¯÷XųŠAeÆqîj”8ƒSžŗ(™AępßĻÚŌōåíŠ÷_1w$ˇņ4ƒģ¨ ûŦ0qúĐ8?5fh1†Y Ž>jŽ{;[­­´˙˜E¤Ũõ(ęZeާĮtš(۔€28 ã õÆĻŠ8ã‡ÉDjŧā^OëĪãS6dsXzũ˜¸Ž+‰Ž!ŠŌ ´Ģ;‘r0ėŪÆ8ãŸjĨ¨= va“UųœgŒ\/–AūĄŽī§8?…EĻjvú§Ú-åyļŒīBįîÁᜃžų­eÚä|˝§¸ĪQTŊŌ%Ē+Ë<Ō„šT˜đ˛8ōĢc!#˙<ÔCg˜ø‰˜xåąĶ5Ž{0ŪX[g"0¸t˙tô?J|Ē[r[“ĩ#ũėŅ&ėü§‚yĒÃSļW CŨ–FΝįV[ŽOJN.=žĀ¸wS.įh,ĨpYå_SĐĐ?‘~AŽŖŌĢŨö‹"~cįđžŋ+søSŠNZŠNČšÃcĻáÖĒ^ēMäŲ–ä`\҃–ĪąÛÆ­1Úš_NŋįüķU´ØšHōI Kp€ļqÂõ 1Øfš˛ŧžáK_tŧ0>^r=iœüĮ¤ČaōõĻ6OyŦīvh4ŊsTĩZ(jؒvō—Û=Oā ][PūÎĶ&@2(Â’ ôĮáŸÃŌąäÔ˛ĐÜę15ēŦjBŗ™Á'< 䁊éÃCšwėcZ\ąąŠČãQĀcéO+ģÜŠŽUãI!`ņČSAæœČî,0}+ŌšÎƒˇ÷=ķ\íΙŦ›Ģų {HšęU"C#‡Ē€ĢÂņÉbyčOąŽˆÃ1Š ™šô ZËGÖ ģī“dŗŦ“”†e ێŠšéžœbēÛE#UąÎqæˇū‹z‰ņ…\bĨ´jļ<äų­˙ĸŪ„„uXĨ˜8Zu@„ĸ–ŠĮäx§(ÁŖŊé‰ės‘Œ4ßõņ7ūŒjWäũ(ŒåĻ?ôŪ_ũÔ>1ÚģađŖŠ[ˆšÁųQŗ<ķJŧœsMsķã&¨Ā`}ėĶC9íO\cœĶHô Žæ˜ OČęzĐ /Ĩ#pķ ƒš@# ÉĮãJnžôämëUŽÃ›~|Ü]ūQÃČŨŽũ3͟Ni7e}ÆŖwk–2€ãš§Ž˜ĒpÛĨÆMާ&AŖ‰6ũAÃįęjĐŌŽŠ3S×(ô-ÕČņ´Öé›Ŧ,ŪÀãĨ Á˜ä āgˇ˙Z¤ČFcÔ.ƒuËČüļ˙… Ōe‘•¯/D^B@­OûDOāEKĮĶąKRåw´Õ¯­VHDō¤o&ek|„dzōkmbŽÛ‰}•~žŸœj"RĖĒ@‘đ[įôæ§ŲŒœą'œn?ĨyĩĢ:“æ;éS䍈omŨœ,€;/ĘĮĸœäĖøVYžâ‹‹ ”ĪxĶÍ€\ˇænŽæOēF=ék u4QÄNŽ‘ Ô#Wâ1Ŗģ $jö÷Q,‡j<‘õĮ˙ŦUƒĶ‘ÔUų­Ŗē š%t$|­Ķ#Ą˙õV@…lĩĩˆģBbķB;°įįúWŖ†Æ{GÉ$qWÂō.x˛u'Žü}qPCeííŌŨ´°ŽČČŠå9Ā8ûÁĒÎ>väuĮ*/6°dʸô>x"Ÿ ÕÂŨĮđEtgVŽRāí+œ‚ ÷­T—41—/ģ"Ķ`…Üy§¯Ė0=éŽ7_\â¤`HČ"˛5cîąĨh¤(† 6î^xÅ ĄÁ9Ŗ'Ōä0ĮSF7 JaųNO9 Šėp)Aw4ÖõNĮx§–UÉęĨqüÔÕÄÂįëTī­|Ų"¸@ž|, dt#>ūÕpĩėȝ÷[—#mĘqīR`‘†¨-&ûD[•v•bŦŦAÚGn8ĢW$fŗ”lėZiĢĄ¤ō€qQėų°ûYO¨Čę?ĪáR“šH•…čĖ ZĀĖ]6Úö ‹™eōc¤p ‚'?|ļNâF9úÕļ˜ <ĩÎx‚ [køu[ˉâ‚.éo“# ¸¯đŒtã$õėw­ZäÚĀ:î ÃiėGcíTą?3@1SYI,zt¨š ž4öĀ]Āį>”†Fņyą˛ė2í#‘ūxüj­ˇœŗIk1I<ĨBޤ‚Ų$sž;UũÄô |Öv¤&ˇ?jĩRŌģ‘G v Žŧ? Ö´õ÷Yœũßy[šn•e8ûĶ:Ŗéܟ§éS[؈eķϕϗāp] tÍ~GŲ-[r Ûžä_­YLĪ-éJrŗ´B)=dSÔ.8žÍ nĶ\+öôŧņÆjėqˆcu@Qô*ļ -„Áĸ™"#¨aĶ=´ąÍ ÉGäMĢÃŨDŠZnäŊ>čüiŽŧäžiāœíč)­ō~÷ô¨äkĄ¯4VĮ'ŦŪĻŠŦØiVūTŧ†EVvā’0Af;ŽAÆrüE+]?ŧ÷—kŖ4šČRÕ­áfxHB˛ŨAį p}1]øjvßS’ŖŧėlÛĸÅÛÆ¸Ž5 žĀp?•8a>ų8Ĩ\ȸ^(ÚÃōĮĨuĢõ$BXd(qڂģėņJ…˛PŽ1Hv Ã{ †K*˜×ššĐÕŦOņyŸûöõ\Wāü§Šąhģu{˙Ļ˙ĸŪ“vԊ\sHiØŦĀ1Eĸ€2Ō÷ƒ4§Ĩ5ž‚9ČG˙×i?ô3NnCM„|˛wũėœĀÍ+ÆHë]°øQÂ÷rqMrryíéšzŽ1MŊĀY"įŒJfÃÉĮņ‚ŊGįHp7{PØ ž”)ÉlļiX€sH ˙? G ō)g tîiXž:Sŗî Zx™ĨYb!g˜Ûh9˙dúƒ˙ęĢIĢœ\Ŧ>>áƒē@Áú}j<‚pHäÔŋŽjØhUwfôą§ĸuG`BØ^3Šv S–ĀúuĢ6witŦ6FC‡ŽNĢúÔÔ2ˇŲîcģS€¸IÜ=˙ĪĶ5Í[ ÄŪ–*NVfļniŦŋ>@üiŲzSY‰\|ŖëÖŧĢ>§ĸ<ŧ–ĮSŋpÃ}iČrŧŒ‘Öš œāg֐2MģNâIĩdęö—ßm+ū$k6H1°$ƒô;ąžØįƒÆ°ÁÆO֚ŅŦŅ4RŒŖ Ŧ=AíZQ¨éÍIt"ŦââĖ-<^(.ūb˛.L(Ü?˙_ķ7ąĐUM9™ŦbÜ۝T#Ÿö—ƒúŠļ1ŽĩôPwŠg‰%g¨Ŋ)Ũ\ŅŽ‡ĩ!eÛĪ÷Ē$­åŨŨ^Ζ÷ p…Éh‹–cžŲ8üęEŌ¯guûEōĒ(ųEēydˇŠË6{ņHŽÖēŠLš)3$2/š8R=ōq˙­+”í¤Ķ$R”ũÛ˛nU>§ÛÖŧlUZ°Ēã{&zxjtå ÛR;->+5vß$ĶIōJAv ā eˇ˛֒$qĮįmivėŖžøöŠīgĻŖN…>#Š9´—i­bšX™dĘėŠÃIœ įĮôĨđåČšŅՄp"eOŗ–1U$Gž9̎ņJöŌŦųrē0FéĩąÁčĪ85[I‡Q‚úé&yxUG“ȁĶ߯z§đ“ÔŊ°†īOĘĒ”Û“ŠhgÎq†éŒTŦw'~ŸÖČâ7=1M™’$,Ėõ9â›#ˆâg`N@ü“Û¨L^gŨ1„Ú uá°ŽŗŋCšž"4•ēŠˇMöļšŪ0é"bFҐIß­MæÜūąS'’‰ƒų’iˆNzTˆ=Ģ׎”md9â*H‰ãVå÷I˙]‘BÚÛķû•ää€ŧfĻ+šv8âˇItF7}HžĪ1äĮ˙| ‰íĸ ‰Tú¨Ú UŦpyĻ?'Ôö§a]ô*‘¯ūiK(‡hßÕrúÕ0QĖĶTnš™IÚJŒ{ūMLĨW÷dwâšj+JĮuîj{`¯Ŋ) ÷†I”|ÄāđĻ‚0į5 ą°™i„6ąįĩ8†nGJOŊہĻíÛ8ŠėÔϝ`3Κ˙ú)é€Mžõ-Vąį,˛ˇū‹zOa3ŠĮZQŌ€:æŒV`QŠ($zŌã”c{U'¨ŽnōÉ˙]d˙Đڜũ$=ķŅ˙ô#Jã'˙­]ąØá–âG'ŋ~´Ö'ƒŠrŖ˙­HAwnõD‹œĶ–ĮŊIœôéMžũ(cÁ暇Žĩ!8dëMN‡Ĩ$œƒJ’h+šąN ˇŊG߂ߝۈ\ūĩ`søSf‰&…‘ūë du˙‡_ÃÚĸjđvM6iōŌ  ŨGĨAa9ēĶá–F`]˛ŽáĮ 㚜ˇÍœÅ|ܯ{3Ũ‹ē¸<‚.Ä*(Ë3p랛VŊšT[Uߓ :îy?Ú<€‹õĢúĢ›‡†Ë9Vũė ˙uO øą€jĒæ É&ĩxāĒDˆrĄKwũ¯JėĄ†rĻįc–­tĒ(lMy-øÔ"‰Ļ6ņ<$ƒC–{!Á8äcĩWŽÆx%–ę;×Ėûŧ€+ôö>Õ:­Ü—)=ÛÄJ!DH”€2Tœ’Oe…NgŽ9Žúevš8ëVnw‹+ZŖ—šžDXäžMæ49 0îpO­ZĮ …5GŪúĶ€5Õ¨.UąÎÛnė æ”€3Å.84˜ãb+ÜÄĶÁ"ÆBČd'8ܧpũ@Ģöw†čË Đ´SG‚ĘCt#§ĄęŦ›§ˇ{‘ks2Co€ķģɰmūŽXƒß 5bŪįHĶēÚŨ§”Ē*‹9،Ŗ'ŒdķīĪŧœ,ß*NũĪC Í{čm˜tĄFFÖpÖFėËeyGF?÷Á?­1õy"_ėŲÄCŠ$ö!FĮ\öކĢü§oˇ§ÜÔ AĮAڔc8ÎMbZkë;´}PļŨđĪæ,G˛ŋ§Ļ{÷"ļ˛Ęäũk9Ķ”7.#=…ÎŨ¸‡hāšqמ(ãQ’;ÔėP€0<đž´d)žE ¸b3PÜ]­ŦJ îfeDL€X“ÚœbŪÂm-ĮČå9Ī"¤ā ĀtūUEŽ.FKXŒ}Ƀų‘Ę”Eyvž\æ( cķ$y.ÃĐąĀĮ¯j~ņú{¨j“Š] ?e„‚™R’zķØqøæ¯Œ0ãæ>ž´XĀ^Ž….6œ€*g+čļ*kV)ƒž)ŧŒdúāĶ1&‘ŗŸ”T”F-āfÜĐĮ¸˙Á“O”zRRzPrĘ Š vÎđŒzR†ûF2i$Á+“Č5;ÜqĐĶ@Nsœ’1éKĮzŌ&9 Í('8 Hw˛ß6yôŖ ŒŽ´’Č–ęd–@¨:ąíU_TĩQ”2‘…°ĪАR„ĨЇ4ē–ĪÁ'éLfʕ‘íT>ĶpeÜļŽ夨ŋÔŸŌ¤y5¤‹kqģ§īįåįč*Ŋ›ęŅ*}‘ØyLf@ĸv!˜¯!@ÉĮŋJŅfĀÚ>øĒV–nŗ îgieU#S=qĮķæŦŨ]ÛÄʲȑ–Ë|Ųé‘ÉÆ}{úŠŠ{֌EkļJ™^_8Ŧ­SPˇŗš‚Gž0`vw\n*678üjÅŧˇ“Û¤Ģē;’@=7qŒôĻũ…>Æö’eÄĒÂSŒo$ÕABŧöō&NS^ábÆōßPŗKËbZÎŌTŒķčjŪr>UÁKLĶ­4›1ij›"RHRÄ˙:ē Î1ÅgW‘Éō|= a~U͸Œ2ŋ7'Ŋ1r1ˇļiîdõ4ĀIÉŸB†¸ Øf=iĀíáE6]š䁨QHĪNŧt C …“=yæĻbq”Ī#ĄÜAųŽy6īŨF:{bØ^×fdŒ&šaœ$GįÔûR8ÉčsLˇęŁÜÎŲãÜԄášđ¯ĻŖ$ ŦšĻÁ2IŠĀéH>`§ dtéZ™fĮ|Ķ—æĻH{szrŒĐÛ¨Ļ7~jL`ûÔNpØ C&Œŧ[×ī§#éÜR$Ēé• ’8Š”q“U­đ!mŖ‘#˙čF˛Ē“GNOá'Pd6Ą‚ánôĨKáŗŽ:R’¸Āâš÷;áŽOĘilg9Č4|θlMbĒ9<÷ @ 3SÅZ˛Qũ­bG]íŸûáĒ´là ƒļŦY¨ÅĻ9géūãPĮĐęGŨãŊũč<Ōâŗd‡ÍEĸ]øĨ¤ĮԜAÅUÄs˙ęŽ:īoũԌ:qMˇV˙yŋ™§œ3ÍvĮc…î 8ô¨ËuŠôÍ!Rj„/đđJj¯Í‚ŧzâœIÍ ãĐ!út¤Cßš§§áMĀŨšcg8$Â¤^TßĻ‘īOQō㊈`2zÔŊyĻAęp*N#4ƒã<â™9tˇ‘ŖO1ÕITūņĮLö˙ëԘäP:PÕôØļŖ´‡ļ6Å#¸ķĨ$ŧĮ9å‡éÚŦĪ*Û+I3ˆãQË`(ŸôôŦų­`œ†’v_ēHCP}ŠÖ)–DˇŒ°čĖ2Gã^d˛öį{Ë”mmG[“<ŗŨ6åķ[ 읖ŧĖäū50OŸ=Å8gø‡9õ¤Vū~9¯FPŠŠ8§')91ÃŽœ˙>ԊĘÃrGCN#<įđ¤ôČīVH‰Đûšx늍2;žãúô¨Eúɟ˛ÛÜ]*œŠ,¯ž `Ã&ĻSŒ~- ŒļEĸ099€pŨįúTp\ÃrŦŅ6âŧ#O¸# ÔÄКjé‰Ļˇ*­ĩ¸ģ{¯%|ö3÷ÔÆ–_ĩLņŲyąÂDnņœČ ũÜg#Ąëž*[™š k‰”sõĨĶŦŽíŽÚâ{¸¤Gˆ) BHčs¸į#§zäÆVöq˛ÜčÃRu%Š]æō]–pŧJß5Ô.ö v–4įšęĪn…|ŧā\BÅĶÛpęŧúäzšÛ)Ę´HŠęD€`C)wØ×õúœÜĪcģępå˛ÜĀ‚ÂŌöĖŲ]%¨,ŠHc) 0zpqÜÕĄiՄ o ũĸPž\2ØņČŠ!˛ĩ˛Œũ–ąÜÜį=¸Īn*АH>†šåS™ÜŪ0i[ŠyĨÕФ¨vēnéŸOlb›öëQ)í1)fëÉ˙"-¤sˇ˜­$rãŖŠ#ĐūŧöÍ>+hŖļ ==i{›ŪØŠæÍzڅŽŨŽ<ōIfQÔ¨Æ?jÄ60Ûŋ™!ģåßūú'5:x¸ã i9ßD5äR…HäîëR°,šéŒpB…¤ ļ\0¨(—å+ęiFYpx¤čÜ/¤m;‰â‚íŒsBî' ĀĄąœ§42įæ=ģP0¤įšNsžÔ•ʁš^HųBÛQÔúæŖpŪfGAôŠ›ksÍ@ß,‡qūį˙ÕT•Ũ‰zj,—–>ÉŽbI΀âĄ{™oŠÅh%Ž69{‚›@ėįŠü1īF”Ą­šwOŪÎåß?Âsŋ€~Ą‚OCVÜcĨĩ3IËVUN˛RėčōŠĪ™ ŪųísV@,?­)<Ŗ¯zFLķš‰JLĩˆC¨lߊļŌ9S€Ē’sR°Ęd°ČíIÆ? “U¯2ē…›g„‘ō{˙eĢ‘>ōxČū|˙ŸÎš{ÍZM/ėŌÉh'–čėķ ˙ŧ-ģ ŠI8éĮsZÁhäg-}ĶĻL‘ƒøŌIš›¸Z|8h9öÎj7]˛6î=k6ZDČŖg]ĮëN\°Á¤@ģyŪƒœž;ŌeĄ´|¤SS!š?-HøeČæš‹¸Ōâ6Čį4đ č*9Ú8āĶã/͊bŋ#$Ô͓pxíßđĒáļČęjÇÁ=ž´5­ƒGŖ2›G!É1uGūīąôú͉߂Œ ž„t?zŅ*ĘsĩNq’ Qŧa&âˆÉũę˙z¸\mí žv' ×ŋ ûŌ¯Ūį4Ôe)Į_aÅ=īÂŊSĪœ}éĀ``F{Q¸ČÎGų˙=*ĻšĻŨۉ ēB™xcŽlH,hœméP°9ŋlˇ<ũĸ"š†ĨcĪø`8}Ō03ëU-îƒ`’Ųb~§5iÖ ĩpÖąyØ1ųVUžŖ¯";ĢÛ]<§Ûnĸd$.ö ģ'ō’jÚ|*dûL ecŧpTá‡áŌŠkš×#†9nZ$‹y8Rw¸€GrQÅBÚ Ą&ˇ{˜d‰ŪG äžÜ3ō§\cxÉįęu—äÕ´â…ÍũēO0ãž§ķЧŧ´ŊÄK吗gĻ~šú×>ūš1u<–ˇ;˜Īī1ŒË`‘‚ÆpØÉÅK/‡K\\\›¤˜]ö¨¤‡å“k†P9āĘ÷ã‚•ÆoÚˎÕ]V(ÛNpGQõnČÕí=ß˙@jĖŌlÂČ[‰ä˜b^[đ î@ĀÍiŲ5‹1Žr˙úQq3¨M^šÅ/z E-“ŠSí@ûܚ^3š.#™ˇ˙Pßoũ͘r= ܌wfūfœ~÷N{Wtv8e¸‹€üéģˆb1Įjx ŒŒcÚŖn§‘T!äL@üüŊ?*h °?‰ A ųOzR(āį9§¸Č :Eėŋ…2NjBG—’yĻąÃ`āqJ:Å ° SˆÍVēŧŽŅwȁ'åŒe°Iú >áä&â‘Í ŒĘW!sÜs׌÷ĒeQ$Ûč5ÚHE9€“Ô“ĶįŋjAŖÁ^âņÛûßheĪā0?J“ûĐ2´‚iTsļiŨ”ũA8Ž™Fûk.Ŧ§jĪŧI46KÂē4ĮÔĘ?R> ˛ë$ļķąķĸ;KcĮfüF3Û9­öeP1ĪjĪžĶ–ōe‘fx$ ą™1–_N}9ätÍsSĮMTæ‘ŊL$y,ˇ+(O$ū\˙…SņŠÜąÜŧ`ãĖKwd'؁ĪáW$ŅL{Ŗ˛ēōmœ|ĘAfSв’xãąã<÷­EqÄĄ"AĩTbļŠ˜;^Ę-}ķûB*$ķa ™ĸxÁ>ŀĻŪŨOiuoļ=đ1ÚûQ‰ę:ĮBNyûŊĢ ‘RHĘČ”ŒŨ÷õŦyėŋŗÁšÕ[ėƒũe¸ÉØ?ŧ™äž@õČî ĨæŌZyŠĻ—XëäRģŊ…íįĩIÁš}Đĸã˜ņÁú÷˙ é$U‰~@ (Ŧk F h$I ´&Gxæ‰KŖ%šÛœc8Éô­¨%[ˆVHY]e]z\¸Ę““ģZ#§ ¨Ū,Ģ{ĻCxË1Ũę0ŗ'ŪĶÜ{ëT­å—|°\m3B@bŊC ķßôôÅl``‚sė:æą¤sąp˛Ģ=ƒE'fGËõÎOãW€ĒÕNKčF2’pæHPé×k˙LŸŸÂĩ­°Ö¨zņŌ¨;¤i#;Š2Åēc9úbĻŌ7EĻZÂā‡ō†CķŽ÷ƒô­ķ5tŒđ/Vh#ī]ŖŒSōāš…3æ-øfĻ8Ũ¸ĩä3Ō"bI ĩ:0@ÚÆ›6âA=4åà eŅĐŒ†ĀāP0“š0ÎŊvž´ŖIûŌmŲŠ†ęM(É9~QœĶō9ƒĨ~Sē˜ßŲ9§žwūŧS 6öĻ€rˎ”  `ķL/ą°ĮŌ¤8 uŠ “ĮJi¤æœĀ°Ĩ!įßƐ~î!ÂrM)Ë'C‘\î̍ęĸúãO°ˇŖ…eIC-šÂđ3üDnŧN*îČM¤Žjj:•Ļœ#{‰Ō ĖÜq׏ūŋĐJuđ@|Ųj)Ø˙>˜÷ŽnÃNŽkĄw5ŗŪ]YŪW>X;‰‘ķ``p01Û<íĮhæå$ģq#ŠĘDƒŋBzŸåZō(ęĖšÜžƕæĩ™gˆGžF‘õ Įw>jčŒ  <āŌ° re9sJåÅYX“ō…#ëIĀ'yæ€#ŒR0]š¤Š+”en `ķNqĩrHÅ3įc$-Jv,x98õĻ(åXÕHã#ŋZå—cjmbIĨŽ ŦĨŗŸ@9ė>ĩ­ƒ?†+Ew‚p+ĪŠ ¸§{°“”TŸR)@;IäƒIæ8Uį4­´8ÎM ÎÁõŠčP’dœĩ:Ę€#Ž;Tę E B¯Ę~c֐­€)JŒgŠF˯÷Í >ƒvę$Ŧ‘#K+Š2I8ŸéYÂ+Ģč–bņEĒA"$Ø{n'ŠīÅ5u+ƖD mc@ėpė Ëc§ĮáZĒK v­\”ˇfIsŋ")WË Â¨Ā€RÁ!ƒwŠQ"‚sÖŖq™†Tc"ŗÕî]’ذ>e9éJ°ŨĄ9âÉ\Rƒ āô43*Šq]Ã$ō)ŦC'š`By‡sŠ|Š åG5Žæ!˛9ëSą Uë@ŅFRšŒ]ji 媊5—`m ļî õÆ:UȘĢŎqU¯$û-ÔwiČE(8Û´“Čū™­);Kō"zĸÔJėrAP{…‚ī 튴…› z÷ǎ“[Û!•›ŽĨ šMģÚąiKt=( ÅQūЗėūd–S$cĢ3/8Î7Uđ˂:‘Æ}i¸5¸Ŗ$ö&zƒÅ5H9mŖ=*›ŋ# ´É3įdH2OŠĪ`)ļ— ģC"įQ’™Č#ÔJĨNM^ÂsWąą<ŅXJņE#0Â6ÅîËęG'𨴠/?ŗvj%dlE89'UocĪ5ˆõ­2¸û“ÚųˇCĶ8ôį¯oå„îįģԘÍ(ē‰ns–qčÃŽáūبÉá\ŦˇųœŪŌ?XPģ7NōģG_Z–@2Ųüęwrü1S¸YûWGQGgLâ‘ĐģdzæŸ!ļķĶŊ 2j–€Ęˇ°¯ØäŪD7ŒuãŸéM# 9Ģ&č$P .…:§žtHüüÃ5ęåōŅŖÍÆÆÍ1Ė č8§ã S°ØÅHŖ#<ãŪŊ„NÜTo¸œc­JzS äĶØëˇŽž†Ģƅf’ 0/ˇ¨ũ3øÕ A>ÕĪČŅJŖÛOĐ˙õņQ5ĖŦ]7i ‹ˇåņJŒ•¯z ||Ųâœq…ë\‡ĸ!VÎōÜÔÉv¨ Ŗšr‡<7zkâ>;)ßæ&ųTaąíV´Ķ˙›o]’gōZ=ŨTņVôåÛ00˙žoü…L€é…- §TbŠ(  žôîãđĻúSĮ^ŧĐIËÚ˙Į˛tīüéīž=}ŠļÃm˛B™Š$Ž•Ūļ8%šQÎI'Ū—?1Zv0¸ôéHĀmëÍ1'8äĶP û÷§(=¨sžÔ÷&9„1Dōš]Ø]ŖęÄTLírŗZ´rC.ĀęXŠÁĪm'Ąbæ(^-ĶG*dåÔr}V‚[H­å–Äh§.Š–ŲíÁĮ­e+ķjôėiY;jiÚ\‹¨Q•~Œ¸ûŽ8#đ9ĸÚÃėúŒ—BCąŗļ-¸ÛĨš˙€ŠŠbŗ‹Û‡šŲāWDÆüļNN=ļÖ¸ĒķĶkÂĢhI¨ģŖÖ§yE7¸ŨÁ+Ÿ˜Ôœƒ€9Ŧ›­/íZՕų¸uÁ‰xŨœu>•°7ę?™¤’ŗ.Mģ #$įÉĘ͆Ō}N(9bŗEaĀ, kH1€§ÚœĄGËÖĸ`ûÎNŅڋ ãČ܄’sQōÛvƒ×ĩJS‚zõĻĸNJvø `ŸŌ…aʎIĒ÷ˇļöæBģÉ v–Æ$œMI5ĖQ[ĩÃ8*î/ÛoųĮįO•ģ!6ļ2õëi,î­"ē‹í˜„hų`OõāOŌ y>Ã5ˉ'ŲŖ¸‹gœŠAҘtéŽO÷yíIh§ėåž2…Ĩ‘€oŊ‚äŒū­¨Ę`sĮ~õíRÂ/ggÔōĒb[Ÿ7cKų6J—W Ío‰"2:ŌĘ+27ķœôč6NŨä~¸Áü}é°ÅJR4šÎ✧zŪ…/gÔÆ­NqëÃ79æŸūÕč~´îŪÕš‘Y”Ëyg?~PíôP[ųí­rĒ͂OŦy Ã,w1)g„œ§wB>`=øČ÷Ūĩc’)vKĄƒzƒÍx™‚—´O§CÕÁ8ōX{}ŨĄOÖ¤Cķ6E2enjžĩ%Ü5˚t~māOŨ§Šõ¤zW 8ŠÉAisŽO•7šĄģ‚âĄO’C¸œZƒHk™tkF¸g1)ī`gŽÕb0 9äÔĩi8ö*2æW& ƒ…Ĩaƒģ&  ™:p*tÆŌ8 ¤6\áJƒœÔxŪ˙7QOf9QœsLPã“ցuÎŧ(\úT‘äŽІ_–A…ééÖŖēÔ-혆rō˙Ī(Ôŗ~>§Z\ŊÔ)IGrYîRØĒ„idsĩ#^Ŧ{ãĶęz:̧3™&šm—RķæBpcÆîŋ¯J’Ō9ĩėˉÜ`/h×Đ{žsVC‰É ¯QZs8éČQįÖEh`[DŠĒ žūõp‚H=B4ä æĻ?+g5œõeĨmHu=IÍ0ŖÉ ;p)ųÄĘ E1Œ‹> šÆl@Æ&”n'#ayQ“JA+‘Å-†ä?{4‡ ä)x+ęi.…NGŊEaĀ“žzÔĶe‘LEŒ8a'ԟ&BŽ)î!°ŒŽyÆ)—H“DŅ8¸ öė_OJXˆŽ[ Ķį,*BįBm;ƒĩĩ*Y4đĖ-n[pe>T‚NXÎF8ĮZlž_öÚ…›}ÂN2> 0ĀÕš-⚁V^qČÚyąį"˛’IâÕSΈåãōĖ™áŲI+͜_ˇjŪ•ßS]hkMːžH Ŗ <~ĄĒ‘ęÅ ‡Xį,‹Éų‡Sëœ­_FY–ÉĻųp™„žRyvۓƒÛ5—ģĘõ4’wŧYNÚ6•ŽnÜ:™X0B/Aųäū53AĘí–0ûy8+ô?į3nOZ1eÉ=č”Ûz E(ØĪW2[;œHrŦËËĄūŊĒm?OŗĶ!x­-Ō‘‹•AÆOČ §uæĮŦ‰ĨōŌŨŖØˇŠČĀ'?/9į­_+ŒįëJ—I$ô{‘Æ÷kbŋv3S˛|„€3P+Čüqížĩ9;#Ãr}k-zšĸ1žp2(p¯Ã‘OŠF,yâŖ› āž:ķBõeXđJĪ…0ķzJ˙ÎŽÉ4PÚųŽázą8Ÿi(ŸÍ”oÃHNvŸËĩzY|_<Ÿ‘Ík‘a–ĮŊKĶÔLyÔTŲ'Zõ8^qŒÔ2uã09æĸüuÅ3ˇ’8ĒwĶ´p"Fģåw]¨;āįųfŦÍ7–P•úĐ2OųöŦôFššŪIIÆ\:áį÷äŅtˇô4nU“w Įą§žPt¨âO. Œz u§†žĩÄõznzkk1J4Ģ“Å1ˆ*Ę@ČéOmáŗÕOjlˆŖæ^IëíIØl"ßĐ÷Ģ:deu˜OŦrJŦæ.@# ĢzaÎŗæįʐãņZ(Ĩ¤)k0 (ĸ€3:`Ōã'õ sšwøŠ 9‹b Ē}?­+‚OœĶm?ãÎ/e÷šīŽĮˇĮ°ĨlōBƒ´ōipW9éA‘s€zÕ ‚ũÎ3øŌ Ôė|§éMRW¯JEs(„[É9‘[+3œžzôĩ 6sę0#†h¤„.ōÆA• ‚>đūdՋŅųw)i"l„—ĀŊĮ¸õĄeqÄeĄ”Lšę?¯Ŋyx×QKMē~§~0h~ä?ÃOOœuĻ9>oĘ0H6ŒŒšōüĪ@b/$zņR(Į j"üŒã5+` Į¯Ŋ8§'eÔwKV(Ɯ╸9'JÁŗ×<>ēž˛đۉŧ´‹9 įœŸņ­ŨÁãų†@=GáÛéWR”éŊW‘Ģ­a†āry¨Ĩ‹yœr:T¤–Cė*"Į$c'Ōŗ4ØqÆPr=ižXo™°*UŨ´ü¤{VUÅÜëq%­¨FdĖ–RvĄ?Âäûō;UĶ„ĻųQI¨Ģą5I<÷ŠÎ5b2ĖŌįX Ž=I‡Đrj°˛ĀX„˛‹`ûÅš n¸dlÔđÂSĖyÉ4‡sČĀ žœĀTŸÄ:ãŪŊĘhÂ’Ôōkb§Ėļ!`Tuã&œ¸Úy˙ëĶ[î2)ā r+¨į„tšPHo™†)SžsHŋր$N§§Zqü)ąãs}Ĩ;øN(Ä §“Nš}6Ũe–(“22CųS—–Îz{_ĘĢ t™‹Š6~INå@NXxęk—‡öÖŗ:0õŊ–ļ5Ąē†î,,¨I—ąÁņ–̍éz"ĪĻĢ1”g ƒ×ƒÁ8eŧÛ;Ŗ-ŧjH1$@í9u†xé€yč§/ūÔ¸ˇ@omÖ(É˙[™Ūā׎1ë^tpōĄSŸ–é~'s¯ĐqnÍū„ÆæÎ)ņ*‡Øķ˙Öü)𝲐)č;˛¸ã9ĄyÉU û×iļŅŲLd€‰ķ¸fĒŪŪOöĄidPH|˛2îØČÉ$OLUļPdÎáŸķ˙×Ŧ›rD—2KIpāœvS°~Š+§EUŠgĒ9ņU8hÄyĩHd͂íAûŽžSø;Aš’ĶQ¸žšY 1m0LJɟ^āO_QOb[iõ˙f –ŠeģˇaöˆĮLczõ*~ŊcÍz5đPånšÕTąRēŒ™bKįŋ ™*øũë?sĪ Žíč?Wĸ‚ [Se{’NI>¤÷>ôyWĮq Ŗ~1ƒ“×>ũŌĻ™P/ļkĮœžÄON0ęÂÆ-ŧcM2 ,“R*ī AĮzEŒ*’NqQĸz (īŌ›r0ÁŽxŠFy6Ķe Í9ī¯ĨBä>b:ôŠÁũōƒTM„›ænϘ˛1ŠpÎ~cÅ&zV\ā“P12°}čaķg8éAČųi îRP•„B0ûÉ)Ķ™8wæŖ ÁGúTĨI9úqT"89œ™Ē÷— ‚4MîHĮ}yūUmFų6zŸJÍģ+5ë:€ģsŒäķ]x:*­KKTsâĒ:pēdļ×mîš5)ÜĢgԌvĻÜ .îÄÅBÄé#ĘN@9ûĒ=H¤;sF:b’ŅUe¸ŨÄHqęxū•ۉÜ}ŦNL>"s—$0Ē>`F=ŠOĖ2ƒšDEX’iPāô¯$ôÁ—)ÉÁ¨ã“-ˇ#ô÷A$šdxÎFŌ€"¸@䤀leÁ Џķũ*-=ü¸Ũ𒎿ęWøOåČÔķŽæ'åPŪ/—h×qįĀ…¸čārT˙?lV‘iĢËGˉQ¤6W¨—ˇvļąšTR0'8ÎqĮā Öf¯ íÍĒ}†Gķd}ŠØķ?0ę;dõįąŦø´+4c ˆˇwķ1’mō3ĮF9Į\@Žī­%{ rIhL|[jŽsÅ(,Č.8ä‚?;ÖŊĨĘßÁæ¯ú˛ėĄˇ˜+ž{qĮļ*šŅ ™B<’m æac@7uÎãųŠ{éŌũžeŒö‹ĮpZģA=Éŧ—A ís}ĻD(‰HTžā[ëÅ–‹Ü᱂N#¸­–¨ˆ„\(ŨЇJÉŅ4›ˆE˚ŒË$“4¨‰ĘEŸLķĪ5ĶB˛§ÍQŊ´ˇs Ԝųb–ä‹*JĮcrŋyOQėjĪz}ÍŧrˇŪ+"ũŲAãTÔũ †dIV7č3ĩûpC^… BĒ´G j“ō-tæĸe-%îPÁUÖ<ü‚LnŪ’[…‰Âí-!į 3ųūuŌž—flˆ#S/™,Œ¸Ø zs˙רŅĒ—ÛoMųgĮo˙]YĩLÚÆÆ S×j1“\Ō•Ųß k•ĀŌĪK$- ‘–ˆČü‰ĩ’ŨK;Í)B‰"õĮIĢj§< ]ĸ6Ü9ŠRﯜŠî fq‚1“ÆOAM;b1įéÖ¤b͂†Ŗ•C.ZŸ]†ÁŒ”^§Ō­iŖôÖ ?šÕXeÎSņSéAĮˆaÜxō%˙ĐŖĄí¨HéKHŊ)k0 (ĸ€3…>š)ŨN=h$åí?ãŌ/÷E<¨l*;Aū‰ôACä9$ūĩߎ¸đ¸dÁŠWã‘õĻ0ä1Ī ĒūœÔYÆN΃šnėįtÕŽ!´B$ų€8ÂđÃō÷5§qŠŪFÅ$Ä_iS( nF$Ī#8$ú|ĩp9ūX¨&šˇŠę$ûī’§nBžƒ'øsžĩz•(FI9ģž|j¸ŨAXlw—ĶF-Ã˛:%ŖÁ?1n@#œcœwá,æ7ļ×PK92x™âųduĮđžÃŽĀãšŗœä`zņU.,b¸“|°Æėŋt˛‚GĐöü+)ā`ãhhʆ.IŪZ•ĶLļ†â[I­mYâPŪl)´I sŸ—×ŪŦ[Ã8H†ÅäáG@ǜĀôĢʨU”€ČÑíYîL2ŧAōÎܞ¤c?×…zųuEgÍĮAŨL‘XĀä{T–žX’f+–ķ6–Įl b°Ų–#súŌŲС8%؟~ÃŅē2Á¯Ū-ķœûPIaĀúRŽ1ƒM †ĮjđĪ\ĨŠA9ƒė—‰n¨Ų™Z-ū`ãĪjî+ÉįŠ§˛’4Ø295NwI2TlîE/|Į“<‘ŲĘÖę’LėV8RØã?Ž(¸;۞ųÔŅƒÔrEMõC˛z1i°ąÖP­ÉÎbŖÛÆ+N8"Šą" î¨-žPĨp qVŠ;ąW)ļɌč22āãۚ€4…ZžŽėNĶž:R2’C`ũ*v-lF6€:úR"†ãÜP~dÎãŸJ|%™Ho@Ä{˛G8ëéYŅûÁũŲ_Ÿ_˜ÖR­ŸĖzÕO"c #eŖĪB;Šô2ųF3ŗ81Ņn&ēŽ9Ō7Y6ād\āúsÚĒŪ\Įš&‚@î8 /žß^õbTlCŨc$žÄdb›åCŗÃ+I>ų¯NsKKTčš+ĻJ#*7sČéųt¨mīm¯C<‘Ў¨#ąŠ‘žhČj†ŪĘŪÎâi‘0ĶŌcšgôŽunģŽũ Ɏ úšT ŽsL%ƒp=éåxÅ+Œ!ļāâ˜ŅÛ‹ <žWåäĶĀÍ=ĩ@ÃåUʎEOĻ1mzܞŸg—˙BŽĢÁ˛#ĪCŌ­i™˙„‚#ü"Ú_ũ *d€éGJZAŌ–¤Š(  đ3Ķĩ86OJN´ėb•ŽIËZseĀ?•į öúŌÚ ØĀØʉHãô¯B;p^§õĻ–%Gđ’\ œœŸ÷kšļ"ĶMęmJŒ§ĒZm M2ÁäšMėģĨ¨ÂƒË=ēÔ6Q´ûhŽ2‘*œz€3úĶĩFVļ[Pn$€G;s–˙ĮEKŒ.=1\ųz•œŲļ1̍ ÎxīĶĻj›KkÛĄžVÅĀĘ2üÅÔ(ųWî:ķĮCWį4§g'ŽjÁ?)'Š…/ĘņLDĮ€;Š^ÍãR`v ĘņÉĪJr€#úõϰGz”m)ֆB0¤ƒMāKž”čķ“’i‡‰3Ķ4,XžlķR‘ŠŽ!ÉĪÔ§⁍ëĮõĮ›ĮLՁëéUö‚åO<ô BĖ2@Ĩpv`gP´1Ķđ¯:ëĄßbŽŸöíŗũ˛U‘UöÄÆ=…—š#ąÎGáWb—æ ~”HŒAįƒB&ܜrin2•ŧĶÎj•v¤{ņ‚j)ķ!$ā~:&"ÃņéCē ȤƧ™A‹“Īj¯b|Z)€wt>¨l@ŨG¤u`ā`ĶĀT$¯'։Ņ]A'÷Ļ&0H‡L朠ã"(#*Á¸čOčÉäw hFnNqūVõÃEū?4`ûsŸĶ5dŽ$$šmÔb[vU°Ã)÷­ (ÔM™V‹”1✙˜ē3Ü7XÕ@ÚN¤w&ž%L‚ €x öĮn)7DžzÕ1ˇÎ¸F§N˙ ÷Ē$×1åP¨ųšY`ũÕی{Ræ3ÔäÕ{ÃįÜÃ&ī•đĒ̜.ĪOzŠ \]^,w„ĮnY™P Æ1ŸoįPŠI_ĸFδocg~â@\QļHcīQ=Õ´o6 sŽŧ~3ę¤ŒzņY4×KŠ'°1Xøėi’†ãoJyÚ@öĻ™ŽÜ÷Ĩæ† ŠWqįĒΔûĩ¸Āío'ū…TJŒˇŨÍ]ĶFģū]¤˙ĐŖ¤íÔˆtĨĸА (ĸ€(€y§€SyīëNvÚ äpEš79{0Eœ'ū™­r{Ķ,>Ãmķ.|¤˙ĐEI. į;×rŅqSîJ‚ääôŠP€ņȤōÎsST!X §ÔŠŒ…Æ ķÚ§Ā#Ķ|ĩūęĐ&û  5 G1ųB‚K7AūĪJ|‹ŖĘЏēžk%ŦL›{ėšųļŒ|Ü c#īTUš„*rv-éĐ-{"ōŨĢuHûŠękQXDŊžčä“ÛĪåCĮēSķ=ĒŊÜööĒ"dy¤˜!Oŧçā>žĩķ­ēÕ.úžĪ,iGMŒ¨XŨ\ũ­Æ†ØPœŒķŸŠãŽÃĩ_Éöü R´Ibļ…eų¤DPÅz8=ųĢ ņ“ÜWĐĶ‚§‘âԓ“ģr?=E(äŌdքnöÍW+ķđŨęĀ遚ūųÎ84Ā”üĒO IŊņ‘šŸīDsŽ•ųc6MKü8âŽŪũ¨$šúP&A•Āœįšz­K´dcü˙ž?ĨsW ŦI „ēYȗt‰! €Č6/BB}x#œŌnÅ$t!•OßĻ‘;ƒbąŒˇ°jbvˇž{q¸ˆd‚IUE>Ÿ*–ÁūõAĒÛhpĨ–KÉ#p˗hĶ‚øžzŽ8éÅJŸ(›HčĪÎ_sąE$pHU\įûį¯Z5wՓ\FĩKąÁÜ#\ų‡lcꊹ˙ĻžÔÔ‡Ëæt>jôÜ)>Påˇ{×3hÚŞF—Q^\ĪpJĄQ9<ÄžGû {V֍öˇĶ€ÔAûJË*ŗÆā‚‘ĀāŒcڄî&ŦZ-ŽwãÔ˙ŸzŽÖkļHÖîH –’*P“ÉÁ#8=ęéQė}¨Ų’sÍ„ge$8ĘQ~ë#@ąŽ‚Āį•UŨædԅtR\tDŒ`‡'<šĢ(]øĮŌ¤(§Œ9¤ ŧüšúP"ôaāX7üŗēÄÍÜ+§ô'ņÅtCō@ՂĘooÚōĘ¯<˜áJÁGĢqø{ŠŨ1)]ĖĒ;ôÅxyŒÔĒĨ}[Ąp, đA4’¯˜† Gz]‘•ĀPh¤ab¸-sšm͒{ĶP“ģĨ*ĮāĻ4Ũ iuĸ0dˡ~(˜íSŽi^(P` ’Hāį?ãĀŦ ŨJ{›YĻĶÂAoŗ-Ã!f“?*žÜu9üąZŌ§*’´HœÔufö²/͜ ‰ŲV]ã'˛c{ģA ķ^<Ņ3*Ȓ"på$QА{đ XÖÆļWibˇy–HÜŠĪđ‚Ãî‚{úŒwĒ•)B|Ŧ•5(ÜԜ c!yęÔøBėĀbqT´ydx$ˇ”—–ŨĖ{œr§ūų gÚ¯ėXؑøÖRŸ)iŨ\UbŒ`PWkdĐIĮËA§57›}ŠÚi6ĻōōA qģë˙ęĢ‚tžÖ;˜Ûtr(uaÜTītëMbÍŦŽ—|.A <ÂŦ[ÚĨĨ„V‘äE*(-“[?gėÖü×ü —´įwˇ/ęNŽ$ qéL” œĪAū}¨‰ŧ˛TsŸ~”˛ŗ‡]Ĩ‡†~ĩŸĄ¯MLëQx;ĒÎG8'õ&´ ”JqšíŌ¨håd7WXo”„f9ʏūžjëN@į#Œ×F&\ÕÜa‡V‹}ÉĘílŌጊ]ģ‡?΅88ŽSqŒŽj8÷nÁíüŠĪģkRF’Mē3KxŠ6=Ē­īښxZÚt4{ˇxņõĢ+—‡CzUZÉj$ȓw˜`zÔĶĐšŽˆCÖŦÅ1ĀĸĀ6še?z’G}Ā(ÉúRŦ;scÛŗe€Ân÷ĪJē€Å ­ÎéR‡Ā⃊g–Y(Nũh‹jŧtĨ¸Á‘÷jQ€zō9¨I&c‘ÅH‡<š=Dö3Šēž!ōŒ‡ũĐr?AæąŖnŖ=ĸ<ąmÒI;˛8 žÃŋá]Õ ™üč˜Į>ä’Tq‘YáÔ"Ë?–­÷w1 ÎkßÁb#RęIĶ›—qđĀ–ņ‘ˇ,ŧ}OŊ1āK…ÚĀä‚ Յûˆ­GäbēÎqb…c‰bVÜĢÆ\ķīP‚-dœˆ[î“Ō3č}ĒךFPČTœÍLĸšÔ¨IÅÜ`]­’xĻNß(+ֈ÷:´R<=GcJJ°ãjãk•ęzQš’¸(i!5gJPēäcū¤˙ĐŖĒą3o#î*֖ģuä9Îm¤˙ĐŖĨ'mΐRĐ(¨ĸŠ(™æ›)>nE8u¤›>_õrzn ŋ9>RķøTķ),8'ЇN?čÃRãJą#lĸ°ÃácHŌļ"Uá˛#=qV;•ā>rš'ŒTũr3ßÔ` 2(a@PÃ4ĀĒÎ?z@¯åVGJ…”–=sëLāˆÎrx<ÔQrĘ Īa†đGCsŽOŸn¸8Å!™?įųXŠzS`íĨ˛0B†cūņųWô/ųV5ę{:n]hÞj,ŋcl-­míË;˙yĪ,<Õ BjģLČûF2N~ĩZķRû,ūBD÷ÜʤAī’?LšųÅNV=Ũ"Bœ †ōæ;HâfÄh9ã9ÉĀī“éũk4kÜcû>īÎ?Á°s˙ÉQøŸÂ ŧšēŋōKSDÆGc(ecƒ€;žšéü5´pķobEm k[Ë{¸ZX˛ŒVE`UŽ ƒÍS}bYÃC2)Ā•ØFūīŸŽ*Šą†å™å܍¯ąĘ‡_FĮQõŠŧŌ™HĶ ލá#ĖīąŸĩdr-Ö¤wŠ6éɆ9KOûDĮû?Gw2y-gože(ą¯¸ÆO°ĨŧibĩÜ$Øî耎qš€īõ¤D[RË îw9gvË­vSĨ-yÍÍō’\ÂZÆX˜ä™xīōöŠõģwđëģ°&æÛj }öeāß­#Ģ O#’CU ´ˇIZH ‰dčYG<ûÖi:’SocHK•XĢĒĀ—-°Ã3Ę҆uÎôņ¸gæäŸ§5§Ļî´ŊŽ×{yRÄĖąŗäFęW!OĄÉĀöĒ‹#j\ õ1Œį=Ū§0ųÛKHņȏē9€Pō:˙JŌĩ(¸r[UŠäԜ›7C0??ZH$XëŠj„ íâēŒu’ąđ'aČ<ЏĨk+ ĸI’ŽĄ”ãdqÚŧ™R=ÎØÉ=ˆŖ*˛šĪz–NĮƒéH¨ãK#ˆ÷ö¨zjP!C’Ģ‚)˛ƒ (#žΧōĸÜ­’1č)d•–@¨šĮ$P–ĸe]WėNũ¤žVî7äL[0įƒÜÔzNŗãŨŅY—F"žÄ IéĪįW?“îĸĀÜXÆ{f‚ļîôî\ @˜~™˙=ę:•t–ĻĢŦ][kZ~›mhŌ Ī™$•Aū•ŗģNHõ5BÕÚîVŊddŠH•b ÜíÉ9?\øUčT†löëÍmUÅ(Å+[ņ2Ļž˛oGą¤yÄ{Tʘđ;đ*ĸBĀv늟%áƒŌąMtĐԍ@WÎîŊiĶķĮÔÔPĒîËg5`8M×Q‘ÂSš‡`0iėäĒ œS€;ģS&pĘyöŅģ° ŪÎI9Šrƒ ã¸Ĩ # 9“œbœ‹”Ãc9íEūĶ~BÃĶ#R\dãڇq’š¤ŒģH7g &g„āœp:œvõÍŊâ@’šÆé€UÆ ]Ē@˙<âēGNyį§mšîëí7häÆŌŖo#=;õūuۃ”`¤ä´ĐãÄÁĘQŗf*Ē%]‘° ‡ôį˙ƧXˆį9÷=k;NXæŽęlۉ3mVįđĪ•b˜ yb–PĀģēzr}ķ^ĖewĘy“‡*ē-ātĨSMČe 1ƒÜw§Vg{•åcĖl::”ü{Z{ĸĢ'¤’4‘vē‡v‘UbÃŖŽI_’:˙^EaV6÷Žuaę}‚Į˜ĨNŌŠ—JbuČŗøõ—˙BŽĢÄB’•kLû}O i?ô$ŽyYluƒĨ-HQ@G^zR˝úŠpëK!YāÛ4rZf~ÃoĪüąOũTŌæc`v˙Jl@sÁĐ(ųÁÂđ?ˆ˙Ÿj] ›Ģ†Á /–„u>\ßAĒ–ĩq-ĩ‹5¸îFXmķœ āė:ũĨą˛Ŋ˛´Žĩ)U‡ëĶŠ5Ό§Xŗˇ’—;,ęSO%×Ų-&x€@ķHĒ ä(\ņØįJHmR(W;˜îgv,Î}I=NüĒ+r`’A#™¤‘‹É!|āˀ*Än뤰wŦ)RTãąÕ)\† íR¤ķÅHĒAČœĶˇGÎāwtĒ:ÎǚTQ;+1Âá͏P?/ĪH­ŨītEú“ ĄĩoŪą%ÎTXŸ 5Åņiŗmo,ˆ }ÜûاÛ(šúæc÷c ār~ķt˙x­JŞHÆ8wK]Ų“Öå \M{ۗj3fЂ9~ųãˇ|"āc Į„UYCĨÍ´’#˜cWÎÅ-ĩŽ0p=ˇT^[ģ°YņØu_OJŠĻ×ųFęE‘šĐ¯5h-įT–T?ÜRz⋙䎒ŪáK"“ĮUK8펑äpd’FŨ!e(ËũĐPĮJQŠĩ厑r“RQîYģļYĨYcũÜę>Y8ö#¸ö˙õ„‰Ë“I•I؜†÷¸˙õvĻȓĀŋčĶŋŨ”#诪ō/ŽĘHfŠ'Œ’¤)$ņ‚N1ČüŠĨĨÛ!ļĩHЕRH2@`Få8üxįŋZ¨u“mcw1ĪĀUdō­ŨŌDÆŨÃjœcŽ:ŒdwS ōm6Åßæ’ 1ę cœTÂîH¤ÜÆˇĘ$^TŸé߃XĪĨš¤jÛT5ĩđą™líe¸Kī•ZیŸŧš'ĶņļdWNVŠį,m|Ũ60øōÚ2ŧ6HS‘üŋ‘­[ ä›OŽŨØ ČT$ą7dqœzdāÄĐPøNŠU9ˇ4d‚Hīš%@ÄÔöíũi! Čw ~tŽBā@#ļ+Ųíbļ™$3[ƒ §ņ ķ˙ėÕc >ÃˇīUßuĩČēÜ >Čå¨ų°}7sõĢ_ģq׊ēšûÄÃą $ļNĮ=ū•œž~ _,ųA´e߃ÉûŖ¯=ĢE˜'ÍÎ;ÖW‡ešķGR(Q<˛KáBäũ¨+AÔDɧ%æžÄŽ5XÆÕ^€R€HÎO4áŒu¤“´V;îh••ˆ]”3p Z—wËЎ8¨%B%$Š#ØS§ŧ†ÚÕį™ļFŸxãúwę:S4WVÉÉĪoJž\Gn{Vį‰`˛03ÛLąĘ2$PC€Cw_lŒšeîģs 7gĩŊŊī”É$Ä;ęØoē;ņU`šē€ÉķüĩšsąÉ^ęÜ—-f$ąķwŦŅ1Œ`3G¸nÎÍŪ•AtũR}VÎW¸ž#€™TI’ėXü„āāõÁéCõ MØä`9đ§!,Ų=+e×ÃöŅDņjK+M,ŠI`š-œž­øÔĖÚĖē´ƍ›ˆÖxÉ_Ũ =({ô"—(¯cj@cĐį­!9CœŠæ#ׯ­ô›‹ģÛ}Å#ŽAæFaų™˜ē`ũíĒ ņôë]-›n†7`*q‘EĶ,¸`‘U1Å{5šĖǧbGCõĢ`ĮԚҌįĩ ZÛ¸œS2ܐąĘŽwö˙­cËgŨĢŨŨҤq"ā1´gÜÃuojJ/qbŖb’Nꃎ=É#õĒsÆ|äĩp莅ã7FF;{õ°øĨeŅū‡j\×vŅ ĶâtO0íÚāņ‚;œË|˙‘TâÛHË)doēŌu'=­\üëŅRRÕcƒ‹ŗāUZ)^,`)Č˙t˙õķRŪŪ- „Ȓ@„ž‹ß5´;ΜŠ'¸ëŸÖ•Eîjk‡—ŋdY€ģ‰úÕ­/iÖS­ä˙ВĒ@ІûšâŦéJ[P?įŨ˙ô$Ž7m›;ŅҊZAKPEPAœōiŗŒÂÜã<͇4ÉQŠ1 Ž”^ĜžšØ ?(Rô˙tTŽĄdÉÆ1ëLĶԋŦK˙ Š–B¤đŨēWzÕqéĢ׿8Ôâ•F1“ÚĸÁķr@Įĩ12åN0 ¨Ķ&C“Î*B2:õĻ"2q@ "œ& ÎiŅũĀ9ôĸBT=)#s’ÜPeÆæáŽ*Eá9cČĪ"Ŗ‘O˜IũĒ@w ä‘íہ&wOéR°ÁëÅQ’ō w $‹æwDmÍų*Y/n&ųm­Ū0zMp6ôxŸËëRæ‘j›–Čĩ-Ė6ĢžyŖIĀg`ëUާn[ Ļ'§—O×ũiĐØäą2Ėxi_“øc€=…„žNŸ4‹“ BŠ‘ÕˆÂûčŠÉÖ×Cu‡KY1ÖwKw •b–0Ļxãą4į˙XIô§C‚…(ü8Ą¤Ãm pkuļ§+ˇAīū­ēôô¨a?6=Ēbxį8ĮzŽ-™4ÄHOđķNšiÎh¨+¨ŨáũŲA":ČģķƒĩÆ{gūē‹ÎkSÎŌĀ͇^2mųē7tįĢL9­ĶŪ˛•ĘjoĄ¤fÔ\H É<7\ÔÃAz'’giįô­LÅPšųqøTs•ãŸÆˆžųĮ#qR3Œæ€Rf€ ŒƒQ3žãČÆqô v$#œŌŽôŌz‘‚hô€QˆĀīšHqƒŪ–^Pq‘ži°Œnãh ›Ģ°ûfŧ‘öĖ‘ôŠCũ+I ŗ “YzÚ¤ĶĻĮʗ‰ž?ŧޟû5j+3ÆĨ+–Ē|įnā"ÄQ’­ÔžjWÉ@PdjŒ†}ŸÁëR,Ÿ¸$vŦŧÍÆî`ŧzŒwËè\ęZūô‹uōÖlĢ?ŠčqŒ1Ī=8į'Ą¸ļ]JÕíŪGvä<Œ{ŒVv“b4ģ‹„ÜZL¨.[žr\ãđNJģŗ3“ÖÆŊą†,žâIfoīÉ4­"ĀÛq“ŒŅōAÎK€ĄÁ$:â‡&ŨŲkEa圜Œ€j…ũŧqĮįĮŸ2#æ|ŊĮqø˙0+EXÆŪHq֘!ĄGĄũjqmk˛–‚4íwGŽTŽŸ‡įTôÕÜßI´ķ(]ĖŲā*˙\ŌFˇĐDZxUwbĪC܂˙™¤yĢh×iäēā‚ŦI$ũk^NX6Œc5)Ûąr@¨ā˜û Xx9P=đ)ˇ Ą•ąĐķR̆„lŦMĐãq&‰•RĒÁ†ėGŊK§ÍBáSéIƒļÅ{eũÚÆŋ$j¸tJ.-­n-ÄQË´üģĀ8§FāžĐŊéŌFžœŠž¨"˛‹yU–ņ@=îU–ęeŨ˛ÚĢN/¯bڅˇ›—}¸õ HĮáZ•R{Õ}IDļN}„í;ąÎ1ÜņÆĸpŠ\ÉwmÍxMĻÁö˜€y"jp0Är8ô5Mėõhī&+ ĨܲmŊÅhYŪÛ_[ųļŌ‰“ĶŒų.Ũė@cô¯)JQvGO*‘Enī%ĩؖeØi*gõ'éW,ãļpÛ(D8âĨÆÁČ'ŠY€ÁįMÆyĮœąlûdŨ{U8-"žkŌ2l”ĻԐ8ëĮzÖ%ƒõÖp´Ë;F ƒĄkHՕŊã9PîŠÉ<Ú{´2¤ō æ'TŪHô ZÚ,ąĪФŅļå{vįĄûËÔv¨!#Ë'v˙?•GáĶ帊îß ‘ŗĪę 'īÅģŦZG^Ŋ)i-bhRsETšŽáˆ‰Îė§§Z`÷¨¯ ¯ÉÎ9ö4-HšÍiíū‡'?ēOä)ėríĪjmŽ~ĮP|ĩīė)ō“ŋøOŊ+Ŋ+#…îH>âž{v¨‚ķŅ~ö3Rûĩę‰IW8$îā}sG¨‰I3ž4G!|J¨×ŗH…­­‹Ļp$‘‚Ģ{ާ…F˛j°û(8ûŖwķãųT{X–ŠI̤^”‘øšHxīĮĨU7<°ŸX¤Bŋ™ ū”ßŗÜ\dÎâēyPąÜãŨģ~ŦRĐĨFMØ[›čVVTLčpV%gÁô' üM&Ëëˆķ4ëwHųoŸĮā?SÆĒųQF¨Ē8U8ό‡+ƒéšÁÔoFtF‚ŽäCQâ@€ōOv÷'ŋÖŦPœœķPÂۜÖĨ Æ ×ĐTręTU;õÛ AüŧEĮũ´ZĩģkZ¯nķBÁ\Čd'ąRĖÃ4Ōč)l[jŽß|œžĩŗ‹›d™F3ÕOđãđ7įŠLqÆzũ(\ãړúRö ãņĨ'Īzn@8Ī8§ĐĐ @|äg=jYN#$?:ķcŸZe:Đ1ļrŲëÛŌ–L†ã=鹃æE,ŧ2õįĐPã'īëQŽ9ôëRC÷õ‘įßÎŨūKufĮß 3ęO~”IęBĖâTUlosÎ;Ž\ÕšG^˜÷įÚĒé,ZŌI˙įŧŒãŽŲÚŋĸЏˇg"\V‘‰,qĄQŨ?Īo­}ņ´ätīPBø“ž†ĻŸ8üøŦēéĐEˆ$Ÿ|ž}ie<ãô‘¨`H>ĸĄēšĶD›‡a8ôÉ÷ũ)¤äė&ėŽĘ÷äŲˇÛ *F@–?ųëØ{7?hÂ7F3ĶŪ˛ėĖw˛›ÖÃb°ĒãwÔ֒ž§Ļ´ŠĨŖØŠwwe”ļ˛ˆÍ%ĸĄbp߈~un/õĮ Wry?…UÔÖË-‡Ë`É)ãctĪëŒwÎ;ÖmļŖŠjv‘\Û,VŅ:įĖtÜ͞ęœ=3ŸĨ_ŗ•TœtčJ’‹qîXHü›ÛÕoŧ'Ū21•*§?ĪōĢ;ˇĻSŊžĀí,ŌM+āŧ˛N:{ ™X Į9÷Žø.X¨ö2ząīŒ†ôĻDËœäSÜžOĻ)ŠĄ[q•kûĒ}ŪƒÖ†@~oJMۓäĪá@‚MkQÜx㊉Ë2sÍHĨc!}j­åÃE"¤jWÎÄ=ņëč(QžˆMŲÂmƒ€O­3ÃînĀô¯@á{“tE'°čk2ā›ģ†ĩ\ųqķ>ĶųčŸÔūŊ]¸ŸėÖĻB 0 XžƒëœĮ=ĒŊ¤?f@%`Ō3r:=qíéíŠĘŦėŦkFÎåĸíđFëI "’šÉíJė=BŌ’'߸×;×FvĖYļœāĶ 0bM2v$ŠL‘NŽ0ɒ ‘Ī֋€É51R§y8ã­C.Ö.WŊĒE&XH$ô§¨"%`ŦŦŖ¨5;Šu Ō ļ°UÚOōŠwÅ[éJË !Ā,ÉíMæN Žūž˙ƜģcÎiŦä0S]ĐC6™+ī­]Ëŗ(ɉ\Žã=ĮLÕą# ›YBA÷Š6…;ųĩ”ųĶĨ%c2Zą$Ē‚L>¤ëߎy<ÛS¨ÖŒæ­JūôMSŸ$“ƒ‘Ķ4ȇ͜įšH&ĩ Ņ‡ § ũ)b@„āŸJč9Y!ö´ŗ,Ŋi ĖqL|ƒœįšt@ūZiæSĮ9㊙ÜTQŋœū ārr{ņ@ ˜Ŗ >”E÷[+ˇŸJIĸ=icrëœcš`6D,ŲŨŌ¨FxŽeQö‰$ĀtČf ģūų̞ąVãŒãÔÖ~–Åĩ]VbŲeš(A˙dDŒæíXÖ~éĩ f]fLewu÷Š”uŒUgÂɐ™âϐ„āž3ÅsŖüČŖa´zS&ĀĨ$aX|čŧ æ‡rí€qéMw@><ōqQÉ)}Č8üŠĐü€†ük3Vģ{Kë (Ĩa>ČË ›Œāqķô¤ėƒsY+†lįŊWŒĸHWũŽ9ŽgPÕuoôÆļ1[ų öް —N ° ãqaŒ÷jÅĶęÖĶÜF&šh„-sūRį*­ûŧÔąSôŨGM@édGaŸ_z!Íé\ũŽĩ}%ũŦ3Bíi$33'Y‚‡$ãąČ­čXCäc×­™÷€#7­,‰eüØũ)˛áX(ū]i#XļŨŖ1ÔĐŧ€œ2Š+ÛŊE=ĘEŸ2DMĀã{“éÖĢIq4ÛūĮ˛Š+įHø ášrYÂą“ˇ|ŨZVf?_JžTŊæO3 Ήõ#¨8ŗš Ļs.Ãö‚TŽNÍ̜pûäš}ÎĄ¯™ vŅț‚uPw”ōpH ‚?ÚžļŅO…‚@'8ĨK[{rV8.Fr™Ī×ü)8ÃĖ/.–$GO É+ŽĐ3¸‘õíô8Ē–@{€Ŗ3š•YŽâWļNŽÂ5NÃå†Ü¨ßp\vúU™ļoŨĪJĢĨîŽĸŗoŪ&Vr@#¯ĩAąVRN$äŸķõŠÕˇFĄjēŽö9<“Qvĩ-苚d‹rZųcĘúfzÑøVˆ ã5ķE*I *ü¸=qúvįëPÚk˛]° $~īõipģˇ˙žđ>Ü× |3ŋÕZõž{¯ŗ#˛ Mķ:đpx=˛AüĢēé+œI^A+I|ŌÉü°+œr ¸ûØô>¤ÔšHģŸLˇ’ôm¸+ûĀÃ5¤īm)˛›ËŪ¨<ĩ(6F$ōëŪ­o‘~aלõŒÛzm~§U8ÛTÉŨÁMŖå#Ŋ"Ÿ1vŗMbĒ…ņ“éëQy# ¤t˛FÚt&;…n}ŠP`ņĶ ģšaֈ™J`.’pF “ÅJX1j„Æļüg¨4õEĶŽ{ÕEQŧ9<õÆĨH[zeGOlUxA‚NAŠŲüžT}i?0B¨Ū˜b¤ķ@}™Áõ4ŌKá†8¨ådl˛‘ē† ™Ie!ķSQe"#å#’r;Ķ’C,C×ŨęN$Čô&žáąNléō˜Ô­´€ųāēsÃãņÁü=*ō1W$Žŧp1LœŦÖōĀéš]H#ûÃ"ĒXO"9´™ˇOGī"öqīë[Ō•´g%x[SSƒŽÂ•~îZ‰ČéøPÖˇ9ÆĘÄš“øôŠwc“r @ÛKž”÷N0=¨`I¸1įŌ‘Û jēA“ÆjY[(IÍ ŊŽ1L™˛Ë?lDĄÆ?&ûÃ8äzPҟtÅ;œŽ8¨ĄpAÁč:bŸĐâ€zŌdįژä@î*đėÅM98\ū´‘0+Oग;¯n´C÷O_ƀōĒu dbŗ,M[SĩōŅŌåuÔ.?8Í]— įiÎ85FÜ3øŠņĨŦ*¸ė KŸåYV^íîoAûæŠÍ1&†rTđH>ĩĖ0ÎsˇŌ§g. cuĪ{¤q"ĢnÎxŠ•†@úÔqĮåļÉĄßĘeām&€: S”ĻÎM0äōŦ1éLfLų€sëFāJ WœP,Ã;pÜÔáŧÄĀfĄL’ŒHíš™,̈́ʊbeųßÉ<zs°UØ;ŌymænÜvõÅ4Iîb‚=Ōtíę}€ęją–ōøIŒÛBō]‡°ūNyĨ¸ØēĨĢd˛LŲ¸įōŨWw4‹‘ÖĢáW܏ŠčlH–Ȩ iōžÅ%FGzf ln)wĒ)P¨nė´Ŧ &GĘŽŪ3šsēāwj†2RLáT¸§MŒeFî}hÔøĨ#§e"%Xô¨•¤r8Ā<õ¤”8$’=¨Øeƒ _ē8¨“ l㚑%ģBôãĨB7o ˇéš-a\˛Jã<zŒÖdņÅm<UļÉ0G\–V0sÆv֎V<p}ęĨûöfCûÁ:lø˛pßøëŌîDŌĩĮF‹Ĩ*ŧ|Zd āÎP)ā˛ŽÄ ž:€zņZ&oė’xwĩÆåmÁŒDrzžW€}°{b̘ŌEÃr¸ Ŗ¸Ŧéô¸¯mÚŪYe•DmBP§ĘŨƒ• Ę1“\•0üŌōęlĻívI­Mqus,6bkvŋ#%[íQ߃›×ĄĒ˛%€Ų'™4w„ƒö‰´Ē}7F;zS´õ)ąHyIX3IsžNO?ūĒĶ“g—°rc ­cF0÷dfå){ɕmėĄ7 ;Ļ—ĒÉ;ooÃ<Ā ēāđĮŋ89ŦÛۋgu T\œAÎ?? Ґ¨PŲÉéWÉËĸ+GU$d°ÁŦÛ§ē°ž5ˇŽ öČd†6† ~đáN$į#“WÚōÖ4ĖŦŽ™rk6[čâ¸{šRC ‹(Dd–;›§ˇ4Õ%?‰)ōõ/ßËm¨Z}›Pҧ–5Áų]qĮ¨'ō­-:öÎXÅ­ļčü¤˙TčU‚Ž;öĒ*BįЁÎ–{UļāW•t;]~Œ"šg†RVOĐčŒėīanWËÖŲXŗÄ8¨Ø'ōqL›}A-ÖÖGI#g7?„ķœœņôĒ7ēLWō#ę3Ŋה Æ@؜dü¸įŠŽ=K•öųrĘŋķÎ[™Y-ŌǜdĄfLŨ͟04…Ugxä{ĶČ^SëšĀ{ ;mwK‚ÖÎŪŲÔK3´QĖavmČëķH§ū[Ą„gÔ­i~qY‹ÆáE2 A*Į¨Ą‹m%GÅErXˇ Q°‰AXÉĀÉ]u¤ž{@Z9ŖØëˇpõĶü*Āe'sëJæÆ@8§{Čúž(e]/ĖŨ0*sˆˆwÉíÁ<‚=2)tXü¸ ¸ųÖ8“ĄmĪBN9'ŒŌx’ęÖÂŌŪYŦāē&UDķÔLõ9Á횖åä†ę‹&FKˆąĒį ę§éZͧ.[žģ|Œ'R<ÖíúšäƘF*æŠĄušų'ũu˙zŠ A9t…^ĐđڝÁQŒBŖđÉŦŊ ž§F.i(Í@ š)3EggšĢŠäé͐Ämž?Ų56Nj+Āfĩ’%mžb”Éę Qc›IĸĩŗYe€ c{Ø{žŸ§z†ØHĸGXK3oqžąĪÂ¯Įáéäf’ö(ĄcV€˜ę~÷Z–mųã•#Ô BĘBˇN8āũ˙zÚSR˛&ų‘ĨCzĨŨÁŸí&eâ@>T\đ€ãúÖ§›åČû‡?ūēŗkáëģkhāKËrˆĄGî č~˙Ĩ54ĢÅ'VĀúby˙ĮéÔ¨Ĩ.nÄT"5†pn F ĘsW?ąoAkĢ|Â&˙âŠWDēVg€˙L›˙ŠŦ“F…9TČĘqČäĶãqŗīTŗi¤†ķí?ķ͸˙ĮŠÉ¤ŪíܲړęŠŨĘl^I-ƒSĄvļ ėiŌéZƒdy°g=”âĨūČžá¤ļoĀŌēŒnłžžĩ;rƒëOLŋ$#5ˇN9ođŠ?˛ĩq›Vī7øS¸\Ŧįrô=i˛&ÖŨ“ŒtĢcLÔAá­1éŊŋÂĄ—IŋķI?e˙ĶF˙âhM č@ųAŗôÆÎrWŊŌŽŽ—¨EĒ‘ßÍoū&šÚf Xû nƒ÷Í˙ÄP˜ČKƒ üÕU­ūՀIŽDųŖ‘O˧Û˙¯ÁūZišŋwk:ųí˙ÄTKĻęm…+l3ЙÛ˙ˆ§}Ivz2š_˜˜C}ļOĘdžáo銾yÅ+iîĨd†ÉԎTĖØ?ų ÔVÚĨk3ˆÖÔ@Ā‹íBžs‚S€F8ö­a[Ŗ9įCŦHå#yä~u2œ¯oΜÚ^¤[!mGũŧ˙˛TƒMÕx‚Ôņ˙? ˙ÄVžÖĖŊ”ûS×síS Ãō¨ŌËQWÅiĮo´7˙RÍaŠų@›{l{\ū"káė§ØhEC¸uĄÔ7# úŌçj$[ÁŸyĪ˙CXęāļúy˙ũ Ŧ;‡˛ŸaÄ ša/ÄāTÉcŠmZÂíŋ˙cPũ‡Qi1öH¸nķ˙ö4{X÷e>ÃÜü§éQÂß?~ęÁ°Ôō?Ņ"ĮũwáBØę?ķęŸ÷øQíaÜ~Ę}ˆg$¨éֈx=>žĩ+ØęGZ§ôÔTicĒÁ˛Lc´ĢOÚøŊœûĖFōzt¨ŽčüFûrļIßûŽŲ˙ĐëIāÔ°lŸiüjĢéēŦš­ŊęYa#‚HL‹’YŖ#ŋmĻŗŠ8Ę:Q„”õ$ØŪnæ<ƒÍI#ƒcålzԉeÃ}…Æ{yŠū4Kg¨˛a,dÚH˙ưlė!ˆ—'yíëDÎĒUHⅲԙ€{ ō;ų‘˙ņT˛Á¨ Ŗû:Qƒ×͏˙ŠĄą] }ž‹Lp$1#ŊI ļĻTîĶäÚ}$˙ŠĻŊĨōšÆŸ&} ĮĪū=Nã%ŨĨ#ĻjĀyrTîĪ59ƒPÛštų†:áãã˙Ļ‹[įųŋŗn ŗÅ˙ÅŅplF•WŽ)ČÎK+}ÚGƒP1sĨ܏ø_ü]6;mDđÚuÖ3Ũâ˙âčēÜW(ęmW6Eˆ9›Ī÷Hūejú*6p==*­ÕŽĸn­té‚FY›-ãÛįéëøU˜âŋ#åĶŽ#tü]SŗŠ&+VØæU ÜŌî Ŧ¸ZiˇŊ,OöeÉ?īG˙ÅԘīļ7üJî”ãŽč˙øē‹ÜĢ‘Ä|9<3O}ĢōōEF^ļiˇŸœüUJŅß.ÜéˇXöŲ˙ÅQ~ƒ#e2p¸ĄŌ&l–ųņëJ#ŊŨ˙ ûŊ¸ô_ū*ĸ’+•|ޟw’:y`˙Zw ĸœĻ¯ÖŖURß;sڜđ¨˙‰}Ú˙Û1ū5ˇģb7i÷yũŅū4Ž/BÆBazö?įŊfEŊģkō\D¤yH$8$ŽŨz{V[Ŧl.qĐūī5Y­Žá”ĪĨáŪāÉ”pGB~Ŗ´ƒ˛dN7i˛āFáÉG­#n’6ōūG#¯÷z˙\TRyņ2•°ģĪûPĩ;}Ãaâœ˙Īģ˙…EÚÔˇfŒÄ—ėvëöŗ" ÜmÆây'ŸZÖŪŦ…qģĐÕ čϚÆņœ:ŋü{ŋ8`qĶž1øÕÍŌ2ô;°1Œ›w˙ ŠII\˜&´ X_ŨΊéŒáē Yl–4_"yÔd`Ü?&ü:Q HdÃ[^0ôi?ÂĻi\;ĀŖūd˙âi)ĩ°ÜS)Ø%ÃNōÍIDJ°Ī$‘RG_JY呔\^āqŒŒđsīVQØËox?íŌOū&ĢĨą@Ēņ_ēĄ%GŲ$ãœ˙v´…HŪėÆp—ÃߚCŲÁéÎiQÛlx¨ŲÆ Ŋā>ŋe“˙‰ĨG+Vļŧë˙>˛ņ5•ŅŅa[%Xã=čBūfTö5 JW8ļēÆ{ÚÉ˙ÄŅŠŋp‚đqÎ-$˙âi1ôĪÆŖū\ `ėŊŪB0ŋ’dû•­MŲp}jÆēŠâ×Ô4ø.<Éķ­æļ”, t …%[ßŋz[´ÔöįX_Zʧ ˛[?æīKA—yS‡#oĩXšp5 Lģ1\Ÿû`˙üMF/žpž\ĀwũÃ˙ņ4אōÄ|¤G$nĒ˙hŒ0 M˙~ü(7Q$Ûŋëƒ˙… L/ížÛa5¯ dMĄ˜gã?ÎĒŪK (ĀÕC†‚Œ~ĩsíq˛ŪbŸ_)‡ôĒRÍö˜cæōˆŨąąœũ+hMĨËķ2œW75ˇĐŌVPNzWôF˙‰ĨÁ¸_ũÖLw‘(pũĶūĄáéUõKļŒ–O&0N8ÎæŦ›5gPŖĩGšvę Å›¨  °y4§h* PH¨P1QK#yÅAĮJ( däđ=ęĀW´QB$’Œ•☒;> ā( œ‚āzzĶ `GO֊($Š8õÅJŲhÉČééE|ŦĮĨXĪŅE(ä‘ÍFŌŨ(ĸ˜ X˛pqQ˛íu÷<ŅE cæmąĻDŠÄätæŠ(mįxúS‡OŠ(Rc‹†šĢjH^Ŋ¨ĸ˜‘Í;9ĸŠ‘ˆĘj†\8¨ĸŠhčxL€Gj„šYxÄ(ĸ†˛O­7&Š)Ų]•AŊ2&/'&Š)ˆlš2žOJ™ÉHˇu8ĸŠCŊ„ jĪj( b3ãT7 œgŸZ( Am&ī“ZIK`ãԊ(NrƒÚĢÅ#oQž(ĸšYŽ"'Č6ɖ*”QH Y ‡*GRĒíP2OšĸŠ&•šVúQEEVLg9éW89éEubŒ}j)ßl€m#öĸŠœˆ;Ô ;4›HQ@M­PsAãņ§GÂíÉũhĸ˜ÛFŊÖŦļvc>ÔQHhŠ%Û/ô§J$°-øŅEĘgŸÄÔr?—)g"Š)+ąę0? TbrN3ôĸŠ@DōąSI ÎĖôgšŽ ŨžĀԎT/4ŦI(9&œ+ī\ëK9Ŋ¸ÍÔˉ6€§ŒbŸēį‹É˙īĄū†oŸ­aošČÅė˙øī˙FûGútߒņ4ŧ ?6+žķ¯ofãũ”˙âiæk˛Ÿņû(î§˙@ā┰Žu'ģ-…Ŋcũ”˙âidžđ~Ũ/ũđŸüM;čˇ 7W>“Ū…˙Ų=Ņ´Ūnaöļ˙žü) čs‘J2`­Íā\û §Ģđãâ?ûô?ƀ73KÅb ģáÁ¸Œįū™õéĻú˙Ãq“ĶæOū*k'ņãs˙ŽņT ×Íį5‘ũŗÜØÜ˙ãŸü]9uzŲ\˙ãŸüUjį™ŦÁĢĻOúĪäŋüUÛ¨˙[‘˙ã@yæ–˛ŋļáĪü{Üôëŗ˙¯NūŲ€õW?÷čҰ|PĨģôŦŅ­[ŸųgsŸúâßáGöÅžFā˙čīūĨFk7ûfÔö¸˙Āw˙âiļm1˙-˙đ˙øš Đ+8k6žŗ˙ā<ŸüM!ÖlÉûĶ˙ā<ŸüMsDÎ(ÍPūØ˛?Į(ĪŦ˙ÄĐuk>3#}LMūĄIzŖũ¯eûáøŖæ)ĩė ĮÚŖĪûÔzŽÕGûRĮū~âˇÍGö­‡üūÃ˙}ŠŊKT­aƒū›ožßŊãJ5m?ū­ŋīę˙0šw8 Õ!ĒéįĨõˇũũ_ņĨ:Ĩ‡ü˙[ßÕ˙@]Î ĒÚv˙ëoûúŋãKũ§c˙?ļß÷õƘčīUžßi×í~ņ¤ūĐ´'‹¨?īā˙@[ŖŠĒˇ–Í’.#8˙lT‚歏ūúšŠˆ\DzJ‡čž$Cücūú¤˙ 3Í3Ė\ũāiwÍ?4”›ģRdPŠE4J0;4w¤¤?{š~hÆiš4ģŊhÔw¤irh´RdŅ@÷–I ƒųĶw€:t§‚hcōúūŊ0››Ÿ—Ģž*›¯j†0 ÷“ûæūu(?./Œāāž=jyį\ÛĀY3÷ä“jœqĮSúR“Œw‹{,ÅI¸í=1íQũžü.qnĶ{<JF’XWũ&Ũ•GWŒīP?ô!ųTF´‰ƒƒ[’ÆHĄÆĻ’&‰Ô::=9–A‚9Š#“Ž´Ö?1įœŌ¨#ƒŒvÅ4ąšũhaģ$ūŸœS‚„ŽÔā!ŠqĶ=j'xÉ==*lvŽi…ĐŒãœŽ†š#9ŌÔsŪŖ_•ąžįŠJØ+‘ôÅ †āŠĮŠ’8'>”ĀWázúЄŖq)­ģpā~4ŖĻ{įšIāxõĨVl{t¤vËc?Ĩ8nĀĪá@ Qß!yŠŊ2i™ĮANęhų?•)ëëĀ4€ŒāRĻ€ũy^˙Ĩ(Î9éHã#ÛĨ*Aö œ8ĮaNŨÅ0Ÿ˜Ÿj>‚€’yĐۏ™æ”?ƀp]xã֟1Žie^üo€~öGcšrž2)¤ū”áہ‹œäԃÆqHxįېž{Đ 'Ž>´€ŒpyĪOZ đ)1“ī@ķ‘ŠyĪJ@y4•=j‰ÉëR ĘTdĩ"ƒ…ĮĨH JNÜR9'RŒˇ­Ԋc°úSņÆsÍE#mË1“íŪ…Ų ÷cĪĻô8{UháûJyŗ ōˆŦ@UėF;÷§Ú–ō6ļKFJsßū•N$ķ2fc°J¸ HŲŲ“€}ûTl‡îĻév üĪJ[’[– ŲĨSÆN~ĩMî'PCڕfû˜ų†}Čéëũi|‹‘‚nÎīO(rĪ˙ޟ/v.kė[ŨõÆ9Ϝ‚GĩVķ.Ôíû:–'—aQģ?IæmĘTĢ)Úpr:g­Ž×’Ø”?'=E.âGĄÍG$Š fGÞÃëP™æRže¸Tf I~FH÷¤ĸ؜’'\†čsJÍ×* Įz‚+ģw 0ÍČ Ĩ3ųÔėO#°¤ãmƤžĀŦIäSÛ8 Öĸ$üŨiėIÆ=qHbîŌ2§tAĮqN\ãŠBäÁÉß"šōSņQOBG˙|Š zĶûtÉë@ųĖ1Ÿø§C§Åp˰Ú@Jã%”qŸÃڔäņšŊĨÜN=?æÔŦ2°Ņū\›+sĮû?áLūĮel ãĶoøVūOáM=iØ /ė“ÚÂ/üv˜ÚNN?ŗâĮüēšžŸ×üņųP„sëŖŽŸŲņđ}ühXķ_¨Ųū5'†õņ­HŦîÚĘm øƒ[@p:PökŽ–˙˙⊍§>ÂM‘\÷Ę˙ņUŅv¨Üü§#4YΝ:EįėōāHqũ§ļˆĮsg*ųƒ|‹ŸŽFŌqÖĩ˛?vHhÄÜéĒW¤ƒ˙Eĩ‘ĶŒéN¤Å.) ^(¤ÅĪ g?Ž*R~SĐũ\c­#T€zŠb9§/ ÅÄĀ–‹Îa"ß1ëWHã=jã ¤nCË*ŸĻãũĨĩv–Ú6.ņ†öaÁĪԜŖĨɃģw –rŠ ?ëæų˙wÔū'đ÷­ŒGƃ €‚ĒXGæ<—dįq)ē;ū'$ûb¯1Į=ëΝ;ģtãer5cž„ŠWRyö>ôҜŒŌļ#=¸ŦK*É`’3Kō%=]:7ûĀđCPģ\BJÜÂvãũl@˛Ÿ¨Ëņ­/ĩ6yŧ¨ÔÃĻIÅkN¤Ŗĸ"P‹W3–á\lļŽI\öۅüO@)ŗGuË]Á摕ˆ§ØsžŊŌ´|‹Œî{ĸĐ"…ž6+pĄ‹î‘œüÎĀdãļjŌUģŗ5ÖÄ0Ką$‘‘‡!ë׌ņGöMŸ/f'cœÂJ˙ŸķÅ5 ēĩ¸¸„u@~\7č~ĩ¤qz Ķh”nϞüŲĪlt¤ŠE–0Čr¤phÜš#šŽ„RŽ$R6;`$o΁ÆņÆ8¤N§=qšVéøb„ú}i€‡‹q=ÚLĸâ@\woųqŽ °ų†^ĸ– ÍôÁqƒž?*›Aäšåíô;Ø.č6´/š>đRáš@'h#ƸŅáíKė6‘F$†,;‰%‚( 3žĖrAÁ5ĄŠiēĨÔˇ’/ΓÄËFLxC׊ŗõ_JMĐão´pXJį›LšŠūæT‰žĖŗ„Iū­žŊ™_ķé‘FĻjv×ví4Í*np‘ķķˆö†_PI9Sߘ ƝÆOŌĄr203ũjA÷3ŒccûzĶАi„„÷ô§ĄĘƒŽ{PĮ\œRąāPŦ ü)ö¤1‚‚N$Õ4‡ĪtØeÎäC÷TvãĄ?Zšė†ƒËÆ<ÆT?B@ūDĶ<~5iŲõvsŒŠŦֈîÍžE ę­Ã}EXŠN¤gĨ$ßAģ=ʲŲF–…O ŠŅ‡ãŪŦ  áx¯Œ/֝ōĐäŪāĸ–ÃHää Q´-žē:RĮų8 ƒƒ˙×5ismŽ1 ĸđ Ę}úįôĢDg§_Z8īTĨb\S+ņPķJ˛0(UŠî~ŊĒYãŽT)"åOlæœ>¸ĄŽ8=Í.f5aĨc0ėe0Öč}ĒŦr-ļëw%ãååN ėr*Đäšlņ,ą˛>J÷ÁĪãíÍ8žä¸˙($Š `6ōÃOz~ņ"+ÆĘĘ{ŠČ5^;h–BwČ}sK-ļ|˜ũá´>äcüúĶ´^Áy-Ņ8?.qېã'ņ¨íĨķQÕÔ+Ŗm§ đ HpI'J›XĨ+ĀĮ4Ē3ĮëGāôĄr8 bã'ÎŽé@ų÷?Ÿû5SÎܑW´ŋõ“Ÿd˙ŲŠ ŌĻ=?ŠB ÕnâK]åáŋeC˙]í_Յ_“¨Ÿ?XĶ­:Ŧl÷rÄ Ú ˙˜ø pžžNøģâ]I-÷Ž$_ũŸûæŊ?5ķÖŠĢ˙bü’ų˜Ē-ėqHĮûŦŠüÉü+čPȤ†Į7 f$ˇ$vŠĪN•QԌ0j„BáÕ ßšĮ°˙_§öĮū€Õ°ęŠ8$ûVMžΛū˙ūĶzLŌ€vŠQ@éŠpRQE€X“€GĐĐŲ NqH3Į¯áN~ž”Đ™…n~iĪũ7“˙C4Kj˛7˜Œb—ūz'SėGCøū”ØJÎg—˙Cjŗ´WJIĮS’MŠ]ÚĪqmk-n$ĒŽčä8p{ū&´#•g‹Ėˆä{Õ`1ŌĸhČs$2´L~ö9 õ¸ë`ĶÖMīNÔ_QûM´ĸ+xâˆ˛uá˛vãüŨøãōmŦ:Ķܰ–EXVl0le—p9ą#đ¨| ÷înCp“–“‘Ã+ Rޏ'žŲ¨ĻļŠā‡tųĮF,š˙ëĶ`œy$ĖÁ^2QËr;ū#§•?„iĩņ\Ú´r=ÍĒ‚ĮũdC¤žãũ¯˙QėD 2HŖl‚?#éWMâũöŠqû­åäëÆOæ*…ĖQÍ1{cx…ŋÖyPā>?ßīé]4g(čŅEj™8Čé9,ūUCĻËgpŨÖiœųˇOĨ6HšĐ‰aķ&ļ=Svæ_u<įé˙ę;*ĒöjÆ|ē]2Ķ’ŽŸîЁsũjŊˇXÕŧø€n ū°Ũ¤üFĘ[Ą ūĩ­Ņ$ÍÃrrGAëJĒdfšH8ZQ‚N3ŒqõĻ ã{ĶņĮëQ #¨xŠîõÍ ÷€îzTĀüÃĶŪĢĄäņŠœuvGnj(ÆG֓Œāžô‡;ŗíB“‘C>”Đr8õ ?xöiÎ}(äą÷0Ë~›˛ØüŠę§#éQ¨ÎWˇ­;h .Ü8?…œžžŲĨ8,žŊ()ŽHäPw ũr)Į 8¤u—^~”Ŋ¸úŌŽ9*…Ļ“’hCāúPÃiį4â8v ąägęiã8ū´0ķŠLéšccœS•ˆ#ԚÃn}ø§mČëڀ$ßĩIũ) üƒŽ1Í;Ф!éŌ€+NrąŸIT~ĸĨfRŪ↉fŖ“|ôú{Ô™!¸ģųŠFävë‘ØūŠ+ĸvz–7~´ā:qL`AÂö÷§Ã'Ō¤ĄŦŀŌ/ąÄėĖÛ’RF\ņėj˛ũ\Ķ́Áˆ'}AUëJˆ’dĘôīÅ_3îO,HB^ˆūi`8õŋƕnüĻ vôpÄŠüOCVŽuæ‘GãÍ+÷Båkf"˛ˇĖ§ ô æ¯é_ë.ûŸÖ˛Z)avko/kōŅŗúŠÔҚFûI–!Q€ŲƒŪ“]Gäj€iņN=išE€•FËFĶ´Éf{;DŽIžIzŧŒX“’yÆNhķwÄ­+WÅWÚÍ֕uiiy h™Â8T§ƒÁ5ô/…5oíŋ iz— ķÛŠī†˙Į­i­ášá¸‰%… Š7ļǚN“cĄY =:°rë%‚’rvŽÃ$Ō°ÛšĄG"˜á6āŽ=)äņĪj…Áa•<ƒ)ˆö›)ØÖeĄlĶĢŸũõĢ6÷…ÁP:úVe˜ÍîŸéŧ˙补‚:AŪ”ԀŌŌQKEsåHčjAƟĨD¤†'ĨLxSŸj}Dˇ2ûĪ)˙ĮÚĻĮ~ÕZŲ‹)Ô§ī{PBœåM~ŊpqNVÜÛWą¤aŒķÍ0āæ—vĶëî;SČ÷§?đ˙… 9œv¨Č;ŋŲ§ĻvgˇjkíÔđ )āįˇ=0pŋ1? ֘ĀÜGcŪŽicãüÃÜuũ S'æ"Žéc™É?Ä?• %Ķĩ8u#(‰<˛8nāô4ûëŗin&0I7 0Lddã<‘ī¿ОŨ[Op-āhĸgÜϐƒ•$—9ČéPŨ%ÅŌ*ÜÛ´¨­ŊCÚ+`އīõëHwLÕ!Õ iĄV]ĨNũ¤Wøë 5MRĶJ…$ē*;Ŧjš<úgõį÷ú§Ä];RšƒEđńēzža€Ŧã|ÃÍâĒO¯|PB\ø+N•Aka‘ƒ˙=}¨¸ėzmü:…ŗK:€ÛJž2sb*KXąŌ ܛƒ6@<*ãœöę÷aīXúÖŽē%šžŗK ļώŠĘGU9#‚ž0jÕŌĩîÕš‰ešt˜í×įäd=‡zb5ínŌōÛÍ@ˆhŲXC+#pjŽĢŦZiFšgF˜1MŖŽŅ“øôõü̃›Å^>Ķî'ļąđJKh˛ŋ•(WS"î$1˛ ëzŖ{âŪkŋ‡‹)PTdŋõč~~´ĮĻ ˆŽŦ¤ž$|ĘõČ;Hü5VÍŗ{b=ü†õ5¨+ĄŠ’×ėō5ļ÷‡$ėbša“ĪRj; }dGsĮü¨:!ĮáOĻ)āSû RŅ@ō•-Û>ÔöûŊ 5NĶ˙×§ļ1ųZ:‹ĄĪZįcÖ?_÷XėjĩŽ|“Ÿīˇū„jĪs]ąŲRŨ=Ŋi• úS<Ō0ę9éL’0Ų8ė:ŠKT{;–bÂį€GņcÖ¤ƒtb)ėvõŠqOqŨ‘(’ íČŽæÁÚŪā˙áųṪTž&ˆ7ķŊI=˛9üĀ ã?­"ČŦ¤œ0ĮũzæĢ„§;ĩŖ7§ˆ”4č_ Ųí֑BdŽ3YĨ. ÷ŗí…Gō Ĩ8mŽÁŖSųņūĀđUlu,U6j€3ƒŪœlûVr^]!ųāYGŦgiüøÕØ&K˜ÃŖšįņŽz”§OâFđŠėÉ9íL}ØzšŸi5+_Ršcc2InŖ*gĩØí æŽŌOlũãø/åV-lŠĘ×;vé´F=?¯åR4ĸęD*ßōÍOđ/¯ûĮųT“L'˜Áą0:į#ĻjęU“÷E%¨ŦUP–Ā’q€WķMÉ"Ú(Üū˛Aō§“ôüé9Žv‰Uc‡ •āŗc $ts‘É8öôŦôŽúąë-´F|zM—ĪæÛÅ$ŦrŌmįØõŌĸ[9„31tsû™Š=Ôû˙>ĢK¤jY"ŽdhĻ@čŨTŒÕB´ĸîÆéĻ´)9 0Üņj)-.íÎ Û4]–V*Āzg#Øôĸ-6īcŽYœōĀ´v zŒ{uŽŋŦB×0örŦ ¤)É^ŖŌ¤9Č=ģŌ .ͤA°…ûŅ9BßR¤øÔsÛ5ƒ a2InÜJ›Ë”˙hgŸ¨ü}iG; Ōi\y4îŊģÔ),Saãutë•<˜Ž”d¸č) ნôĨĀnGQßԚ~REĶŽÔŠ:Œūf‘Gå@…a1͏õĨô4Œs´į” mãĨ0ŒŽÔō īֆûŧņHrv …ÆėR(!}h į“HŖķšvŌ^ÕújD'wŪâ˜Ã-ԞzzĶĸ‘dķáÁm 21Ā`9ęziÂę0û% ‡ŒH8?CĐÔ§9ÎiX #(ãrˇ„U]=Éŗ[ ܀}é@9Ī\ņUZˆÂŦSĄŒ”H„‘íœÔąNńSÆ›Ą*ßOz\ˇÕ1(^ĀŌíĀĮcK“×?ũz ëRPŨ¸&—”¸Á?ZyQ€=h1Ô|Ü FįņōãŽ(`3ĶR0@?JsŽF?Zz•$s“HëĪĩ0Đį“žøô§g×9ëŌ›1Ž´æ'Ŋ ŖrOJ‰”d˙8Š ~=iđNFFy æœŖßŠiūđūTáÉ<ņé@ )É"¯éy"|ôķ?öQTųŽ8īRÛÍ5ž˙-Ŗ`äIįõĄŒÛ#&‘Y_ÚcūxŸø ˙FÔ.‡%aäcîŸņ Bk—÷rŲ}’PĮ.ų×Ė*dR6•ãļ ĒÂˆĩņ$b]“B$qōībāŖąŪŨõü+A5 üĊĄrN<˜ŋīŖūšWJ8ŧLĮd“[…%HxĀÉŽáĪ`‘ĮSÍMhēđš1töīô,T íųŋ#ĀãĨX•Āę"˙žĪøS[Syō#98˙Zøšb5H÷īQ8% ÆHäU/í9öãėŅ˙ßĶ˙ÄŌ NnŸf8˙ž§˙‰ĸāOs"ũ’cŸ›Ën? ÍąûFĐúŗüpՉī%–)#û4cz•Ī›žØô÷ĻZ˙ČRĶčį˙ĄĐ”đ8ϊv3@Ã}sEsëĀáōŠXŒâŖQ‚ëRœœO¨ēå _ ę™Ģ89āÕ{%"Ö3ßc?ZëŽĮˇ8Í#ž=x§cŌ:ũ*‰#LîëNl•ų¤\~iXár "‚ŋʰŨēS“'9ϞļķրÉâ“vOCÅ(SM†/ĮsD!ŧ`˕ŸHéŧÁúåŠ4ŲcĮĩ‰õ{Âą­ITƒ]M)O’WF9ęj6 äc?Öŗ”NÅĻgšOųé#–aî3ĮŋĢVŗ4ĒŅ9ã 19ˆúŒgß5äUÂʔnĪJž!TzņōįŊ7 pqëéJ¸bsųÕRęGŽŨŲAUČÜÃ˛į’=đMaŠŦÔ¸h^[hâyBßģ#*'$`ä~U—’ ŗ´ÍxViŒÅQ ē؞€ã?—S[ņÂ"L u÷=˙ZzƒČ\ šN)ėfŖ'­ĖH4ũ>ĖĢEou+Œ2ųˆG yíšŋk`ĸY—+ŅbW;zcø×Ŋ\b1‚sÅ9rŅË4Em4)Cų†CRUGŌ¤\‚sQ°÷ÁŠIųsŒ`fĸėĢ.„cĻ.$nx%úކž–Q v–VS•21`Ž: rā•l튜’qŠåÜ#Ŋ„ÁÁ 0j­ĪJÖdũĨZeqUoWˇā*L¤äö9_ëD~ ž‘'ÉۂqŠF–8ĸ,î¨Ŗø˜ā~fĒĩØg o™ģļp ûļ?Ƥ†Ô™Ķ…’^Į„˙w5\–ÖB枈!Ŋ‚y Ŧ€9čm-ô'­ZĮj)bŽmË* =šŒ%Íš"ķcū䏆F˙ë~4š‹øŧ–äīžæŖņô¨íãlÍipŖģ)VzāūB˜ˇŅ†ČŠr§î‘|ßĻ?:=œģ´]ËcīrxĨÎFå ũj‚ŪĸČH†rÉ>Q}x8'đÍ]ÖHđũÆSíCƒ[I=Šļvadģu1´h]¤„íbĪ>Ŋ\ÔvĢ2ÚÄ'mŌíÎ1Íh2+†đĘÃzÖt‰.œę‹Ú“´;`O§ooÆˇĄRÎ͙Ճz“äg?Ĩ†yŖŋĐsÆ9úRr:×yÎ/@=hž(8äûS”uœĐ[#qNí9iŦ{cž´āp§#ë@ˇ}:RwgE&NÃō÷ëR§SœP1`-0´ņŒŽžĩ63Ml…Ī\Pā`į"ŖÎ[rGJ›9ęĻŖÉ-Č B–ēw§G|R–ÁÁĨ#ûŋJkŽ Ķf…fiÜŧåYzƒëR7Učivā}éŪĖVŌÅ{yŲŋw(ÄŠ÷ŗÜzŠąØzzÕ[ŗąRp2ŅOû§ī~™?…Z#9Á4Ú¸ĸú10wņŒĶŗČįš@9+N ’Ių¤=E(Q’=ķMã8ÉĻá‡jWëHÅ0[‚qõĨníŒĐ‰ÔõĪŊ+c‘šŽ,cЧšųˆĪlŌČsÆ}j6v냜v§);G>ôÖ$7šéÍx ūĢŽxíM9íJŖå'đ @JPzR=éÐ8 Ŋ N!‚xôí@ŧԜrM1rG×4ã÷Ø÷ H'¯Š–įŋZräã?ߚCžëH ŨJ{āЃ<ŸĄĻõozšÍâinAā#ņø „įoÖĻąįTˇ˙qĪūƒHhŪ—Ŋ Í;Ŋ ŅKEsĘŧŒŽ;ņR“ˇ§N)PįâžBŽ Å;j-‘ÎŲ6ëX‡rĩcžr*­Qmđ*ŪyŽØėqKv”÷OøĶ­5ŗƒLDgןûꕾčč3ë@Îū}=)[ ë@*pri~i{Ō0‰ëųĐŊ>´ÕäŒ÷ĨU~´ā§#ą ´¤ō(ë֔qÁ cHæĄˆcS^ÁĄ`FzāŒ~ŒÕ`’9éUĨ܎ˇĨŒyÜŖøõĻGĐúÖˆšSv5Ŗ%̚-"D†FeHûŗüjŗƒz@U)l,Ä_éžÔļj—›ŽÉķšō\ļFۙ߭Z<Ä{šņ ŦzzÍ\Wõ\`útü)QG$ŸÂ†Ļ:BH#9"ŗf€ä+ ZtC%¸=)ØČĨväŌ 7ŪáAęM¸ęséMl–įlSČqųŠˆŖÍ;@ŊNŖøÔ[!ƒsIs#Åîīd;ûž˙‡'đ§Ëv ŲnXģGmšË÷‹0UŪšú Ž[yîĶËē1$$‚ȁ˜ļ:žß…ZŽ%‚%Š5¨Į˙^œp W7.ÂQžú‘Œcj¨ãĩ8 ›Ō‚…^j\¯šIXjîr)äds֚‡įlwã42Ŧöą Œāũ)nÆÖ—ō:␀Ā<ŠĒ×W70ĒÆDmߎ1§É<0˛+¸ō'īcž?jœZ!I2Ps!#’WĪØæ}Įe´‡r’2¨ũķėzũMP—ÄVąŪų@Q*Dí22ģ”ũ9ĸĶÄ^Ūa„˜œĒŽG\‚IúmŽ7ŠÔNĪÔŲā€Ę2 āį­F˛ÄË HÃQūÆ û C"7x”ôTr̟`xũ*KxŪ0ë,­7 Ģ0n);n˜Õöh ūfœ6ËšíTüŗu1Fīqúu/YųGFĄ ֘ÉƜ`ú튪%†žĪûËx7Å~™5ĩÉĮÔgŸ„÷ü9?…KI )p=ęžÉ+âžxĄÉÚĻeŗŽÂž[Œš’ˆķĩļą4ŦU‡'ŽĮԚĖIô÷ĮZ2v‚GįLp@ĄØ*ņԘ„’2Ŗžôæ?• Į¯Ŋ#āųęīN@qëJųĪBxö @lœ{Ķ[!ēRĢnŽ{gņÛ8 cČ9ņ¸/›‘ģڜ9=(ƒ­8Zfzxú ČæšØéëNĮZkgéB^øĄ˛[=hpéŠV<ô <“č)A㚯?Ō‘ĪĄí@|̟âĢČĪŌ›ÎˌRĄįŠSAŸZžÃūBđ˙”÷%A+éN šč1ڂØĮ…4ŽÄôG5aģėPõküĒĐëœã5[O9ĶíøĮî—ųU’á]Ģc†[‹ŒH~éĨ/<Ō66œŒšbGŌ‡õÅ 7ÍO8ásúPcĀbŸŽGJ=iÃŸÂ€Įĩ <õȧg æ€TņĮ^ĸ ’â+S™ Í´‰8ĪAĪåK ŨŊÃ˛Å23(ÉUnGÔu§Ë+^Ú4v¸ŗcĘfoáoퟭsVĪŨņeũŌZ0x.‚#éœņ×§o—Ž*˙ˆ/ X‡2KpB´HJąCԂxã¯ŋ`fŸNŠÎÅ%EU’Î6`HŨ“ŽsģÜvæ´Ĩ(­E؊ËHˇ_Ęōâ ō Y‡Ģ×é鎕xŲ*`ÛË$-ę +õÚr?ĪZ´Ģ‰pzāRŽs‚{PæĶˇA¨+]•`˜ĘZ9ˆYŖ8pQŲ‡ąūyŠešXQI ŊŽ@ËéQËm ŌčK€ĘÛOáŠ|°Āå’5Œo9-Š¤ų^ š–ƒė§Í5´ņÜ ũšŽ2no~Ņ帎40⃏“¸āûc^˙ëSy$ãŠ9—D>WՕnƒDŅ·Ŋ# ũցųsÅYÆTw¤tGŖ“,Á˙& HgU ĶHŠG¤Å5g^ĸwRŅhIqcÖו>uā:üŽŋFÕZĖ‘LūdO•ŽSÁŅŊ8ū/¯C8gōĨ “wpŨ=Å>h–æ'ŠT Œ1ķÎ}ÅT'*oP”T–…Ī¸ČŠ‡^šXÚ^DJĮuĒ1*Įžė'ūN/›.ĸh 8 yFú8?\WlkF]Nw .…ĄŌŒžūž”īē ĪĪLSsĮ\Ö¤ÆyĻwqRŽÜTnrqßĩÆ4qÆh#+øĶ@9ہƒ™xĮzū]i\|ęQ֚eŽ$ĖŽ¨¤õ$P"ŊÉÛ%ļ"\Äū™ĢCĻ"Ē3,א…E2)ē~ŋZļ>īā8ĒdĄŖ$ãŌ•ŗŪŒŒw¨æš(tŌG'‘€üĒKĮœ~4ŋtŸ…<:1ŒuĻž8úP!"\ōG=*V*:œ ķQ ‡Lū´öČ=)€ä`I Hādn\œqB õ8Ī­+ģīcŠ@98ŒS ŲĮ~ĩ"įTE€lgŋJq8ÎyÅ=WjŸzŒōxÅ=yį×€āõëO'֘sģņ§įŽzw īũh8‚y§ `ŸJkŠF'ķæƒžhSķ !Člv C‡L~4ÜE8“ˇāĶsœķ’9 ‚ЇŸz Ččsôūĩ]oP1’ĘR‹‘ų÷ĒQob\’Üļy<įč)4ŠĖēøEQĩ qæ„å8ü?­S–Y/#ˇ&Nų „ぞųĮ8ükOJŽ8u8’1…X$ĮũõSI-wnOMŪ¸ö§ĶiՑ QE†ŽIÆqډTdŋãBä7=1DĮtũ})ö%ėsļ`Ë5ĮåVOPjŽ˙6˙õÍ•[5Üļ8žāzRāĶąŸĘôä w CLŒc4¤=NipŖœ})n۟ ‚sĪĨ8÷㎆‘zž1Å8Ģ}z`4V‘9eÅ?n>ôŅ’ŲĮlu  @Ā Qž=úŠEį姌õĮJh¨É!ŽJsÜw¨Č;€PI^zĶPá€#žÔüe03ĶŊ"Ą “ô ž5 ě"ķs)–B}œˇéš›#Ąõ¤!% ­Ę°Ú—ō&ĻqŧZ..Í3Cx0Į)ÁƒSŗ•Ĩ°ˇ‘†]ĸ]ÜwĮ?­[åRx¯›’ŗąėEŨ\ŒdˇLsC\ÃëndQ+)*š7ŌĸģŊ†Î–CĶ…\ŒąôîqX–Ky4ēœĸ7yY™@Ī9W-īËrzsjVZ7Œ´¤ē1JĶĮšaûYˇeƒ~qˇysūkN[„v§a ē¸a쇔Ž€/P9ĪŠô¨eŌ,î­§‚ųVaĩĨÂ# ¤˜Đ fų›ŽŊęäã‡rR”ĩd;îīĒ@a‰†IđQĘũIJĖ˙„KOÚCÉq î—œķ…ĐtÎæČ¤' íXķ6idRĩ˛ŽÆĖ[[†„˛îëÉ'úՑ‚9äŌHBeä`¨$ãÖĒ’e"ԁeå§p丒N9nj\ĩčK’Zu}ûœe PŖũöëúcūúĢTąoâÅ6ŪĨO˙^“û>Ü]-Áˇ‡Î Yd( )Æ8=zzSd™ÚÖßNļr"žį“ĮãBŪ› čĩ-Ŧ‹7īcVPÃčy§6’zÔPF! xØŠĒšô ˜`p=)IŨ•ĖņĻ?'=ûŌ–9 ‘Ž´ĶŒúŠHcÁĪŨ¤p}iFHÛĐR6|ņB„ã•īHAŪiÃ'‚´ŪüÄ`w=)­EĻėŽũPÛŗ1j’įå=ųõŠ`,ÖŅ;– Č ąÅVwūАC n‡tŒĢcĸëøzÕÔ^I'ĐÕËHō˛cŦ†ˇ8(2ŲëëíYē„ĻûͲ€åXžL¨ÁP;ˇ#éīĐĪĒÉ,V-ĩĖiŊDŽŊV2pHôĮ¯ŋĩ28ÖÖ8€:V”)ķžfMI¸Ģ"C1œãŒš ũĐÉĪ4­Æ1ڑ~į¨5褐rEFIÜrÔåš-ÛLĒĄ"ĸ’ęŪ& ,ņŽxųš?Lsų~T^ێĖ[‰ü“*4ŽíĩQHį×­(šoâĶîŊ€Ų˙Åcķ¨"i~ŌĶ‹Gfe+ąŲĩ{ąã‚NöĨI¨ęS.Ÿ)ĩW Ų0Œgs¤qØsžŊëžĨY/…h\cņ.į#Ė"Ų=ˇ9˙t_×ę*Ė:uŦMž;xË÷w˜ũIɨ,/ãŧPģĀ$Y~ĒzqÎ+F<GjäIKsxÁ-ŒŊKN´q ‚ŨO9xūF8?0ÁīK,rØ •]Ļļū ãįAũėŽŖëųÔ×$=ÔP/,eqØ*yúã‡ĩ[N˜ÁĀ˙Ī|š~ŌQJÛū‚åRlĸķÅ +0(ļGqĪōüéö–‹_h™š”n‘’ūöqŽœUc wžĮåŠäœîŊūƒ˙|ÖŲ'ŽŊVŌQ*vÜʒÎKV2Ú&čŗ—ƒ?ú§Ķ§Ļ;Ē]A%š”:…î-ōíö>†¯ ąÁõéšÂÕî<×ļĨ‡ )SÄ8­uŠ)jŒë{Û9"J™n™ãwОáVYKÚą5°¸ŒÅ2–ŒŽŒ8üŋ‘íTä´¸[IXļGîĨ?Æ?ēOvŊ˙:Ūž!MŲ™N›‰eP‚3Í9 ŋ/zŗĶîņŠBÃsF=+¤Ėr*¯ĸ,KŸ­NxíQ`î=†zúĐ!zāūtä\ãœĶJķJ2Wƒš7üĮ9§g5qƒŸZ—¯=…œS€Œ[’OoķƒO8āÕ[ņZŧsĘ"ø'pöĻ“{ ´ˇ —Wŗ‚ÔÜ ˜ŲD^jÃq\d3čÕ^ã^˛Š12•#ûÛI=;åÖĢeh‹1ĸÜIȍSž@p~î̉ĻËHŦ‰ČÄF#…äņœ˙´ĮĨRƒęG?mH!ņ\F¯ok,šŲ쏏å”~| UĢ]AšÎ &âšQōAˇįöÎqƒëž*_.ņĀ,–‰ŗæN öę:zĶ­íš'f–S4‡åÉP0=8÷§Ę–ˇ ˇļƒ;́ļFHPũå%ˆôÎxĪ~*Üj¨ĄQBĒđFŠšįčh_^™4œŽ5#ųTúxÆŦŸõī'ū„•]Îj}?ūC ˙^ōčQÖlŗœŌŽ´ƒž){Đ{ŅOĸ€0U‚ˇ;zQ.De…?h t¤œ„…ķŨM5š,įllĄ?ô͐Ģ&ŠÍ×n3ĩIû̏í€Ā­Ŧų.ĖīyčJ 6âI8>ŊiÁBŽWŒö¤ŒŒ°ĮzqeE&LI=ŋȨÕģĸWek§ōļĸ+<ÎÅ_§R{š[Hŧ‹hĸPŋ*€v˙îi–€žo$<Ëō×oŨSČį×Ŋ:YüĄ’…÷0U Œ’{úęßH#5ģ”ˆ–yŨæš8ÕŖļ€AÜāuĮĐኘ_$‘î‚)å•áqĶëŠmœO›Ėy\žĀx\öõ§}œĀūmŦQŠbLŠĐāķŸŽjŸ%ũäOŋk§ĄĒÁu¨iŌ[7™n˛Œ3C†lcĻ8üÆjŒjmģ ktģˇBHČĨįŒs܌wĮˇđß@ÛG,QÃm÷=čjÁ‚€ŦČ ÆRDáąõēĸ•ú2ŊęŨŲ ļ(˛qŊũ8$ú įëIöŗ)ŨoČŊ7’OĶŋéS-•¸|žųXr<Æ/ˇé礒FĪ­JqEZOwbĢ}´üŪT#ŧ§˙‰ĒÆ Ū>ęŨ&A€ŠģožŌ'õö­PŨ?•*¯QЎôÕ[t§~¤HDą‡C…‚1ÛŠbj’[Í!Ž?69%í ãœgļ1éM-upÁ$ĩŒrîÛKeäÎŽ[ę™JVVh{Žā3Œg>‡ˇŌ¨Íccm´yŗBXábŽfųTĪØ;Vx˜Ã4x+īŒāûqVííŖˇ"’Įī9;ri§Čˇ%Ū] /islĸH]įøĸ|nî“ÔûЇÎûoú=Ģą?ōÕņƒ÷Žöš=šŲtnôŊ HÖ"iX(ˇrĸiÖąÆmĄĀOęE,v–đžøĸD=>DųQpK˜m„ŒĒáļ6 €8÷aHm¤ˇ5ĢŗâŽi VüNqoʧWģ öZē–CˇŠ‚[T˜†fe‘~ė‰ÕM4ŨOķ,–r–Î0ĨH#Ôt=EK ¨Ę…s‰eS֟,ĄĒã-SŌ’,ŽŪCĩŽ $¤üŲ\|š ~aøô­”¸ySË´@Áx2ąōę}‡fBwcči¨V6 …¸§ÎšģZ“Č͞z6é m´—‘Ž]ÛŠ50_”Įĩ7p9ŠĘ>fü+)JīSDšt* 8ô^mĖÁvį¤įŽįŠ´ˇÖ×Ôģ†Ú3‚BŽØ$dvŦäĐmęæA%Ā2yާw† ­Ķ¨!Ú%Šūdƒåk.~Rįžā`sĮ­hŽ…œâ–ˆ¸;Ü`$ūxĸfÂÎáŽŅœ/R)v°qÆŊVԛQžyØF =Oāš4ŖĢvZ!‰Ô2rÍ9ĮzTjģ6ĒŽÔcĶڟ&,MF5°ą¸c€3H枯ҏČ`T\ĶccŧGZŖr˛5÷”f‘ņ2ö#†0yĒ„9žŽÄNV[ŌÚŲÛ“uū-Ŗ#͚YÍ Ĩ7)9éJŦ—6ø3B$Œu–T?ĐŌI4—Ōlˆ˛[ZNTČēŖ¨§đ\˛ŊÛ¸šĸ•’Hîėb%–KtŠšŪęU\uöë߃Úâ2ʀÄččŨNsUŒcNÚČI´-†@9‹=×F.ŊĒŒ×‰ ææĨˆŌbS„œIįiã=O=ëNNuîũæ|ü¯S]”°(z`ŽyüũąšËĶŨÚ5T‰åv`ÜqÂoUm>Ā\O(Ú ļ6’Bū<˛ú}i‘_Ú[Ŧq DŠļ7 Ûz=sé×Ŋm…ŖQ^V&ĩhw.`īëū ôĮ¯ŊgÁ¨‰)ŌáNŅ “Ā9ČûŖÜãúTËg,ėMëŦŠI+bûũī¯é]Ž?ԟÂ$ģīːFÁmĮĘōc–=Âû˙\Uĸ4TP(0ąNHÕU*ĀRž˜=ę\ŽRĩ€•ëĮzCNF!¸?…5—æÎH¤1ØãŠhPxįŋZB€ņ@ yšUëÁĪĶŠƒ“Ō˜QÎ?*ŗĨsĒ1ôƒ˙fĒĮ¨ĢZ@?ړgūx'ū„i1ŖsQÅ(éԊCŠ)h  (ōXäኊûū0(Nđ c$Áb1ßŌ¤ŌŽVK5„Ģ+ĤeûĘ ƒøS€äf™eoG^#Ÿ÷dpW*¤ãæ¸1ņN ŗĢړH°n`K…‰į‰$?ĀŌ`ŸÃ5™ĢëSØ_D‹kžÕWt˛:ä`)Ī'Ŋy w8ŅK8#…Ąōō¯Ë įŠ6sĮŌŽ[@ėīs>wBƒ÷ĶëO’ÎÚsū‘HzËԝ¤úqúPįotj<ŪķÎ⠘VxÕ ƙ•™‰Īo”uĢ‚ŧdLÚRËMÃ9ô§FN3ƒĪsQCqÂĘŅH’Žy#ĩMJ0=i5m͏€bL“×ĩJNĶÅWŒåÎ{U•$ŠāgĐԕЂãpÁāU7ģE—ˡS<ŨÂį ūņč?SKu#]Č-áf ûéĘ0@zįžŖųâφ4Š!1…AĀĩIE^FwrŅ k[‰9žå€=R°ĮŠüÅ bˆsÅĘ7¨”ˇčŲĢLŋ쿞õ`iĘaķ&eũß=[#ãœu?öĄT“Ø|‰t/}‡Ėe72É>đūųøæ­ŗT‹É|éo™ S’UČŪ3Ā\ŽáŗŪ¯ vĐqDīՄ-Ņ ąd+Ķ4Á&áÎM9%A89¤ī‘ÔŠÎå‘] "‘nŅKlRރŽĶÎG¸ÛüęČetŦXdЏojUÉāđ:}}ŋSXWš„ú^œš™ghĪÂ䜡,Xpč'ŠĨī+ö#á‘Ŋ’ÉōĶHAcĮqMˇwx° •Ęí?—8§`) œƒÍEŦjÆšr>´ÅË3Rį"˜ƒ“–ÍRؑnīSÚŗųŋŧx„ΑD 7–ÅrĮÔûxõĢ7ķ-Ĩ‘FYP•ķĶķÚŠ^[$ZLļō\G[6´ŽH'“ŸsĪąĮ­iv<ũzI]ōô4bŠ8ãUŒAŅ@ŠÁĘW&°4HV/[".˜ö€pr3ЌÂĩôģ¨ ļ‘eÕ-Ž$ŪL’‡ö÷Æ+6¯Ģ4M-U;¸'đĒ‹‹Ģōč3 c GV$tút˙SEũŠȗŪZŗ0 g“íÁÅMh­” Œ8w˙ŊßõÍR÷W2&^ķåœ0Å9Ę"ė¸QÎî€zį°¨n%ōUįaŋÃĪĖOAM6O9Y/ ‘ûDŧ"{ãšú˙õčŒUŽÆäöD*ķßŖĨē¤vį*eq’Ãũ•ôúŸÂ–ųD?dÉ9ŽtCŅF1Ī×§ãZ3ĀņP]D“FĘŲ*ÜΎåMO[-škĢeˆB*á3ƒĶ4ĮÎæR};Ô:|˛<>Tęá;]CčVd*Xy‡ØéQ$Ô´4‹RWĘUšÉâŗīôæŋEˆģÄnUAāŒwāu­<ģ—ĩBōf$“ÛßôũhŒš~T—ŧcKeę ĻņųŌų‹1á2{ņģŽÕĸŖhâĒŲ‚ę÷2q%Ãų„uz(üąVלŒđ;WŠI˖ė㒍ė†đ2H=ęE=…1ŠķOČÚjÄztĮČžj`ĶÎ1H`ƒŽ”„Øüię0 Fà Æ(ᝧŽ)ītÅ8ķœõ"˜ŋz€ü āŠlg+¨ØM –#(åŊģ՝í+úāŖ˙j¯!$đ{qVô˙+hc˙К“nŽ””´PP”RŅ@ãĨSÔ°4ëŦįũK˙č&ŦĮü’EWÔÁūËģÁ?ę$ā˙ējģöfD8Ø9įĨϧ( ô§ķ]Ëc„QŠkđ?*wSīMsôÎh‰Đũhp§­ ’)ŽyúP—ãđüõŽjëÃ÷77×3™`c3ĘĖØ)”ČĀecĮ~ĩŌĻ@ü;T7s h%˜Į#„RÅPrØė3ßü &¯Ģmš^Ŗw;\âRņ4f%rT.ô`°'éĮIš]bŪčGkŽĶœ¸ōsŽOË=ÁŠâÖâ–V‘‚ŦBg“ĖUlāõė~Œ*åÚ_YCw"9”0`č}ęl™MžĨΗͰĮJ;ĐėiX^ÕhAČö¨”ŠbįR ŒPÜ)CŸJFŸĨ<Œ!ãĩ"Ž(“å#ņĨĻIÉŲƒÎ;âL}('ƒÚ¤Ķ›Ë–â3Á $î?ššŒōO˚IKŖĮsŗÁī2žŖúũTW6*›ŠNČßS’iŗC…eĀĪĄÅ:@Bįo]omļŖ›˜cV†éČ=8Í=Ž {f˜N}æFÜü+Āå}Qës'ŗ$U˛3ôŠļŒœ ¸<jĩÄwP‰abQē1:ˇŒ­°Ōē3FAs#Cwsmā´P>Ŋ?*­ĢųŲõKĸĶ!Íļķ…q“‚:ã§>™­Ū ôéPŨZE{jĐ\D$F槌ú`ÖđŽíimō0•ĩ ʡ:••ŌÃqp‰#!“cOLÕ}OP”Cz"‰,d—iVŒ~f9ū•nÂfXÎHæbe ŽŸxœw­Ë ŖhŒ ņôĒįŖ ŋ›J˛w“ˇ’ ‚ęŨæōŌx™ņ¸(l’ŊŽ*É­Sk8¤ˇÂ+—WŒ`ĢgĶßŊ(ˇša¸Ū¸$ôDPŋ†Aūu‹Œ^ĖÖōę‹3J°!‘Ûdj2Íéū­e[[‰îžŲrŦV@čXwjšö÷ &/4Ŗōā•úƒđ§'ßČ^ôԔUâ+9=H§´†iF‹įÆ7ŽUŋ1EŖËžEÁÜÛK$„ũõuĸ­&X°#ĶđĻMoņÁ•îV_ŧ§ÔJoáJwˆÄ*ŗėŸr1š’{”ļ¤w Šš'ßü“TÕ/ãc††qŽ f3üôĒžy’å&ž†Xb‰˛ĒqĩHū"Ãôė;õ­!I7}ɕK-KĐ!‚ÎŨX ûr˙ī[õ&Ŧ"° į Yëtč$k7ōØe$ ô,¤qRyˇĘ6¨W<*Kķ}y~TĨMˇĢ_xÔŌVŗûŠúŽą5´1ČŌ—ō÷íĘĢ`1ŋŨįįĻsUtë1Ô7ŗÂĶę3} ōŠNrrxÆBįŲjÛÁ;^•˛Oĩ4a†\ÆÎ äüĮˇByĢÖvŠYP7Ÿŋ&rŌSJĘ:°ģ˜ļ0=ŧe§diämōéŸAė:~s$Ú9Éŋ3/Ĩe)š;šÅrĢH0ęÄ÷éJĖtīC• rAĻĻļíÁíKmÆ‚¯ØéXēÄ$ÚęMŅ ¸ ÃnÖ0 đ‡üke€ÜA95^ņJn¸*Ļ%ŒĮ:ˇxĪ$ŽÜs׹5Ŧ;Ώi24úUŧŒĪŋ`ÜTûãŠŧă&ŗtM4kvƒ0ŗ3}ä‹aÆ:1ÉÉ­0ØlcšÍčhĩۙiŋ"Šf<“ÛŠsqœĶa&3Ÿ˜cđúšÅ BT–ËˌŠUhؕ9CŠ? 5+ÃÃʙC€Āí$ōĀä~ĸšŪÕ4ëÖˇ†(X•Iüļ-ŋ ËFyųŊĢ­Ŧ́ĪJŅé /ëc8üeėm8Bڏ܌Gķž:ãûš•ô[‘wÛ)(› ~čĪÚoέōN;ԘÚA'‹ģąwHÃkAû†ØÁ"I؂ā¨*‘žūÄqŸÆņŊxWeėFŪh%Ŗ?Ž8ü@úŌiĄD€2Ō>ãŽX† *ŧüzt9­*=y:~¤F=LOˇZŨx4ÂÄŧQųØÆßϧ_ÄVÃ>ߕĨsvÚ\ąøæâû÷~H…@ō ô&ēY ōôĮļ&0J*/ĸûĖč9˛u‹1;›4ÂBɡnriSŪj éü˜×ɧ‘ąúŸđOá\ņW–ĻŌvˆēfdŠiœōLá‰íĩŠŒ{` ˛Qƒ¤TvpˆmV5rO,ˉ‰É?™5+ČĄÅ9ŋzáhdmĀĒ—ļ†îŌh]…Æ'#ņôsŽqž•sq( úUpˆŨŽyŠĶē*KKĻõ!`—hmYx˂géųāÕÕÛÔ‚2 NÅU[ļO§Ō¨yRØ91Å#Ú7!QIh Ē“Īķé]ÔąŌZͤ֍qÎî=‡­J9#?ÖĒ&ŖjōėķcY?š! ߈5tp:}+­4ö22xúĶå=jNĀ9¨ĨĮ*‰žņÅ=2G…yĐ![„ĻGŒāõôŠ[‘‚z  |Ø 8ųxüŠcčN)vwÎqŪ”*ƒ‘@š9ãŌŽhĮ7÷@uōĸūrU\ å€Ģz8_ˇŨ0˙žQ˙9(6čÅRbŠ(  8ÎĄÅWÕŋävyû˙˛já”֯>nžô ņÆ)ŽN8 21ˇ4×ô9?îŌĮ’N*Vų¸úSp2;tô¨dŽ9Ášƒōđr#§ĄķŠÔŽ;b›´gīsH Kĸéņƒ˛P ļŦT‘€23΁ÍYļ´KhV”,k’$ōNO_|ÔíÂc4ŠO>˜ĸÁqĀt§ŸåIלŌđˇjNpG§zŧÁúԄ|¸ Ģof˜7Ũ4Ô ˇ#) x$öĩ䇀{ąė)ČIÆiŽ˜9ëN‹;3ƒĪ­1đ=*aČ}~žôĶ[Ž=ŠP0NqFči‘éųi…U@I>S´g }ŗ Šg´1Ėō@’l˜bd‰€bÜa†x⠊Â@—wƒ#9IõĘã˙e­Ys°tÅx†ãUö=jIJš9!ĸGowk‹ëH€˜7 aB”éōŽsũÕô­=Ž,Žŋ}¨=Ø Ē[˛”vcƒ“ģœ 1Īŋá[HŖ%˙ZĻ=CĪ­dįĐĶ’]ʁ5&ļ?ÁäŗcÛ;‡ōŖĖŊŒáāŽp:ųOƒų7­\ œ14āgŪŖŸČŽKuenã’$†ŽSȎPA?NĮđĢ€vnūõ^â¸]˛ĸ˛įĄíôĻ=›Æ¤Áw2ãĸšŪŋC¸ĐÕ{˛ō&ō[ęOP¤ԚœYßkģŽ ÆÆCŧQԃôį5f ˜ŽāķPØ`:¯ą2„ˇEFi“’9įuADÄcŠpÁõÅ52Ō ĩ%Eð>´ō0~QøÔj@,@éRJdqIî2Ē1ķ°HĮëO'• I=éĢų'4öoŸpQŸéT!dČĀ īQüģđOŠfu‰?…4¯ÉŧcƒŪ€$€qŠdD9Ĩ.dĐS##vs’;f•¯°îXRœwĒ÷wXĒÉ<Ē;ąÁ8üT2ę–ąÉŗí‡ä~ĢjPÅ­Z-šĩžDYRMÄÆUˇ 3ÛŋjœēčKœ}H/ĩā’É™n×wƒ!Xmā€sükíמ*čÔ YŋŒ°2ƅĘ}vƒŠŠ !"PŒ@BIhâ' ÚcķˇÔŸ¨ĢĐ‘Š*ôP0*š‚ßRS“Û@WŠ`WRzúTė ŠŦ9 é˙×Īč*•ÅĒI?›gĮŪ^ūđčΞPUÚņÛĖ;ír‡ō ÖĨÅ=bÁÉ­$„ĩ& ZLIx”ymũôdûŽôĢŦsƌ ɒö1leŽ[srėëōíĮMÃ#“´˙ĀkJã¸LÅ*:úĢgU)ŊÚ&ž—´oÉŠ>\e@üÂĸĀ.FsŠ|=HŖĨÍpé÷VPęí )Ë:‘9}ƒžqŒŽ ŪBĨž^Fx>Õ!@Ō•~›qū:ŠĻl[eA÷ŖgOÁXúW{Ā‹Ze‡œqYĶę9K¸c†ežáFŌN1‚z‘Ôt´C8bqšæ#ķFš¨ČĄ<Ĩ‘Ī”œnęy_aõí4ÖŖžŠĮGkÁB€íA€OSî~ĩ#n<RnćŒŌJ0Љ?zåEhŒë\%õäX1I?5ĮūÉW\’1ŒVuÍÄ}ėWSČąĀãĘwcĀ?Âô!˙­)ä œdf´¨›JOfgŽâ2!°āœžŲ˙=*†Ÿå™$vRnƒ˛ČX’Wž; cĨh&ĐųÎî* Ģxî$I™”QĮ4Ž 6įčŲČÅ Ō•“ˇõŠ3úâĸlī#ŪĨ$,LĖp$ũ;ĐÚŨ'°–vĄu•įˏųŊhą;2GŌŗt„‘|ŲŲJyíšA…įßū5Ŗ*Œü͌žs_;‹—5Y3Øĸši¤,nNJÚA¨bûØQŒšŸoÍÉŦ†ā rjƜ~tpƒš…Žā[ÕļiQf`ĖķŽŋÉX˙Āib„$üÍíNĮĘ@*2U\Ų)<œ` b ųŒ^‡5Rö4[´Ē‚đėĘpÅų‡¸ ž=ĒÛđĒIĀ'šQ´ĄųA`į¸ĒŒœDÕАŸ1IĪĘyĨPšį4*āg#hė)ˆØš“wwؚ?ŧāprjL˜cÔSvōGL‘R sŌ¤eXÆį<ō 9K—Á4ū\ú“OØ<ÍÅųôĒbŖR-éM.|Ŋ aE,áÃc$÷ôĻ>öĀ_\öĸÁ{!Ņå“ Üf¨ÄŖPš‘N~Ë+Œņ+wÎ?„túŠY/2–îc€6aÕŊ—úŸæz[ļbؑĻŽ0+[(¯3;šŋ!ȋB ā(U€Ē8<æĸuũčbpJĖ88Ī“mîh’čFreP;Ō )ųŠī¸˛18Ļ(ÜŲÆN8¤ļ¤í˜cŊ$ü9ęzSœ1eÅã`īKvîڙQUÚĘ Û͑îžbå_ūúŠąĪ‘ÂŅĘaŽ3T¤âôv’{” wž'k˜ĮX¤#wāÄ?΄ԡiDg|21û’ŽÂ~™āūÕõ Č5 ƒ1ŽUVSÕJäb;֜éüF|Ž;1Ō(O>ŧÕ8HƒQ(Ŗå¸ų“œuˆįūiíb°Č~Í4˛0ËųŸ†*ĨÁŧ <) Y•Ėąʀr~\gĄ#ŒõĢ‚WŅ“&ívW Ãvā=QųztŦK{ģdēŠåâinå@Ļ$؇',ØÜyÆâxė+Z+ĢyÛ •¨Ium´RĘ ę·VčĒäįäČ=ÉÎ{WUks Ô^lNJį ¤áú†îÍn˜˛ˇ—(]Ą°čĘxeöŦXô™ėĩ8ZŪDĩy2 —/Œtˇ¨^ŨŽ3\•Ņ ¸ģ3ŖĀY7ELC0tĒģⷋ÷˛ ¨ŋ3Č1øš´z‚ŋtōs‘X¸ŊŲ­ÅĀÆj9NåȧŽã֙+|ØņĻ€r‚Éũ+!ėŽ-îlÖ!cģ˒M›ŋ@r3Īą­„RIíQ`ÎÜķW ŽŨ&IKs:Yn­‚›ČDxķc%ļö˛:ĩëV#8é“ĪRsšvą.Í*qÕ¤_)ûĖÃh™€5œ¨Š‘\ŨŠŧælûá˛+ŋRSNį5H¨ė_|“€:÷ô§F¸Ü9íŠĢbd u×0IBĢ:Ž@ا(Í\“Œ’}t‘>7s×õĢē?üŨõ˙W_ĢÖ`ž†]I­DeļĢ'I]šŋFŠŖŽ/o9ĪË?÷ÕFÍQ@Š(  T8cÆ8éU5§GŧÜ3˜X~†ŽĄôæŠë|iYī*–č‰lĖåĮnÔ60}piSŽåJpāôŽäpĮŽ>läRŋ8Į4+ŅO։úԈüŋZ›#F:ŌĮߟ†rŖĻ(U §ũņŸåSĐäķQ ų†yäĶī÷OķÎ)¨y+Å>@qšlc98é@Ŋ}h# cԐ ^=ø¤ÅBŧ¸ã59/^jÜåõ  d\§C×Ŋ65#9§3`dƒB9epŲīŽ”ų°gšHâ#ĢæĢŪę6ļqLd‘KC†d$g§ø?•x/WŠë-‹QāŽWĻzŅ<ąÁM!;S’pN?Ī=+Ÿ„–[h-'šPH‹j™BŽqŒ¯'ÜõĢz|™¸KĢ˄XÆYĸEã•Æ1í€G=ÍW+2čTÔŪYJū„° ,Wę@¸^}˙ •7Õ"Ü;;loŒ`ī[¨Œ=ún>ŋJˇ˙j˛"ų ‚:H#ô§„QNsÍW0Üۗ{dE!ËD[nĶę¤˙/ōi55gdCN:ĸĀ8ŒįֈŽæ87Šhîíܟ•f]šú†ŦĀŽXœc­K‹[—'ą${ŠœœsOÆcé“QÆ>b[ûĮŠ”` P‹+m$jÆI床 mŨļ¨Éį ŧUív˜ãžfnBˆXnüOëTŖ'ą2’Žä÷—VöęžaÁ íP -ô“U$7¨ČĘ-acÉ` Œ=ė~ŋJĩ ’4×3Č9*öQíÜûæĨe*pH#=ĒÛP؋9jö$Eļ Š¯€QnĖÛû Q…QĀ#'­%¸mĮ˛šÍžĻ–° §'9§JÄ`´„*N)n q׎ŋĨ+>ƒÛq×Jr ǐ]Á4ČĢ!ß´„8õ掜•ŸANQkq)'°˜mŪØ¨ä>Y}ęb Á' Æ^3Í$1w2Ą$p}(B§æ¤|ŧûb– ģOŠˆü’ ķېķ&Ÿ!V_”`Ō+6vœS˛ŦĪSŠC— sÅJF\ņÎ)"'ĖÁ8ŖĖDSZA9hbī 5“âūÄĶ^÷N„yŽV#F#}y8Œœ×#wåW;?Z'‚ ģi-į‰%‰Æ_FÆŠTiÚú('­ĩ8ŸkãŖn÷6Qĸ*~ėĩ¸B6‘’Čã׿ã5מ›§ųd;nO#ËwëÅTĐė-ėō(būq.͖fā2ōyū*Õ} Û4§ņY:ĸbXT Ē ãĨqōícÆ? Ž.%\c¯ãSē¯RبģŊŅmvŪe­ęÚFâHZ7r¤`Įķųį–Å]ÜÛđíWyRĶPiäV0´JĢ \…;‰9ĮnG^*ˊY†3ĮĨkQ^ÎÆPvš2ã=i•ģŒžž‡åų‡"Ģ°ČlsŒVFƒO)ĸ4ō9đ„Į†l÷Ļ„ (ÜÉÃđ1Nš戤Ēä1HĖ]ļÔ¸Ę|Įĩ;´ôbjú3ž×, Đųßg ­:y퀀äā éŠß(j¨U0*•ŨŋÛ,åļR›œ|Ĩ†yŒûqN´šēkŗkx#2yBQ$`…oQÉ'ƒˇ¸ë[ššŌ]ÕĖRTę_šxŽqę*99?/"œ 0ļ×.sßĶÖ°FÁܸŨŸZF™#˜Ēĸį,Ũ‡zÉE7ōKs,ŗ,{ŠDąJéĩTā“´Œ’AëØĶ ĢĖęŗ^K,†ō\ģĐp zčŽM&g*ŠhL¯%üËtá–ĪŲĐõįøūžžƒžõ"Œ q€;T͑ķ“H’AÍzā ŦsJ\Îå–[[‹”ŌČŌČ"˜ÁĘĒāžÜË×ŗáĶÚUŨwsq$‡ī*JQAôpHú“Vä⌠’#Æ=鋩™p‘Y_ÚȨą[ہ•FfB3õ*zÖæŽqwx=ŖīžÆŠLŠå•ÔaĩÜ=1éSø~ŨmŽ/ŖFb™MĒĝŧiŒŪĸtĨĻ0ĸŠ(!†'õĒēĘŌîI;˛˜Įâ*Ô[Oņf¨ë:nÄí˙Ѕ5ē"[2š)^ũčnũzQ;FNidéøWr8H#Î{ū5+Œ/P)‘‚_ÛéúúRčūn3Ÿzd‡æéĀëÍŸœæ’OŧqĪĀ• #‘ƒÚš#*ÄäcŊ zÖ>!–'†ßPâb—xđ@mãĻOˇwÖļVâ āYHÊ2ûyǎ6^]äQÛ´Q#ĢI°ÄU—o*0OÖŧ6ãRZčüĪOXFûš0Čnåe;A!ēįŪą/ôŊ:]NInōĖüēÄÎr1ĩrĐ?Ūjžļ×Ęnn Œv†3Īģd‘ųŠļ°­´8JŒîfcŸÄž˙G*™~ôŧŒû=>&m֍ĸ¯Ë‹ÍžNŪüc­]ūͲnû_ŨŠ[}BÖäėKˆägĄę=ŊjÖr Â”§.ƒŒR¯ØŧŠKÚĘ-ķ÷”(*Į×ŋ•*%âJ O.y§˙BĢErŧŌ1čGjNŖz1ĒilEțZ{ ÷æ˜ˇ'ÖĨ;|ŧõ#§rČ *Ē įÖŸĪ—¸€žÂ™‚ĐGĩFOoķõŦ……ožŅ-ÁvU‘‘cŪÁ)ÚrŊ õ­)ĶsvL‰ÉD×!6Ą”đTķÅTMƒÍPx} NS€<šÎ–×Lˇˇy%ļˇ@‚uė˙ §ĻĖgYĨŨÃn„ā+pę:[$c‘ÁíŌē–ié#T‹ZŖfÖ;é%¸?n8ßb–ˆĮš89é×­\#QEųMŦ÷(Gā3LŌĸh´ČÖV/1ËČĮ,Ä“ĶŽĻ¯ ˘W=Yĩ+4´.N7Mũæ=čžq SMŽic˛WžIôÍhûҜ“ž}*­Úq—6É#%”Ü2A^úÔQÚÜŖŽîS'R$ÚČŪØÆGáMĩ8Œ›hŊ0bĀ‘ã@˜gJââö5ķ%ĩŒ"Œ°YI`;‘‘ÛëŌŦų¨ņųˆpC/B;VR‹HĨ$Éwf,¨Ú)ą)!‰xÍ/ÍåãĸÜŋ?Z—Ąaž$Ë|Ŗ$“Ōŗ,õë-bîkk6iÜ͡å<ö5zHcœŧ.ã`Ob CoĻÚiŠäÚ[ĮüãÉ­ĄėŊœœīÍĐĘj§:åjřmĄšUYœA•> úÕ{˜ŌÖ{‹Y&ķ#V}!>9įvzāô#Ĩ\,č1Ú¤įĻŅ´õĪëøTFŖOČŠBú‚áÔ9R2ĩVšēˇˇK"Š=<ūŠü)e<+˛ÚõŖLĒņ† ôéúÕEĶn!`Âđ&A,Ú%ŽG ĢQĻŨÛ!ĘihφxG—$n¤ T€ €k;'ĶoRâb—Ũ7–Ōė ã#Ķ8Žqí[+ŽH\ÔՄcnWt:rrŋ6äev“ƒÁã4Ô%d6y§rA cĶB†•IëœÔ­‹$rC€zR¤lŦpĐ͇,Äg§ZbœœT1Žs>OĨ;ī )Q67tÎjtbSŽ:P)ė¤ Ģ| ”`ŠYĄū‡ü•ûr3*I°ČĮåķ Ÿ@A ŸÆŦÆå˜Š¨¯aûEŦ¯yFūëAüņųV‘šzHÍĻĩA㌀ =ŠōƒØU[)ÅĀ!UVTûņķ!ôĢR€§æ,N*dš|ĨÆWZОÄņ˛‚`ûJ§ũ“c’G#‘÷KJä¯Đ’qøUčŲGN‡ĩFęDƒQõ§ĩŗ°œSŨ-ŧ–ę~Årø\Ÿ*lēŸlŸ›'ˇ?…eIŽ]èyŌDÉd€+$cq HåøČ=€ã8ęNč×húšŠuiįĖŗFÍČ@WQÔzЍÍKIũäJ~é=ŊÔ1…ÉQÁ8ÆĄ´ą˛ îĒqŲŨÚÚĒÂöė¨8…cØö9<ūŸJžÚd¸ˆŧnIS†F(})8ét–ÄÎNōëR0U\Ķ6ÉŨƒOō÷(šĪbČÁ;Á+šK›Dē ÍšYU•Ę‘ô#š‘+`SÆãG´&ĶēЙ$÷2ŧ­RÎāēĖ—v€/ČĘ<Ügœ‡Œ.õbßQ†õ™t3#19]ã§8ņƒWT<ÖmΓ§Ī|n˛€ŌŠ*ؤ] ¤'ņū.3‹ŧ5"ĶžK/$Œ4 Ņ•=°N?LV.ĄĢOkĒ2˛Čšxã3GæYUwä˙( dc õ –ˇ;-М Žãv$.ŠmüķO‚ü1gŪ’ŗm9ļôÉô)%(]JV•™ĪÃŦjbæØMqûš¤‘6/îžtڄí;ˆRŲžjœ>!×?ŗbw;gvQûÄPY|‡lįÁqŽ98ŽōBz{r 12[œŠļ+âK䎚Eƒb›'x]ĸĮúB b¤g ãSæ¤˙„’{yĻtTšŪ M€mƒjngfįĻņ]<€ņķwéO„ ¤ZĀĶĩ;Û­]­gAä‘<‘N‰ōȊáTŲ†NG~zę´|›Ō:oP?ī‘T_;Č?ίhŖ_gūz¯ū€´ ôQE1…Q@đí-ך§Ž2gJ]ÉÛũĩĢĐ(#=ÅgëÜiōvå9˙­Ũ-™I<æ–Aûļ Ō O¯jRõ5ÜpCÉãŌ¤“¸ëž”ŸŊÍ9‚°=逨ų Š"Nî=:T‘…ãšab…ē‘×ڐ#< bŖëR}āiŠČ”ĀGRˎôŠElŌO‚–2ImÁˆ÷Z@;íAį§Ĩ8õ⃜ķ@ ۑÍ4FĒA Í=˛~îi‹“& núP7(Į"m99=ŋJŽęî;T ,Š8įŸa€N~™ĒÉ{<āŦĶ Â<‰ĩz“ÆqéëúK’Š*1rØlí=ė˛GōĄŒ”yQrîqČ^ïSīĮzЂ%†Ú8Ш€=Ē­ãˇ…bF'o,ÍÔääŸÄ’jŌā}ŅÅrJNlė„QR[ ōFxä<ŽR…‡§ÖĢßUIm‚4‹nâFÛ's Ų'øZ´D¨_=qŸJ¯nw5ÅÆqžMĢėúæ§ŲÅŨ´7&Ŧ‘nĪPYREœyRDģ¤ũÕūđõĒM3j’¨*VÁFâ˛!s{ƒÎßįC[ÁrËæĻ☠î#đāō=eĮ@ŽXáTesgUĩ`–8'D!H+ąŠ•÷ 9Ēīf<ĸ×3ÜÜ*)Ú ˜ĮĐ.23VŖ Ī9§&Jčqö3MĨk™„}ŌZîÜ O,ėËÔpT1ëīW ē™˙–ļ€áōXdũwôüãSē,‘˛ēĢ)ā†zU2^Á†O™nN9åŖöĮqūy Q§=FsRÄ•˛qzëk ę%`Ÿf<ķŌŽÃq Äe­äY‘ē3ŸÖ¨ŗ!8ۑ֚Öīæ Á1$.āÃÜwũ rTÂ+6nãī.ådDf]Ųc…EĪŪcũ§åŒúĨ­ŽŸĘ.fĻ7\–îrxä{i­™c#ÜĖ×Tá…Ø3ōī“×=EeØi fëŗĢÍ {$¸pO9Čāž[ĪJڅægVĨŲ—gĻ]^Jō_Ã39Áxã”*AaĀ\Š^=1Ū金āH,Q‹e?<mĘAôÎ3ĶūUz+f€1iŲŲÛsļ1ÛôGČ!ū•Ķ.TŊŨ ­ÕęE&ļ‹"}ˆĮ4 ų“?$"1Ü ŸÃŪĩāž+„ķ"–7ŒŒF ?1TEOŒķĀīUĨa?ÚŅĪ”ĖÂ*Œcæúįoáž+ĪŠ…Ōčę]lkÆBžq֓ öōœc­5Am`}öõŠJČWī˙Ž3q˛€$8ÅeZ\A š2Km$ōaYąČvZĖ­×Ėö÷Ŧčí=R\GQīÉAÔ`0ú`Ž+jviķÔž’EŪYz}sD,œ.{Ui,^^Ōqoœ›r„ũ3Į^ØĒ­ŦŊĩ–æˇ’y÷ē‚2FUļä“ÂŒœœž1žĩ—WލŽ}lÍgÜr§Ôæ’`ģCįŅsMļ•îm"˜eˆ‘žAįķŠ}ģK)¨,El˛sļĨ °â .ČŦėUUį¯šū_S†âđËHcFŒ¯LöÍkN„ę&ã˛2ŠZ4ÚŋSL❭1˛ØūëB™ō‘J<ī0đ¸Ŧv4+][ĩÄhé)Šh›(ØČįƒÁ¨×O…WšâBS;~€ãôíWžpr ̍ šÎTŠ2ņŌŠS÷ąīŒãߤ&ßģr#Ģą@kŲi°Kt^O2O!Ac#d×ûÛsųÕqâ[$iY|ÄwG@ƒå*á ĪNKō XÔcTŠ(L–[xÉl6c qˇ67pĮöũx̚uŅž°VpJ;)Čb2=Ž3S*~ī2ØĨ=l÷'īAŊ,Ų}i"PN =ÎSoŊd÷ąĄ›.įÔl1!wÉõ]§#ņ;/jģ7$įŽžĩZâ¸ĩtQ™Tˆį•p üĒ…įˆa†ō­Ė‹4K/›Bˆ§ø˜–@>ÜöÍk$ÜQš÷fmE’ 0Ŗšž3RBŲČ ŠĢq}œę˛ČCļJĸ!f#č9ŦŦīĄĨė]\ƒ‘Pƒ—aČ9ëPÅŠĀō"4s@dû†eĀcč cŠœ–Œ€yįĨ6ši’ãöŦĢ”† Ûk­Œ¤>É%\ũÂP:Œí˙õfĩA-ž;UMM2á"Vfd!F'3ųÕĶv•ģ“$Ŧ[ųƒsũ*m¤ îĮVÅåŧwĄDĒ$\œāšĩ´Š’åvwI‘åˇ. JŲę CĀÕ $ŒTÂđ@9ĻČ7t=?93ša8|~4ĐYzÖם.Ļmįš–8ˍbŒ(ÚøÃ˜Šį ņšŪ‡^‡ŊPŋ°’āÂĐĖ€ÆåļČ22TúéÃTPĨcąŧt/Ũ<ãŠl+Ëe„\4l°\ÂŅĘrˆų\CęEO öô¯Jé­tú1&誜NAÍ o›ëNŽ1‚GzaÎü€HîjîË^äc÷Āã‹T‹œŽ9ũ*öŠI7Ä˙ĪĀé˙\ԁŖVŠ(Ļ0ĸŠ(&ÁļqÖŗĩđ~Á į—Ą˙lVĸ.ÁÁŦÍ}৏Ī>d@s˙MœwDKfTA…ãJÜįœR'Ü”üŖÛŌģŽ‘"nίJ$Žƒž¤ãĸPÃęqNpr6ĸˇÖ€mSdqsĶåĪ› qښę7Ō€$P`;Ô@|ũFRjUÁ_–Ŗ(ûŗÉ=Ŋ(ōPŸ˜ķéšT8ę§$ŌH¸Nq×Ŋį9ãn{RAZ\ŽôŲ%HÉ#* å™ŽTŪĩČ"Æ'”ˇVM¨žųū/ Īŋ˛rQZ•šlO=Ũĩē˙¤O [‡d3ųšĻnęAŸ*>9iņš郆>ĀûžÕnDļŋŽb>y[˜ú˙ž”åÜĖ>féų×;ĢĨ–‡DhõdqŲGn|ŅžIۃ,„úz(úqSGÄ8=I§–ؤžœP\’ŋLV&É4EXIīRŽ008ĻKã°Æ>îjD_ÍA÷_qgž?Ī­EnŪT_epÂE Tíá†{vüņV ‡ ¸Ī>´Ëč °ļT;‘Īn™BT_FL“Üz¯Ė>ö3ĪËO‚-ž+îîãʡēslEō\ōppŖžƒņ­„Ëmģ•ƒŲ\a˛3‘IĢ;õ$‹ tôõ§€´Čs°g¯j‘N3¸āw搨ŨČ×>uœ1—vMŽÄáPßÔķŌĻ}BÍÄņČāņŗĀPYMä K˜Œ#ąËCIĮëHÆĘí)]Ų2|1'ČÅ\Įo…}śîĒÆ\‘ßĻKykúۈ˙uˆĪųü)ļō ›Ī>4qFT3‚ Aã?îŌQ{Č9–Ņc@{Ų]÷Ώ BŪ¤ôn˜ôĢpFąÄ›F=sŸ_ƕČ‚ ã"œ¯‘IĘû1ļŦkđ¤œūØĮŪäũ 8ä J‚xü*JAŨ:PņĢÄĘT2°Á ØcûŌČÄ)īIĢî;•­î.l"ōå…įˇ_ģ"ũåQ؎øöíŽ8­XfŒHŒnRAŪŗÕ™ˆ§R;~5]ZãNW1I [‚[˕vāŖ~xÉäW%l=õ‰­:ļŅ›#o+Îŗå‘Ž5 xã;„^F^Š 2€}ųéMļÖ#š'”LĐ"‰‹–Į~ƒƒĮ'*[š xbl,A|Ŧy?ŽkG‘^[šˇÎųb[<2¨Ŧ[X˙´%ž‚ā —1}ÔPa™y'ø¸ØâļåhâO1ʨ’{V=ĒyחwvĒæ@+”q…$zŽsČüǍkWx´Aá›ĶēįL•dļ••ä1\÷RN9Î:qĐbē\Ö§j÷ae–ŗ:ŒŦđHd*r9(äaqž¸éŽjŊƒŨÚŪfįQ’âŨQ™HĘHíĐ•<ž3ÉÅO˛”žšÚ¤Ŋækßŧ“¸´€+HJģ–' įŸŽ*H­$[ˆå•Ņv U=SˇÔžÛ=ļDfU#1•ÉØ Ž}:T’kú|sOĘĘ`”E,X… ŸGčĨhį:+Ø­ ãÔ~Қ„ôĀ †lvĒ‹ĒéæO$^[ų™ '˜āg})ąjö3 ģ‡äuCšĀÉ`äúįQŠä:n_#=j6p~čĪ'• ížĄ–.­ŽŊyūĩ§bF‚i„Œ€˛#áq‚2áL’3ÁĒ0rЙJƕîącjV+‹˜ÕŲK( Īãëķ/nÉ{7öĢŦ´“c$„ė#õÁڞē HĸĶDî .ųĻĘ]¸čOȃîū&ĩôëEļĖ’fa´í9TûĒbļIEs=ĖÛrŅ--– e‰@ ĖĮĢ7rĶÚŪTŦ‘#öĐ5+’õĨ<ž8Ŧ\īsEk2´–ÖŌ*Lœ’5Œ73´{déæFÅ[øæžF× ˇ953äŠ ķŠ9Ĩ{ÜcĩŠI§Í`j7;˛üĘ˙2VšĀîwk›|在-šĮUúr=ĮKŠÃ̏ ’zīU¤Ô ÚL1\N;yp’ ˙{îūĩiĘ^dIF=u$‹”teÚyÜr=Ģ›Öí…ģKzŒ#šŌq(BĀ+#mäį  ģž1–äg(-/Ėģāh­!cŸ"EķąīÁúk;UÕÃÜ[…Ąš71Oq°˜Ŗ = ČvĪ5Ŧ)7.Xŗ)TŅ9ßÚæú4]5F÷yY~X¸éîŪŨ=jmĸ…‰Ë4¯÷åŧĮÜ˙AĀŦc¨čú”vÍ -ĨË9UR2 ’İÎãÔ;Öė2Gt‰,LŦŒ2ī]t°ęžû“)ķlXG-šI27œū5Q´¨ämŗ<“F:G4…”LŽkA *3ŪŖŪÁø<į§ĩi(FOT+ÛBŊ´§+A,rŊˇŪŅK”Ũ sOéW-u [Ļ+‚F^JąÃ¨<Ę‡ÆÃōįÚĒËm͝™fĢ) Šö õŽz˜dõŽ…ÆĨ´hlntëᄆûĮz>ŪÉčHõ­p ×?~×IlĐŊėLŽB‚đ!>ƒiäŒz~}j[C­ÉjŌ4ĘÅ…š†Q€r1ĘõĮ"°'ŧš_ŠQŠm–†Ļã d(#šŠ÷ŒƒTĄē[”,TÄęJ:Ō:ŠļŦLcũ̚I§fĶM]ۃ“M‘væžcŖbĮ\{RZ‚’Ā`cŽ*"Āāš••銉F×äĶØš‚+¸<А2ƒž:ƒė{zĖ§˛fŽxå’0r“*—ãŅ€ä}{õ­’Ę€õĻŽwq[QÄ:}.Œ§MKə‚ō ‡ ÄNŨĐ0ĪåVdsK¨Ú%ÔD2ĄlŒGŨ=Ŋ˙*§i+FbŠę'ŠR6†c•bb:Ž+ЧV5ŅÎāãšaūņÁúUŨs}˙_˙EĨUĖjÜũã특ŖŒ Ã˙M˙öšV€‘¨:Q@éE1…Q@ƒæģtC˙ãņ-™Z1ûĩĨaŒ€(LlŦWisíë]Įō /Ė:Ԙ*EGĐ¯ÉŠ%8#ŽG"€$Į<ÔRnßĮJ’3šÍ9[98é@ Ž:~T×HÕKT(%ŽxP:Ôw‘@â<<“‘Csc×ÛôĒø¸ŋ`“°[ä…Á2ã 8áGsÉĪœĻ’ĐŌ0mˆ^îų„Ĩ´,8vËš_aĐīš’"Ũpoī-Ã}Î [fۃ‘Ž)ęÁ¸Sšår“ÖįJ„WBĒiŅ VIæe9O5÷>ŨŗúûÕĖãŊ č>lcŊ.ôŠe¤2C…9ąL‹ûž85#…1ķØdTqåˆ$)úP¤$āuSīKáˆíĐRĖÕũib^(]cÆp3Š#)ĀÆj)@ŨØ~"ŒŒqô=čp_–ÁĪ­Lųa´p9äz˙’j u?•LFč@Ũ׊wÖáŌÆtKo/ctØ^U œ\ņƒØũ9ūuĻ=펨úd°Ÿ%¤fŽE|ĒĻß|ŸĪ#9įĩnÎ-âM͞ČČl`ûU8žĶä˛AHÚC˛GČÚšĪ ×9õĢåR×c.g7-ųōŗH–Љ1îÛwáÉü*ÚËpĮíR†^ž\kĩOÔķŸĐT–Ŧ"d’ $ž¤“’:œc'ŠN]ŠåîTm G$hā‡Eu=AÁŠxÅ7<ûT]ÜĢ$ŠžR@Ÿē…#?ėŽ*X‹8ã֚Ũ2Á?…> yÉÍSbQ°Ų†X`’ŨĒXˇ˙Ö Ŋŧ†ÂÜOpÄGŧ!8铌Ÿnr}ôŦø|O§ŧŠķŲÂm*wr…ÁãąĮNØôŠšEįbß{ŸJœ((@8ąä×ôæ“lM,ĖĮ…QÔņÔũ5zŪč\ÚÃ8`ĸDW 0î3ũiÚâŊˇ,ʡŪĮ})Ō)d ÷ëUMÜ?ī&8U䟠šōvPÂÎ]žģ”ȚŽIĪhņœãĄéœŠÅŋ´ēēÔV#:Ꮩ„˜Đtg“ßņZÜÜäí´—?íH˜üÁū•b f $ōšiä1A€čŖõ48¤Ŋá]ˇî’hĖĢi$eĘ;*ũã€CzįgŪŦ€Îãą$äŖ‹›;š%ĩŠ7Y#U;¤Û‚ĨžlsÅFbē’MŌßHƒû–č~$äŸĖW™<<ÜÛ;!R)7ļââŖ8*$Ręz0éPM Ԋ<ĻųG.ļ“ô?įëPy×VC{;Ũ@:‚‘}Á‡ë“ZN% ČAFPTŠāj†§Iė4ŖRé2Ŧ7’, Z9ehø&ûúRũ­&‹dÚ}Ä‹Ķ °?­]u!ÆIú R§Ë´õęjgUN\Čp‡*ŗÔĪKߛË[+˜Į@| ü3ŠÂ™ôčåē3é’Ęeēu ‚Aō†*Yšõy˙dûfˇĩ-VËL–/ļ\ŦBW„äúävĢí"ÕĈU†TîāŽÔšeni-ÔŖ~DÎKC˛Ķ¯BG>—,2ĮĨuÚáqÎxN+^˙BŌ2×3ÅåœnvķYxŨŋ=}Ō•ŗÚU{nSœ{ķY“Ŋ’ĘžZFđžHbŸđ#€ƒéĪą§ļÅ&Ōaaļ2‡ĩĩÜH™'žOŨ¯¸Ģq {YŒ6åLŸyÁbÎ}É<Ô)ĒlFYln–AÎčX7Ѓû芧ö5”M-Ôų’ČdÚ[%{›ąĀÎĩ9ÍĩąŒuzŗn@ÍÉëL@>ĩŸæŪÛB"Aö”#ģ>ÖCūŅî>œûw¨ĸŠöÜ ëΐŧnĒŊ#؟ĮÖĨaę%aûX›31 €™ČëJ€•ų‡nĩ›&ŦD KŖ6ŪÉĀĪĻãōūĻĢÁ¨ŨÛų‘ÜÃæÜĻ%‰X+n8Ú[‘ÁęN85’Ŗ;l_—4ÂŲĄyRfŠB<ÄÎÖœ “ĀÎ:öŽÅCž>÷CÔ喝F\ũŋPļŸĘWĩ@„ĸ $<āgņĮSę*Ôd¸ĩ q´8Ú#ōøÛÆĻŒîpĮŒđO¯åYđĪ5­ģDö72ĖdfrpI'Ŗ=*éÂ4ūO›rI´ÁqlÖŲ‰íķ‘ņØŲ`xúr:̤ZGk,ąĒĮŠ6€Ŗ9ŨĪ'=w{b´m.Ōgx]^”dÅ!Į¯pÃéIs3 KHMĀpŪ÷ÜË–ß yx8=Î*ģœ9ûĒÛ¸ÍF4ģMŦAąÉŲĪāiŸdp@†úäs˜‰=ÁŅhŊ˜^]‹āąƒLķ%Brj›É5‹âih%ĀĘãœĮŋjše@ŖŠIr•_B­Ī›Ė7QÅæˆ÷@pH#׎ũ]{„ģ€I ‡SĮqÛéUö废ĨE=ž$7ō´‘‚ād7ûĘxoĐ×%zúĮsjsåŅ‘˛-ž§Šá"¸ų% l§=ŗ÷ՍūEĮŖvGōīœUõ–šfrĘ86ŸÄ°ũ†ĸ4*= ö‘[›EˆP@ëM?685OûMĄ@n,ĨŠ1ŒžāáGrpsŽGAVĐ9ÆqĮ§zSĨ8|Hp¨Ĩ°ögŊ"ŒŌBlo†Æ Í++8•KS‰ßL-ļŧLŗ:ė`qúøÕæo›ĒŠWm/$î (lûm~>õĨķŖ:Ÿ DY1VÁô"´4oģw˙]˙öDĒ(Û3í‘Ō¯čšÛy“Ÿôũ‘+Ø9cąŠEPPQEF2eMek˟cQÆ|øˆ˙žÅiĮ\xî=k'Ä6Ū~Ÿ°ļÍĖ ÃqĪcž˙ãN.ÎäĩtŅ\t8¤fÚšÅTK›ˆ-Ô6úȗvī}ŊWéŠl“ŪO*Šfú õüÅu*‘Ūį§-Ŧ\ßķ šĢwtâaēŦ“c$ õcÎ=†2~™4ØŦCū“q4€˙ -!ÉüIĨ›N€4k HČĖ-ŗ9ėq×˙­YJ˛ ¤h÷+2Ģ^O,Ŧ:*¯üy?‰5ŲNŒņÅy"BÄpĀŗ/°bxúqÚ­éí#ە‘ˇ4nŅ–Æ3‚pŠ{mž9Åd¤û›rG°CmŧF8“hc–=KsÔĶ–6SŅAīRwÅ tČ­&Q¸qŪ–.˜#_ZtŸ(ÎN3Î(‹Ą “ĪzC$ôĀ ë@ÆÜúRãœĐ9ÄG…>Ūĩ _ë=8Šeå `ŽsQEpādfIŅyZldō sÆ)îŽûH;i2Ŧ2Ų glãŧiĘI'pÅG& 0ÁČ…Jƒ#ĸ€+ŽcÎ:ķSˇq}E7frų¨.–xmü֎6GfÚpxÚ:öûÕI&õ›KB’M "mFųö(bŠŗQ×ėĩNu>TfYˇ**Ãŗ‚~¸?•>k(§Ķ&˛ö bhÃu##Ž­&‘‰Ė‚áļČ#Y¯VOē~‡Ķډ;ąE%šT* ŽB 4€íę*8Ir;zõ8 & Ī%Fs'aî)ŌOæ}ŋZP0AĮãéP]Bë(xÛ´ŽpG=E8¤Ũ›&M¨Ũ"OĩĢe‘KŽ„¨â8eV בƒŠr2ŧjŲq×VŅ3+6qJ„_cõ­§J*7FëIģ2ÕÔË ģĘĘvÆĨÛÜŸč:Ĩ`÷âÆ(#€[˛Œŧ“mb 9ÂĒ“3ŽHéŌ¯LĸH]nVRc¨=ŋ"*‡L.Ö(åŖĖlvõ*J“úW$ā§š×8ė,‚ũqt“Õe‹Ē㑊Rōųcė! ā¸įõP?ZW9aÜã€V¤@cŽfđôßBÕYw3õ‹R‹ĘŸEšl¨”Į´wd~ĶŦô‹hmÂÍ NÄ`îPÁG÷=UĻÁ“¯š>•3qœũjãIB<ˇdIĻībœÖ:d1y’ŲÚ¨$s䃟nŸŌ•/ė# ‹"&:FŠ˙žúÕw‚ŧw¨ä*Ŧõí[G“ą/›¸ČŽ’i<­’!ÆåŠMÃØsŖ 8éŒ;ĶeŠĨPÁ÷¯ĖŦ‡ §Ø˙ŸĨU[×ŗv†å‹å%ō؆ø{SqOá#™¯ˆĐ|„\äzÔi¸ž˜÷õ¨ãŊˇšo-&Œ¸< aŸĘŸ88Ī9Šqh¤ĶØY†O ôĨ‹;˜ãQ3…ČÁÉî)S$œOlЕô*ú\ĄŦß5¨™T2*3ļpŽ2GqœwÍsīæŽ Åák20‚ y2Ōp}Ā;úŒaŗ[K×ęåîdįdÄōrOų÷ŦŲínšų­ė’HĨÕÂķō0‘VįR9ŨęœRßS5)KČl—Ö–čm"ų ƒk›žI6’20=Žr*ΝĢw$7Ŧ#XĀUP›KĨ[€8 NėAW4ŪĀî'¸ fy°ãv:ŒV¤­ĀÆ1îi6ŲI%šjäpWqäāqQ^][[>'¸Š7=Âä~u,L2W횧s4vz“Í3 †xÕw9Ā 3Á>ų˙ĮjF:ylgļg{¨įI–@Å0;~īš–ÕĻ’Ú gŒ¤.¸Į8įŽßNÕRĘõ$–7ŧ‚ŧā$‚P˜ęN“ÜuëßĨhī`@$)Ą$`”ŽE1™CÆ3ØķS),Ŗ=Å'šsL\F“ÂČrU”‚ĮņęzU8..­eÄfXŅFeˆ‚@õ*yüŗW؁ˆ`|¸íMīciéÔķTšŲ’ã}PÁ"É´Ģe[`ÔÍĩät—y§ÂĢį[ÚĸʒĖKĩŽ? jäwąÎ͉@šÛ"˛ũN{Đã}b•´+mļŌxâ‰lmg>cĀĸB8q•qô#š73Ķ8(ãĄ¤÷-;Ο ]˛›‰ēIpîŋˆ'ņŠŧ°HxŽ˜Š9íÁīIüķIEEč ÜPŖr¤AãüЧĚs,R°6Ŧp’7XŊ˜úzēö¨8ÆāAXd{įډEN6ļwF‹/ɑŒsœæšŋ.OzË6ģQc‚î⹐Ąƒ(üéíRÚę0-ĩÃ\ŗZŠi1ÜC~#õÍpÔÂĘ š:¤o늤į8ĪášËY>Ų|'Qˆ`GIę䑸aˇ…S0"Ē\Îé;ãĖq3. ėqČĢö+Ûĸ[žø×€wWE,/ŗÔÆUyũÔIˇ$†'9Ģē7)véã˙dZĸ +œŗÖ¯h§1\‘˙=Īū‚ĩ¸#RŠ(Ļ0ĸŠ(АÉÃVFŧė ‰CgĩjEŸÅÖŗõ[wģEX‚IĮ™ĀúB$Ļ3ĪįC)pFF Jļ,V§ūÛ7˙M{=Ci+`}§?üE&1ąĮåîŽ}{PÎC”dķŠtv:ˆf~ŋķÜ˙ņŲŦ¯Āėđ˙]ú˙ã´¨dkYÚR?Ņæ`Qũ8ūžĩa‰×ĩ:VĨsfЈ!‡Ī÷Ī÷jOąŪgįĩŒˇ|J?ĀRVíĀÆj8ˆ'Ø•)ĩŊT Yācūz¯­EŊņlũąŽŌ'øĶöA‘סŠĨR6üž´É!ŊĀ?bp=|Ôã˙ĨŠŪõTa!œ‰#˙â¨\g8ēĶGŊ9bž>ûî?ū.›å^Ž?ŗįĮž?ū.Å`­ÁĪ4ĐĒĮqCÅząąŸ§÷ã˙âĒ’īĖbl.[td˙⊁a˜Š\°™÷Ļ2^uuÃ1˙s˙ФTē “§\¯āŋĐĐ!’ŧœÕ€>^¸¨Y.æ6ūĪķŠ˜ }–ëëåÃ< pÃn}MVŸsßEŗ-å+ Np‘øņK7ڕO“gvŌÁ16ßÜ{RĮFĀÃvîÍšßėīÉéĶ*âŌW&IŊ âS¸äÃÔbžË¸‚š¨bgŗmsÛĨŗü¨–F.Ą`ģã9˙G“üv ĸÂFQAÜ~†œ¤îü:TqIļ1û›ŖŽ3öy?øšp“Šō.:Īģ˙ņ4Ž; ÄėéøT1ģ…AīNy×i&Æ?Ô?øUxŽTģ7#ę˙‰Ļ"Ø%1€{öR(Žm7Â\#1rĘų>ųÁũ*Yn`$8ķéIÔCø^ĘŠJÛ Æú‘ĩėfeFĖrôθũOđ5jw3œ;UKŠŦįVI%HÁČĮųíUíu ŲSde”]Ļ ûŸŌžbnĶÔēë–áwsÖ¤1€™ËdtÆk3ûBE;ÚK2 ō‹78õéĶņ§6°3C'#o˜Aūׇ4rģ Ë]KņÎĮwQ×Ō¤t ܎xĒĢlMÔX=0Ā~cĩ_ځÅÔ÷بZ–O .rŖëS’séTĸŊŗÚIēˇĪûâš÷ÖÁˇ ¨?ÛūtuĀfYąûŸŧËÔ¯¸ö<{ŌZŠØŽÛƒšÜāŒ`ĶešŪæŨĶíPäĀī0#Œō8¨í/ŌL‡x’xÎĀ>ā÷­\ہ’‚Sš}ųQÁ'ļjĄĶb/$Š­ įŸ26 ŸčŽ"Ø12ü5Ī.9Æ>jĖÔŠ$×6Ž­tņÉáĨT)ŗĶ#qÎđŌNqœc×" •ĸrT…+Č#xéßđ¨´ö1-‰Ėq`ÆĖsōˇđūŊąHe͋œZsgÂĸķIĪ÷ĒO3ņœsšį/ŧNļ’_C;ŪŨãcœKķp8íšzg9¨›Åū\QÉ-ĄŲ-ŗI,™ß fqŒŽåBÃ<ŒyŊ%•´›DļvšA““ÄĐú}™rËeį?6čĀŨ× ņūÕ `[x–ęhį’-<4‘˛(ŒJÃqeŒā¸Īī@ô÷54>*†f–U‡0^Eq! J˛ŽŌ¤prqŒđkU4›2éöņ8 ‚p{ԜöÍqį‹HËũāáAÎîŊšŅ¨Ŧ%ģÁ­é6×NÉP>3‚‡ŒŽA#JlIuhÄ* ˜Tįæ'ĖĮ Îú“íVá‚;XÂ[‘ÆXļ`dōOâI?=%ÉÆ{âŽ2kGą.=´"YŖDą2‘Œ{ū#ĩK āNŊ1Uî,Ą–v“k̰ŠHˑī‚?Æĸ†Ōá@ xáG@ęõëúšvF+ËĒąęsDq‰™?´˙%­WiÛéÅP†ÕŖ’IüŲ¤āļGaüęôdy@ķÜŌ“W* ׸*6yôĻĘpĻyŠUÁ?)ɨåÉQÎ:Š”P‘8-ˇ¸ĻNIÆGz"W\qÅ,Ŧ—æôÅqD–Ũâ•U‘Æn„Ÿä RŽÖú%ōÖâDV“væˇã?įuä Ž¨ųj<=y덴Ŋ¸EØÖ34į…Ę}ũ‡áŸjŠ)¯P‚ž)<ĀėR5aåãܓžHē֚@Į'Ōŗä‚ä_‹˜$‰˜ M’ƒŽ <x'8čzRAĀ#Ō’8Âįž*nüä’9ʖ?ŋõĐôü*XÆKO÷u –=Î}j;‹y$"xœG*ŠL¸}{Š—%ŗŽsRā`ķŒĶR°œneĨĶĩЎæ?-Ûî•pQž‡Ž}ĢI8۟OķšĢq2)GU`zĢ`ƒúTFÂPö‘Įo8VE žœEiîÉö'ŪKkš!•ÆQŨ*ž§|4í>[Ÿ,É"ƒåÄŊdlghüåšŠ Ĩ͇ŲVŪķ$B“NÄl‚=znīV ÔčÆ)-GęĻ vÄđŋ˙Z“§Ų‰TîŒãâģbfhb3E>adaœáŽ9ĮČߎ8¨“Åļ WÍĢķ”í`aÄc×ÛąÅ4‚ĢTŽ|îE*u8Õ-Kíiuļ–^ti–@QUä%Bƒ’8Æėū-nh¤žĀž(ĶĨ˜[B%i÷lōÕ2sōūęi,måŧĖđŖŗčHīÜZËI5¨oiímbŨžWä\ŸŊ×N Ųyč*Gķāîų°¸÷õ­hķ'ĻÆ5”Z×qæĸÄS-Ûsgh=…I$ģd+´ž)7C…*ËÁ§ņ×iB…čŠfČē^jd]ęœƒÅFS@Æ>•"g 3@ƒĘ”€xõ¤” gŋ6sÅE:—#=iŒdjŒl\ŽšZ$qČv H+¸(ĨNcÜI,~”„DąFč7ħęĸglŧˆ#˙žE:Z”t e;›KV@ ŧ\ŸîđĻÛXY˛ļëXŧKūbāäŽôBSŪ„'¸ÆĶlsgl~ą/øR 3N °ÛûbŋáO™2ŨOJ™FFsŠg6ÁœŠ´ļë˙>ëüņS'OÆ…ˇ?ôÅœŲ°#īzU”$ĻOZĸt‹ŒŲÛüđ_đ§Ma˙Ø˙ŽBŽ“L”ž0q@ĻŽ–߄bŖm;NFaöAp­_qļy¨¤åÜ÷( Ø­.“§ŲŸJ†=ÃpÅšF#ųŌcšTš‚`]ŖĶ4ÖÂ+KŖØr|Ļpíū4贋 îÜq˙=Zš( €qD Į(Hi,Ø1šįĩÃ˙ņT>‰`Āúx“˙ŠĢrāHđiC‘Æ:P"¤z5ž~ėāĮúDŸüUhÖJÅĀ'ūž$˙âĒô=OŌ8ČĐ3.Նî0:´I˙ÅQ.h\q=˙ƯÛäœįĩ ÉÔäŅd"¤zEļÜ .3í;W}ßĖ8–čũ%'ükY3ķÄâŖ=Ī"•WF‰†EÍŌãũŦJû=ų7AēŸũ–ļŨ¨Qs $ž)™&ƒ8Ü܉J‡RŊn”ôŅÆâ>Ũuœą˙ÄVĢ}Îĩ`ĢxĻiŅâ˙Oē˙Ķ?ū"œú0+Ÿˇ\û÷˙ÄV‚åš'ž1R?ƜRû#'öäÉ8˙ˆŠ†ŠXũĄs˙|Į˙ÄUĀĘAPsŪŽ'AMęĖūĮ`1öéĪÕSü(ūĮ|_MĪĒ'øVąéMíHf-Ƃ×R[ĸę9ĄSĄ9úU!á‰ØíūÚšŲØÔū¤d×N9  5JR]Hp‹ŨŲđĨ MGiõû:Jrh¤Č[˙%Įõ5ĐŋŨëIÎGŊ_´Ÿr}”;-áûƒ÷ĩ.ë› ūN*čW‘°1ęi° @[˙gÍoHp ĀĄáKÚK¸ũ”;ƒHŧķ3öȈĪOŗŸū.´´ë6˛ĩōšQ#g,häúdÔÄ ū57j™MŊĮ(ėQE"Š( ˙Ųleptonica-1.86.0/prog/compare_reg.c000066400000000000000000000135671506303110300171660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * compare_reg.c * * This tests comparison of images that are: * * (1) translated with respect to each other * (2) only slightly different in content */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 delx, dely, etransx, etransy, w, h, area1, area2; l_int32 *stab, *ctab; l_float32 cx1, cy1, cx2, cy2, score, fract; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "compare_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* ------------ Test of pixBestCorrelation() --------------- */ pix0 = pixRead("harmoniam100-11.png"); pix1 = pixConvertTo1(pix0, 160); pixGetDimensions(pix1, &w, &h, NULL); /* Now make a smaller image, translated by (-32, -12) * Except for the resizing, this is equivalent to * pix2 = pixTranslate(NULL, pix1, -32, -12, L_BRING_IN_WHITE); */ pix2 = pixCreate(w - 10, h, 1); pixRasterop(pix2, 0, 0, w, h, PIX_SRC, pix1, 32, 12); /* Get the number of FG pixels and the centroid locations */ stab = makePixelSumTab8(); ctab = makePixelCentroidTab8(); pixCountPixels(pix1, &area1, stab); pixCountPixels(pix2, &area2, stab); pixCentroid(pix1, ctab, stab, &cx1, &cy1); pixCentroid(pix2, ctab, stab, &cx2, &cy2); etransx = lept_roundftoi(cx1 - cx2); etransy = lept_roundftoi(cy1 - cy2); lept_stderr("delta cx = %d, delta cy = %d\n", etransx, etransy); /* Get the best correlation, searching around the translation * where the centroids coincide */ pixBestCorrelation(pix1, pix2, area1, area2, etransx, etransy, 4, stab, &delx, &dely, &score, 5); lept_stderr("delx = %d, dely = %d, score = %7.4f\n", delx, dely, score); regTestCompareValues(rp, 32, delx, 0); /* 0 */ regTestCompareValues(rp, 12, dely, 0); /* 1 */ lept_mv("/tmp/lept/comp/correl_5.png", "lept/regout", NULL, NULL); regTestCheckFile(rp, "/tmp/lept/regout/correl_5.png"); /* 2 */ lept_free(stab); lept_free(ctab); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); /* ------------ Test of pixCompareWithTranslation() ------------ */ /* Now use the pyramid to get the result. Do a translation * to remove pixels at the bottom from pix2, so that the * centroids are initially far apart. */ pix1 = pixRead("harmoniam-11.tif"); pix2 = pixTranslate(NULL, pix1, -45, 25, L_BRING_IN_WHITE); l_pdfSetDateAndVersion(0); pixCompareWithTranslation(pix1, pix2, 160, &delx, &dely, &score, 1); pixDestroy(&pix1); pixDestroy(&pix2); lept_stderr("delx = %d, dely = %d\n", delx, dely); regTestCompareValues(rp, 45, delx, 0); /* 3 */ regTestCompareValues(rp, -25, dely, 0); /* 4 */ lept_mv("/tmp/lept/comp/correl.pdf", "lept/regout", NULL, NULL); lept_mv("/tmp/lept/comp/compare.pdf", "lept/regout", NULL, NULL); regTestCheckFile(rp, "/tmp/lept/regout/compare.pdf"); /* 5 */ regTestCheckFile(rp, "/tmp/lept/regout/correl.pdf"); /* 6 */ /* ------------ Test of pixGetPerceptualDiff() --------------- */ pix0 = pixRead("greencover.jpg"); pix1 = pixRead("redcover.jpg"); /* pre-scaled to the same size */ /* Apply directly to the color images */ pixGetPerceptualDiff(pix0, pix1, 1, 3, 20, &fract, &pix2, &pix3); lept_stderr("Fraction of color pixels = %f\n", fract); regTestCompareValues(rp, 0.061252, fract, 0.01); /* 7 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 8 */ regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 9 */ pixDestroy(&pix2); pixDestroy(&pix3); /* Apply to grayscale images */ pix2 = pixConvertTo8(pix0, 0); pix3 = pixConvertTo8(pix1, 0); pixGetPerceptualDiff(pix2, pix3, 1, 3, 20, &fract, &pix4, &pix5); lept_stderr("Fraction of grayscale pixels = %f\n", fract); regTestCompareValues(rp, 0.046928, fract, 0.0002); /* 10 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 11 */ regTestWritePixAndCheck(rp, pix5, IFF_TIFF_G4); /* 12 */ pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return regTestCleanup(rp); } leptonica-1.86.0/prog/comparepages.c000066400000000000000000000107531506303110300173430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * comparepages.c * * This compares text pages using the location of word bounding boxes. * The goal is to get a fast and robust determination for whether * two pages are the same. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 w, h, n, same; BOXA *boxa1, *boxa2; NUMA *nai1, *nai2; NUMAA *naa1, *naa2; PIX *pixs, *pixt, *pixb1, *pixb2; setLeptDebugOK(1); lept_mkdir("lept/comp"); pixs = pixRead("lucasta.047.jpg"); pixb1 = pixConvertTo1(pixs, 128); pixGetWordBoxesInTextlines(pixb1, 10, 10, 500, 50, &boxa1, &nai1); pixt = pixDrawBoxaRandom(pixs, boxa1, 2); pixDisplay(pixt, 100, 100); pixWrite("/tmp/lept/comp/pixt.png", pixt, IFF_PNG); naa1 = boxaExtractSortedPattern(boxa1, nai1); numaaWrite("/tmp/lept/comp/naa1.naa", naa1); n = numaaGetCount(naa1); lept_stderr("Number of textlines = %d\n", n); pixDisplay(pixb1, 300, 0); /* Translate */ pixb2 = pixCreateTemplate(pixb1); pixGetDimensions(pixb1, &w, &h, NULL); pixRasterop(pixb2, 148, 133, w, h, PIX_SRC, pixb1, 0, 0); pixDisplay(pixb2, 600, 0); pixGetWordBoxesInTextlines(pixb2, 10, 10, 500, 50, &boxa2, &nai2); naa2 = boxaExtractSortedPattern(boxa2, nai2); numaaCompareImagesByBoxes(naa1, naa2, 5, 10, 150, 150, 20, 20, &same, 1); lept_stderr("Translation. same?: %d\n\n", same); boxaDestroy(&boxa2); numaDestroy(&nai2); pixDestroy(&pixb2); numaaDestroy(&naa2); /* Aligned part is below h/3 */ pixb2 = pixCreateTemplate(pixb1); pixGetDimensions(pixb1, &w, &h, NULL); pixRasterop(pixb2, 0, 0, w, h / 3, PIX_SRC, pixb1, 0, 2 * h / 3); pixRasterop(pixb2, 0, h / 3, w, 2 * h / 3, PIX_SRC, pixb1, 0, h / 3); pixDisplay(pixb2, 900, 0); pixGetWordBoxesInTextlines(pixb2, 10, 10, 500, 50, &boxa2, &nai2); naa2 = boxaExtractSortedPattern(boxa2, nai2); numaaCompareImagesByBoxes(naa1, naa2, 5, 10, 150, 150, 20, 20, &same, 1); lept_stderr("Aligned part below h/3. same?: %d\n\n", same); boxaDestroy(&boxa2); numaDestroy(&nai2); pixDestroy(&pixb2); numaaDestroy(&naa2); /* Top and bottom switched; no aligned parts */ pixb2 = pixCreateTemplate(pixb1); pixGetDimensions(pixb1, &w, &h, NULL); pixRasterop(pixb2, 0, 0, w, h / 3, PIX_SRC, pixb1, 0, 2 * h / 3); pixRasterop(pixb2, 0, h / 3, w, 2 * h / 3, PIX_SRC, pixb1, 0, 0); pixDisplay(pixb2, 1200, 0); pixGetWordBoxesInTextlines(pixb2, 10, 10, 500, 50, &boxa2, &nai2); naa2 = boxaExtractSortedPattern(boxa2, nai2); numaaCompareImagesByBoxes(naa1, naa2, 5, 10, 150, 150, 20, 20, &same, 1); lept_stderr("Top/Bot switched; no alignment. Same?: %d\n", same); boxaDestroy(&boxa2); numaDestroy(&nai2); pixDestroy(&pixb2); numaaDestroy(&naa2); boxaDestroy(&boxa1); numaDestroy(&nai1); pixDestroy(&pixs); pixDestroy(&pixb1); pixDestroy(&pixt); numaaDestroy(&naa1); return 0; } leptonica-1.86.0/prog/comparepixa.c000066400000000000000000000073301506303110300172020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * comparepixa.c * * comparepixa file1 file2 nx ny tw spacing border fontsize fileout * * This reads two pixa or pixacomp from files and renders them * interleaved, side-by-side in a pdf. A warning is issued if the * input image arrays have different lengths. * * The integers nx and ny specify how many side-by-side pairs * are displayed on each pdf page. For example, if nx = 1 and ny = 2, * then two pairs are shown, one above the other. * * The input pix are scaled to tw, the target width, then paired * up with %spacing and an optional %border. * * The pairs are then mosaiced, depending on %nx and %ny, into * a set of larger images. The %spacing and %border parameters * are used here as well. To label each pair with the index from * the input arrays, choose fontsize in {4, 6, 8, 10, 12, 14, 16, 18, 20}. * To skip labelling, set %fontsize = 0. * * This set of images is rendered into a pdf and written to %fileont. * * Typical numbers for the input parameters are: * %nx = small integer (1 - 4) * %ny = 2 * %nx * %tw = 200 - 500 pixels * %spacing = 10 * %border = 2 * %fontsize = 10 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *fileout; l_int32 nx, ny, tw, spacing, border, fontsize; PIXA *pixa1, *pixa2; if (argc != 10) { lept_stderr("Syntax error in comparepixa:\n" " comparepixa file1 file2 nx ny tw spacing border" " fontsize fileout\n"); return 1; } setLeptDebugOK(1); /* Input files can be either pixa or pixacomp */ if ((pixa1 = pixaReadBoth(argv[1])) == NULL) return ERROR_INT("pixa1 not read", __func__, 1); if ((pixa2 = pixaReadBoth(argv[2])) == NULL) return ERROR_INT("pixa2 not read", __func__, 1); nx = atoi(argv[3]); ny = atoi(argv[4]); tw = atoi(argv[5]); spacing = atoi(argv[6]); border = atoi(argv[7]); fontsize = atoi(argv[8]); fileout = argv[9]; pixaCompareInPdf(pixa1, pixa2, nx, ny, tw, spacing, border, fontsize, fileout); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return 0; } leptonica-1.86.0/prog/comparetest.c000066400000000000000000000141111506303110300172130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * comparetest.c * * comparetest filein1 filein2 type fileout * * where * type = {0, 1} for {abs-diff and subtraction} comparisons * * Compares two images, using either the absolute value of the * pixel differences or the difference clipped to 0. For RGB, * the differences are computed separately on each component. * If one has a colormap and the other doesn't, the colormap * is removed before making the comparison. * * Warning: you usually want to use abs-diff to compare * two grayscale or color images. If you use subtraction, * the result you get will depend on the order of the input images. * For example, if pix2 = pixDilateGray(pix1), then every * pixel in pix1 will be equal to or greater than pix2. So if * you subtract pix2 from pix1, you will get 0 for all pixels, * which looks like they're the same! * * Here's an interesting observation. Take an image that has * been jpeg compressed at a quality = 75. If you re-compress * the image, what quality factor should be used to minimize * the change? Answer: 75 (!) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 type, comptype, d1, d2, same, first, last; l_float32 fract, diff, rmsdiff; char *filein1, *filein2, *fileout; GPLOT *gplot; NUMA *na1, *na2; PIX *pixs1, *pixs2, *pixd; if (argc != 5) return ERROR_INT(" Syntax: comparetest filein1 filein2 type fileout", __func__, 1); filein1 = argv[1]; filein2 = argv[2]; type = atoi(argv[3]); pixd = NULL; fileout = argv[4]; setLeptDebugOK(1); /* If comparing image files with 16 bps and spp > 1, * comment this line out to strip 16 --> 8 spp */ l_pngSetReadStrip16To8(0); if ((pixs1 = pixRead(filein1)) == NULL) return ERROR_INT("pixs1 not made", __func__, 1); if ((pixs2 = pixRead(filein2)) == NULL) return ERROR_INT("pixs2 not made", __func__, 1); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 == 1 && d2 == 1) { pixEqual(pixs1, pixs2, &same); if (same) { lept_stderr("Images are identical\n"); pixd = pixCreateTemplate(pixs1); /* write empty pix for diff */ } else { if (type == 0) comptype = L_COMPARE_XOR; else comptype = L_COMPARE_SUBTRACT; pixCompareBinary(pixs1, pixs2, comptype, &fract, &pixd); lept_stderr("Fraction of different pixels: %10.6f\n", fract); } pixWrite(fileout, pixd, IFF_PNG); } else { if (type == 0) comptype = L_COMPARE_ABS_DIFF; else comptype = L_COMPARE_SUBTRACT; pixCompareGrayOrRGB(pixs1, pixs2, comptype, GPLOT_PNG, &same, &diff, &rmsdiff, &pixd); if (type == 0) { if (same) { lept_stderr("Images are identical\n"); } else { lept_stderr("Images differ: = %10.6f\n", diff); lept_stderr(" = %10.6f\n", rmsdiff); } } else { /* subtraction */ if (same) { lept_stderr("pixs2 strictly greater than pixs1\n"); } else { lept_stderr("Images differ: = %10.6f\n", diff); lept_stderr(" = %10.6f\n", rmsdiff); } } if (d1 != 16) pixWrite(fileout, pixd, IFF_JFIF_JPEG); else pixWrite(fileout, pixd, IFF_PNG); if (d1 != 16 && !same) { na1 = pixCompareRankDifference(pixs1, pixs2, 1); if (na1) { numaGetNonzeroRange(na1, 0.00005, &first, &last); lept_stderr("Nonzero diff range: first = %d, last = %d\n", first, last); na2 = numaClipToInterval(na1, first, last); gplot = gplotCreate("/tmp/lept/comp/rank", GPLOT_PNG, "Pixel Rank Difference", "pixel val difference", "rank"); gplotAddPlot(gplot, NULL, na2, GPLOT_LINES, "rank"); gplotMakeOutput(gplot); gplotDestroy(&gplot); l_fileDisplay("/tmp/lept/comp/rank.png", 100, 100, 1.0); numaDestroy(&na1); numaDestroy(&na2); } } } pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/compfilter_reg.c000066400000000000000000000326331506303110300176770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * compfilter_reg.c * * Regression test for filters that select connected components * based on size, using logical combinations of indicator arrays. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void Count_pieces(L_REGPARAMS *rp, PIX *pix, l_int32 nexp); static void Count_pieces2(L_REGPARAMS *rp, BOXA *boxa, l_int32 nexp); static l_int32 Count_ones(L_REGPARAMS *rp, NUMA *na, l_int32 nexp, l_int32 index, const char *name); static const l_float32 edges[13] = {0.0f, 0.2f, 0.3f, 0.35f, 0.4f, 0.45f, 0.5f, 0.55f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f}; /* for feyn.tif */ static const l_int32 band[12] = {1, 11, 48, 264, 574, 704, 908, 786, 466, 157, 156, 230}; static const l_int32 total[12] = {1, 12, 60, 324, 898, 1602, 2510, 3296, 3762, 3919, 4075, 4305}; #if 0 /* for rabi.png */ static const l_int32 band[12] = {24, 295, 490, 817, 1768, 962, 8171, 63, 81, 51, 137, 8619}; static const l_int32 total[12] = {24, 319, 809, 1626, 3394, 4356, 12527, 12590, 12671, 12722, 12859, 21478}; #endif int main(int argc, char **argv) { l_int32 w, h, n, i, sum, sumi, empty; BOX *box1, *box2, *box3, *box4; BOXA *boxa1, *boxa2; NUMA *na1, *na2, *na3, *na4, *na5; NUMA *na2i, *na3i, *na4i, *nat, *naw, *nah; PIX *pixs, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixa3; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Draw 4 filled boxes of different sizes */ pixs = pixCreate(200, 200, 1); box1 = boxCreate(10, 10, 20, 30); box2 = boxCreate(50, 10, 40, 20); box3 = boxCreate(110, 10, 35, 5); box4 = boxCreate(160, 10, 5, 15); boxa1 = boxaCreate(4); boxaAddBox(boxa1, box1, L_INSERT); boxaAddBox(boxa1, box2, L_INSERT); boxaAddBox(boxa1, box3, L_INSERT); boxaAddBox(boxa1, box4, L_INSERT); pixRenderBox(pixs, box1, 1, L_SET_PIXELS); pixRenderBox(pixs, box2, 1, L_SET_PIXELS); pixRenderBox(pixs, box3, 1, L_SET_PIXELS); pixRenderBox(pixs, box4, 1, L_SET_PIXELS); pix1 = pixFillClosedBorders(pixs, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pix2 = pixCreateTemplate(pixs); pixRenderHashBox(pix2, box1, 6, 4, L_POS_SLOPE_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pix2, box2, 7, 2, L_POS_SLOPE_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pix2, box3, 4, 2, L_VERTICAL_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pix2, box4, 3, 1, L_HORIZONTAL_LINE, 1, L_SET_PIXELS); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ /* Exercise the parameters: Reg indices 2-27 */ pix3 = pixSelectBySize(pix1, 0, 22, 8, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectBySize(pix1, 0, 30, 8, L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectBySize(pix1, 0, 5, 8, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectBySize(pix1, 0, 6, 8, L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectBySize(pix1, 20, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectBySize(pix1, 31, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectBySize(pix1, 21, 10, 8, L_SELECT_IF_EITHER, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectBySize(pix1, 20, 30, 8, L_SELECT_IF_EITHER, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectBySize(pix1, 22, 32, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectBySize(pix1, 6, 32, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectBySize(pix1, 5, 25, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectBySize(pix1, 25, 5, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectByPerimToAreaRatio(pix1, 0.3, 8, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectByPerimToAreaRatio(pix1, 0.15, 8, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectByPerimToAreaRatio(pix1, 0.4, 8, L_SELECT_IF_LTE, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectByPerimToAreaRatio(pix1, 0.45, 8, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectByPerimSizeRatio(pix2, 2.3, 8, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 2); pix3 = pixSelectByPerimSizeRatio(pix2, 1.2, 8, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectByPerimSizeRatio(pix2, 1.7, 8, L_SELECT_IF_LTE, NULL); Count_pieces(rp, pix3, 1); pix3 = pixSelectByPerimSizeRatio(pix2, 2.9, 8, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectByAreaFraction(pix2, 0.3, 8, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 0); pix3 = pixSelectByAreaFraction(pix2, 0.9, 8, L_SELECT_IF_LT, NULL); Count_pieces(rp, pix3, 4); pix3 = pixSelectByAreaFraction(pix2, 0.5, 8, L_SELECT_IF_GTE, NULL); Count_pieces(rp, pix3, 3); pix3 = pixSelectByAreaFraction(pix2, 0.7, 8, L_SELECT_IF_GT, NULL); Count_pieces(rp, pix3, 2); boxa2 = boxaSelectBySize(boxa1, 21, 10, L_SELECT_IF_EITHER, L_SELECT_IF_LT, NULL); Count_pieces2(rp, boxa2, 3); boxa2 = boxaSelectBySize(boxa1, 22, 32, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); Count_pieces2(rp, boxa2, 2); boxaDestroy(&boxa1); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); /* Here's the most general method for selecting components. * * We do it for area fraction, but any combination of * * size, area/perimeter ratio and area fraction can be used. * * Reg indices 28-85 */ pixs = pixRead("feyn.tif"); pix1 = pixCopy(NULL, pixs); /* subtract bands from this */ pix2 = pixCreateTemplate(pixs); /* add bands to this */ pixGetDimensions(pixs, &w, &h, NULL); boxa1 = pixConnComp(pixs, &pixa1, 8); n = boxaGetCount(boxa1); na1 = pixaFindAreaFraction(pixa1); nat = numaCreate(0); numaSetCount(nat, n); /* initialize to all 0 */ sum = sumi = 0; pixa3 = pixaCreate(0); for (i = 0; i < 12; i++) { /* Compute within the intervals using an intersection. */ na2 = numaMakeThresholdIndicator(na1, edges[i], L_SELECT_IF_GTE); if (i != 11) na3 = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_LT); else na3 = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_LTE); na4 = numaLogicalOp(NULL, na2, na3, L_INTERSECTION); sum += Count_ones(rp, na4, 0, 0, NULL); /* Compute outside the intervals using a union, and invert */ na2i = numaMakeThresholdIndicator(na1, edges[i], L_SELECT_IF_LT); if (i != 11) na3i = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_GTE); else na3i = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_GT); na4i = numaLogicalOp(NULL, na3i, na2i, L_UNION); numaInvert(na4i, na4i); sumi += Count_ones(rp, na4i, 0, 0, NULL); /* Compare the two methods */ if (sum != sumi) lept_stderr("WRONG: sum = %d, sumi = %d\n", sum, sumi); /* Reconstruct the image, band by band. */ numaLogicalOp(nat, nat, na4, L_UNION); pixa2 = pixaSelectWithIndicator(pixa1, na4, NULL); pix3 = pixaDisplay(pixa2, w, h); pixOr(pix2, pix2, pix3); /* add them in */ pix4 = pixCopy(NULL, pix2); /* destroyed by Count_pieces */ Count_ones(rp, na4, band[i], i, "band"); Count_pieces(rp, pix3, band[i]); Count_ones(rp, nat, total[i], i, "total"); Count_pieces(rp, pix4, total[i]); pixaDestroy(&pixa2); /* Remove band successively from full image */ pixRemoveWithIndicator(pix1, pixa1, na4); pixaAddPix(pixa3, pix1, L_COPY); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na2i); numaDestroy(&na3i); numaDestroy(&na4i); } /* Did we remove all components from pix1? */ pixZero(pix1, &empty); regTestCompareValues(rp, 1, empty, 0.0); if (!empty) lept_stderr("\nWRONG: not all pixels removed from pix1\n"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); pixaDestroy(&pixa1); numaDestroy(&na1); numaDestroy(&nat); /* One last extraction. Get all components that have either * a height of at least 50 or a width of between 30 and 35, * and also have a relatively large perimeter/area ratio. */ pixs = pixRead("feyn.tif"); boxa1 = pixConnComp(pixs, &pixa1, 8); n = boxaGetCount(boxa1); pixaFindDimensions(pixa1, &naw, &nah); na1 = pixaFindPerimToAreaRatio(pixa1); na2 = numaMakeThresholdIndicator(nah, 50, L_SELECT_IF_GTE); na3 = numaMakeThresholdIndicator(naw, 30, L_SELECT_IF_GTE); na4 = numaMakeThresholdIndicator(naw, 35, L_SELECT_IF_LTE); na5 = numaMakeThresholdIndicator(na1, 0.4, L_SELECT_IF_GTE); numaLogicalOp(na3, na3, na4, L_INTERSECTION); numaLogicalOp(na2, na2, na3, L_UNION); numaLogicalOp(na2, na2, na5, L_INTERSECTION); numaInvert(na2, na2); /* get components to be removed */ pixRemoveWithIndicator(pixs, pixa1, na2); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 86 */ pixaAddPix(pixa3, pixs, L_INSERT); boxaDestroy(&boxa1); pixaDestroy(&pixa1); numaDestroy(&naw); numaDestroy(&nah); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); if (rp->display) { pix1 = pixaDisplayTiledInColumns(pixa3, 2, 0.25, 25, 2); pixDisplay(pix1, 100, 100); pixWrite("/tmp/lept/filter/result.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixa3); return regTestCleanup(rp); } /* --------------------- Helpers -------------------------- */ static void Count_pieces(L_REGPARAMS *rp, PIX *pix, l_int32 nexp) { l_int32 n; BOXA *boxa; if (rp->index > 28 && rp->index < 55) regTestWritePixAndCheck(rp, pix, IFF_PNG); /* ... */ boxa = pixConnComp(pix, NULL, 8); n = boxaGetCount(boxa); regTestCompareValues(rp, nexp, n, 0.0); if (n != nexp) lept_stderr("WRONG!: Num. comps = %d; expected = %d\n", n, nexp); boxaDestroy(&boxa); pixDestroy(&pix); } static void Count_pieces2(L_REGPARAMS *rp, BOXA *boxa, l_int32 nexp) { l_int32 n; n = boxaGetCount(boxa); regTestCompareValues(rp, nexp, n, 0.0); if (n != nexp) lept_stderr("WRONG!: Num. boxes = %d; expected = %d\n", n, nexp); boxaDestroy(&boxa); } static l_int32 Count_ones(L_REGPARAMS *rp, NUMA *na, l_int32 nexp, l_int32 index, const char *name) { l_int32 i, n, val, sum; n = numaGetCount(na); sum = 0; for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); if (val == 1) sum++; } if (!name) return sum; regTestCompareValues(rp, nexp, sum, 0.0); if (nexp != sum) lept_stderr("WRONG! %s[%d]: num. ones = %d; expected = %d\n", name, index, sum, nexp); return 0; } leptonica-1.86.0/prog/compresspdf.c000066400000000000000000000222331506303110300172160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * compresspdf.c * * This program concatenates all pdfs in a directory by rendering them * as images, optionally scaling the images, and generating an output pdf. * The pdfs are taken in lexical order. Pages are encoded with either * tiffg4 or jpeg (DCT), or a mixture of them depending on input parameters * and page color content. For DCT encoding, the jpeg quality factor * can be used to trade off the size of the resulting pdf against * the image quality. * * If the pages are monochrome (black and white), use of the %onebit * flag will achieve better compression with less distortion. * If most of the pages are black and white, but some have color that * needs to be saved, input parameters %onebit and %savecolor should * be both set to 1. Then the pages with color are compressed with DCT * and the monochrome pages are compressed with tiffg4. * * Scaling of the pdf pages (which are often images) is done in two * steps. In the first, the pdf is converted to a set of rasterized * images, where the resolution of the rasters %imres can be either * 150 ppi or 300 ppi. In the second step, %scalefactor is used to * scale each of these images down or up, with a maximum upscaling * of 2.0. * * If the images in the pdf are low-resolution grayscale, they can be * upscaled 2x and binarized to make a readable and better compressed pdf. * For example, an Internet Archive book pdf with 8 bpp images at a * resolution of about 120 ppi, can be converted to 240 ppi, 1 bpp with * a size reduction of about 40%. For that, use: %onebit = 1, * savecolor = 1 (if there are color images), scalefactor = 2.0. * * Syntax: * compresspdf basedir imres scalefactor onebit savecolor * quality title fileout * * The %basedir is a directory where the input pdf files are located. * The program will operate on every file in this directory with * the ".pdf" extension. * * The %imres is the desired resolution of the rasterization from the * pdf page to a page image. Two choices are allowed: 150 and 300 ppi. * Use 0 for default (150 ppi). The actual resolution used by the * renderer depends on the page image size and is computed internally. * We limit the maximum resolution to 300 ppi because these images are * RGB uncompressed and are large: 6.3 MB for 150 ppi and 25 MB for 300 ppi. * * The %scalefactor is the scaling applied to the rasterized images, in * order to produce the images stored in the output pdf. To reduce * the size of the generated pdf, a %scalefactor < 1.0 can be used to * downscale the rasterized image. If %scalefactor = 0.0, the default * value of 1.0 will be used. The maximum allowed value for %scalefactor * is 2.0. For normal text on images scanned at 300 ppi, a 2x reduction * (%scalefactor = 0.5) may be satisfactory. Internally, we compute * an output resolution for the pdf that will cause it to print * 11 inches high, based on the height in pixels of the first image * in the set. * * As the first step in processing, images are saved in the directory * /tmp/lept/renderpdf/, as RGB in ppm format, and at the resolution * specified by %imres. If the %onebit flag is 0, these will be * encoded in the output pdf using DCT. To force the images to be * 1 bpp with tiffg4 encoding, use %onebit = 1. * * The %savecolor flag is ignored unless %onebit is 1. In that case, * if %savecolor is 1, each image is tested for color content, and if * even a relatively small amount is found, the image will be encoded * with DCT instead of tiffg4. * * The %quality is the jpeg output quality factor for images stored * with DCT encoding in the pdf. Use 0 for the default value (50), * which is satisfactory for many purposes. Use 75 for standard * jpeq quality; 85-95 is very high quality. Allowed values are * between 25 and 95. * * The %title is the title given to the pdf. Use %title == "none" * to omit the title. * * The pdf output is written to %fileout. It is advisable (but not * required) to have a '.pdf' extension. * * As the first step in processing, images are saved in the directory * /tmp/lept/renderpdf/, as RGB at either 150 or 300 ppi in ppm format. * Each image about 6MB at 150 ppi, or 25MB at 300 ppi. * * We use pdftoppm to render the images at (typically) 150 pixels/inch * for a full page, when scalefactor = 1.0. The renderer uses the * mediaboxes to decide how big to make the images. If those boxes * have values that are too large, the intermediate ppm images can * be very large. To prevent that, we compute the resolution to input * to pdftoppm that results in RGB ppm images representing page images * at about 150 ppi (when scalefactor = 1.0). These images are about * 6MB, but are written quickly because there is no compression. * * N.B. This requires running pdftoppm from the Poppler package * of pdf utilities For non-unix systems, this requires * installation of the cygwin Poppler package: * https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86/poppler/ * poppler-0.26.5-1 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { char buf[256]; char *basedir, *title, *fileout; l_int32 imres, render_res, onebit, savecolor, quality; l_float32 scalefactor; SARRAY *safiles; if (argc != 9) return ERROR_INT( "Syntax: compresspdf basedir imres scalefactor " "onebit savecolor quality title fileout", __func__, 1); basedir = argv[1]; imres = atoi(argv[2]); scalefactor = atof(argv[3]); onebit = atoi(argv[4]); /* set to 1 to enforce 1 bpp tiffg4 encoding */ savecolor = atoi(argv[5]); /* if onebit == 1, set to 1 to save color */ quality = atoi(argv[6]); /* jpeg quality */ title = argv[7]; fileout = argv[8]; if (imres <= 0) imres = 150; /* default value */ if (imres != 150 && imres != 300) { L_WARNING("imres = %d must be 150 or 300; setting to 150\n", __func__, imres); imres = 150; } if (scalefactor <= 0.0) scalefactor = 1.0; if (scalefactor > 2.0) { L_WARNING("scalefactor %f too big; setting to 2.0\n", __func__, scalefactor); scalefactor = 2.0; } if (quality <= 0) quality = 50; /* default value */ if (quality < 25) { L_WARNING("quality = %d is too low; setting to 25\n", __func__, quality); quality = 25; } if (quality > 95) { L_WARNING("quality = %d is too high; setting to 95\n", __func__, quality); quality = 95; } setLeptDebugOK(1); /* Render all images from pdfs */ if (l_pdfRenderFiles(basedir, NULL, imres, &safiles)) return ERROR_INT_1("rendering failed from basedir", basedir, __func__, 1); /* Optionally binarize, then scale and collect all images in memory. * If n > 100, use pixacomp instead of pixa to store everything * before generating the pdf. * When using the onebit option, It is important to binarize * the images in leptonica. We do not let 'pdftoppm -mono' do * the binarization, because it will apply error-diffusion * dithering to gray and color images. */ lept_stderr("compressing ...\n"); compressFilesToPdf(safiles, onebit, savecolor, scalefactor, quality, title, fileout); sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/prog/conncomp_reg.c000066400000000000000000000147241506303110300173500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * conncomp_reg.c * * Regression test for connected components (both 4 and 8 * connected), including regeneration of the original * image from the components. This is also an implicit * test of rasterop. * * Also tests iterative covering of connected components by * minimum spanning rectangles. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *array1, *array2; l_int32 i, n1, n2, n3; size_t size1, size2; FILE *fp; BOXA *boxa1, *boxa2; PIX *pixs, *pix1, *pix2, *pix3; PIXA *pixa1; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); /* --------------------------------------------------------------- * * Test pixConnComp() and pixCountConnComp(), * * with output to both boxa and pixa * * --------------------------------------------------------------- */ /* First, test with 4-cc */ boxa1= pixConnComp(pixs, &pixa1, 4); n1 = boxaGetCount(boxa1); boxa2= pixConnComp(pixs, NULL, 4); n2 = boxaGetCount(boxa2); pixCountConnComp(pixs, 4, &n3); lept_stderr("Number of 4 c.c.: n1 = %d; n2 = %d, n3 = %d\n", n1, n2, n3); regTestCompareValues(rp, n1, n2, 0); /* 0 */ regTestCompareValues(rp, n1, n3, 0); /* 1 */ regTestCompareValues(rp, n1, 4452, 0); /* 2 */ pix1 = pixaDisplay(pixa1, pixGetWidth(pixs), pixGetHeight(pixs)); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ regTestComparePix(rp, pixs, pix1); /* 4 */ pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix1); /* Test with 8-cc */ boxa1= pixConnComp(pixs, &pixa1, 8); n1 = boxaGetCount(boxa1); boxa2= pixConnComp(pixs, NULL, 8); n2 = boxaGetCount(boxa2); pixCountConnComp(pixs, 8, &n3); lept_stderr("Number of 8 c.c.: n1 = %d; n2 = %d, n3 = %d\n", n1, n2, n3); regTestCompareValues(rp, n1, n2, 0); /* 5 */ regTestCompareValues(rp, n1, n3, 0); /* 6 */ regTestCompareValues(rp, n1, 4305, 0); /* 7 */ pix1 = pixaDisplay(pixa1, pixGetWidth(pixs), pixGetHeight(pixs)); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ regTestComparePix(rp, pixs, pix1); /* 9 */ pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix1); /* --------------------------------------------------------------- * * Test boxa I/O * * --------------------------------------------------------------- */ lept_mkdir("lept/conn"); boxa1 = pixConnComp(pixs, NULL, 4); fp = lept_fopen("/tmp/lept/conn/boxa1.ba", "wb+"); boxaWriteStream(fp, boxa1); lept_fclose(fp); fp = lept_fopen("/tmp/lept/conn/boxa1.ba", "rb"); boxa2 = boxaReadStream(fp); lept_fclose(fp); fp = lept_fopen("/tmp/lept/conn/boxa2.ba", "wb+"); boxaWriteStream(fp, boxa2); lept_fclose(fp); array1 = l_binaryRead("/tmp/lept/conn/boxa1.ba", &size1); array2 = l_binaryRead("/tmp/lept/conn/boxa2.ba", &size2); regTestCompareStrings(rp, array1, size1, array2, size2); /* 10 */ lept_free(array1); lept_free(array2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* --------------------------------------------------------------- * * Just for fun, display each component as a random color in * * cmapped 8 bpp. Background is color 0; it is set to white. * * --------------------------------------------------------------- */ boxa1 = pixConnComp(pixs, &pixa1, 4); pix1 = pixaDisplayRandomCmap(pixa1, pixGetWidth(pixs), pixGetHeight(pixs)); cmap = pixGetColormap(pix1); pixcmapResetColor(cmap, 0, 255, 255, 255); /* reset background to white */ regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ if (rp->display) pixDisplay(pix1, 100, 0); boxaDestroy(&boxa1); pixDestroy(&pix1); pixaDestroy(&pixa1); pixDestroy(&pixs); /* --------------------------------------------------------------- * * Test iterative covering of connected components by rectangles * * --------------------------------------------------------------- */ pixa1 = pixaCreate(0); pix1 = pixRead("rabi.png"); pix2 = pixReduceRankBinaryCascade(pix1, 1, 1, 1, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 12 - */ pixaAddPix(pixa1, pix2, L_INSERT); for (i = 1; i < 6; i++) { pix3 = pixMakeCoveringOfRectangles(pix2, i); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 13 - 17 */ pixaAddPix(pixa1, pix3, L_INSERT); } pix3 = pixaDisplayTiledInRows(pixa1, 1, 2500, 1.0, 0, 30, 0); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 18 */ pixDisplayWithTitle(pix3, 100, 900, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa1); return regTestCleanup(rp); } leptonica-1.86.0/prog/contrast-orig-60.jpg000066400000000000000000003213321506303110300202470ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā ”ú˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?ë5…M˛o,`@QĪåÔח]ßęúį™#°e”ŠŒô¸ô={W¯č7qj†Ũb$(ČY?Īá]g&]ĘßŨn˙Ļ(kĨ7‰æ…ΰqQIpōĘB6{ä p}ą‡#žrÜT*¯vĀ"÷ ­l–Ū/Ÿ“č:TĸP€…\Õũu6ņ“ÁúĐá™x_›§& ŪÄᨿ˜Ēc=ŠQXnĮĐõ§aCđ #ÔR Áģœ’~†žŦûŠõū”üšëØûЁœîõÍļđ7R2äúŸ\ĶŌåI;‡4˜ų˛OOƜ:㜞hįĻ)NĪOzŒn1ÛįÜW¯ëÍ=G'Чƒ„įÚŖnųp1ہ•ü)2Á°zdū¨O\ķëŠPr¤†įëNeāNzdvĨGmģxÎjĢj–ÉĻË~ÎE´A™˜ŠĪĘH8šø¯äš IRĘä … CV‡#?8'9íÆi“ëqZËw,ÅcÚ6;I!”xžŸ—5eÜ´gn c* Ā5WQÖ­t‹¸ž-IĀÚĨšÁ' éÁ?…X{Ô;‘ēîL7,ŧr=šąŪĮ$˛Â˛Š’õä¸īž.ĮhųF9É pųë^8ĒPQŽ7cŠößĀÍ`ˆsŊ@ę9íÍDuíAoo ļ†98 &rIg^Į\‘øöǎëqMpŦŽmâŸož‘†gˆ;•rČ>^œœœb™§ęúŋšûk…€­Ģ~yFX€@;dƒŒ#…šįÔŪūę`â%*9ŒŦNå€AāŸēG™w¨‹Y4ØÚkyĄÜęҞ X1ĀČÎJžqžã4ũBū[¨’ę ›Ī>C¨ŠmÃjĢc ¸ß–äp9€ĨąÕnÍÅôz¤Đ423@Ģ2$Tųž\äåē{ jĨϝŠ o-$[Ŗ r…[iæ=Ė `ÃĪAԌØMSP’]9Rß 7ÉqžŨÔÄáC“Īp ˙ŧG'‘NŊÔ5Hnm-Pˇƒ÷g;YG9éŒį$tFĨŠŨ]B—ļÂ$h¤Ũ˜ĘĘČ=HÁ,øõ ­ŅÁãiT’:Ž”` NĪ|Đ3Ķ Žã=iįŒžpJhیŽzš˜ägžâ—`#Ķŋĩ {dc ¨‹/N@čIâœWĖLŽŖĄD8Ü0;dTEp~^>î?ũtŌ€’c‚8ũ)ŖænHUĮ$ iRŸtŧsŽ”ŌT€Bäū*ˆ˙ŦeÉÁë‘ÅE PCeYO<õĮlÖ}Õäv—pYTmį;ŽęEbi†e„,ĄŲÔ,`īU]ŲķxĮJg8G äAöŦŗĄXĢJÉo‡Ũšˆ‘—=ģŨŊ;b´‘#ļb‰B(M¨ Î:Žš˙?<„0;‰'q㚉`U†ŌĢōøũ( ŒųĀ8=qôŽĮōˆt܁†:cŸūĩtŸ” /Pⁿ Īá]îšig'‡ĩîŖFÂōoáÚģüÅ|œG=kč_l:c’O€G­xžš3¯E‚Gī:מh¤Ij›z3‘Įnn@y'åČÅ)ųđ[$“R.ŨĄ€ëÚ¤$ :â‘Ü*‘Œâ6Žq۟æ&Ļ Ķwo|gōĨų¸#†ôŠs“Î3뚈˛’:g°§ÚNNir¤€A< L‚Nzu…7 œ‚'°â›œ6=ąAĀsīIŸ”į‡žsČ1¨ÎK‘ŸlSdnû¸ī@t#Ž=ŠĀá˙úŨé22yéíA9Čč>Ŋi‚ &ĐzņéZBįÔ×%āíéõĻ–(¤ã;rqëNŨģæŨķf“hR9?Bsũi •ÎįĨ5ÎåÉų€įõSÆáōŽ˜Ĩ  ČėqŸŌ˜Ä 8ĮĖpFęcC(b;ķQ3ļ9qœôûS$?( ß:ú QČ8L60pO¯šôĒŦpĖōpŖ†8ô9˙õĶ<ĪŪ„ā:Œū{SXėl=I?į?ũjdĻ@Ŧ9Luëžŋ‰ĻoR¨ŦØęH<z÷˙îãWƒâŽ„ZGš šî`n21îjXnVHVD‘22APiĻę&”":;•ÜT8'J ÄHB<ĘŦįä āgéKŠIägEJJ•ĘŒjäĸņ&ĩqâMOHļ°˛‘Ŧ1‘§ŋá¯/ˆŦįėīo,S43D͸+ŽŖ#¯Q[>n1͝nĩSSÔ%˛ŌîŽā€Löņ´ž[1@Ār~lqžÔÍ#U:ŽgåųFâ!/–;r3ŒâŠÛëōÜxžëFkeŒAnŗ,áķ¸1ĮŨĀĮįZæl/<œu#üúĶ„ÅHw< “Íl`uî)Æ@¸Æ9įÖVŊâđö•&Ŗ-´“ÛÆG™ä•Ęä€:‘ÜŠ¤ū#™ôÖŊojfŅyšŨe1ŸģædņÛŅGp QŋMĀyíšaģŠ;…„¸YK<3y wŒũESļÔZįQģ´kK¨Ė ŸŋhöĮ&áœ#gœt5`ɖ\‚āđsÔv§yčpĀƒƒúqP´H^äp/ķīLPĩËFŧ:Œ˛ƒČÎpH:ĪŗÖ#ÔUäŠ)ŖD‘Ą"hĘ*yĀ=ēTâåĢG;Ôr\F˛6r•ÔbeWŪĮœļ\‘Æ{Ô2NŽå†YHČmÜq‘QËq n8 d âĸk ŌĒ͓€EJ¸dŨ"€p03ž9ū•‡GŦšíĀ}ôÔ+”ČšÁā.:‘üĒa)XŽq¸đsĶ5įŪ4ļĒXãåí͌~\WSđ…Gö&Ąß7ãĸš3øJ­"Ī͏}ī^g_HøÆ4:SŒ •ȝĐĀ]v9ā?˟īuĪáūîsj„ąn1“WҞ{ ņôĢ;‹…VÚ9įß4ī0oÆĐrycۜTæP€įîĮį7úĨ™øÅa3]ÁåĮbĐŗoVMĪōŲēqôĢū<ŧˇI|9ĶÍ^ ˜3€v åųė3Öŗ.%ûgŠŧgmg$fæ]9c‰#qšŨc îÔē ˙‡u;ŨRî}RĐĮļĐË7î$N [hUëéŽ9 yÚl oMąGxWįōüÜēäsŒuŖâ‰mõ]ÇI–3r×°5™Œd¨î$vP:ú`fēT_ XÉ4úövæÂŦ.%ÛÎŪK`ž™ã֏ߨÚęž(ņkÍ-”Ŋãė÷2EÆįĪÜažęīôÛ[hļl“É쎁dqÉųí9ĻøĸM'YđęBWJŌžæg–h"EE›`Ä2•¨É2{dQ×RÛOđ߉ntVæúk \Ė… &X)ÆÅqRsß'ææŦÚsx“ÁĸÄ[ųA¤1yX˙VŒcĩPŗÃÄ+ ™ ĀÃŽ÷'õ ]#Āö×7Ãi%ĻāŌ(hüՍB–ÉÆFN=Č̚†™§ÚxÅ%Ō]‡„Ü4+Á.ÖåqĀ'h8ĪâŠĮamauā[‹[hḙ@–Di3Îã߯ZąĨAĻx‹Lņë/] ŲRáŨ”<§äÁ=cŽŲŪĢŨŦ~ņ5Đŗ´VÄ6A- ‘gũ#ĩįpfĪS×Ĩz™§Ûéz]Ŋ  @gŽIĮry>渋KĢŋˆŪ([[ų,ȎÜ1‰ũØūđ8ééQx¯Ãļ:ŖOÍĖldiNéÜ[āČė*Ö§ckĨkē&‘4Z~§q<׊ōŗyÎaXąäÔwĒZ¨ūĮņ¯§ič"°›C–æKtâ4n]Āt^c9Ē3éßbđ•­Ø=ŌęĐĮ„ŦŪ`fQåíÎ üŨíõÎĩÕäēŧAyĢŊž$U=  ĘĨŌ­.o4ũY˛Å ō帘ģ7ž§‡˛Ûy'8#€*´ąKsâÃ&Ĩ¨¤VqDđ$WNĄÄÍ‘Ī¨éĶÛĻ †kØ4o j§Rž{ģģëxĨß9(čŲûŊį=ÎkēˇĶĖzåÖ ×÷n’ÆĒļŽßēÔv'Šü1>$/üPZ‘éŸ(ãŽx‚–Ö|čējCjŅŗnH­YË ›†ķ!w9ãžŨk;ÄÚĩņ­;]Ŋęi3[Ē[ŪØČÛm%äuR7grž}MHËßÄø]JcūÉķUĸ•ļŸŪĮ=ôĻļŖĒ.ĄãS›m„QKnÅė&6|ˇp9Į|ķY˙mÖbĶŧ7~ēäĪ6Ĩ4pK‰<ĩšČûÃÜõôVŽ¨[kZū™.Ŗö˜íĄŽh&ģPnĘOĖT—8üCaŽ]@ĩ7Ō]ĨäRĨ˞FNčģˇDvŠ#$ŒŽĮ|šg‡aŸūŸHú­Ãy3"b@Œ$ųų‡'qŌ˛Ÿ]Ödø|úŌßv“gō—æRáG8ĪĨkA>ŖiãĨßŪĮwöžz~ā'”Ḟ8îMeIâ-JâÍ5gD’]@Ųĩ”‚"õ8!‹÷ę=+¨ÃŠÄČ9 U[ū۞™Î=ņĘË Rš œdĶ=út¨%Q!,pĮi'x9öīR̰ķũØĩ.åtĀƒ ~”bdÛą8öíQyq(Ų´2ķ ŧ6iV­āōb*0#UųGĐSŖ†(3É ¸Éü*ŧzm•¤’ÜÛÚ[Å,€™$H‚ŗũHš’h„°•—c#)Œš9ĩSļŅt‹)ŌâÛKŗŠq$ŠŨU†x8 gĨIĨé×ū_ÛŦ­îLgåķĄW۟Lƒč)ŗiÖw6‰g-­ŧ–‹ĩ|‡Œz:z}(M2Â+3g•ŧV›HhR0“ōô įšįŽü!Zî•y¤ÚØYĮfí#ĒĻÃ)aˇ¨šĮ^ĩĨyáíöōKģ­:ÚIäR­$‘Xcūf–mHŸO|ēuŗYĢnXV [Ô8=z{ŌĮĸéGMūÍK(EĄ?ęáOÔwüiN‡Ĩą´˙CLÚqoÉũĐ˙gž?ú›sáŊ"įP]RM2ÚKÅ!ŧÆ_N‡Ķ=9>žÕ Z^ŖwâģÔä˛{KIė–o3$mĖ„ņĀ$qÔķÆ+uԄ?1˛,´-.ËP–ōŪK™8y<Į&N?‹'æëŪ—VŅtũn8ĶP‹ÎŠ6ŪŠæ2Øëō‘“NŊŌ,o­ ˜ĖąÆUŖ-#o‡Fā}ķž´ÄŌtøÁb5ÂyrŧÎd.6å‰ãņĶ“ÅWĩđö›oöuŽ&dˇ; IgwXĪ@UX1ž=;SãŅ,—U›SE&ōuČ^W ¯Ļ ÆŌŠXøCFĶî„öąHÉæĮ ™š(ÜBqžzö트ž°3j3fq& ĄnXLNđ>Qôã#ŽÕ]ŧ-fö6Vb[‘”ÂktķFceâĶ^ŧŋ‡PuŽéƒˆZaŋiPÄõĀ끡°ÍPÜ'†ƒũ°ŋeyCî6ŲoŊģûūĸĻšŌī“ÄëOwĻ8L"€ã’pKņ’8úûfš+.Ą&îÎúå56ŒSi[Ÿ{•iX pX‘Į§Jī$RZ4GŒ’yÁ9§~õ ĒÆ˙8ÎÎë×늉âc–V#99É ûzņMX3a•Øl?ŸÍ‘ŗ´)ČäƒÎ3ūŪ•éq#1ÜįŪĮ?¯ĩ;g˜ųsģ#‘à Ky{Čq‘“ęúįüķ\?nKęÍ`@2:6Îģ„;ąup~Öp?ā+\WÆų­ŋëÅ?ô7¯;¯Ąž \ėˇ@~\gÛüô¯ ÖWÍ×(IC˙ŲuČĮâ?‰ôĒúmÎĨy œ-,ō°TEúŪõõ5´gĩŠØšcj›‰ëÖ‚ė#=€oķšrI´*ąŽIūŸáÅN6pIRķÉĄļŗ<íί4˛ )GĄ##ŠfĖqÛükŸ—Å"?Gĸũ–ãg2´‚nK¨\cø~öXņœVfŸâht_ø™5 ›Ųí xZ5Ų$Â%ØKÚ2G\töŽĩõí8iö×BRđÜāÛˆŅ™¤ČÜ0 nö‰Ėnތz2°~UÍüDŧŊ°°Ķn4ûé­äšö;gōØ`ĢėG^:Ôo¨Ūčž8Ķ´ŗŠI}gu4w! Á´ŋr¨āãúÃfׯšũÜVv—ë%ÄŽņ**?U=ŋ"zāã4æņN†^0n™cy<ĩ¸1H!g —nÃÎ{ö5‰?ˆF‘ã}BKTs`ļK,q2ÚÅģ8ķÉŊt^ŌgŅĶVKȚÅūėšã9cŽėņŒg5æ¯į‡õItë֊æÖs˜ļŧ,˛îÆFqÜr:V†ü[ĻŨiÚU­îŠ ę—Ģ2ˇœöČwg/^jįÚžŅâ;˜í5¸$HíŠ5Š"ŗDûžų9Īļ͊įôÍnīQđ ŊåŪš…ũ˸[Š•1ōČFœƒš?‰´Ø|E%Ė)pc21w ´’ĄWũæÜN:ā{Š}„îúÆĄZ ¨ÆRÚ0ģíÎwĪ$ž•nÛTĶ5 ˇÖĶʀąHå ØéœøSĩ´Ų.…š_ۙ÷2–AšˆûÃę&¯+ 3m8Ī'MVˇÕtëé Z_ÚÜHœíŠEvQë€x×9‰.u_ŨiúuΜ!´’ķļãrŦ¤É°ƒÕGLČ9öŋâŊCPŌ4)/ôÁ–"šŠhØų™` `ķīPčēōx—Cķí-¯Ą;n!š2Ū\Á\‚G\ĖVt;ë›Ũ ×Tŋ’iĄYą•TR3ƒ’r}øúUčįļ¸Í†dtč|Î¤qŧĨOĻīķíIŋ|›wŽėįäŽEdÅŦO7ŒĨŅ^Ö(áK1:HŒKŸ›hĪLwõíĪjŗ¯jShÚ=Ƨ´Sųyä+•îAÁįšĨiŠø‚÷MƒRƒK͌s²¤npäõxņükrÚéîŦ!š• $jÆ&ÎTßÃĨ,­„8Psœ÷īMeÆ÷Üē:ãņĻ•]¤‚9^ztéUāžæžŌ;×ę¯"'CgŸ}§üšžEÎ üŧûŸķüĢ?S¸ēŗ´–æÎÚKŲ `Â“’_aĪ5zRÃ÷hÛp#‚Oūĩgtč ųˆũ?ZŠx$¸b̀†Î{‰ũ*,JØ,ęÄpAãžN?:ŦōȜ0lˇ8$õāg§ĶëM’vû4jSĀ=9˙*‰ÚXˇfųŸņ3MŽyŖ„Ŗ1iBîÎ@įĮ_zq˜ÉˆBä3Ķ'Š–Ũd„™ļãԃ€NvôtéM.aēܨ'ŒwíΝ~ž”õ”ąÜ­žŧ {tôUV#,÷ž‡üö5æū,!5i°\dņĐ ī>0}QPz]dĒđũ+øĘ¸ņŋũy'ū†õįuî^9%ė$mŊ‰ĪĨyĪ…QfÖD2 ’ûņē†VĮLƒÁ¯hŌ47LRöZ}ŊŗČ6ąŠ5‡gŽ;ÖŧĖÉ<‚ÜŸņŠ n0  ˙Ģ(Vxūd<ˇ¯Ķ5*ÂƊ“Į (õéR,C=Č=[ˇ¸ĸMßĀO$c¯ĨBĢēS€AČŨīĀ˙ä/Ú|T†Yb¸1ĪĨˆ#d…˜4†lã qÉ=ëT-æˆ]øîEŨļX€„”?ŧÄlŋ/¯8zZĪæÃKđvŠwĶéÖļōAvŅn nĖ ‚˙õÆ{?-…×Û/4Ģ)Ä77]Î\5ÃyÃķ€03î}+âlÖ¯§i6’ēŗhÅ,‘õ" G§8ޝOĶtm.&Ŋŗ†ÎÚ<ŊĖapÉ×%ûŽõĮx_:…üQp†ę{ģļŒ+ažuÂ7¨ÉčjŦ÷vˇ˙ GP§RXŖĩ=&Ģ÷:öŨŸJģ§Ë‘ãë‘Ē]GlF™ f`‹)_ŧA=psŌŗ•WCĐdššÎmâ-Ŗ\ÆB[FOË)^áOŌ›kp“j~7Ž+īļÍ=ŠB“>!|í @$=ŗ“S]ĮiŦ|5Ņ´›)`›Q‘mÖŒ‚ŅH6īcģ…ß“īŽõĨc4Kņ;\bKÆséÉīôŽP:ƒ*ÅFnv‚Xuķ‰? ŽĻkˆm>*+]OҰŒėgāsÔÖ&ĻĶŦ˙ ˜Ėĸ;PvõÛŗį˙ĮwVϜt[ûíöß\ģžģ„kk‡ta— šQUs’:qÉÔŌŧí"įG-OCģē-g.q=ŦŽ!€<ã/ŸĮ§ĩž#5Ü~™ā `2 ē ~o+?6>§h>ÄĶ|PąÉŠøRãO`nEęˆü˛9ˇÛ™:u] ~ŸáՍŧcâŗūmē‚ããųæ¯xĩOü#ŌöŨ=ž}9™+ÄZeį‡õņV‘@_ø˜Z/TîūÄwüũs[ĖoŗxŌā“ĻĪī•šGDĻ0Ūŋ1ā˙J—RŅĸŧņÕö›a-o´’÷W „|tÜ8ÁúûĶ<,ĩâĶíg˛…dđú¸™|ąƒ8%ô įÅ´Õ=&Ę [Âđk2ęļđ]BæyŽÅ°7 c[vO \ré[öśâáÆqĨ¨‹æ´Ė1ž=ū¸ũj#tŽ€)6ãē‘Û“ū{V$!´š{ĢfYĸšĩ‰e’OŸaįpÆC;gŸJÉt….âsjīąŽ´žZ6qķ603č}ŗI¨ø˛;OZé1ÛŨČšI"ˇwĐŖžŧžƒ×8‰ĩí+NÖõ‹ģRũ’‰.mÚ'h­‰ČVPŋ¨ãŸqZrëÚw›d Ė>ŪrÚO›ŋ?/ËĮ<ãÖ _éR]Įkö–iLQHbqŋ?*ɍ¤đzŧU­T^MĻLš|ĸ‚¸ŽFįa?ÅĪ\W-ŠIĢXøŸCŌĄņų‚˙Îķ‹GaąAO—į[ö’Üčé{&ŠĒ‹bSėŌJĢŧd`ŽFNz2zRéĘ[‘w˛[dÛãu1ˇûJ@+øRCâ )ŧĨ[Å&XŒņđŲdËtéīPč#´ņ“Ü۝ ;„ķ´1 ܎3ŒâŗüE¯ŨéŗXiÚ|ËŠ_ČV;;#AË3ΠĮLÜŲx‚ĶMškjK›Åˆ•Žx#ģcøB€AĪL’=sZSk–6Ņwsŧ†%ÆōeÉ@3R=ũšGo+ŨB‰s´ 'ˇ×9*ģëÚ<ąI?öĨ›Å#‰Đ„$đ Ž•:_Z$1N'ŒÃ&6Hd|ž6ž‡5Z•Ķ˛[\A+Fû\DęÅ =đxŠ-īŦŨÄBę1بA*–$HĀ<ũ*Ho­Ĩŧ{e牧3Fné֛%刐Á,ļž{ļ7dįÛęhûE—ÚLāųfJî‡}*¤h—Tē7‰hր ļ( ”äûÁ÷bŦ!´U•7Dr)¯\gĶ­(ˇļWw‘cįũĀééíÖŖ0Ā$c€ Š$*¸ā˙*& †_™¸ŒíQŧj™ €@Č 1ž)fF$ntā˙úĒŗĮŠØQHåˆÁįüŠ‚eƒ ËąHbc?¯áúS –-˛Ž€đúÕ Ä˛2ŽFÂKžâr1Ī_ĀSū]›Xēœã;¸ĪĨQ“q›Ė€ņÎqß ÔjJMûԌéžÜ 1NIA„'UųBžŊJ˙õéķFī €LăƒōõëJģR6Š-Ŗœ¯Ūã¯ųõĢ ņC*U“,Tčz~DSüΐ”aNAĮ^ŲīųW™x•ÄēŨˁq–<́^•đo#Ãw¸˙ŸŖ˙ ­qŸŋäsˇ–)˙ĄŊyækŲ~#*‹QČĪŪ¸īĄ}d`žo­{•¤JđŽxیägd Ģæž2UFriÍې:sģĮÖό•c…ÃpîäZœ¨§^HX;‚<ŒnÄSƒ<ôāķÅDA28š§Įƒw3R"e‰@{œŽ3Iå‡}šû§‘ÚžĀmŲ—Ī÷ŊÎkÖŨĩŸYčĪŖ ”ÜÍp:ĢJ l@øĮ{=2uŦ?éSč^!ŅĩŨ?ûSRšŠCņ˜Úf0äeF2x'ĢJšäš7Ž/u­o$Ķu[hL3ÅnîQck(”œ“Č˙ëeCsaáŋČē]Æûmä>uĄ.#÷ĄO FŪŽ ĢÚĒ<}u65)bšĶŅb¸š‚AærÄäŖ@=:Œähwļ×_ ˙ąâî5 ŌXcˇXÎâėėCsÆŅÔˇAŽš­p?áņž…ā‘ãMY¤°ÄŌo”0ã€{ÖĨ°ļƒTņ¯ŒmfÜÖ÷‘A D{_iõĮÖĢxkMÖnô˨n•sĻÛËĻŲČŲl˙Ŧ0#ûZČŅgĐî´ģ-*æÆū]rĶj‹ &œ*Ɯ<íAß8āgƒĐú~Á‚0JãÖ¸?jÖKņÉ%Ü(-DūvįŒ˛`ô'sĮ/öKÍ Qģķ˙˛íîíM2”,›Už^@==qß žĨákhuMR2{9Ą uq3;ŦíŒĀsķgĶ w⡁ž=\ģĐ5 ĸîHRKW3o& ō˙d’xë’zb¯ü2ēŧmfŗŠē€Čf‰[æLČÄnŗÛ=j¯‹á:g‹4Oē;ŲÛnˇē*ĨŧĨ`Ā9g3sė=k¨—\ŌáĩK†ŧ‚D“ˆ–ŪŌžÁ@ä“í\ī†'ōüCâx5°ŪĩȜ4„eíČÂQųfšT˛ÂÚ3ÆŌoЎŽA`bĀp{O¸>õŅZZYMņ3XY-­ßmŒ`ŠzđzûqôŽf+x.>øTܤLŋڂ"ĪŽÉ&ážĀŒgé]-æ‘g´„ĶíáŒiūŨJL;@MëĶŽ?éTîã’NryÎIīOši××Ļĩ=ãTHį+=¤â@ŋІPôã€ykGqĨj~lĮŖ]jÆD¸Œbkiü͸ ö Ĩ~Ÿ\UJItÖņÛiŠä:ĩ¨Rãj°!ČĮCÉ9úšĶņ%ĩĨĻáÛ­ŠxŨã]ģ‘ÃeIAīøûÔŲeį‰|b—p,Š‘BčũÖ1X\÷ëÉõ­ŋ3ÂzT˛|ÄC´–9ƁëŠčYâ”2Œ0GÁ Ķ>ôŲĘ’Éķ °=˙Īô¨Ņ`éČ^˜¨'‚@ §8äúūCņ5Q@ˆ)SšÆF˙öŊOįUį…ĖGđ–$zĶ×˙ÕTåˇ šč ūĶ€3íĐņQũ”ykģ 9ŽOcúũj•x˜Ŧe˜; äįÅ@ÖÉæG—U^Đ3Đ߯-ŽŲĖŲáIãЇøņV<9œn#8įĶßŸŌ(Éà y{?ÖŦŦ‘ą…˛ÎOĄ=1õõ§0‘šä퀤ô_ķúיxåÖnpccķ¯Nø<â›ģ8ãímøüĢ\_Æq˙œĪ6I˙ĄŊyŪŊ›âP lÉįŽĩĘx=ÚŠbHÆ=M{}ē˛Âŋ68Á=?XVũØØ’pß7OZ“´ ų‡Ąë˙ë§($/Ė@öįÜįSÆĘeãŒ~ķŠPĸœä)ę23ŸZ%!ÉUf””–‚ĀHųüúSŗ"ļIQÁüę]ĮrîĄĮųüjMĀƒīQ’>đl‘’{SQ'ŠįÛ­FÛy'ƒ×šz´dē†û§ęũt€)/ąēLfĄ¸ˇīJĐŗŽß22ģ—>›˜ŦũÃđxoM[k›‰íГĖT”ÉÉÆÕÉĪ\֘Ž&ØF¸?įëM‘# U€ČÁÆzœTgfāG§QMmĄļí^9Å48Ÿ§åO1†xž)ģW=úįšo’ŒIĀÆqH‘$ln€â–›ēÎHĪ­#–tįŪŠ&›g ¯-ĩœÉ/.éRßR)—zuûÆ×v°ĖČŲO20ÛO¨ČāôĻ^éö—1ŠģļŽā ;Lą+•éę?Î*šđöŌŧ‡Mŗ.r]Œ “œƒÛŋ5•­xVŪúÚŌŌÆ+K(`ē[ψZ‚˛°ÁZÔ˛Ņė,Ŗx ŗˇ‰eMŗG¸ &}F:vįÔԖZeޜäéÖVÖģņģɌF3ĮŊ$: ĶßCaWŽIi’Wõ ‘Ôäæ•ôm-f3ޟ˜ČfŪ É×yÛ=úûĶĸŅl!ušŽÆ “Ī$ä0õ|tŨמ´ÔĐė`珒;d‰îr';r%˙{ž{õõ÷Ēöú%……Ä/’(‹qŒŗ1g¨@NžûqQˇ‡ėK˛ Ũ( æždį€NīÃčqŪĨŗĶ ĶmVÎĘ%Xąp§ŅrN=)DQĖ\:(lˇËŒ``ŸÆĸš’Åà I$AĮųíDā¸*˛mÉ“ĐzgߚŠ]ĘXHĮw|}sĮįúU[†Ū"ĄXōsž1ž{zšŽCāLYÆųąĪˇ­WŸ{–ŒJ .F3Čî?˜üĒVSšÚLg–<Ÿo¯UVķ$—hʅLžA$×éMWŸõ™`~PĪ××ÁāĶĤĖK!Žqœ‚?Éũ)ķ¸•×¨ŧrÜč*XœœaIČĶįŊOÛ+ĢŊAĪqŒu5aŧ!‰ņģ'ž­ywˆąũ¯q´õ§ŒôæŊCá†đĩŲĪ?ln˙ek‘øÁ?‹íÎ ˙BNA˙më€û#t×°|NT6a$Žs# ŠÉ‘ūuívđ‘6 púÕĸƒP¤ €?3Q•ØĮyûščŋåN‰I=3RȗĖRy?0Īđí˙ÖĢ ‰ÎNHæ”"ǎsŸÎš,{vö˙¯IĩOÉĪō§ĒuĀČŒŽ îää0sœŽiģ|˛q¤įŽsÖ¤P ąW;O_~jX€Ûrŧ‚zū6vū•‰‰ß¸†ū÷šzŅ?Z@O*‡åÎxĒ–¯¨Ļ‹§=üË,‘ÆĘ qcqËHHīQÜjšr‡ķu+HŒ<9iWä%°į‘ÂĄŋÕ-­l Ŋ@na•ãÜŠ{…S’@#$w§YęŪŪ߉2Ŋ¤‹ŗmÃĄž^Ob:ÔVdū#˛ļÔΟ$WŋÚ#´įfŨÎĨ‘ŗģ$¨Æ21Vãņ EiĻÁŠ*´ŽŸ;30\Iįnāzr`Ôė.Ō-¯`q+2Į‡ŧ+×oŽ1ڟöĶôYŖķÜ8ĪnüЗ–~_˜.ĄØÍĩHm'ŋ=ųâŖ’öÜ_Ļæ´Ē3WąÕ%Co;!Ž7pRą¸ Ø އ­I&Ŗi ņˇ–P’îŒm*z9`œã•?Nõs ´y …¸‹…!”üĮ†;šcņŠ7ļ|ŋ˜įŽœŽ:ĶÍUœ>Bq×vãŋįQÆĶ;Øo9§ÕŲ™GRW‚8ô¤T1ÚíL€AĀāŸį×ôώ–‘œŖŗ‚Ãˇ5XoI]„ŒB}ÕeĪ<đIüõæŖ;ŋ  pWƒėaPÜI JmPq¸lwīĪŌĢē2Ü9eÛÂį'đįRāīŅéÆqÆxëū5"$Œëģ§ÁÆ1ÎsUŧŊ͏”apģp= š„$rFe]Ø'q\Ûü˙…Vįcr­Žƒü˙*tjŽÛy›!Į9ÆOÂŽF ž7…ę(%ŗ“‚sĶđĨ“_!Yr‘Îsū}ęi!|Dlmä'9Ī'ןÔĶÄrĄ$žŌͅlįȝ0ņŨĒ]0bÅĻ$œwɯRøA‘á[“Įü~ŋū‚•/Œü-&ĩ­ĨÚ °ųŗØ’qÍápŽTÉAÁäÖ×ÄōÂŌ.˜'xŦ/†Éžū`@9ô˙8¯i,JT`ÔTĘÜ.rHVĻĘĢ3ycÆq֕2HĻ1´ūU8@Ŧ œ`‚(rŒãëūzŌ¸‘÷NîĮšc‡”Ž0žxīNPŊH'Ũ)TÚLg(~SëĮQƒūķûĮŽß\ÔX;‚HÁËwÉīR|Äg39>”×ËG'­Fŧd1'¯>´é3‘Áô<ÔJ]ÆJnß7JhĘä‘ģО3ĀĒZΚھ™-“Mäît}ÁC•ƒ×Ô Ë“Âī-ôˇ’ßČ]äI>x÷`$Ūj¨į€O~J7‡Oö-ž“įf8gYKŧ†Û'™Œg'Ļ ė´Y4ȩ̈‚h’ ›9āŽŖ-›AĪ…9ĮcëÅmo°kW\´’G;[ˆ‘á[rIõ\°ú1ĸŋŽx.D ˇEää*Ä_ŨĄ{`u¨ė|'-´°Hob‘#DFís’4ˆWæā‚Į'×åƒÔ˜Įųô¨Ú+đŨLã 6ËéŌ’!v˛|÷>iįĸ Î9īM ¨É#nÔ@3n?ĮéųŌËĨķmԁ\ā“nŋËéUŪĮpú)PrM°Î8ã¯iŲÔR<ÉxŦ0pL889ëN_ĸ{„ õ>Iã˙ĒrŊÔ‰Ž SĶQ8?ƒ{Ō3Ū¤ )šœāĄēŋĮūqP™.ō͌įjĀ÷é-ÂÆ’,GË##9ę˙ėÕy$yd++>O%p8õ5ÎĨ‚6ާút¨D°1bûÛ˛€1Ÿō*ēĖ›Y—œü˙1PM#qŒĢš62GN3ÛĄ4ČOŸp‰‚Ó—ė8˙ ļŒZVb¨8Áįę1͟ÃԐJ“ÆÆŌ¯÷ûŒsNĩŖÆ%° ›A;˙‹?_~´đĘ7WwV힜ûž1ÅyFĩ)}JíũfūĻŊcá?ᜑÖņú˙ēĩŽ´ŦûTŖiėzįü恂IÛÎzĶÞ9ôŽÍå† r3‚{RBŎoČ(w ĮŋŖß¸í\˙ŸJa”§œäˇáH¸ķ6¨ĮĶüiœ1ŸR)­'ĘÎ3œp×ü♠îU‘ķžŧgžxü*`ūaŽÎŧpOąëõâ+ŧ+āĪ\SJ+ $1+ķ`ž1H yA~lįcˇ?âiëåüģs´ôĀĀ÷žĩTL~Ķ&äۃ•ę9ũGåRÍ.Ė.1žqŽÕĐ)VŸQ€8ūtu,AčG ƒĶ5¸ŒÉåF˙1į cžĩJéâŒģ†‰Á?(ö˙=ŠĻhŪ6$įgEōÉØp?˙]V%e ŖæķÅ1žØåãG=ąž˙Z„H]ÃH#pĐķ˙×ü*‘Š&a1Ø­’AÉ<ņÎ8Ļ:FZ=˜ƒ÷=ŋɍEÃa•W7ƒžŸĨSr’0WÁãüķRۅ’MØ]Á°rqū¯ŌĨUŒ4œlā¨ū§ŪĨUā9ųČč[ŋ==ĒŅ*6R2ū?áRl T—8\m,8ĪcíÔ~uäZ“y1$åœį#Üׯ|&]žn8k§?ĸé\'ÆËã8†Oüy§CūĶןįÜײ|Msö s“Į5™đČ~öā‚s‘Ā˙?Jõ ØQ´žāã§ãKæØķĪ5 •fŒįq#Œō?zl,ģŅ‡ãŸËųÔėÃ<)Ī÷ŗĶ?LΌ>Ņžš˙MÎé'‘ži‚&ÕäöįõĨ-ˇ÷™Û‘ÎīJhšÚÁ!A@9ĪĻ)VE€Ī$qøJR͸gĄ8Š7Ē Ú¸ÁĻd%Iüigå ÷@ü˙•4IŸ™HË ōzũ)\…NãŠŦĘ#˙dq@|šũv¤YJžyĪŌĄvÛ6##šš<œûRdmÂķŽGËH¸†<É R–8Î=JO12ü°ĮCNF [nA¤fĀīĮŪ÷⛹UXäO$öõĨ.Š™ūčä`“Qo ŦTÚsĮ­5˜€ži­´c õ<~1|Ŗ?d6¯Ođ4ū ’HäįëH˛„„Kg¯˙ZŸ+G´¨^Ár@Ā 'Tܸ ŸËú~´#îŲ…PĪOįL&v *–Æ~÷#=>ƒôöĄŸ÷‡s,| ŽH?áĮZ €g”n2Ũ9ĮŌ‘ČĒ„(AęŋČsõĒÅcĘČ\¨ FīSô…BāȲbęIÚs ˙רö•&H՛qčG§Z¯ĩ¤Ŋ)<*œŸĮņæŖēNķšļ¸Č äņđĨWž '2ģņTäepNjâēną GN^ôãīfrÜĪ>Ŋ3ūō-LâîLķĀú×ŗü)o‚P㆞CĶč+Îū0gūDÎ3öD˙О¸ öO‰šūÎAĮŪCᚮéYšąô˙8¯YPĨJđÃŽOĨ+(@ œ.qš“af  dúƒ‘OTC1aR"Į ÄrP*mĒX0õ˙>ÔŌ…|ōzņLÉ^qŽ „ƒæ#ąŪ´Ļ-Ų8\g'ŽiΆ^0Ø1“ëŸķ֜UŧÅ AėGAüé ÄB<`1“€*&]›åé×§aN  Úsū{SvœķØz˙Ÿj{!sÛ#’Ų擐¤íųģ‘ĮŌŖ%Iä“×ĩj°Č>ŋĪ™›œzŠa(x2 ˜4ŧq@ØŧmR@ĮĐR\…öÎ?ũt@1ˇëß­.ėW;ŋŸŌÜuãÔ9ÚČĪO\~5"î]Û˛IãqĄ0ę6œįÜÔL~Ođ¤Ān<9ņÅFģėˇ$sØĶÃ#Į°ü˙Ī4ŨŠąģŒtãęhc MŊpyČīõõ§ߘ1œp 6Dœđ=ĀįĶ¯ÖĄxnŽ›WoLmĀ˙ĮZA G\3Ķëū4Ī(0*$sČõüh‘!™N@RAÉZ‚GABŌ0rÛķ‚{įđ¨lŦąÎ>lOå֞Uō˛)ųŗĀĪ@['ôÅSž)Ā,ÍōŗuÜäū—I~ÜāŒšüęģŦ‘Iįh ĀĮ8˙>ĩQ•Ņ%\—į$įœU‚IōÁˆÜĒ dÁ#ņūT*8‰•IʅûÄđ=*ƒ‹‡•Q€Å†Nx,=8éR…”Ē„@Ēäd˙3ÉįŪ­( š“=מ1˙ëό­ŧÃĢāg¯N}yĢ`fAĩ@Al“üŋĪÖŦģų“  —ūĪõ¯#ÔĀ7Rcūz7éÍ{OÂĩ ā‹r9Ũ$‡žß7˙ZŧÛâūá6Æ>ʘãṸ¯_ø™ŗ!õ<㚨>Gž9Ŗtõ¯UŒ“ Œđ>´3íČÃߟđĄĨā0em¸'§ųÅXWRw3­ÉëR†ÎĮ&žæÃp:}Î)IƒƒƒĮĨ2\giƒÉĻ/N98čéRĢ}zS”“AÆsJ¤íúŒσ… @Æ:T[‹dœíĪ ÷ĄĻPOôŠĨĀÁéĮ­ŗ¸ķj{6pzw¨ˆFMŖvG9üiŽĒĘrIeär 4ĻŲy`qū~´Į‰AÁÁ8Æp8¨ãA÷|ĪĶÛ˙­š‘RũFb–EŨÁLd9ãëëšleʇH<…eĮ_oĄ…ENÎĻ\¯UÎFL};ūuĸ!ņYéß9#ô ,ĒĒGų†O#˛ū}i?zĒKWOĪëUå’OŗÆŪÁ$gîœ~­2o9TlWļ6¯6:ūŋΊ8šhX+˛– ČíĶšČĮˇ?ŌĄ–IB˛:`Ž~]¤ûŽi‚åö|ŲgÁBđ~Ŋę7ĀBęÉ888úû}jŪņ9v>gđācĮLĶ’`Ō0…ĀŖ6‘zĘæÚhāy"xŨdfuQ…$“œvíX)Šø‹MXė—wôø¤xäōŗåv€āîXԂ?ˆt­›ÍcT@ŗē†ĖËs4Ą1m.2~b¸Ü8Ážr fÅâ?Í ˛Ļ‡°¤rĘbx¤ ōmÂdŒ;›Č!xôęzĮˆ'°´û-•ÕĢÉxQŽ%u( üÁNYsĩNHĮ=M âĪFЭΈ#C ŗ*ČB=HĮđŧ8éUĸņöĒņĮ2h’_“ž[žŸuĢ2ëÆúÛŽ "˛š ęnJ`ādōŋ2ļx'ûÂĩOŽī„QėP“<`Ku°¨‰ķaI/’@3Íhßxšxô-SHrnŗ$–æP:Bī°ą Ęxū•˙Šn-ô 7S†âûc2°•Î#˛29ûÆ㚧 xÖãTģ°´{$JĪ*Îd*ą*?0ʎF;ՋĪŊž­qaö(¤h]7ÚpIcÉų>QûîŧũĶY×~=šˇœĒ؅ōÄčŌį!V\¨lpÛĸ89zg„>>kdē3Z1°”FJ‰] zœ'$g’8ÆHÕŌ|iЧęwKk,bÂ?2EV XĮŽœå_o^¤x–ëY×ŪŽ8íĄˇg“p.ėâGO‘ŗŋ'\sU.>"[A`&‚ÆF•Ą2ĻdRŋp° Œp ãqœfˇ´]r=TΟŧ/ō¨e…‚W+÷ōTŸÄ×´/oĄąŗšîfu†/#m-€9'ž••Š4ë–ōDŌųģüĩķ-¤LļíĨFTdŒŒã§~*ĩĪ‹tõ’ŅāKm!e–a¸yAc2cylģFGõņM“ÎbDNŠäɆ%ؚPWn21å5ZÔõ84’ŪK˛&$nX Įîƒü!áYÍâxÜpBžpy2Ã+Í ÎįũYäšôĢŋo'F´ŋbbŽTYĨį;ŽãÆ9ôüj›ø’Ã|Ģ,ģČYVW_ŧ˜HÆ8 DŨĨ>M{OXÜM{ d+n;OI?M­Įû'ĐÔÖڅ´ĶÉ3,“GÁI'*pwcĐ˙1Kũ¯o­ ÄĐÆčĨÜ3c rsíüŠģ`ėíļĨžöĒOŪÛØúņõâoĢAq:ġPĖâ%lq–¸é‚Ŋ?ŧ).5ā,×7à )Ú;į$û Ô+­Ųíųī R2ÜŽšöoʤTŗ’ęXḆič‡,œã'OŌ¨Ũkö–r‹ync:Ŧ€°ũŪāXg؅?˜õŠFŖn큿BdP§nņ•$ād~#ķĒWZÄE$ûâڈfáÆæp^ôøîŌę4û¸b@1ļsŒ˙#T~ßm<æ8Ÿ~]_‚GĄû§ĨKā`ąĢ€äü­ŋ9Áė~ ÕF›.Õė1“Ÿō*6&1ē˛ė XûŸæi“;2oŒdvĀéõĪZcŨ(ˆ>Lôāp?˙­DĄšRĒPK|Ãûv?į­XČd\˜`:Įô§4ĄgA Ø#ę\~?ZŊį0?6X§÷[^>Ŗĩ,™JJ tįü;דŨ‘ŋ§rx¯uøf˜đ%‡žō?īļ¯,ø˛¸ņÄÄ÷†?å\6zŋÄš7EŒđyöŠžāX1+ŸŸ9ô˙8ŽãZÔΗ¤Ixą‰L;~F}‰`ŧœZæ`ņåŨՋ˜tŨ—"7dap1 HAž@Rs×ĻY'‹ĩ[c.ũ-æ‚3+JíQŧމōA8=ķZCÄ„ūĶī`‡ =ãE0XŠ .ÛÕIÂõān¨4]_–M>Ū÷M”™6ŦĶ´Nš;#9 Îܞ>LqÎ _Yņ´÷‚Ō;ļfˇmßÕyÎépsëéÃĻņ^ˇt°$Z|öÃ̀´žC ĘÛ7Œ0éķ8Îr6dNcâr Ése,ë$qi#ÚbĘC¸ļÕÉ#÷qŽ%oj¯oƒĄĪnîĒ ˇüąŨåáÛ*xĖúær:ãEüG¨ØčÚ’ØIwqwo™ą´‡!7 Įsp>CøQoęw„l5Øūâí˜ŧ{v'o ĐcķĪ|TÚΉÛÃڌuĻŽeƒĘˆŌģˇā*ĮUõū!U˙á:ŧ[S8ĐätHâD› „m¤—§)Īšūī$û\ššĶĄxa`E¤[YXĸ —â=­ģ\+ŲĘZ7ōÆ|įt€ûŒėāsÔtäÖžĨŧ7V iēæō¤8Ü—ļH#,‡AŧZG‡ėuibH’ęb­ä(d˛€pŊOåŪϏņeŧZ=ާåH"’IŅŖËáBÒ0vy9ôĀĪ!ø‹§ŗwaƒˆÔƒ$ŗ(įv+EˇÄ.iaŠŪÎúG•a@ˆ '>ŦäwũG4Øŧw§Ŋē´öRŖŧsɲ0ŦPČpyā‘<đIúãKEņ$ލöPÚËHLŽĪ´DŒ…p î¤æĩīÖÚ]>å/qöV‰üī›hØGÍÎF3YÃCŌDĄĖŸ5¤Wģmf`ŗž ~ŖĄ5žŅvĮŠÛ˙<ÄÎí›7cwŪÛÆz÷ëÍ$š&Ÿy ų¨ō yŗģ XŒäķ‚íCŒtšâkRŪ8fXŪ)% Š!Øw 8R§œ2TŽ™Ī6—ĨZĨą ĐųF("`Į‚Á3×<Čߟ>ÚrŲÃ>Ž4ŗš"~÷;p??Ôõ’ūĶáļ>lrËSäb €ŦīŒĶįpsœƒŠŽš6¨,g3°‚ K(ßVƒ†9WÉÁ?NmXØØiˇP^Įs!imÖËķ ŗœeގ>­ęj-[B]Nęk´\FīFĒUY@+´ã#?‘ę3Ž´/†•,䎚ųæ’TEgō˛V‘NÜœˇ$įwqM‡C†Öw¸ĩšš ‰?—#  ‘ōdd.6įhĪĻ.k:UļŦ¤“>c—z“0 ‚§å`Ā˜õĢ6÷Ãē{fFvŒŧÂAš@2Ŧ0ÉféՉĢöš\v7“\ÛĘLŦ˛#Ģ| }˙? Ē×zoÛŽZe•—,ŽWh 1œŸFĪ×Ö˛Ŗđô py˛)‹§ČÖĖdäį‘ō/įž˜§qŖČ×îŠ,"ŨĸhËā—ådįhãūZžũ+bŌŌ;U•Hä2ÎdĀM¸ŨØsíXsčQyP¯ÚP˜Õ" °Ø]˙ÅģŽ˙v¨ítĩMBÚv‘ŒfD+æ7ˡ ၎vsÔöícVĩūи‚Xf†%Œ†ųŖäüęŨs‘÷Î*ĨŽklÖ˛$ЖLdˆÜŲČa†ā@9ĪARjÖ0ja>x”¤n9MÅIācé×§ëTÛFĩŨ'ībËJ]¤Û†e;ˇ–Į*ÄqŽ‚¤‡DŽ'BÆ Oæ0Á,ü0ˆū.Āt÷ÔGerÎø@ŋáū&Ļ™.w—PĖFN}zuīÍZōŲ—*–;ЎLԒŗ%´éšvŸēsÛüŠō;’I?Ĩ{ĪÃŦ˙ÂϏ˙ú¯)ø°åŧypE†0=ž\˙Zâp=kÕ>$ ąÄųwwëVū.Ũ5˜dåąĐõë°ÕõĶ4“vo‹ķrį };ĄĨxœjz5Ö¨mDBKF$/ŸŨ‡ęz6šĘ¸ņ…ëŊģÃhŅžkȌÛüåQ€vđ3œīŽŊå1ŋk&[}!eˇi!–Ų;n:f:˙ül[ø§XW¸‘tŲnāV¸eoēq‚äHÆrzõ­÷ÖĻĩđŅÔeĩN6²uËm8Æzô÷Į5…îÃĸΧįLŠŠ”ĸ˛ÃÉČäƒ+ßw§RĻøÛP‘"–{%4A$Mv 6 +“×>ĩ›ã‹éd‹í‘o"ëvFŒD„‚v“ģå)ę{Ž÷´_ĪŽjÖą,)o ‰6ôßŧą )ëÁô5&Ŗã ­3ZžÄXÅ4q´+Äd—WbrF?„={ķLŌ|]6ĨŦÁfövđFÆ`ظ.I@¤ų@ ‡ČõöÅKĒøŦXjŲ‹Mæ5-$Ą.ÛG'`îÃĄíT`ņōKsGOÚŽcųŒÜ¨o+cū›3Ų¨ˇøĖa—L‘›Ëi[dĒ@UEvĮĢOËė=xœøōŒģØŗl€MōJŽÎāŽs€ĀúāôϟˆļŠ:Īi3ųo.<¤aL˜xįˆŽO¸ãbĮÄ)Šč׌0ŧ^[ʃĖāĻzāûõë Ûâ-ĢZÆˇVw+p–Âiü•ōÝšoqĮQß֟{âŊæãė×vS4‘Ü` e†V#¤žšÆsÔf&øƒĨ$P,vw­æ*ųQ,Cœ€BŒ6;ņ§¯kéĸØÁrđ–Gr$COģādŒˇ˙­KuŦ$ĩÔ ųŪN# 0Rė ŽŨ7Qk>‘â=;íRZ1‚ ˇm˜`Č3’÷čx=z`ÖT1ĶŽîxŦ]íß9Ėkæ™CċŽqŪŽsRCâ=īÉaĻ6ųæA@}˜cÉāũĄzsķ:ÕŊ YĶuI’ĮOû; 1¤ØˆĘ •*@äŠüĢSWĩūŅŌī-ˇlY x„›wcr‘œ{fšũGŸmˇēÅÕ´2ÜLd’DĩÁ˙Såā|ŲÛ¯r;œÖ—Áčæáãē‚?=¤bÂß$ąwqŸ›œn ‚ cŋGāĢuŧ7 öåĖģÛŨŧÉŽŊÅú(ú—ÁąÅ ,wQ#ĢŠĨˇÎĨmüž=›į‡ÔķI˙Āĩ6Ŧ˛[Ŧqp‰ŒŦŠå“s m ôíī›šžˆÚžŦ÷cÉuy1Ŧáđ‡æÁš˙t~–žē‚íV4ˇ1Ã{.–\ey Ģ+(bxë€zZiИ Ëo"ÆÉōyĖ•H”0Āę MŽ:9÷#đõöČü÷Žb y˛C1ķ\­ąˆí%@ÎH`I˙ŋŖÅqef‘ß2I3F$w ķ‰aށF@ՉDA˜F%ųĮ攈U• yãØĮ Ŋ˙!JéŸ1[øpŪôĶĻŌĪü$ūįëL&%]ß)Ā$ũĖŋĨFÁa„ÜÕŋã×ųÔ$^`!ÃĄĪ<ķßÚĒËk’5Òr$ķÉÅ4Äŋxęe|î)ÆHíÜvīũj)ÕIgwRsØũ*"i\pW `žr_ëõ¨ÎÍÍjÛ|ÅN3ųū•N43ųxwÚĨH;ô˙<ԒF¨ØŪę9'ŋAüÍ+LHd/ĘAßĶŋ§4ؤvߍŊ@ĢƒyÜ!WƒéüĒHöÉ(d!ĄēÛ˙×ëVS”ŧÄo,wl†˙=?ũt]am§/’ ާįé×õ¯'ēųIũ+ßŧđ6™ˇ¯–NāFŧwâ‹gâ˙ûą˙č¸ęõ‰å‡åQķuîÎ+GáÚ˙ÄŦķķø×_ĢęPčúT—×ŗG(*0 ÉĮsúW4|lé §™#y$a29AåĢŋ'‚22O=˙)!ņŦŸeûPĶCBą—šĀm˛Î¯Qōœu!¸äUísÄ1čFĘõ4¤–{ø÷Jęv2… pXŽæÆztĻCã‡rd9EU™‘^ä/(P$䝞ŨH5ŋ|Īø–Åē(ŧĀ~ؤ7Ė€xÚÛŊO@=&‡ÆŌÜjOcm§Dķ­ĪŽļĢ KÉų2?ÕĶø…X>'šŧÖÆšM ’‚V'Œ6î;íę3W4u5K‹ØM¸Coœ8“!†į^N89BqčAŨ‰“–EÆw`Č8ôčFmÚxŠ´}KRšˇšŪ+9¤ãųYū\gÆs‘×ôē>¸5nęÚHŖ˛´‹æiĪæ—e#ƒŒ|XļŪ4˛BeēĶZ;GˇY"+c+#m<ŒäGĮë[:–Ÿ…ĩŲĶåÍԂ4  !qœ)€FŌy=¸ëÎ&§ã­--$û5ĢOsD–!´¨$'<Ŗ×Úĩėĩ].ûFš™,ä{ `@FļáÂ˙qO|ŧ{ŠĄoâũÕŧQI[w…Š$ōÉ+ģdĮķÎ*8ĩŋ }f‹IFÂ )d§sŦ#ĮŽ6ŸCˇŽ•gWēŌ4;5F´1ÎÅ÷˜öí^3¸îtéÛĩ¯jíä‘čök°Cƒ*Ûí Ĩŗŗp˙hąĮ¨5Ņ2§ĮQŽ•Ä÷PĩŧņĢĸ܌2gŋ­q/áËØtëI´ũ<[jqĪu.øÄA€"S$’;Ôcˇ=1Zš\ZėÁycōė$š™ä@"Q‚_kdˇđƒĐô9?0¨îæÖeŋÔVÉä‘ “Ë(*Š€2HÎī0÷ČÆx8Ŧásâ%–—uÜ0!6ÎąˆßsĘâ9ĒF~SÔúVϚēÁģļ“ÎbōŨĨg†5,rģAÆ}_Ļ>čĪŠ‹Q¸ÖĄŋš[8¤ūV„A°ŲC'ģŒķĶîņķfžĄ¯ÃĶ=ĨĀ+ĘŠ‡;O•'Ÿœ&H$|Ũē RÕÖõŲ-å `ļ€Ąâį!ãûŋœ‘j:ŧ’Ų4–Ō~ōMˇZ°ōųL€OFO<9ļeÕZô_´05ÁLÛ4rG2†ķĪ™–QŽnA=+:}WZž†Æå&ûũÆĘO–P¨N:‚3ģ¯u3Ĩ¯Ëqv^CIäĘ_ĖT„—ÄØā|Ëķcčk:×RՊØ[4Hž+ÎđÉķ.؛nÁË¸É |žÆ­jwWÖ÷ĐÚYˆZ0‰šŪ&~LЧ•`0-˙5@ë”–Ė–ŠŦŠĄĸH ‹˙t1+ŒgŽš¨ßSŋŽIPŦnĖÂgŽL¸ŪālÆ@ĀU<ž„sÅO}tđhšeÁÃ1HÃī-Îc'õíƒÖĸ–ōcĄÅ}!UråYq…˙Yˇ=N~šĮž9¨oîÜhļēšĒæ@ŦQē‚T’ õíõôį¨]ãŧŠ"<˛LŅ2‚AvUÜ=z=GLÕHõf2ÂXÂėņÂIY2¸ä×9=9ü9¨âՋŦFF‹2FŦ —j)!ķÎĘSÛŌ•oíÚE ļąõÚ䀃ō˙ž)×:ˇ3&˘ŗķ,¸bÂ2ŲÆ:azúŌÅĢ<—ɐ‚û‚HÂā aąÆ@-ôôúÖÎ7ΨĄ€UĀî3žÕn1—R#ƒŒzw÷㊑ce$äŽIQžp{qŸÎĻŧĀͤhƒåžøČ ūĶųų]ÚūõÆJ÷ĪŠ ŌûƒS^5ņCĮ×Ũ~ėYĪû‹\}zwČnƒÎqĮĨmüŸX§ņŽ•ĄFú{[Îģ$@ŖxÁ€ųHã€xâ¯\x•EŧÔbĩplįû9Žo—.)9ãžÕV?ÛÂ'ŠîÚgœ\ĘŪ9Ķŋyū‰}æĒ†ehÕX’ņŽ9nd^n}3Į4¨6Ę÷|o‰#Ädƒ‰ įv<ĻĪ>ŸA'ü%Z;É KšRyŒ(ņĀ­¸¯-Ā$á{ņß#=jˇŠ5í*Î Ũ)í$¸• 0Œ’‘—ʰ7÷éœÖ‡Úôå×m´ģģDûtđ)mŠ­œŒŸ›ūYžŨ‡JĢ'‹´x'ē´6ˇM2ĘҘã„=ˇ2ļ0y˙VŨqœ ›EÖô›Ûģģ[ >xnaˆųĢä$g vėāö#ƃĞ 8°L”ŸąĻB•É'€'#¯^*yĩũö+k,Xå–8–ĸ '˜# #¸jÔgEŧĐîu 8bkŠAļ]˛7͸Žxcōž} Ôqkú2‹ë{‹´VpÍÆĨg,#Îp0NePAãŪŖÕG†tĸg–Æ)n/-÷Ư ØęˆJ§#å/8q‘ŌĢÃĒxVK2ntĢ[Fe WėĘß(XÜ㐠‹üņÁÅÖ×<;|cŌm‰D֍Âf8{ŦdP;ņZú%ƍ4M-­TĖŋ0ˆl.Pdz O­jˇcŌæŧōĖ‚ķ”rØ÷ZäŽ|Eu&–nZÔĀФė!˜đŌGˇ$Ž2Tg¨#Ą­-XšæūōÂw†xüÉŪ9ōBĢ *@cįāįĩgËâŠí4ļ>lmq4%āfb‹…NT/§¯>Ü ÔĶ5fŋŊ[vˇŽ"Q&â†'T`FҌ“‘Ž sŠĪ›Äaâi>Ëná#–ā¸ų•#Č`Ãoz/OŊĪĮˆį–ņā6I {üķždxÆŅÎčķCL(‘•Ũí@n]|띔XáąËáĮËĮNŊ)˙đ“Āl‹ĘŌĸPĄ†éW’@ÛūĨŊy"žū$u‹jų€FÍ0įįOŨãÎ\c9Áüt4ũAõ)$UŅŖi#mÍĘā‚ЃÁUŧÖã‚ëė¨ŽŌŦÁFpŖiķŸ@ĮNĒGUŧUnƒÎ–;¨ĸVU“nqąŸ8 {(˙ž—Š’ī^XîD7V˛Å…Üė; ,FpHÆØØ“Î8¨?á"…ĨXÅĨë;āŒšŠ+cē€Ã=ĢڅØŌâČ]­Õ–2A)'$ä~ž†ŗŸÄÂY,Ū8å6ķ)ųˆ]ÁÉEîûšÆr§ļj?øHäkž(Ūb {˜Æ†%~\āí`}=ûU‰u(ūËŅINūZDîŨšqÆ:įU}zåVŽ9ÂČv h–}ęŦŊr0ĖĪôĒŌkđē$ÁnŽT6|žH*[=OߏĨT›]ŨžhämœŠ•”¨Ü~_^Ô]kļŅŅĘû°;O Æ˙ž‡_čh’ímÄyÔ2NĐ ã“ūpi/u(íˆĘV@Ą™YO'§ū¯j† č'.#.ĖŖĖ.PāäOĐņõ÷Ļ˙jÃ$ĸ8“Í’iWoČØÁîÎ`ČČՀ’ŦN)Į '×üõĢ#"ŦĨ‰#œņßņãõĢÄÃhß0' =(žFūˏ†ī-ÃņĮ<‘üëĖ/9™™@‚yīž |Ĩåŋå€âŧWâvOõúE˙ĸÖšôΉ~:"ē/Eß$€I"ē}nî->)eˇû@iâO-ąÔ¸šô<§ã\۟â‹ŪÆasÄĸ$UްUbAîᔞø"Ŧj:ÔvW2XYÆM˙œ‡•v 0ƒ’¯ãŸÅŪ#ņ-Ϝ×Zzƒ%įŲL̏1­†Čā}yĻÁâ­;LĩōîmŨŧû4(Uy•'=!9=Gž,Oã+Ž>Čļ’‹ˆĘyŠė›gĖŦFG˜8öįĮt˙ąų’ÛÜļčÚBņÆĒģ@”äᎎN™ĢëŦXŽiw´â;š<¨!T@\€p9!@*œôĮ­sōøĶKą°ÚUœÛRŽ#ÛŧĮæČū~ÕĐÛkļē5Ṷ̄Ȇ8ŨÍ!‚ƒ¸ĪN‡#ĩfßx@ŋáŊͧ‘^5PŸŧÜ#;CĪüļ_A×§&ŗ <†úßJē“ÎDĩVHCn/3`]Įĸœ}ęm^ûEŌõCgq¤Į!ōQ•–;ˇ6ÕNq˙<Éį€{ }äš[G}).›PŒÜ§•hŦ\q†`yë äúœ÷5˜ē߇~Î.‰h‚Eqšm#‘3އ†ÁíŒz Ōĩ“LÖĻÔ$¸Ķŗ5˛(¸K˜r¯ß sœö>*´~%đÜ÷pŪ4gíj̉ßt‘ŠÚW‘“‚$ęzsPK¨øjëqˇĶíe–āŖŋ›áƒĖ9ÁÉÜIã#=ÅGeã0KjæĐ[ËuëƒĐĻv˛ ãæĘyāOŠ­kŗĄÅŠĪk‹vÖņĩžIáW;qÁÃ(õö5BMW‹2•ˇŲ^uģ-š>Zŗpŋ/*}ÁŊ\Ķ%Ō5yŽã°ļĖOk˘öĢ gUMžÛ\tôĒ‘Üx{ėËįÚÛÂŌ@“ų~Q$DĖĒ„:ü‰Ÿî=3W-ãđīˆ$`†æX \nˆ‚ą•s€DœsčjƒÂ—UÆŖ6˙e‡),†6|‹…Á‚ ¸Ņė`Z‚‹€ŦĸFPp¸āø9ƒL´š(ũŅdV*{qŒûž”Ëũ>ŪéhËū'r õč3Œãų{T0 G0Í.Ūf#î#‚OĖ >§“Ī8ÍKckf.q°šC‚ÍōđĘ z–­hbėŪIåyééŸÎώˆ‰Đģš(Ėß7ų˙<ÔÁ mûũNvôíũi/\>ī˛˜˜ķĮn8¯/šF -Ÿ,˙>õô„#ÁúQÉɡZņ/‰Ëjâ/ũĩČâŊâ€Ü@œägōŽģĀŽG‡á^œuį&ļžļPË2ÚČđŗ0Pō¨ búĘsŸåYļšĖšĩÃEogdŗ$ <†ę"ŒH B§•+åōr@ uëM°ģ]bí,.tÛ/&X.K”B­˛9<ĸĪ|įô¨îu3LĩKKm5ŸL‚á㙠JS(ØŽãÎÖBNpyvŠåÖ´9.e„i~|‰y‚ŋgCžOŪeņžŋē~O<ZqņV.Ÿp"°’XI<ÖâŨNėrė;įzr{õÆ"´Õ|3'šíŖžčŨ-„Ą›ËWŽxā(ぐ8īVĻ:mž&Ŗ&bL\B̤1+p¤āĮ)˛ëūÕ&uĒÜĘė-÷Ëj¤ŋ.U2zåŖ8ŖéK7‰ü?(ŠāÛ5ĖĐ3ũ™MšcUV'€JŒ2’{cžERģņ‡f›´ģ{‰˙qGää¤N ILAëWô}wLŊšōÎč÷“ģ#îwķ†Ä;#Œ+¯ËØJ§-߄ô†“LŊŗļHí‚ĸŸ!ĨvÜ ’ß/ĸŽį ôŠYđ¯2ĸ&íĻPÆŲūđ%‰'6a'ԔöWž—1ũ’-ö*ÂRŪF,ÍšJ… žŲ0+Y¯4;­>ßTR’YŲÜËå7îú /ôį;ŠČÔ5O 4oæA4QÖ/)аûÁ@ۜüÃ=×qÎ9ĨŅĩŋ@čņBlä›dj79ŨĩđHČ4ã“ëWøvúÂâũ{[s—w/—Ę˕Īü‚LcŒ Ãĩņf‹Ŗ]ÜGciwt­4HģV4ˆL’CuÉûĀôĢÃPđŕŒēYDûÆ|āĖĖlŪ'œÂü¤ā¯¨4’ŋƒîį%Ĩ‰æ*sHûøTÁ œ†ĀNŸ1éĪ5§Ą&“˜4~PčŦäpĒícÁ+ˇž§Žĩ§yo õģCrBGFÚA !¸ ƒČ>ĩJOč÷J“Eæ+å›tîs• [9끂ŨO<ōj´núŒĢl'ÕœyŌXš”gœ7,O|dŽÔĪė]W—NH‰ÆŒŅ—|14*zã<ÔfßD¸2NÆ@U÷I#Ŧ‹ą€ŽLšlcb<úcÔTáŨ:öÚháG‰‚7ą|/Čɐ 䑆G\õã‹Ú]˜Ķ4Ĩ IĀR“Č’G<ōOSU[Ãö n°˙¤yJŽ‹špĒŨ@ˇų9П imwã1są° n#$ķØôįÜŅ'†­¤ˇkV{‘™æ*™3É?7PH%‰9' ō­=MmeŗûÍ×Ųōūb•`(Cäg ā€Oqá{YĻx?´.žŽĖŠéķ ėÍÆŪFéæ;ŠÔąĶÖÁĻY$IJ“¸† <ÉT5 ÖâWiîĖm-ЙöŧĮå…”Šā9¨!đķ3u36ŲžH„daCJ˛Ķ'”üzfĄ>ļVb%”—ÍĘĸĢ‚K(c÷R{`ÃV/hą[\ŗA‡Mč‘ō 2uUųˆÜy99­K+qgË™I^TSĶ,sƒíœū•–ú+ w­Ëü˛ŧНmĄÃnŒŸžØįŒÕFđęÆÛbŧųTđYrB(ŒķĪ1/§SM“@’UwŽč!iŧāDA›‚Į“ß–#Üqë˜mė ˆ¸ûApŦÜÆėŗŸ\qŋŽ;}ríJĖß~ņf>_–ņžåĪ Tä đxëĪ͊­a§=˜Ŧ¨Í2á°ģpw1ãŸöĀéÚĸ›I†]Anšb›HĖhŖ;įØŖđĒ?ØØļ ‹ģo$Eáu'¯Sŋ?đŗgĨ…ģ†éLhę@bÛũė㜌ī•o@ė!<*(ôę9˙õSáē&PėŒí' ךĢé)ČÉÎF}Š5 ‚é÷RIōX€vž?Zō›™ˇķ‚<û×О,žŌ‡qj˜Áö¯øšsãíGéū‹ZäkĐ~!`_BõÍw š °ĀŽqĮųÍmęŗXÛZÆoŖY!Ū(`[ˇ^?Ī5iâ}ˇCfažTOŨÛBōB đOúÕ<ÔÕčot94ëŊUtˆŠY4æ5° Ø'{!ī’~ŊqUGˆ|?§G%Ė:(Q+íÛq˛ ģãˆ¤é‘¨ĢĢÍ ØMgö› ’Ū9h÷[Ŗf(ŦÍîK(8ÎqíT4_MÕl&ē¸Ņmb‹LŽ9ĄTEctķˁˇđ¨,üMá+{´’ÖÁ-ĻÛÖ+0ށ—r—Ÿ˜Īž)“ëžēœ4z]ĩÄ× …ÚhTn Â<î–Æâ28í‘Îiâ-åˇ´[{ifŒM+,KŧHD{@Āįpœ|ŲÉÎ9­[…đÍ’Ų‡Ō­ˆšRöņ­˜Ī!A8ĀÁåAĪãĐâškž…æ+Hc4]-ųä‡ļã€f$Đn-šÚX\Ųí@HōŦş‚;ŗuęzd‘Wnn|;Ą\}žh`ˇw_4(fÎ@ę0įÛņĖūĐđĩŦ×=ļ.ŌÍnÉÃFۀgîD}ˆNîīÂļ„}—Kˇžq IkEˇå‘ÉąžžšīΡ‡î4;Į:…ŒBaˆ‡i u\žGŽG/*ĨÕ÷„u Ĩ¸š ,˛/˜îc-Į)Î3ž*Œ¯āģ{ųÍËČSĘØmå†PąžI mÎzܒOĖqŠÛ^•mkũļœäŠYPe#–9Ã1æ9ÁĪ­eÅĢč §.•=Œ°[ŪŽjķĀdwü‡Ž9^;Töš†5ՖQjeŸdrJŜ”Ü Œ>~öĐ2Tä㚎8ü*[ŦOÄŦ $”ĀDTrzaaÆx8ëF’Ū˛Đ§Ķ×QYÎXȡ7Ũ(š=ˆ9é–ã¨ĢRižk1¨Ü80Üf/>K™™ō˛u-ÎT°÷Îj m|!<2†hî"ŒÉ!AtåA<>Đ[h?8įŽH>ôÉmüxÆâyĄ[‚œ=é,Ҍädîį=ëcGļą†ęú{k‘s<Ō+JûÁe]¸E$uÉÉį’j]rÉõ-2K8Äe™Ņą"nSĩԜŽüĮ˙ޞ-ü! O%Āž“(ÉūŽ?vË3JBüßtî+@98Ēëā´Ã˙¤ĒģevˇaduĮ'ũXķËėiW “,“ÜC1,0MžJ6I0 c€|ͧ=@#ŋ o™ŦŪģFĖ{4ūyDƒøŊbņö§ˇÚā]DF÷xĶcˆąŨ•Úãč~‚¯ĮĄÍ†›JŽa•$+Ú_v8Î9ęAčs„§hX<–ī'Ųā€RUBIVîeztuVū“-۟if!*˛G.ā’¨B¤’xČa’NTsŪ˛ŸÃúŗHA¸…ą.e-4‹ö‘¸°-Áäŋø‘ü9ŦÉn¸ļyÄ>ZĪö—–¨yÛĐ2–˙sVNĒŦŠÖō‘,ŗJ@™Įœ­0xųr;út&ŠÍĄë€ųBũC`…f琁˜ÜÆ;3/Í×äĪZ|šn¤÷6æIc‘ŌFŽKš—ļFfĮËķdŧ•sQ‡PŧŅ!ˇĩÍŊÎÅ/ēáÉC´˙Éb:į=k9´ũ]e{uËą>Yš}Ŋb8S—;eûߕŸ.ãJđŧƒĘgšA# Œ3’YبŠûŨ{bŗĶM×RH‡Ú÷[ŖÆØy˜°Āãœ…éĶį#°4ÉtÍv;tEŸÍ ,^bŋ9GĪr7üŊÉĒígŽÆwGy#Ŗ9íĘ Į$zŒníŪ%XšļÄäūđ1mĄ@8Ā8bp:ąéÔ,vú°2NĶΉĸ6.ų vžŊ—žx¯ĒĻĻfO°˛…/@HäÄqø §ö]B7,nĐ´›đDd}ô;€ę8 JđęfH%Q(P¤šhđI1îũ“†>ĩbņīdēļŽŲ\ÄoĀ\ã#ąįĻzŽĘ=Q¤„\JíEiCĮšČ$xāŒgŪļ!€™ŗČ)ķr3ĪãŌ§ļ„´û]…+ŒäúUؙc&\åŽ Į~jžļčtģ’Ģ쁂Üc0 (ÎGLė˙žGĨK‰<<ļķ'ŲmŽJęmvŦÅÑŽwo›§$S¤ņ†ÍŦok¤Er¤LE° ‚FŽâŊx[o|žzÕŠŧEákča’kh§ŽßbÆŌZ†îU`ŸģÆŪ8įdŌjúƍáךĶŋ˛–;y|¸îžhåÁųy8‘ÛƒíQ%į„!’ÛLļĶ`••ãļE6ü&AlžH!NOSøæ–MKÖúÍõ•æŧļÎJ!-æq–Î89)Ÿ $ĶWđh´mŅۈöĄĮŲO*Áqō÷8˙cģÅĢígDąÕ-­ĩ;xcŽŌŲ'ļš1’;†ĐüŧGĮ¯č*ŧÚ§‚ŽŗX¤A Ĩŗ’~/÷›ūŅõ4é–ņŲČlˇEyÍ‹‘TČIœ|Į‚9ĪJ%Öü)Š_<ú„qIÚ RvF`əå@ãpįģÔâ‹eđ~ąr–6ĢŌ<`üË ,ǜĮ;däg88>ÍĶĸđ~Ŗ2Gšķf‘‚Ŧ‚U$ƒ Ī\ ūôÁ<÷ Ĩj~Ķîæ°`.etķ'‡åĖecįtd('ÜšßÁЧ-ú"ũŽek`Ëæ&F60žĀ=0¸íUîcđ5ėí$ķ+JĀ#;O)Ü00KĪĘ'Ķ8Š!ņV4>Y’Xãŧy|á+cœäîʂãoô9ĸKo]=˛ gŠ$‚ö—TpŖīĶ^üüÕ4+ hˇWvņȖ’ŖŪIķŠŽXž=@āw >đۘmažd[›eYIn Ÿ•FØé>Ÿ!íšĪŌlü,Ö ČDI w–āÆŌ"œ7Ũ+Ķ xÖšŧđėĸĘÍ'Žu´’)!Ë÷-NíÃ8=˛IĮBqOˇĶ<*ūMœ/jü9Š5š%ą"Û~lāĄ'ŽÃ=Ģ8éž k9­‹Z¤"g%$œŽ2¤āxšúšØŅEPŧūĖhÚāGÍäļ@P ôãß§ĩZÖ#ē}5…˛3J6eG ĖĄÔ°É r ūuÍ-ŋ‰,ϏXÖŌI¤“hh÷ŌĘß'Ė0pc<œc=ëCX]]âŗˇŗ–tē{yw4F<¤– žßŌĒ<~$eŸlĶ;“:ħÉÛoQéĨIĪSYđØx›OĶŪ$}ƒy†0Ё)sü<Åןà ؆ĮV…V­íŖYG!„Ō…U`rČ9īĀ,x#§zÆy|@ÖĻ)ínfW•‰‰NįŨ÷¸PyãŽôoŧ :Ö¯yÚÛHō˜įl$vūfĐĨyõ+Áį“ZCS×gš ”O5mîŖĪ ØFF9Æ0PÜęöú6ŒņÃp×KŲ„ˆIfō˜€ÄŒŒžĐI§Ms¨Īĸj3ĸ7žŋņîÆŽ˙"œė#9ÜXtíŪŠGWļžčŦwÛ´Îádĩ“*ģãōFČqƒVõ ­N >Ö[8HžPÍ"ˆ€B39\°×ķΟXס\ė†c’6ˇ•‰=øSĮĖ9íŽĻϚûTEäĢy’IŧĻXv„ ¸\)9$ûzķU5-SSōØÅnK‰>THŨå‘1’O!ÔąĮaž¸&ĸmjų]°ÃåĒBb‘ “†ŨŽ€g+Œį4ųõ˜tĄ?•‘æ(Ė*bģˆä…!Gũô;U+ŊVøŽ×ĩHÕJŠr\"ī\Š$ōpw͎­R—Y¸_; ~Ûķ•aŗ9éũķØt?JšûQ{[˜átŒ,ŧ1,A\‘Î}ŗ˙ęŦáŦČm&|\Ŗmųí #¯Ė#ZzšZ^Á•e‘vá›ÉĀ=1OŗÕZęęÚ%͸"pp­ž€Œ’1Î=OĨt0$`ČH –#ƒ˙×=ģ3A ‘Œ3s×˙­QF\í2.SŲúįđ¨5ˆšM.ë2ĀĪBr ¯7ŧæ:žIsū}ëčŸ §üRÚaāŗGŸûäW…|N˙’ƒŠ˙Û/ũ•Čâģß0mb Zôo ē-¨R>čüĢOXūʒÖ$ÕteČ@U‰ÜUûŋėîĪļIâš CāÛ&ĩ•'ša ´šbÛž`Ī„āGLĪ×N[ß 4ŸfšÚ9Z"-Ö?˛ģãi~ÛČR’r8=3NMOÁ1Åē8í^4o–ÜŒ~SĶąĮ=¸Î8Š­õOŧ’$–Ö°`¨|–É]ˆá´mČp˜î0=†­ŧ^ņd/ŧW JŅ”n |Ø8Ú˙“V%ũį†ô‹ũB8´˜^ęÄA1ą¸´˜%zũŨā“Üļ)‡WđžĢ¨I%ՑEš/=n%Wđ\ö^ ČĪPŖ¸ĢûÂ"1؋(Į• ōüŋ1‡8Č+˛OCÁõ§‹ß kšČ‚KS,¯ĮË…õ Š`Û'_|Tˇ˛øGNš¸ŽéüŠ8ž@ ‡ŖHęŲÆ:ļĨ1î<umiis4OYˇ Č1œŠQí•ĮˇĸŠĘž­'ŲÖm–¯,qūđŒrąAryÁ=Ģr{Oi7ęķ/“+ƒļYdv'äÎIĪȃ9ôŦá?ƒô‡ūĐG‹Í‹tˆGb[sģŸŊ–“eē`Ô)„.įšâuXĻ‚æRÉq; ?˜K6ŨØÁhËz`÷Ĩģ‹@ŧX4T¸xíėfŠDa9elZąbr<ļÎ:íÃîôO Z\ÚéˇģVbķGžb‘˛=šŨžC ß č^ x‹f×níGgŨ?xļđ{ÔڎŸáģm>Mi•በî–ŲÉ!‘rėpcL˙ģųļúË¡’Ësq{hZDØ]ív˜ûĮéV.´¯ø‚ôąxneLN#šÉHe#ņÕŊ:JČēĐ<5*Ię1G9Y#Y Čb­ 7õÉ~8ûžÔižĶæąež3Īsk‡ŪŽN7‘ͧĢY´=Eŧ´žhÖLÁ-ÅÉ!@<įæ`1Û=…e6•á[ģfÕVü¤G)ɑ mr]×ēr7sÚĩŧ;eĨXųŸŲˇīq$°Ä$I$VdEfTAãŸAīZzĩéĶ´ķ:Ē|ފYūęå€,O`ũ;uŦņ5ĮÚ⁥†0d„<€—\)$ܒ@ãg4š 1ÛÁ2ų;ØŊĪÎ[ÉiN@\ߊĢCÅžuëېˇ#š“?+Hč{Č:÷nüNīÆ-&‹<"[LöōI:žÖUS°Œŋ,FĶÎÃõęaoY,žLļW+.â¨>VÜÁƜOpzõĻ/ˆė¤yąÎ„2…g@6î yā c=3Į­Fž(ąTYäIå…]Ÿ9*ÁŨއˇô ëŅŪi—wë*Tyo,d+p}GÛŊFhŪâąŸŗÜÁpO˜¨$Ž9Ãú隝ÔöņoˆDSĖD`ņ’rÎčŗ†ĒąŨOäeäGÂ2'Ë' ōŒäį2(ôéHúŊ˛HąĨYĘQãÃqˇ×Ÿ§^¸ĻÜj0Āɸ+§™Äd•QˇqaÛē{Ô?Úöō1;™BîÉØ@¤ãĶ_JĶĶoú2íåF̀#9'• ŽqĶwŋcíW”íręŖ eONGēš!×2`ˇ8㎤u?AéRŧẤô˙]czhwJKcg§ˇzķ Ũžv=sĪō¯ĸŧ>Í˙æž#ėŅãé´W„|KÉøŠ“×÷_ú)+”Åw>9O/[7eq‘í^™á¸üŊÛ¯1ŒāfŽjbÄGl×íąQå°;đzcž›˛=3ž+—yŧ.eŽaĒĸ4hÄųƒžīäņƒÖ›mĒxrÆæY7I+({´šEa—Ũ)1ôOúĖ9Üzįęžvû;钏,yQĒ+7Ė#Đŋn@…kÅ(tÁŠÚؤöât€˛ÂāŠrŠ0āl8ƒŠšĘ˙Âēl†k’ą)crJ8@0äœÅĀÉSuqá´Õ–ĮRO%¤‰§I™cŸ$NXČÆ@īUŗā֍Wδ ŗŊđĒY—OC™cļM6ōÛÂâ YY\G}ˆ—QHØO‘Ë3s×į“’ œāU­.ÛÂļ3@Ö׉%Åŧž\eŽˆ#~ ãhĀcŸq˙ÎŖ¨ZHÛ/.îäTŽXflŌēžģāŒtúՋ…đÅĩĶËqukņLÎÅn6rĄ[ĄČ\ūÍGyŖxe<ĩŧQÆļŪT;ŽØ +/÷šHFÚëԟŠ\xgTļX§ž˛š8IQū•ŒnR˜Čnā°Ŧˋ Eëŧ‘Ø0qöÜyä7+ķķĖČë銱.á7‘ĖĶÛ $$Hđî˙2ÍÔų’ÄúpČ4˙ \éđ߈ŴĪō ĻØ7ĢČ@839̎˛hZ›As=Õ´ŗ* Įr>b…Áį•CųzÖm–Ÿái4ØŨĒe"yđę$QˇsJ˛g=ØJŗ#xpéiáátĢlÜRP0‰wéŒ`æŠÁá/ ÜÜŧPÉNá(™]Žmø õŸá Ž9ĢēmŽ¤ęĶÉk¨DeŸ(ņ´čv’ėÛBũXÖ5ĩ‡‡oĩ š-JG!Ōėƒ*…sŋĘJäYōAČĪQVbđ–ƒÅ%­ëÂÖāMš%¤2–ųy#æęAäž*îí7[ąĩurŌiíí8eV'Ëûį#üúfĢéBļÉ,¤DWĸfÚcxųOAG9úÖŪ‡¤[ivķAmpķŗH7ģ2ąRT €Efúõ4ËdšEi3,qmE%œ(ĮNäViņ€‚V•Ø4/+?–ŒB„iĪá;mB]6âÛbÆ3#JÆ<¸$ŧIûėwc ž ‘Vƒx9„‹:+;Žc†%7= síĪĢpj~o¤MrŌAčūt¯°K3H͸ĮGV$€`Tšfá}T^­•œ%m]Ä›dMˆFߛ•ÚŠÎ9ĀúĶī?áÖ3q4–ˇ,„ f8Ų•ĀÚ—\pNXUC…~Ō֛ƒ$Đ+´ĸíŲWBŽü–ųĐ¯Sƒjš§iēŗ§ũ•-œÛXI%ŧcÍ8;”g7ˤ8ëęzV/üR‘jOfúUßÚ^픤“nLŒ?3õ;ÆpOŠŽŠËHđü1CŠZü‹UR&[–(ą’[nOcY÷z„.îšk›‹C4ÎÎ1v9.7v/œwÕnî×ÂڌQE=ÍĢĩĩˇ”Ē.FD,ũÁ\qëÎeׇ|9,ąËmĒĮjDé#ˇÚō2de° É ķĮĩO¨ižĐâ–9šXV[y“ĘWÜ^/-C‘ž4īž=ųOė Q‚;8ĩd…äiŌŽ”ƒ“‚@į#p'ØįˇfmAūΎĶ.nŖTĶåķļË"ģ‰?0aŒūƒ¨Į5›ŠiŠ˜j/ļspÚDbŨY[h™@ãĻ:҇´­Dąjˇ'” ‘ †4ÜALōaA“Į§ZcøsÃŌL–mĢ\‹åØŦģQ–Płqō*N3øŠģ¤øgG˛ÕĸŊŗŊ•îc]ËĖ„6TŽâ6įŲāãŸN*SFŌėÖ;›ĢûˆšÚvœíÚK&W”)8Ū1UĶÁLģˇ—Íž!bBˆJˆĘŽ6Ž@oĶžõmâŅ<4÷ <ōF׊ķHĐp ŒœĒáFJ“Û$*¯ü":XxßŨyžW„ *—’ˆ=y?QkM𭎓ĒZ]Įw,ĶBĸ0ŦˆũØ@ ÍixÃņh“^ĪōJnŨKŠÚüĖÜ÷ÍijÚÜZŧ*°Ģ+ōå6•`Āį Ž@5™ũ•¤Âdxö,€)[†RۏÍ×,ÄČÉÅ-ŠĶ%ŌžĮm°–ģ0@+&ėō{ũâ~´ņáũ&!,B"Á•ŅÔĖė0ä1ęŲ•#ŋ9̰,."Lq¯!v<÷$äū5‰6‰ĸŲ,1IĨ ÄĄGtFH xíېiZUÁk`—-O’wM.@!N2[•¯|VŊüOnb‰Ręãc•9RŽz€k>ÂÎÖĘAē2;Dä14?(ÉãąĀëųp۝ %šFi”NčåVC´0e Ķ?(üŊÎsåŌ4ĢgޏšŒÜ8*ģĪ3 ¸cĀüp84§Ãw-“,Åw3K™ÄėÉ8xŨ1×ÚŽZ,v6L~ÔfŠ&e’I[v  1ÛķÍU˙„~ÛÉ7]\„•„›Wi ûÃ"vūbGלЧ‡ĻéđA‹é’+U-ō…@%sÎŪ2Ę‚x#5'ü#VÖžK‹Ģ˛ņėÚ@  ÁųŽqØũjÕÍ˜ÕŖ…įr<š–M¨„nã€xĪņgņëPAŖCcukrg—|Ją‚årʨ= ?SôĨžÉoü™VįkG+P†ėČÃÜōG1Y7z%bFž;žĖ`XË.p#dČFĪķ¨'Đ<ųähÁ“xb€†-‘בķŊ8éÎ[>†—Ē÷ßÅå™I%P9v~ 8<ž*ŒšĮōĨčd8aˇ%Xo -Ûy8=zTRčŖ.Đãōŗ´+žzüäŸÃĨjG čgēޜöšíôŦˍ6IgģV™@‘Оä¸9<āį­Oc¤ũ–ågiV@€ĸ3•ûÎpÍĶ•jĻá (‚z°<¸öëRŖŒJ3g ī×4呎㰁ŽŽsĪøÕMmäūĮ—1;Æۃ=së^w¸0Č`6Žõô>†ėÚžvŒ5´g÷ExOÄĨ#Įē—ķË˙E­rœ×mã&'Äh1Œc¯ÖŊ[EȰ€c §kvú\ö‘ÅĒ­ą„ąŲįH*@Æ{ãuf,~¸¸ķ{I;I…ŧČ ]dįæãæ@q͊EĶŧ%,Ĉ´ögxČX§Ā鯐 \{Tņøg §Ų#‰mž7oŗ 9ŨŒp%ļ›āŅ2Ooqh1 TtŊ<› ŋ7į?(ĮéV´k˙ ZM{c§É*ē!ßq¸JvĒ„ąÉ*āz Š-'Ã#I´ÔV1mnč’ÂķNWoWŠā~ õĒvš….­¯ŧ¨{7h¤w”Ŧa”ŽHÉį˜—9ôŋ:Zqđū”­soŠAsÛ ŪčÛ ,2qÆĖgØûÔw¯á¨îū×8†[Š.cy6HŦUö˜”‘œ€3bsRiļē߅§Ņ´k¸Dwp8ĘĖĄÔ •āđ õįĻyŦ÷Ōô .úKK‹É…ËÃ<ŦĀí9dppFī3r ūđŽāã™yákmCUēžˇÔeŽâWv 8B­p1×'R}pj„^ Ō$2Ŧš„°ĸē ¤,jI8;‰ōĮ§ŪéĐŌĪá­M€#ęWiö™J‘˜ÆLšRpĀęiĮÂD­mnú…ČÉ™ĐV%\ãnIڀāņĮLmižĶ´f+Ø.'2œąŲHåH9ã=ę[īÚ]ę|×yđ¤1}ŋrœ{ŸQˆu }7WšˇÔõã‹O™ÃmPÉ"3$t1éÜtĢWöļwϟ=ÛFãPÉC‡ë؏/#>†ŗ‚­’‘ŪNIO/8äcĘ x#÷+ČîOĩV›Á0Į%Ô×÷ dģļÚš$‘Ž„dāŽ=˛MløkÃ0č)paš3‹§” nį]ß ­ Rɯ!‹Ë•Ą– VTĀÜŦW<ã#ŸnpzÖ*xU Ž# á_ŗģ< Â1–‘$!€Ā#(0ÜĨV“ÁđÜDQĩÛtB0D鑃÷ŋéĄ?đV´MëNÕ¯oŽ~ĘV`ÁnŪüŒdôä’=zqU?áķįž‘ÖÖ3$ėęžPmę^6ųšį>_OsN>‰°|čV%f+’ ˞maŸ˜ ģGО;ĸ xEYQ‘°0ˆšá†ÛōúG=’×Á°ŲßÅv’ÂŽŧ•€)neČÎ}%Q˙A6ŊáõÕ.wŦÉî 2nÎ0ę@ Äyú‰ĩ‹ÕRŲ|ÕFļ™dFîFGN™ÁéųÖą×ÂFāE ÷*Ņž%ŲÕßˑ<ß÷ÉpI?ÜžÖ׊]ŌéÃBßŊÜĀ̜îÆŌXļOȋ°iA¤]ذŽ6¸3ąr‘+’p2=:U;=îĢcæŧq‚ZEI ‰@TĀRHl—MŲÆ0ė9îŨkFē¸`đ4›i-ÎųJ‘š”Ž@=ũ)–znĢoŠA-ÅĘÉnŦØQpÄ ÜįnųøeF6÷ĀŠu=+QŧÔ`–’ UH[—N1nŒ²ąĩÉ ežôĘBG´–•)ģ Œío›?ÅĶ’jEŌux%2,îI+I"%ÃüĀČíĮ÷xe錑Ī\Õ{];TŠę9og[ •iŒr apō Ī|ĶoŦ/.>ĐąIŸ2>}¸O,‚ĨFŪ įĶ郪 ŧFŲSËrą…e]ÜĢ_¯__zį.mus/Ų‹Ŧ!DD˜Æ`c?FüûÕy´ģ֒č$o e•Tųƒ$ģO'ŲŊé M~i‘ aĐ|ģ¤ęIôÛūE8CŦ•}ėßģ$#¨ ˁĪ^ĐsÔņSŲ‹¸X}Ą$HrH PYĪĖ9Á^Ÿãĩį-Ā} ¯Íīũi"FÜKe劊ÅHšGËɒøÕ/nHqąv¯×ŸOŌ¸+—f#sg…Įč5áŋå'ĮšˆĮA˙Čk\Žã]Ÿ‹|T=Įõė6ßąC´đUqžÕŋaimmöÛÅļ‚˲ąx1˛ėôČcžøę9Ų4ī‹xŽĖÂŽ41Î !UãĄVŒôįqW—á§”Îob4ë9arš@šä7øŊ6”økū7ąKäû(œ…•Q°[xãļ[hÁŽ*+oxjKoēĩŦŅŦÁĨ—hŲˇ8>€ŒgéÔwXŧ/áXįŠá5iW÷ҏļ L ĘŽO?.s×6%ƒÃ÷žˇˆŨ]>Û÷1ʀ3Œf8RAaœwČ= OkcŖKáëëkkį:uĶĖZPë„ÜÄ8VÆ1œāœũqT‡‡ŧ>$‘įž2)-æ,˛ V.%lœŽ%“ĮØQ7‡tī!-}*ÉæÅōŒAT‚ĖT˛‚#ÉãÔԚ6‘Ĩé÷ŒÖÚ˛4°ŦŽÍ‚¨,Î0ۆ2@j¯ÔËŦAĄŊ×ö­æĢ42yHËe|XK¸ ¤’ ᝝Cáí>/]é]Íöiō]ƒˑƒˇŒōžîqŠÆ˙„FŠÖEūĐģhŧļ,ėéēã9Ûé#ūžœĖūĶ'”_Ûę3ųŒÂâ6YķPqŽFd?†)÷zn•aá¸|?w|Čn[Ɍ %‹\ŒsĀ Ö†‘¤[éWGs,8ųŧĖqķģöĮņH }k›ĶžZ$Q ë2_-’Ay] ŒŒ†ŨŸ_ĨY>˛Sō_6L-˜Q“”‘ LųŒOŋ5bĮÃēu•ō_Ž ¸˛šWwtUÆāŕ›Đn$ß­VžđvŸ¯j×É""¨ƒå*6Ÿæ;Ō7€tã ĮöŠŨcVfū"¯¸ä2Ú¸ČĀQWáˇūÁŊŅüķļîIĖ)’ĨŽ}{V;x6ĘūYãƒWUH˛•Š5lgÍ#pĪ ųŒ9āĒâ™uāKFš(ZHYSrŌ1ų¸úŒuāLÖÔzžŸá­VĘMA]™¤’v@%—ōyîrOãV<3ŖÃĨ ˘oŖģ[ÖI  G9$äzãĶՍv;Įˇ…l•š?0V' ė˜9 Oįi䎌ļŪ"Ž$-æLĄ›í Lš™<ĀS˸#1tßZXĮ Ŧ2G"ÛĒîU€ÎÖëÛ=ĒŪ™¨_Ūj×pę—rÛŧ†ŖM€o˜œäŒ``uw9­[›a§]EŖÛˆå• €N6¯¸ÎÁÆxĪ^õÍũ]´ķ¤ĩļxÖ•Ī‘Ŋŗ,Ī‚Ų$pŅžã8ã­˙„‘QŠ›”Å&îJ‰ų˙Ļg§<đ=é%‡ÄĒP=Ám˛2Ž8Ë2ƒ•bÜÎ9:šTƒ_ûMą’YLfyZPcˆá<ĀOO”§9äįđš=žŖöÍâȗ7Äy ‘ (^sŸSMŌV‚ú¸\[ˆÂlō”*‘xä ˜Č? MFšĻŊ(“ŗĢďģūėŽg 7sĶ zÕyíĩŖũÔ×$ÂąGq*´ŽdÉĖŦy>^ĖÕfömN;KĄãģ1Ÿ6Rę%(0„g€XcqāâŦi’ŪOms%ČB–ō4aĄˏĪĖ “Ÿ”¨ãœĢ Åļ›UŌôÛ9˜Ũ]K:Fd†X%sQķg’A9=°qųÎšÆ´Øˇ{ąŗHVRázšüĮŒŽûy’iæ“Dž’į÷d4i›2Ëĩ Čc‘É#ŸOj§<­öģ.KÄU¸ˇTīUfķ€b¤đn°'ž´ûũBōÖęHĄˇŪ#„ēŗÄĖĄ‚ƒ€AÁÎX}G|bŗåŧŊšŊ†žQ[… Ņ+0yŦ­Žzm Ns÷‡ĩ&§%ÜĻØaE ĘË#7–7ÍˇŋAé€AÅPŸUš–$T‘|Æcœ~ņ€9Ī`ôį¨âĢGĒNO–ˆ!0[ŽX >‡ø‰ú AĢË$//—"0Jŗœœ¨9éĶ<}xÍZkŖ2[2Čc?iōKDäĄˆÆ{ (5´ĶIq´Ėčˇc¸(SĘfí€yö­ØbpėˆT(\ôÉqũjâ,K!A0 îöž(DāoÜĀÁ?ÍņҤ;, )āŸ^ų˙<×?SƒžŊĢčŨ @đæ×ū=cę1ü"ŧâI'Įúžé—ūŠJås]ŋ‰ØŠČ?2ôéÖŊ“M‰Ō3׎ŋ…R×lŦn$ąké6ųr—U 2œ.HmŒ`uāôÁ°¤đžĻ1īî"ŽÔ,œŦ{ļ6ä“å)8÷§CāŨdˇ+ŦNī‹åÆeŒœŽĖ)AÎ"N:đyĢ-ā­/ŨÍŠMˆˆTŧ‘Œ(T ÷;…UôöĪ5xZév^ģͧÖ^kAnpË"™"€ AČÂį8īôĒ6ū Đ&ŗ(5;ŖŦ‘îŠÂųĒ[”ĘüôéÔuģž‡yáĩūŌ•íoŽKG;˛ŖÉ#KģåīÆ:fŦCáũ ŌîšđĨĖs:Ė‹!xAō™_Ėdėwc˜ëSXø:×F{K–Ŋ+'2˙ĒŨĸķŽ|°Äã9ôëLžđşˆ¯/īĄŋF7!HŠ\Ā@Vā~SĶšįšŦ˙<˙9^ũ61”…Kl*äÄ`dtÁã­A?‚ÅŊú\ާLfs ~NĖąs&Õ`Ų85vÃÂ“Ûø:ãEšâ!,ÎHš8ōyÁÉ\õČĮ ĢYøíį†GÕYâIÖ_'Ę*§nīGę`ŊúTđ¯d‰wŽļļę–âx`Ų…TeÉųû’ũ;SŖđ,ˇ2ÅtēëKŒė`™Â2°2…ÃdGÔWG.s7‡ĨŌĻŧY${cnŗą€c XŒōs“Æ;rũGmnbķÖEÅ‚#*T¤h‡šČų™=i–ėĩyŖđČÔ.œĘÂâE/ŅBųåCöBķô™câ[įŠH"DšškŖųĄZaæĖ î>Uį†É#ˇQņeÃ[Ũ,Q¤Lm$¸†gpiGduR9ČUĪĻâ1ÍÉŧS+Hlā“÷Œæ\mŲ‰DY|)ÆíÁ‡ļj¸ņx1û“ą9q–Û†Áōūc—ĮAøTŌjˇßđ†^ę1˝s¸ !n0’:Ž00píέR>"šÂФ—1„ŗ]ōH•#ÉÂ| ų›¸ŧTm¯_Éu ¸ŠÜDh¤E›;vKŽwÄã€x>ÕfËtļéœxšp‘¸RUvŗo †ÂƒųõÅĢŨRK+ņpČģSpUËJ¨_įQÜ_I=–wnŌ[Ĩ䑺•Uc°ĄmŊ=ģ Ī]~ęęîĻ$BđÄaKrY—ÉŪšwnvãę9Ģ2k—FöwÎhÕ!HāšÜÆ É!]Ä0V8Į€yįž§ę7w÷ķ ņ3,R¤ļŽĶŦæ$ō”a×Ė‘TŒˇpƒŸZˆx™n%…’Öä;œŌ=Ā ¨w6 ųq"õ5 × Ļ&[G ,jĐÄ6îbKķœãĸ7ÎĻ–åātŠH H╨A;Ac“Ø•˙ ÆšÖÔFī'Ι“8Ķîë͌zûRdfHY~mäe§Î“œõ"’+ø.ídš<¤k†bGļīäGŋ5 úŊœĄhÕĀũá/ <`6ė`ã†T°M ÍÚŦ¸–â&įpÃ@8ėGĨiK#y‡=AwíhJ ŋ.3†ĪļJū´{ˆgk†Ōw˜ē( å¤`ž§9ôúŅkākHĖLˇeDqÃ@Ĩü§ ¤‘ÜāME˙…Ũ´Fā(ZՌp…ŪUdˆ–Áå€b2{¯ÉĢZˇ‡-uGŗĶäÔ MohéĩæhČN #ĮcČĮZĄ‚-ūØ—ŠŠS•PˆĘĐōĪ×­6ÛĀ0Ācc}ŊĄ1Ã@%O96æŨ–ú2Öėį'‘ķđO’īŗSi>ŧļđŊū‘uq’åƒy‘ŠÆ6¨Ô!g’%UU˃Ķ&lŖ Æ:ŪoDÁĘ_H2ûÔ° O2œ:Ÿß7>ÃŪĢAá+s=—Û “$$€2¨dDV¸ĪîĪ=úIoá+9n%Š MŨ­äŒÎÉû֙pO<—<ķĀŠ`økiqcrˇŽÍlČûLcø<ŗĮš§GoŖAoo%ēæ1ĩâHä,@ʑō“ČáqžÅKm™5ČÕáaæÍ%Œ§Ą¤Î3€™ãøEUÚ-ėĶ1…Ę%ķgBBõEpXc ”_CÅKmĨYZ\ āČ`Œˆ$ ŦûßüĮ'žIĮnĩizdķKžŪee›qųŨFâRBWœrÁIĮRžĩ5æŸc$Ō\Á#;Äaqæ2Ģ'<Š#9Á5WûK’āĖ Ĩ%Y¤ķ.U”Š$78 ŸN* ü=ĻũžHQ'ŠC\;6ߕ—×ŅØ~?J[;;%Ķ•I,i˛eØ*ü۔ĢdņšsÔūU ūͤHŖû+íQûŋ˜‚˜@_Lnr;ƒAD6V“ÛĮ5´÷~D˛-Ō’ų]ĮŠÃ:úr)m,­´›…’Ųey KÖ!`Œü=}úsPŽ‹f‹˜h‹27ÉķU÷ČéŖčŠ;SaĐĄíŧĢ̃åüĩm¸ÂnÚË˙MíS^é‘Ivō™gW‘‘Ã&–ČA9É9Î{qU'đøSö›{ģ„ųüÆ$)?q×͝Ό°' E n! ‰! Ę|ŗÜōšéÔ6G'4ZyļšŗKà ¸ŪeRę] ŦFGãŪĒĮkkâåI~ü‘š!ƒ Iā{dŧ{b–Ō`yäŠS;Éō•r6Œ d9b=…PtÚDo%MËF(@•œc†'žrEBúT VœŸ2=˛p9S´pāüŖķééšlčSí Û˛•ėPŠĮáœvöĮ&ą…[Ė3āČÂwßŋŽzdã4YÛĻovT‰cBĒ~b0#qßŋJ׎PÉŗ¯U$įÜķRÁ2n••ŋŧ¯˙[õ?JTWgīŠmNp=ë7Äwtœ#1rãī v9įë\,ÜH{ķ_Høm˜økM8~Íå´W…üIlø˙TúĮ˙ĸÖšZíĩBOŽ@'¤ĢšöģWgO”){öŦ]sMŽęīOžží`KY×Br1’¸÷ŨôŦŊRßAņˇgžū .bûÆüȤĢōQ´Á‰Šmŧ ¨ļ’;ĮũĶ.G–rÛ^6üĮœFŖŌ§¸đ ĩÕô÷ūäJ—?*ÎâI-čŨŊ*œ ­ŧ–u"Qؐdˇ¯ČĘ;ōFėįÔ | k4ŋn‹PŽx&”\‚‘H3)˛¸$ū÷†í´V—…´[]]ŲĻĨō\ís¨Wڟ.HÉŨ“ÔúæĒMāT}^[ãw -vnüĄģ{˜ü‹øã„‚‰ŒŽÍĒ2ä”Ę6F7šŠí<5ēm\ÍōÆ ŧMĀWW*>|m8éØą÷?ƒî’Æ(˙´<ü´*g,ŅŧHĒĄąķĀ…l82žšÜ×íūĘ;vž[MķĻÖfÆü¸9qŽĩ‰ƒuE„C˙ %Ęí_ŧĒÄĄ!2W-Ôė9˙|ū5­ŧ tĐL̝ˇ¸ŽedMÛ7ēėĪŪųēs“]&ЧO@°ËÚbpü•;[zí"šøCuČ,^ŪĶZXKŊBŧ‹´îœ`ād˛įũÜõŽ›EĶæĶtÆĩ’UvķĨq"“Œ;ŗŊN˙Žš‡đ˙‰"ĶËEĢKq2A2`^H šR Œ`ž~c“Ā5 đŋ‰dķfRŠ;—‹igēũ7pŅ›ph~&q›Vi>HÕ6]H0 ļ~RI*ĖÆHÆ1‹Ąë0ß#ÛëWn.CyÎī/’§$37‚6ōÍiøcNžĶėŽNŖ"Kq<‰)q+HXųH„’@ęTœ{ÚŽę"ųíœHb{yŧČÎíd ŖŸĶéX#Â6ŗ[ ­å:ãzY|¸ĶÎ" ys‘Đj?…ÂũĄÖÂĈš;Wzí“ÖĒMá$¨ûrŖl13˜8+ˆÔ`g†ũŌķ“ÔņĶŪf¸ŽUÔysI,@ÅÛÍÃü܀xíØöĸĮ‰amt—ˆę¸ŋvɍ۸1 vĀõī„žÛ|÷æ^Fuv–ƒģ¨u˙hÔڟ‡ÎĄĒEt.­ãDyOũü8Á9ũ§Ŋ2 Įg¤]éąÜFŌ…8ļ€|´CōįJdō3¸ũk%ŧ+#kR܁á,Ž$(0…e.U9ã#ƒë–úS‚Ŗkxai ĘÛ*-¸%VEŨ׎eVõĘū"QáYŖēŠXρcŠ_0 gfė}§ūú=iڏ†懧Ų< Ih‹˜ąä•Ųĩ°;g¯ļíTî<5vcwr&-FXđšËÁĀáČlgŲęGĨŪEđƒaUŸqũė‡%‰ ÜN1Ž§Ōąâđîą…L°–…÷f~2ņļ0‡ü ĨZÕ´­ZãUķ­.DQųM&RŦ VĀŦ§‚:sĐb;Ŋ+W¸ŠXáBM“ĘÛIer=HãĶ€jœÚ6ļųo´í 0î\rį^ätÆMDÚNĻ÷Ūy¸Ä…ĘJØPe-ŒcæãĨMĻé—ļ—1ų÷†+uEQ.TˆÚT'9éÚĢÜi÷īv$iåXŧÀ“8ãÍ'˙soʲ^ÂūhŽRI%.Š"/#Œ<°¤.x??9ö÷æIŦĩ#Čf–rWavṁÆŪJ÷íųÃ ŽĄˆ$w1ũė 9čŊzįŖqīÛĩtƒPUŒžæ(w[ÛČüqÛú֕€Ŋ…pō&Õ$+ķž9ö?ũ~õ~Yd úã#4æi7*4i´ōGuÁ§3´EŅ‹f?)˙Éã˙×YŪ$v:>–QÉ9ė}k‡”‚īÆ9é_Iø\ƒá]/<“i?đ^ņ/ˆŸ§îą˙~ÖšJė¯7ÔcŦĢÖŊ˛*BžŲÃņŠúܖŋé"!nŰŅīÉ܇#‘ƒōãčÆšøŧąÃķß#œ æØü˙ęÎ?wę>ņéWÃ6‚{¨õ;F‰Yd”e°˛|ęX‰* rIIČæĨĩđ [ykĢ’<š#ŒŦ$ۊĨĶÁųI?Ū zVÖ•á‘ŖęO|.@öū@‰#`Ē2ÁfbĮŨíÜ×Đü%.“ŦAzÚĢKåD"1ydo_-“¸ã”Ī˙ĒĢÜø oíģˇÕ–Ô¤˛:mʰ)|nŨÉÁÛͧjĩyáÛØü/gĻYŨ–h§Í“•w|í‚ÅŽGl㚆ËÃÛÍWÚô÷Ĩ1y^eXØmáũXŽĘ3TĮ‚īm-Ō œ[4â_6FP™_”˙7Ä҆5Č~Ėnņ-õĩÄ/Ģæ‰ŅŨɂ š˛™aĩ”uĮqÅ'ü#ž!…n͞§ 1ÜË$lj<„f”ƒŧrŅįvsNmÄM<˙Úy’2ƒ/'ĪŧŒPŋ(èÚéœö:Ä>!Ô´ÛOėų`°ŧVß8훍ŋ0Ī8?Žk&į@ņMÅĨ՜ēœ%ÆåōÚgä(íÎčøī´ū:Ū$Ō5í@…͝ĸ‚Ũ­š7Ž%XÜį(3ÛÖ-ˇ…5}!'dļļí2ļY[ŠŲRISüB^?ÛĪ^Fö‘eĢÛ_“y{ö‹coĩˇ˛“杤‘€8ÎņČėŧž‚ĻĢmi(ÕĨYĨ2…[?.ÅvÉŨģķā—Vˇš¸žÂhl†ā<Ģ›w.ĮëĪĖTāņÁúW==‰WOTČ.„AC Fßõp?ÚķFėúwūßĶaŊ†Ī"C2O!R͸˜Ë’ƒvyÂãߊÆ[ j{Ũ4ęŌÅo*4ĘdVAĒî~é,˜ĮßGW†ōshöąI(Žv2FŒ˛Fr@#q^+&Ę ~gŦëoÔÆčÉGįŸģ¸J2@#Ļ5uĩîíÃwCęqĘ6ŠŠ}§d?Ųˇ‘šmd&5ķwRT)ã×8⎠›“áč<Á#]ĨÜ$-¸¸Qœ÷Îr=yĒz~Š},‹éˆUNG+ŗnKsŊĮüŖž™dÔ/œ%-ŖdHd*\Žz…éč>•ŧŋeēģĩYŧÉ(ķwI äôÉ'Ļ:Ą¨\ĪũĄn"‘ˆV QI%ŗ‘ę;}3ÆjĄÖ5ŗ|ûÆˇ Ė‡Í‚zgß_ʒãVŧYæ0X;×$’#“ĮŗøRļĨ*ģFÛgvæ$†S×Ÿ˜žüŠ[ Fk̨܁¸Ģoēãaõ5°$,ĘÄ&AÉQĮũ~ĸĨŒ‚͸°É;ąôãŋĶžĩbIƒÜ˓ԱįœgúÖ‰îa})68Üe¨cĪĩqŌIšØžšī_HøPĢxOHn§ėq˙č"ŧ/âSgâ¨qŽbãūŲ%rŋ…vr†œ1œs]Į‰>!XxrQcR^ß _1CíHō ļÍ÷x7$ŠĖĶuÅņ´ęĢ;XÜàĮˇp!×h`r2Tí9ā~ŖbËÂĐ=ŗ nB‘J˛•hÛlã–ĮLįOMđčĶtĢí<ęHŗ^@Į"ĨXC°3’~RßūŦÕ[Ÿę÷Wé­É„2H™”‰>\–Ā8íˇŪ›cāÍOėAŽ5™Ä ’9ōä;rsģæ+~.H̃ÁڇŲäëˇF]¨ ī`„‰77s€Sj`sœš¯/ƒuņw$‹â9Ô3’¤Ë!Ú§wđ“Ž7/ũķīQÉám^kchúŅcöc¨nfY%qČÜęGÁZZö‰Ē][éöÖ:ŒvŗG‘¸iŨ ’ 6ōqƒS\hvS\‡š‚ņn ™ä  ›~Ԩɐ¸üF6‘ā˙iæŅ$ÖŲÛˌđÁränęŊ2>īC“ČĮ:šĻ‹Ŧ]ę3ÜYß˙ŖČ˜Ü™x°Gä H nÜ œ‚ÁėWëœI4ī†Ė:„ ųq°zžršĪŨĪĐúÔÚjxĻ˙d’ŨOmƒîEɂ/C˜Ŋø'ęĶiã2‘nŊG>JųŸ* ?!ąę:d}WĄHŦÆPUą6æLĒķÃ(lœį>Üâŋˆuģ–M¨‹<•YÂC&$&3ŒÜœvd€o隭ܚšŲēoGžr%ū!‰d  Ú‹ƒŽũAĀ,ģņöē­Õ¨ŠąmÃ4…FwÄŋ7qūˇŽ1ōõ<â֙ŠM}q=´‰I20ہeų˛8 eé{ã5‰mâ ČŅĖ–?kd•”ʏ†Ĩ‘`sšP}'§:> ÕΎcÛ 2ūęI|ģwå9<‘Ú—MÖ>ßröæÜ",e˛>^“k —8úúd䯊åWo2ÆįũTûØãÎĀ Pg&ßø‡¯x˜G5œfÚ2wÚnUÂäü¤ žŧäs֝gâ‡ē{Xåą‰Ž‹ūˇp@茤üšįĖÁčžEXÔuĢ{É­­–,FmX°V2m…HÚp¸G#Žšâ;ljˇ(‘@č­9f‘2ĸ¸]Ŗ’6°ųŊAéLŸ][gW1Ŧ­!†Y”¨;”ŽĖ=˙,Õã-į%ŗ´[BŽÉwJ¸÷Ŗ >ĸŽę÷Ëi¨iÖō oy<ûV€ŽĐ̘Õö’Hūķ`ôéO†öÚíŠElcTDv’Br~vR˙€ŸĖôĒÚ)į:B“žŲUįxųą˙œĐˇ°ŪFŌEČŨķF@qÎ6äô5žuKTŽ7tß*åUŊyáž§Šdš’Ŧ–Î$ČĘ:cj’Ŗ=}øÆj+‰ü™üļ6°$ēû‹ŌĨĩš)å{vʑ’YĀĮū*jĐt…Ų4ųxVËņĢ*ȊÎŅČņ÷ŠŖ08eÉā)ôäV?‰H]* dūD˙Z䛩 ĩôŸ„|!Ĩzũ–?ũW†|KĀøƒĒx˙ôZW)]”e?ŋí\ŪŋŅxƒP[€|ß´9l÷É'5ģđķN¸Ô|R‰˛BŪf’hÎ `ĄPß÷Ķ/į^žšĒ/“XšžßĪŨ~ÔņîA~éÜw`lrīxkQÕõšąēŽË–ZgBŦ‹0Č*üôSųū:6žÖ?ąĩģ[ũDÜË ĮéYŖr°é´cņžr8+=|-⅌íÖ¤Pc`‘-ãĒÄK7Šß+px €0GM XŗŅ5›oĩÄoŽÔŽō|¯å*n,A# ¤ƒÉ#Ŧķáŋ$ë˙w•Č[éXíŨ/Fd8ĀhøčvsëPÛxKĖJŖ Wg0´‹s!Ü~A ¯?4ˆÜôÚqī~ĪÚô~"ŗžŊžŽæÖ Ō6É‰XJĄ@+‡8tųŽSNâ)õ{×[Ų °k°å˛ņîŒüĄsˇ ęÍÎ0)ņxwÄQqŦJĘ.™DćˆįhÆĐTä #$cw9ĒĐx{ÅVö°G§HR4ōŌVE*ĸ Tŧ–nwÁ“č~ xĸ’î˙íI ‰É”0Ņļd$ŗĮS“Vĩ=YģđŪ— wQ˙kÛĘ.%–Rpc‚bĀ~Ēsi^3inZ-J$ŲŒq™2Peö€JįŒĻ}vžĩdé>.V¸Î°Œ™P›iûęOQŒm.ŋđ÷އC]U4ăVHÍÄ`*ČÍ8äĮëŸjžW €:zņ@ B‚¸¤#k““Œp8$BĒäŒwāPNXāŽ};Rí !,KqÁė?Î)’#Ęö9¤ÆÅ'— u˜čΙP9āSãĘŽyČâŠę:ĒØ4aĸšw—vØâ› '¯ˇ^:ÖMΌ,-Đ;-ÉW‹ÎL(ųâ*ėsĶšÁÁã§"žŪ&˛H‡› Č8;Ī–>@Ĩ2ĮžŸŧCĮ¯ąÂĮâ[iÎ#ŽäōI,•Šî d‘GNĮˇ5ü%SŽmŲ÷D‹¸đA}™ųsžsĶ wÅ6鹨”É7Ė‹"%Đ̰qŽÅQū˜úUF{dŌÎĄr‹`F}Ajsén\Ü[Åu$d*šŲF9ô,„údzÔI&„ʲAœ@(Z5BŨƒŒöąŸCīLŽķJXĖ6ßcHX3DVãŠÆôájĄ}+jĸÁdō0ČP¨ ŽBu8įëÆ*?;JPZ%ĩEaˇåÚģÉĀĮbZ…dŗˇÔ–#omÄ áwIšĪ^1ŪŖkÍ:Ûū=ÖŨQ˛ß#Ē€F98úņũ3UbNw Šm¸€Ęģ÷ė;”~CŌĢ­DxtŽ6@ à pyüq×Ō‘ĨĩšH䑑ˇ&pį^ŊõĘĨŽ+rH” Ãäœ÷ëĪzrēągØ0@û¤ũ1ūÂĻI$qˇ*¸ëų~Tæ‘˛ÅŠĢƒķšÆņáon[ąbpÅŗŒsĶŪšÃ÷ŗ_Hø9‰đ~“œ`Ú§€¯ø•ŸøX:Ļ}c˙Ņk\­vÚXøėŪi8Ŋz>ĩāũ\_:ōĶ%@ķãb¯Į¯cøƒW4M&ÃÃ֒ZéÖŪTrŌw;‘ĀÉ'ÜņĐdņÍ2iö/ėcQ9}¤Œļō'8F5*xģI[Ųmŧėųe:†1Î~Pį^G0īZSxĻŌßBū֎9g´ėSŒŒü¤nÆrv€r>´’x§LŽQ÷ âM9*yÆq‘ü$õíÍ>h3á Ô`$•ÆĶČČĪ× 'č9­/´Bë5pI nÖKøšÆ F[IḀC›$ŦÄRvŽyÎXôÉôŠÄúRĘ1ĒÚ=Ę=7g=:`ũ9ĸįÄúm†¨ļ7-åb!#JĖĸ5°“’ISĀ•eYÉO™Ŋ~âpN8éUĸ‹Ã÷ļöîąF‘l ’¸HK9nyį8<ŽhŽÛ@IŒo‰A—Īķ›`fä†Ũ÷ˇŊqíN}3Fw’&…|´îŦĪōЏđvã ŨÚ­}žÄiōØ1gļēyO9l)P¸œų“ŠĻtÍ&\ŧļō’ãq‘ĻryŲÎíŲĪî͟aīV.`˛hĄ†h]ÖƒÍlŠ“œœî=}ꝕ†ƒu {xãx†Kų€:2¨’20‹ĮlsיáĶtí6ánmâxÜ9ä’Bƒ‘žIØŋ=ķUŖĶmg7\ƒ1–0™† ĀÁ˙dsõ÷ЧԴų]${wܒ4‹û΋‰Ž{˛ƒéÅgËĄiΎXįUTōÂîÎÃ?ī’Fi‘éöj“(žá&ožbŽFwuĪęŒûƒj+ -$IÖōË Rŗ Ģaõčžš–ŪßNŋ7Y•#¸ķXŽõ¨]ßw(|v¨›FđU˛•{›E01Gy÷>PģNOGßûŋZHđÔpˇö~Ąk ČÛ{N$RJ¨ØTœ7 ŧzũhŊĶôCKĶŦŖÔíRÚÕA,’Š2ĮĩĸÆėŒd’ õŠ§Đ´­c–FTĩYZU’K€¨w:ļ ?ÂYTŽüc<‘YÍáĪ6b:’nDēNPėÛÛŠ^ųɧÁĸøhÍ%Ü:´°=ŊÎÆˆÍäFPx…qĪ!~´ÍbUĶmš˙Tģi,<Ëy-ĨË(%ŲÆ?ÕĮ\ûŅgŖx2YV$šŨ!‘¤ +ãå ° Čhķ;’:œÔŌŧ=Ŗi1íK­ésh-öģ"‰eˇ ĄrpĮ‘Û“Ī5šÚ…ŒQéâķĖ”D°´ą2’&EfÚģr<ļ䎄į;ĒøEôi<Į]RUĀ_™$ˆ*bā.0'Į^=-i6Ö]ÄĐZjŌ<Ŋ2@ØdYqÜ ‚~īrĮŌŠZø;MŽHĄ‹Rŧg‰ÃY Ā1ËĐSŌŖ˙…lĻŪˇÜ=˛2ÛšŋÕ€<ĨQWm<am CΏ”Äa)Ŋ†@ŒļDŒ{V–‰ŖE ißdˇ–YœągÆáĀ‘Œā3íF­SÜX™.RŪT˜ŧAČÃąFL`ōx~‚˛ÛÂvģŖ"ęA,&'MčŦ™Xüŗō‘Ņ” û¨=ĒũΔ’Ų[[Å1‰­Z9#*ƒŽĘŒ Æ8#Ž<1›D_PÚžR[ đŠ ģBã H-?ĄÍ  Ĩ­ÕĩÉŋŒK%x†S'Qģž%#ˇ jІĸ@×QŒā]҆-ĩ"\gp˙ž`œcŠÆ1šVđ܉k Žx%›÷0$áksŗ-“’^3ŽÕ~ōÉfŗˇ†Ųã"•ãŪŽ`šį¯PjÎ>+$ Ô`ÚHŌ ō†iíaŸ˜01ŒU)<"É!{‹Ve`s'ķÉíßđĶ5•…íĻ­u¨Ë%žÉœåä8ÛrxmŨķžGŒr-ßé s~—3MjJ ‰!Ÿs(<įnęĮ8˛ãđˆ#ˆ]Ãĩchâ,§p,[žH`\…ˏ-ēfŽBnŠÚnaÚĄUö}˜į#-Éã8Å:ßĀz<´‘ĩĀrŌgtL0bÆ>īũŽ:ÕWđ–ŧû‚ßČ!`‘ŧ>[ ‚rQī×šŅ›ÃrÜčĪiũŖ8=&ŠgQ#FÃ*‚zãÉΏ5Hx JK9-žŅt‘šP[+¸b#ÁÛüJNzúŒSn~i7BCöĢÕIY>Uc!*2Ŋ3+uį§4éŧ§Ü$Î×Wgy“æÜŧķrË˙MœūUømöwH/.ĻgW.€ Q˛0ԃØõĪJĐÕü+gŦIų$"áФ26Ūe# ĨeÉā+%ķSíˇĨdR_qV'ä‘3’šÎ$nūjŧ˙,žJ^\(”xBy.xã?ÆGĶ­ČümČŊœ…•Ĩ]Ę8f’9p9j];Âqéw‰=­äÁ‘<•RY1•'Ä#é¸ûWBO?(ĪNôų‡8úŠ~8gœäsõŦbÎ{Ų´šbA"Û]y¯ķ`íōŨxĪ|°üĢk n{ÛÉŪGTvŒĮw_"¨d,Úė+ķģ7ŋRÛZ‚[!rג$ŦĒë Ód–ė2a8ÉšĖļú~ĩ"†ŋ•ŽYg…šE”yeRDmʄp@Vį×<_ÕmīEíÅÔąŨlĢn’ļJŽ['>šSĮüķúVjiW6×:d‘iŗ8ļšYn%gˆK3ŧeYņģ’03Đ{ éZÃvn/î%ŽHEזFC*ᛰî'û ô"šø­üIa˙y4…@ų匏š|sœ–Û‘ĐRÍaŠÍ* ĸ¸"Fˇuq$ykšc‚qģi^™úž´õ‹ÄžLO&˙8m3‚ŅídōĐ0_GŨŋųzķŒTËc5ŋ‡öeķ>Ú$1ā;l7Aŗōä}܏CTšÂæĘ[Éį…äIŽŖ”*(ŨÄÎÄppF9ÜØëŽÜhęv˙m’ŅTŧHĨbŠ-xČĮB3ę:U + ŖÔâYU"f†āĸ$xXTŧ[F g qĐjģ=FáŒW/"ÂĶbEEBĒžhÆ8$ŠL“žā{ŠĩŽU'†M5üČČũ⃐AęAęštĀŦļūĐ´–UQ<‘Tļ-ÎÖ*b†B<ÁĮœ3MŠģÁs‹ƒ"Ģų¨-K*žSäČę2 úÕÍNæâÚ[dĩ‰˜;ūøˆY€(<€{=Nŧ`ÅŠ\Ík4BšGĖJÄÍÕĐ`€8. Ë{ÛâĖRÛæ^§ėī€@sĪNuū*…î/<Ũæ&#1ąÂˇĖŗÁn}Ē8Žn.–%•c@˙|ųMãœįŸįQ]Mqąmƒ‚prA{ûÔ>ląiŅIJĨÔą$į>˙Vkģ#"ĒŠAĮ=8Šė™HdQ¸ąÜõĀsVX…šâˆ÷î ÃĀ=ętŒF’0l <ŧÆUKž0Oųõ¨DlŽĄˇŖŽx˙=)L{W+œ×õ¨ŽÕؤĮ\xoƒŨéĖģÔ ÜTđsūzRD nĮGEĨ1ö¸‚‚Nī|æ–]ʸHŽÜsųĶC6âNáNEË1 ģŒsŌ˜å ÉĀČ+øņUÃ>ü6@ÆAîOsŪĨįaIÁ })ŅĄdn0zĶ;X’[äņO‹–ô>ŧ˙ŸÎ˛{Æ-#â V(ÜīLŽ›Ŗäa}^†š§éš¯&ą5ÄŅD"Ž9…Â,Û¤ œČŅü™_›îˇ^OnŊS›X)pŅ%´†MŪY\ä¸ā‘ČĘ}úqЉĩ¸Ė*Âö?÷‹’J+Įa†ŋ+čŋx3K8û:ķšņOˆßō>jX˙ôZ×1^‹đû?đÜH2HSüëÖQ,zzfŖÃgQō‚]ŧԆYÆÕ% ŽxöĢjÎ2ԓŽoņŠÖv ¸@d-–ãüņRJ_w°y$˙ZB͡rāqŸ˜u˙9ĻNĖĀÛww’7lŒ‡ĶĨF%f\¸÷ÍZŽGŪĒ͎=šíū}éLŦø@ôü)žī>öāTŽFiÆVōøV×đĒí;ÔŗˇVåÚ3̓ëߊBî_æ FFNz~TŲ'ōØ 1Á9Å7ĪØËōāį'žôÃpDtdôĮų÷¤Y^Aķ)'9˙=Ё%%WiĮ>˙įŠ<æŪŠĘŽ}ņÁŠBîŲf>x5(P#!@ü&˛'šākÖÖĒUVKy§l÷ehĀ aÍ`EâK›†ąLKö˜ā @É$RI‘ė6ĖúVÅäĐømĩU(dK??aáI ģŧâ¨[ø…šõ`hĨ9†~KFī#‡%Fü ž9ë‘Jž+Ķe' *ü›Étä>YÉĪ áž€ú'×,<ĻŽæŌĸVŽâVRHüĀnSÆp>‡E¨E5ôkŦąÜÜ!ŪĪߕ1Ô÷¸Į_ŊõĻęڔš}ģ-¤G,™#„RØ9ėxõ¨ĄÖlæYfHĀyf3šŽŪ™aƒøö8lúŊĨЎãĖ[€Ēŋ$,ÁUÛ`ų€āP1U%ņ%ŠXĩĖ,d °  9V)“Žëū#-ÄvŠŗ8Ž#fČe(āÆí#¸•Nj9õû!×rĒģrÛšlČ?wŽ9#ˇ>•-ÛCi2Ë+‘ļĸļŌv几!yĮ'ÚĢÍĢC%ÕÄ9wcP™RL¤—Pœl'##ŋj‚ kNŠŨ.„M°Se€l)ÚāƒĮniæūÃ%~ЎÛĖ ´gAà ãîôôĪZĢ=ū’ÖbQom2‘WČ sĮnÎ8#ÔR4zmœÍæ[ÛÆ&VЀU@éĶ‘ĮøÔ.úhˇ2ũšŨc“iVH‡$°8ŗøUžÍ•wÛÛŽĮd 6rFņĶHŌ(¤Ú H[‰`:`öíŒUcšʍo8”/×ķō¨ XĨ˛ÆžC¨ŠžŸįųÕyRO5<’¤äē÷üɨˇBc(žT`Œđ}ģū•,B1—Į#pc†īĮâięųŒķŒcųRģ+!`äÁõĢ–NvŽAČNßŌ˛ŧPáŽ`ÁÎį#ĄĪJÁë_Dx.B|Ĩ…QÅēæŧ_â)Įš™3ū‹Zæ+ŅūãûZ䑞ķ¯Z‰>N:îŌ$X’§‘Č'éR$¨˛ãåņÎ?J°Œ–.r9ãĨNŦië‘ËãžÜTĢpî8\đxĪ —váÎۅ˙>´Žû‰Üp¨õšMáãČÎÂz“øPÉæŲԟ­déąÉgŦęė,™Rîė:Ę6´DŖ'œōĘÜuį8æĢę–z‹ëĸ˙O‰b—ė‰oö’♐°*NN7‘Í5Ąņ#2k™â‘Ą¸vHDLŠęëå(,ŧŠ]ŨyõÅWKo%üĐËĖŦ‚"]đžRžÛ÷ŗÂ‘`K%ūņĸg-$ŽėńA*í Į$ĄoŊŸĀõēSšōlŪ][[ŨĸBNKļA §€Ąqߓ’NĢņHЎSČĨY Į*žr*˛áFO•ŊŊ7}*Ë>žŗ•YY­„ˆ›™#Y6oæN›wc‚¤}Ü‚0zš‹~ÍΚéúŌI$` TųY°@ŸëM&6”‚r¸ÎæīQŦ€™pÃj˙Wz3†8Ą<{BÉÛļO˛2%Bō0}ŋd,˛ „Æ ?†HĪų÷Ĩ‘ĐœwāŠ÷dGØĀ *ÜVq^Û\]L‘ĘĒĐÄZ]›ˇ•Č89*?JÎcĄB#´XĄEÄâeP¸\m=•ČöīRFtilŌÚk9-§ fIĮĖ:äđyúÔ7qčĢx<­Â˜ĄQæüáŋ€r'SęjŦÍĸÁ*H‰`øFTq„ˆ ÄrF3īNh´;gŠÚSi’ΈŒCJWœ˙ÁĪn=([]5c¤‚ŨÄ2âã¸äąÁápO Š÷Q[jÉ:ĖĨ…ģŧ$ī(Sg#ŒëÚĢϟ`’ŦĸĩĀ>bŸ´ˇÎŪ§wĖŧ@Įi§ßęxĶ4„'—ĩwÃG!įŽ r>€ŠtšNšBD-ˆBąėķXå ‚Ø8ÉÁ=8¨§Ō4÷%ŖîĮúÁ+PŽwg?"ķÛmUūβē’xWCåČžk÷L äōJ7QũãŪŽŨÚÅxą‹˜dvŒåH‘ ‘čzüŖüæĒCĨYųą“ ÆČ@V2¸Û‚Ø ĪæoΓûTōˆAVR$ ‚¨`įĻŅÃÖŠ\h6o3ģ,Ŧ n#vCdīīרÎ8¨ßH‹r=Ëlŗ?ĖĘ wā_CųōÛËXŽŲ_Θ:`ŠûęyãÕåPKn‹k¨’]ŠCnãpÂŨĮP;U)ôëyPƒu0nIāsË7÷}]ēS˛5ŗI]J°e'h܏ä*•îœĒ Y_vÖ; ŲÉéĮRx¨Ĩ˛‹Î2KžI%AįŸcÃڕāÛąŨ|˛6°\‘Ž•PÚÆ¯‚ĖH¨ļ—ŅĀ-'¸’XžUhļ}Õ+ģĢī­>={M?Ųĸ)2ēˆ&Ũ‚t$ƒčp1ƒÎ~”–:ü7—-kũ{nb diQÆKŒá‰ĶŽZąÔlõkšļbbfeÆŌ6’§å#=AĒ1ëöÆÉnšÚåmfɗ`ÄۈU 3¸n$cpipI ĩÂMÍp–å$ėwĻpHÃyį9ÁĻËâ}<\KpË Šwļ,€æ*r{(?ˆŠ-|A§]ÍpŦû%•cØš/5G\ō‡<n´‹âm:[Dŧ6ķˆ$â7` 1ķxûÜ|Ė>ö_J°ū ŗ{§ĩŲ3˛F ‹ˇ˜ōĨ°ŨÆ@<ôÎsUOˆ´š!71Ŧp¤ōēŽ|”q•,:ôጐ98Ģšž›yu4PŗŖ˜@ëü@āŨ }ĒíÄö–ë:Æe`‘+nn¸ũj=:úÆöŌ ¸gČ™WagÁä=yéÖ§/pö Į5šÛ,ËŗpRwņž0>žÔ—76VörÜŧĘ"ˆf;qÉāwũjX¤˛ęà šä⠌ƒÍ+ˆĐüĀŨ2{ûTWöŅKq+2EŗIˇ' ž:“ÚĢÉwkkh÷ÎåmãˆĖ—‰ĀįŪŦf9plŠ‚N:Ķ•ŖXāāp:Uāšë4š G4aŅąŒ†Î#ōŠ“‚ zįՙ¨[‰ĩk¯´K ĀF¸tb¤ŠČ=Ņy^}‰Ŧģ I†Kq+LBĢûÃB<Ž9ی÷'­:Om-suwnędķ5žũīšGŪü;đMCaĸ^iē„Sąˇš x„HY0ØØpÉāœGLsۘÚO(yd„ĸĘX ÜX4‚L788$ėĮ֝‡ŒSŲ9&H™<ĮQŒĸF¨Sœ†(¤ôÆ m­ÁxÖ7Ø\€Ėę6sSŽžĩ\Ώ’"RIÁ^iÔĒaC.qĮéū}*&tbį –8Ũˇŧ[“Ãöî×ė'›æ1:’¸ÚŖGČ?^1Ic¤[X\^Iå]¸Âq´0P¤Žü€3PÂ9iX5Ô˙g€)€|쐪œ‘ÎÜ`{sÖĄģđ۟Ē]]­ÍãK4¤<ĒsîŨ¸ÜĖ3ߟjŠĶÂúd˙gš;„š´­Ę+*ēą‡'‚6€~ŧÔōxzĘ`ęŋn÷sNģ\í˛ŠžIĪŪ( uÎHĻZxj /Ox Ė ŖyĻKu"E'q~eę;Ux|KiļôĘļčË .BģsũÎKmõĮÍŧĐŊäR3Û-˛9‰ŗ ĢĀߡ(lc9ī]j$PB‘BĄ""€€0¸íQž@ĖTá}ų™ĒéiĢGö7`,ŨĻÄĮQŒsž*=ë}/_•­ÚGˇ’æSæ}ĸEÄRGÆš`ŲāŽG`i Ķĩ¯íŌââpQŧÅu琠~íŊãŗ#=šôtzĻ Ší bōāŠ6Ûpä]e<ã‡Vč;Uģ[ RŌ×T[‹™e’`ŪC}§8?1Rŋ/ÉÁ_ītöį)ôeRVŽbg–$Î7ǎL“œ28ĪBK§ęQîu–t’I É"ĪĶ÷JšĮL‚Ļ8î8¨˙ŗõ…ž)1rō‚$ķ÷)˙G)žūfOŠĻŨŲj÷+<0´­o,2F#še|WĀĪ䯊ĀžkGUŽūâr–mÜļõA€ž\r¸Į¯NŨk>æÛTžāĢ ^×ΎHãiŧ{Z2wœüÃå|r}ũ ŸûrÚŸXĪîĀš+)ÎŅÔîōįOŠkéô´gYüÃtŦRDEųD¸Īžz’)ļ°k˛Ŧ-+ČÛĘų­!Œ`ˁÕHĪ÷¨^ĶTŧÄžÉnķËÄryr+cÂIN>ĩ!WyYZfAå|¨ąÆÁ vžA8$æ™ĒĻĨuĨĮĮ™$‰Ō`ģ7 āqÁ9ÎĮĩTžÛV$Œē ˜¨‰Â†É'#nxõ¨–=Mĸ‹y;Ų]›1 ä…ęr3žzœÖ{Ļ >Ycv8ƒãîđ=ßōüŌY¯7‡’6vÉeũŅ˙lcū˙}UCy80Á.-žP‚~īoÅŋS1˜_ˆĘ_õ›^ęNŨę3\ˇ 3žÂcũO'ĶŊĘŲDJ•v8ė9ÃÜ uļéD:የÚG`tĪŋĨ\ˇŒ#EŒQÆ>”’EŊ˜m] ‘¸ž•b$0tD#ŽKcˇZÁņ īŧ‹v1éëYôo‚°|Ĩu?čëøWˆ|B'ūŊS?ß_ũk™ÍzĪÂæ@.ƒpI¯P ČĀ G s\^ąe¨ŋ‹´›øôŲĨļŗVYw8˛jÍօĢ^ÜË8ž1Č%UyŨX)Ķ‚åå”ã'ĄįĩXŊ,Ķy“Æą;Bp—˛‚ē–Āۜ”Üŧ{ ņŗŖéú…œˇ†öįÎI$&ûC?ËŊˆųJ§ ôë€)ĮV>'ûWŸörĢ)O´>NU6„mČen„pŪšĻëzUöŖQŲ]}˜,rüņĖŅļæG#øFYŊƝjĪ}Äj˛ˆĩ$ÜŽ^ŲäÎßŪ;a†9DKƒœ Øė s ø†9dtŊPÎæ_øûpÎę# ¸íå~VĘôųÎ;c ĩą¸ƒH†Ę ‘K ˛ÆŽ\ļÖ r@ĪõŦ› VŕåÔŦĐÒbkĻ“kyj¤äõ#úgቴkÍI"Ũ „*ee6Š#ĄÆ_­PˇŌõ´Ŋˇ>uĘÚÅ.UM× eIÅ”Ā ņ휍MZßQž8?ŗŲ–HåG˜UXa¸lqČüí“fqĮ÷IsŪ°­Ŧ5ëK‹Š!ˆÆŌĖīŊŒGpķōģųÎß,ņƒ‘–˙f–;Oˇ2^ŪĢžp+m…Ė˜l|Ŋ“'ŋ?•5‹ŌGs*\ taÁ}ЏäŸŊ¸?ÆĢĒ (‘ŧ­#*…g|eøępįācÚ˛ukĢÛKûXm­žHæp%o!Ü*–9^˜žp:œņƒĪ'ˆĩgĩ´™mā"æØ4dYI–“Ęg*vHÎߛĄŨíVĢŽˆî™­’fHãÎx‡äįų?7 6ûŌ[Wģ?ģH ‹†ˆ°´‘„x˜Į’w`đĨ‰ÆŪzŠ‚}[V‚bŽÆS# Čcm+`æm¤OR‘ņč㎙{uŠËmô5öÅôņÛHmíŖYfU)'îT‘Ũ9V`Ô0jŪĢO"[G¨,*vuRļ6žxęLg<Ž”ÍFöâÖâKXÄ{ĸļŪ<Æ ą*܂@9õíÆrĨÖîk†`ģX^TŸŨģdžr .8é‚z—ŸM&ÂÜ`ä2Hx9‹×ūēcœ”ō;$ēëÉ \1‰Ôq“r ᑎ ä~ČõÆß M䆚]‹‰đŋōĖāc¤‡ņ\u"¤žÕϞŧ’%‰dXŖÉÄØvĘŗFۃiĪąĒךĩŌéķē"Å>܍’ ũߘy\ ęOĨëŌ'›EIq ܲ‚|~a”üÉĪŧęˇXTĀ™$ ŽL‘d”cÕYĩY˙åĸŽĀČr’į,AĀۂ>_cĶžicÔŪęHQâĀ“å%eߏ—+Ķמ¸Ēw:”ąJáÉķՙ†w Æ8ûÃJuÕëĀŅÂT?˒IĮ͐ŖđÉëT~Ũû×B›QT¸R0Aƒƒø~T˛ŪļŨŽŽ>N€ƒƒķ{˙˛icäBá÷ÁNSœįŸONôûWWŒ4dŽ8ÜdzúŠ•†Oš¤ŽHūU$˜Ææf<˙ũ3D2F@>f1ū>ũëÄ_ÛĶË$(Ÿ\šĘšú?Á@éXĮ6ë^ņƒãŊWŧ_ũk›Íz˙ÃÃØ\ĢUŸž=ĢŅ€uˆ¨Œį­r×ÚŽ¯ 3-æwY%T_ą9*ČW•ę ķĮŪ<ņ…’Mc[Íhėå“å•c h˙ëTūíA”eÆ[Qœ=cZ†öSö ĒNĻÚgHĀy~e;˙åžJäŲíÆö‘¨ęW“Ü­íŖÅå(1ˇ”Ā6K9ęF;dt99ĀŃ\ņ 66é™#nŦŅŊ¤Å„žTŦFælŸsũüuÅMwâ l$Ō[XB‚Đn˛• ‹ļCœAU8'ˇß\Gũ¯Ž´ë Åĸŧ~bņZÍĀ–œ‡éĩÜúar2*¤Ū.ņĨˆ’âÎ?1ö˛âŌQ´“9]Ų L‘Đ?N•ŋ¨j7–÷vÄ3ęÛæŌH2@_”üšˆbp6ķXž ×Ŧ´¸"{9'#‡įkYēųjX1Ũ÷$gÔ ^“ÄĖ[fŨ$]ÉÕĩqˆÖuŒwJ’ũ?NjņēĐÅtļáƒÛJíŲĨR’/å$ōJî~BāsŌc¯ë!&qža†7;bœ´Ž§næ^Š ķķq‚mkzžącemqcdnZlå61`Ûr2208 įÔV{k“ęŠˆ!gBāŖeUĸ•Ā98VáA#ŋëwÃúĩí֊īzŅ`TRí‘ŧ‘ËO\ą˙˛zUXŧG¨u-ĸJmVc 7oBĀƒĶ€§$sÜdü&ˇ!Xėĸ!Äš/î|Ī0¯8@N͌õ'ēßxĻõ-Ž "ĖIŗLŽw(L:ām\öųēđ7hë:ÄúlvRÄąH’š¨2_;€œõfP^M%ļĩ-͕ä҈XÁÄmĘIō+tëÁ$~ |a-ŧ˛^Öh7)ãa :NÜįœ“Īĩhčž"}^öD1ˆ° ›˜‘,‘œu|€ņĶwST‡Œ&[ŠPØ@ņ¤År—$Čßž1d.ÎNFqž•Ĩã˙ŗgû:Įo0ļiĸšYAL„FÚ¤¯/ķũÜtãFBÁŊ6ā7åUîõ+i.Ņįĩ˛&“Ėh‰h”m ˙ģ†Ûíģ{;ÆdA’Lsü• ¤Ž;ŽŋäÔ§_wē……Õ›`,Œ 8ëŸL÷īPžģĒHËGdA´į ä}ą?Ë.íq¸ÆCĒ’Ŧ0@ ģ īū}ę™×!ē„M7—~`ģXđA#'ĮŋŊDnÃÅŽäE¸€ųųô\gôĒO}ČKmļĘ3g š žŨÍBúŧˆ˛ŋ1!‰RxĀ'ŒtĮáP5͡ŨTQšļƒŗœô˙ëT-,+a2š°Î;SŪKe@å˜Ôđ…r:u¯"ž†&@ĐÄĒ hŸB=jQ;3UJŒ}áÁöū”Én7“…nr8'G;É$gŨNEcęŦĻåvgäœu5Kojú3Á§ ŌqŒ}+ÂüyƒãWķÛú Ꮭfø^ŋņ,€ņ¯FÆä t÷āņ\¤ž+Wžkh-g‚â$o0|¤yËsęrØú{T‹âČ]­î‘m˜ęĘ aĸŪCz‘×ÖļŽ5y ˛ļ™a`ŌÜĨŋ”X|ģ¤*NA>„ŽįŽœÖ~Ÿã/6ĘÜŨYN×R …F>arĮDŨ}ŗíR×OÕ-áe löîíˇÃy‘ĸā“Œ~đņŒž1“ÁĢŒ ”ÛȖR­ŧ˛"ībÛųåąėŧcōĪ{Vž'Šōkx#͝Q§ TĘǘU – ļqûÅéžū•NûÅą_"ÉjŌÚ§˜ ,aÜʲD€ ?zB:gĶŪhü[lQ],ŽÕL‘ĀC…R˛žŌ# °9ÎØëĪZOÃæC$pʰ$¯áe‰’)$* 6K ƒąœŌ°ņĩíėVmgyŌŠt1ˆĪāsÆx†õŦŲ|ZaÔbífû7™Ęļ÷vcÎŪ&UaÎGSĘ}GaWŠôßėČ.įm2+­še.ēã>ũrRĖs*Ooá܉ö1ã=đs‘Q\x‹Mˇ!î ‘åE-čģËcׄnŸÔfŞše{;ÛÄ%WUcĩâeÎŌc#ũĄųÕ1âM8Ē*Î]€]ČĀ’w€ôÍĮā=E$^*ĶžsĖHI6…ĪŪ*;FįĮ­L5í>Kv+Dˇ nHŗŊ˜'B9nHũj„'ŌÚÖužf‚Há’=Žs†‘ARŨ‘:cĢv‰cĘģ mÚ:ØíYڝÅŊĻŖaö<Ėí0Ž đ¤Ģ¸b@Éã„įŖ¯jM&mjŋčv!UÆåōãQb#fôāü­‚zbŦCs¤iōˇ”öPŠŋaT@ĪN”~#ÔSaĩĐî’8ĸļ°•X‘Ą qŽ2įđĒŪg‡ūŌ. —M#´ÅŖt Íą˛Įx,r}Í>AŖ_Ũåã°¸šqŗslf?xmõčcØúVrÍŖ^O,žUĸMÎH2°Ŋ׌ļOķĢ7Nšx'ŧˇC’‘’I`ũGZÃû îΨžĪFƒ}ā§īĸ ´´Ōíõ#qm2,äˆB €T*ãÔô Ģ[ˇYZyL"ųpģ[88û¤gڒHtqöōš|Öú†'¨ĪŨ99ƒ“Į5 ‚ßN‰HT‰í,Hôž'ĀįĨfÁaĻZ‹X<*ģK’Ãf1׆éŒr}jˇŌĐÆ …Ä)‡fÜNŅRŧ(ĮJ|zUŽ %špŨÄ͡8įҘcĨ=´û)#~‰ŽũÜ ˙xøU1ĻŲ)Œ„udŠYœmwgøæiÉpČōCŒIˇsNGâz ŸåéU?ŗ,Ķ"ų6€Wqã^¸?_ČTW'”TĄÂŋË´ōčsëTv@\9žF.I įqīę Õf†ÅŲVũÚ/ĖŖqÎTÉöô¤•!Ču|ĖF ęH'?ōǝm )*¤đsΝ¨Ļ€8ČHÆ~čį€tcd$!8“ȧ!—6–ĪŠæ˜čƒÔļIö÷HUAaI(Î=eę@}ĩđéU@ĩôw„Té=1öd?ĨxG9ņÆŦ顧°ŽvŊˇá„NtiĪ2’.•ß3ɏ—$â˛÷FŊdkY#cüq|¤ŽæĪ#Ŧ~H¨â_ Ģ1Ž -dPU‚€āü…zsÁp?ŧ=Ft^} 4ëtŸė §°}ĸ,¸m: ÜUx­ü,ĐDąÃĨ=ģ2¨_.6ÚŊēåđ=ÛŪĨ{ŊQšu¸K9$@e¸˛˛ˇĪ€Oo“?‘Štû-æs“kŽfE-nŠCÄĖ™g*p} &4m*ūÎŌ[{yg.‘,¨Û•.ĮĀ;>¤éÅC/†uŽĖļļžE…§•cÄĖʄ=ú§ãŠO7‚a4gIo“b˜Ę Ād`Ąr:chô7ŲüÃbām‹{ĒqÎq“×į<˙´}MG2ørUķä–ÅՕæ &ķšØsę™8îžÕ•Ö€­onma´Ę.ôd¸`ũĖI׌\/†á{i-ŪIŲ#FIn2ŗ~\¸r*CĨxyŦÍËEmöm› ĸ_ŒëœSôôĒĐĻ‹yŠÉi bW|ötíRŠ*ØŌÛi:%ļ­ũļŖˇŦInˇc8ũâ~líĪSŌĨ’Û@}î’Û°ķ<ōĮB9#ž9Ãqœڏ˛hwZeŊ‰0ĩ¨ åGöƒ÷pT€sœ`°ĮLqMm7AMÆ&Ib‘ŸuÁ#d– nĀąĶŊ@t}úá–XŨø6āĩĀËōˇ}ß7Ë#Œō~cVė4›.ž{u&L°/įŗāļŌzœsĩJĒ|?Ą¸”ˆĮ—qÉö‡*ÜąÆ7cf8éÍA/‡4‘kšIˇFŽqpŲBw… –ÆA•ąūõ7MĶ4ÕЍ”S3ÚG18.ëåē>02w.3׎{TīáŨ%˜Đēļāۖâ@Á‰sØņ“#˙ßFĩŖ D#mĀÚŦO?­fjcOžōÅ.¯L3[NŗĮēÍ†9ōņĮN3&ĐtVՊ^LöĪ+ėXYJŽ_{ĒšåÔš@tĄ4x§yã[˗&XĖŧ§Ë"llũŪ§j’:rqŒÔšv‘™uö„žy%ōĖXmŧ‚ĀŒíQœsôÉõĒ­áËuÜÉuv(Q uRIBŽ@ķëNSOŌ­m¯mŽ`›Î‰QĖm´ÆF,[*ĀÜĀqümÚŠŪé:\đ´Ļč˛dx¤%Yš@Î9OĖ1ƒžžŧՕ[Y[Üb;ʗM›2ß. ­‘Ž:` žYí’¸”D#DÂān ˜\üŧõŌŦÉĨG#"™Üy3ŧÁUvî-*˂O¸č}jŅ“d6æiČÚŨ_Ë^A ´œHō׎sČéЗLÂMąĐ ėnÂŽÎÚF9sīĀÉÎI°đI¨imtė>RT (9SĮ|N§5™ũލ#6÷-ä@LŠœ#nNsۅ÷T'BWļEuĒÅ01ƒŧĻí­Üg<õĪĩXA=•Š´ČxÂąCˇĄ,Äį$ärŊķëT×JöwöÅØH€"ŗ”Rvįœ‘ŸlôǰhMŌI! ą”0ˇ’Ø9åąžĀíõ¨_BŠHöųĸBŪklņķ˙´Oņ˙ãĸĨŗļ–ÂV;ōŽG˜0@į‘–'9#Û­V›II–;Ī™¸îAČ/ģžp}?Lš˛Iårį…ÚUA<īß<ũ?,Ö°Šwہ…û˜õéۈâXĻÜą.Pmãˇ$÷'Ô~UZk|&6ŽĶÆ1č˙ĘĢK’ËĪ^GĶüįV-‹ ÁŒ|Ŗ”{SÁÛdŒg4žsĢÁģvéHšķ `đôŦËė É1ĶŽŋAP ×ŅūūÍ'ˇú,g˙á~8ŒŸęŊ×AXIô¯pø`Ē4<‘’\öé^€Ëō¸“‚ŽU<-ĨKxņÁw87ŗáÔ˛™!nG…`}HËdŒÔ­āûQ;Lږ gV.ŽL`Ą%2FcQĪž+GPĐāÕė’Ú{‰ÂÆkFW/ē6BI örk> is]Mę73Í#ƒqxū}ŒŽ€\€¤ƒÆĪ×Ļ&OYÂa•oī EŠ6Äq‚ĄÉЌsׁĪZĶąŌÖÍ$ q3Į#ŗí}¤iÉPzļ>€{“sáŊ?U‰Ļ7ķČKJxŨ 3xĘä/C0cžš9¨dđt)ēxõĮ¸æ/›åā°e`Üĸđ= ÃSÁ–Ÿg%ēēWĻŲ™YSjŽ9_E>˙3zÔķøwO{˜"šė’g–hbb‡ymåÆ9ûįRŪ$į &$đîŦļQâqē( D˨Cä"Ķŗ†8˙jŠžŦų— Ų7;æ?ôĸ¯ĖUv… '¯=ļĢö‹ĢSœ…gfÉs!N3Î1ôūC›-ž§$3J˛T•[€ŧBœ@Ãäôä~UĨ} ×6¤Û|Ž]rå, ÁI?ĨdÉeĒĩâų’3D˛D͙FH`7?1ās둊Om­ˆA>jH‘%dLņĐ˙iú}qJ-õO;qI|¯9]uéûĪCĪ>1Øõ<š÷pęŗYgI¤ŪŒ$Bé˙&ûŧ7ŋ=:bŪ§ “ŦrĒ–ōį7”T0n›ž´Í5.D’GtæAU ̎s7ƒ€AÁsíUu kÉndōQ‰ƒÄC/ģaĀcũãĪÖŠųZƒÉûôŒĒN{NzœđqŸOlÔö‚Qn†å™æōūlíųN: w÷ëY.—ėž[ģČd„—'.AgđĻ\‹į ¸p›—eãä~XĒjˇq/Í… ´ã'ž=q“ųRË#­ŠAås¸ ˙JĒĢ,cåČp œc?ÎŽDá‰c€ËëOvNPéÁéšfŅŽ+“ÔōNsŌ¤€•$ļ ˙ŸJĮŋ¯$;H'ŊAĩķ÷Oå_HxAOü":P$Į¤ú¯*ņ^ƒqqâ}Jháw 9 …8ūU€tIÁ ÃĪĐ׊ü5S˙ęaĖNGnĩÜe  tŨ\“øZöŪįͰ{E O™ãāũŖ˛Œ˙ËU8}ĪĄ­ HžĶÉ7o ¤ĀŅŪXæ;¨ÆÕaņĐchĀėWŌ5ĢŊF)´ÛČ­ĄōŠ3‰™[%s´7ŽG9ųJįÃŖkĐęW ŦŸÎ;/\ÆĖ ¸XŽI+™;Nâ¤xŠh‡s‘‚Iy)–dqƒˇ#*'ļäÍnÂâúĮɡØf3E"‰$d+̐  p+ŧ?ŽF— ox°E,ī+F—n›ƒK+c%NÎ2@äŽ;æˇ5 KŲô9í!š˙JkbŠ'˜T‡ÆdsלŠÅ]X†TÍė¯œĪ$kų‘ųŒUA?t…ečyۃÁÍgŸø–6“QFšÂ܆%R m îųúüŲĮjé´-.ūÂâY¯d2-Ą‡sÍæš*ōąËm\đëÎOÄįkZ>Ĩqx÷tËndŽXĨ}ņ/‘"acQËmĀŽH8íQ.™â%š;Ŗq)ĸģÅöĸ;yĨ—Œņp~æ~ą&â#ä,×3mGųŠŨ°Ęų¨Ä}īî $õô!ĐÚx˜'–WCFŌĘļđ¤oŨƒ‘žŖžsƒŒˇš&ŋyaq Éæģ™J˜6ŨÖī2N~ķÆAŌĩôÖÔĸŊ›ÍûLöō\˜bķ”ĸaœąļã°Eš_[kĮé"‘ģŧŠû~L፠TZĶÄī<­™˜ŗ2œ'œåƒŒüÅŖ(Ŗ9ÁēÖsčÚđąŠ3lí,6EfB‹ēPģIë¸>xčzžoßÄvĸáŲo9ä*Ą6š_ŪĘGCōü›=˛1Ūˇn’æ÷Â÷ 3ŨKfĘŠ2¨bå1†åëÔtŖL‚ō;;‘t&ķMÔĖģØ6Pą('iŖķ˖/ ™aķA3NŅČ] ŒēÉįfŨĪ^3ƒZÚ¸ŧ’Ä 11O ‘*–@ā¸äĶ<ĪJæaąņ5Ĩģ[ÁņÛ‚ …š0^cō‚@Į1O¯¸Žæ5ÆŦĮ7aX:ÎĄyiĒEH`D‘bĘ;4›]YģģH霞¸ĀÍĩÖ5Ģ‘cqbąŋ/åÆvā‘ō–2ŲayÁÍBšžˇ$ؒŌUMøķŋŗä&!ē`Ū§îÂOŗŸÁWUÖaķTY8*%xÃŲĘâFķ%ëĪËĀFëÎė(< ģŠsqĸ]Ę eÔ­āg05ģōŲm€xŊ°{ásŠĄ.§­D¯žŅd9ag*ôx†p '†~ƒ?&y¨ŸWÖRb‰jda^ÚER˙ē$ØaÛŽ0F0IOím]Ë*Ûb2í\mËGˇ8lgkš#<úÔÚz¨–HfĩŒCįy>dvō’ŋx#Ą Æ0Į§É. 4­ üŲMŠĶ‡Ũ¸‘o›y`2SĨSšÖuĩi¤ˇW“ËɌFĀ0ōËîęxl#×Ķ8Ģ–•Ė÷˛[Č#2|ȇ?+ĪPsøu9âŒ:ŨÕĀMöņŖe>m­ķ†l6ފ>cúíæĢG­N`ŒÉ c…fėŒĸ6O\ŧįũĶSęˇ)ilęˉ$(ū^Hî2šÁ=Ŋ}ŗYßےŦļ‚Ä!äl ĮšäLņRVW/ōōVg, Žšį€qĪoΠ´ŋšåĪ6Ä'o'jãŽ9<ņĶō™šåSxĩ:ŒŽâƒ.ԚÎmNIa (Ģ&q) vŗõ˙woįŠ…u+Ę ĸ<Œ‚ĪÁáxr@$ķũj¸”Ú4¤ŽøĀ%•€$”įízR=Ü­o1 Žáģ ô䑯9Ē’]L˛+’§-ÜdõĮ ņ \1.Ų#h<;cjkO+•€S‚F>ö==ĒÍŠ3DaR:~žßQWcœ‚§#¯š¨ØĘ"*åYr į&¤UßfpFA#ŽŊkQ ŪÉÆ>īœ Ž8Îx➏đ™Į„ô’§ū]#ú”Snū(i:<˛ØIo+OnJ0[ÛÛĨsņvvv"œ€qúU¯‡\xf ęxük˛/œį× Wš†ļˇÚ}ĶĮxdŦņ}“(줄:äp@RŽäŽM‹]_¸Œ™m'@‰3äéōnbŠ*ã*%¤Īđ“÷Šļˇ¯Ī§\æÎx'[yL XČŪc&HNDd –#…įÖ5ÂĶmÜmh–1&Ÿ1ųŖķĀ8 ä¯QŒ`æŊæĨâōŪ yX„œ,ék!;Õ\Ž0vŒ`žHų†ë:Ŧr]*[L"wi-ŨėgešĖÅÛíAŅSÔÛL˛–[CėÛĄfŋ J¨ ÆCgĨSˇģÖ[GÖī'ŽTŊ1ÄF~΍ĩTœœ‘ĀÎAëĐR}K\ąēŋ1@×0šŨ›o/˄€$/Í!Úr­ß"ĩ§Ô5tŅ´ų †ĩĖĖ%ũȉˆŨ•` U˙zĢë˙jŠgƛ1ˇ˜]ąœĄ°Fö'/lV˙„›Y…žÉw4`7—lĖōÃû˙s`ũwmâŖoęģQЉ°gC˙­ÚÄŽ}FۂpO5Đé—Rę6ˇEÆÂ]Ą*€Y”,įūŊÁŽfÂë\7ÂŪųgmÚ×B?Ô3A&T`{šŸKņĒÖV0É4ÁI,Ēãîâ;p;Éwįŋ–xôŅĶ5ģËõģib|˜DŠąXįæ‘pz’~@xėŨ=rÛÄ××Q)Ûo+ȧxîãųG'+“Ôđ=øGņ•ɡ An˛ųŦ š #.rJ•õĪđäSÂMuĻiāÆn  #G¨9Üû 0韯ŽXëwš“ÚÜĀ‘Iüņî%ÁÚ§8ūīĖFze{į6įŒ[ÚÉ46°“™?vķaŦr9V7Čü §ŦãÄûʀ–ąĄ™âmķ`Æ@†~8´sÎîũéÂRn&…€6KąŧÛguYŧČfČ8áßŖô&ņâÃhķMe ›n˛ >pŧsÛÁ< ŌÕ5š4ۘ™`WeiJ$Ŗ÷‘ŠĀۖÆãŒy'ĐC"Ëocåe 1ĶëXZϝö=V„É*–Węír8ú#uÆ{g „ŅoîīmŽäŸk”ā™U(c΍§ĮœeĐ6wpĀÖĻ1*–ÜF9Ā𞓜“ö8ŋô^ãYŨĩČ[xŚiĻxÁäũŠH7$AU›øy|2üŊ:üÜV—ü%"K‰mžÉ/›æã_5pø3§ūĨúúŒãœijú¸Ō-ĸ¸•HvČė#ąUŸŽF8_ĶķV Õ–M6æņĄ‘4:3¨?!`psˇļsžũEVū܋ûĩO"å Y6y8Ãė'n3ÁÉÆ3ŽŲâŗcņ}Š› o;ĢH˜Ō2H‡ÁÎîgS‘ëí’ۏBLvĶ-¤3:J΃æ ō`đĀÆ8 pGLæĩfՖßH}BkIļ§Ęa‡ûÁr8î^„UņeĸšWĩē2“÷A˜2y™\<Ÿ)ąŽøąĨx‚ĪTēx`Yw퇙ˇk)ĮŨÁÉëƒčr8ĒkâyöŪ&´“ėō<đ—R IŌ˙x|¤šČÁ?…KŠ-X–6wkąĀbÁ>PdōÃ7MĀ_”įŒfŠņ.ŠŦ5%˛˜ÜH‘¨‘bA++§˜ėú™É#€j6 n-Ĩ…Ŗž)dUnēŦރ“ü ūUOøHČŧ€Ke$vōÉ,'•%gXƒ~é,8ÆG¸æ¯iēä”ms3ˆ† ")ŧã=lÕX=âXŽchĐHÉ4b6°\áˆĮQĪOz¯?Št2Y%RgŗržeČ|‘žœFũpHõČÎĻ­¤ėŦĨW ;G„,ÖPxííU5 gėwOoģÉ*ũœˇ .%—Ësׂyâ§ąÖŦu #Ks#î@ÅļĢ•W N8;YO§5 ū Ķ펧ļ™ĻVˆáĘÄÄČô/įHū!ĶŲÖ4vydPđĻÃûÅ!ŽAĮLFߐõŖq­XŪ[ÚH`ʨ˙–fFDlvķg‘ØÖū§k§Í3Š#`vž>eUŒcįũ? 0¸PÁO u…Š]hËtbÔíā’āĮž!ÚwcS×k w< ‚ OG˛ˇ’;5”rÄ@pÛH ŧũôúdgĩF§Ã‘+ēÚéâXNÖXáRŲ Ü={a[ĐÕØŽtõŌ-•--âŗBHT@¨ĮCÁ9ų¨ ˇĐī<Émm,&LĒ—HĐämAãĻŌ1ė}*ĩ•ŪšĐnm-üÕ]ČrÃh8āáY}x#ļ*t)''ėö^lL Ėi‡Šß!î”Ģ{ÔOĸĢmŠ"‡ųÜxĮ|ɜãdtŠĪöFĄ.YŦînvŅ’ŦB`ōGĻōoz/ŗícō&ŽíĨ \ŧŠšeŗģ¨= į¯5Y×Eû+ßųVû0]Ļ‹ §9Čô*?*!Ô4š‘y‘+DåØ3)Îā¸ö;Į?ZŠ,:jYĘoĩ™rØ\>{ôÁÉüũę¤éĻo“m‚Áß9ČûŲĪOŸÛ9÷ĒŌĮepĩÃĸÆÛŖp0Ą†Ī˜ũ?—¨¨Ëi­,‘ÆčŒ~L!ˇƒ‘ŽųÜN^žôŲmlŖp’[ÆĻA€­‘Î9ã×úķPŦz|–í8U[v 3ŧā žy?íûëĩ;ėēcy†!Ęŗ+îr0Aįwǝ9ííM–Î8edB˙Xq×>¸<’GĄ'ĨSxâV ,6ėŗc`õú÷ĒĶYÛą‹š7“ߎ{šk[”?##š%Ëœ˜¨VÖģÕ ĸ¯yŨ}=Š.|­°ģnڙ•ēįíšÖÆ$“–'9Į=}ŋÎj{h#ŒšRĢōîĘ įōŠä…åķ0:ŸåĶëUžŨ”|d99ūu!FmķC Šį˙×ūuĪj JbH$‘ĘŽĒ(9¯Ŗü4­˙Ž“˙.qčŧÆā˙ÂkĒįū{ŸéX5ô/ÃĐËá›aĐ<į¯5ÕŗĐSŒrĪ˙ŽšË}{EŊŗK‰âŠÜ×1ųŸ” °bvā>Üļ:㑑ÉUģđĒŗ[ų6 š’Ü'9r ކE>ŲĪzĐÕoü?-„×—ik|ļ‰#dWll$…ąQ×§zֈļĶė뿉ííŖļ˜“22Ž[ƒģ<xüTÍáÖXôØŗB9Ę[ @7n$|ŖžäoÅ}ĒB×AĶĄQ.™iēmË-ēeˆ]ØéŽ‘ƒĪu•KFƒÂkjˇéeēīŧįWbˏÁÉ?7īp{āäTÚ¸Ō,t›}:â(íŦg“ÉÄacD<š'°Søšl‹ášdķäM.FEåˆF 7͜ûī'ū}jåŖčŪqōbŗŠåšD*› šÎņ’rcīĪÉĪŨáe´ŅíŽļĪ”3Hä¨uEŪŔ’:ķ„üv÷ÅUĶIÔ­Ąŧ´´…#Go)˜'ĖnČÆp7sÎFqŪ˛$´đƧu ŦBŨ3Îĸ!­ÂËōƒ’v„nF ƒÁ­Ë[{æÄÅ"Áž6 —,yŸ˜“׊5 ÃĄ™eû$rĄ2H  ;ƒ’FxËm?\{RÛ&§Ã4vīi_)q€oģ߁Ž•VūÛÃÖZ}ÃÍo$ QĐ89!Ú8Ũ…P°ôøŦô9†cHFōëĘbrwV ÉęqĪ´xoLŋĖ´™í˙yŊe´prF˙PF3#SSCa¤Ûŗy2„’˛HÆ|1 Œ–į€HŋŊß4ˇßŲO:ÜÜËr"ÁķŠä Ąį xúÔvV:T&9-ÂŖČŠō÷ÍØ'Đcw]ŧtĸm'Mģk‰Ũ ‰wd™†I Cū { ŠëIĐėmâhüŊŽ ÷Ŗ1!UvœŽ|Â08槏DŌ­‘Ŗ1xʃ;šJ”Ā'ƒ•_sŽsNšËMÖí’äfHåŒÅŸ1Ķ1ąŠ^:ãŌĩ5E ‡j*€žÜV§oc&ĻĶMuaK7s ŋxYŽ8Į8úJĄ{ĸCuu!žé€aģ&0@?ģ˙ãC×ŋáfK%ĶŅ'H™8eT‚02=+)t‹Iáe-mĘÜIJ“ČÁØ:v?L:]&ˆßjnÜ õĪŗˇéQŽ–°]ŒĘ%Ę6Ũ€nÚ Žœtl8Įnë=˛\_yŒĘ휃ĩˇ Đįƒõ¨žĮ ZrD×*Š›°:ÆAúU{4GxĶ‹ŧ98 0I}Ø<ō=ĒŦĘļĘĢųr!]〰ü=:Õ?븜…•™HÜY9 f<Ž3ڑô°‘‘3ģvÜíXqČɨ$ĶŌFfU9%Ā‚ŊŗĮŨũiaĩØI0*ĘNFpšŒW“Nc%Đo$üŖ§üwÂ˜útEpd™ņ1ôü~ĩ~+F‰6Ŧ€îUۍš$ņĪNJ°ˆņpcˇ9ĪLsJ#v]¨ŒäüܜŸÖ„ˆ—ÃtÜãŠõīūxŽsZO/U}Įō@q_JxeIđž•˙^pô˙pW€øßūG]WūģŸéX5ô'€A>ĩPs•Î+­`Ŧ``Ō°Ĩđ–%ģÚæt€&Ũ¨Āķ°ĻîAįa+ôĮp 2ī–׷rÎ÷ˇĄĻrÎĖg1žOúbŸ‘ŠßÂ6Sißf[ËøÔFņFQ×) Ļ!•Æßr7p9­ËËīŦĖ<Ē>VWB7+ĢV錆PzcŽEPˇđĩĩÚ]ĨÕŪāë!ÉO˜†‘ŽFŪægéŽØÆ*ÎĄgoŽÅ Įxę!•ŠÉnĘyÃFĘw;°ĮPEeĮāëHg†æ;›Ÿ2#“ģËäq÷xâ%ä`ōyU˛†ō8f–å­–ÕŒË8*üŒ¤ļāF0ĮōŦ“āÍ4H_íW^O’" ĄXĐ+´•Ü1´sĮZĩĻø~Â+Øu+{ģ‰3žHŨdR˛+—r –\žy'îƒë›—žļÔ'2Nō¨eȊãk¨pã9rNĖ}ˆ›NŌáĶė ļŽGxãËā“Éöʲeđe–ËsrŅ$)2 ėQ \Jߐüt4ŊßIĩĐČI/š•dā áZË˙„Uo丛Vdg{“(Ž3”+”ŽIXœvfõŠađĨŦSĩÂĖ햑ļ˛)rĎGQŊ€ė§v­æ9•‹;[t„mų¸_ŪGqž™5Ą§čãMĩšdq,Šį䨉Ķ'û™üj‘đÎéU…â‚“4ąī‡$æa1æųŽåĀé€O\æļ/,DöŅ*ÎŌXäVxË•ĮQÛĘš‘ā€ŽŽ/ Ųp’`H `d‘!į=ģä×`XŽsŽF3ūp+ŸÕ|>//nfYÍŗ•”th¤,@ãĀ‘íĪ\ÖqđĨÁŠđŧĐŗĘ¸‡į#iķŪB9R1‡ĄÎŪ„Uˆü;uso -䑤uōT*šeˇ†ãkgĀE˙ūĸÆIhá[˜bK‡)ą_— ųvƒČän8 ­‡u8؜=ž×ķ\"\H6g‘†Qģ"EĻ6ƒŒUCHŋ—Hŗ´ĩ¸0Ī ‘,Ÿj‘w1—;ą“ķyĮOĨAŦGpK]*ÆÅvĸ\ģĀd$ä¯ĖH 6ž:Œj¯ü#ēÂŋ›%Ä ųqDå.ŨZ@ĄÁrÛ29`qČëĪJŗ•woq ƨ͡&Ė: 䑎Ą@öŠ˙@š¸ÕZhÜ=ļčYŗ3+a đ0?Úķ×֛§éZœgí7<~BĻrW~ÕåÛũāĮ9īĶ“Tmtk׎–âdˇÜžrßw`'“ĮŪN=ãŽ…~cŽKĢŠ Î.?|ĪšSÆc•Į°cÍW“HÕ"ckļ2í\?šÛIō€ĮNģųŨéĮ|TĐXß%âŸ÷`ļTĘĖ9w ;ŋP#ԗIÔ(ÚŪķË), i€7–R9ôcŸ Ģ:nŸ¸Ŧ™´ũJ eÍōßd}Ö? ööÅ'دD™}îĘ9ÚビÎ9āŒcĐÆme{įÂ%ķoųŗ&xÚš9ûÁēä}:ÕY­¯bšC īg.%vūX#ßBÖˇî‹ ¸\Žé…oQ××đíÅu’\D§ Ĩ”íû™ÔũúŠ;k°%r 3(lXn'S/' ʸ`Øŋ6_lįĨ6;{Ĩš!DˆŒûÎ “—ßëZz}ŦĻÄŌžã‚āĮˇķĢŅĀŌ;Hč¯ëN†Īˇî¨rOLĶãļ{rHfÆ>lŋäb¸Ũ|¯öÕÆßģ•ëūčŦĀpké œxSI$˔<Ā|ũã~ëĄëŪsámOíOö[ˆ#Œ´eA•ÛîĻŪā’ryVÜč^%†%nVkŸ4ˆŽĘN åI%X}ėÉāÔiZ}ėß-ÔéæĘÍåJ’´„‚ĖC# Fā8ĪŨā0Ĩđ߈ĨÆÛȕ„,Ļ5ž›O,(ŧ’ܐ{Œä’qjßIÕŦoe‘1,`ÜÜD¸ŽY ŽŅ'<Ž$mĮU9â¯ëö­ÍŔšl‘D#`f-;ÆXFۀ €Āđ=pH8máGcä5äSˆ$‘É{)Æ9ļí¤ŽYN:q؁[ˇvz‹IĻŦMHáÛžæŗŽtmĖķ!ģž8ķē8…ã§÷=I?0ųfāį†ŧ54]t;JĪ0†xĐŊĶ7ųXÉîÉĶĄÂ’p‰¤x‰d„Ku0UŒDûnÛi˜×ũ¨yÆ~SßĢ-ôR ģx—íŦ˛F%Û+2V$ –‡Ęarˆã5Ŗ­ZkˇĒž$‰n°•eŽP§%døÎãɧlČö7ōčV°\;IqŌČÁ&`YVLõŨũÜq“ĶŠĀ5mĨköö°[ftĩw"\(um˛dŠ9ɏn‡t5ĢMRâa%‰—+gq””.%`Ĩ †įŪĢ\AŽ˙h\‹srm6ĒĄķœæ.F}„ŋ‰ęxÅ4ŗņ6ā]§Ų™ķpQ2œŽpIpäg=Îpąņ)1yž~QC ÉbŽa•X¯#Æ>ã<ķÖĻ1ø’G+$*y…°ĖŒˆU“=ōG {0<|ÜĐx°§îLęRČšƒwåŧOKdŒs×ļ+Ž FAĪĨszĐÖN˛ĻŌi–ËjR4l˛î# ’A~g¯5VyLŌE*ųiD0ˆ]>dūķí.Jķʎ:ĪX5´ŅŽŦŪ+œ{“ų ™ ™;ƒ­’¸\t=:•č4âņjWp…‘bžC, T…¤aĪļYŋ=ƨ]ęzĖR–˛|ŗsöwuU3 F\}ėÆ]Ž3‚1ĮBž#–úÎH.mi¤Xäm‰ޞ0 @`Ŋ2}}ë.]zí.[M0ŧjæV‚Rø/0î ÂõoaRŲŪj[ÛKnÁ‰ųōZ˒qųŊ9yFNØ7`’õŧ? üąšr…• edRĀ7Ę~b@É÷ĀĒfķV-+KnDųgå´rĖ ŦĨ€ÎIąŒŪÕF+ŨZ'Xė¤&YĐĪm)wãÛø†Üģž1Z˙l‚;eĢ%e@ÎíbPsË?qQXE|-g’á$Ŗ š<“ķrp1éīY×Ú°ũü–ęHU)NąÆyÆæ˙c֛qyĒnš¸X„[v Ÿ8ķwpOđ€NāÔŗOym¤Û™åUØuP •Æq‘ŽznĒķßßē*ÅhZM¤˜Û÷xl Ü÷\ė=ķU>ßzéå´q ĖLĀm#pŲmũâX¯Ôt¤[Ģĩy—z…Q&דqÜIŒcĶđIÜÄwŽÄ Zē\įæū˛Á¯ĻϏÍ:īÄķéÖ÷ ^d–Ų捚$Rōyq•S€0Ĩ‹Đņץ6"ŧņ’P!žXŌ&{Fklđ‰G;p>\ķø\]C[U i'>CK{&A3ü˙+œ,€#äã98„6ާŠ1WŌØKpīķÚHTA*ĨqÁÆ8$ôÍmx–9›ÃײÁöĩēH$0­Žđūa\/ É䏧^ՋsuĢiڔíĻZ]ÜE$ ˆæŠW]Û'•Ũų„JGmØâļ“PŊ:Åäp4—*’4(đúôЪןí‘Û5›Ąų<²+÷ģ"‘Ī9 ܝsĒ.Œ$‡h„ą\<É6.˜ú^• ŽĻëĄAĒ_ e–8¤pŸōÍ\ žOAœŸjŧCoæ˛ŦW[更ŽX1Œm9=xŧīŽ3ž"E. WbfŽTd\‚Š#c;† į<đG¯ž Wš(R ,ąS ~NzķÄĒ~€žÕ5Æ ļ“ßÍfQ“ho}‰ÔķČíū/ˆÛ[Ũ$GŧĻPHH …nŋ+zâĻ‹V{Éá†;K”ķc,ģÕFvåŽNq×?­CĢ´ö–s\@°˜ŅK˛Č…ˇgsúU7Õ&°¸š+øCíæ7mfÁÉÎv§QS=Ú )ofĩ#\šI"*āô'ƒŒŸ˙^*ŦÚŦ"ā'•p3ĩÆÅNė<÷mŊ29úã6īTÅԓč÷lŅ˙ĒœNsÕ01Į­Ņ"C!Øô˙ë{Õi/Ŗ1ų{ŧ§-ûÅä–ĘŒ}Øs˙רÖų7uuĪčK2ŽįH×ĨÔe‹+Œœ‚Ã=û‘üąW&ē†Ûb¸*f-†'ĀžžÔBŪjpIRHbTõį¯#Ŋ €‡Ūŋ1Æ ˙ķ֜Ŗ$?ˆî{Û§øÕ–]‰ÉfsŽ3۟­yŪŧYĩ‹’ŲÎáœũg.3_Nh/†ôĐyÖ.ŋîŠųãÆØ˙„ĶVĮüü5aWŅ~ ãÖJ8Œc­tw 4p9‰Č”BûwĐgœsí\Œ>5’ëOkˆėž17Č͐˙¸’@ (1 ņę:Öž™­Ī6¯s§ÜDŦā–ŽD< ą@Ä^e8>Ũ*hüIH!KYōí0Ŋˆ¤šÉ#Ą úã=ø0ÅãKB‹'ŲnĀy™P,˛. “ßŧSŒtäg#3ÛøĒ;ώXmĻÍÄisÆ äÉûÜŦčēqžōEŽÍ&Ļę}šŖĖ~gú°Ã=qÎĩ%ˇˆcŊŗšxŖ”´KÕSüHęÅyāü„ôĒđ— [̘õ+wHƒĒÆņÃq‰iųš9|gũMj6¯åClūEÁ’âF…"!Cŗ(bzœ …c×õâĒŋŠ-Ę ÖéĪå^KyŪN>đ{ߥĨ_ĀĶG i÷۞i#RąĢŨ¸Øí$…ŽOoʙoâ”ēēļˇŽÆí~Đëß°`)ŨÏŨ0Įĩ;Pņ5ž™sqļwō-ļ|ĮSo™`xPONßJÄö‚î+UŽåžbénH_ßr´îãžqĮLôŦãã$Ōāĩĩ‹x¤‘ÍģGÅ7ÁÛ =kSԗH˛7’‡xÆÕÆsč2@˙8Ē#ŖBéāk{œĄ ­ĩq#(ŋ6A>t}p9ö§Ûë-6—÷0”’[Š-ļ )YrO÷{ÉôæŠ/‹ŦŨ.$+ €‘‘pYĸ…뜔>˜ČÆze-|U.xæK‡žhŖE…¸Îq“ˇˇ:K˙ -ƒÆ—ZĘĻ%YK2!f@p[8l€äā`žzŠ5.Ÿb—E$-´ˇ‰ŋæį#9ŊOŊm$Ģ$ĸbÛ]dĄ'BOQīœ`â=GÄļ3E:Íž%˰ˆ‘—ĮũōŦBëö ,prōX†ßõĨ_cõÁëœzô樯Š`mÜà ĩĪŲŌV„ąKmģąčęzsųã¤#$ įŠëXZ†ŋ Ĩė°gv„Âda$ŒTĀ;ˆ#§åœQÅ¤ĪŠAqĻ?%ąEs•dGČ\a~úsî9íVÛUĶôû¯ėöe…ÎPļ2ØÚ2UēžHĒé­h€@‘˛$n4O$¨QšAcå#Ž:ZŽ—ūšx>Ī‹Č%X e„rĄxā į#ŽâŸ{{Ĩ­ĶĨä1­Āo2Hwlķ (ãøŠ‘QKŖÚZŊ˛ËhļŠ6€(3ģ#Į íÁô5XÍĄÜKq-Ėv.íōK#FŦXÆN9o^ÛyéIs>…˜“ĩ”ģä2ŗ\0|ą^ŋ6„}0 UšƒA[øwÁk‘$n¸ŦŦāqœÛøpzT÷×ÖVÍįŨ’ȑŧŠōmĒ63͎~´ÉdŅ[?•§‘•†L'Čđ`į§z…_Gˆa‚ĖWUFA$0ĮžßütúSĩ ëRâĘëdåÉĘąR‹…/ķsĮôNk­9ä‘äû+°Ábå îLúzƒĪä(šžÁíKB …•—|,BšH™äg’}2؟O1†™-ãG\laÔåēžš<ūĩΧÉmu)ˇd[’Gb0ß{=3Ī'“ÉÜ}NjHúlI˛YōŽ<ļ÷P:ŠüŠŅ›+xØĄŒn\œHmõč1×ژRÅÔːÆRO˜8’r:a›×֖Hí.T[€UÎ1€zcÛôõĒ6ļ–34…aĘĢmŪ˛šųOû)ČįŠsŲé㠀…l’Rr-œįŽsÍDööRHūXv’s!ų‡ägĄĪ?ãOēōg|Îۂ ›üÃÎN9īÅZŠHˆŒ‰$g<œ÷÷ÍIÉæ€@¸ŒįŌ§DvۆÚĪę0 ĮzsžÉŽqĮoķí\ˆmfėƒ•Ü;į°ŦÕ ×͚X)ĄØ¨S•ļŒãĸžvņžá2Õs×í X˜¯ŖüĒžĩáՎœ×C3*[ŗ0ۀNáÚŗ[Ōfŗēēė<Č[)€ĀîČųOĘĀgÚqœSmoŧ=žzĨŧˆ­ûĪ'Ë1€ŧŠ%FÖÚ§*yĀäQsáëTRÖŌOŪ<ā¤q…Ž@›Ëz61Éį‘žjD˙„Q.cšDĶ–kLĒā!Ëc…čpĮ4ZÜørᤊ+[Ū•• ŧŦą‘*c¯úÔēäQVuėũ3Hņ*Y­-ËH`Š$ Đ_väu䊭eŠiIq6ž,N’d…‘#EŸx=6œ1ã5=ļ ÜŖImc§KũŲ+Ā0p8ų1ĮĄĒŧwžšĩ’ÂHl¤2,H’Ŧ~[’ĒęPtĮÎŋ‰Šø\Ū<ęēHŸ/.>āĘrO\îÚ~¸ö¤{Ÿ Éw$Ãd ‰"gT؎îų͘؞ĒÍĨž…4Æ+XŦ$’Ų”°@Ŧb#vŪËcęiŦ|;$æé×2Lå{mÚW¯'kc‡ŪĸŲášGÁÃąeĐåŨ•įƒŸ˜ūuVÚ ĪlfX4øƒÂĒĮt*Žß”•8ųrƒ‚‡ÚŽCcŖOl,ãŽŪxâs!RĀ•,KdŽŲÜŪØ$tĒøbęũ- [ˇž˛r˙+:˛!\“÷˛ŠŽ?„c ­8í4ˋAmA$ĘXŦo÷vãČ9ÎNÉM'@G˜yKÄD°ŧĒÉ#ÚĢØíĀîyĮCKŸáåšYckS*ą`Ū~I#syäüÍ×?xö&¤g‡ÁGÛo-7žApŦ9ę8ēãŒŌ\Yh×V–öŌų @c‰|Íŋē+´ô<Œ§åL’×A´ō¯Šc.Äėۜ°ëķ`…ã1ž(ŸLŅu6™æPe˜ļāfpNŖ?(=0X{ƒMšĶtHt鯙3 §ķRW&<ėČAʒy;qžų¨äŌ|:¨”U‘T~ũö|ģc^wc!s÷ˆã§Ņ8ÜŧŒäs¸öôŦ;”Ō%Ö%‰ŲžÜ#…¤zĄĪ—ĪŨ's;õôĻÅ éĩ°X\,F҆sō˛*ĒžOPGĐÄå×Z4z…Åäķ;C,1 …ILg –=\ž1Œ ĸž˛ˇž),ŅX4}âJ7-Øe~œU‹_ iz—öhR2ĮfASšvāŽ˙/<ž2M:ëOļšš7,ō̟(`ųn];ząŦļđî•5ԑũŽág¸ß!UuË :“ĘöĪĩDē••ĮŸÅؘ7n˛ō8ƒ‘Ī^bt ûŗĨíחø„jã÷jĘÉ´ezXg¯Š8’ãÃVˇĄ–îį$ģ „.ķšą•ūųؑŒ`bΊag{˛);•€$H6ãœį8úwǟØë3¸ē¸F™ŸĖ—æËũŪÄąĮ\ŠuއoĻŪ–ŠyČEÛąļz‘ü[fe¤2‰vāŒļėĪëéëT_DŒĮ䋭čP´×^Ŋ9ķš–M>3Åŧ“iÉf(>é /Lûw&ŗĻŅüÄbōíĮ÷{H%HČās’?^´Á¤Ūá›-‡Œ•aßũŸ×ÚŖ}$‡-ˆ‡•ŒAg=Wzc¸ÍlĀȨȓ–-´zŽ˙Oūĩ>U ’ Ŋ†}OŋĩKáQ˛ 6Šî{đ:…=rŒClm¸/8ú~uįÚūĩvoŋ߯JĖ\,—n•j@XTũ|ßã@á3ÕŋëáĢ ž–đŠã@´B3ûĩĪÖˇå ,/ÉR 1xę:~—†tŒÉ {ãßĮŽ9ˆrJŸl1b¸ūƒ o éē’JĪuzâáY‹c.Ҙ˜ŽĄ+Žũ‘‰.<#e|nw^](˜ R˜,cōŲš^ LAŽĒWūÛÃŦĪ ĖŦ͈äÅGš$,¸đė9$ã=*ퟃⷹĩ–Kļá—ÍrbE,â%ŒcnŽ[n*ŧŒVíŦsiÃKžöP÷1<ÂËæHvüÄqØđ? Ĩsá{kŠ"ķnî›dQDÉšFIüšÉÜsŒ{b§ŗĶ--lÛOûdˇ9]ŦŌ”ĩ—| vļOZË ĩ[¸į}Nō[€Áŗ'–K.Jđƒ ČÁã¯'3ŸÚ*$&úõŖXĐ#˛¨;s ĐũîO=1žŗt¯¯fÁqˆÕ7á@d ņ+›'§ĨnZéąXŦŪSģ $2|dŽ;qŪąĨđeƒÉ˛ŧÎaV+Ųú•ʐXō¸4ƒÂ0Iyow5ėŗĪkųĸ‰¸Sō˙ĘFO+‚{ô > ŌŽ,mîZEU‰VC˛EŨN*rCöGB+KKŅbŌd‘ ‘ČuD)´*üŖÚ¸PqĀĨPŸÃVé4AīĘ1™ä‰($™ÖāŽŧā§åšš¤h‘čöfüÄ`ĒYŖTbŖ¸¨Ž;œÖjøJj}˛FE‰`pb YŠ\c0ØîsĪ Ã—Ã0Ém§Û@x­š0ÁFáž@ÛČ'ĻP cžjŊ߅fbdĩē‰g-ē´{ŠĖ˛Ēđq†ĮųšcPŋá’ ‹szâ)ËHãÉYūWŸ•x~_nŧœĖ|0ā Ô#F's!‡9Ŗ< ÜsįžztĒ— ”ÛČĐŪÅ$nj4E’'$GúķĪû"´Ŧ<= đåö™s,1ĩА3Ā ÆõÁ'qåŗ“ØUy|*$œÜAuša)Ųoō4‚HßĻūîFyęIĪ5Ō ¸įžŧ?Ī5Īk]Nūk™%ˆ‰ŨBKđ<ŠL‡<ō1\Tēæ’šÄ0"MXܗŠX÷#‚Ŧ¸##‘œqøŒGđnųa2͉šLŠcÂÎ@”oVũā˙ž}ÆūšXļM=ŧŲqŧË2ícF@##ÜC—ę7P܂Đy˛ĘĖ_ N<ƒōrxcŋ“ÁîzÕũ#M–Âöök†ūÔĘØR[ĻîK{ãœãœq…\Šü?p.ą}—1\M*ąb§/­Aö”ōÖ8Ô ¸” í °;xÁĮĘ8úqR .ō íä TÍ#Ęŋh ƒ2§8AŧqžM;Y‚mEqcw5´ČNIWÁ\ĀžBūõæ­ū‘ysjĐųÂft*ŦîųɄ§B8‰8ĢWvfií™#g0͸Š8,6•Įáœū‘ũ—¨ÜÃ.ûŌŪ[‰›å%c$gīūˇj–-?PIˇ4ĶŊžöŪ†vß‚ĪŒr g‘œįŊhlõōMÄŌJŅŨ•ĪFS€00NĶĐ­Lļˇ1é’ÆĄŧÆ2 ø)š‰QžGĮáYōØjÁÕöÎWbģĶ{Œ{#õœ2ZßąˆÉ#m13Gķa°ãœ’2žšüōč`Ŋ–hä¸ųcx÷0|Û}}šІÎũn.L K~bĨN##žųÎ=ēօœo$VķBĘāÆx•fÄņĖĖĄÔœØëŸņūTöC„]Ē€€rCĐZt1ĻYņėpHĪíúWŸx€c[ŊéŸ7°öŦĩÎā;fžĻĩ´‰Gdút¯›ŧoĮuaųxjÁÍ}/áQŗÃրŽ|Ĩį׏ūĩm\B'ĩ–,đņ˛ĘHäcœ"+ßÁņĮ,Lí¤˛o€)pĢ"€HāyĮ8÷Ŧų|3Ģ[Ų0ŒÄķEhbYb•„‡÷.˜rĖ­×øGĩtžˇžļŗōomVÕwŠķCĖîJ€8 ÜœŽqYˇ>Õ$Õ%ēY-\ūôfI”yŖ-đ8 ĒS#`Ėc€qŒVÆ­§My¤EglÜÅ4. “°,ąČŦC?-œ)äįŸÎšé|7Ž:[Ū´PÍ9•ãŠņ€ŌLĮi*ÁOĪp9Ø~ĩŊĒØO}§Å H^T¸†Vˌļ2–ä{øâ°.´J–ŽoUžŽICNįĖp’Ŧ…N2Ã¨ų~ī$lZyŽ{ë—Inw[ Ešˆ € Ŧ ōrGļkcJŠûė Ą< ˆōīŨæ°E,Ũņ? įaĐ5›[ˆæ†VYÅŧqy­r\HX°'æ889ü+_I´Ô-ôöŠōiŪvlķ‰p28ÎH˙ s’ÚøˆGmm<—mrá“|2+ pģ™ú(ķnzú•3é÷™į<%‰#3,¸ †TeÚ21„\ĮNĻoaâ%V2<ÎŌ´fGK…R#9 ‰ÁÜ1[ZDŒbā^ļīߏsåŠ8āãŽqĶ>‚š˙ėÍ}Î‹ĖŽgŠ!5q•ķwdgŽY@>āō§°į~`ĶÚšíBjmQ’5/d&…‘ąéŦ¸ŖņUŧ6‹˛yąoš ƒw˜#”8ŨŸīyX>úŌ5—ˆį€}ą's‰F|†Fj”ŨÛîqøvĪ/‘|TęŠ&– Ę …D$Ģ픐 ƒ•Ü"ÆyÁëœãCCMZK‹ŖŠ†Pyqp~lŒ ŸCœœ‚:ŠĪĶíĩ”žļË­ˆaįG寖틀såtūņ÷ŖRĩ×c×@´r4ųvī Gû˛ĀŠ IÁÚŪüŠĘXĩ›eXã‚Y™diaIbá\­ĮĘOōš'øēúXˇūԏZ†á ä–ķ–C5°—2įpŽSĶļjîē5ļ´QĩΐEŗ'•`O™ BÁ= ¨´yĩŠá[ĩž4)–/m´”e‰8ÚÁÁ đAÆCu9¯–ęôÆ˛´qXŅmKĢ)ŲÎGR |ޏāw¨—Ų„°†åN@Úļl7EŊ•›Ô8ŊOãĩ+ßjƘá+åîaåČåŠõ8ĮGn sRŪ^^CĨÛ\Ĩž÷’0Y:ģņ€rF:ūgĢ5)¯-ŪmÁ`îxÁ$Œ@ú’:ú‘Yķj— wnß,†V”dFŲáˆĪmĖŊzú`á’j“$SKÍŗsnP’§=ÁüAÅIŠŨ5ĸ+'ˤš ŧ ÁPŸO\õéą_9ĶgšeVîÜĄ¸8õĮ#jšgwöË#pp]q‘ÁG¯ŋ\Uø’#lü*œs¸ž? L34iÎgĄīĶׯĨ) ŧÉŧČ dîūî8ãĐķ­|ƒŦŨG2gŽüVbōãë_TÄvœtŽÕķWŽN|oĢ˙×ÁŦ ŠúcÃkԂy‰I'ŋš!%Ā|9uÛ5ĘZEâøeŒOq;Ŗ…–@|’ˏœ™‡9áGãsĩ…ĻkēŠéÖIp‘É8 ĖęāąōŖm˜PNō]đqÕ‡`_ŠãįŪšëlÛ_Ü[â `™#`Ķm`­å&1÷~r3ę¸ĪĻ<ū4œ$Æ;ŒÆŽÃ7,DR¸ão*|ŽFC)öĢw*ō>ÔVĻXBŗ*\ŽįȌü‰Ôįq#ąÚ9į‹v:•Íüƒ*[K4 P͐āÄŽ2qĀ;°;qY?đ–^_­ŗŲY´]Ŧd\1U™ 3’‡¨$tã¨5(ņd˛y Œco”ŊÚ̐Æ9\ī>ö;{Õũ#W—Sšē‰āXÖŨš3‰Ã’C2°+ÔWŒõĩUŌ5[Ģû‰-äXÕŨ][ÍËŌ8Ɓŗ§läž2ĮŠn,ígkˆ„Æbææ&鹐‚'×ԑÍmiúŊ{Õ6ĖB†ožš`Ļ9Úzî:‚l!yž$6@Îė>Sp $e#l† dâeãØûfxuÆģ–ŨĮkJÄķ(dÁA&7`Ā á=ø2MŠÜK C¨EŒÉ$^Z92ŗ"ķŽŪ?•U \9†DōŧÁ6į_•—pĀɁØÜûû:MhĨü6īk(feV;ԅ,ĖŖõCøwĢĨęÛL$ŪHÚ ‰ 2Ž=~đĪáĮL˛M~Hļˇĸ0˜V!HOŊŒüũcí˜î5:dWpÄØ7+–ādūđFGÎqÔp*Æŋ[]5Ŋ­É–cûČđŠĘģļ“œgœņÔt¤“ZT‰Å<’6Sän`â6ĮÍũō:žũMIozˇo+G ɝĄž2ĄÎHāŽŨ*œÚŒ_Ī Âd‰Da šË(‘ĮËúúSdŊ˜YÚē#˛N…T|Į+ģԁģÕ1Ŧk,°‰€JƒĀo“w\ô AíØSßQ‡ĒĖq… ą!qŸ÷¸§]ßĮo*ŖŖŠh‹+ĪFß^w T–Ž'A åŠČŖ }˙ĪĨYˇRą4™ã8lŽ?§ōŠ”0ž:Œ1郓Š<¨œ.× ā.zgŋųü+ÍõāŗyĩB3 íYŠ?x9īÖžĢˆ*ĸŒq_4xįđ›ęøhjĀÅ};áÂŖE´bGúĄĶžÕ­JüŖ¸äzU´AŒŠÎSšš&dŪŦßē@ųGŖŠ˙õV%ĶåFa$…sĩÁˇrTå—iÎrŒ0y'¸ËÅ[BDį,SY|€]”–;p0Uēāq×ĻmÚj–—čײ4‘g`,¯8Ī|v"ŠŋŠt˜ĸ/$Ō(Vel[ČvĄŽpŧ|Ŧ>ū†–ßY†ķV’ĘŪ2éešl2ŽU—‘ƒPM4ø‚É.eĩ+2Ę&X0-ŨbđûŧŸLgĐÔÄ:WîÜ\ÚsŒciįŽΧ' 'öîŒQœîTnÄĨTŸģŒeĀĪNhMsOk•‚4]ÎÍģ"bX°~cŒČÉô9,÷ZvšņG<0ŖĶ#ų_whå˛>āQ6ĨĨ1ŒnÎ$o,ĘšÆOO—%Į=÷{ÔZ}Ņ0 gUŨn#]Ā6Ō¸ĮF^Ŋéđ>đo†+guėųØÔ#îözûUDm Œe"ąG…ĖQī‰TŠGĮNdãŊF5 UˇS-ŽgPŽnwJŦyéōœtéRÚĻxĖŅ[XK UI6,mĩG §N?ŨöĻ]^i–ą-´đE82QBœc#ŽK89Æ3ÔÕYN•Zî Xr‚ŌPSĻĖņÆJŠI4ļ•L/`Áœ`Wæ!8įŠ;O×Õ]&ĶLÛ`[_ĩČÍ)ØĀrx˙x˙ßFŖžâÅõ#Ē>ŌU$ŪdÆáķ gøp~™÷¨šKI­` —Š%Ėb68AãÆŠĖ4đōš6%‰CĀ #ƒÆAÆ=*SލŒ°!ÎdčsÛØ õ8ü{ŊŲF›cBŋ)ÆsƒAö}ģÕĢkxmāctuf<îëģž§ŋ5nb˛ÅÜö<ôũ8ĨĪ–2™#wˎGķõ朌˛ ˇåĀ<`c<ûd~uæž %ĩĢŌFOšNk2,™“Ų…}P÷@ņœWÍ5ᯚš˙§–ŦúcÃm Ô¨äÄŧĨmS‚@ĪLŽų¨õMLékŨyfU†õLüÍīĩrqßĒū5ąō$žéZ5 (ŒĄŨŊ îĮeT‘ôÁኰŪ,ĶŖˇŦčQNāîኜā`†Éé€NqSËâ;5‰–•Ûd’!#Ë›#8`:gÚ¤˛ņ •íėVVņËžXLęJ`lp}yÜĮĄÎ*ĀĻĄâĢ(4ųob3,Lņ!FUĒ3ā608SúRj^#]íĄ¸€ēŧâ}øß&~XņŽ H9ėzb§ˇņ>˜d‚Ļ^1ŒļŗīĒ$ílzãŪ¤Ô5ﴚú­Œ’Z[ĨÃn“hebã°'#Ë=šČН5eo ŌDĖ^XĄ!OC#*g=ÆZ°Æöļņ3Km6ØÃ^ ĩ[hŪ†āHÛĪnkV-jÚM:ęúa$1ڙ‘ˆ_-˜1RĖĶĶōŠ…|EĻ2,_jmĖv ÂųÜI{ ŊFØŌ’9\m“ГŸœ~ĩ_R×­tĢ›ˆįIA†4rFŨŦŦ$#’F?Õ0įãÖĸˇņn›<ënĸc!`§ĻdXÆyã,ÎŖ¸vķU6E ŗ¸¸7'ˌÄS‚ŗmų˜vCíČæĒÛxŸLģKYކād\0$'ĘG\âE•s=ÃË^|3;Ä7māģŽ8éUG‡´V2‡ũh!‡ÚË3įīrC3zŒņЁŖ´ÁüŽIÜËį>%!‹å†püą<į­\ĩąĩąE‚Øūí~ā’VsŒcĢqYÉá]!ÛųVE*Ëö‡ ‚ģ?ŊũĐáRÅĻéēeÃÜC,ō)Gw!Yōp™8›<3ØS%ĶlcžûAGŧōŪcc~Ī/v3ēqôĒؚ<(mÖ7@P†FųŠīūÄ•DúV•ä b2îCƒ“ķ7Ë!Ī<“<š‹āĀõé’pzœįÆĒčļRNĶy×@Čėä!Ÿ~ ôŨ“ëķzTø{L°‚0××h‰!TŪČŨ€T|ŋŅ`;HqšÜŠs÷¤==.§gi-¸–YbÆÛBēįŅŗ‚yDöįšnĄggx‹4§kBI(Īąíč+,čÖ3ļęPҞĢ+ˆt#Ž#Cī¸Ķėt‹kYREžBTēĒ•H;r§ŨÎIéUĩ=6Úé\Í!X™6ä mÜíˇÃņl0%ŦM…brÄėU#¸įšČĩŌ3nĸæeVU!L_?dÃn8Áv§Ë¤ÄĘÛDĄ—†@ÛpŲäĢĮמ*ÂX)Ķ$´ķ“$\Ž9Īns×ĒhmÅĩšCæyž[ŗ+ƒ’Kw'ĻO~ÕeXyr/  äįĶŲŠ.ŽĄ€Xø\dŽ š7- pŦGQĮ¯?yžēÄęˇŊqįŖÍgBš¸Œ´?}RĒ CœņÅ|ÍãaˇÆš¸˙§–Ŧ,úOà ļƒgŒŒÄ¸ĮŌĩî Áo,Á_- ųiŒž9Ā>ũ+Ÿi—VÍ$ÖËGĖO2$ų°ŽC(cž<ˇˆ8ėj{9´‹›mVâ}-›Ėe_ŗFŌws¸•'Ą9đ@ˆk>šŗŸ™Kų‹k8Ų‰@Ō0sÉߏVÜÕųuŌÚÚäčДÔ"yËG }`Į8$…ŠÎÎøĒ6šîiKeĸČ6T…Õ#-ŊÄC‹g8tŸLgJ5­ P6­‰öƒr­åļ‹$™>ņã’rŪĪēÕh5ũiĻxth’ä­k ė ,w,dĄĀëWĩ[í&ĶRš;Ŋĸh#å#rV@wƒ€ˆÃ<ņ‘V5 VÎ?ąÍũ˜nšęņ‡U)tNũ&éîsÔĶ´ģŊSŧ?`˛d•#I•Ė%˛ģ€$pHķ2GbŲīUí˙N’īí™]ƒƒ%ļåCæ;ŋ6@;đúôØ<( –k¨&PŸ:ĩąÃļI-øÜKõ`1SXxb;)­9Đ,vÃą™‘\x ŧ’0zˇ­hę:9ŊÔ-.üô oœŖŠ?ÄŦ!†Ûß#ۊĮˇđļœ¸žŒą"v„”HŲÆW’zrqÍfđb#f ˆ#o/ha&9žŊüÅ'×`H˙á[+\Cšã)ū¨€˜ĘWƒœ•úcéWm|;ö}^ŌđK}œ‚Ÿģ;ÕD>^ĀKˇ?7~IúĶ56â÷ÄĖ#ŲoHDäāŖ‰7ŖŽHĪŖwéUáđÄǐÆ.QY#‰U(ĘNæ_÷× Ũ8úTqørúØÚnĄŒC"H҇`Ŗo– ĮĪCķuÁ;̎†/ŋŗD\D€GäȞk*ļ"xÞ:ë‘Û`äԒčú˛4÷%ƒÜŸ4DRY2čŅŽqō‚§ öõÎ+Qô‹…XjwC !c# c9d'žŊ{ņÁŦëũ+Pžxw‚âŅ6emĨ6Iģ*¨¸lŽ9ĮJĸÚVŽ–` ĸf7úS°rUpG ‘Īķģ&ŖūĘÕäļdį-—,JņSŒõWúnúÕË->ō9¯Mä­*šbŠ$ŪÜq´`m8ĀīœvĀĒwZeôĶ;‰›Ë&AŦÄ܈§Ucöŗôą=Ėš+ĸ:-Ȁ ō܏›œO_|ŸÆą§ĶŽäšxÉ*o@Ēķ ¤‚ëÃsžsQ›IÛ÷Ŧė‹*‰xŖ^™Į§ĐgąÔŧ LÎÉōŽŅ& ķÉāaē{fŽę6ōΧ¤jI‰Fp¯÷°yįŽÂŗ„7čŅėWXŒōĢŽ#˛;mČĮŋŽ+U ›dÜĄÜØÆÎxž´ô#f‘´†u#?įųTŅF"Ú ĒNėķĮøĶĨyCâ 6FF=+ĪuĄRī ķO#Ļ¨Û‘ö¨ķũņŸÎžĢU1ëLfžeņŋüŽēŋũ|ĩ`ķ_IøbEĸ÷ō‡‡5{Pšžįˇ‡Í™c.‘7°ņéøÖ|ū%[N6Gx‚#/˜‡` #s¸‡=6åzōi­ã{U¸Ø _ēpūbėz§-Ų~pŲė3Å[ŗņ(š:¤¯ ˜,íüí¨ŖĖ$I22õ ņúr}ømžŋ4ōę/´rÅiiŧBŋ3Ë&é Ũ6Ÿ,㌝çJ§sŦiÖüŪ5ØŧÛp ļToŒ)į,GüķĀĪ×ĨLž/Ōãģo2'Y$9!‚áq)ˆsĐbOĨIĄø‚ĮWŽ;gŽîŒq\(VbĀPO8Īáƒé[ķCĖ[fˆSiÁĮŒđqÅ1áļ×í0Å.Ņō‰˙õ‡åNK;X‹,VĐĻô á"2ŽĮč8ŌKchë 5ģŦEV4hA ´`cŽ0 šŠ=/L3m2ĖCy 1†ÜO^~ĩ$Z}…›IsēHXæHbPß63Čđ ü*”:nšPFúeŠ„ÜĒžB`n8îĪÕ:ÚØ‚Ė4Û-å˒ ī, lãŽUNzäALūÉŌ@Ž™bąˆüŧy ŨÛļôéžqëÍ>]6Âōå'žĘÚYƑáRĀ‘‚F@Í2-7Mļ¸ķ­Ŧ-ĸ•Ŗ šb Û.G8¨ü@t. Ķm *âĻ8퓊†×DŅ,-<„ĶíÂN×]ÐÉ>Āfž4Ũ/Ė˙gÚyĢ!˜Ÿ%x~~lúûõŠdĶ4æRŌ"!•Æ1ûåqé´zS-tÍ>ĘĖZÁ$Hû’>V Npi#Ņ4„ F›fŗiÄJr¤c:v¨NŖŽ4ë19ũԌ‚ ô÷ĄĮzpŌė–åœZ[‰]ˇ–ōĀ,s‘ĪŽyú’jō|čŲá‰ėzŠæoŸZœÉÎČC4L a•DXQžūŗīuĪ\)ņC=ĮĄhĨ0…1}íŌėĪĄ‹u^Hį2ˆĩÅ-Ė×inp‚&t8BY‡9| Ÿn„hXG{sáņöōŽį„–ˆ•Cp‘‘Æ3žäöŦÛ(|Aj–1<“T 1a 2€ąpH m˙X8ÉĮáYr˙ÂCa4ËPgËŲ ]Ū\„œ(Ī#>œžŨ6´š/fđķÉ<’ũŠüÂ¸ØØí @ ØsĶ9Î+6ŲŧF˛@ˇΑ$E›÷PĖw|¤‚1´mÁĮ$ŒqR[>ˇĀ×>tņüžbâ<2˜Én€aƒü gcƒÉ­]NK´ŗxm°nĨ;#|ũܟŧx=OCŌ°mŽ5ë;8mƒnlŪ$ ËåķîîSĐđOĨ\ԚúMVōâháDà y8_Q´ŠĪ?ĐAq¨j/=ЁŧÛxŽŧ¯´C˜Ę ÷AČ*ĀžÍž)ö7‚æK{ŋš'ōīÎ+Üę“Åw$PĸąRKģķĻãųŌ´o6å ´žėm<63Øã?[›hŨų—áģôäūįŖãNî õĀįũaL2ČÎĨHFÜH?Ļ{÷ŽV;¯îOLČMTĩ˙¸xĪÎ8õ枨LėíĶÖžeņ ƚĀޜ~ĩ‡Å}áVŨ ŲœũØ×ųVÔī÷I_âë×5ü÷i Ą€Čí1$‹îĘnÃgƒÆ3ČĮNĩš¨Âėö #§Ī2¯—ŸŪŠBƒîį's|ŧŽÕkTēē‹GIôČä’T‘QĐ&A¸ŠÆ} Ũž˜‡5—kŽëJ->Õg‰'Ā‘J#ÃFœI;Č9čGąx§T;ŋąXÜųHî& į!ū"@ úÔŋÖ%ĩÔmāKFš9%wģ‹ØĮ8Āīßļ*•߈/ žšĩM)ŒqVvr¯#å9#r z“ũŪM3ÄwÚĸ[ÜZ¤)$PQؘÜJØõãŽõ[ūĢØnŸÎĶŅ”G‘R6U÷¸ų‰t qčkKQÖnĄûˆ$}¤“bDiuØUp';ˆĮSŽ*°ņtč Ë¤´RyĻ6æųÎ$ŊōŖ?6Tägˆfņ”ŌÁ›[8oŪ™§!BîŒ÷é¨ĪLmaڄņŠ‘8ūĪĀ?ušãķų‰\(ũį¸ųM>ũŖVKO˛ė ?”d‘LMÎ1×1cí š_Í&§mc °}Ų‚G”œ…Q&NŅП/åÎA z‚mnHg¸a;Ŗ ˇl‰6(rs€¤ŲÆŸZŧkk RJÖr*,{Č,ģ€ōËãü>šüIü]mļÎf YBā4ŠX0Īģ'>âŽYk‘j—QÛ¤r+ŋ˜C)ŗh9’\ §‘ÍPļņ [ë‹KĩBČDf2c{ubØ-Ęđr­ĮLƞ.ŗ`ŽņJTžÆ!Ŗá‰;wd—#=A\V­|S§\Üà # —|’FĒÁēŒ`Ž ãj¯ÕģMâĢ?ŗĮ:Ûܲ:ŗžY rg9” ¸ĪTļņ<^y&ÚwĖ‚4‘TrL’  7p3ŗÉaÂ×J¸*KmëÁųôŽj˙ÄA{}EŠ×i˜;Õ>BÎę0Ėād“Œkī^ZĮyøíîCœ10VU€´k‘ęí×û§đąsãIĸˇyŌŌ*Λ^|2íI”€§÷`cՇnKæņ‰‰|ČâļĮšĐ…{…A|Œ(mƒ<†āĩĢëO+ūæ -¤›.Û (8?1ĪØŌišëę7ˇpÉk>X 0”ļđ$xÎF?Փ߂+&ãŗWiukĄļš v|¨!Wįsč3íHž)“s1ˇˆ;Š8XՃL Ũˇ?ōȁžšjƋĢÜ^\]YKŗFÎÉ #æA3 0@AĶ9íüKq9ōįĩˆ0›c˛Kœ˜Ä„ŧSžœ`ޏ {­ĪeĢN˛GæZ$q‰”cæqÜ|œķĀĒįÅÂ8 c áÝũ3: }Ō~mŧgƒƒ‹Ķę˛GĻÅv-ūy&D1™U%Äg•ĪsõõÁâŗ?á&1 Lņ1hĻd;Ã(’EHÁÄxĢÛ{´čīLNVV˜ĀÁ ŧ ÎqߟʡÄņįÉķ+–TÃÛ¸ģ.:˙°ßäŠmŋŠW|ī,2˜Œž\M•>Xr§'¯Qž*šņ[F&o)„;ÆŪ_Ė­ķ˜įîqŌĸ%’'v–-ÎÎČiÃ1€I,yų˙—N÷#ŧ†xnĨ ,ID씐XØ$ämčEeļˇn°™ ŊÂ3ŖHĄ“`ųFxÉôāuéDšĖ"C$ęUˇmGĘRAų°GĪÔcúÕyõ˜#ÜBĘ$ 䃁÷wdg'û‡ÛRĨđšŧŲČ ƒŧ˛p:qž™ÅôņÜüŠŒ$;@%ē…-ŸĐž°˙k,|Ȃ7 UÔ ņš†F:ũĶW-Žh–d,TîíÆ2}>jÛ2”R>gÛķw# Ĩßh•••O*1Æ?ĻzSÖ7–5ų†ôcŒgüæ¸=]OÛîxķ^ŊMR´˙čy9ķˇŊ}K*žūÕķ'ŒN|gŦŸú|—˙B5‹ŠúÃSÅkáxŽ';!†ß{ŸE$ūUåē‡Ä˙\ßŧļ×KkwČ{’š'ßԜcĨzž‹Ējúˇ„T_)nfJE n!Šî'sIī€r*ÅÖ§}­Ŧ:„°JĒé+Y>äųąŒméōœ†ŲÎ1U!ņŽŖ{dˇ6šsÎXKŧŦ؋[wá}ÃÁ ­/Sšâę{[¤VōÜĒEm‘”Į98Ā*9?x0íYuŦÉæËeq~ÛZs3éå Ú (äÔ†’Ģ:MÎĩ>Š*ęëk›‚€Å€Ņn_)‰Į ~o—ŽHči°ę:ŦlR4Ws^E%ÄrZ°V’r6¨Č⌝QOmWXŽ9Ĩ:lĻėQš'bšÉ‚Ē7—kp§ƒøĶfÕ5U1ͧÛ,­yPą(`F1ßûu­=TŊÔŪHŽaHZ+u’VE*ČÍü%[8 ĢūFŦ­>ëUv°kģiîe1Įžk›Mo#Ŗ „| }[ž‚ÍĻŗĒĩŠķL•7ėG–Ecķ¤įjqō°9ĀPĘδۓ­ŊôÖđÍ:Y™ÂG4q!hąlœŠI'žĄ—Á⾅sĢ3?öɚĘü˛D§sšTP ¯gY?RjÜڅÜ7WLŪyō&Ãl’$BŠCn H9'œ…ÁõŦ¨üQ~—$IĻI™Tʑ°e1/ŲŅöœ.N\˛Ž3}1W×ZēģÛ\č A3,$› §9B  úUÍ[Yš YôØ Ę˛ äڝ`ÎҐwFąĒZfŠwqŠŧW*iÖ7XČû˛á8ãrœŽģąÛ—z­Åē\ĘéûČŽŒkl˛ņžˇqœįqų„āäÕ üG i´ĩ` í"Vf †$Ÿ—€:gõΖ-zkĢ„†{5M)ERĮ(  ų†0HfÁ°zā‘bōōî+ģÛ´[G 1G0cIō ŧ°GĪŋ=xϚž¤’ĮŽŪHˆcö¨UŠ&ØKÃ0FFpA'éQ¸ąwI&Š) ĩbˆ§ym›C0K.:ŸĘ8͌ōŦZ|%’x­&WEcmŒ‘ĘņĮOĨJl4ØIŕ¸,#Q…9ˇNOũô}j),´ß5˛‹tAüŨ3Æ=‡ä)An `ŗėNNæĮ Ĩg7MD -cPrŧ ô}ųũiŗiúi$ųkë¸wtü~^ÕYė4ÄBÂ`ÆwuĪū„jŗXÆŪnÅ”¤Ãū`}p*FŠŅģ|æ<0bäc¨íׂéФ7PŪˇ”ëš…ļ ėō:Šn ô>•Õj0\´ąĀŗy1Üm¸Qæ´`0ČbŪģ 9ÉîqUīáŧ“EYErˇ 4aYåŠyŠ_ũ6–$>„į"xžKŗÍlŅ´sFVEuŨ$bHķ–ÁŲæ ¸îpsK%Ίˇ'Ëē3-Č*ŠčūÎp3‘ÉĀËmvF1ŠÍ¸×õÛHfž}č랕cŦ†9$>nÁÄ`1–ĀĮLĖUKˆa3¤fDWrÛ#,q“R8˙ëÔrÉlgoôˆš@NWz’­¸< ā}OŌĸ0C‚HÁ_Į¯Jcؐ P¸Á#ØöíŌĢËq´fF{uöĨEąŽzđs÷}ŋ0Oųâ ¸Ō9c%Á+–8ÉúwīQĮQÍ$)Ąmö[ >hŸi r=åŠ[…×2Nš¯m<Ärr7 €:âH9ŠŪ?üĻ[IÃHÄFrDq‚ā¸Hxf”ZøĸŌk‰RâYUŠ8GhÎØÛÆ›‘Ķ…#$œŨYĩ´ŧŠYŧų-ÂJķ[ˆĐ’Ģ‚›X dōģKs‘Đšŗ{ÜēÃČRy-Ė(ąŦ3ėÉšˇ–äg? īĀ#<ãÚ[øĨ,m╤2Ā!å7HCĄ}Äđ7÷ĀÎsËã‹Å!Š]I#FÁrQĄÜ1‘Û œr \ 8ÛŲF°Ä˛8ˆ¯™)!‚IŒķÎXÆ>€įŨ˛§ˆÚę‰^CŧŒĮąžŊA9\g#†bļĪÚ ÕŨÚÚi-^(Ŗ]Œ ‡ŪÁŽ2ā‚O īŠĖŧļņ j×w6r`ķŲŖˇ’Lˆ0¤r2ĨÉIã“Vl—ÄŠÂ.ãĩk6tÂČҁ€HÎAĪ8à tĒž^ĩi{qmir7I˛yÖDTŨ’ûLƒæ$đ8GbqK,ž({œ˙g#wD "…‘ (~ģA<ū]Ē+ŠüPö7–)„î*vį'Sšdē ŌG$—J˛yf0Ë;’ŒD88É9RvôĪé×ōŦoĖ[ˇƒ;Œ™GröĩÔ îxUo•L™ e3œžx××ōĐļĖsIž&#îąÃ¯ųīVWp“ tĪiŠ6Ļæä;d•=ũy⧍Ŗ”Œ œđ_åüëŠÖˆû}ŪŌģ ‡xõÅRĶ€ūØŗĪī×>˙0¯¨ŖŨō¯—ņųųëÅnčž“Lšžy"ļ-rķ3í ´…•x@HÚØ;˜ā€ ƒJņŸ¤iÖvf…m-QQōe28+ŒŊ[ŸQ,Z^¯¨čV‘ęR”ŋIÚC,L3ų‚• ā#‘sš‚ßLņĸAÚCn¸gXWh ]‚§Œ @įø‡§ ‘âeY'mBxaD(Iœäléæ1 ã§ät"´Ô§ļēŽōöE[ˆŠF°ē“AÉ ĩNGj‚čˇö=ÅŧWОZēMÛTŗŗl_î¨(#œƒŠ|š. oTp Í šķ[‘ūcĀčÉøŽW;zMŖéZŽŸ%Ŧ“ŋž#†dlČFæfŒŠ#ĻF×äuČîMt„¯!ēŽiČP’Ø;—Ž}}Š™Áe #< ŌpÜõhíRĀŠųIõ¤VBŖ8ÔvĻüŒĀŠųOņįHæ89Æ1ū}iŋ)ČUN™†9?äÔlĒAn~¤;CnÆ “Å D2dã N´ĮXÆæ3ؚA´ž0Tį8čM((Ųã8 ˙ŸZ%Ü-Îį öŽZî mnæŽ/8Úåža"|Ā´$`ÁJ9õՙmž÷Ž’}Ŗ|qŖnũŲß.T“Ábĸ<`đq’9Ę/ÂGĶn{x–YáĖ#˜‘Ī`í͟z”ĮŽO OwŠņĖÜZ4NĄ”Heã>ũ2:U†-~Xāģ<˛7!˜FK,{°g Œ÷ëRÉŽnŦn.ážxmœL1.G(9ųžöJ÷ĮNzÕŊaõOė úlRyōn/÷l$}î:í¯÷ÅCaĨ&ē—z…ŧb‰Ō2Í Kǃ€s’Š“Ûæ8éÍoŽGwvH–×2™dhÕ L’ĒG<ļÔOQķäŽu´xu6RuEhÜ †%U(Nį 9É;Ŋēt#œ[ũGV‹P–7yáļ’í!ˆŦ*NŨîÁ´į…CßúÎŖ¯îö4wl¸’āQŒ*Á[Ė8Ā'‚N8ÍZš“Y†[…g`¤¯úā;@q…Îãšō¸8ĮŨãšīwŦ\Ų´Ex’ūāėŠŲ°Fč˒G9xÛÜsŒsDwēË4‰6ģ먇Æ~cŨ[ | ƒ§9ę1Œ›ļsŨÉ9†ę‰Ãį đsž}zsn5KWd<Ē$ĐģũãíéˌĶ ÅHo5IghÍēÄLŠ w;AeËg€F lvĮ4˛}ĒM:Ö_-ĸšc ˜,EŠŠá†ßĪķük&{ÛÆžäMy¸;!p %sÎ #­9ĩ Q÷lļŒŸå1;`mcÎp ųGCÜ{UIωa–$.Y˜ŧeIØĖ9ūcß5åšāŲ]ĘsŽZ7T!X… }r?ŌĒJæŪęQˇÎBŲV9Ā8Lž3Į,qėy­8K´HėT<‡’€pzŒúã?[UĘÉšUqĮĶ×üãúËå ‘#py$ãŋõ Ä€Ą@w$‚0#<ūθ][?kē ˙Ë^õ_JÖėA˙Ÿ„˙Ѕ}@#Ž;WË~+įÅúĪũM˙ĄšÉ¯ĸ4%˙‰t›g­mˆbŧcŒûÖĩ˛"Ģ=Ž{ã°ĢŒŽOAÎ)­ߟ”äō=é P gœsú s`¨9ĀĪZŒˆ÷į 8äúR @Å ŊÎ @|šĀ=Ī.܀ mĨI¸Įā:â‘ãU´uëBÄBm pĪZTU#´ž‡üũ)ĄSo2āÛ4„)_Ŋß#đ˙ë*nĐĘûFAė”,{C}ÁõÍÔōĘŨ>ŸäSJ((ÉNy˙õÔ[ !ŒŌ- ŽŊ=j"Uã$p8īQ$A€!ÎAãĻG˙?Z‘ÕY‡Š9¨¤Nwuäū4ĸMÁÉoOëAlŒįŪ¸ĒlXĪËūĪNú˙Ĩ28đäģü¤6÷čI§c.ǏQ‘“ĀÉ=šĨ áĘŦƒåá{S—<œö¨$Č9T÷Nõä÷¨åØĘĀIķ¸ 6oūŊ1Ņ% ŦUJ u<XÉXNIqōž€ä z2™ Œ `ō1éú÷ô¤€ļwr0G9Ϟą<?‡ zj7c<…‡*IS’:éPyNĄģãōđqLT2]ĀU+†Ã}ô5!Gbc#ƒŅ}?ĪÖ –ĶH#~=#úT&1 kˇiÜ9 ō=OķĒŌ(Ģ>ŌØlž=§^•ļŌ˛‡&2ûOSŽHôĮëPēșuÚ¤žpøäœķúÕUBŅīxˆ,NlŌu+ÁU<įãüÂĄ)#ė`äØõ˙ëTwŪb•R9õ?ũcUĐLP…€Į–'ę/Ö­pĒl<7¯O’!.áŧ6äķū} JÎų]ŦŨ î9Î9ãķ8˙&ĨB>T'ôįĄôæ¸McæžŊ'¨œįķ5_FÉ×ôâ:ũĻ>˙í úpîPvŽ•ōįŠN|]ŦŸ[éŋô3YUô^ŒĨlaųz  ÖėCv€:öÅiÅ1ŲĮĻ:˙œSœ31Q‚ķÖ§U*ßy "˜B åžHéøūB‡Š,FzŽÜPŖoņЎ†Ŗe ¸ÜI=sŸ_åNōÎÎp0žŋįŠjĸ‰fëëSĸî<| úRbrä?)ü{ШB§ËĮįüô¤xË!įķŸķũi¯ĪĩXdŽGõ¨ŧŗĘŽFsĶš4ąą•* ’SOÚ3AĮ8Z‰É$ŽHÆķĻī!°8Į°§9;$ž=˙*Ŧ7Ģį <|ū⤑7aøĀėGOķĮåQĮ’›X€ôãôōiÆÜúd˙:ˇ¨ã'“œŸķšO,—ķ9´ÉbpHã˙=úÕyY€A-Ô~´‘K!Tb„ `€ÄŒ˙Z‘A9b='˙­L&Ev^W#÷> Đ ĮBsĮ4ā lF*Uãå$ ûãõ§ą#°=Š…HÁÆ@`Ķq[ņÎsM8ÁųyĪz@Š÷Áëō÷õ¨äuōÉÜ2F?Ȥ;Ѝ?lžir†O­SūŌ°i|ļģß;vį;ô.>ŧuĨŠö Ĩ…b¸…ŲÔ:pw’öāķėiŠwc4 Įq–,mqËģhįŽŪqéĪJ|W–“žØŽcweŪXWąĮ§#ŸzbŪŲ4Œĸæ Ā|Č2qĪâ@üjYŽĸ‡&YR>3—pžßÔ~u_í–lĮeĖbģV@XÔuęxŠ<Øå%‰Ŗhœ€ĐũiĨŖŨ•™ $ã q׏jƒ6Ī˜8 ~døTŪL&,•—õöĻÆ¸V6œķÉ I,Nr9Įų˙8 ÆĒ2 `v#­FcW¸Æėu§øu¤(Q&G¤qŠĄØ0Į‚yČĻl9LŽ n 9Į㚖4B˜‘“Û֜åö`sū}E†e€x6xįôâ“b”œ0Ã`•ëéīHbũß+_¯=)¸ÜÍĐĻ:É5ZGFbŦŲ=ķŒb˜ņÎŅ€NāTT˛Ŗ/°@/Ũŗm pq“ĀįĶ˙×^{Ėŗ‚Ų&L‘ĶšfЏ×tėuûL|Ÿ÷…}B œzWË^+˙‘ÃZ˙¯é˙ô3YX¯Ŗ4|}Š,tĮ~3ūy­¸dĐ ˙*ÕˇÎŨģw/ÁŠÁ ą Ÿj•Fė7RFA=iÍ׌učji68 õ¤;ÆOԍōœ‘qQmœā Š€ÉųšČíëKŗhÎI"—GŒûŒŽõđ‡n0O‰đOŪäíJųÚ99Đƒ€wæ›"†;0ÅīO1Ģ€däqīQē‚šöÅsđˆÂ5Ŋ72ī@ĒQ‹0™G=÷.3Ü{ķKiáĩ†æÚãí’oŠŨa,ƒi`3Į\c’zg=đHĒoā¨D°ŧz…Ô"9( (hŒ@.āJ€1Üôúa4˙ ͧđ_ŗÉäųÚ5RĢō Ãn@N8ôÉ ą'†ĸûIžŪA ĸ5ÚH1NOq 1ĶŊž&ŗž| Ũ¤TÂī †9#PG¤,}Î9TzĮ„WTˇ¸ˇ^P¸B„„ÎŅ˜Ę…į§îÆ}rzUĢ<æ&žyw]ũ¨)E 2™\ į’9'ײĄđƒDˡbh’0 ܊ãÉÄuČPsÕO­Aqā˧Ôįž¸B=˛DÁą˜„dËž ãšUÎŨZ_Ø÷QÃ<0ĨŽĮē[… än+ŗž^§k1<ō{Ņá­m f\ũĄZ5_Í‰%}Í×÷˜ī÷sžp3,ŧ1cß=ģJnMÁß3be“/@`¯^ŊęEđÜąj"įÎ(Á~XpģÕŗ÷FYļ`ž>RGĖy7J¸ģđŦ\‹ c‰;e~RšííéY?đ‹Ė‘Ę‚+bŌ]‰~EķK>NNϘ1ÅYĶtĢĢ]QĨš4Āe ĘW*ĸ0Ŋ”wÍoíf ŧ7˟Oz]Á@9'9ëĨ!VÚŒtί9§ˆ•—'¯AŽâ…@W7cÁŲ>`ËŋîādŸ|fĄ}­ ™ČëךŽđJĶ‚Ëžyí×úR3*öPc9ĄŖm>ņãÛņāT #aI#Œpr9éÚŖ“g–¤)\œÛˇ'üūTĪ%’FáJ3ĐgZA1.œôā}Đ8Ēå76S$O`:ÔCÁɐg ¨0>ķílp:ägžj¸$Ļ 1ģü˙œĶ6Ģ6Ö`gĨ8DTI†Ī9Ëuzã=銤ˇÎĀŽÛˆ9'œŸķéNōËÁ!FO=sūxđŽų.ŨAlŌhCwˆôÕ=îŖ˙Ѕ}>ƒrāįŸjųcÅ#/ÖGũ?M˙ĄšĘ¯ĸôĻ+i,x>•ą sÆî§<Ÿ­mÆØ8w\’pA˙ ąŽx8§’ĮjŽ'œņĨ/—€;ž„úŌ”@$Œt ĄĀĮAíŠB„œ–•ȓo!GCÜTŠHįø…FHĖŽ§¨Ŗd€FGTdļŪÁ{PĖcÜRîË ķΙæŽō8ßî=Š“68Üq‘÷F ‹ îm§aÉS‘rĮ|Ž>”Ö9”c€ŋ!;TŋaØs“JÄlfVÆĪãKŌT†Rŧ}AĻĘä‚{:įŽE0HĒåۗÁd~DŌB¨Ü~đ áQ!Vf9ÁĀ})ŒÛS ܞ{˙ŸëP3Œ°”3n: vĨ‘ŗāyF[=Ǐi€ÚwzœŒš‰†ˆ$–\2?Ījyp y`AûŧsÛü*œëŧ&įų€ÎėrHâ  $¤œlįį^Ÿį­+c”Ûž#9÷5^pĻwČã)#ĒrG…'¯#žNĨ¤ãüŽÔÆc$ŦĄIP‚+Îu.ŊwG4ž9ņ.—žŸk‹?÷Đ¯§âĮ—œšųcÅX˙„ÃZ#ū§˙ĐÍd×Đēi‘m×vÆ0=}ĢrÜ22>•ŗ-F8äôįÚŦ„ũãsŨ˙ĪüF=ÎiÎĮŒ¯Íü¨Éä7_SN_ŧ ČĮ:QįĒ’ō=¸¤!û¸Ī§JäíČėĩ5‰Ü–zRŖ9]ێO ~đ]A 6ãĮ֔g‚ƒĶ֚UĐ|§ŋ#>ũj9ą *ws€HīKqŽ{ö§(Ú¸#íI“ŽŊ*2Ėx#ŒpsŒŌyŋ0ĮC××ŊWɑŽîzöĪųü¨rsĖr0{æ€ĪšÁõõüŠ ōĮƒ×ëL$¨-Aėy¨šFBÅúō)­+;, ‘–ÉĨRų “†ãŽAúšcĮ€s“ģĶ˜Äx;›ĐķøSPŗË ātĪųÅ<‚ĖsĪúTJį¨8ČéRn°ū×ôĨ äā`ņĪcH2ŅüĒOl’i§qR¤ ŽAČ횈`@c¸N3R’¤ƒĩ×'wņįԚģļŖ# lū?įéLĒ|Ŗ ž qQ|ĐFW–ÎsëQ¸;B?xqŽšįôīP˜A‰ˆÜŦNr~ô†Gdœ+c'oŋ#4M—F†2ĖÜUY. “îSëū{ņQ¤…Į(>_˜ļ:œvĒīšŅ \§qØœŠpO´(pŦI\äđúŨĒģ%Šu˜Æ?Éũj´ą4kæ-Ü*žž˙įÖŖŪW‘į8ųGáH ”`˂F9<÷4Œ’2‘€#`7 Į'ß?J‘-!ĀäąÛ×éüĒŠûû™X3rN2ë\¤xܓķOœx—KÅÜ_ú¯¨|œuÅ|¯âųuúū›§ûæŗ1^Ũkãß Į |īū'˙Z–>:đ•ŨäŅ_Š–WXĐy ’p9ÛŠīŖ†ĪnWnWĨLąÚ¯'g&¤ qͧSNũ×LÎ‘ä˙Ā HI$I˙hĐa…šîyÎę>Ī#z|Æ—ČŒœŸøŖČ‹8Įá¸Ķŧ´Æ9ãũŖIļ2;úu4 Ļ8=:ķH lxlãũĒB"cßNhÄXŒzæ‚aĪĖËĮ<š@ĐŒ¸Į­![vĀ;N=é pŒŒtâ˜cļŨ˨?QL’X'+ŸLQTäĶC6äÕŽ" Qæ”ÃĨʧ?Ûˇđ$‡˙ˆ§Ž™/ĩYöŨsúTĻå_7ŠIîE iœaŽ‘ŗĮŨĮõŠ’34$úí˙ëĶZ՝~[ˆBžyCĪū=L6œs>ęOūÍM:XëįێzųgōûÔã§žp.m˙Žd˙ėôŖNËĶĀØõC˙ÅSŽššų䅘2§§ũõQ˙f}¯Ęy˙ĮŠãMM§t°î'ŽĶū4ŖJ‹iRbÉ=BŸņŠM…Xũ3ˇŸįGö|YY0:˙ë é‘`Žā;âŖMŅsčz€xĨ]Đ ĮܑšFŅm $–õų¸Ĩ5Ž:œį9ŨÖ˜Ú ›`å˛Ŋ÷tãÃáË6ÎYÁ>˜˙ cxfÉĪŪqôĮøRŸ iûBī÷‡ø{š_øF´ü‚K–å$Ž?JOøF´ũÄî|ũGON•ü"Ö[¸•Ā=@Į5ø6Éķûé99Đ˙÷Ȥ˙„ØEËdž @qHž€0˙Il˜P1QŸ@Pĩ°?Ä/Ōš­CāßÚuE \ļ>9éëT,~IŖ_ÛęwšŨ˛Ák*ÎųhÚ§qÉ'Žk˛—ÅžŸíŊ;ŋK¤'ų×ÎėŠ?ˆu)bq$ou++ŽŒ ’ Sü)•­árG‹4‚?įōũ WĶöŒeˆ–ę c“SĻ2Øåb=sÉæĻT ę ü¸Ũ~Oô§ āōx#ŒŸJWãw|2hÉŨĮ9ūB¤#ŠäĶÔ#¯4žZ€NOSÜũiÆĸ?ëžpqžũ3Iąw:į$wĮ˙ސTđ02?*dŖ’I'oL“MÜJŠÎ qÛ§øĶ&pœE". œdqŸZL',IÁ?LĐ bŲ'Š}떑ūĨ!@î™-ķ u획YŲ¤Û1úâŽĖŽšĢ Ēr¨R8Ļí ¸  wŠŲwœąāOŊW Tœcä8{õúÔ˛( ;ũiƒß9āöéPĘLJvąęy'ڔ’ dʓקCO•BĢ` Ôps@)ĮjN¸ÎiÜzšoéŌ‚ŠëA#§z@~´ōHéHHĪøĶ[#Ū”î<b•7 rs×ĐR`÷ôƒŽÔ1' ĮŊ;ąíMÛ׋œô§wÆ:R¯^i:6OŨ§x¤ėŖqäw¤ÜE4§ƒNäņĮJiôÍ&xô§7ëH>Ļ”ō1A#­4sÆ:QŪ”đhĮ­+cŌž;zԃŒRgķųŌdžz\”Ŗ ß^8 ŽƒK“ˇ€’9õŖ>φĮ\RžNJ6į€jô\ æœO>ôŧ㚆åHN¸¤Rįĩ§Ni8õĨÁīKž1šCIÆO­;'šSĮ5ķãĻ*`sŠŠč=é:į) ÷†€yÅ/zBqԐÛ­9ŗĮŊįRy9Ô° –+>:Ō#=ià p*cŸ”ņUØōsšLŽĸ—“Ž˜÷Ļ“ÎHîųφ$“úPHü*$ŋĨN§Üb¯4֐✊99⎝˛>´­“CíHIāb•Īz:P=éģģšĮĻ !ÎxÍ*đzRžrMéÍŊM Ø=x¤ôôŖ%LQČŒŽ)yëŠBqíKÁSA €)NyĪáŠÉ į'ƒĄĮZR>\šdĀô;ûP™Ûę)ųÉ ũīza㊧ƒG¸¤nŊp:Rä}ĐM+0ĀxÍ=pFI挌ŌžxéIœsĮžŊœāŸzxtĪãP“Å.xÆ:P8Ī4¸]§iŽ?ČĨ\šoņc Ŗđ§}h<-'aFėį­<ŌúuÅ!÷4Ö8č8§)Ɗ7`ū´v9āĶŗŽÅ īAķœŅÛ­5‰<úĶŗĶցœ‚jÜmŽŠûķNĪ_jBA¤''<æĮš FzP̓ũhÎHĪjPyæ‚p)7ô™ųŠI´ššŽcS&ęHü)sÆsHPi7§Ö8'R–æšd´å`ŪôėđOéLŪ=1UgåōząJlî6 GX ‘’j#(u¨ˇäķ֌ž‚‚@<ҏc9␸8ŠSÁĐx§˛ƒqL…ĘļĶČúĶŽj8æ’$ܙ=j9 GÅYNWą‚_Z‚ššŠeb)QÜõ¨f6WŒS‘˛š&ŖÆ_?=ÆTãŽ)°õīš—ŋaQÉéÆ‘0sNÜ28ĪZqÁ4)ČŏoĨ'RqO ūŊ0:žÔ)ų@¨ČÃg4ön)!į$æ¤oē;SŽ?Ĩ5š=1NR0=)AĘō~jŠûŌč($9Ĩ^ŧt IģŒvĻį‚F)Įëք´ō8 “Įzc‚8æ‘~īĶ֕ŽW§OCJÅ0šž@úúĶ ž”¤N)FT{RđÃÛۚĖ){āԒSÍI jˆeÃzՕéPܘ0ÆhwũČ'ŠĨĩäsÁ÷Šfg5 ŗuĪJ}Á@ęi-ŒmÃsÔԑ䠨ĨĀ|ž*`~\ŠŽ'öĢjØĮŊ;'œÔsũ͚ŠÛŒķÅ:D&OÔQĩąÖĄRDŪÔųūī#ĄŠ #Ë)“œÍJŦûĶYōŧœ‚ƒøŌËĐbŦ)ų~•^sHíIŨäuôĻŋøÔ§•‘ŠaņÖžN~Û˙×ü)‡ÆÚųįíĖ>ˆŋáLoëė9Ô$˙žGøSOŒ5Ķ˙1GĐđĻ˙Â]ŽįūBSōsÔS[ÅZĶ JãūúÅG˙ .ŗĪüLŽš˙φ˜|CĢžē•×ũũ4ĶŽę¤˙ČFī'ūšˇøĶŗŠˇ÷_÷õŋƛũĢ~NMåÁ?õÕŋÆļŧ¨Ũŋ‰´ņ%ÔŽĻP0ō+ß!cßŊ8žE"AíJx9ŖĻ9O\Ō9āf›‚bš2‘ôĨÜI#8ŖÛõĄēâš7.sĶ4ˇû´vöÍ’Z§{¨Úiá~ŲOûø?–OŠĄ†˜Ũ;Ë˙Ö¨OÅ)ÂéĀÛ_ūĩ7ū•Ā9|÷đ˙…âĨĐÉ|_÷đ˙…F˙ŽØäXB?āfŖo‰÷ĮĨ”÷cL_‰Ú’–ŌØrOõ¨ßâfĒíūĸØLņ¤?õp>HmTúí?ãQŸ‰:É9Ųk˙|ņĻ˙ÂÆÖ÷ŋf_ø˙^Ŗoˆzáé$ūŲĶOÄx˙Ëh‡ũŗÃãíxŸøųAúf)?á>ņÜ Ā>‘¯øS[Įž!?ōūGŌ5˙ aņΈ?č ˙÷Â˙…FŪ3×Ų˛u?ī‘ūÃâũt˙ĖJoÃáMokŒyÔî?¨ÛÄúĶ}íJįūû4ĶâMdœNīūūckúąë¨Ũ˙ßĶū5öŪ¨FĄw˙[üi­Ģęƒ}ríĢ5ĩKķÖöįūū7øĶúėōng?W4ĶysŪâ_ûėĶ~Ķ1ÎfįũŖM3Hzģ~tß1ŋŧ:7ˇ÷įFãëFO­&hͤÉĨÉŖ4})(ÉĨÍ&hÍš¤ÍŖ4QEfŒŅš(ÍfŠ3E¤ĸŠZJ\ŅIKH -%´fļ<"vø“N9Įī”tĪzú*ĘZsqŠbĢČ?-<}îô úšváŸ\ҟ|PĮ$ô¤nOzTįč õÆ>”\Đ;ņMô¤lãŽ>”ŒAæ?ÉŲbrØÉúW—–4›4™ĨÍ%.i3EŽh š3G4„ŅšZ(ÍQšLҚ)hÍ&hÍ´QIڌŅFii3š3FhŖ4Qš3E%QEQEQEŅE-%QE-”QŪ–’Š(ĸ€h4Qš ”Ŋ¨ĸ‚hĸŒŅFhĸ—ļh­o ž"ĶČĪúåéõ¯Ŗ##`úSĪž1ŠjpI‘īJ9=Ĩ$cŽ” 1HBJCœûúRˇZMĮœtŠIč3øĐ˙ŸÖIņԜŽĻšätȝ2øÄ?qd}ĪzōĶIIEŠ(Ī­ģ%QIKEQJ &hĸŠ(¤ĨŖ4RRŅE(Íw¤Ĩô¤ĨÍRtĸŠ)GJ8¤4RRŅEQEQAĸŠ(ĸŠ(īGz(íIE-%fįEQŠ(ŒŌĐhÍQEQŪ´ü5˙!ũ?<==ģŠú>ˆ×ĶārGOƞ1œŌ†8f—ƒš@ J\d’?• ã9¨Áf|.pZRqN$1Á•dœ`b“ąÍ ÁĀü鸟į^kņTÚŲ8Æwī^Ti(ĸŠ(¤ĸŠ(ŖšZJ) RRŅIE´”RŅEQE ĸŠ^1Iš_¯QÅ!ĸƒš(üŠE¤ĸƒGz ´(Ŗ"ŽüP( PMEJ)iQš)hĸŅAŖ4(īE/j1IKE%/4wŖ4QZ^8×,3ŒyÉ×ę+čØOȸî*Uã¯āp~”Āyw§Œdf”ˇ$f‘OHzæ—ˇ=iãži~žÔy$~4ŌH8Æ(uÎ(ÎzCÅyˇÆøđŗ$ž{W”ö⒒–’–Ž´†ŒúŅEQEJZ)q֒ˇĶ8¤ÁāsIڔtæ’ƒŪŠ^‡õĨcž)JA֝Æ1ېŽ´Ē íF?•7uRžF&)M'z\w¤4žœ~T˜ŖãĻ(?ŌÉĸ“ĩĨ"Ž(ëIEÍŖ¸įđ¤´ŧEi)h4 OĨ-%Ž¨<ŌbŠ:Qš\ŅHhŠqGjJZJZJ_Ĩ&hĸ” \ņIEwĢÚ)ÛĢYž8•zũkčëVũÚP*bNé“J íH1ƒJ‘Í ûØ=iüކ€;tö¤<FzņA ž}Ē6å˛ .N9ώŨëÍ5یr+Ī>/sĨÚãûįĩy1¤¤ ŌŌQEQE-RRõĨ9ŽôcŠŠ‚aI=ēûSíHŠ Ĩ#Å4˙œS•x9˙?ũjc=i0sÉįüū´í‡AīQ‘ŠP:vŖëHO4 ztĨ$tĨ/ n3Š>¸ ûuÍ'ęi{ķœcĩ OįIÆ}číͤ});ķŠLŌŒŅƒÚŽyÅõ<Ōsžô QځE(Å€( ivôéNQ‘Ôę­!ãJ1ƒŽh#Ž”ŅÅ)(Ŗ”¸¤#žØ Ž{~t†“͆F?Ĩ&jLuĨĨÆ)1GŌ“‘JqÔRvŖQFi:ŌŌw RįŠ(Ν4QœUÍ ãT´?ôÕz}kčë\cęNLŲ¤SŖéÔPĮ>¤ĶķĶôĻąÃ gŪ•Ī<œņNĪZsĪJh'sqÅŽqœRsˇ‘ˆéĘá=ŋ‰ēŽhn˜ŽâŪNįNÕäg­&zQšJ(ĸƒGįERŌŽxĨ#ŊQÜRõÅ9˙Ÿ­5sīøU‡8LôÆJƒŋ@??ķŠz8éĮ?įųQ _ČsL MXHūVÎ{uÎ?éL‘ ąŨŧcąë˙ëĻ*–n†‚¤mįˇųü)‡Ž”qF=:gւ~”āšĪN™˙?áHFŌˇjAAäĐ2s×­.`zĶ{ž)p LzŌŽzu¤Î)){sIKš1G4”õZV<’>´uėi@< Nã‘NG wõ¤~ŊŋJAĪg§js€īųTt¤` LŠ•8?ŽqøĐČ‹=yĪ_ĮŪ“<~Îippi˜¤=Š@ôŖˇ4§ēzĐxãŽ)@ūTížŨŠäc4›NÁëūoĶôĨĮ<Ō0Á4†ŒtÅ&rhĸŒQGãIE-kM;u b?įĸôú×ŅÖ ›xÎFvåVœÆ1OĻ{QÉä(\€9¤aģ?Zy\š1ķdŌ^i{gĩ7¨Í(Ž 5°§=¨ĨDßx iONz×ņdĎ>DĪŌŧ~ƒIųŌŅF(æŒQGcĨQJ3Å)įëJžô¸Æ1BGõé˙ę§8ãœõīM^ŋj{AīŸĨ3?ãĐS—Īĩ)íĶĻ?ĪøĶ88Íörjtž{{ū]j&ĪŌ„ŸĮ?ũ§ĩX ōŗqĮĐā_éPKÔį¯Ôķõ *ãˇæ?ĪãF9#ĻyÅDFŊ(ĪjvÜׯųÅ0ŽOõŠTņŒŸ×¯øŌ•ã€I¨Õ3Mü:UĄĨ#ŽŪŋĪãL#“ŒRāæš@ĨSČ ëIÛ­/nôƒŒŌíKūy¤4ƒŖ­IĶčiH§ų˙õŌ9úRöÍ9Ũāį=ŋ§Ŋ1†1éíŸŌ‘IÉãņÆ?¤§9÷Īõ¨ą×ŽiĀĨ5†9Š#íöįžũu# ˇĶƒņúĶÉä¸ęųúԞZ°$āįđ˙õZ…Ķāûô˙<ûTd`ņéڕ{Ÿō)v–ƒõ?֍¸õĪŋųÍ*ũîųö<ĶÜĮn?Ÿ‡ĩ)î20\õēRŽFqßĩGNéÛō˙ëĶBƒŽųú˙U8 tëœņū cķĶôĻíëžßįōϰ>†N qMįĩƒIŠJ(ĨúTö'pôûãų×ŌVũ÷ōĢCc(õRúƒŸÂ€O~isŽĸŸ^ŋJqĪOōiš"…'‘ũ(aÅ rAĻļæ|ãZBqŒõĻ0$æ†Î;× ņ]IАž>q×ę+Į&))HŖõĨÍ'zZ)hī‘IGjQŌĶųRã¯JC@ĀĮįA=;R¨üŋĪéJŨ_ƎI=N?˙]J€)#œãß?ūŋZlˆôíœúŠ€zū´õÎôÖúįũo¯Ŋ*āgŋéN~Tž=z~ŋũj`xãÚĨ†Û‘ČĮ˙[éīI įÅ$cĄį¯ųü}Ē}Ä3’x+žˇŋ­@üįĻqø{PĒpÜtžz…+ry8īŸ×ú~RXpsĶß˙×HN‡>”åÆ:Œg=?^=Ф(''šqPģ‡NŨA˙?ZQ€§ĻĪį@Į8įķøĶQü˙Īz#íĶ4ā īĮ㌅FAį={摁Éįķ˙=i^´éE%ĨáŌŽéqķūx¤§ Î˙]K—$gļzû{Ō탌ŸLgôöĻ€ ?OķøSŲvú‚zhnOķīīLČ8ū‚œ c>ųč??ūĩ+ō Sx9§.@Į#ü÷Ĩtųš'Ÿ^ŋĪ­,Ģ. BŊGĶŪĨU.n{ãnz{{zĐP€;}rF?øšy+dČÎsøgúTr¯ĖũsœõĐņ×ŪĄ+ÁúžÔ›Aî:fœĒãķōi00Įéųõč€:œrGå˙×§÷\žüúŠę¤“Œũ@˙ëõöúĶĪĘÉ/nßN?ÆĸÆ1é|cü)@ãœûį?¯ô )ŋ\{įüj#9ū!_IéĮ6pwų?…ZčsœĶ€`ŅŽÍ úŌįƒAúf”‚OzM´KJxÅ'E8 s“MúĶOĨ!¸Šƒū)Ö˙|v÷ã&’”S° 7”ŋ…(ĮãHF3@ëڜ@Įjf:RŠQíKČāS‰ÆĪų€uÅ.ĶŽųüÎiœņŠ–?ģĀ÷˙>ԄpxįŪ›ĐZ™ā“ƒÛŋį֚āgąČöĻëSGÂ)ãŌ˜F{Ÿđ÷ĨtädgœįõŠ$ ĩŽXäûõ÷÷¨rrzŸoķúÔ¨:qˇ#éū’ ãéž{đĻ #\˙žĩ(PG898ã>Ũ8>õãi>ßđ¤Ž1ëĐ~ũjW?t×ü˙Jc`o_Ķ˙¯BöīĮ˙]*į#õũƀIĀųēöūžô9ôéíœ~ÔåčÛŊ8ëūq˙ÖĻō3œ˙ŸķÅ5‡<ƒĮųüédéOČÂãŽ˙ũ§ĩFã‘Ûõ¤8įō¤ũƘÃpã=z ķô÷¤U' ĪĶüô§2¸L˙õū”×īxäĶqĪOnŖüū5f#ō¯“× Î?—õ u ‘ģ;¸ķ˙ëSōЎ˜ ãüsúTo€œ˜ëéבīQÉĐãžĮüį§Ŋ>§8Īų÷¤E,G ŸoéīNXĪņíŸĶÛ֍¸qđĻŗc9Īü úÔĒ~÷¯×üķīMlĀŨŸįų~~´Ēpų‡Läų˙õŠ­ŽĮĶü˙…4áp¤s͍üŗũiŨ}nN?ĪÖĸaËwįŊäõ˙?ւObxįܒ@ÉéīūqJņ÷ēwÍ; ß8Ī?_ņ¤ÆpgžÕ´Ō8¤ĸR@q2`ãæô–—˙6į$üƒųUÅß֘zƒđ˙<{Sĸ8ĪN9įŸĪ֕ņ‚:ãqū}j” fŦBüÁ1Įå˙×íFÁŽÜœ`‘ųõé:ׯœ[ ũs˙×úûS€OúP¤çųJž,íŽsŸÃ?Ō¤^YrXą>ųĪ˙˙Ö§í`ûÜmÎsíīëøSsœzämÎõŪßJ…ĀËt^˜õéŌŽ1Žũ_­1y=§oķŸz08'įúŌ3đ3Ķ;˛1ų˙õŠĢŽŊú˙]HĢ…níŽŧzuéīLnįų˙õ˙*vNIË\ū}i˙1+ßđõö÷õ¨q‚šúãđöõĻĮ˙_=?•†TįŒ˙֘’ĶūŸZFČČĮĩ äū´ģ€Æö͏Lv§)އˇ*‰ē‘œ˙ŸįJ9Æ;ž´Ō§jļOų˙ ]ÃŽsßúÔmÔõϚ)iW¨¯Ŗ4˙‰MŸŨŠÔ-Ķ—99ĪJF=Ī”7#Å'ŽięÜ})›˛Øš“ž &vžôW#Ĩ œtĻãžIŁųŌi‚q\ŸÄҟ Üãëūđ¯¤Ŗ­%O Ļž€_ķÅFzs’sG8ī×ßüæĀūëūúԟʔ¯ŠˇNiHAã&‘H•#°ÆluÅ0‘č*ƒžŋ­>§?įõ¤äāzôĒ1ÛŋŋOđ§H9ĪãūzRũi<ãĄįķ§'QŽxÍHŦS1Ī@ūĩ1°vŒ€Ō‚@8Čãˇå˙×Ļ?<“œŌr3Ö§…đIqéNFăvĪONŊ=šæ•UĀãîÉ÷˙g˙¯Unpsßvsø˙J‰N9$Ÿ×üiw 7_ÃŋĶúŌ OˇáõéĶڜģAį=Ž?O˙UJQ@wĻ:Ž=ŋúõ\c p{v˙"žāzœįĻ}˙úÔéå=9Īõë×ژÍķĀ``įNi[ú~ŸáQsČ<}ĪԌžžžœ˙úéFp8={JvâSŽŋ§øRdGsČĪôéLl`ô˙ RĶėdįƒĮ°˙?֙ĮįüöϜzcéMŖÖŒq@úŌ¯Q_CøjE:MŖeOČ:Vēų=E"iíČéÍ5W“øTi8Ī=iWīJß{ØSY°0sÍ Ü`ŌžũÅFj¸<~T™į‘Í>•ÉüH9đŊØÎËÛÜW‡J(íKڌQ­æŠqé×ŅëÎ>´ÖëŠ)Gą§/֘ziĘ2;~4ũŋ+;ŸëMÉÉÎjXø\å¸OëP‘ƒ“øRŠÁĮâ)\ûcžũiTđG?­Hŧ‚F3׌Į˙­QąOķß˙­R(†ÜŒĪ˙ZĨoáČŒ`žŪz{Ô'ļ9üZ#]ÍüYĪ^˙Νĩ9ˆįƒĪ§ôįķĻc$ņÛßūĒŗ Û¸ö ÎsĮÛĶđ¨db[øŋķÖŖÉ;@Í?(ÆOn3ô˙ hlzuÎHŸ˙Z‡ęH~GcÛˇå˙ץX“ČĮJvpF;˙õúõöĻņĪN˜§'#ü˙œR€FqųãņöĄŪČ`sß?¯Ŋ4ōO_ķũiÜÛˇôã퍏ãü˙N”†Ë>´}9⃃Iߊ{tJn3ŠSĘõ=höĪ_ķøŌœāåIëŌ”y§ę: ž:ûФq‘œõč(ČÆxëœņū i`G`sžŸįōϜw?Ĩ.zŌŽŋ…=[æ}sß>ŊzĶH9Ō”}ܟĶ?įÖĮĶëIĐZ~GãķÛ­†ņČúã˙­R;goĖ:g˙¯ôöĻ0=GéAĮ ëŒd~_ũzzā†čsīŒ˙…!n äuÉãņë×ړ>įü˙_Z‘_ Ogz}=`ãĻ}s‚=ũ¨QĪ9ëß?¯ŋĨ:^‡“ŒôīŸņ¨—{ķÛúS؀OCÆx˙õtö¨Hį°â€0y˙?įօ=˛{S‰āsÎsŸë@'מx ’Į͊BA'wd’sׯ֚:ŸLSÉųF Æßķj`=>˙ĪJ#Čúįüæ•N=rOã˙ë¤bNzãړøO×˙¯ôĨ 9ÉĮ)ę0Į§ĄĪō˙ëĐqĐúô˙>ĩ Ꮴ4Ķ@Ĩkč_ øvĂIōúˇZØBH9§¨QKžxëH<z~2=)7™ĨÎ3ü¨' ĀĄ‡ÕdŌ°ųNyĄTrxĻ1ΝĨ5€"›ė>ĩÍøüđÅîEÎŧ$õ¤=h¤ŖŠĸŠZQGįցÉ÷Ĩ$Ķix§ŸĘ—¨‘A<õĨäņĪáM=ûQëš)ۆūT€ŽôŸķŌ”p;=xö˙ëõęLä’qú ˙‡õĻį,pAīŸë˙ÖόHãĩ=W€¯ųâ˜Āįžįŋųé@që×ŋ¯øÔŒOĖīׯøĶ:ôĪNÔ(÷3ĶüņHzëI‚p=˙Ī˙ޜŠ1ÎO9˙ YI$ŽNr1Īŋ˙Zíä÷ö˙?Ĩ<ƒÛŽŸäô÷¨Čų‡~:“ŌœŖ%}˙ŸøúTɕ ß{¨Îs˙ÅS2„œįøsúZ‰ųb8ĮˇO˙U8 d;˙_éN“žÍĮŋãīīQcsC´~}:Ķ=1õ¤éé@Ŗ=EŌ‚xÅĮjq$˙Žiš<õ<ԑõ#Ķß˙×Ol†ėF8#üŠ…‡Ļx˙'§OjEÁÅ)××ô˙ëĶF§_^´q“ūĪŌ•°¤Įō§@ÁôīūzS@<`ŋįņĨS‘ƒ‘Īųüi?‰í@;AĀįúS™‰Ī\Ū“v§1Nv8˜ĻH9į¯AO 89Į9˙ë˙õ¨# vãŽ:˙œĶ Oˇųö§ãƒžM3’xĪųū´ĢœŽ3Ÿj]­˙ׯ?šAÁÉ?ŽhįüĪZP1ëCppxíM2)C3@=¸äãü˙.3ÔŊépA$u˙?¯ĩJäķøOëøĶ°z(č=ú{{zĶ€ ĪžÎ*ž;æ›ÖūRŠúÁgū)›s×ÜÖō tëŠv8'ŠU#88ĨÆzR/z{cņ )Ũ×đĨ<Ķ[9Íâ‘Î94 œsČĻņÆ)1ĀČĻ‘ĮķŽ{Į>žéū¯Ŋx)ëHi(ĸƒERįéH9â—ÔæÎ>ņ9ÅÉĮ$ įüûĶHÉ˙ Q?ĪųÅd’xúŌGŽi1ųŅųf—#“õÅ8 ĶĶ­Iģ!ˇOëL=sžĪëJ¤Œcđö§ƒ•˙3Ķü)„ö?­'cׯųüh$’x8ö˙=iĮĄ÷œR6;úqū?J€JéĶĶŸÆšzväĐ9§\˙ŸđĨÛÁĨØ2~ŋũ}(^8ãųéO\“Îī\Ÿķ×ԁœ€wÃŪ` įˇôĻ–åēåüēRÁéųõŠpü;˙/¯Ŋ3øŠã€ŧ{˙õ˙úÔ×4¨xëŽqĮooĨ+/QŽĪŋOzSXž~ŋūŋʐ/ įįņĸ5ÉūŸĶú͊`/`~¸Į¯Ķ˙¯AVĮ×?¯ĩ(\ƒŸ^˙˧_zy^qŒķޏįͧ_įQČÛYēķĀĮųúTLųéķūzSRt¤Í%/~+ß| †đĩŽ0>NŨ&ē1‘ôūT™ĪNiØ8ôĨ^œžqJŊ9Ļŧv0r4šäĐFAĮZAČį­5€ ņC—ŊŠˎô„ŒŠFāsŒVFī ßō#=ŗ^zŌJ(ŖŊŠ(⎆ŒĐiiE÷Ĩ)´QKHM.O ûP:ņOĪŊΎĩ.pOđĻņ“Ú—ŠãŌ†9Į"“Ÿ—ü˙“NLŽžŊŋĨ xÆ?ĪøSyÁũiI'=ĪõϐF:Ōx§ūŊšãņŖ#‘ßü˙œŌ1Îpič@ÎH˙=˙úÔ įôüžœÔ›ˆˇ¯oNŊ)šĪ>ŋ×ژ3ß9Ī|˙œĶËg#žž˙į4Â}8üéËԟoÃáM|–īŒwĻÜԁž˜9ŖŽzĪ˙Ē”āæœÁüģŸÆ›´g§ëF9é ‚8˙?Γķü)ry “ĪôíŊzįüū´€í8"œXdp)ČzP0:ĩŒ?Χ˙^—œŌœāį¯_ķīíLäž*Eā.sĶđ˙õSx8ŨĮ×?­'ˇīžŋãNÛÁ<õĮ˙[§Z\ryĪĻ;ũ8¤#Ÿlg˙¯Ķ§ĩ:1‚3ØwĮų˙ ~Å$qß$~_ũz€Âã'¯?áũi¸ëƒÆs˙×úûPW¯ô˙õŌ2äžĀãįĨ(÷ãŸķéNU$“Žŧ᝸úSˆ*ķ×ļsŸņ˙ëSS¨ÆO?Ãũ*B2¤Ÿäq^*6Ī͟Ė˙ZUfČöÁū__zSŒāxöįúĶGđž3× ü˙úÔî>\ã׌{ûũ)'gsūEHā gđ—^žõä—byúõüj0§9˙?­ =?*V;ņū `¤=h¯{đnđĩ–0~CĐcšŽ™§Î;<ōi ĮCN+ڕOŠsƒž9úĶ‚}é9ûĐŊ8šSÆ `÷ĻvĮ´uĀÎ)­’3ÅaøĀgÃz€É˙TŨ>•ā­7ëIøQEJ)i QE)é>´ p4zsųŅF9¤ĮĨQKԊP}É9Ĩ$˙úŋĪZ\’;vŖwü˙‘Mį4ėō3ūúô p3ųúŠ ĪĨ=(Î â‚rx œcž ?äRƒĀæ“=}?O˙U/bZxNxúõ˙PIāô˙ 2rô˙=ēP‡ˇ~yüztĻįŽ{ĶAĮnŧR1ÎiĘx>ŸįšB•áOSō€F~ŊūžÔÕ9ęĪãNÉÁ9Īoķ֜{ãôūžÔÖčŸųíMQŽÔ¤p0=ИĪ\~1N į˙ÕOņí˙Ö˙ëŌ6{sĮųīIé×ü˙ZrF3ŸĮ?‡ŊŒz{JLnįˇé˙ę§t ×ņūŋԚI9ā˙ŸëOry§n˙Ĩ8¨HįŒû~ŸĨBAp=iɌg8íūƜyq×ŋ/ūŊu'ŸĶúņAëßsßëׯĩ"uî0;ŸÎ¤@öĮáéūí ņœņę?Ÿô§`ŒŒîĮ?įīS][Œã_ņ¤éģĄãŒúē{PR6Ž3˙×éĶڜģWŽ˙ũ_¯jSĩ™AÁíŽáŸëJHÁ$û ˙†?ZYH+ŽšOž=}Ē>äœ zsũjHÆCĮĀíí×îûĶYI˜vī˙ëééøS€!—;ŗøįņ÷ôü*@šÄį ÎIö˙k˙­Pmų@<öīôöõ¤g;vöę=ŋNžÕ IëīÛô§ëĮˇ˙[ëīAN8ÆqųĶOAČĪ_ķū 'aJ+ŪžŪąÎI zũMtÃâ•xíÅ/Ķ5‚jUĮž}éÄj3“ŒŌgü(ĮķH=(lķŠhã9¤ÁĀíMzĐG cø°áũ@uũËtëŌž|ŧxĻŌQEQERb–ƒF=¨Í( QԌŅõĨ"ŠCíKéũhqŸZQŽi>´ŋˆĨ=1MīJz÷ëF~š¤$ũ(â‚OŊ'įJ(Í qž•! 䪁Ķüū4ƒ8ķ 0”šéÛŋį­4œāzzRdœZF?äŅ“ČĨč B(éŽÔė|Ŗ×41ĪŽ)ĀdÉöįü('’×?×˙­KÜôŠšÛÛõ˙z{Ō˛íÁßüūU~ŊĪãNQœrOūžôãééí@a“’1ëūGJwF9ė9ŨÛëĮåNĀ`09é×ôé×ۘŠ _ū°ĪøZ Œg=?_ūĩ.Aô~8˙° ļ?§^žô1ۜqū~´Đäļ_ķŪžqūZh8#Û°˙=*ÂaĶųį<}ŲϟâāŽ‹ˇ×Ę‘¸'9ëøũ:u¤=qū}ŠclqĶ9ūŋOjr¸d¨œāôĨ<ā 8Á#ō˙ëö  #ąÉÆ đöúĶĮúŗĶ“×8ĪëÁūtŦØŨ“ן|úõëíõĻ=0įōįķüiĄ /aÉį˙ÄĶ@ÁŗŸ|ūŋŌ…pëŒûį?ãN {đ#ŸozaÉ^xËÛڝ“ŽāzõēS%ÆzŽ=*ĻņšQ^ãđĮđ‹[œŒä×TķņÅJĮŒôúP2@Í&ܐiā(ž})=†G֟ģ¨<ÆyĻ“–Æi=8Å)ä:R׎zSAü0°Ą‰ü+/Ä_6‰|0ō›¯Ōžz“īˇÖ›MÍvĨ¤Ĩ¤ĸŠ(Å”ŊhĸŠ)síJ3ŠCĶ4 rõi:9¤Í.h8Í;}>´Ū;P0O' s֓ŋZ3ëŪ’—i3Í(ķGĨ'ZQ͚:8Ī4 ƒĐROį@>”vĨ=ķAÎyÎiFI0xâœŊLõéú˙õŠäá; Ëüi=n—˙^œOîúSė:~~ũhL9 {úéŌ1ʁĀ펟Κ¤ž˙[áOōNz˙õ¤vlļIëÎsœ˙'PyíN—ųíĶڛÉüŠPö§¯N1ũ=ž´åÃzr}†}éXO#r?Ÿ˙Zņ¸p8ėsũiģˆ8ãĻ:ņôëԜ[§ĶœŸįĪåLŨ͝_ķøŌ‚Hg9ãūžôĪôëÃښĜ˙Ÿō(ÁãĮ˙ZŒ‚FGlŸzOËōĨV Žžŋįü)Ā8åJ~ëtôĮ_ÃéīIާį˙×Ĩ“ßĻúũzĶ׆^ŖŋË×đ÷õĨ åGnØÎ1ííëN%°Ą¸‰Î1˙Ä˙õé ÉÆy ũ§ãC–ČnŊú˙/ŊīMßķ~ŸĶĪ֝¸ŒôÁ˙ëôéíI€OߟĮüôόdÆ0pqí˙×§G‚ c$œsŸcéõ§ž>öwsԌgëĪšädļëׯĩW‘˛N8č?ũuJ{Âî|+ŨûĖ8ޏ€qJŨ8ąƒÁüé¯^”ņŒ{įŊ;q‘õĻąĪ ņJzįĨ7ŲĨāã)GúS9Ŗ$uéQ æ•Á$Vfŧq¤Ū‚ũËsŒãŠųæ_õõ4ĘJ(ĸŠ3š '4´bŠ(¤ĨíEĸ—Ú’Š)xÍčÍŠ@&—Č8¤9&—=čÔԙĨĮZCŽh⒎)}):Ōķ“ÖŒž´dޤæEĨSŗĮj=:~4 āų¤ĪL~”õÎ8įü)į€sÆ}sūqLlķ×ß4Мāgüú{ĐGŨõ¤~Ÿ¯˙Zžpt܏ņ¨ÛŠÎ:ãü˙'#ŒŌˇ|chŠQÁ:z˙õéëž;ęx˙õSԜtīß?¯ô ““Ûŋ\˙ņT„œ’GąĮų÷¤b2HÆ1ø}ztöĻž{v˙=ЏéĮ9õũ?úôŖī‡ˇ§ųúŌõš9íÍ47$œzįú˙õŠÍßza㯧ųü) éƒGBę?ĪZvr=zéK¸c÷˙?…;wסĶųtôĨ9Ëp}ķ×ņã­;o<žqĶßĶëīH[•9÷āķū4œ >˙ũūĩ(!y{`ãüiš0Āôõü:ô÷ žXŽGį­ÎN{˙œõëOVŒ‚ á?¨÷õ¤8p{véoo_ƚAČ÷įĩ9˜‘‚O^ųũĨFÎ~`Aëßüõ¨‰ëMĸŠö߅‡w…PqÃˇoĨv`û úĶ•@÷=h(4¨09=)’Įœ~áĶÔPĮ¤Ĩ)(ãšE&‘Îp3ŠS’Ŗ<Š`Až”ņšĪÖWv›vx›§Ōžuœbg펊JJZ(ĸŠ:ŌQŠZ(ĸŠ;RQKKIEĨ擸šĀŖ4§ō Oš¤$q@=;QG×õ ži?-'Ĩ Ķ€Î•!8'Ĩ¤>ԃƒKE(įü(ü '­ß4g$g§Ĩ=pOnž”1äôõéū*Cßô§¯9éĶįüi3“Öœ6ärsô˙ëõĨÉ!@Ī^ƒúSpŸËđöĻô'#ķ ’ §r?Īņ uā:gŸķĶڜ§ž:zķŠ g8Æ8üŋúôÂ㜀sôĻ–É<Œuč)Ę@īŒRČúRH=?đĨ$ô>ŧį?­!sˇõ˙? cĪôŖw\œņĮųôσßúRį€zĶĀųsÅ79ôëB ĮįOŨŒôĨΰ<‘×Ĩ46zzuĪZrä•äúņœįüi7\gˇô¤ŪqūÎ)čÜ6>ߏĩFüą'õĨœc=Šųé9íūÆĸ'õĻî¤Îh&ķEŊ¯áA'Âã9âVÆ í@ātĄz˙:x^G@)W§\Ō(įŠbįžht'=)ÁF ¤ öŒqQíÎqëNƘ9=č āāÕ=I?â]q“˙,ÛÛĩ|és˙ũãüęJJJZ(bŠ QGĨQE%´QEĸŠ^(Í&h—9ë@ŖĩĮԊCKۃIKŌ“4ęi4Qž(ĸŠ\ņIE(Å.zwĨd“߯ųüiyãü)ÍĐņۏķéM˙ \œƒĪųū´)är:sôŽ{Ö˜pE7ÜSŗŒôô˙?ãJXuö§+gõú͐í+‚F?ģÛéLf$d}8'§øS{Ōũh-ÆsAΧjRņÁūt֝}(ÎzŌæ•xŠÉéƒĪođ¤ `žŧŸņĨ_Į$ū9˙eN3íןĨāp{ŸÂ›Į=hĪlΔ€8$ÔdsÁÍ(÷ĮáJp3ĪOJi<ņFōzŌf’Š;bŽ”RâŊ§á&[ÃLé+!]ŌFCÉÍ“ōšvΔģ"€ŒJ]”ÎüøSYNđOJrį8Ī0ČĶ:rM)dⓞ”Üv>´Áǚ˙AœQ†Ōžqģé2ãûĮųÔ8 ô¤ĸŽôRQE-%­-%QKEčĸŠ(ĸŠ(¤ĨŖŠ(ĸŠ)h4”QKڌu¤ŽÔQߊ(Ŗ“šŖ§z3ŠPH S˛(bzSsJ AךZ ãیžŊ)xÍ+¯Nô€ã֌ŌfƒÅ&i}iKhíHOJjOëG<õĨ?C@āԌŠ3ٸҜį4¤ŽzPLSIįĩri3Åķւi ôĸŠ(íE%--{_Á“ŸJ ûãĶč+ĐöũiBņÍ9ExĨÆOoƍŖĶōWaéßڐĄéFÂBhe$c¨ ĄÅ&Å ŒŽq“LÜqÅ>lU{č‰ļ”ü'é_6_Œ^Î?Û?Î̚LŅGԊ(ĸŠ(Į4QIڊ)hĸŠ(ŖŊQE-%ĸŠ(ĸŠ(ĸŠ)hŒúQ͆Š3éEQ@RįGjOƝšJ3Š))h$IKIGZQŌ’”(Ī­Q@<ԜJ(ĪĨ!4f”sš3ØŅ֓ŠJZ))hĸŽÔQE/í?ąũ…qČΜz}z@č”ė}) žœRŽ´¤ õ4…}ŠŦ9éJįŠCĶĨíJæ“›´sHGĩVģâ 2pppkæ]H§ÜsŸœõúÕR(Ŗĩ'4RŌQEQF(ĸŠ(ĸŠ1ERŅEŠ(¤ÅŊ(ĸ“´”´QEQE%QERžhJJZ(ĸ’—QF(¤ÅĨŖ¸üi1F=ŠqIŠ1F(Å. & 4}(ÁôŖiôĨÚŪ†‚‡ĐūTĸ'=ŋ*_"Oųæß•8ZÎzC'ũōiÂĘčôˇ›ūø4å°ģ=-g?đR.•~˙rĘäũ"4áŖjGū\.ŋīĶ…”ģOĨOĨO`*PŒ{ʗĘî7åJ ”ôĪü”ZÎzC'ũōiâÆčãķøĨ}áĮú,įūؚxŌīŽ1gq˙~Íę„dÜ[Īü)ëđŋR8ÍÕ¸ü Hŋ o[Ø?4˙øU—c¯âŲøÔĢđĒcø™/ŋîøŌ…nR„_ũzwü*Á“˙#˙~ŋúôõøX›9Ô[?õĖ9~E›P“?î ‘>[æūb}”R…ļŸķû>Ũ2|-°ū;˒}°?Ĩ;ūvšü|ŨÅžŋ ôŧįܓūđ˙ ü+-!~ô—8˙|…8|4҈Îë“˙møTĢđ×DĀĘÎ~˛SĮÍ b˜y =~hYÁˇs˙mĨtô3ī편ĶĮÃũū|ŗöÛüiÃĀz8(āMū4åđ>„üƒâüI˙ø'B'ūAĐņč*Eđ~†üƒmŋīŠwü": éĻÚįũÁO_ hĀcû6Ķ?õÉjAá­ g}Žë’˙…#hR4ûQôˆPš&œ8[ aŽŸē~•mt{Æ,āävŒSƕfšÅŦ#=ö ›hE´_÷§ũ†Ü.<¤ŲEc€`“ūų¤xcΝt§¤‘÷EKä¯÷ú Uû ~žJ€2ŋJ_-sĐRųkƆsĐSV5•6Tî?•H‹˜ÆEqŪ ?Ø ļÕŖļ¸Ä7 Ŗ:íƒ&TŽj=Ä0ŌĻS‘šv3íGNqAüiÆš9j Å9xŊšë@g)õÍ0ķĶ"˜ßÖ°|[Ē6§íƒw9ōáOV#ųԃÁÚ"˙Ė:õZxđž‹ü:mļ?ÜõđžŽÆk×ūyŠ•|7ŖŽ1§Z˙ßĨŖūí-NÂÔÛ!OM NSen=1ŠG˛SÅŦė iļ€üļņ~)ßŲÖŖ‚<öE/Ø­øũŌgũÚwŲ"ōÍGā)ÂÖÕ"(lT„`ķÍ;ĩFü)>•°wŠ#éQšÍNƒ‘N<)Øö斛!ĀÎ3Q‰ ãĩLœcĨ åzŽĩɓę*ÂcÍfk6ęv3[N쑯>•“āmFW†m6ø‘yeûļĪV{ôŽ‘ĮĪ×Ĩ<ÅKn´üsGŌŖ•°=Šąr'š—ĪĀŲ§ûœP[īri€‚:ķH2j;‰8Ũ؀ d’z âôXÛÄ!“U”ŸąÛ˛ž„Ž ~d×h(w9¨älëOĄúŽô:f”ã´ŌGUÅ.AĪjE>œĐØ„Špi3ÁĄœô¨æä8ĸ03ŌĨ(ښŖ9¤pxÍBdįĨJœŽ˜Ĩ ö)5WŽš§mĻā“ũh"”/<ņKšį=)zĶąĀ * œŽ;SĸfÆH5.3Œæ‚ŧqPĖÅqëDE$ TŊh Š\bŒdŅŽ¸Õ,œ/LJH€ÎjQČíKŒđ9Ŗ8&€Āãž+ô ÕbÛúio›#ˇ­K÷ûb˜Ā.NE=BČ›¸Īn•ČxĨHÖm5Ëpvnōn@üŽļŲÖuIPådéVdPŠ!8QJdņÔP&õĻL>ldķOQˇĻHį4…H\Ōŗ•]C3““š–3ƒƒÚ’FÁęk–ņ•ôˇFbŌnÎāšūŸnh–QØXEmųc˙ëՙÜĨ“pSũ*¸HĢh¤(9ĻL܎p)0qA9\~´ŪŠ ˜ëQ*…b=†[Œâ¤EëÍ)öĻHvŽ)ĒŊé ÏOJIŊjHÆ'Ĩ4Š0pyĒĒ3/?­ZPĀĮ4Ģڂ8Ļ t8§’}"€5Ŋ *ķšqS}E9G¤zSrV¸ę*Äcåå^s@ëUîzŒĶâéÉŠ2 ◠˙ €2i‚EúĶōĨ;yāS ¨Į&š[đŽGY|iŖ0$‚~]ymŖ Į9<úb˜˜Ü{Š˜0QëK#dRÆsŌ¤išXä šĨäSÜ‡ęÛ_iûķ׊\î,ãŠĸg>gJRÛ:‚sO]ÄdRÆįvĶR1ÚŧЉXÉĶĨ6BA敎*ENrh•NāyÅ)mŠīH~M&ķÕ!åInĪZ[†ĀĀëMŠ6'vî1ĐRN˙^ĨˇSŒæ›pĖéJ‘ásšˆ30x¤’!ŒŠ‚0KcgiTâĸTŪ;Ķŧĸ6ņ§H‹ˇ5NâÎ=BÎ{iW1ČĨNkĀķËÜč×­ū‘fÄG“ËGü'ō"ēķ"Ŗ•vGÅ6ģyëM‘71"Ĩ‚ãšz& -ûÂsRn¸ĻOĘ÷5ŋŗÅ?p}=ęĻĢ{¤—0TA’kđmŦ—S\ë€ų÷_ęÕŋ‚>ÃōÅuņéM“¨æœĖMW ;’9ŠËž=ÍE! ŒSüĀ:qԘYH§,Ą@ĨsÆE41'Œįš§+°ÆAŠ”äT3° īéMķYF?•4žXJųÅ*Hß(ՀIņJ:B8ëTYšvŽju.ŊŠČųëDĪ´ u70ÉŠ0¯ãQšo_z˜Å’Ŗ™pŨjX€Ö™7_z–5ų{P8>mLÄ,~†’$ŨÍ9â{ÔQņ;Q!ËãĩN‹€0?‚lúš•W1LNd§ĘšÖŖˆ€ELëÁãœT œQ ÉĀæ§PvĨBŖ÷œįŗ€ jreT`}G!Ā䊙Îc'¯–ø<Ņp>^”čWåÁŠÂāRm ˙רeˆâ“l€ ūŊG)9ÅLŸę˙ĨGÎėįō¤—†ĮjŗÔWc5$$mÔ7 ûĘąųEWķyĢ1ÍV„~øņVdÆĶü…Am‚H•:bF=ŠžK63RÄ8^ĩÉøĘŨôíFĶ^ļÎmČK€?Š3Á?†søWYgp—6Ņ͆GPĀõâ’ä†LGzŽ =īMed8~4gæâ—yf ?Z”B;Ô2ŽÆ ×bŌaÉ´€‰nXqô_į]wŲÄ1*ĮĀ,#åīQûėgŊK,Yd †ķLĶįāŪc ŽtžZ|* r>´žPã_e9ã=*IŒT(ۜuĨu8¨á?6 2P7ņšœ +PŪÕaÔ>• n'ŽĩgëųŌ¨ā÷ĄÆš¨ŧÎr8õĢ@uâĒ?É&=ÔļÜgŠ76rãš‘˜3L,Į#$*Tķ֙0ˎyÍ<Į­,n¤gŊE!Ë÷Ģ1āÔ7=AŠŖfzT@¸jP_#4˜ŒsRC÷).ČE20DG“IÚ˛Ũ1ŪĒ8Ė™ V3šŗx5ßtâš-yqâ= ãūZ0˙ĮZēeRŦ†ĘãĻAųÉČh`Ž?:‚p&ŸÜĻÍ÷ÅJ§åįŊA’$īŠ’_õt[ōŊsRČFܓUŖsÜRʤ>Oa(ôĒķŪ 8AÅB$ŠdÆĖÔPIdáGJŽÛCuÁ4ÁÃp?Ռđ*$˙]ŽŪõ!`ŽÔü‚*åĀäTŽ?vGzdûšĸ~ķųS •ŨOÖ§‹îŸĨ4}áôŖø×éP]vúĶĸû‹MģéD?ę6/ŋVŸ úÕc÷…t*ĢJl˙p}k“ņü‡´úîô]:˙¯;u5?ë*ĀīPÜĢ4ZũĘ.{})˙ōÍi‡ī­J˙pū5?wņ§Í÷’ }ĮUúR/ÜZŠž*xūč¨—ī­>OõmPE÷ĒğęÍT“īŠx˙\ŸJ´ßęÍBŋ|Säę>”ԐõüiféøS"íMŸ úÔö˙xUąü4Ōĸ“îÔڟAI7Aõ¨“ũgáW úUSÕŠ­ū¨UˆŋÕĶŪ4ŠAûƜ>īāiÅMH;Ô§îˆ}áNë? ‘ē~Â_˙ÉL˛˙¯SüÍví÷éĮîŠŋÖŋ˙Ųleptonica-1.86.0/prog/contrasttest.c000066400000000000000000000065361506303110300174360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * contrasttest.c * * This appplies @factor contrast enhancement to the input image. * It also plots atan curves for different width parameters. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; char buf[512]; l_int32 iplot; l_float32 factor; /* scaled width of atan curve */ l_float32 fact[] = {0.2f, 0.4f, 0.6f, 0.8f, 1.0f, -1.0f}; GPLOT *gplot; NUMA *na, *nax; PIX *pixs; if (argc != 4) return ERROR_INT(" Syntax: contrasttest filein factor fileout", __func__, 1); filein = argv[1]; factor = atof(argv[2]); fileout = argv[3]; setLeptDebugOK(1); lept_mkdir("lept/contrast"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); na = numaContrastTRC(factor); gplotSimple1(na, GPLOT_PNG, "/tmp/lept/contrast/trc1", "contrast trc"); l_fileDisplay("/tmp/lept/contrast/trc1.png", 0, 100, 1.0); numaDestroy(&na); /* Plot contrast TRC maps */ nax = numaMakeSequence(0.0, 1.0, 256); gplot = gplotCreate("/tmp/lept/contrast/trc2", GPLOT_PNG, "Atan mapping function for contrast enhancement", "value in", "value out"); for (iplot = 0; fact[iplot] >= 0.0; iplot++) { na = numaContrastTRC(fact[iplot]); snprintf(buf, sizeof(buf), "factor = %3.1f", fact[iplot]); gplotAddPlot(gplot, nax, na, GPLOT_LINES, buf); numaDestroy(&na); } gplotMakeOutput(gplot); gplotDestroy(&gplot); l_fileDisplay("/tmp/lept/contrast/trc2.png", 600, 100, 1.0); numaDestroy(&nax); /* Apply the input contrast enhancement */ pixContrastTRC(pixs, pixs, factor); pixWrite(fileout, pixs, IFF_PNG); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/conversion_reg.c000066400000000000000000000366201506303110300177200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * conversion_reg.c * * Regression test for depth conversion functions, * including some of the octcube quantization. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *errorstr; l_int32 same, error; PIX *pixs1, *pixs2, *pixs4, *pixs8, *pixs16, *pixs32; PIX *pixc2, *pixc4, *pixc8; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa; PIXCMAP *cmap; SARRAY *sa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs1 = pixRead("test1.png"); pixs2 = pixRead("dreyfus2.png"); pixc2 = pixRead("weasel2.4c.png"); pixs4 = pixRead("weasel4.16g.png"); pixc4 = pixRead("weasel4.11c.png"); pixs8 = pixRead("karen8.jpg"); pixc8 = pixRead("weasel8.240c.png"); pixs16 = pixRead("test16.tif"); pixs32 = pixRead("marge.jpg"); error = FALSE; sa = sarrayCreate(0); /* Conversion: 1 bpp --> 8 bpp --> 1 bpp */ pix1 = pixConvertTo8(pixs1, FALSE); pix2 = pixThreshold8(pix1, 1, 0, 0); regTestComparePix(rp, pixs1, pix2); /* 0 */ pixEqual(pixs1, pix2, &same); if (!same) { pixDisplayWithTitle(pixs1, 100, 100, "1 bpp, no cmap", 1); pixDisplayWithTitle(pix2, 500, 100, "1 bpp, no cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 1 bpp <==> 8 bpp", L_COPY); } else { lept_stderr("OK: conversion 1 bpp <==> 8 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Conversion: 2 bpp --> 8 bpp --> 2 bpp */ /* Conversion: 2 bpp cmap --> 8 bpp cmap --> 2 bpp cmap */ pix1 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixThreshold8(pix1, 2, 4, 0); pix3 = pixConvertTo8(pix2, FALSE); pix4 = pixThreshold8(pix3, 2, 4, 0); regTestComparePix(rp, pix2, pix4); /* 1 */ pixEqual(pix2, pix4, &same); if (!same) { pixDisplayWithTitle(pix2, 100, 100, "2 bpp, no cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "2 bpp, no cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 2 bpp <==> 8 bpp", L_COPY); } else { lept_stderr("OK: conversion 2 bpp <==> 8 bpp\n"); } pix5 = pixConvertTo8(pixs2, TRUE); pix6 = pixThreshold8(pix5, 2, 4, 1); regTestComparePix(rp, pixs2, pix6); /* 2 */ pixEqual(pixs2, pix6, &same); if (!same) { pixDisplayWithTitle(pixs2, 100, 100, "2 bpp, cmap", 1); pixDisplayWithTitle(pix6, 500, 100, "2 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 2 bpp <==> 8 bpp; cmap", L_COPY); } else { lept_stderr("OK: conversion 2 bpp <==> 8 bpp; cmap\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /* Conversion: 4 bpp --> 8 bpp --> 4 bpp */ /* Conversion: 4 bpp cmap --> 8 bpp cmap --> 4 bpp cmap */ pix1 = pixRemoveColormap(pixs4, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixThreshold8(pix1, 4, 16, 0); pix3 = pixConvertTo8(pix2, FALSE); pix4 = pixThreshold8(pix3, 4, 16, 0); regTestComparePix(rp, pix2, pix4); /* 3 */ pixEqual(pix2, pix4, &same); if (!same) { pixDisplayWithTitle(pix2, 100, 100, "4 bpp, no cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "4 bpp, no cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 4 bpp <==> 8 bpp", L_COPY); } else { lept_stderr("OK: conversion 4 bpp <==> 8 bpp\n"); } pix5 = pixConvertTo8(pixs4, TRUE); pix6 = pixThreshold8(pix5, 4, 16, 1); regTestComparePix(rp, pixs4, pix6); /* 4 */ pixEqual(pixs4, pix6, &same); if (!same) { pixDisplayWithTitle(pixs4, 100, 100, "4 bpp, cmap", 1); pixDisplayWithTitle(pix6, 500, 100, "4 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 4 bpp <==> 8 bpp, cmap", L_COPY); } else { lept_stderr("OK: conversion 4 bpp <==> 8 bpp; cmap\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /* Conversion: 2 bpp cmap --> 2 bpp --> 2 bpp cmap --> 2 bpp */ pix1 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixConvertGrayToColormap(pix1); pix3 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_GRAYSCALE); pix4 = pixThresholdTo2bpp(pix3, 4, 1); regTestComparePix(rp, pix1, pix4); /* 5 */ pixEqual(pix1, pix4, &same); if (!same) { pixDisplayWithTitle(pixs2, 100, 100, "2 bpp, cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "2 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 2 bpp <==> 2 bpp", L_COPY); } else { lept_stderr("OK: conversion 2 bpp <==> 2 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Conversion: 4 bpp cmap --> 4 bpp --> 4 bpp cmap --> 4 bpp */ pix1 = pixRemoveColormap(pixs4, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixConvertGrayToColormap(pix1); pix3 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_GRAYSCALE); pix4 = pixThresholdTo4bpp(pix3, 16, 1); regTestComparePix(rp, pix1, pix4); /* 6 */ pixEqual(pix1, pix4, &same); if (!same) { pixDisplayWithTitle(pixs4, 100, 100, "4 bpp, cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "4 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 4 bpp <==> 4 bpp", L_COPY); } else { lept_stderr("OK: conversion 4 bpp <==> 4 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Conversion: 8 bpp --> 8 bpp cmap --> 8 bpp */ pix1 = pixConvertTo8(pixs8, TRUE); pix2 = pixConvertTo8(pix1, FALSE); regTestComparePix(rp, pixs8, pix2); /* 7 */ pixEqual(pixs8, pix2, &same); if (!same) { pixDisplayWithTitle(pix1, 100, 100, "8 bpp, cmap", 1); pixDisplayWithTitle(pix2, 500, 100, "8 bpp, no cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 8 bpp <==> 8 bpp", L_COPY); } else { lept_stderr("OK: conversion 8 bpp <==> 8 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Conversion: 2 bpp cmap --> 32 bpp --> 2 bpp cmap */ pix1 = pixConvertTo8(pixc2, TRUE); pix2 = pixConvertTo32(pix1); pix3 = pixConvertTo32(pixc2); regTestComparePix(rp, pix2, pix3); /* 8 */ pixEqual(pix2, pix3, &same); if (!same) { pixDisplayWithTitle(pix2, 100, 100, "32 bpp", 1); pixDisplayWithTitle(pix3, 500, 100, "32 bpp", 1); error = TRUE; sarrayAddString(sa, "conversion 2 bpp ==> 32 bpp", L_COPY); } else { lept_stderr("OK: conversion 2 bpp <==> 32 bpp\n"); } cmap = pixGetColormap(pixc2); pix4 = pixOctcubeQuantFromCmap(pix3, cmap, 2, 4, L_EUCLIDEAN_DISTANCE); regTestComparePix(rp, pixc2, pix4); /* 9 */ pixEqual(pixc2, pix4, &same); if (!same) { pixDisplayWithTitle(pixc2, 100, 100, "4 bpp, cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "4 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 2 bpp <==> 32 bpp", L_COPY); } else { lept_stderr("OK: conversion 2 bpp <==> 32 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Conversion: 4 bpp cmap --> 32 bpp --> 4 bpp cmap */ pix1 = pixConvertTo8(pixc4, TRUE); pix2 = pixConvertTo32(pix1); pix3 = pixConvertTo32(pixc4); regTestComparePix(rp, pix2, pix3); /* 10 */ pixEqual(pix2, pix3, &same); if (!same) { pixDisplayWithTitle(pix2, 100, 100, "32 bpp", 1); pixDisplayWithTitle(pix3, 500, 100, "32 bpp", 1); error = TRUE; sarrayAddString(sa, "conversion 4 bpp ==> 32 bpp", L_COPY); } else { lept_stderr("OK: conversion 4 bpp <==> 32 bpp\n"); } cmap = pixGetColormap(pixc4); pix4 = pixOctcubeQuantFromCmap(pix3, cmap, 2, 4, L_EUCLIDEAN_DISTANCE); regTestComparePix(rp, pixc4, pix4); /* 11 */ pixEqual(pixc4, pix4, &same); if (!same) { pixDisplayWithTitle(pixc4, 100, 100, "4 bpp, cmap", 1); pixDisplayWithTitle(pix4, 500, 100, "4 bpp, cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 4 bpp <==> 32 bpp", L_COPY); } else { lept_stderr("OK: conversion 4 bpp <==> 32 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Conversion: 8 bpp --> 32 bpp --> 8 bpp */ pix1 = pixConvertTo32(pixs8); pix2 = pixConvertTo8(pix1, FALSE); regTestComparePix(rp, pixs8, pix2); /* 12 */ pixEqual(pixs8, pix2, &same); if (!same) { pixDisplayWithTitle(pixs8, 100, 100, "8 bpp", 1); pixDisplayWithTitle(pix2, 500, 100, "8 bpp", 1); error = TRUE; sarrayAddString(sa, "conversion 8 bpp <==> 32 bpp", L_COPY); } else { lept_stderr("OK: conversion 8 bpp <==> 32 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Conversion: 8 bpp --> 16 bpp --> 8 bpp */ pix1 = pixConvert8To16(pixs8, 8); pix2 = pixConvertTo8(pix1, FALSE); regTestComparePix(rp, pixs8, pix2); /* 13 */ pixEqual(pixs8, pix2, &same); if (!same) { pixDisplayWithTitle(pixs8, 100, 100, "8 bpp", 1); pixDisplayWithTitle(pix2, 500, 100, "8 bpp", 1); error = TRUE; sarrayAddString(sa, "conversion 8 bpp <==> 16 bpp", L_COPY); } else { lept_stderr("OK: conversion 8 bpp <==> 16 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Conversion: 16 bpp --> 8 bpp --> 16 bpp */ pix1 = pixConvert16To8(pixs16, 1); pix2 = pixConvertTo16(pix1); regTestComparePix(rp, pixs16, pix2); /* 14 */ pixEqual(pixs16, pix2, &same); if (!same) { pixDisplayWithTitle(pixs16, 100, 100, "16 bpp", 1); pixDisplayWithTitle(pix2, 500, 100, "16 bpp", 1); error = TRUE; sarrayAddString(sa, "conversion 16 bpp <==> 8 bpp", L_COPY); } else { lept_stderr("OK: conversion 16 bpp <==> 8 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Conversion: 8 bpp cmap --> 32 bpp --> 8 bpp cmap */ /* Required to go to level 6 of octcube to get identical result */ pix1 = pixConvertTo32(pixc8); cmap = pixGetColormap(pixc8); pix2 = pixOctcubeQuantFromCmap(pix1, cmap, 2, 6, L_EUCLIDEAN_DISTANCE); regTestComparePix(rp, pixc8, pix2); /* 15 */ pixEqual(pixc8, pix2, &same); if (!same) { pixDisplayWithTitle(pixc8, 100, 100, "8 bpp cmap", 1); pixDisplayWithTitle(pix2, 500, 100, "8 bpp cmap", 1); error = TRUE; sarrayAddString(sa, "conversion 8 bpp cmap <==> 32 bpp cmap", L_COPY); } else { lept_stderr("OK: conversion 8 bpp <==> 32 bpp\n"); } pixDestroy(&pix1); pixDestroy(&pix2); /* Summarize results so far */ if (error == FALSE) { lept_stderr("No errors found\n"); } else { errorstr = sarrayToString(sa, 1); lept_stderr("Errors in the following:\n %s", errorstr); lept_free(errorstr); } /* General onversion to 2 bpp */ pixa = pixaCreate(0); pix1 = pixConvertTo2(pixs1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 16 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixs2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 17 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixc2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixs4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 19 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixc4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 20 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixs8); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 21 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixc8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 22 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo2(pixs32); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 23 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixaDisplayTiledAndScaled(pixa, 32, 300, 4, 0, 30, 2); pixDisplayWithTitle(pix2, 500, 0, NULL, rp->display); pixDestroy(&pix2); pixaDestroy(&pixa); /* General onversion to 4 bpp */ pixa = pixaCreate(0); pix1 = pixConvertTo4(pixs1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 24 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixs2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 25 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixc2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 26 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixs4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 27 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixc4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 28 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixs8); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 29 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixc8); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 30 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixConvertTo4(pixs32); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 31 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixaDisplayTiledAndScaled(pixa, 32, 300, 4, 0, 30, 2); pixDisplayWithTitle(pix2, 500, 750, NULL, rp->display); pixDestroy(&pix2); pixaDestroy(&pixa); sarrayDestroy(&sa); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixs4); pixDestroy(&pixc2); pixDestroy(&pixc4); pixDestroy(&pixs8); pixDestroy(&pixc8); pixDestroy(&pixs16); pixDestroy(&pixs32); return regTestCleanup(rp); } leptonica-1.86.0/prog/convertfilestopdf.c000066400000000000000000000110141506303110300204240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convertfilestopdf.c * * Converts all image files in the given directory with matching substring * to a pdf, with the specified scaling factor <= 1.0 applied to all * images. * * See below for syntax and usage. * * The images are displayed at a resolution that depends on the * input resolution (res) and the scaling factor (scalefact) that * is applied to the images before conversion to pdf. Internally * we multiply these, so that the generated pdf will render at the * same resolution as if it hadn't been scaled. By downscaling, you * reduce the size of the images. * * For jpeg and jp2k, downscaling reduces pdf size by the square of * the scale factor. * * The jpeg quality can be specified from 1 (very poor) to 100 * (best available, but still lossy); use 0 for the default (75). * * The jp2k quality can be specified from 27 (very poor) to 45 (nearly * lossless; use 0 for the default (34). You can use 100 to * require lossless, but this is very expensive and not recommended. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *substr, *title, *fileout; l_int32 ret, res, type, quality; l_float32 scalefactor; if (argc != 9) { lept_stderr( " Syntax: convertfilestopdf dirin substr res" " scalefactor encoding_type quality title fileout\n" " dirin: input directory for image files\n" " substr: Use 'allfiles' to convert all files\n" " in the directory.\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " scalefactor: Use to scale all images\n" " encoding_type:\n" " L_DEFAULT_ENCODE = 0 (based on the image)\n" " L_JPEG_ENCODE = 1\n" " L_G4_ENCODE = 2\n" " L_FLATE_ENCODE = 3\n" " L_JP2K_ENCODE = 4\n" " quality: used for jpeg; 1-100, 0 for default (75);\n" " used for jp2k: 27-45, 0 for default (34)\n" " title: Use 'none' to omit\n" " fileout: Output pdf file\n"); return 1; } dirin = argv[1]; substr = argv[2]; res = atoi(argv[3]); scalefactor = atof(argv[4]); type = atoi(argv[5]); quality = atoi(argv[6]); title = argv[7]; fileout = argv[8]; if (!strcmp(substr, "allfiles")) substr = NULL; if (scalefactor <= 0.0 || scalefactor > 2.0) { L_WARNING("invalid scalefactor: setting to 1.0\n", __func__); scalefactor = 1.0; } if (!strcmp(title, "none")) title = NULL; setLeptDebugOK(1); ret = convertFilesToPdf(dirin, substr, res, scalefactor, type, quality, title, fileout); return ret; } leptonica-1.86.0/prog/convertfilestops.c000066400000000000000000000065661506303110300203150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convertfilestops.c * * Converts all files in the given directory with matching substring * to a level 3 compressed PostScript file, at the specified resolution. * To convert all files in the directory, use 'allfiles' for the substring. * * See below for syntax and usage. * * To generate a ps that scales the images to fit a standard 8.5 x 11 * page, use res = 0. * * Otherwise, this will convert based on a specified input resolution. * Decreasing the input resolution will cause the image to be rendered * larger, and v.v. For example, if the page was originally scanned * at 400 ppi and you use 300 ppi for the resolution, the page will * be rendered with larger pixels (i.e., be magnified) and you will * lose a quarter of the page on the right side and a quarter * at the bottom. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *substr, *fileout; l_int32 res; if (argc != 5) { lept_stderr( " Syntax: convertfilestops dirin substr res fileout\n" " where\n" " dirin: input directory for image files\n" " substr: Use 'allfiles' to convert all files\n" " in the directory.\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " fileout: Output ps file.\n"); return 1; } dirin = argv[1]; substr = argv[2]; res = atoi(argv[3]); fileout = argv[4]; setLeptDebugOK(1); if (!strcmp(substr, "allfiles")) substr = NULL; if (res != 0) return convertFilesToPS(dirin, substr, res, fileout); else return convertFilesFittedToPS(dirin, substr, 0.0, 0.0, fileout); } leptonica-1.86.0/prog/convertformat.c000066400000000000000000000143741506303110300175710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convertformat.c * * Converts an image file from one format to another. * * Syntax: convertformat filein fileout [format] * * where format is one of these: * * BMP * JPEG (only applicable for 8 bpp or rgb; if not, transcode to png) * PNG * TIFF * TIFF_G4 (only applicable for 1 bpp; if not, transcode to png) * PNM * GIF * WEBP * JP2 (only available for 8 bpp or rgb; if not, transcode to png) * * The output format can be chosen either explicitly with the %format * arg, or implicitly using the extension of @fileout: * * BMP .bmp * JPEG .jpg * PNG .png * TIFF (zip compressed: use explicitly with %format arg) * TIFFG4 .tif * PNM .pnm * GIF .gif * WEBP .webp * JP2 .jp2 * * If spp == 4 (rgba), the alpha component is removed, using a white backing. * * If the requested output format does not support the image type, * the image is written in png format, with filename extension 'png'. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout, *base, *ext; const char *formatstr; l_int32 format, d, change; PIX *pixs, *pix1; if (argc != 3 && argc != 4) { lept_stderr("Syntax: convertformat filein fileout [format]\n" "Either specify a format from one of these:\n" " BMP, JPEG, PNG, TIFF, TIFFG4, PNM, GIF, WEBP, JP2\n" "Or specify the extensions to the output file:\n" " bmp, jpg, png, tif, pnm, gif, webp, jp2\n"); return 1; } filein = argv[1]; fileout = argv[2]; if (argc == 3) { splitPathAtExtension(fileout, NULL, &ext); if (!strcmp(ext, ".bmp")) format = IFF_BMP; else if (!strcmp(ext, ".jpg")) format = IFF_JFIF_JPEG; else if (!strcmp(ext, ".png")) format = IFF_PNG; else if (!strcmp(ext, ".tif")) /* requesting g4-tiff binary comp */ format = IFF_TIFF_G4; else if (!strcmp(ext, ".pnm")) format = IFF_PNM; else if (!strcmp(ext, ".gif")) format = IFF_GIF; else if (!strcmp(ext, ".webp")) format = IFF_WEBP; else if (!strcmp(ext, ".jp2")) format = IFF_JP2; else { return ERROR_INT( "Valid extensions: bmp, jpg, png, tif, pnm, gif, webp, jp2", __func__, 1); } lept_free(ext); } else { formatstr = argv[3]; if (!strcmp(formatstr, "BMP")) format = IFF_BMP; else if (!strcmp(formatstr, "JPEG")) format = IFF_JFIF_JPEG; else if (!strcmp(formatstr, "PNG")) format = IFF_PNG; else if (!strcmp(formatstr, "TIFF")) format = IFF_TIFF_ZIP; /* zip compressed tif */ else if (!strcmp(formatstr, "TIFFG4")) format = IFF_TIFF_G4; else if (!strcmp(formatstr, "PNM")) format = IFF_PNM; else if (!strcmp(formatstr, "GIF")) format = IFF_GIF; else if (!strcmp(formatstr, "WEBP")) format = IFF_WEBP; else if (!strcmp(formatstr, "JP2")) format = IFF_JP2; else { return ERROR_INT( "Valid formats: BMP, JPEG, PNG, TIFF, TIFFG4, PNM, " "GIF, WEBP, JP2", __func__, 1); } } setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) { L_ERROR("read fail for %s\n", __func__, filein); return 1; } pix1 = pixRemoveAlpha(pixs); pixDestroy(&pixs); pixs = pix1; /* Change output format if necessary */ change = FALSE; d = pixGetDepth(pixs); if (d != 1 && format == IFF_TIFF_G4) { L_WARNING("can't convert to tiff_g4; converting to png\n", __func__); change = TRUE; } if (d < 8) { switch(format) { case IFF_JFIF_JPEG: L_WARNING("can't convert to jpeg; converting to png\n", __func__); change = TRUE; break; case IFF_WEBP: L_WARNING("can't convert to webp; converting to png\n", __func__); change = TRUE; break; case IFF_JP2: L_WARNING("can't convert to jp2; converting to png\n", __func__); change = TRUE; break; } } if (change) { splitPathAtExtension(fileout, &base, &ext); fileout = stringJoin(base, ".png"); format = IFF_PNG; } pixWrite(fileout, pixs, format); return 0; } leptonica-1.86.0/prog/convertsegfilestopdf.c000066400000000000000000000157361506303110300211420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convertsegfilestopdf.c * * Converts all image files in the page directory with matching substring * to a pdf. Image regions are downscaled by the scalefactor and * encoded as jpeg. Non-image regions with depth > 1 are automatically * scaled up by 2x and thresholded if the encoding type is G4; * otherwise, no scaling is performed on them. To convert all * files in the page directory, use 'allfiles' for its substring. * Likewise to use all files in the mask directory, use 'allfiles' * for its substring. * * A typical invocation would be something like: * convertsegfilestopdf /tmp/segpages allfiles /tmp/segmasks allfiles \ * 300 2 160 skip 0.5 [title] [output pdf] * This upscales by 2x all non-image regions to 600 ppi, and downscales * by 0.5 all image regions to 150 ppi. * * If used on a set of images without segmentation data, a typical * invocation would be: * convertsegfilestopdf /tmp/pages allfiles skip skip \ * 300 2 160 skip 1.0 [title] [output pdf] * If the page images have depth > 1 bpp, this will upscale all pages * by 2x (to 600 ppi), and then convert the images to 1 bpp. * Note that 'skip' is used three times to omit all segmentation data. * * See below for further syntax and usage. * * Again, note that the image regions are displayed at a resolution * that depends on the input resolution (res) and the scaling factor * (scalefact) that is applied to the images before conversion to pdf. * Internally we multiply these, so that the generated pdf will render * at the same resolution as if it hadn't been scaled. When we * downscale the image regions, this: * (1) reduces the size of the images. For jpeg, downscaling * reduces by square of the scale factor the 'image' segmented part. * (2) regenerates the jpeg with quality = 75 after downscaling. * * If you already have a boxaafile of the image regions, use 'skip' for * maskdir. Otherwise, this will generate the boxaa from the mask images. * * A regression test that uses this is pdfseg_reg, which * generates images and the boxaa file in /tmp/segtest/. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *pagedir, *pagesubstr, *maskdir, *masksubstr; char *title, *fileout, *boxaafile, *boxaapath; l_int32 ret, res, type, thresh; l_float32 scalefactor; BOXAA *baa; if (argc != 12) { lept_stderr( " Syntax: convertsegfilestopdf dirin substr res type thresh \\ \n" " boxaafile scalefactor title fileout\n" " where\n" " pagedir: input directory for image files\n" " pagesubstr: Use 'allfiles' to convert all files\n" " in the directory\n" " maskdir: input directory for mask files;\n" " use 'skip' to skip \n" " masksubstr: Use 'allfiles' to convert all files\n" " in the directory; 'skip' to skip\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " type: compression used for non-image regions:\n" " 0: default (G4 encoding)\n" " 1: JPEG encoding\n" " 2: G4 encoding\n" " 3: PNG encoding\n" " thresh: threshold for binarization; use 0 for default\n" " boxaafile: Optional file of 'image' regions within\n" " each page. This contains a boxa for each\n" " page, consisting of a set of regions.\n" " Use 'skip' to skip.\n" " scalefactor: Use to scale down the image regions\n" " title: Use 'none' to omit\n" " fileout: Output pdf file\n"); return 1; } pagedir = argv[1]; pagesubstr = argv[2]; maskdir = argv[3]; masksubstr = argv[4]; res = atoi(argv[5]); type = atoi(argv[6]); thresh = atoi(argv[7]); boxaafile = argv[8]; scalefactor = atof(argv[9]); title = argv[10]; fileout = argv[11]; if (!strcmp(pagesubstr, "allfiles")) pagesubstr = NULL; if (!strcmp(maskdir, "skip")) maskdir = NULL; if (!strcmp(masksubstr, "allfiles")) masksubstr = NULL; if (scalefactor <= 0.0 || scalefactor > 1.0) { L_WARNING("invalid scalefactor: setting to 1.0\n", __func__); scalefactor = 1.0; } if (type != 1 && type != 2 && type != 3) type = L_G4_ENCODE; if (thresh <= 0) thresh = 150; if (!strcmp(title, "none")) title = NULL; setLeptDebugOK(1); if (maskdir) /* use this; ignore any input boxaafile */ baa = convertNumberedMasksToBoxaa(maskdir, masksubstr, 0, 0); else if (strcmp(boxaafile, "skip") != 0) { /* use the boxaafile */ boxaapath = genPathname(boxaafile, NULL); baa = boxaaRead(boxaapath); lept_free(boxaapath); } else /* no maskdir and no input boxaafile */ baa = NULL; ret = convertSegmentedFilesToPdf(pagedir, pagesubstr, res, type, thresh, baa, 75, scalefactor, title, fileout); boxaaDestroy(&baa); return ret; } leptonica-1.86.0/prog/convertsegfilestops.c000066400000000000000000000143571506303110300210110ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convertsegfilestops.c * * Converts all image files in a 'page' directory, using optional * corresponding segmentation mask files in a 'mask' directory, * to a level 2 compressed PostScript file. This is done * automatically at a resolution that fits to a letter-sized * (8.5 x 11) inch page. The 'page' and 'mask' files are paired * by having the same number embedded in their name. * The 'numpre' and 'numpost' args specify the number of * characters at the beginning and end of the filename (not * counting any extension) that are NOT part of the page number. * For example, if the page numbers are 00000.jpg, 00001.jpg, ... * then numpre = numpost = 0. * * The mask directory must exist, but it does not need to have * any image mask files. * * The pages are taken in lexical order of the filenames. Therefore, * the embedded numbers should be 0-padded on the left up to * a fixed number of digits. * * PostScript (and pdf) allow regions of the image to be encoded * differently. Regions can be over-written, with the last writing * determining the final output. Black "ink" can also be written * through a mask that is given by a 1 bpp image. * * The page images are typically grayscale or color. To take advantage * of this depth, one typically upscales the text by 2.0. Likewise, * the images regions, denoted by foreground in the corresponding * segmentation mask, can be rendered at lower resolution, and * it is often useful to downscale the image parts by 0.5. * * If the mask does not exist, the entire page is interpreted as * text; it is converted to 1 bpp and written to file with * ccitt-g4 compression at the requested "textscale" relative * to the page image. If the mask exists and the foreground * covers the entire page, the entire page is saved with jpeg * ("dct") compression at the requested "imagescale". * If the mask exists and partially covers the page image, the * page is saved as a mixture of grayscale or rgb dct and 1 bpp g4. * * This uses a single global threshold for binarizing the text * (i.e., non-image) regions of every page. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *pagedir, *pagestr, *maskdir, *maskstr, *fileout; l_int32 threshold, page_numpre, mask_numpre, numpost, maxnum; l_float32 textscale, imagescale; if (argc != 13) { lept_stderr( " Syntax: convertsegfilestops pagedir pagestr page_numpre \\ \n" " maskdir maskstr mask_numpre \\ \n" " numpost maxnum textscale \\ \n" " imagescale thresh fileout\n" " where\n" " pagedir: Input directory for page image files\n" " pagestr: Substring for matching; use 'allfiles' to\n" " convert all files in the page directory\n" " page_numpre: Number of characters in page name " "before number\n" " maskdir: Input directory for mask image files\n" " maskstr: Substring for matching; use 'allfiles' to\n" " convert all files in the mask directory\n" " mask_numpre: Number of characters in mask name " "before number\n" " numpost: Number of characters in name after number\n" " maxnum: Only consider page numbers up to this value\n" " textscale: Scale of text output relative to pixs\n" " imagescale: Scale of image output relative to pixs\n" " thresh: threshold for binarization; typically about\n" " 180; use 0 for default\n" " fileout: Output p file\n"); return 1; } pagedir = argv[1]; pagestr = argv[2]; page_numpre = atoi(argv[3]); maskdir = argv[4]; maskstr = argv[5]; mask_numpre = atoi(argv[6]); numpost = atoi(argv[7]); maxnum = atoi(argv[8]); textscale = atof(argv[9]); imagescale = atof(argv[10]); threshold = atoi(argv[11]); fileout = argv[12]; if (!strcmp(pagestr, "allfiles")) pagestr = NULL; if (!strcmp(maskstr, "allfiles")) maskstr = NULL; setLeptDebugOK(1); return convertSegmentedPagesToPS(pagedir, pagestr, page_numpre, maskdir, maskstr, mask_numpre, numpost, maxnum, textscale, imagescale, threshold, fileout); } leptonica-1.86.0/prog/converttogray.c000066400000000000000000000105371506303110300176030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * converttogray.c * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; char *fileout = NULL; l_int32 d, same; PIX *pixs, *pixd, *pix1, *pix2, *pix3, *pix4; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: converttogray filein [fileout]", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/gray"); filein = argv[1]; if (argc == 3) fileout = argv[2]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (fileout) { pixd = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } d = pixGetDepth(pixs); if (d == 2) { pix1 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, TRUE); pix2 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, FALSE); pixEqual(pix1, pix2, &same); if (same) lept_stderr("images are the same\n"); else lept_stderr("images are different!\n"); pixWrite("/tmp/lept/gray/pix1.png", pix1, IFF_PNG); pixWrite("/tmp/lept/gray/pix2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixSetColormap(pixs, NULL); pix3 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, TRUE); pix4 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, FALSE); pixEqual(pix3, pix4, &same); if (same) lept_stderr("images are the same\n"); else lept_stderr("images are different!\n"); pixWrite("/tmp/lept/gray/pix3.png", pix3, IFF_PNG); pixWrite("/tmp/lept/gray/pix4.png", pix4, IFF_PNG); pixDestroy(&pix3); pixDestroy(&pix4); } else if (d == 4) { pix1 = pixConvert4To8(pixs, TRUE); pix2 = pixConvert4To8(pixs, FALSE); pixEqual(pix1, pix2, &same); if (same) lept_stderr("images are the same\n"); else lept_stderr("images are different!\n"); pixWrite("/tmp/lept/gray/pix1.png", pix1, IFF_PNG); pixWrite("/tmp/lept/gray/pix2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixSetColormap(pixs, NULL); pix3 = pixConvert4To8(pixs, TRUE); pix4 = pixConvert4To8(pixs, FALSE); pixEqual(pix3, pix4, &same); if (same) lept_stderr("images are the same\n"); else lept_stderr("images are different!\n"); pixWrite("/tmp/lept/gray/pix3.png", pix3, IFF_PNG); pixWrite("/tmp/lept/gray/pix4.png", pix4, IFF_PNG); pixDestroy(&pix3); pixDestroy(&pix4); } else { L_INFO("only converts 2 and 4 bpp; d = %d\n", __func__, d); } pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/converttopdf.c000066400000000000000000000062371506303110300174140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * converttopdf.c * * Bundles all image files that are in the designated directory, with * optional matching substring, into a pdf. * * Syntax: converttopdf dir [substring] fileout * * The encoding type depends on the input file format: * jpeg ==> DCT (not transcoded) * jp2k ==> JPX (not transcoded) * tiff-g4 ==> G4 * png ==> FLATE (some are not transcoded) * The default resolution is set at 300 ppi if not given in the * individual images, and the images are wrapped at full resolution. * No title is attached. * * This is meant for the simplest set of input arguments. It is * very fast for jpeg, jp2k and some png. * The syntax for using all files in the directory is: * convertopdf * The syntax using some substring to be matched in the file names is: * converttopdf * If you want something more general, use convertfilestopdf. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 ret; char *dirin, *substr, *fileout; if (argc != 3 && argc != 4) { lept_stderr( " Syntax: converttopdf dir [substr] fileout\n" " substr: Leave this out to bundle all files\n" " fileout: Output pdf file\n"); return 1; } dirin = argv[1]; substr = (argc == 4) ? argv[2] : NULL; fileout = (argc == 4) ? argv[3] : argv[2]; setLeptDebugOK(1); ret = convertUnscaledFilesToPdf(dirin, substr, "", fileout); return ret; } leptonica-1.86.0/prog/converttops.c000066400000000000000000000046071506303110300172640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * converttops.c * * Syntax: converttops filein fileout [level] * * where level = {1,2,3} and 2 is the default */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; char error_msg[] = " ps level = {1,2,3}; level 2 is default"; l_int32 level; if (argc != 3 && argc != 4) { lept_stderr("Syntax: converttops filein fileout [level]\n"); lept_stderr("%s\n", error_msg); return 1; } filein = argv[1]; fileout = argv[2]; level = 2; if (argc == 4) { level = atoi(argv[3]); if (level != 1 && level != 2 && level != 3) { L_WARNING("ps level must be 1, 2 or 3; setting to 2\n", __func__); level = 2; } } setLeptDebugOK(1); convertToPSEmbed(filein, fileout, level); return 0; } leptonica-1.86.0/prog/convolve_reg.c000066400000000000000000000202221506303110300173550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * convolve_reg.c * * Tests a number of convolution functions. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *kel1str = " 20 50 80 50 20 " " 50 100 140 100 50 " " 90 160 200 160 90 " " 50 100 140 100 50 " " 20 50 80 50 20 "; static const char *kel2str = " -20 -50 -80 -50 -20 " " -50 50 80 50 -50 " " -90 90 200 90 -90 " " -50 50 80 50 -50 " " -20 -50 -80 -50 -20 "; static const char *kel3xstr = " -70 40 100 40 -70 "; static const char *kel3ystr = " 20 -70 40 100 40 -70 20 "; int main(int argc, char **argv) { l_int32 i, j, sizex, sizey, bias; FPIX *fpixv, *fpixrv; L_KERNEL *kel1, *kel2, *kel3x, *kel3y; PIX *pixs, *pixacc, *pixg, *pixt, *pixd; PIX *pixb, *pixm, *pixms, *pixrv, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test pixBlockconvGray() on 8 bpp */ pixs = pixRead("test8.jpg"); pixacc = pixBlockconvAccum(pixs); pixd = pixBlockconvGray(pixs, pixacc, 3, 5); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 100, 0, NULL, rp->display); pixDestroy(&pixacc); pixDestroy(&pixd); /* Test pixBlockconv() on 8 bpp */ pixd = pixBlockconv(pixs, 9, 8); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixd, 200, 0, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixs); /* Test pixBlockrank() on 1 bpp */ pixs = pixRead("test1.png"); pixacc = pixBlockconvAccum(pixs); for (i = 0; i < 3; i++) { pixd = pixBlockrank(pixs, pixacc, 4, 4, 0.25 + 0.25 * i); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 - 4 */ pixDisplayWithTitle(pixd, 300 + 100 * i, 0, NULL, rp->display); pixDestroy(&pixd); } /* Test pixBlocksum() on 1 bpp */ pixd = pixBlocksum(pixs, pixacc, 16, 16); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pixd, 700, 0, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixacc); pixDestroy(&pixs); /* Test pixCensusTransform() */ pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); pixd = pixCensusTransform(pixg, 10, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixd, 800, 0, NULL, rp->display); pixDestroy(&pixd); /* Test generic convolution with kel1 */ kel1 = kernelCreateFromString(5, 5, 2, 2, kel1str); pixd = pixConvolve(pixg, kel1, 8, 1); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pixd, 100, 500, NULL, rp->display); pixDestroy(&pixd); /* Test convolution with flat rectangular kel */ kel2 = kernelCreate(11, 11); kernelSetOrigin(kel2, 5, 5); for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) kernelSetElement(kel2, i, j, 1); } pixd = pixConvolve(pixg, kel2, 8, 1); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 8 */ pixDisplayWithTitle(pixd, 200, 500, NULL, rp->display); pixDestroy(&pixd); kernelDestroy(&kel1); kernelDestroy(&kel2); /* Test pixBlockconv() on 32 bpp */ pixt = pixScaleBySampling(pixs, 0.5, 0.5); pixd = pixBlockconv(pixt, 4, 6); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixDisplayWithTitle(pixd, 300, 500, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); /* Test bias convolution non-separable with kel2 */ pixs = pixRead("marge.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); kel2 = kernelCreateFromString(5, 5, 2, 2, kel2str); pixd = pixConvolveWithBias(pixg, kel2, NULL, TRUE, &bias); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 10 */ pixDisplayWithTitle(pixd, 400, 500, NULL, rp->display); lept_stderr("bias = %d\n", bias); kernelDestroy(&kel2); pixDestroy(&pixd); /* Test bias convolution separable with kel3x and kel3y */ kel3x = kernelCreateFromString(1, 5, 0, 2, kel3xstr); kel3y = kernelCreateFromString(7, 1, 3, 0, kel3ystr); pixd = pixConvolveWithBias(pixg, kel3x, kel3y, TRUE, &bias); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 11 */ pixDisplayWithTitle(pixd, 500, 500, NULL, rp->display); lept_stderr("bias = %d\n", bias); kernelDestroy(&kel3x); kernelDestroy(&kel3y); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixg); /* Test pixWindowedMean() and pixWindowedMeanSquare() on 8 bpp */ pixs = pixRead("feyn-fract2.tif"); pixg = pixConvertTo8(pixs, 0); sizex = 5; sizey = 20; pixb = pixAddBorderGeneral(pixg, sizex + 1, sizex + 1, sizey + 1, sizey + 1, 0); pixm = pixWindowedMean(pixb, sizex, sizey, 1, 1); pixms = pixWindowedMeanSquare(pixb, sizex, sizey, 1); regTestWritePixAndCheck(rp, pixm, IFF_JFIF_JPEG); /* 12 */ pixDisplayWithTitle(pixm, 100, 0, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixb); /* Test pixWindowedVariance() on 8 bpp */ pixWindowedVariance(pixm, pixms, &fpixv, &fpixrv); pixrv = fpixConvertToPix(fpixrv, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pixrv, IFF_JFIF_JPEG); /* 13 */ pixDisplayWithTitle(pixrv, 100, 250, NULL, rp->display); pix1 = fpixDisplayMaxDynamicRange(fpixv); pix2 = fpixDisplayMaxDynamicRange(fpixrv); pixDisplayWithTitle(pix1, 100, 500, "Variance", rp->display); pixDisplayWithTitle(pix2, 100, 750, "RMS deviation", rp->display); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 14 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 15 */ fpixDestroy(&fpixv); fpixDestroy(&fpixrv); pixDestroy(&pixm); pixDestroy(&pixms); pixDestroy(&pixrv); /* Test again all windowed functions with simpler interface */ pixWindowedStats(pixg, sizex, sizey, 0, NULL, NULL, &fpixv, &fpixrv); pix3 = fpixDisplayMaxDynamicRange(fpixv); pix4 = fpixDisplayMaxDynamicRange(fpixrv); regTestComparePix(rp, pix1, pix3); /* 16 */ regTestComparePix(rp, pix2, pix4); /* 17 */ pixDestroy(&pixg); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); fpixDestroy(&fpixv); fpixDestroy(&fpixrv); return regTestCleanup(rp); } leptonica-1.86.0/prog/cootoots.png000066400000000000000000000310061506303110300171020ustar00rootroot00000000000000‰PNG  IHDRyųø8ᄠpHYs.#.#xĨ?v IDATxœíŨMãڙpjtŅė 5Åkd‘ŒŦs nÜETZįŧđ&@žAĐN/ŧzL‹*—q•EŖc6R(-ōĖÆ ˇjd4gqŅDvĀpQĻq™E€&A }”>͓sHIĨjQũ°ĒôVÆķˇo•Šzûõá;y^4ą[éjÛ|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAšȧĢc\į M_Ąc–ģƒ˜VY%dšģƒ"m-‹ßŨAžĻŅÉC>{iöÖ@ƒkÛŲ)PwAÆN4ęĒG„ɲRŸÃi¤Q^Ũč‘fH ×Zē¯éōĶ|c ˙~…t?P¤$Zu I“üCĶģšŅ-Z›éš>Đ*TņÕŖĒU%čzŅÚH.ؤ ÔŖŠUēÚžvŋ}ܝAéÔÎAōgړå´=–ƒžMAږA$Ą!˙û*{ÔĘ@ĩûŦôL-9h lT“ Īål3%äI6ÛÚÚŗí>Ë@Of gģ:Ø%ĐŪŽä‘âƒmo-ģŌf {íĘî2–€ļt<´tŋŗŖ•Ī2ëúddĶ âęh[:@“ ÛĄ9ĐvĐRšCũŦdoī͸"ō( ļv<ô¨äo ts–ÕĻŗėž—iV6ËĻģ›o ôhÉáĮÖ@û… –<ŒŨ¨x–ĩ4Ay–,C[Ânt°pÖŅŌžÚÎZĻ.Xíg'Š TŸíË>ßÖj¯.éÕg üTúYv~ŋeP{g@ę:õ ”_ũP ĮÛēú‘˛ VOäak~Áę™ükk—cÔ­;줗˛Kz ´ĩ+hŲŨ ėōëy”¨.Ä*Ú~oëĸ'—ŗ&Ō .— ģ+]F$— Ą‘î–Î:ä[‰ŗw§ŗĢĶŅũnŖũ9Ũs]OAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAP–ƒR˛AÆu–ƒ¸ąIĮ,… Ļ&˛MSō‚¸F…oāۛtaR!(U/ÜˆŌ…IÅ J6*Če õĢbT–€Ē'‘eøĩŽúēfŌō ƒ(6ÎîZA_—™fĶ<ŧúa°Nã•^í5ŪąŽC&Ŗu‚ÜĢŌ  ī|5ohŦ¯Ô/ŋâ},Ņhņ +Lđę ‹ŽĶG4^§Gåw˛„ėņø5MÖ Šíہ’×k.ĄčV :\˛fĐ­f=#úč úŽô6 &ę%AœpĒĩ|]k|ÉåÛb W8‚¤4ĩ™Üë&؟}AĨÜĪ?Īmõō@NĪĢ—O'dĪ 5!{ö–ÖIIÁi7zö|`é7@"ÅŲzȞ>īMÁĶ/ŧņ|0û˃>¤{‹ûĘĨĮԉx˙Šâ^[ĐiЖ‚ (‚‚ (‚ō€@WTĖe9ȑ˙‘ÍAĻ)Š#EO†Ŧõ,¨8ŸÅë=„-L1H°JP°…K2Ÿš[¸ÎX ōEļP{;ú'đ=iâéīčŸY…í‹>˙ĒŽ?ūb@įü;‰,Â#üüņ€jü0ŧ8” xöj;ŌŦc/’đl@Šõ˙FKš Ž"AAâî(5c‡ô{amÄS3Q 'V ŸmÄd )PŊún€ĸŽá× ŖJŊmoĨߍ/%Č'aôÃæfwhK߉žāĨäųÄAūĢÍ)æō€Î:nuũruYúø 놞´Ö;SË퀖Ą-APAPAPAPAPAPAPAPAPAPAPAPū\@dĩŠšÜ ´ÆfËK*4‘üwĒĒz˛ÅúžŠ­i^/ŠĐ41đĒü1¨,žÂț/įĄ‹Ī¯$NĒŗ/B/¨€jˆˆ“Éãt Ū´ą¤ĄÚŨT@5ÄHL—ŖÕ6Ė˙hœ8ͧeŋŧh(f‹Ũ(ē1;›”ĪgrEo•ŽR 8MĒ\ÜÉŲ0h >Œ2Z¤$á”Û“>ŧŒČgN¯äėô^•h—ˇPœjQĢKqUUf^\2#jŌĪäÚ§ųž(ĐĐpy¤Y ę›ôˇtŊ â1ŗf¨@ėō¤ËŒÁ‘ Žųûk"gÚ?ęîčŗĪ4ë ũŨį´ qßJAÃ(fúPŽŅŽĒ%|ŲgZŊIDûš]'iöēQĮĸg%kéqĖČ0ÛÄ …ĸč ŗ/Ȟü;ŽŖƒNS†=ˇgœđĻEëRJ× ŌŒā&Čo1ģN5ųˇ|ĸaå ĄwFN%¨YkÖ× ĸîˆŅȍüˆuĉ\÷‡Ŗ¨ŨîPųLočíŲ=nōf#­´X]%Hn÷$ȝb J+¨§@Vēz,ôÔäīĨĩ}{Í ^Āl7ÛÕV`3y(2äˆĩxē¨ #=ā–žė­äHPo rFŖXíŨČF,b du]‚ūŠYDü‹—+ō,ųŊ Ë OAŖĻÚ>~‡ÉXũÅēAÆi$wV| †DʼnüΘ‚Râw¨*Aĸz˛VP:‰w4R ŽŽĸ(ĸŠÁŠĄ+žvP¯É];§¯„/ܞ›ƒžČ¯6ĒäËߜFŠņ‡)čtŨ nĨ%z6§r_a÷zŪĐoũÔ{˙Fža=Ņ u@ Cî V#ÔX/HžgtŸÅĸkGlß Ú×´vM>ņ•íęĐ?šZŦŲžf“•uĄ˛ 4IP T#>u}Fĩˇ$ä2ˆX ŋ*A]šöå3‚zŗ:Đ$“õiÖōž 7P‡ĪI(ۓCíĄz>ĢėaæĪåÜ~}AAAAAAAAAAAAA”‡ĘŽs”š1>šÜΟ^ QWšo}˙s9čà 3>ŧšNøûëEĶīSWhFŲ×*ÏAīî ŠåEöô¯ ¤ŽPMžįúųt"ŖŒfˇDûęg­ŦÉäŋAĒ÷ī ÆŦg„ėææXD—Ķ ĶjJâgŋ8UwfsĐ^㨟}œqũ–[ƒŒԛõ0gíŨįœ–ŋ̝^>õ'¨X8¯îRwŋåŋû”Īz›€fEÖĪoĢ%ƒŠeG"1-Ą9Äؐá]Ajųß9¨ŸM˜”P<+2’_á æ@Y‡­Ķš}u?ī <•ŧšRßöŋä)Ņ ŌF¯%č4cÎėĶQ].ž}ī”™ßQ‹Ēĩép䤆/Ēi…Ķ~E¤ö×T#ũ€rōš=T rrɍ¯+pĮĨÅ ßÛâלēnZô¨AŌJd™O+ūžîâTĸē&|V• ˆt}C‚Ō ĢDFōõníT‚Ēá†F4 :3´KĻw+ūŨAĻ5vûŽsŪfš6g˛„XXoGõŽ/ČY+4*"ˆGrĄFËHôOō%qŌģ8–sÉú‡q„ŊIŠA‚iäėga žÂĢƒ~k‹ß˜Iā¸Îox[˜˛ Žûą{֎UÅ­Ö"‚$Î&Zm‘ūčÆâ8pĪmĩPAĖ‚DžĻ/—ĄēeGd‡Á(ˆáęs*~[KN%¨-A‡rų‘ ŨÛ{ĢUMŗüßÉ KŒåDwŋ%KåųËcū|ü­.ߘÚ”¨ž‹ŧž]´lš Ņ0ŒÃŪf—ÜŋĒų¤īöÚŠ)žŸƒÄĀĒÆŒ¨mĻ>  ÄÔDŗ*ˇëĪĪ$h@.ôŧ„æ@5uš0B7Ų]@Ē„ęôr$úÁŖvÚōĶCųŨ§œÆj'ÛW7ŦIW‚ 1äD‚Ž~+P ĩ,Ü|–ÉB ĮŠd xcTJåæėÕ NJ+tŦ>•ÛąĒ•&7Ë^ęļ…ĢúWN[Ļšĸ’B Œ Tŗe õņŋģț€| Šž1YBOåFq R÷[rĐd–šĒCčkP4+ĄÄ§y )ã°;ƒT É-ë+?‘/A–hdkŲ8˙nšžôší^ƒR*AmK-ԁœ›Ķĩ,I"ģīä 5ËøO‚8LáŖĒBWIGōßÅ"Ūą„igĢŊŅ)h¨@ą\íÅ0YV›Į‘qJ‚xä_Ôŋȗ!ū\nJŽƒėžüˇ˛ÄacnrŅ$ÜR…ŧŲkGUšĒZJ"'ŽÂzCp‹ˇÛ‘ī‹—mÁ‰ÜāDqt2’ YBgĎäjßäļ˛D ŅEPEŌĒĐ9Ģvų8ÕXĶ0ÔŽ#˛}šarץË?÷u5ǧ‘Žĩl^jĻĩôĪ*ōØrā_˛j¤ųrדū…ŽkļoW?Ģø-ũ˛DũšEPUՃSËHj¨ũų)ŗ‰4D"˛9aœ\É”*“Û!f˛„šŒÔÕųAÛx¤į n°CŋjčB˙;ãRDĸZ­FœÜ ´˛ ‡‹Ķlđ]ky‹{ŌÔßĩFŗĘį>™u–ĐâŽŊD?fkõ;*ŅĮÛAūb=ėߎ4;ĢŊN‰ŽēâņÍAP ČØŠŪ˛›čܯ`3°$w:Y U Ÿ]Y ž|h˛ßYOŊûY4{aZëpaBXöÂ¤í‚ Í,åĖÜYےĩôŋ^pĀV r™P—¨9Ųß­e+Pt"O2ŦyZįiF%jk\_%^a ØŠĢž6˜iÜŪ@ī}ÛŦhƯZëlë Aœ[bĖÛq ÜĄëxuŌsj‡kđß. jHO$Č ‡PĮ1×R×˙KRSĜĮzzIŠsöÅZzË/ģÚ3 ’%$—c ōē)uŪčëvÜĸ<$÷Ô,S ē}įÁNâ äN@gÛņÔĘęĩƒĘ.ÔŧĶVËPô>[¨] r˛ûO×/Ū.ŖæēéĢ',ŧâ ô€ŲŦŅnWEĪö.÷i¯§5čt ŧøz <>/˜/#¯7an~ ŧ›CŌ9"-ØAīËĒČ4Dåäd⛆^í22īŖ1îԟÁõx Ī/O¤mŒ‹AWsE›L~ÚE/ŧg š<˜Ķ ­APAPåá€o×Ū¨&Á˛K;+kæV´x+ᯰāė‡ęį:H)>@Ŗ'“‹[ÆÜAfŦŽ/Ô_žNņį摺øŪĩ€RN@Nژy—Ē…)ĪŽJ66Ëf —ˇį@N~{)–ŋ6 2ÂÉBíÎŨáJD/ī$N%hŗ õ5ˆÔ%Ņ ´ŠeHüčmėƒ+NŲņģ+~ė ũ\ŽwŊČÖ˙`ŲDü°Ī“õVzūÖOü'§â4jÆ å¤ú]§~Ē?nIeœ„F㇌l”žxûĢđ¯ß6ž/ūáOąoœĩ(ûVŗ^ˆ˙úøONB;ŌÆÎaX7+qS Ŗˇ —:â—:ŽŊš<“qĪډøū7ã°į _KΎà ķi°1ĐøíSôņßŋ‘ “‰Ä•ņåī“ĐņDĀSŨØÃsúwâđ÷ãāÅDā^…âéš9äķą{ayņOŧi„ĸqŽ@czõĄ8jŽĶ— ‹Ũ +qȆ@<­SoH%Čgm rę/\Ņn„^ Xė[IŖ @L3/ڱԝ~_„,d#īŧ\l $$(ŽËĨÆ˛’đŧ•×0ŸģirD8–3Í;h'gtC &A¯_ԓ‘0ÛqøōY"ū¨›ßĢĻûcUXđĪ—ÃĪŖ—dS Ú¯žūáJ^Zî׏_˙Ô|RáfÔĒöâ2jÕ>vĸîÆĐlŅķŒá{UqûX\Õä!œ_'Q;”ŽÃˆĨ‡á×?H†dC mAPAPAPAPAPAPAPAPĨø ųxJJK´3ēmNDAo˛K@“zÅãë)k¨žŦŲĨ@Ē%0ÔVģ.c ŧvŠfÕÂÚ|z‰ÆsˇÍ\wŸņĘdßåĨÜĻ“ ‚ūK(ž€čl ‘˙UsP‰këE|߸ŒOâŅ)˙—ˆ¨xú“=°æęļˇ1ļotŖJėWXEč"âŋ}`†ft/Ŗũí€x’’Zģ­zĒ ââ×?KŧžNƒÄéŽdßôBĐf;īŠBôûŽøÍ×ym‡Ąģē{õü6 @4Ÿ´ų8ĄšĸųƒwDð|Į=0H”(˛›“%¤@„¸‚~WôœPtu v#Mƒ1YB‰,!úËÔp‚Jx)VŠË˛]įz“f ØË@¯N˜îĩD­ ”Ü$z3˛YöjģNĀV Ë5 ėį °IĮˆJ'¨/×2—?_%Č-ĸSɗ!ÕE”#hô(X!Č)âš-äFņ?ēÄČļCĒs3§/ tÕ5Åč­ķ^îb?ĒŸ˙ųJØĶ oķįŗ–sBŊAĩ*˜{>ÛIkdT ¤ū{ü…QíļZOžĩZē8ĐÔû՟×+~ËĐ?j‹Ņ¤ŠũlÂ|üųFĶ:ũų„T#]ģH~hf‹ęÖnGŦU§ōhŅQŌĨÕ¨MôŧÔ?øŖ’Ļâƒ,5á*+ĄlBۈ`á BŖe@'¸.Ö5TđZ  ¯›ŧėČÛ5ģk đúĖc7@ūusé57œÎ‚™=\sĶō<ãÜ~›A”‡šôûH?ljŋƒØg’"ŌĪČŽ€üGTūä:-ÕCĪJŗ¤G‚omų3~G O ֚%˛ž AßíH Ņ ǃâ(Ą4ģ’gUbŌ§Áë§+˙ī n§ĨÚ°ûÅgæ€DjŊs(k>.ũ7;âĮĄcķz#FŪv‡olą˙ƒ`xßŨ Pžâė0ō×Û1Á÷[!Ū‡îí˙˛}ˇ%ČĪAßŨ!Ų Hîæŋ9ŊoéFN6> Jéųs5ÖõK É€„Qûĸ§ÖūąkhÕvkP×l=OĠɂ̎Î.€ņA„ĶƒÅĢ r>u˙vú ŋČ4ËAWĶtŽY–ƒú“ß%ēN]e–‚f'mĸOŊš,Ų“>z(gŽÛ ‚   ‚   ‚   ‚   ‚   ‚  ĘÃåz‰ĩ÷Ŋ>Ÿr {iû V‘’+eØ´C}:éŒ5Ąp|ô˙~×jēvŲ*_ü€N@“^ĮˆĪ Á9Č/ĻG÷i´F&.‚ä?>mæ/LįKh:Q%ÉīÄ2û^ŌæÜG.ņŦÕ™€Äh2qDīw5Ģi“…i‹%4Zyķ ĩÆ%ã čōãwß&i9PVÁ›¸áqJ9 „#zÁ3P”ūGŅ“Ėd '¤”Ōßtė;ƒ(- Ē 4Ũoš--Õĉ¯G4ĨuŨˇ*â„äÛÕaä’íkŸ““ģx§Ė2¤ļ ri{iÕ×õĻiXžpũ͐¤´ŧŠU…ôä2ôÚüąOųeŌ;ÕHcácK%攝c¨†6č´ã8ņˆŠˇ‹Ĩ!đŒÔlŒœ:nˆŅĐŠÅ#1v~™¸Žsf.~n)- ŌxK‚úäP‚Ž(‘ m<:W 7‘qqô4JPûn ”ĖmږƒÔZVáÕ$IDũ˨KĶjTíĘؕë\lwU rŸúÄq^tÄ]*u‹”ɍoú„“$‰ŠÎfYWĩĪĄ§Š]qä$QŖāIĐë#_HĐâĮ–Ëy§ ˆŠeˆÛÕ+ ”¨r˛FxD‚<'Ö5Ú¤ũņ(T ûŽ —ĨļC dZB‚Üúw$ČŌo€×KN§ ?îę—™v'nļ–uŒlĄjDI'U uĸúÍ@ŅXÎÖĸu;Žc‡˜ĢcÉŊ…,-šëgPė@|ˆÆj8É;wW+R 5Ũ§Gq|f4å–Q‚ŅPõ‰f쐠 ” ÷÷f ø8ŠßKąo6Pūz×Uāķ>€=õŧęîūCÖj@dģƒøßĒĄÚO5ß÷ģŒŊĶŦ äĢ‘‘yeP#bā;ōČlP¯Œ;öÛUŊ×“ÛˇI#>i œôäŋØHāē'Ņč”9âęxČOĸČŋôŒ—š&$.ĸܐ["“ŸÉ˙ėˆV%Ȏ,ŖZ­vÅâH # Ėĩ숺fBmÕāŗöĞ>ŧ‚^{۔=Ļž‘ņfoē A@â5´ūDJ,Ô­M8fA|#mfyXļAy€ ~•ųhœõJ0ځZz\ËēÄ4ŸČmPŧÁëyË@iå\ũÚ'æ÷T5ŨíƒDĸ."Ļ”˜mņ!؁Ę[čráXōˆ—@gģbÁ…=géOwFƒ=y^čą1ûŲPĀŽ]Ņ7ŋĩĪŽÂĢÃ]ų­ž¸hkÍũ/Âũ/ļ’Kō›–.4Ë´R-Ŧotcž tŅū‰ĐxŗÖÂ~m@Ív(jVį8=twšT7ĶŖôČģØččÅ û[3EĶL_đíčĨ@ÔŪĐE;‘ Cū‚‡^ũxë n×%(• „^}û%ÄÍĻöb˜ķ§ßŒÜũ;v ŗBĶÄg_SmĖĩh@ŠōgU¤Üoûkŋņ ‚ļAAAAAAAAAAAAAAAAAAAAAAAAAXŠW*ŦIDATAAYR‘äxĩkß–kK ĄMę—s=eÕ,7Tžt:i’’Ē ‰–ũuĮRĢõĻv õĀîh|ÔW?čļ@Y‡~ą$]7rÚ.(˜‚fũ°n 'Ä% XœđņĨHÉH͡ËĀŠĻÖÂ"kī qŲ2Ä+ū3͖ &‹ixÚëJ ņúĀŪ Č؏ũ¯ē˛„‚HUfŽčfƒÆīÚôÎÃ:Ũ4ŒcĻĢÁ‹&ôŗI\Ã(jžŽ#FH ¯ļoøŧCˆC/ßk#  GŒēFL‚ęMĘ:kß<.ŲnĀl ĸHŒXZ'œ2{K Cô$¨—ˇęH‰¸ŒŌzŊĸ@kfI#á įACŌšÍė;™x1Œ„šSPŗn¨FĒūV@ir& *AŧŲ$L‚"{[ ĶÔË@ŽjĄ,A‘`;â;ŌĢąŲŊ@zK›„Ķm¸!§Įâ‚ŅĶ (NŠaš­ÛØ ˆéĸ;ˆEWDû5đĻčą*§šŠąŊĩŸ5ƒ q9Lĉˆˆ1"ޏÎi7­°æ]‡Ũŧ¨(Ē7ƒĢ5BĻšh) Zûę5IyĐZ×y¸ ĸ­Ö‘˛ tS#á•a{û] ‚   ‚   ‚   ‚   ‚ <,PJ6ŸÎ'AQeŗ#sŠƒ.Yv^x­÷C҇/šĩākĪ´'´Į­uzXsZ?ĨčņÕ(IM{ (-ĸj4`&„Ã;ÔXk§(CQPgb”j× ļžV'Rģ¨2YGÎų:AF9P×3P;pÎ˙VčĶ[ĪĘö]Õx9ÍAĄsŽĨŋz×.ēhv™~ašŽę 0M‚Ž]§v`ÅŅÕp= :.R›ÄędÔŦcÅąˇŽē:)!e@YˇôöA<ôŽX,Aë¸ÕšR§āÂå"Hížĸl:v÷-~ďâ¸K×*5øƒZĐx;[¨{Đé< TĐO_1(€ēœŋP ĩT÷JŠWĐéÛ§@V2äy í Č ¯ $¨SП}ņBƒ:4€Ö3Ä=q :2,\ígŠípÛ`œˇÕjŋĐkeŪģŗH?”&ĩ¯'\e˛WŧE7ÛHŋH~9ĢDš]edPe ŗųžox7ûßöæûĮžvØ=7áēÃėYړ7\‚øš–qCm­#Mn­IdpĢiHPDį:äžū~;7'ČW°š 7zđön‚äR0°K•ĐæR°Y|hįeÛ‚   ‚  Ęîq֗Oĸė’RÁ ëĖ’†&TũО‹;QB{ęÄPžāķ]uT/ĪŧwDŗŖúqV­j7@Ų)ĨŅņŸ :īé8“sŌģ°ˇ ōžĨ'"i>ļĢūč ^}Lˇ R=x}Û<īˆfß´ūžmĐE;l‹ėįQĖãŪļAMë­‹9;˙>ŽĮąŗePØ´Ō†ՏB=fĮəŊ]ĐkËúÃa"úũú‹$ü(ŲîZĻzđæõÃ@ŧršĪ_Ķ$ũrë ŗ6o‚:Ļâ_õ-ƒęO$h(l ęŅP|'Ü.ˆ?éhÍÎA%•%ôŊ ß=}['[ib¯™|ĶžÕúa5ô¤`(Ø ‚DփˇõSõ`üÖ˙¯āŽÍĻA[ ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚ <ĐP|ĸŪŲ¤w‚ü׊Û,ëf#˜‚xA3rf3u”Ķ{ƒ^•ŠZYYĸũXäĩišŠÚôy'dYäū]4Ú~ŲF‚HФZhpŖFo^›6ĩ÷&hņƒË€ęeęägˇÅÉu ÕŠLíl†Î^Ũôsúe@Ŋ› R tˇĐ2uō3Á2P˛RĒåƒ˛oĄ§ąūG#bĪû‚ NjMB×&úIJŪ– Ö|Ÿ‰S&T÷hÃ|•ģ-hqâbÅJ…Ļ•¨ęëžYq¤/2´ÚūžŪũܨø#ĻwAG‚ŌjT×ښ­1U “tŖÛWJįEĨ[\'ŋyFÃ7ur%AĄ[uČAāųæ8ˆã`Đ;kJÂ3ÍÜŗÚl=ŌHúw•j$ ļ;æX~ķČŠĶlqq‡4â äĮÉ8‰‡á…ąØûCŊŲ4y;‰CįÂúÉ­=‚u&˛b-ųŖ9NXŸ×mĩHyãõGAĀY2c7ümētŌfŗĶHæzjÔį[g\TIa¤æ+Hëd 'p§­#ãp†iĒösĐa @•;Ôę‰E™:ųLÕ÷ — T•šäŊiŅ0ĸ#rC–h?íLAΚŅ[ƒ’r ĩšMH:-!īu,BfœcW–¯@cá(ĐaÚXāœÛŒÜTĻN~jæ i 9’ ą˜d ×SĐt–ųäÜžC7­AŅ!NHū0ÛjņU%¤ēՓ ‘ũލĨ(ĖV{6ĩQ *¨Ŧ $,ƚ%š‘%jĢ(7Ãn(ALâd$aXŋ:Ɓ¸ ëŠQ¤k­8ƒŪí‹SÛĄ˜ũ,˙Š•Č͓Ô2=” Ļi19M\Ī™ļxŸ}ÎUūq æZ¸E˙ˆÅ}ŲSųÃÔZr×1¨G *#G?Mxår´§ĩZQ8vkTTxů5kĩÚ_EíŸøÄĐūƒjDđQ́I#dž‘Āuũ’ ‘í:j–~‡^‰¨QŊ'RũŌ7÷Ú-˸ŧ<='ĸ"÷eĩú^č‘eøē~âSJA㠔MHįš¸"WÁ QļƒÜtöČ_a÷M÷]Į[aWÅųôv˛vĐā–RԒîŽ)]LûTŧV-\ÉŠô`…]€­ä“|Č$æbÃւ (äõ3ŽSŧ/›ÔŪšG ^˛ļ|¤ŽņŲ;—lĐŗô‚U*ÉCDē1XZÁ;˙e+đčÆ4‰ŨyWé{yĐŪW?ė¨÷˜}]Ŗē0.]‡ęˇ j>¯|ûäŗēéĻ˙îēNķų_n”šaī›Ö/,7uö›aoÛ Fß9‚‹ã~> /Ėĩtjq+P›:§qpŅĻix^4ČöAvŋģ-Áŋ}^Čŋļ :}"AG‚û tˇ;Ģ B’ %nũx@”$^=]o`0Ô~GĪoī;—ûV9Ëļ âmƒvCo¯AØO/‡ûÆÖAōä~(ąEšˆCųksž%  >N!hSũ™ĨôĢ3ŽSZû8*ŸH!h=]ŔËCyqÚD–>)Ąžø¨ã~úɎûë:ųq^'ŋklAļy֑Õxč§Aë‚   ‚  ʃÍ…‘M@Ļ)ŊŸ€ōrdcą O ķÃūÆ4å;ú͈e ‚f)]NęūÜĪ ĨôŋÄ ¯ę°X?ˇĢÄ}ĩmĐ¯D5:¨ôäašūØĒŌnnôëôEhjēčķđįĮaķųÆúī^jđÄ3?ũqØ; ÍpcŌ/ĢžŦ“žŲIÂŗ#×ôÎ6æųčHÜŗ#¯AßlÄųQpaƸĮ^ÃūfË T7“PĐĐ̎Ic“#ã‚Æé ˇ–įÂę´wt4” WĐĄ^ˇŌíƒbū¤ĸ$ÃTĶĒõƒÎAXĐaȆAŸ~÷=ūÖŦ›FÁŋ‚Ô…¯ü`ņŊLīĐíƒæĸâ|ģ J¤ Ģ H&AnrĮ^Åî– 0`iSAŗŅv0č=Ũ'æTzkAAAAAAAAAAAAų4ˆĩí 9f)E“ĒOܞ׸Ũ…Õũ–Ü/æŋĶĩ‚Ĩú8ĪbLģ{īŦtNËôqŽj–Îę;ގ„()Smmä—ąŲđÎzA)uüŏ_ąô Ãqô¨cU5\Čv î2ƒät]īéß6-k­ ķ2 v֙ÍĨëēΛēuŧž‹øjä ÕqŋĄõ%h}÷]RzV”f W^Ö­ŸŽô˛LøyPWŽeÃĩ„ąWÄ# Br$h…}a/|wŠ!VÔH\Y ‘Ô˛ž¯4 eöeĒã~nį ~jĩ×y3ą4(ĨŗYļÆĩLÕ#/Rĩåķ’ Ŗ5‚xš!VÔ!¸Ã@wNëæQu,ŪMj´ŋJmÕķûûšFY€i#:?Ÿõšú!{ƒĘU~×mŽã~VÔŋŲ"HuÜßՇCŋzâ›O*yˇ÷=ų…Y#€ņ|˙›m>žWÁg‹o˜tÜ?*ĘjæE4 Ŗd(ˇü§ī'­\¯˛æŲ?8œüƒŗFīįÛ¤ōûßÜH ˙ķjԌáz$^9Жƒ (‚‚ (‚‚ (‚R by ÎúŌ,M†(1Öx´,Å '¯tæÜ~<Š{§Dķ_ũūæ Ķ×ļķß}ēAÉ$KējQ%Qˇ?<ģŪƒ„¸<ŖŽ8ƒāöˇ­$Ī„ūs—<ņ+W@O‡u2ũ öH˙)PúũĄŠJz<ÚôšŋôHwÍž8āĮÁŽ€^¯A…iíČöB‚Æģ:ˇ†H›fîÄBÍí—ˆŒvDk?=; ŊgģJĩēŪ?Đ9éj?ÚāØ!ËAĸ+ aN^7VÛIԝA[ ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚  Ęj@éņ*>%Ëj@üpŸ’eE%´k ņ7+ų•?WĐŋ^ɧ¨üš‚V׍$‚ ŦÔ_ɧ¨ü™îËVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAŲ=Đ˙…Ũžų—ėIENDŽB`‚leptonica-1.86.0/prog/copernicus.png000066400000000000000000001474431506303110300174200ustar00rootroot00000000000000‰PNG  IHDRļ'>*– IDATxœėŊOo&9ˇØĮęę¨Ú¸‚j˛ĶąwÉ.ZĒžˆ÷÷da÷D†ƒ@U)ēpoŒ´oO>‚wÉ"Č[r/O>A†1<ģŧ5'/'SSžC˛ŠĢęyôtĪ`xßÛŖ§ūŋ"˙˛ņ˙—Ągŋ5Á~áwî/~įū˛áwî/~įū˛áwî/~įū˛áwî/~įū˛áwî/~įū˛áwî/~įū˛áwî/~įū˛áwî/~įū˛á7äūiËCCM_˙ šÅ–‡zž¸ūE¸?RÛjÛ=˙ŅūųÁģūE¸ŋĄ.n䞊åŊwũpÜ)Q܂oˆT–­ũķÉŊ~@îžNŪú@]Õbt?ãŋ˛|ļr/ąÃqË:y̤.Žpk°Ž|´>wW'o‘Ü,ũŧ Bc~î6É1PÜ"Ķ˙ũž~‡éwîÂŊ}(îoĮąŠS7_ë˜æy|OQ3sYpË=Šûk÷Gi2H_'Â)˛ū͞"ž§ŽZ!ÜËá¸ŨÂī)$ˇĐÚ0ßSPĖF.¸-_Øöįö ŋS?šđ ɘÎ,‚ģŅé2FÕÎ~.QYîū@Ü^< ĶÚđ iŗMōčí/ŠŠÂ—Ô…Ū‰øúāÜ. 蒈{|üÚ°đ薾3Äš´ĸíƒĮ=5`ûs{0ШĨí;īŅ•Đú:ŗ}°"ƒ‘L6ʁ¸AYÅųM>ē>/÷û ķ™zPNIn ĪŨ ÷T_÷â–÷ÅPJ7$76ū˜äÆđOîŪ㞊Ŋ¸Åe!ĘN%đü*Ũ&Üĸ'îOkņ‚.1jz0—ؤF@Õžģee[7šÄ*ã‘û‘|´-ˇQņį•6OĄ 2ÜŨƒVũLÅn,ŦJŨ|wÃxSˆüq›bT ?kî°GfšûׅDî9ĒX^Šfs(:Ŗ˛cüÕp‹+fš6q˗qĢæ›-ËzĻR‘*iԌĐ\æ{4ļÔmÕŽ V˙8TRĩ4m܅j/č‹6ëËO’ƒ1Õ÷ŋŽÆöĀ>Ŧ+;6B$Đ´u/ãîōáHqį’Ũä*íĀØøâ9E÷~°Š˙„ÜĘRŗ°Üp5—yËāŽĀœ‘fĘØÜ@é´×YW vŸ+ƒî¨xˇ,ä9pwo•Ō"ˇ*Ėŧã˜ĸësč¸5ŦŠ4å”ÅnÔ˙gB ÃsSĄÜũ-ų¨[Æ.”MõĀØ+ÖŪÔJĻÎ2Á[v§îU­úÖö…ÜĨŧV‰åĒ0Ux Ü=Ģŗö\•i ”—ŲøMwÂX[ŗŋĶŧŦŊ(Į§öžĄ!Čū3¸ūĘ`cŽßã˙{T5C˛ĶŦåM{ƒÜ*ęÆĩûrw÷yS䍄Ž9|pŸ•í ˜SŧU…Ûŗw€ų6áw#{­Ņ2v̏ņEęĄVÖžÁ› 6*ŋ!{ŗĮÅ_Ešˇp7ĒbĖvųžÜâ>gü‰u9Cu=äíYŅ(}ŨŠKJŠđ›ōöÔÚįw‘ |MŠĄGxšũ*‹/YĻ DÕuŒ5ĪÕįļpí4Δü(îSĢĩ÷âîšPÂ˙ąĒė ZвlÛȚLq“ú@EÎQąĩ׌ŊaˇJr”B†Jm¸ŸđąqČÚ;րėõe#Jõ"˜ā͝úNVŧR×ģĒÁÜxQ~+îvË˙.SēĢŊ`Đ{m”@tĮĒX ÷Ŗ–ũŠą+Ė!( kÖŠ\—\õy[%įôL.nށ;oûŧ-›¯ ÉĄ4b ûˆBtrT4YWą ȅŠŪīÅ]Š;ÎTl*ŸrhX˛æžŨ+Õđ@NîŠŧÍØ)džĢzTí}Ąô›¸fí]5˛J¨:ÜėFĩ0ŦōGĨÆy{WĘĒiÕםW†Šæø¸ĖžÔˇHāļÖĘ~ÜĩjtģÎ[°¯ä9č2āf—cwÄä‰*g¨_J_ĐŦĒĮ˛ąQŌ"Në‘Õ˛h•Ŋ!‹Q)Ķ>kęžPMO[Ч¤Ržg…Bąáō.ÎÃ’§Ā­Š“u× ^Æî:“įPŗē#Å-2äViŽ„xČa¸‡}ŠJĖ en\¨ī(zeˍ˜šģ‚FĩŠF0vąŗÚVę)YĢšxDs ¨D•všxYŋá×{y§RQúDÕ­ęéĮņ{—ęp’Šö’?B?,EĄĖҝ˙6ôi$/ēqęvũ 6ŧą;`ĒÚ´ P-= ę—ėöeÜ~2æؖŠûāŧŽÛĄJ)\åŨ5Ģ2ā†ÖųOÎ`r[Iūá—(Fė ĒËJŽÄĶ¯ĘŽUYÕ[Õy™u/“°ĢÆ´"´—øø<”*įēĄT…­¸kDr„ŧ'Įøŋw˙4Ŗ¤ŠđLÕhĨA‹>?÷ R9#ķߌæœĒnlĖĀŌ ‡cãŦŽÃ4­3°ëlüŽĢY9pėĢa8wM_Ī”qËČáØía`ēÃ-ü<5đyšŋSÜšŽt{‡>#Fĩ>3÷8~-Šqâ]‚,bĖö0ÜéĄĒQÆiî:՗Šį+>;÷‹ƒjŸˆąũ?îvšëq×斛žrĮēõxPøÄA¸ÉĄ*2ØÜWKOÍcßĒ>čįĶ'Ųú#&LÜ|éŠnčŒĐŒŅ‡„ģ'įōFœ ‚äėÕã<.õؗ˙{ÖÁ‡„;ĨŖ‡øēä\æžĮč‚Ā;Ÿƒģ‹ë;bžx÷<^ÜtfRîspģsI•ųŪÜͰnsk:9’{†ģžã̜ë2æžÆ?–š§ArÅmæÃš÷ĀA¸ģÔ+NB~Ļņeîijĸš5oHî=°79#ĸ3"ũū+JOlF=j¯ĶEnoPD…Ąš­õ’{í7ß@×Ϗéá4e¨Ļq†âĶsŪ’)רœšíEvvÂ~ķ;´ž~šxn&îā ‘ģœžķâq×˙Ü큸 /į–įÂŒGÍböŗÖ渜¯ß5÷{Ÿ[ˇSŠūÜ&„ôšAĖčŖ˛÷ŖŽNÖÕũŦšaNčpÜÁÜŲ`Qz“ŨT?%ÕĖ­…Åv5wáGÜaĐĨڏû;ü7°gîŌÆMpw÷ ˇŠoßUãTĀ“•zŅpË9žũÆŲ4X`FE/¸‡ĸ/ˆģÁ˙ęO)[BüånašjŽåûÍbäC Uœĸ7]¸Üú‹rQëŅĸBŲNRs#ŋëŲĖũŋ š:@ĶcoĀ ø/äÖk-BëUFܡˇd,úēh*ä–0I, –ũ¤ĸéq|ˆņ‡\bŊ. vļėŽVų-p~Ēj˙fėNËŠiŪožRū)lĒ#n!Ü0wyq]4JYSˆ|ÄŠ+Ĩ*%LMÜā$`w$ꞕ`¸70÷Ęj%)↕ Å=ī'û}îáč¤ŋ~ΏãO°.5ĸ/'ĘĀj…S`ĘŖy{^(ĐŖV~5†ģã8‡ÜˇŠ›=˜úœ+ÜkÅ]îēíy˙’yŠūú¸JRÎūæy”\ĪĘ#˛ũę>ė˛ņGĐāđ˙f û25˙Z˛âo ÷ ×˙}g§^oīYk,Ä;õŦá.ā=Yu/™—’×§ ¸{0ęE9°{>æŠûûą-ĀZ‚öí¤€š…O*ß?)Éôüõk˜VÍķŽ•G™Ęg(…r”G0ŸĐXîk27ĀŦßû›˙ î¨dėŠÉzęĀíÅ}SėVÜmëûLž*žUųįŦy¯aēq|V­ Ė‚õzÎā …ø(kŲë“–ĀÅz(ōVIBϧŒoΑģW×XûŽ]*]"Nûí<Œąw§ĒRŸĢ‚­A0ĮįåSi˜ø>ÂLĢaJēhn Å-q};‡ î;˜ķždŠ[– ĖaWũ‰úDŪâ$.cošáf"TJ¸ĪĪá]§ēėÃũŖ4"YpõX¨S™`9V.NĢņL‹ÜB•=r×#ËÚ2/Zœ×mŲ+SšØĨ*zĨ[aæÃ€û JčŠ5ØCWÜĮ…˛•`5 Ģ`UH[ ŪäĒhn¨y͏•bi/˜Ãēˇ_%Ōo`ZōIœíŦ\ž äŧU +žgĄįĄ€ÅLæ]æ†ûëcÅ Q6ĩŧ*•<)îBÕĄ$]¯.ģKæģī3˜8į/ä[Â ß7âęu‘5÷GLÁ0=ũÅūžJøHIPĢuÛĨzAÜÜōea¸ŲÍÍģ{ū¸Un?hnÉÁ4ŅÜĩâΆ*ŧ”mėK•'ų7¸&ëOr݃BSŌy\˛Zsgâ ô‹ŧ.žÛ+U÷4÷,˙P͊¨žÁž%æ÷˛î¨|ÄyߎvšÅŖj[ËĮîÂYŧ/wŸą{Å]ŧo{_Y*m šîĸPZåm 6ŦjāŽP¸[āūÔŨ—ß‹U÷äyŽę™ē&¯”ö˙Yīø•ęü÷ĘXëx•™Ŋ˛lažyĖ`ŌS?ŧPžĄŅęķgÉUīũũ÷Ā]¨Ö10=ĪxĻĒé)rĢūĨ’ĻWš*õÖ/ĒR€Í{U a†"š/ÆL7žĢĩn.rnF $˙å# šå`•ŪDá>ÜŋÂp7H§’â¯Ą†2Žū.T~+Uw]|ĢĒ‘˛*6ļ\)ޞhĩ娗`~?ʇōŊ˛ĀtĶĐp˙ė%Ą÷´Ā#Čí÷°_0~ĸōēŊũ h˛jüZœJ•™ũænÆļĘ[ɋxãßwæŋ0ųctwG†čÁroŖŊ/āj3ÃĮn*Xō(ęęë~”L*ÃMåwũíŸúЧ#Jm=2ķĢÆØŠæ0ãßÁxUŖ“ןĸĒ˙)#˛ra×Zzū°ķ~ °‡'ØEļwĐ!ūîėƒ1ƒoSŖqnHĪ{ēa(ãy˜ũÆŲüŸīAMÅáęĸ„Ķ’¤CΟâk{qû=ËR‰×Bģ‘;×ÛĢŋÃŧˆ‹(^j î;"ĸMŠËę0ÜÂįîĢ.Š—Ú,âŌ›ŧĸ ĢÃĖ›…dĪ+˛ ŌW.’ÁNøÚüˇĢÂŨ{ŗē:sIn0M}%,ČM^sāSáVVš÷ûŅ|ŧ/čáiPtž+p)Š…ėˆųÄ=¸EíĢĶOņŽēˇ-Ũūßċ.ˇ ķ‰{p?íÎĮp pŖ•`Ŗæļc7E-ÎëOģë1Ÿ¸÷û š÷’GΐÜäöŌÜqT*ŖˆÉü=¸ŋöw˛+ļ !6ELr;ąĩƒäNäGbņÄ^íĨ'ŊŅxPŗ“}9Ûf2jž‰P_GØf/įîҚ‘Üũ_Øŋ“ú\Ą['‡á&j ‘mnã”Ķ{ŧŨ…'N ŽíÅíE¤zQ†Ŧpƒø ڇuõ`ÜūNß2^îCrķéOŝhâ[â*YW÷âūڋļî#nÉ㗜üî‹ĐV°Ą™;Ę˙bĒ6DdY!wįîˆĘ sÄP °šåSwÃ˛Ą`wîĒ Ã!¸ģmÜü[;ÖĐž+ŠēŽ> ’a|(AV` +“…Ū=˙Gœ™õ}‘‚ģ žÅ=¯wv¯=‰‰ÛŊņs“÷Œ—=ģzxøŠ÷yS☠lÄ`¸{ūŖķkį!¸qŽËk˛;{ji9lJÂĪķ´4æ,;*!‹/JûÆė\ĪYņˆ3ŅŦã!¸q2Ũ“•Y|ÍÂĨ`ĸ¤ÖĪZQ‡v°×CūŦl.ėpŽŪâ†Üor™ÎŖéÜī=n˜Aë 'č˙Ŗ˙YĨÚkî' °Ü¸e vžā¤Ę­ €4ã¸Ėn„ÉŖĩZáumšŸ ŪãÖ­_pGoŸŋu“ āŽ@JŲ(9a„¨Í hX 3P¯q÷ĨúÕ0ŲyÃ^åzÔBUõŊæ]Kŋ  7øÁzU÷y'îUžãVKØĶʁîōŧøHĀ)G—õ§YS@UPš[œåbÚ[ŒáĸũŊÆ!ŠĄŧ!ωB°ņ<ƒ­.Z\KdíT.ÂæK-̏Ÿ ÛÉÆîŦČē f@[Ã+0”Ÿ5§įJ(šL\äĸh ÷aÖQKØt(”Ä}ßŪ0Øôßfō(Ķv›ÄTpĸā•SĮr–ˇ†[ܨņĢŦ}ËNā%œ'd°ß•7÷™ā Zƒ!÷į…(p^+kOOĒCp‹ŦQ™yqŠÜO*”Š››Îô—°“Wyc¸ŸîĐT—šå†P5÷yĮ3:•ōēT܃}ē—ņ°Öžã> z_éÔT"ÅcûŠŨ™ŌäQÅ]î%ūVe-lԊ^XŅ9.ŸpīSQŨąĻnĄĖū ė/?*Cˇ+ÅIÖ^歌enpŗđQë,āîĘü•*Đŗŋ|VZ$ë.÷Ø4S…*Xw|^ .ËŌų ;ˇģėAJÕ(=*îëės€é¸8/Ú;˜=į‡ā~füé›&“–û䤀 ģĶKÔÚ▏?š-ļØĐeŨŲąøĒ@îŧETu1đg‘Ëĸ­Ÿd)*ŗBW‰ļd~ė#o:{qĶTÅ{Üw7JNNNOpĸņŽá*$y0Ųķ¸U%c\éŪÂĖûĢQÜÁí5;*Œq#Šö´IØvÆį”~T ŽŦ~8ĖøÉø]S—…ĖûŒŨČČovvžc#­´sŲâŪSw–3q Æq!ĖÚ¯ŠēŅę;””]Ą~ޙR†¸a˙ĸģ¸iÔʕûÍ7 ¯ķ^ũ_ķŠ5p_]åhZ(nūŒģ3ßwW÷°ĮņŒīĖ<îŦƒūÜ´ƒĸk4ŋWÜÕ„=šîGË}y•gZĘJi~ũsĪ„žŧĒõ˛X› ÛûŖŧûũ<Ž ķ%f֍õ㖰wŽ¸ī‹žxúô ļ§ž+aUܯ`‰Ëŧ?§¯ŪČ­˜ãũÛá¤ãp<õÕ—tfWöæ†n-pŋ˙jŽâžT6]wK\œPkŖŲŸP…EvŠûēüqtJ!íJīĀÜGŦ/a˛JWžƒ&Ée•EãxÄxčģŊj‡Ų}ŸØžã'…,íŒĸäĐF*†by3ŅĸÂ/č .+ûKōB^–ĒcöŨōæ­9D܂zj1ėÅÍGw/†ääΑ…đ[å÷ŧ_Đۖ'õīGãrKã÷$¯ Ÿ†šb b!Dc>KÜ´büM¸#-“æîČQ̓qwË3zA؁[|FîZĩΊŒdˆ*152¯ƒx küa¸Šąûtˆ‡ėĶ_ŨŪ6n1ΎË6…¸öÜ-ė"‹PB<ÍDLĶÚČÉ™Ēƒp?ÃnĸęEQü&ÜĒ“ķBnēmĐHN^? wõBn/x=ŗGj(}<w>öK>´w8ŋķĢųņ˜Č‘—sãäÁļ…iÂOfŅXZ`r~&î'Ûą}Q,NøŪpà øãéŗpÃXF|Hn\Ļ€{ŧ8ŒÃTäs/ãļ˙x0îFtŠ.!€ģHHā š­Ņŗ/7ą7Yឨ†+îD—ų…rb˙ØŊÂaˆâé1LÄŌÜô›‡ņĮąe-l~ŅjôN.pB6ę9úåƒp †h:<ŖŨđĒžIÆ%ũĀŦ›ÂaüˆTûpƒcŧ”ã”î°nnÉ7ŽŽšƄ’öĢhõ6ĄÃr‡š›°!–Ã’cĢ š/*eą%JäëÖ×NĄÃÂĮŦUÜí[ÍŨUÄÉH‡ā{q;/…ËÚzänn5wK-GŨoyūSr•ĀEE?ˇæÍf\öĶНd ”ÍMÕܝ°‘°;s+ŅKšAm1š{ĀŲ^žäŽõØ8/p˙¸ŦæĪŋ<Âĩށ—atA|’ fÔ_ÉņRnđëÉŪRÜĶĸ€ÄЊ¨ū|˜Gk¨Ĩ‚ĄåOĘNë˛Įļ×ÜĮ™^C퓆$än§'ÁÃr ‹Ŧō†Ũ)nĄnåāüÜ3ĶÅŠû- ×â!WÜī4õŋŋ¸ŒŨ\Ãjđ)ʋĻōöōöŽeĪ kËįöŨA¸ĪÁQ=‰‹Mj÷ļœX˙‹aHƒ+nuõø5Ë{Í-î`G,xâîĒĸÕw7N´¸h,Īûq_œ3Ŋų6˙ËĖkLnŋš.4ŧöcŅÜgĮ¯`›ũ˜eM+Ī‹æ-r×årëBE÷⏸_ž”[rVĘŖ‚ąw­âömddü;ė•W÷ŅåŦIPę0ož;Å-ûĄĖq 摿~SēVī^딲ž7Ĩ<+s¯šŧ}̏Ëį§IŠW(ō(oĒĸ­öÕíõK÷ũwy_ Å­rĨũÍr"Ü֋‡J E".ĒÕŸd=¨,˙0ʞßā‚ˆ¸UÍø^qßTŌss´w!+Quw*Ōö^ŲlŲÜģt°-=ˇ>¨I§ĸ… Xû;y¤åÎF\áŲÖ°Ā?@l?îēĢ:ÃÍÁÅ4œÚÍBY_¸Ũˆ  ÁŽø_˙lÄY.‰ÜúҘa/î˛ĢģúĮ1ZqÚz’ÁN+Õđ5U|×pW#āēäĪvŸ!ąģp¯õƒeė6tÉôäuŽļiš+‘ģĻS€á]ÕJŒŲë¸vBÆ Kúä"I´ŠāëlĒŽÂũ.äN¤ÜZ†Ra?nz˜§%„öŦrÜŋēU¸SÃEP˝ŋŊ¸_‘]qIÚŌãî™ŋ6)<itî}îÄĘZí€ÛrN,ŦW¸ë%†ũ¸c>íŒ P}8'‰a.ĐęŠa.ä^d؋›ėw5‘tãyS7•ˇ…`ŪS ÜŠųŋõi—Ŋ¸9u,ļāŌ¨}0¸ÜĶ™˜ØBφŦ>wE\lŅc™ž†ÔÁ,îiTm’p<Šw˜‡VÅŨÊ>•ëžķ'4U‡ļÆ1øIö­ß`¸”“U†Ŋ¸k"%UüО›Ėü~ä-l×sĄúĸāÂ;¯Ė“ÆŊ:ėKÉÉúôُ(}6Z—Œ2?PāvIī#â2ēȝ~šÔ釿†ė†9&s2ĢČ䑿VGôGã´đęy˜,KHŅŦNŧėeÆÜĐ~ƒAÜpRƒfĘ6/āæpSå>ŒÍa’;Üę~ î1ô¤ŽC8P r"ë6ëØ5\SâgxqđrUY#R؎O’û‰ōđŨ!¸ũ‰tŦY$ËņcW?eBsË֝C\žį,M‡Į§ļ§J¤đâö”æžÜáVôZOĄĘÕ!#tôköކ5ŋâ,īĘŦ+xâŌúP$įŖĻsŋü`āö>{Ā8ÜĒ1䮀ģŊWÜy[vXQQ ö ÃâˇîWųöøžÜ_ģđŦ?Ŧw˛ŧz`l8bšRÛī8(”Éĸãã{wQZŠÕu{.w§Ķ¨Á͝ßR`ãŸå­ŌÃ1rˇČĢnW_Öå­Ŧ‡KL?ĩ-zŽ>V(ôĩŧ×~Šā7œojvĢ.3pŋQÜ5xƒƒsš÷5ø†,AņˇˆÜŦ-8t¸õôĪĢúÜŪĻÂA“T†û ĪTĖ›‡LŠčöAĩ9<üU‚?Iũ4Ÿ:ûSđÕj_ģÜäŠûpōqëq)ŨĐÜ0ä͌pŌXĢ2K*ũ§>Mđ j˜ÕAßČįVŅ;Üäí^ûŧ|ûØuB՝\œŪ‚ę.^j`ÕXŨŒß4ĩ8Ī!­žÂĮ=WJŊã0 ũ¤q×f'WlîĮí.f™üˆĀčkĮžRMüyÖđĢî#š|∺R‚ŗyz­ĄtĨã…uķ‡ęNč3‹Í rby?nˇļO{ˇ[üqÁT÷3k+­Č2ôÛįēíŸvEœ”cҟâI™`ġĮ5Ä ;vëDĮ~?nˇĻ´–— ą;eš€ŖCmBįčŊîöŪãv—Ė(…ÔįJ›žÃš‹ļ¯pˇî'ØĄBvÚöáΆrŪL¤ÄÄôĘaø˛c2SšüƒĐ†č š9ŽŌkĨ=;‘ŸSn—zJDq×Đp8ŘąNÜõ˙^‚ĻfŪąÂæw†wĻG#5w]č×ũ4ļz?šäėD­Rfö!ƒËVäÆĶ€o e¨•úöåvՐËjîH5–û[āns™;>c†ĸŸƒ<%čøI…vŗ \)ũSûüs(…÷w_Úš•æ^ũ[ē}ä¤r¸AUŖf(rėŔ}áœĻ28}|;VPˇã΍güšfŸŋŠä+p›}ņæ¤4ˇˇ'ßyŨ^ķÜ]5™=;)õ8CĻ—*ĨS˙.yđލíâŊyzl€ŗÛša!Ärß1öšå)ģįÔã‡īÆŨ°{ô~ÉJŦuJûV>wŧ+j{ŋ›mVū­*7qĸšÛ‹Ŗ“Ŧ}+KvvŽÜ—°?{tĪۏ;ˇÜƒ2F€[j/ ØFxz+ânąGŦ“žšp¯¸ĪrŸœįíߗŧšDîū¸Á‰Ä,*{q‹ĖžĨú“†ģžvŨzƒŅ\J3ļֆm&cę#+ÅÚíŖ¸=9/ÚįNq_ZnT‘NKéK@ IDATģ'ˇm0[<ŌwüQ2mšFÜQxœí1ûSÜoT§˙XeÉ÷\˜×}ųžŖQ‹7Œ=Iö°:×N‡ö2oJsĻ—õ5îĒkÅŨûËåöåFˇÄžÜO‡–ŒÃ˜ķ@6[,âöōg_îFĪ“wjq×JP­LÆÚ¸Â0/€qr0đų¸'7Ž"PũėÄŪŗ-Aõ–X…*Ôđi)ÍßuKa¨˙ŧŊ'ˇv*Ü{J :zljäv58šäģ}Žīɍ“}1°ãŊšG¨×¸…ĀYë0nˆd—Ŋ'w‹[.ʞŨ|íŲtČF†ļå,āŨ%ęA×ÁĨ=šõŌEÅŨŋĸÚ˛1ÃEķšģâ”ŠŽ‹ a?n}¯äũ áÚu{Ȇ ģŗˇą×§|Œ…Y¯ˆđaėĮ­÷¨âChíˇ8ûņÃņ%'nčQņōv§Õ ¸ÃąŊÂ4‚`•M;ÃÎ.JŦôūũ!Máôē÷ãÖ  c…ˆĪøØ%ĀÂ6\ädw˛Âиęs˛W×|^/ņļ§s÷â6îw•å˙B?JNØÍ­ķP'ĐJ6z†ļ“vGw||–ėšŊy8z1ˇÔ/uŒŊĐoUĶđõ$ā°ē2;Øá´iŗ]—œ¸-čžķiŸŊ0ŋ÷.7-Owũõ‰×Ųķ´]šO_ēĐŗtîWLĸį!Ķōt`7øDΟė_ĖõSöRnÛ.S'4íČ §ĒãĻŽĖrWŠûĪr(^6Ü/”“éøxØn×0(nčĻĶĒc 8Î›îō5ŽkÁ]ÅLĀLÚiæ‹íĩÎtj–ÁkŒ cFnÕĄhīŽY™UcsU>ąL ;÷ŧ{Ą>™ŋ;ĩOks2`öEāŪEÜĘ3v*ņū¤Ė4÷eភŗw3ÉŲž]'fwĻĩ’:ŋyūŒ3ÄĀÍNōĮŽĖšöސ/Ëīa6Ĩv‡%‚^XĢ+fķrŦ.>önTÜįE.ĘüņåÜķ+ ûQˇ=Úe*fÆ•‰“ÚŠûēTÜÅĮVōeõLJĒÛˏ’Žš­nkĖ%Áņi`<īxųÃs_Š—éA¨–†ģŪ›wJŋ4ģĻ›°ė=]ō4Öšø“ŋS`î†Û!ÆũØŧĐ™Æ >ÛVgŲ]¸ĩ;7VKĶ„_Š]Ã4œ 7›vįFcp/UT˜<ųõģuœvįFu0îųhÆŨ&[vįÆ>š]øō0ÉZT1ÃîÜz™?ßõĩÕĐî4‚´3÷`ŊU:ȝHvæÖŅ/9áÛ3ėV1wæÖÆä&îŗ.zcØŠbîĖ­‡Näē0˛)lŒyKŜ ūšuސ{˜Ü ˜ļU†ĩY~Ÿæéwå6âˆh/0?lÜ_k1ÁJܛÛÔúa9†…aCÔk(ũK¸íī"wki˙rø§Ûs|XÚíŨ5ÃģrˇF—^ĶØĸß,ã+×:ۅmģr[eĩđšŪˆã&ˆā|5îvšbJCļ'÷4ÜŨ$AĘŋđ.i¯xõZäūN—héôŽĻƒ väžãôZ‚†а–#Įq@wgŪ‘{ŌUIî–‰-"îWĖhIØrSõŪ‘{ÁT j!%ĻÃeč|đˇ.ˇ^ŲņîŠĘ§¸›”<ô$ÅŠ˜…ÃmÚ:č×îË=•dbí†LįjĮ(K^˜ûÆŊÃũ˙˜÷šŋˇ7÷lk&ēÄKlíjë3WLÕÆXîÉÖ˙d•Ž˜-ÜŠŸŗĨ›š•€ũGúߛ;5ČaÃrŨëV%|v&6sKûąšÛ4<ģq¯´hŨJ†6k>U{Ĩ;&îÚÆŽâÎ~6c{ģq7‹XÚ÷kL&xÃcũ­ä{Ȅ$܉{ÅbëVFģōÄÔŌŗ’ā†)ĢļŨƒ{åáu=Ŧ<2Õ{Å-îėŋnžÅË=ššŨÖG2L ĨnØėîT(ÕõģÎ3|ģ÷r°Ũ°fiXąRė—w\õ›šcŋ ^ô°mú:ˇ›’wâ^íé7d7fÚb \˙ˇã]Ūŗ‡RfŋŽcūŠį…d⒝įv­ųN܋ZnŨ÷No9Sĸšd÷…`īę\ąÃîâ[p˜ņē0ņlC†°ŧFÆšÎļúi#7LÁŽËtŧÉ:Ú˜¯7}T<ōøxwîÅVŪ÷ cÍķ_Dxér†[œŽƒģ~'pÛ^ļøwŠûlwîEuâ{ėõu­ūûŒģIŊUt͂ 3)øaj2ØĪ4q ö ŪŌNw—ī%uŌûõ- a 1œíāÍĘŚiÔ\w•3öŸ* ûŠXË^CÎnsĸß.ÜK㝗‹°Ã¯ËēžįÚ€÷âĸ …§dŗę‰åė{ôaxbSļ×,73ģp/Ĩį+AôÂÁZy’ã–m_.*ãĖC€7Žŧ|†×pē:zž0‹îwā^R'ŊĪĸˇ(fŨkŊ×Ä/¨Åe+FĄĀ‰éėAqgOāëōæ\ŒptØš3÷ŌŖŪž]õ ’E‹›FJīčČĨ}J&ņ ¸ĄBwū,îsV4˚æ;s/¨? ¯Q8*Ą€ņĞ•œ‰mƒ\S¨ĸFî#\Ŧ”ĸ/•tߡ%,¨éÖĘá,מásÎĐ́`Ų|Vä°d\éz‡ ´ã˙+Á*ŪTŪå;p/X'­[+åąŪØÜXîîĪ˜×‹AŅŠˆņ˙ĖÄČęž°‹[˙ą¸ĶÁm+Ÿ:ÃŨæøIR7%L?Ė­Ī’ čRJ:~›qæÂvî…ÎŽ{œîĀÄq†ÚOuĸYŲkn<š¯Ļõ­ ‚ĸŠ@éøA5‰Jĩ{áIGL†{öΌ~+îĻ›ĻÕܡŧą-ŠNÆÎ? '‰’ŲÎM{ĄÆ0‹É7ö,˜õO›Ãæœö]Ų1vÃ'IëĶ‚ĸŊ…ÛaĨū$Ą ļs§ĮNmōÔųÜėn™v9Äį\nŌ‚Ō¸wúŖDÁlįN8{˛*TįŠ[0pš¤¸[p^R:ÎíĶ6ƒ7õē§Üƒ;­Nš)p+üÎNCuĖæ÷EŅŧ}­Lū™ģOŗŪ˛ú¤2ØÎT'C_ļ™8ÍŲ­–*ų˙øë)2q+\gØ´Ōš_”œ´ßĖžöīæ/’•2Ū.s†ž*wķ4?É"k¯2vyæœ:‘˝ū÷)e°™;ŨI›ˇËŽV~WₒLŪČōŠŊĪ›ģĶ™;}‚ēŋÍ2%N›šģ¤:™K–ûí]ņ-Îz=ƒE„͝Ŧž}T–‘ŧäķ™âiMčlŌ™Ęfî¤UeÆya—Ēæ–Ĩ^îö8sƒbįšŧāŖ´ Ņvč)L­Ķčx+ Ãfî¤UĨŊ €‡ūVub‹VånY…#ĸÜq˛*B÷ƐĐģEÔ$O<´™;ŠpÍūw•Bw܈à ÷k[)n=ĨEĨksŪIîûØĘė¤Ų Ļēfāmj(Ļy™BY̓Ī]ˇÉ褡wM΋š“ĪY-Øņ¸K;?­ûÚĢW Ō0æTy/ÆI9ē/šw+wŌǞcēķ\dM=g0šÛž_°pÄėÜ,%yŪ9,u"Ų­Ü)58‰iwœĩŠ;ØËįíáG§ĒŲdš$C¸qS<[šSjpÚʧzļUŪmĪŋ h™nöŪ‘Ô„Ž"Lú¯Ųʝ̞;ˀģÍŖbĻgģ˛UZƒL ŠXŗa+w* ģ:ôÉ3ņÆęˆ¤&ԖÕōFÍÜI5ZšJÕ¨4Mę°x'ž‰ÚxŪĨ|@A0Ûé›Ļˇ‘;õļz*ûB 7ÛāáBTŒYŋf]"3´"L¨ÉŨ¸SjëV[“ģŧ9ÉĄŸr_¨XÖOceœ|FnĸŸ˛wJ ĸxĢú¯ÔDŅō ‹f÷´Ÿ…v 1…’0ˆLMßȝę\˛RgPÜĸúnCDŒw“œ$JŗZĩR ņmäN¨AÔŪ Žmņŋ–ë•rGũŦnKŊĻ}›pÜđŌe8Mņ˛qˆD%Aņ†b˙ÛüoËMî[ū4ĀAázÚĒšJ8ˆdās!Uąļq§Ô Š7ŦŖ<Î˙ÉÆ•ėŠ[TÆkpT„=;åéFuwę)LWY°ÃYņĪ7sÚO&ŽgŅÉiEČTÛ#˜¤Ųĝ(-mœ(õ=œå›šY!N¸œDωgā_e Ģ/kaāįČ÷Ų6î„Ôɂ˙ÃĢė|뎃á`*îTg ËCuŗņvķîî.Õģr'ŦA=d¨ôHÉļsW0ÕŨ¸&Q1Q+ģKqãBĪæyĒōiū|wĸ ĐÚQ)‡^i†­Ü?âŊ2žÁė#]û˜1åŲø¯[¯gîŽŗįŨÖ#ĶmŽŧĶÜÕFlxá8‡áĐŌ‚Ž8ڒ…aFX%Ŧ]hĢ>õcļä7q'FÍ–Ęœūn—Í7â* wbôN×§FqÊqČ}㌌ĩ“mŗ!ĄÄC&ŗZeqŧÛmŲgÛqƚp­84ŖnØiĄ:Ķ75pgģp'Ô NgŅGĢĖã+`Ž[Oē‘ŽĄâŽÁ˙üeĄZVíä"{z܁;ĄM^)ĩļaͧĮ}ëÚø31‹a|o2ΞkÚKptŸë•Ávžj7­mã¯˛ár7oP’˙¨F˙I>Ą-Ų+ĨIĘGņĀ››ˇĨæ>ĘõÁ&nZ ZéQŅ]mU‚–[œåz…@ĸĘã&oeķ–Œ?ũ#û+UN;pĶjpZÃÅØõnÛ•|+n]F´i…ŠluŨ.4™86‡DėR/é<™lō}AIŪ^fĢŨ#ÁąMQ˙ËĒáč˜+ģP˛áÛA'Ŧؙv÷ŨƊÛL%ĐU-YčeKŊSHæÃÉ.Üô3ÎÕŨ÷˙ˇ§…´NkČČák #ĸŊ‰ŗ $=?ąŖ6pĶęÛQŽ{pŗRrĸMĢÁĮb¸ōI–CũuĨ¯láĻÕˇŖÉCŨƒP9¨&&ēŽžhzĮ<`ØÂMĢoGÉėîvF™v>˜¨˜î$uîînR}ce5ĀģģQÂ-LÅĻĨПíŪĪŠžąæčE8īwkuLh,Đ&ĄīDn?nR=ŖĐëĩ ģģ҆đü53ĸÉčŊŲnŨßĀMĢoQÚ;É5 ËĄ)ŲBÅô6ŒīĮMĪ‘ƒđXîz52ŗā”4 Ŋ ĖûqĶĪĖĶÄûšbmŽ7Œ„Ķ-Ļ7K_Eˇ7p“ę aGŸ%~h´#‹D,ũ¸IõōšîŪ%|ß3v“ÃX8Y1]§âÄÁņ¸Iõ­O+~KĨ¸5āSȲbę:kžŦ Ĩøāŋŧ?Šžņĸŧ­¨{p—ĐZ’ęÎŌĢŽBŒ(oā&‹/Jąc‡Á ‡‘¨2Q1]ÄŨwí°ÎMĒ9ũšėvė …1ëĨy$C }aŠl °Č'Œ÷Ŋîâ…ÜāķŽîcú(†ŨšIW'F$å~Mü”6Ķ3d būŖ;s“ęۘkéE;[B_4—Ú[UjŪēMÕ+’;r“ĩŨđžH+ķ´ŅM=5•ķŖĢvæĻÔˇíFíæ) ĩŲmOF3+đa/nJøŦÉōRˇJÍ\ˇIĒŦY÷ŧÅŠt÷î:7%ÂÖ:&ÎŪ!4gz;e ĪyŌ2õ;ĢÜd^Ø2\;ãm-´˛ĀęGÉâ¤Į`;ĖîÜä^¯õ%Ą+›4Ŋ›°ö1>~€]āmØY[įĻáŠ7(n|!M|=Yw wį3ˇŲ!šĘM5;ÉUÂ;Á!)Ė$fŪŨ(ķëÅũiü7…UëĢÜTnđļ1ˆ*CĒōë1p–‹ÆÛvėO`8öÁđŽrS‹´¨oŲ/´9rSĘÛäVÉļâ~nĀ*8wáúæ*ˇ7ŗpmŋĐŪ—zn˜ČTZĀũŽņG6ĸŋŖ ļ•›RS'Šû5P-=6JwˇLhîcØŌŊu~‡RS'c{§JĄč#)Tg-99ہ{ îNŒÂxz!“2č^ąË\đ'Ļš/ļrSŒ‡S'ã/Š;ûa$ öäģ+Ī%'×vgиÎMāáÔɨũV´B´žg˛ė*Ĩuäë3öˡryëŧ4tzŠŠP@Cõ{Éģ1o*yÆ.Ū°ãrBåíáԉŠšŠtL“.Ģq(.¯XwĖN7rSųp8u2ęQ”‘–ĮyšNqWrPSYëv›hb¨N ļ‡Ģ(…âôx`Sô÷ÕԛXã&dâ€ęJ]% …2÷JôD ´m]īCČÄ!Õ ( 5DÁÎ=žxĸd…›*žÃY':˜ķÄÎėŽ-Jr…›’åCĒš€(ÅyČjgnJ–ĒNÆiR•Hiâ–<ŧĩ;÷aÕÉhĮ‡)‰œ†ŦâûnĸôĢNæ@ã4dĩ37Q[ĢNæ@T›‰;ŪĻļÂMčŽ-ģkö ÄĘtŽEŧ$~…›Ę]:H ÆO§ĄļŨšŖ¨K DŊ™ž6ēĩæâ.ēBÕûƒBOM Oäo…›€<¸\HkjxˆOZä& ?ƒG~´Æļúo°Ĩi™›9âLĮĸÂ8ĨūenBWīŌIkûˇ?M(XSp'pČŧÂGåMģ,žkŠ÷ŖøáK ą=+Fqs17ÅKÜt,KÁÁ”¸ĄŪw’Đ­ ‘S•é…cÛ^˛Š<—¸éR[ŽKōŽXžč`#ˆ%“›ŗ’7ģœŨŨ¸×&i„ô†˛ä`ibM/čnpŸY‚%î(w×ŦX7;IYũĘš*qØ`žÆjËîË˙e‹œDˇVÔˇįöøō‘&՚&“,ôå jt˜Wv.pĮ­ĀŠúnWōĀ ~EüŽ~œ§•¸ãVwE}ûB€ūđúé§Om–ĢČR•B“Ę~Øw$Ëę;ČKœ+ũá™Ũ\í˛ Ä)8|-Ö+ãw,Ëę;@’€0÷ŗŒU•t&§C\ĸŽäx[ÖŌ܋qÁ%$ØU™?Ĩ3ü”S6ˆŧšĶÜĘÍ#˛Ĩ$]wðY[ˇ•Ŋ6˜ĄąØô˛9Å0ē÷¸Ŗ]ņËęÛņ,ķŽ?ë3*aWa´fĨābĶ'á,žŲČIķ˛úv4…dmõÜĢTĪÎliŒCˆÅX"œšÔ7s×Á…Eõ=‰É¯h§Ôd”č*v Ūœ¨ŌŽz!DUČYôã&ŋĀEą¨ž'ˇĒš‡ ēūĪŨ•˛āXæš^Ԅq!O´[šŖ;‹ęģĩK´h†ôČũÔU­õ†4%ŋØdFiėĖW‘%õ­ÄöũôŦZÅ ËŊ Q vgC•ķ”oģTŊŖ2ĨÚÛEŋĀ՟ĨÁ“žYa—Ā]ļĩ¸| Âø ›rO‰!ĒCsömäŽĩĮRz‚=”s:ĒGũø?sU˛ŦjīXŲŪ°ûlęú$õ&R¸ˇÉIüå‹C[ÚËá(Đ_6‚;mÕÖTîŦĪ?Õɂ€ĮŌ9 oĖīh/ÔŌō~AāîĄĐą6`WąweĻ,’ļSÜŗZMzĸ†Ũ›ŪÛČ5ķK ĢTŲë5PîÜíU>c~ˇ'šĘīώ|VĢ‹iߊŲöNKsGiia•˛ŅyËĪâ7z3ŪĀ2â\œR„ĸōvQF­í„g;|~ia¸ˇƒ…¸3܏°YŋW…8f™(Ŋ‘^đčdcķBš;úđ…ąođ Ü?ĩī. Íũ„rĶŪķöš‚{Ü /x4&Ŋį0ÍŨ„šô_Ãņtė+ˆPžVzÍß'ÕAā1oŒmi›l„I[EiîčÆB¯l%XģõؘÕ핺Vq`\Tū)u <:i‚>zbîĨĸBsÛE¸Į¯š^ŦDís/xÔđĐÖs’;nŌB‰ž[\n™™ûQŨ“™›Đ‚€GéŌŊ•$wô™ąŊâDR÷/ îqüŖ’RWĻ—<ōš+›dŠ%’ŗ47Žl( kËū}Šqųkq{<ļÁžN˛t pT<1p_Š{cŊÆ Ŋi×-lhB;d&\CŒz†[–t[Š-߀‰!É Ŋėę6u>)ą6⛮˜‘ĐI‹ÛĶŧavD:ÅVHƚHĸĘŧéúĐV““T…‰DTŠč.‹&ŗŲ—âNT"X“´Ģ|’0ÃPÛ]Ú7)Š2-ĸŸ¤äJĘL´[šĶ͎-Āũ>~™Ž1ø­ ”?)‹^”bĨ•h˛ˇ3Õ¯n>vv!4­Ú'|ü,ŠPÂ+ŗƒĘMÉm˛‰wë/UĒĶQr>æw!¨zy§ņdÅ ķlV0ķ2œ­ÜIOUX-x‚ˇ‰G|ĻF›‚OŽ…*—Ęŗw$c)n4bqœ‡˙œxÄK¯6KŪ:žR3” BcnåN5—ØoAî­žÚ>Ȳ=å ėRz3Ęßhh8É™'Éîŗžá#åėšcw%äaʏ„tî°j¤7Ė3yĖwā–Ā yÚũ‰'B&BHÜ[Ē´Nĸ’+ļwW‚ §Ī0 8‰ĩˆ)n<–ĐĩzNS‚b#œĐĶAgĸėʅ Ņ0 e–āŽšŦDfę,û|3w˙ ŽíAĘ0S'ĻĻܑ‰ŋŠc´Ŗ ;pôfĨNIÄ6rDę)î:āK¤`T‚Ü‘;3‡ī$J1Ŧ]2N=ÁՌŠNÁ¨āūõ.Ü0A¯mÂDmĩQģRÜÁoruņ8-‘čĪxōäD*öRë§ÔŒČš;Œ0ŅĖOģ—ø.ÜÂēĄJ´ôakMhaš{K‹å%#°Ûš' N(”0ųíÜ჉–ėĘ­4F5ĻįÂäļú‡šSÍå¤vån+4ÃR %,Ū¸¸iî¨b¤öœqķĮÎÜ5j¨Ô`iXæ5?o-ÉƗjæ§zĩ;7ŠvJĄ„ōcŋŖœ&äÜĄâ§Ës60€ûũ"i‚Ÿœ˛PÂæÂ¨áĄč–šÃ+Ņ\ÎŲkˆžČgčĐjΊîH˜žūŲí 7_ūm/Oĸ‹{vÉo‘7u=&J”oø˜ėËfy˙NhØ$šųYėĖ]4÷՘T(Ą\ę|“wĨŨƘâ8ÍålĪ÷‡eT¤n”)ÆSkÍB= ŋŖģ+ŗ_í$wș‰š›ģ]šØĘ&yJÁ†í…áž)gy›¸Íüü.Aŋ 7nÁSŌ˜čˇ†—uū VÎÛ$Iî3ö…īÎąīĖ ›_aä|Û0ŸáÎJįL ¯%Ėg  Äîģ5V7(îkŊHXVAÆišiY9­ÁĻšC{ŒŽ=/ņŒ×ƒfžėĒ…zˇXäĻÅ+ /ņŒ7äzh"ŽP¯[îŠĶÜdu^|ˇ š–U¨ˆQnZƧ$šCí$9ų‹<㇠E6Đē}Qõ‹õ2”‹D3˙"sÕy E6ô؀Įņ#ÉĘEb)ķ‹mŒŖ­ąm|Ō6(SÃBr‡_K÷æ_æo`f9u7,q›s“ÍIss˙7mžŧĖ3ېéũtåËŌrOļÉšƒt3Ÿ^˜ˇ% •čôׇ-rhJsOŅÍüĒD7V˙Iōv‡KŽŌT×H3lâĻëüŠŒ‹ŗ¤Öú2ēvYonĄ¸yNŒB,Ŧ‡ĐXßl)ĩ#*häŠ0Íh{ 7Ũ˝8pœĘĨ:í5'›„ãÕŅÔkáĮ’ÜËę[¸ŪđhÅĶčuiq ‹|nÚĖÜ8­ZĀ6ėŲķzbˇ(ÕđŨZôĐķû;l¨nē؁=1ī5w÷†˛iŊh§Ä.ũßnæĻō"ŅW)=inaFŊ‡ōūēöž!Ū$¸CûÂ˙IpS†XčfōōQæāU† =p?šđ&h'ëPĀą+7%Ędo]'<*ę‹6r÷Šûȡ§ũ+ē6Č0Ÿ#æåŠ*X˛ˇŖŊü(î.osQâPfĪrqŽÃÅļˇFÎõå¨gĄ­s“ē•ėíāRäΚĸ+›Û ĸ/Å=kˇmZĒjõ%ĐkūgÜÅŌO*PT{Ŗ=~đ”ĨŌ{í}&Ū“$ˆĐ™SīÄęû­ÜšŦŊĖFŅ÷ã/ k”@{ULrMúW šƒvÛ˙ŒunJôČö ĩt{•wšĸĢžģ˙|„ÉžĮžhîËÉ 1Ũō•ßp›˛g‚@g{:ÍÆ§öu.Ģfd˙I–LũoÂ%]WQcˇŸũĢܔŠ"›K]á„ęq?5'šä?îoģķLŗŠ*““jx¤Ÿ˛¯ãcî”äĻ’Ö:ZŧîšMȇŧSęĐ&KVLjL,ĖĀŨ¸ŠĻŒ”ãåį5ŸpĪÉB(uhÉ6­xÁõ¸âX¨~]Č2Đ)8ūcÍ=ų•eËø, TÅÜPĒŌ{d•›’<Ēš4ÅÜGŒnīŦ¯Zv=ۄTŤ´VĐrø…ŧ7Õ\ī‚ĩĩŌ-āĻĸ‹šQ ā)î{Y§U´fĩĄP¨†ŪOČĻåekܔmW}ėē0 ũ‘ļ/–­ä=ĄP¨3hJ8ÔhcûGÜÁû„ØM֖~7{›R(”đwļKÁϝĩÆMÔAĸ™×ÎÎss"^" ŧe7ø2ĄP¨žąŸi_Ōö¯×¸ ĩJä ]Íķth ]ÄbfĘ đ+—V‹I9ŠŊŸ”ÉY…W4F˙ÕęÁÆ.—Œ!ÕĐSÜ)}â×kĒųkž.öĩÃ-ÄĮА4ęëč‰ä9×Aሊ-ēĸ×TĶK`ũW+füYđđÕĐûe,]ĒŨ ʆāŽUcgZī…-äZOQQÎcW%ší¨hÄ ëRKƒŋęsJû^inIŦĒ&4n p†°;Ö=aˆ“Ô•m(Bî!ÜđŖ9\ŧ#ĒŅÂÜvtÄíG(y!ˆZއ2ĐEz¯”wÉŦģoV§×‰ÔÍ~]ÄØUY\U­6Ž|Wü­ŲæŋÜ>dPÚņPaÁIîũQH­+Všc‘ŸZ?īth‹,žkTé˜-u;&Õŧˆ;ųi‘˜Ë-Û›KVŠЇĸךA’Rū ) /6$ČYo$ऀ›•hüŽŒâ a–¸Ã>FEį 9Œotž¤Ā^ŖJfDÃ@¨Ž đf#7QÉc%M ãlšø“ĖÛĪÃTīYĩSņ#ŅTė‹Tâ" †ņ…ŗtŖwˇÃҘt"N™ūCc)nWá ğëâÁÛ - €ēkë0øÜ Ąš‰Æ7â&[už‰åJøWČ ĀãB" ?yāļEÜ|ˇ¸Fr8|Úd¤‡ÂŊŊ;EWÁGŕ‚Č#ŋ¸]rZŽāŽûG<īáy¯˙ãÖĖĸŠánŦ„ˆēäsKį•ŨšŖKą*SSc¸ŨŊ;Œ=0ō-‚Û7ŒĨÃr&¯âKqÎÍG0[8§f2†vAŧ“h+>+w$ŠÎËŨÎj‘ez”(’7‚;XģáŅ27å5*ßH3ā=biûY/6…Žņ‚†*ŧŌ,p]ҏ ‹›ãx&˛2Đŗč4•îÖEMƒäQbÁÚ '—š ›!Š=>HeÂkröQŲQļ¨3Åj‰¸‰¨ĒāB|n*Ŋ€ÛŨ͜@"‘CŽ—ū°ĀÖ˜&DÉEę[o x"¯bĐÚ|ljųMo9’ABymįöU<ËP}ë= 5-õú/ÍbÜũfîØ BÔĒ…ę÷Œô•Mãk{Ŋ™M"äŽÍbÃ˙n™›h "ë'TßČ×W6Å)Į|˜õ[b ŠĀI;äŽ{Aˆ¸ÃĒHŗÜsĘĶŲ¨}Ļ­Ŧ••øv=` ÜÁƒÄ€_$ˇA.iŧ‰{–âIĀátwøoÔÎÆ†U€JÃˆ× ÷ZL1ˇ‡žkŪŽļ›7yą¯pérĩĘ=Æ8f1EČŊÖ-Žtõë9ĻøÃ“3„5ŸĒ+fdGRs ģĻb‰"î^F–V¸ëQˀáūøčHڔ(Bõ=ņ ˛1ˇ/ōđaŒæ^ë^FZē™ĐÜyÁ°ÄĖ"‰Ų'3úŒBëú§¸‡MÜąf’<¸”ļ™áCî’ēlVhڅšŠûJ]ŠŽ˜Rķ¸ ’;Ũ°Ļ¸ƒÚeæpc͉å6;ū­€+î;u=>u[ČĀÉzéŋJ uGyîBā÷pÂJ;L_3mø ˙ K“0ŦüĒǏíN¯€ÛĮ",†H} Ô+~†čûĄdeƒÄF(§-C†ĶKaÃŗ‰ģ$õ÷*w¤Ģ‚ų‰L?ÜeÃíĄcēÍą 7ÎyqQŲä="šjvČÅĒ~vnā‡ņ¸å})¸ņõcö§O3ĮŽZد/8÷`d;tčˆÁīpüļDJq_všģ×Ŋ9mĒ3ÜQdmĩä“ĩp§;Đ&„-Q €P‚eŽÜ—Ā :¤å¨e=MöØÅŒęøšú‚ÄčųyŸ›č‡-‘˙ˆŽ–ĸWŠ6ĩ0Vĸš~0¯TŪY“ŖēŒĸ›9ŸōŅ,( šëô[BŨåį™Ž–ŒwĮ<,}Ģķ ģęŅiZ1Q‡hž#nûįŽÜaQú¤Äö{PwâÍyŪąLsĢ&ßR˛1mĀęäsûÅ9ŋ°Č QKäë…ö–ŋļė,‡ãÆ@ßBû“™›vVčqd{sGíjČŊœEMĨúņĘŌl€;nY7jÔ5vĻĶtÕBĄ‹ ŲCqGEëëV̍[Ø ķ&ûŸrŠė§Ėyn;ŗ,sT(w”žŸOiî`€ŋޏCā/ĘÎā%'ŠûŦ€Nƒ;ëĢŠĻe2Į:6˜ĢåëÎo-pĮå艨Rz’+n vVž˙ L•ą?zŖšëi^_’ &a€į‰_ˇ¯‰âzĸ°|n/?TĸĢ”95œŋaėÚBõėGÖ OŦęĢÕ`†ąŽ;r§įåŋęCˆz(›ûķ3gF§g—h†{ŗ dƒšĘ=KeĀíׂģōû))éUĸUˇgWÎDāĀî&îi^ËcŠ#ėŠĮį€Û˙<ë7„°dũƒuÔ5.Õ¸r¨^ŗUÁ~Ns=ûJ™abƒp/î¸Ũ kĒ—˙0”b¸‡ĖyW5ĖBŲn]ס„!{ îPxųČ}͆üƒs—S™ŗQøÄ]ÄĮÅÜmâ—ĪDŽŊĮī};p‹ëĖ?ÜĢw+æ r›0d÷â&&°—~C^"÷ė,qÃ2[…­BipåAØ`‚š;Õ<Ĩ¸Ŋ„@vApēķhinĢÂ0q_+ŅiîÚKaúĩÄŊZM‚ ]Ãw]Iq“ž`—E,vņ¸žĪ=˙ōšû5î `=šÂ‘YÍ:i…įĖ'[›]Į†ę‰h0öá^]Äę}ŽLƒ§ŗŽˆŌ?Ŋj!ģ-ãæ`­ĄKrûænÄ*īy´=`ō˛sͯšO´ŠAKKWA"Ļ_>w°×;æ$Į{Up“Nį¤Ųšn“`đëÜūL䥸Ŋį1'Á_ˆ ht’f9E4YĸséĒ1{qGé‡_âĨŖ%W÷qâ 2ŊEkV„kņi"a.Ÿ€›§ᕠ¯^1›tž†ÚõĻVâ"”°üĒ1)ĸÃq› *bjCgš"DäčŽ(EŋDæû>ˇ_Oâņ˙0^×<1 ¤Œ8ôp„ˇŧūp1Jq/n7➯oIqÃēj|ۛX Ú_bļĪ=ũ ¸Ģô/ꊛŦąô’ÜÖSĩ7‘4ėkŦOpŖfeÜžšÅlōŅŲ`<ŧņ\ʙ5ŗžvHb-˙Üq+^qĢ•‘[‡[īo˜^Ä:ˆ ÂĪÆŊŠŠŖķÆŅ685H˜e˛^!IĖsÂŌ ¸ëô/Dņzf˜ÕŠÔÛmÜFwĢšŨCQŒšŊ+)nŋû[g!ˇSŒúžcžöeØĀ'!ÄīfGČOô„;˜Ü‰ŌĖĪŲOeö™ŋ/C|Ĩ×8‰¸1@ˆ;<Û¸Įô/"Z7U#3Ķ%•Ũ_Ágģc{Ąš+į-'"đĘÜžîÆŖ[ĘĻIč+/›{ĀŽšEnW‡ {-ĢÜ~3°Rh~ΙĻčņį4@8ŅBļPņ}!îÚųģōn5ķúLikfŪÆ |!Fü/Ų;ʝšū{t÷ž#(ß6ī¸hoeĶŽÜ’Ī(–J5ņŸŗģ˜WÛ? ÜJâryĪplâöëŨ*ˇ›¨˙ę|ÉĀgįš¨aâŌ +Â$ĸS܉;?ušŊ‡Ũ-ŌĩYČŽÂûö˛Ū/?F‚ģvmᎍœPk9ŦÁ„‰ŋp:ĄÅ-n¸%Ķ Ú&;Ņ8Mąk×ÜuļŪÃĶ ÆĘ˛šđą;FM‚Š(ų„ƒpûąēøŸ4‰IķĮņ§iŅßø$ŽJ˙Ų@0‚ĸhîa7n7ŊÜŧĄ„ą_ fY˙đ_ˇĐ°{īyXD‡gî8Ž€ÛyĀkv`:ö”&ÉŪCZvĨĪ#t÷]n™Ž’äŽIîDį‚ŽÃ+o¯Ųođ¨ŋú×,{nģ[¯^øÜkeYÅĒ4në|n›äˇŒ¸ƒY@WlÜô`Q#oGvÃ.OoΎôbĶ­Āīs†ŦÖšũ™tš;1¨5qû?ė÷{ö…ŌE-lž`âęu>›rI}đ:7}ŽģßxÄ#”ˇģļÛ}SUËžhqãÖ=ŧŅÃŪĻEnˇb Ņ”éîÜąrĶoâĐŊâūJqįâAˇAvŊb>˛ąÍîpũ,TË.oģ Øņ/îM›o*ĻŪũāHU+}ÉĀíčWbUķĄËÚÛ[öš™ŊŠøÕ2wÔÁÜÄÍŨgâžG–üéjČļʞĩˇ7â ŊōkÉ6ŽyÛm0ƒĄģŊ¸ƒáīˆ;]÷] ÉT'R)“ÛšmOĶøĀûˆ$žxŒ>c ˇpĮ}TŸÛÍ5GÔU͍4œ_ĶąŋĶö¯0ĐēsßNĸ!÷rĸ“$īžėāä„Ûr3(ŠFqË3–ĩ}ŅÔØĘ7œ||Ņ‹}ÄŨoácÚ6ˇv9¯Y%Ū˛;äūÜh~ÛĩąßžX…ĮHíÅíÅąĘ=k¯ĸPšģ{uwV<ũԗĀͧ2#,rzÉ}n‚×ŅÜžUíĐÕ)ÍŨ– /;vĪîĒ÷cÍ´´kc?ø ÖۊōŨ;Ø5§č~‘’‰'h|îMË~Ÿé~˛uĒųĮŅȀ;6.Îí$îfŊƒÜÕ^ FŊ2 ‡œE)ΐėâŠ÷@s×É(î™ÃI Ä!G|ģfZŊÅŪņŅuĒé|įǟ]oŽ`Ēbģpq:ÜnÖįØTnáPžS,Hذ˛GÜ^ąĶÜ~ŋ`ÛųJ÷ 9ĢßãD <¤=Î9'‘;CÉi%u0î´kYįOĨN47NüéY)‰į\XG˙øŲ 7í'ĮįŽēéƒeœ?Uŗˆgí<rš•ęĘöĢią=ntÚŠ Ž;ãŪ/ûôK¸É?UÍĖG3] ŪUˆ¯!ÎD8 Ŋ_Ŧ7 åsÔ#s >wCũ jPŋNķŽåø§'Õ´"Äéž4w4qn/7A=šæÖ€-ūÛcļŖ"ėRseėåÜūā˙ÜķŖĐoGnëzĢ…Ą5ŠÅEĪJ KÜcÄí[ZëÜk_>’ę”rOxxÚ pã Ō*š'rų×*/UkeíÂä Šƒ!O;äž&aņˇė3f!ƒ,uTę*wåū˛…ŧ?ˇ“ÉŽŌîaž„Œīsf—āšÜõč†heˇoÂŦq;ÍßĖ :ŖģįŽ§-˜%^3Ķ?šg Ú5ní>ˇä͟ËĀí8ŦPÚNb§monkeyÜūĻ­¨đWq8÷]îQsģûIffNt7¸6ßy™äö-ō}¸ũ({*Ë´ ŗ‹Ęq5“ķ ė? IîhīߖųūÜN|ŗVÃ|”ŦvŨUáė˙ĄˇĩåęŖ,רˇōrn¸Ę厧‹r'Ÿƒįø"Ũđ`Ö;Ü~:ûpĶ]~úļ+wsë§É2íŖe°)‰žĐŸĐ VŅ9Ųđt‰0Uŋ<(îā$$īųeî9UŽÜzÔØé V`ô9ū€ŧv,1_oE?ūw­sËnG?ÍZcz”~ūr† ]^gĶãûrÛÛáž+ŦYĸĄ_įÛB57y_™žCíŠÖgį&ŧК0W2“8ØũaNQĀáŠųPëĪÂũIķÛAv„ÜËš“3ŋgž'ĘŠ^‚†Á@ZŒ`„Ķ1“Ÿ'wAĀMŧgÕ2š°…ģ ˇūYSÃSxxž%s{ɒÜūڗ19ÅĒákÉTsÚ¯ƒģÉÚa%ģ(î~™;Ų@ĖīŲE›íĀmWAÂč„8¯´9…Î|Cv'n+ūûs?7Œ™§‡Œ3Yvŧ×éĀāō7Í)œâ„žE"ų2wõRî9›f“‹Æ{ œzw¯§‹ķąŊœ6æ*#Ũíj,sģr×!ˇŖÃ=Ũ0Z§D€[uŠ/™I†]”Ļƒeõų¸Ŗ ˆqæžeÕpck ÜÍ´ü›Õ͍]Ē .ķœŌ÷-’ķ‚ä&5eŠ{V_ŗDéVP¨ ėŽxTāoņNS=‚ōÆ;]Āí%ôŲšįčæ6D7—zFd`EޏõF Õ_†ÆL\Ũæŧîs/›ĄÂå–+ܕ÷“Ę0-;YIđU^°ėYs+RÂÁ™5gČŋ÷7áÖÍĨ g,;bšá–šŪÆ[Ųf›&đ™q{íéîđũ¤OŽY!čŦ1"ĒJ_Ī:e“į6ŧâTëTŧ&xíŌ:÷ŋڝ{˜Ôŗáf÷Å'ŨŦ 3rV=ŗî—㋚ŖŽ^˛<įEÂ:M%p÷å´r°††qNbŽŪĸ˜đ™š{Нi% K XϏ ‡*U){‚;Đ|ËÜöaÛ‹ æŽ×¸uhĒøYŽÜĨ>ņUõ;›GôhÉGuí˛`‹§ģf|ž%؉ûųeÜ}‚ÛŽEiÄĻZ˙?*Ú˲5Üŧ­œ~cîjœĨŨ,´ŌAõ1!mõOW zI„à ˇ—đKšyôrsp`îÃMĨ'0,’üōDÂÜũĩĘí=]˜Iû—nQtĒū)v-×ë!‹‰{úĩ3w{xîzNÕ?$R”Âp÷Õd†9-Ā 75Íįr“W;r›_žĢᎰŪb[VÚTRܑa´÷„CsΎ§ŋĐB5ŋüSėdŪnļ÷°ÆíÉÉ F^˜M­4voÕ!ŧ‡{}ɐƒ/VÛ­sVīųÛÎÜËųp[ÚŲ Î/ČnČtÚ¯`õĩŪūl¸Ÿ`§›3cīŒ:|)îŠūpk`¯Ų™~ęa}‰;=Ôß&ŋ-ĸĮíŋk˛NQ w™äŽ:ˆkÜ^[ácŽ ųmšņŗ•]Ī‹ S؍~žržYáö.NNj÷umčÛ¨—,Xá=aENvãö0ĮtīuâxšŖ ūŲuœęÁíår~›×ˇs§<ÍûÜĪ4w‰Ŗ‹0’œûåŗ3wsûōŊÂmSŸšķ&ôË.KŊš­nX9}ņÁōû€Üܡ×;5DÍXõ™šW†ģn/=míEĮPå’ÕũØ=¸ã=ŗŽôGÖĖøbOpįä˃âæJDŽ˛ļžžŽųM¸'{Ãáũ˛™ŧ|ÜĨ¨%ߑ{<¤œĖŖĀˇQÜŅM&¯VIQ­rG_ ŋM™f ąũfÜËėÆžä“núcez+äļR˙ŒÁCūDw´c›\ ž¸0΁Mũ=§ YÆV(äϚúM›šũžęÎÜõ2wīpĮk…Đm•:´Üá˛ņߒÛôacîLīž÷$ˇ?A˙…¸-ŖËU-Q ۗ‚Íãk_ˆÛ×m;sˇČŨ˛jøÂÜĢų͸ģ Lpā._ČŨíĘŊšßĀ-ábąĢĀ´í‹–ĶÍ?nDÆ(n-i_ü2ŧ”{UN<Ėņ…Ü’ƒ×ßîüö0Į4ˇM‘ņbŽä°¤ĘmRŨV¸Ŋ Fö厍 DÆ(î˛ĶÜ}=ÆÜ~ķ)J~?7“M‚ܲܝ{-ŋ}ģĘÃˇrW͟^PÜ9r‹bæŽâČ ėĖŊ_~ÛˇšKrãČ=îqؙûķČÉ6îGÄ đ/ōgœßÕ„AoJĪÁՒ}aæöõÉâūgÛ¸ąyĪaĄfœßÂ{öŗrĪYäeŸŽ5v’ S$đ,$gšĄ:īŲhøoĖ]Ãŗōû7áŽÜų šEéWˆ?nũĐôîŧe.7›ŠEFpûúäĪ€{^Ļšŗá-̧†jâ~Y~‡įn§&8Įŗl˛žąęÉ}áÜ”oûh3Ŏ›ÆGépī™ßuČ}ˆüÖoM2V4Oé]uŨËšĢûpųmrQYn”™ĪÂíįw44™âöÔąđš i)3tŠō8°ËƒË÷gā.nØûō8ŠĢƒë˛˙ųBîžį–{@î~ŪHōį+'Ŋâ6ˇq)ÍŖ‹ņëī­Üí—á>t~Īģ‹ŋt~'"'ÚK‚;ëÄ-#î5ũŊ;ˇŌ'įfHâQ~ļüū ÜEgšŠüæšŊĐįąĢ|ûd`íÕwĩ‘ûŗč“ČīŠ%dėžîΧOhë¸Q6‰ēĘ0ų?[nˇŸ6°Jä÷ķa¸ëqĮã'wĪ*YZ¸éöã^Š—÷q¸ņ4‡ģ}¨~{9ŲĀ[l…íŅ÷5rŋw_ø3äÆÅ`3wÃ.îĘũEŒ#GÜõ8ØU2J[2v̟]×üí¸%7/ˆŌ–pwŋ ˇw!Å]9Ü\ĩ5æ-gË:Âo:Îļģe#s¸Û<É}ĐüŽF?lâvįIģÎs“•Ā]‰/ÂíaF6Ėīvö˙ĩ÷.ŋ‘$[c_dg›IÁŗĩ -øøxSŸE3ĐÖ€—´Đ–ZšĖŦ†š14[- ˇ˙/´ņBĀd€Ú+ˇĩĶBĀ5ÜÚŨl āãÉÉtœˆ|ÄãD>‹=s‰{§Y••ņËxœxs"zĖ;îl*÷‘×ŋ}ûķmŦeĪŨ8æ ôąÉŧ2Ē}QČí&áŅö͆ëÉ4nÚs×ä"‰ōÆ.&.Iü—ÂÍŽhԘŊЉ~÷ÜÍV6ģēėšÅŧøPũž¸;=%ÚūĶi‡íHÜ{Éc!_rc\ĮĶgs¸ķŒÚX6p ‡sOã6˛÷pÛzJyĀģÃȀû SĒzŋ-w—¨—›…<¨?5S¸đāážĨ7ķ*ÜUį. Xûm)5RÜíŅÜ鑹õJ ›Ö¯öÃüŪā>šž’ŠĮ1•ģ­œ:wf'-o/ËßwÛBõcÕíšČŠgpU¯ˇK´Ëī¨OÃŅŖV7qZëÜŨ¯ĮĖīévÍßŋTîZãļíš Īir›=äo­Ōp¸§bû[nũچcsSũ›69LõčUĸļL“´6%ĒũÜĻsá671 ¯Č=;ŋÁŨTKņąĘâģ}Ōę!˜æŲ՘΄[ĻŽDƒ­°ŲØŲÉ[y{/Ež!7bŠs[ŠŊ\ã6ícŌoÍ-W…oۍ6õ數â21 ˆ]´äVRŅæîíFí÷DHgÛyÍâîžuÜ-ZC¤ÖšŽÖĻr[vuęĪz? ˇNe ›~č %Ŧg“IēÎNwįīž™r­Šw3^ŅjRũqkū8’6Fø§É}k`ÕĖŽĩ–[/ænŌ_ĪŨ~RŌ"‘Ÿĩæ!4‰Čz܉‘ßwķÍėč[ī3&wßįø+@¸J9âhŒÛtiĸswšĶq¯õką’[V‘æ.ĶßLã5GņuÜŨ-ŗü÷lJ:ˇéß§qVißŋˇëÅIq7ˆæģ]L†Û7Zč'á6fá#ūđŧūÂĸßÜt—å1¸‘úûīŽũų]ĄÜÍY6MÄę‹ĒQˇÃëp{ZŊÉŨbeTģTÖÛ*—Ûįąũy6ˇĪOĨå°ŠØšöxëôL6ëvl¤‚žw#æ˜vwŦâ~ĨüŽMF(š l}?ĒEÂ6^D’"ߎ͍øa5ü‚r-ŪÖ÷ãīŒÛlÍHP÷gÚÖõÜ ā_˙IŪ`|ĢmîvCt2ˇwVÚéLëšî]ÉædOÛ’DÆˇz wĒũîÚÚúf¯ÆĨÎ_o—|ÕžÂŪ€ėg¨Ũ%Ed|s.4í^į65&sw%ųí´­7é’ \ģû$o7žÕĮæîGũ{ãoRéũQíXEFĐMGû•ŖĩūzÃˇˇéįMLĒæ!ÜæŽĀ|˙Č šģ Œ!/:ë]ŗTÜ]"ũJô+s›Ģxũ¤.7>tÃļ)4 ę^ÛYîÚ{žuÜōųŪŦŋ‘āE+ÉU 2īVwéŽp7e1wŋē×-ˆ¨įÛįŠĻ~ļYĒô{î.‚ߊģ}L•w{›:g^tøĻ^R7ŠęšÍtG6hēÚ§qc7ŒswŲeÉ3ƒšûčģXúŪŲäž~ÃŦķĨúd­ķwē^7ošōPëæ{ĒĨ‹˜]wÁšĪmnkÕŗ}ŒĶ¯–ČęĀ#ãyŒÛÄLk3Œr›7Ėįn]ûĩRÜ´ŊO֐~eHß„ģ‹ž?ĪKŠßu ō´č~AB~ęgŠ=ˇY‹Ú 3š5§Qn%ēûŊ48Ą“&íŠpŨw¤ÃU+înÜĶp÷mNúVŲ÷ƒé^^ÍáŽFš5UĢv7[įęëL›=4'yu7÷ˇ™9´€›j7 Ü)›•…öžTTũá]Ķšõtpûēĩ~F§Ŧ=)3ö.j2ˇ‘î+r[{;ŨãI˙¯ņ”Õ3›ÕŅN;¯ŽĶéĪk7Ŗį¤ēA]î"ųíšk›;ąŸ”AíMu/ĩôüËQî9ŠģÜX1ŅtA%Ôå†öŧ9Cųv܏æ…ŗō"TÍĩĢü}bÕîãÆöû`q÷7÷ܒ…;3JDļĸ˛ÛŨ/@Õ§tîjV~cÜĒĻë{;Ũ/ęž~Œ‹— a&TOávÖģŧ㈞â7ÚėŦ í‰Ũ/ˇĶ¨ĖŨ‹'M(ĢXsj§Ũnu÷5¨Ė.ˇŠ&ŨD=Āí$îãî“jõ2´›­nm+˛6­ŧĨ2¸Ņ;ú`r÷ÉõīÛä|á”ĻŠĸēæÎõá:ʍß҇qîæwF(8AĪŗ¸dWs›š¨oh}rJŗeŦ­eõą›Â1ÍË=.zŲĐ´!G 4ģ°ÚY}ėæg$Ų6Õn§ĸ™#5ģ—TœË­gÛčģKMZ™NídŋwĶ2ĢaļŠhg˙bOCŋ(ˇ!)]noÆh[*ÚÂęé[Ķwķŋ nm Ÿ6ąĻú­Ũ–qß]ĸ­ZF›XŠNā6ĀF:\ŊikáębŋYŦBģéĐgŒ&üŧÍŊá˜Ëí p,ĨIā´ũÔ ēĖl*Mök›—™Ž3ėGÕŋWpkåĄ­)ˇ*IFĪĶęFhå^øUcÜčėqˇŲąiņik!MŽrC‚ˇš¯-tôIÛXåîį´ûØÔāŠhO—ŨQôØZĻÕūåĻ ÜfEpšSĪīZm_=ĶdS§Y mjpãĢ ÜΠÎâFŗŦ•ĐúÎN÷ŊøŽĐ—–ÚŠšŋģī>õ5 DũíÕ ę˛Û2î„đJæ28ŋˇ¯>‡Ûj2hĶjGNé"fŊæOw›VB&×"nŗŒ\îÄøĒIŸūÖn9kiÅ4Īi žZá[äw‘ߊ~‹ŗPgqk)ô¯Đ-"wŠŦÛęÖ˜5n8ˇÖnŗ;1øš{Úu‰eŗÅ]ö[ŨëŠÆšß۔æpsj|Õj•ö ]|šTáĨˆ6áåöļö6ÕD˙v îūn­‚u2Ŗ$MčjĩļaĨ=;Æm–ÎmÜâlqj|ÅĶî‘[îÄũÉxĀLdDLČo§e[=›^ÖÚGÚũnéû´k?VÜV2N/kiÜ>×ZíŊ^nm‡\Ģę™ŨúžO†~„ārP8wĸßâr[#ˇūnNû}ūJEĨū5ô}6íĖf„ŒæRũ['SũÜîHÁŒS‡íé*c@ĨĪ{ô}MíŽĪm<āÆŠÁęo„îĻÉø´—Ã_ĄÆf‡S¸Š˙Úá.qt7 ‚ļJëįvgãøāÃāæTŋÅåö&Ą˙‚,"Ģ ‰“ åãÆ{s¸í"ÕRÔ*5ē›VwKÉ6Ím @˜ÍíŦ pk ە˛SŌ˛2øU¸­>XԄ0ļ+%ŖĶn×ĸļ¸Mwo%fp›¯ImkÄĸW괏Ú#Pt‹5­/ą\ޏG%à œģœĮ­}ÕG6†éĨv™jˇ§ŨGNģ\n|qd€ÛŠąvēd-FũíEä&čK†ZŲ[ŽiF2kwîũǧŽmsû˜,PgŲĮlTî‘ 5?ˇ^K9Ú0Ģ~nWøÜŊ5ĄÎ=ļhEĒ}Õ߸DĻą”¯}öĮéŪ;érÍHĩ25J Ų.mC‹MOĮæv|îžĪdHÃŦÚ%pŗ–Žŋî5a ÷ȏŨ†´¯zíĩwwT:i˙Eo –lu¸­ÍācpsÚÖEdTpcĮGĐâv&ĩV››ĀŠk|Փ×G¯%ĻĄG­KMKø8‹Ya6ūnĢ3Ķ Ä¨úz]n/酧÷ŽVršÍ>Ĩ}rˇÉcpk(fæ6Éŋ§}"cÜÖØŖ%0šÍBs¸­¯ŋ˜Ņ]3§‚›U^k væ¸o<Ÿ{$#¯Œaw÷į¸´dlhcÜmÄ&ˇYJnūD %d{ûŌē ŋī@67PũÛ2n;V=ߌ›3KJ”FK-įpsũÉž•žŠW#KŒvŦÚkZ‡āX%7RŅ‹ÍÄ:÷ˆ,5o7÷öí}nŧĶĢ.;![˙æá6{Y‡ÛŽ9úíæ+›…\(Ô¸=kQCÜNŸks띍šĮÂLymĒGč˛ŪĒŲ.ÄmÕx=Qsíœë5Ŗ"f3Õ_Ņ2öáÔNŌZkmoˇ¸XÜ1ĨUsô8ĩÍš! ļ¨‚^ĨŦ4¸Kí]Û6šÍRsĮđV čܖõKŽmĐKēčšoMĩŨiąg/aÛøf<ϧÚgkąļĪpfUCd” q$n-më—n?Š̚wZOqwÅcqšÜÖŊąvŦŲ؁Mķ—Á§œ$ÍŦōp›¯ëŽeXŅũÕĩËMõĮę­ôR˛{˛1îŽZ rߐ+ælØJ’ĩû€ļŌŠŪíØ#5W„Ŋˇ‘ĮļõKÕbÛ]‰^íūqŒģKĐâĻú7n|sˇfņ‰ų4H,ģNÂNÂZ˜W<Üf4v¤îcī.ˇ˜ū ЇŦ_Į¸ģŠšŽ[/DÄ|‘ģˁ ’]ņ–ryæîY8Õ1Õ~ķėØÁhĖvårã0§ę͏’ˇ¯čÉâæ‹n0Dˆ-÷rxÔsÄ­QĖŪ Wë=VK~¸ĶßŌČJnĒ}ą†Hž` ­g\nŸ÷@‹ÛsWwÅ*GŖ^yėĪí`ÜfĩÃ1îr!ˇ]˙ nkî FÛzų#%ėãöútôĨŖßÛŸ;Aožƒå§îđÔÜ!n¤uÛåĒßa5đ`<°oø+ü'ˇˆá‰}ō‚H¸lw¸­ni,ˆ’ß$^#¸méŊėAžH¸={ ˇ“Ā<3 "VYU*(ę—yéÄÜÛŪv˛_ˆ O,ƒÉŨ\r¸Į܋ĸ h‚ž•Š[ŗ­`N–6Ķ\nķ^d°ƒpOPĀ3Ō’‘Õ*n˛@yš­{n¤ƒĀá@@@:]Ģė‡š­ŊŅԉ ŽLŌDփ[@Ø`ÁšĻAēSš]ÕG,…šŲĮgÖ 7ƒÜ~įŸ]pš}>đ|šž˜…=‹™8 -hŽ DĘ; ŅZŒ‡;&sS7:¤åčų؃˜õ)d/äåļhR$ēÔŊ„Ü6vŒ O°1õdn,’) C‘÷H7oĪŊ$ws›Ģ`6Œ›ŋĪ(“æ÷Î\WGãÆāH‘ŽkôŽŨT>ûä=Y7 ŗpPnlŨIÖ0q4v{-‡j_\n+$ LdÍ(Øx)û=‰Qn¤GÁēļYŅ2Äēy{5Ņs¸­Š† d1î &}@ […°OҟåÆę6š!P°Æ€uķÖPÉsš-AŠ dąē8G `ʑX›áÔ$IĶŗšSûÜ`q†@ÁĘëæí)Œž‚ËmŨ ĀņwĄî5OĀ”ąnŪĘAŖÆŽs'ö xß6¨đhėądVqcp¤ŖGz&ëąŦ°ŠÚh.ˇí šēb…:ŊaĸwbMÆĒŽëš‘ũŒžÕĩFÄ­ŊÄj¨ËmOFô¤všĐ5ū.3šą,ęęd‚1`ƒƒ•ÆmđƸM(l@ˆĻ2šabƒæ„50@\îjœĩđwGŃ}æĄzKŚyÍãÆ˛h+By`Ÿ1Š.bug¨Ą!BɊ×uļāņL0ąaĸz‘¨d]Į d='ĖOë1QEkŦ'ŗOH€¯e÷ŖËmUŒKĻf“­pÅv,#ė?H“§Íˇqnl ‹ēhá“*8náƒUŽjēđWCûĢã „ÛrčĀ wåƒW=xŦMĐčįëzn4ƒ&TpņZ|Ö¸4PÍā;õáu9_{*ä„ n;boö6öx:”9Ú^]ȍw<>Ŧ>qŸírŅ6Ø eĒíNÂ=z¤BíëxDOŅëmpĩ×UlØëÚ}EĀMÛŲÉnl`åqA46DÉ=ĄEęr$*ü܎…–.9PĶũgŧzĄĩŽSķk,õŗYĶ‹NāÆV>_lų $Ä-M<­Üîū÷a€Û€#[ô^Í û3äž_QŠjöC%÷~7–˜g_¤Ëĸĩ§Ûą‡wTęR†ŦM‰&5žrŠÅę‘Ô>4•–įĨĐJgO(,œ‹ŠŌÆ5ú§HŦ>66PQrŸ´Áõ=͋ũ‚›4Ë ˇUBčĀʧqÂ*ŠGuĶŖMaOs;ŨņŧS¸1¯Æ‰^ÉgQŠÆeuwũEÜé6ŖÜÔøŠŦŧ'ŪĘ ~ņ´ ŧėė^$•Ümģ¸íÅ#|žâbƒŅ¤ä}ÍÛ.ŋzõ8ę‰Ü>Õ;ĖæEˍ¤ų+›8yyõ5kwuXų7ļsOËĖŧƒ\4*ģUÁKķūF”Ûz[}õ{Cæ¸įū‹yĀŨ*#×8÷øáĩoæWųÎüC.ô…ėY—õ4ĘmŨƒŦ<3‡Z ˇûĒ}í[Zl ÷øáõ Ę –ᙀĮdÕCģ ÜVDčĀjĀyiîVå5†Qß#ē j!qŠEė@q7õj>ÔąIV⛷Ú=3™Ļ]™˜áCË#pŖĢ!/Îܲ5â#ž&"Š^5ŋ:Ž!1nëܑēW€×Ō&M{jÉĀŧīy­ÎÎnc8wj|ÅtŸ†¸2ōę‰ĪfĒũ9ÅŽÚ“\+”{üôzH€×ĩ2§kîķXÖĩYŽÉâIÜčeđ<u†Íū}k4•úoÅŎ=xļw™pnj~Gš‡užus@Ÿ­— ¸øļ۔-ŊPnģņĸ”M0Ļa.áâ{lLŠrÛa[cÆ/U=ŧ؉‹oNÍ1Ĩ­QÕŌ˛Å>ŧÍÍЉP*v,IĢčĐĘčšMŽmjâũŽ•UŽ(žÆMą¨Ą ˙ßû‘:R{›ˇÕOãvŽ;ĄXÔSfžņ°Õ¤œ.WŸŗéøŽČLŖ0n1…:Š'vĮî9Ōm|D8|“=KđĘnHĖ ÎhG4i6íéčįšCOÁē<•ÛéØqîų~!ėā1sVĄ`9Û¤Ũ›<ÜöЉ§Ã\+P|6?N5…ī?–÷ũkúÆŋÔúîá^9˛ōŲX9ķøūE8OˇûÎnl܅ßkÛâŦũ>ZO†ĪĨëÃL˙ VđÚÚÕq—‚sŸīÖ‡ąƒ™†ƒOœ8ÃŖÉÜÎJ§Ã\'P|o=áü=ˇ}§§Ãœë°Å >gÎæđdn§^ā3úYfÜnđĩę Ra*ˇ§Ãœį_Á>U,ģ—C¤°ÛŽĪžs•@ņŠ“ įīMæöé<‡-ŽW'.ą§“Ķĩëŗ¯Ãœį°ÅÂņ••3ĒŖÎ->ng_ŲW'›qģÁëâĀ.lĖ5áDn_‡šĻ§÷ÕãŗÄšeęØ×aÎņ¯`˙ŅHNį‘j_”ÉĢÛŠĪ>îå=ŊאÚéfŒzŖL^'s{:úÉfÜnđMÜļd0˛&Ų‰Īú:Ėå=Ŋˇ† •uҍ‡Læöu˜Ca īƒvÛŌek”Ļ%Ŋæō†é• ļ¸Öë{̌ííīėĘįŨ÷VĶ‘āoļØĶËž5´™Ėí]{]ÚĶû­zmMŊžˇ}Ŧ7U[~x—JĒ…=Ļŋ~ŲIcc ?wj~÷v˜KĻß-ƒSEŠ{—Û‘{Ūjŧ°az‹É=@ šĶËíČ=_Įŗ°aú›ĨS#…ÖQ]iH~nj]đęÃ.ë1ÎãCēŧŠ–A}ĻUH/ˇSŠŧú°ËĻŋvaĮՖ´ ÷ēʓ—ÛiÄ~}؉ŽOĻ>äã&äŠŋæįļãõv˜Ÿ˜a œ–Ā찌„ĪũÔ\ķr;ßLmš_; 8Ką+$Čvîœ\ļĩËËíjy Öt¤? ”ÖsäˇßžģšÛŽØßņøŽô‡Ÿ#6ČÅ  ŖŒÜœŒqģũĖ€!ÆüžĮ˙ĒN†AK“ĐqFŽßŽr;ũŒˇã™āÂUËév a1@ŋ?įNĮ.ô1ĪŽāMd9š 'įdGFšŠßc~ĪãqÁßĀÍĪÉõBŗûqîŅQĩ0ģįĐöuör„SrMãvģõKš=ΐ?'{ āš@ޞ$+ph›LsšĨÅ=pŋSĄ] nįiVsģĒ~îrĻ¨Ūˆ<€čĶŸęŦŠėĐUpΞšéˇ| =8@pĄL>W)¨iĐĪęĸŸ{ü@T- ûŗpĸ¨Ūn? Z„OŨU?ˇ›ŊūŽgĻĒŪNˇƒ펓Ŋ€ķ*øPé8ÕoVĢ÷€āŦ >čŨőļ¸āvĒ…æ0¯‚ķĄÂqÄ7Ūm q§“bh~›QÁ‡|v¸…ŠįÖˇК㜠ž •“*>ŧāvuŇęđ˜ë*=ÉAŸ4öŧU p;4¨ī=æēJ‹whôč**xt渝’*ßÁÆf‚ĖŗÆÄĨīˇ;āâĨ&JBäTfĮ‰ÅŖ ãįvūŸ, ‡ Æmû>ĪdŪ(ÜvȄ{¸ÚjÁįÄljÅ~)Ÿ*ô@.9o:hš8âãŦ CžĸŦņą!nį§a=õAąÜĮ1l9ĩĶâv:úaĩR6ŠĸøũÉāČwúĸūâļã6ØAÎjĮĀKÅßF/ ˛E“˜?W| ׄa$ŧNŦTpŎQáŖŽaˆÛƒ|REŠ&Žų”1Ú eÚ, qO:‰[ *J5čēk…f7ßųävÄŪ ōqÖ§;üjŽŋ)Xë!cˆ9Ņzx ÂÆũ°ŽT%7cLž||ũ{#†FåXËôû:k‚Ŗ l‰°nĘ1{Ė.€ŒeįX p^Ë>‹Ŧ-Đ!näėī‘ÉÁXõ{/W|ûrjP›Áũm¤xĘŠPŒÖ#'_|5sÛ×Ã\î ü:ę,ÂߋôD]q=,ĀŊĮÉė{Ü#ÁHũšŊĐÄ0“{D€g鈗ß2ÁŠ\G.};Ėäv)ũ›¯í#ū /ÆZ%fī&ŗNˆĪ(ú,FĀßMáv+×čÁš•?SÉø¸Ëĩ/‘ JÔž“pžwîŽĻpģÕmÜôÜņqÖE6ėžHˇŦ$^ņž€÷-YÆ=nz^züų ē–kīqŸ”W؎HfB>LâF„ū˜ ”Žžj0î1ßęMréën27ōūc‚Pf8RSø„ėFĘWå\&ŊaņÉÜH­„2g‘ŽvBíFÄ zBîEíã'„°iÜn­sĸT×Ļ_6ĸ ÂÄ/w )ß îË0XĖ=Åd>wĀŗIŲTÂĻģ øŲ›°¸ŽönˇŅ ×Ęv[•: SÁmǞˆ_DģŽCvEŽyĢGĶ Ō”7ŧū‘„q̌c߯ģ§1Û6DÃÜHm„ĩĒ)mįŖņڀ”ĨšiąŖ´ā´.Z—ŊÃÜHm„ˆ&-"Öám.÷uŨæUrģéM„ĩ’)Z˜ļ‡‚”Ž÷Áan¤ä&B|>6֚r#ĪŽÛûfc#ŖAŋôŅ–wî;„ŧŸæČ¯ n“ŌYœÕgDBnŸNß˙FĠߏÃ7"=& Â%aVcáF¤Į4A¸ B×k4´€{š \§$ū<áF ę^ŲЀ8ņ×Én¤ėĻ ÂŲqē0°š:Ė´•㸧tfņëOj„ƒ\ Ĩ>% Ã@q#?Å=Ĩúחļ“ä˜uRxĢ(áiī]ë*û§1n¤EOYÍ ˆu—R{*IƸ úJņ4Ņuķš1“û×(HėēK×Aķ7R)Ö{eÃkˇwéö÷cÜØēÃj¯lhBH)v{—ŽĪQn¤2ŋĘČ sŅąÍįÆ*ķQüŨNˆ´īvæscÕîUFVˆ8éģWoÔĒŠĖ¯"P°5Ü.r—aŒéÕ_C `ƧJ–ŽúnŦž‚@Áĉę;ĀsŸĢ1?ʍMo^a„‚‰%ĩp76y‚ųžiöëEÜXĮŗÎ+qĸÆtĐuK:ʍ-Ŋ‚@Á֙%šŦøûzšŸx-`sŽ5N”<Š 1Ē”ey‡ŨÂU{Û¸W ė†U^Ų°€‰UԜŠB~”ąs>;u¯] `-Fĩ,1„ũT…E×`á5IßGl:ųˇĮîé1qĸwX†°Ŋyī87&Ā>åÁĉ’ļ,Iĸ"díšô î9ŪG–ŦÁ¨ĘČn’˜…Ī-÷_M&ĀFĮ((…Ē ėšÆyø–‹™ųÖ‰#¯Ą ÎģTŪ°-ßdoßÉíyrA›ĮšŅNfĨ˙U;`Ū›Q'Û]^ÆYT’{K[ĒņšŠŨąĘÍŖ°lhō‹íÎ/cũ‹  ŗķ¸S÷Ú:˙ĢnIBYä˛ûˇÛKB.ƒ*ĖōÛģöÆ ÜX]>Ž@A›y#ō{˛{GČMXEûŒuĒŨĐÎņ¨==ę°˛‘ŋųƒTôIÂ*ƒCׯNāF7F°Žbq@ĮÅMvIî0{+…_æpŖë˜Gm˜¨ÃĘĻzæ5)Ht¨ÂšŌ§>Ų Ü¨ĒĖR¯lh@ ¯Šķ‚ģ$ņŌ$ãs=§~Ŗ›ÍĮl˜¨ÃĘvŅ “PŽũN~ã3ŌG—ŽŲĶŖÍ˛¯äõ#öĖ”|CØ0Ņ:זr^Īĩįî:ņ:P7;|=7*Ā—û_uZt­{Y΍ p¯sãŲ÷#Û&z¨æÚĪwā~¯ĩs]ß[Áë:N4oxWĐnä=ögxéa 7žĖs´†‰FÔÉŲGwīR2MāÆ×Öcĸ~.;Ž'wĐø}( đh=&ÚPēŲaÔk ū<7uT äX īyÛŲxŨĪ…öû$n|mąƒa3āõ­]ũČ)ë¯iŋOâöœœžĻíëō¤§Õw§&qãšGj˜¸Ęo[Äŧ>ô×Ōū÷IÜ>W5)vyfđ4“>îįîė›|íŸˇįČōŖ4LÜ3ž&z?uŸ ēļ;k“¸=úBGi˜øøLËŠÄ?ĘO cZÜiR¯GâŽôŦÅ=õĸAumj7ž¸ÄŠđaŽš˜Ú@$ÉgĖįkßūÂ?Ļvđ83%o3fæ„dĶ×cŨhē°ĀŠīMĩĖ„ŧū…ĮŒBļqJÂp.ˇoƒxåĐĘį:Ēi­`ü“ßFÍŖ’įoHxh‰LäöŨļŽ‚û\uĩb6å3ō†$û‹ķķsÁ=z>‰<’zįžęŨŠAB‚ŒœÁĻü9;'Ņžus8•Û#×IpŸĪÂļV’gdģÛâŋŗŗX3v›ĘíĶ8Y%Á}>"Û]R6ܗâŋrž€Û§ÂļfîāõD×n“’fäZĀûĩä÷oŸNėš îõDØ.ˆļ•ûōAž#§'„œĪäöml¯Šā^O„m^ėųYĖļø*7ø¸?;7Č ŪûVTp¯+€öú^÷Āŧ:β˙ÜŪũŗyž¨õāu‹ÖÅL0įIÆ#įBŽĶOyĩOLÅWĻķĪhCáĢŪ]į,¸Ķ} Ų^ î‘R§Ā>™Û'Ģév¸vŒž7î6ŗ7,û7e‚ģ]HŠgp{uy§;ęĩ‚×^:o•ŋž”ˇ°°$eRíčwÚ=“šŊēŧCNȇ‚ßŨp×7TîŸÂéįģÁĢá3äô}(øũļZQEÎÁ’3¸ũÆSõڏy‘´Rr΀ÆnHĮ“Ė‚SU$ˇzÛ%ģ’ÛĢ2č¯t†čÆëtn¯Ęā2I˜yåž-šĘuÜ~ͤ%’°ōûûąį~+šũ:ČK$ဇEģÚĄŨĶšũF sO'ā÷#댄8vįtîͤɞB´ČüĮÚDčF÷ŒŨj˙jØĨ7¸˙UÎ5v­gqû†O@ãōW-§ũŖÎ-fp¨:Nqχ!˙ĄÎ=P`÷€•Ôā XT-Â)V”p÷€•Ôˆu'dĮžŲY`Ô÷Ö}Õî2Ћ`aČŨ°ŗ{nôķį;õ îôˆ[o+°jâˆC9`÷€Šæˆu+ š=sZ×SíÚčî!ŗËlF_·ŧĖ +h/â2ģwũ­%>Ôŋ¯¨/â2ÆuũŨ‡jĐ;Ū°D]Tŋí¸ĮņļĄō:ĸŒŗˆ{0/Æ\ką Ũ9˛Ķĩ¨ž ę|ЅÁVŲ­KWøĪ­ēĪ<îÁļ>0T˛îõ6ŗAßķ2îA;îĄ1‡ĘaŸ•M‘fĸ.aķŗN)o÷ uW5­e˛ÁúԌNĀ]dŠųė^–ßÃÆCŊˇÅ`ûí4’D#ĀN[Æ=,\ų” gÃ75z_`–cÜYûa÷pgÆÆûžjÄke#Nć„˜yÂBîáÁÃH“ƒÜԈ“?Ãĸ p˙ÉúŊŖĮ=ĸ›ex5æŪš¯DšŸ-›Ŗj!÷HoVŒex>â%T›ė€.„“OũBø<î1UŪlėĻ‘ėÖâ—ÜŒpZ˙ãZZÅ|á„ō™za]‘ŋ įg6æ”UËß †AÎÔĢf'ôP˜-åĶ7Ɇãžâĩ]ķ}F’Rų)Håh|­ĪÕÃÃ"öĸy÷Ģ™ÄėšāŽî¸ķíųbîQûÜß~÷8ŦUCØs-iޏ‹+P-⛎Ũ{ÍäwĢC|bAFÅģŽ(üX‘¸”'"ÉLŖ~ąYšßãŠ`ĖS‰Ë žu1ûTËŽHÜđŌÛ.æˇJĢ ū•x ĸēļ֓hã;8ø ʏȎ,­'ŦŌ ‚´Mų6Ŗ9Ũ$æ;ŅĩČã+*.îķ+ˆ \Î=Aŋ'wÁ%öÛŅ'M)[ ˛;ЀČČu *Šļą1—{ІĻ,Ķŋį\}ÎÖÁ!Éã˙Îx*šĸŦí ÎærO1ÚiœÛ'Í×_eL›ÛqÃâkņ+|ÂŲV}S&c­ø "˙Í[Ë1Ī@đÛyd¤ūŪÜW›Í=I/É:N`ŧŖ”Áßv\ĨĸŲÜĶī {ŌCƒGōĪæžhMWĖÎíÁŲĢãXn6÷TkēJÃĻĢc^Ī=]a°ÉōˇSīąŽˆųVÂG2suÃPËqO†œÍ}$3W74’ĒJßŽĀ}T-zh* Ļūāv=Ÿû8fŽXŧ‰üËŠûÛ1¸×áĄí-šũGWÅjõū+5ĖvđÍ/Së—*n¸ŋö×pŋRÃlÅMjũRÆĘŊæ'Ļ]›Ī}3W7´Õ¯¸N­_ˇ,âĮ\ģ6âfŽąēÜUŦ–đÃLŋ}v ¯Ķ0ģŪ˛¸vŒ•l 5Ö%^5Ž`æę†nN\ÜØ?‰v™ÂŸ7ZĪą„ûUf—ŽoõFaŗ‚™}ë1l ÷k4ĖžōyšKān—K¸_ŖaöæŊŋ“6tÜa ë"¯1¯Đ0û2,œß4îŦ]SZÄũ ŗo3Ėų­ĸōâžkOĸ‡#ØŸÛĄ_äîn[ÄŊŪūÜZŸāåŽâpá>7’Ę‘B—,äîÂ2oN‹mv|Ąŗ5ȒįĮļžÄķíū­pôž§sA’ƒæÕQ…ãqģįŠÚe8Q?Š…”~”ßrŸ¯æ^n”†‡Ž'ĢÎčá c×\iˆQ­÷įū‰%éT 4ė‡BgiP^Ō}ÆŪmh?ũĄâ˙ržSŌhé~q ËBoâÆ }Cé…?‡ÁßÕ5 Ą‚;Û]FŊáúBî%&$ūĐŌnB‚\qW„Ü^…yËM#Ō —z\hL‡‡Ū “ÜréųÜHôø$¸ÅĖ2ģģ%‘67.å^nVŒ„>˜2îWÜr;+ŠÄė¸Éԙ´šq)÷1+¸VéwđE=ylŽQ?‰+ú((ĄŽyBÛgV§ĩ:hyP\€K… T[+ĀMÎcNAģœė.EÅGÛô&vÄ Ž ÕJTb”oåŪ S.ÃL ķlwfŨîâbnGĄ%ÁčÄĒđąøšÜ8 Ā+Ä58A €{uĶ´åÜKÍĄŨ` č§2,iОO ZpÜPiŠ¨/ķüá!ažm—/¸M<Ē’4ŊØgœ€z>LĪ>ķ¤ūĨŗą[îvž '¸cȑŸāÃķ^Œ¤ĄķĪcô‡üXÅŖé%ųT˙;’rûŽÜ~û÷yąŋŸP—sĢ‚ģÕ5NGœüŧ2ˇßrN@Ē7jxî<ļ"ÅctõˆÉé+s§‚#NpĪđÖ=+ŌžoƍĨøĄSž[žæ\ë\,`ŊÂí4Õ5Ü~W Ķ&”îî\ߓæÂš::ĮXÔ°WG¸[ŧō}ķÛ*îõ’­jw‰ŠTNš{Öp¯—„ äô!~čî‹`SŗXÅí÷Ņ35Ž*ŸDęQuÜ}kpjXĘŽãžg~îŊĀ~mIuÄhRĢ…×žÂ¨0MegwąRę ä+¨§*ŧēĘöĒVgō>čHQÖqΰ†Fƒ.^€ģũÚ e읛¸ũ~hS^™p˛âiÃ=Ã^÷¨` QĘë¸ŋM]YĮÍVUŊš=‚ÜâæÛ#sø™´f]šYļŽÅŽģqĻßD_4Î z5ąĖØ95îdũ÷#q¯Š(ē3 Ÿ{Ī2œwž´ļ¯Åą¸×TŨr='aŠéYpZ„Ęu˙€ģŠëėaĻ?S_˜lîũҌäĄį.bĘÍ5ÜQvy†07Dš|\Ë=ŲÜß FQÁ’ņũ)U_žî,`d ŪfԚ×AŖ“-W å-Ģš'šû#Áxã@Ü|×wīÅ(ĨˆČ!—u$úT¤-÷ŨÅõą¸‡\:M° Å×ģ-U~‚ĪŒiJÃnÃ(ŋ [îëM“M‹šŋ´ō…Å(¨¸oī÷Mđ$ÄԁYRįŒÄŲuXHŋˇäļ3_ĖŨįS,Ŗž ĘQq•–ƒįhI(äâū…Đl´ 'Avāmbëš'ú…°ƒé JŠ Ëa+č;Á}FÁG|Z?ūHrठįá>ī,jsę>å‹f=Ļ7‰’<„a×i[ĮŽ/aš>­Ã'!Bnc–˛ÛË0:÷S÷‰/áĻå—ↈö|ÜÛkō¸IL!xX͊˓(#'ĮãtGå –Ë°Š<Ȗ]LųL[/ČUÃMÅ$”‰úpNŗŲ~´  ļ ĸØĪ¸EÕydüDp‹LßIî7"ŗûĀę4ɋš~´‡¸‡=ö ņÜ"ŌĮCq)ę‰āžŖ‚;{C"vEŋ֏`$đŌ­é/å6öĻ õņÜâ]>=I˛{BŠ$“â%,Ф™Uūų¸Üųė–‰XRļĶÎ?˙I´•ឃjėļbž*īĪ›Æ§3[ĻĮ5Mˇpōôĩĸĩ<@RԚøÕ¸ëlæājėūĪũG`FsNųŗĢĘž\˙ÄLxĸEkæ´`>"ˇå‹Í…Õų6;ˆGĶĨܖĢļrN†ĪzIXŸĘŨˋõ¨üĶų;ĘĻŗŒų‚2ÃëpwŖ”bzŲ3Ŧ˙äģÆËGäæ*龖“ÉN°‰Æî% gĢčō$‘haj ghÉÜK*@ΟģÕD{튠BĐ1Øno§ø‹ëIb_a͚žŨČ Z8÷'—{Z†—xv̜|į^ZÆ]†ũŠŲ]`hƒŗBŽg÷U“`™Æ]MpQāŲũ­¸YÄwîÕ|Tz_mŠę†ųĀ2;˜¨¸KūE¨†Lš¯*šÜ?cˇi,â~|*H’ÅõĶgã2išĨˇ&wõWú×lƊj §"ā&ņĮđŠė‡)ŗ IDAT6ȇ†ČōĀ‚áŧ9¤GŊÚ÷a™}Z Ügq,¸­ƒ†‡„ø˙æ+`Î&p/ņ߇ІšŧÉÃîĻeÜ$b×Ā}âJ‡—ūÎEp[ƒ@Ǵρ,M,ŦŗË(‰\Pڐˇ‰4J°cÍą‹:wR4.\r6\‘4KęΉ2Fâ|Ĩ W x[<ÕVŒ^%žÕĨšY…OOᆞŸ˛e–$%Bl‰Œ‚âÚ¯å>Üį'[¨ÔųĩuÖŧĶŋlžē"æf |¨Â–[ŠDä5? ū_ +Č<ĘáĖ7oĸĮĢUÜ%XAÉõ ly"'Xpo|9ÔE šj'qv›ˆOd'„Ā•hŖĮĐ„ŠCâ˙UŖÆåļāŪD'>įÛŽ{3WuŠš{YŸŅ0ÜܑŨaäúƒČ”Į˙áŨĩä‚DOB:Vņsvg´÷§kė2Vsķ͎ Ow,¸8÷ļåų&΄Č+ƒü.ā$ųZEų=Ų˙>¸~Aâ"Ņ#¸7Ą(ABy Û­ W%jžčö‹PÍĮb WÕ'Ũ} ÷Jė:ÃZPÉ 'p‹š°ŠeŌ,’Õ"’c–ī^Ā'Ūŋî*ä÷$Ę=÷ĸ;Ojß{}ÛųrTkģÔĢšW虂%.œlPŌú× žœõK1ú)¨>Ī_é×B†އh¸ɖĸā{ˇ‚˃"ášŧ‚›É ›ØFŌīßV!j—V įĢ‹=3qJĐm0ēÅ#•ŖrÊ4“­HåžÚ1!Tc—h%wĩ’ģîÜāxKöû î—#q¯!įŠĩ°ĸúɁ¤^`_ąá^ ֝؅ĮԇÜ^RŊŌBnˆęGÉ->Ā ]ˇ…Öß.äö į*î. ÅŊÄnˇ†Ö_íļ#r÷Q¨Ęé:lŲ.¨ëŋé†vV=°BfīrĢ÷]ÅŊoš]?\ØāåWíŗfÅî=°\ũ*¸‰yA=?Ķ 7û`˙„që[ځtÃ˛(¯_LƕzÔ:îÜŅXĀļgôŠĒŲšzvD[‡ú'ÃĄysfŪ*÷ŪQ @T/Œ ÁFšÚĶswĩV˙ģ–ģÆ!÷pcÛúĸ•f~îŲ9ëŨtčgĸ´`•]tČBNáS8…Û8'ŋëžx¸{˙ ēĀ)ÖŽB‚aūĖi­,k,FĖlXįÎú$ĸ­o¸­°_1Ŧķp˙,;ģŌáîΖÖdŸÆũKMznĪ|¯ŋ[G\Į]žĮŗđQp3*Öū^yŨrkW¸^ĨGšĩ3¸›Į–úMq„áSNŗ—rKõjQ¤ų;í‹Ŋ֋֩æiÅD¯›žÛÜ}Vô‘WQ[Š–úŠ„EĮđoŪD%ų8U,jŦōH"ŅŠ´°yŸŦ–ß$eø2+¨Æ­Áj§ÖÎbˇ Ûō[Ãe䐯`A=•^žä’ũ‘æ`y{a•ōģ´Å#‚;a„üãšÅšSÍâUŨ’n:WŽ\?áo€;&dsAåN‘û0ā—”ŪßHnY9¤PúŠ[↠ãˇ{ `•fq+C?Õ´č3Y<ܒƒŲT|îōäâžWÜ"“w'`¸ĸ¸IGO˜ä.îĒ{rōČB&ÛTNSqą]üHÔNIéžĸšHd´l+…ČŖ,„ģbņš†íSį‘ā>“˛–€kr{†B"ú քw&*.(9ԌÁfM˜‡9 ëø{¨ä/ė:ĘīâļkŪĀOō’pYÕÅīߕéwŒōÖk_ÕY Œ¯\×,ĪĪc™ŗWwqZ“›Fä¸oɍ`b1ŒG2ēĪsØtx|×ÉÉ%•ģŽķÛø<ČÉy偐öÅöœÜQ¨ÉaN"væ43rIkéÔ@dCT YĮŊV°žū¸ŖJ<€‚;|—‚;1#aHˆ¸E°čúv9ļĪw~~*ĪcIAāÕČí%QûBaū.Č(¸}”‡āˆ¸ãėî<~Ėz? šo.Shmų;ņßÕ6ŽÁũe$AĘääō$ČĪ j‘ÅoáĸâęËi(3đ">dâŊ¯Î`+ęCŗuŅrÆÎMØn{2rM3r&÷Ŧč:î4Ļ”mÄÅ.Ž7šQ[q–_“›ˇPÍ%÷ÛsB*rŋĄŌŨ'QÜDp‹ĘŗS霯 ŠÚœDr›AūÜ\pCUƒeōdˇ ûē¸ĄĐĘiå[‘â>d%TšLn~‰ô6oƒŠđwAĮBz9š `ۗ؅čk™|!YW1˛iNaÜQ‘˙*Éũ¸pˇt9ˇfŪĐÆ‘ vOĘœ–ôËs¨ĶĨ¨lģ×gĄčįŅ.á¤Â ~K÷`zô,^7 _˜hg˛8Äķa)E+´Ō¨†ā"ģŋ•čLäÅ1Öŋõ"ŸhÜIũĨ~RÜąĖījÕb†!ÚĀM LÂ~Éļ ĄE„„Ø‘(8ü'Â.6ĸĒ…ßŋ”[R\ÁŲĸ|`ęâBp/>Đū\?–ÉwpŠy _ÛüŽÉ6¨ī…€6¸ëŧ `§ûųĀl(ŠâJHô+@eTˆĖmšŋŊī."Ų—ä=Ųž#švÂą¸kš ÜšŦȇģPr‹á‰˜ƒŠĄVöÍĘ̈ow!¸ˇ´ ˛ôpxúŖŌZ{„íĖ$U*ĘŋĘšžWaņaųöĩ¸ĶödĄ†ôē4ĨZ5ˇ•ˆ×rõÕĻÂĀŗį.3¸ŠęímÅŗeÜŊĩ;ā6 î?Õx@Žz<&ˇzĘt@ÉČRĻ1,ûŨÃŨTāŽŲ‰jĀö˜`™= 9´pĢųåŸŅß|܅Z›Ķ/)9$č?éWÚy‘ú&7ū5e´ŌēKÍĶđjísĢPÜSÛ Œâ.Ŧ‘ėB;/ōO rwUÜöūŠŌ›ō9"ĀĖ~ Æ][#ŲĨÜANr-ŖŽ‰ŲúĒ)!ž‹ëˆĸũ>Ŧį.>îp˙"2‡_ZO„zĪ âV5Ĩyų}p[ pËKOúÕeÜ ¸Ÿ‰9ųt¨â˙ ęk–t*rŽæáķ\ ܎ô€v˸˙! ķ0uEŒ˙ÃėöDJ€Œđˤš˜Õ&jФ=- ­øˆÜ,*"vr&ÍjBĩ1SÃŊÚĻûĶĪÍîĒ”7’ģŲęNäŸ!õLœŅč\ĝG ÔÆ/īPÁFÔŠ,mü•žĒjŸĀĘø^ˆĘTúFÔbî¸Ú‹{N@ĸa™<}]ɝpĘHĀ7Š;Ę2ĀŧŋĘf+L.„gî&ÄĄ€Ũ”Ü[ĸ ~BÆhŪ!B{ČhĒĒxī~s/z¸z(NÂėŸĩJĀ˸˙š'Ŧ ‹ ÜWgņŖäæ×ĄÚēŠå–ÅVq_ˇÜ%L*˙,{Yņē9šëâ,úT„˙‰ĖvÉ#ûYŽ$$˜ˆwĪŪß&Đ`#¸Š›ũ}žžÔŅįb Üwú$šŲCXn„L|OYŪeīîČ- ˛;ōŽl ņōTäîK}K.bīÁFô:’&s€›QqwĒMībōˇu˜ß} đ"Lî¯â•#Ŗb›ō$+Ž“zsŅ*Ŗōúävđ$wæÅ{ÜwŠ[*ư3ŽŽŒõ^vO˙ĮiũHné^Xí҇äCJmņ" ]´Žģ Å.­Ōį_ø …JIÂ2*ˇgį ? åö"ũâČölZ'đĖ¸áŠJuĢŒĀžCΉT9Cč'Š7$¸Ã'ĩųMh¸ßčöė/Wrˇ“ÔfȕŅA•qš;;Y=‹÷šČĘ(Č˙yVŧ×(7ˆz“ßRŠžY4Ār ;]ZG˛!S!Wdŋē!l$ƒƒj0ŲÍZAšlž“baïÜ]l`ûpgÉ߈ZĘÅx@4ŽĢFBj˙Č7 ‰Čr&¸[…ˆ¸™âNbĸĨo"0õ-bō–ˆŠˇŽ YRRžÛ^‡pEęŋU˛Lˇh\’ûĮú˙—Í;ŖĨäėĶ0ČĀ€;"yà R? EÁ ^›ā>ĒhŸŸ;Îīī#žy ąr8æTxķ*OŌ‚ņG8û åŽ…laA t‡‚ģŽEO ¸oH”]AŦ•“›°Š:_įGä–Eųkũ‘?ÜČ­wŅĮ\€ũĪ‚ûš8ÕŽOp(UϏádbĐ(Ʌ˜ØŌˆ<įr–€Ąkū ^īÚx*˛¸iöÖ¯Į-ãTc|Ņ\ķ˙V^Cē?ņM$‡u‚{Ÿ<Ãic_ƒYüî&ä2Ņ8ō{1Dc›K’WÅ]†õĶkpë3„ēO0߁™x™|/…zNŌ§ĀŊ:đ3|*iʇ1n!Œ„LØî^4 !ÖC(ŧ/ĸ¸žē6^‰{ĨËÎōôģد.mrˆ’ŠŪųœ€aįįŅŗ˜āąŅYĮ8)nP‹MŧĢäØÜã.ÖÔzJģËã¨HÕēk$úÃôc XBa…ĒHE#üé+XŅG­ėÎPT%wŪpOō÷U wŌ]*ÛŊäåõD&/š‹]Ë-ģônÕĶåæ­§a„ÛŨ˛ĪEŊ—ö§ũū1[ÉŨŽŠåĶÅ]ũC؜Z-'-Qn4Kĸˇģą mPqwŨq›kš˙ī¸Sā.Āī›čĒųMüSõ–ÂŪë÷÷Ÿäļwįia÷žįĻu‹›Ŧä.ÁübŖMŅ(ķ] +ČQ~ía¯)OĒčO?5Ķ‹¸ĶîydR‡rĢ÷ëO–ĢZÜÅÜliāX.åĀMĀScŧĪHÍ¯Āˆ%~Ί(ÕDĀS!K´U“ģRoÖüÔ ķŽģ?ģŗĒ_ÆU¤h¸Ŗ"„wšËKÄA]\Á>Sô˜Ã•Ė4ŖėžnmSÕä–/ÔYÜw?=v÷å$Ur|=7ŲJîk°ŧdĀ-­… ų'b ø†°0‚Ũû\Ē]Â.`MõÕäVœj5žuÜĄÆ¨×YĮ]÷UÜU˜đ=_5G­Ëėvīs°8ŨŧŨ ,‘ŽIU jgĢlÔî¸4|i^ $Æwˇ*ĸ=ĄĘô­3-Xļ/Üī;¨Â0„ä8”9%grkāVnƒ…˛ęˆÅŪƒß“kr">ŧ{GˆKîâA‰N!Î\ÎÚĘ Rtē>ė1 Ŗ{͔c!7FŌ¸)ŠrØĀ~.ŖlŖ:ĀÅļ¨lmà ­Āđ]ˇå‰!Y  C.^ϤbJMÅh&ʤ\‚ÃÍčĪbœ,šŸ Ë™z4í”rķHđ,*LeŌ{{ąëS z t .Ā ÃiÔžF( áę\ir0)ą;#×1‹ŠË4,""2ŖŽķHj´‘:;‰ęīŠ8ÔĮ‚HãŨdu~Į\æwTžG$„A‹ōZ´Di+mĄ•ÆlD!ģžÚ^šåÛđÖøõžåÅ7 lzō ØČ̏ÁrŗËdČånÖq¸e~ķËķˇŌSȲR:M8TA&Ķš!°˙ÃFw”įüęũŒÁš>‘=I÷ĸ™dŋ¸ëbYŖˆ˃VÁ;Ņ.¤§ā–ÆģŊŽ[T˜ŸÉú]\’M ܸÃ$wø#‡üJ`ā_įl{ívõžĮĸFŸš_eQq§ŧŋ“ë S‡^‚×iÉ ÷Åųuœ)nŲxފuÜąøßŊęwŽE •܉üIrG°ō$¸Cč:@Y#5m(¸+Peēž9UÜLTœ(:ä"8%˙(îģ@>Č nč"ūŽüķėyˇĒ]Öf}´Qéš§0j&?B7÷=Čšėö&„%{FĀQЉģā˙ 9ėLŠj}<„ŽÁÆ|t`äš ,ß]I›g'$—Ü‘äŽ.#!LkpŊ~ĩ*ŋëvFXkNaО_č€í8Gâ.%éļ*fšŊprÜU°gÛđšr.Ũƒ”u?ãۘ@3,΃| #Ėîc’îbÔ¤8#ī×rˇOĮõ—Zũ„Jr‹œ/S=‰Čúĸ“ĪāÎRQûE/rí%7 Æ"ŠÅąáģ8§)Đ"ļā.‚€¤¤ÕõÛ\lqŅp˛–;mkvŋ‰UPåžœ|K%N&†%ŲŌ<},#0ŽT~'ė-œú+ī㜜†ė\LBîŖL•[aÜnÆ Ņ(î~€×së'Đōô Ü?8ŌÜ˙€ŋaŒųŠŦ˙§…ã1Ø)cpà ˛÷ę=‘JJĸ÷ŠBvw4nZˇ›Iw1Fšk9ø{ŠÂ1?‡Nœfģ‚ŽŊ‹šč‹–FÅiZ˙X%BōŨ Qx%Ŋ¯‹ę(†D1ūˆÜļ?māFbP*rG‹KÉ-†dé÷9-Ęä3OŠÛđĨŽ 5DüŽ Š~Je ú!*´ôGvLn1úÖŊ×ĘūņH”uqKîčІ%ĐĒūšˆ~nu8y*fĀĘáųKudn}ßąĨäA­īĩšš•‰TÃęĘ‹ÃˇÎõÃÐ_ž"UŠî9Ŧãæ ˇžīUnčd­oŽ\ę…ž§˙ēyĪæmĮā6÷ë8pOYŽÂƒ=Ķ÷Ŋ÷–ŽáŽ>šßmôöōzîÜåž}ÜßėpîƒÉ]\Qgkęøá8Üúžnq÷ĀÔ7dūėãg‡#pīõ.3•/áiLG Kš•94yÔ¸árūjÜŋô—ú9S¤˛ßxÖô`ķv3_§žôæ šÅā-•OÃ?Ÿ,ũ‹lœÛom:č[ÛėYĘmš‘ÜDpSõŅÔdëCáäžęÚpĻģĐ/¨å<Õx X¤ęŖŠÉÖh2Ë5DīočĩšÍ‰Ã¨íždbĶYÜũnsVûÃznf厑œ•Ē›V?Jˇ&ëûÛ!îúÜfüÆˇ "Tį67“ŽÎmėęUŅ&QÚ§š›Ö­:Ž5ä>‚<ÉŠYAgrķ¤wˆ–™GjųáēŅYĪ˜ÜÆ´l ž4Ō™kÍÃáîd§{ĸ–ĖBîK“[‰ãĻ–ÂæęüšF ŲbT ¤ãÎ\×Ģšŗ†ûĮf[=”‰‘ä3|ͨ×uOS,mËÄ9Î1kk5GÎ >w(ŨÜÔYo§įZnT•,6cÕęMķ1īڀs†MWŋ9ĻŊÉrî"­ØN¨hIÂ'°^ܟö’[-ŪĀ‚‹\vā™Íí {ŖdˆŖjúĩ؄õû¤„ڒ߇œō˜?˛‰`0ŒžŲöö:Ė"NKpŖ|‘tĪŲÜÜˍ„t îŠlvga{Â/ķĮv›7’; ō\ ØTĒȖÆr ôkĪŨJ4GÁÛqo {XË-˛0,Ééģ4Ŗ„ÅŪ°ŖäŌ$+ĘHūUr3p^’bPQ&ŸōĒãî6ãmn§AÃ@ŋU’=wqvJŽcšĢ-ížâúĀļ-wđ,‹Áît°Æ}7-÷CKā(x;B†ČŦ؜_ĪM`#ÜG’[ŌúoZnān8bļå&pĀt-]Wä?Õ"ąV@{îfL/šoÕåĩÜ善ėFpŠ›ÉũíCv-šagWTldÅ&nŪrŸ’ M˛q‡ũ p?vY‚UĶãĖŠ4Ö"čSŖ7#W7~ZÁÍw~žøaũ4UÁ{õ€ˆŽáėmFhŸ‡‚;zÜ%lč)'Ķī(´ŧÆvP—ˇ7AgmäîŗŦ>DnwAS~ʂÃãĪõĄŠŋīÆā˸w"‹†;ü Sé=Ü?Á¸"ßRvsí‹ëXr9Í`ߚ|ReĻߋ¤ųûë@ *Ëø„üŗ:ōĒmžÖÕéFäōžēH+ĐŠ”<Äq§ČąĖGų&|ÉCŌhœ‘ā ÖĨwôøŊäŪQöpī‹›låx ¨oœJ˙ŨĄL´ŠEĩĪīŪÃĻģRĪ•–š€jPž%ĘKšC\n;Ęv/Ä@\sē‚›•1xĪßËŅōcģ˜ū•T1ŒS2úÂi^nhXÜPā.¯gä"€ų™ÜfŋȰéz+šA&Õå[ōî!’†Ņāˆ_Kn~—–ŅČņ ˛šŒ?¯˛o`č/Ä{Š0ōØ !Z\ä:ÄKy<7ÉĀ 'Î6!Kųyôü"YŪ$ōthņ šŊ—­ `į´.v˛ëēM˓ķÚĐåæ’>­ãĨ-dÂū˙„Ęöܝ-͌Raß$ūą]qc褊û1ŋŽÚ6˜§ĸÉ>åR÷ pS‘ģĘÕzžĄ5ģ?%{FĀÃA.n6īhĢĖ´Œ[4ô°ˆ’Gi\Ũ¯‘4ƒŽĸæÍØ_ÎëØ}Ü ķ¤¸8‰;ĖÄč…Eä/I¤´āžN@ąOHĒŊ…W 7$ÂÃ9×Üä-ã–>I2j\n¸A+>!’æƒ ūšęĻg,áoãLˆušm0ę—܁xQrIĪ‚{ŸH"$"9Sܧ븛!7_åËį>nËü.î+¸™ËČ?ng“.ˇžącúûáq_ČũĨY—¨Āme­ŗQŲŠåŽsû˙(´#l(Oö 7c/{fāĨHū“Îmû&ęC[ e|K¸Õ"šÃX†¤á–Ž_mn/ pÛ#`:ÜjnU\&7'A FÕųģPĘe%´Ō÷HTʍĪwôéÄŌõAû¯ÚØöĻnĶ/åM˜m!¯ãē>āšļʒâ&˛=āwܸĮ‡;9 7b‰“˜×õŋˆÔ>æmz€ą {ZÊ*tæ°öųŗÔl‚ÕĀÜŊnûjî};Ŗāļü6bd~›ĒewĨRĸ4K€ÂŪĀĻr¤uÕOŌ‘ōp`q3ÍũQ¸ y-m\ŋ†āƘŧģ{Ë×Ŧņû ËbüšÖâ+۞7$h}+]ŸƒĪĄé/ģvØHc^Ŧū~n!ŧ˘Ä=wÄȝōLˆōĖ ũÖÅÍYĩÜš<—9P2˙+W–ČDr=7§-ˇšI)Tu#GķĤ%ܙTÖāį'ā~4WÜ1 XAōŨ9iĮ|–ķDũ¸š€5Uōpvr’[”Č)ėD‘‡´ `“J ũBŠuÜÍé<+üĢæ}ō‡¤k ˸/(pŋÜT:؍$÷A ƒ?p9zYŧm¸I Üģk°N¤Sx&v›{ۘɯu”• ÁŌrƒH eî$ƒLĻã§<ø7Įá¸đH°áj§ë•ļ÷ũ;"üJr‹Høô{‘|-Ę{1đÎIđŨ­’$Čī.Áē¸EcG/¸CÁÍĸ˙1õ*jWˆ–qĢãØ­}n|r”w§âæ=˔Š[N<>ŠiĨāžƒN†ėÎŒm°Ęw ÍĪBYÁ؃ũg1‹s1ĸ)´‚;ŋ+娚ĪíáŽų=ø&c>ÉŨ ëD÷"Zbņ_Õ9-/ŖŊT‡ëš7ā3^p_Ņ‹Ž9Ošžy7§ŌXD– !@Qú}_ƒ#‚ĀxJpĸëŪ×eš>;˛ 7l_Ķg8ACpƒŽāĻĐ-ŅUÜØŅ•Üukp\&ÖH;äa;äø"†~Qgšäö*…F-ŌePŋd‰˜wˆüNēu ķYܞ‰ÎŋŸ\>×p˙Rī–‡n Ė_+)‚uš_hjŋGÛOķp/îĶD’:Ë š†]Ėä^ä'Ŋ9‘ßNŨ”0׊Yǝ)ˇÜJdõŧ /펙ģ…Qą`ĩYMí bkfuĮãļJļa•Ĩ1øČéšõpDîģŦמų[g xĻ&û6æšSė˛Î=ä| ŽåbŠŖˆp4nĪÎŨŨB'Æųˇˇŗ—ô›pĮ˜ƒäY9z“‹@ΊáˇänËZHžÂ>0āŽäڗŗœģŽ[͈@š+ĒKĮn !š`ÃV7ÎOÕڄŗĶĩŽ[“ĩ(7õĨl{\…Ŧ†åpĻŖ¸íß^—;8¤Ē† Ũ@€O垏ZnG­ãF*¯™rŗQCĶš'Šž}‚ÆĄÎ‹ūh˙ļŽ›ö1n1łŅGĄFÍ]åáD•=É-OŽĄöOG“'wŠöYmŊÅnŲû*nøú×nÔ 9m 2Œ[Ų"6’úũ7L%Ōēņ”ķāëŋr~_ąHõowq |­ûÕn‚PMāæ9ô6*•Gûhė5ûÜT˙†rÃi^UģaĐOl&pËČ;îę$ĩYŗ_Lõo7ƒá¤ „úŨ&2Î-xË]žŅęrįp”4¤¸^ĀMn~qDîVõE…ā+r‡Ėī–ģßĪÆgrq”͆쏠ĮĢ'ĒŊĩ{vûˇwų bGĻŲé˛‡qnøGvZŌMŨErlîėL.VĶļO›&˜7ĩG•ą–ßãܲ„ŠŽû,ĩĻŨ˸™ēš@‘S9Jķ‡Ë†ģLšĩœÖŽĩ´¸ķ‡hĖãRĪ-=b{Oy™= ŨWņ÷rÔQžQģ•,ˎ¤;ĄQ(ÉSƒģK9ŋ‰›ņâ‡&wxî2ų„Äɡ;QÜ9xČåbMVÄyË­čĀä‹Î˜_ĮM‰4øÆđZz§–?ƒ.…ä΃Ŗpŗn_˜ŧ;“Ëōĩ\­ĻųNŒ+Č­ôU+Ū!ߊÄäŗTJ”Z)ÛČ)Ē´)š Ũ.:Â5UB\ŧ—äÎČąšÁ &8“Ÿå™×įDēE%•Æ÷# ˙#Ė\Āeđ#ĖĐØ%ō’—ŌĢw(įbŧŅ /R(,ĘZõЈDY• ÉSāūŽ^wN“Üũ"īøÎBޤ围z [§ĩ˛#NjĐō`rë슺đ‹j §ôų9%„ŸËmP"ƍy"āĢKB6ÁūåšP˝aÜü2ČãJZDvn˸ī`7āVq—Ā]öÜŒāĨėëŠĨ:Š8=„āßČJ%Ę᎗ÜyČī™:ĨÔ=2r §J–aeáSņ6ĖáxÆ2❃eëČš‰2U[‚2î7äøJnU§Ú¯\‹û^p_Fų[Š“R¸ƒbŖŒt•soņ‹ŒR~‰@DdΓ´‹° Ÿ˙]Tt§v/ŗ,ŪŨG{Øãž:ËPj-€õØĻĄ¤éZŽęęõDŊ,Ī Âŧ…15IĀČ>`g ˇ4Ŋ‰ˇÔ¨83‹3˜ƒå$âÁŋ†bÉ×퓈üæņ#{ŲŨ%yˆˇˆį wj&R¤5ûU îSPû8k¸åëA—UļÜ‘j8g˛•„ō-š#š {“N‰fŲ~Zîâ&bÅMˈęeW=7­å舑7°mÜ$\Å [P¤=}Õ6Œ ´HĄÎĢ÷é[õ-’ōęę YˇO’1Q§Ãâ!>ëa99¨÷‹ŲUÔąDžæ›|Š 3r^CE{%īĸ\ŧÅ…‘š D¯*l¸^’äí9xQŲÛ PqŲ °a÷]X$Qņ@Ÿ‹*PZ‘\YĘŲŲ]ÜnKîōûrY”ķöBr?›tßļâÆ {w~œÅˆ•‰ÚwFŌ=#įg z"ZĐVļQŪļœUÜščęEsŦHŌE%ŧŨYA[ŗĸĸáŽ@߅+iŸH+ō@syDz%G„ŋã‚Tp_*néæū>,îĢSĐ-8]Įũ"’hÃS÷IŒ+_žō\47— Č´ˆ\GĒq+k¨ā.ˇ<’ž‚ŧĻAq'ē]/{ iČ..á>rąwa.ú+~Â(ÛŦŗ/֗ ~čš)Lģe?×ę ‹IEAc’Rh¨\ô!ŲŊäŪ î$ĘīáônÁ :TEq›€ĢÅļƒ_`Ą EÄh€ŨmÄP,ģ^ɍ‘šß5ŖÕvG„ÁĘŌQ+…ōČã\m<×ä:‰™ÜF(Ŗ§ €e–ēY!Č—ŽĻ2pėąôņ1į7QŊ7ĸE v­iģÚ,†åɏ­>{v~T R0`ŠDuk?‰WĒĸ¯ÅeđQrsũ\z|æU$†Į¯ÁØø•ú,ßPonĻuoĄŅŪû(æŠ (˟ÃRöYøKrz¨^ƒąŠôÛĩē{kŨ”H‘ĀG )Ģ-…¨C5“xnŒyoĐ'‚;ŅôōÆÔøwÉ­–Wˇ shgy­ãË×Ö+đZNs› ¯ĖÍé˛ČXúiø†×ևX¸=?ZNĮãÆ)&šŲá[r'ĮŠŠžāŖķ˜öķG pÛđ—Ę=jpü÷QÃčžėÜG pÛ0:Ŧųƒû˜aü|“ß'÷¸†áī”{4üÁũmÃÜß6üÁũmÃÜß6üÁũmÃÜß6üÁũmÃ_,÷˙16ÍdTgąCIENDŽB`‚leptonica-1.86.0/prog/cornertest.c000066400000000000000000000064461506303110300170710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * cornertest.c * * e.g., use on witten.png */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define LINE_SIZE 29 int main(int argc, char **argv) { char *filein, *fileout; l_int32 x, y, n, i; PIX *pixs; PTA *pta; PTAA *ptaa, *ptaa2, *ptaa3; if (argc != 3) return ERROR_INT(" Syntax: cornertest filein fileout", __func__, 1); filein = argv[1]; fileout = argv[2]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); /* Clean noise in LR corner of witten.tif */ pixSetPixel(pixs, 2252, 3051, 0); pixSetPixel(pixs, 2252, 3050, 0); pixSetPixel(pixs, 2251, 3050, 0); pta = pixFindCornerPixels(pixs); ptaWriteStream(stderr, pta, 1); /* Test pta and ptaa I/O */ #if 1 ptaa = ptaaCreate(3); ptaaAddPta(ptaa, pta, L_COPY); ptaaAddPta(ptaa, pta, L_COPY); ptaaAddPta(ptaa, pta, L_COPY); ptaaWriteStream(stderr, ptaa, 1); ptaaWrite("/tmp/junkptaa", ptaa, 1); ptaa2 = ptaaRead("/tmp/junkptaa"); ptaaWrite("/tmp/junkptaa2", ptaa2, 1); ptaaWrite("/tmp/junkptaa3", ptaa, 0); ptaa3 = ptaaRead("/tmp/junkptaa3"); ptaaWrite("/tmp/junkptaa4", ptaa3, 0); ptaaDestroy(&ptaa); ptaaDestroy(&ptaa2); ptaaDestroy(&ptaa3); #endif /* mark corner pixels */ n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); pixRenderLine(pixs, x - LINE_SIZE, y, x + LINE_SIZE, y, 5, L_FLIP_PIXELS); pixRenderLine(pixs, x, y - LINE_SIZE, x, y + LINE_SIZE, 5, L_FLIP_PIXELS); } pixWrite(fileout, pixs, IFF_PNG); pixDestroy(&pixs); ptaDestroy(&pta); ptaDestroy(&pta); return 0; } leptonica-1.86.0/prog/corrupttest.c000066400000000000000000000263571506303110300173020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * corrupttest.c * * Excises or permutes a given fraction of bytes, starting from * a specified location. The parameters @loc and @size are fractions * of the entire file (between 0.0 and 1.0). * * Syntax: corrupttest [loc size] * * where == 1 means that bytes are deleted * == 0 means that random bytes are substituted * * Use: "fuzz testing" jpeg, png, tiff, bmp, webp and pnm reading, * under corruption by either random byte substitution or * deletion of part of the compressed file. * * For example, * corrupttest rabi.png 0 0.0001 0.0001 * which tests read functions on rabi.png after 23 bytes (0.01%) * starting at byte 23 have been randomly permuted, emits the following: * > Info in fileCorruptByMutation: Randomizing 23 bytes at location 23 * > libpng error: IHDR: CRC error * > Error in pixReadMemPng: internal png error * > Error in pixReadStream: png: no pix returned * > Error in pixRead: pix not read * > libpng error: IHDR: CRC error * > Error in fgetPngResolution: internal png error */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static const char *corruptfile = "/tmp/lept/corrupt/badfile"; int main(int argc, char **argv) { size_t filesize; l_float32 loc, size; l_float32 coeff1[15], coeff2[25]; l_int32 i, j, w, xres, yres, format, ret, nwarn, hint, deletion, show; l_uint8 *comment, *filedata; char *filein; size_t nbytes; FILE *fp; PIX *pix; if (argc != 3 && argc != 5) return ERROR_INT("syntax: corrupttest filein deletion [loc size]", __func__, 1); filein = argv[1]; deletion = atoi(argv[2]); findFileFormat(filein, &format); nbytes = nbytesInFile(filein); lept_stderr("file size: %lu bytes\n", (unsigned long)nbytes); setLeptDebugOK(1); lept_mkdir("lept/corrupt"); hint = 0; if (argc == 5) { /* Single test */ loc = atof(argv[3]); size = atof(argv[4]); if (deletion == TRUE) { fileCorruptByDeletion(filein, loc, size, corruptfile); } else { /* mutation */ fileCorruptByMutation(filein, loc, size, corruptfile); } if ((fp = lept_fopen(corruptfile, "rb")) == NULL) return ERROR_INT_1("stream not opened", corruptfile, __func__, 1); if (format == IFF_JFIF_JPEG) { if ((pix = pixReadJpeg(corruptfile, 0, 1, &nwarn, hint)) != NULL) { pixDisplay(pix, 100, 100); pixDestroy(&pix); } freadHeaderJpeg(fp, &w, NULL, NULL, NULL, NULL); fgetJpegResolution(fp, &xres, &yres); ret = fgetJpegComment(fp, &comment); if (!ret && comment) { lept_stderr("comment: %s\n", comment); lept_free(comment); } } else if (format == IFF_PNG) { if ((pix = pixRead(corruptfile)) != NULL) { pixDisplay(pix, 100, 100); pixDestroy(&pix); } freadHeaderPng(fp, &w, NULL, NULL, NULL, NULL); fgetPngResolution(fp, &xres, &yres); } else if (format == IFF_WEBP) { if ((pix = pixRead(corruptfile)) != NULL) { pixDisplay(pix, 100, 100); pixDestroy(&pix); } readHeaderWebP(corruptfile, &w, NULL, NULL); } else if (format == IFF_PNM) { if ((pix = pixRead(corruptfile)) != NULL) { pixDisplay(pix, 100, 100); pixDestroy(&pix); } freadHeaderPnm(fp, &w, NULL, NULL, NULL, NULL, NULL); } lept_fclose(fp); return 0; } /* Generate coefficients so that the size of the mangled * or deleted data can range from 0.001% to 1% of the file, * and the location of deleted data ranges from 0.001% * to 90% of the file. */ for (i = 0; i < 15; i++) { if (i < 5) coeff1[i] = 0.00001; else if (i < 10) coeff1[i] = 0.0001; else coeff1[i] = 0.001; } for (i = 0; i < 25; i++) { if (i < 5) coeff2[i] = 0.00001; else if (i < 10) coeff2[i] = 0.0001; else if (i < 15) coeff2[i] = 0.001; else if (i < 20) coeff2[i] = 0.01; else coeff2[i] = 0.1; } /* Multiple test (argc == 3) */ show = TRUE; for (i = 0; i < 25; i++) { loc = coeff2[i] * (2 * (i % 5) + 1); for (j = 0; j < 15; j++) { size = coeff1[j] * (2 * (j % 5) + 1); /* Write corrupt file */ if (deletion == TRUE) { fileCorruptByDeletion(filein, loc, size, corruptfile); } else { fileCorruptByMutation(filein, loc, size, corruptfile); } /* Attempt to read the file */ pix = NULL; if (format == IFF_JFIF_JPEG) { /* The pix is usually returned as long as the header * information is not damaged. * We expect nwarn > 0 (typically 1) for nearly every * corrupted image. In the situation where only a few * bytes are removed, a corrupted image will occasionally * have nwarn == 0 even though it's visually defective. */ pix = pixReadJpeg(corruptfile, 0, 1, &nwarn, 0); if (pix && nwarn != 1 && deletion == TRUE) { lept_stderr("nwarn[%d,%d] = %d\n", j, i, nwarn); if (show) pixDisplay(pix, 20 * i, 30 * j); show = FALSE; } } else if (format == IFF_PNG) { pix = pixRead(corruptfile); if (pix) { lept_stderr("pix[%d,%d] is read\n", j, i); if (show) pixDisplay(pix, 20 * i, 30 * j); show = FALSE; } pixDestroy(&pix); filedata = l_binaryRead(corruptfile, &filesize); pix = pixReadMemPng(filedata, filesize); lept_free(filedata); } else if (L_FORMAT_IS_TIFF(format)) { /* A corrupted pix is often returned, as long as the * header is not damaged, so we do not display them. */ pix = pixRead(corruptfile); if (pix) lept_stderr("pix[%d,%d] is read\n", j, i); pixDestroy(&pix); filedata = l_binaryRead(corruptfile, &filesize); pix = pixReadMemTiff(filedata, filesize, 0); if (!pix) lept_stderr("no pix!\n"); lept_free(filedata); } else if (format == IFF_BMP) { /* A corrupted pix is always returned if the header is * not damaged, so we do not display them. */ pix = pixRead(corruptfile); if (pix) lept_stderr("pix[%d,%d] is read\n", j, i); pixDestroy(&pix); filedata = l_binaryRead(corruptfile, &filesize); pix = pixReadMemBmp(filedata, filesize); lept_free(filedata); } else if (format == IFF_WEBP) { /* A corrupted pix is always returned if the header is * not damaged, so we do not display them. */ pix = pixRead(corruptfile); if (pix) lept_stderr("pix[%d,%d] is read\n", j, i); pixDestroy(&pix); filedata = l_binaryRead(corruptfile, &filesize); pix = pixReadMemWebP(filedata, filesize); lept_free(filedata); } else if (format == IFF_PNM) { /* A corrupted pix is always returned if the header is * not damaged, so we do not display them. */ pix = pixRead(corruptfile); if (pix) lept_stderr("pix[%d,%d] is read\n", j, i); pixDestroy(&pix); filedata = l_binaryRead(corruptfile, &filesize); pix = pixReadMemPnm(filedata, filesize); lept_free(filedata); } else { lept_stderr("Format %d unknown\n", format); continue; } /* Effect of 1% byte mangling from interior of data stream */ if (pix && j == 14 && i == 10 && deletion == FALSE) pixDisplay(pix, 0, 0); pixDestroy(&pix); /* Attempt to read the header and the resolution */ fp = lept_fopen(corruptfile, "rb"); if (format == IFF_JFIF_JPEG) { freadHeaderJpeg(fp, &w, NULL, NULL, NULL, NULL); if (fgetJpegResolution(fp, &xres, &yres) == 0) lept_stderr("w = %d, xres = %d, yres = %d\n", w, xres, yres); } else if (format == IFF_PNG) { freadHeaderPng(fp, &w, NULL, NULL, NULL, NULL); if (fgetPngResolution(fp, &xres, &yres) == 0) lept_stderr("w = %d, xres = %d, yres = %d\n", w, xres, yres); } else if (L_FORMAT_IS_TIFF(format)) { freadHeaderTiff(fp, 0, &w, NULL, NULL, NULL, NULL, NULL, NULL); getTiffResolution(fp, &xres, &yres); lept_stderr("w = %d, xres = %d, yres = %d\n", w, xres, yres); } else if (format == IFF_WEBP) { if (readHeaderWebP(corruptfile, &w, NULL, NULL) == 0) lept_stderr("w = %d\n", w); } else if (format == IFF_PNM) { if (freadHeaderPnm(fp, &w, NULL, NULL, NULL, NULL, NULL) == 0) lept_stderr("w = %d\n", w); } lept_fclose(fp); } } return 0; } leptonica-1.86.0/prog/crop_reg.c000066400000000000000000000266111506303110300164750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * crop_reg.c * * Test: * * plotting pixel profiles * * undercropping from a box (i.e., with an added border) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 mindif = 60; static l_int32 GetLeftCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 h, l_int32 *pleft); static l_int32 GetRightCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 h, l_int32 *pright); const char *fnames[] = {"lyra.005.jpg", "lyra.036.jpg"}; int main(int argc, char **argv) { l_int32 i, pageno, w, h, left, right; BOX *box1, *box2; NUMA *na1, *nar, *naro, *narl, *nart, *nai, *naio, *nait; PIX *pixs, *pixr, *pixg, *pixgi, *pixd, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/crop"); /* Calculate projection profiles through images/drawings. */ pixa1 = pixaCreate(2); for (i = 0; i < 2; i++) { pageno = extractNumberFromFilename(fnames[i], 5, 0); lept_stderr("Page %d\n", pageno); pixs = pixRead(fnames[i]); pixr = pixRotate90(pixs, (pageno % 2) ? 1 : -1); pixg = pixConvertTo8(pixr, 0); pixGetDimensions(pixg, &w, &h, NULL); /* Get info on vertical reversal profile */ nar = pixReversalProfile(pixg, 0.8, L_VERTICAL_LINE, 0, h - 1, mindif, 1, 1); naro = numaOpen(nar, 11); pix1 = gplotSimplePix1(naro, "Reversals Opened"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0,2 */ narl = numaLowPassIntervals(naro, 0.1, 0.0); nart = numaThresholdEdges(naro, 0.1, 0.5, 0.0); numaDestroy(&nar); numaDestroy(&naro); /* Get info on vertical intensity profile */ pixgi = pixInvert(NULL, pixg); nai = pixAverageIntensityProfile(pixgi, 0.8, L_VERTICAL_LINE, 0, h - 1, 1, 1); naio = numaOpen(nai, 11); pix2 = gplotSimplePix1(naio, "Intensities Opened"); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1,3 */ nait = numaThresholdEdges(naio, 0.4, 0.6, 0.0); numaDestroy(&nai); numaDestroy(&naio); /* Analyze profiles for left/right edges */ GetLeftCut(narl, nart, nait, w, &left); GetRightCut(narl, nart, nait, w, &right); if (rp->display) lept_stderr("left = %d, right = %d\n", left, right); /* Output visuals */ pixa2 = pixaCreate(3); pixaAddPix(pixa2, pixr, L_INSERT); pixaAddPix(pixa2, pix1, L_INSERT); pixaAddPix(pixa2, pix2, L_INSERT); pixd = pixaDisplayTiledInColumns(pixa2, 2, 1.0, 25, 0); pixaDestroy(&pixa2); pixaAddPix(pixa1, pixd, L_INSERT); pixDisplayWithTitle(pixd, 800 * i, 100, NULL, rp->display); if (rp->display) { lept_stderr("narl:"); numaWriteStderr(narl); lept_stderr("nart:"); numaWriteStderr(nart); lept_stderr("nait:"); numaWriteStderr(nait); } pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixgi); numaDestroy(&narl); numaDestroy(&nart); numaDestroy(&nait); } lept_stderr("Writing profiles to /tmp/lept/crop/croptest.pdf\n"); pixaConvertToPdf(pixa1, 75, 1.0, L_JPEG_ENCODE, 0, "Profiles", "/tmp/lept/crop/croptest.pdf"); pixaDestroy(&pixa1); /* Calculate projection profiles from text lines */ pixs = pixRead("1555.007.jpg"); pixGetDimensions(pixs, &w, &h, NULL); na1 = pixReversalProfile(pixs, 0.98, L_HORIZONTAL_LINE, 0, h - 1, 40, 3, 3); pix1 = gplotSimplePix1(na1, "Reversals"); numaDestroy(&na1); na1 = pixAverageIntensityProfile(pixs, 0.98, L_HORIZONTAL_LINE, 0, h - 1, 1, 1); pix2 = gplotSimplePix1(na1, "Intensities"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 5 */ numaDestroy(&na1); pixa1 = pixaCreate(3); pixaAddPix(pixa1, pixScale(pixs, 0.5, 0.5), L_INSERT); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); pixd = pixaDisplayTiledInRows(pixa1, 32, 1000, 1.0, 0, 30, 2); pixWrite("/tmp/lept/crop/profiles.png", pixd, IFF_PNG); pixDisplayWithTitle(pixd, 0, 700, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); pixaDestroy(&pixa1); /* Test rectangle clipping with border */ pix1 = pixRead("lyra.005.jpg"); pix2 = pixScale(pix1, 0.5, 0.5); box1 = boxCreate(125, 50, 180, 230); /* fully contained */ pix3 = pixClipRectangleWithBorder(pix2, box1, 30, &box2); pixRenderBoxArb(pix2, box1, 2, 255, 0, 0); pixRenderBoxArb(pix3, box2, 2, 255, 0, 0); pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pix4 = pixaDisplayTiledInColumns(pixa1, 2, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix4, 325, 700, NULL, rp->display); boxDestroy(&box1); boxDestroy(&box2); pixDestroy(&pix4); pixaDestroy(&pixa1); pix2 = pixScale(pix1, 0.5, 0.5); box1 = boxCreate(125, 10, 180, 270); /* not full border */ pix3 = pixClipRectangleWithBorder(pix2, box1, 30, &box2); pixRenderBoxArb(pix2, box1, 2, 255, 0, 0); pixRenderBoxArb(pix3, box2, 2, 255, 0, 0); pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pix4 = pixaDisplayTiledInColumns(pixa1, 2, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix4, 975, 700, NULL, rp->display); boxDestroy(&box1); boxDestroy(&box2); pixDestroy(&pix4); pixaDestroy(&pixa1); pix2 = pixScale(pix1, 0.5, 0.5); box1 = boxCreate(125, 200, 180, 270); /* not entirely within pix2 */ pix3 = pixClipRectangleWithBorder(pix2, box1, 30, &box2); pixRenderBoxArb(pix2, box1, 2, 255, 0, 0); pixRenderBoxArb(pix3, box2, 2, 255, 0, 0); pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pix4 = pixaDisplayTiledInColumns(pixa1, 2, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix4, 1600, 700, NULL, rp->display); boxDestroy(&box1); boxDestroy(&box2); pixDestroy(&pix4); pixaDestroy(&pixa1); pixDestroy(&pix1); return regTestCleanup(rp); } /* * Use these variable abbreviations: * * pap1: distance from left edge to the page * txt1: distance from left edge to the text * Identify pap1 by (a) 1st downward transition in intensity (nait). * (b) start of 1st lowpass interval (nail) * Identify txt1 by (a) end of 1st lowpass interval (nail) * (b) first upward transition in reversals (nart) * * pap2: distance from right edge to beginning of last upward transition, * plus some extra for safety. * txt1: distance from right edge to the text * Identify pap2 by 1st downward transition in intensity. * Identify txt2 by (a) beginning of 1st lowpass interval from bottom * (b) last downward transition in reversals from bottom */ static l_int32 GetLeftCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 w, l_int32 *pleft) { l_int32 nrl, nrt, nit, start, end, sign, pap1, txt1, del; nrl = numaGetCount(narl); nrt = numaGetCount(nart); nit = numaGetCount(nait); /* Check for small max number of reversals or no edge */ numaGetSpanValues(narl, 0, NULL, &end); if (end < 20 || nrl <= 1) { *pleft = 0; return 0; } /* Where is text and page, scanning from the left? */ pap1 = 0; txt1 = 0; if (nrt >= 4) { /* beginning of first upward transition */ numaGetEdgeValues(nart, 0, &start, NULL, NULL); txt1 = start; } if (nit >= 4) { /* end of first downward trans in (inverse) intensity */ numaGetEdgeValues(nait, 0, NULL, &end, &sign); if (end < txt1 && sign == -1) pap1 = end; else pap1 = 0.5 * txt1; } del = txt1 - pap1; if (del > 20) { txt1 -= L_MIN(20, 0.5 * del); pap1 += L_MIN(20, 0.5 * del); } lept_stderr("txt1 = %d, pap1 = %d\n", txt1, pap1); *pleft = pap1; return 0; } static l_int32 GetRightCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 w, l_int32 *pright) { l_int32 nrt, ntrans, start, end, sign, txt2, pap2, found, trans; nrt = numaGetCount(nart); /* Check for small max number of reversals or no edge */ /* Where is text and page, scanning from the right? */ ntrans = nrt / 3; if (ntrans > 1) { found = FALSE; for (trans = ntrans - 1; trans > 0; --trans) { numaGetEdgeValues(nart, trans, &start, &end, &sign); if (sign == -1) { /* end of textblock */ txt2 = end; found = TRUE; } } if (!found) { txt2 = w - 1; /* take the whole thing! */ pap2 = w - 1; } else { /* found textblock; now find right side of page */ found = FALSE; for (trans = ntrans - 1; trans > 0; --trans) { numaGetEdgeValues(nart, trans, &start, &end, &sign); if (sign == 1 && start > txt2) { pap2 = start; /* start of textblock on other page */ found = TRUE; } } if (!found) { /* no text from other page */ pap2 = w - 1; /* refine later */ } } } else { txt2 = w - 1; pap2 = w - 1; } lept_stderr("txt2 = %d, pap2 = %d\n", txt2, pap2); *pright = pap2; return 0; } leptonica-1.86.0/prog/croppdf.c000066400000000000000000000146111506303110300163270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * croppdf.c * * This program concatenates all pdfs in a directory by rendering them * as images, cropping each image to the foreground region with * options for noise removal and margins, slightly thickens long * horizontal lines (e.g., of a music staff), and to some extent * scales the width to fill a printed page. See documentation for * pixCropImage() for the parameters. * * The pdfs are concatenated in lexical order. Each image is 1 bpp, * rendered at 300 ppi, and encoded with tiffg4. * * Syntax: * croppdf basedir lrclear tbclear edgeclean lrborder tbborder * maxwiden printwiden title fileout * * Typical parameters for an invocation are: * croppdf . 50 50 0 70 70 1.12 1 none * * Parameter %basedir is a directory where the input pdf files are located. * The program will operate on every file in this directory with * the ".pdf" extension, taking them in lexical order. * * Parameter %lrclear and %tbclear parameters give the width of the * regions at the left-right and top-bottom edges of the input image * that are cleared to background as first step in the processing. * * The %edgeclean parameter is used to remove noise that is typically * near the edges of the image: * -2: to extract page embedded in black background * -1: aggressively removes left and right side noise * 0: default, no removal; use for orthographically produced images * 1-15: removal of random noise, where 15 is maximally aggressive * * The suggested value for %lrborder and %tbborder is 70. * Laser printers do not print foreground pixels very close to the * page edges, and using a margin of 70 pixels (about 1/4" at 300 ppi) * will allow all foregrounnd pixels to be printed. * * The %maxwiden parameter allows the foreground to better fill an * 8.5 x 11 inch printed page. It gives the maximum fractional horizontal * stretching allowed. Suggested values are between 1.0 and 1.15. * * If you are not concerned with printing on paper, use the default * value 0 for %printwiden to skip; 1 for 8.5 x 11 paper; 2 for A4. * Widening only takes place if the ratio h/w exceeds the specified paper * size by 3%, and the horizontal scaling factor will not exceed 1.20. * * The %title is the title given to the pdf. Use %title == "none" * to omit the title. * * The pdf output is written to %fileout. It is advisable (but not * required) to have a '.pdf' extension. * * The first processing step is render images from the pdf as RGB * at 300 ppi in ppm format, and to seve them in the directory * /tmp/lept/renderpdf/. * * We use pdftoppm to render the images at 300 pixels/inch for a * full page. The renderer uses the mediaboxes to decide how big * to make the images. If those boxes have values that are too large, * the intermediate ppm images can be very large. To prevent that, * we compute the resolution to input to pdftoppm that results * in RGB ppm images representing page images at about 300 ppi. * These images are about 25MB, and are written quickly because * there is no compression. * N.B. This requires running pdftoppm from the Poppler package * of pdf utilities. For non-unix systems, this requires * installation of the cygwin Poppler package: * https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86/poppler/ * poppler-0.26.5-1 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { char buf[256]; char *basedir, *title, *fileout; l_int32 lrclear, tbclear, edgeclean, lrborder, tbborder; l_int32 printwiden, render_res; l_float32 maxwiden; SARRAY *safiles; if (argc != 11) return ERROR_INT( "Syntax: croppdf basedir lrclear tbclear edgeclean " "lrborder tbborder maxwiden printwiden title fileout", __func__, 1); basedir = argv[1]; lrclear = atoi(argv[2]); tbclear = atoi(argv[3]); edgeclean = atoi(argv[4]); lrborder = atoi(argv[5]); tbborder = atoi(argv[6]); maxwiden = atof(argv[7]); printwiden = atoi(argv[8]); title = argv[9]; fileout = argv[10]; setLeptDebugOK(1); /* Render all images from pdfs */ if (l_pdfRenderFiles(basedir, NULL, 300, &safiles)) return ERROR_INT_1("rendering failed from basedir", basedir, __func__, 1); /* Process each image and collect all resulting 1 bpp images * in memory. If n > 200, use pixacomp instead of pixa to * store the images before generating the pdf. */ lept_stderr("cropping ...\n"); cropFilesToPdf(safiles, lrclear, tbclear, edgeclean, lrborder, tbborder, maxwiden, printwiden, title, fileout); sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/prog/croptext.c000066400000000000000000000070241506303110300165420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * croptext.c * * Simple program that crops text pages to a given border * * Syntax: * croptext dirin border dirout * where * border = number of pixels added on each side (e.g., 50) * * The output file name has the same tail as the input file name. * If dirout is the same as dirin, you overwrite the input files. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *dirout, *infile, *outfile, *tail; l_int32 i, nfiles, border, x, y, w, h, xb, yb, wb, hb; BOX *box1, *box2; BOXA *boxa1, *boxa2; PIX *pixs, *pixt1, *pixd; SARRAY *safiles; if (argc != 4) return ERROR_INT("Syntax: croptext dirin border dirout", __func__, 1); dirin = argv[1]; border = atoi(argv[2]); dirout = argv[3]; setLeptDebugOK(1); safiles = getSortedPathnamesInDirectory(dirin, NULL, 0, 0); nfiles = sarrayGetCount(safiles); for (i = 0; i < nfiles; i++) { infile = sarrayGetString(safiles, i, L_NOCOPY); splitPathAtDirectory(infile, NULL, &tail); outfile = genPathname(dirout, tail); pixs = pixRead(infile); pixt1 = pixMorphSequence(pixs, "r11 + c10.40 + o5.5 + x4", 0); boxa1 = pixConnComp(pixt1, NULL, 8); if (boxaGetCount(boxa1) == 0) { lept_stderr("Warning: no components on page %s\n", tail); continue; } boxa2 = boxaSort(boxa1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); box1 = boxaGetBox(boxa2, 0, L_CLONE); boxGetGeometry(box1, &x, &y, &w, &h); xb = L_MAX(0, x - border); yb = L_MAX(0, y - border); wb = w + 2 * border; hb = h + 2 * border; box2 = boxCreate(xb, yb, wb, hb); pixd = pixClipRectangle(pixs, box2, NULL); pixWrite(outfile, pixd, IFF_TIFF_G4); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixd); boxaDestroy(&boxa1); boxaDestroy(&boxa2); } return 0; } leptonica-1.86.0/prog/dave-orig.png000066400000000000000000005573201506303110300171220ustar00rootroot00000000000000‰PNG  IHDRgŅ50Ļ pHYsŊ!ʀIDATxœėŊYˇäHr&ö™šˆ=îš{m]Í&O7‘”4GĸŽ~„õsõ0Ŗ…œQ“l6›ėŽęĒęÜī{āfĻ@â.™7ŗrzd'OŪāģn›odØ&ƒPūAÁT P|Üyø¯…ę….šĀhEĘVēMM­pˇyjŸ¯-×;Ч×6s-|ãˇ˛2` 5ØémsîŊAŪŗÕø#ôĐ;ˇX-ōĩ5§¸Ė€=8ã[&ađø0¨šMîīœ)í>ß-ÕM¸ídõPīHīT=ēu† ˆË!Ј3ǁĘ˙ŦąpîN?§Zå> æĒ帧 ī›šŽĩކ”‹7y-vZû:Ō[ķ€wĄŌwyzģ8ÛÆRņ\SČ6‰|y´éī5‹Vž1ķûĨ n23jĘĀ66ŸÅÜžÂÜĸ{{ÛJIs‹Dî¯1Ū‹ņāØ#7oK;ôžzGQĸÛUĮö=Ū)…Ŋ÷8Û(ŖÚĪzĄÜVvהĘöiFõMšŲuī’Đ=’% ėÃY“Δ\w`ôiŋ¯MEki`Ŗšgēuw¯ŲĖLīb‘ėdH×~Ŋą4w |›ô2éāülkŒcwoåîĘÚj¸ĩZRûh›ą|@”Ũ(˙ׅ¨Äš‰}­?īŒÚō}ŪD×fxÃ×[Đ{E§˛ pnßF Û˙Ŋ™nˆu;€îȝģøļîpĮtk´0÷*ų•Â]ŸßŽ×îf‘žķē?MnWYk*Čũ*Ј3˙ęQSŽ;-V¸p÷¸ÕšË,pØ>š|ZĢËĶĄr3ƒģ4;(ŊlÛæúú‘įš*4āĖ€oTŒįšû –¨ÕŪæŨ~S“íHÚķû–t€ŨJī}tĪŠ" nD×ö¤ÅĮOģųŋs|ÚcojˆŨ[%˛õlt“äû -ukę}ÜŌaũ”ö¤Ũ‚­ƒž |( ¯ų@ƒ˙L;˛§ļ ĨŲHÁŠ•´ˇÔÛž¸w¤Jén9Ėīmâ°ĒšīqtmŋŪ| ö Á~†utN>m–›p+LPđ.sĒŊķ¨ ĻJ(ĒEĒéļ°cnŨT-÷Fuå˙ÆâhŗīVŠŅkßĀ(+Ųí˜W´ōcÃđ}ķ#fX 8#3LĄH"Ux‰1Ôy3&°pēŠE€S9(+ØRŖ-æOj”ĪĮ–/ĄÃnĶ9ĩ3uxdc¸lGÜkĖÜD͓@5ŋÄ ÉėÂgŋUy‹WŸ™: ŅŪÔ Ëā@āL‚éĸĪ y‚žÁ1_ĻÆ­vžƒÆ b0ÅLF`RæÔGf˜Ė‘*9ž+ĖyG,ĘdŪ‘)ˆ čzĻÄĒŖkÃ5ˇņŧÆĐKVųc¸ĩ|ÚL“F_nÃŦûn×oXų›Ģ 7 b“ö†×˜{a,á•ļĘ_KūŋL5‘YĘ0j˛7õÛ19čq2žĐawĩ"¯aŅ’Ā‘›%™ĩÔ@Ū÷iŒ•\‡{i ˜'‰1GĻŦ3ZҌ§ #Šŧ ËZ>ŌĖm%nÁ9Ė)!˜Č@Čú´ėō$<ƒE}â-Mۙ8Î  '\Ė*ŽL'læĖ˜Ę)Ė`áL Ú֐Y‹™ĀŽŌĢbŽ,gąģíŅØ|Í+#hƒC‰ŨMå­˙ßĀG•7˜û8sž PíMŪH‘oWCvIBr%žĻ̘ŗ`–šw.ŦR2āŧŽDāRÅd) Ŗā<‰hā֕OŽē˜ŧĩ9ĮĩÂĨ„Vđ /t ØĮLÎĩ0[Ž& `‡L įiÕO–r0ew5𜮴;ȨtEA|4gĩ>¯Ô;įŦ ĸĖâXƒcĨHģ˛4DŦą`n1Ņ\SëB)ubаp  ‘šLŒĨY׹“Œ\]F‘)@Ē^–ØĮĖb 2G€ōlĐĖų&{@¤ PÁ— ëõG5Ém&\™|ßVål‡ĘÎŲQ˛Ė;‚õvķ1wJPäŧ×ĪëŋõÉôMˇëŧT˜Å˜A0 ÅD° ŪаŒ)¤Æ€“E蘘kXŽ21{ F*BdF´œšyUÎ2‘ĸ­’Q2ƒqÄ šņƒe¸T§2{žR+ÍĖwxÁÜ]pË"Ŧ#ŗD`>†vŒh…Ō!І…Qöuƒ…ĀÄ 5īMD"‚eāŨi¨Úę `\™m`ŗu]wÕ"n› īėʁĘ+ũœä&LëĻ ę%f^ëxD‘ĪŲŊ’MČÃM færŅfT¸ŪČ` %ĻŧÉ2%rȌ‰Č”ŠsVęāâ @l™°cSSsd&L’ é{ĩ,0ŠE™ û)a:œ)8Ķ(čø´ŖvÄ­4DĢ)š)2JÕۘ’4 80­X‚Įp9g•ĀčķXctģ†eF.vS‚wΔŊ÷Ü 4Ž; āąZŠ*q,‹öD§˜OD4tĒŽĀĖy2%V#3ęy–ĀÎÃĒJԝS¤YĻ·%PDAœ[xø rŽšˈĄX̰ …TÄ"ŸëŦ™)3#ĀxÛÕ°GK¸†Öđ!Į,žÉ`nģëā{ §Š†ą˛‡6šÉF&΀b¨RŅMų*ĩnĄáÜÅØW#"Y0gDjšákÆĻI…­Ø@Ä+ĘĩĖ(¤B š žŪXėɈ‰ab sLŌ`Îą¨Ųéd!+g4bĐHĄ4zĢÎVˇ'ķÃõĪ-ö…Šj?ō+Ž]Č,Ė}äŧŸp‚UĮŽĮ Š ŊhļŒ‚&æŧGWHÅk O‹kDĸÅž+ŪÔ,2Ãâ vēėëĘ(rĘpdŒ@>,ģČ1;;S%˜ąSrĻLb¨PĖLfDR"œ°2UŽ<„XÉõŒĻČ7‘¨ä^‡ŧŖ4`&ŋĖwnŨy7-nÍ[ßw.Ŗ’ÕSlĐ/6ãË8žÖUÚģTuf{Ŧnŗŧ{æšsU" ĘD P@5U˜s!Ŧ’ĸYfĸLŪ/Á‘ģ°š&ĒÂ&ŗã)T=/ɛösŗ,i¯5^z]įĒXt0ā.dDœeĸ‡Â&í âee @´ÛÜT´3‹ZgÆ1Û@Į!Ђ‘ÁV§­Ų`á, g&Ũˆ8r.rũĨt)Ķ(˛ĀÎ(&ɔ\L‘÷ąĪŒ§|ˆTD–Ceæ8u&  ė ĮNf“”åš]\įÚŪÖ´4įŊđ7Đ:ũģfT¸8vŠŧwRiËIrgRI‡jļĻ*sQ(‘A•`ĖØ” ‘¨gĩ\ąˇ™)g™EŽ(ĀĐZ“JFf}Ĩؙ-&ĸ”0‹@AųWąÎĨ¯ŽˆCvpĩđ Į­(C?"ãŌoųKŠĖX3#drę-U‡žLtÅąĒ"O4ŖølÎmVō ėY'ō˙Ãŗ;°ŅđN8kčl÷˙mĐpk ŠæjŊ%Îj‰ī‰Se‡7š{oõr7ņmĸĻVk¸;V3-LÍu`喂jŽ­•ƒL2cfÔ *ĪXP äŊ‹ĀHSsžČB°Č/Uȁ),ŖV€î”ŧåŪIY*!€|lf0}kŪ÷ūä¸ÉŪ&}4¯ŧ¨tDŸŦßVũž¸gģooTŋ‹ųŗŨëĄ\­JĩĀīâ"xGڞ­Øjˇ}RUŠ­LĄŪŗˆŪ¤q?Õ3Ģ)jĻWÄĮh˛7ĄĻ×lĒŠ”×@›zbaģÄ{˙íĩøwŅģĐĩŽļ"Uĩ‘ĸQ°ū%)7īw˛ë÷nUĀ´ĶëčlXTšŅģ^šÆzŨĸ˛7ī,Ûîé\R4ÔnLŦÜ×,Ą¯ƒÔÕÆ;Ĩ}īô.Ņîī†AbæĩEhÄ؜rSn‹9Õŧ§hĨ–["ˏŒZŧ،ļ ŦŽÃÛˇÂŲö÷ņu)Ôˆ6ģˇQ7"+‰TôģK§ėpÁwgÆīKļUĸ,Ą=8‹ļÆxŠžlđŗ-ķĒŪÖQPQ8 â6ÉÖųûMb‰ö=U5ģ†áU-žm~îOēáĶÚ-T—§;éŖ6¨wlø?ŪaŲú~œÜ„ õÚßB7§ķî0Uh\ļä¨ÉÚHDc€jmWl]ŲËHĘEÕEˇ›Ÿˇoøš Õ¤ã56IEjÖԙõk5W-}ĨūVœ-S&ĢÆi€ÔY-ÁũJPC"węÕ[¨? 3@œ¨qũą–>Í­OĨRŧáÅĢræi+ÁJ[ĄĘ#‹˛y|ō牴û6ب5õŪv—­ ëĄÂ¨ŽÛb |UY—ßö!tī\Ø˛×ęķvÅĩĩ÷ĸ fāĨė;_#¤ų˲ˇ6ÃÖ°žc@Eų" ĒŸįŸÅ•'=m5Ķ–Øä2‡ŖXKSIŽ*ī+Ą QŋļŠĒ˜[—f› ŌÖ O`”?ķ™CĐz•ß6ˆ-<ą´ŅUĀŦ‚ũĻ6Ų~ˇBģ!ĒLš)ĄJ˜7mT õN¯%ŖžîYFސ!ģ†[áÂ6#P T=n§HĻ, ā¤ĻeUļŊ´đēĻ*øKˇP­nauÆR?jôkh‹ËļÜ,ņ,ūrqŽH1Hĩœûތ™’¯1m†p9ŋNxsÄšM…r‰fMūázn.Y×Ļ%]õ“–BŲJD›ЏŽéŧ,Uí/WAķÚļ`-„eÎ&×ųPÍ9įĶ">Œ 3bgíáZb1m!ã]ēŊĸŋ‡Ü}_Đq2JöĻ4Š)iÔ&H$!įđĸJũÖĐ*)´ĩuUŽÎÚÖŠŪ˛(%vëY`@RŠyŖD'éļaÆõøĸuWđĄ"Ŋ2„ rÚF SZ¯§*R.jĸ’1Vrö¸6ÆĒDŲÅÁm…åĮ y§PŅëd˜%žč65ąr9NÉhÖᅸØZ˛s ˆúĩ ]IĄĻm7 ”-~VWÅ ›S5@cģŽĢ&ę$đÆ]cŠ+%kŠ=­P­ĐÛ…ÚšŲaĢĢķRJ•ŠR­ęUÛčžkĢiwD^Gût]ãâ†Dö}O~f* îQŖŊyÕ9,Կƨ*LÍ­"Ŧ-ĢĄĮ”¸ˆZkXŖJ̝ëîRÎmKŦ†­|V˛ļœ“ˆ1xŽcFđœãHƒ[sâ"„3 Væŧ5 ›j)o „¨`ŋT-“XƜšC1¯b*'ōöņkŗr=bEũģ%K*÷öí"âŪ”Ŧw ĩ˛ãŠ4ڛąZĨĢ*tŪãĻę| Áõ† [KËĮsé˙(ḛ̈ü}ŠŽpm”z•Н–úך$ DThb5iĨY@ĪĖrŲNJļVŲ,dYÅĖQĄ“™ܖąR3+˙ō2pĻy5K€f@F "PqōmŨAKĀÔ)`Fšģ_e_3ķĘá0륞 ScÔīOī›Ž…ņô1q&å^Ą<āú}ŽŲšĸšš 3ĸĩĸ ‘—‹AÖEeQäŗfē˜¨Ŧ(VL0-×Ā"Ž pđ "ĀC@™Ø”HV†šÛÜząį!li įr|l9/4#r0Ęu|3G€*š|? c3 ÎĖ•ŋķBmלœ*AÍ|jÛ†X̏ļiƒšëâ=éC2>Ž÷í߄ŦÕô…b€ļŦ?HÁ%ČČÔļøžā ų’TBÉčv5—ũ XÕĶ+aĢZ\Éf ĪkŪ5š•‚ŽLāĖX„fããĩŒâ‹s›>ˆ¨Ã„-‡ėŦg€‡ĀdDpV(ū \4æK•Ũ։ŨČ9TMÖŌ8Ø aXÁųîŠB0¸5S˛uƒVZŖž8­b<ŊëúËJb÷¸2%æU4žԝ7Æ6ȨÚuFfL%Ī.ۋ+1jēŊÛ¨|ų–“[ŽjlåRÔŦew^ļŧÃKéˆÜTøZ§F›îŽĻP/… ØĖkJ\ŗ.ޝ(i}ŅRi0”œd=Pß ASōÆáJY5 o§ZÖ#ôLgĶ4{}é˜úDķ+S}ķYäņf3eފ)"ãÍ"+îîP"Wr-¨‹`ėˆ ¤ęfƒÆFY+XJA{…?ČĒ^Õ[kŅwũ7[ĻČmáōÁŨ–!ÍŊ>×äŧaߘW̞“bÁPžåúų:\Ū fÕĶNvđ¸§Ø•  Ņ6˙#OڔJ}g9^Ņx5 aôEÔöjėi=ŸXē oûctƒĨŠÚt>ë—Į.jE\ąa$PT;œ˜LĩÄbJaJē’~Éõ ÂŧÛ`ŗR‘ĩĶZEœįÜO„­FßTĶÖKę-\mí¨×6¤UlÛ Ô›"îIm+fÅađšOҏ? nÎP5NĨ$#aÛ+š×oUąČm’%Ô~ۊęE [û­r… €}ûöMbgæ0z89z3(rėaŗgįIˇ?xÖv>ā&ĻbggáÕ°rė[P0TŠ™8W-Yu9F ¨™‘‰RäŠ1dĢÜXD&æ*ËH ­­ĄÎkUŖÚ˜TûļNˇÁY3˛ŧÅ*3uīŦŖmķ€Z¯ü ×mį-ž“q‰‰jrTC.U{ĢD-Ļhjú*ƒų~Ųļ• – \b`ņÍ[ÍčƒVė¯ÜŲŲZŒ[D֛gŊ‡¨/ b—)1“‘‡AvCĒúâ‡GĮ‰÷f€<Ķ͜YEĀEŒ\Žøõø"Ú°Ā\[ ’ęķē•Ökav•¤Ę„}åO[_?V•”=¸1Ũlé6ÖāxË ē/˛Rmú„Š Ģ”ĩZĨ­*Tŧ• V6ázšąøPY Tģžk+ŗ›‡åχPēV /•¤aüÍëÖŗÅ÷Ãß´œ§,Õˇ¯ß~ÉKcĮA.~úoĖŪād†K"īOŊ#ÅŲŽŌlÔöhØÔ2•BŽZ3áRSÛÆĘŽ–[jw{ĸWų™‚ŠÂĒē[ ›ņ}3ÎĘ`Ķ÷–šË~jž°7ū¸gÛŌĢ.E›ęEÛÕĢ$Saū[ãĨEą¯ S3€ O×åôĘČ/|ōĐP˜“—éĀé?š|sø“Č`:Ÿ˛ëB*W3Lē¤×qNõí˧=^ŲķG‡IÁdrC’Ē2Æ6ƒU ÅÖˇŨÁ Ø_mšJŗÔĻÖ6ēįgĨK 8ŗ É8ĢIåõ”}­}{ôm3x‘\‡ŗššŋÉëēĨrYåÛíĘQMōĻBŪgĩÄÍĖf2옸§úíŅp0X›!*2ŋÄąū Ę?÷ųāiÆq `3•9y>7{˜`ōƒOÄŪėõ<Ĩg‰ãrUŖŠ‹l¨Zī%lÍ$öÜÖÚqéæ ÔÔ*ļ—ŸUĨKŖļˇˇŨęĒô‡ÁŲ׈ŗõ"ŗ2÷rģéŪä‚m­–ÚÖų¨Ę kŠn×éļu4˛Č2šˆû&ß}¯G-Zũ‹Ū™Sķēũ‹GĮ§E%uąˆ]×ÖÚyĘĖ&ú `ĮŦ!“įéøÄuO+ĩ' JŧUÜ Ķ!ĀTyŊ‚ŗ&Ėhä­R_@Õ$ī(Đö´Û,+\âš Ū gEšĻ#> Æõg˛ĸˆDÉ-c6ÕØÄ 3r5įæ|3<͊ōCX,įÁUčV1[h"&äJõmæV)âēĖ›1ZŅĮ6AŠGIĪŋyc=ķ—é¸÷đ´ķ¤÷úˇĮ‡ķw%_ŦÁ¤Z?ĩ‹Ö1r5ÜíXēDTō+ĪųYė;ōb~ԍ\&čNč÷îáŸųÍFX˛štŦ–§ ōPƒjÍĒTuĐÕ´Œ2ãBánTAüF1Ū˛>éüë‚ÎΖÂjČ"ļ`ЍĨjepæ:GoRãaĖg@&}ī\ĖÖIMU]b—樋zÄBąˇ j€OÂĘŌėøęȑS%Ļ™°I˛;Âë!›ÍY)I˜EH3ęŽRÄ4c¨sPŠežXĻmRp9DÛ˙đÛËūđ¯žņüōų#>^>ęæ“€lŲ‰ĮWîj‡ÎD:¤xĐzuGŽ@lĖlŠuįĒÜËOP 0Š\–Q’đøÍqŌķ6ŦzŊ—öE/_Úh( oųÂÚRÅÚ&ے"ČÁHĀzĄ[ųŽœm‰ĘƝˇŨŋT{یZĒÁī>hÆ;@ŖđRâXdÁĐ,d}ī5ŪVĒ‘˛-9j_-GĖ—j™8Į€ŠfÁŽ”]—ąĖ@˲šēn[AÅqwdN SéŠOŖQDĀ*“S(™˜s°#2‹ŨLŦë!Ŋ)ZėĨĄĮaeŠá,pBėFžûs }'ÁŅ…?{A?;=t§ŗŅkę™ęĢîĪũۇ¤ÚÆėŧˇ\ĸ L2S’¸˙ÁČ!‹Ė@jĶËö°ī'ČiģĨ6‹Û ĨgãŪĶ~đŋ“NøCúķ'h"ŅĐĖŧ›û\‹ ’`މķŗÕJÎhbė;ūZÚ×ûuXī„ŠrĮ=–éÎÛæ”Ū 8Ŗ=vĀŧŊ_Ûô•–‘*ŖĐ‹Ų„0 Ēh倍3ĀØ[ȁØDÉaE6eOL˖ŠN‚R-• kFŧ q°ÄT]§4æNyšË,ņjtÕ&ĶĨca'+c\j–õē“Q˜[‡č0ƒ“L ~âƒųÃ,˜†4L:ŪuŧŒģe›VƒŠę`:Rúĸ-Dō¤š†îĘ\ĮģuQÔΈ´ĨǘOéŗîáËWÃáŋŖŸÄäZ6‹Y4xg™v$ 6„¨-ÉŧH7˛Š‹"J&E>-ĄQGVˆÆ]cu‚ĻB-@˜OTĀÂˤFRb(K€ŊCą$ĻXCZ:NÖ¯š{xˇˆ€­nße‘´Ë ˇĐSģ v†ĶFœŲĒĩ­ßNC¸a´*xģ„–‹…\ģÖb™DqyŒōi F0˛1DN)¤€ãŠž†_ÍVūâãT^žüÍŊ2’Lč`6ëúņ"Œč’âȅĐéĘØų–c sŠ&K}HĻÄF1­ĩæúÍēÂdĒsg†ŠFÎz!ŒzēÄ]tŌ, pÆdēt§pc,ĐģĐ~ÄLcŌÃE//Ú]%¤ŽÛ‚Ž´§%ØYälŠû˜˜[aIžb7@Waˆā-tŲՋC į( ˜B𑘘÷„IÔ31ån<IŅf"*4(ÁH´M.(ā=ĐĖ;•é 3bī ų|ĨãøŊäčZ>ĢŊæGÍ8m3Ö}îą7L GÛaˇÂ\ßFugĢîjÚNõ<ūŧũtāHíų/åŲĪz–Áæ DdBc"ë¯ÚŪ›ERZļ#AĪ^~vâČHą#ÍŧË´)Ļ`$KÅG_¸ûÛãa”ē.Č1.( Ô ’’fäș@—QâϚfŠp›įš¤;˛ŒlĨūØÍæ’ĩ3utæãĮœeˆ}•‡së°Ķp|ĨĖb[–eäb§8oˇá˜•“ÔOģvđÎŽ\ßĀĶ÷ŊģPĮ–eũd’øØRaãæŊz3ž“ŦôĀ”ŖDՙx&#ŦÚLķI@Į iÔŌG`hsdTĨŸYĪL™Ĩæ#'pA=‹ĢE‘Ø@)ŧįE”ßiR*’ SÂ|¤Ÿ5ú5š4ÍfĶģú&đ¯“¨ŦĖģ9ę*FŨĀ/dH—¯đ“/]Īüü;zđŗžíÔ3>y(â˜`Åyrfa5ĩcO–Ī\{] ä­D•œōS˛ĪŋÅéŌĢËî‘÷ŪÔØ@ĻÆ,`ą!įĄ‘ĀŦŠļ…b"3QGa%–&$āĢVûučŌŌ„" ŽŽāQHÕsˆČ˛ J|ų€"2ÖI`^Ŧ,3>ĸąÍŊë_°“Ė%Áhvyęëœįŗ¨EŌÍd~2!3 ĄGΤ7qm5ģęÄĢ´Œą 8Î(q<é0UĩŽwmō3FKĄYWá)‘Ģ~Ē yGÎČĖ”wAFy'Ęą‰÷&{ÕŒŲ˚×5ņŗüĮîō˛Ę´Ëû%û:¯ģpäjr•Œ ’ũūÄwyųėņ#~ûËĮôŗcX)œ­ė)—ĮÅē‰ü2ˆå„úŪCíÕĢ_$9Š’kž5 ĒE$›:{9čÃėՈZOkžé5(Ë{ĒĮÍmXđz~ĮŒ,Īxd"\nŧ (°SA…LsĻLĻff–¯ļĨuÕ@žGę"jGĀ<6ĩÔ(˜´TTã÷˛2?'Š7q‹tąŠ,S2ŠtAЊ7ōcĮ 5L }… S:xĶ"Ocí‰AH%x¯Ë8ō"3įŲ„ŧɐĮãGĻjũž‹H.¸Ā˙8[%ĩ ›ŽŨÅHŨŸ|#Κ€vŖŗģŽ3CšŨ7ČųŲĶŅïZ]"Ņ×ßéāôĄƒĀ‰BØŲÜGž ‹|+ˆ'†ä×K¤aŪk3$û.ûŗra‰–˛ĻÕJ™$å˜D-;{%ž ų]yÉ›e[­VúŌ¨YXCņėŅېæģs¸Š­­8Ķ"DpˆÉČD4ŗ˜ C a˜™Ŗ`bÎY*æˆök]Ι%ՑLį\:â&'TvząĐÂ@€dŠŅ\ûގfÚ6ĀÜÅ—XûTÉMOF˙ŽĮON*|ũĘ~UOEcĄLŧ* lí8ŊûH%4^ ~cB÷Ál3ŪĘXBhÂÉöņfˇĘ ˙{Í2Ī=āŊ6F­ôØ2QĮėųčŲQĮô,ĨŋXŧ=čx[IGô$*#ÄTČ`ļŪÕ .ņŖuNuŗÁyŗ:æõjŠ)ûˇÜråA⊋FŠ )–rF€ÚÃņp4~1“ĮĄģá(;•ĩMŖVæ|KūYūw‹ŽŪdī—Š$¯#zã>$v=ŧ>œķÜe ‡ÕÜ@åĸŠJF \Ģ/Ēą÷%ŧÃ7›(:vãŲ—§„Ņī““9UûA\?$,čDiŧú:Aš:œ ė)y9ęœ &Č!_°FëĶi‚ÎĪ|ÔĄøĐc‰Å÷îd°>3Ą2yNâ…ĩđÆâãÍ@Xsŗu•Ę[_w•ēånĊōîģälëįûč>˜+и߉ļÚ¤šÆ›!bĨū[ŋI ú '4ÎÚ5Vpŗ Ú:,­EKxzn‡zöŲlõäí‹Éß>YÚJ™N.åQ8;:ōEá6ZPžR‚ųđõ›ÃĮj„rsā•´NZœe—ã™„.ņ‹—O†Ž×ŒU3‘žDQôlĨōfųÃãĄŖáŊÖŦrm­rëkŲõ&0i _Ēwë#}ß̃Ë÷wŗ,îGŠ.ˆ˜ičúYŗhˇíī{ÖރFahZC‚›“yëĒå1zŪûĒ˙oi´ˆ'ŗSû÷Q–Dč_ Ú}yLY­†‚ĀĖ4œ˙Ķī~ūŸŽ–Ęô,":pÁųh|éÚÄį-]|ķô‘!ŋ¤a:<~#xäÛÁ}AXŌ樠õÍĪ<¨qëZGšq.ŽEšÜ[a+ŽRģÃaō{ÛngßŒnGœ†U„F~—?Đ`ëT6딯îŽ/l§|ËÁ[ŗ(Ču/N">īL#Nčí˟†^8˙æD:‰×%ÎåŅĒįåĒës14Čšē>ôlüâÍĶîĸ Ķ—Ą7[ĻoŸ<ĸe r€÷é~ƒė@ÅÜ8;anåķa]M^‡‘ÚËÎŪ9Ú*)ĄØ&@ģŽė˛k8ˇ5Œí=PV¤~‹;n6öîéŲŧ4č&ë“jíđŗ†0ˇĨ­XMjÄ5}š™é5Ņë?éŸD‘ØĢ˙û †Čėā/">p°tžQ—aÅĖ4rš(úüĨę×ūâßč)ĶC†ŪÆqb–ĖúŠÚ+<ÉÅO–ĘŲåĶ#GLĨ f€íŗįߨį{ÛMUvâfNĩZ–X˛šw°*)j{^īJˇę–{’{3š<Ôt.UkÉËŗ-=ī‘î\Ų[ļĸoŋ™˙ė?<ōĀDĖyrCÕÖĢėņĄsdÃK1y{0ú“ūôõQB@öęObœ¯Žūā˙ĸīMÚxÉi<:('“HiqpF{vyz8x;Š=`Q‡eņ2kõ´h0ēzp ŊŲÅŠ+ÎÕÖUtáz×ÄnõĒʒŊ‹ƒö]郋Oė6†i°äúl?Š\ŋ™ĖĻáˇoŽžîũ§ŋüŗˇĪ˙õâô?üI1EĸJLa‹$vĻ”fJKf^šŽrËā7¯žėēW¤ŗgŪŠZ¯Gf#zE?ÛX„éú8ÁI+ abō÷*¸Ė^ĸ§"t8´ŲNNŧ)ȑaō??á:ß*’ÃVË՝Ļú˜ÍģQ7ī­†éxØmĐĪđt°{'Ŋēú~öøÉwß%Ķ?|Ë?˙ķgI~kAán÷Š9x  Ÿ6lČh"–}ķė'>¸ˆ0w:ÂpôđwãAéΧdģ\ķס=|KžČČ9=ÕŖđōŒ¸wŃėåĄcŠE„Áã×Ãhë„Zė8PwˇŅ~Tē_ŒéžķĪDˇßÜ{æ÷@[.^†/˙´õvųũˇ˙ÕOžhåą¤EŪ5˜)Ÿx#…ķoø‹Įôē‹īĎ´=ĸŰPŅ '¸i7ģ8f~ôC<ĖSb°Įāáۗa†Øs˛‚ŧČėgŋ^ŪmöšJģŠ?l~ęfiãũč.„îŽīĻúæSœA˛—ŋšøâ¸uõ{™ČŖ˙ū/wuÚ~*ŧㅚ-gîÖnûöÕôāė`úļU\ܝīÂ0zĀāᲡ9z—l8<ųvté{Jßč té}ļŦ)ķ•[úŽ)áÍ3Ŋ”>LÆäû“vÍgB¸lâÜ?67ß&ãÅ÷ļŸļCÚ=ú›˙íīŽš›ÉĖŦščšŽĻ'KáFJ: >yĖĄ TÁų–8ņšG "€hđįŋXüÛ+}y–ĻšŸŋL„î‘U%Ų8fķp¨”ŪĮ[öiSkßŧ“nēO c@ŗķåāčËL¯BôčĢģhŧ8ûķv7wEän ŽƒxužÍ6*o ķ9W:´iˇ˛•Ü™üũŋ~ÕN..ņš!…Ųđũ§>I…åޤŽP3v?|ō•3ƒáruâ"I˙E“‡z˜QAČweZáwršī@é[ēΎę–sRåDĸ'˙ķƒįi+^mÔ}—tVĨ¸Ģú#äjiŗŸ*ĩĮOsPI†÷įäĻgÚû_í-ᎊV’Aŗ6ÕūāōƒB‰úĢR'ƒ”‡˙SĄãÅ[išũĪoŸ?ęûŧ>ĖØņÖ%ķ %üôšõūIeąįdŪs@É'F6i-;úÃwúį_žS‰O¯FĒĮ¤ü">L+ĒûVâ´+)|ųūjžnĸeym㏇Ē] InN6 ´W‰ūņ‰Îų­hņ‡VįËŪ;õˆÅĘē%ĢJ{´WyS~/Ŧī:|ô“Į_g˙ī˙ķ*@Õķë˙›Ļĸvqæë7LÜEgøx¸tĢŠīú–ŊũĮÕã“wƒŲ|åS˗^7õlāsˇjœs'ĶYūęīGÕÆÛY ķéÛGÅęŸ]œ%!wÔ~BÂã¸Į“_žLO{7GhĸöhÕiūļ˙.Ãæā 7é]ûGƇnv6•ūWËwJ€\4âéî•ļVËēq÷/æŋ™|rŽÆ•¸ŊÚÃĪL fVū-¨ķũõoûŧf˜=c“ŒŽZç§ī˜J']EņV‘–U~7ŅŠƒųāp:z°úUhÕÆÃĨÛâF"Žöāl>• ’.S š÷ļqˇĮ afĻûŨôˇ#[ŧĘėÅĸÎđ׏¯a?ģŲ”oÍ@čTŋ[ÉéÎĄĻĶoĸ_\ũ:äūŊęDë]Ōú##É7R7ėXŧĻeâŊ"d īúfKŠI(á‘yëf422Aŗˆzgė,#o ė+;ē‹)-*ŦŧĢSřĩûĄô{@Wŗ§“Åat1~üuáâË;vGõŪ?›ÁÔûC+Ī HÖø¸ķôBtōrĐšzûôOūũģ/Ü'9…ōã;?ižũ‡˙ëĀX‚e+øįÉGHc?iĢqä& ŌÔË =% – ëclč/‹éŗ9…ëH°–„Č™Áŗéô„Į€8€T™‘‰9SFqĒđĻ{ŠĢsT˜Š‚S!6˜ÚËéb˛8ˇ|0TâiË[ )ågķįVdnĘ×éku§0§/ÂŅfDŦa^ŅPĢģ_ļ–ÁļNhéå3L¯Üsōq?mÆŲáWŸŦ&ėX͌Ôēb•ā˛qĮ{MĄËLÅ<đx)ĸd ,øŠ"ÎüãˌUŧƒu&6ėÛŲĄ ÂŌ:Æĩ ä,€Ž­ė#įXÉķžĸĸ”Ŧb"öˆr+Îk@äÔD_ÍäU4ŋødâËķ“ĶĨdÖĸԀ4cgæIŲ#™gU"‹dÔuʼnÎČĩF—Â׎IĖy ĒđÎ`"ÄgUžXáÆU2™áDßdŲ÷_?yņŧ§Ø6,=ĢŅ?M4áŦ÷W_ĸāüÜPc†)‰9ÍVė|žßG2ōA=Í1I0VŅL%ë›ō][*ņŒ‚€†aHÛ‘Ļ#•0äŲØˇGęfY*mēb2Q x:|_Mi#rSĨ˜Ô,ķnQ tœs˙÷“Wî÷ŗˆČäģ„'â;.Ž3…Č!gÖ§uĶ,rN = *ĒÚ%‚‘ks–édč/gãĢĢ/yŠŽQGį =0r˜õ}žĻ€9U .æ‰pB됅0…)h˜ÄĖĶë“Ãė÷ø ԓ@ŦĘcVøl噖9~ņJV˙[_ û Rq¨øîžēW.7āŪ˙üe×ÎüR…sPpÁą3˜31]8 ˆ‡ °āc,iŅ ÆĸRķnėbĩ™38ĖŖhBĪĶgo"ūĮķ?ûŌŌüR×īBg€+†&f†ā8(Ģ.ŽŨŌE8i-lKĻŽˆč$ˆ,Čĩb˙21T\LiÔ2DŦ g"‡ųÄķ6VŪ‚Fųs—XËØs‚ØĶ¨Ë ãˆe.ž;ŧɂ<=ŋŅŋŽ^ ™9pĖĻ–…!‘gō¤jäØY`6Œˆ¤Ęl+YąZ¸ˆÔĘ;ŲMÄyûQ)īŸģî7¯Ķ>^ûžũ^AŊŲrtę×mģy>DčÖך—ŋ¸ļâ Åf|%×$Ū3KS۝bĢ‰ôųŗŗž}“ũõŸĮ”ģųÎ_"—sŅ˜wlȂ‹•B<{1oŠ8Q’ø,ĢĀŌ@×ßĶį/ÚŊņÔ؊xĀhÄä–KÉ´;ÁėpÁPŒgC1ƒfĮr™QŠFŋ÷Ŋ‹ņoZ'^21gĢĸÁû$tį§4@+Éą' žŒ\w„(vėÆŌa‚ÅA Šo*!Q¤Ū3 bˆ…uŒ›Â;U3†{UīZČU8Á)Ö{“ƒx'ĘL0AåĒĘëŠrČĻ{jûÖk˜Ž1vkvL×ūē‘Ėí ^Ŋq}\/iŸø—ķç­Ō1s|4^,CŋĢb8čVS3Xšé–€Ú…rÄ{ųîÍāđ'-‚Á‘"!ĩ˜™ÍԘ530Ėi %^˛7…ļąf^§>æ9Ž._xp|özøhĐŋĐ|˜ûËaD#8ŦTHÆÃį|Éē#ĪKGK”8čŲČy'c XGÄZP13ííĖ’(AÖ×ŗCÅ,"s=vd™˛ƒGÔå7Aûí˜ĀžLuÂÈĄJōBėzSD‘ķ “( jŖžs–!jvČŧƒą™g† öĻ5uŪBđ ųō~3ZŸŪWŪĨ  ڜHãĪaMįėiËĒũ´’ÔøÛ.²÷ÃÅŖhsq ‡Ûãĸŧlisq1ģJĐúŲāôŲāœ=ûšŠã"†Āe; †ÚĐ9 •ĖœĘËXqútū_Nūė ō&Ι"bˆ &ÆÅŲ­ėL ÄJĩ™ĖĻ€Aԑh“Ë>­$ŠͲ`=S“SYeû4ōP´Rcģn˛ŠæSZ8‚jFÄĐŲÜģždA˜ŗ"ōŊšCÅë˛ohų™cRN@Ī95“ķƒK›xįŨɅ‘"¤Eƒ0u¯2ÖŖE܊ĸ°ĄĒsjÜÆ"q Ž˜'!:ōë‚˛=Ũn×BâŖQžÚĐšî›oô¨ŋfģTrŋ]FŧvžQũ?hh„ÉoOpŒ†ęmÜr۟Ŧ8'Ņ`6Ø÷“Td.<ČP`Bŧī¤¯Îž÷lŊ™4 Ũ‚oÎ…Iq=ą)i”Ûb"Ė021L%ƒ÷*) TIČāÉL˛Ā+Į&æ,Ŧ`sļ…ąĄĶÉY7JCjžģą‰™iĨPŠĻ—jܚ[&DŋĪVĄŸŗ2Õ$ˆ‹HÕÆ8 y3žģŋ{€FšYkŌW;¤`°W˙íZŸ%@áy¨¨“>œûÁöōe‚‘Ĩ^~ĩøų_i6īT5cZCŦÁ*Ŧ¨&…O.ĪéčéķQēėä÷ÜEÁ­ĨKĨâR˛jŽ×c€J.ÍՕqäō'ėviãE˛›×į°Ģ1¨ŋ—ËPš3Ö´`âæœ(9ƒ755ŦŧcSY Į”)Äčröv@ŧs"Đõôámęē•ä~9ņ5đÛŅuÅØĨ¸Ë“)–îĪ˙ũųoIŗh­1ėhš I“ÁōÃ_׹ÁBũ8N/}ƒ3wOB[É6څėí[ŧžģpûãz@äŒ9?æa÷ö‚æ;c‹ÕĄ¸°ä ęng Ūô€&œĨË=g"í´ÛuŊîĖl`°Đ^ŊpÕˇˆWåI˛›Đ´‰˛‡0ĻĪFŲ¯ŋŒTšzčvÁ?6ür§@Č줞mîjņčęwlWíŸÖ2Ŋ­Ļ{mAoĒžãē.ˇÉ°ĻnėÄ|WUʘöŲ›ˇ>_ã‚ģ5ÕĨšë`ô͛ΓüŠûøå¯ŊëĘā z‚ķúĮ gæ‚^]ŒmõÎ~ ØP\ą^e+T _^]/ØĖښ¨<˛î˛?錞Mļ32+æÕZîVīcLß9ū-"ĐôhôŸíŧųŅŊÍÛķãd°žŗĪ‡9ލõŲĢī_ŌWÜ=TŠÕyĪiVü_¨ë×ųãåų—ōüę7é/†ĻĶ~EÕĢ{īÖ0ņų)šE™xĀ›Ë¸EÉbáŌUC%p—fŧÕU sĪ÷ŪEiûnĩ¯ŽŧŲûú@īR.ԁ]íé*›§iD #3ōūķ§Ķq_WËĪFŌŋh%҃ū܋sæ×°Ģ×œ—ŋ}ú8ūŲų/˙ūęoPŋ^Ģ­U ÕÕE”I ˆ…˛v{äN“Dˇ•ī 7k¨îûƒ„ŽyúņČ$&œŨpZPI÷c“Ū–UŌvŲŲŋõNz0HF1ųđāi05súŦe鞱ō˛wûZ%wĻÄ͞dÜŌĮéÕsúōäh}É0€ęÛ{ËUƒ@œeíä…dŅÆ> ­Árß ČķøT€ĩMY.HÎuˇíŪ˙Ģ@Ķ7ƒ‡ €/žs_ģžųü 'ĨÜ;…ŦØķNé­ÔíX€s.žp˙đâō‹¯Ąœ& yØÜ|TØÛƟe ‚Œxy_ôøōYX¸īØzˇļߔŧC"ލŊL;hôĶnŸt]*÷W “­ņĶ ųü3đũķ7Ö,‹ûOhũΏ&?hīÖ6 EeŌŪ}Å˙éQëO ™´Ö9VŨŖųlKņ’Ÿy[Ē^ffYē˜a2ËŌÍ:7T¯ŲŒ5L÷5ĮĻlŸ4Šä×Q4čgŗčīœĸŸvA°Ö—Cûá™Ļ=#_ßXå[ēU)ĮōI|Z?¯ƒŌ{ũ5Ī.\ˇŊ+'CqíÁ”‰TÖρÛ)õ¨GĶ´[GPUŗģ‰ęîÚ˛ĩk­°‘đˇLûã“ÛŖŸe2øčeš5­ģkōëGŸ<Ô=0]ĩģ‡í<@å^‘-oëšEUß­Ķ~ņĪß=K€ŸM‘¨‚8Ŧ•uPHg:¯ú=æ‡õ×ŌŧŽKm0]ĩy÷y4o0Älß Ŋûržw¨õ" q_]įîsnØVrĪd‰€ËÕÅ4Į­gŸņŋßŋø—ËLa"a•ŠˆˆBK`_ Ē;Ë Īڗ>ÕąĸríD™!ōų+sŪšõur•*\*āčjËå&įZ°ŧ6ķÛmm똀üzڛe›îŗÁ߃TÆ{Î×p;sŸ Í˙ãę¯Ī 6ū<}Ÿ~á—#ģÃƒķŅ Ÿu<ŸrÔx8jĩws?Oβ#Í´ŧl­Øj ķ nŗÖÕĨŅŲ谖ÍFŧę‰mŅ&tY°ëŖ™}*ē[>•˛Û ō~t¯ŦŦHđõŲĪkŔėvMŗįWWŗöēX%æXŧ]e:‹Ō`U7$ž9?ŠOHÁW—Tī[WâįåYE.ŸĐÖøāŌ[g88_n]ÚZp ĒŽåíĸ6ā隔Ö&ŅméƒĀŌŠ­;_VņŨ3ŧ1Æ={ŒėmúõÁf”įŊÍIōĶđĖ0Į0‘f™,ޏô<×;Ē>ā đŽ…Ln'0P¨ä‘aŊJ@y@9ƒG!_™­ž<¸ԌŨGÚö—† mËĢ|[Ę­š;Fú0D–åGKÜ;÷úđd éoēOÖ3K•Nō@7ŋÁ ˆ’|×wÚc%čH—ģūļM´ZāMü͕'æ“yĸ1KŌ‰PŪyCmöevk9đi@jĩĪ hÔĪnĐîL÷Ū fŖņŸīĻK•Ž/|{úĒæĢX§C~' 5ÅŲŧ´uŧŠūeX7p–úÄĩ" .Wķ ×kJģšâ>„}ŌxÚGËöžũ›ác.Ãx7ĸō_oĻûĢĸEŗÕ[=R߂Vų]rĩry7ė¤=YÆŪUđ†ŗY%V6k—˜‘ķAڎŅëųé4ŠØkšäŖŧMŧũôiõ_ޟ50¯;Ėüd ŗožz˜?PŠ%î^üĄæ(ĀžN[)ŋ™ēé?ūĶ˜ĘŽ˙ŦIC¯šE¸ÕJVLĨĩ˜mĸŨŅ*ĪōūD”Ŧ÷ĸ⤁]~&“ƒ5ŪkĖūŗ˙ŧUg*…ËœlЃßnļzGF™įHÚy(—ūŪŌFŧÉd$ã QÔžŒÜø(îtËUš× ˆ?(]KöčgYŧķęS"Ŋūmkyy\ķ´¯/{f~tęFƒ=^˙m*8ęž\õNĪ,ĻĩāŦŠs;6áúŊ|A§F”P"Ģöfuîĩz˙ˇĨavĒ}ąĮÖŪ ûI‘Ú7o{Ī[‹§¨œŊi<¤Ú˛ofçƒčNGÄĖ\¯˙8,օĢîĨRŌÖđr~Q'ž doøãS™Ô|(×Û÷ÔųˇÁŅGöß.Ļ|?íŊ_=ųå˙˙å§gŨ‹˙ģ7]räHŌ?U3wā¸gFäÅäQd‘]ĩÕĮėŽô\O°?÷uöVdEVdd{ddģGfģĢĻIVņHf&3#¸q_înĻē?@ˆLf1IF­ūˆ~˜›Šé}`ŗ:ŖYKĖO _ĨnáøÉŖũûûæš%ŧŧ 3Ũqšmƒ Pŋsˇ°D1,˛6ŽŧŒ€=—Ē÷ĩČ“Å!‰™,îûƒáíčÍÍõ/Ĩ5z€[sōÍ&;Ziōå˙õߘĩË Î=}ōųZģwŋîŋû˛ī~@Åŧ iÎ|Tˆ|]æ;./'čeŽŽXĐōÎĶ^ĩä΅ %ؐGiĩs1÷-ÅųÕáæŅĩ'˙ ø īŠĩņgŅüUđ ~ļĨ€$ƒ¸ąë:_~øˇUåeϤ°Ī˛ũŗgæÉdHí/ŋÚú`#~§¸ōˆjōL~cĒg;K68]GĖæOĻ Ō‰“†(Š)2–í"¯}ū윏7ßëgG4Ž*ëåŗ Û…Ā|h9.ŊFļūYÍËŅï[Ož:8jŪ‰Ĩo"čIV¨T#W;?­žėˇ§f÷đäĢŊŋš{%įâeh&yåmžühÎAĝYž‚fŽīמ_ūūƒˆ`2LpŲAúÃāí UũøŲūÖL”AëėgĄ¤Ē:L’TDŧ›ŸÍ‹ĶB2+åhįCÆęÁ‹ŋ+õ€W¨˙ĨãēŽk\|…|ųĩVõŲã)ĒŨ§š–,1@Dķ1jõôûŊÉũÁ~^Ū/§Ö˙ų1vŦؐ°82ī ,$nöՅuÎmqš îu“ID„ę­äk €l*cY2áž \ą™]ę‰qũÜÜT˜Č5vô Zņ#1Ŧl¨Ô—–¤ąwbÂ0€w#¨ą¤åL DŒ1",lĻFÅXPŋˤsĪžĐĖōLņŸÃÅ'ÁEřÕsޜ xųŊÔíÖҎ•Éx:ŽœTķëALŪ=hčø>*ŨPBÁû÷ŋüŧŧ}‰˜Šōšģ#N’Aîk0Ú/‡H]Ļ‹sǝ@âŨĮG÷TMi§=Ŧ]:ķGÃ_„ĐŋĘ|]ãÛXOŒ´Ļafí™ŲFYœƒUXõZĻ‘V´ĸÚ0ę˜$Š8Aš,ÎÁ؀™šhjBŖ ›˛eŸĨžŦøĖ7ŒfN8´*&įa6ĖE%%#d'PË:>?)U¸Ũ¯™A”DĨz]Ŋ÷&`'™{úb×Ā›†­?ēģUx”ztD˙KM^Ä˙seVG1/SĢŗB‚AW%ČāŖė|¸[āÉ, åâAæh!.Â*˜öĨrŅņimÉ~°bé[ēø Î˛´ōĀĪ€¸ƒuxöū†ŠßHĩX…ĘmŲ!°€'kjė|O}×N†“‚lDIâpąôhB>öōiHĀRs}Ķ2ŊrŠ+ZÔR)Āy*¤2†¨č(!-2˜ÅC*jėaĨĘÂ6äŠĨ~HĖS3õ%2ō¸=E<ĸ­oΎâ­M;JzqÄÔ#+ŪD}øA™ˇŌöéũ´ėN6?|Ūa˜™Û”Ä‹‡AŠ‚U-9O°,^=BÅÉéyã/~UFŲų)Čk*Š0e6˙0_{Aõ`PņÃ?îÆYĪšį÷/ŦĶås‡ęeōM—NŋLÜWDžŋâfōFWW놾(6ŧwb&õĒäÔĀR'cE‘§0RˆAŧ°H Y–eÄŗˆxxígąXãœD¯d&ÎDHũĀ ™ˆR)+gN}"°‚Āb€xĤãόH°Ņ ü´"Ūˆ”b◤ÚŅ]s”;[ÎŌ’Õ ÚOmÉO’PãKjĮåĄakû•vÛŖ¯\ĪŪû eĶķąŠ xˆ5â‹T(7ÅÁWg`t„ßí?<Ōf•Ŧ!%‹Ô ąxC¤j5ŗ!tTTR 2&U;~úÕowŸ}íEūĶΘŽGž5P‚w€ą+8Ĩ–^_ÖĮÃ\0ûõFš×âŨ/Æuõ ģĪ´Žž/ęu-˙šf`Ĩ˜WžūsŨCtbæå‡D‰ŧʛ^Ybzqž„X2ĩV|æŦ‘Ôģ4´¤2˜”Á ‘)ŗsj´xŪn„rįš4‡HŠā¸nBĄ”|'áF;}išŌīWËæEAĨ+^Í =ũfcP˜Ą<ÅÄĮ’iĻÆ˛Ī”cį â\\9J¸ĢhõËL õ)Ā…ÖXĨ¸Ã\×(ĶHœĸ„€;%É1ŦZ#IR?č˙qúMFfüuĘM+€F4a¨¤â<ĮÂ*(Ē ]æ:cˆR5ĒlX@,J֊N PbĘįI!"Zö”‰€ TüRqúk–âuēėÂŅ{%Y˙āft`Ėܟwå!WŨĶJæÂB°zĸxūƒ.‚.5 \@méŗ€ĄēT&—ÄĨlãģė˛÷Ū\ßwÚúž5L樈cTüpØÛĀô¨žĄO&ûÁī'>Uô9ūõfč”86Sī•˜ÔyÄVŗaīT4 ôéQųãŅ“neK‹NÎLĢä%”퀴Mkԅį>™Š8“Ņ i`N‹lĮę‹ė=wŠo‡“‡ÛļĄ%Ļ“Ėpš5҇VáKSĩŦcį(-†ûLidĨX'!•„Øԝ„ÛžU8`# 6$L sĀĸJĄ°’ )ÍX) ĩę=ŗ†ƒĖÃX%‚Â;bä -ÉK˛čĨ•\ĀåßÅ Kb-˙ȃkđlÚX9w֙<¯ø•W ækŊ5¯™č˗n”[° aܯHåîvrŌž[î$õĸ5,<Œ~[iq\v>âJˇņ—Å­áãО˙ęÉķV0Ü܌ 1 Bŗ˛ĒųP"yĒÜûDŪ{tz˙^Å˙ę;/äuHEÃâ  Ė2"žzúUįŊ’aį‡íöiŨU›ģĪvĐt!:ŖCX4ŐÃ4`2™ëN¨öâ3/"Ļœ¤,0TĖFS)0D!™ öĮ6đ8Uí”8¨ã˜*AĪ—CƜ 9[õ=ĒgTšĀW'i‘CxRFĸ1L5M˜ 8RߊØāS19X…â…r>´DĆ&dlO ĪfAõV°Of‘,ëdQ@¤s]~@toæ_ŽöŌũÉxūúkHmđŪí(Ū=ú~+éœî•g(iÄ%ņÉNY {ΎęE)ēVˇŧ×=<číTŋø>jŪŨ%P^VjŪoGÁC‰ÕnąļÚÖ!DŠ"Í+ĶÖ&ÄÄ9Ēŗ-§ĀŠIg5äÃß{ŲÚŠüÃæ§U2yQ`1äÁŪ)CČŗe ŖšzR¨ĩ9 ˆ¨›F,Jš0‘Ÿ!c8§,2ŲßÖÔÉ"ōđ‰oˆRAÎīyôÉrlĒlMĪW5sJ !#ŸK‰j Ķę+UĄ6ņu7Õę„ &hPqxTibŒŊSFedʞLāĻÖJUÅg1–CM( <‰×0ä}YØPæ†×Ø5’´°üu…‚]‡V+ėãŪĻ+*Sŗ…Ov HĨ|÷`ÔuEe3 `Æ]Ä oO‚ÛĒÕ_tŒÜ9īmQļ}rzëƒÆÜä?ģ)ÍlØZ’đ$C3.–Ø~ēŖĻõ}ÃėđâÜą!-“]šUoäî¨n=ųrXŗcK@1X¸ÂUÁ@UcMt܈ 1ÄĪsvemUĨr÷lĢemķĢ'ˇË+tųuŽÕ•‰Ë7öėė‹ũ6ÃCZEØˇ›Ņ5O×Ö_ē“2æĨõ‚æ@‚üô\Ÿ[žhfƒ¸h…ēPéĘūš|ôĒ™å:!éÚ_~XĻ<Ѝ÷|{Oq*<>ŧrXŠ„~Ų˛"I§,æöÉķAVŠU ŖĀnKMŨūŗ“ņɸū›?>ėoš… '*DĀŅ7W%ذëĘ:-Ēƒ gČđۘ<8ÃˇÜTĮ)ģMˆäÉé`¨'"¨÷ u•¨´ņrĐ\.ÁrCŗ¯kĻp…°]ũmĒū¸æâÕXõןû&PyAč5ūÍĀ<öG>įGÁēgúFqøôž=9÷ŨFíTęI%ŧ0)ņŪÁA9 ę7““>oV66cĒ ˜ZÔüŽÄÃú­I¯Ņ3•²‘hΝ˛ÚĻQĻVĶiDŊJžOE™*ŠU?0TE– Ö°ČyR¤÷~Åk “Áöw. ]- Ä_Ķņĩ"ė…[ø˛Ãé kđįË6oųķÛÁŦxīž™Ķi¯s{ė}ėŸqũĩ—0Õˇ^Ŋâö‘oíķ˜ļũŨ;116˙ôųņíŨęũS7xųߛŸūŠę!ãūQ˙YŗŪ˜nœvlAglKįTī&q“A"baE¤R¤–1œ„*cÃūĖmVĒŪ§ũž|s§YŋvŪškx F™+ÕĖXļ§BÄĢØráŨ|=ŽÍ¨ėuũKŊšpņîkčY Ā\#YüBū šŧô<…éNëã#—}ąąqQÚSĕߔē‡ß•46wåÃ͝>=h´ZÉza“ecB›Įįĩå÷Î×ŨļŸmˇšbÍÔ3Įg.ōĖ "dĸ–Äû¨LŋxĩYĩ^FLmg˛ōņīŨ+“‹ĸŊÚ"Pšq–”—0ęˆŠĀÚ|ÆĨ—ŧRŽháŦ_beW<†ŋāĘ\ŗ’Mæŋüä@ Zzҟnôë°øõä_uz8ÉHĨĒũ“ĮŨÁ ŖBŽô ž†„ ˛[7:x<Ą~Ģ^ŸūĄģ[‘FJk%J¨ôã`Ļč-ĸģÄ}ßũŦN€N稒ņãƒ(V&A§Ė L"U×.Cŋ?¸uëvːáJømd‹âœˆ¤čīīd&Ŗ[ŗ”žkĄõ‡ia žX'”Û7^ŖÎĶ,R+KX‡gĶ(Ī­]øiŋîî×IFũÜÚ×’h5Ļæoū—íã“ÍáT⠊ qąØŧ•đJŊvīlī˜h#;ŌÉĀ„ļDgN ĸQ6ē…ÖP)ôēe"¤J-ÕĀGûĻ)ŠâA'ĨyŸ”<%jöbD€ ŪĻV‘fۅˇšâ&ÁāēēáuMü~q ęÎwŽƒōŊÆéˆÆũ1ö,ŦiÖCŋ•céŗsģŨz‘Üåú¨˛õüüˇáœ¨FŦMwÖkĖe jî•g7 7˙´ī(5Ė­SŲ4F 3酑›Ĩ“˜¨Ό´ę„:ũFV‚J¤›ˇ5ÂŊVœk×n)Zú¯ OB^ĸ\tl|¤kú;Ŋs<{§sxmõJwūĘĘ'ŋ..VŖOTĢī ų˙đÛ˙ëíáwŊ˙P˙üŅŨęŧE4œŒF5^YdīŠķ0ZëW˜š„ŠN[ą„˜´ĖeäOBРʅܓ@Ã3˛Į[鸂ɨZyY XRSoO4č:ĖøAv ‚–Ž–eūKA´Ų¤^OŽo¤\ŠË[Ĩá¨ZĻéšLĸßT/SĨ\ÍY_ģ]ŪŧƒQûiŌ}÷>~úbÁō@˙XFã9}ËĶXÎÚķSŠ;ÁŗnPž <7ĸ· ¨x ŌÔåPĶq´™KQęõ%˜Ļ$ⓠęNŠ.ë:ōIû]rÍ~Ųw7ŸØˇņįŅbŦŗi¸˜w ī8ęš¸ Íũ7¤ų7ˆŨˇĮ[M}ö}§úŲ¨z‚á•0ņ¨~Ōū"høņ(t|۟ī-ņûåS“úUQíf1Už ʈj.tfFtÉzđ›fzÕ'篠y“W  (_Ŗ¨ŧU•ŸV…ujÂģÃo|ˇĐÛ­_hûäœÎ,ĖlÍđö–bpZÚ7ĐV´šÕP7Wĸõīŋ~rwcĶ5„œiÄēwë¸ũĒ~ĮtGûĘ5‘€aËÎBkBdÔß°E“Blu¸Ūv:3y­T˙ú §ŸÍŪíMĩpĀ7˛ŽËR+‘įūNĪŨģûÂû¯‡ûKåö\qŅŧ3yâƒķΞĄņÃūî-•ļūĐ_ČŌ "lÚË! ¨o<?ČĢ&7z_•īįíėYZõGũoĒŲQÜ0Ąs° ˜Rœu`.•§{ÁÄĶú¤˜‰_÷ž Âׅá╮_ÚO°.-ũ€yĒė€đk*N˙2°ėķĻķīËRhVˇwĮũæßÆ {ÔYK–õîŲ)UczüO˙­ōā.>ÔŦ1 FĖ;)_åZáāKS ¨•ötØ˛LđFÔī„öĢO…%ī=FĒCˆĸíËEņ5mX“vŠÛąĄ0Mšķ.ēD¸–ĖŽ×û‹ō+įpuZūđp^T⠞Ũ@5“hiBŸÕŠqĤū ˙ŲíĨķdNÄíGîvŲĶ7˙ô¸ņ›Ī,lüIÍđ|ŨĄn)Įē%ˆB˙ųéF‘ZŲ%÷™€9Ž}5ŸœŸŧŌîŲŲô@“öĨĶ’ī%؈ˇCŠÛ(5 ũ,(+˜V连Œ5?´2ákQWæCąÚnÚR]q9ŨZƒg7mđ˛ŲģÎYmRcwŸŲ_/Ōöō͐7GôQ!;­Gîävõ7ŋ.QN ŋ-Ôxiĩ)šâʉkŲãcۀdCílTOꡅŠQTŨ´Ū°mŨÚâŖ_¸[čĩĶ"‰7đ&M´gO{՚5Ļ5:šÔ aĩķĨŠ]?Ķ—đl-Ũ猎7Th=žÉãéÜ$ĩ–ƒūlu!é{7=OjŊęqģ=:îũj{Y–'Š€Ä$ĨBˇ[­nžö yÚĀí­h)ũÕČt"›õĪéŸõ3ôK->?Ĩ<Ķ…ˆ@aPhŒģõ„ëĨ*œDeŒ¨ÆÁP6 qų8ihļĩ2<­4i Ŧčš×Īåõ’ĨÂ˗Չg*ŧĪY°´k.]4†øéĮxyęSz1XzõŒ7ˇžáÃōygōČĮÖĨf{Ō­6ũK.Ī–ZiTVƒęĻ.\ŗ^ljMúępú×q쏔6’ÃaЅM䤴ŨƒQ—ĘE͉ šH)rYĐpgux +ŖŪFė×*U9uÄ"7tqx @-˛ĒÖ įĪgoĩú”w]ãGŋšt~cĀGũėWÃĻ4Ė6kWΘūÉ˙ģ[[Ļ›Ũŧ_|¯qŨ6ŗŧÉFqÆgfŠûtQĀ~ÁÄr%ŽAÚģÍöķģ÷‹‡_ Ū¯ ‚R/)ė ‘ú““!ĩœF ¨–|–¸BTŠaķdH(Ä/9Ģs‰|]z\>7,Ú<ƒssyãŒŊ{P@Ā?GdföŋOÛ/a5Ņæĩ ĪĪ9nˆ^ɧ{ÅbāYōëڕõķļ{އĶrĄ˜ÆŦūĢŖbHËŲ"É >ëģ,Zģv…ô¨[fîīX6åíʤ{pˆķq˛gƒ^-5„ ~ČyUŽ™@ö“qZ0•¨ã‹(Vž?uĩ[kƒß/Ņ(Ø*÷^rŽ f ė6<ŠūÃסZŗ֞M9ßŧJĪ Jza¤ÎÍߗâōnZWa)5beWŖũ`īefŌÚæķé-{]0Ė|ãRnĮÄåŦáĨų_Ŧįģ oūą0=úĢI]ųį.4žĢx62ė3O&U"ËNŦĢ8Ĩ Ī–TņlŊx˛oŒ‚ķö§Ö!¯ĸa>qoWM:æėb0Ã$QŠ:m҃6o-š˙æy˜{'/FD…VŋÃ5bŌV4–ŽŒoeĀšIāļlģã—û{ŅUā“ėųĶė×ĩŗ rTnZMJVã]—fx1Ÿâå(¨oEMwOŸoãÆH˛‡ĻaĒTÔū{Æå”´Š‹y¨K3G ]ÆŊĨsŧŖđËËĒŪt&¨7×äŖ˙ËČ#C ЌZĻāŠcŲ„vČ2 *HŒ üX ‘Õ6bɈb6"–ųLM˜:Š)0`īĸˆa—!ČĢú)ÁĀą…ĒC@ęÉhb ‰ûšIEķ2:O2õJ25ÆËųŗöíĮÃ[÷ĖĢAļí—*wÍĄōāģá¸D…°÷âŧŌ W+žĄ!å(iŸü ĒÕf=Ø Ŗ;ûŨ';+éi‚4{Õ*ŨŲ?~ĻßŨ­c” ‚ŅŗW‡õ ú(8<í~÷đˇGMå—Œŗ8ņSM$Ų'c‰âÄ'‰šLϰ7ŦaÍ/ķÍŗtä—R‹õŌâZĐYĩ€ĢxļQ‘1„sXSR‡gŪąz(N`ĢíĐČpdȡ|*;5•c ¸4"R iĶ‘ą‘¤&¯ÄÎŨåŗ–w4˛eĘ8b @ÂԔŊĩ$Ū0°V¤J^-2R­Šc…Æ&ĘüĶÃh[›‡ÉŲaųN2˛ŠĀ0ŠĪœ/B°hXöŇõĻøbŌŧĶ$ebÉSFÜ{=ˇŋž÷W˛4ęŖDQû lX•)˜NĮač ūvōP‹7Ÿŧø~@ģī×ë†ßūcįŅ­4jõ:ÌT‚Į>ķT`‡b0rgļũ(ÖY ė*!ŋĀ. ÂkeĨ‹B2¯÷š˙Lđv0Ųu|ķƒ*D>…ĨL,ŗdj.Ī+ô€—ĀLŲ;á‚ö™R H<\"žVGžNYM0%īˆ-•Ų˰Ŧ™ ģSëˆĪ­ B üČJæŧ' @‰õY6DåžfÆę4Wø° ŌqGYųŸ3°_;2G/+ĒlKÂ~Ęa0U [ūâŦQą >{ö¯{›\R&‚“šË"IL­ēWĮĢ?ž~zG ږ$0D QRĻHžķI)47OŨxUOËĪRWŋŋÛ*kĘZØÜįŪ—ŋŌRšôEŋYķ>Ŗ@…‡ŪIß`ĸ]D…âŲ9UŧÚĀ€~îQbX‘—F[`ÎÜß|ŅHv:+f!rį‚ęė‚uĢzSD¸ē`öáŌ/Únū¨;ëÂ2”!3ˇ72ŒY]u—1“ˆđ>͊›x/žėąEnãŠŋWOÔĒs†L¨TF'Ąt7E#õq’zk{{fä'°VœSđ$(–ũąâ ģ– Î3é$đ›-ŽY8?e}(C~Sëđ1ßoE‡¤NΞ¯=`ŋažę…>,ų¸RJ‰X˜kĖØyĩŒĖ3Ņ(0œeUō cy2Ô ŧƒ1ĸËņ3ysúÆkšu_]ŦõĮß(†Ĩ ôNē<ÚŊ_22‰-!dĐ×ߗeīŽĩįú­:…âôyšuv[%íëŲ¸U4'ŗgz÷8‘Ø'+ŽJŨ„áÚF'Šs&Lp†ƒ†-”ĪĻΐScDZ~}&0%ŖŠ0cõe*%“FJalúÎGŪŖŦ™ŗqYj‰ZøØûŦ\Ö7œčˆČ°)ûB€5Á&{%kB¸~`XĶ”ƒ*<Ԑ1" &"Þ,Ã1‹÷ĘÖ¨:ļķæŖ*JŧÚ˙āY|ĩ+˙–āļGĪU/ņ“b™'į›KxĢæ’÷&žŨ›<6›š'ķ”Q˙¨˙å§÷'_v?+`LKį”ÖZáŦOŠ)Ÿģ@Ŗ YžVí`Dũö폷lšÛ‹Ģļc7ˆÆįoŨĩT ´ÔZŧwÜūÕîFāŌôsŗŋM§m~ĀhŖŪ"7ú02OJɄWõ KfY&*°fÄFC!ˆsÄTČ26#K2`˜dkuč])JœɎHá@ÃBĮ×Uį ôËc@-UÃR‰KŅÄÕ,RékŖS5ÃA`Îj.•ˆĩā•)Ģ9h$Ŋ‚lŠ5zæjEō ËDÄ`&Ãáą 4Î͍ƒĀö…ä„Li`HbļŦŠkĀÚūč7.AyŦ†™fU‚ũnôāĩ„R>x1}ųi,…ā+@ĐÖīūë‹Ũâī^>ŪŨ€9~Îi<€¨/ô6¤Rā|"™ž=÷ŖO~ģE>6Ĩd]7ĩ:,§ZˆËžŖ0Á´GĘQĪ4oZ –ā ždŽũá ›Uŧ 0ÃŅŧ^ŗ:2 ī@PeV͂-Õ Ŧ*BD”  •LM@ŠËsāĶtZc‹™€zņĖ0ČÔĀŊĒúxc-B!3ŦYęŗĖy­ÔĄFŠPč8Riž÷LbĘRglÜ<Ö2 Öxđŋũ5đst~G@đļî=A§ß=X“úˇ$°ėÜj?üueĄœÍĒaëæûÚšÜ~5Ōe[ík‡~ųˇ×ŋę욈™ú\*Ÿūņ•/ˇ.T͙:k,쨧ĘŧŠM"īėĘmĒŸŅ ÛZ+ žŌá{­­*Ō—Ļ`Rū¤´ģů†RĒÖÜI˛ÃgŽé;Õú~ŊAŠ^ąĄ‘ôå ØĒ†’ŊLnI§‰ųŌ–ķt˙˙ōš5öj}ŧAŠ…ÆįŊ[âU čôā)Ū¯U i‡ĨKbƒāâėãÕ×U2<wu3-BBŸÖ{Ãũ;!¤îŖ NŅŠīÛÖ×R”AæI‘ŠŦ‚Qļ!¨{KŅņ$§OwYįQå̉›@ēøf,[ŗKođâŦš..Č˙ pŸrbåöžrÅŊ÷Vm ôŸŧč}ũ?nŨŋˇˇŦ üā5™­'?“]ã‚$ôŲāäļ}ezbFA5„xGĨ˛†f\äķ*Ų,đT…ĀŠwŸ‰ÛĻ,(Zktz™š×´įš|M&…ŽS~āØVū_#^ũđf~5—¯āŲ;û;ž›žLvn•tĨeˆzwėˇŌ:ŽĶ5‘kF´|ņ(đęŅŋģĮA‡Ÿ%ZÚö5’™X šĨˆXÂĐĢ1ÁTMéN ę]ÉX@2_ĻA0l}vÖˇ›ƒãNšbyf'Đųũ˙ėö–ēæĶ̀7˛?žDëõ_¯¤ŽŸmKŠ2āĩ˛ĶēlÔ ē-Û%_$ŒŦøX—IČÚ8t…N}€PšŪ?M‹^;ÃOöœˆ¸sRŦŪMŌŅ$.ŧčqã“2&@¸0*eF„ĸÉŲtˇV/ŗūļŠ‹A,Š+o´Ré,Öq!AĘŦIË/OÎŪ8\`­?ā§ĪMÔØ(,Ö —-RūŖō˙yēē5HôŌįëØ™vŨŊ&ˆįÉš#­‚ –wķ$>™T˛,*Ž÷:ÅÍYy?KŽ(Úfõ(Ë$+UëŦĶa¨Ëm™ŪîEፔ忞‹ûĐĸķú/Ÿ0ôCĪ˙ÕēT7Ô|ÆÅŋ}zhâc‰Œiė Šö­g~~qî0Û.Aeęž×Ē›ĄŊ›hfΏ*ĸ^ĻEęhųqĪ&…2čŖŪ)´ØÕAĄ)ĶČnZŅq|§´ÚÎäRhėĨĮ_‘öeUY]z߅}V—d€ 3‡ČUËúÔ@ĐÖI:ņ¯c:Š|ļ_g˜—Ŋŧ”×}Í]—*dŌ()îh*§ßzt€Øeœwץ’˲ä<‹““GgÃĶ÷>,“¸OOû""‘‘—¤ƒđ4Ũ)AÜŗ^a'˜c–^äu}yÎĨ&ˆ¸ĐPąôõã ]CĪnîčĩ5-–'+ĨōĶÜŗTŠzGņûfŦr•āē—ËŊŒįZk’B{_ųŅ+5КŲZʆj‘š‰ú'VÛÛ{E%>V%¨g ;p—ÍĖŅvY•Î^Ō­ē5ŗŖųWæ.ĢWGĖúģĖžĶrŅ“‹–ņ7”‡šŨ˙†rÉ5@Ϙ•ÂĀd‹€Ō ^¤˙Œ÷žúÁe í2gY,--?•ķ"ÇõģĀ7ėTļl^Œ-hŌošÃŌéØ'ŌJBĘÜ šUxYøķ€Í$äé¨\,‚ú/l|'$3c——Ī_KĒå C/ã§\˛ÅŨhæIŖT×Úiß*Ųø-áGΙW;ö`ēΞŠ^ŖŨŨ?œnmōĨa]tB_9†…ūĻD€yyæ(sŋ9PÚ$åŧЋ€Sŗw2xf­ģW.2ŦŲ|~R*šŅ׃F¤›Æs“×á¤ĩ]13Z Ėe“+Žīëģ Ŧė…™>ą g´lNģņ@×áJ+/𓇐˙@ •rŅ›nwŸ/ú÷z°2AĨ÷đeđŅîßü‡}ŲÕ%Ĩ¸Lk”ël^ˆĐķ\a3<Ļ÷ˇ‚€Z €:õ†@БīuŧÛ+ãË"6~ÃvCŨNŸîFĪNÚß6åŽē­Ļv}#Ė´ũrxŋČB­ŊäģXŧŽúÜĮšĀø…Ŋd QČĒ{ęõúëC?Õø˙Ļōü}Kõڑ_}ĩŸ 3‰cÜzv°wa@Sík][Ōûę…ũÍ{zŸž8Ēíb•™,Ķ.H5œgÆđ°*t‹Î Ãũ0įo9¯bö‰a™œųç§Ã[fcë÷ˇķÛz§=Ŧа0xt,Z.úÂÉ´>jɔŖiēY‰!— +­°é\¤TÉ+L-[×rWí’Åß,F´xƒË7ēQ˜u Š]Ŧ§g?lÔķ-÷Ɠ—ŅđGÎQ!­oųƒ Ģŋøū6ĒmEŊnå¯0ÜũÃWÛËŧGķŒ‹ņ𜏠†i RúĶ4Ø.Î‹>¨%ˆˆ'y˛Y8đÛĨŗūčŪXĮ%"H9›v|Ķ)ŊL÷ę–ēē[Îdø"¨ ær#­Ųv3Š‹f*§.@$˛Ō|ę‚Ė]č7ĩ–ažŖ×õŨšrā5Ĩ~F?)“ŪW;;föØôÛį÷k:ɋÍ͏î1`éŪčë˙úwwišÄŗ 4/ô KLT$ķįåŌdFËáÎ,HUŌL,—ÖF•™IUf ]ĒŅ‚ T‡€9ˇ€ä“>¯ĖT^āuf—õēZúŌėŪ4Z§đy‘šëë /¤—ģ]\ŽåōÄ?Í(˙åzLë_ũ­'ÄQōõĮíoØ~2}øßžĘūÍŊ€YēUš…4Տģa,*Áįk”9cD•tøœc@O^n…¤XŽ{éÁ.ĪÉĨ€ĀÆ*Š2̏Ė_ĩ¸x˙N(’ŒãB:Ėŧ Muôh˜&ĶŅI;t|a§a H˛Ô‚yVyeîfķ+ æ<Ēãb[„Ôo^† ĀËŦڞ3Ģ’ßë{ ˙â b¯‘Īæđ.„wËV)FA+ū/˙b›â:—eÂĸÅđ‹ūū™VÆ˛˙÷˙Ī?üûÛŖšaŒ (û9Îņ#j…úŦ?2ž>örūŧüņy^ŠĄqÄ$*ŦdtüÄaöwėë5Xō!ųnƒļĮĩ8›˜„ÉõūąŲģũ^@…zĨ0Įë+ŠØ>į“4+U%š*¯\Øx3w+@—]Z7 ĢŽÍڞ\å›W‰Ōk¨ŅšZöŽ\€N‚õ7¸¸ũĀä™û›ˆpŽí$ĩbGSÚß˙x˙Ō;ĢČÓj<Û1lZÕWßOŖJΊō¤{‰Ä$“´Ā¤^O“fD I\O ŖŗöxįŪĀ•œŖ‚Øhf,;&!é×Ézŧųa ۟֊˜hIÚØķŖ‘VÛß‹…R&č 6$Ėēhą‘K^ĸÍŅLŊŸa¨0ˆág }>/>īí˛(„6'ļ<ĢWK‹k§õ đ31XB­§gkĖWŧ¨ôNŪæbP% ŸōÎyüWu2Žj'QbŖíûķĶH߯ũá_ūũž™OĢ…ĖŸžXaˆ§.5ŠĄŲ }tęŠŅ¸Ÿ'ä-¯P‚˛õĸ)‡!|Ú˙ĻŸŸ“‚ú”[öûAą¯ƒi’ ĨÚܸeFņÎÖqšŲ?öayۘ†ŗĀJNy)TtŠÁ.-)"šhbr­€*L€YļÍčŧ§Ŧ€Í\ģ¸É‚Ųe¸F>[ö:!kõŒkÂ~čözĶI´Đ/&Ãd?4L§[„ŪšœT„Xâņnq!Ņ Ô2ŨmڋĘÁĨ9KŠUęÚō‹xĢ\•Q-*_œ–J2īŲaVđ{V@úÂŌ¯^­‘ /ûHD„Y’¯úY3;U(t–đŦ"„š æõrį Å7ŊüåĒtŊtė§EQŦ×^˙ĐåúŠ+}ķĨ×Ūō͸¸Đ~ĮčČäQ˙“ 3üžļ ž=lkcœ6éö"1V5í­Îŗtgás'8Bé×Ccė#Í\–ĻÉ7įŊY ˜É#ĸÖ¨×ãqPa &ŧmŪŊ'I=č _=ėĩĶŦPĖ&™ūõų°T ĮY5knûT 6ëVëõĒLWŪ.īx@•ËbHķ0z03ĀÆĖKlŪ{' ąašĶÃ%-l]tŅÅYįxŋĖoß°> ‹×đM]Ôüœe$CĀPq0fnÄ\ŠŗküŦ˙éÅVY‘jô[,îvøU¤ŨÁ¨ÚįĮŨ)ē‡CŨŠžMái Č3hŖH+Õ=>ŧeV'6ŪEŊĶ0 ”Ņß_ŗģÎūC̜OøLŨT""uū•oÂ'Ŗ~˙ÉéÆŊũŨŪ´Ķ~rŪy>ÜØu‡–1íēh=ŨSGHJũ:{;I’QĘ,"d +)ŧ¨hŪfJÉ(̧œlI–įĖ›mĖŪXˆˆŒį`9îqūAAnj+ Ä%xMRõOŠ™æĒž9ĩÆ;ę)g$"ĒiD‰11“÷ĸÖ°w†HÁ^YԋU‚šŧ_x^GND _¯ƒ ­XFŨĨ3?* ⠛ÃÉļŧˇÜáäßíNÉ[åĶŖí•8 %­ũö´bdn&‡lo ‹ ÄŠ¤ĨZtpënHų­gAL•ŧßŊˆžų~LŖŊÂY­ēy"eė¸m>ėökézx^ŗ) ŪHĩˇ \ėgąeąi70ā”,yO*Æ(T˛ie6ązš+/E€ ^ 4˙!ЌE† å0šl6WŽdč]CØVŽŦ‘{.ųNøŠĖØĖÕøŗĪ_n˛zOŪWĻekM‡tT†ŠJ5CĸĸO´HcUŽK_"˛PJĸʁAR‚SX‹Ëœo‡€ĄLˆĀ†Ą`ã}n[Z8õŧœ{aÔÀ JūŨn›žšZĩ7-Õ=MĨÜķõáÄņÉj:mŠ"°zdf1–āœ—i‚f?"õM­dq…ē0{§e”ÄÃk¤ c™¯Â3§bI,g‰Tˆ"ļđjú0/ÆĶ1˛ĘølwčáŖĻ÷ŲŗŽ×ņôķčväU!Â8øöwUiȉ¸“ . ŗč÷ĪŲN+PŸ{•eæų:*y" ČĢwXU6đ`Jv˙ãī;ŊZíÁnĢÎOžD“m/C[ކhžØ¤k ĶAd§/Oėn‘PŒž?ŗEį‘AŧQÛz9p%U Î ‘xe"ƒˆQĪ0,‰ īm§š˛™×lÁŧƜęį”Č/˛” J+)Ō?֝ũĶ`™ÂĪ0ėjüŲ§ŸC䨲:Ô!+ŠĀ  ŦĶ|¨–CˆčÎņēJĸiLšPAc‡]ž5‘'QÕĶžúŽĶŠLôÁIũÎãqO={öčô´ÜŗPvF!ÎČÅ÷ŋ8ØévũÅųWy2ŠAÅķæQ˛jœ}÷¨Uˇ%1nq^7D\oemņ§­âŠut%đtë9]_ 'üÛĢ.Ū[÷ŠŊyá#!Íî­įWļȧ-ÜT°iÁ0¸Šŧė/ĪxÖüûiüė¸Ž˙Dgá?b°ø§a9>ęĮķ„nčôÍûâpįŧ–ĄŧbÕÁÉĪŌų˛ôö<†öč;!Û´đ”#.ĩ%VîzĕęĖ‹{Ā fT3írņۙŽŋÄ Œ]foõŨ˛û|g!Īĸŋúp„w‡˙â `’OSČÄVŌĢ͖Ą‘Yđƒõ÷O(ÅEŅ€š^Æ$ŝˇüųWę×/ŽĪ@O)4ÕOî—}¯āŠ_đë›îũúĶĮgŋ$mŋhGņ‰tvWüëæĄ˙IãS<‹NÚxē˙î¤OûëŲ{1× ũ`õXuĮÉōBŖ§ÎŲ|$Ū•ĐĢpŒ_æPHžÍã|×d›–ę.ÜA§LTR–ûY|ûMÎãļ ä ŖÅēM†ĸ,$p|8y&f­đq6o˙y9šwVË>Iq[gu”uēŋŽzûÁ\7î ’K“‰´ Ģšķ&Įē.Ušd›m¤WÅ=OÉ˙ģ6ŋķL×6nōi,Īņâ‹AnÚĩâģUˆûéãGXā­ˇĪĄ/íW•¯~ĮūŲūÎ ›Ŗ%Líü8ŊZ›ķlÚkĨYÎ5’Ū :b`@„ n­˜ė–¤(>ž’ÂĢām#I9˜įĮƒzoÕŽ€\ŽŊŗØY„q%]qQŽāėAņģ<ËüCwoš8k혙-Š4Ė3Ö)€€r7Ÿŧ)ØÚ$˙P.ŪņĻ_]lr€Ž{WˆĸÛüF÷áĸīwÁ•TĮ‹'ųߏÆ>ilá§îÄqš+‡Q`•ˇīŋ‹M›áŋėmŌŅ÷öá~LœNĒžŊ˙cųđË1ũŊT8åumV‡ãŖPÎæc•$ųČØīŸLZĖ­ōe€IDATĒnųēUgnŽ˜šāîäĻ)\žŠr“׊>Í:æšĪŧí_VŨ|ũz7ÔŅ:íč&ã7ŗŪt}ē˙īū~힎>ß[åŦЎ¸Õ bĸđ•PŠVqöíŗYC) ۀõ'j2˜(/:ՌlÂNeĖļ9)wā8\ãciáŸĸ!ŨÛßiCX7Ķ‚ ŋ,pŧGę˙0$×?]s8ûí>˛{`î§ßTīŪåögá{{rš[ģāķđūÁė|å´ņŒ95ÍڙR<¸§ējiŠĪŨͤ‰ô4lŲĸ[›ŸįoßĪ<ĖžĨęÃņ—Eánڙue“žVUvR,{áɇ÷“ŋZƒT§C2š"NY!#‡ĪNgē“õzpE(ōHŦÚčû `Mš]sĶt… iĻļi—~IT~ųl.“_ūQOų/Ŗ^ķšyäáfUÍ­f/ˇŽę&ŧė"ßU|Ōĩ^OCūũ˙õėQ °@—âā™ĪĻoņ‹q1ûXMÚ?‰­ÛÃøüęžhŖƒgí–ÂWŒL9˛Ė;M~—;A¯$ ž„n*Ēžôķņ~õÛU}ü7ŖÚN>ϟŸGVĨėxwŦíRĻŪ:J(ö_<Ü˙zVēÕßū˛[ržĸŽĨ:m3¯ũˇĪeGDēI¸Me„´lJļ#™\iŌŽČ‰ wįļd`[Ŋ!¸ā W—Īî/nĻŨ=6Dsˇp aįGŦ\ėžEføtūcOá2aÔyđ?'PŒ¸ƒ/ÄŋÆė|Ų‹ĨÅvۇGOieâŠû`™yvZũaˆ’ĐMč„'æĩ!ˆ;<ššVōĨõîžÖër„Ÿā°e)+ßÅęŗ^ĸD1me9l7M_Sv~õįwû?K/ĘĪö÷ÔŦ^ CĘtíŠ/f52tŋũÃĪv¤eb⚊;ß €Jæ€3%úÆsÖP’ĮĒ1 ¸ ëHēRÜ´€jR÷–YÍÛí—<ãĮŒ¸Ÿ<>ųX„ŠŊy7âÁĩ¯ūé“˙ÉŪ´æ ~öo˙īß|%Ą %‚dw˛RX;Ŧ‹öü¨Įē¯ Ŧ2fÕ0w=ŠÔĸîQĨĀÜiŒÎUöh˜žÛŠ„<„|>ą3îåĒÖ÷ō^~Fëʓšė;ķēo)eęqÁLÅs;)…Õ-QuģÀXÛē.I‹ÉĖšjŅ)&ˇ¤Úˆ!Ö/7Ž’›Üž-‹Ø")\žąäE…ĄŨz¸Qzŗ¸ž§ŪéâäBūúålíۘ~Áõnp¤›vë,ëžqK­0ĐŨuyÜų˙|ūM7ã“Ęī„°ŅĒeŨjJ7Ü?īŊī°ØRĒЁÃ#´ pwĀëXļ,¯dtx´×'˛ĶrãÁņ|rčR æį|ŗÎĶąU!ÖŽģÚīdâ&\›÷&ŋėîÅßūŪžRkG3›v DOZX=ßj×M`J<ԆoĄ˛Ü(–ĐM.JR'ĨÄŖ`ŒĄŠO‰)s^@ˆ\–4m*ÚoGˇĻ_r‚-oķO&ĩģ×ÍqƒĒ¯îâũrsûƒ+¸͊7ų—Á06ėåÚÍÜņņÖÆûXÖö°ŧPôĖyU.¸ģ;fü÷į_?|ÖÅw'’&§aķdɌnƒöIkH BTžŒ­8;­ÛŊFÖX đäę˛6 (A-_×>xšˇÅlyr´ˇŗRU…ˆQšŽzŖö~[ÔŌ‡ãíĄfä*Y §¯§ånwtP˙ž¤vˆbšJ–…%ZwgĀÛA¯ˆ]ÉAC`ôĻ6gk-ÖâU Š4KÉQĀ€ÂĨŠ(¤¨Ač隘°[îŒkßSRH7€á/į~ÚÛ÷Œ;„ØfË÷āŨmœøŽä¯Eū?‘Îî›p+âB 7įmøxü‡˙´üęéîGũGũ„ë“†Ė€¸y°”Ę^PĄ;8EˇCs?=īfFDqS6Ųø¤›Õā>û~Ō~˛WÕʲŲd5ˇ)ÉOgŌ9_ļbĢ,r‚“÷Ŋ<Õ;9cÍ´č(UVŠĒZãa7Ķ7yK­üŧîEž‘îĢ ÎeęåŪ„%č{#ˆjŧZr   Hj‘š‘¸%p[Ļ ËsŅL­o((›4SbĩĸđBž\"mQ@ūųé eŧW?ģTÁ.Į†â/Šl{ũ×øŪÍû­ũ[íô^Ÿ Œ’KW’¨ČŲ˙)ķ?ŽÜØ?<ėéŨƒžHŠ. Š“1šÔ,ŠæŪ˙ō!Ÿ}üÛŗ_î‹9ÜZ XšƒAð}>rx2â *U!=GJMKŠÎԍ°¤„x‚ŗRē˛ Ą7AC¯›Ę I•ĩčb.έ}Í/`7“C.Uš{J:ūiÎ7YßGįÕ+ģúÅÁK¸Íåmr>›ûņ;¯ķRõŋ čŌüNCÁč–Ęß>˙›_õM^ ˆ‡¯ēô*7'Ąéđ˜_¸Ķ˛,rĻXˆÅ4JŒČœ‚˜D EÅb•fzv<Õ0Úûŧ/ƒ´sKŊ֝īžÃÉų2h­îe×ŋzņ*š§R‹Árĩj[¯oŊįļüŨrˇˇ÷ü}áģkīK”|­v< †ãeDît/Ŗ¤ ô–9ĖE”ČRW(\ČX1’L˜\(nN! Éáu)y΂‡‹8—Ģ‡~ ëFāž%4ũĐī[ŋŸDfWzĩĄŸÎ ēåoš¤2^ΚÄúŊfč4ŗüžpۏ]ûÛc€YL˙í7­G]%jSBëŠG™yųĮˇ>~øåĪŋõ ĀR킨éˇVE¨.jY,v÷>Æd{ĄŊÖõRRÖBōĸ“ËÚĪÛgEgŪߊ~ÛŨ)öģ§GiĀã>Ô!y5ĪĖą\Ž Ą`ĨĒ%aō&k€H‰€ŅĒh&ôÄ îæî$ƒæž’ƒâÍkhFQ‚TäîåRĄØmŊ‹āĒ*ueųpÉ+ŽîŋĪé.Įč6˛ŊųzfŖûôŗ›ë~Į6Ųv‘ŋn*Üy)—ēįÅÅ}Â)¯žtMD‹g¯^MđÅx1}ũ¨üâ_=v’ft(LÍ5°ļLfmĐ–DI(\² "ļl1ąčĄšŊzņœŊgĪēÍîJFOĸ\†á“ĶęãĮ¯Šatv2Ęų`>ė„r6‚Uņŧ¯gû’˜ÉD5Ôėž?øš}čŽûĪŌo~?ÜíMZ{AŠSŸˇ™ĒĒåšęÅ+gæ1¨Go‘—ØŽĸL’ĸ—u@mâ1 ˆ70Cpk `˜yķ€x4GŅÜ^ÚÆÕ/ĖÉËø°^[‚›ę ›?ÛîR?büøöėō‚.ĪpMrũĀ9î°8/eė1zÉÛîˇyâFũ[?g˛lúáčpöØûCZ”Ė,Zg•Z"&ʤ ‰ž( ob†`fb TĀdŒCĀb•â‡ß—ķG­§ķŪ;öRčnÆļôúī}÷`ztčŌퟗ,†VR,Seģė2ëŗÃdTÉŧģđļš?ũÃũÅNūúÍ·oûų€Bļ×/zĪbœ×eFKĖZbæŗ‚- eM$œfŅiĖáSŨĻ#›“.đŗ.€JUŨĒ›Amk4ēņŒÛ4ļíCLJ ņĒvÍ:øĄĨũņĨē8°ÔúŠõNŧq‰Ÿōƒ v+kīž¤ëģŽDMf?cåĶņŲūâũQęíz4CîP÷JcæˆqXd°Ä-Šˆ•`ÃĖÄ €ŲôÅqxöëG…j&oƒŅhēD/e|÷đņĻ,ëėžĒŸĩëŨ´ę ˜ ZNwú“÷{džÕČč(J Ģzøŗßũ6üÍ Č÷3ĢNŗ6ƒĒôOæąÅ=@E@¤VTw‘”Äŧ‘~ tŖKĮ‘QˆÂšŨL͂9ÍDPĶÜ7áŨRž­ē Y΄ƒM!ASLĨp\t"¸’jtkî¨ū!Övcß ž“wæmß;ļūŊŸBi78â'/W2ZPlõáL{Ųø>øëPúÃŦš`1z‹1 ¨pEŠc@ĸĐ(ŽFm=ģpķ.Ŋ<úãûXô÷˙Õ.ÍeÛQÂA’ĨD+ĄCí=øE‚ÔŨA{ĩʲEę{ČA¯S–SĮå”Ã%Gr+2zßįoŲ›~ķų°č…sĶŖ= @ļ÷įd<(I[#@éwOhbT6o5ˆyrR8ëeŲ\ƒ$€îîBIT@ Ū(hîYƒīâm„Žpa“ĻáWõãFĀ܁v@ž,Ŋšt?i\%vÕüŋ—Ÿũ$Š ~˜æ •ũ„TĪkSŠĢī]žŲßŋûåũw'Ŋ÷Í÷§ũ=?ĩC%ÜÄĸxUvÄ’ĀĄbĖ<ÅH&ņDÂLz'ŗˇžÎņ/|öwƒ$Ĩą˙‰&åæĖÄëØ}ŗ{2ī´Õ}âëX…Đ–l5LD>_õ$œĒz^šdfŌ‹îq~6øböæmĢßß}Ūyē:ë>ĮūĸZK™UæËQ‚$͐(ââč 'WßTq: ‰ĩ5oGZ†Z%˜›YžDDKÔ’Š ­ HžYŽāFAŊ‰āę˛\ &„ģ–ėŸüqëŠŖûĻÔ˙äæ­°øÍØŧ#Ÿ’ŌxīŒÛ;.ļ8ˆ”&Ķr¨Ų˜_uŌĮÃ/-ôû3éœÍúyTĻŽu YĸŅE`F˜T! ^C„îœŧūvĄe{ü¯‡"Ë ')Žéߝ§˜¨ôœ_œûÉû.ŦŽķhg“A5Jí$¨ĸ‚ėĨīlˇ#„UĢëKd?ŧ^=¨^Œ‘Oįœ—§ųŖĄøü´lé^äķNf^SÕŲ Ô8 ŗNq‘¤` !¸ČĸŽ ˇsÛëXūõ|YgŸĩŦ_ G/e8YĒ.†îHĮGōE˜vFļ …¸SÍāJ]‘Ēxöâ-¸ģģ_ŒģÂdLTÄ$…Įn"cf)AiîûĄøûx:ôķĶ1ĩíõAõîįëZĻ`/K÷NƒhĒZڂ¤|ĻúĀß~lOūî—ŖA2é>†ŧ™†jtˇH)Ú+Ė’ƒLžZĘMĨ ÁMIŠĩÜHMĻHnJ*,•õN0HJŌ4ŠČˆäáĒOˆW¸Ęö °]Æ^‘ŸĸŠßÍf¤lūߎG÷X™fXM7°”ÅŖĒÕD,ā@ŠÁj§•I:JwȤd ynSë߆ßčCIŽž] Ūīėíâõ¤?PžzŪc۟Ļr(įõņ¯a˛øƒÃôo÷žî÷é4S@R"’ŦÛ1Å7ߞĻgwŠ^֜(3 ąąJȴ҃CwŌR÷Ą>˙ķÚžŠŊĩŒg°oŦŒÉ”+A=hOŠ–HíîAōÖųŸÚYŪ}}ļ#>TÅč¸Bu•1RgŧtÜP/Ũâ5sĸd‘”Đ 0¸ĐāŽ´čŪtUApčŠŨũ˜Ē)!(ĸŲ–_:3.]_—úŽ/\?D5 ã¨ëîMģ2îôpéú>~–┤ĸ¨{~žgę)dڞ#VęV„Äv!ëÃjb´ŽW)y×{B#ĨˆĶĄgđĩ×Ēj5ķ uL=§ ÕMkĘČ\<’ŽÁ&… Ã×YØ Ũ’ėņ‹*Âķé ÷îûĐIåâ¨õ ë“ūY™O0°į/ö€7Y6l-Îg‡ƒĒ ŋ>ÍP$[Ŋüã䋇O*9ŸLá0¯Ŗf)FÉŨ!t§šÂ›|Ąâé§QÂ)Ũå€Ģ˙ww:ŊÚģeíiŪj#‹ĢVáKElUG{ųîIi‹7O;.Ķá~ųzØeTÂS6Ö`IŊ & ͤ tŖ! dFŨ’ FwķEŸ 3iŌŧ­×$Ģ” \¯ģ(JŲ6¸Ą_uX5Ÿũ*3ēÎ՘ßiß+EīĻڔ¯īĄ3øú „pįPΉķĐ˛ĘŗLg2š•yéŠNŪ§OĐA6ekī˜ģˇÃŽŧ Ļ2NzÂÅ^¯ŦÅ<—‰ô™kÛ>ļ§ã”¸n!(%Î3JĻXf*(‘;3uˇ`K`”ÅË÷ËސMNõ8ųG›LÛŊÎl6:M;b~ļúŽs´N8/>Z͏Ŗl.-§ģĐWbŠ‚ķųĢwą7Î%ÕAJÆMÉ;¨œ‘Ĩ*E<:)°$ë "ŨķâĶã0á›ūYbģũ*j˅ũĩŊ•÷/Į–Á×.3­×õāįīĘėäũįõPúaīŋMēcx]ƒŒ™6­*m™ƒXH¨#Y¸§Ę3uiøēšļjB`Î+Žģ˛a\—,jĢĶ4Pûnޏ€Ũŋ¤–;™6xW Ō͟Ū7nQĄÎyŠūīUķNKF‹ņx Á×TRI)2ĐbÂŖËÚKīX˛(*ē’hŗ=Ę@<ĸŖåÄö:Ë*ĩãÜb–y™g•‡Öig™z^ÛĀŊēõp´ĪĶÎÎR¨sáŌG ëdĻ}@‹ŪīWŖãsŦæS=?Y„YbūaŌ,†sĄ?ŲY:i{īŨŦœ ÔŗwæŌI“C¯Ŋc`EÄßŲ‡Ũ8OĒ@–Ad2ĨĶÃbM$"ų@ܤ5%¨@™Y úųˇĶđũė#Ī͉RųøëīžûpøåÁЧs°LĨ­ŗį†–jTvøÜw„ŗáė¨m™UĄũ¯ŽōléČhŠ:Š—< ÜŦÁŨčS-’ĸ3ÆĐ Ö:E“DWeô qĶ7u›##°dES¯î‰tŲ(úMŪŦoДuŅģ ‚Ô °Z‚¸CsššõéÄm&ģŨ#7éĐKāäÜü­5p'$€ŨŧWžm C`.HĩįÁLÜS p%S•lŅ/kĢŠNO\#ô qíâ3Kƒ”lQ!kSræŪMsí9Vv¤eœ3õ5<ŽwÃ÷=› Ķ[™ŲqĻs=ū{ņÁÉŦHũ–{)L5ÎëšĢiįŧ“MŗLÚŅ-ƒ“‘y B­yX剅HŠãĀg;ēNALēĘ÷U‹•|–Ž“|ņ/˙üá8Rf†‚‹Ĩ“LĮgŨĄccwõ†•ė~,Æ3;_$ŧ;ŗ,tgH>NkA‘:“–›Đ…AĐb™įáB˜kŲĄƒęI ‰JĶV“dÁĸ1˜!˜hŒN1O @hŽĩåšŧiŲŲÄ Ü¤sI"lúā\tČKŌõry/âU¸üđSIl3ļ†îƒŧrØ[)BWæß‚ˆü$ķä"ÍéŪŦøsnHî tÎūô’~ō̃‘×Õ{‡é›Éy§vÎĐgĢ>˙pd-˙ŦÅ?œųČUė8 4÷ēLfœ>—‡> a>˛čHˆŠ;ņ!įų”L5ŗDžÄ>WbĢč!Ë&ĖufĻ€œŲģBC§4°?BšČ ˛gÉR‰Ŧ+´÷#`<ąX÷8YŌ›ÛîąvĄ'č÷ۙ@Î÷eco=†;afę6F í…ķUW•°uĄfæœõęéu‡ŨāČž ėŽœíā+ÍÕaI‰=qŠkÛ Hĸ O҃M jp3QwH€[ĒĐ Hu´ (ķv2Rb‡ŌŖ‡ËR×ŧЎšŨÜ\÷+”3éũH˙ÍÛžâk‡å)ÛhîãǧcĢÄ^Ååē8āÅ!ĘåĩĨÎčė¤Ú>Éą°/Ÿ GØĩŌ‡ķūãÆŨ騞~=ŋ."ûã¯UB=Jũ ’RŠ‹ŨĨė`]ÉPČ(¤—I˜¨Lvüng/gíX5ÕĒžĖĒhN‰‘ŗįG–ŗŊˇ 2ãûڇŊ?Ķ~ąĪ˜â2AippÛģgoÖũ"‹Gn2=ˊ㙚MÂnļîŽe™IL ˆh™ÁŖŗ ÁAVÎB{'i1p§d°äRHŦ‚˜ĩ“@<ĐģpSÁčÜŧgķ §ũVéÖJŪNÖKQTbęËD2f)%…1yžOe€2!‰ôDh“$Y‘Ö˛Š.–œ]‡Ķb)Štšļe ‹ }žARvOIa.tæM I4 ¨ 3ĀCÜGg×=o~sûMúúŠü”ˇrÕ_}Á4¯øu™Î|G3Ģ$.§Ģōŧ͚Ŧ3ŸvžŸí”/.šŖŨ~÷îO==Đúũã ˛÷ūõÎĄ¤˜-ž N^Íę×Û}ōå8o™ Ûnsc€O˙Ü˙w#r[ j #5&ĸĢûWū‹ĨÃ,”k _ä^ĨÎŌ:ĪÆāP’MĒzĐ6mŊ˙Wƒā†wõ˛59z¸ĶfÆôĮøh'‡‹Ī’'čČגRĒŖÄT$[]–ãā4•éMĻ&â$ƒœŽdî+ÕÖ2Ŧ[Ôsk/&Y'Ä^Η~Ō‚ÃŨLb’ÃI*Öąëî5áU0É59<Ŧ ÂÔ°ŦĖ;ļvĒ÷“„ķÚ8,`•%´S":âĶ>€~ō !#r1$QJsÁ> ĩ’rg:ë0‰āŊgÔŦԔTž˛ÚāKŪ‡ãrƒKŪaeü ģĶĩrΉ/Ļ]=ūBû'“>RŠ'ߞ?Ní8ĢžŽĐķúŲÉtģĪDÃŖ“ŌâÜ/ßwvģ{oząŽÔaģ=üöõęûßɋę˧æ›ŪĒT#AŽßøv3!ܧ:˜ĘäAŖE˞˙6F[F˙r˙čÛiZČˆŋ8Č3q5gō~ÚWU{ 4•_ÎĪĶŊņP2Ô­÷ûrąä,z–‹ÅD4ŠŦ‹‚bƒô5gZSŖĢP,˛5WTDg–aI5T•k´ĩ™x”ÆÕAå1 ēj'Ž• ‰hJO™Uë@(*Ëu‘H‡}=šRsh Ũˇ)õĪ(Ŧvbļ:ägˆ6ׄv†´ōÚ™ĢŽ&Z3Ô q'&¯Ŋoë¤M#ííō12[íķÔ+ûúš—Î~d4pK9ģ{ÚO=ö•@Âå˙Øo/ķIŅāÃÂęîŗá‡0V´ŲYŠUjĪ{žá—ŨwGU~;zō7ÚzøjR„B;goc´~ũūMÕ*ęīĮ‡ĸ—ĻÕ˜ŗ+§{Ã&€ĶôRJÉ)P3FUIōĖëékzˇ˙ø`gøäũß}LūĮŖGOG#e€™*‹Ɍ.dā0UŖw‹IĸÕkābb”@Í(TšĐÜ|FĄG‹4'rPēŪĻ'j‚ĸĩr7q—!áÉyÍiqņÔŖë&îDOfFOK›Úw#­6Ē’€¯žĻ4C0ĐKÂÍÄĄ‚UŒR(ĪR–ģ+Ōúu8w‘‘ŊŦ'ķj4īgzXMÛ˚bĻCß)ÎãŲá˛Ö?.ö:ŋējˇžMžž>Ēí¯^Ú2×ŦŅ+D›1īw1é+ĩqG"nîd”V%I[­ÃōÜ>ÂW̞…?ū_LŪž<ëö{Ŗ<,‡EËË đčûĪ×OęĶŊv¤÷ļ‰ƒ‰ÁaeÖ´P3Đm›)”šîāež"Ûļtĩ$*ŧō˜ŽEęŽxdÕįyąČ €nĩ{/! Øš|Ūũīn"Ōvą6ŧkåŽâlĨŸANĮåĩ\nØŦÂM˛úi)i÷nž\]lzæÃ•| įë”bé0­ˆU!š=ĖʓÖ ÄîĀ˙ôĒ2ī÷åŦ8K`—TėÕ'Ī?|ąŋ<ĪyØS¤ŌŗĐļ´XOöI7’îļ‰Ŧzĸ Û`2ī?ǟ|ˆ­VŲwáđ`\vžn§īūôVöúûƒƒ^ČrM‹BŽF&xšæūbŪ‰JjH Ákoō^éBwW  ›Ę k¨!ÂäVĩŖYlD”nbĖFšx`›ōÍĨ¸ŽxušlM¯]Gōnŧ[f\a6 ~EĨņfGS°ĮKënûŌĀ?^‡r͑’ė"šy{wËËģÜÍ?6š“Ü0Äu9¨‡Äuxčg#x<“7ČONžČ[ÃoŪڍĒåŊ§ņxîYNM•@Ȩšđđ؟^r¯{yGŒ”Đ”8€ SËX7Č.ˆPƒWđ˛•ub.ĢIį{ĩēT‹â=Ũ=|û˙,ÆīŲúlˇ7VĨ…WMķÖöxŠâc™@ˇÚō]OERY+ypm×9wÜŧņJ6ÁI‡¸S€ĘDĖŌēG…oĖšm!õÆįz-–LOB\—ĒęæÅÔki@„3ŨÜte¤mˇ…Ģ;xûß•ĪžŨwē8€Ãļ÷6×ĨÛDÍKÖč× ŗ›Vã'čjW‚æWgohí'bå.uąģÎōŗhå˛>ĘĢōÉxÚjī úbĨA‡˙ōÛwũĸ\Ū§kîļF–‘HíĪ÷>žˇ.Vë:Л4y7 ĸkkü! ŽsĢŠ*uŌ]XhæA…qĩ’ŗÕ~o'‚éũū~ĒFŸ=Ũ­NŪÍf_ĩŪ9“(„FxhGՕ˛ãCĐ7Ą#x"5Uĩ$wá¤@ēLNr•ĨHM5ķātˆGfn1*#"$R˜YƒHs%=›Ümƒ˜vŗúÅrXR.—zķĖ)Û$#ŪúĄßÕįķĮ¸‰ß×įõęē_-ũK”-ŖŧrÁMUÖuĮõŽÕëN4\%¤›ėërûÅã‡J*ĸŲNkÕõãŪōhŧŖtžÄŗ'y•§Ã<-ķ,Ų”­uģûøHwŠĶ Öl/ëĒ™ĄĨũüČY&@ChæS<Y¯Ü eė¸+≠ÜÕ`)îžß{* ūfÚy‚vúk™~˙ũ÷į=œÆ*Đ}Z/mvúpĪö%K!dfî EÍ)A*ŖgŌŧĩâ§;eÛk¤$¸ä,GYfN果ŌĒc”LNf&áN‚Áéž,ká0Ũ”đ\]‚[\…ë‹sšäy]ü€:õãōĪļĖÕ7ķŊ*Žģ(6E:7ĪwUˇŊ=>Y—Û€C@j ÛŦcHė…qīėōd™=MįÅĮoŸõ9*^Í{<īôēŅ>°ĸûEÜ#EBá"*Ą¨?˙sŲųŪÆj#Ä)UŲMF=¯œIX˜7‹\YŦ˛w‹<é"ļ„MįKЇE˛*t7˙ęėä›īk¯—oėyŸ5CÂoãcŌ˙bØÁŗvŽ thđÚÄ@qQ›‰2@“îkR*THZb­ÉXg™›S2S6ĸŠIæÆ ÁĻ9AŖäpĮĩ:ķæ‘6ɐ€›SüYūB+dvM'ēiã5mž?QTm–ûōiũÂMŸ_pŲ˛ĩ=åĩŅ(ÖÛõk4ų#ôueīĨ!pAà ũ|¸^ ėî|öÁ9=€1 w—ęoíĀūá|>øöÍÃũ­Ö­Üzy†ČûVąíŽ.ž†„ĐĢJŧŪŲiš’tqõūÉárądkSŦfí€iwŪ!ÜRp¨9tž:ÛĶÅz0ļÚųņś]}P9ŠJ”Šë­ŨŸŊ{E=ûxrtJQŽŠÁd1¯q,Ī]øųÃ'ĩßŖĖØžĩĢâÛūŨŠÔtįYôœ0ƒĻZ š%V ’n"žlëŽEĶ@3ŠIÄIOÔ m0WŋÄ€&IŨÁ2Đ/AFšiĘ~›u\ŅûšÖífÆĝ|#☚÷ß'(N}@6=maŽ+Z׏~íîØx •ā ĨNĮíŧĀhØ_,–ÎlQÅ,íļߎžäŽWg{ļü˜L:ėNĸV„‚YfŧĻ™´ęúõ—ÃĸI/šÔîãa?īz) 1:S{œČQ́ų”ųۓų?ŒjgąČY@h1¸"I;;šÉŲüˇu)“:zĢ6Ėks动ü>øėÉ^^¨4QƒÔF¸U™‚0SôHÄÂéĨ…æIP“æThĒ„ŗ~CQ=Fk („[Œ]"mäd[3Â\7ØÔŸxt*Œh’Āŧäawku7ėSōô­3o>üh<€~ 7~aĶ\9ÁEŅüÅFš›ę“ÜĐÍ6jÁ”Û ~œH§7­pRšŽOFu‰ĸũ|öˆ˛c“—ûOŪ,Bëåë¯{×ŪģTßĮ°ˇ´‡ËԁRE°ôK͐™>žôî‡ĪRj@^‘’yoŊZŦf]ĻēS3ĪĻāI”†p>owß}sŽa§ësĮîū~;˜iOUĮ]WíeÜAˇžÁ: ß8>+}”=ŠU™Go˙nüŗ_>4JnIæŪčŧŽn›Ę?Ëh9VąåÉrs1Ét‚”ú­Ę˜[" ę€y$“+uŨ\™6YfB(aŽ×ܐ&H„‹rۆŨR¸ÄÛĒE×<>ŊíšŨĄr_YLĢ~D?ķĢduũPw)_×´¯ËĖíOuķánŧä­1q5ąSK$-IŽĻ­Ū̃âķYm%Į‹*C7v‹ũÕéG–¯ĘƒåwXČāčŠĨ^ČS&–Ŧ+˜#ՈŅPüŧ9û‡áâMS,*ƒžĮqV')Ē4tˆeĻ–Ļ$øãéGßŧÛų›ƒ˙ą7m’$9˛ÄŪS5s÷8ķŦģē40ĖIėÎ.?”ōŸņ‡QV(B —ä’ŗ;\\;4ēŅ]čēōŒĶŨMUųÁ#"3ĢĢ0"Uéî‘ĻĄĻúôéS5ŋũfũŨo˙áĒüŲlalŠĒᐈ(LehGĄ0# ēJFjļfšmœKÎ}„¤â& '$ČBŦX…ģ‹W.pƒ}‚iØsŊ0„aŖteFA¨  sP„ûŌũžŊMÅ'áĒÂĄW6„úzāSú´Ã XėÄ^›¸/ēđĀÛ ¤đkā>Ļs8=âÍx8swŸ‡‹GD($ÍÕ:„Ķčōōöš75ĸ¯.Ēqũf2ŋ]žĘÕŸ,¤¯ˇõycŠĘĒT­LŌē@īĶņz퇋ī67—W×ė*Pāŧ}ũžûņ §ZeDQ v)T”LH÷öæzyôîË.˙øķÜ:./—OjmÄVĄš-nĸbš­ÖŲĄš4NŽįΟMØ×ŗÉņüų‹Ÿ}ž~õnjjr¨­ŠĀ DŠõ"”dĸ÷ŽŌ–ÔæŌö^ƒŠJVĻõÖEÜIÃM„L„P! "1āŪ™ä r`]Y¤œ 1 w´[ŧ $÷ËđŋđØ ¯ė|ãõ0ÂL<8„mũŗÛŲ`f.*ßįãÛŒ=I$™÷ŪK؃Mũ 4ÂģOKŨC9:O€T‘ĶęĻ_ëÉÜ:í7Į”Ļī*ío[}1ģZ=žûĻí‘ytZėņŠC’tŊ̇h“š˛ÃÃËåÕy\nŽž}Ŋ|ˇø•œŠAĀuß֟WáU uËC›nęÕ›?‰?~ƒ“/&h—‹īnŽ&õhæˇmÔ Û¯ĸ“2Žręõą”~c%ŖœŸ•?RgĸÍčéļ_^nfŖ %܆ *5•vá`Dvs:FJ€"AĄHd+*iŦiĒIΔhE3CbŠEė´ļ•îķųŊ×BĮ!qäß3ƒá ›‚0÷Rģ‡Ņ•w ûŨCĖũ§tÖŖwõ‡öãģ=ûž×:Īģ;ļWŨ' üāîÍ/šI ™81ˆG 6bôø*MŪ‡VÖ_čõr<­1jĶ}^M˙ö–ßžĩĪčŊ?ãܰÔĒf)žjwÔÃ5Ū˙öëã˛úų_¤›÷]ũŖįō›W?<ޜ,YF‘C˛XžahGđbë7¯ũ,}ûēJįĪÎČÅw—W­û’y[×­æBiga—ĮX’Ķe—)rš8šŲ.m6}qcŊÄĪ˙ÍÍoūĪÅŋ{ž2ĸ ­2 ¤ŽRP“a §y2hPŦ‡h´˜nšc-4cĐáĘprčE ´H0$‰44æåívĘ0M~il¯ đŪ4œ0O‚*X÷ îĐâ‡N)€8ŪĀ˙ü=CÃÁ´?ĻHÄ{[Ĩ…`_’ŧÛJģ×Â0Žų𤃆åá}Yė%11LĨšûN ˛%_dl孟V׏JˇîmōlžüŖ5Ŗœįy2W (•SSŽ*I”Åīūũß}1úéņ?pvē|Õúģįķgĸ@âĒüxÔˇ#x0Ix đ0…Ö˙ᲙŖ˙Í{ū̟$—æöŽONĪ@,ķLF„_ˇ™étœáUøļíģ&5\\RĮlu@-ŧ.X˙ī˙ÁŌėşáˇÔGĮÛWW1û+ D(æĶeÎŦDéC›ĒēģFH[ųõŗŖŅōˇ¯eū—/ĒVâúv‹§2Š*öI‰R}×o˛*ŖmÅļ‹ĀrĒŌˇ~\ŊļGĨšâY$heÂG˙Ķõë_ˇįĶ<Ą^L›JD„ęIēAĄJ„;}o@]Kŗ€„RD TT< C´$ƒŠäXVnK)!*Û iŲÉ!ėƒ/+؝;ŊÄ{ëļ7¤ËĮˆī,鞁܏Ĩ†˙‹Į§ü?r¸gį;7ŗWØŲ÷ęâv‡7Wš˙D‡ŽņpÃŊĮÚ}|?m7ąy÷Y‘Hšeĩx—_ŧÔÛwoSbĨP¸)JxP‰nî-šäHŋų/Ũž?Âõøž¯RUâö˙¨˙. ęüõ wæ°J,%ÃŧõÕ˛žžøöu<ūËĪc*Ō__^NĢ8Îįn›\E”ę˛TĢYdyīŽFÜlį YëD Ÿ.–cœYē*J f?}÷÷7˙ņü/ŗlF”°j5Ė ˛‚ŒhDVĪ(ŽĒ!D˜¨†\šQAx€(„Â!ØĀLÕjú„–E‰%õJ7Ę0B9vlū Š`eČßäûe÷|Čí¸W’Äž¸ŧÛĶ´`?=wįž]ß}p/‚{q]Ū ģž÷nī¡ģũ}skŨ‰TY>'ÉƒĘЍǿÂī™”ä0*2ˆ† ˜„QâH)Q8p…ÖT‘]âo’D‡>÷ų`¨ŒėŌȁįĨ ĘŨbūčZ뎘¸’‡Îl8KūT|öņ2V(‘>žÍģ)ōøËũ¨ˇģ/f‰=FøŊ˜CąÜį_ôˇ×‹ãŖe÷¯_}ör"eúCw._׏“(ᝠx"$ܙÜĸŽÎ—_˙_ßĖ˙‡ŸL%…ôöY÷‹E“Oķû_dŽÆX„eīIĸ“æũÕõÍÍē_+ũˇÍŖ™Ž0úæŨåōGg'U1VUƒÖʘīlŒíHNũDxβ&ĘHVe4ęû˜Ļ1utYÍ"b|öoņöŸÆũãID„Hä xæTRx„[¨X‰2Č"‚]õX8ÔÍlŸČa(cæ](=\ēÃ×DĀĄa‘*īÏØÉŨ8d•Ū÷*aAaŸīÛÅG—ņîąõa;ÅAÆû_Ūār˜Žw?ûøËwí?ˇû!qųЇŋÂĀ.¸+OũôæíģåģG9Î6ŦíØÅJiOŸN`…īRrPēaf€>ŪüÃÅęøĮ~’$)\OĶôâĩ>Eõ䏞Sâ—<—$NdZ_$IŒ~˙Î7ūÕj?ģXūîķwŨDÉ=ēIŽ0ǎ*"âæŪiféy˜LåĻQ¨ÉMŦ¤}%íâiR9 ’ÕpœE3 +iPp؃ūC:70&÷hūayŦīcFVw @ŅģéƒU?ûĀ yūįyA`Ž! ߛę'Ŗ1ÜÔGŪ=wĶå?1)ahtŲMÖâņ1ũy&đ(–‹›…ŲÂ~ø2 aÖÖ2 K ĩ¯ĒÅ?}õϜũşŸzĀ=úÕâ„ŗĶôŌzģęmG;$ ˆš mÃ7ũ…Ũøė/˙F}`N7ŋ}ųgŗãJØiЉÔŲ¸ĩ§ė¯8;’qKÍMĻ{KŖK*V’–œK¸ßĒÖéø_ßŦßü¯Ÿ˙›/*î>$ĒõÂ"ŠYĐzd‰€ŧW/P 241‰% C „Übč'Pí› "4JhÚ ¸yÖSc0îŊûú°˙VU0¨' ‹°ûõ°rø~­øĀ>} āOÎC؟€Ō÷§ŽøĪī?i÷ŪŅ;"ÍpW8ŠK†œŌüø˛™<¤?@՛ø&roÄ(<ēö×˙é]õōo|…Ņļ_~ĩ¤4õ'?~ũëü͗“ ,0Ĩ—pP$#B3W‹›Ûoŋ)qōgųéO¨Sĸ÷õ›ÍøĮãŖ9"­°,ĸˆhÚ ĐauŌ6]7:Î +lbz1Ģ :# DVËɯžũ;~õnRZЏ¯ ŽlqŠÖĩO™†›yÕ{rg´Ą€0Ây}ÉdаÄ]âwGáŪEĩ3ĖŠ€(;ŨŊ;igŪîņ ŋŋKŪÛĻöQ3ß?÷ž!=¸ŗ?m8ģ Í2ģ€ßŠČy(@užtŌMX@^ŠÛ DĒē–jüãßߎ~đßŋ¨5zJūå˙˛Ŧ¤y}į¯6|\…H`ˇn$P\ĸ+¯˙ébqOÎķKžúŠ•¯ūãëŖŸœWįŲZ×(ĨÁÄC&—}ˆ™Ī×UÛøøĸbäõuĒÛ+}!Ķ7ÍÔĸ„Æõą˜d!ˇUųÁĻüņÕ¯U%GĐ!°^ÔÕĶ ˜•€đTUÌjė›QˆÚ8ßiũÄŨôĀÃϰķJ1Xڏļ1é‡Ũņ!%Bŧāaųä] ŋ=t˙ÜÖ ŌøŲ?ų >âĮâ#ÄŊg:4ų‰ĶîŊŒėūĶ,\Ás¨¤Ū„`æ"$ Âĩ„v†ŲY‡,QGųō˙ûîäÅ_=1"$__uėŽĻOOú§?˙•M 2B*wąVĐ÷Ŋ˙öąØ6?ŸĪĻë§ámŅäņŨˇWų||ĖvzÃÚR•ˇn™Ë~>]ĸKuã8ŦKlOĐ[NmŠâ}Qŗˆl‰)ũôúk˙EūÛŗšėER"‰ƒIčA˛@ >äĨâNAW ‘F?€Œ!—ÙqŅ#ß~.垎–vŪîŽõc }@Ųųįnƒđ=Nû‰|ķS‡ø%ÜššŊĶ…ģđ0Oōpb XíĪ˙Ô×ĀɏŊƒŦpŖ ĀäkmŦ’`fQąFôžŒ•=ŽJX›ƒ^Ū|õēúŲß>mÜ'iÂzĶķ6äũâ4ÁoΆ›@ļ\ũūÍR^ûėåŗĶķt:ŊĘ^׋õÛoĮG/ž“bšcDÄ6‰äÜ{âąĖZŖ§ØrĢë8Yé߆¨ƒĨ(+š¤ŲšS2lōŗ?üvũģQ]‡Lą§ģũ1qû—FqIa€e˜pˆx`f>„ÅĐĀ7tjÄNĘ=?Xŧģ­åĄėsŧ;@á__ß_Ąž!Íj¸ķą:úĐ`b¨:rĐ <Ô¸ŖSČ]§?´OŪû`ŨŊąáĮ0ŨĸYd‚0#Ša…•  <åđ V(HæZ-^}Ÿũ7ĨXą7ŖĮ˛Ų<d3ZVõëßë싺¯›—RzôWßtŋģˆųãųŲ§/S”Ō—ąQŊžøĮ›Ŗ4ŸœŋL)KĪ02E§46„F k‘rģŊŒžc’–į›2ŠËâöų(wŌKnč>KÚ);B“?ūˇņõwٌ ŗ\OīV#Ü43‚†Ę ]GЃ8:čŒB9 ĢĒÅļû˛ß{n Îđ›x Ü ą_hۓp>zŌ§náŸî,lĀŦЋ{1UĻf•6ˇĪxģ|œšUH°^SßĢ:žŠ\aĘ#’t3P…ვăō1W =°oōr ríÆp— ß1ābžĀTŒ"K/õ-ķ(âts_ģ•ŋ: C—ZÂŪŧųŧØīÛūä™v˙é˛É+ųÎGžģŊūîMŧēy<û+9~Áæ´w$ö7)-×åríããŗįJS­3 Īr+S/ö^%ôƑ ĸáôļSņÉļķļŽr_6úŠu<&Ž€Îæ7s)IU_æö՛_<û ÍU_ ­€@t(ZÁ0ļ“=" ؏œØÛKĨ$ 뿏î}ŨŪÜŗ‰ĖîC›‰lģŌĪŽ„ķ}lęOÛž‘ä#s*ø›¯ÎWëŒHŠ §ˆ“1cBÜÄ|e)眭„Đ5“bīüI˛>č|–͍ŧÎQnJ77f@æË0­YÅ&éVrŽWÅĩĸĢĶ9R_‡Ÿ Ŋ”`ĸ˜“ôz€¤ÛTUēJŋŽŠæĒ 6ĀvŲĻ>ŧ3x'ŖöÛÍüųŖĒģ)Ž—Į?č<ŪßühöeũûÅZTÆŋ>~|íoŪžŊ.eüüņĶ—ķjD"Ŧ÷ÎŽ5~Wž;o^ĘécrKö}ąÕhÔHíæ"ūöqQT`ā‚ 3Ņõi9Ņq¤¨JÛÜN5ËruN›‹•RÖį?{sķúwĮg˜Hņ$ē˸JdIšԃ蹎čä€6ڀ`Cā%\b–!p=Ų÷ĩĮŪ`ī’ŌŪ>ČÆƒg|Ä!>ĀŨw/ļÃy?–\žŋ\ɜךŦ/hB¯¤’‘/Ú d)MŲl¤ēNŠm$ŠíjŅÛcĢōmæŅ•ĪŦŽžLR *KD)ĪJWŽ)k™ątΙČFˇÕ5'’rÍ,KI‚WzĨ×#:tÜ!Pļ¨ÍÂlR8]ÆØ/æÉK‰åL!ė}Æõ°é¸ā&Ē~âÖųE<}įĶÕˇŋôŖķã•Tz}u/Vīŋz:ŽÉíÛÚž8ÃÚėko^âĨcJãĪæúâQN[‰r´‚ŪôåļŧššOy–x]Ž|ŅģäQˇiO,eŨCļ×Zį…HX*§õ‰]ú˜˜įØBé!“íĒn“$[ž°ČJĻĢë›Į/OV—˙åɔI=" 2#(樇Ę╆°ĸ/P„ĢĐB7 ĸßļ_GA}˜‘2„-!НÉđNČØMĪģ{đN˙ũž™}ĸ#ĘÍõEéÆĮéū ë[C Û#‰˜™B/aEŠ3û°ĸę­DDBše‚ÅxMS{[ŦG [Ų<úĨ@„ˇËŦš…æu ņ‘ßJ…¸BåSϤŧ $ÁíŦ.‹fȗņ…Ō§Uī“žĖõŨœšJŋJcŲ`jæ#&Iqm1Ģë$īâJŸk’īž\įŸüYbx\ŊesöÍĶķmŊē|ŋ~üd„_Ų…ģĪ.t2 ŽO’ÎāˆĒ)”ˇá‹››2?ŸŒ7iÕv~Üš€ręvķtŅyåŠR^˜^ĶÔčęúø6Æ×įĢĪzOG tŊ?]{ĩtb•é™fë4wŋ}w3ûō˙õã˙î¯ÃLc™F2š÷Ļ*¤2@–")Š4ŲyZ—a2"ŸŋŖšFIčm7#}o?ņŲaŋô(ÎU2ÆEŋ3Ęß,ŋŗĶˆÛa.â÷ąŽCüįv7šåžÕîie G„(Ũ\4ŒhMR†ĸ0E$z)Š’ŌÕB5kÃg€÷f¨`a,DÕKDņbÔæF'°ĩlSĸ%Įīsē6VXoæIŊ0EDgXPšQ"Ĩœj{ŋđđ˜ž!Ģ•L_æ8úē[õödĨå˜%ÖÄu$™‚nÚÄE9п͖sØ´w3?Ļ'ī]Ö70[ĮįŦŗ6QŊãļŠBņRž°*Ŋūq6ķ-$E }„îvĶŧOWĩoũH–|ƒŖŖ6|[ëĖšŽF*WZÕdo¯ņîÍoyôã˙ņĖ}*Ą°ąj=ŅÖŌ‡CŗØz„ŠdE¸æ¤˛A˜ÅxdNĀĐc@@ŒÆ0á‚N‹;RtčJ3Ē{ėJOCd.jĒæģßŗˆqČO{AܡŖ˛)'Ÿ°ŗŊĨí Š‡ôäŪĢî'ĀŨŋū÷ägÃAŲÃ7e÷ē2R3x ŗJŨC䠀ŋ6ÉŌ¯˜ŖĮ†(‘<")z(Õ›+gdYŊõÉ3å*~õÖ§?{ļ|íË.~ę TX-búú÷Īô˜k.färIs’É+Ęâ´ŗÜâŨBÉBžûu*[N6›zž6p.čA§"nĒ$|ĮŠHéhvņļœÜ{‹ŗ´IŅFÄČD%éé{™ę–+œˆ;ęôîēÕËéŋūĮ+Đ{_Y•56SÅÕ(Ëõŗ÷°9Ám g@Ŋ¯XtŠĒ‹”säÜoÄ"e}yĪ›YÍUTäzėąĘâ}˛ĸĶŌ•Đ°’$ÕûrÆ%w‚ˇšĖŅ3ØPÆčËԋkR"BÉÅE%LŌĀÕb˜ĢúũŸ3F Âlyū'í,v3ÛcØÕģĮ=…ĮãĀ2yđŽ´s¨C[Äũ¨‡ˇ{–‰ûĀŅŨÅĖE\'Bā`ŌŖąŪ ŠZ\Ŗ÷ŋ8ūŲ™—E˙ŸŋŠūæo´Ø2~—ŒŸĨ#Ŋŧ/hÖŋūß&÷Ä(In—6FގÅ‘loũb™ŲTY(Ģ›žŊ‰_ųdžˇ)]—ã+xëTvČƝãŅÉ͕æeüęŧŌb%xˆ8*UšÖJ/m˛UGtĖqëŪ.‘_LŖ.ŽR&͏Š™ŪJ•y3Îzķâƒt—#ņÅÄf\åÍú¸DŌڜŠÉQN‹‰Ä2,ÆQ];‰ķõ*N7Ė’Z-™`ؓŦ×}8æ°&-,d†K?i•ĨˆjÃÖ.˜™(u”¨RF ĒdOXŅj˜‘S°+AcP‰a ą¸)Ī |ē°“9Ûë"Y?ĖÜöĀĐ D”Cdų@sá>u|ˆ3ŊaŌíģ\g°˛ŨŒöãCĮÃŽôÄa< Ǝ°"‰´ *ÜVŖ¤.ė$,`ŗžŽôäLD̝ūņũ_=ʐËîâÍO"t\—Ū\B5ãŗŸ.ģ|~´=J$M<ë†fÖZ{ĩ._m§ĶŸœ t1m˜Äúgqy)§Ę'ž*murŠYĪUX_5ÍrŦüÜÅb™čŖ[ĒÅØē"Üžų ĶAõXØw0ÛÂEŗßTōö˙YžéÉįįbũ֞Ēo=Kf^‹ë—XŧW‰ÍQ/Ē'‹‹qņ´õ>4B旸ŽŊ'=.[t[ĀטGPĐØ"5+UFA•RŨMŽļQųqĀ­ÖĨûhŌ#aŖ‚8ĩEHŖLUždĘ"ÁŅhÕHoŖââ€įĒɞaKɎjĖÅäÖGY\…I…Å’$ëQģu>Ô'>]wōĸ 7O"€Üđ`§ÅāUNĸpG‹uęeD Ў‡Ģ˛ßEöNt×2¸+0ņåŦÁ=|ĸt„€îęŒzK5‹—2‚uy[ƒũõĶŗž‚¸]=Ō1ŅsuqRÕÕd\ļũöģĶg)Y œüuņW˙!|ö3Ļ*OGÍ傸~ÕS§OøƒúhR7‹ĒNH•{ī^ aÔĨ,Įĸ[EĒåĒĶØœV(ēŨÆQš`ŗzâĩ§ëYĒt›–g×6œ¤ "ŦGflŊ7éIąŖl­ŋ_=ũũÖâųã A}x†ˆœÂŨAˆ{ņ„ĸ5`Ŋ €a‘ŪS %$V1ÍŅz*ļJęâ–×ėŠ(Ŋƒ¸“U0DÉíJT*÷fkiE‰.Rˇé5GoŌX$Úm›ÂQ,Œ"˛$HëWŽBÅLWl›(J€’âhŒŌöë,Ķëq•ôf5EHîFĨlÉv’^^ŋ˕ßvvjnFÕgį?œkÅ)}ŒīéĪVčG5\nĄã¤7˛nƑĘhD]Ģē ģ=^­ŧ+'›ēĸšĐę÷ŗLŋžxƒ@ ÎcQēnbZŠĒKûÛÍEūî×úTK ˜fqЇҭfŠpŖÔ}IęēŗčZŗUÛũIU1 Ņf @}zŒlXėŨ×;c?ĆP×ûŋyDpäwAōĐ åÉČ˜<( āá;xsŠ8Ėp;t5˛O˜ë€ ĨôZĮPĒJ‰aJh v=Ŋ&PЋ*aąë|Ęŗ:Ô8‡zéĮ荁ž‹ÃÆ9ĖĄ•˜"Lš„=IDåZC‹t”€,ūČĶ“†ĘÎŋ8 éĒĩ,Á6-FŅ{Ŋ Š A°îpc Õ´U ŋĒ.j+bĶNĮ™eŽfŅ%fœŧ{4)ĢÛāčjfŪô’nõõõŠĘˇS.–<îs—kdJT}šųĻ=ûjúÅÉ oįĨx 3.tĻ€ īPå‘Ĩa}E‰$}@ĶN56vSx{šņ€ƒ +x˜>85÷°D-d¨0ēęā "ü`3ä!CŒö̏cäėŅ%Zäė°o( ˙“ũƒSĸÔw1Tæ!(ēEĸ§Ģė÷7‡”Ä‡äPŪĀ ›1Ø2u`Z`xŲë‰ėlœAĀËPGæ0i)<4u„Suđ”Î*J×Î ÃnúélܛgÜ~›ëå˛*)ŗës…W~ĶĀĐ(×ĸ) žėeÕ÷'¨ÄbcŖ~Ëô%ãŠĐL&‚€YĻ:ŽyéÕMĮˇWÛĪ>ĨŠRŌ TÛ>ߞˇĶō~ĘĐiŗ-ĀhÃūäfÄQ­c+ĨšŒVÕÄÁ!ŋvģ™]ūėâRųõĶsqĐ-šÔ}}T„ˆ ‡2zQĐ„ęnģî0īŊ’ĖˆØue:(a=U5BĖ|XL2čîJÂÁb9Ą û${ÉŅģėg ûØ`¸#]h‘IvĒ Ülī6ž×WpߡFė€ŌÁvŖjÝ„Šx„däįrč’’đ@ėxM$ÚÕĨˆī&KGīû/ÛIŒöSž÷™#"dđĨQ„ĸû^Ã-‹{īX*:ŲÖ'*€Ęī~%/:åU{3ŅÎzIũjÃ2G$•RB¸Ų¤Z*ąq-ŪÁ<Úx4˜Q4ĨyVĄtĢåI5ŽD+)cČĘŲ>=jō›K­#Ëøęęd´qfŖ¯íėļšĻĄYoHH}nĒ*•ĩ7‰}ōúM•ēmThGtëQŒĮë+/WGĮuXßE­ZŠ(ÖBĻŦ(sax03Ĩ^*qS‰Đ•–Į0 Vu×Õ_J[ Ŋ…ôŽ‚đpƸ{$"ĒM$÷ĩÎ!°2PĀíAƒĖ0ÚÍīJû-Gvę.$zÛítwš›÷ĐELųQ;ƒ™’€9ƒ"p+wú>€G ą˜‹9´QĐīj¸CW9#ĖbĀֆP’„î>%A  —´ e¸74ÁßqĪvŊ^AĐ%7"sA4ŅāØĸIßŲŲn*ŨåeõŖ/ā‹rqķƒ|Õ°ŊN‹3I‘AZzPb4 Įx’…_‹ßnšöˇįÕÉ<ƒLĩHØÚb|”“mkuLkģŠĻ'“ŠÕáÍxĻĨ­dũå4úUôĶQ›|Ū=Ē †ÛQ.VmüČmY—¨$ĪēŽļMU7YsE.;^6ÖJûôsÃ"IĨ*ĘdĨ”âˆâ¤įnX˙œęD…d—†>”míædq‚Q$ (ŘM”l‚ŠÁč#iJt§¨Ē õĨ*;ĨÛ]C•ģüąO †ĩí=I4˙ ‘”Ĩj>‘ėj_!DxqÜk¨ ˆ%„ i!Déf:Čũēŧ#ô(ėmGveƒũQ "ƒnŗž‡bÆ>ÖÄÎʀ *Ā4!ĨB›”4 )=[‘ĒjÁ„X^m^>ÎąØĸËWŪ_43„5Å ×Ģq}äĮ7‹Ít’"m!+^Õ¸,.×mšR´*Aß6Ģ÷)ûœ*`Ģ,tŽF§ “É͸ŨTJØRęíxyļ~ŋ}Ԕ~û¨éWĶÍČĖ“×îG„bf&RbäÄvũDD°m¤ŧ}šžÖŨWöîÕCē¨tČU›bŲûĒD0:Ĩ€ē5Pw2ˆõô&¨fÖ˜ŽĩÁÂĖ8†eŠĀŠ€ŽaËL4€úĀJ4OeTŧÃ͇/ŋ`—šŨõƒīxĶŪ%S@¸[ɰAC<큏öŖīĖÃ˛ˇįž€"’ŠŦĄëŌhj$1L}pĮŽJP(ŒAöŧßÔ0؛H8Ÿ›v čŪQīâÚXNÛ0ˆĸBDIHÕ°$­/Įąšk@nū¸8Y÷[\Ŗšũ‘Ĩ?ŽMø6&vYrŋžęUŨ{o´!/ŋË×Û÷ÛZæą›t|Ŧ`î“ČRߔc÷E7ËŠČë~4­UŠéfŧhŅ„tš’d‰8MãWÅÆãeФīę)JU7}bt‚háeSŠ5⚝†ĐĘkmgQ§eéæ¤ÂaŅ "éŖĄC $ YöÃßĖ‚HĒŠX}ę)¤$Ķ°é„ƒĒsAēíÃ{ņŗ’)y8“IéąÛXv Åtß%ĸwÕĮģ¤nˆÂ\XŠk„’¤† NŽ'rUW÷g;`–ēg@˛!š!ÅĀO8Ũc”ņ@íĻnsB‚‚0á!d¤bH—cīÉÄĀA–5ėNüūá"ÜĄQHĮC„ë 4UĸFPÃŨ™<āūá<ŧq„G{ŊÎ6Đnņy}\pÖl“ĪW•ę(ŠYyĢĶú4KĀŠô‹ãã#9nûÍYb›DŖņb]{ĩ‚dˇõ¤¨ųŠÛķj•ņrõEęÍ&P7í7)5čĒđ‹é8™ĶŠØdĄ9\¤ÂôļįõœĖE#*äĨ6Ÿ˙îīžÃĖĮ€&ĀF`[)e9bB¸…U õ1…{aQ†3å0!ŦˆJ74ā #…™SÆ‘aŒĢK¸ !diĨƒģ ĸÆR¸$ÂB ž+,Đũ; !ĩwĘŌ]Ôp€˛>ąØ~zŽØ!Šdŗ)ƒTá}$ĩ1ˆ|Âtø æ{UŨ8ø§ģbφûdž˙ũyB0ŌūĶíMi7ˆ×…îΒHzĻlfŪoäæM9åÔĶg͍\<=Ŗ7öĩųLcáeôĒ>ZMę‰ŪruBÖ`ŸråÜ´đ›)ęFp& …æŋˇ[ÚsKķ_¯ĄļM͋3_nSŽÉ2uęĒãŅĩĮyåG-—ŊĮfūļœ8ŌÂĩ6 fåúĮ&Â°Ū ËX<üč‹÷ŅūW)ķLߗQĸ/d™šD˛ ”6&:ô›8Ė•[•”čT4æČĘ"á!6t÷ļũ¨Uw CwqZ0 áģŌąĒĐ]$úd6ė­Ŋfi¯îˇœ;]ŋˆmîĨ?ÃĶŽ‡Ëk(Ōfö);ŽƒøÁbˆBƒÆfÆÁ A‘bCÉwj āÃn’ę‘ņāH đËîŪ;ŦuOØt˛hĒCčnBw7Ō¯#YHĪ1Ž_—§§Ōu|}{Ž­ŒĩWãēr÷Ē^š§üE*Ë'Ē1/'#šÉvcĪ=|šÖ§—Ml6§¤˛'MCáx_Ę2$Uf]“ëõĢ“‹§VÄ]ËĨNW”.ÄĻ•Ęļ’Qįaž6˛ĘŗDÁí‡OŠuÖæęWāXątķąãG‹?ŦīOŠėęs5IƒFKvŲÆHÜ€jQR:E8ëč“E›P%=HXgnSPjŅl!ŗ"œ D…wH#(’@ eø0É1@ę0_ĨĝJō~QÓ{ĩGĻ}’@ °_îčRÅĐ4ëŽÜk|ė%Ö$(÷čƒ ÖRä@@WvāˆŲ]ƒ<„^:Ô6?LJtWŠĀ!ôu80hë4’^<4Â#%šjs0F ”­?:âåâöw§ŖÕídķšš˛ķ¸|ļšŧÁã&ŋ/ŨtCpVښå Åēåō8ÕGYeŊ­Ø§oįč#ËŦãÕtT@h‘FęŖü´é=Y_šÂuvcīŽėYU "ŠmícĘ6fQ%„—Ö–œÔŦa] §îĒōÛÔŨž<öjÖ]Lž@å%…„R†X#¸‹˜ō?=™ ĐΘ ĸ‡ë€›ē Ŗe¯pˇTŠ$ĨsĻa/†•™/ĸŪBWãØ‹2čˆ2Ay°uōŪ˙€Xˆ›5!F@ ŖÄ.e¨ūÄ\D@@ČĄoæ LćÔ@qÜ Š c^2'&C3a„ī)Ň\`oJą‡õî×9<;Ä1B\vŨ7}¨hÉ›”R$lŖøûˇ§§•lĢÕŲ“éëY]Ąõžå¸Ë,ŎQr'ĮŗUĖd”n{ĻF˛žoŖ'ŸdņÆûJÚõtė%„Ū†=â<ëFËF›TĨtŗž°O[¯Ļš]ũÅļŠq”iJQŲģéē_é…7:ĢP¯,×Íåå<įžiŊz”čŨGĐļ]ĨūŅųët™ÎŸY¨DqAA‚ĸKJhŒŪĻaPUCō˛’á §$ē)î}%FeĐ5ÉH )ˆ”„Žaž­ęôʎŊDá#€ ånRį]/$öâžŲ Â+A›w ÷ ē}ĖķQ; î´ öd!bß0螅 “°ī…Ã;ųJíŽūv(aėĒ÷ ¸įÂÚōáļK¤K„k„rCUEŧbFĢĄrģHíqå2—´tŦÔģmīæâî Ąḭ́–‹ą–¸Å‘恜$ĸNyĩ:NŊ0S­įBœSHôI-y˙Į'O6”Ūogĩč&ZIôčüģčKÔ:rR•f"ĢÎB0ŚÍēNŊÔ[žŲyiG‰yŧö.Mfŋ×骊-˛@ŧ †Yëb5‡%öƒN!Ôá+čɆ6b$7ĐDƒ* Qčß|§Ę1ĐŗxĄ5!āˆpÅ%ˆJƒwë÷ꇕ‰Âķ cwãę>jg>¨ X„#ív]úÎōöDÅ e˙|‘#dw_ ‰ĻÃŊ„s™ė'@„a—J{>¸Qu˜*i:¤ée-Sķ˜. âDFŅŖąųšiZäqž+69goļsŨ^[õîØĪÖÕY2ĮˆŖÖRô[+V1eC蚹–žŊu])ŖDŠ7ÅĸĨnä“ËžẢlŽ\|1­*pēŽ¸9ō5Üz™cä.מjÆÅ'+*ĨßFdúĻ2¯|ĢíUyõRށŪ˙ņô‘¨@B Z Ҙ¨„&h=ÕXJ0J¯*ÀG/0Ö°h Ë~ęĒÉ uÃ×>œ `Ä6‹ ƒNzÉ՘VâŊK>՝GØųžĄŲCA‰{sp¸z)ö ;  Ģ„¸īwĘ=RaģjåAĶãŽA€Ä^íH÷ŋߙŽßéŨ̘Ā÷†đ ęÄûáĨ÷Dû¤ôYB% Ŗw&¤ŽaŖmĖ`f [ÕS¸ođRFßŊ}„ŌÕ)ËâX˛Ō0é17Ģ“õĻ)qķŠũî˙įėM›dÉr+ąs€{Ũ=<"r{kUõF69$§m83ĻÅdŌo×7™d’Ų,ĸ™DŠÍa7ģģĒ_Ŋ%ˇØÜũ^úāšŧzÕĻ‘ȌŒp÷ŒĖ‹Ā€s.¯>é.úeLFVŧĢÚFÄũ4jĢ}õ0ß{] /Īsė-÷4ī_4]ā ­ÕÕž­S\ Ô‹¸Ũ]`…îCR¯ëŨ:ˆt¯‡4icŖ'w(”Ņūîl%oˆrļFņņũU3ÃOâ!¨ĸ!ʏOŕŠâ­†ģØ ¨Ā‚3rqQĒxu ĄS0‹& ‘° ãLS:gwiJ*ĩb ,“’ŧ]žEŲY,<į°ũÁt'Z˜]×éīâÍfˇDx¨ƒĀĘ¨Ãšž,p¯Ë4;ē1’¨ÅĖ˙æ*:;~Cb`&D!"‘¨âNį*å\ŗ9õh5§†h˜1˙ŋrũ$ū V=?霕œž-dÄ 4}ëO´T_Ēû_ĶņW=‹Ä#ü´Î÷‰ĐØAãá|4ŽxōčôåŗãXû<ųŒ[Ā#āĮΐˆˆ:$ίwk#RAģŠ/›Ęҝ°­.”ÉWũfĸMũhûĻßúŪûģ—HxWíٔž!ûeņ”ČđĄŖ3M,ŸėuŠkiŊÆˇæ]o‰ā‡~WŽŖ{ˇvÔûdĸ?eëžŊ0ö>MŨĒK–9eiŋu KwŌ gNĶŠ÷ ķ”vč†ģŧ8\ęĨ2…#\Õaą“„€{ĒRbf€D ÎҞŊü;;š­g×}•ũæÕz-ėPúđŠQo,jŒŨzS­ô7/–čĮ´‰Œbqu¯õBņ"k0{ŧ ëĘ$ĩ-]{ö>Mou¸‡°•Ļõī5‰•´56y×õŸęt‚7_’öu<¯ ˇÁÜŽü.Ķl&7LģøŽ9WqhÕ5,ĨFŒ ĩ‰âIéė§T#LÆĘgřB LĖzˆØqÜr`æBČÛÛĨŠ8 ‘ÔŖdƒ’Ž0ŠŠ˜ÍzÆĢo"Įf'~âh(?¤‰Wp}ŦūüXŸãŖm<Ûáø™?zΝû¸áÅįĮZĩ?{‹?xxēãI˜9 Ėķ *v؟Ã\$‰Ūw§‹´žŋėk4Ÿ^éĸf#ę(c“ œ˛šėSŋJ¨26ˇŪžį3vĶ=˜ÛŦ^¤Â_ĘAÔå8úaĐūƒķĸRųÃסëįá¯ũ¯<<ŗššĮŠ€ŋ`J1‹ŲÜN˙ũ+Šm1%É5lەiØ,—3Ŗš Ëv§Ûĩîą_čbI‘|ߟ[AđŒg˛ AãČâ.VëŊŊģ °˜`Íũ>.—<̏ģP:ukÍ..y6-l/Č[H7!`„Ļã~1Äyŧ˙ĒŨ”å`ĶJšČB„/—‡uôņûë—)mS’mŽđ@HZĢ—”?ņņ.3rņ+ü¯9Nˇ}ü܈>×H}J^Ļ…3aŌŽÚ@NQ€‹íw/c˙ímŊhûĸĖęÛŗķē™Ę‹ŽäķąM˛dF­>ætPõ€c,"‡ cl”!Į}je% 8qÉ|įR>Z,Ę_q)Sß1ÄŨģąî‘†—íXö0YLĄ5°YrŸÛ×ÎėE,Úē-é*Ož„FŌWüôöĨĮôūk[Fœ @CUxˆšˆÔĸdCŨ8w˙'Ã7Ǥĩ“LˇTŊ$„ ^b]­.Áb”F 3[Š…z‚Äą|ȧ1—“ŸP;Ú㙏>‰TĻÃÎĄÄg?}šęŲ§.K>ĩ >;ų˙e=ķvsĢđCėtÛĮ722ˇ˜ģ7žĀT<ÅŽžũØÚÛīŲķĒĢQEˇßũ4õÚd%ώë&Ŗ\¯PִԆ ˆj3¸[ÔļŽB•ųNŧ]ĨkŪ WŌ†LīW›:PrSn›0aBōHã5WĶÖmSƒeĀŠŊß6Ö~8”ÜÎūąŽŽ.0:4ęŅčĖfĖ(.6-iŅψA’έė1ĪũHö¨‘$f!ƒ d@āî°Yč*&Q8(Ō( í$Ā…GÃUōąvƒS›Í“0LžøĒĮE™ŋ˙`o=Æzû“ųņëN>D ĨA„xD3>3…ŲÁgoâÉ#Ÿ›Žŋđ?ŗĻ?yđŠ‹}ú^•ôVzĻŌb­×r×/Ēõ÷SũYŗ:į2öŌ´‰oPâŦ,g‘‡ÆæoY:åŊŧøÉ>0ÖĨŗasĪÜD Â'ļ&‡Ĩd†uȸGįDÔ3ÖHíb 2ī79.“ŸŊĶ2{…(žĀnU›vãp‘a@)ĶA–īFcięũWoׇíOËĄUUˆ›Ō ¨ËJ–(ļF:6§„„PB#4āČa•B%ƒš:*€¤1ÍSPÆ#2ᎠÂ#=™p:nJŸÉqÅQãâ´jņšÍ=¸”'KĘ&úi~øÃ’b¸]xŋ°ęMįæYMDáT^(yĄÃ*¨9å å ¨ÎāC÷š‹HÄq8æ ūōŲ›y|ī>CDŽ#ą`3ëwJÄģOųbįÖ×ÎÂ}w8ŧ–%ō2ĸ>ĀJĖ3iMˆY‹ĩS‹á‚ÁŽ´WIe&žJÆä>M…ÚŠ@HŲN}?ŧĄĐB…ŸÎy0m4‚Av÷ߘ[xŊÜŲĪąERLą™-.ŗ8Í!év™ŽûŋüļKÕ ŨSüíĸA@@™ōą{ZQŠ„“íQŅŠ}ōO˜;Ũ=ŽŠ%%Xgt"€¸;*ŗV`fnŋ´aķLĖ<Ö1wø?ÉŪ~ˇ=Y~ūãgË&?ÖņßY,ņ^ĶŲîãb]C¸ŪŧjôŌt^ •ÅĩÛŋ€oŊͰˆÔ(ÖwČŠCĐíܡmRSLž2ˇË‘"ÂZDT…-Ė'—Up–` ŠI€d­‘č§jCV4ĪÜ$aæųž{ŌHÂ=dtŗÔ¤ī?ÜūíīĶJ°Ũ,ŗ g/ßÜačKtšÜ6˛ŌXļ š_-bģüĐfŪŧjU ē†×€Â÷ō:‚:G×hÅ#Tˇ7įęŅF4iØŦFi°Šílpßr™­Úhˇ¯ģ™5&ÅB<ƜÚ}JęHCL­%×øŗÕk´^ķgéwŸVŽŠƒĒ‹'…ˆd˙lgx´ĪŽ(ˆyĒČAń@JŗV6s@ũˆyīy) æŗĪöü? •~`‰‘æk|ĄĀ_^ŊĶļL˛Ņ•Ų:ãģåf7Ę]$ŅoVmzOø”ĩVĻ5I˜§ņiZËŌ÷MŊí×ubv;O‰īŖ‡ ĒzdÅpÛ¨žĄæžŠhš|ؤ,j!IĢKÂIŒĨ[xti—¤MŅ6n!n^ŽĒŨSUéĻüöÛ¤‡úž>yŋÛkĮĨmv‡ƒnąëŠ.¯%ßī—­ßî~2UJģmļē&9o^īãœ4sŪz›åuįPŠ%v˛–ÖkÜLíĨn`¸HR%Ō´Ģ <¤;Ύˆ”ĐN=!EEš2žËâûã˜ˇwƇĢÔPw˛[0ĖJ—¯ėˇ}ˇë7˙Ō-0‡Īŗ!ášl%‡‡‘ė}Ąũxzš*ūč1“@ũˆ?#âōōĪŖ2Âëlæ"šČ(Su—ŒQ!áĸ<Ѝ(ą˜•ŦJaG$Yb+r¯˛!ؤTĖ›ŠÛˆÂSDēuĢQõ×ŠŅ*īSÄ]“aFĻQdsî”&ÂP˛hoá†Ģ´'TîŌ,°åĘę/v×7ãˇĨūúũöōct(ö­īËö ßĸœõųæƒũÄU?É—V>­­Ļ ‰WHĶîē 0}4m27[ūáįvįgQ$Ũo2āŪžĶ´Ânywū~-ÛÎ6ō‚ß÷šŗPFŋK ƒbJë‘;ē9ļYˇē0ã­¤WĩFįLgv°UŨįe˛}Y žúÉŨ¨[lŋ[qiB ˜ŠĢĖ(8åÄŨōĖį D:ŲŌl&Œ)ĮSfŦ끇âšGĸ? ´žÅ_sÔõEËzšę=C´æ­ę™i~~ŲņøŒōņéš cnéŽ0ËOŊc8ĸ82į1昝fīL 3ēKT6^â(ŗTI‰Ząˆ Ԃ#Á~ ¯!f1 “ũ)7iŸÖņ).dį1ŌRZēīŋŸÛåoíį+ÜīãBv˙rūw’%ΔŋƒŽļ9/õ>Ë^äëûæÖĢ­¨Ģ{Ž6mVŒ]Š’Ā%ŠĢ(ÛĢ´žˇĩž ŗœíÅ{ĮNtķâM­”kĄĒMëwg¯Šöü|ĐÃe›ūŊßž(חY#ôwōŌßŊČۋŨūråîŽī~Lûôgŋēˆ‰Á”XĩœÅ-”!5ŽRƒĘ=ŊaVá*õrėĸėRĖKîaPē÷bļ횘{ų1ÛĨƒ3'€G(ô‡rŸԞGJä§y]Āž™Û­˙¤æ×“û=ĮĖΊĒę3ãÖĶķæ‡ĸėô˙áxBūrԐŸ !ŨBæō=a+‰"­ÄT˙å7˙ūūûßŊívøĘ7˙ķ›˙FūŠŧéĄ"”īĐķzf6Ü3š¸ģōĩŧĘvĩáËûYÆ€ũZ×rģcIé ąŊ"nM’—ą õZÕˇ÷x%LōÉqŽäŽ‚ØŨĘúr[A_­îUSÚé Î”—ÖīcōË Ŋ6đ…ߝoxŽÍ* j4ûˇŧĘßá¯&w•MM"Û‹…fŨKĘZmwž*õ[ reso ‹\ėxV‡blRGĀš°oq߁ *hŘ—ņ^/+ŊjBuˆsžĮU 7OĘjŽ˜$:@ĨW¤0U Ü%N6Ī\l ŨqMāĮû‚ÔĖŸzv““¸\3ģF>đ؟lėá‚ĪhĀ˙d%āá…G<ށ'=ô Ŋņœ‡@P’ŲR9Ž–Õ†‹ŸŊ钕ŽĶũÅ%ĪęÛŖģ-/ŖÂ/ĪÅJÆšÚO:z\ŨŋįBS“ēƒbĖM2ˇŠ†&,][J­ŅŽ[•íūíöŽŅčTÆēYĄŽūÆ'ĮûE8–UcOÄŨÍÛ´sã§ķô"eąŪĩ—ü˜ęæ WļŗOĶÖíbûąVôüÄíĄ•Ŧ"7ļ/ߊ—?ü”ļŨˇâl3ö)ŋļL'†CZŽŠMnĶēxŅõ÷mļOx-÷’{čæ5ÎVq'ēf­g÷^‚Ë•D¯7ĖÍ÷f{íëYum…jV3qķR›uHQÃŨU‘ ‘Ôm2žąš„īË,{M›ĐØ$x zõ:õҤžųƒ­xîĮĄģ‘3ρđ8vŸás°îķˊ~ÄŽN?|æ0Ÿ”Ž ĮđĮ>ŨŗUĻäĮpŖxßũb@•¨ÛiSV/mĩuW+$9šēųT’oÎ$eÂKœ T|á⑤c0)ŨĄč°°1ˆÚEōX꧋Äö¯t×čŨˇ9^jÎ$ˇąøš[õ–ôaņNWŲMöûejûÃFŗiÂnL|]*?\h#1m[šb™¤›šūø\˙4ËĮ×ŋĘwH™!*×Ģ3ĢQFÛ]pHj‡jIč¤ČžŧŲGŖãmŌëž‚rķqņōū.mŠMˇž2÷jģœ–e7ieĒų2íbD9\5Š5ā5 ­^ɝ\„Ęž\Ū䴇YqPih—‰˛ƒz¨ĒŲÂvWØĘæb!îËŅSc%%6 ĄŲ [[ũ¸–õ¸ŒŖ† â4u ¨°HOLãš˙{–—|aũáS™Ōƒ>ÎNŲõ#—cžTu3•°™ Ú|ŋÛy}Õ"öõîgžŲĩ/R=ô>ē,ąė÷ô}ępo)ĨímwĄCZBjėŠk"†ŽÖÚ!Ģ;´¤ō”Ēr*CwÁrčwŖ mô—-ģûŦlĒŠ™VÕááN-/đĮnq.ŪŗK7Ä„+ķ¤’ôüRmڝĄ°x{žĶƛ ‹IâĪī˙aXí˙âŸoūõĪ:ų۟e…W‰1eš_‚JņĒJ8 R בD)ārõˆPŒCä2áS4Fl.é7ËĄŽ'7îĄÜŅĸŨûüBĀ8X '×.°ą@’DpÛīIč6 ÄK˛Xbš<&ëšĐ_üäĮíėŗCD 'F=ĮšƒĶ,qmäUŪēfŸö>>s_q˛gœnķđüqęÎåT€œ6wŖOPĸäęRÅÃBŽRũöՋĻXũÖnäŨxÖr_x0[0Ž>FYkŗqo%רĩ9\ãōpSĨM‹äĨŪŧ0à ÉV­&jØĘKŒ ‘4LŊB–īļĢĸÛīšZîÚtûĸŠlļCĶzl¸÷c_&•ĩVK"폀r”ļūä]ojã5ëZT•qņ7÷˙ōS÷ëîWĒ ™É™@ädN,€ÆŦ<>uŗ>`„xĮ#ęNõXQaķlSȜ˛æų(yA~ÍcíŌ<0c :÷,zxüšFĀDaâL6ä … JA#Žpwæ2‘ô”j™Į¤Wø1;{Īp\UT†ĖŌÆņ<Š€ˆŅNšČœ/z˜á1Ā{ú?úžŧúߞí+1ޤ…äœĒbچčž!ũ­2Œō†mĻ’‹d­.ŠėzLŅ[*ũj[÷ÚĨÃ~\Õ(Ö5ihŨPV>MS“E6aļ.¨ŨNÃ7á×õà —5’jŠĶ?0ĨâŦŠ5c”¤ÕJ?˙Õō?SĪõ˙ēøĒ7~*ž8S5Mtké&BZpÔĖ#ÛĨĀĒH¸uæ a"˜ģĄÎÄxPū$Ü"b!OČĢOŦgy*qHÁ3c<€ QÉynķąm+ÂëũõĶÆŠdP`N$“Íí AĀ|œ!hŠS÷!pb\ûˊŽķsŗw >ˇ×ųO~Hk.įŖIbæN8^â.D‚pgnšš°(Ĩ‘I[ˇßžx#ˇčÆë>—Å"üáæ/úęŪVl¸?ŋÆaũ ũ§!ęYĩé2y͸_$ŨQW‡Rī/’HØAtäĐĀvģŗ6v[IeŸ¸H¤´ƒ{Šƒŋ* -ÁúĨWwˇįû†R¨÷‘/lČ؜IzhFS uā™Û  Iä×įéˇ7?]ūŨ‡§Éi‘N=8“f2…{ ÆŠĢ„Â0Ar8æ!"a¸;ÃæžÔ*uĀƒÍ­×§ā'܉pI2÷ąÍ DĖK8𝝉Ė;ØĒyЀ‡0J—<™cSws"đ%^Ē9$š[đaN„8öɅÕz$Ŗ1œø3ÁOEĖŗ¨O )‚úĮ<4Ž} Xy8-ˇҟāqËt'‡ĖđpƒÃë6C&Mģ_˙–ūÍ×r=ÜMeuøeū˜V1ČBké[Ũ5h[ŲūĄ¯+xûđ=Ü)Ŗl,ëÅžoą-ÅJä‰LMޞŅAõ Xĸ6Đ(/m^÷˜]×nFx$õ8ŪPīÜåÃģœúFôîõžķöļ‹r“´˛˛Ņ´PėGUOyĒmõPAŨåŨû_˙MúĪŨKÉŗpSD9Œ¨ÕA‘ GJŖ4.m•0Į- ÷­p›Š§ëT]‚LŠ ƒ*Ø; ¯Žōˆđ†G0<¨āLŖwZ›ŲmŋSw|<­ŧlîØņ“Ο-ㄖ?fgŗ|„ĪmE4!įAc!ÂÍ"Īķ8ŒyZ둮åÁY=|pzūÁî?˙Kžo›?ØDƒŗMĪAŠĪDÎG•đđJŠĄÂÛˇ)Á­ūđûēø×eqw{ˇ_|Ũmûa;5c•ũzøĐtë¨ģ‘ĶZöėŪgĸöģ¸X,7ŠĒ”‚1ĢHŒ‰MRõÅ.,Xk„¨* éNä{Ũ!0qĐtˇģZŠw_‡-ēáî*›H=˙7Ķ?ũ/˙ĶO˙pūJé‘ ¨Đœ@Kˆ$MPĸN–4ĸ0kTd ĄēGČĘ ^ŦŗĪ‰ —ēŽ@ĖĢfÅDZx•š`چS‹ 3[7˜UNXĖ”'ÜŪ™NåũŽ=D×ĖĢųFô¨@wŸIDĸ2Ĩ‚Æ;üļÅĮ­ņ‰å=Ũ8äŗŗëûŧĀAâA’tL<Ō9GęĸĄtDPƒˇ‘%ĖžũûMûö'‹Z§¨ö!äō§v¸j8¤éŖë¸_-_uÍūöūÍRˇ…ŋ;|˙‹U"R¨ÔCēĖûMĶ3íl1Ps/x.ųĸTwššŧíÛesƒŽ(ÁLrsģęĨČØ^ slĀm[›2ąÕäqp)ģÃb1p u/ĐîR‹viX\é™ųޤ96åõÍÍđúĢ÷m;/6įôĮ=iĒ9{ɃŠ ;KĖ ķ˜yã4 Ģ1“kģ3$Ą–ÉYĨˇ‡Rz 9W 30Æķ‚{„™&UĐŌ1î9-ÃB øc1uū""i&gĻI?ēoG-[‹ ­ĸÎL×G&ÆĮpė4Öy4Ĩ'LOí‡|2CrÚ>Ÿæœ§äōDĢđôēã;;Vëp-œ>ģÖI„C-(TĀŖcĀg~ g’ŠáŦģÛåB cuq˙0üuė/#;‹Æ§xƒŨ7Ųˇz!;ÉēŋY0Åx°u+u(ЛĘËžot°st˜Ôe)Ė×p‰ÕXĢÎn— roį‚AHwFõÃyÜņnŋŦe;_ĻwW^ÛŠ˜R5“_ĩŲ,ī~ļč7ėmŦĢ…rŗŅKoš”,ī–"_ŊôPgo$ÆU˛u.›íōW¯~õw˙°˙yŌ5§ff/h˜YaČJø4÷ô‰ŽJˆ!™ĢÂĀđ3ŖB}Tq„ÁŠzu%%€ ÉV0ČQĖ>2Đ" F˜HCĢŗļĨ"H‘‚á3c™!†™EˆÂ#]ЗķM€`“A=-æB‚ôāj?†X 1‹>Pēã|,éyÖËįŸ‡iG1‹ZEg ÄQ͂ š`ŖˆH`øVVM¸īKøđ‡mWÛõō*īßO͛_ö"åŽic_ĪDķīēu|Āųš¸´]“b3J3¤Ž˜ĢæšîN,KŲĻ”÷qšå*›îĢtŊ–ˆ¤ ŨuŠ=ALYîņzúî6¯×mÛÖ;Kų˛õ;ēæ3ŨFD7aqÎÍxŪäƒVq­Čč;îKXsÕ ûsė ĨBMĶˆŒ‹á°>_ŊžũÍpžRļtwOYU€(ŽĄœĨ`ifîûBÄ'"Œ$áã¸S2uZ$'$ “*Ģ5Ŗn:€cMŗZŠŽ! ŖÖVBTHF;ģSxx˜df­"<a8rv÷ĩ៙¸!%}؟ŝ= W‰Ü<$@Č((žĪĖGŖ2>đO=qf8Ō—>-|ōŅ{ũĐcĻĐx|‡/ĸ1ˆZÃRĖāöévUŒ‹˛?ØNø2‘ɰŌtlĢ_›uȨöáŧ_%8…CīyąņãÛĸi+–đ˜ėîášŗė[ö/ˇSÚ\´Ķ„N˛ėy÷Ē•X„Ē‹ÜûŲæŨÅåÆī˙€+ņ°ô6 ũ]4&YÄ|/ũ=uâÚԊČčh¤XÖE—*ąũ.ĖõZÍ ~ø/ĩ<{s@ũíW/å_ã?đŋ…Ąæ"qĨ†(gâ=ēIN“Io$ŲXH85ψš:DŌ o͑á}%gd_L Dō؜Õi4.˜ĸ‘Ô6KŅQĄbN+‹ Ŧ°“Y°Â!a<ŌĻĪÚ$3| !`‰­žÄЧpœ"á@¨ á2ķ:Q<Ësn™ŲÔô!I|°* ÔcnúāÚüĄjđŦÖÅĮWfĐđtŋ ĶLĪüā(]2 ę˛Ŋ=ī[XŗŸ-ÖulŪŦĪܡ Ķ‹7ęģ,ŨāŸÎ.oģü悈Đ}iŗ”Ė?WĢv×7Úc@ÎÍm?qQ ‘UžÎŋ^*×+†Ĩ]'eXķ6A#vųeŪų`9e T.CЇoļggī›ÎÆr‡,v8§:m’ÜšŌ—iL: 0 ‰‘,ŖL‹î/nūí?ūķŲÅE÷īĶßĨõ’“z0j8ÂÅĸe8˛UjĶ$€LxVb§¨^+–4 'î-‚`ژ9Å 2ŒnĪŦÄp´*`ŽEīÕÍę‚Ē•8‚Y*(Vĩ‰Ä&€IDATí< gžÂą ĢJ•YSΎôg_Žo ær”ĐAœÆ÷ubž+ ÉgöîgPƗ]S€ æ÷ã5R'tųTjš!;?eēc95ÜAs„ƒ*B0ŒĖņö%ŖV’ēzĩēqëÎÎ0M“Ąī:×M‘eI+ÚÁ—QkûņRÆũ],ˇįzXHd)ą( Ér×`ŅCuî•sĪ[šmÎĩ9Ŧ`¨’‡aĒ“ĀrßWģ’Íæ>Ž_0œåŅÄÅpøĻ9D'céĶļžßļ*&Ym’Œ’"}™rä): y ŊyņâßhjŪü˙Ņūéåß6éoøŸōŲĖĶNeĀ…1ļ (Í>!‹Œ$(f"š}Ѝu ˇ¨ksJqFņ‰ ¨Ŧ´”ûÔxe§¤z• ˜f D€$Ž!č”Ú 8HK D ‡!‹Ē€ân%Ø*ŅB¤Ė¤ëFDšōe~{ĸ[„ Â83ubŪ$SōŖdĶSÆögŽŸYØéž'°â֘šį g‚Ū“!žŪÔQĨėYˆ&2—ÃÜÔN"ģĖbPË´ĐûÍųëĢ%0œī"÷7KĢģÛ´åctâŦjĀËėÛTĩŦyŸ›Eüāž6Ūwáƒcë5A5îVz(‹ûĻ™¸å¸jŖ“6ļHīíeâŧG“Įß˙‚Ë¤Û]NwĢבë‚Ūmö¯´ļŽE‰Û3itFX,ŪõŌĐbhĮÜŪWį˜âŧz+4ŧJúŸūđëˇ}RüßW߸ôę$F Qą Û9žŖs Í]“™C%˜čîûĩÃBÅE‡•Q’U!ŅR5šƒV4 E%9kŖ/HjˆY‘Lœ3ĨĸNŅ),#ŌÚen5'å\@hŽ)ÛãēÉÎN¯Ėy3‚r$ö>™ĄžĐÖųûŠũ‘ö4ī†×uō_§ØŖí=ũĨ3\{˛ŠãīS|~ū)qwŠķ˜¨ôÅm˙BzápHˆÃģ­ˇĢëđį7ëKøęŖo_ŧ(ƒjŦ×ĶA|ę|ģƒŊŧÉõ~ŒŨžˇŦĖãTw—ã‚[˛õ—ŖĻķŨÚhâ-P=îŋšļØ_&Ųĸ†Y™mú͇ˇĮĄļ˙ØŦLWŌȍ0nbwũęSŨąm‡‹đoô֖ŸŪ])Ä/XŗąĒDE%cׂ¸8w¸Á5§ą^7w%ÁEŌņãē÷Ÿ"zŠ×9ûrWĢũq9”ëüféī†ũņ—Ũõõ_ļv€mޤ˙„Fâ6&I“æg0nWmîĐŌ-1TmĻ´_u’/č6,‹–C’Ælũúåī˙éí"Đ˙ųŌVjŽ W …øąs?Ŧ0¨Y<Z8ĩ† cAÉ´°Lĩ5,VNxJî Ātmhj+s͞ rjü’ä’*Š€(!„äԈ‚ ƒYõ~ųtĩųrßö áÎųāę§aĶĸ?°ĢÍÆÜęŖŗY‡ËŠTĀšųĮ‰U;æOØ˙ėą[ōŗZÕĶīĮÔuv› wT¸¨ÄîpÖ6P§ĐšYúōMSÂĸXJ]ŒĖ˜VqKī—ütËŗ<Ö~Jļ-—c”f•ŌuL}Žļ‘ģĻlØH-+i0čayX,Ɂî2n–œaX+|‡)ēĨÛá×ŋ˗Ķģ&ßvÍUî.ĩsįd“Vĩš¤XŸ‡ĮŪúŠdMÔÛ^ŗ|ęÁÅāœ’Å.Ÿˇģ°qēi"%ßo˙ÕĮÛ8¤ōŗŋ:q/žĖAÄMKHV„ŖČō“{´ûĨæjMĸ;Y]ÜS{TĶĒ­Î(‚Ā"BrXDąu@B4Xę…{*<<Á‚Ēp víLˆ Guu%ā$Íæū ĖL!ĩôŗ§åô#üg€Søf܈#L*›gëīF9ąc?!ŗzČ#žŽJã‘T÷ņWĘÃUņ´ŽÎĪ,īņĸš´¤˜+6Ļ)"Ņ€ĄõĘU,ö~ßvīûĮ8ŋ_^|ŧK­6ēž–eŋŗUx„2{ᝇĐiéÍ61™Q{“ēw‘eÚW[ģíōJÜ"ÎŽlH‹Ą-žQĸI"rŸ[ãÖ?­~ˇ—W?ŋđüb˜v—īĖβGcC:Woü`y—0ɒ>&ĩDĸø’6-Z/’ŧŨ€Éuŧ0Õ(‹ŋn˙ˇŸ^ŋYu pˆk6aÄĄ—ÃP‰FŦ‹Â@_ BDŦRfžpĄ[I4Îr´JYFPŨtÚĪôJqUĢTbŽT1đ`xÔ fT6Ž˜åíÔ!‚AZ„3č3M:"ŅgžŋĀ)Ĩû"~ĻO6˛Ķ$æļíˆj=5ŗđã°ßŗlsŽŊŸčÉNftRŠ>•^øI<´CÅ#ōņtÅcl6?Šåø? Ā\ ¨Lb$Čnķų"2wŅĨéæđÕ×ēÛ{š iÅęí 6‘§Í÷õgW3əø~Z&¤Fu­bšŖ´X?ļˇk¨ĄõģâƒR2Ŋ™zŅoS>˙Ûáײļ‹ßķoŊ-Aäžŋ–e‹)û4-‡mf¸šfĐ̊Ŗ0"Ē $2ûŊ„Dz2y tÄĪãũ4éĢđD„'†nĸ 0w!]Ãg˖&›ætޝmúņËg\¯ĒZí(­Jždŧk-ŗ•JG„ĒgN2¤_“ôã‰pO^JŽ.X0m!(Ļ/™`Ē„ ¸¯>>}žXNO„‡‚ 9ˆT… ˆb‡bBFĖ@Ī•6tŧáĻ"˛OÅwUÃĀāH>4ŗ†9›+œ„ŨÕep‚>*"‚)ĨČDÂāáæ"DL‡$×ëlŊ’ģƍˆŧ {úŖcī/Ũ˙wSËvO*ŋßâ&Ũ?ãĻX|8ã–TķƒĶõúļ÷Dn`?4ršĨûųõˇ:P!(ĄŸ|u6Mh#Ķō뮚Yíj“°-ąm^œõ*ģņîoëéz5% AR—(҉6"ô˜Iˆ­hCÚ4—Xh&_ŊZuGŦ ‹~ŦzL9VT)­%.)Ėr;ãė˙Žüîųd6_ųęßŌlņæ„Dŧ†š+ÕĖ=„K•悚 ^Î&‚ĮļNm9…ĻL:/eôRšz”aNčSŪŅIūé˙[=<5’ŊƒˆAęTBt˜N<{Ÿ™3Šė%D6ÍJáä ‚øĄ_„Н1ÃȘ( U+cã=9 ũČ]M8ˆÚД| ģÂВ€Úw¯;°ËC3ã€~w@Õ˙ū6pîxņoĐrpeŨÁØMâ : Z7pšsÉAˆíĶ!÷ŋƒ{ääĖˆ;+€!ÎŒXČÍ4[l™˙†=‘ŋūÕæčãĶ”_ØQēĀâ‚B|pě—aĸRŲ&ËËiڅQhÄŌÎB`/Ίr^ŗ÷†>{EĄ§JÂÕ<ōZwĢĻ‘Ü/[†Īsę IĨ2 <ĘAļEėČžØÖ:ŽÖ— TZ[ēڜļŦ1¯{–YĒb”Į­3 ŪYØivœŊÕ.ÅŲ¨š­Į]h*m1ŽTÃ.¯âŦōÁĐ6+y†x(›9üŪĄ(ÚnĢ}sSUę&RˇÅ 3S0ķ,ęĩƒ{Sđ>ëЇ8ŌėéaŖôâ|đLØ~ĢŨ7¯šájīÛ7-ˆŠąŨ8În5ޏƒ;ŋƒ†v†ßƒãĻ0ā&(~í ;ČĩCĮûŲõ.zë˛!Ũr” a| H~õoŋīũdēēGxû/WķíéT×ãˆVLqäf’WE¤­UāŒ^5lwĮ,9Ĩą‚FŪ˛N#(ĢÅQ5nšî(ŸĸßÔT Ö-‡YMģÕǚĻ×a^h{Ęæ*­ŋáĀ…`4C†šaä™JNZŦ 1&IEAWą'&/ĸNęz­JŌĢŌ.&såī¯ÎßđøhXŊũr¸ĖĸŲF]N,ŒuĄĀƒOi؝Lā0Ņ’Ģ‚$2ĒüM{Ü*9Ł…V–k…zH•ŧë.Ā~Ŋ%Č÷ĸÄÉA,Uéœ9Ė/ŗ–ŧĨļë‹:ųFģõĻŨIÉ}îŗ19<÷đ^=÷Nd†ĄÅšš*‘[.&TÎkD{‘§÷ܝŋfoQ9Ū–•ûķĩ %"øÃKJ‰ŖU„ßūü›iķá)Į…ä\Mûs=f>ĩmœ¤ŦVéˆŨę*k7:"Yv “ģC8͸2Â$Ŧ[†ö92‘r‰MŌ[ 9Œ=l„fIz˛­Î•ÂV,ÔžE5Nv—yŗ\ڗZ–¤â›4]jז’×d´3ZŌXÁhÍSXŪu ĄČĻв÷ŖäzŠ›.L…CÛĖ­˙Ē:­]Xu¨`ã˜=J!{P5"!R ač}Ø9‚ĀL´§˛]”D˜Ü‰”ƒø aIŖ03í)–i* t­"c°÷ęôĐpĩī×åZēčß<Ļûô3ŗĪ:5ĒKQæÉn3ņ+?Y˛* cF–M曚ģ)UäiĪ`b/ €Ō‚‚pī ´) 0´Wȡ™„ŠgŠT XX]) Ģ}6U0ŠĒ5d`đ§ĸA Dnîj`q %ŗwėž|Ņ>’‡5ë-[_žLt|šŠ¸<’Ņ9ÆÉu}VėÃ:ĄYĢĢMõ˙ôh7MīÃVæ‘3ú;WŽašĨŨąlÉ]rĘG_UR€Ŧ>eė‘į”ŧĸrüWßülō„œ‡äÂ$RT¤"˜Sb+LÃÆh`ĀŲí*¯Ä–}¤,äÕ ~ŗņâæ0Dä•!_‡YēžB-„ëlča§ēĨŧC}Ā5¯Ū 0 lyo˙n?],ŅtlŖ(2\™'fm‘†}d™Đą˛ #‘H 4ļ]EĒŽ#Õ@6"ę„ŧ¨tĖ3I,c,ĩZ÷S ”™éœÅw‚|iS5páDMîŒĮĄÜĢQƒ›ķ.FõčjĨŒ ŧLV^cc6!Eåģ–ß8ËüËįŋ&Á8ʎUŠ_Ųuæå÷Āž¯–=÷öęÕã-ĪēŨ^Fq‡yĪ[ÁŽšXÚØqīDT÷‘ÔZO2›_85We_ÕîŖ‰ėÜb 2fĮ%‰m[ģĀs{95NŪuåTÜy´mŖ,V§ōėËL›$›/iŗ[6¤Ģɛįs–q⠑öÍô¤ßm;ŧŽmü’Ú‹‰ą÷&aŅlu–íF´ru\ŠÃ–ļŊzŊzJ—“î˛M“¯<Ōv73ĩ-Omyėâ'•¤ôŌVKiÉŌč¸yTyņha]&åA€e4 ėØI[%¯2hĮsÚv1‰„+F_ e:?N]•VčL Áã'WĪ^~Y? w9Ā{22†ė-r"7§ž<!8Ä!| ¯ ĩ]A=šj4Ff"hņE%Xar8¸'ކNNæU~0Ū\]AB*+ÆōÖíŧ€DÜɌČsą¸ģ#æ’UŲ)÷ÆÂž‰ĖH\iTÆĄī_e;ūúY(Ëú:'yi§§Ë_|Q&žãéŲה*črĩ~ |~<~ŗlÃĖR¯(l—MWÆŊŠ|ōæ wãáëĘf%¸÷;:3#ÆšŌĮŪ…g6"ŸĐlŨÚhûⲘaōø8œm*#ō‘lÅĖlŧ™Öd>1OœAČíöD^O=&ˇ%ĒĘLŠĩŽ&´.LõjΉ ĢũÅöƒ˙đø‘`­uØrZˆę„ˇĄŽ$›—C¤]MĮ—6v˜KŅŅÎÆQœ´›‘¸5Ž īŗ0 íPņ=Õ"W ėî ÆC1‚[Ÿg‘,[-ØC{‚;1Ja‘ėb&C=]Ņ‘•üõãų{ü´€+ķ \CŰ9ŲØ7ûĖŽ‡C7ÛtĀmŸ¯cčŋ†9˛ßųErà ’ĖĒ[\HY™@ā!ßlzäD~ŲTŨy~;>ūđ4Ô> qę?`­ėwz&įĮŸLûÎ&˛ÔsũūÂVĮY_ō,TœíÔ/ÆĨĨ‘.Š+ķ*\5|iž`ž–^]íl>%k QxIZÔ|Eu]aWŋÚ= įŊŠķĢíîw6ÚMyĨŦY‰‹RņĒLŊ/\ĢķÜ<ģ÷Äž¨Ģ$nę˜÷‘úbæ|âîÍĸ{o3‘õįĻķåo$É3šŠ°§V(p¸•e‹‹Īč’J|IaíGŧ¨ÕĸŦdÃ}ØÎaŪv>ęÎwu9Íž‡eėd1ŗåüx]Á´÷”.bĀå8Š2Ģ“ŅvjöâEĮĐLĸŌė¤ 0fį° Ąäę€īÔļÂäø–ú€—üu‡jÜn\Æ_ū`ÅŪ7oŌÃŽ!ŧēō;Åtw>ž†#pĶbāCÕ˙­ĶĸېĘÎänBlDEÛK~ZoˇxŊĩI$;- 5Ų“žŲž™!v"‹ÍV˜×:M Kå3U1æÕ֝nĻ:īōn<Éb枎>_1o&ã‹'Ĩ=> 0.*u%˛mĶ›i jǞâĨ4‹˙ëåĒ~ôôûĮŪ%°ŋ95ģÖŗĘlÕĶ„‚—-ĪW*‰ģKÃrŸ_Ĩ&,VŖ°˜ŲÅxēzxeđ:Vųk}i!NįĘ*åĘæ“–ĻēDƒbŅ ŽPl5˛LŦ‘g˛Ė™ÁČI\¯‘ļ“lފÖŊ]:u?’œ/?VvŠššđéųX|L O–Ōø…͉¸ņõ¸/ŗmüĘ ĒŗûvJÁāŒR0%ĸŊEzš\‚)ŪßGėz‰ßĸƒCw0A ÂĄ9âMhčÆ˙ęūîNy ˜×ˆ|OjĮCÖFBj†CĜÅ*ßüP°ŧ Ąš>>ž^4ē §DŊ<ČË×ëe;ŅŲųQ‚:o¨YWNėáX;ˆ^|ČeÅO&Wž6#‰Ti?ęSŧ“ ‡ĨŅĻ UnŦĒ8- ԝ…ą.ėĸĖ9ŠĮb­›‚6g˙ôŸ×õÖø$ë1Q2„2Î^Ą¨­§“G*6UU}š]ÆpézâLjĸ€õĶŽåōĖKoÛҌ_˙ö˙áæéã>ŽŖģ• E¨ëzqëŠq§Bؚ$ĩų4ví"´ãŧŖJÎÕØB´~z´>ļK™,—c‹}ķöH<øBŽ[%ëfKúj^SFą‰ -pBHŧTk\įš€'ļfjV(d­MŗZLđ@Ŋ5?}ÎŽĄōÖēû­-ōŽībįmäŊõŲŨ›~Ûđˇ€ĩ(ę{RUbvŦ šøLÆ+TuUJYQ5’Z,đ‡Ī7jáâŗŸ<éÃUÅKž4/hrm=ļ¤+4°°Ctwį:ôúæĻOurĶd]ˆMq5žq‡uÔž”ÕÜJō<ŅU.+Ūđņn>V˙đGŋÚ<=U !ëf…Rä´Y:´Ōž&0 ˛&ÅÆãÔrÕķ¨å‡ †Xöqą‡ėBm–tûéŗÉG˙øÃãŽâQ܉Lm0ūČ]ØMČ”‘ķ@ĐŦ83­ÖÉÉŗ SQŦcu…“¨š2| 5€A5R)F!HŸ"kYÎÖįBDؐZvfPb-.ĸĨ1õgl€—­wã=8ÛãÃo­î 7ČAüäŧ%•ŪamŧsŸûŽß˙Ĩ;žwãæāĄ¤æļ;;Ąß<üô—]ŽzÉĘô¸ÎũĨħĪ^|uō`‘”smYJ}åÄQ@Ī kŽĪB¨ŠĨ~KϐĒĐį>^°ąCV´æ‚žQŗ@aÛ¨wdşēuõ+„ÄŪ†— 'šũä˙´ĀŅ=į´%Ä Š‹N-WÁ¤ƒsĢ|mbA—3ĘēĢļ‘Ų…Û@ękf‘Ā`´FĮaųüŸWO§˙ôáÃ@ q( Ķ’Ë‰`Ä! ëB 1‹î˜áDT™ƒbe.^$ŠĢ)UîTš5ny%Ųv#†9‹+‹ÃO÷Úēú@ûg¨AŽ€ š+ Őԉe#Ô_ŨËO{Ŋã7Ļ= Đ;Vé LlŅ[}3ü–„Ō}ąĀۗLˆˇ+?o‹Ãb‰ŽëTŽķŋ)5'ī‘Xā;!m9ŧy9 _|AŸŊĒ?9)ō&O/üQåNÛáøņՋÉSũũG!˛*Ož]ÉN¨oKˆ#H'%sYJ(îTL6œŠ0[¤2÷u2Œ8i%7ÛXP.⑹ĨDuMšį´nˆCZ9Ē`‹‘ĢÄŧ5EHŲSpę3%oÖæyƝB]¯äĒ+ -˚gĮL\úíf^úĪ_ũëōŅ?ūⓇ™čŠ8BŸ6،/ŠDC§0'b+.7• ĸ{.ĸw*Á+3O U Æ ėhqîƒL‡• ‡  Cä!O5…ö,Â4đ'Č}8ģ r)o–˙‚¯nꑮÃå7Úũ;ŗo ģÁ]|˙“Ę͝†B\,„0Ø =Ęy/_üëÕ˙H—ĢOõWųōq9uÕxyĖHß{õâŲĮO^]> &ļŪyZųöņÅÜq‚År&vŊ,)ˆkŒ‰ĖÎ6/N!tņanŗ3ĘĢXD!.ë@‚ŌMÉQv•GĒAÎO—‚Öš.%ûRįh2¯‹ĩ˛uŖÚķMîÃfļō12zš-ŲŅ×aMœB¤2ĄęƒØų‹×¯ūåk+˙ûŋ{vulÎZ„]ĸgf ;ÁD  ؇•ĀtĶĮŲ]q#BdrW¯ F(˜†Á ECģ™›n÷w—gč‹›Üßģ\ÍYöė_BHī­Ģģƒ%÷Н÷×;āAoģÃüƒ;[äAģsÜÛxûŊOŲ):e‰áÎdNqáåĢ6Ÿŋøéß=ŋäGgĄiLÛãŠwŠl–ķÜĖ?šXŽįWŋüéSIĢĩûļĐeįŨHrŪ\~՞šS5Ú){ž­˜¨9ĐčŠOûhŖ$ĢDB=‡Mc>ŪrQÖ;gZ?đ^×)DXoėũ4†ēû`Shųų¯X*ęT8ėJāœ‰-TSMą3Š \ŸÉŠ.!LŅÎBØö;Øo>ûÉÕYŦéÉņß*׹r†‘ƒ ͆ q3!Ų'M å‹?PC9†<4Įāngw¸íƊs¸‹ÛĐ8ļĖפo S–k6ô^ô åzķÁ>yCËfŧ…3Ŋ_5÷ûEŊũæŊ7¸ëã¸įĖC¯EõÁuاž{Q2¸2Ȩōfúå&=<é_Úã“ą•Čënh¯õČ|súøÍg˙ôøUW‘į78]F!=ÍųŌaįö`&\ÄŠŅF"ēk§Û|¸Å É8z—¸“å›īM&XiW•žFĄpŪÎ`Vį ĘšŦ&š„1•qKŋüĪÆbtÃÎ͂Ļ֗DājÔŠ7Ø\=➰^OˇTÅDD2&ĻÆ.ûįįųųËWÉß~0™1˛ėf0Wc„z}Ew™D9p:•0Äļƒ ´(JėnCī°Ą—Ģšk2Ī9p،]}pí{ŧ ˇ{_¯_¯Ņ­uä[ĢwŗĻˇCŠī[ųg7‰û÷wĨĶm vzŪ- xû„›Cīæ›pD„kš›b"¨dĖė4đƸĪë.úÕÕW‹|2Bp†×ČZq‰!uģøŪäk~„LÅfiæS’•(…­~0Rå#B•Đm‚mfUį3/VheģR‡VĒŨ ĢҜŗôÁa1yŽēÕŽ![ožNĢ ÛįL0–Ņv^Ãl‘DB3b&ˇ›˛‹°œWąmQÉûn^GÂ(F/æģ¯÷뛝Ū|púũ}9Ԑ|’*¸Š‹Q ’+*;„ `!.*  `Y#39˜@,(>Ô ĀŠ›3‹9”¨bvƒ*;nĨA˙ģN<¤žŨ¸öŌrO˛xX7Ur÷‹ē&ā>~{ÜgWž{úˇY‘÷\sŋtÜ߄īēÖB‡2Ō0¨~ŧg\āH?yļY~ķJO></^XÜš#7§Žķô×ß|ņQúæ÷OĮãĘNŧ-ž)îęQ, qī¨ö,ŅÍŠA_ŗIÂÎSš+Ŧšĩ<;Ę ÔuTU=(w#âÖCĘ2`keGkA™ ŦĮâeĸ;F™qŽIœyëI]Ļŧ*&í¨×Q¨u7ÛT ˆÂÖŗcĩ(Ī_}ũ’åŖ˙ųņÄÔžFc …0C@nnđ@0e&§@ÃVH˜ ŨPû†0ø0‡-ÍĖ>D|\sfBLÚW$¤&~Pˇi`fzkQoXuŪZNē]øŊƒŗhyOžÆû‘ņ] „Û‚ķāîÛîwûˇôØÃĄfČũ| đÁÕWáé‘̤ļƒIDÔܨ;“}øË/Ēņ7_<ŠvlÛKļ¯FĻ$Ũ$ ]U•´)øÎŲˇĮæĀŦg9Uķ<åŠzŋĻjDĸĶ\š]Š…”؈„24)õĄķ 5)”bũx}^˙ę9ļžm7GÍbģ‰âx“ŲfË6"L%Ō˛BĩōŖ€B^*Õm÷ÍëįËËv||üwC™jQ߅Ę%ÂŊCåĘAåœÂ4Pš ŲŪJč'p]ģ1ˆ" z‘ĖŲ!E î!ŲĊGwģö’*‘îl=ûĨš(tët@fŧÚŨߡúƒéÛĪxÛ{ö]tĩ?pęũØŋ-fŨÁĄŸüøe/UJ NsÖTĘV}čáņķ;ļËöÂ#ō¤pđÉéŒQ§2”‘”ē¨ŊÛÅŖDŌ5 ŧyĖõ*-MŊ™Āš0—PRĐ@0І Ų„Š6ŌĢ~ô pØuâVÛëOØ ãQŪÎÂČNę DŪCGžÅļ8_U>Ē Ķf —ÃōÅæ•_= r†?\ėˆnHuí†Í”āĀwf8†Ĩäϐo×s ”_CĄŠƒ\z›8 ¸”";X` Dl*ä~ĶņæíUŊ‰ĨĶ- úŪ5ŒÁŸ@Lû2áīÔGė;Žoßa˙ˆ›ŧ}č~Áxãk30qåÚÍøįú÷sôŅ4Ä7!¤â“H,7ödûęC›‰^āá*ōäŧMģ0]Kāõ*wSĘŪ•ĘĐ֖ĖÂŌÆNŊ¨s_Mœ`˛u lGä–,(:=79z=âÚ Ā\ؗķīK'’Å5I’‹ĶEā‘in™*å㠉`‘„iwqa_>Ëļ^Ķ÷Ÿ€§š_>2‚R™{Ō°Or… j4Ķ„‡‰ĸ}×M˛ë5FˆŦ„}",†“3<í}“~¨vŠoįčŧĪúžĮûgČ­‡ ÄGzo=úwUąžõtzëī_hŧcų1™ą Ųâ,}ŅũÃą¸Ä6ĐrKōcøfųÅE<áŨ•üæÁHxŅâ$˜1ICãŽđFŽ|—ĸcä(œÂnÅøáč#—Ed‰€Pė ŧŒQ”‰aŪNrĄ´ĖÕd¤`õ‘Į(ūˆØŧ8Ø7Ŗ)ŧ˜WGNáé.RK™ D°\*ĩW__âķŌ{ōälö…ä˛#e0u”„Ā0c<Ü{ö@° Ũ‘<‡āFš…ī| ¤ƒ…ĩ)čwUũ{[#ÁũĀíyX–Û!¤=fĢP!÷įÉŗīžMū9㭛ŪF÷P’;ũoŸ}öęûí˙qō#Š!ëØ[Br]m~ųM:ûPvąĒSטž\ŒņĀ$äÚ5(ĨėÂF%ĶĐ]¨ĶēJäœ&kęŊ n! ^ļÜLš^"Ņ}kæ4Ģcõ%e1ã fVĘøōMŨļHĻí|‚5ÃN…^¸NC)ŊšÁ%¸}ųķo0›ŧÚĨĶĮOšëĒ˒P kŠû"I‡ ĀÅ}kĀÃ|ÜöE\Ī×õwÛ9î fŋ–y›Aį= pÛ€w‡Ûbëļđįâė=°ú#ÅâŸöHēņ„bŸü;iũŋüf#/ ņjuņõũč“3öĢ—ÁJo^§ši3jKåĜ:ԆčdãˆIŸˆ™.­‰ m¨YÔÚ­Oŧ‘āF‚ŧō@ÁŗiÅˍŌLFŠWĒûaÍ'BŧŠŋ(§Đ>SōIX+3pSÉ×´K\z¸ũōį_ß˙×įģņėˇÔĐ\+ ĀĻ÷k7U€áÆ,ēÆŽ7{æMGįÛūĐ[øš)qcvŊ#8žÛBŧu÷Û÷¸7/čĮˇūĮڝ_ÎÍŨoĻ΅~zö›ŋ́Ρ§žÛ…:+ŅÃ˙ö šīׯãŲ.#/Öŗų˜Bé˛Īc၍”‘.Ā\¤P0"$‹pÚĒH!F"xļHî$ŅúęaWŗäNx”*›•‡žm°ü˛–Y¨ëNEȅá}\qÖ%˛ØQē>ږõ¯ŠœĘÃŖ#úÍũˇ˙ޞ? NLN@(C›ĘĄjuø—ßŗŸŨŅ.n1Ūsæ^tą;+öĮ.žnæ7‹Ežŧˇ?ú_SũÆ­ßą ‰Ŗãōģ‹HXĄ×ĢgúŖ)< ĸĶŗūâՐ]s–’SJšĐ!š™Yé+ca‰^rˇĸŗ˜•Õ˛2ĨH­ÉåŲČT}č;ÄÔ9L5eW*˜2AdÏŋÚĐÕēM’ŸJvgG$sķĐ'ņčÅ14āžújŊÆęßhŲü˜ŋ˙q˜%&||ūōęėás­lΚSmtĪí^Ãéđņ{•ÂMĨ/ßũāOo}Ģá÷āŽCSķp˙É×oß~đwBâ_Äō|Ī}īšû-ē4LĘß"XF0{3ũYü›ˆ‡˛|ūpųúœĄ Lc¨—HLCņNvŌēk\ŨEĩ:J­7P Pš­[Õŗ;4 Ø-g¯ÂÚH´īj‡,˜Œ‰`šgĩ–ņæŋ6 ˙‡ąĮ$”=ģs¨Ôĸƒāzî¯åf—ũôĮ§'ĮCs›~"¯~øčK§õ~ÅŒGēŖ•ø[Đ;Ët›ęd˙ĘīîēšÜ;‚ÔíqWžŊSsr÷ę?æQ%ąxg:nįÃ2’3Ŗ.â#ņívž×’­ųč›Ū׋šøå ›âŌM‰ļÎnĖŖ•m'fč\M5k1/LNg=ĩ”#;GŊ˜Š¤XiŨŠw5VsëÖ$s2‡ĩN“'Zrņöę_h›ŋÆ@CæNæ9æe×ÚųīiũĻG/Įķ‡!í•MĄņf=?yU_mĶm‚ßë™=üģīYŦ÷™˙īYģŋ´fķö+ũđâ-;@íVû‘÷˙˙w×ŊlŪĪū ]ø@9XAŅũāŅå‘ōŪ™S%Xigë×O'î^FėĐŌK ˇĪÂJ2§Ũ„œœ<.8vhšØ‹ī…‘īšŖÃ”væc!ÚæąZŗ¨^Î sĻĸYũčdK–Ÿ˙z'ŋz<>ķŖĮžˆ6¯DbįįĢåŗ—ŨxmãG'Næ• CžųŨĶPŋáöū”÷ƒG ūîæøžņžHĪ_lÜŋõ:OGÃ̎ãNú‡ ĐŋėW~hŋ ˜ũŽ-Åoæqxs#o_Ÿ~đėōōˆMiȒY+.`˜×Jq7šĻĻčF3•qåĨĩ4Ø9 íjīĮ}6é|bŊđf/č2Íry A"ė.WŗjĮŽVT=M66_~z.[ųEąŸŒôėĮ@’~ũųyĶ™<žøč“ę)†ÄߗĘb”^•UėV›–ցšō=)3ßaļūĐ\ūU‡k¸×O{°ĩßķUūĘŋ ŧ3_īúfīLĮ@LC{˙ ŸØPã90^O#Ũ\>Ž}āQķŧȜštĶ)›nģ)Ŧ7ŦđöüŒfÔ7RvËJf!Tĸ[˛ĀîVx´Į*Ŧŧb*NXllģ›Y/ę§TqđKT#jƒĨ.…p2Ÿ^Ž^GųÚ.OëÕ8¯båžøúS}(“˜~úp: CÎ`é%ˆ‚”ųßåķėöâüņtŸŅė ‚Ē\ˇ yĮŠør¯ģû=Ķ˙įíö/îāėŨõûž÷m…P÷Œ?įĢßįŧõ 7š Ą=ĩ@ Ë<ú@Œ×į[ nČąl“Ÿö­ŽFėîũkĢĒNw"aÖIŊđšęŦ÷LĶ„ĸēæĀš˜] ­,%‚Y Gčœ;UE6…DMæ9˛qņ—…Æãu[AŽ’ËX?Qû:ŧzŽáéË%gŠØčãęGßžŦ ûœ~˜œ.tíÍᇨŽk¤kˇÁ į×aÜŲ­ūô)˙#ügßeˆS_x7Īņ=5pŊņ~8ģŪ%R>Ė7o°o9æƒ)æ+Wđ@ąÚ|ūņ‰š Ųųeyđ –ãâUÕ'Šd5A.Å=ôÉ4—´ËŠhŪöĻU)ķ ="U—ęr:*–ÉŠš0šWđ5ą{Z°CļcA)ąrЧ2ŽÛ0fĪS*}3)¸ú¨9n>5ˇîÅķŗP…ãČGa: ÁŊPpäķĪūã?;ü=kķnŨnœ[aũØĪÂŨßāwPÕžĢ§ā}Ū’?e¨,Ÿ¯Ū™œ?¸ķÅŪÚ§ū2O˙–qį rĪ÷ܔd`ē¸ŗ’0 Ą w8x\?¯ŸŒÍÁLo>Ŋ´ŖŖfŧļ FÆr$a[!M ´.aÔV"žfaäž{.ę}Ž:ĻÂÎ=UhûĻ0’e…V!!ëM=T}@D*žP*UČųėÄvütšÁŲNįŗ {*|ũŸĖ)4žĨh§öúë¯~˜SpßÀ°į™>L„áŨJŒ{†ßÍģuü–e?ÂļøƒŌũu(~Čãø‹ŠbúWž÷Ę;18ڍ€!¸,^T`TÁpxī iÚl—…Ė$ĀŪ|ĶųÉÖËtLÎŊÊ÷GčĘy=į\¨{XĮzáØ•:”†tËLĩŸŦ}´BĻ Ö‰kÍGÆGSxɘYG[Ą `æ-W#%o¤Đ´Ē%€Š†~ōՒ>ę~WäøÃ$“ÃāVōÉĮ¯œ{aôųøé…>{ķ8‡ŽECõÚ>vNđ28Aoˆ&n™E~˜¤[‘“k¤æīÚswĒ˙|”JÜíĻo­Û0掝p÷?„š‘ū@æÍŲīŋîŨOn3ˆî7“Ju0J—)/ũЛ[Mb…’Œļ_­înj Ÿ}ČåĢßQáĀîŽ$sŲh{vB]Ō”­Ŧa69U§ąėu=*ģU7iĻžČ‰cv°“‰­pŲU41‘]ģĩíē˜v Ĩ[žX.‹7QĮ)úļŊĖäķĮåÍüv>Ž|m(“gƒC|üvUŒÆIBE՝wo~vĨûœwø@Ą Ų÷ t˜ėįĘܙļ[ķ|hßđŽį~Ž‡ųū‹ÚzÄņžxĀ;qũūto^Čí/{ũęNwķw.ģ7"wĪđ›ŋ÷˙ļöŗJŦŨŽaȁs>ÜԉiūˇÛéēwĨ„víô œ{~˜ØĐ‡…*÷qiņ‘uę:ĪÅ Ė ŅÍĖËØÛDãˆ*˛Älš<įPt.oFã–EŧÄ-J­:†‰-PŲn&LyŦ9Ĩķ .eōđŲė´Ū>˙Ņžˇ˛ģEx7ôL~ļ&nĖŅ ô7ë_`÷ųãq„ė;Ô0önĻæÖ2ŧG Ũ[_s›\‹ŊÁę;Øëw'ø=YÜ uÚ ŽwãNždqJV‚õ6Æuɔ;„ũˇāĨN4Ō‚°}iūđi)!č‡|øaŨ-™š{{íū~ˆŽ!ƒ¸›,Pc3ŗ"y—ā\ž<ũfĩŪDĨŪüķ Æ}û(ēln]? BĘŖ¨Zî=¤˜…°ä‘ËëĒ0Ą>I­QĄ*Ö1•Šy3I„…‹ŊđĐũÅaVĩ G?­}ÉÕjj^8ŒŽŽH›æÉâ÷ã'ģßūčá”öņ$ĀŨŖh&xö!õ7'ņņŖ¯éōęŗ÷}G܉ŧœmˆ7ũĄāÍ~ˇ¤ÃėßúŒČá÷Äū oūÛÁ÷v°†\ÛũģģōLËĪ€æiKIB$Ëâí4Ē…”¨˜cD—’G"ŒXЖš‚¨‚Ņ6$Ų&^+‰˜Ė‚€ŧu›f!ļÁĸ괞HduS;[ĄD™´p1Ęđ[vƒ›øƒÜ5s1‚úPR”LDɊSë ĨÍë§3ˆËëņҍ@dÍ"[3j‰Í.&įĨqw4^Ûz˝ģütĢyÜÚJŲZmĻĖŨ6˜•G0Đ"Z•´'ö-“4ĪŊĄrS ­æÎ7îNd^bbåĶ™}žzTĶ/?Ā„r 5bÚŨė"(čé(‰gƒŖ'ÃÉß˙—iģxSM܈]‰ÕĖ™3Ë>`{ÆŪō!`Ī”īˇ ģe(Ü-œŽŊ~íיE÷exĐí?ßaøMËŪģ8“ĢgŰŅfÁ<]LÔe͎Ŗõķy(6…hŲXĻ 'jdyqė 2CŒT÷î¨=Wc!H"/æđu”ÆMC%‹™AFâ ÁKncŗšˆlcG]áō(¨í{mé¨p@1‚O0 PcÚRŪaNĄ- ĩË3ŪlgŊJÆŖ•ĩÆÛú|šŠØ•ŋš0›ĩļÖa&%ō¤wS,Íz5:Ū9sWrWĖ˸'YŖE-™6„m?mŊÁ‚’ĒjWôJfâ/Dŧ¯}"ŧ+Ŋ‰Ģ–āFÛĖ!ęēuŧ/gFłH(ˆi]ŸŊžĖ¯ķ §ĸ‡CÄM™ WįÛꙮßĐ͞čî ‡‚}˙ sŋŗÛĒĖ5~o{<ö:Ū}Âėļč;¸Ã1ö|žcġ‡€GĀãÃsĀ÷meOã@AFbEŨ‰$X.ĖVÁ‹ųdÁƤļV•ÉĘlȑŗÍŧėÄĐĐÆ‹šõg–CXcËĮ›.lPĄMōn‹-Ē}C\w)!ÛËRåĀ:Y‹ ŊZ}S'´~ĩ#ũ”)[ØQ#[ÍÖĖf2˛b!ĸ€Û@ AÂd|^2Ŋž6›Í1Vüāĩ–_iŊ[sŋš/į3#ZøĘ(n +Pn'´xCåÍķ3š‡)Ú6ˇōY8*'2æ uvBmįã˄ĩ˜”›#áúėų§Úö-;kßg—`5ĖČ4¨C•ŲŨîĖjNÔF&v8Áâ˜éžúÍwŊĸˇŪ¨{ÔĘQŸã­Fę{ÎŅpøĮ¤›ģ0žÚŪ!}Â45ÁÄ …ĮœĄî$äŪ[Cę 3'öŧŽT:<>ŗm R5įbD`˙ę_ž}đß§Éæˇ˙Šđŋ<ōųî*(ŖŒË"9™›‘Ü×ŧčVŖ^CĒĘzÔQxɁ8Ŧ`=ˆīęWyKäT›/kŖČØR¨(o' Ąm­&ąĘë‰ųxS‘o‚­„ėávˇxŪmĢ×ŊŊ9O͕ KĒôeƗõëWĸÔ f˙üũOå˛}ŧŲŊ¤:ŖÄzm@/GæēĨi@qļÎ+6Ģõ˙Ŗî=Û$G’4ą×Ė܁Đ)*ĢĒĢÕĖÎέŪ%yŧ[ЇüÂīüš÷x|ŽGröî¸\1j{ZwUĨ ĀÍ^~@Dd¤¨ęją‚ö!Ā€ģši7K杘áŅŨĖKÛrŦ;ĨĖ‚Ļ&G‘$"äœSëQ!ŌÁ˜¸ ‘`S&bt5"ú]zŽ}Õg>,÷%Šz#˛xH‰ōž=€Ū€û&­{ûR{ĖÜīTŖštš¯åiÜ&œí+er[Ѕ{"Ë =|_âD Մ$fE >÷€f0ũ]ŒŸ>1\§Ņķu‘cqÔÁԄ…4P<Ôà K)DŽĢ(K]&;–.xÃĐĒ6m×.s7ÃŦkB#˜\_r–ĢtMo?āy[Ė Ō"-g§ŠĩĩĪäU ÆØËĒäÕësÄÅÂ]Ģôw/gÍčÜ­BN#Y\Ė—^ęŧtŪ­~w2ëĘ—ō7ߔx)…ÎĪĻWRĘ´Sp$Š;,N‹ ÕTu8Ēc1Y[õrʲ˛'@‰Hč`…6%×YÛX1TD5"™mBĩn+"Ļ(Qd™ál˛‡¨H+n&P MYÍȈLąL” šôœGL"ķÂG÷Ŗ+|‹ ¸Gˇ=Õ;lĀ ڝķ[âģ4‡Å?w)–š´UĸKĀÃ, ›ZŒ„† D D™ũôs\ W¯==īK­ ĒĘVœ%‹ÎD’“ĐJ”áŅØj>LRiëN|ö$…sč!C{Ču7å‰%6e“ēąžūTŠĻ“ļ+ū…]Q5ģYeÍæŨ*žå Ÿˆ_?E}i9}ō‹…‹é‹?šŲ\MÕTŊ[M7ā+æ¤c‰\Ųhöųûéčũ+-§"'EtÁš´•Ųâ ļ Ŋ­Ė]¯5ÛõŽ3šUļi —1‘Á•R UĮĸKÉÍ@ŠĀy’Ŗ,ëã…Xˆëõéb˛Jĩk—3TĒ҆KNŠŌ“n-ĩĢphļ4Â[N‡f‰ )V"eŦãÄē&–”$mAū^xvŖođf#ī]‹ ’ķ°FŲŪÆsH÷ŨD`ÄrZ93(`Ë,ČSzv˛üæ'Ũü×ĻΧšA7hØĸÂ=+MJˆõybZgÕfUJJŽ5ĸ´E5JNȋŽÃ0 ‘€4  íâôĻU“*/TLS R!t–SŌŅ7I[ų0Öõ`2ėŧ~O‚Ų>:ÆÍËåÍņŅāÄeÕe­B;Í~Ū€I%Ę×é8õ9Čė‹üūīÍØēš¨Ų pŽZ毒Õĸ%ʕ !ķ†ĩJbéBXVž)k­2 V#tŊ@$kY̎’_Ÿž.Ö'\’Í4iļ+ĒĐWÄ1‹mæsĶΊˆĨåKąŠÚŌ´p6ŋ(™EŸjē”ä–Ĩų˙Ō't|`§ũ~&ā{‚œÜŊōđnš˙ckŪZ­÷ėžÄzŋ#˛„Ä0”NPD˛{ËÔīŔŖ÷>ß\=Ŋh—gĮÂęm–^ B’"ĉނAtęEØL$Ęå@FI’ižZĨ† ¸l&EEŲ&xȸq /Ōą 2BcL/Q‰•MÃâH=š´ųČpÕhŋ¯&͟žūöb]J]t€e5 ”ŨÔĒüûöžÂģļLë ĻϞ ÚQ˙a¸•@hŒUˇ{ĐI ČÁ* #)"ŧĪ!-]R0ān‰`‘*;˂ˆæÔC׉  •ĨŖ%ĄÉĒÃŗ'Ėĸ[e ¸ž’­[J—_Ŋ1?íGļŊŒļ—čÜ%š›ųv˙ŦU´UßŪwlSnoxüy’…¤˜Šd5c‰Ôg¤G_â íėũĪŋūŊŖåEĖ$RtEß\™~¤P‰ ÃMŖ…, ĸÕä`ō?CĶm^ųä<žÖĨhčęx ¸lõKf\^ß!QVŌ\YmqÎ͘HWdĐÄÍČhYŋútãųųčį×ß\}~6åbBIzIĐ$ēI! ą~öęog:ƒv0Ģz—fĄÉ>Žvˇ:ˇ’„8E šw…ö!w‚8öŋØæüĒˆĸΚ'‡üMī: †„ Â2ÃÛCŋÍyŊu/B €wúh~Úw†ˇ!ã}!m‹oķcIzJ˜ÕöÜũ0—LwĀjˇM…Ąĸ Ą(Q¤ÛNBŋm[Ķđɰûâd“ĩz¯V÷J(ŗ—§^ "‹ËÁŠ„jíą!´^vąžäĒpqsÆŦKᓸČ2‹Ļclt  —ÁXØĻ͖ĪëĶcŊˆŠQ7e„‹ÍŦ < LԆqí…|Ŋ|Ē×ŋ}ՖŅPūųâ¯?aP…!VÖf7“ĻĪU9ũŗ_|ūŪĮ`Đ8âõYm\ŽÂĄũ'ö‹ˆƒB4Û-ÄvI6Nq‰zQxGî<&įГú‰ €ļ5Ŧíō‰îĸõŅcûž{{ËŨą¸=ķĐÃ~K÷×î˛Ęģ#pK)!HˆôÆ(×,§ÕáĨ¤tü§˙éúŗOėč}66JĨ”ŠšvW‰´MZa$°ÔiąäŖoŠ6ņؘ‡Ļ\Ííķqn帋R:äa„J ‡Ē‹Úe6ÜTFaWÜÚ˛ˆI­œ${cdŽ"kGģšÍoFã<‘ŠīũŅ/žúÍč8¤€’BA‘č$Q¤¸ađū7ŋ|oYÁĮã,sIäXļ ¸ˆ€đžá­Dģu t5“C§ĻÜÄ=RØĶļqĨ÷o˜[š{$'w]R0îz {Cũ€īooŠzīÍîļŧMXŗ{ɀŪ/žž‡ÃHĢ>ƒtĐ(UP ]%’¨?øíËi›äŲq΁VŌ&ŋ‰ķ3•n蒊¨ļAUĄŸŪø¸Soō(eUÕŖeËŧې”ŲÃ†š[Ā1Õ#\fâžpZ°›Āēf1eŧr,gPĖTהOõčĪÚ˙đˇëŸžN'č¨ÔĨ°%ËÎõGŋšŧ9ŠŅ>ũŅÕÃÍzg’)õNėsP=Ē~ĩöîåžōæmōôŖ~gŦlū<˜ wđ ?vŅŽz‚vŋ>ú;ÂŖÍßvKŸųķŪkČŨûžT"ökø1"¸ŊˇuVëSĢIK†g m7X|ÚXŠŸĀNMŌÕĀä*étéžRcˆ¤U32iR­“@cr™†÷‹ėeØTiŦŌĨ'#Ķ ĩ´dŅ:ؕfPÕæÁÎ!Gëu=EUā€JOĢ/ãyļHãÄËe—:2”TĪ/.ķËãÚD“@NKÚւ fS¤OĪgšíÚjØ Ž‡Bom=QĘ~HEM4ߎ÷ļŦˇˆŧ+@äÎ ŽŪ ēŋũņÉ=h-¨÷ĐTŝjõãyCŋ|Ģâ@āYzSüÉŊAyX~āQžk,0ée]€ÜoRËQd€ŗaķ“Ų?ü5~ÎįŠĐ4YLjy:iX­_@ME…1˂n°É ęC.ęŽŦ&ŊR;=%ÚfĶÕĶ:ØnōKLBĨ ĢLī\˛€øĀąŠ:4ÃÁüUœHčŧōÅâ=Pčn•†ÔŅAŸ}xūękžUvŌ;B4A…ÃQG"ĮGtŌ5c_—Ä;%Ąw°Ë¤ˇ.sXđ ŲcT÷ƒÉ:4šëíÆüáÄ|ëÕ]Ų7îĢû‘áÍøØ{÷ŲČûāÎģcuîK’"}ô‰˜Sˆ)!ÚŅ4U+™|p!1øĪ˙Û_œũádĻm>Ņ_ž¯ē  eI%rlpsė %įÚZØj3Øp Xt%ރė—9ʈ xędT‰NŦ`(:jršFí0žYįˇ-ą+ÅŌ¯¸'DŌ…â$ÄĸæŲ¨ŦŸüĪĪ˙ĪߔŅoN>z†€>慃qí%h]*”úSáâú$lēĘķá&ąNæ]eX$D[ŠĢčeâ×ļŠ¸Ģ­Â“Â´õ–ÖŗŠŽSņS#d0\­ÆŖR‰"~zSžZNžørđ &T ×c@xôa)ĢŠØ7%Ö'e(ė+ĶĐĮ_ŋR÷˛­lųæáėIâŊųCėzųũāöhz‚ö#āŲˇ>ø1š´…;¯˙îtĀnčļŅ|.†>ĒŽP(=bØgōņGŸ•ë˙<=Û\}q=Ō¤†„6¤HÚÔĘN(ž”ķŌ65–ļpEG)LsKŪŖ$ $õė]Ą°ZÛjÖŗÎŒj1Xvë€Õ§˜b^ųdČąXNBa3Īna"ˆŋüå'ŋēyVõq›¤ÁƒęIČåuÛŦd:;‹k/ֆ¨;Rđ}ÉâžŌø—¸sJĀģõáCÎÄ}w0Ģão­‡ō#Ā;āÍá~˃ąxŒã>üM@Ŗ/đ˛ģN@{EĖ2{=]ņė̘¤øĶüëŋxr2šÉæHŅÖâYŠUÔ$%ÄH•ĖĄŠŦŠ_]~<Ņ+'“A‹´šĻ4 ĨT–bĐH‚‡FÁ"Ĩ(ŖÖb´fĩĸĻNąd[}y^ž=­SO`N˙˛ūíÍņĶ*mĻĸ! }Ž*.ēRįoĘŗÅ.Ģl?,ĸ(†÷æ:Âä‘å|od{ÁųÖRtRŪ*u„č´ÕđMvZĮąņģ}įŽ4Y¨ˆß"%˜ íBĮn˜üęĢaÍDÚëŲĻ-VU&P…—ˆn”7bB4Ս@Ķzq:čbō¤Ņjšæ0ĖĄ)­t–Ō&ܒE(P:ˆWMیdøĩ§ĻđNW2lE%LâËOŋJįčģø™Ķc¯ĻĪŽšTŊ’˛Š’QĖ&ÕĸŠôšē›FgT߅ėëCîMŽģCÉ˙Vs|—‡ŧå–ū’q_ãëŸĪŪōĒīč˙Ú'{SˇÜúL…Ûx) N|CÛ_ņėşĨqW&¨0t'Ēb­U—Í b€bp{œ°bÚ4"d3w9Ë]áŌ†›ļLbQ °îp\Hŗ/Ã2ąÁzXK6x˜û ÂOÄ$žųíÍiŒb7Ęzā:YkFŠhj ŅŠÖ}‰ô$ :˙Z†ãŖ}øÔũ1ģķ¨Đö.c}īļˇsīÖw˙˜ˇ}ũsĶŗ|7vۈˇĮˇUʀ[3!?ģåŽũÕ'7Οb/b1ÎפĘBąĢ:g5Ė9­Œ¯Ķ“*ÎOgW“Ié*Âëܸ•Ѝ ymsúJm9˛#EUBč!Z]fæēäp˙ĮžLuē•Ė}4jgÚ×ÎD×-q&¨@‚’f ōÍõqāĻ|0°ÚīĮPŋQü–Ņũ^C˙ööÜÜĘöđážēūØہĻŨŽâ­<{č ŨŽ&ķ:§o>íĻ˙Žœ[īJ™‰@$Š Do˛Ä:wÍ1LãÚ,'“ÄA˛dX6GĨ ,EŖ‘ IĄ˜cdųõÃ!ëâåכį×"fī8'÷me?\ ˙ŽđČ{>šoûŸĮŪ.rŨģúí˛Ų›÷Ēęž.ŋúD†ŗ“͍ŨTįĻâīЖQĸ ÍĖŖDíRJSĮÕ䊥Ôuĸ™´ĨČFÛF× Ũ _JõžÁˇCôA …Ÿ%%PP˛„¨ūîJĪFzļKk"ڜV/Ļ1íË R‡„ŠqũË4Õüū}Åw5úüÖ?ü˙¯|ķPWō– %åū:üä˙.OŌéŸĖ„P/ĄA”^ēH#‹B5mMīb)šŽDYF6ĐŌyĘ­×ā'CĻ㴖Ŧ+sŅHą˜"ÚĀiZ“˛ĐČÂyÎ !ŌëķIí›ã“ŸĐÅĨˇļÖĨķ/gOfĘŊ•FÖËŲÉŋŽ˙áĢņģšz~xGcŌģÃāą}(?č)olüĐŪüŨÚ߇¸Ũ°rĐxoÖĻl‹"RĒŅĸ EĻԈ&˛™°m]”Š›mlqø|1é$kŗ:ĸ$úJs[‹4íx^*vŖč(3e‘dĢQĩ’ē#×ųō”EÂ5w.›ßLí}ˆ"ēXŅÛA2SŠrųüļæ×üęōFæäÖl<ŊKÄĩ,#-üč/ū`ö.ƒō8üķ AųˏūmčōøĩGâëŪˇl„}úģÁrXĖ!úíūhžŽŅāõ‘ã|V›5"ZZH-7ķ™ ƒėâåeĢ–8F0<ęåZk¤<šč–į›÷sXŲ‚y:'–e ŖUĨ)]EĢOZŸŽ:JM7‘|rŗĐéŦ’mŽĨÅÜç/TØW9‘ĒZĪõæôđCšO7?™f9ˆÃlÔ~Tú҉Ø,‡ũtũãņÍĮqˇõ Ōķíy–vpØŖîĶwíĶ•pkžŨzŲ`0âWŸÄYĖŽla“$ĪŖ†xĨCéęčîrZStą’G‰ZĸIV8!ŧ•Ü´–ēÁ5›Õ“uĀcVe  _ĪqŠųûOv!Ŗ”æH›ŽNQ@•ĒēpũÉSôĄÔíĢßuƒänËözzņEˇŪr÷kŋy:;Œūü'€ũQiyÔ˙˙Ņžr§1q/Üîí@`[”ô;ĩ¸īæî”ā֊DRÎ˙K×?z6Œc#ČËY-*tWamj…™mÛ%gÅrŲ$#5Â`ĖiUYfú°—Arú¨qĢÚ d Ú<ÃÃOG `8—Ę9t.7‹™jRŅõ(âŖß" Bōåįįחƒ$AkÚ…—âÂķp§Ž=¤9ģûCla˙˜„lÛũ÷ ŋŠßƒ÷Ū̎3ĘīÖõ=ĄkûâÖs1ĪŨ_!D#ĢépsüĮĻ9ĀĢv8đ°UŽ˨ˇQHŠrR]md–Ž6Ņ„%úēʎMŒŖ"›fb~ᨿ´b¯UTËTI‡ļɲi9 ¯Oĸ •¤7—'éįĮU?$ĸŅĶôŅDCM(éžpíĘnËŌzvô(ŊŨû/ –gũ˙GëÕŊËĢīŲâ!äž*$xŲ!Ē‚ˇ1éÛÚđîõ3īG¯ėn#cÛč5ƒ ö[ڃģM ĄŨ¯Wipũ'#ÄüDčŊœÍJT~q ¨ĀK̚+"‚1m8ˆIM­ŨsŦ3#Ą’x}’(ėāëAWKUJåŨ&ķŗŗáQQÛ$Ņ b׊ÂÃr´Ũožđãjļ[ËųōjtvR "ĸ- Øí­eëT$BG´īom}dn˙1ą´y,ŋwŪåCö‰Oī¤å-Ņ9@Úûpë†cßUīW¸ėđŌö€ũÎ'UúgāaņĐ@ôáĻ=ÂīxįË߸Ҟj‹v‰™¯WœQâ|&ĖkÔ4Ŧ Ģ!¯hķĶŠI ZJtŽãäÍČdUÍåúčD™7É ĢAˇd GjHĪMJQ†„T.m@d¸’5˛”׋ÅõûĶ­ĩ/âęsäųüįcŠ +¯ž™žĮī‡#˙4ŧ7Úô=#äGe„ 5Yĸ'Ņ˜Íd1ŗNB˛xP، ČŲDY ,ĢI\ ˜MĘ \¯‹€ŽÚŌ‚e-Í(TÛH•ąsš‘‘ē“ĄPÃ# a& 1-.˛Ū¤QۑĨDš¨‚ į3ՖŽiDé<´Ļh0h˛RĨ1GR{õĢÍ -Ī?n%—ĸFø8ąķË4ÖVSŸ˛I  ›^ŸÚB—’jq.f’\K[o4úÔšÍQGYņĖ “ׂZ aW_ķXēĖî†'Ņ1Ôę0 \vV!V¯šnŠēCHn–íbĘéņ°úˇų (zõęĖl!_œ7Ģ;¤ėáÚØ>Dˇ#Í­āōũUˆwFK­.{uķž ¯L$:îĖŲįĨ´ĮãÆ|z.Í)/C‡m$ijŧŽŗBrĨ1! Mü”kĮ͈ĶüƟŧ-…O,!@9rՍ—ĮiW-ALå NŌŦp\•TŗEŧkĮPĀ TĖŠŧfĻŦힿjq-U˛X‰/Õf˛.nÂMŽ?ũˆˇa7ĨËãeYwãŋVyydíJ§ÚQX,Íũ›*Ė„1ÅŽféʏŊl‚°ĩ¯ĪģÕĶ€ękߨĘoJÛ=፛¸cĀ0@UäĻǺЊvĄQ@ų§/Ĩޟ¤BŊ‹›WÃAōį#Ąû`'ÔF:ÂXŧ^zQlŪuúäQ5jįų˙žHrĐ€ûĸŸ“„{ˆû@"Ā`‹3IŅ0čŦĸĨcˆÅâŅÅpŒËO%ą}ŅR]…´œÛxW×㐠Ŋö“×W %yzž˛ŗÖ…¨˜­å´ņ#A“3Ŋąa\;+;QrymuXRŽ-%R)%CՉĻÁõ2§ãWĨiŠËųĢMÚ8Ž˙ęE‡ŗ•LĘĘĶ•ąŦ‡ŧˆ‰ ø$“á˛+…Ą¤Ųī0FŦĢĐY/ÕaĒ_vz‘‹)m=ß$šąËēZ¨F;X`9B&AįĢ)’ŽŽęmĶ}ņ˙ĘŲāãcfSÕüŲ/đņP“Ĩ˛0]Š $BørŽÃ"Š›‘ķOí¸GÂöĻ7āʁĸ~ Ž:qcčAģ’øˆSØ{™ßÛ^öší 0ú€)AEîVŠy+2\,k×Ņ)aeã&A5Ž ˛‹8i ÷‘„GDJ銤”Ží$Ęy;Žâ>ülzz… w”k-}áŪRWh`åúŋ„<)˜ōuŽŌŠCŠx™ ;o4U ĶhĘėæc8J#Âŗ&):įą|ÃTŗåĩČd•äĨeŸŸ"ĐvۊgēĘëĩĨúFŽ×õ:mÖÁŠ6ËĩÆMsõw¯ĮöņlŒ•S§Ņų¯gji8˜—ĻKSÕŦk˜6ė|u“$&~ų5N:wąžŽ °ĪhŒS:ļÅŦvųŨÉ[÷@ģUÖt<ö _ēˆ{yė¤<øņ´ ß2įģxõļũ¤‡ÉŽlwėŖđnÈ­2Õû3˛u8TvŠjШģ!Lz#Ä$‚ǍuAVâđNTFųE“vL`:§Ķ´I]GŪ|6ũû_Zú˟Ų/??ūãÔņŧ%×i<¸Ō›Ib“WáyŠeŲŒĪ‹0,´z)sŧRōYœŗÅ'RœŨF„5Î6ålyĶŖœ­U<֘Ē^Ļ”+ŧ:YŽ>kwÍõ'Ĩéü9U֟Țׁ:¸Nz2– eÅ××eruÅŅęĸÚH>ũ<ÛÕPÍp—*3ĸ7 šą !4ąKēQƒGĒJXRĨCK‰GĀ@÷ļTÔąw1 ŋ   …ÃWĪí¸íĄeâĀĘž=$wŠŦäSūδōŌ:“ÜZŗ“XoØaw;søA‡V¤}L†RTú˛N†ŪeČŪž˙Úߛ˙ģ—ƒ˙í ~ú›ôŅ‹įz!€ķ„ĢŠ.bŽ'ÆVāXJĒR×YqŖQꉜ ¨_räëŗQĖ͈6R”Ž Åtq! 89ol \`âą^ ÅæúUņ›“Ķ*Õ>ąåUœŦ ų0^-§*ë*ŗpFäÚ_ļbO*DtЍļqqu”Ÿ¤ZĨ˜ĘÂÂ=†ŪÅHTÜm˜Ķ%GŅQ‡Ãe™LØ 7~4*iX+ZĮPG-…ˆ–Yj%‡($HhRŠEĀĢQE×ÅH4ļ†!Q!ĩĮæ .P´ƒũ,04ZŠ ]ŅĒ[S*ˆ›˜Ųp׎ķęģ8ôČé[<ã.cŸr Ám:—ģÅ4¸ķņ=˛xvT}ëŊËpč €S•`ĐúüČ ¯˙ķėEū?ūCKũčĢĪ_Ĩ˙úį\žēĘB‘PiAĢgĮ@¨Æ9FC¸ÃĀ„5afl!Ĩ“$į媌Æĸt0Ģ´u§™„ĶIŦTÕƒŽŠr=Īėü“ŋaŌ§?<‚ĄkšQ,žŧLZumU­.Ÿ$q2™ĨEņ¯/ĶĪ*6-RoĘ_~ņ_ũIs"7fY6@xA‚‡CŽDDMÚX°#,›N=b•XFXLqŊŅ5ÄŦŅé•KUUúJĢÂÍÁ–ObęąFYŦR.S$ie#3ÎÅi Ôa }"Č­ RŽŽ´Ę‹z¤Ģą†Ā§X%ĩp•™ĸÉ0杊ņÖ?î]gwųfđ]c7E™ũ¯ŋ ÷I*y—$Ũņ&ô™}ä¯?t2ŨWíû’ŽBŌŊ6 H(:Cm˛wL[‘K‡N͟ķן“ëŲoŪKU°ÃrĻuC’j{3A€N”A2hˆ°¸–æTSh§9;c&æĨ+Ō´%ž DS’BeĶ›Ą%t:Ÿ­LSBĢ5|r‰:Õ/N—ŗ1\F$ĐLį2Â Īŗĸ„YøDÚį_ķÅ  Ąę”ųšŖ?øCĄÉ†píʼn>Dŧ¸$ėBŲį2ĸe‰§ ķ”  3›æ]HUģŠĮŌv]oR Û"Šļ×Čĸ“đ('ϊh}@FģĀ…“ZšG–B;ūÚĪCeŠ/Sĩ Ŧ“ĸ$uŋ™Š+‘U¤Ã˙úâŲ}jöíá:o!÷ŧĐŦ¯ú¸Īgų":Í[z¤ãmÅž˛ķ*SH Š(Ãeˆ {Q)ļ÷I1âĒžúōũ˙ ˙ŨËîo/^úņ[‰d”82uRŒ]äļÖ(C_‹Uæ%G¸Įæ8­ëĩ™Ž”.j›į%o‹vĖ­šDŗ^žm˛ą#¯'V0Dä„üę<0Œ:§ã.,õ *u8@\fx$íļ-JEĀ[NBĩŒ×ÕÉ`Ö>.e+ ÷ĩF!AŨŗ'ERzV÷„BžQNēˇ|?Ũņ–čę.BÄĄ"T ˇÃžfŽ÷>Ņž2FLčÛč °}ōd4oģžo†x[f„§—ŸžhšW5û2@¯X>NūŪ(霍[7L¯gĒŌûB“ĸ$ d'AÅS%Œõ%xŪž71.žņAķ%žNj5¨ŠÍŗAōgO%;—>žÔ‰c–DŅVŖr† ”Œ…b–SF%ĩ1Uķr”´:gŌUōh0m9pĮhž¤",B$Žęęōëķŋ/g×l7ÅT°ø˛ũxDĄ\ŧüykƀJB7MtŅ„!7í×ŋ˙|ŧMÛ~ΉÎ},ä#<õ;ÁÎ:đSúq@¸-īôĪŪöÄĮ•„ũeëíwAI˛S5‰ˆtH/(úÃí1cī4‰žŪn{“ĩmõgqI:@Q#W"ˆŌyžē:ūÙûË/ô—ŨŅpX]ŸŽS–ļ^e“šĩ]Lžą;•H+BP’)¨ˆåą^##šAēŠĸõq׍!iãŗVĶFFËÕd Ĩ7 p=|2}ũâé‡ŋh´ËdD÷Í72J)›Ķ*DvØKaB^|5ũč˜– ŪPÔoÁģgíģįímģüžĐÕ~ė¸ Y5ōÍíBßŧeĶ<øāíą8(ŗ(°GļQ÷WļĪ~ƒšŖī}¨ĖŪQ"€ŠÂļJ@{Ę)J$ iē…MNŽM_˙:ėâjōôƒŧIÉ[ŗE3\.4ŨLęMĄ(Sō‚ TŧŖģ|ĪĸR •öRž¤č6ŸŽŒ%1›™ŽÖGĖ%Ō|rĩār’Ē0ļōÅņâęčäŋ˙7“ÁąŦ¯ŨT/æ×éDąō™õäŪj\,ŽE.k¤J~iƒ*FHĪeû܁Ŗ&Ūä×<Ä{°ˇd*āģũ•ßBaž ˇŋ§Hŧ9 ā7Ф­Č(ĘãāÄūžGE>\Žč5$ IŅ `_‹*íR”-žîH’vĄ™â7ëaõË2ûŲ‰4<ö(cŠũÆĢãxU€K–ÖRZ™Ŋ ÁĄĐé2lt>Ļ9ĩŠVōfXĸ#r`˜­Ûz4'čĸģÎ/Ž’~á§Oŗx×t˛å[BŅ(ëgg^֞3€ąĀ”“ûÃŋw3|¯} ܓ†öŲĨ‰­[rw+ėLãŲw]āõCū–,í_|{'ī¸Ąë.ī! ÷ē;@Ķeôļß>f¸ŨaČB $$x9ā\^Xžŋ˙_ķũōfš•Ŧ›ļ™ĻēÛdKŠÕ*ŨõĒڌÖĖB&&ˆ%*ŅO 4Y(ī4:Hk›fڙ-,™.“ ÖJļ9D¯7qĸŠ3zŦ^æņ0e]:;•Œôē;6ļ‹Ņ[~ōĸŌÅgĪ?¨*éfSoŅc‹‘ģĪŖi„îØÃnßBîp‰ąļCŋ}ČÚ']Ôš8oVÍP į7>Ü­ĪtŪž8‡ėÆåmđVüÛ¯cÁCzņÃ!ęîQųėģ꛲kÎ[“Čã="Ō~{å[õœũYI{Ģ"{R§„ŗW/a3’ôĩęāÔDaPƒԊã§UÎ6žy)Ŗgī§îČܕÜ#ÚJ“hæĩĘæėĸHĢ›AÅHZŠęĐ €nS¨K´ŅÉR¤J×@‡ē õč*=ž^ÔâfŌŦĨķi‡ŠŽļIJųåƒ÷˙ü‰úzYpd!¯ü¨Î;-GAÎOΔŖ“ÕōH˛ņ”Žv{ÕīIˆyˆ#?ž“Mã;Á^ĀySž ŊĻw˙䖒uîÅõ‡°Į?x¨ <ē mģrx+{Z¯ Dhčŗ5ĐÁV‹ h KĖ+sפ€ž-ítë܍‡Š?øW§NE7kÂUšŽ “ES4b“Ę&ēz3”îČPLZ¯5:$ p5 ¯åR:A§čōĒ‹ŦW#uŅ1hĢĩA“Îu8—QĘDęn,›´6@}ūģWg(ŧüę—'ÃÜmžšNR/Hn ÔĸNQšEŸėdķ[{ļöl×tkú:œ ũÄŊ×=Đ<ßßeë“úŽ|ķVtgėĖ÷÷Ūö@\;°Ū‰éxŦŲᡂũáRŖCđ0=lßûĢ`+Bwˆ LT\5ί˛?›–ą†eŗ§'ŅĻl•ŠuŠSĶĒęĮ͓A+ÃV&ĩžj)Š4!pąwQÁIgĄWGϚŲTĩG§)…Ķ‚ÅÃĸtinUÍŽęĘËNcbŖmû7¯ėÅC€|1>>JōzũŅ$Ëž:ĨŪø“äŨĻ~6ŌúŧÔĪGjY DLâ°ĒŅ÷˛zî›ū€Öß áĢ'ũŅ;ķMšÃäútũ=UŠØm˜Ädĸė‰ŨVbÛW•8ėu÷dŪ¸ā^´JîuK@HŧhÚ:n‚đŽĻÖ`QĸøäĻÍÉë5ޝo’ū?ÍOOĢ*ŖŗšÉŌrĨBĶÅpÕåIŽâ>tog"ŽFS§°vm“ŧÉuįôIÖē%ģĘŖs"y=XōņÜ+Sx‡zāĸ‘[vĶ Ŋ]øÛ›>IÂËæ¤}:ņ˛xVUĘ ŽØ›_^-Ūķuųĸ›ö ÍÍeúŖß{ƒ*)ĀM-EŲ䇞 ōޏũHØvįMtĩKâü&}ķ1–} ūÜJûxŗKtˇĪō€Â‰č ßúe!ˇ1ôŽ1 @ę68—N1ƒŠD¤Ūs€¤›Ë+u›ÔÆįqôoO>ûŨxÄ9 Û⑛f†ļ ōæHeäSÁW8Û,—'I)‹Im Ļi}mF%[)›ųŠT ęõÎ&Ą.yîy}ĘŽLéÉ,e įuq4œ(I`›ĻNzEÎÄÅz¯mæ_ `ˆŅ¸N„pķĘ'qčd:\âtOĸ=Ųŋ]ÚÜßs;Ioš°™|÷ü!¤bl ^ÍÍãr›Úų]:“•úú|ŧ!ēé}-eŌdĢ1=ōE{ĮJŋÅW`¸~—´ĩËöq`žc¨†‹ēHT@CĐ!ņåëF›iÍ,/ŋŒžŸûY~Bĩ¤—šįRn~"A6Ķn:،CV”l'UōŌæ6'Č\–ČAÅļÎp-vR՝X…AMHdZHŊ䨝ĘJ¤+@ē™ Ôå˛ÅôãÉĐĄŒvņ †)i‚ QŅ Ą\›äõ†ŨĸÉiŸÅj7’=z¨Š<ÄĻ7eÁy#ĨÛģ\~dÆy‡ŨĶ7ÖŨŠŋÅĶĩ5øšdvģv9掯Ūm;žŅ3Õ}U\ö!fûdÆŊø/ĘŧĢ4vĀbUú­h ĸĻ‚(ČėJIķŲķ“ĄÂKsųú“˙4}zY(ĩEj?û@í Öų´c-6IˆėuD—ÆË”Œ1˛eķÅC’¨¨¯´Vĩ&+qew1̃šŧn¸^eoæerztlĄ–×/gCtįé}é›&„čOžčĒ^›/ÃëI~ž­/rgę3đVØâŸđ,ļŠÅwŕG|'4ŧ+…Kĩe9÷đė~xĀãŦŸˇģdļ›Ę÷äú`ŨŨsbmĢāDIō–Ų>æ^ØsÕ­x>$ؖÉl÷ZąÛŌ~ļYSÛqL’¨AĻõërΤ›ą›ūáåË&ŋíHE_Ž}´aÅæx%īAtÕ Ĩ^ˆ%Ę 5)Ã(>oTŖdÉ6 xŒ+Äõæ#­“vaYwb_œBÖĖšZ\œØo>­ĻO§¤ęÍëËŅOPŧTM‡D¯^ Įčųʤ`qŽ_ʇ“}ŠæB0üNŲ›āÎ>rûC=íđy?|ų´?¸‡gíāî;ņÎíāũÊrį Ø•ÁžäöŽÜb‘í™áŖßģE¨šēËé}Û`Š@ĐKÖ j¤ĐEY\'vgĶ™Ōŋ^˙Įķãŋ|¯ŗÜ]Y] ĶuĒ!ļLSΓ™ 'ĘÖBéZ6Våĸ\ävēQ¤8ąå|æP—!e$–WUU:)ŠĶ48ßTuÍM9ĄP€Píf¨^ũęüũŸ?Ëá‘ŦŊž•ŅĶƒ§9`PYTôbķtŌ­íl34ß\tõOŸŨŸöģîŦÉ[Yî;žžŨ]7ߏļKFyĪǎąÍģdœŅ—YģW FĒ]厝@ŋŠö-‘!{An{†;äÕŪę$TCĪD(áHēP* ĸ‚€ÎWÕŧĒŦŠĶ˙æōo§ƒÄnåjŲ¸Ŧ—U9ˇtĻq†ú%ERÚ¤ĖĢ5)AF;Ûl8 æúĩ„ÃĘyČ mBîTÂéD°ļäR¯ĸ„Âëyu#¨,^ĮđãZ;GRTë×Ëõ˜1Š R“xrņ•žĀ€Ž˙woúdĮ‘ä‰ũÜ="ķŨ¯TAM6ģggvMšY“vmÍ$™éĪÖؚiL×îėh†ĶĶŲM$Ž:_Ŋ;3ÃŨõ!ß]¯€˛˙ÔË#22ŌÃī#;æĪ.ōGŨe÷…é–áėĩˆ˛Í7Ū^ģ˙{ŸŒyŋžš]€sįA;,Uįe o¯/ŽŪëŪ`R(j 8˛„ FAĸubáYĒ!ŖÛŽ Ē4ĐxŒOā/ĪŊŲA€q.Ж6Ú­VČįķKnQ̈1ĢbŪČCˆÎdUrOŗŧQ…<ÆĖšZŽfsa’¨Fķy/ĸĒf­.Ö!".'˜šV.8lŒ%`q­bî)sžgYs1īUafšĘƒ˜ŠIģænk´â{îÄØŒß¨W—îÁw/qŦîr÷]Ú°įЛ†ŋ=[&m×ĨŌ7˜Ī6ļÖÖĄvˇ÷—//XŪMXn¯üčØĢĶ’-ĢÕni\Ij{šV#;Ü]SNf†—âÆpĘØēív;P™œĮˋÔkŒģ) ™ ¨[š:¸ėŊhÄ2eŊi[B#xäęjˆ†š°Ŗ DĖZ0”BģLũĄKNn Ą†¨ĨyŅUW `ÎgŠ @s'¨(āNÂŗĢá°g^’°'b'’ŽŌ#o9q8ŗžŖšĸßΛîā-÷Úĸ4Á†n¸+cÜ–"öÚSŗųy6~Ũ:tOØü˜$ØĮ7iŧYŦūĪpÔeQ÷~×ņ~Ker'Ēíg+÷ģ/dÍ)XŧΉĸåÔßfLDPp°O($Yq58;M-1Ŋžāa×>ūĀgķcΧ­ë ­|šĨį†åU™G„ösŖSHĻ$퉗”‡ŒTÆ1Ũô#n¸VÅÂōTjK|xŠ,å-C°JX–ĸŽŌ)Á_Uڗ[ŠV{øūŌXēq`Y˜€W9sže–ž•Ēãƒl ež)•úzvõ }ëîåŦÍyĄŽ.Ŋ^OáPDDLn€LĪSŲŅ#ã^ųėŗĪ{vVI[›ŗŌHJdÖҌDōD\5PdŌrÎ ŗ!Š ˜%rëx‘ĩ)ĩÉ1Ā‘š“č俈M=Hô␑ŧŒÂŠ<3Äč]ŋ8›eW7nLžh8îíøŅMųö#kËüÚB€›˛¨šV“P‡R b¸x;4Öëĸ?Lĩv‹jo>pŊ v°Ė´~k'˛šĖɅX…7gķZĖsK/BŖ›Ĩ æ7ĪĻū÷ƒh Zy{(EçRzŠ|¨$팞”ĶLÎO D“yŲ‰ģņظ™Š6SŲuT8t4Ę Ū`Â+ÍČō‘ģģ0Ørú´zŧœt§XŒĨ÷4,ŦÚwÂôUˆ99ņĄ°ŲÍåÜËVk]øl#” jsåëŋôåo]O̊Ļo ›w¨,ļûØôPUM˜ĖFK dfĖMdębB•”Ũ$íĶOۚÃ*Ë%„ŒS 2Ë LÍ)‹,U•‘i‘ą[2iŠāŪ€{rvņPí­p,ŠļO ‘I‚;TįmO ÁÉŦnt^‚ELÎ88˛tũ°ė8ņäË߄Į|ôaDāč…eYŲ5 ’‚’Īį§îYYŲč¨uāƒpEž3[!ėx*Ŋ´–׉đ€B¤55ÜÜ(ĶfOC°„@ÄĒÃŲ3˛^ķč˛U…šČĪ3ʤaŧ°õxrĖsɃ•AĀƒË§*G_5cžVŌ |ŗ\’÷HäŊ-VíŋåĩIģĘÆŨŪuØ÷æ SÖøÃxĸĒĮT†‘Dö&ŗz€1Q{œ‡õtŌlŗeL"ė3r‰Q¸ôŌ4‘„‰–…r'‚ŊcUiHĮ7āj#ôēNąJ s4Œyԟđy?įĘ}œkRaذzØĻĄh’§Š„Ā%Œ<5“æq–{Y$ÎĀæI˜:;˜ŌŦr‰™Ũ8y?Y!xņĘŗOŲ!ÆRˤĨ‹ŗ)šŲ5LãT&;ĐŽĖžû(O 8´Clŧpb•lž\ĻænVP>s; åæmˇi& 5mXŖ$†'Mģ˜¯ZÍ,BĨ”ˆS‰Ž#g"x)H ķÔíhÕÖPīøˇ°Û¯%’wƒ×‹o÷_†9î♤ޜsXųuŗTtRet"“Ęķ˛Bę'1ųÉyāÍŖ3ŋ€F!ļ’v0ĄŖÂÕēA€™œžy”9ˇË*„CCāĒ„8œŦ?™ĸUQh•L5ų‘ œ§lޘÉ$!R7æUÆRb& ŋŅÎLŦŦ¸ÅÄaĘCoj Hĩ‹™q;%Æč›3~ØˇIÕĖg˙đMį¯˙:››:Ü¸āAûŲÃdsrš„|šĖg&7Ī;GIį4h˛ë\܊)GS˛›—ĮqLãäė )e/Į 0œÍ˜QĘM!2‹Á™T)‡'dŌ˛o>vxølƟd \ÛĀ@ĄL3:Č c‚ųĢĒëÄËL§ZķeéĨĨđ˙žāî"kīô˧‹Ÿ; EëiE™‘™ŖEŠ2b 2ö’7!4},)…œÕ\g”‰Đ“ lŊxVHFU ,JžûlÔŦ†#õF˜Æ,Œ+Īō ÉŦčTÍ\&SĢ”č„ĒĘ}Áß~÷ÆŌ”āãŠĻŽSāDr͞*ųI¸ˆ’!MR'ˆgā›ļ—ÚĶŖ rs”3ë|ÕR¯žŧėæAüĸĒô0Ŗ‹^5¸ūY¸ŽJ7×V*ƒ'ÍTŒŧ…x˛’Ė%T•OšÍŠG¯Š|Ŧ~a$MМ$‡ W#j$‘Š7Y§‹LZQŒ^š%dšˆŌŧKãŌ{b ã"ãîAī ™Nė3ÛÜŧ9O“ĮĒŒ'ąmiNđbĒrz0Ëâų{ÚŲŲ ĩÁĶ3˛‹蒹˙VY˙>ŗ–M#9qīŦáŠú*JŅyQZôgÚŗQû C„|Λåā\/úĶ‘~ז0ļBĪŠôlŧđHæÉƒ¤ >Ę1ī5ʙ_ZŸÂŧbjĮöËŲķS†ųÍ<>2¨‚'ĄęËĢĮ1ą[ŨŽŊ&g*#īu ĻæQ ž āUFė.ņu¨ąŌŖü´4wlÜú~I%•ŧ ŋÜVöŽ‹G÷yŌíWx+ųamūØ ž¤…õu“ĀÍ7ą:˙“ˆČRe9=9“¸ŖJ cw‰cRq/ņų˙1õQ{vuxķŸĮĮwՙšŦ—ĘrNÜ ãYˆÕ<™HģŠ×"C‰aĖeÅ JíĀe TųŧŦ,ä–Ė’į­YSĮ .ęÚąŪ#T&’Ŧ=O gčŦ@ĖôįfÉÎŧņËĐŗômQõŸ6*„&Íz@JQ_Œ>ô>āÆķaģ3>ĨÆÃO2Ļ`I˜„Ē$Ņë b'›Å`”IŦ´ŧ.^)¤&âĻu@ƒÁmiĖv§T"d`3æEę!Á„ážpqëĒļâëÅū­sģ¤sÛnēBYŋI‹V;v,Û`;nhcü- ˙ú˛ĨĶh˒Á ĖŦ}õ?ĩÆ_÷Ā‹ârDLBŖ~ÄĸŠg+VŌāFäDˆQãƒ_đ0 Ęėã/¤R%lt;K%jŗ™‰eČVp(æ-G8PU ˛y9̈{š|D!Ā*„YåĨįÂBZNŒŖØŒ{>ÆĮA˜ÍI”ą[+ÄČÉX3§Â‘ąum×F€#pĘ8 {…@đT˛˜rÔcɂ^]v5B`Ŗ›ĸAMNĨRAĶtœæú¤ŠėúßÎãĪOäúđ7§˙æTHH™\‘MG܎™¤ĘÉæÔ¤ë˙Úí Æ?ĐDËHY>žä´JĐfŅV‡9 âCĘÁZ&3ƒSœ†ŅT^qPģĘڝ ]•ÃčÄŨķŲņĐ,PĘÂĨĩ†Į#w—Š7éį­&$!IĖŖŨŖ*ËŽNžžlåÍ|~ž ´áüŦQˈ"u4Ōfji—fÜA"ÚO˙éü¤‘;Á-¨Ąę“›F…IhFļ™I°IéUƒ\˛aé†z39‹¸O#ŗVą)‘—j}"˜ŠITõĖÄSåpTŗUĨEÍũ擜æįß5ōŅōE@uuduˆÃĩE\z5ŅîņąņÖBÕ-œmkidëûÜ û*|.%f –”ą(ôÁˏŊǎ0ĀXĸ3/ąeCēēƒ˙€w …˙€IDATûļĀ<ķ7ؑßh"\Į›;¨îĻ ÎuÚŸ{Ēĩ´…ę =•V´tÃl¸â÷ješdzzō}üúˆÍ<9PĖ’p>Îb0ĘĻÄ˂=P.s™7čM‹rv‡ŗkrĖȐŠsÕJ‘,dā4I ČH"1!^õĈ ­›1ÁôüÛĐ;:r?y„iÁâUg¤÷ĢDŗ›ŲwęŸíåqZÄIŅ6fŊyßd}Ī&ß-pBXbĖŽ|V­*ŗÜ1ĸ‘c_՟­5p^ÅØŪNûzŨjŨ…ÎK5Ü­ÎJā‰ĨžĶęNŽ’2ĮŽ`ōEÕ?`S¤)#›díĘ6“ĪÕRrī‡@ *ËĀėš`ĸrwP4­šĖ‰Ŋ44áJ-¸ŠG3asãϏ;ÁÔ@T˜¤áwƒŪéCOŗšûQā•ųGŽšGB˜„yų÷ŗ,k-͎ Ū¨ž,ÅôîFÕâb˙Á@Nė囤îÄö=rÕéZØVC×2֊ä,šÂ3Ū6ŪAéˇĶÖ>?wĄētÚfšBÖ›tā˙2ũßĮũ!ƒˆ¸ŧ…ŠĻ œIHÕūĶyjĪØŠíB}–2Ķ*z8dÕ,’&jaöÄNæ”@îLgæuAvĩËgƒęč0‡ž}5Ģd•ēīŠēú€‚¸×€>/g˙čŌĘÛĢęzZÔÜZ‚ŸOŪ4,ßxĪ4—ˇķžm÷•ØDŗEēŌF)3,åô;†ÚĻįÛür lĘL6›ÚēĄš@•Á0Ö. ŒúŸ~ûģīr†š°ģ7œ™Ã02æ<ĶYj9ŧ2ã,ĢÁLȸQ0ˆãШKS‚2Ä* ,šĻ€˛šĄ˜PŌĒę€2ˆ“.g˙xíŸÖHėŽģFÕP—ēúĨBā*F҉(X5Cgę´ũõÃHÃi^ŠXYFiLJ \MáM6*¨•1Č+˜Áš9ŧi6—,^´ēd&EtCθ†˜ˆiuŧĐt+‹ŧ<ûíøčAŸĸҁJ\ŧ—U ´öT΍gĄ:ūķ“U0úZ€§õōŧ+-ûii!9<ŋ#Aāž^ûÛJčâēö{‹3îūŋū{ y—˙Čęęđuq'¨Ô)P$îLuēęL98Á{ũ|2@ų\ū§@Ĩv}&Mhmŗe¯Į*˜M2\zĖ´ŽÖ‘•ęUPĘÁÄHGĖ„YOÕ']b¯Ė0§ļ[̚¸Xķ*:ŒBUt`æĶ¯žæÔøėˆM͏lFaZ÷ĘÔĖ H.ŗa™ĻŊ~uųŗœ6^úŽuũs {ņ ōēt>,šâ•ļ7Ũ–ÂŧmÁē*ÆžĘ!ˇ}¸{¨žŅ˛Æ‚-ę›;1ČĖ!ŽudķÂæa!–Áțņúw•8ûü‰įˇ–˜Z44ëTÜ(Å0-E[9Cį<'¨ŗš9[i9ƒsSKÚe˛ēŽ?E¤v†”lŒ#oĸ@˜_öswBq}ņjX Ļ+š´Ä­ž5/rB́@€k’ø/h”—ũVcwß-„3Ã~G͛`ķ‹ü1 \FeîĐŗM÷æ>sęë¤ŦژēčīMŋ”ŋéMw.ŲņË.~Ը崌[¯-˜p#]z…Q†:_Ũ,ą„Ÿ~÷âA.ĶąScA°I¨… ĻĘāĘ~3čŖĄå,eDš‘“ûā €(ΩɄqˆRĻ6rp"v.Ȓæ!N2JΞĒō0gķQŖS¤Ro^ŪĖ ;´ōIķß~HÆpq‡VČ]YāuĘÎåĢ=ĘØU əS%På– 13ąĪŠÆbö*å9¸Íųœ]^ާ6ŖôäëɌuė؁”Ū€+Á/­cÎæ Ā•ã4dßtÛ§'+ }k!üÛôOâdŸũl÷mļ_„UXÅ:~—ŋ­0lC‚ŋŋ–ôze—‹zK%siœķT§ŗkMųˆÜ‘‘ĮœũéĢĢiŸÔÖ™B\€üPܔ5CYõœSJķbƑũZ-ĢÛL„1ÜįœæÍņ´bâǏŅUFNÍRí×áb^¤§7“Īæm”ƒąÄЍĘ͉ᔠ;„Á sõD;Ũ•ČŋÁK6ļÚ=Ö?öÍā(›ûåŗ[@;­Å°u˛ VÖ wå•ętkŦŊņ-úšžuŊvˇ´ˆ•VFVAu1ųB‚{äŦmɉŲũĄ /ŽĘ~ĐĨ•w%¨™ē/h!‡›eÕAŲļŒ\Âܚ”sH„É Ņ * Wãļ„€HääUÁ™T™2|2ŋx=Ž8ĸ‡Hßیz<œķq,ËvŨ8aÔv&ĩHJ@ØYÁĮí°û*1v ˇÛÃ˙š€­ˆŧ†žŊųå|YovÅī6đ2˜2/ąqKpģkā×?ŠÆÆÕ;˛$ ē˛Ą;ÁǤ– qÃ/^]qŧzu°ēÁŒ—mEā$įLŦ5 'AH¤aŗĘōf R2ˆHfÜBÕމC!"p UĒ´ÔūB{ųqÕû䴁72i”zĻ!̃0 43GBō@]ûõWUęÄ>hĨÁoę›ŧņ÷>Ę;#äû%Ÿĩ›؇goz›úüšœų.ÁZ<u Ũ>ũ:_ũ?1+÷>-Dŗ ŌˇVŨk÷f}UîYķh™K‚•¨|Ū´Đį\ĢĘ5Ŧ¸ļ‚E[â“Ô­TLį‰8 ;Áœį$•Ē6˜XË ‹MZ=ŋyuyå˛üôŅҁāO_5Æy;09ČŦl›ˇ‰ŦZęȤŠė¨Į_Ųˇ0í§%hīīaLwŌŗ7!ôöųMšiŸ z[wڅûŋԚYn&-›+2°¨ÁĀėŨ“7–ųĐîM Ũ‹˙íWûéA b°Į˜<ĘÂjNПd‘IXĘn€Č\’ÍI=s—`uGģõË;ǃâûß? rØėxxÜģ(t”š,ŠŲÉ"@Æ‡$Ę€9Uį×vķéGö/ŏ[pņÜUOųa]rh[ß|ķmš/_ûˆõŸÛ'~č˛m˜ˆˇΌ\D?ÖdÖ—CēybF @Ķ8~’_~yvzrS#tŽģ™oēÅ8åpÄÂĐR($bgĄ¨jiî1p\ÔĮp×dVeĒlúėۊS—?—OWĖŲ—“C/žõ§Q3r̤OW{ĐĄåŗg üčTn/ęę}“—ū¨đŪ° °ęiŋG>ģĮëlŽĮë´ČŊ(uĪņwIã‚SoūˇqvņŅÖ}˜áyĢ’ŲâÍŗ4õZMŽž˙Wāäņ7Ã'>j,[XŌ?ɚíI&æFķcĀę¨R•XwöƒiĸædĨG<˛äįņ{δ{Ü>îûA8XNK…æ\ŨHüf1_!uY+ŒĖeķH>|°ŦŖēÖčW‹ņŖ#Ø•ūũ ģĘ7yƒžų¸­bžîo3ō}ŪvĀ—aÜx'›õ¸KĀĶW_–ŠOÅ8ëáŋŧøŽ÷?ęfB´QrF$Ee/ ë*;ÄîBLnU*gūRũú<ą~o:Õ(N.z]j=ũyluX6Ŧ9Œ”=ū( ĩPš/–WSÕC4îFdWß??šfåQ¸ËôįĒl0N{ęē;ü}*Vf„õ{ץ^ĶĩšųŋéŪh?æû>Į—ƒ`TgGj=¸Ęm$ZŋátÎ>éwZY˙“Ē8ūëĒđÜ'ßÜ|ņ(Đ1úsĸT)§ …¸„ …šģÕu(1šžš9›KŧĄĄ‹˜w¸•§ö õņäixCîXŧÔŊ–‰øæ= [y3 w‘i!ž %ģøž ĮA6ce-Zķũų¯œG;yuņ‹ü6Jm™2vqa“v­NŊŗÂ´Ú+T¯íLëPėuwDccL/ā…2ŽEãôīŋmüw•=ö§OČæÕų÷ƒįÕYė„ŲÅQFŗīūõ$ę|0 Ē{Ōánbi‘““™[*)øķWE‘?›Â$ōɧ€O”:CĶ=†O?<Ǟ×Yú‹Ō‹,lĒĄČzŠ^1ŽB&‹U7:ģŦâŦī7S Öoũ9œ~Ŧ§Ø*És7ūl möP“{đ´U#“qo_´˙đ–6ŋsÃ^FŊu]Ũo<‘9däŽŧNŦÉķo_üÍ˙đu> Ņč~\øũĢ?L{Ŗ˜å‡Ŋ¤…•ŲĄQcpÕųŧ‡–×ĸJšĒū+´:ÕÔ>ėu[~nķô2’}Đ 1´zĩ´ĩJ^Xķܴɘ_d<}°¨ŽŅаQŸžûÍ`Ōœ<í­Iūļ+āĮG´÷î;_¯¨ņžŲũėŠË•XPß=G’æ{o_¤2ßstKĘš"œK}r˙T6ūâP‡G[įäĢN?Ö§lđۗ­_H+|ĐXčTMhĪoÆggt9ų‡NW¤5ĐnOčÃf5Rģ>˙&ŸåŲĢ1\ŧÃ7ĨÅ6s֐v<Đ8<8ę>ȸŲŨ˜v]Ÿ˜Wu5FÂ7ä>>ÕˇĒâÄ+\Ĩ72áų'Ÿö7H>íŲAްZ-<{M'ĒmēqGŅÅõN´h$û:]4ßüĩ?"ms_īüąB.2…Øk“męöĘēū–ų×˙"ŋøŧ}R7Ö"ō“S*¯ÎžŊOĄhŨ´/œTĮ™đ¤]´BČéԝÆōõ3á†Ķ# ĖYÆ,k+ËĸŪfƒ/7‡1ŦšŒËŧļŸēPsÃėúU ŊG}Ŧqk-mûs„ũxļY:Æ}éЅ¯z“løoüÕĀD¨Ûáė.o_ˇuæÖRn…‚ė`ÕßÂhŅ!KīLÍi–CŠWÃiä Á¯Ēãŋë3]×°ĻEP‘4pđäoŠĘŽËŲy^ĻÉĩ4CĢĮY Î)@YÆKl)‰­ßĘ7k7C‰ĀuÎ s VļzĻėēK‡;™ÎŽf‚SîŦDŗ]Esũ=Ū;Ē­eį÷=ōæCöōMO•ŗ;˛ēņe`w¨nėöDT;ëę3uûHÃAÉÃaĘĢŦĘ]âīĢ]ģËėĝƒ›?€nˇú܈jŖĨbPwr#8 Ķ—7Ž8$ÃËōg§­*ˇöj@ëÄĘsO,šPšĢ_&âëWŨ6Ķ†•‹Ė‰ƒfLË?'ržFbĻāqŸiėΚ.ûQgÖ MįŖysđāøxĩG|ĩ6j8úžœÎ?X§ĪíØĪF.\jČ#O؍|Ēmˇ–0lŗęÄĻg Ję*‘ gj į-ˆ\„†E¯œ3 ¨JŠė‚Ų°܍‰@Ļaé\*‚Ģe ¨2“‘+ÂR¸Š iúķ­ēÍØîL‘Ž”./ū]oü}ŋŋhGļÂÔÅ-"B~´™Ãp7fąÕsÍÁä¨[NĻÄp'4HÜfLFäŠoI‚šŦ[y1Íũøōg˛-g. ĪKĨė'0ÔūHĀžˇn(ŋüĨ=¤&KįæÃYS؈a°d­&á2%V2†ô8'HŸ.Ŧk>lĩ˜n)†y†’Ė:MŋéOŦk2 !)Ŧˆ’ąMĻŨČiLABDEbVé¤AHęŒ@Ļĸ&"Õ,xåSĨ.‘(˜„Č " äž*ËAD  Pbĸ Ōę5Jn J_ũŊ}đqs2 N ß˙îŗO™ˆÕYIn‡ŨėT´6ƒ0/z^€äŽĒƒģÁYÜĖ‚VAˆhúėš7ú9œÉ­Ž‘Ģo™Ÿ˙Ū:ÖŖÜ‘Œi75Œ6˙اŧ›äļ˙Î÷, ęŋļåŗá˜lhĶRz7߲Xé1Î3¯¤‰a*Ģ&c öĪĄ]O•w*ģbØÚڌa@1L› Ęâ`šsB„gŌ¨0>…3ĻGD^X™ĶŒ[!JŒÆ(Ü´@L≈•2SĐIU&eT‡š2ÚÉBpķ) NJ*‡ŠeęAHU)R/aÜSŗË/ŠŖ':-9‰_ũįëĶëChFBĻL¨SĻ,‘đˆŖ˜Ô…ÁP3'Wq÷Šu‚WL^ƒŲėŲ9~ųĐäÂæĘnĖĸFDĩĒ$$đél Ū{،ZĒ^d9€Ü_ūnÎãŪÉŠˆ6MelWÅ˙sä™6büˇûT|ō„ØÅ`ęupgBWrĐ\Ėܘ’›Cl,(Ė›Uáæ(ĐUˇCrŲUgO:ĒÂČK.éĖĢæÚ×Q "ķ<¸ V#ÄĻāĘĐ=,_…`•„ĶKO]ué°%ž¨;~’=?š‰Æ0åŧĢFœUsšÅ0D›‚Lq3 ŸųYæŌŋĩ˜ŊŌ¯{E‰Öø›d¸ō#™q1 ĐØŲ%PITCšäŗ­ˆä˜ēų  U V(X:>úâw>ú‡ė'Ģe‚k˛<ŅÂK-Ķé7ŋ×öQ+Wwe7G\7úí‹`üøfBĢæZƒ‚l#M<ûsŌ?ĨÜDû ­`YfÛīŗíÉáUâ ĒĚfsŠ@ŽĄn‚##ŗĖŦŽÁŌĘ|ž˛Tū€Ę4™ōđÔt GFŋJ‡ˆ,jÜë ŦŽĩ“æ-ˇŅ™há"&báŠ6Ķ„AQˆ g6žx>}úM‘7ũ›Ëi¯EÎ_áøīš0uj CšĮŽ9ÁŨ˜û<1pģLmąĘœŗ<\{D˜´ķ›k˙.Ė…Č•–.˛HNž˜Ë$ŽYbAd51 Á L$žtú‘‚áN¤ÄöJ%ÖßcŅ@Ū*(t':z ËV Û2­kzė o›Ģč֟õīũuîƒČ{íöËaiį1{FtšS]ãŦŒeŲž§ÖN ¯âĘãŗŧĻ˙k}úņ‘$ģ< ˙ķSdŸ2ŧJ?<&€Č]™”Ų“„PUN2Lˆ+‹@$Oæš4ĩ)bŽč:Ÿģ)zūõŗîįŗ ĻEÕŅ—%€1ĖĒFrn˜5ËJĮ-éņ¨{M(1;Ī“‹œëĩIūÍĨ‘TÄĄ ˜Ā,ųĀ{ °y†¤1NōãiēÔ§ęšÚVÍZsĘ& $s“āŪ*K4­ã•š!tIÍYœXSī” äHĨļáZ `5!!xA$ŅŧîųÂŧa,ôE¸īˇ"ֈšgž—oŪK~|pr{÷5tëĪ5=§ ƒų‚Ž/š7ĐŌ °ŧqaš3Ę yđpķ‡âķĪŧj6"€0šûÃŪ˛5W­.ÖŲŅžÁbŨ[Ū f …™ÖáÆFâ8Mƒîŋ}*n$lŽIAĖb5€Āž/˙C/Zb2œJ ĸā×ß#ūļËÚeSq23ƒVŪ0#T%Úɘ'SĒ@ŊnŅeĸŖō&0ĻAŽåĖg Ŗ|ĸŪˇ*M@n’ųM Î‚“˛{ČĶ4HČėÃâĀGQÕe@ †m.Õ)ķfz0mĻÉQAŲ•š (*oĩgÍq[ĖT:9ˇ¤Nø;6ŽPQ4PZ É+u7ÉČÍy_]*{}Ķōˇ‡wõ›ÜēoG,ÄŽm?Ч%šĪ_t?&vŠ#oŦ]¤¸Œ†\Ú` ‹zˋŸĢ-š2•Žša&,Y§[!€!6Ō!ˉŒHízpõô´‹Ä‹ū™5Ļú”ŗŦ÷IĻĮ€p2f!LĄIZ”’€LÁÎ0ˆ ĖÜ ĐÜY50˜F ¸ˆĨJ<9ČP–†NI”Đp„I˛” Üs%ļTqĀ•ˇŒäĻ žŠõ9O]ĩU][•ÜĢk›i† $D3h[+įېĀ4ȸŠŠŖĨR˙&uЈqÖqŸJ+ Z¸N†Yl˙¯õBná™Ėß"å>øķŪ|Á;ū˜UņŽģ'A>5;ĸŗßĖ~vBV÷ĀtŸˇkĪԆÅj×ãŗGYâ´ŗ)˜ā>āĄķJn^yüéÔâŖéEķĶPƸ°ËÕÁL>ÍĨ÷$įe;7†;ą‹xˆXIˇ ƒôbžiaM֕ik8ŪˇĢnē+#°mYéܝXH‹7UfņÄljęuY Ŧ2ZXmĻ‚ ŗ`Ub.+o¸‚`Ęâh2.-ŅąĶ2„=lލۧŠÃjíī–įß~ $Ŧ2Ŗxųė0ãT}w&ŋėÁ-‚ĸ§Ėo#†nZIWė|ąéú c̃Û흝wõÖÁÍl—ÚtágßöãQ˙xé^ZĄ0˜jŠtĪ”ö՚ŊÖ~ÂFŌŖĶÖØ5}•Íj%Xø!€ėâō&Ŧūšs äfkųĖ--#Gaē'_ā.¸Ëę5Ū^Ø÷ ˇĒđíņŲûå¨Mž~NO.ƒWnÓÛ:śž‡-ŲŽĢ™sy^ūėÉ1<_–2˙ÃHŠN´ãņĨcTN÷~aÛđÛiŨåģ˜Ėnüä᚜ɝ.¯{҈sVĻ,Đņ§Ū¸ņØ9•'ˇb´LW/nč3%Z˜ĪøjXTá u§™â/Ŋ6^d‹Qz•Ū‚x¯?ėÆxTÃΕ~āĻú‡īŅ?ėŽí™Ųâ,3X§_ļ'_z;|z0Ø`Įw8EâAöøq]wžjŽé5˜]™n™ÜVíĪ˙"aĮŋ9éŋãx;M€ā?fÜņÃjUķ‹gö¨šĮ(ģ‡IžÍ ĩĨ‹ŪėÍe:eëôŌxCi$€ˆ“eöøaą ^jĪ^ĩ‹ãF;ܑ‘ú— [xFúúĢ7?Đæf\“ĩEĶւũˆĢˇi<Ũ>ėŽWÎ?ūčũ<ū6jō$‚8kØá'įåWĪw[~;Pfø˜ëĻ‹ÛåÕ÷/ĪËŋk´–ÆúåĀ÷(Jūg Û &w€ûû6îd†ô4ûi”*­ĘŲuqĐyôķŨž}{Ÿīo˜Õž[Ę„ĒÃ'ųÁËoũķęŖ%Ū/Œ”ŖŗßŨ<} Jäæõcpņ<}Äŗ¯G† &îî Ąw˙´a;^Ŗģd2oPŋö8™°īāûßĻ[ĶģÍŨÔ.ËĻ}¸×ˇ4¯ÆēīŖ6ĮP´VÎOGŠēB§3xĨ[—ĪŸŊđĻēi*¸Ŋú:ū,}s9œŋau˙ŌHÛ=ãÉ­÷ķ­­~KžĪt÷7Ņ‹7pĮŠģ${ĸ0ŸžöųÁéí‡ę%Û7 Ģ™5úŊ+9|9ŒÜ{~ļĒĮ ‡Û¤|ôđ¸Žđ]'•ZēĻĨ™OF+“/ų_0![ßũë^(tĪĮøōûú;č|÷DVw0›ū᷆æÃm[žûū9ŋIŨ’ũęMãNœi7/ËŧŌrB@kpŗ!ŊŌÅ?ËĶãĘôÕ7¯ž§ņ–ĩXgcėSÔ˙r` ŗteÂ|Ãû.8ΝEÍvīŨA|wĀ‹į“ęøŖūí7Q]q¯ąöŸvÜ ,͓hívãú‰¸5š‹ jÕų˙õ^ūÕ1§Z÷$80<3žē˜öpõ’7ÆonlëŋD|ÛÂ3 Û4Ãī4IÔŅn÷Zåxīā˙ë>={9;9=Üs&„%ĒŨn‘ÁzYJāĪã‡zķõ•Uųņåty ß|[|ø7 tį6š ãīËVûŋûĮé&Ãh˙Dũ›ūh°Í7ē\Oēß~ŋuę6o#ZąĨwܨ÷š}ųøųõwŲÉGÛsYŪ/?āĢŽ\u‹p"jDŧß';Ėįß~1 ÍĪíyZLb8.}Ö* Z­‡éÕīŸß ­ų¨ũā õmZ"šUKmtšzyžÎmžŲ‘ˇp->û>˙MųŨ§¯ėāÁōŗØy-Ú ĖĢčŽĮvÆŅæ/GJ­_Ôį´zyqtđa(ŗ˜-kˆđėģQîĨųÁáįW/˙õ×K”¤ĀyŒrļõM[Æԋ|ēė|¯3+6D˛wŅ/ˇo}í@ģ'W?­üæ›ôĄ4čą<žöíŧŨw­×Áˇ%("‚—S/Ûŗîã^~ųåÔ:„0ēųzdĮĮą{Bŧė>d“‹Ŧ+ĄŲî}@ՋīŽsĩŊ1ß?"ŧŖū˙C`›on…@î[ļ@Įåīúīm:đ^I›/TÆm!r‰EĀB äâ>88ÍiãÄęrŧĩŦ¸ķšk 0ķØôtõčQ>y^zú§›˙o$UŗŊĐ#_|wÎuvčÔø÷cÓŖz‡ÆEtĐ"6hųãíĻø§ۖ /6ŋ۞Ëīĩ ~Ė5zķˆz9mļ>lŦŧ=ė|ë%zná8SOΧ™Gŋš Ā ]ūęú¨‰ĸ(ĩ¨´ŽLKÅõYWޟKĢ،Öüy‡ZIQģ×ë "˙SuĨŋâˇÍ7ŗ|gĀŨG,šÎmųqųģÎgwđŨGmũÚˇí€é5úŪęŦUš Īō˙ģįz‹oÜšŊ`ö„æĪZöč4–ŋ›čĸōīEÕČCBÕëfŧđZ˛MCĶĶņĮĮĖÄĄs2û~ļAûR.vÛT÷ŖķŅí8ĮYļ/ víęÅËŲ´|oWŠŪíëˇ~˜s…6ūŨ:„•SÚūæˇ%ēöôJöē?ų EwĪtûĄë#$âŪ8ž{5ųgŋ¨O\u֞}p|8(8ÖhFÎW¯Đî@z ˜ûŨōÛĪģ;ā}3ú qBmķM’Mķƒolá Éq)æ¯åū™ŽŒÛKAæÍēĀŊĨũˇwĢž9ģa—ÜmĘfoÍ ö‰LM kvS3?Iů¯ @5˙ęjrq•÷R1˜­pdô//%Aė0´?jīúV üŸ"ŧiqģ.U-Đԟ\ĩŽ'<:l•­š`"6gV+¨'ĩkE ļÍD„Įoā™Ã* 7Ĩu3Š<ģAĖōĘD@nUŽAÔ}Nä`-ûŽj?”)Kg )Œ jL0ȲÕ%ˆv*šÕĩh–ÍuöĄŲ\„]ܨÃˇ/ĒAæBfØ#,FZwwŋ}ķÆđ‹´ĩWGW;œ‚>H”ëÕ˙ķôՔûōŲgŸ 2ĩĢ֑Ŧ*å•äĪŠųøAË€ČŖĮß~˙Ēåîâ wú„7ĸæ6=̊ęĨO"“'A˛‡(RiÔW°;:H§0ŽI p3{ŲK˙?yoē$ɑ¤‰}Ēj~ĝG@…Ģ{€îŪ™a“Ã%š"¤Č.Ÿ‹/Äā IáČrgwfvįęéntã( ÎŧâŽp7UåđȌĖĘ*TĄPĩ*@V„‡]nĻĻĻ—ŠÂ•–ÍJ„rÉBĨ1;“"DQ“0œĻÜcČ l†(0ļŌCęę1íTã´)b05M’ÚbŦŦŠÛ ^Ģ˜× åéĮ—_XX‡Øp”WOaãß:Ņ΁‚;ĶÁīm }œ†ÁŨ=Jē>j cg¯[ģŌēO‹}NC'Sf€Üz?ûnxōÉĢÎCø“…&žiœgôÍô¤McOöéŠQW‹’ÃáQĪN\š§QÕ᝘…p”X?'S_&AfĶ›!Ų3Ÿ:™x——Ä2¤JLBa8ī%TNr⎃ °~ræI˒˛¨NîĮčŅhæg IîNÄPg˛H‰Xá\Yˆ­4NŨ͈ėnÄŎOŒēĻ  BCCČÅ5 š1‘ÜČŨHĖHV›ŌŊŠäĮP_åŨ†ƒĸ Ãˇ(čJę Q¯“EO˙ų7IƒŒŗšœėEMë¸đˑGØŨAP7°ƒķ[gß|qck1jāĻa¯Ŗûm™,éã) ’0 %ĨhǜĪB\€(!ŒÁ’ŌiÂQĶ…‘ĪĸS×&SB˙dŠÜäY‹á­rPR:õ\•Št™ &áB‡G°¨”õ}eĀ͞ĐAbæ.|¨ĪhoîŌw7õ4œõBÆKq$Ĩ/ĐIĸŗ¤r‘eÄ I|Î`#6w rō_NÛûŽĮN”{*AdKo‡ĀᆔÆ^jŦJGe"ˆFöŽ­ŖNĖîl ĘĸIˆEéd fʧŊe(ûHzŽ”‘ĖŸú1'Ļn×?üSīÆÃEą,LLPÍīŸ|ũĮũęŪ†f^$ÂtÅ鞎ö"lŨ °_Í÷sāšešx&’mĸĐÂ;ëʇUŸTwūՑ”É,DÁbØaFnJNÁÍB€ŗ.Ô^Fä°ŠąæÆ‹(\O ’O÷ôŪÖņĸsd"Ã˛c(â^karbĐa^l ×ũ2*Ņ"tĻāmáK̈́Kt‡ˆÅC-‡_š’‚ŸŨæĶŽÅā…ļĩ›-„Y)u'Nŧ,‘é ėŌ܉3OíŠzpub>Û7I\•‚+8h‰v°…A)sgķĨ—_kđ?ļ?HĸĮ"dC_L“ÍX’đô?ĩŠ3Já,ŒhY’MNzˆ0†+ I@ĻrDāEt_u—ūŧŽ6 ,­üĒ„oáîN÷|Ë?X8ŲĘŋšņ'Ŗ‹!@W,ņŠšŠŲ ЂoŦiĶÁÛ1Ž.Đ&m›ŗ)ņUëææŦ 7B ŌÁfæbîĨą-ŦāÄŨôˇKŊ}|ûO…ÄÁíéûFΊŽ¨O#r`)0!LÕČPfâ# 2Ww'‰,ΘÛbéIP›‡rÚ‹čŒ‰úGҍGÚgœqa}(J–įŋ Ō"ÍIOä°Û|'ÄüäÛÉlރgŗD ÄH{Ĩå~ú°s@†”rŽLŅŧWĄJęĸæqO¸%lžĖƒÃĖ0%bÜĢxfD3 RƒÔ9/jtZ!•7¨H0_eršŽeĩn‰Î?­—ü9°…g6Ŧ㞯I>lČę'ŌכŽęŊHX§=ΐÆx/Ü*¯įĀüa*Ų_ũi ŠŪĻ,ĒĢŒÎPeq)9¨4f"'‚-#I@„—š›{á,€Ē%æÅXŌāL%Ō!ūdr˜Z'ap–ē3™>ú“ 6ÉG%'åRž?ŧõŒpãÁI˜-ž$ÃŲ ž =>ÅīŋO%aŒŗ„3Į‘ß"š-÷ŗ0´žNc­‘AÄÍCÖæ„æČ°ĸGíĸ Ą] °”N%¤jLž—™ [Š™‡Āæ0sbf!sO8‚ Q™(Mā"jR:ÁIXÜ\æfAĖÁ9Øuž¨¸ šoÃļøŗR_TúŲä,üÁp)b_ōũ’‘¸Åi[î?U¤gŽ˙0oûÕ6PeįŠ:؊üp™ŅĀĢ<Ē`ÄŌúÕĶeüRųäķā1F'a…¤ú‹XĒũ5ņŊp÷nDjŅŋųëĮ{ą/Y‹Oĸ§œûD;fŗ$Iü˜r×ŗ$õĸš-•S#v¨ˆØ?#[xA 䘌ö§zj{­qéi;9åĀ=%s;ķ9đhL>Ĩ')،]uļgIʅŌØŌXÄC)‹DŌ’ÕĨQ‹Ō6ˆ–ØsļcŒÖ ‚ØK´…ERAˆ‚¸ą›„”ŖĒƒbė˛pIįīoî7ŲÎëĀ "Ãk„uĪáÉŖų_ÜæÎ–Sšû2‘írÛ°3Á…‡5̞R  ƒr5ã†Ķ;öũĮÂ&™Owz’ôÄ[Ü2g8&ņNoĩÆŗVœXĖúâ*GĘ;8æ^o1t6H7 rōŖ h)nš ūĮzU._°įÃkÃĒ—o؁ī‡üA5°ÂaČđģ÷=^xØ0UYU,ę=:žķlŅųîûvXTFUĒĩøæãūáUŠ TÚāĶ™y;¯,}ĩ™ëöëŒ*įzÎķ*WāŊ`ô~•FĀh“ū˛J.įŽč ’;“›ŗ|ÉpÂpwv›ļŒĖ)*X&æˇD“÷ŠR{Į‰ŒÔ6ĸ&žņģ 34=ŨŒNlëmhgLÚ"CÕå@™ĀŊõŅŦcÃåøoī5ä8ā‹§ŗe˙~ēĄ°ė ŧĶ{T~ŅŨö@yÉÁøģđgûT́Ā'ËäŪŊĒP{-A‹4ī‹/wú§ Ī™Ūm?Įˇ›š ÂŧĖo´öīĻMFÆæģĨ›āņŌ¨J¨ÁŊs;ž~đ¯öũ7ŋ™ĀÚŨéôoĻå~&Ü% LųέōčäGõp|c°•“ų§č4üB@0}xRĀŠlrŊøūĢá•ZČuŅ—öƒKˆÖÍ÷ß;œūÕߍėŠ~5[ž˙…øÚyÅ%pvĒ­P†ŖĨáÅ}áŪ>Øf–ßÔ(~(lđƒ§¨cĮÛœŨîkíŋēĪ™ˆíŲŋúĶ;éŋ<^ë.cqôÍã,Y`˲2žŅķéûRN&oí¤ŋŧí Ųyđä~ÎÆ[ŒĪÁ¯r3ãŊ|Ųųô×7žū—¯Ŋō–5?ųf:L0GœÁØĻ­Öl§›Ü;͡Üdųöģƒō’ē-ˇb؈māíkžM?ÄCŲJsg>Žųũ?é<øíЙ@p§oĪō$k—JldÅ‹ŅҎ÷zoņ1ō°Uę ãÂ?|á-Š )?ŋnĮ2!"ĄŊôĄ~úëŲ×ŋ=QĀÁąŒiŲoér^¸HuķŽ íģÂzĖ­Ë= Ū)ØŌĶôև1‰E¯åvįÎÚPųŖ’ Ü>îüüdøWĪūÛÃķōč)÷ĻËáßęŋšÍ띭8˜ū2¸ÆÕ°wļäÍųķĶ;ũ”ˆ}<.Ë͞˙c¯_íĸÅ7g“ũ˙îķŲßũŨc5Ÿq|<ȈI˙f>ÕĒÚÖrŦĶųqųÆ`Ëo{Į Ąˇ ÄķÂJ’áüĮėu…ŌJPûūđŦ}S~~üÍéŋíbæŨ/:÷÷yļņfâÄŊôk-ūĢ fįäÍäíF4w‡e÷R‘åbīõ*2vÃ*éz7ãĶŪ¯ßģEũh *ßÍ:=b;ĖĪ6~¤ō6ŸĄxÃ|ĐÄŗ— öS‹ķŪ ™č^~-ÅėĢ„5§EŌévʛķėé?Ėėɗ¸ÛÂŲ„ĩĐBĨÁNË+“MŊ;qĐŪ5íM,U‹“ũöųzũkÖԉė‰đÉ|†˙ôÕīGNē,ĄuēÁ*jšį"ËáëĶOļđĖ~h&ˇ7 DÆķNZ&~6õåÃ``NxžļįX(OÂ^ûĒļŪ8h[ö˜ôm~Š•÷Ī [öZI‘^đk|M.„[-Ü N€S"ŸuŋšÄ˜ū9õ’e‹šuŧ‘ŠzcīS| Øö×xt†dŗIš'#ũŅå€U˙a} ŒĨÃE÷f¯LēiKڜ6/€;É}įæģA¤OŠ8ŗl˙Ƀ×Íkî–+huƒ ­6Īŋ{đ-:L ę†6áŧŦŒŗá*Qøģ#W^ī–ŧI„~÷`ŋu žôžyĄ ÁëÍŲ¨´Xև¸|ø÷ôÛY2Ž.šÄÅp3ß$\IJ|Įņ̆wÆo¸>Z:ãĶŗ•?õËÂK×%÷dļbŅŊ_Ū{üūãGų˜ģī7Ŋ•ÜÆ_ŸÜhŊ[ũR¸ˆg/w-âĮ wÉ(â(žQŋuņ5_v¸ômŲŗ¨™WwŦl¯įũaÚëĮė P[ŗũ$t6÷.čĒļŪxįļS™ĩ:‰ÜeēÍŽŽiúÃÂs; Y"Dā4˙ŲgũüéīĪ$oáY#jŠĩŪëÜyģ-}ׇ­xŽWlŦĻWW‡4zmäĪA\8{ĄŽFDÎëī\ÉįTŪņŗ¸­Â¤ßŖg÷ččŲû<™Î{u_ęŦŋ([ū#\Ŧ{ķpîÜ<ŨhvI`ĪÚĻįī¯]Ÿâ•ÃĢiŸf qKî?_1õęx ČÉŖqĀŨŠŪí6Ū“ãi~ŧLæ=ŦĻE‰4 Û;wĸė„ žU“âBęˆFjĀ‚``°xšô>"Â*4œ)šl.ÄŽŖtĄŅä5"vmÃÕËžŊœĢ8\™pĪķO€önˇ :ž"äŋˆĻ›<-:D€j.)éŖOîIÚO¨+……'šŧyÆåĮĄĻ zĻå|ėS7ה%ŖųI”8.—EĮ2*范#‹;05 ØKJ9–‘ Â‰É„°" 33ĖĖJ13ÁĖyM{ž/æûŠŦã*;Ws"W„FûeËü\{ė ˜ˆ %>‡ĮØÄŠģHĢ7…6‡m: SYĻ H@>Ÿ|¨S†“÷i@“¤­Œ œķļBĪdūŨƒ#9%Ī"…Žē`A-:bAŊąINNdfi8áū¤4æ–DGۄ-„”pĘŒų>ąøB=IŝMČÛ`‹KqÉ2”„-ņŌBÆ,psæMd:‡iĩvĸÄͨųĖķ8ʒĖABų=ĩ‡ūG‘âčöĒŽĖtÚ>Ėëv„-ü~3°ąžžjhōgų§÷ctwŖļ@`BcàT‹Kí‹>-CČĄąŒÚElËÍĄF„8 %‡1ƒā3Žž÷¤ˆæč´û§fÖą8gÉ[Ĩy\Ȉō0žŨą)f÷ħ‹Ŋlč1úĮtÔ9QÂs†ˆ9'f<€ģ'îînEęIBNs&°-ˆŋúįÛēøúÅs c`øøąßÉiAB-€ÉáÎ`öĄṔ)‘‘éŦCQ%MT%X ¨q"j➰)ąY•‡ÎTAŨœ„V ­•ž§æi›đÍᓤĄŋ°ČD7,†S™ö¸IeWBÁ6>Ķ^~ũw‹eW k¯6¯t ōíÜĀ›‰–œĢ“ĮčBÎdę bá‰ēOrqĀ՝(˛ÄB‰Ev‹įĻeˆgqNžäö˜Āgc/īû˜'4UbCęDĶ$p"Cˇ–ģnTž%\"đŲ~\–°É %Ÿrûņ7úq9đ€Â+K†öJv.Gâv›ÎÚŗŊî­2:åĖJNŒ‰’=D&ö2ié¤]Ú^æ…õĮ ’ŧ7´4ZNdpĘÜJį<Į”ĩtpP6H"ĶhĖÕņpųÁal2jŸ= ‡ß~'ŋüD‘¨ŒÃĮ§_üb@\፠Æ2ŠB÷°ĄĨĒ^­íeĒ)Í2—ņōøöØŠŽ ķK‰ę—Á6žîy.÷e`ˇĖé ŠÃVŽ4pu!‚“Ē2S#'+q8˜É I<Š”ÁLKķŌ¨;† ų›ōߏNŋ˙üÎâķR­7Ą‘÷†nĀSēÍöáf$Î$’Û2™¸‹äEôŦ,Mr9$ĩ3@:‹ĄS"‡ l*é(đ¤7ƒPÔNŒũŪĸíeėčœAš°ÎõųSNˆÜZĮgũũˆ‡Híąôä+=ø|/ĖØ;ŠĮß~~õsézŒÎÄlJ‚RÁ‰ˆØLBBäsįęđ1%†+’úVÂv\…8¨ŽĶW­Ą›9ŗŠ'U”|wšAŧ deĮŒÂjĩde#Ül!m~?Ë;ü2ģĶ.ÜØÆÂëH†ĢqīØ3Ē„u2 Ģ^ęrWv°ŖGģadĮ_˝ŸŸėŨŊ\ę@PæPÁŊˆŒĶ”Õ]+•Ŋ­’FØ6…ÁI(Ē2…ņ !ÂRĄĖ§e§\v‰ °™š'gbæ—ļ—ļX Oy&lS9ūēŨXœvĘČĮŲōŲĶoq0폄ôĖ@˙üėHz(˜Jvķˆ4åŦ4Û/Ã>ŸhúÂ.đv ž÷œM=#wœŗ$ pâ…ySšēĩcŠÔy`Ÿįˆė,A͐x,ÚLV/Kc6,ÉŨ‚/LBp‹e`3y­T0DŽÄįÎv !(¸ųSŊô/gß|1:ēŖ4]üŧÁĖËÚ_k]Æ6æSŨoÜûö˙ÍíüøŲđ‹ūē^ŖmĒTųÚJ3’œƒ*.ks}Ś*‡›õE@́&c$FæâJd… š™pgŠ r|tx{2>Đ{åƒ~˙Ã4÷HG§'_dHRŠC“tc_Ūã9“ČŠËIÛĘ~âQC"æ8™wXŨu€e˜¸JBKč¤ÃšŖw¤bË8˜öŌXD‚“)į!đŗōF>,ö’S ŌY¨–žįOqsžt•ĖTxfƒ$Í1Mo€:õ˜1H|‰ŌR™HG-€RķŽ—ŪfqMĸŅ(UĻ%áRC 7„„ësyƒg¯–¤s˙^ŋƋ•¯Ī÷†¨u'?ũũßīuW*_épö24ęWāláyÅd[])ž6Ö:9ˇQ›A”Ŋ´ÜJJõđŪ˛›ôz¨|–ßÚvÆūņôW?Ë͉Ē$T!hX nRs‡ ÔKm´Ô(‰æF yĻäEA-×^šq°R<öŲÎŦīŖųŒ„Æč/Ũ?›Š"ėķöĖÚ]вgôČz§Ĩ9f8*’4 JuŌrŪ*Ëŧ}¤°žZœŦāl†ž ‰°ŋcOŨ$„3aôé{>DgA~ã_×ûvKOûnX?Z­ÉÜ)Ī><˜:pTiËVŋíđ,<˙ŪhåvW[€Rg€ä’Åi‘ļˆ€ũ›“Ķ}"ūĀ<[ĄėŠU¨‚€Ķ&81Ž5Ô ˛Zk˛îāėģÃ[ėāiģĩBæŠn]ØØô<ėŲŨ˙đƟmÕȎš;ÃÚ_¸KØũ <3Dų)´ƒ ĻyRüŽũ`ŋˇzg¸OLŌ-ŨĶĘl qĮkû}¯„Ũ”gûHeîŲddƒ\-Íęfķ}Ÿix~? T¯aí‡ á"î^hoëė—õ‰rM­ÅËũüĘ`gÖēi‹“ƒD67ž,}´¸yˆZņNV˜u;žMÎ^LQčõ&žj } {,"ī3ŒĄ€Ņâ"9ģŽēüyŨ5á'd` ĪŪ 5{IŦÜUāāöŊÎrlR“ƒSĄG^ē° J&°ÉâvœŅyzt…}ûS}Ø.íčä Œôä&Á”ülÔzpûΎÖܟ3!×rˇē úyŖ°ĩ­ßŠŲ ™|åģöˆm:Įˇ?KË|“Ÿ }/”S&.˙đÛwTq¯×UiĮM¯ VQŒ/ēá^Ŧė.Žo›K`Iš0°ĮŌ}Ō=Īp_ŽëņûēÁÖ@-–•gÖķ‡GDWŨ{Á÷{ŎüŪū¤[>;J7hI'“O?ū0/´ļĖ֞Ö~Ώ{÷…š‹DîbšęÁZsâ^œØ 7€yÅbĻŨ— öBŸkCķūfņfčŲËÎŲe“MtûnoŲi¨%îÛ#’4™^@"/—‹euŨŗA%ˇ›ÜĩļîĪĄÃUîęŗ% 3 ÃtŠĀrŧ`n•īÂÖˇžMÔZžĄ1ŧāŧŌvÕ'`ĒãĶŲÉÖŖô@Î@$™ĩf[@\NæŗÉjÅ×ĻũËŽĒĐvåKÍĢ 8^ŗvžJ÷°ļ`­ąû§¯åŌrĪ´û"Í_Üá¯ûRõ5īī:đũ—‹˛ø~_ĘŌųŲ´;ūō8n¸u‡a2M“t6Ī ‚;vSĩ‹ŊŖĀēeę¨ FD€wŌH‰8œÆî uōuĀuŊ!oōļˆôVŽ +¸ÅŗSĪ—6î0ęėÍ˟˙}¨8~ž>重Fĩ,­Ķ×đ•úŽ’Ú=WKq%Ԛ f^EtŠ€Í§g1Đĸhg”[iã/ÚRß-hāaūrâĪ —gøŨ|ôũ;ķėYRîŗ<ĐNRF&SØp™oęŒŧULÔĄũՍ7˜%IÃķĩõĪįc…1rõĘĩ€ @¤—?‹Î…ˇ['‹ĐE%ʛ†×‚į  §kĄŲĨ[î5Œo̝íŲüt~@œ|ĐéĘwG%ŅWÅĪēDŒÃbx@,ũEH†=^!ŅŠYŸÎ†Yg°ŦÔRĨE6mÁõeƒBT"ÔuĢŨĄÎ›>˜Ō!Ļgy§xÛÃ]wŅ/÷×x[Č÷÷*ĨŒ|pĻqøģēp÷û'I*$7žiDʞgÃÅĒŪËļøãŊÛ kЧĖ'qßœi‹ļđžĐ`›û„î´ļúQ‘ā}^BķŌËŸ“$›ŸûôāuÚ?=Ģā eyã”Ŗé2ķ#…ƒü°~û~‡|oĻ)`ËėæŖjumųĀz6?æÛIĩҎÃū{Ŋ­‰g‘¯sPŧčëŋĔ­Ģ\aŸ&oØvĒ›ĩUÜOÆŨūËIáîÉ÷ĮŌ"J¨æØ´€O燰o‡Ÿ˜ŽĩsãÎŪâä´<ž=^%ĄŲ}ŗˇ†kÆš5‘ŨŊ˛°Ŧk)hâ’ĀĀd8ĖyyéąYëWvNÂ[MyŗyNŧ/č[¸čXĸZ.Ōîmb9œķųü_ĘĪZÎģ ŠÉ{Ëß~r`~ē¸môäÉũ=ŸI7ÃxüÕŗŊģŸß`>g!<Ü÷ŪpĀdÅiŌ~äīyyôĮ~wūÄüŸ>9Ŗģ“Īn§Y–đFĩŅôēdn6Ô×vö×eHŖ<čČBopÚ^ 7õÛ° /[z {yŨ^ĸÉ+Ē\`™kánCoČũ°ŸÜ{āĒ䂛ø§ųE'ŋÔÂÉ÷åéÆäÉŊđ$Đž?ú˛´ûûēŸęx¸?]ũm=ÛŌDŦč˜īˆ•Ҥ‚UmÁ ÔZļ'{ģ-} GÉ7‡p¯ļ÷mŋ ÍĮķũ^üš5VŽÛõônņėÖR)Ž^H¤wwøũŊ~×ԉA­Ū§ū}˙SŽņŨåīđáāé)ÚŊũŅŲđa0 7?ŊŊ:ú6ũœ]ōå=3x}Ŋ’āØëÛ 2|y‚p§g;šžwšüYx{^ŗA'įõlyQ¨~č˙2úe—>Ūņ*[œøøÛģŸ™=ĄĶ䎟žMųâĮ_ûhoŋeņ›?öÛį˛ķ{Ąņ}MGëįĀ Eáā éäÆ,sY˜&Ąķ¸,z…ß#ëoos}húmĢŧ5ˆļcœ ŧhß8;>Ü?)#&õĮũ Đ3Ÿ=ųČK Bj?ÂŊđÉ#å…ʝŊ;g˙t$ĶŸīġcŠķ‹läŲŨũ_Í95?9ĖíéŊ.FhzĶew;tĨ_可ļ÷&=ã7´‹^ŧĪ'UsaũėÉ/$ƒÃį_˙–÷Ŧ­÷˙杞 ā Ų_ĮŖÉŦßĻ6ˇ:åoŸŖ÷˛‡€ƒķ-;hŦ—‰jíķÆJžG%ËQéÔ6˜ļEß9hōgö’ĄYß<œ‹­>ãŊ„ūöî‡ũŋœ~ûÛ?k î}īŗPˆYžÉŖoĶt™ˆÜŪ/?jå?ģך@Ī'#ÉÎÃrũlëڊõĸmĪŨŸŖ;—OÃôÃŅū…ŲnũG‡×%{Č˙ÖčŖžäø6`Ûyãõ–ËÎlŅ[Ú¸ė|ėŊâëņ°ė/N´3O肺Őr*í:Ųü÷OøÃĪ>j]HÕĶlūÜ÷ ßÖ%*ēÔĀû­kƎĮâŨ6ë1Ō4šģ÷ē3ˇŋ ŧŽ!5íj~ÕҰ=–+Ël„ōWļ?ŽlhõcMJĐcÖ¨Šųüáw˙īâķ€ū~1×å,'ĀĨeœ?ÛāĶžéŅ×ß÷?ųUzAžØîwķÂ;GAîŪĀĶM„f”RŦĖąĮ 1ĐÉãû/6 /oZīŪ<7iš”HāI⠿А°šYŒŪsJ1‚DČáEBVå„2gĒŠĄ×^Ļ cōsÆpž3!ėĒŗ#Ø­_ōŧ'ƒŪ˛5qđ—Į˙ô,ÜOė`ž,‰āĻ{í'Ķ<~qͧgOô‹CéŖ,BxY|g^Œ Ú]ļĨu†—vļz4īîĀ€7‰¯ĢßĻž6Г§  ÆaĖL}öŅézŖHmšU!$0;ŅôĻŲ´Q f€HŠĖ˜ÆIˆĖ€2< ÄėĖ0e€@Tx †īŗ¯nWÖ*wC0‚3fFĄ°„ 0đ°ËNänÄä€ Â< °o‹ŖĐ/Ęīī ˙ôҎ˙û˙ũÍėÆƒØÆ•ŗcWį{{­ņˇ;QBÖ V$’ˆGgZ„$įĨŲ€I¨,‚q0 đHIuŅ >×ņdÚû(Á—˙‡°˙ėĪöŦt¸1šÅî4AD’†Xp™ Iˆ×Q‘”øŧį.Mēr/M7˛!Ņ[)^ 4ņlēŠŠsvsĒÛ*¤]ĩ.ãÖŧÔųiĀԉČLBõƒšGJîL…T‰Ė”‚–€'^°*ŗSšÔ,:ÎūãƒÁáͧôų_ôÍÅJöždfŋfĘãûšëøģŗpĸĸK5-2 ųļh¯œ—Úī$t֞/„Á…Šei.Š†Î´'<ž/ö•į)9åÂ$īrkŌ͗ BŊ§’äqéÄ ?Ė Ę2…ôĘÉSí,ßũßÖåé÷īÚŌnĘž°eKÕ$+{P p$ÍCfp§**[éYå÷!âua¨#FN°8´8-M’ęæŸ1Z ĨČĄĘŧ ĖŅ99šĄa—đ:d•š_į÷ļ"ąĄeØūu+.UwˇŨN1ęŌouˇD­†N“›ãŖÕSœëžĩ™f5BB‘„\æl.ŊOîÜ_ŒĩûķNt!ן߸÷ßęéī>ŋ3āO2ÅÉB;ŗXpwJÔá4ĮčÎī1§ˆ”Yædjä.¤ÆSAJm-KdŒĻˇ0ËÎ<ÄūåŌēF­ŗĖ[äē,’ųbä’O`>ԅJČ,¤tp\čƒōFøĮ;ÅŠFÂéđ;yf΂Eڏb×Eã€' ‡3´%awĀcqG”]Ũ(O ”Ō2v9LĄėdDŪaŠ%%Ø&ėΑ„ĀN,ķĀŊ-BSî¸9DĸG7 €°1‘ŠœŽHxĨ˜4ļ%w§”Ũ”ĖsÁ•6ųp։CļŽ1ØžžĘ#{ōmT™ŪđÚēŦŌķHöN2Ë0„0韞q*eõ‚A?ü_ŋ•ŗŋ_üōƒ”Ä;á“™qÂ}ËÎāūa¸1¯#Ü€Ä×øܰfu^Ũķ4ˆ;š3ŧ@ŋžØĖj$ŽË„ƒ;„0–„,ÎŋŪ¸ũžĮ[˙Lw´÷ķ^”%Ôa”a:2ƒûŠ;§eá’ߌĶȄą/†Ŋ \Č'‘ŸFŸĩ1 ųا‰ ČįÔLÆËbá%ē9-@ lš”„éiėq'–|@-šdsN(.,8QZėwĻŠęaĐRŠ5"Î   6l‡ŽÍoš'T(§$Žęģŗ$¤æļ¤ŧMāfLŊĩǧ)orņËŌw=ūļYĘĢ`4ŧߟ´;=ˆœž˙ŋļ˙AîLžŪqÆúb­âŨƒļC7m}{Ņ;ļ+­$`uØ"sâ*ģ``&WsŦzV‡Ŗ;p™ģy™ą•4j”ā’ĐAÍ[…ņ˕ə&‰Ö²p0oˎ[~Žå $éÛbū_˙šËõǐˇ!\¤í´õéŲiģ]?c:üËŲoÂíŅß˙CDđŲ×!˙4äļ=„JŪŌZ­ŪTv°ĨõA[%đŖ•d]õŧōËAā’| Įã-ķgS×vÉkîúíŠō›ã5됴•#šÔėp3ōēĶsÂķÕB^÷ĘR hž›É¤ˇÁŗŨ÷.°‘+֎2¯Ž7„:Ŗ ęa/N-g-ŸŪī­—Ū~q<ėpwŧ”ö-zē\ÜúhՅņ Ô¯ÔÔîÛÆHšá*}3C‚)ļ…aÕ5뿀fKs*@ƒ¤ß_ō‹íŗKęŠ&^j?—5ŪėąíÂMEßV#M<“Ŋ2 į 2ŦīŧFģņÂē.[ĩûŌhŖ…+LÛįĀĀš90wöN’ŦļĨ›‰ū ˙Īã˜íMÆéûvvš´oĀÁäڔëaÎԐēŊqj5ėĩTŠũÕX˜@näZõhk’áJ›id¸,N´ˇGÅ8I9”‰ė\¨—€‘ąšTA—<ßōsœÃ`ͤŦˇöēž7XËĖų|Ü +UgÍr—íŠįTģ¤}^!1ī§éTŌ㌎FL$0x Ÿ§˙ūëež.uBäÛ)ÁÜUŠ! 8HŊĘēq¸XsôkÖL‰*?ĮŠV9SEęjĉ‚YũĐy¸XĀ'íûģ ĄE¸&ŦNȨ+5nõpme4`!;|ōčŊīü&Įĸ%•ļrA9‹|ÆĶ¯BV ˙ŋũ™ōE ¨¸1ĒšWf|2‚¯ÔîŗÕŊÖ ËđÚhĶH %!%7v!Yfš ļ,‹Y ×éo†æˆĮũ€&rÔØĨsōŒŲO šōĻ –Ûîy›øúĻë×H h\&[ŋķelÛļ•n-×]ä›O.üę i2=c6WB•›–ŗĨ¤Ž(ǏÚZ†6>ũŸãd™ģLQŪé6øĢāŽlD°J¯°r›¤JgšaE7råF–Šę#w…üeõÕ 10‘†N6E1ŸxRLf}UEģ*—ŗ ģÅ:_ė§Ûd;o,[åļį˜ÃdĨŖŦqÄŊi9jnČįú~7gôО~ɯŲš&7`>8š3:Á"PšŠQVī)ōÉ/˙ĶĐ>ÜŧJ1č`ލĶJøkđž<iŽ!9kÉ Ēq (ĮoF­ō ëíäTh ŪëuŌ˛d/Ĩ>*DėĘp/õäĒrģŅîGCÆf\*úú{ÝeėÍxÅm=oh'#å´ãéõ¸šz…m„[ĢVŨ[ŊÉ0)’X29‹;f`´~m_>.—YäÆf u6bĒöT•?ÚAĢw3UV>j*NxÎ ­v^• ĀX‡L[Åæf8Ø\3bîÃæôÆxĐ:[v KŠŊ”…všn7ĄkcŲ%$qΎĩŋNhž›ŲNØp!ÜŠÚę įŅÆŒĢ_t›Áģlö6\ĐN¨¸Ļ:NâVš3Éi:ņŲŪG˛.Ť>›IĀÁ‡~đčÁQoîŦÆBuäíúā˛âΘjãõąīqũÍW܅˜ņ*ãēšŦ‘‰ÁUŨeJ+yiöHĮ]IŠéŗÛKÍōšXŋĘšyÚüŊj›@—`Ų ņĮ?ļâRä Ūäią• o]ĸŽåÕŦãM¤ģČ9ėŽ—T¨Čá Ņļ ­~Ē”.Ĩų¤c”gj‹îĘĻj?—/Ī:QNdÂęŧōgØĐV+3ČI˜v§ĩb}‰žrO`Ljc•mJK•NĄŪ4ŽK2Š,Ī.Q=db™Ģ•  ‘IV}o ī^;élÁŽgWOY]í.äԟ^)œc Ė͊`¤æWv@enAĩį ­dŊ´kƒ°0|Ŋ7[‹š´ŲÅkˇųšQk0“Õ°8@÷˙¤Ķ¤Ą %8AäÎ×ķŦî˙žû톖UÖaxĨe%Ô4Ā:˛1y4&ǜĘk/ŲÆČÄuŅ"s /I¸J~jΐU^ÁĐ=<›j&E!ũG­ Mö6į-åįEŅŨ“VךōøõÆŋm3ŏCҚ,ÛúņʁéjäØNFrū7×:/ÄĻ™qÜ‘›¯ âŧŽčN0÷ZĨ‡:ģ„$ÔîPô~—Ĩö rČŊâŖ>šƒnŋwpTÎĮŠĒÆĸ08šŠ9 ËZ˙eŅÉËŌܕRąčĖ@PāÚxuĪāď&Ėi`Ø pĮĻ+”ąt?Ī—šˆZ>=™ŦÁ™šā֘ŅÍīLžą™°KįĢZjŨšßkŪŲũŅԛRŖU4y+.?=į=o $ĩađü8Ģ‘?wü—ūZą[Õö¨ąÉ^F,ž‡Ã˛Ŧŗ8@nDđėÃ÷–c’Ä,É ´Ę–¨âžōÆŽúX™ÜAæ+8‘0PUdžoN fŽ~g!†98;bÁ…:QŨ!ĪsEb{ž—M#DFĒäĢûyÖ|sßdĖlîŌĒ šĶÅų=?MÔĸkyYĨWŖ;žÆÚūB^ĮŊ܂‹ô kŪx}xÍÉŌęËÆžü<1ú<Ģ°æˆļ΀íá4‚›1’;īM[íÖ^¨P°2ÆŠfüV¯üF;ûdlDIÅ(p•yHŦ¤d3PŠĘø¤+Nt-W0w—UÉõöôÕO\=$&ĻhRš ÍN¸\–™ ĒĐ4¯fÕ\íƒĘĻį[ŒûyƸ |ŠHēŒ.´PĪŦƒ~At+žÆÖ‰‰íŨŠ0ŦųÜíᛓõVÚļ-ËspM­Ú…á5x¯ĒĘC Î~O?ZQŠ•ãāŅÉ)MĮœļDǺׁa 7ĨGCÁN´ōit'Y3eaȈŦDÚāč°zUQŖ*í9“C*ņ bîæÂģ°8Õ§YUzåt^ÆštŽÍ`՛ŖŪģ+zM,ûLÜV|ĸ5ĐėĒwÖ2įšĮ•į)6_üsœũÕpšū¨&ē›ĸ@-Ŕņėã},ŨÖž]Õ´ē›ąÜûNzééĸMAÜÆLŽÎāY‡ Į_5f`ĸęČu"¸Á !ņ˜WōD6qČÍeĩ–ĸNd ĻDî•ĨJD•āå^\bqŖ>û@fH°Ĩčēūâ:],ŧ–ĸÎĪ[%ŸŅf•/ˆœ¯\4Ø˛;5¨ÖŠé8o#ß˖hš>I6pņîÖŅv7ģëéÅļˇ>5§hš$˛˜oqcīŦTo\[7ŋAŌÎōP™DÉŨ)Q%Ā˰Š JŽë5_Ũ€c+- ŽVĨBĄ ŠÖî8°ņš@í,ė““ĶJÛ'|g‘rzø‡“Ž3Ō"áJ=L„Ũ­q÷ãzĢŨŧ$ē õ4īÜĒ›ƒāyzĪW—ĒXÃf¯Üđ—š$aÛúGl3Û™žĒÅˇÆ¯˛3#ÜĨ›Ũn7Z;ÎG%QlÉz7ĐúH˛Û‡Ë'cˇÂˆC’6uVãh!$Ä׍ō”  LugfnpU¨ēƒ…Ü jîDZĖ˙Ī*K‚/ '"Ļ‘#ŪčŖį3I<ÂŨˆ\MĶF{IÛ˛ūUpŠîК ŖŨË÷cÂVž _n°ŸĪÍßL[˙4jü曇×9ž')\h:ę~lÚkyŦ­•ļ9Ä÷ßûæô€“˜¯™*†#ŠôŦÍÔéɤ&Dõĩ+‚m^HÅâU”L…V0č/PzHĢËŋĄW,ÍOŋ?8¸Û^Ũ2ĒiŌKŧüšuZOaõįĸr}ÃÚ\<†^Ņü_€&Ļ*Æ5ę^^æĸÁ ĪQŧ,ėæ–Ũ†˛Ø;'ĀÚ[ŗæŽ@˙öÃŅ“lŋzûĘē`L|i›nÎ Wf…¸+W""*î‚6G9ȃeyģ6kau`L=Œųŋô~/ËÉVĄËÅĪ7p^œėÕŋ6øÚđ"vû€Ļ°!i˛QIŊ45oįŌ‹“îĸÂqžÅ>õ2.ÚŠ­üŠ?j=N\ DĸJEZŸŧįĪ|‘kt¸WĒY!uNÜX‚P#ģÜALfp )“$‰Ŧ) 1sÚîíu’÷ú¤6ž‘Ŧkž˛éؚæēŪuëŋĻãu§KJÍ[ŋ\—;x¯Rų<\˛'Ų~Ęé­¨ļ5ØÎÉŌBš%š1oNy7ŽUJ;zd rEĢՍoHCž]ëyVę¸Uës2ąznŗLķ;‹…öŗ-IīÕ,ņĩ[Ų)ŧ&™ Š§_ŌÍsmktáákd:wĘį;”ÅIŌcĶŪæŦ¤Æy’t=—xôY4Ë×á,ĮÚ“€š0*5ŖfҎ/‡í˜8ÉÅC‚dBpķŖOę3ŗĄ"ĒÚÅ=ŊŧTÅ×´pšÚLáõd žFĢõÉu!ƒôĘ^K˛+S°˜†N/Ʉk_0lJyĮ͒0?.šÍ6ôÔkEŸoūŽŅhŠš_ĩ6¤°qâ × ÖĨķ<Ī2š?Ėį…æ­æļY‘—;Ņęz×Ŧ˙ē’Boų9VB§oŸ2^š]ŲûZ#¸ŽyAķwIĨk=Dƒpî,Đđ'܏<ŲOŨšúÉÍ!Pb­÷Ãßܸ•­Ģ­XËĮ@W&ĨJU[Ąbį‰hí'uQHp€}íĖRë˛É­ČŘIž˜.V~ͧÁÔÅyhōg•uČ–ŪŠî+Ì@TFâĀ%*įy8ÃYāMUJ5á:EtĨĪökœôŪ<"šĪw^+¯ˇË5'k1×áx)ŗ^-8ęBfuūŪĶũÃßäžČ̟ŨQ†ÕíQņq­Mlîė‘€,š*)kiæŊ2s5#j8K|á%0ŗœļ˛&‰xį 4–:€Æ„XŖ ‹*KåÎ qŗƒübx3f)îĕ3ŽA¸qIĄÆ-`E„ž"1ņQlį-0`Fd`qŠM{p"ÂÁ`žČŲ-[K™uŠBÁ#¤RĶÌ T °‘Šä3ÜkkGuļ¸ļ9Õ dËúëĀŽ÷(s=*öŠn4´S›õã ×ÕËv>a>ûŨ—9‚@ŨįÎ˙?woŌ,š˛œ‰}îr8CMwx—ŧ¤ØœL4ãĸ%ĶBÚ¨MZ{íÚLfŌĸi&u“lž§wߝĒęL9áūi™'OÕŠ;͊Î{Wĸ’ŨŦļ5œršgt’ sΰ%ŊŖ*¨bPqeĨT˘„9$g¸ĖŌÚ,‹‰En‘j ę,ļ!MZ[™}eVŨŧÔ’îÕčLi}īIÚ,ŲÕŌQU‚–Yˇĩ Čģfy¯˙øųN:MĸŪi2¸"< 9ģH 4‡U ƒģÄō^MčHâqāqŅ;á…q$qHņŪž’&ˆK˙ūe˛íMvĨũ9'ôõsėK§í•ĘĶ?ũZíą]cūęŗä`Û>\G–ęVZI EįHęß/ŖmĩFk ÷¯¸düŖUĢ•-ė­ÄKQŨØŧSɸ ˇ×ÎßÅÂöąk Lví)i%yc—fĻĄļč\˛ UU5Ĩ6˜}ŲfQ\cmI7,)E!MuÛ˜íš Qđâá:g]E+ŠNÜwš~˙.v띚æ6ēpņ@įWûvŲņ"bž[ßēn]wņ÷KÂz#*Ę0Ģ´ƒ=¤]šČ@ÚBÍŠëÔhŦ-%Öī"K’Ue¸™wJj Đ @ņŦ …É8Q*Tč[]מŋÚa>og"}ļëSŌïī:J×};R~Ąö˜Îō_ü œáŌE%"ŅY ŗ€t-ëÆ6ÛJ2¤5ÖPŽ:ŠôĻZ˛Ĩī÷Ė]6Škølɛfå¨ŌãÁ™w Î¤ÅŨ ąQ÷ËŨÃŌa&ÜCčÎî“5ĖėâûzßFPV/Sį)íf‘.V5 R›h­I×īÃ.™3đūˇH˙WĢ’"äb7+mŪé5%i“ļ÷¸ŋŪŗ“š}á>7y0IĸB_ø†ZĪ+]1‚VĢĖôޝxˇĩKk—ĸ ;4):ĩ ä}ƕša'Z?Ü_5.YĐd‘•‚Ö­ŽtĶÅ~‡ÍëÕīŗ|› ę\daēƒÕ ģdE›)œĘ?ĄíÁ<ųaøO ęÃH_ĪPįžŧŅQ;Ō7Yŧpˆ>)8\€Sŧí[`VŒcđũgã+ÕâÄéã`DĻ‘˙ļ’Č Ä=GJė߆íLŗ)ˆdŌ…$Åî* ãBV¨Ōb)(ô]\on¨”wŗHš-3×]Ū[únÕŊÜũ.y vîĄFr:*j-Ū5āíĘüŨۛËĪoEŨ’<Ŧ4—ûũŽ×Ëĩ”ŧ8į9ã+žĶŲr‘oœ_jķ°ļ+A,R˛”4ē]Ū^_ÜÉUŦäf.Ōĩ^‡jäHä,ˇŦę:ēíM×]Vž4ŋŊä\v—øÎcÁģíåĸë^*×ļ&UéÖ5xIVaAAĻEhtĄĩ‘°&ĖMA§šä>ĸŠ×ËFj@8TYI(JGĒ€.0ĶcŌ>Qø§Ä;žqŽņŗQš2`SПåMEƒg(čR´ËQ™Fé…`ÁĒ‘Đ#w!îfČz‚kÔ¯×ĄĪøœPDˆÆôÕHŠ„ÃšŗJ‚Č$1ŲBÄ3Á˙c-˙æũŌr§ŅēD+` eŖ˛í珴īųō‡xĮû×M´!Ān}Á ŠėZr°å­\‡ŽÍĄjv'éÂņ.Ö3Ŋ{¸ūÎĀĩ-(­yŗb•pšvV˛ÛJ ’.[ĨēŠ6—0Â;^™ũ/°ˆ?ėwģŒß5]ë¯öiY_ëÅæî%_îŦ˛TĩR¤¨É Aäܰ–ļFäœ|ã×’" YˆĖ*REģ[€bČA˜ĢæÚy.čY°ËÍ×ß˙8ˇ?Ė n¤JA Ę-3LØŗs$˛I×!ÕáŪ&AÛb‘Ã[¯gēΗŧŨXUU.‰ņāĒŨÂ$‰_Ŏ׿ų}Zōåū{.[Š^}û*Ģĩ˙˛~Y]/ÂgUėWģ×îMÜ­ŖũFĒĩˆ-ģŨ2GŅՁĘ2“ŠæĻüJoŦŠŲ;_JJÉnRKĶŋŽiƒēļeģEc¨v°eÔŌ1­>7ßĮr+XėĨ‹0‘ÍjšOŌ$Ķ qTĩĖ0Jˆ°Ž €Ķ,m,Ą•’šƒˆ6](M9cA2K2†”Đķ˜D”ë›ŌĶV `¨ĸ@G0 U QĖ Ņc tP=BgãԄŠ=šūAĐ}vLķS‚§ÃĨ0+ĨH   hcAR‚…áiĪKŅ’áÛ (ČŌ ^~WŲ2ĩAXdˇ*˜3Čē§ŠŠją°Xd6‹ĢÅL!×"JocI‘€økRR šÎŽ ”D•ø{š6M’ŗTęšë¸ ˙Ã_ūũ×_ ukÜMB…›ō>ĒF}iŖŌÜEtūm ""įėËüe\ėģũ‹*2.Bŋ€ƒŲąČxŖīëÔvÛô°ĨC’ÄžRŅëīšĻžŧQĖģdvKh‡Ø˜Ōj÷…ÎVŨÄ_ŦU:_1x%•‚_ã!^ąsÁVķ˛QÕuD–*›ßSM(6CËë×ŅŒĄ _Œā“Įū́˙č *JŲë´$â`ÎR'd¨§PX`J†đė=ŗ‰Đ>¨ čĐ%‘žP}s…’PvN@H&ëG6QÂ;$Õ>UØߊŠËī7WŪöĨ-•9ÚJk Ā#QˇDĖįŨœĄˇëÅč"Ē)`(ŊÃ\=× eΚR€*ē†J Āį"ôĸ0jJĒP‰nŠfĄ•ĒyŽs{aÜ6ivuQÉrōf—ĄDØčsSô(߀º˜‹ĸ`pj ƒ‚M–AŧĨ$Äæv& 2wTĩ´RSDö@Ĩ+ZL ģ… Ŋu“LY%VvX_’I:-3S}ë/,­™C˛é>ãEžŸûöĘâœå›ë´M•ž¸ßĘŧ“´øwįčė0­‰!ܘ)&ĸˆ ¨˜1§bĨHqŦ hĒĖ,9뜸Ą;ЌĄŊ˙†ąK@,ĸ§ētŦŊķ0ÂáVČ4φv–‘+ņ’ N:=÷ßûuNåfФŽÚ[3€Ąá¨ÎJŗīj†Œb:÷ũ\5 0#A$:Ax§ÆdB­G”ŧƒ™9TO¤"˛B”ÂSÂÔ¸Ĩũ~ŗÔ‹‹ëu Žš`ôÛÂ÷'C˜œH Ŋ1xâ;8äÕā§NG=å4ŕöKĸä]"rPj‹s­h†SĪ ‰p@ÔÅb+}šQf@,IIáU:`鞉 â ÍũC•J á RĄO+ā ‰°č|ĄŸŧŨM‹§×ŠËŒô”Č"dd2Pų°æ"Ė C.& w Bú‚yiŋn7o–ŗĒčģ %ÔŨR)'R™ŖūíļšÚīVÛZ4y$,Ÿ“‹|=!ŲL‚„0K 1GĀĨĻ !ČNIŠÆ° QŠŗ@˙i€Lˆ¨DTŽ–Ú,R}ļfŽD`B@ĶŅõhrŠšîĸ2N“”Q<ˆãGōEiƒ]`ą"īm{pvÔÁņĻÃIHĄ|cNĸ”æj¸ûJiš(/ ;QĨ$bÁīŲ=‚ Ĩ¨¯*zŦNzGļĖPDØV)ˆLC´ˇĢ7@<Õ$8ė3íCĶ֗—‘5š† X´b@΍8kķÔÆEíß|ųW¸‹P!â{Ô$s$uõ0#{FuJōļKB]HëjQŅ‘ .Ž Â[¨ WéCĐTÛÄ@x"FMûˆŽ}š[—(6zŒéŗĘ`.{Íf[0˛íaŌØW*h́ö(ė=”Qßķą7™eíÔ~ŧėų!:š–#{’Æ€3üŦŊˆß“Y”Ãēc,Äú„Ė’WFQbÄÂ2+Ĩ7õ…ô‘6…Lžhq&íÚĒLĘ"JXKDˆs$Â;Ė a˛ī sG¸Ôd}wĪûŋUqj$眺¨AÅ$Ķ%‘†jž{9_>äVĶp&Ah{ZBV¸° Spį32“¨B0OJR5š"PT¨‘YĨVhęŲ ĒY¨Ķ\ļĨˆG×<üÉuˇ$ĘAŽá0j%œŽW„FËŌņöH*(ŦĨĪ, t°F–KIņžĶ>ûÃĻĨ‚‚‹Š'(ƒ‰ē‰ 0ŪÉėõKĨßûiŊDPûĪû]į Ļ(ád„jŊ €Ąđœ¤!ŗŠÃ3´Ä´Q &ĸ TA :’(%æ:Eh;8%M@Æ–ÃÆ7П\ė04i›IÕ "Uõ…Ų ë_!BŲ'yˇIĨ×c˙ęŠŖĒįŊø}M:}˛MlŋEũPĒ@Ü T^ëĀ9n.BĐY`FˆgNbKmÃãSķp Y´@K";m䀃>p‘ÚœÂÛ¸ŨÚRįQQ Ô}25ĖJŅ؈&‹*2pš’¯˙O{ģÎRäAŖa~ĖT OBXdT¨RĮ’"ģFÁ„ČškęfNÕÁōá5­›orˇŒšŒ=ī^˜U~!ˇ¯.ˆ(Pn JŨ[Œ Šč¨˜Mæt˛ĻébˆbœP€Ų Ō $ˆÃŸŒÔ#‹čĢFW2&Û6€ƒzz$›> Ėđ<‰}ÄŋųhōŖˇMõˇvíīj…Ų21”b<Üwŧˇ$9’¸&Đčà lGÎäÎBĩŠĒ#C X)û0Čž“úīD`ŠrŋŊ¸4EA†z+æ*uP u^åō˙›ëÂ~ŧÛQIĸĮī,ĒHÛĖ`{wSuwŠļ^•RŽ)ĩZPŗ,*DADC(ÄD'îûX¨P qƆjdv´ëļM=›sn¤Ā"ZŖ„ö,gXz=ķņhMÖČč],Ę sԃ=SN!HÃöALj—Há ÂâÕAą đ tLæ”@>rāQ{ä8}™žĖr 5 Ëâp3°ËËÂ}œŠ¯lF¨ėųG‘|‡ĩ2ūÜŧ˙8š‰Į“ û  ÚˆÔ“Ę6"Ô÷ëKÜ[§ 0* dĒ&qĨŖ]å_Ũ¤ģÄHĨĘ)ĒlĢu YQ‰ŠD˜ŅMB ŗU{1'ƒIĀ-'TdĖßSŠAŦ&ŠđŪDN" j}ņŨ ģeØzרŠHˆôÎîŠßãȑ#ßŖ9Õņ˙ ˜zÉ*ŧĸĐģ‚Zâ ¨Dš2Ū 0*ĻŗĶĶŠßuō™§žjG¸ĄSŽD`šeН>PR$fđH–Ą9Âĩ-b§ŽDĒLt’ŅjvĈ€Ņ ÂĮ§6NČ`v9+ŅW†+õ„ærŸP’ē•š[DMgAКÍŸ­g?î¯LrA%ÛĘÔÃĨ% ZíZĢGũ0:ƒ‰[X†¯ˇ´ĸ¸Žlb`:ƒÄōDĐQįjįüũûņđĩUĪfÛÍ5°Úa“–2ÛɂEvjŲ Ōgčđn@qŖ4ä˜õ‚•ŦwCîM?"‡!f?YĨ&b‰TŒßŊÎŅãBŽ÷’˛ą<ÍĒĻÛëۇôÍCëíøĮíķ€Ä&P Ō‹°y¨ķøčáŽ@šŸzdœ>øÉē;đŧÞ9=Ûvģëũßž˜•Ņv&AŨķ‡úPãBđâ/˙áaöųÍ|;01Žô`ˆRäĐĒø2/I‘MTVēũkŊ¯­0\™&đŒ°ë¤.Âaĩ[ŨU›Œjv‘b¤—˛| IFĮŧŒīŲ SiBå/™ ō‚€n‹žĖFbÁ˜Ú7‰^šĒî@ŌčO|jb>Ô>¨…ĶŲÄå1|•~A &BŅ÷qŸB [d|…‰•ėŊÃÍ‹QoHDÖtĒŽŽđ _ŊŋÚŧÎ僔xķb:‚žļ3`ģĻ­w(Ģ2 p˜Ē“1zøÂŲ¸ ”!ĻÂ1JõÔđP˛Ųu3¯úU’"1Œ0ˆŌąZÚŽēÛmjëė`‚ Đl0EYOE&bôHOĒ¯ČN`A™âd‚aĸšč˙b (¤îã˙úSNœļgēŸįgĨã~qô ŗŨO3ËT&­ĶōœãöúAJ; Ę ';|Ņú,Ģ~~˙Ã?ŋHMuR‹(ĩuöUÁ‘Jm#’ß>\Z¯a•čËpĻ‚F&I6ƒS„Nŗžk•},&Į‹ f‡Tô0°ŗb[†^ŋoŪŋģũ“8ņŖ÷™ßũ§{Á°`–v•Ô>ėĄŌ_Lé@”šÅ:öŗCˇōHåũ%Úã|ôÉ[OjëĐG„+dÄ$s˙H ;Äĸ<ƒŪœ> qŋ8%įŸvöú+,įÖŠ•|Ęû]FĢ]-#×û™Ŋ^ž}ws=FBéĒGĄ-!ČŦ›uÁ›=ȗ 2ŠÅIĸPœĀ@Qf0č} ]|PaÛŧ[oī/؜ĮƨâžFĻŦë¨M|5F넎žŒSá‰ú6z/ėÄ{ÃĮ؆§øđNôQj|ĖĪž¸¤9æžD&ŠĮ洃a“}‚~´:Á÷ÆåxĮ”éåžžãĒREoō šL6›3'šPo^ūwŋũáūwŸ]–^‹ä"đhze"§ž/šq%ĸR<_$#zÁAĒŅ…*(,ę D Ŋō:īĶh1ëĪáN…ō?&g :ÛčPūČų‡S„Ņ€ĸ Ø ÆB^ĮL]å?Ŋ=O8%^˜šZĘqaŒŸ2ûãOŸŌBÚ3ÎŨŊđjä9Dėoœ91›_ĪŽíŨ?˙ÕRQ2Ɗž#Jzī$EY\lƒ=„nąRŠŊ@%$~|Ü“ÜDÄ]=j‰~CRīlgō›Ëf‘Ãn8ũûņ;–Ö™mø|,™“9+öģ(BŌˆŊ_‚ĘåŖ?ųNG?YO™>ņ9žĩuzVÔĢ_?(ę0éw”qæW@Æu›_ž^¨lA”Č€rĻ ’€Ã¤˜Mč6Ėa‰KIڍrXfƒ{É(ĩČ €KŠ €@õžžų5ÍáåĮU0}ã˄‰ŽÎYžáv0Œí''žÜāį´c~öėÎäėį_ ¤í)ą„§–Å“O€ŪdÖ¨úĶq´”D_ĩÛëeŊŠUŽ‘o?ƒ`ŒMĀŖíŸėĶēßįĢG=ČJčCú{ëÁ‚ĐäíõûÍâũÂEcô{ņš—?×ÎĪ€I…KℿŽáûĮ9û°~ö3ÛäižŊŸx>&íW š'úüu\šūđãüâ¨ēũ„áLˆN‹ŧ˙Ķ‹ííũļ–ū‘gĶ ŦWôd•2īmgÕ4æž{ĒŖR‰¤īQD`3ū¸ŨÜl×pęûũiM>9•ũæ8Ų`G-ûgŨô#mBgŸļOä˙ÂÚÂ_ ;ģ­‹,äõ7—MķU;y‘įŠK€ROķØ EzĶ`8ĸėCUÃąôeoÕVéŠ\op"ž˙dƒ)ˇ>âsgŒpžˇŋ|;ļk<iY>Fc˙zčä˛ĒĪũrƒúŨũÕįwín7ü^č“ÜwH5košųŗr…>ÖxöáŸŅĘË|ōe?Ĩ×8”~l¸ųE=ĄĢ~‚—éYí}ˆĖmsîi§4&D_ü—hc5āԖũōdķ‘ĮטÖ]ë•ĘĄõØ2=ĪúÛ¨dyU?­R>đ>EqxVOŋB›Ō™ĐæĨŒkŠđŧÎōg8pĸ&˙ėöa{Ëš ¨u= ØGĶEâŠęåûXÎ*\͡’ĮBņAĐ:ęđXšîģ“Åú{$0ģhfŋũ“—?jfrō÷×iGöŗûüZ:2Č:gĻeŽddĀŖDiÂPŠĐ”p–`>KžŽÛaØãāB;z­ķRéëŅáÉÎXqDĐõÜģÛíū3]ĨųÁ Āsc)„Īëo_}ö/øíßĖG­k9íŋ-pĖĪfķÕ6äÆŨžF^įęķöEõr­žwBĻ%U 'ô>…}'ûuĒh7ĢHúģųę cŚ9k­[•õæ•mÉVŠd—wË;ģō€Š‘ɄRÍtį´hymEĖ=Ųû¸_^ÃÛڛĢĨøŋl›ĒŪ×3.Ël[itW¯ô;™‹ŪGdŠ5âˇûßewņrˇ‡!Ģ8Œ{¯ĒEAGÉVąuR’ÄÛöFõãwAOi#°Ä}tž{Ŗ°™D@6fú°Ü—]8ē:yDp&B5:›zT€†“ZPÄ#)ČŗpI,ņR Åé€āŽÍ÷ī׃÷ū€Á#Â|ėI?>ĀŗįœļG'șƒŋę^:ågōęUYÁęÔ Iīa‘sÖZLÛ@dΑĩâúĐhuŠđæ˜b—q‰ĩĒyF‹Î›@Ŧ-*Ÿí×ë.Ė’D× "9ēÕu[IŊA~oû+Ü2på”—M›ķUõmĨûœÜϚMS‡ßŗģ™-5U­_ëwR_J‚w‚Áû î˙ƒ­_Ím–$scŽ5Ą|Ŗ]žé–‹b4Éû:/ü>.ũžŋ]ĖB-én){Ž+å& Då’ëģe(nģā^)ɖŅrŸļ ãf.š]´JâKŌ ô>YtŨK‘•2+…äŽsĒy—ąÉëÛĩîǞđ0ÉNA‚Ģ"čÉ^^äŽŅĖž2ËĄGDB f;žˆļ=ŊŠ}ÃIÔ_€ák( °SÃÚpÚl(R#ĻŲ[ũFãjŧ†1äXˇīņŠŌ€´ ĐE5Â)Ļš ҤŅfA’Č.’T5ģwĄ0é*“ČŪí3(sϺֈ¸Šõ.oj‰ÕÜžúâk—„ŽÚužōKßyËôžl×UzŅŪæ×ÉVÛęúí÷÷ËhĶo÷¯öŗm—›Ŧu-oũúžŒ/*Ŧļ5š´šĪë´w Wåe=ĶĻ”R…Ži°ŪÛLĩĐÆ+yöŖI×YēdH­Ą+ŗ]ŨÅVwüŊŪŨžEĨōܒlM2t÷ŠÁ%340#ĨTöĩm(´ĮĶ!s^D@Ē'û3äQØ:Q€nČhf‡Qúâ‚<"ÎĮęۑn6!Ãŗ‚i¯E]9Î'e‘œčî¯ፒŸŌŽî4$ŸD6#EDΰßũûo̝ūˇ UIE3•™J@¨’341Keë ßūĮ?ũößëŸūĪŋŲk„ĄĖ@ĀŨ•M—;Oi‘˛¯‰´|‰{*×ĢŽoˆ?ā• 7¨Á•ž~¸Š[Á ũá­ÎUĨ‹+Ŋhģ+ņ=S•îMdļ_“v÷–ķĪ_ÆÅCí¸ØÎá÷\˜¸Ĩ7­ÔáWŗŽ•KKī*ģn–ɐ%‘ÄŽŠm­Wzs<4'´2:S1e ‘"4f7j’5Ä(ō} ąĢ㍞€( ĻpŠEQJhĸ€Âˆ˜÷ŗÕĻM´QWמë"!ėfŅJgųjŗõįŨņÆî.åũ,–0U^¯Ž°ÕŲŪŦ#ø {ŗ9_˙Å8'ųGSwl=%™S“éGvF~䤧čg╎wâéūNōû&/į}ēzŸKú” BKŨišØĩŗģööëÃ;‘zČ՚ėŖīˆšŒ û„ác…NJŊ:ŧčķÔ(KAJamu!ˇūlFIŖ’ˆĮuO† Ø]zЗ Ču2b\ē—ĸXA‚ŅB`H 'sD8’)ÜYghŽ%+fŠÆŨåCöTa¯$ ˇŧō@ĸ’ĩíÜ]›a)v[Qėī’ŧcFōŋ8GgĪā2ĩņÔÛ2^|ĐNŠæ`ä|f›Ú`ØúŗĪwŖ@˙n'ķ×=ęĖĐÄiŖe—Ô2ķAčëoæ/Öí.T4éeā8}ĨG1@"ˆ(đTånã#é‘6U$Gםzķú;Û÷AĒ)Œtrë3#͝ĸ^|!vÄÆUÕ_h}ÂfC?ÃğE˜Œę›Ŗī㇠(s¨ÂŖ2„Ļ^rqvĸõ„?|Įåd…D\?OSާŊt8åbGĖáė-ĮŠÄ =ÖjŽ•pĀ|qkŸÍ=õ,f ”ū=K…ˆ4RĖbö.6é›ŋŸqÔ^D€ §Ū˙/üŊĶŧ$Žī7ŽƒŅ̇8Ŗō6ēÅKûáö‹C0Â׎Ŋ×czĪŖĪ?ßāĀIøĶá]OŽMāi‡×SR=k~PNŗŽÍcíŪ `Æ´m‰"a?A@z>0d –L˙ĘäĸGmėâŖųN'KFf#lķų îã1Ķ''Ÿt|ææ‚>$úhy™x¤D§õMŽ-eĸ>…PA_ÛŌėĄm6Õ}ŒĀÕåÆBc)†Ą%{Ôž hHÚbŦW|Č.HĻe āL„™€ZÉ׸{÷ģĪ^é€K 'ŌÅŅVpvˆ>"Á=ú}8væˇY]ōi|tšĐIĶw)Į/yÚītKëjt„zN";’ĩÎ<*}Í: {õEĩ†kV­[…“9Ž‚=ųYí˯y÷íßU:žW,C=~[zĻPMˆô!´ô6Y`^@‚‚ŖĄ1 ģėØIÉëŋįß,ÉmĶa: ÆųNüŗ÷Ī'BnOķ{>Š=ëĘiŠFđ đԎ Ą°Oé„šÉ e˛ ‡û¤lšéɧ7(ŌVPEôĩõdrūpéqķĩ¤ß ‰1Žē îūåíwß=\%E@˛ĪIĘPŦĀaŪ IH@ + ¤ĒQ †B†Ēã°ą’|9Qķûëũœ õN’Áe˧Ū¸}äÔcWχžœ÷ąöÎŪ3š@cUŨSir< ÁøųŨƒ‚xēØ9ĉÜĖĒĀn-Õgu‰ë (ĄĀ˙sŠHĸbŖøũ_ŗFÖjĐJJ'H¯ Ɛ‰MK=AՃØ`Cĩ×KcđxĸË×_g­žųüKNGéȒ7]mŸÚžœŽ)Ā9(ø_´×Ũ9fhGwz°ˇƒNÎ:1¨/à >gÁCUNˇ‡ÃĻ>ŲĩŠ9Å˙ļĶëæĸH9 ,Ȑ!ķ¨5•(d#¸žæėõjuŗPČūdŗœ“JĶą¨ę1rž¨ā—”œ–C–\ŠU8I*ĶÔč_=üūōũ7×Méq$ŦĮV„ŒÔĮ‡ôév˜!{4ëēŨOhųŲÉîwÄ[‹ų´ŒāĶËî'¯‘ãÍqņ°SŸZđ¨BGÍų•ŨŗĀŅ*Ë6DMŧ ūÄbųîÅlĪ?Ü]Ģá Žô´Gim†Ķ•4<_ŨFv6HbĮī.ÕŅžĨŦõ~ķÅŋÁđ6‚5öŅ(œ6~ė„§.:ͯģk~ÄN{îæãX^žÚܟ ŋŸaķ9ŗž§{iĩ5šž˜ĖÂTū(p”¨Įžė×Û„ÎrčĀD3LdX% „čŒ<Úøå€sx€5íĩl™ŪIĸ 8*°Ŧ÷UŊ0>§Ō'ƒúÄ`2×ę҆î°2ĮPĄŖņ÷W!š“üÍņ†OˇÉdûã™ûãĮÛf*ã•īĨ"ķˆ hĨ×~aU_x{,.ž%õŖĢØADIëävąnuä’)˛ĻÃm„ÅÎ;0øŪ¤Q<ŸØŪO^åt,HÂüâRļúeu$Œīõą6ą=ʇÕFîgĮĘØa?Itū‰í/tŌ&IĨeÛ|„úČÚ÷Sۉ•pŌgAņ+<āŧĻÎŽ‘ēT ĨpHŸąX4?2ąæĢåūftVz•ú7-Vkö˛ÂÔęÛC˜žkŒãÔ?áøŅ9đĪžę>Ÿžą>kVFÕ•ÃŖ}hŧeVdx§žÅ¯lÚ ^ĐĮÛŒjē;<›¤~áĨ3ˆTŊ…,ßį/ßl4ä¸ãŗŪ’F6 ķõíŨ~ŅĮęOr ŒtōuØĸžæ8a5ĶĖ^/ļxŋúėøuž×Æ;Œ˛Ë¯>Ũl&Įåä´_Ĩ=Ō~ÂĻŠœŋ:>3TąCėūûúŦ^MˆCé­ođDV`=ûá ĢíFĄ¨¯†ĐĮęĮÁ#/=k;‚~đ û-û‘ Ņ×ãĄ`qu]MÍ|‡+?6’Ã9éđS›œŽŖ_ąčΏĄ}ü#ąŨĩ‰(qsˇ—*ާb'hã<˛ ›‰¸ToŪī.—woģz ŸR Ŗg“(ÚĄXá}ŸcSázÂjFœæ‘ ķųKäØ.§<{DOøÂĮ§îŧāüGā 8öo>Kü‹ņ}č„Q5#˛Xņö+„Ė?Ž›Ãļwæ6ŠŪ/$€*Ė/>ģ›E×QŦgciH§`?ŊĒīøʲWúƒég¤Ë'•õ^î×8&ŗãxģ_Ũņ“ $ŸÜĻûfléÚëyöŖxõaã ˙÷GT˨¨ãnßÜŪ^đ …ĘĀ{Å$đøEyîë¤ĀÃŖÍitĮšoíÛۋŖĢõyęß/1ÚS Į¯ÛĻûæķ°j˙ jE 调Øúū"čX<>ģgŊœWôT÷›7-÷-évĀįcFņLĐŅĮŽŽ+&ĻüÃÍøčČáĪČÜęÍūB¸ËéøŧgMû/' ˙1øÃi^Ũ¯ĐwüŗouĆˆ @¨ÔK™Un3•Í‹<˜ĐîåožŨRÅĻzϤiĮT3ŧãÔÅÉ98>|Č#+‡$Ûˇ÷S9÷ŒBøt{Ļŋå‰'úh÷ŋ`{ŽDöKÂ~Á6 Ė‹ā ŦĢŨfņō´.ņɕ}ŒÃ+ÅĨ\\TÍ~R(j†<)ĻAŸĨäŖęjyøQú}X|eũÕÕĩāŸ~äĐß' ÁąėYgōIcį¯Ū~ū^ų)ļŗ_ŧ §+…åįy] į>uÅđߨ˜mšöũGu9žäƒũ=nÅR!<b˸™Ũžßũ””g2ŗéÕ˙Ŗļ_@&ģŋúø9ŋj;Nöp_/ŸâŅg(å]uá˙ō——ŋôŠ™æxČäŋ’@áëK#ļüIKõĶÉėŨxļũtö¯AfS†thÜũß˙áĪ_Θˇ†:<ãą6ųiû}šČũ ĘĸČFō›´ø#íŋúŗÚΧŗ_mˆ>6짞!÷ŨŧZā“åc}ų*ķ~ŗũiĪųÁ;œæ9OUW!WēÍÖũQL ˙Ēíųûõs…ČŪąû¯!qōũ~ö™~ė™s¸m‘KicmęˋõÆņüö‘|žPī/ūtŋøją9—õßV;Â×øđŠÎĮ4Oå!ŧé]ЇΉ[ûz9¯úäØcÂôŦÉG-–Žîaš]ķ¯??Ķ ę™69đŅ1]ŨÖ鴂ä¯Öū8Lķœ-û(^ƒDP-¨ ’ ¨…́¤õa؟Æ"MÜëø¨pp¨:rԑœ^ÍãsϟŨīeõÍ__cȝũHãāģ’jąŋx̎ûž{tĪĮ3Æsdv¤Ážģôę—Ėg‹üWÜÎ丏tFp÷p TæK˛ō.DĒ:AV⁈ ‹ t¯d—ŧEmáŠJš‹ )žK‡Ā5õE¤õ3KÂEĄĨö.!ŗ$Š"AŠy¯E æŦĸ 9LAŠ%aJ—„ĀũŨē¸Į…ĀŅėō$Ų‘ņËāEîVįOëĻx#gí ^qîđČjÍžü§oÛ×õŋĻičWhgD†éžųŋSĨh‘jŠįkŲī$°!!¸^å˜uŲŒ.ĩ‚į¯éžĒĢPh=3ÁŊŋÄũ’mĒVV§ėÉ Šé\äK­í=enYÕIéb´:y—Åę!‘Ųä6%Ģr–JēNÄģP‰K°ëüáj—QÍ*8´„Ķ/vŠūųvąškØv´ZĩCUi¸2@¤’jAĒD˜"Šs;#Ĩ„í|õ?ūųĸ‡4ÎĄ%۟P!HŌύĘCZŌ1]~ģŸœÕ˙_7^Ÿb û¯˛Mũ›˙‹›đæZ‘ŠŧÎE+eˆäŒUW“ĸĢm+w/orkp .ß]ŽŠ˛ˇÅúöZDļ>DŧQ_Û\kŊqŗŧ˛×Wzˇ­uÉ;ārûų[…ęĸƒ]vķęNĢęndÄÕ*ļËęū˛n;Žëõæ„^īÚh˛Øåîę~nđ ^QB5ēëôġ9üöî‹kĒ Į%Â;—ĒŠŪiĨ\‹ŠĐ!á0ƒ¯đÅũö›ŋŠĀ•ŠEhÕ,ĸ`PĶė 5Ђī Ļ:äƒĒ yžDŽĘŽč1Æh^ˆŲ‹v‘ws;ĄØsÛōOdzĪŧđ•¤z˛pF:Æį āËÉ­9aA!"J ‚$f2(C`Î †#–sŪ+iÜÃĒwŧŦ4ōĻ2ÄÖHÃËØWŒ[isíļqĪŗ,[åšĢžOûÛ¤7ĄīõúĮuđōŽCĨ¯ž×&{‡kFį[]Ëelėžž×÷9įôÚY5čB^4ŌnC/dAz†¤YHŌē*36IU›?Tb|û˙^49î.DktZU Ęƒ ¯M—öp\ąËPhC¤D†ģĢBUdT&BDĀ}îÃķ6Ō j•¨¨8„+ˆ‰ĮIŨŅ=ā>ž\'æT§}‚đ´vsŦ#šđpōûŸt9ũˆyĻé÷¯O f'_øûāĶCī­ž iÉ{=ĩžIË|Ņ?Zø×Ĩ:ō!G1r$a0+us'E QŠ \K˜yAU2¨Ņ…,¸EäŽÕŦũũ\ļ˙Ī?Uŋą˙ÉÖÛ÷W—ŅyV[Iåâm+÷uĖ÷îĒ×ėB šķÜ]ŗ kđũ[›?Ô?ū'˛Ų?\čZ­&,WHīÄ,™nM_?´Öō 찚üEŠtЅčĨaī.&žÕrGĨ\EĐģģ¸ē|¨KĩéŊĢY@„Ė‘īn"ڇyŦĒZ(Ļj$Ũ ÕQi|´ēá C¤”÷ô>}~lL`Ä@)|V„ĩ,‹0Ü‚Š!ߐvI!ÄP!ũIÕëQJã xw×ŧ8ĻĮŖ¸í3h‰1ôęč:>v›ŲY’×ė\ßËÔ:UŗDÔũ‘I¤_Œ8‡p’Ĩ$a&ĩ^ņāw—/ņâķŋIÁ÷ķ"B‘„Č{9¨ČT3Rēs!ôáˇ˙pņ;Á˙øg ļ&h›uJŪšØ,å=•¤Į/.bķ`Ģ=%‡EG’įÕÆŨŌ,ÂW"ŸßŧWÅ|íĸ­°ÅÂņuŦ:or„@–ȁųÃû-ÂĶNíRįŪņŗ${YWs K•réR5âÖØ}Õ$îũ%;øĻá…ëÃRiMÎnUƒ,ļ|€RS T5ŗjY›%u¯ÅŊޖĀ"G—3@ĩđ`JĖ‘Ė="H&BšyVēZPD…҆5`h"Rãđˆ;ÚîųŌŽĸ;âļĪ*槟û“?hČ:ķÛ:kKv܆“ø@SÚdqF’"¨X˙đ%kŌũæöf‘+7v”dėĄ?‘gG÷ídžiûņz<øēŋæëíL Īĸ¤$f ‡(bKĨ î_ cãbŒ­ŋ` ĪÔdīA3Ņ6{ŗD_kƒîūŠˆ˙øO×ÕׯtŊĖŦ4ÔŪ‰vûUJqŸ6Ļži*[ĪŧÛ k÷×ßfž3ĒĘp}›÷bicŲ8S\§;Ŧö|uĢ*ģq­ęôâČ*=ĖģŠë&^™nĖļ+Ķõ|#‘…%MëJŨĨ/nõĢAã>ŦaRˆ°y)u!ĢY) b&Pæbd w?^Ĩ41 ņŗˇ3!XŽ}Dy|LpĶHƒs&Ŋ3Îîōg(fCivL&cx÷ũ›Ų÷W+Ō}|vQ;Ū]N\›åĒā~v%Ģwt;œŪ̉’z3„j)W÷ōD= É-KWoĀĢŖ )FŠ ĀčËŗPŒB5:Į|ūo_Š@Ô žŠĻîÍš2wQŠú>6YRîŗÔ9g4Bņ=ė­Æ­F@Ž]Đĩ†Ų&W‹¤7¤‰_ĢÖĻÁŲ}¨äŽŨīՒ{–ĢÕ&=ØËŨ3°ß4Âj}ųCfĖžÍ jsQU~å+u˜ŦõÕM\˛#ŲxžlųYŪ#ŅDúæv%´J˜ãĻũĪWúÅožbZOxŊ<#1ãĨįyГíE­ÉŲķ>Fæũ\úė15¤| hÕ­nĶüå’ĸ‚`[ŌÛlûhÄGlš‰™ĮÛõÛÎĢé@nå^ũų˜P§NĖŖĩHŸCØcÎP˜ ŽIš.­ž˙lŪßļœb&§’ķe?Ro S;(I¨€ņØÍEŠĐЀĐę.ĻŅĒИĄ"] 00„ÉڍTĢģbŗfīXY:#BĨuŊÜŦ æąÜš´^Ų{oãâîęĩ†ˇ4Konænūpxšéۜf-͉Aí…!!ĸ$ĀķbÜv”WIÍ ÔZŗ{ÚĶFŨ•LÎcåxԁĄŠž˙SU'uŽ>ņÕųØåeĮe0~i™u 6UnsHÕ@J–`īLÉŋ–Ŋ”˛‹ãŠÃĨW˚–žæd]AÄ]37/ 0G8âi~¨žōí]\lmģi€Ŋí87:Ä˙´5Őúė 6)H=g€VJņėËëօ *ÚĨĩuXÎ1–1á“Ŋš”S‘ĩÅ °ūÕXė\‡h7,Ķ­,ŧé‹2å@,<ūe˃L6끯Nđ$‚õŨËō‡1œĩáŨ6÷ķ¤T9ƒWŸL„׎áGŘ+Úi‹ûŅĄâmv°ÖæaŸ~+ãĮMŖ¯p´jtŗģˆ-S/敊F€fĸA ÆB˜$*Eēģŋڟ=>Y֌úØGwT6ģĒʉŊ—w€žt0ŒÍĄŪÉ!`Ģ6¤'9lŠ45Üęíŧ*eŲÕdõ& V> Áßą2Üų/;SOlĐAûIŧ%“ŋC7>ßX ũĨŪ‰ŪŠęÛ){N˜N@ˆēįāMĖ™*ØĘs:ĀÂ3æd°=4r‚^€Tq&]:rŪIeFo/Ą‹íLf5#€6ŠĨĨęŗ hôLäĩi#QPo„ÚīĨx^Z`îŒŊ§ēTĸ¸™TYßÅևÔ{Û_:‚Yîb°čPq­ZPrŊkvkYôķåļëvH•ĐĩKröIäTĄ ‘âķ=34}ēų͐-úímŠÅDFūmĘŽŽ%ë…Ų@7 ’ˇ¤ŠDrėôŧ ŦkÆŠāuĮ•”ž`Ę3ŽNî­ˆģŊ ¤wÁĄ€Í€ÔdÁ‡ë`ļŠ/æ‚kqũ"žq¨@)pË`g)8đũ<Āį—7Í6ífü˜øU ›BØ>¤Œ–pH۞H˛ÎyˆSķ  ]ŽĐ…Zs‡Zĩķ~mFˆ‹p‡ŸëS0Ąä-É}ܟÉvļÍúW:+éÚHį,¨Xö4<€’u" ā„J‡û&u1åa‘ úå­ā=ĪOe¤h|†Î o)礆‘n"â^Į3Vˇŋˆ q6PĨ˜G“ C{l…TqŅŦĻ °ÆãŒÉÂŗMZ¤û4ŋû?^˙ŗŽ:’:& LU‚ĄÉŖĒģļô¨5 SB(âM%Ųd Â$3’Ũ6ŗÚÄJ ĸŋÜčŽĨEōŠô†RŦ?úQŽ\ûÆc„Tš9=~ėIœLw?ÔBw­žËAuž=Ũ›ũĨŨ)kL$!´Đ‚{Žá„Šv‡šS0ĩ]ÄycŅfŠHl!ĩœ‡°ž‚Qd<‚Ø1Ļũ˛;" PĨ4oöj{[×į÷ˇ[ą}%VŅRåTž­ĄŪP*1ˆKŨP‰Ģ9Ēģ-âöæ,aPĮ(ŠŽb;â*DĪČW'ƒj€ģH6ŌUt -nĸĸÄtĄU° „WÛw_ŨĻYđˆ6ũä°6ŖËFS#V0CÍčÛ€čß`ˇm#roō†útä&]ÂįŽŒ8•ÖŪĻĨX jމB‚Ēå|ƒšE\ƒ8BũA˰æģ=1į"RVe;ņ…~Āah?Û@ęîBQû¯faõŦÚā~›|V0 qBVPƒPÛÚĮŠ4‰ōė˙Ũŧq9į^ŌWu—U Q*=dŠ„Â)¤w'+¨Š!(\ˆ (j-Æ Öt€ÚŌ˛jÉcŌp×ėūíõ/а¸ĨëSė)ßŧ`ͤˇeéÄ.Îķ˜sėøF–à %ߑ™y€#8,ûÍķŖô™P‚y1‹P\Š*„˛“Å—juLÆ{…÷¨ixŗ?YŨņ+‚0ŌZ^Ž—€´.GPoršh%DØtÆҚĢ{k˜ļ•į›0‹Ž9ą ›äįp¨„H•ôb`Š2ÍÛP_ŋ=ĮöÃŲîf‚ ¸Õ%´”#ÍCđ†ŽYbFąNUÄĨĮėHŲ†0“â„´˙‰@„.‰›ē=yë—xķöë ƒmgņÎqéTČäī1LS‚Įäįƒę%âbQA€6ĸîŅ~ÕČKqdįČÖúˇg6ÎĐö‚,Y8°áíȈSe€ąž›üÆÁœēĶČ~Tc„(;)Ž )‚īŪŗžūZ“o—Z[Õ&Ŋ•*  ÖhwĨ‹1yÃJ,¨;^ֿūíz{ß ‰™$XĮ] ŅØyÂ)ÚôÔTfī(2Ŗ(]˜)Ņv-û‰Ÿ)āž"UÜÖJqĮî÷y|ÅÚũúuÖRĶĨ¯:T­öøFí1Ŧ÷î#XÍ,2F%|Y˛åčōxeÂĸ÷ÕUÛ.Úũ.&'÷ZÎmTF"Ûnēũ‘ŸŨrĪšˇ<ˆĀ]ôTmßV bģŗ‹ bŸtÖ *œ€¤0D4vI*ĸI¸<¯öŒ˙ō¯ŋūfâ (3u)í? ģčRč+Ä xŖ-‰*â ą°D"Ū’ ƃB]¸ąÛ߆Ú`rÄĀŽkNO#zäÂ~AĨÛˇ|īe´ŲÅ G{…<‡,*ėLë˛Đ%I,ē+îG÷> Á„æW_Ša{}V Đ&ö´‘Î\uxąkŒí÷~rö0Äõ”eÉĶÔāäķŨAęna *Ā3 Jģ¯./ä,ėB…z7ãÆ@ņ("ֆ>Î1Ɍ¸ Oŗ@@h‚ķß|w“ŪyĶE•II͞FšFĐ@ÖhÕ¯ƒÔŲĘC)’ŦŪdYä( „% =ŗŦNQHTõęæOĪm Ážîx#Â@Ü\’ƒėhĀ0đ´ŊčĪ#ZFGmËTZŪ‹‰­ߌļe 1Fûtô+ŒķWĢŅ“‘ü,™Ä.Ö+… æHÃĮu O,ÅԏtÃE<:ŋSŠw'FF€ÛnĩÛžūŪģįØoŌ Ô ĒbUŖ”ėǐAĄ0J„Q\ˇĸ„ŗ”OšJŅíĀ{Vė>Š$ĻÉ"j*ˆėž˙ĢŽË¨Ô@'ĐDË¯Ž¸ M”Ļ6ËG ĒnõJ/‹öāW‘ƒx$ cķĨ¸’€Ė´gŽVHHo7Éė#ŨâŨņ^Œo–Ž”; ŋĒã'Ŗ{S4 …IpņVh+ũ<ƒ÷<.†zŦegXĖ™Ĩ%4˛NA…tzŗX-ĪՕ¨žŋŠĶŽ!ĒD‡@$ÍrÃļĸtx…ŲUwâ‹ŗ‹Pß­Ãų"ôcR¨•ËpŸËˆP2ÁEĒŪÂĢß´FŊTęڞ)ôx\ÔąŌg —ö•‡xʃũí uNÃ<WWģšôˇ‹TpÚ[ųR ›ÃĪ2ü?œ†ŗú„õÎÎFˇKę^:v;>vŌ=}Ēņ ŖąĢ$YŲfp@ĸâW)ŊJĻD ž?É@ĸNJÕĐÁę9SíyˆĒ¨žūá6ÖQĶā¨J°Ķ]tJĮŖCmĪwk\Ú^Žs´Ø Ų—:o)ŗÖ Č@,ĸ$t$4iåÔŪ WåčZō ŠáNPcŪXÖG—ŗJ8Jėßqj{ũ˙üc¨Ãņä´ĢŧēOc"ǜ:ærĒŋc‹S1*}ī#Ū06˛'ŧ{ÃsĀIâ’ģÕw/$$Ũî‚"+b=IPø`Ļ2B™Ž•ŋķË+y–æŪéBĐ ROŒrôōt&AËŨ‘rāíØ…Ö˛ƒ3ĖS¸šN_鞰ŦŠÚÛC;Ą§øŊ‘ŠåD įâ˜ĩØęâî<ÖT{R‹ZîŌÜëŗB­Sŧ4ŠK5 v>V1•δÄü€÷¤é‘Q!/Déb2~stZꛕKvrßüÁ˙û¯ŽCœšŌwœĨĒĶà ]ŠüŅŕ׊ķCŸÍë]LžĄįĮáŦ=Đ;YtëŦœŨšŲ1mũņpÄSk)QôĢ?ßĖ*VFėĐĖiOĻ7ääÉ2zɓ)ŋ‹ėēŌS¯ŽJYË.?ŧ{fĮm”ÆŋŠģŽļų䁎#6íS7wŽgíņ؟|…ö‹Đ&îȊii?‡ŗÎÂ{Ũx]-)€Ø}hvŗīąá TĩÆųô´ŌßNFąõMŒÛ{]ėŊãä EŦãPėŊ˜ĸŋ‚ķՒččÚą#…ĐÉŠŽ g8›Ątų^Á^RuĘGįĮŦj{xĩÅŧ!r´­ōÁ˙›) ´"°¨‹Ũō@˜›Ëú:ĀŠ"ÃúKŸōāTm\ķņ?šG÷Ũ<Č`ƒ”IzQBH a×4W/âūné0yy#Ar€qVŊ4†‚ž‘Ā’&“Ft^Wķ{•y¨Lz‹[čŨã=ī/”j~û”n"ėlˆōmŲâ@é‘ģÕrCAëĢp6\¸PhƒXŌ§­öäˇÉûO4*ęɸ‡@#„_Üjop7~z˜Ŋ˙:8Ŗ–W˙i‚ūaš#Տ”K]pFjŸĨ0˙į6'@ĄÛĩlcõ¯ŋ¸¨+—ČËŲŧK4ō—ėõYímęĸ8Tå~]5ļĒQ(Pß{ĄĨ\† ęxWˆ„PŦO7P4EÛĩ;TŨRz]/Īgq8‚~8ąlļŖ2ų{¸ˆŖ‡vDãŪ!‹S4xI´mëõÔg>;i0WÄ u“ĖBH;5épc2æģĒŽ$Á…qķōú'($‹Ą‹™˜ŌN 3^Č)“;â.ŗæšģ†2íjT5uŅ,˙žŗũ"~ķ5’@+Ū5y> ]Žąry‚§ gO;{{žģåíŽ)ęĒ–¨ÃMŪsŸÅFXOfEŦdpW F¤äũ?]ũziĻĀuĘ ä3;äw ĀБÂŅß)aųp§åĐ|u ÕøĖüĪ‹­‡čÆJ<ÎļI*XJ„„a˜§J îÃ;î.ȀZܧ͒Y$=Ņy€ŗp÷_ą|ŋ~v}ÉB rŗŊC¨t'Ī$Ũ?y/ķˆĻfcB?_Ũ@ø}#ģ…Ĩ3Į9Š;§­…—.’ėœD€…° cEŪGÕښ}ÔˇéįÉcö~3Tp€˜U‡PwpwĻŧ‹P˜3øîÜHĒß+īƒßũņë-|ųq7ŪŪŊ}ŽĐ"Já J' ķžu˜)DD\ ŪT¯ˇŌû´0¨gHhv„ĘŅ4‚S N3‹KÚv°ĒcīEē°ÅjÖē3œ=ŠHOŪ?õ儊ėRúĢGē'×čc8Y8ķÕ˙DęģŲ^ĪđŪ#X)‰†áŊT…ŠaqŗįQo‰[åĮĒŌíūÚ可æw‹Ģ:ÜA…hœķ ÎnÄ]ž•ųúf§:ˇŒĪ‰?‡°ĒâzéęĒN×Eö‹ÚŌks™ßęŒTßÎjkx|=G1_5Ļzk4æus33ûķģôՇģP}˙ę<ũ~ëģ;H4Ŧ4 ™ĖJcBĒŠÃ=ēĮŠđúö<¸ŨŋĒ{øW‹Y$h j˜;ĸî\TU ­&'ãšņōģkëĒCtV=Į­îĒ'‰ôsߜŅŅ1ĪGn/<™†ŸÔ9 Zø‘Ά°íĸčIĒæ!āLũoŖķ?$qi}™’8#hn ADÕ÷ "í5ĖT„~{æ$•{˜;ÂÕÂøōÚ!؉uÁĢí2ÔAĢŲõåÍëîyy/ÜR)›Ų6XjBpoLÎßßå˛ÍŲĮ Ļ=åŪWÎķēŦô!FõÅfͯÖLŗīį›Fë÷ ˙đ†?[aũ‘ÛKũ¸rĘL!Ī|îu%‰˜ã!\Ëęͅ5éåz^‹5„KŊúāÍFˇŠŨÕũųJŊŲk´ča K.Ī…*I%yîį Ŗ š¯´š[ÚÍLjOą$ƒVL"Š5Ļ–RzV'Ē%…+Xq—øŨŋ֒ÂŪ\$Šˆyęč1oũ _)}Ã'tđđÁZÆ7ŗWŖŧƒžXöt”%ą H<×J·žYœ8\N” ­jßāNrˇØûÂL•ĒH7J€y %Ķ(–¸OÂŨ2%Ēī%g!MÚkPĄ6ĩĒ'SI" å˙t˙ÍßĀJgĩüđŋëß<ŋŧՏ"ßUšRŠĪpģ¯ô–ĸę.Ō%hJ0Š’āĨÄ˙;yķšA^6†oö!‚÷ņų‡íŠî+‘šŅDWÎWLîĻuxn}W… ĸ lė,˜W ķį4ˆlõ,5VŠu"DrŊ0ķįˇaæößūéÍų?ūC¨ëŠž]˜ë2‹ĖU!á„ilQ¨K6,rŸÆ‡ČFlļG¨Üã îJ'=ŽÆkFuēˆú†ÕY…­Ēxō„ZĩO›ÅÅ'$ĐK*÷āSG‰ŋ´GrĐډŗL8c¸¸xĄsTėEã—%_ô­“1/P Ũ>d˜Đwž=ė΍ĖnšØFm#ũRé¸ü‹ķwÛūNC%÷ëümĩƒ¤Ėá øvnœKÜŠŽv{bi§€Áíbwíüîeˆ/a.h<Ū3!*"ÜfÍÖáz3›ŋĮĮ‡0W,ü=qQŊ7_˜ˆ+ŌÅŲ~ũvĩô+á|įKIލCƒĀ&ų"+pqžž~ŋ–˙õgb渨^l€$Ō¤•†3.‘FtTƒlb Ƙ­ÅD É´Úے@Ŧ°vÕD›ä@ˆđ¤aK¨ĀÜUŧRޞÉūt#\ęHÔҍ@Ú'Šlj•eŸœskšfĨ.ŅQ™­ãË­ âûÚ)ęˆÂBô•Ā<´1ƒH(āĖį ŽŠˆJa]/y8AŒņjūŖĩŠž8ôĐ Øzĩļä}ūrÎ ŲĸVQœ/oˇdœ ײyˆô‚ä,™å'Ežā×-Ņۚl8h߯_ŨŊ˙Ģkųī^?3ĶJHŠzrǘˆ'™EÜnĻ’ž#mĀR’Đ˜[¨éfj÷˛Bc–¤V_ŸŨo1ƒ)čvsqŨT+ ĶģÅ;ũģEˆUڙ†[khÜ|Įglęp%Ö¸fōI°Ģg5īxáÜ@ę>ōE#5.ŪĨŗd×ŦfđÆx†ÛÉq/’ėųËíVLÄ ķ^WôŗfĢņålwe˛ÄÆ‹x^O)>{×7ži<"­PWh.ŪĸÖäĩ/÷”Ks$ēŋ¨šd“IŦu_‰\ëXđcŦĐų@žpĻëE´˜ą8č>,i,xđ“< Į;iŽ}šĨDĮŋ~é-:?ģžŲNķų‡›šlæ3÷Ũ•RjčŨ@{ iu ´ր´´ÛĻoVĪE#ręjHÕöm1GO8ŧ3F—…ģ@4TE-!*r$7GˆAEŌžp‰B!Éw˙ÛÛ_˙Ũs┍îf"ŪT*žRĶ$ĪlėN—žvÁŽTėŖ=#iUøøō&ŊŒRŖIIfw0—ÅW‰AüÅnCJĢ_5ëĒ bÍvĨā™ķՇ3Ÿ§ųšŨpΏēē õöö{Vm’‹° /¯īŗ;â­r§ĪĒŨÎ/nü\øŸk%Ą¸: A%Ĩų>=ģŽuu.øŸ‡ëĒ´ ˛Å-Ŋi`÷C-ÉVˆ§Ā1žG†ƒ¯āDƒŽ QsŽ’üRõëīīūŋox} œ…JD-Sē}dļ@pä˛ņp}÷úŽ7ëķ(‚tC ĨqŲŨ{ž NgŌė,Úu@¤LíHĶV“HWÅ z}ģĸ×nAî}Îõä܎škˇ×Jy@2åÛ^ЈtˆĒČ<ëÖpŸHc:„ÃpŠeéėžŠčÍo€âyš\!Ã}w˛2šn!šõĖuĶLčĻũ.žččŊĖŋÆĮœ-4UšiĻõ4 tedB;Ÿ^Ŋ­O6OŗĩoG–ųØpW&øœ§Ģu} `hŨ'(˛ZŨ~ũę ĢmPŊōω ÜRé!ķđ€38Tĸ[ Ä(ĒĀî>ŨīfwÜõF@ų]$ z䃺D¸õ„?ˇ‹ã} úeĩ<š Deųįgŋ=ë°äQØ!W5Z˛ãĮzXįŅž~"ũķœŦ´7–ˇĐē­ØCö¤?Š dN/cSƒ™ 0ą *\uGÂÔōxŨ(;íĘÁĀzG #ŗ˙AãVŲ†øj!ąˇ)ĖņŒĀ­ēûđ‹mÚģ/īĢ83Q%D¨ŪĻ_2Đ@ŗæĸpJ;ĩEPTsî˙c–yˇŨBëÃÉ Š …Ņšāāhô!FrƒcHļ!ÄĶöYXt™i€™îĖ'”¸ú?Y¤<̇ĐŲĢXØē)&ÆQĩÎF!0†›@(1Ķ]ŧ&/ Nģf;Ų§…IUp§O]„ĄÖ Žŗ„ŖD€ĸõö^{:ß=w—™Äh lĶL‘ëP4/a¯‰žŠ.-xá2(Zú”PhGHķē7a,hČž+fķEuŠBš„pķ~Ŋ˜wķĸĸģ)NS8ų¤ Įß&Ÿ Ō+)WļSîO|z˜˜“ĨČWgĢZFŊt0‘Uį_:ﴚđ‘#đ0—1:à …â˜õ–ᓪMƒ4Ííî!€õîî­ŦM•%Ŗ+O=ŽÎéM†ņ¤ÍKû~ģŨn+‘&kÚK~Ŗy2:´3JFōōGë2ĐWtR%3œJ@V’,.ĢŽhČŽXŨŧ†E>žrĨzuēāíw÷.kGKHÕĶDÉJ‡ÜŪäĮƒŲaíqü3én­é5‘ģëvčNŨT¨Vp‰GÆ&#ė°ļã% ŋ—e”$ qĩÁzsƒgI%ˆ M\r0v§¨H =`GCv–C"pÆwØęšęjŊ“iQcLéNfĶ2Į¤„ÎR(;FšEí¤0-˜‰Đ-G•‘ŊaTĀŌŨÕĸîŅK)`—ž—=ü¤åëĢę@ ĩY‹†sPUGšiŅH‡ķspę‡,+Ū?VJųŲ€˛Ĩsļ(¯Á`Ä^qÜWyƚ+c›ž×ä{$!p*ÜŅ™8ˆ‹ |ũÍ}ēÂģsĐ/üŲ3@Ŗ@ē&.Į‡ O¸˙bŒÄ™TË{­åõr,Ļiš˛§~‡d2„‰C!"ĒȞŨŽtá቞įāØV*Ē iæ† ĄfjÚ}˜ û~Ž,(ÛąËi•ō­Ū9ŽÉiCëíú>ßŖ|éČH16Iî‚ –vŊŗOŦûøIá&›Ŗ’aœZáŅÁĩŲ(ڔcĘĻuÎčSM@¨2KÉxĶ$õų×õĮÅŲåúôėyc!€NŠ„qžtī—Ą­hžMäGžz~frK€ā E†HæũÛĶōN¨‚.QØ m×ĨKE1)VC A€…ÆJh–wi3ÖÖMŅžŽ”b#؉Mú‹Kt}Ŧ%YîįaŸOŨƇËRäėR]˙ÆY$%`āA¸/Pņ`î“l KŠŅ3šB›•ĨŊUĩŽTāîĖ„Äŋz]\ŲŅ;^.,ī|GQļV:yíBkČ÷Ĩ(Bŋ9ßÄjÉęĻë¯Ũĩ65ÅÍV€ ļˇad]­!ÃÁP:Á¸`ˆ;!/Žŋ×?|ÂčOˆXZ†ŠLįžBÅŨ|>{ķO_ŗežZ3¯Iw¸RĩÃ^6T4Ė-ž¸Žéî’ųDu§ ˜žWm }pTYŽHë錇h-ˆđFoŽL˙ؒ[§SÕÚõ0;Weī8žž!8°,ė îĶŽĖ)gR”Įāėč[ƒīņ[Ų#ŸrãwR˛öōCŪ2+†ĩĩnjרRÁ|˙W>žļũøÛũĢ_v˛ &LjĪôšJ7˞`ļÆÖáÜŦģeōžˆˇĘ:‡g%o‘ŖÉ¸ö4ĪÄĨ“ Om0ŒKaėuöGčĶĢuz‘Û§l퇿™đûSF ķ(Rėɔå=Ųü'•Ķ~Â'Ęq´ŪāĮC/tstyų…­J\ĩŗVpvzd!ÂâWŋßWéę—ÆÛģoÎģÎ4ē¨Ti’öt5 ŅĐTÕšÎLzR „”â .'ëÇéq `O,…DSPH¨Tšą˙ę‰Ŋäcú! / ĒZé¤g]ļ Ŋé̞+…zųiˇOq_Ÿ(Ĩ\ã“Á”8Ŏ<Ж|"ĶåN2'ŌsZĒŪ_ "2į^e÷ŽąIučä+”ØëRu,T7ū‚#dg Ëûz_‘Q2Žc‰•‡Ÿtd^Å Ú× pŦ4ÛßnXĘĸ<-‘ÜĐJÉÁļaÚrī,ÉvĐb4;Ô|V†Ä™öŠxÛ§_ŌqQƒ}ÆˆŲŗ7/R#•pF1Œ7ŽtÕۃ”5—įˇAvú˛Ķob¨´12ˆQŽf6čë&Ҏd‡'„`ŽŲSīļ™—ÕNŌˇû“ū‘ũXưZQy}÷ęéĮ>šÍFwÉÕ>|UŸ,O•ô)YÆ5@o‡¨8—ŲG+pô)÷TDVÅøæÍzĻgģ;NĻß퀪Ķ֟fpÅÅęÂŧšīs÷‚ĀsâIŽIŸz1Ú3 ŲF$D€iWUK™Ö9&bDŨWx•P QÉ9ƒûÆČņ’ŋv´‘WŽÂŲcIFĮ2ûŖoiâsSՒlEĨėēîˆņvĶ ҏüUUŊ&ûŲķĒ boötž—ŌŠÚoŨ˜ˆ°Yí¯ęúYÔúĀāÖ=k,ŽEÅ,¯ŠÜOŋ:‡KŒÕ)€VąēøÍ‰č']=^ë {nW,†K´éÆÍ/N ė“[ūūšFɉ´Ÿ­Ŋé\î ÎA˛Ũãōo+d/r–ĩÅ9u5ŅoWsÄ퇯—3æË´Ŗo{ɄÕefsąVŸW;ųũ_•^°hĒÔáįJ?â.ÜÁŦi‹¸‰r÷TÕÄwō3˰^yŽŖ‡ņģ fí,:)Į\ö‰lƒõFņkr¸Ã‡üŽĶ7ú§­cˇEPH ']‚ö°'Ēæ=úP ūÍÍí o^`y;×6Rh{Y´A<ŽáŖöFnęģy8ǍúQ3“SĶ ŪĻSõ—Ŗe…(šīq6ŊVĻ÷Į‚ā‘]‘ÉßļŪš%KĪŒá0Įs†Öå‘čŸŲXëÄpĮbĢŖ•ú‹n´:•tÆ7šĨ†s" pöžŋöČüŨˇ},*ļԐƒū8´ Y¯y“ęÕÍŠŒīũÜĮËSņ`;9]Ė‚oo~ßž úåöwôŗÁFTGž9Ķ?r|œôŲí@b|ČZ,{°B­pķ(AĘĶRĒD&ŨW1‡&mŖļĀKQysˇöloÆÖŒQÚ6Ëa%„6Ä=-æ˛yvëĶ1?m‡“;,mvvtWŠ[Pžm“pˇFڊL÷ŖŠœØY°Đ"ė|Šn(EüŗžˇĮ§Ûmė$ėxn‚'ÜHô§8 ËčcdVČĨ„’Hī)A8|ū‹?Ŋmö ūâŦOÂ-rā„’ĸm’bj­ŗŲū ŋ}>­ bĸ=*–¨DOtēsé ĀûĢTA%ŅšKH5^V8ĻĶõø¤Rx{RæöÃd.?¸ôGĀŅ“ˇĮKÆļ­ë`Aģx@XŌy[ÛúÃÎîī"Ž"}k˛ĪB^5CũōÅNpš¤ĐÚÔĩ6ėdA<¸ˆˇœ(˜’×u8ÃåáĐ2î6†1ēi˜t•ĩŲą-ŲHŠB UĀjūu˛8\ ?ƒEú|×ŪâqúõsZž–'Ŋ[ČiOÖíLNqgÍÛE đc­=}&Qā­j¸F€ŊĘQ(Ņ ˇ›įŅĒs†ĘÁ9é'āYC.9ŦÃöß!ėnŋŋRķ˙ÍëŅi„Öą =ÕĐ.Íøøæ(ĨÚŨžĨ\†ö\MXˆŌ)å3áā¤Ę[§‡r –@%ėM¨~|‘~CiČĖzšĪōCÕŲ*íoŨâËŗ.79=ô@ĶÁ¨æęŊ÷¯é›oÃëíÂÎ>gĶxØ“Ēĸ-ģ3õ9„LW”­ä\ļdš§Í\o™TĻ\ĩ–æ ÃŅ莊^mŅē[|–ŨÎ'”‰\oĒ(m, š„l]ęá„öˆI"ÁŌņlZz‡mŒ1Ö¤Ij+[éz( €ė_ÍŨ$Q]|ÜCŊÎÂ=§ļŪčfĘ{ŌĘîÛ$Zāvąˆ‘ōl–ŸgŊgúãu’ŸĸšgĀ/ŽXAK+R ›Õg/א žC$×ÂhU_†cëTĻF*ʁĄlqzIaŪëĄíĪš?ŸTŋāxīN„†Æloį\Y@-)SĀ–K42›Iqu îRĮdN¤ũŪ.Aã˛ŌÆÉĨĀRpVŌ°“Ā!J{z’SÁA„œX'$“yj\# ę"9Ąrž‘†­€ĸŠúģ{ Ą5……æŧë=4wĻ>#ʡõ×mÚoÍ#ÆncéÅ$F㌏¸GXūdÍRk˙ŨČNŅš­(Į>)ã5ėÆŠôģpĪũ’&öûW˛Û‹+:Ū;%TwɈ´ĮųĀ,Ū“HŽ2úÎW¸Y&6anÁŪŦ—ô™\Û*ŨĖWęRՐđAį3Ü6ūUĐÕ,lâõ2¨2V…ĒIßūíģß|ŧußíļ!˜Äpˇ1‡¤téû}Ŧáę ļ 튈4Ū,´:îB¨ÄŨ48DÅMTiNļ‡¤Ũ%ĐTā„™' ExÉõŋū­9sJB'„Ųķ…í=ŒâNšîđœŪv{ōœŪ§Ë ‘ÍmĄEē˜ĸÉØ î)÷é¨Né'ÜŅ­­Ékvu53~ Pą]ŖUļp:)x~×%ĮŪ' "™2ŋ—  I7ÕÆcA—€$QÍáC”Æg$ †āT#|īŗ¤JŋIĄRšˆsd§~õ˙ųûů/ĩy-~Ĩ¯•iפ %ßČN˙"–Îįoŧi–ŽUŒŌė4õ̎Ûīî*]ŋøAâÜ͞ņļZHãĸq!AUˇ•(>ß#’Á­‚*w‹ûgHIcTu aj&Ķ*¨97a’Q‚yÜĖÄBÜ(° ‹”Bl^ŽoūxY‰„J“Õ(˛ u€–D ˆyPc0͈.W CđfÖã*ēkđƃ6^Q=…Ā ´ėƒēļ¯+1JOÆJ\ÖjTxvĪlŽ;1 ųŽJ8Āđԕڜ’ß›V–0ėBdžMTëŽQô,^>°î™'s ø—¯ūöÕ?˙õž›G1¸Sē¸ĶUĶŪ ĻžT8“åMpˆ'Ė“m4(ŽEá•4 ŠØ:—[¯jŲ^[¨–ŽųnÅü5ŨŧQ,„&Ü¯ķŊhõ6m­j Ę{[Ŧglg•Q]7*RÉroˇq†´’€ĸ12Å|7 wÍN­‰¯?đÛˇÜā6͞.^üž’{šŸÍcHdĐÅÍBūœŽ1ˆÁ÷vÂŽÂ*ŠTî^¨V•ŠlUÄCO.ąĒĒ~´eTQŗ¨^8ÃgÄ>Ÿ3:ÖډŠOY2[ž“ŽžmEĘ@‚ްūã?Teȝļ¸( 9ž05ûxwˇŋ”ģtqV_ŧœĢbxTõ}-„€ßäs]˛0TrXOAV‚Á=įĄđFUķ(˙üŋÜūúxŽ’#‘Yƒ ts¨'4™ŠyãĩZJĸĪĖDly{ŖŗŠqgJ¨Üdž ęIDî*Ļ__îw~~˙2Č•ŗôۛg|žžØ?ķģ@Cĩep7ęŨržqlĸīlWEu;˙hB.ĩ ˇ¸åĘė|ŠrYŸÁP…7+÷…Tĩ4|˙rĪpLjĩųķsQČ߉ƒ| ķ`ŋŖĀpĸ<•YāųÁ7Š ž=Z.ŦEZ– Ėvw9mœY"&Ŗ–úĪĮŲüMÚ¤8ÅåÄč:4ÛÅoIAüĻŨ—ėE×A¯ĪZņАŋūŨ_<ĖâS×Ģ—dž02Hv:tŅ`ŽDÆ:"ū_öÔ Ų(Ö 7¸FsŖæj‰•¸oĄ¨Ø:¨A!×JĒ&ƒī}kßQTM¤i6ļē=ŗškTØ96dîg{§ūõ@Å? oxhâG/Å' õžŧœ2ūpšķ[P-ņŨĮ_>Ōk{M—ēōģũĨōöĻ9"ę?9čÉ Į~ŪŖąĘđ1GGhë ¯VWģ0íõ$m=ŧØ:}uZېōؚköŠŊ|QøūĐvëÛ?Ĩ‡ËÅä/-XēvH%(L°äAgˆ§T…ôø4œ=+Ü>ŋÜėE9Ūc "gqvs_š?œjgĸ×ëĩ,Wëõ~v"Ã÷—*eŒX(úü•,ŋF^˙q†–¨íŋ÷ôđDd6jķŧŅ&/étkĮ_]ųė5ũŽRãōŠā*“oĖZ7žp&õ€a#O,ט•† ģģŋûžÔ“24{ˆÜōQë]ØföúKKGK„{ <žūöt,ū¤Įãō™ārÔĢåKų`)mč§Qg@ŋŅ-IđáfûßãUœp_ÅāĮc—ûo_ŽõąhO hcĄĩÃ:˛ŏĮn_‡ŸĀ(gÚŅ‘T?cųÂwď×ģĘg´!–ŋũūæöæ™HĄĩīūœn™€y Yũ:\­pĒôwΧĄĸnX¸­¯u˙I~R95é'ØĐÁōÅŽŋŸ¯t¨ŠôƒíWLôrĩŊųI~۟_?´°(jĩøŸ>žĪ&JÆhąu'ÍÂōîÁĶņēf[­÷ŲeđScB|VéŨšęŽĘō™øėanč N>°3Áß ų]UĄVë˛2u”’öÔČäÅŽž+ęjģyûB§QŽ¤}ą°Čū B“9†ŸčZͧ“áŸU¤ütŠrũ)ʧĀY^OW1~ščXy›t1]FÚãüY@5îîû (Rū?˜[`ēöAüˊލ2Ž •4âē'l`öy‚ëE­›ĸ‘§•Gģč*<(žúŲpړálĐá?4ļ‚žũâ‡Ĩͤ•ŋ´:Đ!I¸§áũßt1ĖĘJ ;˜Én{Ķ@WįÍ(ÉÕaįĮиāØđ(í @ũn‹Ģû‹b\?–ų÷ Īž@ĄĪƒy<&×,‡8Dííb2÷•†Ûą˙mųjÉĢÆäX9Ā"Ūōhôģŗģ1;Ÿ9ŪéÛ)^(YãųôOuøđąœ qŒÃūąå`›~j°-ŸHŸ˙ŽIžŋԨ۝–ņw.ĨŅ€8Ø' P¯°Đ>āq.>$G85VVÍģå\ũM̟]ÉGßá?Ÿ´ī ÕÖßî]ʡ?ˇuņī&Á8^ž g2AčZ+ŧ3ūņ0wĒNļÖŲeŽ×ÛUf…ūzÁņ izēöÂLq`äŌõS¸9iã3‰+&<—ji…Dõį’‡Ô.?EyJœŊļLāÃ+?Í`G ˛ĮOÆ_ZZ'G'Ü?ûø6͆:JnV֚0ÛŪ] .rZ[‡ß Ę˙‰Ė樖u+ĸúėS~&hEđ?Y ŖQŊą‚FP^Üyof÷đ3ÉY˃búRÛ(āė˛PH\2͡mpĐÉÍ9ŠV´!ņķĻ/-eF€â×;‹MúņĄOõįDqÁYí…ãß:âė§ĩƒm-ŠėQ`ēV',hЊûÍŨÅdô@™=s͎Lrš[Ÿo,‘:Ÿ Ûe‚Ô=yBč¨Iôrf‹ƒ€8_Žošģ~`{Î&|đôqgi8 AōĨ˱֍}@ÉA‘)],´jŽîWÉŪŋsx!ÄwˆMœáöúˇđÍĩŽÄßzh8˛T§_­mÕ“ųâe:ņ}ŽO,?Zū9í88~†Œ”A_ywööõŖm˛€žŋž!~JĻÉGËą‘‘Ü?7OJŪņ%t\"õS—“4ī(>ķč×.“ZŽ!ōâÄĪA´tøHʕQZ”—/Ū}ˇx•!lŗû(îoäŸÅĸļŪžX4ŗæiÄņĶ%ĶcîƒR—p°Ũq}Ž_4? uÆÃ•ŸÄëũI$îĀÃ~(‡Gûč ŽČ)+Ÿˇ¨‡oDMũgģJo6į=¯2Ô8›u”•DŽ™â]*´č#ŖW2Š0üö0Öe•oߖbÉ’.nĶúōįQ6NčÎAŽsđė˖ĶrãXę‹ĀûqļũfūÁs– øØFi'–ú2ΞkP{UÎd^ĸ’ ˆîŒß,âę ŖęņžÆáY'Õ"ū…ßŪ@wBÜŌūũķŸNHtlxÃp~&ÍĶI|vĸûBŪ÷)ŲM>Ŋ°éq#‘ŒŲâŦŪĘž‹ë3ÍŲ9)Ŋ´ė|n$ÎDŽáĒū‡ãʅ‚dsé=ŠĖCAĀķõËø{%tcč‘ūņşDŊ}:öû49íDķúsžÁ)Ĩ“ĮS –^ė¸úeÕ,\Oß?$EDŠ.ī6ûæAņjÛgI?|ēkuīšÛ,>%>ZāĄ$î' –DÚtãûŠÛĪqŠ>ģæ(]A“GĒuxūgÎß_ö:rü­ŨąŊ’y˃™Lj—Rũ˛‡Ņ@K|æĄē”õÅQUņiõņ“KŸ2YųŗpļĶōŖėļĀ~š2b&Į–<ēĶŪBÄ dņ9íėīįī˙šé’Ō?Á š°÷oôæã'ĸ“Mžr=éFtâîį>o‡1֏Eh%Ž5Ln™ČŠĖ9ĶZŸ6ƒ¸î…Āŧ8u#e!Ž}ųōåQt’įmŖHÕė›đũn{ūGŊLū‚Ëų:-™Ö:čī]ú(Á"ãj‚MŪŦūæÍŋ9;F~´ ¯Ķ—ŸUÛ4”"^PĘÁ_ŧËfÔĢF€l`pÜ`(Vtĸäy LAēģ9Š”s kņV÷Š—Đ^ūawūÍ÷?ŧ]õA§ĄŗģËßßĘhOߑI´ņÚŦ\h˙ĶŲŲÕîîŲ‘FŸØũC#•ņŖ0˛ Zûŗû:’ˇsDúœîXĪ´fc0O ÎÔ4¸Fē%­™XuJCN4ĐSX}¨”ÕL†XĘl“a8ZÃ0–¤kļD5sž PˆĐėf9BhģŊ~ėÁ#”°¸¸ß×/‰§m<Ž™¨úy~ˇŪnÖĪ~8ŌčSČĪ/_†8.üŨī.ĀÕüã…^jƒí/(÷vą‘XGwsJlĪ’Ôæ˛Ãėå}Ŧ\ԝ"b5ƒŅX „›uá'(p Æ lÃö7ĸâ"–ĩ 7ŪĸšWHDÜ=ˆ[ÖęĒĒwT@ÜI°Æš ÄšØÖǤHaŲėõüŸŋŲËŲí&D…ģŠ‹Ā͡ ANÄ'ø¯Ūŧ˙åŧd&ë ØNj= iĮ.Föß/ė¨SÂOT~>ī“ĄôŲĢ÷ndŗØqƒ8ģ"q7ĮŨŊxSoUë*Vī„ûēĄ–ÉWr՘¨#~õNĪīekÔH×X…Ëģ›Õbŋ—X¯|kŨđlĄ?,ŋz#1hJ—;DÕˇ35Qeš˙øIÅH›í‚ŽÕÜļu¸‰‹míīVāB›Ŋw\F$u§‡s0 {Qj0ßŧ›}įīöŋēĀĖiBŽtŧ•X"P1B( I›ˇöũ¯ž‘…öú9tZki4A×ŨĮV$Õ"‹Šø…“}á‡ÁļÄ$lcpŠhB0_ÔoūŽ)¤‡ÚŠZ÷ÛÃÄī!Doũ{â3HgđG…vĒQåųčfã¯_Ą}ō´ÜE ē¨xrA͔ b€Ĩ#F H&–(ĢLŦĸp¯T˜ …žŠ ânM‚ų áÆv)ĸŧį ņ§×bÍnÅ3ßÄBø—Ëʛõtãfé;Ķ:$[΃ã•ų‡ÕŌÕ­Ũū˙.âÍåLŨo$^lĶ ÚöĢ0ĢT%T•nCŦeŸčįB¸]‚Â&-÷Nš‹bb “2ĐŖėŊ§›(ĩRũ uÅštwģđæF5OG%:ĢĐį“:ļĒ-4>@üæŧ{R‚8zuëA)d ?˛sėpZ P–ãÃčlNG§'WS-:Ō'ˆ†:%?öŒ,o´|­7o~˙õųøÛŧPŠ€éŋÕ÷TaB%ÖØœ{ Ņ›˙Ÿģ7k’#IŌÄ>U5w;#ōP¨ĢĢēēĢ{zįØyX™!ČŠđoü§’B!ey-);Ù非*‰DfÆ}¸™ŠōÁãđˆŒLdȲT Ȉpssssu5ŊėS…ąˆ3ØŗÁāģÖ'G#I%æ“6š%lÄO'uÔĪęõ~ ¨å ÛXé Õķ <ČTä܁„*]—íô;3‡І™ÄÆÄU†D4rCP[cĶ÷œ˛Á9ũĶy‹ ˆG†j0kI"äR‘$ŠCP"ĶQÍ,u¨ŠÁˆD#sTĸ`lLŅq¨Ŧ1ÃL™œPT˜ĖŠ˛āeĘjëĸæŌUTZ㯅ˆRzč×*Z¸ēÆeŋž3z >ąä­]/;Š˙÷ÆŲųj{ĐĖæō7,[ZiC‹^-<}uēûŲaēč=BÔ3r8!gĖŒb Į}Ģ{åąƒ8šZ ›ē´gąŊ3ށĸ!Ōž’h}ĐÔ"[zĻÕžÕ”GTŖŧŸĄ~ālˆŧ¨’)M]DĘÆĪ›‰ėôĀŽ[Px­›ÚęĖę,1vfF<Ļ„äôž;ĨÄŦ1hēõD9›œ#뜠/Üb[” ´#<ĒÚŦOŦFfM7fáÔąiė™‚Ųˆ&*J™r!JVyÉ ^J×-´zū+>‹[K]EWŗņkß­ž‡ÍĪļå[QÚÕĐŲAŋ2ŠÅųî‘U•`šsōB*Îu.6Ķņi­ŗĐā æĘk˜‡Øâđ2ĀT…ŖŠ@ĩXšŦ´!$ˆ8ǰA•ücüõž ОܘbĤ¨ÆGĘ)iP&ŌÅąą„¸ĢņŧļĶöÚo÷SfÅO+˛{Ö´QØ­6›>7‰Ü Æ#ĮÕ~@RABąŖpx: ĶЌֈڨMŒ[Īĸ“ŗŠVb°ŅŽ sĒƒ]æ8 ûcjB™÷Č2ąÄ ”Ā ąĨ‘H¤ŦK‰#ŸK–ąKŨ|ZĐO’1p=*ķčãÚw)(¤ėÖ˛ųŦ•\Ā8iIâäbΝ:ØĢo!WŖKk ãÍwaU¸ŦŽ^Ų˙u¤.Šģŋ¨ž¯\&‹ $ȋĩaÁ;tŊĩo›~öĘt VđR7ßŪõRķ,iW+ h5Ģō¤Ąiĸ\(Ē‹"ęå͎tĘ ąJo×]x¯q{7˜ ן†Dô G؛›Ũĩ2ī—Ŋ¨[>\×q)ũt:ŲMãŌ[š—|”—öd Ūu3’(]GŋĀD[z×Ų^ĩ7Î^mN.ģŋ—ߡV}Z™ũÍđÔ×\ˇĄ~2ēm>ģtÚŽ?Ÿs}Ü6_Ž-Tp'[;Ozõ=10MxŽ‹Ņj‚ˇZ´œ´jįí‘]1Š…õ—bí“Í×īîķJ›ļȋ7ŧHü$=_Fo€ĪnqĐkJūzĢmĻ)i=­ôÎė0QLቸW_ĒĪOŨųÄįoæ– K{ųĀÚ­pĒĘŨ XúĶŗÄ­ĐOˇnžŠéļz$d崚uuzū˙RĪ—GĨ1NÚf Ö ŠĘ: €ü¤ŠN?ŗKôūĒJKĪŨ–eīŗÕÆEQJ+—~{÷˜ķŨņ™Ŋ„Ž˜ēší¨ ußRŽû‘)2%´¨Hķ˛KdÕ\í“ŪÃ71ÔË0F×B0%…Ûâm$î˙Dt#|Úur˓˛ĻĢ^´6ÖZę#5IHŧãÂY°æ)[Ø]'ĸũĘik2Ģ\<ørēŽÁÖĮcĀ vĒēŒßÜÖ´–ā-¸^B¯"Ī~:keĢwg~`É닇–Ë"Ū2œ§!Q!đĸ Č"čÎĻ‘Ĩdá/Wf™3!Ī+Û/}…įá&OMÁ†UČËôYõŊ^›Õ[á}›Å"^áŌ?ĄQ|õÆĨņXe™đĪQፔ#S-iCÜöPnu‡˜|?ŋ°'ũĘn?pų– æų8æ ‡ÁĨî'€ŊģIAĄ7Nku̝jxsĪåkRÉ3pņØRžÆA#é› ¤QÖQŅéŧ¤ę2ũ…ŊéāGŊ5Œ¨2­ØĖrwhQJ•4nųŠØf°ß6ŨŸvNo+#“.ũRüRzFÜŽ üŽËR3Ĩe5÷UË" ŧX}2˛{Ķ3 Ž—ÜíMfnÎčk§KRŽžų6˛÷oŸĘõŽÖO5Ûqjˇ¯UĨļÖNhįhscQKîâI´&ę` ˛qĨgŗ­ƒŲzŨ+Q`/éú×á3mŦĩõęwœJ(L“ˇ8ŒWĻm2¤­}‡ &9ÁŧF×âxiĨōžz3NöîwÃ+ ãÚM/éA ÕąŸŒ~Â"Xŗâ]}“6yÍ啁ét ˇ*}Ų´.*ŦMN؟ŪĀXvs­F´ -ÆlžOn—Ņn>īÚT˛^ĒũÎ՘ô~+ēæf¨`ãÁ‚¯ēhŊĀ”eĮ6c‹´Ņ  ááÉy,)Ĩķ^rŨKGz)Íŗ.ÕÎYûķĸr>í[ÆåôVŨf•’Æ;=ÚĢ7儺åO+Vb$ū¡ņüčWy7§ūMRé1üÖüíĐæ’¨ë6Ļ{×đ]:¤MWŗüö5ˆ…ÂH “ņíúÎ~ZUl+•âWoŊĨ%đīî*—‡ i}ˇÄ,ëāĨÕĻ×°†IŌqHĨėęÛášÕ|6†¸ÖŪ´ģLkīüģxŸ×}WēŽYŽŊq–į Ŋkŗŋå):¯žˇ\6 ŗaŸö†¤­F°ŪĮŅĒHߨÖĻzM˜īw‹nb^\kĶîR~[Œ¸-įŌ†&­f5ZBl­É¤…žeEAš‹Ž´up–ņYJŊmæēŅ™‰åžŌ Û]tĪĒ^;<~í˜×ģ5 §@é…ZÅggƒ§Of÷Ėķ"Ty.˜kĨjz&§ …i›0}ųL\įE/C"guákúFŪ)ĸëĢô׎oū”ô 犭Ūš…ʡõVĢRZ7ˇį*,ˇ—,NęUjl[kÖ\igŧ2ŅģĨ‚ô™úŅ F} ÁˇUÍš]Ú|ŠąÍyšOŠéG0KøĐĪ"/bŦÖēÂ{†ÁŌŧ™Ų˟íž_Æ×\ķEĩ‚7°Đŗã㇕›Ėî;c1ÜdkņÍ̎[ Öß] Wŧ¨õs‡sÜTWëfi¯VŦ˜ļŌÚׇēü˛–ŦĩOyŗãÉÖ1”+č\2ôE}Š—ĖĖ V~Ô;íÔ¯hųķ ’<ķČŽš™-Ģ­Ō.žrCē"Ąpą\•uú”î’ĸˇ3ŽLîíš,ö8™lā aūq™éŊēŠÅŖGq¸?­Û–[X“pÛ\įî–wcLOßßš°JߖĖzk˛°„{āĢA }NS˛"!˛ãB“X<AƒŠ2 ĖËyÛ°˙—Ÿnā„ēBPЁMAjPŦ bŠJ` fĘσŲ4V"Š2O$áā9FJą@™Yæ¨s]ŧ‘bá#ßkôĪÛuܕ“ëÂíŧĖ^ÄŦVøy‹xĸņA¯Įo;HųT§íũÉ! wH•‚ĄŦÉ#WbBĶõDl´ãķč!5¸QHĶØ4™ÖŖã`,ĒÂäā)!†Â‚rf0 ä‚*ˆ ´˜ô@š¤ ƒ°#3“4ÆĒyĪ˜o yd!2m° ¯;æGRu9aá1EĨšÅī‡Õ´9{–$õ2fÔ 9ļ)“'6uęUœXœ˛™ˆˆõ˜î¯ģ6`^Ņuc7ž_ŋ`ņjėž;ŨĢÜiē•ÖÍÆąÖ‡ÃĮ6J|Ę16*u]-Ą>uFlJŦZķc¯ŊŖčét+čKÆęgŅ(ĢyK(„–åąé-Û푲I“ÎؔɇąLSōÁ¨ãd”RHÕ™‚‡P ē#šįjŽüŦž„8nÍ|mDŽãÚMŲŖ9Ē$†‰<Ž"T D AŒj4­$†áŅĶQŊûŊí‹sÎĮāĒ>Ū§v¤j0@ÁÁkš×āxč6" —HÔŸ+đãŊ,ĨBؙ!` \,ĩēĘ'(T@ÚD^,Vŋ-Ų‚¸ûdvžå‹zKUV.Ŗ×XøŪšũP*s5ˇ`ŽaA‰š’^T…TU rÆEųyW‰ŗˆ”9z& 4DuĻqjĘU}ÄiF˜e2R4OŲžsˆ{!ޓЋZÉŊļ*§Æq¯ĸîŨé‘ėzÄHƒ+ŗpsØķĖ.‘čgž$XÂgQ˛4ŠsȘŲNHœ¸‘qsâ ĸÛi„ķĐ 7DĮĻM“–ų9Gš%u?ķFÂ?‘,ļLĨ’BOū_āķŨfÃeAI4ĉ˜áƒ81e†åšˆÂ´P*ČČ" æ|ZļWÄæ Gˎ§ĪžŲũ‹OęWnĒ[蔕āÍHÚmąŅëĢu+>‹~Ōšx|RŊyŸ‘SB„]T˜r3ĮÂ,FmOÎĸ¨\”˜%đų`¤ )5“Ôf Ėĸ’ˆų€*ąŠiî 5A°ņŸÃI÷Ū§;Î y° cÄÎ Øį9#ŸÅÔPŗ3ŽæØaÔ ”›ë?‹ėÛÎI=ŠÍÔžę^"‰D!įDT“„j1mM*B Ļā*S4a‘q G4q‘XAFY Ē°o"ŅķđOgö4ųüaK+‘Ē4G0A•<Œ­”H3"˜n:ø .:ŠĘœšÔ.­tđšôFų,^¨•`ænęĻž5MCל0Å.+Ŗ¨™Ņø‹ŗGúņ_t„XŖ“E8Öhˈ9e˜Á‚Ö ¤p"˜Ôhāc˙$|/ûû‡˜ÔŅ‹ĘŦLSsņDSÂ9ø\šJRIš ŋI›HęfŠjPŽČˆ…Æ øĀÄZNBœą ÆJ A•DRyņÄ,ģGŠKmŧ“ ĖXœ#ĸnĒÎÅ:9fDEÔ 7L`!r UBˆb ŒMØb`a#Z:›´Î—1ōEđ­mDÛį5â![•ėMk^<ãļwžßo{]6ŗ5ū Q`îŽ`+v˙Yĩ’¨NT$ °đˆYŪd*<ßlļėbIGęã _ë>ø|'…NԁR1Rå˜Ģ¸čc@TĮ4™A5zNŖ<ĩč!ægjVoõ‚Ŋ—{ŖUÃ8H6TžĨ1’„Öy$ƒ““‰öIljv‰ŦŪ Ą‰ž8į=¤Ō9'‚Hęzæ}Bí˜GTÖ˜5d_Uļ×bcĶd~Åŗķŗ‹…xN­aŊ6}ŪfĸęÚĨËdķX¯ÄęĸËŠ=•rGˇAwš Äå;ģûŲ–ƒÃ”ĐČNMÁ€Q ŠB ƒkÄĘ2&86 *ĸ93! ”ĀyUMŲ†âØB $c $Žëwh 3K˜}eœ¨>J‰Oā§bŠ”¸ë=¨TsTŗö™2ĢVúĘ"|čAėÍŽdúøß­Æŋâ3ŽíîzGiÍ _RÍxņ¸}^īpEhĄ†EÚĸŦ‹5Ę-Ô¸WēÚMöĄŧSD+ †yéE€=‘Ü1­0iKÕdMˇ ˛˛Ø4Ģæ`q+]×ĖYĘâËm5âi8ėĄ™mK&Y÷÷žŅxQĄw,â{Ģû`^ŽfÁÎnMKßģɕ–c.íCy÷R:/™Ųĩõ„æoūęĮXҧY2Ģ.ÅA9ˇĸôH—,¸AĖ§šĮáč6ÃۅŅ‚¸tŅˇŌÕh.ŧXˇBļļđ¯Ļ=nÕŪ>­'>läPëōįÅ„ŠŸETëŋHĶ3KE)ԇ-ŅŖU~ļĻģ§=]ŋxéŌo %‘„ŨioŋšĀΌÖ&Ém˙ų-}åĮBČķŅ„ŊÚæž“Õ“džn'Œ9ÕJ"™Š.œi§—Å$AkíZīdgeķ$UÛfjŲ’đVI{:ôūLšėRyöŽŪî^*˗u‡u‘U›ŒĢ?Ē­ ģbcĘĻkveQ,/GnˇŨŦ͍Ž=ÆËÆģüЏLøļŨ>äīņŋc+°ĻŸŨŊ䝠5¤M Šm ˆ -liŅ_ėa~$IölĐS”Õļ%mBâmiō˛1Ĩå3ߐmú7kūļh}NŪU)vsZ.f柴knQ—kMˇĸÕ7_ŧļ¯xdõúžų!ļY×@F|Y>ûŧ¯¸ŋ“Ö/¸Î^B­ë\ā]Ŗ;h\:N+rCÂȍ—Ā VZˇ­€K×Z‰D#¤LƒĮIã @ú_>^œORģ)čō]yLëęÂ읟-čbŠ•]üĘ0ķŊz5,C̃—˛.d‰9i˜jŋÕzCŖŋxM“X×Zvg8įučÜŋš MFZfˇluj?‘Û餍rÕCÂb},˜kæÄ*cA“įŽe¯\]áZSIŗķXoŊÚûũÎ=Ģ‹´ļgļ„įxŨĄŋ5ՀäĒgR(P„Á7?|ĢņÂKÚ1ūÅæˇõ\jŗbĮęžãtz‹ūSBRÉŠũޝ#¯Lk\rwî’hĶŦÛøZ°ü@]äes#Örąīĩ~ “ÔvēęoÕ÷iRmÜŅôJ´f-ŊĶ|ļÆH—„€VGĮš>-"›%HЭ΋KŽVüĒžÖLGˇ …6í§Í;SøčÆ´6߯ĀgījÛUdŨ„ļ#f´§,ÛÂęœoš+vģģfú"QzkŲfđGÍë€ūh™`ûõ8nļ¨ŠĄÎÃn¸üém×.K°BÅj:NÆ2~ą\M&vß)/ØÍ¨[úŧ| _ģžéíŌÕbtyTŲŦäģ>mĀoøv‡‡ƒ|šĶætÍķ_z5đŲņYRåËK÷ÜqŠåŧŲŸÉ;št.}Ø6cĩÕŌĄŊ´ņZ[pŦXĖUjtģzmēą61ėNgÅü˙,m­|ŅQCˇåŪlme‰…õÚĶŠ(nĨ¸–PLDz˜üpRŲm]o Ú+˜UŲ|/ņ]Ds|­ŨRÉO{īu̝ļV¯Ur-„ŽwKlĻŲ“tšI2čhîŨ%×zmr W­ßnņ°w†JųwÄ~Ģ‚d+ >ŨŠÎūãyaÕŦtĢeĶŗË~…ß–$•‘´ßƒĪã‚[7ŌsįĢë++W­YMw(˛ü´ä3~ķí6\fLÂ2,ĢåĒļÔĸHš‡íđÕŖõŽVļå+ŽXf B€¤÷0 oŒ 6yŌ&še(gŨĩ$ŒВšw@žÍ“/$]Ģb™§Čļ÷iŊō"ÖÅÖļÃ]čuiU-Ō…’ ’˙ØģĨy1zöxĐŋŠ™z‡č’¸Ũ…<Įm|RÔ¤[á"ˆK“Öé@mú ŦāC_į9ŋ„ú„)$;iđy)ŋ:—āĨ¯*îxfÜnmĖKü'w…¨ŧ¤ŦøŒ“prųīÛĄ¸Sų÷E¸“–žq1V ķØ‹eaV Ŧ—ЏŠ¯*$Āt2¸ŦÆüÜéäŪ2#\{~6€ĶAË­Û^‹?&eŖioZ„Ŧ›>ķÍ>´Ė›_"X{ģ_rŅkŋø/a‹$ëlžÉu™‡bÉ~2̃V`˜Ŗ ,/ļD…*c–3`úŊÍęë÷ēęöUɐå@JQļJčŸmõŸÉ(W3&GĻ$ ŖāˆC R€˜T 4‡’1 "Į×yoō’j4"ÃĖbpjÕá4ššĄh°@Ž9Ē*' €,æB ب7 3đ_S26ž%n†ŒĪ‚Hr˜Ŧ7؅8rmĖL¨ÛÅQEgf†9Š’ƙĨn‚Ž,0š ڑ3ļČ9J¤Á×CD"3ÁNeL63!’ŗ@@UΤæÔ#IāƒTÄ^CšŒ†ŠM,Tõō'dÔ¯mNPË#:c‚ĻH‹;‹^O§yŦY¤¤>œEĒYb&‰ÎPEšĀTŊŽ„$q.Frfđ3m8‹ų8ęf.ĨķĶZĻäœŦĄÍ°ŠQ•„Ú:{,õĩīķß,†™ÛáˇW2ëö‰gĨ…sšnÆÎniG„‚M ÆlVā~Ú(R°šwM\ÄtDfD¤A)zCš5i–‡)CYg*P'1Æ^œIÃLĀÎëd¸›ŠōŲ^Īb¨ÔGR1MDŲSâ3g“æķ¤6͏’įšöB´(އz—8§AĪ,…ˇŽ7˛Ö(֞ÃŨëIãÜZĻāCŋ;HÍĻŒŠ),uƒ1ՙ|PŗŽÂņ„T*‚Ŗ6đ¤&T—”MĮÉˎ\OŨãÚœ8vŽÕęÎŧ:‚Åį`ĻSaf5bB41”5õH64ŠžķĨôģ:5‰ÅrŊE¨--¯ũŧßi‹kšHŖđâË…ØB›)đUÕTIØ<%¤Q "3õZƒ1™Ē⨠B10Š‚ŒˆHUČ1bE"˜NˆÍ{%bŅ ‡ Î@Æ•ÕÛzôéĮŸH,FVĸˆÆé8c1oXUɲsļhĒÄxsČ#`y.•Ã6#šxoīÕ"'uSqí` E"ęîąĨŅZš" (“f ‘0™ąS#$Ę"‘@a$™EũęKŨ;x?‹œpā,ū^-‚/ĀĐžœ6žŨē8Ĩ˛ĖŊ(}oĀĶ/on%§T? _Uzí—ȨčŊí°āÂø  kųŧvEüš¤lHi[\é×͋{¨=oTč0@ŋ¨Ôöî‹* Šz ūа'ƒ lPŗHDdŅ`Â1áÉQîÍŅČ4ž˙ũųŅÃæ{ÎWBÔYđĶØ­OqbY4͍°3īvĮ°ÜīŸēŦ‚h‡f-PĪę{‡`7hJÛ4<;ÉüI-į”ÄÔ'މ#9ĖĒd! “TR6DĢņЉ*1X4ƒX,sá×)Ēw˜šČĩ@c†­‰×Ĩ°ĩōŽOčËhÃôļōīkįo°Pi_Ũ›Ä?[gØËŲÖîŠãKŽmĮ@€Ė[“9”—ę,m§-™ķ.3<*‹7ˈ@/K&V#2œžøëQ4bŠŅˆc ҐįFdQ%Ņi ÆČĻQkÆ(zoYԙU,2 \ ã]núŋųk8÷šaĶÂVM–ØŧøSÚy–B@s^ā6rõtéũ]Ũ Ö¤Ļ pˆ,‚Ŋ ōŗ¯ŽyØpP°@-˜Ė‚’WI†‚M!Bšä9˙&˛EŗČf¤”bRCH$ŸsĮĪšrR›%!˛ĩUy⁊×ĸ¯OĸŠ´<Ŋ`‘¤qĸDÖǰ‡´N“4˜Œ-6`qŌ‚Čˆ["Ķļ)Į@ęu.Ĩsv$ÆĻ,\í™c­5Eà ¸^ę32ŊgšÆčģ-ĻHÉĐeîpŸŨŦƒBÖˇ•—ĩ‘eeL=;y ĩMFš˜ķčK=VĢŽŗį‡;åVt[”#ŗ%'*āsyąā'eÅ8ķÎŪCm°fA‡›Ŗ) p ŠŅI4bķ R.É(;†HlNЙ¤sOP†’ĩIˆM D L#Áû0iæyjIžÉ(5ĒšdRégNķid)'ĩz˙´AŲņ δÚS>1õZՁi,{5ūˇ,ĪnD‹"\e)ˇîlüęÅáÁ}ēÂJ"nĢÃk ķ…l§ŪīßģRŠ Ō‡˛7ŖÔŨošęÉŖ,õŲrŲ_˛čjtĨ-]Â\´ĸ^´ņ4/ˇ–Mq2^)Ũgš;]š­Ö4›^Ɣ/Û4ŊÆYķɨ?šŊSlöĻÉļīwzˇŪ­Đ"ĩxüE×íũr?y&ÔˇÔų‰Ņ[īqM”/Ú.]ēˇsŊe˔ɛī⏜jr°ąžßÕųŋŒ´ŦŸ•ōļīÜ}.wP-xhĐnT÷2ŽŖ4uë į™MsZ“3siWęËdC’ÃÃŅY…°õĖkrũ7`ׯGˇYŸām“Ë ÚK>ɡ´~×Étņ§GĮįqVũ´‰¤:‹jÄeįAéw‚Š-ršŧÎĪiúoŸŦk/Ũœ^ęšh k*ųAhüœwž`mĀĘŪÔôbĶwžæáĶ%OL‡ņŊŨw¨­ 2ÚXĩ.šeÕĘå57 ˇY2 uiˇÖTēąÚøĨŽŽ;MkëîÁÔĪ Ņ|‹ €ëԝ2Æ!7ZnŨÄZŪ=­õr9dļ*ÖÆHKiŠōúĄā°<ŊŧŨĻ5I}ˇ÷Ŗ[šÓķiÖŽpgt.|äD^„…Žé%Üh’ƒį Ë"*×IŊēGHš8ųų)˙+R”j—|vSûˇEkÎč1ķāĨ‡‡b@ãđ‹ķ÷>ČčęŖ›Y¯+Z€ÖēiwX{îßīĐęôמ,>ūŅąģ¤ŸŸEÚ6ķ´ôíŽÅ–2 X8$–*hkØ¨Ô˛Ū×\%ī—NßŌ)­Žc4Ĩyb†É/žßä76KTĢ’]…x÷iMá/Ųk;ŧŪáWĒĖh‹˜@!{tę’gd ØųĨ=ųērôŪZ9ĶĨãŠÎׯ˜ü7qzzúüËVķßî×ß§,žÚ~åBHėgDFŖRˆÅgīē}ŊĘ;‹ĖĢẐOdˆņËĶvdRŖ#‰_gģËĒĨÛģĨ5Ū*ØÖĘüHī1îNŋûqö?}ôëŊú›yGíAĨļŽ}^ĶŨ'›•Íé•~vË Ú+=­'-ŽuÍĘé†D‡'현úŦeĶ ”ųšEŋZŋTy™¨fĶ”-§˙8 īOÎÚģŋŦ9)™„Wēš0K˛äŨ†Ą~=2ÚG_oõ†™nk6ÎĩOŨtB\BäL{Öwīwšj“<ëpnã~ģÄ]Ļë΋eXjš€ņŧĸ'2ĩįã#<=üc×9FĢĢđå/Ö7‹{nÜß匎h>Ë]>­_ë”ģI2.ßÍëã9^o~ ]ŊIeí)ļ¨ßĨä‹å/ÖūPŸä~ôí¯>ipEĶ ß=ļöbī<ÁŧJŖuS`îΝ{Hæõ– „¨ũ§|/ūo_fCŲ•gōíÁLōîđycü7¯ ˆæUˆ`Üæ~ÍGrg,ąkŲ V{3¸Ą/wŊҍķ ũc,ËfŽ\˛Īŧ)؁tŋ=ö4ę֛öâIãL“6FfŠ=Ãé=2Ļšįņͤ5ņTĀĢąÆņ÷ŊæĩØō3t>=œœPęvūC:ļæ;ēnŽÕĘ1ÁŦ§tmŪ~N\ŲV>3ŊMėF \+×;V Ë_Ö:ÆrÜ€í8hžä?gįÃ÷ŗgŖ9ĘĮÕz3 G'ŒæÉû(ũ †‚uĻŨ“øŅ‘¨ÕĒãúá9gŖãÁ´Q Ŋ§ĩ9ÔmįWÜĢø"ĨŧĒ“v)‹ųįÅf$yIˆŊž<ģ^‚äMgŅJĖUâŖ5C°øŽ$ ƒYī_žSrTK)ĄÉžãúP˙ĶŋūÅgfÍbû’‘,LĮļ *ļG¯]XušQp Ų÷Ķ{͆%÷>}töÅ$ų(Å{áÃŗjƒgĪ˙đųÍwđ.ū`Fĩ†ũÜØkEf^k̝+;ā"^FIDAT•ÅŲŠĨ÷bĶ™‡ ¤Ë|G0„øôŸküÅ/?&#Í_üx\yđŪîÉŗ¯îī}Tß)|9EŠ1PâæĻæÖöØY<¯DŖĒ>Ї÷„ƒjœä_Øđã&99ÜĪCwfû/q—\Ng´žLĩH×ķžƒdkh­8ø;pËkBkĨė•V¨Íhø\O>úæËHīũö €gŗģÔ9ë?xņe—›û÷~SOVČŲ‹ :"WĘRš÷8ćōÃ,Û;b‚ęŖ˙EĨõ;ŸíÕK(}ך‹-‡ Ũ–D˙Õ?ŨOī§™”¤õģđŪ™ééNļēŸrÜé]ŧËŌšņ„WÜF0¨ūū›v>ųŨî|ëy­ÖžöF:ũ?ŦUgß˙ņ‡ÆÁĮí„*Õ\8ÖĖtQ+†į?ž< n~°[ãY0œ|điĢųÍųŒŸüÕCĄ"[Rė†ŽŗĨģOeŌā8NöšEũ€Åņwqū_ƒÜt[<€Ū ÎÖëon/ˇžģĀčģ˙ûģ–ģ÷ģj+}Ž*ÉîŪŠîŠįhƒŪŋ}|ģísu4Ą`hĪ/aÖ?ũ’éĶį÷d@…ôčŸŋŲûÕ¯Ąģō/Î˙ŠûY °`Ķr}ÖKYdیg Ŧōņ7šs*Ģ–o{æß8Ęš7í+1\éŪ*^zéųōįÃŲ×ߟNšŸũæŊĨžcČY-í9h'<üÃņ“ø‘sÕ´ÂÃũĀ€4ŌN5)N9ūZŪ;Lz˙ĒīŨĢ˜=ūjRßûEÃđųūŋø÷åøˇ;ÁÕUÍ7•Ëĩˆdf^?čí…įæå÷yi‡Ģo+>Ķą¤/ö.–ô6[.WĐKįčRišĄn­&VGļ'YÃÖ~īüÅŪ¨ūéßļK')A˘ œĻéߝœũ˙aį}n3;ug˛jŌāŊ„Đ<œ>qŋę@ëGNx#8ûķ4ŲM‡Ū"ôAĨ7ößTūRĘĶņrÚb§ųâĩõ" ĢpŊĖe?7‰–Ĩ[ãNā/_4ĸÕSVoĻ)I&Ū2ĶDØ"ĸĨ !5"ĖÕ%ŽX!/›í+™0ãÅņ?i jBÕ¨§„FĖtpzüũ3šĐ¤Ũø›OZ…ŪƒÃq[ZŦpČ f"įŪ;üôˇOŋ}ōO6Ŋ×oōC×ŧŸ ŠÕxüÔ?ŧßRƒ$‹uÚėä8öåř4FÕŅ qjč`Y[Øcķŋ˜Aöüsu;Tödūŧ¸ $\Ū­^ʧUįŋĶ*$yaÂ:ŽuÅAōb&딨ĐęU™ûģ]•:s:ĢĢ1IâØ 1vĖĢc3br,0ŠąĒI b˛ ;@ĸ1 lА›ę›Uc5DRJ j 9‰B‘ON”Šu´#ÎČBúOģĪI¨[k~ü‹ę´O†F˜Í†ß˛ëŅ^gß [n=I™%uƒ6îčãķ˙œĮö”\Â:C§'ƒĖ:­ŊšYĀR^™ũ‡*=øë]jĒa§ų”?w˜ãQĐåY=Kát‘ ČũôĒ´~ž^Z@2+1Új} ÄÉĸiĐ!˛yŸ‡H,*ĸEŖˆ…„vFTccŽöŦ9fč˜RLmZ5,ĨŖč•Ûîx&GԟÖĩJu‡Į”ĒļœMŗhĖ.úĖē̓i ´íáqĖŖs”Ėęž§œ˜}`āf-ŗi´œSOĸv8āp7÷–0ĐRûƒFe4Ŧōî^MŲôYÃj)R96¯/žéÖԃJxž{( ēõ{ģÉŽƒ¸ ÄŠ…<ŌwŋLGŸũfW ‰B°ÄÍũŦvŨäå*;Ÿë'ŗ$„ķ?}_ëüîč.2ØuėEŗØåŨ-~ 8lß_ąĄ7(@:/ļ3S($Fa5 Ø‚æB˜Á˜,øÄŲĮ~Z‹A„Æ)WÂNĖà *ŗČBޝ{S ”°ÍHZņl–î ŊČãč˜ČĪĶə°síđwųä<ë¤Ãxęæė7b•vƒy1t)âĶŠl˛gËĢ|Ū•"é& GPrĖâ"Ĩ!pf“G:ŠOX¨F‰ųėŲŽ@ۀ1ÕMā=‰=ųÖZ2}2b‡Ŧ@wFvĶ *DŒ`dNæû_ƒ́%*Ҏr—UädjDė=mĩ†ũt–åSŊå;ŧ›ÂÎփŪe{sģ–^–üVD P[9ŽąA,nũ×ÁŋLF ķųŪŖ]-I2Šz É0‘ɧ)…?2öNģôŲáūŊŽQ’¸ EÜÉâŲĶ$Mj˛§O…|}kœéEŗa$ˌC-7'G}æ?ä1Y4ø´ĄĘ^™ UbÄ žŧęëëŗīKr [÷o^zMēŪ—mÃXģĮ%ĖŅōđęû2šLDqöûcëáûÜlÄ@0Ē$ĸgÖũŽĒįĩ˙ō3 ūáÉ´Ēéįõd֙RZ`&™’MŌĐ `)†,.|X5¨Ö¤Î’¸å€Š,xøoÔÎNŸôŪû¸ž˜ DŠI,ũęī}‘J7Ÿåš˛ķŪŦÕŖÚ8ō|Z%U—JßņÕebŊZNF- HS@Œ’4h߯ûĩÜ? Ļ“w‰ u(YˆMXtI€Ėėœ(Œ‰Æ,Ā‘[,°ÉĩaJ9pëüšö5nXk¯“A]$Ēˆ#L™ÍxĄņŦėûš5˜ 4_í}1āėĪœšƒŋŪw…‹Ö@dôÉ??ĶėŋzĪėĮ¯˙¨|öa*͜ä XĄ4äį”šĻLí<œPeoˆ>œ›÷vX+€ž7n9†ĮĮßȇęåĒQ´ī˙Š×xøđÁē$VÁ4(ĸŠ'(9…F2˜‘†hF\ëC͈b˜Œ“ĘY@ŠCŊŽÁ1ˆ:ŽØœč`79 ŅvpB¨¨*SČCš4؉1ĸãĻŽr%˛Ü4q2Ļd¸ķ¸o5o• s=H!ÁDāĩbˆj–1ČT#¨æÅ‰1”]ėA͜¨Y@›QŒ‘Į@ŽžÍ(-*Œ¨YđČlĸWdœEfĶā͈ß AR9 cĻ`Ļ6ŅŖŋŨϟ]úÔ_Qž6_å$Đī}ųãŋūÕQģøe ũ(Įß7ĮíũĒũīąå“ûÂ6íž@‡°áIíX Ŗ×[‚…i#ŌxP3žZ0ôđĶggßüįG51•”žo…/Ŋ˜d ŧpâĢįÎ@đŸh$Aˇw@Ô˙ķãû÷ø}ļčĐ`ä Š×@!2ƒ':%b5ažT1‹CmŌ턤Ĩ^Š’g!ÆÆ$æ­ąN=ĨæiÍqÔ)3ĸ)ôā…Cīc 2sŽ[Ķxä^œĘžŠŸtÜŗÜX 0TÎ8ĢkkR!ƒÁëŽ{ZKŨ™î(t.i"ĩÁ™ĖŨ8ehôē/iŒčôĄNcĸ#ĨtR=ŧY}ķûŌYøķˇąöų_ž?E˜  ķ„ÂûĮ˙Ajßoøß[oĀƒ÷ßŅx¯šĮ.šõ´ĀÁčįcPÜī0#ˇęu}:îÚƝē9—îZ˙ÉŲמqāä^c$ã,Ézr˛ß¸įōāR`žkyû*M&•ÜÎ4ˇ´vŗÔéîÃqŊ­ÕĨåÕÚėcĨū–āRËFYQ˛ļ¨A°H!Ŧ!€]Ą aĒ ŠĒE/ŽM(ԘÚ:‰áŒ”TIR¨HˆÍÁHbdg&ėFLf,2qˆc$U8j4‡™‚ ƒ8„2ƒČp{>­Ų+¤"ŋY2ũoã5˙īUŰ`}ž4,DƒĒ¯1ÍŌYŒ÷^ü0›@Vų(NŸ×ûĩÉQVŦŒÁ+‰T㞆€VÕ"‚ĢĨưžŽjS‚ŨÎāôĪT?ŅĻrОļéɟĪĶáŋŽkÚĮAÅ×ßëđ5ĨûöXŌJYž-RĪ'q{Üļ`ĘeęĀ<Ą˛ŦÆĸķķ>°ĩātĩmr(ŗfņŠārŧĪ­´LW–—YÕ×I&[÷o^Vi÷f#zmáąM˙ōã*PE?uiåÉāđˆgc ĪiÔŪ{ūâųį2éīüæāO_v߯;tĸNņ=IÖDd3ąé–6[ĖÄ!Ÿ(5ԈD1Žx™˛ķĶ)ËZEœÂíē÷ģ4 SŒú÷qžįĐ?2C?AĪĨ.Oxw7“×–üf:M+ A3­m;ŧŲ˙öĐÃuG°Ā…°kKã’A#šUįsNTm—Z-ųlûNŸ’ 1Nž?îũúĐEŊU3<†ĸ<õē˙īG˙rÖSǏôaÆģûU—bœY6›í¤A#wR€BõĐ 1$Ë&ŗZ6°iØ­å”Č/†X­kMš6u͊ĻAuĪŅÆ ųqƒ¤;ø:œ?¤vŊ˛ˇ+›kīĨˇ´öe.´†ĒŽOök|qkÅŧŦËĸÛ8Dûįoūne+-!R)ßũj˙æÛĮq1:=y6}øų{ ƒ<ÔSôĩoģĨüä^ŒGb;/ÔaŒč>L šŽcpŋL%ĸ‘’œT‰+99hđĄZ Œ0ŗQh"úĖqÖ1ÕĐA’#‚ÅFŗŦ–Hw?ī…o­ûč¯ę÷Ģīiœ}ûÔ?ŸÜwGģ‡;œląÕ×üS4X×DŖY›WnüXiÎϪܝíŦ›Ķ›ŦKsûdGĪ?ģˇ)Ĩh°†ˇĒŋų–šĖõžŖO~Ũ€0ĩŦæō˜J°ČbȤAdņŪnšč,ÆķöNÆ( ÃĒĶŠÛY- Ē0Ė ‰cĀĀB€Ą*‘,¯(!pŗ˜)#lĐčv¨â Ę¨ūՃo˙~4žĻIíW‰ĻDÍ=wûOãņw߀öŽvD™!F8GļVīÖ,æĶA%ĄaÕÁyīAcÎhp¤ĄžŒÎŌôĸĘsŠ×(ÆīžæÎÛ;f§Ûëožu˛îqĪŪ˙mĻĻá¸EFg\MŠÆ“4s 2Ŗ$#ČČÂNsÎ8›$Ll`Ģį†Jæĸrŗ`*sąŽæ¤ĪMŅ€,!1‹°Ē;A4QsDB Ėkîœ?ę^eįŊ‡ķã$Í&~ÛĶî÷:ļĮ˙"™OęŽ:Ũ“ēĨíö‡–Oi§‚ĄNŗ`āNg/!Ų팗k¤ņų>'ûSl{šßö˛rMZpŒ<ųįŗöÎÅQo]7ßrú““g_Oö?ŠĀBTɅŸō÷1Ŧš3'3šVe)S€Ä¨Ļ­E‘ĩ]‘\íęÍFũj3MĖhž’ÖĢWŦ2u˜ģ„ķ=鑈—îZzöøûá.ŨûāŖ ëØAû#€Î'Ą{ÚåD&=7= ‘Ēßī˜Ëîs°Ã´Ã@›Ģ€Ĩ$ Ë‘pø$kŨĸ ŊÃTN–W€ ø×įō—7įrœK.ÔŸmn0[öû̓uŸ>ûėo€Ëk˛‘¸āŊôE”…Šā:`jŅ%ŦģC¨ZoS š-^æŦq4Ã4ŲK„EuAí n°Å J U"Ō(”ŗ0Cs(„/YŖvôģĘ{Ģ”˛NĮ(ŗ¯ÁÎŋz6ëŖņÕ,ėtīīī2Έœ`›n¨đA[ŗSwx—Ø € ÎcÍí˛aú?~kmų:ūí_]Ô)ō­8.o]\ŨûëVClâGA$Äč+NáŠqˇC °OpŲŽ‘@ŽgķÄ} ŧŽRNSc.@‹CpÎâ*ĩ;S0h&äĢ S&p…€H#ÕZž˙ģΰeX aˆæė*Ú÷gq ÎĻ1ūøčOĩ‡ģ§/pôa;ãmn˜œˇ`•ûė5ũmOë%Ã÷ß?îīęņoŊŲ/íÅĶcOû×ŲÂ=Šl¯'Ŧp˙TōĖ€ÉĮ‡Ģ ˜Áu,ÅæZˆAĸ­ë‹ƒ™ df¤`‹ŖPõąMD€åŠFÍhîß´K<}ˇØ‚ãū%v÷ūŨ§+¤÷¨Iąˇ*hĩti˜• ˙j8ũũWc3ëė×÷ĩqĪ5×W`ĐĐû?ũoõÁ+†ßđčx˙WøöŅā˙­ƒyąi7ö˙`˙]õĸv}ˇŗm_Ũö}Â?Ų¨Rģq°đ0€…„MC‹gnņŗAƉëí,b9ã+r D͉TY?‚Yô™û,—nžåׂYšs7ģAfŧ×ß}\ēÄųÃī;WŠŋŠáūŇáƒß˙?lĨ@ŖÃSlCj'7͡íĢ{Ë §ŠųÚúˆ+0Ŗ„P-𚭠ka”Y'€Ė dDrLiēdÕyÜ´ßŲčĀP, KŅŖ6­Ū›í}˛Vę ëgŅ…û1~ą˙ĮžũÛÚšZėu_ėėģ˙Ÿē÷l’ëJ˛ģß'"^čÔH ¨ŠÍęęjQŨÛ3ĶfģcļcŨfŗ6?tžŦŲėÎÎÎNĪv×tŠ.E– A€$DHZŧwŨ}?D¤Č"ĢmũCfdäSq¯ĮŊ.Ž?CB-7^ĶÖŖÁ|ņ˙ŖF4r8û××)Xwģ™œ*+ēĪ‹ø1_jäôõđũžâārÖXģ NËKØÚy~/Jžœãĸ Xõ ķâš,šÍ–Û\•_ižîēu×Á'3ÛŧŨü _?ŧūĮŨĮ¸Ūü|FQ§““{Ŋ›ĩ<áåjĢ‹ōá„GŊˇģĮĮú‡Wŗŗņũ’w&××ŪgČėÃč Aų\&(­Ęįöwōø/Ų§BõĄŨžh›-Í(:{}öŒN{K´´ÔÉ/ÔŖž_ž_T}yŽffŸORģúœ¸Đ‹Îš,AŪ¸yōġ™Š5†ž~T•ēvøfāũ&úé†w;&ĩp)9퇋6hĻá˯¤y5O5ۙ=:ŠĪ‹ŠÉ¨ēøVxÎĢ?´80Ũ{r{Užl |!ÛzŠŦPœYA—á¸VmIũ4_ŒĶ…īû{eŧ]~ī K¤Ãą7jößī}Uc‚œˆ7ō“@xËcõŽÚŪŪ|ö›¤îjí%ß|;ûÃ˛M,Į`˛§­ėËg€ōđŅÛ1ū`œ5Χ'­Ũ}ZÜzöZäŦåķúŖ˙‹&Ü @=\ Į^ÖjûȤ ,‘ßŋ{d0_ļÅ=…ážžŋúM§sÎ>­ŲŦųŧu/]ßøĘjļڟkŲ2&IIXķ*FO=ēŌj>Ūģõ…Nčߤ8Ü÷3ôzũĢdQ­ūÖ?ūņoŋs<>Ŋ&w~ÉíoßúâÁ’\ôpÎôLĻų°qa˛O¤)ķdEąč<͈h@‹A*T–?ŗ–]xMœ@p3Š|Æ5#Η 5‘Õ>ę•BËDKEķ™đ>އ5Åīü‹ĸ?—ļö&ęŨÛG“{÷ú×ÜãÕfũę9~ķë'Aîíū‡¯°2ŋũņDņ7ƒ¸­~ūQņ¯w{Ī9x’Ėž“ …Šō¯U–¯ˆĀāéņA׊e°"Ú´šĖ-ĖĒhķáuq[ĸ¤—'­ĸ æ–f™äąÔfJgAĄÅY=Ä9QˇUqz|¤W‹Č­ ×p õh6ÜZOõ’æ-čüīKŗôü¤9āŽīŠƒ‚%=]kž$ķ2ƒÎę;P7ßAīn$a¯qú^ũ ~õß}hļíÍÁę™ņöÕ÷č<‚yÁķž=ßßüú=+)Žã¨ĩ+č‡écÍ:+t¯Š3å‹'_˛„/OäķHn$u‚+ØîN%%zz¨ƒHÎlū ZÂĶrüpoí¨#ōūČ×ĩ V‘„$0īß ™&›á *åFî/4`ũ’^˜ŧ ĀKa"pÂČ6?úœīÍķŽ„)ę_1ąü•ā–f1ĒŊšOV§jlžú˓ߏĘči¤ 7'íŗŊCwίŤÎ<ŧҍÚ7#@3sGđ2Ö‹ēP ÆˇWëõ¨Ą‚ĒÛĸš]"Bv5 L8°‹šPppiÁĘEEÍ€ģ@ĪĀŅ€ęÁ<šq¸zĄwXÜ×ĸ´^u"‰mĢųYÜkßÚÚ Ë/)áÔËø]ęÂÚį.€cÜ\Z‰5 9­†WÄi˛õ`Ô¨s×[ģrv™/Ą6ģĐĀæÕÎvđŊ´×Ŧ“ž.O~ō7íWŋí26ä;Ÿ-K!OOīîÜųÛ |nÉE…:ĮUß낿Ü*%eôãÍÆqŒ:Z¯}!p¯6–O@Τ,0‹ÄrÉS™æLđ’#wq†D@ŧŒY]H™–™ĶˆØYŽÉāøØ‡”$éõĩV’hlz*o<îSˇŦÜĨŗ]ôžƒ ģđažå?ž@¨A0•ž€^mKøÁĄŊ5?5ĢņiZáœyčB@īÅãyĄāÛ{sËt˙Ä7n^0 É ã/ĄgĢŖ-øĖÎâ#ūÖÎE>ˇōšq kÚ7á\XÃԎ¨ŠÃÍÕcAQ0ĖiĻeßčøŗĪžn˅^TĻdZÅ&×Nƒ`€œá°UĢj°;W'áÄ"¸Â0KNŊÎĶ tų,>?<ŦfÕԋŨzú„īS*[ë%n5ČëTûôŖ§īnĩ××g!¸Æt™#ˇåōE€øĒFY''/Õr91ĒĘÜf?ÉūZfœÅ=ĖXˆØĸræĪŪouĶK]^b_iîøÉĮĩøôũKę\ũ ŨĖNõ €Įķn[tĄ"@›ëĪåŲû:ŊĮy‚ŅIP1FCrn¤ ĄQĩ™In…NP´ÆŸtnüĖžĪ=ú´yĄˆŨ@0Ī‹NhŲY‚@_8¸ëÂÄ^Ŧšœ~ūĶp ąŋĨOĪĩHŽŸØh#ذ>ųõ–߸=f f?7`ąÖûbĮ‚e!L ¨j™VYí™ÃîN17tîKR-Ĩęg“Nš÷á¤öøG¯ŨjŽN Ę$f‡Õ-%˜WąÎîDP&Åfč ĢW™•aœø]Z˜›ĩøģĪųÂŘž¯¯Fwēx6í˛ģäXžĮ5žĖōų ˛ĖâÅ8>>ŪÔʓ}ŲŦ7FE~4mĻĖ'Öæ$"aÛ.Ëæ›Ÿ•˙¯ī~Ģ~ļ+,†öųˆXĩ¨š`RĢ´Ap˜|IęœSĢ1øÂ7ũ4ĀŽL*}:˜6íîŠåĩÖZģ`‚7Ķ?9Ž4+û( N^Å2‚Īƒ+^ļh”ĀsseNJd”,/­.čÁ`ÔsJ¨p#ĩļŒĐŦšßÍuŽģ{õãūĪ6›K;’Lb€›'iÚ§eĒŪŨ,rŌĻ~\tŦĮ$ ōÆ%°ę+oß$W{ÕōÄ<ŌĨ?ÜAũ éø€„č@&q[ĨáO’vLáI÷ĻᘤŁw6{}?{÷ėiJQ­ŅŲ>¤ åtbi´2ÎV†úRŸĻ§Ē`D§Ī2âĢøč ŨÂãÃÁkײõ+š¤ėîÄĖŽ6S;)õđ° <†'WÛ;6rā"+#“˛:2g² ›;ŦRÕA4g ‰ú2Ŗ>FĮgd“{ÕI¯õ~ãîŧûŽ•J)ˆ‚/Åyž@Va%ب Û´œyZĢwFĖ-Š™ûˆKÍ+ZÖ4˙üøĘ{;ĩËOځÉ˙y§ūėOŸŲ•))īŊˇ‚$\m?ËĻËoŸß"™6VÉĶ^°ĢĪžĸN`ĩ荁úxĖÉĩvmBŗYķAåŨЏÉKU›ÎqÄįĮí]—ĸYLæ×îĮˇëĢkÕĄgWv'$u‚HžA„ŸÔ3'ĀŨ˜Ũ´'ɅŊÎWŅa•!˜?ؗ5Į17ÂĩÆz—\  GÃTÆĖÖ´~ŨķNú4Ô_?¸ŪšĒ&ĀÍŝŨ°Á-t^ļˆi‰Áā’ZwáÕØjŦ\Í+áeŠ‚Žūšßš~m{ÜÖįb†Šä ÎŲ9ą2å3Ŗž €/Ž,GPJƒg­p:q×ŋâÚ@^TŌė\:œ`OËElĖzgįŪÛŨŊÄ—xšŧ¤ú ÍŽĶįæ0˜a ąō"…˜‡ â ¸“-ģ,Ļ–ÖíŠ ã1Ņ&bqQ5Ņ…xÕ,Vhō jÁuŋ‘Ŧ+Ę+áTL”‡xĖUL›Ã'ŨÖtīzpâ•WF<.8ra™;I"ËdäđqCr‚2[I¨TåpÚin5ԌÃōëî1ūöhÖė?āũëÔŲJ…)ÆūŅŪ\kŗ U5ĖŊ¸;×ŪíŪØ§–m y˙đ۟í^č9°ä1%ø’ž‰æ”đ ˜=ą+¨¨f]'‚ÁaqZQ!˛Œ:|âk7wjëaöhZ,qÂËqåeGƔ—n˛ÃV^ǟ7‡œöt•ļ†ąŌ$žZĖ‘´Â3:åFZÖ/v6€üøŸĒīŪzķŸž˙ŋ>ÃĘĐÛíōų0?˙nv *|~ÛĮŋđˆiŨ™ Ŗ$h”`^´ÆĐf^Ycc‘ÄŦ˜€Ė;ÅLÁHdréé$ö‚ ™ĮČy us‘hŽĀNuŌč•HB:zđĨãēÕ[k­×Bmĸ{íOxŊÂū  ĩ”ĮÖņY æ8Ÿzū菮ķĘËĢ“9(9ķøX‘VļU•86 0Ô !$ ŗQ Z'w?]´7z9$ mY$ŒÕÖ{æ1Ō™7Ä0į¸D“š“šĀÂĀÜÔŅÍdíÕMšĩzrY7HÂxpÁMtĶ~Ø\vOˇß¨yã—'ĪčŲëÅKš,9\‚ ĮĪļūĮ¯ ’„4¤>›G˛4ár6¯'Ÿšļ†ļų´r¤YōŅZĶbŸwīBāI}ˆJ¤fV´‡ĩ>§NĮZcß`@^}ęēGĩĮÖC1ĄQEÎö)9ŲėđmöŸļšĄ˛<“CĢ+öŠkĮĄ1–ž U)*FŖ$͏$œd&2Š;Ŗ˛Ĩcå,´ŦąžZ-Z ,{‚LÍXÆp!ģšŲ$Ą$ĪĶi"ÃĶLŦĸ)kė FBŒŽßÛ._­jĘĶ.úė›ÍËõGæw˙ūūüīؕīåŅ&ū dŒ|ķĨ†<ÉĨXËŲzˇÂĨˆĖöĨŗĖb}ߘŊTĻXŲ‚8|ČíĘx‚F3!áÁüh œ)¸_1WlBSmšM9ĶĘaZq˛O6ĢÍghˇĮ>īž`8}@uč‘ļ¨ÉąĄEc‰.->Ļ*V֐Ơ6Ĩ02ĩĻŠčĸDWa*yÕĸÆ^–zu<Ė4ILËrjqŠ‘<ę#üÆ˛úäūā¸Zāé^Ō×ĸōb/ē.|ˆ™æ\}>Î=)‚—Iˇ1>üÎ-Ąč"ŒYÄM™ ex “Ļecáã{­>s‡M‘ä‰đĒÂI”YčÎr¯€Ģ ãįOfm3š%ö„ĒGÃMFd°JŌ‘žpŠ1Į‚“Dą\ĮĻ´lŽGH“ŧ8¤1h"‰h„­ųėAĢû ŠFāéņŗø]ĸr|1ŸĀ˙ÛÁÍĮŋ|˙†Ã}ĐØč>ŧsíؘõĢŦžšÛ…:ĶŗŸgO.=ĐSίđėI€õĶķĖæ˛4Ytá.BÍ*bôŖ{ßt„zu¨›Ą_øÖlĒĄŋ^ÍÂņŽÕĸú ¯ŧ6žģާ'$ãŨØjĸŅ9ãŒ´2†™ģ>MČļjvÜWgW­fŠŗ$a6ëe6§§ˆŠ>™‡[åĄe7wZ6z|?΅kĩ4+Ëã!ąM3," ZũŲ0å§ÔäētųėĮŪ*2éDË(u‚%Žl:ĖF<Ÿ&üdžčw6‡Ŋ s[ đņ¤Væ,<ŠE:÷GF”Ę[rW'ĶÖŖ;ųĩ?ÂQ–NŠēÜĖkļˆåx jÄd&ŗ2đ"c]˜UiŦfq>r—ÚĖōE}5N}3´Ĩc#yiŲÔR“˛Z­ņ,%n‘O1KWᮓŸüÛ7?˙¯?ęNI†ŸÜ9DĶ˙úvķė—ËåΎžč=:.ĸ8ÎãcyË,]øųĸO@Vq\ÕK†eIrp‹Ęũ‡Û^Ëŧėä}kēŪM™úĖkŖÃÉ C&ė¨ŧŊ÷ŲŨÅ_Ü~oQÚK0ē’-s›dę#,į$ÅIČ\¯+4gŗēœĢ ģš!TFjđÅ^%ģ“æōÖˇÚztˆk<Ŧo^IÆĮã'“Đā+ØTŦE~ ÖÃŧŊ›†AŠŲtox§žæ4Ŗ|BüXķ5‚͈@‰”$s´÷ĖfŪĖŌĻ$´eÔhË\×ĩRjķ­žķäŖ‡ŌĻ›ÜŽ3÷ūiÜčōq*1ģë´}ęÜ ™ú­'LŖI-VÁĒņ:-šG֋>č7ŗú@‡ŖĩL“>ęÕ°ŪB‰žˇÎ‚/ž&CŒ÷b!‹Ä­*´éôņ;áÎ{Ķq3ÕĪîŧ~M6ŗOęõ•ĻoûFC.ôž[ž8 }ÜÉW’ĶŪ ä -/ÁļĪÕĶgÉsęę^Eõš ´Hî>W8ü\‹7kĨ ķūŽėĀíJ-Į´āS’ų,ëöôŅ˙ô[Ãß<:éÜē~Ĩnũøé„Z˛ŪM)H wá‰9‡<Ā}¨u†P¸ģģ/ƒŗv,ëĻ>ŲčŗEŪÁÁ}ZûîîҝĘvØÜláđāäanŽmn>Å"ãbQV¨ˇ’ņŖCôļģU‡t1zúŲúVŊĨsĩsŒC'Ģ*äžČIĶGh&9†]枤˜%r¸X°Ķ´1)-äÖķĒÂdĀûÜhtĶ$iIÛē/܄ޛ‚sîĒāV į ÉĮč;ˇzÜЎRB9T.ŗ˛ô“ŪLÛŪ̎ IB+9ar7˜ĖyÄL2–Į>ũÎnBĶEhĶėl|rđ“í×e|üŊĩ*}ōø^Ž˙Š'ÞÛĩ÷jÍî¤9S6Ũ ‹JĄŽ)a‘¨(f!¸Ŗ ŲC x‰ ģ~Ądđ\ĪæÉWĻCrZ-$ČąÄŲčJR ņĮ˛MžĪÍ^7‹Ģųî´^ë‹l;lD…7Í=īË.Üļ˙“ūĪ7qrį^ŋÜ\{w;ڐö斈 WvmsÚFŒĻģیK8ÚɒõЗĄØĶ4čʁSĮĪĸ)Ôė 4ŖīŧõäûĮôĘģiŨĘøčņįŨ5įáŦũxÔîš7‡Í4{ôCģūŊ,Qõjq‚]!Gމ—ČÜJƒͤAĶ CîoQđUĖŦĪFÉ1 ̈́1öŅŪ¯Ęáö•Öæø3ōÆņ“ Kwŗ;ŪÃēšsBĮ  â)€‘fÄܙÜ'‘4ԋ!Šc“¤ŠeÜĘēÉpZ/ĩëŌpØV—1U$ÃŦijŽZ•ÆÍ…4*%ۜB Ę’ėáãkíæÚAÃ*=Ũ¯aũzÁ¯üOáčøjģĨÃĪīˡÚÅđã‡īķÉđoîž>ļ× o ĘYĒG°ŌŅ’ –ŠŖZ€EÛFC3s>Ö˙îķôl’}ÅõėLÕ ą˛9=Ü ‰QqpoũZž0‡â¨ļ/-´‡Ô5—ÜMpj›Ą­ļ°I&ĨņôîÃôúÕ:;Ũûé$ôŪi¯ĩ¨ōÃ2aČ Ė>ÛaicQÛęP6gOÄ+¯É2NUiHVk9yTŸ>ņ‡1ú"oąO'ĮGíׯåÔŋõVHħŸíŽäÛģŌ…öI*%[YÔE™đŪŖ'|íõVæãn‘Ēz4 -*Ģ‹xUZîę4,R!b2e36ĩĀ>“@‰Ā1|đaŧŋV×lÃgØĄû?ĨĩˇŪĒ/Ž`=>qÔ( ŽG֑‘ÎŊAhÚäį,ŅęHޘsŋã"ęlu'wbŠ 3'rv‡ø5­˙éÖíŽéGųõwn†ÆucáXMįĶ}4¤vÜŧ–z‹~ܯuģN p¤Ŗ&×$ôAL¤F‡Oe‚­õ åÁũ¸WÉÎÆÚŖ‡˛–ŋųzĪK{|īQ=ĢūüvBn“:įz˜SEᨉaC3˛õ°‡ qÛ‚ES!&@æî*Šeƒ*äĒ3€Ÿt0[/rC}A^ĻBūûŅ Õi]Įø¨+â÷ÂíÆ­‚ō( …ë´NUb¨7ia0Î’Ž O w…XwĩHÂY€}ÅîĪkÍQ*ķŸ}Đũî­ö/?_´Ŗ¯Zæ ŋ­ÆI<ķ×ß €įæ?ģ{wÚųßŪ9÷8C†/vëk~0â^L˜ŸëŲė+ÕÕ-3ĖæVU# i+ąjŪ¯ûē´ļ‹ ļ1õ8¯Õ))Px%TXf5]ô6(zŒiRŦdÂTõ6Ž?xįÆNXÛÅîĶ“Ÿ^û͌ōĸSMį\°įmßĮ¸95 h \Ō@^Y1Ąo˜pĶ|¸ŠMnāđđˇdõú6ã§ZÛ×w’RũáOŽ‘ŊÖš–šVGŨz&ÄyLËyĘaÎ̈́Ģí0ŠÅŲņ ‚ĄBô„āæJ u’šE7[$™(æ !8&/ų¤1ds˛úĒ]ũäwėfrÛĒušŊpôëNnũ)7CĩßlĪBĀŌ‚›†ēšgT#ä€Ö0ÛD‰z,JžƒË åØ!´¤<ú23•?žx›'Ãô/˙Ęt!2ī~6‚Ķ÷ߒfž6a°Ø 'Ôūzw_ũí—ÁËũ č'„‹oëY5îā+ˆĪ'DFæ %2Šb-,”ÖÄrΒ `ÂKš&f7…ķ˜ã9âĶVZõŧ4PʛMšīūÚëk[WnžfĮĮû˙üQīõ^žp–:ņ:ÆUœ`?í6i00,ļĄ!iËd+YPųŅom¯ŗo¨­×wׇŋ|jÍío×]ãâāĮOķŪko7mމ2W^"å4ÔGky FŠĢģeÛA r6q\'ɉ1-oÍû‰dĒH¨ Ŗ| ÉŦ1÷8ÚxØJg5÷éįw~ŗŸ¨ėĖmļšU‹“{{wG­Û¯‡IŸÕ“é<ԁŠˆƒD`,fsö„ČœÃ*?Đv•œā‰,DĻ;¯^;ä°hĶūøŸ~Ī1Ēžķí`wîmļ ö韄É#i%Õ6īĪĄāb™~ķ6đŌ ę˙Mî—ęC/„Š/ü*BĩÚōē„p|ŌmōÔįNq'ÖŗEĘLâF›9‰čÜQ ÛCĒcBŨQk›L]gYs0ú–´Ûv˙§$ož{ĩĩŊuíĩ~ūtoomRrĐéx$Ø4˜K •ģ 3 Cĩdžžú#/ĘÅÕkĩúfKî=–Ũך¯Õ2#ô÷^n^ŋšŪœz‘•ėå!OÖBHĐ$ķJ‡-sÖ#ę$‰“™Ųql7ęŗÄ‰<Īĸ'œöØ 5ĄDS˛íé,¤ÁÄSö5žęU3s |đÉŨģž÷Ōĸ7‹f˜<ė{oķæû 5ļ n!ÉPZ:Ũ{΂˒‰ĶŌTälÂ|sc:Ÿl|qFž+ĮG>xŋyƒ°ŋøNËö˙Aū"`|ˇ—–NĨ~ÚÚ@[w¯ųËNgu™mũ˛â¸LzŽgŠžB—ĻįĘ)ęnđF+,Q0s¨NŒëYŠ%ŧ\ؕãY÷’hĻĨm8ŠIēîĶԑŠroPĪhŖK›O÷žüøŗ­Ģ›‰lü›ōđÁĶ_}ߎ •Û o… ”[›ĖØBB‘+› 'U‹{›­o××:)ûäŪŠwŪíyŒUũŅ'‡acg§ĻŖš^ šŖĶ”áIN„$ZnIšû9ŅKöēŦšķ*w›ķ°“JVæėŠI]8ņŲÂĶ4‰ôđ—ũzMjŽÖN zđË}4v›í`*`đJÅ)°ĢŲTŌKˆÜĶŲZŊ:Ãp,=7ĸ.0НŽNuûøŋ ’°ķ0ŊSjđūöĻ?ƍíŖãõܟ€ËäįßĒŊJäôw‹]2!Īķ›ÉWBÔ^ċP$ēėčâĖ $ËJP˛ĘŊ,K5-•‹„Ė1"’ܤ&Íqsō7¤N˛ˆoŊŅôāøÉSaėžuõęÕjĪfũҝҍ4vi%Y§DÆĪzŠ{N•V‹ĘĻ*×FûĘzs­ˆˆ•åҝ~žØŨšļA1HrôëÃ"ģ}5ĄY6ŽKā4 j­`ՑĩE„|:ibœę]1€ŦŦNŠ4!÷\ĸģ‹XLæKŽ~q­“ ´Š'Ė4פîPĪÂāū˙Ŗ‰ųvúöÕ:ö~u;[v/Eåd 3CŽ•…AĄä•ŲļK "*73i°˛ĖS~LI˚§X)Wĩ¤ņĘejī7:ō€ūd •ã˙Ũ"ūÕ;äŋzøŊÖÕĪ!ģŌß^@ŲūáÖīĄ^Ôášö™§_u9;ŊŽs -Ģi`’ĖKM‚›˜Ė(ė‡Ô¸ŽķܘQK'čhËט—[¯ŊŊ_¸Ũ˙ųņέd3(mxЁē‹uu—ŧîDj&â>ˇē“-*Įį5!#ŅŌkÂæäõ¤Ņt,$ § ˜ŸŦ§^Nĩ_ŗĖõŅß?WoęGņo{ųčŗģŲæn~=1ĢĖ™jšY7`‹FJTÍÛ07/Ŋh:ĢSÍQđé6Og„­•sļ¨.uÖÅڅ5īwŠČ_ūO˙—G)H8õĩ÷ŋü1—wūņÛ7Ĩ—ūSũß~įĩČŅȍˇ~?MXjÃå‡:į?[čķē&|™K.ĩ(‘ęLžŦpRhębk Y'i—ö@gT/ÆvbÔ&<Ž<1o”hT Žž\×í,XoąV+jiülr÷îGaswŗųžąž¯’ĀO& ēgk‹~ÔŪÃÛO2oĻnīĘZš,ɌЊO>¸Cãæĩˇo6|cõëOãúÆf^čp¸Ū¤X-^æ:vn4=ĩ+ãZ’¤đģ‘Đ(pŗ`Æŗ4”VõXÆIh„ĄI–d€Á+ëK+æÂĻŦ͎;ޟ˙įãÍÖfißŊz•&w5ˇßhQ Dg‘i™8&0–f㓖 ˜VÄY*´()l”1i <.F1÷rĸšÃ•81?I¸ÛxĨēˇ`ŲĩĮ•2ŅÍZīŊvÅGw~˛ķ'ĸ7Ū˙Y¯—î.g°Ųžxëë/}ģ€ÛūŽFđî<˙CAŦ‰ĘZĖ.U<[}[ŗų´š†™“šŒƒVÕzš's+q¸Ū¤ĒËëīŽëtķ$>xø‹îkiāÆZ’$°fL¨Žŗ˜Č dUi” Aĝˆ<ę`pôéƒI~mûõ­Ģ6Šã“ęÉv{¯ÁÃfŨ¸v€PWˆšUpjĨØ<#wU¤]W ęT'ĈžđŽŸsß`r(ČĖ ˇq1 uƒŠæž˙ßN66 ÆÖÍ&î}ž×’Ūv§ž$‹4c bˆŽ@ ¸[–˛kNL#fqfĶPWW5—AŖc3N[ũúãZo(Iœå>?ÚnjŸžķJ<g–ÁŨuÁݏŽ7îí=žņWˆ˙Å­Fvē*æ[?{ô25{%|˙åúį ø{.gKyÎíȏĒõw‡ûkI¨q­”˜Wq´ÖÂŦ9äôģ囈ö1]X­`īŽ’|Ũ?ŨØųđŪI5kļ×ĮúúfËŖ>Y“!dF’ĻF¤ ¯4úЙûŸ?9‹7:ˇŽ´:‰ķņA#ŲšÚ:ęi˛Y'÷“$ ^)(I`gH…ˁÁrg4,˜*9 M:‘,¤Ē-ˆ;§ĨŦ‘Ø'%Wqf•PÍĖ÷𴞈M\ß“>´÷˛Z˛Ŧ‚“€ČIĢo¸(¤n Lë öčäP=é6É÷šiA^`ÚJCظQXCo{e1ė´ru:)ûĪŠ|ūÜxbããM`ķ{‡?úQwšŊņ¯6œÂîŲÄZŌ^\Ŋ„õ›¸ <}^ŋ:@ŋ)Zö6„…ŅŦŲ„ ){Üx;˜šöŊY`°D,–|ē͞Ę;’ųíŅõ¨O?ĢŲūŽíõF[F/“^ÝĐĨöį,~ō؛<ņԊEL˛vŪŲ\ÛI2Ē"ÁęÃũã[ģˇä˜õ& l5&ÖmOɔJǞ$€P2-š€]0]-’Ĩ¨M$ L€Fq œג<°nxÂN8ųé^KhëzĢįũŸÜit¯Lk önjķépM„x'–‡ųˆ#E7ņÂĮĄˆũ„úaB´]B_RīëUÆ^ÛÕąvĨ’"YsÅJ˙JROOœČoũû>Ā_ÜÜhâbI@đ­fûĨ{ųŨũęųzŋ‘:áĨ÷C¯jHŖÚqŗę`Õĸ$Ep…Đ2@N‰ŒÚÉtØ;D7SPŨ¯ĄRĸû7ÜN’}“V\øx¤Îō°Ų¸wÔ<ā$_īŸX\@íĩŧ-fƒÔ܉|~ôx\_Û+ĒyĖĖ\,"I‚yĀ€Ĩ˛+ J¨ 82•Õ˛Úfv"ÂYėDķŖa¯{­Éāy<‰î)Ģŗ8™{‰XOŠ 'TGëėМĢž7¯C‹ĢV€[4ĸ >ĸD™Aj“‚ÜÁūvÖßÜfŒ?||­‡qsY{Áė´da#_ömΨ7°ü؁ ›Ė|OŦH@ŒÜ€ Ě/ķŒčvŌzą#wzöÖi8ūEŗMX˙ŊŌ_¸įR.ØgßŦžoä­Õ| ‹Æ( Ēc´…:O˜\Ę ĨY“Ú56ΔYkĖ€¤ĘĨ‰;‰ E‰¸sIŦTfKāM<6dØėčI§›t\m6ŧŗoˇvÖרž Ī)RHÕĻî qu!°ÕÉ:‘O‹Đ0à) r ‰^qFæŽ2‡,3ĄXũædwûJ>ųÍāíĩ ÉĒÚŅéĸqC~š;hU~îu¨],F"ˇU‘Ē-sž\åXōöíŨH^>„~Ü?ü]ËŪ×§/Šk¤ß p*‘‡Đ|ëÚ&“điVōü‡?ƒč? 8*ķāâ–ÍV§pzJœYötĄ´Út;/†¤kļrû:Ĩ¯ /ZĪø+å7ŋô­—íD$ ´ĸm2gĻF¤Ņ#žbŸZ›Ųģ ŗaP_âĘO،élž€ž‘ģOî69ŒŪɛMu'ͧĩú•Ē8ĨY6„ĨÆZ´tŌČ •B—ŽĨsŊ>tí.ąœ§D˜RpwbSs"Rˆ•Ë֞įĖ_ō›˙גküņæũĢĘjĒ/°ąDHIô„áâŗÎ+æfU†g2Čruˇå/u /Aīė˙Ķ_¯aT5ŪÛũ3öĩÉ<íâk ÔžLVērĒΝMķ™i-“d‘§ÔīJ ŦķČÕÁ;-&3žˆŨô͟„c$Änš›åŖEWÆÛĄAâ xŠ•lm7=ēÁH&ĩY­Ė¨â J emš;1ŧķĶKȎ:•uג‹ĀĸēZ)§}\VîÎá÷[Ww2̓b§Ë$TFNH— ¨iLˆA•‹U OĒ­ƒXj[Sޜ”õ´$ņŠŲ´ĸ{Ãǟ‹ä܉"`Nō’=īū\€Iuã5OøFåŒŖ¯——ę%˛ĸž[õ• Ķ‡€6RVc  ĄîŽá´Æ)œ˜@†ŗĸ7Ž “Œs¤€yĨƞ­ŪNZ.‡õ:e¤q˜{á "W.i ‚|iûœaŽÎw;ƒP,'U„f`æKjõãÖæzųôgŖkooHj¨Žģ\+"ļĨ&A ãzˆnđ1ĨœÅh–) bŒäVįiŠVĻQŠîZ|lÅ0é6034 gÉyž‚ģ~–%ĀĮãíg ÛžŽš|š]wŽ×˜ÕžĐņĢ -}krŌxŪŪŌŊÁ0'/›­ō:ē]‚ÂŖÅh5sW–$Ā* ×Հ,Zá1ɃģœY,ÃÃøæU%‡YP†,ëŖ¤Lŗ.Í>s†Å¨…V­{Ξ+:kˍøŒˆœÂ2rúGŒŸÜŸ\{ķÍ&î˙?'īžs•A§°æbĄęÍ1sUŨŖ6‰ LÕDr–e­Iâ`1b*CJÆRˇĖ"\‘ <‘…6I-Ą*õļVcų˛ņ–úŪI>ø8\ũCŗ÷/傞ũ[AŌŲ—€ÂjßsxŦ$!b­,I°â3!‡‚ɝUƒL„ÅÆõ@D`ws&š›%U…<%gf¤Ļ’SĖmXoŪ¨CÁĶ3tĒ9ĸyj–^O$ Ŋ œĖĀ%aj÷<:*’åqÖg‘Ņ>ųņž\y­ÉĒ7ßÛMN+(œ&.!WyHœƒ9ˈk0GšĶ*ļAK67œX=ŅH>ę2Ãäo~ôŗũ_>|ˇķ;ƒšŋŪī”3=ãÚļņÎÅOŗZ:Ėåpq͜9ŖÉŒĀiÂfęĸ žĀOūķĪZkožâ5ŋŒ\čW—ūKw%ĀEÜ­~2!ęsO—ųaUf!ÕQ,Cę&ĶĘ2CŋK'QpŌNI*×ĒdlŅĀ9ČĶĘf jĢæ -(įpÚ!x)vjnŠ4ląë"KwtŠÜˆVÁĩŗĩ,%Āņôî}Ų~o?ûŋ‡ųëˇÛĨ÷Ÿh+ äVd ^”ąeŜ×9Gĸv\Ć ,DŸ™8E„`îƒā3ôh‘‚–XĐHŦXÂ%_y#gN^’Ãv?y{<}Õųú2Bg¨û­ÖWŪ:Īãgķ+Y”Ģ2 -;6Á•áėæDŒJ Dip'˜ƒÉČĘõěš5ŒjD°jQilyZƒC{r˙sŋũūŲ†ąÜû°X°ÉŠ7ĮáŽy8 w:^.™!aŅBÜÖd!`R'Üõ,ĒáūécYũåûÜ˙ūãpûæ6“:&ŸŽ8Ą™'{Ė0ˆÄĘ ‡z`DĩƒuŒƒåæXĖ1CÛņ¤ŽŖíÚ@i¯š)Á'›Âĸ%/)x]]§žÃ×'nļĮÔû&2Ũįzö KAîUōĖ"‘$åhŦ„Ũ ÄTy€ÚíNî_ē˙[Öå¸öÅPQÒO˙â;ZŨF2NCĶĀâ7'4é û0ŦÛÉ'ŋŅĢß{Ŋ8¤€kŠQŅņ˛vęíš[$¨œļ‹ŅĒtpÍ\ØčÔ ZAaųx 3 ęGŋšˇķVo}íčې:o6-¸ÍÄĸp˛,Ō ÁD<÷ĘĒāCui°ÁĮˆ~lF'mm{s˛‡¸ģ.Ipã°y9Čú5+„¯Æųë¸ė3ëĖ„Oė)į6šĪ+JoĐCšÉzEĮyۑŖæ‹ZʒŽēŗqŊîÆ ĻŌ($f™ČE ˆ›ŗ@+[aËü\‹ü™Gķ%¯–9ÁĪĖŨ¤‹ĩ$v&s‘Eύ~¸h„8 íTüÄkĨvmî<˛NeŖä˙kīK›ÜH’ėžģGfâęn˛¯šwIk2ŲęƒdĻ_/3;;ÚËfwfŦģŲÃfYU(Ü@f¸?}@Ą.} šÃfĪû‚B" D>xDúņ|Ŋ>lOúŸĸßo§ŋųxĪvƒDX™Î‚‘H  Ā8ÖÉ,Žôš¤JoįŠī vņđÛÉĀ˙ũ_ŊŸūâĮāūO~yŦ`"!=¸Xĸ‘ÃTąĻOˆ=šH“8‚Ģe6ŠÁĻ}bãAšŠJ¤cßWËŊÕ0ãąęN˙ųč yŽ ā›ēŧļgüT÷ZČXNÔ´š¸XęL° ĐrŦ+=oRRD˙Ų{cM‡!ĶšC:M×8'7-6Ųu4îe?eR->ôö Ŋ=6k*g­ÔYK4b]1„e9Ŗ´ÖF)"›åJ "9C‰ļrL—6 .šœšö%MŦ’Æ—û ög(Œ9V&˛gįN.Mũī} ˙ŠßqŦQˆJČĘLX‹¸€é‹ĻŸÚ´aŅ W5šŲdŠ’)wûî-ģļiO~ķ ŧ˙ËŪü_ū!üøG `ĖQ75š~aŠ‘É: ėڝ„(l&EŠ5ÔCęŗ#:‘ 6ŽĨ"‡VîĪŌQzŗüz¸gĪv<#ūđŪ+ōEŽJwĸŪ°0„g,%f¯ƒ€GšY4ëNrč4 Ą§C.6, ËÄEtĢēišn,}žU(ŌoD=ZyļöEa_.‡ĩsŸ WĐŖŦõÆû*(3Éésh™ri8:5ĨT̃ÕęvĀÜã´ĐhŲåXzš´'mā(ėŦĢdģĪûЕ´Î{š Đēh¯Ëĸė 6Šív/7Y‡å&%%‰P…\…ynúųđķ_˙‹ôÏ÷ģÃęgG{ ČųŠyģpSŒ÷ílĨŖūĘģ—ĻUãÚAxíM,¤P†Ųŧ+ËNd Yluuŧit׎ôĢ.æÍÁįܓrëäû{”{/ŋŧdŨ„×/ Ä^'\-;Ņxbë<2ۉ ļB÷ąMø9x F„($œAQÉ[Š}…CęMjšŗjÔP)ā*ŲCđĩ;šfŲ62D|ÃøD…,C€¨jhÃR\…•/'ĨîũÍĖÃ=ę(u#!Sk˛Gģeõl•793Ÿsv´Iᨠ™[5č\ą×*Ķ Ģ}ë[2ąT"ȋŗ?œQ΂ß˙'ŖĒÚ/.Ã˛ĶŖŅĪĶᗇ9Ī"|1TiĢN*faYû‘ĩ Š;l MŖD]Æē•}%VÎGiļģĶ—_Đ{‘ûG¯œ÷ä?¯w0āøÚ­~w[ėû]û^ņŽ=‹Gū):{÷qoß(įčÚĮũ2Ī4ÆĻ‘ÂA3xļĨĻ10ФžxņčNėûŧ{ŧ§PCˆŒ f‡Āʼn† -õÂcEŠ.Ĩû44ĨeD{Ŋķ&‡˜4›$•džNJĒjĪį ;QüŸ]x5UtÄkĖâáe FÉ.p¨jŗöPfĀș{Ûļą-Äc-hš#ÁŲĘ!C’(Íā†ZU)ĸãč °Đ˛ŽvNâ´˛nhÛžˇšdŠeÎJ˛¨ęTe%됙–åZŖ'ŒN†@DÍĻî*8—N•j@RĄta˜R ĒgĒŠme‹î\ŠWæEöė5;Īä•O_‰ņÜ5ĢÜžĸ"-C0BU  Ä ¸ęņF*#Hí/ŋ”ŗOūcWfkÁ~oÛpb—æ@DÖˆbzHzˆ&¤@!ë$MP‚%6Æ­Zzô¨Ķ;8úОũnŊß˙ᡏŖßÛ[ĩĪuÕę<02VæžœYz˙éx„WáĨV­fŗhSûz>ëP.Ž+‹&Đ­k– E`eētˆJädX˜įxΎ)>ØŖŠ{ã–,’Å´Z¸h‹- #rc­M‘HŲ Â썈PKÖ&fhÉ4YŠ&Īj^C)&ŒŦęáÁĻņ@¯AQG3v6–ŌØō&z˜ ž[ĨMx†%É x֍&…/Å:ķ‚ĩ$˛ŖJĒ™KĄ˙åÆ7~Ŗ{€úõq⍀•7AQá6NDī˙ņ Ká,T#[¨Üf…íÜå’>øxqøīųë§ĪęUŲ9øã°ą~g[vtË[$ØjĘ1 P%u÷ĸčoį×͈O÷ŪFžŨœņÜD3ÎĨpo¯‹T( ÆpÂÃāÆX”Ęy“¤hcr‘}ųŖîà âôŲßoäägBέTŪé {øĸ_îī„Ōnū^œ7Ÿ^.­úÉõüņŗæ?üdûAĶÍtēÉ š‡I*Ɯ-¤@HŲĩĀ‹ ‹51§kY9Rb뮙 FÄ.Ąä-ÃW]š—øĪܝôßnž=˙ ąP¸aaĀÚWøė-žŽĘv!ĒĻ^gL˙ŋúŖŋ9Q1}ôdŒdŠ&÷‘tûwû“ģ`n̏Š}ŲčâŲgĪ>,l$Ãáō7—öÁƒ÷@ĘôŦ’”ĻÅĀ´ĖfĪVĀCrXJB—“–N] ô2ŲÅ(|™ēˇWC.Y5ZØWÎĐۉ—ņŦųũĮž}5^ÁDĀB(˛( qŠ "Lš¤×dé™ĻdF,ũŲôįŋ–φÚĮŋ},•ž}rqđƒ#9)”u>}ü]ėī=čŠĨYË?ķ÷JD_ģ c¨w ™ûŗé´fëh™ņåü‰ö’u‡v`øäf-ûë‡Û<ʛ••Y4˛čxkÎęŽ;lmƒ,{\JĻ”lÛž%GSxˆiA¨Jų]ĩd/Ä Ī>?é}ŗoõÆrÉŋá\d„h[3JæUj]eáhŠŖŒđ…}Y.¸ūÛgl ‹ÃŖî ¯ĢņéŧķŲĶA">Ŧēû1Ëô=+M—rT_WCæ:./ütv0Č0}§§Ĩ"Y÷ƒ“aö§Ÿ~˛}<üÁu­Øã%Jx8ÔāžeÚQĪYŠī™–Å.A$‡!ū,ˇrˇįķCĐE5(ˇ˛šß\ûĪÖ_|ü ãoĪļ ƒŠēĻ8’ŗ”ē’Đ‚Ōe¨rcQ7“~<r°w8îĨ#Y$9´1æ“ĨĖ­7‘nz؉SU÷ތ8ŌĩGzqŠĒ*‡zâ˙ō‰pô 8Đ3ņôô7 ˙ęũ“ŖĢšžË䋏ŨkŲDB§Y‘Ķ(ŠŗfĻ0Ĩb*gHt’ŒƒLŽ^nđvĖîkÁÍūėÉq÷;ËŗŨ#ŖvãēLĶV „f ZÛ_gâ‹O˙¸ÔÁü@ ķīaōāĀķēˆßk1ĸ‡ûYĒ“§‘ 8˜†V"­ĒUŲͧ˙\ĮŪŪ‡9ޟŲ`öxsi­“_ũ7KlÄB×ú¸7*ĘD0/ē”Ë^f:OTšēɨ¤\´.ĩėE'8XJÔëÕG{W?ōk!Ÿˇgv_ nÖÍĶáā;ūŊv.]LĘm*,E [.­­âMŽMí˙úˇÎŊŊå›üeėĪbp€ĐîAĖ&>ŽtŪ$ŅŪįR CŸ_Øø G]ÅŠ ÚՃÎębņ:_†ž|tb#ŲE• Mƒ$Ē*Ēžš–?-m4•Ŋ$O˙Ô"÷Ī“íûfP o{ÕŨąė]Å.`›e1xå™o?ļk—¨@ZI‰‘ļ6ņÅđ˛7í˛•Ģ6˙ĪĪ8[å¨p>->ZWeĄŊĸw@h<‹N gÃōđs?S¤֋t?.učų‹ĪĮšwäíũÎÏö­ l(’bqÚ§ĻeŗnŽKi7ëqtõÉã>[ũÅ{-‹ČCôĩ¨ē™&aÛxßģË1⿉“?ž–övđö_9dŖ]ŽĪÚuaŒa­É—ōÅéFí˛ƒE.ĪŖÅãƟ‚j­N5ėŲ$N}öe1YŸyįäÕŽ9/đ„¸ŧ˜ú<î>Ô.€ėĻšR™øĸ éˆđMZŸūtŖ`ęÜ.‹ö™äXđn,ų˜øWâšgŗĮŋëëæmėJ3Z-˛Ĩė :Sjö/âlg~˛îī)a!ž7ŪDUĪ÷qT¤žsæ˛?’hōxzŌÚlb˛:›LzHíõōčAųžŽzĄ&ˆMF°u„gžēØøã‹ĸĖ5NģOG?í4‘TŠ{ÅŨžîšõ—ã†g§_G¨í;†+Í4ÍloqŅ[ĩZR$…ČŠ›úŲo•k)¸B™OZ˛TŸ6Y’\ÚH.1)æû1J‹ål3ę=9íWũš‡ÚžGįGЎl#ĸĀũŽ#b*۔Ûõ a­RŠ%=] Ž”ô˛”Øī Žyv1ũčĩÔšŧu ˜k–āšl-ŒLÅëqāâŗĩÔlƒE’ËœĄ•įéØNGĶ}Ęė1ŧŋQčžīå8¸\ ë‹~Ģ8Œ„‚Ņ\öY 3 hƒ˛ˆ:„ŅŋË;9Á_ ×<{|ņĢwg€YÉe‘txæíQYHŪ0|4›ęFM'q9ĪT;˛ŗ¤Üë›B{ũ59XC÷+CĘ"ŗČŌ*´ÉûŌX|vŌ–B!Œqo™úËĐĘ "*Azu'LúũÅM§ģ:ÜŪ‰ŨCÎęR°ŋh{§)Tؓ VRļ*åqá‘pÜ䋲ėJĻG÷˛SVĖLǏ Ĩ(BjŨ*žë>BĒķ-ÂĻfĘö´IíĢŧ%1ĸ~U÷\Ûŗ'—õœ=#ņVæ¤|}@lŋDd•ŨķĢY2hô:TTKa¯ e¯ęŊ Đ#)@ŅPĒ̘C¤qMŽélŅĨíÉ]ũ ü…dW¸ļgVž ŋō;?IđJ=]Ë+9¨mÚā.mTDAŅE‘Ā6#Ŧĩ=gˇäízŖ9MęēąmĸœĒRdÆĒle×ōúŋūwqÍŗfõo ˇũįĀuæ5nāĒ\ЙŽH÷ŽÎ*ÁhŦ^gKÜÎŦ4@*ķUĨ€ "HBI"ū•ąßc\ķŦ3ūÅwxÖxC"šwÜėNŠümŅN†š‘Ô”*)ą3wúnūL_ŽyV¯ŋWķ´åŅķ’oˇ"ØˇräY€zŗtŊR#MģĶßáßâëÄ5Ī&o{Ŋ͟ŠėÎ_\)âbŽ‚ãš1‹¨+i%÷×Ōŋāëášg)ũ™Uöūܸڲ+ĩ‘Ęļ.YŦm[ öŎÆ5ĪĘÎ÷›g7%™+éëVë[šiŪņŊžž?7~ÅŸso;;ĩÅsdš•Ū!!ŅÛ)<ū:ōߏøĢqÍŗšÜt÷ŧu‹õ.}ų{rw.îĩĸ1Kŧ[ßúíĀÍũĻĩî— ķ–xn.ÕŊ'oÛÕzUlcįā¸ß¤â/x=¸ąg6D‡)†ŪŒĀ$GkĶąr+ā$"*[!ŗ  @đžÔ_ō÷ qSū¯í×ʈ–ëGžZjé áįö5Ī.~ķT¤§Č\\jšQ-ą‰Î†ļWĻigÃŠŌíO9ĢVRyŒdĻĮ a­…´—>‚E%4A´‘3c¨)< äŽÜësøVā퇝Įė–e~íōw×<ûéŪ/! ^‹dc&"\‰P„7Y捨§UĶ8ÎM{‹ąjX7‹TK›Ī•kö2ZēfģŽáåd(ZAÁ™ 6uC u¤q6đy‘#Ŧ$`DQ°ņûĪSU°ŲC…† + ŅBMđ­pKŽ„† @LB:%dDdÛv—°mŸ ē (C;‰åÎq+w⚁Īi#îđmø÷}åíužÆīũgßøû”†xƒBwˆŠ$æ`]J‰¤ēSÁ…7l%25ĢKI-Ą’zđHębúdØZŸšô˜¤ĻģxÍļ*$ĩÖ:MĨ$œĨ^pŨŌņëĩ ۏKļ–`k-)‹h¯ągĒl¤TádƒRܒrŲ "%“Œ¤ĀTģāÆû&“™…ŠˆĻ˜TŦ­Ū°(ÄŠ 04ŊJ×é-í¸ÆŠŋYĘßûô[ũPîí€ŋr„b+"-Āît¯^ōÆW!<„ŒĖ+ŖÔ¸ÂARD6%sVdöb]Š<7ŠÎš>yŽēĖē{Y k˛éytā5’Á-rm iBš,ˆQ^îé4{GgŌ[¨5Q:/b!E펚¤. žoį™eUjäũqĨT-aIĩ(ÒxÖVÛ2ģ™IQčF`* š] ¤o„Ø*F&‹f[ėĄI=›"Ä@^ĩāsۄ¤í‘-ąÃI‡H!Ą[ =*tMW÷ĶA UD_ĩež˙üÕ,Üøi}õęĻ,ĪáOË]ŋÂÖļ~ķhôƒíÛe÷97šc†Ė¤H€clK™VfœâΈ܊8DÕ] Â]f†wõ˛ÁÚz“H&ķŪ<ō&šŒVą¤;†_JËČĮ‚qž‹ė_$!Rßa:#Y &=\ˆ„+æFZ2´1ú2&ÄĒĸä#ŗėIræŅĸUâũPåĒģˆJ^Æ:÷Ã/­q€Åeo.ëÎ‹ũÉØē‹ÔmØ]=šČËÁ†öŪ8ģV›"uMĐã4)RY¸QĮ”*ZilSėn]ŽošŲęŪ=ž[7˙8ũš~3{öa7ÖÛĶsŗ­zéë[üqnKčB J:YNBĪykyaDvÂMPY/ŅšĄÎ… .˛Î›î‚ûƚŲ篆Ör_´š†Él*FJŠŗč'žĩĒč 3Fŋxí8^dí\h_§°•ɃÅe  pž<Û…öë˜@qđ41ØäuˇFĄš–BĪĘĻρfƒôŦÛM6Ov’ā1)tߊ‰,Y;F ™ˆÉāR āšanĻ@ém76ōF˜ũ×ölu_ÔûģÂ1āļ[â_ßWĄÜOņø=Kãū;Rp_Tãæ|ÂŽnWšÆÎ،mJ°ÜZˇ:ģ[˙s„*ą$THyۛM“ Ϥ2.ÉĢžéŪ!–Z^ÎBŠrą!`aX•fÆųL [ũLĻĖĒŠHQĻaŨXJą^g9&Ļ{Í ebŒūë­1ŪÔĄl~ôĸÖw Wž’{ō”7xŽ<7¯ÜĪÜUõ”ģg>oÔŋÍ8ˇ#ņ€ix@ĻŒ€JĶPJÖbÁIt˛D* ,DČØ,l Kô/=oōŅbđĢŲŗjúũŽŖŋi<,ũšžã{gžĀr?ˇúĻCíMŌ dÛÅV@+~k đĒĪ{Ž­Æ˙2fˇ÷­öÕIENDŽB`‚leptonica-1.86.0/prog/deskew_it.c000066400000000000000000000114551506303110300166530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * deskew_it.c * * deskew_it filein threshold sweeprange tryboth fileout * * where: * threshold: for binarization, use 0 for default (130) * sweeprange: half the sweep angle search range, in degrees; * use 0 for default (7.0 degrees) * tryboth: 1 to test for skew both as input and with a 90 deg rotation; * 0 to test for skew as input only * * On failure to deskew, write the input image to the output (not rotated). * * For further information on these and other defaulted parameters, * see skew.c. * For testing the deskew functions, see skewtest.c and the skew * regression test skew_reg.c. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Default binarization threshold */ static const l_int32 DefaultThreshold = 130; /* Default half angle for searching */ static const l_float32 DefaultSweepRange = 7.0; /* degrees */ int main(int argc, char **argv) { char *filein, *fileout; l_int32 threshold, tryboth, format; l_float32 sweeprange, angle, conf; PIX *pixs, *pix1, *pix2, *pixd; if (argc != 6) return ERROR_INT( "\n Syntax: deskew_it filein threshold sweeprange tryboth fileout", __func__, 1); filein = argv[1]; threshold = atoi(argv[2]); sweeprange = atof(argv[3]); tryboth = atoi(argv[4]); fileout = argv[5]; setLeptDebugOK(1); pixd = NULL; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); sweeprange = (sweeprange == 0) ? DefaultSweepRange : sweeprange; threshold = (threshold == 0) ? DefaultThreshold : threshold; format = pixGetInputFormat(pixs); if (format == IFF_UNKNOWN) format = IFF_PNG; pixd = pixDeskewGeneral(pixs, 0, sweeprange, 0.0, 0, threshold, &angle, &conf); if (!pixd) { L_ERROR("deskew failed; pixd not made\n", __func__); pixWrite(fileout, pixs, format); pixDestroy(&pixs); return 1; } lept_stderr("skew angle = %.3f, conf = %.1f\n", angle, conf); /* Two situations were we're finished: * (1) conf >= 3.0 and it's good enough, so write out pixd * (2) conf < 3.0, so pixd is a clone of pixs, and we're * only trying once. */ if (conf >= 3.0 || tryboth == 0) { pixWrite(fileout, pixd, format); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } pixDestroy(&pixd); /* Confidence was less than the min acceptable, but we will * try again (tryboth == 1) after a 90 degree rotation. */ pix1 = pixRotateOrth(pixs, 1); pix2 = pixDeskewGeneral(pix1, 0, sweeprange, 0.0, 0, threshold, &angle, &conf); pixDestroy(&pix1); if (!pix2) { L_ERROR("deskew failed at 90 deg; pixd not made\n", __func__); pixWrite(fileout, pixs, format); pixDestroy(&pixs); return 1; } lept_stderr("90 rot: skew angle = %.3f, conf = %.1f\n", angle, conf); if (conf < 3.0) { pixWrite(fileout, pixs, format); } else { pixd = pixRotateOrth(pix2, 3); pixWrite(fileout, pixd, format); pixDestroy(&pixd); } pixDestroy(&pixs); pixDestroy(&pix2); return 0; } leptonica-1.86.0/prog/dewarp_reg.c000066400000000000000000000207161506303110300170140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarp_reg.c * * Regression test for image dewarp based on text lines * * We also test some of the fpix and dpix functions (scaling, * serialization, interconversion) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 i, n; l_float32 a, b, c; L_DEWARP *dew1, *dew2; L_DEWARPA *dewa1, *dewa2; DPIX *dpix1, *dpix2, *dpix3; FPIX *fpix1, *fpix2, *fpix3; NUMA *nax, *nafit; PIX *pixs, *pixn, *pixg, *pixd, *pixb, *pix1, *pixt1, *pixt2; PIX *pixs2, *pixn2, *pixg2, *pixb2; PTA *pta, *ptad; PTAA *ptaa1, *ptaa2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Read page 7, normalize for varying background and binarize */ pixs = pixRead("1555.007.jpg"); pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); pixDestroy(&pixn); pixDestroy(&pixg); regTestWritePixAndCheck(rp, pixb, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixb, 0, 0, "page 7 binarized input", rp->display); /* Get the textline centers */ ptaa1 = dewarpGetTextlineCenters(pixb, 0); pixt1 = pixCreateTemplate(pixs); pixt2 = pixDisplayPtaa(pixt1, ptaa1); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixt2, 0, 500, "textline centers", rp->display); pixDestroy(&pixt1); /* Remove short lines */ ptaa2 = dewarpRemoveShortLines(pixb, ptaa1, 0.8, 0); /* Fit to quadratic */ n = ptaaGetCount(ptaa2); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, &a, &b, &c, &nafit); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt2, pixt2, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixt2, 300, 500, "fitted lines superimposed", rp->display); ptaaDestroy(&ptaa1); ptaaDestroy(&ptaa2); pixDestroy(&pixt2); /* Build the model for page 7 and dewarp */ dewa1 = dewarpaCreate(2, 30, 1, 15, 30); if ((dew1 = dewarpCreate(pixb, 7)) == NULL) return ERROR_INT("\n\n\n FAILURE !!! \n\n\n", rp->testname, 1); dewarpaUseBothArrays(dewa1, 1); dewarpaInsertDewarp(dewa1, dew1); dewarpBuildPageModel(dew1, NULL); dewarpaApplyDisparity(dewa1, 7, pixb, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 400, 0, "page 7 dewarped", rp->display); pixDestroy(&pixd); /* Read page 3, normalize background and binarize */ pixs2 = pixRead("1555.003.jpg"); pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); pixDestroy(&pixn2); pixDestroy(&pixg2); regTestWritePixAndCheck(rp, pixb, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixb, 0, 400, "binarized input (2)", rp->display); /* Minimize and re-apply page 7 disparity to this image */ dewarpaInsertRefModels(dewa1, 0, 0); dewarpaApplyDisparity(dewa1, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixd, 400, 400, "page 3 dewarped", rp->display); pixDestroy(&pixd); /* Write and read back minimized dewarp struct */ dewarpMinimize(dew1); dewarpWrite("/tmp/lept/regout/dewarp.6.dew", dew1); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.6.dew"); /* 6 */ dew2 = dewarpRead("/tmp/lept/regout/dewarp.6.dew"); dewarpWrite("/tmp/lept/regout/dewarp.7.dew", dew2); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.7.dew"); /* 7 */ regTestCompareFiles(rp, 6, 7); /* 8 */ /* Apply this minimized dew to page 3 in a new dewa */ dewa2 = dewarpaCreate(2, 30, 1, 15, 30); dewarpaUseBothArrays(dewa2, 1); dewarpaInsertDewarp(dewa2, dew2); dewarpaInsertRefModels(dewa2, 0, 0); dewarpaListPages(dewa2); /* just for fun: should be 1, 3, 5, 7 */ dewarpaApplyDisparity(dewa2, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 9 */ pixDisplayWithTitle(pixd, 800, 400, "page 3 dewarped again", rp->display); pixDestroy(&pixd); /* Minimize, re-populate disparity arrays, and apply again */ dewarpMinimize(dew2); dewarpaApplyDisparity(dewa2, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 10 */ regTestCompareFiles(rp, 9, 10); /* 11 */ pixDisplayWithTitle(pixd, 900, 400, "page 3 dewarped yet again", rp->display); pixDestroy(&pixd); /* Test a few of the fpix functions */ if (!dew2) { L_ERROR("dew2 doesn't exist !!!!\n", "dewarp_reg"); return 1; } fpix1 = fpixClone(dew2->sampvdispar); fpixWrite("/tmp/lept/regout/dewarp.12.fpix", fpix1); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.12.fpix"); /* 12 */ fpix2 = fpixRead("/tmp/lept/regout/dewarp.12.fpix"); fpixWrite("/tmp/lept/regout/dewarp.13.fpix", fpix2); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.13.fpix"); /* 13 */ regTestCompareFiles(rp, 12, 13); /* 14 */ fpix3 = fpixScaleByInteger(fpix2, 30); pix1 = fpixRenderContours(fpix3, 2.0, 0.2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 15 */ pixDisplayWithTitle(pix1, 0, 800, "v. disparity contours", rp->display); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); /* Test a few of the dpix functions. Note that we can't compare * 15 with 19, because of a tiny difference due to float roundoff, * so we do an approximate comparison on the images. */ dpix1 = fpixConvertToDPix(dew2->sampvdispar); dpixWrite("/tmp/lept/regout/dewarp.16.dpix", dpix1); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.16.dpix"); /* 16 */ dpix2 = dpixRead("/tmp/lept/regout/dewarp.16.dpix"); dpixWrite("/tmp/lept/regout/dewarp.17.dpix", dpix2); regTestCheckFile(rp, "/tmp/lept/regout/dewarp.17.dpix"); /* 17 */ regTestCompareFiles(rp, 16, 17); /* 18 */ dpix3 = dpixScaleByInteger(dpix2, 30); fpix3 = dpixConvertToFPix(dpix3); pixt1 = fpixRenderContours(fpix3, 2.0, 0.2); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 19 */ pixDisplayWithTitle(pixt1, 400, 800, "v. disparity contours", rp->display); regTestCompareSimilarPix(rp, pix1, pixt1, 1, 0.00001, 0); /* 20 */ dpixDestroy(&dpix1); dpixDestroy(&dpix2); dpixDestroy(&dpix3); fpixDestroy(&fpix3); pixDestroy(&pix1); pixDestroy(&pixt1); dewarpaDestroy(&dewa1); dewarpaDestroy(&dewa2); pixDestroy(&pixs); pixDestroy(&pixb); pixDestroy(&pixs2); pixDestroy(&pixb2); return regTestCleanup(rp); } leptonica-1.86.0/prog/dewarprules.c000066400000000000000000000161241506303110300172300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarprules.c * * Syntax: dewarprules select ndew * where select = 0 (sudoku), 1 (graph paper) * ndew = 1 (simple) or 2 (twice with rotations) * * There are two ways to dewarp the images: * (1) use dewarpBuildLineModel() to correct both vertical and * horizontal disparity with 1 dew * (2) use dewarpBuildPageModel() twice, correcting only for * vertical disparity, with 90 degree rotations in between * and at the end. * * A challenge was presented in: * http://stackoverflow.com/questions/10196198/how-to-remove-convexity-defects-in-sudoku-square/10226971#10226971 * * Solutions were given there using mathematica and opencv. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 w, h, select, ndew; BOXA *boxa1; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pixs, *pixd, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIX *pix8, *pix9, *pix10; PIXA *pixa1, *pixa2; if (argc != 3) { lept_stderr(" Syntax: dewarprules select ndew\n"); return 1; } select = atoi(argv[1]); ndew = atoi(argv[2]); setLeptDebugOK(1); lept_mkdir("dewarp"); if (select == 0) { /* Extract the basic grid from the sudoku image */ pixs = pixRead("warped_sudoku.jpg"); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixConvertTo1(pixs, 220); boxa1 = pixConnComp(pix1, &pixa1, 8); pixa2 = pixaSelectBySize(pixa1, 400, 400, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pix2 = pixaDisplay(pixa2, w, h); /* grid */ pixDisplay(pix1, 600, 300); pixDisplay(pix2, 100, 100); } else { /* select == 1 */ /* Extract the grid from the graph paper image */ pixs = pixRead("warped_paper.jpg"); pixDisplay(pixs, 1500, 1000); pix3 = pixConvertTo8(pixs, 0); pix4 = pixBackgroundNormSimple(pix3, NULL, NULL); pix5 = pixGammaTRC(NULL, pix4, 1.0, 50, 200); pix1 = pixConvertTo1(pix5, 220); pixGetDimensions(pix1, &w, &h, NULL); boxa1 = pixConnComp(pix1, &pixa1, 8); pixa2 = pixaSelectBySize(pixa1, 400, 400, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pix2 = pixaDisplay(pixa2, w, h); /* grid */ pixDisplay(pix1, 600, 300); pixDisplay(pix2, 600, 400); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } if (ndew == 1) { /* -------------------------------------------------------------------* * Use dewarpBuildLineModel() to correct using both horizontal * and vertical lines with one dew. * -------------------------------------------------------------------*/ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100, 200); dewarpaUseBothArrays(dewa, 1); dew = dewarpCreate(pix2, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildLineModel(dew, 10, "/tmp/dewarp/sud.pdf"); dewarpaApplyDisparity(dewa, 0, pix1, 255, 0, 0, &pix3, NULL); dewarpaApplyDisparity(dewa, 0, pix2, 255, 0, 0, &pix4, NULL); pixDisplay(pix3, 500, 100); pixDisplay(pix4, 600, 100); pixDestroy(&pix3); pixDestroy(&pix4); dewarpaDestroy(&dewa); } else { /* -------------------------------------------------------------------* * Hack: use dewarpBuildPageModel() twice, first straightening * the horizontal lines, then rotating the result by 90 degrees * and doing it again, and finally rotating back by -90 degrees. * -------------------------------------------------------------------*/ /* Extract the horizontal lines */ pix3 = pixMorphSequence(pix2, "d1.3 + c6.1 + o8.1", 0); pixDisplay(pix3, 600, 100); /* Correct for vertical disparity */ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100, 200); dewarpaUseBothArrays(dewa, 0); dew = dewarpCreate(pix3, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, "/tmp/dewarp/sud1.pdf"); dewarpaApplyDisparity(dewa, 0, pix1, 255, 0, 0, &pix4, NULL); dewarpaApplyDisparity(dewa, 0, pix2, 255, 0, 0, &pix5, NULL); pixDisplay(pix4, 500, 100); pixDisplay(pix5, 600, 100); dewarpaDestroy(&dewa); /* Rotate result 90 degrees */ pix6 = pixRotateOrth(pix4, 1); pix7 = pixRotateOrth(pix5, 1); /* grid: vertical lines now are horiz */ /* Extract the vertical lines (which are now horizontal) */ pix8 = pixMorphSequence(pix7, "d1.3 + c6.1 + o8.1", 0); pixDisplay(pix8, 600, 500); /* Correct for vertical (now horizontal) disparity */ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100, 200); dewarpaUseBothArrays(dewa, 0); dew = dewarpCreate(pix8, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, "/tmp/dewarp/sud2.pdf"); dewarpaApplyDisparity(dewa, 0, pix6, 255, 0, 0, &pix9, NULL); dewarpaApplyDisparity(dewa, 0, pix8, 255, 0, 0, &pix10, NULL); pixd = pixRotateOrth(pix9, 3); pixDisplay(pix10, 600, 300); pixDisplay(pixd, 600, 700); } pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return 0; } leptonica-1.86.0/prog/dewarptest1.c000066400000000000000000000163331506303110300171400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarptest1.c * * This exercise functions in dewarp.c for dewarping based on lines * of horizontal text. It also creates a 24-image pdf of steps * in the process. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define DO_QUAD 1 #define DO_CUBIC 0 #define DO_QUARTIC 0 /* Default LSF is quadratic on left and right edges. * Set to 1 for linear LSF. */ #define LINEAR_FIT_ON_EDGES 0 l_int32 main(int argc, char **argv) { L_DEWARP *dew1, *dew2; L_DEWARPA *dewa; PIX *pixs, *pixn, *pixg, *pixb, *pixd, *pixt1, *pixt2; PIX *pixs2, *pixn2, *pixg2, *pixb2, *pixd2; setLeptDebugOK(1); lept_mkdir("lept/model"); lept_rmdir("lept/dewmod"); lept_mkdir("lept/dewmod"); /* pixs = pixRead("1555.007.jpg"); */ pixs = pixRead("cat.035.jpg"); /* pixs = pixRead("cat.010.jpg"); */ /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); /* Run the basic functions */ dewa = dewarpaCreate(2, 30, 1, 10, 30); if (LINEAR_FIT_ON_EDGES) dewarpaSetCurvatures(dewa, -1, -1, -1, 0, -1, -1); dewarpaUseBothArrays(dewa, 1); dew1 = dewarpCreate(pixb, 35); dewarpaInsertDewarp(dewa, dew1); dewarpBuildPageModel(dew1, "/tmp/lept/model/dewarp_model1.pdf"); dewarpaApplyDisparity(dewa, 35, pixg, 200, 0, 0, &pixd, "/tmp/lept/model/dewarp_apply1.pdf"); /* Write out some of the files to be imaged */ lept_rmdir("lept/dewtest"); lept_mkdir("lept/dewtest"); pixWrite("/tmp/lept/dewtest/001.jpg", pixs, IFF_JFIF_JPEG); pixWrite("/tmp/lept/dewtest/002.jpg", pixn, IFF_JFIF_JPEG); pixWrite("/tmp/lept/dewtest/003.jpg", pixg, IFF_JFIF_JPEG); pixWrite("/tmp/lept/dewtest/004.png", pixb, IFF_TIFF_G4); pixWrite("/tmp/lept/dewtest/005.jpg", pixd, IFF_JFIF_JPEG); pixt1 = pixRead("/tmp/lept/dewmod/0020.png"); pixWrite("/tmp/lept/dewtest/006.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0030.png"); pixWrite("/tmp/lept/dewtest/007.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0060.png"); pixWrite("/tmp/lept/dewtest/008.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0070.png"); pixWrite("/tmp/lept/dewtest/009.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewapply/002.png"); pixWrite("/tmp/lept/dewtest/010.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewapply/003.png"); pixWrite("/tmp/lept/dewtest/011.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/lept/dewtest/012.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRead("/tmp/lept/dewmod/0041.png"); pixWrite("/tmp/lept/dewtest/013.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0042.png"); pixWrite("/tmp/lept/dewtest/014.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0051.png"); pixWrite("/tmp/lept/dewtest/015.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewmod/0052.png"); pixWrite("/tmp/lept/dewtest/016.png", pixt1, IFF_PNG); pixDestroy(&pixt1); /* Normalize another image, that may not have enough textlines * to build an accurate model */ /* pixs2 = pixRead("1555.003.jpg"); */ pixs2 = pixRead("cat.007.jpg"); /* pixs2 = pixRead("cat.014.jpg"); */ pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); /* Apply the previous disparity model to this image */ dew2 = dewarpCreate(pixb2, 7); dewarpaInsertDewarp(dewa, dew2); dewarpaInsertRefModels(dewa, 0, 1); dewarpaInfo(stderr, dewa); dewarpaApplyDisparity(dewa, 7, pixg2, 200, 0, 0, &pixd2, "/tmp/lept/model/dewarp_apply2.pdf"); dewarpaDestroy(&dewa); /* Write out files for the second image */ pixWrite("/tmp/lept/dewtest/017.jpg", pixs2, IFF_JFIF_JPEG); pixWrite("/tmp/lept/dewtest/018.jpg", pixg2, IFF_JFIF_JPEG); pixWrite("/tmp/lept/dewtest/019.png", pixb2, IFF_TIFF_G4); pixWrite("/tmp/lept/dewtest/020.jpg", pixd2, IFF_JFIF_JPEG); pixt1 = pixRead("/tmp/lept/dewmod/0060.png"); pixWrite("/tmp/lept/dewtest/021.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewapply/002.png"); pixWrite("/tmp/lept/dewtest/022.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/lept/dewtest/023.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRead("/tmp/lept/dewmod/0070.png"); pixWrite("/tmp/lept/dewtest/024.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/lept/dewapply/003.png"); pixWrite("/tmp/lept/dewtest/025.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/lept/dewtest/026.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Generate the big pdf file */ convertFilesToPdf("/tmp/lept/dewtest", NULL, 135, 1.0, 0, 0, "Dewarp Test", "/tmp/lept/dewarptest1.pdf"); lept_stderr("pdf file made: /tmp/lept/model/dewarptest1.pdf\n"); pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixd); pixDestroy(&pixs2); pixDestroy(&pixn2); pixDestroy(&pixg2); pixDestroy(&pixb2); pixDestroy(&pixd2); return 0; } leptonica-1.86.0/prog/dewarptest2.c000066400000000000000000000104141506303110300171330ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarptest2.c * * This runs the basic functions for a single page. It can be used * to debug the disparity model-building. * * dewarptest2 method [image pageno] * * where: method = 1 (use single page dewarp function) * 2 (break down into multiple steps) * * Default image is cat.035.jpg. * Others are 1555.007.jpg, shearer.148.tif, lapide.052.100.jpg, etc. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NORMALIZE 1 l_int32 main(int argc, char **argv) { l_int32 d, method, pageno; L_DEWARP *dew1; L_DEWARPA *dewa; PIX *pixs, *pixn, *pixg, *pixb, *pixd; if (argc != 2 && argc != 4) return ERROR_INT("Syntax: dewarptest2 method [image pageno]", __func__, 1); if (argc == 2) { pixs = pixRead("cat.035.jpg"); pageno = 35; } else { pixs = pixRead(argv[2]); pageno = atoi(argv[3]); } if (!pixs) return ERROR_INT("image not read", __func__, 1); method = atoi(argv[1]); setLeptDebugOK(1); lept_mkdir("lept/dewarp"); if (method == 1) { /* Use single page dewarp function */ dewarpSinglePage(pixs, 0, 1, 1, 0, &pixd, NULL, 1); } else { /* Break down into multiple steps; require min of only 8 lines */ dewa = dewarpaCreate(40, 30, 1, 8, 50); dewarpaUseBothArrays(dewa, 1); dewarpaSetCheckColumns(dewa, 0); d = pixGetDepth(pixs); #if NORMALIZE /* Normalize for varying background and binarize */ if (d > 1) { pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); pixDestroy(&pixn); pixDestroy(&pixg); } else { pixb = pixClone(pixs); } #else /* Don't normalize; just threshold and clean edges */ if (d > 1) { pixg = pixConvertTo8(pixs, 0); pixb = pixThresholdToBinary(pixg, 100); pixDestroy(&pixg); } else { pixb = pixClone(pixs); } pixSetOrClearBorder(pixb, 30, 30, 40, 40, PIX_CLR); #endif /* Run the basic functions */ pixWrite("/tmp/lept/dewarp/pixb.tif", pixb, IFF_TIFF_G4); dew1 = dewarpCreate(pixb, pageno); dewarpaInsertDewarp(dewa, dew1); dewarpBuildPageModel(dew1, "/tmp/lept/dewarp/test2_model.pdf"); dewarpaApplyDisparity(dewa, pageno, pixb, -1, 0, 0, &pixd, "/tmp/lept/dewarp/test2_apply.pdf"); dewarpaInfo(stderr, dewa); dewarpaDestroy(&dewa); pixDestroy(&pixb); } pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/dewarptest3.c000066400000000000000000000142051506303110300171360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarptest3.c * * This exercise functions in dewarp.c for dewarping based on lines * of horizontal text, showing results for different interpolations * (quadratic, cubic, quartic). * * Inspection of the output pdf shows that using LS fitting beyond * quadratic has a tendency to overfit. So we choose to use * quadratic LSF for the textlines. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 i, n; l_float32 a, b, c, d, e; NUMA *nax, *nafit; PIX *pixs, *pixn, *pixg, *pixb, *pixt1, *pixt2; PIXA *pixa; PTA *pta, *ptad; PTAA *ptaa1, *ptaa2; setLeptDebugOK(1); lept_mkdir("lept"); pixs = pixRead("cat.035.jpg"); /* pixs = pixRead("zanotti-78.jpg"); */ /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); pixDestroy(&pixn); pixDestroy(&pixg); /* Get the textline centers */ pixa = pixaCreate(6); ptaa1 = dewarpGetTextlineCenters(pixb, 0); pixt1 = pixCreateTemplate(pixs); pixSetAll(pixt1); pixt2 = pixDisplayPtaa(pixt1, ptaa1); pixWrite("/tmp/lept/textline1.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 0, 100, "textline centers 1", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Remove short lines */ lept_stderr("Num all lines = %d\n", ptaaGetCount(ptaa1)); ptaa2 = dewarpRemoveShortLines(pixb, ptaa1, 0.8, 0); pixt1 = pixCreateTemplate(pixs); pixSetAll(pixt1); pixt2 = pixDisplayPtaa(pixt1, ptaa2); pixWrite("/tmp/lept/textline2.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 300, 100, "textline centers 2", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); n = ptaaGetCount(ptaa2); lept_stderr("Num long lines = %d\n", n); ptaaDestroy(&ptaa1); pixDestroy(&pixb); /* Long lines over input image */ pixt1 = pixCopy(NULL, pixs); pixt2 = pixDisplayPtaa(pixt1, ptaa2); pixWrite("/tmp/lept/textline3.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 600, 100, "textline centers 3", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Quadratic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, &a, &b, &c, &nafit); lept_stderr("Quadratic: a = %10.6f, b = %7.3f, c = %7.3f\n", a, b, c); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/lept/textline4.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 900, 100, "textline centers 4", 1); pixaAddPix(pixa, pixt1, L_INSERT); /* Cubic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetCubicLSF(pta, &a, &b, &c, &d, &nafit); lept_stderr("Cubic: a = %10.6f, b = %10.6f, c = %7.3f, d = %7.3f\n", a, b, c, d); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/lept/textline5.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 1200, 100, "textline centers 5", 1); pixaAddPix(pixa, pixt1, L_INSERT); /* Quartic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuarticLSF(pta, &a, &b, &c, &d, &e, &nafit); lept_stderr( "Quartic: a = %7.3f, b = %7.3f, c = %9.5f, d = %7.3f, e = %7.3f\n", a, b, c, d, e); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/lept/textline6.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 1500, 100, "textline centers 6", 1); pixaAddPix(pixa, pixt1, L_INSERT); pixaConvertToPdf(pixa, 300, 0.5, L_JPEG_ENCODE, 75, "LS fittings to textlines", "/tmp/lept/dewarp_fittings.pdf"); pixaDestroy(&pixa); pixDestroy(&pixs); ptaaDestroy(&ptaa2); return 0; } leptonica-1.86.0/prog/dewarptest4.c000066400000000000000000000110731506303110300171370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarptest4.c * * Tests serialization functions for dewarpa and dewarp structs. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { L_DEWARP *dew1, *dew2, *dew3; L_DEWARPA *dewa1, *dewa2, *dewa3; PIX *pixs, *pixn, *pixg, *pixb, *pixd; PIX *pixs2, *pixn2, *pixg2, *pixb2, *pixd2; PIX *pixd3, *pixc1, *pixc2; setLeptDebugOK(1); lept_mkdir("lept"); /* pixs = pixRead("1555.007.jpg"); */ pixs = pixRead("cat.035.jpg"); dewa1 = dewarpaCreate(40, 30, 1, 15, 10); dewarpaUseBothArrays(dewa1, 1); /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); /* Run the basic functions */ dew1 = dewarpCreate(pixb, 35); dewarpaInsertDewarp(dewa1, dew1); dewarpBuildPageModel(dew1, "/tmp/lept/dewarp_junk35.pdf"); dewarpPopulateFullRes(dew1, pixg, 0, 0); dewarpaApplyDisparity(dewa1, 35, pixg, 200, 0, 0, &pixd, "/tmp/lept/dewarp_debug_35.pdf"); /* Normalize another image. */ /* pixs2 = pixRead("1555.003.jpg"); */ pixs2 = pixRead("cat.007.jpg"); pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); /* Run the basic functions */ dew2 = dewarpCreate(pixb2, 7); dewarpaInsertDewarp(dewa1, dew2); dewarpBuildPageModel(dew2, "/tmp/lept/dewarp_junk7.pdf"); dewarpaApplyDisparity(dewa1, 7, pixg, 200, 0, 0, &pixd2, "/tmp/lept/dewarp_debug_7.pdf"); /* Serialize and deserialize dewarpa */ dewarpaWrite("/tmp/lept/dewarpa1.dewa", dewa1); dewa2 = dewarpaRead("/tmp/lept/dewarpa1.dewa"); dewarpaWrite("/tmp/lept/dewarpa2.dewa", dewa2); dewa3 = dewarpaRead("/tmp/lept/dewarpa2.dewa"); dewarpDebug(dewa3->dewarp[7], "dew1", 7); dewarpaWrite("/tmp/lept/dewarpa3.dewa", dewa3); /* Repopulate and show the vertical disparity arrays */ dewarpPopulateFullRes(dew1, NULL, 0, 0); pixc1 = fpixRenderContours(dew1->fullvdispar, 2.0, 0.2); pixDisplay(pixc1, 1400, 900); dew3 = dewarpaGetDewarp(dewa2, 35); dewarpPopulateFullRes(dew3, pixs, 0, 0); pixc2 = fpixRenderContours(dew3->fullvdispar, 2.0, 0.2); pixDisplay(pixc2, 1400, 900); dewarpaApplyDisparity(dewa2, 35, pixb, 200, 0, 0, &pixd3, "/tmp/lept/dewarp_debug_35b.pdf"); pixDisplay(pixd, 0, 1000); pixDisplay(pixd2, 600, 1000); pixDisplay(pixd3, 1200, 1000); pixDestroy(&pixd3); dewarpaDestroy(&dewa1); dewarpaDestroy(&dewa2); dewarpaDestroy(&dewa3); pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixd); pixDestroy(&pixs2); pixDestroy(&pixn2); pixDestroy(&pixg2); pixDestroy(&pixb2); pixDestroy(&pixd2); pixDestroy(&pixc1); pixDestroy(&pixc2); return 0; } leptonica-1.86.0/prog/dewarptest5.c000066400000000000000000000120121506303110300171320ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dewarptest5.c * * Tests dewarping model applied to word bounding boxes. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static l_int32 pageno = 35; static l_int32 build_output = 0; static l_int32 apply_output = 0; static l_int32 map_output = 1; l_int32 main(int argc, char **argv) { char buf[64]; BOXA *boxa1, *boxa2, *boxa3, *boxa4; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pixs, *pixn, *pixg, *pixb, *pix2, *pix3, *pix4, *pix5, *pix6; setLeptDebugOK(1); lept_mkdir("lept"); snprintf(buf, sizeof(buf), "cat.%03d.jpg", pageno); pixs = pixRead(buf); dewa = dewarpaCreate(40, 30, 1, 15, 10); dewarpaUseBothArrays(dewa, 1); /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); pixDisplay(pixb, 0, 100); /* Build the model */ dew = dewarpCreate(pixb, pageno); dewarpaInsertDewarp(dewa, dew); if (build_output) { snprintf(buf, sizeof(buf), "/tmp/lept/dewarp_build_%d.pdf", pageno); dewarpBuildPageModel(dew, buf); } else { dewarpBuildPageModel(dew, NULL); } /* Apply the model */ dewarpPopulateFullRes(dew, pixg, 0, 0); if (apply_output) { snprintf(buf, sizeof(buf), "/tmp/lept/dewarp_apply_%d.pdf", pageno); dewarpaApplyDisparity(dewa, pageno, pixb, 200, 0, 0, &pix2, buf); } else { dewarpaApplyDisparity(dewa, pageno, pixb, 200, 0, 0, &pix2, NULL); } pixDisplay(pix2, 200, 100); /* Reverse direction: get the word boxes for the dewarped pix ... */ pixGetWordBoxesInTextlines(pix2, 5, 5, 500, 100, &boxa1, NULL); pix3 = pixConvertTo32(pix2); pixRenderBoxaArb(pix3, boxa1, 2, 255, 0, 0); pixDisplay(pix3, 400, 100); /* ... and map to the word boxes for the input image */ if (map_output) { snprintf(buf, sizeof(buf), "/tmp/lept/dewarp_map1_%d.pdf", pageno); dewarpaApplyDisparityBoxa(dewa, pageno, pix2, boxa1, 0, 0, 0, &boxa2, buf); } else { dewarpaApplyDisparityBoxa(dewa, pageno, pix2, boxa1, 0, 0, 0, &boxa2, NULL); } pix4 = pixConvertTo32(pixb); pixRenderBoxaArb(pix4, boxa2, 2, 0, 255, 0); pixDisplay(pix4, 600, 100); /* Forward direction: get the word boxes for the input pix ... */ pixGetWordBoxesInTextlines(pixb, 5, 5, 500, 100, &boxa3, NULL); pix5 = pixConvertTo32(pixb); pixRenderBoxaArb(pix5, boxa3, 2, 255, 0, 0); pixDisplay(pix5, 800, 100); /* ... and map to the word boxes for the dewarped image */ if (map_output) { snprintf(buf, sizeof(buf), "/tmp/lept/dewarp_map2_%d.pdf", pageno); dewarpaApplyDisparityBoxa(dewa, pageno, pixb, boxa3, 1, 0, 0, &boxa4, buf); } else { dewarpaApplyDisparityBoxa(dewa, pageno, pixb, boxa3, 1, 0, 0, &boxa4, NULL); } pix6 = pixConvertTo32(pix2); pixRenderBoxaArb(pix6, boxa4, 2, 0, 255, 0); pixDisplay(pix6, 1000, 100); dewarpaDestroy(&dewa); pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); return 0; } leptonica-1.86.0/prog/digitprep1.c000066400000000000000000000070371506303110300167460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * digitprep1.c * * Extract barcode digits and put in a pixaa (a resource file for * readnum.c). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 HEIGHT = 32; /* pixels */ int main(int argc, char **argv) { char buf[16]; l_int32 i, n, h; l_float32 scalefact; BOXA *boxa; PIX *pixs, *pix1, *pix2; PIXA *pixa, *pixas, *pixad; PIXAA *paa; if (argc != 1) { ERROR_INT(" Syntax: digitprep1", __func__, 1); return 1; } setLeptDebugOK(1); if ((pixs = pixRead("barcode-digits.png")) == NULL) return ERROR_INT("pixs not read", __func__, 1); /* Extract the digits and scale to HEIGHT */ boxa = pixConnComp(pixs, &pixa, 8); pixas = pixaSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, NULL, L_CLONE); n = pixaGetCount(pixas); /* Move the last ("0") to the first position */ pix1 = pixaGetPix(pixas, n - 1, L_CLONE); pixaInsertPix(pixas, 0, pix1, NULL); pixaRemovePix(pixas, n); /* Make the output scaled pixa */ pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pixGetDimensions(pix1, NULL, &h, NULL); scalefact = HEIGHT / (l_float32)h; pix2 = pixScale(pix1, scalefact, scalefact); if (pixGetHeight(pix2) != 32) return ERROR_INT("height not 32!", __func__, 1); snprintf(buf, sizeof(buf), "%d", i); pixSetText(pix2, buf); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } /* Save in a pixaa, with 1 pix in each pixa */ paa = pixaaCreateFromPixa(pixad, 1, L_CHOOSE_CONSECUTIVE, L_CLONE); pixaaWrite("/tmp/lept/barcode_digits.paa", paa); /* Show result */ pix1 = pixaaDisplayByPixa(paa, 50, 1.0, 20, 20, 0); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixa); pixaDestroy(&pixas); pixaDestroy(&pixad); pixaaDestroy(&paa); return 0; } leptonica-1.86.0/prog/dinos.pac000066400000000000000000007353101506303110300163350ustar00rootroot00000000000000 Pixacomp Version 2 Number of pixcomp = 15 Offset of index into array = 0 Boxa Version 2 Number of boxes = 15 Box[0]: x = 51, y = 59, w = 134, h = 156 Box[1]: x = 33, y = 56, w = 186, h = 247 Box[2]: x = 61, y = 63, w = 145, h = 50 Box[3]: x = 34, y = 42, w = 173, h = 248 Box[4]: x = 30, y = 28, w = 185, h = 271 Box[5]: x = 36, y = 36, w = 188, h = 279 Box[6]: x = 41, y = 81, w = 185, h = 167 Box[7]: x = 28, y = 37, w = 180, h = 279 Box[8]: x = 51, y = 154, w = 121, h = 41 Box[9]: x = 30, y = 46, w = 173, h = 57 Box[10]: x = 35, y = 42, w = 188, h = 262 Box[11]: x = 21, y = 33, w = 187, h = 269 Box[12]: x = 29, y = 44, w = 172, h = 254 Box[13]: x = 33, y = 35, w = 184, h = 275 Box[14]: x = 32, y = 38, w = 172, h = 250 Pixcomp[0]: w = 241, h = 365, d = 8 comptype = 2, size = 13075, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸœvĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸœvŖ-˙ŠCŽ˜Õ ÁŠŋˇüL“āɋcå ¨@sų‘íL!ņVp|0˙¸œãOī‰ĮŪđsgũJÍ?ûwÄ|cÁķ팿ū^õkū'Á“6äj0c9úÔoâ/¨Čđ4ė}§oū4Gâ2Ū•Xģũ§įķúTÚ‰õ õ¸´ÍG@—N’T.…îŖļ:œ!8ŧôâēažô´QEQEQEįwR4:ĪÄYíĖĐƚmždWä8†Sšp8Ā+ëČëØ;J´ģԅÔqZ\7ؚ(¤yĩû¸Œ’4HNÅV~ķĪcÅjŪ Úm\`…×îøú|ĩb= d#å•N>QũąrC֙6‹$¸Īūˆ4Ø´/ĄÜPd…> —ú[úԒhū!”ž-ö19xŠāíøÖ6ŖkŦZ<ö÷W7örfŨ^C%ļĩ%ĀĖ>XÉp ‘zĮԚÜļ–YŧEኤ,d}5š]üœ•$úį?­vTQE€cŊ-QEQ^utö—ÄŗÔũ‚é˙ĪUŧI"Oā‘‚æØƒØūâÔķŸÆ¸Kuē—Ož{‰<¤…å¸&(„ž`Ü!9g‘JČÄ(IęWu¯ėFqpĒc–öcåBúĮ‘TŗGĩ‰ÂÎ‹Œąā‚ū‹āģ4ŧ ¤:žŠnæ9YÎË+3čøûî?¸šÆpÄ 5nęz†`¯ũŠpšÔÖíXĒYÛŗmûŠRmî œk)|oâoJ?ąt×{0í™-ãÛ($Ž—jž0xķŒW?Ē]›hmuYˆŨ>qÜ÷r‚ÜI…vŒäpIž¤Ō“ū#‘‡‰āMÎ_jéwLË´ °89é×cšēWÚ-™ŦuŸŪ;)HPÜ.ž~U”(ŽéĶ$ŊŅĩOƓęÖ ä;H#ķ“9 ĀÉäģœá†Ķšĩ¤[Ë­ŪËĨ¤z43í'eÅĖŅģ!ž]šV끂F>îG§āÍiuˆÃg’ŗ4!e‘#˜‘ūŠNėdpq•ū, ŠĮMVo"fDšHËÜDF%QŊŖ,% –ž@iÆ0q•y’C eKŦ‘;ÉŽHä 8 ķ û2Hcë×PÁũŸč€ōô@ FtcnGlcééVíŽu ČOÎÖl0{æ,˙JëčĸŠ(ĸŠ(ĸŠ(¯9ģŒžĢņ-YˆŨĻĀ:tg“ŸķéT|BČŋŧdÃ>Õj@ۑŗÚvÁĪåø•Ėé°ŦÚry0Ÿ5ɇO ķ$24?ģĩ7/‘´?Rn…ŖÁoi<æėCa 0ŋÕÄĖ €1- ĖZ8”Œ3įsm<§ˆõuއá›Hė4Å´  ĄÎd‘†H$äp{dŲ[ÛO9JúÅŰËŽęĄcąĩ+€Ģ†l‘†mĮ?7 šę‡…ėgēŌßÄzŸü$^–hg¸¸híŒab~FcŸģ• #ÅlX͍ ĨÚEg§Ų=Œ×W6övÉīcX÷#u$ŪôÁų@ės%ĩö­uiĨZŨŨÜYjŸj6wĻ4„’|—>u §å$HíUOĩÔī yôŊ&C{wˇVj\ˆĨ*#V\Li+9û€ĸ™?†tÉĩøû %ŧi!į#į$d‘É䀃ĢxrÖō ˇ4éÚ&šŪæĖ‘k“ŗ2˛ŪPÆÁæ#2 åˆ?)ˇaâMKD‘tOÚ Ģ'IRÄ‚,åOĖ|¸ĪŨ$§ĶŗĢh–÷đYŨÅv¯"ø–ęOķ°Ū0!‘ē°mØW<äŒüø/æ—úDöZ5ųŊą‚Ũ⸆%…‰.If$ĘáAl˜ÁRČvÎ6z]Įü‚ãÚ9:6¤G¯ß‹ōĢvĘĩ| \r,į;ŧĩü;ėhĸŠ(ĸŠ(ĸŠ(¯?›Ę]gâĢ3ÉũŸô1đ?q&Aų˛>•—¯ĖÃĀ^1 āĨÕŽN0~ĪięGôŽsà uoęĮ)kë‡jŊōüŗ  ”—3;UšŠĶNąÜk˛Ë6Õi卨'€ˆ0?xゝåÃj‹[%¨Õ!—. ZHÖr¨åP’ ÄáxYqķōâIīžŌīūß-ņˆHæîö2Ķĩģ`÷!-œČvŒž§f4ĩĶ0"Ō–Â[ ÂCwxŌŨĘGņ„ˆš”ņ×xlqY——úĩ>Лíây$€Ģ8‘Ķq gØá‚ā¤ŽĀ•ĘŠ"ŗŽ4č­fÕ5+h/žÖ–ŦÖĢæš‘]”˙´[Ė;Ŗ;œ1á†q[I$–Ō›XlüĄĩcˇ…íĐĒú. VfÖP[ǐ ̰C WvŸy, ŊŪŪWĩŧ‰˜v‰ÆčÉĖ€ūé.ŖåÚßAuo|¨Rĩļî †xŖ,Šį`Ũ´’BƒĘīAwRÕāŊļŽŪH VNvŨpÏ.`UŋĨAéķoQŗŨœē\Ō5ÜđŠēŗv_(Ύ˛¸ ē‰Œ~PĘĸĪ…5Iõ/’kCHųā2F—V­Á, Œd¨u\’TÔĘöÃTĶĄ,ÚxŅīolnŖ<´R„mŖ,I!‰;\Ž˜įmŸWđvc;’Ũ˜ˇ\~á†?Zí(ĸŠ(ĸŠ(ĸŠ(¯7(_Ä_#veV˛ˇúcũķPøĄ Ū ņŦ{X˙ĻۀĒ2Oî-8čsŸĄúķŨl:ÕöĨvŽđÚŠ4s8A)DAPą–E€qĮ§hz=õ§…lŖw3]Î?´ĻŧŽXÕÚîPŃÆÄ+­´ƒÁ„îķQŅ´ģK;Nē´Õuwōĸ°2G,vJŸë&ˆn*HMÁG›,Õ-5/x6O"î á8ãe’yåb—‘† œ“ōŒä}ãYÚlæ‹+TšæTÔ'"âI$PfÄ΀ģ,[˜asƒ"ä0Fá[ĮÃvRÜFĪ6¨„ UÛ´Ē¸°  ”ÛĀ Ōg‡fl="ĪûAæ}§nr *_į pËąØíÜÛ>AߑÛhhfG•īRFÜģ|ÍÄķˇįļ;ÃKdŸœō7œÕ/[G§KŖ:ŨŨ‰„R¯›-ے§ŒüŨ’ęsZļ1_^øbY×TˇePÁœ „u# ˛7 ę@#p ÜR­Ä7öË/öxļÔo/ÎöiíĀh™rļ#jl0˯SšĄŦĮsjˇ2Å;\6‹å\}ŠŅA+#3L˛,aA(9đ$„į-‡Ņxg⍝ÍĒ´×@vLåIÔcT 'žüwŠüwm,z=äˇɧŪŧ[ŖP<ČfMęœų@šLt;1ŽÕÕ)ÆŗáVĮßļuúb,×VŲĮ}ęQ?ŋi1™ˆËÚ Ī?AŌ§ĸŠ(ĸŠ(ĸŠ+Í.IĪÅ ˇœ4č1ž…žÍ&1Pë§Ãß;Ÿ0ĩÅŠ8î˙G´Î2_ĄŽ>=9nôûËk{Ф]k\ĩĶĻi‚ŗŦhģËgšËĮø^ĄĒjˇZ~ĄŧÚ^“Šæ-*ââņ‚ģ*ØÄ “Î@Ē;yŽ.ücŦŨÛ[›‹›b–6Ī&å†Ū3JåŽpK9û nųPĒw īũ’ĮDŊī¨ëE#in6Œ[ÆdSĀÎ"BT îldî!˜OĨ[ ŧ7ĻN–i-û™\LöįthBŋ?•'*X‘õR(ā3%ą  öYZ’(å|€Qž@v€~˜ +–đõē–×íŅtWQ”B[cǍ.‰‚žN?w×#×mŽ™%ģæŖA áŦI…`Ŗ÷›–¸ öŽ[ŗMrÖ<˙htŠt™üČÉV>XíčwŊ$`žgŌdtōn-&{ !!.\!dœ3ȨJpîËüÅF0+VŌõõųĨ‚k&ļžöÂhe2Ä%…^ ÆHl4pNŪESĶtŲWė2\ŪGiĨĖįɡžAŧRŖ ‰ EX÷upHÜ>鿏ûģ{›‡ēj=ēGũ›5ÍŖĮ“–•ęv’:Éč:Œ€r;}sĘ״Ʌšh$Ö4_=eŲĘ$LŦôĪÚëVm˜]\x6ä&ėåđ0@ īŸ\WaEQEQEQEyœģÄ ā°ˇĪ¸¯ū" Õá1|=ņ„JĨvĪl¸éŌÖĐ`į<2†ë_đåœË"Hu‹ųĨFąW‰"a–$į äœįŊuzb‹]V´×Fžâdwc­äm™Ėí ßFB#c#֞}3ZŪØiŒ$Ô¤ÔoZydËĨ°ûDŠ zœ(Â3Žp9¨ü\°éžŧŌė#3\ē ĢŠĨnUCæHßŪb@ã§T8n“cc}āí(j"Õ ûLÂ! ģHũâ6+œ`äZRiĖ­zęŅĮ Äe¤.°ĒžsšF@ Äđ9æ°<>`ģ×|Ce#[Ég-ԃ#ųN’+CBí¤žÜ “ŽEjß}ģJĶŌŌØÉ ŗˇ”×ǃ÷ØhˇT ĪĖ lÆN <ˇŠ|MĨJĘÂX K 6YĄû0Yƒ|ĒŅmgO•Ø1ۂqģmv:5ÛjZÍáģl-îw=ĀĊFTžĀäwažįą–ŌHíN‡¤ŨF-n-fōāŠ"Æ9BÃ*¤äãhÉĄĀ$ä—i YęË=ž•ĨE§D˙葯e„F§ƒ)QŌädpōIãuH¤šĐĩûYvy_đ’Ė#.ĐĨ Oũô}+Ŋ(Ģá Y"\yzŅ 8ČZqŸøŖLe˙Š$ÆUŦã%zŠė¨ĸŠ(ĸŠ(ĸŠ(¯3ģPÚßÄŖ‘ģû:0GÖØķúU•Oˇø\|wcû"žB›d^=9…‡á^}áíö’č—‘1ŠHĩņĮŧžØŽc‰‡'œēķ†õ¯QÖĄÔm´S=éĶ,ôŊ>HŽL0Dōˇ— ŦƒiĘ8N›O§zM3S:kZSÃį_AåĩišûAiSŸcæ)=–2qš›[Ōͧƒu(ž_´j7ĀīFs4̀Td…Ā Ŗœ2O&ŗ´ģ]V×LŗMJ)ôņlōžæË#;;:ŗg`āëƒČČÍnŊ•üŅKܕ‚FÂYC*’8,ŗäžœŒqŸZäô9ãŧņ‰‚M4"æfE'͉•‘oe`~SÁtāĪUߚöØŨ>é‘Íę),fEĘ’ë!°V8Mb­į´Xd]NÚO5eo4\ÚË*4ķÆ hÎb>R;ã^[ÍĢiđëš4öÚeŨĉļ†'yFđH•–#å%–3€ĒIŪkŲĪ}¨]ÚCŠ$f÷KÔ$ŪŅ Q: r<ÅRNĐ|ôdķžqÅc鰋K'M{ëø5u†&žÚyŽB9WO1ÁVhČÆī”de†H¸īĩ.Ŗā›yĄæë\šéŌqōēüí¸ä•_$`möÅz3ÚČÛū$Ķ™?ÄcS§›§;ÛÍā[V#wØ6Ķōä@ŋākĩ9Ü8īNĸŠ(ĸŠ(ĸŠ(¯8œ×~%GžZÂŋøÔxđjuŖŨš[ĢGąē8Â+ÄÅŌ,{dΟ÷Ĩyül–Éâ/äNciĸ–0Øk›Wķcī“ãˇAë^‘§Oˆ>ĮŠØÛéfōæŨŽ"šp÷oBTŒ6`90b lí<ԐŪ}‡ÄÖÚĨüXaŌoįr¯äĘ6É ī Ŗk‰$*ĖƒCĒëWڅŨūŠĻI"C¤;ÛÛĮ%°xî'\yŒÍŸ”vƒō÷!°HĢ~ņü:ƒ}‡Vŗ’ĘüDŌ0 ē9ęWœŸîķØd“ŠĒˇķÚ\O4z|–ēK91Û\Į䯇 7ļcmšb¤Ž[œęœßƒu;-+Ä^)Ôooíĸˇ–ád-ˇĖufÎÜ .1ũÜĮ0ʼn>!hrčZĻ•–Ģ"\ų‰yk((ãžys÷žlrÕoRņ.“â[ktVÖáĐIŖlčĮ&‘IR(Úķœũ*ä’i–Õ­į‡Õŧ‡d(í$0ŨÉʒ€0]ŨXŠb222-*ca3üëŠf˜ģdđ2*ĸœúbķ5ÜQEQEQEQ^q0˙‰ĮĜƒƒeū“ĘÔ÷˙ÂŦņ TÁ_ąĘãėö¤“ė5ËøcZūɒ[yhėî.]Ā’Ų•‰]ŒĮ‡ š˛rĨ‰SË=+P˛Åôp7‘:Ũ]Ežęs”Č‘˛Q¸čAn"kmŦu3qm-›˜lf ŋlĩĀÉU@s<ģ†^v€0k§›\vDˇÖāˇhīĐYkÛÄ%ŽxķĖa”uoŪ.ŌŠ# ü‘uĻŊšŅÍΜ֓ÜÚI-ÍÅĖ >f(ĘBc' Ŋ€ Č Ö´Eõ’˜"ŅŧAį%åĘÛË)ģ[“)#î]ÄᘨP§åax Åũ…m'ˆ ›ĨÚ´}°ØCö‰I8ģxÆ[ ܸ šíÍũŧ2ęúÅō-‰´‰üå“ɲë"ĮˇæāĸœN[—jŸcŌ§›WŨo 3ÜÍŦî‰$$JĘÆ%×iT̆7b[ĪĒjqZž—6Ú[Åk.ˇ~¸’@™]ë%TîŨÄˇī815QŽėa‰ô=..nŽöKpō†yī•ŽFų3ō#O$aH8!˜Ž“NŅáđƗs$÷b;ųuåō Ëj„î1Ä~NŪN‚ZķĪjpę­jņLŅŲÄå`>P 2Ŏœ’NI9c‚ABOĄßĖáŌâÉũöŸp;žÎ>•=œ{uƒÃĮbŒv0đŽÖŠ(ĸŠ(ĸŠ(ĸŠāeˇęJgĖktLúõürMRq˙ãϙfkx{Ÿô8+Îm¯c°´ēI-‹[}­ėņ.ą'~2AS€§Œ<˜@č­uKŸJđŨžÉ_í#?—4(B€āq’\‡PĀđSwjˇZgˆla¸ž“1ÆH‡T„lhŽ9YF?tØ<į(zä (ĪĨkžŠQĸęVnQžß%ål& Ņģ}ÛYKuõĀą`ūŸŋ—ėÖōÛŨDʑ\i“4FUcĩO–˝y*6#Œ–ƒZR_j2^ËdŪ)Ōī4˙,o‹Y´0IČTR;ąÁxŠ#šē’ĮĘx< !Y Į2Üa‘†m˜<0pÃ"3kS[Ÿ;Ě=…¤1ųI&…bŌŧk´œîØ6Ž1Ž™íYך‘Û ö¯Ą|í^ëíXfō÷,!žaÃņ÷ž\wr/ÄZü‘ßęž•mnK$“§aB¸ōs„į>‡9RN•¸Ōŧ'§¤z|Mgoˇc]J›ŽnļŠÚą/āܰ žŠÛķ\ŪŠĢÁwo0Ŋu´´ĩŽ9ĸļym/Ī'Ė^Ldq™Ž qŽv['ž”[Ū%Ô÷MåK"›§V218Æ:ķĪ˸ ĩéw"ø'M.3"is$ōŲÎjĘ*oÂÎŧ/؊˙l[ü+¯ĸŠ(ĸŠ(ĸŠ(ĸ¸Û5߈x ‘i _ø÷?áUf@>ø’6Q´Aãī }’ø×œ\ĖīĨãs‰.œ<&?ŨȡF§=Š/ũō;VŸ‡dÔÂÍqp;¨\;2! ĘĒOĘIŠüŦprČãzĮ ]i-=ƑĢ}Ž{@Š!FõĀ䓹IQËeyŒpGIĨøÆM.wĩŧļՒö0wYéVđ˜Bä€J;eI €wgé-÷Œ4mj)ûÚÜáÆŌßa…\(9€Â>D‰bdi^…Īđ–v4č#ĶDËtē?‹ŖP™Ų8ÚGV$ãbūGûĮ6{xŌM'ÆSD-ˇŲä6yAJāĒĘ9Á<ûŸS[–:õŽl?ŗü%¯ÛĒ ]Ëa; ÆBĮņõŦmKĮ>}ôCŖ ė­ģYˇc…0ؒ5VÚ0<ã%w ž*ĻĨt’,— åÅôÎĢm,÷fr9û˛b=Āá@B՞Ã>žņ)Tž{QĻÁsæÉCå–ITŒō;˜ä$âfkĐEoâ/ŗũĸåŪ8ÚW6ŽÂbųދދ†Į=ķÖŊ Y(ž´ŒļŨ–3˙ã°05›9Öŧ&$ÉŒÃĄ&ĪōŽŪŠ(ĸŠ(ĸŠ(ĸƒĀ¯6¸mšßħc€,aįÛė͚’˙øŏ†1ØÚĀ:`˙#^yvËk Áˇ@ōˆŖ´ˆy$˜Ÿ~Œärp# šôŋ„1ülŒ§nũË•Ā Ēœ^ŋžGj—Æ>ąX!ēļĩ>sNA ybGmÄcû¤ą ‘Œī$䁎Ãöjū3û.Ĩc ī ûEĢĀĸ5amz@+’ô$÷lņÜôđhú[XjšŒžđûCes2RŖ4qHÁʖ8bPdn9ím´M x^ÛS‹Ã^YާˇįO‘c–dQœu`Ž2AÆīQNÕôŌk¸í<5 â(íJoĶÎe™‘¸Î‚Į?•R°ļĐ/5›6𮆩soȧO@ŅHDÁԒ0 ´;v‘“–ūáĢú$Ö+/‡|8ąÉssĪũ–˜vŽRˆ įä%UŽNāHĮËëZTVž(š6Öb M2U-l<ŋŗ¯Ÿs'Ę #eā9ƒ•ā}_ø–ōßQI Š'y.–0 ;deå9!ˆ+ž˜8ÁîfÖŪĶO6đĮPĸ¨Ģ€~+ÂõöˆGuR’ŌOœ!wMķ–@ĘÜLN€‘Ÿŧ:€3čÚÃ<+h0D–ˇE˛IÚLcЧXHąŋáb<ÖļinpļĖ ĮĻX~bģz(ĸŠ(ĸŠ(ĸŠ+Ī|’|EņpûÖpcúwođũ)ڐøÅ,Ф´hFā?谞õ˜fŊКnÖįmđ U+æ4JĢ€HÁf%G¨Q’wWyāûįđîmŖ]î™āT‰V'F!ÂÒ Į^3žp$ņģšŖŸąÁrđ[Č&ē’ ĸ-jŦI\ŲREpģ6ū*›RŽÃPŧŠÖxw XšrQa¸‰0Tc…hūņÎ2sÚģQŠivōģ§…ŧ_–—Ī+åNČ$ķDš dÚ2øcŽ9ã"§mkM}>]=ŧ-â…ĩ–<…ĩ˜}á÷+Üŋ0΁MūŅŌåĩ’áŋleEbĐ\‰$†E;ŗœ†$į9÷§ļ§ĨˆJ¯†?!]ŨQEQEQEįÎ k˙ äŋØmÔ!ę]:wāmYy{h˜,JwÚB8$ž;sĶįÅŦĮr¯‡ŧJUdåtô!ÜđIĖg€9ŠĀæ2üIvđ BÃōHØ&ØČc;sŋF~`š'žä–ÚåĘÉ-ΗâÉ%vßą­˜ÆX( šx__›nFŅØ:/ ^jZM‹]=Žąm{rĪčRLp™U%†ÜļÜd÷ôÎIŲ‹Åz˛ŠĘëE{đĖۀüĨ:oëCÆ5ąœdHön)°ø‹X™>k­vôo ÉĪåš?ˇõČĶhŧÕåoīÂ1/˙*8ĩkĪw“VņÆÁŸ 8 Ī@Bį\÷ŽsÆP뚊AwmuŽ^\DdDEĐæˇōã“īí`šÉ¯9āŸ|âËoâ™ė’?øGõ5mĸ7?fmÆ2yd-’y;‰'ŒmÅ[š—ÄōĖ’KáŊjæ4QjŅržpņ¸ÉŨß|`üØÅSk3o˙„wÄRN$y\&CCdüœŒíä Íęsę2Á$^ąâxä]>ddu(Ã÷-ÔG5bÆØG'…ē e\‘Î<†įé]mRö4´Š1KEQEWK?Š> Enģį’ÚŲc@FYŧ†~dTiÔ-laDO[KäÅËĩŗ!tP°ķžvđeīõ8™7ĪãO%l,ÛķÄtöžÔ™€âė{XŲãõJ]ęr’ūČōN?ŅŦ€ëĶ•˙8Ĩ’}Y07ø°îęˁÛ˙Žûū”ąËŠ1b÷ž*PílžaøGüņOV•ŽËŸÆ:аü֘ĪǝjņYĀÉÅŊ‰Īâ+j˜ų¯üVũzYņĒ`ēŋ'÷ÅÃԛB?HŠæmCĒßø­€éū…h3ųÄ 8IŠ.AŊņIážËgĪ9˙ž…I j2Ë˙‰Ô㤖ļc˙iÔm6¤2 ׊W##ļgøåRž¸ģšÚxäÄ“ŗÛKbk‚uÚ ōÔ7˙€1cāįˆāõÖYĪ°Ÿ‚홲ž˜0įåÕdCú¨Š›Á˛n-á&f͈˙_>ŋÚ×Y˙Ņ”õđÅĸ˛ķTtP™ŋ›P|/bÃæšÕI=HÕnW?“ņøR7„ôæĪĒį×ûZč˙íJ…4Älē ĀĀ?Ú×_ürá8ŸøøÕsÛ:ĩŅ˙ڔá9œƒ>Ŧ˙kŨ˙Ŗ(_ X 0.5n_ík’ ô˙YPŪhzE„F{ÍWQļ‹8ß6ąpĢ“ĐdÉPLēšhÛÄ7ęTęŌōŗ8/ØŖūéĪJąkeĻj2:[ęē„’FšpˇŌŖs'#?ŪĮÕMNŪ…ŋæ%ĢĨüœ~ĩđĒ’OöÖļ ôžjŠŠčXhˇ×1ëēÃ<Ī"īģîĒHííMģ%õ˙ Ęūk|Û~CūpzôĪ?ËđëhĸŠ(ĸŠ(ĸŠ(ŽRų ÔĩĐ˕kä¯û*Ņđš”đn†‡ü†ĩĩEQMĀ8äŅĩ[¨Čä{R€a\öŊ§ÜÆl -Žcš‰wynvŋc*TũŅÎ`6OšČôŨ—õ[É$ŋU„ŋT9’Ũŗ´”Ā$JŌî–ÁĀ$6:׆ŧ<÷ēģ^9ŊDš‘|‚ŦË$ō”`ĨTœ´Œ_•Tu#=ßZZÍņü‹:Žz}ŽoũÖ=åÜÚū˛ ™„æLs÷MŦā˜äƒųWUEQEQEQErڌaõ=Yw8/a.qœĩüzÕ˙Œx3C˙°|ú-kj“=xĨĸŠiRG\zu&+‘Õ,4Ä׿ē’îú+ÍöŌūä¨Ė-n¸8É,O˸•Á9Ŧ+mw‰k,ÉđŒÛÃy刜#,HVÉ9;•‚qN‰|1}~4HŦĩ‚'’M5˜\ŋ–ë~RÁĪs€y#¨įŸIU ĄGtĨŦßxsS8Īú$ŋúŽz}â/ H›Ã‹vOˏŗ]cׯéé]QEQEQEËÜG4ž!žˇW§´˜F‡X@?›5fiZ—‹´}OĶĮ‚å¸6ļŅĀdūԁwPšÆ{ã5z/x­Ûx"dŖS‡ķŠâ×ĩæŋ„oT’röÜā{åĮéVˇ5mÄ ęŋŧĻoVīá]@ÛÅļ?ômUŋÔ5‹Í.îÛū‹āķÂņŽn-Č‚9ũįOÎĢÉ–úΆ"š2˛ŖÄŽG#"Öë#?ZëčĸŠ(ĸŠ(ĸŠ(Ŧ WÂéĒjl]FęŅö"„÷뗍ˆčĮ:æˇü!Ō…Âx‡RSũī*×#ō‡Ū’o k’?á0ÔÖ2!a…IĮĄT¨ßÁˇîŠŸđ—kjēČ ŸŌĨÂ7‘8+âŊpîŧ¨ÃõZ—ū{ŪâĒÖĀ'8˙´Ēšđ|Ꝋ|HIî.cĀü6côĢCÃwǤ/‰õ‚Ú0‘ßū™ûŅ˙ŨūÜÂUŦįąßúÅH<5|âdãŪū5Dž¸“ūfmqGû3F?öV\0#ūߏĨĖcŋ´t/‚§S“âΰĮCvŸŅ)ÁSėÂøŗÄEŊ^éHũUsāXÆ:ŠÁāģ1?Ŗ ą„ĩ(÷‰út‡ų{â"F5-/ņĶ$˙䊺掗ö)sya<3LҏŠŅãlynĀ‚eaÕjč¨ĸŠ(¤ gĩgëō^3ûčŋô1YlĄ›îôĨTšņĶ9 '#=F?_J]…I=W¨ōō~^‡Û*QjĖ2y9ŠžÍą~î=N:ŌHŒąį9æ¨ÍvÜîaÍKmjD_1Ôú˙œÕ´´‚cķö¨Ž--ŖI!ÜĘŪjŽväqÎ8#‘ōžã=¸FˇË8]ŖđĒĪ‚pœu¨v|š × 4ą[ɀqÆßĘŦ Lō qīQF 9žj#ŖŊž gíJ#' œfĨXÉÎNO5"  '•˛/ôŪÅËü…-oQEQEfë„ =I|\ÛEĒ A'‚{Ž(ĀÉëœįš‘9îKuÎ)ÎŖa‘Ôæ’%Q =:â¯F07r;N<ŽŋīQ°$r}Aä‚ûŽ įÔčĐxöĀŠ ÚT’3ÍV’RĀí9#]Ļ%UlõÎ8¨’2Ė9`Šš;u!A“W(RĄH==)„ø `zw¤(œ€9ĒŌÐp:‘MKVrđãŒĶžĐ#įŽqԚ “°Œō?­J¨‰ubŖū{žŸõÍëjŠ(ĸŠ+3^ĶW×·÷ņj€6\‘ĪSS*n'ķÛšŠãˆ Į9īÅ?ËČëĮSBÆ=>ĩiq€8>”:† xä˙‘Xđx“FŊÖ[G‡Pī–1 ‚@'88ÁéëĶžœÕ?闾'm æaH$!°GOŽN=q]Ž#ņõĨ<ĻĶ€•“wŠéļ2f{´R[sĪáøUčüšâVŠT‘nÄpx¨îfļ˛VyåŽ4åŽ1õôŠ­įŽdYĸd‘ęrЊ´G ūà =~´Õ…w1’qȧy`ä}qĶ>`wqéK"ŒŒ ĒRÆ į§Ž ;f.ŦëÉãŋîŪĩ¨ĸŠ(ĸ˛ŧCŸėÅĮüüA˙ŖVŠĮdN悁“íŸnŋũz˛ŠøŽĩ8ë\fžŽ1Ķ &ĨPFãéNĮ*Ÿ^yÍGŊXgˇSÚždģԝo ‘ZQw ‰ĸ\g’zũ SĮAõ­ ^5¯‹ôŠŅ‹j\Å8įr;ÅŊö–ü…} Šō˜ÅYļņmÕāļXÚ68ŧe^IÆ:ķøfļEÄsdG"ŗ/P"“ËāôÛíF?{ŗ˙ė­WhĸŠ(ĸ°|bÅ|:ÄuûMļ?īúW5æ6ßâĮąö¨ ŌrFO8§‹–pAÚIĢqŨ'?ūžŸXIà p8ãĨL“žOÔU-NįĖYÛ¤>d˜ū^˜ķ¯-ņT[Ǝ ŗž8öūußørÃû@‚Ö?•Ęų˛dņ¸Ž!ĮáW.n%ŠŅŪ'T ̟ē;ūŊ̃¸•ÚyÚYŲÆüî$’Gn.*/´îĀ`ĮĐ㠏Ĩ>¤ü˙wąü*ÄŦŽáŋģëVtíZįM.ČƒĖRė8úץéZĖŗi° #ũāPËd7ûÕģ‹ô¸ĩ– Đāál~ŊĢΘJf‘Afˆd7Īž}ųæ™'˘Æ3œöīŽj$€Éo7a*¸äķü˙.ˇÃēŧ +Ö‘čyĶ#–˙ŨkŠĸŠ(ĸŠĀņšîđãÔŨځ˙×=$2”#Ž9Âŋ•V–‚ŦcŪĖA l\gęVĸH.„ƒä”įƒœc×Ō­¤ Ĩ nį€8÷¨gÔí,˛ŗÜí|⯤‚}ēRGâŊ0¸;ŨO9A?Qøū´ß9’ÖįSŧ;'›€„äĒ˙wükˆŗōīuˆįģcös.Ux•p[āäārG¯jíäņ^Ÿ• NāŪ¨ÜkúuĘ´2[É"8“oķ ×5,{ˊŒƒ,v¨ÉĀΝzd:y#>a-ÎUS TūDËĩd“<œGŒT˛ÛĒLJvUãs20ĪŊDöR9.ށIĀÉĀ<ņ]‘ĢŨÛ@-ČU^‚FõÁ#ņĻßø‹P+åî‚Üî ˆüĢ61,­%‰đ=ÍHÖ)Ā’˙[%n}ķëIo 8>eÚŽÎrĒ~nztúԆipˇ8ũãg/ˇ=iĪ „_ô˜¤Ī0Ü~`Vŋƒŧæ×ãf%ÆÂƒ…éÅzuQE!îE-aøˇ1ë}e˙Ĩ1S˛‘žĮŠ'œR‹EûÜq×4ĶnĒÁÆ*’Ŗžq“Ö˛¤đž™pæco “ˆœ¨ũ+™ŠÆÎãT–hVŌ­Û Žų8'}AëÖ˛|A|×!ãg üŌ0<*ŽzuΎ\žæēß x:ŌãBˇēÔbe¸›÷ŠŠØ)đ!#āäû“[ąxSG‹…´ĀëūšōzwÍE7„´$ĸŲmįrļöČüsšåüAĸ[ĨÁ–5h‡6NũôyŦ_ąÂGŽIäÃ×đĨH,äb„1  ¤Ÿįũ*s§A#ØeF_ČįŸūĩ_˛Ņ ›A"Ûį9°öĮŪūy­Ŗá=2{sÂb0q™Ëcķ❄t{P\ŦΧ wč?!XZŽ™ĻÚŪČą]¤hGÜķ#?įÚ¨Čņ¤‹´&zķ“=ę+{ĢGš&ėųˎy^O<œÕûKŨ&[ąŊe… ˙ĢI˜œäķœúZjŪ[č¯;ĸds–ĮÍߌúķÍt>ÖĸŸQŽÂ8đėœā]ÕQEV‹4H˙ëūË˙JbĢ#y sŌšeL‚{*&š5RĄ_×îžhķUÔ}đŲî axŋS[=2;Ks‹ëÖ0Ŗc”íė1õ9íXš‚;M1Ä~LmDŽ1üķ\ļ•dēīŒ-t`Ą­íXMxĀŦp3ˇđūgØWļŦëžIĪNqO2ŽrĀ’EW’īË\°\Ŋšįĩi ääĪFāß<ôũ+™ré Äņ\;,OąŲúnÆFb_JÎ:ĒK.×-(ą*‚=×üjēëĻŨg”Ûđ0ëĶžW8ĢxĒâŅŨĐÛÄô\p: ō1V˙á/ŧ¸gŒÍ ›wČÔsëõǎž2ž¸‰ĪdØA%ząôúf¨ÉŠ­ŅaÎą.Iyū}ũjąžXÛ0ũŌsĀõĻIv%U6ũâW’sMyüÂŽ†DLmČ>˙ũzč+ļÂÅB’;Éí]Oƒ.ŅŧKlųČûŲĮņ õÚ(ĸŠ(ŦO˙Č/ú˙˛˙Ō¨Ē˨1$č)Œ@a•ŗũŅÅA*ą$ĒČGģöŇt‹˜¸Î9n•ÁßŪÃâĢ™Ū@ĐÛ8ĩXũėgqĪOŧOæ+;SԀˇeA†Å7Œô.gļXÕĪ„zlßfžÔÜ3I#m2¸ÉbNXũxéÉ  š>ŋ-=˛7r§ũ‘Y÷"Œgí\íū“o,˜c 3Aāņ\V·"Š-e¸–˙GËėpü朚 Î%“cÉŧ`(ƒū' æŗĮ‡įĒ}žV|‡ AČū\uŠSÂŌĢ’`”vŪ9<ûņĮ×ņ¨æĐnFøā‚åÁ~YŲO$õ$3ŽŧÔķø^ō5ĘÁ†^Æ\ū˜AôĪ)ÔĨfR7Æˆė­d‹uĖ—*ĀáT!Æ>¸ĢØÆEķ­cG‰y>dëĮ=ĮØ,aVX_ÛæÛ0zä‚9ôõ§Ą¨Ä–[€Fā['О9­˙Úuøåą?"î á~u˙ë׎QEQEbøŖūA0˙ØBĮ˙JĸĢNüą†ãī1Ā É0aķĸūu›ƒōÎダ6ŒÕkËĨŗŌīo<ĩ oČ2Ų9žÕ▗Ļ;In`[žŖĶÂŠNíāF›v>Ųz‹ĮĘĄķÅzÃEōü'q3qß ŽÄėPf”lEų‹;`sÎ*ÎŊĨZŖ¸ŧ $+¨É*O°úëJ%ĩ¸¸’(.Ŗ’X€.ŠŲÛĪį֙-ŦíÎŒdķøU9í&ÚĮĄč6ž:uëüë5 tÁ–7ažų_åÁ§Ē‰c Š,r?ĄŠŒp$īŅŽ?VŅ$]Æ2ˏŊō‘úR5¤QĮ†Và *HĒÍkāGnęB4}‘2ĸŪ$FäĄLgō=ŋ*ĪūÁąiL†ÉˆÁãpũzT‘čļņą>Ca—ē“ã‘øcĩ_ŽÖ،nlâŨĶpO§­_†Ū8ŖYTc49cūZ(ū_ĘēJ(ĸŠ(ŦOqŖÂ}5 /ũ*Š­JWv“ƒžõŸąNĐđÅ@Ķ(ų„„ķęŖųVO‹Ĩ+ā­PĻŅē-šŨ“‚ĀZņMa^×Nąt'ɚ.ō3‘õŠoeü<´mõ6 ‡Ÿ~•ßø7ėZw†Åšiķ\ßšBŸt`9Ī<ķsŽQTuŋ^/ËĢ^<í. Œíˆ2ĮSß íĪJĄkãųö€s&æ,͓ŒŒũ{úÕ˨āŧŗY´ČöĻ4.˙xÄcœËœžĢÂŪ'kįˇw{E y`zņĀëŽŊ+Š–Ų›Î˙ĩŒū•DŽ@ÎĻ2 ųˆĮäzR4NĮ|K Āô Ā’~ŧSQ˙ŠGCĩŽ)ĩ$…mČOrøõĻŦRGōEx0?™ŠTM$e&Š)AS×åãžÜĶļFŖËQ,Yė:SEļĶģËHāŸčj…\nR[ķ~"A¸ŗ™ęzwŠ&GĄvÜ đc?ōÕ+~Š(ĸŠ+Å'<'ūĸ_úUA,ī; ī،€OŠĪĨ62‘Į•…2FC;g'đúwĨÁōDķŸ–1ĪëY^'&o ę‘9+ˆw ā‚•yDBÖ]"K+ą‹+†Ė7fÚQÕ[ĐZŸMđėãMŊĶ5UĶžHŨ.ÕÔ+°9žRH{{đžĢĒZIj–6CÍRģj 6…îxĪlõ<×7}æŪGöEŽæ[Ē6FŦė¸läãĄÆ?Ļjũ§ÂßŊĢÜ^DfPXũÜvnœúŠtF{ š ¸ŌD>[.J”Īˆ#øīž•>Ļ_E_BōÆįå/pF:ü¸>œįyôOkņëVq¸ōĀ YyÁØ02G<öëÍh0O4˜äx›ŽVô<{Ճl0ÂG÷hÛ^¸¨–"ķˆ•˛3áO⠁Ą5iQĶtRG++t$Ō<ŗ;!?Â~R~”ŨŅŦÅYŨÉį NĪøĶʑŽ!˜ į9'͎ãQÄ-Ų iæŗtĮ˙>hōdą‡cÛk@ŠÁWāp8-ŸëO¸pÖqá1ļâߡũ6JÜĸŠ(ĸŠÄņYFˆœā_Ųt˙¯˜Ē96°s$\1Ī=Ž•žōOį Đ $†u2Jsœ‘ŸČŌ­Zy­K~ßīÆú‘õ¨5˜ŒēUíĒÉ!–kwLKķo%Hė+­–čH“YOåĘFzãų˙ú̧Š9lÄVW3&øw^^ŧq"‹dÆ8ûė1īĶÔ×7uâ ĮގˇX•ÁÔڏ?‘ÚŊcDņ–Ú$ZĻ–Ō¨I%…B@ÎíŨyëĪ8'¯&ˇė4‹ĢT*$†ÚšÚq˙ɯ;ņä+Ļx¤NŖæ5”(_ã‚søųô¨:ž‘öUtIÃ;s„ã“ųū™1Ĩ߇YžÚy’Ģ`ã¸é^•áŸÅ­Öí<ģ’N¤>ėcš{žĮžÕĐÜĒÁH˙yD„Ž}ũbŗšæh\(f',p}Îztā Ո¯ pŠĀY6åÂp úūu,zŸl$)‰ÎŌãāœUß.<#y8€1‚EeŊŨē]ƞYĮF1ü§õæ–fŨģ÷’&zí΅Pƀú(Š8ú÷Å>=jÎdXŦ‚G’pŧ2{ßįšu͐ŋQ$W`1ōƒĮpOOËÖšųã}÷÷Š |č}GŊzVƒŽËŠÃąĀ¸¸„g|k“"qķ{ŒĶ¯5ĻÖŗäšŽ@e!ģõū• ÃÆĘĐ r6ŒäŠÍKcl$’-áÉN7ãņõūU¨a{Vfĩo”Ļ|ļlŽŊGųôĸ{ϚŒ*‡#9sÆqœ€0•dO‘eĩ˛—- Ëē[=}yëëVmSė– j›RVåÁ`ۜsüŠŌŠķJ] ĖÄíbzcé“úúÔڊ˛YCōœ ›PNx8¸ŽˇčĸŠ(ĸą|RhČüūÚéDu,–ö2l(cĀåČųŸ<đSĮËûV‚áŨc•ƒ‘Æܟ˜˙ëÖnđ˛Ÿ1Zwp# ’XœžŨMwēEĨŊĻšĒ‰å™“Ü.8!׿ōĩë믞4°2ą8;[`#ž~QĪsÔU{a2Ą1*“ƒœdŠÛ’â ũ>&ŲŊĖi´4LJIõ¸ũ+7SŅá×ĸAŦZÂF pˇKŲIé¸c÷vį’âķM”Å8’ŪX˜|ō°#ëŪē#¯&Ŗ¸ gG>ŪINž1‚WîōsķU]Ö5Õōü Žv€0Á@§Ą8ú~uŌÚÜy7ĻXeōŅ\n<y‡ŠüXbŗ‘(„Œ¤dËum"@Ŧ¸8čžâžŌÀ‡mÃô¨üČŽŨU_lĀd\œüö¤’7ŽHîŖEU*Q>n¤dËŊPĶŦ#x ´„Uꇏëüęüļæ\ ¸-ˇ†üé°ã8įú\~ˇ&Ÿ“ŽrĄčĸ=¤;žš•KĸjBR,āŽãP‘”bäu`ä|¸öÍhŊĖZŒ˙f¸A¨]ÂĨ ĸc8yY0HÁ## sYZϧĸxQš]KíQ/”Ķ1y7c…=Fyęx¨ė/%eģ‘˜ũ¤†HŽņŖGŽė“÷XÃĻ7c‚Ž3[ίŗvãTcמĨKĶĸ2ՑqŒĄŠ_Y‹pŌE4l Á‹Ļ~‡¯ķŦZģ:šÛ$M$.ûXÁõ8;~ĩÔjs-¤9Såš98”úŒĶZüĘ7mÃx~ą‘tEʘã~˛FĖAÔ֗Q‘Ym˜FĘÍuh 1*.ükĢĸŠ(ĸŠÉņƗ¯-ôĸ:Ąqœ•iÔ¨ûËg'ŌŗˇÁ(û€ĮߟĪōĒē%ÂÁ¯ŧPMŊ .VW‰q“ßœ¸ëŒöī{Rŋit}V9îĸû<›™—!†Æ1Ŋ‰ž:Wá•0[,ķģ4~[:Ž;ƒŒ|fŠj/Šâa÷öį¸į?ũ+'ė2]Éq+ Œ ¯#üâļ_JšĘÖK6pŦŖ-a¤=ˇÉQčxôÅrzöŸ%Ŧ^ZÖđ–ušųCVsėr÷Sȡ‡Ë8R7m'å#?,Vž—Ē3C%€E2F ÂT|Į'”üÎī¯jÖˇĐõģų °ØL‘Į÷ža´v$āëšė,´ŅcĢĸ6WŽSvãĄ8ût=k„ņTREĒLķ8rNāĘô'ƒĶŠčŧ)¯ÉĻk)™›+‚áŨFčũžx>Ŗ9᧝˜į æXܐ6dSÚU†2í’ŖŠW3ŽIąnļ–9Če@@ČĪAÎ ĢžĶ–|émvËūŲ˯ˇĩ`ßęPžš=ŋ˜f1ĘØmÄm;‰Āįę=8â¯ÄæEHwxž•bXR)cŽbėq–˙…MĒ0kK~}k–€|øëŠĸŠ(ĸŠĘņ?˛“?ķ÷k˙ŖãŦ}EåŽãÍSˆ“ vĻNėņŸÎšéuw’xŽUŪ!ķ$…pĘ}jĮ„'‰–ô7ŲÆ[—pCCc>ŖŽ™íęjž­ ŽIt[‰eĖ;†ÎO|•ük“×õëeZÚîˇQ!dT@p#=IüxŦM6ũæ0H&u –Ɏ8Āíë]́KDvvC Û˛LõÎ?/˙WŊtė,rĒyŠ<Áō“ė3ųū•“¯é6ŠĨŧ°†W“3|šíîŽIđĸj…Žīæû=„Nc B:€z8Ÿ××iw:‡+.—§'ËÁšF۞äŒāú `œŌOâTyNK˙1>˜'üāՕ{◐}ž6ķNågā€HĪ:\åâÜO—LÉÉ%˛OįëšŅ’öXŖ…›ãh› ܑĮÜöükÜ ũ?:§öģĢ[_.3jšųlį$Žƒ¯O|ķ[W‹ūĪ#Lņ#ž Ēāãō_§zvŠâ”žØĄ—`RYąčqôüÉõŦũ:íu!/^'‹|b%ˇĮNsrzâŗnZ+x]æģx+2’ãztüųĒOk4ĢčáōÉæ>ŌĮ# $rĮņ„éwüŪi`sĩ˛vžyÎyzõĒ×VW6¨¨QʇärWyíŌŽęŗl&iNeÚŨGNĨ{ÂŠĖžS)Ę-ā:/~dūuŅũ˛ÚÎÕæą‰ŽŨ¤! @c€:ôÜ{úÕ=5ĩ˜Ręī^Ŋļ6ādƊŠƒĀčxūĩĮ]ÜÉws$f駲iKÃ'j/đĪ`ü>ĩĢoŗH%ŗ´mŽÛŨ° Ü:U{ûšd>qU$|šÎF:ũ\VŽ™%āhļÆ#)z*c°ĀĀŠī$cm “÷¯í>SÔqøWgEQE›ŽŠm0ŒųБŸúčĩ‘RC!pĘFâHŦ­LZÉe*M3Fņ ‡ļôüÅq‰wŖŨ$ö×ā/MŲu?Îģxx}îStŋ6â¤ųd@ĪqūqP7„š ¤Á 1Į×>ĩyá養Dû*CmĒ[Ķ““É5Ė_č2ZÅļkgxØí1įäz}k]ĖF<Šnc U<Ėį=Č^)ņh‘ÜÁ$“ÚpĶ V9ôœ}y?Ÿ;'…m,/$EŋhDŅãį“"CŽúõ?†TÚvŠ{¨LCoˆÕFā‹ģĄPTžIĀ˙­šėô{;žĪmybpƒįŽe)ļF9ÎsííXž-ĐbĐõ5×4¨Ö;‰%HX'—!î„āô#qÔ É×,mZŲᎏķ$”,1Â]"Ī čI÷Á=H+"Ū56+ā2JŗŒ˙ëúWwáčī´ác›ÉupáN}ˆÁã*k/ępŪ¸¸WMØe+×<įÂļodMfŸáß“9į=1üĪjÎĶ´#k"Ë{ž(ū÷ŨߜöĪAŪŦĪ=ē]ų‚o”üĖÛ˛` {U^âæöÄO+DįlqĮː:{‘õĢ:ĄåØ\ĩ„H‘Ļ$Pr0:Žŋ•j\¤Ō]CäČ÷–Î"ÎJ:`ëĪ=ģs]ÅQEVnēvé.OA$G˙"-s׉NŽá™™ĀÚFė žøęxŦgŊÕƒYHۇ—ŠėOĨbų7M9- ]ãpwÖļ´?´ÛoRĄ'Ė™ÁĮ¯ķŽž;ŧÚ+NWi@؏€žÄ‚s΍¨ŋĩ ´í›åŨ‚ŽAÎ}üøãššö쨯÷BMãåöĮųíXšŽ”ĸŨūÎČÛŗŧ`=9ČŽ&æÚŪÚā‰/ ųx%XˇöëÆ(?gš‘ÕWŽáĩXúđ VwuĨ#ĖUųÔ#W áyãM_žMBTÄr•Ëh‰dp 9üGĨjYĩ­Ū—uĻŪŠŽ ”d1´‚G\į ¤uÁįÔ\ĩŠĖ‚ķÃēšL@Áƒgøˇņ–vaŒ.1Œô9-ÉĪΛĢM˜/ŧmb­=Ėëųõ3m¤jPÅ}p×ZĘģŖ;‚’{ņŽĮ#Ĩ#xWIXÖyn3ļø˛ā }Ü;c§¯Ķ2A5Š¸Žī28HŖ2}0=ķ¸UXõÜᚠ†ˇ ~rÛ Lįr?IqĻĀâcn’ʤ|‹Ę ķÉv8ú~Uˆƒė‡ĘmÅëį2Ģˆ?ē|uãŠĶĩ°--œS˛˙¤L +'ÎAp8PŪ­zn/`FV_ôģ^ũwL~‚ģĒ(ĸŠ(ŦíqKiR?ô5ŽCQōŠˆ&HķˆâŽ1“Žp5KEũ÷˜‘¤QĒ|Ō1Ë|dņŌ”kIzūMš•ÛĄDÄûį§áŌ´m¯™”˛Ėa%vģŒ^Ÿ—J§uz"E{ö‚Ãv7 ďN˙‡Zƒíß÷3îwûĒ29į4‰sua=ŊĀ›ti&>fãøOž?JփS“R¸ ā}ūx~X÷vŽŧāf—TŅ#Ôįˇ4×evbfûôŗ5]>P“i×\Ž`INAúgÜÔÚuŦlÉ}åk7o™ÚLãÚĪ ĪŊ2XAo~Í4Θ¤Xʀ3ß§ųĪ*tŅ'[ÉDē„ ;’bņ€:Ų?N=ķYž&Ōĩ[/ZŠ7ķ,°.<ŧ,ĄĘļzq’7F1ĶŽgV–Iū'@ÎĨĨ* Á÷gų˜ú“ë[žÖt:$ōÆŦŌ†Y˛ÛHØ:Đœį¯ÖŊUtö0r‰rã%XãŒúgÛŊfępÜÚZ‹¨•CD„”@3“Đõ}zVŧšæÕgšÔU#ą9>ûGlįœÖn 픍GÜģÃ§ ˇDûCÄđ@Ģ—“  ČĪ<’95^ĮQ’ņŸR’)ÜÆ"ĩIÖ+Ã31÷‡ Ü/Nõ} š{ybɎōÜo<o9?§ķ¯@ĸŠ(ĸŠĪÖÛn•!˙n?ũ kŒŧhãēIæ` $ŽAÉā~õxnčFؓb|Į°$ūC ~Tũ%-#ĶíŲGwŗH’‚ŦāžÍĀÆ;f´ˇY‰¨n…­„Xá~đŸnÕ1“DĶ­ŧ ą"†û­„9éĶåLƒTķîYÚáĮË YH'<œúcŽëš×æŨ<ÜÚŋrŽ9úāƒĪĶŌ­éÚäk Ö÷گ—Ķ€=šõŽfkš"n>Õ$÷ãdōgpQČĮ<ķõęô;¨5¤Xg[7û9ÚŠ$wOōzū}€L[ k´ŽŌÆ1ĶŌŧëSđ1Ņīd“NišŌRî#ŪFÎ9MØ<įÖ°,tŌ&œÖ˛Į‡ųL`0,p­“ÆæE’sƒŒ]Ĩ—ŠLŪl‹ę‚##Čą7—Üv <ļáßÜc¨ RšūĶŧÚí<Œ&Uچãu؜Œāž@Í<&–m@šŽc-´adl'œ=*ŠMr%Ú$XØ0 DyhĀëœqųœÔđ›]aDķÂÅy),ō3DXö BîíÆŌĨž‘Ņ#/.ĘrđÁāR3Íqygō-.íË2€Ÿ5éBĸŠ(ĸŠÎ×N4‰¸îŋúŽFö2Į÷L­ŸÄgŠÄ§´†ģŦ|b]ÂD'ėzđG~Õ¸-Ž0­˛œoÜAĪqԌûdĶ$ŗēģ”­ĖĘ‰ÔÛ>ũĢR=).ÖÖ(‰ DļđĪĶ?…iËqmak,13ĄƒĀâšÆšãQ›1æ8ŖÆ77T3hŅ­Ķ=Íã¸fķ Ëw,qÃŪ¨ë‰oÜ,OŒTíč*…Ŋ˛ym<ŗĪ )Ą8ëĀúd3Ih-…đûJąđą.AúŒôĒļP]ęzd—1}•!ųĻ*c`Ā €éŌ´aēÔãš‚×OrŖdÛŊ¤<ázŒœ’ŋí™ã¸†õãdš2¤’ô€ŠßÔķŽßhĨėM$Cs`aˆŽ{gŋáUn´˜0<‰U‹§%žcžq휀;\ĻĄá‹¸ŲÛ˛B0Éķ=YŒ`zNī¯"°ŪĮV†īÎ&™[(ķÆUã¨ß!÷>sOM7R¸\yk<ōŗ\‚Š?ā$îc€:ĶĄ­K?5´‚{ĻG™æDsß?įŌ´.ğf"+€ūWËåîčŊųä˙*Ž~Ųrą‹{WŽ>UČ=? d/,—vīö¨Âģs‡Sšôj(ĸŠ(ŦũoŲ9ūåröSDöáe@Įh✟Ĩ!Ō-Ųüԕíߌ•œ{ŽÔ.ŒĐ§öé!ˆ`ŗÜöãĢöĪq,jͲå\zžõgSžxPŦ;b€|ĸFmŖ>Įĩa^ę‰kHįC;Ų‹įĮãëUŦ.$ûBNåˆČ`3üũkqc´¸eŦ§î`§|NFkãN38‘áķŌu?LVRÃ&ŸtæÚcl‰"q•qūsKEēĮ*ÆÁ‰Vˆ…Į=~fČä~Ũ)<5%ÜŪ ˛„iöķĸ&RŒ6š#pĪNâ§°˛ģĩŊmBū×s–-Ž6îë’° éÜTvšÅŪĄŠĻ $ gåGfíęO׏͛d q̘×sš ā“Ü÷čz…Eo̘EŊuFÜŽ*įœ¤ˇ#˙­V$Ö`†6e‰<(2|ĮüãļOČęˇĶ^âAÂyÛ'ĄéĶļ+!eŧq´°(FîGĶšÛˇ†æh÷5âÁå,ĮōÜy§ĮÛˇúČæ@ûÃöæ´cš¸-ÄāD¨[ĻxÁn˙L㊤šmfĐGåųIs`wŽŋũjôJ(ĸŠ(Ē:Įü¯q ųW%o4mlĸ`Ām,¸Æ=NjõŗÉgąõ'jū$ ļöņÂPßĪæ°ûąFI­PÔĩk“Ãh>Rˆ1Æ°'‹,›|Ë6Iü•cģ@qĮНÅ7øÕyoĩ($$šŽš#õ…;ū?-ž{S¸đv÷÷­{?4é“ —ˆ–#×#ŸÖ›sŦØ\\ˆn4Ų—'h„cŽNžœVŊž§LĨ[Æ$ ap͌šęí´ 24PļQBĮ'éÍqž*˛ˇđīŒtŊamĮØnTÛ܎Ã;Ž<`úūīŪēĢíexcŒÍÁãØžk îŌĘÔȡ"0Sæų¤ë‘Øqęk.i4É8ļš?0Áaúz…4ī?įƒqdûė#l{ ķž;Ž´˛iíųî#úí•m鏘ķOŠØ‡fŽ2_ŠũįķÃųœãÛ7sŊˇ6Â2Îâ;V”WŌ”ÚĒŖ<ŸáĢxĸŒŦÎާÅ{ŋ;äcTû˙ž‚ļ,nį* Œķø×AcĸÂd1‡n]H?¨úVčŠ8ŖųļĒŽ¸āU9.Ũ¤ JS8Üųéę*‰ô•×|?5ƒYŽ$…›’/*}†xúY>Ö{´û‡*P‡ĖÆF:ÆsČe õÆ@ļN­õ–Q†Å z^¤{÷įšÃ—NŋY˛_É qœmč?Ō’Ú3k ŽõĨš"9!ˆÁü0ĐÔĻÆÄH­ojąāŖ'ųšÛŌ´uAŊ‚”cģ~_CZÁL#bãāĮįYĶk‡ō%P…¸Rͅcõ:ÖCjĢ.øöL0~áÆXc“Û‘˙רãŋÕa¸ ːœúđߏCųÖŧE$‚La7J€¸;ˇŒûcŌē (ĸŠ(ĒZÁƉ~}-ä?øé¨ÕĨUY.yۜúz×5âë{štŠ­#ĨYY ÉÎā Ãúũ+„Ö­—,vĄVy^0Æ(2˜eˇžŠ3šĢl““<1BÅ-bß#¨'Đp:÷˙=iļūlЏ—ËÚHĮŠ<õíé×ŌŖ’eē+9 “š‡e?ņ­+h‘q‚˜O×ņúÖ­–×ģ<Šæĸ“僐ŧ÷˙íôģ{Į@čÆ0=sƒøŪX|ĖHīÅGpéaw„į'Ĩg,ī ųF3v÷æši3YŨMŦiqĩÄ2ڄ(2ĀŽ™;îÉŌ§Đüpŗ@‹|Lā¯îî#Lîōŧũā*ŨĮ‹l>ŌQōÁۍ㌎ â­&§i=ĄÚÜÉûĖ úđÜuÛņŠôĢ‹pĪАL$+‘ å€sÔūŸĘ´ŽĩK{6Tm,~Rx^¸ëY×zɅŌv_2ÔđøåôíÛĨdßJ.îÔ0—*:“Č> ‘Æ ˛°D xāēä1éĮĄæĩÃĶĨĒ´Œ%xÆĮ•€īé۟c"́ĆÖę\8į?@EutQEQYÚų#Ãē™ZKûāÕ´Fˆ†I\"Yˆį5;Ŗ=˙úŌYéÅ™Ļ>Sqåą<7}Įđ$}kQtˆ>T`Än æ+`đx{V‰k{—h,ÄÔö5Ë%Ų`ÖåcSÃ9ÆyĮęĨĘÉØAn<­é'ŸĮ]ĀcôÍmQEQEfx‹ūE­TúYÍ˙ æíã!ŠTvW9Vį“ŒéŒV•Ž ˇiÜ,#Ü;āãŽ{ÕĻš’9=ʰÆp§¯ˇ4éŊÍŦŠ2‰-—Ąšé×­eŊĘŪJ֋…å+ oķø÷ÅWąŅâēŋW¸„IÜŖ§×šę$ō­Ŗ]‘ĢČ ØĐĻ9 HĩĀį>ž†ŗį_ô’Ī3ˆq”…x˙S˙×ĒWĻîXXF‚0ŊG#LVDĪ2ˇ”]äuÆT ŸoZ}ĩŒķ¸vWŪzg€9÷ëZ q œXÄLÎãįt}ĒžŲ˙=7[€¤KpĨ˜ÄuÜzĀãtüiģ]\¤¯ƒIōˇ?žâ0=ķĪą­ .m­Ņå–Ti›ũaߌ@}9ūušŌèÜ<˛¤’Ē•‰R<ķŽŖ#ŋ÷ĢAŽĖNgDd',I ` é×õúRY;í;–āīc‚Žx?Ė~ĩ¤“[CtĐnrá7'#ŽÃ•Rģ×lm>Í2Ū9Xø9¸§]x‚hã´Û;Oˌ?ŋáI ×S&évųfT}ŖļX~uĐQE7šuVoˆäZÕ3ĶėsčĒĩ•ŧ_Ŋ‚ ŽŪe8Æ;ķYŗĮl!Ií!‰Æâ­äđô˙?f‹Ģ—¸Ž)ĘĮ(bķ|šŨŸáBT^Oˇ'¤kkĮuxæ‰2į!P9ëë×ŌYÂ,X´‡īrFŋˇųæ¯Å-Ô$/ž {ž?.ié-Ü6æā$}xLé#!pŽÂûIü)¯xĖb!=ũōuëĪ5›s*Étnƒ–$áw\åšFM^8îX åãžŲū_…1,ĩ ÷ÅŊŋČåŦ™/Ī5 žh‰ZYŸŋ–=ú˙:š‡1ųîo1ŗúĪãVeĶ`DSqtAĪ?,æąī´ũža|ÛĮwnq§ˇéPéÖˇ ä]Ŗ[Š wŖžųÆVîÚY`*Ķ‹eČV1íUüÁ>Ŋ@Ö˛ImÁ…0AŽ|ų„c75kŖ0šYĻí¤ŨĮŲūę¨ĨY]! āÉ.ėH\{ņŸZÖŗĶĐŠhė–;ƒül‡w8'¯Öĩ ¨ˇ´m&DÎ;üÂĩ(ĸ›ŸzuVvŋ’øsSŠ$g‘í%TT’J$ÖdZÃ,˙ŧļŋ–<õkø÷ėS\i“ģîĶná‚~Į:į˙!õĻGmĻ…`,ī`9[YõęS5*Af g3ãŗZĘ?öZ‘"ðJ§’øØūt’A$ģ€Š@ę-Ī?^•$q܁`… ŸĮši‚ãÍ,-|́øŒĩ#Zo_ŸM]ųäĒ%,02›&3Į Øüڙuh.Té×JËĐĮåČîãč+=tûØÆøė.Ö\cpxÁúįw5f f%´ëĮîņsÛŧŸO­6k­o`H´{Ļ'Šya˙㕝-žŠ:4oĨ^ų$’x ôĖ´ļúLņ\,¯¤ę’`‚ÖÃ9˙ļŊ}ëI.g…QøkR[Æj`¸ŧudęûCn]’Û.?)ųĸIīƒ`ëJçīíū׊#’höąđūŦė3‚ōÛũĢR5ŨĶąa ęjIÎ<Ënō-8]ŨŨũ‡Šõeŋ˙ĨIīdD„iWĘĻE>dÕ†s‰ ā}krŠ)ŧ͍ĸŠ(ĸŠ(ĸŠ)íÁ>Âĸĩî-’Y-Ĩļv0ĖT˛{Ĩ—ō&ĻĸŠĒÖ[îÍÁš@JlÚ ÁČ=2'ŋzˆi¸…^]eweüĖ3dÎ3ĮĐSϘLiŸqyĄ€l€xĪļ=Š~Æû‘…Ä™¨ÄŸž~1ƒĪZsYÆō|û÷†Ī*pˇŖNō[)uu÷ƒaĨ.>Ÿ6N?ÌS–ÁhŨ]ĀUQI.3Ķ#<ƒƒĪ@)EŒk÷KŠķ œ9$äôėI˛Gņ “]Æ4;Ŋ°ųž[œâb¨Ž˜Âž÷Š;‚€퍤›ÄˇŅŨÅ zäąŊÄqųŠŽ>FXɓ”]ƒōŧ…é¨ĸŠ(ĸŠ)0=)hĸŠ(ĸŠ(ŖԌJ0AFĨQŠ( : MŖĐRŅEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQAé×QEQE˜÷4ČdĮ¸08%N=AÁũAŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ˙Ų Pixcomp[2]: w = 241, h = 365, d = 8 comptype = 2, size = 24485, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸ kžk2.4ÜHÉnųã€c'ž=eg Ž ÉĮšuĸ‘ŽpOԘ’ĖŦ¸Į ŽA?įņĄeYT4NŦ¤9â¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŖpC)ÉĮB*ą‘ŽÅĘCoĒË#s–VÆ1ÁįžœfĶ ãšôÍG –še;°Œ ØFõNÔą†wa"rōš>œ“íÎ*j)ŠY‰%p9õį­8 vÅ-QE!8 ŌdúS¨ĸŠ(ĸŠ(ĸ sKE0ČDĒ› ģ#§Ŋ˙JUbÛ˛…pp3ßŪ’7 ŽHåHčqßéOĻģí…-’ã=ų¨Ą¸y]•­Ĩ‰@ᜮ’8Á' čG|"9a–Rŧã“īÁĨÜ8÷ôĻ$ŒGĖ ž‡#õÎ=1Į˙Ž1LUđ79÷āgōĻ´›%T#†éõ˙ –Š(ĸŠ(ĸŠ(ĸŠd’¤HĪ#Ēĸ‚ĖĖpI J„€Ia¸z_ÔSčĸŠˆ‚’īÁ!€qŒķëíKš˜6\{ņ֙ kĆFBæIĪI$žOZKŨÄ~Pfl,ezą=į։Ą7 ‚Pq‚Æ}Ā4ķU’yĪ,}sūE9ŖÜęŲ#ŽŋäT-īDĨZBĨv!Æō |1J‘āŽFC4l] ēH#Ā‘øĶ|€ĄpîJFį<“ëę9īũ Ÿ-đUNä ąĮ9<ņČü~•=QEÉdōĄy6–ÚĨļŽ§…dčēôZûNĐŲ^Aģ…ĖĢåÎyc+ĀA÷­š(Ēz•Ųŗą’eYqėTr@ęčj­ŽŖ,׉ksä,žVJ—ÄŒĘ@cŗ.zķ֙7‰´ëx$šVt. °fC¸Č!IĀ<‚>ĩ“ŠųRMwyi{=äSG‡˛‹æY‹@ƒÃĻN3ģŒüÛ%ЁĘI¸TŠ)6¨>Q…sī¸ôéEöĄwfeeˇŠdÂųhŒwšÉÎ?('ūrqĶR'2DŽTŠ`Öę=>ŽôF`ƒ,@2N(,y=)hĸŠ(ĸŠ(ĸŠ(¨æO2MĒ۔Œ?CõĒözeĨ”¯4ņĮ4¨‰+ Æđ íĪĶ'ŪŽQERÔZÖŪ{qne0ČV=îL/šŽ&åÄq6)cHf‘mŽâčÄʂ¸%˛A+Ķ# 5¯s=‘KYĻKxÖŪÛ͂Îč˜åY†N ÎO8#Čâ„ēôˇšR\Ãä!dI‘ɐxŒXäc8ė@cÖŠčSÅĨßMˤ4…Đ dRGŪÜœ. Đáˆõ^škĢ73Û¤7JGšyŽ„ƒ¸ŽŖxö­ÚĢ5ōG!Ĩ‘Fæ ŅĢĀúu=ŦŲbG=qŪĨk°Ķ-í­g‚Q *ČĨĐĸHNÕ9<‚KuP9QĀŠtQcp—ļe6đIå€2ÜļŨĘņĩqĐdã׿:)u˜õGš]ŦÖM˛îN]pĮ8#=ąÆNX šÉžņmåô°ģčŪr›ˆÚxŲß ņ6…Ī9Ũž1‘{AņöÜg<Ė6Ä72&eƒķ€ p ‡ƒ’p #5vß[´¸–ø[Ū-¸UX-DŠB ę§†IyŦ]Z[R.lÖCĨžZ{hW%Šļ:eWæ#kįBšv§$–Vˇ1ĘßlKYGœ3ķ rĸ#ŒŒq ;@UũÛtÎņžP[paĩ”ešh7F„s¸Œ‚ ß8'9҆ūdšXnĄDYÔʏíŒF>SÜrAõ­(ĸŠ(ĸŠ(ĸŠdˆ’FÉ Œ`à ŽāÖ]žŊ§\ęĮI´}ōĮ JJ "…`¸÷<ö sƒ€uꆧŠEĨZ›ģƒļŨUŠŖ;e˜(TO>p+›:O™#˙j^ZĘ~hŖŧGˇ)mīåĮ"Š#‚@b1Û÷›(ų0;sĮRė ⠜ ×+ãÍR; ÛJĩíļķ“ō(•[<ģŽŨûŒ-gY–đÁåL÷j×KZą‚)#0Ē1 Ŋ˜ @d’s°‘ÚjļĢ6ĻÚÍÔZDš•ÚOåAkRˇrėZ6-ž~ROđœĻß‡†•áû;dž–KۍNŌY¯‘Wvķ$j Ĩ ĒÆ8ÖüZuČģ…Ÿ]ÔīãUg0ÍŽĮ*@*vħ<ú‘\§‚`¸šđũœ‘kZĩēĮgvŠfU;2- $lÚy$ŒāķQžŖĻjwĨļŠ¯éīŦé)æÜE˛ˇúé6¸$…@@Įŧ*hu˙í›- É ēn$KŠîŠâh† ÅLÃŲVēõk kįši”˜ci. BwFĒĀļ9äņÜüØVš—ĢĨ]õĢË/ô˨á]°Į ûÍn ņœō=xd…ũġ°ŧ˛]]EÃĸīs¸.Ä'?)ŽOŠ/u(›L¸€ŗIuob…É&B€mO-’8ČÉãšįZæū -,íęé(ˆcēUPI$`¸fXs–%†AnÆûVŌĩŊ’($˛ûkÉöƐ(’U†3ķUr@ÎNÃÔ;.f‚îm%$ }­ĻĮŨŠV߅üÆBČÆŗtP Žõbžž :ÛIÕÜ\€vŒõĀdŨČ ž›HlKÃznĄ|ķ({Ģ™URV‘ŨŠt Ģg°ŧŸLŤé2i÷×W–{#y3G6.qÔō gŽ9Ũ÷ĒIîo­m…ŨôVڝēD˛ŧ­ļ,Šãj`ā’FG8ę8­m3НWŋŽŌTJę,c•㖐üÜ㑑ÍhIŖZęŌ[ÜÎâîŪ7Y F™7 ß7p~÷tÆ:VĩŊŧČÍæn߂Ášä8čLôĢTQEQF*žŠ'•§M&3ąw\¨Āää€ONísˇĐZO§Ãb^á2Ũ*‰ ÅąÔ€Ë‚NÕ^}qŽã ´Ŋ73ĪT+ ¸6~ldŒ{zœg͊ŽĮKM&ĘkxZ[•–âYØLWƒ,…Üpf8ü3XŠāáŽÖęZ„%Đē‚8¤ŠOŗírĘ‘ī„éōļq€3ŒæÕŽ‘u§ŪŖļ­ŠßĸŖ°–Ũ9ĀūМüÜGĄjađö‹§i1ąlĩ[ˇŲē%TcģĻ Âœ|¤sÔfíĻ™mcaoĄÅ †Ę+Q•ŽLœ`†#šá‰ã9ãž0/4.ōīWyžFš)ī#Ž@ŌD‹ $d(`HPIĪ îEeΧ”™îWUģÔÕ<ØæœÄē•äHn<Ö]–ŸĢ]]šFÖbw2:2ZÅĩYŲŨŨ 7>@,1“ĪēØü9}"¤¨°ĨĘm $į$`ü  f$×á Î }&{¨4 líyxí" ÉۈØxˆ|œd…åˇäsKšúŌk‹ ™íÚánJÎČyĄÁ$ã’î8íœ6šģa~).‹ÃötÁ °gŽyÚ[{dį8ž÷<Úüöˇ7:É!Äq[;†Ú6œ“°•Á`Oܰ×z\ rמ\/ ķ.įsĮŠĀãī|§ŠæÎ§X_ÚCq˛Į2h™‚@§Nå €v’1×ęw–I4É­nžLĄÕ#„ēē+,jāŽ„š*@z1o<%¯ęŌ\ę°Yĸéâ,Fh4Š d$|YytĮ@ŖĒđƒtØŨõáÔ.%ŗW‰™Ûa\)ŗîĮķ“ŸöEo˙žđÂÉnŅØM ÄŖEu2’q– “Á<įœ‘Pé^Đô=vhŖšģšņUē›xžx°g NÁ­‹ëšīĖ%ĸ¸…––51„vŅ‚NücŒr=6čĸŠ(ĸŠ(ĸŠ*…úÚ[Û!–0ąĢR­ŗnHī‘ÁÆ1ß8čMQėŪÚ ĻšxöĘķ*ŖīŨ€Ā‚ŧ‚1Ÿ”ŧŽFkĖüAga>ĨkwoĢZ^L~ĪkĮŲs*š Ē’Jõä üŦ-•ũˇ‡|?qöhnd°UXíž)ã&<ŽcRp†Ü9]Ų=8å.´^˙T’ī]6°Č-Údˇ(%Ųzá¸XįåR[qaŅøjüX,Ķ\Ø ›’]#¸+ ĀVU˃î–oˀ1Ôoi Ģé:tzGˆ ļÔ4ûÍÄĄ‰‹ĸŸŸ  If g=O+ÁÖúŽúÚęK¯-]ĸˇ(ŧ¤ ´+|Á˜ažö8Āāį#;YKéŖēŧÔmėÛTļ…'0įz„iã!‡<āFH¸#æ=.âúŪöŲėBĮ%ēMqŦÅžđŖ(üeĘáIÁ‰‚jũîŠŧvzüđ"\iĻ7šˇē2’ĸ#q*›7‡$†ž:eqĨĒÛë^,˛ļŠûK `gŪeō¤bĒGĖ­ÉÁĪĘp8Îxē†Žŧ3v'TSo •ŠÔ]‘’ųWnâV5ÎpNNO§—ÄĶč–Éĸē5VvJČ|‡RÄõ,XŖh$œc"ĸļĩņ„Š-’ÚŊœjfōá,j qƒ2Ų`đ­†@BŽ’×[–ōGh­äkdE"TBË!b@Ú{‚N7qøfT°š –ÔyŽ&ˆ°û‡*ũŅÔ3ęFyȓEhŽmúTŠUÄ*˜ŲåmŒ1Įˤ7â=+NŠ(ĸŠ(ĸŠ(ĸĢų‰$aŒŠQ¸ãĄÉãšæE ķOhÎjC%Ī–ĄÆC7ȤœTį?tôÎKnŧ0˛i7æ §ŠūG–Eöėxvr ( à ƒŠą=§öļ™ÖVom4Ķ œ0d… Ô@Ųzcš~Ÿs§Glˇ/%ÛÂËä Ÿ|¨6•č ‘ŋŅŽvŠĪņ‘+čĸÂæU‘e0G*B“¸”…ĀĀÆŌFá‘ÅaŲ9žØI„Ku!îŨ–&ÆK_˜°+@‰ ũŲ ­}_ÄWÚ8M“Ëlņš•ĻUÆåaÃüĀ'āļzwdW)yŽŖk4ō <ëËwQ<Ę\D˜dÜãļâÖXí`*ņsūé#h^Ú'ŠK]­ ųÁíĖm„?ÆNėc;vŊˇpßđ~úmŪ§;ĻYžIžO™rr1Œî Đáz1ΆĨŠęL˛Â×3 'kãxōN0ÁáŒnÎFsZzfޚī‡aÔŦâ'SōI͆ÚëĐg0`ÕC/ŲÃCokoæžÕŽAŧŠ`Yx îįūŽ{ ÔŌbļ–gg’[Êå‚m<‘Ôg“œœÖEėO¤hō\AŲ„HobĶôûŗŲIėšōSĩbōA 1\˜ĄRHE ĩˆė)ļsi¯i§K<‹qwš#۞@FdĀũĐÚ¤āŊķUTęmNYf˛´ŧŧ]öj[J˛;`q€@÷ČË1ŗ¤Ų=ô){°\ŲÍæÉļ',ZS!!aō‘–1VŽ´ ũKĖ[Ų  ¸íDb|ÄØ0Žp7ŲįŠąXéčˇ 4H#’ĨŽNÜŧp?~]:×SŒ5ĖrîYC”Ģ)8Æ1Ã¯^zÕ%¸ŊĶ 6­÷Ņ‚ēyP|åö1a÷ˇƒÜũŪĨ—šĨ­ŦÂÚååŒIuļÔ1 >ŦÅĮą(Ũ…kĒË5ŦO$(ˇ €8fû™äŒŒįŸĪ™ĄéoĻÍ:ŧj<×2–G`7äîų g;¸<ää -oSÄ6Ī˃׏˙]>Š(ĸŠ(ĸŠ(ĸŠ)`ô¨ŪäP˛ ːpIÆGOåQŨZ Ģg…œ€ŪŸËÜ{pxŦûÚ[ÚGj"ĄŒ`#ržø''ŽâwgšéS\hņIuosû4°ā‰@Ü ũÖäc#Û'ÔÃ6ëęw!î.]B'œw,kčĒxę}*ök%ŦvÍ3ˑޞ°.ܞ¸~Ur™,1ĪE*GYO ƒÁā €y5VķM´ŋ‡Ęē$MŦŖ#• §Ē’ <ÔĐ[Åo ÅE*Z(ĸŠ(ĸŠ*ŊíõĻ›j÷w×0[[&7Í<r@'’@úšNÕ´í^¸Ķoío`VØdļ™dPØRFpGįW3PËuÃŗG“ąH•˜ėbw8ņØÚύ.¯ml„F濞Ŧ1™\.÷c…QžŦ{ÉĨšîŪŲU§ž8•QLŒcĩ@ĪrHw&ˆŽ šiaŽhÚX°dXLō2:ŒŽ™ĸ;ËinĨĩŽâ'¸…UĨ‰\@ŲÚHęÁĮŽ -ÅĖ–ō\\Í0DĨä–F ¨ d’OŪ’æę Ky..&HĄ ŧ’0UE$’xõ.xÍ"°a‘ëŠdW0M$ąĮ4o$D X™˛9ŠsHFG\R,ŠėĘŦ C†ô8ÎāAüiÔQE#0Q’@“šŠÖęŪúÚ;›YŖžŪUą°eu=#‚*j(ĸŠ(ĸĄē…'‡kĒÁÂŋMĘC)čz qVūÔí´=&Æ+‹xĻ´ŌŌāG! -ÆČ%@X˜nĀ`ĮzŲđö¨iSŨũŠā–9n.fGI `¯1xĶ@Š’H<Ŧ ŋ xēķNš$ÔŌŪåĖĖ˛ÅŠ\c/o*áā,†1ĮČXNæƒĸę^Ą;Ë{,öĪæ&Ŋšs4˜Ā¸BA ōqœāž|-ĒÜxŠĘöúífļĩŊ7I]ĘßķôŽÁĮAą‡?ÄísÂ×ēžĩwuåmŽcąMŋk–2†––BŒ*T+u™Édņ¸ŗfŋ Ũœũēy ´`HÜŊrpO,­RkžÖŽõģÍCHŊŽÚIŦRŨYĻu*ʗX%BFųĸ#=6ąė­Ģø[_ŋ´Ôí`ŋEˇ¸ļ–ašōWTÜ.A,vŲķ āįn͌íĩSI՛ÂēŊ‘šōõąqäÜ-ä­´°>[y.U>QÎ*]LÕloõ)o\žøSíJŅūōBGĖiŒ cØ stŸëļh˛ß‚–ë ôɤÉRæW!‡Îd ‹†$&7‘‚ßøw_ÕäšūÍŋk0]¤‰†Ąkß%ŲâŧšBĖļņÆøß÷Nä$6âÄœmQˇđîžö‘˜ĩkČÎ$TWr—RĻ%‚VĮŪ!Ŗ8 Ō°nœAwáO\Zų1jĪ Ž1:ę×9Ŧĸŗt ™@'; É=tŧ;kĒ cZēÕ&ŧdß$PÆf”ĸ!šF …RÅ `ΐIÎW‡4?ž›¤MsŠÜCÛC%ÅŊÅÜĪ1¸QgvnqōČĻ,ėųŗÔåcŠaÕtûwÔ.]š“Í[ۆ†Ú ˇHw ĻT~88č7ômXŗÔ#šģēSF#Į;ėQ°ģÚNđX>|ûsƒÕŅEQEgk7īĻŲÅ2*ļû˜ ÃtũäŠūÍųÔZ6ŋo­Fæ(. ‘d1ΠŦX0HÆäq˙ĪB ɡņ‚–‚âöÚK[+„'į˜ŋyąYŲXޞŒA$ō °–īÅÖˇ Õõí"XŽ?ŗíĨ›kŠtĖ vžāŽügœES˙„×ČšvģŽ(,`y’yäeQ¸\4Ē’üP’Hێr0kn_@m´Ģ‹HĨē‹Su4x_”ÆŌ!ˆ8Ú§ŽžÕ—§øÖŲŦŦū)"¸ģtCōLļpÃs}ŌU€ąÚH ÖĻ•­IĨ]_Ia4Fî"ōAWwō¤dã’vôõ8÷8ōüIĐbŗžņšCknÁf™7Xō‚ÛXF#šų@˜ŋaĢ[jÂņläRöĶ=ŧ„Û]N ĄÁÁÁ3\æ…ãĄĨÚÜŨÚ0–䊑2(ķ$ˇ†m€ģŒ“æœz…>•,Ū9˛ģ[4Ō[Ī–æTèYQa2DŦí‡ÍPų`JāÜÔ5Ëm6îŪÖe‘Ĩ™Pp‘ĄPîÄ㠉Ķ'æāppšFšŗndŠ ā`ˆū\āÚŲÁā‘Œ†đô œË/IvņJÚ}ĖP\DBÉšŠ‚Ė¯Ėv “Ø,øoÄöž ļKƒr–ĐO2p6‰Srüš%sÎį<‚ ŖÄ=[‹XŖw•nĨXã–"ޟ3"Ą$Í"€¸ŨԐ&ĄOFŨfąĶ¯R#ŊŅ–x— Ŧ0Cî,Wv×8"ļ.u–—Ã˛j–hęņ“˜¤MĖ_kÆBž[!—‚Fpyrįņîœņ˜,ÞĸwFļŦP:ĖŽČȏ+#䃡åá˛Ë›QxÆÅnVÎd˜ŪmŠ2Ë#m”’ČÍŧÞ~Oq›g‹t_CēÕėg3Z[)i ŽF#~{YN:‚ppAéÖĄŧønãeĪĘņm<2+rpdd’@ųąœ†};Å:ĻŠ-…ŧsīKyŒ˜F!~ģ™U8é•°ĻŲivzvī˛Â#ÜLJũÕÎĐdūu~Ōá‘Ū+E•›cÉSōäÛ@SXi:db;((bĸ“ĩGĸŽƒđëUn<1ŖŨ…ûE„2ėČA ,nVۂ~čdR *ãáŊ'e˛}† -Q#ƒ)SîíÁãnH€:œØ:U‘°koļrYĸ#*ÄąbNzå‰?BƘ¨;FäöęxŒ­Į^ĩ¤i÷y’‹ĨŒ5ˇ•#4nčŒ„e˜ƒĖÆĪ™yäVŪŠŠÚčútڅëē[@ģ¤tœ¨Ī\('Š8āOąĪ<:Š#ĩäĘą$ßi2”Ȑ䂚y2†?Âc`Ø Š°Ū/Ņ–w„Ī8dš[F&ŌP<֐Æ;pFņˇpān\Ÿ˜gNÂū KO‚úÔģ[΂HŲŖd%HČ;X?XąøãB–cOt¤Ic:a‹m w Á-ōÔˇËŒņRÂeĸ—tYŽ7$aų´˜•ČPJōũFÁ—ČaŒŠ…—Ä $éË>Ĩ'ØĻß:´;$}̞ĻãōšHØ`ųûŦD–^6´¸ģÕ|Ø&‚ĘÍUãĄ—t̞7v)傁DÉԒ~c€5¯ĄjoĢiĪs$ ĨÍÅģ"Éŧf)ž,ƒ×fzwĒ÷+Ō-ŒęŌÜ3@ę’,V“HrĖȸ ¤ļYAęFhhˆŌ™.I‹ĖÄO J<¸_sâ< ũús’0AÎręž6°´Ņool•îfļŗ’ėC$rB bČ\Ą 'ČãaųS0qŊc¨Ûj)+Û;:Å+DĖce”āā7 äddpyŦŨCÅēF›Š:ęKĄvB‘vSIģ*Ė0U9Ũ?ē} gĮã›1ĮtŅÛL“ËĐ3dag.Žc×÷ĪĘ>Wį+´Ígã+ŸļNß5­e !ļf”LpNXŽ„VŽŗ¨KĻZEq¸MÄQH7U]ÂdŦX‚ÃŽ8Ī=ŽU§Ž4ymmži¤YĨ‰ŦvĶēdG Ëȁx‹*¸âĻŗņMĻŖâ4Û/ßG-¤—&|:…Û䐪*egRpxčG5ĐQEQEVūÂÛS´6×Qīˆ•ld‚He`AĀG €jĩރ§Újū8˜Ũ iZF%ŧÂĨķ“ƒŸ-°PŦ_iļڋZĩÂąkYŧčYdd*û3•#ø]‡ãY֞ŅlŨ­m =ē$p“3ąEPŠËzE×hÎkRúĘ FĘ[;•- ĘQÔ1RTõXˇ~đíôsĨΞ]ggižEÜXĖÍŅģ›™˙īŋa‡ÜxRÉ 1[ŧŅoŒĶÉ!dvÜø%ōˇĖr¸;ÜJÅĐRæâå4ËtžáēJ‹†wyĄ‰įx ŸP=*øSHXÂ%8¤IÅ*|ß{œõŨķgw4Čŧ#ĸÄ\Åm"™´Iķ‚ōšŨķs–šSĪ÷Ŋ†%ēđž—zˇK4s˙ĨHe˜Įu*%UHʰ8ڈ6Ž>QÅ_˛°ļĶ h-cōãid˜Å˛ō;;œŸVf?fEáM"éī"Štžg)[ŠBŗ €•Ũˇ†bGg8¨Ąđ^ƒoŽG„n%ČP°Ļ3ģûļņøŠ9I| \ŧËY[ĪY–@nĨà wīæ˙ĻŽGĄbF3ZļMž˜ķŊ¤;áˇĘř™ÛËI'@aPŪx{HŋÔāÔŽė –ö žTėšdÚŗؒU'đn‡t\ÜZI1t(ÆK‰[ ŦĘzˇĨÄÃūė1e|=ĻF+öŽWģÃ¤˛\Hä%QՈÆ'”c§Íė1zęÎØŅ& U$Y@Weų”‚:ž@8éYká a†#`ްÛÁmöbV(_|jsÃ}đ3œ ąmáũ:Ōų/!…ÖtFI•ČUa`œ|¨ûuõ':tQEQYzô—ąéĀØķ<ØÄŒˆ–"ę$eŠXŽN‡Ąâ…ĪŠôĪéĐYÛ]›˜l0›PŅĢ‹F`|ôQ×ŖpT‹ņÜx‚ĪTÔT™Ū;˛É›8Ÿl6ÛF9ۖķW#˛ˇ|ÖđΰuYîÔŨ™G—ņ¯”TyrnÚęÄaԔlO 3Ö°>×­Ú'ÚãˇÔn/âˇX¤ķ,ۉ7üĀ`ǐš|dĻJ‚C–ŸCž×n5Ŋ!õ5ŋT0ŪC*ųdDíē‰ßä^¨[… ‚¸"§×ĩ/Ûø‚ęßDFē1Ų-ÂÛ˘ՙ.1—9ķ"„Ī;ߨå+¯_[Å$ꡒę܋t´”ou`Í#ˆ†[ä>z )‚čxŸUŠÚ;ûiDPę6SDR YmŪ]ũJ>x\cr å˛ îx„ęã\ĶäĶRM‚Id ¸&ë‹`xčO–&>ŋ/öåžųü/áŽVčyFfHq ]ę$! žvî8?Ũí\ä7~ ´Šálí'A=ÄĶ:\@Ëöu26˛Ŗ‡fŨÎŨÃ#Ą'{\ŸÄCK°}.8Öõšœ 2Ģyl@ÁÎTžĐpAÁûĘ2Ã/HŧņEã%­ųšĘF°™­UÃ&ØÉQŽŗį(Ũ¸ dcciŠŨ^A A¨-ŽĄgŽŖ$đėâ+ŌoÆwî¨oGį$|Ŋn‘wvڜZ§–ąÜ:DÁNŲ#ÉĮŪ–Į\ŋ0Ð8m.Oi:—nö—s\ŲÁ jH `€H•O*âQģ @ĪĘä7­/|]ž§)ŽöKįhį‚9b=æŌ=ą(Įʆ`ę˙7ĘI‹ÕÃ}â>ĘÔŧš/īĻ‚8ūĖĢ$pĢŗ Aāŏģ‚Ō§@*˙ˆŽÔ\ęšmŒŅÃu}kÎģ’9fTf ’)‡ZŌT ڕ˜r @1'_ēOēf“NÔôJæõ4û›iæˇ‘c¸ō˜1 ŒŒ‘ׯæėj-SĚ&ŠØÔ5;KgŨ”yT0ŪÛT‘œāžũ0 č Wšņn“oq Ǎ#ĸ7Ųfü˛ōÅÜ7ds2žāøéâÍ@ėuk€8‰&k¸ļHÄ…!ēō88­5 ›Š-`ģ‚KˆŋÖD’É͍:ĖzŠmÆŠĻÚÎ`šžĩ†a˜Į,ĒŦ#Ë`œíāķ̓M:Ɣmä¸ūĐŗ0ÆģžO9v¨ÜW$įšX}A¨mgJYgŒę6‚Kt2Lžræ5Ė3Ā—ŸqëV šļš€Mo,RÂIÃÆá”āy‡"ŗ-R$°!ļ•ÕŅôqŖÆĐĨÜĶC˛$D”/˲5LäI;A=¸œæj ´ŋÕ'ԍåÔW2˛8ōĘíVGÁÚF ÍērrpH$€VëÁ:uᕿÍp†7–OܸMÍ%Ėw ’~üJ2pO|š‡‚,ĩM.; ģÛ׍!1 Îm倓…ÆvĖĮĻ2âx~ëIÕĩK™Ō×m˞äŽFgdiæ™AR . ÍũâKp§ë~ƒYÕSQkë›yÖ5Œļmáf\ĘsÅÎŋLs•—²_ÅxŽ"’š8Ô.ā`ÆF9˙t¸'pFTŋŖąĶã]&ęFš…íŲ>ÔÃi}”rU8;l͜Iã§Đė_MĐėŦdXÛĀ‘áfeEQ€ ˇ-¸āœgĨgˇ…!š/*âōâE]ĢƊčáA žLc<ōIÆ8æ…ĸEĄZISI7˜áŲä9$„Tõč‹ũ00?káMM.õ)%{æI,H71|Í4ˆŽ¸TyÍģ‹Ô`.‘á+´¸ŠûPš]C9‘"ĩČŒ§9Ū]ArKœ ¸@¸ÃHūXÚŲŊĩĨõäI%ŗZžâ˜Ė0B@ųp-ŖįĢãw´­ÛI2´ •Č›t!ēí #3ÆãT5ũæ˙ísY\–ęÔZÉIąYrÃ;‚’¤ ‚9%SÎm߂[TÕ/Õԉ`öZDņM™ä*—Ėų\.OBrW'‚TßŅ<oĸëjQÜI$’$€ŠáCHČÎG<åļXô,ÁWoKEQE—¯ę§FĶ āō°$?|ûæpŊq€yĀÉQ’#9Ž<üFžm?íöÚ,SĀ×Û ûjĄķÕg\ŗģK8Œõ €Nģ]bö]?DŊŊ†>[xU8ÜTŽ?'ĐÅpŋđœIĨi‚áįŠōS-âŦfā(ؗ~rv•UÁÉãî‡mĒÚ÷ž3’Á'’e´HãI˜Ž¤~åÎ0nöāœ'9ąüKiŧ˙ŗéÂY"ķYcûBŠ`°™įœ’ųŸaÂmüe5åõĨŨÜŲöąO6ô3‰LÖë8˜ye”Ą#ŒAFœ;úâ/ĩ VˆMĨØÜ(ŗ[Hf™ŧđ›‚YPđų+ļz}íÂMÆ7šž­g`ļPF%ŽIdÎÜ[rĘŋ/,wC͘[ĄČ]Ī_ ,ä7+nî8Éf qÆGNäpp"¸Û/_jw–nņĮj#ˇy¤ļ‚$- ŦŠX•ČTîĮ'Ę'ļÚÔ_ŨēË"ZŲų)40{œ3nŒûvũŠe<†P2>jĪĩø”ŌÚØK5¤ %ÃBd‚;ƒ#Å­ģ–#`ûĢ3:ūī…#{GnËÅ{.P]ęQ4¸1ÜnÄqZėK>@ –,į𧜑sÃū.ēÕõˆŦg°[q$)B^&Tˇo-Æ8`ge#Ö&õ!lx“ÄShz…ē$^rKcw2B2iŖōŠ"%ZBp –Æ֞‡Š[MûNŅŗÍ–4ulŦĒŽĘOŖ øđOSČ7Žn´ØĖNûYG˛›Å@ĖÆrąî“Ė"(Î3œL8ē_Ía §ŲīžÅ5Íå­ĒĖ6îdņŖmÜÎÂįĄÆ3Ú˛gņōÁĻMy4ÃåÛvË.Đŗlgû3Ķ(FÜŊ˛­PŊņũÔŠ¨ÚĨŦqæ¤WrP÷qĢž8ÜÖņ€Aëpx ĶëډąđĄŠEpîĐé˛N’ÄĘˆŒĘH#$ã{‡FņBęzÕŁ6œŒ"+îˁ72ā`Ãz{ņŌŅEQEWŊŊˇĶāIޜ¤m,pŠ [į‘ āwf>üÔĸDÁ#ąÅCũŧ×W6ČÍæÛmķAFP7 Œ0xôéS–ôë@u¤.Ŗ“ØÕ+bĮR25Š•Õ Ģ9Õr’ØĒĄų|m0Į<œČ"§k¸ō+BĮΕŅBœĨCsĐ}åëסCSŅERšZĘņũš¤›ņĻg†\˘‡Ë•$Úˑv`ķŪšÆøzNĐ52¸™gaĀųBŗãwüzüŋę}ūõA?ÃËÉnŌqĢڄHÚ5‰ŦI†`Íå‘ ( (íį­mŋ„ ŸKĐtûŗms”čĖ’ÚŠIÂÂņ|Š÷÷pÆ=9Ĩøwsi6’Mg4vŒĻI$ļəÂÄžcnrQ×ČFĘ}öá€q҃á÷ĘM察4‹ ąFɧėUķ`åL‡åÂ8*ģr$`6‚rÄø4p}›íZd–Íp'xĨĶ7)æ[€ yŖŠŽ'ž)<+ā‹^ûUÔļ÷+¤vđIöuFaŠ"ÁƒwA —8‚rũoáâë3j[î­ÛŗwąėwÆÍ­€'xÜo0p9õÍ7ūÛļĨöÉ5(‹5ɸ”‹fŪÍį´Ë‚d*6īeS´0G ~×ÁōŲx\i÷6hâh% öFh‡—åäˇnLyʑ‚w˜däÛü7ēĩˇdMOOyŪŨ-丗L,ė‹( Ÿ4t0†ĮŠöÉá|?n¸ŧ†æÎ)¤ķŧŗũžŦĖ`äÃô¤Aę6­ßÛëŨ9­&ÕėOīĨ™û5ˆWs9$ИĢs;pAĮzču}į_КĘõŦ~Ōˇ+4nöĻXĀIw (X”NrOn+ū .ng–öŲžĶ3M4ihČŽÄŨ’IY7gũ(sœ(coxŸÁW"ÔÅČÔmā„ÁäŧmgŊÛ1ÜF~}ãˇ €AŽ{`žđšƒO4×zrÜÍm}nŌ&›´´Ē Ę<ˆNNNííĶ$Ô|3ė¯,㞆(nhã h?ŅŌGš|F7aãáTúŦxĀÎFļģāĢ-cIŗĶcŽÎÚÚÚi&ũ/ŊĶuۋK˜ wŒĘ°K  ĸĸ:ĄķË+låĀÎųTčk:ÅôžĶõ]<5ĩÍÅʼnČBåeš5hܕ%xr  Ōé>(¸Õu+kXėĸDšÎ;ß3ĪfÄNa6“¸Ũ0Ū՝¨ßëãҧY]^1 ´ŦĒąŖŨöÁɌžČEč\œôSø‹ļú=ÂËz–ūZy„Ē‚D%ßnи1‘ΰH,|n镪C=íÄŦ‘´ãrō2Š,Ē## yÉĀ ‚Jéiž#Ŋ—PK)ė[{HMÃÉqęł*āä2…`9—īšąâ ~M/RĶ#ŒūāĖĻ÷ ¸Ŧr0‰qōīŋq bŠst“é—2Z]¨Ú˛(š"­ą”zäeH ‚8 ŠįWÅ­aĸÚŧėˇWCLKéÚI[‹l.i,KāęûŲŪøų4ûëhnlV('›oœ×+”ÍHŧÆLn\;áˇmiˇaN·ŧIkâ f’0"™HŨ6\ĒAÆĮĖ0qƒÁ‚ ąꊊJ÷"É4ā$99#ØN@Q˙-I˙€cŊsļ1ēh%IlŨî>Ô|´˜vō'š7*À6”￯ö&’‚T4dĒ‚#aõ ¤~cdB/+bĀÛˇcĶ•JĘ (õ+é-؛—1ũ ą…ų@áF9ĀĀ䞚5g6­;.#2ā†ĮĒūb’ąÜF“@ –=›Dà šä;p?*dBÂđĸKyļŗÅŧ(8*ä2įŲÔäzjYĨŗ˛ōųq*ąe؅>¤=ķS<0Čˉ0ÃnPr=éÉmwj˛Dc’ W Œ`j™}žBÚĪČČûB°2¤|?ąökbsäDI$į`ęF ü…fĮqĄéחJ&ĩļšÚßĪž2á|¨˛Xš^Ā’InįŠã5xn`vI‹‘ÆU”ÔŦŦČ;­ Á[1¯LcÛRiíc%œsiâŗNĸTx@Ú⁆āäcšĩEQE“â++ÍCKX:¤ßh‚BZV‹(’ŖēîPHÜĒËø×/‡ĪfÖ=BuRßčû°veqåJ\q&pŦ\ˇUĸZßŲčąÁ|ckĨ2`,­"…,J.⠜.NՃáÄZMÕŗjWĢv‹n°ĘÆúVå`eÚIx¤bx?ŧ<žAėčĸŠ(ĸ¨ęī}™<šqƒíjģŖŒlGfÛČĻFq×<ô4Š;{ûëŐÛ²ģ[¤fĩXc 7›—ÃĖÚ9Č#pųĒώã‹û[{ãiĨMA§ę*÷aļØ3„“% 1_\ãŒd×UĸęŅë:wÚã‚h14ĐĐT+œÖŗ/š5#x¸ĻŖ Ré÷°Į •Š3$Œ’Įea)AđFNŌAčîŸâ›mLŪĨ­•ÛMi•áĖ{˜—•ŸˇBÃŒdgãpž2+‚‹Ä^)ļŠú[ÁĻ\=ũĨŒ°[[ē´(ļfØĪ.3ûįQœtRHRĀʂ+KȏŸk˛<*ëĖđūéą ųļΧpʎH,F͝ ëI¯éPę1YÜÚÃ:$‘ ›•†Æl 69ÁČ ėĄ'ÍˌĄƒ|ŒÃŖzįƒ\ÉրU+}ÃŌ3ÉmĨi„ī;ž;xūđ3dÔH€Ÿö”Ŗ†]Üxn˜ė¯fŌ–u“ÎŽ š0Á؟˜)į$“Î2rjõ‡ötB[+mŲöŦ@|ŧ”>\cÚ¨Gᯠ™f‚=GķB,kkāŦFᎄõûՖƒEŅmAã°°iÛÜ‘y„’ß3q“’ĮžäúĶ†“Ē2_›[+ŗ" [ƒ9dVۘla‡Ąį­5|?ŖDˆąé6¨([tB°eĮa€#Ѐ{TēMƙ=‚ "kI,á$û#) 6đ0ãéPŪiÚ"%ė–Zz­ÛÆŗ™ĸLLųgī{‘Š_øG´c×I°įū“žüö˙Ļ’ßmũã—YhšVŸp÷Zm´ÎNų!Q˜œd’ëųU‹‹(.n-Ž%…[g/ 7TbĨIđ#ņĢ4QEQPŨZÃy•:nMĘØÉŠ āW3Ģxfæ][J—M‘ ´˛ˇ•\Ũ4ÉĪČÂVô ߑYGÂúąēģ–inn"i-æļˇŦņŧßP8BÁ\g8€2 ˇ†|SÂ[ Fh€ĩ„ŸP–A¸EršÃnīkCģųķ“ģkDĐ.4ß\Ūšē’9ėÖ2âųĨeŲ,…P¯Cō:ķÔ`ōř‰yŖę7^'ML"”5“™•ÍĢĮšˆ įäíQÎxŦ;/ x–ÛĘ­ÅÄk^5 ŧÂĮėlĮqĮņÅr~’Œú‡‡|Pb™4ÍNdUũåŋŸ{!`ánIPÛ ’Ą,’MÍ#ÃÚ­ŊÄŅ_Âåī<ûu™Č+5ÄԌtÛ"Šųrŧ6áēģ{híU–5Āgg<“ËÄķîĪŧ˙Lđöą§ŲčÚ<ˇw%ceG1\ÜÖŨ ŒH<Å+´´Ģû°O ̀9UęeÜx\ņÁ)ĮGEQEVūiāļ mn×v+!K͒@ųA-ŽøĀäŠÄžņ?öYŅ×P‰-Ž5 Ö&ļ’AŊ2 Ûˇ!Čy"î–?Âj;߈>Ķŧīĩß4+2ŗ4/ˇ*e Î=`œÔųgåwo__C§[yķ ēFŠ‹’ÎėT}Y€ÉĀIYÚŧ5ÛĢãoû š‰b™‹ŧI.JFŲuÎs*ŽĢâwĶ|B4É-ĄXåļ ē”\ŗ0Ž 8ÜÎîq´ņŌĸĶüqa6“åÚIž˜ē”‘Ē—ÛUfÛŨņ¸r=:ä °øģJ¸i–¸‘áDęļŌÉ$xéĪĪŠHāmÎqÍ1|iĸJ°š“lķĨēŗ[Č Hâ2Šr,&Œ×žŠÄ?Ã^(˛ņ …ģE*›ÃiÅÄ “ä™#WœĄ¸õÅCĢøÂËBÔ§ˇŋGĮH5.Ø)<„‘Ž›mäÆ <FzKylS°qģĻ}ëĶ<}ks¤Ûj—–Īkksl’ĮÉfķ<™&‘68ōŖįŽŲ×oiis5ģÉ"4),˛3ÄȋmļGŪ@R‘œÃ5V_čvŒúfŗ™pLW ĩ‚“ ŨéŒÅ 듷Œî]Ũ&AÍrÖž;Ō$}SíĮŲ^}•B8•¤ų~Vڙ#s,ŠĢՊ€,\Ķ|Qe{uœÎąŨÍ$¨‘€Ä6Į‘H’LN8rw)mMBö2ÆKš•Ėq‰¸ōqøy' ’@ÖKøËGE…šivO M ˆ‰U‘äP¸’ąHq×åĮR3wBԎ­§Ép҈Ų.Ž-öį?ęĻxŗõ;2}ë;ūIF¯uĨËh‘ÍÉąŪrxMō.ī)‘A^>ōœō*;ŋhvÖ3]$“ÍåÚIwą-¤É#ŽSŸ—åųf‹Ž1ģ@ŊaânõËí%ãtžŪL!ōÛk¨Ž''$`ensšÚĸŠ(ĸŠCŽâŗ¯tKLĖnWYáHĢq"Ģ&sŒ+×ŋ\:Īĩđf—k5Äģī$iŽZđīē|$¤š,˜#a!ŲNÜex9į;ļ6ڝ›ZŨ!xXĢ`1RX2°e ‚rĢiz&ĸžÁ B'(YŒW* N Ē8…• Ά´Ë­IõãîY{ūĶ(ØeT6€wÃn<ōjĸøÃëhmŌd€Åä•Kɔ”ÚnCįBŠä"÷WŅãvxŌę&gķĸŊ™K7˜ōdáÆ~yd?VúaÁũŲO˜Ę~Ņ.r‚ šųšĮ‘_î×9ąĸøzĪG}šÔDD-íŗs$ģ"FĐ„ÎÅČvŒ“Nžđ֓¨]ËswiįK*bŌ60DĀĀųeqũķZR“[ŧ \#.ÂUŲ[ĖA÷5́ŧ8,ZĐŲJöæ4Œ$—s>ČŅYUTŗ’ĢļG\ ƒjô~ŌãŽ5ōd&7vW’âGoœîpY›%€JT28¨lü)Ļ[.YgšãÎķšy%!Ų˛Į\ Ÿ;ü€;› –$čÛZEk`–BY\*2;üíęIÁëĶíŒV,ŪđõŌēYÎDVÉl ]ĖĒ#Ue €øá^AôvÔßđ„čb2ąÁq>aŪˇ“nËų››%Ė|é>nŧŒ•q¯¨éÖÚĨ›Z]Ąx™•ūWd`ĘÁ•ƒ)Ę ä+|  ZIĩA ŋj”¨0vÛ+ŒģŒqZšn›k¤Z‘bķL<¯!,ėYŽæ$’I'ęMW]OųͲIö¯ļ)–y$Ų.Ōš]Ėv¤ŖUX| Â’,VGl°Knáæ‘ˇG Eu9cV(Ôz`*{? iv7Âōį’]ŽĨmÄĒŠ, ĖB/'œŒõÍlŅEQEfkßl:DŅXE+Ü͈Uâe s´ËķĀKc98Įzâá˛ņĨޟĨé–Kwm ’ũ•äŒÛ’%šđėĖėÂFĮŽ:žļ!‡Įs[D“Ũ][ĘVŲ]ãŽÕ¸aoį1$OÚx Tü¸Î%´>0˛ŽTŽ)+,īB–Ęe-=ɘ€¤Ģ[ļ@$Û‡${[FņŒ6Zöt'ļŒš{…L1u–÷”ļÂπH¸öĐ×Ŧ^mím wt1´I*QՔŽ˙—ríČĪą4Ņâ9u¸-¯5;…‰7É2,QF’HąĢ04¨ņ1+Ā0Čnp/x‹IūŅÖ´YΕävĪ9™Ũ#m¨Đ˛ėųˆ'q `qëÅ`húW‹4ß éš|?h°kk{8+uļeUWœŲbyŸ7Ÿ™JãqÍ_øIâļ{‡ēԖHb„ĮlĐÛ?ÚY[2)(Ōę›sō€Ō“ũĐģ÷—KáyŦįy5KŖhŅģDk‡ÛƒōđŖ'ˇšvĶ5í-(čöģ͡û@(ˇ@f‹ ã#qXLĒ ÎÁœđD6ú/ˆgŅ,mī#Ŋ‰a6Hl!K%ˆlōŲØ1…dl(8ä`cēŠ˙˛Ŧ ģ´-´vž\&+u†)–8rĀŖĒŦ&*œƒōđ;ž°Ô,›Z—PŠâ7ģŧIĐÎbŪãėđŖ1 īGcĨcjˇö‹™ėĄeԖūâî=ADl^3nË*ŗ LiĩČSå–$qH-üg K5ŊŧŠ{$mÃļa&Ԝ$Š@\Č[ČÆāBjY-üq,×,/Žá@đ$(‹jICy ‘Žå?0ļ‘Û,x'Đi“ęû*-Ao’á­$3īXLlęPeĘįrJ„!qŋ#€­Ũ˛ŨÁå3:ŽåcĩļįcŒÜdW%â É9Đĸ[#Ē-ĨÔŌM5ÂBÄ#Ã( ƒ´ģ§ä Î+3û7Åid,ėaÔŦ´øČZÛ,ļĨá $>l{Îwm@ÁIûÄH Į›Öū2˛žCrÖiŪ81l°H^ærMŖúļ‰ŽŌ =rw­§EŽĻĩˇ}-§ŲüŧČ-— š›2$–Į–šBA8¯SEQEGW¸ŧ´ĶfžÂŌ;ģ”H$ŸÉY9äoÚØã=ąęGZįėüuiw}rŨ×N‚ĘŌč]ûæ79ō–8‚ĀíĮ\î8ÁäÕØükáųæ’Ŋ.ĘŸ"M¯¸FT)ۆ'Ī‹dã%§‹´›ÖcyÕb”D¯%ģĒ˕V܄ŽSįQģ§#ąRmiÚū™Ē,Mer%YcY…a•#p<Žã‘íNˇÔgžų ûÉųŸŋnåeUā€~oœŒvLôe&ŊÆģ–¯-•ÜlŠ!ŠD•UŸ{9mŠÛ÷~bá@Î3kJÖl5¸ ú|Æh@CŋËez+Ž7œĢ)ãÖ°õŸdjw– ĢK ķF%ēØeČŅ€ĶĐŖŒņˇ×‹7Ū6đö›#-Õã!I6+o#*ą$)@ŽLˇOŨŋ?#a[Æē2š]×Ŧ|Į‹ä°Át-”aH|Ž3ĐúĶÕ¯&°Ķ¤ē†ÕŽž<![ ü…ė[Đp2:ŒģŲŨyĶe Žõ[ib/#JĨË2„Zę 'žqÆißøōŌ="î˙NĩžémŦĨŧa<3Û+@ûC´{rTž3‘é×´Ųę2­´åmīž{ˆVÅķåM,yŨ€>o%ظVÆv“VŧCĢļ‡ĻĨč†)SíĀūlŪPA$‹lāôf\ûgĶ6ÃÆÚmÄÉt¸¸x ōÃ˞œ[–2ŗ)8Îz—ŽôÛM]BÜfĪs­Âŧ "*;˙erąČW#æØØû§‡ŒtŦ´€ĖmÕP+%´ŦåŲĨR…n \w¸ŒŲ>*Ņ„&a|†GīXŠKn ž[ ÚŲ# ‰ô›¨5 a¸g]=YîG’á”)u$aē9åíZüuŦIüWŖ[4ęĶLÆN"ĩ–Lŗ ĒwrŦŧgæųz)–ž(´žņž•dņÍg%×ÚWp_”Ã…nÖȘ†ã#šßĸŠ(ĸНyh—ļ¯o#ʨøÉŠF¸ ũå Žžĩ•„´{c!ĩļō7”?ģ‘€R“<ˁœ I#œt!ˆ ¯ø#C{7ĩKgXU[2´›‚ŦH2paļ …äĮ!đFŒe‰ž'”C´F'o4(py;T–ûŲž9|!cĶZÎI!›N†x7>LlÂF  œ ¨ĮEéÖ˛¯ôHoĻ’ãq[‚ąí,K hŲž2S#;\îę3V4ģŌė"ĩR§h?w!A$’v ' š;Fā ­wáû+ۋšæēŠ(¤Ããå‰ŲĶ˜gcø÷âĢĪāũæāžĪ|3ŧŽëæ¸æU‘_Ą‘4ŋMÜc ‡MáģY.tō1miw-÷’Wvû‡,wäôÁ’CÜŒcn­Ũ°ģ€Åæ:|ĘÁā‚#õ‘˙ŽöŠ.>ĖĸGš{“Œ`;…MÅŽ0wdį$šsøSI’Ōî×ėûmîÚv¸4͝ûˆįœãŒ`cëo éVZ—ö„å.w;ŪNKŧŽŨzeĻ”ņũáũÕÅíGO‡S‚8n7yi4s>xÜ:Á”{VSx?KCŧLæ ‡šŒ™HÃŧépŲ‚ ¨žR˙ÂĻî“ũ ­ŨēÚÎáČhUYU'åd~˜ÉmĮ-ÍOoáģ [‡šÜËŧ†VÃIžsüS9ü}…gÁā-ŪÖKu…öËŠFķw@Ōãæ#c•'pTuPvá;Kģ†âÎ6C-o yŒU„a€žžLˆ'ĢíQEQEVž´ûmēÅįKG!h›ípÛIūëciÁ"š-oH燇­üũ^å$ZŨLžc~é`wģF #4’ÆKq’¸Ų‘kĢx“LK¸!ąšTk˧V¸´œyh×7D6åV.?ãßG äô_ÜßÃmŖŊŒz™ēŽīí/‚JÂEŽ7o)ŲF6ģlO›ûŲĮ6zæĩĻ\ÜFözŦī&ŖēbÖwSF÷g–ÍČNn ¸;FĀWø¯ÅK,ÅtŲ%ƒlMÂą8ēÚ§$ųaN9ķ°Ęâņņ&­ũ¤ņ¤obK3Kũ•:ŧ( <€Gī 2HAÁÚÛ°.oüXb7Úß Z•ēĨŗŧ*–rŠFA_´åvî<ãšõū*Õĩm>+t›Iî˜ŧȐ3ƒŽ2AÛ¸’1šNųŊOSņFĨŖę–qZŨ24räû $ŒڕĀįeŽN8ķXü ‚fš-ŌŪhnn…ŗ_mģXŖ,<φP7ŒĖ1‚O98ÆG- ^ø˛ĪJĐô÷ĩvÅwĪĢ+yPü¤„|äųųc´Ŗ,2×ņ%žŖ}âÍ.ÚĘkˆ-d˛o$XäŲ†’Ą]xI6Ŧģ[’9Ŧģ}OÄÖ°Į5ƒÛKs!ÚŌ,M)PÍąe Š3ģ8ëŠâÉu;O [ųÜ=øēŗ -Ĩ´˛p&ŒČÅ#ųļl•Ī#ŒäŌxGSē‘.-5Ŋ{ŗutŪtļ’ÃՐm æd…!†Đ VÁā×UEQEQFĨQFĨ”`zQFzR;÷ŦĪëļŪ#Ō"Ô­bš(äéā,€uR@'RŦ=UīZ˜”˜”´š@ĨĀôŖԌ1Ž)6ŒƒŽ”´QEQEQEQEQE!õĒö6zeĒÚØÚÁkũØ ŒFƒčŦŅEQEQEQEQEQEQEcęwē…”Ūb$×tH ZFw Fz&20yÎidŸRMPų—°ØV4W‹š*ŋ'#•íŽr*ĩžŠ¨QŖža‰îäļŠ2„oW ~đ ČÂrí>÷PŲ)ēIÚīĘgkw@zíâ&”$ŸŧIčxæĻŌõ ^Ånon2[ĨÁO,¯—‘ķ{€{uę*M'XļÔ¤ģŠ+ˆå’ÚRŒQÔåO*F ã÷SZ”QEQEQEQQ[Ŧë.$ŽGÜß4hPc'ž@Ā'<O´QEQE™qĸAquqqæJ†å%T  Nq‘ÄÛ<ŌOĸGqpe7 iŖ™ŅFŒåwg/ē=[3f!žûKM1ċo‘_i]ŪŧƒĶ8ã8Ī52ÚâäĘĶHā`¤m¨pA#Œķ“ÔŸlREc2#ĸ(Ŧ¨E‚@€úv¨`Ō­íĩ;­B"âk ĸo›*ÛFŽÄ8ĢôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˙Ų Pixcomp[3]: w = 241, h = 365, d = 8 comptype = 2, size = 16490, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŒķŠ(4QEQEQEQEQEQEQEã­&ŅģvqŒâ”ŒĶcbE*(T aJFũT¤f€00(ĸš ,F>\uĪzuQEQEQFFqۊ(ĸŠ(ĸ‘”0ÁqKEQEQEQEQEQEQEQEQEQEQEQEQEQEQER18˙„Úö;ŠRë[ŅŦcųŠ››G,Bŗ)áfą´s€ Î:RZxÛ_—S{r4ĢģS¸ĩVR¯ž>Rį=˛ ^šÜ@É×ēÖu¸lgžKË !Ž2ÁRÍđ\ōÆLĪ-‚SœŠÍŌ|g}wbˇWZļ–°FUfv˛t’ˆ™qžƒˇ'Ļ0MÛojw)ÛOoxŽ,Xšžcķy†P˜ ¨%†qƒ|GŠÍ›kŠis ļŽc l;ÆI=pHãëWn|EbÛ.âĩ€‚KŧŒßsøHUÜyÃčAö&ėšĩßŲ –?˛ļâ7špĶ,GqŽkë_×bE–+­%mŧŨ’M-ŗ¨ėŽeÛ8õŠģ­Ģ’ņîĨR>v°•ccŽTaɸČį8īÛ­kXˇŽY]?ɡŽ&–"ˆ˜ä¯Ÿ˜ ā¤ā`ÍgâÕbYŦ5}2H~ņÕ|Ũ­Ø’;÷įĩc[øŋY¸Ô×OXŦ–â)¸D†I2'tlJƒ• pq÷¸ĪJģũĩ¯ėf:K0l´Œ¸ÆF gęqÔuÍZĶ&’ÛQ†ėĄŌūƛŨU°‹åų~a2"ƒŧpĨāģ'—Äúū¯5œ–í'• ųŌ‡flfF?ģwB w4QEQE!čkĮŧAgähúÜŗG$ŠĻíR_-|¨‰'<’Ĩ𨠐FFÅ ŒVœöv:ŽŠâ¸D’īíjc Ŗ¨ļƒ‚àäŽNÜNpsÎhˇz~.˜mĨĶcY­îÔŊŅō“æFwĸO”}ŨŨˆāđwgšâįUûFŸ¯Û\XŖí’X"IāŠvŦŦY€ õĮPH*MWđīöĨЖ;6,᷊)dŪKj“ö{tü1cˇģÕ4­&ÎÎö7ûV—z†5F‘€iq¸ãp!G zž)b:xžŌn#Ԛ ԟŦķy—2ÆęZHÛ$s°õ°jî­$§Ã:€‚p‘o÷m-š‘dq‚¤āōņ‘‚ÃŪi„>:kûųVåžQ4ƒ„X#ų×k1Āq‚g’āj~$Ķ7ؘ”%Ând0ũÚ°ÚĀųÉĮũ4îJjÃ=†ĩc5šĩ g4™n‰ŒČ‘†`6Å?2aFpHô"­ų–Z­ƒézMâ_]ß@‘]ŨA0•aˇčāČG-ķ0TųœpĖj-ôąøäYŽå„ëYT’’@įN`s´‚—nāFۜÅģĩņ5ŊäēlVŅŧ6vĻîLnK;ÍUU܆Œ ŗ€q×°Õ¯-uVŌm´íGLhŪx§ŽâÛå$l%g*2<ŋ‘FKcvҌō3% j^|ˇˇ1iژÚ$珚EžÖL>@bŲV ČĪĘāqœŗč××wSiķŪi÷—’ZØĒČ-Ú(ŠĪ6É_+$ŠA år?žĀãĨU‰bŗpę|6Všf˛ę˙i*|¸åGhˇáļ…_1PÄqŽšSo]x5›=nęÔ¤ĐŲx~ņe‘|˛Š$ĄYcʒ7/’Äāän_\™u/Û´—mļ—sk;<zƒ*O<ˆ5v…I}¸v –%OFräžŌ5[gŧžîKƁž34‡ûB AĒŠų”îā(ųOĖ0Ev~ŊžžŠîKëi$košnōlÜųLnrN@Ī׎ĸŠ(ĸŠ(5ĪÛé: ģ† Ŧ–ne$ōČ|9,CŒIÃdqˇ= 55롈ļĐę–éęŠĻĐŲ3,¸ū>`;:p1ĀÁÜ3š7ēŠ.t9tŅ.š æ\ ¤ĖČ3ˆĘ˛ƒ‘Č,8#o&™â‹{9aŠ=;‚Ŧ&Pz`|äŧd`/Ŧx<â¸f“jVĶjû†fžöv]šÉPW œ¸#Œ`VæŸmâ ũWRļŧģĶcdųO26UÔ¯,ģ[m§p”ã’N¤Ū´i­ÕÔ,„ēæMęĪ‚2Ę{œŽ§Ís) øŌūėŨ=ΊQ'}ą˛ĖCžI#'9aÔ ¸ÁņĄ…~žĀĮ…  m˜ Ŗ‚~h k˛3;ęúO˜s‡[ŒÎß;i#ĀãŌŖƒÁúÍąiĸÖtõ甿y?˛Đ,¤`Ģ >`wûŽ2sføs­]ęPŪŪøŠŪíāĪ•Úryiœ€¤`’:Œ~kJ_x Æ#´žŌŦSpb-!‘8$ ąQ“׌ōGsUmüâ[=bâūrĖĮsÄļĪnîŦ¸ ĖäŽŨ8ãzSæđˇŠ/ŦūĘÚĨ†›U lĸŨŦŦ6åT§+ƒ’Āƒ€GƒIԉ3ßvy-œäķ“ÎOZĐŦˇĩ—NːNĪ ÍžHĻ# Éb­ŒŒÎFh¨ē×ļ¨Ąšâ ¤d1qÎœ÷PF2ķFŖÔ°wnˆ§Œ!8Ü\ŸJaÔ,Ãųkƒ÷|ÁŸĘ¤[ˆŠ‰‘Á†A§‡SŒĪNiAF) ˆ:ēŽÜšRĀwĨĸŠ(ĸŠ(ĸŠ(ĸ›#*#;A$žÂ°´ å}6×ti˛Ŗ=Āå|\nĮՙ^ ˇƒÄwihĸ ē’å>ÍRšl,Ĩ0;‘…lŸoÖ°üIŠĻĩŦEVI‰Ž@ëŧ*`‚ÍŒāc΍܃čZX–ū·yF؏įÛíĀ#ÔuâŦKáí9%Btø•$ųŨ~ĘŽęŖ¨Ę—#ąĀ=ĀËMŌĸšA Ĩ´Ō; m$ļ37”ãč?%ŌlŦ˧NĩbĄō•ZB9Q€ĮŖ uXš=ŧˆ‹>•>æŌöŗļÎVQčŲ=øĪNdˇĐtĢš–5˛ą–5˛ļpÆÄĀyīž2_CĖVz>æųŦôļL4q!ˇL1lmn62OįßĨ"øsNXæšm.ŨãAž'}ŖũėŠú ļqНjϝáũ6 īP´†K[fē†K)X čŦã' uÁč0zt8õûrÆÚ"˙x -õÅKEQEQEQMuVRŦAî+ĪcˇļĩՅ’ęÕ¤‰ĸ]‘ē[‰71ãģbĀ‚B÷–q´q$æi8Üũ2p;t†*ÅÉCÛn7`ã##4ÅšMÁ[*ųÆÖÉëĮ¯á\æ­"\\\MŲ”BĄeœÅv3n Ķ€׌žzb¨‹w:¤>Z˛ĻōĖĘ@‚ļNž’}“Č'lŒâWmĻV*ę\|܀yāgčj›Û<–ØZYd*…X’ĮpÚÁąÁÜzō0sŠęôkii0>cÆģ÷ŨÉ#¯'Ôûb´đ+čú~ĨöāaÛēfj`6v€ÛH9;sģŽI<„˙ią3[+ĸĖ„j ›™#l¨åŽč9Q…šˇit’Ŗm\A‚ĒÅ$’í¸ā¯ķ“ÉĀ ~S˙ÆŗæŦQZKk*‡’_žJcîŽrŲįLžÛŊpÅ-QL•]ĸq*HT…f]ĀȌlŠ}QEQYģcÕŪd•K8ÜĮ´°e•†C†+ƒÜ7RßéŅŪÛ,[š&B6Ší#§B8öū]k.ÃN›F9–îIP†4@víÆAāú`įŒ Ä‘ž Ā ÄgԊI0ÁĨĒw÷š}´KũŖ=´QšÚŋhuUcč3Á5^áŌHc–ÜŦ–ųW~qČÁuéīYQĮöö÷ü•]Ę?”q÷ļ>n˙‰Î:ŦĘ΋í”Čr$’N:ņ×=~q.›b’]Ė×1+4x1#F¨%šžs‘œž:u5šĐ*Ēǁ€` u4ŠO`+ž€j÷“ŨÅå,‘M‘†^vîÚ åË7PęMGw'•fv$ĐĻåHŲ‰)“0#tÚ@čk U‘įđŪ¤Z×É0ÛmrØ9 FæÆ8ãv{đ0F{@ éKEQEQERČđŨÁ—EˇF#” +dîĐä÷õąY×ļæ[˜f'1ŽJ1I8 ‘ę6ū´Û9™‘cËŊŨŒƒ’9#ŒņīúÖfąâˆ4kąÃžã9v‘öE9?;āã€Ä vČĪæëZ—‰í§š¸…íüŠ& J[1>HG%I-Ôá‡jģ§ÛK§#ß[<+2™ĄdË6ėtķļļzNâ>đʗzeĄÔ4Ûš'‚I2ųâ-œn*€Ã<åˆöޟEÔmĩIĻ‚hÕo-Č&6B2¤pˑ’?—Fļ…ēnÎĐlŸ¯æ}iëŠuûŅ,Š O,ĩK1ô¸ rîyí^kÖhcšg†ÜG¸˛ƒ¸ŖûĄŠŸlŒ gxsÄVڍĩ΍¨Ü ´ˇ„]Įq+ī/ųh nz§œ‚4õ”›U˛ŽÕLĢw 2ą&häåĀáĀÆÖÜI$` d+’M@iĪ{yļ÷Ģ(š=>æHņ$,§[k ĩ@@?/\k\ Õ<¨_Oh^ͤUšbŲloČXgœķĀ›EQEQEQEg˙f”ēi"‘V)ŧ‰´‚XãC:wōyÁÅJ ŅˆĀeíÎ1@1ëĐûešy@b8gk)=ŊøvūTI‡ÚŊŠķÔv'ˇō:zW’Ē\¯ŽĩwžŽâEûd€1uō܍†EŨ÷ Ŧ]ü tظč-Ŧ57)5ЉdhW÷ō˛¸8|DTq‡‡^øČۋƒLžmF›`\YDÃäˇp@ģ“Čū ŲÉ[ Öhį°šßGn†[GtS*Āoã#'ģrČî- ņŽ‘} ¸[Č~ÎJ…&EÁÁ?ÄdA“ËÎŒ÷ĩŗ$ Î …'¯ĶˇŋAY—ÚåŠXČņKÃn1ų*ãs7(žq\ˇņŦ×ŲÅ8ģ!€ą–8Ö2Wƒ˜Č'ũâFX‚AŽÁ°ËĨČ÷ĸäŦ°.î4Ĩ‡åmĒŦ™ˇ?+ dv*3~Âö%ktžÕ VļŽË+p^S)lœ•ŋˆ‚ISÉP2Ģ7š¸2Mļ8ô$Ų,(ˇėCāōPčį#ļN—ĒŊŎšm=Ô­ Úŋ™0ĮĩąŠ˜ö1dõUÜvƒĐ÷J(ĸŠ(ĸŠ(ĸŠ(¨Ĩe$EæwhĪ'׏w|°Ém ‘M'œūP•6⤰c'¯L˟_[›kY 2ÄŌ×hęAÆ:(ę}@Æ=~Q-ΑĨk­į^DeyAxY‘Ęg Ÿ-˛W# qģ‘éÃx›AÖī8čįŊvˇÍũŦé×$Čé ¤g(ÉČĀ8ÁÛģ'œž{Vv­yq>ˇĻ-œnÅ.c¸‘œäDZpÁd+å†Ü’¸lX–há…æ‘ÕcE,ĖĮԓé\˙ˆÍüÛ5ŦŨÆėÁŖ@s I# Îėų˜.Hë\pŊÔ'¸t“-ËÄĶ—”•Bėķ)nÎÕ‚ĖMGŦišdS˙c$wĶI2˛<ŅJ ŦfFVMß{ žøl(Žb SL´Ô ˜ gpŠmöŗc8n cķp[$MRē†éŅåHŦmí]€Q•V'īõ (`œãƒÔëĘ5]"Ú5šŋķ•-ļ˜%HŲ`XķI•MÁvėģ/'[Aļ°5m™söfųŽŦûH+ÃS…ĮáĮŋŅEQEQEQT5y/"ŗßd ‘XUMĖËč¯O^õËÕā'쎏˜#Ē*ē†-ŧëĀ^¸=¸įą¨ė$ŧ{hîn#ēY Ũ2ÛĖ¤å“ƒķē2zŸw\ÛŪ2æęįLOˇ]Ŗ¤Ã~į7ģšúöPāâŸáû}RŨä’ęÎePĀGŗoČŽ,ųʓ€ŧņÆq~M6âôOËJ,eV‰bŪ˙222Ã}î™ėFy§ˆ<3ŠxZåoRt– ܘ‹Ž[¯”ãˆįŒtĻZ[ w@¤ę—AÕ •\Ÿ—w ~Āvõ¤ÔŽîĩ]XKfŌÉ™¤@1æŽwŠ<ʀ€OaŋŸBĶ|I¤ëļÖöä˛_˛Km4l˛į$ ’9‘ÚŦŨE~Ķ*M,ņÚš*žL™Ąį•Ã7pA7û**Ļģy FnZXläW\܆l¨‚ATp9Ëí€ÍsúŸü#—+C%ŧ&ŪxInZF#|ŋ'$•ätÛ7uÎĄ$ˇ˛›Q˜Q8ÎHÜ@ā‘„-pUHĢm¨ß6ŦL6RŸ8Ŗ•Ŗ-ĩ8 žVBō¨=˛ €¸ÛNž™ĩQm¤XÄ "˜›÷ždĨąą˜ۜäœAÆ,ĸÔb{Ų&ƒ|QXHR+‹‚…QyØĄ>ëc ÷ŗČ5īôQEQEQEV=Æš7e5œí#0X@N&Î2l)#’@'åö SmZæ-A…”i{Qcš¸ģēåO˜&0 㨠‘ÅGĸk-Šę—PIt“Ā0´q„áŲ_ IbŖ1ŒôÉ''ŒE7ˆ”Élžh¸ļÜ+NATY¸Č9ÆYm{¨ZMqj&iä’äbX`¨Č=g‡ŧ;-´ķ_Ī33Ë hųŨģƒ×Ž8Á#Ĩt‚Ū[4a§ĩÉ'-ąTp p g­gMĻ}ēXeŋ˛ <;™náwŲ×ĻĐĀāœp¤’8׆ôϚ‰/áŽ%Ė‘ŠC1Ī'8“ˇåéŊĀ5?ö’\ĩŊŒr˛Į¸Ŧ2ä@™Ā Ģ ¸ŗ…œ zéÚéÖZt¯­ĒāŖUŒ7Šāõä’bGɀ1Kcc+mŅí`T.Áø# č°#?(éÅVņxvđ^ŗö˜ŖĀ´rĸ6'o¯ôãĩtôQEQEQEU=Lʖ24W6öÄ ´ˇīE^ų—ļ{ûöŽváuNÆÉôÛĻ´–XĘ8‹æŠ2Žģ†zg*P:r@š‹  đõŖéÖ RĘ..¯-dD‘wF$T)M‡€ ŧŲ&}CRšyäžēļL63î#iÆė0Ã8#p8ÉÛrã^†ĮRM: vŲ—ŽSäĸ9Ãc!žFĪ]Üdü¤–9!-ļ¨j‘F…Ŧmím§„Īä"â_,üčÁPv„*GuęĩŅŨŧI,2=ŧąųr6Đ‚8Ī\ôĀąīΈęžēđöĸļsH¸Rf,ÂCķaÆ7ÎpxëÖxnú!C{įÛų{ĀČ9–įqÉ“ÉbL›qî •ášō˜Øų†ÖÚ #ásĪ^2z‚jĘĸIƒōnŽC ā€IĪLŠN˛LáC+@Á¤2„ČĀU=I9ČũjŖh6v m:2ą2Ÿ-”ļNsËtöÆâšįMšVHVæĸ'Œ8#î¨Ī<“ÁflœŒî6wQjvΧÎĢo&s„ųԜ’<6O9ĶÚę×ĸß&deĒČ 6rp3œä+~úq‡â¨á Õgˇiã&ŲāŨ”HQÃwČĀaØđyÖŅFyĸŠ(ĸŠ(ĸŠ*ĢX/-Ú ˜cš&꒠e8äpxŦ)ü:ķJÛ.ŽŅR möĸ­Ī,ųK`žyØ8Ž?†´I-ü8SNšŪ8¯ųgTeh×@\’ÆIŨÎI$r’xYaļ6’^\ĩ˜ų*¨î[žƒ ÷ŊOP9b öú™h˛ŊĖW×i!ΐŅ<‹‚ˁepcžû–0ŲiNļ6/‘ÚgŽ0~i8Šāņێ*eMRCšd‚Ū,#h˸į‚Nė€8÷<šķ¯‰’\M¯é6?d–ę!Y7Ųæ´ÍĩP7UlĮ‘ëÎxÍSđč}+Ä÷ÚVˇjck¯‘%wm›Ô‚6–āgku$sØWZ..l5Wŗ¸O"˜ČÚeŨ‚…YŗÁc‚ĮĶ“œVĄŧX{ˆÂŗ’ņî,īV Į’Ŧ7`Ž˜ĪUŗģ"Č V€WøNŌyŨ€G#ƒ‘Ī"ĢĨĖ.HeĘCæ?nÎNsŅ‹d푡˛šŽ=˛)ŨåŠ%öįn: ÷Ā<€¤‚q¤—ėW“Ŋ›ÅįH†(Ąt¸T`ņ€ œHã¨ä䞙ęĄû#D˛Ú*ææ@w.Č\ŽÜ&?PņŒBoępČCoژāY@#Ü~uŌQEQEQEQE@ąĪŊ÷Ę ō¸#ęyÍsú…ŧ+iæÂ÷;U•W*ėpÄq“Œū=ģÖŖK $yhąį  ’zįĮˇoÎŊöĨ§iPBúŒ°ÁĶĒDd´Ŧr8ĮŪëŸÄÕ;]OQYõueH§ n­ D@Ā ÷€ķnÎ b2éiw+4ģˇpÁc K'Ų8ųG'{|ĮîöÆt†ŋ'—úČQ—å;ã—vU™šā–Ū@ÎÎFHČØ°’CĨ%Ĩ„1Ë.ą„ûRã$…Ž‘’䟜p9" "ĩtūΚ&1pÜ| ųcĘÂķ°Œ‘Āžx5¯cp÷ēŒßhoôT…™Ž[,8R%ļāāķoQąķívCdÜĶ ĒÂDlD6ž¸9ĀÆ0ŊøÎf‘ŦĮmŦÅ—|3Čī0Ų-ĨÚÉМKŽ3Č`y + ņ¯üŠ—.ė´CnHÎdQÔr oŅEQEQIžqKEPk’Ņĸ1xsM–[Ģ„1Ģ…F|Ö ˆÆHöŠš Äeah6O˜C1aÎ;į1ŽÕbâh䷝'uX؂­vŖ#9Fzg“Åy¤Z´zä ząÎ­#8Ž5™%Ū°mˆÍœíe8û œ× Û˛éË3Ė“ÜÁ UAčÃ<Ū˙ŽkZkÅ´Œģ Š Č~Eįzœņ~qYļ‡.ЧąV_í1*J˙z>Ae‡PxÉ¯-y.dÖnm§$Ã&.ų ¸*įw čŧ…Sšē-c `,˜*Jž$<.d€Ek*ŊÖ§ “J†đZą'f‘€i,I#‘Īšã€ ëč×Ęm˙‰Ĩ ĨwņüG+É'ŠČĢ0@¤€+$…ÂˇĶšĮ9ëųĶPō5ĩÄjë(dh×sü¸ĪNTļJäįą8á~!ļš˛ņÆŠ ŖBŗĖ$.vųĪįIšNGŨëč:vĢ.¯akũļYæ™Hd,žky',ė@9-¸åānRS7Ízļ… aįĘ@Uō­TŒG–å@cËÎ7ÄZDcâ™ 2 B”A!ųüä_›ddáZŲž'—Q˛ÔŦĄyVbJˆ˛ēļå‰e7ãûŊ›Yņ-œcėč’~íđH]°˛ƒÆs´đ„܃€yū Cqy¤yöžjŲI$ōų'qß:”ųËb7aœ÷āvØŧo°Įˆ#ŠÎč¯ÉDäe HQ˛iį =ķ‘ßæŠ(ĸŠ(ĸŠ(ĸŠ)’įË8ÆqÜdW=¤ĀcđŊ•ŊÛ%Ä )QHO˞@'#§lW>ļ°č -ö…`´ÆPę9;N0FöÃn8ŒŒ1NÃVšˇģK}Jõ ÔnûC IX°ce/Ar8Îė¯OgŠ[[gėV*“—¸iA%đ02NY§ ÆMY’ęæB‘Īqn63}­Š0ūíTdāžF9Ī8=3m‘eTXŖ1}á™W#ŗ ƒ“īīô3ƒ$DŒrF09öũOå~3đí퇉^âÖ(å°Õ‰NíĸSŸ”ã dŗĮ 8ãķÅ4n’éM:Kį|ˆrČîŋ.́ĩÎ1 “Įa] đŧ—š-žĻŅŠîÚØ—ļaTŠ\mĪM„āuÎzØsÅ5å´z–&ŒíĘēG‡)ķÎæ8ČōöĒ÷fĀ8ÁĐĶnÕüšd‚Ũ<—hž96œ¤ōĀŲ+šHį3Æzė›ë[)ˇEg1•QÚÖĮs<ˆsĪ pTdnáŽMs>˜øwWšĶõI9랭FĖf_-q.AEÃPxi÷kŅdFÕŦÃŨA2¤KåÃ4§ųģŠ9*2Ŗũ0ÍÆÖÁĶŅ&–ŲE„û¤!ÛˑQČQũÖf'-Ãs’8Æs‚včĸŠ(ĸŠ(ĸŠ(ĻąĀŦ/ Iö iūnž.îp;ķéũk;ʼnxmĸ0Ą>HŲvœHäsģȏŧq‚žhîô—ušF–uFbē.ų%ī0Ũ’ÛyX“ÎėTßÚįIŽę xíî!ŽhV%o0 íÎåīc'*9Îj֟â(.eģœM9hĖ"\ŨŦK+0näœũØĀLŠÁaĪ"ģ=+Ykû).!•ĻE]ČŅŽRŖ ’Jį ōÍÆpFsWtÛĶ%ąO˛ų_…ˆ}ĐGRJ¨üŗõ=jŸ‹á˛Ô|%ŦÛÉ*Črgc Ü ĮL2Œ×–/žtšŗwå] ûjە@]Á(WĖĀģvî3“ž3^‰ā›­ņę| /ŲíŨ^7aŸž[!NĐĸMÜ˙­>•ētm/t­&‘b22I–oRĎāu$“ŪšŸø.ĮRˇYt™~Į¨6b\RlsĩŗÁ*{Ķžĩ×/#°ēŅõûi`žh”ÉŊ|ĩ(6ĢL9Ë0Á8Č Ûh^3üIg¨Iwkt¨ĶŨF‹æ!Ũ{nÎ|š6ĻrĘĀpTŒŒâ÷„üTQÍHÖ€”ŒĨ~`IÆĖ3Đ`rÛ¸ímfKģˆĘ ?rÉą™Ũķ嗐āg  ´|ģ9č6,oî#ŗj*Ģ.ėG(á€@ÉÆ[œtÚNp5hĸŠ(ĸŠ(ĸŠ)¯÷z⚯ ŧÖū °ņ,­å’fN ØœĀւũ¤[p!—‚Ĩ ܯlr@˙ëÖ>ŠŖEŦ„“ė7q° ŠǘG_”äcpyÉāmā5ÍPĐ4Ø/"2]Į,†3kp…|Ŗ’ ķNwTí Ũ‡3Ës=ĻĮą›¸Õ ¸šUbÃĖwī“*™Ú¤’œä¸ÁާNĶtëÍ<\jnÂ8E„–DKqš@ ?(Î@9^ĘWAŊ¤÷Í1 ŌI cƒ…āP@Ā$g#å<JÆņ.ĸÎĢĨBV[8ãc2ˇË€3å6ܲäNÂã Šb8Híĩ/komfÉ Bu -ģ/ĘUv‡Ü2Ä¨ ps€[čšU¤B­ŽœŠúbĸ¤ĨĮÎō€wH˙.\¨ôôԗ¤[Ŋ荒8ĀtŨĢĘOlqqŽš$ö\֗™‘-Įš\Úf!WŋŲ<ööŽ_ÆvQjē<š„EƘ>ŅąŋšWædp1ÛFzČŽKū5M:Ūņ!û[Ŧ“˜ "5‘AĪËÎå ŌČ­ƒÆÕáG5ˆžßiŗEŠh3$îō’Ņ–4ÜÄ2šãiįËV~™âĶbĄæ’î_1¤SųTČv8 2Iuë˙<Ôã#ļĶŧGoqo“¨Šx‡”U3OœShÉ*܆'iRščãÕ˛ C,­ugōƒųåO yËaJ˙´xÆâÜoÅsę!$nS‘H#ę#ę*Z(ĸŠ(ĸŠ(ĻšÂ“´ą‡S\׆äxGG3N#Ė Į `9?Lzˇp%¸FÁÃcŨ#zqœdsŸČ eŦ˛ËķāŽ2̀°ôöôúqך†ņĄōn턖­$‘Ėã*y$¯9˙ëô¯>’ÛOƒR{m: ųr3ĪXŠ Wī ‚`~dÎM­\ž°¸‹ûFŲãM:Ų#‚Ū9lc‚ŽÖ.Õpmšú­{‹OYŧ˛šMËæ,ژ*dۅņ–8~îūG4Ŧ#¸eGļŌ¯#.–ÄJŖŒXšl!ÜLã9ÁÚ@äÖ×†ŽŸÃĐŨÁgkpfžS7Ųž(›Ėųœė#gĘœ`Ž&ē%×t‹2 iŒļĐC|‰!U Cz¨SŒū”睉4›xãhõ ZhdÃDKĒšČCŋ(q˜ãŒ}Čē'ŗĶĄšŋ:ŦV6fĪÜÚ:“ōāā å‰F3nu„ûĨnaÔ˛“o›Œšķ[s>pžbu9āõÆĸ ģ=$܆‰­d•á†'Ė2•*š\pňû¤ wöēĖž!đŲ|¤I‚$r”cē}ŖŖ6ÕØX/=Ô0Æ z čzÍŧV熋3[ÆM‚@Y8'ŗÜsõŽ"÷Ā~ Ҥkī ŨÃĢ[HË2´ŦÁ$‡Îîį?7ĒF&›âX­/ĻļÖ"h÷$ņļˆãČ ÆÄlÉ^I`Næ-ĘîŽŋÃÚôēVą€cŗ‘ØJą"ėY“;Tî@Žė°S&áōžĄEQEQEŲd!qœqšį<#%´ūĶnpĨ~Î#ßĮŨRGåÅnË|Įm™āļėUu†ÖHķD<íįqöäÕ;˜TÛĘd"p¸ccĮ|œ û};U¨­ŦQˇ¤ˆØëķŒžåRÜiö×p<2Ä R!G*ÅK/÷r9Į'ŠÂēđ>—;ĖO™ EUYB‘ˇ8ÜįÎ0ĒšhãÔ4˜"‚Ū[i-ĸuSˇ%UœœĄcüœy¨Zjl–„jaãG%A™1e9'#o–\…!x<9ŨWSˇ˜YeA…[…bUļĢ($8%9ËeX:]ŗŪaž‹|>k˸R9ų ˆÄŗdrNTüā.3Å{!§´ģōīįKIĄ\ŧ B‚7ūė`g;˜ö8*2Ĩ6–Šmqus{}5Üsų–đ‚w™0åÚ`NĐ cŒ`Ēį Õ͎œē\7Yĸîf>T‚`Fr_pB/e†Fzĩš4ŋ[‰î`•ŲØ)ķĸ•œČ@ûÎģ‚Œ„äādžšâGhŋ´tø¤‰¤*\Ū Tgí ķĪ&hHۀA] ÷į"ŗ|cá]/^Ō€ŸY…u-­%Œ÷3DŦˌyd¨\Ļrsķ`ž>Sįúeá6ōØ\,Šqnį´1ƒDårŦĘ0sķr#Ū<=x÷úŦŌģŧÛJHōF#fe%X•w%IÅjQEQEQHy•ÄxYüĪéŗFÛm#ą•gŒƒÔ˛œû€€ūŊkŲës ĖĻUŽ3š96cVÉL†8ÎÕĶ'Ū™ĨíKčVYįÖÛ9WũÖA˜ā…$īS÷r=jŨϤˇúąŠ2ë1îØQ”ŗÕ˛01Æs–l€RŽIwjPÚ:°i#i8;p˙ĮĒv¸ÎXvČK ƒåą_Åą@ŠxˆP‘&rvü VN¯clú]Ã$by ƒ1`2pĄŪÃ6Ķ9æđuādøũ Žö? č—úT)d*t•$ŪęëÆwr¤ä|ŨA9'&øOk9`77E¤<„Ļ÷Į÷›fNz^ų¨Ī‚üš%úÅÜP3#,>\L̎Ļrŋ7nOÍęMfęVZ• ī}Bę'’_#,Ē&WęōaWh`yČä`b˛™Ž"†Đ_6§Ú.ŦÁ”• Á[ˇi.ŲÉĒ’Ū6‹y4ZŽŠ S"FggÚūa;ōU˛ųĀ$•Ā'ƒZļZūŒe•úIĻ|ß1,š]ŦømĮäœō6‘÷š‹Ųiž$ŧšŌuX’"˙ōFr 1*~PW, •HČlŠŧūΚōÆĨšŪ~ĖŋŊ˜žWo–|´îÆJđrN7W?ã#ėŪ3Ä/nˇđ+0ƒĘ“…ų3‘ģlœäKøqs%ׅ’FRą ˆ í :d’y$“Œ]}QEQEŲ?Õˇ$qÔW™xjú8|/]KäÁ<1ǍūŠÜŽšĪ;ršhYę_iS]NžY¸ŠŨ쨯Ė@*s•\‹×œ–8&ĩīŅ Ōmž}åæ`W Pš!x ô#9ÚŽ„TŅ_Zčö+ ŧržL¤X(b™ÜÄķ€_>Ŧ9Ēņj——vâŌécŽKļ@Y˛ŧy{rņš@=7ÖæŪãķ'T yĮc1÷ūöšF‘IęL„~Xš_É5Ŗi֐I-ÜØÛÄžO˜1ĐsĐôŽcO†}cR[5Ĩ–eÍĩût“¨Œ$Āéƒ× {×Ĩ‡ŠÂÕDÎ6wIŗ 8$ŗ`aGSž•Œ5 j2°c§I$oĩKI Ũē1#9īŽ¸ĻęÚˇö|kl‹ÍŗvԐF8äüë°‘œ‘îyĮũŗmöËÛ{ÆŗšÔ.äV’Ö+ctîx9ŖP[<ôcO‚ X Ú\G$’ä,w¨T$`ŽČ c*pƒ’ņÍÜʖÖQ<ĖÃ/ ‚ā \ƒÁė äíĘÕMĖĐCä-Är[°éķEģ8ÁŽƒĐ|¸éŪâÆácģ-ƒī•$x“pÁļōÃaąīČ9æ:5ė'ÄĶ0–xäuœĖČ[1 ÆĘy r2RA>!Ü˙kxšÂÎØÜĮVĪ!’XÚ6Œ“ģqŪģļŽÍäcĸ1šôĪ XĮcŖ*DÁŖ-„ ‚6/Ȁœ€Ē õšF9ÍQEQERÕî–ËFŊēbBÃo$„Žŋ*“ũ+Č!ļŋÔt­"Ė,N`ŗŪš$ŽAuGŲü;#9É{œŗKÖ¯4;{[Y˜HĖ(ÆR?tɆ$ča#kĪ’ÆöôKr`åōRҞFˆsˌ ŦŨ7]]” r! ‘7‘ÄFŌ‰æ;üž8 Āč-dY V.Ž,ƒĀíĮ¯LûĶfId•Y.Y1ŸÜ‚ 7ԐO¯LT7׉ojīpVæpräåH׏­q’ßÛyŅáíÚ%Ëų°ß$*ÄNī´n8=ņZ+sŋ“§ nÄØũō\K*¯8Áf$.O+c†pG;vĨäžĮH,ķa–öÕŽŲ"ĖzōXūtštŸaY œ›?aķ’6ųC Ŧƒ8žˇ ÜķZ7_]ųiiõ”›r!"@Ę0}nPg§8ęß\gޟŠĀ ¯Ŧę¯lĒYâhf!°9épëÎsČŽoīä‹sHČB ˙!  ĮČ<āōG§ž<ˆ†ų–đŲG,ĨJˇŸ+´Ŧ8 9lŒŽĮ<ôÎd‚4xd†ÎÚ RidKäTÎBļã&ŪXŠåãuh_“gÆŖĒ[Ĩ´f"ĶÍc#ĢN1ÆåPŦG_âÆ~ņÜEex>;¯u™ŦžÕ` åîS$’n/”]s‚ģF~^ʼnSMŌŽ5­ręęę(%–v‘5ƒ))VŲX3´a'xƒ^ Ŗ`ė)ÔQEQEU{ëh¯ln-&ÅžĶ/Ūę9.#ÚI2Û²ž@mûīۜūpęÖčį[íYŪPĨEŧ7‘ôķ÷”\î>ãˇįŒŲĨĶ~Īope{… ģjŦ΃ˇ%cY˜ņŽ€Ÿüv¯[M‚6eJLÜÅšO*i°@Į×ī{âĖrØHŌą˛šš!AOėĀ䃒˜ål gëÖ¯ÅĄéķĖĮū X÷)NÔutõÅl[čļbiVVĶ‘ĐÆ›vŒāXsÉÁīƒë›âÍ>ŌĮÃ÷—s=ģKj˜u†Ú$ų¤ųĶ´°ęŧįœuā×;iáíBīZ‚xĩkIåpfŠ{(вäá™ŽĀ ÃŒ1rŲ“¸CŽØÛÚKeĻĖō]H ũ­Ą/Ūc•ščĄA$žŦfĶ´û´v–“ÉcáČŗ¸pŋžc•*„Œģ•;C㠂FO¨čËbÚdPiŦâÎĸ”dÁ^ŧ ô>āįœãVŠ(ĸŠ(ĸ€Ã= -֍a”yĮz‚ęĖ]˛o–QũčÕ°§Ū#œqĶ89äSE pÆąÅĸ( ĒŖĐjvĐ{tĒķļŲâ9AÃd‘–#Ž}pœäDa,ŌË{n?…å9 8î@ö㚎ÚkäGKá‘#ķ7Ázđ cĪĀëP6Ŗ,ąKy%ûÆā´ŠFšŠæŪ Ā)Û ŸŠ ‡ū ö­´Đ$o.Ō]6僜,vöîāîĀĀH<ķŸzęt‹D´‘…ŗąpRX^ÕcķŽ iž8ÎëÖ´om>ŨjbKyJ|’Ž7Dx#އ89žEsZ”?Ų­5Õė vcA1§ÚØ’æcå†$í ŽËœrZ}Ž­Ŧ\gY˛‘Ŧ/&#Ë"ųLŪũĖYÚvņģŠÚŠö€h­~ĶC!´ŠŌ3ÚîЂ0įp98G5ŖĨK¨Š TŖ ™Ņō[*jœ€–îH5ˇEQEQEQETWųđX ģsƒō†SČ=č`m1įÚ×LĘN +)”)_ēyĮ@:/'šÍœ\ÚߍšÅ˛rTŖŪCeÎAƒŽ{vÉÁ­(­-Ží°ÅvĖ>WÜĶĮ`:ĩ;i:]¤fO°[œą€ŖœäŽ˜jĖ~tŗĢ,Ą8xĮ#>ā¨?Ž ¸8´QEQEQEQEQERb ¸ŗŽįcĖ0\Īį´J‡û.yuƒ˙OR˙ņT¤Û<ĻSæ‰ä˛ÎãŸl?ũ^”˛iPJÁš[ŧ‚OËw*õö đíRCa…yÛ'?<îŨąÜšrŲÄŗŧß9vūķąQôRp? |đÛ!XbTî;GSę}MKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE č3KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW˙Ų Pixcomp[4]: w = 241, h = 365, d = 8 comptype = 2, size = 16956, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠBqKE ´QEQE˜ĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĻKLĄdEu  22AüŸEQEQEQEQEQEQEQEQEQEQEQEGRÔŗÚÍDaÚæ$eļ…ųÉāČj/í)đq?ëŸ˙ˆ¤Ŧģr`ūîöJCŦú>}9oū&™ũ¸NqoíÉū"—ûbs‚ļĐōqĖ’ũ§Jē´ũZŪžĢ+“ųyu Õs˙,Ķūúoū&‡Õ6ūé{īn?ņĘĢ&šrŦ[Zœ˙zyūŌ4ÖÖĩ\‹;ûŨČ?öZÔq–ą°˙€ŪHö9umL°Í†Üã"ōLū^M:MWQˆlŦ܎ÆíÁ˙ŅUÖuœāéēpĮQöų2?ō/öž°[hĶôīôų?øÅÚúĪ͡MĶ›õ“˙ŒĐu]d ˙giØ˙¯ųūĐĨWÕČ;´ë#ąž“˙ŒÔƒUÔČØYséx˙üj”ę÷ʤĩ•¯qtßünšēÜîáVÚČĪÉ9?û(ŠÆĢ6ė}•=˙zøšągw4÷G,Q* RŒ’nÜ ä``ņīWhĸŠ(ĸąuđ ۈ[ Ŋs˙’ĶĶ•ąn:Ôgwˁ•=ũę=§ŒÆiȈPunüvæœBãpëė BIŨŊķĪĩ epTc#“Nll$äˇn*¸ÉŨŠpđéÉÉįĩ=”2…ũzxU,xÎ)ķ2G ž”‘ÎKœqŽũiPIÆ8ã)7m9ÎNp:TŅĻs´ãŽÃ¯ųæ—ŒzĶA<ā/§ņâ•ãGŒ–Ázį­UŽŨ “(Š䅩Âí;wsëŒUÍ?+:ވû}é?ĀVQEV6ēît|öģsׯú<ÔĨHŒ•îHúSsō:tĻÄÆ}‹’ĮĶëN9nOcۊ‡¤tĪ9§ `sŽyĄƒįž3͊ˆåԒGc‘GÍĀācŸūĩ;iŨÁČ#ŸķūMJĒÄ §QBŒĄ ŒJgĖ>l‘ĮĶ‘O—ÆqĪ$Ķv‚ØĪĘxÕ4'iŨšŽ:gåFōî~l~{Sw“ŒäņƒÖ‡$ci#ž F yĄ˛8úÔÁKS̓ŌŦéøÆ3ŗBrߖĩ(ĸŠ(ĸ˛5 ŋiŌXį+täëäJ)Į•Æ3Ķžõ,l돯˙Z‘ļ’sßŠ…väžwc?Īĩ9†9ųsčME” žM5X69ë×>´¤œdō@8į5R[€psŒsКBY›*îj6V-žI_N8Š"+ §§NjĘŠ :‘Īĩ2Äâ+āNĐíŋô9ë^Š(ĸŠ+Åŗ<ē’#´2Ä-Ŧā#,]Ęļ ã‡ëõëOŸâ.&ÁfĢģ’Ķg#§;@é×ŋ5@ü@Ö Ė‘¤vYˆŒė?Ëq˙'ŊIÄ[Ę@m,å™Î3õõĢđ˛/a~Éoŧļ Ëyôü=)ëņyf ,"= ‘ëÆqO“Į÷{v˧Æŋ휀G Ēōxū÷yXŦ⨠^wsĮcĮų$^;Ô~{h÷œ˙:‘~ ]…!Ŧá$ōîe<ôĪ^Ī"øâė˙d‹ädŒwĢCÆōœČt‰  ŪŖ§­"øöܰYôģĐJŒė ¨Ģkã8FZß!Æ[|CŒûîŠíüaĸ>Đgu˙gÉlūƒ­§ŒtˇrĒf-Ķ&2ëÍhi7pŪëwrÝĻĘے1üsVåQEV‹°<7tĖpsô<ZđĄ6͒(|9 ‚¸ÛĀĮ=OųäÔ&BŌ;ĻũŦŋ1GĮ8ĮOЧDč˛8x€#æ'ŽF{ņĮ­9Ūą€=U rsî:šiÉ`@@n9Āū”ŗ'œîņ¨XØd¨V}1͟ÖĸŽ-Ē0Ę\ŦÎ9ã˙×N1ą‰—Í Ģn ‘†ëéøu¨ã†irHXĘŠ'<õčæxöĢ\ËmåĖL(˛ppx$ū?­!„ž8ʎ2B’ŧôΧŽ3ëFV2rΏ“Ž=ũiå(‚B>PĄķĻ>Ÿũz’=éí;—€Đ}˙ĮŌĻXįbžL‹Ž?v@SëĀöõ§âEÜÅTvĮˇ'đü~´%ŦŦcNY`îę3ÜņĪãNōąXæsÉÆėp=F*ĮīQNɤSˇ*]˛>ÊŖí—6 7rRO~ŧĶ­nîŪæB@s‚c¯ôíĮķ­(ī&;Ŗh Æ2ܜŒtÉ˙95Üø=ÚKÛļt~ËĀ˙–“×[EQEãP§Â:ˆrBųG8ãé^"ˇ–7hV(ūPc.ŋ Æ?+Âņ'˜ë'˜„F ’xã¨˙=* Ŝŧ^X$šgˇ8=O^}‡ŌžÅ# <;‚eˇ’NėLã°üĪá,S툆7pF œéõöæŖË#ÑÉÚsģߟÖĸlHË6e2’2#įúzķéN9i,xf‰aĪ˙)B1‰aAÉË`ƒŸ¯éLX^$ãšlą?.6ílvΧōĢ΅Ÿ~`ĀÚË–<ƒ’xįúķží¤™vÂb$vė:āz~iā`‘Ÿ.1ĩĐ08ĀČĪAĀõūtՈąi‚šųÉMŖĮŋ°Ĩōe@YšÎŒvî9ĻÉ+ė2—9FGS‘Žųīš’Ú6¯Í!č¯úÔöņÉį‹iˇ >X9!ˆã§NŸÎĻq2ČĖģÛ–Ęœg˙>ÔŗDÆdie  ep1ß9ü;Pļír8P6_ŧā{sJģ*¤2JIķGÎ0?¯Jėü GÛõ 6áö[|ūüūÂģj(ĸŠ(Ŧ?;Gá‹ļOŧ6Æz¸+Ã%ŧ!ž7UÚüąŨ§1úãĻjŗ¸*íd99;FNäņų`Ķ•įÉ-)PĘ ‹îũ:āãŋŌ•JÆWÎH‘€;õÎrGķĄnGq€ät*:ž˙^?SM–T3˜žDŽ`Û@HōxįÖĻÜe†6fbc +($cžGaĪįŅt|ß4>˙7å`Č2z{gnjSų Y”Äėv…püÉĪž9ë‚ØŧĖŽæMĮ“pH<‘žßũjŸN†;ĸV2Ą|ÃÆ[qĮi$c˙¯éHæŅ&‘^‰‡ÜØÄúā`‚;œņšļeS1ĖÅwZAŌŧ†ä”Ąb.ꓲ';v&=˛Alō2+>{™äÂ[Ù@`žÎ*Kîd„›¨‚ÛvĒ’[CĪëWŲd@ģíBģޝ<öŠĸ€3Dˆî8VPˤāāgnãõ§Å,_ _ˇšļXc c—ī1bO|y=˙:|×hĒcˇˇĮž6õQĮž1ŌĄ7—+hĢö†…‰Ú¨@E>Ųžž”Co4×8XUTį zÉnrŋe´u á]<Ī9‡ĨuŪ•ĻÕõ9äĩŊŋåēo˙_ã]}QEV/‹Iáģ¤2ˇl]äđšp+É5 !ō$ļ%‘Ë99;z`ŠĮ3øöŦ+ûí)!ŧ{PÄS'ŋĖÜí'Ļ=*Č[=R,‚†F ,dļHôåsÎ=éōXK–-Á˜E7V9>ŸOjŒiŖÄŗŨ\+mųK@ŲĪ?Ä=yĢ'K- ¸W’0ĀõãąÎ: f•ĨÛ¤Ō#ą5+ŋrî,@$¨ëŒqŌ´žĪödR-Á=Ø ÜĖđãĪ9˙Íšt” šˇ7meÚA~ß{§Qč)ÚëɊŪÚŅüŖķGļeķsŒ äúö5Õ\xŠÃB°Ō–A,†hT,0ĻHG8ôŠ5ŗ$/s¤}§L$É,;Ąvr@ÆxČ#ŽÕSNĶílmEũõ”0\­™6ŠōPgĄĮ•ĮjēĀÔ5ģ{23lrIųNXdŒôĪ|æē¨,īl—7’°”K!+Œt9ĪaüēW+=é{ρ“dˆJĘ|­ƒÃמ¸ĪįOŽFø|×N>P3ųŸĨJĸŌ(Ī% zcúĐ/.ZY °üą Ž8=pA8éũ*}ölRG‚5¸Ā8éÎ{õŠÆĸc˛h"VUv|ŨNx듞§ŠžÂō–)"˛R5m¤a}TûãÅv~Ôĩ3"߂ŲĮ2÷<ŸOÂēę(ĸŠ(Ŧ,Oá{´›ũS˜ŅētiwãŊy ZUĩ…›Ihn< ĘL*’§,p2xíĶž*/ė­&å˛Ë%šŨģAÉsČā~]ģôŗĢbŽØ•,ČEffÛÎĪ^ÕŗN–‘ĨĨžķōĄr Žr2xė;÷÷ÍKŧņǤä•,Ož8uÁéTXŨÊ˛ĘâÚ2tƒ† Įoâäã×ŋZŊæÛHy/%hQšhžB{ 2~<ū5įÖa$—ėÎŦČq’$$㠞2Lž:՛Y_évĘa&h.š9^F0;‚ <úTW3ÜŨęÚN§nĻX՞ „;WĻ*§o_ģŸūĩ›kË"{mxßÁ'+ûÎcb?ģˇ#đË}ęŋ‡uIô™ŪĘmFxôÃ)Hî<°†#Ÿ•›rž>„āuÅiëž 7Z\údļwŌļčåˇ`Ņ´yÁ;X—3Ī× °j–zŗÜ5ŗGs¸0E#qîŒäŒŲīčkąŌ|oSV•’f8 #|žŖ“ŽĩåĨÄŗÉr Tˆša搯ÎqÆ‘ÅFÖ˜Ü`u7ŸģøĮ\˙žiņéWj¨˛omĮrŁĪ×<˙ZŊiĨęWlˇhˇrNī”ŽHã8éV›Ã:‚*¸hä•=FĐÃčxëßĨU—Oē€/jOÍŌČüsŌĨ‚xⷑžÍtgQ‘ÎŧŒ‚pį8ã§Ą=ˇ‚%ŽkÍMŖ—ĖÛÄtR7Œ_Æģ(ĸŠ(Ŧŗ§†¤t8qslAÚüˇą¯3}6æö4š ŌJƒĖ•ŲĢg• 09ã§ãš¯¨@bEÚŌ:•Ų!@ž¸$îosĀĪN•Åü—6Įė‘˜ČLI"¨ ˇ°-Āëė;zSŲ­āh#É } •ãž{úä{ ’wyFķ7’ĖwodvČ_ķųUYIŖ1ÉžŒŲķūV,Ëq‘ŪĨhôģXŪP°ˆna¸Œ1āÉįßéõްéņZ†ˆ$Ĩ› –ØēĒqôS¯Ž0*4k2ŒŒđF' ¤Hcž7(XHYUŸwg8ĮNqÆ}jõäî4‹ ŅŦŠŽĮË˷ˀ¤žAĪÔˇSë\Lĸu’ ŗô÷Į¨Įū}Ēé6–× V’Lŗ1f2 āžX’8ëČ”˙ ˆŽ /¸ŊÁ\ÄŽØÆĘ}ëĮ­gËy JāK0˜2’ŖäQ['ÔāĀ*…žĄssšn$´Ü0‚ž=0rN üÍlZX]Lâ9m¤ue‘ļp­üD€šČé“ÍjŲR[ëĶ46ņ€|˛Ą‚ĒāŧzāuÆģcXŽÖŠâ-ŗ(& Į@NsĶ įŊjAŠ[ÉlÆÔŒÃü8āztįŋ˙¯Î뚛^ųąÚĮ2Į“+ЇŽ{įų}+/í%˛÷7,d`FņĩJ¯L–ĮSŸķŠî>Č$›TÚŅ•O%>@F ×#¯˙ZģŠ(ĸŠ(ŽÆŋō+ĪĶũuŋ^Ÿë’ŧšęfĶīğg’ Yŗ,rîVŒōŋđzö­‹wšÔíÚ[IʐämQˇĶ×8Čä?k?íkėļwéq‹„,*Iä’@éĶķĒZGö…ž˛a—÷É,››Î~W<`gÛ<úWAŦip˜Ėŋ-,€–> p{ņT´mŠ’YÎ#{„_•ãRŒvũ+ QŅ^=EܰTļ–^ƒ8=N3ƒø~VítŖc#Ã:ÄG †"z¤gœķžkb!6ũÖ'ō‘‘ĶßđĻŧq4kT“ûŊŠÍõčŸŌ¤‚Ņ'B$¸F@~`K—ļ<}H5AõËK’ŪŌk—r0ĒĀm ųsĪnŨúĶtĶqiĻŧˇ—í$HŠ7¨bđžwuĪ^ÜUK•ģŧŊK;pë{:îpŒu$t—ĨSÕ´ģ‹iŨüšî`G™Ĩí LHãéÆn&ž­ko4ÉF0ێģI9\žzŊčqמĸŪŪrc|+FĨœü„î1ŸNĩq,Y­üˇšWŽNK¨Ã?#Đķ늇d,ÆĘ[c" $Ā+Ķ 6NG CīƒÍsšĨŗX]8ˇUÁ0$đĒ8īŽxūU–Ī+N§ĘPŌ# ÛŊ1žßįÔsgė7F/.ÚÂļāĩžqÆG>Õč_ ­ĻļƒRIđ%Ũu¸Ģ ĘAė:vėEw´QEQX^0E“ÃŽĐÜ[˙ãŽęĀjPIg:,† Dkĩ‡ã-‚1ééøTZ%Ë8w|ŠTd÷ĮzŨšŒ(-‡›æŪQ@ŊōüĒ,ėŌUŊhsuˇbņÆzdŠjVrīi‘OųgÁQßđŦ8­d‘&‚Ú9*rzev‚cū5Ir ŠcŲOQø¯åI ŠËlø/ŊÎ#Ž1ĪŊcɯl@֓Ã2ŒŖœ!Æ Œqžĩ˜úŨÔī$;^PųķŽ Īr˙^ŗÅŨҘ[Gq:GŧŽųãŊĪķĪ5Đhēd×ųh‰T´lÉ;€vÆÜqœuāķĐVåİI1FYŖ‚!C˜Ž@=Į ëYú-ÕũŪ¯q{¤ŗĀbhŧŌ7ņ]|k6žŌn •d1“Đ0<ã'$ãßĩR5ŦSI?ŲŽ`ģĪ–Éå2oȲũy?AžoũŒÁ4dĮ7؟q’%מ éģ œúքEE¸†IWˆf2[2ôöõ†\é“™mĪÎ0Î9lãˇĶ§ŌēTŽâŅå`@‘—žš_ūŊgßønԿɿļ_ۃĀjį=ĪZÎKH"*—[†H0Ļ{cūŋ¯cáf2]_š@š—ĄÆīķøWKEQE‰âąŒg7VŖYãgi*Ę^YC[“Īâ~§§Ŋ9Ņ†åŒ™Ī͎§JVŲo–Ī’sÆqôZY#`vr>\äʲä×mŦäXoŪDlėƒžā{OëT`›N¸žšÛuË, É]šķץú*šHnÃĮ ÛÃ!bČ 3‚į“ßžjĨôŅÛ2)@wšÛfãĀį§Ķ“Ô‚;×Ņ6Ąß“G9éČ˙?‹|Ûļ Ŧ0 ŒŠÎsÁŽĒŠ(ĸŠ+Äãv‘ƒ‚oŦđíæ*á.ö<’2ė ɜ6y=xôúÕYm›1í60T‘ĪsĶ֞2-^J‚rÎØĀ\ÃĄĢs$́W92ę3ū*[j¸…B€JīUÎyįŠąŌJģ3•ö ¯ų’dؒ6ã„1€$ąįzuŽgT֖y¤ĶÂĨļÍāFîœãŠąŽ=+š¸ķ#gL ëÛŊlxkÃ7ž wš5E†3ķĘāķėä×WuũŦníâē˜Må°:>\ q´gŸR3ŠŠq-ĩÕōYLa•Œņē “Ķ?{*ŋF=@ĢwėV2yĄfŊ•FV xNĐŊæ ƒõú ÜĐî—Uļt,ąîáË+ŽqœÔƒĮcŽ1Y:į‡nôۘî<.ÆÜ$ÖŠ… cĄãpÆ{dz‚O1¤ë:Ž:ĮĒŦĪĻ[ėŒîDf9Į#—cÛ>Ø=ŋÛŦVÉîļĢųdųaUHÜyP2=įˇ'šnŖn$žÔÉnŒîƒo“÷ļúãĐqÎF}*퇆-f2yī"–#É9Į–äu ž~´ÛËû›&–pF EfRĨČ8ķÜ˙žüŨŽŽ|'â‰..wŊŊë ėįv×wƒéŽ•ŪÍâpålNØQˆyŨAÎ o#‚2ēx#šĩáįY^íÁ Ĩv Ė7d8ĪNÕšEQEâ~4˜OOôû.íæ*ķã ŗ$[w?Ū]ęäcĶŌ§‰Žg ŅG<|f|Ą#ûË!l}AwīK7ŲŽā2ŧŽdØéėōߨD{AëHävÎ@TL$QōcûŪܞ}ęTš) BŒÂ@~ōÉĪ^8Ŧåžhm$/<—;$l 1ĀÁôūyč+—ÕgÔ.JĪ ũĖpĄˆ7מ0Oâ8æ2ÅŌ$RL8YôīčqŒ*ŽķPģŠÖ ’O+ ŒūyæŊ2Îâm7H‹OŽX’;mҎ–ØųƒĀ`w9üë?PŋK;/ĩ•–PĖÛJžģd‘Ûžįf°îî§đî”÷1ūîūôų†F˜Ôg'ŠÉ÷9äņŒEÕuÉŠÖî@ûë‡;XņĪĩ4^ōLâę4}ŌÅ(ÜrŲÜAū÷S“ß>š¯EVk‹ghFfR$PŨ؏§#ČõŸüZ5Üŗ^ÛŊΑ{E-ąˆ!†qōK0+ŽëŽ)d›Â—ąGe¨" %-c˛’ ‡ŠaĀįœņĀî+vÛIĶu+īļųˇQIpÍĄ]Ēä āáFF{ ƒŠÚ’ÚÕbUē•8äo gŽĩțŽŦ_̐d đsŽ>ųĒúž–ēŜ°LX¤ŒĨYBī^AÉ˙=ũkšĶ5ųtËĨŌuëUéļ —ÁFvį<2ûāúNđ­äwÉ{2E$dJ„Šb ‘ÔAē*(ĸŠ(Ŧo˙Č&.Ÿņũg×ūžbŽ˜¯?“ ącYpKCÎ=1øķÍ>K2č—S8(sķIČ}°síלŲô{…×Ræ!ū‹<]ÆÉæqĘ1UûŨHį ž ^E2ĸ %€ĄYē0Î{ņÛÔ{T$”HLÁŪIÆPķœúë\ĩåë}¨ĸJęęvN$äāúŒūMg:žáûéTļAVR†;v˙?“#í"&ŖžJŽI8ü€í]߁ô_,bu>lŖË€Āg-ôëúú՗kBy閕F>b nŨĮđŦmFú[ŨRŨ,ôáyĨÛ§%×ÎS’3Žxüú­â›_í‹x&Ä ‚ņ‚3N8 B{“Ž3É6˜ö˛,sˡpʒûF:ž{Uņsic ÛĮļI›‘d ¤œ|Ų`ŲĪī‘ÛCŠÛŨČ̰Ģ*˛Ģāã'#ƒž85ŗvōZÜŲ^Ä×qNÚĮ ˇØã‡bHéØÖ–÷^Õ$ŗš+Ģũä‘Į”e)́Õ}ŊũĢĩŠ˙E˛ˆ›xį‘Š€;gˆ‚NOãÅršęŨKo1¸ŧ‘Ã4 B§'å@į€r8Å_ˇ‰|ņXĖL>` ‡čßįŊkŦ°Ģg(‹‘ƒģSę+šņhĸįÖk)˜$đ\`ã¸íÍuãX´ģČãfōŌäĒÆ\¸‹å`'’k˛ĸŠ(ĸŠÅņQ#FBšĪÛlú×Ėuį˛fwyŧqíd;qN2ŋSČäæaqfŗŧČãĖir…<íšŗrōŊžÕ]‡9_)p­Ījį5)¯Ļ&ÚfĖa›|‘ĄSūÉĮŋ§ëۊŗŧ҈V]éN7FXcŋŽ}ęœų¯/˜Ät'=ķß5]žX_›‚Pœ,e3ŽøÎsZ6‘qĢj)mšŧ˛ŗ˛eJ§áëüëŌõGM*Æ8?ÕM2˜ŅSūYF08¸īīí\§‰&M>ÉcŗŽ&Äh#äķõü˙ĨhYÄmlâ†+„2*ā°fûĐpr@?Sß5-Œ(ˇĮ%›bŦ@0į¯ŋ8öéžÕåž$Õ?ĩĩšĻC˜“1)üÃëū[Nŗy‹NōČųdÉ,}0:ôæē8nâK¸m#“n÷Ūś‡ËņƒŸOå]xíQFÂRčŲV;ž\ōyëÆGoŌ­I$ƒhV˜Ā1† Ž8Īŋ˰Kq2ČûY@RIĮķ˙õwéVĸąšiÛæ  ̓ųņëMÕmæYՔĄ1Ēåˆ<œU+Ģ”’Îá0ĻW‰ŧ¤ÁË6zŽN=ŋ—|ž&Ön ]ŲŨīQ´´*cÎP3×Ŋz¯Ãm2ëJĐn!ģII.L¸“† ĸ ‘œŽųŽÎŠ(ĸŠ+ÄŅ´š8TÆīĩ[ŸQ–,¯Ø@dBč°Ą2AÁcÕr4Ž#N6¸V‡ą×¯OSWUÚŅV8˛N •á}ŽjhˇHĀÎā‘Á)ÁÁėúūĩV]ŌĀķÜq { ㎜tŠlĻ•cČ)¸c$d9Į'ųVū…Ė2ˇMīģ˛z/Z×ĸŠ(ĸŠÉņ #N‹—í–š9˙§ˆë…žŠŲÜģĪ)mƒ^Ø_jĘōŖˇq&ŪĖĮ•ë{ŽŸäsq6"›ÂIb@Úy#×<Ž™įŸįY:ԋw2†ĐŲ “Đ÷ĪÖąɰîy9ĮSģųžëųŋDŌī5]ŦÕöB‹æM62c_`F2s^› é6†â[h-<ĢkgĻb 9ë×ÔûqƒīPøŽęâöeŗƒr¤oÛØ}}°+šēXŖ˙Eĩˇs˛Á‹ŸŧN2Ũ2$ƒīÅk]é2hzKeIxˆ:sT žIúuÍyŋŒęãSŠ{’ĄĨMÂ59Ø:wį°üŋŋ†.Œ\]ĖļĐČģ€UŪøėq?2>)gŅm’MļúšË×"HŧžG§$cüâ¯irGN$Wų”,ŧŒķ°ņÔuÅnxg]˛´Ō„l1´2ƒåž6ŒņˇœqëĮNēŖQ‚ņbÕ-–0ōœyąŽpz79ĪdŸŌ´Æų/;/<_+n,s€ 9õéŽŊ}kJ$÷‘ÅÚF3ÜôĪלú˙:{DņŨˆ<œ€€“•ĀëƒīW ¯‘æ2†l`¯÷ΖEaąŒō=VŒfĄüŗGĖvįŌˇ4R|“ģ†fb@9ĩ¨ĸŠ(ĸŗuÅ az ģcųN‡úWœ\ĖĢMžc Ĩw6zģŽ˙äÔFīuģž% )?ŪųÔFō[iC*o%›(ŦIÎā* hã¸2줂B…†Xc،ƒßĶŊgk:MÕŧEÔnVļCíŽŋįŠ‡ÃĢ­E¤ßΤÛ9–gHÚxúÄ e†:’r§ú×cá7ÔtØŽėõ‹äܕ’ ÎK/øųr1ĮQŽqVu‰~›ļ6å°ō ČžĮ<ô'׊į%žŠęōĐÛŗDÖé#ē•ČË  c9ÆĩīŽãkYė5sw‘ĩ†FAé__P1\ūŖāëmMDÖ:ŒĢ$H $’H¯@zÖy†ū[#žh]€, pīŦW1væ‚ĄÃ ŧāįáSŲHČQ‰?7B>Ļ Ô".UŖsķ įëŸōkĻđ™=ÜōÜÉš-"Såąû­/īĮô¯L‚Ü,‚FF—*ũßOĮŸŌŦæ›|ŅËȍW8Ų“ŒØīž)–Ķ$ˆ%•eD#Ęũ;÷ę=++\Û¨^IÉÖ2°;HĪzč~jK&‹}eē8'.!ÚC2’3“÷F0*y|'â;)d¸ˇ[kФ)įí““Ë.ō{S˙áÕoôˋ-fKxaaēķ7°OLķ׏¨ĒĸˇˇYĒffų‘Œ`&Ìô'ž ãōô}ŊîßŨÛIraW€ˆāÎöÉŪI(GmšÉíßĨ/܋ _Oļ[G܊y9…pKm'§;G㞠…áģ­ē=äO#)Ņâ9ā7ÍĪ鏡&˛õP˛LfxÉi -Æîų˙Š­ O&6ËcާãM˜FˇŠ÷OĘ_˛=kڃÚĪŖŲIĻí¯’­7Aŋ>ƒ>ĻŦéķ2Å9õ¤c#éĶןjŽI Oä@åä~['’=˙ĪqVw sŒ’zmÎ=ģ՘mļ'š˜ĐO=ŋÔøØer“ÎîGáĪŊDv ĀĀųpäķŠŊŖĒ‰Y;œČ_8ę6AØ ŲĸŠ(ĸŠĪÖx˛ŒįéVßú9+ÎŽQîe>dĒĨē3/͂zƒ‘ģéƒĐVq´{@69ÄŖ™V98Ī#ą ÷ëڑYĻ­ašLąBØ%IqŽŧzõ…ŗģ†/y Ž(QÛåāap'ÜÖ&ĨˇW+ Áû€rg–[xA`ŦŠ2NC{Ö|V؄Ÿ20äTļr§ßņũ+Ņ<áŨ3û&×TšŗIo0!ܤĀ;Nppjë ĶÍåĘÃŋtY#Ž;cˇ5ˇö8m‚Įt$ääqõÉĪķéL›DĶå‘f6Áe\€ŅąLg¯B+#\ļąĶíf¸û5ÛnR…m–$ņÆA“ôõŦŸ _Ëq#ÛZ™Ĩ†PöˇųRĀ:.ųaÆ8#ŋ5›Ēîļ`ąē‚d>h|ņ‚$õ9ęzŸĘho!ŋŅâ‚öF`Ķ„…Bíc’8Vã¨ī]œŌ7_„Ø$ioD ۍŧy G^¸Ŧč`ÔíõŨRÖņPéWË8“ RG%:įhÜ1ĮãÅ]¸ĩ>´—VģŒß´yuē‚?¸¤î—qi—w\%@Q×;š< ėü[ÔtŖŊĨ”r)[TRÄY‚ā•=†y#ķ^KĢÚÉaâĢșīs"åˆČaģ¯9Æqøą=Õ˛Â‘›Č˜ļCFš|p:1˙ęŦ2¯ēÅ#`ŸēšéÖŊ{L‚âĘŪ08@ĄOP ;uũ*?øĶNĩņōĨ°ČĢÚXœy ũŪ¤cæ<˙Jô•pT2Ę܆ –Yzįž°@DZ0ş`;ĀũÜŧņVtՐ@Ūfá–ųw Āä\û æŧEã]7CŧūÍžŨq2ĻöhP7—œm>b <N9Ŧ ü}ĻId.-ĨĀŊŧäŦ€gœv'čMwļ?išĩ}čᡔ‚§ ŒĮƒŸĄ­Š(ĸŠ(ǚ’+Ú¨~‚h›ĻzH§úW’Ųęß: y2oa‹¨0ɜŒį?/øV„_cXBŒO#)ØäáN=;ŸĮ8ĮĨR¸†y ĪÆŗ!bģW99Į9#=˙Ĩ?Pŧûn›]DEg@Á—Ôū|ū´—ļŠq„S$įāĒpyĪLc¯ĻĨuˇōæĮĖÍÁgiÁü1ú~] '@ŋŽ+NÕ¤¸ļNö`Onî~¤~UĢwuaŦŲJŅËŊČLDÎ@\• :ã9úsUü%ĒÚx›ÂōXģžÉŧîVlĢûãøSđv˛°<ú-é w§ÄŅLÄ`2#F°ÃĘĩnõKyIō&IļqÔsŒūuÄøÃÃWˇŲītāŗũߔÍĩ‚vÁcĶ‚qÛ=Į5Č&‹&Ÿ¨Eø“™ĩNp2Ãúü‡ô­o ÚĀúĶ "R"ŒēÜ €á×Û­z pÍ"EpŌ…|äį¯nAÚŧZâŪ[[™ ‘ Iuô9­+/ëZm°ļŗÔn"ƒ´~aÚ2sĀíÉ'Šî|ã CUÖ,ínåšyÕĪÍĀũŅS¸:ā…99ī^´OL× ãˆh;ôí5V]L¸°ĘÑßÔôãķô>3,“]\Kq;™&‘‹;žI,{“ųÔF5VÜWc“ÚŊĢáĖWööQ[ߥCŸå†?6Ãä‘ŸĪjī¨ĸŠ(ĸĢ_œYJۃ5ânQ'U™WsgÎŌ=˙=Ēôļ–>Aģ’ãĮŪ8ÁĪ^NrOąõö¨Ĩ1ŪhZx„`rGNN3œ}~ŊëMËåČbŠ›+œąÎ;úūf [É-G™Iá‚É98ČÎOŋĘŦ ģ‹āne‚$÷q™¯œã×Đ}*ļŠui¤˜ŨdLāģ°}úg‘SØjö×)#ŒÛz„O0Ÿ0Ž[ ęl᎝ļueš9ŲV‚ãrŒädq‘XÚÆ…¤ęsŦΒ‡pvÍÚK`‘‘‚ũxôŦËhŋfQ)¸žī;Ž_õásĮëøsQøVãOđ—ŽÖ9§Y,î!Į>AōːTąéĐrG9úw>7ņ’ønŨí F:„‘†ƒv ($‚Į郸âŧ[Ë2ŗģ0fc¸œä’OZŗ§éWˇ" [y&”ũƒˇŸAīœ õx-,=ÖŠo—‡TļņôôĪŋ>Į“ž¸ÆŠ­@T ´– c'1Õú(ĸŠ(Ēē‘#O˜œ.Höī^uwũ§I āōæÁŗųŌ¤.ŪP–Re\Y!O°gŠīõ­[T`¨Â ¸*Ĩ›éØ c?ĖŌË ÚÃ&øŽpĘĢÜã•$ú÷ü*ĸ_̓ ‘ŽėHéĐUƒ¨ŦEĀ’3–Ü7–÷į“‘ëVõMÛ]°îĨ’ƒw–‘8ãĄÎp9¨ôŨÛJ‰dšæ\…ķX ŖÔŽáÉ>Õ$WōŌ'€!ÛwFxÚ;įÆ´EÔJíöpI 7.å9ČëüŗëŌ•å—b•Q“Āû¤ČĪŋōīĩŦŌD$˜m8ÉRŪŲĮ_§JĖ‹IŌVîkÃi(¸Éu>i89ž~lķŸzą%äBŨ"h$9čōįOĀTéo2Į‘ĸČãŠ!ĮqĐrG=ųŠ.o"šžM‘˜Î1Į^˙§ëUĸš{ŠXūæ2ëå!É>`IÆzqúäV&šá ëŨk÷RĀŖ2 cÔôÆëÅR¸đŪ¯6uŽjSŨŊĨēâ{|É8L)< ‘œž3ߚ¯áÉíFĩmÕ¤‰eXuáwgiāū × ÜEoĸëf[XŲđĖØûĘĄļãøFp0Ĩvšuņžˇ̰ō?ÂAäSŠÖ-€ÍŧÄûüŅÕú(ĸŠ(Ēē–N—wŽžK˙č&ŧVÚ•vĘęĄ2Íænzįéųf›43ũŠ[ÎxŖ Y@ĀÉãzô>ĩ‘i!Ŋš8üƒ9WtŦI Ķ…û }A=yŠu+K‰u š "D# ?„’¸ øÖ­¤K-”Ad bIōØ=øü3߯z”éĐ˜E$¤ŗNâyęü;~ĢY"d´KdxÚPrų@ĖG¨āķÎ8õéZ‘Ûj_d™î#*á1ķqÆAŨžsøuî+>öŌÖâÆnØÜđUzõáAôÅPĩˇo81Cá@mĖđ͓Áx#ŋãVZWŒĢ¤ģ˛ŧmī‘Ī=˙Īá]÷HŅÆĮĖ\ÅÎvúpyĮoÃéBLËÍĖŖˆĪLĶ’d—ËrFá×ü€?‘¤m„ƤŋmÍíôÎzSã!K›ĨÁ’>…¯<ÕÔŅ%â_)Õ@-?0Áõé휌âŗõũ3Uš‚#ĻÍ ‘Ų$h6>{ä“Ķ$Œqô5Iŧ;Ējv°Å­ęˇeã-ąŒ ddįķëÎ°/tK-‡žaH¸{gĶņŨÛkvzŋ‡î.îœ Ø vŸw!ˆØ: }íŖčsXžņe펯įË> ”Ú'ûA8ĐüĮŸ­z…žĄŖk5šČō%zsūĸĩčĸŠ(ĸĒęMˇLģ!Yą ü¨ģ‰ųOI¯#ļĐ5¸ ‡ĶŽXHY8>œ t-aėŽ"’ĪQ‰ĻVWAjå[’Wĸúãœ÷Š’ĶÄŪ(×ZĩX‚„âe@6“œ{Ô76¯*-ŽĨ+‘ˇ›IF_—ŽÛi7ąÚà –šŠėęœÍžŊpž˙Ĩú]ėR|֚ŠŽs˙SãŠėŋ_Æēm6Xmųjeŗœ˙fÜņ˙ũkF=^Ũ#!mõE9ČŲ—o_õ~ ~UFH-ä˜î´Ô6 mÛĻÎ6ž*¯ŲŖķYMžĨåˇũCŽ8įŸųgۜļęŠMH ā“ĻŨŒƒËÆzÔÆÖŪa‚5 @ĀcĻ\‚8‘ķÎÎj”V‡Îuō5íufĶnlž@ų íÎF:r{_‘VHž6ŗŧ%W÷déˇ-Č#iå;sųžhˇŦ‘yí~ęĢÉĻÜ+?Ü Ÿ~3SĮ†X÷ NOØ.7`ûų}jĶy2C˛Dŧ‘ŗį!O¯úąíYwzKNYPÜ šĘã˙Ö7ü!÷qį WâÖ|ŸŽųŌÂ#3€ģ&W_ãû%Į˙]o„4Ų4û‘  ),`‘dŀ7ĒįîˇJėhĸŠ(ĸŒfŠÉŊąÔgēŽk[˙ŗŦnšBģÄ‘ī‰˜˜$$‹žqŋ>ÕŖm‘ÛF“Jf‘P+HT.ō'ŸJ–Š+*ö=UŽfû,ŅŦMyeŸX7ÍÆÃÁS×'GšŠĘ=u×í“ÚIĀ^@<>všëåŽO ąôģũŖŸiˇh\ŧhšy>o•A#m'<zņ…ģ‹^7R}–{4ˇ'åi7ģtßåŊ7ķŌ ‰÷š Į PŒŲžE×ÅŦŪSŲ}¤¤†-Ûŧ´l>ĀŨČæ Hëĩ§’=FKXO7;H™°Y3°ō?6?ģÆjØõÉ4Ûca5Ŧ7ËķJ' $gå?.@RFė āsƒŌ’ĩ֝Vâ{dˇ-*–‡>`]ÄFy+ˇ= ã āEe‰°KËĢ6Ÿ/8ÎČķ€WĻī7Īđ{ŠĶĶņl‚ßŧr\‡}ĪŨa¸í vųqÁÎ:nldÜĸŠ(ĸŠ(ĸ’ihĸŠ)­ž1\ՎĄâg1ÉsĨÄ#i"]‹(F aVw ’@Y7.9'# i^÷ÄĪSÛ§*ŨFˇcũ┘õ$ō į8 ‘÷sÆqO‚÷^†IâšĶĸŸqŦOÁČmģ˜î$’™lôŨˇ€3ŠŒëäw֖§ÃîDé3I7ÚØŲÚûøHÆO\rųõ=]Ž m&O’X JŌ.Ķ; į¨\c9ųĮLܞöø­ŗŲØģæãdé.ˆ÷ė,{gxë•R:‘U ÔõגĖM ųh<ÉË^#yĪ0ųŊwp1ëŌ™qĒx‚=QĄ‡ÃÂ[1ŋ?nEbU7Ž6ŽG$⤒û\)a"X$fDŒŨBHs ŗ.āp wŽ3’TŽ2(}O\‚ŦΘ^íT+`G$ßolÔļ×Ú´—l“hžTix–O´ĢBÂ]¸ã-ōíÎFsŌ•nĩy´éZ%Ŋߛ˛5‘„ŠW~’¤pWæĮ:Õxõ-qŽeFĐĘ[ÄŦrŒŌƒŗ.ųY\"į$ŲĄĩzH-vhŪL’f”ųčâ0ΞržGŨ]üŒį€zT–÷:⏔\YˆJV2%Q•ß&˙ĀD^˙1ôĀRÖ"p_IĖ!Ļ2Iæ‚UåE ĖXv99ãBÂâk…vš‹;X$€LŒí8$;q“€N3W(ĸŠ(ĸŠ(ĸŠ(ŖԊ)0=°Ŗ9ĀÍ.ĨQEb“Ō—Ԋ0=(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ("Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW˙Ų Pixcomp[5]: w = 241, h = 365, d = 8 comptype = 2, size = 17669, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)ĪJZ(ĸŠ)Č?JQĀĸŠ)˜ˇŨHČ9§ŅEQEQEQEDÆO9@E1āîb܃Æ01Čëߎ*Zk)`0Ä`įŽôĢé€lRŅEQEQEQEQEQEQEQEQEQY—zĢÁy%ŧP+˜âYžM n,čēją×.ö{Qž™šnō=uИŒAmŽ˙ŋl˙čŦÜ)8ˇĩ=q›‡ûN…Ö.ĪÖ×=Āšs˙´éƒ[ģ*OŲŦÆ9Įڟ˙R7ˆ]dØc´ XÜcŋüķæ¨ŋŽ-Ŗē6Žl–aÁ|¸Î3×ĘÁãųÕi~!ÚDģ˜Zí8ÁĖzŒŒâ*ΗãXõ†afļOŒõžUéŒõ„zŠĘoŠÚZ–e‘+é4˙üb­ÚüCˇŊą{ÛhėŪ8fMüŧŒ÷ü)Íãä@ėŅéĘ#Æũ×r‚šöōÎ@ęjŗ|K‰fhM­§˜qö‰}ëäõįĨV?lĮXlķ×ū>&˙ã-ĪÄømn) ˛Ã(`éw+/LõõÁZ_‹QEØ@c,Wp¸—Īü°÷$į>]žs€ĻîMĖ}ōr*ˆüX7ö\&%;KũĒLÎ|ž§ō5 øĄ31UŅŖrļVæB¸ō!Æ9ëŌ¨˙ÂæˆŠ+ŖĢ{-˞øĮúĒí`ņD á”×5X-ĘŖą…ĖĄUąˇøA$îQ€ ÉĮ5ž¤0ČĨĸŠ(ĸŠ+ôí{Ō ÉļˇīÍYR¸’ŠßNԑ]§ ‘ĐķÅNΙÉe#8įŊF4CŽON:i&o,tÆ bęs­ŋÚî@%R6vÆ>`gõĮīK‹Ã¨[oX’ŪRĄ°ŦHyäōĒ:„ës§Û9ŽB0üÄg ÆëíŒņV,u5ļŌ/d¸oŗ˜!‹Ė9Î íĪ$ôúbšģ̆Ũ”¨pi4ŊZî×}ŦS)”¸\ķc ķĶ‘ø×Cm ęÖqZZ!šQ!2ŧ™ ŒÁĪߊâsj,d_2ķŪŨÁ>Ŗîœ^ųĨ%å˜3ZŠŽ{ģÉŖY.jė铎9ųH⨧—q,hō˛HfĖ4‰éžԌcÖˇĩ4ˇŠâXuá_´ĒũĀr¤`7A€rĢžx‡sc6–b’ÉíU]ļ¨ŽFŪ›{÷¸ÕUˇš æLĢām9ĪŋOÖģXģą°ˇą´Kd{‹“æ9qÂäį“É ‘îmŦŧËŠyCp”9›*G<ßķé \ŧ70˜nK•ËŪ%6IoálŒdœp@5KRc`§RŲ”ŧF‡%UFz8=ækoKKcH–ŗFĖĘ­ înŒ1’3÷ą‘ųˆŧԊXŖxíī!™PķƒÍƒ*^ų‰Ččxæļ.Ž,MˇŠK5rĀ…HbÚ#lœîÎB䃯HÉ5ƒŽj‘ŪÛç´ŌC1 Ã:Č[NqëĪLsÆ*­‡‡ļj^]LŒūDSĮbĻå<°JŒcŽHīŸzö9tëoøA-VúōūŲl–9 Κ¤Ė¤(RWjŗCā}Ü䁚ëíČkhČm ã÷ŠhĸŠ3EW?¨j÷ŧū‹o×ũéĢžēšēōķōķ’1•ôĨæLuÁÉĀĢ(6 Ũß?ÂA=ęxÉÚC2î_͚›FXöā ķ\ϏˇŒ.Ą´ŠŨĖŖŸ80]…HčÉāũ+"Ō2ld‚qÉ * GzcŋLRÅRÃ5 @1ŧļÉ'9$wé˙ר‡ž:ŗ„c€Ŗé×ų{TŒN͆9ÁÉčũU‹Š —Œ†%Š9ÆAã8éÁŽ>yŪÕŽw‘äs¸¯ôũ+FÜĪBD‘“ĀɝqÏī­M‚Č­+—U]¤įåĘäväQĪĩqkrĻŦqÛ!‘[væ+ėpAįÔCžj`īw™•dœqųŸ˙Uu6žÚĨÂÆ–+1•dYmĄÜŠ#æúŽž•}´k{f¸‚v’iíŅ?r î%Ŗ'Æ88úã”´›ŗq5„w1ėļeÆ-āghĐ6AŨÉČ+؎9įŠ}–ĸÉs¯örÜ4ÎUÖáūWÎvāōžx99Î3ï¯ÛRē1^ÆēJ[FĨŠÛv•z}îŧätü++M°ŋÕ7Im,Û՗2‘ĩ7px9üpRĖ1“ĶÖ˛¯%'b¸ 7 ÷ĪåÚ¸-q$I$‘œąypSw$OnĀ˙0k§˛– ãQ(‰VĀÁ8~§‘ôĒ— +ęÖ镚`pĀō§N?­sšē-žŗz‘XĻC(ķ>n€éë‘Įˇs\uôF9ĪPp=yį5ŋáģŋ˛[NVØMrą‰6“i`7īéŽ6đG_]CJ¸´iŒēœļ××3HgD*ãsgp'!˛™éÜįgEÕ`Đ­]^ÍC´{mã.XŪäĀĮnœųx—’´ö×í.øBíBĖw ÆÜ€;ääqĪS˙ølė^Ķí“\,ŌnųČPíœu#ˇ|×>ŅjvŽm¤&yha,†C0ĮlšôΏŠī´”wšš>b$qļāĄ|ĘŦS•ĀbqĮNĩz;š­ėãZFĀŅĄ*ŰTuB@?*œ‘÷”äbŽXĨŧ]üÖĢäũ¤ļ`( ‚T€XĮ¨?__@–ĘËSø{ 77ļöšc”{‰'mŠŅnā˰“´g‘É9ŽÂʡą‚9HãTS’rĀä’OâMOEQH)hŦ Ŗzøņ˙ļŨߞ°.B›ƒîr¸ Đ>IFāzđ3ūŊ\‰¸į,ØĪLnĮ§­< !ÜGŠāp3Îi­‡TM¤ q×Ŋgęj#DĀ` ãŸOđÅęömڝ|ÂP  ũ}ę}*q1)”)’OgV€nZ&E†R °†ĐC~§üôąéŸÚz‘,×qąt;G<۞ d{8ī\ļÉäËTfhGT#Œž;õ­? ۙ¤ŗîrÉ!‘P˛5bIúžúšîõ}*mVÂŊŧÉå‘Q‚bw°É$ ˇ×ĨqWļą[\y]@áFŅ¤ĘĄū<žqĀ=Šm¯ÛVÖ­d֋- ÆU0Ą˜)Į8Χ?ZšŠkˇzŗ@ yĄHĖĄĨ\Ŋ@ôūuNæÖķZŠ+oĩÍ$p9ķ@˜(ųs”\ Ĩ=xģ5ķĮH—BUd Éģp`šÎ}šį5VÎöâûQo*[o)aōĪۍCæ,PƒÆN'ą9ÍéüLčŋg–ÎÖ#>.V[s´3†aÉ `c<{×§ †ŗøQg0û6Xĩã‰9R „†āÎžÃæÕĻM¤[Ÿ{ll˜ã¯ĘĻĸŠ(ĸŠ+œÔIūØÔq×ė–ßúõY”“ÁāŪÕ4‘–ä…ČįãŽÜÔŪPc– 9ü?ũT˛¯îōœôųŋ‡Ë šÁ$zöSQBĐĒ–ũá8Īƒ\ÖŖjú“â4É=ŠũG­f›­:ŌŪō)ī"’yV2ĻæĀƒŒ€qëŪ—Oņq˛°’Í4É.BĖōI ^Xc ųІ/ëÛųqÛØ[ ÎŨ‘@=ēũ;:Ė•CC,Ō%ĢJÎÎÄÄsÉĀ?--ŽŖ ˛2‹k}įî¸.˜Īo‘”T7SĮqqæI1œŒũIūĩn­t+¨ŒĶĖšķ!r mČá‚äžüqÔĶ&…ĄąÖąĘڕ„™›2Ė@ÛĶäšôīŠIâ´ŌßLŌEȸšiģ’,á ƒßßéø õ8ĄēņDÚ^jĢmĘ˜2ã$~'Įn;fö”†yÕ ÷%AEØc€;GsšúŸ^:uƒí×֚—cg儝Ŗ„.>qŽØ9sŸ›ąæ¨x‡ÃÖ1Hļ–žrl*“%Į™‰2,ā‘ÉĮ¨ãŸDwOøW6Ō]ƒ‘nJ ģąxČP0Ӂ‚6ōr@ÉŽĘØˇŒ*…@ ;{U)õs¯ž,.Ĩ!spDÁäq•ÉU n"´¨ĸŠ(ĸšŊ@nÖõ#9´ļ˙ĐįŦõTŒíQ•pO§°%”uÆqR‚€Ę‘Ãzã˛‚cdVSëōõüǜ÷ļ–0†Ŋ˜Db4 —÷Tr/ĘšŊWZē’ÔĪm´Eʖœüį>Š;wüĢ…Ô&{Ɍ—ˇrLTîÎ Āc†*67æ HŖR{ Ꭷá×Ļ=)no%‰X;íPˇ=úz˙“QŗĘz‚ˆîĀöįŸ˙U1mî'eX†âãĩ†G¯sO’Úa”ļtuä–ã=Oô§Go%ÁCzœ ™éüē˙úęԅÖŪ~g'ĪT 4Üd‚Äå@āqÉĮzÛĶuM2 6™yĻ.äSŋ˜Cd6ņ€[v P ČĀ8ŦkMy_bܛhŖˇÛœÜp­ŒœîČéōúōčf¸Ō.įÔAq<ˆĘd/æČž¤Ø^;‘úmXÜjņI5Æ\Ü9i vÐ[ų)į9ęzqš‘jƆas*<[Gšė6ŠÁčpŦpHÎßBzâĢé3Čė#Å$@ËnĀîRrģH8ā~‡ŽvŸYŠ ËΆšzYZ™LP3C*Ú°7Ŋ@ŒgƒĐö6h#ŗ…í Šā `tĀā}+ZKy|GĸÅ,Í"eLÉhȆ†ķ¤eHŪČŽŽŠ(ĸŠ+ŧmēūĄĀČŗļÁ>ģįĒqĸîrÁIŨéVe<ŸNŋŌ¤hHʎËÚš/øŌĶF͍“Ŧ÷ĀÍ´2Åõõ>ߝpÃYqtu ’.ŽdÁķi0:~íÚŠßjŌßĖŽī#¸$Ģg€?•Mayc [hælā}ēŸzxŗFn<Æ9$`û͌ÖļîH…¤8Á+‘××ĨVmQ6„ŽÖ%ĪŠįų˙…WMFX. Á3BĮt.1ôĻĩôĶᅬv`z'ņīëRÚši×íRH`ۖPįæ# ëŌĄšeŊŊių0Œ’Ŗ“ÃŠ˙< ֆÚŲUfy$fÚHŽ028'Ÿ§NœúWC \˙Â?{äß\B-$Úī#@]ķËNÜuœļéĩ ߡ Ėš §Ķ'ņ?OÂĢGgw?• įĢ"Gˇ?į5ĩÃíNá‹Ísk`Nķ#Ļ­sƒFYLøy’ė˜Û´õÆH'=5.áë}_SXâxãÚ[züÄcØ\~&ŗĩé7Mŧ|´-ŗīŽO=xäËŪ¤ŧđĨíŧiû}ŒˆÁH )ÉÜĄ‡P;ZĨuĨjÖ¨âŌq,rÛ‘ÅV´•c$¤+,ŋuw¯ N9ëøVÕÄĘĄc`øƒš'š?į¯:v:„—wŒõžGR÷2ļ6Œ}ŅßÂONzˎōgģŨm‚E8ĘôŨĪ| ķßŪ§ûbÛÛ $ųųŖ’XúîÎxÆ21Ķž1I¨ß-õ´W×/G0NF{į¯ãęMg8•Ė…˛€¸įœo¨•})āíŖÂZbŽv‹Xą‘ƒ‹[ĩĒ_Ü[xHļŠÃt˛‰ A#Š+ˇrü¨NãËpqƒŠßĸŠ(ĸŠįn2|KŠo°Účwą*”Č9 äÆxŦø”hv/klę/˜ĸÉR˙˜ĀŊ}üÆŪęö[&˛q’B|Æd§qĀ÷ëëéš×đ†‰ũĻZæ] `Ԍîn2OQŽŖ˙Ž:wRļŅUm- ‰īJ‚;ŦDŽ23É=‡ĶÖ¸+ģ鎧i. HÄ}×9 = ÍmčąEöÛU 䙌   ÄôĪ?‡čbV÷Tā)!KmĮN•ãVŽŋŲĶĘS$˛¨Hķ5ˇá'¸žüĀ‹Į$ æ3Đį=F{ŠOÚļĄŌU–G´ķąŸ`}ąÎ9Ž{OĶgž8ŗ!OãųoVãčŋ­wZEä6Yn#ļ/$Ÿ"ã$ž:8ëķz mĮ‡-Üš5v_Ũ_ŗ5ĨƒŽwnIFGä€zŸozįo-.,ĻU‘d]ŧdņ€ĪãKĻŲ5Ū§nˇ0Ęmf`$h҉*Ix?ˆ¯§ü;ėKl# ō“ ë´¨ØŧÚĩkR•—Ä:Z-â fpaËåžByÃmūüĘObˇ(ĸŠ(ĸšų[(ÔÁū+í/JŅÁĶÍ X(’{ūϏ}B´ŧˇ)‘Î ģu,s–ČßŽŪ•HĮˇ–GĢōĢsÜvįŸZŌ‚YΞ\ŅDę ›XáX6ĐT}r@ŽķWšû?„ī&ģ]ŗvI!ŦT/“ÜūUä#0ųŒ¤HeÆXUsn užļ6Ú˛H…ļŧdGĢžF`$XdB\ãå#Ŋ+Ēņg•eáÕG•ŧ–Š2Äą—'×§>€ũ+Ę-^ArD ™Āy'•l}x˙=+¸đÛÄfh/b–Č ˛@T`Üņœ7ôéQ5 7ĐÅ9wMۃ€ÂįosĪōĒz•Ŋ…ž¯t˛Eļ8•Qâ;T:•ų™qŽAÎ9'5CF2j(ĒĖUheQ÷†Œ ųŗøöjÖöKkC<đŖNˇQŒ íôöÚ3Üįǧ‰§2x‰g¸XÜA"ĀcG<ėU.8ĮVb3뚇YŠ&I ”ʅ ļíšëģĻ8Ÿ|æ]ŅÎãū°Tfc“œ;‘Û˙՚ˇgim<¨ ÛĄ“1ąīÚØī†§õŽ’ËÃōĖ,ã?Ú^DŽå!’(í2āƒķ9rB“Ā¯uđÄbŲDŽŽŠ¨dS€Õ¯XZ¤æ?čČ-le įfYdQ<_/ü˛SËgqŽzŨĸŠ(ĸŠĀfĮŠu/úņ´˙Ņ—Ļ@NļzgŌ¸ŋéĶĻũ^Ę2îņyW ŠÅŠŒ•` āņžĀŽĀטF.5~Å W7W.Øc,ŗœãøG_ éŪ#†hl.o/¯a[Š6{Q 'ũ 3É\žÜpk›P–x"N<¸ĮÉÛnGųüĒĨÂ<Ōy š‘A éč:ũ~•Ņ藉g-ƒßHTŦ&D”äü˜u†?ũUõqs$VŅ2´ŽXX_ķÚš->ę[ +ËËfōå!bVįÁęzŒžÃžÕkOšžÚh¤ēe”ģ;ųcČ?1āôÖģKÖId\ÂIÛqls×=¸#ÖšëŲØŨĄ“;bŒ# žr~˜ũ~ĨúRÔĪ›+,Kæ•8rsĐ ’ieĶŲ/–Ø1™ Üm–‹p‘\+0=¸ēķÖšû ŖÄI6]ŌîRÅKŪÕwÄvŋf†%’@ō0Ũˇ;s•üōxū\Šå$Áķœv¨—×,Āo=3VŦĄT¸F’"Ņ´’29ãЁų~UÕÁ'Û%K/ˇÆØŗŧīąA*ØāÄāā‘ŒŒ ÷/ İxvĘÉT…@$įŒzÖÅsÚŧöņø§B†KT–yLÂ)ÚÆ,($脏^ cŒ×CEQE€Ø˙„§S˙¯OũqHÛU°1ĮāiĘĄ~ëé÷PÖ/GžŊŠ%[ųã ؓߚķ+F]MlĖ;\GÃHį#‰˙?ũzĖʓ[ĮÄöüqĮZŠdP„Æ:Žƒëų˙:ģ¨V´%ˆ­Ö0Ųg?ĻN99ŦU‚59bŌĮz~Ņ ŋ„ã—Œ‹Éú,Dųš–Eŧ†IÎaVV`įī}zîdļK­D¤ÄB72Á$ƒÉ úįųŨb"”M’Ä&i|ô'ĶôĄŪOcöÔHÚC,2*ˆÎ ļČ>˞:đ+v=:ĢÛIqzH>iH˕S˛O-aÔüž•Č?ü‡nÄŦĨ›îãæî>•Ú|GĶ’+=?be|ŧ#–ãšīŽŋ‰<öōŠG$†^jM:%}FŨ ųL‰ĐsÖ´ °žļ1LšˇĮ´oMŪ€ļk Đ¤žÔ¯.ŖŽĶOĩ}™7_bĘ9€X(9==ēWļxaˇxzȆ K†ĀįŽŧ?#Šąŗc6ą>’“¯Û ˆM$$á‚Įqî2|fĒŨŲ^ɯZŨĮ:Įk…‘iO™÷¸ PA*wŲä``ŲĸŠ(ĸŠįÜ˙ÅU¨ķô+OũâœęÁĀAÆq֗c <úƒšáükŦ-ŦD€Äßë#Q‚}9ôq\R2ģІ\›8õū•aZ@ûÃu>ŧķĶ=ņŠŋō­Ē>ŌÎAÜI°>Ã=ÁÍWe)~P`Ž8ü+.õn?ŪmÃv:˙SÖ­”ø&2 áŽelņΧĒÕRĒÅ&v(ĄÆáœcĩto—kâ%,á‘XÄXō6ôŽŧûsųb~w‹R™ļŖ˛˛ļįAŒƒ‚1ĶcđĒúm­āģŽŪ+f{‰.Ī‚B䰏A[ˇSJú¤– "I|ą4˛3gbH=š‘Åq÷31ņmŲŒ‡žNúvŽŖÆēšŋĶtûIU…Íē°•Np??QŽzķš#ØßŪÎ?k ‹ÆĀ ÄÛ=FҜ×C`5(ø%Ôb7˜<‚ØÜpÎ@āg¯AÁŽ“@ņ“[MiŦ-Íė.ČÂ9ŨļîįøT6ä×Ģø`ŖxrÄÅū¯Ę]Ŋ:cŽœT6đŧ~,ē•Ū`#‰™6<˛ģĮ$ƒķcÛ$TÅÅĸx§A†F›ĪvŸÉōåp™ š ŖåbAČßĀÁ įô”QEQXKƒâíPŸŲöú2æœîžųč)™e8ő›qÔfļėnØ …áIciDĻ'mĒT08ÁĮ' ņ[Go,Ą-+‹•@#XĶåiíPšíƒžęp:Ģh×M Ĩ4q\I$BVE8^FXAŊ1‘éŽ+Ōŧ2AĐmqŒĐlģoĘ8Ī­eY4ą|HÔ`3¨Žk5¸yŋ1?*Ųætų@Ũŗ9dc/{Tļˇoi7Öņɐ[ZČą %b>rŒĀŋ ˇļN8­ę(ĸŠ(Ž}Îßjg&ÂĶ˙F\ĶÜ)ųXgĩpŪ1Ô%ûtFė‚2X2ļ6‘œã§zåõk8Ŗ™'IbhŽpą¨Ęqʡ¸ĪJĘPŠ  1ë’=ĮåúÔĒ$9qˇˇũ;ÕĸņíĪ@sœqŸÆ‹K ĩĨˇĩ]ōĘĀ ¤ūgØg­zu–—m iIą|Ė).ËümķōkĖĩ)žĶâ“y;Kpyü˙…VÔ åFŌaČÆ ú˙žĩch0}đØRpNy˙<ūŠŽ~ūÖÛĘeØņ+cwŨ8üĒ:Ø5Ãyˆ†bi‚ Žüc…ĮCĶōŽŽßS7~–×ūûČۊpĒcUÉŗ^ôŨF÷TĶĩ@ˇļsÁâ+ LģX›’vôūįJķ]TŊŊ䐺ÆûŅTŸcé€+4’ũOĒŧ(ˇr„C@G|ʼnãžõĒí Á§F҉5 I“iØ Ä„IĪ$úc¨ęœV†‹Ž.yÖY!ægqU @ųTĀ1ƯlđÁŧ=daĮ–aM¸\q´víY–—I'ÄKûo=<Č­0%Ė āė!š"<˛ÜãxlãŠģ}s ×ŦŨ$d0„ÂČáōwŽƒ 8­Ú(ĸŠ(Ž}ŽßęDvą´˙ĐîjBw‘ôö¯;ņ,AuIY"[īŪXsƒĐũ:ČW+u3ŗlv Ā\{qíPĮm5ÖLd>Xī/áßđõĒŌ-°‚sŒéPĮ,…ÉÉéųž˜¯GĐ4wŅ•šä&ÍōŨ\AƒøûTŸđųŠâ@ĖØ‘ē˙ŸÆ°Ž­tĢ‹ŋ=YŖP¸žņĀž˙Lfš›ë›VŸB@ÎW$ãß°ũ*TrĐ3ēî^Ũ įÚĩ]ÕĄĶVÔJ„m$-ƒīüš­ųÅŧļōJ{”ÚBKǍF# ƒÁ×8ČŦâ!ˆžFōˆ•›k}ÕRXIßøÆŦZj:‘‡ėhō$ (IÁÜ\7# ät šÁ›@ļԑÕe1M1Iœem8č:ķÖ°cĐī­į&t*\ŽwĀöûÜzsUå ŪíÄ…>S€J”§ĐÔЛŋļÆy{Q\ÆF7 ģųĀî+§‚[]:Öęņ$WxŽČŒŠąä’pŋ+ĄéÛķöo ž´\įsė+\(O'Ūšũj4]sEš’=Iüļ‘Ȑˆrû2ŽøŠįŽ1Pz(ĸŠ(ŽyČ˙„ĢRĪüøÚč˚‘æTn*<ŗ†Üp9Į|WŦŊ˛Ü,Ō:Ŧnû¤AĘärG~¸{zšâuc%åÔ͐žûFר>ĎzÔ zĐŲhŖÜZB]Éč1ŒŸJĻō4šĶž~^?+GÃņBKų#+\V-!áqúˇüģģŨĶ'ĘᘑËtl~Ÿ_zãu…"]ĀĮûÅÎÔƒ˙×ôŦ›¯´Ú[$ŗĢ”cŽ?LđzÕ‹Ģg…aGÉSfÜZĐŌe 9,p~čééIvEÅŋ”ëĩāŠ#Ļüjöĸc q9f_)]ĨÉÎ:gļ¯zŋkr/$Ķ´įžHĻŨąƒ*å$*…÷į=Iæļâҧ´–ßV†Dcs#IąâQ†*ŗJ°Æ9Ī#ŋÁ†ŽęÂâ—6ęņÅÁ9ālROÔ ØĢ}jŅXĮ;)bÃÂĸƒŒĮÜaŸoĻ2ĸ´:Á“ėę¨R2XdŽBdúßŪĩõ 9žÆÍ~hīmíü™×gˀĀęB⓯錋;Īfö*c,éĩeŨū­ÉĻ1÷P8č@é^ˇá­§Bĩ*AĪt­jįu+kŲŧO§\E1ÖčĘbXy›ČË avāNH“ŽŠŠ(ĸŠ+’ÕķũŋŠ6ũŽĪv}7Ü˙õĒ;M“[ŨE#)b›‰'€ëÚš-wČ1|ėĪŗ{šÁ#đ9íÚąDI”f‚áVå†bC›?ËųÖ:BZE;€ÎÉ<š§wL"’RyüëĻđåĢĨ…š,ažÕ#Lû#i*6ãĶoīWMĒÅŧj7$cßOÔuí\uũĖ2*Į!dāĨģūŋį’ņŦē‚[‘”gØU›Œ}*KMŽŌá|ļ,AĪRJÖ­¤N!ķrĻ=§'#ķüjË¨wî ķí]–‰cmwWˇ*æXNU[îc~AšČüĪŊ&ĩu*xžÆ9X­‹BÁĨ(ąĘ’œŦĘq‘ÍF<Ëā’"ŖLÎvE!XÉcģŅ× ūî+?ŗęw€F¯3JŽ_(\´gđqũÜv­íZC¨x~îæ˙Fh|€(é÷$Ôŗ0ãąyĮ?e YD.˛Ŧq°§œ€ ;āC߯Jģu}Üj­(*Q”ȲmÉäōLGājH$‚k{ÆfqO”âÚ>„7QŒúį×n{üWUEQE€c2xĢV#ū%Öŧƒƒ÷îzW¤ŪÃysu§‰’9bßå+psĮ<äû{qÅdę'ĖŊpņĖÅcã ČÆHĀÆęÉk–3;Üc÷ëÎ{c?f(Bp2ŲĮ9ûÜÔËŧvĮ8˙9Žâ9”ËĸŪBÍŊícE' G¸aƒ[wēT7–Č÷ !$¸ĮéĀ' ÍbKāYYåŊ1ûÃŗœgĮķëëĪßx2ßÉi´ŊR;—S!ˆÃ۞}kÚÎxua° ˆŒ‚Übē]Z ŪģR5^7Oq÷l$›j° ÁôŽĢLÔĶDšļ¸ŸvAÄVã!ãĄČäŽŖA^w:†ŽgqmŲÚ1:‘( H$ā/ĮøĶąÕŦVŌKˇ÷„32€!@#ÉãĐzsEʋ[Ûw>\ûX— ¸r0rrGcK40Ÿ2Ī%&Ưؐa‡ėįŽ‚˜ÖĐÜZ$h%Š8žT;>i:‚A>œuߊ[KHífI‚Ė |ƒÉ•ÁČ]ĮŽūÃ<õ¤˛Ųm­ÚÍ9;X”>é‘Ķĩ{W†Ëđõ’n ˆPnūQÍkÖ։Ή-ubųšÕ ÆÆWũÚˇ ĄØwwb21ߍģ”QEQX&x`ņN¨÷,q˙gڌŗüwåڍ”K¨Ũļ›Š ‹o0”ļy9ÚĮ§PyÉÎ=ņU%Ŋ‘äE¸O/j"o$ X“Ôc˙AúUIĻķdYcbą’ģ˜ãĻz““‘ė*%ų‰lAÜúķPŊäÆbÁfÁÛô˙8­mWķ,’ĮîĪo!–'9Ë&}sĪį[ZŪŖ$ž\Č Š  °ûŧ|Üį¯##Øū<ÍŨíːí’ā´|…B:2>œbąRK†ŧ2@^6ĮSÎzqŸJčĮˆnĩ !´ÛŲ”ˇO›‚>™÷įŠą}sY.ÍëĪ<į ×-$JķîĀÉ9?Ö­[Æ^ũayvÄøÜAČΏābē]nÂú(láš bÚ0pŋtnā–Į8$œ`7ŽkayÆČųI&H—)É%˛Î1Ÿs[Út0XC4lÛC4cģʝ­!úåp;sîjXtļŅÆņq(GpđÛsíō’yū!LœËmr÷11f`Ędå7uČÎsŋípMáËļžŠč´ŧŧ2ĮĘ§päžäœôį͚Ŗ-‡Û,]­ō&E2€ÁQF9į!{cÛ5ëŪĪü#v<†ũÄC î×ÖļĢ {}-|AĶÉ0ÔąåĸŦΠ¯Ë“ŗ!Hû¤œŪÕģEQEËjVVēŽģĢÁtĨiöŽ6œwÜô÷ë^dīo ­-¤ĶÁ;‘œŒēņÁā|įŽzŠĸUļ…“÷¨™|ÎŪy'ûŋŽ;RCŗš†H<ô%‰ 3Āũ??~õ@Û ‘Síķp Z‡|cwŨ#¸Áü=ĀŽ‚ĮU´–Ũmf„ųä`<7ĐtŠĢ{Ĩ¤Ņą´|ĸ€vĐvĪņęk™”Ím#qĘôÜų视yŅļÉĪ=ë ž%´Ø×s8į=yŦldeCœ’H"­i1›‰ܕ2ˈ÷šĮ–sסzî/´˜ŋŗü¨ü›Ä´FŽw“ķŽ3‘ĮĻOøgéö$ę,Qˇ#\Ž‘ nņg cõ­íDYŨO1xėŦyûøÔųŒqūČôĢ ĒGq¨,°ĀXĮîEÆGŪ ĐņÆ?-F†bü„Ûm%§Áį=qߞ1Čėj=L{Vķg` ęČ‘Æ¤/f.nž”Ũ26ŠŌ{‹VØûÄXüŽĀĮä¤p{×§ø_oü#Ö{bųIĩ7ghÚ8ĪĩlVüÚ}§ˆ4õ™Ŗ[ģ ūPk‡W}Ĩ2G 9Ž8PyÁ#vŠ(ĸŠ+šĐ^ø—VĐ>Ÿh7#`Ū\ô¯1Ô,Ĩ´Ô.Ŧīm ˆÉ‘ŪIŗÁčų?ywč0rN\h4€¸HՈ .G$dāņŸ­ZÉŅ ˛°ĀÎ:į>•BhÎncsĶv:vî8ûŲįžāû{ķ\ŊŧÚ˙c’sĩēdwöâˇõ6U؟+Ž˙¯_zÁur1ĩ•°26œr˙Zē?4qDmHĪ•ÆQŅFáƒũå¯Ōē–x–ŸËaå Ëü={ƒų’{ØæĄ˛ŌÚ7Ī$.|ÅûŽŽyé‚ģ}†ßzŌŗ•bŋ§ÉTf\ũüĻ āzė~šŦ]*+[Y´ųĐÅģl[xĘĮŽāįĐ`VĩČ77 k,đŊáĘܔžĪ9 zp8?NŲcYˇWÂ÷ZŲ Waˇ ĸ œv8äöĀ<â˛5ŠtōĒ$cäåIÎųXu'АA#Ŋg¸˙„fà ˇ÷*váã§SüĪÖļkúIļí—ĘēhPŽeÜ<•'ļÕˇŒķapà ž+zŠ(ĸŠ+"?á.ÔûÄžĶ˙F\V.ĩá;MZīí3K0|mbÉīԃ×Æš­gÁ_aąImfycBĄō›œ’ØĪ€9ü+—Ęˆã…ŨQJy ā7^ŨÔ2|Ė1¸Ģt§ŊSæFÚ!%w¸ŽGõÅX’_ôa`QNG#Ü~5EâfMČJ“:qŠ ˆûŽ>bN7c¨ĢvwrYܤ¯Ŋ“ ȊŨqũG­tžUŽĨ}ÜĢæ;/ɆĀn3“Āė}G8ëŌĒę,Đ\Ar–0Ņ3cî’HõúÖ+Í Ŗx™‹c'9íß—­nčÎōŧ‰ Āį˘Į÷ŖsÔ|ďų°Oi¨ÁĖöˇöŲ‚r|š.xp1îGĨhÁbn´ŲĄƒdĪe(ōÁüŦ¸Æ˙ap}zp`Y$ĩĩĩÔ Ë[0B ÁIČCĪU;†qČeõĒ3܍'QØą[wųŖ¸EŪÉ ޤu‡ĖŋLÍQ]:ęIĻt3ĩŠŽ9 Ģ€3Œž=0GpAΚÚĚdēĖ1´ÜI˛(Ū@T9å†íؓž<đ Šã5{;Gyĩæ‚+ėŌũOœŸĀõîxöODđx[M…ÆÖKh”Žx"5õ­ĘĨq¤iˇWĐ_\XZÍwĪ$*ŌGūë‘ÔôõĢ´QEQXIĮ‹uO_ėû_ũæ§r3ĩšĪ9íô¨.b2ØOm‡hČúëŒÔô‹Ģ♀Š,„ĢpqĶÉŽwQ!RØi—oĘąežœ‰cō•FJōW߁Öŗžøļ?t¨Xũ?1N $+māz{}*ՂÛyūcĨ:BĨōä÷Īã߯įWtųå[g ŅˁœŒ°?™ĢW..ĄYaĖLÃqĘ}æę23ž™äUąIŠ4ˇ.Ūns 9ôęŪŨ˙ũ{š.™ ‹yŖTšŲæ$önŠ'<‚A>ŊĮsŠë#ŅĨxSėkņoÜžSš˙ž9SށŊzšˇĄFļڜļ(Äņy3"Z3ØíÉĮ g¨§ŗÃŸOÖ,„;‰‰§MŪ[‚'ŸC×°9ëŽzëK6W;Jeŗ…˜´¨v˨ ŽsׯĄŦûËYn"´ŧŠ`ŗČŒšE*’€ãå8včĀ›ĸëVŽ. <¸Ā Äg9qŸœĮĖ>…zÖļ–—OĨą6ÎÂ4N[Ęr2—’­ÔƒœqĶėž %ŧ'Ļ3u6°’=”ĩŊEQEQX!ž-ÔGLXÚŸôŌâϐKs×=jŊÕŌ[ZĀéßëÅs:¯‰#´ƒČļstœFDŒlŽpGę:Ws;Ū9)i“8ë×9?ĖÖrĘВđŗÅ@͟Đf¨MlōI$ÍąĢsÂâ{~5ĒĖ6–b}pįV@U}ۏôdĐc‚ÄƒĐ­YŗŠp‘ƒ)ËqˇĮNyJ’YI MņDŨW`öÉSß#¸ĮøŦ3ہ°¸øF@w˙Xũ? ô=­ąHą%  îƒådnœ€‰ū¨šL—ŗG<ŠK˞Ǟąãî•uåp}zÔ×ÖL¨“]Mi.vc‘ŒEēänČ^üPI3y"ÃTĢ…nŠ@“žFzƒž˜ī‰ya|’ÛŨiĶ0w-¸• ŧ ņĐáx>žõR[bŗ1ŧ&ØAš¤ž&eĮ€¤A$᨟ĨaŨęPŌÆŌ´Q1Ĩ‰ŧŗ#į—s´qŒ}HŦ‹MFęįÄzmÅŲyWíqŒ&ãëŒÎxãŽkŨ|ģ<'Ļ.ÅŦ įūš­nŅEQEV/üUē—Oøđ´ÆëĨÅI!ųČ ŽyŦŨ^ĮíļA‘Âŧ$œsĮOūŊpW˙4ʈČ27ĪĶĩaZ4ÆîQ´– lcũcëFŠ ÛuV;\wãŸOzŠqmk<;ÕŨpāsÉëœū•Yb•׌98§$Bo‘y#–ɇ\qSÁ oUCšņœx§‘´ƃ!˛ØëJļh–Dn‰.8ŸįøÕuYí.j˛ä8;°Ø=ŌQŸÂģūĘ!į4Œ¤  G†á[О™Á$ŠėláąÔ-Dßg™Ûv'Ú~bGP™Á÷æ{ok;Š|Ĩ`ōâ‘ū ŦíIfÉ͝$d ‚—…˙x庐ģXwŠKŲã”@ā„ō|­č@%ˇuƜŸĀ~5Iįh, {E.I‘UĪĖ:u8ûŨ=MeIϟąĮv%¸•Dꎑ! m§ŠīÛŋŊXx ļž°ģēŋŽIDņEwÜ2îĪLäņëž+Ûü8ǚĸ*2‰×]Ŧ>AÁĩjŅEQEVū,ԗžl-:×KŠ’î9Mŧ‚U›ĨųŪ¸ũwQžÆ8ãûLˇ éļwSĩ7rpsōŸĘ¸íFbĢąrŦ7)ö˙õÆĢ¤Í¸Ŧ˛ß.8Æ?LRŪë TÅs!8P29ĪáŒzcŌąÅĖO,nŒą–ČVl•ãéíSŠeÉã§?•4î2‰ŒdœŪŦÁ¸˛0bˇ t˙8ĢO ‚Ųā‘œ¨e•ėĩ\(GIb 2 ˇßˇB>¸ĒŌyO:K´ˆ›9^û€<úŊjčļyTȆãāš’åb,8$dœ°Āč=ŊĢĨ˛×-[‰nî”Æ€˜m#ÄųčYą¸’0N@ÆkBķĮo>\PÛۓ†’WvÁė20Oāž*Ôú¤—,SĩŧŽŋ+ÕAīĪRÄēsČŦų-žßfZ%Œė ðUQŨœ“¸9Ī^@Ŧ¤Đš)/‹(y\ÛĄt-ŅW#Č䜀{ž+(šąņKØHfÔâPe•D* ™ĀÁ ÕzõíږUąšŌäÕfYŦķnín>ֆ=Ā0ˍF2Ĝ:1âģ…Ôĩˆ<Ļ\hđũ§Rš8p˛.āßš ņFxĄëŠí ˙PŸŧ2|Ŗį8ųŊøâ¤ĸŠ(ĸŠ+3/‹ĩ?Đm3īûˊåĩęx‚kb‘‹TÎá"q´ãŸĖöí\>Ŗ;Kŗi}Œåļ€q׃ū}*Ë;eI+)Ôc×úS­Ž ÔI’#r°ô^ũzõ¤ŋĘ™­ƒFüdœ)9ė¤ķķŪ˛mÛ÷î&VF>‹ĶJą ÆB]”ũJ‘õ椖EYœ¤gå”ļsĮŌm"퐕Wąõ>õn ƒ*q†`Or:sEÜox¨Kn–#š\ˇAÖφÛĪIpc‰!j…'w¯ųÍK/ؐ‡Uáʎ¯\cŋĶ4û?ļę™¸Ž „´QDķb8†žę,Öŧz-ÖŋŖ’A<ûU‚Ũˇž9;˜ņƒĮæē+ 7JŅím-.7Ü]Á[{|Čp1ĪËۏŧO=Å%Ô͆Ú×M…<˛$ ´:qšPaTūÔÖ6ŗĒëv‡Īļ¸ģš,•åhFÕ'‚G(A#’FIÆ;bwŌõŗC Ķ^]YŸĩemėĖģ‰,Sō9ÁuazBÚÛũļŅ/"ũâŊ…`„\ė ‘‚ÁN܃Á5éŪŠ9tt,Čb‹;Õpßģ^Ã#ō­–Š(ĸŠ(Žnöįėž!Õå°Ķ­v)îwܟé^_ŽkŦŨHî"ˆ Ã´y^Ŗ÷Č#đŽ|M4v ûĩlqÛŠtŗ4Ųbː<įŽŸ2ÅV ĖB…ã“Ī#ĶJ–âTKÂà ŧHúvüĒ#XŽŨwÆ7(!ƒgØĮ^”ûx.ķBmFĪíž:~LåCĄą™[ŽŸįÚĄŠR‹”#§N˙ũŌ¤ŠFķ‰r0ĮŠõ­ģ}Œ¨ę…€å”Xã9Áū‡ˇëqīV(#ÍW\cÆxÁõúŸSč*¸ ´ŽŨÎ3‰9ĪaĮ<éø–)íōMŠÉ5õĖ ŧz}›ÜšÁg#åį }q[2]BŅÛXĪ3īvTGԜŨ‘ōÉ'N0r2zuâĩ5MNÛNĩXX#¸xÉû5– ĒôęXzį8äu>omšēyg•Ęɟ&Ú(ōķЀw ÆNâOLâļã’,%{a§Ų„–úā¨;¤ XFĀ ¨Īyŗ´ ļž;ĢJ)õ ČDW‹ †Mä,ĒāĢãĻQÁ8֞ąŖÃeĢ´°Ū­”ōĒ$Q]ĮûŠpŧĒHŊļį ŽŊëēđú˛čÖûÖ.=ËĘąs´ääzrkRŠ(ĸŠ(ĸ¨\hö7w2\\AžY#X˜—l]ØÎ?˙:ĸŪ đķąfŌm‰'')œšgü!˙ E¯ũûņāß(Âé6 zÅ'ü!žŨģû&Ķw¯”3Ađn€G:]¯Ls ŸéI˙_‡˛öM™#ŋŲĶü)˙đˆčxÁĶ­x˙øš„469m:ԟ{x˙øšhđv‡ßNĩĩĨ#„ŋB0|ČČÆ1ß˙×EÃ) ;Žņž˙ÅOF;ˆ8ã¯~ÕÁ9_—’sĪlPxP6Œāt?Î)ŧp3ž¸æĸŒ+K뜐síVļƒqÁÎyīÍW™]ÄPåJ1?\¯9üéām¨‚— =úsš]­ģģŒU ^G†ĮH–  ´ē›\šˇ‚ų­MÄŅŗO)؉´đÁNã•ĀˆôZ(ĸŠ(ĸŠ­˙ŽqŸjÅA9į?J6ķÔãëS)ÉÆ'ļ)û8bÎHtæ°ä†ho\FųŗģČ'<öíKyiyö‘&,Á uĪįōŽ:Չãsœ‡ ?˙]tū ök˜Ä~QY#ĻrIĪųô­9âVŊ„‘‚øĮĶüi˛¯9PH 8üjUcšô=:S']ÅpxPHš_,đˇ~˜úS^xš91ČģYHāƒÛéLTātŪ öĮ? gw-ÛëUŽ#Œę6ČYūtr ‚~RI*o-™I^€ņšE…w‘éC&)\g× ļļ[}>ōëPŊļ ĢÜF‰n§dÍ%ĶmY ÁrŖø•OFČ8=QEQEUŋ˙qÎ>jÂaÉĘgŒôūU$*ĖAãīNā` Ÿå˙Ö§Ŗã€WOā=2g‹TšÜ˛Bmļ4g9'#žÄ`žŸÎŸĄ] ÅčLÅ!ģ(Ŗt?žá^Ē åÔüā~5Vō<–nK2ųÛHėAŋáRYIlī,1  ’F1‘ÉĢ›6žNFq×ĩ+ž˙^+%š‹F˛ö†éގqŧyž^ÕûDšlã¨Č8Ęî‹\Ší>ɨ4hHhe1Đí ŒFĮākÕ4[ĻŋŅí.e’H•#“Œž3I¨éÍq<$ÍŪGWáúa€či`ĐŪ;™%i#nFÁcĀšöīšÕōđBžN0O¯jVOŋŊsׯ>‘oZRß@ē­Ô˛<ģ ˉâ¤'“ˇh'8ĪŽÚšVšˆüJmüßė°ä›Ū•ķ­ūîsō`sÎzƒÕQEQEexˆ•ŌA'í6øöŲ* ä0Įæ3Rî=X攜9ö§ˆŽ iĘ8,NG˛q´ƒĶ5Äę–ík¨ļŗ#AĮ^iž(ļŒh—‡HÃČ|ŊjZO~˛ķYä›j•XūķŒ gđü¨qwy™oßʡ˙–v¨ÜcũļīĐđ+›×ŧBc-ko1āc¯éסnžĩÂ,RßĘĶLÍ´rĮ9ü~ĩčŪđđđū“6ŊtŽ’xâéåŒwôcĶÛëŌŋÃIVKíVRŽ%”‰pÆ>cŽŨūoČÖÄ;}׆`€ųŅrĮļÎߓ7׊ėü1(ĶōF ŪGj]2°B܌ą˙Į XF`Å[ ĀūU Î2@˙Gâ3ĶíڛáŪtÉëúķ˙Jd­jå­l/cņíÍü’ÚĩĢۈĸŒ4^j p!‚yĮ˜}qČÛÔŅEQEcø˜ãG_úûĩ˙ŅņÔ*ŲbĖA#=ęhØÜrö4đĀ/AížÔõ!ŊķפŒL;ŸoœŸÂšíb{'–2÷QŠPr1–é˙ęĒąŗ]ÛE [™’4ZuuĮ˙ŦՇō-’áˇ6:°ų˜z×-Žø‘HdŠFT|Ās“Îy‡JãĖŊš;\Ŧ|’íŽ??Æģī čã7÷0˙ĸą n<Ö;ˆôĪOSŸJŨņtĖ4ÅļŒ6éČFéĶũj­ĸh#Hŧ–â&e†[u‘Į’¤üŧįåäķÁéÍr"Ô&ŋÁ•V˜ŽpAúWYā§i<3b_?(u'pėōކë˜Đg'¯OēÕiI;tįĶė‚8?įüæ‘Û16áĪoōj/ ļíSÛí÷ŸúS-m×+"Ū‰qȡÖMĻ*ˆ÷ ŊÉvƒ9@“#Į9ŽĒŠ(ĸŠ+ÅōOúũŗ˙Ō˜Š€sĐiĀN2^õ0Č#ŒS¤’;d+„íąÆp=O°ŦmOÄQÚ+"Wcōw?N@įũxŦ”‡WÕ 3ČļĐāRKw1<ūyīR&Ÿga!}…˜ŧ˙zĢęZģ[Ú˛Å.ŌĮ/$õįŊpúžŋy3ėy\ōšę? É\\24™+×iäcۏ^?ô¯ x$FķWˆ†āĮh~îwã¯û?Ÿ é¤“$ZæY%i"TS‡Ulā608>ĩĘÅâ;msĖZ|0˛Ũ$ōGq ڌûœcčx×j†;kwÚPŠ$ŸA^hĐíīÁ(ŠŌ)õÛķÔ:čüæO DģAhg’6t9Î?Zé/‰†ĐČY›fæ°úÕsiCžÜ´åGäöÔĶū ÃΧųÅGá!ˇCa€?Ķo:×Ėĩģ\“ßC/ÄD|ĐĐÃåHÅĐÆ\¯˜Ųß´“€7mŸ”Š=mQEV'Šķũ‹?įúĪ˙JbŖåIl ͇ŪīøSeēKxžGįĸŠå`?Î=k–Ôĩ‹™/ĖŠæ\ēėv=zAĶëųU› 6;FNūlŽząĪžßįëW.oa†<đ0Āë\îĢz䙡8ÁšįoŪṓĖÉ6å<Ašænį]ÅsˇŨČzvŽĮĀPö 2@āās’¸§[.č"(x*œg֞ʎįņk`Ü ~õ_Ã\ésŸúŊ˙Ō™kb¸;û¨§øŗĨA ֎Đ@Ë*‹¸|Äb’0Sfv•!čĮ€ ĪyEQE“â!2!˙O֟úQ5‰㯯øĶœ.HęÖ¸_Y<“#më <Å@ū`ÖD:ž­ ĄEæEĐdGN”Ÿđ˜ŪHŸ*äāį¨ãĶ5“qĒ N÷…PŽËëYoа”Čî1ާEs$Ōϧí61Î œãiŲį]<›đBķ@éūyŦ­V›FĶågĪ™ō3Íi Ēv“Ā ĪãRrqĮSÂäRįū÷˙JeĢđjVˇ7ˇpÉž{l @S…$qŒāƒøŠæî×OƒâˆmGP:ŒĘ6[‡CŒĮ.SÎ3‡pÉ‚B+¯ĸŠ(ĸŠĘņΛũ~ÚéDtņ d‘Š6•#§ąÅs7ˆ}…$,: ˙^–âŪ-BÁ†ā҃’yÎ+Īõ]:9]VO›’T ā}ĪJŸī px9ÆzT)ģāĄäķôâē+ .âL‹Ė’mOŨ'€r~ŋį5ģcđģPû+K¨jqC ÉÛ™8ôÉÛũjXŧ1jū,ēđûJĖŖN7 3(rÁGÔsíø×3a¤LË/ŸíŪ#  €r[>Ÿũnįę^‰cļs–įŠ˙õë7Äw ‹­Q˜Ú"ŊÎãĪĪN?YĘ} Ucƒøãüâģ˙ (RČ9bāŖũq˙VoŠ"-â+8e#ƒˇœáŗƒßˇŖdaH”Čüŗõ­•„`AÛĀÅeųrÆÜm]=ĀÁõ‘:ÂļĘîlÚą´õWÔĩ{C¸Äˇ!ņž…1­i[#‘ŧÔuŠÛvߗˇĨCáßųM˙_ןúQ%Qą×ÆēŒŽ2˛BžQyæ|;”" ‘ģa9ųIÁ[SkĄņ Eu*ļž[Æw™?xÆ9[ ƒŗ &H#Ąp õ´QEQY~ ˙t_õûi˙ĨĶŨœPyųŽqô§T`cĶ%‰n!x&rJĨYsÛ<ū5ĀŲÜd›ģ Ž|§*8Č$:äõ5îd2F,JŒ āū&ŗ>Į#Jģ›t#úfˇôMSI­u?ą‰,`™]‹ČxR3´“üŊëēŧ×´Ģ–ĩ˜\`$ĄÆ#sĮ~‚ĩŽæŒœžy4åᚿŧCaWkpŅ“̇á[đī×5’ßØÎ [›2Wø]‘ØœŸĀT7—Úē ŗeŒŗrBÅdŪK­xŽįn›Í_ģŨ•GĄcōŽ9ĮãJãÞ!ĩš8dĩ“ĖrUe9üAÅMw¤kú]”—76.°ĮՎއ×éM¯.oaûR•X™ˇĒđáŪˇŪéBĒũį9<¨ÅvzQh델~‡č+?ÆG ­ĨËž<Ģ…ĪČį"´,S*I'Šē¨$ąęÜū>´ŖÜ$*ģņ€ØįĨ7ŊއųņŦų  *TÚå`C ~aåīWK““Ë_ūĩM¸ŠlķŸSŪĢxlįJ”˙Ķõįū”ÉIo¤ÜÁâKÍMîmÚ Đ"Dļåd\ęåˆ<ŠčĢÔg;F2Žõˆ5$r0=C{hš…ŖÛɕ 2¯ŽTõŧßQ˛{k™m|ИtWĀĪ^1×9ΝJâĩ{9ŦdĘädjô?„÷$Øę6ĖFíé&\Aü8uڐ-{§še' zŸAMņ›đž ‚Í#ŒîūēķÍ"íHŲ*‚X(P¸@ĪåÉ­›tÚšØ dāČíéí]n„ņųs¨įÉäđ3Y^5c&Ÿ qãwžŒ3ĀÎā?­mY‚cP=ēķVs#žĮë×ü*LoÂĄ`L€ÆHũ?ú՛{æ˙ÂCh¨Ė[HXg†ÁN1WîØ|Žœ¸eÔāŸË5nËĮ&㌓Éū€Sü.sŖšį›ÛÃĪũ|É[5Ák6×ŌüEŌnė ŌO’cÉs¸Üĸ2ĖĖŽāū ŨŗžöŠ(ĸŠ+7\˙ŋëîÛ˙GĨ9px}Į4€`Žp:ô§+ÁäŪ¤ĀŊr~8ŌZ{dÔ­Æ$‡‰î;ÃúûW ¨y:–œFÜ\SxūyūT·š‡ö_‹ŧŦnGI<~īâX(ükÕõṔĀÄš?ĨEãW)á;öíūĐ˙?yÔFļr€xÉĮs˙뎁hˆyŸ3Œã¯'=úWCĸoKŲÃ(M…9Æ0ĮŽųō¨Lm}iŽ9R r@Áüj•ôgûJÎdb˛*HĒ1× Oj‘K•ãUīÔįôŠbNJP+ėŨ´sŸ˙U3Ãg:T‡Ööī¯ũ|IZõĪŋ‡ĨGŦŊÁb6iË+´.ũ€î%ˇmĪ$wÍtQEņE›­‚l#Į_ĩ[čäĻĮ#ci8ÅJTąŨƒøĐWĻãHcäîĪ#ƒŽ*]âdV ÷äŪ ĶäĐĩicÎbf ;¯cũ?\ĩņ{-J;¨œĄ$:‘ü5í0^ޝe¤ę(ģ|Ų˛á'¨üÁ'ŒpžŋÜN<°0?ŪÂ"¨…#r§(ČätĢ’–ĐáU†ĖŒŧ“ũkĄđüĸMRXÂaRį§9==zŠžūšNPIķ¨ÁčĮÍøJÕļˆ$(3‚°Š í”ôûŸĘ”°äŸjŠV?(ëĐõéČĒZ—Ë{Ļ1_5ßĀÄ~•$ŒŽĐ›î‚{ƒÁŊjY Â>Y‹Č9cׯ˙_Ī ķŖ1ëū™vs˙oVÍs7úŽĄŽ4Í11c$-3;G9w`˛Ą•|ą‚#ûä}î%kĻĸŠ(ĸŠĪ֎,c?ô÷m˙Ŗ’ĸPˀ9ę1éR†8ųīFæ?Nų§sõįō§‚sœ\˙Œ4¯ˇč¯pĢ™­Áp=WŠūYü=ëĘ/mÄö%‡,3ž:zņÖēī†ú¯Ú-äŌØ—1:OOLœ0üņųšīŧDžg‡īĶĖĮž?ZķKwe˛E|g`Žx­eæŪÔ•¸ū˙úõˇĨ'VIÁ’ßi'Ą‰ũ?­h<Ģæ1š?Ö¯C.m×Hô§Ũ2HųNJE`ä Į€8õéū4épW<ô<Ö^¸ k{YæEuŽqÃ0ÁČ#ņĪOÆŦĢŊÅŧrՅAVĮ88#û˜vF:ŗr= 9ëLđ˛„Ņ8[˰3˙_VÕpZō‹Mœ’H$6ėQ`˜*ÎéSŽsŊ@šËāw´QEQYÚ×üxÅ˙_vßú9)€"œmŒ z8ĮÔŌ†§Z`āū52r:ņéŠyŒ60G5ä^$Ō˛ušmŖĖ7Ärq´äüĮžbxfđhŪ0ŗ20XĖÂ6b@IĮ'Đuü+Ûu°ÃH¸ØĄÉ\m#oÔãmãÎųbBsĶŽŊ*ģo ĒÛCmčyĢ"qĩ§&Öo1G9,1ū;kVf&O•€ ãfĨĶ™Œn é+õl˙ĢŦŒņ¸Č^ÜqåR+—‘H Y ÷˙­N‘ \ƒëŌš<ŸØ()&Elã€yÎyÆ6ž‚Ĩđͤ>ļŧ´2,ŋ‚¤•äđ8Á–Eu ÷¸=?7J¯áŋųI˙_—_úQ%k×<ú™> Šmn¨.ŧˇ”Ģvû>ü—9< WCEQECW˙8˙ëęß˙G%0m,21Į¯Ō—h#¯˙žiĄ ´Üžž”>:šá>"Č!†Œō5gáPfđ•Č ü×mŒ÷Ģ߯5zĐË ëæ†ëĪ=q[ˆŲ]Įž;ỐŒzK 23úSÉ*NM$°­ÕģÅ2,‘žC+Œ‚>†ą#šY4Ų^Ö,ŅH…"ŪU¯ŋjč6˜Ė3q?ūzÔŖԊ(ĸŠ(Ēē‡6ŖūēÆņõĒ 1ÉĮåFÖĪq׊Ąx#&Ļ=ŗŪĻ ŽE) Œ‚?Âĸbzį“^uņ&āƒįœ÷ÜO˙[ŋ cxF%ۂėÎOLä‘ŸŌŗo—Ŧ8oœsĪ_ŧOõĢQÆā;ô˙?•)…eیAČĮ¨8ũ*ôF9 *ü¯8ÍIm–#vA`Öĸ€ŖŒ`u8Š#õ&”) ß6I9 qĪųÅ8`ä>”āį“Ÿë\×‡Žœ_j6ōBҎšXe TŸn=+sÃÜéGūžnūFzÕĸŠ(ĸŠ(Ē÷¸đOū<*ļB“ĮĨņžįđĻŽŽjorrsß˙­OΎĩãĨ!_ūŊyWę<ŨSĘĀĮ9$čU螡úMŦXÁ[XAãžŪk’ׁ]jāĨË=§ëS"7ē\˙Jļ€ēuë¸ķī˙ęŠmœ3œä‚F:˙žjėH~ŅÎy<õ§G\žsžĩ*0ĮŸJW`ŧT[×vsōžŸJ~PđqųÕ+ËÕ'•ĘȸĘđ:č?:ŗáīų0˙§ĢŸũõĢEQEQPÜ˙Įģ˙žõFFÃ`3éū4Šų8>´đ;ūU $÷ãÔԙ4Š9ëڗųbŧƒĮķ4ž"šLnČį8A?‡?ĨzŽ…?ÚlmgPģ%ĩÁ^œŽ•Ëø•ÖØ –;_ˇN:žÔ;T(˛:'N?^†ŽÂŒ€u 9ãĩ* ?L3?zĩ0bũ•h+qÉįÅH÷dwãĨs‘€ãč)ŒŲ;翜„žHâ’V*¤véYŠ}>ŸáŅ-šQ+ŨÎȁÕGšääNßí~uŌDXÄĨņģ⿟EQET7_ņí'Ō˛Ø‹ģ‘ÜŒd˙89Ķ<ūU* đ:ûĶÉ;ʗĖÁ#<˙:‡>ÊĄœ(ÃdwŽĮzdŌ]C¨Á hŌ0’2€vā“–īßĮnÜUī†úÔWVoĨ´f9íÔČ̃‚ŒÄį?Vũ}Zņã˙¸5í NˇĻ=IģüzŦ{A^šŪ˜qßíq˙Lž Ņ›îë:n;˙ĨÆ­!×ô`GüMôĐ;æî?ņĻohÂCgNīö´˙dšū¸Uą uÅÂëZ>‘eŌ„ˆęęŌĘĘĘr21­J(ĸŠ(ĸŠ(ŤīKEQF(ÅQF(Å!ātĨĸŠ(‚Š(ĸŠ)­"Ļ70Ž{šuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ_˙Ų Pixcomp[7]: w = 241, h = 365, d = 8 comptype = 2, size = 14340, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¤ŸZZ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŦëũYl.!„Ú\Mæ#>øöPĨG;˜xtÍg¯Šƒ)a¤_í$æū9Yņ|EĶĻ›ĘŽÂũŸ'ŒGÛ¯ņÔr|NŅá$Ii~8?"~!ŋZhøŖĸ˙ĪĻĄ‘ØF‡˙fĻ/ŏļ?s“Ķ÷KĪū=O˙…ĨĄī-¯Ë€<ĩį˙ϟŠē¨ci¨ze#Ũۘß´]ÆÛPĮ¯–ž™ūũ#ü[Ш6š—Í÷vœ˙ãūôņs@VÚmĩŪ›#Č˙ĮéÅīƒ˛ę?÷Äü]âö‚§ gŠĶîG˙ÅĶ×âΆßvËR>û#˙âéWâļŒÃ"ÃSĮŽČŋøå5ū.x~2Ûߊ##䏟§ĪMü8zA~ā˙ņtŅņÃ%öˆī‹zĐ˙ėÔæøŊáäûÖڐúğüU8ü\đāˆ¯˜ģcCüzˇ´?iúũ¤—Vé,6čÛ<˂ˆ¤ņĀÃī/įë[¨ë"F Ŧ29S¨ĸŠ(ĸœRÖē Ŋĩ+Ú9?ô$˙ įnŽ~ĮkpËíĒI@qœõįķ¯4ŧgkš]ƒ*͙r$ũ_z‚VpĢûéxWĶééK'™,*ÛÉųCHžøĪOéíUJDmōO •/Šę*%ē@ûÆŅ•-‚}J° &-ĖęvŒ€sƒĀöĒR:*Ûí ¤îhĀĮ§?Ëō¨w2&į)œgˇų˙>ôĢ ČÁŽÆėßįŠĸD-ŊÛ9 ¨˙­H¤Hy9 ņƒČũ*H†e˜—ÂįŠ>įۚŗoœŨqÃį?­$vņŧ`ģ9#ī ūđëPÍ1ǁ’~ņõíôĻĪi<ŧ¤‡i_ģ!SüÅSk+˜o7hîxÆO8ĀÉÁ 4lG'h<~ë Ĩf𖤰ÍäŗKpË.Xm"8pÜsī^ĨĻoū΀H`~bI t' ‘‚A*ŨQEQEaëŠLņÚ'?Ē×=2!'~ ‘ķ ŊxŦ‹Č4ș.§UˆšXƒ”` gļßĮĮ_<3´ąEŪ?)<°Į=ōyŦ–‰Âí'v8<žŸäÔq1  †§ųü*´I"9 ÜņĶ­a¤ 1 äúTžH’ŲœgÍ+|ŨG >ŨjĘIU8MÃå= ˙=ęwRÃz ŽāT ŗÍߖÊČīžĩ^âW‰‚E‚s¸’7ų}j'gÜģ\ āü ’?ĐTV„´í’@9$įüö­ ō°#!LŒ~9ük6{’āēŠmČqTf “yŠĶdŽ2øTÍ,˛ypÍ"ÛHPFā9ëĶ­Tš‰ífÛÂļ~đ'§Ŋ{Âģy†ŽR'…eœ3Ėģå`$Į+ÕlVD°ˇY˜<ĸ%Áˇd㓜 ūCéV(ĸŠ(ĸŠ+Z,ŗÂGüķæŸũzæ¯øŪ%eˊ@˙gņüJæQ[¨åŌuE ,$¨t%q†ėĪ5‹ŦĨ˛ąē‚tI˜")nSŒī×ëŸzÅûfōÁđÃûĀuįŊG,ä0ŒÉwīūJˆČ€ƒŸ˜wīūÂžŌ-Š‚:žŲúŌyīŗ~F'§Ōĸš&‹c ābĸķ )p#fÎ}ŗū5f8–5;@—?6ā1_įĶéDqåȰô ģžœį5Vá]2¤ŽpxĀįúU™ŦŨü˂ģą×į4˛HŠĄLž§‚zûUk—PÅdx[yųO§|ÕF˛}„ĒgLg#üũ)ŗGįÃEåãhĀCס#×ßŪĒÎÅā\++!!Ύoë^ÃđČŊĮ„/D“Ë\*vl‡v3€3Œđ Éq^¯Ļ˜›K´0ēŧFØËŒÚ0F*ÕQEQEdë9[˛ÆäūkŠå¯náƒæ”ũßq‘ūĨaë:…ÜQƊŗÉ'÷mÎzü̊Ôír4,B“üe@ÉëíÛ>˜Ŧ垏’‘"g ,Ŗ8úãĩDX˜ģdōŲî:v˙Uyƒ!Q† ëõéĪ^åšw9@ Äōß_SÎ3í^ŊđĻŪWđĩėV˛ym4ķ…u}ĨH9‘ĪåÔu¯SĶâ’’YžW ÷¤!›čH8éœsV¨ĸŠ(ĸŠ+/SlJŖū™ąĮâĩ…2ļō8#8#ŊPŧžKV,ę)õīŌšíW[ˇšĩ8|xĘįŒxĀĮ' ųW+yis#Ȋ‹–PsčpqqųUImÂ@rÁšûĮôūU_0%Fķ܎ƒ5"¤*ō u!†W8ŨnŊ˙ȧÍj2Ą€0Á!ŗ\U)c¸U2DąŋÃ××ü)Éįčˆe”On*2ō[šˆ…ÚHČíSÚj—1i2Ų‡ 9VãcŸËüŽkNĘËΏM%،wQ˜ãÜ7 ׌ûĢâE ōŦŋÆ^Ĩa=”qĮ/˜Ŧ˜VgÜ Üįž:U)gfC“šr:q×ĨEo$H Ū0@Ā Qö‰íŽFÄPzî# ßŋ§èɧMvŽ),2§':㜟sŠŽxˇIsj芁Aa÷šÎq遚õ…ŅgÁw҇‡žX”"1eܐŒ€9ãō÷ÆMz–A§[El"UTÆ6€8OlUĒ(ĸŠ(ĸŠČÕN.S×É|{üËYS677Ļ8ÅsSxqī$3\Ü.K`GŌĄÖt8lôčüŸšáH+NėÖšŠíĖ6‹FË8bĪØ¨ãšũ P¸_Ũ”ÎG €}9æŠėQ6Ü(įŒ•ĘÁ‡+œĨ:ŦNFÖ<äŧÔÁŽÖķ>U ž3Ī<ã¯ˇ5,ČĢ(vÆÖLéųÕ)âũŅųŽKtĀōöÅRs4P€¨­ĮĖØį§5ŅY@/b—OŅ]AÚ-$cąˆLí`ŧ¤<ž ūāŦMįēĶŧËŌŌŪ%ŨŋˆįŒŸËŠĘ%ˇA;X’_ŽGŋįQĒ:#hc=ũô˙ĩ*vŒ1ōߗ֟)ËĮ ÂÆ„āÛ>ĮĨEy$ĘĨˇŦˆN8lqüĢÕ~„“Á:‰†åî&EBHÉ)#§o›ļ3^§§‚ēu° /î—åQ€8Oķ4ۍNĘŌæŪÚæîg¸%`ŠIUZR1 Ÿ›=E[ĸŠ(ĸŠ+Vm—ņŽŖČn1׿ZÍt$cnqĪZŦ$n<‘ÎsTæ;õÔI2cå7ķĪ ũk\ĶæŸ]ÜĢ‘8ÆF ž?rڍŒ–W/ )܇8Į8ā˙Z ņns$gi Ÿ”t?į4LĻEDœ‘´ĄĪôdãđÉü oé5ۜ.-][SĶ\Î"#å¸\ŲË{…?y˜Õ=_R“Uƒû@¤af\íUčrsí×&šë9Ėp< ŠL}@úҰx×!8i˙&´-ü˜Ž3ö$Š€#č*ÅY™RÎ{r1üęšVX–ž äF_ķđ¯Xøc˙Š[ÃÚ¤72/—/ÍōÅĮĪÆ9įƒô=¨i›˙˛­‘ųoäĻäūéĀČč:}ĐVVŗ7•â!Eã[™<ÅØw)ō•ØĀā=TŽÜĮAEQEVF§˙éÆG’zųáYōÆTžxžĩ]×pqךo’I•åGũĒUŽ'(ō/ˤO8íü̊ņ<Ą5G‰ŖI&U#+Ž€×%3 ’89āU¤‘f1¸#ŽŠá;{Œ~ZŗbEę2šiāžšÅUo™‰TÚ qƒœûUwŒ´A$!?0įږfŠ@ƒƒGŨ4û Ų,ŽŖ™#ÜĘNB§ˇ ‘ÁcÜrâˇt›Í;EÖîŽĩYmŽ-OŲdˇŒė’1´gå ‚qŸ”‚“¨ Ž)m–"rTŽzwã?ÎjŽ›4jĢ ŅĮ´Ÿ”ˆ×x'ŽO_đĢ7 ]¨1 į<ķíͧé֛xŠö…–(Á^Jq“íĶļEXēŽI,Ĩ c[۟ːûŽ Sj õå€üø¯hø@°Ž…r!ÆßĩHrw‘s^‘\Žēķ?Œ´o*y@7IŦĻ9VFÛķmBœÃĮë¨ĸŠ(ĸŠĮÕú`]ØĖY˙ĮĢ9ßæÁ9ķëAûÄ {f›ĮųqŠ–  í>¸Ž[Ķæŗž“zīRį"šiĸ˜Ī2*å‹RDǤĢĩ×î;I#ĄĄū´Ō͸ąĀĀ@Æ8Į§JŽ_ĖÚTåO#߯?JĨq’ ļUs÷xü~”ļácUc‘Đļ1SÃahō_Ũ\IŗĪō†Ņŋk`p8ÁÎ}GŨ8Í]Ķ.´CFšŅž9ZeÜÅs(gĘP œ}ȟ¯ã^Y"ˇi#ēŲ ã `8íƒĐ‚:c˙ÕZåíôËYuDiÂ[Dɔ,z–ČįhĮí/lÖdz…ĨÕŦ“‰EŦęCų Ŗdķ´ƒ‘Ķ€sõĻø™ūßŦÆČUmāPåW1ŠĀ>œŅĻi…ãyPÆJ€2sķzÚÔūËm1†Ū$ˆ¸|‚›Nsō‚O~ĩΉ3/–Ä“ƒ‘Œdāõã­GnÛaČÉÆîĸŽX˛ü¨ÂAŨ°9w¨/ĖPžåē.ÃnTį?JˇgÚnbžY AĀûŠmĶ*ÜËí “´ļ#üšõOƒŦÍĄ^îę/ãŠ^“\ļ¨Ö'ÅļĢ>ŗb8ĖOpÉį ė…Ũ†āāmᎠ u4QEQEdęg9î"ŋÚŦŌ3†$‘ßڛĮĘŊģzø?7#'úÕMCQ‡NÛ$‰$šÜBEŒāu<8ĪLįž3TŽ|AĄęZdčķœí?š•@ĪĻ8ü…p*ÖÍ;ųrī\Ճâ{ĖÉoj¯ōEys|Į>ā§Ũi–üļļöņI76ņŠLĢČOLũއŽ0 G­^CŠŊĒBžD1E÷ ē3p ãРˆÚFSō–L O^Ÿ§ķŽ‚ÆÉ"ļ‰n|ô2åą]ģBŸOČ÷ī׊“ÍīąÜ4sDE4<‚x$`˙:ÍŧŊy ČXī-š‰<–=[ëYļŌ+ÜģēŸģŽ1ZA҆dVSĮPôūĩ$IÁ˜ĻTcoLퟯĒj2ą×šÁą#Öē} qĨK—Q,‘:°ųIbqü,GOÔtŽgVķYūÔFSĻ˙q^šđ^C'‡ŽØą'ín9˙r:ôęįõŠôä×th.‰’I#[ ‘œm Čxw# œAEQEVN  Ũ0ė"&ŗ6ぞxŠ^&  Î8¤by9ë^AãŊvüx˛H­Ž8­Wb…>ĀšįÜĀJM?ÆÖ_gVŗ\Ļ Īmƒœg–S‘Č ãē+ŧ?â ĐXŨG#mlÄSË} uŒqĮ˛¯÷N|ŌîwŊŧ’âābIœŧ˜Ánŧ~5Ų$`ņĮēHQĀ=3N hYéW…åØ"p]¤ ŸlāsÔûVÜPÛBÚ5ũá•FÖMŒ.é:ōq¸īč+BæŽZTŒ “Fį¨'§ãÛŌšģЁ÷Äį¨üúN˜ŦIįUP0Į~Y@T Jäũđ3ØV”į… §o#“ųÕģÜYŪ[ÉądSĩÉGÆåãŽz;ûÔˇŅJÁÔĘņļ$dž8æĢĢĒ´ĘÎ`Ž9gFX¤Ž6ķ%aôéŸķĮĨ{Áø#‡Ã÷^vĩːH=Ō?ZôŠÁÖ<ņ­é3zb.ë*DG”GĘA“å'‚ŧm#“ƒÁ$oQEQE—xŌĨ„HVĒjŧã8<ˇcol~5N1ļPŋŨîyÁô¯ ø‹naņÄÉå‡m>ã9¸šc°ŧ.7)N™ü˙ÉŠ-­æã–6xe,<ļ^ Žx9Ŗé]5†‘s¨ ‰˜y1g¸‘~čČëˇ?ŪÆ0xãŽ1ZąØ=´(Ō[¤MûUagY]JeS@äd÷ã¤2^ŧp´rÆČād>V‘ƒœŒF{ Dŧ‚ÎáŖB—@ąÉ#ĢcĀ98ī×<Ž˜Ē÷kåĘLCînÎâŊ‰äō:~Îj—¸P‘vaģԑÁ#<íīYööR]ÆōœíNNA9>ÕĢĮ’ÛŠã…%If´-ŅPÛŗ7– „#FĶԟķÚĒj.&ģڛE yᱜVĨ˜?bķ˜ąåTd1Čzã‘üĢ#U¸ vŌڄ†puĮAYRŨJŖx”8ū žZö˙ƒlÂķ¸flÜ>wvųPqí]ĶęÖąę‰Ļą“í.†E'ŲwÆĐzņœ×;­Įy/Žty'{kxÎéE¤Ŧą8 ēĘĢķn2HÜ+°ĸŠ(ĸŠ+2īū?%ųIũŌtúĩTŒ4“쁁‘Šž|Ü:úįĨsúæĒtĢ8ĻH|įžo)QŸ;Iė =:ŸĮŧįÆŅŨęÖÖúĖŪY” ”@¨ŋy—ôä¯Rˎ§AQå ;IE8B:{gŋ5Đéē4ˇđÂé˛9dUC9Úš$íÔņĮNė/bĩŌåXŽ,ÍÕĖļëä¨@ą2ŋpŽŨA9úÕ;$ŧo*‹ĢŒ4lŌ䯧8ęA8Æ1Œ ͚k›˜ †(ĻHÚŨa–5Æō(H8<“ŽŊk(Ĩų§Žbįq&ėŽzō= gŪߊČŪJžqōŸcÛéũsUô}Mbyf¸%-Pg$û9­ ›(ŌDXČ ž˜Æ?,`ōi†Ø™AUŸ Xg“ØSīųˇƒæČQĩ°ŧ(Ī_\ž*‚"de‡ļG_ĶéYi•RÃrr:ži÷’GôÆDŪËōŽÁôô˙õ¯ƒŒ×@(Qö‚@î­uŌ‰ßÅg0Ē!‚g}ᰊ탸œ ŅëÜG¯é ŗ°‘Ļ]€`Æp~n[<|Ū¸ĪAEQEVeŲQu6ėãĘOæõmļCŸ”Õ4 q‚@éŠķŋø‹K´xô̏Ļ3ÄÉ.äU##'ē“éúW;/Šü?ö­Ž-īåK•Û(*Ē}Ā?08ô< äŠįm4čouTTģŠXHbŽAŽAä€õ둑ÍvvŦë+Į{ aģË%I8 ÂõaÛhĪZ¸–W‘ŪLR;¨ámˇ}îx8#œĶõŽ^â+ëAŅHTĄËeÁ`H<{Į°ĢúeîĒ@tĢãåģ6虸Ā^šëĮ^˙bjP\č÷¯Š¸ Ã)_CëõŽzu–æāF™¤l(''=w—EeĻ%Ŧ`ĮJ 1ķzū?ZĮwžA&õ,Ū^æw|‘ĮRNķ§<á!ų°~SĀƒŸĖūuĪĸÆ%$Ũ—ĶƒÛņõæŗ3å—äŠÉéÔ~•kOŠO2YJ°˙V0>sĪLūũxĒ„ėģe#å'!Fs××§­@ō+ÜE  Ī#šö/„:%éÚųįÛå_ņŽĸáUüafIûą`Zb… gË ąÎĶ5„dņ^‰:Ū2&Cjd8”¸pžbŒ¨Ũ“†áˆëļēJ(ĸŠ(ĸąīf "ĸ(ÉÄŋøŽ/›$ķžLrŖ¨ā^]ņ[I´ÔÔyŗø‘ĶūųW™g*ÜHû žßįú֖•l­ ’6–Ú¤ŒķĮ¸õ5ßiĨ.ĨH$2)o.Rsô㎠›Ģ&š‰¤™"1ĘT™‹ĀČÉ8’r2FxŽ&ķKk™ˇFąŦ­’B7æ#ļ88=1“Y÷ rȘ™ųo›ŗĶĨeĨÃZ^E:ĸ;#yƒ<ƒÉĢ:–ģŦĘĻæ_r"QĩGĄĮĮ&­é2ŋŲå ‘Æ[ĮęiAeÚI ČGc׸…6WķcŒ9 šTõÁüŊ*Ŧq2n9|¯'ëRDĨ q¸Ē78GUvˇLî%÷=}*ŧāŽIɘīŪŊƒāĖžo‡¯ ÅÁ˙ĐVģ9šsâx#T>G]œHAæÆĖr?‹9 q€MCĒ[]ËŽé× a °Ā­›†›į‡s.p›yČ\n ‘“Á­ę(ĸŠ(ĸ°¯ļ˙l\ü¤ŸŗÁĪü j!* ;ö˙?J°~F­sž+ŽûėŠÃtšWSĖ{HÁšÉq‘šđģ›W´¸’ŪD+*7ˤcÁ}°~˜Ž¯ÃÖ6ĶXyrģ‰LeŖĀŽ>§wū;ß5­¤D#ĶÜųâ‰ Š€…9;•—‘ū~™"Šož0‰5ģųHËEģ‘žAŨ‚1Įn•ĐišŦ—đĨ­ĘŠ”)XNāŒņŒņ.vå[Đũj[Ũn v„ēÜāßķl;¸Uāc~Òx=øVKŖ Ãz¨đL|`w#8á‡nĩB=:9pĀPOã8$y˙õÖĸi"-Đ´VÅBČ$hĪš w žÃķCû:âYŖˆ8+”Ú¸g‘ųîü­'”ĐĪ,ly_+& *rG¯ļ}%ô *Ņ˜ö@äķ’:pzSėíĸxO͆ ĶiÁĸOŨ) ģ99=€?×Ū ¸ ge“~ Ë{U;˜Ūia“'#<×­|ŒĮĄj Fē˙ŲVēiâą˙„ōŪG˜ŅmōEŊÎÔų˛ÛCm'Š˙3ØŪŊĩ3ë67ūâl¯›h¤ÂMŧ—įN=2k^Š(ĸŠ(Ž~ōB5û¨ĪŨû=ļ=rZ|˙*|+ģđįŠŊáFpĨrū1Ôôí.Ō9ŽîR)ƒŸ.5ō0F8äôČæē÷‹4=N%ŲSO(NYchĪû?{+ėxįĨZĐ%ItXŽâ™Ŗž9<š¨XÃn_žÃÛō54L%„¤¸•ĄŨģÉ\6é 8#Æs‚p*MRᧅ&¸ŊižKxūP€Äā§a‚3’SžÕ‡u{qiq,…†é‰ßŸĐ՛/:.ōÂKˆ5Eur˛FO›#Øį×5§wâęŒK™b)úšãi7?Āg¯ŋÖ˛QėĩJ;=>ë{ɸÚT2ŽGqÛéÅiÛč×2Ēę6ûX–&<äcÛhÅ\ąŌR{ų• jdgQ€0Ü3Î ĪN›‡\W98‘õ;Ÿ8!M­Lį;XgÔū4jāFWåŪ gŒũ~ŋJ†Đy‘ˆÚ6õ•ĪķĨ´FDcžlcôúV ēųq’T?pp2\ū#Öąu o$č¤ĸXŽ?Č×Ēü'ûPSøø Įē˙õĢŌ0=+œÖRwt#gųWufĒ÷h#}˛ž§l/ĪúÕ;™å´Ŋķ`‚i.|„¨#{ö¨ôŨ(Ī DËȈx_‚'Ō¨ę¤#D*crAĮSÖ °Ûˇ–$†#Ąū9ĨÍŧ˛6gĮ–ã×üô¨Ū[eIi~FP}9ú˙*įįÔLąîĘ6Cpq͏č*ģ€$kĮ<}áQĄ.Ą§BÆ7æŠ4ûŦIäcŒ×ПːŅnÛSC›vNqÉã‰ô&ēĸ’!´Č’ĢB6,ŒJ’Ä– s‚?Ÿ8Î XNĢg9Ɵ “ž˜Ū1žŖŊHĮí66öĐĮķ$i<ΐw€Ą9ÜBzÎ{ōkQ ōWiqÆÉ2CgŒãß>õ›Ģdšq¸āŠ‘’sžŊjΆã_øI­›‡$ ŖctõŽŪŅ„ZĖRÉ"„>ŖC^_Ējš†Ą;Ou+°,YPą:Рܲ˜jÚ2Ã#!šÜmA“Ŋ°Āmā€=08ÚĊ–ö˛¤…ĻD HõųrÜ`đŽ-jŪ]#;JžQ’HĀĄ7nų˜Į }ŪHā÷čG;$˛´Zų0Á$Yˆ`–ųīŒō>ĩsm¯š$O.5B ŠĪRFONOķĢ~X­õ÷šŒą>Ã1ÂeÍfŌŨŦEƒ¸Rd€9ę+Ö~ .Í7T]Ĩq2e}85ę…ŠMvž$Ņá‡Ęû4‹1™ZP`)RōĀƒŽ›Î2íQEQ\ŨĀđ–_‘ßaĩü~{šĶÆ{zŽ*Æ Į¯r*´äl Æ221ĶđŦŊSJŗÖôél•#Ē0čFĪ^ÕåÚĪ„u-"rcŠ[›r@I!_æŖ8ĮåīY–77dåÔÕXivÎd’c*GŲĻrIێĮîƒčI8ÁÅ[đƇo*ÉĢ^ÆíoHĘą=L~>†žąum­kJ÷I 1:ƒæ†•čõ—v°ŽŠk$ڃDŌąZ3G‰C¨eŨģi9Úz/×:”QERŠZįŽ# âkö8˙;PīģŠF0Aö8íVcgōōŲÉ÷æĒČ$€sĨ˜ĄįúRË =ŦÁ#Yd J$§å,@>Ų¯ÔÍ䚔ßÚNÆtʡ˜Ú3Čû “íéZz5Ķ4gĶ|‚§a$‘Į^ ãė0x<]I RĖ>Đ3´Ŗ8“œ(?Æ÷'‘Üã55Iāš’-#`ąÎO wíô÷­(g’˙@‹I˛Ú.ĄŖ(Ā‘I-•#ņĪJã5}.ęÄēĪp ŠōšŒîÁôĪÆēÛ_&ˇij…Ö-AX+F7ŸU'Žyųzƒųš:ŧˇˇŠmƒ¨ĮæĮŽĒ´d“ĐžqŸ­t÷× ä›uŒCŠVo5wŸlíūÕü-‰ĸ‡T ėßŧ–lķķdu5čU>ŖĨGâD°ÁŠ$ $yuY$@Ė00wĮ`äã8llŅEQHĘ‚@Čä{RÖĀđ^œu´ļÎ?Ūž§ŒāqcS(% ÆOŊF˙2Š+ׁŒÕü€œ“ž*0į Ôp? ŠķNŗÔ îÖ€ c \g§jķ?ø~o^GwĨڄą ɒû[$āį8§NĻ’M÷‚Ūd2Í#0ƈ$„ųÎāWžšōjŨäwĪ,žlncڍīFįîú(ëĶÔúTZmėļ3<蹈Ņ|ÍŽåģ€vãāžūĻąõY…ÍÃˇ™šÎ eõãŽG^j+Ũ ęІa—#v#|•ėF Ս2ÍlDxSĮīļĐŊ8īۜũk{UĖö@gËUÆÁæ`íę8Ís‘˛¨Û.XC.ĶČ?ÖŦÛĮåŽá<áÜŊT¯Ũ#ųU[ģpd,ņJāeÁ/ĩGãŸnŪ”ē%™ÔodR[ˎ2ų€ãœõôõĢķÛŊ¤†YŌ@(ޘ ;dc¯ĩz7ÂųDö”›?hU8öQū5ßVĄŠĩ¯Š4Ģ(īm‘'Ža%Ŗ˛ $?!V@Hn|ã#įœczŠ(ĸŠ(ŦISwˆ¯ŗČû%ˇ_÷įŠd@ŊĀõĨBc9+RũõčĩF˙s?Ž:RÆ2@"§EʡĒ×Ā}Š}Į‚ĨAc ÷¯#°lõĶ./NûfŪŽ ƒƒŒq“¸¯Į^xČuä1üđŖĒ#“ˇ€ØëŨŒū5ŽZh´ûˇhĖ{Đ,yœƒŒČÆ3ؘô¤ęo+F¯ĸ sž§ĸr3ܯâ+`Īĩ–åϧV^ĀōĜ˙œURķÜŪ“q!ÚėIV8'9÷úzšÖžk{m%’fFfL’č[ĪCž8ãŋn•ËÚē<ØEÜšûÅĀĮÔöīW y7j@fuÆŌAŨیS „És¸ƒ0ÚÄįĻ{ÖļĨŸ¤D~Įp#2Ļܨ^G\g9ĮķŽ~ōKš…‘] aP/nŧWđd–Ņ56=>Ö8΀WĻVôE|Oirˇ>XXö –”yå'PF0zwčQEQEVIĪü$¤ųtˇ˙ĐæĢ%>L–ĀĪ5ZQ´|§‚:žÔč_ž~æ1Ā˙>ÕhČIČ eųĀôĢkžrx'jz×#âŨ-Ä@7ú’Io@@ūĩÔ‰ōÚHČĮjä¤âšqjĖr œ>1Û8ü˙ũURWĨÚ¨ė ØWāõ˙<ÔWąGH7yŧĪQõ˜É–­Õ<ąīŸđŌ­+.ĖníĀâŖ$íQˇኞŋ·`ĒĒäšãoæ[›Ģˇ`|ļ‘8ÆFGZėŲî:SpŲ8ĀÎHŽOÆvöז› ҊéWpMØĘ÷lcļ;tî+€ß;rvŸŧ8päũ?*§–ˇ+ËŲ¤˜¨¯”ö>ϝ24æ( ʇ?ęšvĮ\žjŧVÉ-ÄžRą°W~1“ž {õ=ŠgŽÖ=ŅOhņHã*MČįWō÷¨,/$Ķä)´É( ;GtôȧÍ’Ąv€ČėxÛ 7aЅ8Žbę5GhUS*OLã<úā×§ü*•āŌ56FPãĘĮɸu“Œdg~Õępŋ™8 †PA9§ŅEQEV4Ÿō0_zũ’Û˙Cž¤ĘáAÉíA9äļOlƒR Ā=y⍤å•ļ…íëíBŒĀžĢŽ*âjĖÖætąeCũyÆkģÅ¸ĩļ[=Ë-zŽœ~9Ŧ=sU{8RY풜EBĀSĮų5æˇ3ßÍĒ“qÎ7å—ËV€Č$į#Ûđ¨/íänIâ1õ ĒAlz’zôfŠØDˇŠah°¤áJLSąžŋĪ4Éä‰a)ŧķ&āY‡ÔgvÍ%I›—fċČÉ9Ī\üÕ%͡Úā[In! ā¯Ã,œįo<įđôÎ\ÖSZGtK6ŅĀôÉ8ĒFî[EfĻˆÉby>ŧbąe”âKrAˆ/ëšõ„1Ŧúv¨­ōāħË||õZõ@ˆgĻI'ķ4ę(ĸŠ(ĸŠÅ›?ۗĖ:ũ’ÜãĶ)#åį¯QRĒāžqj™@u#•* 9\dSËÜcØTą”uĒ:Ė %ĻōzpOÖ¸ë— ō`ũÔž˙0˙?wíÔæ¸˙[ŨģÚ˛ų gËÜ6âčÁĶ˙¯\b˜ĨĩiîÍu'a|Ģmä;Œäū>™¨a˜ŊŒū\ŽBŒ:J .8ÚrjM6ŅM–äÚ˛í.ąöÖ{HŗHqLōÛ[hüŋúÃéZÚ]•´đ7žė„œ+sÃ_OÄU{Í ĸ2]\ÄA%vąã§=ŋZËUT_).*ąPīÉ8í ˙ëbĢȜŒ19Č,?.ÕXŲŽÂd“ËPq‘…Á8é×é_ãōí5<•š6 ƒķrüķ^“EQEQEd\üēĨĶgÁĪLüŌņQŠÜێAĢ‘ãĶĨN#/ĨØ2=>´â™\mëJ /jĖ×Ĩō´ō¸_Ž+ˇœąŧŗģŒc‘Ûō¯A įņŦŨoF]fÃė¯<ą.rLgāŒnkÍu] Ļļ’V“ Ÿ¤ūd{ÕiĶyD×30FåtۀXdäˇĪ­\ģ-ũ›¤é[@ōŠ8č­×'üæŗ­`ÁÜR=ėā(eČãąį­lépڛÖû,¨WhtˆŽķŨvąäŽ{ÔúŽ‘k,JÉ/Íō̞nVúöįņŽwû-  o5Ūā pŊOođÔU_˛ÁË-¸äa@įįŊWPËp%¸UXƒ#÷ŅÆ3ė8¯HøoÂjj• ŒŋĶįŠîčĸŠ(ĸŠ(Ēséë=ÁœO,LP##HÎAõ?4i¸Î.§įŲ?øšQa"Œ éņūėüM?ė“ĪũĮũķ˙GŲ&Î~ßpā1˙ņĸÖ`?ãúãūų˙‰ĨŌų|˜ũBņ5ēp¸]ŗÎōr7"ãĩ h°!Čc’0IŠ,ãĶîUĨĩ”uŧœū ˙ÄŌ}’nĶî?ī˜˙øšĄ˙Ցrä!bÛŗöhrNsŸšROĄÅq‚IŲĄw–a„Ž~…*9<;ŒŒ×J .mā8ß썟Âļ¯÷Ž$Ąĸ\Ggæ ՍÍĢ$Ļ=˛”eRNGv}°ä Í}2ųuHdŽ Ͳj|Ĩ_šjÉŗšBÚĩ˛ņnŸĻčÚUŅ0ÚÛGI#ˆŲĀXmĮ•ōƒ•ÜnFzü‹ķcītüÚėFwŌ‚ūæÕžĘ+ åÚā+T årų‡ĄąK~ažK‰ôÉ2 ĸ;ã˙JȏΠÛp0zp>qQhFĢoâ-.îõ\ÅoĨĪiü;c­ŧąœn,Dn[$€AÆ3-Ôž&ÄWŒŗÜ=&&HcmĘŲ‚ä.ėkO\/8&Ä$ēŠŪy­æ]BÁåܕ‡Ė†ŲŅDģ6Ģ Ã 6ļFė|ÎcŌč’ë2]_V8ã„IūŽŖ’gp26ˆČāœ–ÉūÅŌ ×īõŊ*ëYK„X-æw]Ēǎ  ¸ČŽ[=3Ég‰í5EŸV›F™ŽėÚ9cōlÎ ˜Ģ#“šačĮ9ā¯EĻ=üŋnMJ,Ægo$’h@F҃íķpGĖN@ä|2ž*Ō´]/LšōāĩHĐē#lu†ÛllWø[ũÚķœĩs{âč-ín"w¸™ĸ…äĩAT$K $‘’ĖŨW$&03ģ\MŽ]JĮĘE1‡`ßšÕ›ËLämå^§ëY qâϚXd–ņQdcA[ŨîyeŲ–ŲLo$mÄVמ+ēÔôįŊŠæ8îâķVöŗŠŠá[ríá7ˆ;œnÜv}Ôô (ĸŠ(¨įi $W‘T”FmĄŽ8āãëŠČĶüUĨjZîâķncWXÂFvu>ŸŧLŊqÃ6"ņ•3F"ŋüĀĨ ¸!ˇ+ƒß>d}?žŸŪûÍsMĶä1ŨŪEwícÎŨŽŲ˙žb˙ĀĨFŪ!Ō–$ęĸBâ5håÉqÎ9Ö7Âq›â­/PĶôû¯´$-y rŦNÃrīT`ũüŒ}]VąĨëvúģ^›_š;YÖ4Ŧ€ÅĄ‡ļŲסQQiž$Ķõ& ņFKŠm¤V` l’H˜˙ 16õV›j6‰g-ãÜD–ЇifwP.wz `į=0jĢxFFÚúĨ’œ9Ã\(áW{wū!  œ*+ŋév—Đ…‘ᐧîČo,™÷79ũQĐō¤v8ŋĄms/•ņ‚†hƒ‚ëĀ<Ķ†6}WOļ˜Ã=õ´R…ŨąåUlmfÎ ôG?DoCY/ã-4ZI:7šĐËNwq´w­ĄiuÉms ŅĄž9%C`āņÁSô ÷Ŧm?ÆZvŖĻé÷iûŠoŅ%†ÎiáYÄnF×+ŋĄ ‡“퍯N*Ɓâ‹é’ęË,0D#f7WāŽpx$`$̟p{rm>ŊĨFʲj6hX1P×2;ˆį ÚųôÚ}(mwIŒú’°k„Āf=ûsôV=C7‰t¸í­į†î”žxáėōŖî,á2>n@,3Œ÷­z(ĸŠ(¨įˆÍ Æ$hË)Ķ”úŒ‚3õW2žĶÄąÉ%åôŦ“Įp7˛}øÄAHXTd`Íí‹ÁzH𞏿K;‰gŒŧqŋúĮWæS€Ĩ# FV5œŨÔ´ =RöŪęv•dƒ|ļÚXg×î˛˙ģ$‹ŅR‹Áöpęę {zf†_20Y Ē…™U1ˇî¯Ÿ.;ō2H 6? ô;bŠfšļŪ)Ö7DP6Ī”ŗFŽXaˇA›vŪĄEŖ Ī*ęæsu*Ë#NTV4Œc ?†5įĻ{šË_éūO“%íôą›afÁĖcužĐ­B‡ š#æųF̆ęÂkIĩ;öZĪlōbÄLûŋÕãwcŗÍCsām6ėMˇfŪYe‘ Üģ6Ę\Ɵw;]¤byČã\o Z?…nŧ>f‘meŽ8ŖrÄ@€ā˙wõŦícáö“ŦßÜ_M,ņ\Îęí$K`BáŠ*ŧ2+.Í,Ū°¸Õ[PšúúGg-åģGŗ\ ŧ lbę^ųéĪ5Ÿ„FŸŠũēßVŊ2JĀŨy‹ûB… ĩG?*āœí•vƒWī|;aĒÛęrŦ‹y͒ÆåOĘۆq×ī:˙ģ#ŽŒs‰?ÃĢ—–Iu]PÉ |°hF7 px˙—šņßNvtZh—sÛČî÷,]ˤ`†ggcšT1Ëģ6 gå 8ŦÉ|g$Ë Ôõ)<ĶÅ´Åûŗ-Ėw,c9dJyÉÁ#=1ĨĄøjĶÃÚ\–ȑ0Â6ČÃF…QÂØ _srMSˇđeŊĻ—m§[Ꚅpۛ_,'v-Ā 1ōĐO¸ã‘SiĩŅ4‹­:Îōđ%Â"YÔH› ŽTnją)ĪŽHĮJd^ļDd{ûÉī(Dž[3Ŧ…—jw¨nr ÎA…÷Ý:ų÷KQˆ2Ę$XÚ,;ÉöÎs;ŋŌĻéČãŠē|ŪŠ5}Eåyâš\ˆ@”FâHĐâ>6ãÆÎrOé(ĸŠ(ĸ ŧ Ösß´ÆŲō÷nÆ;mį?N}+Ī,õŋ ˇØË,đÛÄÆĘéU؛27!lũėËšąĖDîEß[úŽą­ÃwĨ +oôIâķnŲėĨ‘Љ!>VÂ1Y$<†ûđjŒz߈î,]Øų&â’TK{€đ ąf=럜^h#8ĩ¤ëĀđ|ˇWvw+ Ŗˇ{I ¸ųUKeŋxXĂÉSĘ5f^øŖÅ1J¯gĨ‹o˛îįM¸GyŧĢŖÜ‚Ŗ|ŒœL9ä­mqĢ˙Â+|ņ´‚ũo' ķÚĘ~O=°DlÁ°aąĀĮĨfŲjū ‚îXãŠvĩ¸™äIŽ4ë‚mūhúĢ0%[{mPF¤’@8ģŦßkPjÚ5õ¤ˆÍœĻî†Ycæ[—¸p ›Y— ųz€Čõ˙]E#ÛØ‘$ ¸°š$~X}ĒĖÛCrx— *Õ ëW>ņ“ųš„—dHöĀÄũ’"žJ1.ŖĖŨĀ?{?J˛š÷‰HĨktʉ-VÂU}ÆR……ĘüŖ _X)nĩNĢâCŽØŨ-”ŪRĄ†SöyÄsĢĩĄåį÷lĸYÆ[?ęßļBíZęē´ūŽgĩōõ/:8Ü5Ģ…AuMŊ…r~b1ƒ¸.´-o]Ô5`ˇöf˛š1å˛ĘŽ­äA'ĖėqŌʘÚcÆrĒ yŽZZŨ3%ĖŅÃ},ŅÆÖ÷&FAu Ú]I,ģJ2€¤l\aКįYÔ<+gs$rÚjË”X¤U ö…™C”ōōÄ#$ŒqNxŽęÔnŅÚÚYŨ=ŧÄÄdûänAÚž|ƒo÷ ’0Û$đŊū¸įKŗœŗũŠ)d{˜Ĩ3n D¨Ė͐áŒDnÍԂiڏˆüCoux-4>%œ%ģųL@BĘNėōcQģhĖ >]ŌEĒx™īmQáąû-ԏ2Ã&PŖ.K|ÜnA;0 ĸ–%Ģ*]kĚ­ˆ’Ę{—Ö21$"<ņy‘­ōėV`û˛dáH!gņ-îĩ§ëÚ°ą[‰,î4ØÕ@ķŠQãnŒ†OîâRä˛ō[7^#Öíu…-íîmdšTY#ōą™aC“’3ļāļ} cŅŋwÚŅEQE#ĒK$Õhoėî&†â Ŗ1ėpۇ|c¯CQKŦi ˇöqˆ›d›ĻQąļ–Áჴú ôĢŨÛ@ņ$ĶELÛbĀolg=N; ‹ûOOŨˇíļÛŊ<ÕĪBŪŋŨũ5)ģĩŨe‚öŗ!K˛ÉPĒŅÁę \ļŖŧņXŗđũ†ĻÖČÂíÄyiļCc—‘ÔmRWh$ –QŽk2_ˆQAq,[Ú ŌFŋOŨ*HŅ–˜Cr…ļY”g&œž=cx"{]>4k¯ŗĒHûG‘ķ L¸‚@cžkgIÕî5]*æîæ(ė<Ą•n›]WōT˛Mé“×fz\ž“ņ4› 6=B+Sw3A qvšÎļ„Č>@ŧ ĸYsÆÎ••ž&Nē4z‰ŌmLsywû”~âY| Ū_2L nCÎx›Uø.› ÄĢĻÚH k€ĘڒĢœ° Øˇč@¸œ+ø—Įˇ°húŌXà ĩÅ´MéģŒĸ´M"ÁR|ÂcČB¸aģ •5ŌxŖÄRøxYÜyPIjÅĖÁĻ+#áI í!ŨEČÉwČŠĒk÷rxÄ:…Ģ-ĩöŸm9YmÜMô‹xdvPyåFaÛ4ēo‹äŋ×!ĶĘIa,ĢvAŨ:™Qŧ˙ŖļGwt;MUÕ<~– šŅãˇĩ–æ9R(÷Ūy{˜ĩ°ų†Ãˇ‹œŒnȍēvÖģņ ´đĖZŦ‚ŅäHˆ{’" _aāĘ99*8íįúøú]MŨ ‚koÜ´s‹Õ8"ÕØmh™@ÛrRIr6ˆˇvw u¤Ú$p$ĖōŽ X|‚čŒ~뜛9>”āœŠÔđ¯Š‡‰5{˙&æ3 1lōEqŦķÆ[püË6@GŽNeĪõi?ĩ-Γ “Xī/)Ŋa•G`Û7@Tœy,ãlËĪĄņļ˛ēΜķĮhöōÜŪY\[ĨČÂlž‚Ū93åä¸ķOČH ¸l‚q^—EQEQIIĀįŌ¨Yk6†—Ĩi+Ëi;Äm–%ļ}Üd|ŨČĀęxæ´0*8fIՊnų]îRŧƒƒ×¨ã¯CPÜßÚÚ]Z[LåeģvŽąˆf\ŒōĢqœQmumĒZH𰒠ōB۔Œ˛1G:2°ô=¸§/Ųėü‹dMÉTUķ‚NOærzŸsSĩ‘ĻĻ‹+[Z؝ãOŠ9mÂģ”XäFTe9ÃĄ€# `ŠØĀŦČĩí*mCė1ŨŠšŪc ƒË üĶūYK˙~ÛĐÕøæŠi&3@á$ø[hlÁüjMĸš63%zķȧ`UOí+#Ē˙eũĸ?ˇ~Ņö}㗝ģņ×ã5oĢËyoÔŌ3,ˇŧąĩ°ÛFHŨŒŒœ“ƒŽ†ˆ.íîyŽE-š×ä”m­Įŗq˙ëĨ´šˇŋĩKĢw߃*Ø#?äQssoeÉ;ˆŅäHÃcĢģQøąņĢQEQUĩ ynôë›hnÚYbxŌtë €ÃÜk“‹Á7^\õŠE†dvHcfW`<ĻFģv1wB’XdœdŲĶü ÖWŠwæBĶ*ÄŠ.b*ō3l*Ē"B0ā‘Îj͟‡n`Ôu[‰î-fŠũX4FßÎĐĮ'p qƒžøĀ!W&ĶŽVz­ŊĘ^[5ŧQCļhNŒ@TƒžhƒČøî-Ąqá.›5ŦŌÛ¤îhT#ÄĖNīX‚U@ÎÁ” `įŋ€îdˇ¯á[ąoS´feaŒķéž3Gƒ5S$QÍ} ņDP´ÎYe¸"h%bā ųrŽü´'øˆ´ _ŲßYÜ]ÜÃ9€¯ÎY‹ĸ‹qÅ'ļå2}dn;´ú^‡y§ę)rÂÍķ-ÉyŽL‚7šI#Dãõ€ppėŽŪņ'‘*[Mko•VŒ ų[dĀM™1āgĖqƒ€ Š6n<%ŦOŗ5Ä2M ×N’\ČQ^$éŗåę#A@'dîŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ÍQEf“ P .i2(ČĨĸŠ(ĸНpm4û›…]íM _\ âŗm4YžŨ_PÔī..Æ9šSŽŠ¨G\“ÜÔ§Bƒ æĸ21˙˛qôæŸũ‰kŪ{ō?ëūoū.”höáˇy×Ŋr?Ķf˙âęÂŲĸI€<ĘĮųšdÚ|Sž[?ظ‘‘Ņ­v‘æßaąŸôų˙OŸŠpŌ-ƒķo>†ölčT¯¤Ûšæ[ÁūíäÃų57ûÛn<Ûīü›˙‹ĨūĮĩ †kĻû×rŸũ›ÚƒŖÚ0@|ü!ĘæâNũõJ4‹]ĨIš ö7Rũ›Ū˜ē-š!Uû@äâæOū*¤}.Ũņ—ēūíÔĢüš˜Ú=ŗŽÖ–÷ˇKŲ‡OŖŌ.‹h§;îÛũëɛųĩ#h:sg0ąŨœūņžžĩ ŪĐg˙[ĨÛ1ÎwäũOSĐU˜ôM."ģ4ûUÚ0¸‰xƒŠbčR•#Oˇ;1´Č_ =:š?°4žúmĄã§ž}=k+Ä:›kĸ_jvŅŲ^ÚÛÉ,W6ą„‘JŠ=@äq‚PHī]0éKEQETÕüJo23û‡˙ĐMYC”SíKŠZ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˛|PHđļŠŽĻÖ@?"ĩGJZ(ĸŠ*žĒžf‘x™ÆčgęĻ­Ž‚ŒŅšÍ-QE(ĸŠ(ĸŠ(ĸŗ|A˙ ;ޘ*7gĶ#5¤:QEQERÖ_ËŅ/ßÛm!ĮüÕ´QAę“GæÂņītܤnC‚=ĮŊ`Xë–ˇ×~­īwĨÂp˛§Bøė#?Ũ'ž0ėŌŌčzŲHōúuëX‡%%夨:œũũŖ9т~‚Ŗž%–'WF•”ä0=ÁīRQETS\Enæ‘#RB‚ĖIč>ϞoŧSĻØ2¤ōųnؐ„ yÚØlqÔ)öÍcÃãV¸T–;Ša$(0ږFnPîÉČ÷QV?á)ŋxžŅ‰u*>ŨˆĪ xĪĢy§Đ˙9öŠė|ZˇW&ÚM.ꔎāė‹€FAÃ˛ąīĐZŖYąãĖ›ČËSp­v=–7ášŧE-QEex‘üŊíąŸ”1ZĸŠ(ĸŠ*ŽŗŸė=C~Í'| ĢŖ Ē:Ϙš•ē§›$FÛáž#‡‰ņÃđ$x k‘K‰æŽûAÔãũėIæ:[ŽL9ų.!ę¤  îŖo?+YĐõ™Ŗ˛734n‘9MGĘeؤÂådu!˜uÎ ģŗ0ČéUgÔ`ˇšHJ]†ī’&pŖ8Ë0Ŗ>¸čO@Hš ˜nĸY­åŽX˜e^6 ­ô"’âę US4¨›ŽÕÜq¸úSĮAÍaI¯M¨ģ[é6ōČŲd3ģPŽ-ʎŊæã<âšø]I¤Ôuģ–PČŅŖ4I´v.yč c“…¯oĸé+lļÖöPƈw` É÷ĪŠĪOjĩ=œ"D™ža´ũÕbTûmäUTŌĄs4¤e$īŪ۔ņ‚Ŧ@ãúdâŗ­ŧ1mq&ös.ũȇ¸õį×9īš–ãLŲIeĄa"¸fæÃãŸRI9ŨÎy暈¯ĩ +]Ž>CN6(U+˒NāŪQI•“9ų =g†üOŊlģā{kŦС9Ú@lb@ €FAÆIßĸŠ+/Ä`Ūägį˙¯ZcĨ-QEŸŽ6ĪęOŒíĩ”ã×å5z5Û¯ ŠęŗKmiöˆÉ n“äßō`‚HČČ psÆzí5Ģyŧ”’ fģ˂’ôæ7čÞ;㨚o §Ü ĢwĘy2giæEĪĄŒ9ĮNp+™đÔŠ7Œ5+ĢGŨfĘ`‘”ĒĮ3Č`¸å†đŋ.sœžXoQņMŋƒ´ņÖ­ rųŐ*ĒŽB—Îî÷#ō‰4-NÎú8å–æ9nī0îšnųˆUĀÜ Ŗ&zîĖ^*ŋģĐ —RĶĖk32™bvo™OČ›¸NÓV´í.-JÂŪ{ŲŽ Ō`Ȓ9(¤]vƒĄ”ü­Åt’†Š"|¸sˇۃųUeæxlÂēŽŧāņÆ~‡ŋAO9Uv“ŒgŽĮo^Aũ)oĻōyˆŪQ?3/;} žã§‡;Ģ]iķG=°Ėr…“–_á$g¨ã?{æRAÆ Ŋ(ĪaĢOeäÉ%œØ–ŪāneÛ°|šädm<žNG\V5;™,īVU™‘Jw‘ąš9đNã?…eø—OĶõj…eC$ąmČ1I~čėC2=Ojå"ÕE‰´ídGö{mNofˇŒžiBŽ˙MŽîp9*„÷#Ö¨ĸŠČņCđžĻå *ÛHÅTāœV°éKEQEQÖ:& H6ō{ ĢP9’܌PHü*žĨwö+RęĒōšŲ3 ëΰąÆNā•ÍÁaooĄÁh–7q¤ō Žâī$…v§ÎT míÍ2oévŅÅđ<ģžIl``đ3׎üŒ€M:_ Û[h‰˛ÂæIVBī2/˜Cq°ŗ}å ×8ä`RčˇŌ°jđų\ŅÁ& tRŦËķ*ž9$փize”l8âbŸ*¨  ÆųGUĪb@Ís^1ī4čmlį4ËqŽÂâWfÚrvœaw7ü8âļü1ĻE§h÷v–WfIKˇ™rŅđeÆ3Œāām2Îrž™uEögŋŽōx“2ē˛~<.1ųV‚EqŦhЍŋu@ĀAJ>@I?‰Ēwm ‘<ąØĨ˜38Į~:Q\fš,SX"‹™qT%ä!O dËÎ@=Q _Û]Z,qJĻE‚xB‘åī\€8ã4ŨB?:U˜ÆŪ`Â7–sĩrO$0G8 ú`įœ/^˙`xę8¤H¤¸ũÖ×nĸCĩąœōøbš=r ˜žø~đ$[kx_˘Č@T*õaŅHá‡ģPđŨܗŪŌîæ,ežŌ)›Š%&ĩ(ĸŗŨ€™î?{‚ÅU6•$Œ•.Ŧë°đqŠfkpęV7štPÛäė¸ōĀÚ03÷@ō’:uίÃËĩšđ…˛,“J w‰d˜ĖšĘđ m`:ž•ÕQEgkø˙„{Q,2>Ë.FŲ5 :RĶ]Šã [$1ĮŊ.ihĸ ŧÛö)÷co–ŲĪĻ*=,2éVaž÷™˙žEX2¤ģ†*7ē…HąÉ"–Á‘ŪĻÚž‚°ĩ_ éz’LÂÖÚ+‡BĩēJš8ųŠ0*N@įā ×3uc'†­ŪkÔS @ĮnYŅĸÍ؍JrQ8;¸ÜxĢV s Î/ʰƒ%ėFŧā€ĨJ ›–bŧp2j…–­/‰­n!…ŋŗô¨—Ę X¤Vū)”ėFĮĄ$ŽxäØą×ŦmŽŪ;‹ĄũžÍ4hĀ#ōp$BpprNH`Y‹sĶÄúvšo5ĸAēÕũå<Œø#Šzfš=KRm#XcĪu~ˇ1Ē[÷ŽYÁÉ#<ļ2@PGmXÛK .ßd˜ŠŽ8™2}ÕVÁ+´ãôÍ4Ļ•tdIîK0‡aĸĀs€XîÉ ę͜§9ÍaŨfÍuok´ŗĢ*ŧ­n%‡q 'ŒT…ėĨ`KÆ÷ļ?=ĖIļŪæŲ‚ŗ0}¤mū- ’Øm¤į˛õ>Ö-nmūÅ}¨ų÷sÄĸEÛåŠ'ŽwäaŪĮB|Ga>Ÿ§Å>“leŧ‚xc…YđȌá[kõ ?‰4gøN‘ĩ+ėĸˇvˇ’Ī텑HH‡Ę¸RyĀã÷éדi~\‘ŲųíCŽÖrŽLŒFr?ÖÄāAŠîhĸ˛ŧLū_…õGÎ1k'ū‚kTQE&ÕŨģv1œRŅEWž8°š?ôÉŋ•V€§ö]°Úî<Ĩ*Š‘Ÿ”wā~˛ĖŌ}ŦǞ(mÂ4įfW éģ¤dŽõm&gR ™”¸į(N#ĶÜ1ƒŪœ×3,‹-…ˇ0$ĘY=@íߎ…[ˇûC\y–îƒlmëŅvįķnßZĩ$I,Mˆ¯ŠVV Žõwám:õQ%7>Jž˙+Īb¤öë’ÉĀR1ÚĒxl*аgQü2\ĘęFs‚ FyÁīYz¯‚t>Ö;yíŒHō)‹ Ue%H=ÎxÁ Ī{TÔítŊ$%ŊЉde†Fˆ´ˇ߅U^Nķķ`ˇ ŽŌŧķI‚˙Åū1{93§-ĩģ(WRí.Õã'īĀžŸ†} <gŅk¨ß[9!rAîhËd‚G_OJŧ ĸĖōÉt—7MŸ:Srņ™?Ū•_~j˙ï Ŋ„‹ö¤LąIö‰FΧ$îį“žsų ćÁēpđåĩÕ´÷]ŨĮ*ŗ\žÉŗÕp¤ā0É#:‘Á­­'ÁzøjŲ|™,õ)`I$¸Šg2E1Q¸Š'‘÷GĐc;ˏģđ„R<ļéwa/Ųī„‘ģ,Ŧ‡ „(ˏŧ2Î8ëR[ë*ē\>)˛w–ß"-EyEÆŲX ß:)RÄpAlđŖu{štKÍ/[˛inlcˆÜI,ƒX]>čÁU°\ŧ2rvƒé0ÍÄ)4N92˛ž<‚*J+ŀŸ ę Iļq€qÚļh¤ į9ü)hĸІéwÚʤgrÂ¨[ž´U#&Õn|gåđyü eŲĸģ‘o ŽB†V‘ļ2ŒŒqÜāœšīÍ]3‚€Fs oõq8HđFsž)ĪŪÆ{â‹GŠYĘ8PŖîD‡lCØtŪ{䎘#Ôí#+(e ‚29ÍF.Ŗk‡…rY,@āgļ}{ãéę3š¤sųayF7$HddĪMÁA*bjŊ^+k9nV ™D]c•cô߁|âšŊ7UÕ5×wÅ"ģ ˜ˇģ­TeŠ8a‚ã/œ{p1\ŪĨ%å׈nbą{ŊFŒB…ídš(Ë ,įfNėzm9­t^Ņo4˝BęöĘD2Ŧbuv2Ŕmbp dōŽÂ;•‘ˆĘîČF:ŽKũŠ Z\ĘIÆ?_˜Ž+ÅZüzxļŗ–6EēÎâø”YW!•Øā ˜$îāq“­jšŸö.ĢkagŠM:¸ō­$`ːVAŒŠRØ'ž¸ęĩŋuâƒe`.įŅu8ĶrĻÖXˇbWh“$’ĀpZķË­wĘą×RĶϤfHŧÜĀۙcIË,ČĮ“ÎĶĶ WKā]^ŌÃÁöÚÍÄv÷VĪ,7)p<˛Ŧ°SģĀÉųÕ;9ôĢ€Ú{Ës ŒRbę Į<Ü`nĘ ¸víÉė4aÔ5? éļqHąŪ[ļōAbdĖ‘ĘW9UĘ)ÂŖnzVĨ‡Ž4{ËË{7‘­Ž§fH㔊ÜĘ #r’;sƒÆ3‘].sXū,Īü"ZšEœ§˙5°:QEQECw"Ãi4ŦĒ#1Ú2xâ°"_ļhÖ ÆDFÚ)3¸ŲQĀ9āv?\’;҉öÛ\Úíg…Ųˆ36HfÆ0OF-€ ã€y5mŽSMžh×ĖGT"0d}Ģûͤüšęzg˛~jŠqu—lmÛy!Ņ‚á_?0HČQéœ`GĒúŦ‘YGēXW nä ŊGC@$lާš-KWŠÆüK @|ÂXȊ]“K§Žyl‘ĄmxcÃæú{sąéŦՖœAFJũߘķĮpkš[ĢHV8Ō+”5˛“q€0€*V–ŌDv0ĘA`mÛ$ĶÉôŦ¤ĐlíîR[[›ëaŪ"KueįŨŖ,<ĘĨk{BŽŗŠĒ‚2šōsĪ—ŪĢÜio{ĩgÕõ 0lØĮķ_+ÔøU”ą›"DÖu5 žļŅddįūyqÍ(ŎÂ<ƒëGōŠâŌuŖ$/y­E?”Û†Ë?/œcûį×Ĩgj^ šÔw3jˆŌē˛ģOnf_›ŽŸˇ=ņTĻøs-õŸŲ¯ĩ°Pā°ĩĶāƒqę@'šīŪĒÉđsG¸æãVÖ%|ŧ΄đr:ĄŽĮÃū°đ֘ļz8ŒYämĖĮԟō(ņ,~w†5HĀÉkIp=~SÅiĄĘ)õ§QEQHÃ"ĸE ŋ•ĩMģq… OĻ+‘ÖY–ÚöYíâkl ÄąBøĄŲ‚pŋ1988káë)íMŪĄodoŲá›÷ČĒpŲpH<˙t’3É8—ü$údqÛ*_ÛÜË0āÂK#9Ā]ÜätëÍ\}nŌ=ÛĄž;qļˇōJ`×ė‰C¨zČ6ã˙ˆĻÂGc•F¤ č—r?öJēŨŖ6Ņ ö}ė'û%)ÖmBäÅyĐ}†lķíļ˜uËpNÛKöÛée(ėO_cúzŒČ5]čÍ•ÛÆÅRGŽƒĮŌöû4Ģž3üpķĶũŋĐûd[û†+˙̰$’Ņ|¤v??SN7íĸÎäļ~o”aGŠlāūŸj”Ī0Įú3H šįžŸįš<ų3nĮÜ:ãųįô¨ūáf(ē]Ë ãĖßÕķúwĄīî” .íÃnV‹ÜåÅA&¯xŽUt F@ ų–K|uĮyA÷¨×\ŧÜĄü;ĒFRÍnĀg ųe5r;˗':|ąāō$‘?M¤ķõĮ֟ö›Ā)“‚K¨ĮšįųgđĒ^ ’Cá-RMĻœĖyB‘Čü+RŨl:ôŠ(ĸŠ(ĸšíK[ŪËf‘yÅc PäĻrÚ3ÆO~zV•ÅŠ^ÆĻ[Kd.ĄBą\2đ06Ÿ°:œ‚}+NŅäÔd”Į¨ŨDbv¨`nüē{ ûdŽÕĮxÃZ×t]tÚÚëoĒZĮ4qGæfqÁ08N˙ˊÃ_xļYāûFŽĐÄp\ tF|ƒØŽUr0Inëž*ƕ7ˆõ‹’-ZæH˛LW,Ŧ§æųr@ Ã(:ãsœk ‹M֔ĖdÔ/w*€ß1ÉĪ[<1į8Æ2ĪÄzÃk5ˇæÁ–ķW’—vā ā[Ԍ`O‰­ÜøŒ4‰-ã3M2üō–(1Œß0a‰œ ž„ ‹H FŦāƒ€U’œs“É'žNyŦŊSÂļÚÆŠöģš ˆG”ĻLåēā‰: tüŦ é Bą[¤) %%¨Ãdã'#ƒĪĄęŖŌlb.RÚ \åˆ\Æ?,qŽ˜âŦ¤Ļ0š îŽNqŒäķ͊oŲaōž/-v>w }ėõĪך‘T/@=iØĸšĀ‘ōą#5Šäģo¸@‡îųqᇧ$*‹û<ē…žōęP:~ķË˙ĐĶâĶŦá›ÎKhüė`ĘW.~Ŧy?VžˇÔã}ŧĘa(A„ŋ–wv;ÂąöãĩM4fÉķ´ËYō0~Ņ,Üw:ô[é÷6R1ŗđū‹Š;‚„ūPũjŲ—[!q§iøĮ?éÎ0īÍ5g׎IĶôå˙ˇ×?ûHR™ĩÜŽÛ=;ś§ôíûŋZ_;\Ø?Đlãū˙ŋUŸzž$ŊŗšÎ]7GxgC¯ĨåX`ņåsÁõˇ§Úũ‡OļĩŪŌy1,{ÛĢmdūUfƒØâ–Š(ĸŠBę)hĸŠ(ĸą[ŽŲ0ã#ąÉ4˙øNôo.[••Ĩ˛Xc–9áS!1”pĒ ˙–Mƒßž€f›/,“]:q(‹$žûKɀQ„‡hûøˆļÜōĄđTø÷A&"ˇČĘöo,žKlæ?ņŪ§œdŒVΛĒÁŠnōCpŠũs€K 8Ü 0#'ęũQEQEQEQEЊ¸q'šäŌãŪŖ–Ū bGÁ”2ƒĩŊGŊI´sĮ^žô^hÚ(Ú=)ĻĖĢ)E2*•V# ôā~B´zQŠ0)žD^Ÿå'ˇg™´nۜã>™íK1ÄŌ4hĒŌ6į*,pOŠĀč>Š(ĸŠ(ĸŠ(ĒzŽ ēV•u¨<ΖŅ4­ Ø(É c[E2pļŅĖ7„r ˞ĶéĮÖÉ5ĶËmx-á+ĄŠ0aa%ĖnōIæm ēŲ†Nųy;°ģ‰môëį˛û-ÕÍÂǁT–Ū%*,2I‡Ô¯l‘›7ė#ˇķŖ°ŋ ­„D9T–L‚d8|ĀsĘË{WZ}3Sĩļō¤ŸÎˇ–AHģŨ–HPaŲÔeéŽ}Wfę>+ŗŌôOí[˜.#ÍŨŲŊLqČė0Xnâ&û¤úũĐX;VÕn-õ +[Re‰î$ q˛9"crõrqއĨcę:ʗąŲ]‹ y$…ŖBûRŨåbŖ~A] 0`N ã Ņõ˜õXĨ`n“Ī—ŧDS<[ąčJV øę6Ę[J ‰?qöĀ-áQļ#ĶæCš‚@܌Jôįĩ˙ÍŖ[鷏i"E,Ō‹‹vØe–ķKōûs˜‡|`öíøæĘ9‘dąŊHd¸6ŅÎÆ-Žâåm˜…ķ7íĘKw ­üoVV umw+ÜÁ‰`pėņģ…T3nũÛp7r@æ´äņ-Ŧz}á†V[ÅFXÕŖg@ˊIų \n+¸ lÅoⴞđ['Sŧã8PËv3Ĩƒ{l$ā`–k1´Ņõą{;ۉ’pßgT !Î?tF~îYrjŊ׏,ŦŽ+­3T„*ą$(Ą™VfØ|äˆ$ÁÆĶōœá6“Å֋tņ^Z^iņ+˜ÅÅâ,hΏ˜’O͎0B“œ-ĐŅEQEąZßÃŪré†-0HŦŒļÄGÆ2ĒBzųhĘ8ûĒG@jĶčš\iÖląP`^2âBGŨU˙ŪPzŠu垚 Ū^ÁjvGķM:/ʋ–å@9>ƒ­iZtöqYÉcjö°ŽČáxTĸ …0ŒąŠũ   hújĖ&]>Ņe ŧBšÜ …9ĮP öÉõ4Č´-& ėbŌėc´¸æhŨrpˏÁāĪ`)§ÃÚ;šy4›rI,m’K3Ū˛H~ŽŪĻ­5…ĢŨĮvöĐĩĖc 1ŒQČáēŽ§ķ>ĩXčK[ vĶ,šŌ3nĨGÉåôÆ>įÉūī)5?Gxĸ}JÖÉŖŒŦQĩÄhB–eÚŖpã,ąāw!{K'‡ô‰Ŧbą—Ką{HŸĖގC7?2Ž0ĖÜûŸZeū•Ą­Š6Ąc`-,á*­fã§Ė}jkčtûŸ*Öú;iŒ„”ŠeV,G\)ë€{U;ŨÎöé}Ļénī4†<’Ōž]öärÍ´ąĮ'i'Ĩđ‰xtF#–c ö8ņĀ vė ‰õŠî´ úŪ.ôĢ˜`CI5ē:ƤB‚8qéNF—âÂŅ>ËŧÂD*<­ĮsmãåÉäãŠI´=YģMgĘ´Ŋ3[˜Öb‰*É ’„3| í9éSĻ…Ą\ĮæĻ—§H’Žíëo •†sŽAWqîŊM]ļ°´ŗi ĩŦ0™_Ë@ģ''ōOįVhĸŠ(ĸ¨ë0Ü\čזö“<7Âé‘ļÖF €AėFr=ũ+ŠūÂÖ­õ…Ôī÷Mm*3[Hī1Š5ž â-ļâ0K$õÛ˛ĶuTđ¤=ĖŌ^HŅ5ÉåVd öËÆYŧa˜ōŋzą“Mņ&ąá$Ûqqũ֞wÉ5İ´s›`˜1āc÷̏œ vsUÛM _ļžSP‘míÍĖĮí#HāHD+ƒ†ä7Æ0~cæ“ļŠiZ‰--Ûû{RŧšŌ vb,¯ĻyämIŨØ į÷¸G­‹Ē YB÷ŗ6ĄöĢ[‰åk‰@eIČf$f5?/MÄũi4Ũ^ĩđė–Rß´÷˛Ciäģ•”8EYJąųĀČ$ŒįĒ’HÍÔ|/â{¸÷[ę­m!ŗksöŒÎšōŽ7Ũäīkc¸ßģnäîš>…¯Ž n­5)Tą1ŽKŲ ûB6Ф”f]¸ÆYzíRšļžņ0H Ö¤46’B“ũŽWp]­‰n‚ĐĖH(eކ̪øĒęęÚkKՏmšÃ4k{$`Čc™Y—åaÍ T“ˇøq†’ãB×gđÜV‚ũ—PHî\Įu2}āūQęĮ ų_xą#sd–°t=F]ŪĘ[Š]ĄŊ¸4\ŋ™ä7œ#Q'ŪÜãRsž Ą9w:‰æÔ ƒPš8)qô ’^Ņ›ĸãËēb@:Ķč~$FŒZ^NaˆŦĒŗ^šrëæ(į•Úb8$†dų”–g­/ éÚÆ~u Š.-ĨËAžáĨŲū‘;ķr?tĐ8ųOÔåZh#ļō#[˙.ŅV-ĐŦîė%PųulŒ'úĄåGĘß+sŊ—ēWˆŦ´á5ÍÜo€‰áķÚAšmĨ\ĸüŲc'AÆ~CŨ˜5ÍkË4‘­ĖļŽ &ŪųŲ%Qį}ķ¸Ÿē…° åĀœv4QEQHÄ*’Ä9$öŽ"?ˆvŌøn-m F€OuŅ$ĒĪÅ ŗ)Ęåw2F‡ã^+R/XĮŦęmá0Kmr°Dvąî[rq€wŨ"ã=ķĶ8¸ž$Ķ^ 'YĸÚ7`„áÂo+ŽšÆx¨#­QŗņmĩĮ‰N˜Ęę“Gļf•šF7ƒĶŲØ‡ōÎĻ̍Ie%¤Q@]Ž]ĶĖūą¸$g,2¸ĀĮ^ĩŠž8ĶĀ÷3Åo ĩi§3–ŒŖŖ>`K”'$˜ ÍüÖ?k?”“„$ŒãŽÃžIā ’@ÖŖãm.×L{¸¤ošĶíVîņ¸ŽPay— ÆČœ‘Œ€Ŋ2T5åņ>œō´{n>W1–û;•ČÅŒ‚wŒß#‹SÖ,íėĘĩĩͤķ*CÆņ´CiíŌnˆüÍC_˛ĶnžĪ:ÎdŲŧágŨōČØœBüzāuaœ‡ņúŗGn$–Čā‘W$kÆļ˙x¸ØÜA#‘ÍtVwŅ_XÅw⒨e 0GÔ•ËYxūÍĖSßFm,įŌíĩÜŠr‚Hî$elgîĨš9zbē]3UŗÖtôž˛•fˇfu¤•b­ČāāŠäp{dV5‡‹āģŊˇCÉŨ…Ŋä å’z%8fQÄCķ“Gü'ū@ē‚Á#)Ņĸ“.ÁS*Āģ*rqÁāsN2Ōe÷ˇĐÜYŧ-,¯įh†Õe. ™RO͎ïeŧW¤ ¨íD˛<ŌēGG žōÆ@Ā?/îeųLįVxnX-ĨûxnJˆŧÔh÷nX˜˜1<\ößĪC‹šļ5ˇÔöÆV+k”Ž"AŅāŠ`H<ƒûÜ`ķĮ8éQj>&ƒIššmADmŧŊš;˜ĢígÁP¤Ú§’y;TXedņ‡íßl×ņÂCˈĘ2ãnHÆFĀžƒŒđFw¨ĸŠ(ĸĢjú„ö7hĪo:äUvBĘx#*AúÖUĮƒ´KšnâÖY~ĐXƝu)W-„’ģą“+œgôƒÁē"Îgû,)äČ×2ŗˆÆâKdˇîb!ē†@ŲČÍ%įƒô{¸ŒbĄĘËE;Š*U‘ŗÎ 2ŗßxđs•Raá-/O’ŪUĪns×/#¨`EÉ=M"Œį†īÖ´oôËmH@nMĐžøÚ9ž2 R§• ‘†<:¨¯…t„šûJA2Īą“Ė[ŠCa„`ķģŌ(ĮüUˍ&ĘįLM5āQgŒGlSf m*A]ĨAr0+-üá÷ĩû4–,Đ*"ûD¸ QЀ7p6ČëŲY i2‡ß¤;d7b\ČI]Ø?1'‘ÔԖ~Ķ´ûŅyKį…dß%ĒpÛûĖFO–™=I\õ&Ŧ^i6÷Īuk˛Ã-›ĒáŌAøQˇÕEP>Ņ ‹'ŲôĖ§Í|‡2™wu僺zíŒ9Ô´ŗ†ÂŲ- V.pËNz’Mc¯‚|>ąG°ĖqÆą*´ÎÃËU‘U,rĄe‘vœŒ61Ž+jŌÖ;;XíâiY#YZF?VbIüMbGā y6ŗE€Š<ĢɓåMÛŅC°°ĀbO érÆË$sҤg2Œė Ŗœ7úÁĩq'ß5K¨øOÕ­Ō Å¸xÖ6‹ w,e•€1Vŗ´uĪęi‰á*+á{ģ­ČČO'‡ûßty’az)v MAgāũÂHŌŲâh„)q ˆŌ0§æåvÅ*x;HĢú^cŖųâÆ7ŒNáä +žX(P~bq…UvP;U-OšFŽ×ú)å[†"ũŽeR|Ļ‹€Ž‚ŽĀ€9į'š|^Ōā•e†9ã‘eiT­ÜĀf,Ãąĩ‰Ë/F8$6¨ĸŠ(ĸ¨ë^Τ]ÅĻŨ}–ųáqo1U`’cå$AÆ}Ģ‘gņ­ŧPšˇ2yåŨívˆÃĢĒrĒI*íägĘÜ ’]ĶäņQđåŅŧŪ/Úæ//&-ëōüÂĄFĐĘ ¸R_æQ’Šçkâū;ų…áœ]F’ē mōZŦO´—ģ”Ū:ÜS Pž:-ĻĘ׍ī`dļöģĶ9$€Ļīx~RÚúēkŅë7sXÉvĐ 8ZcōvÉ"<"ã*]v =ō‡"”0xŊ>Ėŗę2€et†ßæ(ņĮœqę˛HŧĨđAÚՎßŋ{úõôÚÜ+]jLlŅÛ0vE¯ö€0Üđr×'ˇņ&ŠáˆDāŗ]Éo4В‹,(ĶŖ<$2…!bČ;˛XäsœTQXøĒÖÉRÆIm LA °K`cž5d)€ģpÁ‘× ´4x8VÅ[Ôlõģģ-äkŠāÔiŧʼnb¤žQuÜAĖ<¯?Ä#&öÛÆ÷zvŖn'ŧ &žâÔėļŽF™Ą‘Ðŋ9‹k&rĮĖw5HõW]:æĘŌgģXY^g0‰!V1îģʃŒ›‚įåæšũOūˆc¸ŊGpŅCpaV[fÚ<ģĸžģ˛ļ›°v囸s­˙WÔ<7y5ܗōÛ<ö÷v)v”G:|ŽT"’܃¸‡—‘ã)HāģžĐE:Zŗ4āJIČmûOH#oēÛŊēņ\^ŅžÚÎæ]PD|ŠÖã2î XŸ¸GāŽËšÛÆŗÅmp÷6“<Š’Ôŋ•ū–W€§!lķģ?}šíč5މ4ąĻŖĮ–ĻásĖ„lœ˙Ģ3—ēõÎĖĶÆK„w× ’ŨJÉlÎdĮ…ĀōķöŒ‘ķgn:ˇ\˛ņ#ŋÔôeTšŅc/ΰŨo›'pÛŽOęSĩŌ|AŽũĢWĶîžŨ%,m˜ÉR^2PHā=ą8ᕯ8ØÖėu95ã}hŗb;xbŠDXXÄSį”Ū °.sÁ€X Ĩņ‹É§Īx÷E’÷uÔÉnŠb (]™f8baŪ ÅHŽîŠ(ĸŠ(#=hĸ“ĐRāzQGZ0=(ĀÆ1ÅĸŒbŠ0=(Ā=¨ÅQŠL c–ŒJ)0=-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ_˙Ų Pixcomp[9]: w = 241, h = 365, d = 8 comptype = 2, size = 15772, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ* ËÛ}>ÕînĨB˜Üį ÉĀũHŦÁâͰ_ļÄˇcdņž2xŠ?á%Ō‚–k’ ~hØp1žŖÜ~tĢâM%ƒļ**ļŌŌ+ ĪĻHነëē~ũžyŨ…$ymĀnŋNŨņ@×tÖrĢw*pÜãŠŋđé[CȀ8äœuéüĒQŦX$\ÆF3ר˙&Ŗ_Ķ%PÉwdsŽ0QõĨmwKUboaHYĀ#=8<Ķŋļ´íÅ~Õ!‚Oņz}}Š\Ķ# ^ú vŠiÉČũiNĩ§)¯"Š` s´c'œŠĩ§…o!!Ã2ãŊ!×4Ā›Ø KŒq×ņöĨūÚĶFÜŪÁķ}Ķæ 3QÂE¤ũĨíÆĄmį§ŪŒČŸŊĨHģ–ūßoА rG9éČ4‰¯i’ yÛũį#ÔzŽzŠtšæ™ĢI}++3€ūTįÖtäÛēō˜>qČÎ?™Úū•’ūĨ‚gxÆH'^:wĢĐOĖĪ nŽEŒdjJ(ĸŠ(ĸ°|eäŸ Ũ,ņ‰Ũ¸ŸÄ æ..1rĢ*™PėŅ)7˜ƒË›Ž8Éë]ëQiķÄ&ŧ‚ŲfY)Ȍ (EÚ70É;Ķ'ŒoŦÅz÷Ék$lāY^hįW‰KpW OĻ2:’j[}Sí>Mä7v‚Ęg Ž÷*<į-Âĸ˙{Û#$ČĨģÔŽmÎŖ-äöą[Ē$rLȘŒnî\Œ’ĻO¸Ģ3.÷ 41ā&÷Ÿ¤jˇQ€zž8<žĩ,&îižXÚm$HREØĮq8ÁČÄäYÄkġEĘņŧīnåÚ åI!N‰`õëSé×Wh–ČIiĖQ¤kÍ1bŒŲ OœŒÛψFēškFšqģ{ÄĨ|Ȓ9œšã“Ž{ļRü[ŧ&Æx’f2´—gĸžŖ$ã“ÛˇŖŦĩ;ĢĢČ-îėæ0.đ‘If#9 u~?ĪēLB“¤-;D~E9 å} ˇcÉĮ9RßŲË?öŦ×ļeUÂ3IÛq8#–Æ1ŸģDGĖ”k|‚ŪwŲĀ™Ŗl˙ĐqĮđ?JËÔ5Ķ.Ļ’M;dWR”YDrûKr r0¤ƒ†ė;âŽŖßfeĩ‚n”Ë,ŠœtWđÁč*k}@]hö“YZ$M4bHŖ’%Sˇq*2GN‡CUīšh ˜ģHÅĘŨkėĒ ū,’Gn9*ji ™¯RQ amĖ@*7i__•@Čō89k3"hڋ¤Ú l‰F၃‘Ī*ŋ͎y ˙Čŋ§cũ>1áŖEQEVŒ\¯‡&Kt]ÃĮzäõW™n$'™û˛QĘėWųW,zā1Ā=VĨ´žnšm Û´VWgd-ķž0xÃqž~ŧg5NųëÆ¯Ŧ˛$’[Å"$k˛B#šd\ķŊF2:ž3ëļf×UkˆDD‰nîHĖ2ÆëČ䧜š=˛Iäâhõ(5YńQÅqw¸Û‘%´lY[Nį‹œā"ŒXÕīk6 köG”Ëä Üye`ŠA`UC|§äBG÷ķØ_ÂäÜXŨ[ģKåÛÜũž•)U8dPįĀįo Æy&ƕy§Ck­\ę%dŒ^Mæyäcˇ-Įž&ąítۋˆ4ģRæÖņnígLųR&žX’27Ðzäú⤞ŊRžû5ØI1°ˇŊ¤ ŠķŽ<Čɐŗ+Q[3ØŲÃyWœwvÛ]”uŒ,gËU ž2ĻL+īž*´ˇ?cĐ_ZŲ][ •ĩõ˛ųO0!—‚“•%xų¸ŦÍ3U´šÖ"ÕúŪkBáāe †X°Ģ ę^$8ãstÎNĩĩĘÜø"Ž&‚%,Â`¤qÁ˙ĻąœXj:#Į§˜ğl¸{O,:"nå;Ųą¸&I<`Q[ÚōÛEáÛ̏ŠI-¤Âņˆ!Ųž2$Ø} ŨXœÖ4ˇßÛWēDH¯ŽŌ #Į1Ŧ  `•ō.ãž=xÍēņŒ5ĻÕ~Ũbŗ ãhPN¸{@ĘģOO—pisē ãY|8ĸööæ)t›¨§šI=BČJ7īØQeŨ•QˇnŪ‡hÅŨ3TŠ˙H7+ĻBĢ!nbÅAČķ,@ÁÉČ5§˜´ŨIÄd ¯&_¨úãœã§A^‰ĸ’tKz›xÉ˙žE^ĸŠ(ĸŠ+ ÅŅ|;8 iWÁ# `OR;dõČŪ¤’=Ę)’æEŒ’ÎÁž]ąäãärĻNH9æÕĨ”RŪÛĪģ!w• Á7mÜC3Ö°n#x§–T<ĀĄđLÁÚ6¯BG™öÎ+ ZĐäÔõ]2ɤUXāŧœ5ÜI)l<#€îëÎãyÚ?U;N6į&ŽÂū&–k›kkˆĘ2:ĩĘīÃ-‚"PYp~RpxĮJ“^’ũ šōäŽMBČy$‚BĩÂ)$ûŽT…Ā0íškDēˆ´hāššXî‹Ã,4Ē ŖštŪŗ•Pvü¸n™"ĢĮâ-J{ 5xlbB†›j3ƒ?ë9!rUT…ė9ÎxĒÉyŦ^My=‚xĖ—‰įyĖ2 Ž ¯ĖĢōĢdƒōü Gâ}FGģĶÄ VøÛGtđ•‚4eāČCœžIœ.W"ˇ5XmŅb—2Ŧd bŨBrsŒŒúōsÍR6{;āōa~@ˆŦpĒ:1įŒô8öîô•4{%‹>X6įĶhĢ”QEQE`øŊÕ4)ąÎđ’$žƒéëÛ¨ĀÔæH.ƒ<¨6™ˆ`IEÃęrČîVŠL—bö å7Ë´˜9}Đōė§8Ė?Õō9 ėsĩWAq:Éo&ĻdĩĘDÁ`…c•Y•˜– –8Æ SĩCTÖaž˛GGOšļōˇ‡;›Ü*ĻWę{pEAĨęQj°ŪŪ[ÃĒŨ˛ˇh?!$€[Š%TgszŌŽiGWŌ„YX$ņ}‚ÚÉŪk+÷‘y™(ĄIe;‡'J×ú›j–SIaķˆn­ŽR{ŧ(f(GĖŠČÛä.}Ēũ‹Ė—wīSwr҇1‚ąÄŠ.Ōy*0NO%ŗŖd%žâę[{9Lfū;§ir¨Ēķ†ī^€÷9ĀlĖēė:͙kxR2fFp¤1í čpØ'æmĸ­ki—LŊ´ļ‚G•Ŗxâų‚´‡‘’rú}Ū‡Ģ:{‹Ë^Æéėˆ†ĶĖiˇ,ŋš*äåûzûfŗ5ˇÔīnîÚŪÔ\™-í›×k4RÉ ’ ų_°;ˆč;ęGŠj—/`!+éWí Ā0ÎÜy<ŠĮķČOÄ7s§EĒĖ“É4W!uYB‰VMۜ€­…ĀÎyĮûB¨čņk–Fy-!ÔŽ?ãŪk™ī™dŠ0C8*ŕp2HFĮ°5$Šu7‡#ФĶíÄ)ˇmNY—@\nLÁƌcČî5Ŗg&­oy~ĐZ#ÅzZHŨæ ļîWæY$ã%Žå$üÜ㊂hūĶĩe,wËws%ÍŗeKî Ēpß) 8‚7'AČÔ͝.î´Ëvš?fŋfE–Ę[%@$N2 õé’ kÉîgŌĩ׊›šP­…ŒîäžHŒŲĪ"ŊKĪöUĻsūĨ:˙ē*ŨQEQYēí”ú†˜ööåCąÜÅA™—>‘¨JĖíŸ(`§r1'ԁƒĪįĪJĒ4]`‘û&&&HT–cģ W8šČúōøGõ0YÂiáˆU‚° yb āöĪøÄ|1ŠĩĪ›ŗJJ`,q2‘É%séĪËŊ;LđŊũĒeáĶc›xËÆ­’šį9Á8 Ûëom¤ƒÔđO~}ķSE¤jˆ]1c"‚w/Cōö žü÷¨ot-^íX"iq™`Ŧ­ŧœƒžqĪ^šĮ9ÍFēE坑Ũ-“EĒļ÷*8<ŽAČņúĶ×LÔ&k{ÛHlĘČDƒqppGŪ}ČĻtē^Ĩŗ ģ+O2PDj¯ē>xÚ}׃͏HéÚŲtdĩĶãPƒ|Ėî9¨ŽŊj…ö›vöIV‰‰Åæd Uzôƒ‘í€MÛmSŠ$Tŗŗˆã,¨Ä($įgnĩQtMrg#K°3ˀÆ' Ŧ1“ĀÚy$÷ö§>‰Ģ˨ZK6Ÿm$pŽų˜Ã`į1žyÉĒÍæ…¨ĖģcĶ´æO3ī]˛yĀnäõ8č V˙„oS’ũĻ–ŌŅn‰pĨX8 š=:î'ŒŖJ× ˙HŽÂĖĘãcGŋ•Nî3ß늂Oki‚/ŗA…ƒ´k) ‚@=~Ø÷Į'˛Ķ"’2Ö)C V rr<÷ĢtQEQE Î9ҊZAKHzUGĶĄ˖(2ü[šüN{sRÉ#¯•ž1Ÿ3iĮ#ĸŧÚ÷R×nõíNÕŽ#ĩļēxV(Uj`6âÄs÷‚õc۟o ‚(cūÛ×ļ§ļæCģ<đO9ä1۞ԃ×W0Ę×zöŽcÚJÄ/ /*r¸ dŸN}û­"ņîļEâuSnösq”ĮP¤Ķ˙ĀjŽŽdv’mKQXâ ¨{Įōą8ÛÉr0;cŽ:I&–ėbuMrsŗ~ÃpÄõĮ-Æ8Įu'žV’×Gßp&KËÖ|¤…aē‘XŖprH“ž„ķĮ›Ev!§Öĩ¸[‚Ņ į/ƒŒü ôíĮ|āô ΗrGūŪÕmÂĘŸˇģ8<ü'§ąõ5 ÖWöl¸ÖĩnŪn‹ įæ ČČįœæ­AeyšëúĖh\ŠuŸrŪ%“åęŲ;qߘíôi¯äĮâmuƒ>wGtrŠōIíČëēļ<'qyˆuíâūęöŪÅmšēÚŌ1Y˜n W]EQEQEŠ(ĸ“­PēĶVPĄ$u‹Č*}<NžŨKˆ‚ÅSĘH|Ŗå‚ đqČ9SÛņž+‡ŌtŸ:ûXfsJh‰@ģ˜ äã$ũÜr''ŊtÖÚ,S¸b†6RĩIšŋˆãœ|æļŧ›{eĘÆŠÆÜnjãĐ…s÷q<÷2üШ“÷gIĀb8äãüœ”ĶsÃ,^`XĖąũöc’U-ÉČĮnįšœØyØß¤,SjW2ĄÁÁänÁĪV?CŌ´#ąTg1ÛĮą×i,‡€8–å¸g9Įr8¤606Į!›ER200;āū”’éĐÂVdƒ-¸"/Í´ŒäޤéĀ5Äę.’M'ŗŠąFƒĪ•X4‹— víų˛žNG†-FĮPˇ’îÃș|į†#åîRûÎĖԌ6ŨĮ9ŦmÆīwâ´šŦ-Ų™"`ųŗ"ŋLî Ŋzä÷5ŅøvHîMZėdwi?×…t{G>ô…y b—éF*;†‘`‘ĸÛæ%wtĪlûW‘jŪ/k›ģ†’ŪīLžhv¤Æ_0*‚q…ųJüÛN@ČÚiuŊãÄ÷6rZ1ģŧMĢ+ŧjĸ€2ß1Gp@ĪĖN\9_ ,Vúôß^Ėņ[<~Ll\+ŋÍĩā•g$cžzsZږąĻ`Ũë6ąMráÅä6rFP7đ´l ÉÆŅķĪ^3Y˛ZXßË‘Zßoî7l%˜Ŗ 09ngÛXjڍÜYÆąŨ\Æąäųqá˛8ã ã8ä’MzÃk 3[ņ æMĖY rÛžo-Šįtã͊ôj(ĸŠ(ĸŠ(ĸŠ;ŅEWšŲø‚įNÕî-á’2szīÄ`´2Ģu?.ČûŨxãsBņÃŨĪ ûš‰|šJ(Vęr6“ŸBA# āôÍé|BŠ}qi%ŧŸģ„ŋš˜8<ā2ž„㎠äw8Ē^Õ'סW×O%ĸ2ŦnęʼnÉ,xĪ2ō;c=*ŪŖŽĩŠŖK4,§j¤ˆCIÚq¸ 9íĪkĩÅŊ´éÁŌFq{ždãoLōsŽ„āüyííîĢĒXÍnļ—7ŅÜB’Ëtļ‚-Ą;rP%Î€CĸЧx§‚īR‘mĩĸļ˛÷ųh­•$ įf Úڰđi:Gps"Ņ4äŗ*ŠRäãĶ'žîl\-Ė-eŖCqÜ4-qsnšPFNT=XŽC&ÍÅ=/\]}ĩ.n—6Ō*ĀëjĻH܎ΕÜĕ<ä`sļēŪ\\Å*ŨÛÚ'" ’"~S†Ģq‚žŖ#åeŦ¯ J$ņ÷ŒXŠRM‘Á#÷'ÂģJ(ĸŠ(ĸŠ(ĸŠ(ŦÉõ¨Ög‚ŌÚæöxÎ!LéÕØ…î8Î}Ŧ‹}[ZÔŽ„qEoo fGō÷LP~o3?ģōōyúãvŪÎâ(Ņ_R¸™”ä´‹>ß* Â_iĻYϚ{§yd–FÚû231āvųĪÁôĸ_Ú"(ą¸6ė Sųgi<íMŧōFsМæ¨^hšŋ*ÚÜCtĀ6îLd!Č ČäŒg$ôĢpé÷6:D˛\ĘņĘ2Ė&š0Ŧ:ČQ€Tt' Ā`›#éúÅÁŗēąÔĻxcĘL™Ü8ûŠvޤdžā2ĪOšˇ‚yG™ä;I$ÖĘ&y<ߘŽÖ$)ų‘ŗ“éͧŠMFęXĨ{—6īž(!¸XØ´ ø˙VāŒķ€EM§Ci¯‹X´ÛY`&K]Ļ`Ŋ@‘ˆ3Ī`NĐrGKÖíЉ4Ō,•BüĶ>H`CuŪ3€7cŖģpÅ{­\ŸM‘$Ôæ†áŽwÛļ]ÎōØfx ģ*>l|¸ĄáÍūøžÚÚŌIénážYX`WĐ|“[‹ šËÜÎp¨Į§9?­rž ˙ Ƥą#}˜ŽŸš?â+˛ĸŠ(ĸŠ(ĸŠ(ĸąüA¨Km§4VxkŲØCÆvŗn œ žĢĶėĩ8RÚÂîā2–‘Ļ ĀRr2y$x#0I:Íyy%冐 F]ËŨJ’‘ˇ+¸"áē`ã8Ā8ašęV&H˜ ؏ŧO$˙!QZępÜ:Eķy…Xą v‚§’åYZ†ˇ`×0ũžFiÖEUš# čÃ$:dŽã…Š Kûrîęk*ÚE)nŧ&Ū2H#!ž÷Pp)šĻ™&ŦŖLÔŖ3[HŠÆhGåē˙xŗ19'€=9āäčŲé’ZĄMĒY˜öˆ&$7s¸ļrsō‚O$Õ+ÛË}éeēšæ+ėŒ&×ĀąČę2xmęG:í:…šIĄuR9VųHüGOįô5…{Ĩę–{‡W˸¸ 8˙l?÷Đ‘ĮPíÄW7 t5Ą"ÕĖsOnF#l)Úëš°Ø`~R㞚Čļw°_ÛŦöīž6éTū €G?Xĸš_ >2ņtāđ×ɂ9`_͚ę¨ĸŠ(ĸŠ(ĸ™4Ém$ŒŠ‚ĖĖpäúV$—ÚŽ é…Ÿ“lĖCĪ;ä †U(G9=}9<4h:tw?jģ–YodųWšnö]Ø€úfŗféÖ8Ho­oa6ö÷r2ČāíL &ߘ7 įiŽ¤šļļ;Ū9Ļ UMĨđp zŸéMšû[ÁæÚmI¸>\Äāp2=:{úÕCŨĐ{—ÛshC§ŠČÁ Ķ$`0r Â+}iZM2ęKIŨÉéŧ9Rā‚G@ ‘ËÔVŠxu­$3]™Än$ ‚HLd|Ė3ČĀŽxÅIc -ĻĄ-īžėԌ2g 2A8ˇ\gŠęjYmš[m\w$ŸĐúäqWŌĮĨhú=Œ÷ŨŨr‹$e7ŧŒX– }Õ.2Ã9ꮒŨcŗˇ‡LĶâp#2ʸÎÜĒųŦĢš%€9$)čN›Ä÷ŪÉŧØLHĐŦ…I‚܁÷AeČĀœtČ7!ˇšæ`‹rˆøY3× ŧ}Č÷<…Ü˙đ‘ø’4mÁl.e‰„gˆ”n!úũâcĮa׃ÆzkëŗĻCZˆå.ͅwÛšÛs ņ–Ž;Öŧ’FFe¸úÖqŊ2ęFÖÕGˆūņ‰ÂĮÆFO9<Ž1ßļ ž9ÄRŧq‡- C’Û:–=p;dđIú W×ŖŲvŅÛÉūŠ3#Kō ;UČ'’0Ŧ ã×Ŋ,zęIxmšÎå įs„./;XžrqĮđˇBŠ,¯tíOqˇž9ąĩÚtdį”ō¤ãŋĨhRáļ‚Þ9Z⠉Ŗ•ŒˆņœƒŦœû…#?2[iLą]Ī ¤ ņƒ;gœT°Ũ¤ˇ’ÛĨâDgÆ~RŲāūYõÁį–B‡žđx# ×>ö—šqDĐīŖel:Ø_T&ˇŪN‡ƒ¸ ã *‡‡õØbņ­i¨Äöz•Ôé/Ā˛€#Ž!‡Yx'kŗëEQEQEKR˛‡P´6ķžĻå` āúW3įYŲIū“l`%Œ;ÖÛį˙Y =Œžjō}ƒI[ÍBúDJn$€mÕbÚ  (ā`œąü2-ĩ}RÔ,uļģ°†O-ãawt7GHāNO=pĮĢŌ]Ím{ŠãV‰a”f1ą^@x?"ƒ‚pYFAåA;‡.žbą mcųÚb‡2–*^Y†A9P6¯9ÎAãéē4ēs]ÜjZ”—sŨ6X  s…û‘ÆNlܛ{{ww>PoŧČ>b}9$ûsΐ’Os‘ÄŸfĶüļ1ŧ3‘Û,-ŅyÃn“ÎMMöH\„H‘~N Häm“œ’„ƒžp}1X÷ˇZ}úÛɲC šũķÜ1ķ(@û„,ˆĀē08"Õîƒ͸ŽF,2Įk€ã I-ƒÉ'‘ŒŽŧsÉĀžËTŗĪâWĮ”Ž_2Y•Ųpw–ŲØoqŽ8|~:žˇļiEą–(NÁrÅqą\ЍŲl‘‡]Uˇ‰´ģ§•$˜[´aŽd‘@e†`T‘€Aā‚: Œę!g”ûŦ>öüūCĨG¤V |Ŗp`—%Ŋr1īœį¯ZlšÎ•ĸ955ņĩ§PyöÍ:䛘DVîpü^vķŽāãĨbk:4WļVđ]ũļ[˜Aōī`Ú˛)#ˇ9#ũžOĘ\S@ņ-ŌkW^ÖT­å¸Ū“‘ ô–Æ@„dWeE€KEQE#=+#SŌa쌍‰æÜāĀŽžs‘ßëTąãĘG=ŋ˜Ēŋ|Eā~=Ŋ}ūĻƒĻųA[Oûda@ųŲ]“ÆöÉŽ;Uŗĸiė Œiöǐŋ™„ #aĐ힟Ĩ2ëFšh\C}+†\5šƌĮmÁ ~cߓŌĸÕå.‘ôøíäԂ"dŨ•įlƒvyį§CM˛‡uĮÛ.å{‰Ņ@2˛žHŒ8=psĀ$‘WŨwŽŦ/Ę|˛s€y˙á}tļvŲY]呃 ˆs€ (Ë`mc҈ĪŒ:×M˙„ŋ]ŠųídmŗĒ– §í‡+ÛnJõŽMwĶí­Æ!r mūœ˙ĶԌdfŗZČûÃ#ƒ800q°Ãƒęß1Éū÷S‘Ueĩ˛ۖ6"Ü+3ŗ \đA#§ |ž‹YoáheX¤—íDģG-mƒ*[eĮËČ ƒŒ œÜÚÃ, Úh‰ŒĻË<¸Æ=§$–äpĮŸ›Ž4mŧTƒbßĒG¸' •9e 2 0ËՏ_Æĩíõ[ …‰VPĻEA´ļz`Ŋ;RË­¨Bņ œHYÎÖR āËQКžKh¤ž)ˆÄ‘įkƒƒÔQėxČ‚ŧģĮˇÍ7‰Ŗ›MÚ˛í%7 œ#ˇ /FĄqĶ­z¸9ĨĸŠ(ĸŠ(ĒŌŪysˆŧ‰Xƒ'Aė2HĪ^ŲĨ1ŧ’#˜ãR‡‚ܐÁĮĄüé|ĨT #ģ•xœgžHJMF<=ííŧq?Ŋwō—RpHī‚(:æ,^`Õ,Ų6ī ˇ Ķ‘AúôŦmCÄßjŧK ęYÕdģH˛îW?1ۃžGąÃmÕļļH,¤‰ĨäRĪ'%į ¸ˇŠéÔR‡ĸháaŽ!V@TČ۟—ÃGnzT7:œpĪååÕü˛ĖŒ@ØĀtĪBNqÉÛōąÎT×öëŋë­ge/•ÆVâH“9@ܕ=FX§CÕ ‘†ë Ž *Æ P§ÉC°ĀŠ=ŒgĐrãKZ×-tĢIn.nPˆ2¸g]ᔃ€ĨzˇčOrGĨ=ۜaIn%ˆD‘HÁ$9\xųFčĮ6žšcZÖ×Ķ-ŧ‹oæÅ[]Ž3‰ƒ)Á<õ'>Í/ˆ,â{KB–ĘŅ‹xār\ā@¸t#čV¤ļņ>ĩhVŪīKd”†‘Oš …18RA$FsƒÁĮ1ÜxŠImM•õ™ž%u‘dŒ1 N‚Ũ F6ƒˇÛŠ}Ĩ^M%ŧr= ˜Œ92, ‰>R­Āã8<î*<\ŠûNļˇUĩÖĨŽ0 Ŧ# \o;ä*AsžšÁc×zõĸYGvooæ(v´Ēķ$xĀ*IgĀį+’zäüÃėiz ^!ž ™´ŋąiđŋ˜Đ¸Ú×LpÃw}ĒŲ8=p¤ ĪEQEQE/̟×úVnĩŠAĻi˛ŪėŒÎ¤Gn&ųĖÜ*äú’9ôÍqšlpÍq&ąĢ_ŲÜ]Ü\āÄFąĒíũŅpĄ€-Üvļ9æŽę"ÖX<Ģ{:ÎKy °Ú‘HŽN\w$ˇ–F0yS¸äV<–úo‡§–fž%”I)–&YÃ28 °/N‰Žœvö÷iqĨĮ{sŅyŲ(ĻTåqœäsߜŸÃ Vņ5œHŅå ~ô¨Āž€2Ã<ą%HÆ ’ģ‚šáī¸ôŽáö™vēŋöœĸ§":\NËąˆÆĀ\ûŨ01œņOđÄí7ŠÍŽ˜§Ęí}ž@†ÔŠÁé•*ŖŲĮ ¯_¯1ņ6Ĩ(ŧ‡l.#hn39ĘŠŲ‚ €6ĮžÜuoƒ"ōü-gq°'ڐ\+°pDØ:•´÷Q ų‰šzTR^(ʅÃČ$tĪĨyv§áŗâ›čãÕ­â:Ŗ$!+)Ü@ōƒß æŊD[ūiâLö‹ø`U”c@Ē8úÆ×lîo-’ŖIVFUeb(6âܑŒ䎃æÖ:AlútĶKO˜–čĒn3ũüR8gbWōôÉŪķ\×a‘•ĸˇ–$„‚ĀŅ+ärsŸjšĻØÍní#ŦņüĘļļŋę€ãä ļrx|Øį:tQEQERŠëëP­ÄrJŅ…}ËÁĖlįŠäŧW ] Rß]ŌĄ2L€Åu4ą•ÛšÛ^8ū  s€ÕîŖwkgsĨŪAWąĘ׍G~UÚ]A`ƒ‚=H5ĩ9Ŧ]ŖŗMqeoįÛŨya ēĘU]Į*ŠÛ×c5ŨÕÖ§ĸ‹ĩ’k;yî ˛Ōíĸ(ÕØ#1*Ãyį<čøCQĩš{+Qī$Y‰A‚vލÎ;.rôÉŪēņéhá°đũã\JJ"Üȉƒ¸)bˇĘņč ë\‹.­tË{ˆ"‰oīäGKĢÆ”F"f.—pŽŅÉ ÖŅ|m‰ce‘Ģ\ũšŪ8H­Ã)* mlö=Ŋz×˙„ÃK–æ+kéE“°ÜVö7ˇ ƒÁĀGŠĮŊmĩ§˜6Į+öŒÆT}3ũ;V y'Q°Nā›,ĩ)7ā~Xy2yéšėÁö÷§RŠcžx=IÆ1MCŒ]B–^20OĶô•ač[á(ņ0UĀķā$‚zų+Ûˇjč¨ĸŠ(ĸ‚qE„âĄËĘHF(ŧŨĪĶĶņĨšXm—ĖžTŧėüÍ'Úr328õæE=˜ä/ĨCuöǚV›?Ø-ÚŒ+ÛĮõģs‰‚wčNL™=ōš&ĻÔ4(­V[ˇjļvĐ!e1^Œ.9\1øÁs‘Û/Ä7ÚŅąļąŽÎĘÖK–0Ą˜ųŌIōõ\ đI-ĶĪmFŦ.Žm…Ë4m [I:°ĶlÆ>ę“Îāã×Ká˙hú80…š;ƒÅ;ļâ{‘Á럮;ŠƒQņ4"ęKh&I˙wÄVķĸˇNģÉ!ŗūĪŽ'Ä{u$1Yąŧ¸ŽéŠ<6|ĸrfN­•l}qW4c­øzÕŖŗģKĀ6oIŨŒ@"RF3Ķ“ƒ‘“ĮSĩē§›žâ'ʓHeCō’@žŋ0;AÁĮLˇKwlÍ 1ą–6ę2G§¯˝fĘÎá-呌ÎlDg(šÆįĀų)´ĩP$&<Ÿ.%ųqÆHyĻ>lFG™ũ¨Ņ,­$“„a†”yy;‚¨\ųjA$ 1Ī#Œ‰<7)x3Ŧw(‘q’|•Č89ãúŸzę(ĸŠ(ĸŠ)…˜HnT‚KgĄãįųSˆČ¤DXĐ"(U ņÉųŽ*¯,ʲ"ĘåTäôųO ũ ķgĮ?ÚNÖzLs­ˆbÕ GV§!O8 …í8ėkrËŎpÍf.ná]ŋ>J1ƒŋø‡L‘ÔŽ RmR×Äö¯§I7ö­įDTUšPËķđÜĨgG~ˇ˛Öff¸JŅËj ųÛÁ,ÛļœgĖuŨ€Üđsɐę—vļhļSŦ‰nܙĐg,pÅCÆĐOԀ { jw˛ ũVæ8"Œo•ų 8Ëš BãŽĢĶ>ÕÕiÚM­„pũž+ŧĘÛ ‚8ę͒yīĀ=p9Ģ3 ßĖÛ9$ĘąR?‹¯Ąk6-ŌãV˜I},÷C!B ÂŧŖŽ įæÉ#ļ8Ô´ŅÖ%Hš`ëĀčwgœã͜ļŪŠfĶe†ãíZ{E‚„Å"Ÿ-Ņwr§,yį<1ŸĻx^ĐĮu.­§i÷W1sČFîۊ‚GP=°9Æjwđo†äB­ĸY`úBę>‚Ŗ_xeXˇö-›sķĻīįšĶĶ4{ 9#ĶėíícvÜËJ€ŸpĢÔQEQEcŒQEeË{ ™•îdx×yNFG'æČ<Œäœ:tŽ7ĚĖڍŊͰYí a†;éW8͸ØAÆ8ä`“Î9īøIĀķ>ؐP<†…šėXæ’ĢЎ‡ŒvŊŧr$ic⊭#EUËĩĀe åãŠäsÎrjÜzt,cˇŊņ›aûĨŽ! ”Šœ0$íįŋļŊŨ­†ŖæËq$÷ å[d2Š 23Žäœ|Ŗ'<ĶĶ|9¤j 3ˤk˛ģnûYX÷œF}_­kCáû]z—āθT z†Ląä ‚^´n%œ5Ŧ@ c?ēŽ×!¸•2‚_‘Ô¨É#ž3ZÚX—æ]{`?Ušķžãį#—§8؂ÆņÎnī`G^R˙2۟Ä:{āZÛ˛3ąXĸ^¤œđŦČ.ŧûŸ.¡ˇr^Yæc9ÎÜ*Ûæ<`Ž7gVo)UQT €N3Īä*`r3KEQEQEQEčō(D`2~cĪOl{âŗžÂFĩ1€›Á.>UáąÛ#܌ãŊC>™*ĸ<’¨…wŊŒpAÁīÚ¸ÛÍWUšēšڍô6q åÛʇ#ŠbĀc¯Lp9eÆĨ+úÅĸ´L?ØcÜTãårÎ9éī×=’iĶĀĘúÛÉā FVÁë† :dqĐãĩV6:„šģÁ.ĄvëREMĮčõŨŽŖĄĀéQˇ†m-utģŠâúG/™îŽ6“ÎOŪęOÁį5ŅÁ Ëō˙ģšÜŗz’I5KUˇŽėl\DËÎav@}˜ũÜ{ëKĻ^,ĐG Hŧļe–7ێ9 ôĀüŽ:Ķd—[¸2Gĩĩš*&–_1° ã-õĒļŽ yŠËu67‘q2Ę邨zƒĶÕ¨š)0ŦpĄĐ$DŠ>Ąˆ xtâŽÅ<‡n u$œ˙žĻĻĸŠ(ĸŠ(ĸŠ(ĸŠ(¤*¨¨Ža3ZÉ Čņ—RĄĐá—=Áė}ëĪ^Æî ĮWŠĻé/ãķ%ãÕ ķčG~¸ÉŌ´yŖuI,õ6ˇ/¸yw2Č•Uãæc× īĐmG§ČĘ"‚÷QŠ˜ ĸ5āįÕ2ëß5č‹nW7zŒÍÛž~w™*9ž:{Ë š#|–H]†Oräļ@ ÃFū‚8í:jq[?’mŖŠf ´jęX’OaĪcÛô…¸—MK†ē˜[G*Œ ]rãéߎũ*ŧڕœĘ’ÂAoo %4Īž\Ļ=Ē84ũ3QFFÖ.58÷`ƒt×ĩˇmekmØ!ESč:ũOz° ŒŌŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ „duŦƒb|\eqfą‰;ÆGéÔzÔ0ivÖęœ‘!į` ņҞ{ōAĪ­N~Î_lŗ_.‚ÄLŠ[§n¤įųÕIíĄ\ŨęĐŧk–hŒÅsŒt`ŲüãTÚI+ø“TūîÆ‘•ˇys’;wč†ëÃĢ# 5BWĀeQqq‘ĐũÔĮ'=1ÜcŒUĩ}[g뚌đ›­îe G|}š=ũĮ­› î,ôÉ"|ōËfcžš g“ũkAg”îck €IROŋ§˙_Û3 Ä`ŒcOĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ~P˜ÆîHëÜõęģ\]lmļM‘FOaūZĢq~w5…ė#æ`ˆûN1Ÿ•›¨Į¯JĢ/‰te?( „ąõųqŸĶÖĻ_čhÛEô(FI#‘ΧC×ĐúuŋˆôYūXoá ryöÎ~œôŠÍũŧĐ -di3÷Z5-מpx÷ŠæBŦ¤ÄŽā Ú c8Į=ņí×ĩ:;‡bwÛÁ됗á˙ęäØ\°;֟Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¤Č'dsŠkD÷‘[Ŗ4y1į>Zg×’œĮ'ⲛPŧGeE뤒7ŖÂ_C.JšŪūíöųš5Ü9;¤ˆ…üœÕˆįšvmö‚5‚Ō ÄķØdøĶÄŗpsÉ-Įų˙NģĻû{üiá'Đ8˙‰æ™Īũ=Įū4ŖÄēéŦéØõûR9|CŖ8ųu[ô¸Cũh:ū’?´mīō˙9uŨ)žîĄl~’üĒAĒØŸģsēŲ¤:ĩ˜Ūäŗä*/íÛŸé9˙¯Iøškx‚ÅN1v~–Sũ’¤ÕĄ w˙€r˙ņ4jĐc+uĪũ:K˙ÄĶ[]˛Rg>–sä´á­Y’FgČíöi?øšOíģMšŲxGĩ”Į˙dĻÂAc‚vŪņ×˙ņ&­Yj˛Ką˜IĢ:Ío$D,Ôd­ĶŌ´(ŖôQEÉâUÖugŽVŒ›Ĩ63û˜ęꙞēY÷4‡x'H0=i$ŽF“w™‘Į9$Ķ•dPAsĶ#ĩ,bU‹ošr:g4âšÎdv?SĮãPIfB¤ƒĶ¤™€§ĩ*Yá8šĮųīOkų.ˆã‘Ū“û-˜QޏÍ4YÕ¸ÆG×4õ´WÁ {ĶžÉ@vā÷Ļ5’ŖÉÜ2yĶmԓķgŽqLhX+gŒœŽŲ¨¤šˇŒaĨÜGŠĨ.ϊlb HqĪ5U5Ą:3ElÁOv=zū}++ZŊÕⰒîŪ4ū$EëĪO|W uËŲĸ‘ž×rüíaŧƒœ wõȝFø{;ÜÜ^Jō´„Ú[ũâI<üsĪ\×wEQEĖŽ[WÕsŅn—u?šŠ­œ°‚G_z‰Ā#ЃĶjEÎs‘ô§Ÿ•Iõ'úĶcEųC‘×ëRdWƒĪ9ëFÔ‡ôâžP”Á$äsų Qŋ$Fũܐ:žÂ…Ũ‚íŽxāTr‚Ĩp¤Æ3ŠFČ^úæ›æ¸‡¯ĶQīiįŠĄ6Ģ{v ÎxÎqYsęĢ(fy•O ŋļ>Ŋéļķ$ÎĶ ģŽ9ādgߏĀՉŖĘā€Āœō§ƒJ¨Íˇ3?Ü|6ãˇåÚŖ,š’Ũ24l­ĶŸJā.í[Oŧōå†Dˇ'ņÛßæŊášbnˇ.ĶöX?ŪÜs]ũQEW8˜ļŦ ŽnTäô˙SHî;ŗžƒ=*9˛`FsøUŽģrzöõ§KˇpŽ8ũ(XČuųS™A`sČ÷§ AųrO¤ÛۓŽ‚¤d_,ƒĶ°4Ũ€Ũ8āqOÚx99úbŖ’O(n‘ĀįüúÕ NŪ(؅‘ņÛmež­<Å@Wˆąų@ĮAīųU)įUÆ÷Ū[äp­fM˛QĪ+Ëßķ•|œuôīUĩ-a"Ž+[8ŖQ™*8­h'+oiüGÛ§œû ´ZmĄe`3ķa~ĻŠHM‰%ÄĢÁĪÍ÷†qURÜé¤I]ŧ°W Äõ#ūFš\Â×!žGd‰02{qôũkģø\3a#a6҃“ž’Ī^EQEÍŖímXg;nTûÜESáYąˇ'­5ēļ>ŧTŖ~ë`Ĩ9°ę $āöi6cb8ãŊHĒxŠŠ)8íĪ\ũjMČĀs“Šd÷pĀŧ¸8ė R¸ÕbŠEš–bĀb¨Īâ‚0”Uq–V}îŖ5ĖąĀ˛˛´‡sve\w:ņ˙ęǚë[ZûĮÂĸ@íČĻÛ˛Áŗ–28ÆķøÕ Fę+{fâ<žsŸ^1žøÎj;;ØíŦŪ2ŽÄ ¨ 9ĀéŒsĮōĒækŠ$”A2í×÷9ã§§áÖĩôÍBWžH›1‚€c?B;ā~ĩfbĶ\ē…|8ŲÉÆô÷5Bņƒ˜•ŧŨ eųsëŸ^GzƎęmēƒ<%đĄ‚q›ßĐÖ ¯%ëb2OķųWĒü3ŒĻœĮŪ>?íŦõŪQEQErû˙âmĢJyīûˆĒÂēíĀĪô¤{¨ãžuķ“ĪøÕFņœģPĘĘáļŊ?*ą§i2’’ÁŒņHšÅŖŋËŧ°íĮLâ•ĩHׅ)=I Ĩ>ģōČaa#ƒž@ū¯ëYęwRyŽf,îā(<đĶ“SOy0‚8Œ¸vÜIۜŽƒˇNįTėŲĩŽ9äc{Œ‹î į>šĮįM‚wÔĩyhTCD* I^Ž>ēÎåš f¸ŧ‘‰[d_1aĩx`qŪŠŨˆŽõHáUVXÎæāô??ņŠīŌÕCNNŲP8ÉôĪcÚšëÆÍÕ¤ ō´Ōģ°õŸ ĪūĒļ°1s"Ũnd7ž¤q\•õÜķę˛Ę“Ë„v ļW‚ˆ&šŽō žŅtJŦŦF=ųŽÁ/KU•$cķŨģå €súĶ žp Ë`ü¤v9í×ŌšmKdZŧÅĸŽB„Žâ u•gŊǁˆ°Ã“Á#?zīÃ}ņÚInęËĩ‹€r2Ü€ŽîŠ(ĸŠ+ĖuŊnūËÅēÅĨ¤JPNųbsÁûuĮåJuRļãj*’IĀ|ā“œôë’j/€ĩŸlØ9*Β¯8?§áTŽŽ˛ļÄ{SōŒ+\&xĮųô’\Š"6Kw,ŦHW€sĶžœSaÔgdIĘ%äæBŽƒ?ãĶÜÔŠ¯\–E|ˆJĢByÃc=k?Qšxî.ŽĖĖŽ6$`ņ‚{c¯QU/ė"ˇ’1Â𥰑‡~09ëNŽÁå“ėņ›i!6ÉÀ}8•_´­âhdĩl‡$ēŗäQĀũ)ō KŲ&‹í˛Œä*zœnĮûGŽ*[Qo"ÖÛ°ŒŽ; W{āŖ›ģĄ´Ž- ?õÚãĨv4QEQ^%ãXYüyĒÁž3"$ížzŽÕ•%œHđ´ą#6b“ģvž}1O4ĨáˆÜ#†ÛĩUō9îĮ’Hõ'Œ bĶŌi•îK6…EícœõžIëūul ÆR%Žh%C€ Ģz‚zw˙ëÕë{_Ũf€I]T bĄ~o”đs“ŒcĨY[)Lš˜Č #iŗPq“Žš#ˇj‚æÎĘæiŧĩh$t 7*cĀ9Éč 3ŸQD:B@m4ĸK’˙3\¨cˇ!G<ŽæjĻ؃į3ÚDÄYÕUPd“•$ tķ4­-„7ržĩ ā"#Lˆā÷•AĀõíøõŠ­’Ō8[;Ëx |’†Æ ž7sž¤ôī^ęK kFÛē7ꇒ¸ [¨ôöĒ–7z=¨k‡Tō@w…đTŽzŽ=;į?\,) oy`ēĖ‘J’”c׎oJš[;Y β7ŪLcI=IČã¯įīUŪâŲĘÅ,Ŧ„­‡ã$zįžŊFąë,6øš‰ãąˆųGiPœĄ÷ž€}}pĶK4sKģ2ą0by=p@tįĨT‚{¨&žYš”G… I!8ÁúžŲzw§KŠ]Oq \XČŌ1Û€",ādą9<ô=ë1&ŠėLņÛj6î,ĢR@ëҁ=3īŒT÷7ˇ’K3ÉkzŌ"pŕ āí۞sƒÉëé^đÂõīÖæi#™ėŠ6[‰ŽG>õčtQEQ^!ã}ãXņæ§ X‡‹píūŠ9<ŠįWÃÉ}ņĘņFØv۟^xČÆG~kWOĐ`’’Î0_iQįŽā ƒí‚īŌ§‚Į^žQou+Go¸y›bPā¸<W­|9{—L'™`Do!€Qŧōåp{vôÅs÷ZžˇmpČu9UããįĶûÔvúÎĢļBuiUyÂáŋ¯å[MĄsu GŠÜ‹IĖhÃvHbšų†ōsĐ÷âļ5/é˛YbŗaeķŪÎ1Žú{~5ČéŪqsö[Ļ}ĄH$n^§‘ø˙:Ûŋ𾗤iûØ~ķŽ ¸˙ĩŒW5ĨØ ĢĪ%4%ÉhÁ“\/~:ûRj]/OX”ō<ÆÜ:ãpF?õ§yqŽiķƒôko,jâ'ļEĀ ­ōŒņĮZÍÎą,Œé~ÛsŅ"ũAȤūÔÖå3ę—dđ8ÆąĮnԟÚZâ8íR@9uŒ’GCĀsPgXeÅää'8ˇ@ØöĮ˙^ĒļŗŦÁÛ5Ūc XEČĪįŠšŠëú֞m­>×/Ú-Фâ[hÔ$ôĮ'Œ{Œ÷ŖÃÚŽšŠIyē›ˆ• †’=ĘÎHvČį§o~]~ˇ1E_Ú7TR%)žšČ΃Œw5Ī\ZÜÎážÕ<ƒw>aĮqܚö¯ƒî§N‘TÎŖōÚæŊ6Š(ĸŠ+Ė5a4Ū4Ö­Öéã|,8ԗ>Tc–#Āȝs°éW1Ü3#Ms&đūiRP'QĐprŲ㠞{sŗåƒ”’ƑFĀ9ŋBp9ĮzĨ—qĢŪEs:,jŗîʖp[  ā…É28æ-Ϙˇ%Ü-w]íķÛĒåšĪO˙_uˇ‘)ŠļGSøãéŒRŲģ"šØ`sŽæēíÖëU‚ã“aY–WJAØŧôĪ|ŽqÛ­ušœP­ŧė.!ŨÎÕ°9ãëūÆi ŧ>UÂŨIp ųIæ18ä1$uÎ?.•cÄ—7ļĄeŠ;U–RÄÉ3'rĘĀr: Žĩ‰Ąi“ÅâHŧšãģdc&#™°åFvî8Īž3īמŠęwŠÛĩįšÖ0e-Œî#9äÛ#ëīŦHŋÚ3ļčüŖ&Ā 9ük5Ļļ‘ĄÉëū¯˙ ŠY#u;wœeœqØtč*§ŸŪŖĒ{ÔbS,ŖČ‰ļģú{UĢ 'žķuÍŧRFŋ;DĖF@ėq’ātéTõëļžø1ˇdwåËÉģ$ž{žkŠ7Iáų~Ætō °>LĨōÎr>bŊ<äŒūU•>ĸĶ…U„"tÚO1œāœū5‘xÎî6F#AÔ3ČõÆzĮÂūuķ?e‡?éĩÍzmQEWˆøâÂ;Ÿë;mĒĒq’H†3nŊj‡‡tTÔfxÃ”„;|Îp ^8Ī<įņúÖÜzT+m~ÖĶȓ°ļä“hŨ—nÅd8š35ë”d*ŲU*ôã>Ֆ–æ;Š>|äã yÆ9üjÆąĄĮgĨÅxnĘà 9č{ņŠÆų]؃ŽŠ3Đ×uāë mJ Ĩ¸ˆM•Æ0F÷Č<‘ú}+?UŅ-lļÂ-#‹œãļė~˜ũkØĩ¯ˆ›j€1‘šq_oå]mö™odŪ[é°ĖH,ąGrÄŗd/$(#?7Æk:CĢÚ$“éļąŲyŠš,6G<ĀŸ×ßŊgÅĢj6Šmq;ęwœ–m­‚[=ō3“ĐqZsÚ\Ũ[Į{ö) I@q–R[#Œķž9īŌąˆšēˆ`ũŨÛā~šĮéQ[†NŌ1Ÿ”ĮųUiŠ a:î`s€Nj˛Í~ī#ÆbRĀghč9ĮĢé¨$o™Ôēî\”RØ#žHÎ1XÚŠĪ ą4έå€@=1ž‡Öģ b-Mã‚ęčFÂxVā2žāvķĪĻqĮ5ÍŨ$ōŽK"ö 隤ÖrĪæ’°^z×ŗ|$€ÛØĖŦû‰ĩˆįÛθ¯IĸŠ(ĸŠņßŦoã aXä8Ī=ŦdgõüÍWđ[„Ž÷$˛•Q‚HÉ*øīĪ˙Ēļb g  D+×LvŠc™€ņĪžkDyĨmäpŲÉ9ÎŗšøœŦ;ÜW$Ž1Ūļīá‚Ki­Ô̏Čr:ņü녚ˇ‘āÜK)(ObryÛ|<™L÷qŋģqĮCķŒ ŸÆņ¤Wđ•bYâ#‘īŸækh”hęy<;8į,y{-uzÅĖĢ3‘íØ ep #ŋĶņũhŊÅÁŌŖ‘mØnˆ… ŋwænāĪlIôˇÁu*2Ų,ˆTģ7$wę{úVĩŨåŌYZ¨ĩ”DÖP„ 7qą}ø~‚ŗ#Á3-¤bÀķÜU9Ō@Z5P¤āsŅE@m÷ė’ITm—œöĮ† ‚ŨĻķdf Ŧ唅ķāÕÛhsšˇq¸Æ=ĢUŗk‹‹Xâ…Ė“ŋ”7å‰EvZũŧ6ļ–‘ĮnV$#,ŦOÜc9ÁčŧātŽT*`IĩF8ßį5g sˇŽ ÉÎ+Öūą0N¤å–ŌOŠķŽkŅhĸŠ(ĸŧcĮw_gņ˛ÍUgP9Ákd\cņũ*Ÿ‚ášæŌ{Ÿ2XĄGl |—œņķ~ĸēũz%kË(Tžā›WËäŸlcđŽxFÍ2ˆĸQËg,Xí§ŲÚ ŸB"g ,ŲDÆH㊚qšt뇎L•Arŋx qõ==ëŽÖlÕė,ŒcˇŠ{gøĒƃ+izÅÂ$ĸA<…9é˙5ŌxüFÖļ0#æPCd`ō?­VđŌĮqikjIÜ׈Ėãî&Gę>Õŋ¯īf`›°bäpĄ5’6ĮáŖ&>R˛/*~VąūŋSņ$O'lŽÆÚÎ(’=Ÿq™1ģÜá[ķö­­jŲc‰# °,b ā•P=ũsĪk{Ãl Ė îã8äũEVkwi9BÁĮAÁëũ+:íAŠF*øsØô̍ˆō8‘Ž~œûԚZb;‚ŅŸ,ÅŽzv"¨ÚÛũŗ_Ņø!čHåAaĮÔ Đņ33HČQ2Īš@lœ ūÉ?§Jæ•ØIS‚Á ŸëPN ˛¨pÎAÎ+Õž.Øī ˛ĀF:­¸¯KĸŠ(ĸŠđo‰HÍâ-okũۈ[nGüđ‹žĩ{ÂHÉám*M„ĄŧA8Áķ6ū<+Ļ×§’4F7…–č3Î?NŪ•Īų4ĒŐp9éŽįŸ§Ĩ\ŅĐ>šrD™bn€ä凭K,QÁĨ˜ØĒÚ\)ˇ õÅrš‘„_X āų™ÁīŒ}}Š/'\iâRc‘>nŲoōå]ĩŨøRŪ8Ŗ’g„ƒąW$ķžzŪõ/ƒÄŗÆb%ØŠC´ppj׌n|ģ›hÂ6|ųb7tīž*ŖŠČ#Ķc‡s.5“$ļúũ 7_…É6mƒ%Íú!}Ų]ŋ*¨āvëÉëÍ3RÔūĶp<ļĘđ˜`°ëÎOsQ#ā˛ž”“üģ˙œÔ7VM…šU‡qÆIŦЈû8RÄo*­ˇ¯$ ˇbw;ˆ*2_é[Z]ŦGFŊvģHcČ'>ŲíŽŋJÆđí˛\xĸÕĸb<—•Į`@BšúdЗĆ3¨Č3šĘđsĪĨsrGÉ$“ĪįëUæ°*¸ĮCū{WĒ|'bcŧrļ°¯īŽkŌ¨ĸŠ(ĸŧâ! ãMT!E+܏&?đ­_][Iáûf”y–î员 Ÿ1aœöäsî*ũõôW7ōŧŗCËėĖeúĪ8<ÕHŽ’M‘Įpđ  b:’ĮžnõĄe™šŠ 6Y6†ų2w }Đr­d.Ąs4˛‰.QōAŪ"O›„ ejŌ\ŪŲ~ÚqöX=3ûëžq^‘EQEä^+M%čŪ™ã­7QŧŨ•`YŠPŖ¯9Į˙ĒŦjw3:蕲˜@ËÎ:ĞXeˆÚÃŲUy¤;˛Ā`žŸw‚zsøÔŅÉ–ņĖ^\ŒĘAŠ[8ĮĻG§Jąy 2[ĨŗŦC3,Ŧr0:“úÕmFÖ6ŒLca8%@āoĨeLV&\ËëĪ_ÖĢ.RcöĪ5×蒱ĶnmP!đ§pÁ@<đN,ÔžŅM…íĖķķ§@U<äu9•s:ã4ē”…°ĮyÜGåū?äÖ9‰Ü}ÂØéÆqÖĄ0ÜÄžsЌ­zÂäxãš1›HūE¸¯DĸŠ(ĸŠō]ÛZx˛ųgŗwwØņΊ FXץę āq˙×Öū)ŧ´ĩhāąd„¸wRI8î‚; qÆęjô>"¸ģ•ŽĩHŪ;h‡ī"H‹#Š=O=xô­¨F“-âĖ ČĘE›áõÆÕęsĪ^Ū•V+´ąŧIįŊČ !ō҉'œG\Uč5k&ēxíîŦQ䑎ė21 įžĮÖ,;į =ĪËĶÚ°í!Œ[ː9—|Ā täí8'ų÷Š`͚ņDˇcJd!štęOOÂ+ˇŒ,qÃ`áĨPī˜oō{uĢ>!™cĶ ļYIvPΈ„uį8#šį†Ą#DŒŠ~eÜp[đąK •ĨPꞀî'ƒĶ8­oZžĨe§Ë.2Éslč܅ 8Û§^ĩ=ŪģĢi 䕎ā.ũá/ÄR{rkõģ›ģˆĸŽŌ8wķ#ˆŌBĮ¯ԁÔô'öŽĻž^ų-­ōR܃–Îsß ~<ÖĄĒęw0IˇR4HY‚bqÉ õ…R´‘]+(;XpGA-ĮĨz5QEW‰üNŠiąJ2ĢsķqĶ×õŠ"ĩ–åTų2•rŌ¨āq“é–8āzŠÚžkí^Î8|ĨĩS*¸* !>¤Ēžy‡^•¯ŪKˆ%ŧļ’<• €2ŊGĐįˇĩliztöQž ’<ŋ3*ā€TqĶŋ?ūĒ᧎ĩ_ ˆ•ØČnË.S œ0ĀĪ'îŽGĢęØy‹ @>lŠõO…+Œ}ž‘ĶũdõéQEQ^MãĢ)ī<^Uw`TœüĢÉõũ*;¨įģ){Ģŗ„E<ŖŽ(8üŠ5ą>ČĄ $’Hû0 =ÁíןԞŽĢŠG¯\XÛiâKĪ/å&P‡į9ëɨķ[´‘ éiûĖĘâU˜ˇLztĮåÆGĸ’ōiĻ…/´ÉmįČ{#Ąįˇ÷ĒÍŽi Û<‹o0>ånÛ°9;AŽ:UyíôÍAVh<¸.C HTgÆė§áüëgHŌãū͛3Ŧ’ÎǏ9;x9į¯b~ƒĨVĨ—Z[‹čĆųĀĮĘI<G=äkFÖx Ôįɗh,˛Č#P7ØĀ ÉįôíX×ģfŋŪsģpĸōĢ–6ãĖr4ŠX âĒNÖ$ã?˚-¯âXQeŽ%Ūîū^q†cßč99äqQÁĢX4Žķ^ąg‰KsŽx a};úw¨Žo-§ēkÉuw•ĖĖ#܀ŧv§zĖēÔĀļ(—ŗH\fC•×¯åŪĢØ{ëk˜-íä–áĘ0ų× Á9ëü@~´ôŌīāĘ8Æw<€¯=ĮsŽ˜Ŧ›˜ĶÎh‰d;ˆo”ŽZ¯$ņĆ%ŋ•6íĨzũĶūMS{Éļę7By`Øįąõū#TŪūE|ųŠ€xÆĨ{?Â)R[[ĻVbM´%‹˙Ë[đ¯LĸŠ(ĸŠķ?Ëö_ÃvŪXËļ8m‹‘ë€IīŒVw‡¯LZ´öĐYæ3"‹†ōļļâĪÉ;‰#`3ŸcšsÍŽ„û>-­âŪwc ĜË?­ex•˙ŗûZŌ5ymeÃā`yd`ƒëØÖƕĢYŪči¨:ĸ€>`áۏ|ÔąyWZ“ÄQ‚ÆûŲ2Ą>¸ûÆĢŨhēúģ’ŪŲ˜4‹ČÆ{÷銿"´‚ōæˇĶ! (Ø6Œ…^2xŊ_nũk:]6;›wŒ?Ų”šÖčyrEU]¤ M#Č۔ŠP1Ü Tw~>c<@Ėį§îÂĒöÆ2O¯?OZ¤|(°¸7ˇh‚~Dvô=O_aV-t:ŲĖ–˛LÎØUŪprHéĮ=‰ú•NúÂīLööŦ⎘ęN0ûƒŒā÷ü¯/_˜‘îmÎÎÖ0ęsÆzœV„rÛL čģŖmŦ[o z{˙Lš¯¨ZĻŖk=쒐HY—Tzž1é\ƟŖdé×7,Ėā"īō ’§9éĐįÔV–™¨¤ÚåŧļĶ  ä˙%jØ^ĒØŲÃ#%Äģš$đN'‡tæąŌQŨUf—æõØ ČP~š­Hĸ,š9$ ŧqįP\2Â|ŠdU—oŋģYr\$“ ScŠ%w<(ü9íĮŊU@Û÷,{ʃˇļ=Į˙_ôĻÜ1–4T$FĢŽK\õãŠĪ˟c$ļ3&Ũęp@ž1ێ€Ҏģ”JR7•K0VbĒ2Øė}ŋ™ĻÉį]g72¨WÞî3×ĪĻ:͎;‚KËžF‡‘‡_Lį#ˇOūŊAtĢq|avdfc T.Ãמ~÷(‰#ŧq4{‰\ī‹6;׸õā•0í˙E)@ 7˜Ä’y#ā{tëųVÕ´f´QåyŒ‰´*ŒŒķëëŸįX'Mĩ pZ$ōcÉÎp7N úžžßZäībĩ†‡pSÁËd*ô˙…Š7{C-á=?ÖOŌŊŠ(ĸŠ+ƒņ4‘Žģ"ID˛ŠF |Ŗņ95Č\éįQÔ#™YÄLÄ Ģ¸`wŒÉũ{ôQGhŠ‘íÄ_ęv`#'ŠÉ$ķ“ô§GwįJŠöĨ˜0ĮRrĀãžA'ŋjŗ§;$˛ŠDhŨÚvī`íŒ'¸ŽVâÕ|-âX"B_OēËܖŒí?/'ī/>âˇtuKøĄXH+Kæs‚ŠÄpGŽ âētŪß!!1ÁŽ)čķ##mÉf@Sƒ“Ī^A¨ĮįĘSj°Į-žõ—5’lmĀ$nÜG<OF ã(axßnQŸ”˜õŽÕF[¨å}å?FāŒúķüšĻ…ŗœĮōíP@ŲÁČĮžOáõŠfĶĄ™d)˜Â+€BõöĮNŸV›"Y7ųh#g9į§SŽūõœ,ŽZĢČNâ^FšöHüÍA ģÚ^ĒGTÍ9åHÁôę9ö>Ļļ.Īc4›JņÆĐ€dŒĐ÷ëĪ^øŦ{ŠĐNĄ@ĘRĖGĖÁxë×^”ļˇ÷ŸfšdA);ˆųH]ĀqĪãų}+:úmJKt7aã´:lÉč>ŸįŠÂJįî ¤’s^ĄđĢ"=AX`ŦpŒz|ķz5QEWžxŪé ÔÚ8aYîf„ŦQ– nųrzv™dŌ[ˆŌia/¸†.Õ$`ö'¨#Ë7UëĻũÂ,qK Ûˇ2c Ī,yÉČ'ĐÖ|2$lcŽŨŅĸÜŋ<8cŽFNA$ÔãR‰ŽâŽK’ģےTü †œr #§ZĨŠÛ%ũøIäpÛB%˛ŧ3uôũ+­X“§2"Čō’>āKŸNƒ•ž’\NŲd–4 ū¯vܜžr>šĮ˙ޝG<¨į–vEÜq žs§ņ¨Ęō‰]‘—g#ŠįņãüMQ:ŧ¯sķā@įŌŦÁu ŠąĢprNÜt?_ĄŦŨIã[˛ĒĄ[v tČÉö˙ë‘^2˜d`…Õxãž{{Õöã•ƒŌŒäí 3ÆÎj­ę1æ„aXŒÃcŽ@=ņĶ•D%–ÕR7lI+‘Œcjãn~ ~•RO­BX2r\ČäüÍū<}kIbaÀÎÎÄöˇNŨĪ>õ“}:ēĸ@D,ĘC`āuĪIÜL9įo$ĘdpFO ŒŸJ‹W”L"xŖUļ V8Îr ĪįžüķX°Åsu8‚Æ3$Äî ~}‡Ŋz¯Ã‹#§ŊũģL%“ȁŨ—ĻKJxį‘īĮŌģÚ(ĸŠ(¯;ņŧRÍŦÃåō#Ã˛“ō‘•ëëÅcĪ$×Iæ<¤ `ĄĮCîyęsëێ*ĪÚ.RhžxÔ3eJí#*pxë‘Į^3ÆĄ{Ŗp\ąxaā|š-‘–€8­RØˆ!13Įt¤ąÛ{āķëžøņŌĐá{]Ũ0fXTōÃī¸cģëËWK¨Ē$›wz3cߎ DÄÁļŧ†į õéÎMęŖf,Į+‘’z_JĨ$¯sq ‘sœœķĀŌĒ=šQ34EŽė.ßNú˙•9’9!L–Ā^1Áü*/ėõ[ĸŌb IÜ}ąÎqSÉž$Š/(ųk´ž냴zķÆM]¸b¤Z*âBŠĐ{˙ãߕ'دňČX$™2qץ÷ÁíU.$3j¨ĖW‰‘Q‡ĄōåzÕaåÁs`|Ä+ep2ŨųĨ¸•—O’RŅH7yq‚2?ZƞŠ,î xĀ‚qÛTÍvš1,‚MÅŲÔq…#šĪqú÷§fM­$rČĸÚÆ$#zF0ĀrÛ@Æ{ķíøSîdˇĶáŽ×H“ĖÚģÜԟR}8qÜ×UđÚ?*ãSC(•ŧ¨K8KÍĶ5čQEQ^wãé„zŦe3ŌMüa1ÆNxīúzâšEēēŠ’íÁŒí8ÉĀ=ņëëRK1ibbŪXiŽ]wvČÆ3׍ΧY"ß<xRBÁ×q; ûØčįúSnbh[tVâI˜ŧļÂ3žœ‚y#ÛÔčp.Ņ÷†iCɸ–aĮ Įš?ũníyäšF’CŊ†/ dŽ;ķČ?įšąŦ2û‰i ÆyᎅW.ķ–g;Uä(8Á p >ŋJ‘,ŠŒ2Œ‚yĪ9˙ëúŌ1‘ĨÎ'  đ§TtØvüå‰ī1‘ė*ĩčō748BÛ°W/–Ā›¯C ‚î{xŪ%G&â<œĘO<÷ĮĶušõ…æ5Q~i‹,wqԟĮųãŌŦAi”S•“R 9ëÁį §\DëlĀŧ€Š’dŸĶQŨ^(ŧŗ V*čÜđ nĪNÛsô5sIįČ"“•—cŗF~oē1íÔÕ­ÄK*ŒÆūŧœ`øã#Ō§€6đîXĸŠ'9'˙­ŸĘŖŽ!yĒÆĒAÎr2>ULŽū§ĩ•ü¸, " 1°ägņôŠ_NŠO+æä„\Áãúūu:e¤ ,‘™ É)‘˛Š˜tËHÖ4†FĀålö gŸNô‹§ZÆæAķļíÜܑ×ĻzT’CopÛeX¤Æ:¨9<˙‰¨fĩņ+3"Ļиėçâ/Ž(>•F<éÕŋrņ°ÛÆ#ßđßĩT}.ÜÚîšPŒāË)åŗž1Ž;w5^3on#ŽĐnÎāķķĀIükwÁi"ę7í#3´ˇn{~ō~žßįŊvTQEQ^WņZęH&*ŦÁZŨ3ĪĘÄģ`ĶĩyRÜ<ŽÛv ž;įŋåM’YQŲ÷†=ÛnWžØ4‰"2ޤ02ŒĮøVļœ|Ø^8Ņ<Æb{|Ŗ–9㌜ä{Vޟa{!Іxí‹D˛|Ēā0 –˙Ĩ0fų…œ7˙Տ֔ļüÛrz‘Œûū”Å%T Á.Öo›Šę}ņM *ė O p}ēÕIcŽ5eųb@¸ČãēãŽĩ Ų•Úv€)>ãœ˙ž•ˆ’EŽ9YT‡R¯ĩj7iˆ â8Øā‚'sĮQũ}ąQÉ$…ØÎ‘Į œßÉÎĩaŲD#äq׎ŋĨD˛*ģBT+6ÔäąíŠ$ Y>đįƒęzUWv“›\üāĻ[ ^­TŸrËU %ÉčX ŒįđæĄx?â`‘Ė#uŒ€§sÜ~‰Á¨ä Œ¤6ŨŦ›“œ•#ęr2sķwé[^ ÉpÜû4ˆčNéIŽŦœ ŌŅER3Æ{œW|\zŅ7ĻĐp<īlvúūuįĀ9‘[îĢ āôĐū+ÚÉrųÚp9ÎsĶĩOq ėĶašPâFʨ(ĀLzü¤ŧwƒÅeA“3ELĪԀsÅ[ļŠŨ3’×€t˜€ą'îT˜ä‚Øī´ûËø,ŧ+¨i‰k E"™9!°ŲĪ{㟭s~´]ŗ]Iœw1UË`ĪB3ÔņíߚŪģŽVÔ#š{X*°‰Š R  ‚`ũßö¸ĮQ›s’Fĩšû/•…DH”ĮŲ<įĻp*šĶW잓ÍļŽÖ)",ë*'$rôĮ9éĮnųÕo]Į2ũ§XGōÂŽ2øÂîcÆĐOéߥČ>-•üG}Ē4érąFZÚߟ›htpB Į‘ßÔÖ¨ņŌôëvō΍˛ų’F§Ė; ÎãĀ HĪ=ũkОšĩŽTV)Úā¨áÔą#ådįßž•dęÖ÷ČÉķė”üĄĐ|āŒprלT–VöÖz܋pÜ 6'<HĮņõ4ĪíVûc­ÔVȑ3m‘eČRxÁ?îį§ĩCuŋs$˙hŒ|ŽcŒˇLäņ÷{“Û§ŦpÜšfšKxƒŒB¤tS÷r,zÔuâēoLno/Ž ß C`$…ÃÍОŧcüŠëhĸŠ(ĸŧᯓĮ‹#›k=œgpĪMōgųūĩ‰w7ØėĄ˜DȧŠPČ9aŒõ=~ĩWûEÍlH |ˆĮ; ŽâHĨļhŖ@H>eŲ†īß<Õk(ĻļĩÛMŊ8V<NxëœTW/t6ĮēFDŀāúā~UR˛ ķ™Ũō0oĮœP—S†)lu,ry÷¨.'žHž<ŧrzgŸķüë*â)„…аĪĒāšŪđfŖa§jRO¨ŗŠT Ōá˛HÉųO`įųz ÕôëėÜ!.ŌvÉ;ŪÁIō;žŊkBßRēˇĩWēTŒsĩT–;sÕąĮO¯zˇc­Û]ĘȌGĘ_äŪŊ~SÜcԚtĢ?$Ãg™g2ûL€î=É$†ė0kĪo´!{ZËšU¤˜’†üšįžŋŽ+—ÔŖoŧˆĘd9ŪC°'9Į_L~ÁŽŖGĶáķėŦ9ÛĖ_d€ĒNW?7ä1ÛŊu—‡yTŧrI!×#ĄëëČQšæ5KDˇ’{U×#C°ÄņĮ¸Ī€#āqīôĒ ¯hIBoĀNJ’Į ÷__ÃÚŽXŨizĮîí.RFOÂVą'Ž}úûՋ¤’6Fˇ;äi—N˙—bsŅTū8ގ—Kw-û¤^Jė‹÷} üŌõŋũZí(ĸŠ(ĸ¸ŋ[-׈§CžâÎDSķžn@Čįˇ^¤}G ŠÚŪĩ˰Ãc%‰ÚJGqģq_cŽI9öëĪz‚ßI¸’_ŗC’`ŖríÆÃčAëČĮ׊׸đļŖf‡zÆc âĘ p9?Qר"Ą]õŅvy$îr™n>ĩaü7re ›ųŒlNĄĒŸđ‹Ü•8 7§9üJĢ.‡y%m˛q–SĪÖĒ Z]˛ūčķÛ<õÅG5š”bBŖĐū~•]´Ķŧ7–č7`7mķŒûWIŖH-­äļxå›s…Y’r›3ÁųGo­h fmB8 Œ"ō—rÛā:ũî2zsÁ÷Ŗzöö‰ąÛĀŗmb˜÷##ÔįōŦËĪŽ™w ŅE*’RHĀQÉŨßYLôč=>¸?5څė,wŧŠŅ°Æõ9^{^*´šŗZBD˜æ1ƒô5Bk¸ž žX9¨ÆIÉëڜ.c”‘€1’ n˙ PšæŪFåŗœ'˜Ēņëjú‚ųd\l`O+ĮcüĒÜÉkŠĘĪ<˛´Ŗå'Ė'ž?ŸEŧ?§O)˙I)ũŅ÷ēT á˜ŖFÜ4™Vۂ8ã<‡áYąh—ō5ܛKᘰtîH¯D°đ´jęëˆZ$*‘ųˆcŲ¸ãē0ÍsWיÜ.aI×1O€Œ<ää˙ЌdÖ6ŖŅB%ÜžQnO˜į°>ư§Ų!,A¤Žĩe€z…āš‰ŽŽPîP~ōrGQoĨ{oÁËŲītģķ<Œå庁ķ~5é´QEQ\öąá+-kT[됎ëÄĒûđ¸f9YyųŋJ́tč$ °Û z,Ŗ˙jÕŋė+&E„ÉlB°eLŋ ë2Ĩ>ĩ`w¤G#‰9˙Į˙/JzxvÎ7,‘F ]¤|ø#ÜnÁüi°mÁ?x*°SønĨFŽ)|ØÜ+į’Ą€?†ėSnt K Â#°čĮ~ā:ãvėã5Yü¤K÷Ą!ąÖ9I˙ĮĒąđŒŨ^ëĶũn˜Ļ/€ttŧrŪ.yûęF~…ieđ—!ųŽ&Æz `?ī¨ÍĀZoĪ}ÃŖK\ŽÃūXŌ؜˙§ŨŨJÅn ü|ĒĀv ĶQžÎ0AXūͧX(˙ëŸûķmÛūŲSO€tūĶn9äEn?ö• đ%ŠŖQģÛŨL6Ä~ąU†đuŗĢĄÔ.H|oEˇ8éŸŨUfø{Ļ9,×īkk˙ÆiWáæŽsūĄ­-pōLžŅŌ6O*2ŒC6vÄ=ŧĒŽo‡Ú,Ŗ(cļXZŒäŅđ˙†­<8ŗĨ¤’:͡!’%Æ3Đ"/¯|ÖÕQEQEc[øjĘ [LË"Ûų%Y¤ląˆĄRØÆNc_Ôt8­œŅšÉūÃ€Ü MÅÉÛ/˜ŖĖā6\žßíãūŊÆi˙ŲĘ\ŪŨd L €<Ė€9ũįū8ŊÁ%-ôXímžŪ+ģ­2K“ ÜģJ ã;I^AĪ TaB€ÔĐĄMãN7L'„Ä×-&fûģwnĮŪīœuɨ“Ãp¨€5íķŦ=ĻáŋvąÃ8 ¸z1&˙ũ°ŌæĶÚiž¤YîîųJœd āíúŒ €ĄZūļy–Csu”HŋŊčD…ņĶĄaõ@aK‡-aC¸ēeØS2Kŧā NŦ ė}~ĻŦM¤,Ö֐ŊŨÉkb„Iŧ}ĨIÜqČm¸aÜ1öÅ<#a đ´×RĮ "¯ >`ų›eŽO=y5n=8ŨXÜM*"Æ) ”R Āmā‘ŒãŒ¨ĀåŋØŋ؉Ĩ4ˇ ”&C1ĨNK vķę ĻKáčŽ!Ž;‹ËŠ6yDŗ2|æ6 –PģrĮvėįŅv–ū‚ÚîŌxo.Đ[Hō,ję÷ŽŌŦüÃ?0ô=8VÕQEQEQEU-^Úâ÷Fžĩ´ŸČššŪHá›$ynT…n9āxæŗ-4ûi^EÕ[2ŧėāÆhw܊¤ô –r: "ĩđŪŠ‡„Úü’O[ŸĩĮĮ+ĄČ?1r€„žÜŨ*{=T˛†SZi#Žy¤aYģ°ä"1Îę2°ézĒŨÜK>°ŗG$„ÅļbL (Ã|Üä’sœöÅQƒAņ$w&I|WæDg‚O+ė 0‹Ÿ1 ŅÁ˙S’foę#S{¸uÉ]™ü’ŒĘ2ņœ_ÛŪ]Č#qõŌuŅuĮÄ[’<ī„Ų¨Y ŠÎx$ƒÛ=iņišâi lúōÉzm„Bė؍ď`e؜wSˇ§Éči.ôMFht˙ŗë2Á=Ēm‘ö–IųBwĻîŸ)Į9ÆpYYKņļ¸Ž=~‘ŅÖ)~ÂÆĮ[đpВ}€oöĢ%†­kqŽ4Ļđ:[Ė-Â=Ē•ÂũŌ$œāuö¨ÃÚä3@ÖŪ$)ĘōMÚ+™ƒJîļr Ģōã…=ˆcĻëÉöÚᚍWíD@‘™B‡Î>SÄÆĀSŽMičö÷–š-ļĄp.o"ˇ'œËI€ÍøœŸÆ¯QEQEQEQEQEQEQEQEQEQEQEQE™Å-QEQEQEQEQEQEQEQEQEQEQEQEá-^ãVŌŨ¯r.ĸ“lŠp㎟oŅEQEQEQEQEQEQEQY:d ĨzŅíÚVlâ sú­j(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*­­§ŲĨƒ†ķX1ųqŒ(\u˙f­QEQEQEQEQEQEQEQ_˙Ų Pixcomp[11]: w = 241, h = 365, d = 8 comptype = 2, size = 10849, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠk6ÜäņšuQEQEQER`úŌŅEQEQEQEQEQEQEQEQEQEQEQEQEQEfŠ(ĸŠ(¯=ø™Ē^isi-k<¨gŪ‰+Æ^ ØĀœr?āF¸Ôņ&§Z{Œ0˙Ošô˙Ž”‡ÄZ™û×W˜¨ž¸˙Ȕãâ-A¸ûEØãŸôû‘˙ĩiãÄZ‚žuŅˇÛŽøí/ü$Ī훐:ņ}sĶđ–â]IH"iĪŽoŽøīĩ*xRÆEÅÆáÛíˇčĘFņ Ä•¸šėoŽūÔŠÄúŽā<ɉ<ח{ņ(§ÂK~@ĖĶäuÅí‡ī?J#ņ%øSûų›ë{qŸũJū&ŋÁ;åčMõĀ˙ÚŋJŧMŠĒ“Ė˜ë›ģ†Įį%9|YĢ(8foRngū˛PŪ'ՁŗAÁ[ˎŋ÷ō oę]<Éžĸöã˙ŽSG‹uN‚YĪ\yq˙Į(˙„ˇSÎß>n™ŧœíJAâŨP˙ËiOüū\~ŸŊĨ.ÕW,ōČ@ã›ģŽō%$ž1ÕCc{Ûw˙jT)ãmZ6!wšĪņ^ܐ?ō-vŪņ%ūŊŠNˇ;cHШō6ėįŽölt1^‰EQEæßc/>ƒ‚ü˙ßēá \Ģێ1ōŌ†[9ãŪž9+¸ž8ĀĪOÔĶ ^§Œã=čUœ|ž¤ŠS’ÁF1Į ÄpAëĮ€FqƒÚŒapW‚ŊsN–`I#ÎN}*_(IÆIČÅDĘ2I\úP!.Û÷}Ũŧ=h(Œ ûÃ=ēĶJ—E IúĶ šģāā};˙?ŌĸōØngA“ÁŽiŪX ÁK€z÷˙=é‚3žp ĀĘ÷č)< 0ŦģéžsĮ¯ãQ4J ĮqĪãLkr¤2ą=Æāx5Ūü2ĘÔnXų‚ƒ´äŊK“KEQEyßÄäķ.tĪ)?ëq3ŗŖ“ĐmúzÔ;v!šĀÆO_đŠ„l¸ÚFĶÔõ#Ū¤1–aå“×ŋų✰9Āúr#ÄPō0F)žYIé’;rÆÍ’F2}9ĪéJąĀqõĮãNļFHĄŖ;y÷ΎŊ1ˇtĘņÜ”×FĪQ’2qĀ=:S 1Īˏ—‘“I°ÜN˜Ļ29ÛøķúūT€ėL˛ō{ŠBÃ'lŸŽ85 * {õ§•;%˜ņ׏­Dã,xĀč0sM‹99˙?ŌģŸ†ÄBáXœ–Cƒūė•ę4QEQ^yņ0s¤įŲ>sõޏļ;Į#Ž{ūDŠ`A¸*õîæ­D‰Žv‚ūŋ5Vōō(ÂŽÖnäj¯cŽŽũb['Û˛›´•ŸNxú~Tž^ÂyČÁĪ ĨōÉnéĮįūzԅhÁÎ3÷úū5Ög99ęsŸĨ/~T“× sۊf8R3ߎj66Ō8äôÆ?Æ ;TcˇsHāŒŲ'ÚĸaÃ.Ņ‚xQÎ*3¸ü„qčWúR!$QŒHQé˙ëĨHÚpõĨQÆvä¸üÅDČ}:ž8ëĪZTį'iÉî+˛øx jrŠæaŒ˙ģ!ūĩéôQEQ^{ņ$nŧŅ׹I˙œUĮ. *{/R=˙N*…^CôĮ^ßÖŦF€98íœĮįųVöž]Ļ™•rFĶßđŦč {{ˆãa€FxØÃ $(Ŧęp8ΆDPPHĄSšīūébž)dqsĶœŸđŠ™ Ā' šĻĸ°cšOL“ŸZIH ˙š”drūtŋ"ÄIPHĮ+×ׇ¨ę\{—ĐnëĮøÕTÕ.*ŽH#5Ĩ ­Ō ˛{ä{z SáĪđŒ—­.œ…Īg˙­LÚģ†ygiBņœgæ?ãJ‘Œį'¨ŠļŖ8l|ĀŽĢČ˙<~uÖxíČ;xÆŨzôš(ĸŠ(¯=ø”7Ūi)’Šã8úÅ\–N2r§i>đÜœäŽ?Îjxđy'­+D­ī0Áp~Ŋ+TؗVÎFŅģãˇ­=×ŲmãuLä`äôãüūuĖŪßKpųf r8ã4û;ĻF ŒA:ú×]g9š€ļ9'Ÿ—š°Ģą\asŒzfœČ>ęîÆN8öĒÍÜHŸn•|ĄŽH#'>ŸN+™Ôp×Ŗ`úôĒj˛1$qõ­ģ (á]é!$ö<úĒŅČ?^úÔÉÆBž ŠS{ŒãÎ;ЉĨH/.}{âįZž ŗŗöb8Å>'Y•|ķۓëũ+ļđ:ˆõ)$† sūëžkĐčĸŠ(ĸ¸ˆ ›ũ#ķÎā~f*ã‰P”Į•R6•¸@sÍbŪßŧŌČEįõ¨ęegÉČž¸Š&¸iāˆH ė|‚OOūĩnēŠĻw0G^ ÅģŗvŧŽ1ËH2rzw˙ŊĸØBĐ>õčØņ]ŧeŒįŽ€äSĄ.ÛrrO$˙õŋ‘yŨ6ãœZk!R7.;e{Ôō3Ņģū}+UĪx-ŖÉ–Đsū5dZAä¤dŠČäuŠ Eĩ†#ĄáØˇZŽÖRė ĶgsŠž5ˆUē`‘œJ°ÛYÛķ{ôüŋĪJr€r9ë×5Ųx$+_ ƒŧyūëņ^…EQEæßޤ´ūʒ,n"dįÜÆĨyŲÖîP#$ ūTŌj^}ą‰ÜĀō;šĖ-6xõÁ˙<Ôh3ÁéŸĪĨ)ea€ĀŸîŸ­jØ_,#*xŸ­C. ŋÚ 2 ėҏķøUŨ;U[u1°Úį=Ŋø­ëmB)Ǝ7/89>ĮüõĢK†ä 9$:Č9 äĻĪZa|\öĪëQ0Æ2TĀ’€ÉŦË!Qļ 6ž3Ū´‚ÂäiŒOĘ3ÆOų÷ĒŌgĄv{ ˙ž*<§zdˇBOz>öK¸l’)w%F9āįĀŦŲlč} ųO§^ų÷ŽËĀÁÆĄ&ķ’JŸüuëŅhĸŠ(ĸŧŋãÅž’p3™ē˙Ā+Ëŗ÷yœ.ą =ũ?ÉĨ‰›# ČĪSÍ’0ņœvüj7w]¤OķüĒMÎp뜕Éîõ Jėí”āā’3Ly˜É$cŒä})ņ_ļõ#Ž8''õŽ›EÔYÕŲO§9īëøÖĒŪ3’¤u#wôĢáËsž˜¨fšŨŒuįŌŗ´Í­m$ŧfF'Ÿ¯zŅÂíeÎŌ}j'āāŋĮ×įųÔ`1Ā ×Đr?ĪøŅą†íËÔwū”Ãæ ÜW Nr=Îiĩe#ČîŋΚĨv˛[qô8¤. Œį qƒīzęüęuYë•ĪũōõéTQEQ^aņ€fßH8Ũ‰$ų{ŧŽ0|ÜsIŧr>æ¯i˛Ûĸâ@„qœšmũŠŽåY4g8Î ,‘™­ț\>3žŋ_ĘĻÔN´aŒäZŗĐ‡lœŒķôíԘcįĻG)UåqŅUiâVÃ/QíÍkÚ\HöųÉÜüU{(ĘN9 įúÔW7nļŌ´™-ˇņcŊ;N˜ĨŦj:…Ũũ~•;ß°€ĖHĮ>š§ ūJ–#Œtū”ãŠyk´–ĀoÃüķKũ 8ÆĮ=ûŸj ôj ŒėcÜŸJ…¯wäįŊ/ÛĀŠƒč)­:3u9éšėžH[T‘FÜŊ?Ũzõ(ĸŠ(¯/øÅ‘TsæIÔņŅ{W–n%Áhî1¯õ¨˜$õg‘ŸįSÚģ#|ĀāôĮJØ˛ģšU¸ åļ„'‚1ۜņSęo–đ˛ŠØd!ščx÷ĒēēÉ?“´mQĀį>įõũ*‰ļ–=¤¯2ÛųŌVČ9Á5M‹BņĮZEMĄ‰$ž~S‘ŸåHÚŒŅÆ9c*Ֆ¨Â6[….Ų8īW.φ[ōÜŗž™Īō˙>õfŠŪÖ#;ųy†b Æ)Ë-ģw+1än˙=i×Oj’HK(ãgņ˙>õ^)ĸŸ…=‡^?—ŊLč2Ažã_­0*/O>ŧcõ¨øØGõĪĩ+ 'Ũf#žH )kW¨õ5Üü8ÜēŦ¤ĻŨėŧs×l•ę´QEQ^gņ{fŌ‰čLŒû-yŠ.â'ŨįŊ1’3‚z`įëHNJų-‘ž”õT‚€@=3ÛfKŸô8bō€‘% ¸œņŽ˜5vëV–ö-†8TÁؘ#Ÿ^ŊĢ=äm™bĮSĪJŒ;L­‘ķu<ĐÖŪd›‚)ÂÔWf8Ŗ!YZFČ •–°ō3Ûą­¨4Ä $R@eĮ##ōü)ÍĻ,Y$ |­ˇ¯§…ęŨä”ģĢ)*`qPYØK=äQ€6“÷9˙<×D'[DRšę?/ĶŪĒËĒ&ØË#ddŒûĶNĨˆ|šc$tĨˆL.Â;gŽ”×Ô÷gl~ŲÉ=čû.|°Äķœįōj{4 €Ŗ8ė)‹5Â.Wž+FĶĪ•ĀmŲ“Œ:Ķ؟”āņ‚ŖUũāÆ1ß˙­]‚NŨXį%ô¯GĸŠ(ĸŠķ_Šéŧčë¸/3`Ÿĸyŧ°° +|š$ãš#Ųę29ÉīøTĨÕĐļæÜč:ĶÖäœļŌŋUÎoÛ$, !AĪlôįô§ˆĨ•7ávã úRä¨*ãq-÷€ëR‡‚2㊕œIÖvĀāaGųīRŧöÁlv,A'ŋ˜¨ėŦV+ ņŠ#6ƒëÅhÉjŒĻW]ĀsƒéUn4Øn› ĪnųÅeg)Ŋ{`~`7)äwūĩ¤ē\PŖy›XŽFIÛh¤ų÷HŖĶ#ō+žēi.dɇåëPà „ŗƒĶ­tļđĘ"_1”q’ä{áKcFyü)ĻI9zSX¨ CdcŸ_^Õ^Y]Ŋ{sÔfŠ<Í11Ŗ|Įŋ÷GųĪëSÁP‚0Č™ŽŋÁšāõ‹Ÿû÷-zMQEW•|feUŅ7w3ņëūŽŧģ÷xŨ´n qŌ€ŲĮ@A‘R‡,,8=iŠķsœß>ūõ*€¸Č#< ™BėĮP8Æ?Ī֔ięÄqSÛÛ<áQ6†=‰ĢGCēuŨŗ§\Ž ^´Ņ ļį9HMh&™ˆ‘pÎīÖŦöc2מ?Īj‡ä]Ã'Ķ$gŠĢ.Ÿ ŽÎÃÛĐK Œ6ëō/ĖˆŸj—n‡éCļÄāvúĶ ŠąŽJ€Oß Ēnb B7˜Aā ãķ5 '\åĢģę?ŠĢ PÁ‘œ’:“ŒķNVÚp¤ŒŒđގÁJĄ‘÷„Ŗ#ūŲÉū5čÔQEQ^_ņ~Ũ&M=܏ÜÛĪ úųļë˙ŗō=øbĢëŽ~ĩ W|m@:ր˛dw`C¯8^§šĄ˛Íķ!ÆpOåWĸÎ~Ē;zÖ֝§@žYAmšãĨhĪŖŦŋ2í÷ņIm¤Ŧ2ŦːF:ņéūqíZĨŲ:íQĶ­A&Ŗmģ Š‚ŋ=Ũˆ(ĀÆ1õâ™å´…’ō@9˙=)B€Ā*`÷ô÷Ļą'v'Ŋ1’d žø˙j„ÚÅŦ1æ<Í0ūĶéšÎŸX˜‚Äg 3íũ*Ŧ?iš;ˇ>Ķß$֌ ĀĀŧĮ9Ģ 8Üãô÷RĎy$süȤÛĀeaĪ8'ÔøõģŸ1yÉ%z5QEWšüVˇbSŅm.˙"Ûë^g‘ŗ ĮäcĪBx­UŗŽ<‹œô4֎Ĩ~QüKØzšÁŲ†+¸°ƒŌĨ…BŸâ\ëŸķŪļt¸TĘKî8 ¨íųVԜmäqОŖüâ’{Åļ€ĖäžČôü+ž›Sšđ•g"223é“UžŌ@ÛūqÎHŽÅ­]Z‚ŗF˛¨8MhEŦZ\!Ųqü%qŒ .uģx@ÚK0î_ķØV{k7WÖFŖÛ9æŠHK÷ŗg“ŪĄy Aš–ÎĐÜH$v!TŒ:‘ŽĩŽ"õ8Æ?ķųU„ „ŽŠrĮԐxĀõĨv§ã‚zįéQ9gV-ÁÜq­,{Â`ąÎëŒõØø ¨HTāyˆvįū™É^‡EQEĀ|E8–zé÷˙&-+ĪĒŠ8ģfŸøn3ÔįüûTŅĘŒå•GbĨĀr .GSœÔūiaûøgÖĻYY@Á aܓTĩ a-— ķJG@:ũOnõĪ9–öS$ė[v˙8ϘT6V,ĄԚöāĘ={đ=ŗUĘųdtÆ1ȧ‰Æ6ôĪĄĨķāŒôÅ ß(Ÿ^xÅIŧ’ēŦ#.>l÷Et1B-áŲb–Î2~ĩ:&,îŖŋ•8ʃžOŽ?Îj/1˜ųyずE@[{"āŸ^iY‘[ŽxsP´ĄvǝĖ=Ev^‘^úEÂéŽؗō¯FĸŠ(ĸŠā>$­s§Üv˙§‹Jķ‘Te?w?Ō’2Qē/¨ÔęT”í^¸ĸ=ŽžlÄíÉcĮJ‘¯`‰iWUG9íÖĒËŠ;Œ įÜū]WXŖķYؖr>ķRE?)8Ī=˙úÔ˛g‘ÜqĮCŽĻĢ’UprI†EV‘ŪĪ9äįQ‘‚IĮ?#SÛ95$(Î (ėNy­Í:ŪH`ß#€_€äz¸Ž6ü 9Į­Í;ˆ€rAāŌĒ6wŒû‘NĘÆ™ žųČ5K’Ęų¨Š2éČ?į­?ËLƒß×üû×aā"ëđd^‡?Á%zEQEWŸ|IĀ{v#8ąŸ˙J-+ÎU€b[Šã*§¨'1žrjd@Wnxãü˙õë+U’dįî6Š?į5–Ī;Ɍž{Ī~i3.ķԎäfŦĨË/!b9Ú*Ú]0NzŋũĘĨ7’Iäđ~lžÕ^i89>œsúT.ĮƒĪ>™÷Ļ;H$ņÉÅ,Hdf-ÆŅߊ԰ĩ’éˇâEAÂāķú}+d&%äU9§n]„;ž˜˙õŠMäō9įĄ}iC?įšĮ T-žäŽÎ8ρƒ€wqūĪZƒžØãŊ4ųÚė|Uĩ)1ÚT˙–rúWĨQEQEy÷ğŊ¯ØgįūŪ-+Î *įØsRģã$Tǧ;AíÁǚŒKä–ČÜô#ĶFprä¨.xãjkĒÆ@õ˙ ŦNÆ IZ”8É9Éô-Å9dēqŸņë˙×Ĩ ģ÷.N^æ‘bw+xëĶëOKhÔ~ķoNBœĻGĩ]ļŠu%p ЉįŊoÂŪRyQ @Ė8ū´!o˜œcī ĶXĢ|ÎÉÉŒÔlÅzį ;~tdķ€ŲHI+ģå\z“JĒsīíHX-€}ÍFĮ#įlduĪ×x6‹S•\a„Ņ¨ōĻ˙ëWĨŅEQEyįÄŅ¸Û¯<ØĪ˙Ĩ•į H8ûØāĶиd‘œ“č1ÍNŽâ|œû~uŠ\–™"yJ3Į<ôúT"C“ĩēã$Rv)Ô{R‹9¤U} FØÃ1 ?je´27¨=ĀÉ?§_׎ԎĄ~éÁrÆŦ” Š­MörŖsÆŲč7O–(Úi6Ex@įëZV‘Ŧ >wp8 œãüķOmæVĀ @Į§ÖœXí ?áģúRēü€äĮt¨v–Ûu&rŖ žØãŊ&ōS`īū× cü˙“NÛ!yīŠvĐIįžøíLb1ō”qÎ1ŒWSāRųÃ`–š00z~ęjôÚ(ĸŠ(¯=ø–ģšßEŒį˙&-?Æŧ×n ĀȐëÅ*)'åį°ööŠä“ʡ‘s“ČČõŦh•ŅQ€r@üĒs„˙Į˛3z(#ųcŪ¤if$ŗ„?ėŊhYKąÛ''°9˙=*k{K—Ūë9?7AųÕøô˝™s c¸X#ņІœä/ú\‡Œ—hĮjTĶ! –}˧ø#ō5:Ē&UBn™(LŠ;NĪC˙×§3Ģ0ÆKgļ9Ļ,‡n#FëœQ™v•]ŠĶØSKdŨô˙?ZqÚĢÕēŽ=M"HUz p0 !áų‡8ô¨ƒą ķ›°=Šß2ˇLĨuū^ɎGŸĪ_ųg5zMQEWžüJ C ėûĪí•æ‹"í'8lõëRīÉáIŨÜĩ!ØáKļ0y=qSFöRh÷c wĪâjöŸub˛æ|‘Ž< 3Ÿ~•i¯´ÔŨåÛÜ6S&ō4ΎÛ0˙ķČŪĮŋ¸úö¨ūŌĨ°ą,Jz ūfLĀÎ`ĢHf%8ÁãŒSpÍÉ#ŽŸ(iAl™ᓆ9'đ x,§¯Ļiâ@šÂ€Aú{ĶKá=}ņūžäcĨ2L2äļī`2ãLŪĨh>œŠ› \ģϟå…RIëŽF 5€pœÆ*)pŖŠÁž}Šū•æÛYx8Īb%ŪėƒÛ<ÎĨXVEå nvöę@&Lû(ĮōĢPIk„~đįĄáp2+Z1EģlĖOŖ?‘¨ÛË!ą7<âA˙Äúf˜8åa ķp‰ū•#•Á۟÷GN*'^~bg8Í4ːLĒF9’?*hã@ŲË1ÉÃp„mHØįžV4ŦɌޤ÷üjEŽF%‰ížGĨ8ÂūV2Ųė1œԆ\đF:d klVR¤yëÅFKķpy`ĶYÛŒcÅ"Íšš=x8Ŗ*o~q]‡Ãņū7§éųg5zeQEW™üWͧdāũšā/šķ-ë͑Á!ˆažŋZ°¸xĮr=ĒĘąRr œ`“ūzqNvf†Ōxä÷ĒfFBÄČ8ÆGáN‹Q™\+(Á7œ~ŸūĒ͆f¸V(Å~đČĪæ8?Z”ŖĒįsƒ×=é‰npw3sÜą98Ļy™Č/#píøĶ’.ØĀÚ;ņüŠ *üĒT×oų1lŋ¨éOHf;€Œ–‘ĪįR!Ųō<ˆžøæƒ0l‘(Ž2ÆxôÎ_ņ¯NĸŠ(ĸŠķ/‹,ãH8ōn1˙}Á^j16={Ôęė€÷GqĮ˙ŽŦ,ŦSæOĄ'ĄúŠž6\ŽFG éM¸´KYFɇsXĶÅ5ŧĄ% ū"ØÜVîq’Ū9˛bY°rŋ)Ą9ëÎ=…hŊĩõĻą-ŧķC"}đ7‚B“…>ŲČëĮ=Ē"?%ek˜õČVl°ü=ÍV‘­ˇ6Ų$‘üõüę/´Ã¸ˇųë͎ĩ4Ū4jŠ:bN=)|˯ŧPãĸFŋáCÆō¨ĖīŸVĮjrÛB9hú¸S‡“$c€™š`Ā\æšnYˆ˙kyŽz äÔLî :ō ϰ,A,ÄôãųQåĮÉãžrzú×gđé8\æFz~IkĶ(ĸŠ(ĸŧŋâ걛J*pDúæ9}äãŒ{š°­ qūåL^a‘9ä“_×­9^āmÁŒ sˆķĪķĢQMt‰2TųfTķ æˇT˜Ą Ķ"ŸåŸJĮžŪKD! lc•>˜įˇųâē]Z1ŸįÚĻT;pCāzĶÔT‚9Ā$`~•`“ÔąāÛô˙8Šãßō‘–8<“ųԐ@ éČüM2æ#=Ģ ÜYyŒgđüǁŽņŗž#9îę Įä i˛ĒĻæ#'ž3Q°ŽGĘĻOSôæ¤ōSûŊÁ ““ųU°ŒŲ8įåÉũM0Īšpœõ'˙­QĨăk3Ÿ›¨äŠŽiI=ÉéīFđp ;ąÜ˙: VŽ{Ō´å‰XöáIÅDYÉ Y‡ÛJXȘ“q‚šČįԐ’ĮQĪĩ2@_$d7“Åv? ‰[ëĄÔ˙A–ŊNŠ(ĸŠĨy§ÅœgNã6÷ú2 ķdī’ģŗÎOų=ę`b`NåĪ]Ā“ÖĻ]œl|b90ÎAĮR~´čžR2ûņĶ’qúTáБƒĶĶ4ķ‚~]žãüõĻ2ܧZk&pēr5+|úũ‘˙øíWkkQŽYũĄPHb„8BH 78Č#>ÆĨ¤`Yu›\zYļ8˙žž Âšŋ]à ÕíISĩ‚ŲˇĮúŪ8 Ķ?á];š‡ûjĐē¨bŋbmĀ⑿ô%Oä}(XÆ5ËPÁ°Wėg9ÆpG›éÎ)ßđŦį/ģûbß>ŋaoū;Q‡Ü‡Ä6{æ‰~Ę~qŒåG›Īņڕ~īg5ÛBņ 2J’23ûßB+kÃ>“Bž{ƒ¨Ap¯ÕRØĄ&FõôŽžŠ(ĸŠ(¨níŖŊŗšÖlųSFŅžÁūu\i6ĸę;ŽdüÄĖ…l8ÎÜã?Ŋ|œs‘žƒ¨¤,fŒŅ¸Q‘øzАr(Ü)7Š\Öu֋a|î÷´…ÉŨ™[¨^™ĮA‘čy’iļúknÖņ[Gä3´ž\„ēĢ’@' NãœuÉõ¨mü3¤Úųfv_*~ųČŒáH' ÄzR\øsN珺â+%ĄO)Ŗr‡ ĒH<¨'8>ũZ›N†bŦÁˇ*˛Ŋ‚Ä•§~ąTĻđƗ=ÄWjXĻIã1ģ&Ö\āü¤uÉČčxČ8livëqČĨ *ĢG!QWp/Ũ Aãž?ē1Ziˇ7Mu,͞4lLōa•‹pÃ8`7ļ2ÜņŒ ŗ§éšd“=Ē2y§$€ų™°$(˞ƝQEQEQE™ĢčŅkūTŗO(p˛[ÉąÆå+÷°qŒä{×ĨKoĻGmpķ¤’pA Ų^[==˛jĨŸ‡a´Tjģ”ĸ,a¤—$CƒŽ3ĮÄIîs=†,Zv7w7 : =ÃU“€ÉۓÆ2OŌŠ [ŗn{ģˇ?.Č €­!ۍ¸Á”?ėĒŽŖ5>ŠäFÕuI|ČÄDŊĪ;6lldĀfaƒģ,ÉjãÖķĪ ÂO<Å:ĪûĻ9øo—æĖ9˙u}*MOB‹UpĶ]ŨĸmPbŽ@ŠČŽ ~]ŧ 0ô"+Ī YŨŦÁdžŨĨ†h‹Û°F`P[8ûÃo rFMY}Úhmbœ–Øå<Ü6N1Č#ãNĶÂÖÖWđŪCuwē(ĖaPQ.NF:ūķ¯û čs*xyāß^ŧh–vˆÍ…o3vTāgh@Āãē‚*Zx2ÎÆ{I­īoÕí HFf ĒHģØÁcæn'Ձ‚ŽĨŽ‘§ĨšÜ\\*Ü>÷8rp2N2}ÉúUú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠnõõ§QEQEQEQEQEQEQEQUđ}[ōĢQEQEQEQEQEQEQER`W˙Ų Pixcomp[12]: w = 241, h = 365, d = 8 comptype = 2, size = 14811, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mņ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¤Į9ĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠCĀâ›v‰LĒĢ&åVÜö8ü…>Š(ĸŠ){RĶrwˇsNĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠÆÕŧC:¤öw2FÉģ͈)QŒį9#§˜ŦX~&čWęŖēnH'ā`ãûõa> čōČ%ŅNI“Ë×ÎGjš?č W•áwn™vqîzôô47Ž´Pßl⃎(TąĀādsÔ{S&ņ˙‡í÷ų—ą|‡ P’}€niéã­öĻÆ…Ā HęŧĮüūt˙øNŧ7ķĢÚąųQÃŊ3éøÔIņÃoģŒy]Įā1’ú÷ÁëJ<}áĶŗū&  ‚3Î?Ÿķø…áÕˇyÍō^…~`ŲéĪJY> hpˇ^gB6•äŒōGŽidņö Ū+šPÁ†<ûįÜŧsRÂu a˜]åP•vÛ´)ნzT_đ°ŧ%č3"ŌŠ|ā1N8Ī?7øT“|EĐ┤’:ÁrÅ$įîöëO“â‡ã$Ĩl&æ)$d/N3ģ“×ĻzTq|GĐfBÂIÜw”ãĄų¸<Ķ"ø—áéL˜¸*#ˆČw˛qØܞŧ{UĢiZ–Ŗ•§˜ōģ*ä•g=yĪE=ŊtôQEQEį? Åc…ËĄŨķ“XĪAÎ:ør÷ aĻ‹ZĘÚH˜ūųD,ĖT̏ ĸî#ļIÜ9=1Ju+õMŒ°›X­d¸˜ŊƒDĘ•rK€w’vƒŒ ŽM]ļÔtÛ{åWˇû.ÖESsd"t,Áw6͜n$ģŸŧģ=Õ­‡Ųå†[wwuōäKv I;G8%ŽJúpâĒ !°ˇŒ6ō†GĮ’Š<ōvĻ|Ã=ėPZ]ZŨĘņ”„Ęˆ$q$rÄW$€pT0<€@Æ ĻMwĨ5Å´Š âĘčņ€–ōLĢĮháČü’)ˇOue#Bc„ŧŅŦfLUv2­Ī͑žH>˜Ŧ÷ˇ¸ˇš×Ξ …Ú‡F”˜q“•āõĮ͌#r8učˆÛHVāDˇ‹%N1‚ĮĪŽs×4˛Îņ§Ú ũäĻYT,pnËONWŽNOLb9|õˇîL͐žb–2˛žWË۞āŒšĮJŅļK+’đũ$¸*mρŅ×w*ÛAuíČđsRÖ=),ĶRkHĖLJųĄ7dAûĨ‹`“Đ;ô4ë´°ĶˆŸjK#Fíļ8W÷QĒ îÃ+ž;ž¤%ŒÚE)$IįĖåUšÉŌ2˙9Ál`ˇ#å;žīC€+BYņ¨a’Ũ>Ë%ŖK‹fŅɸæ/Ūč7ŠŨ´tÆ%ԓE"\@ÖĐŊėËjZXÃŒîŪĖCƒ•äĮÁíDZļ™"ß\‡CŸ!ŠVu22€ŲnQ‚Åq’Nxáo.M¸ūŅ¤ŧšĄ*Aa“…cÎNá¸äu&]Q~#éáL<ÛŅBîÁp U=HÛô$zsėTQEQEÁ|DŽY[NŽ9Y7FWƒ™"Á9ę2Nk•ŊdŽãMXwFq"ų’nōeËgv:îÉėAČā v¯ˇŊŽū%iR S(eՖ;Ģy)8-ĀlŒzuU=Y˙á –6˛>|ĐÃ#ĢÂU‘$(†0v’2Jî ˙t|ŧlZËqŠ^ÚÅ=­Đ‚d„~l„ ĸÚc#;[2+u ™Žm]Īö{ˇ2Ļë¸÷É99#Ė.Œwô>ĩ”ąÂúĨâ(5 ˆÖÕ'ĩl\Ė[ Č!{Œ~<ÕûE­˛Ų˙hÅk´qÜlŠö8ŧ´-0ā#įiëĐqˇž̝$öĢyXŦaģ‰Ũ m‘˙­Ų€/Ęz |ŊAÎcCmwsc|ŗ:lj%ģ`d@v2”¤ë’A‡­7K{yí`XÚ#w›f!2:d°ķrŸ0û¸ųO?íEA§Čsr|¸f{…ˇ i˛Cc[äŪ1“ō“—†¤öĪsuqcn- å⑸F ƒ%Ã+'Ė8mÃvn=ŌMBŲc{H[čĻōáIHeV#FŽŲ ÚWœ‚TM“Zš{ŗFųŅ&ØË:DI¤āŪįyĮP&ŋûYVĘk9R.ķsILA”ˁÉ9lš'ŪįØí4ŨA_Ušs?înŽī !`š‚—ÛōōF€xԚņtčlĩ&…bû)I^XãUķŅōģWpįyĪ]ŸbËĢę(‹mqa z…´&8‚EY.&Úą„ FB u<ˇŨaĀĻi¤Ōb-%›ÅblŌ Q兌¯uåˆ'h=qģĘ㓃öšŨ_EoĻ\Īqd7Ģ´ÉŠšB .ā~\m$đN0*ΆĖiņ&Å#ŒÃ•€U8fÜárGŨWˇŅEQEWãĸDšvÔVo4/ÎF9eėzō?,ƒ×55ÔDQYX.>Bėæw+ЅŨÁķ1LˇÕ´Ų­%[{םŪ3#&YVL¤ļO8$ Äw^ãžōæāÉlå C´ŦÄp3Í€ dî õĮJhš†ōiD÷ÜĖšų„<°=ōĀįƒŽsšĶ=Â"Ī‘[H›ü™7*H ‚āĐ`0ī€:Š…ÔíŽ.c[|6čÊElg%:dåšŗWˇitĶ-â,åU•Õƒ 9ާŽ00z­F÷÷āLîŗEIa;9f+‚Wą@/ķ )Č ‘ÎqÎE@ŗ9˛žO´1 ĩdõÆ>BÜ€p;w5i^XīdŊ’[ą–ŠVä}í¤ŽãCÆ8_sSˇMtŽŌ K0EŪ]üâŊ!‡^ũ@Į8­kh5&’) ŧ‰äeG0Œ1í ÷ƒÁ€8ĮV΍¤ŗĘ\}°&ÉY™†p d“ÔÎOŨጊzŪŽē|Rtc’]҉m |ČBđ ¯#Šlr2§'/OŋŠúäŊžÉÅŽķ„ 58r8ÁĪLœņ€đŅÚ$ąÅ4č­ ŽwH7ãîŽW#f8ĪoCM¯åŽ6™­âÁDV‘ËÛvH‰!¸<Üp yäžy~Ę÷—+ FŠ$œîq’FķšÆPsÜa<æKņظLˆ`āHĮ<ƒĪ~‚Ŋڊ(ĸŠ(ĸ¸ˆ1 - $í!Ԇ ü 8žpG<Œšė*œöˆTÛįjÂĄWx xÉųÍÎ:dsņ¤PØÃ‚e–ęW‰fl)L’enq‚{gîî œu%ÂÜËĻZ ÜĮyģ˜wFZ@ppā…Æ@äg†Œb’ō WLÖ'vtŊ´gWX.$Q­œ…Į$ã$–ÉYŧŗ6QÜNČ­ ŠČęĶŨ3§ĘÛJŗ39ĀČĄVQÔ&>´ļ¸ģē–įbˆîˇēT)e$žN=Ã)ä’ŋÄŅé2ÚŨFeˇ_30NÆPĨŽBã„åēįœsÎچb÷ ¨r°¸c¨I"ãÜ ’ÃAFė }Ū~Ų|ë!$ē…ØģD@KNΒ¨°IldŒAīũŪ4i&͚xīŠä1ØHmŖ1ŠÆÜĘßÅĪ E87ÜÍ+}§ËgŧųŧČˊSjdíÚĮ~Xœp į*@ŨĄcj–Ö~ņå”ÜIĖË+…ā¯rŦŲāįŽĩ¯ĻY¤úŗÂQ ´E‹Û‚ûˇ0'ģĒāôõ—cooĸXMk¨Ą.öėåce™ËČŖ;ŧÂXrWîãq“‘Ļē<’j:‘Žyī”žYX(1ÆøĀ™GVl)R9Á8ÅRÕgģŋ´Ķm`•âģōFB 9(ħ;sœrX į'Ąē_ÜÚ]ÛÜI,Q‹F’c˛)Ëē„@Ą7ÎXō#9é üW6QËm*æ(HkŒ>Į’SÁbIáC“Ë‘ĐāA{ĸ R .ĸMĻ' rėWæÎyīÃˇ†Ü8 Ã-ÍįÚbŊÔV7+™jĘĸ’뇍啁9=¯øOt˙,HŋēųüŲ o @;ēƒžN #×ŧQEQEWņ" 厰x$ŅN­‚O9‘ĄĪ\~=*Ė–Č Ÿ,JYBȘ€H!=<nŲÎ\~Uē…ĩ -ĩ!xPÆ›~x'“އœ)ĮS@đüūa:d6‘Û›˜nM˜žxÁČeÜŨĐätOēyŠõ‹IåšoŗÛyfîÕc-–íęŽXHŋŊ 0œ‚ ¸ŽsíWķËÛnE&įe– ˀîw0ų3Ô Ī5pŲ›Í-6[ŠÁå¨i Œ Bîô8?ÆÜRjV0ŪibšŧxˆVUAĩQFāFcŒsĐúŽiĪûû@-cōļŋ*Ÿ‘ÆB‚_ŽĶŅqĻhÁg˛7†JXŧ¨ü’¨ģKĸã’ĨXô,=rÜdRŊ›JÆČ4ļĐĖĐ ßĪņ1ˆÚ§pę§Šų‡Ë‹V°ÜŦ7MxžTŗ ŋzĄLraz˧j郃ĮōO°G7ī Āf4´a0Žåžöķ…Ë0ÎãÁéiø”ę‡P7î’ØGäHŠ($†l2’rØÂ ‚x$Œ˛ØJš\:dR/•n#R"ģxd 0NG9cĀ?)ČĒ’éˇs]^]CĢ4sœJŦļŲBTc9 Ā^zg¨ÉĢ7÷Ų0*Ú3*¤ņ– HQ–l`sÆr}Ē•ŌÎÅĨ$JÆUYI.EÎ÷Pŧ6í͑œ͡đøQ%Ôfwy&$+}LeB°el@ åžû “€j;ģ6¸‘¤ŧŧŨ'—‰]ˆōŨa$.7drO`OĒ‚É1)0Rm‰(īČÉÆpW§L95­āŊ‘üD͞‘"y|äō˛c q“ž=?^ņEQEQXž!đė^ ˇÍ4‰Ō ĢÎAVt ëÁaĮsĪSZR|6Ķ&–FæÆJ@ĢõĀséũyĒw `p<̈J€F֌Ąûď™NAįúÂĄ 7Å ––ō‘Z;VbPI.H õãO'•Žq$:ĸÄĒÁ•D FG|īŽ;ãŽ0yĢ đļ)2jĶŧG ĻÖņū¤õā•|'ˇû@šm^i[ĢnVÉ8į\ŒúÔūÖdķõé˜33 Æįœõ2dū=jۃđÕô ~ßTWY<˛KÆļĖģÁc&CÆé^ƒEQE˜æ–Š) xŨūĸmô6ŲîŖK}>Úhbˇ“I™w3,Y‰ ŒŒg¨9Ī—_ÕĨšōdÕ.į‰ƒíNe!N}sŲOŽAÁÎMZŠíVDŪžj33ž¨ÄcpääōŨÆ"ļŌI!ˆ|˕ åUNî0OŪ?tÎF0Ŋ°Dˇ/ĩßɐ> ÉÃ&9Î1œ¨āc“nĖųĮŨMĨNxaĶ9įŒâ¨+AŠff ĄUpw(9qŒu—wl×ėîæp$_. €UIųŽT‚ ôã¯;’Ŗ2ƒįŋ˜%rļA^2ÛG`9āņžŌ˛$‡÷¤ŗ`ĻXũí¤ÆyS¸ŧˆĐĘ@D đßu‰9 wę÷ОÃ4F7ŦŋēPМ“‘ŒdŸP003MfIá í‰6ą°ü ƒÔņ‘Û'Ž•]îƒÎ넜ã¨ĮáJŽč~™$-=ßmŧ[TWæˆck1ā*ôėōõÁãšD2ƒ1†‚V8=HÁå}8SĮZŲđ°Ũâí*2ō‘ąÃ(B8ō$øąĮ8ã'ķĪŦxa™ü)Ŗģ}æą„ŸûāV­QE5‘X‚@8ädS¨ĸŠ(ĸŠ(ĸŠCÚŧđnĶt‘ŋ°â*ŦŠ<ž¸ČÆ2xÆlÖLkæKư•QĀl…8Uäpz ƒž3ZSGŠâO,fV|ÍΨÚ7~ņīšhU¸ĪœČcHÔF­RÃ'i!NV#Ž€djØZŧ—AĨļEhđŽ 8ųz‚N3Ęõįí$jQÃ(ivŒFv†RNFOĖpœôÍg`ĮIdF ‡!‹ô9ŨČäuÉøüÍŅbØJ+ ģÁsĩˆ,ęŨO žøč0‹ģKP툿‰XÆ\ëÆc¸ŒŒc>†įk†vØŌ¤dšØH ĮŽĀûu I$įgÂ|S¤+Nģ%'h&a|đsœgūUë~s'…4w8ËYBN:}ÁZ´QEQE# Ã#ÜRŅEQES\á Î8¯ ņŠąđЍT—Ō-ä}Đ0§ú~„zVC"Ū(*Ŋ—ÃČ\ą œåŽI`dûāŲ6<BĶâûo É<0@Āã’kR/O-šIähQHG2v!s€ҌķĀíŽnģÆ%›|^k*¤¤Ü˜Į†'œŽ¤˙ŪͨA,ĸGqŧ’`ûą į#smõČīR’ĒŠ¯ˆûJF‘‘ü9ۓԑĶĒä €0b[›v¸.ŒdxÃ3 J’r ˇ g~\Æ<'”[GöTiI•™>>éū#ÁÉ•‘ĐæÎž’š{yÄn$qČ ž)Ī˝Ŗā†ä×íä•üéfyÃ$ŽÅƒœäÁĪ'$“†ã¸¯WđÃđžŽÄä›I˙žjŅEœQEQETW­ĩģĖë#* ‘lė~Š “ø –Š(¤n•á~#¸,|/$'~‹j|×vųUFq’AëÆ;21Ŧmv’7>ZDŋ2Ŗ-Āā2y8Č9õލ¤ũ1Fâ×ȂfˆG"ĖTaÖ˛āp *A<žŊ*ŦvÛîįÜŖÎęFX}ÑČÁíˇĨK-ÉŗˇíyĸB áY 1ÂrpŲgĻN1×ļËĮ+ƒ˛Büdō8ĀÉå~a÷O •ŽÖü›iWÃY€xRB’sŽšŋ98Ą`xūҰ~áŲ˛ąĘĒ„îÆrzHúũsZZMŦ_Úöō¨“r‰v˛D m1°Î@‚X˙>kŌ|:1á­(Ÿô8y˙€ ĶĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ‘†A¯ņ"+Úøv‡ ĸZ°]€˛íWā ÉÉãĄÛ“ĩ`Åö)…¤Ōˇ–‘2’ŠSōî#‚WŒČqZ’ĩž/ĩ,P Č|ÜA'„ųģSü8.ÖDě€ßqK‘ÆHžO=ŊsQBPnŖyägņ¯^ {c%ÉĮû=¸Ė N!xštĀ•Dą8+Ėāäc ‘‘YwFdķÄ~vķ#ąÚų8_™™[‘ÔĪNrI•ˇÚ­$jÅÆÉb~H㛞G=xLÛļl„%°Éo-B;ŋÄFĐH< tÆ3š°eÛi#JŖØG4ŽÎĮsrā1ͧ$ã&´´U5 Aˆ™ÕÛ ln'§¨#‚9í]׆ŗ˙ž“û9ˇČ+RŠ(ĸŌŅEQERcœŌŅHŨ+Åõ _:ÃÃO$JbMĶvđØīÉ `c'¯÷¸Í $ŽYŨb@0Žå•°>|íįĀdã9#Ô%ļÆŊf•v+˙Ģ2ûžX“‚1×i÷ã¯$K%ęI%(Ŗ{ 4Ĩˆä¨mÁ–'āķŠĒ—%ŧsNËŗ¤%r0(ÎėŪã8āzVń1ÚÚK5Ôsą‘Ž6ĘŊ•Nx)##דPęVâÚ4P"Áe…ŽGŨ$pN >‡>õÍIv^čĀʤd¸zũāėxäV­´ą=¤ åfb JŽpNF8ã# ąĖ3ØĸŠDUB6>C`s…ŨČ€@‘‘W´Ë¨Rāy+6ķ1(pŒnĀtë…îzdäį'Ņ4?Ÿ@ĶUIė‘rzã`­:(ĸŒQE $î'>ŊŠhĸŠ(ĸŠ(ĻÉū­ž•äŗDËcáŠ˜ŲˆüāÎ?ˆ}1×Ĩ1Œ2ĀąŖKåf>V"Øß?/QĀÎ<ŲI* ķtĘĻ<4€ÆČŋ)ÉÎ7`Iã c=jÍúŦŌ¯Ú7e†K× wS‘Ü ¸Á8ęЏs¨Ī<Ē(†GQ6c •#€ãpãī2kŠûų0Ģ,ڍÎãƒ×'ƒëœ„žqĶ;ÅׂËM`Bģ(*Åą¸Š cãņö5Å[*Ė曯[>vņĩ†ãÆÜ}=9$c8ęaĶ#ÚŅ/ؗægŦFđv‚2šČātÛīPD\\Mn‚!šŒ!RžjŠÜw>}īĐqV4Hâx˛Ŧžl°ŖņæCĩĐIîH`|Ė1ÆG é:€ļđũƒ\ÆđĒ[„žX¨=xéÔä“WaÔâ$8pz į¯9î=ęärä`ŽzôüŊiĮĖ.qˇhäŸéUŪK…!FĖ’pv’ĻF}8ã>ŧUˆ¤ åIĀÎ*J(ĸŠ(ĸŠ(ĸŠkr1^MsķhžW|ôÛW;”JƒŽ29į×cœŠâVĩ]ąC1Iĸ+#ŧ20 ŋ.âį'+-aũüņEōė@Á‘ē°ÆÂôÎ,gĻ-…K‹ņoķŽ‘|ą)|īÁ'īĪ9=NŌGZčmė–ÕmŧˆŲŖ3g3ãĀĮ-ÆôčN˛H¤™"v;ĀEf,Ģ gžN29Éį#¯žø‡ZŽúüEķãPlywjŸ—Š@Ŧ‹8Û|ÄŒģH•UÎ ÁÉ=šëžŋS] Lc1`ąyäĘėÛĪCų‰ëĪT~Zi0oi|¤ã @ę8úŸÂšÚÁäE#ŦwXĶ`hTlVaH<œįžšūãc5¤Š„ÄĄ™†čŒû2Ügœzs[ZĨ­Õë3ĀdÈĮ´+(bXŽx•ęĀĮ|õ 6Ë1YÁÉ˛7UVe ¨ ߀0}ēâ˛ĩ[Č4̍­rĒßgSŪ\q–ÎėādŽ=X+‹Ž-@ÛYgŲēCķ#pß g€ö>šf)eŽwž=Žcden‰@e$ķœāqžxĀŅxÕŌ¸•€$9 tāœr9ė2 ņ žNĐ8ÍtúVž–‘K$ )(f¸.rÍČÜqÉ#ž={.[‡YÚ)Qã, ŗä’0y: ķ‘Ú¯ĩב&ۀäbEéīŸîū÷d@Áō1’ 9ŽÃG´Á;FŌ— Í+†å˜í8Œ Ėätû§¨<íāėe–exíļ 1P]6ƒģ˙x÷î=1įšÛęwŗßî #ė¨B†Qœ`ãÛ'“:Ä:ÚÕϊg p!•ön3š°įČp3Î#šdʅŽ! Hų@åXm 'øŗéų`×Ik§8€ŖÜąFá? í– neË‚ +ä“O\ņÚJgōžvÜ>bT‚āgžG9įo,ä ;Hėžb¨.ÁĀFWŸBGâĨĩGŗY"Ĩv ØŽ8ädFܝŊÁ`xÎW¸ÔDÎeī$fB7„S’Fq•?äÕ} Æ:Ÿ‡ĩ˜L×ļŗ°76ķ>ņ!čH$pØā 9Å{VƒŠŲŪYĢØj\˜"âC€A,:Ÿ¨P ¨õ¨í`‘üĶq#|č˛+eHP>NģIΝÍíͯ ߙ´kiaĩ™ŌG+ōČFĄˆˇØsŒįë]QEQEQIŌ™&YHPã¨Åy<ļkö &T¸}ŋØļ„îyCr2 )éÉÁĀ=ĮZ§¨ßCvļ’}¨ÁnŅmtÃtéČÛĶ€;“U­4öšęqmŧĄ‡Īš˜`–;ˆ#Œã߯;ŗ]Ū—/ĨÃąPģŽQGĖû‡*8čr=9t'ē˟nEK4,Ümyô!‡ ķAÉÎy”ö‚Eķa´ˇ…ˆÉ3rvũâ[ˇĖ9Î@íWíŦ‚ˆüÅ.ą7ĖácB‡ƒÁÆ éÔ㧨Ģ2B-œ ›h҉ŨŊĸQ¸’œļFŅÁ'sZžo´]8C ÷‚yô ÜāûkVE‚ØÁ<ĘįÎâd$`x€~nrVšųaYoCp€Aą‰1ōOŋį+ Vr|ŗģÉ!7–ŲŒ‘†ŽFP:āVåōŪé¯hŌ’°–•eu8ĪębsÆN8į~É<Ģ‘ÄÎ…ČėNā3ÎG?‡^ĸŦØLö;.áē’ >j6Ũš¸9ôāןJė|/â“ãi׏or2ÃnØ+m 7‹čPX“Ā!0I<ū$ŋLd›Âz|›ZW]6 –U;QwdŽ1‚9'9ĒwvPĨŠĘU˛Œ" /iíķÂ0$zAYÆÂö)ÚOŗ—߉$$Ë××<ŽÜásÔuSR¸ŽÔEįÉ,į{2 䌀\ã”ô=:TöĪ1†FķÕNÜ4{>Ū=zņŒĐQ<ŋhēō­âA!FIäۖ<“´dÆŪxëõĢc{*F’[[ųÍ6íĖB’zōGĘwcļ8“ÍfØh6š|hŅišK4÷“Ũ’0Iî ŋLÛ’Éģ6‘ku¨ũąī€‰‘^kiĨķŌAÆĖŧ}ÖčyāŲŦy4[”ēŒ(G˛‡ˆŧĄķÛ´ũũŦ|w$𴺊om ČTfQ—IL3ˇŪ#$zôî1Xw3+ЏÔįhâĩ YáL†ŒrR@Æ8Á$ cEĢÃs˛ĘÍ­´ũ8ŪŽŌŧI%T“€ÉcŦũLų×w:ĸ}ķģ2’”g°íÆHÆ2>NŊjã+ ÂÆ2w*0Ā€H džŊÁ9Ī4߲ĘÂM¸ˆHČ ˇ¨äôÆ3ÖĨĩ{ģKˆî &9CĢ Ķ#n8íÉLņ_BiZ™ēŌíd‘d7Ä“Ę ŽF~nĀū<öâĩW=ņø Z(ĸŠ(ĸНr“h@ß^‡<Ōš\‰™RāZ‚YBI( ´“ƒąHëōž lar;W14bîá¯nCj“ÁRß'đ20y VۃĻɃe"ÆË8ĩHŽø×~6Œäžāį¯o^Ö›{,Ļų]iGĖrGn8ŸQŒuęFEÔJŌ#ylvāŧ LîSŧœ÷õlœŽ•r-ôë‹vŽKˇd%åo1€|€N[€O'§#ąĢâ<™K[ĨŽŅ…w;xÎŌ'?Âz“Œ ŌÔZ/.+–$r/drá[oôÆE[ šĮĒģ3ĩ~Q†ääōŊI>ũp`qxđŧNīąÆøØŦŒŽ T c ãÔbÖętɒI"FUÛ* (äc<6wœn*9/ŧ¸Ļ&xĐĢĒ$“FTãæĪyí×5cĒÅä$–ōLc1#Eʤ†Æ\žŸ{ץų¸æ|Owæ˜Sx šLe°@vÚH'ž§ucĮÍ4-k žR…`„ČJŽäžH9Æ÷éJÚYMÁ%ÆéX’ģˆ,ø=ú¤ãŒƒī[Ģi*K+˛ķ]Ä#tĮąĮ¯A÷ēt1í‘]Ŗ‰nđ",@R:98éŒûU˙øfīXŊK9UãĩŪ ’w(^ {ž0p~ŧæŊŸI1É RÁį¸\Ģ0ʆ*JœŠ#9í×ņ¸´QEQEĮ]ÃģŠä5'œk’ŖiË5ŠEFVHŗŨË=Ē‘ō“ēĢ,0KČööķ@°•6Ąaį džÁÛÎJŒÔķÖ¤Đ4ėÉn­ÚŪ XæEU‚ŪFœ?‹.äŧŽ>BkBîÆÂHŖˆo†oHNß0Œ`1Î@‚1ĶĶ:úÆ(“É…ÖÚÁ˜Ę  @Q†Ī͎FO˞j„úL&Û7€#ų€Š‰QZN 7^WŽxĮ<÷Å´ČŖY&wG¤ŧL@Āų]wc<öÚO'ž XæfŒ4ę˛Ŧ°íYIEīƒĮ<˛ãß=ÅYšá4øâ1ÂFXî<"Dų‡-Į¨ã>§ƒU#žŽTŧæFî`Ē<•>ãŽHĪ dr3Rėˇĩtk¸ŖbęxYblÎI>Ôã4žpīįG<ĐļāeŅ8?Ÿb ãĄĸ-d†ŪF}Š7tŒ/$vČ=° ôõŦũiámĄc2‚(<įˇĀ?BÆp<Ûxåuk¨ö  Ž"!Yqß9e$zûķŪĨŌ…ŦzŦ2´Ëo bF ģå † éČã'מ†ģ(ÜOm%äW ėėąĖNŨ§ Āã‚ØžÛˆĪ5VØEms4Ŗ-$jK[mM§Œäätč>˜Û‹RD˛+,b8đĨ#ō˛'āāxútĀë]‡næž$Fĩxá0)Œ ƒŽä•ā:pqęÛ¨Cģ¤`ã8#5-QEQE5Á#Œ÷ôŽjōōhĩgŠęŪEĶāXÄrĒōō9náš ģĖIéƒWoô¨õ;Y"Œĩŧ‡Ëd¸ᕑÊíÆ@ãųTÖkA4ˇ6ē‘7xĸ•\v’Ø9b:œ€=(ģv"' d) fĮãÆ0O8ãŪąoŧÅib•YvÃs1*yųPxÁ=ĮĶ‘Y˛Ė—3˜âŽTžH û؎äcĻxäŽã‘œQžŗš{4{Vš5Œ‘Đė;p28ĮË×Į\ļÖÕ­åķ-üÁ`›71'“H?9#=ŋ‚ę@#…īޤŠi]–&o12~\”tĀä~÷9ÅfÅcũMfÜÛ­Ô~nJ)Ã,Ōmg?2Ꮰœ÷Žq,§ÛnņK°ÜU÷ųĪqķg¸įęNҌîSßęk FĪ& ~öRr įŋ v$sôÆjK{kĢšš XĨši1u$wtΟz‘ūI¤ˇyĐØÆėXG^īú€:Ū„Ž[¨–ePĀ7;•‹œäō:uįš¤šĪÎv ģĘ  ’øį•įÛFsŒõ]cÜLÆVd ‰;C‘ķČįˇnāvįÚ|ĢÅâKí 7ÖaUŨq—SšÆ č{a]=Ž HvB°ķŌ1ˇ#ßŌŦCl°“å’œû’y'ÜՀ1EQEQEQHFj2pąõâĒĪ;ŠÛ=IÚ 0úVuä7ŽņŦs,Qä‡ŪĪ ‚¸éĪĪĖ*´[c+,Ō‹‰Öb7ņ÷[•žøãØV$đÅu|ŅBZIRFņdq’XmĀéŽI<“Žšæ|G'üKâ´ļģo0šķcØPŒíČ''ĄúŽp+&Û@ē17ÖåŸ*ŦÎYČ``į}ÛĻ*1áB&Ë XÂŗĀÆFO¯$ęvįˇ5–öŌG*ō˛ aœ{^Ã`UË6õŲVŲE Ûe\._ķāōx÷ô9ŠAÔ4éíļ$ųŠNæ*C¯<ô?Ÿ¸5îl’*âIļĖ„g!ąĀÁ#9Ī^˙…hé^Õ5+c˛Õ–ĶīK+ĄU[r‰'æČĀÛų÷č*'IœCʰĘgQ?đ1ˇ =+.ķIŠIcËĩĀ0Ö_0)Qו8Āų˛>ŖĨ1Úî/-í)ŖPÁō¸ęC°dqœpbÛF´#Ė’Î6’MĘA~NI$āä1>Üg°­&%РɏíØ\ƀ@<ĐôÉ~҃Ųãû"üĄ"M´;°¤qÉÆ1Åfę:U˙›…åh@ Î ,I '•Æņ}æ‚2:=:kaŧQFQsļ%ā}8¸č>ƒĨhQE=čĸŠ(ĸŠ(ĸŠ(Ē×#$0¨Đį×ōĮãT~Õ l12€åIbH\w8ā~;zŌ‹‹Ų"/¸GčĢ#íĮOJįÚ'ŊŽ9Ŧī.ŲĮ#Ŧj‘Ú¤°âÄ`’};‚ į'‰ŸJ’Iby ˙ģ*Á”ŽF@ čp9<´æ†[ÛŲc{¤0Ž U]Á˛2Täœ `Č?”›ĸA€*†Œĸ˘Áü3ėŨHÆĶœTöryĐšeųˆÜB9 ķ‘ƒ×üņWV0@,ŧõädŽõ ihĸŠ(ĸŠ(ĸŠ(ĸŠ*Z8ÆY‚’0 #šÁIE¯ˆg‚]ˎJŗBcQŒ€Ôq“÷Tž¸õvōhã´&6‚ŨÛũ[JÜzņī“žũëm: ˇYMh…Û&97$’lu+—ÜA?9'ŒŽ?:đx~ÖÚ÷ÛBŗFÁ‘í[ĸ)ʂ9ô'đÍ\Ôd]7ËģŽŲnr˜;ģ|ŒvqԐ1’}E¨ôĢĢČmÚkŗm)Ų-ŧ¯tŗ Ŧ1Į*IįæÁ¨“M’ ƒ@ÃŽųJ9%“ŒFįųHėŒä=4š—ČIdžęî8ō¯Ŋ„HŨA,Ē~P8ĪŽĐ Ģ0čm…§U2ÂACė0#€;öė8Ģļö0[Â"ŠŪ("į÷qŒØÆ=zU•ˆį%Øį§ĩ9bEmÁFŅEQEQEQEQHséšĖÔlQ„wqĀ^âØŗĸĄÚ_8Ü:€s€pxČ"ŗ!ŧŊÕG›`‘An˛ZæF ¯üJbPyčĖ3éÍY]1Ræ1&ɤeÉq ,¤QĀ䞚ã­iũ1wÁ°T`tüúS'‰<¯‰ ÉnœuĀã8& R îyqŽƒ{sųŅ%ĸ4lŠŠ“ŊB€9#ŋãúÔéĀ FxëRö¤ žO§ā0(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)Ē›Y?1ĪR{cđŦ›%­o›QĶ%ąEÄDá'Qœ}g!ŋ×"ôą´Ë1A'ŒĄ#včM,–ō9Ī~: ĢųôëU-´hm§îį““™î]—Ô|™Úãv­\rühœ`ô rzÖŸEQEQEQEQEQEQŒŅEQEQEQEQEQM†'qÁíNĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ų Pixcomp[13]: w = 244, h = 365, d = 8 comptype = 2, size = 15885, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mô˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸšũB˙S‚é–ŪâÍc'…’Ų€éÔH3ų Ēú[í6Yŋ˙§hë,/,ŽzĄ>ūDÍ ŠkGå[ËpF~ÄŨīíSžÕ|I”’ÚĪaq2Œ¤&Ø mŪaĮåé\ øĮâUÔ~Ã&•gÁˆpĘų\uã#'Ú´§ø—âh&(Đim ŽDūbˇ}éâo‰QĻÅŽšY˛ŠĀ`ßüŠ'øŖâoEšļĶpčLdÄüœœŋÔđ)éņ/Ä˞2Úi§klU1š'×øøëS[|FņÎ ÁĻ…Ā`ŪCāƒßũgųü+:O‹ÚâTļ͜ЯD/ÉGßĻÅņÄ>Á§ ļҏ8$įļ[Ü~ž”OņÄņƒö =ųÁĘ8?_ŊVŦ>*kבų’YXÃÎųnÁ}3ķƒŌ´›â°Ōˆí˙ŗĨĘũ允†˙_Įڝsãír×xiō 7ú?ĐVhøŖŽųy6v™ŖG=~•-ˇÅj-ŌÉ%q•V$zœ1Ā˙>Õmū"jˆ‹[?=ļ2p}>÷\gōĢÖž4Õ¯.āˇAfi’/4#deą7c­wļ˛4֐Ęà čŦGĄ"ĨĸŠ(ĸŠ(ŽTBnĄ˙B5*’ĨW8ÆrG§oķéO\•ęrzœôī×5 Œŋ(Ā=k#ÄR͒”ŗļĘŊK'Ä~=+Åou‹‰¯Ūęæ%kĻP†GS¸`Į^Û}3Ío[ŸEŽUãT•8ÁãĶƒßž=jÍž^PZAŒ6į<ũÕō3ųÕĢŊęŲ-§žÖā´sV2 `F{€0:ãŌĄ‘%ˇ[™-ŖyįĶjÆ;œ“ŒsĮŋ­"YÍȑFĸ%RBü‚ŖÚ:õÁé‘ÅgÜØĸ–’"ØgŨēE ėÛģįņ=ë VOõ‡*w08ĪN1ų՘áŒÄ9;‘|ĖąãŨķÜSŲÍmk:=Ã!‚MĖ­éÔtüûztÎkąĐ4ũFD<¨˒ĖĘvîA÷ų{ōT^(ÕVŪ饹gr[8\ūáôÎxĮ¯Z†dg{n ¸`”ō–ܧšėNPyĒׇŖWÖ&k•ģƒ_ €OCqہøŠmāššđynތxLöéõĪ5Ķé˛EĄĨDČĖ>ŅÆĘ2H:ôéŽĩęúq-ĻZ’0L)Įā*ÍQEQEbß|ķwųN8ü˙­gȚܧ>Ø˙õSâMǟ)ŒŸÂ¤ØTxČÁÅy÷ŽŨy­ŸÁ6ļą@ōˇīJ°pČQˇÁûŊ:÷Æk‹ˇķK\¤J°[+pÍ)žęz˙…dŪ-ŧåßû^`˛6@ØÉx>^ę1×1_4öņ˙ĸüŖaڍ÷Q{}zÉÍCsk,Úyqb8bÜFˇ8'z÷>Ŋ*˛]Ŋæ¤x÷[ˆeïįZ:O‡nĩË ą-â,f įa#ˇL…ĪâkÔ-í…ēˆƒHcX•€8ũžl~?Ÿ/¯¤6ē”lŌybbrÄ Æ@ cåëבôŽb_—WŊ‘Œ­˖?0<Œōx?{‘ןĨni‘Â4¯ĩÅšĨ‘Ū=ė˜AāaN;z÷&ŗŧ§{¨JÄ>в0ÎėāsN#¯¯q]=—Ųc×,-ÉS"ŨB¯Zõ=,įI˛>°'ū‚*ŨQEQEb_Ļ.zdœāãüúuĒ, į¸ČéüęU9BA'žãŊLã8ČˆīTnĄˇēVę4–5!öē‚2;ķÜWēąš+›EŲ Á Ā` ĪSëëQĪp˛ŪKĘ>6ŒĻIRX€—ĨIfZÔ­Õ¤ųB=ąr™äw99ÎzS/5Vö+K{™‹ĀY^A¸|˸•Ũ–íÆO8ö'>îā_k?`ĒŦDō0föíúwĒVŸS{idQúŌŅî,Ģę>ŖŒuįÖļĩÍ&Úm8@ĄaUpJŗŊNI Üt'Ķy!SÜHĮÍEh‚0,pNN Čęxö5ÚĒĖcgf’SķÎWÂã‘Įę gjđK¨X+î14o¸Däa¸ú‘Ķđãšäĩ+cœŦđvgČtŒ`ôË.:ū â¯čŅO‡šØ…ķ!íÁāŽŨ@ˇŠmĨÃЏ1y“°ų‰líéیsØÖu›ĄņfœZ Č×в2¨ÂãŋåõÅ{F˜ŌlĀBč"­QEQEV%ücí6qøg5DŠÜ7uį¯zzĘ0wg‘“ŒrjFlŒ.ėUgŒŗ|ŊIã'Šč?ĪŊpé!Jg’EXļČĨ°ÜįäáI uįŌš?  "yÍq6ũÃpČ?SĀøæˇá´%ŧŌ[iō×w'q  *x=ž”‚Ęâķl6ŅKrņG–1‚T1bC`äu>øÆj„T‘ŪޤÂGīČpFߗĻx=úôöŽ‹[4@úĄ”Ú´ŖÉ ›×pįc gßŊpÆō{ëįuž&CēRPĘÛxûšã=yôãĐĮu§Æ×S*ąXžÃÎ9îqΝáíYˇÃ’Ë•# ƌvôõ˙ëWIā+™äÔX1†Hö—Õž¸zœãŠí´Øŋy{qQBõlæŽ8+Ō­Lä]11“2 S(Į#nOā9īDļæ@ŸhŨæg2°A´ŽW‚zdsĮ¯­sēė6ŌG>X‚áá ŸŊÎ;žiú]Īö‚\ĘÅ´¯•Ž8Éã€y=Ŋ5_NŠV×´ĮØŲ[¸Ir1Éq÷ĀĪoËŌŊŸN˙]Ļ:y)˙ ŠŗEQEQXˇ¤ųĶųÚ=đ*”Ē7Ü1îOZt`ėy§Š,ėģąõ×â^i÷siŅZ[Iˆ7īäÆO=ŗÜŽœôÎ}<æy&ģˆĀMČŽĶ•_› ‚ qĶ‚s“ÛéLŅ ÷Ųž/2ŪTdd. bl cĐ}O¯Jë…ĖŅi)zļÅpŲ›‚–ûž‡ĄĩÜÂâ†iôõ6R5Ŗ˛î\2I´üÄ÷9įŸĶĨxÖu)î$syrÆggڒ°ų‰,p>¤×¸øĖßøÚ^ŪIĨ¤7)z™Žķˇ;ŋŲ ŌšøAŌlEä7RYÅaĖgsŒ*ŒƒŸrqúV ōŦ‘BģL2Hã†8ęzņŸÃ5ƒ4+į3Hä-•‚A$sõ?SøÖ–‹4š&Šc(,‘“æ4KĘįžœ{ûūéņM•ėąm‘āu2ŗĸ€‘íq×úÁ.õ(ĸRÖøf‚¸'=@'¯nõÍkW§PDi¤–9†J˛IûĩĮ#<ũHëZé5 âkVŽdQ€I!Ž“îx#ާÃrĮu#Hą„o)X.xE+Î>b9#< Ž=˛Ø•"ņ•äŠcöČU÷ ŒœéĶ͎ëzqMĩ+ĻÆzôfŠ(ĸŠ(ĸą.ûlüķŧc˙ ÕfÁbIÍ"“´Ôß4‹¸ŗ€ĮÕÎøĮLÔu[N}˛$ÛØįæņĪozåŦė×ÂW2ž¤¨Îģƒ:#aƒ€éœōOLsY–Úe„ú“Ûéw 1wÚÎĒĢ8bq”€9īČąžW°Šå`UŒ+cißō'åaę22? օ–­ud°ŦWs,M…IØŧۓôüāÔu9õ ™ɘ­›rÂĒC’y~nĮ=F{kNĘkæ–5ˇšhˇ.dœ) dãĄäéŒÖmåéŋ‰ä¸ŋ{¤I – 0čWo’zcg5ĖKi-Æ!S9ËF΂x8į§ZÄ"(î|ÉŅŨ‹‘ĩž] c?AÚĸKw æ8d“ĘܑĐõ˙ ¯Y°vŸAĶî%-–$ČlÃ“ßķõäW;vmqŋ• ãįĘ Ü1žNpHú ĀžÜÂŦāI,xōŎzŒvŦŲ mŖ”ĩ2“čfĀeę$2{ķÖŊ'HĶ͞†fˇ@ī2 |ļp9@ہߑĀëĐVM„ķŨx§N¸™<šRæ4ŪĢÃ7qëГ×˙Õ^ɤ9“EąsÕ­ã?øčĢ”QEQE‡q´]Üt'ĖĪ8ūęÕv€?Ÿ&œ¤CÜãĨ¨nAëîjH×<íö5â>9ÔPņú0Cn|…U\ŗmá¸úäl{Ö5Ĩëi—6’ ’ ļŌFÖ8#ŋŋ Ž§ÂˇRIá{‘tá’Ũ–8ÆōxbF;~¸5­ŧ‚Ė,hŦ˜!l8#ŒcĄ'ŠĒc{ŲĻ_/uĈ  áŲwž=Gu×8Á­čY[1 Ÿ‡ šB˜i<ÔBŽNXN{“͏ės\ŪŠ§‹hg°ˇP˛%ČWš,rĄ=¸<ņÎOĩgO <“ŧbdaōųĨT7#g§OÎ¨ÉŖe'ΉˇĀw`˛‚1ø“ģĶĨmø.Ö {JܲÉ2ĘE<āōŽøVģ2­ĒÄ$dÚ¸EQˇ§LƒČ#§áXŒ;29Ė ŊÔ¨ÜzömŨŋZåäfŽåĐ7›QŊwc øũ{{ûT6ZQ™$¸‚ĘY"ļ—&9 “Āɐ=¯SÁ¯@ŌnnĨē[ymXÚÎd.H=ļ€@< įŠärzÕQ¤‹OéŗŦqˆžîAÃ0;†áĮšĪļkÔt<˙`iŲëöXŋôWčĸŠ(ĸŠ+īæģ™Tr'ëĩjŖđĮ%•H>čÃ6…p É˙ |,NŽHį=ũ;õ¯-ø…áØėīVFwKŠČuŲ‘ÆG#žH?įĮiņÛĪ} ­ÚEäĘøÜrĻ0s“ž{côú‹Iĩ›CÕõ5ŊGmqƒ”LŽōr€Ŋy#ė{ Ũđũ´zÅ­íĘFëkŠˆąāJÄN@9dįÛ¨¯āļ´Ô¤—NšîŪö8•œLĘģã#ŽGB6ôö<Õ!¯kikø­ežéņ îųĐgĻâ Ī'Ļ}Š-5.î-mu['[›‰ Īqå”wbwd¨žŸ€Í]M/ėBî##J‹$d)žœœõúwÅJ‘­ĖfI“í Ė2WŒåN}{ ŊĨÅĩŲX Xĸš Ø.áÆ0:p¸ܛÅ–Ë3˛ž§éī\ˆoĨ‚rīl˰üĨpW'#¯^8=ŊĨbAtˇcoŖų>_›¨ g§įU%ķ `đ<é†dIp’NNrÖŊM×I°CH­…™Šã?–N:včkN;hâÕígŒäKqd<…m㞧§éÖģmū@:q#ėąč"¯ŅEQEVæMüų?uÆüjģį }0F)H;@͚yų2p0=¨ ĩŠäzũ~ĸĒjīsm0ÜÛ¸ņ¸r?\WbŗŠ)žúŪŅ7Ō<Š Œ`ķøķ\W3âmz{įˆ[ũĻ+MšÚëądn‡|}}+ŋømwpūhfĩ1A ŋ¸™FLĀōAtŨšĀņnŊĄØx‚QpĪzķ Y"Gî”rpI,ĮˇžryÁŽxzmĻí+\N’0ĮČ 09dę9ãqČÁÎŪ‡n5 V_ėÍN}NXĐHVi2ÖWįõíÚēŊA|גxWln2Ë €##ŽqŽ eÛ1Ã;Ģåųį=ō~õĨi Į§OuæŌ2ČŪY“ŧļNIĀ8Į|pzĶŽ$ēŗIfWIC$‘ʐqŒdôõƒÔVčĸŠ(ĸšë‚?´ī#!Į˙Ī4¨rķĘö• ÎŅΧt”ĮžÔÕÛšXđ͓ڱ5OiÖŽĐÄëq8Ũ÷åpH“ŽĀķĮÁxļę;čĨHĖ—jd2KíÁ4kˇ;ˆåXā÷€=3V|/mĒø¤ųw’:čĒJĖäļéŋØSœ}HvįxßĮRXĘ|= 'ŲŌ $ËŨŧpąŽÃįŋjķšlõÛÔS,÷ œ)uwéĮԚš%ņb§ėđ°<­ÅĖqÉØW_ā¨áĐuQ}s{l¤C(1Ápŗ| í$cåĪ~ž Wm¯‰šá¸a҉‰Ú[ļ?-ŋˆŦbąS q€8ØH錏JÜĐ¯—PxåaŽC`õ'͜šÔV]‘)bdb[nîF ģ|ÃéÅ2 &3†*įäŠ 3ÛŽ{šŽ_Y´0›‰Ą ę|ÖÚm÷'8ÁĀÁÆš9Ūa#€â6a…rIŨœž>ƒú×cáŸ`üāgˇŽT~=ĩÁŽū͍<`Šį’ÃķękĻmbĮGĐ,.īįĀë JØ-–`Žęp*Îļˇh:‚ZË[H!1>͎i$ į÷ŖFßũeæ €ūBn,@p>ņ^ z‘ÔÕú(ĸŠ(Žff'VÔ~^’¨ūŲ%˛y§ų˙=jQķāzãŪĨ_ģōāãĩ)!×<ķÔķô¨įEpUļ•e †į#ƒ^/Ši–ļú­Õœi*ŲÛģīŪĒ]ąÁlŽŠ0Ø 9Ԍt´mHÍ`ž(š„¨m‰‰Ÿ?) žp¯nü]˜đ.›#Ô.ĩKåwLÄ}´tíÃLeŗĸĩ9&ė˙7÷$āÔ3BtŨ@0 ĐÜü8†H:œ‘ŒāäÕ?čzVĢϝöÍšQ÷RP‡|dƒĐ€qĶ>œs\یn_Ižk{œ ÖÅ# ēō¸=IĪQS_E ņ,džĐÁzO_ĶÜÖ>ŽâDFŠi]‘Fâ‡;†0>ŖüĢĸ†á[KˇË¨gˆŽØW8%ēwÉ?¯ĩ8´b-ÎFĀyÜ ‘œįĪō¨`V쉔KĖ(ģcUu9Ąã#Ö¤ļmŽ”yė2Y2čvƒÛ¸ė;ãÜJņ°1ģárzvųä~U(XÅũ‹¤q([˜žfp å‡Ô`ūĸ¯ęQOsāŊÖ o’YŌ%Ęáa‘670<ŧޏĪ^‡oÄMnžŧSŦ4E ͐!<+l?x‚FsŠ“Cē%’V–A īvXÔŗc’Dd 9Îv’=+FŠ(ĸŠ+™˜ÄßP9Įī—ņũŌPbqÎ8Š•3Č䞜sëN °Øü)䓃ÂƒÉãŽ:ö¯6ø•Ē}†â:Ö 6xD˛Ėé—%F9ĮcĪšõ¯9Šæ{!ļŌũĄBs˛D`1ūÕjëč$đæ¤™‡ i(ĖėV?¸~ņ zíoŖÚÂa‚H˜ bŅĄ¤āz€}ĢBŠ(ĸŠ+•ĢkZ˜ārƒ?öÆ:°Û]AŸaū})Čx%IČŒÔęœnV8ß­HĢČË}šįŠiŒ2zô¯>ņÕŊŧW˛O5üŦâ‘ĸ\Ÿ,d¨+¸„,3ß<‚MyĖĪņKPŌû’NKe,}Č wč{(ȓF‹ķŦLĨU'+Ü~5 É7‘ûŨÃ-ŊÃ`}:ū?jZxŸ[Š(Ŧ’úņ-ā#h‹‘ך }Ž+ąĐŧEy­ũĻŌú╁|ČĨtîĪQĀúúãŊtVĻÚR¨¨GĘw{äŋËڝ|Ęb1ČÚÄ˙{wéŒ×+k­eNëŽæÖfy0†I-’8į“î:×Ia~oė­ägš8ķ’Į8‡‘ŒgŊX3IXôr„aG‘ĪĐt}*;‰Ũå‚;ˆÂH$ ä¸ &qÔqœ~YéV– ’`‘ķg$‘úņŸ¯=úÔŲŽĻcąų.xfÆŌNx9}+@Æâ[qüžr=+ĮũķĮãVžįÃí0™\AjĒĒb ’Ēš_0,$ zMnkč“x~ö‘cÂĐ+2œl\€FFXq‘õiÚ%ŋØô‹[]ČLˆ‰Ee_—ŽGNäũMhQEQ@9ŽNS˙Xãå9Īũ1üj`Ã*GSÕąVŗÎ隘1Éby'ˇøÔ€åŗ‚N)ŌqĪáūæž?˛ē{›‰ĸKĩV€’LŠĘ9’p¸*NqÆ{מIms€īģũ…Į,9ĮĮŠÖĸ¸Mjė›6Įnåˆú Ģp×mh°’!$`ƒŽp;ōÎjŦVŌ•wž3Œ õëųūUÔø.Kˆĩ¸‚ ĄŅüÂcʰPIįͧ=w:ŊėēlúUärÄļģž9ĀærŖ§luČôŦ˙ÜȑĮ ų‡˜ĖŦ0OLŸL`c$g>ÜqŅO#ąš¤*˛ƒ÷˜ãP1ŲF~ƒĨtZ,ŗZÜ,qËå 6–n¤ŌAę #‚?, ëb‰ ÅbHÙŽ@ã#vp{}9ĸt‚ÖÄŠė8ÆN:‚zãmA%áūËĶü‰ÎėĢōxÎ8鞝}jõŧĐ­¤r™’Š7_|ûįÂϚ7i-ɓJ§ ØÁČ>ĩ}Ŧ?´ūiÖ}–ļųĘHāaTōŅNĖ?ÁŨÕŧĩŌf’hîfŽ%2[ķg̀ŗŒmū,ā‚(Ņ…˛é‚ʡĩōŠË1¯eÛü8cĩ_ĸŠ(ĸŠä|ĀÚö´œa.P1ĮB`‹eUFOc͊‘OĘNyĢqÜԊÁØ(51_‘›šŖxĨĄr ’āäg§ŋJđ™tÆļ7ËåĘųg ž ‘Đ‘ÛĄíTŖ€´˛ÃÂpĒ'q cß&ŽøSCM{\ŠÚHÜn…§°:vž>îxī]šf<=ĸũŽ=Ãũ *ŊĒ´ÜŽā2Œtč:W9ŖjÍeyŠģŖIš#'æŪ8#p`9ÁÅtwž$TŌnlį͚3!g‰ĸ}Åg˜:`ŸsŪļmė“XđŨ´##bĻålŒ ‘ÉįœuĮ_J7KéVĸÕžā6É#`ŠČčŽįąúc:ęVŠ_65dUƒ \uĪŋĻkĸđĖŅęZ"Θˇ[ĘŦģģd`Ÿ¯_ōtŲ–Hæ{Ēƒ"2ÐĖp=ķĶõ¨,Ŧėē`ŪĮ;åŨېyīŧ{~5!W’Qš÷¨$íGÍéŸoåR:1š„öķŖ}ÁwgqŸĮ¯k.Ą&đûKēÖ7û-ēåöĘģäŒãÃÛ=+[ĒK…ĩI``˛­¤Ĩį vxœuĀ5.„d:‰”ĄĀ…Œa‚g;wüØôŨĪ­hQEQErÁÖĩ‚8-r„œ˙Ķ…JåŠ2sAΝåR’ØäyĮ&Ÿ–îúņS/$į5 ŋ9Ā^HÛū:ķ¯x^B#¸Ķâ2FĪ™"8ôĮ ëų×Ú|×/›AæŨ3 ËŋŒ“Ī-×§Ōē˙ÁwáÛûËģ‰SsFÉ%¸pNōsœöāîzuŠĩ­rÃX0X^\ĪnLĘTÉ Čģ°p Ū8ųąŊĮĩgÁá+Kŋĩ}Ĩ& ŗFIHč7ũyīSŲxKL˙jŧĩš%i@X €•ÎG?&FHSĮŠ9ãvÆĀim*Y:$fl˛"`…į^˙Lcˇ=œÛeÕ$KrmąÛŗŽ8Ú[Ëæ˛Œņ–ÉÉú= ëW(ĸŠ(ĸš@ÖucžEÂõ˙Ž1S؃ĶúT‘K`:°sפąĀāuĨFÜ#p9Īĩ(Ā~yúņQ܀ĘĀ‘…$âŧÁ"Ü6rFwm!Ž˙OonCHą1 Á\íV#9 ‚GļOäjX]‘*Hc$˛8S‚H8œķ¸r9⎝PÁbĮ ų°ž5íCøāąôũ+GJēÛ¤°†•Ę0î~cŽ#æû{Tņ×“ÄPm'‚qŸĪ5 u›q| QAer0H=€äŒŠ{J¯á„`!*ŲÆ[ô˙ëW;a0ÅwˆUŠĘŒĘŒ1† ũy?ūąZšĄöpÜ41ŗ R 3´Š'ŽGOōjŨœˆúaēļFŽūjĮĖŒ’RNzöÔČā?i„Įŧ¤“§‘ĶœcŪ´VO-Aæ2t<â™{h.ūéJåÖŲŲÍēΰpŖ“yįî…ú¯Zßņ[lđ~˛Æ%” ÉFV!ŋvܤ6N9įŠw†€]ÍcMąá–4‘[ø€Y>eĪĘy^ĢZŠ(ĸŠ+›`?ĩ53Ž~ŌŖ8˙Ļ1SļsČį=ĪãOÎÎpH˙ëT¨pvįŽ•!bp=h9ĪĘåÎ:;‘XŪ*Ô?˛|9q2!gy(9õú ūUæúuܡe$r§k•#Č#ˇū,}Ek„ˆ2FvüŌgå<‚@čO?¯ÖĒĮåÚÆÉ´…vÐĖpY9Æû{šÖĩ‚(4O6vGd‡qqĐĄÉ{ŽŪ¤Õ}-+ÁGą3`ĀT|0$äīĪëZV.—É3HX0%ްČێün?ūŧŅądš;cÚHÆK§Lƒ’?­FŌųpå‡;IÄgœœķČ=úqĪŊsÖWS¤ž\yŪÁœāR1ž}?OJ×ՅŗÅ$ōÎ0)vÉ ĶŽOįߚ‹ÃÚũ­”rY\ēĮ}É($,3°wĀį'Ütë[ēs‹øRî8ÁÄfęxÜ{–ĀĮcĀģhÎ't›Ÿßōqœ/SZ:Ŧ—~ ĐÖ;™íd[8I܏ŨŒ0 õî _׌ŸđßˆVS)ˇpžRĢ0;O 9 qׁQxjdŒ$Wōe“nåcÉoƒÆÆŠÖĸŠ(ĸŠæ¸žĻrp'_ũI¸õrwÅšŧąßpœŠüņŸbj7YäÕ%Ž$i ˇŽIČˆ œįœÔˇq=žsĖ“1ō mrŦ7pr3ÆĶĶÜúTÚ’>™kpácXˇsÉ*:ŽNp>˙Vé…Y ]Û< 0ÁAŽŪœŸÖĸ•{‚΋åWi €^ŋŠŦŊd\fHŪ ņ$WÉã q†Ī×ë\„2°}—(Ē…_”qŒ‘žøĮvimĢĨÛNčŗšōĖ pzãŋn`*ϟ{uŒUŒk§æ Ių‚ô8Ā=ūŊŸƒnž× ļ-ü†G;‡đƒĶp=ŗƒø“ÛbŌFBĒĢEŋŽėqÛ ûWEá@W =E„˙ŋkSkđËqĄŪA /;ˏĘIDeÃp@bÎ*]&Ö 2ŪŌÚ&ŠElrUW€:œđ]ĸŠ(ĸпޝǒGúõ˙×(ęuÃ1ä~#­8 cŽĮĻivÛ0:÷ĨŽøü1OdÃ“īRa[nGl×5ã[Čôī4Žw• Êΐ'ˇĨyŽ“y+ęŽ2 &#€{˙\WIŅũ‹1ĘĨxļåy @ėO§ô5^e–ņZXYÔŧ‰H‚@ŨÎyáÉĮGĄ­w4MöwpK/•ŽTŽqŽH˙ëFk+I&K™á'„y„˛´Ã8Áācųōr+Š_6G†@ŦÄÆÍ‡’$į§>ÆĨķ#‘8ÜņŧuāõÉÆ? ED‘Ė2ņŠhĘ˙wĄnũqū5ÎęžšæéäˇH6ÆĒ 19Î ĮCę9íÖ­émqŦÖˇ ´ĩTqŒƒÔƒü]={W+r.m.§SH…ÔeyĀp}?J›ÃÚŗé:ŒYHrIfHņŽ{Ôä÷ĮĢĩēK|°ČŠ ŦČøŲ‘"î9õ8úœJė|1˙"Ļ˙^0čĶÃˇŌÍ%ÄqE ;5ŧí €~ë/ņz„ÔÚ,ŅΤÚÉJŅ´A•Ļff Ž -ÉČîyõį5ĄEQEÎ2oÔõ3ˇū^W'Ķ÷1Ԝ Ør=ÎjC–8Æ9úgŠUAĶôö˙8§ˇ9íHŖį<úTĀr1‚Er˙-eģđÆaXɆu•ˇ| 08÷įōÍy-˛ Ë6T°*Į€ųūĩŅčėfĶöB8= ĨX`Œã‚ÖĻĩ;h“å…˛6”;öäméūĸah.df-ļå*$ļWG^p}šé\˙öŒ&ņ­æ! ˆ‚ģm Œžyācé]š,Öc;#P‹“Ā$ū}*ԉĩb(¤3“ĩJārCqĀãLS‘TD“Cģ÷ŒŋMšĀ8šō¨§”‘ 9-‘†\†ã͍ü:×3mr–Ú•ÃÜōTäî$íÉØū.ž€ô­ģWĩ¸Ō"š1D +.Ūŧ‘œöĀ$ô8Į5‘§XéēŦƒz ąíF€d9āôĀȏ_jëŨۀ$AB(\2pzc§øWOáÁ é >Į?īRë6’ßé3ÚÃ4°ŧģWͅÂ: Ã%IV€ÉuĮ+ÔI§E4qÅq#K"dov˜g‚pÎ1œžŊjŨQEW>ĢģUÕ:\/_úå?§#¯­IÎ}†8áHĀãŋZp#ŽH=r?Î)Ûw1ôéN ÷OЂ+Åöš,Ÿh•ĸķ>DÆwgžƒõü+·–Iĸģ†cöv˛qœzqŽ~ŧSí`KI"Jļ …[“§^jũô+.ĄĘģ82 ä†= 0ĪrjÕũÅíŪ¤mĸY#ļŒíyTnbį§O×§āqoŸíw×Q;’ūbĢ‹,ĀsÔg?˜úÖŽ™5ÂČÖžQ’×™†~Yy<žÛ†ā9íßŗēcūÉĀF Ÿ`>‡ôĒūlQŨ5ē˛,ęHh‡æ9 Á?ô§]Kĸ ‰ØÅûˇÜKdŽÅąĶ'¯áŪ¸vQķ΁YOī3Ÿē='vxíųUíEm2P˛&Wx `zœ‘č]•cfmúĸ[\;>âÄāôŸlĻqZąĖŦŅ60ĸMŒ¨0Wgūúã=ũĢĻđđÃZPœC˙ĨEQEQX(Ôõ3ØÜ/ūŠŽ¤“Œt㊙įœõâ3œđ(*N=;Ōc8}zԋƒž{ãÚąüScĻ]ék.ĒĮėöî$ųsœôę9Į?׌WšØ^ÍįÅōÉöD)OUf8ČÎ#¯åZ\[MËĩ€  ƒ€AŨÔr1ŸĶŊH’Ũ ŸëŽD[Ο”ĄĮę9˙ ÜBåŨƒÕ‘@ö˙ëúšĀÕôŲŌéfļ€yHĒȄ/ uúŽßJčô¸JxNŖ”× Ė }î@+õīč{žôÛ°"ēeLØ-“ÎAÛˇęk:ŪđGŠKkps$‹˜ĻōņšĘŸĪˇŊgkpČíđ`¤`įũ“úVî—}ōHŨĐûÉŲ’8ëÉčEdk%!Ø˛. -ÄfWBp =ēœã{â¯i÷3Ë žîâ1e,|Ž„°ņΓč=ĩÖDš) RąÚĖÆGPqüŊÅS¸@#ûL9ķã#Ž ōAœ URv›€LŅ˰!ˇŨŗéęy; äu–i™0‰!<ˇŒō:ä‘ĮŠ5—[˛ææUQ´°ÁŒ`ĮOcW4ģ‹]OĪuŨų\“¯ÁČīĀ9īÃWcĨ?Úĩ {XŽŖ‘­›3`Ÿ™3ˇ+üëēđų'ÃzY=MœD˙ß´¨ĸŠ(ĸŠ+×÷‡fžßģJš!ę85:ŒõüĒC’@=ģSvãÖ”ņĪ9ö¤+ĪLšˆU†AGQ^_}Ō<_42F Šv1*ĄĪaŽ;‘Æ=ęĻQŒ…BMŌ[p#ņęÃÚĄļØŅAqŽŦŽW€3–lŽ8ķ]Ītt–Í3>(Ėã<ķĶíXWvqi°%ÄĢs…gr¸'œũAū^ԗķKmgĄLj%o—@#ŗŲ}'M˙ ߋļ–5‰ØģųŽûUÜžŊÆAÃ8QÆī–IīP6‘ŒŊ?Öŗuxm,*2‰qŒĄ#¯Û"ŧúëlWIpĖŪyn1¸šũcĮŊ[‘Ŧį$īlŠfŒƒœņŸëRÉRio,“ĸ@É€0äu8ĀÆéôúíx69­5ą-Ā!$‹j1PÉĪqĪB=s^›áßų´¯úķ‡˙@§EQEQX͟ˇŪt?Ŋ^ßė-H„rKrxÍZFãOø ōŊĮƒŠnÜqNÆ:ōkÍū#yoĒŲŦōˇ”‘įēķ€G =;Vg–žTADÛpę8ëūgGGũäŽHRIļGns×Úē u {0‘˛H|ÆËdÎ2#ĶņŽC]×6|ąč•\˛ŠhÔdeNÜãœsüÅc­Áēą™‹ß’¨‰îI,2 Ž9Î=ĢoĀ—‚Îî8äb ¸ pã c'ƒÛ8ũ+´ž×’ ÛëdĩËCæ$ œœv ŠŽ7FÕ§M~@!YĖÛW9Éā7žëC\đėģåšļUhķÉ<Žrúw˙ëW1ÛXLg‘v¯.ƒ ō•^ĶŦî#Âå†ŨĄGrN:×đ­ní5 >Ōs$r4ɇRrāļAëͧâMz¯†ųđž’éĘũVĨQEQEcˇü~ŨõæQ˙ -*‘ŋ<GĢQō]Ôõ#n8§Ķž)ÞôŌ āuúŌ€xEpŸíÚ[k9w! æeg9Ú+˜ļ¸ķí–L2rŖp$€2ߞ:–ØyķĘC#ÆĀ•į!‡lsīí+ Ξ Ķæ‰YāX'âElmĀšqŒ˙*ķ˙]=ėâæ 4—o@Ø †@§Ęd\Ø]i׌ ‚Uƒ¨› c“ČĮj×Ķ|ÄŧŽõ<¸°S €ĀĪĘ9?Ũürq[v÷&ũŨ㔓+2Ë2Fw‚Ãq8cœu=ųíY7âkMDĖë$71KŊ‰2•į§ąūč–Mˆ#v(UãŸ# OL`ö=p+:ëHû[Oå*)㜠ą'ž1ĮO^ū•‡tCm|m¤lˆ‡,ĖO' `č{ãŪ§"֖Æe€4Hƒ¯÷_æ'`cĻzžõÔčšÅĨŽ é˛ËŨ\XÄÉ‘¸Aüî=NqŠččĸŠ(ĸŠ+QļūäöÜū8´žõa;zõ.HäuÆ1KœNiã ŽiN÷§Įjäüm É ģF„˛Ŧ…{sōņŸĪõŽ-Û(B ­Čc8įlæĸIäīfāÎT#s’9éÎúũĢ ”Kqf˛@ƒĪƒkFˁœzŽžŲÅjļŋÚÖWE$@Å34ˆšpÉôį§ŠéLm ų>×<âY$ ]ÂFûXœ’Ų Ô{V†“Ą´˛Įow đ‰…š'U€[Ī~•ˇá :x5̘%1ˆcČ‘ŲŠŗœ;Œ¯Sø{Éâ ĩ}B[˜îŅ%Œōœ`–Š' įųz֞5āĶ`Šįlo kdä)Ŋ3QÜjÉk}Ģd1Ã;dtãÖ´-oGÚY#“q$ 22šéžŧcīī\ŊÆ Ö~)ōĄōÖ æ3ˇæ8ãŋįú×oĸé‚įMĐõ4Ë$VP€‚yŗœ `¤üĮ’§ˇ ŽtŖ<ãŊQEQX×EäŲūøíūČĄc“Š´ŋΞÄ`qîiG­H9Ésô§/fš_|ē$mæųgÎwüŸč+…ļQ’’Ń(!ĪqׯéR"ģŨGĸL1^ÛÁĀöū€Öėyz|G"ĸ `ųˇ(ãĻ2{ŸđŦ…°d’Oæ K!S)É Į8_nü{šˆuiŽÚHUãTUŒ’@$€{}Oåõޚ/ŗ’# ´Å›#0ė2Ü3ųÔ-ˆõemŖË|’FĪōķ5+… Ę@—€$üĢ“““Ķük—ÕíŽo'šeU}ÛH($¨ãōĪōāÖä."Ÿí&@CÆ B0ҎrOû¤tõüāûŸöšŪI…Á]ØÁØÃæp=F>˜âģÍáŨ3ĮŲ"˙ĐhŅEQIžqKEa܋ŞŸËĶŽeŒ°!ĐÅ´üŖûÎ_j`’øqũ‘úé˙ŠęņF?ąī?ī¨?øå(ģŧ9'GŧĪOŋ˙Š{ŋúŨūô?ürĻûMÆ8ĶŽŋ8ŋøēiēš'?Ų—÷Ô_ür•nîGüÂīü /ū9Xž$ŅnŧAöUōφ(÷ •ėãĻ‚9üë)<tŅÚGDS…8^?é§^?Z|~šã‘ne!_qį8˙YÅ$ ž ۋ¨į›Ė–ˆ)\‘Î|Ī@JŽ?^%ĢÅ-äō–rŲ1ŠÆzc2ö÷ĪzˆxčL%2ĖĖĜä_ëVgđTˇ ŠZäF vܨXš<°;øāסŊjļ3[2o¸[z¸TČlc?ōôĒķčr2ĪĘAá# Ā āyœuŠî4I§•'ōnDĘ06ˆđ~ŋŧúūuŸ{á›é뤅Ōģŧ1ČÆ<ĪķÅ+蚓XŦ"ĘO3aF8ˆŽFôĒļ>Õ- Ž?ąK€ÛŲA‹ļ…$ ęO§§=Ɨ Ûé6pHĨdŠFSŽP;dUē(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸƒĶŠEÜo ˇr-QEQEQEQEQEQEQE„֖Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ų Pixcomp[14]: w = 244, h = 365, d = 8 comptype = 2, size = 17369, cmapflag = 0 xres = 75, yres = 75 ˙Ø˙āJFIFKK˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā mô˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠAžrüihĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠØÜHĀ ™Č͍ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ‘F'4´QA QEQEQEQEQEQEQEQEQEQEQEQšLK\­įÄOXęŲOu7 ”}–Ō:î}Áôω^&âė_°O˙ÄR¯Ä š*ˇˇ%‡P,'$ã”øū"xj_šwvßM:ã˙ĶÛĮūî.×?ŪĶîūĶĨ˙„ķÃųí|Œø—Üs˙ŽSdøƒá˜˜ŦˇōÆÃĒĩœĀū[)§â/…ÁĮö„šëŜį˙dŠ—Į^t/&ÚNûÜ˙ã•)ņŽŠ>uÎLYO˙ÄRhawy÷${YO˙ÄSŽ|>Í´]Î[8Āŗ›9˙ž)[Æú4×yíū??øå2/xz}ūUÍ˔8pļ3ŋ_’š|áÅŲ›ģŒ?(EŒįwĶ俘>"x`žÁ}9oAc9?ú1ž%xQ>öĄ0įŲO˙ÄSáføKæÎ§ Û×ũ~>ŋ%tNąaŽX­î›rˇėHŽ ‚ëW¨ĸŠ(ĸŠ)¤P<ŌâžzÔ IüGĢtņ0ēn9#Ī~Ã?ËŌ¤ˇąŒ2îÆĖš>œ•qā&t2‘Œ‚ {Öļíļ˜|ÆlBũAĻ‹hî˛fŒôė€qõ¨įĶ×ΌÂZ-‹†Ëuü˛p=ũ*ØŅog\@°ļ>fbĀ}8>įō­? éö¤Épßhcxcûš9ü˙:ĶžÕėmc"Y lŸyē`NO—¤Åqs%Üėĸ(Č›#w_˜ā“ôžģ2%Åˑ˜ĨÜAŪĄŽ=1žû~ŽŗGg5Ŝ“Éq:īËy~ŧãŒäķĮ?‡öēˇ(°LōÄ6ߘ‘ÔŠõ=öĮŨëĢĢEh‰ Ä•ÁĮäŒOŽ;äƒ\ĖēŖ[™¯U<ų0ą°å€P ũr89Ļ[ę?hûkAf÷€$mÎÄā‚ÅHÁã=— ŦÅŧ‰æķdHä€Gŧą ÁeĀ‘…#ß<æ ą&÷Qk››‘ķ0ÁTžã‘Ķr0NEz—Âu4=UmĨŽX?´NÉ#ÎÖL<õ5ßQEQERsšj¸u ¤0=ÔäSģW„>Ũĩ^a)ŠY5’ĮfâĀNãĪ Ą|ˆūq19\‘ž…GįĀĻLCŗ9fäķëß֕e™ūôD÷8ū<Õčd÷4jƒní¸vôéúÔōÉ ”ĒĒ Ë#nį'§įWZŽÚÍ#ˇO6vmo—OĄeI-âėš˜ÆŽ˜ļې`9lúqŽ+GKĶ!–GyËĮm†Û(“ËsÎ=;ā`WI§jš[[yZy`Q•#'ŽyÉ!ē÷ÍN5;kĢŒĢŠŽŨ Lw`(įtõŽ*âü>ĄqxYšŨ§Ü2ŧōpŽäûŽ9ô§M>đ$ļDTås„\õpŧ€8ĪL“ôŦÔuIĻ™d`…öH9îHãą=NųËąn×wSĒ3#'——oTPN3ŒõĪLí$?S¸ž{ =20ņĀŨŋ˜66į“Îy#§qŠ‚{X4›-%žœ/1ģ¨ä|Ē Î1ƒî}ˆā´šû#Ë9*ģØH“Ømãr: õ…öâÛGÕ#Pá´7 ņ„'0Bs´p:ôüųŽæŠ(ĸŠ(ĸr)Eã=œĒ;̉EũŲ*YWúD€°Į ĻAmĻ: ÷Š%;‹mŠE}ëŽKN:cūb2xĪS€3ÜTÂųį˜[%Žá y‹ķŗ´ÎFFyāõâæiåįkĶžeTÚāsÉ# 8ųNsƒˇ:Q&Ą5Āĩ…ŒėwKpsēNÜ2p2HāœdŨlÛÅš„6žjIj#$g”Æë“Čü{×Ĩø0ĢEĒē6å{놯3û˜‡ķĶŅEQERRâŠđ‹™n\ÔV+9 ˙hŨâW8F{}ŅÜsÔ{æĸ¸Žv_ôÛߗqō ˇUäAJX4;…ãļíQų‘íĨÜr:}âqX€8ô¨oôm Vi§ 7“vŅžæ}ë—ņ„4ųdˇU’ôßŊŪU Œt×Ū™Ŗišf—yØ#ÛxØä’ăÉãüšØņŦw2Ŧë!ŗ•€>dđ6Å œ†;N͐[ž9üąŽyŠ2Ãi¨ZjEŒAržböÆ‚? ŒĨC{$Ö2ˆuHĨB0Ȳ“‚Č8Āzu ]ÛÛ0ē(Í*§0…,IéÁö?Ž*uhîžĐgÛ Ģ)O<•;ãˇãĄë*_°‹’\Ą‚Wų‰S“(#8ČĀÁį#“ZVƒė˛\Hō—Œwō†ļGCÁūOJŠŪoą@÷Mąäŧ,v˕wSĐ ÉpG˙\TnōÉrķ\ZˇÛāJÆ>H“nw3Œ¯ôÉ9Í>[•1­œVÅĨŸŪČā‚XŒ¤dŸ8ĒōōėĮSkm)0$mÉ*cž6–Áū}ŊOáü" áŽۏ”äpuü+ŦĸŠ(ĸŠ(Ŗuĸŧ ę ­jĶÉf÷[ŠČ7äL˙ÜãčNũįŊø…ĒÅäZĸLģBŠXrAÆsŒũîz{t§žģâkØmíCŲZ:ļ×- €.NW'Œg§<~}]ķÜaZEo°Ë0*ĖÃ)ÉęO=sÍeE,ÛÆ•,S@žjdųāO˜ķÍOŽĢBĐÛ\?ü{– ?ŧ Ķí‚ŖŽ0qY—ļķCWĢ ’˛ÅįHšØė0KwdžyĮ8ūŪ›ZĶ­bkUĮĩ‚%%Ž^š§oĮYtÉæ’VšG‘Č2Mqm nņ‚†7Ī’Ô—zü=”OĨĄĨČĸ3c<­#)\ž'€ęŪŊĀĩÔŦooŒ‘ŗEn˛ėRÁ‹•=@ëÎ ôéž9Š,eˇÕ/îš@Tâ58ôč?Iü*įÛo ¸”DÉqžÆęĢ’pyÎAĀ ĪôÆtEô^H•~Ęō2ą‘˜I€/ū•%֎]ÖVŠ  Ž0ĸhYc^Ũp>oC“øšiąŠ@låŠ%.-÷ž[Ą'œÔ”ÄŒáĨhÖ8R&;Z\nƒiéÔöô]ĩ´–ÖfÜI Iæš-ķmQ÷I>Áũš9ȝEøda>™­ 0ÂnäŲ9Ú8č{ƒ×>õŲŅEQERcŠ -x>ĄjĶk7ņÍŠ[ÚG-åĶm’\<įį^ä[ éW“IÔ˛íP]ü€ĄF}KđO5ŋef|˙´Įu aĸŽ`ZN2ãøįßģ´ VMvÚ)cŗ[5ˇ$%„dœSÛŸ æŽB”c{ÜᕸgŠ#Ô1ĪZÖdk̇ɸddpF=ĘäzgÛ'‹ņŦÖ­,ö— é(ÜUrUõ=ŋ+ž°°ÕüHō\YX;`†C*ĸnÆ y=:zVƒx'R’õíâēˇķ‘°?Ō]sĮoŨŒqž†ŗ5/ø˛b°ų&â/ŧv\nŽĀņŽž•‡ö ËiŒsÆņ•ŖTž63.8ëĐįØU8/.tķqwIee20“”d•>Đ]6‡{0ŽæLå˛df<ųq“Ú´YVs„JŦåwŗČ .œNúc¯=§ĩ3Ã$ío’]Æ$'ZBFėgīC€yú"šs•ukįEģČ;#’ŖŒļy##<ˇdOåČĒ!|•l(äüŦ0?‡QŒ‘ūÎ yŗĒ<ĘįŽÕäsŽ™ÁõäqĪ{đéU|5 R}˛q¸0láČ€Lt×QEQEQšLņFkĀ/ãqŽŨIå ßLĀÆ¸Ũ‰’N9ë͎SÅkXj7Ņáa‚<‹PᜁÛ‹į?îÃĒ5ųįē‚Ũ4Ųãi—īO$@Ž9ān sˇØr;Ö÷úZ“%Č1„ÂĒŋŨoÄgüûÕ(­ĩ!{ŗÂûŪU‘[į“מ•nÚK{{‹ŠK¨ļ>@>`8į™Īø×3¨KŪ¤ŗÛ0Ky \tÎH†{ũŅôÃZŗ ^ÂŽláˆ[ŧĻWMĘ”‹“'Շ$vÛŊFëMˇŠHáX[5 0¸Ā8Q’yĮÍÁč= Wk46ąļ§äE$Øo%ļr;ˇÎ7dŽI5WYđô>%´Š 7Äč›íĻR ąįWh'ĄãqΝzņísFÔô;ķo‚Ā˜ÜŦ‹œdĻ88###š¯lÁ1!wĀÚ§¯jÕŗY‘Y"9Ë}ãî;üŗ[vסÛĖąHf2}÷ícë\“øãŪ‘į'o’“H#'ä QĮr8Ī ŸjÕŗ°ē„5Ėå×ÎØ‰œ<ũîžøč@ëÎqK{~úX$’xå.Ä(;ŨAėKgvčß‚ ˇ•ŋË7SŪ0qŧõäįëŪēē(ĸŠ(ĸŠhufeezJ§Ē_=žŸw-ŧ^}Ô0´‘ÁœyŒڹ퓁šį<1yĒ^_•ģŧ¸¸ŲkÉÅļ ÆĄFCs÷›$˛šķ­sHŊļ×.ío-bŠ[Ģ™.m•]Ļ_4Ī‹ ģąĶļ*ĩŲöōĮŠÄŖÉ Ą¤ °1ˇ#ĄÉ#ڟŊą››“ąw8FÉC€I={tīī‘R-ŨöŸZŲßĘđËķ€8Ā>„đ[ž*[jņ†âųæ*…íđQDĐŖqˇyéųb´SÄWmb-RÖČvØËײļãÎxôüxĄĖĐ\ÛÛĮ j"¤m"1Ø7m'p8ä1>ŋZĢqŖxŽĘ}×Véö0ãįX3dáēsĀÆ= Ēž žPâū9måäŒDl€ ní=8ČÎzß ø¯FŋŽ(¯Ž’;̇g‘IoŨ✨Ā@Î=I<ÖĖúÅ´ŒķGw h ,B†Č˜æĩŤéņMŦÅũĄmŧŦsĢŪ ŧ îæcīŒúČŦsÃö7a“FHāŠ@åĨŽ}ų*$Œ| 9?{Ĩ_đ_…†ą;ËŠIöËĄ ˇl€c•û¸$`žŊ:VŒzFo­^ļ›mq!ØLX(Ŧ‰Œ€sÜäŒûķVí´Ë8ÖŒČo0Ëf .Š ŲĪĖIĀđ*[§˛‚ŪęÖãĪŽänÚÛĀŖÍ€Ä Æ:ũėrrsŽ9ī&É K ČHņ˛BF0WˇÎ‰Ē1ÍæŪi#‰Aڑ¤G.I'¨ôÆ1žJ¸\Iy$—åĖ(•J’pō9$ŸŽgÜČlÜÍoåÉâĸ_,2‡ õ ņŒųõ…ŗ›—=ˁŸĸįõÍvÔQEQE¸j2ØIąŦd–7Ÿˆö“+° šÉ=}0~•ˆUđũÄWPė(%6ŦVG€wuÂāįˇá‘Ķů‰ĩ9%1Ü.ƒoC(Ō’>rA`ØūtÁę+ÛXĩÄ3Úč’ÁoåoDK´,r0ĖĖNå€ļji5čį3*Og¤F…dŨ!-ČÃôœú÷#$Y˞ÜēI‚’ų8<°8ĀÉõĢ&}2Ú^+YngPÎn$9 č#Č$ā탸˨ŲÜēÍe(ļũŲY°w¤e@<×ƒœw4–ŅŨnō¤xščeØ&ķŧ˙u”7wʓÆî§"´l5™t¨gžĘ;ˆ7įxōŦП|sÆ~¸ūõu­Žw`uÍ6[WØyĖŧ ūđėÃ9 ŒúôÅsēÕÜiĸ*ŒpΊK(ÆŅ÷xĮ˙#šĪЧ¸´ą§é÷ ; G{ōG=r˜Čęwgĩm‰4ų/!“û*ŌnËģšGFČį@# Īnš#ƒÎļŋ%ŖĪkih“ė‘ŠfRōäį$žAÎOAŽxĮ&ĻMSû(\^K< %ēå´…7}p 9ÉāzôރÃŌÛÉĄ[¸Y)˛eš5.Îä’qÜa‹p^ūąę0KÄļÁ&ÎwŽ0ŨÔäļ[8Ã`AéšĀX`ģ‹$‚&_ 3F8ĮŽƒ9ŨęxÎ*4ËŅûËd›Ë>á@éžAõíŠĀŋWü‰ĸō–&ÃĄnCNĩėŸ äiŧdlnkšsƒœķ]ÍQEQM‘Ö8ŲŨ‚ĸ‚Y˜āęk‹×n5­3S“V‚Â+ÛtQĸ2ĸį¨įžqœŒvŽ hõߋﴰĩĶm3$÷Sų‰¸~SČÉäõRim“čĨß/˜TQ#ĖĀÆ|´Āã‚ĮÚØĮcj—q5‰‘Ĩk!â+8NЃ<Ž„o#Šę}3VЧ_,wv–714HËĻ=ĘÎ{<…€ÎIäcúỦaĶí~Íq$“Ũm;‘dˆžˇLc¯gLÕ#Ŋ@mėã[{Ü$*ĨÛ9Éwįs’:ö:+)k†žK 3ŗÅÚCĀČl†;IÄ~özp0i“E H&ŽžDUˇŽåRĘšUŨ ŒŠį‚jø†ŪīGH#‚5ų{VUV–6Éå8ĪËĪ‘ĪŠŦ¨4+}-aē‹NŠâi"H‘@ÜܯÎėŖĪ ~æĻûr‰NÖ HŒ%ü§á_äôÆsÁ=92Ezoî.V9ßOB7K `€äįŒđxĪASŦ°Ü˛#ÛKÉŧGËåŊ°Aú8ã5FęæÂÖĖËåŦÚ¤ŦɸefŒ æ`ā7lōđOjã//%û vąKg6üŸÜFâHĮ9RHūīWü-â-S@2ËI,bÖĶ ĘÍĀĮ*zsÜÖēÃņ/Jģ°&K&Gr ŲČĄĸŒ‚0Áû/ũŪŖņ¤’F’ę9e_˛JāĒÍŅɐØ,Ŗ`ûÄđŨrx=ũĒ ņ&¯uÔ&@fKp—Į3ōŒãĪzõ„Gw€Ąn>k‰NG›ŨŅEQEâ|EkŦëiĻĘ,­ Ûw|æ 9Ú2=1Đ÷=:× 5öģm¨Ũh>šķlՁ’Vļo•ģ°$ō?sŽi–ąø.ĮR‡VÕuģģëõlĘI`šŽ==OąéQßxƒHÕîãJĩļ´TųüëxŽī4ȡ\Lô=-}EeŽ{kŒß]Ļd¤‹Î+Œî8ā örIûÆ4Ôõsij–ŅÂĖĘŋhUcœō„uî=W$ôšĖQ[-ÍĆCēd/• ĶīeĮœŒ rkRåníüģæ7"æā—K(>Te”‘Ž6ą'FyāQ´Ö5.|û•‘šI•?ˆˇn\õĀî:ÛtūĶÔāeŲģģĄˇ™ Û?7Ė9äÃ˛đ1ÅOŦØÚiVr]E5Í‰”‚@ĨWwĖ đ1ÛĶîœ Amáš5dÔ-#DY!æ˙–™låIÉŠõ#ž+6ãGŊĶÅ´ˇ÷8Eō™ˇ$‘Į“÷€Čr@āXķkcH°˛ē‚씑æ‘WĘ[….ģR@nbHÁ˙k# ]×tŊK d†Ú˰ĢÄ8Áä Žbq\Ÿ‰<1gygiyĨ$Qē[gĘøI~RHķ#vŅĀ9=~oN –ŪäNņ+! ļGųÉČ=:€1ūë!•U°ūĐæŸíŌ›­î>ØVĀ#žG¸Īį]=§Ä#HžÃû5aI‰ 7Ø åFāÛOŠį¸ĀÍr7w˛ßN%™˛Œ Š’p÷?Ξ‹øIo-ŋÃË#*ķ^I”šķÆ~„WqEQER•ĮëW’ˆ&‹TžŠÖÔÉŗũ3I Į*čr<ņÔW÷ŅiöŌÚéģl-ÚTß-ÄšvQŒ^p9÷鑚¸žąÖR]Nķ]7Žā‚ņC)ė2N9ĪNæš[úķ^ļĐôN)­Tėf ŊCc8'#æē…đƟ§éwqÍoqaĻáZi…áwŸĩAôÉĪĮZæg_ŗ[\I¤Ę×0+ .wÅąáˆ,ŨR~S‘ĪËÔAĶžÎKĻTš_ĩZÂË4°ĒūņđNĐ<įņԜ ¯¨LڞļKc¨M0ķđŽī2 ŪžÜđJŒüUëątmĘæ1Ŗoh­ ŧĄÂ†'{6į5cXw,2GĒLHZÂAqüGqę:däHéČĢvŪŌī->ĮĻhŽÚ”!<ˋ‹ÜųmÔģmbį°ß+ŖŌŦĸļOš‰&šGi!ŠōÖ 0Ö<€FGŽ:V.Ŧõk}‚Úâi Ģ1q„\’Ą‰ÁeÁĮ=NCR×Â0EfĪ¨^3Į—gˇ•BÜ*cŒÛŌeáčd$–ōî߸Ŧiå‰ûۗ‘ëĀãŠÚūÁ´’æ'°ÉšŲōqˇ'N{t­4´„( L{ƒšSilF ŧDÛ#YZēíkhHŠ ­.…¤ĪūģK˛“ũûu?ĖTKá:hzb¸čÂŌ0GéZ€€)hĸŠ(ĸŠ+œŊĐíurC4,@…åleˇ7ôū•[SĶü= YųĶɨ @.ã,}ģ“ĮA^kmŠØë~)‚-:)-íÂíf‘ŧĨ˜î]ŖôÎ}ņßŦ–ÚÆfˇuŠaī‚._ũ˛Š‚Ãp{žyŽGÅōj÷—ŅŲā[PUbRį'<ɖlŽH#ŽqÖĩ¯†õYSO°ģZéĪ!šK„"O1ąō ũҁŽ€n>ĩoĚŲ˙qĄ› BĖ#ˆ)•$uÆ$į+Ā''æúSa¸‡Âšsy€ļ¯"í‘=Ĩl6G#$ņôvŌkEļŠÃWÕuUŊ¸œ.ëeU]ą8Ãa÷gÃ‘×5b[”ąKëë‚Ë mōI"dpĒŖĄ<Ž™ëœžĩFÎō|éwßÚ2G$8*‘Ų—b™¸8lũ[Ō´ėnltW“YÕ/Tĩã°˙Iļc+ë°y„Ž8ëíĶĨmčúĘkā^éÚGJŅČ˙,X^ €[;°Gļ8ފÖūÚúŅĨHZE‹„“–ÂąÃyį{ÔđKæĮĀ‚å@I÷yčÃ<~\sZhĘGËNĸŠ(ĸŠ(ĸŠ(ĸŠåĩ˙č~¸kiåio7Ãî*æ=ÁÉĢÍįÖ|=ŦęÍ­ęˇ×XoÜÛÁg U^ã$tÆÜ€kJhņÁj÷¯m§#nxĄ°–5''  qÉĮ=yąĩ^Âë_ļōuŸėũ:ŗ}ĩ”ņË*āÉÛĀĪĘaīÉč?á.đÅ­šĩąÕfˇ…đŌ2ZJ%vĪ,Ō%ž„~8āsˇ7š3Ë)ƒZōĄ™ŸxKk… °~Ũ˜ Žvé[ēĮ…™s&ˇpu˜Oæ-´éGŨ6psŽ*ŒZĨ=üú„Sē äZ\|’ôRƒå=N=øÂŽ^ôK‰L’dlųy*W×'ŸJԟIÛ¤téīĻhË#ŠŅfRTđT~ė@ūņ<ãĻ*ųļ°¨ĶZęZŒVđogpÍ#Âã1íŒ`vüsŠÃ×Ņ™e“WĶ.áRûííãĶgXĮŅUĀķžšÍtÖúͅœ¸/¨E/”ą2p1œö‡š?¯^jÚøģEŠE…Ū÷Ė ģNš Gc9Š ņ–ŽÆI„ˇī?Ų×Wņōûԏ㍠ģ6 1]ĮKšÁ#¨Ī—ėiĢãŊūėטîNpü|ēܲžĩÔm#ēŗž9āe^3ĪĨXĸŠ(ĸŠ(ĸŠ+æÍvC7ŠõšįqŠ\)'ŽÕrōč+=fÆåģˇŽĮ˜ū”˙5č@8$īY†ū3Đ¯ߏÃķĄŠōĮqqĮjŠ4S"—z)Ëc'Žõ¯,:|ˇQˆ`žŪ7Ë*GŽ3Ī8íÆ?—0˛ČÉf’8Œy0ąėxĀÎ8î}Íi[’͘YÉRƒqʎŊzdxīÉĪckGņ#[Zč –háŨķ1( Îx'ieāôĮ;}5RãHˇĖ>l~h7 ¸ąÂãÚ 0Ām ĘKq24l l9B9Ī˃1ÎôĢļ-Á¸´c"O˙-.Ø0 GNrOûî)¯ĻŨÚķs.L›9 ¤Ž˜^'ŽŋŸjtQK<Û#šo.!æĘ˛|Ģ•Āe'î1Ī­Tŧ™ŽI§ęI3JTYFŨĨXž ÁíÛ'Ôcë—RÁ¤OjĮ2´DČŪiā’r­…9#ęk†(Đ5IJ*åFŌĒryÉ%pAšØ°Hļļũ˛KyPģ0­×8^=;×cāŒu‡G•ķpž^ŦÂ5ÉūUŲŅEQEQEķv´mĶÄ:ÛJT7ö•Î;Ÿõ¯ũ?ÉŦåJ €žTõŠ’ÜHwˆJŧãŽ˙ũzzÅąá‘N6×Ÿzšo;ڐ—2üšžqũsŽ(ŒųVŀY ģqßG×JĶHžÎÆi i˜ŲũĄ×ŗRq•d]N÷NÍ1-)Ú¸Ú„ ĀŒgÜ÷ޝ@ø|5+[{ZđÁdÅ^(~öAĐĮîį#Žx=¸5Øéz.…¤ÛJēX™\<ŌĪæžzútĸ‹Ôš_8ŲHŽbÚeBLÄĄl6rA8ÎĻHdך…ŧQA +šsäōĖ˙uh#ōN8íži_ËĒ+aqsx€‘dbÆāŸâf#îđ2į#¨Š¨i…,íŦ59Ą´˛r"ŗ^P$oe_¸8ã${â’Ëæjˇ0Âņ‡lL%w(#ÁRH[!{ ā+^„-üŅ‹ĸŪ^ãŋj*6xČ ü‡ûšĀGí ­nÁŖ'q^NAūU~kķ4 #FSœļeąŒvõĪ_zô…׍¨ģm o9ādFŸ‘¯F‚a2nKEįQEQEķÕū„š‡ˆ5‰{ÉöûŠ2Žâg°Œ’Hu4[øjáš(Ꭰd'bbA;ļķœ7q׌Ž™Bh¯mīÚS-Ĩēœ6a`Üd=F:gž;S§•ĘŧëO;H>ŊēšŊ"¤QCˇtd%|ȘŽūx Nz ޤÃąÆņņũå'h ŖŽƒ×õ¨¯îWČA:ũĸVq…YˆAÔîū¸ū]* Hõ Vhm-Țk‰dÛ~öqØd“žßzŽĩ>…áũ&ÚŪâöv¸”`J€31qn›F[#ųwŽzÖâĮNĶ$Ž=Fi-R'š;yOī'üĢÆÜ(Ÿ€I$wÅsëŠ]jœ)ĒL¯'™Ī™ Cœā×’zŽ=Eww~›¨$Ų&ß-ĸd‘X—ö)ųrp3ëŒf¨Éä¸ļ{ĸ|Š%VwšCD=øÚIį¯û|s‘¨ū+Ōím`$ˇŠí‹ڇ/‚>U đOËų„Šâoŧ˜ŠKxdA$_+7;yጃĪN+E‘BoS{ATQ‚-Œ¨s“œÔ v䔐€<¨ĪĩXÎ /,ģx?#pHäø˙Jôŋ†2gCŋ;‹zG cũTyŽĐJäĸíČ#>Ŋ…[ˇœHÅI$öH™ĢQEQEWŒÉ§\ŪŪŪTQ'öęŋžĪå7,p@#?wŸ_b3ZWP=Ü “Ų2Aá1ā> ‡ū.ã1Ā4šMŧōZIŽZiI†(ŨΤäļ9$úŲôâ’Xȸû6­2Í&Ãŧ4.B÷A';ķŽ”ē…,5Ki&‰$Œđ@Ā(û’IĮ=Ŋ)5O čzߝzWÃ7Ή}ÉD[ŌČR?wá˙ęŽÎY#Hķæ•*7ąāqØq˙ęĢ6.Ō˛ēžŠÜŒ¤ĄZÖ(ĸŠ(ĸŠ(¯!°kˇÔ5EŽ2b“PģV;A yōdāƒ’p1ĘĩVâŪŨŪĨv<Ÿ˜€z…ë߇PN3¯lõ{ņ ´ˇž\ŠU‘tž@]Ä÷ŸJØˇŅ4ũ:8š]›ĸ}˛Ër…Pq´dg˙+Bm^](ĨŧQ=ß,e ™cBķøˇ×Ú¸‰ĩmKP¸ŧÕ.lĘ[E€í*á )ÉÎr}sÍUŸÄ k{hĸ‰ÁiDqœļr9-’æ#Ž€âĩ´ģ‹}Â÷üHiķol7đ̜3OpG¯Ęzf¸˜ĻY-‹owũæ'< ¯^Ŋ…t ąŠīX¸ æCfPÁJ‡?QŒžŖ×i+SÄ tIîôÛ--dÛĖí+K叙JF9ÁnFáÔwŦ=7VŅŽĩI3ŖÛÅļĀĪh…>Amƒ‘ĮÍ÷˛=N3Y~(Ō NîK== ‚ )ŒFü./ÎvƒÁÁãķdœr}ÉëR•ōŠ…,BŒŸĨ(l‚ōŒņĶ'Ķų ī~MhwipĀzrK`s~ƒ'žÜuŽŌ åŽ9civ°8ÁpFs’qëôÅûAĘdŠ4C.<Ãŧ’}:õë[ƒ ĨĸŠ(ĸŠ(¯'ąŊĶ­5 Mî&ÅũØ1C}ĸNNŖwúŠčā×-íėo"1ąˇmpFrÕÜÃ*‹kfšįbĒ‘s!ÆNņŒvÆyĢZteˇJpō( €‹& ;°xäŸc€>ĩŌGģË]˙{ĶčĸŠ(ĸŠ+įKé‹MĢē‡ß-ôŌe:Ū?\ķŽON8æŗFĄxF×RíBHäķū4Ųõ™ÍĀv•¤eL.O“Čî9'ķ­íĮ°é¯/ÚlŖ•‚$x u=3ÆxížMYOíoĘ×ËŦÚËt#ōūÎ[Ët € îs[)áŨjõŖĶ^ÉaXqˑ´UË7rHž˙CYŪ<¸ŧđŊÔVą4K,ąeL_*„Ũ¸äŧN3œ`U]zūĀ›x’éî„Ģö‰ķŗœŒš?&ÎpO89ĢúgÃû WHmA%–ä@ą}ÉVĮ ß?Ū÷ÎH`zæüEā+&ô-•ĪÛ `[rÆŲ^üāĐuΝJÍŅãk+ŲáÕb–2„î Gú{?žlZæâ xŽ^â4oÜÄĨ°š#øzqΝjܡ„hōųˇķG BÄË÷Č<įŒdq˙×Ē2x‚ÁĩģļÅ´,gˇi1€ ᔔĀū˜ÍgÁiĻ>ķ Š6Đ\4 ĻáĮœ}֕ūË$!ĘÛîĘ|ŦqŒđŦ_ۅƐvŽ3ŸëQĩŧßŪ<íÛ§Öģ_´´ši *EŲ6C€c\•Į#§5ÛIf‰1<žP Žb#vHŨŒķõéÅli‘r˜Ue^Oī7?™ÆkzŠ(ĸŠ(ĸŠđX”ˇÛ GŠ×r|„ų’Ė{}ŅŽ{ôÅsz‰$o-0˙–JÁwwûÜãÚ¨G:E ąy ,‡ī0ūcĪzŠ"fË0x˙= u>Ô×HžšTĩŽYcRBÎį÷@iÉĮPyÆ;WĻÛøŸN6wW6’Z+ą€īĐ…ãøˆĮåÅy¯ŒīÄú˛_ˆ‚‘ĀĻUHbqĩŽ{ū?N–tŋ^XŲ&ˇĢۛ‹X”HļJįĖuĘũė…œg<`āŽĒûÆļچ›öX-Ŗ‹r###nÛÁ<``íĀéĐöâ¸ŊgQûEĩʐX2ļ3Û=;ãŖv2a/× č?™¯FđßÃMCW˛7šŒķéÁ‡îĄ(CžŪ ŖĄīœöފûÂ>Ō4•ˇÕ.%ģŊo™Ž !ØôÆÕaŽŲükÎŌŪĶ\ģōyŗŸ)sÉS۟ņüę˛ËyŖ)–Æōh•ūRQʒ3œzõĘŖūÔģĖ>ķ‘Ü“’sV­Pōܒ§ˇ|ŸZļ| ädrāã?ŸOåøņZū“Ęk"FYRo66a¸c^@ģHĪę+°´iĘļeB wĮÉûŖÔfģ-$Ŗ’Û›r¸=ŊēŸJÖĸŠ(ĸŠ( ×„Ú5¤LdyY–ębHv@7Hï=LvëŌŦŅÃxČĒ4v4žJ8Įņ9-Č9]Ų'ŒyŦŅäŒoĩšYüļ.æ5-´įŽØįž„Õ#ąČZmÅ÷ČxÁ÷ôĢ–—gŸĪÚ§gP3ķyôĮôé[’C2„u95aų.áČī‚*cVlÉÉĪ HĪOķëZSëw|0(Tt8Vʃ×8į¯ËõcEÔl"ˇēl.˛ŽĶŗģˇ™Ā U‘”Œ2ą-éΏãĢI¨éz6 ¨4xm1đļ…BęAUĀ8É䌏bM&§ã…R Xq0Ģ“Æ3Īũ?>xŽQÔ'ÔgIî&bÍō’zz ËûE¤Íq¨ZĨÕŋ’á#$ŒžÐF>l~ĨsąČf(¯ hÁ#Öģ¯ évŠĨ\jGėˇ$‘Ü|ĐÛ/#|™RsĶuëĐd^°Ņ4Ģ™J˜ŧ*¤å°pÅą‰åq×ČāëÚøvÎ)&›`eq>įĪO.txبF,X÷ü;ÕénâšWš›~"(÷pŸŨ\zgųŦ{ö“Č;—*ŲÜãÛōĒĶZšˇķ-ČVN9ü=îzVĄ8ęU÷O8ęqų~ĩÖ>ŽšN‘Ģ…§üčĶ,SŦgY•Ë9r 8ęNLž(ģÔėžÎaoą}Â(cXĐ`ဪ==sŠŖj3Û$ЛAunĄžHva@ĮSaÔöΝ=M‡ˆŪåZÆŅDîYC>ܜmBŧíÉr ¸÷]( JČt[†Âr2>SŽÃëųVUėļÖžsĪrŌ8Ûæ ¸äs:đIëZ:dÂ;ÅÅŋ„eyödįķŽÍNTr¸ĨĸŠ(ĸŠ(5ā–RÅ*m-#IŦʑ°Eb ulŸ.G^œqZđE?›ēk˜Ž Jģ7!Dg^T!ÆHė Ž‡ƒƒS [¨Ņ5?!Ęw#@%K)$„g'žŖMŠĸą1_?–‰ąVØˇī>lœš* É)éĮ^‚ÛŽŲÖ!q-.ë2`g-´ įOüņ؍ ˛"´6° %&˜ībĖwąDĻH΍ęF*Š\Øũ’îÚÚŪŪ<ųq´pˆÚHų;‹9ųąķgœĮ—šĩ6ˇ –Ú71ČÆÎ:˙†sÖę3b>HĀU9ųĢR ÄōI AGSߞĒq;ž đØÎ=*ĖL“ķŸ`` 1Aū\Vv$ėHŒJįË$°ËmīĐūUÖéŪŌ/´Â¸˛^ Ž7dƒŽø9ĮŊPÔŧ1ĒIi+Gw ˇHRG[¤$‚ Œã…ÆF=Îkš˛Ņ†Õ1ĘĒŠL–$āŒ‘Ôtö­kXÛsĪk;ŲÆėK-´ÅcQŒå˜“Îz žüq].?™œj Ōm)ˆø'øØåN cúև–ŋņ𑆠YXEˇå%ˆ$˛N3žxã'"ÍÛ¤åĸÜÄ|ÛKÛžÚą§ŦrFī’/;Ū6ų—–b@8ĮŊuv¤}™0īSQEQEWˆ˜W@Õî ¸0Ų]Aw$‘›†Hc• ļŌ…¸9RAČ9‘ÆĖšĻ’ -6ŋb×,›YãŧGËÉ/Įę1ÉéÆ3Û]ˇĩimĢéQË#e¯XÛj)äņȌšn™ĒhÍ“s¨éI.6+4Ņš<’Û‰8lĮ“Œ‘ÎkjĮWđüPy“jÚZČØ+ū‘Âį cøG^ÃŽ8­ŧG •ĨĨH¯÷ąuœy?0Č,OæyŦYŽ´Yí布Qąm˛3fKĩ#$€ˆsĀ=¸ÎNFyŽgYō˜´‰ŠXĪqŊļēĪ/ĖFīãāœ“ÉîpbŗK™ÂÉ0{…ŧ ęäžÛ“×g5aôJČ#ÅļTl€ņüĘNvŽŊ<¨é‘—=EKâŨŨcPėÄ `įĶ‘Ī|Š.>ØŌXYd@wū3Ž~+WÃ×2AĒÛÍsn&Œļr†ÁĮPG_ÃņŽĘĮû2ōā}’âÔĖĒĸ(įîŽ 'ž˜éWĩŒB1$Ēę$;‘P6ߜ‚Į'°lc-ÎŖžÚŅĻcģųɸ3”ÜÛĘ Č8ÎWëŌ˜Í¤ÃHm! €F’EH°*‚3…<āx Ä˙ƒe‘X‘Qp7wū-Ão|r=:Īå$˛ģ!ōæoO”qŒœrN=û}k>xŲ™d…‚%'s‚yį'$Ɲo}fZŨ’hcš@ša)=qé×ôŽÚĪ‹dMüuĢQEQEb˜bCÕAü)øŖԌJ0=) ƒÔf"ŽŠá\ÖĄaŠÛHķ U.ci7¤3[1FrU]~^TœwŽSÄvĪgn÷îßz…ŠDE;Œ’XãpĒāž‡Šį„BëÉÜ6ČW ­aØü |¸%>čRÁÁÉĻĨ¤ŒV(ŦŖQ#lBOpsķnr0Gg“N[5FFwH÷;˛ íSÁ;H Ī_ú8Éė*{[;˜­Ā–8ãŒâLB rr~ķ`.?zĶ$ ĒÅX&Ž2üžø }?ĪxŪ18š¤Į2…-}ØÆ Á/Āí×ĩOkĸ[A*Ky9‚ zčzöôÍuq(XĀ Ž‚ŸEQEQEQEQPĪmë‰_Ų†j…ΘÍČöųdåâ#ånÆ:z~^õ™7…4ģÆÜö‹jF>kuÚI˙žj…Į‚-C Ž[ã&`ÄsÔ žųÆjoøD#7f[‹ÛœČĄ##ņ8öéô­ ;Bŗ°f6đĮ&åĀĀ~1ĪqĮ°ĸ->ā™'˛$Ō`Œ;;ŒnúņRKh‘Ã…‚‘Wå;O8>ã?JYm @¤š’@2ƒąČ,zõ9ü}ę¸ĩœƒšĖ* É–$Ÿvz†(Ey9åVD Œ}? ŸÎĩ,mĸ’ʧ ŊŨôúV„1ȇ2?îŽ1úššŠ(ĸŠ(ĸŒã’)hĻ—U8,ôÍ1n"q•u#žŒ=˙”Íį.ŖrĪĄüŠÂE'ƒ×§ˇZF–4ûĖ?: ˆFOzA4g8`p3֗zg¨Īų˙ëQæ!ldgŽ?­NNÕ-Ī=OĨŅ~ņëFPœqÍ7 ˇãĻ(+rTgßĩ0Å ČÚã“îȤX"‰q؟@k Ѝ˛cûĀœĨ-QEQE^ęō5C3mķjŽäāąĀīĀcôĄ‡Vŗžo*9wųy*TØ‘ÉÚŲã=pjõrÚļąáéĩ˛ßܧ‚åĖ„*ˆŪ`e¸Į™įˇËĪĖš“áûŊN%ķ|ËëtITŦ€8TbČN:¨i2;AĪ"˛ŦŖđ=å”q[ÜF"ąŨ'›1\Ãä=¨oœô]OĄÎy­M>ßÂú4­m¨Aƒå“-ŪT4ĸ"3¸đXGúķa–Ķ—ļ’EũĨm,mŌ“ÂeÕԛōrŲ.‡#qVÆ@5ĻÖú=õ•Ĩ؝.môéšî9a0 68' œņ# w+ËB𕀷k}Z4û2Efõ[h¤Nšį=˜cŒTŌÃá ÕėlÃN’Ŧmq+ī?4Ō wÆ@ÍWÂž°ígˆųSJĻYĶo–ÉmÃB¤ĀČãV–ƒgá]āͤ_[JnKDJL’ä™ ¸ÉûŌä˙Ī1×ëûQEQEQECuk ä- Ä1Ë$\†`‚;‚ Ø‘ŪŖNļŠE’(R2Ŋ“åį‚@Pę‚jÕgIĄisE #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 w, h, width, sep, first, last; l_float32 scalefact; BOXA *boxa1, *boxa2; PIX *pixd; if (argc != 6) { lept_stderr("Syntax error in displayboxa:\n" " displayboxa filein first last width fileout\n"); return 1; } filein = argv[1]; first = atoi(argv[2]); last = atoi(argv[3]); width = atoi(argv[4]); fileout = argv[5]; if (width < 30) { L_ERROR("width too small; setting to 100\n", __func__); width = 100; } setLeptDebugOK(1); if ((boxa1 = boxaRead(filein)) == NULL) return ERROR_INT("boxa not made", __func__, 1); boxaGetExtent(boxa1, &w, &h, NULL); scalefact = (l_float32)width / (l_float32)w; boxa2 = boxaTransform(boxa1, 0, 0, scalefact, scalefact); sep = L_MIN(width / 5, 20); pixd = boxaDisplayTiled(boxa2, NULL, first, last, 1500, 2, 1.0, 0, sep, 2); pixWrite(fileout, pixd, IFF_PNG); pixDisplay(pixd, 100, 100); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/displayboxes_on_pixa.c000066400000000000000000000066001506303110300211140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * displayboxes_on_pixa.c * * displayboxes_on_pixa pixain boxaain type width pixaout display * * where 'type' follows the enum in pix.h: * 0: draw red * 1: draw green * 2: draw blue * 4: draw rgb (sequentially) * 5: draw randomly selected colors * and 'display' is a boolean: * 0: no display on screen * 1: display the resulting pixa on the screen, with the images * tiled in rows * * This reads a pixa or a pixacomp from file and a boxaa file, draws * the boxes on the appropriate images, and writes the new pixa out. * No scaling is done. * * The boxa in the input boxaa should be in 1:1 correspondence with the * pix in the input pixa. The number of boxes in each boxa is arbitrary. * * For example, you can call this with: * displayboxes_on_pixa showboxes.pac showboxes2.baa 4 2 /tmp/result.pa 1 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *fileout; l_int32 width, type, display; BOXAA *baa; PIX *pix1; PIXA *pixa1, *pixa2; if (argc != 7) { lept_stderr("Syntax error:" " displaybaa_on_pixa pixain boxaain type width pixaout display\n"); return 1; } setLeptDebugOK(1); /* Input file can be either pixa or pixacomp */ pixa1 = pixaReadBoth(argv[1]); baa = boxaaRead(argv[2]); type = atoi(argv[3]); width = atoi(argv[4]); fileout = argv[5]; display = atoi(argv[6]); pixa2 = pixaDisplayBoxaa(pixa1, baa, type, width); pixaWrite(fileout, pixa2); if (display) { pix1 = pixaDisplayTiledInRows(pixa2, 32, 1400, 1.0, 0, 10, 0); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); boxaaDestroy(&baa); return 0; } leptonica-1.86.0/prog/displaypix.c000066400000000000000000000043441506303110300170620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * displaypix.c * * This calls pixDisplay(), which: * (1) automatically downscales the image if necessary to display * it without scrollbars, and * (2) launches the selected viewer (default is xzgv) * * Downscaling uses area mapping to avoid moire. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs; char *filein; if (argc != 2) return ERROR_INT(" Syntax: displaypix filein", __func__, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); setLeptDebugOK(1); pixDisplay(pixs, 20, 20); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/displaypixa.c000066400000000000000000000144211506303110300172200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * displaypixa.c * * displaypixa filein fileout showtext * displaypixa filein scalefact border lossless disp fileout showtext * * where: * showtext = 1 to print text in the text field of each pix below * the image; 0 to skip * disp = 1 to display on the screen; 0 to skip * lossless = 1 for tiff or png * * This reads a pixa or a pixacomp from file and generates a composite of the * images tiled in rows. It also optionally displays on the screen. * No scaling is done if @scalefact == 0.0 or @scalefact == 1.0. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char buf[32]; char *fileout, *textstr; l_int32 n, i, same, maxd, ntext, border, lossless, display, showtext; l_float32 scalefact; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4, *pixd; PIXA *pixa, *pixad; if (argc != 4 && argc != 8) { lept_stderr("Syntax error in displaypixa:\n" " displaypixa filein fileout showtext\n" " displaypixa filein scalefact border" " lossless disp fileout showtext\n"); return 1; } setLeptDebugOK(1); /* Input file can be either pixa or pixacomp */ pixa = pixaReadBoth(argv[1]); pixaCountText(pixa, &ntext); if (argc == 4) { fileout = argv[2]; showtext = atoi(argv[3]); } /* Simple specification; no output text */ if (argc == 4 && (showtext == 0 || ntext == 0)) { /* no text output */ pixaVerifyDepth(pixa, &same, &maxd); pixd = pixaDisplayTiledInRows(pixa, maxd, 1400, 1.0, 0, 10, 0); pixDisplay(pixd, 100, 100); if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } /* Simple specification with output text */ if (argc == 4) { /* showtext == 1 && ntext > 0 */ n = pixaGetCount(pixa); bmf = bmfCreate(NULL, 10); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixAddBorderGeneral(pix2, 10, 10, 5, 5, 0xffffff00); textstr = pixGetText(pix1); if (textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix4 = pixAddSingleTextblock(pix3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); } else { pix4 = pixClone(pix3); } pixaAddPix(pixad, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } bmfDestroy(&bmf); pixaVerifyDepth(pixad, &same, &maxd); pixd = pixaDisplayTiledInRows(pixad, maxd, 1400, 1.0, 0, 10, 0); pixDisplay(pixd, 100, 100); if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixaDestroy(&pixad); return 0; } /* Full specification */ scalefact = atof(argv[2]); border = atoi(argv[3]); lossless = atoi(argv[4]); display = atoi(argv[5]); fileout = argv[6]; showtext = atoi(argv[7]); if (showtext && ntext == 0) L_INFO("No text found in any of the pix\n", __func__); bmf = (showtext && ntext > 0) ? bmfCreate(NULL, 10) : NULL; n = pixaGetCount(pixa); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixAddBorderGeneral(pix2, 10, 10, 5, 5, 0xffffff00); textstr = pixGetText(pix1); if (bmf && textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix4 = pixAddSingleTextblock(pix3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); } else { pix4 = pixClone(pix3); } pixaAddPix(pixad, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } bmfDestroy(&bmf); pixaVerifyDepth(pixad, &same, &maxd); pixd = pixaDisplayTiledInRows(pixad, maxd, 1400, scalefact, 0, 10, border); if (display) pixDisplay(pixd, 20, 20); if (pixGetDepth(pixd) == 1 || lossless) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixaDestroy(&pixad); return 0; } leptonica-1.86.0/prog/distance_reg.c000066400000000000000000000135741506303110300173300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * distance_reg.c * * This tests pixDistanceFunction for a variety of usage * with all 8 combinations of these parameters: * * connectivity : 4 or 8 * dest depth : 8 or 16 * boundary cond : L_BOUNDARY_BG or L_BOUNDARY_FG */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void TestDistance(PIXA *pixa, PIX *pixs, l_int32 conn, l_int32 depth, l_int32 bc, L_REGPARAMS *rp); #define DEBUG 0 int main(int argc, char **argv) { l_int32 i, j, k, index, conn, depth, bc; BOX *box; PIX *pix, *pixs, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix = pixRead("feyn.tif"); box = boxCreate(383, 338, 1480, 1050); pixs = pixClipRectangle(pix, box, NULL); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 0 */ for (i = 0; i < 2; i++) { conn = 4 + 4 * i; for (j = 0; j < 2; j++) { depth = 8 + 8 * j; for (k = 0; k < 2; k++) { bc = k + 1; index = 4 * i + 2 * j + k; lept_stderr("Set %d\n", index); if (DEBUG) { lept_stderr("%d: conn = %d, depth = %d, bc = %d\n", rp->index + 1, conn, depth, bc); } pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_COPY); TestDistance(pixa, pixs, conn, depth, bc, rp); pixd = pixaDisplayTiledInColumns(pixa, 4, 1.0, 20, 2); pixDisplayWithTitle(pixd, 0, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); } } } boxDestroy(&box); pixDestroy(&pix); pixDestroy(&pixs); return regTestCleanup(rp); } static void TestDistance(PIXA *pixa, PIX *pixs, l_int32 conn, l_int32 depth, l_int32 bc, L_REGPARAMS *rp) { PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5; /* Test the distance function and display */ pixInvert(pixs, pixs); pixt1 = pixDistanceFunction(pixs, conn, depth, bc); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* a + 1 */ pixaAddPix(pixa, pixt1, L_INSERT); pixInvert(pixs, pixs); pixt2 = pixMaxDynamicRange(pixt1, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* a + 2 */ pixaAddPix(pixa, pixt2, L_INSERT); /* Test the distance function and display with contour rendering */ pixInvert(pixs, pixs); pixt1 = pixDistanceFunction(pixs, conn, depth, bc); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* a + 3 */ pixaAddPix(pixa, pixt1, L_INSERT); pixInvert(pixs, pixs); pixt2 = pixRenderContours(pixt1, 2, 4, 1); /* binary output */ regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* a + 4 */ pixaAddPix(pixa, pixt2, L_INSERT); pixt3 = pixRenderContours(pixt1, 2, 4, depth); pixt4 = pixMaxDynamicRange(pixt3, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* a + 5 */ pixaAddPix(pixa, pixt4, L_INSERT); pixt5 = pixMaxDynamicRange(pixt3, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt5, IFF_JFIF_JPEG); /* a + 6 */ pixaAddPix(pixa, pixt5, L_INSERT); pixDestroy(&pixt3); /* Label all pixels in each c.c. with a color equal to the * max distance of any pixel within that c.c. from the bg. * Note that we've normalized so the dynamic range extends * to 255. For the image here, each unit of distance is * represented by about 21 grayscale units. The largest * distance is 12. */ if (depth == 8) { pixt1 = pixDistanceFunction(pixs, conn, depth, bc); pixt4 = pixMaxDynamicRange(pixt1, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* b + 1 */ pixaAddPix(pixa, pixt4, L_INSERT); pixt2 = pixCreateTemplate(pixt1); pixSetMasked(pixt2, pixs, 255); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* b + 2 */ pixaAddPix(pixa, pixt2, L_INSERT); pixSeedfillGray(pixt1, pixt2, 4); pixt3 = pixMaxDynamicRange(pixt1, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pixt3, IFF_JFIF_JPEG); /* b + 3 */ pixaAddPix(pixa, pixt3, L_INSERT); pixDestroy(&pixt1); } return; } leptonica-1.86.0/prog/dither_reg.c000066400000000000000000000061661506303110300170140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dither_reg.c * * Test dithering from 8 bpp to 1 bpp and 2 bpp. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pix, *pixs, *pix1, *pix2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix = pixRead("test8.jpg"); pixs = pixGammaTRC(NULL, pix, 1.3, 0, 255); /* gamma of 1.3, for fun */ /* Dither to 1 bpp */ pix1 = pixDitherToBinary(pixs); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); /* Dither to 2 bpp, with colormap */ pix1 = pixDitherTo2bpp(pixs, 1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 400, 0, NULL, rp->display); /* Dither to 2 bpp, without colormap */ pix2 = pixDitherTo2bpp(pixs, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix2, 800, 0, NULL, rp->display); regTestComparePix(rp, pix1, pix2); /* 3 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Dither 2x upscale to 1 bpp */ pix1 = pixScaleGray2xLIDither(pixs); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 0, 400, NULL, rp->display); pixDestroy(&pix1); /* Dither 4x upscale to 1 bpp */ pix1 = pixScaleGray4xLIDither(pixs); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 700, 400, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/dna_reg.c000066400000000000000000000107071506303110300162730ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dna_reg.c * * Tests basic functioning of L_Dna (number array of doubles) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, nbins, ival; l_float64 pi, angle, val, sum; L_DNA *da1, *da2, *da3, *da4, *da5; L_DNAA *daa1, *daa2; GPLOT *gplot; NUMA *na, *nahisto, *nax; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "dna_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; pi = 3.1415926535; da1 = l_dnaCreate(50); for (i = 0; i < 5000; i++) { angle = 0.02293 * i * pi; val = 999. * sin(angle); l_dnaAddNumber(da1, val); } /* Conversion to Numa; I/O for Dna */ na = l_dnaConvertToNuma(da1); da2 = numaConvertToDna(na); l_dnaWrite("/tmp/lept/regout/dna1.da", da1); l_dnaWrite("/tmp/lept/regout/dna2.da", da2); da3 = l_dnaRead("/tmp/lept/regout/dna2.da"); l_dnaWrite("/tmp/lept/regout/dna3.da", da3); regTestCheckFile(rp, "/tmp/lept/regout/dna1.da"); /* 0 */ regTestCheckFile(rp, "/tmp/lept/regout/dna2.da"); /* 1 */ regTestCheckFile(rp, "/tmp/lept/regout/dna3.da"); /* 2 */ regTestCompareFiles(rp, 1, 2); /* 3 */ /* I/O for Dnaa */ daa1 = l_dnaaCreate(3); l_dnaaAddDna(daa1, da1, L_INSERT); l_dnaaAddDna(daa1, da2, L_INSERT); l_dnaaAddDna(daa1, da3, L_INSERT); l_dnaaWrite("/tmp/lept/regout/dnaa1.daa", daa1); daa2 = l_dnaaRead("/tmp/lept/regout/dnaa1.daa"); l_dnaaWrite("/tmp/lept/regout/dnaa2.daa", daa2); regTestCheckFile(rp, "/tmp/lept/regout/dnaa1.daa"); /* 4 */ regTestCheckFile(rp, "/tmp/lept/regout/dnaa2.daa"); /* 5 */ regTestCompareFiles(rp, 4, 5); /* 6 */ l_dnaaDestroy(&daa1); l_dnaaDestroy(&daa2); /* Just for fun -- is the numa ok? */ nahisto = numaMakeHistogramClipped(na, 12, 2000); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, 1, nbins); gplot = gplotCreate("/tmp/lept/regout/historoot", GPLOT_PNG, "Histo example", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); regTestCheckFile(rp, "/tmp/lept/regout/historoot.png"); /* 7 */ gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nax); numaDestroy(&nahisto); /* Handling precision of int32 in double */ da4 = l_dnaCreate(25); for (i = 0; i < 1000; i++) l_dnaAddNumber(da4, 1928374 * i); l_dnaWrite("/tmp/lept/regout/dna4.da", da4); da5 = l_dnaRead("/tmp/lept/regout/dna4.da"); sum = 0; for (i = 0; i < 1000; i++) { l_dnaGetIValue(da5, i, &ival); sum += L_ABS(ival - i * 1928374); /* we better be adding 0 each time */ } regTestCompareValues(rp, sum, 0.0, 0.0); /* 8 */ l_dnaDestroy(&da4); l_dnaDestroy(&da5); return regTestCleanup(rp); } leptonica-1.86.0/prog/dreyfus1.png000066400000000000000000000241451506303110300170010ustar00rootroot00000000000000‰PNG  IHDRI â pHYsb&2 IDATxœíœ\T×ĩč÷0„Á82*>…9 o“’ Ô Å'Úi›ûn›{{ū¨“|š[Qr#Tä e´5ŽH!"'mĶØûyīŨkb>MŧõffÂ@Dމ÷õÆÖfÎČŅÖș9VΑÍ^oŸųALCŒīŋ÷>īž?„9|YŦŊöZk¯ĩ÷9"¸Ûˁū_FĨģGwF8į˜¸#ē?K ‡ķTkyöĩ!įŅ?ŧ =ģå†Ú~|‚ŋ3úKéá‚õ™–¯PÔugôuéá_מŨ}üôã‡īˆ=)=;|CÛ=öÁ)0trlKøPsá?Œ}°öБ;ĸĄÅŖũę’kĶ@ÆÚŧ;[āN×˙¨˜ĮŨ%JæÎŊKtīĮŸ…gB#„%ėŨ ’XĖŪj˜ģR`ŒüüŨ ×XR!ænĐAŽĸ‘ģŌõ}đŋÜ ę:,R{7¨CˇŨ *ĩXīåu]áđŨ ,„¸˜ė/Fmå!î˧îŠ3Ŗ 0ĸ1ôŠ{"7#ęŌuG?­?;*ƒ/ 6ę&ķ/3Ą!Ņ‹uÜ~ëY÷ŗč Bę§ŅoĪ„†9đ‚Kü´ũ֙P‘xœā”œÜí7ƒŌL¨šQÆÂ“Ŗę§ĐvÎh,C.‡ž Ũ†Ē ”ŅɌĻŲŖ!Ãm*95ũËL)ãŸØ!ģ'ųiÚ`ęsĐCœcȕT€ ā{@fFŊåėˆņ21EËöŸ#5Ę´…{ĄcQĖŊ(—Ëá&?Aīb°L¸Æá-™yŒŖ*Mļq,“DULnąĮA H1Ę ĘÉúG”×!ļļ2|}Wåny”؈X35‚6¨7ËÉUg˜‹Š ÆS1+g,Ņ$¨Ą.ĸrØ@ĒÉ=û>*¯ÚœDW`^†šú˛Íû\Ųr˛ô›nėTAU[Wo68jméY\%Ü áæ‘:/Š–ÎCtąmÎCËT:lzMŋc•F’¨ #G¯\B–ß,P'܈;Ōļ,¯ .A_NOģ7e›^ÄPęäR—6B+ŒŠ­ÅŽŌRāLžüåÍA‘°uū(œ Ķ> ÁŲ‰.íßÎÂ~’WRžw“{§Ø2Ũ—Ũ7YØ'ŖÃē$PM;RNmÃËû O[Vŋ‡Û.î´ųøņ€Â÷Š&Nķ$QÆ9č-ü ôß(ŋėj­Ër„ĸl°M͌ėd"ģ/@ĪÕAčí¨āžÚr5T˜K%Fnbœ“×ŒĶŽ­@ŋŗCy WōzÚö,…ō)ÍËėEG"ŅōüļÉø=I´ŗü@ \ļsŦyS”ĶÉYk­y]Q–?Ö Ũ+Á7-õ$ɲ')*2„TĀöIЊ/”>)+oA7”6ņ4ĘB:<Az×Âa§(Ô)Ļķ%ō„Ę[736(1MŧJܓũ‚_Ėi”tô˛û÷+ԝG+ķ[|ŸNŠM ŽvôgJ‡æbĻi›ÂFSÅe<.+q ŒLŖ}ÚynĀGiÃÕËSrl‚ĖȎî!ŖĮ1ã´\Ĩą˜đ“aŋēí\'ĒC7+Žģށ—/ėā*hB§MRķ;lÂŗš"ŠÛÂ0V˙äXú -‹ĮRöȎC€Ķže—Y$îxŨü1F!ėQgx˛-æą1Ü\uŸĘ¨{Ķ‹s0ҧŒ LŖCæ†ā ‹fuĘįŧl –QqîȝŦd;vvUŊrbļ M9ĶWÁß L{WH}LÚΜ]âW3ęÎî_ËjБDßnVFXūFnŨŒ÷ h /T~c=ũ~_°‘ĸ}L͟'¯įŲŅĒų7áˇpÁŪ†ī<žß%Ë˙zČz‰Ŗš![€fÉ9ŽĄuŅW6kéĩĘpD(q”oȨ”ŋēÄÁ]¤x2bM¸Åģ0Ö÷wdmJJķūāĻ{C^­_ÕüR×;[Ø94ÖröĖÍHØÛƒÉŪXË ĸČuo@Û2ɎĨK ¸SŸ hËXĶ˙ēpãōÂâ­ŊgOnžƒø`pÃ?כ üûr6p'ĐČüĸ9Õ7Å´âÖ&kæéŲ…+˙ŲĄ9Ûč…đŽMû̝o՞%Ë:œėŠ1z0ĨœÎŽvö5¨ĨŽ=°‰TjIT‚Ž{ŸŲ<ņč~vihgßËßHMá …t]öō§ˇRTšFɡ—U„”?šļčÎ"ī=f¤Ûeaˆ‡÷2ŽŽ&­ģ’¨ĸą13¤ˆ°ž_—ū =õ—´$'•ķΰ0øƒ͘4&ķ+MÉÎ'2}Š˜ļ–;W6;h.ŲxŒŪ~¸ü4âÄĸ}ø]–ęÍ|ĸWüãÂ5ģ/„`´xŽ@īu§Ŧ!pŊÄ8kŠėJJeižÎü/¯]üZFÍčhä䍨p¯^‘ŊŧriŨŒ–Ũ¯‘†$JW3õŧ9×2?›ŧŸk>åāiæ9¸˛×Ŗ{ĸ÷k°=Ü›jŸŸļĶÄxƒ9Ģūǃ?đŌĘ<\}nfR4Q}nŗĪ,UۘßRÅ}XÛaNßŖt5īĀmˆ>ĄAÉm(œjÔ^:ßôŌļŊĩđ~ß,O-āš7´ē@, (P"|‚NBv5u¨Â ƒÛĀ×PĀR1ŨY)-.KŠôzā6Š!ł ŌųīÕ"đV‰Ų?h=ŒrĩOLüžč6T# Î,=´ŽY§ŧh [t ™ŗIeĄņbY­¤ Ų?ąõY iÍŠƒļĒWĒ2šĩfĝ_Æđƒeŧ  %č°ëue/ãõ2.RĮļįž!ŗĐ]Čž:~ĸžĢŽ8ŠĐŦqúĩæŖŠŽŪLËâLÔZ×ø7]{ËXˇi4n,2ÕéĐŋüaC•čĒ:Úĩžér,į ¸Ņ¸ŌÜ T„ÔqĖco•ËhŸŽY‹ÂĢ탏’|ˆX§ŅlŨJŅ Ø kHá EcÅán-Ą’M t‚déF°ĩ.ļ !iÂ…ŪĘY]˙Uz5-ĩTŊ ōũ,AÛQH+6´ õāÕĶ•ųŽ97įÅĐÉiŪyǚō,˙6Obđģķ4@-4 bŸ]iâa+•z0Ĩĩ€ŅŪ|pÅ\˛@/GŽe{‹YōpØÅÅQDŦā(ŨyZאlE0hėfŧV¸š_‘9R?˜‘īhSYŧ°„æėh ÂĨ Üc,Ė5–3>:-û‰HŊ÷ŠüŪԏ×öfe#DĮ“ēF7wyŅ‚ĻÍ ˇĖ(p_hëąÎëČė~‹4œ@ƒ]WŲė@Žf‘éļSc–@+ô =īüî-RɍmMNAtVë.A3hÃ|–•ĸËŨ ŋv†ģúâlS˙蚎1×ļ%Ҍ–II5ŨZĖgãdķ/,0öĸ†ūšĻū_—Au›đ0“T`ƒMšŒŨj…P|lWƒŲ_Žs‚hōūTęuŦ v_Yôđ´ŽĩC‘°‘úaUŪ1ļĘÜo%čųAÄí™å|$%)õVíyIBÔDyæcŦ×ÜmŎzY8—)ô7•A Bélĩø%!ëØŠo˜ß°]†IG•ąŋ¯Ĩ ¸•ŋ‹gĸznՆĮŊœKcü_īŋņÆÆđ Ú÷´†úųǎDNžFŅWkopīĄcĐúÛ1÷šÔūÎļ°ō,GÖŦūSÆBÄVūmMųžÚį÷>:’›iļN|˜ļŅkŧšƒ†öV÷#=~ôŖŋ­Múą`Æ9#šÖĢ2ÜQ‘g„‘ęɕŒ?M[ŋ~Ŧ*!ĩNoņs|āÉYSnUÎļg‰ÆŠō÷ÕÎĘčۛļžcüžZÅRGĄaŊ-ŖüؤĐŪ]ŋēk]Ŗ­o¯VΆ‡Ķve­ŒŖĢQîb6­؇Ës[ŽĐžgŖšjEē[*û/ŽŦ¯aæ?Gí#÷~÷čixz›š¨ÁÕÔĶQ'ĀR­{ę‡/>ī]žŪؗV éŠÚ?WßģũÉ&+xͧŋåüX¤čļˇŖāo<žī\ŌX5üŸ˛Ë\đāĻoĩÃČė­r• Í'Ô`ūu1)yü¨ņŊÄÔ°Ŧ+U×pBwø>&ĸ–Ëß˙ ­\šĩÎúËËí-%gį§ ŦaŋV×I]]|w ~-ń\ŌŨë§´îÚŅ Žŧá-0˜P`Më×ꆹnܡ׎žBĶ[ŠĢ Ę×âĄ^į ‚ŗoēīKH]\wņsŌčíęë4%:\' |š¯ŖåYy;P]‰^Ž'E>¨Ā9ũßĶĮáŋFyy‹Ņī6'P­°ÄjnBų­Ÿĸ^s˒+ÕĸĄ# *>z0=+ÖDw|{\Må­Ũ=˛ÉėâíwõÅ2ĪÂęTsaNšŅ+ÆWÃĮ}OŌĨ“æíÅÉÛ÷ŋģ߅YíĐzg˙ŗ =/o=BHLːō÷ FSŗį’eÕŖû]ę.íP=[ė5¤æíy`8ĄŅ¤^ĘáBj=Æsoø~Ö>€ ōĘJÅ$ôÜøëömn€†œÕqĒm°īŦåģhꅾ Z˙ dķ ŧWŸ•:`‚´‚éĶčÆąŌŋŠíĸk&9•_–ÖPtbā”ę5Á‹{qąiUęŲ%Ģjũ´0ÕP )ëN[ĘÂÄāĶ­UđíÅė'čĶä*û€Č­´%ī,/íîøo,(b=*đŽũ I)ūD×Đ&Ä=eŌģīĀĶĮ×;D7LˆkŠTs×?AĨMČTeŧŦWp :Á˜ĶšDħŅ\o­Œ˜OPe2V9õs y>Ķ÷fCqÚAÕĸQÔëĩPŠĶ›EqtVšQGŊiėØW|†ü ôÎ×ĸŸ‹Nb^˙ÂΌę3AˆíB€mę‘#Ŧ2#ĒG ŸØ†îĸĨK`fT‚˛I~râ‡ĩööũō…ÂŊ?_;ŋqFTY‹Vūvž˙ö/ĩûĄÆzĀ1ŅžrîÄ (ök_äû}ī^ũõëĮējŸQÎ,ëšxdānTESôŖĀ•å?=ņĸ5ũ„!ī ¸ē°ĒtæaÍ2Ėę{˙RęzĶ~Kģâx([øÁ֙ĨĀ-}ėq;įۏ/?;ÂíhđŽhf: ũÜë˙Tf¨:R‘IÜā>ÕXŠ.ü}PpĮ?cËįŖ´$‡åüÁę¸&Ũ Ēā_I Šōšč”ãÍá—$#騤Ŗ‹Ųd‰/|>ŠHjב@˙ã3¨š(‰€€;˛¸âÛĐxŊDŤtŌŧl*ĮÉÂŨŠčGŠÜm¨[ßʋųi%Ë‘æAú™Ū#÷ĀK2ItDožh†ŸŪí!UŅ5#āōEz‚¸åõŗQ(įŧŒÛĪ’:9¤§ Å‘z˛gô­÷i4v6:õUĻMpĘ,đ?wŅ›ž)k&:oG 'ŅŲQ7đEŽAl‚Ū QĪum2ŒžO3Ÿaš ĸ Žcũũ-´æ‘Ŋz>´`Pö‰¸;’(mĄqlV×64—Žå´ Kŋˇ’ūĐDųļ1ō?b¨hĄhĸæ@Åč%Ŋé–28ڊڏģ`;W—@ŊĨm4õbį~gLK!ĩ@?€UI!ë°>ōÃI>:b+§MLCÃâÍŗÔr8úō­"üR.x-w —D_ą›oK#hbÕˇ¯ÃËĒPę7Aâ@::uą™ãĮŌ 89•!ōؑ÷6ƒæh_ŅĐLˇ Ēí::~ GåÜ!TĒ&PŌĸ[ŠĄ´´ĮŪON{GAĄR+0Ū✑ŠZÂ]0žŌzĒtG `37\”.ôČŌŅį¨Žd‹›^6^I nË]üV´–ū7˛ä,œkĘ2…@cá7ÕÛRؚ1čō'ĐI?0ĮŊĖEc…äV"FČ(˛ŖˆHėwq9øņH~BWå‚ΞŧđœĒ›KBmEVņÉCÛf.JAnÁÕ c)‘Ģ´t=8×@JÁF|j1jįžkaaô™Ëî’ķ¤AH  ČYœXˇzÁÖ۞9ĄtKI%C/CnĢÎæ})āGéĩbŨEč3zÍ.bí^ũėV:ũGĀ`*OޞLÄQɝKbÃÁ‘UéԙL0šA+][2šõj9Qčû ÷t žšÉ…6XUũ #4)Úõ؅ĸ<Ú*{šĒ„đī*Ū;&o›ŽėīŌ¸ Ō™w­ÃXĩ’¨ ŧęîëh —[Ūūā‡*Hg_dW>}āņKÛxˇV3Îokũ˛gúԊ>[ÖĒåy(-Đķj6ˇL<uƒpË qtęLVúÆžįU1ß;oE.Ęq-æ09=|Ŗ×(E-xWÂ]Đæ ŸÛŒ[ëFV:ŸbG&ÕS—ļr¸õ™ķ˛B؈–@ķÍ(ė§q’*ˆYÎ ėõgpeĢ@Ĩ–§7ī`4Ė ×ÎeD֒ĩšŽō’\ėÜʎ•pŒg§ā¯ˆôÕ#Áŧ(Í(ŲnäĨQ>Ą-;ÔČLä=ņß#-ZM¤Ę Éą%Pę ûīŖSŊę̚Å\ũā!+¯DĢߑZlá0ßÁ%R†|ÃĐąęœZß7Ŗ™ Ũ×”s›=Mu"†Ņ.’@å×Вūj_ŗ˛|K¸ĻØĩŪęų•nīN˙3ШÉf8{PoĶuT9œ^ëĢgKŗoę…2­Â—Š-Ļņ gE'1aŸ^­ë¨¤t/:ŗŪč^/¤¯ĸųü'¸y`X—XYŅS g‚™wÄÚÂJŖ4Ė/]čĐtūûĪÖF8é´šG­ÁiÃxk‡ŦÁkßķ ŠĨp‰?:P­Āû ĪT†AœĸŲŅ:ŌôķēäüĩᑊáŧU­Á9ĐîĢ™‚(3ĻĨä|§ulkv^…ÆĐ‘įÂÃūtAšp8p#ž†Æ¨i¸9õQŋ™ļ˜™FĪīX—E—6ØåŌ(JŒ=üaĶĘį9õŋ/Ŗčū$ē|ĮŦ†.ŠŽtũ>/biž÷uuĶՈ‹<ôÄĖIôĐķ‹ŊŲ=ËÖF`f!NĀģ˙QĄy] Žė*đ¨ņā…#ÖuŨëŪNgé°Â„s0A8ŧš2ļNÍšœ‰ÜŒŖ.÷>6]ĻÉ˙Š–ęPåÖ˜t]Äҍ(7"p1ÅxÂŪGŨîGū-ŨggĻöĩ=P;Y}lbj;ī‚Ņ%ŠĸÉÉ0ūĻhHa薩ŊZiĐú[ĖävĨÜKZ(ÚųÕ %„šąÜŲ'­]ŠŖ _?)æŒ`.퇖HęIgn ˜nVK’´ŸɝũöKÖ3žĘō^§¯ĘRģŨ6æøÚ6xMũ§‰/4MŲžôoį„ĢŸ 7Ž<îPŌ_č]6ARžßxûķ{ˇķRĨŨHZžä†b(á˜RSØĐhæGÜ~Qũ*įܗŒ§ļķ#-Ę^˜Zęáų8ŠuoŖ5;‡ŋԂfOøÁRo}Ŗ˙†ŽtļsPáébߏŖ¤vŠÖ.ŊkŧėåXŋ *íËŽœŦČkŧ„.qĐĖwqN ö)p{×_Ũ’Âė7ģ›Q*Ն_5ʕ­Öa´™ƒŨ|9w9N``ԌúįÍš4Ú¤^dôxå_ĩÔ{§ÜŨ¨…ä[šk1ģNåcÂyM)/oå"THÚ^É/nîėÉĩ!Z7mɘFą6ŠÁ‘šWs,Ō̝õė­bŖīųų°5 œ:o p6îŊ (Ë>Ąéŋg`-!M­ūã”WûҞ写Āhsč ŗeĘO‹˜ÖÖE-‚€ąŠår™¨a1ĄҜ]€!ļMÁŪÜĐĘ1¤Ĩ ce‚°ÃŋƜ0BžË,ƒ”|¤ÖiQ2šŠŪŋœ´ JģįŒhÚĩLKÎMŖá¨ŽíØߗ,žõ7 ŗŠÕȇÅƒs´áÖ'ŦíP‹­ËdŊBŅ'ā4BúūOɁõš“9ÕØē%%PŅķ*‚GcčĮäģŠŧ%ŋ—õ'ōX˜wķ*‘1ÍŪˇõŧ4ŲõK‘‚˜Ã$Gą€w¯3"Ēėa4õ§…•ž5ã‚&åÉŠdKĖ#äŅ ¨ßdcuМ[áx’ûH¯ÁŽEFāUaYũ ä—1”õ’ T•Ŗ]™j¨DĨ“Iŗ6ǐĘ~ŨķđŌ:ĶÂúm  ×÷~EU§Hļ×2ÕFéė=ÕÚđŖ’åÚ-ƒt2,^ Ŗ8ČūŅ?™¨€ˆšQųÁÚĨxvėUk_KQŸ‡V˜ŖeŽ90u˛ MĩQTMšN´TÛŗ€V~ŽÖžQZƒT2Zėũ¯5ŠkíJ/HũÎ9Ŗyķ°SŸxTđŗ—ėđą“:Ė@KΟ`Ŧr›Û׊āø—†|č OÆ-úe{čN'Í#t˛¤ÖZa°’”YŠ],{_očŊuŗđdęÁC:Ú7ī”z’@åwöôVžØÆŊ%ÄĐĶ/.!éé% ;ÎĮĐrŧ‚xĢųØžFę‡V˛.>ŽĀÂLr m÷¨;ī՛Ģ\KSë`†ÁõķcĪāŪŒŅ‹‹ú-1´ūĮ~—ķ–~Ū´Ŧ(qauƒ‹üDs ™ˆÍ IDATK[(œj/9įMHíËuŗ)ĘéISeĩFŠ’ÚęŠ|ÚXļχÂ)eo6Å ’ĮđũŽt^ŽQõįŠGŸāģÚŠ-™ÔíáŲĐ;Œõ̆O0F^vÉÚęÅQb΃Ū)„Žæ° ˆ( ĩëb#n]  Ī I0XzœiõCČgģáVFŊÆDĨîfivRŽĶĨjŲW.HŦwE7;ÎĘ´ļîûÖå@i'd&P•8õJC‘¨¯0žžß>žyō"Íítœę†ōīš9‰<o#Õķ>b\o@td|ĪéšßīĄ™Ž§--ļgíÔũCŧÛPy÷C SßV¤J =ƒųČL‹Bü@Ę4_uąĄŪ*7u84åvé¨ë˙48žĩ6ã ŗŽû}š­ãßĮĐčG%ņĪC#ÖĪb¤ĨŖn“T¤ēéúb’_Í-hņ'ĢՋGd~-LDWÉÃfkČ­õÍ\0aĢ–Špŧ/Āß •ŧûJãˇ%_œT„6Š2*“ōü<+ą'ĻėâV‚j¤Ré2W*ZÕę^Ü#úÁøne K•,ūxĶŋãYķšI;Ņ~zģl‘ˆÅ6ĮėŽĀšåžLaąlīŽOŦ}›gŠ ‚› 5E€4ĢŦ#Zø^3gą. ãHyÜŗú~ĀŅųâœĸūÄünUŅā˛.*÷ŗE׿?ĢąęÆx°C”•XąĖalō¨F{kEĨ<Û4MÃˇo<–Š ĖáÂl€Ú&ĄˆÖ/ɗ5ƒß_–͎M™Rp^ŊEˆEÁ”ę+ÛĪģõũlDZpÔŋ;ؤ}h}gÃļąæIՒŠĮu•Ãĸ_ß%WéĖįˇ€ķÚGÖŌ Û.j•æooÜŖŅk¤–ƒ :ŠڜˇåĶŋ F…‚/nëŅFÃÔq40ēndËN8ßŲ’@× ¸ öĨͅÛNLēöą¯ļÄįƒ9{Q]ąĪCĻÄYz×ÖÍšÛ ŠŦŅōUÖŧx6sļÉéŋ¤Q+N¸Ø’Ē7~yۛF™Ņ=>æ­[Ø|χXČnú1Āčč4)#…úÄŗ}kÛßņX¨ōŌÖåU ˜Ëégghˆøü+ČžņÔKæjĪą:ÁŨzĸõQžĸ’…JŊ wÐ^ä•ŌŖŦeå‘|ą ŽLKŊiĘØÍj°éG ĨRüX#O,b¤ĨŖ/j ē ˙‘}sŠzĒžŊA˛„HžgJ æģ˜Z˜5&Đ)ˆx–mgŅ÷^Ĩ8jR/ŗšĚߍĨG6[ô‡Gî‡Ųt}¸i[JĶÁpD2€IĀ}fÂņČxg$pDOŲ!ž/ĢR@LcŠ˜5ũíđ–ŧy&¸Ŗ&Ą[†i4ĸúŌĸXĨĩŒžæĐJQ9ŽdM^/%Qaˆ&Nú›‘ j š7øIūšM,Ē… `my2ÁøqĀŽROˎõG{æü ëp‘O‹Ė:ž”:)‰€÷m‰SV¤‡ŪæĀēˆÖzāáČęōšäl)ũb+Z­{/ČúĖF@ų+d" wj8w ;lūäli‘âûcæ3ăFë2Iīķ\¤w˜ÆqOŲ’$Še+~%›×3Eė§­DīNVĢDt|Ų’ūJZäžUĄ‡V|1K.Õ#næQMú /ķ–¤*w;qĪcđ1õ Gė&ƒ›jAÅķ‚]•žīNŖ|ŠwęĄ"ë AÆûåVËõJÛŧĶM!įĀĻ%‚'vްz EÃ7ʉĖ%–øœ{ö˜”IįSšéŲ‚}ØéĻÉĘaš$4ä š]|ũ# LdüɃĻ}`*ĸ†ŲŧĨpNĐcÃŨÎ2‚ #žFūo&MK•Hķų,‹_EõoŸūTbYŸWą&#QtZ×qyHrĖÖ_–ōēĮĢ;W+{Ž.įˇę¤Ŗ}М”ÔUšH"ŨúŲ¨×$mÂųiyDj@ąÜ,éå03íÚ8(§НčJer-¸ļ:¯*€ŠS^y1öa õtßâNé[>ÕH<ā´Y¯ŖiŖ8Ļß`#Ŏ8h ĶÆPdč, šM‹ Į˜9¨ßĀ9Lrˇœ: ŌÍŅÔâ”B5Ĩ4āŧܔ~.āįiäLÛUû?ÚŦ FfQŦAwuqĪŠÉog5qã4JûWØ5/8õ"IrĨ‹ŲØ{§.S͘Ž-ũA6"5Ōå0¨ß-¨ôÁ#t’é?T‡Ļ$:BËÂ:Ą ņx‘ŽƒõūŨ\ũŸË æO ×ãŽĩņķØáeúŊØ ŗ¸’¨˜ûŦ.Î=7ö…xôü%ûŅĢBēFa6vfĮ§ŽOĐØ…Q†NĮ?°wDã×ø ÷>ųúOôsQî.Đh "öģ@•¸ŧģyE9ZÛIíŧŠŅoĪ į_~â3ĪÍ(õšë˙3|žî‹Ņ‚7ė —į¯ūõŖŅڃZōÆ?ŧõÅ ÄŽ™ūs‡ĪAC3Üû?™Ø˙ Ęŗ;mÂíIENDŽB`‚leptonica-1.86.0/prog/dreyfus2.png000066400000000000000000000426431506303110300170050ustar00rootroot00000000000000‰PNG  IHDRI^ÕzÜ PLTEUUUĒĒĒ˙˙˙ÁbŅ IDATxœíŊ}tåčīP’œmļē Yĸûģ-ŨBKÔŨn–D Ų6ˇ˜@d7vąh! –ą‡Ûmv°Ȗœ’]œ@l7Vcņf;aMiąɑ §x/žm^LŦÆēDNIHŗņÄļ$kf4Ī÷÷}Fō[؜ß÷TįD‘Ĩ™ž—īëķĻ"¸čˇŠūÂü˙—™#Ÿ™å/:ŗ…=ʞ ČųwÉįežuvëŅÜ×råž}Ī/ķķ>ūÂüôí¨ČÅeŌ Ásq™Æâ p ōy'Шx‘˜”¤– yˈĀ]4æĶøĖJčüdcü˜šā"|–đŸÂI‹™5caˇā+ŨæŧHLu˜ s{éŧX}¤mcĪĢŲSúƒ‹ÄTÎndOšē‹ÄÔ {vą'ēü"1ĶÆsČxūš8ˏņܙ'ķ‡É*ãõø§_~ALNu—6­­\l-% ČŸpaō™É*;°Ā‰ļ[ÅO2"t=áLž™Q+õ|üuR^6.„) „z„ €˙ƒjOü…Ŋ@&iŗP.nëür’{?öB &û˜++a 6ŲZąObîģPϟāsæ€(Ąí­ęĮ_™öÕZ.)•au>YLI’#{Ĩ†Öû˜(Ggf¤ˇ{=É<“’ e‚ÛĶŠķĐŅAéLœˇœŅĒŧ#/” rGŽ rîUjÎ+Ÿ´ü¸ĻŨĘ…Å gr<ĘQv$`ų¨jƐ•&1fˇĩĪ”j,ŌáIAŠfzQŗƒŌžÕĪĀT[R­rƒno]…uÎ|4ė^iF¯Oa1ŊŸĨœPÛIŊ5„1NÔąš(ͤŠn,ZHyX­`ųå2ۙģĨíáŖĖd7Ÿ(M æ;ņõM /œúāøüž§W`—Iĩ`§{ÎeģËđYtÉëO*Ž]ŧōęD=ąĖ›úĐúōŖöĶËõu„ZPxCį0•^xaŖX›ņ5,ĨģP95…ZKƒŽ,ûļSøo%{=B¯]랸Q•1Ą…dÎaD‘Át€a/đ3œpĮô2H?zƚŨ†LŊqŪØķžw*¤Q1Ų-Ī‘yŗ YŦ&štO‡ņá~PZbd{ä+7 ¯@ęrûyo߉Fåąēˇã̇¯éA#$†¤M3Qû ËūdHvbFo¨ōŋRś¤ŊjÕcå‚ bWã5æ68 FQk’Ũäėī_šŠr+:ËTAˇ( RIŖŦ†ķÚwŧšÚGĀƒ&,bX>šÍuŲRÁ˙SüÎečĨi™ŋ™zšųQģ‰ĖŠ;1K(‰‹ e & œv\įuq}´Ô$ē°Ĩx¨âŗKŧ Mū úõÛA pĒäîĨ›¯™ôL310P5āã„'÷ŗ7Ō¨ŊĮ3@Ŋ/¸*‡–5ŠØ–Fåj(ļŠžÆ$č[Ž™ ˙ۍ+Ŗ6‡2¸á¸,&ÁJō_bÄØÛ}mëp-|™>Ÿ'ŠZ!e5ąqˆR™€]‡3›ÉägÆxPĨģs$]ŒE°ŧ=ĐS2D{‹^'äŽ4“Õ ØØŊ´ÚĖ0 ƒÛQ/Ö<‘9Ėģ^äAL?l<Ŧ‡ôhņôéÛLũ\'xE—tsc‘f‘Us5| gZ`Čš˜ĻĖ•Oöаd(b$j4°JIúv-ņ°Ã"a>ב5Õy/H22÷ˆÉ6OÔ r†1Yås˜áŽãCT!fÃß2Ĩím„&ĨĄÆ„ĘĀŊkhžË™Ēzy‘;Q‡]œŖX؊F!šŠšÅį–3‚i•GĪÂWû˜ÕbLęFeŌ!WŒ4˛Ũ°eaņ%My‰Dâp ˜d,]ß0VšCī"‚:‡Y’7U €-6lĸõņ˜§Š™ņāŒpˆÚˇž´ū¯‰Žmp;đŦloņ´ĄúD"isËIíø!öω1ądå‰1P]tįĒ,/ĸáe_Jį¯ŌˇDA‹¸dôË$Ŧ‰tŲ"^I;ÃB0)xũsåķl˜@[{mP/ļ7Øl)Eå_8k{n!đąšTņŽæYžœam€U1`ÅF\ƒ|&Š82t3ã…¸&æd3‹ŦÁLú ŗØĐtĶ"…S0 Û…Fû™“7šäwPˆyė’KĒz4Č,‚ãļu KíöŧęL3S2Č(ēa‰6!™íAû¨Û PĸšÖíšcš‘Ú†/‡‚ȤEë¯ķ“dģ;Ũv#¯ķD’Šy6S'a•xH2fđĀŧ-’îh>Ē|XŦzŪŤCNJ*¯‘˜TŸ ôÖļ¯ĘYšŽ‡ĸnĘ­âl&uˆ9 Ō7´‚GēYēû%!î¤ū¤ˇyĨIíœėÖ[iĻ~>\×îü’(eÉw’í1q÷*ŊĨûU€Ę^Z.ÎaÂ?ŊLx&K^@uŠ+ĮĻņ’?¸@ОQ6ÁĀjÕ´"7ĪsŸJG“ĩč‹ô†ôdúŠŲqUaŽÁÛN°Š‘xÎ,Ą">™æaĨÕjĻôʨi †pč–c)d´=bĒbké㐚Ld|I—Ņ=Éā\æĄ/—Ö‹YGl Û`Œč¨1īƒWĸ=Ė‚Ë>”°bũņŨŨę2č‚į e2ōh]`#g0%#…˜az=N'XģÕ~&ū‘bxˇ9-ËĐBŨ;× švøy4"ņ”ĨéŸŪōMĪD-đÜ Ÿ‘jj,zĨ%ŸîÍõGp­{]JīWO?Â]ėŽCåhĢ=Iķ`ŅBHú›K=’Ŧ‚iÛ{Éđ&ÚA{đ›a›=ąš­äÔ:4##™ÃĖYāYƒžLâ>Ŗ-NW„r[" ×'.]&З,ķ˙zÅYŸ ÔŪWō9ō^-ŋÚĨ|ŠUŽ ÔmĨO6Özƒ–+X?SžīF÷āPŗŊsˉö3ÛĻOt /ŊŽ^Ŧ‰“%fp@Ĩ(Zl˛į0FĄäG=o9ŅA‹¯ ömčԉVŌ€UŖÉÆėøųSš˙f‚eŦdåīß~ĩÔ-9‰ė*ēZˇÕ=‰QÉˆ÷|åd)K&ŗENĒŲôHPģX×tÉĘ7ĖpPEhjV:à›he ˆĶT‘ßĪ:Ų– ᔓL13­,ãĘĩI|¯/ķgdöė!pJOÔŊR!ZāģIA-đK\ļ×Mđü­¨I‘ŖjBH ĪŽ{âû†| Ÿd3šúMh ;"Đî=˜ˇęÁå=‘f |O€&&ĸŌIo >¸…bb%ōae•JÎb6 UUåRÎ`Fw˛rn>)( ĸíîÂ/‚†G¯žâáZRbHŊ´*(­uIÅrrYZ‰Ū9K–(h’gđ§5FŸFwāSj"&PŒfÄÆ|9OĸōÖnęę…Ë^aˇ[-55 ˛/É'ZE{|<ŲŗÆ— c[%fCėÛņé4ęvå1â îqž(”•ā2 ÖÅ}ögā„/éĪ&śÖ˛ÜŋÂûfYßtīŖTøŲP Š2ITĩoĐWûËÃ=Azī|Qė“ˆtjNÔ1Ļëū‚Ü´ 3LfN0ĸ*;9Õû)‡¨ē° ž$„öŨíhÚÉ[˜7=īHÍŠ’\Ũ˙’ãOėˇÛë]ÅÆ8Ëį2ŲLž˜Ī3ŸÁŦÃĨöclīڄV'QÔxHmĮ€đOžŒW¤Ūmąa2K"û=žŊ~Ņ īˇEjĪaĘtõįé&43‘SũlüĸC(Å&TÔ} Ξ똤ž °-''ň/1/Ú€ë ØlųTŗVĢ]Ũ§N3ŪT(Jąk‹•‘ģņNFÃl)‚^CȨjo‘ ?˝Øŋ4ÕÅë•FCĒĄHyY:Û\.´W> į*Øgīˆ|\™—ņÛ CŌę;^°‘…eÁŒßãwŋ(^2‚O å?cæß ģōL2ÃÃ'môEŲ–9ŒoŌË8ĸbGųŠŅq ˇbĸŖŦÕĮÆL—S˜ÂÖņp#ŒɰŖŗln0Û^¤–É!lŅÃDUčēp 䧋ÚoWkUW ÜÍÁŖē_ŒSąģų! sxŖ1¨xT…é<ޞqĄŅĘße!:\žk „ˆ]›éƒoŠLċ.W•cė*‡€L*l{ēzĖp˙ū°Čĩ/^(į4SgW˕=(ŽĄņëËŠ x“2ĘlŲĸb-! ø[Vw8‚F9ˇÆáuB—ÖĄLHō-×å™}ŗ˜ Ģ;­dFŽ܂/õaüTQʖŠķĐŅ.Eī‰ÖˇGzŠų čmØúŅvSq4c „<7ģ=Y9Ší(>—Œ/ÃįąØWx¨˛—x(˜PŅŋÆēoEG&)ĐŽ­1áôũ0ŒŊ^xĀ\ʰļYū]Ÿ4Ę؃fÅ6ÁÄ~•Đl;!UđŽĮte÷ã‹ÜŠ—3B/íz1žz°Ž‹€RژŽlâtbÃO—ęį´'ÜĶC5ā'ŸuÍĩN?ŲP'WåŨ­´7y˜Ļ—ų3(É­ņø=¤bÛP°ÅNĘ<čd?Ũ0›i´Æ=&éá!ĢõšÄkDŌ…ípđ]–Ē‚°[•ˆVl 2Ļ4oá´ SÆ‹&G‘Im˜cčŽāŒéFÛ>đŠDr$2Ž=ŲÜ’šéƒmīz L18ĖŽųâ‰`FFv0ūģ*ŲĘĢ>ēą'ˆL˜ŋ  `5č8—I n¨ƒĮ~ČÃhįäŦ~g”D ģ•Qq7kÎåa?ģļš%ũf§û)ĸúÎ<Ž ?•‹–eĀ›Žž[÷=›¨8"ũ'ĖQD¸đ߁L™ SĀKģĩ˚Ũw“Ėká}:Qũ˙ŲŖ;“×h´ŒtĨĩs™ †ĀCoō†ƒîäĻĢFŅųĶVų¯:HPMļŖ9Ož^N€ęĪĻĄ–ÕŊWĶĀĢ ŪŠšĖēŅkS’ã;3™@ŊEíÆT‘)%kœ ltU…a“ŋūĻ-Ėq…ŧg”SmoZco6Ã|TŽŒė)Zö&ĢĩÔŲCĻ܋LŲ[ÉËĪč›iPīeŠŊļnũ}.Õ?ĸķF{ZĀW=1:+Ņ!&å¤~ ŠÛy6YuįØ(&āŊ~”ydYāoôÍācwš¯ŽU?Xq‡?uĨ^wŖF Ú\f´ĩTücB?ąQĢu?#´wЅĖ$hÂîũjĪĀęᅴŽ2ŖĐņŗ˜{{rW\õG”KšJĮSĨ.ėÜ}ŖūŲLüĪ™M)ŗęæü †ōN›Aų$Zr÷ŠûސZ ĨžĖ@´MđønUũģīAXŋy2ŦiČŦŸĨīF{ę?3ņRÛZTƒŠßjÆUu(P÷>|=šž•Z;!ЇœŽQķ8ŠWpôŒ˙NĨÁĄ~V9{ æīđɓÎbʗļĢÔŖvš˜ÁԎûW Ņ_.FÁō‘÷Aī“:m:´Šˍp­Žžą:ĪĖbŌũíhVôYė§aivú1ŊFOŽō ŖÍđ Ėk⨘$F÷D/‹wōē<ä÷ˆĩ>3æ^Á˞dŊgĶŋÃZ­{4l›|)KXj.ą(G°Xč“ôŸō*č7ɐ>°ĀĒø%ÃéŸĻ(ú˛úžŗņđ´ųgƨé~Œ gzՐĻzÍ Ëęú3ä}rŠĶŲIˇ?U KcĖF^ægąÚ@|42:ā'e¯mEĪøWlŨwÆ?ĶGÔĪ€îíÕģQÉu6Ķ—&õöķIf“UAPŗmŊĩĮ9Ēév?^c3$Ū zũAšŦgâí&Ė‘%ę'} öŌ”õX€`ō‚÷ôV’4J*";ÔŦŊ§õ4Ze=駖~y$ú8ąˇŽ Š@]‹z&û4AĖĖ–yd3&nOú<#1ũVi) “Ú…ĸæž8t$‚‘ôį°R#RËr;ŨĮĄ&ĒkafĸTS!ãS÷ önp ›ræ! ã1eŸ×ŒJėđļbYķŊ.ۖs$áĪb5Fâī܂Áå­Ô&%.iûī™ąÄe’sę~€č!3" Ič^@ņ|8°@tÔnääęîĨī‘~´(Ÿ§ ĢŽHã(™%j›o­Ŋí™ ųÖtŽÎ)į=ŒLŠŠĩjãŲ@DuėD€‡DÄc|ĩš¸ū9„L͐ŋ>ŧéU)‹V#ũb‹UĮÚŲ<™¸¤tũÆšĖ!ķG/›â;LTŒ °úßÔŧYdą•ÚĸĻž}\2PK˛ŽÎ^ō¸„> ˛ŋ÷íŽĒÚūÂäøģívm4 ÎbކžJ‡ąJįZ?KSQ#5‡"B”1ÕunõÃåf–ēëzŌĮҧW^g“izĩ¯šI\— L†× ɍ‰€mvŋÃM–Ĩ[fIÁĪ3E Įüc"Œ!ŗ}A&ú:Ö홡ˇZEÚ!ZtēŅˇÛœ´ˇ­h˙ʖdiĐ0’„)fîMķķŊƒšÂ‚Pbr\„” ŅUĪk‚ĘFW90yâĀ<Ž~%ëoę}Í~Ams,9ģ3ØÄŠ+Š0]N4ÅÃ+ŽööįĶæO!æœ@D+"Ꞥ𰀂%ë‹?īSŖųƒęoú[c^Ąíōúŗ­î&aí庘(ŸEO×öNƒĸ´šÍ“F+¤ԑĘzŨh0ßâečīŋėĀS6°ĩLB8SÚi÷ĩĩFÛÚjÕ1÷ūu쿝ĨŗėRũkĐ{:ÂĻ%Ęą¸i—´Í ÁļũãžŅ‡b~ÅaŊ¯Ü~â‹ûĢŠŒ†î-ūc>ėw>>žûÚdŠsˇ^:S÷zÖ_´Ûo%J=_g“ŧ)ļ€fįO[būė|7zh|ū246'îLŖŅā{ORkm+wŪÔZ=SÎ:&Ŧō›ÅJÅâoÃėeZn´$|&¸5dĖ­sĘhCŗįčÚ[Ķ˯ Ŧœ7ųœjۍvņ#Ėū'ĢŠC{ƒoˆņé1 ¯€n?kĻboZÕųžĀĸc(Á†pĶ•‹oÍÜ{%2û|ąAP]—[ÉG˜ ‹9đēümOÁÔ7‚ä.-aš”RJĮe#ŽeEéŠ­-•ģššJm;Ô¯Y55đ”Ķ>ēŧG~¤Ãt•ėëėĨæ&ž1{Eõ‚˜ŪÛoˇVŧ^e]iQ˛híú;žļĄëlԗ˙Nîlֈö@UĶēõFå„˛ODNõ{ûŊ×X+皚›2 íöK‹Ž-˛āģfč‘čmzxŲ kÛķkF‘ũ”ÍyfÛN;möŧn/ĩÛíĨ‚žėvļQŨ˛^'VœšzĨŲči-ø)¨ŦúddE >SŅ-mˇ˛OslæNŨ!ē^ē˙-Ë ËŌķÁķkųšLcA]Ø;dĩ–įß6á?4UI‡ØõTŲáoŽj˜B"ķŠOAÎfbŋ[Kķī˛ÄŊ“Ž•w_QtŠų``†I]3˙8ãŽ*ÜzÖø"JÆFÅ_[‹´n˜aĒ>ËgaæĻŖ”~ö4Š…ŌŖrģu^uXm˜fŌŸ†œÍĖD§o4ą'ĩĨywĢĀŠrîƜJHđÁz–:v‘”Wn/oī€YåülĖY6žŽ(¤¨Ü.”ģ s˜l&.†B~R‘Ÿe3¤™Ī[÷Yuâä IDATŗ$ŋ?æšyŌîĸ&jų–‰ę˜,ŅĸyŌ]ƘŅE`ĸ÷^pģixų¤íŸIÛį/uå]ŸĨtŸÆĖ÷ĐšKĐ˙ĢĖ˙Ęã/Ėŋ0/č!ƒ:ŗ?đüNųc˜…Œģ°a#;õ6ž¸ŽíGJ|â΋ũŨ|(˙aŋķôļzāQ>bøb‹)?OR|ĄL–qŖGŒ°ērĻ–DîV⯉žË–G˙Į~ūo˛Ø.” Ļŋû¯~øí­VŨ™-ųŌ—’˙ĨČÛ˙ū7§yÛ˙îŋîßŪų5đūų×˙}âkōyöŒ‡ŠĒ"Ŧ;ôčDÃ!)—ų^näĐm‘ŋûß|Øü°ŧl؈íß%3đ?šP‚?ąœ§@įaF­åtâų[ˇšĖŠ–Ü`Émáī2…~~åĮGeĶŋ:˙öŸ~I¯šųˇ>ųÆĩæ Žģ^ļ˛˙W¯<8’›¸3ˇôË7˙vüWüpēŽuƒm¨õã#zŗz HķŨũ1íÉZi´Ā/ŧúČEˇ­íĶe~J8~䓉Ī͜ ´?aÃŲgf~öĮ_˜˙0…BđLc‚āõ€n­8įōŲ™Rcé j˛†ēsÎfKĩüs0Eb¨Ģ\@”âo=GÅôôĶ™ĖÖŗUFösŧNĶ#¤ų‡ųŖ‹ŸĘÔX^ƒv„V]U:Ņ^×Üá4/lŦũLL˜ ë;į03ų-͟Š2Θf{Zž[6ÎC"ø}Ëė' |$ũ<‡™üČž@ųŒa’ŧÍ9L@Üq9™Ãä ĖgvvÎeęVûŽs˜”WŒmö —„´ l[s~c|ĒCœį2cSčaÆ^Ú([€Ģ—ą‰ĩ’,|Ž˙͊H¯Å¸Ú3>Ėe˛]lSÃ[ JŌƒlõ4}ßWk}áãp3“ĄŒøNoĀ L Ā\fî,ėvĮ+ŽPš*ā ¯Ļŋ¨ĸ?U[†}ųļ@gŧ“‘§ÖwŸË´aļUđ?šmÔ ą ´˛ÛâØ§_J 7f=lĖæûu—<ÃDÎņ=IøiÚāC~ü(dY^/)\Hj*:‹VC3ŪpõÄvũjƒ ­ú įe2/Y˜I°AzĒ]ƖöņĘMVģģĒnPwMu]k~āĀ įŒ9ŧ$$ÎeæŖj腍ŊTMwSžĪ֘s,RxÕj@éVËš‚ģ˙!Ÿ?āŨę\ h›g’~u“îžąĀÔ ŨˇsØDN ÛõeÖÂfփI´ęÆkũU4B†0¯Ã{X3ŪÉÃŋĖa*×ŋgԊÂĀCâ`:i“ÂđÃö|Ūķ&jižšÖ,ˇĄÚíFŊwĸ(‚,Íaž.]ÅöŅĒzĐ_P Ecs`‚m˛cGĮō˜ĻMíÍĶĄS~nWÁ6Œ¯j“Rŧ^5ilНOS_­=šO.Ø\¸^?o¸›ĸ#S –đŽM øE&ŽĮėƒlGÍq)LåĖˆšlq*4ŠIčŠNŽœ¨ų=Ī0ÃȄÍē?5’‘ /†a@ސ:cŪ$[:ß×2ú ŧ†„~T ´âmeéŪ(ĄÔņäŠę°ÕõĪ0ûAÕų:ZŸVT›ÁL›`R …G ™ãėõîfŒą}é6(ãdĀŊɅUŽ[ÜāԌč3>›™!ü“¤fÜsJ´‚€ ØĮa8„W3ƒFˆėK–ęäZ$~2F×o#,2ˆ×tjl ÆŅņf™ŽžÆ';%WžŠŌūD-°“&ĸ؋åEMfcƒ*š3.†?„p‘Épk-ĩ‡{šŸN˛@ŋ(=ÃAfØË;Ē'ÔöN# QFĄÎ8˙3WvH—Žĩ ÃK3æw&‰8ũégØŲt]ŨVIŦņEĐlėxDŨɘƒá —¨ŗÎ$)a'`=čĪK÷tUÄ &%‡ĄXí„QQrâmŠ”(Qķ^ņGT~C‹‡ŋŽÃ6Õ69ĸMčNgbbRĪÚĻ.ŠĶĸU nHœŌĒ‚,˛¤tŨ&vYVžUnŨŗ1ŦōIh܋sË-¯Ŗ%fLČHâöO3u :ŌIļ•VīæōMŧëgĘœÕëĨčYFŲJbĖ‘.{I”Ķdc˛:ŠßgĄ´ļp…+ ™žif–ĀWAëæš=/O+BÛŌ¨ŨĩDm*ˇË@Ø6šVp”îáå{PfĮ#‡\0–†­RYŦŽI(E Ķ™Iį43 ôfÃÃŌÅ+‹âãTKe o YÁ;×ÅR ‘xîšÔDčtÉ]Wō%šeUMz3™SČ~ļ”`Ë,f.ĀâŖ”*+˙!KÃOÖĩ.}ŗ72ņeQ¤Ŗ­;“Āä`ƒˆō2ËYeˇÛal8&¨í~1}<2ÅĖ`ėĮŗ ú[ßĐWüīXŦ:iŪca˜ļ M6ŌĨđõbŧlWւvķäæË/YĻMö…Ā‚ĄˇžqM11 dZ­Žũąåža°…Ī™=p˛ÖâĩĘĻ ´*ídtC—“°ĻžPŧ…gÚŨļĶėŠāĪ;¨E?‡ŠĀ€ŪɂžÃĨ M§b>Ųn,œb#QulÜgTÜŨ!Ē>čô`gBŲRŧā.w/íéÎąE™Éiφ:6Š{(Úß]W}a0ČÚ6?$”U=ķrM,öCŌīŌ>8"Čå_᠖ėtģŽg/k?˜Ôf—“ č.ļFõW‹/QîÆo)l˛Äž úĢ„`¨9f|ƒ@ÄŌ§[g_ØÅIAhMrÖIZ×ĢeXŗM1ãøĄ]}Čyj]Ņ]k—ĀôąøVĐGyl˙Õ, h˛ŽŋŦÜũh÷JsւĖi)aAîO\ŒaÛVōL^Ũ]áÂdžjģŽŗŠƒĻyFIąQ冎  Šæ ĶBAHZíå4|mËY™ „Čąƒ˜5ķ{Ė“¨Ûō2‹I÷ƒ—ãˇÖZĒAĩĒO­g- Oģ:`tËb-5\*k-А ģŌY…Đ}m–c›Đ‹1›‘Īz];ˆl*/vĮŧQŠ,*šŋļ¨čZŅØ’¤ū,HŅÃU ‚W¨ÚĪ›T)‰M"fyS<>QŋΊÁÄĻi&Jæ\ÃLõ‹ĖNMļ.ÔĻyÆē\įvuœˇÂ¨šQ,ũ4ÔDŦ[D˛ø=\ãž LĪTŨĶčb—¤Áö}Æŧ÷īœXšÂ ?Ú´vąHÃũ,fĮŽH1“PH‹G¨?Č֌A\įÛÚáĒŊ=hōũSv^Ձ–ø€˙%ģvøņÖjĶk”ÖUSs_Ŧĩ7΃ϝđ&šž­g Ų`ĨĮfër\…Ą¨~ĻwÚw ķģJއ<Į™<¤ØSsWÕúcĶ6HŠ1öƒ|ļĸb:øg#†Ķ9ŨŖHā˙déę2Pē¤)ĻŪđ¨ĸÃsė6?4j]ĖT[žļõLããh°NąCžļKĒ}”sĸm`1\ÎîĶQz…?o)Ū†Ž><]N/īÕeá¨ÁŒĮŒYâƒ,P‡”ÕĒvÕĄKĻ[Ųņa@GQÃ&Qúˆ™ÅpÛ`đĮÔFĩš7’•qß N1%^¯¸ŽNLå~#‚N™ŅíFKIv‘ģ9ŖuŧCĸŅsaЎt)f1GĢžã7Ō¤­Ęũ|FŽÔNËŧäJN<Û ŽMëKŒžĨ—–į ÁNJŌAĸö Xđ#YĨ™ØfûRLYUß Í­é{ĒĒ[ ÃFs LåČŊ™…,GҊŅXHĩA.?´uÅŠŌ`œIH/ęûˆŋŠkŠÕãŪoĘlƒ,ĖÄ ´ÜW™;@tĶ™*´˙ëØą $žĄųÅaē…×3ųą”œhNJFΌŽĨƒĻ‡FGÆ1)˙ĶwCíqHÁĄ)=ØmvXā˛fæŽf9Ļ,,d3Ÿû]„Ų– Ūøøū.ŧbÂÖGyĨ[nÔŠ¸/|]O;?写sˇŽķ“.†ƒ÷ƒ›ÄˇĄ&yÛô¨ŋ‰ĶrŲ먒YĸcŪ 1Ŧ}#2Ž@TĮ\™w„&KÚ÷cŋĨmšŠę>i;†>Éú ˜éĮ6=ŨĀ‹4i1˜ļF}És2Į帊°\P…Ŋ¯ęÕPëčÁ ŧ.u i¯!`?ŗdķĻlSj_xã˙Žu>Ũ=ZĄÆaéÜ^‚žAŽŖ^Ŋ„Ÿ°Æų?ßT"*hXõ„ÖچFJИaú˙ԍÁ3íîŖ[ũ ß8âŪ˜Icŋ^ŊQNA,ŊŠ­Š|˙š¤/a,Žą +ސTėE4Q|fš™é ûŊ& ¯ģ%ޟ >§å™ŽūPĩë4(ļD™m‰.à „2-&3¤6ŨŠ„ŸīŪæ‚“Dš)'ŊÚQQ‚ŠGÚ[ļáWŋgá_8Q(įî×ū8 QåŨllKYČ%ØÆ@ÃÁƒō&tŽGBŪĒ~cēb:‡åŖĢ[C ÅƒRRe‡d4aĖúÉ3ˇ§a}͆Ĩ–!ĮWn `Sc'ąa°Ę÷7člwV$FF_M^qĒ0˙_Čĩ­¯ õ€–åŧŽėuø÷B]¤' ãEޟh¯\˙2oō>áb‡ÅņųÅ&§Ö™É[mЕäF‡3Ļv2‡Šföf V‰ĨĻu˙ĿΔaКg>uŠ%sO•Öŋ7Ũ‰ĘhėJfĻ85nį1ÕQƒžMLÖ<é¯åæ0!7ŦåĄ]ŽuĢf:ūD(bžy×56åĐ Õņđ`uF>–_‰.Cŋ­U@#…:ŸĻ‘ÄĒ!0­ÎÍaRĻĩžMv‹ė<Γ‰7Ēȸ+ĪŧáÕSēT~­ŠábįiãxbT~]'…1…K\ ;“÷ŠnŪ“wVĶs=É 6ü˛ĖNMzÎÜÂŲFŒąbČA$Ax×vęāéēQ4ėœÖųj…ėŋ¸lŪŅĀ/öĪf˛>N›&Ņ<ŗÔö‹tŗØ˙o|k:jÃX8Ō§5Éš„]ĘĻįĐi)Į÷›:âōāUŒiNã'ues˜ÆÉČ\Æ0˛įpúöäuķčË2„JgĔI4œ1Š!šēŊĶüŖr—húĨmd˛‰)eŊ'<›YÉ&CBq4Ĩ嘰y™ĸČsÁŽĀōqú4ÆŲĖē`ļ"x€]-yˇŠOcĢŽéa6И,0ąą`•''¯×W€ŧ5dķ*ãĨܡ^Îî÷ņ4ĸit’˙@'ÆäŲņŅ­gŖjĸ÷ˇņƒ.ŠÍsÎĀT%›ns÷Ä 0C×õxĪI3uŗö8LžJiĢi va~në8ËEX"¯zÔmh’kwsgĒsŧ181Ģî¯q:å~÷~B÷ߟŸ:õ°¯ŊLÛĮ¤Ķ~ÖJæĄ0Čc&ÉÎBĄŪ &8rė><ęØÃŅcž–™ô 9ž–Ũ¯’ŊãnÉk{dW|J†vŦk˜!ˆŨÊst‡Û’|C“bĪ,ëT]#ĮöQ÷7fė'‹īCã´įUōJ?•؁-Š‚Øķ`äĐķ,× Å)Ú:Œe˜ Á4Ûf7…Cj,v¤]§ž ĨŒO÷´N3%TÔ?)§ÕS$j†ÅlB#dg…Å~WÅەä§GQ‡ļČÆb ĆZ¨YīéxÂÁ‹žÉĻ×ėübõ SaįęzGúJ˙f8[˜¨Æ˙㤑Ģ8ɘôøŸ6Đ*; ÉUø\{ŒšŲe&ōņÉwuĶĖy, NBĻSū”EWķc?wogB”­Ī@Ĩ#ĖĻ9d}9y}ZECļ+āšũdģîYfĨRŗöž‚B{Æ!q9ĄÕ†Ęõ4&ŽÖ•‹Đ0[]P)¨ ô3Ķtßĩ/Τd|Ų`ƒe€ÖŖ€IJ§—˜a>AĶ0ÄĻ¡&áô#WŦ,*ZyšąōuJ˜Åú™˜™‹ĖįŲ8eqŗļŗPŸ@ģ­{0%™5‡bĀØá—á$küFJ//ērĪŊ‹ŋ1f" ąwĸŸbø•ž_‘ŅmąõāĪ0MŌPîŸöčŊŠEdcāg1‹pŋŦ>‰Åy›Fųæ. ×´WågĒ#0Ö~­Åu(4аõ ,â7ąŽũŽšŽˇÄØF<&03ú.ߍ3:ë´ŊXŖ¯˜ÃÆâųŌ žfaׄ V÷xšƒrh$C_‚ü:FVPHČöĪOĩ¤6Ŗī8ÎVÕä|™É/˛ŧÛt÷õÆiÂaõŽ%/´ß‘Qm(g66Å J9~ÅkR’9z—4sžĒ@†ú1UĄë3čOÁÛy‘8ŲôĪ?0 Ŗķ'ÂęR–Hs ā7"}×íā AœÅ#jIđ’¤Đdë)§WĶŲæÆm;ĀÕ ŋ6Õ~ßü{YåŠåyIŋ˙-XĮëŒÛŪN˛|eøžĶÔØģc^9>ë\â¤Ļ„oPąWwąķ$đĶÜúg֔•į+ˇč?ŋ$]K(Ã~q‹ųĩ+ؐZz3ēL=æs“ĻÅYJo†ŋĸ@‡—õ°ÖBŖræ†ĻwĢ˙\KŋIז9Ņ•(Ėw„Qĸh†—Āŗm–@™C:ŊĖ‘ųlXHąŅ%zāH’-˛~Ízëļ’b\1Ŋk)‹ŲĸØnāҤ.°QāīsŲĮ]T!˜Å(ߊmšIyī“L1Tĸ~7Iƒ^*Ŧå`Ŗ{Í]ĩŦw˛šė,îĻ/€˜ŪĢ é˜1ŊŠYš  ÛmühoāCąŨ ’åÆqŧؓAŲ9Ɔ¯Ŧkž–Ûr$dX(V‰BH÷Ë礔ĸÍô¸Å<U;ÉĶhœN_°ut9›¯ #ŗœY\A(Ō; â­[&á}ȏoĄŧžß ļXšãā[@UĪž`ėÄį芍ĶL–1īU‹ˆz[kœ‰Ā?yÅ<˜ŌĐD[ OËabžŊ ˙d8 lK˙ĄJ‚RĄ3OUhO€;&°ëü6H1Ä .04ŧ†/Cí Âũ÷ķYLe'ˇË.Ō’aŋŧÁ"˛]ö `ÅŽžbjMwŠ$‰}ĆķÔ,ëd1{įŦ;xŸō¸áÚ0Ԃ-ZI"z2iÄņŌSåЉfWeŠ;e?›é&ÚnSBĀÎCƒĖ”¤ąų@fásPųPėĄŧJj6č×čRâoAĻĻĸö|-ea7==ĶīzÔRĄ7ŒĐC O3•jcí+ĩÅ6îšŋ076KUxŪˇLŽ .IBššÖå÷ŊŊ`†™æŠŗ'Ŧęˇ=Áœ”ÆÁŦå„îžÂd¸RyĢú4ˆ{@!r’ ÅEøã&’Of˜MZ2ļv]/Øv˛ĻÔ§ĩĖHY0Š—žžúŽPŒ­4I:ÛęjØpB›-i‹üŋB_ģ3c~<ÄÕbŠüyÛĻĸ•é™)$kVų4˜™5d‡fīEŗŠ“ÍbpcŒ~Wā`]\uīÔ.ø|ūÎĶāūx´čFæBfÖĮKF˛á13‹ŦKŲXÍ;úõđ¨šĢjvõ@ÛՐkXÛ,\ŗxĒz3†ęãĩđUĖķ÷Åe6]!ä'’=*1$I)Œŧķ=ë™q¨ üNŒæ›RaúSĩа~öīÎäõȈv` Bōԇ9WÜXÔĒŦķ”ļŪģq uŋéō"ŗn0Ķ}ôĮ¨#ę,Ú,&›""Ladö{*ėqĘâ4cû[ސÛeŊ:šE÷˙NŅŧ Ô`nCÍŨjåÎËtÖ õÉS§ū1hŦŠ)l)Åįbw­^?‰i҈ķĨĸK˜Z¸īcvëĀöËa† ĐāŊãĩĢLԂ|bļ_­íaC‰Šĩļi=釃Oj3V÷Œ–žÛžl¸”9á.Ŗtaē/ûŗs˜aāDÁ†LĪ6ŊĐGBģÛ-´3=žëˇĘđŦEŋķ&—n>{įÆÔM$ŠfĀ– 6°E7s˜“¨} ;8U`PŨƞčc˛xąĢ…­@/3cNČÂŖÕãĪîK-?öúŊl`DfQö[Îa2g1h1<Œ*ÄūŠŽ´ŗą)ũv+ëdŋe‚Õd’ÍT–ę9Ģ“Vl öãTŽĀ†—ā&ĶZ›]ížä8Z ëĘĸĨÄøCv˙ƒ u>Ã⡧īŊĄn`“`NYĸ .mØqn9Ų´,ס'_`Æ.aeaŠaÕę|-ļ‚kÍhˇT'[õVŋŽ+ƒ´Gds :6ËDWã”ŦzY†Bn¯Øņ–ųåŊĒņŗ=Gîĩ^I0fք}…;#ų` bhRĸ ĐsÎYĢÉ’MË`¤ŪánžŗpvŅŽ•FÍŖøōđÂ§ĘØ<‚*^ʎœ€’×ÅĢãY2õ##ĶL‰Ĩ*ŠĻ]82füŽŗđMĨ=MTĀvũR4O~HzōãĐcŲž›—Áâ7WM˛?æÆ ØÁņ$ NdÅš=0ĸRŅubžŠU’°qП‚p‡ą)&V!ĀIô›0ļjā#ŋ{EE!đFí8HļĘ܁`ĩ nĢĩē‰m!,’!fīdϘčėĀą–ČŦ†Û2žiģ83¨ˆÆp šĄ–kʉʜȎR!d7][kĪ™ÉÔō[ä×CÚĆQO‹S“8ŗ˜IcĮ„ŦŅ€\ílQŗnë<+{°Ĩît(ÄCđöd~ŋ×Ģ+fqÉ Á˛0“ŊØ–€úU;ë"ĩ<_‡BCV†-|ÃĻĘģ­đļÁŚr3ŋB5՞ŦuĐ&Đ!,ühˇMí1eb†&4qÅ!6ƒgLĩā|Ōŧ;IFąÔŠãßh?‡Š‡)HJ/ē@ī/ŦÖ5ŗŧuģ]šˇĐe ĩMŊįižzĨoŲn¨ ™Ų$;3–n<ēĩ ;€¨hžuj ,ąĻpd¤•âĘŠëČ´īk1œû˜Ë¤‚‡UŸĩķX˙xÚWMû¤mÖuüÔë™ß;ß6ÄšĖYŅdģĩ—-fĢ‚™÷˜V8ī1AŸĀœõPėMvĘd+g`ū¸;>9ëA/ė˛ĪÄü,ŋ0˙Âŧš8ĖŋļĖŧÎ-ˇ|ÜeŸ‰Y<ŗâĶ‘ÂŧėpđĢđ…oŅ…īŧŋ8Ėߓ/\Nŋũo/æžķâŋˇ\æc`š9—ûŖF›āžķéČOeūŋtŋđÛôūí1ú/\öíŋ?ôŠMúiĖÛ —ũôú~ōGڞœ;3÷Éæũs1/ôņÖ˙Á}ķģEÁbIENDŽB`‚leptonica-1.86.0/prog/dreyfus4.png000066400000000000000000000537751506303110300170170ustar00rootroot00000000000000‰PNG  IHDRIŅ•|0PLTE???ŋŋŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙×Įz IDATxœí} –¤:’,, @ŸB Iû_Ķ3s ‚ČOuÕ­ėžygš™Ž[•†Kr7˙ČÕä˙ŽŊųŸFđ;×QūÜõå~ĮŋxÄßŖ|Î?€ã××?F™Ęŧ;n?õéíŗ˙\æ˙ %žÕ,ũŅåũą„}nōŪ7Kj:üĻëö>ˇ9ļCØ]”ß ŋ°ˇÃeîsoö9ņ/ųŲ§„ũ’ķŅg@›ų‰ŧôyȋ{ōīühú@yė=õšŲŗ]’k†ÜÍŅĖûŪģœ[`%J ėeÛ˙ Œš”힇ŊMĖĀØûyĪPBÄŨ#wfŸO”ũ%ú"ĸœ%72⃌øvĩģ=÷íŪ_#ūAūSY6ĀĖŪīķî°4 Ëž“,ģãÄ_P6X=Š;ÜcøÆe4y P-šČé“ V÷6ēūáÃąŲ~aĸü˙åøú/ƟģūOĸLžĢȸŊéŖL&lۆ˙ũ4—û)”‚ĢåÉáuâ_ˇŸât?‰ė Ą.EĒüĶūĖÍ e¨Ĩ.å'–˙÷Ą|ļå¯[ũųņOÍĪB ÛŨ¸ō×T˙› ÍãÜũĮPæįŖü-9WLųÜũ§PšØœ~Ī…2›āäæ?†2,—ŌY^ōS1ūČŨ Ĩ}ą˛åvķų‡„ųC(EI–k}ũ4Đ˙ČõSķōõ×ā<Ü˙ņ×Ī ŧ´O~7‹Įü36ōgP^s1mŲŨņø‰ģ˙J øf\˘ÚqÄ_dН˙4Rļûŋ~hÄA+mŊīęä!Āi?>ė÷/¸r÷šō3(ãQ^ņ-°áūÕ$yš{œ?ŌęSøož‡2YũŖ;eēM–@I šyÎĘÍp¨MŖĘHŪ>˙ HųĶžÆü'P†øš•…ŲtNĖøOd)÷ /Bđ(Ŗ{M>ë;ū'éPVÍ˙lųglė¯ūȈËārf*?ō,˜˙hųˆ?ōúæOŦč!‹?pë̓awø ú i˙J`|}ķg4Æ6Ā2ލNbę‰ģŽũo^I)Y7§_^ĶOų)Û)S€Ķļaė÷­ĪąƒŽúļžÆíĐ]~ęF‰{D eÄ,ąG˙[K'šŠj 9ÚÅÕ‡û„ū9”1(Y•Pë>Ģ#$yāe|ž3čąÁÅŋČtqG_~ŧåû+ū`ƀppZōīA'̰äI?¨œaž^Fąą~hH¨Ō\éUØŪŪę÷Pūŗ1ŅQä\ŒŊ.™ŅAŦ¨ūâ+CĶtÂt…<!æĪOüĨ×îœÔÍÎūVŖ‹ī%3šœĪĒ(IŸxŋ8?åŽĻëgæ[˜õØ`rØKˆ¯EūeWfîRŲČĖ{ŗâ,HZÜŦ.M.?Te6hˇtēœ‹vq­–…͐B¸=ĢP=Į%Ũ8Ši}l:ŦˆĐÚ ē"”đâ—(ëtĀį—Û㜈ë5äąĶ…ˇJËe Ί¯M1o‘ĖŌh™‹- ŧŗG‡õĪų^n°\VV´ynÜãhÚauęĪ5`^ūĘCæ į°)ŸL‡”_ą”ŨƒęøÆ0ƒ‹_ĮpĐŅfņ&!č–w‡^ĮÄ{:“›ØBS¸Í”ų™Њ#bniŽËɋoW5íķĨ„~Á‰ k}BaČŖŖ@ņJĶ e‡BšcöšZŧ’ŽË‚Ō˙jiƒÍÜæ}ˆĪ¯Æ‡‘X’ûčCjø<§Úu^ķ×G”UܞĸĒĨ@ׅ—g ËKF#ŌŽ6­đAĮöH$˜A4ôŒŸdŨj“GÜ҇Ĩ„°9]yŅsņƒg›Gķ€5pŸ„ųåŠĨÅ8'm rĮK¯Č'FM!ĶŠ.ˆÆ3û蘎lŦÜdÎ&T¯ÃÛ.|o #$˛ĖÕŽŽucŗĪTL>Œķf]…w¸sđ?ĸ<5ލ­.ö˛„đøAoeļīRTuČĘ j€,!|ŦÎPüm=ÚÛág˛úôËîÉBŌQD |‡ĸa¤V9zU\æÍ‘ŋEyūđÃr.o4W%Μ°T-z“XĨĨß[č&™nøåLmy`öÄVžcö Ž’+¯KÂÜÜh<â°ĖDĄŠÖõIö[”uōjˇXÄŅ8AÁš/ø3@ˇŪ>)ÍĨŸ&v%‡ĄēHˆ¯ā-¸tˇÁđÍb^RHåŠyéŊI›KJÜ9Ņ)ņ4āë÷( ˜čĻYįÃG†.<4ũËcåM8Á‚}rIĒųų°ŊĸŪlŪmžâū\Wy˜ĄG™7ˇ˜¸!Ū`”gŲĖ2XĢ^÷åšŅģbĘ7ž˙ ĘB¤đ–)ŒõŖ§m‰į@” %”wŊßQnTôC~*Ž0ËZMFãļāęŊ[ĪT[Ŧë„)ŽōNŦˆ0 [ųį7(—|˙ĩŌe¤įĀw÷ķ ĨŒøDKX_˜Tĸ†Ô)ö+T”_úÔ*ŨfzíĨã¤8WÆ2ã"wŅēˆ—õâ!§są=/ãd)G•íĘĪšå‡b_DV ‘?†ŠŪ 4į\i"Ōōžĸd~s€wōECÄ8ÛXJÁƒ•SΧRÆ Āô’lą Õ˛}R4QeĩšTlO.3Wuk(-MąkØô#7:?ˇfÎ2Z.–ˇĒŖW3€_ĩ\ŪîĖŽ˜6ģŗ.ÆüŖ 5īøØ ú4eĄ_ŖAt‘–›Ū™øúÜ\qí›<ēįŌs‡W™¸Ļ˛Îô0Ę;=Š{øˇÛɓ| upļĻ› >KqL¤t‡ƒ DØLcN-÷%Ęŧ$ūÎɰ(féd‰|*䃊IŪ3Î$ąą %dįā<P×:&{ö!B˜ŒžŖ1ãáĀL°Z”ÅW}ę(KĄ™ĸ¯âÉö?s"q”ŠÔb1˜āyĸO”X°{Ķ9 ÍsĖ ‚ĮÖiiH0Ũ>Õ÷×xY. ŲƜ-l?˙ļ4˜‚†vÄŧŨG{LKNžŪ&kč”i&%ØåƒZyJ.ĩ/( åZ=x›MŽĘĪmÉnĐŨ - |×*ū+č ÖHpڌÚ1“–LŅ‚Éîā–ŪDĩem†™Ë)hqÍ0—aŪ^šâ3W_¨O"fØĻūĩ>Š%qFÛ2[(Æ]Ļ[€VŅâ˙ ×=Ķâ˜ÃÍÅ#ZÆÆNTÜlǔǎa+Ŗ1ˇæŦĸ.–/r­Û„—ūÎöā'­,48h 1é“+<Číš, ycĢe™ĀĢRĻ ņ ųĘCÉ_ Ž1/bôĀ$5äaY\2ĢKÆ´É*Ŧq+6Ĩ0ø)}Ŗ/9ØôIjü]örâĢ@TųĄs!6ÁQšV¨!Ȳ!ŖúmøXįYgf5‰Š%–'Œ˙|läJîČĶî0}­+_a nßĸôpáÖ@ˇĘ¨Čy&īģpđ™°Ķ˜Öām\3ƚĩSĸßC1O5ČāDžKŸĩîüGßACĸF¤NģĢĄ,ŧųahÄ]Õįåü_^äg”-V ”‚Æ6iP‹ŦēŪđĐöPŗärRXm4CĄ.đX&tĮđčöį[c8ÃĐŅRSS`Ģy´€K§Ųč„Oĩ‡‰‚œUA‡+Ú?MÆjęáƓM҉‡ŨlâŽZ1ĮŅŊ‡(žD nkĒõ hGã’EÍQ@+ŗŪ‹jļ ŗ\4Če7F+~ŒyJfĸ‡‡\F‚CŠĘá_ëbĂúbÆ0u}|‡3xoXmņŪcū ”1zt|ąč¨á—BhZRęĄæË§Ķđ¸ÃŸzÜî Į ˛Ō[‡j́âÁˆCcĻ's֘uūĮ鲀"GS¸~Q“\œß¸ŦĖØšž!§ˆŲUČMåY‚‡ųÉá_KHjM,ÉÁņŪ ´{b^1mąŧ–Ž>į˜ōk<ú€×…^¯Ė?Ŗą7¸ĩ膩SŗŨę>ĸŦ!ÅSzÉ=ˇ#ĩmęd,ÉËĻoĶļˆö†v¤ÖÃđrûûŠÛV~ú€ušō+Ȇˇ‡Î‰‡ĨæĒ•úĸβy€ūŽO’H€ų>×ÎpœÃRYM o+ļ%|Œ\^J(h=ļžNöœEÃĻ4c’ÁŽ><›G{uäPB|¯ØdãhŗÄ~—ú‰Ŗ¸#å˙ŋAš_÷ŨįŲáÖ¤;ˆ’¯=;ĖT8ęeUDÍMzΕĀ^ˇéa 3lĒÚēáņvg* û…ˇ:N†Å0žŗ‡~qœMˆų(O ÚE¸éÄâdą@üī¤Ö‘îĘR2ßæ‰Éⴈ ‰cŸm‹åįūØÆ{Ü|œvaM|“‘åįņä÷4h'&;ßJ­oįåŊĻ<Ēė(Š5ĖÚ JX‰Íö1XÆÂ-Ę`%.6ʂ4#kū[ŌŪßoāķTŧö–aÜ7ēXO=ÖĄ<]§*ËīWĪ[a Ė…JÆ{0]5Éj>°x Îh˜e… ēY#¸´r=&āŌúķ=†ŋÃõՁr {>Å"t°TVDD]–QĮp}‹ō=Mŧ7PÚāÂīKduú Ō'JŽFÜ ž@ ĸæMĮÂ@ĄZVķ‡ŒÁ1ī}í~ĩDÉYôŗR´•Å“*ĘÕ~?âķũŽLozƒį•ŧāÆūiĻËŧ–č(ūcũöNa^- Øėŗ‹ÃcŠąŽĘŪ,n3\J‚ ,ŽëPpŖéđ¸,Ä$eūe|Gõ1Q7°žĖØ=ÁÉ3˜~ ą%“ąyņ‡A=ĩĘ5aZ´!R]ˇŅ9f°% į­ 4ÁX0S_ÃFĘÍN”ƒÛž[ãëŊļ•ē\%&4>0ÍL–”ą•[B-1ęFģÂŦŊŌ2˛ė•hĮ<1¸uâ9âK¤Û}= Ę+å+āŋEųšÂ¯ã¤‘^ Ė3æįĘxÂʃAiPÕhŽĒģūŅs†ÚåŊæžãv˛ņ"X+‰ƒ#žE\QˇEåĪųT? |ķoGüŖ,ŖtCæbŪÁAÖaČ žéOßÁƒÛ_Ą”i‚ÃøTģ“ũ[&ŊæLā XâĄ% ;Fa@ Ü´…ŋlˇB!Œ ú‘eÉīĄŦ Ĩ-׸}‡Ų>‹áKvgqeLĐ/'J3Í8ŊûCeŨų&ÉlqēŖąõxp„ãn˜‡(žUœĪú?~î6˛ī(Cūx‰a;3ˆOãžd°Ų`>j/ąv,Sž¨Vš|ip ÉCüøl°”•a B`fX=) m†‘ĄC€LČQåiÉž“åg”°›?ęŽŊõŲ>ŨŠ…Tėi ezä#éyŨ +ōĘŊ†ē&ĶļîpŒũm;åŧ¤Ū‹¸Ņ”ĪEÁČ\oX ÁûŒ2ų°ģĶĩŧeĐcģNį_‡Ŧ°É5´šļs‚22âąc˜Ëg¯å ×?U7>Kč¯ÛĀ‹Dlą×rˇHYNEDœYūĀõK”̌5jcjæ†R­'Mƒ-´ŧĮÄęųâë‰Ræ'ņĖĸ†čû¤(šÎBķŨ^„•žŠ.1[§áŽæ4&qÉĨđxčø/5U#ļ ļĩĮkm&ĨĪĪ Ŧ(c!xVt"žj^()]•œÚNč&™“­g¯‡øÃq‚‚’ҝqp tņ5Ä7ųåK;ęĢ‹[ĖVį%ÃEėTPLũÕō…Dį ā13X"ÅDį Jy(Œŋn•đu&[žâ6Ā%gúŨȎO$ž›n`u×Xä‡ĢÉVdŽJ]_ ēH{}}ôđ<­_­Ü`I Ÿ0° øŨ–ö9Iâķ—~]Ų܈’#Īø­đCöÕŧ,(ËębûiŊ/3c tŌĶŊ"聚”RČĒJ:>[3‰õ$—Ũ´Ũ ô| „`"ʧŨ\ōDl[ēq{ŋ¨īQ–‹QĻŖߊ—$ܝĖ<ŋ×jŸMŗĒœįĀa‚ÁãT[/wgĖsÚīažrN͆õ‰Yš0M”n Û€’7ßo(ĒĖ_ L%æqs§X!IâBãT÷(ą˜kԉ{ ņ\NÖđÜ,]ˇÄ’õëœU 'âōĖD’2‚õ(;)snoúúøÚBúŧŒJIĨ'ÖįųÍ Ļ&a'ōpķJ4T˛ÆÆŧ ͟N>”ŠyˇõøU: ø,ŋũÉÍÄÕķ”čļ+ļŪĘÍęCūe}.”1Ã6œ_jĘ8ãÅöW)ŨŪIĮʈO[Ņ öĻüåŪųšĐ*Ģ˙ÁyŠÂfFÕ苉´´§ĸãŧ,aÖåārbx-Ÿƒ(?Į6âåâЇ>qe˜ãôØÄĨpU-ņöel5s鎸ũD”“T˛”°ĪœĀ)įÄáVIpuūb,ŧėÆWĖ-^*2x†É[0æM JP!ú¨ûhH€ī'Ū mĻv7šÅ5Â23wÎJ2 ‘%_m…­Ō]É~ÔR? ā”{-ø Dų1ĘsĩÖ &Ë=hVŽŨŅ( ĩĪ*Érû$Č]¨eA~Áá”stæŧ×Ėy YnABÔ@éƒ÷ÁR ū/EŌ€ž÷Úvqô_ĸô§‹’ōX"Ą˜øV÷`u/¯ö)úĸųĖĖĒω1_?*)S–ä3~fœë|Ú,ķRPnÆC–3FŪnTŠ c‹€0 źpž–ĪîžDš^ķ˛Ŧ%Mül÷8e}ĀÃį7éĶbåEeĶž/ˇ1ÅČôŒÜų°ŠŌnđ‡,ŗĻx #5>9ŽõU’†õ„VO$u×zn_ĸ|š{qī‘ƒß]ĒÖģÅđ5ĐsáđbmŸÍcģŧΐ˜˙(k˟ÛĨRŸ ÃUÚ6ŽæsĪLËØ3$Qnāîw°Éũ|…t _ŖŦŖÄyĻb+ŧŋŅLÆM?ę°âH-CØnûwŲí9wŪ—›]šY&A ‚b1c–õėGēŊšüh~Š â—(/iCqMYx4î6/|??Ī[Ģ Ëd釧ną/”)­^Låh^Zo|ĐpCĢr™ĨmÅŧLķ€ëđtxŋ™[Vē€ÄČ}{Ž(”Ę_ĄŒ/§TŠŽdēĮQw&émÃrxËj‚Ŋßo(7”xŗp+ÜÛá2`^R÷ĶĻŲĪˆîąĘČXjsLõá$Á%v@)Åđš‚,ždŠŖČķv‰#ŠdŅí3æ8éĶŊĄÜˆrcGƒ‹ũ7Û”˛”[ĨsJéÄZÆ“ĨŠ)ÔrŸÆ4FŌs,ԁ…œ?fņ? ”yų”@‚Č&ŽKÉ °LŪQå/a°ė%ÜP&&ā¯gĄ\Žđ†gåŠ ˆ¯^h͘58ĀV ĘR“:ŖĖŊŖŧô>Fœ AŸŦvčÅĶ+3τ܍ĩšŧT”‰Î*G\B_ĻúæąŽ ĻÔR§+"3 |ØRž™ aöēĸtBWŖAʀR1//”ë!!Q3V*‘īćΠ‹]ēØÚTSéÜÜî!KÖRw…ņõĖkØ˛?E|akwâ(Û KŒ–ĻŸtޏuĨN}ÄŗŪGõ ”Įá¤|`%ž@ÕNŽ ĖĩõZūžæ™šđ/(á!¤M•ÕĶ0ûi9/Í+Ÿ§uy°ž† Ds~Åļ›,ųFzėāŅziŌķ-ĘxˆĄeąm ' “­eAŠe)ī`´+JŒx(˛LMJÁJŲ’`O%ĪĘQ;¯ÖčÎ ĘÔËØûe_›ĐĖ|Á‚™°EõĮ’`Ļ2â–Q"€eoŲĩ_ëķéˆRĘ´@!Ŋ¸į´ZōhÁǍtÎō ‰•×*L ĻÍŖuž§;īøxŨ—ú:f†žFy0>€q…ŪĀ'´Œkâ.&0 u֟‰ q‚ā€r.,ĶeX =l뗐˜ã…r”rŖé ‰”YŸ,\8ÁãĄk3ō›´4fŌįũYIö•GQWĻg@ē Ė%k0 k…ŊԒG–ã€jXIPķžto=UĶ6gmÖAĶ…d:U|c¯É0lĪč=Ÿ3d8âÆ ô/ÁT­aĸë?HĖL”ų+”7×Ȗi[`.Ĩđ\ŗV9nr"Ŧ(,āŠŌ(XˆŦuƒĘē™Š=šsŽĶôtãŦ%š‰š…ƒŒ 4xëXĀÃ1ƒ ÎūĨ,K9Öų÷Â܂T,ēę˙‚rŸËļžû.zÖëDMu% Į\/&ä”û‘}xö_8Ņpö„gAy¸ēü,CZŠÉXĻžņZȒ[6S]ŽÃ8›c䋔›ö\ųR‰;—yšwō+°ßۊž€JkXvŦƒkẈ”_8ô—LšĻ ÄÚÄrã…E1qųŦø×[)8aÄÍf^ÛŪ¯mÚ9sĒ VŅOŽY°ÖéuUÉMm`š]đã`¨w< Ö,Ûæž[=Pá’āđDIáAŋJ˜Č×<Į#Ė[‰ģ'\Üëŗk§ÂŊy:,zŲ}>j‰ōŲך °œ˛+)ŸĻ§Ãŧ„ßûãŠÕŋĖcĩIŧoڏíę’"é(Swˊéđ€{ēŠōē6Ã\ņŌ7ÜĖå‹xAˈRrMķpŒ žĪĐΓˇbžød—†…4ŨŒ0í,išö‚ŧk"đΊŽ×na35VáddF'œ4^(š ú2-Ŋ oÃuîÃĒ(ĘvhēRV§Ā‰VRUĄĻ ŲÆh,ôdŠŋA)ŪW‡ģ´‘úĸŠÃzŲ(,P˛D¸,PJ4¯zū8î<ĄĩˆĪ˛wĢĸWYA–pxGe%rĖeX=irPŒēcæķŗgtîŅ.s` xˆnĘËD~@šđ´'øã’oךEŽĪįî#ĮBĢĖ7b†ų™@f)Ë:ž…â…į#ēĖ‡Qą4>Ÿ…fV­ ÁŽŽīļÜøK^35/ķÖōī•;#ĘØ,ā¯Đ/guoĨ%ĶËÛ`ęK\\™#rc!C%>0žÕ#(k xO[¨÷l”ZūCåÁÂũq šˇE yęšvÜl›ŅĘz=´ œƒË]z“%|.–V1-Sšč˙TPŌú'Ĩ1ģւ2˛|{fIM´‚2 ĘŊ bĀVŽngI ÷w€ĄÎ%î€Ųč&x†TnVĢč[ãíSy3€ô áÖŋŖÜq˜Ž¨ô˛+é9rb‘Eôį3Hû;ūÄčŗEcĪŅŧB™˜ĻN—g8Rŗšg#áYąNReČ"Ÿ0Î@É73pŊdŠsgtkĸ'Īû_øõÃäœ EqĨ;uí‰]8G—‘%Ë ¸ļđ"‚b+ŠBō1q)k}Ō^›Ĩ'ģŠõ×Ŋ hąÎ˛TԛŦ/ŋ0\;^î(ãėkZJŽđcÍĒøRA,yĮQüŅL”: ûÂBęÄ˙f ”ßģX’Õņ€đôĻ@“†žá›XkpĖTę%1^…[Åņf ¤Jūē.”4j›îJdÆ9îúöÃõAŲ 6’q mÚe{ągĨđá>uɖ(ŸÍ-›¸°v(•‡ „ˇĖ8ądëeTV[õ=q1ĀoŽ å"v3 šIn’ČŲĢė-˛$,ë.Õ*ī@ļl‡HC$›AGđCĘr‘mP%S3%¸ÍŪAį7÷$ßËnNyqë-õŋōáJ¯RŠVēŖÅČÃEęW‰ķļÔČQO™QcŠWļE>hIclÉĪ{Ģ5M;(Ŗ`ŠíĐ*Pn´zÎÔ*Q’ŨúžŌü%•˜ TCGĩČrTîR8܇}ĖēYf6}€MŒ§„áØę|+`äF÷ëö†NëØ-ãĐ9ģÁžzY–ģ9šF™ęÕęŦų(ĄI@âÉ6Z ÕVŗ&{šŗû…_÷°{ŊpH} “ļš4­e°îŠŠt!EŦK×úą6Mũ°I~—Ž:慚‰2HųÛĩũå"˛lĶ™G –æ™›í?ęąĨ[ŒYdģ*׸nƒoZæĸIĨ[E”]sPûˆÕ“܉äí´åÉFš…Ã(vć‰ņωœ 4ÃØBJãj=CPöçøFs˛¤|šõjhÚ†Ô Öę€Ķ*‘hÛŅŽĐeņƒCÍā‹Î6|b_tč(K÷VŦö/QFAŲ âˇpuĀ$Œŋ߃QĩÃĻ–ēí;Ú5’^tŌCI+s°°ë(ũH>cAí°0Gę@ƒé‡Á_ŌÆāåY"Üõ,žąŋ!ʗ…œe'•¨ÁZ”ļŋ"¯âŸƒÆƒĻ6pd‚…†G1TÖã$ÄąmŊ¤žŖIĖaY˛RfHĖKŊ…8CĢ;3Ã×h~Ŋļ?Ą|ÎX=ė ĀĀx)ŪŊ¸įđ On \Ô&J˛\’ˇ‡o ĩØJ>¯uîj(K˙đVˇ– IÎoŨ>`žxĘŌũČWīŖgŽ’^PZpG ‡hētlƒ¤-å}pPŽ\ܙûĄS“Ũt­H^%4Ķî‰ŌųfmĨŸ­WƒöĻ á_) Ī(Љîäet>q|G‰ų—5ŠQOnTÆÜŅÆŦÄ Ųō:1: —ˇ¨ŽÁmÅ‹ÜM ëčEĖpô”RJûķŗ„ŌFīã6A n@ ’fˇĢĸ cc`°Ÿ0"ãȟnaNķĄ¤$ëŠzœ~~Rĩ€bq%KŽ5^fUãļ*3Bš-Ō÷ę‡Á´X~O–Ü.%hˇŊhŽMD é6%Ŋšs”X=,UĖƒžŌö@C”mL,bė° ĸ4”Ŋ5,æS~lđƒi|ž‘ū\–ĩ ,Æ^ŋc3āÆŧ+ÄëāRÅŧ„}\āĮĨqP@Š”+$Ūīø°Ķ|X—Fļģ1\=S*QĨéOų€RÂ.´=Đęģ<ˇF‰y4Ŧܖ-0ž;xĢqėŲˇļ°x“‹XJå÷{ī%å4bč#w3k7nÃŋŖWļtų÷¯(sYãāĩV…ķ`“e腭í0™UÚŨž¸åŽ›†O8üé^ōāË÷)>—–(ąbX;j í8dŋŠ?ã×(IA‚!*åjH'ļŦ­á‡ÛvŦ"˜ķ—ĻŲ[äŦG6ˇ‹Ŗ%ÁZėԂ1(•ø§iiĒBū}Ŗ?ĄĖåęÎ9–—ąSík|ŗ”°jd!ƒÁŧ4k‹QÜā‡,eģ ÖÄđėãö4f\BA™ļm”’ūãëM_ō?ôę¸zb¯u1uc”¸˜›Â+˛Ôr˜<%F܃/ĻGė¨5›mĄĘ”Z&V ĘdėB”ŋgŋGy“%QÂôNĨėl0Q3DdĒM;H‰fŽņÅ›}J(oŽųĄy°éŠy”$5…ŋŦ,ŋĒüŽ7”%˛–’3Ģļ 'Sņ.]ë­ēOąíríËoŽįˆÃû7ŽĨŌČFÅ"čÉî+ë,•}:F4Ĩ|ÉĨdŗaø(…T20‘{5˜Û1CáŦiæMÂŋY>Ÿ[9ēÍp3m˛ŠÅH”‡ûģsŪP2Á휲­(LJŪēAą/ø;= >šÛ˛û#(zgq>%¨D};_Ct, “ũUCø7”qhîyf/(NüT,8mɁ&&¨Ž>†)3›ÍÖZFTH$•ŧ\Éō ĘRŅũ‹ĀĄÄĮ†‘åxŒ Į!‡ûûp´ŦcԋRarL_ĄdV˙ˇ ŋA o˙“ÁŊf% ‘ŨS‚,G3Â?ÛVV„}…Üô¯A~R%í>ũđÅZŪe=ųō °ų”?r}‰2~_ēPbmēƒ‡,aáEaå˙<Ę/¯ëƒki擸hÁ°…QmåųŋåyXeœjMFĮ,ūS4ŋ ûzõüČõû(O…rĻĒžļéb€3{nņÛū7 Üá–G[l2é;P.æĩŖéڙúã×īŖ<ÄĢHЍKÛd~ŗ'ķß_0âāe–Pž_šÚŽí?tũƜĨ™¯ôWœöΝ?Cų?uũåĪ]˙Eųs×QūÜõīF)ÖÉ|e:˙Ä÷ũ”ČÄûŋ>Ÿ€#?鎐â<ŋTƤöä×ĨŊëįÖm‹2•ęúķŠo˙úâŦt)ÉS;ûĨŧx~Ö Võ÷˙(ŗžąÔ.–2ލlĐ8ؙĪá‡ÉÃEÚÉKX‰ÕųÜīs“ú5ˎ]ŪŖ:æĮūœæ^ô÷œĸ?ņ6÷ŨŪ6fąũđėsöÁ }~.š‰ÍMß5 v}Û÷❱A•÷}wŨņÜ÷ĮēHāįÜ=ĖķũcI?9â›ė•ƒĮ=™c˜áyīLīŲös–œûũȡs|ŨCÎĨîöŦžlēŅ1Â1ãov6ąę͛‡˙ˇ(“V#“cšŸš ú}—ÁJÜ"NPÆĐ;ÎĀcž;VĎO~ļõęÚ}xũ "ž†fbŅcÛn]˙åĶeŊŽqšŨ-Ļsøo)ŧ ūėbÛõ‹kr÷\Ųø=+;˛°§lƒ;üjÕWĪōqn]đa1o⸟; ũ=Ęk z§čžuÛ`üũõ‡ĄëĐęŠŋ5Ų~į3÷{ū=ʏ!†ß)ÄøÃëŋvüįŽ˙ĸüšëŋ(îú[”ÛöĄ¸Š“x%Ų֍ú"`ûvũQmÖ?ŧRø@“eW;ÖQ—ũV'Ũũîōŋ“Bũk”îo/S˛7/JQsšŊųĩĩ>ú/{Ũũ8Ę̍ŊXiŧ5]E÷ëũǏ‰lî_gö˙zõ„Ë)(2Kjmž@傴sĖŋŦ“‚ė/úY”îąŠŌøF`ō”,7›šö˛,›™ūũ(í5bĨ¸:š­͜K&8ų Å\ß\3ßđ_g)…RēõũĢ+փÎT‹†˙ŗËIQYhÚ_%ø¤”ų^˙”o>įq~ōāū:=|ûûŠrŽãVJˆÍö°<Tē˜ÍoÛ¯DeĶ˙M—-›Ųžˆá~2•ôŸÔŨũÆ}„˛D ō]ęjŖ nHÎ:ųžė=u(­RŲžũējÛžĢū˛œJøäãÁŖéJõÖũĄ6ō>Ÿ\džWiBˇÍæ _”Ī· ˇÕUŨ‘Ģū{”Tđļ_ÍĖëåáĻÉŊ´f_™Ō4oN¯(š^hų“ƒŖjƒK^ĪŲIūm´Tˆ†ā{”2RœųīŠ"đ89>'Z#įČAbŲÛĢáč,k›Îä>6÷} ÂúŪ.Ũ.ûë׊nm˙m”ÅbЀwaF͎&ü‘œŦĮ´_'ē—Š.Íĝ„ŌļémZų4oĢGPVpÎs|Õž%)€ÄtųPöø=Jų“r|rA6æÉļļ*Īc *Ō‹(¤žŒÂíÖlWꇷ…P7uÔgjUö |üĘ֕lk9}@õ†ōŽü Ôû'RVv—÷yäIWģœg&%ø’„æzÁXfĻ{?s(GŦ^j|7ÖqĢŨ):Ÿdƒuz|Pô÷ē c¯-Då­åϝĮēU–;ōŧĪ|&=ûP¨1ŧ Ø|L:ÎÛW-ŠĒ×rāäĨœĸeîvŽ3˛ŨÚ}rí´yÍJ¤v1z…&yöĮ; lŒŲą ?ļ>ŊŠA=¤ZkîčĨ[T´ą—=ב§•S´Ŧrõ[RĻO§ßę‰Ĩjuĩ4·KĄc×"Įš}˛áw}öķŅf/Ŋ{öI崎•´'ŨŦ’LŊNh*pĘ9īũHą—eD1Æ<‚GEî (Uߥ<ĸ– ×ŌąlƒˆBHnxQŗ$gßą3GâV^į%"l4{$ƜôfTnsĄÚÅtÛxeC/CŌķ(“(\C^#Îûظ¸ū‰žß*Č$Ā+ŋįR ;{ėšÔ]IĪÎD&#-xØ>°<…š*Í9ŧYē`ŊgõŨå!ŠƒãkŨĖclK_&ŅcX?VYnZáOĻâר˛™GÎÛ#JÛ‡n ķŲ/û÷Į÷˜cæI›O ,=bÎŲTĖĘ<ōÕ÷WŊP–ãFŌũŅI_Í(åŦ§%°C$›K%žCõJyĮĶŦDS™Ų[ŪF÷rÖÅËŋl^xhkĒŖ§ĘtuķЖeĩņÜÉwëVŋÄX5C€Ĩ˛u9RĢ™đ ž ąI ņwœHf‡Jf >„c`gšŌmá/îF9—ÉŠU„íĢ}oڐĶĐĖĀ@SRŽ@Ld¯æšÍš’XDaŠ™‘@"w§ķ4NN~7÷÷ī(ijŌ‹.<ŧJKö¸õ7v•D&‘‰eTŨÕŋæĨ“Ëē›8÷ᕕưw˛‘­ŨŌfKė+]„Ę ˙a<ΞcnFΙ˛Į'}~K[÷5^s؜Ę>æŌDKkN&NE-įÄhÎ6ZKzĖ7æ°°ãĩĖ[”ēâË éUžgOŲÅ4¯=|bU¤ũŒg¯ÚR‹Ŧ™Üj|šyŦG—#Ŗ˛tŠ'$ũȋ˛Û*˙x/KėžŠ†æbâi`O<)ÃĩŽ4\ģë)Œzį ú¤×ėaž(9ÛOîeíęRík0ÚŲątŋîˆĢ§Ml¤ ļÖiíÚŦ_ –ŲÅ4]´Ĩ™äs~ÛQiŽļĒT¯qĨplÖj—v)ôú Öo#^,ās†'W{æE-l%1w°ĄHlÕČ]†=Īc+œ8**}(æ°â˙Ø2ɡ/Ģī7ú˛öĢž2oŽY^1eŦ)ŧîK”čŌnOZfѧš<ŒŽSy(Ã<¤ųöüîëôÚ<|QđÌŨ¨Öâp${­)aՉ‚ÄX:+]{ÂԒTW_‡÷c^(§×/bX¤§}äǁûYgAéÅ6ŋv›wܖ>­hf}å 6‹†oƒIŅĮpÚnΧ”01LiGíūŅž/?ۋbbG’w…ųâD0’ēMp6ėD¨˜—ÍĐ}+>ÉlbLb§;“ÛtŌ_ėā@ËŨŲEęąôÍ­Ƀ>šöätķ9oõ ČԔ̂dgĸ7Īįł›ž8Kųh7~œ­›Ÿ.é°ÜēqQ‰*–ŽM×PĻP0>Øim‘†¸Ē(R9rĻÎ0™MS’|°¨“Ž[?ķYúːI•$ˇ÷§īP&JŌ͙፤°ã1õĪĖŗ;_Š„ļÄ"ØũŪđ¨Læ…A,ŌÄæÁŨ<Š{왞ČUšÂ/Ķ2,rļ,įūvÛėß52…éN÷Ûōšû㠂ƒiX…ųbFÛO<¸"°eˇF]œ˜!čõVÜŌXKåŅķĖô­ĸį4YRÛZ+CgŅr/§œŅ@p,ŨˇÎîūgaI%‚ķî9ßm9^ą˛ĄXėÂ>ë>=5#Í8\(ÆM'Ī ņYĩžoHŠ&,ĻĘĘ#™ĸ—vQ ļ ¤å’îf9*œŲ§•A4ųôŅ÷ļOsĄ˙÷ˆĘĨ‡aCáÚčų¨ŪCã‘Čą…ãƒ3$ú8OÜ2ÉĮ7K,iȖMi<“Á“äØâ'ĩQ/q9—ę9­åŒƒ.ŸĄĨķxķ'‹}ŧļ~|;.íŽŌ˛m+OĢSŌ)]­=Īl6ž wįvļĸ™XoĄŠbŦˇ(ÅĄũ amPž§ŒŊo„ŽĮQ÷uw"ˆwŗąÛ‰“ xņbčJü Ȳ$Iv÷’kē ‚)ũœAŧņXķÄĒbĶ0ø?+GļķÉĪ“Ą§<ŠĄ>ÂČy—]V΁Ę2`ŸÔĢÅ×įl8zsViy9#OxÄ œCnëį†Rļ<¯šÔ5Õã1ÜĖŗxK‡p9|CĮnĮžéüBå3M51ôrBđŪŌBSNĮ8–áŗåŗ•î^XŪŽō-­Púõ,3ā_áĖŊŋ ŨPōvKöI‘ø6-­įžīs;¤š6ČͰ1HCĨĒđûŽ ä˜rO]”ĶĢDBđ“nˆ ŸN ûpË>IŌęŠ.Ļép¸´[œˆĪ‰<ųpæ!Oė9‹9 v~…ČÖ^Žėė“4ļ/'sT6q50ÛŲ.ÍbÄæT\5^KŲį’fF8œˇ†q,KņŊ#ŲŌŧ÷‘b/”¯ į ĨO¯oæÉ- †ņE_<%3ifŗ{W<3¤6]a‚q2[‰IŽÅ—eŸNi…%°˛kųŽ…dÖvd7‰ĘÛé/”|žäjØ+ų)íōöFeÅ%ąÂFkĨŪéqĄL Dâß(ø3.ĩÃ:Ņ5q Æ36 å¸ëĄüĶ!'-ņdđŗsD91é#Jqö&žÅÉœPGž”m…-~EYMų#ņĀÖ˛9ŗrôåĒLĶ€„Ëßķë¤n–$-‘#ß7ÔžåË+OũmŪÂvų2:MķĪ e_d JÍQQ{Ģļ›ą2E–’š/ā+ÁË=lh3&`ʇĪFrĒīĐđRĩ‰š5.Ũĩ! ļgöĢ4 žĀ⋞LÚí¯87ļAYŠ  ;;oX' áNŊ&摏ąĶ%ņä”8ÎåFG¸$õŖl%väÍå%ĸfSR-~d‘‡ôįN!Ûí‘'u­ėp%#ÎWč/*r“%OHãxø$­Ûą 6v”\JYøŅséũĀ)Ϥ ’('‡§ $áUŌØŊL˛”ô0•ŪĪ|R,öLį:믌]ôlųĀåÅéÂ.yžŠŅną`>”Aå=‡ņp=P2ëhŖk†&ÄūLŗē1v´æėŖÅDāHæhëüܜ}9lH†¤qF¨lw(‘T:žu¯ÎjžÅA”ątdKÖ|BĢgŗŌÄm¯Y$N ‡´”NĻfmÍŧP;ûŦ‹Üz9ڝ(€ĸ§•SÜeŌe‚¯o$,Ę/Š3rX –Ÿx¯ƒ]˜2´Ņ‰ÉX÷ŸQŌÉäíÃæKJ­Rá—ö›91æĖTí.ũ˛aAōōxūxãPA5Õ8¸‡*úˆ’>_iVė.5y€ˆĻGžÍČæšęŸ›l¸Íœŗw+‘Į'bËÁœüæÆŖrx‡GÜAŽņ7ĨSâ":CF$Į#¯7˜TÎč’ ­Hë ”rA'ĶČUũ(aR4Y  oĄå!–Į›‘. Dģ bŠ`c÷ĶEM˛¤`6ĸčâŲ7ēãĸX¤?x‚üĢææę”{(‡5a(?Ŗ,kŗn]Ų™Ĩi<ė!$h jÜk•Ķ ß­ŦŸbt´´F%ĪDü JB‹ė“I-Ķr^ãŪņd…‘ąĸžp5čē‡3ú?ž—JfLąģōĩ ÷öp˛š#D›=ŗ%ø÷ėÎ|¸‘ŧ*Ūŋȁũ†mb”ßŧ=Cŧ¸âž ļėõ‡ÛwÕC8Ō:'…eMÅŲ~BIŊ}T€âeļ7æQOUÛŪ™dąĸĶ[ 4Ęą˜ĘšŖē”;ķ€éÜŠE­Z¸$ė\B™§Ŧ3į+á‚>?U `V™ˇũ~9Ât†+ŪPÆbČ%FëĘ]Ėŗgĸ¯á¤8bIįžW5N2ûQĄ8&fÛÜyؕl™ˇuāŅqÆëĘÍä\˜Ī¨ĐîA'š?ÉÁ‘§õ#J"ķĸ׏’x15J5Žå0Y v›~5ŒÛÆ|;÷úīœˆÜĢŊ‰ãĖäÖydƒÜPËÎ Ė/_ōâzü Ĩ9…rfhP¤O˛”N6ĐŅ.tDjúhkrūĐ(…”âÃ)*Ž$;s4z5°.Gk<5;æų n[?yĩŅP‹ Ķö<ĮTžæ>YHĸÂ`@m:ŸQę§éFpŽu)lˆŪg¤ŸųŠPOKÉgkrŠVBæ–ĻŽ[nt÷U™üfĖĻĨ{žö—ãāyĘĩ¸7'eŧbÁmãĶēkŸŲkNƒ{|L‰•|Či•,$-g\W­–Š0–Ė ˇč66Û5ģSÂŅ1ĪÜC’–€?{Ļ‘-ė"Ø3Đx9>'JYüPWAķ˛ScáŠãųåē)QŠd ÛKžÕÜāƒlXXpŠ7‰ˇ‰‘œË‘D[’Þˆ×ŨÂö´68éCĀ*NÅņö<¸„žšyĖ$? dܙđlOg(voôŌįB~xšôŗmšqhښũH'\/ô†g/°ØÁŒėôįIéč×lģ¨ž>ßĐĸQ…Ogú‰ŽįÔ ŸžÔræÆG=č'֜‰Ÿ—jAd +›Ąĩģaą}ü´z˜{čf˜[Wʰ87Ķb=Ģ}d‚}Ξ;Ōģ,wåŲŠŪ5Ÿž{ŖŲÜžR–Õy3ŅUā ØâĒŠëƒ›w,B°!áîö„Jŧ&ë jŅK_āŌŊ^Ē  ˆ¨˙žŪŊĄÄrfĖZMŅXö `ž]z_†3-m)(¯ķf9‘3ŦžÅEĸ`áNÄhą~ÚN8Ëņ%ĘĖ.ĸūI=ɛĀŊ5äĪķP=,ŲB@ße…Bķ~<ôÖ˛ŌĒų)ŋ—`S×OR3œĶŠõ•Ü—Ö&‰Ņ0@ė7ĐeËHÜ7(Ąd`üŗ•‹ˇš‹.+Ũ—ĮDփȥûüžzš†TČ‘ Ŋ=ā#׎D"›‹ĒžÛF†ÜM`˛‡€wãy0ĻJ zˆ XåĶ÷(Ô§7+&jãųuĖ_ž''Ņ^?…ĄíŪe9čNcČ×=wÚ2–ÁÃpĶQ5÷­Vcæîá<0Ŧ+Ų×Yô”fr yX+įIē{7”(IÍj(đEÁ˙ũU‹”˜íę&ŽŽÎŋĄ|˜­‡B?’Sžcu˜d,†Iš1ÎeHjõĶ< “črđŧœ{!€Tę Õ í… šĩšŅŋĒ‡Ę CŨMˇž‚ä=–ÖË'žtåĀŗ?bŋĖ<ķ įĶ™ÃãŖ¸*m,‹ōĨɋŋíÔb$ØK  ;cP<ˆi÷×C>ŦjīÂ7įxԌGjŇžB„ĐÂąáļ•!s“MęXäĢ\ąžL|Ö¨í­ƒEåDÅf{ĩ0\y^¸LG‘ÉĨÅ>Œø Ú¯čwĸÜÖ°ˆOđÄô–ņ^K&‚Ęߘ°īh#;ĖĮÁ]û ÁqŌšáŗ$VëZH„f“ˆz ķ%ijAž`Ķė5,iNmų|C)^ØĄ™-„û%/‡ ÛTĪá¯Ũ 咓ƒ*ŽâĻ4­"ē‰Š‹ū*ņņ“Y‰2°r&zÜ@Xļ6=ģN’` â}Tr¤°~,įŊŖ”ģ0 RĘ(´īvŲĩ°ŸÎõđ%‚‘æŖY,ÃåCŪ%Pļēú6øÂkP.Ąœc6[+nh:ۑˇ^QyŠÃĐÜpÂzzˇŠWPî4Œ ` /$î3îÂTĶe,D‚ncÜŖÛË{1øĐ¯ĮŖ8L,åzíUā¸@é[LQ’ŸÃŠm‚íåęaü`^ļ<ÂčļũĖÕS(ÜĘJ\NŠæL9Am9ãOÍ+€Y@s˙“ $leÚŌ%fMē+؃–ãę¯Ų´ÛŌcŲĀASdĨ€Pö`ÍģÔ$ŌN~ŒmČ09ôm’ÃግJŊY/åœā] ­{a4í ÚԜĖép§5Œ BųMΞ¤-Ø|‹SF­ŦLŋļ­’CŦĀ•)ÖÉÚWœ/ŋĪKud/eWë6VZ˛teßšböTžĖÍ'ÍĢõķ¯ëoŅšžAÆRΕĘo^Û ÷6°†)ũšîˆEĶĻ·ŸŨQn–ā`Ms€âKO#—ûl; Š7râÕk†Ō•6Ü&pą-Ëj†‡šâžY!—ÛĩĮ|į)5ö ­a:(TZŪnۇV'Jū”Iŗ\#W÷ÔWŠëĘåŨ ãØ´*úu—ā%Lį¤w¤#8ƐĢū0ŋ:“UWlžÅ˛Đ÷ž…N$+ã_Ļ™KübÚo(u!˜ŧÚĖU• fL#s`’ NĪÛŌ÷}É%Œyįæ6x˜Xņ;->$sžÍ›­ĀøŽZū [—E¨#“%TųŲŽĶ°ËåÁ3œZ[ėlqį“9PŒ` jꆗ09œʲ …ĨRŽ"ØtžtZõLÍ4\Ol֛.Î7­wÍKÖ^˜ũTi{Ęz„%Tssfå{đlÍ`:}Ļ$ŦņČm@§Ũ™qyČŽŽ|’}ĸ;9Æ0į2ŗhŠŧTcŠœ’D=ŽUtåΘ_€\ķ ŅĒ\26ÜRŒ1wˇ—„0Ãē˜åîÅāŦŸöģĄiŲĢĀĒŠâ=…yæÚJkdę ŠĖ03?˛UƒN6Hdæ<„Ξ4¯SEÁl-!Ÿ_ŖUƒmā/c×hŨôįm@a^UĪ;šĩē\2ĩöN’>ņõéA´˙ØĨö0ÕũgA¸“Įđ~öÎ wĮËˇ_öę˛áqN‘é>Šåv[@sIH÷€A2%š?•-ŽBĨų—›åZÄ'ZēØ/ŧ3ÃcNĒ~ܙôßĸ'ჴœžw×ņ4n)q3Ž•¤úŋœĀ6^ģĨĨn|P‰†ß z6u›ãRäO,š RĶâ§?ķŖ˜jŽGYāŽLî(nĪÙÅ´‘Y1ZúŦPÕŪ`bNJĻyâ&ō7ŒĨf5]Í܍ŒɖyĮļæ0F‘ũĘĸXXų”+îKd„¨ŧRr%l;ėįWį^›y?ŗđ ĘzbQ%íÅũvZN3Âģ¯ĻFŽķF`C¤&ZD¯:/ņ æ( Ԟ߸[YÄU4‰ŗ [i–P$ąÉЁûČ8į?­q†¯Bî|vdt-ķ  †’×uPސâØÚĨļü|鎲y¯ō$Âačs$˛‡‘aą]d6ÍÂ˙œJg &Ŋ™@Ëeû2ŋČ+´M:%öÎ/a>Nâ]™ëj+[Vs>ˇ>'J3U •J­\ęä[ŒåĶܐ„-Ŧ#“=ÎcéŠōØųu&¤AÄ)ĨĒ{Į2 ŸÎCÂn(yo¸ÕW1%B†š-km—×&ųËš'đjf͉ÆR2ÉZU[5ÕŌUŦjɉ9rÍ­J%ÕRĻˆâ¤Ęąęãō•^(eœĄ§ûjKˎÚ+PēŪÎ˙-SĸjŒkfF)KiLû|ízÚ˛]%ģgˆ’ 4,†īeÜr­O™ë›/,îrXaRœ´žRČĘMĖ’ļ3qäV;Žžã–LŧVķļÆ~ÎĪ4ž„j^ž´/{ ‹‡ņČ.Ž?k°D1…’é*§Ųw0CŦ…-¤Čä‹vŨųĨžĀHS=ŠõŽ3×ŪĨä?1Ķ|rŪa'cW}´âHžŦŌėMķy-Ųâ'Q˛Âüúá)éČtŦ—b¨uqđHĐb‰[Íš4ųúëĀ .Ŧ,ßvwQ-x;sVÉ~F)ē– Nt?ŽPâžzşEiĪĈ|š?áÎC6×đœË&\úgƒÛÆ}š]éŦrcjv;kčXĐ Āī ƒw”ĩ‡$*abđP0Ęĸ,JíũõL¸Wbž65ÍKē{m27a;7ĪZĢg_ĘŌÖÃūē]öņÆ â‡Y*ŠžüÛ~Íw”§˙ëŊˇ†ú‘Ņ˜-ŋwÄ/åīũ"/ąÂ8ŋ%ø*B˙áŅÃ*GŽ’m“mķî¸?ŅÂßüPX0ß!~ž^ĘSį€áZ]ļæ°ÔוvJœĸ[ũœ¯ đ~—ã$oSņ÷ü¯‘ŒI”ƒĄÃGîblæ=¤ŧ >ūV“î1~R{—ßS˙öÍöY­2פģZ*uŊW°ÁŠ…]ß_øügTĨ†äüq3Ô4yát.¸Čŗm‰‰ÆĮXč6<ŗĸ!īŠōĘĶ契û|ĖNg:HAj“_‘øŖ v÷á>įēVĒ´‰*úy/ŋ /< Ō>qÕĖbu—W¨öŌ}ļ ouÁ|{遺‚Ãõi”Đk÷•ŖD=~ęĨzĸÖKÃh‚T?aŌÄz’˛øÛũÉžRâ„[ˇÃ­I.ŧĸ˛¯å;”æ” ŋ[ŧEžÖŪŋfœ,×ëj–hm×vģŨđ$ÉR–3iŲŅ-ģdĘ÷îÚV­Tqž“žž>’ķe{n1YĮ,´&Ū ķđq-Ŗv›ŧŽ]™°WĀį 6–%Ģ(Yu×ČyÆ`î”ˆęÉy´Ũ‹ķŋŊn~ŧK…ÂKu[ŧûÅéŅ‹Õéëŋ——%;#ũģ”i]K÷ŋ!ėĶČöÜŗqĐ2—Ŋ°Y˛2Æ|Č)üĨšŖäoJ„}ķŪŲz–‰÷ģWųîÉ,š ōÚBëWįô¤.(ÍĒ•×^Oį.ß/Ļä”2äˇá­zoēioæįļëUÎTĪ;ÕĪ8ajÁ\&s@%]ʲ[֑¸'3š3-i:ËkÄ@ŗæ¯æ%_‚Ī|„ÖQ-y¯ú#u_íWX×K!ŗ9×MÍ´<ė]ð†D æCtÜ6´´Rv)¸ž{D ķž÷ņü€ōL:ÛīĪĸšãbG}‹|Q×?ʨŗđvTæŦJ˛hˏÍû]ņk¯t)Æ\V¯Bã×@-Ô,:ą ü{;^Ū u埒Q[ §f; J?ļ(õv#YWÄI û=ŊŒhr,7YtĄ_.ø˛é°iíâí{WĐw”5kõ‰Ō$ÆĶÃúĘuŸz÷ĸЉųÕcm]{pˇPMĮ‹NP‹¸đ:kË&lÛ/dj †%3˛‹ŸÛFÂ0sūÃxۇŸÄōöąLĶ”Jĸ4-„ĖD F„Åž‰mtĪģ0&8I`á‘?^'˛õՔÍĖ<6û Gī+ŋLŸčt>K.%ŋáÖėˆe(\ŒėĶ•ĶÕÔĪ~õ/B˛ryďá=j [tŦ)ĄŸØcĮÅļ7[ _eëīWwũˇ;5éÂļ˜`ŦYR˜ĩā€QúHįĄ6M<—!˛3í/æå9‘ũV?ûíq…>|e{ŗ™÷k9Kü0G“-ŸŠĩg †t5^ûĀ}æčė‹pCÛ!ĩDĪĪÃôZãĸØ]*ĨžøšSW܃ÜRĨ‹úųp•üŸtālÃõ{‰)ÖY‰ģ¤úC–y ū&7˛&đ¤E}ž–÷Š[00rouEiÃsūč‰o܈%ŨvˎŊōUæä˜|ö3epã’¸ßX:ĐÁ{\ÄÕK/"†į^¯Je2ĩuĸĪM_ēbå­Hb ŦĄ™Œoæä¨N$<ˆ]ˤĀī$ü%D 2Im™J°GEQRũÕļ+‰tË™rĢT¤4wO~…Ōœ‚)•,÷f6 îģ.7ĶCSL­hz¯€ųåZRs&‘°šŪ—Í⍋†ŗJ×2\üÉ/’Ôåvķ@ŋDY_ĢRŦˆą ĻKō•ƒä™Īí„ĻĻŗíåö΁ŒM/Mh—ķíJPļÕMˇŌzvĻ­–‚‡Ke(ë–5ˇŌ×(˸RJî(¸čEÁz™`ûT’¯SĨžøåģ1™×˜ÖōkŠ6sn%b +Ī ĪZ÷חã9ÔęDi†ĪÚōeųĻ„˜8ĮáXiéū!YíKđȨB* §ČĶcĮ\ē>;ĖfáUFWéēe‰RĶ§Æ”ũ‘įĨĸhĻ’9Á›ym>NįrP­†æõøTĢUŽĻ-ļ"†ŪQÂZž–lEā3Ļ˙ĀÆo' ų˜ÄĪQœ_˛ž“õLč´Iâ¸õS’Îņ kī7JRŨÎ>äMĄĪ„Ŧ ¯:°ōšĶBņ ‡ãˇZ–ēôĖ{|ŌÄ7}™%čÆŪ Âđhpuxōœŋ—ø=Ģ3Iŧ_6Ŗh!|K6ų䁕°­1ڟPÆp&5ŦQâIjr1MÎŦL:šâ(ˋnRž,A8/ÉéšŊ§ŌÉx˛ĘԍܔŗéŲšŌéXąd–FʧaĮØė ę¸ĀPÍĩ+×ÉÉÛņĖÅXf‘ë>ĀOfíCõrq“JЏ¤XÖĀÄ*¯ÛątĶĒ ÜcņĀæÜ_;ø ŦԒĻģōė,='ÂķŌÅęî x'æ%?…đ%7gÍ]™‹AŌ$ēôŲ“ŦĶ&RÔŖ8;įužüF'vg§Â2ĐžĖ÷ōėČļ!×[ÖLŗŠŽÄúAx÷øž”eY<ŦÍĐõĢbLvfKčšķņë|ņKō)ųYųīôÚ8ŸîQÃEcS‰ãzĄ&q2ÜåūExã}^^6ģ8€Ü9UæfyĨîØîI'åŸÅÜUšū5Íü :ę–Ũķ lœo}}ũ4ŋ)$ģņīß?ŋ$ŋ?ÄŪģž$Û+‰ ‘˙‰<Áõo¯æŗëģB2ÍI/ũ÷ß^Ņgס‚d­ÆŅ–Šŋ(yß;‚ŌˇķÄ}+HîíßgW—%ÚdõŧOËīņģ!éw‚ä^œë‘OMĘū¯}`øHž‘&7tĄd *{ž ŋ$'oäHJ§ąÔŽ$ōĶw#īīIõø$ōæB˙ .°ūĨ›w˙´Ļú )*cy鎀[ãU?ģū/‚d@^ę6a [^‚•!Ī˙ų5ũÂõ ‹0`OŧžB7ëÍīq}#Hæp`ßQÁS ’}—ëAōJđ›/_'â'wō˙Úõ} ųąžkúYžūƒËųåëÛ@2ŒVŌå.ĨÔQē.vŨæŸ_Õ/\ß’$Քâ1™ų3į}^ËšøwŖ§Į?nč|ä’ú6To$ė—ájĶCĨúŸ))xWú‰ŨvĩÁ[ü{zé÷dŧ~āéRŽžbČĨ=+>ŋķūˇ€dŠ­=đîĻrŋ1ŖŨ˙1RŨxH–;]?žīÉâkDÔ:n"ÃÖr%8ŊĮtΓMĻtÖoũäÛhũ­mĶU ˙LP& Nƒw'¤üúĒĖÔ`ũR)Ķļū–CžJß’ņíĒP|NëиØRđæũÉķō ÍßČ(?õp0ÁŊëėw€djpQäYsö|ˆĶNégŧđˇŸIŋ—ĐT„đ$r–ëĮ÷ ‰ĩ…đBŠMāHpäŽŖ ?ņęMQ:Sų^ü3"Ëgō¯˛”īÉ\ÔIČėYÎĮ"”ģƒ1FŸ¸–Ņ—*˙OŅ˙#8)JŦų:ĀBąģŽ=ôÛ@’W‚d|Â:üģ§Ŋ7•ˆéúNEu™HáūĪĀŅ?¤ŸŲG_šôWØņ÷‚$Ž]žŗĻ¤Bâ&ŽĀ„•ÃIĖķáwq…,ĶyYX]¸pt#ŪÁNJw’Øŋ$ĪDˇ 5W\sÕÂąGŲ_åS—*{[Ĩō•KôTŊęČW:U!ũ<ú°wôûA2 nŖ–ę@9/`|xyČ?‰:¤§ōZ#i¯0˙‹i<@iđ™U-BËVúƒ‡ *ü>HūÆĘ (nĸ>â×cîųĄčqW‚¸ÍvņjL-ęúמâÅĒŌ_æ@ˡríöq k>â(_†¤œĩ—ˇJP`€8qũŲ?ŠÁXø)VA`s÷Ã Ē’´Ŋ.Ûû}›oœëũėī’9$Šķ‚ā"Ĩņ‹ĸåۊĀR‚tģœ”%­ËŌŪ1Ģ>‚dŋPu‘å¨fėąë5öüÁÍ>ŧ.YOR˙„EŦHw‡ŊŠ4"é^$häųĶšĪK!ą™˜n ^œČ–xŽ<tL6äõęęz,k)ŧsë/ā$Rãm§n”Į‚j€đN$†71Á1†A:ŠįÂĨAŌTdU#.;~ ‹ˇ$ڏŌmēŒÛĻ!lŨEÜ÷XL>a ŠyS9'd-` 16{ Ī}R—_ˇŪÉHú’nrl68f)ã÷ éåMŗ †Ē43MŨÄԁ°ģúōYGĄđÃAøJy4EÁčAC!{瀤Ȝ>’ō’ëO~æX2)ˇŪËŠx8!•7k˛Ō2ĨN=,Šŧ6ž>…¤‹åĻŧąčt­ĻĮ1Ü>Åëį5xš†_äUƊáF´˛­‰!~ē leĩ^­)u p [œũÃáT˜õË< yß lŠÂ2Ąč/č "kâŌ­ęEÅ+Zębę4ˇ;Tm_īĐŽSĪ€Q\nŌĄ0Ž|#h]Mb)ņö…%ąWŧ‘ÜB˛, xōú4ÁÛHæč“ÜoĄ á­Ą! sČįāĻjŠ?į°Õę\áĸ‘J|ФØÔÖú;Ũ˜$ĀS\Á~e)` "ŧŧžđZQ‡š ǟEŲg8ų˜{Ā”Ģĸ°­[S4õ ƒīíĘ=„ũ}Į7aLîFĘ}ųmŅxbŽY>ŪÍeQÆ9RxRĪeÅOEž­[¤Û & KɐķSÕĪ´Cãg×°`žÖëÂ+@Č,€ŠĒÜĸœŦÜMNœ¸~ɖķāHļŒôGĨŅ´ģįŪ’į>ĄĶvUîŋ×Ōļŧ=įV އ š’mQ5đ?!uŲøTÏN ģ%pûAīŌÕÄŧŦj˜Š=Iž.ü]@Âkåœäžåi”.&ëox†Ēx…eÍšÔĨ.rß>†ä šŧ‰ŧ)_} }a%ÄÂZëņeä_ŽpēfÅWpīŪđę‹ÕŸ’ČĄŨkPĨüXžŲvŧŦ!’ ŠÚbÜāÕ¸Öy"‡åûŊ*ˆ iŖ*™8/néÃÅūDūE9^ņĸ]CrŦ;ņˆ:…\œâ†Į˜x{úøtéåjĸˆYįÅKlQĸ ­%ÎI“ ʇ0§ˆMĩZáD„ÖuQŲ\(dĖ‘Ŋ ŒŗøØ"´bW ˆ;̐äįēz-ķ5Ņ"°˙qIŨkƒ}ųx Ė!9Öjjā^YJ¨ĸāë2 ŗ~¸Su\ģUr&Æ^z'ßÚh xîÆÄWdĮ†Ô/T€ †ˇ˛MĩLĖoîIŊĘÃčĶö‚$c‘CÂ9â¤.԰ŋģˇí•mĘb ´q×u•ŗWų—!yņ žJ¨T÷s`čˇÖãsÃÍÅ7°-S(”¨em{‰Í{($ˇŽĐÉŦ;Ž\í™ßŒĘĶŽjĮ¯Sčû Qleähr<-ËúGÕ°0ÂLeL¸îTw‘ŸâÆyCĐŲ^EĪû™ ļŽ%^sŽ}ÉôØūdJÍhmgZŖ)áŅ> 4f7Ų‚.wÛ\OZđs-ˆj›:AY—C6áāŸ€n’NP@[­đÄEŠû‡uŌú%*ŨQu/–JÚWü)”}AeČBÁŦ‚Nk|k^ŸėƒügŽēI[ÚB)˙"NÆ’‚F"Ξؐ°Ž€Įwą¨ŊĒÁû+ZP]Į~kņ×´s%RČęčųņ sgĘI}ŦĒčææ.}¤“́ŖÉâĀˆåņ î7<~oî!P  Ռ+ÅË;8÷âI"ÉŊ†ŲH´AŽ9k>„ä˛AÁ9҆+Žl(ėˆÄģhĐOĀrÂĒl,t`jûzöĐ:=ĒĘrÖf" lŽĨ=fÂaÍ›Ļ­*I$Ą˛áCJšįpŪĨɚŋܙŊ9Čų×θ/xA°ĸķžq+_ą@>„dëįlŧĶŦŽK ãi*;y4Čī œdqËׄ ū,ŧg§>C>ėæ‚éWR,Aj+"VēõĶžD+4U„øÍ?‰xÁöc [Á[å3vâÜũ´”ˆÂx‚rGrcZH֐R˜Đz}Ė'{œŒ~ Ļā˜FM#$9-ĻEīõHĶrôš ™×h´pÛZŽúŲ~ÚöÄë]K䀥Én2D‡V—ŽFČ3ė_€AäL­œęQį2ČRg…iŅm´„%ÔGšo-,Oæš`˛Ķl–ĻŌ’}Z{ôō\H:bËrŗxŽ=$M|āV/ĀĀtZ0‘ē ŋ­ôÆēa’–ˆ o"CÅDÚÖ͊!Ą~Â%fÍ\U!?`˛CqX^ŅxšęAsoļڈ„4ŌžŖ)"ęo1KoãŨŅÆqŅžh'¨ŒfÄ-*ÜôÃJ7ēî™ú´Ä#÷ņTš×Šw2ĖjŠN5%ŗnDeíŨËņ‡w?꟝"Qē n“ĖȑŽ€aJyȔpRŽĘB¨×ž/Šō›đ4=äEˆũvÔĪĨÁrŊŒXÍ'v7:K †đą‡$W{‘–֊ŝ0Hŗ?NíËôäŧæ9 ü:ͯ÷Fߋ"Sև#ņQŊ[åFŊ‚>VŪ=¤į”ĢG‡€hÚKziInā܋@EĸÅÕH8…ŸdNĮŒ = Ú8)U\ē˜ Ų™™,pëE2ŲMeŖę¯ĢîBd[ØÅØĒ|›O8@-ÍTJŽŊЁ1Ēė>ÃC ĨOCGŧđ€ML÷…˛ˆņ&_¤âIđƒ“]˜ĖpsëC<Ãč:ÅÕJlBkøä§ĪHö` Ø¯k@c`-¸Ōxé üĖĢ–|ī pũũ‚ŋG!Rˆ–¨“ĘÆ $[~Üø4O Jxˇhz1ī’({øzÜ H|ŽžpJŲÃÍĀ‹âûˆ*Ũ ÁÎ*ä•X‘ŪŋyR‡ yāĸŲ2v@B‚ŧ.ÚODJčd^C?ōŽŅÔ0d ŧĪ>Ėm.cŸúĖ…yUg5âĄx2ˆžûŅ÷’rúō•“ēȚSbgĘŸņER‰t vņ˛ÃŊÔÕ7ŖŗO5X•7~Æ_ۇÉ%Sß5Â$p i d —Ŗũ) q} ÔôŸ™ū‰<¤Öœ’CF‰˜pĐsūEģ[×éËâ•Đd Ô,ŧž[Đąy´Žĸ)î€ŊļžÉĮĐ˙ŽÉ ōą‘áũHĘ˙FâĪT֊-`Kķj´ĘG~"?áĖIŠ]ÂŅĒ|’Ô.k;ŊBz:O‹^7ÍįTŧÕģ÷9v”úôÅN­( u\ $•ŽĄ_Īė7|4€4UŽ„žcäÄh­zĨ=PĐŠĀhAƒ %Ĩeû’ëHĮƒŠâ&Md˛Đl^&ķ!ŌŖ'üîŽÜåį æ×rmC´¨Bâ%‡€´(Ë=08Dí21%Ŗĸ€‹4`Ã#]"ÎMÖ0ģÂcCÔ°B /õ°cąlÅ6‹đžČ*Wrâ1ĪB<§Ī€ŋd˜Ā~i\Å1J~!ļ(Æ ?§¨āk^ūÉÔã"ÔãĪ2cæ -ĻØ ČÄ)D×(J}ōY3J&ļbÁŌ5~<,ĸ—=FÄ3cQ˙TĘŨĐLö qä%I+ö÷BnvÎ'œĻņ’0kõĶŽ;1&Ԃ^vōë\C5ÜōÍô"˛´A w\d~™ō$+ņ"Ôî54â5ÖJ~.gHnYZ§€ddąœ%!š#FvšÍˆũSãŽ^۟´ĖœyáÔÍ?]ÉŧiŌŧ*ČęĻ 1–°ģĩœž=7KG‡č#X€"¤uSxųyåVĪŗü,‹Ŗ|֎ŽjģõĄ Õĩ>ĶįššgŒXEd0XM'ũú[ĩRdĨ'}Ū)ėšÕ/zŠ$ sđŅ(‹-@fzäV=“.>úŧŒÛŠ5!ĮcÚ8Ôūįę¯tņĨ ūoDx#Đ!į;‰j”0ÉoĄ`§q[FĶ6ÆĮ¨ēÂW ęE†ŋ I§Å0ž‘‘[3™˛c;ŊY)ßč#‹/NíxÍŪŊ ‚t%ĨĮi’"øh‹iÅ6đ˜jW0¯Í:%āmėYäßn˜ tL–ŖA/K(b$ËíÎÁ¤%>Ŋ™ĩˇ˛F6ČbˇÔåi‡cŒË’ß dÕfJ¯Zcī̐œTnn…K4õŧPŪxJHĀÅRíD€äÃօ]=ŠŽâĐ$i˜ šB˙eÕô—}˛ĸ‡pT†))ŗ„ą>vƒ€“cPąŖT'_Ēģ0ŒĨˆl´Ė]áXGDĻēP ŠJĮŲbĄAôŖÃĨoōSHŗmU`Ũęvsē]Cö%wV  ũĸ3“Ö÷\…7ķũôė”ņŪ$™eõëēÜ+R0’ä­ŗhFĸD§Ų:núsS¤ËzAŲė„ ”˙A ô‡bpËh’;įAkúį`‚Ąĸ<¯],ÎNn,R¸šIø$/jÔCaļ3R^ ŧ‚Ēפ•’[Z=pÆŧÂyHŒ Õŋ{FxĮ~Ēë?˜…¤(i>§tEmzÉLЃƒ–"ŅūR˜Úväsî4ĒæP<Ņ]ēĐdďēę'ڈÚUƒ­ƒfÛ-úœ‰ķõ䧏 y‘Ļ(pūėI^ôFäGeåo§ė $ ģæ'U‡‹T™b#!DŅ(B´XŽBĀ*Ûn`ë!C…y§Š0Õ lĘ÷ĒäKžl)6ôÎÅop‰Š įŨZíęųfƒD'{NP\1„žJԋR!{ō;+ĘÃØ¯ôŦ•˜`Ч¨8Íā~€­Üõå ELÁs=ōdã‘öu[VÂÖŠ”_wA!ķĐh˛(íÂ3Dnß< ĶBĀō’ÅT÷”Ô+~=I+ _D1“×—c*EQíĩUöaä ŒxˇÉÚ<šįA=DÕŋŖūEę~¯LU´ŒnˆžFΞ…ŗM=ސôĖŪKTcc’ōnVhLv+"ŌÍb0…; ~ØKÅNPÖĶ rcN›ÜoQuÜw ÖoáīK2ß7&‹0ÁåĘnčĄįæ& ÜĢ<Ŧă7!­ŗ"͊åå­ōG|?ŋ˜ŊĪkrßüPxųö‡>Y\P]ô4öÄÆb ĄÂį˛fHše r#˛ÆOΓ&5f WļüWHŒĐåæIû¨Ļ˜ú}nęĪywDĀl‘U•}õî " áŗIõę§;s5Äãņđ^ë“w!yĨŊG°ũ¤ ČvÍ\+Đ`ĨGÄ”]‰\ČÛ¨Ž¤yęKˆ‹[Ķz2?ĸĻĉ?I)Ž1°šģfÁĀĪŊ}oÍēp 2äv +âŲ~6§;[mē͏ؒÁĢŪīD­l; u–4I•ī—!ųŅjų#›Qā÷õk¸Ķg;=œš;ąWâr™ō0|dŽc`čŠéF–é?FT>ÜRõĘ|pÎ햮ĨĶÍ/õ¤ŊŖ2˛R™!QYUgų}@X&Š/áĩÄúĻōq8‘j ŧiÕ@%ÖMĸ*ã×Ķ—!ų^†ŋŨV92tÔ#84Ë.Đû~哊Ą0GDDȚ—ФB&¨î–<'V¤GčŗXœĖg“Ÿ¯÷āP•)5€Ũ‘öČKÕ(ŧæ›]\÷ø0 Á§ÆŊ*$!Šqnš_GΞęh6ãcŒOŊ?ŧQ7åˇķ#ĪįzčģôĮwŪ(ģßú•I´:õ8§’zĖcPŸ_ØČû,eļg\G×0úyžšš?™hUN4ƒīų ÕÉJc=_-Œ<áAGøS° O‘wFÜ@ØŸŠl ŽđS‚ę•oŨūōړhąŋ ÉĐŽīúåLęĻjąVĮcN jq8f͌};ŌËũĄ›˜ëf;ęEËĻüĮ1CÆđBĐ'ÜÛMë%_š˜ĸU\(É21ĶJđp8F5Áy[rÎ%;39"ķĻÎn”vŪ/÷úõđÎëåYË-tS@¸Įրœ[ˆüœSnɞE}ōîŪ2lÚ!ČäÛ[*q#†ž|ōUĒE‡_FȘ´w#üŠ×v$wÚ h¨i=–Ā2¨ąãÉAeúEĄ%Ė)= õĒDš^Ė}ۃC2oãprœ^wũ#ÅË×ŅÆŽËÖ$ra*LĒØūĐ4‚”awSųđˇ^ųeHĄđ„j˄°ÔWÉŗãČbDoé}&‚š—[€a™:8ß eWwÄ͜•ĩ[Ü8ÄІÔ¯)„ÉŋaāšY:ũšcöĨ‚Îj›ÕäĨ˛)Ņ_æZ‚!8(ƒûĪxZrūŠsČĶÚsʁOpúĪ•öÎäĒëS P>ØG ô%e˙*Ä!#ĩļ`k8QŧˆŠhöLYđk OTl`’ˇqĒSTë3đīĒO@”ŗ J,Ë'É2§ŒĨU1õ*faxŗ_ŋI†ˆiĻ*ņsNWož¸ö%­¸+°„·Y,JT>Ŋą´Ãí AÆ4ȰHΠ‚÷9Č r<(…`,ķÎāô08Ą2ÎJĩ1<ûĸ÷ŧbmæF†–_ áa‰M™ m€§ˆîëCnp¨˜i°oÎøŅ¯A’=âaĸĩyÔ9ž^ũŦ~Á‡ŋđ:fY ”ˇĒr„:5,ĢCrÛį/ĘĘPBÖDw’f !Ū-k¸ĄXŅĨû†> û fõÃŊsÆtÃ+ųš>ĮŒÚkÄīú™¨ø•ēk‘‚ų›jGž˙e-hŖHĨļ0€ŧōDQ蝊!ĐŨĖM†/šēx¯åÜķŅėŊmķ%"ĘWprĢ.B–Ú5=jüUŲŦĶč.vuaæátœT_ˆ˛Å*D—GYĖëĶ!íÕŅßúĖp˛ĨmŌō˛Õ3„ŽĀđO˯@ōZ¸ųûÜ5‡Ĩ.%ĨŲPąQƒzß|&n˗“Ēi•¯ë„Ô´ Ŗ7(‰Ũ9ĩäŦ°ú  GKôRH6 bZ^đˇ^LîģYļü†ŖÖĸИ6Í˙˜č$đ˜4É%Ą+¯îĘŨ|´¤Ę悅ôUœC˛į’^\×î1ž:gn´rQ„8ššeŲrØíö€ÍqCnÂāUĐXĩ'áv‚f0ĄoEā?ä›YŲ•zLTČ{U Ŗ2÷! Ą‚2öÁB]K{@jÁÎ3S‘ø*ŌĪÚgôĖôđãr[g¸˜Ä¸ûŸL­ŠÖ6’I<ŸčŽÉô‘PgB™P—öˇĩO…ĨÚœųÚdIōßæ12¸ĐéMŊŽwīō>PjxBą´‡”¯3\Áb"îéHF§h“7=’ĀÅģ`ĩ#G…dÜË/}y37}ēߋë&?ĐéõųeŗÜ ˙ŧ"Ŋ-¯ãÉUŽ×N‹æ™ė .FMGũ{ėUi Ķî@Bž…ļIâ‰8‰‚oí*IŅīgō¨Į5>…2´Ųé"ŠõÎt3~q9Ų’̆{ ík+!ˆžķ¯ã¤Ŋ4€äeGÎ AŲ5ĮV‹Y¯'eŠš?Ô#ī é-4č ;u‚Šæēۘԋո‚ˇŽ…[…ŌI[]1갍[@ōD{ŅnKŠlŠĢ€äļWÛ!ž”ē hÎĻ:RĄ)Øŋˆ“‘$üÃŗF=yâ^L.ąŒU=\ęÁ„ëQĄĖôŅÄjMCī7Nׯ B„Ĩ‘V„åÅ­’ŪÜŋ•y§sSûp§%…+K7(:y\`ÉĸØPŸÔo›Œ°&$ač7&TŪ´Ņ’ÂKŲĪ́‰2Ú,c?~oÉ#=ĮāũčŊã›,kf3äk{Å3Íē ×8ĻģŖŽŦ %‰?‘dį3îŲi }EĄHG´Ā›ÁˇY­XšČ….5`w[ų)TēŒËED<)qā(MÂN,ĸüŖ†š[÷5dĻ÷ļnöÛézo˙'Æ–C>õ$gÃ×ãūȅeXŠZĖŽ‹ū'(0b,fiĐÂĪ]=úĐëŖ)mN /¯hąŨ dn0h„ų<åŋ{­’<émU y a>×vŸJ͚™œ§sÄ ƒ’ģÎ͖įúĖŊņšÆn9ãõtmécH.rvCŠĶ‘8voĒ!Z05‘1ÆúÍ`éŊŠĀP°‹gø!čÜs^ļ°ĻĢ2+ŠË‚2(Dķl™PÉė5“ŽŽč¤3‡<Á¸g‰RÚÃ0œ4õTP2üCī;e܄‡4€SÉC­}”‘ â•ų;Ė{¨ĖæcHÆ į…pÉ'Dļp3á‰ĐŖ(Û~FŠw“bf=‡"¤Ļ0jwšâęS}3nŽÃî={1LŧŋĨZČđrJÍK„s fšųļöB# ÚšúLa:›ņnBbt›x`Ÿ•´ Ėß.ĄŦyļ[Ŋ5 yčĩô´ĮÉąä)G<„<.G&.!9Ģ{Ä×ŖKķRl *ƒÛĀ3Ÿ]l i\‰: O´6°˜ĻÅÁđ6hķ|3ÄđĘIkä˜Ė%ßY”Œ´Q žĪ…ē}\'ƒ$=ÛīÉ'9 Ŋ6ĄNšēR×D—~m<ĖIsš„KHēplDŲčŊáŸpCģĄs÷¤m5ÂUîĪÅÛ!âE`D>™JŠŲ IDAT(*c ÎČ>" šqîÖ?ŒÎ Fxgö˜“`=~üąqÚŠ+šØzTÅZ›ÅĮđŽ;Ĩn*“ø˙ϞtD؆Ĩmƒ¨ĻĖ:PJĐf-#„c 7Æ2>ÎØG›‰qˆŌÁS&H*ÛtÉL—æļHjÃÄH¤ÜĻ͜8™‚õSOęŖĢí9h+:ĒĀgæŊŅ“0. ‰ÆWˆžwŸB˛Ŗ†ąÜƒŠŪ<ŪKƒƒ._zäĐ×ô_ĶÚÕėϰ]ö)6(ÔŸŧÖĻŠĶtčØKü0 á"E)+ŌĶ0īQÍĶ?r•8BŦkÕąôtrM3rʛ¨ąJ°ˆuyI 7;æ…_ y2}LŨj^;#ŋĄ"yˆÅ÷ö3ērˤ1:…$ú"ré:‡¤ÜÚ'Pv/Š’¤_/x:,ŊG1LՍÉ͎—,ëÉßáæ'pĀé/‡ZÜŌŊŌy$Lq/đžæã6>{Mˇ¤biÖãɚĖ!CG‰3ŗ’žIėâBĮ““[øĩ•§âÚŌŦdd5nœēâ™|&kŦ}ąö XSĻ˙ŸîkČC­ $ē#$Eļö HûØxų0\jZÁnÄ‹&BÖ"ŗąė bw¤ŋõŦ9FČüŒÆëT–=‚•¯GŒ‹PžTÍ@Š*yp"}ŦO6Éâũ…æjaÍZrÛ]—īĒ9›û~1Ė|€đ•S ķF›ššā]s‹MÁÉf=ŠT!-¸ŸōU=]_eÄíĨdf´ˆ…i€!)ß;MĪ÷ČZAGįCą b\ļ˜á[€ė! $ĪŊ/íŲü˛-hŖc6ްĖQĪå¯@’\dÅ>;•ØŽé• Ã^Dķ¸ļŦSwÜÖ“˛ÃM6'ëĀŌ<Œ4œ 9•útDĻį¯7Cbx÷8X/´ū°bĻ =Ģé„mûe_8*Ė 1c$°NQ“mR Ip4â>.äÆj;+āĨߎ‡ĪŠûŌžFBĘ ɧCŌ&wގb:ÔoTObäî% ‚hƒĢŽzt“u I;4#nOf+h aĖ“ jŠ„Ô@RŨJÖЎ,÷|IŲBévâģ$HŧĖôNŠGŲįãzI+ˆŅŽ´t­ŧM‹īGΞ ÉÄŧndvÚgɓö¸&6 ækŧô*<НáWQųNIãŠpôŗP–¸ĨãâŖųGŊđXÃÍVÍl ´ØœÁÕTYZ…äŖ–."ÃĘp‰ž"gÉæéĘ'…īŸēĐ8Nb Ũq§)?v ­Ŗ›ÕаāÁf‚ž|g_M3Rwŧš…vIˆëœ4°Ú—ũ†ũŒyĮĮ„¤#28aJ°ņmôđœ,ØëÕėŽîŽŐ§Ä$ ˆt}ōŸÆ\ B’¯wQ{Ãą0 h厖LęÅoˆ“ŒA"ĀڕĩŸ‹Y­`É@ĩŸ‰é1ôÆõ90ā6¯÷¤ö  T]Á×ö1!ÄÅ´â¯å` Ûõ€P‡œb‚ž$Ŗē‚ļw°ĘGĐcķ{§ŦÁĒCŪi7-T°)į)Ė"q^ëw*ŖMQ|3}JZĶ—˜ ëŨ^ŲĩÕs’€1!įŗ´¯Q˛§:ü܊ŠĒ' NļˇŽ^ØJ‡s_ãŪˇÎû<[sÔ]e×ëhɅp>žŽ™o7V÷fr˛#hļ’8ĻcĶLkÉlm!äXĐ}Î5{O9Dį“āõēĶĖW#ĮYŗ|=p á(ÂÖkC‚6rĀ0…WHîI=÷’žÎ(Ī+ëĐi×O´ÂGÍ×TíÆv…ˆ¤ĸa‡šģ|+wŸš$*#CāU8•ŋTŗMŠ“ĩ™ûæīōëĸz°ÅZé{@"n‚_vũ&Ëvœ)(‰Ļ`9)•ŦįÉ,›p×1‹rŸy+Q8*;Lcę&ė–A&ŨŽąĘÅ )ŋ–ĻIļ§ÂDėt× íx˛Ķž…KQg:ŊgĘÖÛu Ö˄‡ē‚ ÁēቁbũÕzœ‚“5÷@ŌRĘ_ėZŗĶXĨj2%œõ‚´š ‹ åN˛ūƒŖ@†‰ Ąŗ+Ü&æļ˛šąqr‘ë¸ģčā"Nî–üŌĐš‰6ô„.“ōāĀž‰ˆŽ°¯TpĻ-ūJÂHbļæ!~Yâė’ûmîk.蔲ë’õĒXŠ ‹ūš ēhōô?Tn¸<ØŲ:'ŨSY ŠDR÷R—9¸/ēo}SXPÅąÆĸöÂKrEČŧØAkčsÄ ÖjwoŠû3HRžĨb.€#:čˆ€Ž"””S"Uë%MEYqKVÍv:v ¤VvdõĮĢ' bŸę2N8B°J›y8 \k§Ú¯hĘÛEŸ ĘĒ/d÷KĐk’[WéÖmގY;ō°ĨÄsŲˇLĖ`ÁSVU9Ÿāā˜´Ų(ģ7hNxmíW šO•vÁäŊč5į.^@’î4°Iėž:¨.ųpÉÃĻвŦčdqq;NɃGK´ghæ4nUÖ:ĀA~˜ėžYXßāŒ:VĐĨF—kŌågžSđŽ`)°ëuŌ1'wk~$ VŖ}ˍKŁ“Q3ĸÂWq˛lrYjH™ $$iQņ{eti’6ģOuŖø‚{îģ|'Tgšhįĩ‹IĮōŠĄ×áŖ9jÂeĨūA‘‡Z˛ R=bƒå%ļSŗô;ŸL5øJæ$BRį3Q}@'H6ÍģiüK„-Ō¯Ų‹AũáHÂōˆŨëy=˜"5úZōã<>€ÆģæíAQY7ÍĘęÜļO°MáV‹AŖh@".Rđ¸cT'ĩ a‰’÷ÃŖKFÔÖS"€fE<5.^bØī eÜ[m„cڀēgų]ØPKlqĸ‰ˆÖƒõ“Ú­'^jBcHžäîoúE {sÚŋ Z4“T[’‹o˙,×ÚĻYÜŦ|Čŗ™^ŌN–™ŪĄÔĶ×IęŽĩĐŠwdurMŪ†‚Ōv^į7MŲæîũĸŠ'=R–oÖņ |E~üuŦ¯IĘ'oʉ“ž ŽŗBÂģõëáĪŨīâdÔ yĖÄų'Šūu]–]͔;ĘŊ!Yüb>‹zWá?Ë’tR=…KŒ’˜q‘˜„úJHîKΜLAĸŪrüPaŠqęēuąSAčP7šO*Īi1vA쑺×) UÍ bũƒa†ƒIœsR'ZjBũŲ/Zđƒš~ĸ8ųŠžCßפ+&¸C‡FÍœ*(u„L@VjJ:hÂfÎd<Î^ˆĢÔį}ŒčŽĩ[Pۆå V𚨠&õ×ę PגhĢîˁ‰?á'pk‹ŦÃÕĸ…+Ņ;؜Sē™ƒNaBü•Ŋ5ĨpÎpXÚ>laë<ø™ÆųāgrÚo@aPGÄ}NŨĨ‹Ķ¯, =ö0ĻôĶ!Û.>Äfâj§é÷ÁYî—MĄ+ Ō ķzĸúk¨ĘŸD1$ėæIÅ4öc-‹°‘ÎÁ.-N§d)tš¸=—˜s˜QԔ&ŊömLšÚŠššŠW#+‘SŸ KÔQ ĨĢáķ9ģŧ]ŧqééem\}n_ÕP΍fø‰ēl‰؜ē˛L-üÔ¯$hrl[eîqöĩFäúÁ}égŲącŽ@ΊTōŊ˛ ˙C…PÕ Ą‡%k`šō+‘Ĩ*+Äą^§á1mK‡GĶÉ@ČÛĐWøku#Đŧ IĮĶîÅģyÍhč:@’C qũŒ~Ē %î‘Ŋ/ų ę[ƒxēMuCdWdlŽ@ā ‚9“Åā˜ąĒG3dV÷ŖßXˇ*>.é¤Ķ 5áÄŅŠËœ›Õ;ۓ_‚ēŠÍûL›5 šČׁ4Üį;×’t—ķ+Ē2ųņĐ_Š—Ģũ—K4ĢåúöŠt_œļ)ėiR›É, ˏü`Æ+qƒi܂™Ē“{ęf(™*1/ôSPē"}“҆uɯ-oôęMoų4‹žõ ÜĻ$ž^‰Ō|~UHšGLŲ—åÛ ųûĐ :€ t6ŊĄšJÔ&H3õ7Ö7…ŒUÅdåŖ|‹O:EŃž’$j]—L›z9’īŸÉiĐē=z^XaĄájQV­XaķHHîÂO_qšŪPwūK°â$#Hŧa*öVÁ…ŊW9WᆠM5D.ĢSŨ¸:ĖÚvBŽBĀņÆ[¨š8ŠvCu„v€ä+UöĶôŦJ_œfĸ=q͍=0pŧČŅ͠ĉ qD­BO6ƒtōzÔŖõŪ’ŽcšŲÃ߅äSÚ\ĄčyVgœîšš>˛Ū[ŨÚŌ ÅËŗ)ŧ‹ôoôGÆuDˆü´ŋW„dVpiĻ8Z:'1g7ŠÕ|e’ĩV%P#c1-ÃĄį0KuŅ#Ø50 yúé :Ɣ›':Íng0ܛŲÔ’ĖƒŖw:<Î{Í0ĄQgÉ0ĨÅēfßņÔyŋ˛šŸj•§č}AIÜÕĶҰ– †‰Ÿü&Í•ãČÅtGÂ8Ž˜ũÚ ™Ōö…QEí ä„u<øøtPíĘLhRt-ĪcĮ(mAĻ¤7ķ™ĪÂĩÅŋ I`v'Öë +õĸĐ2v‡-{üCŪŽË§GĩĩžŗuŽįd´ĸGŊFŨ™Íų `ôSaÆŋ&rvÃI…"<哏LI}LÚĄ_đéJo4œ„+į1ĄAuė)xöķ–j?“ Ģ4V}ü/Ąã$™t°`Ą„8<žbú./§ŦIL–}ķŪ zâĒ“á”÷H´U–eQž^¨>”uļĨ/æ Iōę|ᏭYe =@]íú…އ 9uøũҍ¯1Uš"—ģ>˙V’ĸÕ§ÁßëĶ{ĨÖŋÉČŽĻ’*d[y›ū÷ÁYl}ĸ_\1ʖ;F%`?`ëAŌjsôfŪ>($“jã|¸NK’.ļjüĘÁ=ą?kÍW—ŌEĐ ?gYŖ{‰(Dt“ø*Û­á;ë:†î^e7›’pĖ*›ųÅ ™Ų߅$ĸ‚y‰Ü˜¨Ũ˛<4]īmۀËÉ1wš•›Kjņ;°„6î°Æ›’›+Ǎ5čLŸä)yrúĐ>1׆Ōeä[Éõ1Z­ pée ŗRí–“#ÔŅ‘ŌĢBRíØrî"āŽ÷ōcßY” ÚûŸ‚ūH2”;QE2Ëųƈ !Ā5ÃjA­äXČûz͌Žhc‘Ņ^ü÷ŲRCl’z¤ō\dw¤BMĮ? Yģô ×}?ēLE´„;ŦŒÁM=B‚ųAY9åF_ ÷t $5îku§ Ü QÃØ)NvjĨ¯čDC-Č1ĩuŋwąđd=Y}9HĢ;nfq—´É}ntœkãv€Ō€kÉɲ“ōI†Ü§ņžÚQžnÕR$GH‰î‘J™ŦütÖiŠ…jÎŨyeĩq!Ø<6ÕB;TžÂ0ōĩĢ­šĮ^Öŋq]ŅĖ3g\BŗF9ŠÚąfūGfæŪR¨ œģ]ŋŽøā•Î0ۇ.YÕeØ,včړKÃ=›S }ū¤Œ‰ÅKâØË¤×턝Ŋä|QTâ”™@—ÜÂ^Ė5Ęu/Į}Æ˝Î˙>†°¸[ đ´j%š‹éúč÷¯w?î†a!$HMrc,'˰ÁąīnsŸ5VރJönqæ„Š˛P1Š8Ė´Öčƒoá<GcsdL"]!™čÕS? ōĮ:K'g,s„ŊȂ?wkU¤Â-ôbķ~"ŧãq‚Ē ŽīšøWŒė!™ŗ’CH[û$n#ęF÷Ļgô>IÃŅÍ÷3û 9Îâæ p[-#´äwáŦÂČ¯šŒž Z7”˃ ŸæŸnĒÂ1u ™ÔãCZ<ΐyĩAĮ€Ã ˆcÉcpĪ!Y\gņ˙z'ų[ˇÆ‹ģȘĸwģQĪŌ5–īÉčf- œmh—>š*žŽč,ʖčcč4ƒÍÂ$Ÿ6ģHšDbŧĀĖBe Vūģ5Ķ&­ō%°G?$t§/õrūõë’,=¯ØXū%x#*3cšˆ–r×~Ēdd~?IéžlŌ ‡ĻÅÛķ‘6ĻŖ7•†L Ĩđ ]őéīŠ´㴍ĸ$ĮGUlß07ÄslȖéøū1ø’÷&ÜqqÚUf‡k€ęūŽyũîu '{HP’8gT4zôÄ}/ēGē{Lũ벚GŪׅSCÂfSã™-nÕ­Š:‚a¤K’Ƅ^ !aBf ęŽ'˜–B,ÍĐ`ôq’Ãw÷H`Ã-Ā3ĩŦÅ6ŋrãëHZ‘Ē ã ÔMŒb>ÍČ6"Đ÷uC@ō‚Ģ‘ Dōúiiá2&ƒŪzE71 ü„Ô Ylë€7Š=æn¤W0Č@0HÖuđ&ÂS0‹.Ô.éošËžx]…äĻG¤ęû^éˆvŅŽŸØđ/4…ĘÆoņģ'jĀ´B”æēyŪ@ã_Ē> <ˆp  R “¯fŽ='& l.ļ4wĄËo‚JŠ’TÄåvs7;)$¯D.ūąë’Gä×?SǚųŽâa"ĘšÛ3ķ”PĻžÔˆV6¤y7Õ+a—Ęj? ÉxãĩiŠzmc}ĖSęæ4râ6ƒ¯å_a­g MŠņãՁÛ@ƒ>cZ8÷˙Ú,Ŋ*ū&ģđúu 'įëņQ FŦÖiĄŪ |ôjwĪČ~ūáTĢNEī‰ĄeīĨgŊ"°— '§V8Ŧū-5ēÉqÃÃđÚ[ÎîæÆQũd†‹‘Ä6ęÉ"ūlÂNI•ĮFūŲëRv $7ąÖ)åŦ ”2jĨ eŨj¨:3“ŗöZäšy¤ŖáDŪé4ĝԴ%ĸ—'’ŽČ4r–7df÷{oS•đ‰H¤M^ yh˜¯É搗Z{ŠmŠ"šškYË?ŋūēÉcŠ\ĘeY $Olô¸Đ¤âĒģxv^b˙%“ Ö¯œŅQŪ§Ŗ­Ûæ ÎnWHœ9Š(ÂFЃcå&’fd2­Hpz¤V6l)S…$#jōŸ@ļ\ŋŽCrÁĒéø”Ią¨j-|™ų4ΤŠL0.  †lĩQ]BímSž (xB^ŸßˆÔęhã,ėŦK0 ņLnMHĒF6™7°“€&Žîķ\?ųgW*ūyHžƒčīā$CSÁ,•ĖôgčČqp–ņ{¨‰-R`Eë02sūG˙ÜΒ2)|í•kLœŽ_!í1#Õ§IŨt„2íÜp™(¯ĩ‘ÍYjáįÆl˙íë=_Æ5ģ;¤7z zš›¨"¤ĻûŠÁ2æ“uČŨX.õ$ĕs#ŒĖ–t`.ŅcĖOĢŽĖö5ķ}dãßä $Ņ$6ŧ XŽ˜Vxø*ŋuFŨ‰Éz’3¯Kœ éÃJ Ņũ K’“đ_‰$ōʋV‚;ĘOŽuN[aÕF˛2Ŋé({)Â`~$¸æąCĸ-|¸<ųȓA22;7–ōęÁÕžÉ'iwļū÷åēôŒpQ­3‹B ī×y–ßž­Ëšļ;×N ũgŖĨtM@U¯& Š–ˇFÄ\w: <Ǎґ^ƒdŊë—ļéŪÎĸģhdũĮ¯k>Ļ Ã ƒ ĸ5ÖÆ(ŠmŧLjŅÃ˛TûŋļÛ(ã+<+đdåą*Ŗ6‰™‹’ŽöŲĨuéŪ;‡˙ ×5H^ž.s!׀č?Lįēā‘åĸ>ã %x™đΧ‘Öū˜Ēų+<˙û™¯CōęÕąQcœ_Õˇ|ītR‰l!펭cüŌŅ5ĄdōbP¯Ú× ™ã–~š¯nâŸŧ~en¯wt~ęēĸä!Zū šä}ú~dƒMFÅ6ép eū >ųEH’5˙A7Å×! gūĨ%[;’ 5yŗļž{îķļÛ8D’E/š=`ČN‰ķ4ėß|}'ߝ>rqÃ+)¸^ĩ)ãfO-îČ'ĩ}sÔŪ‘ĪöMÅÉ˙ZH–ëķ`åÅŠŊ7)ĮėŽļÕΑBÔ Į´Ēō>ĀéôuHū{ēøđúíĖ:gĄÔ2>°@C9āäÖY=alíå'Ļ?ũ×ãäWn9ĐIÆáe´ĻēeÚ§Ė‡Ų$Ĩ!ÖÎ< ¨˙Ĩ˜éúēôå;Z<°Ŗ_ō‡›ÆļxMsМ›ĶUâČ}/ ÂĐYį¨˙¤ëoāä;°mƒŗę%ŠÁŨú[8ŲWMŠØ¨>š~?$sV™ ŪUžMynüĘß?pũsæ;*5ŋ7wt$˙AœqxŊk"ūÕëųģBâŋ’_¸>ßķ,TūĘõO˙Wų_ Ũŋ É_ÆĖžĐũqL˙}7ûŠ؛ws IDATäęŽūúĪ]˙ŊüĶ× $ŋ)§ũ€dWØggöWŸî‡ÖmõķŸkŽÚŽüŊ럁䇾Ėq‰^í^Ãëc}ŊųeĮž™‰5‹<0>Ŧíæü A“>ļ÷ČyßBō¯5xįú' ™~¤n?|äWb[ÕmįŖ…1ũõ ‡õ)l¯APüŨĐŨ_šū Húvņû6nÍäĻ**õ˙˜WÃoėéX?ÉOj×5vR+^9Ž)q’QsAcįčÜĘR`´ ˇŠ<MĢü3+i›! ÚŪ%ëø;ķ˙ęfõ/":Î=q8ĘīōŊ#ÎZíæŨœ%(› L@jĐßņ÷vĘŦB÷č’LúuųU3.˜-„7PNˇ8MˇüŨ풷VAøņ˜Ø.ĮąˆÍNå#iár['ķ[6ũ{n̉ŌGš`y:ŧ˛6(0+øˇ EAĸŗāГŽ!ō#øī†”ŠøƒŽG<ņŊU ā–xGûßņŲŧ9Ę.–yo+‹ā Į;f-gņgž/HØŋW ø=ÔAØ>°ÅąŽöM‘đÛVaT~XG_Phi˛ úKO˜͘ÃņtĪ\uÅâlŖHŒëāQÅ}`4œînzĕ÷~8VødžÅzOõÄ[ÕÅøí×ŦÔņūƒ=ũęõĪđIYâŌÕ[“Ā5Ž •Ā„mA-„RŒE Øå7Đ)Ū‹;-“?Ã;œŲ†Úöí9GQãŊ$qdBËstÅĜP¤ZĐÂ=ËĖōģ|X[^úī„Ą^ŋ’#:ŲøĪiÔ"á4|ÛHhWzXũ…%åžÔ?tũ#Ŋņ ?úX-Š*ų—ēŸTīķĪIßĀÆšÚĢĩš~ĄSşöZ´×7€äÉõ5H~S§Áˇēū'×õ¯CōŋŨ˙uHūõ뛝Á7ä¯CåÛÉ˙UHĻmÚ^ĖfįUAŖķˆöeV0+ÉʛŦj<m ų›ŖëßÅÉ´;}äĘĖYį5¤ģŽTכ^fŗ¤ŲßFbė_˙~sũːŒÃ’ģÚŊŲ5mĖv!Ĩđî‰ũ#?°Ą?7°ÔŊô{˙>$ĶŨøÕpo+éĩ4§įšČÎ&׉5AôÁ,×uxÖĘęßĘŋɏ#NŋvmOlš2ŧC‹<;<°ĄRR’ŠÚ[WgsüĨĢÖåĻßáúë8ųUH~ø9"ŸUŒ´ûÚĸž ŅH‰ÎļßéPi‡z[÷ŨŒMCƛŋtƒáõ/kA6>x@]bÅp tūņÉŊQ}āŪ…ë­OOēWđ[JĖū$…uíE5ų[~*ŦsAÛU¨->ŋqŪąc§šÄŪ^ŧTøh‘Ūģ]v?\_Čeb×;Ũ˜0ÍĐiĨĐūę×_¤ΜQļūF”ƒå|xYKãÕÚ˛[ÁĮ­ŗšUÚ[hĢ-sr˜‹*ǃ%ÜäjßžO9ÆuāuM,hSK­ü\(š_NÍ´1Jņsâc}ÍØ~Ē@t͝Ŋ”nbnkvpė$GûÕå‚ûŋâ{YZ äĩaĘutĀėū˟vũœ,ōõú”ÚékøRû‡ ̐* á.ÄuÛ;Ē”ĨĖF/ãĪŧĀž}ž¯¸’0R~pˇl˙ŽÄ Ā§ōũ:$?ÂIžžö'˙ø$V˙ØdęGb_s÷ˇw…ÆXm2jíbŗDuĶŖŠãa™?ŧtŠĪË8J[A MĻqš`xėęyL‡Ŗ^¯LM\_ĮÉŽ]ŋj"oyĄZ÷WĘĪĪü'ÅšíF<įzäiY)léąwšVeD.ā1Ão"gĻĒU~¨H&ˇZÎī8ö㎅’ׁ°†ÂÚHšŋ†“ī_ĒĸØX"ÛČûú\dĶGäX`ĩcŸ žˇJÖ”ĄÜÚĮɧՐ%i;žˇ^ÖŖ cW/LÅ+MÁŸXį5îrŌ¤—×OŅ=—§ËFZÉŌoņ—!ŠĪŖh¸ĩ''˙ßW}´lC+RiRĸÁ#š‹ũ°éX¯uŌŅɑÖ0‚Ûrä“h{[t†÷Eę~0€îļŨgg+Yģˇu¸SĸļeīÅčĮc—Į×;īž'õ5ÅēķôÕąW‘˛ ų¤4/B30Ļ:_ˆũIOœQĸŧ"ĪÎúmčB^+¯÷@n*Ŧ/ŧWēžÕMĐËí¸ųĘÚ2ŪPS’cĀ(ģŸų§KŸ4SŊÚi6Xē6…>6†ŨĒúZ.„ČŲú…Íu8XV+Yų`ēÚüÕaôĪ‚į}•‰í˛xĀŦXN?øûôĨ:82Xö´ė4kht…x°e—iƒmhGŗXYqøŦ-íH&?‰lLxe‘ërļqÚō¨‹#?õÂ@éļ'˙ŦíĐXKF: Ęī“āĪVôëVī‘Z<°ŠIŋŪ.Ã%ˆ2{‰Ų‡8ãĘĩí­hŗˆU āŠuęb#ãKS|“ŠŨįa÷+ũ‚Ø#-Ž:Ųåu178•¨t“ŊĖĸĐZä¤ĩ˛ښ+ÛbâģKo9$ÖV>ņ: Џŧččœī8Č×ĮQņx¸Pšėut";õeål 1ŅģrĒVpÅRMËמÉĪ=ß ڝZø}æž„¤'ĄŠiģH› Ĩ䰃ؤš Åē— nĸŗ_]ĐtŌl3 agëlØōEŽc`#%ęŌ¸æiÍŠ36‰æÔm›(Z{‘/÷d3Ø2§Ģ@ŌĖŋ[}oÚ̊Ûz‡įHĶf;lØØHņڄŲO iß †4,›C;:í˙Îo@iÛüJiąČCmžFHrˇ‘í#}:yĩũ 79æ™]^bMŽJĒ•TŦ”Öė’ęØ<ß:ķEœģI3åsŽf}ûĀ4JãXr˛•á÷r9ÃæŅՙ#Ŋí+N×ī0ä÷!i4`‡Ņ;iL‚ΞõÚ 0 =8G}h‚¸_ZŖCÛÛ8Ģū‘v‰ũĖ[ëâ’/'4–×fĨohL{”?WWöÄ›āĩ?ģ0ĢįXõ˜ĐĐjđĩu+€Jėã m—qėšâS÷Š7yÉ`L#‚TÍ)ËîUe@iÜbVqô—OÁ@7ŽkКí˜$ÎŽ\jŖÄ¤ĄĮö•ƒC06"ÍėuũĐūÁ_į“T].ĻãdípČų…K':8Ŗ))C= ĩG%ĮÔ?;#õūû[ļ;–ã^o14Ņ…"fáĖĘäx_ŋģ\‹(—ø/X(_™˜SŽãŦŌt!ZĒō—ŽÉŦƒ˜Žkİė65twˆ=ûŅŽ‡ã°_>åØä'ĖåÖąŨũ­Ļų9X‚N āßÎJDËö‚Ėč|8Ē/ žs¸ŋOPƒöМ™›ą‘Đc˜É’cáT0šĀĮ™Ũ,ĪßpoŊ¯‘°Ų@¸ GܓbØâŧŲšģÔō$_:pBī+)#zŋ¸}ßúž`Ûî–Ã"WM|ˆãŧ–Õ°SČė†]đ†­×8H 7ęœ õFŖ“qƒ._|öäĘߐņŗ G;|HāVÛY6öĻë<áKnĸŗã×GęՒÜ|.gŗ –ÂoåöüYÆV#P‘ã#ã]q™HqFQǧ_R+ģIâwqOūŽa¸Íû3\Ųsŗ}lkŊ"ĸö°đt&CŲAĐhJw‚O ‘&ųNeŸ§]Ŧž.|­ž\U-îËSāÅĄˆ‚W‰ēļw¤¤eD?. MÆ#:Du›*Ļ4öË-ä}ē(S,ëÉ5îxZwąx´(IúũO†Ä?Aš)ĨÛûqŪÉPgT˛#: ‚Ē,|ÂūY޺Ć'Íic×98}c¸9m&}žg~5PŒĻĨ)åØK]ËA9ĢŽcŗāēb/3؇bÔˇfUi[ n<k`2ëĒ˙gšãkģRo ZļBS5ĸņ‰ž›š3†¤š Öé°īŒ¨á¤]/^'ĀāH”°(H‘2gĸ×č:‰(lwÂI´Ŧ™*ŌūVŽ7Ŋî –1…X ŽĶÅFZ„ŋˆä@{_uömŽÕ‰Š^ŪĪou3šķĐé ņöhˆĪūĐYZ힉ö#Ķî.[¯øBær´S Â{2gIå*ÅŅŧBy(Ûe[ŦH ų¸ĀLųMž ķeb‚”räJB:į;¯îŪ“?œ–ęŲ†'mC[č&^ëT°ƒú>x‹3ũôĒšČf8ū1ũlŲ7¤––uង9ôI÷ !bRö†TI¯.ē[áPI?ęŲf$Dûč›ZHÄÆ|WE—āÍgõywרÛę×ęÅœžØÁũ9z€Ö ”)•nÃ28N„ĨCķ$4’€›ŨÁ‘“֘šDЙ孺YĖ]kUh˛AũÛŠrĖ Ípâ {Ũę‰å÷ˇ{ĩ;ŌhQ(6­jŠ~=ã ĶIĪyÔ×Jn‡0 ~nœ‚Ūā?Ļįô|–ײY,žÉ{_ ÅD –ZL /Ÿ0Âsæļâ_IŸ`q˛üt(*·Aüˇ]d2Ĩ&ÉÁĨũæ˛šƒŨ4ëđĖր3†)g+,äÎiôšP,0fģ˙ؤĤbâøSŒĒĀÆqųkŠâUáråÅē›iÖÜgČĀeǐœÁU=6ĮÖibZĒRÎļO<[h§ícĀĒĐg$9ƒ”#W—ŠŖīņPØžĘöÁ”Y/ˆčÁ‡“F4•.9!˜…V‹Jy‰ŪO z2~OˁĶxDWAyųZSđCŌĶÕÁQģ1HîI~^ŊpĨÚ¨€|4{cÍžŌaõLhņÆĩģ!(C˛Ũ¯.¨žO wåĶžđÃ+„ 'Z4i“@ZËĮ ÷h­ĻJ6šE€Ģ–NŊUܟŋ†līĩÃŊŌ\ŲĐÍ(Ü2äįáB¨­‚ĄÛeę€Č÷ÂÔĄgĮ-0ûhÔWĘFŠ.ĖĨ8bJje`PŗOã ę—ZÎá ktÁ¸äŖōå ÎRGÛÕĪŅôđ`€[´ĪŽž`šrV6øˆ˛CQL÷WĶų._ģÉōÍ ‡\›b¯`AšĻ‰ĄKN'EO›īŽüHå/‹N€`,hsR+ĸö?^bBŌ žqFˆrÎqœˆ¯Iap.ã‰gü>Õ܉¤wŗ)ëŖ Ŗ@‡d6„œs†9ÅmĮefŨÜ^1Ž.^Šß4ƒJSz(ÆU‰LKÄv¸ĸ.Ôè`l”Ѝ6÷HĖ˝5Ū7ĐéÜaāĮ°™ˇœ!BŠā%=!ÂĢôI|SåF÷'Ŋ/“=Š×|3‰ENĪŋwpā0æčœ_X5î–VÄ%R^ɟ,/Íw<Ī'yÄNķøŧ…tøĩŽ ˜æķ…xÉūĐ-ē}.DD&úYģBʲ”hh0-Ŗ~naģ§Q”ÕŖģ"â–p§Ēo°T<ķD­™Lbâ(j#&<:°1īåûœUNğ1Đ.1Qv1į0ēĮ5}˛ntî-YŗžķmĐ$slÔčTđ †-¨~ch@‡‹÷đ¤dÅßéąƒ_ŒÆV°”W‰"‹~Ô/Ų:Ũ0Ĩ1Æ'Å縘ĘŲw 9pLįáĖú§EãAsŧÎ1šĒ6ÚMÃpŠÖæŽų>*$+F…¸ÁįOŠPƖ0\e`\•ŦiĨ+ q‘Ļ 3~øĐ‡đŖĒ=‰ĩŽ)Ît.‰`Ltå$é&îâ)ņļéÁ qúē`u%ŋKHŪØ3ŖešAMrŽSŗmĘpÍ-1ƒÅû–ąĶ¨VÎÆâ„{$7UžÜæļ€=¨bÄ4Đŧû×ܐ,;ôĩųåšŪÖ``!—^ũ`LLĖ4v%oî |ŊČEP#Ąļē˜—XÂņČY*vu•îõ~^ųIuöåå,ˆ{INŲöļ*‰6@ŧJÄjB …¯Ļ"bfiĨž§lz eQVøæƒeŦÆHŲ@˛¤"iōOہte‹YĖHŋ€QaЧŧ]f^ž č̇2j¯4Ííũ<îŸaœŲÃOæ^t~ŸŗUŋP:•ve ŊÁ"THĻđĐb–æķ[PÁǧ‚­ÅxĪžŽ^]]ÃĪbāĖįzß)đëb€]EŊą|WĶWyŦqœ´ā†šŲÚļöSwLĮķd§~ōC֊nJĪcj.ŽerÉų  )+}ĻgÆĪp7ųūI`ķšúņÛđ‹ŦT´(‘QŨÄYŽÍ¸G"=í@´>Ļ•ØĪW[YRJ›ų…węO+RwkœĮНTCĪŲŖZön ļX˜!C>C,um‰Š‘ņ‘+8Ų^§ŪqĒ]råÚÍwqës¯G¸%܃ĄŊYĩyŒ%›š!ŌH'cļÚ*ũ‰X&i27†ōU~ŠŠ7ØÕ™*‚ā‰ŊCQØKՍã¨ëhļ˜Õҍ‚UY­7oNļuWv!ėũĻČ`MšrĻy&r‡[åhŊA‹m÷$ ĀŽ^B%nȘ×vŦô™&c)Č^‰ÆčÉE`SĀv*ž@MėԌ¤†b˛ĶņåģCäŦuØ"ŧēžYĻ\xĩOčē›ĸobfŊŠŠéļ•ŽwĄždīRF:aŖZœ“YäÜk?>åAÖĘ{ã5H‰Û—°ČÖÔe†Ņˇ•C—‚JAŗ_}ņļDD§mYŒXâÆRķ‰ë}ŌXÚŲ)Ŗ•™-žÜūëX8Ž}ēëÎč0•žŦ…1Ė˙NĘBųįãigFMÄt‹†>ÂĖ‘ą*ĨŊí;f’a9…§–ûÔûÉÖÖ%%p2UMËÅ|Á eĢ8ņ“zÕjĩ§'øĢ6Ĩãxo/{:Āõc1.¨cãģ¤Pŗ÷ĶŊ­§ŨČÔ§’ęmC|ÂÔ/ĪAwÕG;é]S?´Vėeę×t—,G}aJå˛ĘcWÔs­{W™ØûÔ­Pė)ø§›ēíĪ%ŨŠgƒ-b—4LBëŧwáėš¤Û¤ŪSēĢ’ÖX<ŧÕ~¯ī–lW*¸Čøj\xöuĪ;j§ŧ*8{p¤1k˛ đ§BŲŦC@Z+Qt{ŠŠ—˛ËÔįŠŪ¤‹ÚtuéF˛{lãÔä,p‚>÷lĨK&+…Ļ6¸&”mB\@_đ Íkx\Ŋ–?ĢQqbÉÜ ›}ē¤ä'B\[uí4ŋULg•x끉ôå+1ŦMSéķĻļ…*ĖYHžÎM9õ+ y˜VÕÉīø€e ¸ķæ‡ĶČ˙5†äŦÄ{4ŌßŋŽéŦ†ŗá^P>äĻÄŖ`čŽĀjąULXLûėææŲ,Yđ'ãĸ7ģlMCŧŗP‚PĨ;xĶÜn‘Tđâ™=L \„ņõ€L6–Y6Ž.Éų—Qņ*4„ŌÄͰU1œĩbļšČ•ãäĄĪ?Ŧq–xčaúÜđOr*øŖca!īĮEhk9Ü!‚ĢsWÁc€Vd29‚av_ĘÔ ’)iŝ|qå1wú,•ZÂ1-š`đí5‰ūĖ/dq,[ŗšĸåĻäaΎ>ŦŊzö…úČîaŊ÷Åh!ŲõX˜^øˇ§Oõڒ/ĻæÅ‰Đ˛Ķ dĒ&>ŗÂY÷‰øŨxĩ°aö˛<ĀĨ‰•ŊÆ|P[{$Z…õ&Đ‰ŗCר1­PX•īk×køĀ2 ÕÁt<ķZƒq}™€&§â×[›ĪqPČ4B€ôá°ũ'ËŌ‹~Đ+\JĩsƒŌņņņÎ!äM -4ŧĖĪĄö.|O傐&‹~ 6™mY´ļPeQ(Ė˙XĀę?¤uœ”‘ãŨ42ģ@‹Š‰ųÎ÷” )‘Pė’â”%¨ŧŲĘ_øéiĻí‘ŊÚÛ˛Ņ&¯Æy-#HVœÔŠ.e7OúŦ0đÕ%Îs@Ū(5oĨbPkÄĐ{=ßIĻĶō¤ū{(ž”šÜĸ˛‹XžÎz÷ŦLHöŠtž`y"gY”wĩ\ \ÆˇÖe§ŸÄ1]‚’5'ßdTö ņ XO?†dOũ\1Ĩ{ŪĮ…Û2Îĩ^Æ=¸ zŅK]úŧs~•8ā™iŖß?–ˇË‡Ņ'NģŠĄ^pIú Ģ)&zœUžØŦwŒH2@ā#8 ŠįŦ<|–ībÉZįd#ģÔæžŒä4úäŠĪã,ļWOŗĀœžSˆ=ÆvI0tĖōŠęĖåâųd͋@Ųlu Ô.įÄĄ–­áŽŠZëüzB×ŗ5 ãØ{ Å÷{cœ‡{š˜Ļ-V0rî4÷‡Šƒā%û¸ODZ6Ņŧzd§ŗŅ9K˜x˛¨/5z@g”B_Ö¯´§q˛äˆC<ĸ_Q ’Ļũ„’'bƒÎe‘ĩ™ŖŒ]¨Ēí™.îĒã?ÖšĻoŧpđĨ^tÉĘ,næøiØũ“ÚYāž­î”Em^&ŦuŋNknŌxŠFR\.9PÛžũ{ÔÎ=Ŗ.ŽÉ> á¨tĄ !™R/ĸģ+0H{Î;}ųfŦQEËŪNŅü,„9“+×íÏú§Č…ĢdŨ)˙”/všj/ŋ2C؊økÚËĩ~á-†ŽXRzĨ*ĢL¨čÁĢLØ´1Ŗ~_>GOˆĻnœžál@ĩ~”ũ,j9 ŽvβŸėî˜ûĘuĄĸ~>XîMg°R1SX¤ŅŲ;W0'iąfæ/ÆđdŒ¤Œ ã,,¯áHq™ō š@ģCFëĶTfp%ŪĒÑYR41&w/ ė Uî/ĒŪÃ<Í[<ū„™O‘ÕŠŗIčzĒĻ]ƒ$–ŧ.X4끓<&j‡úՎ!)@2($gWŒ‹6’ō1ŅgĒī pfčuŦ ā ĒQžM4Í œŪWyČ9ĨĢn›ŖûŒŊ%’Ũšzųz: K|YG¨ $PŦ\ėsÃØ+ĩYg^`K(@‚Ĩ°?bĘÃ.:ØLĖ_zũ{ēįrâīĻfŦūŋX IDATāX Ņ„l§>ŠVõybAfw)ûŋŊÚ*ŽÁÔËũ-AŠđŧčʅ pš¸ÕhOTß)-$įŅĨ~ëĀ3_W¯IŊÆŽ˛Ė¤Ŋ…ÕŅÃG ą|ŧv0u†Ķ⒜ũ%‰ 6N§ž‰øCŪN‘!pO—_i5‰]D:ĸŋ4o˙ë÷‘˛šĪäxŒ”ŖĢhû֜2>ŗ”‰uˆ$kÚC€×hUZ×…īM#eŦ3šôŗßUƒęĪģ–Ŋ5ęé)€ÃФŨŋ žtĪUõO†0p—öÉëü%ÖÚ0ōČ0*Ņ>V¯#ŸTÖҝē,Ā•¤ÍÂ3ˇēaš3dūŠ‚Ô7|ĸú1ËO›Ë:ÕąNēœ•G:†4‚ÉĪ.?Ūlfyŧ"lčYu˛Cŧ$dW{‘%ßXÔų8sĘ*ér,ŸËIĖ[Q/äbĨ°Ļ_–ŒđˇMtõ$^kPŗ´ÛÜ2ō gaŠ™—umpĮ} Āf%_*UßŗūąlHĩ4={Q1ŽÃôꑧ7ĻâĶ ˆā9ër~0ÕKŲ‚Ō͉Ĩ!ÉŽš[…ko ßŗ÷ĩ&Ēėƒ~O‡íŖú.`¤ÖZÜX• ˜×`ÃZĖŽ}‚°FđČy‰ē!@ĀūZÉžâ‹GŦĀiķM8ė(˜X•N6ąžŅˆ­ŲįÔ!xÉ_†T™ ü:ĸgˇŒZ{?Qœĩ_ßW ÷rëũuÖE=ŧ”T8ĩ†~ŌÕä”u@ĸ•ŖÄ"3-íJqf]ąČąŽRk`d{‚’Ā oßkį\<|ĸx‚æ=s˙á-:M"H YĖIúą‰Žkūú”?ĻnÆŠņ Ä)Ŋ)äFŨōīCO4mĸÎĢ3áÄîaŪoŦFSŽŲ“Iamī’l댇Ą¸Á;đ“tĸŒÆNų˛†öũ"ģ×cö—W]¨ŪĨ¤T8æAđ~dEW’ÜnžÖ[Ŗ+ú…ĪGŋIw…On-ÃčpYÂxÆÂ[Å.Ą ‹l&ö\†=úhŌ¤ÔĻTÅŠ’FĢ(T-ĄBĄ=ŋŽĩ@˜cí¸įÍäqā]í×ÛtĀ,9gĖ‘dk§”ëj{]晇âÔ',|yĮ!…Î8ˆÅŨ2âķíY,E‹ķxRCĢv—IA…žÅ´Ņ}éĨ.,fši!ūŎƒŽ$øŠúėš[Yo?…g—[qsƒāŒØŖAJ¸úÁŌ¯J­:P5€T:’9/E˙8•Ī sČq֛æ MÚ_5U§8^ۃ}PRL1{9?'$IŅģ^{ȓßo^įy$p†8Šqķ×Ã='X ™ÖĢFa|‘ÖM€‰Ë~Č8ĸúüz{ŧ„Į_6Ú2“ÚåRŒ—{zFÔÕЕ ‚Ōö¤Å+ėKšīãÖĪÜa~ä1šT}ū ø–Rí 8¤ū™f3Šā™i5š~3P[dë„÷dwf Pö¤­ˆŒ”94L{€ŗĨ3íçėŠžę ë Í—Ļ,Y'Ķ‘ā×ô8ųāĘpÃ-–Ė˙T{ŪÎĸxĀ€X°5™I.0ņĨ—aZ‰ė]“3uW}[…ØčĸW<ƒ™”„5Ŧœ[ˆĢS{#ãģkš_Ū-FŒōĘ´¤ę1;÷vč?P”€Î ŧ(9÷‰Y’9ŨrˆŲ’ *b ŏštVt}%ĢŌ 1ļ.M)ēF…Ī('Į€øĘpEMú Ãj”¯AũVcn$6—Ô™mxf­•¨~KNŦĶ$PĸNÕŗL„ļ|Éū%&îDmfâŸVŦ’ëÁŧŠˆ ķ‰ųˇŊŗ÷šŋ˛%ī+QÛÜu›kžÅ.7L?{8‰BôgĨ š4Ũh˙ĘŪ{č Úā҉Úu56ŖÎ̝Ÿ48™s x“‚AéxˇĀLJØC’˘íŠöC‘:øq Õņ)äáČĢ ã1ŸØZx@2m”ŪˆeöYÁ~.`%ë‚-¨Éāé_čÍßÜč™ŒTûÉŨ肿[-–:_Ëũ[ĄŽƒm^iˆcâ-X€? š9ŅÄíHĄėä`eøŌ‰*%‚Šu˛Ĩ´Ō’„,Y›Qų“˜ĩŌ‡pĻûŗV&@܆ú\ëL@ŗˆ.u •›ĩΏŠ’ŊÉnā›(˜yNū"J­ŗHJˆ˜rø?ŌҚNĖTG8Íír¨°8V}Ģí;äVŒ= ë3k:ë5H/ĨĄM`SWvŦŊŽ#‹šâņ šRV/,k8ęm_ŧEŅãÁi[ņĢ=r‘ČŠ”SÁˇYb#ƒÍ$˜ĐÔÆHĀwĢm fTëˆoB…T ān ƒĘap ŧ Pd."ü-Ųpž¸ÕGŲÜžŋ. IŖ× MU)¸÷ûZ:GûÃY w oŌC>čöf.ķŪ‹kēmzēIŧh]%ą:īdÍĸgoTKu*dåQ;—j„¯*튖ŲôWšUūו<ôåįj]̇,B´^đÆn…ÚØ.Z;u}<`™jØŨ_Jé̐T›Ēų&FHUdĄîVV˙y&û!˙ ×3jSG4*üĻŊs˜\m÷N˛|ÉkæŌã-}cŽų8a•vä×ĖęzĖbĮßŪōėʏß(]œZëŋXÜSU3,¯‡Em)˛8P5 mŽŠ4MV›ėŋē‰+ÔŨõīŠt^ŲDFHƓ™ûāÛ0ėY4Đ@1 š­-vÃ:åA¸=W4XráÕܖ‰E—"†Ÿ Náĩc}vĐn˛VÚ{F`ŗf+t#æ AyrŦÔĀjžŠ.n_ a'› ÍĻœÂ|bŅÍŨ†{ŋ>ļāŸ,WRO@K‘Ŧw1E—6EķvŦîļõ*&úõP5°x\¯mŊ."“ķŊ&ŽAhwÅgšÜ˛2Š#ĶĘc˙*`ųMF{r#‡ļ­‚+k‡›ŅÚ¨ZÚyÉæxV:wNû3ŪNŊjÖm425h+Ŋ>^ä:NvvƸaqĘŊP;A˜ ëō?! ø7ÕÚs’Ô­Ŧ_{šņĘ`‘fEÍM:-Ũké_=„hÛî\ß]ŗk 8ØalĒ4OáMq–Ô™ÄŗĒĖ˙ĶŪĩ(ˇ‘ëXÆ*§ĖHN‰ŲļŊâŦ´v‰ŠļÜü˙ī[âāĢ)Į™›™ĖŨ]ÖLYV‹&A<„nÜĶōŽCʸ Ŧ.ąĮ(šAčõ5 {ĢŅkZ1'éĮdŖŗ?nōÃĢTžz;["˜§ô˙Qäv,ÂĶ,xƒWÔXœ”bņAmŽhč¨>—ĪŗĐôu Œ˜BUĻ™Î’d <ģę†0lVÅX´äufķ+i.Q4¸‡˙:ÅÖwëŠĨ™¯æ!D’DĘsdnÜ$'p- “L[īā-€ę §n&Ë%gŒ¸9/ųö ­K6ę­0‘ĨĩŗôąĘéĢaOŽŽqv\FĮf!ųTķ‡^éõ͖îmĪ.Nw!n”mįŪÚxâ˛ÃīÕ5é*_3oų‡•QčQIģ¯I؍°t˛pYļ@ųną3ÂH?Q¸ēü+‡_䁃!’$s^ŧ׊ĐąŖšŠ’Ī-¯Ģ8ķîŅ~Ō3 Æg œ†+„ÁÉōĻs'ÚÖŌâÔíųF_¨nē˜šŽų\ËĖqr(FnģG@†…ÉÛŪ¯cāNP*Hœ^ĘėŲ`YĒg ŋ´# "ō ĘĢũyÆŌv,ĘLūŖĖ{t0“()˙ąåŦZwŲō¯ú} ēMŦĨ(R÷v§÷•AŦ 1tD+Ë%,Xü§Ē6Đ-XDüŖˇŠåß×Ķ=˙Lëß!AžÖ)a›^=ÖęČC WÕ/“æÚō›’~Ŧ{ĨĮ0“™¯sĻeļe ŝ:”{Õ$VrŠfŌĨēî.ߐīîÛîÉß_í9|§FĖ&r˛ :'€“›wvnáÎļ1*´>ĸĸŽģ\cÎ{cz1u÷Í ˇáô#ĢܧINØę*•3!æ¨Ü"Íčl HWzŲSriGǟL˛úSÆ>ņĶoˇt o9K,ÔLž2*cQę>åž1ōQŧ ČōsȗĪS'~ˇ@ú'Ķĩv= ­kŌ΀‘S"`Š|ĀĄŦ_'÷JO˛(ËėķÉX‡PÖÁ7žbāŒ›į¯ŗĄ,ėÖsÕ5?ŨQŠÆwĩ:†hnNāpĖ,°­cŌ_Ž”^”ˇmƒĀčĖúVØ˙‚7$ ‘ŠÜ~Z*„Į8—WĶÂáú™[Ŧe3‰°Õˆph÷´ŨE§×œéĸŨ`„ŠÁHfy## íŗ3OΏļi(Ļģ— õV⠚üōa—4—˛ũöĸŧPdžq ¸aŠN98Ú'gôųļ ûpŧŅ‚\JÚ^Ō\8J\ü0Iq˙hws\Ú-A|wÃlĘ:i4&S”ĻīE‘uæDīģG^:Čéa¨Œ§›ø¤F-‘Ž]ŒVßgÚmŋ“œâ'ã=Y—~`mIŸQÎGÆwpJ§: 8jÆé;]ķE;šÜ×õę4L úI†¨DĢŽ DFŸ ŌoaGŒö<ĩđ•C¨Ô>}“ŋ‡°ņ´HĮį]÷ŪR39b#qú`7;´– 0VĩRĘa \¸,•‘fdĮJŠXāŦzsᾊĐ%Xۃ+Ü0NL„Šxov;ęĪ_ķ~do…¸ļĶŦŖÆŊp›} 0ž“ éŽ„Ē‰Á’:Až.ĄäžËHōĨˇI’›té(ŠßČg‡ļY¸unj…{Ŗœ ŧčĒ eŽöˆķ đYŸÂ&os Ą=[ōŖ­Q73|Änø`ú‘×$Kķ`€,‚ë.Č=‘†Ë΅:â‚`zPîēr×ēOHŖV7ŋ;9ûŨĸ,–[W ”eZm[Ÿģɰ{°&ƒ…f¯O S͎œ:ÕÔĖ‹I?šČ¤žį6Ä W¯ ˆ>KeGT†„BjŅ=Kr¨>wĨļvRIĘRÎS¤“Rīqšģ$æCĶ€Ņ AšĸhĀ%ŠĄŊãÂLÂãč~ĸp’˙ūŁÅ=—ũúLî ‘ą˙Bb/+Žē d ĸRã4€¸đrĢNÃ*°„¨$æHŋĘÕŊ9ƒËY6JVrQ€ŖP3UŌĀ0ķĢ-F^Ė™ßЧUõSDŋN&œĸōË-wüaü˛Z1 ”ēФās› ôÍÆųėJ–¯=´ÎĨŽúY.oUš„>3émˆJP™åįæƒgIF’ŊwR–žüė@éŦ°~jÜ.û`•¸Ÿ„§%ģ—‡ķMįLŌķ,wŊė~õ)ƒāĩāŅÛ~C¯‹ôÄų“xp ^ĸl;ކ;ō]qŒ‡VŲ› ÖÚlĸFl#ũŌĨ†Ųģ ŠŽcÔūĻĒ0č jâCĀ&>Ûđ5cU“ŗÉāQšFô@š|Ø;s)wIö÷Ú0­ã&EO….œæÛ ZÔôĶî‹LœÃ>ŽY:f>‰ķÖu|¤äƒ_-xÃĘoŲXŅVéîČøD¯ÉįS+“†gD4ŋĶ++ˆ]Uâ֏!ÛI߁´ÔE›SK“ā)[1`•ēUi˜ô˛éėĐDÉ3ĪąŖā…ģ>FŠīڝÄŪ}6•$Csđ$ʃĸĩ=ģé1ĸ]2ĄDDü >îM­nMj[T‡:Å΍>ßŗČÖô+Á™{ŖęN%ąÄ~ÕÔR\ō/‡RDqÖū'DlKÆ;CVŌ2}S^ö>ōOŠ^“%nŋ§ēXāMé[ˇĪâĖW’,G™ąVæÉéÕÚ_EZĐ_mæĨĢK`UÉÜkÁ#Âŧ̃ĶHÃŖ ģŨV? W/Ž&Å>}ķĄ6GųĶ(ÄĀūķV×5 ‡rČzzä‰kžåĩDWĩ Dg'31z§ Ķ/>įGėŖXŽģ…¯Á…šIšą „>ôΓb.ß´° NXīžŠB-m‹{÷ø`-É3c…/1—[Ž,â0qRĢ„{fIúŧ"5 ae{øm›TķĪ-Jßŗ‚˛}î´Ë܁Bu€P1S ũAŨŦŌņˆ§Ĩķ?ũĮŲÍa%Ū¯Æ3jÂÆĪģ<ÅpykčÕĖė5Ģžđį뀞D#đFĖŨ"É*K1`¸…EoÂ]>y û0ģėQ´yčķ´ëaQ >°ī@™Kj3¸ģĪ7Éĩ#+Âû@öÎaĶŠLėjnl";Bâf¨!ķa$K˜ŗa*sŌė1„cō¨4vĸRøĒ¨%pķ˜y>Ø}_I0Lėšk͌ãÖ^ÉōŅčV—{Õ9 U€Cʝ¯Cĩs#ŪRzū%¸äÃJŸŧ3œ_ZÃļ $ijîö–j\įęl ~ĨĸŠwÖˇîŠZ$Ú#š•t wá+&ú#aA°ė&PSúYZB$(ČCž}˜ŧĖÆq;ŦëŖÛŨÅrãÅOŊôæÁÛš1Šu ĩ儯úrũ›0Dņ—Ŧßí]Yl!„ŗĶŲ4vˇéž[.CAĶ’/ž døŖ =ČZO~­ÉgRu>%ŨiĒBōD€˙ķLôMmwķNIu},WÅÎęØÛg' ›8kŲ A†L€~`EâæÃđŅŽøriYĸßŨÔ[ķbN%ĮXˇšfÅ`ãÁÁä/)ĮēVœQŸ §0ŠKŊ?M x z Ķ„ÎĢȏ”8ŌįëŅfÄ„'ĖG&+G“mŸöCEīšVUDŠd생Đ]É!™—ņą4ķ[îĀØĢרōsI¯s.ƒA—<ōPM'Pâ‰s`é~nŪĐö3>đ[ņ…˛i—‰Ņ‚ģZhЎF’gpŽj Z{˛Eą7į‚ÉvŧH(ņ!ĶEöcV“A(6ÆuØ3ŽŽĢÛ´ Ū.ÔŗĒũDöpâ$úû5r’e‘Ž#ėTK˛z/ąpΝ3ą!K@ū×%øš Á$Z^ũhôdš€ė —hof7Ŗą ßÍŗAĩŊ÷™š"đ„ÔÆ­t xbņíŽÎÄîBlžy§Ž˛ĸû"–åØĩ‹ ž&2 ĩ•žą’ —œŅ˛0H‘‘üŸ/ņņ6ŨŖÁQ¨j¤ŋŽ O¸x ƒQ6SÃ"¤š˜ęX.tėm¸W4,|.yE^¯Q ëüEJ ŪSĻĄ?u(Č• VŠĘosÛØ „âŲ,&Šž•dˇsTĻj˛•´Í˅i°ąŦĀU ˛Ũ‰ĶGÄĀAÄÛŌ! I>S¤@U*ürY +FhŲ´â2l~0ĄĖ¤v¨ąÅæ+ŗĩĐnŪ–;€N°Ķ4—{ä<ū1ŊŌßz;ׅšōüˇ0‘Ž'ßžlo5Âęŋ9ŌFđŌįŠWŒ4ÍÂųČŅ|œĖ/Ž7dį÷áwįͧĻĮĢNá†Ŗ1´Į0ŖķoųĘ Ú_4< WĄō‹SüžDžÛ›HXXƒ@‡ŖcohM=zZ9`N_~ŗˇŠ?xą“G‚äŲ‹ĩ$Ų”îûėžgÎįŠˇ[V•šaYzÁPsH]ˆ•/ķwš‰ŠzpÄ $ÁLÄņ¨āS1GVãĒn¨$5,Y›N™ūBbŋ™¤e_åĻB]ŽĶĸŒđā/”VĶQü1ÔžŸÛöĢōž‰7†1ųŸv1tH¸Ŗä#ē>‰3›$)Í.jåF _vĖŦû.K\OIīWôáŅy‹ąî•ŅC˛äđCâIeâgr°"ƒ9RšW{!õÁzZJ#ĀNˇÃ )i]ŪT€>×AÅʞĮ7įÁ˛å9c2U>jĶŽŲŸ›˜9ggy¯(ŒrTVˆĻˆ˛J,TãfНyßøãųÚ)rÃQ,^ŲÛČYÖk3ī†>8p+'Ãö°ŸJˆRjm’î|Fyo†jjÚ(o[Ÿ\Fsk¤W.Qå]g6ūė2íüîXŅʇ0*}ĩ͝n @;¤X­ĖZÜgīŪŗ†:¨ŲA.đ ‡\éf]}ÕVÖJ“œ×؍՞$ĤPļ(‡ĪîËŽšP–+ą„Y7ũÜŽ¯į-Ī0ßĨ?¯ö~ˇd|줍čß)šÔ÷VîwaBˇēÍÚO´@! 4ëąē˛rģŒH¯wƒ%>)<– tĩŨęŦ‘eBą4&g œ“Ũc?:+(“|GØ7_7g' ‚”ÁŪ!3¸ĖmŸÁ%Ķ9ŊVĨÆjTM˜öVø<ëÖCÅ@DÉ"ôÛ+•!XâOŁ<¨#’zŪŨb\p´û'įW!¨‘7-_Nũ'ļ°Hī}lčWGmŠ<øYį´~L——!" ڜgʓŧŧ|&oŒ{ČŠy•Eˇ äŪ‹÷{L'ÃLŧ, đ‘!üôņûËsDč*čîf {…ą´*Œ™ ėˇČ-SšiĪĪE0 Ņ+ĸûœīí˙…büŸü}Đē†e.Bõá1‡Õ¯‡í$…;9øe¤$ĸŋFĩy•!žą7-÷(ĐæT’rîs’1ēdõ('L—e‡ą1ü‰Xę6)|>‡Ž ”P°3 ~ļÍ58•$K6ví6ˆŠģVäŨí´IŦ c‚C•˜ō5 †H Ā:BK/ēM‹e§ĩŒAk]ÂŊ„kúšāAy…4"yėa¤ãŅHr֜Vis°JŌc"+ngG’Dģ„š˜ˆRŽN˛ínJKõgųׅ7xõĻuQmŠ~Ô!Œüą=ŗĮ€M ’dĩÄIŸ\ĨōĒ´ ĢHāBČp„]‚åŒņN™Á’^Î[Ô'Äė!0Īļ–…Wĸ~(fĨô6õSĐ0ļJĸŊ$<ØŽ,lŦ Š›ø­ũŨËæ›õKãEžÅɐƒH^āHå&r ĻCŧÍËōÔvß@)QU_fÄQIwđ…Cüzų°ž\ęķUt‚°0¸ §Ë.e˛rˇ€(?D…„,Wã˛$§úØküéUo>ˇË—U • 5ŨĒ”žíŗ•!g†ŧ§´yHĪMĢ™ŦÁĸ¸ÉģUHeavũķåž"ˆkē0æęG ŠŪJ2ŠĀyņ{˜žf IÆÆø ĩ YŠK? ũÚžĩw۟˜ŠÁėB ã>} ē%ëYg¤!™@ŦuQíbOX"~ŗŽė î=6^kŦā™~ Tn3Ī× U•BōÄwá+ē–$Ųū/PR‹­ŗbũāØ2šNž[ķĄ_;a•zĐË"ņ îīÁƒÜ^”ŗqOû˛)ŽuūÔĀžˆN‚ŌFԌ‚čΠ(AĀ%WˇšAšCŧÚ)íևļvĖ’lpũŠÆILĶ™OĐ Ą>K=mũץsB ŲÚ]öÆ­ä¤ũŧ æ8Eģ/ÉF"Œ˜šŅ™ÁöQ)”…%Į—daX„ˆœ$Yį¯dâ Dl_Ŧ;#-jPØu/8IDATrsøüíí2õe-•ĩTׯāÅĮQŨ’—˜Ā8ÛJ_˛”ŽŅKw0ÎnÜĄō^3GåŒh8yĮņzÅÁGõNÆ4šœū+GūÛJĢKÄ:‚Xøœˆ€ĢYtõÖIũ[‹æĀ…ĩˇ'I2œFU WÆaUŋĀķ“ĖļG‹71Ö0+PŽa„=NŌ7ęæÎĮ<ŲŽĩŦÝé¨$:‘Zƒ•is,ô~Ų­ íßLčžāÚ×Î˙A6fã:3Ļ0æôŸøļøíŖˆRKkū…5š´Æ*Ũ°_P͈ˆJZ˜{ŖtĨžĐŽxöŖˇ+žSˆKh3Ôæå‹,JŖ¤ ›y4mî;Ėŧ;DũTŽyÜr QáķטŗũM˙ĀÕŗųHĀ•Å^‘ Ÿ)"bëĨüž7”dūFlęMČņfIų-z÷Ēžmcԓ^åTmđ'į>ÁÖO^ˆ¤Ĩ{Qß'OÍR'BŠŦįp(Āw˙ °m\‡tšáíˇÕĪÜŧõeëņ1€ĸË Š&zŌ4ŋŖ”BŅĶîÕW7Fz2…uJ˙ŗ=V!‘ííĩ¨K´KKszk&m˙Dş´aöƒÔØ´ļCÆ=ÔÃōHŋīr´ú6mÃô.Ö0lįĩƒ°Å>w'Zß2‰zŒå€ĶːŋüūÔ>¨™ĘĖv$ž!Ø¤ņŽ~”Ĩˆjw oÔbįgŲ.%ņWz–Č/QëDA$đũ;cęÍ ĖFšôfķÍ×SœVÉ.JĶCœä'íĨį ˙ûwg-S[ũċ€BĮ>Xūģ|UúJĩĄ3“đlLÛ\<Ĩ:üX–cp_ˆ]ΧŌÉŪ@ŋļI劕>GP†ŦN“įŏeå…ŗˆŸīÚ/Mkā)( Xwrž˜a–ēžē…â7ķûjrĖx#§VJ†ÁEËîāöĘųŖö{IĘôÔ=C.ã•’G÷G­ės^ûü‘QÄŨ-Š5ęŌû•øŒPãd4ØfÁ7ÕĩTEŸäēįėtA=$ۖk(3ķGŽCM§&Cû‘ôã•Cžv˜Ô˛$€Mqfx•9ÆąÛ= ĮŌ"H-_ üPãŅŧplÉûwš\7ž%uj3wžI“ŧø/8éķ'Š”û­į đē5wŊTéN§WW8KĐ=ēëNĮhŦ%Iē.0?oÔĮ{š0b@š'‰$Ö‘€ū•WŲž>4¨GˆlÆK`ŋģÎØ”11õ[;‘ŧ”Vg™D:ų˛$M¯œšL¤ų°´Å=H´ŧŋp“sôvzt77ų- ļĐß{ÃÁōāŽä9†c°&YáUŖûQ8í/ú‰”˜¸G,`Ûū0M;–j7x)ßX>ģ†{Š3Û¯?ņ1Tø¯ũšqĻŪČl0H2ŗo-sdČØ˙DPKSö9Ëŋcü%’ėũ?yGË dđ÷ į§Æ¯ä?øöūÆņ¯HrYũã˙ōø›õä˙âņ˙’üUã˙%ųĢÆŋĩ$˙QúųßZ’˙¨ņ“äšôÚēû kũ÷„$q(ž7.D?bėü}ã1™$F­-ū°ę3ņ‡qĄŋwü6I.ą. ')(Ŋø$š=â ũ¯-V,jßo  JX´[ėūoŠUŒĮo_“\ÅNuíFØ ŌĮScŽÍsú#üĀ\ôNŧŦ ԟ_ûäëņÛ'CQ Z“NTĨ‰\(’˙yC=ōū“ŪJë–ehΐäī›ôhüļéÜciΐäŊ™]F&9€-Į˙6ôs€)é5¯YĪō¯-ļųĪ?øēŋ~ü6IzˆAØ1 KâŲŖšE™¤ē߂|ķA~/.û8§øČl[)vúX1û_:~ûÉ_+*ģę*ŋb*˙Úøí’ˇøR^ ~%. ¨?ÆÅi?ņ0ūÂņAIūE“EjōōŪĩ—ˆNwWŪÕ˙üŽņ?´äVx';6‹tIMEÕ'\U‘DIENDŽB`‚leptonica-1.86.0/prog/dwalinear.3.c000066400000000000000000000312231506303110300167770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_3() * PIX *pixFMorphopGen_3() */ #include #include "allheaders.h" PIX *pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 124; static char SEL_NAMES[][80] = { "sel_2h", "sel_3h", "sel_4h", "sel_5h", "sel_6h", "sel_7h", "sel_8h", "sel_9h", "sel_10h", "sel_11h", "sel_12h", "sel_13h", "sel_14h", "sel_15h", "sel_16h", "sel_17h", "sel_18h", "sel_19h", "sel_20h", "sel_21h", "sel_22h", "sel_23h", "sel_24h", "sel_25h", "sel_26h", "sel_27h", "sel_28h", "sel_29h", "sel_30h", "sel_31h", "sel_32h", "sel_33h", "sel_34h", "sel_35h", "sel_36h", "sel_37h", "sel_38h", "sel_39h", "sel_40h", "sel_41h", "sel_42h", "sel_43h", "sel_44h", "sel_45h", "sel_46h", "sel_47h", "sel_48h", "sel_49h", "sel_50h", "sel_51h", "sel_52h", "sel_53h", "sel_54h", "sel_55h", "sel_56h", "sel_57h", "sel_58h", "sel_59h", "sel_60h", "sel_61h", "sel_62h", "sel_63h", "sel_2v", "sel_3v", "sel_4v", "sel_5v", "sel_6v", "sel_7v", "sel_8v", "sel_9v", "sel_10v", "sel_11v", "sel_12v", "sel_13v", "sel_14v", "sel_15v", "sel_16v", "sel_17v", "sel_18v", "sel_19v", "sel_20v", "sel_21v", "sel_22v", "sel_23v", "sel_24v", "sel_25v", "sel_26v", "sel_27v", "sel_28v", "sel_29v", "sel_30v", "sel_31v", "sel_32v", "sel_33v", "sel_34v", "sel_35v", "sel_36v", "sel_37v", "sel_38v", "sel_39v", "sel_40v", "sel_41v", "sel_42v", "sel_43v", "sel_44v", "sel_45v", "sel_46v", "sel_47v", "sel_48v", "sel_49v", "sel_50v", "sel_51v", "sel_52v", "sel_53v", "sel_54v", "sel_55v", "sel_56v", "sel_57v", "sel_58v", "sel_59v", "sel_60v", "sel_61v", "sel_62v", "sel_63v"}; /*! * \brief pixMorphDwa_3() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a border, calls the appropriate
 *          pixFMorphopGen_*(), and removes the border.
 *          See the notes for that function.
 *      (2) The size of the border depends on the operation
 *          and the boundary conditions.
 * 
*/ PIX * pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixMorphDwa_3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_3(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * \brief pixFMorphopGen_3() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa operation, and the Sels must be limited in
 *          size to not more than 31 pixels about the origin.
 *      (2) A border of appropriate size (32 pixels, or 64 pixels
 *          for safe closing with asymmetric b.c.) must be added before
 *          this function is called.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 *      (4) The closing operation is safe; no pixels can be removed
 *          near the boundary.
 * 
*/ PIX * pixFMorphopGen_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFMorphopGen_3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_3(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_3(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_3(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.86.0/prog/dwalineargen.c000066400000000000000000000061361506303110300173350ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dwalineargen.c * * This generates the C code for the full set of linear Sels, * for dilation, erosion, opening and closing, and for both * horizontal and vertical operations, from length 2 to 63. * * These are put in files: * dwalinear.3.c * dwalinearlow.3.c * * Q. Why is this C code generated here in prog, and not placed * in the library where it can be linked in with all programs? * A. Because the two files it generates have 17K lines of code! * We also make this code available here ("out of the box") so that you * can build and run dwamorph1_reg and dwamorph2_reg, without * first building and running dwalineargen.c * * Q. Why do we build code for operations up to 63 in width and height? * A. Atomic DWA operations work on Sels that have hits and misses * that are not larger than 31 pixel positions from the origin. * Thus, they can implement a horizontal closing up to 63 pixels * wide if the origin is in the center. * * Note the word "atomic". DWA operations can be done on arbitrarily * large Sels using the *ExtendDwa() functions. See morphdwa.c * for details. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { SELA *sela; if (argc != 1) return ERROR_INT(" Syntax: dwalineargen", __func__, 1); setLeptDebugOK(1); /* Generate the linear sel dwa code */ sela = selaAddDwaLinear(NULL); if (fmorphautogen(sela, 3, "dwalinear")) return 1; selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/dwalinearlow.3.c000066400000000000000000023310001506303110300175170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_3() * * Static Low-level: * void fdilate_3_*() * void ferode_3_*() */ #include "allheaders.h" static void fdilate_3_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_76(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_76(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_77(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_77(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_78(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_78(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_79(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_79(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_80(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_80(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_81(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_81(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_82(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_82(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_83(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_83(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_84(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_84(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_85(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_85(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_86(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_86(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_87(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_87(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_88(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_88(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_89(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_89(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_90(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_90(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_91(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_91(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_92(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_92(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_93(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_93(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_94(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_94(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_95(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_95(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_96(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_96(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_97(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_97(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_98(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_98(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_99(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_99(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_100(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_100(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_101(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_101(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_102(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_102(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_103(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_103(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_104(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_104(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_105(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_105(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_106(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_106(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_107(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_107(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_108(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_108(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_109(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_109(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_110(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_110(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_111(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_111(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_112(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_112(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_113(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_113(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_114(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_114(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_115(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_115(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_116(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_116(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_117(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_117(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_118(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_118(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_119(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_119(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_120(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_120(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_121(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_121(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_122(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_122(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_123(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_123(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_3() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_3_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_3_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_3_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_3_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_3_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_3_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_3_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_3_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_3_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_3_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_3_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_3_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_3_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_3_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_3_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_3_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_3_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_3_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_3_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_3_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_3_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_3_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_3_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_3_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_3_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_3_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_3_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_3_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_3_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_3_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_3_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_3_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_3_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_3_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_3_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_3_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_3_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_3_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_3_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_3_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_3_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_3_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_3_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_3_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_3_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_3_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_3_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_3_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_3_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_3_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_3_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_3_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_3_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_3_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_3_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_3_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_3_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_3_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_3_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_3_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_3_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_3_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_3_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_3_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_3_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_3_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_3_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_3_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_3_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_3_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_3_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_3_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_3_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_3_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_3_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_3_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_3_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_3_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_3_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_3_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_3_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_3_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_3_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_3_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_3_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_3_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_3_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_3_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_3_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_3_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_3_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_3_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_3_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_3_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_3_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_3_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_3_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_3_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_3_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_3_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_3_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_3_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_3_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_3_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_3_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_3_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_3_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_3_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_3_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_3_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_3_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_3_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_3_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_3_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_3_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_3_57(datad, w, h, wpld, datas, wpls); break; case 116: fdilate_3_58(datad, w, h, wpld, datas, wpls); break; case 117: ferode_3_58(datad, w, h, wpld, datas, wpls); break; case 118: fdilate_3_59(datad, w, h, wpld, datas, wpls); break; case 119: ferode_3_59(datad, w, h, wpld, datas, wpls); break; case 120: fdilate_3_60(datad, w, h, wpld, datas, wpls); break; case 121: ferode_3_60(datad, w, h, wpld, datas, wpls); break; case 122: fdilate_3_61(datad, w, h, wpld, datas, wpls); break; case 123: ferode_3_61(datad, w, h, wpld, datas, wpls); break; case 124: fdilate_3_62(datad, w, h, wpld, datas, wpls); break; case 125: ferode_3_62(datad, w, h, wpld, datas, wpls); break; case 126: fdilate_3_63(datad, w, h, wpld, datas, wpls); break; case 127: ferode_3_63(datad, w, h, wpld, datas, wpls); break; case 128: fdilate_3_64(datad, w, h, wpld, datas, wpls); break; case 129: ferode_3_64(datad, w, h, wpld, datas, wpls); break; case 130: fdilate_3_65(datad, w, h, wpld, datas, wpls); break; case 131: ferode_3_65(datad, w, h, wpld, datas, wpls); break; case 132: fdilate_3_66(datad, w, h, wpld, datas, wpls); break; case 133: ferode_3_66(datad, w, h, wpld, datas, wpls); break; case 134: fdilate_3_67(datad, w, h, wpld, datas, wpls); break; case 135: ferode_3_67(datad, w, h, wpld, datas, wpls); break; case 136: fdilate_3_68(datad, w, h, wpld, datas, wpls); break; case 137: ferode_3_68(datad, w, h, wpld, datas, wpls); break; case 138: fdilate_3_69(datad, w, h, wpld, datas, wpls); break; case 139: ferode_3_69(datad, w, h, wpld, datas, wpls); break; case 140: fdilate_3_70(datad, w, h, wpld, datas, wpls); break; case 141: ferode_3_70(datad, w, h, wpld, datas, wpls); break; case 142: fdilate_3_71(datad, w, h, wpld, datas, wpls); break; case 143: ferode_3_71(datad, w, h, wpld, datas, wpls); break; case 144: fdilate_3_72(datad, w, h, wpld, datas, wpls); break; case 145: ferode_3_72(datad, w, h, wpld, datas, wpls); break; case 146: fdilate_3_73(datad, w, h, wpld, datas, wpls); break; case 147: ferode_3_73(datad, w, h, wpld, datas, wpls); break; case 148: fdilate_3_74(datad, w, h, wpld, datas, wpls); break; case 149: ferode_3_74(datad, w, h, wpld, datas, wpls); break; case 150: fdilate_3_75(datad, w, h, wpld, datas, wpls); break; case 151: ferode_3_75(datad, w, h, wpld, datas, wpls); break; case 152: fdilate_3_76(datad, w, h, wpld, datas, wpls); break; case 153: ferode_3_76(datad, w, h, wpld, datas, wpls); break; case 154: fdilate_3_77(datad, w, h, wpld, datas, wpls); break; case 155: ferode_3_77(datad, w, h, wpld, datas, wpls); break; case 156: fdilate_3_78(datad, w, h, wpld, datas, wpls); break; case 157: ferode_3_78(datad, w, h, wpld, datas, wpls); break; case 158: fdilate_3_79(datad, w, h, wpld, datas, wpls); break; case 159: ferode_3_79(datad, w, h, wpld, datas, wpls); break; case 160: fdilate_3_80(datad, w, h, wpld, datas, wpls); break; case 161: ferode_3_80(datad, w, h, wpld, datas, wpls); break; case 162: fdilate_3_81(datad, w, h, wpld, datas, wpls); break; case 163: ferode_3_81(datad, w, h, wpld, datas, wpls); break; case 164: fdilate_3_82(datad, w, h, wpld, datas, wpls); break; case 165: ferode_3_82(datad, w, h, wpld, datas, wpls); break; case 166: fdilate_3_83(datad, w, h, wpld, datas, wpls); break; case 167: ferode_3_83(datad, w, h, wpld, datas, wpls); break; case 168: fdilate_3_84(datad, w, h, wpld, datas, wpls); break; case 169: ferode_3_84(datad, w, h, wpld, datas, wpls); break; case 170: fdilate_3_85(datad, w, h, wpld, datas, wpls); break; case 171: ferode_3_85(datad, w, h, wpld, datas, wpls); break; case 172: fdilate_3_86(datad, w, h, wpld, datas, wpls); break; case 173: ferode_3_86(datad, w, h, wpld, datas, wpls); break; case 174: fdilate_3_87(datad, w, h, wpld, datas, wpls); break; case 175: ferode_3_87(datad, w, h, wpld, datas, wpls); break; case 176: fdilate_3_88(datad, w, h, wpld, datas, wpls); break; case 177: ferode_3_88(datad, w, h, wpld, datas, wpls); break; case 178: fdilate_3_89(datad, w, h, wpld, datas, wpls); break; case 179: ferode_3_89(datad, w, h, wpld, datas, wpls); break; case 180: fdilate_3_90(datad, w, h, wpld, datas, wpls); break; case 181: ferode_3_90(datad, w, h, wpld, datas, wpls); break; case 182: fdilate_3_91(datad, w, h, wpld, datas, wpls); break; case 183: ferode_3_91(datad, w, h, wpld, datas, wpls); break; case 184: fdilate_3_92(datad, w, h, wpld, datas, wpls); break; case 185: ferode_3_92(datad, w, h, wpld, datas, wpls); break; case 186: fdilate_3_93(datad, w, h, wpld, datas, wpls); break; case 187: ferode_3_93(datad, w, h, wpld, datas, wpls); break; case 188: fdilate_3_94(datad, w, h, wpld, datas, wpls); break; case 189: ferode_3_94(datad, w, h, wpld, datas, wpls); break; case 190: fdilate_3_95(datad, w, h, wpld, datas, wpls); break; case 191: ferode_3_95(datad, w, h, wpld, datas, wpls); break; case 192: fdilate_3_96(datad, w, h, wpld, datas, wpls); break; case 193: ferode_3_96(datad, w, h, wpld, datas, wpls); break; case 194: fdilate_3_97(datad, w, h, wpld, datas, wpls); break; case 195: ferode_3_97(datad, w, h, wpld, datas, wpls); break; case 196: fdilate_3_98(datad, w, h, wpld, datas, wpls); break; case 197: ferode_3_98(datad, w, h, wpld, datas, wpls); break; case 198: fdilate_3_99(datad, w, h, wpld, datas, wpls); break; case 199: ferode_3_99(datad, w, h, wpld, datas, wpls); break; case 200: fdilate_3_100(datad, w, h, wpld, datas, wpls); break; case 201: ferode_3_100(datad, w, h, wpld, datas, wpls); break; case 202: fdilate_3_101(datad, w, h, wpld, datas, wpls); break; case 203: ferode_3_101(datad, w, h, wpld, datas, wpls); break; case 204: fdilate_3_102(datad, w, h, wpld, datas, wpls); break; case 205: ferode_3_102(datad, w, h, wpld, datas, wpls); break; case 206: fdilate_3_103(datad, w, h, wpld, datas, wpls); break; case 207: ferode_3_103(datad, w, h, wpld, datas, wpls); break; case 208: fdilate_3_104(datad, w, h, wpld, datas, wpls); break; case 209: ferode_3_104(datad, w, h, wpld, datas, wpls); break; case 210: fdilate_3_105(datad, w, h, wpld, datas, wpls); break; case 211: ferode_3_105(datad, w, h, wpld, datas, wpls); break; case 212: fdilate_3_106(datad, w, h, wpld, datas, wpls); break; case 213: ferode_3_106(datad, w, h, wpld, datas, wpls); break; case 214: fdilate_3_107(datad, w, h, wpld, datas, wpls); break; case 215: ferode_3_107(datad, w, h, wpld, datas, wpls); break; case 216: fdilate_3_108(datad, w, h, wpld, datas, wpls); break; case 217: ferode_3_108(datad, w, h, wpld, datas, wpls); break; case 218: fdilate_3_109(datad, w, h, wpld, datas, wpls); break; case 219: ferode_3_109(datad, w, h, wpld, datas, wpls); break; case 220: fdilate_3_110(datad, w, h, wpld, datas, wpls); break; case 221: ferode_3_110(datad, w, h, wpld, datas, wpls); break; case 222: fdilate_3_111(datad, w, h, wpld, datas, wpls); break; case 223: ferode_3_111(datad, w, h, wpld, datas, wpls); break; case 224: fdilate_3_112(datad, w, h, wpld, datas, wpls); break; case 225: ferode_3_112(datad, w, h, wpld, datas, wpls); break; case 226: fdilate_3_113(datad, w, h, wpld, datas, wpls); break; case 227: ferode_3_113(datad, w, h, wpld, datas, wpls); break; case 228: fdilate_3_114(datad, w, h, wpld, datas, wpls); break; case 229: ferode_3_114(datad, w, h, wpld, datas, wpls); break; case 230: fdilate_3_115(datad, w, h, wpld, datas, wpls); break; case 231: ferode_3_115(datad, w, h, wpld, datas, wpls); break; case 232: fdilate_3_116(datad, w, h, wpld, datas, wpls); break; case 233: ferode_3_116(datad, w, h, wpld, datas, wpls); break; case 234: fdilate_3_117(datad, w, h, wpld, datas, wpls); break; case 235: ferode_3_117(datad, w, h, wpld, datas, wpls); break; case 236: fdilate_3_118(datad, w, h, wpld, datas, wpls); break; case 237: ferode_3_118(datad, w, h, wpld, datas, wpls); break; case 238: fdilate_3_119(datad, w, h, wpld, datas, wpls); break; case 239: ferode_3_119(datad, w, h, wpld, datas, wpls); break; case 240: fdilate_3_120(datad, w, h, wpld, datas, wpls); break; case 241: ferode_3_120(datad, w, h, wpld, datas, wpls); break; case 242: fdilate_3_121(datad, w, h, wpld, datas, wpls); break; case 243: ferode_3_121(datad, w, h, wpld, datas, wpls); break; case 244: fdilate_3_122(datad, w, h, wpld, datas, wpls); break; case 245: ferode_3_122(datad, w, h, wpld, datas, wpls); break; case 246: fdilate_3_123(datad, w, h, wpld, datas, wpls); break; case 247: ferode_3_123(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_3_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_3_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_3_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_3_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_3_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_3_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_3_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_3_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_3_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_3_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_3_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_3_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_3_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_3_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_3_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_3_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_3_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_3_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_3_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_3_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_3_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_3_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_3_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_3_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_3_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_3_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_3_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_3_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_3_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_3_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_3_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)); } } } static void ferode_3_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)); } } } static void fdilate_3_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)); } } } static void ferode_3_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)); } } } static void fdilate_3_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_3_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_3_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_3_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_3_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_3_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_3_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_3_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_3_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_3_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_3_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_3_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_3_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_3_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_3_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_3_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_3_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_3_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_3_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_3_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_3_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_3_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_3_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_3_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_3_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_3_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_3_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_3_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_3_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_3_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_3_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_3_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_3_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_3_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_3_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_3_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_3_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_3_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_3_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_3_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_3_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_3_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_3_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_3_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_3_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_3_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_3_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_3_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_3_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_3_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_3_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_3_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_3_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_3_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_3_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_3_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_3_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)); } } } static void ferode_3_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)); } } } static void fdilate_3_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)); } } } static void ferode_3_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)); } } } static void fdilate_3_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_3_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_3_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_3_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_3_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_3_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_3_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_3_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_3_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)); } } } static void ferode_3_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)); } } } static void fdilate_3_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)); } } } static void ferode_3_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)); } } } static void fdilate_3_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_3_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_3_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_3_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_3_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)); } } } static void ferode_3_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)); } } } static void fdilate_3_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)); } } } static void ferode_3_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)); } } } static void fdilate_3_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)); } } } static void ferode_3_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)); } } } static void fdilate_3_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)); } } } static void ferode_3_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)); } } } static void fdilate_3_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)); } } } static void ferode_3_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)); } } } static void fdilate_3_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 31) | (*(sptr + 1) >> 1)) | ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)); } } } static void ferode_3_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 31) | (*(sptr - 1) << 1)) & ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)); } } } static void fdilate_3_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 31) | (*(sptr + 1) >> 1)) | ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)) | ((*(sptr) >> 31) | (*(sptr - 1) << 1)); } } } static void ferode_3_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 31) | (*(sptr - 1) << 1)) & ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)) & ((*(sptr) << 31) | (*(sptr + 1) >> 1)); } } } static void fdilate_3_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr); } } } static void ferode_3_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr); } } } static void fdilate_3_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_3_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_3_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_3_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_3_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_3_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_3_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_3_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_3_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_3_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_3_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_3_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_3_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_3_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_3_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_3_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_3_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_3_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_3_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_3_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_3_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_3_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_3_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_3_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_3_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_3_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_3_76(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_3_76(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_3_77(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)); } } } static void ferode_3_77(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)); } } } static void fdilate_3_78(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)); } } } static void ferode_3_78(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)); } } } static void fdilate_3_79(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_3_79(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_3_80(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_3_80(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_3_81(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_3_81(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_3_82(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_3_82(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_3_83(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)); } } } static void ferode_3_83(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)); } } } static void fdilate_3_84(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)); } } } static void ferode_3_84(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)); } } } static void fdilate_3_85(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_3_85(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_3_86(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_3_86(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_3_87(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)); } } } static void ferode_3_87(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)); } } } static void fdilate_3_88(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)); } } } static void ferode_3_88(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)); } } } static void fdilate_3_89(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_3_89(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_3_90(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_3_90(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_3_91(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_3_91(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_3_92(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_3_92(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_3_93(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)); } } } static void ferode_3_93(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)); } } } static void fdilate_3_94(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)); } } } static void ferode_3_94(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)); } } } static void fdilate_3_95(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_3_95(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_3_96(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_3_96(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_3_97(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)); } } } static void ferode_3_97(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)); } } } static void fdilate_3_98(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)); } } } static void ferode_3_98(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)); } } } static void fdilate_3_99(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_3_99(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_3_100(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_3_100(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_3_101(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_3_101(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_3_102(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_3_102(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_3_103(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)); } } } static void ferode_3_103(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)); } } } static void fdilate_3_104(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)); } } } static void ferode_3_104(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)); } } } static void fdilate_3_105(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_3_105(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_3_106(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_3_106(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_3_107(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)); } } } static void ferode_3_107(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)); } } } static void fdilate_3_108(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)); } } } static void ferode_3_108(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)); } } } static void fdilate_3_109(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_3_109(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_3_110(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_3_110(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_3_111(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_3_111(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_3_112(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_3_112(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_3_113(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)); } } } static void ferode_3_113(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)); } } } static void fdilate_3_114(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)); } } } static void ferode_3_114(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)); } } } static void fdilate_3_115(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)); } } } static void ferode_3_115(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)); } } } static void fdilate_3_116(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)); } } } static void ferode_3_116(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)); } } } static void fdilate_3_117(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)); } } } static void ferode_3_117(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)); } } } static void fdilate_3_118(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)); } } } static void ferode_3_118(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)); } } } static void fdilate_3_119(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)); } } } static void ferode_3_119(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)); } } } static void fdilate_3_120(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)); } } } static void ferode_3_120(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)); } } } static void fdilate_3_121(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)); } } } static void ferode_3_121(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)); } } } static void fdilate_3_122(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls31)) | (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)); } } } static void ferode_3_122(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls31)) & (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)); } } } static void fdilate_3_123(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls31)) | (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)) | (*(sptr - wpls31)); } } } static void ferode_3_123(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls31)) & (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)) & (*(sptr + wpls31)); } } } leptonica-1.86.0/prog/dwamorph1_reg.c000066400000000000000000000205201506303110300174250ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dwamorph1_reg.c * * Fairly thorough regression test for autogen'd dwa. * * The dwa code always implements safe closing. With asymmetric * b.c., the rasterop function must be pixCloseSafe(). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* defined in morph.c */ LEPT_DLL extern l_int32 MORPH_BC; /* Complete set of linear brick dwa operations */ PIX *pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); int main(int argc, char **argv) { l_int32 i, nsels, same, xorcount; char *selname; PIX *pixs, *pixt1, *pixt2, *pixt3; SEL *sel; SELA *sela; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; if ((pixs = pixRead("feyn-fract.tif")) == NULL) { rp->success = FALSE; return regTestCleanup(rp); } sela = selaAddDwaLinear(NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); /* --------- dilation ----------*/ pixt1 = pixDilate(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_DILATE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("dilations are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "dilations differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- erosion with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_ERODE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("erosions are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "erosions differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- erosion with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_ERODE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("erosions are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "erosions differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- opening with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixOpen(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_OPEN, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("openings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "openings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- opening with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixOpen(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_OPEN, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("openings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "openings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- safe closing with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixCloseSafe(NULL, pixs, sel); /* must use safe version */ pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_CLOSE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("closings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "closings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- safe closing with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); if (rp->display) lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixClose(NULL, pixs, sel); /* safe version not required */ pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_CLOSE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { if (rp->display) lept_stderr("closings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "closings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); } selaDestroy(&sela); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/dwamorph2_reg.c000066400000000000000000000246201506303110300174330ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * dwamorph2_reg.c * * Compare the timings of various binary morphological implementations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define HALFWIDTH 3 /* Complete set of linear brick dwa operations */ PIX *pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); static const l_int32 NTIMES = 20; int main(int argc, char **argv) { char *selname; l_int32 i, j, nsels, sx, sy; l_float32 fact, time; GPLOT *gplot; NUMA *na1, *na2, *na3, *na4, *nac1, *nac2, *nac3, *nac4, *nax; PIX *pixs, *pixt; PIXA *pixa; SEL *sel; SELA *selalinear; if (argc != 1) return ERROR_INT(" Syntax: dwamorph2_reg", __func__, 1); setLeptDebugOK(1); pixs = pixRead("feyn-fract.tif"); pixt = pixCreateTemplate(pixs); selalinear = selaAddDwaLinear(NULL); nsels = selaGetCount(selalinear); fact = 1000. / (l_float32)NTIMES; /* converts to time in msec */ na1 = numaCreate(64); na2 = numaCreate(64); na3 = numaCreate(64); na4 = numaCreate(64); lept_mkdir("lept/morph"); /* --------- dilation ----------*/ for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); lept_stderr(" %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixDilate(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixDilateCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_DILATE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixDilateCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nax = numaMakeSequence(2, 1, nsels / 2); nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/lept/morph/dilate", GPLOT_PNG, "Dilation time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- erosion ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); lept_stderr(" %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixErode(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixErodeCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_ERODE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixErodeCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/lept/morph/erode", GPLOT_PNG, "Erosion time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- opening ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); lept_stderr(" %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixOpen(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixOpenCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_OPEN, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixOpenCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/lept/morph/open", GPLOT_PNG, "Opening time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- closing ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); lept_stderr(" %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixClose(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixCloseCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_CLOSE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixCloseCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/lept/morph/close", GPLOT_PNG, "Closing time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&nax); selaDestroy(&selalinear); pixDestroy(&pixt); pixDestroy(&pixs); /* Display the results together */ pixa = pixaCreate(0); pixs = pixRead("/tmp/lept/morph/dilate.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/lept/morph/erode.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/lept/morph/open.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/lept/morph/close.png"); pixaAddPix(pixa, pixs, L_INSERT); pixt = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 40, 3); pixWrite("/tmp/lept/morph/timings.png", pixt, IFF_PNG); pixDisplay(pixt, 100, 100); pixDestroy(&pixt); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/edge_reg.c000066400000000000000000000066311506303110300164360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * edgetest.c * * Regression test for sobel edge filter. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, w, h; PIX *pixs, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test8.jpg"); /* Test speed: about 60 Mpix/sec/GHz */ startTimer(); for (i = 0; i < 100; i++) { pix1 = pixSobelEdgeFilter(pixs, L_HORIZONTAL_EDGES); pix2 = pixThresholdToBinary(pix1, 60); pixInvert(pix2, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixs, &w, &h, NULL); lept_stderr("Sobel edge MPix/sec: %7.3f\n", 0.0001 * w * h / stopTimer()); /* Horiz and vert sobel edges (1 bpp) */ pix1 = pixSobelEdgeFilter(pixs, L_HORIZONTAL_EDGES); pix2 = pixThresholdToBinary(pix1, 60); pixInvert(pix2, pix2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix2, 0, 50, "Horizontal edges", rp->display); pix3 = pixSobelEdgeFilter(pixs, L_VERTICAL_EDGES); pix4 = pixThresholdToBinary(pix3, 60); pixInvert(pix4, pix4); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix4, 625, 50, "Vertical edges", rp->display); pixOr(pix4, pix4, pix2); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix4, 1200, 50, "Horiz and vert edges", rp->display); pixDestroy(&pix2); pixDestroy(&pix4); /* Horizontal and vertical sobel edges (8 bpp) */ pixMinOrMax(pix1, pix1, pix3, L_CHOOSE_MAX); pixInvert(pix1, pix1); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 3 */ pixDisplayWithTitle(pix1, 0, 525, "8bpp Horiz and vert edges", rp->display); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/elephant-cmap-alpha.png000066400000000000000000000024001506303110300210260ustar00rootroot00000000000000‰PNG  IHDRHHb3CuPLTEžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžžģģģ°°°ˇˇˇŖŖŖ•••œœœĻĻĻžžž˜˜˜ŸŸŸ­­­žžž´´´žžž‡‡‡‡‡‡‡‡‡–––‘‘‘‡‡‡ŠŠŠwww000<<<˛˛˛›››HHHŠŠŠŽŽŽ$$$ƒƒƒõå¯āÖĩŅËšúéŽöæ¯ÜÔļœ›—úéŽúéŽņá̇‡‡ČžÕθäŲ´¤ ‘ķãŦÉÆģÆÃŧ‡‡‡‡‡‡Ž‰Á¸›ëŪ˛ÍÉ燇‡˛Ŧ–ŲĪLJ‡‡ļļļŖŖŖ‡‡‡‡‡‡ļļ‡ŖŖŖ‡‡‡‡‡‡‡‡‡˛˛˛ĄqPøWtRNS0p€ŋŸ` ˙Īī¯˙˙˙˙˙˙˙@˙˙˙P˙ß`¯ŋī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯˙˙˙˙˙˙Ī@˙˙˙˙˙˙˙Ī˙˙˙˙˙˙īpīŋ0Ÿß€€ßp ŋ|5­SIDATx헅ēã8 Fj̆Ë0¤Ëˇ;ĖĖĖüū˛ĩۍ˛ŊLs.CĪg)ŋ ~đwā¸ž/:]øô|,č˙“"#(ô^äKbˇ÷<†˙ĩfē},͍ˆ‡Š$Mŗ­ˆë­L]eÉÃQšĻČą7qËhŌĸ°ė“‹Ļ34ဎųÖŗ@#žEių -kS„‚ š1õפ3´a :BQŲ­8|Dĸ'MĸÚq 4ô…(AŌĶAOÛė¤Q4Å*à ĸ§ËҰą×gĒŋÍ(×dĀmmŅ`§Z°Ũĩ‹ōšh×ōĄíîíHQ5îųÜĐØņ°*:<:::–­-ũ:ÃÕ 7ÄĐVE?­E{rgQ‘Ŧˆ&ˆíC×DįŽŽÎKĄb‡čŒĘˆkÉ1p#ĘX¨¸ûPãÂÅK\ÄÉ)łŗĘ#€—/_žrõZ‹hTtz"=ē%îúeĄj QLĪĘēôÁ›Â„M éėö+÷´āÖíŠčΕģ(9K˛I ĸ!ķ´vNŪģų\Z{Ę}ŽÎŌŲ ĶÕj„u ÎŖĮOž^‚gkŅsœUļŗ"ĸafģĄ€ŧ2”č šRĐ+W˙%{ÎD_eNxvkø<ûđHõ"ûĘDߨÅ5\#dæX0|ũHÔ*y,g8ßF|‘ ԆOt āINÉõÆĐnp—˛ĩŽšy‚QUąļŨg<–^Ų€Di¯™Č5e’ņĘ>ɨ+‘c-âWĮ}.âu‡` žß&ú‚Āúļ<Žm‚Hđøī`ļ">úoˇnŨ’Á˛žRۄŗŽûÁ,膆ĩÂg‰‚°ŋ›ąįy.üāåghŽp<×ŦāIENDŽB`‚leptonica-1.86.0/prog/encoding_reg.c000066400000000000000000000101101506303110300173030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * encoding_reg.c * * Regression test for encoding/decoding of binary data * * Ascii85 encoding/decoding Works properly with 0, 1, 2 or 3 extra * bytes after the final full word. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { size_t nbytes1, nbytes2, nbytes3, nbytes4, nbytes5, nbytes6, fbytes; char *a85a, *a85c, *a85c2; l_uint8 *bina, *bina2, *bin85c, *bin85c2; PIX *pix1; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/encode"); /* Test ascii85 encoding */ bina = l_binaryRead("karen8.jpg", &fbytes); a85a = encodeAscii85(bina, fbytes, &nbytes1); bina2 = decodeAscii85(a85a, nbytes1, &nbytes2); regTestCompareValues(rp, fbytes, nbytes2, 0.0); /* 0 */ if (rp->display) { lept_stderr("file bytes = %zu, a85 bytes = %zu, bina2 bytes = %zu\n", fbytes, nbytes1, nbytes2); } l_binaryWrite("/tmp/lept/encode/ascii85", "w", a85a, nbytes1); l_binaryWrite("/tmp/lept/encode/bina2", "w", bina2, nbytes2); /* Test the reconstructed image */ pix1 = pixReadMem(bina2, nbytes2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixDestroy(&pix1); /* Test with compression, starting with ascii data */ a85c = encodeAscii85WithComp((l_uint8 *)a85a, nbytes1, &nbytes3); bin85c = decodeAscii85WithComp(a85c, nbytes3, &nbytes4); regTestCompareStrings(rp, (l_uint8 *)a85a, nbytes1, bin85c, nbytes4); /* 2 */ /* Test with compression, starting with binary data */ a85c2 = encodeAscii85WithComp(bin85c, nbytes4, &nbytes5); bin85c2 = decodeAscii85WithComp(a85c2, nbytes5, &nbytes6); regTestCompareStrings(rp, bin85c, nbytes4, bin85c2, nbytes6); /* 3 */ lept_free(bina); lept_free(bina2); lept_free(a85a); lept_free(a85c); lept_free(bin85c); lept_free(a85c2); lept_free(bin85c2); /* Test storing and retrieving compressed text from pix */ bina = l_binaryRead("weasel32.png", &nbytes1); pix1 = pixRead("rabi.png"); pixSetTextCompNew(pix1, bina, nbytes1); bina2 = pixGetTextCompNew(pix1, &nbytes2); if (rp->display) lept_stderr("nbytes1 = %zu, nbytes2 = %zu\n", nbytes1, nbytes2); regTestCompareStrings(rp, bina, nbytes1, bina2, nbytes2); /* 4 */ pixDestroy(&pix1); lept_free(bina); lept_free(bina2); return regTestCleanup(rp); } leptonica-1.86.0/prog/enhance_reg.c000066400000000000000000000253301506303110300171300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * enhance_reg.c * * This tests the following global "enhancement" functions: * * TRC transforms with variation of gamma and black point * * HSV transforms with variation of hue, saturation and intensity * * Contrast variation * * Sharpening * * Color mapping to lighten background with constant hue * * Linear color transform without mixing (diagonal) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char textstr[256]; l_int32 i, k, w, h; l_uint32 srcval; l_float32 scalefact, sat, fract; L_BMF *bmf10; L_KERNEL *kel; NUMA *na1, *na2, *na3; PIX *pix, *pixs, *pixs1, *pixs2, *pixd; PIX *pix0, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixaf; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "enhance_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/enhance"); pix = pixRead("test24.jpg"); /* rgb */ w = pixGetWidth(pix); scalefact = 150.0 / (l_float32)w; /* scale to w = 150 */ pixs = pixScale(pix, scalefact, scalefact); w = pixGetWidth(pixs); pixaf = pixaCreate(5); pixDestroy(&pix); /* TRC: vary gamma */ pixa1 = pixaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixGammaTRC(NULL, pixs, 0.3 + 0.15 * i, 0, 255); pixaAddPix(pixa1, pix0, L_INSERT); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 100, "TRC Gamma", rp->display); pixaDestroy(&pixa1); /* TRC: vary black point */ pixa1 = pixaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixGammaTRC(NULL, pixs, 1.0, 5 * i, 255); pixaAddPix(pixa1, pix0, L_INSERT); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 300, 100, "TRC", rp->display); pixaDestroy(&pixa1); /* Vary hue */ pixa1 = pixaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixModifyHue(NULL, pixs, 0.01 + 0.05 * i); pixaAddPix(pixa1, pix0, L_INSERT); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 600, 100, "Hue", rp->display); pixaDestroy(&pixa1); /* Vary saturation */ pixa1 = pixaCreate(20); na1 = numaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixModifySaturation(NULL, pixs, -0.9 + 0.1 * i); pixMeasureSaturation(pix0, 1, &sat); pixaAddPix(pixa1, pix0, L_INSERT); numaAddNumber(na1, sat); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/regout/enhance.7", "Average Saturation"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 900, 100, "Saturation", rp->display); numaDestroy(&na1); pixaDestroy(&pixa1); /* Vary contrast */ pixa1 = pixaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixContrastTRC(NULL, pixs, 0.1 * i); pixaAddPix(pixa1, pix0, L_INSERT); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 0, 400, "Contrast", rp->display); pixaDestroy(&pixa1); /* Vary sharpening */ pixa1 = pixaCreate(20); for (i = 0; i < 20; i++) { pix0 = pixUnsharpMasking(pixs, 3, 0.01 + 0.15 * i); pixaAddPix(pixa1, pix0, L_INSERT); } pix1 = pixaDisplayTiledAndScaled(pixa1, 32, w, 5, 0, 10, 2); pixaAddPix(pixaf, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 300, 400, "Sharp", rp->display); pixaDestroy(&pixa1); /* Hue constant mapping to lighter background */ pixa2 = pixaCreate(2); bmf10 = bmfCreate("fonts", 10); pix0 = pixRead("candelabrum.011.jpg"); composeRGBPixel(230, 185, 144, &srcval); /* select typical bg pixel */ for (k = 1; k > -2; k -= 2) { pixa1 = pixaCreate(11); for (i = 0; i <= 10; i++) { fract = k * 0.10 * i; pix1 = pixMapWithInvariantHue(NULL, pix0, srcval, fract); snprintf(textstr, 50, "Fract = %5.1f", fract); pix2 = pixAddSingleTextblock(pix1, bmf10, textstr, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } pix3 = pixaDisplayTiledInColumns(pixa1, 4, 1.0, 30, 2); pixaAddPix(pixa2, pix3, L_INSERT); pixaDestroy(&pixa1); } pixd = pixaDisplayTiledInColumns(pixa2, 2, 0.5, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixd, 600, 400, "Constant hue", rp->display); pixaDestroy(&pixa2); bmfDestroy(&bmf10); pixDestroy(&pix0); pixDestroy(&pixd); /* Delayed testing of saturation plot */ regTestCheckFile(rp, "/tmp/lept/regout/enhance.7.png"); /* 7 */ /* Display results */ pixd = pixaDisplayTiledInColumns(pixaf, 1, 1.0, 20, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 8 */ pixDisplayWithTitle(pixd, 100, 100, "All", rp->display); pixDestroy(&pixd); pixaDestroy(&pixaf); /* Test color shifts */ pixd = pixMosaicColorShiftRGB(pixs, -0.1, 0.0, 0.0, 0.0999, 1); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixDisplayWithTitle(pixd, 1000, 100, "Color shift", rp->display); pixDestroy(&pixd); pixDestroy(&pixs); /* More trc testing */ pix = pixRead("test24.jpg"); /* rgb */ pixs = pixScale(pix, 0.3, 0.3); pixDestroy(&pix); pixa1 = pixaCreate(5); pixaAddPix(pixa1, pixs, L_COPY); na1 = numaGammaTRC(0.6, 40, 200); na2 = numaGammaTRC(1.2, 40, 225); na3 = numaGammaTRC(0.6, 40, 255); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixCopy(NULL, pixs); pix2 = pixMakeSymmetricMask(w, h, 0.5, 0.5, L_USE_INNER); pixaAddPix(pixa1, pix2, L_COPY); pixTRCMapGeneral(pix1, pix2, na1, na2, na3); pixaAddPix(pixa1, pix1, L_COPY); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pixDestroy(&pix1); pixDestroy(&pix2); na1 = numaGammaTRC(1.0, 0, 255); na2 = numaGammaTRC(1.0, 0, 255); na3 = numaGammaTRC(1.0, 0, 255); pix1 = pixCopy(NULL, pixs); pixTRCMapGeneral(pix1, NULL, na1, na2, na3); regTestComparePix(rp, pixs, pix1); /* 11 */ numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pixDestroy(&pix1); na1 = numaGammaTRC(1.7, 150, 255); na2 = numaGammaTRC(0.7, 0, 150); na3 = numaGammaTRC(1.2, 80, 200); pixTRCMapGeneral(pixs, NULL, na1, na2, na3); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 12 */ pixaAddPix(pixa1, pixs, L_COPY); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pixDestroy(&pixs); na1 = numaGammaTRC(0.8, 0, 220); na2 = numaGammaTRC(1.0, 40, 220); gplotSimple2(na1, na2, GPLOT_PNG, "/tmp/lept/enhance/junkp", NULL); pix1 = pixRead("/tmp/lept/enhance/junkp.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixaAddPix(pixa1, pix1, L_COPY); numaDestroy(&na1); numaDestroy(&na2); pixDestroy(&pix1); pixd = pixaDisplayTiledInColumns(pixa1, 4, 1.0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 14 */ pixDisplayWithTitle(pixd, 100, 800, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa1); /* -----------------------------------------------* * Test global color transforms * * -----------------------------------------------*/ /* Make identical cmap and rgb images */ pix = pixRead("wet-day.jpg"); pixs1 = pixOctreeColorQuant(pix, 200, 0); pixs2 = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); regTestComparePix(rp, pixs1, pixs2); /* 15 */ /* Make a diagonal color transform matrix */ kel = kernelCreate(3, 3); kernelSetElement(kel, 0, 0, 0.7); kernelSetElement(kel, 1, 1, 0.4); kernelSetElement(kel, 2, 2, 1.3); /* Apply to both cmap and rgb images. */ pix1 = pixMultMatrixColor(pixs1, kel); pix2 = pixMultMatrixColor(pixs2, kel); regTestComparePix(rp, pix1, pix2); /* 16 */ kernelDestroy(&kel); /* Apply the same transform in the simpler interface */ pix3 = pixMultConstantColor(pixs1, 0.7, 0.4, 1.3); pix4 = pixMultConstantColor(pixs2, 0.7, 0.4, 1.3); regTestComparePix(rp, pix3, pix4); /* 17 */ regTestComparePix(rp, pix1, pix3); /* 18 */ regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 19 */ pixDestroy(&pix); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return regTestCleanup(rp); } leptonica-1.86.0/prog/equal_reg.c000066400000000000000000000121701506303110300166340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * equal_reg.c * * Tests the pixEqual() function in many situations. * * This also tests the quantization of grayscale and color * images (to generate a colormapped image), and removal of * the colormap to either RGB or grayscale. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* use this set */ #define FEYN1 "feyn.tif" /* 1 bpp */ #define DREYFUS2 "dreyfus2.png" /* 2 bpp cmapped */ #define DREYFUS4 "dreyfus4.png" /* 4 bpp cmapped */ #define DREYFUS8 "dreyfus8.png" /* 8 bpp cmapped */ #define KAREN8 "karen8.jpg" /* 8 bpp, not cmapped */ #define MARGE32 "marge.jpg" /* rgb */ int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/equal"); pixs = pixRead(FEYN1); pixWrite("/tmp/lept/equal/junkfeyn.png", pixs, IFF_PNG); pix1 = pixRead("/tmp/lept/equal/junkfeyn.png"); regTestComparePix(rp, pixs, pix1); /* 0 */ pixDestroy(&pixs); pixDestroy(&pix1); pixs = pixRead(DREYFUS2); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixOctreeQuantNumColors(pix2, 64, 1); pix4 = pixConvertRGBToColormap(pix2, 1); regTestComparePix(rp, pixs, pix1); /* 1 */ regTestComparePix(rp, pixs, pix2); /* 2 */ regTestComparePix(rp, pixs, pix3); /* 3 */ regTestComparePix(rp, pixs, pix4); /* 4 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixs = pixRead(DREYFUS4); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixOctreeQuantNumColors(pix2, 256, 1); pix4 = pixConvertRGBToColormap(pix2, 1); regTestComparePix(rp, pixs, pix1); /* 5 */ regTestComparePix(rp, pixs, pix2); /* 6 */ regTestComparePix(rp, pixs, pix3); /* 7 */ regTestComparePix(rp, pixs, pix4); /* 8 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixs = pixRead(DREYFUS8); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixConvertRGBToColormap(pix2, 1); regTestComparePix(rp, pixs, pix1); /* 9 */ regTestComparePix(rp, pixs, pix2); /* 10 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixs = pixRead(KAREN8); pix1 = pixThresholdTo4bpp(pixs, 16, 1); pix2 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); pix3 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); pix4 = pixConvertRGBToColormap(pix3, 1); regTestComparePix(rp, pix1, pix2); /* 11 */ regTestComparePix(rp, pix1, pix3); /* 12 */ regTestComparePix(rp, pix1, pix4); /* 13 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixs = pixRead(MARGE32); pix1 = pixOctreeQuantNumColors(pixs, 32, 0); pix2 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixConvertRGBToColormap(pix2, 1); pix4 = pixOctreeQuantNumColors(pix2, 64, 0); regTestComparePix(rp, pix1, pix2); /* 14 */ regTestComparePix(rp, pix1, pix3); /* 15 */ regTestComparePix(rp, pix1, pix4); /* 16 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return regTestCleanup(rp); } leptonica-1.86.0/prog/expand_reg.c000066400000000000000000000142021506303110300170020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * expand_reg.c * * Regression test for replicative and power-of-2 expansion (and * corresponding reductions) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE_NO_CMAP "weasel2.4g.png" #define TWO_BPP_IMAGE_CMAP "weasel2.4c.png" #define FOUR_BPP_IMAGE_NO_CMAP "weasel4.16g.png" #define FOUR_BPP_IMAGE_CMAP "weasel4.16c.png" #define EIGHT_BPP_IMAGE_NO_CMAP "weasel8.149g.png" #define EIGHT_BPP_IMAGE_CMAP "weasel8.240c.png" #define RGB_IMAGE "marge.jpg" int main(int argc, char **argv) { l_int32 i, w, h, format; char filename[][64] = {BINARY_IMAGE, TWO_BPP_IMAGE_NO_CMAP, TWO_BPP_IMAGE_CMAP, FOUR_BPP_IMAGE_NO_CMAP, FOUR_BPP_IMAGE_CMAP, EIGHT_BPP_IMAGE_NO_CMAP, EIGHT_BPP_IMAGE_CMAP, RGB_IMAGE}; BOX *box; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); for (i = 0; i < 8; i++) { pixs = pixRead(filename[i]); pix1 = pixExpandReplicate(pixs, 2); format = (i == 7) ? IFF_JFIF_JPEG : IFF_PNG; regTestWritePixAndCheck(rp, pix1, format); /* 0 - 7 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pixs); } for (i = 0; i < 8; i++) { pixs = pixRead(filename[i]); pix1 = pixExpandReplicate(pixs, 3); format = (i == 7) ? IFF_JFIF_JPEG : IFF_PNG; regTestWritePixAndCheck(rp, pix1, format); /* 8 - 15 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pixs); } pixs = pixRead("test1.png"); pixGetDimensions(pixs, &w, &h, NULL); for (i = 1; i <= 15; i++) { box = boxCreate(13 * i, 13 * i, w - 13 * i, h - 13 * i); pix1 = pixClipRectangle(pixs, box, NULL); pix2 = pixExpandReplicate(pix1, 3); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 - 30 */ pixaAddPix(pixa, pix2, L_INSERT); boxDestroy(&box); pixDestroy(&pix1); } pixDestroy(&pixs); /* --------- Power of 2 expansion and reduction -------- */ pixs = pixRead("speckle.png"); /* Test 2x expansion of 1 bpp */ pix1 = pixExpandBinaryPower2(pixs, 2); pix2 = pixReduceRankBinary2(pix1, 4, NULL); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 31 */ regTestComparePix(rp, pixs, pix2); /* 32 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Test 2x expansion of 2 bpp */ pix1 = pixConvert1To2(NULL, pixs, 3, 0); pix2 = pixExpandReplicate(pix1, 2); pix3 = pixConvertTo8(pix2, FALSE); pix4 = pixThresholdToBinary(pix3, 250); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 33 */ pix5 = pixReduceRankBinary2(pix4, 4, NULL); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 34 */ regTestComparePix(rp, pixs, pix5); /* 35 */ pixaAddPix(pixa, pix5, L_INSERT); pix6 = pixExpandBinaryPower2(pix5, 2); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 36 */ pixaAddPix(pixa, pix6, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test 4x expansion of 4 bpp */ pix1 = pixConvert1To4(NULL, pixs, 15, 0); pix2 = pixExpandReplicate(pix1, 4); pix3 = pixConvertTo8(pix2, FALSE); pix4 = pixThresholdToBinary(pix3, 250); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 37 */ pixaAddPix(pixa, pix4, L_INSERT); pix5 = pixReduceRankBinaryCascade(pix4, 4, 4, 0, 0); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 38 */ regTestComparePix(rp, pixs, pix5); /* 39 */ pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test 8x expansion of 8 bpp */ pix1 = pixConvertTo8(pixs, FALSE); pix2 = pixExpandReplicate(pix1, 8); pix3 = pixThresholdToBinary(pix2, 250); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 40 */ pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixReduceRankBinaryCascade(pix3, 4, 4, 4, 0); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 41 */ regTestComparePix(rp, pixs, pix4); /* 42 */ pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixs); if (rp->display) { lept_stderr("Writing to: /tmp/lept/expand/test.pdf\n"); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "Replicative expansion", "/tmp/lept/expand/test.pdf"); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/extrema_reg.c000066400000000000000000000065601506303110300172000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * extrema_reg.c * * Tests procedure for locating extrema (minima and maxima) * of a sampled function. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *data; size_t size; l_int32 i, ival, n; l_float32 f, val; GPLOT *gplot; NUMA *na1, *na2, *na3; PIX *pix1; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "extrema_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/extrema"); /* Generate a 1D signal and plot it */ na1 = numaCreate(500); for (i = 0; i < 500; i++) { f = 48.3 * sin(0.13 * (l_float32)i); f += 63.4 * cos(0.21 * (l_float32)i); numaAddNumber(na1, f); } gplot = gplotCreate("/tmp/lept/extrema/plot", GPLOT_PNG, "Extrema test", "x", "y"); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, "plot 1"); /* Find the local min and max and plot them */ na2 = numaFindExtrema(na1, 38.3, NULL); n = numaGetCount(na2); na3 = numaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(na2, i, &ival); numaGetFValue(na1, ival, &val); numaAddNumber(na3, val); } gplotAddPlot(gplot, na2, na3, GPLOT_POINTS, "plot 2"); gplotMakeOutput(gplot); numaWriteMem(&data, &size, na2); regTestWriteDataAndCheck(rp, data, size, "na"); /* 0 */ lept_free(data); regTestCheckFile(rp, "/tmp/lept/extrema/plot.png"); /* 1 */ if (rp->display) { pix1 = pixRead("/tmp/lept/extrema/plot.png"); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } gplotDestroy(&gplot); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); return regTestCleanup(rp); } leptonica-1.86.0/prog/falsecolor_reg.c000066400000000000000000000064641506303110300176670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * falsecolor_reg.c * * Test false color generation from 8 and 16 bpp gray */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_float32 gamma[] = {1.0, 2.0, 3.0}; int main(int argc, char **argv) { l_int32 i, j, val8, val16; NUMA *na; PIX *pix1, *pix8, *pix16, *pix8f, *pix16f; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix8 = pixCreate(768, 100, 8); pix16 = pixCreate(768, 100, 16); for (i = 0; i < 100; i++) { for (j = 0; j < 768; j++) { val16 = 0xffff * j / 768; pixSetPixel(pix16, j, i, val16); val8 = 0xff * j / 768; pixSetPixel(pix8, j, i, val8); } } regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix16, IFF_PNG); /* 1 */ pixa = pixaCreate(8); pixaAddPix(pixa, pix8, L_INSERT); for (i = 0; i < 3; i++) { pix8f = pixConvertGrayToFalseColor(pix8, gamma[i]); regTestWritePixAndCheck(rp, pix8f, IFF_PNG); /* 2 - 4 */ pixaAddPix(pixa, pix8f, L_INSERT); } pixaAddPix(pixa, pix16, L_INSERT); for (i = 0; i < 3; i++) { pix16f = pixConvertGrayToFalseColor(pix16, gamma[i]); regTestWritePixAndCheck(rp, pix16f, IFF_PNG); /* 5 - 7 */ pixaAddPix(pixa, pix16f, L_INSERT); } if (rp->display) { /* Use na to display them in column major order with 4 rows */ na = numaCreate(8); for (i = 0; i < 8; i++) numaAddNumber(na, i / 4); pix1 = pixaDisplayTiledByIndex(pixa, na, 768, 20, 2, 6, 0xff000000); pixDisplay(pix1, 100, 100); numaDestroy(&na); pixDestroy(&pix1); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/fcombautogen.c000066400000000000000000000054141506303110300173440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fcombautogen.c * * This program is used to generate the two files of dwa code for combs, * that are used in linear composite dwa operations for brick Sels. * If filename is not given, the files are: * dwacomb..c * dwacomblow..c * Otherwise they are: * ..c * low..c * where is the input index. * These two files, when compiled, are used to implement all * the composite dwa operations for brick Sels, that are * generated by selaAddDwaCombs(). * * The library files dwacomp.2.c and dwacomblow.2.c were made * using = 2. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index, ret; SELA *sela; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fcombautogen index ", __func__, 1); setLeptDebugOK(1); index = atoi(argv[1]); sela = selaAddDwaCombs(NULL); if (argc == 2) filename = stringNew("dwacomb"); else filename = argv[2]; ret = fmorphautogen(sela, index, filename); if (argc == 2) lept_free(filename); selaDestroy(&sela); return ret; } leptonica-1.86.0/prog/feyn-fract.tif000066400000000000000000000264001506303110300172670ustar00rootroot00000000000000II*B,&ĄfĀđÁ  Ķ ÕB0șÁĸ@,A0¤%íū2ƒ†Ã û=°ĶīŲÃ6÷§wđŸ~ī_Ûõ˙ÚūÂū˙Ņ÷ū-sk_†ēo ž~>Ũ„ ƒV¤ˆ(öé 2 œƒä5öđ˜T .BŲ a͘ߜ6äuúa5ÁAB C6#“âąíé6‚‚ ŖÍŖßP…„FÉ‚a‚.0Đ(÷jôęÚA´ˆ˙]ƒ ´Â &œ9ƒ>˰ûzZé=i{ɧTÔ&& ‚ ?nļŌûV˙p­|ãŖœ$˜!a4ˇ˙Ģú_ūĐvNm'H=͛M4ũŋ˙ŌŊ÷­kiī§uŨtlßą˙ūūģũ=x­:ėĐŠ:ūûŽŋ¯˙˙ÃĄâÚéĨū×˙ŋ˙īūׯVŖö¯˙˙ôŋ‡ëž+î˙ī˙ūÚߡõ˙īíīī˙ėU{<ú×ŋ_~ŋū×ī˙ķĀlzģk֕Õúü/vī˙˙øiˇŊ>ēđ^Ą˙īôŨēa§Õöŋčāj}ģúĢđƒ{ EÁ‚ũ/ßīßĶv)Û(pŦ4ĸūô |†‡{īî÷pÂxŠbœ&šŦŒé†N;#ŋ &O‚ íšĶ^øö 'öJdQņÁ28a3HØúkiĻ¤ûšąÃņdpĐGČáËɄíŨ„âšOīŠÄDDF˙i ›IĢO¸ˆ´ÖÂM6šđdpÎ2ú >ĶZ8"""!„ÂŌq_×nģKa‚ėBÚÏ˙ä;ãC! š8tôƒŪ“ƒé>C,õ!“YÁŽ b4Ÿû"?Ũ|&žŽBB^Gđ@Éq¸Ÿ^Čb5éČd˙ĐĻ…„ÉjD9ü… Č8ûIwčãl] í4Õ#™ H"ž;AČd^wM†~4Vg9ˇŒ#“]AEAGäûÅĶé-Ļv›VÃtÚ8ᄏn!ŨŅĄø‰d ˙Sŋ[Jē÷ŸŌˇNÁBwĒAϚ fԉ2,Qzé=8r‚÷ūī{ûMV¯¤Û@ž+˙˙ QPׅ¯ëčDDDE„ûx ›NÖÖé}˛ õØzéĐ'˙G¯ˇúņ÷ûøˆƒUUlSIąQ×ü/§úIwö‚{œ 7˙¯__ˆŦŪ0ƒ Vž)4ÂmĨawUFÃ?˙ŌđPˆī×õ˙úd2CwŦDDL&Ōa Ž áĨiį…×]uõɏīÎ˙ĶMqÂ-×Âxظš öÚ˙÷o§¯ž×ūąXˆˆ†™œĒÛ Ã; à á=äqŋWÚ˙“ü=b"EÆf֛ÅÅą°Öû]~ȃë˙ãADƒ@â›ŗ7}ēbĄŦl0ƒm6ÂūĢûH1Gˆ0„3’ ô™œšj*ĸØļ *Ũ¯Ž/AÄDDD0ƒ σˇ‚ 'iŪ>"A¤pĶ=} ×m&^ÔDDD2áČâA5ÚyĪ`Īâ""C(vpfÁ!Ĩ2|ňé§d3<‚Ž -'ųd ˇ Ú9°īi‚'ˆā`øÃJ“u¸uFčBō¤é5īҁŅįáũãí$ú8|ā¯Äŋ˙U'rpöEtČÆ­ũö¯Ģéč>˛1ׯ¯đø[*‡˜@Čü‰á/ĒOŽũļ@đb˙ûL!hy>ˆfPáw˙­ō‚ĪYĄ˙M đŊà ‚ƒžŸ~Cũá 6ž˙I§Č´Âd?ŦøíĻAŸ˙zÕé $q´ruˆOƒ <ųûJAUŨOū+ĢžĩīTŨ ā7ÎoÂiÄ2&y›‰L‡ŋąūūš×Å×öē áœåG“ŋ´( ’Qf§!ˆõ×!Ŧá˙köˇ×˙é_ĒmöĶM&¸AŌ㠆Wg˛ ÚM~˙˙˙§Ŋ¯ū“uÎŨŠŗsû¤Â Á"Ḃq­WÅoę˙_ū,9Gö—ũuI]/´ļļšI{>č ˛:˙îž˙˙č~į§­ũo˙oõ [G'Ŗ“ž,*đØ5Ēũ¤ŸūŋĪĸ:# KÜéĶđ۟JēįÛ á´qíl&ƒ‹!fƒ"ų„ë}?˙ūˆŖĪä0ë˙÷Ģžpc}¤ēô˙a5†@đfˆ­! `ĩę &d2ē  -ņ' `ĪŽĶÕĻi—TČdH)úЃš ąô,†ŪĘééw2CS˛‘î>A•ÃĻ Ûō f.?ĘđŸ¨kyÅG›žôâ ņâ3 |!€<4¤ŸÅtG˛Ž@đ÷Ŗ“´ãM2s<ÍĎEÂ7ũ~´›IÃēh>› ûŖ†Ã3š§ŨĻí&ž)7[ŋé=]lŖŖģM'öĸ%ĮâgzīĩûÉYũ?ėú¤Ú[M56pĶX.†Ęō~TČCĻBâé^>ä áÂ[÷úa}_ÖûQˇhâŋšƒ!fA3 \×ĮČ ޟõëĐÖģëī[‡„ÎW]0ƒCøÃ[úß_üĐa?ģõĩÚg´ģ‡ ûs &˜PƒŊĪ3pA‘3×į?ūãTƒ@ŊO oôę먇 ͖rŖÛë´, Éq°v{]i˙ô}zö͍Û\=ĐÁĩīīĨúO °Á}8M X†BųČ/„‹ęÂ˙Đ'ųâPķˆ(ÕzŽļP>–Á×ßĶĢū› S“u°ƒ “¨´PLŽ ˜¸ī^—íâĖņŖÕĩßĢ˙“‹ũW¯ũ-<ūŅËÚÜXA/2'c˙ú˙ęO>ßũņ‰Tū˙ WķŪžm&ÃŗEœzM4 Ÿ„Â$ x!†l˜ í/ŋėŠų;Ŋm~ũŊBúŊk_ᄗŊ[°ƒiPghãi§a Ļ0ƒÛT× ö­¯¯ūB9.÷Ûđ_˙ÚĨēīz…ŗĪMŖ•m°Ōqh;ؤAÄ4Ķl-…ĒÂmė7“đˆįÂ#ŖÁƒĪúū˙˙ęģ]ŋMŽ—NĪģ6!ÆÃŖ“kiw0œSîÚzīŽē`ú ˙ļëŋūŽ=ëīÖéúwIØY aÃM3;ØiĒâé4ūëˍī¯ūĩŋ˙ã˙_×§÷ŊnzUmb"ph#‚ ;O´0švļŠëßĖ)}˙Ĩ¯˙˙ë^5¯úüDDDYöŸTAÅGa=u´›ûuēÛĶ˙ūs80_ļ˙Cū×[ņšwö´A āÂĮ Žm;]mŌFîõ˙ãüWõŋ\ų ×|DŖ˛< ˙ŠĻ*-‹m-´’ŋZ˙˙AeķÁ•^˙¯ĶHDD\D‘ôĐiÛc °ÂKímĩēȏüøeīÚŲ°cčķ/…_ņM‹0Lų§ĢŠT7IXaum‚×û˙ ˙úˆˆŖ“0X4œ6)u`ŋh ?VEw#{"úũ$""&­¸Ļ(& °q÷iØ]5ų…îŊ¤„D0@ČøAåäŌ 4î‚aXa+V×ūČãuö „DD0ƒ ŨíĶAąLTUöŌ_\DDDvŸiÚ „â˜Ķ´ŊDC „ÕÛM&ƟN" "iĢiU!ĮÂđOQōƒHņYˇƒkŨA¯ōÅŽģVC ;ŧr ä2ÚdųĨŌ=‡ôš6Čdgh< d,Čd2đ‚Ö˛ N@¸áÂ!˜^-4s.ĸ\] â?!'G ģĻ>žAĩČižÁa?´û “ô"qŽŋĻ.ŸœãnÖíUÅσ!—Č 0~<28CĀxj˙^˛CČN“‡ †xØpí#mē9ĶNĶA‚2Č ÃęŋĶWd˙O_ĶŋI6ƒŖĶOĻ0ƒ'2õd&ŽJĶ]UYpVé˙§˙ī¯=÷JÁÃ8 ¤qšēáB Á0„[¯gū¸ŋūëö¯ßŨÚŨ'G&ÂuN.āâ … @ÂûW_˙×ēëC ūĒĶ÷Ũ&Ũ˜,ãŖ“ļģ8h CĀ\ā(¨ī˙˙÷Į˛r„˙ë÷§IŌl3õ‚`¯ė&47!˜é¨˙Ī™/ŋéxh~ú´Ŋ×]=7L-mŸ Ęh4!’ãđE2?ōcü!ũĩ÷ūīVN }uūˇį ģAœäŅĮm [ ‘ņS#Âŧˆäė„pžŋ¯_< îŊÕ [ē÷T÷úŋô›Ü3‡t{á4-a˜ dĻo6˛xK>/ūä îŋíayĀÖ÷x[õŋÖžˇ÷8gƒAļÛ´, î.!„ÁŠtG6āx›M{ öĒöDŦ?‰|RM˙pÁA„ûŋûU đūš‘ ÐŽC\}=߄ũČ ö@đŌ˙Q7—äü Á#âŧ2y¯îģYÂa€đĘ6 YCî-„0˜ ȸn ÷¯ŌIckĘS ØæŨŨVÕ…‚5Ä}ĨûVŽÂ’'ĐMŗ:Ž6ŽXkÂøKÔVōƒo“Īų˙NÂn›Ã‡Z´˙ĸ ™n:W͏r‚ˆTųīõJŪë÷>yĮ`­ßé2ø!×u}‚M˙Ö?ßûZNÔõA6žšØRœÁģī‡žH~ëēÕ:˙z ęõĮ9õBĐh2 \Gæ-īĶŋé˙Uņˆ-_õöũ¨pķŽÚv §3GÅ'eYkôŸ÷īōũ˙Ũ;¤á™ôlØ`“x͏y ~?âŋ_ķ=/ūē yŸKūjÛ mļ™ĘŨ”†BL‰ÄH'„ĘuūŊnžQįõ÷n>éŊũéëĨmē áœĐ4Âa†G˙˙ũúOīúũS˙­ûļ—žÃG&švš Ī>Ė…”#˙×_]&ézūšāl}Ĩ˙õq]ôÚO9QÆŨx°ƒA“âL-Žõų˙íroīŽß¯×ž˜VŽŦ7ļ•îãsĪÚiØ\ēđ‡îÖIĩ×˙ׯīWû˙ę+_I]u¨yÃˇ¯ßļlTTVšÛ§k}‘Ģû˙¯ÖŪ ĻžûúOŋlû‡ž]Ļē}Ēj!ĻļŋÖļĩ~ŋ˙ĪĨ}ä ܇čņ¯ũįĩí6č ûĩˆfÃÂϘ´Ø¸­6M­Ûīk˙ÂoKŋõĄúôŸzÄFl„ĖãžÛpƒ ąÃ -Ú¯×ų1ôđ‹ˇÛ×õ˙´_˙KÄDC3š¯iŠ0ƒböĶŊëW!]Aōßįƒ˙ũđ~˙ßņG 0ȀaÅĒļ•­…FįÛúôũô¯ûüDAž4Ŋ0ƒĩUoũM]ß˙áūŌĶˌÁ‘āAŸ[ļ)Ļ(* ;Ģ[Ŋȏ‘žŋū˙ßÂb"" Á˜NÕÄ8ãģJÖÕ×õúõ˙Ōņ`ƒ ēk`ÂL0“ÕÛjO>ŋ˙cÄDE‘ôME1M1A5ˆvē­×¯Xˆ‹#°ši¤ĶmAļēĢzž$Wa4ûŊ‚!Å'`ŸXˆˆˆg Ÿļé6,&ø‹BĶ3•l]xˆÎh2<g‘˙ä5}qō;K]ōx†”VAf+i„ëL/ĶŲÁøBq^áŪČ õ׎Cc‡ Ú?d ģĻŋû aÃá@Įa{úųÆ8pļA›õ˙^q=<ƒHdđ„✉Ä,Õ×_t˛;ę˜B 9™ŗæ ‹ėb=WúuČä2A}uM?A„MaËr:Žēĩon‚ŦųĮ6č圛T,XL*qB&éøŽē !zNôõh'vM‡œšˇiÉ€ōĻBų ĢOĨ_Vúũ×[ú}'œ;<%OâĐaįâČ^!–=úķ{ ųõømmnôļĪjŽįį3ÁĄjƒX´Â$€a0›Ž­4īÍšûKčW^ŠûĻp!ųŖŖ“i4ƒA j~ œŸOŋü5ŋô˙ŊI´œ0LķhãhÁŅÄûbĐhsų˛ Æ;˙ˇũĒÔZ˙Ŋ}MÕi>éa„Õ…âÂDĄŠ™!Č‚Pŋūūŋ˙Ú5?ë_WīzÚ āFMí4Ћø%ÁNáŖ’wõÁßėsá?üzũ§¯W\=[Žyéļp%čú~…„>%Äø¯ c/_R<ŋĻ8žĩßĐâ÷׃útˇž6n ļuI¤{§kĐaų?÷Á˙ßßú?ëúø?ę¯ĩŽ­]Ú¤4TrnŨ„ę!Nečo#Âđ•~!°~מÖÕŦŠ˙ųqč}sDĄiuöŊkÕŗŌŋfʓnîZ;‹BA„ÛM;Ü+×ÚļE˙¯-ōcüāeœ˙ģ}zčúô/UĪU}įÍÂl0Z96›‹AĄ{†“i4à zļˇú˙¯ūLô_˙˙ī˙ûoĩ­úNĶ0f|6wÛ¸­ŠØ¤Øã×ô˙ŋrŋ}Aŋ˙§úũ´¯ûũŋõˇJŗņ÷ Û3ŪÍnAĻÂaÅĶĩŌ´žÕȏ¯zØ=˙ķÁ™õúũk˙ŌųË]îÜ'„+†aa;Nč0›ØãM6ÖÖ˙ŋõōo˙Ŧđ'ÛI´ŋ˙˙úúŋ{ÄDD0™ũ5ÛúkØ%{Ĩ{ūžųoīüq¯˙ī¯Ĩ˙M¯0LāĖÚa5i´Åa0Ŧ5´­.˙ȃ˙īī õëĶŨŽõ˙_ÄDDL) ÃM5iÄ(Ø œau_"?ô~˙ŊVôÚ_^ øˆˆˆ`˜M8i„Ō  ˜VÂļžÚŨn÷ū×īĀ Öņ!ė4ôšlTa5`Á&­Aö’¯_ûī8ÄE§vš´TR|ę?ļˇßũ:ū—øˆƒ §ÃA¤Ú°›iEÚļ—äX˙ú˙a0Oˇ Šn)ÕBmĢKūĢøˆ¤­0ž˜¤Aą]¨TöÕœA‘Áƒ`é…ÛT4aiųPjÂI8ŒØi‘ÑÁ@M=ņiÄ0OM`’!Ãŗ7pĖãžō‚øAŠâ­qQ ƒ# ˜Z`‰â8AŽ=˙üƒk‡Aā‰Å9yW!Į˙ũō•äŗAĄ œ?˜MU×ôČ6f}qO_\…īũˇžƒ†gĩÂŊaGÆâ%—‹kˆwrĩÚôķŖ†÷īĐqa ŖĪ3a^]?w˛ßk§I˙×t´zŨü4( å?ķA˙,ƒ(äwOîēō ^˙ôá™ė39Ķ´ˇqaƒ!ĸĪö{!¤?é§oä‘ëč~ģW ÚwiŠŗhÁØVޏ†J…đGō8ˇ6Ād/ôŋ‚ūû‘ßĨũ=?ëî)û6m‚ģÕ Ū4N F#ˆx ˙ûĩ˙øg¯„ŋp—Õŋ[īĶjė Ύm:mϤ3ųčAžw _ŊU?#íŪūŸˆ/ũÚēÛ]?ôķÎЎtshÜ÷I†1öēü+˙wœôÖø/ęëB 3 ­m{WMô“ēN“´ĐtyuđA˛@SÁ Ž d3\(_¯õ˙ßđŊũڂÁūæŸ˙­ģ×´īT ŖgœŸÜ4 GØ2‰@Ļ€‡ëûí¯ãžë}][ũúÛ¨uū÷×ͤŅÆė&ūŸa0AæĄ¸–„ žŋäA˙Žŋö*(#Õŋ×_}Y8•j Ũk˙ëŪyįö=ļŠ4ôĶBBû5OVŌm?õ¯õô‡ũģūõk‹'ũZāŨî˙ĻŌpáØ(AŲÁqį:´íŽÆšlCl,0’zĩĒūôŌY8%™oč'×^ûęîņ= Į_˙ûūëĻŌˇ`ƒē<ģŽÅąĻ?mVŋÃõäĮ÷ØĢíˇTˆ°aÚ V•˙ũz^‚vy´kgŲŋ¸d5pĐx âÚũiÛ˙¯¯ūŒ Į­ū×ú}×˙k tû  ¸ÁCûWh0ša7|'ikú˙˙‘ߐî3Å#õ×Âŧ~¸‚û‚ĶHkŊV""" ÚBė%MuąwÆĢ§ki{[ũƒģ °‹Í5úŋų  öÏ˙â"ąeŌd~Õ;R…Š ˜Aą8jĢŨöJ7Žŧ/ŅÃ˙úę-ūüDDDDi„Õ2PŸÎl;§Õ:_¸v8g6{^!σ+‰q.?ž¤'"_Jˆ;¸i¯§Ū›îˇ÷ ũG¯Ŗ–-4- #đƒ/Č"Ųv×Ļē°Á˙Úī]úôŨ8pĪI„ãŊ­ÄXL!P3@ŋÅ}˙øûīƒk~´éé„Đpá™Ųʎ6Úv˜Aäâŧ‹Ŧ2c˙ũk_\ v‚˙˙˙°›IéŲøĶŖ†Ãm|C@„!ä&Îúú¯ũ_ûxz˙˙˙éûĻû?YáNî-; —‚ Ÿ“ bÕ?ūx ~û×˙¯ũë_ę­&á6ûėÎ|äīAÄ0œA„ yđƒŲ ˇČŽqđžMūŋđŨfģ×ûk˙ûA/õúiÃ>Š<ûz8ėZ„͏†0CB Éņ8Ķõ˙×˂œ&čũû~—ûî%#Ūú˙ééęéÕ&Ųö~ŖG Ú{MBí= ĀũūäGzėøW˙ĨÅz˙…õöƚ÷ЎWũSxz&xHGļ¨äŨūŅž~<3@§đßĨ­Žēũž†–ŋũū˙˙ü}ûÕ´īzŪÔņē8|;PŊôė&НØan­m/˙ßũ˙_A5_4~ŋÕß×ũkJ×˙­ž §ĩÚL'ÚQ84°šküØ4õ¯ųĀĮŅû˙õņ˙Š÷˙§ŨēĻ¤qšŋŋ´Æī‰„Oĩ[áúûéwûų7…˙˙ëŽß˙ßĶAī­ĐAņ"ŽB ÂfjÕBb!„Ø´Õ9Đ3īûWNŊȏū“˙˙ōtũŨũqûĨ˙ũˇˆˆƒ#†ĀA‘āšfqĪm„Đa;M‹^ĶĩūÕ{C^ë˙YĀ_áē_ūž˙í~ßaa;ļˇh8a0›Âjļũ^ę˙üë×évŽ—ˇĐh,ĶXˆˆ’…{ļâ ÆX°Ÿ~ëûØ;×üđe:Gž?֘ãÄg !›TĶ4Žkچ›4Ä5Â]ĨĨäXūÃßyq˙ĨúąĒž‚q(â!‘Åk§ ÆûKm-uūŋßZÚ^h†­ûˆˆˆ´ĖŨęœk§jéų;K÷&=4ŽũDDamL$˜ia8i_ví´›[VˆXôßK]žžl5B„zîãb‚0šąÅąOԝͨŦDD„€eÅ.*eôŨ4ÚoŦ'{ĩûė,DDE‚ ö˛uôUvų°ËŒDDC#árA­¯ę!ÚX¨ˆˆ MoĮ Č-C¨‹TÉÕ­SHD —Ö@đWâ€ŦņB">>õ<Čd‡ xž×ä <÷~AiČ ũúëŽAœp××ũ[‡ČjŸŽ+ž@ĮA8 Č7Ë<Uü†HeAž8°œ qBL‹AĶí~Č }„é;L&$hāĖa!’úy ģ xcČŒ39Î6Īƒohâzá ĐÉAÑŲĀÁļl}ę÷dn2Ât­ĨnyŌ ģ´ŠÚ`“¨°Š |!ˆZi܆‡ôĶč ‡€đúéũéēwÎƒŽŽM§ín,dãö~ žCŽPę5­´;ũ]ĩũŌfÍ;/ÍÄû˙īkޝöÚŨŸm&ƒhöÚ 0™ “"y9­t›gŪl6ÂͰ¨DXN-COäNˇ˙ßÉŋû˙ÅW˙¯ŧ_û…†ëúģMŊSŗÎ'GnnÚŨŦXLƒrk¯ũz_˙Š1ęp˙ļ—ūūĮ(6 O˙¤ˇMî“ŗīAÃ:,Ųí‚{L)~„°…í×_T¯ũRōcũq_ÕkĢq¨ÕÖßûīÛMĢĶėņØNÍ76ßqh3q?ÂéˇWZŪõkđ_y7ū˛cüđeī˙ú‡×^õüūk÷a:ē=]še ŋ‡„NÂąÃ;J×]g4ŲõĩũuúĩĒGžGNŋŨÖ?úŋƒēßt‡`ƒķ›īû؅L\SØâpZ˙¯ĖG˙ũ¨<āūˇK¯˙˛pĪõ÷ëūƒ¤áÁö dy4išjcM=A°ÂQQ÷ŲQ¯ļE~¯õ˙øÚû˙îģũ~č.˙Ú[û 6iÚļ=¤iÄĐ3ĩ×[_û}˙vĻÁ‹ÖĩížÚ_ũ1×ũu˙ˆˆƒ0 -„Õ*aqĻ›¯zŪŲėîŊīōcīø6ŧ˙¯˙ŋū"Du 4ĶũĐM6ĸ‚a8‡uauuúȃ˙Ž[ƒü/˙_ūņ_~‡Ú}Ēģn6)† ]*í§öŊ¯Ø? _–˙ŖĪõõŋ¯ē8,DŒpÁWŗ9SLm…´ęÂĒú˙˙̓ īôŸ_˙×õ§›  „‹ÁϘ„iģšÅn—ßŦĖũJ˙ŋ˙ö ~" Žké¤ĐxA°ŌUĩų ]ē˙÷úúīėzXˆ‰(Ŋ­ŠA„R 8a0ąĻŠë˙ųܸØPgüDD5MoJģN‚ ͆6ĶŋÛMÕWÁ„Å&"CŽ"G€Đ`ŠŨ¨ĶcbÂkŽļŋX†LDDQ㈆2:6wdëhC4avׄDDX&{M:bN<tˆh„rčô‹Ŧ‹ņ ĪG+XLābá‚B"-nƒb‡|†Ë x4; rC‡Á ĻäGŧāßÉø˙ôū@đŸ˙´Ažŋ~ē‡ä~õ×ü4ŸgĩÕ}ō CŋÉa.E ¸BâPö›Č0ûM;sĐ3q>7 ÁŦ;Č/í˙ũb ˙ė/žwāoģqa ōæ_cËr‡$ä=ūģ ČŊĶnôī†p[Ŗß^í0„>AęA¸ä3l‚ãūīdŽŸũúvxĪŊÃ<)ŗ{[´éî2~O22$ȃ’r$ũôūūŋúĢö•ŊĻ&šFÛûâÕ0@ÂD „˛káß˙˙_¯~ŊŨúV˙íSlaB†AGû˙˙ûûíīí&ũ/Ç ûÎ6Ž6Ú6úi¨A‘pØGÄ˙˙û˙­v=S_îŋ÷ĢIĒw§ đ§G“TĐ´Â Ū˲."<ú˙˙um'×ŊZé÷]žÖõV‚ ŖÖrxA§„, ÉTn œAˆ"ŋ˙ų1õ˙đŋũ§H˙_tÕžŽ•Ķ¤íŖĶG¯§ AD€C€x?ëû˙&?^úŽë×Ũ>ŋ°DuÆfWé?ŗčSĶ{hãvœCa„.6oÄû_ŋũ?}öđbęÄÂ}˙Ą0ŨzwÃ0“Ŋ6Ėã:Ž;Úq`ƒ!Ļ™‘”^ Æĩk­¯ũ¯^ĢQS€Į˙_XkĮué´?û9%ÚiéļgîfœäøkØ ÂÁ}Ŧ0ú}×ũģŋõ˙ÍtŋØûV‚øũU­Â„đ› 6čãŖoúkÅ1lSœi¯ÚčÚdqõM˙ûķ€ŊũnjÕ?˙úzŪžŸa;kĶՄ´ÖÂmĨ~×äW×_×pEÍáÖq{īÂõëĶOM­ĪKŊŨáŸnlÖAĒŲü&™ŸÚ´Â.65éîū˙Ŋ˛ ú‡Đ÷úGĨĒ˙_˙øũŋON” ÁƒA‚ 3OĶH:zl$žé˙ëÛŧÂũv‚ogõ˙ęąë1]{â""!‘ÄqŲi­ëb“ Ã Ļ­„ÛUõJû˙_KųĀ]˙Žû@đ˙ˆˆˆ`ƒ'i¤î!Ļ‹c[Xô'Tŋ"K˙Ôđb˙áX˙ˆŽ"Âzbė7H8§mml.žŸûõuĢŦâ< Ö˙ír Xé‹8GEÄ žĐa[TÅ1L\4Ն¸RVŊ‘cö˙uĨņÁģũëO!Ga5lC ąQÚ¸^ü‹Ŋ7ÖMÃÎoøøĄ a}Xˇu̓ *Ģ Oȝ֤[Kë…Đˆ`„3†mØLĪŊ Ø „4â“OŌ´õīÛ[Đ^"" &0M4Đj-¤Ķ8Û vļûoķ`xļˆˆˆ`ƒ>ĖôãĻ( ؃ĩíWO ãŗ?1„ÕņAšzs 3ÄDDåM3KQ &À€8åå:,đ,ø,(HHleptonica-1.86.0/prog/feyn-fract2.tif000066400000000000000000000115301506303110300173470ustar00rootroot00000000000000II*š& ro˙˙˙˙ų €WŒ) §Ķ ÉNđ‘Ã_!Ÿ;Jau„Ēĩ°Ģ˙8—­ē@Ķ÷~/­‡_ģrĪŋ7úOúõUȏ­´BY?!Ÿ_^ ¨0@É"Xá%ôõą „Ķ”ŒCĸ~A{_^ ? ƒd4ßUũ4q°ÂhS4káCpēÛ$T™Ę§„Dd˙öuŧ§Ūž˜A„Fĸ>!đØ`Ā-‚ˇWAdá–y†ú 'aBļƒNĖˆHecŽ;ēŨ-¤› Đ ŅĘ̍&Ą4ƒĘîũ]ûjÕŌzI&ŅÆØ[¨M0Ą2°ƒ×˙[ën­'I ĖÂŨ n{h2%ķ‚~k N­m.ûTŊßJŌpBøAŋGÁCÖīč^īíWŊ6žŋúĶtĢ˙ŠøfšũĨm˙ŋ÷}ŖáĄvūŋĐĄĻ4ė úWüi7¯ũWõÚÛOīû$!ˇ^ūƒž•ŊëęūéÃŨęŋkü(dJåŽqĘu˙_Ũ鞡¯īųāÎÂ)Ū˙˙ēp÷˙Z˙íßū­ü28z Ø;ũ×û˙†˙ũŸąÖžŨŋßuūŨoø  4ū­á’žū­×ũß˙ĶM6úcŊ/nīû?˙Ļ› ģZgP!÷vE‹"Įũŋ_‰ãûNÔSö—Ã?°×ĩÛ ¸ũ˙ˆ˜ÕmU6]Ž8vƒėŽĶw¯Ä‚Õ4M1H5Ļ™ĐÅÜ{ëøˆ†M“AĩW­Zˇ_‰ îÂa:´Õ4›PŌĩüDLà h4Ķ$a ڊm%ņÁ0ƒ …†šb ņ ŗza4Ōiâ" ¸0ŋ‚‡fPøˆˆ˙˙[ ģĐdHÔÁ>Ō!’?û ÖΟ ´áBä2AV}u ÛHįŦá p̍a7<1B™ ĖUč_A„ ‚` ČæAEë¯„Ķ Ļ!x d'ļŠ˙Ēa L(A„É#XsÁZ8txÚõ ‚ ācĖ‹Ōt›ģŨB 0˜AÄŸ˙é[!įOoēāŠ„ÂvoTũ&•ØA„“Ãŗ@î’LDC$/!—Úū;mS´ŨÔ3@Œ#æîôÁ ŧōûW˙ĻŊßįŽ›÷ĶĐ`ƒ!˜pƒUÕ/÷ũŌ‡IŲ"Ãa‚a „Žƒ—2g˙û}ũ°žOŪ>ÃTĶT Ģ'2'Īŋ˙ß_JŨ7ôm4y´y†ŌńÂh0˜"@`Á fƒWīõ×Q¯éŨ/d‡§H6& L!a0˜L&ƒî˙ūŠ×ĩ÷Ūõm§]- ĖôpÚƒ ˜Oú˙ū—÷ō8*Î9ܧíē­§A‚{}M—ŖĮUO˙ūŋ ˙Z! ém×_ĶíČq!ũ6†ī˙ûđ_ûĶŨõ˙˙§L+ÂÂMŊ}ˇ˙úx]ī×û_úßīCw}ÃKė2W×˙é…˙˙Ũ/ųÔo˙¯îhaX":ņë˙_ŖīĨõŋß˙< ?Úë­z#Únŋ˙ŌČlã”3â¯˙˙åŪŋúö›I;ô°žŋ×B#īūģ˙Ī—zö+^ŌbÕž×Ŋ/īõūõž|ËMĐa80Kš°ÖŸzŋÚŌ÷õ˙뾒ØL+TâŠãŽī˙˙īß˙×˙0žéŌ¯ Ú_uO_o_˙ũ~"$vm*aA5(ĶH8a%]'ŋėˆú˙ßīū"2@( ‚i…U†)ĨM×Ãē˙ŋūfaƒ ­„ŠÅ=…]ŋŋ˛Ģöú`ˆ8a;ÖÅZuŌŲoÛ /ĢÕ߈ˆƒ0 šM6˜a+‹ę?˙ŋG5†i´ ›IÛ]ŨĨPÉ߈Đa}5t ē~ÚVĮęAĩąpaĩiŌa4Ø4–ž„D" kà 4Ķbm~"AĨČ.9 ; õi6j""$(ä08amiЈˆ0°™ąN=ĨŌãYÁ,ã6°Ą2—^ ™K /L((íĨAwGĩ¯ĐkúQmČd†kūĶ„ €Đ˙î˜'˙ā¤2zŋ¨O˙đŋ¯áH/d3(A˙ xĐ}<&<‚ūC0uđ›_é„đ@Č=‚ĐgË‰Ô]ũ8xL&„2ŽGLƒFkŋŖŽöôÁVĶ—2zīé:7ŖÄ}ma;4ČaÉaËít˙̏f‚ßX°ƒĶ2 Ņ2gĩĢTßVôĶមPĄ0M ŽJČNņņ_Waw}xUM4Ô&L ČeAr<ũ{ëšëŌy<Ö0¨ō還ĶÁC6 ylÅũ_Vëūš„ZM&ŲF?ĩPĒ0L&2‚VA;˙ūŋÕĒx@îŒũš ĐįöXP˜M Č{'„$ō ˙˙ŋZîÉå Ōߡ„] Pš„„ÁB †]‚“˙˙õ˙úá >úîžö…ŖíŖ5L*„ĶOČÃ%29j ŋ˙˙˙đŋt‡šAaÚed‹ ´46††´/T `ƒŊû˙ņęëCbė'aNUm&éžĶŨ‚Ļ˙˙˙øĒP˙zŌŌtˇ=Û ŠÉ… ¯v—˙˙āēĶÂīwϟoė.Á;(7'wa(}mũīõ˙ū …Öx4[˙õ×Cf„ ÚvÖžžŸlŠîžŋß~ ëŪŋ˙ŋCí==Ōm:ôü0Nëoû¯đ¸-Ķíú˙ˇ__ˇģ­‹¤ŌoÅ=}~Ÿ~žŋíî˙˙HÔū•õ~ąŪíĨũđũ/GžõÃ˙ęŗáŸ˙{i_´Á„“n¯°žŲ(õđ—íī˙˙}žžÃÖĶ‚lPMbø˙Oöûß_˙˙˙ŽÖũŊ„Õ´š“Õt^{÷ß˙˙˙÷zoáá„[V›:$›_ččŸ Ž2áõ˙ēî˙˙ŊŋoÂkaBM ƒNŽ68eŧ}˙Zū˙˙ôÅ÷ÄD50“A¸Mڍ×ũwúž˙ëöü7ˆÎ; ög(uM5wWßí÷ļB˙ûOĻŪ",ŌĻļi&Š œR˙ö“k ?˙\>†XMšjôÂiĻģÔCbŋŌíČWûr7ÄD  -„šiσ °Ę›ũ}[öAŨ ށ2ä5ÚϚlU4š­¯˙°ÉÚnž""!‘Í3zM§¤Đh8i^ÕüxˆˆØ9C”9ĮŸi ÂeL$iÅÂö•Ŋ׈ˆˆˆ`˜&`WÂNĻÖņf)t\2Ö­iĩâ"0LģLōJ[Tüø3A„ËČ0ƒAū„D ÁõūĢõČƕa7€Ą|āPꆗaŌ^™ €Q ¤Âü&ž?‚Û]kÖ^,¸d\Zr#˛n=i ņtĶ!wū É¨ Ė?Ø\ƒN&×Á DA ŧUzĨÂNCŅWw}— @ÄÄ$žĢ´Ķčü6IŠ ž˜Pƒ!P™ §ˆžd5Ō>š…PT퓆U¯¤<ôâÂϚ„5ŋ!Ÿ>˜AŪ–Õ¯ž¨öđšxA„ ‡™ g­zßģOē ØWń d3G'„>[čvṳ̂Øf`‡ÕĻĄ2ų0AĘŸšū÷]‹4a>ÖēA°ÍŅéĒ *„Á 2 d<ōC÷ŪēÕĐđÅ^´›žmĄSA„,&  Á4Ą™˙ļ•7]ũ6ķBͤéí;Û[KlœĒęôÃL$Á ŅđŲÛáģ¯ū|j@Ÿ˙ūÅ&ŖiŌj¯yĄēh-čÕŋŋĢ˙MΆ’…×ÕđņëØHi;il‡õZ˛rŨü?žŋˇ\øg˙×jŋtīŖ…aĐ=ė.ūHvīēūÃz×ŋũõëWˇkģOȀšcŋíîũ˙˙õũÛįÃ?­ŋzŽžu÷M‘cu_Ãßũíõú>ŋ×ũĻíZǝuũŋ˙÷Jß˙ˇö˙ÚtÔRw .Ë{[û!‡{˙úˇôû÷˙ÛiĻŠœl(ˇĻËa“Ë{ī˙ĒžûH/îB;°šĶiÚ´Ŗø×˛8ī˙íž˙Ã˙…˙ \pa{ …AŠ×jö;lŽ˙ũ^˙ŊũŠ üđą!žAϚ ƒO´Ÿ˙ōpöD˙ˇ÷ü$D0M0š°› Š­Žíˇa§ Š˙ ˛ ŽũaéÄpÎ ŽÚÚ=?í?¨¸0_lŽ,‹ ž´—úâ!„ČčŽÂh0˜AĢaÂašũĢLkĮôëô""!„L%aZi Đh0ƒ†•5~é÷˙û¨ˆĖÎøÕ5bšt ĒŋI­ũ¤"")š7˙h4ÂM:iа—i˙ $""!›F Âi¯ 5QME/ąB"!‚ &}v ĒŨ0žÂÃ5 Ĩ &ž\5°M]ā΁0X`ƒ†!ŦhDG^ĩë!’끴2Ī„Č+ZYÁŦ˜R& S úßX;ų €]ë” } †@ŽÂÚwŨ2ƒFd ąĮ§ëČ)œĐ˜R‚Ž˙wЙ†ČP_}‘Đ_žŋN#ė?ČšâĒĐo„ūļ™Ą6˙ņßŪü„r Á.!Ŗ?l0ŋõ „ y ÛÁ Ö$„āŠûŋ ķMŽ'„˛s"ų ÷ž¯Æ¨ũÕ8°P˜L2ģ]ßŲ¤úŖÖÁ Ļ2ŽC’īü†@ha6“ū‹ ’P@ŋœ~CRõIyŖ´üyG°ļ ŠēD€@ōæ@ŒŌ^ëÚŪڂ ˛r!ÔõBôˆ<ÂxA d â°‘u÷˙ûÚa<úÉŽĢpÁ% Æ"zah f‚įĀķũũ˙ @Úī:ŦBT}l&P°h0“!p‚ˆOQûūë÷öœ8`ƒĨ ƒëŠ„Đi’9 4u €—ũ/o÷éęú÷ĒE Ÿ>ięđT/ū˙žŋi§ˇIák¤MUū˜a/ ÷øũoÍ'íSŖÅ–Ž“Âl8t?ö+Ûŋõ˙÷uëšAwŊ:ļī%ã0Č˙ĩí×ú˙ũ˙ũ Ub•$ßģęA‡ö ßép_˙u÷au÷û_¯ ŧ?߂ūĢMž¸˙Ã˙ؘ?×ŅĀQß˙ û÷ūĢÖÚĢ_ká|“ŋīŖ;ūû~îŋß˙úanīīúô˙ĶĒŌ‚éí˙˙„)U?ūŊ˙nū÷˙˙Pšl;Nū¯U˙_mmpŋˇ˙×Õ§ 0œ0’ö˙˙ŨĐFwđßŋ߲B_iÜRa5ø˙ũēŋK§ŪúúņŲ´ĄßV“A„A Ũ4ī^öČŖũwx˙ņ"ãMwĻĶTôÛ¸žÕ!Ūëūâ$ ėģ ¯ŲĻ­4i§}~đûėŠúëäô/DDDYv˜MziĻm7ö-X0Ÿ°ÂˇOúzCˆ°ƒ@Čæ0Õi Øļ‚ :¸‡uöƒôõqP#é„í´˜N‚oi=Ĩ ģ_q!›Ú­šJŪ6˜0”k:ߥ!”8`ˆ?ģ ­‚Ēb'ūĸ"!‚agĖ ĐiĻCA ëÛHDD  &´ũ„„A‚ Đi­Š…°„pÂÁ‚Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˜> äČp¸O˙O÷ x,‡Ģ Č*éŪáĒt=—Dp3*āÁÖ"Ŋ  ˙éá‚ FūákĢô×äãééõuôŸú˛ .ē¤˙îCDyõŌ°˜MJ\Čgōcõ˙„-p˜ dÁƒ‘ŅpÖ˙¯ÔZaB ‘ĪĨũ7(8faá4?˙ĶVmLÍŖÂĩ˙ä1œ[_ éļNL0ƒĨj2H%eG×ú[O×Í}4ĐŊwéöánŋ9ļŸ›ŽŸū—ũ~l0ƒ Ą˙îũũÉú Ūĩ˙ūũŌųĀoVŪēo˙_õō kúõ¯Ĩ˙ÖŨoüm¯ŋ˙˙¯‡õū¯˙ûîģ ß˙Ō×ú_ũ×éy¤uĶû×ÅnūŠëūũëŋ{ôÚ_}Úúũm˙‚vžä‡÷¯˙ëĩ a5°][Kë!áŋö+´ĐaM;IUđ› HH÷­ëļaÃM:öô×ŋ ēMR{ƒ?ļŌ^ŨŦDXD/8a{ûõ†D‚]< Ճ8á|DRÜ5„@â)¯Ú ĢM…ëBėŽ b˜jēÄDD0^–)y ČũS¤´­|ŌK Õ%ė Ŋ%°…qŽļą˙˙˙˙˙˙˙˙˙˙€€Žãã‘HP(HHleptonica-1.86.0/prog/feyn-word.tif000066400000000000000000000006521506303110300171440ustar00rootroot00000000000000II*ė&Ą“˙˙˙Č7ė g †@&háĶŌzN¤˙ū“˙žŽBB_‚KÄø‚öCô)Ąa2Z‘GÆÂ?!Hôqļ.ĐvškŨ6øŅYœæŪ0ŽMzKi„ĻÕ°Ũ6Ž?­Ĩ]{Īé[§˙wŊũĻĢW˙ūļ‚âĢ_d×~ÄŖÕ•OŨ?õđ^?úũ_ū×˙ôpüđ'ßz˙¤Ģ¯ÛKū¯˙ūÖ×īZ´œ„ü0 ēūŌĩģW^)Š ĻąØA텴đÂjĶAĶqL^ Öü&gv›ÄDFs „ žƒ ŸKĄũ==pøĀ@Ã88äšĸ(HHleptonica-1.86.0/prog/feyn.tif000066400000000000000000003145341506303110300162020ustar00rootroot00000000000000MM*˜ž <g˙˙ũÕ˙˙˙˙˙ßWü€¨Z<Œ´Fˆ†‹ŖRČ šĸųI t]—FÚ ÄcUK!sˆĄpvG˔ VČčÆ^9ūGĘÄĪÎ#莈čú:#ŲA,*EôŽi+˜8CY ŪGđ‚B"5Jˆë $:&ˆíŽŠFxOeCÂÁ˛Ÿ0āÎ#ŅD## @¤ã°„-ĸ<ŋ‘ŅŧÂĘiaQÚtjČ0ˆų|ē>ˆhÍy DQ)%BKQˆëËá!Čđ§a8@„EĒ8î""";.-„Ŧ ™ĮGHŖî†]Œ,ρ›JhŠą‘ˆē ĄŲtmÍ0‚ÔLl§(sĀ$„ūy܄(3ų>$„])thލN¨Ž‹ŖæGFˆÂĶ.‹¤ŧŽg=;ˆˆ”>aņ  rÜD§c#æR;B#ˆˆļXâqŌĻĘJ”ÁJ:†GI„‹ééÂ(vc0ēT¨žÃÄb†ļ]Ķ @3ú—ÔúUČéaŽ];ģ.ŗi2B<ĸčÜGJ"Gr‡f ˜‚ Â8‚*¨ciD"8ä3Ž"8ˆáƄG8âãŌVS˜–ĘØ)‡* ŗpÛBBC=‘ōę4 Žĸâ#Aā\P(E= Bķbö†aÔE‚>0ŒpD|ģ6ˆ˙P‘ôˆé]0đ@­ ,a8#Á´Ä!"<&ˆĮÁQ ¸î"",!eäŗ3Č訄8‘ķŲĖ!…̧rC†ĄÄDzDDDa†„DŒzj¸Â|AÚz##éĄxLģ‹â ØĢ“LN,¸dDāŽ8ĪpōÛ´@‘ĖŅ ##҈)´‹0ņЋ/‘Â$G DDDHƒˆœq¨#6"!Ɏ""Ј†G"8t""#D6",1G˛Ú2YôG@!f‘P ČéHčæGæ§ bĐ´"'DG„Pâ"""#Ž‚nĘ eŅã#ĻÉž#¸âã#ˆGĸ"""8ŽņĄ °D|PaÕYÆGmâ""""-ËŖGËĸ>G c.ĐfÄDDDD苪°&ƒf"$Mp&F"R…#, ņ%šŧ¸üDĒdq‘ÂŅĀÚøˆˆ‘8ÁŅqK°ą ō8b%K0G28†øˆ‘ŧŽČų#ĸ9ĀĐ&"""@‚́˜fâ$ÍÁlņ*hŸ.‹Äx¸d†ĖDDHa ĻÖ@Y,2āʁáĩÅl&€x.qáÍŗ9}@œŽ…ŲÁː‹!Ĩ ; Ür¤Qd åT‚ōRY˙˙˙˙˙ŋ˙˙˙ī¯üãū9‡žøA ˙˙˙ūŋú˙¯ūŋëë˙˙˙˙˙˙˙˙˙¯˙˙˙ųŌÁpˆ0Z{Zŋ˙õˇĨ×­vø}ũl^ŧ†ņô‚ã랏ņ_ũ˙×_ß]wß]˙˙\":ãëûëûß^ú˙ū˙kO˙úī˙˙ûīúë˙¯ŊÕ}ÚĶũŊ/Ûũ/_ß˙éo÷uÛ˙ëžŋ­=ŋá~Ÿ]īßëĩ×˙˙˙˙ĩ§˙×}˙××~G\}u˙˙ŪŪŊ˙÷ŪÖŊoŪģZí}wĨžŋûz˙}uũí~žũõÃŌũõÚīW~õõŦŗû˙~Úé{wû˙Ã/›Ft×ö”?õūß_}úîŋõWīôßu~û×÷˙žßÚZû˙ˇ÷Ūßímm˙é^ßéīøímûi{÷ūũ×í˙ Ŋ_˙˙ÛŨ{߯˙ĻÚÛöŌ^ö˙Ûũ4E øaŪŪ—ŋˇūé>_oočD?īíôÚ¯í˙˙õ{˙ˇũtß~û}úŋŊwû}ÚēûūåVŨ}ŋ˙ßŪžö÷öûMzoÕkžŋ_o_÷]oŽĢÛöŌãWØ~ßīļ˙°ŊŋūûõītēJũVņöũĩ×o_}ŋ˙žŋÛûKŊŋĶž×ÕŊõúÛö=]žŊŊ´žŊžĢŊŋĒ÷˙ŊĩūûŌú˙îÖûĶoĩõ}ū˙mv´EWiŋÖÕŋëīKũúm6ú ģaĨęûëūũˇųdJ VØ_īŊ*ũ÷Ō}ž‚ą0Ķ …˙Ûęԋ/öžûīNCKFÁ¤¤ŪøKĐ~ôŸcũŗāÔÁ‚Ēގizõ÷Oû Ã `đÚíé/ûīûŋî˜ba˜onŌõ÷ũ[W}ßh"‚Ķ´Â Ō]ĨǝuË!’#ĸ ‰†[† 9† Ģi„•˙Ũ­^Ūą*ĸä\.!– 0AÚ %Ēømē{Ĕ`Č5(^š“ h@IÚW˙×ū$( AãöƒĘ˜„zûíZûø‰Ē¯ÛHīPÕL.¯ëˇŋ‰X™>đU[ .˙Ĩīâ":Š;  ÂĻû^Ūū"!–<BÁ˜'ēúûĩˆ’‚`°A§Ļ×ūž$¤\‘ jū/Ļ ĸ˜'ÚŨŊrēĢMÁĘĒ „õ$™ŗŽŋNa¤4íüDFˇôÁĘVOŦļŠQt];ũφ’(*øˆ‹īú÷´ËŠUwŊaÄZ ĄČô(īâ""$š#ox‰$™r‡)īâ""ūŅeĢqņ˙ûī˙Ž˙ĩúß_īŽģ˙˙īú˙ūúūúë˙˙¯īú×o˙˙¯ūõũŋëžŋúū˙ûūú˙˙˙Z˙Ōw˙˙õ2´GËäsŦ! Ā †ŧėԎ睙L47û!öˆ9—ŸŊiûûī^÷ūæK˙¯^IŠ`Ž"čŅ˙oūƒC?Z~í:~SŒšŸ#[vēöšiâĐgfP3SĮŋúH7øD‡q™āÁ˛Ą“^Ŋûôŋ‡A7Ļ…Ã3ƒ.F¸ÁŸ˙÷ė“éÃ%dXh°Ũ§! Î`d`„č˙ŌöĶ mÚéļGw’†‹ģÅú`„AĮ!‹%äæH‰]nũõņú§^ĒéÕˇ ŠöšDĮqa’žßģĨúĩ˙éún­’{LŽØi¤ƒģNž˜LŽĒUņ8ã¯â÷í>ĩ×ĻĒžúvE›wĩHž? ”daß´ōuūŋC­ûĩĮkëļŠ’tŪÖũĨ 0ēũ?ō åS˙õÕ{ũPj†›˙XJĄw÷˙“Ö—"ŽPáŋũ¤Ņ1ũ-{[ ˇíU™˙˙Á˙ĨūøtŊé„ūLu˙îŋ[Ū˙ܘäĒ˙i+ĨŪ ēÛ¤ 9eŋi¨aSÕŗ÷^NŋöŋÛŅ(ūę ŨøŊ•Ģ_ؤNí%žÂúũ˙ƁVũŌ#~ļ| 9ՒgVŊσHXAąIĻ›jŋtæŸũ/ühŨšÜ{‡]’RüD ʃBŨ4ĐlRkÚVĢû֗´—ËIųdXÜ"]u;/ÄDD0ŋiaĒĢZ˙××ĒŽR—ĐpäéÔîĩøˆ2ĻXá"øM h4Ķ{N×ÖÚ'gFKëéz‡m›‰?đ˜Zh4ø†š§VŊ;AP`žˆÚ /ĻēOø|íUWˆˆ‹ útĐa>!ĒØ„ÂiČe؇E ÍM}UW˙"Č9Ø(ÄGdvģļ›:t4ū‚ i‘OUO§×íī#¯HDEǐŋMļM aˆ0Ŧ„@n›ūë•=¨ü›eB Á3.§ļCÅ'dXP•< Đ:: kƒÁP*šG…˙à ôÔGØAÖđz“ē$īOL  " ņ˛CâĶŦø]GE ÔŋÕ¯¨¤Ũũũ]‰ Xo Âv)CA‚!"š¸ÂÎD‰ģÅ= ʲ8ʃ6Ę´ĢũwQ×Ũn–ŌM†DQDâ̍&Ą4ZI—Ú ôNû Âqa 上]ϝÕßļ­]'¤’mļÂŨBi… XAí:ˇĶ{&ríĸNí Âe8Pˆ_)A1ëúl%˙ÖÆ:ÛĢIŌh2*.†‰[’vƒ4/õ÷î“ÂäqDíĸ1Ú­—Á„2q™ŗdī¯;˜ÆNŸaęÖŌīĩKŨô­'–4/˙÷ũĩéé“Ė čÔ×§U „. "Ģô2>Uœ ßĸ0XŋĄ{ŋĩ^ôÚzZŌú¯Ö´É:Já:N9ÃĸOŒ}ëÖčZeg_ũiēU˙Å|2#¯ÚVŲ÷‰q?é­˙iõ}đáá<&Ų{ [˙R/„G|ĒîûDboëũ cNÂŋVj@ŋ_Đõ]ŋęé6 °Tũđœ>•˙Më˙UũvļĶëɨ_ŋßÄ/Á}uģû÷ęiÍ0ûūČqÆŨ{ú#Ž×ŌˇŊyĪëŅ+ú_ߐÃü˙Ũz˙֗ĢÕũ͇ģÕ~×øPÍ#æŅtG×˙˙X_Ééû P_aßĢÃ#ˆŋ˙ǎų]l"ūīMõŊÉ aˆ"÷úûf‰Ŋ/ÂūÅh•ĒÛ˙ĐũØĒŽú˙ ˙Ũ8{˙­öīūŌŋ éÎ;Ah+öë_¯îūbëĸ7 [øgįĸRŸîŋßü7˙ƚl0”4ĩõÍ;?ú'^ģÁˇ˙%¯ßũĢ”=tA§ėu§ˇo÷Ũˇ[ûI„ØÛ C5´›[]kZü>o÷ëÔ7ūžįÂiũØ Â 4ū­áž}ũ[¯ûŋûTí*,'Å/!QĶ´Ķõ_Üâ/ž.ũÆ*žˆH,ÃWĶM6úcŊ/nīû?â"A„Ȑ-ϚA§!ŒÚēßö­íš*ôė?˙°š8øL'„HFš+ôĶaWkL†žîĖë3ŋíúņzÁ3XM4é§p؆ÅÚļ×]oũ˙÷ô›Ų €ĶBÂgƒ ¤ÃÛĄ{NÔSö—Ã.6öģfĨßâ""CA‚Ol„lTlCaĻà ę•įūë¯í$čœ7AØAĸ qg*ɗ(ˆ“›UĩTØIv8áÚŗí7zņLx°MĒļ!ąA4ØíW¯h/úēŨrVŅ;v‰Âč3`šō#Š|Sf¸ĶTĐa4Š֚dÜ{ëč#C ÃLŽ.Մ!X'ûí+­:ôôá‘Ūy¯}ĄjYņˆˆa4Đi4UzÕĢuûB Â˰L-ϟ‡úø‚_­RZÜ+Ũ'áļÚ ‰°˜N­5M&Ô4­ÄDDCœš˙DoķV ú×ŋÜ2WiĨtHv" &k h4Ķ!Ü$QM¤Ŋ¨ˆĻ?x]õũ˙ģzÚzvëá6""&a0 °ĶLBA„WĻ–§Ē%~ĢõüAdX__눈`…–é„ĶIĻôõ×ëÖL?ëå@X˙ëm/KgN0ŧ/22ŋÛI/°^Ŋë ˙˙úô"  ŗS‚#ĄŊ„Ûī˙˙Ņ[ūũéü4lQâm„ĩ§Í74_­čúû_ÆëôíUQ­¯˙ÖKāß˙ĮÕ/™h"ÂiŠˆ0›¤Ã _u_ā˙ūĶ}ŋˆˆ†iˆtĮĻÚÚëo¯˙Ž-rÆwÅâDāÉņŽĐa4ƒMÂKvš÷˙ĩÖ:d&VÄDX&ajÅ a8¸iXMoöŌs5‡ ĻRËÄDA”*î6!ĻŠôÚVžF÷õ4Wˆˆ†GiĻ!„!„Ũ†”0îáÛLí Ã%A˛Pl]Đb˜Ĩč…n0Ÿˆˆ‰Ģ Ârníq^ģņ & íV,Šb—ÁöŅ2˙QõAĸApH‚eŊv…kË-M,iĻ“P…„áœ# BZ9O_ĮĐí"ŋĻĮ5ÛAņv# ō„m­Ēũv"įõédvŅ;ot˜PLā.ˆ^—"ûÚ§ÂŨ˙{M͇ Žá‚Dí÷w2Ŧ9I“ËY™SN+­Woë}[I:'—nŦ&ĻÆp‚ e…´$ ĻāžÄ›‘4úŨĢ…‘Ļéúuīwdw ™Čß.ëqϰˆčĪ‘q׊*†‘7Ķû?_˙ŌŨ§č6­ĸwa†Ÿ ĐģĖŖZĐUÔ0›Ņ‡t­˙ūéßũõ×NāôčœC%ÔLvßôZ u˜5^…Ø­Qoûëã뎡VÕęIŌˇW@Ú;"ģõŗ#)2‚ ø¤#×_bNCŋë˙Ģ_ë×îƒU­t­´ūÂi„Ķ ”@ÉÆPÕ?ū”Bīūĩ˙ßĮ[ãwOWõÖē“j˜BĶ a3Á Á‘úiĒĶÖŋčŒ?˙ëũ!ė+˙{×k;Ņú'”Kõ \æÔ‰ĩ|˜¯˙{_˙ _˙˙×ãô˙č3Ĩø&@`i:MŨîĄ˜L ÎąÁë´īęë˙˙¯VL ūŊ}~‚‘ČęĮ;AúVČ#wÛî¸*a0˜§ģQŌ†Žŋög˙ųŋëūK8_­˙éńĄ›b¨M&•ØA„™pėˆC¤“>âāCÃ) ^ˇŽ)´“ĩŅĢk˙ũ˙Џßũa‚DáÚ %L؟ø@íIŽņÛj ŪÂ#ĮwĻĒ820ĩqi‘ÕF „"†ēŪŋš/÷|ßŊ°Šš´MøB@É$g#Ļm‚ũ5î˙'vēoßLA‚ ˜jĸÄA…iŨ1LZwÚûiÚ§äęĖ×ÖŋúŊŌmâĐ`„2ã:"Ē8ÁéáĘÚĨū˙ēAđé;!㠄 „,&h ˙6)Nb2Á„ŅéσMĻ ąAŦ0IĩÖÂÚë߯õͤÛē|XD\ !i-éW˙û}ũ°žB=á"; SMPxL d›8) ČÆĸ"" ÉÂ{õAÅ1ļÃVÂÚÛ×˙ß~É: •‘ÛDî÷ØRPGČÁ?Õ+~˙˙}}+tÜ oĐA´Ņ+h•†ŌńÂh0˜"Sqh"ŽUeMaĻ ÂqLTRÚ§˙õúCTôۃ%l;rãqë˙Žē‹ũNé{!īNl0L˜BÂa0˜Mˆˆ†#Œua„Ķ„˜Oõũ ÷ÖäVėŽę'ŋĮŽī˙ę{_}īVÚuŌÚ ŠCDņĄh0Š„ņ &šÚN˙˙ëúņ§Úz á‘Ãũ/ú˙ū—÷ķņ—Eō?Ûu[Nƒöú‘2—ĸYUL ÄCÜ Á5×˙ŌÕ{×˙ũû×˙ūŋ ˙Z Ŗž–ŨqĨũ>܂A9OĻĐŅ,xˆˆį?öNŋ˙ũWũ{i%Ũ˙˙~ ˙z{žŋ˙ôé…`˜BØIˇŦŽ/ū¯ũw˙ũ÷˙ņ˙m˙ūž{õū×ūˇûĐŨßpŌãũ}÷˙˙ũkūÚû ķë˙ôÂ˙˙î—ü†o˙¯îDĀŦCūÖŌŌÍ?ũkßļ_íWĮ¯ũ~ˆīĨõŋß˙$5ũŽēץB?´Ž›_˙ũ/Š˙Ŋ4Ũ˙¤ū˙’čē#†Šŋ˙˙Ŗ–ë˙¯ÚcŽ—û˙úKü„?Úm$īŌÂú˙]ŋúī˙$'۟ˊȍ;ÚaSƒīz˙ø/ú]v+^ŌbÕž×Ŋ/īõūõžG"@Ácö0§°ƒXL(NŌ×ŋDÖûí4A„āÁ.Aw a˜÷Ģũ­/_ūģé%C;02:<Š úņÄ[ SÖäE_å a0­SЧŽ;ŋ˙˙ŋ˙_ųqEæ"Gmhū#"=„š 0š 9˙t•Đ0…÷L‚ĢÂļ—ŨS×Û×˙˙^–s5zgã°Ęņ×Ϛ~ĢŽøˆ,uL(&¤+ϐpÂJēOŲ§¯ũū˙ūé†BīÄHi”9æ™{aiÃŌú4ÄFC„ ‚i…U†)ĨM×Ãē˙ŋüiöL÷uÎÉ ÄDDL–‚XKmBr*PA Âka*qOaWcoīė}_ˇK˙î;Ņsd0šļ)bē`ŠtNõąVtļoí†Õęíw]ũ§r‘úMˆg4á¯e•M&›L0•Åõ˙ؐ“M†ęī¸ā˙øˆ°˜MbĘņi´ ›IÛ]ŨĨPÎ0 wĒž_úũ¨ˆâ4_M]ÂnŸļ•ą§ČDŗ"ų‚ĀŠúû×"ĩ%X”` %jͤÂi°i-"vڃ´Â„Gû˙†+Ą„Mxa&šlR ĒØL:D‡o§j>lū^"FŗR:ė'Õ¤ØI7M†NÚi‡ρ1—ĀōäC2üėŅ‘áĩ„uA…ĩû­é&˙t[Ķž!„D,ȉVxŪ„‚ėÄ:Ū­õ_¸ziĢA¨L d↯xĖGGöIE ™o0ƒųöõŋ]^škDâ‹ēiĒa0AšđdnTpƒ´ŋ*0.‚õ|”ŨߒŊéŅX˜q˙ˇ…§ëHPũiסĻĩ é…Jí-uŦĶמÃ×ūJĘ žßũú‰eČøÉÅͯŪŧ&ÚTŠ Á¤ÆÚģk¯ŽĻŊėž ĐŠ%~ĩ˙đœa4b_ĮTMî‰:Õ¤ã¨Ē´“_ī9é(}ÚlRōpWąMĻŠĸܗ’ŦÔ)GņŌú x`ƒ x ƒ[ĶûTúûíķE_˙$ŨSáŅ;Í~, Îjm/ũ(ļåp,DA‚ &šiBah4•§]ëÛOũ¯äSi<ˆė2+ĶBā⠐^´>Ķ„ŒDDM\\ĻÂßkjÚûgüĶŽN;Kvđ[:'vęĐ~xÍĩ_Ũ0LDY&qÂvšMÄ(Ļ*Â×}¯ĢĐũžôéXdpE{ ´ũ0ƒ<3b›ášãæŸ˙‚™\""â.íSQlCtãm#$ęúûY‹äĄoP„ˆŽŅwøŋ´ĪA„BŲ>!`Š)ęūĄ7 Ė0™:}6ŖwĐā˙ĄĢ§žĢ~{´ŌqĒiĻa˙ø\DC.aIĶXi¯˙oũz§ĒŌū6îŌ'l<×múM} w2HDDD0…Z2vcŋë˙Ŋ˙ßw¤›ŠĐdŊ‘7m”ˆjųÚZh>šB?é˙ú¯Ķúû¯dœąŪõŌ °Â ‚5 ˜Ká6ŋĒũθ?˙˙üû­t6ũ>¯I„đ@Ό0ˆ?’Đôę.ø˙Ų§‡õ˙ū•/˙¤ *PcíÕ7§ „ІG|LžģūŸj›˙ŋ÷üĖ˙k˛ūŋĸwŽŪ˜*Úx@ķb”ã]˙m„¯÷ú˙9īC˙ˇ_~úúN‚ č—„„uĩ„ė Ķ:ጐKíz„Øá…T×ŋ˙öēū9(­ũĨũ?ęîwÖ, Á4 Ô"e9ûUŊ°ĸiÚnžēũÚ˙Đč¨˙ū­S}[ĶO„J˜PĄ0M`āČyæN^%ētG~$bi­B 6I4ûís=Ŋ}Ž”Î&+üWÕØ]ß^SM5 „Ķ2N!įĪâĘÉø‰ Ę5§i„ØĨØkĨū拰˙~ē÷×"i¯Iä$5Œ*$?L&˜(&2Ą’æž™ŦŧDDZ :w ĐqL0_Úģ÷õi˙WÕē˙ĻĄDcé4›d+„ˆŨĒ…PŠ‚a0”āÁ °íŲ7)^!”Ą4ÖĄĻ!&š}…ģû˙˙ūŋÕĒx@ ĶB:ØL!aBa4Pƒ$3†O)÷æH/ÄD0A˜pƒ(pƒM ÂĶĒÚUu˙ūũj?ģ!!Btˇíá—BÔ&Ą0Ą0Pƒ) yÁûĻ>"""ĻDí'ƒŨ+˙ũū¸COžģ§ŊĄhŽÚ"L*„ĶOĪ‚ø¤lÍ_īXˆ‹A…ŌmlPO˙˙˙á~é"@Xv™ –CÆhi´/T; {ĐhˇPŧDI&ŠĐwŋo˙ū=Bũhl]„ė ČNĢi7Möžî0ƒ2O}ãxˆá‚k˙˙˙üU?¨Ŋii:[Č;îØMIà S°AL `Ž'ŊúB7i˙ū ­<.÷ziöūÂ랄찔>‰ÛDoÕS@ÍB›#1˙ųe,}īõ˙ū …ÖHEŋ˙]t6Dā˜NĶ´îĩôôáĻI­Ø ķc62q’ ˙T›3Ũ}žü.×Ŋ˙~‡Úz{¤Úué÷yy›NŸé„9AČ'ē÷ÅCîļ˙ē˙ ‚Ũ>߯ûuõû{ēØēM&īÖŪĶU'Ÿ´ÖL`™›>ĘčúˏJŠzúũ>ũß_ö÷˙¤As˙Ōž¯ÃV7i~ûUáÄJ%N ƒ'—"ø@ȘÚxkļ—÷ÃôŊŊë†˙˙Õdc?÷īú ÷¯Ũéé䮉Ũw'ĶAń) †ļ}ۈĮi’˛˜0’mÕöÛ=zøKö÷˙˙žŋß_aëé °bÚ÷ũ]=7ļ–“‡.čœm4Lđ.ƒ( @ę™ &˜„b‚kĮúˇŪú˙˙˙ũvˇíÚjĻ‚ëŽžé]>ûͤۉÃDŸq„Š6‰ģua5m&ƒ¤õ]׆f¯ß˙˙˙Ũéŋ†ūģÃīÃZŽũkŋMë’ĮO ŅyĩŊ&ë†amZlƒŽ“kã]qß ũđú˙Ũw˙Ūߡģ¤FöŨ ŋĮõ§ė&.ÛĨēt›_pČāˆî]ēéŊŦ8ˆ†[ muqąÃ7Įßõ¯ī˙˙LP~4 ¤UíQW˙âŋū°Šļɘđĩ˙ŋ3šŖGîUPˆƒA…°“M4Đa6V˙úúˇėé¸A× .ÚúļŽˇMæzJž˜=|™:%˙^E™Á„C"#˙¨ˆe ŸģTĶMŠĻ“Uĩ˙öƛĻíqMDpĶ´Ą§ŽgÚŽ˙´˙&ŨVü“ØL$LwĄ#r;—#Ŗņ ŦLˇOé´ôš  +ÚŋėD2;Uéąll]ĶjÚ,vŽų§û‚)Ō˙˙‡I¤mÖø°Až"æfd ņ%ŅŅu#´Đa2Âa ĶN(&´­îąI ČílŠ=ĻâŖbŦ ín›KW4õ_˙ūé­Ũ‹%5iĄagˆû(õÁ0LÚ*øIÃâ‚tÚØˆˆ†LŒ|ÃϚbâ0ļ>Ö×_ōu¯ąZÛ'wö‰ģ´ĐpĐg8F˜#â""ÍÁN9Ō-ZĶj+ĒA„ &šxĻ)4Ø0“jēļŋíu¨ĶũI] áŅ8§éń$;“ō)˜ˆŒ=ĻHtĄ…ĩN"" Ëô'SƒI Ø­ˆjŠØ_z­^—ú§ũ&Ņ;´Ō&îаƒS8Dâ eŒÎ &xA„"""& ϚjĐ0ƒMŠ˙ßÛUKí’uMĨoI Š;DíĻēa˜ ú`ƒDD  Ž×Û_}ũ˙Ūúô+ÖõVŠeå]Ķ´ĸ8ˆˆ†o^é_ļŠwjŊëú°ƒĢÉŨÃËČd‡ ‡ÕūŸĒü^ĩņȃ˙ëų( ôŸ÷hRZÛI=úęDm}qļ”ô?ģēũ6e•}¤‹˙ĩ]Ék¯K÷ņëß×<’ABøm$­[¯÷úäĖúä0ŋâ ëŦę†—Ã 'í§Õ˙ɧ^ŌĨ˙4 ĮaŌGeoÜA°Á$…iŌÛ3˙Ēö<"(˙Õ{Ķ2 &“ ü0Ģb“būë]ŗ?kô‰÷ü"7õá4ņLė =b&‘ĩļĶI§ $ﭟģ4ũë˙@Ÿ’’8-´‰ŊÎČfTņ`„5鄃b­]ĩ[–žŋũx%Zô—ŦDG Ōm1TŲrųrˆë¯ĒčÃà ŝtëG īVv&Wâ!„ĶMqA$ģvÚvēūi‹NWöK1ÆŒČĢLk: ÂiĢNĐlCbÛí;Iĩ­4í§DûĨˆˆ0M=§ˇâpŌM3$Ļģ{áķ#%â#°A‘ĀNĶ´Å~ üšÄE›dė&EģMb"fžÂ„Ō45×pæFkŌhDDE‚ #°ŗL/¯ š ų˛ÛUõ˙ §Ž) Uę–ĸĶBĶ|„˙ĒíBp@ƒ$Ģģ¸`vÅø ā͙ŗ3 ž5Å" #áƒ*ãdO Wi§ŨdW!}Ϝ4Âg†ˆQBC Đ÷ũ¤Ga4š’ãL(A”LˆIâ/ÉGÚa?ĸņĩ}‚ øÂa ‰.đ`’ ‚Ō#¨UNŅB¯XÕĶ]k†LôNÛ°IŅEr,ō)…>d–C×ŌJXTĶPƒD鱑‡õū˙Mėô›v'ŋė Ņ 4CIēRĶĻwĨĩkäĸ‰;Âiá2@§Sũz¯×č5[ūČî‰]ϚDĮkh?2Oē×­û´û …|XL Â@‘Ã$˙˙ßãŪ˙WNĶĩ@ķ^Ķü9‘MÖúžęé62XęĶP™PI„ †ˆčāĘ˙˙ãõũúëŊ-Ōy+hēÕʖ~÷]‹"XOĩސl2!J Â¨LĐ`ƒ!˛Dpe:$˙˙__íŨ]˙Ŋé´ŋ×ī]jčxb‡¯ZMÉ[Dĸ4BÂ` š AÄ: Uß_ūŋ˙ą˙Úuđßzŋüīˇ;Q~ÚTŨwôÛȝ§IŌxŅ(„,(BÁBa(3a BÄ!ß˙ęNĒūĢ_ū%đĢúë‘/%)[IũS‡öĩũ6ŊõzMę˜TÕP˜A„ėĀÍ„Bũ^ŋׯũ˙}Aaũ­fO/ûŠîŌÛéŋn­_øė4ĒÕl‡§ŋÉ=0Ą M4CBDÂ*˛-Ey=•ģŋūģ7˙čūˇt­üfŧ -“MáW˙bŊ-ŋ‡"û˙ąŽ“V†Bķä~tNč–;DŨĒÛé„ *ļoTœĶöžŧß_ûŽ0‰]ŋĶõ†™ąĄš Ķ6īOö˜\Vūõ˙ë{CM4ė wŨ'¯A:'žëÁBpĐlR &°•ŽŠßú˙ôéaŋ§ų˛ÂđĄ0B gȏĻēj,%}ŋnŋūj’ĶîĶŊĩ´ļČNĢĢĐ{ 0“/ØHZ`…0`“ēú˙ŋÔ,æxžOEél!ôîв(@×ôF_ļÃw_ü8r Ž ˙˙ėRj6&Ē÷‘1ĶAlD4 “Ē„ÅRŌ ąVUĩi¯LŦ~ßvŅ<ĸvíĨAρš†jÕP-ĢWū›‘‰¨]}_Ŋ„†˜Ķļ–Č#ÄDHš´ÕąIņ 'l~Ģ˙ßoú]8dX˛s.ééĄ œ@ƒ ĒՓŖ{ø}nšĪũvĢø÷Nú'ÖqzÂ'a…°˜†‡ģiÚĻļg×"žëpŋtO!‚jÂ!ā—‚|OC/X=ė.ūy7}×öÖŊ˙ī¯ZŊģ]Úq"ŲŖ†Ú¨‡´œ/°k˙ôūū .=ĒĐa&ŲD…! úcŋíîũ˙˙õũÛäc=mûÕuˆˆ‹'a>ČAņQLWßũA…ū ¯ų5 † …qi Đ`‚|Œō†ŸŨ}Ķfvęŋ‡ž˙ûÛëôFœ=ūŋ`˜MLé¯Ē´?āÅĢęŸé‚ :uXAϚĶv­UWēūß˙ûĨo˙ÛûH(ÚiĢŅV˙˙ö‘ÄúĻ‘Á(ž6šivƝ§ME'pŌėßkg]ī˙ęŨ˙ĶīßüDNŋ¨|â˙‘áC…īaÚūÚiēŨęn‰ÛmϚ¤q°ĸŪ›7û áÛßũP{ũđßÚA|}Cë_´#ūŋáˉõ^ˇí$ėŒz[“îÂkM§jŌã^ĪŨ˙ũˇßøđŋ]ŋÚŨœŅá„F˙ô?Öŋo^éĒo*0Ŋ„ Åkĩ{ļ}˙úŊ˙{ûūũ]=<ŅzĄƒÁ:ūŋīĮ§¯ŠōSˆ‰ƒM5AŸi?˙į'ŗEÛû‚˙ÚLvŽļŸŊ‡]Î.´GßÖí/ĢPqÁ4ÂjÂl&*ļģĩūŨ†œ3?áļjOÖūøę.ļ—ĒŊ.šĪĐ*ũ~Ÿ÷ã§g ŽÚÚ=?í?¨¸0_lũfro­%ųؘũĻ›bią˙˙voÎ-¯‘‹ŽĩõÄC ”9VA„ [&4×íZc^8˙§[üÎ;ĄŪeLĶ´šrpa+NÖ×˙UO_jEq˙]ˆˆa XVšh4 áĨM_ē}˙ûĒg|ëdĄ0ĩj*!ÅiZëĶũ¯õüžÁj"$Â1†ž5MXĻ0ƒj¯ŌkAø{Ķņ`…… §ãNĶ ëi~ųĸ§úí!ÁHŖ–˙Ú 0“NšbŦ%ÚĐ|íH͈ˆ˛;M4˜B!ĮëjûĨđÂB""c›Ŧ&šđĶUÔRûš&›L"-‘˛WÄC ŽB=Ŧ iĻŦ0ĩWí™ėPˆˆ`ƒ ‘ØL&ĢtÂxęī÷ˆ‹(p™„ĶJA Ø§w¯Vˆˆ’aĄT…&ŸøpųŨĮa3"kÄDE…OíU1„ ŽAĄgJÁ5wëî`ˆvå|DDC vlP26lႠ#Ŧ×˙˙â"Á;CB"9æPFhĢZ˙á„øˆŽAĸ-‘ņ˙Úi.Ŋ? …‡™‰vu˙2ŊptNØv¤ĮjáÁ! á‘ø×]¤ÛM$ ÉŤH} Đƒ.@ƒâ"{ L Ōiļm;§m$ņ˙ø6ŸiéĒy{´‰ĐhA—D%Fë<°ˆ1I9 M÷q „áū¨'§˙4ĩĢjđÃ ŽNaÚđšfĸ8GˆŽ2Ã.*h‚‹… átg3÷ÕÄDŖ8*wēiÁd]ė1.'× éŪFūŸi„Ô›ĩĶBĐ363ƒ.gĮĸ8ęœX(L&ŌÂa5 ƒ8ĨBI°‡â“l$Ÿkúáž×ÍĀmãUo_Ē†Gīû¯ßÚpá‚–‚Ŧj*AĻx!A„Ņ 5ü âĸĄ Ķ[í¯ū0udW%wõÛ_‹Ōö˙~ž¯¯z¤BO‘âDžĄ?BËsWáŦ5LEĻĮũÛũ%„U˙ļ˙¯īûëö—ú{tž6ēAđč”4GUL‚ˆ†8á2 áĻÃĩ˙usvĶ֙ķëÂ=ëä¤eé†đߏÖü‰Ú§Dē-]'„ØpčiĻDÅņa\%x  8†Šß_ŋ`÷k_ą^Ũ˙¯˙ģ¨ŋ\‰wŊ:ļī!˛ĢųĖö 4ņÔ+BÂDqV¯[í}_˙öŊē˙_˙ŋ˙ĄJŦR¤›÷}ÃĻvV;ădí­§¤ŧ]Öŋ~­6h”×ûīô¸/˙ēû°ēûĮũ¯Ũ˙ÄDZ4}TCb¯ļĢŽž‚đ˙~ ú­6úã˙˙d]+]9šs"žą 'v@ÅD4X†…×Ņ0˙đŋŋęŊmǎõũ+ۄčDC%aL:uˆM ØĢ_ įˇũôEûíûē˙˙¯î“˙ˆˆƒ0`Ļ­¤ÂŨßßõč/˙§UĨĶÛ˙ü'˙yØēéˆ˛ëA UD4˙ë×˙öīá˙ŅdāŸ4.uԒī銄ĶaÚwõz¯úûkk…ũŋūŊ4Đ`ƒĖhD2ī_˙Ē´áφOūĐ?˙ûē‹Ã~˙xaFŠöa„ œõ_Ő㯴î)0šüūŨ_ĨĶī}}lyxŅ'vŌ$;NCœ0ƒ8)˛>D__üD‘˛ĮGOĢI Â Đnšw¯{fkëģÃ˙˙ČĮī]AB ĸQ`ôûA‘°CAŸ#É5üČ!ˆŲ™´×ziĐM5OMģ‹íWō3xw¯ûA¯KēKA=˛T'´Õ˜"#Ã’d‰ˇ'Lö_˛#ĢMšiß_ |>û3õ×ΏHuũ.ü0ŪØHĩ üC@Ây‡^ˆÜņg´ÂkĶM0›iŋąjÁ„ũ†ēĶ÷ A¨Ĩé Ū•ž—'y;nMéÁč2@ũĐBE„VÍj´Đl[A\CēûAú~Ũø_ĨwŽŌtŽ›ą $N}ÉNŽ"""IÁ”å:a;m& ›ÚOiCî××ãđ{ĩēKŽũ§`’m‘Ņĸn×ō/™ ­ÄDDvĢdHVņ´Á„ŖY GŅ(÷ŽL@ß­ë¯iÕ_[RVč7ū ˆĻézMč7a5°ULB¤˙8Š×h“”åßĻøßíõ§Õž-ũtõ C#ƒAĻ™$uŧœô×ú˙%5îĐkDŨé„ČŲ/J a4Ȱƒ í̃ĸ˜0“Vļēõŋųŋčz’ˇA°Á4ƒLŽ!qž@Ĩ?㈈ˆae8 ÂxŨŠØ¨ģ­õ´aë˙ÖÚkA÷a0Hœ>đš ņi”Kˆˆƒ8ąX Ēi†ØIĒO÷¯×4˙ëũZIÚ &“T-3æm‘kQ0…§bĢ „U­Ēģk{¯ūúMģ´‰CDáˇh4,“Ė øí1MĐiÚŋb˜Ģ[Zî×ÁČá:˙é÷v h4Ė  üJ âTb""i„Ö6)÷ZŽ>˙^ŽļF:i&Ãlm=Ąh‡pb! ÂkÚž&qø^—mR_éŽļƒ%Wm4× "t îƒK×č•û¯žW CĢrPŠ íĶ'כ,!÷kĐZ÷méFúúūˇupÂŽŋĒs~ĩëŨ_Tí­l”-ëú˙ũyqR~Do¯˙˙ča×îöšĻŋĢ^('ūĢ÷Kø­ú šļc×Úëéû˙ßMÚ-ŨWši/ŋ˙õzx‹M2}1MĢģk˙¯ûõˇ–˛_x‹0AŽ*ĒŌ°š÷_˙z*:~"-ąąnžģ]j į<Ž&üA”VšjNŌO×ūÁ˙Ną"Å60ƒ ¯W}ÕíYځ/ -ƒ ēë~ēX††ûŊa ,n׈ˆ3Ž ĩ¸Ļļˆ`š§-U1HčœÍhš-ĢÔDԘ$,&xa`™ŗŠO,ŠŽ„QqAÄXLØ.36lČÖOĒĶHģŋi Ķ"  2|Û3˙XŦ:M†JČŽÃ†DĸvãC0™Ā\ dLĮüĮģĩûu Ũ„§Ú$;‡ 0ƒˆ2@ĘÆfõęŊ;˙܍áč6‹ËõpĐg&y0gDGüd'WūŸÚjIŌN•†JČí´Ķ DĮƃÂ!f ĖČÆų^§qõūëŽ5{ĶNīR+´oEÛU §"ÁrΎ˙Öāĩ^ˇūŧ'[ŽōŪ‰˙\¯k;(D`Ãpŋū)uŋë~ŠéänŠęčiĻŊ<'’Ŗ-‘ĘN¯ū›×_ëĐ­ÚõģĩûX{A–ÂÄ˙ũĘ_$?˙ĩø0kÛ˙¤ū9ĻíŅ“‹ŋ˙é×ūÚ×ĮĮČ”ĢŽžŋ‡AAuxIĒfüĶ˙ú˙˙ūÖēũƒ8K´Ģ;K™æĸģĐ];ĻÂëūŋŋ×ņ3Šų-}X_Ė‚/CA” Iũč—w†ŦH'jēÚ˙ŋû_ÕKļ×â ˆx'Ĝ–ĻÃnū¨ áÃÅ1I„Đh0ƒMÁ;í+Uķ˙˙~ŠˆãsŌ\2(î\BzhC,'úOė§5ÚiϜEĻÚN–ļ›M~NĒíN ãcŽdŽ“hÃ[aJHâwkÛâ""„ÖȎ †¨4Õ?öÂųĸėöĢëuonN—“|h‚öAúN¸ˆˆ0AžÂvB´NÚtĶĩļĶ÷K˙ë­/vJč Âd­?s˜yįū"" Wũ ÂlPMƒģíZũzŋĻøMPeÄ0¯ĩĐfÆp‹‘r0gÅ3ÕüDDGM5ÛVÅIÂ}\]˙ëÛͰR8ũ}Ą˜Aĸ-‘Ģäæô." Îá0ļŽ*/s%këô?˙í'éŊŋĶM ûÄDA‚éÚĄ÷˙úũÖžŋKpáGĸyiŦB}$"I“%Šŋ_“ ēß˙í˙r1Ķ#ģĩĸp×HDDūN¯đŌĶ_˙ū¨h0ŋK§î‰ŋ¯ŋüßû˙õĨ÷XēˇŠ jßCoūæ›úQ;Š˙ßëĻ^°…~?ũŽi˙ô˙û×ū$p­ĢëëĻļ­ĨĒú&XŸÍ˙úū­‹ķÃ}0ƒâ˜0Xõä žž˙kúŅ(ēá’ŋ ËTŋw E4iŦũzûũ ž;z¯ŋiĢA á´ŌÚ¯ū–Ķōu?X†S‚a4ũúqęŽē¯˙†[T’[Ī\DDO"ëzNšŽ×ëĻ×ņË{â(ŸÄ>íĻ›‚!„ûMīsOû ã˛gô؈`ƒA‚ûbAÄ:l%kø{L„/ÜDDA„ČŖ‘ļƒa‘É}˙~Ō(™¤ƒ ƒzņB#†Dģ ŧÃ5NÂp÷ĩB!„Ę&C ŸDšĮÉNûEpYDDm4EˆäxB “”LŊ­{üSKOŨ0…„ķ0D1—3ņ'ūĻ@‹â¤­ĸwaH´\SBC0œÜ-×ãDŨ´äØJSēÎņ ž ŧ9ÆŊÚkŲĸũ˙ú]eĖĄßū—ũ~l0ƒ ûņĄpâU[Ĩ´ÛSÕV˙ĨąĐ‡˙÷~ūä#ĐNõš`ŨÖ#ģĐiÅm„­S˙­eĀ.—˙û÷KäÁÕˇ¯§2U?äAÄ[AÄ=Ļ•ĩŊEúo˙_õķXcõčWtČXÉjų>‰ œ#…<-§ŋMĩ^Ahã_K˙­ēßøÛ_ü6´ƒB"" ÂwiĐqI āĶī˙˙_ë˙aü–üEĒϘIĻØOZŋ˙īēėƒúKęáŪĖ”+õÄD0A”:kÚuū—˙uú^D€›ĸlvOũøA ]„ąK&žôßūõņ[ŋĸA*`˜‚˛ŋ‡b’„Ru˙~õßŊúm-îė¨I.gB˙ü4’YĶĒīģ__­ŋīÃTÉŊ…i„âAŸ3fxSŖ ˙Ū5zk‚vžį—Ŋ˙]Ží )z/všƒf337øļ”PH Â[Õ´ž˛DßûéuŪčôNšvhYÔS—,ÁĶėUUσ8ÂiÚJ¯„ØjO{ĶûõúK%nœ:'”Mė+ŋ¸†<Đd7÷´Õ=vŌ Ø`Ч^ۚ÷Úuû˙Đ}ļF?´› 'mÚiŦ'Ļy ZYe$Ąˆg5IėR ūÛI{vŸ_­ ĩ˙NÖõénôŌ"åÛĐaØAĄų\Ɉ‹ œ0Ŋũƒ zÃ4ũküAp×ëCJŋļÉ:`_DíÉÃé4ÛĶ;1 ( õĐc X2č/×üG܎&—jž†ôˇĢéŌ}„‰ŨŽŊ0˜ˆĨ¸k0ÄSNÆŋ¯[âG ¨Uī­_[ĢĐTÚ ˙4Y–/h&­6TųÅčžU ņĶõˇ_NŊ¤Ŋ6žŌ`ŅŨUІIĘV&¯õôú%}uûMū÷Šîŋû;¨uˆˆˆ`ļ˙ôĸyų+ ×ëŋëÕUüėĖ˙ĨŠ]~ē­ũz_„…Ø™ÅkęąŨĮūgˆ¸É†îų1{OĮŽ›ŸûT˙õ˙ú˙¯M  Ģ%ϞXŠDę%ĐAŌiØVÖû˙s5ŲĸĻoūLuæ@˙Dáļ˜@͙ų<]4Ũ+]§Ũ›â”-§ëkÎõúûÕēęMōzŌl28ĸvÕ0ƒ64 žŋ‚ZI˛ &NȎƒbN!°aaĢaS¯Ũ}miŋWúxMĶÍđŸ"ã$IßácÄDD0A„Âö-☨ÕÚūŋŧxˇūūĄÃ‡m„š˛\!™˜2GĒõIˆŸD}“âîČąiĻĶVŌŨ+ÕļĶoõŋ˙ŨĻ' Õ0¨ƒš˛-’™0ÉŊWØADDD3ˆL Âé¤Đli°ŌtžŌĩ˙­Ĩˇ÷đá‘ģ“„œGva ƒ נ„DE§ö“ŠŠA ØĻ/˙Q.#"Ÿ˙pƒi<ÃÖPšˆ^dqÍ„*""Á8h4ģū ˇÕ~ēNČ#w†ƒRpû{‹1ĄeT2ĮXa6ŋúß^ };ōN™'OŌN‰ÚDí†L´čDDA‚dė/ũŅ<†ûņ#…¯õƇm*ŊŊöLäoEãhD}ëŌÂ*?ëū#„¯õtŸūƒk˙ĨĻxúõ˙÷J×ĒūēoÛ_ũ˙Îhž~°ĩ]ņø‚ũ:īÚIŽģzúĨõčŽ?ēZYĨôũŠ0› tÚ˙_ü/ûáx_~2Öŧ0싆ēwy‡ßÚ¤˙ąË×ĸ8÷­ąt šˆņ."#í2#âĸ 6);^ß×^ģā睠ƒĶŋ &1aŸkwŋŪĢŲŋ9ü›Xܲ”§ÄJƒ “ëb!„Øģ ū͚]w˙¸w;3ĮÄD0ƒ˛+Ķmˆa5^Õĩĩũk§L˛o qpeTšv, ˜¨iëizîi}æA kĄ5l—=ģLCb Ŧ ÉA¨ˆˆƒZĶAl%ûYÚĩÚzBF°Í`™&Ēî+ņDŨģZB""AĒÃEĒĻEČáÖHŋĒ I×hDDÚ¤‚ ųaŌuüEtŗ‚3 œČÉqē2ZW˛+‘žŊi ĐgÃŌ!Ŗrëc[ § čŊ ÔagsäN!AOķ%„ūĶúMoN‰Ūîíhá—ĢfUŒņ×מŨ27¤ØdpEˆwt\T'dLP§Ž‡LëõvŊĻŲ7 ōáĸQzM4 ˌ7åŽĶ;Außęũ k]VëĨÂm‘Û ˜ąpÚM OŌbh„Č1˙ũŊĨéĶßWÛŽģNé8`ƒ„ũ/O+e˙ūõHz÷û4õ×Ģn‘]ˡûO&=×úúíz˙ūBän×÷øNĄŋÊY#˙˙ė|/ëûãīĢęžŋŪŸĘ’˙ßüúÛ×­õ__×ūũzūŋđû&9Nú˙ÃUÎĖÍ5˙ĶŋVī}÷˙Īg‡ĐŽ˙\w‚hHŽM–+ޘA„waV–Ėũ:ŋė;īšÅ˙ûéÅĻh2­ūš ą ũĩû˙ŪĖÕ×ī˙Čq×ĸPÃ#ˆL&a ˜K˛ &Dtûî† ŋ˙oas=}u\įōmÖŧ&á/ōnŅ8iÚ!đIL`xˆˆ†}UąH0ƒ …M0ĨjÚŪŋ_˙ëûĨ¤čœ6h0Ųs:3Ļ"5(tÔw 0šqąL0]6Õŋĩũž›¯KĢA6 ¸† „ ų›2ņ+ÔD§B­ģ ÔPA§a/ũŗ?˙úÕÖöŽ'm‚´,Ô@.eļhkB""&†Đai´Åâ“[S kū×ÚĶßéë )z'mw㰁ž3Äy˜" $ˆ†t‰ĻĄēa6+˙¯Æ˙ÕĢu ëIŲ‘(šiĄ 0eňa0Ēá´+ę˙Į_ũ}:1īP¤WĸíģøA§B!„Âa5ūžĩßÖĢÕũ=4ôŦumÃ˛ îkÚmˆ0Wī˙&_ņ˙I­Đ˙ÉB§}„IŅy“‹kÖũ÷ë˙ô?Û_Ą_Ē}Õ´Ŧ~ë~˙ŋë˙ūŋīūŪēũ×üOĩŦâų2}ëöÕú˙îEĻ֟m%[l+g˙ĩO˙äˆõÕĨ×õÁ av¯bh0ąV¯[מsÖŋcbŋ˙aĮC"Ęv­4ąļ—jŊ™ú_˙ĨßūŨjZʃŦHi™Á;A„ÆŽû[úlĪzęũøy9…ëâ"&› ¨xL&ÅFˇkkē-=ëâĮ50įfdž"&˜V›N˜VÂMŌđ˙Ōü?b鸈a0@“AĒAÃb˜¤R ;i]ÚĻîifiÜČp¤aĩˆˆƒ)@Mm4ĩ ;[ ÚWÚMŽU!Eâ"!„Ķö›ÅÅZVļŋÚ~"5í7QąLWƒ ßų}eŲŊ0ƒOí8&é$’"2p“6š-S#3‰Č†g]}Ūô×zL Â!ü0C$Ė ¯úâĩßĶPA„æyfjĢ˙¨a,8t^Q;j˜NEĸÁåPČĪ˙iŠOzt›DމÆNŠā˜D,p‰3Ž?ũ„ ũ˙OMĐpčģĸpûX°˜A„Ļ č˙ūß´ĩû‘ލ=ŅxŅwm8ž, d€ūÂų ˙úęŸū× ėŽČ¯DĄˇļR Œņųo4>ÏúֆßúģÚĻéÃ%D‡aP´ë2Gbaʃû_Ą ‘˙ˇȩ̈ä­Đ<œ]?]w ÛëĐøbG J°ÆĢ^Ŋ'í'‹ĮøiĪ0DVČ×’ ŋí…âä/÷ŋúëŪF=oö|" ļUÔæZáÍ6ĻŨø˙˙KĻŠëWđ‰D™DЈŗû˙^DķČĮM˙ũxhŸŠ˙û Ô&ĩŨŗ;ėÍ%äžx’ކ˙‘G_ŋõÁyņĄ„ëŸNĪļÂiö“k§ū:g‹ø!^ũ‹ÂšÚĀĐa3AŨSōâÄ80“Ģ +Ožŋ4đë˙éhž¯ãN đ˃žë\Rũâšbqw}Ļ­­ŋųĻ˙éÉéŧ:'N-Ŋ_k ËđLîƒ ÃM‚va„îÖ˙[U˙¯_fpFJ×ČŪ“l Ũ¯8G ßââ"" ÉĀL&EĮlT4“Om}}ŦD}ŽöŲÖŠŲ„~"" „ȎÚB“L ØĨOũ[ī¯ŋvIĶęíújæáČųļfkˆ‰ØL֚j×iM6ĶÂĶf}ūŊ-Táđč›ņĶBÂa`f‚Š b"$„uŠ4ė'{†ƒ‹bĶÖēƒ ´ģ~õé7ÛÆžšxRâ""N„3„Z˛{ią_Į‰/Ĩũ:Má á´N‰ôĶSc8EȆ""f˜&žÚŋõĻ˙ŋ˙˙‚m„‰ģOІDA”6a'T"(˙ĸ&˙˙ũ’t–ôí$EãöĶ"…˙œHžvÕ7˙Ū…/īK^ƒ˛,eâ¯M/ŠU˙_ũ­/í&÷iĩ`ŋsOŠ˙×ũūą˙˙Öēũ;_÷­˙’ũ_ŽÁ?÷ûĶl%i¯G:úú˙˙ûˆ÷¯Ë KĐlq3ˆ5ĐuëîÚëûũwũâG_´ÔCktŽūÍ_˙Ԙj—Ũ"ÖK/Ä0L&Dr1ßà aup­­ûéIÕ†>ņt!‚jبƒ Ü4´ĩŦ˙ëˇūąOøŠ‡iˆļ6I°švĒŪnķOũ᲎úĸ7N͖ƒC ąWi'vļ~˙Eĩ’š\ˇĘčkˆˆƒ0˜ļ‚lUĢa&×_÷LîÃ9Ãø¤„ ÉÁ'ĩmaÆÅĶMQk)ķ%TOŌHDD듰Â}„Ō 0˜AÁŪŽˇíPˆ¸f §ģÛ^ŪFđåsĒÚ VZĒŖ'ĸ#æÍ5øRWtŧq(„hD0įx×­ōW¯¤ĸCŅ1Ã[í26)Ŗ0gS_¯_×th í†Ōaa3A“å!§Öū? ZÖÃ%v iŅ7va3c8  fb™ĸ:9Ÿūž:_OˇîŌ ˇ“Œ›ŋŧ&†aN _˙ĩõÖõģ%+A6íļ’ƚûæ2ž d‘VÂĮNģíRéŌÕÜ;#ģ íĸpÔ~$Bx<ŋyoŠ“g-ęīūŋiô›tˍ„á|1¯úuLŽ—öģęžļIÕ{ũãũÉX_Wuũ īWĐĢuŦŽ'–G"dä_‡čí__í2:OÕ~Ÿvš­Ęū?×Ļ*JŽ˙×ÔGĮũ?˙öæ{ūsžŋ˙_¯˙Ũw˙;­™˙}?]˙˙%{ū ēųÚÁ˜#ĮƒŲÜɆ“kúŨ6hŋ˙SĄOJū ˆÖ…„ÉÅ>F™ôÕÅE&ĨžŸįîĩū>ŋđš’E\ZhZ “°îvLS Bi XÂtØJÕĩĩ{û˜wßõ„EŽĪ  ˆ=wa0™á‘ÆHáÎĐ͆k 0Ķ ęø ŠÅ7Vôŗ?Ėį˙‚õ­‚dvŌ ‡Dá§Ԍ"8Ī ûôL}iˆˆ†š Ô4Úcˆa4í&Õ[íOßĨįûOVČĮ¤ōņēĄ &ƒ>f™ÕzN 핂à ¨4ĶÚlqI°ÂM„ĶīũaWU¯MmŽČíĸobÂhZ Ģņœf†F+ö̧gb]ˆ`ƒ'^Đi6*/NŊ=Dē˙éčRūžÃ#r ôN„ 4 Î gFŲŖ!Ū;^áÂU™gJiˆˆ°ƒ ØO‚ 4ė'j?˙÷ĩžŊ4ĻÃĸvŅ8miŅ`ƒ…â„´=õũ2$Vĸ"@ɸMXA„d ũņ´ŋĻĩyũ´ Ôģnąh5T!•‘‘­/ūî(DE¯d ö™RQ˙úßëéë Ō]7Ō¸y;ļ‰ŨtĶTā\Ęŗ5/÷wz=°A„Đúëũ/ī˙xúíÕ\“ÕÃI]<ŲĶN„ O˙ģЈ‰’…ūú\˜Ņ(öĢ_ôš}ęžÕrNˇŨ^›“´‰ŨĩMFæũĖ’†,ōũôĩ˙¯Įí×t;ãÚ}´ēOM†Jč•ŅxŅnīâĘĨøM˙ö˙K˙õú¯Ö+ęžDuī{éēÕč;ØL)&HɎĮũzVĖ˙˙˙ų?ÕčqLW×_Ķūû]ÉÅSÁO ŨúY\Ŧe›N°ƒ4Û Ú¯íū˙×ēPĩũģC]Ái×{ē’ēMĸQDŨÚ a†p˛wõ„AŲ°īģMŠAļ :ūēĢÖ˙Iū›Ø˙á,˙MīOAŊwPƒÂˆpË"­)Ų üímĩÂN*#N˙˙Ķ_­I× ×¯ø— !A˙ũ'WŌN(íPv} ¸ ÎÁņ 0ƒPĶb×Û_3Ũ|}x#c/Ééäo×Âßõ´ŋūėŒzM ƒz&;†ƒ˙%Ÿ×ˆƒ VĐ0˜[JÛ[ÚpŊûx|ß@ŋđˇ˙‰q:kß§Ļ žäpŅ;yیŲ3âí&ŧ§&Wâ †jč]ąA6)Ōí}?3­ũõAč–w˙ŦL ëíûĐzøiĻ„).aâ´ĄÔí`% kĖ`Ž;VĶėRliØKíėÎŋ˙ëFē˙…đ\9Jõ˙jŌmZzĩe ÉËÆōÚ ‡ Čą‘Ņ´GD|ˇ Wˆˆƒ‘0šĒ66ÃJé´ĩ˙ôŧ˙Ņ,Ģ…¨ûíõöšiļ‹ēv3c8GÁœ hD/ÖžŽũ0iሃ x‰­0š .SaWmuÚũ.ę‰į]Ö<4`Uo_Ū'Eãa"C´ôâÔ ČĄ ØĪŒÍ&ŠęPÉaCŧ= ˆ˙ˆˆ0ƒ5Dc‘aSM0â ;l.ˇúúū—„GŌę?}/ô°ÂI´Nîü×Dßšf2ė3ƚøøžá‘"#xˆˆ&S…0ᝋ Ä6!§ëß­éw øŠ1Ē˙ŨũÛ÷֕‡vt›‹iô iĸ• kĒáļļ?ˆˆˆ`ƒ'2;&ũâ);Oõ×]/ĒŅ+˙ēî`Å_ޟiĒô› •‘^í‹hâŅ dėŸ’ ¸¯ãáüDDDC$:dG$ô Ķ[ ļžĩ­"2‚ūN­ÚLrMzĩũĶV˙Mzao@á…h]Ļ&ŗf:j÷ž[•":ņįŊĻq!Úw¯šz__ú˙ãßã××ũ27I;áēbĐi&0AĸČÎF‚ IũßÄE”ánáØ†°Âw!į[ũ}‰‡ˆƒÛī×֘¤ ~ŪŊŪßvJá“ĨēŊ§ápD/‘ģÔōŪņ ¤āž“bXpŌôîœĶëD˛˙˙øēû_Ąŋzn™ún^\<œX-wjƒŦÃ$Jã ;4ˆˆdv¯AÛŲ&ļŊ5 9ž+˙˙nēŪŋ‘˙Ļ’ĩ}Ōļ=pŌo Â0%ŽfdęüDC%=°lCŠdQÖ˙Ø~ŋ˙ ČË}Zũ0OãŊnõúVÉceНĩõ˙˜"-w$sas5F6WÜíÆ"8kŖéŒ ëUßũ˙ÉķÅ íęŊŋūŋZīzú‰ÃØQ„Ą !2p†f`ŧ=ŸŽøŅtˆ† „Ę€ƒ v­;͡Kŗ˙˙‡˙Žũ˙˙×֚õŊõoŨ/ĻŅ;†ƒ&;‹M ü=ĻŽ" Á0™‡_ínũ×­{w'^õøo˙û˙Į˙˙ŋũĶoA‘a†Ņ7wû¨OÄDj›ŠVŌXa&ÖמÔåé:ų>|ķ‹ū—˙úúú˙Ē´’_ĻžGdw í˙ēļ­;"§b‚ †ˆkjÚß˙öú˙ž[×˙ß˙Ũ~1ÉF­úvšuvK&BĢũŠnĖ•pĸ„C0™Nœ5mE6qQIĻĩū˙ūŋēũ˙˙˙¯Ŋ÷ZūūáZüU­Zv} 0™Ma4Ķû[ũu˙˙üâ¯˙˙úxõ§Ēõ­Ķ÷ũ°`ą`…•a ;i§AM+û^Ōũ}~ŋ¯ûũŋ˙ž>vļœ~ í’GgBˆˆ0N  .ĶAąZa>)_ĩöĪ_ŋũŽ—ÉŽū´ĩüĖ?ú„â.2@˚Öęvō!ĐDe B4E4Õ4ša„„˜iĮi:úūŒ?ëöņ–œúũj‹^ld2:Ŋ~ŌFv™ØāšĄęĸ"'F×í[ŰØãNę˙ëUnŸÚßôJß~‰ŪNöžl-ô’ļŌ™¨„‘Z¨DDC„vŸj‚lPM8Ļũ.Î]˙˙Ĩ˙Ķ͆Gy;_iĸ9/%3ņ9ē¤ 0ø2(¤šˆˆƒąF8PšļŦ'ØI0JŨUžĖöŋôuz˙V”á´IÔXAĄ ĀČD}Ÿ—ĻÚ ˜vĶ;0Ē(DDA‚ 8āƒ^Đb‚œRwn¯˙ëõĶ÷OôėŽ0šĶ‹CáM‘d‹Ķ^šw ƒ°D+!" m Ķ0ĩjš˙ŲõūĐ/īŧ&Ödū‰Ûâî üœĸžŪĐm™–›D‰ÅöUÛ„ SN pƒŊp˙^ŋŋ#“†JČŽÛi¤Â đž#D'ûíIāiĻufˆ‰BpÕ'Ķ8†˜O¯Öģ_¯ü5ô͞8"Åév‰ÃôĐ´ÁpC`‡Ų˛!ŠGoŽūŨa Ú&?‹amHA÷ąi˙á}Ō˙ץī§i§}'Ļ×DîꞃBÂ$>g¯j(&éèâ"  ‹Ãz÷Ņ,ü{ûûK˙UõZģôØyŗ'vžÕ„×y@Ī Ų~ûûinįhĘɖi!kõ¯ëú†–ŋ_ũ˙ßß#~é;˛îv‰DG|'a4šƒũ/}–ôÂ!YĄBdaĨ_ ûŠũú˙t•„–Ŋ- ‡íéá<& oDŨī_ü'ˇŽīĻwPr$2­Üß§čUúú[˙˙đŌđé˙Ļ}ŊiĻ´ŋ@ČälĪ j3úZęétL}Ųé Ąövž—ú"˜˙_ûĨīīR­ĨÕũ_îũ„¯¸°šgpƒ˙¤Ŋ'%; Ķzö-ˆ4͐y˙–7Û˙_÷׆Į˙ūúßÔT–? – 8‡ŲqLLĄé%}xaÃĩíÄ0› 5]‰?ūõūžm+K÷­ŋŨ>ĢúyxÛûA Â ņ›3áëUŲË;ģ‰oRđ˄ȏė Đi„ä0é}ū×ëĸXˇDoû^4 -õ"šČN–ė“Ō°ÉY÷§ÂhZÔ/Į~ŗŧˈ‰‘ˆƒjOąĐ´ÕĩŊ/üĮ˙]{h'öVņúÁ ˙á­é§]á ļę#jŋ­”ųŨ˛ĘxˆËÉĶ#™€Œ„ ĐlPA§­ÛMĢ×ר=mŊ6/Ũt+uūՇDâŒôõ˙ø`ƒũ q>žÚP„0škÚVžĢÛ¤ĩú[ÉV&nû_×˙Úé<ŒzOļ ũpëgbD?Xĸ}!`˜O!ńÆÚJ›iŪūúō@žŠ¯Ķ˙˙ö+[ώKä˛1Ã0ĸō(•qô[īī â""Â}Ϙ¤q -­§ū‚Ww˙×˙­Õ¯ņ¯ØDuÆˇ0sP&í$îvļ2ÜY}„—„ÕĻÄ8¨‡WđeÖ÷˙õÕ˙ôõôŋa„,•ØšzaJą—A'¨ß;&LōQدHC͞+’ģ„a8“~gĶ˙Jŋ˙˙ūé=8;A É•ÖÖ, Đ2ŦĖō:2!?fzŪĶeWˆˆe ÂdXŌî Øa^•{§úũ´ŋ˙īöIËīĸQ‰EĶĶM ŸĐ>ô•ß ׃Ō !7al„.ģͧŽŋ˙úū‡ũ0­ú„īM2;rí†H°˜M4 Īđæ…˙‡ëÄQB"ˆÛ†šč ĶM0A.ëûz×ũt2,.ÕŨ'§IÚ‰ã“v‰ÃDŨ§a<Ž)øÔĪģ×}•%|hČ+åÎ.Õ= ĐŠNí/ô‘oßũ?ø?Ē^ÚĩodŸZ IŌŪ‰ģ‹A›A„@Ė#ņŖ_ÚÂi$â"$mBA„šiļ’Mß[k'ūõoũ˙ûö–Öéē“ÂXÃHœRo¸‹BLp ņ#„üL–×°ŖŌ:#ãÕ ƒ0›`’ßkųš„ßû˙ũ}Ôwôü*ĻŅ7d ö,&„4Ņr8É÷įdČCŧDA„¯b‚Ąm„­Ô&“įŊ­×˙áU™˙˙¤—AÜ0LŽØdō‰Āl_)š2!sûôČ\Ķ"" +ļ0œCŋīđž˙˙ūŖĮ˙ö’žŋié‘GėŠäGmZhCÎ 0AÄ2$D‚ßÚÁ6B iØVŪˇ­}ƒšŊ¯˙˙úü|Cŋ¯öļØL'dčGNÛÚvƒ3Ämäģü0ƒØ†ˆ†iénęõßŪū˙˙“Üđ×ôîŋŖ6ûģĶilŽČŽÃ‡EÆĶAØO0( ĪrHû¸s#SR q˙˜—U˙üâčDbŋK¯ë˙˙§ĻڄûĢȝDáĸq‹ôĐąũÎŌÃ—Ę‚•˙˙˙˙ņ¯ŊjúĶúėŒ} AÜ5j"'M• „ûÂa6Ö5aތí(ŋŌV˙˙˙˙ë÷čV–‡~č4d]Õ˙¤īƒÁ-ˆ‹ˆeÜ5 6!PMŠcz¯ųŸ˙˙˙˙$?˙ū,˙Æ?ķtŊëôÉ@čDI‰”č4†ĶLT4ĶM0­­ß˙ē˙œ_C˙˙KĒĄĶץaĨûtለ†L&MĻ„8âŋUū˙˙˙˙ü-ūļŠA—Dī˙VŗŗåH3¤"!„ÂūƒA „ĶM=]/õ˙˙ŋ“Đ•÷ü}ôÕ ’u4ž˙´MéČ( &nV„Q1Îí?oo§Ã#ˇ5ĸwĩˆ3Äp õ8@Ë4­~ƒ6!Åß­§÷ū;č–ëõū?ë^ž¤Á{aŅ!öŠĻAˆGÁ‡öá‚tÎÂ*JŪvĩ{°ė$Á‚({a/usEũu˙˙_QŨ|ÉG˙öO¨ ō7vũ]„"j˙ē.6VŠëGhÕÄ4 Ķ´—m;^ŦĪõ˙˙âĩ˙˙_‡Ũ Õî€§Ėš6G*˙W| Á!Y˨Duâ"Są 2#’›ƒ ąL0•Ģkŋæ‹ũ~‰į˙˙uĄ C#ˇhœ6“CMqķf K˙á´ø‰ Ü&ņ*EOŋĢWI'ŠC#q3ä‡Ŋ'ŊeFî"d2c„ÖÕE6ƒba4Â|?ĩú_U÷Î%ų0ɓ××üõ˙'DQßZ … ƒR,UņVŧ=ŠÜËÁa^ȏ¨i Â 0›_vŋ÷÷§ûü˜ūÛ˙ø÷T¤—Ö—Zũ øw#Rfy "(â … ŋļļ•[KU´ŋ3˙ëSßö˙ļ˙˙JŠúęēë;Tąž3PíOL˜˛\Ŗ“ÚĩM5 h60ƒM64ĶmtŋĩuoUūN!˙ū*ŌĨI~ŠGûBŅ døF9Áw˙‡Uė‹^„A”aV´qiÅFšvÚŲûĖ÷ųcäĮũĻ˙ōdú õŽ’^ĢŨíSLØÂ`ƒUûŨûëÖ"&ˆ0šiŲv›TM8al%ë~¯Ŋmá˙ŗjŊZ…Ĩ]}køpĶ";EßâĐdĀŸøģ͇ÎÅÆ›Ž""!„ÉŽš =ĄlSl0­…´›Ģ^íŨ.Žū† =*I~—÷a=8wp‰ģ[!Č&%üZđ÷qV""L Ķ´ŌlTCēĩŌÛ×Ö×ķEÕzôŠ}˙Ož:‡v´!C-kãîäj-ÂMÄDC-„˜qLPb‚vƒÛ¯ūĶ_ŦĮø_Ēõøm|“é°ė Â͆3@†qÆfŖũđéˆ0V" Ķ$ál&š´"ĸlkļ–įö•WKU/¤Ļ÷đb×C[´Â‘]ĸq´ĶaA(˙âC„"" 0˜U†¸†c…Ž’K_ú_úā×Ķ_á:MČŨĸpĶ‹I0¤Á"ã$)×ûB""$a°‘Ŋ6¸Žĸž'vĒē˙^Ûü0ŋT˙6“ÉåÔ"1ßhaMŒČaĮū"""„ †ĢŽĄDUE(˙ũŋ¨ÕKúžÃ#‰fh“ö×ŧ!›Â4"‹ÄDE…BÕm5Ōu÷觝î˙ŨĶkũ5ZN‚wnMûNēh5gXŅ*"-27TĶ¯×ŠâūHĸŊ\í.=ūîÉ] áÚeŨ]ĶpĻÆ"ÉhORŽ[Ŧ‡Ąj~žĄßëûū#ĢkēúowzmˇDķŦZjˆY†jZBRB?wööŋŋÕz}qĢŊi}õģûŦœ]9oTԘ#Æ\mX_Žû˙lŅ\˜ŋ_ĩ˙˙Ōē˙ôœ:'”æĘ.ęšȘ†™0aĀÁs1ÅVńí+ ø_ŗü…Ô”~ŋ_¯zĨ}Ũzy(I]{¤Ú'iÜ&ˆdPŠuWu["ŽĐqÄ0›k­ę‚jŊ’Āŋ˙í÷ץûu~Ōl;"ģDááx$OQU˜mVv!i…xa~ôÄ6)?˙3ÖH}wô?˙í×úą˙üÃ×ÚØAđØmĄ Îë†OØ|îŌaęILŌWÄDOļJÉÅ ˜N=Xkušjĩû¯˙ë˙¯ŋ"¯˙dŗ@Ûhœ;× z™įd*KaE´iØ^­{ísE÷ņ_ú%]Xpã_ŽēŌŲé°ČŽū´%tÎü!€ĻÅ"Ŋž ČßIĻÅC˜`“j­§iūŋ[úú ˙­ģ_ûomĻŌÚ’­ãWa˙R67ņÂkaE*"[a&Âé˙úĨ×ōUÃuŨt%Ä­}ûĢÉs!Éūŋá Ķŋâ"i3Âi嗀ĩÕĩVļ˙×ũÁE^OM~ ũÕ¯O„  ¸ĪįĖÃ32ŠĩI?iσ9ŨyĐĘ||D2Ģ ’ÂŨ§A„Ķb×M°ļŊīūĻgũö˙ėÎ,&ôа˜ dPŒČÜŠR_øL Á(EĄ[ЊČüDDYxQÂøh6‚qqví|͎ˇmĩũŋ×ņú"o'tIđŸĶM„å˟%×ũŊYŲÄ4ÂÁa¸ŠRąPšC„Õûa°â8j­Ē÷æŸũ ŋ˙ūúáXa4“aˇ5Â$;‹×L&~<)â(2s҇~˙ŦŅ'híĩ%‘3Ū""!ŸŠ&˜M4ÃbNJŨ6ŋ˙ūŊĢúJŊ|Åkh ėˆ?I ģAátŽt*˙Ũ&Đ.6Ú'=ū""!—gĄ+$:b ,JOú˙˙ö^•%ôĖ?ÚĢiĐ­yŽá4Lvĩ„30CŅ ËŖC#QŪ§V—ö“Ģ™¯Č;ÃME1LCUģ_ŋ¯ĮTŠ­.†–ô´ ŪôˇDŖAŋm54, g6õ(^¯ëē[ŋâ!‚!ŽxM8A„NĶ_[W4˙ (úZĨb—IB­}_ÂTŊ-z$˙XŋŖ1“‰”_i5Ŋ̆ŸņÂdĄ]ŦC ĻŨZļēčWũa(?ôI:Út’û ôáҞ‰ÃŊtNÁ8)˛ũEÕ÷|Č4‹ĻS„íC ļ*Ō]$ ’IV!7Ũt’Ž”1ūëŪ'}č6,ˇj‰Ã–?NīũŽëˁW Č,""!“ëėBĻ4ׂūǟ¤’ú~­Xč5_uęų‡č&Đ@ú'n¯õØ ÉRj ƒĐ^Ģĸ:š_ÕwL:Ą`ô.ēøoMũ¤Ũ~ũaÃ_yi{›‰…ū˄j•¤mzP‰>žēę˙ëō'ũßõģzIŊ/B,Ą_„ą›D„s9Ę ´GčĘŌs5gũiK˙IzU߆û˙ØkÖpēĩûßۇt=Å Đ0ˆü…éąžú ė °C°Ž]uu}tŒį uߚžŋŋôŦR ,„›^ęĸCī°îéúöƒ÷Ã÷ņÅEDWž´›KÕu0Š7 E$@úOīí˙ė|l>-×h9 ēÆF97ĸxŨæŋæ@ûĶß*<•]0šĒĻ)×ëK\+îĢÛũ÷øo˙¯žēÃNūũV–Øtƒá Ö—ę°öELCL&#…ÔS $ąA:ŠĒđ“ŸũÕīüÜ|˙ĮŠ-k†k&>Û˙Ą~ë˙­ķ´ŗŽ†Ÿ4VwUU’b-0˜L ÂaEU'ÕZQÚëkzÚûēûŊōiߎûū˙OöûĶųژ0N) ŋ_˛G­Ļ*Ū"" e‚OLtÅikmĢ_[0õÅkåß˙˙đcڊ{ĻĖ>2˙iwØN“!ž!…°ŠĻ)Đ`Ŧ]„Öû˙Ģ4Vī׭흭d$īFJ÷Ųv‰ÃDĮ~˜C*Ę×XX0žė&gA”8 Âa4ŨÃļ"¤ÚIŽîŸîiÖhëūŋ˙ūûV vt›Iģa Õ¸A&jÍņ očZB"#`ĶA‘n)4߆’}ÚæŪĒ믎ž˙ˇõ_WV—P‘;ĸo[3ƒA’c)ũTziä܄yg'+b!•0ƒ&äĄL:a&lSVVŽîŽĒ—˙˙Ã{kWīŊWI6i{m Až@ÉĘH*Ö/U™W‘qĒN"""s "iÚj)Åx&á&Ō֎6×õũNg‰bˇë_{AzWO%w N,(" a ĘEôŽŌvUEÔSb""!‚Õ0Ÿm„˜i{ikúūq_âÔcījßmŲäā);mĒŨÃ.3ÆŠr+“ŨĻPņÃá›*!z—°˜Ļ)-†•¯ˇ^›ŋ˙¯ßNô×[#ˇ'yŖū…Ą”ã8EĮéc[žĐĐq &ƒUąLCMul'~×ũwČIũĮŪ´´ƒ‡  {׋ĪâČ3HŅv.8“a]qf 4ˆh6*!ÚAwūL5ūŨk˙OOŋ´28hž^í4ķc:B.{$÷M$…! &G‡ė'™īúš7hkŋŌÃA}{ßęŸ`‘cNũĻ)„Ė ΟúIˆˆa27ĩ´ëũũס˙ŋü‹ ŽÚzŨĻ÷‡Dá¨N, ĖÅ*">{!?]ĒĄ3dō[úæŸMŋ!˙áã˙˙éíũéæĖģrvšhC‹° ˆékĘũUŽŋíĢg­ėŅ^B`ßūˆßū˙˙˙×úļŽ“a“ō]D‡hœ7ôBČ2ŋōBžļõę­;ëj­sŋ#\jĢ2mS,š­Ä2üŦ(tĶĩ}M8iū•¯ļgáˇ˙ę&q„G˙øĐ×éö á ĖŲöN2įf=pD8š#p=b""SĻPáS ôĶl Á†ļ_[îĩũęƒūˇūŋĒqi„Âh\A‘s"q•WļT•ÔDD  Ú¸Ķb˜†VŨí‚;ŗEN–sũú˙^4Nö‰û[AœĀÁ|ˆã dšá„įaBšÍo ކ¸h6*6ŌīĩÕũl?˙& ū˙M†G čė'Z `ƒBBLŽŗ—a éĻĒōéÁJ­Ēc0˜MŠa…Ē˙ūūŋú^ƒ÷‡¨)eÛDáÚvƒ8A™‘Oz&?@ˆöž""!…; Õ§m1[ØNõëđE=û8žOdzŌwŌj›Iˇ¤œ2;ĸxÃ"¸Av…ØAž ƒ!6GˆNĩZâ"Á4ÖĶMTC†ŋļ°›f}Žŋé˙˙Â×úm§ø ÁPw¤âî gČÁœ^—špũ°HDD0A…ģÅiĮĨ¯ūēukßŋz_^û¤ØdcÃ'BņļÕ&ƒ‹D8@gˆÁ”ŒĪũ¯â„DC%Š­0ƒaąL2: Úz¯š˙ūžú¯moũ5Ĩl–6ļ‰ßĶPϰ\ e3Ī3Gøëí“íní1ÆÅ.ØJJ˙ztˇŽŌÜUoW§ę›Û Ŗum‹‹A„ &y˙ĶË* DD2NšiŊcĄ˙ø˙˙ØūÂ×ūŨ/[$ë}Ü2(ė"CâÂx"%' ŽĮŅšëY‘K ’t×m?˙°žHpMōCũwģZúīéĨŌm‘Žš ŽđƒaŅ;x'ĄaA‚xS8"e„˙5°¯îģKá UĸQúę?uUuÆ ¯ĻЧ[dcéųxöšĶ[M=F˛¸Öūd.B"9ŸîēH–ŋĐOōuīŒ˜4—Ąūžš[÷Úh4‰ŨĻ—AđČÂą’ ŒØr2}6Ö×û…¯_Ĩø-Z"éúÂėu}VˇCõûõļĶHŧ°HœkBa8@™áBC‰ÜôØĨģĢYŸ8Û3÷4˙]/ma/˙ŋŨ˙õģuģĶxd‚ N-7Õd3ibĸ4ûĩj×ëüĶ˙â¤õ%uo˙˙i{ž•ũô›ļƒ%dXĸwŅ8h/IĶkÚ{ „ą[ $Ÿa?Fvŋûč-Â*˙_ë] q7TƒŽ”1ūēiŌl:Mžv˛e:_ĝa„ČŖ˙ŨĻ0˜N ÕĩĩŊvgëO_gŨ˙˙Ĩ‚÷x‘Â_!ÕĢŽFęŽđ™âÃčS+‰1°`‰Û°Š…vÄ8Ļ(,Sa}ėÎéU˙˙ų2Úī¨[ĻĮûũĶK֜C3Äx‹Œ†ká‰üEĸa`™ĐS„ȰH{MCv('{kižî—˙ū‰ß ގ˙IkĐũčģqv…„Ī‘q„ĻwÁĻąkϐa:a‚Vk z˙zßIųƉ_ Ũ˙ņŽ“a‘ÃvĐh\2‘›2*fBZph2¤ū„D0ƒ Ū)‹ ŪÚ˙˙f‹¯­ą‚+<_˙ũzd˛á‘Ũ†úÎ g…Aš]ˀÚÂvĒ'T"“Rđ☠šiĻÚ[ŠÉ5]ÚūÁ˙˙ũL‚'Ģëx];#ļ07ša4ĖdthKIXaō7Å$83_„eB¤L&ļ'?úũĢūq}}IQ°öˇöŌm§Ã#†č›Ŋ4ƒ82åkģM:ga0šĄÂkĶblU„íģZ˙æŸß˙âņ˙˙ûM;¤ 'ĸîŠĮ3ÉTięīĻw6B[˜j""A§kAąü[WÛké}ūæBË_úÕjũŲ'Ué=<ŲDíļļ@†3“Šg#Æu“˙}Đc" ÂĶ!u°øa+°’Úūõyĸ -ü}ut+}_ĢĨmSÄZ ! Á?s#$îwÁœŠŽû ‹âĶI„iÚÕ}možßĄõ÷j­¯dcĻŠäąôōņĸOX´Ķ@͑â#Œ™‹ī;|<2wŪC‚#Ąk´N-‹ŋ´ˇ¯×ŋôēiÕ+ĻŊē}oz'páˇ4ST!„â ųž3xŗ›˙ƒ#ĮēXˆˆ{ļšiĮvŽžŲ˙և˙˙מŋKIŲúm ķd6č“ĢMia ī˙h7ŧ":qi‘`&Ķ0›§Ĩ~žļgß÷ũîÖŌū¯˙OM%īģ†JÜ'ø°šâxgȄk¯ˇ¸Ū"&ģ{¤ÃÅąl5p“Ē˙˙ø‘ÂSúm-?Đ˙Ģ]:LŽØpȰE|ģË~4€ĀAŸ"ã8d2"˙¸ë•čB"ĘĐ-ĻíŠc‹˙_Á/ãâ÷ptÃ~ŸéŨ„Âm[„)vĶ…‚a|&"sO_o^ÉÅÂdc§iĻī×]˙_đU×Đâ Įīëũ÷WĐM´Ë†Å§S’ a˛9)Ō˙Ļ"!–œ ÂŨ{ūē'ÖFŦŽ?˙p~ŋũVũž­ôČîČė‹ ÎâÂwÁg0ˆ|dq’Fu}aŅ!įcCĘŲE=˙ÍÉzđW˙Ķmūß_ũ,ÉžļęĻŸÃ%ōņ† ĶCâÁx`ƒķ™Š~đ¯%¤-Ģ˙ú_˙¯~¤ĶÛĨí/˙8Hj=Õ¯¯öäcÕáHâ‰Ü;rŨÄ=Áh.lWõ û׎ß_ŨVģúø"ą‚=÷âŋüƒ§‹ŋęŋޚ÷§ĻŲđ‘ÅCˇøOMŋĻĖ…N˜a ˜NûJíÚÚíŸõĩũĶŗįk×˙ĸ(ö˙Ō˙Ä'í ũZô×Mí˛;øtIŪĐA×ãš“;Ņ4ÅZacN;;ĢĩĶÕŋŗEžõZ ˙Đ' ũ7˙äá}Z ×Ū=>í?o ø_’f üŋŨŸ‰˜Îa„Oۓi‹Š6)ˆl4á„íÖûkz–˙ág3Ĩɧׂ׉'žĩ×K_˙ÂqÎԁpƒ<)Ã<ęĻ)ČDDú>˜TĶ"™ÖÖÄ6!…ƒēĩĶŧŽūžëą­~‰Zü/ņ˙ˆ_ë_Kâí4BˌđŸū}IĄˆˆ† ‚ 2ˆL‹ ŨÅGjšŦCõ˙[×Uū—øDoõ˙Í˙ô֒ėŠí§Tƒ"ŒÍzí8pˆ†P3YÎNA…QH4pi§Ē˙ęîßü/é}tGgŸđŋ¯ŒmíJí56Q1ߒa€D^#Â`ĘĪĐîáÛ &T0ëîĐhCAϏ&ƒĢŗ?ī˙˙ķ‹á ~ít+[Ŋ+ ƒ¨`´Ķfƒŗ/ūI0â""" V¨0ƒb!… ļ—^×ŋKĶ}ī8žũW}ë]×Ģ~§TΈ4B˜w˙Š'ņ%Ķ´Ô‰‡ƒbšMoí?õëí­}/˙öŸĢÖŪŊŲ+#¸v§wÂS‘ąL32õõĘá:""BÎëkM ĻÄ5^ĶÕ|Ī_ú×Ōų7k÷MÔ¯­5~‰ŨŪŨ4 Đgˆš"Lė—ëū“ņöšq ›ļŋũūžŨ7íwĢ 'OīÕ=[ŧ•Ų:-=&…„C6@‘ķf`‰ŋŽd—×ãB #ė Čė˜õAÛA4ãNÂĒáKĖÖŨk[}Įõ[jŽŽīMé;L'DŨ¸MSCBĐ~ND3_Ŋx`–"""'›L‹k´ÚN)œCTí-ĩķ>˙ރuĨ˙]÷ūöĶôp蕹'O4l'xL!Čy–õéŒÉjHD! `š -Õ6!ĻRv Ŧ4ßū0ܜÂīöÖĢū›īžĒäcëA8|;"Ņ;uϰÂ`aų.f¯Äėŗa&DDE‚ ;#˛oZ ąA4īūÚ3Áņ˙ũu˙ų&õé…ŊzNÂĻõDí­÷Ä0@ČHÛ>ĘuŽYDu"!„"!rVƒ˙ūÃ˙üWũÃuīÅ-_ŊíĢDī% ĻžĶ!„@†flÂŽ#B"AÚkûÚß4úũ˙×é[ģ¨ę:ž ŌûôŸAÚi‚Ņ8qa4,—"äšjÂôÕ{Û^˙ßûū›}ūBū×õ´ŋn˜RXŌm´NĄgp‘*Bļ)h4MĢVŽ}ū×ô˙ØxŠĒ˙oxū_ĻúéŌvGdwÃa‘pŨ;Lš"Ⓠ y;ÎÉ_ƒ ŸũĢúû›Čņâ‘_'VIĖí˙ņ¯í¯úmWėpČîà î-0ž#Ė cˆÔã„Ōzj­7ÚúĒŇvž‡­ū˙úK˙Nõũ7‡eœœú' Ķ-s5¨œ@ îa|[iZmĨŖz˙üņü~JĪ˙ÛúĐÖŧ-oú͆GnšDė>ÜHë2¯ÄD\5}0ب´øí/ŗū؟~˜}/čã˙' û˙ŧ'V ' MąoA¤â#ģMÅ5 Ziĩõu÷öÍ˙ũ?×āŊ×ģ˙×ßÕņI$FŅļĶ#u3„ņ^ƛ (i÷ÚZfŽęq|uū˙˙ũ˙@ˆëōĨb" ˆ0˜Lîšvlq o†­ĨũēÚU§í~‰g˙˙¯ëūúI4„DDE­ Ä8¨¨ĢVJ×ßū˙¯˙_ũŋ˙}…Qƒ Ē‚ęƒ„AąQv—ĒųĸūŋZ˙ūŌ˙üF„D–6w  Ú Å5ØM-W˙üâ˙˙eI+B#&\"B žļ‚a6Wúũ¯ëœ˙¯ü^ÂÄDC6ĘĩMCMŠ Ļ› ××_×ô ˙ŧqϰՠ͈†°Ō´Õų`Oüâ~’ÂŪŲ; ąLlv’ü2?Ĩ¯~vI™=ˆˆƒ7šWLa4ĶBF#ŊęūKĸĨ ĶHDEp™íU„MļŌ°ˇKļˆ‹ …÷qQ;ßÎíEšŖŦDDÍÖĶ´ģÛĄbÖ#.paJh?ĶšŪ¤:N"#ø¸{ũ/ß=Wü9Ø6vty˙á—@ĩūøM†p9RDt]BÄB#ũ ‹~rB"s;ŠāŦīTZ“\C83áķkŪ¨A…}•°‡QDʂ ‚f†ZdõPˆĐDŦĀø¤“Ma…Úph‡Z‚aIÛ|ÛÉŊ‹ žÉÆŋõM;¤vTĖMū3ē÷á8mä‡zÍ™Ķ[OƜi•0äq›Dx6_ØAž“×Čâ‚jhX!‘Ŗ5(ŋŪę8ˆ†Øi÷ėė Ž˙o žÃ#‡'ĩD/‘<Š(RŽŊ-mHÉéŨü&Yk_`Æŋh:N‰ãoPš˜ "8¤—}úû&>F䜎)™'Wîõ˙_!Fģ]tÖá’ē'tMéúļ[˙ĢÜ…‡|íC*cˇëũ/öüA}mútē'Ķ&íĩh0ŧņiYĸÕŽöž×öĻdLŋīĖïúמõoAĻD|ŧˆĸŠâl6?Tǟk{˙_øWüB÷_Wû°›X(ÃņsÔĪ&$—üpŨ˙‹[āÂ#ôD‚úō-=uמŪķ<fÅ64AāŸP4—øÔąõøi†˙Pû _ø^ˇƒâ_ūîødŦ‹×ø‹A‚"AĒ­ū›ÍGøĨ˙ī¯˙ĸQ˙l%Ĩ˙ɞ—´˙¨wtöÄĖ?nÂFÃ2!/ŋŋēú˙ĐOūØ+^’OõWē^ĀôJáĻĻ1xGīn0Ą55†2* ‹¯ „Âw¯ëŋ_ø:%}/v˙úūũöIÂzvĢ´ĐČØÍwˇ„ Đar†PÂ#¨ˆŌTÚãøköš¯ē“6‚ãū)˙控ۆJ×ß[Ē ā`ņ3#¯īÉãDnPđˆĮa5ÁAB @ĸpˆųÚĒdAôav˙ū¯[_Ōī˙˙ũ ¯\•Ūl§̓fcÛŌm/D­ĸOÔ!aÎ^hA0ˆ@ČÃ>ĻfoåėZl]§öģûū‚ô˙ēŠ˙Ü+jé6ęčßDĮ„ ûĩzum ÚGĮމ@aB˜A„Á„Ķ“¨ĖâbĉĻPá2,zļÄ4íĩŊ4˙åŽQ#˙ũ˙­Ĩk}Ōm’Æ:'mQ7{zZé=i{ČxtꚄ„Âa0A‚Įˆˆ‰ô ; ąpŌl-~Ŗ_ũ¯Ģk˙Ž÷§“ĘMíÖÚ_jßîAÕ¯“ē&đ’`…„Đw$Ž",–wCtĶYķ˙˙_ô‰GũöDũéëiU>ßū¯éûAŲ 'H=ËÆšiÂŦDD2NĄ=A„ޟúo˙ ŠõáÃOømmĶjû˙Ĩ{īZÖĶßNëē't^>ą4lŸ…ŋm‚ 4ínū—ūŋũ¸éö ôö?˙ß×§¯§]‘:“¯øˆĐˆjîÂx@ĶTĶ_Ukü7_íx`Šžë¯ë˙˙đčxļēiu.ŊEË ßPš 0ƒĶ†š˙œ_į0y-k°˙¨ĩ˙ī˙û˙ĩëÕ¨Øü›‰4¨D]ßž‚,&„éúāõžĮûW˙˙ŋú_Ãõßũ IÜE”@[[ƒˆozũģÚį°o“Éîģŋû˙˙ļˇíũĘ/ô’e9‡A’‚OßĶ˙ōuú‡ē~ˇö÷÷˙ö*Ŋŋ’Öĸëi†ČíS@ƒMnû^Ŋõ˙~žũũ¯ß˙ä™É…íE$#Ļ„â› a{ßĩŗDŽÚõĨu~ŋ Ũģ˙úķ´ĸ>Ä0Š Ę./ŠŠNęŌm7_øiˇŊ>ēđ^Ą˙īûÎÕ$Âb%s‰O˛  ÕãtŖ†ŠģtÃOĢíŅ1_ˇU{<€ēž˜Q )1Âēb˜lPAŊ„ĸÛIŌ`Áū—ī÷é{(hB|šv“v)Û# Ŧ4ĸūô |ˆŪûûˇO­ÎęUˆˆeā ͏a?öŋ˙Ūũ*ÂCzëˇŦ}n\O˙iޟ䭤Ņ8hīâá˜.3ŅĸpžÃûû[ëU:g‹˙Š õė~ûAqĨŋ§Û’ļ“ ƒ{#]aD<Ą[„„A„ė'~žži¨wúų<ˇú˙‡Kú¯K§īö†G Ļ‘7ŪēfÅ62äxR žzĒlC´ĸ–Ķ´g}ŋ]î‚Â0īôJ:ĢaūŸ]Ōúwi&Ũö x´ŅĖŽ2A_yŲ"}ãpƒˆlm…ĩŋú]#Å~‚}ũ˙]ĢKôíÕna :$;âÂ<§d~",–:Ļ­ę)†“Ē~úá˙ëúIē˙ūž-ÁõZ˙{dQč&Ņw´ĶᄠŊYH4Á2+§j6Zi×ßú]zÂúûõ˙Žēîŋ˙vžžžFôNč›úC2 ę/j˜„a0žÃÕw§¯Ųŋëų1¯Kūë×û otĶi7°‘<§pX†}Biâڋ°Ą4ÖÂëk¯īųĪ˙“ÔŠ˙ũ*˙ևíöÖ˙„{…Xˆe2Ļ[”áoƒ „؏´ĩŊzíũ˙īū˙ᅃēëŌIÁęąƒ'SpÂ)ˆab­üĶūŸÎ/c˙˙ŽB˙ŨZŠIō‘ x‰PÁ”9\T GdĮõ öŌNÕv×[3õõúë˙­ŋ_õ+Ã;ŦŠģɰHDDDDOtȏÚb‚ Œ&ļ]×_ũīüâūJ oũi?öh‚čc&œÕ”8&šęĐli§ Ķ]}ŦÍkZ˙D?˙~ëá4ËBŌúÄDA‚!ϰiąÄ4ØÂŽÚßū@ķė÷jäō^DĮūÖ"" Ķ[ ‹¤M¨a[ ×ëŲĸPũ?ÉŋÁ2€át[Iv7ƒ 1Â4Ø-Ļ!Å1 ; }ūŲ˙ŊļÅÚĶMP3â‘XĪĮh9‘–čDuįaa1I É9öŦ بuÛuŽ÷M†GAė‹]ãœ5Đd .gÆpŧ]4ũ–ęJ„DXA’„íFa6ÂL0–äļ˜AÚm[ ĶhÃ wîȀsä`Ī‘Ŗ'_•DØûDŨZA¨ˆˆiŽØĻ( ĐzÚU×ŧŌˇNÁBwĒAϚ f‚™Ä#×Lė|9ŨMpa P”†Né…I¯î÷ŋ´ÕjúM˛XGáĻØ´ëL&p`ˆUsŌ ŸĸĻ´ú;$ŽŌ,DC* ƒMũmÅVŊ~›é‘Ût^0ėôLpīO4Â"†\ēŋy’§úa˛Ą5/]û8J˛8ŸũSē´á’té„@áÃËŋá0ƒ„HE7Qjûļ?äU"I„é˙¯‚ņ˙ŪũÖŨ>ÛúMīA÷ $N!4 °OČēíuQoÚt ¸@ČBŋ_×˙ß×ZņûK_ÃÖ“Į>Q'ĄaĖžP Lč—Â^͍\ÎN×˙ôO<Õ÷nŋÕūŊaŋé_¨xAš8¨[pgÄ)žÖ?tOáÕ2ĩ˟z˙¤Ģ¯˙˙úŽë÷āĮú÷˙I‘Æ^4žĶ´ĐŅrXH䝓Á7ō‘ôŽö‰ģ°—›Kū¯˙üĮŌĒē˙ē˙đK´ļ×Ô&F?y<¸tOa"NĶîĐ @Ī Ž* ü Ī `Ī#ņŠb“ô•hg­¯Ūĩi9:ŋ˙~+ų!ÉŽŽžũŋ¸Ü,ūí4ē^ûÁS͉…éÜ\2\q¯ íᓌŖ7tû_ÉŨC ›¯í+[ĩuÕũĒĄū—oęØŲMū/íŊ~“i;&xtNŌ.ÛŊĄkč›÷BĐgš ĻlÛ:úøĐi¤æAX(Ļ(&šĮaļĶŋ_ÚūŸ˙ũ-‡ÖŨzíßzt› •°É“ˇú6„Úv˜B f„H.žņŌ d\à ĢMLXAÅ1qV—ũëu˙ž@˙ÉPÕĩēÃû/}˙̝ONȰīūč2XŅ;ēvš ˆęŽŌ„A’˛k~"Įiēm+÷Ōķ9ûûL_ĄDō"7ļĒĩø‘Âč0›"Ÿ˙ˇû´õëēTôÛ ãŅ;n˜MB ᚥWâč–ļDˆˆÉ¸L&gtLŒtėPL Âu -ļ•n“ŽīúYÄ|'ŠÂ#øZŠƒūŧ-]lWkČŨ:ģ#ļ‰Ã—mt/pƒÎdx ffDũé Ú&īR2 čDDDE„ûx ›NÖÖé}ŗE]‡ŽôJ>ßëĮßīüˆ=¯íĄëkõtJîø„ô-0ƒ™Č3´˜ĻÄč™8RwaŠtÁ›a%Ní°šũúŌčž8?ī˙¯Ŧ4 žŋ¤DŨ‡{L +#iz~ÄDD Ķ"ÆâØ  Âļ–•íš/đ˙ēß˙û˙ū“u¸uEÄ!y%4xLAž°ƒÂdGĩ¯|K[kO_úU÷˙ ü~“¤×ŋEe"Wáˆúb""!‚ÂdQėˆéâ‚{a-;ŋöÖaß˙ú˙˙xûI>‚; "–sWî""g´Ķ<.ę*!Ŧ:˙ “{ûū‰÷˙˙ņÅRw'AėĪLíäŧDDA„ȏŨĻ!ƚjØI+~Ŋ~Ŋyuõoīĩ}_OAĨ¸ˆŠAĻD‚céaÁ¤ļļŊūŋ¯õŸK××ø|>Ö¸’œŲP{šÚJÚū¯žšÄļG¸Ą>3H؟%õIõßļÎëuåœĨ¤""E! .lCM?ĩėĶõ˙´Â‡œ Aš0ˆč.˙õžvļEmÖ]~ĸKX0™{W„lC´ĶmđôŌ Ü0˜!'ā×Ķņ¯Áb?"" ‡Ķļ-lí}á Œ7$˙¤Ķ‡æba3Ĩũgn›Lšrš"ĄĄ3Ž™ĶĻÅ~õĢŌ>H´NbāÁN.\˙iH&č˜ī+/+…Ž„DD2Ov­¯ŠęäŖ^õMĐpɃÉģđšq —¸Ļđ¤‡ö?͏HŽ“ė0„DE ޚ×Å×öē ᓡ8ĸCģûAĸŧõf:Ūēä_†hėlfČDGÚũ­õ˙úWę›A=´ĶIŽt„Ã$Ë.ÍM?ĻŊÁ‚#Ŧ7ĻfŸ˙˙ô÷ĩ˙Ōnš<ģĩ/Ųû¤Â Á33C# WÅnˆŽFNč>¯õ˙âÑÂ{Kūēŋ¤Ž—‡ÚEÛ[M $>r2=L†—ū+÷ĻKFëī˙ū‡î\O[úßūßęļ‰ÃŅ8wŅ@Â#.0Õqz÷pƒ´“˙×ųåPā—¸ū:ͧáŊ>•uČíĐpÚ'{[  âĘA™Œé'Et‹; ŌU×Sĩ=ô˙˙øB"‰_Îē˙ũęåŃí%×§ų.Ķ/á‘_/,$HvđĶM å:Â`‘Œƒz^(ėėR9„A…C•4χŨm˙č/~N˙KÛû\}ī_ú_ ĩ‚`¨6ÉR„͇„ ų#Ŗ2ö-0™ąB!&FA1÷đĩ m¤u×ķßīUœīIũŌõiŌëđÁi¯Öŋééô›jGNRŨ¯„І6đÉYÚ'ĶL!„ ˙¤“ &Á…M4ÛKÕëfz­îŠ~ö&h“Ûū)˛:äta‘špîŊ ÉÎųŨQf!v_&šd ũŠˆkà 6Ŋõ­ŋĶé~Å˙ņåX?k˙ŋę-j ˙únžƒûļą l!gˆgA™™ŅÔ_¨áˇÍ4ĶL‹n"%  ĐiĐoÅÂoÚߎŪh¯ëôũ˙]aaûzßūû9q×KīŨ‘c/ĩÜ\4 ’ō2 ŠîũŋøģHDD0L‹ka4÷tėAĻžģiŲī×ų:ŋ ‚(ü”ÂP“˙č˙đĐ˙ũëũ„ëČŽD{´Ūēj0ƒßũņ‰OīđÅ$úxA´›ȃäīIϘAœL"dŽk,‘đÉҧÄ3€š‚!ŸûžvTV—ßögäéŪļŋūŪĄ}^ĩ¯đÂKŪ­ØA´¨2th´Ķ‹°ƒĶA ē‘ŨČi¸†¨įjđéņ6ŠŽí[__üŸ<^û~ ˙ûTˇCũīīPļJôÚ'NÛa¤âĐvʑ§§Ũ‚d}°žT ŲžDūŨĶbaĶM°ļĢ ´{ūÃyÅøEgĄÉjJ˙¯ī˙ūĢĩÛôÚétėŽėēļ†ŌũL ᑾNÂ#Āgˆņå]pîvš] 'Å;ļžŸû뎘>†‚˙íēī˙Ģ_úûõē~Ōv˙ē˙LŽé?"ŋAÚx!”ƒ' Ÿ[‡;+č3*ĐiĻEaĻĢ‹¤Ķû¯7o{ũõ­˙˙úūŊ?ŊërPĒÚŋņ#‰ũ5ĶxiĻ‘!ßęa3Ã#†sâ#D~u÷ Iņ āe4í>Đ@ÂiÚÚ§¯0ķ9WßúZ˙˙ūĩãQú˙Ąß‚#˙āŋūŋô‚páŊm… Î "1ÁО3Kú~""",ŽĶęƒ8¨ė'Žļ“nˇ[z˙Éš?ûaô?íuž?­÷×wööš<ĸODcÚO‹āÂ#.N Ja˙ƒ‡I§kA„ ,pČäÚvēÛ¤‹Žõ˙ãüWõŋ\íyÅč”?˙ŋIû×Apƒlƒzģmū„0ƒ@ėŽ2ũnM“ø‰NŠ*a?ņTÅEąmĨļ’Wë_˙č,Úų"uīúõûôKÕēuũtū–Č$RpėŠũ„ĶiÜX g…8GȉK§é¤""."ĘtĐiÛc °ÂKímĩēÍ?äi7ílēū‰YÜ*ūũ}/7˙˙jŊ˙õ÷#õ>ôȃŅ'mZv˜A„3AJxŖ×âš`™'̊T7IXaum‚×û˙ ˙ĩßú÷›ŋY0\]˙ĩô4éīũ0› Û$“†Õ& Ī Á(%_ÔDDĄA‚Á¤áąH8ģĢûD8OՙîŗEú˙„ŋú˙§ø˙˙QCīžöútē’ļ“í"Pô㠄4 œū’ NÖÜS „Ø8û´ė.šüÃû¯ØĶNĶuŌO×Ųu˙˙Öúūŋw§ŨÚ§DމæíS2)Ō]¤„D0@ĘpƒĪ ¤iŨ°ÂV­¯ũŸˇ\|  ˆqÚ÷ögô˙÷˙Ō˙ļŋßūúW^áŅ;rqm0ƒf„§\Ą0T""!„Nīnš Šbĸ¯°Ž’ú™ -§ū-VũMŋõúë’â‡^ŋ˙_õēézO܍ŌN“†N„íĒ„3c0ˆÎIŲĒ–ŸiÚ „â˜Ķ´ĩÄŅ™ĶQ &M†MZië_üG´J˙ö—˙ėm˙īĶ]īĨÉÛUŒ&ˆ^!Y „ū"!„ÂjíĻ“cOÄA” &EqhCcÂ˙]Õ°G›õé×ôŖö‚â–—Ķi:%y'ļ‰ÕiÄA„HšiĢiXˆ4|Ė ČƒÚtūŌm5ŋ\Îô–ūëũ}[רû_Ĩūî‚mŽk§ŧDD„0ąÄDLĐa>ĶLTCNNÕ×ūŋ÷8ŸDqНZˇŌéŲęŸi'õŨ(ø‹”†ôĶÄ6*+´Xí4ūŋëMt˛b]˙hץ[û|ėiEExˆ†™r1îĶ„COíĢ]ëŅ>\Ę€_ÖĮ˙_ ī;ė:  Ái0B!’pšjé‹ Âzí˙˙_×Â×]wßCƒÖę yĒŌaN‰„Čą¸ēL&éE~›æžĢ˙á=÷`Ø˙;%b/¤""D1CLˆ÷NØŦ Âà ՅoĶܟ˙Ņ>ëôˇkĩfE%[B""“ė&Ž^ÅXNÂöŋZKũy*ÛŪ9ĸ2CLė–|üqaní1lA„ØiZÜĪ˙˙pEd#ÃKĨŨ?ËAÚB"f™* 7Åëk¯˙Ø>ž=‡˙´„DA„ČŨ2,´ÜSa-6ÕŋÍ;mC ėÅ´îd`‡Î‘uˆƒ fpƒNėTC°ļ]UíĐx@Ę)ŲHd"ZʞT áFCHO„$XÆâˆDDC,P&ˆlCģ i^ņi ÍŠlDqO™f™ÆO…ŋI0œ‚GYU÷×VƒģúūŊ|T•[¯uHãnŊÕ=ū¯ũ&÷ ž]~BІi‚xS0g™Ã tŋôŌ9%›Á˙ėTDDE”á">ģb‚qa0šÚ5ž”ķ…‹'h2,5bat×Ŋ°ũ}Ј†mI-­ MáØ$šŦ5ZdX&;l¨ģOT—Ķ}~N) ącŽ‘(rc‘"ødAÕ[iÛâ""đ˜†ŠŽÂzémŸöëÄDDDOėh0šawž$¸<„[ÔD4•/ Ųüŗđl„Cø™ x†2¸Šé­ŒŽŨ áøˆš ab","qY 砃b‚w駤•â Á ™ÂV´ ķ Ą’É0 Vâ$ļvˇŲ)ôŨUu Ęp‚iÞVƒŸ Gž2Wˆ4—[ˆˆŽáŪâ-ĸ`É3IGüîԅšö˜×į?Ü0A‚a>ßū˙íT'ÃĨúįķDkĘ2P´÷~ôd1‰.ŋQ03c80ƒ ųÆ=uÚÎÎŦ" ė™lŖķ#APû‹AĄ &330GG¯ŌIck’iS%9„[Š/=ŨŅ!íĒ 4ao´ŋjŅ>ØBM¸&đƒ;PXpî‚m‘b‰ÛDã `â@˙ zŠĶžvT3‡ž‰s?äo§a7MáíZŅ)<ƒI_NáÎÂJˇĐmNÁ”“ūŠ[Ũ~äy“ģh›ŋŌfČ!’„ēžÁ&ūGáé7aFoCõ÷ū֓ĩ%k魅&2Aīž=ž–‰L됟<ģŽëTëũęƒĢ×›õBĐh26GÆaŊúwöéŠoOĶūĢãZŋëíûPáäîÚv §"ŽG2ČTģû_c­ĶIdŠ:Oû÷ų0 õ˙˙tEz/`“x͏y;ņņëĮjĘMņ_¯ųŌ˙ë ÁW‘^—ü&Õļģm2qEĮd.“ŠhF‘Ã:dtēæJwš"ņ]ˆâ >ŊnžQ+úûˇtŪūôõŌļŨĐpÉėpi„ ! øZŲa(0“]tō%Ą˙īŌ×ę›˙ũoŨ´Ŋö' 4ír`eĖøĨô§ėŌ3ņ˜D_˙îC>ô;y×_]&ézūš"—×ú_˙WßM¤ōqDíēņaƒ8Eúų'„Ķ S‘q›2uĒîaĖi…ĩŪŋ3˙ísŸžģ~ŋ^úaZ¸:°ŪÚW¸dąÉ_´Ķ°šą ˙dväíĻčXA‚"Ų*‘â|ü}„ũ§Ã"ģ°‡îÖIĩ×˙ׯīWû˙ę+_I]u¨y<ˇ¯ØAôéZ'm…w<#„BĀ0ƒĮv“í„ĻļéÚßfŸV÷˙_­ŧM=÷ôŸ~ŲÃÉÚi”š¯IũéÚ Šö6…§hā„ã.ŗ4pČwŪ"2Á„ȰMöۄMŽInÕ~ŋÎ-<#Ûíëú˙Ú ¯˙Ĩŋņ˙UõÜ“Ūƒ.„ķ.ũIN, aD0äøŸ‘‘˙ Éē¯iŠ0ƒböĶŊëW'K¨>oų"?ūø?ī™˙^’˙öŊff×í¤ü:' ž"Đh0ƒČ<Ÿ8ßˊ|DA”!5w ØĩVŌĩ°¨¸}ŋ¯O×˙Az˙ž÷_kŋöūéƒõˇŌۃ˛,Q;nÕ đ@Á5ŖÂ’ĩÄD*Á4Ŋ0ƒĩUoũLW]ß˙áūŌŨ|™˙Ĩ×!{ē°ø¨6–ØM͞ä-5'ŊP4BĖ„DĸĶĪæÂ dcîØĻ˜ ¨4î­n÷4ķūŋū‰g˙ß ļ—ī_í˙ÛáŽ!pũ÷ųĻF:Ū’oúĒa0 ƒ4͑Д&""" i„í\CŽ;´­m]_¯_ũ(Duß՚+˙ãũ×[ØŽë~†…Û­÷ Ž—I"våŎ„Á ˆ‹UĶ[a„˜îŽÛS‡õ˙ûXm.Ü/˙×č¨~¯Ũ~āŊ/ēīO[¤ûĸQ“w 2\Râ˜#⒠DDE”č0šŠbšb‚kíu[¯^ŊŠMa…zĨ÷úP|ßĸynßī˙§U녾û¤é6ōCŋ°ƒ…CeXM4ŌiÛ]UŊ_2[H0ƒbŦ-˙˙a˙9Ĩ„x{kÖĩí¨c˙¤VßëIÃ%ÚiV bgƒ0š}ŪÁ⓰OĢŧ0ŊĻ('kĩˇú ōnÁīú#_…ũä† Yé´ŋiڗŽlm&"""8 ûn“bÂokƒ(ã ÂjMĨNī×Ĩ°ôŪĨčûi/×Q°bG ūī˙[̞t' EĄi‘aVÅĐøˆˆaTw Ķ ÃJ;FwũˇŊūē¯%w_ÖÂĶĄęęú÷ģĶxˆÉē ¨2C‘ŋ2Aq ˋZϜSQÃ;Kģ˙餝äQîkŦAm?Ģ­\í\DDF“Aâ#NīģÅÆ‡jÚZ˙īK˙ĸ} ĸW˙Á}&81ZŧûKUüDIÂĻŠŒ øi˙^˙ég3ä“ŊÉaéÕũ ëžd‚"uen­Ŧ›i”›%ɜp™Âi0ƒb-4Ū×õõˇĨëD¯iŌWø{L'ZaiŽ(DD!= á Ķ؃]>õßí_Đ\LãDĸ˙ôöwĄN)¯ÄD0… Č°L~­D0žšé§Ē÷š/KjNßû‡{;¨Ž—čDDI抑ƒ4ÁˆpÂL[ki˙ũ`œ"‡øäž•.ÎŌ:jŸhDCŦąÂwøŽ[_WuđŪ‡˙ŲW‡Â Ģ! !öˆˆ†q ĄĶL‰4ÛA§a:­=ų‡ûúųß ál™˜™/;,!`ƒNA’´íXMˆ{ÚŨi]z˙¯&;ĶgßQ ģA…ŪÖÄ4Ö×Sŧ8däGÍĸ"Ë×_tŗĒúî"" Î"ÚęČāņM¤Š„, Á˜E˛<ggĖë*z¯ôë•Tåp´“áÄDEĻEĩ ØĨÕ4ũa4 !„7”úŽēĩonŌ#ŗøū",ĢL&¤î]Ņ8ÉÃj‘!ņa0ŠÄ8@š§âēč0„A–âčēüŽ8fˆˆ0I;ĶÕ ÚA6NˇiČ}CČ┠“iôĢęŪ7é~ë­ũ>“Éå’ĨüZ Đ<šPE"ŋ^[°Čō7úü6ļˇz[dUĶŧŽ pÉZ Ö-0ˆqÂa7]Zh‡ōvIÉG~Dô×Ú_BēõOŨ2g#†‰ÛDᴚA Đ5.D2O§Ũ¯Ēw%+ø˙é˙z“i8`™+h´lĸcžØ´!ō\d6jąÜy %Ĩˇ§ûÚ­E¯û××ôŨV“î6MX^, f‚"äGō*#Ō˙lfÆlSfTĩŠ’uøú˙˙hŸõ¯Ģ÷ŊmLí†öšhE„FœHX'2{ĪoßÜ0A”Œ‡ũúzāŽīö9ēøõûO^ޏzˇ\•éļLôMčŒwčXAœ#Äpˆã*Îõų+ģ´é„"$ÍÆ[ūW0ÎĖĶúŸ;úarz/­wô8ŊõāĮū-乤‚mĀé¤IéÚÄ4Aūfeš/Ķnī ļM ũkÚ"ˇ1ũđE?īīũĮūŋ¯ƒūĒûZęÕŨĒA2 ôNˇazˆAœØ9Ÿ3fy—KūīĶĸNĶ‹¯RäHOÍ>מÖÕŦĪ˙ÍہW×"ĄiuöŊkÕ˛P¯Ų}IˇwDŖQ§qhC0ƒ3 @Ė„•tīôŊhž\q‹AÁšÆ`fĖĐÎšŌšKÉ´ĶŊÂŊ}Ģf˙כķ‹äŌĢûˇ×އ˙¯Bõ\”U÷‘ã„Ø`´NMÅ ĐļROõûé}ŋiŨ Ķ"ĀV°ņlXNLU¤Ķ %ęÚßëūŋųÅūŽ˙˙ũâ˙˙q­öĩŋIÚfÂ+Ãh“ÜGôöŌÂ˙Čßȃ´N iĐvS‚äâ„B„#_ī’›wą[›zūŸ÷îNžũõ˙ūŸëöŌŋīö˙ÖŨ(NČāŽôdWfBkīü1¤kĄØOAØ&šiNĐvdá ƒ!’ōPIČâ ›­Ã4Ķ ØL8 švēV—Úš§¯zØ=˙ōF>ŋ_­ú_'īvá;ü ã˙Ú^"\OKũ߄ķb×MB É›"(—…O¸ˆ™á„BNĶē &Ä68ĶMĩĩŋīũ|į˙Ŧm&Ō˙˙ũ˙ëęũīęļ5Ák§×~ļÕÃ#†‰Û`¤ŨϚjf„A1GŽÜDDC ‘ēkˇôÖ)°J*÷J÷ũ}ķŋņÆŋ˙žŧn—ũ4ŗ!¯˙iˇ…˙i}jģzzm„y˛‰Ûģ}0ˆzČđGTĩøqaÉųĶ ĢMĻ+ …a­Ĩiwūhŋ÷÷…úõéî×z˙ˆ/Žē ´F˙ņ#„ĢĩuŋuũÕ¤­ƋËM&ˇh…ō'ōt=“ÔˇÖū"" ÂaJ€œ4ĶVœBŠ ĮöUķOú@ŋŪĢzm/¯ũ:ŋ¯A?ø[cbĢßîßŨ­ŧŲŨPpĶ!‚đŋøˆˆˆ`˜M8i„Ō  ˜VÂļžÚŨn‰Uí~ņ“N?ë ũĢjŌ­Ÿëú°ŊĒ^˙{Aaõīģuē¸vHvŅ!ßvĢúâ""Ha§¤ĶbŖ Ģ 6j´•z˙ß{ų<˙ûWŽéŋ…mĎŠUu†×]îõŧ áÃļ˛ŪÖō-DE§vš´TR|†?í­÷˙NŋĨųætõiØUŗ?úķi‘¤Giŋüâ܎$„?uaĩûĢ{˛]“ĘAĮa2 ŸD|œÍKa4øh4›Vm(ģVŌüÎ˙úüL…ÖĶģؖ᧠×Ōôūų˙רØv“ˆŖÛ××OÚ &…„Cˊr1â",& öáąMÅ:¨MĩiÕ|Čņf¨‹˙˙˙°ßéh•Û ˇõä'_ëIīäXĸw{Âhb"’´ÂzbaÅvĄSÛUéqÃ/‚iƒ‡‚ VĶ´ši$đ˙ųŊ'ņ“Ô•íŠVū˙ü°ž›tIÚōeV^‰…ÛT4aiãæ@ú дĐh6!Į÷Ũũvxôžũž˙ū+­}éĐN‰Dŗ’IÄeŠAAiī‹N!‚k„ˆˆa>žĶ[Ķ]_×]ßĶč'ųöôŋũ˙˙ˇÛ§M`’: ė‹w ‹ßiņB!Ļ™×ĩI§iGĻ›ŲŸûרn°Šˇ˙õßßoôįk&FøĢ\TDDC Ę&OĄÁaU2 “MŠx‡kauˇzÔ?›Đg‹˙ī}t?‘?ޘ" VK 2-Ļ)NÔęö„DD2x;¯iĻ"˜Ģú´ÛũwZü#Û˙ö_á M3X†¤ĶV…5´""T@Đa4ȃ‘j"+ĩē˙{ū˙Pũuđ˙‰[wL"#!Âa'‡ÄDD0ƒ ˜tĶ @騇'úZ­‡ī’Ģūč áÃļĸ7Eš ą`ƒ'4¯ƒj$ÚLZí¯›ēÚđЎ$ŌzÁčȐ…¤ŧDF™5ÔS 0M‹‡§ũũƒ×é=ü%;PlĄÂņLAϚb퇯æ¨õz}]1Ü5åŸSHDI80LŽÍw}Á4ÕĩĩˇlĪūŋŧČ•Ĩ눈ˆgĀL§ A ĶNũ[Sē^˙ūJ°č1ÜȨDD[Ķiˆv†ļ ˆI“‚Dš!ūų‘1ž?Z ēwkŠb˜´ĐéÁų‡hÃ×_Ķ%'íЈˆ0A’„ĶMĸO×õõĘ ˙mė›Öŧ9ßÅJ#āÁ‰› ô2+ĩÂŊa|ŒŖ6kkˆws"˛ŋĘD¤¨^žNú'~ũ˛eÅ0gÄ(%Ķ÷{#1oîØg|+]:OūģĨĸQģøh4BŒ!z\‰ ˙ĘZ*H†?֙ÃûŽŧ *Wŋũ8dWa‘aĶ´ˇqaƒ"qŲvD×é§oßí8rÍ8__CõÛú¸NĶģMKƍ–Ģ„.!žŲFåyČ-˙é}ŧíOÔvÜ÷Øüûôŋ§§ũ}Ã#ŒŧlŪ¨f4B šeP–Íû´9Ø(‡Å#ģš_H¤¨ˆ™ødŖáīÜ%õoÖûôÚģ2;vĶĻÚjF ¸€„8ËåAzĒ~:h3ÃNëĻ™DvŋīOŠÄūí]mޟúy+‡j]Ũv‹‡ēH40@üĢŽš\mh›ĶŽ‚ažKtũģü+˙w“ĢMo‚ūŽ´ ˛)=m{WMô“ēN“´ĐtH~ž6C ‘ÍåP2… Ž“hļđƒ´B§%æ˛dúáÞv&!:˙_ũ˙ ßŨ¨,î`_˙[w¯iŪ¨EæNÜ4 Dv —ˆw!fD œ˙áÃW' ÕBüņr?ĩáÃa`_ßmôK[čąúˇûõˇPëũH?ĸvė&ūŸa0Aæ0GŒŲ Áõü“ô’ōķwáķfbģŽwį¯ßųĸūē˙ب ‰Eŋ×_}Y Jĩîĩ˙õī%y;~ÂDĩI§ĻšÂ­:íumS‡}SMÍĖĖ wôCĻJ˛ę SÕ´›Oũkũ}á˙DŖŋīV¸˛GV¸7{ŋ鴜8v vN„čNōoVĩčD- .ˇģ#ˇ %'54!„V)O”uú ß$*Ą=Š4؆ØXa$õkUũ餺‘ãÍū‚}uīžŽīâAŽŋ˙÷ũ×MĨnÁtHšÂ÷ŋ Žž) čŧĸvÂĸCģL ĪA‚U‘:?ú|<4Øĩv-0˜Aûkúĩū˙¯8Ŋö*ûmÕ#@F 1ûAjŌŋ˙¯KĐNÉ[Aģ é|„ ޟßy+ ƒn‰>âĶY€Áâ0f ę~ēžØodv[÷ ‡tÕÃA⃈kkõ§oūžŋú3ü7ˇøc_é÷_ũŦ%Ķė/DĸĩŪÃū ˙éëdąĐmžšÃB,ā/˜'2~ŋdŊ‡ ū0B/ÚģA„Ķ ģá;K_×˙üûōF"¸¤G_ ņúâ î M!ŽõFCkĐNÖ˙˙%\'ūēõũ6Ɖßnû H@Bˆ‘Ģūî""" ąĐģ!JšëbīWNÖŌöˇûwAa'‹õōLl1Ø˙øúK˙†ëZ l‡ _˙$ôēvEļ÷֚¨@Á.)‘ĖŲWÕ7ˆˆeŅqĶ)íSĩ!GÅPL ؇5Uîû=o]x:_ĸy˙õÔ*[ũū~˙ënëÖØũw_Ã]îÖČ< Čãl-ļĒĶB!ų™eøˆˆˆˆĶ Ēx~ÔPUjëuOzIT:Wé|˜˙ôO>ˆŖûë×m}{\Ų*ü+ ö6Áh}‡Tܔ.ƒéi6‰FIč“ŊŨ]„ ÍķlĖīņQp˜L&™T4 *à Zîũú×îŋųŊ/8ŗŠ_}}†—–ŸŋĻũÚuūŊŽD§Į̈_Đtnm0™'x§Ļ°˜@É‘E~"""!…OÔPAąąÕC ßŽĒŠĶ˙õ]ę–Û.üfBkc‹ĩëˇūĄ(#ÛD¯ō+…z˙ßúÖŌ֕Ũá2;čģz&8qiĄ„ ŌÆM: ÁÚv;Ä8a+N÷ūŌĩÕn××Õĩôí1ím={{K°tđ‡Ņ+ĸ1˙uĨúöG×ëĢúÛÕŊŅ!ÚĻš Í"u’"ύCUTņą„¤ūļēūŽļ{īøX`™ ŧ ØĻ8i'ëŪ˙˙ ´ōNw ŋ˙oˆ˙×ĩëëÕļE@č”Q7xIn„DE‘Úi´ØâĸĸS 'vžģū‰›DD2‡:ģUM4×Tã]\Ņ ž„QO˙õ×˙ŪŌkÕŋÚz´ ƒqIÚ¨Ač4„M&K ŋ!ĶNņm5ĮpûXxˆ† ¨°˜@ØiúmîZë­3ÅôŪë˙éę˙õã¯ĸvŨˇ“vœb"" ÂeXA„í2#Ꝡš &š  DJüD&ââá¯Úëæ‹˙“ōzŨ'Wõ^šZ}ģIÜ>“ čDDD0˜A„ 2;Mq 0›xˆģ!#SmąAS°ƒĩˇN߯õo˙ūDg^ˇüHáŽKŸ¤ŪЈˆˆƒ!”97Owˆ`ƒ ™Đvh6. ÂpÂWVûwōu˙ūŋ˙Ŋũ|7_Zį`P0L!ƒ%iÚļØ÷AĻÚVŋN–ĢǝûČāÅôvc iĐ`’BcüDDž “„Ķ ĒL&Å6Mĩ[Vû¯Öˆg/¨}mĻŧDI4s &žœ4Å Ø ƒl°›˙úž#ß~‰ģˏ˜KĻ"""!„[WØģ &ēõrtēũVË!R}DBTČAÕą„)Õ°Ÿk}Ž;žw2:Œ|ȰˆƒÂ¤˜¨ĩ† ķĢUՅ” ÷ú`´"N a ´bq!3L2včuß; V~鈈‹ úģL Áh0ˆKh2.–˙pá4ĘČü:‰Ģh29´MÚũ§a|ˆâ„2N5į/WŨnÎę žč“Ė€Ą¤qI´Oģ‹žƒ‹ lg Ę>˙“vĶū°ƒ;5:§K÷§  ͯĶA‘Čņ"ã(“Œ§•_JŽ›†šūĘΟOŊ7ŨoîQ(ú'´Đ´0LøÂ ØÉ3fØW^šęÃO¯âé˙öģ×~Ŋ7N2XŌaK/kqCžDGņ_}ul­?ãīž ­úŌw§ĻAÆEŒœQ;m§i„k"8ĖãĖųį÷øįe"áJyWß;‰XúÖžš ö‚˙˙˙°›IéŲ‰ã ĩņ  8‡“™ëęŋapa3Ā—ģJB’yx!˜¤Oū¯ũŧ=˙˙ôũĶ ũ‘Å’™<}ŧxAž Î8Ĩ[TũũĻ“‹Pƒ>3<Žŧv—~ÁaX2*_É+ũ÷¯˙_ûÖŋÕZMÂm÷Ų'ôC Á„@—3Ŗ)<Ķ.°ģMIŨÖ !D4/ ĩéŪsú˙Ãt~õūÚ˙ūĐKũ~ŸÚpČĮ¤ō;z'v-BiÜC!Ą|gå§Ŋ$áŅ+´‰í4ąM‘ņš×ía‚ $O+‘_ũ|ÜGÁķš˙~ßĨūû‰/Ŋõ˙ĶĶÕĶĒM˛;#Š6Q8 §´Ô îĶĐ3ZîžäcŌØ$pč˜đÃLāÂx\ÚcíPy7aÔėĖī÷4۟ûž˙éq^ŋá}cũ˛8ĢŪ*Ũ_õMáč8`™*B$íQ8n˙hŠäpKȈ'!R—‹Ž´Â§ęŪy8m4œXO#fOåö¨:_§Ĩ­Žēũž†–ŋũū˙˙¯˙zļī[ڒĮAäķ‡jž„Ņ l'ēh%CÖ¯#n‚wi†éņiœf A…§×ώãAÛ -Õ­Ĩ˙û˙ _ëč&ĢäHú˙U˙\?õ­+_ūļHBiíL†ŊÖ?ŋēzIŨˇąw„Ķ)Čā.ˆ[#ķ9G:_÷QØAÎŌm&Šm(‡XM?ĩūX˙Z˙“×čŽ?˙_ņ Ÿú}ÛĄÚiÚDíË~÷__õ ÖôģjŊÃōc´L}Úi‚x‰ÆN?īņtßÚcw‰1ØA„ûUž¯ž—ŋœá˙úëˇ˙÷ôĐ_ûëtqãDo×˙Š÷ŌäŖû%dvßH7;ļũĻ?í˙&™ (™ĸt ÂdQíT&"M‹MSq›ūÕ͝sOũ'˙˙ä áoŨß׹ē_˙Û{H÷ŋüvˇĐŋÕ~“í;"Ä2^ƒziūÁ¸L ũWQpA•4ȰMöØM´Øĩí;_íW´5îŋõ“Ģáē_ūž˙í~ßëß_Û^ĸđāŊúˇ°ējl"Ä<›´Iúō@`ƒ' —"NũÄDDBNí­ÚL&ÅÄ0š­„ŋ_×ēŋ˙VW¯Ōí]/o ĐYׯZ_×MũGõúō,/oma6é=˙ƒÂ bΐA™‘rõ<Š?{ļâ ÆX°Ÿ~ëûØ;×ü‘7H•ãũiŽ=­~˙Â5š*ÅVũøļ>ŋ¯×˙VÃZÚa„2*)kˆÉôC,5M2$uíCM‘C\%ÚZ^gaīŧŨ˙ĨúąĒšÚûNÛūŧy:¨Ž+ī¯˙O××_ģl$KģÛ§ax`ƒ$‘MSA8ˆ‰š Š‚ 5Ķ„ã ũĨļ–ē˙_ī­m/"5lv˜†ļÛ_w¯„úúû˙v—~ĶkøoúyÃĸxŨ8°†TŸ5 ¸ˆˆ‹L‹w¨lTRqŽĢĨ˙æwi~į4‰åĖ„—áÅ­×~g˙[îģÉL&õ­ŋ?ÃõĻôßģ#Į'vÔ&ƒD;ö]eÔ~;t爈Âژt˜ia8i_ví´›[VŠ/Mô°Gļ8†Gkt Š ŪÚö~Õū„"¯÷Q˙¯YŦJuƒzūÚöŲ2qÂ}„Ī ĖX°PƒO]ÜlPAÆV8ļ!éúUú`ø0ByHuŧ8Ļ +MĒęŽŋéƒīõ¯ûį }ÁbŋKŪļ¤čŅ7{ÚjÅb"$đ3ĖķLîƒ[Ļ›Mõ„īvŋ|DDƒƒ ¨§b¯O_öĖü?ųÍúôJúuŋ˙˙ṳ̃ËÄ ūÚ$ö"""Á „û Ų?ĐqUÚwâ"Î:jœ ؃N˙õģ×ÖŋĐ_öö­×ũx-u×žĶ˛,PNM‡ą §2p0ƒ[_ÔC´ą0……ń V[Kû˙đE_^ôGßũøc˙ģĢëižTDDF…ώã2XˆadGwhC8¨júMZöũûޜW˙×_ߤúúéĐeēÎĸ-S!ĩâ"tÃŧmE!`œ|0’št‹šÚū–˜?ũz˙ŋ˙ęšB Áî„ČLņ<ˆčØĻ5R#ģjŖAÄT4ûJúÖÃß˙ĸY_]ëÔÉAp^(DDČKƒÄDDč™HfoŌģ ††ē_ũũkũâŋ÷üpʐÚÄDC …M6ÅA‚K 'öžKũjN¯ü4žˇÆ¤ÆÁK ¨ ƒˆpÂϚēW§¯ú]˙ąGj[™Îč6†˛Ę¤ŌÄDA„Ī ÃA‡M;_meëÍųĪôŧĨéįp1~×S‚&%…Âi°Õ§ąŸjˆ„3?õõ…~L˛īøŦDDJ˛‡(é…üXM‹Žŋú%ĩžēäŅŋ2tb"""‘ĻÛ Š´ĩá×ũ[‡ô[†ęM=ĩÆM9 oB†ŸŽ+šf/ØVˆ”ęÚ§M›gn@Č Č3˛đU_Ęäã´š|ėˇ%›§ÄTdėĄá„a}ÜXN 8ƒ'Î4Iöŋg`xA†T…=î™$*A ˆƒC(súė'IÚa0@ŅœŠ9?1Ø_Ęáúy,gzŒ¨ŋÕîĘÁ%ЈŠ%pȰäí˛B ŊĸcŊp…„DÂ^(‚ŦžĨŲzoŊ^ėū3ƒÖũė} Ōļ•š+¤wiS´Á8 ‚ Ōæu–šw"?M0ˆ9i))B*Ú%ģįbÅ /×OīM͏vLA;ĸpÚ~ÖâÁS‘rˑ d„GJ5­´;MTwŗĩ6ůëļŋēLŧNÉPœî‰Į´âBGB9!‹ōā„wi’$õü&t ŗ˙{]u{˙ļÖėŽÚM Ņ'í˜L—Đdčá’ūŌÖ´ a˜_‡ķ8› Ņ˙áÕ˙ôžžŸ`ĄI[A;"ÃMļ‹Ša0™Ā`ā†ČđĨÛ ŽŌN͚fBĢôāđˆÃ%2ĻmÕũôÄ0ŋõ˙×û_ëūŸm§‘ßz' §}„Î h‡‚H&œ°ĘÜëŽĐë~*‡Ä0˜B˛%R¯¸oaÁëúūë˙˙×OOû¤ËļáęãģĀ]•‚pPįA†G$ŋí ›`´âŦg Ķ˙|‹ĄũĪ˙÷ß˙ũjŊĩuÃę×IļGztNØm…§aPˆ°œZ ęG¸ČAk¯]…"ģDáŊÅĸpɍ˙i3"ÆJƒûųĪũ˙âĢ˙×Ū/ũÂÃuũ]ĻŪŠŲ+† Ņ;mˍ­ÚńČ0č5×úˇ„é6ČŽDvôÂd sAš'č{˙¯K˙õ8ĒN¯ûiīėr-?ū’Ũ7ēNČīAà ã忨'´Â›f  ĩ ˙ôūÂiÜ2+à ĐaBa,–‚ŽbüÉ?įs˙]}RŋõKÎ/Ž+ú­un5ēÛ˙}ûiĩz}‚’Ë ŲÜģ}Å ĖÁá˙zõŊ§á7"ŽŅ8č7M3 ĨÄ.8†H›6~Ģ@ÁYŲËMēēÖ÷Ģ_‚ûÎÖq|‘?ũ˙˙PúëŪŋ‘ēu¯Ũ„ęč”]‘…ŋ†?˙Ã˙éŪt›Dž‰ÛiĨßM4,—2ähĖėģŋkM0ƒ ØV8aiZëŦ›ĻĖũm@~­j‘+Ę×ûēĮ˙WđcC×Oûî‚pė`žMßë˙W˙OV“īĩ5ôö°„0PN!ŅÃ( ž5ŊėBĻ.)Šˆlq':˙¯Ė˙˙Aj&ŖúŨ.ŋūČAŸ_~ˇ˙č:N`ŸĄ˙õ˙ûęôūôĄęš‘GrvíģīA Ņ†˛čKeŊC˛Ą4i‘L駨6J*>û#ÚûfWúƒ˙üm}˙÷]ūŋtí-ũ…čW_˙÷¯žë{}PtļG–Eˆkŋ Ø&`ƒ>2äP†d6ī,¸M;VĮ´ƒM8‘5×[_û}˙vĨ×zÖŊˇÛK˙Ļ:˙Žŋˊúœ_'WëÕx×aē†×kOÛÛM¸y+{§Q§Ķ. „ ņ5qf­l&ŠS;4Øí{ÖöĖû?Ũ{ßį˙ƒkĮ˙ú˙û˙Ė;]?˙˙ūœHá_d!UĨ×OŊ>ōw —´Fī[ Ļ™ÔgÁwˆĸPPđĶM?ŨĶj(&ˆwVW_ŦŅŽoø_ūŋũâžæB봞žēÉÖŋ¯ō(ëÂÚPõûĩßõÛŨzj˛ íŒ9!Ü|CÉq’5XBDDGiöĒí¸ØĻ%tĢļŸÚöŋ`ū~oũŋ×ÖūĢĮiZŪØ]˙ķPCzûŨĨUÕũU˛QözpČîl2 oL  ąīē'8‰ô*öE…M1ļĶĢ Ģë˙˙.ĩ÷úO¯˙ëũ1Į§jĢû÷_J‰åŠm‹˙˙ß˙ŽöíéēŲ„Û!áuf„\dHæfũiÄe•„&diˆA›ąIŦVé}úČĄŋ¯é_÷˙÷ÃMP&›„ī]{ÛŌ|ī"¸¯­ũ||]*á´î“r7îÂÉŨut- <Đd‡`—â ĘV_M&ƒÂ †’­¯Č$öë˙ßëëž8†V›H0ƒM4îęéŗ?]^ÁŨūN¤˙˙˙L˙CõzWOVڄôÂ! –""zŊ­ŠA„R 8a0ąĻŠë˙ųšũÍÆCKŅ< qa ąĒx_úŪĒ˙_×˙˙ߏúkéŊ×tN(ŒwĻaA—""ώĨ Ũ§AiÃißíĻęĢŽ"!‚Xæ…ņ 'Úz}ŋŋš×˙ūŋi}ëßNÉcI„‚}‡. Âb“$!æ ŽŊڍ66,&ēëkôMšb"$Á;"Ž-Ļ.-Ģéũĩû_ũ|âŅ}žLöŋđm'ĶíUôŨ ˆˆŠ%‘ÂPååŲ>Іh6*ÂíĒâ!‚G=ŋ $ôŠÚßöˇģúŌ ü#Å÷ūŋāÆ/ũ'Õünq`˜Aí4éˆa8ˆŌâ" w¨ü Ķb‚k %a=/ŗ˙}/X=Žŋģë°×˙ūíÁœpŧDĸ|؏A¨ēeHKˆƒ/ÖĶMi´š ˆpÕ5mtŋí0ëīį¯÷uŊHƒĩM`čˆˆaJ Å ’xØũ;ôņA4ãĩOO[Öĩ××E—Ö>8ÂgjÜ0HDEĒ\›×¨ˆˆf ĄÂe9EĶĸĮV›Q§šö°Ōm+×˙Ķ6-—Ã_ŨĐlPĻúj""2Á›@ƒ ØM'ià itļĢ։ė/⤜ĄÎáuo’ėėaa­ ÄDN&Ÿ{N)ŠcM>Ô+ûĢü*Jģ’´0_Ö"ЙvФé „ -Ĩoß žMÍ;ÎÁŒāůk3č0¨†šØJŌWôOVgö˜?ũ?œh?a(ËXM>ÅF4ÖA']Ėũ˙Ú&wíüBxˆģU !„ØvŊ…ŋ]GÇs˛B_ĩÂÂØpíŠM†ˇZëūOōēž[­D1˙û4ŌxBÁ—3ãËÆĨ˙î˙÷˙ZėzĻŋŨīV“TīN)“ļ‰Õ4-0ƒČ6m™™OxŽôÔŅ­Úˆ0DI˛9ęēģ˙×˙ûŦ{i>Ŋę×Oēė“­ę­DŖ'4đ…„ā\ÁČ×˙ߤęBĐr í8ŧ†˓I¯ô[Š?üâ×˙Â˙ö!˙ũ}ĶVúēWN“ļ‰CDŖéÄ0ƒ8 „ á“ŪŸ´žöƒ6ŊZ.?L ĀĶ$~šžv$Âd\úū˙Î.ŊžĢēõ÷O¯ėCņ‘OĢôŸŲ➛ÛDíÚq †gˆÁdjNW[ūˇĶoˇ Pīģ§da `ˆE ŊŲ×;_ŋũ?}öwV&õ˙ū„tÃuéũß ÃĻ˙zm‘`‹Nīił œ*˜ūižQËí<:Áŋ˛N’Ōo´KĶH›ˇNĶÍ>fČūhd9öĶ; KVēÚ˙ÚõęąU'_˙_XkĮué´?û' všzm‘`ŠîEÉÃá¯`ƒC!ŽúLl…QŌŊ˙}úÉŋĻh0A„"t…ĶĒģ‘Ŧ0ú}×ũģŋõ˙ȃœtíûūĮÚ´Įę­n'„ØIˇDî‹ŋ銐âđˇõõuÕú_AŲ/.úmV\l…¤Ž~ÂkDßÅ1lSœi¯ÚčąŲûę›˙÷äęŋ¯õQƒú§˙˙O[ĶĶė'mW‘\R#{uõžöëūŠÕģAĻ‘(hœ6“‡ČA˜#ņ˜Î’¨ëģĶՄ´ÖÂmĨ~׿~ēūģ‚><"‡Éīŋ Ô¯M=6ˇ% ŊŨá‘Û—‰Ŋô ŅO˙_ŋßūßIŋĒnš`‘í;ˆa`ˆräādĻîôšv]˛7 ĻE~ÕĻqqą¯Ow÷ũíš-Cč{ũ"Pĩ_ëã˙˙ˇééŌ‚z¤Īûúõļ“EÄūzˇ˙Ũ¤ČŽîE}'Ąh4 ¨ ēãˆ0B Â`ƒLˆøŪšAĶĶa$÷O˙^ŨæõÚ Ŋ“Ô–~ŋũV#Ũ`Æ+¯~Šonū˙DQ˙üÅ*÷t—ŋMÂnKM<›´Mö°ˆx!ā”ō(X|ū"""T]2,ZkzؤÂpÂiĢa6Õ}Rž˙×ŌūN§ūģíÁ˙ūī­ŋÖž?ėi˙ū˙|‹éëŪ”vîŽĐ°ƒÕÂ÷æw¯MõœÃÉģū?dwĒAļ´´íO_Œ?ō+äõ)ÚÖūë†6Ŋļíų/t˜)0ÉP)!Ũ]Ļxh0‡"!‚ ČĮąnę §UVūŸ™ũjfŌúáxˆŸ*ļ) ˆpi~žö˜?˙¨;ČŖÂ˙ģĨŋ^¤Gøŋũ=A ƒ†CĻIÆ´"! žv"ŊíÅ!§š~•§¯~ÚŪ‚2āœeĀD†Lîž( Ú°œkūûMfƒyžGĨâaÆ­˙Ŧ}8_éßĻŲéŪ‘<ē$?&šh5Ōi„m„ģ[}ˇųr-‰8oˆˆƒ ‘aLëĻ-¤âaßÚ_k´ˇęūčŽÚ(ūũ1Žžēô×ûn‚ dvEtãĻ( ؃ĩíWLxˆ‹‡oĻÔ0ģNŠĢ՟žöŠĶ6/ŋ߯ÕŪ/ĶōQÜDDCč™ķ8M_i§§ æĘ¸Š˛Xƒ_m„šv)ž7[Õ/üõ´wúí¯˙Õ§Ōâ–""'‘L‰ˆ†a63ĩ•B"ĘãÃMlWŧVĮi?O­ŋūoSŜôK?Έˆˆ†PįôĩB„D0B!‚gu ¨QTđÂëW˙ŌúūžŖI/p˜ÄFK6ęô""!…3Š=1qϜ4˜Ģ]}tZ›ŋŲƈãø!Š!’‹B,†mRiąö­¯kČēúëAĸ; ×JЈˆeđLîˇi¨¨ ƒbČ?ĩŌõö]| é’D˙ĘAMUÅÚ§iĢû^ģĒOH; %;(!Ã ™;´ĶcNŌžŽûTžOųÚÜÅtCŗ[ĢģˆlPO}}O5ęģkļ"21āĘ&"Ŋ¤Ú؆›tŪĩ™) ˜0Â2û 31R€Ÿ¨‡zõC šgz":áĸtdr§E‹~Ņ"֕t ČĄzNÉĄÚGiHˆA’uU‚  fŒÁŸ>ô†åÃßü'aDDEE4BÂaÕF~´j÷ÎÕGŽĄÂlz#4õLT dq ‘™•fm­{‡Û÷ŗ!sapN‰Ûyv‘!Ũ}„á„,ŒŋŨ˛I7×DÜ3!AˆÃ VŌwV JĶÔ Á3A“ŖY‘\*¯ĢĻe™+ëíڂ ׇ'—܍õ֓´Ō'mŅ8σA‚p<)ąœųNûũûIĩŅ QļI§TÕ )|k]­īŌMēA–8Hž4MéöēqpÂxŒ2õ˙r¯Nà {@Ė \g…$ƒŧ›ßØĩw˙K˙ŌmÛ 4‰;Ŋ8†aaū։ŊD.ČŨk„!NY˙Ĩ‡ ' ”~Ŋ /Tžŋ­]Ų,Ŋ ›dXa“Ąvôôâ@¤¸ĖĮ˜fĢĮKh]Ļ“ „Ā]͌ôT%Qà hŽR)¨÷kÕ´ĩ3ÛNŦŽ“˙Uę۟ĒļŸIˇDáģÚi Đq y˜Ĩ#֚pžĶMIŪ]ĶĩA„Ŧ@„ ĐíiŨI‡øú_Xŧ9Nˇũõz˙dcŌm‚d‡ Ķi§°ž˜ eŅÃ>ĘFtž"W‰~ÛééŅ(aŊ§Ańã0F´qŸŋ2īr–7ũz’ėL;ĒŨXņõû­wÕé­ö†GOMUĸP‰âĶ „áBˈLKŌūĢûĶlŽĶĸã§ 3äyߨ?éīč'Ixõ´–—ëuëŧj߄Ú[íI^ŸAŅ7øN/Ęq„â'ĻBË_oŽíéé÷„Ą°ÉbD‡wƒA’.)€pƒ32Ŧ˙ß;Mų§üˇ(m5'V)ŋ÷ûŽŋë×ūīéęõŌíÉŨū-4 Ž3„x͙ō)a,}i¤Â6$Š3ĶīīL Ũŋģ´Â ff`ˆgëšTAĶ3ÛVÖŌÔs=/÷¤˙ūŋ˙Ģũ~ö—kõu¸}ˇĻz}ÚA„ +ßâ ßŊ˙ûnČŽØM4×ϚÂũģĻà C ˙ ūĶ×ũ‚÷_Øäę˙úúđaޟõöF:é’ļ‰<0Ÿm4ĶũIŋ×t}.Fę%wϚdĮ°‘8iÚæąKŠ`ŒĖ§dđW×{cb›w’ĢM6gōĘkũWß˙_ĄÚuũé‚(žũ= ŠôÁ8wDī&;kųqAŊŋŨo í:Ũë褞O"^î đÂ`ƒ%ÆGĶ$2!žČX°˜¤ÛcŠŽÕdB ÜÍzûßāŽ?÷÷÷×˙ˆë^‚ĐĄīūîČĮĶiØ/Íí:áū—ŌãęģÛë­ŋhNû ôâÂhZ œ ĖÁ|¸'Ąeúũ„4ÕXaoLRrį­„îŋŦĶũ˙ų‹˙˙ü1õßO_Nļ“š˛˙úÎ@ßīŪŊ-~õßŋÖÖ¯ė&‘(nˆĮjé„,! Ę,ŧž" Á †NŌâ›_ö×ũŌŨo9ûC"+˙d­.úī^Ŧ/čŧ'§­Wāũ~ƉGŋ_ĩu¯TŨjé÷ÚA6črîÁ'ÃAŦC<)ôŸŒēD‰îáĢŊÚb‚„Âĩa$ÖÖū˙_é˙Ž…˙]?ņ˙ĩŽŧ'îŠÛŋkŌ ôEŗŽõĨv¯ÆŅ/¯ž—˛Nˇ§…'m‘aē' aØ h`Í_â" !ˇdXĩH4cL'ÚJéw¯š&Ģûũŋ˙ņīփzĻ×K_ßü$#ūߎŋ˙é˙†ģˇt Û#ƓĸQN›¸†2"8õÅŸPš ;í0“ˇb“´Ŋ]õĩ˙ŌK¯˙¯×¸[ĶŧD>˙é/˙øØ™Å}/×ßJ Ŧ?[öē´’ļôöƒB8šÜ§ÄDDDA”8NĶVÆŠMXa^—zķ;^ëŲv˙ûéŽŋĩÕSa%ŊõüŅ×ŋ&Ž?ëvąŦq]uí¯ONí2g„Hwh<ØÂ ĐXúĄÁ Ļ“tĐlußaU†˙˙Ŋ/ÎÉ$ūâ.ČŽIÂb“_iú,xOûz˙AWßē˙˙í×öõÉ^ƒÚ$?Âa6ĩHDX'jöÂaÅØĻÂVžŊŊûgÖ´ģŋę"&fÔ]1Ú_ôí.éüLâĒŠŋŋâ/Ō鴛 ŽÚ7ŧ›´Á‘ílj"G)Á4ÂĒöޘââkéß˙¯xƒ*ĸ¸ˆ?†ėPNõÖĖũ}÷ų-r2˙“Öß˙Â~đéhžEĒƒ  ÂmâÖ0–Úëa?3ŋˆˆĐdW&öš††4˙jéūĒÕWHđđĩ˙JģõĨ­ö—é_a„""!ĻFöBĶM 8¨Ļ-6Ōm,t„D0ƒUũMаŸˇûļhŸP}}~OOĢkŋīũS‰d$`ÂÁkžŌ´ņlwАĒË}^"$hŒ UW â!„âÕ¯OsEa˙ë˙ß˙ûīéÕlDDFLtíStÅ ūŌQkØMĢa=Ģ -…ũ>ô×˙bŊúücčD `ƒ'‡ĀƒMXņ™'ÔDú#˛í6Ü7ØĶa…ž&zZOY§ëųŋä’ûņ)Đ0š&ĶēN„DDY' ĒiÅEmŦ5ĩl-­Ĩ]ũrcū֊éõÄDČI%ÔP‰…ĻēĻĸRiûë˙ŋ×&ē@a5ŌĮ ŊB &qĶAéϘļŌú]ŗEûæ\‚ ‚L~„DA„A…&áBiĐĻŖÖ×I×īREädOÚe—ķ:Ü&›`°×¯ĪŲz&÷ąwĖ€ Áj"ĶUPĶbĸ›KVÕŋ÷ĸ8&I1ņ 5ĩÆN**õîZÕũ‚č0B!… ¤m1Z¨ôZȟ Y,%ŗ˛æĸ2ā ÂjÚ *ø™,ĸ܈˛Aîé’ĸA…ŠÄDCL#ģqœ2’?LzCáŨ5‡â1a0ƒ†ƒ û6×ĶÔÍw‡pĶ Ĩ‹OÂaƒ31“ŖË¤Č+;.këÈÖDī ŅíŽÂ ØÁ˛8Í ĘD˛oĶ˙üŽZ3„$#˛WÛ '@ÚXâÁ4 "-čPåY?6Ë´ŋ;32ŊĢ\ė°ö™…:§Ū´›v'mģuL&ˆa|‹ŒáÔAh[Xa¤îĮ3Ä`‰˙wAĨMW˙ü”ZIļ¤Qī6SDĮqhXL Īč!A’NPåHŅv— ۜXRœBCü8u0ʐ×Ú0/­ãû$øAˇ§Dâ6ȃļ-5iPgˆ! ¤,^ÎĘĐxAųxÛÂaš.);:¯öņũõú|ktôēØA‘Å‘`„'mƒļJd⃋EÆP!ŠéØŽģ"ÃD‡ÉŽ×†0‡ī_˙ĮWõOÛúŨSm0N–Aˇ§Dīa8°™āĀAŸ3fK’zîW{×@éh¸îš’ƒ—#KÚ; ƒ•ņūŋ_ßû"Oŋ]UĶuÖé6Čą“§h8ÂaS™r<Õ}wV.ēÁ"NŌ{‹š `™ōņÜíđAŸ Whž~K §úū=˙úŽūõ´Ũ6ȰŅ<Đv†g†x‹‘ zŽŪĐZ˙ÕôMĸPŲ(M_Ä4 ę)Bä|ˆĖŸÕu;}9 ArÍiy·¯˙ĩ¯úw°ĩō,%ē÷i÷‘ãIˇDí´ÅčXOĐKc^Ÿá× t§ĢÚdotσ828Á:ŒÁÉĮŋü˜û?¯×˙˙Ã˙_¯ėŋĶom>Û$ũØ&Ūä‡}šÅ.)‚í§nôÅĻÚJŋģ­¯_˙į;8_čŠ:­}ëôŋZîŋvLäQܜ?×íP*ņNAwW§û¤ÚŌwŨ/AĒß­ū;"äá"Cģė&´AŽ<) “÷ÚkdGĶM^ƒb“ÕoÕ˙˙É×úAūų}ŧ"+ũé¯ô/õ˙~tŸũK°m“|‘4žūøÛUúî÷ëIڐaPmļiĻÄZaˆ~#r„ÄD0B Âi§Ũ0ƒ0ƒL$Įi]÷íŽļļī^—đO\_˙ß}&¸tõĶoÚũáéēodWÆņũÔz ÕpE¸ŽŸ¤‘Ũ‚‘_'n]ĻBE4ĶBÁ?ÄDG`˜^ˇ1A0ŠĒö_[íŋ^˙˙ú^īrâH@×­ˆ5M´õˇîÍ˙ĩЈū7ēb?ëôޟ„ßvLôNÚ$ė5Ļž§…!Æ´­0„ mIÃB &ƃMŠ´žŋ_Ĩ˙éūîĩĨ˛:ø†Ŧm…ũˇNÕŽ—ŽHšūÕ_˙̝JÕ˙zÉĐŧ§øL"dM Šˆˆ™ļƒOũ´š|pÂĒzÚ_ifŸk˙üšĪíWū#K žS‡ $ûIũ­ëĒ‘_%ŽF8Qŋ˙˙õũü”$›JŪž]ØZH4Đ`†f)™˜"PˆˆIÚi­Ļ˜ ƒ ÅÚØOV×˙˙˙‰‡#ˆmwõĢ 4ÆA°Âà ūí;šoÕP˛+ŅRŋí˙ƒ Åx˙÷ĢaĢ0^QqUM 5  °žâ˜‡ÃUtĩīûķ›T‚Áô$5ĖŽÉē‹b˜ēĢ_īĻŗOūŧíũŠūˇĐūĄ§¯oOÄ-č:'NĶ„"Ld‰ĻD=E īū¯MĖķÉuŪŧÎ-dä ÄDĖŲė&ŨÂiĶOa}ĩÜĪj’úëûŋīãCä.›ĒģßtO(•ļŅ'b"!šaIŽ#ĩM&Åa0šŽØT}WĻĢú¸ˆƒ;NšoĶOjēī­÷ú_˙Õ˙÷ü„*íūēļGxAąDdā  ­ƒA„A§Ū“žž˙ū"4ޚę)6ÂĶZ~ßđŋķÉ(8˙KV˙“ O̤õ¯â"&Lŋũ6°AĮÖĩÕ{3ß3J͆ŸtSđ v×ĐM¯úî§›ęH2Z˙đĮ1ũ­?Õˆƒ)Á@ĘpNĐa>ía×úôÔDŌa5†B"$4]´ę†› Ž c ļļĐŨ˙ŦŪxhž~DsĪŠ’˛ėDDFEâ"hļȰöĸ´ØĻ)Ķ[Jõė:O|]ŊŽ7ĐĸSˆ†P@ƒ ƒTÕ´ÔKpa']uß_ũYŲ™ŠXaSˆˆƒ)X ĶL&šŠŠ ĩˇũsOŌŗ°Ŧ:aŧíT†ÔDD a4ĶH4ᄭ6Õĩ×īs" õcˆOwØģ[v×ĘVU§4ˇ&ačDC,tȎĢļ(&qõu2§yŲ^ØB$bT&E´Øi4õÖų1Ø"$Be4 _’¤ŅŨŠ ! œ×NžēXBĶLˆUÄ|ŽƒūĄ…ˆˆˆ˛\ŽÎgFĨ'˙Nē„@Š„Hü…™ 9œÃ”ÎbŊĐsĩ1‘´GB'c‚áD:rr8Čm5öĨü0ĩƒ´DI˛2ãũ'|!vžœY˜C„x =E í&‰|7đĘÆ×üĨ}ļ‰é;ģM™.Îĩ{édšƒ0›#f2΄8OOÔ6æV+#ē62åÁO‘]ĸpß{ Ä0”ä}šīŨtŨdŊ”‚&ƒAč‡Éƒ:¯´DoáĶīãl'IÜ6Â͆œ0ƒ3Ä`0l Ėe;3ÍkõWŨũôĶ •ÍBüCūˇēu÷^­Ĩ{ÁNd­Ú{§k 0ƒ< ‚ú×ë]čŧhŅ(§†š˙Ãļv*c"i×ŋŋMÉåļĶH“¸ëNĶ3c630Úí_÷Ü+Iēmö Ņ'mfą›Â.D3ÕÖ˛•´a]X2 ˙ķA[#‰ũõõí¤īH&Ã îš $NÛ}§ Vg˙ûīŋiXa|–h60Ÿˆhfƒ5FzjˇĢ’¯O>Âö›˙ôõŊo#uģTėŽČáĸywDĮ˛:Ū˙úēŨ{ĩõ˙ŋaBg`ˆXfGK]ūđˆīØO¯õ§ūķ15ŗĮß[MiWĶOļ=Ážø˙­~¯Ũ[‡dW­ÆĻ2pDbûŨ pũ•§ßî‰Z¸˙īōá=.%ꚋīN•ũ;KŽŊ×Wí/úv—WvƒrwļåĮ4 â@Čuĩö úDŸĨ_ųŧRŋúūŋãˇJ:čķ#ûõ˙Ŋí×ka ūEG˙†?ú÷ŨŠpÉLģh˜í[´Ŧ0hĖĖámJ¨¤ûUā™ /˙ĒŅ!˙}W˙÷^ÚĄG ˙ë" ­?ZŌi~’lĀÉF,Č]¯ūé:W#{´­¤$ö­;M AĄ‚"ųËŠëî4û÷­RúŌüU0Okä´ē×ץ˙˙EjŸ ˙û÷M âEA˲ÉĮũ˙˙>mÚAŲ:ÃDīię¨4 øA$węĸĶ˙kú~ūēĐfCäęļž‰G˙öÁøŪvˇņωŪÂqa0˜AæBËÎ/D­_õüˆ> ū›IŌú}ļE‡'–äíĒ˙` d-¤ū!ÄÂmĨÚv—ˇūŠ*N1^ÆOh/˙öČH7õČ1É'ō^ú˙Û ŽœmĮß§č.ŋ˙Ž˜ĨXīúŌÚzˇWDĸ‰ÛjŨŲVG ų˜ŋoiÅ<\l0•…´šŸũ™īô:_˙īžŋ¯Û÷ūēA°É[„ņ×ú\į¯ūŊ˙ī_Ũ?˛NĒč:ļí2T"Ņ;ēq{„ķd3ã˙ WLTCŽŌēĩĢ3˙¯˙đG‡ŋÍ7g]}wõ×÷ŋŨl?ēZ÷¯˙ė…m˙õëÛô.Šu†* ŸnHŪ)ö˜Aœr.fĪÄĪa4ȡ™Âię›[ 6ģŽ×¯īWŠķŋUī×WūÉžkúm^FëãûīŨoų=a˙×Ū?G ļŋŊ>ūáŲôIÛīq đÍÔDDDXLŠ:j˜¨âšc^îÕV×[úmÕŽû§^Ãîū‡ÜNAÅ˙æ˜>“ú˙ĮũĩÕ˙ģ}Ã˛^N7„H)Ã3?ƒA…3„Ķ´ƒĨ°M;ˇJ×í/_ĄūŊ˙õ]âë2]Zqā§ĢŽgö ë&?˙ę°´ŋ[¯´ ôūûēM†AĮũ Â ņys5,DD4TÕ¸Aąi„Ķcb5ĩ°Ŋļŋę÷ôŨ.ĩĮūAđȃڇŧ5ĶíßõüįōĖtE~ˆ¯˙úĻ?_õũļF=‘mē%nšM4C'P"%<ÂIä ëöÅCU{kē^ŋū‰įpˆŖúôą Ķ[a0› /­4ž›õõŊô ũĩöŊÁKϚÃ͇¤Núj#ˆˆ‹zŠC; -­Öęū’^¨|äœŦ_â  Åb-†Æœ5Mô¯×ũŗEĨ^—˙K˙ą˙ô4˙ģI6īh›ĩĄŽÎ:™Â´Ãl2:IB÷]ũ}PŽ"|Vílm…m&Ķ´ŋNũVĢũsĸ;˙æ¯˙˙Ũwy:“‰7›Qn:v“b(!A7Iĩu8é}/˙2)Xˆ‹$é§Ļ˜Ļ8¸ĶVJ×ũ?ēEŽ˙¸^o×}Û˙ ļĩ{Ķö“ÚB"Hƒ i6;I´“ĩēĩÕŗEā‚D„ÚaB„ĶŽ*!öĩÕ&õôŋ˙Pˆķ_ŌūŪ—úWŒMhÁ„ÖĶÄ8au´°ŋXˆa@ÂvŽÚ¨†Ä8ÛĨnũ-ußĩ…˙Û_Žŋ˙õÂσAĻŪ)ˆqØ]G h0Šö Œ*liŨ¯˜zĢÖˇũuá[¯ú×Ú &‘cWLPL ņ *dX&öDˆvŽđ˜Mˆq§ûjˇūŋŦ•õ˙øü0„i‚ )1ÂdXTŌiã-dã ÂaWWwęžÚNŋˇ˙¤ņ_Këãˆā ˇÄD3ƒ(pšŨƒĻŦ i„Ø0J!Ēk¤ēô¯ûú%zÎÜd(üG2FB߈ˆˆ°BĶÅÛáMĩMŗé¯×Đ]úiV"ēˆģ"@TLˆ=âƒMvĄŊ_õ˙ÚK×A´"%&Áa2 酠ÂúmtũkÇA´žW$ëT„DD0švŪŪÂL5UĶÕŨLĩĻaæI ÔDOŗŽLˆū˜â§a6ūhˆhėm÷wö4"$č_a8AĻÅą~éŨ¸0ĢO;*Ū…¤ƒ2Nnß°ĩÍ™%b5öãâ"!œpLŽ>Ōn˜×ēGVˆˆ2¸A­qŽĖ‹üˇš#ë# č"!­ô)ŅZ74ũt.ģ Š)q˜ 2æšk𨄍<ėC§ÕqŽ×¸‹D;ķ&A\mŋåĮl&VHo Wģ ´NÚ´Ķ~gr ™ã úûļ2ųß|‡ā~åpD2WŨËģ.í:všˆc{dq”‚”ņũéŨ ’Â2WéČ!r[é¤ßīôČ$Y:Ą(mŊ|XAž  øĨÆm— –š–e&č•ĶM•!g†vg…6f—ŠŨŽēZõäĄ~“l‹šeŪjƒ>" á"ægžãJŧ æz¸.Ũ§h0@ȑ/yŲ1û`Ģž–.ũl'ŨÜ0R7ĸxŨvIØN"Âa$ŦĶ:k˙MōŨ‡ôžäá´é„"rOVō# Įá{žŋīß§¨A÷ ŽÜˇ§“wqh3Á„Cøeåvž­*´ũ+r]H=4‰;A„ ͘5ōĩ>Ÿá}Õ/û#ĨŽíŋ§I°ôČņ¤=§z á ÂG#fS‘NŊ}úk2_˙īTÚ%Âa D?‘˛õî_ģõô#ũkë~ŋŠiŌļA"ȏDáۄã‹DžDhEAĶũq˙ގWĒzm9ūÂqpĪ™â?‘MÝ­Ņ,üL8ũÛĩ˙i}-ŽũÂé„ÚN6Jdîėˆâ͈j4 yvupŪ×ī}„ļĢ~‰EmÚNí4@ĘAŖ5+÷wŋ¯Vš¯ë˙õĎāÁZŽúžŽž’ˇ`ƒ!čœ?Nî!„xL†ˆëĖ…—UŽ Ŋ×ģ˛^J˙Ļ3áO™ļĢínũūį{tgĨ߂üĄŋTûĶûČ߲1ͤėˆíŋ 81ƒ$æ\øfe.k×|ø#z¯žÉBznJíí:a4Ķ Ėō]/ŽëûkOzޟQĮūŋŋ˙žšû¯ĩĶ]6ÂtË$•)Á¨M °ž3f|°_ ú"ŌØÕ­q­éļƒģHž9!ÚÆļh!šzīöž¯_˙õųŊôOŋ"8_ÕĮ_i´=Ŋ7_ĩR;h•ļ ¯ĶBÂ]ęēėB$q+J÷ˇt žNīē`ƒ@ä‚9“‚cF§Â 'Å˙ëĸĮ™ūí~ēKōcÉU˙ũc§Ū×ĒŨ÷Ž­°Á"xÛa"nŨF˙]Ix%Á?˙˙˙ĻÃ$úļáŨ Â9Hsũ=ēh&œqVĢuú˙×§{Žú˙˙Ŧ~žŋZN¯dഐm´J:ûפģBˆãĨ_Õû{é~Žģh›ęÂn› ņŸDuģA‘bīÚm;û_õ÷æš-ŪŋŽōuz­/ž÷c˙đßôũ;#SŪÅZ˙žxDq˙úõcÚĩĄ§‘å Û$r îNŪģ æœyЉĸNĶM?TĐL&֜}éûj“Ũfwë˙‚"Õēë˙ũāԁ ĩũ-Ķ,{°Ō× Vgū‚û˙÷¯=SkIŪ ŌÃÉÅ{č Đ0ƒ*(Gˆˆˆ’h4ÕßA6‚ 'Ķ[U‡Ģk˙˙ü_Õ}c)đø‚ũū5í1AƒbÚ×Đ_īĩ]ø÷ī§ųŌš°čœ>“‹0B  ƒf¤~)ЈƒĻŪŊÂaÅ&œTRkëgī˙˙¯D¯ôū’×ũnM´ļZvՄĩlđŸ¯úÅ" ũ*Z˙õēĒ~ŸaIÛmmP0BÎDDčƒLÂjD´ˇM ĶOŨuŅcŗ?˙ũkä‡(›đŋ˙æB¸Hâ!§dAÖÅX íSū´ŊŅ,č•û˙­m¯]B 'dw—P˜Pĸ"" Đj˜MT ֘L ĶcNØĢ ˙fˇĨæõ8ž‡ôJ˙×ũ ›ÄC &š‹bXí?EŽÖ˙Ēô¯–į~ŋĶĄéũiwOá‘ÃD‡ĸpä‡â""#,¸A¯´ÚA„ét÷ ú˙zūsK˙˙ÄD0ša1ÚūŋõOB ú˙ŊĶQ¯^ôč t‰ßĘu]_´ƒ4ÂqJ›iéĒēûš+ø¯ę˙TŧC%‰áņV†k[=$ž—ģ˙ȃ¯ũEė/ëOžßL"" `š Âí;iÅÚlUÖļú˙ŋū."A’ÂcϚB˜žÁ7_ĖåoūÎ/“Ģūü}›Âúõ¯øˆ‰ešØNŽÅņ§m„“JÖמŠũDDXAǎ‹b›Õ?×õ˙ûūãúĖÚßúb""´)Ķ8÷d ö°ƒ Į ,LėĩínÔČ[ņ *ĐjžĸO ßÚZūi÷īɎä Ģ_˙æÂF˙Iˆˆˆ3“āš >ĶŅA„Ũ%´Õq`”"Čąj!é‚›¯ĒvŸŸũm&čGĒDoūŋ¯LDD0„ žiˆh\Rl_â4ʐdvMĶŨĻØJ;Û[_ķū˙Šß˙VļĄĄÉÔ#ÂĮXtŨÂ,ƒ%ībš „Ø¤ØõÛ]ļÍiU~’ÔS"""fƒ͝ĄBCœp[UvŌmĶNÁ{Âūę4•āsR˰Xaxˆˆ`ƒ ϘNŌh[Ú_¯ßÂKA…Ąú´îé ØĶ[ Úûfz.ĸ.Đ´ÎĮ?Úg톓 Ä0ļÃOX2:‚ / ūdŽĻЈ‰ķamą 'ÃJ$¸‡Ũ:neB´ˆ‹ ‘ûn;ƒĻˇ}}ņ a(p˜AÚģąM”TûN"" Ę úķŗ]ÉÚÆæÂT͞ÈÉöõôd/ Ķ!"\!ŒŦ+_ĐAŅ9ōRJõIí$Nũ„4IÍũfEoéķPÎ Â#AŗúŋT-3‹ž×÷Žž…ĻF Ã({¯é­=å-ŗĩOø´F8`ƒôDŒ2YŲ6™ÎfÄ=˜Ã!(ˇiĩēwĢ“ĻžƒBÂp ų˜*Í ÖĐdíwĢIÛĶ Säĩ„ ˇÃÁNŽ3LSü(PƒHråÁmԐ0žē~Ų'î“ĸqDí蓷ŧ ĐÕ ƒŋdąē&îô!2 ŊM7ū#ūž´+Õî•č'tOd¨N7ˆM Điϰßĩũôá젃r8čî, ΌŽGÆNxžé$Mų {Æā—vŽ—ũ6ČĮīH&ÁôJm"Cļ=ƒ˙o_ų1÷öÉ=xMÚ ļĐqa0ˆZ’­ĢzI„6ôú펐ęŊ_^š÷VäŸĶ†JėAߐB=ūI‹—5_aSû]ŪúNČā‹Núv5ŒāČã*ĖĄ¨Žģ´ĸĢ™/ū“īõĄu˙autÛUo°Ū´šÂ, fša;ÅZũúûûĻ›ÛmŠ&ôî,  ųÆO#Ŗ:˙ßí˛oĶ Ŗ˙äv ÅuãâöÁzņ×ßK‘ēϝ§ Álh—3ĨãG˙ūŋ˙ö)¸N‰Û{L&…‚`„Báˆ'°~/Ūģ_á ´jũîŋĨū†ÛZū^tûģ‹L&?Ũ%\>ŋ枎–üY:Dq˙Í_÷Ōaŋ˙鴝ÆM .Nz´!`•CŅ˙ī˙ąūÁ´ˇ×]6ČîČî‰ãDžČū‰;ŋž/ēIvÔ%ęÚŽŊØ"˙Â|"‡ôë__Dč‹÷˙ß~Fí'“Ŋ¯ëj4×ôŋd /˙š a…ũuvĻū­§ ØdXmė0šũ&ˆ1¯DĶi§ØVÂzúįüĶũ/LŽuû'W䜨 tÁōŋ‚WęÕî› ŽÜž=Ļ‘8蛴íëWZû¯k˙Ō´šŨ+§~]Ø+üEˆy‘ĖÜm ą­ęalTAĻ°ÕĩoķO×˙o˙„}wØû_ū´ģéëŪŠÃ žMßú[÷Õū‰_­ŋüjëû˙÷aAڑßđƒÂa†pŊ_öĸĶ ĮļĒÚū̝Ĩũ¯wú&9æ¯¯˙˙˙¯û÷}Ō$økôĢæÚ_ŦĄŨWũqkë[oū›ūNČÁKŒ§žŗ˛h4ÂpÂdH$=4Úcb•† „ÛIŌÛ\Îūa؟˙ô öē#}{ūĩĄąūģÕŋt•ĐčRvŌļĶūēŧ(<™Ž÷¯~ú˙§õ_ôØdæJĻ\`Šs:úˆˆˆƒ ʄĶĶM âq;Õ´›I{Ü/ß­_č'ũßÑÂ; ˙é6)ĩ[Kõ˙Á˙uūA˙ßú_˙ßTØdČh´úq EDDHlA„v•éŠ8`”vœlj÷ęŽÚU ˙˙˙øöŌ`ųĸßɸXiIƚk­Ŋ&Ë™¯˙ëØ/úöĶ˙˙¯^J%aiĻ‘!Ũ„Ô§"ã$b" Ņi‘4ÕąMĶĒžŌĩ[^ë˙ūHKëũ÷îd/ø‹ Ōa¤,&Å­ĨtéúāŠz^ŧ™ ˙zú˙ũÂûíSWĶT°¨XAĸØĀA„Pa Ķí4›pÂĻVŌKOßŋ7ŠÅú%ŸDĄm¤ŪßĒ^"{:MEÄ6Õĩĩũ´˙˙tŽ{˙˙ūü.?ū“r;rxäâÚxˆƒ&œ Î@  |PB!ĻØ/ö•Öŋ¯Ŋuh'ã ÷[ū"&ļaƒ¸¨Ø×í'˙ķ;3WúŽČ¯˙ú] Ēöí/§ô‘ĸvÚŲ*lRPÁjë§k¯æ‰/¯VŒđ}Ÿ˙eē *a Á0›ĨßÚļ_ūĢÎ}jĄ˙]z˙vzvM”Šˆ4økcаJ.6Ķ[°žž•úƒęŽúb"Lã„"Úc „Âa[­mVŌ÷_ßDŗÂîļí(ŋÂ(}=Zģâ Ķ &D|ÃĻ)ļĸ,+i6Š­¯ßvŨ×zb" ĄÁ2‡#‰jІƒcb˜Âm¯u÷÷õ^¯|ėFŋÕáą˜!h0ƒ ûļ*!Ēm„ö­ęëÖüDDD0A¯Úzļ(&é8˙T’˙¯ŽĢ¯÷Ą 3qG ‘]ĢąiÄ0žÚ§j˙â" Ę8GĖ0˜MmZm8O ĒáOŊu4˙ŲԑŽŋ˙ˆˆˆƒ(@A„ČŽHwŌuƒ[ ~""!‚0ļļ­¤Â`„Wks×˙zôGßŧDDE‚d[OÕÅ1AS!ŗÄDDiώhD%‹×ŋjŸĐ/˙ņ5jšéĪKíFši°Áa­Ģ÷˙}jkĪoAj§&3×ũĨŨ˙ĩ[Ž>ŋŧūí6‚zí4‰=;g‘Ĩĩ×=ū!äh˙_ĄĄpęēi÷h0I6N6špė&ƒ iø¸A„MŠcŠ´Ŧ+_ęžēô3Ļ|ÛŲ0ūÃ]ŋúcĻ—kî…í¯ūũøM"Wnģ .Úļ–Ģë×õ˙ņ¸^¯ũ^E“l'Žī<ší;ÛMSÄ>×ģôŨæiÛ˙üT”pWúëøcĮM~ }/˙­…VČîĒÆƒ öŋæŸŋr_Õ.Įû¯UĶTîđ›’´áÄ2‘eƒ,ĸP ™ĶM´h0šļ[ôĩû]ÎmŽh礍EîŋëņÖÁūÂuöŌ^§ö–ąL_}Žæ~ē$?ūNĘ2n•{v ŨHŨ%ģģ˛<ĸPûA•a‚‚Ę´""" ÂéĻqiØIŽĶboNÖÂnŧŒŠƒŌë~h"(˙ū˙˙úMRéÁ‚f´ÔC ą3°ĢaoéĖũ˙Yí¯˙Į˙CßīWM†J”í͌œdä"ËĀŠßŲ>ãĻ!ņPÂØaĢiZÚ ÍũßA>?ס˙ūü0ŸšBĸ"!„ĶiĶ›jØOõī˙Ģĸ;}kũ˙˙¤õ#ļ‰ŪĶđ˜LEDDöMS Ēi¨Ēcéd<áoĩ_?¯__‚"kV˙_m-c먘ˆdøöĻ“b˜ģIĩMŌÛ?ęĶëũĮë_˙ūŋéŌm‘!ĸpũĻW”DDƒD|4ČļĄĢd;ڍ86ß˙kú˙õ¸#įų+õöũ˙˙¯÷ę1ŦDDD ah0ŋjąajAų¯™),D̃%k}Újm¤ŸĢk¤ŋįɊ˙_í!Á({AœpšÃ ƒõíŒ&Ŗˆ‰H™N3L‹ „Âj₠6Ō‹×öĪĮ=>žŋúcˆD0ƒ5ˇVÔ0ƒ2Œ„Â4Ķb­ˆ†[Tûf‹˙ŽO`e2 „""#Û츈† iäAÚ ÅmĨw„ũūī;&0ŌH–IđeZųØT"  –&šukŒ*°Ō´¯÷qø“dĢ qx&"",¨(pœ0ސa8á…tžÕŗķĻ•SO؈‰Bi§°ÔT4“[¯;ˏˆˆ2ļĻĻÁĖ0(ƒ)qmôáábēęŸd,bÛܗF@ƒ#įLT'”WĒ.ŲŨciŋõBˁ„ ŒœĘyV•„A§ Ģ}įe&ŋw Ũza0ƒ<636lĪĨŌ§i ęfĮ^ĖÆkČëÕĻ=­Ϝ4Âč\Ŗ uɎ ķ˛cßIp0`R‘ đÂGmÂ`Ķ&z7' ‡ƒZˆY’_Å˙¤ÛŋuĸON-x`ƒ!°´ĩ@ÛĻd0ĮëKJŲ{ißh2`ĖÂ!‘4vŪŋģļv”7ƒĸwl'Âh2ÚžÛɏO×úv"Ü28"ŊļÛIĄ &).)ƒ„Ą 'îē}èũĶlޝ“†ęƒCD/‘Č [ĶšŲ2ūŌŌēkĻ]‘Ûi’Ą;qiü0šŋúƒūúNžĶáŲvĄU4Éq‘ķB$ž­6ŸĮĩũ]S× ÷JÃ"šv‰ÛjĒ]špŲn›\ˈĨ˙å/o˙ĒzØN‰^NÚ´šL ČB'KßBd}Ūŋ˙īŋúzh:MîÖé4#é!™Œ‚ú}û_Ũ×÷MĶi\•Ļ ‡,vša3„pŒũŽ_˙ú¯úûϟŨé_nīMB ”„A”>ĩlČ]}Gû…˙ôŌē:' 4í4/܈ÖÍIĖ…†t-ä#…˙˙Ąũëĩ˙¯öĶŽ‰CTĶBAŸ3L˙ĩüAkWJ÷éĩunNÚ%ßė Ī „jģ÷œų1?˙˙˙ũj›Ũ8[ųcŌ§’Œ”Spš~wu'˙#pŋ>ũC_ūŪ'Ģpī^Ѝ@ÂF  ũLŋßú˙ĒūÕņ߆6*ęõ´ ›—ÖG€ŽĶō(Gˆá 994ŋa_íqĨŌVŪŋ¤īŋōpÛTô ÎÁž3lųš°ŋ‡{UŗE‚*?}|^˙˙ôģÕ֟˙ļ˜Hž0ōvū͈aB á D$4˙˙ĸxŋ˙ūB´Õ{ų¯ŌvE†ˆĮ„JĶģBÂ!f˜gW¯˙jÚw_˙ūqa?ū›OVبĢ]ö˙ë‘ē_ŨõN-;3à uŗEŪ—ũČq×ßĮ_ũī´đƒĶa‚“Š%í0œ8†2 ‰Ųūņ[`ļ ë˙íš/ÖĐ˙ä…ÄÍ‹üiû­¸iÛ÷Ȱäĸ‰Å×N!…í]>´ŋų0÷^ßĨ×˙ŨjõétØpî‰ŪûL Î ƒÍŒæGʅû„ÅZJŠßx_ūqõũ4Ō Á4˙Ĩmū†Ŋ_h: đÛĸō)“Æęd,ļ.Â]Ũ¯ÚWuav!W_ļ oZßé{ąN‰[ •$í6/N,§C"ƒ_kiĻ)L ĢkúëĒûf‹Ōė;éL~‡šq7_÷K}ÚŨ‘ĸ7ŽÛĒé˙šžëIādAÉIFŋô˜˙˙IũöJ é]Hîm†Ū÷ Đfc(ͰŸ´í4×hZiąIĻÅjŨké´úáú’ūũūēû’ĩm~ ĶîŌ ÂlCU´ô˙û>uO˙úŌúOí+C¯Ž´lŠũĻ‚ĻAœŅäSËøˆˆa˛#í]0žÅ0ÂŨĢiu§yˇNũk%}}˙˙í-i>°&wÂl[i6Ē[gß˙úī˙ã_ōŌūũü ûĩ'mS[Đq%99ˆˆe8NÂŨĒb‚a4ãŪÂwÛ×Ģz ų*’ę˙އRwŪŧDDDė„[qÅÄąßrĮĢ™÷˙ô‰g_˙˙Øãë_n¯tˇ“Š%NÛēvá1L.Ķa5LZö~ŋū°FhŽû˙˙ÃãĢß g˛#Æ{„Ž›[ Õ¯ë^˙˙×ũĮ˙ßéu¤Û#ļÉLģĐb a4á­ä#ÚëutüŨ_÷ ŋ˙ū›˙üDE“tĐv []}t—_tŋ˙ŋ˙˙Õ˙Kúv°ōVôNâ""ÂhC „Ė8NíEXWJíoK3ē¯_ūJ¨|" ūŋHpš SLV‹Tôŋ˙ũëôgr4ŸŌ˙n˛8”ūˇWūIąÃLCb¯ ÷Úúzēû{äø7œH—ņ 8é„Đb˜†`…a5Û_ķ>×üēä‰˙õcQØVģúÕūí4ĶüC ą°a%ĩĢ=ëöNŋ×aM§LCM;W­ĩũ|;æ˙×ūé|cũ†žĢi”ûA…˛qtƃbj…īŧÎđük¯â Á2PN/ !ĻÅÚÜ5mmVüĶ˙Û˙c_ûØëõQv.-Ä4î!Ēļ^ũ*Đd!ûlPMа”_ģau]Ėũ¤K?_˙ĮN"!„&S‚ Šä‡Ūč4Øļ('i\ÎÂkÚâ!„ ĒiÚa (a+ģ[^žžŋ’×Jū’ ‹ ØÕļ“Ž8†Ÿ â8¤pČgú´×ēŨ{Ž“†utėęļĄx0P!aWIEß>īũõc˙ëZ֞ŋÚm…/$˙´ÂÂ|‹‘ 3ūĩ˙¯_ũ÷é:ģ ˄“‡.*4Ķ aQ Ŗ§ ƒŊĻVī]Į˙uūÛV? ž¯ũ~õ˛CDt§iĄ ÂgA˜Á‡kĐ˙×˙Ķ}ÛņI:N‰C’‰ģl&Č^ „}…IÃč›×~Íđŧâ˙ŅũaøJŸ˙Ĩ´ÔŽ% ‘‰Ûm8ģė&„C†]ŗkˊë˙Ƈ÷°m,-÷§H:AŪN˙vpaęĖšĒöžûõK×ûĐ'˙n—Öŧcëđģũ=;M͞+Ņ;nîéÜ0@Đ8ƒ*iqūŋøũ xNˇŋ][%mÆÁU§Ųqœ "Ģí$×˙˙Z×˙Ē#ŋ¯úūĮM}ktūĐopí5RC´[í>ČÂ83áM ˙ūžAüwÉ'…†×îŋ˙°ƒ&|ģģÜ0˜A”‚˜‚>G^ŸZWKôí-Öē˙ب_ĸWūû¨ūõÕũ:W% 遚98l+_4Čã8_éԑc”BÛö9 1Ĩũoīō8j’Oš­„CЄ&5üSĩŽĶ×ēû˙­AÉn7é˙đ×õīņ~ū'aoĸpĶôü´ĩūšõ?V˙‹ü+¯ÂvLđÚ% ũ4Âä5éąM1q‚m…OĶ˙˙˙úzôŊëCđäpŸ}]ū›ĶĶmHí‡ Ņ;m~d/č0B—Ŋ74ד÷õoß­˙ŋ䰎é[MTœT'š˜šíVÕąA0ƒ‹ ĒÛZ˙ū~ũôK?ûü~‡ëē°ĮĩøOoôėpøö’j­­îg{š+ķ~‰]°ˆŖõ­˙ëpĩÖĶĶo´yģ$;Ą į Ό§ÍHC4Čņ4õwiĻ ¸MWOVļgžũtųĪÖFáz×öšL\„ûū´Ũow히`h0œ5°­­Ĩ§‡ũ,]@ŸäüĄVŋbŋŽ˙ëŊĐAôõ´Á„r.2x b"!‚aMEuŨŨD0ƒAÅĻ­…MÖũM˙|"+øö5X{˙°Ú÷üČŖÄGģb ĩmo׎nˇņôGtEīõĒŊī ũÖNęîœDX&b",éÁ?ģ">Ķm›Į„zéįũ_˙āšäĮ%UŠH?×ō_˙¨âĸ­(ūöž˙xZ÷Z¯˙ĮzáXn˙ļáļOÉÛoLDDD0ƒ Ļ™Ōí4šh0švÖķOķEéwõ"Ŋģ˙­Ąûīˆd‡°˜TņĐNÕ?_Ėīú\ßgĸY˙ũ´č1ČSŊĶlƒŽŨļ""ŧ×ŨvIá’Ëî"""%MđʀšoiŽ)nÂÚéßgīt“°ŨĨųÅūIÂÕ|FLBg*☸ļ§éëŽĢÕw›˙Š!qI6ģ‚˙O†ŠũÄDDC#´Õza6**Ͱ“…ˇ˙ë_ķ˜zķ"•â" Dûn0ƒ8ģ Ú˙ũ¯˙ō#Ņ,‡VÍI¯č}ŨDA„NÕíl\li×k}¤úßũŸ7WņņÍčøŲ°Ŋ¸‡éūŋŽÕVsŅ,ęŋ÷˙…pÂgpL§L*dAõIģL]Öļ­¯Úīf‹üČ]t"$„!“pƒ Ļ™ŊN!ÅjēîgzIŲ›KÕŋë˙ąâ""2p50ēâ*M„ŖMuŊĶí{2XLDDE˜é‘âiû}Œ&;´¯žˇŌû߯úĄ– §EĻDrNĸ˜¨°›í(a/ÔoLDD0˜O˛#Ú¤ 0›v}mk]ũRņ `‰Î{L&EwwAÄ; ļ""! 4íŪĶģaoz¯ūŋŅ,Õâ""  îšzjÛ Ž[ˆB!„Ę€™‡ §jĒ*-ĩ×û^Ŋ.•DDDę) -ŒČ]xˆˆˆˆ0švDrN˜lˆ:°Ÿ˙˙Jv˛Bˆˆˆeņņ(|ė°b"A„h7bĸM=´–˙Õ4ÄFĢÄE’Āƒ ‹ „šĻļžŌîB2eƒ ‘`›¸ˇAĻâÜÉ!…X}261Â4@ȝawØ|K"’˙ŧĪ ʄÂvBģ2˜É(Į˙ĶÁŗĩœ>2¸cúö— Õ0’zÚĢwa"xä#Ú´ÔSė Â"ôšķ¯Õ™ĐDß˙é­Ŧ:ON朎zGãOņŗDČb˙uņqũú}ęŦ0› ™ČŪ‰ãŅ;{Ļ‹D%čED‘ëŠá÷ūˇĢ âÃû­[dvæę'm.Ԑø Á‹drúO2Ôkëû×!¤×˙Ģ×Âūû%BqNĶ „4ÂyŪ˙kPbŋu×é]qWwI‚EŅë}ɞÚ"ŋ˙ũ(ņūŋ÷Žęũö’nN:&=4đ˜L Đ8’™~]“ĐūeZ¯˙õđM-ĶÛīˇŧ-mP††,‰1Äėž„œ˜ČūčīúīO˙uūžëéZ\Ž 蓹;ĒÃvė&„0„3__cûéF?ƒkUđČ;ÃčģÚÅö„0…įĸ:Ĩ÷¯˙˙…˙˙˙O‘Ä˙ú¯ZOĸxŅ8ĩWá ŽČzȇ=“ōę)k ˆëZ“×˙(Úw#uīO"Ŋŋw°¸A„˜Ļf`Čfu^ē˙¯úɇõūŋū<1ũû×ēN÷í¤Û ’Ą]š'ۘ! ÉÅ3Dt|ÍPOÖˇôgŋ˙-Oô==ēđœ2ԓŨŽĄ4BD,ČĄ *¯ë÷šųũ÷Î/˙˙×ÍZüjųũûīN‘ÛI{ģA8´ÂĐfÆ4Cˌ‚o˙ķEāÚüŒr ĄÂÕēöëûwēvF8NídXtÖéĻÚh4Er,!1˜IîĢļļļ–šĸŗ5§~šÅûČÁÕĄö!+N]+ë~ēdá;°RvŨ=âđ˜C2({}:~íáŽī$==ŋų>ĩé…ém> ōpäâܡ¯vœIHkÄ4ÂvœnžÚzßÕú}~sÖĸW˙ûĄcāÂõôūÛģ[˛8"CDíģļé­l0šoa.ßīđGĮC˙ęÅĐíī_lŽéĸVÚiö ņ) Œ*ÅĻÅĩĢjØ^ĩÖ˙û˙n_‚"‡­ŋã˙û˙ˇ˙ĻMģ˛8˛T.Úû1ĒŽ¸&gũ‡Ņg^÷˙ũ.õ_ęôŪõ{Rw ęĶíB ¨Î<ÚdG&ũÃM ŠŠŽé×Ė=_õūÕũđŊo˙˙Ȁ^ēw]öƒ´“ÉįÃ&äŸŊ Ø5O´Xõü;fk÷˙mũ/īũŽũŊ]úzD‰ÛŊĶCˆ2@Ã8€ŒĐfģ0ŸiĒŽ â“nĩ˙lūÚ_ũøEc´K<:×Ũvé0ü:Ŋ{{ū­Žøˆ’Ž)0ŦBaގ雎×ėÚÂ;˙ũŋũ} Ô0ĩČą×ZøAĩmÃ˛J øiˆˆˆˆ´M50ë}°Nã_V× ķ3ŗ˙Ø?U×˙WÕŦ?˙úŋNœqg ã…Q â“ģJÕ5ŋëĩΟũzūØ%~1üUĢßõĶģ´“Ūb ĶA„Čޘ[ƒ ´aÆÃĸ 8ĻÖÖõw3I_ũįūÅ?Ē˙˙öžMŽXˆm‘]0ƒĻ ÆÅZŪ—zéģū´Åüw¯´˙ūėŽÄDDę„4íW^ĶÅėSßa=vÍūŸūG¯õëüimâ"j:iÂa0˜U˙õ˙÷øZđDuíí§_ũמ×N“b.",'Ļ ‘öŠ šwMĨkám/ë¯@”ųú%—û˙˙ˊ ø‰¯#ėãĻĒĶR ,RßíĢí/ ¯äęíĸ-¨˙ú˙×}ū„DA‚`„äĐiė'Նĩõî^ˇķŠŋ˙˙‘¸^׈ˆ’1vĄ&ƒˆq„ÖÕ­ö˙l°†DW˙ūęëJņÂaoU㴖4ĶŊdT<Ũë_˙˙‚k(lė‹­Ä4ĶûNAü˙fáöŸĨ[˙_ũĖ#B"}S‚ &DrOh1H:M4Âk øôûĶUũ/ũ_Î8&š¯mmÂw nÂzũžNēķŸ×ú˙úh:ĘĐa(pƒ ­¤ĶM4î[XŨ?WíWķEj¸ˆ‰Ŗt‹ęa6Ķ Å0Âëí…wī˙×8‘,ũ^œt""" Âh;N÷qXMâiŨĨiũĖ;Oˊâ$[qÁ÷§ím1A>VĢ×í+ũ/˙ŦDDDD-„í֘L&Å1iŦm…mFņl˛#ÚjÂ6+Ķ×ßũk˙đЊ%ė\3 ȰŋjĐh:Š‹2ëK؆baoMSKkiZzęŠ{ã ņe Đa2+¯h4Ũũ8ˆˆŸ ÂwA´AąL\zwõúT""" Âi ũũ0B-4ûˇQmĨ}Ņ’ Õ!eā&ŧ¯ŖmDCŌi„͎ĻáS*c8lRˆ§įb¸N1RsV": ˜MŠ}:auÛelš5WŅØŒ;ļ~2ÆëL“#.†ģVwm/øp•2DGŨÕqŊ:ŋ×ģkdž­tN$bkŋBåOtÎÂh[DuëôžøOņũ dņQÚŋš\‚ 2DžģŠU“û œ0GF‘™t+öRË@Â@ H3¯_´‰ģŗŗ@¯úhI;3ä\ŋūŨÂj3@LÍ.5öV‰ĩÃ'2NĐ´\‚ zø|‚Å(bԐáĒiŽ3ÄG 0ēĩ‡SąCīĒ ĸxÖėažîŸ‚'8h›ĩí R0 Ž0ƒÍŗ¯ĩL&Ķ …ôē“ėģ´Đh…ÂBŌwí¤­'IŌnJ;ļŠĄpqaDËķVX‚Ž/i<>v-%û#u¸dąČî‰;{†rSjy,|?ē]^é>î‰âvû ƒ4@Cäa 3A" …_Ūņúū‡ëĢĻŲ%N ĖPDI› räŸĩ•č?÷]&Ōũ’ĮÂČą •$î"Ķ‹L°ˆSë‡Ã˙ūĐ]ēŌmŲ)Ņ8vƒ4 g†\Č<Ž21øšŲ…}_ĶžõÖí7R8ÂnŅ8v‰m0„É2!ĩŋũßL˙ԎÚM蓾-†eÆ@BˇÕ˙¯ø˙ßúŪjá‘Ųč8i{rŪ†0ƒ6d‚4Ī3¯¯Ōúî—×]Z\–4ģkŪč0™P&h2@ūÃ˙˙ūŋ˙˙]Uû$ú“ë%š“´š a0ˆ´#Y˙ūCę+ ūŋĶũtŪÛÉÛvZéĒ Ī‘rSb›~˙_Į_ũ×OĶĻ­4˙Ŋ_I°ĻēéńĶĪr æ×Wņ}r8˙ī˙§ŋüŒt“˛(÷ړƉŨ=4ĐžāȂ×ö˙ƒ¯ūŊŌoh‚‘^‰ÛEŨŽÕ?Aâ]qÚĎo[K˙ÍĢŅ֗˙Øãë¯é­´’ļ:%N$û´í„9ėeF*ęÂéZZōbÍ˙ū‰ââŋmū:­Õk×Âm+§„Dž‰Å¯×iŠa„뇝ßĩɎKB(˙ĻÕv”{M ¸˙ĶŊĶĢ ŨģIĻC(&-ŠbØjŨ0ÂŪǁú˙ēú_^īũĒĮøØ_ŪŊ÷KH>ÚEß]ĻœZ˙Hō^ ˆĨŋŒ1û¯ŋĢĶ{¸zvN„‰Äxdą$ĶlSÅ„ĶžAūĖ˙ëŅO›Á˙o÷Ö7ŽžŽˇ_}PÄ5nČAíAÚIëŽh¯ëņäAč”oūģ¯Ũjũ&ŋŊ&äōۚh‹Ÿ"ã Âvš´Ķ0œ4ĶŨ}ĩũWEŒũƒ‡Ũ/õßŨx:Õn¯ßN<5^Å'í…ŌsOéöšIŅßôīũĨ˙߯ĢdwDĸ›NœXˆ3ŲDT'M_mĻ ÆO ĒéŦˆ9Ņû{Ŧ¨Ī ų*ĩÉ{ ŋ¯ãŽļ‚ü6ĩŌâ#.Á Aí‹ Įkapžg˙^xžORWö>ŋâ˙č˙Úzyyv‚%ÄDA„"!”9PĒûēL&Åí6Ķâ UU°÷×Ŋß˙ģûąēPcũj"\ˆ;ļĄ¤Ã iĻÚûę˜áu×áw˙ßũ¤ęÛÕ6ȏ*ØiĻžŦ&œXM°˜Ní'¯|˙ļhŋë˙öëûØ?ôœD0ƒí!LqZ¯ŪĪūŋŋčŽ=×˙Ň.%ũ%°¤DX"tQė„wpÂqØ^öÕu[ŗ˙˙ūܘ×WKūU ĄÁ<&›b“ûNÕĩÛ3˙ëøOĨ$đŋúî—u~"",š‚a4Á×UĶpŌl/Úļ~9ßæëõ/z#Œmč"?ąXˆˆ`ƒ ‘bÔ6šˆpk *Úé˙ú_˙蕸JŊrw˙ũˆˆĸ}TÕÆĐN4ՆTûø>ę‚đoà ÄHhé5^ņLRlvOkũuõôšÁre¤W˙Įkn AÄC ŠĢi0œSĻŋëßÖԃás.xˆˆˆdpši6˜°˜O[OVüĶZøĐ/īŪŊâ’ÄI‚a;[m5„L,ZÛĨ~gÚ¤­[ū!Ą|4íHGŨŌ &ąĶl-¯éčĪ­úä]^žŧDIđgt &šģAÅŦ0°Õ† wæŪ–"DІ0˜AĒ}4ąlSa[ ¯Ųøä–ŊđLT•\&͌DDDZ}‘iąQLSÅ÷¯ŽąŪˇiŽ!ÅÚļŠëúûZŒPˆ°ƒNTnڃ X ˙Ą Ÿ§{bŖģ ûîiÖNŧ0„DU ė„ÅižYšB"O;" „MlC § Õí?WBæLã§{2ûQ" †…‚Ķ Ø°›ØavÕqEÃO|Sˆ‰#y;ÅTUæD„YŖRXÖ8ˆ†H{NĐL&vi)ŲŽšŅ^hû hD4Đjí;8Ĩ­„QÂ$:ÃõEsĸ:m"-9.›2ÜÍĒĮ&ä…Đęút+–åē’Ą´[„Įéņ†d(ŗąuo’ÁGOåf*íp@đÛå ą˙ēŠØ°1ރ63„pŒ&ÍKÜ9”@Ę2ä@–žßiõĸcˇ¸ŗP.hœ‰îįe˛aYâ8AxR€@ˇ×DŸ’H™ƒn¯H6˙ψ^!0¯&Yũ7žĶ‹AŦ…™yšŋüˆ=4!…":ũ'páÛMSB §ãŌ曝ŠčžQwmõ[N Á!("“=Ū#É÷ČÉuõūČíĸyD≾Ķ@Âg‚ë÷Ũ2ĸß 2ęëwä­zMé]hž4Nķ]SM ™N şŲ&—HjŸß'IĨ˙ëēÛßOļČ;“™w„ͧ0@ė¸Ę †JģNĮoŠWõŊi{jčžQ;hœ5NīĐ34äPa=$ˇĮÕß˙§x@œ‰0oÚ[];ĩRqmwĻC0†U™OŽ,'zŌ¨˙J÷ī}é—iŌnNčž[ļĩĶ0ˆ[KŒ†ęŋöē÷˙÷aČ_ûÉBíū’wIôN~š„âgŒÍ'ˆ_˙ûúŋuˇũēm'Ũ‘æJûHģēwva¤įĖūAÄO¯ņQ˙ũtŽũn‡‡MĒöÉ:̤›Dņė$NœC†ƒ.@ōäR4Gūūē˙C °cõ¯NũtīXmŅ(ē.4š¤ƒDr> ņ=īë˙Dĸoųzø¯îˇ ’mē.íÜZ!0Ķ8dÆl˛„x˙Ép":˙˙c`õīö›ī÷zۃ˛EÉÛDâ–øM0™v?—=5˙×Tœ6˙až”0Ÿ÷WOĨŊj ŠíĻļ­4#ōÁŸ2AĨāũ}ßô°ī˙]Ŗũn”]oģīAÕĻĸNßŧbâ3KˆhÍ™Ã˛; }Ĩ¯č,æø˙Ží:ގøŽŌzxOĶ.ėĸã~ƒA‚`>fĪ[úāŽ?ų27ģĨúûũōijĄõ˙O°Nōvŋ´ĶCAÄ3恑D&÷J×oÕ0ę“ī_¯ŪĄ}nļúz‘ŪÛEŨˇM4ЇŽúûf˙ü(N Åú÷î“~¸:ˇíŌÛt ŸˇDĮĸC¸ģNˍ<0DY…ąL_iwö˙¤šŧ"Žō áW˙ņ×û÷ũ>ŨäâéŨ§ m/×õ~÷K9‡¯˙Do˙žüxüŽ$ˆOzKôãČâđĐAļīvĶ‹öĄ„kÚ_ę™ķ‘_'VHŨw˙ûé}vÕöŨ,<ˇbqĻ­…m~ŌŌŗEø:ūú úŨŌ ũ>Ø4žū˙á7ī¸dpEŒ–7d§Dá߆"ö"ÖŌÕ×âŨëëuū¯úí?ū÷´˙ēM˛,=*M8Ļ.7īuûyz´ŸžŽą‚<ē iúĨkîö˙ §ŨÚt› Š?Ä3ë„ÅGuķĒw4˙ęų1ܞŸ˙Ō˙ŋŲ›é˙a ŽĶUÛMĩiX];āūëUU˙Á˙E?DWŋwŋŌđÅĨëĢ}éčFMÂdvMÕaŒ'­UĒļg˙ôß˙ėGūßïVMø`„ž“p@Ķ(pA§Ļĸ˜¨†šČ?Ru×î—jÃ˙gœPXm/NĢ´ŋä 8_˙ūÚˊ—ˆ‰öH&6Ą…öÂúūé+æ‹˙äA××~ßøëøˆ‘ˆ3`M0Ļ5ąWi1v¯öūfĩÚYĖņ$“8ävU1˙°ãĒ˙õë â2vTÔSME›i_°ÛOW¯kķ‹ßÛ˙ūŧDDD0šd#ǰĶÛj×í§Ûëøuë„={í¯ô˙ī˙â"Ķ^û§ikö­˙ôūžņôQ˙˙ÔD2Ķ‚Úa7á4 S†NûūŪ•ÚôøtF˙˙˙ņú &ÚMŠb“AąÅÚ˙_~ĄßL××īąOâtŲ'L‹xOņ ØĶ´ŖÕ=WÜĶäk?Î Ü ˙z˙¯™xOXM;Hm6ÚIĢŋ¯ī§‡ëũ|'N" Á ›ĄR´œmD; ĢĩkĻtÕ}0tŋ¯˙מėDCLŠöąI„kߎ÷˙˙ĨŽ"ĻŖ žŠ¸¨ël/ ķ~Ŋžŋßį5÷˙ ˆˆ†džÕũ&ńīĩŋ]ŗūõ_~Ej>6™-/Å&Ãģũŋû˙×ÚÆÄD0AϚ{‘§}¤ļŊū-‚(uÚB Â`‰ÉϚi;Á4ôëĨßú˙B"âÂvßn*4ØĨt“S͈­ DDD4ũZa0œ0ą 5ģ^>Ō˙Î\Ĩe8LŠ>Š7N4ĶÚ ĐŠ‹ŊņLXA„â: ļž¸ˆˆ0„ųBv†h;VÉ[H”â"'ɑ`œ]š‡ ĻÅOÄdƓ §čZjœDD0FˆŽ„4ĘBv§™ ¯„uZiĒ\ÉSěVL(ˆŒ5Ķɸ-lW^UZ§ĩ^žv h2oĒÜ0Wŋß{öäkrˇc=ZrlJ]ę8jÎÉqĮ&ÃäŽ]ūė‚­5ĶļÆõWO;5Z÷ģķ;×tĶ;NË() ÍK­Į\œĖę?ÕCĀ2ä2å˜2čЉMgvŒ‘EģĢBÉr]ŊSė Ér8F„tf´ģˇ÷{˙¯zT°û~ŋ÷dcØ$NŨtâîІĐ3B˙+ú֟īĶ˙Q˙ŨûIé„Ià ‘“†‰Û}>Ņ 0f€å[!ĸ?´ųÍ˙ÉÔ˙˙ôđ➠‹ Ú~š¤¨P¤îÛęĐdlfļ~§¨ēˇõūī˙×ß­=­zˇ%/v™;ÉĮĶMBIP¯0C‰ÆÁ˙äááũr×÷ÚÆÃ`˙˙ CÖû͞8˛gˇ&ü&ƒ8 gˆņf‚"„Æ˙˙æ˙K˙˙˙âú˙a=Õ¤Ũē'M0@ÂažDDˇ˙Ûđ~ų2Ķs ­ß˙†?ÛģūÜ2;¤&JdnĶbíp„˜g]ÕoŽ—^û×íõ×ß Cí>Ũ?n&ŅQ7jÅĒ3Đ!Қwëũæro˙˙ƈâÛūžŋĨí?ÂŊŪh”;vôLwI§ÂxM=Vß˙ī_7˙_÷ë¨āŋē_õté<ž7DŪžšf`ƒ!™ŽMX˙mĩˇ˙4KēŊ NŋUõ˙u§˙úëzÃ%dypũl' íŧ0… ĶU×ëKīß­pŠÍOŋûĨ¸Oá´ēOû˛1ô^yî\b,gˆ e\h$U 4͆mm~úõ9Ÿ0GĪ˙ĸYũnö?úõ´­nšßûi Û%HD‡tījšiĮēˇnŽ}kēū¯¤˙ÉŋīĻ?ƒûúëĻŠÕŊm'tаTÚ{M8lqę¸_zv̰øĐ]~ęĢ˙˙ūŋ˙˙ĩ#‡AüC)ˋÚi´m&[ļO˙ßõīúđˆãÖžĮĢNßŌ÷ •‘aĸvÛĩ;™°MuMPA ĐliöŋĻ˙˙¯‚8ū%Ž)ģ˙ûKøëú˙_§IˇÄDA§}8¨¸¸¨Ķm+]zW˙ūĮ…öÖŧXęE…˙{Ķ éŲ.‹Čˆˆˆa2‡ûI‚ ŠiĢ Ūßë¯ß˙N4ŋû _ŋçĶ÷â ÁpĶmģĒĢjˇëš/Ōë’Īõ˙Á¸%üöļÂm÷$ƒ ĻĩėCŠŊ?ī×÷§¯üâ÷Š˙úīø˙˙ĐdŨ4ÂmŠ4C &šîÚ~æž•j$ÂíąĒÕīâ"!œá?ÅÂaƒPƒ‹O[Zëũ}PX"‡ėM}kũZˆˆ2‡)8LžZba ĩ°–ļēũ~r<]¯%~Ķö÷×Ãq ŸUwĒią7÷Ķ˙ūH[ î×Ņ+]§ˆˆ‰: Ļģ „ØÂ 6[NŊ?ŨßŌč:#„ũũ!˙ˆ’2&6ļļ™{M„šĢû˙Đ-~ŋôá”zĻą Âiûj͊‹tím=ķOđEģW4ɧ˙ūňˆˆ†3biŠø†ĢaUyrÆ˛Įiŋ׎q|Œr‡ ÄDˆ`Âi¯iÚ Å°Öé°­Ģa ęÃĨø#Ûû˙ąi„Ķą 8Âh4âWļ˙]īáŪ" Á AĻDÛq ,0•…Õm7¯|ęJŽŽ#ĩ"Ų7ĢVšwļ•…ŋ´ũtXėĪ×õÄD2‡-4ČAĶÅ1L[Į ?}5ŗ97ũ˙ ˆq ã Ķ_ļĶÆ*ÅĢkiZ˙ļgøˆˆ3Ņ2VŠĻØLC l.ëŋųĸüæx„DDD3ũϚAĻ›aØĻ-Žžĩˆˆš@ Aà žÄDë‹MģN(lb#o™Sr—ˆe(CĻļ˛2i§ė‰î™Ųr>n­ }Ŋ¨‡˛šrÉ_˙픯pƒ)ŗOÕvˆÔ3ŧ Ņ‘ ´Ø^v/%¨˙ŧSMĻÎįš’~v`$kųũtˈa=ß{a4B“ ס ~­SŽvWí î‡ –Įøîå”LRfH–‡w$ŠĶ+%^ÉeģW &FŖHÃõpáĘäØA âķˆüēa[5ūŌģŨ}i[&6´Á0B gŗ‘;5/÷ Ļ´Đv ņGdƒ%YŽÉ¨ø|ė°\ޝî›äÎFė"VÛ¸aA„8!ČĢ—û“Ę$îÜ-Zqh0™āÂ6YŪöøtīëúĐAęŨø°š Í‘ ĸ A^a_‡îšۗmØH“¸ĶģPA„Q*ī¯_˙˙ģ"ģ œé¯iŲq„ !ÕëIč6ęīH'dWhœ;iSŧ"'˛s$:'/ŧ›ģ¯uūŊöī/%´ũ;Ɂ˜3č‘/‘ŊūĢęßĻÚdwIļE†ÉĖŨDĩ§ 0…„Ⴀö`—ôĒŋ÷ŋõ÷äoWIŨäŪ)Ņ8wÜD| ųŸnN~Ž ĩ^Ŋ×ĶOģAũĐM°´Ni'„-Ŋ0ÍWîv ĢõÖžĐŊ.Š…Ũ{I=tÛ"ũÂjP†E™Ąš—Įö¯¯×]ooģ]6Ú%NīmÚÁDßãw˙˙ūũĐ×ģ˙ēģ>ĶNÛŠH0˜L S1šĖjĩüv”uéßđŪ›ôļE ž‘ÛvęĶ B„qŠÆ´°ˆëũüâĒĒ˙˙ûßū¯wŠlĐv:`› (ĢūĖ˙ķÉģõ˙ëôū˙ú .žŨ0ƒr8"Äá‘]ŽCLđĻÉU[Uę—Î E]×úß˙õúîŋĻžĄ:ģU@蓷zh4"`ΤaãīŪâž+õŋ×˙˙6ŋũŊkõĒĮé¤ēޚt Ú%–ģq}•—#Ņ:#Ĩm=uÜÎŦĶ˙õBΚë÷ūŸëū†ĒëB¯Ģīuŧ&ØRqwDŪ‚ īÍĒp˜MƒŊ~¯u˙ŋ˙ˆ¯˙ž=­ŋ˙[§Ē`’mˇk†„$ø”Â7+‹cOí'mlĪūŨ÷˙¯D¯ûûü[ÚUû÷ĢŌNá>īqpą Ļ­6(*§ē_Ģg×īūČŖ˙˙¯ūš˙÷×dvE‹M;éÅĄhŌ„Ml*i§¯čÃßôŋŋAz˙÷˙ŋáרmvôûî6N—oÄXA„íC5ŽÖļ„í~žˇé˙˙˙ũ¸ëīĢi§öši‡û"=ĢĶi¨¤íX¯mmm%a$˙§_˙¯%Ŗ iīŨÖB$O¯˙AŨŨ‘`Ž÷ˆˆaolˆ8lSĮÚúuVŋ˙%eūūŋ×ĢÕ[i}BļŅw`„0ƒ Ŧ4Ú°Š¸A‚)†­¯Ž—˙ųĪņ- _ôŋēŋ˙õ¯öŋ‰Gæ˜NĶģN›¤]§õWëĄëõ¯×˙ëßĨvFü;DDX! *wkøĻ) [I[[__úŪ’õcÔ+t߯î!?]ęŋÂwj“bĄ„Â}=vļž˙V˙ōU˙­ēīĢϏˆˆ†iĻã„ŌlSqq }}4]^‰^0Ūŋų˜˙ÄC'`šiÃ] ũĩa…ÛUŗ9°GzŌ¯ôģ×˙ëkûŒ7ÄDDB ša5ˇa0ši­…ŋVĖ˙÷ôÃ~ôūŸúõøˆˆ°žki¨¨†/ĩĩž˙˙˙Ą˙īO¤¯ÁŽ" ˜&™{"BŊšqAU†]ũhü˙ލ”˙üDZŨ§M´ $Úļ—˙ļgŋ¯˙kiū“ˆˆ0B éʘM{ÃMŠa‚VŸ´Ú×á˙ŋĐOú˙øˆ†#{ēlS¯­ÚĒßŖ˙Š-vņ=…í1ń×ÖĶ{ī˙úüâ}Ä!Éļš ša M[ {§×¯ģ"¸˙|DOė&›MLC‹Ģ§I]uKõOßüDD0šjîá§ ĮĢik}WāŠĮˆ†#ÄūîÔ0ļĢkk„˙­ņÂt&E8jíļ=.ößė8„DFøĻ)68‡ /m­¯õˆˆ‰ä,&šn˜ĶMz˙ˇÕC7 ŋI3ēa[ļÄ0šĮiĒ÷ˆˆ†]‚i„š§í6—ŋ–e*ÄA‚e8":w‹ ĶÕ0Ÿˆˆ`ŸéŽ×Mu†§gÔDE—ËÃĖ‹ßiˆiϏˆŸž˜ œ4ŖŠA¤4""&iĻFäŸíãBí\uQV""" ō,FBĢ-͌ŗj!„Âa4eƒĒÆõ˛ &‰­ jļné‘e"äɝŠ´šŪ4ÔîŦSĻ |Ņ-}„ Ą‡‰ÛĢĩ¸w;B[… ø Ī™ŗÆÚ;­’ÄžwŦ=”nęv ĮAŔ g3ÍÔm4Â;´î2‚wDáÚhCAžà Fēūwuī; ͞!Ą};"î.ႠĶ8gUŽÖé“p2.3†C#Ŗũ{íĐgx3„Uš™ zļ‰ÃoĶX!Ēîw Üėhĸ 0O.D1‘’˙č›ßģ‡ûi;%dw 4‰íJrD(‚Ofąܕl+; Ŗ  âAŸ0ƒ>dã45×ęˇÃO÷ũtŪīÕļŠā„BŒ. hc‡öĶÛ"ģ’vēhZh4B$%ü‹0yŊuÔ5îáĖ€Âž öą~ĢUŊ{%”J!Ø":í` Ér.—Ú|˜‰ĻĐd˛‚m‡hŨĶN, ĐqP)ķ6œKxãvTx˙Į÷uWV“ģBč¸ÚxBĖ¡ŧ–vŲļŅ8ŖwDžöša8qHŽ4úéÜėé­?Jŋ÷W]éũđáŅ;oö„D3Ä\ˆã4r)ō1Ö˙ßNĒëŽēÚvļ÷xAš(˜î> đ.ˆ\—"AŌ˙Ô0‚ēy:ŸõŪāĩ˙Oŧ–=ļLŗnÜE…3ƒ œ<ģ)Ōúõ-˙Ū­W˙ĨŪČŪ¸jGm îČčĶž-ˆYƒ*'ßU¯\‹ĘēÖ*õ˙ļĢJü8woøĩ@â@ūŌ˙Į‡ _ÕĩM?ĶĶlíH¯“ģ";ė&Ą0ƒ@äåZWÕ÷÷ø!ũē_ų'ū˙dČōČ;Ņy}^Đh<¨":$J¸Ķ˙ûĮūƒQ×­wk‚n„ė™ōņ͔IÚu`ƒD!r:G×Į{3˙ûŽĢūÃũømo% Ģdĸû‡ ‹^&Ģá`Ÿ38 eĪ]Z¯ëOū…ŊÂũ÷CīŨ;Éc]'ĻŅ;a̰¨4ИK#™ ‘´ĢׯæŸí Ÿßūéëä$ū5ė/ø^Â`´NÛZϘAĄl‚xe#ņëDƒ{…˙ēcúC˙˙÷ĻīIéØ[ˈTëN, Ī‘ƒDđdį[jà {kß÷ũ~Ũ˙L?­čxoîŋ'ĪÁrpŅ'mëp`” N˙īäķūÛ¯ũ=múסũžK¤MÚ'͆ƒ‹N ņ3/]Š ›k~Ņí.ŋėÚÁ˙û˙ũ“×˙Ŋũ:M´čôôĐĐh†FrJ?˙Ĩ˙ƒĒ%~ŋũūžäIí/­ũ'H7ōķ#vž§Ÿ”!™ŌŨ¤MŠ Ģ„õ˙ôķ˜ûzūū˙z˙_ÚĻ÷„ŲBN×Âa0ƒ˙4Û?ë_~CÁēA{ōʧõ˙ë`Ņ?ũûī÷„蕡Dņ°H“žX÷ āŅ āĖã‡x0AÛ¤ >Øi§ēĒaē]poëëŋ˙­í×õaHíĩ:%wd‡iĻ™r.GÆkŒëöÂVŋöf”;Ĩįėē˙ĸ+¯˙î?˙ƒëūéēvF?v Øtė%j]ėŅnŋ _ûÁä‰˙ö?á°_ī_ējß­éŅÅXMv;ÄD„ųˇo舃(t¯M!īĄ<ķ#žŊĄp™. %°Âvá¯ėRŋpČŽŪŊØFeû˙˙_dsûū!š}›3â‘Ėƒ—ĶûM `ˆJdÃ$?¯í=SBšŽ:ĻtŸ'ŽNī'ÂéĪ šŊéļFô˜Hž6û0"8ŧz×kŲŅ+ÅIÃnīīē~Ķé;†Gē`Š׎év•˛NЎ#¯ˆŽ›W˙“›újž?“õļ¯×県0Ģ˙Ŋ}Ɏ‡ŠDWũo_úÚ‚Ŋ~˙õ§4Z$az˙ŋ˙Úá^ģ˙õßö“ VCƒ¯ēéZūŧSpíkõÖĖá5ÛM0Iĩ[ĪAqšîB=4Ø`…6ŠĒŨb ČŪM4íSšh>ņEŌ""vƒ ƒ• Ok˙ˆˆ†´Ô/ÄDJģO–ēXÚĮĮ /ĸËp¤$uˆå°]–Ā‚!vĻą’ "4„šag\z%5­MÎЎĘ|Ž´›DâuAĶ;}=i隝ŠŪˇĩõĻŦíSõrg’x;-:4›×öÂGЁÚņ}ũ}v$Ĩ_—΋Ė ÉIšŽŊŽRôK/™Ĩŋ;Ŧ8D>ÆÉ´‹za4ˑŅĒÕ* Ãļ7ú[+d)åÛNîX&AŗO’‡zO“§ŗŗQōNE„ô?dqDņĸí°ĄZa`ƒA‚ `ÂyäúO­p×͆ŸėėšĶúļ ‹ļöšjš!ņ‘Æffq˛!™¸úUßķĩ/qÅZ'#Ļí=d ‚eQũ7MĶ×#ē†ŲØtN.ßņi„,!aG($MŖVĢë{š\ĩn! Ė8pšß[U×_á][ĸî"ęûM ˆ0@Í$›Õ×ĮPƒģ‡ŅÃuĢW_ød}{ë˙ë í2g"ŧ;ĸqEÄ' 8H>‰ËOüŽŊ=ūÂ ģ˜Mfü›¯ëâ?ú×ĢéÕģ}á7˛YI…Aš8z}ęāƒĐdäC=W]Ņ.aš8ĩÕéŌ´ĶŠgdß˙˙ņûõđëë}ē…Ŋ‘ÛDŖģ⟠ƒD0#–?ŋVíŨ/lŽ&A%Qũ4Ũ~HrĄ˙ÖŖ…Ÿß¯{ūA°îÉĸwđ˜NÂeÅ0@ˆˆ"'y¯Ļīz°ĄßZi.žëčG÷úõöūŋū_Ŋví{{%BNîŨÜ Ķ@âIj aū¯{kˆ:z5#H'¯_ē˙ú&˙ŋūŊ)^ĩ˙­öN‰ÆGšåŨ°š!xC$ †e>Ūĩß ƒˇ@˜M5#‘ŖĒ:Úí7_š'¯7˙˙'e˙ūûc¯ŋîŋízwõn‚nMÃ[ ‚ ņ_ļŪ×C¤šw šŠB“)Kô9‘Ÿa/mu˙ūū„í˙ūá[÷úũ××§§~ˇWaIE'EŪĶM w­ã~Č흨@ĐgL&z8ÎļšŠ•6J­Ōë̚%÷3WƒįqņAĩú˙Ø˙öžîŸmôƒĶxy+hž4NíׯĶRņmjöC34Õ0š‘Ėĸ×mŠM6)†Šą­Ú˙wšvU_ūÔK:ßûš—ņiŋ´õ­ūõĶa˙ow¨"@ßy'UĻ ŠÅžÔ:>)› •­]ŠN“ Á‚ūØV×ũ˙ũPÃ×õ˙Ļ˙íRcƒŪū۟mnJ˙áßö˜ÅTFđ–Ą~ĶMT Đf Ü|ÉķņBÜufØL'{ļ( Âk $ƒXõ˙āļŌīŋ\âęO?]ozÃūYũWņéoõŠ8Ԋ=ûčÛZĻĶM4, Âa šã;×"¨DDA‚i„î×aĶƚ­Ŧ…›­zzũ[TžÁCüF­ëÅ0uÅák˙zū’oۃ¯ p˜+DcũV0šPƒ ‘ÆlJxĄ&˜‹" ÖĶ´ĶT0˜NĐ;ôíuĩ˙¯­ūEt‰\7žˇüyZ}ĩßöF÷īARȏI Á/U­&ˆĮē§Ąe8Õ0HaĖŪzDDD0A„HM?xM¸ØģJęĶĩm/íyĸŋ­œÃér@_ĨĮ[KZnĒV‰VĢĒU^F8„ņ%Ô*kĻL690Žb" ŅĻ &ŠîŽ)‹°•¯í§ŸũÚüÍįĐEcų(갃m-ĶõŌ‚ę+­WäXąBÉÁ ¯Ņ(APÕ4Đ´ĶÕ'øˆŅD{œtÉÂdpЧĒéÂT…ËŲÎîČúépė"‡ē@ŠĒ]}%_ĒĶL5tA„øa“ A„ûXˆˆ°ƒ! 5"8UUÅzQlyw!`]jŠĮˇÄ4ĩ]õĨé֒úöŠ$‚ˆˆˆ`…ŋa L”'i­‘GīĄˇĶõĄzZHißפ¨W ›øM|Q‘*ņša UMBiäA˙Ú_! ¸éĐ~´’zë$BĩTZTƒ_ÂØBÕU4íqT—Ôm—V’÷TƒĒWø*KAfBƒ!ŋÅ!Âi„ĶPŠĒ¨UZÄ=t•k°E>žpĢáfšiūĸ"Âa4,!jšĒdqؤžŌT/7+Z—Ázy¨ˆˆ°A“ÄČŨ5LŠ8MS]E{kö…Å ~*vSĸofEeų”*Á…‚a0„õIHƒĒé.DZÕ˙OöS†ĮđLDDA„Á°Š‚Ēk§§­Ëßĩ´öžŠŒ(L&5 Ēēã2šUGiŨõęZBĶĶMS¸ g…0fbŸÂ ‡¯‹a’ų_C& ˇÚQÁ ĄĒi>Lh gˆÁgFFi˙AĶ@ËÅA5}ĸŨЈˆa4‰;zŋN,  đÂ2 –ëvÂvkę+•ë@˜¨6ô‰;v.Z.Đa!Č$beH~áŅ+ŋiߕČŌwJˇ`•°čœ[tûAœÂ@`ŒúÛnŽÕ O_b’iŨ'‘ŲŌnD‹$ “ĩ3æ`ĪŒÍ“Ģŧ÷n–í…u­ē}×˙ĩMÖNŌ ÃČŨĸwvÕ4ĶAĻpgŒ aZÔ?ēĻ>DD+DoŖ)—[_ŪúßôŨPol;"Ŋ´‰ŨwčZ^'ÅEÅ*5ŗĸ.žŸūü$8gT{3AO$ȕžū™“!Ÿë˙˙˙^ŋޚJūüŧ´ÉŊ´âÂgt#ßģUđŠ…ĐeÁ„Īȇií­]­Sé?䜠˙˙˙Į÷Ķ­÷ĩīĢoA‘ÛdWrņ÷aTMŧÃûPŗâ'i‚„ ÍŗdņO…īšíAE‡^N¯˙ë˙†?˙ëëęĻG ŽčÛđ›×Ė<œB„pĘyy8Jąšv ˜MĶSŊ*i¯Ģ3“üĪF‡{Ģ˙˙˙˙ÚŽŋ˙ÉßŪĢϟzom‘ÅŽŸíŽ`ƒ Ÿ$Ī+ih†ĮiĒvSl3Fža§zB¯´ķ¨§ŲŲĢm5{=ũŪ˙ųÅ˙˛u~)kÚ˙÷L-¯˙Ģ˙A´ž‘+õŦ\_d‘×ĨĶĨ ]ë…ģAŠÆœC*į­bÖī}‚ äœRÛkéfųĸūŪŋ˙¤O?˙¯ņõîĩ×õôß÷ŧž6ÛŨ ŅĢ!`'W Ķ„ÂzŲAÔá"'Í/;ĮA0ˇÛŊÂÃb“°ĒĒÚū—˙ëÂI÷×_÷ÛKúØ×a‚×Ŋ“…]}×öJÛ"ÃJĶ­R¯H0‘\ˆ:Ø$Ą7ĒnĄS Ē Â}œ>ޞgdtÖŌõĐa_„ö)4îÕVÖ×´ŗ;ôI%}߯K‚ú˙_cøīëĨßxOŧŲ´’˙ ZZ´ôš°ą iĻIN0™öxgŗMS^†˜Uģ0œ4ė'AĻb‚ 6)´–éĩ˙˙ũ˙čX¯ũŋ˙ũ°ž|û÷Zv´Ŋˊũ%‚¨“UT˛ dWéS{ŦĒžš…L&ƒL"+“˛āá˜žĢ ‚„D0…„M4í~Å&˜+ŸČ Š÷MĻŊ¯˙ú ü/׆IĮáą[‘Ä˙ģˇũP*ęēKŌI%VŅé/KÚM4–=T!‚hYčëįå¯%? ąh°šjØĻ‚a0ƒ‡ޏ^˙m¯ūč–z÷Ļŋū:ûC‡CņZ$:OI*T ŊiéãĨVC;Ų0H•ū“ĩ´Õpšay†hzĻ––"!„ƒ x Ļī¸aÃJ-U°ŸŸŋû_ë^ëäĩú˙ũpbdWzœKiuÄKɏدTDlŠ:ÚëŠÖĒŖģĩ …Mh5ĪgõŌI!4  °Mlˆûb›AĻńÛWŋũ?˙ûëÁ…ĩ„Dūœńõ¯J ĩJŋ^¸P’Š!ČQë^“[zĄžč&gÚfdP‚ለŒ•ļ4Âi‘ŋÛ8ĒTÕW_×Ŋ]Ņ.˙íׯ":ũ?ŧęŋZjĢǝi/ ?!¯5˙ĒŌ¨M0š`†…3<„ZDDB īmiĻiĢ˙OÛģÛ3˙ú_^cˇöAņ&ôŌLģJ І§Ą}kTē­A*K"ŋjAĄüœ=_dûŽ†ŽĄh&™ÃČa+e5_ÚxL âÕ[ Úëö×ūú¸EGŲ( ĒkŽ-xîŌéWZĨßá-r bn”[éé4IũjĐM*PĄ0ˆFdPækĄł#ώdGÚą 8ļÁXk§ūŋõiž/jƒIHŨT„ČŽ+Õ8i uï_úK ÕWūá‘ŊdXë!_Ō$ôIę¨Z…A„ vHDDú aƒR$~ØcŠ ĻĶĐzözü=â,0ši„­ã¤D„DF ´š¤ž’zÕ+ ’ Õ=RUUImm Ŋ×ęŠĻ ą•âÄDDX! &J†­PmXN×M^õÆO@„XBa4ǐ`|S ƒÎØãßš M~ŋZOM>é5ĸyĩ͏°™ķ6ΌŠítJķ ĩéŧ–] A¯h.žÃû¯kĮúø&ö öEŒÚv­4Âh2!ķ02@ČŦn4Cøč<gF}¨_5ŽNŖ”=Û2 PÂDq˙ŋ×Įkēų'ī_ÛN“íTŒv‰ÃbĶM L „'E=ųZâ•Bdē#´Ž™ÚéÕ„5˛-ÔP_ø­ŠÖžē˙×WīŊ¤ÛĸvŅ8m„ĶL3„eĸíGôĶtA„á‘ãI$Õ¯Ø@ī_ø#ģ×äĮ˙~yWû…§¯ŌĢ­‘Ū›y;h›ĶâÂa QÆ|RžûÕ5Pēi§3Š…\wöš˙üņ(#ŋtŊ˙ũ×Û]×´ũÖ餭]’Æ–dĮRxÃˇ,r‡Ļa0ƒ<>dã\/¤øKÂnš§›4ĖŲĸ3E:\|X_ĢՇû_ôŋë˙´ĩũßĒ˙Û§ĢŦ~Ų+i ĸQcNhre§|šĩ$žOÂa0Š Â  „GÍũė'uĒŋ˙Ũ}âŋˆß˙Úüu`Ž?ũ_÷}÷ĻîN/Ŧ4Î מ‚ĩ'Äo¤5]ÂhXMyA:ûŨ7é?tŲī˙˙úĐOūÚ˙ņuÚû_Oûĩ†ŲØtI÷Ûõ×i*͏ĨĶ×ėsŅ9#4fVV8`›Žžëūžuūą3Ōū’[øũ˛8ŸÁĩĢ$úá;ĐyŨĻžĄ$Ú$˙IjDuģĻ˙vA„Ė ! Ҙ3†CDFĨNdy؅L[i1§w_¯ōĶ˙_âžNĢ$:˙îŖ¯`ÅÕ!ö›ééļÛ`ŋKēĒoz­Đũšz#zq…ģ ĄÁ3dq]DdĮ Ēi¸Ļ“ ļŠßa}4×ģô˙ô/_MĒ˙ Ũ^¯zŌYÄôŊ˙IUUT*¸KwĄMZĻ…ä`ÉÆæƒ$: 5vÅ&a0†Yž×[Sû˙˙ü˜°Ņ˙ÛđĮū˙U˙ 7IvŌúĨú¨Uŋ#zō˙ĩUMäøšž ų3–ŦŖeXˆˆ†´Â˙M6q {TęĩÍ˙õ?íŽëŋô¸mĄīĒ­HqÖëČá.ŧ']ZIôī 0†aSŠką5d4PƒU§iØA Ø†›ŋļķ>×ôD:˙UŅkß˙¯Âöb‡PhõIT‹š^ĒĢ˙Ņ?L”dX#ŒąûØOM0Ą|#lÍ"čŅnȐĩwđžÃKm^ĩsE/_uŲķ…čž¯ôÂÆ…ÅúØ#Ž ˆúT´•u­zė ęÚTõOAļGNIČ˙NÂĻ>ˆ3Ė Ę2‡A’M&Š ąē§ØTBŌŊö/K×ũoũ7… P2? A§ęĢIáūžžŠũ f‚~Ķ—ûA8ˆˆˆ‹¸ŊŊ°ĸ“ ąÁÚ~ŋũÚ˙~ö֔UAĶNĒ˙ôōA#Lę+ZĄCß#qԕŋ÷>ˆčTĶ^Ô8°Tîëëû˙Žqb &™'LƒŪ"Ių )&—˙äĩ[oá÷vƒ(v8nE†M’/ĄÂƒģ ؆48†ļļ—­×÷ˆi‚jFáHŖĻ†7ĮjĢ˙˙íö˙ņēvą†$"" $ŲÉÅ֝8¸aVûúâ! Ęt!„ÂĻE}o֕jõרWų!Î9WõŠŨ­Ķą <(xˆŸ@ė&D}ÜRl]ĨamqÂ Ē &B¸‘!G Œ$ģlÅŲÉ˙ī_HEúųā›¯Ú¤…ÄE„Ų>“n8¸ŦD\0˜A…!ˆL Õ4đĶ Æ›ak_Ķõûų=­;”mk5&8M<+k3â  §kÂ} âū×ũt˙×m÷Äm!DHExˆ‹!kŪÃJĶ‚jš}§ę§ ōûė=ÖŦ„ˆg" ’fÂi§ęĐv„E„ÂÁpNDēų>úÖÅPŽ4",&U„W~C@âŅ㍎âö{ûjüDYd]ϤGMaĻ‹ˆÜ(O-EOĄHA‚ak5’ģOÕÔWäÜhT„DDMlŽ# „Ô† M?H(ˆ0…‚dc‚Âi‚Œŗ_# ÁfFĢĄ  Á™(Xįk@”ĸ!”8LĒZû,ęĢM¤„DKuŸĖ‚ ,&eGYh`ƒ$SĘĘpLėaŽĢdZ†<@™ŒáŸ#—ŨĻS…Â"˙0™PeQ†ĸnâ#;@͑3ã6gŅČԍI}{ې{}JCA‹"ģÁŲ īđƒ¸`„  ˆN9ĘP¯éÜ5ÂUęī]„­Ũļîԛž­˜A‚p|h9m-<-pÖīØ&CōP™'¤îô“‡ĻEv‰;—âÂLˆ3f|ŠžO›úMúĒuoģ[]ë¤ßT›A;î‰ÅĶB 0@Ī™ŗ><ÃúčNÅ˙įŖĩŖöÁqĄ¯ëا´Ÿw ˛1é6ÉLˇMSNÔ&„25ž3ÎüČ+ōd„`ÍLĢé.‘(MjTåøë÷×Ú§îŨú}ÚĻŨĮ6Q;hģqiØB đĻČę3†rRG˙„B™˛9OŌčĩ2zúŊ§Á„ëēxutãWĢl”RÕéŧ;ÉĮ‹Û°š ø d Ĩ;:˙}&…„,û͑áJ{ūŠŧí9oÛĒgz™ÛŊ4Đ ņ"˛už˛ä~žÖëĩOļš‰ ‹háë g ĖôG×UĮvĖ”*Õ}„ŲĐNÜŧoņiĄB3c6a;M֜”§˛ĒYŠ…iu‘S#šgaJ›IŲũä0:ky1Ũ§v™rƒČã@ķęí¯~´¤,é&vVnûmŊ‘GOAļGm tNŌoOwqP(AœDe}åKwĖŽ9¯TŖ­ųėėŠēņöšięŌ‚Dņ´ím_iØ gˆ ĘôŊß;[4Ķ œe MeB:ßŌúeĖë„É#īü- ĨūûÖõAŲ3‘Å’;DŨÅńjÃ3@¤b"^ē{“ T!Ļtg\ž"ÁazZ ‰âãOLŠ?[Ļ:ūˇZÕŊ×éļ‘Ō ˛;ß]σ<0ƒ"dž˙īT"×4Lƒkz­.÷ú˙ūé}ë÷Úuôũ=mdXĸV÷pšqhH#’ĀÂ.Au˙ Ą=SM0¤čŊ"s3ighˇ˙ß_ũŋžŊĩ† ˙˙ĩĢÖÂnŸzDĄĸwĐ´TBŲ ¸™æ„×VAܖU%TÁRCL&3 Šúįĩ˙ÉdĢu Ÿzúū;Oú˙Ķß˙Ꞝ:'”NęĒjgŒ¸¨ņ‘ō$_č¸@§’…K¨TA ¨Lģ1ĸ?ŸD}W]:põš(v6Mīđž?Ņí/Ō¯˙ŋũ×ũžŲú“îܝåŨĻŨSBÛBÂx‹ŒYz뤇úIPė,E„ÁhXNCœUUÔV°ƒ"2‚!ŋ­˙´ Š“Ė?ë˙éÜ3m¤—đšų(úOO%4čôIÛzŦXCQ„Ė‚–’UôģÉWŅ ØJ͌'p̈́ Ε 'JēA…L ȏŊ˙Ujũ.Å˙˙Į‚ ø`ޏī‹˙ģģtAŲÛ ^Q;méáxé*ŌKĨáQ!ë#ÅĄū#„Á`ŧ7…'(Qd–Č—Jša0˜+QV’Ú{ë~m}œ_üŸ…˙÷uĨZĶÁĩúN•´ė%zvG zxAŪúׄĢĢŌiG"ģ„ŽēĻēĻ „vĪ‡Ļž×PTĶ ĶœZßÁ9ĸ˙_Î$ŧŅ(ūē×ė jëūŸētƒÉãŅ(a„*ŠŌĢŦ*mtž˙!ąōNAģĢU´- [ L+D8§Âjž•Ô”d‡„–šN֕WY FģW˙§˙ú ö˜ŠŌ"í}x?ŋŋø6žžĢ~ÁtƒÖ> ^ŊB$é§ZĒd é“rĮÁF­!„аĸâŅ Á‚"á3‘OÕjōS‡oO`“wO+„DŲ éØ$^7Ũl&Ąį hX˙˛zŽļē"|­ÎÅ AĒWĢx~kĸpŅ'vŸč0ƒ*ÆlfĖĖd7Žģ^ēP…ëõ rdĩš¤ˇzŨŲÔ:MÖNũÛHîÕB "!eau%_ÚúfqÃ Ž“đŸģMBt—÷íĶĨôũ; ÛNéĒ`„2qO™‚@×[ßŅ1á0M<ŽFdgšu]P֒‘´÷¯ü7_w˙vˇvĘ.č¸ÚhCAƒ03fm ķ×~ēq„Đ`‘Č˙…}NŌ%}zųÆdjmŋņ]ÕīĨŋ]Ķ ´NĩÜ\A„Bķ.{úé„â-5Ą]:a=4ģYØä`#7bēë­?¨í‘Å˙īŌŪßvJé6ČŽØNĶqd™ŗf}į*KUdŗi˙T~\ĢŤ…={†p÷˙˙˙c˙ûŊŽûzoØNÂŽ]❰šÁ?s3õj´FõúĩDĖLĄ*Ļ:Uņ÷éûë_Įū "Ū¯}Ū…"ģdtiÅę!pgGr4ĪøÕ˛#ôéģūP‘œĮ<āę¸ČßMUû˙„V?ôE}˙ē¤ĮBí~û_xNԎŧmƝÄZ`™™‚Ņ{ ŠqúĨHUĒa5PšášČäs3GäŋĻĒ˙˙°˙ōûëÕŪ­ąUĮ_ôūīNļČāˆũ†íÅ„Đ˛ŒÛ3Ė”Ö‰÷ÖĢdGˇŠŠiëvŸĻi Âf ĪŗæxĪ=tštĢŌú×Þú˙ōbâw¤ˇūęŋ_^ôÁ>ŽōpîIŨß ˆYôēKŽÚ‘^NS㏰¨ZaBϚš Ķ>ȇũ$“kļļĢoĨg×]ņĸY(×÷˙˙_ÕģLŽė‹X ›oé5'I:JǐM­k%Å]^´Đ‹´Âi„Ķ B_–Å &/ŋí5Ķ÷ũë|j ü_}/ū0ŸōOßJ›i§öK-4čŅ7éi_Z­1Žô!¯ŖåŽ –Õ}S Ēv¤€¤á }ŌJ×h8a[I°—kõæ‰ĒõÁ˙ū&××ütęžũWžîõMÂĒņ”˜ūēÜ:Ŧ‚[叭ęB‘ĀŨ~â͍$p Ėf™÷T•(€˜NąLSN!§Ļ­­?ÛØ{¯ķ‰¨˙×ëũâÛKūÚVģOû}WBĢISĨēĒJ)ŠÖēÃ˛ ”ūMŌ ŅÕ>Má% ˜A„Á>ŗFgâ$IZ™C‚iĢĶ0ƒ °ÂOZwūŽhē×7˙ōVPęŋĒúvÁWôžÜČąaSK/Žŋũ|UŌ ēČāŠ=ņa4‚}G°J¨ŒzZĒké j|Žb" ĘÔ ĐdvŸî+xģJû[_úiķ‹čG¯û¯¯÷éÂČCe_„PëBŸ¯Ë›uđš¯^•) đĢęũy >Q¤č”~Đģi$čYøDDD˜@͆š§Ž% Sĩ}˙Ũ˙„,}~ŋiĢ<="ēĻ*’t=3Ŧ.Ō]kĐUH$ģžŦ5I6Ąj’ŨōOúXéŠ;ďĘŨEvPĒרô2DĶ+ R´ß´AŲąœ2ŦÎ">Dzũd'ļ;˜0?Õ(ĸųŪ‹ČNĨå‡ §NģMfČÉŲy6)äkf¤gúínø3ŊH“"ßëŌ žš´ēá„ęMû˙Ļ…ęĀĀ!dš3Â~ĸŊ;†ī;­úJG3ūnî­īĶˌ[×īIũϚ¤IÛ˙i‚"š 9.!z\‚ģģ%ė= ×ĐÕA‘čüšM4ŋŊ´ëŋŊ%{×ŧ'}§ĩøĩ‹D;‘Ų?(‚Ô鯎îžĶ¸ôĐ9ãLåK*.×J. •}˙ûwJ܍ü ėˆîNÕ4ÉŊĢî@Á2&a5÷Ģđáô5đŠÚ &`fc§M%Ĩ­Øņ­Ō˛:]´ŋĢwĐ[=0ƒOAÃnôč0@á rB÷¤âíũÂŊ$ŋábĐ:†ižÍ;×Qđž˙ūú_CĨ×÷ĶōWdϟDáũÃō.GšÛūũr Ŋm-}0MBh4 Ņ ŋ¤—Z˙ēWt¯Įŋ͝Õ=}$čļiĄ =\Ú'Ī=ôJk"ĮäŊëŌhZ„ÉlĖÆ})ŧÎúS¯Éį÷Kīu_¯_ūŋŨúÛIé’;D‡lzˆ agȸüžÖū‡UŠzC× Ą¨MSM:A„˜Ö—ēIß8–*NĢw˙ũÚũ}ũ}ģRW īņqz‚!< ađŊ ‹í¯KW"š!ü”.í0¨ZmöĄ5\éœČÄG]ގÛŋÔNâŋ˙´ītŌ^ŽēŌm“Â;{Ŋá$í†ĖÂdJ¯ø_ia ×Ō#jT?ZÂfØBO%ĖõZy˙^ŋwuīøîŌ˙˙īI˙kĻŲļE|BNœ*x"†˛z×Õ[­dQ˙͞ ė&Ÿi¯Ąqa3ŲĻOúļŊ|ÎŪĢųpúę&ú×wú˙ß~ūĶ´¤îė›Ŋ5L! !fEĢô’Ž•*Ē]Y'"ē .AĮūˆĮKŽŊ¨A„Á4#ŒÃ7˜DHF.8Ĩv×ß˙á4Å{û[ëū‡_%ēēŨč2WD¯'}wi}'R1ÚnĩĨß×R7î“!œr‡t—@ëUĻąhXA‚`˜TÂn>0ģN¨`’moi{}č™Wķ‰u‘\z˙ŋõī×ŧũõM×NédAčŒxëzH;Šî–+ę’øŠÁ üˆé:]ĸ1˙hDiĻd[ŋnÆë}{˙Úû7õ˙éuũ?˙Mēē[Ķ˙ģ6‚}8¤ŽÚJÂÛMŽŊiWéŊ}Ē X{O 4 &T^ĶL0’iÃONCŠ-uKö÷ūų/ ˙ūŊØīõõWë§ÖAØAvĒ…[Y×Io}Š×T•Y i$šĒIĶQ ˆa(pĢØ¤ÂhXM8?í+õūŋÎ/Ąūß˙ÛŪŋÜ/Žû™otÅTa*Ōm29­VĒ—ÕVĢÂߑG ĄHG\iˆ¤"Ķģ"žÚpœzmôöˇú~ßø˙õ…ĩũâđĮõŪ’uPĸ´é¸´’áŌjtG×ëŌK§h0ID”K ZÄDN6?Õ¸A§ôé:_י˙˙ßō7õúîĩ¯  …RCŖŽV˙IP‡^ĢzÖÃĐM.÷UϐˆØ´Ķ ŠéØí Ĩ{¯Ųīׯ´ ØëôJ:˙Ž"Q°¨4Ŗ]Å1Tŋ­U*Z¤Ŗ×õDšé Dé † Ķ Žã Ŧ0UMS˙˙.'˙ šTGüČb!„“ĻMĻęĩ×Ų„m×v°ŪĢn…įM:KÕˆ‹ …ĩĻÅ Ķ[_ūØÕ¯õøMø†ˆÂ†´ÕH#Á4ĸĶK¸JĒęÔVŌí^ Á O´Ēž4ĶM5_õ~¯KũRÄpÂiĻ ™ŨW|ˆõ ē]|Õ !Â­bV0ĸ"! Điũ5PšiØ'WÚëëĘ$ė“Aœp„C %=%ĩú§ë !AŽŅ“Zōc’žÅŠwwˇP›á4Ø4ė'éũëāâ"(&D5ĩÕ?ĸ á5ZÅ+G–.°–m(A°ąNE…Ļœ[ÂÚi­§™ŋnFˆˆC Ú}§đEä‡õęĮ„"A†pÎlX„D Âd˛ĐkÅĒl{ī¤ĸ!„!ôÂi„„:ëßĻ$ĮcˆˆˆˆeÂdX$öDziļ?A‹ †­ØLí5Õy6[$„A‚„Âwvö+ā˜M0š‘m4ĶNát•:|ŲûJ‘„! 4íSR tĶ#aO "&E‰ŧ:Õa P™( ÛīA›ˆ1߆Oc¸ˆ0˜": & Đ'ũĖë|_o÷i¤ÛLË’˙ģQū„īØ Č[ũ”°¯Â­Ãá=ŧEīô‡anŲ œŨöŋŌÅŨĶĩđ˜z’=¤Ģw´O#­ŧĖ)¤mį´Ō˙ČZs%˛…ˆú,}‚ <¸šDˆ í/dldšßûĻÅīĒ ŗ†xĖ eŲ§øîíŲ’rwũ×//úÚŌĄa  ų5õ÷´Đ4¨"ŗûĒîü(Ũ~ÛPšT ĀΗ ŗu^ßađaū˙äĄh+|>´J)öꅄC(†~Ũ†û׎=ü0 ‘+ģ[éÚ ).FĖÎ(a?}Ã%íÃ#†ŋĮļ QÛÛîÕĢĶlîõhģTÖ "ÁČP˨ōņŨčĖh›ūĢäWŦ_öõõ#Ŋ<Š>^5nûá `Ÿ"äFŸõ{žëßßĶn×ī˙B˙M­ÁŪO.:.=„Đq 3äpÎ31ëīíĨ_Oĸ7UtßĢŌû^û~–˙AÃ&Ŧ”4IÚ$û Úh0ƒ>fĖđ9Ą˙ž/­hũ>÷ūŊ6š[ũzí{īĶÂt›tFīŨ8ĩ0‡dr!/öņíôžMßxE;¯áĨ˙ę—î ˙ŨVÚˇM˛;ÂvžĨÛzL,YâD Ofåtë˙_ooŗƒ˙Š’ĢiĨīûuō_¯WŋUŊ„FôIÚŨ§Ŧ_ĻP‡Zû÷õ°˙đ̉œ߅Ēŋŋmoéßo÷dc¨N‚nJöEÆŌžĐ`ˆœJ ›) Á;žöũ˙ĐOĩK˙Čã˙ˇüpÁ^ëļƒĢî—#ģáđˇúhP؆[Nûõ_ŗ=wūŊŪ˙ņ~ÆūÚ¨ÖˇOOī#´­î×Úp iß}đzæs_Úũ~ž˙˙öšLuŊ¯Õ˙Tß°‘îûęSŊZ}˛33?  ˆI°ÁawīúÚĻš¤]˜ĸ=ûyŲh4ĐfˆęfŒÎ K Ą{HB^ūŠŽų>û´,ĀËäųüôGyB5DŒˆ_ø­ˇhđĶAœ Lˆgã^Bx‰/2]¯û)ĐieŽĐ÷u‚#ĢģVķpÔæƒA§öŗÛF‹ĒØ6Fv Íƃ2ÄD?ߋP{Ũž‡6…÷éĐ/hæsĪ"÷ųĻéÚéŊ÷J×[LĶMˆ°ČúZũĘĪëë×íī}ŪšĶ7úÜ3qĖúąqo}Ũ˙oEģ§FĻˇÅUN/üšßßūëū´Žē§o1ŲŧŸ0›õī¯ũ(NŊķ];Ĩ^ßôūĒ˙ˇũoíž;cē°Üo×ĢZ~ëZz|5ŌV§E˙¯š˙Wōę˙øų´6ßí¯°īūũžŽ›Å4 é˙Ŋ˙đ˙××õíˇí†Đm÷ŌWĒ{ē˙ŋî"ÃKŋÛĨô˙Ũŋ˙˙ŋī[lŧÛãCXc‘#ą^ūž".˙°īn=SמÛũëëmžÛvËáß=b˜5-ßŗO_ņa ˇ3˙ķ_ßw¯ūßž8"ĄûÔņ0ú{Į'Z˙â""".î/ˇ}ˇtŋģÛmíĨŽ)n­ŊTÃũTŽˆˆˆˆ´áÅûũnã2ū=P‡ v÷ëqTîŠÎ‰Ļ)2Ą™ž…ûZĩkQĩÄDGœæō,-ũ1Ci=Ķø‹GØbØė{V"EĨQUSâ".ĶXˆ˙˙˙˙˙˙˙˙˙ŠĶ0Ōüšâ˙˙˙Ž˙˙ŋ˙ę  ā ä 䘖™L™T(%€ %€ leptonica-1.86.0/prog/feynman-stamp.jpg000066400000000000000000000340721506303110300200120ustar00rootroot00000000000000˙Ø˙āJFIF˙ū“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āŋ("˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ö[[iŌi.ҎŠác<ž=*ÖÉîæVš6Š4įŊI%¤‹Ģ•fųtĢä€ '€(ŧRÚοŒņ°ÁAKĄ”I%ÎKH1APčŊ˙hÁšNŨĐŌ˙ÂC¤ųˆA˙}RēÛw5¸RTũŲ=*G°ä’%^CŪŖ˙„ƒH˙ „÷Õđč˙ôƒūúĸčįŧ•<å1Į8ūņ§<ZĪæÛŠe# •ü$:?ũ ˙žŠÃ]ŌKøīĒ.‚ÃĄ´3o–číÆ:`T{.âGļ@Hoģ'e§néķũũõCëēT|ĩü {ĩAaΧíˇQ bU;ˇrisŨʞr㏜â4‹ŽéDq īRļģĨ Ë_BģQt;1d‚KYüëu.­Ã ū”ChĶo’ëī?t‰´@pu;ûęøI´Bä'o˙}S˜ũˇp+[ƌę~ëúT`ēˆ‰ŽCßŪĄ$ŅIĀÔ­˙īĒx×´“Ōū˙ vbˆįŧuY‘Ŗ:˙ĩK$ÚĪį[Šd ŒSˆ4€pu?īĒQ¯é$djãũęWB°ømLÅĻš{qˇĐT{.āWˇK+}Ų?ģJuũ$øsūõ/öö•œ}žûę‹ĄŲŽm< `#b%^wŪ›˛âéŅeB‘§_öé?ˇtŦ€oáĪoš”kēQ8û|9˙z‹ĄXt–īm8šŨK)1Š"ĩiŲĻšão Ļ{ISÎĄ˙P|A¤“¨A÷¨ē 1 ]ÛĢÁ—Vûũß­Htåā+0ųƒgŋŋĩF{1ÜĄSį^Ī”ķúŌÜ-Ãˇ]–æSĮë_JëēT7z†Žãŗ€Ũ%p"sÎŖđ­­Ŧž2ÕŅ­-ʋhˆPã“íUČî.cæ€e“rÅ=Ԅ‹)ãõ¨Nōb9nܯ$ Oø×Ņ? |<–zŽŊ-ÍŦdI;ė܀āyŌĢ|Ķa–]zî[hœ5ėČĨbCĀĻ ÅĖ|ūÎÍåMxÅy`%<~´Šdugķîö¯WķNë^ķđÛMŠß◊í'‰dUd ČzT>!Ō Ķ>xž&ĩ…eŨ4ˆūXČķÁ§Ęû…Î á Ë˙ "Ô5ÄŽ “žĩõíŌYYËu %b]Ä ųoāŌ‘ņԃ‘ĩsŸĄ¯Ēˆ•e Ž T6‘ãøÛÄ~+ņK|ĢĨ*@I yŠô_#Gđîĸ Ká˛caÉ''Š*É4ô˙+-ģ>~NCšŗ{˙3ējŠau{B„,mķIØûUĢĶūƒ7û†“؏e˙ŊCūž$˙Ѝl´üŅŗn›N’IĪû§U =2÷YÖ¯ltøZYŪæ@Œ˙ޝÁš6™mâKFÖĩ(ļ]@ąlRTîĪ#ëÅs$lpČw"’@ī]…BÚZęšĶņöxA€žî5ƒŠEo§ęW6đJ&†7 =˛x¯EÖü/øfËKđÜŪ}ĐQq<–pAįÛ4’Ô.yú#<ŦrdbĮņ9Ēėá#Ku<žĩĶęē=ž‘<C}ͰjĮœÆqÎsīÅqZ”ŸhÔ܎ЧI{Åt%EļڝqQ.Ÿ7j|V,lęà 2i¸ÉÆ=̤Ããm¤R^Mö†\‚Ą*NHŠOQZmŊœˇSáS“Á5ģĚ5‘ŠÚ#$­ĖqLĶnÍ•ģ…Øwz¯5Đé÷ÚxĶž\)˜grˇ&ƒH¤ŠÚcĪ%Ôˇ"ÎYdÉŽ¯ÃˇŠtÖˇšI šP œõ¯7žž{š‚ĻsģˆĮq]—‡-bŌ5 būä(ļpīH8Įå@ĪmņŅkē{ˆlT—^œ÷ŽvxãŠĮÁ‘äáuįũ“\ŪĄņ‡G–]Zcc8K‹q gzõ˙įįø¯c&Ÿĸ$mĮ›§Ũ´íš”î1ųĶ9Ŧö;ø4xƒWÖ5EÔ%ˇ6öQ“ČĀ63Ô+ŗ[ųlĶÂļąĒ™„nΚ8ö=p:ˇÄũëGÔÎÂā]ß[ˆˆioÆŖŠšSž„ĮOœ}…÷Iķ¯÷qY6”‚Ėę´(^¯߉V&`Č$aĀÚĩ=ŗ'ÄË;ŗČšŪ5Ü;āā5ˆēvŠá}ON˛ą¸†æėžĖÎGJՏâļæé’ɧÜy–‘Ēģo^p¸¨įŽ× 3[”jŪ7,<¯"úaĩ>PpHįŌiä\/ũCá¯,“â>™'‡§°ûĘīq$ŖįįúÖĒübđõŧīsŸrnZ‡w˜¸ãښ”o¸Yėq­Z?‹nųãír6Žíĩ‰¯>:ĻžÖđŦvęŦ˛,`1áēžĻŧÛž&˛ŅXí×9ėāãøˇciâû]DY\}-#‚EÜš;AĪķĒW´ëâ”Ču|¸‰qōŲæ´æDŲžãåŊžĩiin 5ʇqõ×)āĢcĻhâtˇ/Ŧ\–ßü@šãôŽ|bŌŖņEޤö“ĩŧ6ŅÅ´8ÎđOëY^!øĨĨjVŸm§ÚÜBö÷˛\ŋīlņĮ×ô§Ė‚Ėô؀Đ>%x¯Rä]* „î9Šū)4/đ¯Qš‰Gī­÷=đkĪu‹ú üZĸÅapŗŪX%ļķ"ã#˙×TuoŠē~ąđÚoY…ãĄA#0Æ;{Ņt2ū ‘˙ Đz*˙#_QŪ›e1´ÛöŋģÜ23_-üBŋíGĸ¯ō5õgNMØ%šâ:„uÍkÄķŪë3ĘŗG!! “ƒŒŅ]nŖņ+FÄ §X(ē˜6hˆĀ<äĄĸŦ“ąˇy,ä[y”íō¸bôâÆsá5^Ū9.å[‰˜mCō(*ÅīüxÍūéĄėÉ:~ĨyŖë×wļĒNˇ2¸gøU[éaÖŖÕfoß$žc{˙œŅ'×ßõķ'ū„i“ĮæÆÜdcšãŊÎ’ķFKYBĢū‰p‘É!ˇ š‚__[ø’ęúÂQėø##p8­kØdøy>ąģ7Éž%õprļP“ÕūcøĶ–Ĩ¨‹4­#ļé‹{“\Äą“u&ヸ×NŒ¨ 0+˜vßtîy掏R…BW;ƒÁā„ :4ôąĨčWZŦģ"ĪN:ÖãJæZC#”fŦÃĨŪÎß%ģœđžõ§>ƒa+)\ėGjŖ2jAŖˆÔá†;WŽ|Fđä~Ōã‚Õ‰eNĩyõĨē}ŒÜČĄ`NôÎ:Đ%ލ×ŧąļ‡O#p÷$tŽ}@2•a‚N)įV{ëŠãɌ *^ĪķŽzÍ\™`F *ņëQœÜĀqĪ֞Į 3J…‰'ōŦ,"3™dÁĄŠc‚8ōÛA /Nie8„㌊`WX˜îÆsÆhkse ßĨFÔägôķ3ĮëT!æA"2˛…p=:Õ&Šā~ĩ;î+—oQëOu@š$tęi :­ÛMO5栈ŦōČĒĖ98#[2hZ,ZDrD;įqÆŅˇ9:ˇAMÖĩ]6ūŌÚ;+&ˇō˜ĢJÄ`ācĩĐ =Žō*"eØíw¤šˇšÚqŅ2ĖĀšÍXŗÕGÕmīâ‰^XzŖ¨`߁ޯōK(lfņN¨?2~âĖāŨ;z`ƒU4&Î7SŌæŅŪ$ģ`˛JĄŧ˛9PFAĒÉ‚+gBĶãņĄ¨IĒŧ˛ˆH šrzRkēž›y§ÚÁac%ģÛĘÁåb`;UXFDIڃ,xP=hžŪōŌtˇ¸ļt¸|‡-ž˜§4Í ŠEũāå>ĩ蚕íŧzŪŽĐ/Š0ļöÛT ŒWĄČÍ5¨Š˙ t™ô‰öpÜēųވûÁ‚E}2Ę` ž ŽĩōßÂK‰Ž>'Å-ÃŗČø$“͝ÚžŸŧ3‹IžËˇĪ ōn­aą ÃK 'ÃˇÛãxaYؒŒ2I9'W™xÂzöĩâ[‹ÍZâe’)IØĖĀmÉÆhĢ뤋ĢȚŨpąļYĮFöĢwßņã?û†ĢÛ;Z8ˇ•0žG ôĢßņã?û††Æōôûīúú“˙B4ņČÉč:SdCöûî?åæOũĶÂv â¸Ųšq5[¯ėß°;‡‡$‚Ã,3īLI˜`+=ę4ˆsŸÎĨītíRõcF^ŠæItŽO RG9öĢZ¤x™3Ķ•2Ü?uÅZ) Č"Ŋ+ÁbÛVEļ3ĒŽŠã$ũ+ĪŨĸšŠŦoZÎá.md!”įh<Ķ-ęöWz +4NŸŋ/˧č+ ‡ũ&(įĩq Øå_•o Ē ņvŸâÍm. ũĄF͐Ií[‰`4ÉžPZ&=:šf ôc­Ëą­&WîÛ¸?…\ōÎāv8úšĻ‘æā.eÉČ%Ēü–Æ`r÷ĻC—`Н5æÄv •3Âb''ÍfÜDn%;NÕ#<‹ãŋ$VPX!ÛæąČö"¸M3Â÷‹ĄËĒ\Š&<ŽĻģ˙YéšßÄāÕnR [UFÃoā‚*ŸÄIlÚ[}2Æm‘…ḠŽ+9ģ#ŖĄĘZM ¤ åFZI$'ž=Ŋ*ŌŨØF>ĖÖėÖg–ōzüՔ-Ž"GGĩ(˜§ßŒ×nÂ6-õŨ:ęé#ŋļōâˆūäŒ(§ÍëÅTÕ#¸[Đ÷mØŲŽŪÜ}+.X㜎Ɠ]ŦQhÛcŌīnDˆŅĢE br9ëĮĨVčFLzƛ.›öfūΐ5ō7’záēŽjČÖô‹“ö[Ë-ÖsĖ+îī–ĮĄ{Õ­+ˆŸŌ(€āÍÅsZōŪÅĒÍũĸs# ĮÆĪáĀúU(ŖI]#y@Byl×w4Z Ø6‡s}ŨÔąkrŦ~GaĐᓁMk¸ļ9Í;ZĶ´ÛHí-­ØĨËŊbĀŗ'\)ūšŗ'ˆôD‘´élOöH›ĪŪËãšįÚÆãOšK{¨Ėr¯##Ēö?Tž?1‚°âšmh:ũ/Äēŗ¨ÄuKU†îśŒ* p7¨7Íë‘_&­7öŽ|ãĘ€Ąû¸JĢob—7PÚ´‹ ČØ2žÕčSéū¸wĐīušxíŅė§W ŧŦ9Rq“ÚĢâĮ9eŽiÚ]ŒV6Ö˛y3’/X°,Pķ…=šŠG‰4I%k ôįR ŅTIŧũėž9ĖÜA=Ü–×Q4R!8VęWąüjp21­ āŅÚiž"ŅĩkøÛWĩŽČ[R¨ ã…Ū |ÜW%ŦÅ{ˇ*ęd™ß”ĪĄû¸˜Ēq„šâ—"ØvÆŊÅá^)4‰õšá Vŗ™d92žĒN2p;U­IØËøFü,Ë|Ÿîãõ¯Šúdšų{áU­ÅÅ4ļē…Ŗ‘HĀnëÎå_N][ĨŨ´–ō Á*pZCbešÃj?´8ĩøė,qs8l<°°x>¸ĸ đīË]WîÍŊˤšã’N9īEY'mn’]ʡ2œ*1؞•bûū_ËX°üŗ¯pOˇ`PWŠØĸx­…Č ŊC{Ô×Õtč>Ķ$ösČp8ŽģHđj։:]ˆķ×$×e¤|=’(ž;›˙6Īî,!ģ-ĪŅõ‰tģčŽíŨãxÛ?{ƒ_Dh>)—XĐä‘Ǐ-ĮlW…xÂļöZäzu…ÚĘnd*É#НŖ4M 7ÂĐéÆ7ri™Ôĩĩ9]G↛ĨĄuŒĖょjį›ã]Ô˛ˇ°lžƒå8Ŧ¯ü4‹@•/dŊ&ŌiXČY›äjŋ‡žĩæšözŊ´ļ †“åbqéš Q…Ž‘čz.Šâ=~1#\[Ē7đų\ŠßĶgš8ŧ˜ú°ÄÅā}Rm^)-¯$Ž(ߗV`¤}ŽÚ[cgnļpŗK1œį4"%n†6ģá[-Sė— f-#úJķx{Tĩ×]¤´’XĖj¨í^ŅwĢXÚ<M 2 įĻEs7ˇŖÍ–FÃąáCsS8)+ocČΟvƒæļ’1ÛuW’ŪíIŨ#é]ŪĄx’}ôခpŔÉÆ:ƒÚšŨ$ļ,ædŠ/⍑‡Ŋ#Eûĩ;‰oá9ކúÚXm!¸ž5hfbŠÁqČĒ3¤B-:ŸŌŗq°ŒMFioŒKv2!ä2ņž1ЍD[—o+Ūĩ °$QUž™„hš‘ŽæŸ0Ŧ(•@8ÛL™ĄÃ0c÷_<ŠŌÕtoėģ¤ļyVI<ĩí2:UUyŖŽF،pĖ{ @ZģŋēŋŽ?ĩm.Š0\dšĸFqķzUÍVÎ]&˙ėr0såŦ™Ũa‘T˛84Ād‡ zįŽĸĢLˁļGŠČrĮ?§1f85>§ļ§ĒZØDFųŸnãÎ*Ō¨ę÷ZĢF÷7ĸ„ €03ëTâsÖŽ]ÛĨĩܰ$‹ BT°õjŖđÆB̈́w73H—hÃ'Ę+ô渍ÛQd;ŽkU âAŨr„tˇŖQŒįĩ`ƒ˛pųīŌˇĄ|Ēļ*Ę[ž—āŨkũ[3]fšã4Ķ4i­,b7ŦŸq1ĮĄÁ¯ŠîxōВ¸éŠˇŖë“éׯ3Ÿ1än~Gë@ÜSgMđįMŸÄ>5Žúål2o`{šú%Č0ŖŧÛá X› ™Ŗ+ö™‹üļkŌŧ˛NX`wĒ0Ēī+īŦ­5{)l/PZX]‰­nįB8ļ1ô­øH ĶĩķavÛ^B6dú×@o#xÁSÅ\ŅØŽÚĐØÛ¯™0;}3ÍyĪŏ7†ôØã´p/î U=vņk¸šäK&2DkÉį­|­ņ^—Ä>-ē‹áũÚŠ=6ņšEEu;k÷P.f2LI.Ųé])¸ķ“tlÍ ë^9¤j¯jwŠö"ģí'XD0Ã$r(6ßSZyr˙7ZĄt@bņ”Œ053ŗŗüØÁåxīUnIJãē}k9Æö–Ĩá{ȝdŨ5¸i!Œ6IÅrÖÅdwĪđ’1øÕŨíŦ5Ĩ~b-ķ§¨­Yŧ17Áö´ŽöqæĮĪFäqPČz3šŒŦįå5ģā›=.}iîuV)obÆMØUį՛ŋiėí(…´|LŲ=G_Ö¨k­áß ­ĸ0–K÷e2¯FCƊĘÖw&æEüæãQš˜JyąŊW<~•ŸsķÂāœv¤Ļđ1Ū¤uŠĨÖbĶuo[j1HeÕ-Ų–m÷Q@ ‘\jnÚ2{fē 0—R›I)ōjJ €į9§Má+$•âū͈=ģšäģHŠÛ9o—z°íôĒ­á‹XŽĢŽã÷v„–˙Yß>ŧWIĒëz]Ž­¤øzhÖØÚlšGl›rôĀüųNJą-ž_LŽĮ$ąb~Ļļˇ™ŦˇÚbXÄ 4x\§‘úV+LŊ…SŒ“QK&~QMyøí@\šb;?ƒã ú/õ¯¨/šá,ĻkU 8_œšųáü”¸>‹ũkęŠÚ-ĪĐ<1â Äŗ^ęˇ+Å)&2Hr@ã4Wk¨|BđüÚYŲH—°í įƒëÍd]ŧhëm*pėv¸āž÷ū<'īō‚’ōU¸”Ÿ‘qÍXž°œ°h`|y&åķ7é2q˙4–ēeÎŗqm ŧđM!F”t_Z”KĖķH†H’îBę;ÆŊKLžoi—šžŒ-ltûHčäˆ 8c‘ë\ŅÜÚįˇŅęšūĄĸ+fŦãļ‰{H÷â¸T†Y%¸‚^_%ŠļßáÁÅhé"á|]g%ģ‡˜Ũą Øžkŋø€t˙ č ¤Ų¤r_^fI%P27ß^ĩŽå^Į“ąÛÃu­kŲJ$‡¯ĩcõ\ŊI­]DÉ,Ôe}ōjŅe¸ÜîĀéO;éšŦ’VéÁfĶå‘R튡ęĘØÅG[áÆņ&{gxļsEg#ãÎ#ä=ũkÛtŨ/í‘jwz›JBĢãvP¸ī^eĻYZ^éP[YøŋO’"˜3°ÍvZ^‘8‰`}nŪčú@N("z›~&Ō4h:AÔc(á°G§JÅĩž¸ļˆÛHáÄ]ĸšĪxfãHÔÆĄoŠģ!ÆčŨŲĒ‹ęÍxâÖŲ˙xĀŨy q†›aÕÄ×Q[Û°Člš<đkį˙ˆ:aŌŧ]8÷r€āŽ„žM{ąĶāŌôŌĻPnrIëë^ņ/DK˙ ÁŠÛ†3@ėdīō€ķGÆæ)A< ×E¤jBU rÆš‚IJ›Ė`€ƒ‚(&=Uo ąŖ •rWYŅ6āįėkŅ.\ZFd$Œ×AÔqÆÜōG64ôX"›YI$šļ!å=ąŌąĩ Iîõ‰äķpųPîä(jdÛĘĮoąëX‘ÍŒõ¯@×ŧŸøFåŽáI•™ =ÍqšD"[Ą‘¸Ԉq÷Ō:-8˜í‘:fĩĸČûũ5Ú,Ģ†^§ERÃwN†Ą›Xŋ%ė×­•ÁU*ãĨC(KgîÔP’¯ÔcĩI0įž†ŗbd-!8ÛĀĒåÉ= Xv;[ĨU'¯¨ĸ]j7’ZDeų—ŊRđÔö~ø–WT<‹r”đ1Ī­u~ĶáŅ'đÔ×ōIy=ÎĢ,Qmcļ69ÁŽvãB´ņ7Æ)´ģÖ+ ĄAÚp{Õ'ÜL܃Q{_†ÚĻĢsŧŠēžKq1Ũ¸ČÆ}\đ•Ôˇ°j^5׿’ÎÅí‘بųQjˇk§'‡>ęđBn!˛šV†5ā˛îg=xÅaüFÕdŊøcĄ¸Œ[Åqpę#@mÚ1)yGĀ—ö—ÆHįĶ hmŽÜ –<äņë_I2ĢŠGPĘz‚2 |­đ}6üHļļßë_Qß<ée3ZŽéÂå3“]PÚÆRÜËKŌŧ=¨ų‘É ;gcŒ’zœQ^gĸxsÄ~"ņ4ˇÚŦŌŖE)Âd€$3EY'Ž’ŗŪÄÖËōŖ|î:ˇ|@ąŸ<|ĻĢÚČmdû4Š‚OĘũ{Uģ…Gˇ‘dRTŽ@ë@Ë4gPŋų€ÅĖŪ5 Í˙–‹ô¯v“ÁžĘŌéˇÁÚFb~ŅԓW4ŋ†ŪÖDŠĘí1’sX{9sŖį“4yåÔÅBōDy,ŦGĨ}?˙ WÁŸķës˙›˙ OÁy˙[Ÿü5J ¯h—É~Ž2{fˇ|2‘4Ō8a…ų×Đßđ¤ŧ?åŌëŸúx5nĶá/„ė‘– iĀn𘚤™QĢy•ŖÜëWbÚÂ"ėzˇPĩ…ã ė§ūĪķÕĨv5ôöŸáŨ7LU[H<ŊŋÄ?s—ß ü-¨Ü›‹˜nšBʼn‘ÉĒą^Ũ\ųËÃŌÅkoz„e–<“Ÿz÷ßøDŦu˙éæÂEˇšŪŦƒûÄ įp| đ’Į*-ĩČŽÖ"sœWUgĸYXXGgu.sI&ˆTíc“đ¯ŽíŽöV§ōísøÎi{:>py"U?8üęMY}\ļÕmZkvß´Œįüæž‹o„>aƒkq˙D~ ø;9û-Îëš§ė¤.txžŠņįPŌîôø­Ŗ…nķæ>Å““Ōž~*]˛ŗXūØĐ-ŋąqĩz{ײ™đq˙—k¯ü4/ÁŸŽE­Īũ˙4ũ“txžņ6îÆÎÎ-ŖšKK‡¸…ö/ĘÍF‹ãëm7_ŊņÕˇ›ŠJ€FR\~5íāĮƒH˙[Ÿûūi?áKø0cũįū˙š~ɋ+âo‰ē‡‰4it§ ‚bKåFN}Åfk~3¸×t?I¸ō’”Øé^ø> x3}–ëŸúx4•đaû-Īū=›#Æ>ȏņ&܆ƞĒī\^…đģÂū՗RĶ­įK”Æ LX~UÖ^Û}˛Ęk}ėžbíܧVąV!ģœfĨņA´×Ŗ°ĩ+=Îė;ÄĀ<õõĸŗŧ3đŌ TšK÷ķŨ¤.’äķ’N9ĸ¨GW¤ø‡NņCÄÖ(Í$’<å—0đîŖkc-žsäÚÜ.×BO׎x  6´ģī-m%X7ųbč¸ŲN}ûWSâOXøgFmFčīũÔ`āČ}s>đ •ļ„RåO ?8<zį5Ī ëæģmm{v¯e ˆ c´Ûx3Įv~1IDvīmũǎ‹ŧ9¨YØ\Zčˇk¤Ų"ĐuČįƒīV|+đūĘßC1Ũ yœ}đyĪր:Ÿø’ÃÃz3ęWN Ėh ‡ĐVG‚üiã4ik%ŦąķļFpĪÅqzī…ug]ļĩģģc ‰“é_Jėî<)™§CsĨbČenÄã¸ī@xĪâ=‡„.âŗ6Ō]Ũž Š&¨#ƒÍtš6ŗiŽi1ę6Î<–ķ÷HęŌŧËž šžņú†ˇ(¸ļrNxÉ㊭ox{P°´¸ƒCšō ēM’!'×#žŊKkņoKēņ1Ō…¤Ģ,Ũ—‚sžũĢĢņ‰,<5ĸIŠŨ8d ē4Cč+•đ—€,āŅ/<Ōg.9ë\ūŋámcWÕ­l.n•ė “r!<ôĮ­v~ ņõŸ‹ŧČÅģÚÜ'>\Œ +žŒū#XxBâ+So%åÛōĐÄĀ2ŠŸZ’oŧéÖ÷n!Ŋˇ•ķÁ8î;Šä<3āĢ­CÄSjÜĸáËuŨž2}Ízn‰­ÚkēDz•Ģ)ēäũŌ:ƒôŽķã.Ÿo­Ie™qs GkĪŽĐrAŠ|]áíBĮN¸ˇĐî<ˆ.Sd‰žƒŽG#=ęĮ‚| gaĻfō5–W剿€(xƒâm´÷–V1<„\`ėtúƒEtąxIƒS‰ 9Š˙Ųleptonica-1.86.0/prog/fhmtauto_reg.c000066400000000000000000000063361506303110300173630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fhmtauto_reg.c * * Basic regression test for hit-miss transform: rasterops & dwa. * * Tests hmt from a set of hmt structuring elements * by comparing the full image rasterop results with the * automatically generated dwa results. * * Results must be identical for all operations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, nsels, same1, same2; char *selname; PIX *pixs, *pixref, *pix1, *pix2, *pix3, *pix4; SEL *sel; SELA *sela; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); sela = selaAddHitMiss(NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); pixref = pixHMT(NULL, pixs, sel); pix1 = pixAddBorder(pixs, 32, 0); pix2 = pixFHMTGen_1(NULL, pix1, selname); pix3 = pixRemoveBorder(pix2, 32); pix4 = pixHMTDwa_1(NULL, pixs, selname); regTestComparePix(rp, pixref, pix3); /* 0, 2, ... 18 */ regTestComparePix(rp, pixref, pix4); /* 1, 3, ... 19 */ pixEqual(pixref, pix3, &same1); pixEqual(pixref, pix4, &same2); if (!same1 || !same2) lept_stderr("hmt differ for sel %d (%s)\n", i, selname); if (rp->display && same1 && same2) lept_stderr("hmt are identical for sel %d (%s)\n", i, selname); pixDestroy(&pixref); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pixDestroy(&pixs); selaDestroy(&sela); return regTestCleanup(rp); } leptonica-1.86.0/prog/fhmtautogen.c000066400000000000000000000050421506303110300172110ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fhmtautogen.c * * This program is used to generate the two files. * If filename is not given, the files are: * fhmtgen..c * fhmtgenlow..c * where is the input index. Otherwise they are: * ..c * low..c * These two files, when compiled, implement hit-miss dwa * operations for all sels generated by selaAddHitMiss(). * * The library files fhmtgen.1.c and fhmtgenlow.1.c * were made using index = 1. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index; SELA *sela; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fhmtautogen index ", __func__, 1); setLeptDebugOK(1); index = atoi(argv[1]); filename = NULL; if (argc == 3) filename = argv[2]; sela = selaAddHitMiss(NULL); if (fhmtautogen(sela, index, filename)) return 1; selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/fileinfo.c000066400000000000000000000036321506303110300164660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fileinfo.c * * Returns information about the image data file */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; if (argc != 2) return ERROR_INT(" Syntax: fileinfo filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); writeImageFileInfo(filein, stderr, 0); return 0; } leptonica-1.86.0/prog/files_reg.c000066400000000000000000000263551506303110300166410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * files_reg.c * * Regression test for lept_*() and other path utilities in utils.h * * Some of these only work properly on unix because they explicitly * use "/tmp" for string compares. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include #ifndef _MSC_VER #include #else #include #define getcwd _getcwd /* fix MSVC warning */ #endif /* !_MSC_VER */ void TestPathJoin(L_REGPARAMS *rp, const char *first, const char *second, const char *result); void TestLeptCpRm(L_REGPARAMS *rp, const char *srctail, const char *newdir, const char *newtail); void TestGenPathname(L_REGPARAMS *rp, const char *dir, const char *fname, const char *result); l_int32 main(int argc, char **argv) { l_int32 exists; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_stderr(" ===================================================\n"); lept_stderr(" =================== Test pathJoin() ===============\n"); lept_stderr(" ===================================================\n"); TestPathJoin(rp, "/a/b//c///d//", "//e//f//g//", "/a/b/c/d/e/f/g"); /* 0 */ TestPathJoin(rp, "/tmp/", "junk//", "/tmp/junk"); /* 1 */ TestPathJoin(rp, "//tmp/", "junk//", "/tmp/junk"); /* 2 */ TestPathJoin(rp, "tmp/", "//junk//", "tmp/junk"); /* 3 */ TestPathJoin(rp, "tmp/", "junk/////", "tmp/junk"); /* 4 */ TestPathJoin(rp, "/tmp/", "///", "/tmp"); /* 5 */ TestPathJoin(rp, "////", NULL, "/"); /* 6 */ TestPathJoin(rp, "//", "/junk//", "/junk"); /* 7 */ TestPathJoin(rp, NULL, "/junk//", "/junk"); /* 8 */ TestPathJoin(rp, NULL, "//junk//", "/junk"); /* 9 */ TestPathJoin(rp, NULL, "junk//", "junk"); /* 10 */ TestPathJoin(rp, NULL, "//", "/"); /* 11 */ TestPathJoin(rp, NULL, NULL, ""); /* 12 */ TestPathJoin(rp, "", "", ""); /* 13 */ TestPathJoin(rp, "/", "", "/"); /* 14 */ TestPathJoin(rp, "", "//", "/"); /* 15 */ TestPathJoin(rp, "", "a", "a"); /* 16 */ lept_stderr("The next 3 joins properly give error messages:\n"); lept_stderr("join: .. + a --> NULL\n"); pathJoin("..", "a"); /* returns NULL */ lept_stderr("join: %s + .. --> NULL\n", "/tmp"); pathJoin("/tmp", ".."); /* returns NULL */ lept_stderr("join: ./ + .. --> NULL\n"); pathJoin("./", ".."); /* returns NULL */ lept_stderr("\n ===================================================\n"); lept_stderr(" ======= Test lept_rmdir() and lept_mkdir()) =======\n"); lept_stderr(" ===================================================\n"); lept_rmdir("junkfiles"); lept_direxists("/tmp/junkfiles", &exists); if (rp->display) lept_stderr("directory removed?: %d\n", !exists); regTestCompareValues(rp, 0, exists, 0.0); /* 17 */ lept_mkdir("junkfiles"); lept_direxists("/tmp/junkfiles", &exists); if (rp->display) lept_stderr("directory made?: %d\n", exists); regTestCompareValues(rp, 1, exists, 0.0); /* 18 */ lept_stderr("\n ===================================================\n"); lept_stderr(" ======= Test lept_mv(), lept_cp(), lept_rm() ======\n"); lept_stderr(" ===================================================\n"); TestLeptCpRm(rp, "weasel2.png", NULL, NULL); /* 19 - 22 */ TestLeptCpRm(rp, "weasel2.png", "junkfiles", NULL); /* 23 - 26 */ TestLeptCpRm(rp, "weasel2.png", NULL, "new_weasel2.png"); /* 27 - 30 */ TestLeptCpRm(rp, "weasel2.png", "junkfiles", "new_weasel2.png"); /* 31-34 */ lept_stderr("\n ===================================================\n"); lept_stderr(" =============== Test genPathname() ================\n"); lept_stderr(" ===================================================\n"); TestGenPathname(rp, "what/", NULL, "what"); /* 35 */ TestGenPathname(rp, "what", "abc", "what/abc"); /* 36 */ TestGenPathname(rp, NULL, "abc/def", "abc/def"); /* 37 */ TestGenPathname(rp, "", "abc/def", "abc/def"); /* 38 */ #ifndef _WIN32 /* unix only */ if (getenv("TMPDIR") == NULL) { TestGenPathname(rp, "/tmp", NULL, "/tmp"); /* 39 */ TestGenPathname(rp, "/tmp/", NULL, "/tmp"); /* 40 */ TestGenPathname(rp, "/tmp/junk", NULL, "/tmp/junk"); /* 41 */ TestGenPathname(rp, "/tmp/junk/abc", NULL, "/tmp/junk/abc"); /* 42 */ TestGenPathname(rp, "/tmp/junk/", NULL, "/tmp/junk"); /* 43 */ TestGenPathname(rp, "/tmp/junk", "abc", "/tmp/junk/abc"); /* 44 */ } #endif /* !_WIN32 */ return regTestCleanup(rp); } void TestPathJoin(L_REGPARAMS *rp, const char *first, const char *second, const char *result) { char *newfirst = NULL; char *newsecond = NULL; char *newpath = NULL; char *path = NULL; if ((path = pathJoin(first, second)) == NULL) return; regTestCompareStrings(rp, (l_uint8 *)result, strlen(result), (l_uint8 *)path, strlen(path)); if (first && first[0] == '\0') newfirst = stringNew("\"\""); else if (first) newfirst = stringNew(first); if (second && second[0] == '\0') newsecond = stringNew("\"\""); else if (second) newsecond = stringNew(second); if (path && path[0] == '\0') newpath = stringNew("\"\""); else if (path) newpath = stringNew(path); if (rp->display) lept_stderr("join: %s + %s --> %s\n", newfirst, newsecond, newpath); lept_free(path); lept_free(newfirst); lept_free(newsecond); lept_free(newpath); return; } void TestLeptCpRm(L_REGPARAMS *rp, const char *srctail, const char *newdir, const char *newtail) { char realnewdir[256], newnewdir[256]; char *realtail, *newsrc, *fname; l_int32 nfiles1, nfiles2, nfiles3; SARRAY *sa; /* Remove old version if it exists */ realtail = (newtail) ? stringNew(newtail) : stringNew(srctail); lept_rm(newdir, realtail); makeTempDirname(realnewdir, 256, newdir); if (rp->display) { lept_stderr("\nInput: srctail = %s, newdir = %s, newtail = %s\n", srctail, newdir, newtail); lept_stderr(" realnewdir = %s, realtail = %s\n", realnewdir, realtail); } sa = getFilenamesInDirectory(realnewdir); nfiles1 = sarrayGetCount(sa); sarrayDestroy(&sa); /* Copy */ lept_cp(srctail, newdir, newtail, &fname); sa = getFilenamesInDirectory(realnewdir); nfiles2 = sarrayGetCount(sa); if (rp->display) { lept_stderr(" File copied to directory: %s\n", realnewdir); lept_stderr(" ... with this filename: %s\n", fname); lept_stderr(" delta files should be 1: %d\n", nfiles2 - nfiles1); } regTestCompareValues(rp, 1, nfiles2 - nfiles1, 0.0); /* '1' */ sarrayDestroy(&sa); lept_free(fname); /* Remove it */ lept_rm(newdir, realtail); sa = getFilenamesInDirectory(realnewdir); nfiles2 = sarrayGetCount(sa); if (rp->display) { lept_stderr(" File removed from directory: %s\n", realnewdir); lept_stderr(" delta files should be 0: %d\n", nfiles2 - nfiles1); } regTestCompareValues(rp, 0, nfiles2 - nfiles1, 0.0); /* '2' */ sarrayDestroy(&sa); /* Copy it again ... */ lept_cp(srctail, newdir, newtail, &fname); if (rp->display) lept_stderr(" File copied to: %s\n", fname); lept_free(fname); /* move it elsewhere ... */ lept_rmdir("junko"); /* clear out this directory */ lept_mkdir("junko"); newsrc = pathJoin(realnewdir, realtail); lept_mv(newsrc, "junko", NULL, &fname); if (rp->display) { lept_stderr(" Move file at: %s\n", newsrc); lept_stderr(" ... to: %s\n", fname); } lept_free(fname); lept_free(newsrc); makeTempDirname(newnewdir, 256, "junko"); if (rp->display) lept_stderr(" In this directory: %s\n", newnewdir); sa = getFilenamesInDirectory(newnewdir); /* check if it landed ok */ nfiles3 = sarrayGetCount(sa); if (rp->display) lept_stderr(" num files should be 1: %d\n", nfiles3); regTestCompareValues(rp, 1, nfiles3, 0.0); /* '3' */ sarrayDestroy(&sa); /* and verify it was removed from the original location */ sa = getFilenamesInDirectory(realnewdir); /* check if it was removed */ nfiles2 = sarrayGetCount(sa); if (rp->display) { lept_stderr(" In this directory: %s\n", realnewdir); lept_stderr(" delta files should be 0: %d\n", nfiles2 - nfiles1); } regTestCompareValues(rp, 0, nfiles2 - nfiles1, 0.0); /* '4' */ sarrayDestroy(&sa); lept_free(realtail); } void TestGenPathname(L_REGPARAMS *rp, const char *dir, const char *fname, const char *result) { char expect[512], localdir[256]; char *path = genPathname(dir, fname); if (!dir || dir[0] == '\0') { if (!getcwd(localdir, sizeof(localdir))) lept_stderr("bad bad bad -- no local directory!\n"); snprintf(expect, sizeof(expect), "%s/%s", localdir, result); #ifdef _WIN32 convertSepCharsInPath(expect, UNIX_PATH_SEPCHAR); #endif /* _WIN32 */ regTestCompareStrings(rp, (l_uint8 *)expect, strlen(expect), (l_uint8 *)path, strlen(path)); } else { regTestCompareStrings(rp, (l_uint8 *)result, strlen(result), (l_uint8 *)path, strlen(path)); } if (rp->display) { char *newdir = NULL; if (dir && dir[0] == '\0') newdir = stringNew("\"\""); else if (dir) newdir = stringNew(dir); lept_stderr("genPathname(%s, %s) --> %s\n", newdir, fname, path); lept_free(newdir); } lept_free(path); return; } leptonica-1.86.0/prog/find_colorregions.c000066400000000000000000000340431506303110300204000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * find_colorregions.c * * This shows the output of pixHasColorRegions(), which attempts to locate * colored regions on scanned images. The difficulty arises when the * scanned images are oxidized, dark and reddish. * * It also shows output from pixFindColorRegionsLight(), which is an * inferior implementation that does not work on images with a dark * background. * * The input image should be RGB at 75 ppi resolution. * * Use, e.g. these 75 ppi images: * map.057.jpg * colorpage.030.jpg */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Implementation is in this file */ static l_int32 pixFindColorRegionsLight(PIX *pixs, PIX *pixm, l_int32 factor, l_int32 darkthresh, l_int32 lightthresh, l_int32 mindiff, l_int32 colordiff, l_float32 *pcolorfract, PIX **pcolormask1, PIX **pcolormask2, PIXA *pixadb); int main(int argc, char **argv) { l_float32 fcolor; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixadb; setLeptDebugOK(1); lept_mkdir("lept/color"); pix1 = pixRead("colorpage.030.jpg"); /* pix1 = pixRead("map.057.jpg"); */ /* More general method */ pixadb = pixaCreate(0); pixFindColorRegions(pix1, NULL, 4, 200, 60, 10, 90, 0.05, &fcolor, &pix3, &pix4, pixadb); lept_stderr("ncolor = %f\n", fcolor); if (pix3) pixDisplay(pix3, 0, 800); if (pix4) pixDisplay(pix4, 600, 800); pix2 = pixaDisplayTiledInColumns(pixadb, 5, 0.3, 20, 2); pixDisplay(pix2, 0, 0); pixWrite("/tmp/lept/color/result1.png", pix2, IFF_PNG); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixadb); /* Method for pages with very light background */ pixadb = pixaCreate(0); pixFindColorRegionsLight(pix1, NULL, 4, 60, 230, 40, 20, &fcolor, &pix3, &pix4, pixadb); lept_stderr("ncolor = %f\n", fcolor); if (pix3) pixDisplay(pix3, 1100, 800); if (pix4) pixDisplay(pix4, 1700, 800); pix2 = pixaDisplayTiledInColumns(pixadb, 5, 0.3, 20, 2); pixDisplay(pix2, 1100, 0); pixWrite("/tmp/lept/color/result2.png", pix2, IFF_PNG); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixadb); pixDestroy(&pix1); return 0; } /*! * Note: this method is generally inferior to pixHasColorRegions(); it * is retained as a reference only * * \brief pixFindColorRegionsLight() * * \param[in] pixs 32 bpp rgb * \param[in] pixm [optional] 1 bpp mask image * \param[in] factor subsample factor; integer >= 1 * \param[in] darkthresh threshold to eliminate dark pixels (e.g., text) * from consideration; typ. 70; -1 for default. * \param[in] lightthresh threshold for minimum gray value at 95% rank * near white; typ. 220; -1 for default * \param[in] mindiff minimum difference from 95% rank value, used * to count darker pixels; typ. 50; -1 for default * \param[in] colordiff minimum difference in (max - min) component to * qualify as a color pixel; typ. 40; -1 for default * \param[out] pcolorfract fraction of 'color' pixels found * \param[out] pcolormask1 [optional] mask over background color, if any * \param[out] pcolormask2 [optional] filtered mask over background color * \param[out] pixadb [optional] debug intermediate results * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function tries to determine if there is a significant
 *          color or darker region on a scanned page image where part
 *          of the image is very close to "white".  It will also allow
 *          extraction of small regions of lightly colored pixels.
 *          If the background is darker (and reddish), use instead
 *          pixHasColorRegions2().
 *      (2) If %pixm exists, only pixels under fg are considered. Typically,
 *          the inverse of %pixm would have fg pixels over a photograph.
 *      (3) There are four thresholds.
 *          * %darkthresh: ignore pixels darker than this (typ. fg text).
 *            We make a 1 bpp mask of these pixels, and then dilate it to
 *            remove all vestiges of fg from their vicinity.
 *          * %lightthresh: let val95 be the pixel value for which 95%
 *            of the non-masked pixels have a lower value (darker) of
 *            their min component.  Then if val95 is darker than
 *            %lightthresh, the image is not considered to have a
 *            light bg, and this returns 0.0 for %colorfract.
 *          * %mindiff: we are interested in the fraction of pixels that
 *            have two conditions.  The first is that their min component
 *            is at least %mindiff darker than val95.
 *          * %colordiff: the second condition is that the max-min diff
 *            of the pixel components exceeds %colordiff.
 *      (4) This returns in %pcolorfract the fraction of pixels that have
 *          both a min component that is at least %mindiff below that at the
 *          95% rank value (where 100% rank is the lightest value), and
 *          a max-min diff that is at least %colordiff.  Without the
 *          %colordiff constraint, gray pixels of intermediate value
 *          could get flagged by this function.
 *      (5) No masks are returned unless light color pixels are found.
 *          If colorfract > 0.0 and %pcolormask1 is defined, this returns
 *          a 1 bpp mask with fg pixels over the color background.
 *          This mask may have some holes in it.
 *      (6) If colorfract > 0.0 and %pcolormask2 is defined, this returns
 *          a filtered version of colormask1.  The two changes are
 *            (a) small holes have been filled
 *            (b) components near the border have been removed.
 *          The latter insures that dark pixels near the edge of the
 *          image are not included.
 *      (7) To generate a boxa of rectangular regions from the overlap
 *          of components in the filtered mask:
 *                boxa1 = pixConnCompBB(colormask2, 8);
 *                boxa2 = boxaCombineOverlaps(boxa1);
 *          This is done here in debug mode.
 * 
*/ static l_int32 pixFindColorRegionsLight(PIX *pixs, PIX *pixm, l_int32 factor, l_int32 darkthresh, l_int32 lightthresh, l_int32 mindiff, l_int32 colordiff, l_float32 *pcolorfract, PIX **pcolormask1, PIX **pcolormask2, PIXA *pixadb) { l_int32 lightbg, w, h, count; l_float32 ratio, val95; BOXA *boxa1, *boxa2; NUMA *nah; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixm1, *pixm2, *pixm3; if (pcolormask1) *pcolormask1 = NULL; if (pcolormask2) *pcolormask2 = NULL; if (!pcolorfract) return ERROR_INT("&colorfract not defined", __func__, 1); *pcolorfract = 0.0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (factor < 1) factor = 1; if (darkthresh < 0) darkthresh = 70; /* defaults */ if (lightthresh < 0) lightthresh = 220; if (mindiff < 0) mindiff = 50; if (colordiff < 0) colordiff = 40; /* Check if pixm covers most of the image. If so, just return. */ pixGetDimensions(pixs, &w, &h, NULL); if (pixm) { pixCountPixels(pixm, &count, NULL); ratio = (l_float32)count / ((l_float32)(w) * h); if (ratio > 0.7) { if (pixadb) L_INFO("pixm has big fg: %f5.2\n", __func__, ratio); return 0; } } /* Make a mask pixm1 over the dark pixels in the image: * convert to gray using the average of the components; * threshold using %darkthresh; do a small dilation; * combine with pixm. */ pix1 = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); if (pixadb) pixaAddPix(pixadb, pixs, L_COPY); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); pixm1 = pixThresholdToBinary(pix1, darkthresh); pixDilateBrick(pixm1, pixm1, 7, 7); if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); if (pixm) { pixOr(pixm1, pixm1, pixm); if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); } pixDestroy(&pix1); /* Convert to gray using the minimum component value and * find the gray value at rank 0.95, that represents the light * pixels in the image. If it is too dark, quit. */ pix1 = pixConvertRGBToGrayMinMax(pixs, L_SELECT_MIN); pix2 = pixInvert(NULL, pixm1); /* pixels that are not dark */ pixGetRankValueMasked(pix1, pix2, 0, 0, factor, 0.95, &val95, &nah); pixDestroy(&pix2); if (pixadb) { L_INFO("val at 0.95 rank = %5.1f\n", __func__, val95); gplotSimple1(nah, GPLOT_PNG, "/tmp/lept/histo1", "gray histo"); pix3 = pixRead("/tmp/lept/histo1.png"); pix4 = pixExpandReplicate(pix3, 2); pixaAddPix(pixadb, pix4, L_INSERT); pixDestroy(&pix3); } lightbg = (l_int32)val95 >= lightthresh; numaDestroy(&nah); if (!lightbg) { pixDestroy(&pix1); pixDestroy(&pixm1); return 0; } /* Make mask pixm2 over pixels that are darker than val95 - mindiff. */ pixm2 = pixThresholdToBinary(pix1, val95 - mindiff); if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); pixDestroy(&pix1); /* Make a mask pixm3 over pixels that have some color saturation, * with a (max - min) component difference >= %colordiff, * and combine using AND with pixm2. */ pix2 = pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MAXDIFF); pixm3 = pixThresholdToBinary(pix2, colordiff); pixDestroy(&pix2); pixInvert(pixm3, pixm3); /* need pixels above threshold */ if (pixadb) pixaAddPix(pixadb, pixm3, L_COPY); pixAnd(pixm2, pixm2, pixm3); if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); pixDestroy(&pixm3); /* Subtract the dark pixels represented by pixm1. * pixm2 now holds all the color pixels of interest */ pixSubtract(pixm2, pixm2, pixm1); pixDestroy(&pixm1); if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); /* But we're not quite finished. Remove pixels from any component * that is touching the image border. False color pixels can * sometimes be found there if the image is much darker near * the border, due to oxidation or reduced illumination. */ pixm3 = pixRemoveBorderConnComps(pixm2, 8); pixDestroy(&pixm2); if (pixadb) pixaAddPix(pixadb, pixm3, L_COPY); /* Get the fraction of light color pixels */ pixCountPixels(pixm3, &count, NULL); *pcolorfract = (l_float32)count / (w * h); if (pixadb) { if (count == 0) L_INFO("no light color pixels found\n", __func__); else L_INFO("fraction of light color pixels = %5.3f\n", __func__, *pcolorfract); } /* Debug: extract the color pixels from pixs */ if (pixadb && count > 0) { /* Use pixm3 to extract the color pixels */ pix3 = pixCreateTemplate(pixs); pixSetAll(pix3); pixCombineMasked(pix3, pixs, pixm3); pixaAddPix(pixadb, pix3, L_INSERT); /* Use additional filtering to extract the color pixels */ pix3 = pixCloseSafeBrick(NULL, pixm3, 15, 15); pixaAddPix(pixadb, pix3, L_INSERT); pix5 = pixCreateTemplate(pixs); pixSetAll(pix5); pixCombineMasked(pix5, pixs, pix3); pixaAddPix(pixadb, pix5, L_INSERT); /* Get the combined bounding boxes of the mask components * in pix3, and extract those pixels from pixs. */ boxa1 = pixConnCompBB(pix3, 8); boxa2 = boxaCombineOverlaps(boxa1, NULL); pix4 = pixCreateTemplate(pix3); pixMaskBoxa(pix4, pix4, boxa2, L_SET_PIXELS); pixaAddPix(pixadb, pix4, L_INSERT); pix5 = pixCreateTemplate(pixs); pixSetAll(pix5); pixCombineMasked(pix5, pixs, pix4); pixaAddPix(pixadb, pix5, L_INSERT); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixaAddPix(pixadb, pixs, L_COPY); } /* Optional colormask returns */ if (pcolormask2 && count > 0) *pcolormask2 = pixCloseSafeBrick(NULL, pixm3, 15, 15); if (pcolormask1 && count > 0) *pcolormask1 = pixm3; else pixDestroy(&pixm3); return 0; } leptonica-1.86.0/prog/findbinding.c000066400000000000000000000140501506303110300171420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findbinding.c * * Here is a simple approach to find the location of the binding * in an open book that is photographed. It relies on the typical * condition that the background pixels near the binding are * darker than those on the rest of the page, and further, that * the lightest pixels in each column parallel to the binding * exhibit a large variance by column near the binding. This is * because the pixels at the binding are typically even darker * than the pixels near the binding. * * Accurate results are obtained in this example at the very low * resolution of 45 ppi. Better results can be expected at higher * resolution. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 w, h, ystart, yend, y, ymax, ymid, i, window, sum1, sum2, rankx; l_uint32 uval; l_float32 ave, rankval, maxvar, variance, norm, conf, angle, radangle; NUMA *na1; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa; if (argc != 1) return ERROR_INT(" Syntax: findbinding", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/binding"); pixa = pixaCreate(0); pix1 = pixRead("binding-example.45.jpg"); pix2 = pixConvertTo8(pix1, 0); /* Find the skew angle */ pix3 = pixConvertTo1(pix2, 150); pixFindSkewSweepAndSearch(pix3, &angle, &conf, 2, 2, 7.0, 1.0, 0.01); lept_stderr("angle = %f, conf = %f\n", angle, conf); /* Deskew, bringing in black pixels at the edges */ if (L_ABS(angle) < 0.1 || conf < 1.5) { pix4 = pixClone(pix2); } else { radangle = 3.1416 * angle / 180.0; pix4 = pixRotate(pix2, radangle, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, 0, 0); } /* Rotate 90 degrees to make binding horizontal */ pix5 = pixRotateOrth(pix4, 1); /* Sort pixels in each row by their gray value. * Dark pixels on the left, light ones on the right. */ pix6 = pixRankRowTransform(pix5); pixDisplay(pix5, 0, 0); pixDisplay(pix6, 550, 0); pixaAddPix(pixa, pix4, L_COPY); pixaAddPix(pixa, pix5, L_COPY); pixaAddPix(pixa, pix6, L_COPY); /* Make an a priori estimate of the y-interval within which the * binding will be found. The search will be done in this interval. */ pixGetDimensions(pix6, &w, &h, NULL); ystart = 0.25 * h; yend = 0.75 * h; /* Choose a very light rank value; close to white, which * corresponds to a column in pix6 near the right side. */ rankval = 0.98; rankx = (l_int32)(w * rankval); /* Investigate variance in a small window (vertical, size = 5) * of the pixels in that column. These are the %rankval * pixels in each raster of pix6. Find the y-location of * maximum variance. */ window = 5; norm = 1.0 / window; maxvar = 0.0; na1 = numaCreate(0); numaSetParameters(na1, ystart, 1); for (y = ystart; y <= yend; y++) { sum1 = sum2 = 0; for (i = 0; i < window; i++) { pixGetPixel(pix6, rankx, y + i, &uval); sum1 += uval; sum2 += uval * uval; } ave = norm * sum1; variance = norm * sum2 - ave * ave; numaAddNumber(na1, variance); ymid = y + window / 2; if (variance > maxvar) { maxvar = variance; ymax = ymid; } } /* Plot the windowed variance as a function of the y-value * of the window location */ lept_stderr("maxvar = %f, ymax = %d\n", maxvar, ymax); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/binding/root", NULL); pix7 = pixRead("/tmp/lept/binding/root.png"); pixDisplay(pix7, 0, 800); pixaAddPix(pixa, pix7, L_COPY); /* Superimpose the variance plot over the image. * The variance peak is at the binding. */ pixRenderPlotFromNumaGen(&pix5, na1, L_VERTICAL_LINE, 3, w - 120, 100, 1, 0x0000ff00); pixDisplay(pix5, 1050, 0); pixaAddPix(pixa, pix5, L_COPY); /* Bundle the results up in a pdf */ lept_stderr("Writing pdf output file: /tmp/lept/binding/binding.pdf\n"); pixaConvertToPdf(pixa, 45, 1.0, 0, 0, "Binding locator", "/tmp/lept/binding/binding.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixaDestroy(&pixa); numaDestroy(&na1); return 0; } leptonica-1.86.0/prog/findcorners_reg.c000066400000000000000000000172701506303110300200470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findcorners_reg.c * * This reg test demonstrates extraction of deskewed objects (tickets * in this case) using morphological operations to identify the * barcodes on each object. The objects are separately deskewed, * the barcodes are again located, and the objects are extracted. * * We also show how to generate the HMT sela for detecting corners, * and how to use it (with pixUnionOfMorphOps()) to find all the * corners. The corner Sels were constructed to find significant * corners in the presence of the type of noise expected from * scanned images. The located corners are displayed by xor-ing * a pattern (sel_cross) on each one. * * When this function is called with the display argument * findcorners_reg display * we display some results and additionally generate the following pdfs: * /tmp/lept/regout/seq_output_1.pdf (morphological operations of * first call to locate barcodes) * /tmp/lept/regout/tickets.pdf (deskewed result for the set of tickets) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static BOXA *LocateBarcodes(PIX *pixs, PIX **ppixd, l_int32 flag); static SELA *GetCornerSela(L_REGPARAMS *rp); static const char *sel_cross = " xxx " " xxx " " xxx " " xxx " " xxx " "xxxxxxxxxxxxx" "xxxxxxXxxxxxx" "xxxxxxxxxxxxx" " xxx " " xxx " " xxx " " xxx " " xxx "; l_int32 main(int argc, char **argv) { l_int32 i, n, flag; l_float32 angle, conf, deg2rad; BOX *box1, *box2, *box3, *box4; BOXA *boxa, *boxa2; PIX *pixs, *pixd, *pix1, *pix2, *pix3; PIXA *pixa; SEL *sel; SELA *sela; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("tickets.tif"); flag = (rp->display) ? -1 : 0; boxa = LocateBarcodes(pixs, &pixd, flag); regTestWritePixAndCheck(rp, pixd, IFF_TIFF_G4); /* 0 */ if (rp->display) boxaWriteStderr(boxa); n = boxaGetCount(boxa); deg2rad = 3.14159265 / 180.; pixa = pixaCreate(9); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa, i, L_CLONE); /* Use a larger adjustment to get entire skewed ticket */ box2 = boxAdjustSides(NULL, box1, -266, 346, -1560, 182); pix1 = pixClipRectangle(pixs, box2, NULL); /* Deskew */ pixFindSkew(pix1, &angle, &conf); pix2 = pixRotate(pix1, deg2rad * angle, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); /* Find the barcode again ... */ boxa2 = LocateBarcodes(pix2, NULL, 0); box3 = boxaGetBox(boxa2, 0, L_CLONE); /* ... and adjust crop box exactly for ticket size */ box4 = boxAdjustSides(NULL, box3, -141, 221, -1535, 157); pix3 = pixClipRectangle(pix2, box4, NULL); regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 1 - 9 */ if (rp->display) pixaAddPix(pixa, pix3, L_INSERT); else pixDestroy(&pix3); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); boxaDestroy(&boxa2); pixDestroy(&pix1); pixDestroy(&pix2); } if (rp->display) { pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "tickets", "/tmp/lept/regout/tickets.pdf"); L_INFO("Output pdf: /tmp/lept/regout/tickets.pdf\n", rp->testname); } pixaDestroy(&pixa); /* Downscale by 2x and locate corners */ pix1 = pixScale(pixd, 0.5, 0.5); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 10 */ pixDisplayWithTitle(pix1, 100, 200, NULL, rp->display); /* Find corners and blit a cross onto each (4 to each barcode) */ sela = GetCornerSela(rp); pix2 = pixUnionOfMorphOps(pix1, sela, L_MORPH_HMT); sel = selCreateFromString(sel_cross, 13, 13, "sel_cross"); pix3 = pixDilate(NULL, pix2, sel); pixXor(pix3, pix3, pix1); regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 11 */ pixDisplayWithTitle(pix3, 800, 200, NULL, rp->display); boxaDestroy(&boxa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pixd); selDestroy(&sel); selaDestroy(&sela); return regTestCleanup(rp); } static BOXA * LocateBarcodes(PIX *pixs, PIX **ppixd, l_int32 flag) { BOXA *boxa1, *boxa2, *boxad; PIX *pix1, *pix2, *pix3; pix1 = pixScale(pixs, 0.5, 0.5); pix2 = pixMorphSequence(pix1, "o1.5 + c15.1 + o10.15 + c20.20", flag); boxa1 = pixConnComp(pix2, NULL, 8); boxa2 = boxaSelectBySize(boxa1, 300, 0, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); boxad = boxaTransform(boxa2, 0, 0, 2.0, 2.0); if (ppixd) { pix3 = pixSelectBySize(pix2, 300, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); *ppixd = pixScale(pix3, 2.0, 2.0); pixDestroy(&pix3); } pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return boxad; } static SELA * GetCornerSela(L_REGPARAMS *rp) { PIX *pix; SEL *sel; SELA *sela1, *sela2; sela1 = selaAddHitMiss(NULL); sela2 = selaCreate(4); selaFindSelByName(sela1, "sel_ulc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_urc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_llc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_lrc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaDestroy(&sela1); if (rp->display) { pix = selaDisplayInPix(sela2, 21, 3, 10, 4); pixDisplay(pix, 0, 0); pixDestroy(&pix); } return sela2; } leptonica-1.86.0/prog/findpattern1.c000066400000000000000000000121011506303110300172610ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findpattern1.c * * findpattern1 filein patternfile fileout * * This is setup with input parameters to generate a hit-miss * Sel from 'patternfile' and use it on 'filein' at 300 ppi. * For example, use char.tif of a "c" bitmap, taken from the * the page image feyn.tif: * * findpattern1 feyn.tif char.tif /tmp/result.tif * * This shows a number of different outputs, including a magnified * image of the Sel superimposed on the "c" bitmap. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" /* for pixGenerateSelWithRuns() */ static const l_int32 NumHorLines = 11; static const l_int32 NumVertLines = 8; static const l_int32 MinRunlength = 1; /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0xff880000; static const l_uint32 MissColor = 0x00ff8800; int main(int argc, char **argv) { char *filein, *fileout, *patternfile; l_int32 w, h, i, n; BOX *box, *boxe; BOXA *boxa1, *boxa2; PIX *pixs, *pixp, *pixpe, *pix1, *pix2, *pix3, *pix4, *pixhmt; PIXCMAP *cmap; SEL *sel_2h, *sel; if (argc != 4) return ERROR_INT(" Syntax: findpattern1 filein patternfile fileout", __func__, 1); filein = argv[1]; patternfile = argv[2]; fileout = argv[3]; setLeptDebugOK(1); lept_mkdir("lept/hmt"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if ((pixp = pixRead(patternfile)) == NULL) return ERROR_INT("pixp not made", __func__, 1); pixGetDimensions(pixp, &w, &h, NULL); /* Generate the hit-miss Sel with runs */ sel = pixGenerateSelWithRuns(pixp, NumHorLines, NumVertLines, 0, MinRunlength, 7, 7, 0, 0, &pixpe); /* Display the Sel two ways */ selWriteStream(stderr, sel); pix1 = pixDisplayHitMissSel(pixpe, sel, 9, HitColor, MissColor); pixDisplay(pix1, 200, 200); pixWrite("/tmp/lept/hmt/pix1.png", pix1, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, sel); lept_stderr("Time to find patterns = %7.3f\n", stopTimer()); /* Small erosion to remove noise; typically not necessary if * there are enough elements in the Sel */ sel_2h = selCreateBrick(1, 2, 0, 0, SEL_HIT); pix2 = pixErode(NULL, pixhmt, sel_2h); /* Display the result visually by placing the Sel at each * location found */ pix3 = pixDilate(NULL, pix2, sel); cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 255, 0, 0); pixSetColormap(pix3, cmap); pixWrite(fileout, pix3, IFF_PNG); /* Display output with a red outline around each located pattern */ boxa1 = pixConnCompBB(pix2, 8); n = boxaGetCount(boxa1); boxa2 = boxaCreate(n); pix4 = pixConvert1To2Cmap(pixs); for (i = 0; i < n; i++) { box = boxaGetBox(boxa1, i, L_COPY); boxe = boxCreate(box->x - w / 2, box->y - h / 2, w + 4, h + 4); boxaAddBox(boxa2, boxe, L_INSERT); pixRenderBoxArb(pix4, boxe, 2, 255, 0, 0); boxDestroy(&box); } pixWrite("/tmp/lept/hmt/outline.png", pix4, IFF_PNG); boxaWriteStderr(boxa2); pixDestroy(&pixs); pixDestroy(&pixp); pixDestroy(&pixpe); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pixhmt); selDestroy(&sel); selDestroy(&sel_2h); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return 0; } leptonica-1.86.0/prog/findpattern1_reg.c000066400000000000000000000140141506303110300201230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findpattern1_reg.c * * This uses pixGenerateSelBoundary() to generate hit-miss Sels * that are a good fit for two 1 bpp patterns: * * a "T" in the banner name * * the banner name ("Tribune") * The sels are first displayed, showing the hit and miss elements * in color. * * The sels are then used to identify and remove the components * in a page image in which they are found. We demonstrate * the ability to find these components are reductions from 4 to 16x. * (16x is extreme -- don't do this at home!) The results are displayed * with the matched pattern either highlighted or removed. * * Some of these Sels are also made by livre_hmt.c for figures * in the Document Image Applications chapter. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; /* Patterns at full resolution */ static const char *patname[2] = { "tribune-word.png", /* patno = 0 */ "tribune-t.png"}; /* patno = 1 */ l_int32 GeneratePattern(l_int32 patno, l_int32 red, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 patno, red; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; for (patno = 0; patno < 2; patno++) { for (red = 4; red <= 16; red *= 2) { if (patno == 1 && red == 16) continue; GeneratePattern(patno, red, rp); } } return regTestCleanup(rp); } l_int32 GeneratePattern(l_int32 patno, l_int32 red, L_REGPARAMS *rp) { l_int32 width, cx, cy; PIX *pixs, *pixt, *pix, *pixr, *pixp, *pixsel, *pixhmt; PIX *pixc1, *pixc2, *pixc3, *pixd; PIXA *pixa; SEL *selhm; if ((pixs = pixRead(patname[patno])) == NULL) { rp->success = FALSE; return ERROR_INT("pixs not made", __func__, 1); } /* Make a hit-miss sel at specified reduction factor */ if (red == 4) { pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 0, 0); selhm = pixGenerateSelBoundary(pixt, 2, 2, 20, 30, 1, 1, 0, 0, &pixp); } else if (red == 8) { pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 0); selhm = pixGenerateSelBoundary(pixt, 1, 2, 6, 12, 1, 1, 0, 0, &pixp); } else { /* red == 16 */ pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 2); selhm = pixGenerateSelBoundary(pixt, 1, 1, 4, 8, 0, 0, 0, 0, &pixp); } pixDestroy(&pixt); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixa = pixaCreate(2); pixaAddPix(pixa, pixs, L_CLONE); pixaAddPix(pixa, pixsel, L_CLONE); width = (patno == 0) ? 1200 : 400; pixd = pixaDisplayTiledAndScaled(pixa, 32, width, 2, 0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100 + 100 * (3 * patno + red / 4), NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); /* Use the sel to find all instances in the page */ pix = pixRead("tribune-page-4x.png"); /* 4x reduced */ if (red == 4) pixr = pixClone(pix); else if (red == 8) pixr = pixReduceRankBinaryCascade(pix, 2, 0, 0, 0); else /* red == 16 */ pixr = pixReduceRankBinaryCascade(pix, 2, 2, 0, 0); pixDestroy(&pix); startTimer(); pixhmt = pixHMT(NULL, pixr, selhm); lept_stderr("Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ selGetParameters(selhm, NULL, NULL, &cy, &cx); pixc1 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 1.0, 5); regTestWritePixAndCheck(rp, pixc1, IFF_PNG); pixDisplayWithTitle(pixc1, 500, 100, NULL, rp->display); /* Color each instance at 0.5 scale */ pixc2 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 0.5, 5); regTestWritePixAndCheck(rp, pixc2, IFF_PNG); /* Remove each instance from the input image */ pixc3 = pixCopy(NULL, pixr); pixRemoveMatchedPattern(pixc3, pixp, pixhmt, cx, cy, 1); regTestWritePixAndCheck(rp, pixc3, IFF_PNG); selDestroy(&selhm); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixc1); pixDestroy(&pixc2); pixDestroy(&pixc3); pixDestroy(&pixd); pixDestroy(&pixr); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/findpattern2.c000066400000000000000000000134301506303110300172700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findpattern2.c * * We use pixGenerateSelRandom() to generate the sels. * * This is set up with input parameters to work on feyn.tif. * * (1) We extract a "e" bitmap, generate a hit-miss sel, and * then produce several 4 bpp colormapped renditions, * with the pattern either removed or highlighted. * * (2) We do the same with the word "Caltech". */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixc, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3; SEL *selhm; if (argc != 1) return ERROR_INT(" Syntax: findpattern2", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/hmt"); /* -------------------------------------------- * * Extract the pattern for a single character * * ---------------------------------------------*/ pixs = pixRead("feyn.tif"); box = boxCreate(599, 1055, 18, 23); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelRandom(pixc, 0.3, 0.2, 1, 6, 6, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/lept/hmt/pixsel1.png", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); lept_stderr("Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/lept/hmt/pixd11.png", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/lept/hmt/junkpixd12.png", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/lept/hmt/pixr1.png", pixd3, IFF_PNG); boxDestroy(&box); selDestroy(&selhm); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); /* -------------------------------------------- * * Extract the pattern for a word * * ---------------------------------------------*/ box = boxCreate(208, 872, 130, 35); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelRandom(pixc, 1.0, 0.05, 2, 6, 6, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/lept/hmt/pixsel2.png", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); lept_stderr("Time to find word patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/lept/hmt/pixd21.png", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/lept/hmt/pixd22.png", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/lept/hmt/pixr2.png", pixd3, IFF_PNG); selDestroy(&selhm); boxDestroy(&box); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/findpattern2_reg.c000066400000000000000000000237211506303110300201310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findpattern2_reg.c * * This demonstrates three methods for generating hit-miss SELs from * a 1 bpp image of a pattern. Of the three, only the boundary * method should be used. The other methods are retained for comparison. * * The SELs that are effective for each of the three methods are * displayed. For each method, one SEL is chosen and used to extract * the "asterisk" patterns in the input image. * * The removal of matched patterns by brute-force dilation is shown * as a set of steps. Not recommended because it is too expensive. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; l_int32 DoPatternMatch(PIX *pixs, PIX *pixt, SEL *sel, const char *fname, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 i, cx, cy; PIX *pixs, *pixt, *pixsel, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1; SEL *sel_ast, *sel1, *sel2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/pattern"); pixs = pixRead("asterisk.png"); pixt = pixRead("one-asterisk.png"); /******************************************************************** * Generate hit-miss SELs that work effectively to identify * * the pattern in the image. Do this for the three methods: * * - located a given distance from the boundary: this is * * the best method; always use it. * * - located on a set of horizontal and vertical lines: this * * works over a range of parameters, but is less robust * * - random locations: the least reliable method * ********************************************************************/ /* Boundary method is quite robust. With boundary distance of 2 * for both hits and misses, hitskip and missskip can be * anything from 0 to 6. */ pixa1 = pixaCreate(7); for (i = 0; i <= 6; i++) { sel_ast = pixGenerateSelBoundary(pixt, 2, 2, i, i, 1, 0, 1, 1, &pix1); pixsel = pixDisplayHitMissSel(pix1, sel_ast, 7, HitColor, MissColor); pixaAddPix(pixa1, pixsel, L_INSERT); pixDestroy(&pix1); } pix2 = pixaDisplayTiledInColumns(pixa1, 7, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix2, 0, 700, NULL, rp->display); pixaDestroy(&pixa1); pixDestroy(&pix2); /* Run method is less robust. With default min distance and * min runlength, the number of horizontal and vertical lines * can be chosen between 9 and 16. */ pixa1 = pixaCreate(7); for (i = 9; i <= 16; i++) { sel_ast = pixGenerateSelWithRuns(pixt, i, i, 1, 3, 0, 0, 0, 0, &pix1); pixsel = pixDisplayHitMissSel(pix1, sel_ast, 7, HitColor, MissColor); pixaAddPix(pixa1, pixsel, L_INSERT); pixDestroy(&pix1); } pix2 = pixaDisplayTiledInColumns(pixa1, 8, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix2, 0, 850, NULL, rp->display); pixaDestroy(&pixa1); pixDestroy(&pix2); /* The random method is the least robust. For this template, * the hit fraction must be near 0.15 and the miss fraction * near 0.10 */ sel_ast = pixGenerateSelRandom(pixt, 0.15, 0.10, 1, 3, 0, 3, 3, &pix1); pixsel = pixDisplayHitMissSel(pix1, sel_ast, 7, HitColor, MissColor); regTestWritePixAndCheck(rp, pixsel, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixsel, 0, 950, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixsel); selDestroy(&sel_ast); /******************************************************************** * For each of the three methods, choose a workable sel and show * * the action on the input image. * ********************************************************************/ l_pdfSetDateAndVersion(0); /* can't have date in a regression test */ /* Choose some working skip distance for the boundary method */ sel1 = pixGenerateSelBoundary(pixt, 2, 2, 5, 5, 1, 0, 1, 1, &pix1); DoPatternMatch(pixs, pix1, sel1, "/tmp/lept/pattern/match1.pdf", rp); /* 3 */ lept_stderr("Boundary output written to /tmp/lept/pattern/match1.pdf\n"); regTestCheckFile(rp, "/tmp/lept/pattern/match1.pdf"); /* 4 */ selDestroy(&sel1); pixDestroy(&pix1); /* Choose some working number of horizontal and vertical lines for * the method of generating a HMT sel with runs */ sel1 = pixGenerateSelWithRuns(pixt, 11, 11, 1, 3, 0, 0, 0, 0, &pix1); DoPatternMatch(pixs, pix1, sel1, "/tmp/lept/pattern/match2.pdf", rp); /* 5 */ lept_stderr("Run output written to /tmp/lept/pattern/match2.pdf\n"); regTestCheckFile(rp, "/tmp/lept/pattern/match2.pdf"); /* 6 */ selDestroy(&sel1); pixDestroy(&pix1); /* Choose a working number for the hit and miss fractions. */ sel1 = pixGenerateSelRandom(pixt, 0.15, 0.12, 1, 0, 0, 0, 0, &pix1); DoPatternMatch(pixs, pix1, sel1, "/tmp/lept/pattern/match3.pdf", rp); /* 7 */ lept_stderr("Random output written to /tmp/lept/pattern/match3.pdf\n"); regTestCheckFile(rp, "/tmp/lept/pattern/match3.pdf"); /* 8 */ selDestroy(&sel1); pixDestroy(&pix1); /******************************************************************** * Brute-force method for removing all instances of a pattern: * * (1) Create a hit-miss SEL from an input pattern * * (2) Do pixHMT() to find all locations that are matched * * (3) Dilate the result by the original input pattern * * (4) Dilate a little more to compensate for alignment issues * * (5) Subtract the dilated result from the input image * * Note: step (3) is very expensive for a pattern with many fg * * pixels. If nfg is the number of fg pixels in the template, * * this dilation is doing nfg rasterops of the input image! * * To remove matching pixels efficiently, use * * pixRemoveMatchedPattern()] * ********************************************************************/ sel1 = pixGenerateSelBoundary(pixt, 2, 2, 5, 5, 1, 0, 1, 1, &pix1); pix2 = pixHMT(NULL, pixs, sel1); selGetParameters(sel1, NULL, NULL, &cy, &cx); sel2 = selCreateFromPix(pix1, cy, cx, NULL); pix3 = pixDilate(NULL, pix2, sel2); pixDilateBrick(pix3, pix3, 4, 4); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix3, 850, 450, NULL, rp->display); pix4 = pixSubtract(NULL, pixs, pix3); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix4, 1150, 850, NULL, rp->display); selDestroy(&sel1); selDestroy(&sel2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return regTestCleanup(rp); } l_int32 DoPatternMatch(PIX *pixs, PIX *pixt, SEL *sel, const char *fname, L_REGPARAMS *rp) { l_int32 cx, cy; PIX *pixsel, *pixt1, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1; pixa1 = pixaCreate(7); pixaAddPix(pixa1, pixs, L_COPY); pixt1 = pixScale(pixt, 8, 8); pixaAddPix(pixa1, pixt1, L_INSERT); pixsel = pixDisplayHitMissSel(pixt, sel, 7, HitColor, MissColor); pixaAddPix(pixa1, pixsel, L_INSERT); /* Perform the HMT and show patterns that were matched */ pix1 = pixHMT(NULL, pixs, sel); pixaAddPix(pixa1, pix1, L_INSERT); selGetParameters(sel, NULL, NULL, &cy, &cx); pix2 = pixDisplayMatchedPattern(pixs, pixt, pix1, cx, cy, 0x0000ff00, 1.0, 5); pixaAddPix(pixa1, pix2, L_INSERT); /* Remove the matched patterns */ pix3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pix3, pixt, pix1, cx, cy, 2); pixaAddPix(pixa1, pix3, L_INSERT); /* Generate outputs */ pix4 = pixaDisplayTiledInColumns(pixa1, 7, 1.0, 15, 2); pixaAddPix(pixa1, pix4, L_INSERT); regTestWritePixAndCheck(rp, pix4, IFF_PNG); pixaConvertToPdf(pixa1, 100, 1.0, L_FLATE_ENCODE, 50, NULL, fname); pixaDestroy(&pixa1); return 0; } leptonica-1.86.0/prog/findpattern3.c000066400000000000000000000134271506303110300172770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * findpattern3.c * * We use pixGenerateSelBoundary() to generate the sels. * * This is set up with input parameters to work on feyn.tif. * * (1) We extract an "e" bitmap, generate a hit-miss sel, and * then produce several 4 bpp colormapped renditions, * with the pattern either removed or highlighted. * * (2) We do the same with the word "Caltech". */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixc, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3; SEL *selhm; if (argc != 1) return ERROR_INT(" Syntax: findpattern3", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/hmt"); /* -------------------------------------------- * * Extract the pattern for a single character * * ---------------------------------------------*/ pixs = pixRead("feyn.tif"); box = boxCreate(599, 1055, 18, 23); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelBoundary(pixc, 1, 2, 2, 2, 1, 1, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/lept/hmt/pixsel1.png", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); lept_stderr("Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/lept/hmt/pixd11.png", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/lept/hmt/pixd12.png", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/lept/hmt/pixr1.png", pixd3, IFF_PNG); boxDestroy(&box); selDestroy(&selhm); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); /* -------------------------------------------- * * Extract the pattern for a word * * ---------------------------------------------*/ box = boxCreate(208, 872, 130, 35); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelBoundary(pixc, 2, 2, 1, 4, 1, 1, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/lept/hmt/pixsel2.png", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); lept_stderr("Time to find word patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/lept/hmt/pixd21.png", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/lept/hmt/pixd22.png", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/lept/hmt/pixr2.png", pixd3, IFF_PNG); selDestroy(&selhm); boxDestroy(&box); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/fish24.jpg000066400000000000000000003124171506303110300163340ustar00rootroot00000000000000˙Ø˙āJFIF˙ū“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀĪ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?öHĀÎ{՘¸ĒËĀã­XSH ¸ÅT›âĻ’m‚ŠK>yJ æ@‡frĀÃĮZŦ]ŋŌ‡”ė÷ 9‘ ÄŲéŠŨFë\ÚJD„Ö¤R7—דCv'˜eî ųĢÖ¸ōëá$$Ÿ”VĨ›åŌ„îTeq×Ã0U{fŲVîp`pk)f9# i„ĨcIîīÚŗî.wŒ~u˛—ã§4ž^SŪĄŗ'&5d(äŽ1QÜĘŌ§'éøTާgéPHr¸ö¤ŨÉnæfų#“9÷ÅmXjšų_‚+.uÃôíK(AíYŪKa&ÖĮO-Â:}EV‹įrzĐÖx”ƒĶĨZ€œ*ĩ;š)š͜JĨ+æL÷Å9¤ĀãŋZ¨™ŊĒĶŲĢ ĘåT5ÉõĢväb™7Î ƒÔ΍HÆ=jô7­ ČjˇCôâ˜FIúԑą Ķ¤ŋ0槅rsÚ˛ĸ”Į&{ĸļáĮ–īUtk\~1M&œMDÍų ĸÅ'ŨÜúĶ &œŊhũhÆh_zpÜSŠ´â}(¸íGĶąÅ€ŠN( š)€sO(#ŊŪôãMö  8ühĶۀޔSE:€ŌáĨę3Lö cĨīGđҚ(úŌŌŊí@GåI֜i Đ)ô ( Q@qAÉ éÅ%4úQŠuQGų4*)i1@ÔÜúS‡4Š?ŠŠ3@)¤ uĶNĻ͍¤Sŋ†ƒMįš3ƒŽôę:}EQŠSE&(Å˙×G8 øh˙õQGņPF)sIÎhūozpéMö  h†›ŒtÅUā}jŋžÅ˙SRŲEâÆ@ûŖŊA"ãŽôøŸcCOŊI;Œ‡~õūÔĒ>~j– :Ķ^,ī>ĩĢ˙Žų4žfI4Āāg= A%ÂFä/Íô¤ä–âzøëÛŊTē#¯J†I¤œŊ°*ŗ|īÉ˙ëT{A9 üœÁ=Ē8'y_i8Į' ŌĒrŊ:SXÆ~÷¯OĨ.næfē™fOAÆ}Š’jB¤|Į°Ŗvr:ž•RX‡œŒ>īŠ2¯bX.öd‘ƒš¸ŗ,›={VWoĨF˛ŧReN¸ĢLJlčTdŸjrđ9¨ŦfÓÔņøŠšEãÍž¨|g×Ŋ6eų­(RqK7Ü÷ ftŖŽ}(œ:šXŗĶĨG7āúĐI6Ü&ãéÍWn\{UŲGɎäUU=aqxHöĒ1Ę{V™7¨íTîžųoŌŗjڈožßtO°ŠžAö↘&ąu@|×Yûa‘ĪSÖŗLŲ8JŌŗ ã€ÅŊé2܌m ĀÅ8\Ũ[Ī™˜•h'Œב™ŠŖĐ7a2:“JH#§Jæėuī0ųWckv­q} ›vH§?íRÕ&™b@ąG¸đŖŠ5™y}V쓿bFŪĄÕī–T[uę§$ū#18Īq3”ēļ~"¸‚`v~tÚnĩo¨Œ+âLō‡­ppT}M>ĖKŪl;˛ŊqÖ¯`…F™ęqH2:m¸ãé^zēôÂOŨHŨ9ļ,ué0ãÔSfʲz¯¨¨ dČn´[\ĮsåīÛžju´‹ÜII “Ôt¨zāŽMZG“øUX{ƒ@˜æeLVTŌ´¤€:žÕ}—{yÅUuqųW+rŸ’ĐŠ aĮ­E‡”ˆĖ}[˜+ēwÜ{WEåG*(Ú8¨ĨEI‚1ÎXé2K ķŽŅÔ¨ä×Oimēa=ë>˛āū•e¯T|‘°ę}+ĻR…%vk¤?R ‹'–=Q˛/!/üz $‰ŽdËr,jh°ˇ•)Jŗį{i wJ>觓Åu Įä¨bÜĀõŦëũnŪ=AtøOvũcŸ,ząė+RÜcĘ]2ĪAŽÔŌx4ūÕ§zĐ1éāsLŒÔ™ÂdŠ6įĨ4Ԛ%SŒJIė…5J‹í+ælO™ģãĩ<ôĨŠlīNĖņīO^•@5‡CԜõļF))94É>å=E6N˜íHtPO"“8Ĩ†S€ŖühĻüé~”œRŠĸŠCLäc)sARßÃGԌPM0 Z)„ĐņĨ(dįŠĻbĮw$sV– ÉĪįRےŗ#™˛ũ•ŝˇÎĪēaž{`Ķî5čųœú Ɣ0č¸Ŋ@‘|üÕ)(Ģ!ŠÉliiI<œH ÃŠŌą…¤›jwûĮŌšyˆŒŒvūuģáÍQ„†ŪQ¸ļHaÖą•hų¤ô*5.ė΍ŖXĄÚ:ĻǁûÁĘ§š¸DÆwbĢ%ÂdŸNõŌĒĶŽ‰”gš{_ēŧģ“EŅ ųĀ~ūčũČGøÔū!×e‚ac˙“Ž´kŨrŅëú$?f<ųXî 9iX˙ACĢą”į­ŽĢBĐí´ˆtėķ8˞ˇ-#zšĶ—ZĶŦ qFGPO5ÆAeâaŽ$]>ÔōT}ō+¤ŌŧĨØbYckŠWœîįéZ&ØEģ{¨Ķŗ×-/Î-RâEÔālŠ (⋠vhīÅīëLqKKILR=:Ŗ?zϚpéL&€ėh#څŠqįŠm4ũęqĻ÷ ņž¤ę3÷ųŠJA×4@<Ķ1>í>Ŗč~”ėįđ  ;TdwīOZ%û™īLÆ*AQ/#ųÔšĮ4Ž2AĻT‡îÔFuë›nŅļŧŠp.ĄB:̰#ōlŒÔ¯qĒ˙hę ö$ķÕs—å 3ÎqÉ<ņZšöŽÚŒeģŦ7ˆĨBŖ §ĒŸn˙ZÄļkénĨ[íQ,îä‹Éhe„.Fx*s†úŠæ’q•nŒáR›–—ë{ß§nš[Ü<š=ąÔ5p‹$qGæQ×ŸÆĄÖ IĻjŠzúĖļŪXō ŒĒœ.Nî=zæˇ.Ŧî,!ļ0x,l-â ČŅ+į÷75ZņFŽ%ĩąÔo/˃œ0[uûĖŖŸ 9ŠqŌŨ¯3ZucÎĒ-¯{ëώÕōĨ˜ũ>hõ?ژ—>ÅU÷^@?+ĒĩŸ¤iQiBŪ2XõwnŦŨÍh/ŨöފqåZžF*¤g?seĸūŊn?Ŋ%'QKÖŦæJ)JZN˙Z(éJ=č¤ū*Ri)€§ô úR÷Í0ŒĐąëERËJ”É÷Ģ–ūĸ›*ƒúŌD|´ÚæąĘhŸŠūTŒŋũz†6#éÚ§Ü Z,nŖ‘ĮOâ>ÕÎį÷Å}Ģ­k´n…žéīX†™5”ûžōžwm§9'¸Čq€OAÚĨ?9>ƒœUHŨ°§×ymįŒe“jŸZŌäĨvū•\íV&MųúbĢ7­$ĀAšņāÕøcųÕŪbüY­yER>aŒšmØHI }i œˇZ˜Åōüŧ’zū4‡ĮZ¤1‹Ô1Mšm‡œƒúR7 OĩW’LüĮđ¤Ũ€Š/}Ínxl˙ŖÉū˙éŠÅh÷ođŽ’ĘļˇWĶ,}Mc=ŠŽæ‰ęséL+Æhķķž˜ëA`ũÖ˛ĐĐUņĢįĢoQĐĶãaĐū”ôb&—3ŪŠvV ŽÂ¤õj#Ę ôę T ˛…ÉP…˜āw5™ŽAaĒDåÛh8bcTõŌ_e¸<ąĪžŸ m2ĻO­äô‰;žģĨŪ€ĸuņûÅÛRÜKmi“…F aÛøvÆöÉōÜú1"¨ßøvæŌä,Iû”˜ĐšQ¸wúІäž%sĢžVØÎ–CYžCjRŸß\ȸÎ?…}…t:‡,´Ī™S˜ōŌÉË~•ū$ÕĸZĪĻ(š1Đerz}§Š¯ŨČ])Ü˙ŗž´*ƒ×rcʝŲÜÆ€ÚĻȍwZ—•ŌeAĮIūtÖÔõƒōũŠķq=˜CÄ;û°oî5įG\ƙëúW,—:ŗœžxTœĮƒZaįâX/āoöŸ#ķÕZė~#RLØÆ_XŲÆ“;Oŋ8Š"ąT3O“ūŲ¨Í÷’.§üÅæ{Â˙1 QđGåVՔŽĩž,ßxj”ŽŊ¨—O畸Ô" Q¸ū4sÔ_gņ@hMîF_ķŦŨiĩîĢ"9ŸAŸÛzÅûæÛKÚŊŒ™ĮôŠü$Ōž Áô?ãVá× Î&aĮQČ­5 [‡&\÷ĪǞûoōWęcũƒ]p|Ûļač§]íî Žđ€>cæņŠër§…*GĩC‚Č=Ēž=˜ų ]&ÎĘî9ŧ2´‡ƒZĸΈ)ęiđøÛ*¯\Iž+hSQ^e%`´ÕĀëÅ)#đ­.0Ī4´ŸZ  ž1LÍ!<â”s@ GŌqē†āR¨ãŪ€$ž´ŊŠ;ĶÅ'ņSŠ;Ō29Ĩ ũę;PÍ<ō)ƒÖ”ByôĨ^”ĮÆOˇ4āqÅH)[‘MĪ4áLG'P?:† 9iüSæ¤ÌĐÉĻKo ĘysF’/÷X*J\Æ‚“kTfÉáŨßsi–¤XÁŖ1ÃŽ$Š0Ē >—ĩ%ļENŦæ­)7ķŪāúŌ¸Ĩ™˜īōhĻŊNū*){}i)EvĸŽ´ŸÃGJ( íIũhĨí@jgzwĩ'ņPŸēgî÷¨ŲGNõeū)Œš úuü+rķŒzTģ°ŊFÃøQr=úR$ÕˇA€{šŽä{Ō[Mōzô¨oîÖŪFæ?u{Ņbē'šŪ؅‡lāëŠĪžy'ËšÎ;v¨äß$ÆfåûúS™N˙<ÕXÉģė40#=ĒcßĶĨMxMĮŋjI2îô-ÛD+ãQĪ\wĢĐ1uĪpzû ¨TđM1š™¸Å^Ŗō4N=˙Sķ'𩙉Œ“͍Ŧé$i$ÁnĒUiIZ Ëģ’ÜtĶō1ĶÖŖÁ sĶōžŋ•jiļ<Ŋp Š)87Ŧ¤“Ûhņ§ī[Š+ØT˛ÂąŖp$Õæ‘bŒŗ2€I5ŠjiĘD6ÅüG֒ÃBNíåbŦúƒČä@ė‘ôSëNą™ž×‡%XU%B‡qägíZšUšûW›•3ƒØ“[K IGc596kˆ¯ĶéOãž 8œ“ĀīT§ÔÁq°ķ×øEr<=.Æŧ˰Đīw¨îZ+k1Îč=i¨$#sHÛĪ>ÂĄ¸°k—Všv`?‡n8Ēúŧ-¤EĖĖëxžōᮜ|Ē~\Ôŗ‡Ö´UD>čFãīãŪĩXemDšF“ĒK¤@mŒcž$ÕĐ!š/–xe ¤Τŗ‚(ôōíRŖ$ū—$PË?ũŨŊÍyõåˆĄS•JéiŪ%k‰[Ähem°4_ss[^Ô “6¯˛˜øeéģÅqé$šFŖ%ŧ…ļįF^Æļ›M–P.U?T‘zŌŽ"Ĩ)ķJ7ķwÕų %W'{įĩrvZĩÚ7‘+˛ČŊčElÁĒaĮø…uĶĖŠIÚZęŧTЏĒĐŪÛˍ¯S‰Pžkēa-bôĒÍ÷ŋX$bĢÁ̏Ū>†Ÿ84Š0z÷¨Žr#ŪŊELĨep&ŦÍ[JQ€ņķöĢļķ‰F?ˆuĢ"ŖŨĢ!5}æ--Ƒ9‰‚ŧ$üČËōˇøč4É-oã-aröŌŊmĀ~•Ŗ­hņŪ#2…Üy*{˙õ뇞ÎëN¸,›×iá‡ŪZâq•'Ēē2iÅųt–3MÅĒĖY āūUØ-–VéļA†ĸŌĨ6QøVÎjĮķ­•$÷wQƒN4nöãڛæ/ZģÆ:ϘÄ~44‹Ž*<ķTš{rMI äS…0 dæž);f€i€´P)x¤QE†Š Ūôv§Rc"€!nόāSØTZ“5KT×tŨĶí:ėVąt )ÆHôIúUÕá?/fūŌĶ-ūaÂΧąbØ?ʀ=ƒBņv‰âƒ1Ņī–įČĮš2•Îq÷€ô­Äûĩâ˙¯mމŠZyhˇI0‘Ûø™Hã>ƒ^ÎŦ:w  ŗQļ++]ņ>“áĢDšÕî–Ú)b6Ælļ3Øf‘â]Äp´F ĩ_ž#o™sę#ō f¸_=Q˙ĪcYēFŗ>ž˙b˜°LásØæē !k+RŌž×—A‰@üÅfčĩą“n÷GD|›øBΊ–Eėj[{XeAÉļP2[†ĩ‹áëÄr-.×+nÕÔĩŠ‚íĮ Ž5§*ŸS7ƒēē3åŌ1>}*ô¸¸ëõ­ß¸€’;úÔRc¨§,žX;d-äųÃF߆jÔw?ņzŊޏëSyHG(ϚÂTÃ?Ā ąĘîFjvŪS-5Ŧb~Få>ĸĄ’c?$™öĢĩ‡Ä¯čÆS% ›i⃐Eh[]‰‡ūuŸyæ‘ķ&Hî=*ŧ7jH Á÷ŽEYR—â#jcU´WJŠÃ=éĢrŽÚĢpšôá8ÔW@gMám2˜FČįœĢQEeuŖņ+ÁÔ…Ž€TLĀäÜRŖ֌žUē*Û_ÅqĀ8nęjI9¨Ļļ†WÉoī cßj˛ÛOöXÚ%<UúŅÎāŊđŊ–ĻŠxŖËĘU@ęĮŠŽÚŗÎ|­>6™ŋįĄáERˇŌŽ.\K¨ĖĪénô­ØaŽ$ UGaK۟’üCVKņī9l|ĮŪĨŅNēE —îŽ2jiÎFŖ4"ĶĀĮ֐Q@ ڒá zPZ ĀÍԆ€GņP(  ŅGjJZ( \7Ä_Ũø*ÖŌęH. šCY— Œöõë]ŲĒWö6š…¤ļ×ĐEqm ÃÅ*†R=ķ@áŠúo‰/E…ÜŲ÷oūĢt’O`xÁúՍ>¯‡bÕâ f°'~9ũÛuüŽ gø‹āŒrÜG'†nÖÚĪÁ,ą‚zĄëcų×ŖYø~+O G Ī3ÜÄļŪCÉ'Ū`GZ`xÁŨTé~<ŠŨøKČÚū÷QüĢã]ūģ§xŠŌ[{ë¨,äˆyB)0ûŨ1ÍpĨđߍ!—îÉcv|¸?+…{ÆÛY/ŧiwoȑNŽÎ%U”ķžÂŽ yXņ?ˆáōõ[¨5m.ã9†âe’H˜īCčzVo…|I}áC¨éŖt‡ähŽH•Ičk¸øOáŋ ęđ\MŽ@w €FŗÜ…I˛pN=ķ^•eđ¯ÃV~+_ZŖŠSž;e#ÉW?Ä8ũ3ŠÚđ‡ôZƒe:­ÚĻfĩfųã˙ī]`éXúNƒ¤čōLúvŸoj÷t­,sÜÖ°ũ)ėRŸģ@¤=(‰ņGà øĒáŽo-ZļûĶÛžĮo¯P^Qâƒ:ˇ†ĩKMG×Éq<Ĩ¸!7Ī?tŒ÷➈ëLš%–ˆôqÛ­;áY|C&”ŖÄv–ö×i…DŪfāSÆöÖūi‘Šúë\¯ŽōŽâģpôĄJ<¨ÎMÉ܊Æå%¸0ˇ”õé[öSŪÛ>Sį^¸<×3k ‰uö€™rÃë],̤e­ļbE۝u$AĖm ƒÛr1XņķŠ"’˛!` ^>Rjū§,W s‰G ÃĐÔúŒâáŽԌ`(÷Ĩ(¯‰¯'cBŅĐtĢ cytÅÛVKã=F+“‘›ōŗ<œ!Ŧ+Ų‹Ũũš#ÉÆOÖē{‹R‰ĪNõĖiŠÛdšâEU˜“ęMcQZÉõ™+ÂĄ;}RĪÚfÚîō}M?SÔŅķĒ6‘ŋøąPYč—÷hũÜ}@'“ŨĄ¨š[.}ēÖ߆‘sč9§Eq%ˁlm%™¸äŽ­m3–‘a§ũãŽŨļo;kQml=BŽ8ĒpŠkËBÕ4ĩf%ž—}æ6D…ŊĢmĸŠ!§™ĻcIć59‘¸ÃˇJ˜áéËYŨú˛ĶH­.‘jJŠŖã­hA¤aTmŒTķÉįĩYˆä`WbI+![[¨Ęüĩ!äŌâ˜ĨZj€zÔŽ;ÔYÁö Í•Ū™Ž~IOŨqĶ>õ¯aėtnø¨įSہÆ{ŅRn ˜č-D¸ĻĒļķĢđxjĩž+HMI]„âĒHŲ~)ĶKLU/Īæj€tc5ZëKŽ@]Đw­@:N˛ŠF5,ÃÁƒˇ{)ŦA=Õˇˇ'nõĄ=˛\xoīĩDÆđ6ÖüĩyU0˛ĸīo@.ŽĢûØØ{ŠĢs~ąČ. “#ūZFx$\€G$`§=3Yēž‹Åš"G‡fXãšŨ,W"wOđ`ö­Ā-ÁļuyœarAĒZ€ËHYųi$åųŽvkI­$ƒā°ÜŦĩŠoyŦ” ’;¨ë•ÍOÖ9ĨûÄŅ•îõ:ė¯Čę ø q˛ÔPe/˛}k*CU8Q´ŸB˜ĢąÍ­9ˉGrVļJrøoø•tn[,‘ÂĢ4›Üu`¸Ģ"ą‘ubß4Ņ(úV” (<ۏ˛]p“}Iޏč)#įū”™Åh1ô0´gšĸ›šp怃֒ƒÖ€Ŋ%74f€š=ŠšŖ4ėŅM"@ >õã?ū,-ĨÅöƒĻÆÁã&)Žwāäu Ë&Ŋ˜ķXŪđõíė—wZ-„÷2ŧ˛@ŦĮŽôÆyv™ņŌŌÚÆn4§gE Ls¯ q[üqđô‘îšĘö6îŖkĪ"ģđG…ˆÚ|=Ļā˙͞˙…:ø^Ũ÷ài¨ŨˆM>dņ–ŠeŦø’ûQĶ‘– ‡(—ƒ3Ķ=ëŞ04Đ´Æ9Íü[RPÜ,ŽT.‚sĪs]Ư ZŲ]Xj66‘[Å(hdÆn‚qĮJķHJ@E#Ø;A §ķoŒū!øĪÄZ”ēE•­ÖĘPZÛ#yíŽĖßĀq_JãŠįüQâ­ÁÖ?mÕ&ØdȊ4MĪ+ĐõøĻ1đ¯Âzö…a%÷ˆ5+Šnn‘BZK38GŽ‹éŌŗ>*čÚM÷‹|3>˛’ĩœÂ[gTr¤ļ\Į?Xđ_Å}GÆëZAáiŀl5ÔRnōAūū@—5sã—Ú|+grŗi¨C)p3ĩrA'Đ õ4ÅŽƒđŦ@ˇ:}Ō mß./db’ęĀãŸOzÖÔu†úŽƒļŸ>Ÿewm\Á>¤zšæįđO„uÉnõC¨\XÛ X°…•‘†~úätíõĢOÂßÉâ‚]VkĢĩYb&eFÜN19 Pđ‡Œ4ŨNÚ;!< 4yJüŠ&ĶŽ;gé×ĩyˇĮ侗\Đc´ķ^F†BąC’ų 9Ā­ĢčÚžąsᏔŦė2&‰Ûl Nŋf'¯?ZÖøđãPđöˇ>¯ŽęŸÚ7‹‘jÅŲŧ´=O=ûP‡ÂkOZx:?øHæĻy @—2Å`ĜûÚģŅԘ8”v ķšŨ¤ĨÍ0ũęwđĶ[֜h~õ™pš|ŽŊEiŋzČž¸XÁaķc ´’&vļĨˆ&ō°ƒQ]J\œt=ę„RK+†sÔņWDeĪ=éŲ#ļö3%9öĒ’€×ĩ^šũŅ$ÖT›å$×+ãîCâcŒ:ąöÃĖpOâkjŪ "úV]¸}h}Ĩ-Đį=uŖKŲGÍîLÉXqŌ – fú ĘŋÔŽö/îÔö^ŋ%†Ļc“ʸv)ĀY8ú×JL›Ą÷iKrHīĀ>ĩšĄŦ¤}EG0]áBã…oi`å0oaĖ›‰ÆJęt5QČĀÍdÍhe‘Ąũ+_L­ˆQĐ˙*§đ—JüĮG]P1Xí¨En€[øPrMVšÖ•tĶėOųįßĮšŽ*˜ˆÅō­_õšÛtˇ,ę÷qÄ @3HŨ<Ž2Iî-§ŲåAū?ũjÚ˙„Iˇ…ŸyጚĖ˙„Š ə †VW ŒņœW%gΚ¤ūKüĖäâú‰b¯hī4Z{ooē @Ģ˙ÚVāŧÖL3ԗR}NX‰ũÎÉLœ•ÍeÍ+Ęųwgį5žŒšæØÎUtGYmâ4–@‹k+6?‡žFú¸šFŌ€qÔzUo @džYą…Dōđ}M]¸Čž@Ę:Vĩ`×PR”ŖvWķN˙¸ÃëI6ŠmhBÍ'Í×häã—¨ęžT›-ö—ΏAX’n’BÄäīÉcß50‡ríąÕAŦÁsp"]ËģîkfÅpä]l žšŽæ bįŽ9īW%bĄ;îZ'¨ĻõūtÍŲĨ ”Įz–ËÃŊ@cāՎ´ÂFpERw%ĸ¸:ŨŒRôę( AĪz:9=*Ž-ŽŽ0ÃŊ2቎ũfé÷ĸ<Ŗžĩh4™*šRVgDeˌōJ‚*ežlmnW×ŊHЉzõėjšˇxø#č{WŸ(NŒ¯Š-.$Á+WpfĀLg+͏­—a]tĢŠī¸*Č?Z•JãyĀZÜųęŠíLÜĪÉāSD œãŸ {ß“Ķš’nÉ`î…NágÔô#ņĨe<ŽÔ‘NÅ­Å‹^ÕĶįŒîCëëųֆŠŅJ6–eGqZWö?iŒHŸë§Ŋ`§™˙h‹†Cķķë^tâéO]ŒļgDÖĐž7F§Ū™ö0Ÿę¤uöÎEKÉsn˛¯CרÔŊĢŗŲS—ŊcTU r#|ƒR äN^ũ–Ĩčiōƒĩ?dÖŌ˜Č…ĖDũü{)唌‚¸õ§4i"a‚Ÿ¯5^Kw_šˇ=pqRũ˛ÚĪđ˙0×Öą4č?āUÕėäŨ'ũõUo4˜’9•A$0ĪJ°ģ€Îū}¤L­¤•ĪņŽŗãMFūækH­´˜cTŒ.I2ũã׊ΏøáëŊr[énīĖ2H]­Œƒ'įÆqūs^“Ļ閚]ŒVvVéomÂÆƒ )Ë|LŌ?ĩüv n’'AîŊLגü:°ƒ\‡^đíÉÚ/-ƒ#UYO ødWĐz•ŋŸcqī—ĄČ5ķįÃ{yâPąDCmôë^Ҋ1Ō‹Íx;ÁļŌžŌŅŪiemķÜÍ÷æo§a]­<ĶO\R(§ShāŌĶ)ĀĐ‘Š^? Ze09Z÷ėĐaÖ? +§(h Đ ģǃ%Ø$åTqõĒđĮĪĩ+ØåŠ&ŨēÛ¯i¤HŖ%¸¨—g ›ypg“jš1X…N7ëИÆė¯w#\IĪcÅ*ÃÁQ×֜TB€ÆLāãšē-€1ÃwŦ°Øi/ŪKv•ôE(×Ģy†Kš7Ę3č+UĸAžsY•ä‘×€[œûWRV܉lA?3{UfPÁüj́Ī|TjĶ$ģĨëÁ<‰˙Ôõ ԂkĄFĘr ũkˆlôëZzNĻÖįÉ~c$mĪcD¤–ĄĐė …C†%qÔæž÷xĘĀT/C#tü+:ߝĶĢžąúÖ>ĩĒ™OŲ­Î# Ãŋ˙Z˛įUe¤øЍ“\øĒ ) ÛîžLüōÅPÉ{2yöÉŗ•ëX“@ tj(ķælîs[Fœ-ʑ›¨ÛÔé$û$ōFJ~ë9ĀnNkĄÛm§YGpĄßî(˙=Ģ›ĐŦ<ĐgĀę>™­MR$‹ĘÚíÆp7TũZæ'dŲVYZGÉ,Xõ'“L$z´āš#ûĮšŨŌ´€fYŽxî î=khĸRrf߇ŦšÚÄVŨ!ÜAė1U|V~Éh%WÃÉōÖü2 kžņ”ÖûŌĄų0zfĸZrIBČáˇ(ųäĶ›§j¯/ÉéZÚ~˜×`3ņ=;°Ŧî–ŦåJâiVfæt˜î'Cũã]lsJ€MĒ0 `cŌ­!"ąrmšÅYŠSÛ֛žô)Č÷ĻŲcëž´Ŋ@œ{UE<ķM'Š{ŒūžXÆ}*É)ĘOnÕĩĨÎgˇÃ}å8Ŧš’5ĩmŲá ßŊTK¤ĩ. āT  b ŗVUÄōÔ‹CV•ČÜYKa?ŒyĘ=tšeáģ€nâA÷ĢžŒ­.I­B/Ŗ4?†šE;?Ĩ-v–FzR qS3ڀ(4-ÖĨ ŒĐDŌc §ĐSÂüĸ O NĮBšŽ[Ãŋôßk—úēšæåÎÂŨ!Bs´~=ëŦú`E ¨ˆũjÁ¨OZC#ū/åR֙‚MHSRu§ƒ@zUI,íåœLĐDŌ¯Ũr€°üjãTxæ€1NxĶ‹Ūœ(ŲĨ¤Ĩ ŊQ@ F)i(´īéMÅ:€åE'AKü4Āāæ‹(=iŠĄëV[į$~UVV#;~‚ŗ“ęÎ2ĩåŪÅ<ž´iÖâyNĒ“b,ŧ§§'éT"×<‰ÃČ0yÜØÍsPÃĘĨOkS䄿–†Ė -īîwÁ\Õ§ųÎQ´?hžKŦcwĩĄÉÍuNJöB[#ĘsߌW90kC$-ÎŌ}ē×K4ņD0ãíXz˛™ã3lee}Esmĩ´j_t…ąUä=ĒIOîęšäũ+A ’ž2Ž2§¨ĒŠfö bÜŅîhĒÔā`bŗ%=z‰Ą2žŸĨH9¨ãËá~īaéRĨRēÅB>˙ÖĻn•9ĒôQE (ĸ€ )ÃĨ– Í!§Ŋ34 zSę*2hö¨ČÉĨÍ N4I“íNašhJ}8SE8R)žžÔķL=(¸ČĨ(æüčŊū´ėņLīOhh”´”´RPM§Syī@ĩ;øi¸§gŒĶ„-‚j' gœ3ŸĨ:pQÎxÍBáeĐô#•Ž&`_N×nqÂ/ŨÖŗŲ¤Wļs[ōi˛tģ}{â¤0GmH†e=ûŌŠZ4ãĖö3Qm’AļÚŨTŸ”}ÍN-ĮåJl[ÎeëéWHØ0=ŋ*ķŸ=wyiÄŲZ;F¨‡qÜÖ.§vnŨ‘?ՃųÔˇsŧ“ŧJp€āŸzĸß|úWU:qŠ´QœÅ‚@Ú'!ß⥐lčp*[hō†FüéËß|Ÿy+BˇÍúŸŌŖŨæ1üš™†ųúp)ÖVos2ĸŖžHôī[h‘{J˛ûMÆöû°āũŪ¤ÖÜÛÉÚ~ŊjQpF"DĀ`RÆĻI3Ž+Š\ˇēĐŲ++°r@ŠŖ`~éĪŌ‰×ĐRyjøČüjŠķŊV¤ģ įúÔÁĮĩ4DŨVFüyĸO4qŗøUē˛[ÅūaĘIœfĸ“×Ĩ2YY0ZãšæüKâ ´¸ã6Ķ[î~<ŠTīúŠPŠž[ę6ŦŽt›ą ĪCifž!ĖĶ"(ęY€¯1ojWŽeĮ÷bPƒŸÖm{d\5Ũ­íÉ^~øī]^ËĖžsŋoéÉ ŠâN›`B߯Jž ŨFäî[ˇˆ˙Īķcč+Ÿąņ>mX´ģˆwTĩ ņn˜ãæûBw9„˙LÖR§Ų Jûŗ[lĀeįųŗ˙,ĀãSŪá‰bz}ęĪW°Ÿ˜Žį‘œįW!™Hʕaę9¨ŗ[•§Bęqî•H§ŸĨA'>ĩmWäŊ"‰bõ=ĒOŋõĸÖw$Œ(<Õô…FH֑Í#ČVŲ@ëM?!ãĨ\ôũjŌBŖŠâ­č´5JÅY/Ėå'ŨO­@Åä8ˆĄm$ëĨj(ˇŽ åMqĘ“ŧŨ…fĘ[™=kV1ĀĒPÜF\€waZ3ŋl ԟŗ_ŖJÄØšHÅ)sÉ¨ÛĄÅtkØd7„ĪĨr%ˇk‹(P˛‚#]=ÛgU¸ĩ’&Úę)KfLÕՋZ}ĖfŨ!û˛"€ŅˇqWšëšŦŽíâåūԊ<\:‘PGyŽE'‡tķŲF_ëū‡Öa´u~@›KSĄÄ.$rę8ŗÆ1š¯sĢŲFā™7į ĨģVzivZĻ.EÛÍ*ôc؏čjUšæČl™ …z,Ë(~¸û´'Z]’û؛)ž­÷˙i1üą ąr ÔՅ×`'k](#ĒÅ1ūU|ލ@ōäŗ`yÉV֑bÔ¸ķ>Æ}ģR¤īyI†Ŗ Õaģ ã{˜Zĩ!›ÍōŨsũåÅVˆK˙- ˙uMZZŲ"Õû ČÍDcÁƜT™ĻšÜc2ĀķĪŊqéŌF:SJĀ7ũdu5:ä;ŽĮš<ŋŸ>´ĀP0*JhéN AKŪ’ŠVéQsš—ĩG@ (ǺÍáĻĶ6€ Đh ô 4œTLĮ§z=hj)ØâšhĸŽ”PE PzPŅMīJ(§€)1@ ĸƒÅ”´”f€š3MíF(ųŖ4ĖQ@‡ŌSyĸ€GlShÍrĐI^Ŗ‘Y°ÂÄįĶĩmÎ2ÄÖvpųéŽĩQW0ŠU™!TûÜķØ ŠŪŨŌO9ÎįĢ'—oŌŦDĩĪZ’”“} “ ŧd~4Éąå—ė5ccÖĒ˓ ‹ž<ū@9ÂG™#uÜIV`z^*Ã(ö¨džīŌĨÍߖ;‘nä ryüNŒ  ōqôĒŗ1ķՐ4 ԁŸÄÖЇ*ą ܈ Fī]6bÖŅ™_‚øÛôŦË4ųŌüąƒŪĩ.uĢXÃŗņŒ(ÍM芍–Ŧ˛ÜÉíV`\!=k6Ęū ŗˆË•<V´_ęÆ+dŪŒ×›ąņä‘éۈĩM7Ŏ­tÆ**ČÍę<SĐPŅ„'<š’ÜæBO§0äŒu¨ŠtZEfŒ`ūŸZËÔ4[OäžĩŠpĘYrTûĸļp˙ËđĻmßķzÖiĩ¨Ú8‹ŋ rúuܰ6xIxŸãLö‡˙ö+wj¸Ė°z?ĖWY5(ˆį§֍FnJ]™Îi:ö“Ē€°HĢ!Å' ŸäkmmŌA…NGĨPÔ<#§jīš ōgvh~VĪō?Wą˛ņ/†&ųŖū×͇RŋëŖ_§֏ĢŌ—ÂŦRæęm6p€Æ7ØlŪBGŨaÕ;×A§j6ZĨ—hųĀųã<:ŸB;T²IŸ™Y~ëĩ.›‡Ã÷*qz‰kĻä‚ĮJԎÆ$Œâ ŗ”Ļo•ĪŨ#Ŗ Ņ­ ã-‹PH€€œĀĻfŸ ϞÅũ*᚝R<2Ŧ‚#ĩQŨ‡ĢļriMŖ—Šh.ÕVį$㠀GZXIŦ[íR;a,@ė9ÅqVoEŲQ˛Wf[7ÉķuPųĀįÖĩžÍâ$¸ÎyâĨ‡LļŽBÂ>s‘žÕŦ  Ŧfõ2­­YÉōųaÔÕīė ŧÎÛø&ļā ãˇÕ ÉV‰‡)FęoôuNĐŲÜ}Ŋ+u%öŽjܸˆ9ŨÛ§Z­¨X˜!ķ•÷+Ąĸ%™Ę^7Ĩ•×î‘Z֞!™#Ešm¸Ë‚k*3ō§| `tīZr§¸”š:+mj ų 2?enⴁâ¸,–ōC‡B9ŽģOÔå’LFĶ҇n*eĩwÜՅž¯Jzį°Ē)pOĨMöčãû͞c7ÍbË Īėi#’;uĢ–ōCšvJŪaküEËm>ÚL*¸ã;yŠåŗR7ÄvIŽŖŊInĘā0lƒĐúÕŧgĩk4Ē/{SD’Øōßųéâx[vo^4;@9úķZK­x.Đŗ#ûĒ3 ëĩ­"-cMšĘ^‘ēíaĐūæãÃGCÔŌ b=ÖŌđ—}Üū=)|+ŪÔÂQqwGeaâī ĻSE÷„¯ôފ _NŊŽŊ‚CũĐã5ĘÛø3FœäI/8ĘR\|;°õËA8<ū”á8É^¯hēĀņĶĩIlŲÁÜč~"Ņ?ãÃPiâ^Dg‘ųŅĶĩíR'ŲĨģç§Ķ˙¯Ut5S¤•ŽåyĻȊy#‘ĐÕ[FÚė ŽĘį’ųŧzSE§}ŽÄ^ģūÔ}JĀy‚@<čˇc‘Ü{ÕŊ"ōū(ÄWpKåôË!Ü+ŦaÁ¨Į>ĩ“§­Ķą>Í't2„NôĢĢČĒĢĮãVŖ­ącÅĨŒâƒĀ5@Pš´Ší ÍHžŒšŽrã‘Å!¸°‘íĻ#æĘ×V<JsŽFjáRPŲ“*q–į9 ũåĻQ…ąĶÍ^A­x$Ihß+ę*ibW¯‚*ˆĶ9<ëWhē¸ ŒĩŲŠŌŽ›š1ŽyëSÕ {ļßäŨ'“0éũÖúž>íCMnRw陿žMEHĄôđsLt4ķ÷hbœA šCČĄūí $phÔQEQEQEQEH:QQƒO4) )4ĖĐ1Ĩ ŌPFhéÅ!ãę)2)hÔĶ÷¨ĸ€ (ĸ€ÔPÔĒ8 Ÿž)´P § m:…&9Å;4Ęss8@äœŪ°¯Čûģú Ŋ}+d¨éüë;žãډhŽz“¸‘)$āÕšå&8â“üĒ%ÄiæŽ8÷ĨÜøßą‹Æx¯34ß"ëųÔÅģŗ’)Ų”1F<ĪZmĩ„’MŅ‘GRÜÔ?h/ÕƤ†ÖIg$ĖØö§ŌÚ1d¸ 1Ŧhx PË(Ø0jiíŖōXŸvĒ@mÆHæˇĩ}ŪK˛[=xî* ƒŊ•į‘VhzĘ ž$ų0*˙zģ~$č-Š"r¤õ9;đrŖ‘B˜ß…ūíZFcÉEĢNˇK~"´FFČæ*i"dr떡ÕۅÉĸ0ģņ…ČĸÕû¯Ä~čí҇Æzͤ‘7õę:T˛"`pšÅ ķ0BãŒåWēüJI20éžOĄšõA1&ėžŊĢObÆ6áyĒwōɿɖãžsÅd•F÷_qMXÁšYüÔ¸ā•éN„Ō 4ĖĀ l~•~[rä ËÜ`š[-&7|l‚lô‚æ(–ov$ČėĘāųėZĐÉϜfsÛ ¸Ĩðžd7VũˇFû–†đĶ”gÔ¯ûJš'‡Šzîlš—CZŪâÄ Tx”Ũ:RČTäĄR?ŪŦI4[čœūúúäUgŠæ.ŖŸöMR‹č‡ÎÖčßmA­Žđ:æŗ¯/ÍĖ™ūāVf.¤~7œv#5n yŖpΙ>ųޘN4×ŧC”ĨĸؚŪŲ¤pHÅmÛÄ"ØāûÕhF #/šéV™×fīšĘ­w2á‡dĘĒOū•0cž{ ”(pJį5 °¸06Ö˙VC[Ұq\ü‘c wĢē}ÁŨä1˙vģ0ĩŦų%ō6TSo,`Ŋˇ’ ˆÕãq‚ J)õč”q‘´ū¸K]E|ũ1Ž!ēĮ1gŗ{WL7 ĘTŒŽ~`i× ņ´Rĸē7 Ŧ2Ŧ_°_hį~›ēæĶ?=¤‡æQūÁū†ĄĶ‹wŲ’¯B[Ųæt ŒũåäRÛŨĀHËāžĮŠ_í [ô>Cüępņ0Úę}ÁŠ!U'§ŋŨŦũUđËī_äUĶ4ĸh¤%ĶĄŠûqPG DŨ¯ˇãkčŦŋî’*¯UtOį˙vĮĢŋJl֓Œ˜Žœ{75NOˇĮ×dƒō5“¯(üP-@¸§šĩⲠãÆ?{ :‘ŌĄ˙„§KĘKsĩĮ5qÄS“ĩõint ÷,ŸvšīøLtrN؜ũ#5ž-ĶÉũŠAî!5¯2'ž=Íæˆ9É-JŽųõƒšm;…ˆĪŸCVĩŧ†B>ö=Æ)§r”“Ø˛h ƒ‘AĨĻ1˛ÁÄe%Eeô5T´Ö{tÖãŖQWĨÅR—FKTF˛Ŧ¨ ˛ž„RķÖuÍĨœĩŇ ōĐē~žôë=VŪđílŖīDÜ0ÅSƒˇ4v%O[HŅžEF%fh2‚iĪM Ļ=ŠTįĸ–EĪ=é7Āë@QEQO#ŠOá ŅEQEā8ĻŅN€NĨ"™@¤Å-vÍ!Ĩb€;ŌZ=éhĸŠJZ(ĸ€Qږ€ (ĸ€ vi´vÍbE1EĀŪŨjŖ Čč*ÜĮ‚{úÕpGo­*‡wZ<€Ī€ŋΞב÷úqHÍúTmëúW˛•Ûžū_đGĖjw¯­[ļ 9 į˛÷ō3÷sŠšn¨äņ‚Fx╧w ģ—\įXSÜ:HsΧŌĩî"“y*ų†˛g†T<Ļqé]tĒŲ{ČĘKąb+åœSÁcøV1•‘ķœzŠŊm(p9ų†sZ7¯r{3j%CŽž•!%oä{TP:ˆG§­L(sČĪJĒnå2´ØŲīžŊ*2ŋ9ÁĀ<Ō\Fwíô#ŸzvĖFAį#§p)Ni Hzļũ‡°ÁÔÕæéŸAYП0ÂŦ‰ öāW äkÁa¸Lf$ķĶĶڐsųÔRËķä~téę6C(_3ĸ´4¨“qƒĀĒQ(‘Ā?lŲ§–ņ‘üU×rVįGnŧŠ'ŗIP*ŋ¯­I*ļĄ¨}˜`îî(íMĶU=֎Į%vsúĖīo?Áw`VtQ4§‘Áë] ļŠ›ÍÍ÷īîŸ$į3I6žˆI‹åõĨa:N’ĩ=LųŲVÚÕPZ˛ŅāãūĒ–y@Î3î)fVÚvĻdQŌŧéŠ7ī#DŦW#`ÍWÜ$.v`ŒúŌÃĶæYK0nƒĸŠž7<1ĀéÅZŖ'˛ ČTø“Øu­ {Ÿ¨UķĢVöÉųG=Īzģ1ÅtCžĐėfž–į§ū;TŋÅ8į$r? čJΙyšÛę´ú‹vėJ ŽĨJĮƒYˇ:Ļ™w:CĢ7_§­rWŋgģœÛhZSŨpíŸä+˛ ÍhLĒF;ŗą2|ųĢ1`ŠķԟĮ7d1†Âԁšaüë^ÆËÆDū÷Q°UëŸ$ˇøUē6ŪHJ§d͝ZÆ €Žé‰åd_•Įâ* HŽ"2˟í 6>ŖƒųReë$u­+•9)˛¨#ņÍ]ˇˇ&=ÅōGN+&’ŲÜĨŽļąv.•0Ēņ0éŪŦ•% jĨ3'5y‡BæŪ´_ΐZĨ{ YęryŌŖ$¸ûëßĩr8[9Į~˜ š‡%fE›Ņœ´V?ŲģMÖįîΊ>_­kÜibæŅĐOž)ƒí[Mĸ ķķO—ƒ@ 9§M^ I@ IԜj3÷¨ĸŠ RšZpĨĻSŗ@ i‡ĐSé‡īP!ÔÚu mfŒPE:ŒPi(4@ @Ŗīâ Ch Ņ@ŠJZ(ĸŠę:Ņ@ŽáĪŨOZHÖ'$š˜į‰;œĪ9ėj æ)%ģR´č 2“€1šĘiZæ|tĨfЛ%ˆ´¤“ëÖļ­ÂÅĮ\rk:uôũ+B_“Č<šÉ”…Eķ2Į­U•šô`wáiWkäzV°l™jaÜÛŠ'#¯jŠF7ÄzžÕĩ<^dá{åM0¨\Ķ öĒ”bŨŪäꈭîL!ųGpkVÜđ8Íc,k“‘‘ũ+JØI{‡ÎĮp+9Jtž-WuúĄĨräČ ãŋZ‰—$úúT¨Âw §9íéRŧ qĪ˙^šjUžŠšō”ĸĮŠ)’}üôĀÉ5nuØI5MÉ(p9ÎäåĄVą(~2;TMķšôĸHį5hD3ėkz+RŖ ]Œ oŲ¯›2:ƒY^Ię:֔7KeįŨ•äų¯JœX-Í+ëõ˛jüĶ0Â(ëšnŸdĐf{ƒēáúŸ@jĻ“ \Hu+Ž]žā=UÛÛ˜ąÆqéUVĸĻŦŸŠŅ}įō-Îj¤’&3ĪzŦ.å9įŒįÔS%ĐüÍsЧą\ũhGŠŠ!‡ĘŪĖw3–öĻÄː‡īą€JŽTŨĘÜĄwĶ#ˇJ­ÁÚĻžæ g0Ŗî‘~đĒČ#ôĻ3IO$^•Z&Š ÄqFÎÎĒĒ2I튠,•Áx—ÆqÚLÖHûUņ;w(ÜĒŪžæŖ×|OyŦŨB ûĪ•ĨõĮ ÷­ øFĪCE™‡™|Sæ”ôėž‚ēcS\Õ7čŋĖÅÉÍÚy…¤ø>˙Uœ_ø–y[rܡ?Ž8ØWm ­ĩ…ĒCm CŒ*ĒãdÕI¤ĪJ˛Šš¤`ĄąŒÉíZą F+:ÉÍhŒ„‘C$`=Î*8T§˜¯!õæŠL~đ˜Tu"šJ­?úŗVJÆS^/J¸*"ĢjcRû8:k •NJČ2bĒ*îÂnĘæDsX0x–[`Y˛–Õ†•T˛đ­{}BÎ˙&Öâ)°2|ļÕN”ĄĢBŒâödŲųąQȑõéúšu8 4ŅE7oΚx8íIKĶPfŠ9á1M˛7OJãĩ?ŧw_nŅ.šÖpsŗ$ĪĶØ×jĮ)Q֔ęĘ "PŒˇ9;ŞÛŨ&¯Û5ŊĪŨ…ų×SäŖČx<är*;ģ+mBÜÃuH‡¨+\nĩá­ON+{ ]ŨS“üāLõÕiBĢĶŨ-Ę ]3ģĨŽ+Þ0kš–ËRF‚īĻãÂ1ū†ģ@sQR”ŠģH¨MM]ęh8ëNŦË#8'ž¸öŖ4q×Ŋ2€~íFqC1ëFߓ‡­W1 yú՚Bŧæ€(ĒĩČæØœ‘Ū?ūĩhÆAƒyS@æĄPlßÍģt˙Ļgü*ū/R>å! QPQŌŊûĶ›Ĩ40TƒŌ“ŌĐihĸ€A”´R´´QEęiĸšM;4™â’†ûƒŪ œŌŒîÍ5zS‡ņE–€#?zŸÚ™ŪŸÚŒ¤´‚€šiԆ€ âŠOķšQہW+y›Č꧁Tä rđ­°˙ĩUf‡įĮqI´ôG ‰›‘9ĩĒŦÖņüDgéTd_.E—°85jy1īŸZM[rDža,NZŽÛÉåī>‚ŗ€)6GĻGÖ´#í=Ÿ’*[]€b2‹ŋãV !Đ¯ĨTˆœ:Q ģ%njQfƒ  ŸJŦĘCƒūpjhä}84’ œŽyū•ŦDĘ×°f<ÂĒĮ  ķŸ…iHĘ:újĘÔÕb)ˇšëZŠ-™]Mx%_/¯'šlŌ’x5BŪCą{qS†ÉŽ9I9ļ0õhn¤žĒģÌ`v5›,™6O-Ōēƒ€øô5•¨C [gE1KʝŊz*A=BäVRÜ"dY<Šŋ~HųކËT€&⧎zäŧ}$˛‹] NOô‹—ņׇõ­đ˜IԚ{!Tv‰ÄF¯¨]ypîwôœWĄhžkxÃĘvļ8šĩĸhPhv1Z¨S(’AÁf5ŅC.Ŋ ÍKŨ[N’ޝqļvQ@8oSWģUa"§>´x â˛ŒTU‘­Ō+ßpj8\ž•ŨØ'žõ-ĢŠ#`¤™ŦŸvLCÅ<ž)”D~õ‡Ĩ‚8¤0´RÅ-wĸ€E R‘ƒI@1ÉLĶŊ:‚21@z߆íusæã˜}ŲúÕ]/RēŌ§~¯¸ âƒČ#Đ×NŖ ¨o,`Ŋˇh'MČߘ­ãWŨäžĢō1•=yŖŖ,điš W?gw>‡vļīēŲø‚sÛũ“[ųŦįä\$¤RKPXŌ9Í8tĸ“ĩ-Q@)zŒu‚@ˆ”y)9ŒŸ—ÚĨ4qļš8íØĶ܏ã÷M4ãđ¤0S‘JiŖŠwZ@{RšÁ ô Š)@ iÔĶN 4´Ö<Ԋ3ķb‘…ĮJFh&†ԁŠqf)ôRĐE úP;ĶéƒīT”×ĻúûSÍ&(´”´PP;ŌúŠJáŒGÕZkLō+i­đ*” '^•)ks GCō0‘‘ŒãŸÆĒ,†sƒÖļ.íC#ōž8ĒŅYGŒr;ŠŠ’ąĪĘî2+rø8ú}iĘ`ÖĩšĸqTī>Iøk8ÉČn6=ÁĒáš?Ĩ9xÎqŽĩķqĶ­jŽI§$ vĢ'>*ŗ`Ÿ~3W€Čꆊ‡>aîqÁĒwņ„įˇJš+ys`ŽŧUK’J>ĻĸRļ ÕʰLA Z8ã>Ŗ­fųŗŒUØ&<žūĩË^W*ÖDJwÎ~ŋʍVģątn?ēÃąŖų—rj}ēWRdZËŨ­ĩ×ĘC}1Ÿå]ėZ ž°%ģbŅɜE,m†ūuÁImöÉÎ&?_é^‡á{öŽ1Ļ] ’Įƒ×5VJ-5Ŗ4¤õŗKPŅäją´Đę>x˙hWGmqÄK,2+ĄčĘr(’ųV TއĨsZ…­Îp.l $'ĶĒ“î?­sĘSŖŽëņGWÂuŒ7ĄĩËHäNęĄļŒ‚ßJ’jæI!k˜ŪŪ. eų‘ŋ؊K{˜×ĻiÆ­:¯G¯â sųR_pån /ža€:-lų1§ŨE¨ųi’/ū•ˇ!*žĻ6N]}ņŠĐļļ Ãč*´QbbÍ×$Šŋ€ –Ūæ‘d—QÚZÉ<§ –oš_ ÚIĒęW> ē —vXö?AÅGâûÉn^ĶGĩŪŨ8/ęëė-ã˛ąŠÚ!„B¯á^šũŨ/9~F_ü—æCr>M@' `qR_’_Ž„sT7|ÕĖĮ)ZR{ÔFC×ڑ[ĩ1ņšÉŪäŽ)î YŌ‰yÂįŠĒÃŽĮšŋ¤ ûCˇ ČĒ‹wŧ•▐uĨ­qZlRŌÆ}(ĨφĪAĮ­(`N-jļsë@ xéQSցzTDāûT’Tl2 IŠDÎĀQN iÔ) P"ĩõ”…ĢÛÜ&äoĖÅĶofĶŽĶHÔq?ņí1é"áúŠč+;XĶĸÔė^xnĒãǎ­i }™mų(ŋŠ;—Į#ųԃúV‰ŠĖ<Í>øæōÜrŨĨ^Í[ōdÔÎ..Ėq—2š1ĪĨ¤^˜ĨŠ(@A´:P(IŠZ-4ŌŌ@“ڐŌ7Znîp~´ v{SCķLß@?N9ĨĻ+vĨ'Ō€§R/ķ§â€iE H # šQG_„û´Í( }ę;ĐÅ´† @Ļô P~õī ;ŠOâÍ->˜)ôQAĸ€Fh¤ c锠öĸ2ã­fÎŊjëˇZŽüķI ™žaķ6ô4͑M¸Ę\%\ō‰ĪUŌZ•`“žœjŠyÍĀ==*ÛBbžĮ­VžQ„`xĪ5tâe"ē†;Âõį?Jxˆ¤e—īg¯Ö”ŋSVĸÁĒnÎÂB@@é׊ЁžL~@Į°ävíVm›IíÆ)JvE$Er}ŸJŖ#ävíSŪ6I?äÖzn'šķq5#U99üé$%õėE*Œ!í‘Ö†āp;҇Ÿ6ĸš%„ī;ˆãĩA{ĐûŽK íū1QΚ“F8¯J*úé‘zą#Ø×]˜Ô"¯‰×…“¸ĮôŦ> MÍvēp‚Ü€6Ģ7įEHŨ­t7ĨÖĨ‹iäxvN›gNzûĶn Û/*Õ=į—°9ûãî‘Ö¨yđČ0ûžSNM- īm⯟8†m¤?&y jÍ͍Ū#ËsĐÆÛNjYmŖšˇ(z0ųHėk"8.$ŊōŽJî^¤˙JįpKŨ’ē{yyēØĐ×ŅÜŨovĖŋ֔Ū\D1shāz?˜Uä;Ö¤7˛I{‹¨ P2R7ÆĒ\hqÛN’ęĐyņ¯Ę.b$ļ;ũk/Ś^§hr][Í.%QsI˙ëUSö’’ŽbܒmđŧŖUņ=öĒÜÃōĄ'üúWyæƒüĢ„đū‚ Ņ-‹Ŗ‰y„Ģí#?ũjčā…âā\΁؈5ĶV¯<ÚļÚ Æ%˂= ąŽy5žĮÔŗČÅđNqU˜°?β ;ęYRhūPŠ&LgĀĢ~@1ŠV]Ŗ$JĐŌWIô¨’.1øÕÛ|šö"œQpZ—8ŨKHG úR՛Žb˜xÎ)āfĒęĐi–’\Ü>ØŖf  Y—g,Ã>”Ô:¯/ŋøÕo î4ũ÷PˇGØķÄĐßŨú×C¤øö-b Ķé—ēnFCM´~j%Rø†“gg“éMU ä×wnڙ-cã+ÛWĮŨHō¨á˛ņ­†ĪŗknĢū”dr?Ū^?Jjq–ĖąÛƒNŽ•ģHđ+L›$ n\įĨâ¨C‰Í6›š_*J2Cãą´đ¤Ķ@Š4pi´ö¨ĪJ3Í&24¸į>Ôt  -_M’â5¸ļ;nā坎ãSiwŠj˛¯Ęãåtî­ÜVŖ.GĪŪÂúE˙ö”#6Ōˇũ ˇžšũ eîžcŖŠy¨ĸpč‚2čAŠsÅ`j2ž”c4 -Š8 Đ1sIšm8đ(3ú÷ĒōįoË÷ģT’6jĪԁ0‰Ä‘†ˆī‘R­WȈīūáŊ­Y\āSaä(ĶČĨŊ ;S¨}h¤g{S¨ū*hâŠŪĸ€)Ŋéę)Z-!8Ŗ4Ķ@€žh¤´á÷ŊЧƒN)§Ö€Nõϊu-Š(‡īQE€ qNĻ{P7(īUä<ÕŲ׌Öl§į¤•Žcß"°õĢūYƒŽ†˜Š“õĢRíŽĖpžôJ HæžŒČš`ŊRš_’5n‡­NÅe˜āôéMž2H'éM+2GOJ|3eČôéUˇ œEM`äõÍ`ä؉%ĀõʤoŨĀHûĖyúS„ ŊGAJd?:įĢSĄĸEkŒ1úÔXz{ņzSbų˙ĨpT‡1iØnrģ{RĮĮŌ“=zSĐīĀ;âļÃFÄÍÜDÆ}ķH™šŠĻP0GĨ:Øo{u¯Ržš™XŅąbŒĘÛv¨ã×4čn%–`îyØT˜Ę$+Đsš|`đŧķ\Õfå.TtBéBw”NHâ’@:Ô |˛)L ‚jŅĢ ĶķEČÁ&}îÜRŨZJI*Ī­:ÂØFžiûė?J¸Ę­9yŖī­ufuÚĪ ?Ä{ƒWÖ ­§^Įwúˇ;eZ؈ä:uĸœÛŧ^čiô&`Ž„0Č=A¯-ņM´søĻ×I€ģŲÆŪl°¯;Iäãđ¯O–dˇˇ’iNŗØ\oƒŦŪöú˙ÄæšvXsũÜōĨuŌVN§mŊYUĖÔM•’ĩ­Ę˜ņōØ fîøQymöyŒÖ˅oõ‘v>ãŪ’Ė€÷zŠÃVšœŸĘøĮĨ_‚Ņer°=ž´hņIŒdt¤ŽWšIbdÚçqVĀÎ6ô¨pĮå_ˇˇÃķԘÔ[%ļƒ=jÖŨ†•pƒŸ´‘ĪZiXŲ+‘Å- āĐH{Ķ(F“˯øĮ¯Ũ]É‹Ļē,ĨĖå]ƒƜqĪ&ģ˙øĻ×ÃZI2îkŠAņŽ -ëôā&{ƒ4ˇ24ˇ3ąyd'Ģé\؊ūÍišėåYgÖåyéO§kž ĶŦ¤ ea™Ô„!™˜ä“īM}__”9’ö/˜`íLbĢyįŋnJ­ŧÔW–ę;ŪČúe‘áWG÷•ãŋׄûĸÔX’0Y—5ĩŊâ8 Bšš†N3åõŦf!+ÔŧˇčŖĶueØO%Ã>Ÿ‰Š¤üIņV…ĢI=Ā[ũ? æA’ Ų3Đ×Ģøsâw‡f­Ō|ŗVdāŌæ‚)„Õ4Rg‘A8 Ņ×4Râ€8ĻË K ‰ÆU ĄŠE#tĻ„õ9í>W͝_L˜ąŒ|Öî{¯§á[Ęk3XąkģMŅ6ۈŽøÛ܍KĨŪ}ŽÖ9O F}uŦũåΞfp÷_)¤:ĶīRäŧU[JÎûۘ—‹ ÖI7ąmĨš8=*@yŦIÁí!ÜžĮ4ŅČúÖcx‚Äsæ7ũđi#×ėKāģŒôųiûöĩ‡s[hpTŒ†ę(€”%+ƟU¨ Ô-e#d铨œžeķSryCīSki"Žž¨˛´ķUíæYá8<†ÁdTĩmKUqƒīSģûĐi”€x¤'œR B>” jŽ)Ôĸšô´†€hĸ’…/õ¤īKūĩ>í! zPhĸž)J(h ôÍ%4͍ĸ€Gzu6€0åÖ<ä‰1é[Rƒ\ūŠp°Hyųû-K’Šģzũ˛+tũéëŅGSYˇ÷’\ŒÁEŦå˜21ËZ”˙¨-ëũkÔrØæœŽ%ŧÄI:Ņsæ ËČę3XĘØāWJ° -Ō^‹€ V´åē3ŗf3[Iõ䚞6É+Ž@Ģq*ÜČÂ!šGSڞÖ,Ž1ÔÔĘ҃h|ŦŽ$Ė`žôÎ@ķĨō›E †Y äaFrkĪ›E•ˇåGëNˇ8_aÜÕšlãˆų‰4‹nƒˆ.a2Ÿ,zzUĢxĀëSÄš>Ūĩ40ō{ čTÚÔE+• [‰rzqšĩq}jũ…žÄį¸Įá]Wˆ’Ô¯sĪZŋxĒR!ļ¸*{U¸˜×é\ЍYĮPGĻiú|FYˇ°ų3ĮšŠūĮ%ĮŨN9ģ ˛mÆ>ę¯zÚ1žŦ¨ĮŠ}[UũjO‘y'÷GAõ¨n.Ũ÷ÁmäpEQˇŅdž@×U3ķ(ä‘NSoH—&ö‰|Gũˇ`ÃF2pBj-é63q,Y=Ā­˜Qb@Š0‹ĀՍŽYųxž€íp~r?eYJĒēoč;[R?ÎÃB{hN&ģuė“Wė­“OĶĄĩOģ aGā+–[éĩŋXC.Ņ„m3ãĄcĀŽĻiNĪ›ž=kąÍ{(ÛgŠ1w“‘ÍŊøîjŨ´sŽMgAw“Īĩ‡Un mA°ā†SôŦŖR2Ų—š*ĸŽÔÉQHÁéRÔ.sŸją™ūQŠLĐđ}[€qė:T~j?É/ąŠ7¤` 9  ”Ô€æĢyĒ^ž´Ķ{ u™â*\’Ü L3ÍV–HĐáį?JVŊŒĀíī Œ€ŧæ˛Žĩ#oŖŨßŨGå¤Qŗã§ĘOĩ‹’Š)nxĪüGi­øšîHĄic…DP;e@aŒŸzäĨÉEûØīA,ZG'%œˇ=y9§ÉķÆqÚŧšŗįĪŌrü2ÃĐP"ĪØŠãĶØÕlôöĨ^ūõ“GrÜ|ëģąŠa!ĸņĮįQˇÎ1ŠKvÆTöéGŲŦËķamCzuĒQžy=jږÛhę:Š­ØNjVÃkBIŅ$NwTŽ#¸=z§Â˙^ŨŨI¤j—K#Į3/ĖØ÷īĮ­y;8'ŽƒĨ[Ķõ+ŊūFÕņ4$`¯q]*¸Ife†"“ĶSęÜf™æ|ՍáÍ~hPßÄģKpË× :֒žOå^Äd¤ŽĪjS•98KtYã­Gģ|f‚Ė(EëLëŌ¤ôύ¤–E‰Ų°Ē2~‚\œTNę’qŽšŽrëÆ6ˆ6ÁÉ!ėxĢÁmŠk=ėÍ ģrpOų÷­ũ„’ŧô2öÉéM{­nÚ!œ˙ŨNZį’]Z=Stũ– ÃĮ™Đ0˙ę,´ģ[5ũĖj÷&ŦjBöÉáč˙y҇J¨T„]’ĶĪü‰”'%vĖa ŨܜŨę}TdŽjXŧ/§Gáä=~g̚Uë]ÚâN."ų%_FqÍLĢTO•ģpjö3‹ĻcbˆŠrčÚj‹(3ūîjĪz”sÉúV~Ō}Ëäb ŌŦ@Č´‹ūų iv@`ZÅųUáü¨"—<ģ‡*ėRŊ­ĸôû‚ž,mŊžAVväSöŅĖû•ͤŲÉÖôāÕaĸO–˛ŊtôFåkoéāU*ŗ]ItâúĶ]jUЖæÛ|…y"éŸ\VŊļ§ksÂIķtđjÔŅ$ą”nU† eEŊĮ™ks™Ŗā7Ũ,ŊhÜfŽÖ¤%(=ŦOÜņYfÎöĐĄOį ˙–Rú}jK}R)dō& ũã“úVncŠjzŲčhōũ)W“íQ“š|_Ęŗ,šĐi„ĐŗMÎ~”‡ųĐ(išųéÔÁրNÅ6œ(ū*i§wÅ4Đ…- ĸ€ũÚOáĸŠ`-%-€J)ŊMvĻ;w8ŠŲP{fškķČī)É=ęé–K‡Ũ+î=ŗĐU+—Ëí^zķg7Q˜ĘW2äΘ1Ķ5z\ų{{ ŒCķäũYp~*‘ŸËāt#œÕؚI|¸ģōĒöĒę§0į< č4;{ad*īüOîkEm „nÍ=.Á`‡§Ėyjĩ ŽzUģtũhŊLÁõ­§vČŪJČå§]Žqŏܟ¯5fę3Oũjēôôķ^dĸîd˜ÖS#ķŅzR(ÁtV=z†Ė3ēSl˜‚1ĐÖĀ9tžąûˇļæāā1Bđ)ã­t8 V^Ŋ§Ī¨Yˇ“cČÎĩŠ’ˇQ“‹ē&JęĖäto -„¯-ČG“ø?‹mtąŠfNsRĮ÷iΤĻī!F *ȕG ¤vœ* 0uPÚ]üz”C÷ō\éŲŋ Ņ,a FAН!K‹y ”e û×3ĄÜŧO.•p}hHR‰;~UĢ\đŋUų¯vVč˙3wž ” Ô@ŒTĢĪáY@Ĩë@ t§QJRŌŌPĖÔâdŲwĖ‘}áęŊë@šiį#ŽzÕEŲÜRWV"ļ™'„:}Ō2)—–p^ Y‘Xũ} P‚Oėû˙˛û™>hķÛ=Ģ[=)É8;Ą&¤ŦĖI#Ô4Ą˜ˇ]ڏá'įQũjū™ŠÛ^ĄōdųģĄá†*ęú~U›¤Ar|Ô>EĀådŽ}攪/‹~äōĘ?ÜjŸĨ&{V$:ŪŸ ‡Rä,ëČ?Z׊T‘7ĄVSČ#œÔÎ;ėTf¤IŽ=čī@Ĩ¨()Å-8t úŅNĮĶ@ϟŊN)ŊčÅĶŠ¤ķŠwđŅMÅ:€R3Gō ‘ē ZOâ 8lN>ĩM¤Ė…} /˜J1õéQE÷ō{כk­Ũ—bŒŅ.\…õīíS…ų¨ˆųܞŗU&ŠÄōŽƒÖļü>T#&qÎ@ü+ ˆķë[Z_´8ë[A{Æį_ų*Į–= C)V”q]GQŠŲ¨Î:ž†ąH`@Æ3‘]^§0įŊby;úķÖ˛tSw9įF<ŧŊéa€ųœUčí$ūu~+0€qéZƝŒŦf}›$~ĩ*ÄØųzŽĩĻ-‰>ƒi$ˆEŒ:€NjôØÖ4ú˛ž“ŋa•ÎX’qíšŲŠĖˇÄhN95bk.ŨĀ5›v՛EYõMH@LPĻ÷î{ Ɗúc6âŠ=šâžAv÷īJąy_ĨpĒŗ“!ɲÛ]Čč|‚*$rIÅFNĩ4KŽ•hüÉlč‹=p+>âBr: dLņĀđIÍ+`Âēē)Ęå} žõâ?ô‹­>Ôr˛\?EŽ„‘œöŦ€˛xĒØeO“l͏rqZSŅßĩĖ§ĒąŖ JNJŠōØJANãž*Îs÷zŽ”øČķ¨5Í:jjĖc´Éü͈~ōđEt]V*Zi…ę÷רְutNAät\—ģ-Ņ´€sœĶzœĶȤ"ˇ4žŨé_zˇ"“û÷¤!ķ•ëI/AM'ĐPÅąŒdúŠŒ“Ĩ03uK¸ė,'¸•ö¤QŗŗĀ ųŖTÕ5K-VâmJ ßhc0=äÖŊëĮ˛č†Č}ë™Ŗ€ūĶéUõŨ MÕ4Ų ēØĘĢô c×Ōŧœ~6eTĶ;đ5*QŸ´§+3ÃašKXŠäUœUytķĸjrY1Ę6捉ęL•Ü:ÖS‚ZĮf}Öõš~ö’Z2T˙YŽĮ­CœšúĶ×ÍD5ī{’Ž"'ߨųŸžÂžú9ĻŖ‡ũaúQ҃{–ųÉiyL{UU>;æ¤Î*$PÅ“žsQßĖb‡.W ë“V-PÖÔũ‹pHÖ´ĻšĻ“8qÕ:”{ŋŧģ2Ũ]ņ?ŪČČ OÆŊgÃa4/Üé(-.ŖûM´cîĢ•Ô~†ŧ÷ÁˇĶi^ŠkHÕ¤1d‚OŌ¸m ÅÚž—­Úģ]ŧÉgpJ$‡ $0Ā9ŽĖ,į*Ķrz#āqŋ+î}qČ` ŒÅR˛•.,Ąž/ģ"ˆĢY8¯EMYØ`pW•ŗôЏ¨$<Đ!IüĒX…1GĨLŖ@‰GŨ§RRŠkũÚáŧIŋJ×-5tVØO—7Ļ ˙ îZ°õ˨iĶ۞Ŧ>SčÂĩŖ%Ģė÷"¤[Ž…˜:S•# ÕÔČxKRilM”Û„ö§c×̝ššp“‹$ĨŅ(Ü✠5ēÔ8sN‘{SŠ€M&‚zÔyÎ)‡Ži .iŊyõë@ē՛ŨØÆwŠx§éwĸöÉ_øĮ=Uî sĖĮF×ũ-.qô˙­āšâãÕle'É.nN— Í'^}i ĘBúVĄ$I*tVSØķY‚Æm1ËØîxO- =>•Ŧ:Ž3qĶĄ.)ęVļšŽæ=ČyĪĖ;ƒSņU'˛ŪL°?“7]ãĄúúŌÃvDžEČŲ7oîˇĐĐ➱ÚŅ–ŠÔÚp¨(ZCKīE ĻŊE9(œĶ{v{Đ ĮĐiĀĶhīįMīN´†—Ųoz`yoHũĪD‡!{“OŒôíV•BGįŪŧŨÎk"÷#=âŠÜēōā \oõīMjy†$/E´ŧĖqVÔۂ`¸Ģ yũģ×5Īnnģ}E:&1Ãœ~ĩŖ™~Қ÷ō‚p;ÔÄ ŠŠĐšsõ­(jŌũ.¤‡Ŧ œõpF zÖFŖĢA§‚Î~`2RiÃߐ$Ú7.P-'=DœSą¨ŨqUįAåāaƒƒ“÷OSPÉĖ‘Œú“BÕ”Č c5Ÿs#oÁ<ūĨ1ÅfKÍԟ­gU^,RØU@>´íéO,ĒĶž„bĸdØŒĀž=ŋZŗegæŸ5¸AÛÖĄąƒí3s¸ åm‘Įĩ8°­#잪ęgŨŸœzT[°=ģÕøāķO<ķœUk‹FL‘Đ*؊QęT2cŪ°ôĩøŸS~ģ:ÖŸˇŨĒūļûDš…Ū÷×$ė0+H|2fVm¤j4aqڋx?xYģķZÂÕBdÕV]ŽG@:Vv7Œ;–WŊ8Ŧ}IŖģšŲŽcL‘ėsWĨ¸C$§øFj=&›‡ûķ߅sÔMՍē~EŗXr(Ė˙…(5ÔP:ōüi:SÉÍ0Œũ(iŠZF;œg8 *ø¯&‹¨ØČֲ܊ɝ⋝‰ōũ-ÖŧöĶ↯ŽkĸÚčÛÛZąc˛$9ĮĄ'­vÖzšë~8ŋmEĐÂ#–8â#i`¸ü@Ž>AŖxĸîæiKÜĐ6ā'ŌŧlEL<ĒĘ5#ĒZĀ;)S¨šåØÅņŪĨkrŽŦ ¸qŪĢ[¸`ŖŒ{UęūøÄŖ ÂgŽM§ĻŨĶR-Ļ}.G7*Õ-ļ…‰Z€uŠå;Üúv¨ČĮ5Š>šJė›ŠĄŒâOŌ§Ä~•XpųĨĨTŅĻZįĪ\w§•›‹~4C‚0wcڔō0>•ö/Ē;ˆüČzäqšģ´ĮN*2¸“ˆģ3 Ņį‹‹ęZđMčōg͜ŽA%qšŖ˙Ŋ§öåÎķ€2ęŨü Sž7Ō¯ŖÔ ûĒFåcYņTw–Nn§!#GųâēéŠûNhm-Ī‹¯MRNEŦv>˜ĐNt ˙LW§Ō´køwâĩMŪŅž[ĢhÂē¸ŲWŠšē^Ŋ}ĒaHIڀ–›KšG1Ā÷QšāÔˇ2Ēgs`^+*m^ÂK]'ƒdÕ(ˇ°œ’ŨœŨūt/ÅrŖ×\?ĻO˙^ģ›vf¸ę:~ŖĻašhÎõųŠôĪŠĶm˙ŅĨŽ@×R”įĘÚės¤a&¯ĄÜäSZšøKfīd¤ŋN0῞`\8Ŧž­Są~۟sŽCN< æ-üaj\ `•sÁ¯mĢ[ß˙ĮšŨëķ ŠÎT§ŅqŠlËdŌSIɧÛŊfY<ĶĪLSÉ÷ŠH ¨Ē:Հŋą`dO™~ĸ´@āQŪĒq|ČRŠ’ŗ14+˙ļZyOūē/•ŊĮjŲ^k˜ÔámXŽúo"CķĐg¯ø×Mo"Ë‘NU°TzÖ´Uųãŗ3Ĩ'nWē%¤ĀúSąÅ¨€S&Š9SkĻEHxĻ1éŠiØ ģĨ´ČrŌCŲ˙‰~žŖŪ­)drJéL "ûŖå<•úĶnâJÄ´´ĀF;øĒFREĐM5ēâœ)¤rhŊéßÅE€úRö ö PĮųT}ŗß֔ō˙ACvį 2ž˜§ƒĀíA*6ljā0&‘Ëė RÛBeT}Đ~cU V–`Š>fũtVÖKx;zˇ­iķ1F<ĖŽãÆ˙…VIIīŠŠypßi# –÷jį+; OSUFg“Î1UEÆ?_Z“ĖÎj9Ä,ųwgåášĢSk+~čeŊOAT.ôĪĩT‚ÕîæąŧÔųÛŌ%&öD7‘ŨjŽâ#žWāūzWKáÍ*[(c7'÷¨1Ī>ĩgLąŠŅ>Däũæ=Mj'ĩmiŠpĻ“ģ ĢqwB]”âĒĒŦO°ˆÔ(&´+>n$b;šˇt-Šŋ>*D˛ķČ9Áč'•]„ybŗæOF;\­&›Ž¯ĮoZįĩ"‘Oå#ŗ`|Ū™Žš˜8ŽKPļx/_w~Aö5ˋ“ŒW'RQWĸ(jŊ ‘ĮVÉ?ŪĒ‘Œâē >Ũp:W(ĘrJãHšÆ)Ņ2᝭M8$Njrp*ą;ëŲ…5k”eÎEĩŦÎFJ!oČ<+ ƒCĩ 0î›Ø{ˇ5_IJyz5Æ>ķâ/ňŖ§ē č€ôžÔũ¯Ô‹{æ¯jŠq­ZSŸÂ™*äTaę˜Bvgũ3ZļøōĀ*´é‚M>ŪP^ŨĢ5yČeļāį֚M<ō?•5SV4--”Zæ<}ŦÁē…Â]5ŊËĮå@ņŒˇ˜zbēzņīëĢ­kÎŪvû”žK.ŪrNãīÅEI¨FėčÂáå^ĸ„O3đ׈ žˇ4ڄŽca´Č}}é|Iâöŋ™āļÜļũČîi†Ōy ķ’[1XéĻH.dhāũŪIŪßtW T§SÚ5ŠéTÂbi/dē‘ÛÄĶ8Ü>ņ}m"ųkî:S!‹ËÆN}ęĀž•ÍV§;>ŗ+ĀũV•žīq‡îįšĻōÔ§ĐõĻcƒYĻz{’GĖ&ĄĮÍV-— Ša${ŌOVTĩŠųđj@0MB ;TĶK寛<ZVģĐĘurŲbČB{㊇÷ÎiËœä{E:ƒĀĸÄÅŠę‰g.NÆ9ŦėŠôL7ė= iÅ#Å9bsģúÕŲ/ĶųU¤ĸ´8ëá)U’”Ö¨—DÖoi›qîIɨÛC°—­˛įבZ˜ãš’5æ§ÚKŖ+’=ŒI|'a$,8$>jÆđž•l#š†âcģW>†ģą\å°úåõ¸TI‘ß&ˇ…Y¸I\ĘT⤝´Ë8ĪËm=3ŽÔķĨYIÃ[EõÚMÍX^ĩ‡<ˇš¯*ÚÆLž͜cČÛūé"ŠOáhēÚÎņ°éšé¨‰ĒUĻļdēP}`KŦi8ûT>ĨŗĮׯįZ–zÕĩč d§Ē7Ą€k:÷Cļģ;Õ|š{2úÕsÂŗîO,Ŗđģš#î‚:ÔĩΆÔô€Ŗí6ũ2:ŠŌŗÔí¯ øqÕƒQ*m+­Qq¨›ŗĐĐĸŒŠZ‚Ęz’ßŲIuaōŸFŦ^Ÿ1Ž_ŦAnÍŖ+———ĩ ō˙ į›T#8ëQ›ë‰SØâšį§}51ŋį€îuŌ˛ĩY`–<Žâüۊĸ˛t?7 ĢcLšDÜ˙*û×<ĢNŋšŽ÷(@>uĨuVąáļ3Yö‘Å8îÚ­Õ9ՆÃ8>i cįīRÉüûÕP%9.;0ôŽŌ’šâœˇ!ÂĨMÕkQ`u1î#¨ũj‘ŠlėI8¨ŖbąˆĪ7čiū[Gķ?ôŽ&ĩ>%ką’Ž Ĩˇu.ę~đäQHĖ[€r*&„HĀžÜæšĩŦɨæĸĨ IŲrųôώqŠXw=ÍKåĢõ,3€Ļ§gbŖ;Æáf{ŽÄTmŸ9”ũ(‰18į<ûĶČ2į§áG[IŊ(­f]jˇsøWĘų¤éUŪÄ tzŌ›IÜáÆÆS\ŊnŲO’švU•ő\įTV ĮSVtģÖĶõ‹;Õ8ōeV?îįšÖŒ­4΍ĸĸY–xcš#”pU"Ĩ¯püáĢ8 m8P!Œ8ãĨBzņVX|¸ĒÄ`Đ!ĀÖĨ_^Õ úՄ Ö ōų^#ˇlq4D¨­ęĘÕĸũũ”ãoÉ.ĶëČ­)īb'ĩË1ūĩYJĨ\fŽĨfX§îÔ9Š[ĨGß4 SņMŸŠr+"˙H‚āîAäĘ9 ŧs[ §Ē2qwDĘ*Z3+ëŊ8ėŋãÎÃšŲˇ¸Žâ0ņ:˛ŸJc(’2ŦƒÕMT“Lxa'’ŨĶøM]ã?'øīGÍĩ^ōŨnídˇnŽ1øÔę`H!ēO"NŲûĻŽI?­K‹‹-IIhdčåā§Ėrņt>ÆĩĮÕØLwŨ§Qōŋ¸Ģex=)Ô|Ī›¸Ątš_AXķJĸ˜ĸĨ^:ÖenE íßŪ–Ā AM47AÆ€9ŠĻ PQšy5ë@ )â˜3ƒOzAGĩ'Q@Ļcį÷§ Oâ |ŽĩRa°ƒÛŊ[éY÷÷‘˛#šņŽ: †ŌՉģ >Ĩ°<1}ūíØV[ī–<:Ež§ÔĶĢ’Rrzœōm‡hĸœŠ’F– :ŠrÜäfõ¨ûČ{v5JbRŌ`Ŗ-‚k9ąĄ—ēƒÜŋ”‡÷iÎGsTÎī/=Ē(FųUÍžmēĸũâp­ZŊŦˆŨ™Pƒ,ŒU2ŲāWa§Ú´VáHųĖŲį“OĐŧ7‰.20ČUč+ŗK("lk˙|Ņ**­ô7§Nڜ›Z?'cyĢ0A,Ÿ(ˇģ[w%P…`~5 m˛oįI`ŨšX†"S÷ļÖ´!ŌâAķnoŌ­ÆÁÅH?Z膔z\v(cQGŅh˜qАtĒ÷ĖgfĐøųsĶ5Ōĸ–ˆfq;'ĪåROŦYØCžęę “+…⚟xwSÕØmÖ§ŗ8ä[åTūĩÍ7Â[[ÂP֝ᓸšãëšcEíã>‹§O˛ÉP^íČīuįz—Æ/]ÜËũ“ē w9°ŪÃčp+sÄ -4ÅíŒmsoŅüÁšŖ÷'Ōšy<¨‡Ę›ôŽ*؎GËcérė¯ÛSU#%÷_úg?ũˇâ9īMŌÜ\Į9ĪīļzÔļģuūžöw˙zv5´JĩĮ8SīŪ’Dˇ=ëŸëRŽ‘V=e’ŅŠwVNOäsˤŨ;eĻLū&Ļ]›īÜėj÷Īj`Œâ”ą5SzY6GņfhŌíąķocę^‘­áŠ@ąÂŖÜōM]<“yëRĒIîÍįƒĨîE'čMŏõkų ˜Â´UqĀÅŦž§lRKbė:Ô?ģŠåÕ`ÄUąâ/ŲEåÚjķ…?u\“úõŦ`yŠŖv•hÃ$°ZS¨æîņÃG ”eɌr*ü›gąÚ>ōÆĸû< īpÜwü)°¸Â°ČnĸŗnûŠ×ąZ""Iáē{˜Ēu-ú ŗ-ĄQē.ƒŊņP­¸$7qÚĒéęe.h¯u‹œpxĨ>yDģČc´įŽÕEІ46<`Ķoa}(˜Xn0ÛøĶ­âsȆ$ÎCmāUŋėËģ™Œ÷Ķ1*˜E<ķUhĮVĪ>Ž&˛j1ë×ķ3R96žŠsšY I$oŸ Õozš<G'›,{—2…ūuÂQ"†<ąíĐb…ꎇŒJMH†æŠ6“É'۟5ŗ7¨Āõp*[{)āŒäąĮ@Gj™K›O#œuéJRÜēOžŌFiķ Ī÷sŒúV€ÜŲz°Ī=Æj¯š—h ū%9'°"–Ü´#đ{ÔËĄ¤S—2ėHĄÂtÆFGŌŸÖĨŧ‡ĘÎ쓁QH^7ÚC={IÛBųēņḯ<)§ēģ~î1ŧ+{ĩy—ÂĢæIī´įvÚāKž€Žô¯N¯rŒųā™ųö>‹Ŗˆ”<˙0á֙šQZœcĪŨ¨[‘R‘L`{ 2<ô5:T#­Nĸ€T5A›W8ÉRWę•ŲßōöæšvwW#¯Ö­Šų*š}áVã™FI4ėŌįŠe gšny¤<Ņ@žĄ0ŠÁna ŪaĪŨíVĩdē|œāÔÅQķHįœŽÂšT íJÜ úQŸÖ ‘i›~rŪŊŠôP"´Ō8#ߊ>áĪĢMķ“Ú—bŗ”.34éc~"|'§ZŨŌíííã.įäīnNk?Î# ūUbÚāži¤úYˆũęœ°Ú؊_ųlxÖ$—ļĐqÅJļ“;ÄäĢ;Ö´ŒœKS} ¨Y§ŒJû°1Œõ9īIdÍ6 ą$d1ųŗQ™ügĄŽØ´Ö†ąØŲ¸­)ÉÍgŲHŽ@'éZXĒėÔRŸŌŸM+“ց•fÕY;‘ŽsÚ¯OĮá\'Œõ‹ëh^ÛJæše>aŒ¯¸į2vW5Ŗ9¨Ž§ņWĶėg[kV–IæíŠå˜g=× ¯?‚;‹€e¸8ĪDøÖ—Ø3;\ŨMįÜŋŪcüŠÁP “ž3^UYĻۉ÷x*5)Á*EĶü˙ĢㄋƒĮaNlũjØ(ŽÄûcōĒķ7'hĀ5Î÷=Jnëī!+MČëR*’yéۘéŪ…æ[ą9ĄzĶöŪ›šEY›’Zļ;­7ˆ ×ķųŌÜČ?…ēo øÄå­ūËmœ3°ųĢXQœē5ķ\5-Žsj€°ÉĀõ=*Á§jí/ĮŠö/øS:ugžweäđMy׋48ôJ+ T7šœđō‹W8ĄR­réb¨€9ų‹…¸Ā&­ˆ ¸‰ŽÖûĀ֜҃‹*Ā͎š¤6ÎđŸ,ŲwvÅpŠjtÕŽÜ9‘Zęå†h#8xø*z×-.DøčGjî<˜­ žīP’-Ō …V;X[y?m¯ˇjqōØ0˜ÅÕWgŋČKk<YöŗđžõʼnÁžīŊ^ˇģGh ;ŠŅ"9mvŋ(ĘįžqQ&âõ.X‡nuŗ0lí& ķgÃéW6ë/|Ē: ØŗŠ? ÍÛšNā?ŊŌ¨+Â÷Â*N6‘čŨĒâų¯c'ŠŒãvWˆ'u<ŧŖĩhZO0€*@ĶŖ}Ī›æĒĖđîūęs)ē}ÜÖīÃŦd|ÃqÆA¤›”vš•YÂPŪĖ­{eqįšEÎTāV^!Špg“ËÛÔæˇn.¤ŊxÅŦ,`_ŋ+.ĐGˇ­:B‘…fŖ'ЏĘQV‘„”o÷™č˛_–ûŖļīäĮ§§ķĒ’ZyƊėˆN/WMlęöčVL¯U#W5…ŽĪomp­,ČŦHČö1¨ÜųR5ĸÔŧĘBŲbē1€Ŗ$Ķn!18=Ŋiŋm͔Fh˛ņ“ííSųĢyeíœŊHĒ’}OJHģ5ŗ#ØĮ•Ą”ÆAåĮOzX%)!VÚGséšz€ų>‡Ĩ!Jé›ūÕ˛ĩ˜nR˛|ŸC^Û‰,)*Ŗ ŠÁ¯› ܖs WŒh^8¯nđnŗi¨č‹ä\Ŧ29*Ojôđ5V>_>ĸ”Õ^įFO8§ÆE1FôȧíŽķį…ÎhĪáIƒŌƒœP:ķRЍXŠlr€qŪ€,1ĀĒš–âō(“÷˛";Tą&¨Ë:žASŽâ€&ņĢ(}*‚Č3ÉëüęʸĀæĮ85 ¨‘.hPą/§Î)pI WbAÅ'ZšXˇsŒP"´'_ARæ˜Í/lŸÆ€Æi3MÍ) CŗTo,Îķ=ŋž{0÷̙ϓœ{ÕFN; ¤ĖŊ:ā’؆WŒđ­×i˙ ÖS”ŦŨBß%.aųn#ãwĒúTļ×Ģ,x?,Ģ÷ÕO_you—Aî)ÕF9ÚYö§Ũ“WĢÍKbšŒˇÍKT1sŠCœdPz5$pP“ŠuPHhŪ(āĐij0pøõŠ(ώQNώ#ņ UĮ8ÆOJŠ­K‚ĨCˇ==+Î9Yĩ4üƒ§J{ ‚Ŗn”Är”ūøĄGČ1OˆϚB@˙{ Í!u|Ią2i>Grīš|Ŗ3ü įĻM2XÎ၃ëW¤Œ!ŒÖŖ”|Øüiōˆ†ønvōÆĩLŅAje'jÔˇJįäģÉŊúƒŠĖŊÔåšsp˜ĀQĶq§Ė%>SZ÷Äv@âÚi;rTūĩĪË⋓}ĸDBÃa•ŽO­V™U3ô<ÕXáķ#Fa†9onkēŒ#9U“=Â^$[ÉÚåg'(ëœū5Ū‚Íxf<š}õŊÄGvÅ{5•äw0Fņœ†Œq‘ETĸô:hO™Y—¨ tĻæŗ:æũj¤|Ņí‚5]Ė=É>§ŊZ‘š˙=iTw4 wˆü'Ļ^ÛË3Fļō -įDč;ŽõáQG$—ŌJí•B|‘č?ÆŊįâčŗđÜЍÁîO–ŊGųúWˆdFOû"ŧėSŠvŠÔû ŽjRö•%x§ĸ!ƒŠ'vė““SHšŌĸ^\‘ŸŒņÛ5jk)ĸ(.fŠl`gsŸĀs\ŅŖ9ŊęÖĮĐ ŋy+>ŨJûÕđįũę†W˕P:æļ!đ†ŋ¨Á$ēn›(‡MqōŲ^ĩŪøcāõ´PĨÖŋ;\ÜļÄ8Uöލá?˜ņkį‰ĻéėyĻĄęZįüƒ,e¸Į˜rē[ƒÚåüŅ˙hLļЃķÁ8¯rĶôÛ].Ņ-ŦĄXb^ŠĸŦJÛ=ëĒ4!ļi^Ĩîô0ü9á #Ãâ+ e‘‡•šf­IĻ)ōÄ9¨Měū÷­:Ũw͸ķZėp^îė‘‰ļą‘Øå€$“ë^â›ĻŸVVy7æO”zdâŊËVbšUËĸ2kįŨhyū"ļƒ9,˜uë^~+ø‘]g^^ÛļÜeÜõØBūUá–KIũö2=qPÜŨ­–Š"OōÅ87mĀSė`k›ŗwĩ„[6&xČõ¯61˛æ{HęŠ.Nģ|Šéw—ą…Ŋ™Öû‘îÉÍ^]-ŪŪ;v ĒÎÁōŌüĢOo•tŠvípHúŠ[ۘ,ė$3O Ŗ‰ĒöŌ“˛1tiSWoÕū‡=-‰3íGQ°đŨĢF2%š‘v ĪBcŋŠĒ:bÜ#ųˇÄƒrāÕ֎MROŗÄ1l2JWƒŽÂ”ĶZ7§sĸ­XĘŅZž„—vEá-otņ¤Ä3mīNƒKˇs­ąŪd<œŽõbX¤€yQFމ€v˙>Īs=ģ+#ApîĖ ôõŦãVĘÜĮ3PäŊĩfrfô‡Ų°2ąôv>õaŧ´æ#QœˇAM–ÜĪq›WTx†Õ;r¤ÄzUk›9e’1¨H˛)`Ģ*BįO­iuŪÆ×taĘÕŲf ë{™ĘE&á€Tō?úÔۋuŋ[˜G20č}ĒũĨĨ´ąų2§ŨãLģ1éĶųä2…5Ö.VŽåK™.Y‘›$bŅ"鰕ĮãT/ôëQ Eī“ÔæŦÅyįģĨ¯īœŸŋČUĢ ĮŪũÉîhŠ’ÜŌ <÷ŠųœtÁ€û2nY‰Á=vŽõzUˇˇUŒđŧÉ4ēœK‡ˆ|Ā|øęi ¸]ƒŅŋ­k},z‹—žV”%ĮGPéĀÛKm6 x'€{*›b‘įļ9%××5TÜCŲÁä59GĒb…n{ÂjĖĩu',đn•ĩđŗYˇŌĩ™ôûŋ•¯ˆĨ,q¸göįÖšI%wäŸĨFÛ¤ŒDܘÎP÷¯҆ŠČõęræ¸^’QŨRÛLD`uĢ!ō+Í>xŧęļŸdšv70›?ÄŖ¸īõ¯C†Uq•2ņ5ƈl,4Ø<ũFö]Ģ€ÅP}æĮééVfix‡Ä0čđÄ<—ēŊ¸%-­"l<­õčĒ;“X™ņÁķŽõT´DPŠØģ䟨Ĩ°Ķ^+Éõ;÷ķ5ĀRs•…įš{gŠîk3Æ.˛đĻ™ö‹æ\ˑēļ ‡Ôú(õ¯˜Äfõņž¯€ÚŨ˙_›:ŖF15FaxÖ×Nĩļ:æĢ¨ß,đ˙Į¸iÃøā*úWœÚ|Uņ, #3ZĖpq#Æw úā€kÕĩËũrôßęS3ģ“ąĘ ĪE^ƒëYã9äžĻŊė% ”ĄjŗrÖĮ<ä›ŅXõ ?:ÜEVęĘ …–ˆ”$ūĩŅYüt˛¯Û4Û¤âí` đøIHéŠ]äž~ję úƒJøŗáFúŪĘįķ&ĀS$ET1ėO­w‚péųF+âee Ў z‚~#j^"Ú}×ēc´\ŒžĨOĨ&†}6&>úĢT ņëôŽHņĻ‹âQ5ęg;Z)ĮV=ˆ5ÕXŗôŠé@™ Ÿ Ļ‘ОŖžĩ]úũ()FqĮãMíKœq@…æœG­5q>QR~´ÜVfŖ~đb9ĪŽ*õĖâĪđŒÖ6“¸žKŲy9“\ÕfžÅ™žk{y_tĒ„“Į\V•q6Š7“3í–/ģ"đJûÖÆŖ.˙Ü˙z°t•6zĖDđw”9ô5ĪRˇīĶŠ2Ũm‹ΐãlĢÉôaëZk2ūkhĄYe™c‘R}=MOcz×q’ahŲx+' }ņé^ŠpÚ?qIôe¯-OjvÜt§ ^ ۑĪJ0Ĩ:›@ÃŒv§SsšB¨)) ū”\ 斊(QNÅ4žր8sØåwF=)ŅūÕC{É9wo˜ōMZŠOœgō¯2éŊfI0ĮĨVjļã<öÅCˇ9•h‘ũ`_QOŨąĪ§¯ÖŖčsŅĒL\ôÎ*ƒō€9=)WīįßbŽ3ĐTžozŅ ä&YŽ­dßjqÆåSk™ ÅCŠęfT) ųŪąČāúãj=Ė܈åšI䘑ĶĶ) ˆXõĮJbã>†–WÆOp9ފJæl‰‚‘’:sІ\#¨1´NiÃęzTXķ§jčą ę8kģđ ℒЕüë–äž•Āŗ2Ą, Īn+ đ¤ĸ=~ÔlÎIž„Š%ÄēRåš=p3QÔSˇqLÆN;šæ=æ§ ŠpjLPFģĻÚj:dĐ]ÂŌDFvŽwdt#ëČŋáļķĻT†Yø#?;;íĀ{DöÜš7,ŠO“„€ëøÔooP”Ž5@GE¨tã&›GU,ezPp§6“<įOđEזž|‰eɇ˙ĀđŅéŌt Ŋ’ ;Ë'Îä˙ŧy­ų íPÅūŗg;“z˛äHîhsMŒdS@›-E0âĻ´Ą¯˙ {ŋúäßĘŧ8RníæĮĻ+ÜŪĩáĘnIÅäÛVlQ…¯ī¤Ę Ãī42Øf{‡k‰Đ”o3Ŧ?Īz}“Hg”Mŗ{ÄŽį˙­ÅN!oĩā‘cnˆW*Ātüj•I(ō'c5A7Í%v >K#'ŽjIĸÖ\mÎŌéÚĒG{æI´œ‘΍54÷‘Į&Áķ:Ļō6õ\âĻ|×:jĩoRYcx‘&)ŧF 8J˙õĒ–ĄĒÁ=¤‚Ų՜¨ŖŽO¯Ļ*[ɤžØėPÍî*sķų¸ĪŠŦéÆŪôˇ@¨é{†Ÿ $+(ų‰ęsÖ¤kpgíVč‹ģĻŠĸÚi„lĐFއæ1´ƒžÕåŧÚĸG Z48!„ŦãåúŪĩ“ģģvFuĒŊí¯bŌųŠ&`Ų†ëædbØ´ĨŽeyq…UûĄsŌ¨ŲŪI!žÚ˛G#`w*jĘ\­¸ËqÁ˙hÎĶOMÍTTĸĒIĩ YvœôĩIx¤ĮÆî1īQ@nōcSģæ(NŨ¤õĢí$Ûį-×ol×Mõ¸Õ_yäūLé´íWBU—Ö-ŧoÚ}Õ|(éĀĢkVĶŪYžQ#ÂT •ldĩL"Ų¤~Hc2yÎkm9ntáåSžÅhåĀØĮZĪÔ,ūŅķ)ÚũCŠŗx§—Nũj yōpŨ)&ĶščN’’š’c+(Úã õŠ”p:ą¨Ų¤­•ÜPGPk> Z9„RđŨf­ŦšēÍĢ)ũåØ/.´ĢØīŦäd’3ģåö¯uđŠmüGω†ÕšA‰cžŖØ×†ā8Ģ=ėÚFĢÕģ˛m9`?Īį]8lG/ģ-8Ę}ĩëŅ^÷UÜúKpüĢ’ÔÕãņV‘Ģā =ŧŦo+p\7éŠŋĸkiĢéŅÜ Ąņķ¨?¯Đחü^ņ–̧^.…l—‰e't™$œđ;ôšæGÆėÍßü@Ķü=ZY•ēÔ¤,`ąd}į#ų đ-FææęåŽonšæåÛį2Iü}US‡9ú͞įXų›ōŽz÷V¸ŊŋitčA †`:˙*ŨŌ< ˆâmJo3õQä ŸSŪˇî´¨$HĸDXÄgå ŖV+QÁ˙LM6Œ}/CÔO´\O˜ō$eķŸ¯Jč¤Č‹/˜¯pŊX Ą—ŌĻķŖ‹bķņSO$cĐWu(ƛ´JåeŒ2÷§fŠĘ~É1™Õ9ųĮĄõĢ$ädVÍu[ 1sAõ¤Ži3“HcŗIš( ÆESčÅ0~”´`QÛ4ę<ĶŗÎ*3÷ķL7^ ?•9XīÉíLĪ~õîIëˌNvj¤›ãūTHgŋj¯ŸšĪqQ^jQہÎâGv­’čK îRw”āg­bKâ9wæ`Į ÔÕIåšáÎéŽHËqš­åŒqĀ5ŅN”z™šv.ĮâK<ųč­ÎqŠž]UîäƜ(á@÷Ž~u ''”ûfØFz3ZJŨĖŲ°%oâÚqM~=ÍD—īũ*WÜnEe{0+¨“į9Æ:Qq¸§ÜôŠoãŽi&_Ķ#ŠéĸúƒË$‘Tîíî<ĩOåļüąØŦą~fŖ¸‹÷#¯9k9“‚xÖ˙ƒíæŸ]…âMË.O@9ŦČėŪGų˜ņŒ.kŌt & .Ų6ŪācԚ%4ŖcZPr•΍qĀäĶÕpsQÆÃ‚)ۀ'Ŋs\ī,-)5W0ŋE?<°# ä{RS‹Ų€¤ÕWĪ—×8îjG&jŒķœ`w§pnÃ÷>*(ŠīĒæFÁĪniąyüé9™ķ›•8æĻÎ+n xįššoz$ųOZ“)M2㉆qN&ĸféTXÂŧn@ëJXĶ0MGņS{M ļrpÄß&ŧŋÁ˛?Ųe›zL{p+ēøŗqäh‹y[ā‘ĶôŽGÂvÅ48Ė‹0#žMy™‡ÂzųT/RįY Ŗ'*Fr*#ˇyœnōŽāûxVéƒY˛Mwg(ŗŽ8eÎáõ>‰x\ËąēĢåŅ$Į õ¯ ŌkUąęÔjéõ.Ëovų`ĀsĪ_­dZ?Ú f‘ÁY ”.N1ųVŨØp$l!觐+:[sâU}˛t,ŠÚ˛w7‚oŪe;Ûy#žûE›ųlGˌ7#õęeŗš.nfGGąV5ĀU&ŦŦØ|„Ę“†ÛĪ"‘Ž"‚%-åqĩÆNŋzŅŠōĨbeķ)t_p›N!ŠdGa•ŽNAįÅ1´įyâšwP‘ŦqgŊI5ZÉ~ßŦMt›Ö8ĐGĨq“VŨ¯v$MƒÃ†#?‡4œ\tFp—5ßK‘ØļËۄS„߀Į‘œg}å&<)įƒģüôĒËbņiˇ9(ĶKûÆ;qČĨVˇk‹ˆck{• áeMå}ŗÆqīYF wōfÛå’ķ5ĻąĩŋˇĩBŊËGÍĩ‚ޤŸJe’Ü["—ûČCgĪĨYŌV ĨžFķeÜ ōp?ŲŞ˛G”¨P™'ŒdVII;'ĸ0„o)_Ŗ*Ãv“Įö‚Wf2ÍͧØjO=Œ×eR¨§Œ(éY˙`ĩģĪ1˛ ŠHsÆEkXųF3oōå8)čt¸ÅBČÕsJŌ–Æ.ĩk-ĖäËš åAüDúÖX*:ËĀ^žØŽ›Y™žh­-Bŗē_öTvŽvâŨŽ協//ģøąZÁļ•Μ-HĻÔw3žĐĻI!ož§ŒúU'ˆų™__֟ŦĀčEÔEƒ§ķĒö7Ģp6ž$ģVŽsDô(â-QĶž§™$ÎD ę1ƒT'fˆøÔŋz0œwĒp”?,ŒĘžž” tÉ.]QĩÇōfáûQWĀßČę;Õ[Ë#íudqΏ4ļˇåÎ0ãĄėÃÚĒJúĸĄ''Ē{3ģđNŽb›ėŒvËÖ6-€}WņŽ[ãdĐO­iS")ˇusėËšH˛ :2AՉņ&ęīPÔlonĒ=˛„įƒ‚Aüs]ø*­ûĄō|A€9}bžĪSŽSŸĄíHŨķt?Ą¤Fü)¤įú× |É"JČR}ig“|‹žžžõqЊyˆžqštl¨sQĘ9ųz{)ĀÁėEÝ3á†Hh>ĸ“Đ q†Ü08ŠFkQŲJH aąČéČŦļ?>s‘Ū„ĀUäÜ9 ķŽÕ§ĨkSéŸiōdPŗÄb7 ƒT  ¸ā÷Š)´ g­Š’ŗč{c¤ęŋ Ŗ´Œ,Å v”(ÜŦŊĀõĪKĀ6›K{OëąÎĖ3§^ÎĨw)û¨ųčjâ|;â-Oš˛ŪŲEyĸŨe‘^qĶ<և‰|iĸx—ID¸ļ–'ˆī†HĨâaĐãŒūäaåZ„)Fņģŗ]<Ŧm>Y+­Īz'$úV~§!įļN+–øqã4ņF„‘\; Bظ ÁltĮų×UŠŽmĮnFkēģũԌYNÁ‚H™8*ËÖüQ,“5–™ËaČü?Æĸhį×${+ļ˙[6Ū>‚Ŗū×NZĪüô<ƒ^t%8S´vîfäú-Ŧáįj.÷oŲ7äŠī[px‚;<$6(ˆ8_/ ĢZf“ap14Že…]>˛îUö?δĨJŖWƒRčT.ã˜Y~€gü$)pã™J÷ϟÂāyn¤õķ#ĨTÂ1 „7,áv¨ŲžkGFŧ¤Įī—eÕ ÛŋØŦĨyS ­ģ<ŠÕ͝.ī#Iå…!…—*KÕč#TŒ*ŽÅgYŗŨĪbx |Č˙Ũ?ākļ•)(ÚûTũM´ĄdŖÚĒÄLy sĢ?Ō§cMx„ą•ĮŌ¤Œ wÍTDtQ7™Ԋ]§4YÆD#ˇ1JÜé[렌TĮ{Ôfžcņq–- ,•d¨6į€?ũzæô%øvŅŽĐ6Ū‡æ5ÚüXąŽįÁWS›íJƌsÁ 8üEpZ k[*žWrā}Myøõî¯SÚĘuĄŗm,{VÁųļö5v[;anĨãVŽÔš¨,,Ā ąe> jÍÕŠ°ž;ĩ c$Ŗšbp¤˙Jņ&“’ŗąéâ[ˇ/B9Dvķ !ļ˙–üé#’AČ#­O0!âe  RģļŽâAm e—ī3ĮŒVŅŗÜŽ~HčSąbn¯v”I/^§šģÁēÉôg¯äyÍua]Ē&ög‘Â3ÃJ+u¯Ëõ<ķgڕFGŊ9Ā( öëMS‚+Ö>LyíOI6pzԛŋw€y'?D6ļ2)€˛gq#Š’ äÕר<ûŠŒ“ØgZ™_ä ”5ÅúËÂĻŌ~÷qRiúLē‹ÉļeB°fû¸§ĩEc w %*99ãŠŨģŧŽ(EŊĒ*¨8fņüë9;hˇĩސō8Sĩ@ęIsV/4[˜+ČŖŧ|˙]hh{Æįs”b>„ŠÔ¸™Q™”*ķ÷r+'VJEXįŧ;¯%•ÔšuōyúeĪÉq 8Įûk觛Â÷šĄ‹M)%Ģļ"rü…'ŒŅ{ Zūē˛XLęˆĀpĨ€ÁoÆģ?ŌĩHâ•P 9Éũߎ+ õ9/:ļWŅ‘éųđ~ŗiun]EŽ!¸C˙-Sßq^ŋ{ækļÖÉi"ũŽPäSķÛZōũLĶVēGS€eSžFG­Tøaã ´¸aĶ5ĮOšm‘\g˜\ö>ĮŠ)TUéōŋ$Å8žõĻØCenÃĸ/aëVĨ‰\`ŽQØĶm¤;0Ü7ķ§HkąAZÖ&ÆöŽā™m=BT6úĩΞLWcĖã…ČÜ nÜÅ$‘•Šo(įīmĪE4+PwĘĪ3g?3q\’Ą(Ęô´ü‰k]YęÆõČû,¨¸áĪ+ÅK’ōT˛•ŽAY:Öø<­B/Ŋ ųĮĒžĩŦ8¨nbÁ$GŖĄ_ĖVôß,ŽLãĖŦ6Vâ4u9V…NrūēxæŸJœūōY=×5ՎôęÒ\ĸ„šŖrŧÃʐL>īŨ§­Yv¨q´ô=E2#ŗ1Ęô÷ĸļ%¤4f™R1ßÅKڙš3Ū€ž ¨ûûŌûRcŸzwZJP84cšķ9äXŖ,vįĩcŧ­$›‰äņŠŋzŪn"G9cTÖ1ž§5ÉļqMęMmÂI0íéP^‡Š°d¯z§s(9Œu­›˛˛ Īr7ũ)Ō9 )čzÔd‚x84/)‘ÁĪz@G0ųųéü5C%āTd“Ž9ŠYI#ĶŊočvëå—)ķg‚j\Ŧ \Ģö7‚V č=鋲>Đ1Į$­tw8ôāĢīp{ĩ—1|¨Ī‹O–qķmô4ˇzÆøc¸zŲ‰~5SPS”ĮLŅÛ $QGTųq€(‰°XūUViDXõ=z–ͤ“ĘWBŽÕpĻäô%ŗĐ|1¤=Ŋ¯ŸtĒĪ.Tõq]}+•Ō“×@ĘÅąÉūUË^ĩ´ŽæM“ÍŠJP¨*7æŠEŠģë‹ßÖĸF2Ė ę:S,á/Š]9 ^žõFŪŊ äö:# įo–TāƒMꮂ7ŒšeÔ×Še8ÚAãąÛ|Ką¸Ô|o(>S~Ģ cķ"š_ˆŽģÚcYc”fĀãŋá^ŗĒiŋÚ5îšûZ)ĸ"&=CvũkˇŽ›gÍįõ9gĮu}}z*K§Ŋ´ŌÚĪ b%]Jō¤TŽ;ÕíwūOčöWžgŲ¯ Sŋ&LŒ8äĨpZˇÃŊrŌ&šK_‘IʆÉüēūU­Yģ=ĩ>^TÚÕlrmmŨ>=AõĒŗÂŅķŽ{Չc’ŲÂÍדŒō1RYPŠíNæEĮ˜pzôÍK3I2Fƒ-Ų}i!ˆ‰Gˑü륲ĩūČԙ.H eduéJRåKIđjOt<ųš)&!ČÄúŌMŖYés“~ōģ+ļ#ėpkrÖwķÁų‡ŨíZˇ0-änfE ĀnÜ3†ÅyĶ­5/yčhĸŽP]Ë{uYZ틅UĮgŠ­›9ˇ#sŒvŠB‹t(C+ō…āq];]iąxėÜ{ęmįŊWŸä+0ūzŠŠ éAÆ0yöŽtl.î3úŌu5 DŨŖ§ûĩ*÷Ą AīE/j1˙ë¤įKŽ)Øâ–€õîԔäl#™ĶĻ×9ŦéŽ˙}„ā/SP_^ģŨJĮīüĒ!ųõŦÎËæV înŊ+6öįûsSM!žÕ…¨\páJ’99Ģ„.KˇÄŋõ­8fîzW3 É?Cķz×CcÄPį,9ôĒŠJd˙1äsĀŽƒBÔWŒ›dQ{šĀcō¸í?Ėû\múĀĀ/ĨdāœKNĖėîųoįI׃O˜qõĻCŒø ä5ķū—¨Ū$`/VôĢwO˛7oAĶŪšë†i#ÅŗÎ{֐Z“&Sæw.ܜãđ­H?ÔĄnÜ ĨmüÍtšf‘qƒyEë!áEuŌŅÜÎÍč‰4äŸP…q‘N{^—ÍsÚV‚tâfgˤcåéŠÛ‚N1NnėëŖŠ%ā“X˛´ŽrrŊĢfė1€ŸÉkŸ¸œ¯ā~•Ë^vEM”\9ëQžHĮAVp;R˛+ā~•Āĩd4PQŗŪ¯éČ$Ôo™GËøí …NO§JšáHUãž”ķēldû(¯C %ũu!+´‹‘ĀÜÕjŪߑžÜbŽmPŸD‡c[ØŨS°KĖāUPpüz֜Ŗ)YRü’`w4Ë4á|ŠžŗíäæŽ,ĒOZ{jĮ9aŽĩ lô 66{Wü@ļkOéڂüą1Høé“ĀūuëÎ;vŽ?ÆúYÔ4yዙ oL˙yy…{{7sjmÆIއÃŦŧ0<Ō´´U;årø ی­){Í&ĶPQÃFģņ×=ę*S8ūÎÜģVLa€ãĨxÕXúúu=­$×RmZōX fÁčŨĢ.w3ÃEÎį !ƒßęji2P7PcŊKe´Ļ>R­Í:qä[éEC”lķĖ“ÅäÁæEΘ‡Ą´æhØāú˛âĻX@ē*;yĮąĢ‘ƒĐôĨ&ĸLŸ+ēfÕNæK-F9ĨžęŪKœ)1>ãëúVU%žUšË‰¯ĨŅŌËw´k?9čŖ“õúT ¨oĢ?AY’"‚CųĪßbIcõ5ž&aBᏅ<2åw2§BņncõKĶ=ũ´îwŒŗ8įJͤļ/b˜,’ ČaÉĢžrųūV2v–Ī ŦņvnŌ]›ąŧ¯ŪįƒZĶŲ$ļ7Ŗo„!…Įž‘*ŽK‚I5dZ˜ĘœuöÍ\Š `E<õĒpén2ߕ9T}ĪeĘĩ3.Kũ‰ÂĻčķ†#ąÉÜÆŪsmõã×ÕęˇÅ¤EG`åndÄÎįî÷­ŠŽĢcģšģ}JŦždg!‰ę=Ģ"YLsáŽOSô­ČÆ˛5K"ŗ™ÔõįĻīSĐĨ+NĪaMĀ1õŦđąÜM‚û3üdgŸzžOz0ˆæŠ>§C‚OAväFzÔĢaÎrÃŊFÃ8lüøæŸđƒv⭜ĮĮ%Ē%˛ˇŒ6Ųü¤×¯økSmON¸#rg扇oĄėkĮÚ1TsØú×kāû觝ci+ 6Fˀ$ę}3ZП,íÜķsl:̇æę+nĪږģô›-b™eQŒ°/ÛķŽ†Úō×UˇÛÍņ0ČÚÁ¸?ʸˆ"įJŧŧ¸Kuš“P´ ŲģkĢ@#¨×3đÚ[ûoClĐ]“æu!”;æšąYo4gQģ5ūGÃĒ–—(|OđÔz}éŊ‚=°Ę>P:n=Eyŧ,Ųųy+Üū.¨ĢŧΎ?U5áņ)Jũ9ú×§•T•L4\÷0Ē’“Hčt>Væė.Ȏv07ÖˇĩĻąÕnĸ‘ų$ā°\‘ŽßRk2ĪL–æhÍĖ˙ē?ÃnÜÜX[ZÄ°Ā–Ęƒnėü̓ßÖŽ¤¯4ú‰mc&k뛩hč᜝Ė­- P•îĻU™— cr2zÖY™į‚I‘ÛëLđđš)į˜ķ ~nsZ8ŽFš M‹ģ‹ųn NČÁÆcŌąĩ֚‰‡(S#ķŠīåŧ 9ŨvcĨ7VŊma!O'cCō!äŌŗJŌNÚ@´ģˇūÍÚ_Ël6G'“Kkã ÛoMŖ XҜ“"õe9Čö­ÅŌĄ˛ÖڕŽc1œHėÕ/Š|/¤čú5ŨŒ2ŧ“KķI,Ą°8Æ1ÍsēԜŖ+ŨéÚårģ6aézđéfŌÖÛĖžG.ŌuņŠÜŅíĐßj{n Ĩšo‘[ą?JšįO–ËdIØČhč jaė|¨-Mŋ~BÃ=i´ĒE¸-lõ;5ĄwĨ%íÁTa õ,sĶĶkÁ~)K}pi÷sŽŨ@â zųĒŊāCõåēmÍūˇw7ˇ‡äA´ė\õ'ÜÔڕ†#ˇ É`ÜņÜ}:Ö¸zPÃ'ŦRnGͰ8ĒŗIŸé^5Ąü\Ô4¨ŌßÄ05ÜėûdÜûCŽÜ×ĒéúĨ–Ģo͕ĖWž ŧnWr Öˇ5Z¨baj˜b˜‰Ĩ S͞įm”éŪ$šb‘š~ĩĐëYÜ{!ŽéFdķīƒZRz¸÷3¨´R] löŖ9 vĒÖķ ãGSĀÎŦĒÖmXЎU ‡^ĢÔ{•z lccmôéôŖ Å-”RŖŊŌPĶsÍ)¤^Ļ€>{ģΜÜc5%›rՋģßJ1Œ?:Šm™#åękĪ;ŠböQ.OĄŦX­„öûČų˜įžõvõÅÆÕ9sôŠŧ-{˙:Ö.ĀʐZ`‡#ķVʑ€:÷4å#ôīõŠcFžDEę}zTĘM°HP2˜q=ĢsB˛khÚfûŌtäTÚeŠZ@KŒÉ߸Ģ˜Tu5„ęßCHĸāĐįđö¨IØøęPĀsƓČûՕŅDSŠŲČë×éYÛÄ_Ágĩ\iŲn%ŪøĮ'ŠĐđē*i×#Ōæ@MŌí …g“…¨îM'†§˙A¸$䛙ûÕčPŠÉúi#B)Ĩ{̈X(DÆŌ:œŌŋ W™šN3U$hŨH%ēį­$ėkĖj<É™qĮģS’x 'įbŪíPŧé9æšaĖ…ƒĖsÉãÚŦ#ëS[ÛĻĘtđ‚(°X—ĶĮéQ)âŸģå4Ę@yū‚Ē^B$žƒŽ}*ŪEC6ĨD’jĖĩŖšæË`öGQ͈ŨoģãÆ0šĒ ņ$-¸ƒČ÷­Íjå ņQĩ Áî,Æáˇƒ‚qüĒĨŧ,dÛØķøWƒY(U’>—/ĒÕF%ļÄŽCöGŽBĐɡ<í+•˙ëVŅ€lã§jƒĘRå}zVQĒžĮKŠÍšl“žFûîF:tüĒØøøõĘæācZ–+ĢstļŖp•nĶŪš§7ĐÂĨD‘kM´HŅÆ3“’ORMgxĻ×ĖĶPDÉæŽĐG$“[XíÂî8-Ā"°5Iî^pĀ˙Ģ$ĒņŒ×%9WUÉėĨUŲlUŗYŌib—lÛp nüi/­šxÔÜČlrÃ˙×Ĩ˛ŧˆM!ÚægyAėÕĄd^ę;‹Ķ°¯1GģåSīękŅöœēŗz“ÂĘPŨĘų”ũ鷂˙=Ē{[D]ÅGS[ D€r{É5VŌĄyX`°W<(Öš^#~„BǃąĒ5ĖRBmWs&K į"ĒE{-ŨÁ ĸ/'pĮ9­/—ʙ$'qŨŅ-šI¤~ ãķŽ˜MrĢîoM.g+˙ؚ™Ãųq8õ5‘pŸs…­LĮ&ø×–äwŦY\íī[ÅŨļXĸŸœS¯QÁÅN|ģˆųäcņ¨eƒ?:ũâ? Tž6Š#ĩÅKTPšĩ1žô?'ĨW›äpEl)''đŦÛĢFUûž”˧?˛ČŗœgƒRÛÍåĮ4,ŠČîgŦl;ÃŠ! *øSŒŧf^ž•JåĘ×IŽl§vâ¯i7Á} ŗnnƜ2ã¸ĒʂDÚN8=¨a%iúROŠSJIŞ‘ã MgđĪö͌m;é×I#<\ŧj:ļ=1úVä*Đu=-J-FĖFņîrdU*qČ ō1é\īē\Béē ÖrkÆĸŊ9SúŨísķĖ}…Ä8GTiüDņŸü%ŦvÚ{šąˇųbíæ1ęØũr0ĢG!^ qŠ[5ŽŲŲÛæp>SØEc$å‡~ĸēŠR((GdyÍļîÍ8§ģųTM.G)5š‡%ĘG,ī÷Ėį$ŠÉĶæĖN2q€ŪõÔO{V@9ÁĀ9?Jš˛åˇ*Սj$ēž–ņ´/9EũŸŽ,Vz< §ĮåEüXäū5&“?™ųãoŸ%WڍvHƕ/š"ä_īWß:MÜŽƒt/ŊÅĨĖB'.>T(1€0ksHˇĶŋ˛îÜÚġJā#Ÿ˜•~_…pūDšÕ0_å*@Aī]^ˇĄë:$ö“´ÍŪ>§F¯ÖŖFåN͎2{šW&xÜļŨŠs' H˙ëW¯xˆ^Īmh…žÎؓŧtl˙…G=žŊ¨…ŠåØ äįĪŅjÄúd:v4=e—t%ĩ:taēą96]žņ\zÄđ›‡xa@ĸTÆā%ĖĪLjė´kVˇĩ ĩĨ“Šú˙…U‡O„¤^t(\¸āÅtSÜÉūoŗzF0@PõíDĸ Ôi­žīø#MŊÉ,ĻĩĶŦ!´s¤@ûFæ$ūŧÖˆ¯å}VΨTüá€Û’OzŌēŠKsuvé¸į¯o@+!’ö˙ûB`ę€bn¸õĸ8ŨĪú¸6ö1Ž-š %…SĪĄĄĒēuæĢá­N=CM˜Å*•íp;2ô ÖŽ§<"íuvLŖŨMywŒsŽ7OĨz0“i\ĖõoücĶ5ļē˛Žx'11>‡Ēū5ęÖķ$ 2*FA ‘ŠøöīKIáōžĒÃÖē |BņƒäŽ/3íV+Āļ•ŽÜgøOQVÕ9¨IÉŽcž>Ņ|[j Œû.íäáÔ˙_Âē"ß5 […UšQ,nŅ†ãSŗdžÕDe?ėŽôК*čj !c–‰Šãž+d V[ąë1€Gp¸ĪûBĩję-o܈mnÁM>ž”ėŌ˰&ŒĶLzQ@4Pi§ĨiĨÖč(É.tđé, ãŒ‘XˇƒËŒņ‡'Ú,CËÁzæąĩK(¤;ˆÁÎN+‘NĮ ĸrąŨ•IųiyM" #3ü=…[ƒK„ãīsūÕlÅDÚéWÎO)…i¤ŗ–i†;¨Ģëqœ UĮAWĀëÅRš9a×ŋáUņČVÔ?“Đpj{YDŸ7ņwŽ?T.€°fy̚=ûcīˇ<­9áũŪd%7s¯$lÁöĨMŌ?Z¯mžīį< ętŊ'` 0ã¨Z挝ĸœļ ąĶāŽ•_ÅoŲ4¸Gņ4ۉ ͊ėíâH“j…Ō˛ŧS›c “ŸĘģ°ÔԚe΃!ą_.Ö<ņ…üŠ'Ŋ ŠúšŽyH˛†%ëĩr Šå6 yøŦCæp‰Ē؋Í/#Ũ)“'’{Ķį˛,˛œdũfYÜ;Ėq;@õŦéaÛWf3•™ˇ\ÜŸZ—`>”ؤ=éĖāWLb–ĀC>zÔļ–++ī—ĻxQHI'ž•fŨŠGīœÖ‘Zę ×ÔÔY–$Āā \߆î<ČnąŅf~=ËĐkŒ’éÖ°ü)(6—MŸ˜ÜŋË]\ÖĨ'č&ī$nŧ¤ČüÔ27'ښ㎆˜Āã>ĩĀæŪÅË#XXā ũĶÖĄlgŽ•*ũōzq“!›p$i<Ў/Î1ųÖŒ¤L•ļ܁ī]1wFôŨŅ\Ž3īHŠHĪō¨ØU ģĩG6Lgž¤zĶĪZŗ˛‘Gâ˙N•"ÆÉ!ļ—ŽNÆ įIį$d•pr;Ô^*Įã}€‘NXŗ´U|°šDaōˇ"ŧbŊoëĖörØķ&[¸´4ÉēŲøfÛ÷}ęsy˛ö$LƒåČņߍQT.˜<ÔuŠôß ƒ4w"íãļI†šŒš#siŖg^%({Č}ũÁ´u™G˜pw 8Ę˙R+;IÔ{šnSpG!Æ@ëú֎ˇ$wû`ßē C÷sÎŗ!ܓ‡õëW*J ĪVmJŸ4TŸ^†Ė“™'-Ŋ°Ü=)Öđ%ÅĈxq‡P{Ž* |™šīZwV-<6ķÛH°\EĀc͆¸Ēĩ %Ą†"N r]Κ`Œ(Rîęƒ=NOøU F틔ĪŖŊ†cv'¸&¨ąŠUP~´ųŖŪûąWJšVoVi‡‚ø¤ˇ/iS.Á€ ˙=åÃUvįë>Åŧĸ{R]ļdwŦjQNĨĖåK÷†\%ž×ö™_,Õ ļg¸íN9lqŽ•†ÄüÃŪ¤ŠBHSü5Öá{3­ŌZ3"ęFķÎ:Ž3Y’ĢrŨ íZWŅÃ9ONr3PÉ'¯ĶĄéÃŨW2žS†Ö§]’ ŌÜďŧĀģU×äÆOÔ&t&¤†ĪB ÷ëQO ōÄG§zšy“‘ÔsëTv™ã÷O§}K„nŽČ ųGäûšČ52žd9ëŒ`Ō:ųgiå[ĄĻāƒĪ~õi—=R'ļqŒuƒK1ųá_ˆÛøąČĒģȐƒÁöĢĘĸNüß֑OkĮ‚ĖqÍ''@0IL§øH=Įjįū7éĻ™ŽĀ™ŒfŪfīƒĘįņÍMá‰Yĩ%Œē Į1ģäŽ?ŸŪjZ}ŋŠ|9w§Ü…Û0*AäÆãĄüų¯O?vĮÆį´ĢÎ|ŋ%ÉĮzĐĩĐŋv'rë“ōŒpjũļ‡yŖxŠ]?R‡d–ää“ō°ėAũkĨ–ŒÆĮvÃéČ#ü+ĸĨed|úG5odŌÎËåŠņÆkY´Ëswæėl@f;kDË|‰ŗ‚4˛Č‰hĪ,Ę5$ŒâšåZM•ĘKî}O_wqüĖOēK—ķI”\rß7s„Ŗ?yč$ĶC`ŌėãÄ×O-ÔÀĶ>ā°ĨŊ„m ‹Į^:Uiõ8üŊĒw˛ķč3Yö:ģßŪũždTΜzÖđ„ū&&ÖÆ^­d¤I6sķcÖĢĀŽl…Ė'%IV>ã×ë[ÚÉTͤ>ƒÖ&‘ ˜&U<6úgŪēŖ-.C—*xtÁëM*ŽpBētô¤ē„‡# ŦåT–fÜGŨ^ÆˇB$†Âî Æ#+Åķđøp}Ŋ õ/|]aåØxˆķÂ-Ø\ß_ã^cĪ ģå9ë[Ö6Ö#&Ú÷twį+ˆĀ&N:0ã?΀>†â;ˆQâ‘]Ŗ+db´bé_=hΡāKë{{—i4Ũį 9BRšč}ĢÜôfĶW´ŽæŌexŸî°īū}) ›V‡}§šŋ~"O~*܉āIGFŌɉ¯b0ÍŌY‘fļną>čk_І[OÔ׆Edh4ô§Pz ?†¤Į<ĶÍ6€ū”ÚyÃ@6yŨŌ¨_=Š•Ž?hDâ >§é\,ã+Aȧ͚šĶ đÄ:4pÜ-ŗ ˈņq&ōpG#ŠėŒ“…˜éÂō:-'BK(Æ÷ķƒˇVú&*8TägĻ?ąč+$’;b’VC×ôŦĪŒØ¯ũtĘ´”ķTuĩßbz0­)ģIWāfDQ™ =€Ģ[äŨ{ÔļĐ˙ĸĮ‘Ú­${9Åy¤åUļTv(ŨB0WĻF+‹ōZËXŲ/1ŒĮ“Įß\GÆ}ĢōĘ+ÂĮCEzVēąH_Pˇ9õ+ ŽzŽ”Á$`ŒŠô4†& ķÉíYrŗ6FdÁĮ\öŠ”įõ=Š‹sr}J|īZ¨Ą$ÆH0’9čũ+¯*f;ĐWCzØ&Į?ģoå\į…3c31ĨtĨû™|‰:BŖīu5§ŒS‹ŋ…BIθš.äxĖžŨsRĒō *ĮķæŦĝ}hJÂeŊ>,MkĢgÄuĢDWDU‘ŅMY‘ÁĻõŠHĻEË""Ą”á LŲŽ_Į#_ xnæøm7 n‡ģžŸ—ZEoã-MõŠ6šuŧœAÆäv,A#ųW[-ē ŸÛzį×ãzPžM\]Jí5Ôō‚îz–&ŊĻÆDŋžįdF„t$Zđ3 ¯iĖļ>–yá¨C›ÍŋŠjė’qČ<âļíĨg˛`CÆáL]'$Ž}ŗŌ­´ca\cĐW™V¤dՌëV„šHČhŗtĎŧ …Ŧ¤;`õ\‘UeíÜšAÁĨrŦ7ķ­ AĀÎG'­;jjۇĄ›ÔčÁtōŠ8uã'œÔ–ō=ĩÄNÖBlzS[ŽWIØÛļđöĢæG4vĪ;•Á‚9ĮąŽßEÕäģ„˙˜€I#Ā_ķŪ´49E刕“k>  čö5KTĶĨ‚ãíֈ¯*ōØÚžg¯§Qé^Œ)û4Ĩ’Äc&Nd“[?‰íšũŪøđŧ*ǁÔW=sæô‚§Q]Šõ(ÎĢ™Åö_26 ķ 6opkÕ–ëäžÆL˛ũå9¤ĸšŨŸœy[Fõ–…e¯ÛÉ*Yfå ŠäžũĢ*] Â2R[_˜pC;Ķ<=­ęļw¤)ĩŨš}–ˇ5McRŋĘK2*ggbųúq\íÖ§W—xúėë^g'1€5ŖĒ\;ŒĮËVt(î#Ũ9mŌã‚y<į'Ŋ\Ņ´ëIuMˇŠæO!$™žPĀôĮLvĻ­•Ũíö§p“4!'Ųž<ĀÆ1͎um2mcBä‰`c+回ž•Ä暈Í&c)9QäVžĄfÉ5öĄ;&6ŋ.áUŧ)m†á–vy­)Â0\ۉžƒôųu”´ōb+#8 ĩąåN]ūūM×ĶáGđƒĪø ؚ˛ģYĸųˆ;ą×#ŌĨŊÕ ÄÖ°A mĘŌĄåš"ĨՕī¸X}žšÚuŦŗaE Į<ž™úúÖ>ŠqæBTŋīĻp /Öģ]{Åo>Žtû 9wOû 8ÚĒ{ũkŗĐf´¸Y¯dW‘rB˜nΝ­U&–˛Üč‰$Ķ.%‰ĸzÜrĮŪĻ´ĐΟ8žY7 ¤씗8=˛}Ē Íu’ha‡kĒíWn¤’iķM†„>$™Œ0[/;Ž}Î:Uũ3K6ö 33|˝˙Z´äŌ–WFØĨ—~eÍWēžŽÎ6UŨ#¨ųˆā …WrĀ-՘z‚¯Ÿ"ã§§¨Ž~æÜ‡Ęuętņm0‰@É<Ÿ|Õ ëM“p0¤žâģ`íĄ&`ä#pŨûU¨YŖãøG wËģPāã‚*(.6H"¸ųIū1éZõ/kPkXĶõTYЍ‹p˒¸<éųõކÃKŊđ…øšÆGš°˜ūúĐāpz:oĪÖŧ˙Ös<‹ä•Üã*sÃ{W­xzi •Éķĸ\wFqĶži ėm/#š%‰Õã=ÅT-öMtāœ~ĸ¨‹{‹ ¯>Ī}ė.r?Úõ>âŦÜĖ—6‘ÜÄ>dn‡¨5tŪļîg5Ĩû€ô§T8’0øÍKY–;4SsÎ(4ę)¤ķŠ_å@zS <ÔmØPœEČüqNŸ×cõ§ÆŖ>ÔˌųäôŽKwVũß^j đč;ĶÜ9 zô¨°‹ ōz“YåKĪžžÕ~0_úTÖú{I&qÉīVģ!Zæ:é^NŽ9=…wÖ*#EAĐ s׊­QZ[€ņÔ÷5šōĪ9Ų+-MĄh#Ŗ…†ā{bžį€GzæÅü˜ëĮVŨ”ââzācņĒŊÍ#4ô,¯J­ĒôEŽ*Ų5“ŦĪåÃėŌsųV´•æ‚Ģ÷Y§m6ąöA¤Æ?­Kfseû”Ž0õ‹ŠŒ‹Âˆ$û†˛ä\HkYēV]ÁÆâ(@ĘÁžsĶĩNËX×ĸA1†!žaÔöŠūs€Į¨āúVSŠîsļŽ^fÁįĨœ0č+6kŲ8RÄU¨.“ËM۔žŖTÆ´[ }ë Üį ‰éYLhdcūZŊięsÂ4ĢļķũSt`O"ĒxB?3ÃąŸúhãõŽØ´č;wD?=;Ō•;ū•gėÄ9ôĨ1aķ\ÍÅp>|zUØ#Ëįô¨"€—æ´mÕG֚‰¤b[…v.*CLVųh‚JážS‚MY¸ãĪԚzP[9ô¨$”I";™V(Ë1Ú d“ĀWĪ^?ņbøŗ_Kk7c§X“ĩēyŽzšęž)xđ$đū”ûį›äžU<(îŖëŪŧÎĘÕmāÚ;wõ5Ɉު#ßʲÉTǧQhĩ˙"܁•‘ļ˛ũÖA¯Eø|’Ędv "‡åVõcɯ<.=Oo\×­Ā„ü+ÅŌmŠģĖHK’ÄrkČĢNu)K”öķšđĨIGŦŽŖOOJ­;ˆĶyÚ8ŠDÉ%¨š#ŊCŠŦģ™Ė|tä^E(93įiAÉų[ę p$•ĪsT4Íniá`´žxâ8ōË$~ÜõjĘØÅ p>R9Ģöúuŧ”炆ʁTåN Įqb"”ũ Ūíä×Q´bâc"FĖ GzŅ`'°Ģ qŠŖs:Ÿ:(™Lˆu@5„¤į;™ĶZ¤U¸¸įŋĨf4s8”„´—oęāqSAo ƒ€2˙Ōģš8ÜôZ8Ü|–0\-÷G{Q ÖycØûU‰a&>OëŪ˛/ÍÆ 2ļ#ŪÜfĻ›s\ŧÄÂrj×ЖíŖÉšŨÚˆę0AãŊcÅlßkšîYänĀZ|ûxåĮߌzqT§ųĮ”…€`yAöވEÃDo qēhžÁ„Ĩ÷n䑸VvĄŲįŠ$éŠģáäŗČŗΒ2nú~­l$CÅŋ‡ĐšÖRQ—)ŅJ˛u.ļg;!c!uá‡_ÂĄcģÃ'ĖzûUĨQ“ zuĻLĒ#8ųXr¸ĒLõKB„Ö˜#¯¯Ĩ>ÎBd"nĢԏįS#́žŋĨ+B"ž&!Xäewc#Ō†úŠSû2*΁;'͡Z‡gÚ lt@ˆõ°ö­­zÛlđ ĐĒmYR:í'ÔVJ—Ža4C÷‹ëĐŠęą­"Ŧĩ7Ĩ>zjHl…eTõ+ąĐ-ŦuŊ5íŽāCu6šā°öūĩĘÍäË#OnŒü˘˙Wšˇap`ž7Î1÷\õSë˙Ö­iÉF]Î|])UĨhģ5ąéZNš4äKpîĐôV$t?Ãëî+f[(gMŽ™z̤ÜũžÂŸivP\/ŨÉô­ö¯^ réąđĩå/hÜž$y/Ä]:+/°Må āŖcŒĢ/ëŌŧŨäŧŅ.䄯Ō@IĮ÷Húö5ę˙dO°ÁvXúō¸ŪO§Æ‰ĐäōN srû9ō÷2œšũįš›o~×ҏļ•c$nbØ­MGUūĘI ŖŸ0~闐ŲūDVm…ųŋHÄŠ×dV™×d¸xíĩĢ„aDhØ;v㯞}jjEš+­ MXÎˇÕ­Š Xš—0ÛÜWŖč iaākioŖVŖ; švf$ūuÃË éqeĐOŒä |ŒzVÕæš$ē†X˙snC)x 1\˜ē^וFû—kÜäĩŨjmvd…lšÖÚ3ĐOQËÔ×aáé×ļŌë|( –Û†Éõ÷ŽJ b-^O)QŖĪLķœÖžŸÚ\rÅnī|å•ųRGZŪŊ9*^Ε“­ŲØęū—O°’}:ĩÜŠ#+Î įĶ8ŽûōĶU’ãUEI@Ūy“ũkØøö˙Lˇ’×Q…ŽJđŗ‡Á?ŸZÉņ‹WYbŠŒ¯ßvląŸJà ONN3Wķ*N-]íí˙´Æ`u(ÜdQŠĻĨhûmáY pÃĄéÛÖē_hļŅi‘ÜMĩŽ$ũāŒä§ˇ{ĸA=ôǁŒ˜NėcœTOUq膠ÜOŧŊŧžw;Š< Enx_Â÷z…Ôs\Á*Z/͒ŋ{čëĻÛŲNžz.áÃ]Äfē4ŽÅ,$• 'Y5ŦņŽ^ėW/›%Sļ§ĢI FŧpXūxŽFæÉĸ&7 ûĮŠæģ-^Įíˇ°Ã§É)UIq4M…Úŋ§Ą'¸íUõH–;RÁ?rIÚ;ƒĶéJhÆ)D%įd"t§ˇ—d}t¨õÅE"ęSe’zKÆgÃÃé+ķ‘ФB’ô<÷VâĖASŪŦ1ʞ‡¨Ĩ‚ãcė—•<+WAß ęéĨjQZ߯ŌY9ÚHūžžß…{l6É wvo؃÷ åˆôī đĪ!e!R5ÖøkTžđôŸ)vƒø€>čc=sLÕVy "Ã>xˆŋŪ¨{Õéė–HekBĒėGbG¯Ŋs1ļ™â›%ōJÃq÷Õ:r;Š˙ ˇ§ę—š]ėV:Ņûįl7cĄčūūô'gq5}‡H¸Ų*ž%\†SĮCZ=Ģ6ÖŽIŖ`šfŪ¸?Ɲ)aÃr?ŊN°Ąļ¤¨íGZ*Js@>´j8>´Ļ˜{Ÿzu3œĐŸzĸr9霚””Jŧ`wŽS‰”Hāâ…#Gڈc$€xôĻIzÆøâļŒ‰ork6KtÜŊiZc!ÎsV´)4‘$˛—Č˙9¨$b@QÁÎiįÔÔ9ļz˙J¨īq6"ü™ĪākoKŊ›_šâ°Ksާĩ[˛,ΞkÄĨgĄÖyŌ°õŧf]C†8_ZԈâ1X:ķq ?k`~5ĩÕ~áÕØcė0˙¸)_“T4k™%˛ˆŧ3íWĻ#î:VS^ķ4„¯WcüĢW­­&•FYT+e˛OZæ!ķcJĶ…Xá@˃וKĩcHnTÕe”ŧ.H­/ƃN–îČYĢ­XŧZ=Äî˙:€Tv­ŸđÅpGīe,Yž„ׯ…Ŗ8PģęÂßŧ6¤ˇ1QqÎjķUsÔÖĻܨ¨c œ~T€áęĖ‹ū}ĒŗŠÎÎ((™$éúTŒÃŠĨœsūy¤iš÷ ¤‰å” ķ/øčÆ%Ō´ÉĀ qpŊUÆĨņŋŽÜI¤iŗĨ'™[ˆ‡÷Gû_Ęŧžũ™ŦŨ̐3ø×'¯ŗôųNV”>ĩY^Û.ūlĪ´Všš–íûŠZ˜Ā ?„tĻ[Â!ˇTÂ1øÔÄėCÜöŽ˙č}%^Ę–ũ}w&ŅĸKŊr×ΑR˜K+z*ķų×ŧ[Cŗĸ?Ÿ 4`á%%HãžÕã>ҟT×a„ŸŨîŪ˙.AQ_AC $aTa@č+ĐĄĸŅņšŊ~y¯ëŠĀx:îHí.ôK­ßjŌå0õ)Ÿ‘ž„Vø´ 6á÷IÎ=ë;ÅöJŋļņ5°ųaā?Šx8îTķô­ˆ\I`rČ>ĩāf4¯4~~g% ¯–ÃÖ ˆ˙"ĨU•ģūU`F?#^Lĩw4mŊĘR\-ģųSĒ~䇅?ũzŠÛŪËpɁļ>ö3úUų1ČíYķß$sģ‘Å4š’"äô!¸ĶVKß4F¤Į8ÅMm VЈ° ĀsWã $AžnG5ŸsgöÜŦųsà pÜ6;B+§Ÿš<˛fŗŠxŲ‹qŒŖb°eˇyg•đ:?vÁô­9ĨģŒ=ŽXN6“øāŠĖŗ‰ū×u<Îĸi,6pŖĄüjčÉŨÉūŖ&´B°T1Ēđ:cÚŗå˛Ÿí­æØU+¸íé[öËqŪĨ´‹Í@û9lãđŽ—W•\î”ãk,,^Ũ,Äš,Ū¤õ5&ĩ K.0éÛŅ}š8-Ôķ7zĢw\Bęã(ŨsY×|•6ûŋ™ÉOšĶKDyÄáÜoæ9ČTx1ģīzVɊ yŨâá}qū"ŗ/dˆšl0s÷ž•׊ôJĨՒ ˇ˛3Ą˛`ÛģĒX­d/– Ųû¤t uõ”ûi<š#d“nC1[–Đũĸ îm\ģģnžŲr7Õ×ĐŅšT˛ØĘUewą„%c&Ųˇ4/…u'‚CõRūŅėîÜæÂOË2ô?ũzظgC<Ą8Ü˙öŠôļŧy>Ë sŸ+ÂāÃúW_-ôfƝ*æŠõ[â<‘äÃü_y:‚(ÛåžŅķ'Pk¤Ŋđ…Ũ´Ą­‘Œ-СUöoLzÖŧūûfލɋ˜F‡ËŸsëU3wLÎĻaF)I;§ũjgxkZ6SG—ōFwuĀĪôī^ˆ˛Ŧ€09R2īšō( Α|^vŋU>âģëčā°,ƒl.€ļzuĮ=̝ ?˛Ī9ÃÆęŦ:œ_݇QŌÕfVrō˛1ūęųV‹lãÕ`[:‹¤HŨ0ÜŽERņF 5mrÖ nČ I-ÆĄ˛šcŠG„ÎâĮĩtԂk›Ē>}v1ô›9´Ëí×°J‘¸Ã>Âv‘ŪģÁgĸë:hˇ7Öī.NĖ0 3éĐÕŠ€ŪŖ“ōžõ‡q ņĘcLƒÁsõ¯2ruũäė×cEσ$Đĩ' kt“Äz,ęrmXxvōæÆā>ÅIk§;X˙:•gFIę2ÄŌ\øâÛDĸD[ЉĀ@p÷5…IגJ ė¤ĸˇ9۟†æ āļښ[ČĮp‰˛NߨúzUë/ › åß#M+eZC÷E]Ķm¯ÍÛk:“ˇÚnB”N‚4=Ŋž•sV&ĐËe"ĮqŪC.C{ˇˆĒڋ•ÅĘģ ¤ŲYš”ŠH§R¯‰ģ8č:ĨyáM#Lē’Sjƒ$c,vrxĀ5…βīîôû‰”ŖEŒqĮ8ė+¯„ë>-ēŗķ´ĮąŌáu•ŪSķĘGLVU}Ĩ9ķsi×QÆÍZÄ3j ĨâFYÂÆĢ–üŠūņKŨę˛\]ÂĐĢāũŌvĒŠ ‘×’XŸJčī´+c›!RØÜ˜\ĻĨc.™šŽwZ•oŽüH>ö…oĨIzsķž3Úąī. IžģŗˇÖ慎Вq¤ífgņįFrNŌ}E=žwy<S^Eō(cqĘzlž}ŧ{‡ĖēkŊ>Æg9(–+†IGŨ84Ą•ūSČĮ5~üG,ˆ˙0fŠëU CĒ÷8ÅuAķE2Y=ƒ4— >9ų\đ;zô]8ūņRg[IØa<Õų%鞟y­¤2K2E 31<(ëšö­äĶcĶ5r’FĀ"ČTđßŨ>‡Ū›Tiw6wĸkpĐNŧ˜ˇ|îZëôŨB fÔŲjpâF"N ˙TŽ4›Í:2¸ûvš1˛3ݏöOp+NÃO†öxfYD|+íÊôe4†iXXÍĨČ"35Å O3—ˆzg¸ũkhr8éØÕ[etŒDü2Ž:āãĶÚ­(G~Ô1Ž”OŖųĐ1” \QŠAéQļyõ!ôüh‚9<Š”˙ĢĪzŽ­ķûTÄ኿ąÆV“äô¨ÖCĀņR\tõÍWĘzfĩQ3lž%ũÛįę)b“ûSHÄyĮ&ˆĮķ4X6âyúTE°‡}*ŨŊœĶÆŪWē:Q5„–ĀyŠÉÁ8įšpõOrŒ;¤|ã˙×Zļ‘ūų@ôįëLļąy9QžhÁ`c›{OÆˇK•mܞ[onĖßÂ?Zå/ޚK„ŪrĮ­kęķ.ėsø į/ũ/ß´ĸĩykc­ŌގM§`ûÖĘŗēnfäööŽ[LŸ÷kíÖĩ´SaąĮOL×=i¨jÍ)H5;ķĸ?9'ŌšÉq"äŋ$žzVęw,~õU’‘`­^kž!Î|ĪcYŨĸ†ķĶŪĻŸÂŖĀMėŖ< Õ´ŌĨ•>sąr95Ŋ?}ûĻ6e[x˞(EËWGel-ÆæmÎ{ö6QX!Û¸ąū#VV`#$œ×5ÛNŒbųžæ‘ĐĨâW  \œã 1Rø>q‡-rzîūf¨xĒQ/†æÛĶ+ĪãKáÆĮ‡l†s˜ķúšīr˙gēîEß´ųYģ\⟭.õ|ÖąˇZ|3´r:wŽe#UQÜÖ`p=EE*ņ‘ôІíLoËW7E=ĩÃ|BņIĐ´ī&ÚL^ÜąžęŊÚē­VˇĐôģ›û“ĩ#\Ũ˜ô‰¯œĩ+ûŋę˛]ŨHĖō@=°Ŧ+ÕåV=\ˇí§í%˛üX–{îąÜFrIäą=ęãÅæHĶ“DAbN:tĢ)Ęzšō$îî}å%Ë 29c?MDŪ‡Ÿ™ŽĪ iĶįÚŦéļ3ęöļéē[‰6(ôä֔!Í4pæUũŽM=^‡Ĩü+ĶãM*âėĻ%–]ģ÷GjôuâąôM-4 ÚŅv“ųÛՏSZm( šöRVGĀT¨į.ißÁŨģ[JŌ@U”ô*{Wĸ´Ú]ÜÚÛæKaēÕĪüĩ„ž>Ĩz퐓’Õ•â %¯cŠęßjŪÛđČz{Šö#ƒ^vgETĄwĐ)JŌžâ§Vä~ĩRŌuš&P˜†CÕX~†ŦAȝ’i§fv„ĖHrŊ@ČŦ‹›fš•ąŽCĸŽŨyŪC˜âAĘnÚ܏á=UđũŧļÚ41LŒŽ §¯$õ­c%s-îi Ž.ÅĢ{ßŗĀá?đíBUļ)ú|m × K3™ vb6ؘüŠō…0:Ø#œuĸ2RvîNōģ0ī¯|ԑ1ߚČä!åŧĪánāSᕤšKDŧæ$ųŋÃˇ<ū5<6‡pÜ2;âģ9#MĸPОč-‹3ī ëģĄ=ë~Ú2ˆGË<|û3Āö5BÎáĘ ŊųĨ4ĶFŸ%ĢĖį…ÚĀĮ=+9ÔÕJ;œUęŠhˆÍÄöë6Íė $ˆŧe”ã#5“sw2<ãȊ3š"Č,͎­ÛÕ~ÚÛėöQ#2`ŗãûÄäū´Ķ @Kt4ąUyĢ7éų#ššŅv¯hÉzUKß0'Ö¨ųvŌ@Wcyępᗨú×_ĒÚCynž Ŗ å00pÁûŦŊŽĒ5šŖd{øzŪŌ v'ĩŌ’ta,l‡ƒ"úΧ˛ŗŧļxå€1SŅŖÎėgŋĨjčŦˇā#Fü’ äĀôü+Ŗ‚3Ã"āw¯GK9=F6tdâÕü†iļp˛ąšÖ ī÷ŨmúŸzՆÆÚũÔ/ŅĻ[•ÉÆŪŊjڜŠõãĨiIˇq‘‚3Q éÚŦšB*ŦevrZ÷‡`ŧˇ}ŠĩÁÜ(ëūÃjš•Ö‡§}’ėbVŖ¸`:sØįô¯]Ÿz đ‰ÚŠÔuĶcP‘Ÿ-Häįž}+/dœš‘Ôą“ö.”ĩ_‘ĘÛN×Ü^ąlš šîÆ´4ĻgÕmBœfAœū•Ic[ĸ/ŨQŽj]ę;Mn™B´q’Ûväƒ[I]4Ž#Ô|E Ése!ĩvŨ2r0ÃĨpKwqa$vēÂ4 ŸrVY5ëūŧMoD†õ6•tÎ8=Ú.¨Ā`ēĩŠD<ā¯čkæž)ā˙wV?3§“ŸXž5Šé„¨n⾉í¤9W3(Ā<ãx­Í/Â6‘YGrŽ÷sI÷e ōŒÃük°ƒĀŠ}â҈ĘÅ?*Ū¸ōėĄ‰"UT| (ÛōŠžgí- :ūŠ[Yļ˙Úv\†IŖĘgf0;}j…Λs")’ŲÕ¸Ē:‡ŠĩGČļU3ōļÂČ4ČeÕu[Ģ6iåŒŦ ¨^ ƒÎ}Ģj˜IĶ|Ņ’åëäÅΟCÃVĢöĢi“æI!‡b+zŪ4ŗ„ ?ģT9>˜Ē’Ü9šyŦœ–i`Ãˇ°õ?Ëqļöė<„  õÂōs^tŠÎĩGɡsDÔVĨ›hÛĮՉY­įË,råÎŋĄËëO}Ž'úRA‘Y,ŪŸâˇÕŋáĩũÆÃ Ŗ'#=Έ3 1$āûîŖN÷Ŗē"MŊtK&ģŽHhĸËŖo˙Zē¨.`Ž?*ŋbŒaå# !ô__­O¤ŲĮö%ķሑ÷I@xük3Å2Ŧ~Bƒ…Ŋ+–Ĩgˆ­ėŪÅ(ōÆį=ĒË$XˇläínšËhũūčSt1f“û¸~ĩĢŠÜ,§•āng<Lz“V|/¤ËiákģŌ^îQÉë´‰¯Z(^]tF-]˜M"¤Û nR vÅBؑ>a€zwéW§ˆĮ3ÄÉûČøÎ;ņĒč A’] uë])ÛBL]R!—ør+8dØÖî AĩāgIöŦIŒäĘÃōŽĘNņ"[—,˜A?œ‰—cКėėn<ÔķÆáœc„úW%áų_F]ŅQŗ—‘w(ūuŨZiŗÛŋÚ,÷–Ĩˇ)ú/qZÖéšŦÖqÆi-Ž0QĮjčÖ(.Ũom$Ų8^ã҇zÁ‚É$ˇØļxKvį˙*žĘCÆKrČÃåxą‚Ԑ5­Á—1Nž\Ëü=AŖÚފ Ĩ.#R~÷PGPjÄr7 '^Ė:ūŊOFi™â—?:Š)šæ€L=iųũj7ę(Î ÁãĩH˛dķĐT,āúĶ—…ĩŠZœ-‹)ÎIč(ļQ#äô)“‚õäāÆŦÄQ…ĨČß?‘šš°9ëM‰8­ L—Ž23“ô¤ĘKSrÂĖElåˆČ5a ŽAķ ŒÔƒ p)3TŽÕkųI 1QɌqSu¨¤SŦszŅQ4c7'>ÕËÜËžėĨuš–•%ÅԓųøČT¯Jå§ŗ•5 ‡h-ųWEŽp֋ŊÍĢ=˙gųzėäĶ­Ëg ¨üMKžH<¨Næ# Į­AīÁîIâcĢsKŨčkÛFO,Ą2?ˆô¨f>EĢ•8 p­M€FOĶéMģˇß§LøĮūĸ¸éÁÉY"äZĶôđäM?$rĸĩ_ĨAĮĩJ͏ÂŊjTãN6@Vŧ™PōpĪ5•i;j2nékÂ˙-wúTzįwqĒĄūg>‹˙×ĢVāEDŠÂđöŦ*VsŅlOR¯‰X å}?­v%û˜ũMúĐî}™ĮĐÔ>&MĶ'#™ŽúWúĒOš›ū!ŅŠãßŊōc׊|kOĩš„bŽjÆ FĩA4&§Ü6}+ņŪ¸t}fˆ¨žPR2[ČëøU7es˛œ\šŠęyŸÄ˙.ątēmĢnˇ…ŗ¸z˙:æl­„váĪ^ÕNÆÜÜŨ†mÅ~đĪp?úõą7Č<Ą^Uzˇ>ß/ÁĒi.ˆĒx=ęä@ų9=*ŦXžëhä)ÁÅ_œ/\W5ĩ=‹éĄB^#'ģÆŊᖏæ´ēĢ‘O“=I,ĨyË1’ųbTgĮEÛ°¯ <;ĻĻ•ĄØÚ†Š[=Ųšjô0ļ§Ęg؎kS] iÛ÷gŸJ…2PgōŠĪ'ōŖŠî>aŽA“V|°ãrjŽ%iE&“҉fĢ _†V ö÷ČŨĸ›+}Ą÷Åi•#ŒučkC[Ōmõ.âÆä~îTÛ¸uÔ{ƒÍahFī˓Oŋų¯,ČF“ •qōČ>Ŗõ¯›ÆåÎ/šë§WŖ'|ĮÎÆÁëO#­O BõĀĒ*<šö‡$­xÕi¸ÉÅîĶ؊įO2lë߂iÃįą?­G-ŌĮÎũu1OdRMģ#ø™\\áXíBŪžĩŠ$đÛIܕU#äs͊Ą=ųûQŲ×z´-Ā’Ö5r¯žNyŽĒ÷´[:ĒŠr]†û]ŌKã 9ųĮŨf>ž¸ĸsN!*cû¸éÅViÖrÎpŠ:“\Ķ—6Į†ņ#ĖR•W^xÜ+"ķUC~ĸ'ܑ+yŒ+“Đ}kjxcœlxÕĮ]Ŧ Šį.ėņq$[6ÂãBņ[á#;ČéĄMMŲô#–îi8_ēGŌmaũĄÚ!ä;Á›’%ļ‘0ũĶ]3Åé€>Ŋk ŗŠ8†ÕUbēęN0V‰ŅRģ‡ÁĄ”,eŗ–3ķŖđP>^Ŋ˙ÆēĢIžXņ4{%^ŋŨ5$¤ą‚ã’ úUĄ ōŒJú<->Zqkąåbq>×I-ˆĄ\&RIĢ ö¨ãŽ=)øįØq2@ŨŊiduN§đ¨AæŸ×žôÉÖŽMĩ…Åۆ1Á?–:ļ|ãpßlÔŽŽNâ 8¨$æŊˇâeĮ•áĪ+~ ˛ßĩxĩē˙Ž?(ũá–)FYOīFrQLŽ=ˆđ})—ũ:DėpߕŽc˛b§‡Zõ/„z’ˆ.ô–›p˙ˆ=•˜†Žžú÷ė° Čsa^]āŅö . VũíW—Z%\~ ôŊNßíÅqÜŨ@ėĀ×Īæņ„įΊ-¤Ę#Uē7îásČ Éâĩ5HÎ“!‹.܊ˎ°\ īōā#ŸÎ™=ÅͅŪõv’rŅŽ›}ž•įEFŠØŌîڙ!1´÷<ĶŠØđđ"öBån§ŽĶëQKg3š6ąŖņž3æqבԝh:[Ų™Že“2Üã(ÕP3Į¯įZÖÄ'Ię(ĮŪ4ĩEilLJps“Īš˙ėBģ|‚ŨJčīĻō##1ôUÜČŦ™/ėČßö¨ÆX3ߗZ(ÖĢ~čJ*ú›‘Øvp)ĻÖÖ"eōÔ1ę}s\M•ũíΚįۙRŅ3׍ß_đŽŪá^K]Ņ|Ä ‚;ņ\Õ(Î2Jû”¤š .ĸAü]2+Q†×TgûJĮåä3îãŪœ× ĘņܲDläūYŦ‹Ŋ"÷XÔb>DļÚzXIÃJ~‡ÖŠtfڕ­Ô%+­‰-ŧ/Ŗ;Ĩę횈ĘrJ–Ũ+vY€ƒhDōņ§Ĩ>ę1Ŧ(Ģ l`UI1åāž1J•Vœåpi-Ž{[ŧQnA‚4p$UÉš ×{œ ÷ާ\‹(¸ä’Į§ã\Ø •nHûŦ: ÷čA$š9äîT J|§ŨĩÉí\õä/g?’Ũ;7¨í]<ģx8Éî;V&˛2ā˙ąÎkĐĻũã6Ca3@û€ĘšÃG؏é^ĨáŖ*'ĩvžĐœ`<,{7¨¯$ąšXî#.xdö5čšAžÁÅũƒˇžgˆãc)>Įō­ÄzÕ´QÉo›Iįå8ëßڜļęįf_ģ2ލč—Öú­—›Ų*ž ų1Ÿę=+b#ŋļ̃‘Žūô€tPãīßít56=hR ? úŌŅI@ š))3@ M1ģSŗųĶ  >¸ú“PޏôíSÎÁäČéūؔåˆôÍ`åŠÅ$G6 ˆu!ĒÎI ķŠdPäîëëWmá =ę\šbRÔWG¤ZO9‡Ė~éöŦë+6DãŌēDPˆF Ĩ\õ5Ĩ nÄnõ<ãōŠd¨ĀękS gjŠSÅHNj¤ōtôĻ"ŊĖĢe˜āĻš+ŠEÆĸ#(QsW5}S͟ɇæUäãĄ5šģŪãžū•ĮRs”šcą…IĻ_1īĞ€TlĖžS ”)ĮžjčV0ĸ¨Î{քúP“G’æRģƒ´9Žxáܐ–ģ ŠØg-ĪlT—p“c(øĮãMŌĻ76Qŗœpā˙xVƒ.aq؊ë„"ĄîpHļ'=qÖĒÜĖ|ũÄûŪį°Šîe؀/ß<-S• ÕWævĨ7ĖųĘ+lS2ËĖîw?ˇ ŠÕ‡ÉŽ{ū4é2īô‘€_ģ š1\ÍĸY[U„ĪĨŨ)īũVđĸė;lu‡âÕ­NåRlƒ|ŌĄÛėę}ǝ„Cc¨=DŽ?ZEŽÍ}´tÎÃiö͞ ¯1ô§ÛëYÄčƒÔŧŌcņ¯øĢjø¤ØÄų†ØymŽ…ēˇëÅ{,ķˆ#gnˆ  ¯ˇÍVæėŗ~ōWnzōÕĪ‹Ÿ,-Üú,Ž‚Ģ^īĄjĘ’vU Ŗ¸¤™×÷ˇÂFĨÎ}ūϐąŒHƒŦ“ôKZ&•ēˇī.]W@kĖŊ4Ž¨Ũ:’ßR]&ōVGûĪķ“îjÅĖâ<šūš‘ȅTp:dV~¤IAysKâ‘Rj•/Dlx2ËíúĖ3ēg÷ČĒ7r!^ûįæ= y_Ã=?÷Í6>HS¸ûí˙Ö¯WOē+ÕïvįÄæŌũę‡Uŋ̎æŖoÍR(§mÍtžH‘.ÔUQ2đęŧĶ”ü‚¤€@3Éč=qUŞ<‘Ęx‘z7|ßJ6´ú‹ąû‘ P?Ú<ŸĶoS’°&Rŋ‹ä:¯ōŦwåąÜƒ[×dY9íX œįņ¯“Íé*xŽuö‘ÛBMÆÃK§?•gÜ[yŽ6ŒuĪ5tįyĮ~iøŧČÍÅŨTįĘîŠ+b†O,p;â­¯—˜Ú/쁃Sƙ|öĒŦ°)˜]rrBąÔJŖ–ė%QËv_p’ÃĩÆTõUmĸ‚1G#ø‰$ķõА˜ĀĖĻWųŒ}Oę!vŦF„ä|…˙Î*œŅÄ˙ŧ%H<æ•îVíĮrˇúÉpŖük:õĨI€Āļ+Ž…6ũMhÅÉčÉežHÃ$]F0j­WėMŨéŧ˜žMŊ2@Ŧč¤\Jīˇ1äˇÍڍZŌ[˙Ū+ ˛Í7{ųWc§dû—_’˛Üėŧ/}6§áû ųŅR[ˆRFQĐ;{VÉéŠĪŌ ō4ÛXâ8‘āĸ´AÎ+ë"ĶŽ‡ŠŪ Ģ… Š_ō)MY$Ap˙ZJ\ ~•ZūYb˛–H|Ē„ĸúšMŲ\;â@Y<>ãåʰaëÁí^6wæŽ~ņŨŸ¨¯Už+­sڂLī<āî]ßÁž+Ën2qÆJšUHŠ!'sføĶIëĪZ.ËQÎT>•#De‘ąÉSģJÔŅmËę#Č:­h3§øuÜ[ŧ-ķC5ŗ#¯ĻMuŪ•ĨҤͧ|Üiķ5ŗ7rü§ōÅs‰tīIe†+‡ O÷O5ŅŽ4¯ˆsDdaĨj%PznCŽ? ōs*Đs[¯ĐڔŦėÍco$7+r1īH,ŒŋëNÅSœzÖģ`Ā dÜ_Âķų*rĀuí^*íÉ6¯cw w,'Yí<֌réēĩ,/áŊ‡ÍCƒŨOPjĢ$~ŋÖ˛^Î[kĄ5˛1ÎŅZN0Ä6Úŗ%7’hDč0pÃŊV—DļžO6âÚ'ŧy5ZëS–ŪöGžFCTaÖ'ļÖáKĸÄĖ› í Û ^0įRųuœ[ŗFÂiЏ”ĻÕŽ+RąÂ"(ĸ÷õŠG5įĪR.隨ĄĒŠ$$ĩ4€lSG­8_ äÔĶrœŦˇcvH… I#*{ŒČk #ž@ĄŠcö­Æå‰õéIŒĐÖę|¨ėCZjq:Åģ##r>õÉß[(}õk/õęķZFīŊˇnôÍrÚÆ„ĄŪUSũŪÕėāņkHŗ Āāļ˙ ã<ÖVŠ }‡ŋ {âˇīah¤'?Ž?•dß2˜Bžšį>˜¯j›Õ3‡5$)ķgvîÄzƒ]‡|D-ÂÛŨ>ÖSˆæfãŨ?ãXŗõČúfĢųYûŊø9Ž’`˛ģm>â-FÁŲGE+Æ^Q˙ë¯Iˇž-BŌഐzŠÅ|ųá62ZÜķ ųC–觡ĶųW§ŲßM`mî-ˁū_/Œuéū•!øķ>ŽŖīc¨Ģ‚2;Õ[+¸īmc¸ˆådgŠąėôČü(čM;(Å6“ō9Ŗ{ĐTĶéSâĄaĀúĐŸ˛âC•Š#ƒīŠļÖĻL°Š €ĸeē÷Į'ĘîÎnVWXđæ¯Ā ƚŋj™Íc*—ØĨ vxÁ÷ÁükV°’uœžEiÚ\‰áÉëĐŠ× -âÍSčLôĖđ}ŠėN3Uem€ˇé]ˆbM Nk™Õu&“1BpŋÄÂŽ_Îōd&ā=ûÖA„JšãĘ´Œ{œÕj7ĸ)ÛÄ9'’8§ŦL'Áū,`V­Ŋǁ¸¯"ŠÜ7úXƒŌĻ•¤î`Ū†ĖIž5væĩ­˙ԏZĨbž`AßŊ^ųg1MއU5ÔÉkėí`ņū‹treūŊh” r{sUoõ=.KwŠâöãûāAŽGWņ¤†É­íx|ly‘ũŅÛ>ĩƒ‹…ß@rŒM‹ínÖĀ‹‹™nĘĝÎ:šoöœwq¤ļî­wįŊyß$ÁœŗČŪš5Ķx|ˆƒ4ÅDiķ785‹Ą/gŖÔÅUŧŽÚ<°ÍéYßM=ÁˇĶː4ŋÂĩ$0]ë$-od:/F’ˇŦôô´ŒE jĢč:š¨EÚŅØŅĻĖÍ?K‰#Ęūu˃įōjˇ†b1[Ü ū †ލY3CYz‘KE1Âܜ~ WT#jr^„ōždX13°8õŠ’/éŪ¯y@ zS%jRąŅõ9ī\5ž‰{/u…ų˙€šđ(ƒļM{æĩgöÍ6ęÜ˙ËXԃ_?éųˇ[¸~hĨØGšÍWHúŽ’S’,šßq‘ĐZ‚ũú͌g•†3# šØo¸ŨëøQúFĢ<ģ0¯ĶŽiv}-t¤ã?ËRķ|˙/ˇęjĄˇYībVíÎ}…[Œ~ņĮ\UeŠâī_ĩ˛ˇ\ŗg+ܒqD"ÛМTãĨ.­ĮāûHmô^…—/Įü+§ˆžĩNÖˇˇŽ ĢtāUÄëÅ{p,R?;ÄTö•e>í—g&)"ûĩ#ՍŊ&c֞?Jl„9č9 ­ÆGîŌ1ŠY‡J¯b5ņœzl’Ō–â[ ˜‡B§‘ŽEpžÔå{GEŊ?éštÅTž˛DyFü¸ŽØdƒ\oŒ4ײŊļņM”ln,žK¨×ūZĀzū#­pc°Ęĩ7eĒØÖœÚ‘´ĀĶüšvyôĸ)cŊĩŽâWŠEŒ9AûŖ5ņō‹Lî$…†ĪÍéU$•…ų„§Ë凟|U¯!'Œn,ûŦ§TĶʒG2<ŽØ›tšJס,ĮQ͏4s§€ ëĀ ĒLÃĶŠAjË(#ĄcōŦëåC Š#%GĨXhgŽO:LČt“88î=é‹nP;JÛåŧũĐz ŪäwLĨ6ļ*çZOåŗĀŒËÂŗ âŦ_§M¸ˆp nĶiŠa*œt¨5yvh—Ōį•…đ~ĸŽ.R’Ô™jÎ†Āīĩ‰ē|ƒų ļsĄĒ–<[ÄMŖúUŦņ_mOHĢžlˇ$ūtŊ@¨ōiÛ°Ÿ­X…'ŒTr•HˡE'ØTqLŗÆO +;Äw&ÛF”ƒ†ˆķõ˙ëTNj0rĘ>´Ø]ĖGËs+ātųMyŠ|#>—40üЁž6<ŋũjö&“lƒ´c§ŊWÕláŧLJŠN ˇžhĄZiØđ}3ÃWéWsGū1á‡8'Ž}+Šđf‡ÅÖĨmpŦ¤(Œ`ÆģŊ2Åb˛û3Ē•\Ž=E:ßJŽË[–ú-ĢņívÜ9Íj3•¸Ņ'ŌŖiíĐJštũáK3˛FJõŠ~ũCq™_Q^t*)Nō5kB¸=IųģU5 ŊGÄfļšeˇĩų§ĀûĮûŋJąũ“pIS;ƇĄ8úgšĐĶt˜4Ëw[tûĮ,Į–'ŪŊ:tŨáĢą“ģÜž~ā÷Ļ˙^ԐŧāöøĻLX!*2GoZæ‚or›+\^ĸ9AËcōŽW\ņͅ—Ú-mZäōßųxëVĩMNŪ1üåķ1ū¨ũũàĮZĨgk?ö0…¸š@\âÉ5ėR§Å9# 7s™k¸5xL°˜rč~ökŸÕ “d{S89ÅušĪ„/-ã‹QĶ~KĄËĮŒ,Œ{~>ĩ„1jöōBcōuHKo†FĀ?NüWą†Š Žđz#&ˇ<üüŽR`ÜõĪjP…?ĄöŽÁ´ljē*ŨEō´gīįŋëK­2ė[_@čîI°ãšî3)ÁmŗĸšŲģ#qįšô? E}i’R ,ۆ8#Ē˙žkÛÂw÷<3ržb•Ü=Ģ´ĐôŒX¤ōīĸūÜH;ū4 ÛŌŽWKŲ*6û' Håˆōō~÷į×ķŽšqœŽ†š[ .-Ū „Į=×îŸö‡zØĶį’#öi‚„rIãˇŊ 5ēŅLÍ>€ Z)š =é§­<÷¨¤Įë@ü įNģ#øAUäēHįænĘ*#4’Í×ĻA\ëE.^¤ŽZ{MQ‘š­y)H[ĪM]ؙ;"ĨÍûĘô\Ķĩ¨cœ;ČÁ@!ÅsōČH$ˇ^ĩ™%ÃE6Ā#ĶËíķûÔ­p’ĮšAW›ųŒVļ™ĒM‰üĄāgŌļtla‰ģŗ7Ļ]īíš<ąĐv52ĄtĪ\ô5nMę8ɨZ“lĨ‚ˆGcŌ˛æ‚GÔŖÚ2>•ÖĮĻķ?OîÕ[ČV9Ą 1ÍTgf?dÚģ#°V‹æ~aY+Öm-á’šS3ÆĘ#‡ÜwĻęž"ˇĶíKŽæ•ō#š#Œũ+Í&¤rĖXą9$úšpƒz°ŠQArÄxęëíHĀģäˇĘ*HWHú †Vø6:ŠĘ´šįËŅëEr[4ctŽŊsÁíÅvßfŗÕ ŧR"_DÕ ō :Ģáí.=BĶyEVn8#×ę*eą]:F‚ūHž î æėÚOäjciûÖÔÖ1k^ŒØ´Öíā"ĸĢtŋ/•–,}ąë[_]ÎĩĶ›ŨĻp˜ü95™`ēmü& G/2¤Õû#uevįt°…™T“øâ“ƒ}ln›[ė^[m^qûÛØ-‡¤1îoÍĢ;KĶ ŽĸōŨ\Hé2•Ëā¯p0 tģ°2WŠËˆc[ŋø„MúpŠŗ4i]úН'BMXî}ęĨËa1ëHÕ/ČáGJđmrČiž2Õ-ī-¤YWĩ…}/›­Ú@>ėAĨä*éĢŋAMči>u^Fķę}i˙ԚTƒ¸ †XōŧqøĶed…•‚˛°!”ô ÔáwG5&ÜöŠhD´}Q›BmÆ×{=vķ'üū•ą ųČíWõŊ7í6ņĪÅÍŗų°Ÿö€éô#ŠÉŽán!Žu܇¨=Įāx¯”Í(û:ˇ[3ä\%8€zõ¨ã<éJn967Ëģî“Đû}k˧ ̞ĩėRœZ˛OŲŧLØág‹?ˆŽoÄ: ŋÖíŌ/• Ī#Š9ŽōĩčfŨĸwņ ėüǜüŌÛÉ!ąˆĘs&Á¸ÕkËČmÔy¯‚~ęŽXŸĨvs%Ŋ ¸ôPw¯Z‹X…dŅn”Ÿāę:õČĨŧ×d+ DüÍ'.GĶĩ[Ôâķ4ŠČ_ũV”¤œ‘2øYŖX…=0)eQŗĨJ˜AŠkō Lĩ-hyˇŽ´Ųm¤ļņˆ˙KĶÛ,ü´„ũåü+ĸĶīŖŋą†é>äŠ~„VŊĖ+$eX)V{Šķ+äđ–Ŗw§Ėėm 5Tķû‡<2ûŠá‡ĨxxüäæOɝįŠŪË2G÷Ž1YskB õƒËʍžøĻÍ.f,yF ÔsT5HܧeԎ}…y4°éÉ_Š´Ļ˗rI*Ÿ“ĀíŠÉąŋŧĶŽ– Ÿt$Iô5j+Ļsˇ?Vã53yr‚ ^āM‡ƒîzbļqŒ}ŲĸUŪ¨čā  >Ŋ)fãæ5 ”McÍ9‘žg#ĻãR\N+ÆŠNŌĐŨl0Ę%žĩęnP)#=¨–61jŦ°8ōōqĐņÍwāįMJ[™Í7Ą‰gĒ=ߍã.0Ûģ#šŽ´“Yļp]›Ų™Øa@čĸ´3‡"´ĮVI^ž„Ķ–Ĩk‹(ŽH,‹ŧtmŖ8ŠĸˇD(äqšq+æm%s×#xréGŪÄäuĀS×ķŽüĻn8¤ē3*Ēņ2&‚MNb+c¯Û(ŪŊØ˙č´=NĶ_…´ÍVŲEäcG 5ŗ­ø~ Ņbņ´|Å4g {úŠÁ“JūØ"č5–ģj ŽUĘŦ t#Ô{W֜…Ą§ŨéŅ_ĪĶÜūå%'÷gĐ?olÖÄ6QĪ |:H§ƒˇ øûûÕ}&ũī#:NĩÛŨ¸`W 0õ_zڀ4@A)fî9ę@õ÷ ZŲrŸĄaüCŪ¤d]…ĮÕgĘ#ˇj6g¯>ô,ā”å×øēVCĢ,%ĀÁÃUĒU<{÷  Ŗ<Ô`͉üčsŠŒ‘JzT|æ€8FķŸÄÕČO>ĩZ8ēᚺa^ Q ü¸FúMšīЏHD&šũFųd&1×?7á]” å$eVJ(Ī’SΝqTg_œÎŦ™ ?ÅM”g­{´Õ™į˛›LSíVĄ‘¤Ãƒ×5Rō&/ōúuúSė7c‘Ķ­u4š$ô QŽâŒ˜eāŸĨuc8īë^Wc9‚qˇĄ=;ôM&įĪ„då‡\zW X[SŋW›FmÅeęD‘ĀÎkL+ÄWÚZ$ĶuU#īdŠĘ+SĸnŅšį5R)a,wG‚vüœ+“$ũ ķõŽļûLÔu;Kn€•—œ¨ëšÁŋŌĨĶîŖ/"HŅ—#ô5ŌäŖĪ•äī`PŌGōŽ9÷¨æP ü]…/žŧķøzŅfG{ööŽj0ŋŧúŠOĄbÛTžˇĩû<7RĒǞîYĨŸ{ŗ1=I9ĢrDÉČU Y\‚N1ųWbV!Ŋ,t~ÔäĶŽ÷ÄT6˛ˇFę:}ėrAŧÛ?RũY#ųWŠBN8#ž+RÛPš´ŽHĄ™ãY>ōĢ™Á=MiÔqĐõû›īėģ6Sæ[÷Æ7/×Ö˛!ņœuC*]Db‘?ēC}kĪ?ĩŽEŒ–ū{ˆsĘnČÍWĐmdÔüAn€eGÎųé´Yō$›fžŲļ’=°Č g+“T'mīSÅōōE5‡Á×5ÎÄȕ:Ö/‹ôÖÔ<;s&é‹ß ˙…t ?ZyPELãÍuaęē5×CÁŦbÄéā’ë^ŸĒxa5ģ+­ö¤ą(U#úV&Ģᆲņ76ážÍ$ĄũpÛēWŖŲĒ„"Ø âĄCâŒĪ Ėŗ+ēUhŊwũ,ÎĚGŲä𞖈ĄųYÔd借į^…åˆĐÜ–?gę:gÚõí&āĻVÔÉ&Ú*ūu¨ü îJĘČųšÍÎNRŨ”&äŌŗüŧš­_Ÿ5Yyzv2jä–ņ`ÕđF*˛ā`žũk?V×m´¸ ”æ@@Į‚ÜŌ%Ųj͗~ĩÍØKöwPŸ˛í‰ Ö]Ž"”Ę/‘a |Œš9ü*Žâ=6Ų$3ĖÂIe,FÆ8´$”$ĖÜã&Žō1œTâ:ÍŌĩ[MN2ö’oU8n ū5ŦŖŠËsdĶÕDŦ´žŨųjČÂŖúŠœs×ԐÅaÁõŽR{ ˆ/fdŒíáo_Æē—?%E2)ûĀÎ¸qx8âRMÚ×4§7ŸŽBGčiĶAÜ)†å?âŠD­Ī nNkB3‘_ ›ƒˇcˇtPĶtK},Čņ’YN^IXŠžŨ~õ<°Æ Sš–X˛Y7ÅũåûÃŨ˙ šÍÎW{‚VØˇæIáFsUZ(Ũōv’Ũ9íIa4ˇI^Ž2~E“†Ûę~ĩ*ÛÃÅÖx,8ĒI§¨Ô­Ē+U'úôĢđœUBĘ$#͌ôäĶ%š[wF?ÅÅ>W&ZNl_ [ļŸ{Ŧéäb1p."ôÚãüEt­ëúÖEœéöØærPÆ˙Nĸļ$õ8 ū֒OuŖ8+Sp•™Š^Ŋ–Š`Í˙īšúŠÔ'#5STą]BÆH ÃuFôaT´kᏀÛĪÅÄ?+ƒ×ŠęO–v{3žöv#×#Ė—ĒɰŸc\:Š:ÆîpHØô f?K“Wæ…rz]’ßŲ]\oÚ|Ī‘Ī`pâ`åQ%ęD–Ļ͞ĨsykŊ’|ČË+rĢOSWbŗ‚Ë3;îũųenkGšš4’ÖÖ<ä;pŖüjk›i%˜#;ÜĪžIûŖč:UÂĩ ¤õ`ž—/I­ÛFqyĪb́QɨßŪÄÉ €ã…Ë7ZŗeĄŽsĪ÷GJۊã@ŠWĐqŌ´Š­7y;fÖĻ|pę’'Í:Æ=;՘-Ž#}ŌŨ4ŊļíĀŠîomíf‘Tž‹ÜŸĨō€ãėzÖ°§÷mú”’š ĸ¸Ÿi"îÁ¯btŽęÖ9 3}ÖRŋ27ą­vr°Įé^5ņ;ÅM/ĨYOōF¤ĖTõcÆ8­\T•˜ö"Ōž (ŽÂÕíHJ“Jx!ą€îu1jöWV ĮZōËk¨lāŽÔÜė9n˛cųV……ÄŋjÂúŒŪõæTĀÁ7m TŲęļ1ŲjąĘņ2ēĮ#DĖ:†kjÆ,@öŽ áũĮ•ŦkZo͡Ė.}Į5ŪĄå‰¯žÆÅ͍á}ĒnęãÃlcĀëUäŊ‡=[¸õ¤š§ˇt^ϞĨąŧ0ŧQ")aČxĪK‘üNÅJčÔļÔ-¯r ™XÆpÃ¸ĢžõƒĄxz=Ū3ģōĮ§5ŽķŦYŨõĒĢN>Ķ÷nčQnږ™ą ?­`É|ō]˛qš’ká(b8ôúV$wŅDÂûŊđĩÛF„Ŋ›mkc9KRü°Ë=Ü,ŽįįÃxÚknjãA\Ž—~—:ë˜cc ĮåŦ›¸$Oį]ÛâC´|ÍÜ įÄÆŖqV*6Eõ&˛o­„ž-ĐX&|ŋ9Øã§ËëUouš­ ÜģWœgŠĄc*Ūßé׸\ũ™ÆīBX…zyfÆ˛œŅY^6FûœņTntøŽĐnûņžcq÷Ŗ>Õe›įŠ"åÍ}ĘP{8ĩąŠ–<GŪt`{U˜!•!Ų<‹6Ķōž0Ä{ûũ*ĶC— 8aŪ›ƒŽWĸ¨sŒΞhéĮz(ëIŠk}x§ģ@ ÅĶÅ u4ڐŠié@n:ĶÁÆ) ô¨%›g×Ĩx´Õȓ°^N7>ÕËŗ'foâæ¯ßܒūWnšŦâHãÖŊ|=>HÜáĢ.f9@Å#sØ˙J‘G‡Ō˛ņˇØ×t69ĘĨCœžÜ xO,–B)áO>ž´đŊj˜ S†vÅuÚ%鈥ž„{WÌõ­Ģ ļ:ƒ‘DŌ{— 8ģŖŌ`•eŒ2ž*ĻŠo ؊)‘]wgžÆŗ4[ė„ā7Sô­ šA1ãĻęãq問AMN(Oböķ¤öÜÃÆ8 ?úÕÉxÖ]‘K–YNpžõÛß^Aik$÷Dh2Ųī^EŽjR_ŪË0cĪÉįjŠÆĸsJ+ŠZ‰^?ą‹Ąē61?ŪSÕ~†ļ§Ņ&´ų×÷–įîČž‡Öšß%ņ¸Ž:ķ]´ZäZ_†ā•‘gg5w÷ĪŌģ_ģk°JWšÎ\\ÅhAh՗Ŗ/­a^Î//^h H#Îzzŗq/Ú&‘ČQģ$(蠚Ŗķ›ƒZĸč]ļ\€wíV˜ėwaÁ¨ab‰ģæ˙g5ÄĀāĀgîõâ“^="ū[Tš†x¤Î6ķ]§†4!Ĩ<2ŋü|JŦzt8¨ü*>…‚Å×;”õšédڗVŊˇģ\ō“zP¤’R6bQ°TW1÷ü*­æĩcĨÁžîå L7AŪš;Ί:ZB 6—1l2œ'Ëëž*Á&tš¨îÎŋąũiũ̃ƒâv˜ų7wPōÁŌģ+[ȝí"š€æ9P2ŸcMχÅė%‰xažM\˛ā öĒ|šfĻÅķ;XŊīQČj@r*­ĖĢÜN뚊— Ē­įšŠķUĩBU¤P@ŨíŠæoõé$&Čá{žŪ —Q$g)¤ojzũļž6ũųą•ŒW ¨]ͨ^És0]íØgN‘NKŠõ¨eeųŊˆČ5—´r9ĒMČĪxÎsĐv5l˛üÃĶfæOܒ8ū•ZĪ"Üg“Ûņ­oĸ2:ßŪĩžąöā™9ųyȝOS˙ׯĶ/[OÔ!šN¨F{ņßô¯^ąŧKÛŽb A‘ž tģbæj9NˎAŪĒßjY@esĪđ¨ęMeéw÷ēÃŧŧ[¨čßZĘuŖĒ}Yš´dČôÔr$Á{Š…Hå8äRîÂkQÜĘÖā1Ü €ų[’j+vߌtõ­Û…Šî‹ŠÆAŽrØė 9Āõ¯–Í0žÎˇ:ŲtgxØēÖØÔĄAāŌ{÷ū´ƒ‚1\1Š4l@¸C×ڒRFķŠ›ˆZ¯?Ž•ĩ„ŒÉžK­ķ:ú*Ž?ãXē…ãy›äTöĢ甤@ÎõŦø’äâTÎAä]”iėŲęaiÛSJžķáGo¸ŨôÍvņcȏ<kĪ,ŠĮUázØW[ĄęËkörëæĮÁ^øŽÜ QŦ×sŸ0ĸų9—CPŸŌ˛¯Ŧ™.ūÛũjũõūōÕĢˑn ÆI8ZK[ƒ<9oŧ8¯Nsƒ—ŗ{ž#F~Ą|a"¯&X›íÁŦĪ ZEũ”<ŅšŧÃÁä ˇ­Û {…p˛(Ņ ĮĨÚēŖ1a‡ą'ŠæænŊ§Ņ×Rô–ËÜw 6ŽøÔëö{BKē ū&fÆMgŪÍ;å^x SÕFYąU`´Ķä“uÍĖķVMS¨Ŗ'a7mI|Elœ[ŖĖĮĄ …¤ķ5@‚6ÚCôųšĢÖOLyP`?ÖŽK(ÅęĖ +hFU5rĶČvîĘVz,ĪįJZyûÉ'8ĢRˇŠ]ǤÍ[F *ȤŦqū>ņRxD”!cu,lSÂ:d׆˛ėIŽŽäÄyh=K ą>ÕŅ|Eŋ‡ˆö‰˛S&î‰?™ŽRúįxp†Ū{(íZ žâ!vŸčĖŗJpģOĖ}q]‡ėn#ÛĮúČö’'ą<5i™†ĸį˛ˆãr7œ˙*čŧ9;I¨Ė,-™Į¯ ĩHs+ …:Û|C*Oģ~î>`kŅ đ{W›Í´xãJC(rĘĮŧː?Jô´ųã#ÔWĘætš¨“ėuŌ–…9n!ƒ×ŌŠ]ę†C#Žsƒģ§[Py"ēfmÁSč;UKˆMĘ^AĮ õŦiá Ŧä9LßŌõÔ`-Ŧ‡ŋ×ņ¨ĩ1($ ]žžõ—áĐj7)†1ā)“øIĶKšŒŋ­TŖ54ØæG1ƒą¸ČolÕė3s}ƒÕw]ĩÕŽž¨>]¤õ=ąVVŲ"]Ād÷5Ōąj+Ũ#’å{=>;8"}ŅÆĻj„˛G$,OŊOņšklÜĐ4Ų܉÷°i.ô{;ôũėx|į|gkf°§Q'yõ)­49ÍG`Ķd™ū⌟sŠÚđÜfŽ8üëČĘ{Í6/Á‹įOqp‘¤ržåéSé™}oSsĐã‚įú×§‚ĢĪUEy™TZ\ØaRB{ūz–1^Ú0,õĨÅ1~č§Ķ„RcĨIŠB(´įîūé?J”zúŅ"o—ą¨íÛ}ŧg۟Ž‚ęIÜŅڌāŅŽ? éAë@4Ü÷ 4t?ĘŗīXŠš“Œ÷Bė3䎕äŅZ˜Ôz’1yä=})Æiī—1Ą9úfĸs‰:u¯^ž|‹K‚GëJÑPÁ.ücĩYq‘ģķŽ¤ˆo§~ôĐĀ!ĪZ\ôĮ¯Ą2qųа '¸ö­ sŗ :wĒREˇ°Š­Ûä*{~]Ūˇ›Ë¤` h8G~ÔáÁĀn;Öˇ3ą8bŽž€ãÕ šĮ÷đAũ*ÁaÃwĒ—+æCæ}‡Zö:­ÅÖúuŦĨŗ´Ž~ųl:qíZúˇLIeöo*k”É”P¸āכ΋ÔUԋ÷c׎Ԫ‘nhĒ´Ŧ‹—ˇōîgy¤$ķ#ŒžŪ•U~|Œūâ¤t§BÉų}…O!Mî5°ƒcY\÷øķ 'ŠéW͌W?áÍV_KŠæ'Ë‹ŨXu­Ā@âšeχ Ö„í:ÁcĐs\æ¯ĢyéąQ@=4ēÅķö|pqÉŦbIÎ\UĒģōŖ9ÍėPšŨœåŽsQp‘­&`fjr˜-Y”ō03õ5‚f ĩōėŽ:žúÕ+éVG}ĢRjRoû2ŽŒwĘĒj”‰}O€­S%îA8˙EįûŧĶ`lÆ9õ˖&OéNŗ( tíËrK*NÁ]Į…uámĄK ĪžX¤Äq˙˛GōŽ'ģwŽÛÂēLfĀ\Íĩˇ’UzŽ=k)Ôr÷ioßĸ6ŖĖ\ŽŪķ[¸\nHGŨ8ã°Žš(RBDŠĒ:QC€8ü*ČûĩTh*w{ˇģ:ˆ¤\|Õ °Įi‡sT‰ņÜ•ŗcŲÚ9ķÛĄŦ7ž(üG{`ģ˛ŨGéĩ¸l}ųÖø‹ŋ§SZnĖÜĻj0x8ĸŽr+éŠSÃũ:×ÎėuIØ÷éQJN{Ô­Ė|uëTI—ídË´&Ė"ƒžĩĸØ/fe_Ã!@úŚ2äž1îkĒž<į=랚A r§îõé[SĢĐô°ĩuI‘ÛŸ.<7zûbĨk÷ĶįĩēMŧJ¨äôŽ?,âŗå¸A"Â2Ę@ŲÜzūíVS•xŪCÜb&ũÔ}[é]QNé5]âŅŪŪF.#MŽŦŨr#5^ŪF‚L㎌+ÁZĒjšTR‰2ÍĩŠž Ž盋o0oQķzz×}HJ¤UXî|Õj|’hĄ¯ÎŋؒÉ—Ŗ×&ĸ´ļ}9#CĖEĪáũ*ųiukļĐûØnã­ur,iķšSūÎqJ/Û7=šˇüŸvT‡Fļ”w’‹u,ŪŒ˛F_bšĨŗÔ Ė-'Č>땭ež)@)"ˇŅĢxFEļŖ˛g2úÔ|Æęßđ,SėíīâÕa‰îSjÆÎPåą’t k(|HāöļüZļĨ…‚nJäĩkĪÔ%1ÛĘèC­]‘ĢW$ŲJ'ģ VČĐųË[Žĩi{Ŧ–ũä]"“Ti1PY)ŊũĒB)1Íp¸ųG,@ŽjFlšŠ5ČLn8åS‹oC ´dßDŅÉģ ĖfķWīî §ŽžŋJÃ}ŋ9Īûž•Q‹GĘõqԌšomõ5æŗ.]Íöģƒ(H! Ņ8ũMP uīŸZƒÍũæŌ99ųĻ3pˆ[ļEtF,–îY2dđÍI-Äq&7¯5H.sė)ķ[›{4™ų_eĢžĸCÚt‘ĀW\žĸ§AÉ?ÅōûķXSÜõüëbĘa<$ôtÆ}ëT‰djĻ) D.QWÎ1ہI4ĀūđÍ@d!ÆzįųQdIx¨t|uÅQ,A8ā˙Jˇm'™’xĪTRĮÎWÔÖOA‘ z˙Z§*ŨjæĶŒv¨ĘäŌ×|;Ö­ôų.lޤXüŌ7n„ČĪōŽáŧUdųoƒ€ã…?xŗ>Ŗˇ^kŠĶ•’ÕN›ĢžŊ’šŅ ­G•T÷fåōĮ$ū”Ã&ZĢnʉÉĨfôÅy2Z•qōKīJĘÕåeĮĢ-[rG~+'U|ˆWũŦū”ė č%ÁųíŗūzT7 É$CžIü*Y†|¯ö\u÷Š™t#’æŠÉE]“šŸŅD8>M9IE]šÎqYT{Ôŗ0tp#4‘ƒåäu+ģÔ¸ÉÕx¨ī#‚xÚ`Ŧ’Ŧ§ĻŌ)Ī0H÷zũÚdų€ŗķžŸZš˛ŧŊšW0´Č$ŗ„iō–vļ;QĪSÎĶõ i|§ú՛ÛLIÂõPTU5N3’UēšųėENĢ‹:āîŽ*ļ2;U+—Ų–ė§Šô¨nī˙ŗœ¤°ĘëŌ3ŨžŪÆĒ­ÄĐBĶj/´ÍĘÆĢ‘ėž¤ûÔ*n×,š$ƒ`Ŧų†f+D;ō†L–3ÔzŠV;Ã׊¯fÎĘQęŠ/2G=Túf‘~t~Ėĩju%3œ€ûÖEåúY–ķ†É0@SŅŽ?‡Öēb¤ô;šôÔŊá ¸lüUącTŗŋˆē“ō"œ=ø¯FØCGŌŧÍXž(>o6Ū1"ëüCō¯PđöŖ̤ÄņMŊãų_=r+ÖÂÎëōs  MõąF÷Ä×rĒdE?+¨´KĮ䁂qU´­=ŦÄī.ß2YYō9āž*k„1H'NŖī ˆR•5í;î-+Ž´Hä|Äė‡Ķ¨ĒߨR‚?ŌTwûĻļ–U‘āôĻ1Ít}Z”ĩ°rĸ„VŗÅ˙/nqÛ¨ĒÖōâ+ÂNvBƒõ­) cimæjē›˙Ķ@ƒđ×Fš„enÄKâFšũUĄn<ĖãŋZÕhÛ9ŠįL&\sQÛ0ûĩ3ā~f“e#>q„÷ū•KĪ0F˛œ“Vn[’ĩ™q“ œūĶ%^Ü=ĖnI凘Ē&#Ŗ8ëV7oO”wéWš$KpũXŒįÚŗŠĢQî8÷2™p ö5JoŨ ĮåWîÁģŌǏķœd•ĸ…s?arIĨ6}Ozļ#ųŊTšR‹‘׸ô§b“8žL7Ũ튖ös$ ™`ÍßSí'Ë ¯ÍÛæ¨–f/ŧĮ*ĩ^HųÃ?•Xĩb—ęŠp6sīŠdŋĀõÜ}ĒÆŸnæwšpÁq…÷­Ķš/ce1×ÔUK”zpĢ*BtíM¸"H֋’W‰ļIíüęĶ(äŽũNJæL„u­‘zv5‹c#ōCũ*]„ņÁãšŅ cĨ@ËÉĪ9Ĩ{ §;äÖēx6„ūUˆ#7žO)¸–_”ŖĄõŦjÅČhŲ[ōmÎTv÷Ģžhé\™aí]ÃGž+nÎ`đ#“Šâ­MCŪ5ƒoBô­ų˙JČԘb3לUŌZSíũ*)āWÚNŨ üŲôŽ%UÉÚŅŽåSˇ Nģ8ãžjÅÃIi3L…‡EŲUO“?e™÷ÆĶiß`¸xĖĶHŦGD+ŪŠSģŧĩ1Fn/ŨšRž^r^Ļĩtkˏ&(X퉍đqøĶll¯ŽfhĄd=~W§Öģ})4¸Ũ_Nē.Į—PŦ?JéQMŽģÔˇa`–PƋ6ĨjcˇĻ ŠÔ[{ПšÕAÛˉXū˜ĨMF<|Ö×Iۘ[ųoėüˇo1A7)SŸÆ­Ú*÷:UŒÛ›Û菒ĐÄíĐŧDĐ˙:ÍL˛ –ÜO;ēŌ*‰āÛŗß9­{;o,naķĐW|DõؐL¤ Z™AJĄ' ĮSĀŽÉÉBweŽeŸhč8Ḛ̄cĩV´‡Ëįø¸Ž~†žÎov0 žõÎ]N\*ŗĒœ•P[œtކFĀÍpü?w¨éÖēž›#­Ũ„†tŒtŒgņâąÆa•[Kąĩ9rģ3OŸzŽVķ#āāÖ.•ĒŽĢĨ[^Ŗ( $uÁî?Sœw¯#Ų;žŦ)sE4>âlOLãņĒæLŽ‘Î)n˜” ×ŋØXéíZ¨čo[RĖĒ }xaY“Bˇq€čŦČ{ŽpÂĩG^ÕRŌ+ĸĮ)ų‡ûT“4ƒVkąÅk‹-žĨŊKéÁ÷ôĢžņ9đū­crĪū‡rūDã'ž‡đރZĶÄr(žWę+ÎoŦŪâۿȪ)꛸Þ+ˇ 4ĨŠĻ9}c ĨãĄôĒȏt*Ęà ŽAÍC$ƒ5Âü+ņjkúŌŽ>KûØãw,zėäČrjõ–jÃōođ?Ũö51>ĩ]ü)ĘCÖĸ+—E°„>†˛´ ß0čn[ô­r¸Ŋ5Ÿáčą§—îōģŽkĻ?ųŋ~]TXē™Ŋ6‚7V†ÚĢ“qsŸģŧĮĻ+3C„Ö´Æ—ÅWņ4y†ęĘ6ŨԂ ^?W—jVFŌíâaƜ_DĪeˇÎG΁“?ėŸ˙Uy§Ä Į8Ôbåo’_÷ģ~tĀĀ|ČF9뚩8&^ĀÔčMŧÛOܔā{7˙^$DČãxvĻ]đĻX„šĻ”ßō×lčpFÖū•Öë~`"Ėđč:’§ü+Í<#zÚg‰­.@mĄĘMūãp.ĩīčĄ˙ĨK?E¸š\Mü`ĀöŽcĮ: Ė[øŖFEūҞæhƞ.ųõ"ģkD°%T(œíš5<ëGoJÎqRVcNĮ9 ëvÚî•ŨĢæ9CÕ[ēŸqNžÎ4‘úsÛ5Íęvø;]:ŊŠ1ŅîØ ØUsäą˙–€zz×S<â[ëČãc_7W,=^Uŗ:”š•Ė NŊÍĒ&īÁf‚ˇ4É­ãHíĄā"`/ 6@éΎNĐ]ĻŦß6ôãÖŽĨ(Úû KS¸$“Ōž“Æ_nõÍP¸[”ˇ"!įyw`ƒíū˙ \A ŗÆīō™eā/ŋÍrQĸ§ģ.NĮ`ÅK•WVÛ× Đ×?o‹OMáníũYɅmiÚ\Ze‚Å’Ë“–y$’95Īø¤›+Ũ3W]Øĩ¸Ėw`yR|§?C´×|#õ|MŖŗØÉûŅ:}Ø, I5Y\H3VíœöôiĢŖ™—JkRąĀ¨‰īTüBŽÔā)1@ =1XZ”†ßYĩ”pŦBŸĮŠŪ"°üE?uņ[Pˇ=ŸS*×åē7#<ʤū‚ž4aŅ€ũjzČÔm4‘ĮĨ8Ôl:zRÅP&OáëÖ´cbĪJĒąā“ß×ŪŽ+iEļyd2ļAĀīÉöĒ,œ}ZŧŅ’Ž~ĩWø˛Gĩ 11íZV˙ģAūÕf†_0ÚŽĮ (ūŦ4D˛Ü2„rĮ§Jļ˛ä1íéX˛\ųdžš<ŠšŌāyœž:`úUrÂåŋyŒõŦû‚Ō Uã5§,`Žđ9ĒūX@NãõŠ”ÔUäģ˛2ŖŒŽŊ_Ĩ^¸d‚>īøTĢlŌ„ÉôJô*vlį8íYBMĘōŨöDWŅųˆ¤}Đ2@Ē{pĒ…]—ËÉįQdŨŠŠģ°ē~‹¨ØG ˇŊPCÉ* Āî+V Z7ÚE8ĪXŸiüh,gũ'Ž|Ķũ)ŅākŠÁ'ĄĶĢ‹QbŸeuîJnĨO$ĐÜĮå$ŠI?tđZ–ĐÕ Œ‘YÎJ×/S6+(Ro¸ģ‡ņ ]€yĪÖĄ•BM‘ĀĢ r8Â1VHce˙RsÚĒA –LŸē*ûG˜ÎjX 0+šŦoQ_aŽÜ~€SË ­$ÃĪ(:wĨë[R•Ķ]€l’æBĀķÍmÂ<21ÅUfÆĸãæÉ‰OˇSOVhÜ0ę5ģHšævļīĄøŠ˙K™­ø$Îp’uíÍG¨ÄâXfĸ8úÔŠ4ô„ü™åē6ŧŪņåŽŗ†û,įeȇ¯ø×ŌŋēšŒ\A"˜ÜÔųˇ_ԚX䍡ØzG‡Cø×kđ{ÅMwc&…v˙é6€”ōPqÂŊĖ=U8#ÃĖ0žĘĢļĮ¯¨č}jPŋ>=:TP°8ŠĮŪŽ“Î!ē&+)Ÿ¸CĘĸŌa1ivęFĖ‘õæ—U$i˛Ál(ĪšĢQ(DUbŽūá÷ĮõĒđDŠqp@lš“ôĢX¤(rÃøąŸÂ ą<ž1YúļŸũ”°0á†3ךÕĒīÎhĀ5mki.bhÜć—ÛŒx?cÂ\ēĢ­Œíaëž˙}ŠiV—°¸¸[‚9ô5åž"đlúWúmšiŖ Į;OcB``č!`ņ%ĸÍūĒYB8ön?­{~…,Ÿaû<į÷öĖ`cũā:Ä`׈ÜA-ŧöˇ!08um§ŊŽÍŋŌáģũ]ä+ŋũā2?B*ØoœcĨC!'¯ų4đ~JēņR{‹d¸ŽHeEhŨ ēž„įôĢŅŽ?˛%-%ší]š%đuũEu‹M+qnWŖŠÜŨXt"šņ#ZŦ¨K•ÜÅšĶ#r~UÎX |0FƒV˛čN9ãĻjqÆęų*ޤféĪtvĢ5tNŒöčE.ŅœãšĄcŠũŽîháu˛ Ŋ™ģô̞ēÅË:…'‚jŌ˛VZõ˙?ëa"—äØOĢÄ[ũ”Ûß&ë[œÄį˛į֝}­[Ú@\:š<*ƒŪš-W[žæĘd•ŲÃ˙đ1]´ŠÔŠËĖļüŋāļ–ĮKáŲį‚ĻŨIæOlYįŦgîˇ×ą÷Ž˛ØŒq^¤x†ãJ×"Yæi"ߡær6Š˙^Õer˛FŒŽŦŦ2¤t9¯~‚q+čs=]Í _Z<ԘĐH”ÚŊ0Đyū•™­Ļũ6L • ŠŅ&ĢŨƒ%¤ÉÜĄĮ×tåi&LÕâČô‰|Ũ6č›OÔqZ‡áŲ‹ÚJ‡ĒHZÚÍ:ĒĶhTŨâ˜S$Ɯ{ĶķŠŽCÎ=ë3CĘŪ„ä`ŽÕ,QäøUģøJLXĩWO’?zë<ļ†2 Žyüǜ„Ā˙<ÕîKæ”Û âX V%Ŗ .ųõj(zV…Ģo⇠¯_ūĩ1Žî2ƒīÂã¯\ČCõxbÖc8lČļ~ī=?ZÆKQĨ{÷F'‰,ÂŨ…Čû’a¸ö5į÷7Wņ%Ļąjv˛°ŨŽäuüÅ{%ė)äˇ?# sÚŧã[Ō Įi0PĮ•|ŊĢŖ [’V{ÕĸņX~Xīuđūąk­é_ZÉē9T0õĩŧLwæŧ?āvŦÃRŧĐ.äÃÄĨā^™9ų‡áÖŊ´“c°é^Í7+{ĮËՊRĐeŌyĸ%ūôĢ‘ôæ­Q˜Éš6ėš?‰ŠÅjŪ‰ĨĢ )i !¨\wüéÄĶ ųOŌ€!”1ŒÔ&4xʸRPW"¤cQž¸ī@žĨáxgĶe´€ŽdąĘž¸ū•ą Š“Dˇ‰ˇ‹2rr+Câ’Ū"wÛˇkŒãũǜԁyŠļüÜSÕ(:g­L€)M+ČÖ­šxsųs ŋ¸õö5ˆėn!RĘHdaœ05Ķܨt*kU€ÅÛ`‹Æ˜‹Õ”Q^fa‚Uá͉mūFÔęrčöČĀE ¨Soáû]ŒÖøR\ģēįPŦęc œ‚2lPú…ēC–™NęųĒ2œgˎ_Վ™-,yÁšÚFˇ”˛Č¤‡Œˇ|ĶbžáÕø=ÚēÛĮwoí¤{î”ኌ‚ĸ¸s/§˙ZúšRU)Š/¸äjÎōVĖ8ķb ¨Åjø'ÅgKŋ {3‹iF ¸í#Ļ=gĨĀtۜŽ: Ëģˇh§ķP7GjŪ-’Ņôf—¨Zę0mgIĨ•˛2*ņ5á^ņ|žžQ>įąč:¯˙ĒŊĸĪPˇÔ-"ēĩ‘^'R+e5{ ÅŌi‡Ōšdįô§ °Ž´ÖzŠ“‡ųĐ=áüĮ{{ę0Hú]xŦ;"ņÜ!0 ‘ß&ļÅm_YÜʎ‘°Lū,S‰ ūĩ‰ŠĘ_Y`ĘzįLNUģtŽėĸȅOC\ļˇdđ7=öވK˜â­NÚŖ0ņЎ1Ú˛ÂÃ<ÅMéN1œbŦæLÔp•̧Æųv •÷÷­“h7-’-…Sæ<U¯!TBHëé[QÄ Ī5Š˜ĸBŌž3Ņ{š9ŌՎĮ1qnŨŽAQ4,@rŠÖ…eÔd${PunøŽÆËÂútö7ģ9įąX˜ˇĻƐ¤äyÎĮåŠŋoáÍWQ‡}­Ģ4yæF¯éēg…ôĢ$˛Éâ— y­+ëë{Dĸop0{VuqQ‚ģv6Žų3Ķ|sö¸ūŪP@ŧ°RI'Ķļ>ĩŲØŽ™Ŗ!KĖ=JōMkkģŧ´ĪäĮŨ\VĨ…œņ‚ŖŸīMrJĩj߲î˙Čč8Įcæūé!˜Iō‡™ļ§ tÄę.RG;÷79'Ŋu>!ŧß{so nā‰*+‡Õ%Ā9<ķŠŪ–ē÷ŸvrT›Øtƒ'rME;&ä9 ÍeEvƒåĪAĢ!ļ`į9ë]q§gsîN@Ķ úUv—=ų"Ŗi8úŠžQZ~„uėj$€OųÍDŒJO#ĩHŲxÆIëE’Üŗn v~ Ô-­/ĨyĶ{ˆWũĒã#†L“†ĩĄĻI=–Ĩmss°{âšjΤÕÍiϤ™ęËáĮÕä7ˇÍäČÜĸƸÅjC6Ą§ đ­ĖJ8–z¯øUfņ PF ÆĖÄtŨYwZõ҆ØÔzrkÉxĒūwäwŲ-5ë;{FydU%ØėčŨOjČŊ×%Ô ų =p[ëū“eo-â$ŽŽį'nyîkfWûÛUsõŦĒâëVmSŽ„+ÛS8™nđ§îôT+^ĮM|ōŒŋeô­ k­;eģąŦÍs\ŽÁĖ–äöėžæˆáũågv6ŅĄ-åŊ”;î$TQÜõĒpjĶęi ,C†šOoAYvZ5Ƨ ŊÔŽzg‚Gˇ Ž–8ŖŠąU^Wto-´Djõ œã`ÎOŠīKžéPK&ųä*Ėq€æ”}¤Š5āēʐ{f¤ˆđ}ë4v­FĩčGcHJå[ōEՑķЂ> ÕŪÕWR6­ÜLŋ­ZĮŦžTwdY"h˜üûןøŌËė.[”Ä7đáÛwĘd_ūĩz .qí\Ä"hVWãîÛNĨøįāķôŽZņŧۄ¨áQ4yĩ…Ī‘|ḟ§ZęāŸ$ãŽŲŖŸ ¸O^„ÚŌîZPGF^ÕæTĒ§/mO™î[ØÂl”tĪķĢL˛FGqH@–Đƒ÷犪ģ&#đÍe­ŠQæ…ģ–@rŋ•aøŠi"’œŒ°öĢ?—6A˙õU{–î…“ŸĄ3ŽĨaáËUy—†ļˇ6Ry…VB˃߯øÖ'ˆ1 ‚ā@ØÃđĻËÄ”öįčjÃįéŲ'˜Č8öĨdĩ:iŅ9'į*/o<9â mzČí•eÉxĪŋąôރŽ[øƒF´Ö ?-ĀĐsĩ‡Q_>Ū@ˇÉ”aƒCWžx–ķÃ&EÔØą¸`9ûĄF^•ëPĢx_ąķĻ ŌÄ>ĖúIzf¤¨‘^E8ėGˆĮæŖcÍ)8âĸfīEÄ zÔ,Ôōj÷…0 Đ<Đ9Š /˙^ĻUīB¯åSŠjŠxĨĸ€šĮ¤Ô.ÔÆĒÎyčjry¨ä‚OQR{i&vmPâÚ|ŊžOŨaË'͏Ž^îđÆ |ĀÃĩz&Ģf/ėžícķ#÷VākĪuH›>tĄVBLr(ėã¯áŪŧ|FS­Îļ—į˙Ú2n63 Ö$ˇy"”ūîDČĮ8lVÚáÃøŠąsĮšŪŠ,ģūV9'¨>ÕŲI(ėCw#ŠfŠācŒÖĻRâ¨Î8aŪ˛J‘ׯZXo>Ī6æųž=Elã}‰LšHăĘ5^ĶüEŠh5ĩˈs–Ē°úTr˜î!aØÕ2?åŒŨŨ=ąDgph÷ŸëÖŪ Ķ–ößrŒČŨAž>蝜ô=V÷ÃڒŨÛĮŸž2~YĄ¯}Ņuk}gIˇŋļ?$ƒzŠî nÄhĶ(Í5˜S,nÄd˙§_CŠÕĪąŽ~MrÕúîČ?‘­\ž•ĨM“ō3§Õy†ņMf Š\Sį™Ą“ö‚QõŦ]Zäų8'§jˇ3”įŌ°ĩɁBo#ך֞į%gd`ų‹įœt=>†­…'E'=Ģ^Ũw¸Œ…­’8ŌšBņN1üG ¤X3 Ī~•.Ã$…›§øŌĖûŽ+†’uę{Ylļ4vО1%-æ8nŊké×?.ÆûĮ ZÉ ™Œž§šĐąRķ#€ÛWšôú­ üĒ„°™IĪáíZƒ‘ĪJcpëžkZ^û.1lŖŗ ũŪ*YĄû›ļäãĨK"ËåüŸ)<i°ĀōI—*¯5ËKË­86S‡vW’NÂq“ÅmYĒGÁÆ*€ļW›—ärŊ>EošâOŪ#×ڜņuŌø-ę„WQnõeˇ ž@~đåEd­ģ^Î]äRGŪ-Z0éퟜãũ‘Ö¯Ļƒ ،xĐä–Õ„åˆŠĢ‰ĸŠz!4Ëx LŠQëęq[m}c Lę’+|ßũzåfˇ–ŌâH­Ž|ôŠ‹eØÉkWÛĶ#­DąUdœŸ3Uh3x‚q…bĸ#Á•x$};U˜u]>&ųvœõ”°Ž<ŨU_rqķzTëkæäÃ"î=ģʒŦß;ßŸ@u<ÍÆÕŖ “6I'Ũ銎<ˆPHŠãy<Ÿa\䅒mˇ!—žXt4ˇ7 ĸ*Ã=ēVūÛ=IæˇRŽŠzÂęāDaqĮ^‚š]UåžMŸÂxõ­'•f`Ė uǕب7ĖWt+VŠIĀŤۿdq:6sڐ™ ģŗžkD:lņUe™#c÷ŊkĄUĒūÁB¤rĘląö9dë´~´–WŠ>R9ëWãšĀNOŌĸU1/áŠAh.¤Vö ŅžlrOjļ"‘ÛŽ*pû:sšŒM#åsׯjÁáĢÔw›/š+bĀDÎv÷5ŗ¤X‰$Š{„hāncv+õĢā$‹ŪŊēŌÎÚ}Ú&<ŗâ<` ųVUđK–ÜÆÔ}ëŗ =3Í9픝bŧŒTŸØËĖ>|rN™Ē×]æ‘t_N™ž"2bÕģMr)ÃCpm0C•“€kšžŒ4hŅžŒ4׏ČDûĪČxīÚļVu´1]éąyŖĻJ‘ÁĶę˛˙ĨÃčxq]sŧdĶ&:"ÍĖŗČ"Û˙žÉüøÖUļmž{Ÿ>Bwony̰jļŗ’Œ|™üŗ”m9¨ŽV2K)doUŦĻן÷.‰WqÅV¸¸$m]ØīЧlėųŨøY Âļ­´Į”‚Įh?sJĩJžėj7(ÚD ,įŽ¸ĢM2'Ö§öL`…Tm1PœžqŌ´ĨŅV°Ü ë087Öĩ-KKX`Ô[F„wĢŅ ~uŲ+{ˍĢõ1‹h›û˛§_­]ÆEUÔŗöqŽŌ)?Y'ŒÖĪáC[ą¤V_‰,SđĨũĢŖc$*õČŠõ=V :ÎrįîÆ:ąĻhˇ7w#ĪšED“…ˆv_SõŽyN.^ĪŠ´'Ë$û 曋(Xōę ?ËŨxĢz]ĀKˆĮBp jøŌØYøĶQ´HŌ4‘æ5\ČÃV-åœt ‚ĄŽņļĨËjĻíŅĩŧá ŖsÆWéTe]“œt'"Ąķ‡îĻęįņĢW ũåįv qÅęzЏ#õ)LrųüiÚ¸C‘€n6ķî #)wūĩ4ą´ú\ƒœ‚ü*äŽ7¤ĸû3H$ąüR°ŧw6Ž0SŒzŠjKųrD˙yr0}kP-e}oŠE÷P)B*O•›b¤é.e˛zú3VĖw[páTĩŨ-§ƒÎ€7Ú!ųԁÕG'ņjņlÎŦ§*Ø#ükD|ā/ëE*Ž œv8šk˜õ‡*Äū…Ķí°č9ņŽÄœWĖēĻŪņÅŧûŲ,§Æví'úWŌQÜÅs sC"ŧl2Ŧ§ ׹IĻŦ„ÄPtågčũIYŽ)„Ķ  g<ö­ls sšˆõ÷ŠpzŌį4ĀsRĒôĄWĶŊJ4Ē1RÅRĐ!('„ĶĐ1Ē2hcÅ3>ŊŠXލ¤&•­3ĒŅ` ‘y"š?iŦ›î‘2’mY1؁ųOã÷k˛hÎ2:Ķ&´ŽæŨ •2’)V ÖuiĒ‘å`™â7‡@ĀeZšģŅ%ŧÁ‡QĪÁŽĶZ°“GÕ%ąšlĄbņIũå5ÎępûIéĪË Áō˛Ū¨ÍKŅ(ÃmŊEI2 ã :åY˛†eᗕ>ĸ­ZN~Wė~ōúęķDZĖĐHmېy_J° 9E?tō§ĐŌM΃<7đH˜ėÚ˙{¨¨•žŖ-ÆCĻ`ķ-jx[Ä/á}l\ąw˛lš5n žQXđŽÄōŊĩ rãĄî)ÆV`}Ę\@’ÄęĘĀ2°î /'úW•|8מÉptYøķŧ É$ãĨzĖ`užâ(\Ãū—løä>+Ic˙õÕ{Áƒ œH?Zē\ļD-Ų^ôÂŧÔäqQˇQPQÉH†F"šíeO˜ŠO8î+Š+ŒžãĨsWÄË&æįÕĮšË_kÄD‡:ãë[vqb2Ŧ8ëųÕÔ ũt6Hģz/"›g*FDÖl8AÔæĢObįīQë] ÎĐü ÅdƝrN>TõŦ'^4­Ģž‰É}ĖCk ÍÍZˇW2Ŗ° i­( ÉîjÂØHFÜqõĄBŊUī˕y˜{Ģd*Ā,ųõž#Ž9ÔĮlŌďō8?ÎĻōÂԜ/OsZC N.öģķԗ6ĘķŽô8ëŒfĢí Ã5˛$‹Č$ņĪZæ•FEtY!Zå5„;åģž•r‰ÎÕÅfĪm4R Ķ2¯ĨWķæ‰6‚ĀgæĪz­Jtõ–˙ˆãkBËæÛŊ€ëQ<÷?爞B™GņõĒ u/Eî0~_zÔ˛•dM¸PØč:bšy+bįîĮˇSKÆ:-ġˇzŸZ˛sƒØÔ #ã¸ãëQĸåķØšė…8Ķ\°V!ļ÷*Ol¯ÁIį“īPÅb‘ōļEjMuЃi˙&›„^č ķ(s¸į‚­ČŦ}RÆ8ā-e`3ĶŠčĘ|čNãĪáYw°ī2!ū.ßZ™R‹ ´pûœLAį=qīMŊ FļrÂŦ4FŪõ8äĘĒĖ|ŨĮ°į5˛‹ŠĶRä}2:ÕNeÂî=Ēä´ˆÅáģR5™pI‘@ę{Đš—ÂŒAã.ybqŸlUø3ž)ļҁU/§z˛FÅæųPꭞgИŲå2Õ ŦŽxޟKŌ.u;%†kpW„œ4ÆđÆĄ’ÂØ˙g­fë¨îËT¤õH‡ÂēÖuA3#H2ú3‹ū5ëãbą¸ŦOÃ%… ˇʈŋwjmކ$Čäuėk–U}ŗŧ]ŽÚP䉛<‰(ÁFŨØÖuėvŗÚHˇîĀęx#Zé ´OÕ?ŖkZJC6vœ æŸˇŽöhŠFčætÅ잴‰ā“Ī€ŒųL~aô­!ĒG!Ûĩ‘ûŦœe­š›Hƌ°ē›Į–ŌcבXO.f’"0v*\ĸÜņ,jāv+UĄĶĻˆ]‚á“%Æē8mDũFOōĨ”A)ŠētũŖŧ™|ˆm’¤ =O”O˛<ãĀũjÔ¤jOxe/įƒũ)žnĮOMũÛĩjö&)L˸ gŠ20áķƒHÖi<2ÚË÷v÷éųVŽąnˇ6>x‘ *ÚãUmgˇVĀ5žÚŖe>xY˜úc”€ÛNš–Ųļ0õ^ßĨlĀęéģ =Edęˆm/ĸēčōMūéč ŌūŲKFßƜ÷æîtŗ}?.†Wˆlž×i”’<˛Zô„ž/:†žÚ=Ôéö‹aō)\4‹žžøŽNeķ#B:žŸZįŨŽ<9ŽÛkļ¤G vNŪãčkŋ =9Yķ™žĶæKĖúz3“SJĘŅuK}WMļžˇ;ĸš0ëížß…k(ĪßsæX¤RĒĶ€ãĩ8Š`sА @)í‘ūí)Ļ“@ cÅDĮŠq5 [Œ ϓɤČīIŽri€¤síJĢúPJĸ#ĪąÆ3는ôãÎhÂüDđÜÚ­„wvC7vš yHä}kÉĄŸí`ņ"|ĨOlWŅw{Ld„`ŠųÃ^°“ÃŪ&šˇÃ$FBņ–čP“đŦĒSæZn4ėf^ĻÃ휃P[íķü.p}‰­‹ˆ–æßÍMš<¨Ŧž9ôÎ<šˆ=5kÛ)“0ˇUSëW-á‚]đÜ >I9XwĒVy"6;”ƒÔzV…ĖÄąđ=}k);éq™ŠÆ) ?*ĐÛ&YyĮ$zŠl°Ķ~0zĸ%’'$n :}}꒾Ģp5cy-¤ŠöÖf†âš9ô>õí×ãÖôčå¨lg¨$~ ú׎x~æÖ]JÜ_ĀÆ8eģ}Ew‘Asčģ͊ĨĖC"1÷$_oP}*Ô$úØW=ãi„ŲÔãņĢ=ĢĶT‹SŅÍÂ+,Š@’#÷Ŗ`GŽoĖ×OŲD-ØLaȧše"Ž~PnJņŽk˜œŠ’Eč1ú×MsĖnĄēŽõČ_6&ā1äŅĐåŦPķq2}­tvķ4qŒdsXđ4÷aņû´üksp1āuŖ™ÉX‚æI¤tU´Û†xŖ/LvõĢ*ĀGŒsPIƒÉė8÷¨…4Ļę=ŲMģXĸ~yĢļ×ĶFO*˂#šĒŗK°qÁ¤‚T ũz îŦfŨž†ŧ3‰>q“éÅC3^ĸ™k.=U‡&¤ožg'åĸRã"ß°‘÷AÉĢIu@YĘņŽ抴›!*Ū<T„D>æ?…pWÄ;û:zËō5‚ļŦ[‰ŪōpHātZcGŊĮ ëVde”FKŽķĨC >yģČR•ôFxVŽ|~ĩ4đ āúvǞÚrO#Ļ:UÍ=U$ NIčkļ÷FkCJAÆĐ)ą( T‡2ÉÅiŲYų@\ņÉĨ˛šŦS“˛(2ĨŋUJę3č=ëĨšĶĀDnk6[anø4š‘ĸ¤ú‹ ŠIoŒuÆk>ûH†)#w“j>F}ëFãPŽĘԐW~>UŽn÷T{˛2[ Đvĸ1oPĒác™Ötûs¨Ÿ#vÆäaš˛ūÎ"Ė{/;›Žkvä8`9oÖĸûx&_ŊÖļjĮ+wfdę2-­”{߯@Ā­?øAumáD–ød’ĮƒéWėdkLŦWw9ÛÎ+A/§ßėGŊ&ßBâáÕ>đuž™0–ëeÔ¤áOĩtķiúS„Gĩĩ*…(ŧ5r–ú”éŅų>šëJĶJNã#g9ük7 ęŲ˛­Ŧ‘š}“ĻFl­ÆãÎt^Ę[Y9‡j‚zV+ČōŒ9ŨīQĀZ9ÁēûŌö1ų‚¯ŠÛÆLöÆjÄ2ŦŸwšÃ†ûĪ šĮ÷ĢZÔÁŠŦÜltF§1kŽõw“Ã0'i¯“Š˜ā@įũ“üĢ Ōį˛šŖØĄeϤvņoų°ŖŽÕtí@”ĒqîåQ““ė:Qqƒ|¨ka§'&ĢNģ˙ĨY?Öĸ˜d}*ĀĢFkVČŦwâŦÅ´;§‘Q}I¤ÚJė S÷MsÚĻĨmeĖō*ãøz“øVv­âš+åŠãÍoŧ~‚šˆtųī&2ÎXrYšs\ķGHjK—Djļš¨OäXFČL ÎÂļt˙ 'Ú5'iĨëŗq#ņ=ęū‡§‹K|„TĒ…äũMkt&Ž'Sß̝—O¸j=YJõU,Š¨Â‚ žâŦcĢjdĨ‹ęŋĖUŧü€JījŅ@ž&6Ąaķāū>1ͧjk('=ęJ2uËÔt{›g8.G¸¯ėŧČ­æĶĨžąƒ×iÕÖiQęīa Ü?ŧWeVÉVŽ ƒĮčĘ´â“åē> NŦŖnŦô#2§ŠíJ§=°=ë•ļ×ŧ–ę9aqÁ'æ¯5ģmŠÁpŲƒĐއ˙¯ėiŌÄF§SÍ4§Ô1‘Š”WX¨Éæ)Æ­Gž1I€Į=ęjG9¨M1‡~™Šæ˜95: ФA@đ(Āb†āf”TSFhÄ€“ųs^}ņAūÕŅÔīēļų—ąÛüCŪģ™I/׊iˇYc*ÃrAĐĐÎﺘĐ/ÍĩąŸj†ōIŋIÁúú×Eâm čzä°ø÷–‹ØzV!;ĸq”ę3ÚĸPÖčišzĮ=‘GLË Ãg$zV­“$›[¨÷Dü\Oį\Ū“~-ĩ(îa|’¯û?ũnĩß\é_iCœ:¨h\p=? áĢĨfiŽbkg°ÔL/Ė,~F#†SŪĸÔ4ŋœ•Ię3ØWJļßÛ:SÛ8Qy|ąĶ‘ÔRiÖ̍éG'7Vß+§ņcˇá˙ę­(žmVëreĄÍiAm§û5Đco.2ũJˇ÷ĢÔt˜ZâßȔ˙¤Äß9¤‹ęqø×ÚDÎv„o3`e_¯§Öē¯ Í7“L"įŽæ3íÜWbÕnÜ[Ëoæ^ۍˇ1€.ĸŨōĘŖŋ׸5Ō[ĪÍ´sDw#€Anj‰sdĶǰ|AëîĻ›em-Ĩô‚!ū‡2īūyŋC֟BzšGîšCOūaí@ÎVâ|œz÷ŽgUQįmŋJģ=Ķšãå4ŗ į°ĪŊrũe^ČĘjäēt&0>^:U‰bž;ԑ…Ę÷— éP¤îbÕŠÍ AīŠĪy{´éfÁöŦųĨi$ų}yޚWfRa#$Îx5(Æ:RCoĖÔĪ8âģŒŦMe0  ę_å#,Ã˙×X™"ēVQžq\Öé_7 ~ęō~ĩΈ“Œ}ŨŪÅÁ\ÍIB9š]§æĢ\ßŦ„{Z—Ō˛§ąW|~ĩį:XŠNņw4ē{–íîÔ&661ČúÔĻö ˙qøŦņfņ&FõõÆi§ÎG8;‡NkŒĢf5\’öBå”TŌ%Ę ˛)į!ēÖ<ŗė8o”ûō)Š7ûũ+ĸž>Žî7%Át7D¸eíZ:NĢå_˜íēë\\%Ĩ‡ŅŠō\N„ūųŊŗÍjŗ(=%Æ..éžŗ3Pö<ŠÁ×§û5„ĶŧŊ?\}ˇ‰õ[H Dū‘3LÖ|Gwyd`–€r9RAâˆãhŨjtJw‹ļåoļIrų'ŒķėjÔX#ąŦî o|sZ1^EÜ8ôųkąb¨ŋ´p¸H’Uâ!ߚIį'×ųŌIw ŧlKuūéÍ {l\âLįÕkG‰¤íi åc–,˙xjäptũ*;9áųh§Ō´Â8*qÜSSŒļafCã>Ũ*^H÷ÂPšæœyĮĶj˜š D’}jxáÁĸĮĩIšPdžžĩ.Z Ë~+F—A×5‹%Ė{Î]F=HŠSļŒdĖ™ôÖRŠģ4Wčn›éAČëŪŦļǤÎ2§õŽTëÖÃ;Cģc \V}Öš$¸Xp1Œ“YKB/VZ”J†U–Ö&^›ō¤fTNJS^nšÖ¨č"û[*vXĀƊūäķįČ; ūuÃ,j”­N- Ĩ–§{qĒØÛŸŪŨDŖĶx5•uâ›B 9˙g\šŌfmrŠ01ß­M•ü3ŗŸnrTĮÕO•FĖŽfö,Oâ ë͞Ū5‡?ŨųڛgĨ^\>ë‡`{ųšĢBÚÔŖmˆa{Õ­´qüÛzq\ōœĒ|m°ĩ÷3ĸĶ`‹æ$rIĨ‰$ߏƞÎz^• Ā˙:ÅhųŠFõ›ģ”\ˇŠü+H˛ÖŽ –āųÃæ?Ä*iõ´é 3{žzx|M8BōË:¯:tØ8ã9üjÔ'0!î@éôŦģ›Û› „h¸*{qZ#Ë&• Lč[háGW}*ņĢ Å=ûž#DöĻĩ'oĨ&kBĘō.FkÉ~3iît{MNûÛ)ÃŨ?ũ|WŦŨ‰Œ¸(#;—#nyũ+›ņ~˜ē§‡oėĘ+"` ˙{~ĩ•eîķvÔ¸;KCĮxîá†â!ˊķ˙ §~Į•ę¤ĀÕO ĘōØ5ąûöōį¨SČūĩŗqn’ėFÚ đIéÖŧšŽWËØûœšãĪŌKņę7O”‡FŒ{×Sáí-íÜVŒO)1,{ÕÁR'šĨĒĻxžFjÜ í–1]ēÉlđÜ Äm‰ĮJUaǚØëÁWiK=úyœŊēÜhōž›¨$ąÆ˙4 Ë×?Đ֍•Â’bcÁŽĶ]đĘx’ÔwtĢæÁžƒÉJäEĢ% •Ąhî c鎄t?CŌ˛”ī~ũĪæeŦŊ§°–§§o‘ÛxZGŠ;kˆBîüšŽė|„đOĶĨw–q?X–ŪfUôYų‡â9üëĪü,fŽ^VEÃŒ<ũkĶ…ˇ™j‘ˇúØH(ũOâ8¯K +ÁuECßrY­â¸MŗFŽž…sX7>–Ūc>šûsÖčGųõތôôŦųŽÚOŨE¸ribŊ•¯=úwUO`ŨAúÖJ•ĨĪÔwč]¸ĶY"šˇNsš[¯^ŖčCöėĩī—pŗē!e^†6ĪĘŪØ5/†îädŌ/ŨEŨąÚ ņšLz×DöŅIŖ ŖƒŊOC[ˆļ1¨§¨ĀÅWˇO.…˜íķR‡ųą@‰)Ô|´§‘HŨ?퉰H# Š k„ųŧ•ĀĢVjÄ)ōc­xܜĪ{ŗ<ŨČļÅÉ8Į5×īŒųkƒÚ´Ú5Éiõ›{gäųqéŌĢŲVû2š“hĮ¸ŸĖ~FŌ§‰D‡*x¤–'22ρ´āŽ•kR–HĪ‘=Q4KƒŠ‘ÆOĶĩTYš2ĄĮŠdRXr:­zqšĐÍÁĩˇŲķĘ9€{U§>ZÕ›¯ãV¤‹#Ž•‘ƒ°Ÿáéõ­ZN\Ėi2O= RSžp*ė˜|ƒPCGŪ{ņųÕ¤K-&<°~ T•`ā…ÔqK4āpŌŗä˜ųŸSÍSĨ ĢI\Žfļ*Ūü=ę¤Qųjҟ÷‡jžŨ€ĩsK-¤õƒå~E*¯Š=ŧΌlt= O!†D郞ëU#”`ĩ1Û ũEgõ|U>ĒkĖŽxŋ!ω}jĢ[$ŽGÍíRÉ‚JôėÊ!ķS$öį‘Íg)Ō‹ĩjVųWđ°†ÄAéVM’ËļG^*1v 3Ԋš;ˆä82(=ŋ Ö4đsÕX–æŒŲūKˆĶæ Į¯ÖŦ-ššĘîÅE¨f‰‡8ĨCųGĖĖ•ŗžÁhįüڝäj@ :‘õ­¯5>ę ûŌ;E'ƒI?ŧ9Œ˜í¯œeļ˙ßf¤6ČNBãÛŌĩ6ãõŠTZÍā)ŊÛ›9õŌįߒįŪĻ]"|äėëZ˙ŦÜOĢ/'Əėę>cįf:é#xĖß\/jY´Ø#„“šˆ=Í^i9íŪĢ\ČLg=:ŠÚž„Zj$ēŽÅûxĄŽļ5R?ˆ/29åģÚĩįÚGUČéUĸ#iĶÂԊkrŦsW1ys˛1äˇkcö„Č‘A?ÂV´n"ŠI72)8ÆvĶŌÁ|ŋ‘öžÂ¸å€p•Ö̰ *ŨEi"ÖDzqÚĢøqŒšPĘāŠ ūu{)Ģmq‚2:ÕöIPģd?JõpÖTš×Ļä?â#cøsL$g>´ķĶÚĸÉįڎƀ܃úÖ]čĘëZIˆø=xĒŠ~=i4šŗ>ykc¤|EÔ´ũŽ#¸vØ:r~aüÍl˜7Ü$/×;Xû֏Å=(Ųk^ĩū1ŸĄČũ3UŽÁŠxærH$Žy5äUŨ?—ŨĄõ™5kŌtīˇęsYOi{–Ą­eķCßü užk}@\ØOĖn…pz`čj-nĖYø‚Âúhso}Ų¤-Ķq/?•eieôsėķrˆÜ9 ĩucut*o™¸>ˇG°øņî<8l.úE‹Y=Āû§ņ‡Ē­5Ōg˙U&Į8>žŪĩ>—4š_ŠQËŖjm'?ōŲņw]ĶÍĖm:n/÷‡8ÁTŸ2izžm¨×p–ĪCņ߇Ėö {įšŪ)Ûķm‘î:Õ_ įSĶžĶŦ‰‡Œņ§¯é^‡Ĩ@/t¸VqšĐāzˆŽF]&o øž+…Eû;ČW÷k€CøgōާãäÆĢ¸TßXū‡I¤FįN†[6Å•ŖQđôfYo­~U¸ŒĨÚv•1Ôī Ū´ˆĮ7(]$8b{g?ί,>_Ëü åkĒÆRR뱎'yķĮÔōŦnGŊ†zÂ’+#ä9Ų‘Ī÷OøôĢ&$ŠS÷SXu§Ļj;OCΒ&č匯xãšjøzīûGBˇvûÛ66?ŧŧS¯l â:ĄõÖĒørŪM=îl%9ÚÛЖę:…t8į=č’šąšs ô!FĨfvž‰ũ]+Ą…„Ŗ¨ęÁę3OžÜ™’â.$Q†˜UbZÎį?ōí)āū­Ŋũ\™Ôķ×ĩIHWŊˆŒyÎiyĪô G0ö¤ `>´ŅÂ`v­I—īéÜV1“ŽĶåwFS’Ī˙\Õ9”Č}?­Z“‡äUlŸ0ÂŽÖŨ9ät¨ĸČNNÖĮŊ\?sŽŖúĶ’>3Ūĩ8Î6h”ėfĩžĀT˙tŠj÷!Æ;VÁÆņŦۘ Ɉņ“ōי[ :nđÔÕ4÷4ĸÔ!0€åUąÎzUckŽ_ī1ękxŗÆ0}*ŒŦŅ>Iʎ™õ­°øËûĩI”mąŠ>­*îČČ>ب´į zV<í‘$¤.æÁo ´š,ũIé^ŧ%¯sJīsnYN}sŌĄbZĄ%äg?2Œ`úTkĒ$’ ŖųŒVąw%Ŗ\¨¯QÆi%_Ũäōnô‘:ʈéČ<Ņ3`sߚÚ(’ŽÂHÔņW`œ Нæ*`÷Ī5ˇĸÛŊäáG8J§ÜqWvlsn›G#ķÍT9Ī<ķ]üzeēF§ĖŪŦ;ßuhqÔęMr9ÅŗŠĐ’Z¤Ņ!ķ0˜éƒUdļ@AČ#§B+Ģ>š6ų`›ŗĮ=Ē€Ņ%m׊抅ŖSĨŊŖ5ĐæįWŽHŽņƒëZv—‰ˇ8ĪA'w]ˇˇ´›OîÚÛŸĐŠFŌ–}ŦÁėzW$đ•č%*nëîä7Ë{2ęܨŒ+Ŗ#9äSĨ]érĨgĩ•Ũˇ ¸¨įæÁz57ūô}?*ēxį*ië§õøáØŌ…FEKœ8Š[\“Ũ\z¯_Ę­Fë$„¯_OJī…XĪbylIūĩ ’OŌ”€)Ų§ĶéZܛ 1û‡Lsõ¨Ļ' vÅXˇcÚĄuĮS@ōqžEA:#ĐŸįšŗ´ū4愘Ī˟Záaņ/øTŪN;vŠb„"g8ĪJpŽŖŠ—%vR‹dXQ 8æĢCbדīqû•<ûšØ†Ō9pĪ"…ęGĩ^e‰#›vŽ˜¨uã´^ĻĐĸÛŧļ&´Ā„ĀŠžŸv˛-åÆC;ŅKˆÂ}ū}Ģ N+vu“:Š…?ZĖž ŽLE”úvĢRŨ.Ī”f¨ĩÆúÆrĨ-Ā…e˜rãrį­_Šę,ĶĶ58ĮNŊŠ.-ãĀ#ƒíYÚĸ֛ŋ¨ËęĘG"ąôL%Ũô@đ$ÎĶÚ¤Xe1ŋū=ŠÎ°šæßYžF mOÔd§ŒäŊč1¨dāTkrÄsZ%™q’zqĢ lÍ[’iV M=W${ÔÁqZÂ|MŌĄáI™™-ÜL=@Đ×%4kyáKK”EŪaą×+˙ę¯až´Kģ)`”nIŠž¯6ĐôKˆŧ?u§¯-Ė‘m'+´āū|וŠ÷d×Ŗ˙3ÔËk(UWz= “Äū%đŲۙž6˛ŒŠū•Ēéæ[-`FĸEÚ&Œ0ę?:ØđԎ“\éīŅ\í_ö—üEtļÚdw–÷V„1ˇ›.¤vn˙ŸZÕ+Ķ;+ÔäĢîčB!ûO†ãēļe3DVxtuŌˇQÍžc;w <Žq‘Uô=-ôû!Üĸ–Ž āÕ¨"1>Ō~īč+ åŠäpâ*s{ŨJz/evlĻ\|Ž:c¯ëZ:†•2ĻE]ČvōæŦ|ŽB˙3ųUČō@Ũ×ãĨz°‡.‡-jŪÖ\öŗ0´ ˇŊŅáœs$gcķ×Ņ`8 ;ŠŠ§éļú|s%¸`˛Čd#°'ĶÚ­Ä1•ÎqüŠÚÆr—2ÔUæždAÔāҊ0(’dĖA:ųĻļ ũ*AíHã9Įz„ĨmX×ö›ĶzQKĻÜå Lyūšœã?eĪnmî'ÜoĐם‰‹ĨQb!ķØÕ<š ‚0z 2 „¨={ÔÄWĨ )ÅIuƒglöĢIQJĐû×1ĒéĪĻ]mÆ#ʡˇøŠívųZĄ?Âãõ§ßØEna˜dÜãžž|HŽ[ŖEayhLS4I÷™z0õ#Ą­Ôo,˙ãęÛˌu–xúW.î<9Š2J™)ŅzSũ+¯Ōĩ›MA¤Éŧš2Ãp&Ģ>ekÚHQ}:šk6WQĀŲÜ `Č„‡ë×kŋ Œ§WM™”鸊‘ų˛ n+ŊđÕēĮÍ î^Žrz\ #ƒé^ƒ§Ā°Z(O$ŽõŅZ~ípĐ÷Ž\‘úTƒœŌHĀc'éU䚎2A<ú ám-YŪK3bVDÜɏĮ>õfkÄ~lT‘Č9æ…VÄõ8ŋÜoĪeÕx7xØÚŊn{3\Ftü+6áDrV”ô5KRŋlūĶė!kÎLŠlwŨÍ/n#_ïëZ‹ÍgiņŸŗŽīŧß1úšŅ<jčfkbU4¤ķžŨę7iÁÁÉ4†Xõ¤&™æ L‚:Đ€Ž(8æĄŪ=iÁ¸æ€Aë×ųĐč$B§Ĩ”ÁëFī›ŪŗåŨ=€Ē­¤ü†ĢšĪ#‘ØÔM‚¸<Žâ’51¤å{•7F\Ģá€1.2FÃąÅKšI9LqŌ›ž?A] YˆĀņFš—–â\a“Ũđk†[ymäad?à čq^Ŗt‚[Y"oâZåāąŽūŪkG2üČ}¸1[Šxî˧EĐõ­FW09‚Gåķ2Ĩą]Z„čžĘQž­p ̈́ų]Ûã„Væ8ÅgjdGZÖ2wvė‰\—pč=T8éÎ)öäŧŲ=sÍ[0ŖšČ÷ŽĢ…9Jƒúbŗos‘ķsžĻēcO,ŠJĢ,*c…'=ęVį8krŌŲãÎ~ •ö-ŧCŒ"ņŪ­t$W¸Ą¤ô ŠĖ ĄŋZŽĘOˇŊ]–0ÚxīG“ō}FkŽŽ÷ĄŖ4Fˇ$ĶîŧĸWWm¨K°bMĀôÅqbybÉ 8SŒúW ëÖĸų*ęámâvR]ŧ¸gÕ~ĩĪGŠ0qŋp÷ĸ—Ŧ@#‘RįęÍTģ—ļ~Ŋ*d‹ŠĸˇéŋæFúŠŌ‚î'°Āj¸(w-;œ/Œ•­äķfÜĒã }q[Ū&ãÃöĻnCŒ¨=—¯~ĻĒ´ÎĒ 8Á(šŠ'ˇHĪŖ^ ÅČáēsV&šWOâÍs{h÷7Q]„‡§åPŨéé(܇cwŠ `y,ŒqõīVĨÕŠjĖÁŸMœ÷SŽ•œcš90Qŗ]<Œ rúÅÛOŸ ˛äåˆã­)ÖäWhĘTbĩEØ"2ā„Č?•2o Å9Ūä“ÁdV•ĸˆã >čÆ*vbŲžęōqQVĢ}iM¤j:wĪc>õë´qúRËâ>Ë,ÖĖ„‚ /øģgs.Ŗ9”.ŲŧƯę6Đ]Ú8š5c´ā•įĨqÆ‹ŪŒŦģ=‡Ōčn—qex0'V?ŨÎ ^šĘ™DŽdø|ėo' nÚÜ~ĩKûNúÂCŸ/Ëü%ƒ ÁMP÷jĶųšÛkF6m…&HbšØ|X†M“@ŏuĀ̧ÄPȅņøWlqTZ҇2/ģd8¨á›cc5—&Ŋ ˙–/Ώ¨ÆĢ œųn3ÎxĒXŠo¨s#ŠK€jĖsޤāWsânJBŒdsĐUhuyäqæ~ņ؍Ąžčü*'Š‚vZ‰ÍôŗĢĄ*r=Ģ[Ô ĩŽSũkĢžŪõ“7ˆ.@0‰7Iģ€ĀJ¨°ŦŗŸ´ČĪpŌ Øgžj'ˆēåŽâržÆ×‡ŦÂr˙4œ1įëRęwgŋ;y‘âڞš5rŲĸa@Uf‰]ŽväŦXP{č§ |ąŪÂkDI§Ú-…ģŧßëXe Šá-$‚Y¸ĮŨNÃ˙¯U5;˙ŗ•78ûĒzfŠ-žŖxC=Ī’§Ļ?Ĩ`Ļĸų"¯böŅBÉVÔņüĢ O´û7t˛įû͚ØC‘]Qm­KBĘüVuę>âŽN}Ģ>AÍMHsÁĮ¸Ķŗ1éúŌĮ×ņū´QK ßĮŌ}MeęŸņđ”Q\“øŒeÔšÛøūƒųUąÔŅEZ$˜vŦũGũAĸЏüHr؜Ĩ§úÃõĢË÷ÍWqÄ=ŋÕÕfû‹õ4QL mģÔ­üAE÷áR¸?ÜĸŠb"ūõWū1EãæŸdčĸXnŋ…jÁūĨ(ĸ¸pũMØîõĄoū¨QE\ʉ…ãųÛ×C˙ šg…ä?ß4Q]˙ķ ŊH˙—§Goũ*Û}Ę(ŽcbK_šųÔŌũÁøŅEzŲ Ģ\įüIø*(ŦąGÕ>‡MŨĻŪĮ¤ßCEŦū Ĩáīøķ“ūēä+fįū=OĐ˙*(Ŧđ˙A|"Aū¯ū\nĢ˙ō}MWc˛ļ1×ū>×ëZcũGãEÃ2/î}*hģ}(ĸĩ‰HŖy˙˛~ČTöŋņņÔQEZø‘›ÜW˙Ö˙Ž‚´?æ,?ë¨˙Đhĸĩ_¨ŅŌA÷‡Öš˙ōũÃEęSÜŌ[#7[˙¤ü+RÛũ\J(Ž:?ŐÖėģZŋŨ4Q]†ˆŠâ¨É÷¨ĸ•%ęՑá_õs×FūtQ\ũ¯ę>įJ)ƒū>ũÕūtQ]q3eūÕ}ķøŅEIdMHŊhĸ‚GGĐT‰÷MPŸšCũīΊ(u¨äíEwņ~(ëEĶĶđ¤īE'Ū¨å˙VŋUĸŠ™ėš?šū}j˙Õ5Qö@ĢúšÜ˙K?õũTĮâ^Ÿ¨‘v.ô˙ãQZ píOíøŅE6/ņĶ×øhĸ ŋwķ¨å˙VÔQ@ŲX}ßÄÔŖîQEJ_âQ@Đî˙į֚ŨO֊(˙Ųleptonica-1.86.0/prog/flipdetect_reg.c000066400000000000000000000112651506303110300176540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * flipdetect_reg.c * * flipdetect_reg * * - Tests the high-level text orientation interface * - Tests 90 degree orientation of text and whether the text is * mirror reversed. * - Shows the typical 'confidence' outputs from functions in flipdetect.c. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 orient, rotation; l_float32 upconf, leftconf, conf; PIX *pix, *pixs, *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix = pixRead("feyn.tif"); pixs = pixScale(pix, 0.5, 0.5); pixDestroy(&pix); /* Test high-level interface */ lept_stderr("\nTest high-level detection/rotation\n"); pix1 = pixRotateOrth(pixs, 3); pix2 = pixOrientCorrect(pix1, 0.0, 0.0, &upconf, &leftconf, &rotation, 0); if (rp->display) lept_stderr("upconf = %7.3f, leftconf = %7.3f, rotation = %d\n", upconf, leftconf, rotation); regTestCompareValues(rp, upconf, 2.543, 0.1); /* 0 */ regTestCompareValues(rp, leftconf, 15.431, 0.1); /* 1 */ regTestCompareValues(rp, rotation, 90, 0.0); /* 2 */ regTestComparePix(rp, pixs, pix2); /* 3 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Test orientation detection */ pixa = pixaCreate(4); pix1 = pixCopy(NULL, pixs); lept_stderr("\nTest orient detection for 4 orientations\n"); pixOrientDetect(pix1, &upconf, &leftconf, 0, 0); makeOrientDecision(upconf, leftconf, 0, 0, &orient, 1); regTestCompareValues(rp, upconf, 15.431, 0.1); /* 4 */ regTestCompareValues(rp, orient, 1, 0.0); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate90(pix1, 1); pix1 = pix2; pixOrientDetect(pix1, &upconf, &leftconf, 0, 0); makeOrientDecision(upconf, leftconf, 0, 0, &orient, 1); regTestCompareValues(rp, leftconf, -15.702, 0.1); /* 6 */ regTestCompareValues(rp, orient, 4, 0.0); /* 7 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate90(pix1, 1); pix1 = pix2; pixOrientDetect(pix1, &upconf, &leftconf, 0, 0); makeOrientDecision(upconf, leftconf, 0, 0, &orient, 1); regTestCompareValues(rp, upconf, -15.702, 0.1); /* 8 */ regTestCompareValues(rp, orient, 3, 0.0); /* 9 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate90(pix1, 1); pix1 = pix2; pixOrientDetect(pix1, &upconf, &leftconf, 0, 0); makeOrientDecision(upconf, leftconf, 0, 0, &orient, 1); regTestCompareValues(rp, leftconf, 15.431, 0.1); /* 10 */ regTestCompareValues(rp, orient, 2, 0.0); /* 11 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixaDisplayTiledInColumns(pixa, 2, 0.25, 20, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix2, 100, 100, NULL, rp->display); pixDestroy(&pix2); pixaDestroy(&pixa); lept_stderr("\nTest mirror reverse detection\n"); pixMirrorDetect(pixs, &conf, 0, rp->display); lept_stderr("conf = %5.3f; not mirror reversed\n", conf); regTestCompareValues(rp, conf, 4.128, 0.1); /* 13 */ pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/flipselgen.c.notused000066400000000000000000000106511506303110300205020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * flipselgen.c.notused * * NOTE * ================================================================ * This code has been retired from the library, along with the code * in flipdetectdwa.c that it generates. It is no longer compiled. * ================================================================ * * Results are two files: * fmorphgen.3.c * fmorphgenlow.3.c * using INDEX = 3. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define INDEX 3 #define DFLAG 1 /* Sels for pixPageFlipDetectDWA() */ static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { SEL *sel1, *sel2, *sel3, *sel4; SELA *sela; PIX *pix, *pixd; PIXA *pixa; static char mainName[] = "flipselgen"; if (argc != 1) return ERROR_INT(" Syntax: flipselgen", mainName, 1); setLeptDebugOK(1); sela = selaCreate(0); sel1 = selCreateFromString(textsel1, 5, 6, "flipsel1"); sel2 = selCreateFromString(textsel2, 5, 6, "flipsel2"); sel3 = selCreateFromString(textsel3, 5, 6, "flipsel3"); sel4 = selCreateFromString(textsel4, 5, 6, "flipsel4"); selaAddSel(sela, sel1, NULL, 0); selaAddSel(sela, sel2, NULL, 0); selaAddSel(sela, sel3, NULL, 0); selaAddSel(sela, sel4, NULL, 0); pixa = pixaCreate(4); pix = selDisplayInPix(sel1, 23, 2); pixDisplayWithTitle(pix, 100, 100, "sel1", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel2, 23, 2); pixDisplayWithTitle(pix, 275, 100, "sel2", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel3, 23, 2); pixDisplayWithTitle(pix, 450, 100, "sel3", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel4, 23, 2); pixDisplayWithTitle(pix, 625, 100, "sel4", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pixd = pixaDisplayTiled(pixa, 800, 0, 15); pixDisplayWithTitle(pixd, 100, 300, "allsels", DFLAG); pixDestroy(&pixd); pixaDestroy(&pixa); if (fhmtautogen(sela, INDEX, NULL)) return ERROR_INT(" Generation failed", mainName, 1); selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/flipsels.txt000066400000000000000000000006111506303110300171030ustar00rootroot00000000000000# flipsels.txt # # Example file for reading Sels from file in # a simple format. These Sels are also defined # in flipdetect.c and compiled into strings there. # textsel1 "x oo " "x oOo " "x o " "x " "xxxxxx" textsel2 " oo x" " oOo x" " o x" " x" "xxxxxx" textsel3 "xxxxxx" "x " "x o " "x oOo " "x oo " textsel4 "xxxxxx" " x" " o x" " oOo x" " oo x" leptonica-1.86.0/prog/fmorphauto_reg.c000066400000000000000000000127741506303110300177230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fmorphauto_reg.c * * Basic regression test for erosion & dilation: rasterops & dwa. * * Tests erosion and dilation from 58 structuring elements * by comparing the full image rasterop results with the * automatically generated dwa results. * * Results must be identical for all operations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* defined in morph.c */ LEPT_DLL extern l_int32 MORPH_BC; int main(int argc, char **argv) { l_int32 i, nsels, same, xorcount; char *filein, *selname; PIX *pixs, *pixs1, *pixt1, *pixt2, *pixt3, *pixt4; SEL *sel; SELA *sela; if (argc != 2) return ERROR_INT(" Syntax: fmorphauto_reg filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); sela = selaAddBasic(NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); /* --------- dilation ----------*/ pixt1 = pixDilate(NULL, pixs, sel); pixs1 = pixAddBorder(pixs, 32, 0); pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_DILATE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { lept_stderr("dilations are identical for sel %d (%s)\n", i, selname); } else { lept_stderr("dilations differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); lept_stderr("Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); /* --------- erosion with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); if (MORPH_BC == ASYMMETRIC_MORPH_BC) pixs1 = pixAddBorder(pixs, 32, 0); /* OFF border pixels */ else pixs1 = pixAddBorder(pixs, 32, 1); /* ON border pixels */ pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_ERODE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { lept_stderr("erosions are identical for sel %d (%s)\n", i, selname); } else { lept_stderr("erosions differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); lept_stderr("Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); /* --------- erosion with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); lept_stderr("MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); if (MORPH_BC == ASYMMETRIC_MORPH_BC) pixs1 = pixAddBorder(pixs, 32, 0); /* OFF border pixels */ else pixs1 = pixAddBorder(pixs, 32, 1); /* ON border pixels */ pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_ERODE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { lept_stderr("erosions are identical for sel %d (%s)\n", i, selname); } else { lept_stderr("erosions differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); lept_stderr("Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); } return 0; } leptonica-1.86.0/prog/fmorphautogen.c000066400000000000000000000050731506303110300175520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fmorphautogen.c * * This program is used to generate the two files. * If filename is not given, the files are: * fmorphgen..c * fmorphgenlow..c * where is the input index. Otherwise they are: * ..c * low..c * These two files, when compiled, implement dwa operations for * all sels generated by selaAddBasic(). * * The library files fmorphgen.1.c and fmorphgenlow.1.c * were made using index = 1. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index; SELA *sela; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fmorphautogen index ", __func__, 1); index = atoi(argv[1]); filename = NULL; if (argc == 3) filename = argv[2]; setLeptDebugOK(1); sela = selaAddBasic(NULL); if (fmorphautogen(sela, index, filename)) return 1; selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/fonts/000077500000000000000000000000001506303110300156545ustar00rootroot00000000000000leptonica-1.86.0/prog/fonts/chars-10.pa000066400000000000000000000417671506303110300175330ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR '{äø pHYsb&2IDAT™cø€î•ŲDcžÄhIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR'īpŋu pHYs¸Œ¸ŒĖöģ/&IDAT™cøÁđƒáC4Āa <†7~€aT}”‡` ņ<}ģIENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR 'ņšÆ pHYs¸Œ¸ŒĖöģ/ IDAT™cø˙€až?ˆĸųp´„€ ¨i˛;™‹PfīIENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR'ČŪ> pHYs¸Œ¸ŒĖöģ/@IDAT™mÍĄ !EÁ'¯¤S\[ˆôJķÅHV ˆŅCīÂ}/-ė"íØ&3Ō<Žj9/ķžI[¯Ė€Ŗ/IENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅĀNÚ pHYs¸Œ¸ŒĖöģ/aIDAT™EÍą € „á3–Œ#hGAp•7ŠĨ+ŲšÆK\ĀHžG_uųs°]Ņ”YņAņFÁ“g\ä*îÍB3NqOĘBP`+`‰ōā›Hā#ûmũōãģŗîĨ9éh5KlIENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR'ßüŽT pHYs¸Œ¸ŒĖöģ/gIDAT™…Îą € Đ?#Č&ē™”–ŒĀ6R˛‚Ņ‚VCeB8"´6¯ēģœČ¤,ģ~˛8EŒ‰ʅŽīX˛Ú™‰%nŌXOČŊ ây.Ap ßą•™+ldFR¯ũņëȁ)økä%IENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR'Û ~i pHYs¸Œ¸ŒĖöģ/|IDAT™uÎ!Â@EŅ—TT~‹ë6p]‹@`YB›ŠnĢË`ĶÔŧ&“™ū’ƒ9ꊋR ņå.z'_$ȝUĖbqR׈ļt` 6ÎÛ^O›´eū{ä6’1ǟcIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR'D‚ pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙‡„jūÉ0Üŗačŗa`ĢahĒaøĐĀđƒáAˆ ™gÃđΤ¨Ē…|ã…?s<˙‰ßIENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR'ČŪ> pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙A|ž8 ÄĒ'`/S›iĪā§IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR'Ž4Å pHYs¸Œ¸ŒĖöģ/!IDAT™cøĪ@:üÁđ€á!>f8ĖpœĄåėA2Ȩ#hĩA§ÅIENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR 'e”ŋ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙<dč˙1E­×*˛IENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR'īpŋu pHYs¸Œ¸ŒĖöģ/IDAT™cøÁ@:œÁĀÁč2tņ""ŖũĸIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒĖöģ/JIDAT™EÃÁ Ā ĀíÄR´ŗ”` iş…øČ[üģ,ÜBnn€Ÿw‹S~¸kÕ¤šÁô\q{|yōâĄ]Ģۜ8ŗ˙?’/^3ڃNIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅĀNÚ pHYs¸Œ¸ŒĖöģ/JIDAT™cø˙˙ ˙a~Āđãá†Ī?0<˙‘ĀpüC;30ô1?˙#ŗÃõƒ0Čŧ†Ã@ŗ˙|Āđá1Đ>~„ŨX0ÜpKáË7aPIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR'.÷õŲ pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙Ÿ„æ3ü“gø Īp@žMžaŸ<ˆK úÁÎp€j8:ĢÛ2¸D ÕoIENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR''UŖ pHYs¸Œ¸ŒĖöģ/bIDAT™uÍą @PÄņŋJk”ˇ•Ūl`ĢŧDĄ4‰Dũ‰†D<‡ĐšäWŪ1—=5,1Œ&xZķtĢģõģŖ–øņÄõĸŽÉ,Ŗ´RI-šqÚÕö&‹Ld äÉûũã"-ZˇĶúûIENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒĖöģ/`IDAT™uÍ1 €0ˆƒŖOjĻāāčúũˆ›kÅĨ‚R͊ƒƒÃMIR"˛ØĄ&–Šđ$Ļ`á˛h1K*ÔŨd—•¸FíÔ?–7ŌųÕ&f„Ķ~đDßęË<ß?n>fT¯0ĮÕIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR''UŖ pHYs¸Œ¸ŒĖöģ/OIDAT™cø˙˙˙â@üˆq#/bE NüĀđ„r€ø'˙âĪ@üˆŸņy(žÄ 0 170üĘÂíÆŽĶŨ`ķl 8IENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅĀNÚ pHYs¸Œ¸ŒĖöģ/VIDAT™uÍą €@DŅ–ávb+י­` #'j¨pxވ ĸÁK†OÎâ´`č!ú6})ÄčdLĢ1'ȡũͨ“ҤāDŋ‰.ŠļôfuĩžIU´ŽņŌūAm7IENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR&U­Ė pHYs¸Œ¸ŒĖöģ/ˆIDAT™eÎ!Â@„áI*Ī.Â-V4á,ÜĸŠ Š(‚€Ep••ëz…Mĩāžę°}+˜OÎü Ѝd) QĖĢ¨Đ >œ=^¤ÃDž1’ ˇ|ˆxöģ‚ô›…vk ~_‰đaHIpAîpGņx´Ōáēž(Ææë¨Íŋ—#ģ´s˨Aŋžžlļeųčû‡¯IENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR &X¤D pHYs¸Œ¸ŒĖöģ/oIDAT™}ÎĄ €0ĐKHFč(­dV0+@ØLIš˙šA`8ņÔårP*Áđ/Ų}H9Ŋ$‡ą6dĢ‘Lƒąv&á"ņ1@€ É#‡L8¤âpĒTØUoJô*ĢxŽũqmōx¤SũIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙˙30Ø1Ç?l ū7Aņ!$| ˆû€xÛ1|°øĮđAI=HÍ ~€ÃĖhĒįcx´Ģb/ ¤b[k§$+ŅIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR&KŨ‹ pHYs¸Œ¸ŒĖöģ/bIDAT™}Îą €0„á‹”Ž`6É*nĸ`áŽĸ¸ČsƒØĨœī,´ųŽ:øARĀX+:Đ p† ¤ž•ŨØnfLö(8ŖųÅŊÖ1bā‚ÔČUōĐÕ ąĒŌ÷Á:Üt(Œ<‚…IENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR&ûbĪ pHYs¸Œ¸ŒĖöģ/XIDAT™cø˙˙˙0Áø€ũã†˙j€Ä ņGHüã˙Y@D œh€đ ¨ÚĀØ<°É âČĸ +ū0``ūÃĐĀ u^+Ú}ĮĢx‡IENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒĖöģ/7“$O0UĸEƒâ’ĮŠG&ØÉĢ1š ˇÅ3>¯8n‡ˆ:ÕĖŖ3†‡h¤ ōW”*{jaŦUu÷ũáäŗqûŸŽķ§IENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR!&bšĪz pHYs¸Œ¸ŒĖöģ/8IDAT™cø ’˙Cƒü††˙˙ŗƒÉv˛Iv8I‰9HäûŒ0w"ģ/  ™Œe¸‘™)IENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR &Ø9G pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ˆ€ A€áÃĒĄ 3!†Ŗ"^øAČÚ×ŦIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR&ÜĖ—' pHYs¸Œ¸ŒĖöģ/%IDAT™cø˙‡ˆ°0üąĄĒŖ? •˙00˙Ĩ°/Ô!SDÃIENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR&U­Ė pHYs¸Œ¸ŒĖöģ/jIDAT™uÎ-@P…á3#ĐnÕlCŗ- +°%’h flāj_¸ãú^ERžv~”s6Ŋ(XĨąąZ1GsNØ`†Æš;' Žy"^pÂ3”PĀ Ä7AA ´”ô0ÁGĪnĢĨķ IúŽũņ&Ž~:vėĶIENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR&ö|fˆ pHYs¸Œ¸ŒĖöģ/+IDAT™cø˙˙?3đ˙gh˙Īđá?ĩņ ū‰‚00241Ėn,ŌBhNCägIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR'&o„ŋ= pHYs¸Œ¸ŒĖöģ/~IDAT™}Î1 1DáA‹í\Äė5D/PØba/āeDKī`2 !ãü Š•¯øęnj*LĀQÎöŒ;ÄjĮđqjé‹/Ųđ&ŪeĪ“ŧō,/Å'ˇŌCŽ:Ķ™Ņ%smĻMqiæUqn˛ųą•žc\ŨčĄįĮ÷ü¯o ˆŠcŊ^ׂIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR"&‰­ty pHYs¸Œ¸ŒĖöģ/kIDAT™}Îą € „á—XPR8C8C9&,q ąÁ„đä1ZyÅwíOÜh؏ˆ6'fËg b ¯Ą‚F˜`:ąXąąéWVĐÃĶĮŧŠeë,ļé•ģ‰Ų÷NÃ;š§üמ™X-o1QIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR& }ņ pHYs¸Œ¸ŒĖöģ/oIDAT™uÎą ƒ0DŅ‹"á.l€7a4)t™É€”ŦádJ–?6qKķē;}Ix“Ņ%)ļnPC¯Øé 7­ĐčwM•ĨāÔVü9Ļō+,˙íŪåôŠ^ōĐiS¯`ã h|išfœÍ}'ėŧquRēÔIENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒĖöģ/CIDAT™cø˙˙30Č10Øņ1|øß〸?Ā‚ArĮ€¸áÃ?9†ę>Ü˙äØíã‡Ø‹šcJp|(IENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR& }ņ pHYs¸Œ¸ŒĖöģ/vIDAT™mÎą Â0ᤸ#$›d´AAĮL!H´Ŧā0K–_üƒ šOē‘wv™ÔÎ#qŠAŠc•Ž<¤Æ8s­,ÆL[ņqŋŧ…KåÉ]ē}ņRG˜ō@ėĶHrĢŊėĒ/D#|’ÂëRØrŗ^~n¨-˙…QIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR&KŨ‹ pHYs¸Œ¸ŒĖöģ/]IDAT™uÎą €0 Āī(=LBFCˆ‚ĩeg—)ƎDŌ@sÍK˙Ue4€ŲX'†čád'9åƒÜ92b0vĢv¤ąՃËęåĻCŠÃŒd¨ãÚm{ûŠųį‰IENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR&ė@† pHYs¸Œ¸ŒĖöģ/^IDAT™mÍą €0 DŅ((“ X!dĨŒ@ĮZH,â\RD1& h(^y÷1SÚ¨D{MŦv /íĻĮā– l(BōmÄŦēæė“ģHn‘šųW-ŒĸāMņĢ˙ã.ģGé0ŸŅĒIENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR&ö|fˆ pHYs¸Œ¸ŒĖöģ/'IDAT™cø˙˙?À}ķûèø˙á˙ÔÅ@øƒÁžf7 :^åaÅ"ŽIENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR &X¤D pHYs¸Œ¸ŒĖöģ/EIDAT™cø `‚ũÃū?Œ ę˙ŸgøAsĸŸá‡ũ˙ų Bžáü?{†?Ėęū10ÄĀ$°C†‹¨ÁwâŪę;~IENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR&ûbĪ pHYs¸Œ¸ŒĖöģ/mIDAT™uÎŊ €0†á¯,ŗ€E„,&D°p ‡ą°tÅÂ6bs‘ķüIaaķ”//D„q€ÚR†I¤@¸ņą| +ã ė˜Á–^ĸ=ŗiÅėJ~Ņ.ĢŌ J?&æ.1Y%¸ä?pZûãĐ{Ē5üIENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR)&qMŽ pHYs¸Œ¸ŒĖöģ/IDAT•…Ī!A ĐA­…d’šŲšm˸ĩޞÁ šÂ–ÍáĶNI*ū“˙—`'”ãˆLDq€Ļ(BÔã‚Q WĄ;z§Ã­Āw|zpvvélė )¤ÖXÅƒĐŗŽõ‡**Ģ$ô (,ĐK4ŦĖąQ0ÁҘjĄŖĶ0Ķ1_ļN‹á˙ī?oH€œSōÅWIENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR&KŨ‹ pHYs¸Œ¸ŒĖöģ/uIDAT™}ÎŊ Ã0„áëTjiĻ€Û@6HVq~Āk|& |îT_N`ˇižæ…ã@Ō@öŒ™¸Ô–áÕ ­l†žž†=-" ƛ1ņĖUOŧžØ¨ŸÁ5‰{Iė%hšNOÃF3Ŧƒ7=#ЁãÚ~å‡užŒŦ2IENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR&˙—Æō pHYs¸Œ¸ŒĖöģ/cIDAT™ÎĄ €0EŅįí] ē4(Æ`‚@v…:ė'˜š>~9ō悤ā&-FVŦ‰Ĩ‡„2 û,(ūRÜ!¨îTĖ. Ų”)6feuĘâ•^„ŋH­‚NikŸŒ^ pHYs¸Œ¸ŒĖöģ/IDAT™c`€ö~Z"v0b`÷ į\a%'IENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒĖöģ/HIDAT™5Ãą Ā @oÂ(°YF`VĄcŠÔˆ†Hķ–?'­0sãÎ~¸x?ūD¯6pæÆ/vœ8xņNūXU[˙^38˛tšIENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR *IŌL% pHYs¸Œ¸ŒĖöģ/IDAT™c`€ȨĒÉdh`øEļD1Ū¯|FIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒĖöģ/BIDAT™cø˙˙÷1;˙cbå  !øĮŽ`øøˆ˙Y0<á˙ Į¸ũC?Ë˙?Ā7‹úw4o4uœĖŽIENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙Ã`Ā0€C,xvqĨ—ÔIENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ļ' pHYs¸Œ¸ŒĖöģ/%IDAT™cøĪđ—áÃG†Ī 3ghBv~†z†˙äBŲæ%Ė 6ē“IENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR*y^] pHYs¸Œ¸ŒĖöģ/FIDAT™cø˙˙)øû†ĖÚ0ô?â@qnĘ3åėã@ÜÄü0ü‚Ų'<`h6xĀp €á!ņöøĩi§“°IENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒĖöģ/KIDAT™cø˙˙à fâ('ūPÃđဠdžķX>Ôņ˙(>€ˇ@qõÖÛ0<ųÃđ„ņÃ{æ? û‰ĀąPk §.ąIENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR*’iæ pHYs¸Œ¸ŒĖöģ/=IDAT™cø˙Ÿ úĮĀđƒáã†ĮŽ˙ah˙ÃĐ˙ŸąƒQû†æ˙ ˙1<¨`øĀČđ‡ŋÉkĪEĀđûšÂIENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR*pĩũ~ pHYs¸Œ¸ŒĖöģ/RIDAT™cø˙˙Ã˙˙| ˙@ņ<¸™áÏ| Ÿ˙đ1<˙ĮĮp(ŪÄũ@ĖŗCq;Pm3PĪÁŸ| ŠŲ~°30ü‘ŲMÂjSŌk—8>IENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR*–œ6: pHYs¸Œ¸ŒĖöģ/FIDAT™cø˙˙)øķ†0<ūq€áø†v î˙ÃĀĀÅ ĀTÃėPÜÄÍ@|đŸà  Œ@ŗØ‰ļ¯_¨Áú,ũIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR *@9ė_ pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙ƒáÆ >0üüÁđŒĸĸ č‚xЁ  Ãņ!9ëH{¯&ŦôIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒĖöģ/cIDAT™•Ėą …0Fá#lpGŗSČZ>˛H$ l"üxŊļ¯øĘs0˙P'j†RŠ-Ä6õZĩ°6‘.‘‹hŖ¸ŧ;]q?ˇ3‘¨Ęˆmûčm"Ū3ÉGÕ8]Ö8u2IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR*žĻķ pHYs¸Œ¸ŒĖöģ/@IDAT™cø˙˙?ÃG fâF ~ˆ?¨gxx@žáa?ÃC~†õė ūŗåÚIÂū730Č70€ė&ĸ°hāAUƒIENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR *M'œ pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙€ˆ?`8CÁ"pô÷Ãà Œ`ôhtāü€GĮ^­2IENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR *IŌL% pHYs¸Œ¸ŒĖöģ/.IDAT™cøßĀD?>0@ҰĨ(D@[>‚Ņã†öĢÚ.v;°˙›IENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒĖöģ/XIDAT™cø˙˙ÃC f„⇄đ?†‡dū¨axøČ ÄĮx>Ë˙axÄų¸ˆņC ūđĸ¤īÁ˙ ö ˙˙īaŲOÚåk5žøIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR *M'œ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙€ááF0zH=tā Į‹7īGq7@hIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR%*ŗ¯{ pHYs¸Œ¸ŒĖöģ/AIDAT™cø?(!˙}¨g˙Áđáã††2 @rĮ H=ķ‡ ųŋũ5ČuĖ?,$€–Päf0 _°Ųå†^§IENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR*žĻķ pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙˙?ąøīƒz†‡äøeøÔŗ3<øĪÎđđ;IøĀ˙fųĸíb†ījšP‡IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR*›‚F} pHYs¸Œ¸ŒĖöģ/EIDAT™cø˙˙)øķ†>0<ūQĀpüCû? f`āá˙˜˜ŒĀęš˙0⇠>T~`øÃL´ŊBž`Ņė°07IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR*pĩũ~ pHYs¸Œ¸ŒĖöģ/JIDAT™cø˙˙ąøĪ;†äđ14ĖccøPßÄđá˙$ü ?âC@| Šû€zė>ČÕ1|`øĮđĄˆ˙Æ ö˙5mmˇE#ŋIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR*pĩũ~ pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙˙ҏųÃ?>†??ø>ū‘cxūOŽá8ˇq?ķcÁėP RĶ Ôsđ‡ÃGr øä~ØÉ1ü˙GūÁÜUō]3 IENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR*DĖ0ü(`@3í‰I‹ž$ĨIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR*žĻķ pHYs¸Œ¸ŒĖöģ/7IDAT™cø˙˙?ąøß˙ī ūˇ30üaghâ@6ņ¨ūÛ´3ü`lføÃÜĀđhģ˙lQ—Đ ˛IENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR*pĩũ~ pHYs¸Œ¸ŒĖöģ/FIDAT™cø˙˙)˜Á†áā˙>†‡`<áÛ1|¨ˇcøQWÆėū1üąb™ ˙$˜¨—ˆ™¸ 'Ú^wØldítT0IENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR"*ūo´ pHYs¸Œ¸ŒĖöģ/iIDAT™cø(!ė÷p``°—o``8ø_ūƇ˙å?Éü@ōÃ?ūĪ@ō;˜l~€áG ˜Ŧ<|N?’ŒÎ’Ę`RũÃū ˙Ø?ØI~ųŖh#„”˙ƒ Éw9uŠĨޏ\¨IENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR*›‚F} pHYs¸Œ¸ŒĖöģ/ZIDAT™Íą €0Dá'–qK[wr€ƒ8”…k(ļ6 ü$F\ ÅĮkŽœE­ģhSOcžĶÄ…facáDĘök÷ŗMÄS<‡¸$öāYÄ3Ē‹{jkđ”_ãÜIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR*pĩũ~ pHYs¸Œ¸ŒĖöģ/_IDAT™•Íą €0EŅVŽ 8Jˆ›%Š ]FĐUė,]@P7°´˙}Ņ,`qĘ˅Ēā`Ō‡ė:ā|Y\žY‡;2)Š`å”QK=Í´$Iõ/XŠæŗQyá­gv§ˇ-IENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR*y^] pHYs¸Œ¸ŒĖöģ/SIDAT™•Í1€0DŅßQ"s‚œĀL d)D)Sd8ÖBŠ×üb—gčņ4#×MœüĒIrĘė|‹ĶĨ­˛;5<.JIĻn ß< fįÅãIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ļ' pHYs¸Œ¸ŒĖöģ/$IDAT™cøĪđƒá#Ãc<đ8Ãyy†~ OÕG†Ÿ ˙!õâ$ŽUØĸJIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR*ą2ˇŌ pHYs¸Œ¸ŒĖöģ/IDAT™c` Ā[Ađ˜IENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR *IŌL% pHYs¸Œ¸ŒĖöģ/,IDAT™cøßĀĐßĀpŧá1ŅčaÃĮ†? ?Ā â5ÛUßĀđŠ`93¯  IENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒĖöģ/)IDAT™cø˙˙ĨøÃ˙ ä0cî`čo``Á`Os‘0WĮu ļ„~OIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-10.ps000066400000000000000000000006241506303110300175400ustar00rootroot00000000000000%!PS % chars-10.ps /inch {72 mul} def /Palatino-Roman 10 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-10.tif000066400000000000000000000054521506303110300177040ustar00rootroot00000000000000II*l & TĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä2ĄČƒCä ˇ&ųw xAČeAī y:vAC’|†g$CJÁ5LƒHéZr^C*dā†Í49 ūGd û ǍF` Ä$AäL(AĻĒ ÅĪ0Œ0õß &ŌŧôŦ‚é$b`ŠĻ–*ÜŌo˙Ҍŧ˙^•´ũ ļļē AŌoÚúKt›I'T›N’JÂ9č:6ŗĻ¸"JÖ÷úUß˙¯oÕļ Ļë‘Ö’Õ_˙ׯôēŌlĸ˛—÷_K¯I˙k×˙Õ/c!”ëßO]zZ˙˙ãéuKa^Ģ×}j¯˙ Ā×´’§ žĢãÕzB–—õût–•-Ĩūū’ųģ[¯ō nIīëb‡ØWĨũR^iS /õ[ÛI*!‹ņ˙õJ¸ŧŪŦU¯ûØ­I•Ū—ô@¸áW›oNŸ˙Ø1I?vū¨CŽt-Xm¯ûFn^=Rė5éšķi í_đm">IÜ_ŌécÂoFbŊü2ûÂ15oō ĨČkū•˙ēIi/ Ē#’MĨú_¤éo]$Øk˙ooōī_õÄĐ3;ŽãôAJ Į¤—ļ—â—ékúI=c˙ūß˙iiu˙é~C8AÄ7p 6ƒMšĻž›Â餝Tā:hņ†™›%á –C=‘& ØH3bP p`ƒ 0@Á @Áhā7dt ĸÃh6AE†ĐAåÆpX`ˆ0á‚`” t:S`šå̈́l;đm&˛ ˜|:>˙ ˇÛŌom&÷H>ûīúˇMÔ*ôƒh ßč/oũ'˙ŌíoH7ÚAž˙˙´žöŌm-/ô›Ouö˙Ō˙ôŋ—]+Ũ+Ũ/˙ũiŌzŌúzn]}/oŽ—˙ŌåĶ^úoö˙˙÷ŽûíČd1Č:NˇûīŽ5_ú_ËŽŪŋĨū#ÚŪŽ“ĐĨáaęGĮ읤‡ũG˙Kí}ŋß˙Ū^ęŌKÂÃJ‚ úž—ß˙ú^õíũ˙zWũ¯WM¤ę—=Á aւbž¯Ĩüˆų×˙Kí}ôŊ$ŋ˙˙}ÕēKÕ0‚ Jŋž•o˙_ú^õ÷īÖúP˙zĩÖ+KûÂ0Ō¤Ŋ+†/˙˙ũ÷ûé~“(¯ÚõtĶj—Ö"˃ /¯xƒū8ø˙_tŊŋđ—į›:gŪ_î’÷h °ÃKKÖæČ?˙ū/īö˙Ī˙ L?īëÛb’ņaĨú׃Î8?6 ~ũ×˙ų2ū ūëöŋ^A†—]+īũ=?˙7ŋëÛ˙÷!ŠOúĩzMĨônŊ.¯ģ×ūČ;‘˙ˇöžßũƒ˙jõčÂé}?~’˙_ü_ūßŊ{_[oûÖ­ĒWĨė0ŋĒW˙ãŽ@Œ˙Økíúúíŋ˙×TŪ—† ›vÖĨÃũŋ÷ũŋz˙oÛ˙m+īWëà †YpAUļ‹đ’ŋú_ūßÚû}××˙ûé^žx@…بŖE_ˇÖAo˙ÛČ;ī^Ūëļ–Ų úĮQ¤Ū‘ ?†„b)+éz˙˙ûz\~ßuūß]Ķ]~—änADAk‹J¯ÛŌũŋ˙oöŊ´ļŌÛ××§IŊ/Ķ 0‚M†’ž“ ‚ãá/Øūß˙íĨļ—ŨmĨúMúũĐl ļÂ]ā“apKKo˙ÛūŊØil4ļí. iõô—üãA4Є™ „ †a™”  đƒaĄ„Ũv$l0A$lWM$ÃAĄûTLB0A„ ĄÄ ƒAáØP@đ‚áˆA ƒn! ¯ÂVø¨ˆƒDA„" ĘđԈˆ´"á‚`„A„ ÂkÄD~„F„D8ˆˆúZũ ũ"Ā'$\΀h+ę1ŧhšöž#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?ĄĄŋ< Idd ,$<˛ V@Ø FC.<†T&A^`ĒA“ČiA  –Ū@ōÄŌ}]4ũ-ŋčpū˙Ļž˙äÁ¸˙ü¯ŽĶ^ ˙I7_â?˙ūžŋ˙úM˙˙˙ũ¯˙˙úOYx@ŗ?/ˆeŽA¸ū@¸åáĘž ´åņŒ,r Į.2!Į oB1ČžC;˙ûpD3'„d Ī b𠁑{M ƒ!•āŠ„,2S!ŗH.rčŠĻ ‘,ƒœēÅ_úX„ô„aÂ74NŠz` ē M0TÂ0ÃM8*Ŗ ĸpH(`‚  +A0ĨÄ˙ûao—m::6֌]ôĸķF+Ŗ ›t]°“Z ƒ…}÷蚤’˙Ōč7nt+l6Y°Ø!ÁÁô †!6„I°l6‚pbG̃6 āũiö•×_úˇŊ6–Žž•×ú_õĢtÚô×ūŪßM¤ū—˙XūēôßŊ?étĶĶ÷ëãúZ{ސĒ]Qd+úMûĐÖŋ˙ú ˙ŌūēŋīåÕ&éŊ*Ũ_õ_˙˙×˙÷Ũ~f>é7üV´à ÁĨä„ņ÷_ņ˙˙˙ė˙¤ÚM]$Ū’AŠđŽ?˙6 ]/ų´˙˙˙öí×ûo¤Ū’A¯@ŋ˙Ūŋö˙˙˙đßúé7§¤­éPú˙˙°Â_û˙ũ~ ˙{~–Ū—ãézW}áˆ_û˙~ˇā˙ēZú/Ŋ*˙˙˙ųpi˙ˇ˙ũuųŋ÷ôŨ$Ûé˙×§u}/ũŋ˙u÷˙õzc+Ŋk˙ũ+ĩŊö˙ŨiZũzĮZŧRK˙ØEÖé˛(íĸęŲô˙ö˙ũûA6žļw†‹Ģ[I6éûih0‚a…aĨl0’sXí=6i„í;m(i6…A§QLUīĨt_ũŠƒ—B˜ ÅCb‚Ø@á„7  pØh(Ļ!a šjNŦ7˙a ƒL! !lDq‘à bĻĐL,Cšh_ÄhqüDDEˆâ8ˆˆũ„Ÿú˙ n]'ũ˙˙˙¯I´˛ôŌ_Ũ.ŽĢŌ‡@ątŋ ˇŽĸ;i%čVØH$0Ö„‚L&Ö""?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨BBd  " (ĀĀleptonica-1.86.0/prog/fonts/chars-12.pa000066400000000000000000000441721506303110300175260ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR /˙6Ō pHYsb&2IDAT™cø˙aĐ [ZâbŪōIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR/č† pHYs¸Œ¸ŒĖöģ/*IDAT™cøÃđ‡áC°a x„á Ūaø…=@ĩĐC‚>nĨ)ÛāFIENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR/ûÃÆī pHYs¸Œ¸ŒĖöģ/"IDAT™cø˙‡áü†ö ė ‚ú@P ‚€ĘhjUē7”āˆIENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR/>ą\~ pHYs¸Œ¸ŒĖöģ/UIDAT™ÎĄ€0 ĐÛ #t”lÖÄ!;‚uĀUô%D(N|s'f&xĐ׋Í)AŊY‚.Đ@āI”ŠT3á ÕĪ^09Ė„{p$ƒ_Ÿ˙qíĀtzõ‰ŊIENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR/ xlÍ pHYs¸Œ¸ŒĖöģ/hIDAT™UÎ1@0Åņ‡¤6nĀMz6›#iHXD¯Đp[§¯žF„á7ž‚ŧ&@ÃŖĀiģaĄ–z*#yå”QsK†[Į­‡B0)› ķpŅ@u´ĶH3ulUĀĒŲøėķé+ü\ŧ•bKIENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR&/§I…Ë pHYs¸Œ¸ŒĖöģ/ŽIDAT••Ī1 1Đé,s!r1ŅFHŗčra‹”šB$ÅļĘ6YōI@ļõ¯úĖđ &!2U 1eƒĶ˜|_pL‡ÜDķnW•‡PkwSķÚ_ÕĸÆy‹WĢMũ×0 ķItū¨š‰Đ.öÖ}˜ŨĪmįēsiÚ&ØIŊËĩ€|VĮē˙ũårƒÕŨfIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR$/ŖŧUö pHYs¸Œ¸ŒĖöģ/˜IDAT••Ī1 1Đ¯SF;‹esO`Žä ˛ba#ė•beë^`ėR„Œ3AÔÖ_<†ų0` á-E55yõŌÕÔúë>|ôļnĩ§nÔfēļë Ö¨–Äb˛ø<5ņqeG¸%ž įŦÎEWB×{ą:ĩ­Áō2Ē“tN29ËvâdîH#$v DPœ>ßũį ŸŸĨXë%ŌIENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR /ō(f• pHYs¸Œ¸ŒĖöģ/-IDAT™cø€ˆ~00|pŖ 0<ŖĮŽƒQ˙†ųėÁ*i‰ŸÂM§-ú‘IENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR /˙6Ō pHYs¸Œ¸ŒĖöģ/JIDAT™cø˙á˙†˙ ˙ū0ü)`øD>|`xF‡a¨†ØÁˆ7‚(€ĢoF2bæĮ +€hĐŌ˙@4č {ōCU@&IENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR /˙6Ō pHYs¸Œ¸ŒĖöģ/PIDAT™cø˙Ąūƒũ†ųÎ`8ūáņ†>|`øD ôĮŠū ĀũĮ ˛pÅpíĶ~€ ˙ļč1ØÆū ō 7•§>žvD:^IENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR/¤w´ pHYs¸Œ¸ŒĖöģ/>IDAT™cø˙Ÿ„ęūķƒĐ|~†~y6{&{† ?ū00fŖ‚ģŖđIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR.#HUž pHYs¸Œ¸ŒĖöģ/IDAT™cøÃ€ah` ŋ †LY˙Ļ%ɘđBIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDR .9tĩ0 pHYs¸Œ¸ŒĖöģ/ĀpøÃņ ũ`$€Ą¤ąG}GaÕŋIENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR.õíÛ pHYs¸Œ¸ŒĖöģ/VIDAT™cø˙˙9Ä? ņD< @ąĖ@â?8`$€ęū°‰ō@â@=`ée‡`.XŦŦŦ bĀ~˜Ą`ã!­[Nŧs˙@‹sxŽ×IENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙˙šh€ŠŠI&¯Õ•‰÷(™ĘIENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒĖöģ/UIDAT™cø˙˙˙Ō {Á"˜ADC=x $~°ƒ”0‚ˆõ@âƒ<øÃŌÆ"8‰ @âŒËSV ÖÆ3 lhÜ"~¸å¤8@h”ÆĸđyDIENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR. t, pHYs¸Œ¸ŒĖöģ/`IDAT™uÍą € „á3āŒ‚›igéŦrÆEF#_÷ŋ{(…¨â@øž`G,3áü[E ´Â(ēķ˛É.Ģ"["MÚĶæŅH’ī_ĢSÍ+ŲoķãŦIiœ›@ûáIENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR#.Š<* pHYs¸Œ¸ŒĖöģ/ĨIDAT•ĪŊ Â@ ā'!‘.f”ģØ Ģdj‘(Ō‘™ĸiÁ'8:#bœ‘_é÷Ԏąš0É(Í:‘IÚ0RЁ!7Œ¨*Œ š*ŧL^Ũč1Č>šx.€6ˆ¨›ŊK ¸lŗ Åx]ô(ÜdîâĨ2Ų>?[JKĪŖÉoÆPŸz gą” éčį&ÕÚĘvŒ‘t75ú­lëūõ ë˜åõįĸÔIENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR&.lVn pHYs¸Œ¸ŒĖöģ/„IDAT••ĪÁ ƒP„á‘<Ú@Ā"ØJJH‚†`K 9؆^Čå–ˇ™ŨEđęžãåĒËΡûØyw+îÅ,áu¤rsSOs[ú ÅüIC?%ŦéĒ9ë‰N0ŠļúÚ,Ŋ>ŨU ŖŽƒ™dÚ!Ģæ‰ž15l5ØŪōOŦģc !ØĖIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒĖöģ/cIDAT™cø˙˙˙0ÁĀĀ"?0|āoøĀđÃūAø`#~`#ĀJĀHĮA4å?ˆ`qāĻüø‡‹øƒPˇãĐUö@ķ00`8Ā u3‘DĶyˆ‡s\3IENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR .a &) pHYs¸Œ¸ŒĖöģ/iIDAT™…Îą € …ág((QØL4Ž…›0%áų ÆÄF¯øŠK.÷ƒ°ÁƒŒ ƒÍiQ= J™"uÎbc:öķfœmqDō";QfÅUŖ—jŒāŠ LŊ´öæQ˙ËQŪ”=§ū0IENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR$.hā†S pHYs¸Œ¸ŒĖöģ/dIDAT•cø $ԃIų ø°`øa˙Dūo“Āä‡ųÃL €Č?Č$‚üG" Ջa&Ô.„í—“Í`w]ûAū˙† ö00ÂũE" ēî¤Ā?ÛIENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒĖöģ/HIDAT™cø˙˙˙0â˙†ö˙ €ÄlÄLâ'&ÁĀ#øâPb˙‹Q˙€ˆ1…ø#ĀĐw$ÂᄠĮƒA!fMIENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒĖöģ/IDAT•cø ’ņ”ü ˙˙?Ãû˙äŠAō˙˙$†ÃIj™ŒJūg``ūßĀõ˛īˆ&žÉžŦŠLDIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR.ß]~t pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ˆ āƒÃ;Z!€X‡ Ŧ;BĄ“uIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR.æ:Ī/ pHYs¸Œ¸ŒĖöģ/.IDAT™cø˙ŋ„00€ņö†üƒËCą}ßzļē“ˆ™˙7 LH×ÁŗgßIENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR#.Š<* pHYs¸Œ¸ŒĖöģ/ƒIDAT•Īą Â0…á‹\¤Ė@GáŅ’ˆX)k˜ \ēˆ8üūPPââ“%ûîŪ™ˇ“íĐ:_Ư%ú=[M>Čw”{’u–Åå ŸøĀ(oINŗŧĒsŊā í×‘ŸgĒĻÚž>WÜ03Ŋ¤’jīÉČŲáŌļž™ļh×ßíūö(S§LĄŧIENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒĖöģ/3IDAT™cø˙˙˙0ÁĀ#>ȉöA<° ė˙00<`‚ ápÂcÁį„ö*IENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR..š pHYs¸Œ¸ŒĖöģ/‹IDAT••Đą Â0„áDréĖ&^…A"%ˆUœŠ5ŒX ‘,_ü…’kžú?P–Đ€%}ˇ1ŌõˆBBÔäø>ęËŠpdŽĖį…I˜VŖ/øÆ„ša_Bl˜‡6n]Éú^QF ˛•ÃĘ8ėq Vŧø¤īˆ’ŠCJû{wÁŋ,ĀČŪv Zų•IENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR(.rÜfŨ pHYs¸Œ¸ŒĖöģ/rIDAT•Īą C!CQ# JFxŖ0l’U…HĮ—/ØiRÆÅé\\8‡¯¨>:Í=c]_XY&éd“]Ž* ŊįëŊ]ˇŖ%âŽĪģ5āÚŊŠ6˛}ÆŖü§;Úžŋ­?ö~ˌȉUķ,A™ųԄžÍėxŅü8yuĮbŊkĮÍlŊcíN} ;;™9˜-ž;Ņ JYsIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒĖöģ/kIDAT•Ī1€ ĐFŽĀŒ=õfzĀ؁€´˜ĀBb‡75?˙CŠGĐXTŅ]HĀŊČjrŨ<1ų.ˇ„ Ū5™WŖzqSw×=ŦˆúƒįāĨ>š'­˛UMío Đ7e\÷ÛԚŒßNĘIENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR./äå pHYs¸Œ¸ŒĖöģ/oIDAT™}Î1 ƒ@EŅ+SXÎ܈Ĩ)¤pYŠnC™ÂvŦb!ŧÚ Ö}&6"TŅgVbÕ~‡É-{2ÃZ´aÃ:VėÕbH–V@ÎŪgĪlÔKã¯?}*āŠ˙EÆĨIENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒĖöģ/IDAT••ĪĄ 1 PK3‚G ė(ã|:PؕRÔ5"(Í1+Ž*ĩ¸X˛ū7yŒPЄtõ*T ö[lØŗegĄ‘FčÉJ¸ØîŠÛG‡õ„í˜^aŋ@ÍS†ö1˙Ô4]āšÃcƒ¯ Ÿ Ū˛r‡Ü#}&VŒŅŲĸĄúHB}ēš“Đ‚ˇčûŨ?ž›Å§ģ§„IENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒĖöģ/oIDAT•­Īą „0DŅ‘R‚Kq1”px%  %Áĩ˜ĖÅ°ģ$¤HLđÂ/ ¨(U0“@fHâ&(‰ģ FŽ‚ųœ='5˜ Œjw&ut—–]knÕ=Ėōsŗŗ=Ôč‡Î¸Íū‹¯Ŋ ĒøZ‚ËŋIENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR.øķ˙œ pHYs¸Œ¸ŒĖöģ/qIDAT™…Î1ƒ0ƒá'`ƒ47)7+ĘÍ"NŠCG2fˆâūQÆzø6Ë6IÕĸiŊĨÎ>Ē” ōŌĶö†_Z×˙衎PfČî"-Wēđęe>ɖ¤â á@Jæ™ŗ;÷ņ˙|€^Ž‡œLIENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR .ÖļŪ pHYs¸Œ¸ŒĖöģ/IDAT™c`P`ö訝6Ķ"°Ŧé3āšéIENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR/Īēķ pHYs¸Œ¸ŒĖöģ/YIDAT™MÃA € ĐšAŧHĐÅ7-¯xņšs18}á =xâLeÁ‰#ĖXņÅÆęyWéŖSą9pâˆ3Vnķ!Ļã&ÖĮUĖæ‹O|đFũ˙~zĐ‚pIENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR 2ĸĸî pHYs¸Œ¸ŒĖöģ/IDAT™c`€ АmĒ-?`ø˙Žį3q›­NīIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR2ųM; pHYs¸Œ¸ŒĖöģ/YIDAT™ÅÍą € Đۀ֎ELÜLΊ’Ą(˜Ã°%…ņôcbÜĀæĩ’ˆ‡jdc{1âĖ q VOôpĶäŒDėŠF!˛2QT‰¨Hj„3ŧ:đ)äl‚œÃQŒuIIENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR2ųM; pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙Ãp!€°b`ø4˜áķ†ė`‡“MڂĸQm:ÍIENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR2pōļ pHYs¸Œ¸ŒĖöģ/UIDAT™cø˙˙ɸáÃ?††?6 ūÉ0<üĮÃpø? ˇƒq;3ūc€ ˙3q3âõOČ÷0|`āaøÁ`4›d7í#uŲ,>äIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR2}ėfņ pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙Ÿá˙†˙ū70üˇaøWĪđ§žáĮú€024€ĻAÄĀĪĀĀβŽ0‹W•ÆË tIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR2ųM; pHYs¸Œ¸ŒĖöģ/vIDAT™ĨÍą ƒ@DŅ.¤JĄ-g^ÉmŅÖ5pdļtēõ!„$/ŲÕÜŨ¸ET‚oö䆱ļÁ˜üĘĢb2–ú4ļGʑJÁOå]dąˆ7IôņLk +ęmFōb g>:dŊŦąæsjė&ûۗ„|Yĸ4 IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR2ˆíA pHYs¸Œ¸ŒĖöģ/HIDAT™cø˙˙˙†õ@ĸD0€ˆõ01ĸ‰ v QĀ $„{PÁđÃū¨?¨@4đ˙ā``ZÆv8xŸ| ƒÔ¤IENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¯ŧlŠ pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙ƒˆ~ū`øđƒáA} ĸĄ?ĀčYˆƒ0Å†gYEwt­‚IENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR 2ĸĸî pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙€ˆū$0üP`øÁE â´$x@ĄA¤ōõЏzĀđņÃį ėį-? ëž|ÁIENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒĖöģ/bIDAT™Îą € …á—PP:‚nâ*lb¨X‹Î5pJ ī§pš/—ËŨËSīŊ¨~ę%™)ÁbŧģqFãä‚8ˆĄpWųh+o#Āå B’í%_7+úös|é‡Ģ úž.|IENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¯ŧlŠ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒáĮ0ú@KÄĀÁ@ëˆ@b;Zƒö”~IENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR+2í˙> pHYs¸Œ¸ŒĖöģ/KIDAT•cøhHũøĀ˙ĀūÃöü@ęsû†ũŒr Ęū@}3Ē?đDũø˙0=(>ų l ühčw•ZVííIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR2ˆíA pHYs¸Œ¸ŒĖöģ/CIDAT™cø˙˙˙Šˆz ņŖ‚ũCC톯 Ü€bō*~Øõ`âˆū @Ë(s31cĨ×'Öà IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR2ųM; pHYs¸Œ¸ŒĖöģ/\IDAT™ĨÎģ € ĐK((EL3Ŧ…a؀ŌÂxbBabIķēû@1=qÁįj‰&CT"ëxIDP!ĸ `?´f0ģę )ÅĮ^ī–>„¸1wüĮ‘’•2>ķIENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR2gІ pHYs¸Œ¸ŒĖöģ/`IDAT™cø˙˙˙Šˆz ņŖ‚ũCCㆆ†î ~Č˙`øa˙HÔ˙c@!ūc#ĀęĀ„ŒøS"€ÆÛ˙ō߁ûy Á $ę?€´‘C4°˙˙]Š™lqĐđIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR2jÎö8 pHYs¸Œ¸ŒĖöģ/UIDAT™cø˙˙˙ʉË ˙0ü¨˙7`xü˙đ†ã ĸNđã%ØQ‰f4ęā?æ *œ0<`Š}`øƒ,'øÁĀÍeœ.G?öčIENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR2yļĖ pHYs¸Œ¸ŒĖöģ//IDAT™cø˙˙9øĮ†@|€áCËq=`øđŸ<ĖĀ Ád¸™†zĪ}™R¤IENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR2–ÛŨō pHYs¸Œ¸ŒĖöģ/[IDAT™•Îą € „áß8+0Ŗ˜PX:̐X¸Æš%ŸP|ŨŨåCŦjģ(ˆWģž8§.ĸeŽŸy“%ĪF1 RŸ<Šy.ëF l;ģåO'™tl Ô#IENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR2ĢIŧ” pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙ ũĢcøA˙ĐŅ†Ā”Â‡€F1|`cøÁÆđ‡Ũ:lr†W×:äĸJIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR2gІ pHYs¸Œ¸ŒĖöģ/CIDAT™cø˙˙˙Jˆ˙˙}`øđ˙Æ˙ PâÁ˙P1˛ õ`␰Ÿđá‡œ`(``ø2‡I3´hŨX™üIENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒĖöģ/ZIDAT™cø˙˙˙Š ū†ū ę<`øP˙D|Ÿ0ü°0ü‘'Î?`øĮ&æMaö0ĸšH4ˆ`dŅ8ņD|¤ĖÍō詂XÉo+IENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR)2é Ī pHYs¸Œ¸ŒĖöģ/IDAT•ĩĪ!ƒ@…áWWAŠ­ZŽQŅd/Ö0CH*ëz˛W 7 Á 6;˰ œ€÷‹O?ˆq"œĪ äs0Ō_zƤ ƘčäĮX¨ŖVņoú*ÁßŊWŠĮ†{:%ē—#åVnd1“š Œ‹vPK•¨ŊŅ$í”ī+¯å13”fIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR2n;& pHYs¸Œ¸ŒĖöģ/bIDAT™•Îą €0CQGĄËˆŦĀY‰’î‚€™ØÄĄCâ”à PŧĘŋ0Ė =älh—E"JJ¸ûíĩ5TĮļĄå3Sρû(ЉŊF\pԀĶ<ŧōī?ô {ÆŊ#,ûIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒĖöģ/pIDAT™ĨÎĄ …0…áãĄŖt´6A Ušgp07A`!yå\wĖ'˙ü(Ĩ>—€ä2 ņŦ›ā7ģ2 Nŋ(ŊāīGânZVĒNņ¤ ¤V~‘dCĘËfėÆŦ,Æhtdōd$G’ø|l[¤ļNû1IENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR2pōļ pHYs¸Œ¸ŒĖöģ/\IDAT™Îą €0…áŋl¸ˆāb‚HĶĘ2#˜R^qä<ȃ¯{ŏ™Ōâ€ĪeŠ$ $ Ü2ceŞ˙NˇģčzĨŽŠNŠŧĄl…l…ĶEËükčy Ÿ|˙(5|pIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR 2ĸĸî pHYs¸Œ¸ŒĖöģ/4IDAT™cø€áÏúđ€4ôŒŽ?`āĀpĖ~@ĸ @´÷OÃ?†˙ā˙DUöéTÍIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR2ąu\ pHYs¸Œ¸ŒĖöģ/IDAT™c` x€ ”D a+nIENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR 2ĻWĖĶ pHYs¸Œ¸ŒĖöģ/5IDAT™cøßĀ ßĀĐßĀĐŪĀp˜Dt°áadž? ÁlRMh#ūû†˙ Ė=ÍsU…8IENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR2ųM; pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙˙‰õ˙Č˙a`8ĀūŖĄáaC˙ÆųĖ ö˙øœJÍ~Ŗ}ũ—/zIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-12.ps000066400000000000000000000006241506303110300175420ustar00rootroot00000000000000%!PS % chars-12.ps /inch {72 mul} def /Palatino-Roman 12 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-12.tif000066400000000000000000000064161506303110300177070ustar00rootroot00000000000000II*P & [ ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų €Úr‚Æ@đhr7ČAÁMČ.:ä&žAĻ(†žתcŅ šŌƒEr 0‹„4‡!¯dˆdđǤ Á+† %4’nL(AĘ 'L†pzģô ›n“ŌoH#m‚Ļ~Ņŗhãë„MĒ1é+ aũ ØTĶK$A˙ũ‹ˇŨ$ę­Ũ-6 8Ú<Úč-'IŋĒ­,4ļŠ=SiĨKŖ•æąLu˙ę—ĶŌúŨëW ̧E×K¤[ëũ×é' QqJãī˙IR˙ûŋU˙ZIv kũi:^—^—ŋŽŋëú[ĖŠīßŌú×ö˙˙ĮęŌKlīëū?ëĨiˆaGęēUá*JŧzKŌ˙˙nĢI$´ŋßŌ˙JŌ˙īëb‡n¯_ëKÍ5Øi_ä ā•Ūę•{__ĒIxAŌL4ĩū˜{itDŅqo_č_Ĩũ1 ũxƒ BI5īëüŠ%Î7„ļÚ˙°cĻĩÂ˙ԃ^6ФÃĩúØi#ˆFãĨúHÃuÂx—7ĻÃÂ˙†ō/¤Û6 ˙Ą ĨÂFæÅŠ‚ÜŌˇō ¤Čmh—é?ŊZ ƒmVäKˇ¤ÚŋũĨi}=(l4Ŋxt’ēoũWôĩËũRq˙˙m[ü‚ÔU~“Ä_Ŋo]'˛QēI}Ĩø­ũkúĨŽ5˙ûõĨĨ˙ĨŊ~A¸ū—íĨk˙ĨÍē˙ŌõO˙ļëôŸÔ†`õū—˙ũ%ûõ˙ĨkĐé7KŌYÎ:õūÛü†”duëK¯õĢT´×úI´›aū Zéwoí'Õé.˙ŌūĐ2Į´ēM^´.ŌŪ­*ĩ }pô’z`Á ú´“[A'a&é[I˙„ļÂLMÁNŦ4ˆŠa„ˆfęà 0ÂJà ļĩ D$ƒ˜A­-jƒņ âLB Ŗą!„oĄa 0„0Ąd2iÄGĒHDDGŨWöę—ô’¯o×ŌHwJÚCˇ]V#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū@´>@Ė AĀÂdĄ ÃL‚<Ą €Õƒqä<6a ¸ŧ†H,y CäK‚C:˛i.L25!5 ú}H>¤%cR‡ `ä1BČ2„C=ZJˆB&„*Õ ¤äČ0 u„ îGČ?ų˙˙īņ #Ä4q‡ëø'„ę.p Sų¤4ĻOҰI #9 š‘|†‰‘øGŲ ž@ ßČ7ō ūp F‚†Ce„d L” 2&Jh>@Ž!žÁŸdĶ@›Zôm´lė ØAaOaL iϚi¤ONŌ6  ƒl ÚO.āšiÚi\†ÎHĻÂ „aŪÚO†û¤˙ú]­é7ēMî“˙úūŨ6•%ûi6ž—‡˙I˙ôŋŊ&öŌomũ봛W­/KIītŊŋôĢ˙KÖôŸŌ˙ŊĩŨ&ŌŌũŌn]}}ŋôŋũ.]>]?o}ŊŌ¯ũŌūęũ'ĮĢ_ŌûĮ˙ôŋ—]Ŋ_÷ú˙î'Jŋ!Č>¤$=_ãŋĐ˙č/ĩ÷ęū¯ņ~ũUmm!KÂÃčgËWé/õ˙Ō÷¯oWõ˙t¯û§Ōđ°ŌTruÕë÷˙ū—Úũũ˙zWũî•î“i%ä8 ĸLR Õú˙!_!_˙Ō÷ũŊ/I/˙Ũ/tŽēũ4Â0ÕWûÂKŋú_ú_i{˙éC˙ú÷VÕ/[aĨĨZ^U˙˙ū—ŋīīĨž“ũúˇąZI„0ę’ũâŋ˙á…ũ/´Ŋŋôŋ)Ô4ūé7õMŌ^øAĘ&h/ú¸?㏏õ÷ū˙Â_œė§ŸßÖ¯Ē^Ķ XaĨĨęķ„˙˙ö—ˇūs˙ũëVûbŋ,0Ōô—ŧ„īįĮŸœ ŋÛ˙a~áŋõë÷KÂC—ô—ˇü đƒ˙ķ‰ũĨīū?ļCP?ÛÛ^“Ōđ‚ Ĩ×īŊ˙˙˙ˇīû}ũūCjé{km%đƒu~’W߯ũ`ü7ú^ß˙í‡ūūŊ˙ûū—˙_ũ˙íũ˙~—Ĩļ˙ŊjŨ%z_ ßŌOß÷ŨČl˙ũŋzö÷÷ö˙õũiŊ/ 0‚omÖĻŋĮ˙ˇöžũũū˙ˇMĨęú^dI„Ũ…×˙Ō˙˙Û÷¯oëëo˙_oJôŧ0đ‚b°‘á+ö˙Û˙öAû_ouÛ]˛ ĮũŽ•üƒáƒÂ à ˆKž•éd˙öõدžëënëŊēŽ:Ŋ/à B ąi$¯ÛŌ×o˙Û˙ööŌÛŽÕ~ŖwIŊ/Čp@Ŋƒ D4áąK~›Ōëo˙Ûũũëm-úŨZĒWŌũ0Ą†Iļ’Ū“d3ĨûūßõîÚ]Ĩˇ¯i~•ëúĐa„ Û Sá&\%ûūŪģû°ŌÛKnëa¯OMôŋá´à -¨$ĘĻEĻ °×_ÛPUĢ]†à %Ũ„ļ iõô‚˙AáaŸ0Bƒ„"dČ/¨fƒcBB×!ŸF †āˆa‚€"Á‚D čÉÚ _FH†^ŒWĐ$Á/ĸ´Ąá4„š A„.‚ģûuŊ;pÄ+ B洞l.&īņĄ !DA’đeˆˆĐ‹†A‚A…øˆĐˆĐˆ< ∈ޏ@ūŠé$˙ĸã5 3tˆ›Đƒ_ (“á#D ÃR/aã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?A¨kŽC6fä2R,öX˛†TՂĐؘ•Aĸ+7ō†ÉŠy×r  Õ4Ū@ņōĒĒĒi˙Ūé¤AbČņrŅd5--ŋũŌ˙˙ĶK×˙ ļ ˙Ėm}-Ļŧ˙_˙˙ūŠĩõūŋõë˙˙ū›_˙˙õ˙˙ũ+H†oų ĪČ4~@ø xg†ÜČfŽ@đRžC0rāN?˙ģÉ˃LČeĶ á<šË€\…ėx.d~ \Á \Č5ĐÎCdƒÁAHA3ÂŽDĄ y „‚g ¸ũ+ôÁŅšĸ@h0Č`E2&@‰éd3Í4 “Ma"h0†Ay…FÛD€ynë§{ŋ˙îƒxA„lá8A¤O]ôĶTĐAĩA„lē¤/† `“!l@ƒ ĀU˙ĨtFŨ é^“Z0ŲCfidZ0Ú0äb0ÚNCF#ĐAĸ-iÔéútŸ¤ŋú}¸„WH:Mƒ6퀠B ī ¸„„bm&؄ ¤ņ.ëŅnú÷Ũiiëtđ.ŸôēŌęē~éŌá?˙Ö´Úˇë˙Ķcíúé~õū—M=jôÚøí~ŪöŽ—UIv@Æqũ~ēÛ˙Â_ûÕ˙ՏúÚ.´ÚZŠ^č4ū›ũE-˙ô˙¯é|?Û¯uŠn’Am Ōņƒīü0ŋ˙ë˙˙ŋō€1˙uēkT‚Xm„ŧš˙ņö—ü_˙ī˙°é]{Ŋ(aáAÂ<ū ëūm?˙˙ũ‡û~­¯}7ĒA¯@ŋūp5-Ĩ˙ˇ˙˙˙†˙ŌzęõJô¨^—˙û /ũŋ˙ūŋ˙oŊûn’Į×ęīö+˙o˙īÖü†¯˙ĨĨi"ûÕ/Įë×ûà ˙o˙úëđ˙˙ú[Ō˙˙×Ģč¸jÛ˙÷_ü†SŋĢt毭ßD(˙ūžÛkë˙ˇ˙÷ZM˙÷ëI6é$ŋūē]íéí˙˙õ¯×ĢĨqĨ˙ö‹­¤ÛaXd#é˙í˙ûiZM…õģE֚u}/˙°—p›"; %°Â\Œ˙ö˙ļ• Ą„m{ŦÎØK~Šļ’_ũˆS0\I†bĖ3ŒƒYCd!†A!‚ DĖ0 †”0“˛ i ŠŠ™Žā”‡˙ĩËâ˜Ļ•…m§wÛWwiÛĸ˜^„'kĒ÷k˙Ú  alDq ˆˆˆaMáą &ƒ]čG~ÄDDB0ˆâ8ˆˆ„˙˙Õ˙_ōjëūŋ˙˙ŌÔ}/Iŋ ~/÷KîŋI¸Xēא[ąÔG´’ûKa‚ ž+ QÁFÉ 2*†–*]ŦDD˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€€cxxH ū  (ĀĀleptonica-1.86.0/prog/fonts/chars-14.pa000066400000000000000000000457261506303110300175360ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR 6ÛīE pHYsb&2IDAT™cø˙ap# °hkâM?IENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR6ĖÍÕH pHYs¸Œ¸ŒĖöģ/(IDAT™cøÃ‚PAC ØÃp Ūaø‡GLhAG‚!z!ĩD°|]IENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR6æ}$į pHYs¸Œ¸ŒĖöģ/%IDAT™cø˙Ÿˆú2°?Ŗ‡PÔAÁč3Ũ#ˆz:"įĄb/ _'IENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR6ƒ¯W pHYs¸Œ¸ŒĖöģ/^IDAT•ĪĄ €0…áÛ ×QēYŲ•H*:ap'Ž—Ōæ.`øÅgžz$"L†\gƒÂü!ƒÔ8;+!E܆Á7vËeČ 4j( "X”dáDņ÷­ܧ¤l@fŲIENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/~IDAT•mĪ1‚PĐųĄ änÃ1¤ŖôHŽĄđи-v&ë¨ųAšWė&3ģpsbOw&^(‰ĨMÄd7b°'qŊ¸ˆ*ÃsĘ…čZ‘‚Ø#ŠHF$¯74Ō/KÎõCŗQÛŧBœlRå ļžĀŖRb×§ƒˇvøoÎįšnęy›rIENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR-6{p-o pHYs¸Œ¸ŒĖöģ/ŠIDAT•ĨĐ+Ã0 ĐHë5&åZeŲĐÆz„Ļ °g¨Jg•8’e׎Á:ŧÉō7ˆ= _8bāF8a( ¤dŌØ¤åEąAšpģ9ŲYÉ™žOoŊXTFd€“B Ĩ:ų,čäil|ī”Œ|S֏\• äŦĖKĨĪōP†ąp:B2ĘÛȖWdqĀjęZÖaę´ß*rÂĘĪąū`ũAģ¨!ĩIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR)6r› pHYs¸Œ¸ŒĖöģ/ŸIDAT•Đ;Â0 PG€Čr”ŪŒļęĐąW ękq°e¨büa*^Ū❠$1Á‰–”4ŠWâĸ¤]č'Šą›ĄÃúmPŽŖļ_l‘3ü—Ā%ūšSjĻĖ<‘K8Vf¯ƒ°´$Ŧ- áˆoĄ…üK™Š0žrTP˜ŠĶ0QsLî˜Ũ!;žRõ|ĐžõŖãßH/oIENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR 693^ø pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙€ˆū10|PŖzđ„>`8ø€áđ†ãÚ0ô?`Ā`VOG27]ØēįAĄIENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR 64-.ŋ pHYs¸Œ¸ŒĖöģ/TIDAT™Îą€ DŅÍ´Ją4r, ‡Jėŗ V8ærg^z÷"TĄ ]ЎĐ´FTNš‰bN—ˆíˇäÖmqëųk!rFGz P0cRūąlMœA*zāIENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR6ß•ŧ pHYs¸Œ¸ŒĖöģ/YIDAT™cø˙‡Áūƒü†ū? Į˙0<ūÃđđÇ? ?€¨†á É0üƒ †˙@ÄZū7Z´€ 1jE Č: ĨÁx v ĐIķ˙î KÆŅ2XTIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR6 JŸä pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙˙âƒ@|øÃųæ í혁˜ą˙à ū ÁĀđ‡‚?Č004Ė‡ČąÕôņ} ž˙Íũ˙Ī#™K č@‡a‡Ū‘IENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR6ƒ¯W pHYs¸Œ¸ŒĖöģ/IDAT•cø˙˙˙Šˆh€bķ Yž3Éy­%IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR 6ÛīE pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙~ˆá €‘à *Ą~`8øáđ†ö ũø?0ØCuĖh^ŗųm IENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR6 ŋOŲ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ŋ¸Œ ,ÛĻq~_–Š”IENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR6#žv pHYs¸Œ¸ŒĖöģ/IDAT™cøĮ@xŽĄ‰˜Ú°ĢŊø0{nČRIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒĖöģ/hIDAT•eĪą€ A: Ką4Í)Š€:€Œ€ņũ{G L6Ŋ9'"§Η TH!@\xØ”ËØ•iĘø Ô C ō"@›rģ2ãe,4čP BZdÁ?Ķ?nG:ŠGē…ÁIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒĖöģ/eIDAT•­ĪĄ€0CŅ8$#° ŒFî*ŦD¯‚5čą@qŽ@iEq˺ɇ$ĸ`ę‰ q´5ąĢ"6ÂËkÄiɘČP¨~€ “xÖ|ÆEŦ\fŅL÷Ũ6Gwwāõ d™’pŽîmßIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR6ī–„ pHYs¸Œ¸ŒĖöģ/5IDAT™cø˙˙?âæ ˜?0|âF ›ˆå¸ž"GwĖøáŖ¸?"σg-@75IENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/uIDAT•Īą„0@1@ .…Ō€ˆhE?iÁPdîO‰‡˙žt03✠8Đ 5ÁėD̈Åb51ėÁVøˆ(Ƃ_ļ;ˆÖɝsŠü›ˆb“ÎŨ:šĶ>-=ÅEŸüŋõŽ/ŠD¤pIIENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/…IDAT•Ī1 ÂPБ–ÁkØũLˆb‘2Gđ*,,=‚‘ļ)!Nvø 6e’ˆv ņšČX–Áļ"Fwí‰KĄq5*œĖÁ´Ļ3qJĪlœP™EĐĀ-ë`0Ūä_ÔH…‰8nD§‘hu&zÅģD21!Wßŗūc¯ĮĸV‹ŧÔIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR6üAÄi pHYs¸Œ¸ŒĖöģ/[IDAT•cø˙˙˙dâ0ˆ`‡˙āÄņN|ĪáÄy81Dȃ{ ņ¯Fü™÷DüŸáÄsqDœ (ĖErNâ3Š†čŪ"Фˆ›ßŠÔėAIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/pIDAT•ĪŊ €Pāˆ…c8Š7™ØY:‚ĢĀž¸€?…VÆ{?`aķÁqH"n&āÆįŋŋ …ƒŒXÆ€Ä)=ePeEÃĻ`^éŲOö/ė‚(4EfĸÕH4ęˆ^5Ņ9ŊĀ{âŽė5ë''-l¤7yĮŽęIENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒĖöģ/{IDAT•Īą ƒP Ћ((MōG‹Šŋˆ"küŋK „s'Š(PšWX˛īŒˆ0üō![K–ž¸f“Čĸ#[OÖD–ׁkˇˆ*Ļ“Á;‚ÆđÆÃ€§341Š´;~Cį•b˜Ŗ*Ŗ*rVƒĖ.‰A+¸ŧõ_Š“ĸ”KöIENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/hIDAT••Īą €0 @K Ā%lQQ˛’%ŠŦʤKÅø-%ˆ’/Žüדˆ0Ŋ|˛ ˜œ&/y‘)ȎÃušīÔ C\ D°šĶœR ¯#(78ĨÃ`LßGxĢ@Ŗ›;pÁāIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒĖöģ/‡IDAT•Ī1‚PEŅKL´d ,…-šx†‚Ō-A(ØÆ7l; â8ƒ…h,lnõsŪ|ĖLėĸZ<(ÄRÄŨ1Ų ëÅh7ŅūHc“¸Ä;Ų(ēú*RáJ:–bÆŅ•2ä<âōr>8ŋfÁŧ‚ęđ$Č_™ŋĸ]ŪãCėöÖúP‡oCŲįˇūËx<rQãcøIENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR6ņ_´. pHYs¸Œ¸ŒĖöģ/€IDAT•Īą Â0Fá'ĨH™X 둨 Yë,1¸tų¸“*š¯üīĒ*|!ĢĐ9 -ĖBÕ$<4 w-N’ÖČ6h‘ųŋLƒ ˇAĢ@P8G*—HÃĻúTŧāC~“œÍYŒîėÖ§-՛ŗ“Œ}1ĘĒŪ||ë?žÂ<ŸĮ‡ŧIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR5Ĩ›ĖØ pHYs¸Œ¸ŒĖöģ/IDAT™cøĮ€chb`b&†6JÔ G*WUSlįIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDR 5]{7/ pHYs¸Œ¸ŒĖöģ/EIDAT™cø˙$ô§€á‡Ã(˛"Äjg`ø!F`C Āčà ?0<ūĀpøÃņ ũä?0؃´ŊäXʼn’X IENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR5~ fú pHYs¸Œ¸ŒĖöģ/jIDAT•ĪÁ €0 Д Ŋ. 8JėhĨ#ä˜Ciü_\@/īü$D"bČœtŌĀā č;h§ÄČČŲ´dd`Đ W’‰Î†32ĩ ôx3ņ¸b}Ø*īT<(ąīĪÜh¸ˇŊ?ūá¯o-$š6ÚTįåIENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR+5đú/† pHYs¸Œ¸ŒĖöģ/‰IDAT•Đ1!„áIļ Ü ˜p#Gc76v^ĀÃ`å5^â؎MOāĸĨĶ|™ö—ŪėÂ&ø/Ȏ83ričĘM8Ė•c%Ô@´Šø,Ŧ…]Øø.¸Â“Ša3ö˜‹på 3ēgB2¤ąa™!4rˆ•āķ[PėÎoŦŋxĀ&ūƒŊĖIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒĖöģ/nIDAT•Īģ Ā Ћ(R2+dF Q#Ę"Œ@Ip|Hų4Hqņ äŗˆ^tđČ ŠĪVŠ¤ÍŠ é+ÆĒgvUNA!ā[ę÷˜h†ą‰l$8âxövbîBŊZrČ<ŸØ>Â~ô“ Pއķ˙¸IENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR&5¤6 pHYs¸Œ¸ŒĖöģ/ƒIDAT•Đ; Ã0Đ6¸ čE H!S QálŠBh˛+lH•LņĘŲ¨iø˜Ú€ (Đ0™AGÎč ųBķä†ēšĖ‡4ķčyī'Ãé/ŨW[îŗr4Ën0e5Ģ7Ûbv­Q÷gō]/*ĀŦĀM¯NĶņŸ|’ ØH),zIENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR+5đú/† pHYs¸Œ¸ŒĖöģ/mIDAT•Đą€ Đx”Œ›°Š› įb¸IF ¤āŒ1ĄíHķē$˙Ŋƒ0Âc™Ä2Å„ę([ĄVåPRc°á…<B™Å÷|V×ąįRÎūų[ŖT –°G °pvîÂhņ×Ō$ãąëą L_IENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒĖöģ/‘ÁąOÁžČ— å+•Î:2ˇAųâ6ˆ˙Ŧ/,ķÄzОíFvęIrÚâėŗsLN‘™iˇkpTv Ų{$^Ÿõo…‘ī¤ 5>ĨIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR.5Ķä pHYs¸Œ¸ŒĖöģ/BIDAT•cøP)†ú@âÃ˙ < ø˙˙?PÃđGū˙˙hJídĀ ho-6ęÄĶА€RX‹T \CüĶØc¨]IENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR5+=w pHYs¸Œ¸ŒĖöģ/%IDAT™cø˙ŋ†AāCÃ~ –ø?Ä] €ėV< [OŪW/TIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR5‹ŪíJ pHYs¸Œ¸ŒĖöģ/2IDAT™cø˙˙ ```øĀĀđČg¤˜ Ë?`øÂöęčÆ˙ŗ"e°ģj.IENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR)5ô˙ģ pHYs¸Œ¸ŒĖöģ/‘IDAT••Đ1B! āFß`ä( ¯…ņ"xÆäUø˙ÉÄÅ| ´ˆí¨ōH™ŽJĶŌĻy‘lđ6đ"Ášl4ƒQ@7đ$wÁ-kGŽ„{ÂĖ#0Ķķœã-B*j|ﺈÁ’4°2NĮr+ilŦ'ö†*mzüÄ);Š­áįgũË~ŠØĀÅæ0IENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR!5įØŋO pHYs¸Œ¸ŒĖöģ/5IDAT•cø Č$C=<Āb˙á“ōC€üĮ€NūÁ 40üú¯á‰D“wÄž‰’€Ž¸IENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR55ɝžŨ pHYs¸Œ¸ŒĖöģ/IDAT•Đą 1 …aŖ)ĶŌš`ˆ‘˜ ÜŦ*Ö8‰Bį"Šą%NTįÂ_÷ЏÁ^@ázǐO“†šĖ.Ėų:eí9øŖŽ›o5ųáK%>Ô농Û-^eĶÍĄē šé×õļķŌL]Û¤Žkæ.Ē)Ô.` ĘŲĢRĮ˙ëzĐ/Œģ/):qžIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR.5Ķä pHYs¸Œ¸ŒĖöģ/‚IDAT•Đą !ĐLļYØÆ-ÍR,ÁĐ@üĢãq(\p“<ø?ČHÅŦHb'(gīŠ™č‰Ú“čIēIļ+ũÍ Ō45 Ņ“t“lI9WĒ!MQ“°IÉoR^¤+ D>‡ėĮ= ŋ$ĮyŠÃĪÍūæo}ūIī*RĀIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR+5đú/† pHYs¸Œ¸ŒĖöģ/”IDAT•Đą„0 ĀcēčÄ­Đ fhĖ߉ž‡<ܟā‡!FÉfŌ@ÃMŽNÃāD^Ë$Ûh8"{0ôD†ļ’›ĄŠl0-)ˉ-ø8ķIą]ė€ Ú †×ęv_Č΂ōGÉĒ˜*õWq'ō#"šĢÃHĒX<ĸúŨÛ"ÕUø”ut¤įŗ^ņp_ķÆÅF–IENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒĖöģ/TIDAT•cø ę00đ3ü˙ÁÎđGū?3ˆhAÄņņN€í ‚Hü‘gø#4ūãU‰ü`××C 4o&ˆÆžrŽNIENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR+5đú/† pHYs¸Œ¸ŒĖöģ/°IDAT•Đą à Џ\¸d{H^…MĀJ‘ĩ°˛ČeJ ˗‡ĨÍ+@Įũĩ#øRĸŅ 6Rr]Ȥ}\QĪIpnĒAĐŗę.h¤„Cjr$á0V§­Øw&Ō˙ ü0F“2~pŌ‡Ę͚8šõ‹,ǎ&OfˆĒ&âėČ|A/K‹Ü-{‹5Ņø3š°xKŒmHųŲžÜĀ)zjā)WoÉyøQ损;đ{IENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR&5¤6 pHYs¸Œ¸ŒĖöģ/}IDAT•ĐA „0 Đ/]ĖŌ ˆšˆāÅŦĖÂk՛tn➋0æWPÄ,Ū*ü|‚\FqÖŖ"­B%937tĻádŧõKWúĄ‹ųĢÉRė0™ŽÜ՞JCgęi°‰ŖšU… ĖŅ3ŨáŪÖמīÃ8 ĩyëL ģ×<ö_¯ÁŖĶēČOIENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR5zÕļĮ pHYs¸Œ¸ŒĖöģ/‚IDAT•Īą Â@ ĐQ\› Xá6`ĨÛ A”ŒUXÄŲĀå§ûø„hh^aÉ˙Û éØ°Ždԓg[Á*ėqi#Ö>v1O"w†Á#]ņ4ŒŅ;‹˜’U4ŅXØĮ/Zƍõ…ޞ(â9@zˇUėoũĮz™ šĐķāIENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR"5 īL pHYs¸Œ¸ŒĖöģ/1IDAT•cøIL ˙‡˙Ÿƒ= )Fū˙#2ađ“?øA$C=œÄĸIō´ĀĘ kë(IENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR+5đú/† pHYs¸Œ¸ŒĖöģ/`IDAT•ÕĐ!€0ƒá.äŽ0nÂ҆CrĨ9ŽąD,¯t!!!($ũüļe<bÕ%GÀ#[Fũ-ûÅ*ü͜a=šˆŽôÂą%@,Ŗ˜A$ u)p ƒÅúĘ IîūĒM­I0IENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR)5ô˙ģ pHYs¸Œ¸ŒĖöģ/‚IDAT•Đą Â0Đ.=‚Gņh>ŌPf„ŦbD‘5@,t.,˙˜ŗ”œE Žø¯úÅ?Â÷˜zˆjÄ+ 1-x2ĨĘܸ3e Œ;ÅļávPëūā†~ˆH8xa‚fņEōŗā4ŲŽŠb'Á8Ydŧpé‚ĀšGã}ÆÉĪūf"ôķŲū ĄIENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR95ĶĄ~S pHYs¸Œ¸ŒĖöģ/žIDAT•­Ņą Â0ĐC)Rz$lA†aDĨĄKË8AYÃmŌ9’ņįl‡#JN'Ũk˙?BM Ä,ˆhŽ+0Ā“ĻA2pĶd#úŖžŅ)´šŖĘ!p^ !5yËkQ2|āw`”3N3œâeN  EãBœfBmę××;ēq†IxĀēæ`z ûˆÃ&‡€ŨFHØ2€{q 8ÛOXŋ@æāŪåį ū„IJ:Yމ6IENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR%5î35 pHYs¸Œ¸ŒĖöģ/¤IDAT••Đą ƒ0Џ\@‡2× ˆäŒE…Pą–ĨŦĘNw…åŸ;S6.^aũ;Ô#8,“s‡§§tH=ĶQšåŽĮ—æWuæRíÕHo>‚ēŨÍtĖÁúåRmĖėĖŌž˛Ū°ž–#s;•Íz>É:÷ę[lÖ*6wÉf_ZÕ§zĒ9°HāŦNŒ‚DÆš hTĀ‘ øũ?ũĸÔM´ę)‚IENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR%5î35 pHYs¸Œ¸ŒĖöģ/IDAT•ĩĐ1Â0ĀEIįÖRžAđˇč,”đĨPņ >`ē+N^îŒŌĻāŠévW:ĐNđĩ4‘I‰ė1%ֈ2P#$PĐ@š@;Š v|[vΧ9ōe^ų0ī͉7sÎÃb9'SNŲ=¸}]{ˇî~ZŠ;ūÁÖ?#,Ž>°ŅŠ$ÜŌCŲÕ¨IENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR$5ņt pHYs¸Œ¸ŒĖöģ/€IDAT•Đą ƒ0„ágQPš X X)`6ķ(á! ‹—ģkˆ’&W|…Ĩ_ļlš}ęÆ=Nvāxą3ĸÉúĸÅi’Û[ö‘^™ú,WÚdŨhŅ]ģLôhé•åL]ļ•ÖMęģL)DÕzĻHĄK¤iCfÅž÷ûûÎĖ3ĄßÍQIENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR 5]{7/ pHYs¸Œ¸ŒĖöģ/IDAT™c`€æ ėƒÃD E/9ŋā˜‘IENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒĖöģ/eIDAT•UĪĄĀ A: „”’ŌˆCR‚:‡`ōų{ŗ~ˆ<ÎCÚD(ĄA…æ!(˸•׸1ü&A„T›ĶĘ2nå5.ED(ĄAŨ č0 įlūįF¨ÉBŪËIENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR ;gqV_ pHYs¸Œ¸ŒĖöģ/IDAT™c``€€ zq–Ã˙ČV <čũĩ+IENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ßס pHYs¸Œ¸ŒĖöģ/[IDAT•ÍÎą€ Đ?¸AVpVrOÖōŽEdƒ”1 Ī l^ũ "Œw'(WĮ+‡q’˛Î1u"ŖzĨ„4aɓ,l”iP7ÄA[á žƒ?ōæĪŅuÜIIENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR;¯ŧ‰ pHYs¸Œ¸ŒĖöģ/IDAT•cø˙˙˙†‘A Rô Ũ™’ĸyPIENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR ;…­M& pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙€„ū)0üI`ø‘Āđá=xĀđđÃA0j|ĀĐü€Œė!ę ˙g2hĶDŖIENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ļöķ pHYs¸Œ¸ŒĖöģ/iIDAT•­Ī1 €0 Đ:zâŅéÅ*Ž^AđvT(?‹ƒs—I~™)z‚¨¨ƒbŊƒbkŽ‘ŨDqYōđGcĪ2ŠÂ˛LäđÁâ$'üa8øšTįao>IæEdŪF‰]ßzzŠ+šÂōŒIENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ģčl´ pHYs¸Œ¸ŒĖöģ/lIDAT•­Ī1 €0ĀEA;ũ~ĀŌB’¯Ĩ˛ôMÁ%Ũrį…`a#6S-ģ,D„Á^‰ŒdĐW Ėp  hD¨ĩGęĨ°ÜE¸‰olOc5Cë=;kÖÉ2+¨9´Œ=yÆõíN­§´_„†ÎIENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR;WũG~ pHYs¸Œ¸ŒĖöģ/QIDAT™ĨÎą €0EŅ –.ā(BV‹X¸VĀE"8Ā/,RŸŋHm“âôŠŌÅáJSâŌÍŲz\eú14ģÛ\jr(؜)ŒT§¸ö\?}å•č ōIENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR ;2ĩ pHYs¸Œ¸ŒĖöģ/jIDAT•­Ī1 €0 Đ^BČE/&ØŌÁk\=DĐąC1æ+¸ b o ˙¨ lÅHđBę'Rg8e°ŧŦY°1táÉE 3ißiS<‰ ē Ō´Z‡XoATŒ€úû­Ÿ8{íŦ֍åÄ IENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR;I4wÍ pHYs¸Œ¸ŒĖöģ/WIDAT™ĨÎą €0DŅ/)!›¸Z”Žq‘dƒ” ę0…Ö9xŇ$šĮe YžTlZņÅĸˆųčx3”ŽŸžšĢIÁD›Čôœe#\Ë×Į´â™×^˛IENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR;ąÔŒ: pHYs¸Œ¸ŒĖöģ/?IDAT™cø˙Gá˙†˙ ø<Ī?Āđ_ūÃ?û đœXáƒCCãVGf`„ā˙˙)™s€p ‡,bIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR;D*Š pHYs¸Œ¸ŒĖöģ/IDAT•­Ī; Ã0Đ 1¤1ä:Љ.ō!…¯%á‹Č7ØRÅ ÍČ$"Ĩ›‡Đgfw'ö$EĸáLÔs Xũ1 {&OÄËËVâŲ¯d_ˆä3Q.J1(%ˇ(xĩY§lôŊlLz ĩ0ˇQåß>œ~ _tĘIÔĢ&°žŦ,UŠĪŧ*Xĩ yfÍ\IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ŨŌŪ? pHYs¸Œ¸ŒĖöģ/LIDAT•cø ˙ėAä0É&?€É‘Œ ŌŽĄHÚ0ØI y iøHĒ˙‘ü˙@¤ü?v°.ē‘ Œ˙ $$hF7aÅkgpÎ=IENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŒFí\ pHYs¸Œ¸ŒĖöģ/+IDAT™cø˙‚ūÔ1ü°cøC?ęāRČčX–Œ~P† Ģ-¸QŸWˇ˜ÅŖŪIENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR ;gqV_ pHYs¸Œ¸ŒĖöģ/;IDAT™cø˙‚ū0ü`øÃF .\  0ü`8Fh‡ @č€Ņ†˜?0đ›ĶHít ö.IENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ģčl´ pHYs¸Œ¸ŒĖöģ/pIDAT•­ĪÁ @@…áAP7Ą3T&ĐŖƒėz˙– .ßaöŊŒyīšQl`pÁũ—ŠîA\ĖNØĄC%úQt4Z°Ā,j"á>Ŗ‘Ѝ`mGøždQÎĘØL áSĶYĢ…Û~áæĸ˛×œ°]IENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŒFí\ pHYs¸Œ¸ŒĖöģ/!IDAT™cø˙áŸÃ;;†v ?čˆ čR3Q üšbIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR2;KäÔ pHYs¸Œ¸ŒĖöģ/YIDAT•ÍĐą € EŅk((‰7°¤ a3]íģ cPž_ÜAŊÍŠßCGÂû:=͞PĄDv˛ĀFb1×kǝsģ Íuo.Ísú#™l–{üî×áõŦ8!ˇLnGIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ŨŌŪ? pHYs¸Œ¸ŒĖöģ/FIDAT•cø ´!ä?;†ú†6 ö  ō@ŌđÃõ? ’˙ˆ”˙Į$í˙Ķd`üĪĀ%i@ËŅĐTŊ‡ĢëIENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ßס pHYs¸Œ¸ŒĖöģ/iIDAT•­Īą „0DŅ. „R܁[ĸ„hË'ŅĀ’m`y0G~ÉK˙ ’Œ7IŅ(´FŽaJÆŽmāVy`–÷,Ę? }(ø¨ôķͤøŪ$ųĀ6z ÅĶđn­]ē:ƒņÍ[=‰ĀNž‰IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR ;2ĩ pHYs¸Œ¸ŒĖöģ/eIDAT•­ÍĄ €0Đk•Ą‚Ut5PHV‚°HŲųáø?!u(8ņÔåÔāGŽ âč‘1$ <¤=H 9>d.•ōÆ^Y­2ŗMEˆ×SqBœá•i•o¯č&oA´fšËˇPIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ģčl´ pHYs¸Œ¸ŒĖöģ/fIDAT•­ĪĄ €0„áK*p`Q°Éc-LÁ,MX¤ WŅpôA‚Ä€ų˟’ūÄ ØŖ‘ˆÁŽlĘnjĘôŊbŽŲpã–.ŅÍW—V‘*ÂΏéN›°‹ˇy IENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŧĘü} pHYs¸Œ¸ŒĖöģ/7IDAT™cø˙˙%øŸ=à 6``øĄÄė ?ø_0ü˙ÁđÞr 4Œ)t+8k>­\ė{IENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŧĘü} pHYs¸Œ¸ŒĖöģ/aIDAT™ĨÎĄ €0FáG*ŠĢ­c:ÖĒŖĮ:Hk°@åŠGÈĪŊûs¨ 42•Č-‘ŗ%6M„nīŧ5ΰÅ ‡õ—õˆž*h3 ŗ–ĪĘÔE‚m:É0Ø­˙õëî(‡nˇ@yėIENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR;ĩ!\ pHYs¸Œ¸ŒĖöģ/5IDAT™cø˙ŋ'ļo`øÄ?ˆĀ €õDa9 Y@S˙ņ?F {˜ņ¸•0#Bq“ī…IENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ŨŌŪ? pHYs¸Œ¸ŒĖöģ/GIDAT•cø ´#˙Ų˙?ßĀđĀūƒũ8ųÃūÉ?`ōˆ”˙"؟É? |ė@W1Č100üg°‘hĄ…͉1ûÕIENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ģčl´ pHYs¸Œ¸ŒĖöģ/_IDAT•­Īą € ПPØÉ˛‰l†1.Ϗ-‰ &—;… h^˙ "ŒŽ@|x+#ÂĪ„X02ƒ H“kbđáI¨ĖvWÖĖq%öŒ?&ŅV¨°ôlŊû`Ë;^AĖŲIENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR/;ÃîŒ pHYs¸Œ¸ŒĖöģ/‰IDAT•ŊĐą Ã0 @.ÔYD›„ãd ˆČYŞĀ+(HáV‚ Ȑ‘ OāoŽ{<Ô#p&h@'X2 J%i„œôâÄ?å œvjÁØ ņĶąë¸CV–ųÛ¨ÎsڜWvƔWËÍx4&,ŅšĶĨddåoĩĄ ĩqŌY?s‡,ÕtōÂÆIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ßס pHYs¸Œ¸ŒĖöģ/vIDAT•­Īą Ã0„á*í âMĸ•ŧ’>•.â1dŧĀsįBčr¯đn>xpüđ@Ōp#…mō9ĸ$3X: į´Ú°8?C_Ãä$ņĘĸđĸúYĶÅęģĪ ĸ?Ŗ*9(šß‚â`1lŦ3+šķ#į!‚ĮÛŖxemIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR;Ģčl´ pHYs¸Œ¸ŒĖöģ/IDAT•­Īą Â0EŅßšƒ đ&x3>ˆ2Ģ@•ŽŒ@¤iŌ8’åŸ÷’ hNyĨ+fV䏈‹˛ōÔr^í$QËYbXšH ø\$ûôŖgōnBĘ d÷J nx5äúJąĸŠbķδ3‘´¤# øxđ&×@”`kÃ9Į,‘ž9pIENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR;MÁ§đ pHYs¸Œ¸ŒĖöģ/aIDAT•­Īą Ā Ā—((QČf„Í~¤)CIpüŲWY˛,T6R…ų¸PšĄJĘâ#Ķŗ<‚I7Z"5ÅO1™žŒ@z€H¤%R3QL‘ã°ÕÅæ[/éõģ,Ã_JČIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR ;jo& pHYs¸Œ¸ŒĖöģ/8IDAT™cø€áÆ>`xH.:|€Ąũ˙y0Č}LŽQĀč$ Ã€ÎCEļų\œÕ›†IENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR;–z Ō pHYs¸Œ¸ŒĖöģ/IDAT™cxĀ@ đ?Fåá`fLXIENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR ;jo& pHYs¸Œ¸ŒĖöģ/3IDAT™cø€AūCû†Ã`ô\ôáÏ @č˜Kž9ÁÎ8vĐa˙Ņ÷$]>ÔjRIENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR;¯ŧ‰ pHYs¸Œ¸ŒĖöģ/=IDAT•cø˙˙˙ē/ūČ˙Āđų˙† õ ‡ČI0´˙``č˙ĮPÁ ˙˙†ũâ4Ŧ%ĩŨSNlPIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-14.ps000066400000000000000000000006241506303110300175440ustar00rootroot00000000000000%!PS % chars-14.ps /inch {72 mul} def /Palatino-Roman 14 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-14.tif000066400000000000000000000071401506303110300177040ustar00rootroot00000000000000II*ĸ &  3˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙!ä2˜r 9 iŧā×w+‚ƒE…ēČ,'d Y2}D6øI˛ҐiōĐAĒd4æCjČCV7&ADČi~õĖ3K˜jƒÕ¸j0 ‚ %‚á=zđGPP›Ĩ¤›ĒFÍ‚ĻŸaA Â8A˙Õ#yx4›Tb}Y ˇUA6Z@´mß˙„n‚N’M§T“`txŗÆü%I:Mû_Ĩ‡ŨiõtõVĐ\ Üu—`ϊÚM˙ũzWKŌWuUÂéé´]tŠ*}˙uU˙_]°ŪĒÜ.›Kũ/]o˙ëū礰ÅĢĮũŌô´žŊú­×Zė1ëûú^—ūũ_ũtĒųˆZôē˙ôŊk˙]*Ŧ#÷¯ütŊ*JëŋōŌUi%Ø E8뷏_¨öŋâ?ļĢĨJé__ę—ŌW_ũīTép¯UúĨō~ģiZ˛;ûIbŊ¯¯ú¯I†•˙]á´ĒĢjõũRKĶH—pŌ×ú`đÄ%ȕŽ?˙I|^i1M˙ņ iWwëôˆf¸M.pžj×ũ”áĩ ũÂ×ū ×Aôé‡kŌė:FöBiã×é]tčL+a…ßÃjBrNÎ?×ô¤q´ļžmB76%õújŌ‚0Ã[ëúߋpžAļŋ­—š„tßäˆ*Ôŋ¤é~Ú¤kō 0ô­Ģũ~“kõŌ¸a%ūZēŋôŋ×­÷T›˙ĨÕëČFŋ¤čI§ôˇú ĩdXŨiŊŋņŽ´ĩ˙KK~—ÛKõũ/ũ-ūŋKö˙éŋ­ë×Ōüq˙ūŌũuŌĸ Yũ}}}%öÅ=u֑§úz^’˙˙÷×_ŌŌČlužŊrŽ=uKĻßōÖ@‘éũ&˙­WŌĶ_ëuÛŋAö–––ÚOI6’ZëzI_púé5ũ"†]vˇū‚úīKzl É;˙ĶuĄÚ[¤é+iŋīI&Ōa„s¯ZēIĢ $œ0‚m$­$ŋ¨<%ļbƒ]kTà ËNąƒPČĻXa„ ļŧ1’ A0ƒMũ4ŦWÖÂbLP XˆiĻ!‚ -!ƃD!`ƒC !"/¤ĸ""?u_ē­}Õ/ēIWļ´¸ˇJ>”-´‡nˇK˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čr? f .@đÕ †JЁ : ( xf†@Y9rQČ7r ÷äÁæA°ęCQA Pd0A hƒdŅYY VCÅd„ŦƒJ4C Ü2‰ČeĢ!¨œ†b°@Čh õ@Č=DˆøČ128‚ô Ŗ7<…‚°Â 2āƒ h0ƒJ ÂĐ@Ã6Aá„ĐaƒI†“[Ž´Â{a„@ĪAŖœ‚Œ=a†$ đ0D2¸"]8gˇ Ę€ŒÄ`ĪaˆČfá Dp'x ˜„,@Ú*ûĖ@Ķra Æ9'b2 ÂšĻŠ*´¯@†āÚ < ÔĀSÁSīOĶĐmfbų´p~ ˙„˙č/īA7ļ‚ozë˙]=´›Ē_H8A{i>ūU˙ĨÚŪ‚ î‚ í¤˙ûuûi:Z_M¤ūé{é?ū—ū“ö“úũú¤õuĨ˙MŖ é{éú\ÂhÂĖ'­îˇŊûj÷ļŽ–—‹¤ß~—ß˙˙á/˙oIŋIŋ_˙ëũ&ׯ! ĮŌz¯|qK˙ŌöŌöũ˙Äq˙´avéčW?~ˆ{moÔ{õũ/˙oJũ+˙öŌûJŌ´’đ°é LŲ×Õoõ˙Ĩö—ū˙ŋ˙û×ēž—…†¸G™ÚˇĒ˙¯ū—ŋíëôŋWûijŪŨZIyĘ€“I Ŗëī īw˙ôŋKÛëúŊūũ-&Ō¯M0‚ 5ŌkIôĢú˙Đ^ßíũëúW˙é>Ú^žŠ„aĨ¯÷„—˙×˙KôŊŊ_Ĩ~˜ļ“÷ÆÚI}āI%é>/˙˙ũ/oö˙Ōü%$¯˙¯iŌKü ƒ .Ģî?˙ø˙Kôŋ˙Kđ“5†ŋŨ-]&¯¯Ļ‚ƒ@aĨ¯×%Ãgã˙OÛũŋđ—æC"O÷ß~é/´ĐAa‡]zŧā˙˙ņĨí˙–ā˜ū—ˇz^"XaĨĒĨŪ ˙üāũûˇ˙ ÷˙m'Ū­ŠKÂAƒA}i>ßķ€ųĀ˙9ŋŌö˙ĮöČkÕ˙õjē^A†Ŋ{_˙ūߡ˙˙ûU?î•ĢčÂmW„6—ĒI>˙˙˙ûĨí÷÷ö ˙˙ēü õõÅ÷z˙Ų íûˇõõļ˙ûĨi$ۗߎé{ŋ˙ŋ˙ˇũ{{ûûoûi{é7ĨđÁZ_úĮ†Wíûkíúöģŋ˙ÕëõāÃ&÷Tχ÷¯Û˙í˙˙Ũ}wūõkÕ7Ĩá†NŨČę’_ŋ^˙ūßļ—ˇŋūßũĢîŠ^ž2 `A;a' mũ˙ß˙ˇ˙í÷[uˇũ=i^¯Ĩᇄ بĸí/§ŌČg}˙ũŧ†‡í/o××lƒw¯[_ô›Ō!ąü0đA6a%ˇ­éūßīû{uˇ_ũ˙Õ__†„b)/Ķzūß˙†˙Šöö×ĩÛ˙WĒ_Kō”˰Ã" ąkOĢz_ˇ˙ė=w˙´ˇ­Ŋ-ēŨ+×ôÁ a„mĨŪ“z_ˇ˙í˙^ÆÚ[imÚöŊRž—ë† “m%ô˜d6>×a˙ûŋģil4ŋŽÂM}7¤ŋta°ÂTŪ 0ÂX ŋa˙ûz]{°ŌÛKnKa„ŋJú_đđX` ;B˜0T!!I°aSM=6ĐĶtĶvA&à &Ü0’lU4ęÚhI„ĶA@d1Ē1 ˆ4b°ÅĪYY WŲ[‚úd%D1ĻĸU†PÂ!•[ˆ4ÖĶô AĘ­}Ŧ<&‚ôSƒ`H„ .. ?īí{† BöūŸühDA‚ ˆ‰PÄGÄCƒ Áƒ Átâ">ĸ#B"@đÕąúÂõ„­ JŒ0~• ”āj }"°b‚ _T@Đ=!ã@Ԑžø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙>A0UžČd<<5 &AžCj€Åk‚Qäx ŗ2ƒLԂĖČ 3!Ģ4ļ@ņxƒ^$.‚¤/BĨˇŊ¤A›ˆ |‹šÎM2 ø†ŋWúĢēAŨmŨvūŌõ˙˙F×ôžŧ˜f?˙ļžģMx_ũ.ŋÄ}ũĩ˙˙˙Kũ˙ũĩ˙˙˙K¯˙˙ô›_˙˙˙˙ɐÔâ6˙¤Ü¸i\”Čjy‰ä Õ=AĸŒ‚vC. Čf ƒ\Č5A)ÔĄ7 ^ aČfÁ܁A w!­Ä.0˙ņ< Á`ƒÉ8 ôÁAuČ(ôĶL0TC <!ûČcE!_˙ô› é… à !„lŽ E2  X*iĐtҞ  ԃT`pށˆ(3ā ƒ@ƒ> `ûaĶáB8:6I­7ú ҎF čÁ°‚ é„lUĒA žûۇ§j’˙Ōč>Œ  ƒ ŌôŸA c7Í,‰†Ōrņ&Č(Ä`V‚ Ŗ'R0‚gN´ÚN–—˙ˇŧBm&’t› ßœŸôēb›Šzn!K‰v— Ŗ=ūöÖ˙˙Ōęč:ZNŋWWøAu]ZŊ6—A÷ūëTēę’˙öŨë˙ĻõzŌé§§[õč÷Vũ´tŋ ¤?Ĩļ“Žŋ˙ú_˙OM¯V?õŖ Ķi] ImĖËúoük˙˙ô˙÷õ÷ũ¯ZôëIn5ņģĒ˙˙ū—˙¯ŋđŊ6ˇLWĒ[ KČd‚?økõ˙˙ûúû$gīéö›¤ĢŅŗ %ä2y›?øû_û˙˙˙ŲÔ ũŌũ}Raácđ˙Ȁ1z˙œO˙˙˙a˙{i7MŨ$ßĐaz ˙įŗií˙˙˙áŋŨ/ÖŨwŌHôžŋöK˙o˙˙¯Á˙ũnž’ŋh}/˙ö!í˙˙˙ä5éũũ>‹ĻŪ—ãéwø`ŋö˙ūë[đŨ&×I[Õ/˙ôŋŊ˜ oû˙ũ~˙ßĶzOt—˙ũ;¯Ĩ˙ˇ˙īûų ˇŨ-}+uR˙ũuģÛŌ˙Û˙ûKJ˙ũ}Ž)&ú¯˙×ĻÛ__ũŋ˙­~ŊbŠÕļôŋū×KŅu˛>ŋû˙iZM¯hēŋ×—˙čŋ†‚aŖļ–Ú÷˙ˇ˙íÔ4Ŧ# éYo /ĒIˇIöÂ\0“ + %°Âō\ ˙ØūÚP †—ÚQLU´î­ŌĨ˙ą !1LTœ4 F°Č1ŦĐ0u$՞Рjm$ā‡Q @a(Ļ!dĒIړ†WÁ(=˙­Ķĩ†ßūÂëũˆPƒ_škzj˙ü0… a ! ‡X!ÁNA!„Đa >#Câ""!ņG˙Ōũ„Ÿ˙üøū—ū—˙×˙úļž=W×X'˙Ģk‚ęŋM ēnĢÔG/ČãĨļ•}ŽÚIz°Á"ƒO ë B„2 ĩV!öą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū JJ™ PX(ĀĀleptonica-1.86.0/prog/fonts/chars-16.pa000066400000000000000000000475671506303110300175450ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR> .ϊ pHYsb&2IDAT™cø˙Ÿah"âB{…#÷íIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR>>Wg– pHYs¸Œ¸ŒĖöģ/2IDAT™cøĪ‚?04Āa# <‡‡‘āc$øœá=Ã8| Ô2…lŌa$4ų—0Rx.6´IENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR>Ûvˇ pHYs¸Œ¸ŒĖöģ/5IDAT™cø˙˙ˇ˙p`hūÁĀĀüˆt3nc†ö? Į‘đy0>ĀpūČ!„ír™ëPúxĒIENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR!>OŒ pHYs¸Œ¸ŒĖöģ/_IDAT•Đą Ā AgF`FƒŽ’•"1 bč(Ží*!–"å‹āŠF1‰†ėbQ´ėb̘uOāŪbœ.ėzv°I4ģÔĄšlCŨÎēBÎ+ë39n*—ū{Ų[Ņt—3w°IENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/IDAT•mĐA ƒ@ Đ/# Ąë‚ā9„/æBčĸĮčU„^dz—“&ĶÖVtķä'$am)ĩÉ120"õ1`Ąđ¤đXš7Ã˙ĄŊ?ÜJeL…“1ŖbĒ´ Ņpƒb­$ƒĄdCvÜ?Ô_rķĻ#nqļ=-Ŗ†Gsq–æíŦaôŅ䘍sŗĐžųG;IENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR3>ŽDY pHYs¸Œ¸ŒĖöģ/ĀIDAT•ĩŅ1ƒ0 P*†Œ9‚{“\…›000r„^Ĩ#W1°uqĨČŽƒDÛš^žd)ūļRpŽŠ8ģ¨%ķ*ĸt1ÆĀŖ8'āNė ø&6ävƒØ˛#Չĩ™ŲÄŨ×îfú§Ú’_8΃Uí ęŒaT§Xw*^$^$'ņļw0i7ÕčÍŠT‘›‡éĸē‘Uđ*.é0$uŠ“Ũ—đ)Ėī(؜T‹•J 9Ȓ7ŠėtšúîĖâōûđ d[[÷üĖIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR/>“Ö? pHYs¸Œ¸ŒĖöģ/ēIDAT•­Đģ Â0ā?X ’7HV`ŧ%R¤dĨ ,âˆ\ZČōq>ƒÄŖåš¯šĮ¯Õ*øF š„WYƒ°DaJīč2 ãĢ nE§†ŧm8aĻ'ÜĖXΤŊML<¤īɐ.XŗĄŠāšuå\Te¤Žē(Ū-Ėn¨+ÄŪt”vN€Á×}MĀ8ˇp>o æ:”tWN58Ü™×Ąį¸…ÃĪ[˙ēPSžIENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR >Ø~ŦŌ pHYs¸Œ¸ŒĖöģ/3IDAT™cø˙ƒ„ūp0ü" (ú`ÁđĄ„üĄ‡?ƒQû†ū ō]‰Oxp3ĸbIENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR> .ϊ pHYs¸Œ¸ŒĖöģ/^IDAT™Îą € „áKĀÅҌą`.+Ö0qí^œĮ#P›|%ŧûA‚/hā^`#8ŖdY`˛ââtGˇuģ›ūiĮßq­׊ļĖi]TÂP“jXōHĨÚ]¨ZÛN˜ĪŪIENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR> .ϊ pHYs¸Œ¸ŒĖöģ/_IDAT™Îą €0 DŅë(ÁŖd´(bFĒĖąeŠ(6rD‰ôJË÷Ab#„X‰LœD!.ĸFԀĐ}VœÜâx|ė˙ŧĮɍoãŋÍ=ģM4@Kĸ&Ë˖*ŧ‰Ü^WGëIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR>0ÖÍ pHYs¸Œ¸ŒĖöģ/XIDAT™cø˙˙â5 ˙Ô0ŧđ‡á87?üÃĀÄ ˙0pūÃđũĮđˆ˙ņö†î@‘Ã@u!ęĪõũcˆY˙#Ų180Ĩ\¤ œž`3IENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR">f(ô pHYs¸Œ¸ŒĖöģ/IDAT•cøhBū“§‰ ĐÎFdž ’uø;hžĄfIENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR >Ø~ŦŌ pHYs¸Œ¸ŒĖöģ/:IDAT™cø˙ƒaĀІ  ˆƒáI€Đ † ôāÃà 0ūÁĐūƒĄ˙ƒÅđ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙Ã@ā `ĖÆô´FŠŠëÉŽTIENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR>>Wg– pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ@}xĄ€lœębķ9L7L‰įIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR>F pHYs¸Œ¸ŒĖöģ/VIDAT•uÄ1 Ā0 Ā0p„B„Rd40# ĸ¸]ū%ŊáZfzûjč\hßĨx;ZĖjʝ^ÚÅDžhՌ)tziy–3ĻLXūô‡Öą:ąTXIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR>˙Đ-: pHYs¸Œ¸ŒĖöģ/tIDAT•­Ī!€0DŅI*Āaëz:Ž…+ ƒp‘rƒĘ Ë.k@’`žų`fƒ„ŲÎ!ÚX”ꄚjDeŠ(L‡˛qëde1Nî/zcQ˛a“Ūؔ•[ė䄒č>. ã!1a—,t^Ņ_š=°Š%ZIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR>ųæ~ pHYs¸Œ¸ŒĖöģ/9IDAT™ÍĪąDÁ§%QšŌ~I 0ÎĀŒL(ØIÃē51ŨĸŠ"[1ũĸļëđfPŖ¤(ĻIENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/ˆIDAT••Ī1 1Đoe#ė{‘…ŊØB‹ŊV …ĨWHnģ)†Œķ•…hįĀŧö˙3S ¤YŅqVNŠ( °ĄD,¨–˛•€ģ5"<>舍„yŗÍi¤0ˇ’Lnd'“ĶŊ‹éęHtûU’ÉN&2;}u4:ÂOšâë~G˙Ë ĄŽŋx–™WIENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/IDAT••Ī= Â@ā'lr„…ŊȂ[ˆ7ČrW,Ōé ļ[n1d2°’€Í7Íü=¨Ē`CōŽÁAP`5{Dä.Lú xkvøŦ‡‘<ŋ¨–PɑHe"#鍇ŨЋm6ŦyHœÍ­!MeFEŅāJÎdĐš%ũŠžqãņÔŨ œˆgŦ}čYŋÖž؝7yIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR>û%ũ pHYs¸Œ¸ŒĖöģ/jIDAT••Ī1 €0 МL=™öÁĢtëč ĨSĄ$æZŠ‹˜á‘å“|Ļ‘ē*xn¸)ŧ4Ēo; p‚`VØØ”jāF7Čā āHĮ ž˙}€2n"‰ˆīŌ?y‰šŅaVīÛVIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/sIDAT••Īą €@DŅ …kĀR„kĖ@°K°ÅĀ6Γ –w1PA“Í~X\Ŧ@ņÍf“D§ ™Ō ļJe”X}ŖQ‹ÆģaJzÂ7ōž,”Tĸ?‘ ĨÆĖ(˜¸Fļ‚gxAÄãéßõ<ŧ LņĢIENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR>˙Đ-: pHYs¸Œ¸ŒĖöģ/‰IDAT••Ī1!…ág,¤Ûv;ŽAįĩļbáĩ {Ž@I1߈k´1ąųBAfūÁŖáQŠ#‘¯~!͒ęIŅ/ģrWŌą¤]Ē'å‰Mo˛p^Ŧ b€CXŌ øJF38M8Oún/ âD ō•Ûk[ÚÆĒĒ‘™šĐ‹‚ũ>úO„Ōē÷ D]"IENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/{IDAT•ĨÎ1 ƒ@„áWl„Ŋ@`/؋ RXz%Á‹(šĀÚmņØÉ›k°vН~ ōGPåēĮI/č%OŖ:/IĐÁ(Ž™WŲɗŦd"3 $•hj”ŅČƒ6˛“•|ČD:Ŗ:ÁP'…äÔØFc9yŖ›üâZÂÛAĘÆPIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR>˙Đ-: pHYs¸Œ¸ŒĖöģ/˜IDAT••Ī!Ã0Ā­bj–o˜å[AM¤‚Â~)•?rųáË×ģT•Z)¤d€eīŽĄĒÄ2čˆ6ŦDd—2Ŗ(ÄŲĩÆ7Ī6­ Ûƒ2B†(]&ˆ‡…Â:z/ē8vl/xE´ĸÕã%X^ Č6 7­ĀŨéĩ>Ôā—Ŗ“,€Ž­[0e/?z§ŸO˙Ë ÷Öą˜†­ÍēIENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR>į–9 pHYs¸Œ¸ŒĖöģ/IDAT••ĪM ƒ0Äņ)ÜHŊ@¨ x1!J/Ļ=Iސå[<ō:ņŠģn~ۙ?ĖLņCČÜ(Jŋ*dĖr”€lâ‘L=6ĶŽ”o+îšÜy”“ų@5 3úCÆĶAđrP„Ž78dvā‰ė’w&’ęņ­˛TxÜJK´vČX‹"Y8WZ’†Ę-ú_ž“^ˇčdŒˇhIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR=¸Ã8 pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ@>fhdhB nd8LÕÛ5$jAÎIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDR =^ęŪ| pHYs¸Œ¸ŒĖöģ/FIDAT™cø˙ƒ ôO‚áà b€" (Hš9ū5‚õ‚L“# úPÁđáà 0Ŗö ũ?äĄzŪueˇPû|"IENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR!= ‹=" pHYs¸Œ¸ŒĖöģ/oIDAT•­Đą Ā ĀG”ŒQ2Z<Ŗ0%"ņ?ĘP\ƒí7āõc8/čM :kjĸvģėę‘ÖLív'īŅ"-™âĄA)IF Y.Õ':‚6ņ×/öü•ĩr=ŒöH' {XûíŋŪrâg>˛öîÁ+}IENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR"=āŧ†! pHYs¸Œ¸ŒĖöģ/IDAT•cø‰ ͍Dhúíˡ^”IENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR"=āŧ†! pHYs¸Œ¸ŒĖöģ/nIDAT•­Đą Ā @# —ŒĀ(d3Q’‘ø%YŠkŒ_/Ëm¯ĘY3TŠĐ’` px¸„[60m`—d¤ÕģÂé˜/—|‘6Zāüúī2g2ŗ+ŦZĮˇÃîŗģíhOM'/ķúû)gKIENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR=nfĪ] pHYs¸Œ¸ŒĖöģ/wIDAT™}ÎŊ ƒ0āHNMėÍĸ()R2ŖÄ"Áe ë^žAÄEН¸Ķ쐆U†'ziąD‡!ÕM„ÕUŲ_7ŠÅ–ĩ`ęÁˇã|i÷,wyH'gŨĘBÁ°õ9•ž4c§MjŠ\¯ûŽų˙>ęYŽ‘m¸üIENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR0=Ãį×ô pHYs¸Œ¸ŒĖöģ/ĐIDAT•ĨĐ1n!ĐŋrAŽ@‰Ģä$ÁÖ[æJD\šÔcÉňŸaŊ–ĸČ]h^Ìæpø‹,;@4:ā q}1rb6.ö)‚ŽÔ€áÉá҃M{h26Čd…Ė•Íūąá‹ųÅ5^ž'ÃŨŧ`ë^îčDƒ—ø›e'IĐ&ŊE)ķIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR+=Š­ë pHYs¸Œ¸ŒĖöģ/‹IDAT•­Đą C! ĐC”Œ›°Ę߲Ŗ0%Âą Š’(]ž›WXÖY’ixŅ‘Ā0@5OBÍÔŪŽˆe‰fÄtDëÂđJ›¤´CVøZę*ŋxlĖ⃝ ķÄ!)í”î7NV™FYāÃÂZÜDąÔ/H˜ą;[€“+ō[­7đĪä#)ü/ ĄIENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%ŧĘ pHYs¸Œ¸ŒĖöģ/sIDAT•­ĐĄĀ Đp$#0JGƒnÆ(ŒP‰āBS>p­kĖÉ˙ÔĮ$Ú}FõbĨž­Ø\o$˛“m„%ĀËÃę`›˛…ŨlŌ4}˜égĶĒŪ97õ?ģĘ[ŽĻy5˙ķė%Ą'6č­¸Ņ#Q‹Ąë˙goÕä.ŧļŊ‹qIENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR%=`X pHYs¸Œ¸ŒĖöģ/PIDAT•cø?I‒Āä?ö˙$@ä9/ųų/ųH200ĸ‘ė˙ÂeqëÅoī˙Hä$ōŲ&ažn@"1C‰,īMā.2áōØIENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR#=~í pHYs¸Œ¸ŒĖöģ/GIDAT•cøIP`ø&˙ą˙˙&˙AMĀCūÄK~’ Œh$û˙‡pYÜzņÛK,É "˙0CNb†Y$VÆá…Uq‘PIENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR/=B ‘ pHYs¸Œ¸ŒĖöģ/IDAT•­Đąà ĐīP¸3„MÂf/’Y4 #PRčŦH˛Īg÷Ļy Üįˆ 'ҍĀÂHB ĘĒ• ŪØfåŽÎHNĪN;(O =¨ŪXoL %/K°ÔTũŸĐAvZēĸ1ī‡'GPœš| Ōl%ųĀ’ƒ-HȗYāg‚UÁĩüIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR5=%ΰ pHYs¸Œ¸ŒĖöģ/@IDAT•cø?Điū˙ púķ˙˙˙0ücJ3ä4lô@ģ  ŋ˙Āđƒ…#zøâŠ*Ņ˙L6Ԓ˛Z_IENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR=…Qt^ pHYs¸Œ¸ŒĖöģ/#IDAT™cø˙˙ ÃĀæ ˙Ø1ēäF@öjÁ~3đIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR=¤¤c pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙˙ ``ã˙ @~ãÂÍh¸Šų˙0ÔË˙aŗ˙ÃĀPÄ@?2ū˙ߐРF¤;IENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR/=B ‘ pHYs¸Œ¸ŒĖöģ/›IDAT•ĨĐą à ĐCDĻ „MâÍbG^Œl”č˙ČwJ)]hž„-ūŋƒŸĮđ Ŋ.ftß –Ü‘ˆe2 +iŠNž"Ëd2VŌ7ԜŧÄ!Y šd]"čô'ôĘŽ7Ģ&4Íëš>ĸĻím­ģkųĒ(MÁēbލ˜AĄņ`¸ÃÎ^nŦ§^YVĀĪZ˙ã Tb Ķ_5÷IENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR&=éW&[ pHYs¸Œ¸ŒĖöģ/8IDAT•cøI~8ų‡$ō}č“Āää(ųHļ0€|ĪÂđL>“˜ĄD #ķāÕXsIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR==6\D pHYs¸Œ¸ŒĖöģ/¸IDAT(‘­Ņ=‚@†áAąÛ#ėQÖŖxK ãŌQr% אpˆÍ>gvų ÆÎiæ)'īâ8úe˛é12\*HyOÉN@[ôgF`€NpaÔhWF €Rpc¨žC î RŒFđXĀ[ŨĀ! _ŅGTv˜ŅFŧL7ŖŽču3ŖˆpǜĄ"|Ļ''ŒŗgĀ LČw0x8'B‡ŠhĮ}˙xÜŋņŪdܤH!kIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR5=%ΰ pHYs¸Œ¸ŒĖöģ/’IDAT•­Ņą  …á#”Ä pí,ŒĖä0nÂØ]A@ä‰h+Å}ÉU—ęķ1}KvN"YufĒjødjKZŅÃŖƒ'ņbE¯Ūô$Æe€ÉÃė`ą—V ĮeĶNb ģÉÃė`ąÍnÕ°)ØIŒwņ “˜°¨]밎MŊ‹ŽnÎėßø“/?íQbįãIIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%ŧĘ pHYs¸Œ¸ŒĖöģ/ŖIDAT•­Ņą Ä …á‡R¤d„ŒÂh8ēÅ…(] |ĪpĘ%õÍ× ˙Āæ|-a:€ÃmĀîÖ¤Á3dēņfŒŨŦ‚ÍZčaĻģ %ŗîfŗą ǍĄå.2Į ·¸ nųŨšh‘Kš{Ōŧ,wųū’–Õå^•{îÛâRigee—Î>ÕŲ-ÛË-qŦžŸž äŲÛķūęuË9cw‰čIENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR%=`X pHYs¸Œ¸ŒĖöģ/`IDAT•ŊĐ!€0ĀM‡Ãö)8žUY~ÆSúä‰KļM  † 81b“]qđķŊ *G„‰įE|TGjMĐōÆžnĩ-Gš•Ž4 Ũ–šøoÔĒĀtųüŌ'ÎWäNm’“IENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%ŧĘ pHYs¸Œ¸ŒĖöģ/ČIDAT•ĨŅÁ ƒ0ĀĩxđL ”Biž(!Ĩ€´āüôŨfĪF ä$4B›ŨûeøēĨŽKX9,kKĄ‘ČrŌĘÕā3YÃ~#ëÍв͆ē’{˜IŸ %L†M2äIŦo¸_ÄĮn˙Ē~´ŗw™¯ö˙}Håaä•Ģ(§+o=lĘŋ̇Ļ>šzŲÕOUOރKô†Ėg¸->ú<úmЛčŨĻŅŋ¯Ãv´ë–ŖĨĄĩr´"\ŋôŋ)ŌĐ‚}ËIENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR'=•Me pHYs¸Œ¸ŒĖöģ/5IDAT•cø˙ItĀÄĀ˙Ÿņ˙#†ų@ōœdÆCū’˙†(É"!č;œÄ%˛HkīĶõ=ÄrIENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR2=ĮÉ pHYs¸Œ¸ŒĖöģ/^IDAT•åŅą Ā @G”ŒĀ(Œö#QR œ7(RĨL—/|…;?8ĪđČ3/[ G2ôču6Œ:ö›aIˇËÍ-Ë&}ÉĒ=B“–ŧ’@ˆ˛¯…Iāíyp/;āĒIENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR.=ú€f¯ pHYs¸Œ¸ŒĖöģ/•IDAT•Đą Ã0ĐoT¨Ô-Đb9UJ¯dHá5ŧ€ÜŠøčĸ/YØUšæuw Ķ/DDÕņFÁfîÍɃø@I{å“;`Ģŧ3#°T^™˜ß0™ÕÁ’\r‚=`!Zö‚‰›(X’•Ŋ  P[a¨<—+cežŽŦļCpĸīĐy÷Ožƒl0“RFsIENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRA=Úl9R pHYs¸Œ¸ŒĖöģ/ĘIDAT(‘ĩŅą Â0PG.\z âaX&°SQ˛R$ŠŦáˆLįÂōį닁€RrÕ+îKwúëxą•iĸ*ˆ:(Ŧ Ģ ŧˆEē)ŗŌFŠâ$¤(ô)ZJÅ6=ېĢVQ¸ČŽåģfT%1OHõf‰ËäV]ƒ‹ßŌÁ>Ē˜Č iaŲhîĢËįŽ)ģŦo/ÍM‰žë*Ŧp"]›Î(˛ ĢŽ$ŨtS%0˛Ô§&Û¤ģŌFE÷ĢØ”- {Úéü/z0˜ÎīË'OIENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR*=ķkÆÕ pHYs¸Œ¸ŒĖöģ/ŗIDAT•­Đ1!ĐA ėhí¸Č&ÜLH,öX’lá5ÖPRÆ?ƒĩ–‚WÍđųÄr Ŋ¸*ÕËMŲŊšj–ŲĀÃ#`€¸ ™{%ĩ¤TYļGĨ†ûdšŋMVĄ;/ ”CÔ,ô$)y,鋸IÖq>Îe§Éâô…Åę{gĨ˛™pĮn°qNJVäžw|lxä õČ ´ˆÜh)qˇ…öÄà&4GDfōSë?xĪ)>uø*rIENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR+=Š­ë pHYs¸Œ¸ŒĖöģ/‰IDAT•ÅĐą Ã0 Ā7T¸ÔĘ&Z%›Č]ĘŦäĀEÖ ‘”N… æE;@Ü0›kˆ‚Đ>‚’ DÕ ¨æ āÉB„+ŖQÉCМęBÕSˆ'Ķ—ȜZ$’ĒK"9–^›ÃģSÂÚŠūeŒĪNÛqw;Đcؘĸ1t [{~8ŧõ/|ō/UDČGĮIENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR*=ķkÆÕ pHYs¸Œ¸ŒĖöģ/ŽIDAT•ĨĐą Ã0 DŅ3\¸ÔÅÚLMŖxĨ“C īØÄAē°y•žÂ8 O:|ōŖ˜Ąá2›Ë'÷Úđ2›č)ØÅšĢŲQ‹@|´ˆÜĢ[DÎ]´CÔÄē!!IôĀ#Ä#ĸˆp €‘™ÁŲÄqš3!ūēgÔ8ü<ëŧĶ[ŽČž¤IENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR=ĩŨe pHYs¸Œ¸ŒĖöģ/IDAT™ch`€‚††Æ?ƒ5ƒĻ8Б`C+RÛĖâ*IENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR>F pHYs¸Œ¸ŒĖöģ/TIDAT•mÄ1 Ā0 Ā0p„B„Rd40# Ŧ8ĶŋdŠ7\ËLo”Ym1g{ĸĨĶQ ͚ąÅœíYЁNG)LkÆķÚūPŧč<(ķŋ.É6ׄ/ô)IENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒĖöģ/&IDAT™c`€? ˙€ˆ…á?&b ;ÂpÃ?°ķ~Ā\û˙#ĶCŅžųÜŲIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:ŖQ“ pHYs¸Œ¸ŒĖöģ/oIDAT•ŨÎą Ä ŅÍ)R(•¨ Ņąö7‘ĨĢā&xņ@OÄĮĖyôæ8:ŗķĘfmfޝ—éēéG"ö1ĖHŦ°Ė¸1ã6ĶöÄH2%GtŠUĘD“‘ĨJŠN„~<˙76ÚnĄŗ°&IENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:ŖQ“ pHYs¸Œ¸ŒĖöģ/IDAT•cø Ŗ$%$& Ā4•zˆŖÁIENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR CoÂ˛Í pHYs¸Œ¸ŒĖöģ/5IDAT™cø˙ƒ„0üį`ø/ÁđO‚áÃ Ē`øF~€Đ0j#Æ ü]ƒ6#yæž ŌIENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDRCHl3% pHYs¸Œ¸ŒĖöģ/gIDAT•ĩĪ1 €0 Đ_:8öõ˜ŨŦ7ëQ"Ž˙Ԙ ˆ¸ģ˛>Ä/í&øŒš  jđŨ(€$ƒų§§OĐÉÛÁŦã ĸIENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>VŽ pHYs¸Œ¸ŒĖöģ/tIDAT•ĩĐ1@@…á' ĨčbŨÄUœ„Ŋ+I\dÜ@šB2ŪŽQ)˜âkį΃ōjŧÄM÷ąR{‘Đ1-ŅŧÍÔ6p‰\ĒrjtÆĨ{cõtnn† NÁQü¯žÆj(ļŽZ°y"ē2‹+[ũëMõü‹ČŒIENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRCA‡“_ pHYs¸Œ¸ŒĖöģ/^IDAT•ĩĪ1€ DŅo,(9’GãÅđ&xJ Â:Ĩĩ"Ųŧd‹ÍĖbf1”Y$@ TáZ2äĩ@2q6Ģ/{;{˜˙™:[#tâú‘‘Ŋ)×)HŖ VŅyúŽEĮÛS uIENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR%C3Hņé pHYs¸Œ¸ŒĖöģ/nIDAT•ĩĐ1€ ĐO9‚GņhBŧŪo€kLH\´ÃšĻŋ)Ģ€ėĒsg Z­˜!FČ~—h*-ķAŗN&uí\/4AõˇĖŠš5=…ũl7Z`=¯‚ķ@Ã(ÆéúŌ˙žÃCÎ{ŨXßIENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDRC§ŽX pHYs¸Œ¸ŒĖöģ/kIDAT•ĩĪą €0…á_,,uƒŦ ˛R60âޤ›d„+SHÎ! ØæŠ¯xđāĒ*ôAL!ŒBžƒ\ôČ*ž¨bš4-/ûË ã\¤”L˙*[%4Îĩbô NŲ–6–žĖPWÍ}ž~l_ÖāŦ˛í^IENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRC[ģsŅ pHYs¸Œ¸ŒĖöģ/GIDAT•cø˙˙Ã˙ @Šá˙ ~ÄĮ0üīŠķ˙`ø'Á øüA‚á3ąęÉÅ€˜‚Á~  ”gVŧŽ9IENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR"CŅ”ę pHYs¸Œ¸ŒĖöģ/œIDAT•ŊĐ1Â0 Đ_1tėz”ôf ęA¸Š{sǘo#@Bb%Ã"ĮūœGđ'mÛDĮÚč•ĀĒbƒē=]‡÷ˇ×ßAKō¤*;kšS[vzbɉ5ŧE†QÂŗ†=ĩTķ^%Ŋđ˜XÃ||›že0ĄšˇŲ\6ėîúrūR>‚KĘĘ=öō92˜Uc—ž*ķđg<õäĐā?IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR&CØJę pHYs¸Œ¸ŒĖöģ/SIDAT•cøūķƒČ`’‰üCeō€=ˆd`’| Ė@’‡HrÔ1IÆ˙ ’ųd˙ ¤ B> /ųHÚ000Ô?`€’ĐPĸ ˙ŏBÄæIENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDRCRPĶĢ pHYs¸Œ¸ŒĖöģ/7IDAT•cø˙ŋ†˙Ų70ü‘o`øÁ„ü?ö58q?PP}ƒôūĄ!™ŨF áČ!BúIENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒĖöģ/>IDAT™cø˙‡Šzūŗ0üc€" $ōzĀđŸáĶą@Ņ? â#†?6 ôŖ†AáCķ­ąQ.6ļIENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR$C܊š× pHYs¸Œ¸ŒĖöģ/€IDAT•ĩĐÁ € Đx02+¸+šÜ\ËÄEpƒM$*˙ãÁ”à )Ĩm*W9*—ƒJãËüĩË#DN ŗ‡û5Āų+aī`7Â6@á]<#õÕ2ŗá/C#]X3Õúĩ—c_v?Îfô™m/sJ9!Q¤,éPyvõ¯7–íūj|EáyIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRCRPĶĢ pHYs¸Œ¸ŒĖöģ/"IDAT•cø˙ŋá?à n€â?C˙bûr ē[uPOdšIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR9Cڐ pHYs¸Œ¸ŒĖöģ/kIDAT(‘ÕŅą €0 ĀG)\†’ ’•)Ū„U2JFH™"Â8„–žēâ-Yzčˆāģ8Rld¨ .“+(#PB”yw”Ø:îįR„ŌáUbõũ\E$m˙€=Ø@ =eā+ëŧâyûœASÕAIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR&CØJę pHYs¸Œ¸ŒĖöģ/NIDAT•cøčDö°˙Ãđ‡Ÿũ3äa`üÃđƒŖŽ(ÎøD2˙o’ė˙ÔUBÉô%I†ú P’ŽĄEˆéĄe‚IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR CÕa:­ pHYs¸Œ¸ŒĖöģ/fIDAT•ĩĪą Ā DŅC”ŒĀ(ŒˆÅ`“Œ@I|ąJ—¯ŗž ęāÃ)„øąâ˜iz .‡‡bŅɍA%ËG†=´ĖĄŖ 2YŅ6‰ÚˆÔZíúĨ¸™ ē6įé &áBđŅ'IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR$C܊š× pHYs¸Œ¸ŒĖöģ/{IDAT•ŊÎą ƒPP#Š_ōĨ4(6ČJL1külāō įŽ(ĸˆ”.\ņĒŗlȏ8ɲÜ+HŽhŨ Øß1Á.šGXRu;1,2nŋÍ_Ž{öítČXĸĘhy0zWˇUįâ;ßl𠇤ũ˙OÖzĄør4ûpÎįÔ§IENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>VŽ pHYs¸Œ¸ŒĖöģ/gIDAT•ŊÎ1€ …áG=‚ņ$ /†7)7`ĤĄļL&,.ÚᛚŧĸGøIv—JØÔ §†ę =˛Ú’¨UL–á9<&ũ Ũäū4u5uZ›Š5 ¨ŒÅÚŊÕÚŋČw2Ė Ü/Ķų‚ŖQûœIENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRCŽEøa pHYs¸Œ¸ŒĖöģ/¨‰ŗĖŽWO¯Ųã$öūņœ b/j’)ŽÉ¸lãÕĄGU´¨šŲ6Ģ…ŋvyWôkŲãQlÖūū˙Ų7YĒ—å,ÚPųIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR CÕa:­ pHYs¸Œ¸ŒĖöģ/yIDAT•ĩĪą ! ĀE„”@)”p%ҎEvm ]ūŒŲŋūÎÁ–í•a,ŧ‚4@ĩ€^,CŠė|*N"švƒFápø’ņ~“y‘•BÄŲŧˇ“÷œ'’{O'y´L­‹M˜æ÷°ė$;@4Å;˙:? âŖ7Ū̧IENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>VŽ pHYs¸Œ¸ŒĖöģ/”IDAT•ŊĪą Â0ĐC.=ÂŒĀY…˜ĀF ĀJ–(\˛ÂĄ,ˆÆ‘"_|_@"ā¯úŌ×'mú<Ö‰v•ˆ’×x"aĄõ {ĄÂz‡YhöooMgV§üQ÷ڙÕŧÂËžĻŲvS1e‚įÕáfqĢmėĮĘģ­xZāGø‚=Ėæfo&†æ=/åđ:aIENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDRCŖ[ˆ& pHYs¸Œ¸ŒĖöģ/pIDAT•ĩĪą Ã@PÜŧ€Á‹ną€¯Č`7ʇÜūōŠÃŠ~āæuBH6܂'žāĀ ŪŦŽ¯8iģ(Ī 9Ä5Š6wę"|–D9:9ŠqĸÍô?uĄÁ7a‰” œ€˜ņãļĶ_īmâ-Ė9ŋĄIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒĖöģ/IIDAT™cø˙‡á?Æ?6 ?€¨†á%čÃ? ˙0ūÃĀ˙‡ĄũÃA°PœcŽúvН˙xū?`9@d¨z<–IENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRC“×™ pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ@kđ0­Ņ;-°9IENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRCk7bđ pHYs¸Œ¸ŒĖöģ/DIDAT™cø˙áđ?†˙>ԁĐ ˛#ũ"9†r ˙Ųū`øßÆđ$ō,E‰ÉįŨyđƒü?†˙č\ôZ6Mf[KIENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:ŖQ“ pHYs¸Œ¸ŒĖöģ/KIDAT•ÍÎą €0 Ņ“R¤ô…Ņøcb2…%V Ę¯>ōMŦlX†č%8{ÍÅĶë-Ž KUŅŌíslâ\āü—ĒیYfIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-16.ps000066400000000000000000000006241506303110300175460ustar00rootroot00000000000000%!PS % chars-16.ps /inch {72 mul} def /Palatino-Roman 16 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-16.tif000066400000000000000000000100561506303110300177060ustar00rootroot00000000000000II*p& $˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü†IĮD2C8ä3ŽC$ ī xkŲōĐ@đl´ĶōƒÅŲ Ë"^Aŗ¨‚ŋI6CiŌ Õ2nCV„5hA’e( ØäL†<†TČjĪUęÁĄ5I¸< aA0\q‚=wԆhhÛ“¤›T‚8l ÂiaŅà #„ŋX@Ō Ēz؁ëAÂϟ„ ƒa˙\#‘vŌzFßI´ũ&ÁSGÍŽZN“ū‚íĒN’M§I-„}g†áũI7WõúX¤ž–Ķúp‚áĐNŗ¤ĻÃEu~ēé/Ļ×ú{¤–ā´ž›E×AUSi_ī¯ëŌé+aĩë…Ķ×úZūūũkūŊuaŠ'i+cíî—ĨŌé_úõ˙ZŌáūĩ˙ZK˙˙×ũ}*l:_īZ^–ŋŋ×˙ũikŠģ×˙Ōôēõ˙¯ņõēKÂ3¯ņ¯ũnģßrŋĒ֒lõ-ŧ}/Hj×üG÷Ut’đ•˙úKęŊ÷ŨVũ>’ũUy/ĒaĨ˙ûĒÄ%ļ¯˙õđ@Õm+üęȗ{iUnÂŊ/Õ*ô“ -zöûIZņ˙úA%ÅŅĶ ˙ō… BŦ…]˙ô’öĄV)ŋúˆ0ÂPš˙ĨúipƒŽxo Ķ_ՒāȓU¸/ũ$ ׄMXm¯ÖÃPŽrŋ/ęë ÜLJí}pÃH‡ôŦÁ˙Ĩ.6—Zæ #ioāŪi7é~ĸ\[ĻŌA؅˙ÔÕ Ž7N˙˙Đnˇ­R×äĨÛŌ ­ūAdLƒ"tŋK_Û¤ƒm%ū$­[˙Kũ&ëëUpaíôŨ7˙˙ĨŽûÕ6?û¤ŋuúĨ֓Ą!ƒgŌWވŦ‰{ôęßäëũ/ũk^ŋŌ[Ũ/Å'ôĩū•ë˙ö˙ûôˇ¯__ũ/ÛKôĩŌĸ]úũ}ĘūÛIëúŌ!Ļ?ī×ĨŌũ%üĨũ/PõŌô–ŋ˙íZûúMĨé_^šÃĮúItÛūCj;­.ļũWT°Ÿ˙ļļÃü>%Ž•ū“ŌMŌ]úé%Õ°ŪĩOzŌ!‰éwWũ ŋīKul ČŖ˙ĒWčmĨ“j–Ŋ^’WL0‡ũ{ĨŦ4ŽÂMŌéˇĨ‡ĨļbmĻŌ×I´k “°“im¤]/(ā‚H1  ×ôûiĖąD4Ä1 °’L4Amx1† „˙ĩą_ „Ä,1D2įˆ‰´$!‚Ž…!H0„A‚ ! C$ÜD]kū´ŊĩKūŠ/m%ũúKģI/ŌĄŪ’ÛHvŌÛKvą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü€ĀY\ 49Á—B ßR€PÁ´2†ą2CjŽ@’ü‚ØkĖ‚Ē!ސ†ĐBČ5 `PƒZ‚A0 †Ā‚‚ ˆ Ö 2`‚*DA0 „@4Ē †‚‚CzČcBĢ ž„™ķ!ƒËâ 30<<2Éø0Č¨fh?˙õŧp`ƒƒ˙Ž ö— „Čm$hAēB5P`#0yķ bd2æC.d2揆Y˜*9˜d3q “‘h… ƒIȧG„Ņ ” cš€@Í<†ĖŅĀÎëûĐ@՟Đ vƒg„Īđ´ĶM5 §Iļ‚p@ØA ‚Đ@ķa·´ĶTÕŅôH&l/›&đaۃa î áđč ˙ú]nÚ7ļ“Mnû~¸z đ’ôm~č'ÃI¯ũ/[Ōom&÷I˙ūŸí'KūÚí¤ÖßúO˙ĨßzMî“{i}~˙tÚˇZ_ļnũ/oũ/˙KÖô›í&˙˙ûJÕ^­%KŌŌtawKßũ/˙ w0ŗ é>é>é˙ūÚN–—î‚oŋ¯oũ/˙K˜U÷éŋĻ˙ũē{­&ūŧu´ŋ_oW˙Ōû¯o[õŋ_˙×FoŌ×Čdä~Ÿ¯ūŋũîŋ}?Ģū#ŋö­¤Ũ ^‘æÖúQīÔôžëÛ×ú˙ūę×ôRđ°éA3wOõŋ×ū—ēûß˙ęôôŨZIxX5¤yŋīI×˙KîŊŊ_Ĩ}+ũēûõz¯ xX!—aXu„¤ÚO˙ä|‚ī˙é{¯ŋ^ĩ˙ūēZžL ƒ RJ?Ŋ/oūŋôžëīīŽô¯÷ĢŪ›§TžÔA‡^ú^‚¯˙˙ôŊ˙o˙ū˜Ūë~“t—ö ÃKJŊđ’˙ú˙é}ĨíęúJúP˙×§V;JŊp‚ 4’KÖá‚˙˙˙Ĩīûé~gPVûu˙O¯žDà /úx‡ūēņū‚ûKßũ/ÂLˆĪë­ĶV’_M4ĩ_¸?ã˙Oßû˙ ~b?ŪŽŸmŌKÚh °ÃKĒŌyā˙˙ņĨí˙–GđL?īu×Ŋ/,i~—x7˙ķÁ—ø~ßí˙°_¸a˙¯WVÅW‚CĩôŊŋįķĀ˙ū{¯ˇū?ļChGī^ūëáit—žßûī˙íûuí˙ūŲ}ĩĩôôŧ A‡_¤ˇŋÖû˙û¯˙ũnAMŊ=6¨Úm%đƒk˙OŨ˙˙˙ˇíסŨwöū˙é/KáĢÕ$/_û Ū¯ũŋ×Û˙ũ°˙ēé_Mõöģõ_ŋ_īû~Ũ{{ûûo˙^úŪŋ /ę•˙øãĖŸūßëíú^–˙÷ļēI>—† žßTl3ūõû˙ˇí×ũũũŋî—W¤Ū—†@­ô]R§÷ë˙˙oõö÷˙Û˙ŋßī¯ 2ĸ`‚km-ˇ÷ū˙ūߡ^ßĨŊm˙ēZZ¤úøaá-ļ–•?ž—ß˙ˇúû}ũ¯ū—ßt•éQxA[Ä"vˇÕënûūŪACíסŊo[d Å{ûéWƒ„† kÕžŋ˙ũŊûí.ŌÛū÷JŊ&ôŋ 1&Äi_īK]ŋ˙oø¯}ŋoKuũŠJúüá`ƒDATģKŊ&ôŋo˙ÛũũŊŌÛK˙ēbĢW×đ˜(a‚›iSôŪëŋ˙oúö;K´ļôŊwéŊ/íC ļIoVīĨûūÃŌßöŌÛKnë´ŊŌŊ%ūƒ “m/ÂL0–× ?˙o˙Ũ†–Ú[v–ØVĒ•ôŋ\6‚à VđIƒ”ƒŸ[a­ŨöÚ­ĩî+a Žė%lKô¯ žéÂØ0’Ļ„ Ƅ$5`ÂĒŽ­ÆēiģPÕ¸0’q^ęÚhXxM!1Š+ Â" B„„C@‚ †dˆ R ÔŅ0ƒÔėB!š!ˆD3D0qƒXĀĶMP$ÁËžÕ„Đaz%ÁT)Vŧ˙îŋøaa…¸aa…ũ㈈0B" ę! Ôˆ‹ˆ‡H)†" † ņHDq x+ˆˆ×XF€lÎēú úZô‘‚5°zD ˜= ’ālßPŌ kԊȇ ņ聨n˙G˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ xôō"ÁÁ’ qĘČ –AZČÃ6ČiŲ Kō 3ˁāŠáHˁāŲ2S l<ā“!Ё Rƒbƒ1ā†\‚ÖŪë^ēiú˙V¤¸āĢČÁČų4Č⠝[îŠzC˙¯kë˙˙čâ×ĨĶ^@ĖŖ˙Ģ_öšđŋúŋëˆø_ũ+K˙ëū÷ũ˙ô­˙˙éŋ˙˙ũu˙˙˙Ļ˙˙˙õtŋ˙˙ęāˆjS"ųؐŌü†—ä5)’™ 8!—ü†c‘ųōpJd5čCNæCj„œ†Tâΐjrā†x! ŽāƒkT ņā‰W"š üC˙̈ đ@Á< ` ēä đA„(@Á aAB‚5‚‰ ÎŽ2UĄÁÖ8ã˙ęÂzaBG 4uɞzd †tid3Ąƒ ܄Â8An„ĐČ…FĮF y €f€@Á(0›‚ a/ūŽž˜G ąÂ6 ˜ô˙@ŧ*zh ۃāÖĄ Đ_iĻÂI ÔĀaõhدFɄp‚IÂĢZ6L ŖôAGŖ†Â8lFɤŲū“@ƒQũ8Ry {ĶÛļ“×˙ęôAŌ“ĨrņāËOßKb ˆNÄ'Iˇ@ƒa îŠ>īúĶZ_úWŧBm- é6?>i˙KĻž[Š—æ•Čīm&í]'ZK˙§Ļéë_ôž›ũĶMĶi=6Ŋ?˙úÕĨ֗ūˇūŽ–—ũĨÕu÷õĐ˙÷_ˇMũV˙MM˙íëīú^īēOM¯ØūęčÂi:ZBĢŲž Cúŋé Z˙˙á/˙˙KĢ˙ĢūŌŊ*Ü Ķúˇß˙˙˙A˙{˙ļŊ7Mͤ’[ KÄH Ôõ˙˙˙K˙×˙Ų@5˙Ũucô‚ 4ų €jĶõäâ~ŋâ˙˙_šƒ3÷W_MÖŪ‚› Ōō™Cw˙ũ˙˙˙ėîēļ“ę“ $¯ø˙ü¨Kūy?˙˙ũŋúz÷}&ô’ŧ _˙<{K˙o˙˙¯ÁŋÛ[Vęí$ŸĒ z__ûu˙ˇ˙˙˙†˙ëõŋJ˙ /K˙ũ†˙Û˙˙˙Č6û~—JŨ~­˙Ũū…˙ˇ˙÷õ~ARé7ˇŖÕ/ĮŌôŋđ`ŋö˙˙­ũũj“oI˙îũōáˇ˙o˙ßëō˙ēZŊ-ÚĨ˙˙W{á/ũŋ˙×Û˙õ÷íRH†˙×_[Ō˙Û˙û­/˙öÖ+¤­ē˙˙úmĩõ˙Û˙÷õĩúízØéŊR_ūÂév­ë˙ˇ˙ö•Ķk˙Ŧmi6Å%˙öŒ- ›mXdô˙ö˙ũē´kÚVHvŅ~ÖŌúU˙ļ\4˜d8ė0–à rŦ2ŋė?˙m+ CÚ˙ià }i6Ō˙üW › Ä+cXkkĢļēÛiCA1 [IŠbˇõoH˙jNĖ!LmIąĪSdŽPk ōVä˛YĢ”šÂƔB dO ŠŠ@f§hƒĐ˙öM4à o˙auūÄ)ä˜_Ķ[×N×˙††„ hC â#‹#†@,ÃXƒ !üG~„DDB6ņG¯đ‚˙ūëũ'ũČ(—˙˙éuôūŸ˙­Ĩã×õø__VŌČ=4Ģé´ž˙ԁā×PątĢŌÛI/ f Oö—öÛ %ņá†D w AĨ†!12ÂÁšāŦĩˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā@Îwwh&(ĀĀleptonica-1.86.0/prog/fonts/chars-18.pa000066400000000000000000000517211506303110300175320ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRFéĒų pHYsb&2IDAT•cø˙˙Ã(ÆĀéŋõĪ„UIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR F6äƒ pHYs¸Œ¸ŒĖöģ/]„2]‡Ô!ĶB3Q™>ĒŨ›Ã–×åegöfm6B|ĄĩŽÔÎSĨ…‡‹UéJŋ–\;/ŸŪŸu?ĐĨʤ5IENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR9F^< pHYs¸Œ¸ŒĖöģ/ÃIDAT(‘ŊŅą à PRšôa‘H^,‘\¸ôJA^ÃČ āŽqųp–‹ÔĄz ĮũĪK]Ą ,AVÉzÂŖC,ˇ&bĈpÄ$A[A÷ĨÁÜ@_0ÁI >qBZÔ×;ÂĸuŠ5OŊW$eÜJ Nzbi0ãm¨žB'Ũq ōŒ=_ĖŠõ‚ *,ą7Ø,”œYrVâHÖOã˛”hF"ŨKgYJVšā8ņįw˙wĮÆmHœéIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR5FD+ᲠpHYs¸Œ¸ŒĖöģ/ČIDAT(‘ĩŅ1n! Đ?ĸ`;ŽĀ5RDškmŌäXŒö"ė (]Œp>˜)ĸMģ4OÆß:ā՚ĖM„i_žw?•nÖåSÍãÅđ×~iīį>-˛liiyęąt˰Œfc™Öq?ÛDaŋyʧז~ĐžK­o*´*χæË4üÖ˛›5J°*,}ĶĄ8ķܞĶ>Ũ¸°‡™=åK ų2I讍Q"Ėáĩ€§9uS dææ0ąâ`÷;÷ÂNøīßŪę/?cuŪĢT)~IENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDRFÔ8˜} pHYs¸Œ¸ŒĖöģ/=IDAT™cø˙‡„0üg`øD,PôƒŒd@čƒ Ã‡zđ‡áᆃ˙ah˙ÃĀ˙‡a?Dû BÆZ}“R ]IENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRFéĒų pHYs¸Œ¸ŒĖöģ/pIDAT•ĨĐą €0…á KGČ(ē™H ×ēā"Š ¤LržķąŗøiÂûC"LŌ&’J$gÆũ€ "ô005¨Á”‘)Ģ™iWbØ%X>t?D÷~39–g‡nĘNˇĒ:ÚöŦE›dõÎĶ›ĩŊÜqãž•ËĪ3lIENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRFéĒų pHYs¸Œ¸ŒĖöģ/lIDAT•ĨĐą €0 @K”!ŖĀfQDÁŦb”E`ƒĐĨ@„ˇōt×Ú˙/ĩĒ,ā`†;dTĘ r¯ršĻöĐÁ‘VPÚĖø–üđqs{üUæˆĖ61Ģaöˡ.ÖŠ„Öķ`įÄ °Å Ģ–{ÆY”IENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDRFūˆiŌ pHYs¸Œ¸ŒĖöģ/`IDAT•ÍÍÁ €0ĐÄAœE¤ŽåÍŖ#¨|oĨ1*¨#xx>!$ņØ$ĐĒËhƒ´F¸™ĀBô5aeÆî#t#•Éúæî8)Ôīd˛sīŨäúų÷_JČš?V‰x?IENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR&Fˆ˛ÛY pHYs¸Œ¸ŒĖöģ/IDAT•cøhOļĶ”Ähm/Œ¤ič˜¨8ˆ4^LāIENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRF;úķC pHYs¸Œ¸ŒĖöģ/=IDAT™cø˙a°  ˙ūÃbcøÃB?ä@čƒÇ:zđá 5˙ch˙ĮĀ˙a?›š|Î*IENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDRFāAYa pHYs¸Œ¸ŒĖöģ/IDAT•cø˙˙Ã`Ā˜Œ€xŨkđÃĮ´ <IENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR F6äƒ pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ0xĐÁ††dĐ$Å]ßaE{ČIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR F…ŦĢ pHYs¸Œ¸ŒĖöģ/yIDAT•uĐą Å CŅt”ŒĀ(ŒFAÁ\ˆE`ƒ”(‰īĶŠž%ŸÚōq+‡Úa@… 8đâúbQL#‰Ķ¸_: ¨Đ Cˇņâ2‚XFĶHâü`s‡d(^\Fˈbéå4xŖÃ€ ōĻ€˙ģî?„ëôo‚fIMIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnĀ pHYs¸Œ¸ŒĖöģ/„IDAT•ĩĐąà …áįŖ ôŒÂhˆs‘ĩđe˛AJ ERLrvP|%§÷ƒåN6§V¨„HžBmc÷„–†øLėDV+s&<Ė]ž1Ë4›ÛG|­€û“t¸˜ųėûĒ}ZĻws“Eéđ&#ëŪ8¤@ ]køĻe€$•`­Šģ–ü/§Eõ˙Ä,IIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDRFú}šī pHYs¸Œ¸ŒĖöģ/EIDAT•cø˙˙˙$â_=ø"€ˆ ņH| @‚$Á"äĀÕ Yâ€ũ†ã ü  zOúgØ0>|d|IENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR"FY{# pHYs¸Œ¸ŒĖöģ/IDAT•­Đą Ã0 Ā7\¨ÔEŖ9€‹ŦÅ EJ¯ # ¨T!ˆ!߅ãĀež¸î>ĄÁÉ] ffA&Aĸ ī& Ļ–Q°i5ßÚh¯“jŽ_敪ÛwÃa‹‡uĸÉ-ģŗ›yųƒ.ôNšĸOnKnŨ}Ō…]+™V2­¤ÜnÉTč ŋšøäü–NÔkŠ…IENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR"FY{# pHYs¸Œ¸ŒĖöģ/ĸIDAT•­Đ1Â0 …áW1dėz”ôf-b`ä\åU =‘XÖ!ĒąŨĄ…‰ ß[ŋ ŅG|˜ƒ9ÂĸQ€–Č-͘ƒ*E}I=YvŠútįē>l.ífíÜh–ÁĖŪs4“5¨ö“°Ų97ę}o[{“ĢØLŋíŨN%Ž:E\D&÷äågâæÍ“×Ō;ŗV%4bÚÅĒîøēä|Lt ät8úČIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR#Fn› pHYs¸Œ¸ŒĖöģ/sIDAT•­Đ!€0 Đ&‹Û5p\ ˇ+ÍíKvÍU,k'Ú _<ŅüT|h=Z˛Î$˛ÉˆAéØKš°+YŲ˛‹ˆdVFĨg­Ōˆu#Ë!b3•žëāĘPg\7ŋ›h“ėĻnâ?Ãˇ%˙đ9ŨuxÜ+âIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnĀ pHYs¸Œ¸ŒĖöģ/†IDAT•­Đą ÂP Ћ(RfFÉhß%#° (EÖøŲā—AŠūqv"ŠDC\ŧĘō j ßΉE›ø¸î˙om܂^Îqŋ O˛Ënš=UšOŅÖVáŪwæßÚÆž|(:ŧ‘ƒáJ^ŪŽdgXÕmâĸž9gxķ‚V.ēąũäAž`ߞÄr˜IENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnĀ pHYs¸Œ¸ŒĖöģ/“IDAT•­Đģ !ĐA„WĨИ%8]c¸Sá<ƒdü“3ŧv™] ž„o˛;Y7™Ŗ4ēíN6/k%Ęôjƒ5˜%šģnđ W¸¨ũf6§ÖÉâÍTFõ/>üŸoČã ¤yŌ€IENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnĀ pHYs¸Œ¸ŒĖöģ/ŽIDAT•­Đą à …ᇈDé< +eÎráĩ°ŧˆGpIxšģTN”._Į .ÁÍ͊ĸY0Ō5 úܓ åĄ^…Ņ]'š¸ģ ū˛đpuÍÜԙ:ᜍ“Ī4fšŪØđÔÛ;‚:ā%Āģ'ģē“$ëA´žŦ¤kčėęA=‡ÕdV`sy~+7Ŗ7¯îBkŪéÍôæ2´ųš[ļZûĨáĩ”ôų“˙ņĮę ėIENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR F…ŦĢ pHYs¸Œ¸ŒĖöģ/ŽIDAT•Đą Ã0 Ā\°ÔÅŖI‚ŗ7Ņ*UbžŽaAǰ¸ö˙ ãáƒIH˜Ōv ŠžfDŗå˜ā4ۜŠâTŗōf3;ŽŸ„›Œ|äDŽ}@“VĐ)˜ˆ ēąsÍ.–0üj‡™đ‡ Œø@č‡Ã;†@TĮđáà ˙1ūĮĐüĄũƒ<Âũ sާQ7IENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&Š÷ pHYs¸Œ¸ŒĖöģ/}IDAT•ĩÁ € E?ņĀÅÄ\ÄÄŅd4FqŽõˇU™^HķķÚái˜ËbĖFĀʰ˛2­dĮAÖ ų;*ĶNv\d ęÉQ‰l¸Č˛¨(oĻ;?iÃ"ãíuĪx^ŨŧI=l%ŋß{yßw†jiąŲ$¯cf×û.ī^eÆī=Å­+2ČãXIENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&Š÷ pHYs¸Œ¸ŒĖöģ/IDAT•cø'‰ f“ŠJ^/(Y¸į)IENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR%Eåô pHYs¸Œ¸ŒĖöģ/vIDAT•ĩĐ1ĀĐõŌiĶ9Jޕު9JŽ Tx3û"šÅo0;Č=V•uF¨Ĩĸ0{X,lÂ[cc˜,v‰HK^VģœKŧŪ`ĖĨšöy^īj35”Ā\?;hí–ü×ŲpŒûŊ+ŽúŊ“!(}ū”IENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDRE“+  pHYs¸Œ¸ŒĖöģ/‡IDAT••ĪŊ ƒP ā{J‘’`“ŦÂ& UJFČ*Ĩ` @I¸ÜŊH(ä§Hķš°ėŗA2đÂå˜Q“ĒÂ#Ņ g.7  æÍ~ĨQhEvFg’ŅzŽGą(ķIL gøŒÁÜÍÕTõž~cÜ˙ņFév&‰Ÿ”Æ3ōį–?xámŨŽĄ4R3IENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR4E-}ø" pHYs¸Œ¸ŒĖöģ/ôIDAT(‘ĩŅąmÃ0…á'°`IM`Ž ‚p%•)SB -‘ad¨ņÔ—ŽAú‘ŠI5_Ĩ;ÜO”ö ~›ā›+tčĒ €§Ō•ÉŌ`‹:•’5íøģdMo‚dh ļŽ#ÄWH]—ė%é’z*Ũš{le};œĶÄŨKVųPįŽšžĻiäŠÍĒžēSÍyfué§>iî§ŅœŽXĒąÉķKđbŋÁģ ļāīvÜÄŨí"ØŖûŧ°CH—ŧrÅī=īœ‹âÜãîáėĐú°KQt>úÕneu,QģęŖkdoG3mī0A5öĪwûYąVŖxũ•ÔIENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR8E7AŦ pHYs¸Œ¸ŒĖöģ/ŖIDAT(‘ĩŅŊ à āgšpÉxVō$•×rä"kÄō¤Ŗ@ûą#ŒŌæ(ž‰Į;TÆûá­ūb†ģ:Ēi´ę¤ÆÉ¨Q q¸øNę–zqĪęš;ņYÔų+DÃÁTĪÚ˛°™tŦ+/6UZ2úD† •KÉŲ­˛'WúáiGÎÔD+čiėĐ#ŗ iY‡tE‹0đ=C{‰púco˙ôwŧŒĒĒYJĢIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR)E˙-ōz pHYs¸Œ¸ŒĖöģ/„IDAT•ĩĐą ! Џ(RŪŒÂhņh7 #PR ãO¤C×\ŠĐŧûۆÎ'Øą Ū‚ĶȂT#j1FÔörú":ã9{ųqĨ%§fįÔɘ# ‘@Ā/`]eŗÆ„GŋĀ‘ŸŲ쐕Ž‹­*G*Éo6įlmŨ ¯käÛå˙ĀcáÚģvyIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR0E$–XX pHYs¸Œ¸ŒĖöģ/“IDAT•­Ņą à Џ(\2‚Ga4“Í< Ų€Č âįûB",Ĩ4ÍœNwú€vđŖÃd`Ø ĀØuˑ|€i#Ÿ SÛ Ũm1ę ˆe5ō Ú ũĘf¤+œÁ=ügž+­FŖ,3ÕÍŸĪ™ÔXÁŨ[JYEEW•§‡Ę@ĐKŌ>ĸĀOp;oCTRhŦJ\­IENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR6E)ˆ( pHYs¸Œ¸ŒĖöģ/IDAT(‘ĩŅÁ €0 …á” ^ApÁÅ;ZGé{ÆhžbUŧŲË×[“ŋ$ûaēģz5n—‰‰dęT/kĻEÍŪdg Á0šą7ĶakÎMiŽžÕqūą*}ŧߔžsˇĨéļgÄū=ĐgŒnē†uĀųŌŋ3ŨÛũė k)Ū<•IENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR)E˙-ōz pHYs¸Œ¸ŒĖöģ/]IDAT•­ŅË €@PĖfk”ļ­ØŪö@Yņ ‰sy'Č=L‘-ÎĀT!ˆĄ˜œå+xfŧFŌąfg Z6 7Ģß4Û đ‘–1ÛéŒĘÔüŦHđ'+bŸĐØ2Œ)IENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&Š÷ pHYs¸Œ¸ŒĖöģ/OIDAT•cøIdpLe~00ücū˙ŋL!šüƒ—´ÁNūC"˙I  ĐHæ˙?0TūÃa7Nūa‘? aÅ '1C’bĘūcKŗˆ!IENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR5EÂŋ“ pHYs¸Œ¸ŒĖöģ/˜IDAT(‘ĩŅą Ä Џ(¸ŽXƒ.kŅ…Ņ…()ÄÆDŽžĐ<ÉÂØâcĖSņĩĶ tČύę1ŠĨ™ē0ĩRq{@×d hfiÅē,n—Ÿášéö܍ŋŽ]üÛĮŧ„Ī2?zDŪ3{Ų÷Šķ­‹ĢŪmJė1:1Scō3ŠÎ˙Mą@qplŪr{Õ zą}QĒ~IENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR;EÜvŖ¯ pHYs¸Œ¸ŒĖöģ/KIDAT(‘cø0 Ė˙0€”q€Aū˙?† A*ø0üc2>Č Ø'؃ą”1ā‘ō‡ØąÅ žčĻ=B›7$c$ĄIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDREfÕ+Ī pHYs¸Œ¸ŒĖöģ/(IDAT•cø˙˙ Æ?Œū1- rķ„?ũF€;ŲŒî ŊIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDREx| pHYs¸Œ¸ŒĖöģ/?IDAT•ÕĐą € @ҟ0Ŗ0ÚŲYēÆĨėž‚#Pŧ*ŋÃKÁŖašē§g:%.ŠUh)Rũĸ왇_LIENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR4E-}ø" pHYs¸Œ¸ŒĖöģ/ŦIDAT(‘ĩŅŊ à ā#”˛+e°˛Ų„^ILwJ‘ÔqķIFŧŸs†o?;î+âv¸u —_&Ú2­“žô t´Gj‰ļL뤧ôt]ߎH{ĸ–i›ô%Ÿ2Л§púŨ‡ęÕ¯ęgęߝúCķ@ķBķíSĩ_ĶžĢ÷uÚĘĘ Ę­(Įz(Į \íœ; }uxėwX;l'đķ^ö ŸfhúqŌøIENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR*EIy pHYs¸Œ¸ŒĖöģ/@IDAT•cøP)f$ęƒ<ˆúÖûĮĒ¸Ö pHYs¸Œ¸ŒĖöģ/´IDAT(‘ĩŅ1!Đ!”XZš‚7ØŌcš‰…×ĸ큒‚°~āĪÆdm†—?“Ųfe9B,Ž((CD3.nŌÆĢgĀ ŋdŪáOœqļÄÅ(„¸*BX"…'’#˛ĸXĸ…Ŋ؁mĸ'MxŅŲEhBDO`ÄLjAá‰äˆl‰bˆēCˆ&÷‰Mą*â7Zsjs¤/Ĩ(Ēãr›â÷Ū˙† Ļ:ƒsŧIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR7EÆJC! pHYs¸Œ¸ŒĖöģ/ļIDAT(‘ĩŅAƒ Đ¯ÎČNn 7‘›)^ŒŪ„#°ĖūĀÔęžeÁې ųAŠ'ãĢĀV=:5pTLņ–FW’Ą/úĐ*:°˛Ą~ÃaiX! 3RuBr4MˆÕą)#Â~ĩo=üĮrMũÛ¯Ô>š?õWĪŒđŽnN:ŸpŽęŒ¨ķ§É4EDsŠGG_5šRžŧĩąæĘYsļČBĶPâŽųã܇Šû pˇŊũÕ74Tu‡E8UIENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR)E˙-ōz pHYs¸Œ¸ŒĖöģ/jIDAT•ÍŅą €0 Ā\PfFa4Ėf%#PRD1‰í"‘(((psÕË/Ō‡1Ķ&ØŠ’F%šHŠAL´Ø@zĮ'Ã÷ÅKD%¯Œ]é­+Q,÷JP.øuiāņ_r'z"Í!ÕsŨIENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR7EÆJC! pHYs¸Œ¸ŒĖöģ/âIDAT(‘­Ō1n„0ĐHĐÁ ā&øfŦW{1G{€ŊÂti]NaŲųcŗ ‘R$^cã™?FŠOƏŠ­ęŅ™€Ŗ:ŋQq%N4på@īļ‹īĀí8'꤅†ēQYĢ3ĸŖq†TĮĻŽˇĢ=ŧ™.–ĢŦŠ•ûÚ9š˙Ö˙eá]3ürF°ū”}UWˆõ¯;ĸŠå"Ôr’ŒÔŅKŽ>øĩƒ-WËw)ZķîŠÜ,ĢĩÍcĒķ¸6ˇĪs~,ŅĖXÎ9ÕØöq=ėåŠč}œí ú3†ąŨƒ°6Ķūž_˙b_ˆ& IENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR0E$–XX pHYs¸Œ¸ŒĖöģ/IDAT•­Ņą ! Џ((Qn4ČfŒÂ”|“ˆ“R¤Í…ũđāÉ:› Č'člÃJ3d€Č“Oōė:åĨh‚hŪp¤{RIq‘ŒOr EoÕ‘ļą¤kÁ‘7Q{^$kBņ'U‡h:R7'ŸMėˇ_'9`…6ĶĒÛœŨ@đõūÉ \)rĢ´ÆIENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR$E ĶyĘ pHYs¸Œ¸ŒĖöģ/ĸIDAT•­Đą ƒ0ĐC”°+°+ąH)Rf„ŦB”EČŋt¸Ü˙9(m\<ɲu˙lPËđ1a”3* †­Ú0 ĩœ Ös1,#MŌ}éđōcyČŗÅ—ØŨŠ KwFĸ×,xŸ´÷ ՊÚt Hh pHYs¸Œ¸ŒĖöģ/BIDAT•cøP)ö˙˙ @€Ą…ę˙Āū?œš§ę˙OĀKũQF*Õ`ĻäAÔ†z…-¨IĢVRcO–ë•IENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR8E7AŦ pHYs¸Œ¸ŒĖöģ/pIDAT(‘íŅą €0 ĀRP2BFÉhAbąH,@Gņŧ  j:\ø$ģûëā)āY€ËŒ ĢGqúŽ›7SĩüÖÉáđظū2ƒû:PO÷IŅČȘ0ü?Äđŋá?Ã>†| ä@čŲ1|°cxDu `¨ˆū1°˙cØŅ>¨§rˆÎ/HëˆIENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR L$7ˆx pHYs¸Œ¸ŒĖöģ/uIDAT•ŊĐ!€0 Đŋ p`q;ĘŽ… ĮęQJØÉ ˛ō!A°Pņš4mĶÆĀ×hMP60' ‡™MĶ€Õâ‰'Ésė… "$ŖõH%k1í‰-ãMņ$^8“ƒÉc°†t\%HÄņ.-ÉV˙đÆrķb6ĮĢ•IENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒĖöģ/‡IDAT•ŊĐą ƒ@ ĐHĀ&I&D“2+eØāʋdŲņ?ŠDBJ—¸x…‹oëÃ|v§ŠŖøpßČO”†Ž 3Fč!vx¸'‹5¤°äV&%¤1-™ā2įčüÕå`Nŗú­†lO%›Îŧ•Ÿl..7ŠÎŊbđ–"&ÅS 6š÷ųo_z @A š–IENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRLš:đ pHYs¸Œ¸ŒĖöģ/jIDAT•ŊĐ1Â0DŅoQÄ-GáhļDÃą’Žc˜¸ÜÂō°FJ"ēĐŧrô5H2Į¸ (;}2h׹¤uPäŧ¤'ËÆ} ėœ~žÉ;əo+åėÔÉą ™‘>đ´Oä.‘Ŋ¯ķā™´ąJIENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7āȌ pHYs¸Œ¸ŒĖöģ/€IDAT•ÅĐ1 Ã0 ĐoZ2ôZÉMtŒI.4ĐĨCĄŊÁXü!v ĶŗIfÃÛq#üs{0+*Á˛žŦöÔ՚Ĩdđ*Gyō­ķææî7ã׆‹§ŧôÜcčM(ÉĸÎMÛrd}_8Ą!2 ˜LšĮOūà Z%ĻõËĖ"IENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR L$7ˆx pHYs¸Œ¸ŒĖöģ/qIDAT•ĩĐ1 Ä …á_,,sâŅ4äb9а° D|Y’mļÍ+žbā1à oĶŊQɨĄEzė G–‡§Jž]r_Vi}(¸‡;nįL™‹)?˛ą§›uRƒ>4§ŦhGV÷ūK,ĐØö^ jMtIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRL_J´ pHYs¸Œ¸ŒĖöģ/IIDAT•cø˙˙0Ã˙˙ ˙˙ņ(ūøá˙ã? ˙˙gøßÄüü ˙!„˜>qTO%üƒč{0ūô•1˜ ŠxĸՍIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒĖöģ/­IDAT•ÅĪ1à П"…-Ü Ü$Ü,4ęŞõŅƒej[Š*Uę\†7€ąŋ1ôū OfCQīȉ g TXíU0ŖÕmŒÉ=įojŊŒZ_Ü,IĐë ֕›Žā˛ųôTɔlr1Éí~Ķũĩ“‹¤ŽÖMÕ-°@Ō¸/öĢ{rž-•zčסáËå#¯—ZI›Ų7ëĐvëvzN‘ĸo‘m Ty\Fīĩ‘qIENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒĖöģ/aIDAT(‘ÍŅÍ Ā āW,õØĨŖÕ[×rĮđ I_‚ē@1—ȁZTčã´čä#)?ĀQ÷1 n#ã"ČžĘIX16mFНŊŲ@Ŗ•PÁC˜ĖŦà ņ ZsŦ{įIENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDRLH1Ú} pHYs¸Œ¸ŒĖöģ/;IDAT•cø˙˙2ū'€á˙†ė¨$öĪU-V|¨¨ö3@ņ~ˆ~z`[a€ [IĮu—ĸ—NúĸÂIENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRLšaĐ% pHYs¸Œ¸ŒĖöģ/NIDAT™cø˙Úū31üc€ĸ˙ î˙c (jŅ†˙ ?€H}Q1ņ1ü"9†?v ?ęū10ūch˙šGoņ+aIENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒĖöģ/‰IDAT•ŊĐą Â0…áEŠ)PŧŲ„l‚€•Â&ÁĨ +!ī' €‹¯8ÛwO§m?Ģļ§-ŅęËOĨūŌÜۄËdīԃ]Ŗ­ƒ-7›øõÂF{ė EEJËmc{ņ^ô™GģĐ91%3ą´Ll˜.’ˆTķ•„Ōv*aËÚĪX°vō&'ûüˇoĮ!4F¤ŊIIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRLH1Ú} pHYs¸Œ¸ŒĖöģ/'IDAT•cø˙˙Ã˙ū ?ø00@1ˆũgˆâė@?@ØoÔÅz]˜͸ļIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR@LõЌ pHYs¸Œ¸ŒĖöģ/sIDAT(‘ÕŅą ƒP „áQ<Š(!‹ Ŋ•RĻ‚Œæ ˛‚G |â°ĸHĄOáęģ+Ž1úgÂkšÉĢØĖ{anŖް’%xЉ6TîĘZž9Ņ+Šž‰ĸÅäķϜŽ7ÚiҊÂažøķã~ÂÄīÍ×Ē$IENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒĖöģ/[IDAT(‘ÍĐÁ €0ĐojäčÅŅėhŊšcp ˜4q¸ŧŸĀåĪaÔā Œ"2˜&nÆ +8€ÎĐŊĪ3Nb“l.IsĄMhaÅĐæÖQĀEĪ˙yšHmrA‡IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR%LÂC< pHYs¸Œ¸ŒĖöģ/zIDAT•ÅĐ!à FᗉH6.׈ãZqĐ›Ņ›pä †íŌ–N]dV|úũ‹Ú 7Xéfv3˛m–Y¨Ž!ˆWNJĐx’ƒĻƒŦš7Ō°Ŧ<†ōĻaŊ’Ÿ+ņß ˛}M^åčkØģÅiļļEŸÖ9ŠÕ6pÖūŊåžOv_Uü9(-MúTIENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7āȌ pHYs¸Œ¸ŒĖöģ/IDAT•ÅĪą Ã@ …ágސ‹pŖx4\d­ķYÁ#¸ŧBÜŗt$`H“&DŇņ#0đY…hēƒ(ē`ČĀ=–zËE`#k‚ 47ą 0!]}ģ\,_¸}¸^|tĨĢaĶ(ZŽzaāAwZCH7ģ#&Wũĩ~û{Âŗ/O‘Ä€čUtIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒĖöģ/{IDAT•ÅĐą „0 Џ((ŗĮ$d& 9ąlb6 ¤ˆ0ßĻ9‰†æ„eŊĘļž exAvŨŅRčTĖ H(Qį„}TIØÔwu÷ëN7ëV7¯kų×Ņ2ĖQ3ũX* Ĩcžz˜ g ĒĻDĶw˙īš[ĘĮ]žÆn-ŲÔŌE—IENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRL[暉 pHYs¸Œ¸ŒĖöģ/NIDAT•cø˙˙˙Zį?00üã?ĀĀp€ŋˆø€øøÃQ$˙ æ Ø˙ƒ‰ øéDü`î?r” K īéq&%f;IENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRLVøęÎ pHYs¸Œ¸ŒĖöģ/zIDAT•ĩĐą Â0…á?ĘdVČŦ” 0ƌUŒXÄlpĨ +Į;\‘>Íלü?ɸģq6ųbė`ÔĀîÉøx1^^w°zûGĪAúqyPĒ0ĒŠ ž˜ŅmŌˆhjķv`ę<ŊΝÕmŅPÖFDéųÛų_"ž6Ōú́­IENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRLAÚz pHYs¸Œ¸ŒĖöģ/KIDAT•cø˙˙^üˆĪ˙aøĮ˙‡á˙! `øĀĀĀĐĀ, 2Dë#ŗ1ķ†?@{ū1đą Æ˙jđût ÎÔŦ×*ÕzÎIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒĖöģ/_IDAT(‘ÍĐģ €0PGîI FC4YãF LÅ䃀 ˆ›×¸° •úĀKې¨DƒQ–…—HE>•ßšˇ„ÆYęęätd„uŦ`jĖCfÃ@ģ‹…Āž˙rõšlŽ•`rxIENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7āȌ pHYs¸Œ¸ŒĖöģ/vIDAT•ÅĐą €0Đ/‚–!Ŗd´čŽā*‚…Ĩ+ļŠMАķŧĶāŸĮ/?ē ¸{MŠF0” w‹˜uH%EՃԂŊ6tdŠkvq›8ąģÅŽ ļŋ5VtlŦTĪ&ĒlÖbûqüøË'/ĀJÔįu;IENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR=Lög‚ pHYs¸Œ¸ŒĖöģ/ąIDAT(‘ÕŅ1 1ĐYRlÄä vk•kY,d÷î•‚^cÅ ¤LōÍLĸ¸Ĩ•8LņøÅĀgu"ũ˛cŲä‘Ā2Bhąž(jA¤TĶ î‘rnX5Šq)—|›āZŅ1ÁY f, Z`:˜‚ følįl+ϊŅúė ÖŅųq‹Ą #Ž‚/Ŗkˆ q˙‚ôH‚RŒK~B#ŋĄŲ[üúƒßã "—ĄÅaIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR$L-Ü( pHYs¸Œ¸ŒĖöģ/’IDAT•ÅĐą à Џ\PâLĀéX)X2R ¯…äEđWē@\ū]vH(^q:}>@yŋ÷.fÍ*+j2{Ô‹ķ¨§`,úĖ ÷ƒ&Š™iŨ mÛn>-­¯Ļ<ÜÅd_}2Ũ\øNŗq¯n™§Xū!v×q›iDvČcaŸ2ƒwϞ+}×úĶ€āūë'ŨVËDé-¸åIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7āȌ pHYs¸Œ¸ŒĖöģ/˜IDAT•ÅĐŊ Ã0ā3 ¸ ŅŅ(M†.=BV¤đ6 r§Bčr? ōšâãUĮōÁŋš›Åb!YŦōĪ⡌X›U„jš‰z ä€ģø&§æJF5ĖäÖĢŽLęŨ“YŊ‰×@–‹ŧļǃ,WÍɇ8Ÿ\N>E×­ž[B7c÷`?;ģžØhÄQ´ėä$ķ'ŋ5N>šÉ„“*IENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR"L ÂXE pHYs¸Œ¸ŒĖöģ/uIDAT•ÅĐą €0@#Š”QČfd´…‚hRD o‹€/Žŗe=†Ÿá{ €ôv ŽÛ>ÎŅfh´D6ė ĩUn4Ģ´O´Í2Đi‘ûBm•ÍZÅ&x´Ĩz´û6éŅ–āҚĩ˙ú¤ŧuP0_ËĻ€žIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒĖöģ/GIDAT™cø˙Ÿá˙C†˙Í ˙Ųūņƒ‘<Ãj ö ôĄžáÁö˙ ˙ƒØÁ?öT0čN k˙ķƒ\r˙_° æĐ`ļŖķęIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRLb+Ō pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ@OđX+ļĄXũŊIENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒĖöģ/BIDAT™cø˙ŸĄũ?ÃÁ˙ ū3|¨Ą@dOôG„ūņ3üggø˙DŲAǘ˙ėÚ`—ŨĪ˙Ÿá?v g>ĀöĨIENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR&L))ø? pHYs¸Œ¸ŒĖöģ/OIDAT•cø†Éū˙˙īÃû˙- ø˙ķ0<øÁü‡áā?† †æ˙ 6 í˙0ÔåūUķ˙˙Īü‡aū`p?õIVdXc6“IENDŽB`‚leptonica-1.86.0/prog/fonts/chars-18.ps000066400000000000000000000006241506303110300175500ustar00rootroot00000000000000%!PS % chars-18.ps /inch {72 mul} def /Palatino-Roman 18 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-18.tif000066400000000000000000000107761506303110300177210ustar00rootroot00000000000000II*@& *ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų —{É W!Č-„ˁāŅdLČ$<Ą4ë }iŪCo IĀŠ6AXu!§B ÎA˛„6¨@ŪfY öATrC2„'…ÔƒF—‚„T›ƒ ƒ  acâ`‚…ũB'ŗ¤$ÚjaPi… K  õŪ˛ŠĐAŊt›č#Ä„AĨ„ G†GÉ˙øAĨi# ëd^• š~T‚  ƒ{õŌ8ĖIôƒ¤“wÕ6 ¨ĖĢh-'A7Ķū–[H/ͧJ“‚3ķâ¸AŋARM¤˙렡ߧĨ´×VĐ\ Ü'Y€'LØ7īˇõúũZKé7uUÂéé´atĒ’´¯÷Õ/_ôŧ7ǎ §I˙KK}˙ë÷ô礛 ŅzŦ}ŋKŌK]ëŌ˙˙[ Q~Ģz^õéi}_ŋ×ū–ŠS†:ßú×Ō˙˙˙˙ūŠm×ũ×KëKÕūĩ×ũ-%Ŧ) KĨú˙õû¯ũ˙ĮûZÜ#1ūŋƒô´ĩīü†ÁOzKI%°Gö:÷Ĩø÷_â?Úũ%á+ëũ/ŌJ×÷˙Ōp“ žŊwũ/éēūģŨ.(Vęú_¤ŋ#šKi<[!.û¤Ą{^ŋ­%āé0 ˙^öׯa7×ô’^ ŠöZ˙ˇļ’Mk_ôž!á“ßô˛†!i ū˙ô$젃Vĩ˙b|5BH.“ũkĶįĮTé‡ôČ@$ĻŊÁkúPipAŊ5 6×ũ†’8˜?_ŌitŅÂuvũ‡„ÆcõũfĶÄt‚8ƒa„q/\HƒúMØ˙_Ô m,]&Ô ƒlWūCU>:ˇũH_ Â÷Ĩ ÆŌáĩoō âõúMĨŊ:¤ú Ė)ƒé6“˙Rŋ¤é~ÚI6Ō_ᴒoŋõ˙ĢūŊ' ūũ:M˙ÕuĨĨ‘Žū•6?ū’ŪŨyÁ{×ôũõtŧå„%īúˇūĩ~—ū–˙ ŋJ›í/Å_Ō×õŽą×õö˙ëôŋúW_ũ/ÛKõ×Kzõúú!—ūûũuĨD5{~Ŋũ/ļŌë˙R˙KŌZ˙_ėUŽ­úWYî•é}ú_m]tëß˙Ĩ=E~ŋOūAZ]+­éŌJŌK ëô“­°˙!ĩä 2›ô´ģKÕôģ˙^ûaŊjšõ¤Ũ~Ú]¤–ŋô—MÁëŌtÚ聁 vŌŊ'¤ģęôļŌa„R;õ×K[K´.Ô%ë ô’ul#Ũ˙鴓[A&ÚM¤“i_ l0‚ˆMu×°Ō!›[Ŧ0‘ H8aà + ‚ zŲ B &(4VŊ4ŦTFŦB‰Ŧ3ŠbЊ-…¨1ƒ „zĒkál&† ą!ĻB kŌ !a`ƒC !’p"-ĨЈˆúKīU_k¯Ŋ%ũĒUīZęÚIV-ĨCŊ%Ú°ļŌ´ļŌÚab?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų0j×ŧ )ÁĀŽĸ ÛYPÔԁāĨĄÁ‚ |<#Č-ƒ$Č)#!´A]Ad5 H.CP™āČ`ÁĀ2 ƒ!€Č0 †Ļ¤5ô!f' Ö ƒPŅ@dÆÁ€Ü†Ã.S†€\ÔFTCgĘ™(A§ˆh+“āĸAl5!ļ180Dh3‘pjX ˙ëx@āÂq_˙\5 ¯ 0ƒÃa0Á‡ 8a‚ `„,0A¸AÃ#0á†FaØaŖÁpÁLa…}×]„WĄ€D PƒčAŦä„ ‚P @ä P†efІmfQƒ@RĸpĖdđ @ŲŖˆ0Č5œ„ ƒYô Ņ€Í4 `˛ 1ŅĀoJ| ¯L"€ŨAĸÂ!˛ØD3ÚiϚjšēēA6ÂĐM°´ƒĖ™ƒÚ§§Ü†QŌ Ô|āÚ3ᰐw÷Ũ˙ú[Ģnaᴃ ¤˙îūšAŧ6•$ü Ø@´÷A>ßøI˙ôģīIŊ°“{×_÷_ēOézAŌoí/ ˙¤˙ú^ž“ũ?¤ũ?û¯iZ_ũ ƒiū—˙„÷¤ŪÚMí˙ūéwON–—ͤßëí˙×˙ĨÚĖ'¤ß¤ßĨ˙÷úļ­Ö—ĢĶs õ[˙¯˙ĨĖ,Úíë{­ī˙û­¯i:éxé:ßĨ÷ū—˙Ĩö—ˇĶũ?˙˙t÷Ŋ]é]?¯ˇŽ?˙Ĩīũë~ˇëŽ?ü¤ÚM¤)y €hrƒĶ­ũúC˙Ĩ÷^ū˙ŋãûĨ­úēIxXzD1÷OŌíú˙é{¯ˇĨú_˙ßīˇWĨá`ë3s­ë˙×ū—Ũ{ß_î­Ĩ֓Ĩ^¤ö˙ú¯˙˙KŨ}ŋ~•õŋîžÕ´­%đ°ëA:ˇOëų C¯ū‚û¯Ŋ}¯˙éö÷Ōō öC6Ái$[Ōö˙˙ũ/uöúūŊo÷K_Ōm$Ŋƒ ÃK¨ŽŸJŋūŋôž˙žģę˙žûĻŌé/TÂk¯­á˙˙˙Ĩî—ˇī¤¯¤Ãũéé×Ļ×ûÂ0ëKéđA/ëĒ˙é}ūŪžŋĨũŽžĮi%ūAƒI%õâ ˙˙˙Kôž˙Ōü$Ępe˙ôŪĶŌ_XAk 4ē¯šP×^?Ōö˙oũ/Á*oî–ŊUĒ^í 4ž“Á˙úĨīūüÚ0ŪßĢn•}`‚à .ŋšđ˙˙ņ~ßí˙“Ķø ÃũëĻũē_h0‚ 4ž’§Č=?ū|?Ĩí˙Âũ ßúëĶqĨâ!!†–Ģ­í˙>Ά?üú~˙ßûû`ß÷õj›Ix@ƒŋéö˙Ãá˙ũŋēö˙ĮöČ2 ũŌm_ôŧ ƒ—ZKíũ˙û~ëí˙ūä4ū˙ôÚü ƒiz_{˙˙˙ė?ē÷îģŽÁ˙zęéŪ—Â˙I?wŽûßū÷_o˙öÃëĢĒ^—ÂĻũb÷˙r˙íũ×ŪūūÛūß×íé|0ŋĒK˙_ũ˙íû¯ˇëūī˙MĢt—×à īUŽ9Ēíũסõév˙Ú˙¤Ūž`‚nõY°o˙_°˙û~ëīßߡūõÖĒŪ—†Aoĸę’_ŋ^˙ūßßíīīíŋúęß^—†A7mú]ũ˙˙ūßé}ũ}m˙ˇM×I7ĨāÁ×!wIÂI?ž—ß˙ˇíūßkÚ˙é~ē­˙†VØJ!Îúŋ÷˙öō#Ōö÷­ël†S×öžŪ“éʏ < ›bšI'ÕŊ,xī˙ÛũŋÛí.ëoûŪēę›Ōü0đ@°Â`Ģ˙Ōũŋ˙oø¯}ŋuÛũ×V65Ŋ/à B ąīĻôēÛ˙ö˙ŊŌí/´ģĻ+Ō~ŋ Īdā0ƒ,6’OĢz˙˙ûz]{}ÖŨm˙¯ZW¯éĖđÁ„ †—}7ĨŽß˙ˇûûimĨˇĨļ—ĩž•}¨0 [ +é0ČfĨûūßõîÚ[imõÚĩZMé/­ “aĨW„› „ė?˙o÷÷m-´žŌÛK}+ŌūđÃAl0’úLIBZí˙û^ŋm-´ļí. ÚWŌ_Ō°a%ĩ˜`ļAĐĄS 5M4ôÛPTŨ4Ũ†M†M¸a$ØĻĢJĶPŋXxXb 4!(! 0Á‚ĻšzmĄ§Ļ›†A&Á„l4I6ŋVqûĐxM ĘČgA„"…‚ Ü  ¸<‚€lR 'hƒˆ!„îÄ" @ÃA¨8„CPanā“C0û 4_!”g “ ¯Öõūᅆ pÂØMUWū)ˆ0B" ˆƒ)à DDhEÁ‚úˆŅ¨ƒøˆĐˆâ"@đYqõÂ3hú ũaëH?­]$‘ą”ã#´:&ƒ`õūĄ¤ Õč(ĸĄĨĨã@š€đcD CnūÖÂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üf¤ ’õ!’P@đ+€ƒ x[ xAH L +!¯d5īČdAËČūã™ÁKČ2xKaäG!­"ä<ˆRÄ<H!ļB[x{Kü%ËŋKouR‹äF@ņÍ4ČeyO˙îŌ4Ũë~•}!˙×ŋM/_ü j˙Î'ú^ūŋúē˙ĩ^ ˙Õ׎ x_ũ]Ä˙ę×˙ß˙Ië×˙˙Û_˙˙ôŋ˙˙˙o˙˙˙K_˙˙ũē˙˙˙K@ˆ6S!<‚¤ČkO!Ģ<ƒe2,Čkš‡ō NEō™ X"ˆŲČk9d¨ErŽEâgČiA @đmr ˜@đÔ˙Õļx `„) ŽČ/< a 0@ÁB5 ÖPPR‘t éԂjAscČ1YO˙ŦB „C Í@aéË9į× \á4Če0ƒ `á0†CaÔ.JČ0rīŋ˙ũ[OA…Øá â"E0Ąt šaSøØTG…TpXC ^„â(¤āÚ6̓ĀÜØ.ŋú°Ž Ķđ°‚AÁPAŦ'ú ĶO  ƒMÕÚĻē“ĩ_ū“ĐoGA‚AŌoIôpl†_1ú !—čáQÂd2ũA6@ŋŖƒaU‘ žAēnöÕũ/˙nŸ@ƒh é:V@ŋ$ÔBw}-ˆAˆNÄ'IŨŌwFŪšˆđ4ŨũiēŌ¤ŋôēx§]'Iõgƒ4 ˙ĨÂa< ęÜSĨÄ'Wú{Ũ&ë¯˙oēm/užŽ¯ôM7WMĶkĶ_ûk­ZZéé{ĶĶĨ˙ž˙„ŋ÷^žē˙ĢÕ´ē×˙Û­Iõëũ.ŠëÛ­|qũ÷Nž›Å$ļČia é~ūŋ˙ŋé{ûĨí¯WũĨĖ~ŌÕ/Âö˙Hkī˙ũ˙ûũ}˙÷é6¯T–Ú /K˙õ˙˙Â_˙Ū˙ÁūÚZWŊZ¤–Ú / x‘žŋũë˙ë˙ė†÷ŨbēP@°`Ņà |†@+Wëņ÷˙Å˙ūūŋ)ÁŖí֕ĶMé Á„ŧ;˙õéß˙˙ūÃ˙[ß}$˜zI+Â3˙Ę@ˡ˙Ī'˙˙˙°˙÷KJßĻô¨5č˙Ī‚žŌ˙Û˙˙˙Ãˇ_{ÚĨú@×Ĩõ˙ļ—ūß˙˙_ƒëjô›Ōž–^—˙û ŋö˙˙˙đoöéęÖīJũĄôŋģũŠ˙Û˙ûūü‚šëūŒoI/Į˙_ü0ŋö˙˙­/Á˙z´ž—~ŋôžŋŧ/ũŋ˙˙ũ¯Ú¤Ũ¤—˙ūÛjú0 ßö˙˙ú Ôī˙N“ŌMžŋ˙éá/ũŋ˙´ĩŋ˙VÖûTŽôˆ/ūŊ]­éí˙˙õ˙úõ˙ū­žŪ—ūß˙ˇZÚũzžĶŌMˇ×˙Ø].××˙o˙ô­&×ūÖ>4Ž)*˙ôamÃmVČ>Ÿūß˙ˇÚ ×´ŽŅĩĒt›u˙öŌá¤Ũ„¸a{˙Û˙öŌ†“a_ė›°Â wĨzIû. ˜d,0 a…å fØūÚPÁà |4ŖŠëŌˇIö*Ė00`Ā€¨'jŖƒxŅa0zŒžÃ€†à Gw Ø4ŦZđ" ķTũ“\(IENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDRNãа2 pHYs¸Œ¸ŒĖöģ/4IDAT•cø˙˙ūßÆĐøŸ‰á3ūcķŅqķ6°Zt|ü˙9†įHfî0ÅŖęĶ J(´IENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR)N•ęš pHYs¸Œ¸ŒĖöģ/iIDAT(‘ĩŅą Ā @RĨdFa4"ĨČ\lB6 ¤@&˙NK€&˙ÅšpaÉĻ1‡é#Vė‹#Ž’ē„'ž˛@(äA2šÜ䁚%’æÜ¨IėĀlcډ~qĄ`G'XE,"Sœ2|Õo<ˇ>–ëŽ×bIENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒĖöģ/ĨIDAT•ĐÁ Ã0 Đ_|čŅ9öPǞAVĘvč ]%ŨÄ#č˜Bą+)q 5úđĀė¯’Š06KĢSHŒpŒŒ oO‘Á%13RQŸ…^ÕÉŧītÕrėi'ĖLoBeŽÂËŋĐT ÍŒšŊ$_ŊĄĶ]ĸ)‘w.Į>žvŋrŋIōæ_m‹É’K* ×ŗfÖöä¤C¸ƒžsŖœŋüŪŦúęļ*IENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR@N¸- pHYs¸Œ¸ŒĖöģ/áIDAT(‘ŊŌŊ„0`¯8¤—âļ6ķ"°-AD–h˛ ,ŋ›nĩXŅ'‚7oFv¸>w vÆ)pÉĐÜųë(zÑW`cTTšņfŦ8’bD (vÎtū- Œ8/$Eád)Š#~‘7X (*i!UgÅ -ā:¯ŖĀ+K ŨũiqáƒūPœ — õ;Ö> ‚`ƒ‡7ÁģĖ7Ä>aQ4CO#ZAq VJōŽk„BĻķQ‚c”.āŖŦm2TJ >ĘĄ{1ēįMõ(øÆßĪæŸņtÉŋTŖ,/IENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR;NļąSl pHYs¸Œ¸ŒĖöģ/øIDAT(‘ŊŌAN!ĐO0Á•l]˜Ąb‚G™#¸taŒņ(xŽĀ’E‡˛ ƌ™Itg'ŧ¤ĄøU4h=ŋĸEqŠlĖÂ~ĀBOŠ–ōBĨrrÆįŪ¯ā.qōŠW V_ĸâ9)6 _ĸšoøŸČ¯ņ”#¤?LĀŽ‰qc×§ũÎĐpõˆÎĮÛ[äF5å4Q(GE YJ ŪÎāža¨[ÅnÆÂĀŠĶá12dâ÷Šr›ę|‘¨‡č ‘vȚR§xƌjŠsÕđTꀆ¸Č†Ø>;_+WoÎVæ,'yšežØü-˙†/ŊĪÖL'§aIENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDRN׊q. pHYs¸Œ¸ŒĖöģ/@IDAT™cø˙„>0üo`øÃFL`ÄÆđˆøĀHŽáŲ1|¨cxD˙‚Qķ?ö ü˙ė!† jœ`‹ī?IENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRNį 1 pHYs¸Œ¸ŒĖöģ/}IDAT•Đą ƒ0ĐŖJ6Č l╞ ČHÉ&á—.,˙b[ ˆ*ÅĢ,ųî>HųrËf—&О`ôˇOŗš›ĄČŨåaH…*Ę\Ŋ;ĪX~ŦÍđ§õâOQVĪí=b8úĨptֆŌhÛ×vÚŦũæ’ß"Oõ>ē—Ũ­Ž;(žÁIENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRNį 1 pHYs¸Œ¸ŒĖöģ/yIDAT•Đą €0 @K)“ ˛°Dˆ‚ą@Ę"a—)ÁÆļĸŖ¸Öūh a%‘x˛Lv‚,!ÔáˆÄ#œĖ!4֑éa3#´bz,ŧU?…ī=Ô?öĶ2pËfYgÍī¤÷ē;Fé[“ô/ēEÖmŧlubüŦ/ĐÎ<•IENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDRNųėPŧ pHYs¸Œ¸ŒĖöģ/iIDAT•cø˙˙˙tâ=ˆāėPÖķ?ō˙?€˛ `ĸĸūCƒx Ôö‡áÃÆ q€F0‰Œ@ °‹˙PmŒ šAÄqĄīAÄ˙ü0by=Ļ͆%h$I ĸßIENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR*N~Ũšē pHYs¸Œ¸ŒĖöģ/IDAT(‘cøŒz0đ` Ũ9€qü'č†Ką`IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRNîÎĀu pHYs¸Œ¸ŒĖöģ/EIDAT•cø˙ŋaØā ˙170üaF(f†ā?ėPĖßĀđC‚?Øq}Úsˆq3ŗņ|LģØe°ˆáæIENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDRNũ€ pHYs¸Œ¸ŒĖöģ/#IDAT•cø˙˙ÃP$0ŒhB0Á¤AÄĀģåLz,ĸœIENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR N1€ēj pHYs¸Œ¸ŒĖöģ/"IDAT™cø€aĐĸ8040€”Ņā'Ũ4j| `~IENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒĖöģ/iIDAT•ÍĄĀ Fa’nĀ Ũ€•ē"“e“Œ€Dp¤\.˜šOžTu†°뎎=PäC2F8ŲÛ lŠB>$c„3yG†ŊĀVĄ¨—dŒpåk˛]“íš8E!É?õ¯/ŽTb ˆÖšIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒĖöģ/‹IDAT•ĩĐ1à …áe k6Ž‘kąAÔ‹Ņ›pF(ŽĄnŖH[ßhŲ?X†pãn…3Œ¸ˇY4<ˉĐįōjŲPcˇDŽ+ ŸfYš\LÃũ+N0ũÕEMwęm̚ãĮMí߉žkPĢãB ˇ–ŸRÆđC*ÍÜģ!ØŅЏžŖ­Ŋoū_ēģ#FĢÜ*IENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDRNśø pHYs¸Œ¸ŒĖöģ/FIDAT•cø˙˙˙dâ<ˆā@ÄqHüc?@Ä ÁP$˜ ~ąDü~Äö? €A`“‚ņC¤‰ĩ[IENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR&NdáY4 pHYs¸Œ¸ŒĖöģ/¤IDAT•­Đ1 Ã0 Đ2dôšHĀ×ęˆK.–ĐĄ×péĐÕŖaÕúš†vë4HZ#øbnĖ/(€Đ 2ĐPįä"&ÄYL-qS}FÜU×ūÇjėqŨŠĮŖë´“ˇzĻíÛŌ™âč`foĻ،ükŖēĐÎ,ā_{3Ífd]hgÖus0śųTë`'@¤+ 8ægÛ˙ô ?q-ūw/dPIENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR&NdáY4 pHYs¸Œ¸ŒĖöģ/ģIDAT•­Đ= ÂPā‘i^ ‹rą@Ā#x•ˆ…ĮpÁ"í›KÖŲÕāOaeŠ4ov?Ňēr íąĄ@ޘ•BÃ)Kü›*E‹Ô˜kÖ׸.5náÅLĮG¤ũvˆë‡7ˇaîÎŪÁÔû˜t4EĢäM(ŧí &Ö—‘VDr˜Öîô/õˇkœÃŠØķU-Ÿž˜\‡-ŽŧĨ8Ds‰æŌĖl.™p!/IÍ×Ë}ÛÔ}oūOīĩ.5E7ölIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR'N‹#2 pHYs¸Œ¸ŒĖöģ/}IDAT•­ĐÁ Â0 PŖĀt“˛YaēÜēdr ’å˙lE=Uũ‡w°,Kū”K„p†U wfr~áĮų„ ŧÁ“)ƒÉŖšÄŒđ |9'x„Ŋ*g“/jĒf5:|™î¤šR›:ÉØÜ*׎H?Â5īZÛ{ûx<)OŽ|YIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒĖöģ/”IDAT•­Đą Â0Ћ(â.m:¯‘FĸLälĀJ‘R°†ŗAĘ_g[4!$pņ*ũûęö&ũwË˙jøŨ)Č :yÆAžĐÔ<#ŦÚ˜§ļ[ā$ÉŲáNF—ķoU œōjúŦÛŲÃkļ:āútqĶFËŽ†…\ +Št1$åíė Š˛MiĩË Į÷˙ÉŊÍ&+0Đ4AIENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒĖöģ/ŦIDAT•­Đą à Đš°;ˇéXÃE$2JÆ ãŧŖÜ”Čä>ļd%ŠģPšŊ‚ŸjÁŦ˙ŲŅéʙm uĻÅŅėŠFšúžĩ;Đmw¤ĩ[æĶėNu×Ķ䓪ÍnķË&Ί26šsKĻo:ŅlÆÃ }X¯•/'H¤ÉöėŪ-ĩ„y9´äx‹öëÖ~/{C°äMĀölĪ*¸čüžĪX"Š×#ŋIENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒĖöģ/ŒIDAT•ĩĐą 1 P#ŠĐĨĨË×e-ē€(n­;ąHnƒ”.ĸ˜|ģH$ŋxe“ô0}ú+—É+9‘ēīC …î “aVugŠ"/uÕ]Ļ‡Í °š˛Z’ĒfõPwõ9é`3=ŦaČ3ÁŦn2|Lž`;̃lĸ6å)Ģ›áŨLß˙üßZA5ŽĒ•ÜIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒĖöģ/ČIDAT•­Đ!nÄ0Đ8 Rč2_#¨šVXôZŽz÷XųũãՂJģŦXÍ˙ę9žxa—†YŒrhƒãJ<-ŗlđĖēĀWÚ“7ØNX_šŌ—PS5Ķ6ԙÕa‰?räˇCÛ>ÃwmoxËڋžįn~X‘ē‘í@ˤÚlPĒÜp‹T˜"Ī1Ą’eÂ5pFQ|tG˛ŊrúãĀhq>T‹ÂhQvÖ-zĩČ<•?])ōÛܓ¯=yÜVį{zķ˙ņūÂ@| 7\IENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒĖöģ/ŦIDAT•­Đģà „áeŠԂ: %utF)”p!Ėų?Əqf‚/eī‡Úŧy:ÚĖŒÍtŨ N?AßԙQ‹@ĸVAKZ4Õv š;•åi =Ā}ˆŸâĄ<Ėén3#­›Öiš!@\ßMāčpöīĀb{žļHįNŗž:oĪĶ2]č¸ééšŌÎ*‘6öŅ:ģ:–YoĨ˛ŅĘŅÃņY§‰^ž›˙Ķ+ĘÛ'§B­dĨIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR L— b pHYs¸Œ¸ŒĖöģ/$IDAT™cøßĀ@9:ÜĀĐĐĀĀDČ,x˜31Íd ÃL^V)?TlIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒĖöģ/SIDAT™cø˙Ÿ ¨á3Ã?F†? äRdšųáØ0úà Fė ôƒŸá‡<}°Ąõ ū3Ŗæ˙ í˙ø˙3Č˙g¨‡´~æa‘IENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR)LØ"Ŗ˛ pHYs¸Œ¸ŒĖöģ/‹IDAT(‘ÅŅÁ Ä ĀE<ō¤„”’ŌâŌ(…xō@ī::]w|FđÚ›ËđGÄZ`bBtčfÍ'™¸IOĒR˛p’›´¤;ČÂETģåˆ(Áõ tōūŪŊg5nzņl•ö8R•ĀVČô'lɊđ(âÁÄÛĐ VDKbĘûĨ=˜ÁÆĪ~åė‚kg[BLKIENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR*L3ą pHYs¸Œ¸ŒĖöģ/IDAT(‘cø†EŌöŅ‹—ŖzFP˙ 8IENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR*L3ą pHYs¸Œ¸ŒĖöģ/‹IDAT(‘ÅŅą !P# JF¸QČfĮhŒr#PRœ¸|ۑ˛ABķ ôŋĀÃ3đ'š)&œæŖˆ™ÄÍËG#‹ ącW÷*Ž,ÄÆĄØ^ĕč—ēø„“iēØž[đ\ö–ꝍD7MIôX”Í’šõB6Ÿ4° ¤¨GĸŦrÛ7~ ›jÎßūĘlĩ{TĢ›IENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDRLš:đ pHYs¸Œ¸ŒĖöģ/’IDAT••Ī1ƒ0 Đ_uH6V6ŽÁÆĩØHՁ‘+õ"éÔ5Ŗ„ë„T*TŠË›l¨ĒāƒĐ 8AÆEAzŌb^QcÔā1i$ɪҌÎöĄįx#j#ĩ;ą7Ã-M×Ģą8RŌŲŌ4‘˙Ũȝ8R0‘‘<ČëXđ‹g)]` Ũ‘a™žú—7eëņ°z1ūIENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR:Lģ™Y pHYs¸Œ¸ŒĖöģ/ IDAT(‘ĩŌ=NÄ0āĨpé#ø"Hۃ!’h .Áa&ĸ€c ĸĄ4ĸ1’•áŗ”¤úb)™™7†íāWĖqGv:GC.ƒŖŽLP9# pHYs¸Œ¸ŒĖöģ/ĩIDAT(‘ŊŌ1à P#ļrJ…‹UĸR+åZTššAFĩ]—$¤s==‰ÅüohŸ)°G _xA>à Ö+HfDėЂg‡\:@`ÕuÜŖø ž‘CŅ’cŦpW²ƒaĖ-˜ZŅ#ĒbØŗā !œāSŽŦˆäM8NÄÂ#^ƒ˜Š„˜¨:‚!(AETK€ ?Á wW܎~Á#øy$Į‰ōÂÄ$)IENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:ū¸Ë pHYs¸Œ¸ŒĖöģ/’IDAT(‘ĩŅ1 Ã0 P™˛zB/’ŖÚŪĖGŅ2zvĸ˙U°ĄC;TË3ŦoIš—Ɉ׃,d2)ŽIMm—ÍŠ¤É ž$ßzô ֞đéŒ~íE&PPî Ÿ9ëŗš’„;e\‹€É.ėĖ`”Ÿ™{Ū†šÄ°8AcNM~Āȍ_QîAųŋĢú!q8LÕļ´ĢIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒĖöģ/¨IDAT(‘ĩŅA à Đ/)dČ 9Š+ÔE—9TŽâ\f!N˙8ĩÄ@é*nč8#~H]5NîĐmā)đĸîN$Ņ4˛”Æ…Wiđt…ÔŽ+Š3ss0÷ŅLÍŲŦm8ģš5Ŋ~ų4q•˙æŸß;÷Æą7 šÃĖ_}ĩ`ą\0›A/FČĻ…/ū? ōÄ<šIķ9äõ°üíʃšĢđëģŧ¯ô §T¤Wān1õIENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR=Lög‚ pHYs¸Œ¸ŒĖöģ/šIDAT(‘ÅŌ=„ āg(´ŗĩķv^kģåh…#PRF`~ļpĩÚd§úBHČŧˆ'á Ŧ×ŅfWŒˊ2yŧ+ƒü,Ŗ :A‚‚ƒ ~S,‚ãŠIAü9Ļ[|^_îĄ ÛŨ4…FW,CKÕrļ䭋] 5ĨV\nÅš†Öä\ĩåúĩĐžūāEmĖ2īNTÖIENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:ū¸Ë pHYs¸Œ¸ŒĖöģ/WIDAT(‘cøP)0āAŖū@¨@ExūŠ2`ę?ÉÔŠĮDSÍ Š'õ˙˙aRÍ$Áš Ôu„0ՂBBČ T …5Ēh@n:NûČVĸįIENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒĖöģ/JIDAT(‘cøP)d Ŗū@¨@E ˙ÔŦTA dIÔcĸŠfÅĀŒ“ú˙˙0Šf’ė\ ¨ õФ°F („Vˇ’wøžIENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR;Lûyōg pHYs¸Œ¸ŒĖöģ/˛IDAT(‘ŊŌąà ĀĶ( ¤Ü Ĩ‰Ōp'¸9#`īߏFÆą­hƒ8Ū_ÁNŅl‚B8A"@tÄŖ,D]9&Ø= r îDڈĄ{}< Ú:ā u@ˇų@ ėD>g¤ol3đ;Ä Zė7!ˇx„¯ŧCEĮ8ŽĀĪ(nÆžę2CĶD×R‚!yC^ ŌĻüY“i§\€Ņ˛ŊÛ$§ômT?ŋ–áEŅŲioÍhIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDRBLņ%\5 pHYs¸Œ¸ŒĖöģ/JIDAT(‘cø°ą€ā˙˙Ā`ũa°˙˙˙ƒü† õ@õ ö@Ŋ`Ũ õCŸD°ŪĨžGŽsĖ´á€ÄŸÂˆÕåķæ˙úđĐIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDRL_J´ pHYs¸Œ¸ŒĖöģ/$IDAT•cø˙˙? #ƒ? ö ˙ęūō2@ö3‰mˆ›ž Õ9]IENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDRL´$ņˇ pHYs¸Œ¸ŒĖöģ/CIDAT•cø˙˙˙q€Ä˙v Ä~ ņ@~dö¸ˆz8ņF‡Dũq !Ī$øA„<ˆ¨ĀĀ(B×Ļ­9+IENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR:Lģ™Y pHYs¸Œ¸ŒĖöģ/ŊIDAT(‘ŊŌģà ĐÕ(P¨T Ĩ;ģRŽB gģ‘íÔŌ›A÷b-Ã'ƚ¯o¸‘"J2täĖSc§īÄ}í$ęEx",%ˆaî“hQᙰ ^ÂNôƒ˜a´DÔL8K† E[ĐĮ¸Å1EvŨU7]] fØĄœĄ*ĘĄäUŠĢö • ögž_ũzXÔUSŸ]‰°ķĘH„ĶAZˆrr‚ļs¸Ž)W`Ą=Ο?Éņ†¸Ā‰˙<IENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR/LÕ<Ķõ pHYs¸Œ¸ŒĖöģ/BIDAT(‘cø˙P) ¤ū0؃¨ õ`• ˙G) ę õB=ÂC‚Qā°ob‡6ÃÅÆđ…ÂU4 dŠs;p+‰ÄIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDRLLīėl† pHYs¸Œ¸ŒĖöģ/ÜIDAT(‘ÍŌŊmÃ0āŗ„.3po •ŧ¸đZ2´…iY˛ (ßIQ‚:W}Åáđ€{°”ņpL€ Kt[Fč‰cį!e*ŧ†8č5öT[&æĨ#~UFæį‰xĢ Ė+ķÎ¤ĀžŠ™^ˆp@Ιø%‘S&~Ŧ| ŪP Ŋj™Œ0t-c/Œ§–!3!m&,>sA.…ÖvŽė_…c?UšJgž•ēĄ.ôjå‡) ᕸĐĖØŌĻCbö#~ “b:l 5m …?BęÅī_õü|ŗ§uPÚ HIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRCLį7 pHYs¸Œ¸ŒĖöģ/ŋIDAT(‘ŊŌą à …ásBŠČloo3š7 #¸¤@ƒÜ{i\‡ÆŸđÄIŗ•äL2é§ĘX?mĻ"ĢnfŸ¤Ęĸ*AĪÕĨ+PžrÔŨ¨ģü´™æ ũ×_EjPō”ƒŽ ĘT¨jZMũūĻHiĤČA1eJ#&PĢI#P¤ö%Žš LĒŧLMžÔŠ3´Sé J LĒõ§l]•:ÆÄD•Œ7ߊ´`š2ÕŪįŗöW}×˙įjŠßáIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR>LP9# pHYs¸Œ¸ŒĖöģ/ŌIDAT(‘ŊŌA ƒ0Đ"d#xÁ‹^L0ŊYŽ’#d9 1ũ3–´Jˇ­n$™ ķƒz~;>p'20"ā\á!Ž ĸ ĩb"ŌRk DÜxĐZR܎ÃY]ūžjq"VČ =1Ŗ"1FdCjčĄXēĄ{# ą]7`_ĀēK÷ņŠŌ#Nw¤#’ !7ĖČႴĸøÄwˆŽˇ>tĀ NūЛš…Ūcė!SdĄĸÁežO›&ČŨÎ2EČ-å–ûf(Ė˙|$éūZū†'ĐŧÍW-úo°IENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:ū¸Ë pHYs¸Œ¸ŒĖöģ/qIDAT(‘ÍŅ1 €0 Đ/-¸ŧ@"ôb¯æQz7;”Ö&ŠPŅÁE0ŪBÂGĄJ¸Bå% ՞"LP9# pHYs¸Œ¸ŒĖöģ/ūIDAT(‘ĩŌAŠÄ Đ dđ šÂ ‹5Äž™GņÂl\8:ŋ*ÆL†Ūv˛y V‰ŋP/ã p Vá#ā ׈4ԄˆļV,„ßjõáv4„”LCF´.SĨøyjHVzbET8bQ<žc†t`éŽņ‚SDbŋ HŸ€vOã¸;â ˇü‡?đ€ˇ7„ĄcŌGx"EžäyëKX` ŗ(rÅb% öČ“cÅ(Áyžģ$ČŨ/͔9ö”{î›"ahCÎi‘Čū\rl׿į8žÛØÔôÅ×Dn2Ōņ[#ŅsûxŒ_Œ6…kHwNæOūz+ĩ u–āŽIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒĖöģ/¤IDAT(‘ŊŅą Ä ĐQ¤9‰X$R;)Œ–Q!%ŠĪāī‚\uÍŅLP9# pHYs¸Œ¸ŒĖöģ/zIDAT(‘íŌą€ ĐķYP2‚Ŗ0tŽĨĪEŌ‚GŧDm”–ÎTŋ Ą¸ƒ\SđGd(|’ *"ąrËöļ0+âIáš…ŋQËôĀ3Č‰ØH6ŒL0™§S$8ēĀ•­ đ† ūkŨĐÛ­ļôĮ äÄōŋœČ)IENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR:Lģ™Y pHYs¸Œ¸ŒĖöģ/°IDAT(‘ŊŌą Ä PG)QHWd-G)n ؀’áŗ9’ DiīW¯°ž~a oîPDP3"N|‘B”!÷Đå„TfÃÍ?8†mH‚Eā–( °ƒ CCäž*4Ņ&ˆWė3ŅKk…jČ ŨcâĨ]L4đčl{,.p=ĐFęá?DŊHķûĀ: += LĻFØ\ÃrŌ#ļááIūˆt}į•9ÜąIENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRQL=ŧfŪ pHYs¸Œ¸ŒĖöģ/âIDAT(‘ÍŌ1à P§é ¸F7.V :åZ¸HrF„kƒ›ĐĻŲkÉ⁄đÜĘÃÁĻ@!jD¨õé"ŽV'å!dÅ{™œŲfw~{ÜÍw˛õP†/s‹ųäÄЌ´.Wę¸ŲaÄæāÅžˇÃ𴸊§ëÅāĖĻ3v8瘍?<ą›mRbsæäč4;öÖą7–Ą˜Ŗ×͉Œ V39Ûæ@3ė}¯Îjbģę‘üŧũ°Ū\ØËĩfŖ\Ėn ĮŪ ļmbœ%vzÛ}yܝÅ4¤Ss˛ØĪZq`ëŸŲūOŋąVp„ŲĨtØIENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR5Lå°ÂÔ pHYs¸Œ¸ŒĖöģ/ÜIDAT(‘ĩŅ1nÃ0 P”Mk†ēIÕcu“‚\LA/Â#hä ˜ũå! 2V˃!Ûä'IįzņøBŧšÕnšYTĢĐ0ox˛ękŌ#Ā#ä¨c) ö ’ĄėÚ‹ËæØ”Õ}˜‡•ļ>¨œ†iũŒË4m._ŗ{)ĶNú¤lîØ—ëų ŋú÷ƒürúåu:¯zė}<ē÷õŗŧ#‘PĀrÄS°|ɕŒD6ŦտҋËHdsjĐævCĨč{č6Wtß1į# #8ĸ%s I˛ßÔĻW˛ĩ(á÷íž˙×_eíĻžÁ›­ĩIENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒĖöģ/ĸIDAT(‘ÍŅM Â0ā)-d#öB."äbB ]ô^ĨŋÔd™EČķM‹Škq6ßjū9ĸė^‹žĪˆĩii z¯ú“Íôg‰2ÛER õFēŌÅŨčŦ˛Ąl”z ’U[D5R§6M ŧ Ļ xĪŽÃZŊe7WMvŗ}Ö훡sE)ę¯ĻŨzŸ?÷9/öՏ?˙ÆkŨĩx2ĨIENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR4L rŠę pHYs¸Œ¸ŒĖöģ/ŠIDAT(‘ĩŅą Ã0 DŅ3\¸t6đ Ų@+ey4âTē ¤wL‘ )Ãæ5— bp>5hž{ƒ-~,,áVĮčxPC{ķšd›åš¤Ģ_žlRI¯IENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR*Tܐ˜G pHYs¸Œ¸ŒĖöģ/IDAT(‘cøFŠáDá´ŗŧ1ʀ“¤ÕÛIENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDRTuäPĶ pHYs¸Œ¸ŒĖöģ/?IDAT™cø˙„~0üĀđ˙Ã˙&†˙l ôáũcøDv Āč5ÔACû?{ˆ!C nŧ”ˉú7ĨIENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR$TÂY¨ô pHYs¸Œ¸ŒĖöģ/yIDAT•ÍĐą 1ЏR¸ŧ<ʍæÍRq”()Đ>ÍĨHę„â D†âĮšĐ‰‘]áĀϰq4Å Ma7ęé3ÎwĨæ|ŅJĐUĸ§.ŦÚF×Nį¸<âR>x–žĸæ#”ũãN{ŖĩebĪlņ&¨PođmúSëRŦđVåõIENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR+T3Rķy pHYs¸Œ¸ŒĖöģ/ŠIDAT(‘ÍŅą ƒ0…ág((oâUƒ)‹eā’ų¸wļE)U7_aÉōáI§qôŽhwå‡ĀØ1‘„‘Dôd…#C™ŌÁŒ‘UqŠ7ĸˇ7ôIūOšß¨)ą˛U/ôg,‚ö!ėA‡Ŧ‘œ5āˆĮ@ŒD¸ĒļąŋãVۀŧ‹#lIENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR T˲Ž pHYs¸Œ¸ŒĖöģ/sIDAT•ŊĐą Ä …áĨH™…Ņ ›q›0× ņb"å¤4WÆÅWXz–mdŋ j€ĘdÆĒÄđÖčA•ôĨFųĮgN؟¸ŋđ$]ě&Ū(›QWŖ9u:ą2Ø–v(ĪÅ+v‚–÷žv/š!BËyöIENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒĖöģ/IDAT(‘ÍŅ1Â0 Đeč7 7Ą×bjĶ…sų(\ c†ĘÆ?ĄR„ŋíë[†q ¸Ÿ•ÔC‹ĖDq" šą*ŅÁÄŲGۜ2YqļÉv'/5%ˇ0ų`íž=Ō›å€]RĢ$c-(įZ7ö Ņîl 噞s ~pÅ Ėđd JJ<^õ—ŧ)ۇjJ™#ŠIENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR#T …ŗ pHYs¸Œ¸ŒĖöģ/‚IDAT•ÅĐąÂ0 …á?GáŌ#$›x•lŗ Ŗxā2…/‰ÔQņ*IOČ˸ZŲĸIî}܌#i2FV5öYmĨ—ĐŠlÁļ°šĐb Uęŋäôŗ|>¯í˙Ŧۗ%l§ķ[Ëԃžt,ôIcagë+ƒė— <…*Ųí”Č›ŽūųœQ‹ÛÖėBIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRT´c pHYs¸Œ¸ŒĖöģ/TIDAT•ŊĐ1 €0DŅ^+'Ķ@.oĸ7H™"dÜ XĻĐæUʤŒŅÍŠ›QŅeN,/ú4'dâ`ūå;šSØ­ëƒ<֯ܘķôā(‰\IENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR*Tܐ˜G pHYs¸Œ¸ŒĖöģ/ŊIDAT(‘ÍŅ1B! āFŽĀQđfđâÅpōÆ02ęßV1ÆÄY–//Ą} ąœF ĄSÁwÂYq 3-ĸĖBĪ\KŖ[æ& 8oZáÛ/ʛüĸą6ģ‰Ī G–#ŦĻ’ 4gušú•ĢÍ••”i Ŗ?ą+2V1Ž€`xũƒĀ•Čá œ6›„‚ 44¨gø/Žüu+lĐsFŨËHē YâV™Á/gŗëĢTyŖGIDAT•cø˙˙ æ˙Áđ‡ˆ™0ü@ >H$Ą~ ÄÍŊ HdÎ?:c*`€(÷“‡šÃ,%ūIENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRTLƒáˆ pHYs¸Œ¸ŒĖöģ/SIDAT•cø˙ŋâ f`@Å PņĮhęqá?@ü áCÃ$üŸĄaÖ`ōH˜ˆ™‘0;ĐOüüGžá‡}ÃúP10˙oÍÚŖIgƒ>IENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR,TŅŽč pHYs¸Œ¸ŒĖöģ/•IDAT(‘ÍŅ1 Џ)ņ9JŽ”€ãÅČx‘tļ[R0 üĩ#ÍcØ]} Cę ž1×ÚīiØUĪ rn$kįMxŌRWR6b‘J} šx‚‰SڝKʒ•ķ ĘŠBEeĢSu¨D’fŸĢēVķĻĢgēšáúžÄŽ1BO"ī?õ4|~ėīxT<‡§ĉhIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRTEhAō pHYs¸Œ¸ŒĖöģ/*IDAT•cø˙˙Ã˙Ã?ū0˙``@ ūŋa‚A~ųĀPÁ`?ͰæļĢģ1kâIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDRHT ‚L pHYs¸Œ¸ŒĖöģ/{IDAT(‘ŨŌÁ Ã0 …á?ÕÁGāQ2Z˛˜Fé†^t0Vm§…,P(Ņéŗ@2<„‹ęՖŲĀc­$§J!ŅÉĸÄBĘE†ä)ģ-N{$“P隓mĘûÇÆŪÍķv•Ėŋ>ĘîzsŲvVëŲj„3Gåĸ?¸ƒßë bđv1qŠIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR/T:šS pHYs¸Œ¸ŒĖöģ/`IDAT(‘ÍŅą €0 DҁpÉ0J6Æ(éh))"‡ ¨čãæU'Î?ŖEö9ˆÆ!‰Ų@6ÄŅ›ARgœ}<ƒ‘YŗSSNW ōĸMSëęBĒ#čŒEyhã+˙\õÜĨ´ôŪÅxIENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR(TØeHz pHYs¸Œ¸ŒĖöģ/~IDAT•ÅĐąà DŅĪԁ)…Ō 4JĄB†ÕÉ#i:ÁKo?č|ŧėϘƒh6œébQXQ-1“zbdH7ŊhzÚírT]î_[ũi‘Üe}ôÔŦmˇ-iŲžx:ĸĻ- ™éÕmšÕX oÖo]'ŸŊáí??uĘSˆŪŽĖāIENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒĖöģ/IDAT(‘ÍĐ1Â0 ПzHˇŽŨrnšVˇ"õbå&‘¸@FQLėT „ØĀ˛lĸÅøGn…Á”á §€˛3V  ęåŌhŽՉ¤NQéAk{§|Áøž_Xúž“ÕH'l‘Žl9we“I‰5(>o ôö)ŧBG4ė=?ĸtØĀôä`ēÁÚę„IENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR,TŅŽč pHYs¸Œ¸ŒĖöģ/†IDAT(‘ÍĪ1 …0 ÆņO:tyā„å]ėuōZ=JÁ \:Hc’ēōpĶ,ŋ)ä°á•İ n āj$6fΞP{.ÂxĘ× ŅČl¤ĶŨmđ‡8žhI)X§@šä->;Nš‹úŅx`ĐW€Ÿ>čGgPo´ ĪQÔ)RŠƒ9 …%ČĐIENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRTVŋ pHYs¸Œ¸ŒĖöģ/QIDAT•ŊĐą €0 DŅn؂Q‰Äb)‰RϰâØ"3¸y翤Ķaf<>=°ģA—”…ЇąŸWqŦcķîdĸACz \$æLŊ\͙€møIENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRTŊˆē pHYs¸Œ¸ŒĖöģ/†IDAT•ŊĐÁ Ã0 …á?$K  ˛ˆ ‹ÚŌÅÜM :‚Ф &§†žōĪ˜ ĄOœPüIENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒĖöģ/ŠIDAT(‘ÍŅą Ã0 @ .RjĸĩŌÉ]JU¤pédĨcA I†dņ×}ķ@„ķāĨŒęˆōp"*yîtæÁ¸•Wxį6X˜ŲHäÉą‘)Fh‰Š†o¤ €ūŖ\ŪB3Ļ—Đ ˇ ˇ)°(ķ}”lÄ#ÅHJũá¯üã ŧųņAIENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDRCTņbˇũ pHYs¸Œ¸ŒĖöģ/ÄIDAT(‘ŨŌ; Ã0 P™˛”ú>Š{3ģtȘ+:dė\rgķ`ŦĘR>´{ĄTô@ÆHF€køO=X4N”khėYQ!Š@€Ô ŌšČĸ›HąJƒĨ^%ŠMTĘôŧūP‡†ä1]\Y5nŠÁfKŨ˛ëLvŦ9šÄ˛wRí>Ø)éC‹hH+š!oŌš›EĻ4ĸ3ŠNŒél‹,ŽjICUn‚ˆz÷Z„čMU!"õ&ģ)°ęŸŠŽÕíęwũÂF|E/΃í¤î#IENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR'T)n÷ pHYs¸Œ¸ŒĖöģ/›IDAT•ÍĐÁ Â0 Đ*QnYŅMšU˜„ôÖĩZąHŲĀĮŦ˜o`ˆ”wpdû+0žŽßĒÅÅdũdS:Z›!ƒÉ-ÔdG;öđɋēŌĨdē͓{skĄrŠ.|KKŽ_{T,^;ęG…÷ļģĪņɯpoŖoՁޚhî´gc ĖYlaæÂ,Ę,ØĖŽ3¸F€ūÃo‡ozcNÅ* IENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR,TŅŽč pHYs¸Œ¸ŒĖöģ/ĸIDAT(‘ÍŅ1à PGs…+õdë˜+QeČ5ˆ2tu7„‹ŠFĘęÁoō—-Kü/(­&fxfO ¯ÂĖŧ¤O‚Ü)K ë”TŦdaål—ßąÉUĸl”]’@øQÄål\ŗ ÉŠIė 0ĀIENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRTŖAŠļ pHYs¸Œ¸ŒĖöģ/KIDAT™­ĪĄ!CŅīVRĨPÚ *Ŗ“-‰`ČƒÅ1ķTL$Láĸ~Ô´´)>ĶÃ22TŖĖ°“÷wE-ũķˆīSYčę‰vjĸžĩ4"IENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR*Tܐ˜G pHYs¸Œ¸ŒĖöģ/WIDAT(‘ŨĄ€0ÅÂ!*;ŖĐÉ ÉJŸMū•\°E˜˜˜ ã÷Ú¤–hŦēáfR…ʨ’( OøBˆ+3—œŅØß<‡D4‚äŗqvqԝ˜Įk~øcIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-20.ps000066400000000000000000000006241506303110300175410ustar00rootroot00000000000000%!PS % chars-20.ps /inch {72 mul} def /Palatino-Roman 20 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-20.tif000066400000000000000000000117161506303110300177050ustar00rootroot00000000000000II*& 8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų Ë˛ĀeĪ!’ .C@ū@đV˛܁āŧ<Ą4ŌČ ÚiäĄ T¯ xi9ÃN„ ܂ØoMSLƒNš‚' ŠVČ2ÚD5肥Á ĐA_ ŌpAá¨0ƒH ô›‡‚ƒeađ@ UJAޤxÃͤ›ŧ „k„ 4|ƒ÷u‚ ¤Ōn’G†Â ĐiaÂ>6Aŋ˙‘†“z8Ũ%d4ž´l5đ‚¤6‚o˙Ņį%ëi vĶT’l*hКč-Ũ?˙„›Õé&Ķ­&Áy˜ÜoÂT­Ģ˙[Ž’OĨié%„¤fĀŦ)Ā0ŠŌŋĒé/ßúWēöāēnhÂéR­ĶîīJ–ÕZK­[~— §¯é*ĒužŊ×úĨpÚI+l/}Ōôĩũ˙ũŌúĢ2;뛎Ŋ.—K˙ú˙ô•[ éęëékũ˙˙ū—׆=[˙Ōôēũūšõ˙ô’KČkb_Ķ×úëëûõ^>—ûa_ũq¤žĒŽŋũWúí$—"Ū’˙˙Ž–Ŋ˙n/îŠi%VšcõãézCŨˆ˙~éVā“˙~’_Ĩi_ô–”%ęôŋĒũ%nŋûÛK´‡¸Wûū—‘gÕĨûūę”UmzKúKāĒ°ŌŋČ „-ŪÚ[ ]Ģ˙ŌJŧ ꡄĩúVö *í¯Kũ$ŧ&¤Z+ /õāđÅy Úxß˙H/ˆxA¤Ä&˙øÃ’Eé~ ’ZáO¯û%ÁššÖ˙ũĶŠy˜­$Ô0ī˙’`P‚kŧū”pŧ'L6×ũ‡ŖĘltŋí.čņ5Ŋ~¨0ŌI˛ ņ.˙ũ$paũ7@ÚAÃÚ_¨o!‰Ĩxū—éAŌÚtŸGa„ž—!Ē ƒIß˙úׄÚA n+˙!´Ÿķ &˙Ōũ'Ž÷Tƒl/˜m$m+üųY€Ÿé6–õŌA°Ō^@üŖ¤Ūß˙ū“˙ļ•;_øm%ĩoū’ũ+KëŌp`ŋ÷éë˙_ŽĩČŖŋ¤“c_úK{uũ%úŧGîģ¯ûū­ū@đŲ‹ˇékũ+ũ<>šéS{køĨúZūĩÖ?úûu˙ú_úJë˙Ĩũ˙ĨŽ–õ˙×˙ūÚO_֕×ũôŊ.¨†kú_m­¯ū‘Á˙˙×Uú˙nŋIŋH-uŌõ_ū—ėW˙ZNšˇĨé˙ö×é~•×͝édô’éßŦƒ-îē_ˇô•¤–ūël7đR†ø•×MĨé^¯ĨõŽ’WÜ;\*éuļ“ĨZIi­_ũ7úM&ŌŌ-]ĨõęŨ%úúI:L4;Öžū‡iv“iU¨Kū–ÚØG‘ŽŌö–­¤›a&é[I˙I&ŌgV˜Ģ_t›I5†¸a&ÂJÚA/øxKmÄ Ķ×^ÚDR, Â!ŽNNi´Š†AĩėD$˜Ļƒ ū’`Á-bļ!0`’°` ļĢ a!H5†!|.¨1,DHj萆0¯Å ÂCBPY ĖŒāŋËžĢp2(āĮāđĮ´/Õ,DDGŪ´ŋTŋnŠ/Ō_VúKÛI/ú¤ąm%Õ-ēam¤;imĨŊm5ˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙äĒŋČƒLČ$ä2Aha`b˛ed-ˆ!ŸČƒ p‹ ¨$Ģå‡@×%Ą –ŠH…@0U† €\Ģʀ č ŽjCP`ę D@i•a¤DÁĢ "(  ČĄ‚ÆĀ2'!‚öCEda ÚŅ2S!°Á Ž1dXˆØhœ4ô‰˙ÚŪr.AÁ„+˙ō \:æ€xi >ÂÂ˙˙ŪpÂA˙úá5ĩëL ėƒ  Eō i‹Ę D3!šA ÂfC0„h¤€Shl†œÂ' †–„B' †–„@Ņđüƒr4ų Ķ2 1;GÃCĒôÂ$ C3a!˛™ š{4!{M4ĶH&ž›iŲ .Đ mšė ƒí4í5aĸD !)đË×hĐwƒ ƒää[oh í4ĶM šm'h ƒ Ãan ķaƒ@ÅĒ}փi7PUķ‚°‚ 5ÛAÁŊü$˙KûŌom&÷IëëÕ´›J’ômŊÂMaŋô˙évˇ¤ÛH7ļ“īûũīOé}:7í Ŋŋé/˙KûŌoŌoŌ˙ûKZm[K˙t›_KÛ˙I˙ôģīI÷IŊžŋ÷Ûũ'­/I´Ūëí˙Ĩ˙ézͯWŨ~ŋ˙uÚˇMĨĨū“hÚũ{õ˙ésiÍŽŪ“{¤Ūõ˙úëM¤õĨôôß~—ŋú˙ú_¯Ū¯ę˙˙û×~ļŊxęé?¯ˇŽ)ú^Ũ{}_Õúŋ˙jÚíĶĨ¯é__˙ú õöõWüG›UŌn…/! n@đĐũ>ũ$;úC˙Ĩī^˙ß˙õ÷MĨj—…ƒÔ†(Oí/˙˙˙Kí}Ŋ'ôŸ˙ítŸozKÂÃĒ īˇĒ÷ë˙Ĩī^ßß]õūô˙éZUáaĒA›ôžĢ¯ũ/ĩû˙˙[ūÖöŌm'UđXu ›[īĨ˙˙ôŊëÛÕõWëũũ/éēKČČ5XH0ŌŌéŌ}/ōã!ž˙Kí}úú¯[˙¯ö×I/A„Â0ô’ũ/ŋ˙˙KŪŊŋŋīĢū×Iĩt›Zõ°ZĮĶzUŋũé}¯ˇū—é0˙zoę뤞Ķ ÁĨĨëáŋ˙˙č/ëīWõ}(ßūÅ6’˙„aĨĨ^Ū/˙×˙KÛũŋôŋIšgĒ_ái%ú\LŸ˙ø˙KôŊ˙Ōü ¤ )˙˙IĻé/đAĶ+Z_܁gđ¸_ũ}ŋÛ˙ ~B”€­ûWIŊĻԝς :úŌx?ã˙OôŊŋōĮæÕƒũę˙ŋ_z,0Ō×ūf˙˙ņ~ß÷ū×đL?ī˙m´’öh °ÃKĨI&đa˙üĖ˙Ĩí˙Á~Đo÷KI´¸ŌņaƒK˙đß˙˙ߡû˙Á~Ø7˙ŋöÕxAaĨ­{xoęff`G˙™īõö˙ĮöČ)„ũĩĩôôŧ ƒ /ŌKßũ÷˙öũëÛ˙ũČ,'˙Ž›I]|@ÃŽ—ū˙˙˙öū×īēîļČ-˙˙ͧI| Ú_ŌMīz˙ßūßŊ{˙ØÛKKŌwKáĢŌXû~ŋō–A#˙oí}˙˙mŋũöõžž}ū“ß˙÷‹˙Û÷¯ol?í­Ž’Mé|0_õ˙˙˙˙Ûû_oŌôˇ˙ë§ë×á…÷I+ûël†’?öŊ{}ũũŋ˙÷Ģz^a÷ĒHØûëøũŋŋī˙ö˙ÛIŌé&úđÁ„ģrë_÷×ģ˙íûĨīŊo[o˙ŪÚĨéxa„wĨǎūŋūßßíöŊû˙ˇ_ûz^d6Ę §m, Ģöú˙˙Ûũ/oëŌī˙]/K×Ãm°“„–úõö˙ü7íūŪßŋˇ^—žÚI7Ĩᇄ†*(žSû}d2ã˙ũŧ†dz_~—imËŊ´´Ŋ[čƒDx`đ‚°Âa*Ūˇ¯[ūßíūŪߡ[˙˙õé~ < › ŠúoK]ŋ˙o^+ßtŋī­ÕēãIŊ 1&Å/Õôŋŋ˙o­ũžëm-Ŋ{¨ę–ôŋ x{!§a†"÷jˇÔ=/Û˙ö˙¯om-´ļúõŨŌ}/Ķ 0‚ ļ•>­é~ß˙ˇûümĨémëˇĩ]7×鄃 VÚKzMá/Û˙ö˙ũÛKnžŌí/ĨŊ%ûÃJØK}& ØŌ×o˙Û×kŪŌØimŨm…­Ō}đÃ+a„’ŧ$à `—ė?˙o˙Ũ†–ØKnÂ]¤íi^’ū: 0—ā`Á% @z[ {ũĩ]ŽÜ6Øiwil0—ûzAÃÂØ0‚NЄČÁq 0ÁĒjž›4ô×` 0Ã$ۃ &ÍCMm$ÚhĐxT  `ƒ Å) 5‹!ąAÂŒu 0 m"87fĸD”0`‘Ĩ 9Б ElWX,2 j?k  Ä @Čla @¸bHëa… @Œ†8b…°Đ…ĩøI‡¯°’Đ`žIĀ)N ßûûû† -Á…†;×ū4"  "D‚ÄDhD80B@ą8ˆ0B ÕˆūAlŧ†Hg™˛üH ƒRâáÁ›ˆ ôHDqf UũŌĐT?KAū’9ƒôŠD.Iīĸ 7ĄĨ (ƒ_QD €•ß …5á—@Âú l ÁūŽ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙6@žˆ5!ŖEG…ĸ0A4 a3ųČKGA ˙ę訝L#ÂÂ<, ƒa$}Aza=PAŊ0 Õ/´ĶI†ˆ:L ÔØŋú°>Ž  ƒ„:M…IŦ#Ä˙Az˙ß֖ŋúWõi:O_WMū—M7MĶtétë˙ĶĻ“i?Ĩ˙í÷ē]k˙č/˙_m~ŋö×öŌ´ē˙ŌÅë]zõz˙KĒëÛŽēëN'Å$ļČjqīû~ßúŋûū—ģî—ļŋžÜÚ­÷I~iú_ô)˙ū_˙ŋũ_öŊ{ĨĒĨē ~›ũ˙˙Ō˙˙ôžũjÚM¤ô’[h^" ŋ˙õ˙Ĩ˙ũīûûjŨ|U­ °ÃA¯É õũu˙˙Ķ˙õ˙ų¨5?ÖˇM>’[hņÍy €+ëņ÷˙Į˙ûúû"§īôęÕŌA‡„+Á˙ũ/û˙˙˙ØÚVŊzĢ $đ˙ōˇ¯ųô˙˙˙öīŊ7ļô“é$ z˙ķ0SÚ_û˙ũ~ūëô›ĩĢú xA}íĨ˙ˇ˙˙˙†˙×JôŪ’~”^—˙ûií˙˙˙āßīMīū•ęĐ˙ũßė0—ūß˙˙ߐdĶû]t“mWņôŋ˙؅˙ˇ˙÷Z_$GīôŪī¤ŋ˙Ōũŧ0ŋö˙˙˙đí+]$›ĩ¯ũ/Ũ˙ Â˙ˇ˙īõûūûÕéoI˙Õßéūß˙õĢ~AŽ?í-_Vũ"G˙úúŪ˙Û˙û^ŋß×īŌĻÛI˙^›Ŋôŋö˙ũũo˙ĩzzŊ+ôŋ˙]+mo_ũŋ˙ëĻ×ëûXØŌ{TĢ˙ĩ÷ĩõ˙Û˙ûJŌ×˙WĒĨmŠĨ˙õ´ļŒ+d6¯ūÃ˙öûI†ŊĨmŖ ēW¯˙ļŋi7a-°Ŋ˙í˙ûĨh+_ō(öŪ´›i/˙†ᄘd0ė0— yû˙iZL0G?iXNKŽ•ôŋū!h0‚a…b­†XwkĢļŊÛiA‚ ŠÖŌb˜¯Ū­¤öŦ¨Š`ÁZ†Á‚Aa‚@đļ0@Áƒ6QL,"œ 0•Tĩ„˜zūŽmŧ@ĘCa{ AyĐ0K†‰ ‚† Áp@į@r čÁ‚ Y €åL(:Ú Ã×˙k Đh0ļ ˙°_ūÄ)ôƒ ⚠o]m?ūC@ 4 Â؈âˆHeƒ ,C īˆãâ"@“„‚Æx‰ hėG x~˙AÎ||ė Ÿú˙ ?˙úOú_ä ˙˙˙_ũëúëŌĩ˙˙˙Į¯ŌzÂú˙idŊ*ôƒi˙ļ—ļ—ę%8"ālxũzB;i%ä Š×´ŋ´ļÂIz°Â %_a„‚I ë Bˆˆ ø:à ÂČC9Ų Ã0ą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ā L ssžÆ(ĀĀleptonica-1.86.0/prog/fonts/chars-4.pa000066400000000000000000000325751506303110300174530ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRëMS pHYsb&2 IDAT™cøĀ€ĶŠđ6XIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒĖöģ/IDAT™ch`@€ <„ 1};ŪÁGķGIENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒĖöģ/IDAT™cČ`H`ČÂØ žž A†Ÿ‰EIENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/IDAT™cx˂gN2Ü’ŗp2Ãf†˙ œi °Ē5&2IENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/$IDAT™cøÎpa+nghghdøĀđ ˇ002 Ą2}ĒIENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒĖöģ/IDAT™cxĀpaÆ84ō7Å.q?úIENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒĖöģ/IDAT™c0`ØĀpá>@‚€b6Ŗ^ ¨ũĄIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒĖöģ/IDAT™c¸ÁāÁ ÁĐÄ'~ CN Q°E.ŖIENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ‚ߥÎ‹͌ ŗ,ž“|IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ€ 0L ˞ a{VaIENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒĖöģ/IDAT™cøÁ€ Px?ˎ ‘įIENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒĖöģ/IDAT™c8Ā€ AĖœŪ ÁąŸĶēIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR- pHYs¸Œ¸ŒĖöģ/!IDAT™cøÁđƒáà |„w€pÆ üÄÎ áŲ‘‚IENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDRzč pHYs¸Œ¸ŒĖöģ/IDAT™c8ư‰Á‚Ą‚ĄmŦÚū sô‹+ɲ*IENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR- pHYs¸Œ¸ŒĖöģ/IDAT™cøÃĐÐÃđ 20üA´Ö IĈXIENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/#IDAT™cøĪĐ˰‘Á’á'~føÎđžá>C#Êö •š–TIENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/#IDAT™cøĪĐ˰“a/ÃO†Ī ~0üÂJv†˙ ´ļ —Ŧ¸ęIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/!IDAT™cøÍđ_3œf¸Í°›Ášá7>`ø‚ļ <•FIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDRzč pHYs¸Œ¸ŒĖöģ/IDAT™c8Āа ›v0ü† †6† ž& !`ũĸBIENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/!IDAT™cøËđ™á=Ã}†ų Œ 2 v`8—á0ÃŽ ’YŲw˛IENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/!IDAT™c˜ÃĐĀ`Ã`Ëđŋá{†ķ ÷æ3üAšč ŗˇYËIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDRzč pHYs¸Œ¸ŒĖöģ/IDAT™chc0b¨B#†6†&† ´˛˙ _2Éž'+ĨIENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR- pHYs¸Œ¸ŒĖöģ/IDAT™cčaØÂP…  ž0ŧa˜Ãđƒv 9îķéIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒĖöģ/IDAT™c8ƒ €Æ„ŪAq•ŋ™IENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒĖöģ/IDAT™cøĀƒ€Áž„Įž đvŨIENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/ IDAT™cøĪ˙~02üaøÁđœa>ē' JC"Ū§IENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR- pHYs¸Œ¸ŒĖöģ/$IDAT™cøÃАĀPĀđá Æ; {€đà üÃđĻ Ącä’IENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙áCÃq†ųv`0R`HK`đ"†&†ã>0•ũ˙svΘ#ĸIENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙€á÷†Ÿ>‚Ņ0ē—Āp á~Ã~’g`*û˙$Htæ­ŪIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/'IDAT™cø€áÆs`tæÃ Æy(˛0ü!ŠđûæĶĮīIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒĖöģ/*IDAT™cø˙€áƒÃķ†ûæ?`°GBō@"Į0<``*û˙Ë ´N–āIENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒĖöģ/+IDAT™cø˙ƒÁ‚áŧÃų į0œ€„€"7Î[04T0•ũ˙ØÜ$›<ÃIENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/)IDAT™Ё 0€<­Ķ:Í ę¤V!¨ ŋ/“†„ŨÆĢw‚‰5ū¤IENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR ŗØ  pHYs¸Œ¸ŒĖöģ/$IDAT™cøßĀįÎQk`8&ĪÃ{Ãe/ Ģ›bjIENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒĖöģ/)IDAT™cø˙áƒÃņ ķčƒũb` Ĩ00•ũ˙ļ|¤6ī"ŌIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDRüoÃŲ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙‡áü:ƒÂ"  ˛˙Đš?ČĮ¯VIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒĖöģ/IDAT™cøÁĀĀp d`øÁ𝠹á+é„IENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒĖöģ/IDAT™cøÁĀĀpŧ N 1ŗÉŠãIENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙ŊáŧÚ†3N~`8 F@ J•ũ˙ÜUĻ".˙ IENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/IDAT™cø€ũÃy\¨„€ĘūęÛŊëtIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDRÅr‚ pHYs¸Œ¸ŒĖöģ/0IDAT™cø˙Ÿ˙#ÃųĮ ĮÁčōeēŊ™áæf†ģÅ wŠî}fč{ĀTö˙?ÜEgí0ČIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRüoÃŲ pHYs¸Œ¸ŒĖöģ//IDAT™cø˙‡ŋáü†ão.ŋa¸ FwŪ0ÜËa¸¯F= ũg€Ęū˙&Š l[IENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙ƒáƒÃy †ų'æ`°ĸP$˙$x\‚áAPŲ˙ŦdŧaWkîIENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/$IDAT™cø€ÁáÃy:įĀpâÃy$Ä~€á?mûR~8:ķIENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙ƒáƒÃy †ų'æ`°ĸP$˙$x~à †@eŽËūƒĮAqIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒĖöģ//IDAT™cø˙€!áœÃyJ`8ņ€á↓Î<`8—dg`*û˙”ĨģåvˆIENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDRņqŗž pHYs¸Œ¸ŒĖöģ/$IDAT™cøĪđáÃ>†ũ@ØĖp€áÃ? ÜËĀĖđŸá?ļī ōīęuIENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/IDAT™cø€Š@čķėčÁ†˙ ÅØ\ĩj,áIENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒŊáü œčø† @e˙ ãO*)IENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒĖöģ/%IDAT™cø˙aū†ķĀȀáy}úB?ač?Íė.ũü°IENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRÅr‚ pHYs¸Œ¸ŒĖöģ/2IDAT™cø˙Ÿŋ‚a~-Ã<[†s@´“áėl:y›áņa†ĮĮž?gøūž¨ė˙¡ƒŲ'IENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„cŖ pHYs¸Œ¸ŒĖöģ/,IDAT™cø€ÁžAîÜ g0<†Ą‡n‚÷`¨s`*ûĀ;ũ.›ĻIENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒĖöģ/+IDAT™cø˙€Ažaū†ķ Īž=`øđ€á㆟HčÁ†˙ ķĒ=šČЧIENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙€ĄaŋÞ† 0ü|ĀđųÃs0:€aū *û˙ÕR}ŧņ‘&IENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒĖöģ/IDAT™c```0 ( [ū@œŧ?IENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR- pHYs¸Œ¸ŒĖöģ/!IDAT™c¨a¨a°aØ„w€đ >aøÂđáū›Ö ņ^ļFIENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDRŌ‘0û pHYs¸Œ¸ŒĖöģ/IDAT™c```˜„°Ā  §ĸ ážļõĐIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪđá9Ãa†Û sö2Ô1üG‡úŽKš(›IENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ€2€HņÍ̝3IENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒĖöģ/IDAT™cxĀp€a*0$0<ĀĖâ \ęIENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR9Ļ‹ø pHYs¸Œ¸ŒĖöģ/IDAT™cøĮƒm E Ÿ1X1TY0qââ ÉCĮöIENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ`ΰ 72ô0Ėc؆{šūC Ę> Í:•ŽKIENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRÖd⯠pHYs¸Œ¸ŒĖöģ/IDAT™cøÃƒ60T0ÔĄ 6ĀÄāÖ ĩĶõŒ!IENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪđ“á/dØÉP …– - ˙!æ iÚĻÍIENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪƒf2ėa``°Âų aâãé ˛šöIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR=S[Å pHYs¸Œ¸ŒĖöģ/IDAT™cøÁp€aà œÁĀĻ!P‚á‚ ņ÷›cIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/ IDAT™cøĪƒ­  Õ@hÎĐΰŸ‘Á’Ą­Ę, ›õ锯IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/!IDAT™cøßĀ ßĀp†.60œi`¸‡Šø€Ę`%lšjYfqIENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒĖöģ/IDAT™cxĀ „ ô8d‹!”b Á“Âĩ€IENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRŌ‘0û pHYs¸Œ¸ŒĖöģ/IDAT™cøĀp?á ŧ€'æ’ Q./6ÂIENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/!IDAT™cøĪ`ΰ ÷2ėfXÎĐěv2Č0ü‡@Į U¸Ø¤AIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒĖöģ/IDAT™cx ° d`xĢâ Á”›0IENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR .„1 pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒ)K0Hœ`ØûI<@VÃküLwŠyIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ€ŒxîĄ">d5+ŦyˆđĻIENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/ IDAT™cøßĀ€Œ60Ėi`°a`°#9÷ Šō›Ãâj/IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ€Œ&40ô50Üg@ { "+ĩ1ođ%DIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪƒv2ÔBĄ%C+Ã_įE šąvIENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR=S[Å pHYs¸Œ¸ŒĖöģ/IDAT™cøÁƒ  ;ā&Öz ‰#HIENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRÖd⯠pHYs¸Œ¸ŒĖöģ/IDAT™cøÃƒv0ėahŌ?*X`âōŌ ÉˆÃ6IENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRŌ‘0û pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ‚€p˜†ĀˆĖĪ qįŽVIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪƒ–@¸ w2´ĀÄæ$ ›‘œ8$IENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ€Œxæ50Üm`8 FÁč;Š<Ö֞@í IENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR .„1 pHYs¸Œ¸ŒĖöģ/&IDAT™cø˙ƒņ>`˜D/Ne0œŠ`8.Áđ܂áũd5Į–uŖIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪƒsî2œfx„‡n2ØĀÄüâDx4rIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR 'oģK pHYs¸Œ¸ŒĖöģ/$IDAT™cøßĀ€Œxæ50Üm`8 FÁč; Ŋo`čo;FÜÛËĄIENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪƒ ;>3|gxÎpžaLüto¯˙âIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒĖöģ/IDAT™cxĀp€aT@á`xš áĨŗIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR4¸ûŋ pHYs¸Œ¸ŒĖöģ/IDAT™ch`Ā ĸƒŖ•˙IENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒĖöģ/IDAT™cx ° @á)0<Žb At@.ėIENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDRČ­Đu pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ€ į3¤1TĸˆüíqÁŽ|IENDŽB`‚leptonica-1.86.0/prog/fonts/chars-4.ps000066400000000000000000000006221506303110300174610ustar00rootroot00000000000000%!PS % chars-4.ps /inch {72 mul} def /Palatino-Roman 4 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-4.tif000066400000000000000000000027441506303110300176300ustar00rootroot00000000000000II*&& r?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙W†8ä㐠r AcØä69 ŽC8äĄČ1 ã_h†ÎCAˆ×ŋ4O¤PúNW Gr Á0‚øĒ;Â8˙×ĸ>CĶĨ]+#‚â•[@Ž<š|Ž ÂEŪ&G0(ūŋ˙ę•[ ÕcĢî‚(}.ŋüD!~:Ĩ+ ŋ|qUõ­Ã.”mt|§ éĨ\ā`øgą_ŊpÅ#ūM.GœÄŌģ_X7 ŠtGá…ä4ĻAŖūĩÅéô_l2‡Å—‚8éSíūCXq˙IâéPp˙ũ‡úßĨ r?ëõWP@ĩJûģō9§­-#ĩęÚUi%­hEl6!ēéjÁ‚ 9ĀÎ ƒV %ˆˆ0„GĄÆ„DDDDwdp_^6’C¸Ž?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙&Ŋä2E#7!Ÿˆ9Č/BB ų a¸‡Â „ ‚ „˛,{'„â ЃAzbČ`ä>d d=–9pAܓH$äõĸ>Â1; žŅvÃ.ØečečF †ƒ4 ƒAŌAl2ķģa—š#ÎG‹ĐĶ „Ķ[V‚z‘ÉWē28gî‚|7žč/˙Kžôƒ{¤Ũ'˙Û­=ÕĩŌōƒqČk=īõņĮũ/á˙ßâ8˙ˇíĶt;䜂î*@‚(tū˙épŠt§ÛŌũ/¯ũxEŦ=$ŋÂ0Ԥ̸˙Ė>aøū+˙˙}-đJp4}ēŌēØŌņ‚!ža†–—¤Üŧ˙Ž>\ŋûĨí˙„ž)‡˙˙ô— „6—ëßōö^ä¯ūO÷ûãđE9īûijũē^ÚņĄR9ūôąÆÃ˙íûĨí÷]ÖÛ˙ėTh˙Ã.…†V%~ũdĮß˙ÛɏĮūëēí˙ˇŌˇ¤H Ŧäp˃`D4;A¯Ōaá-v˙ˇû^ÆÃ mĨļAĮK´ēzôŋŌ ŽÁaŠNĐĻf) &Æ0žaĄ§ Ķv!Ø ŖÁœ6=é&Âh~8ˆˆˆˆˆˆˆâ""""!„""""""ŊR3 léˆdŊŪ"#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūAZ; @ä!¤äœ†´Ō‚‚îA܆‡ fĮ!œr >Ō¤î‚îéoé˙XČ Ą˙Ūã¯˙˙ú˛8j"^x E_A{(|¨ ģÃ叐Õ‚‚ CU#;”äģ!‡3Åž%œr܃šœ‚Yāƒ˙˙Xĸ<áŅĸ=Ũ4!vwũ.Áwŗē/;0člĄŅ§í4ÕīM5#Ë˙I‘ÁcN“¤ôÛ ˜TîøKi§ :VĶ#†´8°Ũ/ĢIŌŋ ÃøˆZņô?˙âŋ˙ūûÛAûwŌėŽîqü"÷˙— KūO˙˙˙ˇ˙ū—ęúXkëû˙a˙í˙ũ˙ø?ė;cM†—â?Ž—jß ˙o˙Ũ-+\ƒūģÔßHą˙ø2žp8Sŗ€ívž›iĻ„튜”:p §jœ$ÛHøˆˆˆŒŊDDDDdpˈˆˆˆˆãŠ YĶ˙ūŖ˙¤ČáĢÆŌ_ #°iÂib"#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙’66ÔÜ(ĀĀleptonica-1.86.0/prog/fonts/chars-6.pa000066400000000000000000000352141506303110300174460ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRņką pHYsb&2 IDAT™cøÃ@7NĄS‚\åIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRBzJ pHYs¸Œ¸ŒĖöģ/IDAT™cxĀđ€,€BœXä Ãđ nJŪIENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDRŠÚ0 pHYs¸Œ¸ŒĖöģ/IDAT™cøĮđA‚Áwá.†ø!ēɏčĢ";IENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR  ‹Jų pHYs¸Œ¸ŒĖöģ/'IDAT™cø˙ƒˆ>Ī€Ą ß-ž[ Ú tŅCĸ!åOÍ`ëIENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/BIDAT™Ë1 Ā ŅK*ŖË÷|tÁfrÕĐĄÃZ yã¯<ĸŒ eĒ9åV1HČļ\͐[rŋßōÖhđüåIENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR0ėûĸ pHYs¸Œ¸ŒĖöģ/OIDAT™cø˙˙?ūũ€aæį 6߁ø9ŋâķ@ąûĪĒŲÄ ˙‹ūĨ70üyŪĀđˆņīĪ Ÿ$0|‡š…„|Ž9īzžIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDRß.œ pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙˙˙¨?ĀđÉūÃs(~ä?Š?âĮņŒĪl@¸øƒúy~ n>ĀĐÎĀĀp Āá˙?ˆYHC0ÃO+;IENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR\ pHYs¸Œ¸ŒĖöģ/IDAT™cøÁđ€áà †† ;*~ā‡āŋ1Ķ_m_IENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRņką pHYs¸Œ¸ŒĖöģ/#IDAT™cøÃđá Æ; s€P†Á ÉÜĒyÂđ> Ũíā~5IENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRņką pHYs¸Œ¸ŒĖöģ/&IDAT™cøÃPÃ`Ã0‡á >Â@ø >‹‚dį0ėa¨Åģ%*DŽbIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDRīĸŊ pHYs¸Œ¸ŒĖöģ/ IDAT™cøĪđŸá3ƒ1ƒ8à d˛>3|gø Ģ_Ķ‘O ĸIENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR  ‹Jų pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒ ũÅ@@€)ˆĒ [-ŲO}>IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRņką pHYs¸Œ¸ŒĖöģ/IDAT™cøÃ€>`8„gæĄ Ã'úei!BIENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDRīĸŊ pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ€600bĪl7IENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRBzJ pHYs¸Œ¸ŒĖöģ/IDAT™cxĀ€*001œŲ_Ą$āųRIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/=IDAT™cø˙€áÃ˙ ˙@č_ũyB0ü|ĀđûÃg0zFįÁčū†ųö?`°j!vÕ'‘ųFĘIENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙€ˆ<`8—Ā0_a>ƒ=5`Aō@¤RĶ—ĀpŦ ‡  ’Ļ ÍIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR ëWQ€ pHYs¸Œ¸ŒĖöģ/IDAT™cø€ˆ>`8|€AĖ 500@4Ât˜&Ú9„âÖIENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Į pHYs¸Œ¸ŒĖöģ/>IDAT™cø˙ˆ040Ė`ØDūCÃ˙†ū~`øųáķ†įÎ`h`ˆFΊ#ĪĖ0 ­IENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙€ˆ<`8Ā0Oa?ũW`ø—Āđįà ›áÕ70Ø+0ĖK`hëBB}ß!ƒˇšHIENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Į pHYs¸Œ¸ŒĖöģ/:IDAT™5ËÁ €0Ņ)y*J)–R‚,$ˆD–|Ūņ_–ŧ2å‘Kn9Ĩː&‡ÔōV*Ü~¤Á!^đt.œIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/.IDAT™cø˙€ˆ0€Đũt!á€Ã=†˙@Ԁ@ö ķĀ琝Ö"<°‚5IENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙€ˆū$0ü|ĀđüÃy0šF | ō ö 4_Ą/áXuŲx _øLIENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Į pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙ˆ@@€Ą~CŊC}Ã? úĀđįÃO0ú FĪ?0˙ĀpūC˙y°.$¯|%"ú?GIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙€ˆ<`čK`°W€"š†ļ â s€\{ j#†y ĀēŠŒ>iė­ËIENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR ëWQ€ pHYs¸Œ¸ŒĖöģ/:IDAT™EËÁ @@ĀŠD+ŽĀëA)ÖKjđ’ˆ;$"™īhqÛĸS1ú TWyœqÄkĖoütdiמ{Ę0IENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRČĶæ pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ€ '001>° 1!ōbIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRë ¸Ø pHYs¸Œ¸ŒĖöģ/IDAT™cøÁ€ á$ū°Č † ;,įÕŠx>ÖIENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR øŨø, pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙ƒ=`øßĀđO‚áGÃà í?äÁ$ ŠeAjZ\['6_ŸyŨIENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR øŨø, pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒŦlTœ+)DFŌįIENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR øŨø, pHYs¸Œ¸ŒĖöģ/0IDAT™cø˙ƒ Ų˙`ā˙ÁpøÇ ,ūs0ü?ĀđŋÄūįĢAŌ7&â5IENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR ņ6XV pHYs¸Œ¸ŒĖöģ/4IDAT™EĘą ŅÛJžĶ9ŠĨĨbŒą^sp˜pEH$Ȱaéšbˆ&zx§g öÔl=ĶIENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒĖöģ/PIDAT™cø˙ŋ„đ70||ÜĀpūgÃü ûÔ,Ú 30$ƒđ9†ô>n`Pīm`Ø$ÉĀ0ãÃų? ?õŗCĖA Đ(J=ĢP›IENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒĖöģ/KIDAT™=Ėģ @P@Ņ›(Œa#Á*ˇSžHJ‘WđâBqÚÃyĘŖ”ãSČVË^I ˛6™{é2ĸŒ“„$í"õ-īāŋ^ĨK6ik fįIENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR øŨø, pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙ƒˆ$Îw0œ?C@ļà Ãų į Ą Š ˆF0MŅ!mN\ÕIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR*ōt pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙Ÿˆ>00<üĀpū/Ã| úĪ ˙ŸÁ ɃPŧ˙?Ãņ˙ ~0ü`d€h#ŗŦ#ŅPŠŲÎIENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒĖöģ/3IDAT™cø˙ŋ„ØÎ?âŸ@ü„Î˙ÁAr 5?€ø#n`hā‡˜ƒ„+Í.˜G2’ IENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDRęC/ pHYs¸Œ¸ŒĖöģ//IDAT™cø˙‡ˆ€āų0úÂđüÃķ7 ôø Ã($D? ¨ĸŒ#é';ģ™}IENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR øŨø, pHYs¸Œ¸ŒĖöģ/(IDAT™cø˙ƒˆ€āųúÁđü=>Áđ€Ę "!°.!'QĢĶR;IENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒĖöģ/;IDAT™cø˙ŋ„˙040|üĶĀpü_Ã} žŗĮ‚å00Č˙ĘÕöƒÔņ ūÁ1 fZ/'ģr$oIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDRˤ90 pHYs¸Œ¸ŒĖöģ/&IDAT™cø˙˙3Ņķ˙Xņ †Į˙°ËÁ0H?Ė,(Κ2lõPÄIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDRô3h pHYs¸Œ¸ŒĖöģ/IDAT™cøĪ🁁á9^ČĀđē6„_Ž”IENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR ņ6XV pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀD ŸČAßøMΛDœ .IENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒĖöģ/GIDAT™cø˙˙3ü``xūųÃķį@|ˆįąũ†gõžå€h ˙š<÷ņq ~ āøP˙˜YP f5(cclķIENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDRü(( pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ˆū1<'ũ€ĸL `Ĩ‰*ídOIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR'“‚3 pHYs¸Œ¸ŒĖöģ/MIDAT™cø˙˙ŗ˙o`8ū_Œ˙“a¸üoÃÅ?snūÃpˆīüâę9 ÷ЁØ|Ã}u æâ~ ž?‡ũĖ,(?2ôØIENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRÁēIw pHYs¸Œ¸ŒĖöģ/EIDAT™cø˙˙ķ˙a`8ū?á0_âP|§>áž}Ã}y îâv >ďø#˙€`ö? @s`æ1–ĩ0ųä„IENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒĖöģ/@IDAT™cø˙˙˙`?Āđđá†ķ?0Ė˙ãĀ0˙ƒ=˙GÅō ü$īĀĐ˙īÃņŋ@}Ÿ!úafA1 Õ.fOyk*IENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDRęC/ pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙‡ˆxžaxū€áųzÂđü Ã3†į° °.C9(= ”ŌIENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒĖöģ/KIDAT™UĖą € Fá—X8ŖČ†ŽĀ*gé Ä(!Á;šŌâĢ^ōpĄīĸVqwQfĻÁ˙R°č™ĶÄõŠgˆļ KËú ĀčĖ)ôBIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR*ōt pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙Ÿˆøžfxū˜áųgzÎđŒŸá‰=Ã3y†į@ÔĪđü8LÍG† `Ūe$ß ŧ*™IENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR “ pHYs¸Œ¸ŒĖöģ/;IDAT™cø˙ˆ0ôO`Ø?Áˆ>€˙†† ū70ü?Bõ@4A΀Ŧ †ÛęX_šIENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDRü(( pHYs¸Œ¸ŒĖöģ/#IDAT™cø˙áū? °Ša°Ģa¨ĢcøGúĀĮÔC! ”ŗâIENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDRÁēIw pHYs¸Œ¸ŒĖöģ/)IDAT™cø˙˙3ü``xū?xü‚˙yĀđáį†Ės0Ž97EŅ˙ÔIENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒĖöģ/@IDAT™cø˙ŋ„00˙ĶÆ˙ņΆĪŋ>~†ā߁øyß÷@ėßĀđ/ˆå!øŋ=˙GÁ ˙1ũvĢųœIENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR9Z˛€ pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙˙?3ūĀpüķO†ãøáo†į?3<> Ä7€xÆw†Ī{ŌÁøŖ]>ÃĮ:}†uü ?ūƒ°<˙ü?Ÿfq7֚(…IENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR*ōt pHYs¸Œ¸ŒĖöģ/DIDAT™5Ëą € @Ņß1Ŗ8ĸ#Ü8” Aa‰  '1!yíÌl¸A*hE3-Ō„yđūĻįúI ÔĀ•ˆŠÜŦ¸}&hgšĀIENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR*ōt pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙Ÿáüöŋ Į˙0<ūÍđų3ÃĮį ?Ū3ü8Īđ'žáŸ<Ã?{†˙č;P# ë÷#ū#įD7IENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR*ōt pHYs¸Œ¸ŒĖöģ/AIDAT™5ËÁ Ā Ņé$Ĩ¤4K°Ĩ@–ņ Vā- ėLJwlēx Q‰œņ…îm$~ĶĖ'Ē("Vk<&öˆ%B0 pīIENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRë ¸Ø pHYs¸Œ¸ŒĖöģ/IDAT™c` ´ AjUná[øæmIENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR •:ž pHYs¸Œ¸ŒĖöģ/?`øũ€á'ũŖ ôˆū/`øßĀ4á˙’Ų'&ę=IENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR:7bĢ pHYs¸Œ¸ŒĖöģ/IDAT™c`a``xB$ŠũŅ5Õ( YIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/+IDAT™cø˙ƒˆ~€Ņ§ †Ī Ī-ŪĪ`8?ƒaū ˛ĀQC)+éĮ7E+IENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒ06q/)P=7IENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDRŅŲ¨ pHYs¸Œ¸ŒĖöģ/IDAT™cøÁđ‚áà ††   ?AķQqų+“IENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR ĪÉé pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙€=|Ā0įÞ†`ô Ą/ÁŒl$Ú0u˜Ã$o KåZIENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙ƒŒÎ#Ą3 '8Žw0?Āpū:ÁpūCģCCP#*}‡'G› D´IENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒĖöģ/'IDAT™cøßĀ€‰>40œc`˜Fö $ßĀ0ŋĄáĻ.[0­.IENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙ƒáŋÃ? †˙3čĮ †s ķg€=’" †ž @QÁ%!ß"Cë IENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR ĪÉé pHYs¸Œ¸ŒĖöģ/*IDAT™cø˙€}H`xŽĀpža~üęŖã 0unĮ$ۉ¤ųŨIENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR$ūR pHYs¸Œ¸ŒĖöģ/IDAT™cøĪđƒáÃ{†ķPØČĀgà 3Ãîč B—šIENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙ƒ=øÁp†aƒŊņU04ü`8˙ƒáū† :ßÁ ‚Á‚f0ô[K'č6”4IENDŽB`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR)ā"_ pHYs¸Œ¸ŒĖöģ/(IDAT™cø˙‡Ą˙˙†ķ¨č„ Ãá†ãgÎcCĖ€QÚ)1CʐčIENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR:7bĢ pHYs¸Œ¸ŒĖöģ/IDAT™cøÃđ‡á Ūa€°xĀnĖÄŪ€Ëˇâ;DëúIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR)ā"_ pHYs¸Œ¸ŒĖöģ/!IDAT™cø˙‡Ŋ˙ÃĀ!Ãp¸‡áø†ķØķL]Ge*ąģŲ8IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR -ōb pHYs¸Œ¸ŒĖöģ/*IDAT™cø˙=(`8gĀ0_€ÁžŒ@‘ü†ųÚ @ 0tn$ąĮF-IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR)ā"_ pHYs¸Œ¸ŒĖöģ/.IDAT™cø˙‡Ŋ“aāáa8|„áø†ķĐ†ķoĪa8`Ãpū3 )ĩę*OšIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/(IDAT™cø˙ƒũˆ`xĪÁpÃü öHHŒú$Ė`øŽ„â# 2Æļ÷IENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒĖöģ/ IDAT™cøßĀ€‰Î40p00k`8ŪĀpbÆĸ Ü=!T’2nIENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒĖöģ/-IDAT™cøßĀ€‰60Ėi`°k`°o`o``l`hh`øĀĀPF6` ]TŅ—Ē÷Ö%IENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRÕõ • pHYs¸Œ¸ŒĖöģ/"IDAT™cøĮ‚īÎ1ôņ9†0€‡1üC@ņO›1ųBMIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/ IDAT™cø˙ƒ?ÁĀĪ"ą †c 0u(´)‰4IENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ//IDAT™cø˙ƒ17€Đų Įo0<ŸÁđxÃg †Ī +~üĄ?Xt N*ĩ2”(RIENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDRl3~ pHYs¸Œ¸ŒĖöģ/?IDAT™cø˙˙.Ė|ŸųÃųū Įû70eŸ#ā8IENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR -ōb pHYs¸Œ¸ŒĖöģ/0IDAT™cø˙õ70°O`xnĀđ¸€áÆ`ôĄ€á[Ã;†ķ ō ˜ēųs(FČ'ZIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR)ā"_ pHYs¸Œ¸ŒĖöģ/>IDAT™cø˙‡5ˇ0070?ÃpüÃķ9 ÷0|ļĄ5 ?€čß? ˙0üŖß>˙ah˙0Â*7ŪŌ€ŖIENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR -ōb pHYs¸Œ¸ŒĖöģ/4IDAT™cø˙`čg`˜oĀ0Ī€áOÏ ??0|ūĀđøÃņ ũ€CŲZ'éY‰EIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRŅŲ¨ pHYs¸Œ¸ŒĖöģ/IDAT™cøÁp‚a´BLŅ ~}1‘FIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRØëyŌ pHYs¸Œ¸ŒĖöģ/IDAT™ch` 4 *˛:Uq™IENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR>²– pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ`Ā0BLQ††hqQæČSÔIENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR Âי\ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ƒ?:ø€aÆ ; Ęū˙Öü.’Q8H¨IENDŽB`‚leptonica-1.86.0/prog/fonts/chars-6.ps000066400000000000000000000006221506303110300174630ustar00rootroot00000000000000%!PS % chars-6.ps /inch {72 mul} def /Palatino-Roman 6 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-6.tif000066400000000000000000000036101506303110300176230ustar00rootroot00000000000000II*Ę& u_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čd˛w!Č8ä2>@ō‚ƒš΃!ĸĮ bÕ+ Ąč†Œ!ąČlâđw El‚ A|!ĸūŋA„î¨QI6@‡Õ˜Pšk ¨#ã˙Ņ|Ōn’uĻO.Ú.ÚČᔎ*A7Aũū’˙_ĨÃiv==<OĨ¯Ĩôŋ_ZUˇĐ>—īë˙_˙Đ!ãë’áŌßzô…m/ņ˝m*ĄĢ‚;˙úIyYĶŋū6)hšøũ~’KÅŠXŦ;]¯`Ɠ÷­ ƒŽGnÍ 0Û_đښŅ}†\5¸õúD BâôŪyąSø! 2>é;¤˙Õ ƒ_¯é=oN’ļ?†^ē¤ßÛ/õЃ˙§Kôŋm/Å+ôŋôˇ˙ Ā˙_lWū–‘ ä6?ëéd'˙IaëQ4Ũ'ô­,‚î“iV’]ũõM¤ÃDáĨ­+í-´ļŌ´•´’˙ˆjÅ1#Éŋ꘠F€ø @☤˜ –" ÕƒZCBĸ""""aĄŌĄÖŌ×é!Ũ!ĮĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ō0Yˁ04‡!ŽC-Č4ŽDČd7oä2܃tØA pČh9 LœČyII“Âd6a„ČL!ĸd3 †ÉĐ‚&ÔĖĪ#`įˆšdQÂdAÁhà C.m8eÆÁ—qÂ080@Á 0H¸g †FØa—6ļeĖ0Œ]˜80@ &ƒ[@ڇšEčŽØ@ƒ~čk ˙„˙ézÛ@ƒ{Â÷˙õÛĻĐZUáŌ Ž ßĨíõđŋũ.Ö¨Ōot›ŨzĮÛŽëI×_ x𠎉ÁOhOø÷Ž*?ú\OSíûˇøúēĢki xXi(A7ĢÕwÉ’/ũ/ĩ˙Kôŋ˙z¸"ŸŌn’ō“b0úIõ}*˙˙˙KŪŊŋ}-ôĄ˙kÕėVŠzxAZ_WöļŧĨ÷ûé~|šūŊ;t—´áC`a†‚úUyv˙Ž>`OÅû¯ˇū ~‚ ?Û§Ļ×cüD „0×Ĩęđßōå—/Oōéũסū?ļ@Į¯út— ƒuũ!ī˙d^˙Ã~ë÷ß߸?īV¯R?tŊ†—~”¸˙ëŽ8k˙oîŊũ/Km˙ĩęõŊ/ 2ģa%(zŋ~Ŋß˙oŨ}ŊũũŋÕę8ŌoR(ūbVÄ!J¯÷ŽEŋ˙o"ŋí÷]×dū6žžŋ y90wlI=^“z_ˇ˙íūūÆÚ[ioĨÚ_JŪ—é¨a„°a%đ“N0—ė˙ˇũ~à mŽÜ0–ÃI¯IŊ%ö°đ°Ä$AĄAŠBC 1‚ x l4( Ü aáŠ Š ¸„ĶĨ`ĄøĐˆˆˆˆˆˆˆâ"""D!KwÕ]‚Ø4u h 6$ú4>#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū@ķÎČCl˛đAZkÁk ĸČ Č7†ĮÁĸ"õU!”äuTļ˙H8tGOƒƒÉ˙Aëë×ë˙í×ø¯ū–ŋū˙ũ7D6^{!˛ČlŒ†ŒČhˆS |œdr CËâĮ5QeA‡;c2ܓ~5~,rvAāœÆČbŸúâyč0‹ĖxhŧĐ4_>+‚‚ë…+ĀĨr/0TÂ#ąaSE恅 ũĒtļŒ7˙¤Ũ7eÂNt­Rj$y‡ XlØh HķI°Ã.h6qŌu0š % ¤aT/˙ĮÛ˙IÓ ŸôēiéŌn›_C÷WÕ×Z˙é7ͤ)ũĨõ×ôéuēējÃu’Û Fū"A›ŋô?˙âŋ˙ū|ũ×#ú{¤ŋEö—„b˙ķ_ /øE?˙˙ūßîļēî´Ū’AŠô˙û˙ˇ˙˙˙ƒõÕŌ~—â?úW{{. ?í˙ũúWä3ŽũėoČūéũz}~ŋö˙ũŌë˙õnŖJØŌ&˙ũĒa(f´§lˇŅ8/˙a˙ü4Ą„› ÚPė/´­Ō_ūÃ=Å68lPAá đ›„A„0ƒ†¨Ļ ŠpƒŠx‘ĶwÂMēū""""˛DDDDeÃJ""""#Cá'ũČm_˙āŖ˙Ķiw¤—Ģu‹ *đHGb‚A:ÄDG˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø€A::Áx€(ĀĀleptonica-1.86.0/prog/fonts/chars-8.pa000066400000000000000000000375311506303110300174540ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRō§ą pHYsb&2 IDAT™cøĪ@ŊĒâņ˜ŦâIENDŽB`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRč›Q‹ pHYs¸Œ¸ŒĖöģ/$IDAT™cøĀđaƒ2€I4à Pø A*@j> qmÁXwĖIENDŽB`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR eÚ; pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀD2 PdĶ€@v`) T&lũŸØŠIENDŽB`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR)' pHYs¸Œ¸ŒĖöģ/:IDAT™cø˙ŋ„˙|†āHøįcn```øøŧŒ?ƒđqfĘ<>ĀĪû‘đü†ãķ!æcÁœØD6>ŠIENDŽB`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/PIDAT™%Ėą €0 DŅ/đ%ŖELĀŒB™’"ŠÔŽ¨Đ#¤§_‰GdÃhm°<Ũ¸&TVŖ/(uĶ”tQr|‚•˙-ŊĶ û*û]\ÜIENDŽB`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDRŅüāĐ pHYs¸Œ¸ŒĖöģ/kIDAT™mÍąƒ0P âÓ`ŗ•7đšdø,ā€Ž’"šKÂGŸ‚Šæ5’NPUÁÉG'A‰/AŽŊĀûh$R°âÉ5)-™ŋļ}Û@–Y]-ĐŅxŒÄtONđS.ū×ų ĒUePãõíIENDŽB`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒĖöģ/aIDAT™EÍĄ €0EŅËᯁëb$•8Vč,*YĄ [%|>G\ķĒĘË)gRŽU9Ėö°ŪfĨDĨzLš…É ƒDĸ‹Ho’G–€ËĻ}…1Cqíī|?ŋģķBŲŊØpUIENDŽB`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDRŦęˆ pHYs¸Œ¸ŒĖöģ/IDAT™cøĮđ‹áÃ# <„įæ1Ø1ü#V¯ŠP„ã‘IENDŽB`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRō§ą pHYs¸Œ¸ŒĖöģ/.IDAT™cøĪđá/ÃO†Ī ĪŽ3œgčC~y Č–9Tõ?õü9ą{ø|™IENDŽB`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRō§ą pHYs¸Œ¸ŒĖöģ/,IDAT™cøĪPΰŸa>Ãy†į >3|ÃXā¨Üg ēį@õķöOĩ™ĩŋŅĩIENDŽB`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR   pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙€ˆūQÌ œ`øĀĀđ€Ė|°ãφŋ`e$"ŗq3'RÅ6zIENDŽB`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙^lƒ!58ĖHMFECž^IENDŽB`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRėnļ pHYs¸Œ¸ŒĖöģ/IDAT™cøÃ@,|Āp€ážača˜Ã`ÃPÃđ˜W}9üd IENDŽB`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR eÚ; pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ@‚âöę+dĨmä%IENDŽB`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRč›Q‹ pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ@,œĀÅ[[q–ĸŋIENDŽB`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR˙šÁB pHYs¸Œ¸ŒĖöģ/IIDAT™ĖQ @PEŅ=e"ĘÄĖÁ” )SP”ß'?ÔÉņî­õŊ°pÁ>Ō’ĻÔāŽ¯‚ņŠKÜbgZĶ(fҊžžáĀĸ5B×u­IENDŽB`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙ˆ~Č1<îc8~Œáü#†~ zĀ Dp"~ ‚¨|ÆĐ~Žáđ<†v Ŗ—ˇ+ž?ĖĐIENDŽB`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒĖöģ/)IDAT™cø˙ˆū|`øđĄáƒÄ†Š ?HE Ŗ}7Ę´dņIENDŽB`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDRÆŪp pHYs¸Œ¸ŒĖöģ/MIDAT™MĖą €0Áī,!Ŗ8š‚8BV XXfÁÂV°ÄאÆįęGųĩ%5ä‘8ˇÂjÆ3N°ãéšå’SvI0PĒ̟~ą/úöņ´IENDŽB`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/OIDAT™cø˙ˆ~Č1<āc8ÜÆpūÃũG ķ1ėÄđ˙Ã˙c ˙Ī1ü–cøÁÆđûÃ˙ ˙? ũ˛ųĪÚûė F!!ņŦ2¸¸|×"IENDŽB`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDRÆŪp pHYs¸Œ¸ŒĖöģ/BIDAT™EĖą €0ÄPoą)=BÆĄdJJJ‚ |āôʓ‰  ‰ÄÕČ)Uv9d“EV™d–,Īú˙3PāMũn>C.@„:räIENDŽB`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/AIDAT™cø˙ˆ00`‘į˙Ą 3| Ø71œÄp˙à ú€@öŸö?b˜˙ŒĄŋá€Ä($‹1Žö ßĒIENDŽB`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/MIDAT™cø˙„Ž1üįcøSĮđãÃĮ ˙1Ŗū =| l ĖM ėø0ČŅ(â˙ĀĐ˙ˆĄ˙Ãá>†v PŖ2,§ęĒ[’IENDŽB`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDRÆŪp pHYs¸Œ¸ŒĖöģ/ąKN‡2‡kĪgtĪ+Öø-ŧŗÜōČ%GŪ¤e˙Œ/ÁÎ4žŗIENDŽB`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR{Ē| pHYs¸Œ¸ŒĖöģ/EIDAT™cø˙ˆ>Ø1<îc8~ŒĄ˙ĩŸch>Įp`Ã;†| ĪØÎ71ô`Ā ˙†TīЁ…„ä,ǃcķ<IENDŽB`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR˙šÁB pHYs¸Œ¸ŒĖöģ/KIDAT™cø˙‡ˆ>Ø0<ŸÃpū C˙ų' ōˆ˙ĩ70P`xĀđ˙aøßÃđ_†áŋ ߆˙ač…„=-'|'%ķIENDŽB`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRč›Q‹ pHYs¸Œ¸ŒĖöģ/IDAT™cøĀ€ '0€ĀÂĸ÷ŒŅ=t˙āIENDŽB`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRėnļ pHYs¸Œ¸ŒĖöģ/%IDAT™cøÃ€ Ÿ0Â'hĸ€bG€đ CƆ?gÕ-b: IENDŽB`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR)' pHYs¸Œ¸ŒĖöģ/CIDAT™cø˙ŋ/ūÃĀđ˙˛ŲūČ70|¨o`hĘņą<ŗņÁ˙ņü@uÍ@üˆõũcĀe6\qB⢹IENDŽB`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒĖöģ/IDAT™cø˙˙ŠHĮa O‡ƒyÁOIENDŽB`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒĖöģ/DIDAT™cø˙˙>,Äí@|ˆ?Ô`øÃgâ@üÁá˙†˙€ôA Ÿ(/€áP]3P=?Ûã63)Jj‹IENDŽB`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒĖöģ/BIDAT™cø˙ˆ040Ė`ØĪĀ`ßĀđ‚@čŸß†~~`øüá;ũëúüF?a"H6Â28¨GøIENDŽB`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒĖöģ/iIDAT™UÍ;@@EáŗˆXÃčĻëRˆR%jQ°{ AÉTЉߪ(žō܋ČɋÅėR2ÉL'#ƒÚ\Ņx?Ōč4AÛu<6ÂÃāl™jí)ܚÁ*–ģßĨĮÆÁŊ›ņ}ü]Œ CBx”L‡IENDŽB`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR:Ë[Ķ pHYs¸Œ¸ŒĖöģ/ZIDAT™eÍą @@⎁,"læŽSjFQHŦqšŽ’āyČEĸųÚ$=R&dfc3'Fc2ĒFÔâjKáÄÁB@œė=vvÆę‘¸Ņ#2ŧ€>ųŸŧ¯[‘ȁS•IENDŽB`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒĖöģ/FIDAT™cø˙˙30`8øāÃ㠏˙ á@ņŸ>Āđ¨î1HXށáņ?4 ƒęyøđC;Ä|,QŪEM¤ wIENDŽB`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷ģ] pHYs¸Œ¸ŒĖöģ/EIDAT™cø˙˙300ü°g`øø˙Ãc >Äũ`üƒˆåq`~(ŠkâÃ@üˆ?ü˙ĀđGžhŽÜT 0IĐBŗ ]IENDŽB`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR:Ë[Ķ pHYs¸Œ¸ŒĖöģ/GIDAT™cø˙˙˜``°o`xđ‡ŋáã˙fņD|@Äņ/ņŖ…đDü ;ä0ÔCíÅEāž^L2Ģģ°IENDŽB`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR-éË pHYs¸Œ¸ŒĖöģ/;IDAT™cø˙˙ƒĀ‡? ˙/@ ø¨b û’8LŨ˙PÜÆū104Í…Ų†hûM‹˙†JøIENDŽB`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒĖöģ/2IDAT™cø˙˙ƒĀ‡? ˙#ãü?T1ũIü?vüdŽ<Ä|,=0JĢđyÅIENDŽB`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒĖöģ/KIDAT™cø˙˙701ü‘obøų˙Ãc >Ä၏(Âō80˙?ū˙‡€j1´ņa >Ä€ø‡ü!† | p;P1¸J–ęƒ ĄIENDŽB`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR>>‹î pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙˙˙0Á ßĀĀđņ˙‡@âQÄ ņ˙ņ: Ú@Ø6„åXļImuYɘIENDŽB`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR   pHYs¸Œ¸ŒĖöģ/IDAT™cø˙€ˆ€āãōҰ ŖŠh5¤—‘mIENDŽB`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒĖöģ/ IDAT™cø˙ˆ~| úųáķö üCš7á7C”øIENDŽB`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒĖöģ/YIDAT™]Íą€0 @u)3BFÉh—Y2+¤Ŗĩ†‚C‘ Š?5– ’(+œ›ø[áĪŋ ŋä”CvŠ„ee’&]†XÜG/úY; ÆĻŨīĮĪøBKŗ­Ū5ŨIENDŽB`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDRĪ5Đc pHYs¸Œ¸ŒĖöģ/*IDAT™cø˙˙3Č`øøŸR|ˆ@ņ†˙00Āė@ÃgæSŪ7?ŠmIENDŽB`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR7Õ+” pHYs¸Œ¸ŒĖöģ/bIDAT™mÍą €0ĐīēÁ9Š‹ )-Áa,,]!1­b!æŧ ˆÍk˜9!S0–šÁšL$ŦÍ­\„­Îœ_eŧĐ+Ũ,LĘ8NYáPv#„å@€/˙áÅUäÁ×R9IENDŽB`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR>>‹î pHYs¸Œ¸ŒĖöģ/XIDAT™mÍą €@ @Ņ8 ."¸˜pĨāJvŽ‘Ã‚6‡1˙°´ø¯ũâî*•&õĸb•œ#ôÁÕ ;Áā†2Á<]ā•fØ@Á┌oųæ?ŧ›ãj…1ûaIENDŽB`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒĖöģ/NIDAT™eĖą € áÛĀXÄčh–”ŽĀ0BA)ĆÂđL~é(žîrHÂpđŽŽ*OVäRâT5Neh“Åü×CT&éĻ(ĐļÎøĪ>UMJ†]öîIENDŽB`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR-éË pHYs¸Œ¸ŒĖöģ/8IDAT™cø˙˙70<`xđ#áã? f`øø ƒÅō?0|lâ˙„ņ f‡˜ŽdLŪ mˇėIENDŽB`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒĖöģ/[IDAT™UÍĄ €0Dáˇ#tÖÂĒ’•H*Ė@*°45ˆĻĮDÄ'ī’ø0QzG–įR`WdU27Žy~ē&á?™`ģ ‹S÷ä(ÖÕbũÍĖu„*ė3ž¯E\QôíwIENDŽB`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒĖöģ/KIDAT™cø˙˙70ücøđÎáã?9ū„Áb@š?u ū1|dâÃPüˆ?ņ:ū5ã?Ç˙l ō 0;Đ0DāI~–&IENDŽB`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDRÆŪp pHYs¸Œ¸ŒĖöģ/LIDAT™MĖą € EŅk(,Qūhē+áÁšo,žĸÉŠԍŊ“;éziˆąFJĀ'TЁ|X;ą†Uæ ‰¯úš´—+î>ķb–IENDŽB`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDRĪ5Đc pHYs¸Œ¸ŒĖöģ/%IDAT™cø˙˙ƒ€=˙†ũũČøÃ˙ūáŒķą`ÎEJ5ØÆIENDŽB`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDRŅüāĐ pHYs¸Œ¸ŒĖöģ/7IDAT™cø˙˙˙0Á`ßĀĀđđ˙į ŠI<>ĀđB?ĀđCžH0đ`øĮ`ĩÚ}i,ąÂIENDŽB`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒĖöģ/PIDAT™cø˙˙?3Ô30ū˙˜áá˙į`üņ˙y†PüŖ~>˙ЎgøcÁ˙ėęūÉÕ3ü—ęįâ^ îâF > ÅĮø9Ä|,…KįdĀđ›IENDŽB`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR Ž-ō! pHYs¸Œ¸ŒĖöģ/dIDAT™mÍą € Fáß Qn4L,,a((™PĐbl0đrZøŠ¯}„Šëk× žĶ(à Ue¤S¤kˆ‡` bŪ,öoQ‚#&Ē"ŖŠF%Ļ ēŽīü‡8gaʎUNIENDŽB`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDRËĀ^ pHYs¸Œ¸ŒĖöģ/\IDAT™cø˙˙7ū?Ä= ūÛ0ü¨âē†?6ūYą$P 3ŗq;7ą"˙+øÃđįG à ūųĮ†áķ?†Į˙dŽ˙įaā˙ĪĀŗ KHĻģ!IENDŽB`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷ģ] pHYs¸Œ¸ŒĖöģ/GIDAT™cø˙˙Ãs fū˙€Ąņ˙†‡˙O0|ø?ƒá×[0üŠĢ`øc÷ƒáŸÍ†˙’@Ė ÄÍP|œ0ūÃPÁ˛ QūNĻĩ\ČIENDŽB`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷ģ] pHYs¸Œ¸ŒĖöģ/ZIDAT™]ÍĄ €0Dá'qØ:ÖĀąޞk‘tV(a€VūĸéŅ&`Ÿ{šC2†¸Yš9ÎęČuEļŖŌ›ëģĐÍFŖn†yŖøBRáęĸAcžŸR@J:ך>EIENDŽB`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRō§ą pHYs¸Œ¸ŒĖöģ/IDAT™ch```hgč'ļ30ō%8ėqIENDŽB`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR˙šÁB pHYs¸Œ¸ŒĖöģ/FIDAT™%ĖA @PEŅģe#ĘÆ,E،Ą˛E™~Š—į÷Ô,zҊ)Ö8cˇ¸Äú ŧU‡ĢąÄŒŧáBm­†51•÷IENDŽB`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR"JCĨv pHYs¸Œ¸ŒĖöģ/IDAT™c`d``øĀđ‘ ø¨ķ?ŊÃIļž–ĩIENDŽB`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒĖöģ/ö3|>Īđø8Ãķį Į3œ˙ĖĐ˙‘aūOų? ö ęIDb”<—ųÛÍIENDŽB`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ŋž°ˆ]MR?šgĀsIENDŽB`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR"ģHūû pHYs¸Œ¸ŒĖöģ/IDAT™cøĮđ‹áÃ'†g Į€°Ąáiø÷?äĖĒ|IENDŽB`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR"¨Ÿž pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙z Įpža~ũ?ÆđŸáÃác ũĮä!¨ŸĄĪá`sƁ5$í# IENDŽB`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR"zĪ´W pHYs¸Œ¸ŒĖöģ/CIDAT™cø˙˙Ãa fâĮ¸p33`xTāĀđāÃÃ? Aø:vŠƒ0PũĪ >`xÁ~€d ŗ~OņŗÔĮ5IENDŽB`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR "Ŧjn2 pHYs¸Œ¸ŒĖöģ/2IDAT™cø˙ƒúÁÁđ¸áü†ū ķ_0Č˙@ ~0ę˙ÁĐūƒáā†xĖMČ8g‡Ā¸IENDŽB`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒĖöģ/?IDAT™cø˙˙Ã˙@|ˆāÆ?0<Ē9TÛäĪby4Ė y nđ€áđŒ ,ĀvāĮØ.UoMÕsIENDŽB`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR"G]Õ1 pHYs¸Œ¸ŒĖöģ/6IDAT™cø˙‡ú!Ãđš‡áø†ū# ķ0Č?! ˙Eü`Ôū…áā†<8Íų˙ÁŠ5čs#S#IENDŽB`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR "Ątu pHYs¸Œ¸ŒĖöģ/0IDAT™cø˙€áÃ†Ī ž?`xū€á8:ĀĀ ĀāŽ*ˆ1<`ø5&5ō[œ1IENDŽB`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒĖöģ/TIDAT™…ËĄ €0DŅO¤Ŗ°Ú9pŒĀ*M•]Ą ĸš ¨+'ëĪ\ūŅģøĶ‚x6¨rû5¨bÍâ`xTđ€áᏆĮ ü‡8ĖPރđS_g;IENDŽB`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR "ĨÎH pHYs¸Œ¸ŒĖöģ/%IDAT™cøßĀDŸ‚Ņg0‚~704ƒŅc"üoĀ…^Ũ.Ā$~$hIENDŽB`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR"JCĨv pHYs¸Œ¸ŒĖöģ/&IDAT™cøĪđŸá'à üÉđ ˙2DĀĪ ž3đCĘ 3‡dIENDŽB`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒĖöģ/IIDAT™cø˙˙Ãc n†ŌXņŸ†Į?€ø#ũˆĪąü†GõØi û1?ˇņa ~Ä€ø‡C ČŖVU:ŪtžIENDŽB`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR "ĨÎH pHYs¸Œ¸ŒĖöģ/IDAT™cøßĀ𸁥LR‚€h9.|7ą“ƒIENDŽB`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR"‹ÄīÚ pHYs¸Œ¸ŒĖöģ/3IDAT™cø˙˙˙b‰ßÍ043¨``*œSÁđđƒÃã˙Č!äˆļD6r3l,ŦIENDŽB`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒĖöģ/,IDAT™cø˙˙!üģų3ãĻ‚ $0<á?Äa†‚æ1<–S—Đon‹IENDŽB`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒĖöģ/7IDAT™cø˙Ÿú!Īđ¸áøc†ū‡ ũä?0Č˙@ ~ ú o˙Ėpđ8Ãyœæü˙,q81Sl IENDŽB`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒĖöģ/AIDAT™cø˙˙!üģņC3ÃĻ‚†ūc`x Â˙‘ąP „ĀøáŸ >1û ~Üđ˙ĐQíëškIENDŽB`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒĖöģ/ËŖa~(ɡ?l`8<ąáƒ!P˙G¸ĖHƒ„íŊ–IENDŽB`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR "Ŧjn2 pHYs¸Œ¸ŒĖöģ/(IDAT™cø˙ƒúŨÁĐĖĀĐÄĀđāÃà āC 8Íų˙ėŠ<>8küđIENDŽB`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR "C¨ pHYs¸Œ¸ŒĖöģ/9IDAT™cø˙zPĀp^€aūųPÄüĄÁ€á€Ã†˙ ö `4A΀ˇ9˙?ķc1GĪâĐIENDŽB`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR "Ątu pHYs¸Œ¸ŒĖöģ/-IDAT™cø˙€Ž~?`xø€á1z ĀĐĀĀĀ €"ˆ†‚•}H`@6 k8ˆOčmáIENDŽB`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR"wŅÄ pHYs¸Œ¸ŒĖöģ/1IDAT™cø˙˙!üûC퇿 ˙0<Ē˙ĀRĀđC† ų@ ąV(Ę´:ÆIENDŽB`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR"zĪ´W pHYs¸Œ¸ŒĖöģ/GIDAT™cø˙˙!\÷ŊáÃá?˙âŸū>Āđņķ†@üã;??Āđ'ˆũXūÃ?(ūoOØ| ŖdTįō¨Â4IENDŽB`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR"†ÚŸ pHYs¸Œ¸ŒĖöģ/RIDAT™cø˙˙˙b †Ÿ?€Ä†Ã?˙%0<ū&ū<`xü æÃĮ'ĩ@âL%8gũ€áĮ=c 1OHėöėūØ÷‰zAŠåũfr\ęLßßIENDŽB`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒĖöģ/LIDAT™cø˙ŋ~ÄÍ?n`øøŧáÃû†÷ūČą}Ã?˛˙ö70ülo`ø|¨įpÃņ‡ üšÄąöLéáûΑIENDŽB`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR"zĪ´W pHYs¸Œ¸ŒĖöģ/TIDAT™cø˙˙!ŧī{ÆÃ0<áŸņĮĪ>ņī@üüß| öbū ˙ä!øŋ=×ų0 4ķīâf n˙u2Q¤Ø{lĄIENDŽB`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒĖöģ/@IDAT™uĖą EÁgŖMŠ´’ÄF•ZG‚oÉՇÄO_$CiÔL ("ËĩlĮôL1m“aų>ŌÁ„:´ķîˆĘIENDŽB`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR"TЕŠpHYs¸Œ¸ŒĖöģ/ IDAT™cøÃđ„áCV(Ã`ÄØåz€ē0üA–FEŗ˙âIENDŽB`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR"]a5ŋ pHYs¸Œ¸ŒĖöģ/IDAT™c8Ā@*8€oD+\ ¤IENDŽB`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR"ģHūû pHYs¸Œ¸ŒĖöģ/!IDAT™cøĮ0ĄáVøŒáÃrĮ€ēäū )Q ū7`IENDŽB`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒĖöģ/IDAT™cø˙ŸHtđ܆}’ öÍ õDë#ŽT?ĩQūŪĩIENDŽB`‚leptonica-1.86.0/prog/fonts/chars-8.ps000066400000000000000000000006221506303110300174650ustar00rootroot00000000000000%!PS % chars-8.ps /inch {72 mul} def /Palatino-Roman 8 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.86.0/prog/fonts/chars-8.tif000066400000000000000000000045601506303110300176320ustar00rootroot00000000000000II*˛& w˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų €ËRƒhä ŽAĮ! O<+" 49nä2 „†m„ŌdpĖ.ŧƒ~ aČ(ō 8†l 2 ‚õcˆ(íÁ†rđj}ŌŨĐF&0šT¤b oũpŒd}¯TúMØéi6 š75°i6“}Õz[¤ÚŽ’M§IShĮ—7 ĩ—•.$ë}×ũ/­†3¯ IéäuŌ˙I˙éWũuĒpƗcîēúZ_ß˙ûũt’ڐnú_õ×Ĩ˙˙ŋøúÚIx#h¸eW|qĨüR´ŋÄH/Wļ•1Cõõūĩįäģ˙ fpaīKJÛW¯ëIqyų&VŋņlUdĪXß_Ņ ƒ„—›šĻ“˙[*_aõë„$yė6×}C‰â1Á˜ ž:_ŦŽÚõt$_lHëū@ŋĒ/4­˙˙H[ŦzĩH6×ä6Ē‘įKtßäSÔĸ˙Nģ×JØĨāĖ2ābę“jßä_¯ŌПÕ'ņ˙¯Ũ/ÅoŌ˙ëzü†qũnŋ­-,xũ}zUúûõH‚‡ō =^—Ĩ<$¤ŋ°írPAąë­'KutŊ*īūŠ´›e¯­Sí-Ũw]$ŨŋĢŌ^˜a­&Ōĩ†ģ 0ÂJØI.—ˆ¤ƒ‘ÚÚØĸą„11 b ą Ŗ(DŠ=ĐШˆˆˆˆ °hEÕhuę—ÛI*Å´¨wĄŲb?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙äĀÉų¨mēä2AGʙ§!•Š  Č:rtäC$r‚‚‚\AAŋcČ'ķ Ū„ęC*„6j@Å`A9%æA<Šä_ üBĀ&A†0XL#l<3‚8Pg2 땐ĪdŦĪÁŅ6A ‘CDp@Ø0Aa†pØFØ`͘an\” eÃ8 a5†“jĖ×.Ø@†›A´ aĐ=EÁ;ū—¤ø@†Đl"áC Ú4īžŨ5x6‚PĢ鴃~éxoü%˙éwŪ‚o´›õ˙˙֛ÛKKÕŌ´ũ/ôŋũ/X"ŖWŨ_tŸ˙t¯ôŸUņéå×ŌûĮ˙ôštäuīIŋIŋ˙¯ŋOm+IëČd( ¯DŦņi_ãˇę?ú õö˙ū˙ĮũåÕ'IŌŧ+ , ‚#Ģī¤ŋ‘GČŖ˙ú^ßīĨ~—¯ûiu}÷IyÂ9 L=R~žĢôŋôŋKÛ˙Kúŋūר§TŊ4Â0Ō¤Ģ[°K˙˙˙KÛũŋ~ˇŌ™ƒGŨ/uĻŌ˙Â0iuûÅ˙ ,0ŧĨú_á/Īė 2ŋ~•ĶŨ%í4D§ 4ĩ]+˜7üqķaũ˙oüũúÃ˙ßũ/ƒž—|ū`yúķ ũĨīū?†ÁŋŨ/~ôŊ Ĩ×I_īŋ˙ˇīû÷ųŽūûJŌEĶi~›Ģ׏{Ō˙˛ûi}÷˙ļ÷KßūžKũ)'˙Į˙Û÷ũŋKŌÛītŊ&ôŧ0 ‘ÁŊ´GT–ũ˙Ũ˙öūŌ÷ßÛö˙Ūžô›Ōđà Ũ8A °zGŊ,…ŋ˙o!Gßöû¯¯!œ×XØĨõ!Gđ`Ä œX¤ŌŊ[Ōũŋ˙ož+īm-ĩÛēīŽēoKō„r 0ÁC5Ûũ7Ĩ¯ūßīėo_[zúM>“õújaM†’Ū“d8øKö˙ũŊ/÷a„ļŌÛŌØ0Ŋ4ˇ¤ŋĐm† û  0•…°Á­÷Ûi…ļ¯vJØa+¸0‚âĢŌoI}Ŧ<&ƒ0„ Ä$!@bHäh`āJaˆD 1†„0âˆ(8a?„ĄÎ„?DDDCˆƒDDDDDG×ūŠé$vPaŸŅPTĘŧhA„íã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū@ņ˛U˛Ö@’Č*ŲĮ3 ¨w aČ|áėxL(U C5ČhpĄWž–ÁÂ/ tĶ-ŋ´ž‡˙!’ C˙čNžģMxO˙J˙\Gë˙§_˙˙õē˙˙˙§\ؐŲŲũ›7†Áō,d6l'd Žl _ˆÜA¨r4#˛ Į! ¸ä‡,rĮ “&丂îC(rc–9c]ȝ˙­‰ “Đdų ˆEį>ËĖĢĶ Æc5Č1‰ Č1Ʉb ™č!ŒMa΃Édh~Ą28C˙§EÛŅy„bap“a4˜ô^ ĩEę/t^iÕš.ÖŠ8MT0„X0ƒ ƒ0ĨĮ˙ÖŌn(:::\ŽŒÅVØpú âŦm+(6AÃ<”RztöŌ~’˙éū­uząÕ…_étÂz÷Ļׯ`4}}+­-/ũ[ŽĒĩ÷ü%˙ēW]t?÷Z{ĨxŌ[Ņ„Qū°ģ¨¯˙˙č/˙ßuø?Ũ[—Zct’­†‹Á¯ˆ<Š˙Įõ˙˙˙˙ŗ@ĪûôĩĢÖõĻ^ˇ˙æ3iĖ'˙˙˙ˇûסNô“z Cč/˙öŌ˙Û˙˙ëđßúˇZŪŠCé}]ūÅí˙ũúߐÍŋÛ­oD}ˇUø˙ëë{#†gũŋ˙ë¯Člw˙^ž–õHŒ˙^˙_ũŋ˙u÷˙õŠŽ4ž5ŋū×Jí[#_ũŋ˙ē´­~ŽÕŨ¤­¤Ģ˙t]a¤Ã-Ûŋa¯$û˙Øa+&Â.Ŋ„ Ø‘×­[Ō_ũƒAČčPb˜¨6( v0@đ@Û 0@āÁ†…Ŧ80!4ƒkÂL6˙ņf ˆŽ""""3¯ĮÂ?õū—ú˙d¯˙˙Lúm,JŊ[Ké|†HiŽØJž+b$`ƒŦXB#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü@˙UUĒ` h (ĀĀleptonica-1.86.0/prog/form1.tif000066400000000000000000000136721506303110300162640ustar00rootroot00000000000000MM*üÎĀãŗ*ŨáđmíĩÎÆøOQ;Fĩ2b.EÃ-"CQĄwzī#Ž Ž2, Ō93ũÜG­˙SȆ3čæSÄųf"$1ႏ™ĘHT4VČ5”U„Dpe0 jƒytaC.f"#ˆâ8í3<ÍDM4ĶLčŋÄDDHƒØ82ã#†r8güØrr ŽLr ä3G Āä(ä{˛”$æUˆ›˜?Zi™Âiœtōcķ™s#ė¨S…ØBĶĨ÷ŋyOū91āœ]ĄPD~/˙ŋƒ&Y¸A™ë­åÂđŸũb"#ˆ“Ąe:f„'˛=\ę`Ģ_üDDDFĒũfđãä"öē § ī˙ßr8įÉsȘr;é˙Ū5Á낇˛ Ũ2Cš‡˛vgLøn> Á2W‚H 3Ž™VĒL{$/tNLsÔęf1ƒL˜ëüĐÄ; „|DD|īaĐįUū!ŲPŧd}ĨOâAŠüEÚŽC†C> aōC‘Žšwzhœ/ˆŋųĮPA¯ēĻ´">—ß*×÷˙˙Ō˙ũ˙ōīĪŋÂß}ũW˙úqûŋÁdY}?ákũ~AĮf3qRė¤qS3Gg‘Úx…ĸ„CH]ȁøˆˆˆˆˆˆŖž8ˆˆˆ/ Ž@đ1ŗ”äcˆäG Ž9d ŗ)m 8åÁ!Â×!ˆÁˆõđdAÉšīé u#tĶ6,†üĮš 0‰Â8„ą”søFˆM!!Ļn?ĶÄDDDDDDDG÷M+H¤I˙8)8ČųĻ™Ž.,"âψäGå˙ģMwíÜZd{˙_ņũ?ëO|xd~Xų'_īpÔÃĒ BK¨¸˙â-ŠhSĒžŋŠüÂ4Jt†´ÎôžĶ˙ V9ąĖ9æ™97*Ė980ũsA‡!œr ä3ŽMqŲ)xE‰)×˙ĩ[áÚjģk˙˙\5ĸë‹÷´›Ė>_„›ŦņĄŸŠ.V/ũj„Gũ”éHä}?˙dDG˙͍Hã8ā[7‘ķÃ#‘ˆāSƒ?—R܂G˙IĄÚqšh4!´'@÷ø5åŽ=ÃúÚé ĪdxėūīY‡˙õËŠ÷Ą…ũúxĻH{ü[öø÷ģüfB‘á'[Aˆž/÷÷ųqqį„Ę÷õSú];ŖÉ¸ˆˆpÅļĐģ‚#ŪÕį$~4BĘsCĻErnF9 ‚Kf™š™ÍgPšg Ė9đ¤‡tœD`„DDDDDDDDDGįĸī˙˙÷8ĖRņã>ŒG†O—ĖßĶ-…ĸ b,ØĻĖÄGcū•­Ōâ"É@(.f#ē؃#ük…!GßūšgsHEķÕ÷ŋÄ˙“õÚéũ„gØĻ3Ž™cĻF9œ&Ÿü-1$™Ā_ũų7žGŗ™´a—DF\S‚GHģ#ä)˜ĐvŸīb"""""""CLq!GĀũŽC`ä‡`¤AÄH4—˙vE!ÉŽ@‡A¯ûR Žšœ‡‹Á…\dsļBšäJ/đB""""""Đĸ  ʂ’˙ÄDGúūŗyŗ=˜EkūčZlf2Š˙‚#÷kö…ÅύE‚D[mvŸū¸ę?ˇO5ũruÕH ꏏÁ„Ė8LÃĻqĶ_´ûz˙hDHfbg3aęU¨ũ™¤Čų†|g"äG3eã Æ™dpĨĖš‚ЃEĻė ŋ „pS#ƒO—Ær1ȇ"C\rcäU4 C‘p¤ AH(ĮBėƒqČQɎ™|Ccä3Ž™91Ԙá;,tÂüã ûL‚ã¨P¤á4͈üãĒ S¯äC€OâteÎlōC—ëqŦ—Ēqe=ÇØÔž´˙ÄdpĘDDDDDbĪ!d ö™;_¯ŦDDG÷Úd1‘Ė2æGF˙åæā˲c“‚3ĸ4"ŲĮD4uEãČĪ0ËÅŲŋ! đ`8Č öMɎ‘'@Čô#8ū?ŪąüŽ?éÚ<Ō|FĄÂ’tF…ëxäp™7ÂdūqŅ›eQ3QĩCÁ%„č™ÁŖĒ”fĄ^SŲ8_ĄĶŊp‡ë‘˙‘ŽūƄĄE>ÅKĖ=ßXæyJ l#"#]}!ŋ\5§’Züwū˙x]Œ;$:’tåiÉĢŨäX&Id(ėC"f§Ķû˙#YļđeŽ™P|B"?ÅĩüSĒēųys ÛhĄ‹˛>o75; 9Ė š 5(ĐžŽ?Đŧˆ‹ ˜ Hˆ1Љâ"ŽH28…ũøėOtBŽF9Äl jˆ°„3ŋūËņ´ímPĩã¯ã鐃‘Ž“ū÷ėhĖ ô Ęĩ7%ŋÎĢō ]žgŗÃ8䃗B"""N ˆ˙] 0ëČAŨˆˆˆ‰„P!Įō;=œåPĄ…aS‘âB8Œd„}"]&]ŅHˆļGĖ$frf#Vi^."""""""""""""""? Ú9 qȇ x)ėKy|†0öA°|ˆ9ŽYuLä(éđāČ2Į4Žšg†qČl†ˆLøŋË6ū“úđû›3Â4DQpĮĄÂ!›„ äVę?ĩW“Ŧ‚˙˙ŠŋˇÔ÷˙i–9úkū""#öŗhû ¨ÂøáG ŖbŠ—Ė/ņv6 őあ>DDxŽÜy˜`foŋÆąhZCBÔØh˙kû0ú{ũwû# ģŗg_Úd8éãäc÷˙HŽ-ū„DDō0\Z‰‡Č^˙ėŪ]$""$Ą: ũ3hÃ7™¤ÄGüDDƒáxq䤎Â8˙ÕAÚÚ͚dwūŖûī!´:[iÓ]_Õö*#ŊųĐgŖh„랞ĮͧCˇŲ?ū™ÎDx0ŒØ™ŗųđn&`x5}ŒŽhHƒˆb?ä #ũr ë˙G‚8e~yŸŠ@!(Cô„D˙ûœČâœ#Čũũ X˙ÖG?ÔHƒūŸõ‘ ˆëžHLãĻcgüDGî^0Dvpgķ÷é4-0…˙ŋķaĶß͈ԝėąõ˙„Éi‘ēûB""?Îg‘ô~>žšh4Ú¯˙­˙˙īéŋoöšj¯â"?Čh˙ô˂"Ûŋ˙´‰ŋ§˙˙˙´Î:g}ĄúĨû<)ĻAäí#H.Øt/˙}ß˙ú˙˛1˙ųęÃęaūņąkö"?_Oúũ˙ũöŸBA\rrr ÎCjqČ›—(æöA#™s8ƒrŽ_ȃÄD†Į3–ųŖĐˇáč4 3 ØsÜhY9 qČŅÛarÁņ ü?B$G釅Hâ¨ũ—ĸ ŋüØ>žããũ.>ŋČx@Ėå¸ hĪLã˜rāã˜rc—įÄg˂ …}æG&k=‘ƒÁ~V‡ØĀ„DDDDXB&r!ĄŲ‘č/š/‘Á˙˙ęŋ§ęĖDy“€ŗZÚÚō6ū}hb:#-ˆ†RN?A¯üČ-”dß˙Ą|Š…õ#‹ßũ˙iŊ<á/˙VŌX\ãˎ˙ŋŽ=iÎ;Ú˙_÷žøė§˙ũhĪYãâ>˙ÚÅč˙ßââŖ˙i|Gũøû.VŸũ?ĮŽÖGÚ8&GŒeâPÎÎd˙ÄDDDDDwų=H1ȁƒ3w÷"š <!Č)ŋĮ˙˛Į†šr{_ĒĄ[•aæTh3ęM⋂!?üÛr¤gĢõū÷ũN>ō]~Đë:‹—ßū2,Ÿ˙rå"0—˙đfŲIÁC9 z˜xŇ´G¤LøūQC×ípÄ2 ށäcŦPXëâšdŅ… @LGũb ×÷ûPŽŨ{ëõâ˙ëeôĪ$ÎÍZxˆˆ<‡ x0?3‘šš”¤Vær¨VPW‹”¨VĀüY(B""""#û¯WūwAžEî„Dũ?N`ͅ6)ËôĄm?ņkû^ĢÕĶ_ųc˜sˇųģϚeBeBi´ĸ""&´u_{ÎTAŨ˙í8ģ˙Ž˙˙÷˙×Õ/ũ]Ē˙īĶ>„8é”įt×üDDDGūG2GɜGČ"/ûøˆ‹LAÉøŗ‘T,čŒ#čö…˙¨ŪÅĒ„õūF?ĩĶU˙ŧEūm˙˙ĻqõT›ĩ÷öaȃ—XM;]0ˇkū""""""Kéūb0Eãyüē0ŽšĢ.‰úí #†„"E€ÎHHņ’ĩú㏴ †ÎDUĶø¤ōßkw÷ã×6ß˙뮛Ŧïė ČS,uM+#?īYÎS„4jšū"""">ŋ˙˙˙˙ũ­—i›fŅÖ:ĸ„a#ĄÄ1žIâ"""""""<Đl x‚Č`r #<A\rĒúOeÁ!œuģ ŨėqČėqɎ™s:‘ŽíŽDoúëN†ß˙ ‚¤QÂ'A°ÉežÔ‚ãŽ?÷˙œSœģ)ĸ ‚`‹Ū"""%$",Ū„O"…ôé!¨mBƒ DDé‘ÎÖ!ČqūÖ;´éÎÅ÷dĮLôGÆĪŗūÄDDDG˙_˙˙˙¯˙˙˙˙˙˙w˙ŋõ_ú˙˙ī˛aGˆáMH‡›C˙.Š iââĻ\2ˆär/ˆ„F™ta‘ĖĶ#Q!’aÆx2Čá˛#B"! ĪŒđЈˆˆ]…ĀãØB!Ķ8ä3™ü…#,”}ũėƒŽ™=„Q°LøC—Á‡0ëÄ&[‘\Š95Ĩß<–Ę‘_˙ë_õ_÷˙˙ŋũyŪ8GŅ€§‚‘Čé¯īNĶMfÜ˙˙ãĒÛķLučÓÃõô–Įß˙^žĒ˙žTHŲ71ÍÆ&™Į0ū㈈ˆˆˆ‰õßßú˙¯ėŽeÑâāš€PG äpÁ3Hā„pË#ÄpÕ6Ž28ÍæŅčÆ`eČÆ\R^ņŲ ŽC 09†#ŒrîBA‡/ 97* „rđaÔDDDDԄDDDFfˆaI@ĨŲ´lB9‘ķlĀĻŅvRd`ÍĸH`!dvpĪ…8 .‘ŗ9ˆ‹ Ą(0Čá '#hE‚dpĶđđˆRãjŋä3bČ̈Pf„œ§&:dIŨ–ųĮ˙ČAČ0?ŧ!Ј„G ˆžGģ8ä(éĻŽ˜rc…|^AŦt؈ˆˆ‹+}š´^#åÍ&E|˜ā¤nŲh.lˁxšás“‹čDDFÂĄĒh+L!kg\ēwûˆˆ‹'šdAË{ŋĄ5ü@†ôǞ(%€ %€ leptonica-1.86.0/prog/form2.tif000066400000000000000000000117741506303110300162660ustar00rootroot00000000000000MM*>˙˙˙˙HgDEr°ˆDJŽ;AQÕΚ ĄgaĒÕ°A.Čø¸‘Á€„æ‰(äc˜sA&$˙„-5Ž"㈏üwü_ ƒũūæwČ0h~ŋĮĐ´L˙˙ßúũb}ˆ‰Ö$×iōg”2€į"ņôF"öG!â<4ÁĩĶLƄ1´ËßBD†Áäqȃˆˆ‹ämGXĮĄ˙đDH ƒˆ|†‡˙ Ž?9،ūb3°ûęD=x} @в8L/Ų(NÎ8*a3Â3g Ī0Ė;œrŨk÷eBeœ¸ ûŽ""9*ŽGŲÄr4F"„Td&yF–h2œ›•kę]XM4Ķ<“8ĖÄ)Ō 4ͤĪ,DDGÃB!äq28âČᜎ˙øŽ#ī0Đ\!ŪA&>Lr1ü‚˙Bņ đŽИ& IÂd°ÜCŽaÂd1dĮ_ŖŦDDDDDFU™Đĩ*Īŗ^HsBeXGK:b""˙‡i„ËÄv9öˆƒĖr ä09 åŽF9rc‘ ˆ9 91Č ä2éĮ÷ÆąÆŧwų úū$3ŽF=˙ëˇĶ"Gō ä6īäH߈ˆˆˆˆˆˆˆˆˆ$Iv§b­G`ˆ‹"1"Xĸ"""9EDT#Z.Í ‘uA˜Y!ĶBĶLô™xė4RŧH¸h#XC0)pb " 'C)ČĮ!”äDŒrĮ!G ‰kņ„8ãž#ˆûü†eÅ. <œ~C,r ČĮ!œw™á›“)Ėæë8čˌlŗ—Ęšd8āŠpĨŲũL:=˛,LķPĘ­8ˆq{‹B""ÂHDú4"P¨AåBRĮÄCˆÂ5Ļ‚xˆÂhˆärܓ“†\ ›"ä\S.eÆG \eÅ0Ž"qds0ē0Dq‘ĀÁŗŽÜhh^‡§kņhp×˙ɏ0ųä6š˙˙éūįͧ…;Qģĩ ÃÂaL:ųˇO4&qČ0>Ž qĖ8*a;RĮ0ærs'ęC3…ŖN%B°`šiĻÃĄМœ'¨ˆ´""-ˆ" ˆ6C)Eĝˆ‰|DD‚•€<3ĸ ܆ÁĄ…YŽ!#š#ČƒĻ;Ž"#øī!Ž9 Š ƒP>BŽD†ÁČ äA˙ `}NΊˆMH”\Ķ7#D ĘŦ¨(šÆĘōƒ)PĄb–"ƒ)ÉLÎWĘs9‘Ŋ a˛ÄƒØLŒđ„Zˆˆŧ!DO¤„N)g™0HÁš‘F"„z>3h闎ˆˆŗb.”Hx „ší3hũjĻķi2ų12>šeŌpâĖ`žy Ė#‡LYŒ6‚jnˆ0BCBhDDX"qF8´!×#F‡˙X‹ö"ûõ!üƒXųr7ŧŒr:ųãb ę"jBĘPj Ē„ˆĻ ˆÄZhDEÄâ8eÁ›2î#Qa Žú&8‹ũũŽ¸žĮ×ųĸ#Nûūēd}2<]K#@f Ëq¨ē1ΔDDešJ&{1šĸN'GŗųDŠDj%9„šhˆ9 ãAČ`pr1Č‘ĖA˜#† lBâҐŅĩņą§§Įär“‘äcŋûM3˜rc§ ÃĻ™Į˛+ĒgÎ9á27w0újaËr1ņ 4Nв‹ Ę„g€…Ąe9„ʄĘŦ aAĻV- 8é–:ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒ•Dr7ãdGĪF"9›g‘ŒĐ!q 2ų€Í8͊`äxœ3¸†ķŒá͸[ˆ‹N-B."ĶA ė!hXA§Xzwũ¯û˙Ŗīīí{M4Î:Úi„íBĻA‘Ū˜O"1D"""""#*¨F¤QŅB2$RPˆR!Č äHlPˆÔ•¯!–<ėšúųŧär8f"<`Ž3‘Čē8“0…ØK‚*<†āŠ~§ CmA⊈‘ŌĨ&ĨF‰IĶfãBdüØW•dH8į‚ –D"9[Wš6  ¤AYŦ`ŸGÅ0Íä|ˆŖ™ČÜa#Ã1—ŽD!™ĮŒÚ7˜gî„4$nD`ƒ4â- ‘ŽFäH ¸âĐ´D8ˆ×ôĐžųã`|Œüqâ´ō1Đy1ɎúŪAČ.ęB:”ˆDDDDDDéˆÄrQČÆQ™æ#lÄz#™Ã#æ1ãb‘ķfyˆųxē0‹‘x‹Æ#4qdqO€BxÁFs6)8E˙hˆâ-4ČစĄ"!ØB.-;Œ! !hY*`„hD_ôDązühZĮ|uū8"?ņH08ų ƒģL”-áHā…Ķ‹ML9'$ä|„u"A@éÚgDDDDDDDDDE”ˆˆŒ•ŖL"ņ<Œ3Čú9—g‘ÄS™#'EãHŽÎ#HÁ„‹ĮUFŲÁ˜2„CFãš.Fōô"qwåÍ0™hAĄg @Ėh‚‘`XLŽĶLØDĖđQ´Ķ#ÅŌg …ÁĄiÁœGpÂ"Đv…ĒÜG"8˛8#a oȃæĮĮņëˇ!/Ų ƒ˜u´×ģČƒĒ‘weŽLr1íS˛C‘ŽĢĐéŠRÄDDDDDD눈‹)hāF %(„ZÚb4 éڌ”včôAŖĒ7É4CÍÆälĖŅ GŅžJcHĶ‘°3 NÖF}z6Ėd|ķ/—f6ËŖ8Žex“.ŽGÄ­sa LŽšXL!#yC‘EĐžÖ5WDrÍŽ#ū!úđdAɎBÆA܌r˜\‡pจˆˆˆŽ#‡É9!ČaËŒrnA¸åš1ˉ ČųxĶĘRŽēúŠ‚"ÃcũūA@ä(éâÔč‘1+ReĶ'9N™œ”Í5Į’_æč#’ąžĐ¸HE…[!Į"ZŨ¯Š}3f  …â#Œĸƒš¯#ƒpBČāņhŒqdsBō@h0<.TøžŪ"1M> ëŗŽšhGc“toĒÍ+øˆˆˆˆŠ˜Čôēé—eō>tr>Öt äq—ˆsĀsĒÃ˙dp`5Q¸5ŋô1#ŒŽ — ĀŊHgŒ}YŅD_˛yŦ¨EÅō įtĘxf‚cŠ ]•}phMHŅ]AČĮɎDlŗĮj…œt" ĘÄq["Īh„ŗ9Į3™Ãû;•ĻVi‚eņXtˆE#ĸĢFĸ騝§aPˆ¸lâb)KÛbGICFŒs`ĻG!N 4yGHŊœ6?ꩄ Øhpz¯Æ„CˆˆˆŽF=÷}8ƒEĄ|†hųöEĐ*Čgƒ9ÄZaS<‚cûĘ´ ˆˆ4#+P„E+4ĶMeÅ1›4Ax&ä,Îå9pBx'…bÂ(ä0""#„E§‘ÍĐ´ 0úŲBĨģ/â8`ØĨĘqōqėÎåbŲ‘ ;ˆĩZy‡ģ˛1Û´Õá”0!9'ų÷đÎ:vqԗ}2*(ˆü¨ā™8͈Gē„ö\4Ę{'=ąh†„DDēâķŠÂbÎę9öĄH)ĩœeÃadp؈`r-ŲœÃ­zMš$ŧ‡ÖĄėmPū/õŊ+Ąh}a‘wĀëWÜf/h^.ʃ6ÆˆæGŒdŽ#įŅôhŒ¨DpĖŅĨϚ`„;"í0š ú ˆú4# 3:1—<8‹ˆˆ‰ 8$ADE„ErP,‹Ņū"-S´âĐ˙ȃAČQĶ´ĶR ēe˛ #6GÍÅĐ${0eŲA›ˆėģgu0áМŦ)ÉŲâ Í !B,¨Qāâ""""RĶB1˙ü@Šūū6ėô(%€ %€ leptonica-1.86.0/prog/fpix1_reg.c000066400000000000000000000332441506303110300165610ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fpix1_reg.c * * Regression test for a number of functions in the FPix utility. * FPix allows you to do floating point operations such as * convolution, with conversions to and from Pix. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void MakePtasAffine(l_int32 i, PTA **pptas, PTA **pptad); static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); static const l_int32 xs1[] = { 300, 300, 1100, 300, 32}; static const l_int32 ys1[] = {1200, 1200, 1200, 1250, 934}; static const l_int32 xs2[] = {1200, 1200, 325, 1300, 487}; static const l_int32 ys2[] = {1100, 1100, 1200, 1250, 934}; static const l_int32 xs3[] = { 200, 200, 1200, 250, 32}; static const l_int32 ys3[] = { 200, 200, 200, 300, 67}; static const l_int32 xs4[] = {1200, 1200, 1100, 1250, 332}; static const l_int32 ys4[] = { 400, 200, 200, 300, 57}; static const l_int32 xd1[] = { 300, 300, 1150, 300, 32}; static const l_int32 yd1[] = {1200, 1400, 1150, 1350, 934}; static const l_int32 xd2[] = {1100, 1400, 320, 1300, 487}; static const l_int32 yd2[] = {1000, 1500, 1300, 1200, 904}; static const l_int32 xd3[] = { 250, 200, 1310, 300, 61}; static const l_int32 yd3[] = { 200, 300, 250, 325, 83}; static const l_int32 xd4[] = {1250, 1200, 1140, 1250, 412}; static const l_int32 yd4[] = { 300, 300, 250, 350, 83}; int main(int argc, char **argv) { l_float32 sum, sumx, sumy, diff; L_DEWARP *dew; L_DEWARPA *dewa; FPIX *fpixs, *fpixs2, *fpixs3, *fpixs4, *fpixg, *fpixd; FPIX *fpix1, *fpix2; DPIX *dpix, *dpix2; L_KERNEL *kel, *kelx, *kely; PIX *pixs, *pixs2, *pixs3, *pixd, *pixg, *pixb, *pixn; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa; PTA *ptas, *ptad; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "fpix1_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Gaussian kernel */ pixa = pixaCreate(0); kel = makeGaussianKernel(5, 5, 3.0, 4.0); kernelGetSum(kel, &sum); if (rp->display) lept_stderr("Sum for 2d gaussian kernel = %f\n", sum); pix0 = kernelDisplayInPix(kel, 41, 2); regTestWritePixAndCheck(rp, pix0, IFF_PNG); /* 0 */ pixaAddPix(pixa, pix0, L_INSERT); /* Separable gaussian kernel */ makeGaussianKernelSep(5, 5, 3.0, 4.0, &kelx, &kely); kernelGetSum(kelx, &sumx); if (rp->display) lept_stderr("Sum for x gaussian kernel = %f\n", sumx); kernelGetSum(kely, &sumy); if (rp->display) lept_stderr("Sum for y gaussian kernel = %f\n", sumy); if (rp->display) lept_stderr("Sum for x * y gaussian kernel = %f\n", sumx * sumy); pix0 = kernelDisplayInPix(kelx, 41, 2); regTestWritePixAndCheck(rp, pix0, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix0, L_INSERT); pix0 = kernelDisplayInPix(kely, 41, 2); regTestWritePixAndCheck(rp, pix0, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix0, L_INSERT); pix0 = pixaDisplayTiledInColumns(pixa, 4, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix0, IFF_PNG); /* 3 */ pixaDestroy(&pixa); pixDestroy(&pix0); /* Use pixRasterop() to generate source image */ pixa = pixaCreate(0); pixs = pixRead("test8.jpg"); pixs2 = pixRead("karen8.jpg"); pixRasterop(pixs, 150, 125, 150, 100, PIX_SRC, pixs2, 75, 100); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 4 */ /* Convolution directly with pix */ pix1 = pixConvolve(pixs, kel, 8, 1); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixConvolveSep(pixs, kelx, kely, 8, 1); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 6 */ pixaAddPix(pixa, pix2, L_INSERT); /* Convolution indirectly with fpix, using fpixRasterop() * to generate the source image. */ fpixs = pixConvertToFPix(pixs, 3); fpixs2 = pixConvertToFPix(pixs2, 3); fpixRasterop(fpixs, 150, 125, 150, 100, fpixs2, 75, 100); fpix1 = fpixConvolve(fpixs, kel, 1); pix3 = fpixConvertToPix(fpix1, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 7 */ pixaAddPix(pixa, pix3, L_INSERT); fpix2 = fpixConvolveSep(fpixs, kelx, kely, 1); pix4 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pixs2); fpixDestroy(&fpixs2); fpixDestroy(&fpix1); fpixDestroy(&fpix2); /* Comparison of results */ if (rp->display) { pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); lept_stderr("Ave diff of pixConvolve and pixConvolveSep: %f\n", diff); pixCompareGray(pix3, pix4, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); lept_stderr("Ave diff of fpixConvolve and fpixConvolveSep: %f\n", diff); pixCompareGray(pix1, pix3, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); lept_stderr("Ave diff of pixConvolve and fpixConvolve: %f\n", diff); } pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixaDestroy(&pixa); pixDestroy(&pix1); /* Test arithmetic operations; add in a fraction rotated by 180 */ pixa = pixaCreate(0); pixs3 = pixRotate180(NULL, pixs); regTestWritePixAndCheck(rp, pixs3, IFF_JFIF_JPEG); /* 10 */ pixaAddPix(pixa, pixs3, L_INSERT); fpixs3 = pixConvertToFPix(pixs3, 3); fpixd = fpixLinearCombination(NULL, fpixs, fpixs3, 20.0, 5.0); fpixAddMultConstant(fpixd, 0.0, 23.174); /* multiply up in magnitude */ pixd = fpixDisplayMaxDynamicRange(fpixd); /* bring back to 8 bpp */ regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 11 */ pixaAddPix(pixa, pixd, L_INSERT); fpixDestroy(&fpixs3); fpixDestroy(&fpixd); pixDestroy(&pixs); fpixDestroy(&fpixs); /* Display results */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 12 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Test some more convolutions, with sampled output. First on pix */ pixa = pixaCreate(0); pixs = pixRead("1555.007.jpg"); pixg = pixConvertTo8(pixs, 0); l_setConvolveSampling(5, 5); pix1 = pixConvolve(pixg, kel, 8, 1); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 13 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixConvolveSep(pixg, kelx, kely, 8, 1); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 14 */ pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixConvolveRGB(pixs, kel); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 15 */ pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixConvolveRGBSep(pixs, kelx, kely); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 16 */ pixaAddPix(pixa, pix4, L_INSERT); /* Then on fpix */ fpixg = pixConvertToFPix(pixg, 1); fpix1 = fpixConvolve(fpixg, kel, 1); pix5 = fpixConvertToPix(fpix1, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 17 */ pixaAddPix(pixa, pix5, L_INSERT); fpix2 = fpixConvolveSep(fpixg, kelx, kely, 1); pix6 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pix6, IFF_JFIF_JPEG); /* 18 */ pixaAddPix(pixa, pix6, L_INSERT); regTestCompareSimilarPix(rp, pix1, pix5, 2, 0.00, 0); /* 19 */ regTestCompareSimilarPix(rp, pix2, pix6, 2, 0.00, 0); /* 20 */ fpixDestroy(&fpixg); fpixDestroy(&fpix1); fpixDestroy(&fpix2); pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 21 */ pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); /* Test extension (continued and slope). * First, build a smooth vertical disparity array; * then extend and show the contours. */ pixs = pixRead("cat.035.jpg"); pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); dewa = dewarpaCreate(1, 30, 1, 15, 0); if ((dew = dewarpCreate(pixb, 35)) == NULL) { rp->success = FALSE; L_ERROR("dew not made; tests 21-28 skipped (failed)\n", "fpix1_reg"); return regTestCleanup(rp); } dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, NULL); /* two invalid indices in ptaGetPt() */ dewarpPopulateFullRes(dew, NULL, 0, 0); fpixs = dew->fullvdispar; fpixs2 = fpixAddContinuedBorder(fpixs, 200, 200, 100, 300); fpixs3 = fpixAddSlopeBorder(fpixs, 200, 200, 100, 300); dpix = fpixConvertToDPix(fpixs3); fpixs4 = dpixConvertToFPix(dpix); pix1 = fpixRenderContours(fpixs, 2.0, 0.2); pix2 = fpixRenderContours(fpixs2, 2.0, 0.2); pix3 = fpixRenderContours(fpixs3, 2.0, 0.2); pix4 = fpixRenderContours(fpixs4, 2.0, 0.2); pix5 = pixRead("karen8.jpg"); dpix2 = pixConvertToDPix(pix5, 1); pix6 = dpixConvertToPix(dpix2, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 22 */ pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 23 */ pixDisplayWithTitle(pix2, 470, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 24 */ pixDisplayWithTitle(pix3, 1035, 100, NULL, rp->display); regTestComparePix(rp, pix3, pix4); /* 25 */ regTestComparePix(rp, pix5, pix6); /* 26 */ pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); fpixDestroy(&fpixs2); fpixDestroy(&fpixs3); fpixDestroy(&fpixs4); dpixDestroy(&dpix); dpixDestroy(&dpix2); /* Test affine and projective transforms on fpix */ fpixWrite("/tmp/lept/regout/fpix1.fp", dew->fullvdispar); fpix1 = fpixRead("/tmp/lept/regout/fpix1.fp"); pix1 = fpixAutoRenderContours(fpix1, 40); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 27 */ pixDisplayWithTitle(pix1, 0, 500, NULL, rp->display); pixDestroy(&pix1); MakePtasAffine(1, &ptas, &ptad); fpix2 = fpixAffinePta(fpix1, ptad, ptas, 200, 0.0); pix2 = fpixAutoRenderContours(fpix2, 40); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 28 */ pixDisplayWithTitle(pix2, 400, 500, NULL, rp->display); fpixDestroy(&fpix2); pixDestroy(&pix2); ptaDestroy(&ptas); ptaDestroy(&ptad); MakePtas(1, &ptas, &ptad); fpix2 = fpixProjectivePta(fpix1, ptad, ptas, 200, 0.0); pix3 = fpixAutoRenderContours(fpix2, 40); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 29 */ pixDisplayWithTitle(pix3, 400, 500, NULL, rp->display); fpixDestroy(&fpix1); fpixDestroy(&fpix2); pixDestroy(&pix3); ptaDestroy(&ptas); ptaDestroy(&ptad); dewarpaDestroy(&dewa); kernelDestroy(&kel); kernelDestroy(&kelx); kernelDestroy(&kely); return regTestCleanup(rp); } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { PTA *ptas, *ptad; ptas = ptaCreate(4); ptaAddPt(ptas, xs1[i], ys1[i]); ptaAddPt(ptas, xs2[i], ys2[i]); ptaAddPt(ptas, xs3[i], ys3[i]); ptaAddPt(ptas, xs4[i], ys4[i]); ptad = ptaCreate(4); ptaAddPt(ptad, xd1[i], yd1[i]); ptaAddPt(ptad, xd2[i], yd2[i]); ptaAddPt(ptad, xd3[i], yd3[i]); ptaAddPt(ptad, xd4[i], yd4[i]); *pptas = ptas; *pptad = ptad; return; } static void MakePtasAffine(l_int32 i, PTA **pptas, PTA **pptad) { PTA *ptas, *ptad; ptas = ptaCreate(3); ptaAddPt(ptas, xs1[i], ys1[i]); ptaAddPt(ptas, xs2[i], ys2[i]); ptaAddPt(ptas, xs3[i], ys3[i]); ptad = ptaCreate(3); ptaAddPt(ptad, xd1[i], yd1[i]); ptaAddPt(ptad, xd2[i], yd2[i]); ptaAddPt(ptad, xd3[i], yd3[i]); *pptas = ptas; *pptad = ptad; return; } leptonica-1.86.0/prog/fpix2_reg.c000066400000000000000000000101211506303110300165470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fpix2_reg.c * * Regression test for FPix: * - rotation by multiples of 90 degrees * - adding borders of various types */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { FPIX *fpix1, *fpix2, *fpix3, *fpix4; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test orthogonal rotations */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); fpix1 = pixConvertToFPix(pix2, 1); fpix2 = fpixRotateOrth(fpix1, 1); pix3 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 0); pix4 = pixRotateOrth(pix2, 1); regTestComparePix(rp, pix3, pix4); /* 0 */ pixDisplayWithTitle(pix3, 100, 100, NULL, rp->display); fpix3 = fpixRotateOrth(fpix1, 2); pix5 = fpixConvertToPix(fpix3, 8, L_CLIP_TO_ZERO, 0); pix6 = pixRotateOrth(pix2, 2); regTestComparePix(rp, pix5, pix6); /* 1 */ pixDisplayWithTitle(pix5, 560, 100, NULL, rp->display); fpix4 = fpixRotateOrth(fpix1, 3); pix7 = fpixConvertToPix(fpix4, 8, L_CLIP_TO_ZERO, 0); pix8 = pixRotateOrth(pix2, 3); regTestComparePix(rp, pix7, pix8); /* 2 */ pixDisplayWithTitle(pix7, 1170, 100, NULL, rp->display); pixDisplayWithTitle(pix2, 560, 580, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); fpixDestroy(&fpix4); /* Test adding various borders */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); fpix1 = pixConvertToFPix(pix2, 1); fpix2 = fpixAddMirroredBorder(fpix1, 21, 21, 25, 25); pix3 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 0); pix4 = pixAddMirroredBorder(pix2, 21, 21, 25, 25); regTestComparePix(rp, pix3, pix4); /* 3 */ pixDisplayWithTitle(pix3, 100, 1000, NULL, rp->display); fpix3 = fpixAddContinuedBorder(fpix1, 21, 21, 25, 25); pix5 = fpixConvertToPix(fpix3, 8, L_CLIP_TO_ZERO, 0); pix6 = pixAddContinuedBorder(pix2, 21, 21, 25, 25); regTestComparePix(rp, pix5, pix6); /* 4 */ pixDisplayWithTitle(pix5, 750, 1000, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); return regTestCleanup(rp); } leptonica-1.86.0/prog/fpixcontours.c000066400000000000000000000050071506303110300174340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fpixcontours.c * * Generates and displays an fpix as a set of contours * * Syntax: fpixcontours filein [ncontours] * Default for ncontours is 40. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const char *fileout = "/tmp/lept/fpix/fpixcontours.png"; int main(int argc, char **argv) { char *filein; l_int32 ncontours; FPIX *fpix; PIX *pix; if (argc != 2 && argc != 3) { lept_stderr("Syntax: fpixcontours filein [ncontours]\n"); return 1; } filein = argv[1]; if (argc == 2) ncontours = 40; else /* argc == 3 */ ncontours = atoi(argv[2]); setLeptDebugOK(1); lept_mkdir("lept/fpix"); if ((fpix = fpixRead(filein)) == NULL) return ERROR_INT(__func__, "fpix not read", 1); pix = fpixAutoRenderContours(fpix, ncontours); pixWrite(fileout, pix, IFF_PNG); pixDisplay(pix, 100, 100); pixDestroy(&pix); fpixDestroy(&fpix); return 0; } leptonica-1.86.0/prog/fuzzing/000077500000000000000000000000001506303110300162175ustar00rootroot00000000000000leptonica-1.86.0/prog/fuzzing/README.md000066400000000000000000000012461506303110300175010ustar00rootroot00000000000000# Leptonica fuzzing This directory contains fuzzing tests for Leptonica. Each test is in a separate source file *_fuzzer.cc. Normally these fuzzing tests are run by [OSS-Fuzz](https://oss-fuzz.com/), but can also be run locally. ## Local build instructions Local builds require the clang compiler. Use clang-10 on Debian GNU Linux, which can be installed using sudo apt-get install clang-10 To build: ./configure CC=clang-10 CXX=clang++-10 make fuzzers CXX=clang++-10 ## Running local fuzzers Each local fuzzer can be run as in the following example. # Show command line syntax. ./barcode_fuzzer -help=1 # Run the fuzzer. ./barcode_fuzzer leptonica-1.86.0/prog/fuzzing/adaptmap_fuzzer.cc000066400000000000000000000043021506303110300217210ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *return_pix1, *payload_copy; pix1 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); pixBackgroundNormGrayArray(payload_copy, pix1, 10, 10, 10, 10, 256, 10, 10, &pix2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&payload_copy); pix1 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); pixBackgroundNormGrayArrayMorph(payload_copy, pix1, 6, 5, 256, &pix2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&payload_copy); pix1 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixBackgroundNormMorph(payload_copy, pix1, 6, 5, 256); pixDestroy(&pix1); pixDestroy(&payload_copy); pixDestroy(&return_pix1); pix1 = pixRead("../test8.jpg"); pix2 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); pixBackgroundNormRGBArrays(payload_copy, pix1, pix2, 10, 10, 10, 10, 130, 10, 10, &pix3, &pix4, &pix5); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&payload_copy); pix1 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); pixBackgroundNormRGBArraysMorph(payload_copy, pix1, 6, 33, 130, &pix2, &pix3, &pix4); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&payload_copy); payload_copy = pixCopy(NULL, pixs_payload); pixContrastNorm(payload_copy, payload_copy, 10, 10, 3, 0, 0); pixDestroy(&payload_copy); pix1 = pixRead("../test8.jpg"); payload_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixGlobalNormNoSatRGB(payload_copy, pix1, 3, 3, 3, 2, 0.9); pixDestroy(&pix1); pixDestroy(&payload_copy); pixDestroy(&return_pix1); payload_copy = pixCopy(NULL, pixs_payload); pixThresholdSpreadNorm(payload_copy, L_SOBEL_EDGE, 10, 0, 0, 0.7, -25, 255, 10, &pix1, &pix2, &pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&payload_copy); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/affine_fuzzer.cc000066400000000000000000000016411506303110300213650ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *return_pix1; PTA *ptas, *ptad; ptas = ptaCreate(0); ptad = ptaCreate(0); return_pix1 = pixAffinePta(pixs_payload, ptad, ptas, L_BRING_IN_WHITE); ptaDestroy(&ptas); ptaDestroy(&ptad); pixDestroy(&return_pix1); pix1 = pixRead("../test8.jpg"); ptas = ptaCreate(0); ptad = ptaCreate(0); return_pix1 = pixAffinePtaWithAlpha(pixs_payload, ptad, ptas, pix1, 0.9, 1); pixDestroy(&pix1); ptaDestroy(&ptas); ptaDestroy(&ptad); pixDestroy(&return_pix1); ptas = ptaCreate(0); ptad = ptaCreate(0); return_pix1 = pixAffineSequential(pixs_payload, ptad, ptas, 3, 3); ptaDestroy(&ptas); ptaDestroy(&ptad); pixDestroy(&return_pix1); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/barcode_fuzzer.cc000066400000000000000000000007041506303110300215330ustar00rootroot00000000000000#include "leptfuzz.h" #include "readbarcode.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; PIX *pixs; SARRAY *saw1, *sad1; leptSetStdNullHandler(); pixs = pixReadMemSpix(data, size); if(pixs == NULL) return 0; sad1 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WIDTHS, &saw1, 1); pixDestroy(&pixs); sarrayDestroy(&saw1); sarrayDestroy(&sad1); return 0; } leptonica-1.86.0/prog/fuzzing/barcode_fuzzer_seed_corpus.zip000066400000000000000000001440571506303110300243550ustar00rootroot00000000000000PK ĒĨPļđōŊk k barcode-128-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDR­‹GÛgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I ŸIDATxœíœOn$ˇ‡ŲaBV•$æ5˛\Gņb ›Đp•  ¯ú>JJ-įaC‹,ÃΊļ)2$ë˙Ģ›ŲÄÕ#ŒĻͧ7ßûŊGJ3=@ü/ėØģcwėŽŨą;öėe|ß7–Ā‚FŋĢôĪgj ÚĮą ÔúũPbÅAEÆOô–‚8aa,‡Ë*ö[ˆčq,ūjĀęšûŠÕĖJ`›nÁvEΘĀöōny)ÔØæųZ Û!!9 Ø×"ØgšĘ*Äō#šĒļˆÛgA˜ UÕĢ)yx&ĮØ] `¯âĒą%ĻLae¨ž`G,,2ŧKĐs˙]õ,•ōJž™2+Ō<÷ŧz°ŦÂÂöŊ€j,ŠûcŦ”€[‰­€*˛õŦ.ˆílßöŧ ŽÕvâĩVNŲ„USÆa1,ŅÔ “ØĒ VŽ•_Ô3šoE‘–iŦÜą:ˇ ûSOQl:ā|Ļ*ˇúã€Áūî€˙eŅ—9"ånQ‹Ë ŖąE6˜2Pk\(lÎE(įú!Ov€TĀûËtex ËĨÉŽQĢk=V°âēļ{×ã׌}-‡åíZw-Ͱû°Ÿû”Įć8ĩ40"•Â~U߅ũų¯â{*gŽš@%îʁe›°?rÁ!A´fm€h,´í$ö°Ë˙ņĨoy#čN-‡¸&ōR×dyr+hŦpąRBÄíŋÄMیŪ>Z5Ac-;āšÎXЈũX$ÔēZKĐ‚ÉHlÄĘ*g hŽvÍ-Fĩ í›\¤:kėeÁōÃ$ÁpëaCIPXĻąSĩËV6‡É§J%DąžŒĐX­!5ōč^ÜZI8Únĩ¨Va?´„÷EŸ$ ģ´ė¨6„]ÜÚ-fD, Qˇ‹ģe`N‚×2›’ ąĀ’āēIĩŦļZ†5-s%CS•‡S8ˇmnnŠž2; õ€%֘2šįöfˇŒX@‚]Ÿ2ŧ ī"›Xo1†°Dc—UcaŲ ĄÅ+IŗÆÁ“ā$Ą ¸ĖiY(`4Rm|1šûölē%VËļŒSfW &ŦÛĐ8„æíÛEqܒ`ĀRĖÄ"S€ĨŠ ˜?ŧHŒkܑpÛ°`ËϺ˘˛Û°Œ ÆŦj/ņ$čĐĘ[X^:"mė0ŧ÷¸ ,=eN‡¨Õä,ávX5˙™˛ø8”oƒ‰5l¨eM: 9kÜŲˇãɋxdx•[÷ڜ>Ëhõæ¯#ᖋ$`Û¸;ÁĖ-°I°‡÷2í„ČĒÉL‚ģÆ#,•Û¸sÕ4Ë­fēąehÆžé$œ] ĖiY~nũá}Đ­)ámš1 ëVƒ7įÖ<Ūü“×ÁŪȆUcoĀ­—„lˇÉÜŽIØ6Ž5ŨzXš–ĀšŧUC7¯qæ´ŦqąØŧ~ nelNBdˆŲ˛UŦšo#XēLÚŧÁĀ´k3ˇĄ€ĩYn‰ã6°.tũhØÆ^5MhÕI@÷å6ŽÕ-ëCØtĀ€šÆ›D uŦZœ[m;V[G%,ˇƒ{š(ļąsģ‚ NYDqÜϰĄq¸[4’ ž?”l™)!×í‚ŨÆvÂ5ˇeø>ˇÖđ6+I˜%’Pģš=÷A,q°“Ûžln'ˇ}OBŽ[âcS&?.$aÁ‚%`§‹nb-CnÔ´áj7aoÜhYÜ­Hˆ$!˛jjOB8`)CęûĨ uŽhŦšKƀŨëvJqZVO؄[—‚ Šã>RmíCØíҍöf`ģ\ áj l3aÉ\햀ųØaĘF XCŸ›„ļâ>6ívĩe:ˇ<Ø˛Ä8äaáõĒõą[B•’ā$ÔŅqpą^ĩpÂI8åå6wĻ€™-#Ų-Ŗ öÉÁrkxĮjad˛Z6aoŪ”ÁÕjŨ–=™IčLˇˇ-VZļŅ­™âŦJĩ į úĀėļ3ąÄ¨6Ö˛û‘˜˛Žc–„1 īNĩpZãÜkŲŧĒtˈS-0ŨōÆĄØ”Ų¨—[čWëo°tĩ! lŽ„1ˇbÁNÕvū™+á#:ŧ˃š}Ø-õX-Q[kŽÃJĀ|lpxo#vnY{ņŨjl?TË`1 ˛eGB ˜Üˇ"-ÁukĖÅ­j3$ŧ÷m7ĩ,7ˇ6VŸebl™X‘@& Éqø˜6˜3Č:"Ģe™n O“[ ûÔvÂĒ[ĀÚ§Cc­qÞ fËzw'ŒÕļy.>vr+BؐÛõ$Xœ$Ôū”eT;ŒÃ€ŊŒÃëˇĖY5Ü ŗe•ÆÎÕįjĶ-›Ēe:ˇÖđĘßíKhŦjŗÜb?`Ė9tžBØŧ܊i1:ĢĻöŨfŒZûvœ2R Ķž•X1H@ÜŽV{öĢ×øâv‘ĐXûvHÂ9Žeđjƒ–@ƒX¯ZųUũZĀfė×KĄÛܖˇ$ŧ/nÅ؝ŦjģL,•Õ.ĢÃ-°ØOBŌíP훉 HܞōZF͖Iė9ęÖkYKGė›vĢąbH‚5yšĨ†Û ‹ĻáÜúØŧ–ŨŒ$ ØŲí„=EŨÆZϰtnŲėvÂō•–Ĩ’`cŅ„ ė^,˛sË]ˇuž[3ˇĮ1ˇ–„Ų-[ļR-ÕØÛœ„ã"!0Û'†×™˛¯ÕŌqx‡jiÍ*܈ŋŖ˙"BšŊ9šM`ŋk1úIô\„€]Gˇh^۟ č“ũ1‚‹aÛ;¸Å[ķJ´iRKũqļ~_Ä&ZËĢ_Äį7÷ ‚Ø/’BØŌûĢĀūŗVŪ0(’[Oũ-jŠx‘WvcyúĘũ5– sū€ëĶAŅ$sÄöe^s*Ā‹€¸­€Ügr͉—WB `y}å5im‹ķõÆ `YCX#™ŦQX .äƚ"ØS#™|ÂŌ"ؖ[Žf,’ØöqŦx˛s„Ž tIMEØ 4˜=  tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨP¨Æ¸Ž Ž barcode-2of5-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDR• kō“gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IÂIDATxœí›?Žä6ÆYą lX l˛Á`čĀ˜ †›íœ-°X›80†*Ë@…}OčcX Î ŧjtĐĄŲp°XCš¤T%RzüŖ’"[…ééĻúWī{ß÷ŲĶŨHnūāhgîĖš3wæÎ´6bū¨˙ęrķqKeyXÃ,ąyW™§ö¤šJ´†)P_[f DÔŧĖJf‡˛ąÎ‘-˜lølÃŦ{Ļúx%ŗ˙gSmÍđĀ,‚Čŗ%åXį=Įš~\ÉŦiMŸĨW2i=0Õ.Ō ’kfą&ķj's|doĖ•jæëWø¨WĀæ'ˆ˙åĀūšĩ¯&Âkwˆ:ã:ŗëę™jį)ŨĢvĸŠĸ†Ŧ™ęŊbÖxŗCš@…@æėĐĖŽŋ=ĐLŠÖ{IôQVģˆŲĻÜã2ozėĖ•÷,s.Ël5ķŖ|÷Aĸ‚#zâåęí&æ/RVVÁÔ|2Y0u%aˇ1˙+ņ¯‚¨ŨyĐLá0Yķã—ô=§ĒMˆÔH⁛9ŗ5Ld~üAŪqy§^úN?U?#|aō‘ŲÚLŸvõ4¤´hÕī./ev@šÕĪlÆÔ/ÕN™÷n“~‚uΘ'€é÷(Â<9L푗IÖ9ë'¨=čQķfí6“oÄ<ų=šiĪÛUYŠÖ™ĘŒh_ęûŠg–­ō(ĸũZg`æŦ:MæņēyŋĖ‘UįŊ]§´˜Cãib˛…ųŦ"uÂų,Ff;ö3ŋ‰Y:Ėk?sˇŸ!.ĖQģ›ĨˆGą~N|/ŒG& iĪŊ™ŋj3R'ņäĶŌŽVyŠ“Ļhˇ<|7™ˇ˜ü2›$2GđŊõeŪÔÉ{féįPg5e‚žķ¨v› õŗ÷¨‡Mû ֙_}'|ĸéĄ>fn1'ĩf°ÎŠī`>[3īȒOģ‡iÕŲ^ú90šŸ™û™ƒöÛ#yõˆûķ™{|īÜ~ÎįˆûįŨÔŲ˙{že~æŅĸ,…wōyī:jw3ß.csâ‘wöHĻäĘ<¤]ØžGö| ÎÁ÷öāzÄũ;˜Í `.ōŨe&퐕LlæāQL{ī{>2‘5Gp<ēëhĪôöS2ŋdŽ<Ė´=ožžgúëWīlÎëTŸĶDî!v–ŧ{ŪÕ~aF´“ëÍwŨ|.9€]'f{>žĪÔŗCZ_#ī!ķ|†™ ˛tJķ=ŪOČww6/w04=ŧsdžĪŖĨ{>>G֝aœŖH>ž;_w,ígŪ÷üMÚķ īíl×-ÛÉÄsnæÖNԙ;į;ņŸG­÷ܜ÷“Ųsō}ļëRæ(4›!üw0Ö˙Ÿĸ÷ėp<’QîÜ:ĢpN?Ëȝ!ąŸ <â–īP–ĻĖ´û|žÆ}ozíĄĖŸĸy´æÉÚķÜwŸoÁ9R/Næu˛Ų=šqĩ{ędíãÃãŨ&…ÉĮũ9Õ^\´s×Ŗ.čģ´ķ9ī§ūtˇŸaßŗ‘ô;ž7ŽGĶęg3O|2›—:ß2č§1č§G;…ú ų>Ég“ęQ3äĶ[į°ëøß{í&ˇf“ÄæČwīlLGûÜ#šÄĩ;Lī€GAíėŅŊšwÃũ$1fxÔöu"Ī‘°G č§aŪ{ĩ'Ô9Î&Ĩb‰īķ:Ģšīhdf“:ģx ŗEĢ´Ī|/&YĘĻÚAæp‘ v—™8īž9*zíČ$Ū3n’Ī9ķö:ᙎ˜}8;nđŊ˜dię{0KdŌĪÂĘüŧŸŲĨÎS˜ĻÎéŧßčģūæcyp˜ßoĘüŒIí^æ4ķc?ßs”æ´Ī2¯Ūd˙ (ÛŖĨžģMĩûûōŊ¸‘™ÚO—yŠk†đĒ:A&Mę'Č|;eō„,I_>×~w]lŽˆ) í)ųŦ ssvÆņEũôfÉŅžœųI–đČTžËŅ# z”žĨÅéķ=e/UžĖcH{¨NÖîöSŽĨÎŅpGž0%0Géu™‡˜×,uŪ9"n?q`Ž–j§p?ûcūÆ|zæ}ø!Š^{ ŸĖ|€´;ũLŌîf^BũäŠs4õhܟÅtŽ™'×#‡šLģwŽ.ڙÔãéķ(’y7Kõ•) ŊôŨ›OĪŨäûLģĩKhĪâũ<‡™Ë2?÷ō¨¯ŗ˛˜ķ:#ũė™Āū4ß\ČŦÃũtĩב,5SĻĨBːG6ŗƒ™`!fci_ČôjoâžËū‡kĻōčąŖu&čũ§afã2s€ŲŅŗūųių7*ŨĮ‚~>›ģ|Áuōį÷Ō÷™Üe2ÃÄäģ_yA!fsešœÎ$Ââ?)$ķÜé7Õ&DŸ]‚˜úûĪO7c@斏š3˙™ŋÅD˙ĸØ&Ėwé_6Ô;`ø%æ ˜jX陑߅MfbŽŪ BVüŸ´8mØû†R]ĩ>oÃd˜‰—äNdŠI6bļøYž įžųËĻĖîßĪ2iĢĻ0ÕLyĮŲSˇSbũG19ęūE6c "Šį†Ą×˙Ā›1;ÂđcÃ^ŊF›e^rj˜Ũ‹­2¯˜­äÅųé7ųbĢ|*æQĘĶ:V?ێ)r)Īß§˜ôq+Ļūmí3BtK&'l4ķsÚlƤmJô ?ߎŸĪRŨĸäųA­§M™'ųÄÁ›å“Ą—¸ęęˇŨ)Ļ‚5ęXÚėŒSwnŦθ'q›ÅĒΟÔY,å˙åo O˙ƒŨmvæÎܙ;sgîĖš3wæÎüs1ɄÂÄļŖÉtIMEØ1*”$ŨŠ tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨPa wabarcode-39-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDRSõn’_gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I LIDATxœíœŋŽÛĘÆGPĻ2Ģ . MĒ<ƒ |”÷\Ē V4T°ģz?Fē˜‚ )î#xnG1đ\Mæ‡3gūP”ŊÜäZ_Øwqīę§ķī|sFëb¯öAЃõ`=Xփõ`=XŋUV÷jŦgõG%OŨÎČBXūąŋĩ VĻķąŽ(1,Šļũ§ŗ°Z´4,‚žúOgaQ´0ŦzfVŠ ë#]§įc‘ŧ4Ŧ]쯇ųXõ–l cÉîē”Ŧ|N#Ûw‹]‹Ģž“EŸPĘŨČũÎYīįdX[ „ŗĘšSfe}”#FҞBŠšYé‚Ŧ—uĮY¨ÃåŦ,Š?’L˛Ž¨Kgfå%Ų.]*Xčžé~VÍY9‹ĄlnÖļ&lWĸT¤ČĖ,„-%‹âōÕX-æ%ÎČĸz 1_=0›‘Å3ę'ÁZŠŗdĮYŗæ!umĢ]Í|Ļ|ž?\?qÖģtF?+ynP‘)?—ß%ģYŋG<éÛeŊáŊú)›yˇiÅ?üLÁrˇ™wgëĐR+9˙Ę-šqíPÂ×Q‰ãEōŊ7Ÿuå… |]¯|Oŧ&ėręÎ}žŪ2ĘØ—ûßÉúą˙/ÖߡųĖŦ´ Ģ––exÖŋŸģûvš´í‚.YUą¤\Ŋ(ĢûüšĖ1ĘÛbZ>y§ĨÔfå?ĖznØW’4 +ąĐŠgmĢ]ÉJŋŸĩͯO9*PÛ!ūÔŲąN*ÅZ­8k#ęZÖū.Ößžņ.7MC’_3Ü­3ÎÚ´šĩkx’¤‹×uN­k{}B]ØåŸāI(ä[ĻוdɇÔŦŖŌPŗŠčWœEķOû_j˝Xk´)Ô3TŦbŠēŪ[u ‹Ą_tˇgÖđGÃiZ•)ÂmĪ: Q,>*=k 5,ę~}xf•xæ=KÔĨžaÛŗø3Š•†+á S—Ŗá˛‚9+ŦŊÍēhVu$‚•ņŠ%kã°r›åöËÕđÄxAž†­aÃYRCÅÚ¸Ū4ė´Gúubģ@ŋî+í|ĪËēŦ~ö|5a Ī’åö ú,Ū¯žį ŋ_UĖ)`vŋÄ|ņYĖ—•QĀZÃ@Ο<ļ̆čY^Ī÷‚ēo4*ŖüųĒ‚ũĸ–į­ŒÚ8u­ŧėUŦ‘ųÂ^ŋÚa–k–…†­É ūēŽbÂ,‡5´úEĖ,r>tŊč—īÃÖYŊ†$îC:ÆR>Üû,ãųŪ‡^n¤e؇M47œ~oHĪ›<äļVΧ2Ļ †ŖšfYZį—åÃ#ôFŸQ›>7ĒxFscč—ōĄã Ų¯2ŧo4ņ~% _ Ŗ@nxŲkųpznD5ŗX-8+1Ôp4įĪŖuíœsYÜŋZ;7°ŖáčYé{cmû°gá˜7r'7nô+4_ōpÔåŸ_p–ÛIŪ÷kÎe3Ëdđ†īųÅČųåökmĪ×Îņ|ī ÍBĢÔķFœĨ}¸ŗėö‹ŗ˛•Å {žÕMŸ¯ĖxƒxŪPļ 7z–ŪˆîœeÃZ„ŧŅÚũ2žķ5YCŅ/؋‹åCa™ŒyŨŖü~)¯_ˇ2ŠNÔПe‡ĩ‚uíŦ]4ĻaaUPC'Ŗ´†íÆÍ(gŸŋq_>z>TŦ`ŋÜYÎŧ=Š,FōаJPņÎe?­×ˆ&)ކĄYv}hō0ílņē8_āü*˞el˛wڙ=+õ¨RßķŪ|ž–ŨEMŋ˛,ēGY;€žîQ°_YŽėØÁģų]ģ _îYš˛ûE_d°ĪęíûōÄ<´sÛ¯æF _wŸ)áŊ×ģÃöũ˛}ˆîŌ0žcί•QëŽŨ&¸€]”¸įō¤ŨÆö|)ŗ×ģ§”ÖųU¸įrúCwí ÎC ī•oŧ}~q͇ãũÂÖš|KÃûöđ6Ŧ!x~w‡įÕn3ļcF÷Ūôž}cÚ7tš†bF|wl›åzžöîDâ;>´UķÅkž|.ŗa?ôvļÂŨąSÅęú¯â,ąÁN<+‹Đ(ēÛhÖ°Ī[ŗĐĐõŧî ŗD]bËذÚ˛ŽcÔą›„æKy>ƯĨČ.OÚŲø%KŗNâFúekˆõ=å2h(žųt;×=kĐđėílJÝéW}¸÷|me¯`]ŪX…û%Ŋ‘é~Ņ)ũJĒĒV;ö !°6+UŠē´{mVˇ’5ėØå s×Ã)č—ÅŠĨ4ė3ę+¨Ąņ†åÍøŽ5YÚCŋŦYŽiX‹ēkČŪŗįyéÃĨҐŗ˛^C‹U‡g™(–ÔpeĪĐĐô q —NŋĪũš;ô,Ģ. 5ÔŦĮjí~YFûĩ‡ķÕŗvYî}xæŦũĀ*€įŖyčzžŽø?Ēôa­sc §ƒíy÷FHÃÁŠĨáBkˆá|‰v™ēĻ{žõ<ΎNKCČĘ 7vãBÖ)žû%<ŪčėųęëÕpx€ČĀhX€YļX°_SXi_õ<įëōĐĢë†įunŦ fožeáÃÂÕ°ŽŗĒĒņ!Ãø s^öË÷!`{>íëōs#ĩ˛×Ôĩ>¤Ž†!ąÎJ—u8[ŦLĪ—ōF=䯠áÍų"RC=˛ž_°ú~&ĪŪYIîė×ā~q冟ķīüÜí—f­{ÖÂb1,â×h¨Īe͝Š>$–7ŧ3Eŗ€†§^CÍZAoÄXÕ/=ËFÃEHCĀĒĶt´Ž˜†Uĩ“éĘe`]›kđáxŋŦŒrûՙ~ +Û[×ņ~9,íyū° xž†ŪđXąYVĻ!.ë„úutY“=_UGËķ—đ| íųšČ|ØXuÖAįáÕõŧS×ZąŠ›,U—x&ĶƒEŋRØ/wžÖAVĖŠe{~ĐpI+āų;ûuąû5Ėr;°Nƒ†^]`–E]­aíFX}ŋ„†™ŌĐÎy^—Į˛ûeÔíKQ-s>ąŊŅ ŨėUŦĶíųJ,Ķ/ŖaĄ5¤6‹?d1°Ę€ų÷–“Ū‡ĸŽLõkĄûĨsãß¯=ą^Ãjë—Ēk˜¯Lû°5ž×u­Ã>ôYA / _W“Q=ËĶ0Ú/áÃv‚†6KiØYžOšēg÷\u5aÖAÕu´|h{ä<`ÉēöŊ†OjžnfÔrđ†Ņ°pΨ!õrc­Y#‚Œ˛ŧŅƒáŦĪož”†é=ķEĩ7žįŪHÂŪxžÄ ĖĐPx#Ŧƒđa3ęvŋÖ,Úķ2įE]on˛¨é×ntžŽÁų:Vp–Ĩ†™íųv<7|ÖĐ¯Ķ™.íœ_ƒYŽäāįü9<_TÎWPÃPöŽÁ|UÆ@ÃsLÃhŋä3<ĪûŗėäĄöá1Ū/w–[3ËÔf3xŪ÷ayŖ_[—åCŒVnöVQÖ.Ċõ̟¯“+WÃŪķâÛĻÔ0čC*û•VMãi¨į jčWfräáø|yyčôkíž_×g¯ËšŽĄí`F}oÜÚ¨įyāÓÉCxĻNĐķĖˆįÁܰ4$ɰc¯ĪšaiØLceKy>ŦĄčWæzūķŧÚŲŸõÁ×đŊį Ûķ­É¨fĖ–ęW¯áUü …Å:8ŗlŗÎgöË??}a,¨aâíQŊ††%5|ŋvYZà ą_ģțāĀēFú5ė6Š•ķzˇŠņžĖ¯Ûí§0$Đ/Ár4ÜXķ%ęÚ÷Ŧ§ūÕņäüũk`ųgeHCŧũĘŅ[LD5 åF+ģü&ôžŸŒžĖÂ艺Úįîú§į$øŦ ;Š~}%iŋØÃGXgšNîōą^ããÁz°Ŧ˙iÖיY ûÄp‰ž"ĶßđãNVŊUomƒØ^°˛yXŊAˆ!HäûĀņ…ÍĘēĸD˛ČŸsÎúŨ_ŽXŧ22ĢÃÉqų…?~‡š†{vÍÅOJŧ8ësŋčrž6ķOÎW,–ĒšXlΏŨž%ë(Šš›%~Ž˙{Ã>ÍŠ!û™k(Xd}ž_CɲWč—zI"YûÍõíb6–xK1QÁŦD|–yFÍÄŗŦX”'ČÜ,ņæ˜BÎīôHfī\rV¨7üŦįžež˛Ũ’U-gvsŗ0oKØŋ‰Ííy‘ęœÅ/_ûYsC°~åw ҝũ+°.ü—đ|%YķjH{Vķ uQņŗ‘Läa*2ęųé-ÚžësˆÕn‹lÄų%÷—`å> ĄâK•‡(O_ŽuŨ†XâŲĢE[šŗåôūˇcmyū"ūë÷ŧŧq‡7ž°ŋ>‹72ûūßØŨáÁúīąĻæŗšWdÍúņ`=XQÖä2Áf‚ątIMEØ(^Iöh tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨP#U—e e barcode-93-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDR=įŨĐÚĖgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I™IDATxœí›Īnë6ÆéjPŖĀ Dwˇ@aŊ@]zaXķHéN@P^dƒúōŗčT ā]ķ•āE—Ĩp—A ą$õ—â?™žŨ´NŦ_Î÷}įjöi.Ū@o 7ĐčĪÛoOŨËßCA ņBųbÍō8„A2‚ĘˆĘÛ;[PžjĀ:”ĩwļ  4 ”`(hEŖáCü> ÔD,b?2ēƒ<1ļÆÛ@Ü`„˙ yb”„‚Öė=q `ø ˛ Ņ5+° Ā JØ1ÄM–å@ЂšĀÔ$čŨ:+áĒDÜŖ6¤=ŦßČ!<ūøPÎĸˆŪ ČoǍE÷ ‘„ŦnžrŗOŠy~z@ø]0HtvįŅ/âŨÛäfL ß :R(@'>ũĄ žFō&:ɆLã, čō‡u†ųˆ$l•>Œ_ėėŦ39ũü ŪŲÔŽžä) âˆvą•\SÎĪĩĐãˆ73 ūb^ ŸØ< ņß7€ŅX|ą&a¯Ž7ē/.åŖį-Ë@K¯ŋ"¨ųī¯7^YÆIĶDÅÕ Öė÷ ŽĒ 3ĖÃøĐī,yå=füŽfŋ“ R‚ēŠŽvĐ/gFIqaU× bFî;ĐN€ę„mŌ~âwa~z|düyÁR¤™<*.%ØoâR€°ŅÔpN[mĨÕP‘ƒÍTP%AFifP)@ÕrKë@øŪ mŦˆ(Ii=¨•V{¤íGĐq’õŠŌRĢ´Ō"­7ģī#l]JŨl‚-Hņ¨ŽeEČԐ3Đq?Q*ꤙAĒGēøk‡´‰GDmH=ūNšˇ!•Š ZQ'MT”!߈8âo+*]Ō.Š´ã\šZ‘ß#l‰4{?Hfi¯čė”ÖUdõȝÚq.Íbļ)5h¯ČŅ Í J÷‘iÖTō… iŠĪGd‰ŲcqJģF4ŗ9ČېX÷wŌŽ†ø= i6{ rmHOõfoæ#rX˛üGČr ›Ų&iūéW=Ētŗ7„Đayj3$¨\œšaŌJ|Gą $**¯hČyg Đ(mRŅA_÷čYíė|YgëÅΆ>ÚlÆÔ–ÎZ,ãŸKÛ eKú荟kZCfČĶGˆƒ =ū"gm"Ía6šÆĪŒŠaībs™Īú(ŗ›}§Tä[l™ŊFĐŖ^Q‘ņģú¨ęGä^•6Ÿ~ë‘CÚ<~ÃŲĪ=ōŒČŅڐ„íŗö\@ę†ĖMŌ´†|–ÁiCšA{ÛéG‹Ļß$m4ģö™-㟤V™ã/Ŋ#ĸ6¤Œ>"û €ŨĒu4¤”v?zÔWDŗĄĶėļ!a'íl6xK×Ē•ņßMÍŪK›{ÄSk=ęR3ƧîŖg[CNGDķHVĩégsi=ˆX@“ÎĖϟ˜:™SĨõŠíí}äMR+2ƒā´ŗ-Š  ÉĐęĮQå2{‰øĪ˛ĸĒßØ.ÆĄuKs‚ôøGĐ,5Œ]§ˆÁö‰z:"Úšļ(ūqhåˆpjà ĨŲÄ)-öĮŋ÷U4Æī3{IgkD_?¯(6€ ąķ€Ŧæ}´OÔĄKc–}¤ŒČščRs€lC{éûh4ģpvļķiDZKCÂĘŌĨ™ŖeûhØŲN”øwū}49Ef <ŲŲK7dmÚGĶ>rT„õŠ\#˛[bļEZé~8•ÖŽ͈øAzEĩWšŨėt0ģrIķ7dę‹?ÆŖ´ínk_#Š´N‘Ôâ‘Ålwüí͈Ķ#(†PŲGjgĪG$$ūk*ĒéČICÚ§ģ ĸŊ­!§Ōļvŗ‰ß#ŋŲúō÷š­­‘ĒeDė ė“64äŪ:k~ &M=úČîQz­GĢĢA+ƒ´UšŒŋā Í˙ēM¤!¨rÄ/A‰ŠĸƒDéf ÁŖūa49KičĸIÛ-ŠŌļfŗS;Č m}MjÕ´"4—†tö¤†đŋĢ!'YV­* O=2Ļ6īėJ™+Z鉥õ€še ģ4ÜW4Jƒ]g›Öˆ=5ĸ€jAąÆO6]EiDĒéIĻ ļļbhĢ… qÕĒú†\ŧFziIĄŒČcŠæ ¯Gš4[ürņB=š=xdî#dīl"=’ Aņ¤f‘ÖĮUŒÍ¤ÉÅVYĨY@Ģų†¤úŠQVí`ļqCRÃĒU@H¯HxdÛŲÕuiŨĒEÚ>šz¤Iƒƒ´Ž!ëqDzbCŲĨ%Ã>ę†Ö:"˛ĸ˂øë”@ôp8<€?:+RĖî@üOĮ1‘WÂ(S/ģGĶaô ĖūĀė—5ĩFšũʞŦ˙pfõQôëeŲŨ&PŋüééęÛuĐÍ×čĪ=Ū #E­˙|ėAöcO Œ‰˙Ҥí‡#Ž5ˆFŒŋbđ eDÚG\Â+Q,9(gū9DQ Č줁å7|er§ëúį8DPEŌ&Ąđ™D>ŧrTДÅDčÄAI(Cgú‹É‰ƒÄëũđbŠ}¨A߅(}ĪâËé_?JĐ}(ˆ5TFu.@$ĩ|¨f ˆ? œrP‹>z$Ë ~æŅNųŋîAĖXQ>„u6•T{Ґ9@–Oų@ {ĪĘ8>ũFŋE_Pūũ? „ØšŸĶɉŅoŲŋ _ŖŗÛ^øėÁŨW+úøĸ9°@P‚Ú˛“øÁååâO$?Œ  BâŅæ|qnAgü!TÚE<#ąĶ™Ļ PļFøŦņŽŒīŖC yEÂE˙ËŌ•€ŠÎŪŲå`Ëo=aņÉĒNšä`Įo=y˜0™å3 ŪS$˙ É#ņŠ˙QØ>2\įOúdYŽ7Đč ôˇũX@Ŧ(Āī¯?tIMEØ XTc tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨP€ŒĨĸq q barcode-codabar-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDRV-õĮ%gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I ĨIDATxœí›ąŽŦČ… #]’V“v€šuH€.‰dW~&kËWÖHĶYķģ~‹á~ÁM,tsĩ,åĒĸ€Ēĸ ˜f$[vˇvuwĨéoĪ9˙ųfV=~ØĢփõ`=Xփõ`ũ¯°j›üQĸŋo[YĄNūȂíŦhÆjø0V @đQŦīÃXvFYŋÁ[kŖą‚{Y™WzĨ ãāŨ ÍÁģ›ÔvŦÃđ‡g`ÆĀŽÁlb…Z Ã@Ŧ|šŸĐŗĖ0v7°p]‘p>ącęĨĢŠŋxˈŋ˜Ąīqk –ą…ÕĨcĮį@G,Xēæ&–‰XYĐøV¨ß ‘}ë`V¸™U#Öšcļ°‚Æ%,_×o­ĄmÉõŪ"}O!îÄąZÃØÄōĐģK׎}Ô¯įm,tŋ\3ÃŊÖŅŲÖīĀg-Dûčt´Û`K'đŊ'wˆeobáįųëŒY^xØĀÂĪĮXƒā‡ŗö‚ntė~ļīfA`Ā Ũû?ŖŊ†üuök—XĨ[oūKVŗŪķz°Ŧ˙3VfndũõšūÃŖ]ylÜÁzß3#jŨ§<…Ā:į0Üŋ“õ/øÜ?Áä-đ”éQëø„å¯e…ASk0=ēāŠ€W⸈ÕR–‹X-8,ąJķíčÕZ‘ģökoôžÕP]rmP¯áŪ:ÃLŋX^ŠŨ.=KĸĢ™õØx%LËéXĩ–PÖEÉjUē+ĀŦŒõW–%×åÎyÄē ÂĘt{ÄŦ†°āĢXj…Ėã ë@Y>Ķ ĩŽ„ę<6*íR^ęė‘Į×Ų9VĘŧ8V‚uåkž÷ũ9]ŊGÂZ5G§ī*›}×ûĶŦpŦš~™˛ŧxˇ!/‹ņ(Ü uī'ũbōē ũBŦ‹Čšęâû†x$Ŧ¨cuē.­0GYöŸ˜ėSĘ2-žĢŦGgfŽŸØŧBę‘öūĀvÂĸŦŸæöQ`žÕu"e<&ŗ]•įeZLŋ ĀRéâ=’įЙé}?Gq[Â2iØõëJY|ŋN\ösēlĖBΌG‡í„u˛WåõIČ yLM—aõy1s”˛ē9]ī‰ŽšëŊ 6¯%Æ˜WŽ÷yL†Ž"]é0ĮwåuŖũJû9ZŦGĘZĶ/ģģ¤Ģ‘Ëī6įq&{ļ÷tŽC^ĒėWt•ėĐČz:1¯ĢŠØėæHzßīcß/ôŸŗGũJ™ģ:aĀyåôæĐŪ_pö…˜ũŒ.fŽZžR&3ĮTØm•.Ú¯žĢŸ×Ĩc;T­čDĪÎãÁazofuQ\^g6{IW§Učw{ôčLûEnĄšØÕü"t•aE+į8éÄpŖģŊbގžWKrī×íaĄ~ŨRš×UšíÄĖnĶ{ŋÃ7‡÷øŠ;1ãŠNôsô…ŪËvhÁ#ÉõžVökE^sWÅė…~UKsdvčÖ÷ža“NŦč×Đ{~ˇ fŽīĘ+]¸…j]-›×Žc™ân3ˇæõ4ĶûcßÕî™Æ˛ĢuV<ö~dIî×b^5ß â‘<ĨpF]ō›ÃęnĄÁŪhaGēōNôs<ķēPŋv ?Įzë2°œÅŽĸ9B%‹ÛĮ1{cM^â3 eŸˆŸË+go!ŲíZôø"Ķ…<–˛ŧŽKŲ¨ØNˆ,fŽûžåpw" ŦËĸg:ÁąL†•Ā=eyu]Õ§s”wâÔ{LøNėč=i^ ũbXŊŽeī•Ų„Ķė‰ĮíŖCY“Ŋ˜—ItM<ÆŧŽŽuYČfi=kGŗĘLŸz”w‚Ék/zėXĶŧbcĪzėX’WJ;ąNĮ*GVđIŋ„ŧ(ëØŗ°ĮŊ´_B^ļ¨+ŗwÆ~á9ryÅSVËfŋŗg;<ĸo[§žxŽÕ4û‰GgčW:črJ./™.{`iŨ…ĮSļČb;!æÕ{Ė Ģ$q^{:GOč—-zäģJ<"Öą÷č]>îŊ‚ĩ?Ėdûĩį’Ÿ#aMķ tiīƒ\Čk7x”uB˛ÛŧĮ‘U@pTtu`• ëĖívw 1{kô¨ØGíEdYN—WIįØuB•Ŋ6fúÕ{Ü÷7‡ÉKÁ:NYhˇO,‹z,Į}œtBrs†ėĪ{'J-úĩČzûuŽX]ĮžĢŠŧrËįYz¯k¯Đ5ɞņxdž9îûģę/æÕŨ‰I^ÜĮ}œŅ•ĶŪŋđŦŖā‘f_°7Gš×A6Į;G”}:xTf?í=e9Õ´ĢūLīŊ™›ã×eOX“ŧøŪwŅŗ#TąÆŧ$ķŠ.üÚģŗũšĖąčz™Ė‘äå/°4!¯#ßUf\če5ŗŲ¯đ¨îŊȂŨÍ™Ņ…Y–ĖãŠu×ÜhwMŋ(keŋØŧöōŧ–=bV:;ĮĶ*VEōB¯Œ.Y'höáâ%;„b‘˛hWį:qīĒSŠ]=ŌŨ^b鉄•H˛_ŌeakķZėjŠ%û)+š#/Ę<„åKtåkōâ<ĘY8û|VWEYɕë=éD‚ŽÂ{Į÷ëI’×ĘėąĮl`íÉ…ÖaÚ/Š$yy¤ĢžlŽ${ ŗŽĮĨėŊ\ėD7ĮŸŲė¯ŌŧĻ,Ž_?˛}ü™ÃĀZҝjĖž? ,°;°ē yqē*ē9õrũÚ=ęcö~ōr‡ŨNÂŖ;°./….Í+&ŲҎ@9ų<ŒØ¯HŪ{Ļb^áĀZ“W0˛L”ōظ ‹éW2äušõØëĘh^yJY;žä# ø#qFÔzMmĖÍ1Cy5\^ãņg÷ü ÆļŲ—<{ŗëj—ũu˜cUĀ|iTŋJĄôøTÄØ#ü–FĀ…đŸ˙đĢÁ#ĸ+˛[P}ÍlˏZÁ‚vT™ņËßŪķfë^˙!Ö¯ˆ2¯5á_îeĩ|ƒ! õøĀ íÚPŋcžÂŌ†o-B-Ã,`fZĶũfØģY ˆ 5Ā õ Ôŋ?ڗ<¯ŋx÷°Z1 Ų<Û,Đŋí4)ëįģXÍgû’Ôf )ëŗW¤uŨÚwą;*JĖúŗZ7@Ŧ ŪÉ2͜°lĖjž`ÖĶ}ŦFvõ=úNXltũ›-,Ąe6ēœ5bE[Y Œ ĀĒņ’Íē˛˙ÖIđ­ĩoÛYž™$ePĀOúfViÛųWô3!úæŧĐģsØx) ˙¸ÁаĘčDĮB˙pī)ĢâXßīÛĮuõĒ7Ė ŧÛŪ=ŦąĐãĩ„W;ŋ EoŊ´(īeá;Ŗîí"ŠËž9Úđ{Y b=ÛÆ Ú!ŗŧ÷FˇŽ÷rÁ7ڍLC,ôėĐÛ;ŸĀËLĄS›ĩŽXqИđå>V”&zĻXzĘ&ŦeũūļHXËzßëÁz°ŦëÁz°ŦëÁz°ŦëÁú/cũLõXļ‘F÷ÉtIMEØ,}žå tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨP`ČëBkkbarcode-digits.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDRÜ)v~z†gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IžIDAT8ŨĶ=ŽÔ0pgƒH‡[Šī áåÔ+.Ũh^VS¸1G"KŠ”{[š€#š‡düøgf2 Q"$"%Jō“÷Ŗ>’ų÷øg`!=\0ķ|ŅļÎM2ļuĄ)Õŋk°RĢp[§hlWgsÆIģ&U'Ŧ’ĄįļÃ'ŒØ/Üjb˙>&ÕWäũ$Ų-hû1IGŅōÖ VŌ‚•Ú8‚$íœĘ sĨ4 ÂpøŠyëŌË÷3ĒJYcy§¨{~ÉG¤ƒ•;Ĩ% d#ēacŋ4¸5ö œfØė+”¤%Ÿâje¯Uyŗ5uktÔÖî¸B¯UūŧĨŨCŪ4YaąÚIfwĸC!žŨ]ŋ‰É=ZƒZđ€TŌæĶuepš?Šf>d7j^ōvčækƒ4ŽČŖ^Š€m{}ú Ũ‚^ā 7oKōOéĮ-Qņ8 z/ũœŲŠĸTŦ˙ö˜īyÁÍCLœųĻNˇÄذšĄbĒ€Öq‹Qﴚž1`™;Â:íŠâWˆˇxpí¯ü+˙-ūcvĢ´fg”tIME؁ŦÁ"!tEXtSoftwareESP Ghostscript 815.02 ÉÅŪ3IENDŽB`‚PKĒĨPü\*  barcode-i2of5-300.pngUT ¯Éą^¯Éą^ux ččU–}8”ųĮGŅl/–ôĸMšYĨwĻ™ŠĨ O*+ĩ ŠŦtš$km­#͉•N":1m*„Ļ­-š'MocŽ y´fĖÕLĖ;ķō<Īī8œ?Î÷u_÷įē¯ëž>ŨßķĄ!ös–Î!‘HöAģvî%‘lŒĶEļ™$~üßw§›mœ°?‰tŋh.m7={§üÎų1%-:)–ôÃ恨¤äxN•éIßMĨîMũ–JgĐ[h[6Q×L_ &F§ÄüDĨ{2Ö~XäD"}´Ķ_úĩņĢȅįŋ|—0’~&ëã–æ#ÂįKCV-™§ž'™\ļÖņĮ÷ļûfSb›YYĪįŌ†/ôĻ˙žø›öŽœ›oU;58kl”mŸŋL5‡ī?mÜļÕ1‹–ą’Ģq Z!ŒP°ˆ1h¸ORvgV­ás•FJúQŋ†čOlˇŒÖMđ ghūņ΁dŸGú äĢR}­ÜöíōYEgb*9÷Čn9šĀîr.'#´÷™ ÜČßŪē'xū×vĢ_ŸÕX&oj_đvĸæ{jõšÛwfĮ§ė)–W†šuä‹ÚŊ>Ûw‡kĄnŨzíOŲûVę_Ŧ>vyÁYãŅžTzü;Í"Išũ7?žÎ­cšˇĨö:Á‰đ†öîJ•s‡5C]ČEåÖR¨ˇ…û(cwƒįX7ÚäŽ×IâŊ<“˛‚)X\OP/´äFøų•ø40žôĻÔ Ÿ~z"ũŗīŸ/Ōm4’DÕųĒ›ŧί4›™˜wücųųĸā=YNĪ vú!NēaMÉŗEŒ./ŗsN‚KĨÁäĶ,W˛NaŲ+•ÜĶ(Ī‘į\=úŦ›­9O\Ė‹ŗūŪbwÕÎ=´~ÚP˜Āe1.“¯šÉÜ/PZO¸ë:5Ũ&iKîVøŊ6ĘøÜĢũuFĮI^"ÜÁ9N™Vņnã.f_ÖĻŦƃåæãÂÕōˆÜ@ĶmûŊžÜ˙Z\üdÜØT;{‡đY[ģķyĄnÛĪ%%gūåĨ=I˜xYEšEU”î‰m›JĒ™™BˇŖŖ„Ûĸeŋk÷$B‹y…VŋŖâ/—÷tząėŤ‰Øņ#ø×÷šÅpŸžËw+$ģÉ.Ųj‘‘A÷ÆĘˑÚCūi[b2*AՍ8īĘ^NúˇuWü11ĸČV D\ę¸Âēįģ-ųũŊąõôĖÖ˛õpO{v]ŠāÕšų7iyīé_ÚįōÛ¯ĨÜ+āRŖVaŽ—Ŗ:ļį),“8z ¤’ Ģ=f]9/Ã:TōBŅo‰Ŋ\^Éd‘Ņôsg‘1í ˛Ä€Ôą{Ϥ/âžbUĻŽ{ŧã™cĩün=vĒʼnđÜāAÔōō%G?ŊE™< ŧžOŒbōWcPÖ&ķūĨ' —~šōk¨ftB5DlĘ\š#AtũŌHŋ‘•ØtíQ­PĢ XKÁĢĨčŠjr*ЏĄ†<.‡"2íXŽāøžRŦîąåƒ…=Jņ1zĩLŒ%ŨA[Qد˛†Šū~¤~S/paĐĨMđ…`–y`æđėè+\ĻZUJđ ŗ7ę-h+Ë 7‰'ĐhājQxyJįiSĻUü4›k3ôŖ×Zp k‚ũŪH˙FŸ™ŋR ¨€mî‡ĒĖÎIĄČ ĖÔ§i”5€Û°[ hWEâ8q_ĸ0/‚( ‚No€(üĄ™W.ŗ "ė`Û+ÕzĻ62ü*Œ @:›Mį먨ũĄu´1/é;ÛM!čš ) :BkŠũTgņØ Ąš¯ųŋZ>Ōd€‘ŋĮ¯Â¯´Ö5xž™o!Î7 KUȜX‰Ū%H ŒŽbú1ôéežJ_€ė™ļN‘+4o°w†Á@ ú4ņKÛzŋĀļ–ŧ¨IôgD;ļv5Ē0ŠŒ=6Š.k“YŊvļ]ā><Ã"dsŊ‚jā´a(ĆYĶx€ŒĸŨ~PĢuuČ0\Š2ŸÔũTLÁC8s‚ņ7/Ī>_ōč}ëq\ĶK˜/á§ķ'Ņā=Ų„BĀw&֓ šŦ–wáĖp‡â €Ë`q3ΜD|…€8):5ÄÁqëëųüáąģĪürkuĨ~JUÔKąō­:J‹ƒ) §úĄ÷¨5 Ëĸj’#ņ”%Ž\.RĄĄ ˇŅ†Aģ˙­Û@„*āņØDûBߛcē¤}ėwVļDÕķC°QČō16W‡ë)bÚúTšÛciŌŲvN1dTīĐŠ áķqDģŲ×į9%žUš‰FØãr˙¸ŪŌ!›Ą&š ū‘ĻĶú3z’māō[° éYXÃ.áˊ›š˙vĀ<˜ŽœîĪékĄ lĢīܲ0e7Ž&n+NŸÁ^ķ¨ĸQ8”d÷ ÷āÅžŠėŪu÷§AēúAđœ[ÎO%‡vŗ)ŌGã7ĪFd;„ū}uīŋ;}uO^âá0÷Tlž‹ė]!´ģ+h+;ŧÄÕ<ÛIfF>fgæf.îŲ#RAK–,ëyëŧuLœ`6x?Š€ēD=šzŪ>™ą\48VŸļ…7Ņî—´Ķ†ÃM‘Å›Ą/ãō; V˛VÚe:k:˙¤kĶŽ?žqĨāÔ;ķs_Ķĩ›'[^Ŧ¤Í!rqE’DļÉāÜs¯ŋĘKĖûfÄ)];J_Įģ°"ŗÆVįėņķ[‘â7bĮOpČņsÅGZģØDÖĮQWĩL ,ķÖIWÁ%Ao DĐŅt÷3ėî‘Ī“ĢeW ĘáĒ_Eq'Ōž#J@éá:Æūt7§ĀRZRÛŊp>wˆ(Î[{¨1ō,ãõʂA$WŒsm.í˙ŪÆņ!ā.c—K˝ĪėļTĢUũŋˇ>đĖŊxjĒ,ū#{:˜S‚‚Čog:Ͳ]ÛpPƒM#ę˙e•€đPjāOœä”䘤øÄĒ7}ŗįFƜ——ÛØ˙Í;A!;īn?’ũPK…ĒĨPÕLK–Mbarcodetest1.jpgUT yĘą^yĘą^ux ččŧgXSA-Š (Ĥ”‚"ŊD:HĸT&Ŋ#ŠŌB‘&Š@%ôĻTEz‰Ō!tBÂŲø}įž{īs~œ{㓇0{g˜wæ]īZk&æė÷Ų,čĒĻdž*ˆŒ "ūÎH 'Ę*Ju d8žsÛ¸{Øģ8sˆ ‹Ü{ÎÁa`ã-Ã!r˙î}éģŌb|zÔ8\Ÿ{ZŲqˆßįįāĐ÷zūĘŪĶCžCRü‡Ą“‹‹§Ŋŗ-đû=𺠐2č"5Յ‹ÔÔԗ.]¤šĄŊrųōĻë7Ā6f(;3++—0/Įí;œŦŦ|’üw‰‰AyĨåĨîË ‹ŠŨ?ī„ėŌĨKW._a¤Ĩeŧ‹õÖũ˙ĪŗVĐĩ‹dh˛h ˛Û ōkd×ČÎÚAP`.ũ{€ūû #§ ŧ@E}ņÍeāĖU99%Ņ ””ĀÕ@ā:ˆōڅëˇD”¨nč?§žíš’đņ"įƒĘoôƒx.Ņhn2021sķđōņ ˆ‰KHJIË(?TQUS×Đ4|ld ōÔÄĘÚæĨ­Ŋƒ‡§—ˇ¯Ÿ؛ˇá‘īĸ“’SRĶŌßgäå  ‹ŠK>}ųZ…ŠŽŠ­Ģ˙ŪÖŪŅŲÕũãįĐđČčö÷ŸņšyÜÂâŌōĘęÚöÎîŪūÁ!áčø<.2Ų˙|üoãēÄENIIAI}šĪų ×(/ÜĄēޤOũÜíÆíû!!>V~ģÄ)j€§á>Hs“KlŽ{û<´‘ũŸú˙+˛˙+°˙×8č °x×@0ĐĄ&ŋėĐđŲ{ž EP‡ėN1v+Ãg[|lĸÉGֆ’l‚č‘éĢ9€øÁ&|šÔ4ö ˜A'ˆ™ [ ™]~Uđ•]%ąŦį*Pa_îHXI^ČtđõÔ¸īI„^D?ė/ĻGĻĨ‘ŧĄ ĒJ~‘LϿΝē…ÚĐ >+ÉīŊ4’|lméžŖœÅGŽ‚čkįnhhiĘčQØĄ Y+ H•wî }ETîī‚­Gšn!(Ųĩņ`/÷ųt˜š›Ļ˙Ā-Ņn~ H{€ÎC•ęLw>™dĪ\ĒAÅ5ģ ÅË*äņ^š ™ÁHÕĻŧ*~;THlÆķ >y0 ŋ› ˆRĨw‹ãt0ŲXD_ņĮ˙kˆÔ›ƒQüÉ}UŠ\J „*Č ŪRá[ÕŲR|›xįRĸ P[Š Ė`M*ˆm†ˆ 9…ēŨ–ÖxđuāO‘O šû‹KiŦĀ”rsŖ¯‚œ?ëōâȗãFČۚ„íET@˛bdj€9\W\% NpôB sAúJsÅŧŅ›†Ģ ?oŸ÷Iķ>_Ė*ęŅ^šŊG'Ũǐ‹ūCC¯õģ×;€`b&Ô<@„ĻĩŨÕ •íú{T/ŽĢ?Ņ!ÚËÍÆwĩ._ŒF š"Ē:ȗ’ééĐÆ¸Û“ąWŊaB⯒ Aųbov;€0õČ2dõŖ´õ@´LKQ÷å펎ņķ?˙Ž'"K ÁøÖėīËÛÛëgČ-ĐŨįõ“y9ƒŸÚÄp(˜†¯›ÕÚ`āu+/ŠJ‡a˛„˙E’œ\å]ø$‹ŋ!Bn(iũ‰N$nØKĐTôš•4§šÄ×ėũߜvUÃ6[+p–Č‘’ķŗšm.æŊ “våÛÖMi÷…°í‘VŒ ­w•WÂPĖļÍ3UũūŪž’TYGŅäUĪū9c,‹mԊĨ–s`d<æSˆ<ÖŦ%¸`gãîmjAH/2#žwa­<<í§x—(`Z"–ÍÚŌ8R…Šo ~°õ3vĒ´ONšüō}™$iÂ$ŗLŨĮĻŌ<(§ĨQ¨%íWļĀqAã†ĶeĮJ6ēōOJ¨'?|܍2ĩn:F!;np:–Ãtx&YcjôM‚jRוi™¸¯…)L§÷šx9ÉīŠkģw~|Leđ=5lM´­YĐü…*Ļ6˛Í‹aF×ŲnÁŸĻS§uYĐEfSˇūC-ũ/ûÃkSDĩ„ŋ‘ÖF Ĩn&2CÍI¸Ëž`œŖ¤ÍaŅĐlõĮfž/īœŅU„ƐÃ4¸ažÃjšũĒĮU škOŽg"=ˇūžģÉ4f›āũÖ¸OcĩãnØ_îaOđ^ØbCâ‰÷UŽqģéöŨČ4•Ē#ĪŋŪŅ“ŖŊ7זļ´Ã_WņsĸŸŌúeF⚷Ŗ{„ĒŌDLĄSyˇÖÍ #p,ōĒĪ0emoãv:ĀŊEuÍs‡{ŋ'ī‘ôōž¯ŗÜpaâŸô$D°'iļŪãū$ FoߍÎחõüdĸúHŅhuë11XŽwž\ÍxũĘÅ@ĖNõŅøÆ7ęL,tvŠ<đūĨģ.nu}âųĐw)ŋŋ_ë¯5昘^rpŊÂJÂütlžg.ņ÷Љ"ŽÂĖ?_ąr|ėh|xA¯(šÖEßãĢÄárŨ!ÖŌ÷Å+¨MĖk„Š´Ā!›§ĄEĩ~ū{ŸģŨøųâ“lĐōx‚:uŽ‹˙2ŅĻĖĶēĪõ#ī—§cĒ”÷•=ŋÜ^Rø[•;–åũOdāōūqPq _™?ôÜ~ax9õĒGÚBph¯ÉdÂäë “n6õŽéÝëļ°RßO{ŽÔ†„Žā,ŋkč5qí͜ƒĄŊÅöÛUlL u&qŌ m¤ģĩŠ„W5õ°;åDž BQ섍=ÂĻ&Á6íZĖrY‘;ģŌÉu™ĐŋųĶš+(åĮŨwJŸzø‡„čscâŲU׍ķĢŌ4ņ7:îũšũŨˇÔ‚ė­a›kĩH ąĒŧų#§<Ÿ~‹ÁĐžøTT †Ã?cĩŠÖ[Ūų›3§yų`HY“ZûąÉJĄJļô•w;yŲq#͇ŅwĒJØ=Į‡Ĩ]Q~EAß<Šöēž›XpĻZ2($UAö9~ŦWžüŗD压ņ;Ŋ}¨Ü1÷)ČîÛøŊCĒŋũĒl|ũâģŋ`R_\ē(zDĶÖ1Ø-œŋxĩōēÄÆáĮMjũĖ q֝Čļ/č[ęp˜jkå^„›…ŦšuĩŗŊúŊZęx !3W=ëođĘωŗŊÆŋŗAŧŠQų¯Ûõ+učĪÛc=m$žh•¯Qüžī otķŽ[ŧ+š1]“ø!_fĄĄ4ačvPÛz¨mj SEK äƒ:ÂųĨ4.9ĶšÉr‡ŦĸJ Ÿ¤,“îqųæĢãŊ>Kĩw<æx˙ô^ŅuLX õ)ķ Gü âTe+åōeߛoŨ>ũÁKzW>TŊßË$ŽOzjšy‹#‚Ŋ*ÍÕ$ߝd¤Åônĩ˛‰ˇv>v"–t™:éewYŧŸtĄ\™‘äōA÷?øRũy˜ŗĻÆuN×ĮŌÄQŋŠĪĒõ uŨ-āPÖdŊ׊ĩ‡2Ųn”ø>FÍn2y nuaa¤>.bŲ˛Į§`ēŧŠ[:@ĢW9hāHØÄ>’Mbú™ë’Ė,sŲĒâkÄķcí=SuĨŅے{N<}Ļ_UM˜+™`š[ķ4ā;‹đ’đģĨžŽĖß§fĻø11Ą ΌũMŧÁ=ŸšƒĒwûLƒo’[áĶí¯ō#ÕõÁy‹ÍļԛQëˇíŽK…ŠæÆ”[Fz>ų¨vŨĪPe—ëmèķeĢđF:d‘Đ~Á/ž`ĒÅpš—1ðƒũ.žP-cE …æ]5[‹|õíÛo…—ĮXÃÂ6';!Ą÷4šã“{¨×ąŦ-!eŪô­Åz,AEYYGD§Ų|×RQŠu‹Ã‰ŋ8)ÖF‘žV*šĘzpŊŽ-ö,ŋÍču Qęđ`i.håÎ=pšāÔå_u8ųGËēø™M券 V§“‡…YÅJLĨÖ–žēĻËļo‰ņÂ.Ģ۟Oūt †× ŠkŠIŋŦmą]^č›ĪËĐõ’ëŽ[d|Aí0+ôã ôû˜9Å.hØv ˛šØ˜æŸ?9Ĩ~ĪũO×Üø—ō ŸX/ŅĖųę>w Ô´twđÎ,;l¯›pūi>jęÃëDi_gģäڕ&3?8r3ž>ƎYÜǝ÷+sIxæļãQŸŖ§úP2ˆc8@ׯQėWųcD`,-Žãäá¸_ō˙>Ŋ#FuFĨY÷Ē’×§5W҇žäë^)ÃÎ{›&+ßēídĩ!đU§‘ˇØŊē MųŒg¨LĮģÉląBˇ˙BĒĨ?9æ9¸sšš:ÖUuéĖÜŖõõĐĀ ím|îæęųÉ"]Ô@åÁÎS“ÔÎ~+BõČ*DŅĮ†ņU Cö×Ųē2™Ŧ˜8ŽČØo3ŪJåũWŸšL™~šŅģy˜€gTØjŊQ0ŗæšīā_ĨkCwՉrčZC‰ČHī`ļ~:„fÅŦôך•Ī3Lßč+(ždÉįj<ūū.,|ÕL}ČökCJUų žŧøåg+—Pc81š—›“..åŽ!Ŗˇ˜'Ēįéfŋ¨ Ģ)tˆK›û1?Â9˛oēU9É­Ąo*ûķgíĀ‘ĸ›ĶgI’6Ûßķ ĸā´ÄܐéÕ*ôw΍>nŽã—˛Ÿŧ+b ŨŌf‚œ§m˙M)Ė‚/ģ´įäŦnĐšn`„yAĨ6ũ,Đą¸jøzŋúMׄšįæmGŖBŪTqjí2û}OĪrĻō ›4%sxD•īžŽPȕ“ ˛Ųû˃Ãá-›örˆÍo"ĒnnŌßîĒ™§ãÎĩ`-z%AKorË+žEĢö äzØũĀ.wŲW~ŧA˛^ OŦČOj'Y2æ_ą(P7ŦNTŒEŋōą Åĩyg‘LÚļ/”šĻŋĄą‡”l MŽßÚHümN&cž|^ŽĪĘ&ŦŠųoWhĒģ?LK­Fü鋉äŧ(-ŪO p75/sŪpæŊ%*ļÆgc<Ē/íûHäîHėĶŽĘ<612éˆ˙Ԙ43ũᚯmĖ~ālXY ™ŪÉ%Ú˙…yƒ?žšD0T¤˛ë%ĸℓͷ"æx‡>Kí 6Ë-ÕBo.hĄĀOų^ŋûkX}āåë´ūškŨDōĨËšŦåUĀI“ŖĖ¤mįa0> ŖaöĄ@}lįOąĸ_WėˇîÉҐ.P ũJΕ%û€ûZY]ŧY'ĨŊŽ-ۏ'+×D,bņ4ž6¤rÉ:CŨd6¸%YœßlāŋQmq›x°(ãT—É^¯ô‡lį…œÁÜŗq´;÷*a(M‰seƒĶmČŠOņô÷ĘôhîņˇęâÂK•´[Ļã’2F•g BĢ#¸ũ´¯Qéڄv%īŗu3úĄš@8tw$c“( Ÿ*æÍņqXž\Ë<äKE´ÍšŦįšŨöHĸPõ‡ˆqmwŅ^ĩí+)ÛîĐ"Ō[5¤čŽ8Ō.b§3ډmzŅR”2;ĸáŽđöŨCO|îŸëäÚėÜ,7ƒĪxʝĢ6ôSÆ63?ߜ*šäė´Mw8üøŌK÷ū )e´‹+_~č"=)=éaæōNũvŖô(5 FŗnõŠ(Î{úŅ€:ģZāBį ŗTy lŒ–é´ˇ40\’Ö•,Üō_“ƒ æŗF>ūvŒ˙ÂâuQu;Gōxø/ØmûF2ūõũJŗ‡2cZ<§ ë n’pŖņ(’jëÂįķ¨ÍÖéä ™@åםWž›Kē0՚m¸ø¯õĐWqAgģšÜ-„Yl‡Á§’–ËæˆäIÕ(ú÷Ÿ98\¸YŠŋiû .Åqžžáús‚Áší}bP”D>r‡!Œƒ8"ąf‘ŌwŽX=–Ĩ•°'PŲķ īƒīm˛?-=  ņŊn9ĖøJ¤ŧíHĢČ!øF>SôĸeûĄ…UÎû’Žĸ_ē%“Y’Ę„åĄc\~vSNŪöÁ˜'K­É_UÕÎIŽŌ™}yC˙ņĘũÂ\yr%-ĀėįŖ›<$ē ¨¨4Ís•ÔU1gƍX°j™“˙ļņĸ@6'Ņ L˛ŅëÖEˇâYDĪËO÷rå›g õsŧ4[ŋjžėÂXb§ųkn7ąĖÕŖu֓,Üp^ķŅIŲRķM s•]áHgmÕC>ûeĪøČš1ˆŧąOLwäŊģt2Ų›QUT@õņĸ”Âcū5r¨ Ē2 9ĩŦ§“ŒBpm_ĩuũŽÆ6ߝ8-—`)Ī}÷ČPŧ§ž–ˏŠwąķ vŠĸ'3 휁ÜJ#Ķ‘Mą Äb– ’Æ ´•ČŋY€Ôäœ|"];Åg—žĖ°Ą ČĪ@[8>á ôî_ĢîÎ'Ķ+ ØĶ~܍ޔ˛xãūČžŅę0â ô MRĩÄū.0t#Ē–¤`ë,G#ž‚ux$!/T‹ĐÜu!CrĖÎ@õŖĢzg îÔ\D?tÕÂ~öĄÍ6í˜.ŖįykˆNÎ[íTÖ× Ĩ|ĸË?™!PnūRũq@¤…GX{û$ÛÃŲ3P )Eđš§ ‹čŌY ‘åë5ŧ ˛XqZk 2mķ¯ã„69ln/Vœz˜Ô†Žøš´kĐ$vWjīĨŒÉ”z9öbØÜíÆqē­{V×o_bЁJ8žß&¯88cMâ_ĒO,kĄŗ\Z0āŗ ;7=Fû;ëŅÃÂQ7q9Ķ@íũÛČŦ4āĨĶ•Ä3ÁŊĸÚx$ąą„o‰UønĘŽĢ¸ĀN >Õ+Ŗ’Ō#a)žĖ›đoEq•O˜h؃5˜&ų÷_Ŧ~P9™"°^$¯Ņ…Ā$™YQ blõ?hDėŦˆœŽ3ɜî“:Qp ˆā—īR?ĨõÜr:“õĻe¯ÅÂͨ°éėˇÔ@”û{Ŋī,BīūÆĻ†Mšg tÎXĄ9™sžØ#ĪVg í’‚ !Y­ŸX¨ĒHÄŧĄũ#1äeû{ÄzŪHϚSXĩ˙ŨōxŲŧ oõ 4å˛h&–ŗ#fwÚīkČŌ%)%eˇpÔÔ_öČÆĢÂ>s-ĻCĮ3ФOˇöJŲiž_ÉžˇĄG0ō^Ģ˙¸Ÿ<*Ô1ĐARmz˛Įū¤‚§ņĮ(”‚ķ—I|mM—Č-SãzģâNǚLæĪVË˛ŪŠ|õÄwD?øœÍߕÜēa‚đ°ųh Rú90Ąä2œ¨šƒ~ŒIˇŗŪDĢøâ+Ę:•‘ 3Čc’xģŊ@œĶ¸ū-$,Öû€ú›.Ŋ.âΈųæˇ‘~R .p`ĒĘÍąou‰†Šī {Q#Š”?K: ™4 i-pq-ãįhÄÖņ{g&ō ôfG˙ķ3ĐGC9_7.a1Acų‹:Úęû2 pĩˇOŠė͛•ˆŸüī7ōļm§{]ņ܉õiĻ9 Z'M 4g›ĄŦkÔ¤÷Ė[×Âæ–]&Žõj¸}ä",]3N7Õģ“Žáŋ0œ{G–ę,o8‘ρbĐ\{6qĸ™ į‡ˆ~§Rž;ՎŋgPģ.Wø)“Õ/ šåÍ~åĮ€—8(F^Įb€¨zŅûÅJ;!˙}HëÃG°îīŧõˆ4ÂÅ3ĐÉ÷zĄ×ÔßâÔ,ų3Ŋyî‚ŅŌŨŊ ei• 8đ~†ËА#Kũ9›đ쏛ėÎēˆ5į-Е°ė’›’us žĀlÎ={ßeū§ŅØr–ASLōiČl¯qķíęŠŦÛ'õŠTÁé,lĘŧY˜’BÚéK Đ qkĸ‚ë ˛''ū $jrėÂNĶĀyŌĢölĶ{ ÛÖ5A8æ™,Ëąúøœžš3gķw=¯Ô51q’ö7ŧQ.ÄVÂGîKÚ SPÖ`˜*Ę~õp_€ĸCˆįžzž¸ĘĨ(đjCCæ ¸Ōę™ëö°ũĄ†ŨaúeŌ]ÆmáDØ* ėúšžühģcÚWÁČ ¯ØļϏŋ;‘QBŽ$člúA×tĖđĻÍIĖ×Gn. üa!]/-cO˙Qņ€āŽŸæĨ_VŽ¯ˆĻ9ĻlfŽ>Ņ6ĢJ‹ÅO/ ŪhxŠJ•<ĩør bąbŋBČ´øžf…–nxÚ6]&_ËjīúZ €ßnf,ŠŽü90$Åu€Į%ģôų×ŅĖs§k§ Éēōã_ëč…€îĶâxŅŧp]'9ĮKŖíÚ„U ‡Ŋ&ÖXWw—ObÕM3Ī@ĄjDõčFÍ^qŖ`gҧģ)’ĄÉÂoy`Ëų͊9Îãҝg yXwĨ bŽo´é!l¨ą˙ōĀ ­žĐ’åŸų yĶ7&°Sē18ķ(o `ķ˜~ōā$(ŌÜŦvî09c7ͤ‡/5ņĖ )Ņ`âgRʒåä4wíÃ'†ÕņfDEŪ…ëãčs ›‡XM@CՏ^wI'ī°Žv,*gËe¤|ö´‘Ŋ(ÖąĪ˛~åæ-oTÄí`ĢéhNŨoøéjj]ņŌ:||WøßVVŋhÎŋ~>íú9vĐ_؞@tWíMfƒ„ūTXĘB8ŽtŊ–ņO$ØRė/xŅ ųĒib€c˜5t €â%čļnĶÉF+Q0„ĐŪ[ÍŲCīļŽŠEX.‘$>™&ąG }S~lŗũæ„6ŽāĪoÂæĖÔŅēíĪ W§COįōâ˜ÂOk{ttJ~‹=]§ÕmžŠŊe÷0#Æ/ē ,kz”ĀÉŲvœ+å|Î/š’˙1­‡´Õņ‰1ntŪÖ5‚\4§ŽT#ęŖå_@ģᲇĪņø=ÎŖëĢם‚'SbūZúęzÄŽ|:žØhy¸7sŧ)XÛĒ3Ŋ–ˇ„¯Í ÎÄu %˛eį&’<WՓūt#í…Ģ)y+rņęaĖ[Š(đ„Ą™=gOH•Xtdܜ&Ū‚[Įô>ĩ¤ķ>"ā:ŽĢDÂũŨasŠē _i5"įØÂū„ųU´Įˇ™a¤5˜3ī†Īl:7’BŒK‰ŠÁ<ČMÃúá'UĮS¸J0wpËĮ#ϟĸčö ÕŠ2f‰°ųü!Ä:ĘĮļÜ5û?Ly ~M[zģHđBq—Ö_ ˜kq¸ĮsĀå€;Ŗ0ŗ–ûĮE§ŪĪjäúģ;đŨÜ[!ev…€_ŋ‚ ÷ÃÆAߟēkP$XD㝁:d¤ŨĮˇš~ĻÂxĘŅÖ8Nd7<)¤Åāđ: ]ö_+gYYôQSÁSJKŦīI§’ õįWŨ=ĸ0Y&ų•? P„nķh#úUH^-įĐŧ @ŧøDāׁš)­uĪ@œĒĀ‚›•֍ĉcŸt˜+€nŽüŠĄ×”ƒ2‰; ē ]Öø{Ų#¯ė<` Ā3öTzŅmiŧÎ+Ä+R(Å#Ēg~Xœ{ÍæO°U |üúī~$IĩGyŽÄ#'•V Įĸ#ė§NÅmį2°%6Á<´žņ—Œ_Ņ҈Â[ųą™Ę8Ø" ^īãŲÚ}( •Ũ,˛ėYi×MúŠ…ÍM˜!ŧëÅWÍúÃčäd_É:Ą“Ŋ¤ŠØBŪBôĩ•ĶPˇzīâøČŸ4/jhP\ŊŽ|¯ģWÉØúcļ_h@#̝BÁ’-ēíÆ`Î5ˇâ­žMnķB‚¤úÃŋËAũqŸÁĮQ5ŗzÆæÚĐŖMDŠQ4’u2ļRš}‰˛÷P›å3Ō…úŎ":t=EzũyÛTôįjžõ˙šÄfÖŨļŊZyãIĖÁrrŋIÛ%Ɲß°Ž›ā9ąG4ģH„ké=ãŋw*¯>æĩ›iíIŧāãîÔōŠ=`2s7—ˇT!rPjpCíäōØUjĸFōáõģģåS`’âXË~˙ą1C;YÖ5Ø?­ÚēbũËĮ7˙ųũC@hĩŖmę°ųĸÁ–õ,“4f@Ī‘qÅx=@ŗœšGŪ´š›-—åĄđĘ×rüÛ/Ɉønë] IŦåęãšëŋ{cÛ5j:ÄiĄT;b€čQ]ŪŽx‰čxZ >ļ:üą5Kė’fwDČDTš?Ũ”("ņÅ#V#Ή‘6ĮY+MēYĄ(ƒ~l7@ŒAT˛j Ė%Î<ĸZGūˆz[ņq“B90 ڎC–>ČɃ›NYˆ9Ґå‘ÕŠĀ Ôå+âĘķá.sr@ ”´jO‡ÛMj¯Š^0Íß˙*süšˇ\Ûü­Ëķ‘Ēķ°r5Ü a{č„vdØ|ģĐkčûūŗˆ#$c4-/t÷Bā->ÖųnÛä°HŲŧGpÄl>ĀÁ'ËČŦ`ēÛžžÄ*“jAŠ˜u׍Xč‡ÉZ핚&VU.(ÜČžÕø[‰ģ×+ø~^OÅ­™ëB€r€:įaũ¸iĄæÎë$˜ˆo6đļãôË1ĒŽČ¯°m#ØîBfČ›W)9†ˆw™„Ö'ōjw‹ ũeģl“AņáÍˆåøŽA2E‘Ļõâ:ÂŧĮ—{UŠu¸Ž\°q-­ˇ˛ n*VėššÁļlŠžĮˇŦ&ök õĩúíĄÕëlz˙|Ō@qNŨŋÛŽÃĖrœzÄIFG‘ÛÃāc'㠎—ä¯UaYZ”=-āw5G¤UĻuUŽö5éÄX7Øí@į!PŌ—ᚠ_žC€˙‚K& bDÎÔÜģxŦj“`&ŪžēmŦvĩē^d,Ķ›īvČXō0,<1KÍ”zˇNˇ0”{īÛ8F͌ÚĻ?}>BŽŊW×äÛĐĐ~æKßJø†$rųë"Ļáôß|j˙€Ēë&å*Â.Y‡ƒÖŠŋūĻS¯c(—#5ʈXx Ø4ŊË7č:FŅ˙˛đ|ŋĩ…Õ‰§ŽŌJĒB™ā2׆4Ųua§vĄŸôZd*S'ŧ­? ™žm~Č˙ÄöÄÔŧuãTđįNĪåxũÔq´,‚¨ƒŲ*"õX"¯8ßp…Č0ŨĪ!|C&˛3ĪŖ°—„ƒĶŪėđØ^_CųC[ŨœĶ΂úĐÉe9:ØüÃ#ŌÉc…fĮ5§^%ô95ë€Fā(Sũo6uŪ”ŠJø´˙ČpĀēí”fV”P%TaK;úŖŊ7Ļ@ų ũ-pÅņ–ÁLūŌø –›ČŖgˆŋ´Į9×ŠĪ–"8-˛i¸>ßō–č%û”zxãöUŒīFEY˛ŗÁÔ ŸaéļčI\Bá(ynX_ƒŦE€KPË^'Ę.b$ß1Ÿ5v>Zķūˇ`ĸauË&üÚ3Ø|æXËú9ZÎ!SĐVŒÖĮ%čĩ9N Šâ˜=á€öÎhøîij!!^tūwrĻ05é­Îö¯įež•=ПÁWū>ąŠŪ×ÄũŠCÎ@ ψÃP”Ģ%8žâ ēۍõ™Mԍȁ͸Ŧ×đxä“ÂnQ#ÄæëKŸÍāËMy—ŽĻlķÍĖ_ūåIįXŠ„âËsØøEâ wÂæNõöeiŨo:} 4c-gcķ•F]e>ĸīāôõĪ@:jģ¨ß2ėĢ@ŅŋčPa9Y„×­'ķ*˙ÛéFÜ2;~†'НÁ˛ o…bgŲ=ˇŽ71#a¤ˆsaú͎k˞@Í ]év ’ŗÅŲW ›–ЉËdŋøaëņčÚ%ŌhééÃ[ĜŒ `2KHˇģŠĘA]Ä/ôX0¨D"#Ü÷ŧSŽE'wÍ_†Øû4ˆŒkÂw¸I@Ÿ%!Ŋ‡ÛônžÔYgėéøĒ,\rļåˆA1…ŽŲ˙¤ŧ"Ĩ?õ‚M“ŋ|<­‰ƒ'z“$vlméŖž pĶ2}do¨NŒĖ8ÆM…íSÔ FôåÎ' œƒg õrŸ÷ķĩwcš ‰C¯Ã~—°XuaĨV K3!V1°ãŋŖ&â]ĸėKĖ_g. åũĩ/˙í%ˇŪÅë팠ŲĶ /ĪלŒ.5ËåŽ/gŋʏmčZŠæBœË˛Eã0ũZĻí!‚fGT—~ų“ö€ņHė÷Ŧę"ŪŌ”!áÎéM=9-×7ž`‹[$áA2đĒ…ãŦlާVĄ÷1˙Ģpû+ų]Ân?R*ÍS*ˆq‡GНÎÚ)q\Ûé  ÜŪ 0éwuĄk%B‹ÎˇTË GXˇ9ÃÚņœÁˆa$ŅpüG?ã˛$ˆÁ'L͕jįĖ’R4.yĘĩĖ?2íĐ; Ļ…‹ė˙-VƞC CōšĩK¯W§%ŸĨ2[¸Šڕú œsIŒymÆ&ņĒčÜō(°åDÆ!t[~G2š"0ŽCš÷dÃøi~wŖĸČ<ËāÄ/fôĄ~ūšYËģ ķ ŊåđxŦĶ(ڍ͆žHßR‚< uKÍ'ņ¸ÂP^m=ÜJáAuŸDÁĄ ‘ĢË)€9ų+Që˜[:õ:=äô‚ĮÂKZĐIԊž͜c Š€„Sę*‡CĒ%lĢÎá7 .r™ā˜ŧClCŦ×cbū€íâū"ėŲŠŊËųû‰F9‘ŨŊeĻY3;Ũá?á].3‡ŖVķ˛kņ™‹ČeČü‘zÍÕ\V&q´ĸ(“ p¤ÔĮTĘ2ˇîz‚M–Š!:˜IģæÔį‡>‹5'˜ĄC´Ë7@Š˜œ›ÄĢRE×ŗÛ†ĶP’bu…ęĖ#īķk (OŪWˆX×-POļ…č+ŌķuAôëMŠqˇáí2ęûŠ ÃŽ",Ę9ö÷Vôĸũļ;uŲU,đJėÎåũÄjq îŽXg–ŠMÚ'x ōe#Yˇw9Žk~5H؂S€˛°,Ũg -æŨ~h@3Č­ÃŸáûf€ÔrĨ•AÄHÉy⸘ŗ -žõF˙%ëNK"`Kž\;Å ŨˆœGđ4…ISØv“$~77Íp%ör3ļeŗk§ĖJqu~øM\w|°Ŧūļ÷˘9{ՊähU2¤+l5ˆ¨L|gÖ]`Mą´‚ļíõ’§ču ¸ÆĖė˙Aį6°.‡‚‰ę‹#‰ŊJsŠt˜R > ,°ß÷ōW%ŊĖÃįÃŊ‡k BŽ‚ ZâÚ˙ 5‚Ü>i‚‰ûōž^ãí8F֑{œ-Æ2eíŲrÃÄ5ö/Ûē?™žÜ˙Ž6$đŒ]īxœÄũÍĶÂģõ¯Q /ŠĀY˸Â\Q\eØ\-î`“…¸›pˇyĨKäÁæŸãŽ\Nē1&ĩđË==‚čp Dáô¯ŽŊ\Í'ņ—ģČt‘R&}Zĩyŋ'-īĄkœ€V]q*XGŖŊÃNŖjŖ+¯[Ũ÷͖/ráļ‹I§i(bÛéŌ]‡¯Û7UŅ]ĐX\ôO†ą¯,5ô­Ú~g5<>Æō8Rw}Ø:Ipāŋå0ÛĖÎdžØÉž%ˇ>iôõÛ==ôhZÉĩv[8āÁõڑĀ/9FdĩY#•ŲØQ:ÔĀ\ÉŲŖų"Å åņĘ˝ˆōie)ëŦ_–€ eĻ]â9æŠ&0ąOüĩN˙ Īí/ŅâxŦā kTĒŖÜ1~åÄuė ’j“öŪ/ØPc6Iœ4ŋ°Ü' xËOėŨ貃õķLÍã#čP#ļUS7MV­ĐüBAēZ@ąyÄHŋlAũ@NEĒO¤ųŗ´øŊî#÷–Ģ"ë"č遂N…`tJß +)Āî¨ĢŅųÚ É8#ųҤäúđ=ą"];u<= y´H* –ĮËfFqÔûH—e횎RøÅâ=ÍÚĢ_¤ÛnķoŽ&]ŋ_öúĪ?ĄąÍ LŠîU…°Ŗ y å-ŌHŗÕҘFã ¤ÍŊãīˆŸė‹Đm] Ä9ĩœËMSwKŠņ›4@|QA†¤ Ŗ<0tûūĩyÁ/t0__ĸ`ϟ(øTiĶ1e[dj^°ÅR û”ē?ođúqe Ū÷`ÂrŊnŪßZĒpįÎ ;ÂēĖÖQđ ēˆ_ÅÛ'ÔaUV$0¸ąŽēu„dčÄđRJo|ŪLé(ë)Ķ›ģ‚8^Ė‘:‘–_# Ɵ#î)į#)ØúX}Š4ēĩH´Ų9 #5”{‘ĩ *íëöOŽEŸštcP–Ŋ–„PÄŧY7e§č‘‘ŧF5aąi @!lAČY4g*Ɯ*fg"gÁ3^åt™/——$=œØi’ˇP€ŽâHī1Žö­wßÜ=Z1yû…áũ„¯(IeÂåĐ1íø-δ-õ|—”CL…6./f0ããå(ž^HpÆŨ†˙?žŧ`ūųÖÛiîû fŧ1á^€kh^K~‰*‘š¸˙1˛ˆY’ČË@ ÛiĄBTŒĘ$-e ŽēŊ\FrFÕĖ&lčé%{ųõÅ]đō’Q§Ē üc€x‘ŗ p^ ԚP8KÕŨ ØĀ—Ô@㞸ŧæëäŋ- ōčížÁ˜SÁĆhŧ¤_ËX“qWŦųČãžä†= ēƒ=ßõRŋzz§Rqú™ˆ8q6˜zˇŧé2Iąēe˙Bā;á-ĐŦ˙ß͉›Kb-;÷Wr6á~ň.Ā{í˙Â^æ;÷}Ēg W„ĀϏhÖũķƒČ^î¯tE˛ŗČ#2­˙ėŧDˇ"ņ2Wœz‘R$CŨ=ĨŨM=ߐykeŧLøDĶą6ĩƒ —–Į['ČU C~æ7+zW~N’Ä×"u‰ÜõÅg Âsí]m…0^ĪY68žYŸ=g-2[Û xTņe šîmÖŋ2ņ*T+ž„Üē6 [* h?-Šū—ŸÖ„ßȘiü’ņė-}ėōŠ;šWÃŊYÆĻŋg ã= I4†Ÿ;^qÁĮÂ1}Ã}ž´ÖūęŖ„sé ”Ä™yąí°ŖĸGûāë=€ø,_ë-W1˙ ‡ 9ˇ\üīlŋvXėŗ.ņË菃näOĜ`ÅđčA!hĢ3t0gz :ŲY‘üÄ}ĻŠ- E3rDĀŦ‡<Œ €hæ4? EÕš˙)RŪJ\3 fĸCŋę(Ö\%û D0ūBíôÛaŠQ[ģE%}Ÿyíšy müˇb&h('ėˇÉ{^hƒx—‰°Đ¤ÍlÖčˇĖG^Æ,‹mgađūSjXŦBkĩ|ŋ9t[ĩåÔ Ú —™Yk„‘đčS.‚ļöÖÃ:Ņ2 āHÖ ēV„Āz’ŧFĀ„=V­û´ČÉøŽÕĪ@Č[¤ ŠÍoė׊C|˙@wÆË‰ĨFŸũ ¨=­ņũķcCū)(⎤IíŦ=U¯ÃŪ1 :=aâo×ēÕ2íĐKXsĒĀÃBĢöžæPY„.}|Å[ų‡pŅ!ëHÚđü1€ũįũœē0žÉķ†t{ŗüųå2éaŠ˙Ĩ>Γäã‡ÎU§¨† cŋXĪU,5ŽApž–sÚd L˙Ũ÷ĸũD˜*ļmč3€ų|kGaëu$# ŽŅO‘ŌZ(‘{ą˙¸o^nĸ˙:ZØŊqÛâ-žĩŋ›sĐëwˆ„€éͲa{°pkÄwy^éŖúĄwųOŨŽŒ$čŠ`!…áĢĖ Ã"œĘZ‹é“Š€ÆWÚũvā~|ēĨۙ´ĸšČôņī€ĀĀwBX_¤Ôō/ËeĶzb@ FlSdŅtŧtŸ3ÔŲũ`IŦĖæ>ôˆĒ—4GzYë‡% Č3ę°nÅ1ŋĩaŋdČ'—ˆWķjwåüb‰ŊjsŧbMĄģØãĮĶ5^Wė?Ëņc‹›Œcû¯ˆlfĪžĢv*ûŲĐOãdĀĢ4åšĘĻĖīÜgö]‡T _ė˛ģ pŌõËÕ}"ˇ`ŽEÁi7~N–Œ:Ä ¯“hĮ-töÔ%‚›Ä# Ķl ėwũ{Úx+ņÎ ´8P׋ĪœÃJu¤ĶcĄ‰Û&ņ蝁ZNí.TnÔö‡ÎŒß"žõHĖė˜[Úh„k•ģÍbšģ]WCņ—=~”O¨ÃągxÃ–ëąÆ0Ü/+Ū´i§r,ėœ-w–CNûWLŊc‡Ęš.ĀĖqŦšûŠÁwas 6Lã<ôˆyŽž"0lįB&ÕāN€UeVڈŖŒąĄZŧŅáIīS~  Ŋ;ÆŗâčzE׉ŽÆ+Ū‘€›s ĸč{}šœđŊ5Xu< !ˆÁđU ­ 'ļU29KŸí˙‡äU‘ezņ^ŲđŅ"”ëõpęĶįčũJccTîˇ eš_Jo6õd^Kôy=BEN΋söŌĪ9z5:›Æšī_YRÕyc¸WNNËãøî×ûÉ´\ĩw„VBŪB*`˙ZĪjņģqąvkĶ aĖëĨƌ§a-ĶãŖ_?‚hi†˙,”lú¤„Oũéü#,>动<ü9Á_RŊßgƒÛ­ČnsUķņ’âję˙ųģė~XĮ¯q~“nã÷T§ũ“C]:šV'ĖÃ9G/ĨĘ`PaOÅ˙¸Áĸ¯U7S&J~æÍšjDcv¸_@îq˛ŒSDÖŸŪD?tšŲék(WĻxô6 ë+ÎĄ5Ÿ*īÛ­Ÿr}ŋeōĩû]ü![sz^k´%EæŠ;exqĀÄŧĮ'äąŊųͤ|•ņFŽ”ģĩļÅũ&b×i6—–x¸Ņ,á…´¯âÄAėwGŠ‚\8á‰SŒíQŗĄ B昁tí7ƒ!@ >[<b¨Q_D†Ŧŗ ŋM/~Ø2XŦWZ°{&ä €LaįĸuŊĻũ‰qŽõšKæąŪĒåķ+Ÿ|%ŪĪ:˛ Ļžo5}aQØkŨ™’Ö%ōļ‡ue"˛ŧĢ$q¤§ÆíPđAÜĒøõŽÖf‡}Į\ŠÍ(jDR:õą€=ˇ5›ŗk}júĘ9MÎ|§ ņ—*‘z%`4&jļ>Ni—=ĩ¤ĶķĄ¨Ģđ ĒL[“cK[–ļÍ-2Ÿž{:ˆėKę\ČÔj•ŪiAų cfK…ÜI˛%Sm!ÁÔÚûŖô6Ÿ&žAúŧ[ké%†Ú\Ļë–aāŊxØnûųTåh`ķĘ|ĐŨÁ”ÉPØ&˙\Ēt‚wæąquBžę)ĻęáÆ ŠS„;øģÎģ‘čm@čxéņŸŪ:ōC5vnú‡ģM.dráØhīTā/h2ų}jõ‰íö;ŖÂjËyũs‹Á#„/"ëuv0ČÛC¯}Íö5<ōĨ$8ĄŪŨÔ؊ŸÎë6ë"ę—!V#Ņö]ĮÂ!¤}ŸCm¸ŒŌp_Ā—éõĮˆ9†Ēŋïū˜ ŸĀoŒ25‹°ÚĪėOÁ˛ŧ8^ /|ĘȎĨ+ūüîģ!•eš]dWæë>‘1ļ˛öjŸy +7%ŧĢ]s =ųh!ŲļĄ€3– ņšž:… ÂHTÎ: 9X§ÚēūŦO ]Î `š€ãĒŽę¤øæN-›Q_ÎûÍØ–Áá­`×f;L˙ziÜtõË~Ynîwė{OØķ sĨ.(Īī_÷b%„nwĘĒ?I~ôžtÛZbSR:E OŅŖŦ ü™ø ã!.žŧ(Péxbōāø{%uțˇŦ¤rÅKQ|hŽT[/ÛGšŪ%Hę(*ą(÷lxŠÂʋ—A™TÔAq¯ q´\ˆįÛ­, cÁĪĢĒ})¸†¯ŽÉ[­ŋ2L§yūŖķ˛qÔĪ/^Ī~ú_J$1\ÂXŲ܊Zš‹?9ļ9Ŋ ģ?­ØƒÜŌwK•ė´Ŗô.ü *ČtëĶšG.OŸ=~ų5öËnđeŸŌN•'ŅŠæšÖY“úŽĩDƒ_M-†!’"Hũ“ę–ęڃ§F?÷ÛônņÍ2_ĢNU>Ŋũœ]ö&ęëˆĶ]ũØĒPm¯6ƒÚąĸÜb´p^MĖÎOŦ‰ßKŸŽø  .'ĮSA.6ÅŲKĖŋ—1ūüŪæ„NÃáŖS…=ÖāČu2Üj<$#ØMq]‘ä×rL"/™v0Nå`yO.č˙ščéšqÍO‹ņgŗŪ‹_ãĒČ´t|ž`=Ž‚EģB4ĻKŋų9ųJ*Ũ đŸâßō‚xÜąIxÚŧiš¤xƒLŠĢ¸xą6Ž1ēŽĻõ)ĖņøŲ+@So}ēÁ`¨U.¤BÛ.Š˙î…ĩõ_åĮ’(TBĮčwU°ö ĢĐĐX`õW+īŽēXdŽCKí…~ÆM˙ ĒãāĒ-Íp–b4$ũˇ|*ęŊŋö!>ԖâĨGÉéKÉ@.œoÂęÛž=Wev¨‚Â'>Åw­Sᾆ¯ßÎBËuՉ%ÔŲÉí~áČâĩU´Ã}•W1íÄnK”W;‘FŋČø­ļ™JYXšĸU7Ü~›RfŨ#{Ąo:´aJP'úŅ×'­GČé[ūŲ{ÁũIŪ=ŪN%m›¤˛âb9Ģâ:,|6ˇÜéęobŪÆøląNî$š*ŅՄĪfî%.(ĩ˛Dđˆ Ÿ×ËUW5Äaiūģ)ėō…GÖ Vß5jüûG‡ŠÃ,ų‚ļ.RO÷ÚŲŋQ™ŗ#a™lŽš×NēE={iwlüA2ÂØ>…ũ)ƒg"{îH3¸Éžę$ũáÛ1~š´Ų™{Ÿ`Ž:ÂĖUīÜs7š7%_9ą ÛŪˇ—H‰Ķ¸¤O”B9rŦÄ˙îG' öąâzåo ĘÕĘÁ=h?*;”&R,8Đ+Ũ×Ŋn)ū7œ)Ëā=5Šš]16hŽ ŽxûȨûņd€Ē|+Ęé¯soÕ;éį!ņßCGēО”îũō0—ËŦé!ŧ%ĸO‚î}%=É3x0{:="˙핇wԊ.ĘOÔåzmOŸoĸÉ<5įUi~×eM^ķtĄėŧĪaöösˇÚ/VöO÷ tF¤7r0ŠĐqĘzŒ‹îGî]æ‘Ø~Z†}8ĢZÚ­°˙ú{†X}œAôvį.ë›Ë1ārC|ԟōĖ4næ-ŋûĸ¸ÛÕ{:Ī÷Ĩ7ŊģN"?ĐœÆŠ‰=[W.&dœV4|wcõ^ĪĢÜĮdŒ­‰ã–ŪHĐZĒU&žl\3vŒ ˜0uv„ĩĨļúē§š›ŊydÖŧfĖ `^üđ¸7 ÕOg&pēå`úxD|N­ÉG‰4ÚglT]Âą°”bÚuR;E |#M>œJ;=8Íínėœjųū&øC§đ´SĸzīD˛_ûžnģ÷ņc3—JaIđö)ßR’„=]ÄTņ)›rõfčg ÛíÎī‚‚¤~ŧ‰ļ”ŠûH7āāX´2Đī6u‘ēg?î]įR*šnŦ_“ķ^bô7îiš^­…bˇ×|ļĐ ũģŌĸ 6ÂظŧU‡dŦ÷Ûų°#Ą.ą?šĖwŖ_˙~ĩ,°RŪĄR›Ąˇėūũ•mĨ7ÎMõãũ5 ĄĪáŦ÷Âî,PTA=äáœ:™1WõNÕčŖQEŸrŠŊ™9ņĸũÜ^ īt¸bj čnöĶ8ÆYļ×r¸dÎ}bã|¤ŖõŨÂø;ëMk…ųĘōŠÅÚmĒ{‘Û¯_(ŋŽKæöN'šhgŊ-ûĩũįkĀFĶA)ܟ'‚=?œīOčuTīē>aÆåĐĮgä?Âã3!P“ Éđ˛lŋĘ1÷EyæFôjlDÕž=äHŧ:sęĐYyÂŨYŅY)˜:Á¤4ë ZĩNúúÃŦžíÔG¨Žíķ—ÆāŗëÆí¸ĸņåíö I_dßp„6Rô—ģtķ˜sŊûp˙ÍQ¤üļŲKTa.åƒûbÅOÛŠsTû‡ŊTÃ˜g9ålJé B‚1ŨχŊߎąĪ'ą,ŗ7{cûOŊ]VÍsP\÷äųŨ:¸öÅ!tU(HpÆŋöīXņßW—` Ū…zėUqč@~{5MPoÍ`Yš Ē1JN—×XЄŌ6ÃD¤ċ͈ōŊžÄķnō<”V۞"ų]FÛįļ WbŅ-WZg?ūEŋ—Übž!˛SxøXɁ;Ōž›X'}ŋÃēđŠĻĮôŪDåmąXzjEŲĮŋQäÁ"0íī5ÃKEÆāĶ•‰$ãŊû´ÂwFŊ‹×t ánŊV‘‰3ĐËBëš1qd÷<ĻQQÚzÔrœ(LWÖBöŖ›ķ57/ŽÍüTį`ėˆ™,ĖmN^b~öį =o&îRšŠŦākåÎh ėh?Ytā\9L¯Î~)2M.píƒÎĀĢŊĐ3 ōyP¤ÉH>dķ‚āŠÖ ¸M†ŠĸpSdO\ë~*.K:CėĨÛ@Ãæíęâqũ—¨ÍÉ6×ŧ‡.N˜$Į9û} ēŦ\)Ģi“\æc Č>ē‚öP]ū&ü!YÅvÕ&šŋ´ÕWZ7Ä2^F[ĄBōd‘ÆI&Ī Ŧ2@J­ÅËot¯Å"¯\Ä Ą nĮCözeftžÜćZ1ɕ&ĩy8Ŧ–dŦŠ NWģŠōGhA0´Â3†UģÁ†ÅlĪĄŋ#ß_čč6ė¤Č„ÅŲģu-y't˜UqũeĮh=Æ÷ĸQŌĩƒڈ8‰ōIũ(JT‹Ģ˜ĐEÛÔ§ÎlāŊ¯BpÅmŽ„*ë€'ŠÕ˜ĮéķũÚāTS}‡ ã’eXĒJvÛ_J¨ ĶŌP᠑:Ė'“?!-*ŧ‡NūW•ĢĢúĄļ4ũ ų”†ĸ”ĮRƒoЎ” /‚éöôU@l%üvš”[į˙u/<1yĀߐ ŽâØ+ØR$;ŠōAupƒØVōĸ!áiî{TZĶIMB×ãö ČõĩÆĶiø:¸e vdüįŨ ļTØVA>yŠ1†d"*BŒäƒjū ŗ!fŲķŽ!ac™Ō”Cd|[ŠĢ@{*Ŧ0ŧúîPw,G=ū<é+W×Õ§ė• ŸHšČd''_Ô4áË}>ž˜šLŖéēĒĄÅūˇF’[ĩĩĸD/p ķ­v€xũû(ķRŖ@šį¸Aô§‘ķd*CĐŋВõŖDĸ¨ újū”*}ÅËĶaŠ(ą`gž!HëŠT^üEZ!ˆw.yÔHk*ŦNˇP퐟ëŸĸ(΋˛yËąŽÂ— :߁=Ō$×ä*ŠīxŽÂ”—Öt×Av`ĘūŠĻ‰ĻžöfíĄĄ!vũbúŠoķBZ ("4ø€ņ2zA6”L'ĮÍÄÔ(*Æŧ(ŲŽŧäũ܁{ēĒĒvˆ~ã‹4‚??hMš—›/Wiõ‘ƒ‹ŋ (ņîųŒ%šįöƒķoßŅWšßâÛŌ$(‰X@ ĩ rÉcŖŒ>¯ĸĒĻŽ÷ūEƒK†Fæ×-nXŪŧeåčäėr×ÕÍŨ×Ī? 0(õ(:&6.˙,åyꋗ¯^§åäžÍ{—_PXôīĮōŠO•UÕ5Í-­mí¤ŽÎ/}ũ߇~ P&&§ĻgfįæÖÖ76ˇļw¨ģ{‡qA(ä˙g\ŧ`\LĖĖPfØa\ĻĀÃx™YÄYųtMaw|Žž:Ɇ¸œ]ÖÄ.ŽdļĘīđ —㘄2Erí0´ŋ‘ũ˙öđŲ˙ ė˙Æ5pA! xP^ėØš)^6pwf×G˜(ä"|ôáBTN*'’ēâ€ŋ2>čÃ_CeާŸûŋ˔v…āđI[šõޚxœl¤ö–õe€Č˜[ŅÍbzG3 Žy]€äáR˛’āĸ9xŊĻĖįŊú€ŧģ‘’ĄįHä%,ËᴏÎÃĪđ€i× e§‰ČhÄë<6@xŪØčڀSčÄķņūāœ!đnIPۛ€ęˉŒˇ -„[YÜŦ .GL/†Ą€,(ņŧnĨ7næY„CBšCdäåLWˆ4ˇôDR’ë‘ZSC}("2Rg×Ŋt"‹%OØ­ŽPŸ ŅĮaŽŋļ ”—ŋžÁŗ ™õ™=1čË"€įfNČüi}ĻãPÄ ņ6ÍxĪĒ"fŒ)Å|‰ÆņŌå[Í­\+•ôÄI§˛E—įw-d9M2WZ85×ī%ek$øŽE”xŋæ÷í/%Ęųvú‹¤û—Bjm‰zd!lԒåmVĩ’˛U7+ēŋģK[{ûâĪ• ōÅ1VmŌ`J °Á„G—Î4ĒIŅļø¤÷-’1Á}Ņ›[÷lĨœ“ÛÃ)‘aÄÄr ßŠĀš¯RŽîAÖæ~2,ęÔ`wĪFĐF•RF"ztW™xkdō´›Yˆ9–ũĪë9Éös7ÃP?ëg'”–,˜PĪ.kÄ3˙iäģ)DˇhcÍŪÄcŖÛķ3¯Dß9ŅL(ü žĶ‘Úŗˇač_ō›D áŒ&ėüĢĘ<ņąÖkBËØ8DĖÃoNâIp—kÜōúŊ˙Iļ„VžĒ-ĩ_cÍsŖhČTŨsēE(W#2€ØŊēÁ÷9ĩ;)¯;§¸L}„ ÅaÉũ{f1ĖūĐĖ2ËW$ļâŌÆS GIMKaö?í]Įœŋ}~ûŗEÂg0úũáŖĒĖ Ë=×Ūŧ'kŸ Š2ë;]a}ų)žuĒÃZ;ŲVã˙ē,Ĩrėqäŧõķž=—§ÃĒSač™zá5žBĘįŨéęŸsė7ÄķERŠFt_<ėīž×ÆĒ9Ė/œh0PÍōËëR8z¯šĄZĘA}c1XÁ~ģĒōŌäcą*'JF+|ĮŊ āŖrYüŧãŒv˜GöģÍ LÜ|Ú1ˇƒŠ[†œ|ÖERõZ˜ÁS•DJ=Į –‡ŪĀMd~Fūė^í!=2ēCZŧĻ‘2°z`’¸äQãKÛ•ÜŧŨt÷>ÖĨnoŽ|É[Ĩ*š¨ °ŧ+1‰fĩĢé†â;Ā”l§ãG_rų]Cgĩ\š 3[ĄŸ÷LSØS‘Čí¤5‘Z:¸•Œ4jÅÂÔ;Š1ˇÆ¤åvܙīĩ˜5ƒųß[Ŋ*P‡Ģš  _Ņ@GxBės“zĐkMbĖå§Ŧ:¸ZWkĮpΞ–WW{ŋēō áx‹´Y… žWtkyÜm<{RO•d>Ĩ-go ųÁ˜*5Ąí1> @ëän¯pįƒ†c<Ã:˙´ÎŧwōŽU˜]ŪŲ~áīéD—œS¸Ē[NĶŠŌ„ėõé…$SQŧ”Ģ˙đv÷GŲEG2ĔHË^Ú8Mx#Čڄ§Ž'î÷Ú͆ĒÛm–CôĀ~!Ŧ;oān –ôayĀ äAdîú %SS"ķ`y¨%8ĩõ{?æc-ü†ŊKH.l5ömŪǏ;X!WĪfķĒ ŨpÖrõĻŗā÷nųˆrÔŽã¨×]ųx{čŠÁįđØž “9°.5ē#‚ŸzcYĶųg,&ģowÕŋ^õL<õĸLŌujC é}ŠēaīîLˇ§júÛÆ~‹ŨÂ:§ņŪ ņ !%΃°’VjÛ§ÍũIš8”?˜7˜ŠŖØ7žcãyaI?˛Š#;Ķũ¯Ķ¯°˜OhŲ*ŧ l‘÷,ĶįK_—Ž˙"ŨbŽ÷Ą_ë$ũVⴝ¯Ãŋ ßĒąīfÔČĐĶŪq†ā‡y$Ú/ÚŨwæ2‘ž­[j8H]e)-Ô nL?øÆÚ?#Ąšų:āÉWĻŊĄû_ēx¸ö2.wfđŗW=O'fŊ×wwиÕŧʍôŠé™:QŸ$Ō'ųûiōw@ŧ˙dūņąiˆKŅfų`o5_/ §Š&_āh1Ææˇ˛ËŗØōcD`Ϙ}˙ōp•@Xę œķiäĀ}xC¯QŲČ›ÕŒļLA01ܓöŨŌŗvOtļ¯8ô–Āŗ!XuQZ<”ŌĒ:ÉSS(ŸÎk̃ûx ͰŠ"Ō“ķîÛq{SķĐP:ų`—_”QÜOÕ9ié3ß+ē ã˛RËÅÛô(Js#˛.Âņ"é”"QĒæ§{ÃÄGŨŗžč×p‹Ŧ#HJbÛŽ-f"Ä/L=—ækÆ>c- ē/o|Öh˜.¤ûĪŠ;ĖR6xĻŽcâPoYßjĻi=J{|Ym5ēšŧûJ[°õ2ĻÉTäéį•h"Ŋw˙4t§k_hĐ5žĐrPz*‹Y|Eˇ˜ĩēw-ĩ$Ē˙vĶuˇ¯Ÿ^ âčŸw_ŪĖķ'8ŖBšnĪ×5Xįęú=ŪÄîZŠŗË„úŠš=ē5eĢŪˇhį× L2ŊĶ—M4Ž…ŅÔaÆô‹Įá¤û_/ŋã'jĐkdi˙0€W>ŽŌņeĢzSČ§Í¯ 7eŸōë}ÚįŊUšLÜH›‹'TCž,ĀÛAC×K[‰Š y-ʇ™ĪÅŠ7õ“iÆū+ŲĕX°ü0I0ōEŌė?R…_iˇl´Jž[¯l„vŨ¤Ö‰‹ß**Ņ u)ú¤V‘/ęŗæŽú*éÂCRn‚Íĸņ•ļ`%zvŒ}ļ9-iĶ~íđRzûΰ°&lÖÂŦ¤?–V!}IKD‘ᐨ˙`6†›}]ÜĀÅEÕRP\?/cÜE—-Ũáv ˛šÛĖ›@7ˇUĐŌ]ˇÁÖww(gž ÁžĖ_œėK¯ÛTBĪ0€Į>îÉvŽŅ;KâøMbĐ=ǝ; ŠPĒ)ūU }NÚöån“``éĢę" ¯+!‰í‡Ōîč^äjÔ|k`2Ø%OL“iŋ#+|ršėŽQ$ĢyíãéÔpûĢŋd2Ö`ÚĐ"[}Ąr¤mfŠ`˜Aņöõő9ß(kđĖw{ØĀô›$˘$-Wi=õ‚ĘdWøē$â4]V:đ“&(-¯ ´{\hĪĸáņĘ‘¤KjhķCjŠ} ÆėoŌĮQqĖÂu @p%”“ŗ´f‡fß\ķę°~[fņPīũ|$UŨĪķ:/īyįĐņŧÃŗœČēsÉ5k3‹Kžß—˛_Foĸ[ŧĄāvâZ´ODy~\GC0xz].AÖXūūĶĢ÷ŒÍ[Ņ÷¯Uáæ —ėĸ߁ũ˜ 渁žÚ¸œn'( …ä#ŠYH¨ČÆüÕdûuãl~kC‰ uĖ_ 7=C5Ŗ?`ĄãsįÁ¤uū bG<íŌV˜$,çíŧÁ<¯ Aūvß ę¤ÕcW@ Õ?ˆīËۑw@ OŖËŪ”lŦ.H9ū^´ nōƟÁšojŨŸ¤l}ÂÔĘtCa‹#īôÅ–[JŖ”)åˇÕÁwĨ&|ëĖO‡ė—YU^é'jˇęĻF§&wÂvĶÔŲŧãņ5Ū…%xäSoŸŸãcu6ä¸öPîü­åĨ:âõ|Uī@ĮļPP”írÚzŒ ŗvĘ{oîww™ōF†¯ÍÎht•­;TR ×A>~ĄŲ|EâQS-ĒFr/ĩŖ}'zHÃZįÜë@)fir—){YŠIT>zKģg‰7?Ô9°õXĶį“Í# ũ„$`ĩĸɆ›xS™}ī´?ŒÃę2ÂT_,á­¨Ãķ͡BxĀČČʆ˄õ8ža øÔlpmĸQ1DcD"5é„ÜáĄŌ‰vdņíÕ{—ŽfÜŌžŌ܍Š;z ,ĸ¸ĪäiÖ˛ö~­ūICYnQ¸ßŽ;˛Ue5uË_vuY„[?Oî7kŖē Û鏊T˙#fVoōίĀŦyGū"‰ü牍—Ā–ëŅ%ŨūÃ<ĩĀ|ÍÎ~—]ĘqÚÃIpwf# “ąŗßîē^/j}ÂjFų^*^PĒf–U‰žÛ›đĸz{ –ĩ<ēhuĄŦ‚¤Ū…JîDfpÁĸKčEŠ2¸Ė•67;Ž $Hž’ĮˇxÝûÉJ?ȘrMĪmrˆŠs‚Ūôō`Äo”ŽŌ€”äSĀ‹G€lTOĖfÍlXĶÂüBWŒs1‡ķA”Å-ôc°“Š-yŒāRŊh™B™}*E‰­Ææ/¨åPNī7ÂX‹Ëš”bôī‰[Ĩ+šHRy7kž”ŲĶyÜą‘Úˆ†_‡dŦeS¤TiW4 @@ ;+î!ŽąĖļÜsĩŽ[€i˜ę[šfŖrđ€æD€¯ž(ŪÆL¨§RPQĶ$Āɏŋī¯pĨ€,+ōĨÁöņ¸)˙CpŠŽ3ĢĪ’‡Í@—\΍ü"̊ÜåÍEm¤ęĻmuŗؘAÎxÔõŗ†˛ˆnYÅŽ=ĨI^ŊÍÚĒâŨŌ.‘ĸDÁŗ;ėˇqmŸãvøyA)ė‰ŲÆe\?ž~ã€ũ:×ãŋvCš—YŠÜîÂ*ãÖš/um‚(đíiāΆ^°ú'ģX ÷Š4ŅšĶ.Ķm[ÛųīņHģĮ%¸NõO>°ĘÁZŠÄ0Mēhzj˛l~ĮGaé˙ņ„žDķИ;K×YxX^ÂŖÉ{ÛSg? Ē=^ë>ųf›0ŗ|œ‚&ģCˆ“Ĩņj#čk@_‹­&†YÔ˛8U/ËäQĒzœˇ~Œ /œdĸWoĸ+ĮšžrˇãĻÁVŲ\âH¯QJ€¯Éąĩs`ÎØžÜũn0!UØj%CĮ_žjVÚŽ‘Ŗ?ŪŽu`œ™ŅF›¸ļOqXŗ“Čņ\ĮfųĐC†CAgŌqœÆMŽŽ8Rz(xŒw‹Ōp¯ßVUĮKKģ×<ą’V]ˆžÖJGa&ōœIfŪHŸv 2šÛŦ¸5-XĄ nC”ŗaoÆCŠš1‘Cj?¯ßúqá„ā‡áRÛ'˜ôÚ°Į^]ZE<Ĩ“ų›Ü{SŠVÚ|9ô™"L)#‰ŸŽ×ķeĢë…Z‰S7UžØg$ņæ÷CĩĖ7*}[(Âķ8ác၉‚;%ĩ&>˜-Đdgũ°ö›pcė I7‡r/o;8ԃ˙ʝ¨mę÷/[ĩcėĒ“W~ÅÂNÕ.+^ŠĻŒÔģÖŗ@Ī0‡Úíc'ãIØx~áÄ+5&šđۘų"°ŧvQãÎÕājāĶV•ĒŪ,?Āķ”EŦm“ãŽäî̍Áž.Î˙Eōœ&ėļ:X^|ŗŋāFJŧí4j9o¤tŦØĘˇ\æš‚ ęŨŽä˙ƒ€YĖ˙18a3ÅWlČp¸áāûËxØČ)Ģü5 škœ âąŊr”đųŠyrÍëŦŽú‘YOŦm'éaņm‡ÍŊÁĀV9ąūNúŦ}syžW={ቝĨ ˜’Î'lÐŅÂ,=WũT?ę"î Ú'Ž(˛ÍĖķĩ%ĶD_ؖŲ"›×ĀÚ }͡3ˇ`ûÃŦŨāggŒÍĄ6uņ 0/@û!ųēģŽ`Ĩ‰Ĩ Í;@7š2ÕmŋÕ_ŒĪŸŠčÖ^+:N U5&ē†Z\m:˜ŧîŨSŲō\¤Š6īiū3ą F—3č÷ cîXB&nÍō’y 6I*įĻcŦĩŦĒ ¸UēʡŖŽ5ŊˆšyÕcj؅ˆxö 0Q÷Ŋl¨sBDÜ2ŒgîĖ4^r+üdŒūjDœÅCn.0Ŗeh-rÚŽ ŋˆ°:Â$•˙ȈČĪŽ‘%ūũ ‡•žųüôÜ˙Õ+É|ŽËÉVG‚ĸnÔ') Ę<šģĄdK|˛ÔķūĸõAuážĨ˟LĮĸa›†3ÄĶáĻũHcŖDŖÕÆl-ČdQ…/ŠčE3ŪJ¨ČĢbä‘EדĪ(÷įSúŲOĩ,”ĩ7ˇ“DŪŽŋ¤&ØWģ×<čãH,Ä_ų˜Ņ oĩim(čz› „’ ;Ŗ+ø„ĸĶŲ´S‚ךZüÃĻs%zéUÍ'Ŗh°•ÄÁËžaÆYëžļfŠę™ŧy yŪM{Ę?›ģ&W‚?ĸ–aЗˇ …¯<Č9ūõˆĮú0ņ‘ėŦ<ī8­'ū/ŠąÕ† O9ŗ jŽU÷a˙I-ž,PäŽ oŦķ—ãnėšGĀq_ęén1ΐé istĄŅĢn9Κŋ´fž¸T0;zņ´b žJᎠ"[ô/gWÖô×Ļ&—}Ö4”üPQeëk ˇ‘ørjŅZ„9Æĩ<ā–*´ų~øģ× _še7M7ŋwOļXöÛŋįÚũĨđN[šayŋ:"š8ĩYÃMĶsũŊ@-ÄąŽj=Û÷PÛ6Ũā3)U—šrĩߊƴũ–GvKM}æŪŋûj°i+õ§u× MÛ*>AžæGGk4¤GØmf=fBŋČŧjė>ĮĖVĮĢŗÍęT€…ĀĻ@ X* >:­9xdĀ•Åœ5ø,‚ˇ,ĄNĻK ¯‘×G¤üäõl@ĪĮϝ V­đY]mPŪ­'E6vM`× â˛¯Ŗ€Ûo'5ŖÁΊ–Ŋܖ&LČđ9{ßčėQ×+7]ßGÉÔŨPŸJ¨t“æüˇ&įĨTäŗk2Ëĩ˜Įv!qo_ËŽŊ>Qj<°sžpžyx¸^ņ@ÖīŲM8û‡9EųQįį‚Yšt^—ĸŠo¯+ö ŗŒw_ãȜļkĮT˜‡Í:vÍF\WøeâøąXÎSHyãöĪTAãļ!,âMĖ!M.TqN-íŠ8ÁMGfžF—jÂɡ•ü×+:?sĪtčĸãĮOÚÚYĮÖÖT'Ëę~sŸzĻZŠ÷û}ÕÆ=ŗ˛Á{Oú8b\ŽtvĀę”*2Hn÷2Žīņŧ̞ÕÛhMØvRŧŲ<ŦķuđĨūGīc)ŋø \<0"Vŋ\aä"Ÿ$Gnk„ÔĨG—#ûķ|~ķj’˙(9ÂųôįvÉ7ä5ĨƒÄEg?Q,îgŗ*Ų=QUËōé‹Pōŗh°–¤÷$s Ī2•vDždvŠ.„éܡŦį˙~ļ‚ũŪfYÚIÍ)tŨŨZöxëKKĶΰ‚Ĩxõâ[ŦŸĶÍ}H¸î>ełŨ0s ´)ÖķÍ }Ōjŧzxj¨_îĐX„ĒáŠĩ'ÉåNŖĄc[Ųã<;—đ”R.Ã7>?d G´¤išBr3Ę˟šÄ͍•Ë#GAČJĸr"ŖĨ”ß%¸BPm‡˙ԙPŧúbāŽzËdÖk¤Ū#&­–ofäŧax˜1Á¯é ĪģBĘ}/Š÷AĘë ´\ŗ˜ĄiæXĐxˆL΋g‘ŅrŽoĩ\œį~oŗ˜đ¨,]}„ Äkt> ĐĶÍIęaę;|?"‘KT€^’ž ͤ9 ›p+ķž„MA€aĒÃ~č—} ģdŔšėÆŽĘĸuØģå1‘,RXÕČ'=Lφ—uXĪs" ƒQƒ Jú€”r`Ū@-ĨĄ&"@¯- Æļr˜<Ļ)i( ˇaÂdzYĀ1†˙ PK ĒĨPÜbBžįįbarcode-upc-300.pngUT ¯Éą^¯Éą^ux čč‰PNG  IHDRÍ™ZÃ1PgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IIDATxœíŋ#ÉuĮģÕÆ`l‡Đle }™' §mĀČ œRƒÁ6‰6Р͟ā?Á˙€kšÁ8ģPiC\‚ępŊ]~UũĢ~ŧĒng!Yē›Ŋå~öíį}ßĢ"ąâDâK=xôŽ~GŋŖßŅīčwô;úOũ×C˙øåĐoņøŖGķümŅ´õ›ĄyNāŸå[ĄĪB¤đ¯ī>Ë'ßKôņG-Eā éž.E+ŋĒŖžŧQUķjt“ķ<ŠŠ&‚gōÍ>Yč#‚ÎįĐ<įYe<ÜöUzņ,IĢ?‹:tŨĨ% áË(zhrø:‹ëûô4‹ÎŅĄéßučãay„æčēGŗû$zH#–“C“&l“ŌB)<~„2YFĘ}€?Då¤ŪĨ2×Gž%õ>=°<96+ÂîŗzZ5›Ō]¯"šCÅB$tCŽ\ĄKžMé>ĢYQ› a™šāy×=ē”­ä:f=šŨ“c“ĘAŅĒjžąų6fēžĐ  AJK`ĐË&=˛~įmF÷9…čĐwšč†¨Á‚‚ŨAŠ;4”ÚĄ[…æ w:å›hË’*ôxėã @Ÿ|Yą\Ą“VšĻŅŨ„Ū~ÍĩąôdD˙üWöK›ÂQĐŖëMz=>…Î:4ĪēœĐ TĄAČaך†J×ëŲđe˛…BĮ ũĪŲ€æ†Ču&ĸĐ)aÛl~sØ3‰ŧ‰–;¤Uč¤ÎģĒ[‰—čcĻ÷äđ@".˙ H\Ά¯CtčŪ5Ģ1…e$]į°ųRøÍęh>דčē8ŠúĨŖ“b!×°X*ŋTûēQh č3č´CßĮĸIáŽčĸ jĐåRŨ čZî8 `mÆūꡋÖeĒ´<;4‘č•DËĨĒŽ‚Ÿthō×Åá{yÁ¯sš6ËPŗ¨)d°ÃĮ]ËßrūUz†ŸƒNÎŪîm´čŅ<ëŅ%O /KûģÂ}:‡DŅō hy{4\ŋ_fü‚ö•蚨{¨ŧÎx‡×Ąy6÷üÃüSpôüŖŽō/…Ļ_͖?˙Ztûŗ/†žâņ˙ũC+ä|~;ôg¸×ņĨR¯’“{Æ^ƒ†×‰UUŠ&kS¸5ščãĢПŋũxØæMLSA4Κ=V].G˙øXš)KœŦäŨ­ēM­W=Ą—ģ>ՂÂ=€Žĸģ­‰†ÃĪD¯D§Œ UoíĒß}ךNßĀuNŨĒ+´ę+ÂOõ É­áS衍=ēžĒ…ˆW¸ž(4Ņ™æÚQčķ•Ž5ô:÷Ą¯âMîúš6^\×!!§ĢrÍt4‰TB-^)„LB֙DÃzĒL!âBė6fũæKđĨz šĸhÛ5]ŋ-‚áSBö^ו Úhj%Ä@ˇ˙žŗŽúą8äK]:YāîĖuÆI¯>2Lˆ \Ņ 7âÁĒ–īšĨ4f_JS ­WŊõĄÛŪĩÎIu9ąæ>{ô IgÂ7ē6ÛØ";Ÿ_^ÚûüÉ'$ĩ֓“k|dxMr~âąÍŋ Š´A‡6&Ĩ5č"Ú\<ņgąņWmˇŅFĢ‘qŅ\ĸ+…öētĨĄ[č⒄đįöoÅ#˙Gą '„k›¸UcĶČŖv—?6?Y ×Ö4zŅVÕŅöcúØüĸÍZík.]šŽ— ÖyäģESím#žŪŽĶę‘ī#Ôum…o@—8ÚtũƒXeįĮf{ÂGeÕ}ƒŽīëUūüØ|JÖŪ\Bbŧ8úW€æ…X!te&Ä#A?qD÷Ž'!Ĩ› ŊRč6Œ6\§•sėbB^:ôKģ ´qrŨĸŽņ\3™§ÖlķĘS5\k ąŅØ4˛6KĢį Û}ŠĐ\ŽđU¤:ĪīkåBŪÂŨŗ1ąŅč)‡Œ% ~ĸOûÚ ß’„´‘ šzķîŋ„ƒŽ§i æ? įņ÷üBá[˜ßcD“ŠcÕvŽ}#3ƒ6Ģn‡ĒŅ6žÍm!†ëh¨:ž]ĶņØ5N™ YOģúŋ‹âīųđvíژÆjŅ)#~÷ÂüT ŖˇŪD EÛšŽ‚šūüųŸę.z‚RĘ ‰>ēčÚŧâč;älģžÚČvÉ!oÖ M‹(‘Uoq4Ž8ž6ÚUĶ Í4*Û!X÷ZÕĐ[…î„ hoÕÁiԄ\ƒn‡Ē×{=ŲāB˜ƒģîĐŖÜĩ¯jSˆ[5™b­']Čl;ô.T5ĒŽgŖm šæîą‹l>ŊPšŅu~\VuXˆžž&!3č ëĄęěë{ÚRĄ;ÄĸĐe(|lrņĄ„XŽ×3šFÛx KĐzÕ§Šø‘GëŪX\†î\—ŖëÜ‹ŪŒ ņŖ+4×X=áķĸĶŲ6FĒwzŋ`Đ}Ž'!“ëģĸvĒVŽņ6R  މB÷mĖ5!5>õ^|¸ę’'u_5QBŽ.zĘõÂAw„cĐ'!š+$0čĩ6čžrô%d3æzÖĩ§åTõ(d¯įzvdJCHŠ/U:„¯F\3_Žé¸TK)Û!G$×H#ŖÎÆupĐ­‘Ųčh:wėęŽO#ē˛G„,jc9L‡>ĒŋÎÁōķ$¤vnOlÉ ;Ž•bn>Ī™]Ēsšļ×ĶLø¨3č 6¯qíÍuŌíb ņđičĖFOGÁzc`˛Åy™ÂFëĶŅ'ĶõÚ=s‰F]ΌŒģ¯ĮͧĒÖG›Fļ]N—2L㈞ڈēö'¤ŌGFß|jdNÚČ ›/°žœSÆh#œ2_O3!Ģ™lĶ !ē롍ž›ę‚‚?ĀöæČĖ\qĖ‚ŖÍcwņíIÛ|nøXŊ`‡táĶŅ™•k3!KvHeĖ> j|Н\īf„ ŽŅcwtßQ`\ˍ“ã˛ ŸכpŽ}BĒiĐą}Ŋ_:2Õ8J#:ēĀÖÖF{ЍĨZ›ÉĩÛFfî,āzƒßCl×:]˜ks_k›ī„lžũ€Î]qÖČR5… áë]ī !Öžv֓GTaŽ—L_u'„Ī g^Ë8 Ņ0Ž]Ũ—ël\oœđĄ;dŋ !TÛ| rĸB ]Uį}ÕYįĸšv‚9!özŌ^’öާŒzĐԙFl‡X 9á qĒÎŽ'_øj=|éÂ÷CŒ\WžĒk+!t‚ĸK,|į“hÍũš^ō2 E§ģ˜ščbÎõŲ@ë)s×Ķ<ĒŽ°Kp0!žĨŠēļųâāą;ûâŽė_H#GÁxÅņ`¨ëu#v`Ww|wŗ¯ ˜q,°Sfož–™}ÁŨųüGÁėģ85vYHËÂÉxĢ…bûú´āĮ˜üD÷]ĖNKnOö=DâÍõxYđĩąšÛ|ᑑBöÖž.Ü×2u­ÖS=ēÎė+8Ā2Ÿ_ŽKué ã§Ėҏ˜uč;ä(^'_íZžcĻNt¯ÚZO­žÚ?2éĩg#¸ŋÚÅnĒ˄čwžĶ°ž!Ĩ{ÅŠ|h=|ЁN\ģŽģĒĪįņŠƒ­§Ú _ŠUmģFŽ8v ôNß×Ē‹ŌF%„KtĢ\īēëdĄcwģŅÛØēUĶadęžj…>Iô×ũ‰.Ģ6ēß!z¸Īģ–čBkˇ'…NL´áúԍ Rĩ _n'¤4ĐĸGĶ!|õ>ŋå:AÂ'ŅŽËĐÆ:Ķ^œē6ÚBLô:UčNˆtÍŊŽÛNČūʑq] !zķΡ2ŅÂÛÆÎ5ĶÂįäš-EëĶČĮđąíĢZ[OksUBÚ%š.ą\ŸP!Ô:†\×ō”AÂW.‚¸îŅĢš6néúl)×ĸņ6ZŽ™BŸ/ËF&äZĄ§đ‰žęđ ĮVÕÁ6ž\Ÿ—ļ1€ĻcՍ%dv‡Ŧ´„\CՍ1Į“ãz‹ \û7ߨF1„/ˆv…¤ūđ•vøtôŽGGzÕĢŲ6r­ęŠ§kĢv…ėÆ\›Ž‘SÆFwUßy…ėF!ázfãhŋkėb]72ú§ņlĸ÷v“Ĩmėrƒî&äC0!!Hg˛ÍôyĒēlD„ čDUmíë“ᙹqĐu“Íŗņj!.z×UÍķcc$ä¤ éŅëĖEīÃ#Ķ 1ЖŽęl˛•čtžjb !ĩæĪ„īė’MhY5ŗ…¨ŋ$1'$ÆŅ'÷‡īÎ[õˆ.CmTU¯sj Sc=-p­Ŗ‰åšmR‡Ã‡ k{=aá[$ÄAŸ„mLgĐã ÃČĐ }ÔÛ8¸ļr=$D™­úÔŖģ\ŸĖđí-ô˜>|™§€Ļ]5tNcwÕ{–a×'Û5ÕrŨ‡ot=ĸ÷K\;hgמiô Ųė į˜ë킄0MHŒ ŅĻ1sGfQŽOvûiÔ\gŽëļ‘y֓•ŠÚ4NmœIˆB¯ĸB jj´Qåēė\ī-רČlķMB4üÄ>Ëuē(×z™Ä¨Úwôm|đ ĪRHžd¨ÚF[BH0|Ôt­ĐûĄB%„. Ÿrįo#I]´?×DĄ3ÕFYõUu>šĻēs}™„PŊÖ\gÚČ8UOčĒ:™rH!ÔqŊVč;@÷:čxBē šî…ÔCˇĄĒ5!NB:ôsŨĄaô âVŊFfŽę“)dD‹ ZXh7|šŗC |g•@—…F„Č˙gĨjãÖėBēđ•ŽëĸCĢtŅ2īēßŲ×F6 ]!ä€LŖÕÆŨ€–Žm!z‰™ëÃÃUhÛ5“Ž-šndF4¸Ū!BÜA] åZĄsĶõzt}§Ą‘„„rŨ h´Ą\#UÛŽ;!|ÂīúĒ'¤t]ĮÍfŦēÚČG!ÚBôđihØ÷šfkē^´ž&´)$7sŊ6]ÃSæ]¯ė„āmėvˆDo'4.$v§ß!ĖtÍBŽ÷EŖ„d¸ąę:6ęčKpdLôŅu‡G&āzŽj˛Á„ Ž‘Ē÷šDOމ›Ž)’ëđ Ë6ŪyĒFÂ7;2˛ęėF›mœÂw7'dtí "ÄŨ|ē5ڈ ņ ˇ\į  ãvtŌŖkkdęDląAĖāzBī;ô‹üö2úGfĩŪ\_‚á›\ö-žÃ>ĩ§5—ęŦ띒´ųŗ(4ĖŠvŅM¸Zĩ‹ÁĐ­†Ž†\ĻqįA#˙­ÁFfnЗĄÛ€l_Ģđ]‹vÃw‚ĩ‘ŧMՈÔõĢ…nĐ՛qė˛Į_Ã3;ôŨkŌWŠĻuŸ&Œ‘AĐÁ\ˇų7(ŌD_!DäA‚^,dų#čúļGPČ ųCņÖÜũeīčץ3ų˙tŋį× č–°(­sFDŦžˇČÍh–7™āB~ë“Ї”&mt+Z~ۑīEB™ō¯Ž ęŽųŨĩnHņ,"(ŗCĶÆ24%šķIPŲģ b“=Uœˇ7Ŗa“œåG,ŋˆZ~÷—3/Ä}ūôČüč6ôųE4   søq#äD§üū Ųmh&ŅōŖhÅ/ÛŧÉæTŨüĀ››ĐOŧG3ņĄGķ6ëŅæĮĨž-žÛâYHô_âÛō’GŽĐ7…¯‚ļ=ː\ÚģĒü—DŧˆCZ:ŊũØĄĪ"nö-äú—q‡f˛jäÛä]ƒnē‚×5ûæu ?<¤§HĸŗËíč6mΛŧG?LĢ:’BÄmh%„gĸ~áŌËSS<ĩų™ūÅ UÕō;ēéčįf+…v;îcœB>ē’¯pš—7B—đß?F)ÄЏ-ŊÍ_nA?)לŒV:f˛Ŋ-!jĄc|÷ĶmĄ„¤€~brŠžZŽf^đßægņĖ ¨ļ<_øC.â›Ļq@WLđßf•¸°vé0r úų"ŅQr>.?šEŒîØ-āČŧ}9)t\Į‚ˆf1 ëŦģ,ČoŌ÷z4¨ŽŨF~0tCāEûu™ķĄå7•ũžū†_÷g_‚n˙õv¤ũ–wô;úũŽ~GŋŖ˙„Đø;™ėč7yüaĐŋųrč[tņ}ëãũŽ~GŋŖoB˙/%$@ŽJC`tIMEØ Č į tEXtSoftwareESP Ghostscript 815.02 ƔÅ_IENDŽB`‚PK ĒĨPļđōŊk k ¤barcode-128-300.pngUT¯Éą^ux ččPK ĒĨP¨Æ¸Ž Ž ¤¸ barcode-2of5-300.pngUT¯Éą^ux ččPK ĒĨPa wa¤”barcode-39-300.pngUT¯Éą^ux ččPK ĒĨP#U—e e ¤ø"barcode-93-300.pngUT¯Éą^ux ččPK ĒĨP€ŒĨĸq q ¤Š,barcode-codabar-300.pngUT¯Éą^ux ččPK ĒĨP`ČëBkk¤k8barcode-digits.pngUT¯Éą^ux ččPKĒĨPü\*  ¤";barcode-i2of5-300.pngUT¯Éą^ux ččPK…ĒĨPÕLK–M¤{Dbarcodetest1.jpgUTyĘą^ux ččPK…ĒĨPN1ØßH€ ¤Ûbarcodetest2.jpgUTyĘą^ux ččPK ĒĨPÜbBžįᤁm¯barcode-upc-300.pngUT¯Éą^ux ččPK xĄÄleptonica-1.86.0/prog/fuzzing/baseline_fuzzer.cc000066400000000000000000000010701506303110300217130ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1 = pixDeskewLocal(pixs_payload, 10, 0, 0, 0.0, 0.0, 0.0); pixDestroy(&pix1); PTA *pta; PIXA *pixadb = pixaCreate(6); NUMA *na = pixFindBaselines(pixs_payload, &pta, pixadb); numaDestroy(&na); ptaDestroy(&pta); pixaDestroy(&pixadb); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/bilateral_fuzzer.cc000066400000000000000000000011501506303110300220670ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *return_pix1, *pix_copy; pix_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixBilateral(pix_copy, 5.0, 10.0, 10, 1); pixDestroy(&pix_copy); pixDestroy(&return_pix1); pix_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixBlockBilateralExact(pixs_payload, 10.0, 1.0); pixDestroy(&pix_copy); pixDestroy(&return_pix1); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/bilinear_fuzzer.cc000066400000000000000000000015661506303110300217300ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *return_pix1, *pix_copy; PTA *ptas, *ptad; ptas = ptaCreate(0); ptad = ptaCreate(0); pix_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixBilinearPta(pix_copy, ptad, ptas, L_BRING_IN_WHITE); pixDestroy(&pix_copy); pixDestroy(&return_pix1); ptaDestroy(&ptas); ptaDestroy(&ptad); pix1 = pixRead("../test8.jpg"); ptas = ptaCreate(0); ptad = ptaCreate(0); pix_copy = pixCopy(NULL, pixs_payload); return_pix1 = pixBilinearPtaWithAlpha(pix_copy, ptad, ptas, pix1, 0.5, 2); pixDestroy(&pix_copy); pixDestroy(&pix1); pixDestroy(&return_pix1); ptaDestroy(&ptas); ptaDestroy(&ptad); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/binarize_fuzzer.cc000066400000000000000000000027301506303110300217400ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *pix2, *return_pix, *pix_copy1; l_int32 l_i; pix1 = pixRead("../test8.jpg"); pix_copy1 = pixCopy(NULL, pixs_payload); return_pix = pixMaskedThreshOnBackgroundNorm(pix_copy1, pix1, 100, 100, 10, 10, 10, 10, 0.1, &l_i); pixDestroy(&pix1); pixDestroy(&pix_copy1); pixDestroy(&return_pix); pix1 = pixRead("../test8.jpg"); pix_copy1 = pixCopy(NULL, pixs_payload); return_pix = pixOtsuThreshOnBackgroundNorm(pix_copy1, pix1, 100, 100, 10, 10, 130, 30, 30, 0.1, &l_i); pixDestroy(&pix1); pixDestroy(&pix_copy1); pixDestroy(&return_pix); pix_copy1 = pixCopy(NULL, pixs_payload); pixSauvolaBinarizeTiled(pix_copy1, 8, 0.34, 1, 1, NULL, &pix1); pixDestroy(&pix1); pixDestroy(&pix_copy1); pix1 = pixRead("../test8.jpg"); pix_copy1 = pixCopy(NULL, pixs_payload); pixThresholdByConnComp(pix_copy1, pix1, 10, 10, 10, 5.5, 5.5, &l_i, &pix2, 1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix_copy1); pix_copy1 = pixCopy(NULL, pixs_payload); NUMA *na1; l_int32 ival; pixThresholdByHisto(pix_copy1, 2, 0, 0, &ival, &pix1, &na1, &pix2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix_copy1); numaDestroy(&na1); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/blend_fuzzer.cc000066400000000000000000000054531506303110300212260ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *pix2, *return_pix, *pix_copy; for(int i=0; i<10; i++) { pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); return_pix = pixBlend(pix_copy, pix1, i, i, i); pixDestroy(&pix_copy); pixDestroy(&pix1); pixDestroy(&return_pix); pix_copy = pixCopy(NULL, pixs_payload); return_pix = pixBlend(pix_copy, pix_copy, i, i, i); pixDestroy(&pix_copy); pixDestroy(&return_pix); } pix_copy = pixCopy(NULL, pixs_payload); return_pix = pixAddAlphaToBlend(pix_copy, 1.2, 1); pixDestroy(&pix_copy); pixDestroy(&return_pix); pix1 = pixRead("../test8.jpg"); BOX *box1 = boxCreate(150, 130, 1500, 355); pix_copy = pixCopy(NULL, pixs_payload); pixBlendBackgroundToColor(pix_copy, pix1, box1, 123, 1.0, 5, 12); pixDestroy(&pix1); boxDestroy(&box1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); pixBlendCmap(pix_copy, pix1, 2, 3, 4); pixDestroy(&pix1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); pixBlendColorByChannel(pix_copy, pix_copy, pix1, 200, 200, 0.7, 0.8, 0.9, 1, 5); pixDestroy(&pix1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); pixBlendGrayAdapt(pix_copy, pix_copy, pix1, 2, 3, 0.8, 1); pixDestroy(&pix1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); pixBlendGrayInverse(pix_copy, pix_copy, pix1, 1, 2, 0.7); pixDestroy(&pix1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); pixBlendHardLight(pix_copy, pix_copy, pix1, 1, 2, 0.8); pixDestroy(&pix1); pixDestroy(&pix_copy); pix1 = pixRead("../test8.jpg"); pix_copy = pixCopy(NULL, pixs_payload); return_pix = pixFadeWithGray(pix_copy, pix1, 1.0, L_BLEND_TO_WHITE); pixDestroy(&pix1); pixDestroy(&pix_copy); pixDestroy(&return_pix); pix_copy = pixCopy(NULL, pixs_payload); pixLinearEdgeFade(pix_copy, L_FROM_LEFT, L_BLEND_TO_WHITE, 1.0, 0.8); pixDestroy(&pix_copy); pix_copy = pixCopy(NULL, pixs_payload); pixMultiplyByColor(pix_copy, pix_copy, NULL, 2); pixDestroy(&pix_copy); pix_copy = pixCopy(NULL, pixs_payload); return_pix = pixSetAlphaOverWhite(pix_copy); pixDestroy(&pix_copy); pixDestroy(&return_pix); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/boxfunc3_fuzzer.cc000066400000000000000000000046231506303110300216670ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); BOXA *boxa_payload, *boxa1; boxa_payload = boxaReadMem(data, size); if(boxa_payload == NULL) return 0; PIX *pixc, *pixd, *pix, *pixs; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; BOXAA *baa; static const l_int32 WIDTH = 800; //boxaaDisplay() pix1 = pixRead("../test8.jpg"); if(pix1!=NULL) { baa = boxaSort2d(boxa_payload, NULL, 6, 6, 5); pix2 = boxaaDisplay(pix1, baa, 3, 1, 0xff000000, 0x00ff0000, 0, 0); boxaaDestroy(&baa); pixDestroy(&pix1); pixDestroy(&pix2); } //pixBlendBoxaRandom(); pixc = pixRead("../test8.jpg"); if(pixc!=NULL) { pixd = pixBlendBoxaRandom(pixc, boxa_payload, 0.4); pixDestroy(&pixc); pixDestroy(&pixd); } //pixDrawBoxa(); pixc = pixRead("../test8.jpg"); if(pixc!=NULL) { pixd = pixConvertTo1(pixc, 128); pix1 = pixConvertTo8(pixd, FALSE); pix2 = pixDrawBoxa(pix1, boxa_payload, 7, 0x40a0c000); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixc); pixDestroy(&pixd); } //pixMaskConnComp(); pix1 = pixRead("../test8.jpg"); if(pix1!=NULL) { boxa1 = boxaReadMem(data, size); if(boxa1==NULL) { pixDestroy(&pix1); }else{ pix2 = pixScaleToSize(pix1, WIDTH, 0); pix3 = pixConvertTo1(pix2, 100); pix4 = pixExpandBinaryPower2(pix3, 2); pix5 = pixGenerateHalftoneMask(pix4, NULL, NULL, NULL); pix6 = pixMorphSequence(pix5, "c20.1 + c1.20", 0); pix7 = pixMaskConnComp(pix6, 8, &boxa1); boxaDestroy(&boxa1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); } } //pixPaintBoxa(); pix = pixRead("../test8.jpg"); if(pix!=NULL) { boxa1 = boxaReadMem(data, size); if(boxa1==NULL) { pixDestroy(&pix); }else{ pix1 = pixPaintBoxa(pix, boxa1, 0x60e0a000); pixDestroy(&pix); pixDestroy(&pix1); boxaDestroy(&boxa1); }; } //pixPaintBoxaRandom(); pix = pixRead("../test8.jpg"); if(pix!=NULL) { boxa1 = boxaReadMem(data, size); if(boxa1==NULL) { pixDestroy(&pix); }else{ pixs = pixConvertTo1(pix, 128); pix1 = pixPaintBoxaRandom(pixs, boxa1); pixDestroy(&pix); pixDestroy(&pixs); pixDestroy(&pix1); boxaDestroy(&boxa1); } } boxaDestroy(&boxa_payload); return 0; } leptonica-1.86.0/prog/fuzzing/boxfunc4_fuzzer.cc000066400000000000000000000016371506303110300216720ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); BOXA *boxa_payload, *boxa1; boxa_payload = boxaReadMem(data, size); if(boxa_payload == NULL) return 0; PIX *pix1; l_float32 fract; l_int32 minx, miny, maxx, maxy, changed; pix1 = boxaDisplayTiled(boxa_payload, NULL, 0, -1, 1500, 2, 1.0, 0, 3, 2); pixDestroy(&pix1); boxaGetCoverage(boxa_payload, 0, 0, 0, &fract); boxaLocationRange(boxa_payload, &minx, &miny, &maxx, &maxy); boxa1 = boxaPermutePseudorandom(boxa_payload); boxaDestroy(&boxa1); boxaPermuteRandom(boxa_payload, boxa_payload); boxa1 = boxaSelectByWHRatio(boxa_payload, 1, L_SELECT_IF_LT, &changed); boxaDestroy(&boxa1); boxa1 = boxaSelectRange(boxa_payload, 0, -1, L_COPY); boxaDestroy(&boxa1); boxaDestroy(&boxa_payload); return 0; } leptonica-1.86.0/prog/fuzzing/boxfunc5_fuzzer.cc000066400000000000000000000021461506303110300216670ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); BOXA *boxa_payload, *boxa1; boxa_payload = boxaReadMem(data, size); if(boxa_payload == NULL) return 0; l_float32 fvarp, fvarm, devw, devh; l_float32 del_evenodd, rms_even, rms_odd, rms_all; l_int32 isame; boxa1 = boxaReconcileAllByMedian(boxa_payload, L_ADJUST_LEFT_AND_RIGHT, L_ADJUST_TOP_AND_BOT, 50, 0, NULL); boxaDestroy(&boxa1); boxa1 = boxaReconcileSidesByMedian(boxa_payload, L_ADJUST_LEFT, 80, 40, NULL); boxaDestroy(&boxa1); boxa1 = boxaReconcilePairWidth(boxa_payload, 2, L_ADJUST_CHOOSE_MIN, 0.5, NULL); boxaDestroy(&boxa1); boxaSizeConsistency(boxa_payload, L_CHECK_HEIGHT, 0.0, 0.0, &fvarp, &fvarm, &isame); boxaSizeVariation(boxa_payload, L_SELECT_WIDTH, &del_evenodd, &rms_even, &rms_odd, &rms_all); boxa1 = boxaSmoothSequenceMedian(boxa_payload, 10, L_SUB_ON_LOC_DIFF, 80, 20, 1); boxaDestroy(&boxa1); boxaDestroy(&boxa_payload); return 0; } leptonica-1.86.0/prog/fuzzing/boxfunc_fuzzer.cc000066400000000000000000000012041506303110300215740ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); BOXA *boxa1, *boxa2; boxa1 = boxaReadMem(data, size); if(boxa1==NULL) return 0; boxa2 = boxaReconcileAllByMedian(boxa1, L_ADJUST_LEFT_AND_RIGHT, L_ADJUST_TOP_AND_BOT, 50, 0, NULL); if(boxa2!=NULL) boxaDestroy(&boxa2); boxa2 = boxaReconcileAllByMedian(boxa1, L_ADJUST_SKIP, L_ADJUST_TOP_AND_BOT, 50, 0, NULL); if(boxa2!=NULL) boxaDestroy(&boxa2); boxaDestroy(&boxa1); return 0; } leptonica-1.86.0/prog/fuzzing/ccbord_fuzzer.cc000066400000000000000000000010401506303110300213620ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs, *pixc; CCBORDA *ccba; pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; ccba = pixGetAllCCBorders(pixs); ccbaStepChainsToPixCoords(ccba, CCB_GLOBAL_COORDS); ccbaGenerateSPGlobalLocs(ccba, CCB_SAVE_TURNING_PTS); pixc = ccbaDisplayImage2(ccba); pixDestroy(&pixs); pixDestroy(&pixc); ccbaDestroy(&ccba); return 0; } leptonica-1.86.0/prog/fuzzing/ccthin_fuzzer.cc000066400000000000000000000012611506303110300214030ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { PIXA *pixa, *return_pixa; PIX *pixs; leptSetStdNullHandler(); pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; for(int i=0; i<10; i++) { pixa = pixaReadMem(data, size); return_pixa = pixaThinConnected(pixa, L_THIN_FG, i, i); pixaDestroy(&pixa); pixaDestroy(&return_pixa); pixa = pixaReadMem(data, size); return_pixa = pixaThinConnected(pixa, L_THIN_BG, i, i); pixaDestroy(&pixa); pixaDestroy(&return_pixa); } pixaDestroy(&return_pixa); pixDestroy(&pixs); return 0; }leptonica-1.86.0/prog/fuzzing/checkerboard_fuzzer.cc000066400000000000000000000010551506303110300225500ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix1, *pix_copy; PIXA *pixa1; PTA *pta1; pixa1 = pixaCreate(0); pix_copy = pixCopy(NULL, pixs_payload); pixFindCheckerboardCorners(pix_copy, 15, 3, 2, &pix1, &pta1, pixa1); pixDestroy(&pix_copy); pixaDestroy(&pixa1); ptaDestroy(&pta1); pixDestroy(&pix1); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/classapp_fuzzer.cc000066400000000000000000000010621506303110300217400ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; BOX *box1 = boxCreate(150, 130, 1500, 355); BOXA *boxa1; BOXAA *boxaa1; PIX *pix_copy = pixCopy(NULL, pixs_payload); pixFindWordAndCharacterBoxes(pix_copy, box1, 120, &boxa1, &boxaa1, NULL); boxDestroy(&box1); boxaDestroy(&boxa1); boxaaDestroy(&boxaa1); pixDestroy(&pix_copy); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/colorfill_fuzzer.cc000066400000000000000000000006011506303110300221150ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; L_COLORFILL *cf = l_colorfillCreate(pixs_payload, 1, 1); l_colorfillDestroy(&cf); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/colorquant_fuzzer.cc000066400000000000000000000045551506303110300223330ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { BOX *box; PIX *pixs; PIX *pix1, *pix2, *pix3, *pix4; PIX *pix5, *pix52, *pix53, *pix54; PIX *pix6, *pix7, *pix8, *pix9; PIX *pix10, *pix11, *pix12; PIX *return_pix; PIXCMAP *cmap; leptSetStdNullHandler(); pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; pix1 = pixThresholdTo4bpp(pixs, 6, 1); box = boxCreate(120, 30, 200, 200); pixColorGray(pix1, box, L_PAINT_DARK, 220, 0, 0, 255); boxDestroy(&box); pix2 = pixScale(pix1, 1.5, 1.5); cmap = pixGetColormap(pix1); pix3 = pixOctcubeQuantFromCmap(pix2, cmap, 4, 3, L_EUCLIDEAN_DISTANCE); pix4 = pixConvertTo32(pix3); pix5 = pixMedianCutQuant(pix4, 0); pix52 = pixMedianCutQuant(pix4, 1); pix53 = pixMedianCutQuant(pixs, 0); pix54 = pixMedianCutQuant(pixs, 1); pix6 = pixFewColorsMedianCutQuantMixed(pix4, 30, 30, 100, 0, 0, 0); pix7 = pixDeskew(pixs, 0); pixWriteImpliedFormat("/tmp/fuzzfile1", pix7, 0, 0); pix8 = pixOctreeQuantByPopulation(pixs, 0, 0); pix9 = pixFewColorsOctcubeQuantMixed(pix4, 3, 20, 244, 20, 0.05, 15); pix10 = pixColorSegment(pixs, 50, 6, 6, 6, 0); for(int i=128; i<257; i++){ pix11 = pixOctreeColorQuant(pixs, i, 0); pixDestroy(&pix11); pix11 = pixOctreeColorQuant(pixs, i, 1); pixDestroy(&pix11); } pix12 = pixFixedOctcubeQuant256(pixs, 0); pixDestroy(&pix12); pix12 = pixFixedOctcubeQuant256(pixs, 1); pixDestroy(&pix12); for(int i1=0; i1<10; i1++){ for(int i2=0; i2<10; i2++){ return_pix = pixQuantFromCmap(pixs, pixGetColormap(pixs), i1, i2, L_MANHATTAN_DISTANCE); pixDestroy(&return_pix); return_pix = pixQuantFromCmap(pixs, pixGetColormap(pixs), i1, i2, L_EUCLIDEAN_DISTANCE); pixDestroy(&return_pix); } } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix52); pixDestroy(&pix53); pixDestroy(&pix54); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/fuzzing/compare_fuzzer.cc000066400000000000000000000023211506303110300215570ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); l_float32 fract; l_int32 psame, comptype; PIX *pixs1, *pixs2, *pixs3, *pixs4, *pixs5, *pixs6, *pixs7, *pixs8; PIX *pixd1, *pixd2; pixs1 = pixReadMemSpix(data, size); if(pixs1==NULL) return 0; pixs2 = pixCopy(NULL, pixs1); if(pixs2==NULL) { pixDestroy(&pixs1); return 0; } pixs3 = pixConvertTo8(pixs1, 0); pixs4 = pixConvertTo8(pixs2, 0); pixGetPerceptualDiff(pixs1, pixs2, 1, 3, 20, &fract, &pixs5, &pixs6); pixGetPerceptualDiff(pixs3, pixs4, 1, 3, 20, &fract, &pixs7, &pixs8); pixEqualWithAlpha(pixs1, pixs2, 1, &psame); pixEqualWithAlpha(pixs3, pixs4, 1, &psame); pixd1 = NULL; pixCompareBinary(pixs1, pixs2, L_COMPARE_XOR, &fract, &pixd1); pixDestroy(&pixd1); pixd2 = NULL; pixCompareBinary(pixs1, pixs2, L_COMPARE_SUBTRACT, &fract, &pixd2); pixDestroy(&pixd2); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixs3); pixDestroy(&pixs4); pixDestroy(&pixs5); pixDestroy(&pixs6); pixDestroy(&pixs7); pixDestroy(&pixs8); return 0; } leptonica-1.86.0/prog/fuzzing/dewarp_fuzzer.cc000066400000000000000000000012101506303110300214070ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; PIX *pixs, *pixd; L_DEWARPA *dewa1; PIXAC *pixac; SARRAY *sa; leptSetStdNullHandler(); pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; // Don't use debug, because it requires writing to /tmp dewarpSinglePage(pixs, 0, 1, 1, 0, &pixd, NULL, 0); pixac = pixacompReadMem(data, size); dewa1 = dewarpaCreateFromPixacomp(pixac, 1, 0, 10, -1); dewarpaDestroy(&dewa1); pixacompDestroy(&pixac); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/fuzzing/edge_fuzzer.cc000066400000000000000000000006621506303110300210430ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; l_float32 l_f1; l_float32 l_f2; l_float32 l_f3; pixMeasureEdgeSmoothness(pixs_payload, 1, 1, 1, &l_f1, &l_f2, &l_f3, NULL); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/enhance_fuzzer.cc000066400000000000000000000064501506303110300215410ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if (size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if (pixs_payload == NULL) return 0; PIX *pix_pointer_payload, *return_pix, *pix2; L_KERNEL *kel; NUMA *na1, *na2, *na3; pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixContrastTRCMasked(NULL, pix_pointer_payload, NULL, 0.5); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixDarkenGray(NULL, pix_pointer_payload, 220, 10); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixEqualizeTRC(NULL, pix_pointer_payload, 0.5, 10); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixGammaTRCMasked(NULL, pix_pointer_payload, NULL, 1.0, 100, 175); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixGammaTRCWithAlpha(NULL, pix_pointer_payload, 0.5, 1.0, 100); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixHalfEdgeByBandpass(pix_pointer_payload, 2, 2, 4, 4); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); l_float32 sat; pix_pointer_payload = pixCopy(NULL, pixs_payload); pixMeasureSaturation(pix_pointer_payload, 1, &sat); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixModifyBrightness(NULL, pix_pointer_payload, 0.5); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixModifyHue(NULL, pix_pointer_payload, 0.01 + 0.05 * 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixModifySaturation(NULL, pix_pointer_payload, -0.9 + 0.1 * 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixMosaicColorShiftRGB(pix_pointer_payload, -0.1, 0.0, 0.0, 0.0999, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixMultConstantColor(pix_pointer_payload, 0.7, 0.4, 1.3); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); kel = kernelCreate(3, 3); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixMultMatrixColor( pix_pointer_payload, kel); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); kernelDestroy(&kel); na1 = numaGammaTRC(1.0, 0, 255); na2 = numaGammaTRC(1.0, 0, 255); na3 = numaGammaTRC(1.0, 0, 255); pix_pointer_payload = pixCopy(NULL, pixs_payload); pix2 = pixMakeSymmetricMask(10, 10, 0.5, 0.5, L_USE_INNER); pixTRCMapGeneral(pix_pointer_payload, pix2, na1, na2, na3); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pixDestroy(&pix_pointer_payload); pixDestroy(&pix2); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/fhmtgen_fuzzer.cc000066400000000000000000000013441506303110300215650ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; l_int32 i, nsels; char *selname; SEL *sel; SELA *sela; PIX *pix_pointer_payload, *return_pix; sela = selaAddHitMiss(NULL); nsels = selaGetCount(sela); pix_pointer_payload = pixCopy(NULL, pixs_payload); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); return_pix = pixHMTDwa_1(NULL, pix_pointer_payload, selname); pixDestroy(&return_pix); } pixDestroy(&pix_pointer_payload); pixDestroy(&pixs_payload); selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/fuzzing/finditalic_fuzzer.cc000066400000000000000000000005571506303110300222500ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; BOXA *boxa1; pixItalicWords(pixs_payload, NULL, NULL, &boxa1, 1); pixDestroy(&pixs_payload); boxaDestroy(&boxa1); return 0; } leptonica-1.86.0/prog/fuzzing/flipdetect_fuzzer.cc000066400000000000000000000017131506303110300222600ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; l_float32 minupconf, minratio, conf1, upconf1, leftconf1; PIX *pix_pointer_payload, *return_pix; pix_pointer_payload = pixCopy(NULL, pixs_payload); pixMirrorDetect(pix_pointer_payload, &conf1, 0, 1); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); minupconf = 0.0; minratio = 0.0; return_pix = pixOrientCorrect(pix_pointer_payload, minupconf, minratio, NULL, NULL, NULL, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixOrientDetect(pix_pointer_payload, &upconf1, &leftconf1, 0, 0); pixDestroy(&pix_pointer_payload); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/fpix2_fuzzer.cc000066400000000000000000000062561506303110300211740ustar00rootroot00000000000000#include "leptfuzz.h" //static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *tmp_pixs = pixReadMemSpix(data, size); if(tmp_pixs == NULL) return 0; DPIX *dpix_payload = pixConvertToDPix(tmp_pixs, 1); if(dpix_payload == NULL) { pixDestroy(&tmp_pixs); return 0; } FPIX *fpix_payload = dpixConvertToFPix(dpix_payload); if(fpix_payload == NULL) { pixDestroy(&tmp_pixs); dpixDestroy(&dpix_payload); return 0; } DPIX *dpix_copy1 = dpixCopy(dpix_payload); dpixAddMultConstant(dpix_copy1, 1.0, 1.2); dpixDestroy(&dpix_copy1); DPIX *dpix_copy2 = dpixCopy(dpix_payload); FPIX *fpixs1 = dpixConvertToFPix(dpix_copy2); fpixDestroy(&fpixs1); dpixDestroy(&dpix_copy2); DPIX *dpix_copy3 = dpixCopy(dpix_payload); PIX *pix1 = dpixConvertToPix(dpix_copy3, 8, L_CLIP_TO_ZERO, 0); pixDestroy(&pix1); dpixDestroy(&dpix_copy3); l_float64 l_f1; l_int32 l_i1; l_int32 l_i2; DPIX *dpix_copy4 = dpixCopy(dpix_payload); dpixGetMax(dpix_copy4, &l_f1, &l_i1, &l_i2); dpixDestroy(&dpix_copy4); l_float64 l_f2; l_int32 l_i3; l_int32 l_i4; DPIX *dpix_copy5 = dpixCopy(dpix_payload); dpixGetMin(dpix_copy5, &l_f2, &l_i3, &l_i4); dpixDestroy(&dpix_copy5); DPIX *dpix1 = dpixCreate(300, 300); DPIX *dpix2 = dpixCreate(300, 300); DPIX *dpix_copy6 = dpixCopy(dpix_payload); dpixLinearCombination(dpix_copy6, dpix_copy6, dpix2, 1.1, 1.2); dpixDestroy(&dpix1); dpixDestroy(&dpix2); dpixDestroy(&dpix_copy6); DPIX *dpix_copy7 = dpixCopy(dpix_payload); DPIX *dpix3 = dpixScaleByInteger(dpix_copy7, 1); dpixDestroy(&dpix3); dpixDestroy(&dpix_copy7); DPIX *dpix_copy8 = dpixCopy(dpix_payload); dpixSetAllArbitrary(dpix_copy8, 1.1); dpixDestroy(&dpix_copy8); FPIX *fpix_copy1 = fpixCopy(fpix_payload); FPIX *fpix2 = fpixAddContinuedBorder(fpix_copy1, 1, 1, 1, 1); fpixDestroy(&fpix_copy1); fpixDestroy(&fpix2); PTA *pta1 = ptaCreate(0); PTA *pta2 = ptaCreate(0); FPIX *fpix_copy92 = fpixCopy(fpix_payload); FPIX *fpix3 = fpixAffinePta(fpix_copy92, pta1, pta2, 1, 0); fpixDestroy(&fpix3); fpixDestroy(&fpix_copy92); ptaDestroy(&pta1); ptaDestroy(&pta2); FPIX *fpix_copy2 = fpixCopy(fpix_payload); DPIX *dpix_return1 = fpixConvertToDPix(fpix_copy2); fpixDestroy(&fpix_copy2); dpixDestroy(&dpix_return1); FPIX *fpix5 = fpixCreate(300, 300); FPIX *fpix_copy3 = fpixCopy(fpix_payload); fpixLinearCombination(fpix_copy3, fpix_copy3, fpix5, 1.1, 1.1); fpixDestroy(&fpix_copy3); fpixDestroy(&fpix5); PTA *ptas, *ptad; ptas = ptaCreate(0); ptad = ptaCreate(0); FPIX *fpix_copy4 = fpixCopy(fpix_payload); FPIX *fpix_return2 = fpixProjectivePta(fpix_copy4, ptas, ptad, 200, 0.0); fpixDestroy(&fpix_return2); fpixDestroy(&fpix_copy4); ptaDestroy(&ptas); ptaDestroy(&ptad); pixDestroy(&tmp_pixs); dpixDestroy(&dpix_payload); fpixDestroy(&fpix_payload); return 0; } leptonica-1.86.0/prog/fuzzing/general_corpus.zip000066400000000000000000003032221506303110300217550ustar00rootroot00000000000000PKčĸ–PrøVP6LQItiff.tifUT Ŗ™ ^Ŗ™ ^ux ččŧ:ÛZÛH“÷<…~Ύķ_L$ël)Øuœ‚m‚oØ–Ô˛dtŠ$ÛØWû4û {ŋ˛O˛UŨ’‘ $3ßĪÁjĩĒĢĒĢēŽōŪū|úĮŅđptŲ‚2Žö>áEˆH2ŲoҤu°'ŸJ<Ā0Ļ%܀ä-÷[ŗŌ-…ÉŖĶhŋå%…˜åÔ§Ĩ´„Fû­ ,ŗâcģ= Ë`æHüB @RHn˙ 2'%—+$ŗ‚ænš”4)“ōˇaR˙6LÚ_ĮĈn”Î< ’˜ŦŌ„,~ZāȃÆdB‹Ũ\ĩüÔŨ<-Š4'a˛ß"Iš,ãtV´„˜z!™(j !,žäašÜo1U<>ų#˙öŊ? įywęõžö:åP˙ŧč+YzO:rp~<Š×OĶoVg’—ųØŧI.¯ŦÁãjqs}íĖÙũmvuO‡ÖęÔž_ĖĮ7Ųßoņ å2ĸE@iųÎ#ŲæÃļŸ“˜.ŌüąŨô‰cPĸÉÔ">qeËķEV4ĮŅ)•%ˇ€mļQ´ÜXū‚8ž %žpÉŲí‘w{wūĮe˛tÛĶĮdĻüqUܯJm0iß\^č÷įšßöĸēŠ>ŧ|T¨lj_ᧃëĀvČ7ĶMŠ:ûŽu˙ē8ęSÕą=ĶT=G3;ĒbȞgĻ)ÛžåÛžjŌ†(*a4>ØQaŽ$Ųîˇæ!]diŦT‡jŋĩŊ2Ø÷č!p›GÖ׉¯(ąMKV‰,kĒFũŽ i†'[¤ãú*%:uäŸ 6ÁčŌ\ĖČ2JIs?tyžߍ#79ÜđĖ<‹Ų;ũŧ†Ö|ŦF29Ŋ /âÁÜšļËûoW)š;^Ũ'Ņl|gŦ.´Ay÷Tœ…‹ĐoŸŧģەwlgãCĀķxc\Mo˝ĶããĢQĒ nnO†ŖTŦî>Ü_ŨôÃŅŖ1XžgÉ8s–Ŗûäîk8 Īôᨡėú+€Yözō`Õ×Ŗ›đâųõ2G5üņŨU2žFžK—á9€įšŲc<ŽŋŽķėpú_1×ųi1i†#Oŗ ŅeC÷dU“ĮSŦŽíëēj{61Üüš„j˛Ģz–mâ\Ow:Ô×;Ė]ī ö^¤BUzõH—N H,ȋÜÚ÷šŠœ‚CAn—Št–C‚äĻ}“&^›Ä cĨžˆļĶB4ŖũGŧįŽˆ>IĶIDEtôâœæĄ_å1 ĻŋŒŒIaōbNČäâK÷öîģå8t°HÆã/JŽ|ûē,žiOŗüâĻ‘lŧũxÜ.{Į §ŗĐ¨,ΆŖ¨Œ­ķÂ}Tëō6 Ždú´Pũĸû+čOžƗôææqp˜’î8é,.b)+—ËEf÷ĩĸ7MĘía|wéĸ_ibOŨ2–āķ 1H‹fŽëĻĘ?Ík/eŦ4Û:š ąév§2tpâîP÷ ũ:ŧOĨ$$j;yē€đ˙Āpũ€–Ƨ@pâ„lf…0Œ íˇĻ…ˆ €íãõ"[›[Õ!t4Ã~sU”BĨÕXØõHü%ÍŨ՛+R…DQeßV Ë0dŨpuŲôTJŅ1w:ļŦš2øg ,Ũ6:˛¯Zž)+ŽL+,\73ģ&AŌäôĸôÅk˙•˛RŸ”˛´Æį'J6ø„ÅģËÎcžfĸAûĻ+j× ˛‰j3.>k V`ŠĀQ!›gMåČ.WčA ĶT AG÷-ĶđãŲ(^Cš>@uGgÃÁæęËjņŲāzÔŊ¸¨ NN{‡Û#Ā8?\vO€€éĶŪá—Ļ!ĄË!Ŋ įû­'nĩiŠMāēŲŅUS7§úŠ-wėŽéęIJÁũ į;hZËw_-æw”āīã8„ ž7J$RbŦá%DÄ\=–ÉUŲE]ŦDųĄL†ã#_ģĢečX‡âE^=IÅ0Ūęīü˜U īÛÆŽ—$wF%4ü͸ÄjØwE4ļvÛil°ķ.4ĪŠÛ&#Zę˛ũ>V8’EúsŊ‡ˇf3ÚĀš+W~sgџæÍ ‡DÅOŖIh‰mׇ¸áƒ[’ŒÛÉ.ŠÔÁúš„uąOŒm‚ôëv™8˸Ž{Ŗ¯%ņ[&SeybQ’˛x%c$Y¸ŅČōp^ŖÎÛlíKkŦQĶ‘5ÔÚŦ…ú>†ĒõE=`í×-ŪOöĶė˙4q”ĮVS4ÆdÔĐÛo U5ĩĶ:Ø{Ą‘$ôiąî'ĩë iZ°]āûaõ>üĒčæÔ”!˜CĨŪ6áˆC'õ–õÆ#–Ša"ĐdŽI•7cŠ”ÁÎÁ‹ vÎ)ŋG[¨ŌŋĘžŧp^ŖbfË-8‚øk@ĒHŽé"‡¸FsĄZ Iĩ•ßā€įĨ˜úb%†ĩN2Qœ МQĄ„ĘI\ "M^*~ęÎ $Q<†™PŊūā&0ŧVŸÚdMĩČHRãŋĖĶ l°Āž#p{Æ8]īÆŸ _fīKDtē(:$_īj‹Â.ÄĖeĸ,DÔ/Eš%°GÕû™‚üoļ>ĩΚíęŽē­/{{k˛Õ eāģ"}Ęī˛ĨM€đ Y2 Ŗ‚‰‰„ <<â3‚Ņ'Ļ!>‚IĘnŗÆ€´&E.ļÎwÜT>§'‚‚bÁÃv… `BŒuÁ@ļ€y‹äUg\9Ų -éŌÁk’‡DŒˆƒfqšÆĪĨPBųãBŦ}Ŧ)|&)ŠPÖûųĀÜÍG8ô)ߘfÍTŠMd8øÕUÄh#rv„šHĸpsĄįak< á$ ß´}NŸ `dA1áæx"ēßR$¨Ŋø‹7ˏ MĒDāāSA[֑˜ĪPÂØH=ėsANn ōĄ&pßj`šl¨ Ē¤Ú‚)š`HzGčH†-é’ WC”~Ņ`ÜØĸ$+ĸdŠėĒHē-Ē0’´\ Mä&€Ų:€ĀUÅI‹ßÃ2Ø L¨0ĄVŽĮĢ%SÃĄ H˛…,*°ÖH‡8ouāøÕÖq5C äĻŠĒ HŌæM˛ Üj[nTƅĖā%ÍD*ŪÂŧĘD%™@Hä1*Șđ*p‚Ÿ° TŦ‡ Ē€`cÂō×WI×á!ü‚†%‰ H ¸— áÄČāƒéŠm v­I÷b¸P™¤ =ŠÃtĒā\ P˜ m.L ‹ûP$h´l€.ģ<Ōū û”8ĸ.é(8ÃŲī =ž+t$ķÉÁķ, €ÍōŅĢÆËė?ĄĩÕ:ŗ˛L“Ļ+8e īÎ|‚?ųÚÖ†ŅŽ âDâā<œT ö’=’xÔĢ“¸gŸ 6ZœĒˇ^ŗ× EīZlÛ¤úēM*Ö/ؤ:SûÎâĄ,Øh‘0ä†)˛‘¨p•SuųCfœx~…ß!k \ @Ģ´XĄÄķŖsũ¯ ėŗá{—TÄŲÁƒÍŠÛô_- ¸ĻŪuÄc‘‡Tw šÅÉ:AŽÚŒēl:ÍqĄē†á÷,ÚÄ9„9ø€YMˆKūÁbßQ#đaįļŌõķk°YĨ+ü[œLA#2øŋÆŗ&Ė&É bË&]‡0ē…›fZU¸Xzš9U'ÕíÎüi:‹1šÁČĮã/DF'uŌ§u,„X‡{AÁ°)¯9‰4PāųÁ'áŗYŠ`X”MÄÛšˇķ_0\ģŒˆĸđĪÖ ĸxĀÆŸÚ˜ŋ‘œ84OqvĀž´SövPÚÆŸđs;įĸņQ€ÔßđØØû:˘ˆEî~ŽÖĨäÆÃĐkÔģĪķĩ^°˜b)öËZ°ĻÍ͒]ËÖėą4ú <ÄuiVŠëīūŨŒŽE ŋÆT)0‰žt}JŲVkų @؁™a’ÍJąˆ…ĶģΚ1ÕÜų¤>\;NžĮ7~ܧŗJŪĨč@­Oie hŧ`R`O@´å9$c&ģœušŲLŽŲŖ*6ā‘h5؟ØGSy?¤‘×°•į‰Í#T— ÍIûL`g´ÉŅFúY|h7Ÿņ2î{sĒz×לbŊŠ €÷6ø˙õß/Č­ÕĪ/ũ•…čÂ\’…%äˇ+ėČøūÆc´1“ÆYDKĘŊÄ J_ģũĐäkūh׆j\Å jÔ(TRÃvûaG8øĩOhyÍSo°N)ގ$qĐoã*˜ÔÚ?ûŪîĒŖâôkoāĩũŽÜū1sÁV>Į‡“š|’ŽåÃ8=Vޝ–åbv|—S—ØōI|´8<ęœ?Ų˛eŽŸL‡:Ũû´øÜwŸßģģEî×ÄgWųCią5ë¯+ũ`ģ]/Âp;Š_+ņ¯5Ņ!Âx"šûvw„éĩō€øR^,€nĀ›F$jžŲŒ1ÔoZūūųŊPÅ@#.Aæ÷ėԈS@^QR!…ЏŌEūë*u‡Øšž¤)Í].˙ė}š­]sw7p›` %ŨBļˇ÷) Ÿ1ŧtžŦK˛Ãõĸs÷F6ÍS, žcę%CuPåĄ˜×ÄD(‰Bä‡üYTÖÚHRpN  Čø7ãKƒv…WÎãnF֏lã÷1aƒjŨ#¨Ķ‹†ĒkDu1ĐĀ]Oņ$.ČĄPᙚĘģI›^ŗØŲĒ6°l¨ ķÕÂÖ[T^˛ÁĄ*bĪo„žķ“ĻwlÎŋ]Ęp ‚žUˇčPŗhˇV ĖYĩĄjs%PnMŧQĢŊyŖŽbKh(ÖLĐ ( F=5įj„Å8ū_hĀÔ).” XŦ+ ŸĘ­ÂĘƒŨâŌ@‘]åÃ&+øH>Uæj Îi€9yunöíîēã—ô•å)~ųņm•Õ€[ZģäĶ›*[OnęËø+úRPávĢ"ČDAé"ģņ[x'čėN q)Šv åŪ\ŅW}E@¨Da…žŒõίī9ôķ-*ĢüJĄ÷KߨĻ~ ī nKÜ×ģōũjîíŪÛû…mH¨}%-5ÉRđC뒍Ŋ5ģęĩh‚ įYÃF땙ø{­ëiŗ`]EÂE*kĄéŠ I:ļƒ%BÄ’p%Ŗ4Š˙ĒÁ*rėĒŲRG”4"Ųļ‰˙ŒēŒ];eÎęzāT–:ŽČĢtQ—°‹§(l˙0ŞÔsB=_Uõ|¨(BõŒ1jØb=W¯yĨÖ¯ëû*ėWZįßnæöUU7~_kģ ũ"J ęcYÅú˜ŠÖ˙ŗw%Ëq#ÍųΧ¨āļØXŨhūõk¨…Ú¨‘ĸ¤š0Đ t7D ŅĐ\ä˜ĢO;Â/`|÷Å~!?Á•Y ǰ‘MQķ˞æŒH,…Z˛Ē˛2ŗ2ŋ*­¯Š+|Ò rKK-đUšŒU…\)ĀNOčō‡6ņ Õp¨üĩ˜Āæ•z#L_ TRj7F“–°–tRę¤Ī *Ų^‘å%}……íCƒICúŠKc?˜ ‰mģqŗŖ%ąeáÔ§ŌzŲJ'D”ķ('åļŦ"ũŧ¨ŊŦėXŦ[“YœŽũ¸­"⯐N‰?Á~ĶįėaGņu3_)oE j`{krÆČ\ąøīũ÷?ü—ši­{Ûsŋà ąįĨ2ĢSî$Y^2ÅĒŠ nß`¸đÁœG°ŖŲ[Åđ§Kø]H]°MöŊFōårZ]¤bo—Ŧ’#¯ŧÚxIãíŊÔäByŠ(áĩ-ĪĢ´ėGU=—/4†VîaR‘“ą@E°-ˇāš„dA.%Uŗ.QKø×P%4‹Ļ˜ˇĨbŖTl”ŠRąQ*6JÅFŠØ(ĨbŖTÜTŠøŊ%X6:6ėF‚ŨH° v#Án$؍ģ‘`7ėF‚Ŋ­ËŪÜŌĒÍeØfo ŲukģÛ`ˆV–÷xŒ–Á–íŅĻœŅŧeoÉ{K^¨1R ˆœ%ŋPŒãDų‘”áŠ`´BBôõ”¯Å€ayŅ>lĸYƒcđ tfwŒÆZ‘?$•ŖuŠå9mM™_°7 /Ί˙U(Ė($fO$ų-#2+PÆĢčRBb"žm]Ę)aˆˇė>}ąX—đJ(s…ú˜ē𜴨gx¤Ļ‘aĶĘÉ`viõO!*ąš§HOÉQ (-Ÿ•ěō)v {ēUYë€9pcÂķōļQĖ_“]UA´˜•WŊ€*F1 ÔÁ(GpQæ`Ŧßõ8˛F¤Z_Åt~ĨČĘÍ)ōy´ÄH׉ŸĶY%¯NE4‰|ûŧž˛eŧGÅ=ëͧėŽOŦŽU°žúĩÍ:gũžjõTąbGץ؃͊í˜ĨPbr1æ/ >‘&%uc ÷V=ˆô(8Đ0y­dÆ[2Ēø[ĸ]dD¤ŽŠkB–€vĩ×čŊÍáVÅí$*ŽN‹ôLņLwVĶ÷ũ§f?_˜Ÿ~I’÷ī~}ŧúyöËÅĶĪīŧ™[?ŊēĖūrxqųÚ? âh|üæøėųģų/<ûã‡{¯ßæŸŪIQ,ˎ“×ÃÃĪč™.Š#bYÍōÕ8‰ĘpnuŨؐR†ŠŒF#X “új+ģ€ÕŠĐ.P"„Ą?xhöŌ`’aģÄ^^ūY ųn"†l šS-‚¸fĸļE(Ęą‰ÖV´Éčdxā¸ķū‰÷‰cĐ_Š4OœƒÁ‰ķÚ&ÖÜ;wæŌ,)Ė”l¸æH ¨ÅŋÖšeí8€ŧãŒvlƒXŨ‘õŦL;&ÍÙ÷…-SXFOŧša÷[Lg„qâKmADŠÉŌŖ‹É ãW[‚ +z—"Ûˇą)ų_gÜC-*âX”?É  é_ÅČ^ #čK`MX'´ÕŪÖ ’kœ˙vņN=Po{Oģ•ÜžˇnF¨šCfûč6'׍fQ*!°VCŦĖákrü'*ĀĪũķ,R˛ZĐĨ) W…„eĖš´š‚Jģ\ĻYC´`‘Ļq-—T¸//üÃíãV´Å"DđŒælkĘĖâP­ūœmCÃD¤+6č”âāé, vKäCŪgZnŊqXøm Ÿķ˛Ō‰K?Ŗ %ņŖq~V9ŠÂwtOkÚ?ņMöGÄ´vŋqZ[}Ę6έ“Nž˜ōo:áŧÉÎphĐ`áˇaÂY€ ûhģwvl‡ ˆ ˙*S4—3s *œâ?>@%¸(ŦĪŖyĀŦ d„ëX”‰CԟĀ>ØÜüūļÜ #Đîáŋf\ƒr"uˤĻ×f˜e -Q<|lāąEÄ}æÜŦũ€š7ņ>Ôš¸Š4Y„JĐc›#ĶōNéÔÚ>Ļ–ņj-„o]*@Æ8žģîÉčĀ<ÎŨāÎ.eĖĩ>ĢØ\ŗt¤tfRšPgŊbdeaįœę¨ËUŋŇÚ0Ÿ¤0Âx‹ōCļįoa@l×raO?/ÚUKŲ)Uķ˙Ąö¨DŨXŋđž€÷kŠ{MüúÄ öFÛ{āëÎzÕ(Õ´ŧØŠãōtŌž‘›[Ķ"Ífū"úĘķ ģEũˆ“å°ōXREđ V+ļÁR­} °•KˇÂfd2ĢĒ9ķŨÚF‘āXß#R‡ž´¯KŽ&´nƒQ5™§iŪ„„ø‘0“Â`X‰íP$ā– AĮž:MŅēĪîo(ģ×y4Ę?-ŒzkM^ ˛ˇ¯Āš<Ā••ŧtĸgmnO‰<Á'/íÂrsĘĶ÷dúSŒ7į(l×­ę:qBŗl28̀ø‹€$`ÎŲęX-Ā*„Ö.ąX šCŒĮ(™Ņ‹Ē„>*Í'ôFąĢĐģģ°žl‘v;8ę51Ģ•ūŨHį.[šöû.887Ë3—— :%k‡mËÉ*ËRĸĒ—´v­Ķ_ķ;Cüe>T¸…õ,+XVÆôW2ĻUà ZÂ>"Y†b,ë¸yū÷Q…Ũ=bæ}Ø~ĻʒzGé]débÖ¤=KoY(Ĩ:ĻŪ.ĸ2žuy˛D*@M DČ@u01 ]­Šž ­ĸYæa]ØtgŠJ„?)Z8ÆŪ§|{#ČÆŊhīCKQ#ļ4ŒzÁX#L­ŋÁ”rÚˇh0ŗ Cmü€ŲÆč%¯tú ÕĨ(„ŗwrƒÃ>ī5đĖJEÄ[uļ1V~o~v&×=ĮIģ\0Ëܲí}m͚ĻU( ĸ‚´=âsu’0]ōŠ1–˙ūoŋŦŌâΏ JvŋËū 1ā;ø{~Ÿũá¸âüžO~Ę1ųKÄ?æŸąÁŽôôɋãĶ÷GOßŦõņû#­='ÁMųKvÜ]ŗS:&ĩ\ŋʖeđÛoušáÁˇ‡ŖņÔr,k:˛<Ī ú–;BĘĻÁ ? B/œŒÜiāÛN84íĀēæĐųŖĀ‚ÁÄ.-úĒȤ.ä՗t˛Æs˜œĮhŗąMÅnVqÚĐíŦš}M œÃŪÚÖqŪžø—įīöhyŲ Ŗ4Ē^zɄjž¸8ŗ- Æ*.2_ļoœˆ5Î+T1%vš¤:hk´¸•šú6Úa#†eŽü?ƒŨžŠa˜ôw< č<Ë–$ūĸy€Â¨Æž;1v<‡@Į Īrdƒe 4­Á á9÷ē09}ŧ÷,Đų|}ͧUôÎ šļhŖ…æŧ˜Ã+0ņ ÕfÄĘÄ÷Öč?c°œøÜ–߸;ö>4ŽŽ„>’)õ5q‰ųʛC–û#Vāˆ8böÁŌEĮ—z':˛ˆc¸Äɍ>ā•" Ēk84ÄLĒE‹Ą}:÷°>}VôF;Jp:Zw=*>Rõ[…{܂á5_^먊%V™Væ9`@ Xšé@cœa͡ ŧŅ„˛V–XiIéåŌ„l>†ũĀr¯ēoŌß |tõ9ĸmbM¨Zeģ;@•EUÍ@Ņ ‚ȏĶYUųäOKyÍ_D Û°¤ōņ”.ŋĒč?CČOÂ!›}ē­GšČ };Ŧb]Á.}|+r ƒ\”Ôˇ—ŋyOû”Ĩ”ŲË;1éVģā/&Wé~~~69Z ã{Į˗WĮ™™ūúåüž“ŧœŊŨˇŌđËŗ7ųę }ûäëŲĪ_“/ī.^åŗ7ßŋœûŸ/ĸŲÅQpybí_0Ã{?įo?_hģāú ‡næ"†điåŲl 'KÃŅtpžÉY åi†ÕdS*¯n: 0^f°ÖMŅqš‡DŒ:ļoøžšPqų{Z›‡™ėŀĢĖĀ•C~Ŋũą ę;üõš.16åøt}'”—ģqųf‹¯s æĄKĘ YY<ŧ„ž•ĪæŽÚ}h§^dMã4*ŧn{ī)ôŸāRs§}Mhô(TnˇhuLâä0~¨ōFŲĒ6SvdHc4™%¨jųĨđú¨’ĄeĄ@|Q?Ŗ,‡Ž'Ęģ*6ƒ;F)A7X ÃŽJÅJ– YtF™ô’ލhĮĄGŲŖäŠhT9"{ŨŊ)Y|.ķŒIĮ5WŠŊčošÜ4Įš&Tí}4ėŌĨ†čãyÂĒ@ũš^ˇąKĒô›*XŒĄūti˜ ĢīęƒUÖØāuj°ÍŨ<ŗÉ*§ė’guË<)o;äŖéķō´Qž6ĘĶ˙åIN×NĐ´0ˇ§€K‡<ĪČYxEg˙.ų —ЏxˍÁ*Rpņ—2š›ÁøLCzÎĀęõÅuŖĄÍpŲâ§ĩXü`(ķƒUú&MhËĸü^IũˆįT`ieTęoË!ņ/ãp1Öč™MФn¨Ŧ˜ę1*•ŠėŠø3JŖŠČÉĘŦ?‚r¤94Ŗë<÷Žue‰–\‰đ=v!6¸ą_ÚúKlA¯ĻĶč”ųœK•ö{&‘iēÛP-&ņŠĒéĶ˟Á îĻ™\ÔēIԓ‚J5×6)WŲ˛s%bcá€-˜ūFY͎UK´0ˇ8ÎųŧCäU›PAģn{… K°ÁW"€ëŖrŪWĖ÷Øã :UũDiĒā•šîR §ß5l“Kvz‡M–Ÿö{ŗäŠn ē‹É´ÎÆ ņü¨Q’æķtwéĮÉi‘…áŽ["˛@Í1.(O+ĪDĸļoA !7ŋÚˇŧ–pTÛ4‚ô”n€[Ģĩ•iŽã‘wōJnŽ+íemK’R܌%"4GT8A¨m2ĨķzėOΌuâQŲy˜eoĩˆ VĻgM*?áI}˙ķ¯˙øŸzŧĖ"ÔŲRęŨČ=ÁoÖbm!š×JLŸ‹"`Ų ĩŧ$yGTׇ"—~†gĶuĐøí‚ŽÃ‰pNēE‹Û$ųžsėO!Āė‚ö×i1ŗ$M¨dmæAĨ¸ĘĪ×9åÖ*S€ ûäŌ–ÕWS6Ļ9.Wéc,ũXÄæ•<0T8žÍØ$îI‹s„[eČmîLB0Pæax.=?uOĻXéŪßäÅÃî•c+ēûC˛Œ “hæšęŽ­ŽNDĩÆYîŽ&ĘųĘ Ü,4UĻĩŸĒ™Žž‘\O%>$RKßQīĀ:+=˜Ŧ„_7øKĩ{énīŊ Ã%ÃŊãb׊˛Œ˜aádPĖÎĀ6ĐgEyV5|š<ŗī9'ûŊņ§YŧØīŋzüņä]°đžžéšī/žŽ-3yõåč§ÅÅäĶëÜé={>Ķ‚›Ä܅ôŠ/ ōlÆHõ 8+Ãĸ”v[Q#ųŊJBôžås5UĨ‚Sô=u\+ŗŖ¤ĩļÉÂÜM¯ :+ĸ$¤’J˛,ˇP\očzŽ3r‡ÃÁ7eyš‡0gŠœS70‡s2Ŧū`: œÅtü°?´§}Ûķ­Đq‰^žē°¯â×o>.,ķŪo˙]đüÃÉۓ'žũĖ>ŗÃ ˙žģøøĘtŪŲøCR˜¯_ŧIŖhvx8ũŲûžķņã×đr˙ã„Ģ= ē„^¯ŋŖãÅa ĻÕ7Gļēl4#U6{r0īﯕ>Č"ĩîĐĄ| vßeą’3søĢĶÎ[I9d #PŲܛ¤5€ }x|ŧpúĶûããˇ‡Z1ų'œ”?‚5¨Õ mß4­I04Ļ5‡ÁÄvÂIh{ĄīŲn8Đ׎Âņx8r}ĶĩmsŽŦá˙˛÷ŦÍM#[2uŋlņm˙Š­šēģŒŠ[O¸“Ũ$p€I Ā|ĄdYNLü²’_Ī9Ũ-ĩ^N`f ØnI­îVĢûŧ~×î;5–¸Čt+Ųīb4‰-ÄbÃ=Âgų/äŸlFą8z*ŋUĩ jÖR+pz‘–ãī(¯ŗoč÷nŲžÁv¸ŽÜŌéŨđ :íī8€Õ]@H_™ÉMß ŦČ5ũË8Į0 (:ąŖŗzKŲ?É53ÄÂްmtGßi—Ō}2F7P 6˜éĘä*(šÁ„:´†§LŦrÅŌm{AôH$tk0\m[$tŽ+tīÅĩbœã΀ŖV˙’IŲˌíÛŠLžĢãá…qŽÆŦĶx†ĔđÚ ũ_ž–ÎēVb†ĨõĸŦâ9kđV‰š˛FSōŸĀ÷žøWĀō5Šh22Vö& 9tĀ˙ˆĢô&PŠŗŸ`Šō w–ÅëĘĒ|%\ęËĸÅß(ČûO8õNĩÁЎcBˆųŠų^ +gëoDFũXß`ŊģĒOiæarq˙ũŋEß Ą)Á,ũ }~xčŗ/ęFЇ\ĐeTÁ ܌PōŊፁą—Ž-ĶąbŦž´X -ŖŪËnRzUĨiÜjÜŲN ÂüACØ>€,ŅÍå(ˆĀ *Öl_}E1 LũËÆŠļßãbÅ„kÃüZq“ĄÉv;ˇ<€’ÃŧÖ5Ō†ČÕv`ŠĩZÕ2ĻrV̘+ír…Éb":ŋçbīđåPŅą8’ņC͊8ܸldž›r¨*fí~ŽRÖÄ Ģ°6|_VđAi÷:ŒÛ%(øē `pßŗ6„P×bŅŦ ąī^wųe<Ī÷NžėœžĪ.ŪÎãËWgÉÎūŸOƒūņųÉؘüyčüņ9{ßûœŊŲ¸<ķôYĮųôÅėŸŧ?šøcûm˙ģĀëŖ Z˙Í`ĩíuyäØ~䚎ã1ßOŌnėqz˜-Ꚁr›{=Îl;đü°ë†ũĀī…^Š–ŲׁÕׁÔG?áôÚpúč¯Ĩ[tÉ➁|§ú_īÚR5Z īáÆŗ;…÷/_œÛŸžŋxší'[[#ŋsM^|đ:īΜeäúįãÎgöp–žė‡áa2u:'/—ī§ÃYÅŠ˙–ķåĶŪį'moŧŲö5LÜeĻz”Š_ĪģŪ'įÜÂîKxūé0; š 'N†€Ã‰œČøp¨ŧÉcÃÉ—žŋE《rĮ†ųYzņû€JŅ#Ōgcz•fäąD}|D˙TÄ´bņ|.Rō@)ÛÅŅ<>‘Ĩî,ÃČŖiœœaHVŖŅ3`Ĩ×@ƒ€UEgƒũļJEŪVká_Ā`ŧ,ôČö(ũđŠPq†Tæ—#€JĮ6Â!Öö:ž¨Čč.ŸšpŠb¤”cĐä‹PsæØD'ŗ˛<˙_@LÆZ=eõú gŠ>Ū,T÷Ë=Üæ2§…žzš–2õĩî„ōh_˃,[¨•H;_–1[Ye]nˆûVō0˛J[h§ëŦSj‚RĘĄÁȡ[¯˜ø‹'ÕX6đxčųT€OfĒ#SžŲ‚cЗHTÆ)OŨuU=üŊ„Ɲē„ĩ]Ņæe#F”ū‰;SL,—# ZöüĨwĘșÍđŅY =ËjČĩĒujÜ ûôvĒÚ­’BtŅ'‚uĮ¯Õģzß°|ߔvΝĄ‡Ę6™ĒU6˜J´%ũ–w×-îĨébˆn:¨ßoŲ5TcåĻ5n؁å2ą S†ÖũĻ&‚jc~@››hŽ"’ūš‰+˞ũČr}Ü^ÎŅüÎaB8ļÛ×āH‘ģ§NbąĀ˛™å†hpâGĮô|@jrËexāGK:ĢŅßȉ´Qîä“ÉŦˆŨ•{ā…¯ŦhĐdÆdmü ßķ›–VžųÄō"“’”†¤ĩ§įæˆw›râU†eŌÜøYY…ŋƀ rmW W3ėböÚß­cü;AųšķfCníšį^ˇA¸[iʝ´Vɋ+á™Ēķ5TĀ”ōœ;ėÄč"bč I‹2 v@Õ°ÕB‹14iqC†4jÁî´}?ļ`'Đvĩ1‘'ëļ§Pžnåאz¸ ›ßáŦ¸ĢZŽS“5Wpų–˜ÎûEĐĄ|…–đā­‰,&i0ŋ ÖøBŒx˜Îæ4n8H. ˛~Ė’xL‰ųÍ(ŽšŨ˛ÅÕŌpUéæx1;•ųĨŋŲ*˛ 6 LK!Ŋ đĶÅŦē~xžÕ~b"&XŒ´wŌ°Ž à Z2ö(ē.O<'‰yŊÄŽ3øpÖëŲ‰×Đ’.ü*X͇B‘q+ÁŪč(™ Ŗą(zælrŽA.‹˜’•”^EģÕŦ*ZQ„Ö(Yąæī¯ĸLĐūĻæųgˆ„õ 2Ve9bÚĐ%Y–į$”u%CÉŌ:8/]R6ÍįtˆĪ‘ÉĖ@öDé“›Ûtål‰ÍûĩĶûĪ-Ēkqŗ„m›ŽĘĶ^Ë8—G#,%œ+ÅnR7Ņ,ā™ĸhbŽŊŨÁR‰Ķöo\ú°)˛ĒáŨ˙ –NR2ŋŖ=Û¯ņhúXž–‘žo˙ŽËúFœGĻoŗļHĩҐ\ąäÚ ›v6‰ŪŸ%SzČAf¨‹:>o‡`xIL˛nÄãÁČTXNĘ;8[CP‚•o D&/wËáĻÅ™Đ’ ōŽQևr_ôZôā*žqŅ —Ŗŋ% QUā]¨ĻÛQëėpËvé œ@ŋoĄøĐĨ›Mŧ9/X>Æ?4†Úļˆē5°Ûˍ ßbØ€öÎļHÂp+tą'Š"Š—ŧ#œē€îįP‘ô[Ü7Ą’Ę~šGîčŽeÃČāĨ‹Đt+„‹TuNoņPE|ļ=)–Ōg14ÚvŅĖ#ōMĄ)DI%Œ*„ļ{dŲŽĻ˙ŗBŠŽ ÂĖōđ‘T[QBՄ-”ĒĢ Ę`$ŌŨ^ž /GŽ@7ŸƒŠ7j™WZn6kKŠĨÅĄ^†]6ĸíÛíųøŲl˛˜V°I~.GĶ貨ĩ?÷$|)^ú+Ča=O)ī„0ãÖėŖÕxWk&7Gkžĸ`Õ}††{VĪiŽQ˛t˜ Ķîc֒i­4Ī)€[îōXË=î`øūJ=–û(šk*вæō” 4 đ×Ä‹‘äRGŖ9°4É7eę;EP [)ķ ņ ðĶđË1'4Ã/8°kėSņÉp6™Ė‹, (ĸ.Wĸ ŧY*¨ĶÍrŦ\Ą›Z%ßŖÖTx\*ãÛʋâ§P`Ī(oIŪWÅöUáŽãx(&pSŊT=掘ųSÖ¸ģu—HƒĖQ9=j™•šŲ–š• Ķļ]Vl–úV)m”[Ũ&õMŌļEJiyUē:Ē‘íN”W Ą|ā@đ1‹Lĩ†Œ€„ˆÁ˛´>ā†î¤wæģ0!2Ā|ß×w7•>öú0~ øqų1WõЖņĄŊ¤ÁčĈ‡@ņä%¯(-‘ëŲhbÅܓÎ3â#ŌÞŒĮ), €MyÂjåéÖ.ÛõāÖ~̚iŖžA/ĻSߐcLg3ÜĮ;ņXV`ëa˛€Æ*M›Ī…í6ōœxŠ34į<¨ŽøžG”°ģj!Ė_áũęû!M1ë5+Ŋ +ķg’'SåŌûĢōÉ43ŖÉx‚Ŋ ?…‡"é%Ë[Į> Ã/ ÆåčLÜ Ī?#õßM!n{€0ũ‰žxޘ\ Ëļ/DbáJē–2GIi§h#×íT­ĸŦĖ˜uW…)mĘΠ`KI*ØrŸ›ē⍭‚ÎĐH LlÆįe€7ô9CIGŒƒū^§˜>ĻŌw w¯[ÄŖ´>šm<]IuˆĖĶxŌļmrūu •zõn÷ p4{-ãÉŋĒAyõ2Ã6ŸL†ķÁtŠ^yŅŸ íh˛„šSā¸1Ģ y‹—‘˜ĀmōZ†ISĮĀVgŋâ¤Rŗœ…Ŧ—fgķI)Yšē΄žšĻcipo`jægƒųŪĸk<­4ŠŲ ͙ \ †ĀZáŖzér`ZCqëˇT÷{†ž Ðq€–‘Čĸ!Ķ^Î)qŊĀxz–fhžÂ‘!ãŽÁNÃDdôÁk!‹$/bĻ OeŅP99Žš:¤‚™˜âÈöāŠã.Û¸#ącÕš'VIÚŠlM;û ĪVL]_§8îĐĶužôŸ|š|™%΃ôķ<›ŊØĪ÷Ŗá§čėøÃųĢÃN:ą= ßۀž—‡ĶŖ~´í_Ė'Gų ?õÉ3ūį0Üŋø°—mũųōüzžŽWîđŠ—deÔ<i÷É\ŗņ'Îφ–ĮOQu,3*Ķ ZgŸÁ&MÃok0æ°%?åÃĐ M˙0oՈãĻ[š -lD† ÜeFĮølž|Hb#‹ĮVųø‘^ŽcØCGˆIŧ(}&ū a ĘÜĻô3úR!­t—ŧģØMWėš^:Lįu¤w—ûæMvD°˙áįŲøt¨ķ$xö2 žĻėŲËŅî‡íI÷ķ§hūgúé}ŧ{üđđx2:ŗ?ŧ;LĮįŊßūH˜Äß6 Ą;%Ēb‹=¯†°öX‡9VGjA 3] Waël{°wÃS§ņ7‚=MĄ§EË5ˇ¤8YČüērQņ+Š:/tŠ"ŪL•ĨœÁMâ%eS‡Ģ€Vš~ëĐF:ņäT0ē¨Ī—"g!2´Åĩ|?´ŽT-TxKō ˇļ9Šgg"ãįŲ`šS˛ķ™FdĪ{DÖwœ‚ Å„‘Š7(wķŽ´3d×`Ē×ĐÜNĨ=4B0ō’I né™lÜûŸ{÷îũĮŊürīŪ? ô üģ÷Ë/Zų?eūô~Ą<ÃˇDsXRņ\Oƒļ ãzģŋĪōt”f^Ļ(]“”T5î/ŠĄĒiÛrx4b†ŧ/¤ŅB91ĪO¨#ÖMūˆ´z=x‘°ã@'§ŦÎŲ'°/Čh1<eŨX“¨Ŧ€-giVĪéd6¸ÄUUCŅ|Œá_ cĐc5Æo‡ėöÛ6šQÛļŦPŧ˛Ō 4°<ŊžcrÂĘyE¨bˇdŽĖõƒtØV˛ČĻ­ŗXJûHZÅŌ‘™Qļ–į¤ų{ä„Ūô‹.ŅŦ‰Š¯—•YægÅ;hÅfy§Éb–MfĻ“JE7‰Õé†kĘÕõÁŪúČs[„uFŸßtÃ'Ќ"Jy“[99bĘīŽ‚$J¨åIžZøp̉c4û‚>Ž’S”Ÿgåå#G;27]kĐÂ@unÆ$ ũt¤=qđ˜C.VĮ#<ˆRuo5§3–uuCžĩ@zå˜h"—ø›a¨>_ŒĻíEē ´Ā‡Ū NNt' ¸ķAÔE—¤<īĮ„> ięáĶ“Uˇ÷¯Ļņëyx騙9Ÿ˜ë]ĖÕÚičŌq⠔ĖSËh­ëŅPĖĒZj]jŖÎEzÆđé0NŌĶɰ‡t‡>;JĐŋbū ė˜rZkcŊ"đŸĘŅ‹ĸå{Ū|6i#KëĄēĒëYåōÆ|ŧ™)×yISQŽ÷'Ô/–ŦÆ4‹ĸ’y˜ÜŌŌ …Ī5IxŨSR_˛(0žaėī,'†'…ŊȑK~!ÅĄ’-KU¨ĒRĩƒ‚EåŖ  Ô}”Ä“XŠEų`iąÚÅ:Æd&Ą Ĩ5Ŧ¤ō…Ŋg¯„?0o­qŽhˆ]ŧT¨nļĒÎi9fōú¯ˆcĖfļ”gūfė̆lšoWÚÜBĐšK/ü7ãd‚ĢŠŖė7‹Ę*"XÍ*Ūlē!*mžÁŸ:’¸ņ8ĻŗÁ2N.äHäŅUcQÕ6_‹Â-ŽGYËU͙›F”3ÖĘë §ŠálĪBĩW |V/ÕTŖĨũ6ãĘ 8•ÍaąúāxNËoîÁ‰ĸ§ûŽŸK÷&ŖT80I[?ą˛”RÎÕԂ)#ÚYnûë(3*ŠĨ`nk˜LdlMq˙"{v“ā—ĄaīpËÃD"h EŒķĪ҉Y ŋĮ"J"Cĸ7Ã=V@qđ|ĀŒu}˛ķ5<;) mä|—â-pa ‘ĄTä™ÜáhÂĻúhž†2P<„ķŒĻŠō 0 Áp$ØĸƒãhC#Áo´)CÃˆ0ß ^p„Å–M“‹Ž~…AüŖ¤Ø&F€šƒ;|Ŧį`‹Tßņč]Ņ#ÁSs+đđYŧˇw%ˉ#Aô>_AøJ€´1ãĶ,Œ[iaqKHBb=õoĖī͗Lf•d2´ģíî™C‡#dí•dŠrŠ|™•Ãß]†ąY*Ē%#“ČĘÃ2cĻČę,ˆĐ¤Œ9Y†žÔĩ"ú‘lKkI(´8T”q2N6Ã_ÆÍL"z˙ŠŪz‡ˆĨ&‡ÅB&>ē `“;ŽĢl'V‡ī—˛ôí KLŠkŊHs—ŨĶQũcŌ…PNœ”7b€p [@Ô­?đ–˜z÷uļß§đˆá­’‘î_øŲõk˙ˇ–øĨ‡ ß3Ų'ƒėVåśLÃ6Ŗģč&āũîBˆ>Oö@Ģ íéĒiÉ{5Đ{Ëv>5P´ÉD)i xĪ0%؜ŦjF`¯B›%ĀĻėØęؐå"Ū5ȂF™˛ĸīûe ũ?­Ą“T–W:šΧ “>^ŌūQ‡ŗŗcĸ@O4Ņ Ņ;ÄĀDSP-RBčâāąhÆ8x priÃˇCk÷ĮíĪæ‘^όųŌā4’÷Á”Dš8˜‹ÚįS ĮA‡xn˙Ŋ1˛œ3à dåD)W†^Áė!xšˆˇ=‰¤ąHCbŪĻÖ*ĩnd‘—ŧ*>:ɘ=††Ņ°Wށ ŒÔq ˛D€ų_žŽđ‰UögŋI:øēŋĖ÷L"æņēŸiÅp’!ƒ)u ēNĮßQrųęú8šéR#Šl€er/ēž"ļ3Óa X…Ė7ōX mūžÃšŊ?P>`,2>ŧB˛ÁÆŽÍ„åâ_Üũ“ãBŧd-hšŊč`ú< œáaš  ÄNžāOJ īo’âtj‚vƒgíđÔ,r10đ/PKËĸ–P¯5ö!# white.gifUT n™ ^n™ ^ux ččs÷tŗ°Ldd`dh``ø˙˙?ƒ3€D˜˜\ŦPKąĸ–P3#˜nt white.jpgUT >™ ^>™ ^ux ččûã˙/7O7FFF dø›Á™á?Ĩh#ņ`ä``d`dfd`dddü„Až‘•  €‘‰™…•ƒ“‹¨`Ģ#33 3++ Pļ(ĪĀ"Č*¤hčČ&˜ČŽT(bÔ8q!‡˛ĶƃĸA?¨'5qr‰‰KHJŠĒŠkhj™˜š™[XZ9ģ¸ēš{xz‡„†…GDF%§¤ĻĨgdf—”–•WTV5ˇ´ļĩwtvMš~úüåëˇī?~ūų‹‘™°ú ŒL,,Ė,ė 12•ƒ˛°*˛ 9˛' +5rˆ8M\¸ņ §˛qĐҤĸ‹\b*&U?‚ŧöqk"Ëgp!üu‹‡™yĖ‚ ö “ė˙ßPKĮĸ–PRū<C white.pngUT f™ ^f™ ^ux ččë đsįå’âb``āõôp Ԍ Ė$Ŧęf‡).OĮ‰đäü ŒŒŒ QžųA˛žŽ~.뜚PKn¤–PgŖĖ>äL‹Kpdf.pdfUT œ ^œ ^ux ččŧ:ŲzÚJ“÷~ ũœoΑHhGĘą=ãxw xÁ ÜxŠ…Ú" 0\ÍĶĖ+Ėũ<Ę<ÉTuKX`;Éųū8 VĢēĒēĒk;;øo÷GŨÃ^˙ęXđ‹(ÜßŲŋ’x´× qcGv}J\Ā0ĸŸd9-öĶÂ-ņDČh¸×pã\L3ęŅÂņ‚ŖŊ†_iūĨŲ…?JüBr@’KNũ 2#—K$͜fN4.~“ōˇaR˙6LÚīcâD'LĻŽID–ILæ?-päA "2ĸųvޚ€ ūU,Éķ$ FAŧ× q/ĸdš7„ˆē™0l,eAąØkä>1U<9ũ”=~owƒYv0v¯[EW˙:o+irZ˛qŌ ;ˇĪãGĢ5Ɗl`ŪÅW7Vg˛œß…×Į§ŗ`j?Noú´k-Īėū|6đŨŅŪ^ƒo0/!Í}J‹É&6ŊŒDtžd“\TtĶ#CƒMĻņˆ#[ŽĢ(˛ĸ ‡:Ĩ˛ää°Í&Š–ËoˆãŲPĸËa'>ŋ?rīúŸŽâÅpŌOâŠōé&ī/ ­ĶIÛ\ž]ęũ Í;ĮDuŊ{5Q¨lj×ŗŗÎ­oÉŖé$T~×~_ÕŠjŲŽiĒîP3[ĒbČŽkĻ)۞åŲžjԚ(JaÔžØQaŽ$Ųî5f§IŦ”‡j¯1ÜÂßsé,p¨ČnĨXw‹ é~āšŠëIđH!D$/h&üī˙đ’1ķ&ÜmōU5ÆIģ4w˛ -‚$ŽQŋÅ54/„T C*䋸 N8đ`!ĖH¸‚Œx‚xÍ`ĨP,R˜ˇąĐد ŽJ2´6\į MC@œ4“–ą§5ū>=GaĨŦ„ÄĻŲöö§Aq6nˇNW ÜãVeŖ~ÂHi<ڊ‰-̀t†Õ~žŸˇ&8E—Ũ˛L[Ķ5ĶP14ŧy1 ĐÔæQžä™S[˙1ߜ6-ÅÖÕĪ÷tYū“Dé_ŗ=Û6:yPЉ˙ā(߂vHVßP>"’-Ū‚fRǁoĶûK˙…'¯˛ÃM &#Ž„ŋ]k$PūO¸÷™ōXm_€[ŠÁ&Ã1uЎ`Fk+§Y¸eß5ƒø8Ēą*׍›ûåzņM×0§C1OœÉK˜į¸> fTĒ ã‰åÍûņšŲéëíą#ˇĮĩkŨ#Gī,¯Ÿá#÷{Q;ęDŨ#wÜ_úÁ ÷uÜí9j;ēŸ ÆƒpŒ;ãA08ēĶQ{Ū^üAī\œ^„q`úJģ7ÚEeHLŨĻĒ-ˇ,[ĩÜ/Ũ;žÉũaûîÚlOúĘÍqÛl/GFģ—<_GFw|rŨ;0Ž—÷G¸ÖÂ%yŧ™9ašvŒ°įĪíeÛčöÎįíŪĩë•Îíy~|_ŗah‡ƒS7<'A˙AY–<ÄäÁž>já0ē)÷úƒÃ û„åG¤‰ õmkԂ˜Ļ‚:\Ë1LbxžAĶjŠN ŌA⚲c =ΞeĮ†,HWÃs‰:|‡ƒWIP™XMčb˜@ s2"gŠĻŊb*ŖāKÛÅį<™f9‰Kß%…)×:ąœ†āSŠ+ĸŲ4ĐM)G˙ÄoÅš%˜’dR}ŧ8ŖYā•)Léo=c”[ž<Ÿ2ēüvp˙đŨigߔLyŧ^äÚķ4ģŧĢåF?Xú÷‹ã“ų°5ר,NģŊ°ˆŦ‹Ü™€ŲŪ÷$Ķįšęåŋ‚ūô17ž%ww“ÎaBqk~Õ YšZĖSģ­åĮã¸xŌžWē”:öÄ)’pî>ũ$¯gˇNĸü“ŦrĐiƊ˛ŖYCëŽi{S[Ag'nroĐ¯’{ú JLÂæ0KæųŸŽĐrƒBN‘õ„†!„ŸŊÆ8q°}ŧŊQdk}ĢēŪ˛Zšaŋģ*L ÆĒ-ėļÛuĐ;īvÖW_•‹Ī;ˇŊƒËËâôėøéđ˛{wØįį̃Sā`úėøđ[ŨˆĐŨАUŗŊÆ3ˇXˆ2ųēõģ†nļtÕÔĀÅŠžŲŽŨ2@FĄčõö맟ĨšoÖđ[*đõQ@âÎû#)0ÎđĘ!dnĢã˛ÚŋĄ ‡|‰P$Ãņ…¯ŨÖŠ@tŦ1ņ*%bmtu~ĖĒ…í ãÖk’[#ũzLbĨë‡ĸ[ģé0ÖØųš—´mM†ÜŌū+5ņ<ųš–Ã{ĶéZÚ-O~wgų“—d“zeCÂü§ŅÄ´ĀfëS–$Åß#­:Âŋ]tÂ$ŖOü¸>E$ƒ*9 ‰CŸœāÉ)ČÆėx›TĒ@ũRš:ØÆîĀÚtÛLœåÜFĢŽč[ųû†Å” ž˜¤ČßHIŦuŌ,˜Ķ¨’Ã&[ûÚ+Ô4˒ėWqķō͞ėuōŖ~æĢļGÄ1„Ô&8.)ŸĐÜ^ã™ũÛė"ŦœŖĀéŧd/,˜{dÆįšKdm´&kœ~ŒĄr}^ XĶuƒ…†ũÔģÃ?MåąQŧ>°ŧÕôö‡BUMm5öw^i$<š¯ēHÍjBįlø¤[žˇ*:ueÖPǎÉß2âp˜¸‹jã!ËÅ h<Ã|ʝ˛,JHaį`Šy ; f”ßŖ)”™_i^n0ĢP1ĢåBø‚5 U¤ ĮtžAXŖ™P.†…¤ÜĘpĀŗBL<ąÃJ'Ѝ ÃМRĄ€ĸIœû "-^*^âLs$‘O‚T„Ú§Zŋ ]ˉŨ&YQÍSWø¯˛dĖąÛČܞ1wNWģņ‚gH•ŲKŅ›B¯ŠC’­vĩAab„æRQBęĸÜØÛĸōĨĖAūˇŋûģMÄŗbģŧ+oĢËÎΊlųø.IŸņģt!†# 3wķ}ÂwĻY1•`ë~y1؈œa&’0Á\āēØ÷i0ō1hBŧÄ×k_“g¨ÕYPLøs<Ũk(”]ümfÜû€…Æe°ŋ›BĖÁFu(fS”0ļbŗ )š%ȇšdĀūĘå°Ą.¨’j Ļdh‚!é-Ą%ļ¤K2\ QRøEƒpc‹’Ŧˆ’Ĩ˛Ģ"éļ¨ÂHŌZp54‘O˜fëW'-~Ë`'0ĄÂ„XM¸Ŧ–L ‡‚"ɲ¨ĀbX#ĩTâŧՂ˙°&pˆĢ2x` ?0ĨH-˜PEA’6h’māPC@Ø"pŖ2.d/i&"PņæU&*É@¨ 'ˆQAÆ4€Wü†] Ę`=lXP|  0.nŧēJēá4,ŲHL@bĀŊd˜§ F¯LWlK°kMj¸CĀŊ€Ę$ÕíI-ĻCPį…Âdhsa]܇ $Aģ ety`Á#Māß°O؁ã ꒎‚3,‘ũ-҃āšBG2íī0ČÂØ,ŊiŧĖūcZYípZIŧÅt…aķAÍģ€3aķĮOžļąf´=ˆ8!…88 Fe¯†=†\Ä.uĢîÅgƒV§ęˇėĩGBŅģæ›6Šžm“Šõ 6Š€ÎÁ>ƒŗx( 6Z$ šaŠl$*\Eå Aū'ž_AáwČW|Pį2-–(ņüčB˙”m6ü蒒8;Xx°Ų#u“ūĢŖÅ×ôū‡ŽXm,ōĘâdCĶ(^Å ČQëQ—M'.TW0üžE›(ƒ0_0Ģ QÁŋXė;Ē>lږē~9`56Ët…ŋûįdrzÁgøÛa6IĻ[ÖéųŖ›;I ŠU‰‹Ĩ—ëSUŌYŪn͟ÆĶ“Œ|<ūBd&Ãäy ĄūÁ–ÃaĀž†P0lDĘ[N"É8B~đ DøtšB*äEņĻAîlÆüW W.ãĸ(üŗņŸ‚(îŗņnķ7’Q‡æ9J÷Ų“fÂŪéÂ*Ûhŋ7ķq.U HõģŽĩíą!°€‰XäîįfUIŽ= ÜZšû2_é‹)–bŋ.+ÚlŅ4ŪļlÅKŖßÁC‡Ļ…¸úÁß]īD´đˇK…Ÿ“čIW§”mĩ’ „h‰Äé´ķHX;Ŋ̜SÍ­OĒÃĩåäš,qãĮ}<͋Ā[ˆC(õ)- L ė (€ļ?ƒd,Äd—ŗŗJ3ëÉ1{TÆ<Zû;ãhĒ#ī4tkļō2ą~„ĒrĄ>É `?„ lŒÖ9ZK?ķĪÍú3^Æ}¯O•¯ųęSŦUá'!đžÅ˙īŋūûšÕĄúųĨŋ˛]˜CŌ €üv‰ Ī[{Œ6Æ`’( iAš—xRękģZƒ|ËmÛP…+ŸBšã…JŠ`Øn>āûßÃæ)-nųcęvV)Å‚Įl¸ÆBžŌ0t|Š%BéÔ6dąÚį†$ökãĩc\“JûyžžųÅčūîņ!ŪĶŖëƒôė&˛Õģ“ËŪä&뇎ōāÄ˙ԛßŲ7§Ž=0Ī7Š7ɗēōčzŸŽ¯Ũīę'ûŽsĶ_-oĩëąwĘ~XČDâä™W5_\åĨÅÖŦ~¤ôƒlwŊÃí¤zŖÄ@TG‡Ŗ‘gÎûŨūK×Ōâûx1ē>o‘°ūR3ÂPŋnų+ø—WB%ĩ¸™ß‹K#ÃōŠ‚ $€^˜ĖËđ_UŠ[ÄV÷%uinsiüßÎîtåš+ŧÛq€Û-貝Ũ0xÁđÚų˛.É׋ÎŨ3jŲ4Oą€ú–Š× UA•‡b^Ą Ã"?äĪĸ˛ŌFœ€sU@ÆŋX´%(ŧqˇ3˛zTc… TĢA•^ÔT]!NJîjŠ'q~… ĪÔTŪM*ŲtëÅÎFĩeCU(˜oØ¯Ū ōš U{y!ô’ŸÔŊc}ūũR†k đŊēE‡šEģˇ|eÆĒ íL›)žroâZŪčõuY"@C °f‚n@ą5ę™9SC,ÆņsŠS3X¤8P*`ąŽ $|+÷ + v‹K}Ev ” ›Ŧā#ųL™Šž:¤m>äæÕ™íÛ÷ÛëŽ_ŌWš%ø“Į÷UVnhíŠO¯Ģl5šŽ/ãwôĨ Â}í^õE‰ ‚ŌEvâˇđNĐŲ âRôíĘŊ™ĸ/ۊ.€P‰Â =ë7œ_Ũsč—[TV øBī—žVMũ@Ū%܆¸oˇåûåÜûŊˇ ېZPûJZ(j’Ĩā—v`H6öÖė˛×ĸ &œg QŦWfâß-ļjLŦ§Íœ Lüs ŠŦ…Ļ+‚&éØR” H‘[CŌ¤|TƒUäØUŗĨ–(iD˛m?ŒēŒ];eÆęzāT–ZŽČĢtQ—°‹§(l˜bOĒ9Ąš/Ģz>TĄ|Æ5ląšĢÖŧQëWõ}öK­ķß4sûĻĒkŋ„¯´]†ūĩN%PõąŦbuĖTëĨûZûü–P#…yË\°G/al3I`‘â˙Ųģ–îļ‘åŧׯčŖ{’,f âA„îXsmŲ3˛Į–gŦ‡íģŅ P„>L€’čœŲf•“œ“?,˛Ī&ųCųų ŠĒ~ /‰˛gŽ“KÍXÂŖŅęîęĒęǝŅNĪ`ų#›ø4ŋf#ÜŧŌo¤é̆JZí†d˛€a‰ki“Ō$ÕđŌÉv͡đŠ Į[+ÅŗiŠé{Ŧ*a ÃčRJlģĩ› ‰-*#ŠĮ!HëE_h&IƊ]YMúy^yYÚąØ´&—é|ĻMA/†ų˜iQüį1<į[Нšų y+™ĄTƒÛ[Ŗ+Næ’Å˙āŋ˙áŋôL+ŨۜûėņČĸ{](ŗ&%ņN‘åWŦęēāá Æ‹ÍÉi‚;šUŠڄߙŌ›dß;$_!§UL{Ûdm’EåõÆ+īĪY&•GЈ2QÛĸņŧąZ[Ņ~TÖsÅB#mhÅ&ˆœœj‚mąW'$KriŠęu‰JÂŋ„*aX4åŧŨ*[ĨbĢTl•Š­RąU*ļJÅVŠØ*[ĨâžJÅī-ÁōŅą•`ˇėV‚ŨJ°[ v+Án%Ø­ģ•`ˇėC%XūæVm!ÃÖ{k¨ŽÛØŨ†B´–YGÄhYâå¸øh,Íkū–đˇėš#5E‘ŗā7’šqœi?Š2"ŽVLHžžęĩ0sਔđZ$s‰ú”ašˆœŒ g|¤§QQĶĘÉQöĄú•XßSŦŖå¨”Ī âUņ”ē„?Ũ)­õ_Á¸7áEDyĶ(¯YV•Y”Ė.‹ĢNŠQЏt8Ę Q”;›wŦŅA덯W)˝ųeåúŲ$YP¤ë(Ė`VŠĢ Mĸ¤Ą¨§j™čQyĪ{ķŋĢeŦŽ~MŗÎÛŧ¯c=u˜MÄ1u(ūĮâķDi;v!”ØBŒų“MdHIí@UG‚!}Ÿ=ęȋĸV*ãUü9Ņ.*H#RWų! ē:¨õŪHHĢ|‚Œv”äë‹|~ĨyĻĪŽoÂ7¯ã??ö?ŧģN‡ŸŽžŊģr^dīúũˇšŧ~åœ=9{ũ.øéãMxúņäĖûÆžüøKūaũf]ũ‚žéŠ:2V×,[ §Iέ˛/6¤´aĒĸåւĮ”žÚČ.pĩbĐZ„0ö‡Í^„N2ĘbŸš‹Û?!ßÍAĘ­9U"ˆ+&š~S„b¯ë˜hķhE—įũŖÁš?éž{i—yüûŌ<ķŽzįŪK—9“Áĩ7QfIiĻÄ`ÃC4GR@-ũuŽgĪÃä=/Øs] bõ÷į%Z™ölČÛtĨ-SZFĪËšî6˜Î;ÄWڂŒ&”“Ĩ‹É=ãW‚ Kz—&Û7ąiųßeܐC-Ékâx”?[bÂ_ÍČ^ #hKhMØ$´ÕŨ5 ’œ˙vņV3Po÷UÜžŗiFžZe‡ä6§ŒwfƒQj!°NMŦ Ėrü{ā'áuĖfsļšÁŌÁUŽŗZ.­§i7ÂËų˛&Z0ŸĪĶdEĨ>†2 “”p~V+Ãw´OkčŸô>û#rZûŸ9­.°kįȆɓ˙† 7íõûüC ŋ‹ÎAÄ8$ÛŊˇįzŦĮ\üWšĸ™š™#Qá„˙Āē•ā3 pöȋ!øeÍ0ëĄ üÁ‘LÄęŗî÷ĐæŽāđÛ=ōGŒ+Ūãõ¸ÅDj™Iu1Žõ0%Ę@YĸDø8ÚĀĶpÍäũ2΄Yû;c^ĮÄĐįâ!)ŌlßhAMZŒJ+F8"ĘŠĩyL-ŌÕF(ŸģT ŒqÔŋöüķāČ>īOüsäÎ>0æJŸ•lŽËų"šßĀˁ9×g\q˛ō°sAuŌåĘßŌCã™Ī4ˇfŌxø!ßķ¡8 v+šđ§’Ä7ÍĒĨꔲų˙ØxT nl^xGĸû5ԁŋfauâ9cė=ˆugŗjjZ–īUqyZé‚ß(Šā̓i1_^†ŗä“`Ė÷ėũ#A–ãŌcEÉ3x­øKšFđ>‰P`+–nÍ¨d$¤¤™ļÃJŽhĮ2°I:vôiJÖ}~OŲŊĘŖIūi`Ô;ōj”=„}ãAä…=ossJ˛(Đą=Yaˇ–› ‘žŖŌ_Pŧš@aģkĨĐ׉sČąÉđ Î"6EsÎNËjV!˛vÉłĖr<&ĶK¸(HāQa>ÍŽw_Âz˛Ãší8LB¨WÄŦFúˇv#ĖZļ ė÷]pJpnÎĀ^ÜÖč”"ގ-GĢå’Đđ ēz ĩkœū†ßA/‹Ą",ŦˇhYÉҞ2„_Ķ!T*čHûˆbšąŦUāųK*ėū 7īãö3(KúĐ;_Îg—uÚŗōP…Õ)õrņmʓå ŌjR$ÂU§§—ĐÍКō h͑0/ë§;Oõ=ĸD„Ŗü‘Ccé}!ļ7˛G|ÜËö>r45bĮđĮ¨L5ĸÔæ*LÛ)‡ž%ƒ™ƒęŌÜ6—ĸŌyNA—6ˆ'îd–@}>¨á™ĨŠČˇ&ëlbŦâۊÂå•Z÷L§ėrxÁ-sxˡ÷Q 5É ˍP%9kz.Åįō$áēä‹Ë˙ˇWķü„ĩJ~ŋĪ˙ąā{ôū-˙# ÅÅ'"+‘üB@ ‹—,>ãƒŨ(čŲĶį§g'ĪŪ ĒõéŲ‰QŒ™“äĻâ%?㠖ÅŲåŒI#ׇ#ŲōīũĩJ2:˛øđ`Đķb;ˆģƒx8 ũĀö#Ī ={äÆAäöģãFå \ˇ×{n^owũ~`‡™V'f¤¯ãå—0WĶ NˆኌÉĀšĻf6+ųl˜fVÃŧfŒéüCbÍgéڒ°™ÉrTú‡ģŗk<Ŧ}ŪZ‚ŊģÁâļ'FkTĩô‚U\qib;ŦUš/CÕžá<'¤qQĄ’%ąÕ"=…1[q m­4 ĐQk!,3ē˙YüÆč†ĶîŪĀA ēöJ’~AhĸpŠąëŦŊĮņûc‰Hg¸hXD{¤ĩ8$>Į^í>~KYĄĄeô=ÆS)ø”Ū?îĄ`; ÚAZÔ_ ž8ĒlĄ+ĖŲáv‘Į^ĪĩāĄM’Ã#S%—˛'øLgD-`”ˇƒn‰Ô.ŧķ3Ō÷Ņ]RŅræ™;•@é5‚[‰| QVhĪ\‹> OÆiäué~āQ!–ĘįĶĢ.Tqp`€Øt4Ũ`˛öĐÅ_Ą…‡Œ6/“Ū;Á5}ÆQ9éšĢž=ō÷ÜClŒ„.ë#)õię3û7(o‚YŧĀ€đģhč‚1E¸ĨD æY>ķ2Ģ‹pĨ‚ę[¤qXĸ¤:P ôéd@õéŽâ ØëÁa4nz”\¤Ēˇ÷xÃĢŋŧĶOĶHŦ3­iœe-QåÆ=ƒ5 FD5ãÜxŖe,ąÔ’ÂÉ… Õ0zŒÛÅ^yÛ¤>ŧũ÷\LĄMŧ eŖl{čĸ¨ŽhĒA”„éü˛Ŧ{Ч…¸Β)߯ņx Ģ/C€*øgIņIúcķOwÍ@UĄĪGUŦęׅ‹oI 䈋júáâīgoi_đ”j{ąâg%=h<îüüä|}|Öu>žšūÜ{ņbúÃûđÅûĮĪ“Î[?í= >ŲožÜ$gîããŗW?<9y‘ĪŸfīß^Ŋųæe|ôîęčÏŨéĐ^>ûxãũüėōÍģŗãUpil‚›ƒģYˆŌĨUėcķ%œ-,ĪĐ%ŧ]üg-’§I֓A\Í-Ús”XŧÜ^mZĸĶy39ęøļ >cøūBÅíīilî#bō EXeŽ­LĘøëeđCôwôë%,1.p|Xßđr?-ŪôpņuSĶÜ÷Y‘!/Ģ•‡ȡęŲÄĶģL€čĶKŦi8OŖ¯Û=x†ũ'šÔÄk^š= •ģ J—8ŠŸÄŠŧWļēɔR[$ŗ’¨Ĩ]+ŋ•Ne24,/.åĀxŪ5ąŊ1 ēÆp˜+ôē,9°č%0éŦ¨9*ĮŒGųŖéšĮg”9"ŨžiY[b.‹ŦQœĻO’ščoęŧ ŋš:PíC˛ëÂRÃĖq@dS914Ÿ.,ģĻbÕ­QsPÆšZĸN5Ļšûg6ZeĀ.EVĖc6âg|Ô}žUžļĘĶVyú? <ŠéÚĀ ęææôßŅR$Ī—ė*^ÃėßgR‘o…-X îpūRs‹/8ŸŠI/Xĩž´nÔ4°-[ū´‚ËĒ0?\ĨīĶ„Ļ,ŠīĩÔß â\H(­%HũM9LÃÛ4ž]"kØuŠ”n¨­˜ú)::x‰ģK UÁ× \DŠ)ŲĀÍ~; ķŋËØu]üėûē/¸„$Š­KPƒŽúM[ŧą0–P”Å’‰Í ! ~_•5:ÆP­ŧք:Ūk÷āpžJÉŨ‹­ĒũTĪ˙[hv‚ä/×,ŧí•DN^fõ–ŖĖĄKXį…sŦī- øŗéZFīņ#ŠÁĩũŌÔ_rz5'ˇ¨Ä¨įBš(ĩ`3•ĻŊ ÕÉl”Ž@M/ÃKÔ­Â4—‹÷ˆ:JP)įÚ$åĒ[~ŦDjÍ<´Ão˜ ­qWˇDKs‹į]OZD^Ŋ %°ëĻW§°@|)¸:*']Í|O=>ƒŠĻ(Jƒ‚{RäēNˇmØNoųá.#T~č÷zÉSß2 u—’ĄÎV¯öú¨V’ķtĻĶ‹|ĮûZl‡Čã4‡0]HžÖžÉ DcߥöžšwŧxRÛ8Áķķ´nĀ [§ąĨiNãQtņJmn*ÍeYMK’VÜ%OÄ ĮU8I¨]6†y= GWÖ&á¨ü|<ʲŗš%*ĶqÆČOtPß˙üë?ūįwQf ĒlЉFÕnŽā÷ëšļ°›LŽk-¤@ĖE¯@lĐYܲlž& ëãų‹pIGĶĩĐøõ ÆáHú&= ÅMzß:öĮ_vũu‘Oâåt>É`šĨâJķ –h_tN Ã‰9ņī˙ō×7'V ÁBûå'Dã‡ŋÁ˛2™ŲļSŠT\i*‘žėrÛręüķŋũÕMˇķåĘÕãå|Ę&Ā™ū‹J.ķíĀ/WøHŖ/;îÃą÷˙ôuãūĀ)+÷nîÆKÆÚr–&ĶÃĪÃë0Ũ8I“|Ũrːą6‘%]‹‡ķ[Ú°h4*‰É)Ë­Qø…^¸šēNĶNO}•UÖ¤ ā$ŲŨvŸŗ)n|Æ,R€Ŧ/`rī ‹xgŖe2ŒŖáZÕË,a§ á  –ĢXzGZ[‘Ųk?oų¨†jÆQ{2œXnā. ÄWĐ$õ% eėÉ*[Wë"‘s*/…'pŪÖô{QŽŽ>o'ņŒÍQ°Í˜°ņĄéč[Æą=øõ|)!Q¸Y‰;d[“Gĸb7 ځb”“xĘŽf8Đūĩ–ŠĸLoÄ^ ]™ŠÕÍ)ĐáÄûx˜(zQķŖ–/ĐuOōMÂČļcÆ>´ē߯ˇ‹d[čålĄ›3Á\ —įģ|r+•)Î?0]rĄeÕՔiËU¸+?šyĨÎ 5N‹k35IF{ÂbqMhĢxŖÉI ÚĀ<ޝ•į§éŠSŠŖŧûëŧxøŊvjE›_ĖŠe3Ã}8ß\ŋžŽ_­ŨC3´I.Ām0ŸæōĄîĐbLØ ŗ4, Yˇ2RÜë$$ßYA@4Vƒ"]č…=îvåė(hmląpgĶ;BÎōdƒœ2](ū īēŽÛīá៑åEĐ˜Šô× œpÜķã ‡ŽmĮnä}{4ė÷?ōÂÁĀ <ŋg;~ØīEũ8öģvÜFcø¤6VÆ@įŋĪwŲĻ) hh)ÚБ]Ö|l ÄU ÄŦÁķčė†B›ĐE*:oØ|01vĮ¨yǰĻčō”ōE ø %`<éeŦōUųbTžąŌK˛”ËP’Rėž¨0ŲõO €Š9”įi’M“,ãæé\ŦÆõ6¯tęŽ>īë÷"JũĒHĒRã0 F\Ÿ§.PÁx›Å@›Ė&xE9ĩ⁏ÅQģۏrLޞC™Õ[av*ȇáb‘ĘZ 7´Ä…ŧY7 ÃhÔ#C íLW‚=A5Ą–ŲhOÃŊųō˛s2į7°8ž€B4ŠįQĄ¨ČIG…ĢH+~ē_ņcVzŨ‚…ÔAē˜Ü^¨kÄö”{š´O#âiř0‹ĄeãVũB¸ÔēC„-ʘĀĶĄÕe ‹īHg 5#ĢM’ûŠ@áđtiDö~7qT;WCčfœH‡(UmdChõ•u3_F"¤—j&P'uš°|ĘnÉ9?Ÿ/ö™e Woą†;Ŧa ULī&ß@V'+_M—a׃Hģ +ĮՀÄÆ°^,qĄi$nޘŅŸŦÚaÅ+]75%•ĻæŠâ{Ú+n?ƒU<ŦÁ>ļlhåŠ!YĨŨ¤†dũ;;VPŠ"eYKtEbj‚>ÚũnjfŨęȀ÷xĻÆpP3äw &9ÅR˛š›Đ’ûY\iČJ°@(c–)7>[eĄ&/ãécĮŒĶšdä…@pN”4íVŖŠŌrĖU îÕķ›Ē=O^ĨŖŖ$ Ūß/ķŸüÁÛčå‘{r{ãföåËÎéíņ*}z|õ"ZĪNķwoúvüiՉ'įW§Ÿŋ|úįՓŊķįi0<úô*^ ÖgëķŽöÔčfŊ đNŠUōl§kŽžlÔÃTÖûqpßžÆČĩéÎĄ} ÷4Īeš ’qczĢCį­”˛ ¨hî}1ŌjĐŪ>>=<ēxrvzúúØČĀ ĻøDō+05‚ė8tÃÔ ~l÷Įũ l×v†Ŗž?Ž{‘×ëė~ŒqE~äFÁ(tũūØwÜŪ Wĩ]§ÜŠClØÛũa +Ÿoûؔ? ú´{ĀX16ū—Ŋ'ínŲō;ŋB‡9ķÎĖĄ%¤*Š$u7é  „„@€ū‘%9vG^°û%ŋ~îŊUĨ]N’@÷ƒîØZjsUŨĨîŠČS;­ęũĐ0•ZCúĶ‹´|GģœŨŖĶģe ƒípŊ¸•Įģ! z,v ę.  šÉMaúVčšâō ˛MĄœ^+7rhÍPA˯paĻĩ­hõ´„N[+|yéH^ĒŅ‚HےŠb´0Ŋ˛3Ēb/MŠ6ô̆ŋU5Ž%vˇÜ~%Îquįĩ”&Eüíƒ2q¸2Swį™-]*Ú*’(:™äxYœŠ &åfĨmAŽŠUģ– [ĶDSĮĒ8j%ÃIK0nØĸæŒzˇ*ÅŊ†k÷2ƒFāV×ŧ2\ŲÂMøÛĮ"WlŨŽĸŸD2ˇĢÕŽMB•p_Ąo/îc…wū{62 VŲڟĻ*9:ŽŽŗ c…–ŦĶh† ĔČ ũ_ž’ÎēVr†•éĸBŦōw6đ­–rÍ[íČ"ßųâŋ:VkÔ%ĸÍÂXS؛`$8ĮĄ÷ũÜĨ7ÁJũ(›˙DKĩzwhé\Ž9a•oÄK}•?Bļø x˙‰§~âŠ.<õaL1ß1ß eå§úąQ?ÖŊ"ŦˇÃCõ)Å/qĄn„}Č˙ũE5úqĐÍ)ßߨqéØ*+ę H‰eąĀō8ĒŊė6—_×y‘ĄÂíø2Æ4„íʒŨ\Ž| ÷ĮŨ ^Íú#Äø‡Ąo–?lŒžh‹}Ā0.6R€@x—åīŠJFųCĩģīpË,™åĨށŽ1>øPíļÛ@KÅę†1ĩ§Ĩ‚šÎ.חœũ ŠāK=­IāEčvRšxŲd„s Õ>‡‡i.7‘$ôpōįĨŸå–?´?KYÍÔ0¨6ÉĨ”Ymj!iÛ] ĶĢ•me{9m^U4•”Jmr>ÆjwĒWÚūķtī¯7ŸRļķėā"˛įÜ˙üÎų Ÿîž??ũÄÃå‹??îķ·áY?îī>vŗķÃˇ/V¯>ö&ą¸XėÛ vx:ÎfŊŅû(Î>ĪŌŖíjēėZĨĮīˇßũsÔJ}æąØOzIØžg{~únr—Üú‘‡öÆA˜Éĸ4 “‰ŧs"„ũk¨•$rû4ĩJŋIs]šŌ…Љhc™zu…JÆļÛédŠŽ(ûBī¤yæ—v"ęŽ!ĸîÍrߊĖt­Đ´„ģdĮ€kÃàŋ6ŧá–@:'öTė>ēt,Ž\|fZ!‡úžģM5HSŽTåŦ=Č)ʆda1†OŖË9¨¯Ã¸­(‚F¯ëˆö=ëĸ5t-7ÍÆûÎŅõĮŅ_ƒ×Aôôčãį7‹ųŅûŖ—î‹—'ŅŲčåWī8^x#guĘŪ†VŽøķ8~Æ÷ļ|uúHŧ8p&{ÉQüjø~účhüv0üôįįåŅ›$=ô>Ŧū)čúøĮBÖ˙,T-\ÆėÄķû sDŸ%~Ĩŧį$ąëõũ”…Ąįõx⊴õÂ>ŌĐögÂKÂžĪœk ęë ęãŸhzc4}ü÷AŌ8ēbnßÂŧSųo÷kŠÛ­E÷PņėNŅũĢD=úķߋ¯/v8ûtl? ŸģĪÂéîÁĮŖĶũ~īßÎeč÷?ņyqęôŋ^ž>x÷,xŸ˙ė“į‹‹!˙8ûô(8úē|9sûgįŅĢÁ§íZŸ2ēž A'LēûöŨë&}ÁYĘĩûiÂĐąE$ž“ēąãûqčíb×umģŸ$AĪOSŠGQøėd-&Ĩäȸ1 2éÄŖģ´wĢäY‘Q|%]ƒ1S<™^ lŧejĐëŒĘ(p)Aū͛Ų2*˙ޞāFÎė đĘ5ÄUönŗ¸Ę‰+ 1•~B‡ļé k;ûžÜ'€ŽŲvŊ[WÕō2nđ%ĘĀ=Ãņ5t„XŅäí=Â`/ß0ôNŲĄt!paÁ-ááeĶđdrĻ2c"Ģq¸ ¤%ôķXĪTOtéËJæb“oāCS5EžšmķÎÚ^/ƒÃ ]ŅĘŲ!ZG%ĮébUŌQIeŲÍégv*ŌŠvx儂r‚ŠéŖ ÔĸžWņĮQ‘Ÿ[ēžāũ­­ÂÕõ|€éģso47rĶéĒ›X—ƒ‰ĖÅ-G{Ũˇ]Ž7OŅ&žzûh÷ >CæSm_Ãŧ]Ĩ¨Gúõü°ë—ä˜[ØÜã>žĨŖ"VgÁRáÄŠāo8‘ÃS57yT85ãĘëˇhUîÔ°8K/ž<ü§ĩ<2q†4¤×i#tOč—0—į˛/sōVĸ>ž o*ZšyžH÷(uŖ5íōnĒĢŪ,èģiŸa0VŖÕ+`­Į@‹tUĮex[§€"OĢxđoBā€0 ž.ôĮö(ņ]āŠß čš_ŽL@*ûļdXÚÛ˛ ŖZ‚špŠ` ĨTŖĪ䛰äČą…fUaūīĀKFĨrÚäõĄĄÔ;Č>Ú*ôĒ=Üæ6§ž~ģVrôuBBē÷ōp>?×;‘ _]cž˛9 ãŽ}ųXÖ[{„QEē‚:]gŸR”L­EîoŋbĘ/sÔaŲplÄ[OĐüÍM}gĒ'Ûđįô!S”qĘPFõąŦ.‡ß—иŗC¯°´+ûŒltĨ˙dMߔ&^ø—#āZöÄŌ0rd3:ĒĄWYƒ¸ÖUN­°đ’V§ŽÚĒhCw|"ZwDŖÜÕpÃr¸Š@Ν‘‡˜LõŽ?NŲR!~ĢĐu‹°4=ĪĐE•ûPC%֍,qsĖ'.Û0UPŨ{ĩ'pUŗā3ÚÜD[™îĪõM4Wa–-vBË^€ÎŅöža*8ļ៨ûŽÁ‘#?qNl1߲™åhm"B‹cb>`5šå2ŧáR@g ūO"]œ;ųc2+dwÄåžq‰Ã×&4h/c˛Žķ ßm–Îsž7bË MJCSĘž~.€yˇ)^mX&ũ‚˙Ö;<ÍlNÂ1؂ÚÛ5ėՎģ˜Ŋ1Åw›˙NH~î¸Ų’Uģáĩ×ÄpĢ. w‹(Mģ’ļâ*õr->Ķež… ˜R†ķûŖūȌn#!†~›‘ŧ¤@-°C{7`ČŖ†!@§-Dd$¸Ú˜Â“íĩ§0žlįī{ š ĀīpVTÁĸ–ë4DÍ5Zž-§ķAp(ߥ:xG{bžÂ!i¸¸ `Ö¸ F”Ĩŗ†‹Ë†ņ…A2Ö/ķ8SJ>Įc†‰‘g)‘cEkŨƒZ¨Ûĩ3•Ą9fųASR;ę)Õ7ψL1‰ 7›&ŗEœÖ"˛õĢGÆGÜķzIŲœ‡Š`aj>OŨ~”ƃÆP×RˇvģcšĄ!,†ũûhėlKq$ˎËp’)’rÉ;ƙĄčyIģŅ ͐ėPõË=ōDw-Fˇ([„ [)Z¤"¨qō…ÅëŲfôKņĘ'mC‹mnā ø3‹ė´†Š{LH)peew@…Ū$šĀ°ō=˜Vž/Jŋv7UŽõåQü Î^đ{ĢūĘu=teD|h”–h8:5ĸ ¸ügÉÁk.Kæw6Ú‰ō ꤋ9‡#Ī@ ĮcŒũÜđžĻz`§ō|{—ízPĩߊ`z܁L ûŌ@jŒél†@ŧá° z˜,ā¯*ĶfD iĩ§Í˛ÔéÚ34˜V\ī%éŽ[b¨ķ%|P_É3]ŗĘ˛”`ÕŖ™:ŽéëĘúÕOČ43ŖÉx‚Yŧ ė>…—ˇ2Ņ%Ë[“÷ū† ‡ĢŅ{˜Ŧ;˙ãsĀP˙ÛvD üԟ”“Í“ëpÛxz!ŗ ײ´TO“”û{*ŠHičĨQ;ĩQëāę#ķ&H×ĒHÛAO!—*ÆŊ ‹É$[ §S´ūoģ4Į†Rs]3ĘF‹;Ķ$šø‚číI˜ĸëQ\=Ũ<ÎŅŧ“ŲëŪč„U•˙gYrwМŽ(,ã õ÷ˆ`´đæ ÚŊzy'­ŸĖ>v6šÂđö؉;p—äĨ üQŌ ƒÁMXēYšŽŧsl͎ŧĮmäĘh Äę!‚|G –úMDŊ}´öÄĖĮ>éŽ.U–/—ŗÍ­ƒ{ïœE+ŗ,,îäCÖ->4R_û­wŅęę=‰ ‚É,Į =<˜-ĒÖu…ûę]!njFic0Oņi-­)nĘņ¤?ɲÉęÛ~žRã7zŨÎQb[2@+Ĩ7úŊ‚ģ1 …{đbā¸Ë.HŽ1Ę÷ßî´ŽÎs:uI\_áɞ&ÃE“†ÜcûâíŅ‹Hô_šģĪß/’Qo™}~üšīô—>{žũæķ3qøüÂ?Yŧūp˜=Ûût2ŒúņÁWÖ/ģãgŊ¯īĢāõۓg§gbuüČūürw÷čZŽíWxÍ+ē g>•UšÂã\­-åėÔTßĢÜé´>›€Āh<Ėî×@ÔaK>āY`&‡˙0GŨˆq4ZÔÉlVĨĪ -ŽDTĄÁ3[<˛ÂPāŸō:rÃÎ)õÂĀLū/ÅŖ(mtÛRM•HĮ¯+ģāŪ0]4 đi‹ÅģK°ņOŪ.۟ŊdŗĄĪOŲÎtī8<\MŧÃÃ˯ŸÅ×Õ§°į'éŖwĪßīąķđÃātœžļĪΛŋũēģŸŋË ņÜõv._}pũĮ“ëŃČÁĻtm&ŅøΕwIr‚ë°tSØYĖÆŅũ/uPÂ:­Øķäj5)˜SŖ`M’æ7čŌĩ(ļÎöø‰  œÖī@š’ŋE —B¤|Xų‡e[-¤Đ'ōÂtB—ĒˑĻpČ&˛6ĄÅ]@;‹"=”ÄuÅ=uōZ-ųQU‰"rãY;z†ļĶ(~ú+"¨F~ĖĻŊˆžņ €Ķ'ãČqÚ%}ĶZeFnāš~s¯9ą^Š:)•áĐĮˇ"1ësÎ=í W0Î8 ū…ÂãîđÛæ‡Ā•+Ôō•€ˇō–są6ô,¸ ­Ûp'X*ŋ重W“'•­õßl—6Ŋ%ؘŽūƒ*Ą‡ž¨ Cõ7ŦÅ!ëŋŽ…$Œ9Đž’§ČĻ =7ÔlSF5ROāŧU2.+ĸøā.S[Šr”;‘;FĨ‡mHÛĘ*tļtßÔÔVŗWŽÕ›obaSģ^bĻ•Qš1M…wÎĒR­WįŖ)FR.'…1Š„HÕz2Œ˛ÉiY„N*“|Ma8™bôŖåËFP õđ×9&=īî_ĪŪˇķŸ@q°3XVŗ8ÕՔ*cz%ģ‰F?e} ąZŠ^ƌ^VËĸā^˙hĨÅkŒJ:Ē•3ĪÃF‹ĶÁ$ÄS­:Z3vLšŅKcŊ"„¤ÎõŒ™ÆÕ:oŊ˜tņ"•ũPą=PČN ĩM‘k™|ŒŠ[­ŦPšu]¤nT›J =ŠhęvH҃ɍžT†`@ruYĘQ­Ą¸HúŠÉėLJçĩĐĩ”Đ{ĀZĐŒÄÛhœ#b_–ŋgCŨ9mįŅLŊ˙ęj3˜Íl%*ûÅx9Ž-3)ß{]Õĩq@!CÛĨ˙Å8ān†ËŅübŽv32°˛écYhë=~INåVÆ1 —Q|ĄFĸ.ļu(/nq<Ú] ¨nß6ĸÜ0ž°|ßd8m ĪŅâ\2ē zĩņRI=Z灁Đwë0ޜSÕ^Ö8>+K|ˇöāAŅ“BGE@¯¨‚K÷€‰–ÎpŠøËũ°Š”ō#|#0žāÚí^Žj:uÍņ3ˇ3â*Đâ3SÖß@ĖnG50ėny˜‘ ëčFp4hcÖ˙ˇwmˉã@ô}ŋ‚Ę+…ąåûLUĒ€,a¸ !ŧŲÆ\266Øáö´ŋąŋˇ_˛Ũ-›H2™IfvĻ’2ļ,Kí–Ĩ–ēOˇB U9§â& 砚‚"ˆ:-‰%ū#ú“Ė‚ ĸf˜Ņ¯ÄÁƒĸ$Č:ÆŌ‘4ĄfR”Ô  ~mĐ.42!#P(häeǞ ÉxŠZ.I”āaxFĐ)ÆĻ:ücĖČĢÖPeTÜP‘Qį¨;—šBą;d­4 ļe‰œH #*Dʏ`HÔ¯á%¤3bm¨Á0ÔCJ°D “‘ ”āЍ““"Ü8oH˙'sņÅĶ_…?Úũ+Ã6€wđ„†ų$,‘ōK*ĩŊŧĩ,č*ž‹šÃw&C5ŊĒēĖA‰ §™B<493ŲÁ J—Ē mY2ā–œãGŠKĸQ #EPq**2áīDŖ‘‹ūSšõŽ!–ĻNœ 2ÉÕ+lšãŧÂOqøūQ–JYâJúUš;Ę;$'=#JSxĀÔ¤bߥH5 ¤tŦÒ0¸(Æ É^QdÍ=y;Ē•—Ŗ˜z †č+Íĸ<ÅĀ\æŠÎw>ŗE…įč#Ļ^O2€ÄO¤ŸŽ2ųÅĶŧ‰ÚV˜¸δķhųŗ(:Ú`b.Ûā¯7ųæW#tŖn…Ĩr›88(FSÃ-Ŧ ¯pxM] h5ŒÄTī鎆+Ú[KåO>ČëzžãûOŨ¨úüį¯ŋãŒ×¤íˆ§Vœh8đ“Bfņô&ŌåœeE\)ŊDõÖąqĸí܁ü9ËÍ`d˜,I[M-Ub…;§ëß°ÕÔŠxÕ~Û˛Jõ~ą•¯-ĸ:ģ\ũíĘĶĒō¤Ō/oļ_­Ũā&ĘĪÔņj3wzƒõöRĒôÆÎrá7ĢëâuŅöĢ÷ģp9`dO㟓†^âÂX|°V'—;’Á÷„Ā]ZŨS`•:‚žEUĪO‹üÁ‚ ƒob#,¨ĻŖ0M mTįų›øuĘĄVųfšRÚC•MÅÍ[ëŠtŊš´œ–¨ēfŧ^ÕjŖq^ÎęĪ„mWwlßškV~o=ÅÖ(ßĩzw ķâ^ą×ī'ßæĐ÷pĀ¯fË`ŽĐŲ P%ëÚöslx˙‡S—LGģ‹QĩÔˇģVéēåąr=ß]—ʝ:SôËF-*Û#_ß,XG‡šã¯;—ēS­úb¯_ëxņįĸ3ĢģËöpxs]]¯?–-ĐõG0R1u,Ę#˜H˙ >¨~Š;T ˙~rqu[zœ‡ ĩŨ­Ũ° ›áíh´đÜ~^e_ēAŊx_å­[ÔVŦ-žļŲĻą šēTšoŧ™2ŨÚz-¨JWÅ7t īáŠŗ1wTp5M”DM†2ž<ī•RįĄĪÖĩ’âmoÆLÖwÅ|XV*wWŊAĀjëĘDĶŲCķĒ][Žę_x—ˇø*žXˆag.Å_Į; ÕޤÖäą1RwúĸÔũXvđôLG1ÆcM6@đžĀ”ôp´=^Ã|ĨšÜ™:3ßIf=kk9ONm m‡iÄ*ī÷lč˙9:ōŒzĻ‘ Ņl2w҉hBe8OE"aĄĶÄS„†X6z-sėcÆŽ›Zg)úŦ qé¡Cû@$õ /:%ŋN_kœÉHŪSö´0Aƒ‡ŽŪ(ŨQŸZ84:$ēũ÷ÚČrŪÃyX^œYĘĐ æÁJĄœG–4niH§ˇŲIk…fˇ)‰?ĶŽÆÉK‹JŽŽü¯qGdöĘ`|„‚dŽ÷Öˎ Vāũt' BX Íę_|íg,I' ßĶ÷cˇŪà dŗ‚á/‚š.ŋŖôöŲųĄˇÜkF:´¤ōvâĖĶ Büąž)ž8Ü'ë8ųF@\ĸFú7ŽĘĄnī3Žh‹L.Īp€€ąÁÅĻ=1Ë%5î—ûGׅdû Ž{zĶC(v œ ã•#OÜĶFÍ'YÃÍįŗįTÔ Áh‹IĶØGÃĀŋPKZ¤–P|rÂoI>bmp.bmpUT \œ ^\œ ^ux ččŧ:ŲzÚJ“÷~ ũœoΑHhåØžqlb“đ‚¸ņ´¤h!’X¯æiææ~eždĒē%,0Žä|PĢU]U]ÕĩŠƒüwøŗŪipÕü< ņ"„$Õh\;>„CŸ0ŒhNĮ'iFķŖÚ,÷Ä&‡ ƒx"¤4<Ēšq&NSęŅÜņk‚ŖŖšŸįĶėSŊ> rfKüB2@’INũ 2'9— $ŗŒĻNį4ΓōˇaR˙6LÚīcâD'LfŽIDÖIL?-päA "2ĸŲ~Žę€ ū•4ɲ$ FA|T#q¯ĸd–Õ„ˆē™0Ŧ ,ĨAž:Ēe>1Uürū!}üŪéķôdėļŽ[ŧ§^t”ir˛˙õK?ėŪ.ĮÍÆ(ÍĶĄy_Ũ4ģ“õâî"ŧnĪƒ™õ8ģĐ^s}a ķĄīŽŽŽj|ƒYž iæSšŋķHÖų°îĨ$ĸ‹$dĸĸ›ą J4™6‰GšéēŠ"+šmë”Ę’“Á6ë(Zn,ŋ!ŽĨĄD—v7nߟš÷ƒ¯Žâ•=Š'ņLųp“ ÖšÖ퍤cŽ/.õÁWÍ;ˇbĸ:ŠŪģš(T6ĩëųE÷Öˇlōh: Ugßĩ“ßGyĒ–kšĒkkfCU Ųu Ã4eËkz–§š´"ŠB•/vT˜#‰AļGĩy@Ķ$VŠCuT[nîšt8Td7ĩBŦ‡y‡ô8‹@pu;šJđH.D$Ëi*üī˙Ā(÷’Ų̘ÆYÖųNJã¤]š9i0̓$ŽPŋÅ54˅)¨.°C*dĢ8'N8đ`%ĖI¸‚Œx‚xMaĨ¯Ļ0%îcĄv\9\”¤hm¸ÎÁtz䤞La{ZáīÃ2 KeU $6ÍļwT;ō‹™ŊkÜ^8 \1pp{•úe@#MãŅ^„LlĶH§xP=ûđü¸Á)ēŦčÍĻiiēf*††"ĪAšúÄ<ʧ,u*ëßįãëŗzSątõßŗ#]–˙$Ņô¯ų‘ŽĮm,Či…Äp”¯A;$­n(›EIW¯A3)UĀ÷éũ•Ĩ˙“WÚ᎓WÂߎ€-(˙'Ü{…LqŦö/Ā­T`{Lü5؟QĀÖĘYîŲwÅ Ūę_ŦĘmãæ~ųŊ^|×5,¨-f‰3yŽ‹ ׇÁœJadDÎ M{ÃTJÁ— ˇĢY2K!5r—žI SŽmb Á§RWDŗŠĄ+šQŽū‰#Ū‹sO0%É(¤"úxqNĶĀ+R˜ ĶßúÆ(kúōbNČčōÛÉũÃ÷ĻmĶî"ŋ)ŠōxŊĘĩå,ŊŧĢäīF?\û÷Ģ֗…ŨXhTgŊ~˜Gͯ™3ŗŊÍī˙LĻ˅ęe'ŋ‚ūü13ž%ww“îiBN†qcqÕsYšZ-ĻVGËZã8Ōž†Wē”*öÄɓpî>ũ$ĢfˇNĸü“´tĐĶ)+ĘvŽf@l;ĻũYLeœ¸?ĘŊBŋLî锘@z& ˆüO ×hšA! 'ŽČvBÃÂĪQmœ‰¸Ø>^ß(˛ĩŊU]o4Á­7W… ÔX•…'.‰ž%Šŗ~sĨO2ŋ˛(ĒėYŠŅ4 Y7]6]•Rtʍ†%ĢĻ žYķô†e4dOm‚oPŗiXŅTÁm3ŗĢ$ MN/L^ąúŸaū+˛øĪQū›Ak|žąÃÄŽƒOXŧËąė=æ&*´īND­aZĻĨˆj5$>k –avĀQ!›íĒrä&-G#†ãBí ĶTJ@[÷šĻá*ÆŗQŧ†rsx” ÚËd4ĸŽĐŽËÖßÕöžĐĒvËį”Ĩö˛Øc2~ũīŖA—Sî)ß"ļgí{*ÉrÅŒKsĀ„Fō2.wÎÛúđán5ėäáy{Ņ;ŋ6:ę`Ųyh¯†a Į-šŗžČÃŗ‘Ú‰ {ßLũĨ]+ÃņM4|h/{Ŋ{v§vúŸ#Gãeã§ũ`ÉÃ{ËžßŦ†Ũ5ÆĐŪY{q>wŗÎøzõÛ1ũ<ˎ ąyø—ŨūHƒÜ9›,/Oŋ&ļ֕‘îvŽqzOHĄ1dŲ=JōYJ̧ĩsrķ­Õŋē<9m=ŨöNÛ'—OW7ŊŪ—§ĶģÛ~¯ĶēšũXéß´ēgíîųėÄMë´×éÔIŋŨën¯ž*ˇģˇũ“ËËâüĸõtzŲģ;ė€ķãÕÉ9đ0}Ņ:ũV5"tˇ"d•Áü¨ļä Q&Ûļ~×ĐÍ†Žšæžbɐe˜ŽNš¸ôzĮÕĶĪŌÜWkø=øú( qįũ‰ägxå27ÕqQíßP SžDȁáøÄ×îëT :֘x‘N1ˆvē:?fU€ĮÂûv…që%ÉŊ ~;&ąŌõ]Ҍ­Ũu[ėŧ ÍsÚļ͈&+ēlŊ• Žx‘ü\Ëá-„Ķ™ ­āܗ'ŋšŗėÉKŌIĩ˛!aöĶhbšcŗõ)M’üī‘Váß.:a’Ō'~\Ÿ"’B•< ‰CŸœāÉÉÉÆėxŸTĘ@ũ\š:ØÆîĀÚtûLœåÜFˎčkųûŽÅ ž˜å$Ī^IÉ4ØęLĶ`NŖLëlíKc,QĶ4MŌ_ÅÍ×v{°×ɏú™/ÚĶ Ž!¤ 6ÁqIŲ|„Ė€æŽjČėßnaãNį9{aÁÜ#s>Ī]"kŖÕYãô} ëŗršŽ;,ŧŸ0ė§Úūiâ(â%÷i„å%Ȩĸˇ?ĒjjŖv|đB#qāŅlĶEĒ—Ō8cģĀ— Ŋâ%¸UŅIŠ (°†BŊuū–‡vâŽĘ‡,ƒX ņķ)wÆ˛(a ;SĖϰ“`Nų=šB‘ųæåķŗZnĀ!„/XREĒpL)„5š ÅbXHŠ­ü<ÍÅÄ 1lt25ÁÍr(šÄ…*ĐâE â%Î,CŲ$˜ŠPû”ëoaŖk1qX'ĒŲ”Ä%ūĢ4Á3ė6˛ˇgˁĶÍnŧ` Š2{I"z3ˆŖã-@Ņ&éfW;ö!Fx`n*ĘBHŊ\”k{[Tŧ”ų$Č˙öWíø°Žx6lwÅmy98ؐ-Ū"ßé ~7]‰áHΐ “ ˘˜HÃÃ3>#x!]2 ņ,ˆv;­ČjäŌ&`ë|ĮUåsz"((\ėÂQ¸&ÄXÖ d˜wG^õŅ“õ“|BWŨn đ4 bHl4‹‹$ĸx.…*Bí¤¤đQ%x\¨?YÛį#s7ŸāĐ'|`š%S ļŽáāWƒČŲæ" ƒĖŽ‹ qŸ#ƒ&ÄK|Ŋö9YB­&Ȃb˜ãyčQM‘ ėâoÛ0ãŪ,4.ō€ãÃ)ÄlT‡b:C c; q!6쐒7ųT“ ¸Ā_1h:l¨ ǤZ‚)š`HzChH†%é’ WC”~Ņ`ÜXĸ$+ĸÔTŲU‘tKTa$i ¸šČ'LŗtĢŠ“M~Ë`'0ĄÂ„XM¸Ŧ–L ‡‚"ÉMdQÅ°Fj¨8ÄųfūŋšĀ!ŽfČ⁁üĀ”"5`BIZ| I–;@ a‹ĀĘ¸ŧ¤™ˆ@Å[˜W™¨$hi ‚œ FĶ^Nđv*ƒõ°aAđ‚ÂlL¸¸ņō*é:<„?аd!1‰÷’a"œ‚ŧb0]ą-ÁŽ5Šaā^ ÷*“T´'5˜Aœ  “ĄÅ… tq*킖 ĐåIi˙†}ĘĀQ—tœŅŲß=ž+t$ķŅņķ, €ÍōŅĢÆËė?ĻĨÕÚŗÅßîlŗI2ƒØ˛M׿_Œnæ$SH­ \,Ŋܞ*“Îâvoū4žE˜Ü`äãņ"ŖØÉr ĄūÁ–ÃaĀž…P0ėDĘ[N"I8B~đ Døél Š`åUÄģy°ķ_0\ēŒˆĸđĪÚ ĸxĖÆ‡uĖßHJ še4=fOę {§ ¨lŖãCüŪÍĮšhD|T& åī:ļļĮ~„Ār&b‘ģŸ›M%šõ0p+åîķ|Š,ĻXŠũ˛,iŗEŗx߲ {,~q:ÍÅÍūîú_Ä&ūv)÷`=éæ”˛­–ōA° 2‚x:ËÅ,ļNī&įÆTsī“ōpí9y.KÜøqΞ<đVĸ Ĩ>Ĩ…ĸņ‚I=Đ–ã§Œ…˜ėrv6if59fŠØ€GĸVI`bgMyäŊ€†nÅVž'ļPY.T'dė‡0Ņ*G[égöą^}ÆË¸īÕŠâ5_uŠĩ*ü$Ū÷Øā˙ũ×ŋ ˇ9T?ŋôWĸ sČ4Č!ŋ]cCÆķļŖ1˜$š†4§ÜKŧ)ôĩßmAžæöm¨Ä•Í FÍđ€B%E0lןFp„ũīaũœæˇü1uģ›”â Ác6Üb!›Ō0t|Š%BáÔvdąŲįŽ$Ž+ã­c\“RûaįŧŨZĮ—q:ŋhÆŨ˅›ôæßįįķģ:i6åY_ēÚ=ŊļĶoʙ˛~h[A˙ž։<ęįžM/–ŗĒ?ž<\čsctņåÃ5ū°‰ÄÉR¯l >ģĘJ‹­ŲüHé;Øīz†ÛIųF‰˙€¨ŠF#!Kˇģ#ü—Ž…Ä÷ņbt}Ū4"aõĨf„Ą~Ûō7đΝ„ *q 2ŋg—Fė ōŠœ $€^˜,Šđ_VŠ{ÄVõ%UiîsiüßÁálãšKŧûq€ÛÍé˛ƒƒÃ0xÆđŌų˛.É׋ÎŨ3*Ų4Oą€úžŠ— •A•‡b^!'v‘ōgQŲh#NĀ9* ãߎ, Ú^9ûŲ<ǰŋ„ Ēe L/*Ē.•Å@w9œ8?…B…gj*ī&lēÕbg§ÚžĄ,ĖW ėWīPyɇ*ˆ=ŋzÎOĒŪą:˙v)Ã5øVŨĸCÍĸŨ7}eÎĒ íB›+žroâZÜčÕu5E€†"@`ÍŨ€bjÔ sކXŒãįRĻæ°Hq TĀb]AHøVîV>ė—úŠė0(?6XÁGō…2W}u HÛ|Č ĖĢsˡî÷×ŋ¤¯išāOßVY ¸Ŗĩ+>Ŋ­˛ÍäļžŒßŅ—‚ ÷ĩ{ÕA&2JŲ=ˆŋ‰w‚ÎîTĐ—ĸ¯h÷PîÍ}ŨQt„JVčÉXŋáüæžC?ßĸ˛*zŋ$đ­jęō.āvÄ}ģ/ß/æŪîŊŊ_؆ԀÚWŌBQ“š ~i'†daoÍ*z-š`ÂyÖ°Åze&ūŨbĢÆÄzÚĖØĀÄ?G‘p‘ĘZhē"h’Ží E ą€$Ią$0$MjĀG5XEŽ]5Kjˆ’F$Ë2ņÃ¨ËØĩSæŦŽNeŠáˆŧJu ģxŠÂđ)ö¤œĘųĸĒįCEŠgŒQÃËšrÍ+ĩ~YßaŋĐ:˙M3w°¯Ēēâđ øRÛEčßęQUË*ūŸŊ+YŽiÎw>E˙°}ŨŊđ—¨_цڨQ"Gē0°õ"Ą- ›‹sõÉaGøėƒīžØ/ä'đ#83kA6˛)Íü˛§9#KĄ–ŦĒŦĖŦ˝Ô0s†…õUs€¯Y´ĸPni¨Ŋ*–ą˛@+Úé,dAÃųkâæ•~#M_5TŌjÉ†%ŽĨLJ“TÁÄÉöš-¯āގV‚ fķĶ÷YUÂüh"%ļŨÚ͎†Ä•Åc¤õĸ/´N˜Ļŗœ잚ôķ´ō˛´cąiM&IøISEЋ!3-j‚˙<‚įüaKņU3_!oÍ(ÕāöVø‘“šdņ?øīø/=ĶJ÷6įū{<˛hÄ^ĘŦIIŧSdyÆĢē.¸{ƒņÂGsr2ÃÍÎ:Á?mÂīBé‚M˛ī ’¯ĶĒ&ˆŊm˛6IŽĸōzãwŽS–KåQ*ĸLÔļhÍ_Đø"tgš)9–ë$Éy×Õdž$?ĄO¸ĀĘŲuēfaÃrI^‚hĐáō?ˆļ“:ŽäũcåŌâĸ3ŋã46Šü&Š<Û”Ęŗ<‡Ö´ų)Op úŠŦÄ_ÂâFbūDŅXÜr"ķUŧŠ)%T)&ãÛ6Ĩœ†xĮî3‹M ¯E2—¨Oų–‹ČÉzÆGz5MĄœ5`ĒŽQ‰õ=Å:ZŽZ@iņŦ ^OŠKøĶŌZ˙ ˁ[^D”7bņšu`UYDŗÅ¤¸ęD %ˆK‡ŖœEšƒąy×ĀĎj|•ĀüJ3”•ëSäĶŲ’"]C?‡YĨŽÎe4‰zøĸžĒeĸGå=īÍĮüNLŦ–U°ēú5Í:wķžjŒõÔab4ĮÔĄø‹ĪĨít Ą¤+ĘŋhĐD†”Ô$ÜYw$ŌÃüAß@^ĩRâ/‰vQA"‘ē^Ũ˛D ĢƒZīm„´^M‘҆ŗÕõų*ũ¨yĻ?ë={ŋ=} ú/ūįåōėđąsæ×Ÿ'Ķa|™OÃŗŅëĮãų˧ĪŌ“ÃÃīƒÃÎˏëņņÉúô¸ŋ:›$¯|x÷Kr˜]ÎÎâO‚ŧĶ%ĪtE+Čk–¯ƒųŦįÖŲWRÚ0U҈rkÁcJ_md¸Z1č-BûC„f/ũ'eąĪœå՟īæ bĖւœ*ÄÍ )Bą_ŒuL´y´ĸÃF§ƒŖáŠ7íēIšüû Ō3rëņĘoõø•F \ø Ęܟ%„ķŗÎYžŖ}ZC˙$ˇŲ‘ĶÚûÂim÷€m\ØG]˜< đo˜pÃpo0°āZøœp6"F ¨Ā!ŲîŨ=Įe}æāŋŌÍÕĖ 9D…;"üÖC¨!…Ŋ7B^ Á(k†Y'á l`"րõBÜ@›;‚?ĀoįČ VŧĮ˙ęq ЉÔ2“ęb\ëaJ”˛D‰đq´'ū5“÷Yœ ŗö}c^ĮÄĐįâ!)Ōl_jAMZŒJ+F8"ĘŠĩyL-“õF(_ēT Œq4¸đŽŧĶŅQ÷t0õN‘;{˜+}V˛šfé2J/af‚ĀŧŌg\q˛ō°sAuŌåĘßŌCã™Ī|e-¤đđCžį…oq@ėVráO%?ˆ/›UKÕ)eķ˙ąņ¨@ŨØŧđŽD÷k¨ÍüęÄSūÆØ{ëÎfÕ(Ô´|ĩWÅåiĨ ~Ŗ(‚7wĻEšMüÅėŗ`ˎėũ#A–ãŌcEÉ3x­øKšFđ~ĄĀV,Ũ›QÉxŦĒát.vkkE‚7æ‘>ô•í|SrÕĄ  ŽĒpšĻy|ŌGŌL‚[ˆa%W´c™@X‚$;ú4%ë>ŋŋĨė^åŅ$˙40ę y5Ęž‚‡ņ wÔVō‰žˇš9%YčØžŧ°[HËÍšHßQéĪ)Ū\ °Ũ´RčëÄ)dƒØdx†ķ›Ŗ9g§eĩ@ĢYģäbAæ9gķ \” $đ¨0ŸĀfWģ¯a=ŲaÍv&!Ô+bV#ũ[ģæ-[†öû.8%87{Ø]^Õč”"ގ-Ãu–š8DW/ĄvĶßđ;#če1T„…õ -++´Ŧđk@Õ¨‚ļ´(–ĄËZn‘˙=Ra÷O¸yˇŸAYŌī€ŪĢ,]Lę´gå   ĒSęä":ã۔'ËA¤Ô$H„ U§>§—ĐÍКō h͖0/ë§;OõQ"üpõĀĻ1Žô>Ûų>îe{ؚącøcT ĻQjķ Ļí”CߒÁĖÆučnƒKQéUėĪA—6ˆ'îä–@}>¨á™ĨŠČˇ&ëlbŦâۊüėŖZ÷L§ėrxÁ-sxˡ÷Q 5Y8˜QĄ8š­XĶs)>—' ×%¯a°Čąü÷ûiŽūLXûįh ä÷ûüA‹žG_đį÷ø).>Y‰äįYŧ$øcņėFAxúæüíÉã׈jũæí‰QŒ™“äĻâ%?㠖ÅÅäƤ‘ëŨ‘lų÷ŋūZ%؁¨…Qo;ĄųŖņ°ß†ļíãĄÛˇGŽÛÁČĩq7|ÛéÛ]ßąûŨČÃž3ˆ]¯W ŗéëxų%ĖÕdŠ"ÂC¸"c2pŽŠ™ÍJ>Ļ™Õ0¯cgž~˜Yé"šļ$læ, KãpvvG‚ĩĪũ+K°wg´ŧjĉŅU-ŊāAW\šØļAkŦ2_ĩ/HW„4.*T˛$ļZ¤į0f+´-°•†ú.Ęa-„eNâ?‹ßXCÂpŪÛÚD7´ũ>BIŌ/ČM6"5öŧĐÚē˙q@0–ˆôHp–# ‹hĪ€´€ÄįøĀíĄŌÃo)+ô ô°ŒËøo*ŸŌûG}ôės'ÁŽM–õ7_mUļ‹Đ•6æls;ŠČc¯īXđĐ&Éᑩ’KŲ|ĻR åmŖ["ĩ ī\Čôį)Õ>örÍĪJēĶ&¸Ũ _žöŸyņųėɕ7OĪ>§X.^_?wgúķ‹k˙hôŨ÷oģO‚ŪëgöŖOŽ3<-Ū‡ãG/Ŗđ,Ė“ JŽ/Īž}¸x6LWīŽįéĨą nrėf!bH—VąÍ—pļ´\c@—đvņ{œĩHž&YXO6queŅžŖÄâåöjĶ¤yĖä¨ãÛ&øHŒáÛ Wŋ§ąy€ˆÉÃa•9ļ2A(ã¯}6‚?Ē ŋŖ_/`‰q€ãÃú΀—{IņĻ‹¯“œæĮŠ yY­<ŧ@žUĪĻŽŪ}dDŸ^bMAšD%^ˇ{đûOrŠŠÛŧ&4z*w”:.q ?‰SyĢlu“)?0¤ļHfÍĸ–t­üJ:}”ÉаPŧ¨Ÿˁņŧkb3zctápĨĐ?ę˛äĀĸ`ŌKXQW¨3Båæ×<>ŖĖųëöHËÚsY”`…q’Tû‹Š„x+lÁ:Pp‡ķ—"˜[|ÁųLMzÁĀĒõĨuŖĻõhŲō§´XūP€ųá*}›&4eQ|¯Ĩ~(ˆs.Ą´2ú›r˜ûWIŧ˜ kvëR)ŨP[1õSttđw—Ē‚˙ޏˆRS˛›}6õW—ŗ)ęēøŲÃē/¸„$Š­KPƒŽúM[ŧą06Ŗ(‹Œ‰Í ! >ŦĘc¨V^kBīĩ{p˜Žr÷bëe„j?•Ãķŋ͎}VŲ5ķ'@ŖŊ’ČÉËŦ>Âr”94ƒu^8Įz?›_Ëč=~!5¸ļ_šúKî@¯ĮãŲ*1Ꚑ&Jív™JĶŪ†ęƒŲ"LÖ Ļ3‚ƒēU˜ærQãQG *å\›¤\cˏ•HŦ…‹ļ`øMŗĄ5îę–hinqŨ‹i‹ČĢ7ĄvŨôŠâ–hƒ/WGå´§™īŠĮ0UũEiPpOŠ\÷AÃéĩ Ûų?ŧÃa„Ęũ^/yę[¤îR@2ÔŲę×~@ÕJŌbžî/ũd~žĘâx_ ‚-âyœfĶ…äií™ B4ö-€jīĢyĮk‰'ĩgx~žÖ ¸ak7ļĸ4Íi<Šî#^ÉŖÍMEŖš,ĢiIԊ›đD rôQ…“„Úec˜×~´6 GåįãQ–õb†Ą2{ė‚üDõũĪŋūãŪīˆ2[ˆPeKM4ĒvŖpŋ]wČĩ…]ær\k!b.ĘxbƒöōŠåi2]·\úM×BãW ‡ĄôMēC‹›$õžuė1žėúë|5ŗy:É Û΃RqĨyPK´¯:'F Ã‰9ņī˙ōĮ›k„`ĄũúĸņÃß`Y™Ļ@ļíT*WšJD¤¯ģœÄ]9uūųßūpSį,Í>ĸ\=ÎŌ9›gúk,*‘Ÿ­ļŋT\iā#žî¸÷ĮrÜ˙ĶüáÆũĀ)+ˇnîÆKÆÚr–Ėæ3 ?÷/ü诺dļēn9fČX›Č‚ŽÅAzEF%19ebšĩ# ?× /6J›vzęĢŦ˛&uX'Éî~°û”Íqã3f9čd} “{OXÄŖ8ŗYGÁĩĒ—YÂ4N–Â@9,dëXzGZ[‘Ųk?oų¨†jÆQ{2œXnā. ÄWĐ$õ5 eėûu~]­‹DΊŧXžĀĢļĻߊruõ9›Æ –ĸ`›3aãCĶŅ=Æą=øušIHnVâŲ÷j˛ãHTėr†v å4žŗ h˙ē–ŠĸLoÄ^ ]–w™ŠÕÍ)ĐáÄû—x˜(zQķŖ–/ĐuOōMÂČļcÆ>´ē߯WËY[čålĄ›3Á\ —į›|r+•)Î?0]rĄeÕՔiËU¸+?šyĨÎ 5N‹k35IF{ÂbqAhĢxŖÉI ÚĀ<Ž/”į§éŠSŠŖŧûëŧxøŊvjE›_Ė–‰Õe†yŽŧkëĢĶ­qļˇįÅsíøNmŽšĘūŌF€OŲL'ƉČH­§ ’¨e@ž \Vĸ¯küĨšŊtwžĮņ’ÃŪ ąk ,#áĐA44ŗ3˛ ōYŅž• ĪåĨ˜#)j6ÆčAúGĨN¸[7’K[‡¨n˜-˜ÛeķŲbŊBÄ#ą¸:]§ku{–ãŧqėũnoßŗŋëÂEy 7žnu:ųÚiƒ–ąÎÚčļĩ‘ų­ˇ¯GĩŦéD÷MˇÛŪ@ņé7ŨÂUų×ĩŊįî{#øŋļqôÕˇŨ.äH—qüąÚļū m“_Ū˛}‘QtÃ%đWFܘãįīÖģwQãōsĨģW™ĄOT‰[nbáVîM[XFčmûVV‹īrŖÎX{¸ôŌĀĒõŒ4Ņ…ĸYNĄM˛8mŗžp-ŗI?$ÍUļģ(ŗį ŸáÖŽoŋ-Uú Žš6ę 2ÁęĸĪ2+ÕĻ$Jļ EŠ)06ĩĄ¨ytjÃŗ9WĒ6ŋÛ4ZųnĄ‡$4ˆGģī´; 6đŽ5y¸ōƒ*({į7TMOĒ×ĪȂWRôĩj*ĀØoĒĨLVĸ ˙T‘nŋVÍđ†›Ē…i2˜(DŊnüc^1ēV<WĢ Æ`ŽęESõ¨ø…Q+z jE×"ō}GƒĒÜ FxX(ęī2Ŧ9^@. rXá­Š˛‚E!ļō9Ŗŋķˆ•ĄĨrYj%Ø•k°,zRGDĨ'ō$%ēĶŗÚhųU6›L€ÃéĢJcŦ|Ū’‘đGįÍē)Šŗ”/äĖ÷(ķ9ˆ*ÉÍQŋe˜ek˜į¯ŋŪH‘÷â‘=ėÃī„Ãn؍ē#; F#×õ"ßüQ ĮŨ8ŠB׃Ž? H=œĀÄ]W+fƒŲÚĸ§đmIK‘"Ĩ´~+ž‘ҎŅ5aą}ĪņŪØcwāDcßéöēũ(ėŲnÔ Ũ~/ Ũq/ôúa4píĄī†cĪFtŧÃĖ9x ËawĘ+ûoŠđkļ$:š5vzŖĮԂ“âåîÁü. 47\hōx…"īH!ā†UF$¨ō–bÃčęĢ`yŠsäČrüÔī€ī™üôéģ7yôúäŨûĢŗ×WĶŪtŪ×Ī'áŗõÉwīß ũ“—?ŋ|ūËđģžŲĶÁáûÃė]6õ_MŪŽ~Č~˙ōôÃko|ę ßø¯Ž×‹ū į>2B›äÜķi.ę-ÆDÍđ7KÃĸu!#ÅŊNBōDc5(RŅ9ųžw{v$gGAkc‹…;›ŪrļšÍcSæËbÅŧaXķhĐ˙ĸ,Īķ8DcĻĖ9bß ė ×ë÷íî°ßFƒČņēAßvÆŽ;Žŋīôû ŧŅ(öF°2Œ]ĪķÂ10­Ž×X˙@>÷;<˛MS@+ĐĐR´Ą#ģŦtl ÄU ÄŦÁķčė†B›ĐE*:oØ|05vĮ¨yǰĻčō”ōE ø %`<éeŦōUųbTžą’ YĘe(I)vOT˜‚ėŠú'ĀÔĘķÃ,ŸĪōœ›¤są×Û ŧŌŠ;úŧ¯ß‹(õĢ"Š6JÃ(q}žētBām6m2ŸâaåԂâGín?Ę1U8ĘeVo…ŲŠ úËe"kŪĐōfŨ€ ŖQ 5x´3] öՄZæá4žû{i6霤ãÕ%,Ž' …ņaŠŠœtT¸Š´â§û?fĨ—Đ-ČQH¤‹éÕšēFlOš§Iû4"žVœ ŗ Ŧ.nÕŅ/„K­;IØĸŒ <Ŧ[Z|G:o†ŦYEč4h’ÜW /€į™Ų{jĢvŽčfœH‡(Umd´úŖu™f‘éĨš ÔI].,Ÿ‡˛[rÎ_ĨË}fČÕ[ŦáßkXCĶģ Å7ÕÉĘWĶeØõ Ō.eÂĘq5 ą1Ŧ."ÄÍ3Úâ“U;LĸxĨkãĻϤŌÔ@Q|O{ÅígP Š‡5ØĮ–m­Ü@1$Ģ´›Ôė ŖĮaĮ *ĸ UÄĸdĩDW$Ļ!ČáƒŨ?}ČiĐ­Ž x;€gj 5C~b’], %›ką -šŸÅ•†ŧ „2†`™rÃá‹UjrĪSŒ3Nį’‘Áyæ'¤ŅhˇU”–cŽZ p¯žßTíq>gŨôĶķŸ„¯NN=žåëŸ×§—Į§é‹w.ö~éž~:}rūüė§ÃÃWŅÕkįäė0›įG—ĀoŪ'ž¸Ŋ‹ņû7§Ī{ī>ŊúéåŅģ‰'Ž5¨Ņ%Ėzā/Ēävmû}Ų¨‡ŠŦ÷ãāž|+< 8jĶCû@î%hžËr$įÆ<ôV‡Î[+9dPŅÜÛb¤Õ  =zsxtūũÛ7o^ÄŸR~Æ &CPŋįu‡QßąíÛ^ĪÅŨĀc7Gą; ûļxã.\ÄÃqo؋‚¸vGŖØq@[ĢhÄÅ)ˇâvæŖ?laÅāķm›ō'TŸvØ˙˛weëM#_ūž§ĐĮEßĐR¤ŌŪKū“ĨC€hašá“e96x‹í8$Wķķzķ$s~§Ēd­ÎBttĮÚJUĨZΞĢĩāŠVõz¨™J­AũŲEVžŖ]ΞĄĶģe†Øq xq+w#0øv°ãR÷ЁˆæĻkfhŞ\Ō= đ`‡§zŅÁãĖŸė—Œė°ôGW¨Ūāpœö8Õ§ü bC˜žŠ?Ž’BzŸSm¸eâ–mĒåüXš‘Sm† Z~… 3ĪmI̧%tÚZiE—Xō @€åą Š(F Ķ/:Ŗ*ņŌähCŋqü{YãZ w‹õ—â—W^CiVÄ?Ü|^DWÆbjo|¨CKŠ6 ¤$ˆîNr¸Ŧ§U“bĩŌļ ×ÔĒUˆ­YWcĮ˛8j–t“†` í{‹Ģ3ĒÍĒpß4\ģ?44K]ĶĘtf‰ 7éīEŽXēmğÄ2ˇĢÕļEÂ/a]ÁˇkÅ8ĮΠĢV˙’=ĢlíۙJĮÕņđÂ8‡%ë4™€˜2ú€Úå)éŦkĩ!GX™.*Ā*ŋŗoĩ”kŪhGūøū Ā˙ĒXÍQs”ˆ& cao‘ˆƒ÷ũGŦŌÛ@Ĩ^2œ˙K•Ŋ?°ôJNלĄĘWÂĨžĘ!kü•ŧ˙„S?áTœz3f„˜¯˜ī˛rŽūVdÔO€õMÖÛģĄĄzœbžÃ( øŸ č˙=(ú^–ŗė'ôųáĄĪLÔ­ ûÁ_Tà܌ HųŪđÆ@`ĮĨcĢTŦԹˑåģP{ŲM:¯°Ēķb…ģ€Â]ė„2ÆU„ú dÉf.G!Âũšn Wŗũ#ūašÅŅ톌‡ bHΆųŗÕKFņGÕ{⏖OPr˜—ē@:B|đZmw–Z‹U c*w s]Ž/9/Júˆā -­IāÅā–VRąxŅdÄu9TûœnfšÜDÔŌÃÉŽ[ø¤$ˇüy ũYŠjϚA…´I.¤ĖjR IÛîr˜^­l+ÚËiđ˛ĸŠ Tjŗ1^ģWŊŌōÂŋŧGŪëįĪvúËũ“ˇĪß=]ŋ;ŲØÁ`|ØŲ=>įīļ;ÉExđfú"~>zą÷Ęw7ļÄôlšvߞöžmžORą?Ũõ×é頒.ģŊc*QAP°šFX€Đ{y-ëŦņZ•?FaUNĻŌ’zÃ#\[CÚĢJ=nR„~­Ō›įG¯ˇ^ũ{ÔJŨĖļČ:ĄÛQ/ â^"’Žˆũ$õ"ˇÛēžīeÂëøqd‡Ž†ž#ÜNš‘G%ŽĄV’›ČË§ŽUú]šëʙ^И7ąW[¨dÔŨŒ'38’áG~&Í3?6#Qo õn—û6šž›VāÚ1čÜđô×Ļ'ŽĪ‚P*Z§‡OË?4­ØĨ÷CīUÕPSTå¨=Č1Ę ŅÂ:d€ŠO’Ë :(m^ZļÂŧŽCėûš TĀĩ\47Ø÷Ž_ö_<>ŠíĶOûƒw šŨŪ÷øÂ}ŨīEûļÃŅÛøüQŋ}žfīvwû{g‡G{Ķđõ“§[˓ƒŨtãÃŪîá§'Į{}ûɧáß/_&[˙p}ôcë¨öĶ4í9~ˇÛķELĐ:iÖÍ_¤pņ…gwC/‰3?€ãŽã†]/îØöŗ8¸¨ž >ú Ļo Ļū9@ēF—Ėíˆw.˙õ~-UÛĄĩāž^ü|¯āū}÷¯‹ŋćËŋ:OŸīvvĸ'ģį6Ũņ?lŊŗčđŲî|ļõéÃôĶöcįÍŅšĶ]žö˙>}ŧ;yü>8÷>ŋ:Ę^XŧũīöNÂįû.wˇ*y|Šāú*ũ éŪ‹WĪū=ÔŊˆ¨ÜŽīõÜ@¸Yâ~ ŋĶév’,q<ĸv¤“öDØ ;^Ô zNĪŽ3ĪétüĀ×BRNŽŒ…i°yL+Ũãĩ[FĪ â‘t F4Ļt2Ŋ€lŧahāuÆåh ¨íRØųˇ¯fĶ(ũģʂ”Ųg‚+×WŲk@¸ũÕâ*'qŦ8F* üRƒļéĀ5DžŽ¸[ÕbbŨĢ–?t w xíEßpüڛ ēŽcŧhēÍ-Rg/ŧSv8]XÔA+đqālžLî!Tf ÂBl5N'œ´„ī#Eā›ęŽ.}9‚d.59ņnšĒ*.đÕu›÷V÷zô –x‡d–g‹szuc”:@•Mh7ĮŸÜŠP§Zám˜“ >ČĻÆ2P‹ē_rÄ'ĢüÜŌõwôQ[…Ģķų€vŌwįŪ$07rĶ鲛X›ƒ‰ĖÅ-{{ŨŦ.Û\oļá“ÎÎFØÃ=¨ŽĐ ōŠē¯aŪŽRÔC ~=˙4ũ„sW6÷8Ãũŋ†ŲhĢsERaāTđ7 äāDE†ƒæ& §F\yũŽ*'D•;5,>g>$ø§ĩ<2q†4¤×i#tKđK˜KžėãœŊ•¸đMĸ•‹įŖtRZĶ.¯ɉ:ëĖ’1ēš&égc5ŊÖz 4HWu\6ÚoëPėiu#üĢ8LÃ=ˆú ą}N<Å'x"õ›Ÿģ—#“€ĘmDC”öYPđ[WáqÁ H)GŸÉaÁ‘cfeaūDK&…rÚäõĄĄÔ;dŠ ŸlŽôĘ-Üå2į…ž~š–rôĩî„ōh_˃ųüL¯DŪųęyĘæŒ[Öå†|o- ŖŠ´uēÎ:å*8™ŦEžŨzEĘ/7uĄÃ˛‰mÄĨđ ũÍM}eĒ;[ôįü#S”šœĄŒßGY]ĮKĒÜŲáG(íÉ6‘ųPūOžšōÄÄIx9"Ēe?Xú}ÁŽlFG5x•ՐkUåÔ¸žđėTU[%mčĐ'ĀēÔĘ]ŊoDžoJ;įŪĐCe›LõĒ˙<˜*´ĨBü–w×îĨéŲ.:Pîˇė.ąvĶȡ‡ėÄq™¨ÃTAuŋŠ=P-ĸcd´]ļ(2ŨŸš0W–ėĖ`{8‡í ŨC*8ąÛžá‚"?öúNj‰Đ˛…åE°6 bËEb>"5]˸âe@Õčop"m”;ûc +÷DåzLákØË˜ĸ˙ îûAÃŌĘw€ßH-?69 ! iÄ*{ū.b.ˆxˇ9^Ĩ[&Á­ŋõš™›Ŗđ—ļ Övz5Ã.aßã{uŒ/(?wÜlČĒ]ķÚĢC¸ķ6w‡ Mģ’6Â*õp-<Ķež† ˜r†ķo‡ũAŒnS;MĸDžb'TM[-˛„€=‹ ШqLģĶ‚ÄĸĀÛÕF Oq@؞ÃTøN´•?õģm~ĮĢWPÔōœš¨š‚ˡäp>XĘWh Ū͚˜gÄ$ Ėb$Ãlļ@¸¸á Ŋ0XÆúqž&cNÉ6cuÕ,įV5ކëBˇĮ‹ķžĘ,ũÍV‘mˆah Z:€ô6ÁOųtƒ˜đũ8´Aj“,­į: ôŦ#:cXĄŨÅOĄŋô-Dl *,ĮĻ5jyÕãŖõāŌ6BŗQĐ1 šÄą wWĩ D<üĩiI›ČŽK̘Ž>•õ]ĢfíWZ€Gj"Šš¨Ë Uy8KnC`Ũ4o`uŅ\MR=–ÜD&p]Pw2KĻũœ/fƒÎŲb2›ŨŒøę@z!˨Ig˛ø(bŌú?"Î{6™ŗVŌĻŖëIŋys<ük’~čܡ´"DåŪŌŲˇmÄŨ ĸÍŋ<;Ī‘8ÄŌGN_›;—.›¯úĻ8č˛f•WZgOÆsôKÁ9úĨ ÜŦF{Ņ‹Č'Ķl–O´”|ŗlLÆpĮ{Á\E‡S–k¯2Ņ Æ\lX‘ŠŨHĒv˙˛‚;ŠũŗE`חøÜPæS‘úÜß\6I~ūĄrž›‰Ž/t¸ąØáģ‰ė~hĄÂ-XĢë2W7d¯jäë?v{ŨŸÔ6MЏտš7Į=¯ã…khQMÕ6Ųų_IŪvŗ^ۛ"[!Xo0AŅÃ}{‡ޤOī„05Œ—¸.uķˇiA¤œą&ŋ8ŧv\VĨŠkfGßmFCŠ–-D…\Y_ũ ą![C—æšę1"ĮæéŲl†‰ČŗœČą¤ĩŽ…A]ŠÛĩ3•Ą)fųÃCRaõ”ę)"3$qApŗy2[¤yp`-"[?{l|äú~§ÛļëÆY âĖŽB7ķzI–ēąđí(^ˇ“ölmžDXRˇZHsƒ8Tg(žŅ æã;%NōˇĨŋŲvĪ{N؋;n”öü Ž;]ģã%ŠÛŠ'`G—}• Ŧ&Bá ¸•8o|•N†gŖą<uÍŲäņ-Wá$+šŧVõVĶŠRČSĒ˜­–üƒ›E'“¤ŋYđú3dōÁúϞŦ té|ž'#Tæt%3ÉŌ28/=ŌÍį8Ãį|Čdf€;Ņę¤Áæ6?ųvÄæƒÚˆÛĪÍŠk1ŗ¤e[ ”‡Ŋ–j.DXĘ4WŠÛ¤_>âQ:ĝՊ‰äz{ƒ!įįŨ߸ōiOĖ+fw˙‘ ĸcū„5Û/Éhúģē­b<ÖūĢú!b̓åÛŦ­ŅBgØJnĩâÚāZá T ĮĪ’! ã`nč‡ElŪ. A`I$W7’ņ`dj§¤ޏ˜…o!Bf¯ëĨ–ãš–+¤ŽĒ熤R_8,úôwU][ĖÍhvĮōb#°ÚaėlKq$kEʸ,Sdå’„‘áđ<§‚ŦŨr“ĒaŲĄj×õŲŨŗlę]BļH5PŗR´ČE q ˍtŦg[đ—â,dm–€Åļ#80ĨžrJęUDuų‚Đ}V:Å\FMžäet-€–Ę•­˛ƒ>ž=ļl§ ũŗ"ĨŒ ŖšåcÂX)­Â8åbR…)ÅUĪŠ'ĘĶ^ŨŠ.G>zP4žŖ‚ˇĒŲ­ÔÜl8זJ́z]vUIaßn/Əg“ŗi™tīs)Z*[ƒX{ƒqW—äå+bFڎ%SÎ8!m¸ ÆŅē?’ˆĢU“Ŗ5?Ņ ŋę{žG]Þ-æ2/Đą|™ĶÎŅjŲ°VĮĖWøŋÁŽģÜÕrƒ;¨ĶWj°ÜDÉ9¸ ˙,Ģ-ûB"Iŋ&*\õ$9ÍĨY¸Š2Ūi‚€#Ø*įhˆ;ņĻéč"´Ā]Ø5Ūi5l8›LĢ䟐O— qôŨy&IĶÍr\ИZ'ÜãÚt\\>Įdå§ōP%0Mfœ°$ë̃úę8׃q2”¸Šæ´kW|_4ėnŨ#ĘsTNŠZfcnˇaîdģ´m–5[ĨžQJÛä.7I}‹´mR.^å¯j´E;ņS$Č+DPŪoĸ ú3WŲi ÷DH!peiuĐ I÷aå;4*Ŧ|/(|í^Ļ\ë‹Ŋø…x/úŪßË_šŽ…ļŒˆÂ F'F2$j'˙,ŲyMeÉüÎF“(ôNļ˜3Į8Afŗ6ņN2&f•z,ĸ¯JÃf$ iĩ nŗ,u:†æL5ĸķ=â$ŨUK Ua>…Ēķ!#™"Ķĩ(MK‘+ŗfŠĶįĨųĢrČ<2ŖÉx‚,Ū+č>Ĩ——2ŅĨČk“מFāGÁpîŊkÛ2p%ŋJ™äŦŨS ˙ Ús*íé°č#ķ„>MŋUa%›Ō)h¨PĨ–›%įfQÚĶ HցUǤēÁ7w•ŽĒ’ |ÆxŌ#grūu*íW­áũÁ‚Ž‚ŨF!+ČÕČĩIĄĻfm“Ép1˜N᭐ŸšãsŠČmž‡ąĻČ<Â>Õe€/ņ€z6GZŅ1ņŸķ_GIZ)YÎÔÕÍæŸ“R˛Žrņ"ģöbšåžú@ōâĮƒÅūYĮؕĩ4õŠŲß fŋä ՁÅXęfËAŠÄōÕoŠ÷bžCËYÆ2Ķ„J a8}æ‰Eķ­æ‚0ķpÁē¸ž!úQ*ŗŪāq6`&ÔCdŖđuĻ ˇâؕ‘yt¤i0ŒxŸôoŲÆGČĨ˜˜‚;ņõTdĐ5üúģÄũ/˛"žGĪΎŖ/ŸŌƒÃá|8˙p> ’Wš˙ËūîĖ}><|ödtčŸÅûO{OÅVŋ›<ŠĶĪį¯ŧgĮoŪ?ī^ī=~áNNË§§ÛûĶ—§ī??ŋ–įgž• įf7ŸiÛŨOÂʨyōÎS™X9$¨`ēŸ…Lw*Ã0ûŸŪdW-fÉŧŸ&ß6L™Cû)Ž.ī}ŋļÃöE}Ķ9•MW߅am+]ksĄvąīû}gõÆc|9r8Í mÂxŲ”æĨ¸ uė¨rú圝ĩšŅ|Ĩ$‘a$Ē㔐2ŗŽÚXĢ€WûtmŅ*fZĘEtGĶāØûBĮĘé>† .‹H¸ōĄ%Šŋķ&RæĘ5í˛™fČrr‰˙–ĨŽOĪFSxĪ*ŗĢ•@VR))vmČ;Q'YŲ#š‘x8ŖG#Ä-|:c ×ÚžĨ¯‡ĖD+ 1s11smT‹ČžCđ]ä9Ššę‹Ų‹ĸ ¯úŖ'[ë•4Ö,f_$ē%Íú“!Ņ›åŅŅė͚ņ3Đ0į,ôõŠ0*:ߙL,“Ÿ?ž´íŌuIŌ‹JžōōFnŗÂĸWëŧÄ˙UXŽŪd‚ŨXŌÂT4%u› SŠTkƒqoRã/ę–įÅ% Z~†@ŠķLŪžŦX—Už1ļŗ[]j˛_]¤ĒXĸE@'ÅlJū†Á ˛ÉV (Ÿ:-äiĶģx•ø LNEĄ%1•´h´÷LBQ8POüõsÄ]ėāŅJöĮp įå<šŠįŋ@^ņģ!la+ē÷WãÉ8ĩ¤ßpžöÚ^ײAŧĮŽŅŌéH'įķzŽō\ËK3›mČB›¯q˛ŗ;éĮt6X&é…ę‰ēēĒ/稿Kyr‡ũŅÖĒCUķĻåÆ!+돛t§Šâų"YœII-DĨŋ\R÷–/¨#|l믕PM|EŽå<{rīpgåԞ”`éūd”IƒPĨ<•+ûa(åÄmÍ9ŨņÎōÚ§ŖœRPS‹Âk:D¸øŗ)ßŋk'nK(2ė×ō•Ę%>AĐTJa ¨Ķ|×đ¨4´üØō,;dbŅ‘7‚âˉMË›'øčHšM\]RWiԂ˜=åĀđY7#yq$f—ĩƒPĒY+Ädžk.NĄ‹ĐE‡^ĻwŦũŦp? éøŨQŲ€õmžāĘ聏ūØĄÔMxnßŗBW*æ<Ų a,SHŋ5AMúP:×āF[=r ųËžy;ûz–‡ķ#“˙ĢŅúšØũŽxë+@,“éBuĩĀę›;ōDĄÃ¯‡˛\;ᒔ-ÖöųĨ,ĨúŦŽ˙¤Uēܕëw¤Kb8!6j]ūúrW’é@uƒÎnnŊ|rûæ‰ Ā6ōú­ë74é .‰0Pgw0-杚Q]āŌ›Ûô{;„—t8×ģҧzo],ōųæåÖ$Î+˛Ÿ-æV•MGtks“Å,ē*V’ĢeŗžŸ§'O Ūc­Gž_ZWZdĶ+UɃ}ļ LļšũļI "vb† Æ‰`ÆâH”Ex#Š€€æĻÚl¯A7nž0\{/Ž+Ž`ēÁū”Îļ“RIذßų„9ųÛéĶ qāĨ„E`˙AUÕ’ ŅFâĀÁœØĪ’q¯m‹ƒŧ{—#jօëē‡ûpš —@ÍļۇszŧäsÎ*L'ž,q ģ’P Œo׃ÖšL­]¯–a)Ŋ{ažģ2…{s^÷ℯŸōŸ ŨßOΌ4˙ī˙Ī xÍŌŽE?Y( GI‡h˜oĩ›8Ą€‘Î&ķš wGģ‘PõÅhr†É™_ŒSēƒÃCc@áŒÄŸįũÄw„ų6ũ{ôZ,ûéÎpīøE’l==Ū8|´:*ŸnŒ.–Ã`Ī=Ų9Ūūrņ9š|÷zūhā÷–_ÆéŅģķ‹ĮÎÎQ/ŽöÎ7^mtF{ī/§ŗw‚c ĘåTČŅžņ)Y&˛ģԘ’Ö”×ĖŨs$Ŧ ”6†žŽĘWžnČÍß9ĄŠéĮŠ'¯g}š3lã67¯5^õ:Ü~=[z/v"ßöžėd’ķžķęËã$=´ÃwĮ‹˙kīƚ‚đ_Iųj’lÕVĄ.˛ā1^ŧ á ę¯ßiDÍn*Ļjōb1C´ÍŨķ}ŨŧH’e—9})ĪcôkĢĻ;wDÅėŖEw­rßęÆ,ãÄĒËĶųß5ô īešö=€sj€\ˆČ4ĪŠáķGļ…ûMkĄ% #S3„ĮŽÃ4䲖 UfXž­HQô\~2*MëÜĖMÔ6?ÅɈŒ$ÕQöwŋBu)#ŊÕ×õ§G1IŽĢ<õ-ŧR1u›ŽYؐū =Ô]AĶYEq§ķVo(lŧ Ŧ÷5YGėë`hYĄƒFå:ķ[ķej*Æĩĸ¸FŒÂį>ŗUÖ~‡¯ ŪÖY˛‹ÉKžXíQ˙0>ĸ{m¸’ĐEÄqt•æø3ē¸Ęz˛ĸĻŦ ŽFL" Ŧŗ{˛™ŋ§ĘAƒmŽ{ƒ‰ĪHIsÎņĖĒĶëKĄęnËi•¸ˇB:PŊjülīąŦfTíÎ7ŠUßķĄ ]W¤?7Qîl›ĢŨá÷‚R?…QŒí•J„H@AÎŪÉŦžÄX{ŲĨix¤ļzēYĨĪûļ†ūOk¨Ā<ķ‘+Ņrî! ŌŊ†QÁNzMđ¤‰š&0÷ ‘áö ”J+-f4đpį᱓æBÍŪw{‘˜˙ždÄ×8 wƒxW–ėÍ1€ĪpØŨá<ĩr :dgûŸÅČnœ„´'Κ2éHhaOx$ ķ6o´6Sëö âWâhDŧÃŖ˛V!á‘Oa¯*īHškŸÖŋ^ÔZ?ĀŽpÁĒŋøˇĪ I9"ܡų^¤ļQĘo Ū!°”9pŽĮŅávéį1cô=T2ÁNhqĒĀ@„÷,ābFxŠ$`ídŒ”EŅą‰‹nālīŦ€EfÍ,iŅtüiO`šė¯î~Ą]ÉR0§ ĸNo:čÆô|hāˆtžĘ–š‡G[R°Ŋx4‘~ßÚA×"vøPKüĸ–P•Iŋ> jpeg2.jp2UT Ė™ ^Ė™ ^ux ččŧ:ŲvŖČ’īū ŽúL߇.ģ ēė—÷*Kō"Û%ŊxH[’,=Í×Ė/Ėû|Ę|ÉDd‚ŒdšėĒîsŊˆ$‰ŒˆŒ=ííáΧ÷ÃĢ!(ãč`ī^„ˆ$ãũMZ{‚đ) Äà cZÁ H^Đrŋ5+}Ņâ0Q˜L…œFû-/)Ä,§>-Ũ %0Úoe™ÛíqX3GâR’BrĶøgP9)ŧ\!™4wͤ¤Ių‹˜”ŋ “úˇaŌū:&Ž@tŖtæI€Äd•&dņĶGÄ0&cZėæĒ Øā§FčæiQ¤y8“ũIŌd§ŗĸ%ÄÔ ĖDQKaņ8Ëå~ĢˆĄ¨âéŲųˇīŨ~8Ī'ŪÉõI§ėëŸ]%KĪâqGžœĸŪíĶä›Õįe>2ī’ĢĢ7]-îÎŖë“ŗy8ŗŋÍn†´o­Îíáb> ŧņū~‹o°(—-JËwšd›Û~NbēHķi!*ēéĮ D“ŠE|âʖį)ŠŦhŽŖS*KnÛlŖhšŗüq<J|éô’‹ûcīūaøåĢdéLۓi2Sū¸)†ĢRë FFÚ5Wį—úđ‹æNNĸēŠŪŋš*T6ĩëųyī6°ōÍtSĒΞk‡]ĩUulĪ4UĪŅĖŽĒ˛į†iĘļoų´!ŠJf*,$ ÛũÖ<¤‹,́•ʨö[‹Đ+ƒ}ÎC—ŠėĻU‰õS–=(b\{’Ņą*M2U Ĩ“ĸ¤šđŋ˙Ŗ2Iá,šmúŠÍ×5ĸ'îŅÂÍÃŦ ͤA˙×Đĸ2P^čDT(–IIÜ2táÁR˜“(ô?!õ/ô}šÃJĄ\f0%îbĄuа ŽJrô7\–e GNÚiËØĶ<ÅQ­Ž„ÄĻŲöö[gay>sļŨۏfĄ'†.îq§ēQà a¤,īDČĖå@:GSõĀķcč5§č˛ĸ[–ikēf*&‡"/a šúČbĘĮ"wëßåÛŗļĨØēúīÅž.Ëŋ“8ûsž¯ŖÁíĸS„%møŽō5h—äÍ ŗ8&ųō5h&Ĩø.Ŋŋ˛ô_hyĩ'nk0s%üí Ø ōÄŊ7ČTfĩ{nĨ›:ę–¯ÁūŒ6VÎōhĮžņ~T˙bUn:7ĖīãÛĄaAąHŨés&X¸> įTjã‘íûɅŲœčŨ‰+w'Sĩ?/úƒģåpЕģņ}Đ=öĸŪĀ›ö&C­;ųŒ&w‹ŪCWNēËŅ$˜t'Ę0ŖÁpŲ=ū<íĒ×Ęp0~ęĩҤĢvîÃÁŨž(Ôˇd_ļ]S,EķlC1=ËôŠát,U׊Ģy”øŪö–Š™—Šqę‘įhYPĐ@ŠB„güŲÁvĘé÷¨KÜh'öŠņņŗrrōҰäÎáĮÎĄqxøŅ89”mûHn ¸‰˜MȓXæ$)Bļ¨ĖgtÛíąŽ âSjˇi˛žN|EąˆmZ˛JdYS5ęwl¨3<Ų"×W)ŅŠķ3Äæ!8]š‹YF)iî‡.ŋ,GŖČMžDnxa^āė^õCk>R#™œß‡—qoîÜÚåđÛMJNWÃ$šŒÕĨÖ+‡OÅE¸ŨøūÉ{¸_y§v6:<Ķ;ãfrg^ONOoŠŌ?>ÔŽ)ü߆Ģrswfw.Š‹d”š@ËŅžøäá:ė‡zp˛ėēĢū` fq"÷V]Ŋ7¸ /_/sTÃ=Ü$Ŗ[äų´t—ˆįK<ĪČc:úv¸ždCĀé_cąķĶ bŌLG˛á띎bÛTą4›hD5}Ëĩt[5="+ÄqM_îX†íųß´J=KQ]ĪֈN[yƒƒŊĩPU_MéŌI!‰E…‘;C˙^3•S(ČíōC‘Îr¨ÜÔŖo’ÂĘk“XA#ŦÔŅwZf”ŖäˆwâܑŅĮi:ލˆ^œĶ<ôĢ:ĻÁôׁ1.Ŧ@^Ė _~=ŧøn9í-’ŅčĢ’+ߎ—Å7íi–_Ū5ŠwŖ­‚ûåÉéÂé,4*‹30ĩ2ļžîT=5nËû08–éĶBõ‹Ã_Aö­0žĻwwĶŪQJGIgqÕKYšZ.2ģĢ'“¤|ÔGW.ƕ&öÔ-Ķh 1ŋƒ´hšnĄüĶŧŽŌYÆzŗ-Ķl ˆÍč´ģ”iŦ s€w§ēWč×5>}‚*%!QÛÉͤ˙G†ë´ŧ0†<‚Įdŗ*„a9hŋ5)D\l¯oŲÚÜĒŽwŦŽfØoފRhĩ =MswõæĘ€Ac!QTŲˇÃ2 Y7\]6=•R ĖŽ-ĢĻ ņYƒø`ŲW-ߔ×´L+,B7sģ&AŌäôĸô…‰ĩĘ?Y¯ĀŋË?Ų zãķŒĨNbÂâ]e§™¯™hĐž;ĩŽi›ļ"ĒÍŧøŦ5PX%G…l^4•#[¸\Ž-(LSučŨˇLÃSŒg§x åÚx”ÚËt<Ļžp‘Ô' |W›ûB¯ÚĒ.Ÿë–ÖˎÉøu#9ØEƒ>e .ÔŪÃũ¤?¸Ÿtã;Ŗ7¸xM.VŨÕpŲ¸‰‡ƒŠÜ{čM‡“Ķx4Ęũ‡k}8œĢ÷&0^XJõÔáS˙üЃyŌy°åŅŊŒÎn–ŖoŊÕÅ$ ûĮŗîāūīfŨÉõō¯įõ›ĖÁĩgŸa-āÕ{Ģ;Ŋģē^õ79ŗWâŒŊĖ; ”ahLUæšzGZĄ ĒŲ}JĘYN›Û=ŧųz2¸ē<<:yŧí]^>^Ũôû§Gwˇƒ~÷äæöCdpsŌ;žčmĀn@ܜõģ]€:\ô{›Ģ¯ĒÅŊÛÁáåeqv~ōxtŲŋ;ė€ķÃÕáđ0}~rôĩéHrE(/Ãų~ë‰{-dšb3x†nvtÕÔ ĖŠžbËģcē:ąl?ųšĀęŨW›ų­Äû8Ą‚į%)1×đ"bĄÛäĒíŋĄ.v"G|‰PĻÃņ‘¯ŨudčØ Å‹ēzœŠaŧuĀķcVx,ŧoW˜ģ^’Ü™•Đņ7ķëaߕҨÚí ąÁÎģĐ<—n›Œh˛ĸËöûXiāHéĪ=ŧ…0›9 ĐÎ]ĩō›;+ũ4Ÿ6;?&Ą%žģ>æiZū=Ōj"üÛE)"JsúČÍõ1&9´ËYD\ú膏nI1o'ģ¤R'ëįÖŃb<&øÁyŨ.gõ÷ŅįÃŅ×Ēø-ŸŠĘ<ą(IYŧR2’,Ü8ČōpaŖ.ÛlíKwŦQĶeuđĖ:ķJR˛ŗEš%ČGšdĀ~Ģå˛Ą.¨’j Ļdh‚!éĄ#ļ¤K2\ QRøEƒpc‹’Ŧˆ’Ĩ˛Ģ"éļ¨ÂHŌ:p54‘O˜fëW'-~Ë`'0ĄÂ„XM¸Ŧ–L ‡‚"ɲ¨ĀbX#uTâŧՁ?āWX8ÄÕ <0˜R¤L¨"€ I›4É6p¨! l¸Q2ƒ—4¨x ķ*•d TĨ cĀĢĀ ~Â.Pe°6,¨>PP€ 7^_%]‡‡đ –l$& 1ā^2L„S#ƒW Ļ+ļ%Øĩ&u ܋!ā^@e’j€ö¤Ķ!¨‚sBa2´š0.îC’ ]вē<´ā‘&đOا ė€9ˆē¤Ŗā Kdŋ+Œ hWHæãƒ=YŸåŖW—ųBk¯ufe™&;\WpʄŅ‚ų xūäk[N;€ŒQȃķp\Ø°ĮPí‘ÄŖ^]Å=ĮlđŅÚáTŊõšŋ–H(F×bÛ'Õ×}Rą~Á'Й"Øį`‹G˛`ŖG;ĻČFĸ"ĀUTÎÔå™sĸũ ŋCÖ¸€:W1hąB‰öŖsũ¯ ė˛á{—TęaĄaŗGę6ũĻÅ×ôÁģLŦ1yJeyĒĄYœŦsÔ¨ÍŦËĻĶĒk~ΞMœCšƒ˜Õ„¸ä,÷7ŨVē~6°›UšÂŋĀÉ4ōĄ‚Īņ‹ ŸÍ2(Ãĸl"ŪvČŊíœ˙‚á:düC…ļūSÅ6ūÔÆúä”€Ņ<ÅŲ{ŌNŲë]@o|ÂĪízœ‹FÄGuRÅcc{ėûŦ`"yøšY÷’C¯Ņđ>Ī×zÁfŠ•Ø/›Áš6[4Kv-[ŗĮĘč7đ×ĨY)Žŋũw78-ü"S¤Ā$FŌĩ•˛­ÖōA0ƒ™a’ÍJąˆ… ë]×ÜXjî|R×ËķXáÆÍ}2+ĘĐ_Š4û”VŠÎ .ū@[nC1aąËŲY—™Íâ˜=ĒršDĢQĀūÄÎ8šÚäũF^ÃWž'6M¨nš“ 2ö#˜ĀŖŅ&GågņĄŨ|ÆÛ¸īÍŠęe_sŠViŧīđÁ˙û¯˙~AnmT?ŋôWbsI–PߎđHÆ÷7Ŗ1˜4Î"ZR%^€TúÚ‡6 _‹Gģ6Tã*fĐŖh ĐILÛíĮ1˜pđ=jŸŅō–?Ļ^o]R#x†,"7 Ø"TAmKë}nIâ 1Ū0ã*™ÔÚ7ôéōËg5ĒWËÅāé:¸üvėõÚėūüîĸĖ‡Ã“īxaÉøėɖbßũĄ)}uųÕ\|ŗįĶŗ­XߓĄwŋfG‰>š§ŊņúÅģ[ä~}„ø*(-ļfũ}Ĩė`wčEî'õ{%ū]ĸ&:D…"wß>á_{­" ž•  đC#5_mƘę7= ˙üb¨b ‘— ō{iÄ) Ž(АBčGéĸJ˙u—ēClÍXŌ”æŽÆö>ÍÖĄšÆģ„MpВn!ÛÛû…Ī^_vJ˛#ôbp÷F5ÍK, žcę%CuR劘÷ÄD(‰Bæ‡úYTÖÚHRN  ¨ø7ķ+ƒv$…Wėq7#ëG ļņ ™°Aĩ>#¨Ë‹†ĒkDu3ĐĀ]Oņ".ČĄQᕚĘO“*6ŊfŗŗÕm`ÛP7 æĢžXoQyÉ‡Ēˆ=ŋzŽOšŅą9˙v+Ã5øVßĸCĪĸŨ[2gŨ†vŽÍ•@š7ņF­nôæēŠ- Ą Øa‚n@ŗ=ęš9W#lÆņ˙RĻæ°HqĄUĀf]AHøTîÖ>ė—Šė2h?6XÁGōš2Wu HÛ|Č ĖĢs;°īw÷ŋ¤¯,OņۏoĢŦÜŌÚŸŪTŲzrS_Æ_Ņ—‚ ´{5A&2JŲ=ˆßÂ;Agw*hˆK1P´{h÷択ę*ēB% kôdėßp~}ĪĄŸoQY āWŊ_øF7õyWp[âžŨUīWsoŸŊŊ_؆ԁŪWŌ"Q“,?´CC˛ņlÍŽÎZ4Á{Ö𠊝•™ø{‹G5&öĶfÁ&ūēŠ„‹Tv„Ļ+‚&éx¤("„+)IøW ֑㊚-uDI#’m›øĪ¨Ëxj§ĖY_œĘRĮy—.ęžâ) Ā?Lą'˙ĪŪĩtˇ,įŊ~EŨ“daC$‚$tmųښą%y,¯ä×lt@$!¤D*gļYå$įä$‹ėŗIūP~A~BĒĒčÆKĸė™ëäR3–đhôŖēģēĒēękųŒÉįBĢį—ļÍÄ;Ǎį[ō™üĻBחúŊXöE¯s÷fÎ`+ģZcø"Ŋėmąô–ĸ(­¤ 5˜nf}Õ|áK–­(”[*jA¯˛e,/$ĐJvzËŲÄû á€ü5éãæ•~#M_%TŌj×#“ K\KC˜”&ŠzC $Û5›­āގV‚ fã͎YQÂčáPJlģĨ›‰-*#ŒHëY_hFqʲ}YMú9.ŧĖíXlZ“a2íIUEЏa:`Z˙yĪųÚâ‹fžLۊ'(ÕāöV˙Š“9gņ?øīø/=ĶB÷Vįū {<´hÄ^gĘŦIIŧSd9áŠUY<ŧÁx 99‰qGŗąLđOđ;Qē`•ė{‡ä+ä´ĸ€ boŦM’Ŗ¨ŧŪxEãŨƒĶ)KĨō(Q&j›5ž7Vk+ڏōzŽXh¤ -ÛÑ“ŗ@M°ÍļāʄdI.-Uš.QHø—P% ‹Ļœˇ[ĨbĢTl•Š­RąU*ļJÅVŠØ*[ĨbĢTÜWŠøŊ%X>:ļėV‚ŨJ°[ v+Án%Ø­ģ•`ˇėV‚}¨Ëß<ĐĒ-dØro ÕuģÛPˆÖ,ŖY‰cđ=f§ĐÖq4Y2‹a˙īĢ•} Œ5+˙ƒ|§âŋTj5$TšīôDGP¸$yE¨ŒĻOķW4> Ũ™mJŽŲ2IRÁĩZ”ägô đB)[O—Ŧ?`š ĨG¯Ä4hđ ų„ŪƒI…ō~ŒąrĶėĸ3ŋã46Šü.ŠoJå8MĄ55d>æ îA_‘•øĢQX<ĐH˟(‹[Nd^ ŠW1Ĩ„"Åd|ÛĻ”ĶÂØ}æbą)áĩXæõ)Bt9aĪøHOŖâĻ)”“ãėCõ/0*ąŧ§XCËQ (͞eěė)u ē“[ëŋƒ9po‹˜ōĒQ,^ŗŦ*“0ž ŗĢFŠQ‚u8Ę ^”;›w ­Ņ@ŠĘW ˝éeåōé(žQ¤k?HaVŠĢ Mĸ$¨§j™čQyĪ{ķG~'&VÍ*X\ũĒfģy_UÆzę`1šˆcęPüÅį‰Ōvš™PŌb˟4€"CJĒGn,éYú´m€0ŠZЌwTTņ×Dģ¨ ŒH].î ™!ÜÕAŠ÷ļĀCZ.FČhûņb}ą˜^ižéˇŅņÛđõåYĮéŧũĐiŋ;ŗWŸâWŅķ×~tēŋtŽo¯ŊÛˇķ˛n˙đĻŅ œŲíhũiõîË͉}v5jž§‹õ x>Îl{ūˆ áudŦ ¯Yēėã,œ[dßlHiÃTE#ĘŦ)}ĩ’]ājÅ  ´aėš= Bœd”Å>sfĢ?!ßÕAĘ­9"ˆ &šNU„b;ë˜hķhE‡ų:GŨŪ¨õÁMZĖĩāß-HķĖ=jpr˜=ę^ģ#e–”fJ 63rkôĸEPęq™f•FL\ø Ę8ˆÂųYĻ,ßQ?­Ą’ûėČií}å´ļ[Ā6ŽíŖ&Lžø7L¸n¯ĶąāZøœp6"F ¨Ā!ŲîŨ=ĮemæāŋÜMÕĖėsˆ ×'üÖB¨!…Ŋ×íB^ Á(k†Y'ául`"V‡ĩú¸€6w€ßΑ×G`Xqđ˙+Į5Č&RÍL*‹q-‡)PĘ%ÂĮŅžk&īįQ*ĖÚOĸyOC@Ÿ‹‡¤HŗItŖ=Vi1*­á ˆ(§Öę15K–Ą |íR2ÆQįÚ;ō>øG͝‘÷šŗŒšĐg9›ë|: §703A`^č3Ž8YyØš :érųoéĄq‡Ėgŧ°&Ōxø!ßķ¡8 v šđ§’D7ÕĒĨę”ŧų˙Ôx”Ąnl^xCâûUԁŋfAqâ˜ŋ1öÄēŗY525-]ėqyjé‚ß(Šā̓i1ƒI|+ķ=ģE˙Hå4÷XQEō ^+žÁ’¯ŧCØ˛Ĩ[c3*U5œÎÅnmŠHpnîéC_ŲÎ7%Wڀ°Āá¨ęĻĶ4ē é#i&A„-İ’+ÚŠL ,A’Ž }š’uŸßßSv/ōh’*õΆŧea_Á“y;j+yæDĪÛ\’, t†OšŲ-¤åæB¤o¨ôo.PØîZ)ôuâdƒØdxœ &!Ŗ9g§fĩ@ĢYģäbAæ9ãņ.ōx”™OāFŗĢĀŨˇ°žė°j;“@ę1Ģ’ūĩŨ퀖-Cû}œœ›ŨmÎV%:ĨˆkĮmËūr>'Lq$ˆŽ^Bí*§ŋáwFĖb¨ ë -+ ´Ŧôā׸UŖ ÚŌ>ĸX†f,̏EūI…Ũ?ãæ}Ü~eIŋz/æĶɰL{VŪĒP :Ĩ>@.ĸ3žMy˛D:@M‚D˜ŖęÔæ4âēZ“­Cĸɓ8Ŧ Ÿî<Õ3D‰ú‹§6q¤÷…ØŪHŸōq/ÛûÔÖԈÃŖX0ՈR›o¨0m§ú– f6v¨CpÛ\ŠJ/ĸ` ē°A<|'ĩîķA ĪĖUDž5Ygc÷V˝Ôēgō8e—à n™Ã[žŊoŒb¨É‚ĀÁŒ Eaŧ`UĪĨøœŸ$\—\Ã`‘cųī˙öËrēø#!î_ ’ßīķ?F,ø}ÁŸ?æ°¸øDd%’_dņ’Åg|°ũøÃņųÅûŗ˙Œ¸ÖįīΌb˜$7/ųg°,N†0&\ŋ˖įđë¯EĸŅŅOwŊū ŲęÚN§ė ×vÜAuZ–×éõúaˇåxŊŽÂßí;Žßj üvč´[vŗßķģ~)ĐV¨¯äų—0[“N‰Oä éĀųĻf8Ëym˜†VÃĀfŒžņô2ļĻ“dmIāĖxŪĪ}ŦÃŲŲ5 æ>V–`đŽ?[U"Åh*–žqĄ‚3.MmÛ ‚ĩLķ@ĩ¯7]Ú¸¨PΖXk“è-¸ĐÖW&臨‡Ĩ –)]ˆ˙,~cuuÃqk¯k#]×Ú&Iŋ 4RØˆÕØōúÖ^×吞DŦG´ô4-ĸEŌZŸãˇ…–HŋĨŦЇĐÃ2:.ãŋŠ|JŅC°ÍŨ›6Z؟/žîÚĒlÁ+mĖŲæ–‘Į^ÛąāáM’Ë#S%į˛'MģO-`”ˇŽ‰Ô.ŧs5ŌķĐaRŅræ™Û6•@é5Â[‰<— QVhŅ÷‹Ū%OÆiäļčžëR!–ĘįöM ĒØŊF8@l:o°6Ų{čb„¯ĐÆCfŸ—Iīm˙š>㸜ôÜQßy{Î!6FB‹uʔŠē{Ŧų”7Â,}^ Ī ôy-4uÁ˜"äŌ.â‰ú6s-šŠÕBĀR‚Aõ,ŌØH,qRm(útÔĨú´Yąëīĩā0*ˇ=rNRÅ[{<€á•_ŪéŠi$֙Ö8JS–¸rƒļÁ#ĸšqnŧą‰[e•,1גĖÍÅ Õ0zŒ‚Ų.^~ã¤<Ā=øMĄMŧ yŗl}討hĘAÉt˜×>ÅĶL` &ņ˜īX‚€<€õ—!Düŗ¤%=˛ų§ģf¨‰ĒĐ×ã*5ėĖÉ7'rĖEĩCũpøĢ7ĩ/xJĩ“=[ō3“´ >IĪŖãWŅËÕéŲÍۛQsÕč|™œœü—+˙üdũhũËúęōđúuģīŦ^4ģÉįazõs§a˙ōčä‹×íŋ;zë-ÛŖāEķäķÉdāƒ‘=xûÜØ79vŗ1¤SĢØÉæK8›YŽ1 sˆģø=ŠÎZ,O•4Ŧ'€Āē°h×Qĸņr‹ĩi‹NĻiÄä¨ã'øHŒáû ĢßĶÜÜAĖän‚ĀĘ]™@”ņ×OmæÃ VĐßҝŸ`‰q€ãÃú΀—{IöĻ‹¯“¤æŽĮ˛ yYĩ<<ÞUĪFŽŪ}dD¯^bMŊiæxŨîÁØ’KÜę5ĄzГPš[ĄÖq‰SāøI¤Ę{eĢMųĄ!Ĩ@2+kJĐõō•tûȓĄbĄ €Ņ`,ÆđŽ1ˆÍ菑IĐ%ĻÅÂ˙(˒C‹IĪ`E] zĖ{”?¯y„Fž#ō×õ –ĩ%æ˛(ÁęGIRđÉŒūĻĖ/ĀđŦ)ƒÕ>$Ë.,5ĖÄ– R°áēŠ}Đđ˜Ō‡ljÁƒ ͧ3ĢYRąâæ¨9(HgM,Q§ãÜũ3ë/S`—"Ģæ1™ŠFņS>Ę>ß*O[åiĢ<ũPžÔt­āe suú'´ Ėķ9ģŠÖ0û÷؟„T$Ä[a ÖĄ‚œŋdáÜâ ÎgJŌ VŦ/­% ,Į˖?ĩ°Åō‡jĖWéû4Ą*‹ė{-õ3Aœ Ļ5Šŋ*‡q°JĸÉYcˇY–Jé†ÚŠŠŸ ãƒį¸ģÔPxŠĐĀE”’’ äėŖ`ņw)ĄŽ‹Ÿ=+û‚KHĸØ˛%˜āĒß´Å c1ÅYĖ™ØŌāŗĸŦŅ0†jáĩ&äĐ_ģ‡ĶeB_l9 Qí§rxūĄŲQ’ÃbžfÁh´—9y™ÅGXŽ2‡Îa;ËĐÆkŋĮ!¤—öKUÉ=čå`¯P‰QĪ…4‘kˇÉTšú6ē~˛5}0†8¨k…i.Uî5” ’ĪĩJĘUQļü`‰Äš¸h †ß$0ZãŽn‰–æ×ŊՈŧzrp×U¯(Ra†6ø\pqTŽZšųžz|S5HP”÷,Ëu4œVŨ°¯øņ#\~č÷rÉSß2 u—B’ĄÎVģôú¨T’ķt$ã‹Å<Šöĩ0Ø,‘Gjö`ē<­=“aˆÆžBí~UīyÍđŦļAŒ'čiŨ€[ļve+rĶœÆŖč>â•<ŪÜT4ĒË˛Ē–$­¸!OÄ ĮU8I¨]6€yŨ úWÖ&Šü„<ʲąœÄ,Ͱ.ČOtTß˙üë?ūᓆ(ŗ†EļTEŖb7 Wđûu‡\[ØM*ĮĩT æĸŒX 6hĪV,&1čúxBä,˜Ķát54~;qؗŪIhq•ÄŖŪ׎ũF˜Ũ@],FŅ|<ƒd0ß΃\qšyPJ´o:'|ĐáĜø÷ųë›K„`ĄũöĸōÃß`YMlÛŠ”+.7•ˆHßv9‰šręüķŋũÕMĶųĘՃųtĖFĀ™ū‹JĖہŸ+.7đ‘FßvÜ9î˙é?ūęÆũKDÉ+÷nîÆKÆÚr‰–ÄãЃë Ũ8NâÅēæ !cm"K:÷Ļ+Ú°¨4*‰É)Ë­Qø…^¸šēvÕNOy•UÖ¤ č$ŲŨOwŲ7>#–‚)`Ög0š÷„E<ŒŌū<îEao­ęe–0Š’™đP ķe$ũ#-Ž.„ØėĨŸ×|TB5ã°=P,7đ2â+h’ú…2öb™Ž‹u‘Ø9…ŗĖxQ×ô{QŽŦ>GŅ„MQ°M™°ņĄéč1ãčüz:— (ÜŦÄ]˛—dĮą¨ØMŒv å(ŗĢ Ž´­eŒĸhĶąWB—ŲCĻbņAĩC t8ņū'Š~Ô|Į¨æ tŨ¤+Úŗŧá9ŋsŦ1EÍʈ=lā@˙(× ë†LrŠëÕ ņ„šM6Ž'Ëb‰ÅÕi:MĢŲ˛įÜiî{îž×~Ô´÷›ų%ÜøēÖéä;h§ ZÆr^ÚF{ߊk#˙ō{o_‹jYŌ‰îyŗYß@ņéwŨÂÅ4 ÖĨŊ-ķá˙ŌÆŅWßwģ#ŨDŅUąmí;Ú&ŋŧgû8 "Ëâ é†Kāwތ¸1ĮO6Ū-wīĸÆĨÁBw¯2ƒŸ¨÷ÜÄ­ÜģﰌāÛú­ŦßåJąôx陁Tęiâ …qJÁM˛8mŗžpÍæ1I?$Íļģ(ŗį3ŸáÚŽ¯ŋ5Uē‡Mu™`uŅg™åj“%ë†ĸ@Õ(›ÚPÔ<:ĩᙋ+Uām¯ü°āCÄŖŨƒĪڝøĐš<[Ŋ§*,;ŽŌ;ĒĻ'ÕëgdÁ+Š?úV5pėwÕR&ËQĒHHˇßĒfxLÃ]ÕÂ4s˜(DŊnüc^1ēV<WĢ Č`ŒęEUõ¨ø…Q+z jE×"ö}GĢÜ Hx`(ęī2°9š@. rXá­Š˛‚E!˛Ō1ŖŋãåCĄĨrYŽk%Ø•k°,zRFDĨ'ō$9ēĶŗŌxųÅ<ÃéĢJe´|Z“‘đGįÍē+Ž3—/åL÷(‹1ˆ*ÉŨqŋm em¨į¯ŋŪI“Ų ;ėđĢß ĸČ4ÛívĐ zv§åzŊĻŨī†ƒĻãŲ(j6;žÛėõ\ĪĮuûޝŗA”luŅWøžÄĨX‰TZ Á•CĪČč{ébhŦĶnĩ]ÛB;đÚü?hĩƒvĶēŨ8Ŋ čúŽŨąŊ°:ŋ×īĩŧ0DžßęŲQ@Tœ ŧä¤e‚´;ųÕũˇĀFøŠu[’M‹KŊƒŲcjÁMņr÷ā~g@š.6i´Ā!‘6¤ pĮJ#’ l yKņatõM=E9~d>†ęw@ų\Æ/S÷ôrO<ēMSB ŅRŧĄƒģŦé1Ēˆ\ƒ§8Đ ™FĄ‹Utę.°7ø`dėQ ōlaMŲå)å‹JĀx2ŌÍXáĢüQÅ:(¨|c%C˛–Ëp’\üž¨0ÚeõO†Š:œį‡8ĮiĘMŌÁXëm ^îė}Ū—īGäúU‘TĨƑŒ¸>O;§‚đ:;‹9™ŽđHŠ|jÁq›ŖtĮ%™"(eƒ2+ˇÄėđƒŲ,‘ĩ@h‰yŗŽĀ‡Ņ¨GÆ<ā™Ž{‚jB-Ķū({Ķų°q6,n`q<Ĩ¨NÃLY‘“Ž WŅVüŒŋėĮŦô ē9 Š„t1Z]¨kDø”ûš´W#bjÅÉ0ŗžÕÄí:ú… ŠeG! {”1Į=ĢÅfߕN+ā!KFV> Ú$÷Â3<āņ܈î}2˛U;—=čfœHG)íd=hõ•u3‡"Ŧ—j&°'uš0*ĘnÎA1í3˝Ū"˙vˆÃļ˜ŪM(žŦN–ž’.ÃŽ‘v&­ˆ `Ŋ˜ãB!ŌHô\1Ŗ->Yĩ#%˛WēFnęJ*MÉ1Ų÷´_\*yXƒ}lŲ&ËC˛JÛI Éúw|,Ŗ" RY<Ęŧ”čŠÄÔ „:|ēû‡Ë”fŨęø€÷ƒyĻÆph3äw &ŲŲ’ŗģfŅ’ûY\iHsĐ@(c–)7žZeĄ&ĪŖņãĮŒ3ēdô…ĀqŽƒ„4íVŖŠŌrĖU îŲķ›Ē=mûhqÚ˙tzÛ|?ŋšŊĩ_/ƒĪ7ËčŅāųõŸ_žqõß~ųôs/ŧ~Ŋ~Ÿ~zu=ö>ŋ>=úôeÕŸ>īŧw/;/Ū_Ÿuώîípôėĩ'Ԟ]ÂŦWáIņņĸJnĶn5}G_6ĘÁ*Ë}9¸_ã2/d”ÚtéĐ>û š÷˛Ü IšA=ÖĄķ–JŲĀ ”5÷žHi%8hŸŸ]ŧx~ūöÔČĀ ĻøDōģ0U™‚ÂV7ę8žã؎ ĒVtēQÛéۃN׹ÉDä4ũ 9°˙ËŪ“mˇmkûž¯āō]Ģ/)iā˜ļ>׹ã8­ēqâ¤÷%‹ĸ(Kĩ()ĸ†ØO÷7Îī/š{o$8ÉCl'íMZ‹€ö<¸ŧ?};NXĀ#Ģ­ßā‰Ëlˇ2™ņ>FĢØRŽ!vÜ3ü˜˙BjkĮ0ĘՁāSšŽĒŅ0˜Ú€üĶË´‚G9ž=ĸëģeûÛãúrKŋwÃ7čļŋįZwą!ũä&7}3°"×ô¯ŽáÃD čĮŽūęA—2€’w2f‰…?¸ÂēŅ'Ũ§]JųÉŊ@€Ü`Ļ+ãĢĀä>čPŪ2ņ–mĘHåôX:“Cm† ^~#3ÍmEˇ§dtĘfФĖ5Ļ\{Ŗ Lļ%%Eļ0=Ũ%U‰W&ÅzfDŅOUŊĢFđęõWâWW^KiRĮoíŧÖŅÃĩ™ēĢĶZŅV‘”Ōũi™%ëT†2ŅĢ…žVŽZ2oMû ?VRķ¸?šļ„éŪ[TQoVĨxÔ°íŪØÄиÔĩ göØpūްČ5Kˇk‚č“HęÖbģÚĩHč%\Wčá‹kÅXã΀ĢN7˙ŠU™ËŦíĪS™$ŨW'ãKcöŦŗxŽ$ČšĄũw‘šÎēQb„ĨŖŦâ;đVÉšōVkōīĀ÷žø¯€åĩĮŠhŗ3Vö. 89ôÁ˙ˆĢô.Piķī`ŠöĄ–ŪˆéĘ Ē|!\Č<ĸÆ)Đûw8õNuÁŠwBˆÅŠųZ ĢāëīDF}X °Ūß 5 Tķ0¸8Œ‚€˙Šū߃ĸ¯Đ–`ž~‡>ß<ôy…u'čC^Hč5Ē`Сn2¤|mxc`xĮ•c˔ŦŽ/$5–ÅBËã¨ø˛Û´^A]ëE*w†*wļˆHPÖ K4s•ô¸A͚í̟Ŗ FŠ˙ØCŅöÂ¸XADaáŲ¸xVždč?˛Ū#‡[@ÉqQęéŖ„äjģ°ÔYŦnSģĢ,´v…Æd9YT4((„×ZڐȋĀ-Ŧ$Ŋ¸n4Â9lĪáfZČM„ I#MœøĮšöIqaûķDyĩčŠĻ†I…°LÖRgĩ)†„…w5X¯RˇésĘŧĒjŌÔJm˛œākĒY˛ŗÃ|íOĶĢųęäíÁ‡h1zúfļ=1?éŸ/?ūŸO‹OÉāt÷ÕĀįÃŊËß.^ŒŨŲĶc'[:ĶđU˙ôåįĪowOųŸũčķŅ:|īđ×GûÖŌfwwLæ#Ōå4ĸ ŧWÔ˛É¯Sũchķ(s3U–Ô;áÆRžUōq›*ôëč•ŪŊ>}ģû柤X˛Ũ^č}'āNÜsœ^h§AÚwã1ãÁĀænÚū 7č3× ƒ~ČÃ4°#—ĨnŌsÂ(–Ä62Äję•~&ģbŽK%aGu…LÆēÛ1eŠ"Žxü‘ž ͏íhÔŨ€FŨģeÁõĮĻkEĻåģG€x 87< ūkÃnųˆéü#H[‡‡N‹#?6­ˆÃû{„U5SVŨ=)pĘ-Ã&t€ŸĮW5„PŲžãļÄ ĀnBā÷ĸ #ÔļX4ˇŲ°ŖîģãķŖÃķĢmž>žœNŗOŖ”­v÷ŗ'įƒeėzŅūhá:Ģ“ŨÜcãe˜žėŋzëö–ƒOöܟŸĮéÉ|˛—Ûž÷ũĩŊū§ėĶo \˙Ķ€ĩërEiĮ}ˇo˜?Ķ8h§ž¸žë;Qâ8/cĮ‹\Ūã}ŋī†q1æŊ뛀ęĶī€úրúôīĻ;ĄtÅ辅€§ō_îŨRˇ ÚđáŋøŊîŋ{y¯ÂÉ~î:Y0?yãũÖ[ņũs÷eŧ>v‚ßNwĪüĪnzđæũ>{ž÷Ūöäķ<×̧īü|°īn'„§ī‚}¯ˇ‡¸âZF`_ĸŋ,=øũÍo˙$XÚ ú='ļíØ8ũ ‰ ßˇ]îŗ$b í î÷=¸ëõúđ< b?Œũ4rlŪŗ°–RĒd\šÉtBŌZŊU-Q)>n™)™Î.QBŪ28č}Få`Č ŖíũģWŗcTū]gɍÔŲ@–­ė @ÜūbĄ•;VaZ ü…mĶAvæyFhpÃ?€ÍvëÅØĻW-oĖ žBIxãEĪpŧƛ‰ģÎ"|Ņäí-Bg¯ŽzŠėQę8ࠃ–īá2kx"Ņ“Y2‘õ8œPē9-|Ī”wTéĢ ås‰II8đĻ)Ģĸ_\ˇų`uo–Äá‚.i…ˆ7áÉIēXÃĢÛYšõYļ!ŪƒÖ°§Džr…wáN(ø¤@™ CŠ -ō~Å)—Ųē… ŪQGe.ĪķėLæ]x• Ų¸Q˜PWŨÅēMDfn҃ÂûĻŧėrÁyŽn1É|™õŽĐ*îI}„JČ'랁™ģLXbõ›ųa͝ČAˇ´ŊĮ3ŧ˙bœfeÜΒ¨Â“āp Gį2JęoŠqrÄĨ÷oY9 Ēšaq‘^ū˛đOézD aP¯RH¨–Đ?!ŧŲĮœŧ–¨čŖŠ¨V,žÂMJ^(}ģ¸ZÄįōŦ7'0ōj'˜ÕhõØč9Đ"cU1Ú`ŋmRC‘ĮÕ­¨đ/ā0 ~,ôĘö( āĄå éœ_e&•#ÛĮXÚ;ōEAFoųT…Kk Ĩ‰ĻX„šCĮ:šUEú?5kå”áë–!•<Ô7|ŧSjžT[¸ĪeN }ķr­äëëÜ Õ ĐŊ–GyžT+‘vž<Įœe9ãŽuš-ŪÛČÄČ"]žn˛NŠ J,‡6#ˇ^1ũO8j˛l`ņŌķéūrS]™ōÎ.ü9ũˆteœ˛•ŅûXV•ÃãTîėŅ#,íŠ60;qĸôŸx30ʼn‰'ÁUTËĄŋō†ŒÚ ÖĐģŦ\늧ÖŊđŠf§ŽāĒčD÷}"XwüFšë÷ +öMeį<z¨m“™ZõŖ™D[2ÜouwŨã^š-Įčǃ*ūŽ]C%6nQâîx.ë0e€ŨGĩ*pTŗđ ŗÚÜD‹‘úĪ L4Za–íīE–ëãöpŽ(pĶÂąÃāĖ>r Žų™;t‹–Í,7D›?˛8&éR“[.à ?ZųĐXƒūFN¤‹r'ŋLfE끍Üc—(|eHƒV3&ëâ? ûžßưtōČo$–™”’†4$Å=}0@ŧ۔¯Ö-“žāÎßú€ÜĖíQø ]kģŊÚaŗoņŨ&Æ”_8pļdØnxī5!Üē ÂŨ#HS.Ĩ­°J>ÜĪT™/Ąf”íüņ°?ŖģˆˆĄ€&a,Îądž­ZŒĄU‹2¤QŖv§íûą;ļĢé<Ų`{ Wá9ánņ Š×ˆģ°ųÎĘW°¨å: as —īŠá|R*Vh>КČS`’F‹K lbÄãtžĀĐqãQri”õcžÄJ·lFyÕ.é–5n‡ĢBwĮ‹ųPf™~´Udl˜ –Bzā§‹šuũđü8>ęüÄDL°i=î Ĩ`Ŗ8†x¨ŊŖŨSā­<‹ų!™„2ËąaZŽ õxX‡õāĨmú€fÃȇŖ5ą3ī–ĩ1Œ|€đ׆%mbĻ\XÅpô ŦwÆ­†Í_ežĘ‰Đu-P—„˛(æäŦȸE,MĶŧĢ nŠ’z ˛ø62›‚ēķy<lüd1õ–‹é<7ú)đЁäR”‘7âŪtņQ$Į„õŋcĖ÷t:§¤n&ũōöØø7$ũ°siKˆ•ģ+įĐ>ŗ1ūmŪÕ1˛ķ‘ƒ­<ĖīkaĮáÂąéjh˛3.ļy•uöj’cŋ$œƒ_˜ĀzÔ5ąe–΋‰’o’‰xîøž&˜ĢIãđ”äÚeVŦąÖdjˇ’Ē=ŧŦāŪ„boØÍ%>ˇ”ųÔ¤>7—m’ŸŋМįv"‡› n-vøj"ģoZ¨pÖęĻĖÕ-ŲĢųúˇŨ^Ā'uM“dî´9üöÍņĀëø[áēFTQĩmÖūגˇũtĸõNįÖÖ[LP¸ĨҎ÷Há úô^SÃ8ÁëJ7˙v›‰”å×dë7ŽKYJ_3{ęn;’´Ŧ˛´ŋúFcDv†0-4ÕŒ"?ʓeŽl†‰h)ŠcEkŨ‡ZĒەK•Ą(fņCCRcõ¤ęĶEϘĐƒœåÃé|‘A‚•ˆlķė‘ų÷ŧ^ŋĮlÎŖÔgQj‡OŨAœ&]Îj褏ŋ¤i”Ųä:MúĀT`/ũ+ a?Ī(û„°äÖL¤U!רĻ0Hkĸ€Ũ ũē†{VĪmŽŅ˛t™ŒGŗŪ#גq­˛/h€{îjgĢMîa%8•&ĢT…5-hUy9dQ6ąÂ˛'…āŅh/M"N™OĪVŠ=ŗ1Ūa}Ž“C3ü ģÁA•3Hf€ķétQĻE)uĩÅâÍSA îTCæ õÔ&ÕĻĸäŌ9NWq*Õ°ŗxNéKŠ(ŋ*įŠz=šÄc1€;ÅŦęąwÅĐYkīÎ}"2ŗjĸÔ*;sˇMs/[ĻkÃlØ.ÍÍRŲ*÷ģQšÛ¤k“T2ôĒŧtÕ 0ē‰ 0oCE΁>0āĪ,ŗÖ2>#Z(ËĘ zĶū%†šīÁČPķ_ûۃT:Ûëũøø0øâŸĒßšŠ…ŽL‰[†6MŖė܈Į@õŸ%:¯¨-‘÷ŲhcÅŪI9qŖ Eõ°­F“ ÆG* ¨`SŪ0byą{Ā4C-]ČĪõ€ļąÖ Sņ9‹étŧÍfčžPœš“ĩĐlfĀn›ËÉ8NS’Ŗuō „ Ÿå˜stėhūc'ĩ’Õ^ũ4ŋXL+YŧĒÅuŪí÷Y:›ņf6~9Z.{Æž¨Ĩ­OíXhl Īœ!;pĢĐKũt5J0+ xõ1õ䞡'’0d U$RPȜ†3$fø5ĪōŅ~í>8ō1Ü5Ø0LD:|lrō!ĻŠđT •Đ⌋€=*€‰ų1Œč wÕÅTˆĨkÂŊ¸JzčÎūũtœ.Ō|ü€î ëô”í­ËįáėŨëÕúÅļ“nX}ūķ5l̎Ųđ͍ŋ~úÎ9öŪúų<|ˇøŦŋũĮë=¯÷ëûĐũĀöģũĪ_œŊ™/įW‡îérņbqąž‘;hą™ĩsŗOΑtíīšsam4iīÉD­+T 1ÜO - žL@LNЎŲW‹yœ“øqã—9°Ŗĸú?ô{ė5ˇSÛvÍ}46ĶļÖÎų™7tVáĐi=FW™C``FĢļ 0ú>TAĨĒŲ™ î~¤+UĸđxŠ7Ņ%ę„ã P3ņ‘Ę~W­,rķ4Z [ŨPfVIStsĶęíû/@Ëŋˆ ?CŊ \꨸öŠ<Šžô6‚įÚ5ėŗšâÎ s…WŐŋ.ŗēÔJ[ŦRF+†Š’5ģÁ?hR†$Ÿņ 1€1ĸūZbVĀîöÕ(}9tz3SŗĶFÃ(Áöĩ eá:ķĄ'ŗ×Sę’ ¤bÕGKļļŅ+aÁЧfÚ%I‡Ķ1НÕŅQ|Ԇņ3°aJ¨õõšø**šČ/,˛ŖŋœvíĶMYÔuÍ_uycâ3mŅËu^akŧĮ`:ÅũXQÍiZ›ŠNF°”úļŅd0m0Mst}É"M?Į‹y*nŒĪKĻLFFÆwåĨ"˙%čPEęē&XT>ĒŠˆ_ņ‘Ņ!€ƒŲڌž`/0^Ÿ<Ւ¸Š]\fEÂ\&eŠPb™ZÎ4Ø{& )<@Oŧ[õ3Ŗ.öđQ)ûyx {‚5:Ø1ŽjJč ūĸÚÕbz„qĨņ#”b6 .~¸: )üGÁaą1 @ coøXÎÁŠŧãŅ\Ņ'ÁW˄ą>Ϛ<˜2äģ=× ¸ĐÔšĸ8(4†‘L&œŲ4éĄøî†đˆâ—ö|ōv-Î Mú¯Aí+b÷Ģâ­/ąDr$ däÕĢJė뉉ŋĘRí€K2ØØįQJöY^ūI(ātĩ+7īHÄx ŒÔĻäöÕŽÄŗ‘ėœmíėžŧē{ķ†Đ`ōæ­Ģ7é /0g÷0-杛,"ģ@ĨwžÃīŨ^ÜŖDđbD{”žsąˆį;ģx¨ļ&pžÎ~vX`Õ6Đ­~ÁMę)v5*VĢUKŸ_ä.Q×Gę"ų´Ē´ųČĐs“KÉ“}v L2Ä}Ü|!y6Ŗ¨Æ ŅŽÅ( đF"ĘM+°É€n`$zĀp! ¸Q[Qˆļäd‰ĀŲv(‰F-ˆī<œôŽí á…ČwĀ"hU"Ē$`ąƒ^įôCΗ„{m›ŨģĘ YŽūėnĸ']°BÔlķ!zŦG+:§”ÃpâŠghhČ€ņífėĀ&—ŠRšĢÕ2Žä~׿š/ōģˇ'}×'|ķ”Īöūįti$ņä?˙ûī…𚤋aŧŽŠ2ŅԘoš›(׀‘˧y.ĸāÁnT}™M—89ųå$;xØ2FΑ‘øe+ƞÃĖ÷ÉŲ[ļ&{ãƒŗßãx÷×ŗí㧇Ÿō_ŲËOÛŲåjėđķŊŗįŸ//âĢoķ§#o°úđĪ~1Š&év(z?|°ŦČĩĮ5†úŖ1’æÎ&Ø %ÄŅ“BmåuĐįŧŋu—ôbgrb 4†Ä&ĐgôāŦ Ά›éâēͲdƒdšē8Ëz˛"Ļ4¯ŽÆT*ō´ģģw¨&ˇ'ja›î<G“€ĶΜå¨U¨ˆQ`3^×í=ČÉ0éFd¨úäÉŲ#Y͸1˜?Ëŗį"^;¯:˛úÂDi9ÛlĄ÷ Ĩ~JŲ#âŲ+õØÎĸ öNnõ¤ÆÚĪMÃΝãÍ īĮú?­ĄYđD'×ãåܡU÷[{xV ŒL @“&Ylj˜@æĪČ W¯°N˜“=Ā[@•k|AjŪŪ՛\ũ÷%Ë|Šh¨Ä;ŗd¯Ž @|.D@ĀîįŠõcĐ!?Û˙*Fvá. ÎÍxv“‚+ƒßĀ-—1ō4›QBŌ2¤á`ŪÖļn"~'Ž–‰wøT^*%cōö*āō¤…r55ö`Ø!r…KVũ›û’T`Äũ˜īeŽûq~ĨâÆP" i™×éx^_Ū“GßéIÍ&X…§! DhgŗŒĸšEąUÆČå!_:ōáā6Ŗ› 8Ûûë`‘yņœOum–Ë[|q÷Kåz~/3ž5ĒúŌ…%˜@f,D­@Yå‹lxĐÜ4Y2ÜfšÜËG¸kU‹Ä`ā/PKöĸ–P+ÛFA1LRI webp.webpUT Ā™ ^Ā™ ^ux ččŧ:ŲvŖČ’īū ŽúL߇.ģ ēė—w—%y‘7ŊxH[’,=Í×Ė/Ėû|Ę|ÉDd‚ŒdšėĒîsŊˆ$‰ŒˆŒ=íėāĪ—ö—GBPÆŅŪÎŧIFģ-š´öváK@‰‡Æ´$‚ŧ ånkZúĸÅaĸ0™9v[^RˆYN}ZēAK`´Û Ę2+>ˇÛŖ° ĻŽÄ/¤$…äĻņĪ  3RyšB2-hîĻII“ō1)&õoäũuLčFéԓ!‰É2MČü§Ž<ˆaLF´ØÎU°ÁOĐÍĶĸHķp&ģ-’¤É"N§EKˆŠ˜‰ĸ–ÂâQ–‹ŨVCQÅã“?ō‡īŨ~8Ë÷ĮŪŅÕQ§ėë_į]%KOâQGΏQīæyü`uFy™ÍÛäōÚęM–ķÛĶčęčdNí‡éõ#í[ËSûq>ŪhwˇÅ7X”‹ˆĨåM˛Í‡m?'1§ų¤Ũô‰cPĸÉÔ">qeËķEV4ĮŅ)•%ˇ€mļQ´ÜYū‚8ž %žpzÉŲŨĄww˙xūĮe˛p&íņ$™*\ËRë †FÚ5—§úãšæīĸēŠŪŋœ(T6ĩĢŲiī&°ō`ē)U§ßĩũŋ.ŽÚĒ:ļgšĒįhfGU Ųķ Ã4eÛˇ|ÛWMÚE%ŒÆ3HínkŌy–æĀJeTģ­yč•ÁŽGgĄKEvĶĒÄúĨ ˈî1Ž=§N&á‡@J!&EIsá˙Fe’ÂY$4)Ú ôK›¯kD1NÜŖ…›‡YĻIƒū ŽĄE)d ŧЉ¨P,’’¸ečƒ…0#Qč ~0Bę ^čû4‡•BšČ`JÜÆBk¯a\ ”äčo¸,!Ë"@œ´Ķ –ą§ ūūxŽŖZ] ‰MŗííļNÂōtęlēˇMCO ]ÜãVuŖ†ÂHY2ڊ‰-ˁtŽĻę;Ÿį§ĐkNŅeEˇ,ĶÖtÍ4TL¯D^ÎÃ4õ™Å”ĪEî6Ö,ʡ§mKąuõߋ]]–'qöįlWGƒÛF§KÚ ņå[Đ.ɛ*ĻqLōÅ[ĐLJ đmzcéŋĐōjOÜÔ`:âJøÛ°Få˙„{oŠĖjûÜJ6uÆÔ-߂ũŦ­œæŅ–}7âã¨ūÅĒ\wn™?Į7CDOąHŨÉK&˜¸> gTjã‰íģņ™ŲéŨą+wĮĩßęŊņÕâņžĢ>Ž÷Õá¸õī¯ž{ņŖ6OäáøĖ€ąŅxq7>{ƒĢEo|&­č…Ũņuø¨vÕŪ˛Ģ?Ū_Í{ƒ[ĩ8ŲEŨ2eHš§C=Ķ÷]GQ\…:ŽęŽBl]‘MĶvTssKÅÔKÅ8õČK´,(h E!Âŗ'ūlo3åôûÔ%Ž´#ûØøüU9:últLŖķšcvįŗq´/ÛöžÖ.]†į<žgNdŒ1>œŽķ Ė(ô¯°Øųi1iĻ#YQßseÕVLC1|ĸš–ĨQ,MsdT™īĪ ŽečĻå*ĒęŠATÚĩķ;¯jĄĒžšĐ…“B"‹ #wŠūŊb*§PÛŧ"æP!šŠGß%…•×:ą‚FXŠ'ĸī´0M)G˙ÄoÅš%ŖŌtQŊ8ŖyčWuLƒéocTX<Ÿ2ēøļw˙Ũrڛ'Ãá7%WŽŃö<Í/nÅÆ‡Ņ—ÁŨâčxîtæ•Å)˜Z[į…;Q›ō. eúķĩێ,;ĄxUWR1Œ7x~ĖĒ…í s×k’[ŗ:ūz^b=ė‡2[ģ4ÖØųš—ŌmMVtŲū+ É<ũšŗ‡÷fSÚĀš­V~wgœŸæ“f‡Cĸâ§Ņ$´Äs×§Å$‡v9‹ˆKŸÜđÉ-Éæíd›TędũŌÂēxPŒĮ?8¯ÛæâŦ>ā>úr8úVŋá3U™'%)‹7JF’…k‡YÎ lÔ%b›­}íŽ5jšįiū̏ųâÖæņėvōŖŖÍW' Y˜$TPŸē¤b6Bf@wģ­ßdöŗy ° §ķRð”įA‘¨ĩŲęĮĒÖõ€ŋn°đq°ŸæAņOGyl´0e@cl2AF ŊũĻPUƒwoį•F’ЧÅę@Š]OHã‚í߈ôĢ7"XE7§  Á*õļų+G:Ў¨7ązP &3ŦĒŧ)ĢĨ„ vÎXd°“pFų=:CU˙Uæ…ŗķ[îÂ$0XREĒ`Ļķͅj1,$ÕV~ĪK1õÅJ +dĸ&8# 9ĨB ­“8@EúŧTüԝHĸ˜„™PŊ~ī&0ŋV_ÚdEĩČHRãŋĖĶl°ĀƒG6āūŒ$pēڍ>CÁĖۘˆū2éx PtHžÚÕ…mˆ˜ËDYˆ¨_ŠrK`¯ŽĒ74Ÿųßūlí}i#žÛÕ]u[_vvVdĢWĘĀwEú”ße 1)āĘdF xxČg?ĸĪLC| ’”Ũf €ē&E.žÎwÜT>§'‚‚bÁÃķ8 Ā„뎁lķ3’7Ŗqdƒ´œĐÔ7‚×<$‰Ũâ4)ÚĨPB˙ãB˛Ô> Ŗ Áƒ.”ū|báæ3}ĘwŽY3•â)2~u1Ũˆœa&’(Á\čyx6Đp`ڄŒ‰īÚžĻĪĐą ˛ ˜đsŧŨm)4_üÕfÜ€…&U%°÷%ƒŦƒg֑˜OQÂx(z=(Ę-A>Đ$.đ[ ,— uA•T[0%C Iīɰ%]’ájˆ’Â/Ŧ€[”dE”,•]IˇEF’ÖĢĄ‰|Â0[¸Ē8iņ{X; &ĀjÂÕā¸`ĩdj8IļEÊŖâį­üŋšĀ!ŽfČ⁁üĀ”"u`BIÚ| Iļ;@ a‹ĀĘ¸ŧ¤™ˆ@Å[˜W™¨$hi ‚œ FĶ^Nđv*ƒõ°aAđ‚ÂlL¸¸ņú*é:<„_аd#1‰÷’a"œ‚ŧb0]ą-ÁŽ5Šcā^ ÷*“T´'u˜Aœ  “ĄÍ… tq*킖 Đ垏4Â>e`ĖAÔ%gX"û]bAģÂ@2íí°ČŌø,ŊéŧĖ˙Z{­3-Ë4Ųâē‚S&|Ј.ĖGxÁķ'_ÛZsÚdœˆBœ…ŖęĆ=†j$õę*î%fƒÖ§ę­ˇüĩ„@B1ē›>Šží“Šõ >Š€ÎÁ>[<=†Ü1E6ŽĸrŠ .ȜíWPø˛ÆĀ•ÔšŒA‹J´Cče— ?ē¤"Î ›=R7éŋ2-ž ¸Ļ÷>dbąČS*Ë;P Mãd•ƒ Fmf]6æ¸P]Áđ{–mâŌ|ĀŦ&Ä%˙`šī°‘øđčļŌõ‹5ØŦĘū5NĻ ‘|Ž_äYf“d šeŽÃ?ŨÂM3(­*\Ŧŧ\ŸĒ‹Îęvkũ4žÆXÜ`æãų2Ŗ“:éķ*B„,‡Ã„= aØČ”7œDš (p„Üđ dølšA)eņĻCîlæüW ×!ãĸ(üŗõŸ‚(îąņ—6Öo$§Œæ9ÎöؓvĘ^īÂzÛxī ~nÖã\4">Ē ú+kÛcßG`5ąČÃĪõĒ—\{z†÷ežÖ 6SŦÄ~Ũ Ö´Ųĸi˛m؊=VFŋƒ‡¸.ÍJqõíŋÛÁąhá™Ę &1’ŽŦ”mĩ– „4ČD“lZŠE,ŦYīĒæÆRsë“Ú¸ļXžĮ 7nîãiQ†ūBt Ų§´rPt^p)đ' ÚrƒŠą‹]ÎÎĒĖlĮėQ•Đ$Zö'vÆŅÔ&ī‡4ōžō2ąnBuģМd!°Á69Z+?‹Oíæ3ŪÆ}oNU/ûšSė°"H#ā}‹ūßũ÷+r+ŖúųĨŋ˛C˜K˛°„úv‰G2žŋö}ŒÁ¤qŅ’ō(ņ ¤Ō×ö8´ųV<ÚļĄW1…ĩ@…NŠ`Ún?Ā„ƒīQû„–7ü1õzĢ’âÁ6\cĄČhšÅĄ j˛XísC{ņšWɤÖūŨ$ .ʼnĨ:‡á‘u— FzŌ;xî“āōáëÍØ;õžōš3<ŧn?ûŖĀäĖ.Áū`pi÷O†_ÕĮvy|Ÿ?Xö~8_Ŋxw‹Ü¯_BåĨÅÖŦž¯ôƒlŊÃũ¤~¯ÄŋKÔD‡ã‘Päîû§#ük¯Uġōbt~hDĸæĢÍSũēį¯ā_^ U 4ōT~/!8Ô%R(ũ(WéŋîRˇˆ­KšŌÜŌøĪΗé*4×xˇã€° ZŌ d;;_ĸđÃëāËNIļ„^ îžŅ¨Ļy‰ÔˇLŊf¨NĒ<ķž˜%qBČüP?‹ĘJI Á T˙z~`eЖ¤đ†=ngdõ¨Á6~!6¨ÖguyŅPu¨n¸ë)^Ä94*ŧRSųiRÅĻ×lv6ē lęFÁ|ŗņĀë *¯ŲāPą—WB/õI3:6įßoe¸Áßë[tčY´;+PfŦÛĐNĩ™(w&Ū¨ÕŪŧQ—ą%44;LĐ h G=5gj„Í8ū_hĀÔ ).´ ØŦ+ ŸĘÂÚƒŨâŌ@‘]íÃ&+øH>Ufj Îi€9yuföŨöžã—ô•å)~ûņ}•Õ€ZģäĶë*[MŽëËø+úRPáv§"ČDAé"ģņ[x'čėN q)ŠvíŪLŅ—]E@¨DažŒũίî9ôË-*ĢüFŖ÷K_ëĻ~ ī nCÜ7Ûęũjîũŗˇ ې:ĐûJZ$j’Ĩā‡ļoH6ž­ŲÕY‹&˜`ĪDąŗ2ođ¨ÆÄ~Ú,ØĀÄ_W‘p‘ĘŽĐtEĐ$ƒ%BÄ’p%Ŗ4Š˙ĒÁ:r’*Ô0sƒÂúĒųÂ×, ZQ(ˇ4Ԃ^ËXYH •íô –?˛‰@Ãųk1ÂÍ+ũFšžj¨¤ÕnH& –¸–F0)MR 'Hļ×,Ŋ‚WT8ŪZ 6˜ÍLßcU cF)ąíÖnv4$(‡ ­}Ąu ˆ0eŦؗդŸg•—Ĩ‹Mk2I–Ã0iĒú1,ĮL  ā?á9ØR|ÕĖWČ[ŗJ5¸Ŋ5:įd.YüūûūKĪ´ŌŊ͚ŏ,ą…2kRīYžsÅĒŽ îŪ`ŧҜœĖpGŗŗNđO›đģPē`“ė{ƒä+ä´Ē€ bo›ŦM’Ŗ¨ŧŪxEãŨƒ—K–IåQ*ĸLÔļheEĨ>†2g áüŦ3V†īhŸÖĐ?ÉmöGä´öŋpZ;]`Α “'ū .íõûüC ŋ‹ÎAÄxBļ{oĪõXšø¯4E353GĸÂūë"T‚Ī€ÂŲ ȋ!øeÍ0ëĄ üāČ&bõYw„ûhsGđøíų#F€īņŋz\ƒb"ĩˤē×z˜e ,Q"|māIxÍäũ*΄Yû@4¯ã bčsņ )Ōl_jAMZŒJ+F8"ĘŠĩyLĨÉz#„/]*PÆ8ę_øGūéāČ>íOũSäÎ>0æJŸ•lŽĢe-/af‚Āœë3Ž8YyØš :éråoéĄq‡Ėgž[ éŧüīyá[ģ•\øSÉâËfÕRuJŲü˙ŌxT nl^xGâû5ԁŋfauâcė=ˆugŗjjZ–īUqyZé‚ß(Šā͝ią\MÂÅėŗ`ˎėũ#A–—ĨĮŠ*’gđZņ –rāũ,B­Xē56Ŗ’ņXUÃé\ėÖ֊īĖ="}č+ÛųĻäĒC8UŖér™Åˇ!!}$Í$ˆ°…VrE{)K¤cGŸĻdŨį÷ˇ”ŨĢ<šäŸFŊŗ!¯FŲCØWđdäŽÚJ^8Ņķ67§$‹á“v iš9é;*ũś ļ›V }8…l› 3`á"bs4įė´Ŧh"k—\,ČÜ!Įãl>‹˛æ¸Ņė*p÷5Ŧ';ŦŲŽÃ$zEĖj¤k7Â< eːĀ~ß§įævzUŖSЏvÜļ­W+ÂG‚čę%ÔŽqú~gĀ,†Š°°^Ąe%GËĘ~͇P5Ē #í#ŠehÆ˛V[äŸTØũnŪĮígP–ô; wžZ.&uÚŗōP…Õ)õrņmʓå Ōj$ U§§—ĐÍКō h͑0/ë§;OõQ"ÂQūĐĄ1Žô>ÛŲC>îe{:šącøcT ĻQjķ Ļí”CߒÁĖÁuénƒKQé<į KÄÃw2Kā>ÔđĖREä[“u61VqoEáę\­{&Sv9ŧā–9ŧåÛûÆ(†šäfT(Žf9kz.Åįō$áēä5 9–˙ūoY/ķ?âū(ųũ>˙C`Äb€īŅüų}ūG‹‹ODV"ų™A/ Y|ÆģQĐá÷ĪŪŊ?9|‹¸Öī۟Ř9In*^ōĪ`Y\LÎ`Lš~ –-Īá×_ĢDŖŖ;€kNÔ8žįGöЋœ8ˆ‡ƒ(:ŽÛíƒî¨9ÎĀ÷ēŊūØwzQ¯7°#¸ēž× CfŌWōōK˜­É§D„'rEÆtā|S3œ•ŧ6LCĢa`3FĪ|ųif-Éĩ%3gĢQé`îÎŽņH0÷yxe īŌĢF¤­QÕŌ .TqÆĨŠíT°ÖIž Uû†ËœĐÆE…JļÄV›ôFmŅļ¸Ō0AßE=ŦąĖčBügņ+ĐA įŨŊĀA(ēĀ {&Iŋ 4R8ˆÕØõGÖ^āqČ>Y"Ö#Z\4-ĸEŌZŸã¯‹–HŋĨŦЇĐĮ2úãŋŠ|Jī÷ĐC°ĮŨm‡@- ėo žUļ‡ā•æėpKŠČc¯įZđđ&É告’KŲ€Ļ3ĸ0ĘÛAĮDjŪyˆéûč0Šč9ķˇJ ‡ôá-DžĮ‰(+´č\‹Š'ã4ōētxTˆĨōųüĸ U .›ŽÆlŖCöē˜â+´ņŲfĀˤ÷Îā‚>㸜ôÜUßų{îlŒ„.ë#”)õyî3û7(oŠY>đŧĀ/°‹Ļ.S„\ žčĀažå3/ŗēXJ0¨žåA‰5@œTЁ>TŸ.!+ƒŊ@ãļGÉIĒzĢq;0ŧúË=5Ä:͚ĮY† ĐWnÜ3XŖ`DT3Î-€7Ú¸UÖČK-)ÜüPœP ŖĮ¸!Xėâ•7Nęŧ҃ĪŲÚěP6Ëļw€.ŒęǁĻDŗ0YNĘÚ§xZláb6į;– aũeQ˙,)@IlūéŽjĸ*ô帊U ģpō- ‚sQíPß]ūâMí3žRíd§k~fŌļÁ?´ąO?ŋ]ŋq.ÉōįÕĨ=<ūūũŊ{'Ŋ×OĶžũã§ˇĶų‹ėmgönuņūÃûĶį~đķĮ‹/&'zuqüüÃø<šøx¸zĶIßŧû!;ę™Ûāæ Įn"†tj;Ų| gŠå焏‹ßŖčŦÅō4IÃz˛1ŦšEģŽ—[ŦM[t˛Ėb&Gß8ÁGb ß^¨¸ú=ÍÍ}ÄLVæčĘĸŒŋŽ{l0XAGŋŽa‰qãÃú΀—ûIņχ‹¯›¤æžĪŠ yY­<ŧĀžUĪĻžŪ}dD¯^bMÃe•xŨîÁ!öŸäRS¯yMhô$Tî6¨u\â8~ŠōVŲęFS~hHmĖšE-%čzų•tû(“ĄaĄ €Ņp,ÆđŽ9ˆÍčQHĐ5ĻÃ\áÔeÉĄE'¤SXQsTaōGķkĄQæˆüuû¤em‰š,J°Fq’T|AJŖŋŠķ 0S“^0°j}iŨ¨i`=^ļüi…-–?T#`~¸JßĻ MYßkŠ âœI0­HũM9ĖÃĢ$^L5v]*Ĩj+Ļ~€Ž^âîRCUāĩBQjJ6ŗ?LÃüī26E]?{T÷—Dąu j0ÁUŋi‹7Æfgąbb;HHƒĒ˛FĮĒ•×šC|í4ŨgŨƒ_/W…›•¸Köũšė8ģœĄ(†A9įė|ãí_×2FQ4‚éØĢĄKz—ŠX}ĐėNŧ?ÅãDŅšīĩ|Ž{‚”OĐt!Œl;fôCĢn|•ÎVą…~Î::ЕpzžÉ+ˇR™âĶ)ZV]Mų˜Ā\…“ąōc‘›WęÄPcā´87S“dŧ',„ˇĘĄ7šÜ™¤`  Ė—ņ…ōü4=uę‚q”ŋ×έhķėYšX63Ėså][—\˜nsü=?žkxj+pŊĐTö˜6B|Ęf:1NDFj=U‘D-sGŊėŦđLā˛}]ã/ÕėĨģ{đc§øNˆ]k` ĸÉ ™‘mĪŠöŦlx./ÅkLQŗ1"@8Đ?*uÂŨēĄ\Ú:DuÃlÁ<›Íg‹uŽ˜Gbqum×ļėŽåēī\{ß÷öģŨ{ļŗo——pãëV§“o hëUm}ˇ­üËoŊ}]ĒeM'zīlģŊâĶoē…ų2 ¯k{ĪÛ÷đmãčĢoģ]ȑ.ãøŧÚļŪ m“_Ū˛}‘qtÃ%đWFܘã'īÖģwQã˛ŗ0×ŨĢĖā'ĒÄ-7ąp+÷Ļ-,#øļ}+ĢÅwšQgŦ=^:5P€j=#M|Ąh–Qp“,NÛ,F‡'DéjFŌIs•í.ĘÆėųÂg¸ĩë›ÆoK•>‰ÃĻ:ˆL°ēčŗĖJĩ)‰’mCQ j ”Mm(jÚđ,ÅÎU„Ēđ6Wž[đ! âŅîÁGíNŧkMåáđĄ ˞ÅŲ UĶ“ęõ3˛ā•Ô}­š 8ö›j)“•(Č?U$¤Û¯U3<ĻáĻjašLĸŒ^7ū1¯]+žĢÕd0GõĸŠzT ü¨=ĩĸkûžŖUn$€?<0õwØ/ —9ŦđÖTYÁĸ[؜ŅßyÄĘĄĐRšŦĮĩėŠĘ5X=Š#ĸŌy’ŨéYmŧ|žšM&ĀáôUĨ1Z>kÉHøŖķfŨĮYʗ‡rf{”ĮŲD•俏Îß6в5Ôķ×_o$ÉŒģãŽ×õzq/´ũž=˛ũnäŒáwC'ˆ|×9AĐø§šQä}8õ|7Öa6ˆ’m .ú ߖ¸+"‘JĢ!¸rč}+R  ÜČķ†ãq†ŨžkĮŊQØīöĸq…ÎĀí:žûë쪁öŧ öŖŽëہ=t#7ĀĖ9ø“– Ōî”W÷ßá ÖmIv4-j,õfŠ7ÅËŨƒ#ø]in¸ØdqŽC"ëHA↕F$Øō–âÃčęĢ zŠsüČr Õī€ōyúâCūúMž~|8 ŸžĢū+'ũØ{úėĶčį'ŖOá+'z“|3øÅŽz~6|zŌŊ÷øu< ;ĮŊą˙|šúą“¤oßô/˛—WĮ÷NŽ~yúüüÅéc#ŧI.Âm`ŸæĸîĐjLØ …ŗ4, yˇ8RÜë$$˙YA@4Xƒ2‘/čY<ėĮrv´6ļY¸Ãé agųlƒŦ2O‹M?čû×uģ^/øĸ,Ξx„M™sâôŖq¯gĮáØéEžīö{ļFNūxhÃ20 ĮƒØ}׃S׍š+c`ôßÎįA‡GˇiJh ZŠ7tp—ĩ[7FU‘kđ:ÁĄĐ(tąŠNŨöL2*Až-Ŧ)ģ<Ĩ|QÁB OFēĢ|U>ĒX•oŦdBÖrNRŠßĻ@ģĸū Á05‡ķ|?Ëæŗ,ã&é`ŦÆõ6¯töŽ>īë÷#JũĒHĒRãH F\Ÿ§.SÁx›ÅœĖĻx$E9ĩ⁏ÍQģ㏒L”˛C™Õ[bv*ø‡aš&˛č-Ņa o`Ö ø0õČXƒ<Ķ•`OPM¨e6šÆķpošštN–ãüĮPŠFņ“eT(+rŌQá*ڊŸņWü˜•NĄ[ŖJHĶĢ3uŸr_“öjDL­8&Z6n×Ņ/M­; IØŖŒ <Z]–Z|W:k€‡ŦYEø4h“Ü_ /đ€į+#ē÷ÁÔQí\Ąs˜qf ĨTĩ“ ĄÕįÖår‰°^Ē™ĀžÔåÂōŠ(ģ%ũ|™î3˝Ū"˙vˆÃļ˜ŪM(žŦN–žš.ÃŽ‘6• +‡Ö€Äư^ŦpĄi$zޘŅŸŦڑÅ+]#7u%•ĻæŠâ{Ú/n?‰•<ŦÁ>ļl€åŠ!YĨí¤†dũ;>VPŠ"eUKtEbjB>ÜũͧŒfŨęø€ˇƒyĻÆph3äw &9ÅR˛ģŅ’ûY\iČJĐ@(c–)7žXeĄ&¯âųãĮŒ3ēdô…Āqž… i4Ú­FĨå˜Ģ(Üŗį7U{ßžūą›>$Ņ:>?ė~7øđnũķkP…ÃĢ7îāÅüĶĢī>ŒŊÁŗÃWĪŪö>]‡ëĶK˙ųEn?žŧ8ö_œÎíŖîk˙—Ÿ{Wßßûô]?¨5ē„Y¯“âãE•<ÛéÚW_6ęÁ*ë}9¸_ã /d”ÚtéĐ>û š÷˛Ü ɸA=ÖĄķÖJŲĀ T4÷ļHi58hŋ{rtöŨûwī^Ŋ420ˆ)>¤ü&ĖAMϠҏG]´ĘųŨ‘ ã,ŊnĐ÷(¸C֕ØqÆ}ˇgn7GƒŽŨ ]/ŒœđŲ{˛Žļ‘.ûiō8ŋ@'sNŸ™Ķ-!UiMžf> HHg#¤ģ_rdYÆō‚mlđ¯Ÿ{oUIĨÍ`Iē'éÆÚjSŠęîKČjÆh[Č1Ď{‚/ķ_Č@=Ū6Œbu øTŽĢjEÔ ĻÖ ˙ô:-‡āQŽg_ŅõŨ˛}ƒíq}šĨßģátÛßs­ģ8€~f&7}3°"×ôW¯āÃD čĮŽūęA—2€’w2f‰…?¸ÂļŅ'Ũ§]JųÉU @n0Ķ•qČU`rƒ th o™xË6e¤rz,ÉĄ5C/ŋÁ‘™žmIˇ§dtĘfŠ Ė5Ļ\ĢŅH&ې’b87=Ũ%U‰+“b=1ĸčiYīĒŧzûĨxĮå•×PšÔņˇ×ŅÍ™Ú;ĪTˆi­hŖHJéî8‡Ė’u*B™čÍ ƒ\_+W-™ˇĻ]…ËŠiÜŒB‚´ī-jΨv+ƒR|Õ°í^fbč\ęŠZ†3;6܄ŋc,rÃŌmû@ôJ$uk°]m[$T ×zøâZ1–¸3āĒÕÍŋdÕFfÄ2kûn*“D ûę(ģ6–hĪ:‰§HBL ÚŋķÔtÖ­ú3, %`īYƒˇJÎ5k´&˙|ŋā‹˙ĒX~ŖæXMvÆ ÃŪ"'‡>øŸp•Ū*õâlö,U^ôáĀŌ;ņšfUž.õd Ņâ¯čũœú§Úāԇ!Ä|Å|+•ķõw"Ŗ~Ŧ¯ °>Ū ÕŖTķ0š8‚€˙Šū߃ĸoĐ–`šū€>ß=ô9Âu'čC^Hč5Ē`Đ÷n†(HųÖđÆĀđŽ Į–)Y1\_Hj,‹…–ĮQņe7iŊ‚Ē֋Tî Uîl/‘ū !l@–čf5 0čpƒš5ÛW?FAŒS˙ą1†ĸí„qąˆÂÂŗ,VT2ôŲîąÃ- d–—ē@zQÂrĩŨXj-V5ŠÜÕ æZģ\cr9š—4((„×zZ“Č‹Ā-Ŧ$Ŋ¸n4Â9lŸÁÍ4—›’Zš8ņsí•âÜöį‘ōjŅM5“ a™ŦĨÎjR īr°^ĨnĶ-æ”!xYդЕš&är„ÕTŗägGūj‘u/]ĪwūX_‡ņõ~2˙ëųljŋdßöƒÅō]Ŋ[íīŊ™o].—ãßĪņ•Žf§Īã“ķ—Ãë÷WīŽļ>ŗ Ûųe÷jųę’/ËiŗÛ&ķi‚‚â3ĸ ÔË[Yg×Ēū1´ī(s3•–ÔšáÚRžUōq“*ôÛč•>üūūdįŨ?Iąäw=ÖånFAĐKģŨ˜ĨI' ģļoÛAę…n—Gãđ"q/‡܎<‡nÂŧ[(–Ä62ÄĒ땞 “]ņ­ %aGĩ…LÆļ›1eŠ"Ž8ûDĪ„‰æ§f4ęŽAŖîŨ˛āú™éZ‘iųî1 Î ƒ˙Úđ„[>b:˙˜RÅŪáĮĄSĮâHĮgĻq¨¸ĮØT 9å`UĖÚŖ§lˆÖĄlø,^UBiû:ŒÛ'(ģ`€ßķ6ŒPØbŅl ˛`ķŗˇ„-cļ÷Ņšō? >ŋT<P€?ö/Ī—/^}LûK{öús ?¯ØôäŲé›(ĩŋ&ĶÃÅøãŅŅųõ4w‡“ũá"ŨˇSģģÕū1:yŊ7/¯^Æ{öîķg¯PžžtĢ}t€}ˆūF°ôāõģ—˙$XętŨ¨Ãģ=§{nœ ė%v/éDŊŽcGnÔã–tũ‹€ŗ7āĖļŨ4 Ũ Ŧ…Ĩ”*—ĻAF2­ô€VoEKTŠ„›0FfJƓk”7LzŸQ9ØrÃh{˙îÍlĨ7Yr#uvåB+{ ˇŋXhåĎE˜VĄCÛtĐE„úĮžÜđO`ŗj1ļŽĒåeÜā ”„×*z†ãÕj:$î:°ĸɛ{„ÁŽ^1ôRŲŖÔ!pbÁ-ßÃeÖđDĸ&ŗd"ëq8Ą&tsZøž)ī¨ŌĢ!Ęį“’pāMS6Ež¸mķÁÚ^/‰Ã] Ō˙¯Ã“Ŗtž„Ē[ÃtØAdŲ„xs ZÁžyĘŪ†;ĄāŖe* )‚ļČû%§üQ\dë.(xG•u¸<Ÿ ``2īÜĢÍÆÜ„ēė.Öæh"2s‹äŪ7Åe› Î.ēÅ$ĶËaį­âUg¨€|˛í[˜šË„õ(Vŋv}Dē…í=žáũũ,q; ĸ 'N‚ÉœÉ(q¨ŋÉ#ÄÉ—ŪŋEã€Ērį†ųyzũÛc€J×#’hƒz•BBõ„ū 3Á›}š‘×õņ }TՊÅķI¸IÉ ĨoWķøLžuĻņæ@^MâäŗŪk=dŦ*Fėˇuj(ō¸Úˆ ˙"ĶāĮ!ĀBŠl’PŅ >ZΐÎųjhP9ļ0ÃŌŪą/ 2ĒåS.Ŧ€”r$š|jÛčhVé˙ ¨ÉX+§ _RɃAMqÃĮۅ6āQš‡û\æ´Đ×/×RžžÖPŪíky0›]Ē•H;_žcβã–uš%ę­ebd‘ļOˇY§Ô%–C›‘¯ˇ^1ũO8j˛l`ņŌķéūfĻē2åøs úéĘ8e+ŖúXV•Ãã wöč–vE˜8QúOÔ LqbâI°Õrč/ŧ>#‡6ÃG‡5ô.Ģ!×ĒâŠq/Ņ׊*¸J:Ņ=DŸÖŋVîæ}Ãō}SÚ9†*ÛdĸVũų`"Ņ– ÷[Ū]÷¸—&—ē栊ŋe×P‰ĩ›F”¸;džËÄ6L`÷ĢZ8ĒYxŠYmnĸEŠHũį&­0Ëö÷"Ëõq{8G ¸‡iáØapjģGŠüÔí;‰ÅËf–ĸ͉Y“ôŠÉ-—á…-|čŦF#'ŌFš“_&ŗ"ö@Tî+—(|eHƒV3&kã?`øžßİ´ōČo$–™”’Ļ4$Å=Ŋ0@ŧ۔¯2,“ŪāÎīú€ÜĖæ(ü ]kģŊšaŗ7Æønã?ĘĪ82l×ŧ÷ęnŲáî¤)—ŌFX%Ž…gĒĖ—PĘvūõ°?Ŗ;ˆˆĄ€&a,Îądž­ZŒĄU‹2¤QŖv§íûą;ļĢé<Ų1`{ Wá9áNū Š×ˆģ°ųΊ*XÔrš°š‚ËwÄt>*å+´„hMĖR`’ķk lĈŗt:ĮĐqŲ š6HĘúi–Ä#J·lFqÕ,é–-އĢBwĮ‹ŗžĖ2ũÕV‘m°,0,„ô6ĀOsëúā=øq|Ô;ø‰‰˜ `1ŌzÜAJĀ:F)p +đP{‘ĄŨSā-<‹ų!™„2ËąaZŽ íx؎‡íāĨmú€fÃȇŖ-ąSu‹ÖF>@økÒ61S.Ŧb8zPÖ;åVÍæ¯´ßËĄë . 7dQĖÉY’q‹Xë>ķŽ.¸‘+JĒ1ČâMdˇugĶxŌĪŲøŅ|:č\ÎĮĶ™ŅM˙€$×ĸŒŧwÆķO"9&Ŧ˙Ë cž§ãI–ļ’~h@ēžô›5ĮÆŋ%釃ûšļ„ظģpíSãoŅæ­^!;O9ØÂÃüž6v.›Žú&;õá˛f›WZgGŖŽKÂ9ø…¸]úĸ>,F@™¤ĶüC É7ÉÆD‹R; xęöâ4áÆÜö™Ûí$=ģ0P<ŠúՒ Q6hHÎŅ€<Ą;%^ōɂą'nÚMx/ Ü0uģnĮķũ^ÜéÚ];â=3méō÷¯2‚Õ´(ˇņŽ’qv9‰ķaלŽ—é˛,YÉėU´[MŽĸ%"§ĐĨ3+ũŖÍ┠âßÔŧ˙ ‘аū@Ŧ,‡-C+ēd6ËSJ“ē’Šdi!,K”Yķr€Nņ9'2žȟ(…Ō`{—ž<=ąũ¨6cz˙šQu-v–°nĶņ@yÚk‰įō„ĨŧsĨøMĒō{šĨWx§851ÕŪÁ ŖŒâ´˙×>ėŠYÍôîS'i™ßĐĸíįx8y*oËxĪ€šÃuũãÎ#Ûˇ][ĨÚpČRŽXsm°ḾMĸ hÉ…Ūr03ÔCŖˇ D0Č$&[7âŅ`h*<'%œm *ÁÂw#“Ö—ģ‰åpĶâLčIP}×(íCÉ/ē.zđī¸č‹ËŅ钅¨, °ꀩ:ęnŲ.ŨčüÍ# ēTŲÄĘų‰åcä€Ac¨o‹¨[ģŨŗÜČđ-†ũhōl ‘$ˎBËp’+’‚É{3CĐ ’†‹û&4CōCŲ/÷Č'Ũĩl\ĸ|Z€n…x‘Š Ö)đ-ǏĪ6Ŗ7Åŗ€4Z íļ]4ôˆ|Sč QV Ŗ Ą-Ņ¸OЧˆZĀY'yY‡æŖĻŠ‹Ū 1@ß=˛lGĶZĄTHáĖōđ‘T\QBń-”ĘĢ šÁH¤ĪŊŧކŽ@7 ƒ‚wj™WZn6žkK­ĨEŖ^Œ]6ĸíÛŨųčųt|9Š “.Bü\’ĻQfkko0ęJS‚Ŋô¯ h„ũX<Ąė’[3‘Vã„\­™Ü ­ų‰ūU/ôîY=ˇšFËŌe’ &1FŽ%ãZi5^Đ öÜåÁ–ģÜÃFđ–ē,wRrÖ´ eåeŸ D ØÄ‹‘ä‚GŖ9ž4‰8ek āŨēO¤Q氜(ĩĖÎÜmĶÜ˖iÛ0kļK}ŗ”ļĘũn”ú6iÛ$Ĩ Ŋ*ī]Õ(Œv"H'ĖkÄP>r  ø3‹Ŧĩ†Œ…Äˆʲ´B BgÜŊÆPķ˜jžįkī{Jg{}?oü´üžëzh˔øØĐ>Ķ`xfÄP=ųk‰Á+jKä}6šFq€:é|FÜã`ˆĸzØVƒŅã#•T°)o˜@ąėī°ĒöZ•M[- … :3õ}CŽ1Nq+īÅ#`\š‡É:Ģ4mF<ÜČyV@ĻJŅМũ Fŧâ÷RōîĒU†l0˙„ĒßCÄ6Å ØŦôYtVŦˤIÆL—ž_•[Ļ™ŽGcĖî]Āø ˏ¸ 0Yۚ¸vđmūHH.Gī`o`{ūÛ1fĨū§‰-č0Ļ7֓Đ“ tåîĩH2\IÜRf+)%øD mäÚ Ę UŧõĄyķŖjU8ĶĻ< ¸”dķ€0§ņŌÔÅG­đh|†Fępbû]ŧ,ÃĸĄL JĒb…đûęc&™Jį%HÜšA|͆áėâũJâCdĄFã0oãå—MTî5ô{8˜Ą$G3LŅԟüĢ WŸ#Sņmķņ8›&tĮČOÍŅRhj‡ãĖŪ(KķÆ+ä8^ÆdÁÉg3ĖĄ:özöë0N*%Ë)Éēéė|>.e%+×yŅדt$€ nĖÔü|0?ŧėĪD+Mcjv(Cģfׂ!°Q(Šnē$˜åPTũšzĪĐc2&Đ")5d Ãéķ ü§gųh‰v,ų2îŦ&"Ŋ>ļ 9%ųĶnx*Ĩ†JĐqĘE"ČÄ|FtúŽģhc’ÄRŒ5Žį^ÜY%}§R4íí|\1“}Õņ€N¯ÁŪÉķšŊš/Ÿo]ŸyÎzz˙|÷ûøÆ>ę_ŋzŋķėõīÁâCđ,¸°Ÿ-ß^w“ųī“?>_ģû^|2~Ŋ•ŧ˜eĪė#~ŧ•­üˇvĪũsįVN¯7nņŠŋdeÔ|iûÉÜŗūgîφ–ÕOÁQu-3,ĶÚdŖÁ.MŲ×5s؂÷yšĄÉá?Ėb5ä¸ë&C[‘īŖx™‘Å1X›oDĪH|dņ؊"˙¤?‚ëvæq‰%°ŅÄ˙Bh‚2ˇ)ž…T|+Ũ9ī!ļĶ ÛĻ›féŧī=äÆYžų3^xöĢh÷ĪūΘ­ŪŽâgūÅUē?=y™œÛ[Wöá›íŒ?ūr`wæådd_ī/.§@\­>\}øåcļķŌ~quōÖ;{™tžšo7Û8ÚšŲGg@g>Ô^S\ŨMwŨ=ķ)ĀÂ$ūēá Ø*Q_z5”uČęXĖŠ`ą:Z j¸éVØ [g‡üԃÍöÆc›šDV‹îIqŗū t=ŖbZ‰^¨UEđ™*_9Ē›ÄLĘŧW­,ō×Ų 9.Œ"âY_pģ¨Ÿ V"…!r´Įĩô?´ŽT)Ô}K÷ļ9Œ§į"čų`’ŗķŠFhĪģDÛ;M‹]NĻŪāŧ“wĨŨ!/€SŨ†æö*íĄ=‚‘Ÿ™Äå–Ū x€Ŗƒƒ˙ü駟>îīž9}˙œoídãŸÎõ>ā|Š_„æĢ¤ØšŪlÆp;ŊO2t”fYŲŖ( “N5î%Š—ĒéØrØ3Ė09Ūpe´(ÎĖe€Z7âÕäAdÔëÂG3€“u9eÎÁxA4‹áØęĚe 9O;°Rúãé`…+¨†ųxÂŋž ŖjŒŋ™ë;ļmrŖ¸ļmWáôÆB¯` åéå“ Î Bģ%ieޤËƀ’Eb0mŊ˜ÅBP:GŌ%–ŽĖåyay @šŋ'NčMŽt!f%8LExģ„Ė25+Ö ;Ë;MgާO&ãŠAž6‰ŌŠÂ-eéú`ī}äš Â&ŖĪ+Ũņ 4[ˆRĘäV>DŽ˜R{Ŗ ‰j)’o6ÜÅXâÍŊ SŖŖäåZûJųĐŅž„ĖL7ĩ0LŨ‚Ę˜Ą—N'†Ķ'ĐÃęxD`qVŨ\ÍŠŒeYŨ€g#˜^š&ZÉ%n&+CÕ—à Fy‘î-ĸ;ˆŗņ™.â$‘v>ˆē°’TæŊ˜đŅŒL=|žÄDÕíũĢiürŽ>:vfÎĮfÁiW„ŪĢp#ųæē<œØ%åÔ˛YëĘ3ŦĒ—–š–Ú¨„S‘ž-|’ÅIÚg]$2ôŲQĸũ5ķg`Į”ĪZë !˙T~^Ė-ŋķöķqmXZÕU]Īh,—7æâÕhJšÎKē‰Š8ŧ7ŖRąd-Ļ•ĖÂ䖖&`(nŽÉžë’ú’EņÃ~ĪRq#;+ÄęE~\ō).•4Yę?U‘Ēų,*-§H„îŖėņHî(ŌCHëT Õ..đ1Ļ3 O(Ma%/ė=#<ĀHŧÆ9¤!vđQĄ¯ØĒ:§å<œĘį?#’yj0›ŲR|ųĢq4JŦļiŽŽT¸…\ķ€>ø¯ÆŲW3œgŋŠpXtū¸"qÕŦáËĻ[ĸĐö ęHâÎã˜L‹8š–#‘W7EÛ~#Nîq<ĘjX¨jÆÜ4ĸ܈š°RŪd8M ĪæņüR(ķjĪ*ãĨ’j´tĄcã0nœ€ŲžV_īéRøíC¸Qôô¨ĀŅâ4.ÁŌÃņ0ŽKŌÄOŦėĮe ”ŗ5ĩ JƐv–Ûū9ƜŠâ)˜ÛšXSÔß@BĪîõ24ė=ny˜C  čCüs4_AøJ€´1ãĶ,Œ[iaqKHBb=õoĖī͗Lf•d2´ģíî™C‡#dŠ´TRK.•/ŗdü-r tēNdЍ–xLbT`ŖĐ6,ŗÆY~Ē”'ËЗēVDC’i …&Ĩ‘Š6œŒKËđ—ą3Ū*ˇŪÁbŠĘaF1“‰¯.0Øä‰ë*;‰Åáûš,ũ:Č“ĸY/ŌÜeOÅ4ĮWTū˜t”#å̈́XĀ ėÍ4OŊL ņį1pvu­w?}õŅt?øo¯=y#QâKP âŗč`õ_ë|$&>}]ã÷ Čę:ŗ–›Ū1hä­r&Yüķåī×éjG4#Q˛RžÆˇSÆw<›čöW9sé…!KĖ ŗDõÎõVØ9ánaB ūģĘáÂä ‰?¯Â‘ąđdöÜq=3ĢNmĐ!Do ¸vž„ ņ6āÜŨÚQjĨiuPŲî>“ũđ!ĖĪåÉzģ0ûÃÍîV¨ö'æ2p[ĩ wĪnm´÷—C‘Øp"žīÄáfÜ3YFnj%uaQëžfluĄĄ’ ŊˇĀŲ)Į^,Ā|C~A.›’¨H“âsHy­ķúMí•mĄvåaš–:UMæĨmÕΓÍL¸ßŪŗÍĢÃ^9ÚŦëuk’WÆķÆÔ!CŋcK“ŽášO­ZĶíīÃgŽo[ųŽÕî?IĸõšjÔMŋŪBßŌöb=_z „6ϚŗvۆņZ3ŧā4&zŲäų^`ÕôŅ#ú}Û+|oŖWē QRo›õ°bXŽē Ä.ĪĶŨtoUŗVøū Ūuš{í¯ ;oØã›Îxüp_Ûl>ļY`ę[ĀŠDy—,P¤D;ČŽŪKÍĻ;šŪÜ=ęĢ…ȝ^clû oÜō-+pėA^?õŧ7ĒEĨÍ)kąŸ;âļšôZĒ /ļÎ\ší ĩîՄ;î č[Úa˛$ŽÉ’Ã‚­(ŧĀ+ę+mņ!üä™Iz÷y nęēäė&bIŨsyŋ"UŸîúCOŦoĒSEŸ[wzāŲ˛{ãÜ>6Ŗģč&āũîBˆ>Oö@Ģ íéĒiÉ{5Đ{ÛŦ<5Q´ÉD)i xĪ4Jr8ŲĐ,Œ@_)„6 |Mé;ąÖŗ!ËE|ju{3aEŋ÷KújC'ņ+¯tr!œO6zŧ„ûŖ gĨčcĸ¸N˜4Ņ Ą:ÄĀøR†G-Â@čžāąh¤8X P¸´aėМũq}ÅŗáŖ—)cļF†4(Fō>˜˛ƒa‚°ƒrQēãzjáØé¯íŋ×G–sf˜zŦœ(eĘĐ;˜x=Káĩ'ž4æiHÔÛ´ŌZĨÚmBâôŖ1ō’OÅW'q˛Į80ęöJã1…‘ēÎbA–Č0čËķÁ>ŅęĪūėW˜đ†Ä„0$&|€!1á ‰ `HLøCbÂ>˜đ†Ä„0$&|€!1á ‰ `HLøCbÂ>˜đ†Ä„0$&|€!1á ‰ `HLøCbÂ>˜đ†Ä„0$&|€!1á ‰‰`ŲZĻŋÆ ¨\ŽŲ4‘ļrž0CÁ*įc˛ml[)ļ#+iLą+Ųndå!f§|+ndåSe¤ĖĘĻYšĮ4^ÉĢp˛2ŸrVōŠnv˜9ŧ•+ģž†Ũ˜9´•Í„NŨd™9Ŧ•™ęäwsÕĖA­\LcĒõQŪ͆—ZIÎbĒ7˛§›3‡ŗ˛˛~:nšœudg€j pOžękją7aeķ¸ĮũˆpåØÃēã9lqčæJSēIƒnLįpÅ ÄĘĘ9­e7†s¸bĸ›ŒnžĶÚuc6‡ '(+'Ã+ ^sČrŗ’ŧ‚mĶĶ wĪnŠ0 ŧ0­ãYiā…hĨ(ŅJqˆŨtžCaĒ•*/4+ÅQ¸V*ŧČJGĖ VvÄ [Ųí…deWļģPáW+cŒÍĀĊw7M1a­XD:`ú„?´wĀô? ënÅģ›.˜pV*œÄąRSVĖ0ĄŦT9‰dĨ *ËJķ9Đ0AŦTn)‘­´ŊiÔÍJ—9Đ0ŦTo)ą­´ŧíŨÉJˇ9Đ0p+ ļ”čVÚ=¸ĶÅJ×9Đ0\+ŽēcŽn-˛â€ bĨûhĻ•EVļâŦ˜Ė†‘"†ge‘•í}˜ŋŗ9Đ0˛BÄČ Ã˛˛ČĘųRcđļb:FVˆY!bd…ˆ‘"†ce9ˇb>fŋŦ¸bd…ˆ‘"FVˆY!bd…ˆ‘"FVˆY!bd…ˆ‘"FVˆY!bd…ˆ‘"FVˆY!bd…ˆĄXŅ}û‹I\BV1˛BÄČ #+D ֊žÉ‡XŅû+gSHAVÜ0˛BÄ ­čbˆŊoO|ß^VXŅ÷¸4čĻMYŲΰĸīĢîFVj1\+'YYNąĸīh­ėĻa€Ã[i×M'+úîīĒnš8´•–Ũtŗĸ˙Sĸĸ›ÆkĨm7­ėđÉJvT+•^âX)ˆ)+f˜`VĒŧDąR‘hĨČK +…V*ļ–ˆVztĶ)ĀN/ŦGŖZÉö¡˛#ĮĘN/t+VĄÂ¯V†ģ€á.¸ĪŖf÷ĄĨŦtÄ cÅâĐŪc{f|Üū℠Ļ ĶĘe¤ļˇ"ēc Úo֍ÃEī`<+ÕN¸V˛ÃŅŦ4pBļ’éeeš´bՍá2ŧ€Ŧ,—Vėē1ÃĨ—ú;{„úۛߥÆs¸âaeIYąíÆ|)/K9ĻS¨˙ēō{UĘeĢ^œ­,)+Ũ8Íae‹q´’čĮīëĩÜæôâ4‡ô:˛ø­#ŽûŒ¤•{’nVŒøÎ†¸'7:]ķø”s?ę9­[ŲmfĪ•†DÉC[9›RęĘĶ7eW°W ŪƝeÃJĄœ§2ā˛rš>ŧ ?ëˇĢŠp˛rŽÉåę’/wS°Ŧ<ÄYÎ†jåĪŌŅ z6l+–ÆVĄ •Ë1•V˜Ą`•ë0™Vb…T†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbeaˆ•…!V†XYbea6ūÉOPK㤖P$˙D=ômps.psUT Z ^Ÿ ^ux ččĨ•M›0†īü ÷cl>ܚŨÍiĨĸîJ=ŽØ0!VÁ^'[Šęī Á¤Ē"†ņØķ>ņėKū2˙Zęw˜ķ…īÍf ĢMÆō—ˇFZXl°÷UÚ2öQX F->Zėˋ ڌqü|ÔÛCĘÎ7ZYė{• ´ķīē)TRjõXXŒá§K‘.Ķ”Ąg­Ē”ĒZë_ bÆē&ZaŗŠbđ\¨ę€:Īp„ú¤õ¤ĘŨAŦĄ’*7ēÖÕÉwū^JĩŨŗß+ÁšCũ‡•°ķ–yQ#‡Ō'0ļ“ĒÜ!¯‡ ÷Y7žŨ5t}-ØîÍ|tĸ{üB¯ŠŪˇ¨dΉČ=ŧkŧļ8Í\Ļ¸/w&Sđ‰Ũ{Ũ˛šˆYŖ`ĩ×e€ėZĒ‹ĮƒMã¯mwüméÖũ!ų­å!Ŗ(š@˛ÔG°đ"Ę ’‹ÁN“ämŠj™ ^ux ččPKĮĸ–PRū<C ´Nwhite.pngUTf™ ^ux ččPKn¤–PgŖĖ>äL‹K´ Opdf.pdfUTœ ^ux ččPKZ¤–P|rÂoI>´1œbmp.bmpUT\œ ^ux ččPKüĸ–P•Iŋ> ´‰åjpeg2.jp2UTĖ™ ^ux ččPKöĸ–P+ÛFA1LRI ´ę.webp.webpUTĀ™ ^ux ččPKäĨ–P”¤יh= ´^{circle.pnmUT<Ÿ ^ux ččPK㤖P$˙D=ôm´;ps.psUTZ ^ux ččPK nƒleptonica-1.86.0/prog/fuzzing/graphics_fuzzer.cc000066400000000000000000000047631506303110300217450ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PTA *pta1 = ptaCreate(0); PIX *pix_return1 = pixFillPolygon(pixs_payload, pta1, 2, 2); ptaDestroy(&pta1); pixDestroy(&pix_return1); PTA *pta_return1 =pixGeneratePtaBoundary(pixs_payload, 1); ptaDestroy(&pta_return1); BOX *box1 = boxCreate(150, 130, 1500, 355); pixRenderBox(pixs_payload, box1, 3, 200); boxDestroy(&box1); BOXA *boxa1; boxa1 = boxaCreate(0); pixRenderBoxa(pixs_payload, boxa1, 17, 200); boxaDestroy(&boxa1); boxa1 = boxaCreate(0); pixRenderBoxaBlend(pixs_payload, boxa1, 17, 200, 1, 25, 0.4, 1); boxaDestroy(&boxa1); PIX *pix_return12 = pixRenderContours(pixs_payload, 2, 4, 1); pixDestroy(&pix_return12); pixRenderGridArb(pixs_payload, 1, 1, 1, 1, 1, 1); BOX *box2 = boxCreate(150, 130, 1500, 355); pixRenderHashBox(pixs_payload, box2, 2, 1, 1, 0, L_SET_PIXELS); boxDestroy(&box2); BOX *box3 = boxCreate(150, 130, 1500, 355); pixRenderHashBoxBlend(pixs_payload, box3, 2, 1, L_HORIZONTAL_LINE, 0, 1, 1, 1, 1.0); boxDestroy(&box3); BOXA *boxa2; boxa2 = boxaCreate(1); pixRenderHashBoxa(pixs_payload, boxa2, 2, 1, L_HORIZONTAL_LINE, 0, L_SET_PIXELS); boxaDestroy(&boxa2); boxa1 = boxaCreate(1); pixRenderHashBoxaArb(pixs_payload, boxa1, 2, 1, L_HORIZONTAL_LINE, 0, 1, 1, 1); boxaDestroy(&boxa1); PIX *pixs = pixRead("../test8.jpg"); pixRenderHashMaskArb(pixs_payload, pixs, 2, 2, 2, 1, L_HORIZONTAL_LINE, 0, 1, 1, 1); pixDestroy(&pixs); pixRenderLineBlend(pixs_payload, 30, 60, 440, 70, 5, 115, 200, 120, 0.3); PIX *pixs_payload2 = pixCopy(NULL, pixs_payload); NUMA *na2 = numaGammaTRC(1.7, 150, 255); pixRenderPlotFromNumaGen(&pixs_payload2, na2, L_HORIZONTAL_LINE, 3, 1, 80, 1, 1); numaDestroy(&na2); pixDestroy(&pixs_payload2); PTA *pta2 = ptaCreate(0); pixRenderPolylineArb(pixs_payload, pta2, 1, 1, 1, 1, 0); ptaDestroy(&pta2); PTA *pta3 = ptaCreate(0); pixRenderPolylineBlend(pixs_payload, pta3, 17, 25, 200, 1, 0.5, 1, 1); ptaDestroy(&pta3); NUMA *na1 = numaGammaTRC(1.7, 150, 255); pixRenderPlotFromNuma(&pixs_payload, na1, L_HORIZONTAL_LINE, 3, 1, 80); numaDestroy(&na1); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/graymorph_fuzzer.cc000066400000000000000000000017561506303110300221540ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix_pointer_payload, *return_pix; pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixCloseGray3(pix_pointer_payload, 3, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixDilateGray3(pix_pointer_payload, 3, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixErodeGray3(pix_pointer_payload, 3, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixOpenGray3(pix_pointer_payload, 3, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/grayquant_fuzzer.cc000066400000000000000000000026711506303110300221540ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix_pointer_payload, *return_pix; pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixDitherTo2bpp(pix_pointer_payload, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixDitherToBinary(pix_pointer_payload); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixGenerateMaskByBand(pix_pointer_payload, 1, 2, 1, 1); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixGenerateMaskByBand32(pix_pointer_payload, 1, 1, 1, 0.0, 0.0); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixGenerateMaskByDiscr32(pix_pointer_payload, 10, 10, L_MANHATTAN_DISTANCE); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); const char *str = "45 75 115 185"; pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixThresholdGrayArb(pix_pointer_payload, str, 8, 0, 0, 0); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/jpegiostub_fuzzer.cc000066400000000000000000000005211506303110300223040ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; pixSetChromaSampling(pixs_payload, 0); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/kernel_fuzzer.cc000066400000000000000000000005751506303110300214220ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; L_KERNEL *kel1 = kernelCreateFromPix(pixs_payload, 2, 2); pixDestroy(&pixs_payload); kernelDestroy(&kel1); return 0; } leptonica-1.86.0/prog/fuzzing/leptfuzz.h000066400000000000000000000005041506303110300202520ustar00rootroot00000000000000/* Common include file for Leptonica fuzzers. */ #ifndef LEPTFUZZ_H #define LEPTFUZZ_H #include "allheaders.h" static void send_to_devnull(const char *) {} /* Suppress Leptonica error messages during fuzzing. */ static void leptSetStdNullHandler() { leptSetStderrHandler(send_to_devnull); } #endif /* LEPTFUZZ_H */ leptonica-1.86.0/prog/fuzzing/mask_fuzzer.cc000066400000000000000000000016341506303110300210720ustar00rootroot00000000000000#include "leptfuzz.h" PIX * MakeReplacementMask(PIX *pixs) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixMaskOverColorPixels(pixs, 95, 3); pix2 = pixMorphSequence(pix1, "o15.15", 0); pixSeedfillBinary(pix2, pix2, pix1, 8); pix3 = pixMorphSequence(pix2, "c15.15 + d61.31", 0); pix4 = pixRemoveBorderConnComps(pix3, 8); pixXor(pix4, pix4, pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pix4; } extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs, *pix1, *pix2; pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; pix1 = MakeReplacementMask(pixs); pix2 = pixConvertTo8(pix1, FALSE); pixPaintSelfThroughMask(pix2, pix1, 0, 0, L_HORIZ, 30, 50, 5, 10); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } leptonica-1.86.0/prog/fuzzing/maze_fuzzer.cc000066400000000000000000000010501506303110300210630ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *ppixd; PTA *pta = pixSearchBinaryMaze(pixs_payload, 1, 2, 3, 4, &ppixd); pixDestroy(&ppixd); ptaDestroy(&pta); PTA *pta2 = pixSearchGrayMaze(pixs_payload, 1, 2, 3, 4, &ppixd); pixDestroy(&ppixd); ptaDestroy(&pta2); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/morph_fuzzer.cc000066400000000000000000000024761506303110300212710ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; PIX *pix, *pix1, *pix_copy1, *pix_copy2, *pix_copy3, *pix_copy4; BOX *box1; SEL *sel; pix = pixRead("../feyn-fract.tif"); box1 = boxCreate(507, 65, 60, 36); pix1 = pixClipRectangle(pix, box1, NULL); sel = selCreateFromPix(pix1, 6, 6, "plus_sign"); pix_copy1 = pixCopy(NULL, pixs_payload); pixCloseGeneralized(pix_copy1, pix, sel); boxDestroy(&box1); pixDestroy(&pix_copy1); pixDestroy(&pix1); pix_copy2 = pixCopy(NULL, pixs_payload); pixCloseSafe(pix_copy2, pix, sel); pixDestroy(&pix_copy2); pix_copy3 = pixCopy(NULL, pixs_payload); pixOpenGeneralized(pix_copy3, pix, sel); pixDestroy(&pix_copy3); pixDestroy(&pix); selDestroy(&sel); for (l_int32 i = 0; i < 5; i++) { if ((sel = selCreate (i, i, "sel_5dp")) == NULL) continue; char *selname = selGetName(sel); pix_copy4 = pixCopy(NULL, pixs_payload); pixMorphDwa_1(pix_copy4, pix_copy4, i, selname); pixDestroy(&pix_copy4); selDestroy(&sel); } pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/morphapp_fuzzer.cc000066400000000000000000000037571506303110300217750ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); Pix *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; Pix *pix1 = pixRead("../test8.jpg"); Pix *pix2 = pixRead("../test8.jpg"); Pix *pix_return1 = pixDisplayMatchedPattern(pixs_payload, pix1, pix2, 1, 2, 3, 0.5, 1); pixDestroy(&pix1); pixDestroy(&pix_return1); pixDestroy(&pix2); Pix *pix_return2 = pixFastTophat(pixs_payload, 2, 2, L_TOPHAT_WHITE); pixDestroy(&pix_return2); Pix *pix_return3 = pixHDome(pixs_payload, 1, 4); pixDestroy(&pix_return3); Sela *sela1 = selaCreate(0); Pix *pix_return4 = pixIntersectionOfMorphOps(pixs_payload, sela1, L_MORPH_DILATE); selaDestroy(&sela1); pixDestroy(&pix_return4); Pix *pix_return5 = pixMorphGradient(pixs_payload, 5, 5, 1); pixDestroy(&pix_return5); pix1 = pixRead("../test8.jpg"); Boxa *boxa1; const char *sequence = "sequence"; Pix *pix_return6 = pixMorphSequenceByRegion(pixs_payload, pix1, sequence, 4, 1, 1, &boxa1); boxaDestroy(&boxa1); pixDestroy(&pix1); pixDestroy(&pix_return6); pix1 = pixRead("../test8.jpg"); Pix *pix_return7 = pixMorphSequenceMasked(pixs_payload, pix1, sequence, 0); pixDestroy(&pix1); pixDestroy(&pix_return7); pix1 = pixCreate(300, 300, 32); pix2 = pixCreate(300, 300, 32); pixRemoveMatchedPattern(pixs_payload, pix1, pix2, 2, 2, 2); pixDestroy(&pix1); pixDestroy(&pix2); Pix *pix = pixCreate(300, 300, 32); Pix *pix_return8 = pixSeedfillMorph(pixs_payload, pix, 0, 4); pixDestroy(&pix_return8); pixDestroy(&pix); Pix *pix_return9 = pixSelectiveConnCompFill(pixs_payload, 4, 1, 1); pixDestroy(&pix_return9); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/oss-fuzz-build.sh000077500000000000000000000075351506303110300214650ustar00rootroot00000000000000# libz pushd $SRC/zlib ./configure --static --prefix="$WORK" make -j$(nproc) all make install popd # libzstd pushd $SRC/zstd make -j$(nproc) install PREFIX="$WORK" popd # libjbig pushd "$SRC/jbigkit" make clean make -j$(nproc) lib cp "$SRC"/jbigkit/libjbig/*.a "$WORK/lib/" cp "$SRC"/jbigkit/libjbig/*.h "$WORK/include/" popd # libjpeg-turbo pushd $SRC/libjpeg-turbo cmake . -DCMAKE_INSTALL_PREFIX="$WORK" -DENABLE_STATIC:bool=on make -j$(nproc) make install popd # libpng pushd $SRC/libpng cat scripts/pnglibconf.dfa | \ sed -e "s/option WARNING /option WARNING disabled/" \ > scripts/pnglibconf.dfa.temp mv scripts/pnglibconf.dfa.temp scripts/pnglibconf.dfa autoreconf -f -i ./configure \ --prefix="$WORK" \ --disable-shared \ --enable-static \ LDFLAGS="-L$WORK/lib" \ CPPFLAGS="-I$WORK/include" make -j$(nproc) make install popd # libwebp pushd $SRC/libwebp WEBP_CFLAGS="$CFLAGS -DWEBP_MAX_IMAGE_SIZE=838860800" # 800MiB ./autogen.sh CFLAGS="$WEBP_CFLAGS" ./configure \ --enable-asserts \ --enable-libwebpdemux \ --enable-libwebpmux \ --disable-shared \ --disable-jpeg \ --disable-tiff \ --disable-gif \ --disable-wic \ --prefix=$WORK make clean make -j$(nproc) make install popd # libtiff pushd "$SRC/libtiff" autoreconf -fi ./configure \ --disable-lzma \ --disable-shared \ --disable-dependency-tracking \ --prefix=$WORK make -j$(nproc) make install popd # leptonica export LEPTONICA_LIBS="$WORK/lib/libjbig.a $WORK/lib/libzstd.a $WORK/lib/libwebp.a $WORK/lib/libpng.a $WORK/lib/libsharpyuv.a" ./autogen.sh ./configure \ --enable-static \ --disable-shared \ --with-libpng \ --with-zlib \ --with-jpeg \ --with-libwebp \ --with-libtiff \ --prefix="$WORK" \ LIBS="$LEPTONICA_LIBS" \ LDFLAGS="-L$WORK/lib" \ CPPFLAGS="-I$WORK/include -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" make -j$(nproc) make install for f in $SRC/leptonica/prog/fuzzing/*_fuzzer.cc; do fuzzer=$(basename "$f" _fuzzer.cc) $CXX $CXXFLAGS -std=c++11 -I"$WORK/include" \ $SRC/leptonica/prog/fuzzing/${fuzzer}_fuzzer.cc -o $OUT/${fuzzer}_fuzzer \ -Isrc/ \ "$WORK/lib/libleptonica.a" \ "$WORK/lib/libtiff.a" \ "$WORK/lib/libwebp.a" \ "$WORK/lib/libpng.a" \ "$WORK/lib/libjpeg.a" \ "$WORK/lib/libjbig.a" \ "$WORK/lib/libzstd.a" \ "$WORK/lib/libz.a" \ "$WORK/lib/libsharpyuv.a" \ $LIB_FUZZING_ENGINE done cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/adaptmap_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/affine_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/baseline_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/bilateral_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/bilinear_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/binarize_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/blend_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/checkerboard_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/classapp_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/pix_rotate_shear_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/enhance_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/colorquant_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/dewarp_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/pix_orient_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/pixconv_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/general_corpus.zip $OUT/blend_fuzzer_seed_corpus.zip cp $SRC/leptonica/prog/fuzzing/pixa_recog_fuzzer_seed_corpus.zip $OUT/ cp $SRC/leptonica/prog/fuzzing/barcode_fuzzer_seed_corpus.zip $OUT/ leptonica-1.86.0/prog/fuzzing/pageseg_fuzzer.cc000066400000000000000000000020001506303110300215360ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { leptSetStdNullHandler(); l_int32 score; PIX *pixs; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2; PIXAC *pixac; BOX *box; BOXA *boxa; pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; pixa1 = pixaCreate(0); pixDecideIfTable(pixs, NULL, L_PORTRAIT_MODE, &score, pixa1); pixaDestroy(&pixa1); pixa1 = pixaCreate(0); pixGetRegionsBinary(pixs, &pix1, &pix2, &pix3, pixa1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa1); pixac = pixacompReadMem(data, size); box = pixFindPageForeground(pixs, 170, 70, 30, 0, pixac); boxDestroy(&box); pixacompDestroy(&pixac); pixSplitIntoCharacters(pixs, 4, 4, &boxa, &pixa2, &pix4); boxaDestroy(&boxa); pixaDestroy(&pixa2); pixDestroy(&pix4); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/fuzzing/paintcmap_fuzzer.cc000066400000000000000000000012701506303110300221070ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; BOX *box1; PIX *pix_pointer_payload; box1 = boxCreate(278, 35, 122, 50); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixSetSelectCmap(pix_pointer_payload, box1, 2, 255, 255, 100); boxDestroy(&box1); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixSetSelectMaskedCmap(pix_pointer_payload, NULL, 1, 50, 0, 250, 249, 248); pixDestroy(&pix_pointer_payload); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/pix1_fuzzer.cc000066400000000000000000000005321506303110300210140ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { leptSetStdNullHandler(); l_uint32 *data2; PIX *pixs; pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; data2 = pixExtractData(pixs); lept_free(data2); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/fuzzing/pix3_fuzzer.cc000066400000000000000000000105631506303110300210230ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if(size<3) return 0; leptSetStdNullHandler(); PIX *pixs_payload = pixReadMemSpix(data, size); if(pixs_payload == NULL) return 0; BOX *box1; PIX *pix_pointer_payload, *return_pix, *pix2; NUMA *return_numa; l_float32 l_f; l_int32 l_i; l_uint32 l_ui; BOXA *boxa1; box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixAbsDiffByColumn(pix_pointer_payload, box1); pixDestroy(&pix_pointer_payload); boxDestroy(&box1); numaDestroy(&return_numa); box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixAbsDiffByRow(pix_pointer_payload, box1); pixDestroy(&pix_pointer_payload); boxDestroy(&box1); numaDestroy(&return_numa); box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixAbsDiffInRect(pix_pointer_payload, box1, L_HORIZONTAL_LINE, &l_f); pixDestroy(&pix_pointer_payload); boxDestroy(&box1); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixAbsDiffOnLine(pix_pointer_payload, 2, 2, 3, 3, &l_f); pixDestroy(&pix_pointer_payload); box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixAverageByColumn(pix_pointer_payload, box1, L_BLACK_IS_MAX); boxDestroy(&box1); pixDestroy(&pix_pointer_payload); numaDestroy(&return_numa); box1 = boxCreate(150, 130, 1500, 355); return_numa = pixAverageByRow(pix_pointer_payload, box1, L_WHITE_IS_MAX); boxDestroy(&box1); pixDestroy(&pix_pointer_payload); numaDestroy(&return_numa); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixAverageInRect(pix_pointer_payload, NULL, NULL, 0, 255, 1, &l_f); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixAverageInRectRGB(pix_pointer_payload, NULL, NULL, 10, &l_ui); pixDestroy(&pix_pointer_payload); boxa1 = boxaCreate(0); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixCopyWithBoxa(pix_pointer_payload, boxa1, L_SET_WHITE); pixDestroy(&pix_pointer_payload); boxaDestroy(&boxa1); pixDestroy(&return_pix); for (int i = 0; i < 5; i++) { box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixCountArbInRect(pix_pointer_payload, box1, L_SET_WHITE, 2, &l_i); pixDestroy(&pix_pointer_payload); boxDestroy(&box1); } box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixCountByRow(pix_pointer_payload, box1); pixDestroy(&pix_pointer_payload); boxDestroy(&box1); numaDestroy(&return_numa); box1 = boxCreate(150, 130, 1500, 355); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixCountPixelsInRect(pix_pointer_payload, box1, &l_i, NULL); boxDestroy(&box1); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixMakeArbMaskFromRGB(pix_pointer_payload, -0.5, -0.5, 1.0, 20); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); for (int i = 0; i < 5; i++) { return_pix = pixMakeMaskFromVal(pix_pointer_payload, i); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); } pix2 = pixRead("../test8.jpg"); pix_pointer_payload = pixCopy(NULL, pixs_payload); pixPaintSelfThroughMask(pix_pointer_payload, pix2, 0, 0, L_HORIZ, 30, 50, 5, 10); pixDestroy(&pix2); pixDestroy(&pix_pointer_payload); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_pix = pixSetUnderTransparency(pix_pointer_payload, 0, 0); pixDestroy(&pix_pointer_payload); pixDestroy(&return_pix); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixVarianceByColumn(pix2, NULL); pixDestroy(&pix_pointer_payload); numaDestroy(&return_numa); pix_pointer_payload = pixCopy(NULL, pixs_payload); return_numa = pixVarianceByRow(pix_pointer_payload, NULL); pixDestroy(&pix_pointer_payload); numaDestroy(&return_numa); box1 = boxCreate(150, 130, 1500, 355); pixVarianceInRect(pix_pointer_payload, box1, &l_f); boxDestroy(&box1); pixDestroy(&pix_pointer_payload); pixDestroy(&pixs_payload); return 0; } leptonica-1.86.0/prog/fuzzing/pix4_fuzzer.cc000066400000000000000000000056271506303110300210310ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { leptSetStdNullHandler(); PIX *pixs; BOX *box; pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; NUMA *na1, *na2, *na3, *na4, *na5, *na6; NUMAA *naa1; pix1 = pixConvertTo8(pixs, FALSE); box = boxCreate(120, 30, 200, 200); na1 = pixGetGrayHistogramInRect(pix1, box, 1); numaDestroy(&na1); boxDestroy(&box); pixDestroy(&pix1); naa1 = pixGetGrayHistogramTiled(pixs, 1, 1, 1); numaaDestroy(&naa1); pix1 = pixConvertTo8(pixs, FALSE); na1 = pixGetCmapHistogramMasked(pix1, NULL, 1, 1, 1); numaDestroy(&na1); pixDestroy(&pix1); pix1 = pixConvertTo8(pixs, FALSE); box = boxCreate(120, 30, 200, 200); na1 = pixGetCmapHistogramInRect(pix1, box, 1); numaDestroy(&na1); boxDestroy(&box); pixDestroy(&pix1); l_int32 ncolors; pixCountRGBColors(pixs, 1, &ncolors); l_uint32 pval; pix1 = pixConvertTo8(pixs, FALSE); pixGetPixelAverage(pix1, NULL, 10, 10, 1, &pval); pixDestroy(&pix1); pix1 = pixConvertTo8(pixs, FALSE); l_uint32 pval2; pixGetPixelStats(pix1, 1, L_STANDARD_DEVIATION, &pval2); pixDestroy(&pix1); pix1 = pixConvertTo8(pixs, FALSE); if(pix1!=NULL){ pix2 = pixConvert8To32(pix1); pixGetAverageTiledRGB(pix2, 2, 2, L_MEAN_ABSVAL, &pix3, &pix4, &pix5); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } pixRowStats(pixs, NULL, &na1, &na2, &na3, &na4, &na5, &na6); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); pixColumnStats(pixs, NULL, &na1, &na2, &na3, &na4, &na5, &na6); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); static const l_int32 nbins = 10; l_int32 minval, maxval; l_uint32 *gau32; pix1 = pixScaleBySampling(pixs, 0.2, 0.2); pixGetBinnedComponentRange(pix1, nbins, 2, L_SELECT_GREEN, &minval, &maxval, &gau32, 0); pixDestroy(&pix1); lept_free(gau32); PIX *pixd = pixSeedspread(pixs, 4); PIX *pixc = pixConvertTo32(pixd); PIX *pixr = pixRankBinByStrip(pixc, L_SCAN_HORIZONTAL, 1, 10, L_SELECT_MAX); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixr); PIXA *pixa = pixaReadMem(data, size); pix1 = pixaGetAlignedStats(pixa, L_MEAN_ABSVAL, 2, 2); pixaDestroy(&pixa); pixDestroy(&pix1); l_int32 thresh, fgval, bgval; pix1 = pixConvertTo8(pixs, 0); pixSplitDistributionFgBg(pix1, 1.5, 1, &thresh, &fgval, &bgval, &pix2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/fuzzing/pix_orient_fuzzer.cc000066400000000000000000000006721506303110300223200ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<3) return 0; l_int32 rotation; l_float32 upconf1, leftconf1; PIX *pix1, *pix2; leptSetStdNullHandler(); pix1 = pixReadMemSpix(data,size); if(pix1==NULL) return 0; pix2 = pixOrientCorrect(pix1, 1.0, 1.0, &upconf1, &leftconf1, &rotation, 0); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } leptonica-1.86.0/prog/fuzzing/pix_rotate_shear_fuzzer.cc000066400000000000000000000045411506303110300234770ustar00rootroot00000000000000// The fuzzer takes as input a buffer of bytes. The buffer is read in as: // , , , and the remaining bytes will be read // in as a . The image is then rotated by angle around the center. All // inputs should not result in undefined behavior. #include #include #include #include #include #include "leptfuzz.h" // Set to true only for debugging; always false for production static const bool DebugOutput = false; namespace { // Reads the front bytes of a data buffer containing `size` bytes as an int16_t, // and advances the buffer forward [if there is sufficient capacity]. If there // is insufficient capacity, this returns 0 and does not modify size or data. int16_t ReadInt16(const uint8_t** data, size_t* size) { int16_t result = 0; if (*size >= sizeof(result)) { memcpy(&result, *data, sizeof(result)); *data += sizeof(result); *size -= sizeof(result); } return result; } } // namespace extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { const int16_t angle = ReadInt16(&data, &size); const int16_t x_center = ReadInt16(&data, &size); const int16_t y_center = ReadInt16(&data, &size); leptSetStdNullHandler(); // Don't do pnm format (which can cause timeouts) or // jpeg format (which can have uninitialized variables). // tiff and png can also take too much memory in this test, // but not in applications because they abort quickly after // reading the header and computing the size of the data. // Note that the format checker requires at least 12 bytes. if (size < 12) return EXIT_SUCCESS; int format; findFileFormatBuffer(data, &format); if (format == IFF_PNM || format == IFF_JFIF_JPEG || format == IFF_TIFF || format == IFF_PNG) return EXIT_SUCCESS; Pix* pix = pixReadMem(reinterpret_cast(data), size); if (pix == nullptr) { return EXIT_SUCCESS; } // Never in production if (DebugOutput) { L_INFO("w = %d, h = %d, d = %d\n", "fuzzer", pixGetWidth(pix), pixGetHeight(pix), pixGetDepth(pix)); } constexpr float deg2rad = M_PI / 180.; Pix* pix_rotated = pixRotateShear(pix, x_center, y_center, deg2rad * angle, L_BRING_IN_WHITE); if (pix_rotated) { pixDestroy(&pix_rotated); } pixDestroy(&pix); return EXIT_SUCCESS; } leptonica-1.86.0/prog/fuzzing/pixa_recog_fuzzer.cc000066400000000000000000000025061506303110300222560ustar00rootroot00000000000000#include "leptfuzz.h" #include #include extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<10) return 0; leptSetStdNullHandler(); char filename[256]; sprintf(filename, "/tmp/libfuzzer.pa"); FILE *fp = fopen(filename, "wb"); if (!fp) return 0; fwrite(data, size, 1, fp); fclose(fp); PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5; L_RECOG *recog1, *recog2; PIX *pix1, *pix2, *pix3, *pix4; pixa1 = pixaRead(filename); recog1 = recogCreateFromPixa(pixa1, 0, 40, 1, 128, 1); pixa2 = recogTrainFromBoot(recog1, pixa1, 0.75, 128, 1); pixa3 = pixaRemoveOutliers1(pixa1, 0.8, 4, 3, &pix1, &pix2); pixa4 = pixaRemoveOutliers2(pixa1, 0.8, 4, &pix3, &pix4); recog2 = recogCreateFromPixa(pixa1, 4, 40, 1, 128, 1); recogIdentifyMultiple(recog2, pix2, 0, 0, NULL, &pixa5, NULL, 1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); recogDestroy(&recog1); recogDestroy(&recog2); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixaDestroy(&pixa4); pixaDestroy(&pixa5); unlink(filename); return 0; } leptonica-1.86.0/prog/fuzzing/pixa_recog_fuzzer_seed_corpus.zip000066400000000000000000001242531506303110300250720ustar00rootroot00000000000000PK–”œP!žŪ¨éB test06.paUT Ŧi¨^Ŧi¨^ux ččė›P“ÛÖ÷é%zŊwĄ ĄƒôŌ¤éŊIīDAŠzčU”Ž•Đģ‚‚)ĸ€X€Žzî{/ߝŅ÷\įšs’Ų$ŗæ ŗ×īŲûŋ×~ÖÚMŋtú6žŽ.tüuogK:W[:7?:I:~^~@Æõß\céęgãy~/āâōëŧĻbt~Xxyščü˙üˆĶTW(HHH@e%9íķOâķFƒ|ūéM3Yįųļ›’‘'7ãECö+‘ōš0zÉzÉē:;Û¸x!‰Nķ ãõ•å ēXŲ’Īꁥŧ¸rcoĸGČHĒ2uĢVbÉ)ĀtVŦᯔ;EП’Ũč${;dh­t/mUļĶĄˇ7€FŽŽĻã“øėÁČævŒ–ŗũĘFĪ.íUæāž‹>)ËĢËÕČX„˙áß/9ÆzŪh˙pLuĶđß9øŸŽņAäązbĪ­Zß<ŗéžđ Uē7B¨ ģhL=š,ŠĐī aŋ ayÚgQŖ;@Îbho%ôÁĒTÍöœëÁT§/ļߙ´b˛{Ÿŋ-Iú€>QU{§ÜŽĖŅ$ í’SüŋäĮŸN=Ďܸ)§øyßAŅ..øæ”Đh=• ]FŲÅčw{ÄzßÛĀ6˛*|ĩĮiö=ŠœCM,mĸ#~4æiːOŽzކfĩ/ÖÖÆoā}”+îüŪm#åMÂFjm¯d9c]›}‚Nc(ÉFÍãų +äQÚ‡pņn Á2Ļ{PœsˆÖr1§wŒyĸé¯v-/!đ_žˇÔ`@UŌų9 ü46c*úų>5@¸&YôØ ZŪ&ŪMÖæú¸ŽŗDÆ*ÆwÆ^T°D"vØbŒ]Ē;œ^RËDyÜuã-aÚ_}üvĸ_Û>Ūŋg´Ur#ĪĄĸvSß*ÎĐ"ېFĖbŠęÚĀ^Í."6ą°\1ķ1Ļ É€:pļ2=VŸäô tĶ Ņ‚_<øá%‚˙ ņ˙_ +įíÚj4–Ė˙Aáû+Ī’…˙_)ķŊæØ8ˇš_PPŠŗ:NÁäE(MĶÜߖšÖĄŅxŧ}_Ëč•ÍÜūĐiWå]Ÿ†Ļ<Ė›€ø eĮ˛lŽ[„Šũ9í†fIÃxs'$ÅĀ{C§•e]Š~‡ãu4Tá h¯ąk;šˇø.š'ô;ŨXäHøŋtOø—Æ1ÛyŖûÃEĨiĖęŸĮÂüŒ]įÖ¤oã˜úy7v//.:ÂÕëŖu†cf2û>‚°ME–Û¨‹ ŠÔ›“8]ų@XEËe¨l_ˇ‡+oĖ:˜PĢ%āč_œ8ąä~ģßÄ9ŋҁjĪB .ėG’ØQ3dnŽU3,[IŦâ’P]r\ú˛žsSˇÔ‹s÷#V—Ë•x,lĶ’šā¯¤Ėo+-Ļ)]ų% ėę›ļČÜ۟"dJÕ?ˇf|ŸØĪģ(ô舚m¨ëmiFKERéi>Ē–+ÂT7Q­{’z‡ÃČ4R"ŗĪbä˜(JõUŋč%c–Ļ“J Ŧ5ą=9@ķ-Ą+ž˙4yŽÃ§2Ĥč°qE‹ĖmđŗV—§ÉĘQk {2ˆĪ˜æpÅnI´Bʅ ~ęqķõGÍUî;]pÂŧF‚xÍįĨOĀUĸžUyä_o]Â"ō[gščΞ˙Å­¨ų6 v&ëŌhŌLáøė+¨e@ŗhø,ļ‘×úXŒüí+yAŌČíw¨čÔXÅwĖn0ŠÖ}v˞UÎß4„Nq9c 1ģn5lĸyCā͔…xGuĻ”°d{k øĮ{ĨđWåø™Â‡ÁŨ^2ԓëhBđ<Ž›Uã7ōtU“˜!r/sžkz×AĻš§} ī“žĶn9Đũ(Kŗãš°%ĩب­~™ĄåžDKôwŌ‚Æ_l:ˇŪūNkŧx>ŖĐ4)Čģí“ŧŒGō: úDŠPĄa×Š/ˇ 9A÷.ōW$;īyÉ”¨­í´l<¯ hķ5ⲌšŊ ņmõНpvÖØ!f ¨xW{‚@L<ī™ád ŪzH­\‘ļmę8 zūQ=‰Îú o+ŅIī æĸ[TājöÚ/I“J9ÃMdqƙž ũZœ÷ŋˆ°ĩž^ÖšÕûÛĖR{ZDâĸuÉ+™Øst•˜8Ĩ`aՖ´ėWÄCߥŽ$c°}Ā&ʰŽ0Ũ{Éā(Öô¨ 8Ē÷đÎ"ßēOj2í¤šÛŅ ™iÃĄĘ÷kfOˇjö†5Ū¨ĖzŒŦŖšÍŊÎūjß6Å#•eY øō˜˙˛įŋ=„@ˆĩm.B\ûož;üâĸuÕÚ7"ß$žļÁFįU•F¸•žÆšŒ&ÎŖÎ3—’ËÂ&ėŠ|§}ƒĐË­,Q’Š™Ķ\ãíb˙|rkŧĒöÍg2ēä/ÎîOi'î×ˆeQ9_kØ@wŗ°”ũOA|ŲŲ_ E˙tÖûŽ!ęŋsįŸĸ^^!ļéĮHÁ…ˇd™jqŧ^:\$ME\3øŊ‡Jz5“ÄM äboTp)xFØZÅēņ°ĢjĖžĮ×gįÁ@šs3%ÕyC‰î&Iį%Sʓ"Ë9*([]=ƒõ—šą[–4BĸƒēĄķ–ÃJĨ¯wÄm¯Jgh=.HE=FĒE_§6”åģ|P:Íl^÷:jgöāˈ]˛ēÂo°bWOŋT ~›Qä3Ēãö=ã¯Īj„.SúĩøQōOJAÁĮū?G‰OˆīYĘņš9äĨ¤Qzĸȋ…ˇ@ÕR3S>QjEīnR´XĐĢ~JĒ-ąPÉ^Õ@ °MįLˇģ‡ĶOŒžUbé7M }Ü ‹9†>…‹2ŦwŪęŖîKÉUudŸÅˇļ{1Ũ (ÂŊėVa°×ôą­W—Đ›Ōi‘Į˚qÃdÜË8„~ ‡ØyŖ˙GÁXÔŌOâ ė87ĮūĀÁáÃÅX•MYŅÚĒa éã<\A8uŧBgāw&ŠÉin§§0ŨfŠÜ'Šct°˙‚7€ũ ĘÍ$†ąZ CįJˇGŊƒ?Ų+}Œü>Ÿ'öÍ H`îĶÔ!~į|­ŗŽ7F/[}ë ÷š{į!%l}Ɇ$&)Z"coI§ÆFßŖ™ ŋ†F}ž¸Lã×"S‰?gHFg†âĪŅāĸX^?7ß˙FCŅNØÃ‹‹aąfԚ €lFOéWr›ŨŖK)ą Ŗj™ §U—žé€õXķ0¯j&{;sŠŅhĖa¸ÔČƒ ų´˜ĐBē™”™j (`/GöiHÔ˛|‚¨įf{ĖdlÁ§1Œæö‰ yĮVēÅŅĮö(Ų7椛ú`ī?ÜQŠp!Ūu?Žŋ3Û-0ĩ<ë_¸N§kėė„CËÔĖ“z/h•æĘeH˙p ņĪ€øĐî°[oZ žGõ*}ŌËT1&eWĐheåŪd6épé×!vičyŊ"ƒ#Ņ´‹âØĶ—[_ßœ[Ġ뿐Åcų”ĩpæã‰|ĸ­ŅũRP7üøÕüĶgō]Ā˞wĒŽ’Z§uņđig5˛VG8ČČĻIvŁũ•Yz~)į„ÍęÛ|Øŧ×§DlŠJq WûAū+,­[и•ņ5Vĩô×ėîŨ61úôAM8<*ÕųáCĒB}•Jp§¨¨$Éiúē4ÛwJ 1ŽWĀÂ^˙Öŋā†vƒÅŖ€)Lũ]xĻ]ą–Kƛ€°ÚŪp—b_í’ãîļÕŌåTx›ĘUwZ'Ņē[ŧH'(Ŧ ’%§ģ9—A üVP‚XEÚ¨˙ô#ėQ‚ ĨŽHHhÍß@éevģ,(Dßĩ]Ņ#`”ĶđF‚äĀbLōtˆéøhKÂ{bØBwJ–#´›Bk%IEYaxmhk8M #äŠéi-äķŲs\fŽ5høŅÄöé‡Ŋ§šė ĩ†úގ´m ø<㎕š õJceáE(֖}õÔæŠpg ÄÄŌĶô&Ëō\ÕRJ`^ÖPŞ‘.hėf‹BÖĀËyˆž¨×͘ĒŨ 0Ö¨Įۚ-ĒsīŖŽ61°Įĸ7ꛑđČnÉL=L–Ž] jÚ1–VÛxŠ’. TđŅۊ n¨–_MÕ힋ßn žMÆË˙ŧ‡“n!üĸ äŖ˛,Ô ¤¸Y*ØĄa+ũ¨HK1į=­ĩ™Õ ûŖˆí6FüzčN†X4ÂÉPŨOIĄŗ’#1˜ūęže°ô˜V­.-ÉĩhßAļ|{Q@D1ŠŨ ėųAV*ŦŌ?g UPcSktČna¸#”ËĀkĘ_ÃIÕ`@ęU ęÕ%6Ÿ‡G˛´!p¨×]*áņ.`ZP~čĻšŒwrø)9*ąOģžÜAč&ቋ@YDÜm–đíi¨mÚę,đ@Éņé2 ^áDĸJܜG:`.ŦKinæˇDC”$āáq¨HtĶBewŨxüÔūļXņ1íŨÛâF3 Zxĸ-āŠ%B{ÜœŖČ)ŽūY0q'uģXLs˙<øEŠpŽfž7ņģ`Ŧ)ˆw ˜J5qā§šŲ„d›XmHádĶ´Ļ2LRÕÚ.\ŠĪŪĨ Žjí6ÔŠ Ũ‘a¤;Î1Uãh8_;kRĨ~DW]Hļ­‡äCLâ—öŧĻöü׏ĢãG´÷e>@´FĒQÍIŽ=ã8,-æ€ka´1“[ą ë@áÉÉÛķ6OëãT3 >1cŋ, ‚ŠĨr'°æęĸßÖ°1¸uõāö–”ÁbcķÎë,Ō›Ģ#ÉéʕēX!îęYf ķÖņ%Ķp• LŨîjø­sf,Z6K0ˏúÔ(×ŧ|KY¸^Ųë#†_š"ĐzzHŽsāëPxR\Û*fĩ'˛æÉ#˜”ŋN,ÔûLlŪ„H{.h(0×tĪÍ ãų‚¯WšÃmĶįÖ×:_fo¤%‰¸b|uîŅ×%[ąW->„Ŧŋy°šđ„…X g%™nšĶIDāĶ÷w§úž˜ Û2¤ũP Rsõŗ ǧšn„‘ŧVØ@q›`įOp6Į-:€ĀnĩMŌ¨ŽKÔvē(2’Ž,P3Īāi›Œ>j]Ų*/Û&+×W͉ĸ6`’r*— méāãŗ(šŅ27Ԑāö ísí|7¨GķI‚¸wŖBFŗōÝ5ķ"°Ō@Rōũ:õ[B‡ĩĢå ÍŦ]ü Á‡ļUx‹CG]ŦŽĩû8’ēOp樟{åļ=NēãL܀z\‚ÖXęņđôŒfiž\ÆÛ„mˆ§]ÜHˇ/1yWR.ŠYV‹ DÆS¯°Ą‚L;’ÅÛĘčģoęĖõîWô؊Ēļ•~ˆœ’ĸc–]1t…A¯ĢožDMŖdR´–Dqė/:Š€+ģ—l‡ b `Ūq2ĒŧŦT˙éRQ*^æ‘Įž+ÕßJõˇRũ­TIŠx¯RAÚk9)ęāûŊ=ü‘ų =üÍš Nač_ëáīM ņôŋ4˙k=üĩĒ ‹äߡ ŠĨí ŌĪ%ŧ~äxĘ$ŧø5ɚPr 7| „ŧĒĖž ‘,u`¤I?=xC ×T̞מ üLKO—„M TŽîOÉ:ˆ °a‹QŠ1ĻĸP’ á›á­Q6ÅGtc÷GĪĐÍÕ-Ąß´[¨ÜÛÄŊŽ—FÛUT!Æ;1ßåÂķv:f…mē÷˜ öD<ŸZīZžI2QŦ"6á¸Ú8\1"X~MĻ nȐ3ô2­_+ē õ-=xWE6ā'i}Ī_ü(ˇĶCđáõ\ĐÂĪl khøÄ ´bRˌp#éé…ˇJ?Ą[ Z¤æđ÷K?ŧLēŽcTÎÛŅ=9Ą›đĐ–ëeģMÎHąúōuK˜ ž5er‹ )‰0ŗžˆg_&}gčģ…°°ũŒ-h¤â–~ŸĀ˜ēÅŅØ}Â‘C|Á­9ö$ŧ‘tsđēčCPÆ*ę&¤ ŧŠ/ƒ^|¤‰Âå}™Ō¯]”Û}+­’æ˙$Ĩûîúo”œôxš¸ËÜXnŖ¯€}=íãL–7x ŧO[<ąCĻ7ũMĸĪ%Xė­Q“1_%ãđ+ä*Ą/@“HG°$Ŧ‡‡’ô¸ôęĖ[O %Jå ÛcˆõŠy.‘ č6ß ˆâė•ĸ¯,M‰=ƒF/ēv)U‡™ĒVÛ4PjģâāmļYŠ>œV=˛aˆ˛ÚÛ‡˛õYa„ģĨ˛…tϏ~F*‡TĻŽĻ]gģŒí׊á/rĪߎfž–~õ“Ø~, wŋOÅŅnl>4Fb%Ōš z͇€9†ęJˇ§ƒ“÷Uw!ŋí‡ĸX šŪ^&Ō˛œ§qąõ-Ųbã<"c‰ Ŋcœ‘Č‹#–}V}čFė(ˆîA`=CšČÍ+ÚŊÜ>T(5Āc‹ˆ”+øÄōîÔ=Đ4Ґ^ÁÖrĨÜ]ß:ŋéhU#1I–ˆGŖŪŊšfYš|géŅ—áˆü~úĄ÷5? ]čĀHõ‘Ö1C˜IĨl9đĘ*‘¤ĒŒJ™Líō"ŨœÖŲŧ‡|“>8’ „XpCŌzGYh•Čņ*{ØJBzPd•÷]ĖXŋËtC7Ō-HŽAė<hąÅ,Ą˜ŽWĒ”ŪM¤ŧÖ#yŋKTĨoņp—ā$Z‹w' "ë-hĨn§_–/ Cö}fs*Ã7,î6  Aj›)ĩˆžKظĖė÷îîu\ü“ļįžķŠÁ%Ž\dēz/Ũg°Ų’í€âhrꅮf% ‚Ī\ļŦĨŒ?Ŧšg{Ō°č _&ũ’ĪV¨Â”Ė]RûÆM‰']/BGöBĩ/IúŅđŒ -‰9Í)§Ũîŧ—b9[W@˛ ,“ëå8:4… …×Ēn$ MžĢ^ęc؈{įĒڒãJ—Æˇā/Aé˂?nW†?McöYŠĶ0Ĩ/e“׋ˇ õ>Î˒t$čÖ°(õ7õv\Í!÷ɘGzõúãׯÁRË™˛OœJšŊ–;9S&‹īׁĪdƒÕo;Ĩö`ô}4eM*Äd—"‡šŧ|7)ĖT˛nsÜ-tz iĪs,É'ˇ"NUĐßšĖķiĖÉįx\îKX‹\åBŧđĮrdė”ÖĢ(ƒŪ{mĮŸD—d?fĻFíâ¤ŋIöQĸ¯QŊoyÛ87ĶcĶQĨÛˇ}•JŽŖđîŊĨŅ´.Ÿ„o—gQô Es'q‘"~¯ü×j‰rŊr°QÃĻqočę5‰Ņõ\ŒkžéëûA([hž/ÛÛå^"XŽÖ.{ĄU Íûō2sŧŨx'€_$ƒ¯Ęr׃L ‰Gšō‰ §üųŧŧšüÁåĄŖ×ėÔɝ¸tÁ/VoP2Ļū?vÎ2*ĘũÛã# 5tˇt33t‡t24üAJBēU!E$TŌ†nARBēARP A@JTŧœs<įīâÍņÜÅZ7|ģ_=Īgíß÷ųíũŨĪæ ?u;‘ÅB\õî°čqír&ÕÄōĖD}ĖKÚŨ¸ŋ÷€ōf'Ą7[.ę’Zz"s” ”âI-6ÅÛã(–ļŧ‹¯BÛ`ŖŽĻ4}’ԓJŠPpų‘Hž^÷ĐÁ÷ĒąŠ žÚ6ßZīp‹Ķ]'6Ąˆã'ņ ×wŲĩÄ|wOÃbĀüøđB.†bˆ7(…ÚV™0D_w‡˛:lTl5oIO˙Ähæ äNÁ<+~Î%ļ—WõĮ´LUUH‘9ŌŅÎn~AxŽ– ė咧ôSΙĐ\ö¨DôxMęĩÆV„ōŗ-Ŋ¤r<æJCs&g~2žžĸäÔW“ŋ¤ˆēvŦs´É„oÅŲ‡ž7{æ6ųîmQ{ī—B#5-–yņœ]­”Ôb‚¸kšœjüQÃų˛<™e;L°( Ķ;ĸZžwÃŦ…Č’ ]įlR—7F…Gäz>õ’l >*Ūō6 }ĒĶ?긤”āÔô‚PVܖG(ģcÔ~cHqČ?Uš9ĮŨėO7O_øŨ6–Ŧaļ“BÚu@­ĶAWŨČ,~ÛĖîAĩ=™1AÛPō-Œ¯X+aˌĶMWņ nv5Ũ@ÕÂÁ‘ĻĨ ŪZ ÔŽ¯sŌė˜åũ"ō°‚".pÅŖ?ÛŽ&rΐ|Nę€dđˆ°OŲ(KŖ_'_mŅĪšĄ™áFPz*m¸~ëҊžBŠ-5†[C%fŠ+ūÎgõl¯ũ 5īįÅΗ +ŦJīYo;#1ÆhyÃân+ä3xÅÎíåžU hÃ3cąŧÂĄ‡ÖK\ÃaŖ›Ũ€î yĸFnô 3oM¨ÛŊw­<‰‹ļPīŗRĻēÕââj\Ė)+Rĩu&y$G'KaõĤšß‘ëœXŠ‘eÉ>Ė—éŧ'Xcęī(˙ŧ“æubđžØÛöoqV‰˛^Å3ˇŦ!,ÎPėā 7Nąc–cđ“ãlėp¯zđõ‡W0“)rîŧ”^lĄ.ųü 3˙KJIé/)ũ%Ĩ˙ˇĨTėb}U )w6{8€ú‡”NŒËš‡‹Pâyr PÜ;0In§WÆBbī׎Ö'HaĮ@ėųīĶžáyYqüČāÆMŪg@‚ØY™ ĨđčŠīÛa]0ė[ +ž¯ĄöĶ^ÎJŦ+‡™žd,,f]Šē ũÍ(Ģ7S’ôŠeØÎë:1_˙ŧQļ&P3ܧgŗ‚ 0#}01~ ØUŨ6wŅnKĪyīdbÖæJvC0h&¤ĶØÉ¸Ãërģ+ũ>“!Ķlo(͏LĘ=Č6fƒƒÅã[u\}”M"]Ēb’’ũ”•š¯Ļ>>&čLé;Ĩ‡ĩ6đ—gFÔNĒS—ú}īélØŋÔ`ŋĨS亐īj7´ņbGarļĖw˜šˇmÍq°ļ^ZīCUÜJVŖņŽũelĒK˜ĢŅzy‚€esY" %¸(ēc^Â=ƒšWh׹ĩæZĐØLW9:œŦ<<鍚zåi"&=Ÿ9ؑ "` å6îģÕ1+<ü>?Ø kĖW“//”ƒ†)¸qY#í|\ŦmũgķWüM€‹íĶJŠ$:´ūn/ũcĪ]ėbģŖĸ¤‰´k˙Ŋ'ŧø]!uÂX‘ƒmøØ`ĘKÃaw™íđœÛ@7OČHęĢüwēÂɔ_~WhÜŽöI  Į•ģ˛ĻY‚Õ#e„CžĢĒNēU\EÜ.BŠ3ĖC7“5cYƒ8qŖ¯^‰oã‹1´Å])“ą4=ōb¤Ā2É´ö*ģS9ŽŗĘÜÛbãÛIė"ŨÎfڗ(DMZ§í–o“PÖĢárŪ’d›Yå Õq ąî×Ũ‰4ž]9N×ōĩE9yĮ|§§G]Õá ¨ĩ”-áĒ*Ģ-ÕvIiŽōŽ´VÂõ/LKZ 1å3Á@UâgœũCĶōįIũœÁ˙ģņ¤Îߗ|cq"IF7†Ļ¯Pēžzl7 ˆĄLJ&ō {|2âŲjTĮļää&‰ãéŊrÕV°Ŧô/SQ¯'2­æNĄ–eŦ)@ÄĖLĸoėŅØ4D¯=ĘØĪYy,X2ĩƅš ,=:y0‚Õëž}{1å<Č €€ÁĸīĐgáø˙ú—ūp(19ģ}Šĸ‡ ×&?Ķ”ŖAIO”ˇôvfœÕˆœŲŖJÕę†ČD‘ĘĐ4`ÆRą@Ŧr'¨­ ŌíeBĘšHÕQ Ëy 5u…PvKļ}”ļNˆËY$"'€ąP{ų6ŨŽfëPą}pĨUāGĸõ/—ˇzcįŨÁ j×îšeg=:Oäį]üĻҏˇ5ã_–˙&)iš;ągáŧヘßá ė%ÒĘÔ+žņ­ø”ŧfm†Ô"Y„›Ėīŋ˛–?ׯ@ßęAĖ@/ŋ‰é­ÚÚI§ÍōĨé8B3õ&‹ī+ŽüįxĶ§ÃyšîĀ„Õ(R“&iŽŧ A•1˜ˇķpŠėPŠwōú'ŠëüĶyhāÜCĒÆ2 ŋĢĄ(īģ2™vŪžf}Ŋ#ûģÆ0RĪ,͖īÚO­ë7Wg΁ŋĐú ڏÚÎÂ˙2Ü;DˆŠÔĖĸ{ø_ÕĸXO ģAĒŠ­áęĄŧgš0zī˛=Oęē 'ig#DbåLÂžŲ‰ĪŦk;Ļ߯#ŸëĮI’• Ö¤ģ’q`‚͍™)\O­He.™–ū@ ĒGŽ›jTw$z˜‘T6ū‰”ÉūŧTŧ$osüÔ°{hÜ čā@ŽG]_ /ëZ1Üį@ež_GZLtŊŌĨö@;UͤđŖrž„SšTBx!zĩv[ RĄ (dnZ+u+ÆEÖ ‘žŽúĨH`Ōāo9>‘” Įd/Øšû”XĖ(Đx-,dœ4íœ~Ą÷qXRWZ—ņđ˙üBīŋtˇĢÛä,<øo{ô÷…Ē`J_oāû+:'ÚG؟3jW š=?Lk—O†đQdpFŧ‹\v(9¸­v›_×Õ­Š‘$Û^coôˇŲ75ƒL n>VŦĢí¸<48āØîĸ ÷rü¨ ÁØ™^ ČO3•ĪŠ{0I?.ŒņJÛ¤”ā5!‰3ĒiWĢC‡9ę=uę8œNYÜķ–Sˆ](ÚfyŽ1HU%Ÿ-šRžk–ŠÛˆB9ÆPeŊ ˜8rņūúícļߤ™Ķˇ-Ļ]”=jū<Ī Ŋ­˙[V˙ßđŧĐyĖōĒ⎠âˇ˙Ü׊!žËJzV*ĀF5×Z' ã)A85Lü,<IÔĒž›#˛<û¸éÕˇh8î^c’tOH­ r’9ûų_žIH\5*ōŧlaÍøÔ üŧŽxËuežęĻĀæRģŅ:ä+÷éGkáeæuöqU$Ŋ’G Áįßūį Šß>ÔĖ•Fķ\ũ{ęŋNhëŸsŒm7Ī$1r™†2ÚũwkŌŅ8°;Ā˜2{˜A=ÄąÜ'Ĩ‚˜T Ŋ\ keįÕRTŲvŲŋy\‰ĸxÉ'^WNø‘ í4oŧvožÄ§’üØsÚã A4ē3Ōāxī=Ķ”ŠHŲhËÄTû0Xü:–ĘSå1Å.AUßÎÚQMĸKMmäŒņąBoŖˆŽ;_ÞvT/cMą|\¨ũ::´%ē=œü>÷ąU ū>NU™„ŅįÃŊxŪS,Üē …7ų…į×â‹˙\Íņ(J‘‘ iž…1?(õ€āŗséQēä-|ˇšÆĖĄ\5lÄ *_ŽŖõÂ*ôąpę/Đ8 Ÿ„cjĒîöįæö$8o#\š”ëģq2Ģ$;Ũ÷;ædۗėŲ›ž jp8ÁÛx…œ{ØįŦ>X0°“aįšuYv',yˆôŋ:$æŧa“Ņ{)Ž;˨͹hË_.AÕÁˇØ oe`Ŋr8Æũ›ĖÕvĢšíãĸCÚēD_j´Û•ĐZsŠך•ņ:é2ûy„:é•@î=ë9 ŋøsŌAî÷)š%VD‚”˛Į¨e;īu›Š}=TŖ öDI+Ŧ`ÖŲ€č)ũŊĄŠ<ŽgųØūQ .ŲPųëI?įŗ”t›ĐĐqMË{.—,ŠFPĄ˜4éT"š4iܗņJ͞s“)ÅäÃ&ąÅ8žŌĄ“Úņû|'V¨ŦĢÂøųT[ҤÄĶIīä`Ä]Ëhņĸ´\ŖkŪ<Ųü˜= ū]Rö(š/\?'Ô˙ôr­ŨA„ ęēÃ#ZtĶzqMLώ1ŦĘXFë[ŗNŨG =’Ø1Á/r8ˇsŲD’ĒQu`=ɔ?Ū ͗ ė=â*‘-š­¤2ØÍXhųä?ü6ÂZÉuCÜĻ;^‘íEq@Q$ Ÿęėļ_xŊHœMoŦ_ķÃoĖVf›X˛œRÄ_¤÷<Ŋķ¸ÂÚ 37Â^”ˇtQ֐*X4Akį_›šÆËiŠĐI(mN÷;ZG×Đ;ŋ9ß>ŋPc"*ĨŽ3ô+GūWįˆÄÅV¤bĸŦKP8õÃüáą"N‰ˇS8†)̀ÃÉx19%Úa\_MF‹J^įˡ:õŠÔ%O‚¤V=Öūe•>˛I…VîsØ $’Vãńą$d´.3†ėkČË'uöKÁ6xĩœu*œõ´{›WŖĨr|ĘŪĨT˛zü{_›g˛tifffæ× 133CĖĖĖĖĖĖĖ1;ÆÄvœ˜cϘ)fæÄö&ßLfW›{¯2wä?ģųaÉjé•ZįŠ>]]uĒĒįëty`;׃‹–¤š˛ÔČBÄįävņÃUL–ŨāāŒŧ×n¤ehæ Si˜yƒK°Û¤årfęĪ.v­ec<Ë(”ÂŪ¸CM7‹9[KlˆIōž9kxRYĒZV8•{ŋ*ž“4åK¯W•uŽØ>‰#EđqŅ lëåĪÕV\"äõĩ§•Lō×LGíی˧#ÃąQ’īØģÅqĐZlĩf{Š|/Č´č}žĀiA,øâ@-‚bjękôô€  ī{ĘÛk͜q+|ŒqųŨ+[m‘ģfŽzØķš1Ŗžh!ŗĢÖ,q„ HPgŦ¤&F#G8áŦßįP™ÉÚ{ws‘|'xZËÖŽs`ļdį>ŖÜJp—ŌēŦ, ÎĪ´zL‹ú%Ū9cdAA~9,1azRĶé ībÂ2âGÜĸŠpLÕĮąĄ ú3š}ī>ÛģėĮyŅ î<ą Úķ§*­&Đev­‚R ĨÁŅŠ×15Ē!C!çĢ÷bΞgC›UHę3ûn4g¤Ÿkđ΁ųPJ ”I9šHŽîa­Ek*¤]ô>Ĩ`FļĐîÕ5/N×ŧ(E°ĒõÉ™Ž0âˆû öžBÕuĨĖd*>yŸmu™CWōå3Ū–vwî¸jĐķzĸ2sŠV;ۓWu‘ü+ OVhŸåžĢŪUä]ŽĢF5Čī}Áû)Gíĩŗ [ãÅØ›åŦÉũŧqU{ĮĘģíĶ%Ą¤fâžģ%›vĪ2Wô üi]'îÆLDėW1›ŽÜũ5i_îfĩTÜéĪ+ž‚)kĒ ņ `e;Iįæ0mNl_ ĩ^Į ãō?ií*GœŒfŠÉv$Ņ9jZ…_Ø´Ī7ĖH7*œ›";ōTõ}ã™~FĖĮŠYŪŪ+Ņ9ĶŨįXGˆ<ŠTĩŨ´%Š— Ú?āÎt†E߀ÄȨU_fRu”Õe5™ ëUB1ōŪEųŖÕ+ĘŲ čAƒC7wĩk™eGÎN8äœDģā™č#ą Ÿ‡@ķMČcÄäŨ™‘"ÕVŲmŸMEĶ [6Ÿo;hŽãŠÜŲ*]FD KŨ† (îj ęŖö¸rŪrUUE‹āøŠļ+;)¸#Ú3zŊ5•jЁœK„<÷„„~ŠœŅ?ËķF^ؘ(cžOœúM,ŋ‰å7ąüE,ĪadcS˙|YŽög—•”z[\q¤ĐĪ ŅĩP=E bąĐļ‚û`ÁkCö cžh:ÅMŦŦ2ˇjųĀė‚ģ+Ûâ˜Ā#¤æū1Č$vu‹¯ßŸ2Ą‰Û7&-đ*v žõņ?@™6ĸ?ö#5g ĘDB Õ"0Čļ‡#'ėōë¯ŧČ\A Ái†đÅIO’+&JŦÃ<^ÉD„mAŪ?9fqâŋvŪßsÖ\Á1m´€Ā™¸ūB9RŽ•-k˙/ÕûŅW {âĶŽcîâ"Ÿ7îv‚ +ˆbIė y6;ɍ)"]ß[äK‰Ø ÷}%‹ŠŅŠĢ›Rt3ē4q  dŗPŖk‘Ĩęüy‰]KôĪō’Š†Ô§oÉ8ëz'ŅwŲ“ezļK˜z[24$a [ Ņ<4ˇBĢĻßC×Ŗ"ë(ĶŨ…~&ŨŽ_w„į@ÚžŅc¸EAEĪr8vŒ:´h íƒīí(øØ_ufĶĒ2PŒkFŧęyo&š—Ą[Ƀ.ކÁi>Ī/æ~ ˙”ÕåETädîŦŸG ™‡_ĀÛCniî1š 2Ŧ/íe~ōÅ6|˙ƒLCC+Ĩ+•‰]ūLVLž•fú„ÃŌåĨä}ÅūČkŲK"ŖūAˇxģlk"ëļž7zu 6˜¤ũãSs[o3Ę$ė†XVŸč)TŦs‡Ųo Õŗ6G2“ÉÛeėƒ7°īˆn÷ ĖÆˆx7bčBd:Ĩ{z(YX9ķ)ģEw|žĘ™€0°e0qÃĄ ĀIáŅŌ 9Ä&ÁŋÜ ¤jíN'ˆUA_Ĩv˙2)ņšbŖV†zė…Ŧƒˆø=!œ[iĄÖfrŽwBjŊ:AŪ=RÍĢ=ÅÎôûęŗ›wĘyh‹jdoāšŪ.ŒĐē^6>bús;ËáŸ3ŗįĘ%˜~|0dŨ7)īx‚€ĸ  ‹ĢHŧcĨ+Āâ\j™ŋĪ`™‘4}į’ĒŠ*ŸU_ƒ†Bq6hFŨ×XHGVW3Ā[*‘œUäÜ R pŊŖ?IxX$9įęÆĀ`ЧŸОø2ā;`ßđēÕ"u€mZŲ--ÉHŅ"7…ę™>ķE;ĶĐEŦök˙ÜâōÅ%…ķ —Š\´á옘¸c‹øŠŠK…¸xœÎŖnÜwÁ 5ĸ\¸øâڕ´¸õäV—lË_=¤%CĪčÅŗ>@܃ĀMŧ—3>īŧ¨rÂD…ōĐí‘4Į㎠°Ü’ãeåLmœŗîØÛ‹ęæ_ ×āã)BÖ㋎Ĩg"4@›” Ė)(ë°Ra§ŧ ä3‘ŠA\D†w{ BÃĐļ{™ -o4=e ęZ9!—ÅJÜŪSŊš#Õbán^á€ĘŖo5’˙ExžPģžf$0ÆKDë„Ū…°oBNsH.˙ņØĐkWUhŨŨ9ŽŊ­ĄPŅ1’kZIšb \ÍF\pIŌV¤{îV*ÔÆEtpų&—]ĐØËĻ˙­-ųÄú•Āȍ(†›Ö7~å~]č§ufŪ 0¨wšo•I÷ŽI^Å3˛î‰‹žaËÆÍŽM‰ÕĻáĘc‹d“0w:ĄŧƒX_ŗĻXũÉ˙zŨîÃĨzW!ĔIž´U-Cöcʋ>iHõtā÷į*åŪyāS4í+ûW|g.zkãtŖō•ëi1 OC´1fĩN@Í9Ų›1Cö9|÷TîY;_2mO­Ué¤äã@Ž<îų ũŸôkI53ķ`Ä?ßåßĪúũ]‘ĶŦËũũ ˛ lÜ!ōuŖ­ž.ŲÖ*Ę É61&´Č{ŅL<Ą¨(zõ51XBYãŖĮũž° āO]0ģ¯k/ÍNĮĶĻ€|Uwī ( ŠŌBÍUô]WU> T2Ū §m…õà $Ži@ÜnuÅB ęæÉĻJ42M×f¸R„âˇføŒŪ‘˛ĩ­ö@7=QÕ l”ŖœJg†ÆôŋŖ#ČÂ`ĄĖ¨ģĮˇH ŋZEo3%ˆŊV>¨‹Tŧä ÄåÍ`´û¤RÄåĒĐŠķ3_ˆø:ņĢŋäŸag Ōjązč>8p… 4ģ`mRҎV%LķņŊ%â4n¯%2Н`Š ƒ&âœë{* P&1 ‚gQl×Pw`‰õ…ÕŒëžmB,átĪįŦû?ú/åĢÛcZeÃCŧ lÛWJ!Į‡æÁš rī˙4NĨDĄÅŽņļž}ÔaĪ;b:2$"*´…cAbTõtméʀˇûč>ĒÆ,'02âgŦž7ÍĮđ*3ú.mŊų3Oš8 ßGãš&Ai.VPäœdÜäœd­PŦį( ĖđãUWõ–I쁋ķR‚Íž,æ—Î3˛$N&įUb˯-ÁØy17=ļįĩ¯vÛbM~hE 6ĻvŊ‹ƒ×žŲĄģR,ɜ‚æČ;¨iQ]ŪŲ*#+ząF Ģšē°či“heŪ)ÜGEnvŸl;xYąze0Š4w§Hšeœî`xšņ˛Ĩ0Ū!ŧI… •Æĸ=ž<"6’]ĄĖ4ijSŠrSKėØ^õC AA”UO:’i(Č*=Lĩ<õ!pŋQ´yĻĪä›RÂÚÔZBŪøŧŸ;wsü=IŖĐ‘gäŽ0õ¯);›÷P™éˇåū?OûG@$čw‘'?ÖlIÜZŨDŠ’Û5S?k€Î ąhmĘ'œ–ŗŪ5ÂūŦ—ŧHŪ’ųũIüæą>-rdPa JIëĨ{đqâčŠÉ ×~™ k‹ēm1Gƒ´”  ŸÍû%>pęų;bpúz ĄËD#ŧi—Y܄I=ļÄėŗ”`åŧ÷ģ ˆ&āã,ŧm—KÚ=ĀSkÚōā˗ˆãū0ē"éfĶBKēœ{´LærăĨņ`€‰Ŗĩ‹dOvްeƒƒáø”œĪ›bâ`E™-­˙ļüū‡ä揎ãL.#ȎÉx5‚øŽpĩJĶ ö`pŅđĘÚ īßÕŧÛʋ§Î ã]ˆĩĻĨyQö¨$Œ›ē¨=‹Yi­q"áĸQĮԞøŌÉ^Ŧ ßĀgJaÜdލZ19ĄaŦŨÜĪ4FĄČ&ĶZVEĒŊxâ40ŋ…<'CŦX{|īđuW‚‹ą‹wMõ\Ļ3Ī TVa÷õā}<›æK>u•æ46ãŅÖM:…>āô÷d)_-Ģž7Ԙģū$BŌŅĻbōķeÎų÷z$}7É?d'~C׊ŋf’l&Šß¯žö?L’üãŸXžtŅ'?•=MÁZHŦ5Š/BŠ( U7īĢÕBTčŊÖ/a}¤–0ŒßÜ÷ ÂĖō áã.-ØpíϘģN’ÜËŦˇÉÎĩ´LfÛU]Ŧ"qņũHxöŠ M!čˆ^kÕŲTøŊĮ{åø+Vā<öF€ų.Ę(ÖhxPN–'âPĐHœÜxŸ>üŒV:IąâBtõN7ģ—ûu…‚H¸r0QšMŲ SŸđƒĩ€ŦģķĻģî,~ÆīīM+ūoŽ4—ĩŲâ÷i¯6qĶ+€īûŸRp,O°¸ kęü:RctqāüX˜,fĐá7nåĶIrž÷kĮA[jé æX=ģgXhöîGĻô+› 9ĀqLĩ3ōúĐ,Ōae‡į ņÜļ‘ fĸÜ`3ƒYAÎøųšū°YEČ2Öz0ūęj;…y3ˆī"pz#„BFoŠ2‰8Bëš8C6?|oĨ´đC~ø‡Ē[Ÿ”Tđ3r'46Ŋ ƒ3H‘@2 9-˜âx U¸čF˜,XĘKĒ‚Ķ=2Ė<šĪqoEĐ6ÜÚû}„¤›ü‡#fįÍkŅ›Ôe/wb§fĐ#-ōR’´^â)rŅėņėGî–\@u7ī~>šQņi9‘ģ>œáŧīå´Q¨ķΧWąTéËļfÜÄąŊ6t>•ö ‰¨‚÷4ō|*åŠ5ƒY×œŪ–öfozš>βPNÂũHōH)äæ5eä)ŽŗIĢÅdą_ąülėäŲČĮ֟Ąũ{UNÂįäYĨ_3G.Žķ­›ĀoËã˜#īĮ‹>8ũĮKphWYŦãäžPūˆ|ŽÁÕkĀ Bņ{ĸāgRŽ{ĸۘ{sō@8Eč×p_ü]…ŽÁt‰‰g<9FĸƗ‡Ŧ] ÄĖÅÛš>ę]g…ĒČŋ\ķ:ą¸aäļ.D*‹ŪũŠĶņ"´T>7&,Ū˛-4*c¸1ĖĶPRw˛%m<]ŪkI¸ĩ›ĐŌoŸÚôRŌŖ‹ŽÆģĖ>A‚?QlF3s%¨‚Ĩæ^ŗ„Øē9ˇrļg%Äļø<¤é–Ū΍>ģ‘…‰UGUë{§ÆÖ?Ģ\Æy™Đ O))œ9ęæė‘cÉ ™˜˜8É% k{×´6ôĄáũV̏YīJO’€Ā|yîpu"4’˛&Ŧ‚CĄ‹¸Ų{„)áĸ÷ĸ–éėŖŲpōę ī‰ĖÁÃNŪ§ŗĀpōRßĀė@žyŦ{îQEÂÆķcĐPÅn†qWda~¯ëĖR4+×Â*& ԟn˛#.ĀĶ›cŽŖĪsÉĩ€1æīčØéŪ7w ÔĪWbߜđČų3xŋuęߜTÎÂÄFĢd9ô mƒĀÆōĨÛķH‹‹ënÕ÷H@ĒŅ’ņzÔ÷!¯€ĪÁ[t¨wå]eŦ¯"ąc0:§ä Ĩ>VŧW˛‡ i:įãę1 ÃF˙ ÛĪIq9xĐhāŌšÕTč°>\ĮM7ĸ Wqˇfn%ą>€†)ŒÎ õu÷3ÂãzŠMŗa?`ĄĖ4†ū˟!|Va# €šš~ėûˆųÁŋôÚ0 ßõښÁß/˜ŅPkåm¯ ¸bŅ#•´ÄfĢĒ=ÍBØņ­jOžÚ|œ‹`ŊJ#‘&Õ™B[lrM6Y9¨­ĪL’•ŽņņBÁØ27í= bĨ@ĩV°y”‹+z)ÎÁâ$OlŠŽ{Š8Ŧ"Īt҈„™ČIķį Ŋ_iČ7‹5Žb+p*aíAz}„ÍGļuYAĨCŽ ŨéI„ĘŊŽŗé˜PÃw‡DŦfZĘer9÷F> ÄxĐĮQgäÚ?Cų÷ęŦū‹ûšĀ**gõũ' ?ÄĘ˙Ķ |<ŽŠŠ¤Čuž¨Čŧv'ZŸ:ļ˜4ĖYq˜P۟°4ŠƒÕ~+ÂuI§‹ĩ@v@LYąf”b%î¸yi—ĀĀIōė='“=Į“ÚaņvPZMž|ēŠjdx;˛‚yĩģ|8ljÂu%ö‰ģ7@Ü-8Cđ ÆlđfŠ7UĨĀfžíĪågœŋŽęûwĄ˙ŅÂØ˜%ĩŋ—xÕü¨ŒũĶŒã&Ķžŗåą‚,Ö 1bb# Õ HÉōįļš„ƒÃĸŽŒ@M áįŨûԀœŗu ĮŒŌu‰,6OéœnįHį&ØĶfø–úv ŧšˆąWKu„v+ŒœtÛ ŨU€9RŌ–yÃ\W´Á}–~M´[hūĄāUē+Ė5L™­Ø[…Ņ*đežu*Ķ%rkūú(įԐ Y×bĩw3‰~ĀnUaP`U„nŽ=<‚Ņ”.”á ŲĶÂ*ãeņ˛3 †,Y˙Œ6Vzwǎ°-\ė5č¤=‡H”ŅįŽ ¸&Ú ô—ãF ī‚ÉĮv6ĘLoáhbw4OIÁYēĨ27­âŧ'Kn&ļ&ļ:¸-1ŨsÁßlxÄmD(hÜK…åHYkĐã-ēö ; \‡ÁVÃĮi§ņ\ĖŊp˜ię<šmÄ3Ī=î~&Ķ>ûw9ŠtéÅŖ§TÅ5Oģˆķe§Ā¨‰3ú2ō‹ÔđÎcyžE‚å=Bië[@偄ƒ%†?ƒ÷ë/ZũOāą2ņĢhEÖũ0ÃoN›Ā7đˆŅX!ôįŗęrGtŠō/`ôD…×Ų$ččt û9?.€WŨ1gä‰ģ#t)Ā!ĐĶĮזx(ÖÕėāáē˛]AOÄ@OˆP’čįsēCZŋ…a‡}ąŨ‚JT{&ų˛xŒãPĀŲoŪF# âŪ*iÜj†]@aŨ#…¯ĻS>}•Ũ&ŲßÂ*:JÚRô!r~ÍŊ´DæT¨ @øøē-˙@9ÄîgÄ~=¸˙ߘ…ŧ%ūˇå†ũ’ya‚ĐĀÖ(‘[ģüI<ƒÚõÍ$ŠmŊR §oMA)䏭B3ˆąč`ķŅPnÁ&Į!ÔÜķõzWˆ- bg)>õāœAÉÂ9Ũ¨#~‹ ōŠrm4–ãŊī‡`‹d¨Ž5ŽC Đāõípŋ‰ėqÂÃŊšŗŪØvPjrO6§đŨ&>dK*3ÖĄŅØO;ķÖ'VēJ˜T´( f‚ô5õ뗠u%Itœhl?cö멆˙†ėØ8Š’7˙7ŲŠŽũO=(¸B;ÂZŋ?ƒž&`# <‘Wė‰ā‚W0Ķî¸Ē &| ī›h†íKßsi–Ûû€7RØČī)Ēvũ™Ø2Č= õL%aØfrŒÕË´đĮ‘Ÿ‚xöŪ˛ÃĻ/y ŋ@.–¸õægÚHȤS‚xArK +ŊÕīn US'8|„¸āŅëk.âČū16'\ Î ԐŨĮē°ŧ äq ^ŌĨčZ¨hX?>3õŠazk§_˙ĸŧWĩR4ī–V2_ĸĮˆāįöî\ĪÚ֕…# ĸÚįÛōÚ_íŨ˙@œ€õĒ[Ȗ­KBN‰kw­^ŧ2Ā ŋsōTidČFÜX–­Za—*ŧ8Ú´ũIøĨNdöā•b›ÄÁ´Ĩģüx@gvžëaķūN9{MÍk7ĪĄ]‰Ēîâ”wWÕfŽ`Ē gÕū“Ĩ´“Z.1ZUĀåXv°åŪÎĸeSí&ÔzxĶ1CCæŽB*ōüB UŸØ?Ņ6ˇ5ŋĶöYiGlžË„/ļ;Wá†H-5(NXypž:fô;ø¸ā2§{Rž§îf˛šßÜō3Âŋū”úöGō?Ã9üÂĖ÷nß–' ąČŊûž#W.&Åā™›gĀŗŠB'M4˛OAÕÖoĮkzOøI|j$Édp•"ĢîMŠg„ėuūš 8ŧXãEŠ hÜLÛ iŠonĸY™ŦĶŠˆQkâ ę ÍŽ´…?žĢ§âq!fÚKŽũĩÃ#˛ ˛q#ÔÜ"ŧN)O6ŗāāŲ•ˇØŧ°6Z>—įëŪ“CđSŸø›îuîGd7cĐĻ0,–<'OŪĘ&ędg'O¨ŖTî`ãtŋXŒâ˙črÖâ ę|Žū9ߔûgL=Ÿōßp&—MIŨw7˛ōGŒčīV;n‡bŽX°@gXŠĘ-ŅĐŦ.‰z[ÎAŦJ-éâIDė#(g™Žį  |’˜JôšŅõ°ē‚§kŠį‹ ŽĢ•Åŗ`ǃ€ ¨ĐÃ× ÍN" MČō@ĢĘE–ˇĖl(ķö9!‹ą™Î€páŖYBMͤƂ āŒ0ĐM ¨A˛4`Zģô¯Œâ"ƒ–s‡ĘÃF°ÄņŠä{4üā‰iŽtęYˇX8Y`vE÷€€1ūĒŅ“ëcBZÃtMä X} ŽÅCtGc¯ņ"ž\ßĢDÛ^ŧím6.ä'ÖüX™ëŧ^ū'×“ŦÆŖ™lVŗÕOEą!˛8Ē5'˜"IėÂ:õãZÅíI /#%T–Ķ–į}ÆTYag0ņ›ķ?ģ8T|ZgŗM–L:ˇ7đÄr0¯IrČÃUÆĄöį°Úˇ5I‰Ŋ9ëĪÎ`čO™–ˆUTgÚs>Ķq™v‹ĩZĐō+ûZ“îl•YŪTØŊņõ,e@z›+Ö°ĪwKCí(—úU‹ËaöTĪG c@Ø>0Įy œqQ1á’|˙éĘJˇ|†‹ƒZė 䨹ä$é(Ho@ēEĢë§ī`zք ;—sw€įīķ_|˜g­y`ádMŽ—ûō§.•ß—ííjDEH`Fú Í@|=Dƒųkŧ/’0øÜė‚^ .Évö0¯'0Ą2ãâ_ ˆ Z…•ŌáxÕø‡CŒŨÜKH9(!—į­<Ũ@÷ã ¤ŅMHMĩAâŊÂylEĄgÅ€ĶÂ. t„o+Ŗ¯ƒ:Oô,÷Z3I’ėBÅę'Ŋ`M{ų”3Dą/ŋy¤oFŠƒ>ļ:BÔß÷‘ęĒFnūĸÎÍmėØî( ãédy¨Õā,Įé^‘ĩÜ5ĄėžŠhōpüc'¯múIúIņŪ.xφŸIjFŪ2ÔäJl¯A1Kße%Á‘ÎE2ķT[Ė؁b7üø+ᆴŅፔUEÔBCĮLúOĢčš;NĨķąõģ&dØc÷+6zfôEAʅŠ]КüÛ:fˇÍŅįSiXŠÔâ{ĮŠávŽé\[ã%#ŸrQ8ÁŽP4 AröZÃđąÂNa"ā“+xIdÅį˸{zˆÔé“Íļnû[ĒeŌËî pĢŌ LąŅw ęž@KY›Ņ—ŗ0[ī"įKSĀ’zĖøß§ģÄš6õĩËã¸t°—”}ÍL&ĩœoūT˛Îq}žŌŲGzĢüVaėĒ3UCŗv8áČ1ŽĘ?Û (eÄĪi§X]%<^Z¯Ģė#ĘęõÔ,čwŪyz“ĩų™Ŧ†āœũô>Ō|ä,äL ą{įn[U&¨žųƈRcįéFLw Đ}„th•āÉA5‘jF’ežčĸˇčrT8ĻŌE+ŖÔE’Į}ņāRZ`rt8yž(0X€R>2 3Đ2éIEK$Š‘ D~3Ĉö û`)‚J&ÕnF}œJëFúÜĶ„îą_!û4û6€+ÜĨPč¤˙šj÷aÅ%žHëƒ!øÉŽUvĢWŧģ­6ÁŽÚėgē>UZjžë€„sždŋd\Á":<íMÖiuëfØΈXå•Î)•b‡ę 8§QKtĒ—ČôŒŧŖdWîF™Ú“t‚›“(đ>)ŌyŒžų&ęXt¸ĸ€ŠÃv‘!ôhp XDÜ}lžžNĒ2TšŪzm~učL—0Á;ēˆÉ>f…nĪSwæ6Š›ˇS´°ŪWȉ‡æ˛ŒS 5č]úP>..@–Ą¯'-Ã]Yä/LÁ6ˇRîIÁŲÄ;Ą“6OísˇŒ%ęųŅS´ ĘlōōÕœs‘čį# W=ģ`yjŧ“(Ú F•5sЊc÷ eŪ^Ũ%—Ōņđ„đžļĢē†nëØIčö^PhŲ8 Ŋ¯¨đv`˛U Qi ŖHeÔļ-ômέeƒÃãā{dלû2ũJu/@šLđšz”ÆØZš/&ÆNžX>ų€Ĩēĸûc–ĀÜėk-t‘/‰Áē×TŨæX͛wÖĻøVKŲ—_DTDGEĸJ$-OÆqĖYč@}.õ^Z;ú3ÖöãĘĸ¯œĘEeaéļ+<åvŊ—ˆ]Í"ī’i.†îŅ~ą2ųYkbĨ¤×CķĀd9•eßY˛IŽĻz×lņĖé^¤¤nŌ0k„î‰ŧŊļŧnh ­—ÁQüŪĪOĨū1b$$÷_°īŗ†°p0Ąy@åũfßßėû›}ŗīoöũŋŲ÷Y•",œl›Qkß՟˙}[YĶŗĒĄY8FžœĐ˙p‹Ī*…fád÷ Ŧ7ų‡[|ŪĀß_aОÅįMÂsr‡\|[Ū˙‘„¯ˇųŽōR aĐp b ÂzŨŦÂŽōúJ/$&›­Á:8Ÿrî^0žÄâ]ā(č`G_YĮÁÖŖĸˆSS W!eZJ˙4Z*—eTÎ^ąHŸĻĩ˃ŧJøuæëÅęĨˆŲ=' eKIĘ†žh˜–æ~ĶˈT(Ė*R3DĖ}Ø ËC5Ÿ˜O÷+­Eâ䑒Ģ2 ĖÚļ8Š€#ŒBúThab­žĘŒƒĀ„ ž&J6Ģ‘RĐŊÖ÷žī]Ęj˜Šlķ踘ŲJȘĢhŗwąEøé°Ŧ„ŸÎoܖ]ætũJ^N´ßáV2ÛüĢGīŗJ”Y8Xbė5Ƀũ'ØĪ“ãĖáÎ6íøl—™ÛMv$ˆĩ„×L^ķĄģ5˜ ]˜ļōzDL`> ^ģl­;úé—Ĩą`7˛jļŧ;ŗFŖ…ŒųėāB  ĻOÆÃŠ­ Ö ÷ŦĶör¯F6iÃi CՕ Ûyį¯Įî?e‡­íúâėĮui=],xuH;8?v=ĒtŨ_ŗÜÃä鿚žFĮ’šöáYø7víĶ;ąÁIs8N åX`(‹IŌĢĀĪ;˃ƒÎ”õ(fQ )8UĩĮoBKcŨ=l3Ŋ’Žt<:k¸-ᚓúlˆģ¯™¸•ķF‘xķs€÷ ęQBĶ%wŪ‚Ząų„Uh\F†Š=§RŠ3ÉˈK×tnėĄ¯d3A…žj=­§ė²QŽcģ‚I‘z‚mû—öäÜ0’ąĻû¤ą‹SōeÁ Y-BÖ ÕIz âĒKPŋq„úW‰0TĸëĒ͏ēsĻ}ĒËe`ũCî礑Ē6ÛI$<6>[äšk~ąč]ۊøĨõš^i*•]ō1Ōt}Ųŗ+Byw¯ÕVíßFĶ9īEuuK_ĄŠč‹N#wžęĪl°‘C€Q Ô4”žŨ9Qŗ)k™(6DiĒpŽĒĶ{%Ę•æŖ‡ā1×:UÛëÁôĐE帯˙ČĩšÃfyy §É1ƒGŋJÛ]zĸ+ČuQQān%8:ōJéîė•{§ÃÉpHˆ]4˙Ąš÷*“qļV¨)ŖâfœËÛø,„ĨōÅa\“°bA˜2é ąp)5ŋløĢz oLŲß%‚8.újšųÎõ[ŸĻI‹Īfę †zw•tí}+L„“ ÆÛ55&{Fw2{܋Ų{ē^™ãt‹ÜËįzWøą¨ËNÎlC͑XzŦ9R÷|°{€Züû5“ė[Aˆ”ŠØdDĖB ]ÆDö(´:ŌœĖŋ™Â|fœ÷‡oœüęqËšw§kDķDp—tX\[lōiЉbĩžŽlKŗG—ËgĒŊ‡ˆč’ĩSĪ)u[õ؟„Ię2d–¯Y!Lö=jJāN•ĖKL­ đ ąLŅJk]ŽĒąŽĪ›×סDæÉ2Í.ˆ˜íâ–Ŗĩ}i>tzëeų!ä=iʃž;UZvī¸éÃu÷W]´ŽčJš›u0'[ŽKŸŋB;AŽ ôÁčX˙Ė€į s°ĸĸ„ūfßėņ›=ū_dgÎnpíķV_ū3ĮđĖ!@6cÔ¯H˙p‹ĪûNæbŠŧ'GūÆÁBl1&EÚ— )4Ęɲ #×)xDĪH°s¨ÍßíŦWajœDú%‘D­POž0\įiKŨđbõ×~ßrōáŪéB¯™WˇšÆ¨ˆœŪô ôÎZ…Ûc™h-_Oļėķ[|^€Ģ擔š&öî˜ įVWå)ŲÆĢųô”F˛ā?ÆG ̃$B J+įAˇĒœmŊFp¤w ˙*­eLŖšĀšõšŖžĪ-ŖúÁJ¨ã]éeæĨéĀl>Ûî°o…Š=>œŅځ€Ēøã]Šōŗ=–š]Įåyīd) ĐsÎ}S4ąr(nļę['\ŲőŸŪPã)ŒâÕ|œļ7’°ŋŨĨÖdDß3§?rYëņ ŗĖ\įUN”G>„ρī{í€$‘‹ĒUPgÜߘ‚|]X îĸ\‰˛Ą18tÍf¤Švû^ĸpfŌŗ {NÍC!ŲęBH§FˇŗŪ쪌{gzđ q†ƒ}pN˛]e‚[sc¸Ų*ņG°*bŪ!Å"Cg8nĀR !›C†VģÕčēĐĩkáōūZđ>Ɍáčkų‹nįY2 ÛS&ļäŧadfôĘ3ÎĖ ā—ŦŠN+°ƒ"_N**†ųŨ?]ĢĀīģ}27Ňg˙ˆ/k6Ãúäõ÷r֑‹—}Ö¸Ŋ˨V°ęZßV–=`%PŦiA`uˆ` ‰DŲåÛrũÖ!˛>zô Û\+oā P“āū•)™'VÁ„ŨæeĸX[“ oëŽĐČQíæüŧwOÁCY%’ÜÄöÕĮâ‘ē”oB8JL“–x[Pũ|Ũ >CTNfI÷…Ō*ėœđ—æZIī|qéIåšú@-ÚjPLh´âxt ¸f!cŪUļB]¤žĸ,08æúúũ!ˇs†ųt^YϟĖ4ØkCÅÁ,˙ŽŽYV”ĀheęøsƒP̃•ņĄ¯TGo‚ÅŦĪdWb͎]5Â^õ0­ü[q7Мąņ`‚ÕäŊVá}Ī!IÂQØ/@đ%!™E¯CŌhJņņčp¸#ûc,‹Áqļ!_\Ô_]ö‹Ž­ĖU)Š|ē Aú˜s"ëuKn2Œüķŧ ā™#Iė85•ŋņīCüû?ã!~ŪX+āá=ėÛōŪ_ F9b$ũé@šXĻšųŪ`ښ.Í\~ÚŽÉnë=ä`ÜņA T_úm7í˜8Hƀ ƒˇka€Œ7…’÷Ķpƒ z+Ÿ0Š z5LfפބmŽUûz]j4†`Ŋ¤AU­-+|ĢUņ’Š ų¸ãĶDe EtYĖ Uõ‹ą {9Ųļ–8íîɌēĒôŗ¸QTg“Žļ)2-Ũ×´bĶ_‰d“rŨ.—F°ld.5/į˛(ĸ§U3Ģ­~Ų§oĖŊTė6ŠîđĨõĸv˙€ļˆ¯ŧváu'ËßWÛq|x Ëíe>+Fđ/°~æ 1G$~΋ßX˙õķFŋš˜/Ex˙ĄüĖ1cNœB˙š¸Åį´rą ^8Wũī°ö4ĀöŅ÷°6ŒÛ:DFTõˆĒcüĀĩeũ ”: f7„Zd“†EŠĀ#@û"‡]Q€&īŸnĀ4tG[Yûn|Žm%敕w¯VĖ´ L< U„ą>)Ãj˙kuMÕÁ]cÎ6oc·é6dZÅw3zmcķJ ƒ1§=‚ŧ=ŗ•ĸuL[K—Z—m(Č-ĖČĸûÛp…‹Rķ‘=—[¤3æ×"ŒžûIĖÍĸSš üæōMcŒĐd¸ļ^\„Cû(Ɠ6=3&ŗÔˇBņÍ@{ãKüĨĢ—,xžģOo€Īβ´4:~›ų™S?dšŋÁūöķžãšXcŌÖĄūŲác~Ūw<'SŌ:šÂ?Üâ3ŋãŲîã'rŋ-ūH{Ûžûžö’†č Y”_ųJĩޞ‘j$ef€­SĢŽNĪ”)ķĨxÉc…Ęx"Vú‹›€yŽĸ;¯.TzÛø‰(pS@ũĢ)lßDœ{n2xeôBiũˆ~ĶiŸfmkåŠ!gË{E͝+Û@$Q%ž Õ`Õņ3ÖQ‘~gK‰k‚öymiđÄ~ŌÁīfŋPDĄš97oˆ“ÄTkzđŪøĨ–ĐË+JŸØV<7ÊĄÖ—¯ÚIÎŽ‰ŪtË.ßë/ßH>č,4õėĄĻį~ũxLøÍfÃĨŪAR^Ræ“˙<8Āüŧ/.NĀÖŲûßp˙÷3ûÆėFūd˙đ>¯KÉÉėsââũˇøëžØSmö—&æãŸ ¤Æ– ¤uhÚySALÂ(0g@;€Ė¤6ŪĒø“Ú)„z ėÛ[ɘîŌŦØŊ2˜wEb^Ä8‚ˇ˙ėŽ^2•’ô ' üųyœb ōf^•×)7Köĩ\aá6D“~lx/ÎZdX`xio‚Šc0ėČVęÉą4I+hą|Æ)HČ>>†.#—FÖŠY'Ũ¤EĘq¤áŲJâÔ*&}mÁ)Įzˇ>§á1Ķ´ĒķŪĩ}YÂõŠ#ˇŲ)+ī+$}D\u÷Íŋ@ôyĮú`ŽBŊm/и06Öäã%âWŖpĢ™#žŠ|ė=JNÁpŌP‚Ūķ+wŽáĶØŲ$ä“ÚŨN oũŪឈ|ŽėâĮ4th×ī6_Ļ#đJÉÖ]”Ĩ•Ú#h…Ŧ$eũía"7‹%€Ŧ7&¯ļ%¨Ü[BöŽ‘“Ĩˆã˛ņ8Õ(¤Ķ éä;|8N•_Gå? 8ÍK ä÷ÕEô‡Ŧ¯dũāŌģ .›# ’ŖŪV;äYbŒŦXĘ ž­ČFõQMŸ;’lŗ›šPGĩšîpNu‘oFoŠ.ĒrR‡ XK`’…oqšiX;O'õF3_7€Ģoė ō@X˙ŒldŠ:ÁÄû6E|??­Ę4jžúÎqîé$â$ŊkįyF‹wÃÔ}˙Ļš/• &ežJž¯LëŨ&ƒKZxáڝ¨!YļBR“/ûĪ„| ׋ÕĐöF ī&įāLē˛8;Û͌]0”_ĸëbOaÜ?Ü ‹ˆØ]Ūp,;OÉÚŧņ›ÛŠÉūy€å×Ŋ÷×2æ?~ĩ?E)u ū¯öŪ2ĒŽeÛ]¸www[¸ģģģk āÜîNpY¸;Á‚‡$„ÁBĐ/9{gŸīŊÃģ-įž×Ūkw¯ųgĩņkÎ^5ĒF¯1F¯ŸˇJËŅÕ˛/O;#3~“OŒæÂō„¨1‹ĖĪ;CÄC”O[đ]ģ„9×a}˙n=ø3*ä[ËĒUy‚Öļ õš¯ÅĪŗ;}œÅ_ōF,9!•@ŸÅ– +õ$LI< ›ŦmŠOÆ/ī!ԖNCZÖ­ Ōhek5¤tÂÉ Ņû81TS`˛B(=÷íyœmßi\ė,é§užŖ]wwiúÆÛ!LųÁĶąĶ vë”ūÆÁ§ĖĨfÛgqâÂKģË[Ĩ@ųČąųŸŲ!ã_ë›ĐO€{FzēŠĩMÜ~M\‚;”Š”P—L>¸5…feNPޝĐĖCFĮåģā4Íî ši°üx}ĒxCZA9_ë}íž$Ÿˆ]¯OņÎhVēßæ,š‚übĨīKŅK$ŦQVŒeĀø­nJž'?$ųÂsɅŦD,M'ϧdžĒ%Ŧ6Äž¤&b–‡š´WíHjÚ{ÍiJ_õ6ûmHÜZ čîVÂ[HmYjãŸ%čĨžŖiēë!čHÃīĐī nÛŖXgb—Ų…ƒ„Î1Ŗõ•Ī›@,DQ?¨J [0ĶGԍq—–Egr͟q€—nč`ĸė—ō ļøÁĘ âíHū‘ôõčķy}5ORãÉÃĸģl÷īĩĄ—ŖZ_ÚoāDÖGJ˛œÚˇũˇpI0ģ}BkāĘßg€˙čŽ7„ŧęį͙ög ‹É÷‹ĸÁLŠ(’e™šÅ;´Â¯ëŗôšR‰?ƒf]5›–<Â`áoM/vāŒÜiS\ꠂˮVEG[(晠Ŧ$ųßwËDû:?ĢŖiĪëC;Ôļ ÖcqēũĖI˛1=đŽĘĀ:TK:˜ŲDĒ#9GđšÍ={4–äģa{q^höNA ŧҚæga*aMS’ĩ’/KOėҔ͛–ën>[ķ.oŠ’ô‰Tg<{ž8o˛Č/`Ļ´ÁØgM×-•/ËH{¸^Tëãs†ŧ ~˙Ũŗ1üP—įņņŌä4ũ0—ũuô‡ē‘ŧ˜ųLŧK˛a”=ûžaŒrå8Í$ōņũdąBgwoķŲū¸ŦŌŗĢ"~vf‹F\MbŋqŨB‚ë] MĄšĶ>­Čņ¨ Ųy°WŠūūč õJ‹$¸×Ēr͍ÛŧkĖیs9Œļ¯t#ĖX~•Y!Ē [ Ũ Ö,Y„ęcŌDŽ?*õ¨.‡ô|ĮĪäv\:Ķųd€{:ôöüįīs´ŸÛîŠ)-äŒ+ŋG­×öņsÍ_Û.b°*ė*)˙ĖØlų!˛ÛV1?ŧP€Ė(¸P§–—WÛŲļgđ:KĐŽ$î()$ N˛gņ蝊įĢĀ.7qŒcjlÖXDŧÛ¸}6ŧk+öđ¨üėžÁ¯!Ļû„zÍōĒTÖu¯ōâ1HF´Ø¤;ašŦĩY‚9‘‚fé âÛcBÚ ‚˜ļņķe)ŦãŪŠN¸˜R0°‹É(Ķ/Ģî|ĪzxgTN"Ūˇö¯ōvėœJšØ¸[°˜*eLüRĸú‡8›ŠŲ“OčšxŠÆâ‰ DzĻoō„ę{ĀdCQYs$ėôwXuØė ¨¯Ã‚bītk"1ĻC­%œĄw†*gúËŨ×ķ­ũÂ3­¸ĨÄ6Š’ÚĻŪŲ´4•YÍ$Á”STܝHŧ2AÅÕēx‹ķˇŲŪā—ƒŊĄ3Ũfi[MįÎe l—¤ēđ–úĮĄĨŋŅt†<ĩ)É7Fûæŗ+*eFĨĖUŅL#Ļ“ŖfÍ͓]üũ`ā}“Ã|ĩČ.áąĮ%ôėėōŋʃ˛s>jŽáŸsđĸĘpšØxz0‰_ū0¯üÅpQ ÉxĩąŦĢĨÛ`öúËGjļ+yc§#ö~ŪVŽxs`ė­ŗķs^Xŧn,}ųŧ%<ĘĒ+ÎŽŅž9Ȝ/#!į.}ööđŠ(`ŖôÎj&ū†Ü+…ÅąĘ°—gÚņ8†Löę‹–jP\{ųbķ—Ķ$ZŽ>ģÆBžER\įB­Ãωt)9pwėKKFÆ ė{)ÛS1öŗÚOŲy,ŪŖ[juŦmzŠÚ/8EnŅ´Yt\(ø—/Ą5ČđCgMÎ÷8ŧë8¤Lø+9f’īŋ}Ōu›ÕzŊ‹ųf]Öočx•arąqž\´ųŸ /×Ŗ&rūšÂÎüÕ ‚ūsûVũĒ^ô>7x„Q­~¨\7XmˆĀČ+*-ü„P_Næ ąÔŒđŊxũúBŲÖˊā|U~ku.‰j4Kę<ŧā^8-ô#ÃŲŅL2ėkĖĐë¤jÁju Ԙ0 &A°Ëû¨|‰=Eė{†vŽŽsø‚Í8†ÛM÷ĄeĐŠ¯FęKR‰ KÆßqŸg ×ėéHíV>ũĘw{ŅW˛/ũaŠEJ‰ Ē @Іœ4Ũ[/*xú~ĘĶĒpɛˇíģÕwĄŨ€iD?ĖÆ`ũ}Z(ú×VߘJ}ö›°ōŅV°ũdãUŋD ÅĘ0Oĸ‡°ŧ€úJa>ž&T¤ehšČ(Õ>4ÍČeųšžūƒ$Ũwå XßËr€œėđ@w%ŪļāĒ;ˈ z$“ôōfQkŌ7Lį#Åc„HŽ’#Yæ 9ŸoŗŪ@2S7ƒ‡JŌhfā2ƒŧgöˇúēč ÔŲ>h˛Šåą˛BĒĩŪe*ĮÆwpûĖÛ­}”x•oŖZÎĻ=ߐËM Ĩ9ÁŧLL¨Đø¤'{ĪЂíXa7å9%t°Nĸ…ƒ$ŌSq‰ÔíŪL(ŊųW‰BvŽOfī!mä˙^šöęæÂ?ÕC'ëū!č=IŸˆÂ!ĶÖT†‘„Ô[).‰8÷ĻJRīnE*VGĨųđĶâjŗ8Ô{ŲOÁO Ņā$â)Ē˜C1ˇÚ⎑Õę!°‘“֝¯úĀÜŧc|„yÃ͗ųēO Ļ´÷Ž–VG˜é­ĨHœjdŨįV×Pz¨#}wP¯@mâ/Öoá\IdŒ‘e/´ąJ .pqģN!–ŽĒ/ŠÃÅķ@é÷YČO”ū v1E˙(Aų”ø„k!~Ƨ)ĘÄO*!ū˜?0Ģ´A _a7i6m›ĸĢƒtœĪ¨°YUu@Ė^ãqPŗL}prdē}ņõÖ+ŧđVYhũ–PÆx3–9leۈOŋƒĶ]§ÂDöāJKĩŖí˛Ņãĸ_ûĀJ `_ƒpđ‰ôļˆ‚é kŖÂ›7Zīâņ•ëŧxxųß. Ŧí+wûRvm@ĄčU7t:Q=€ËīSąŋÖ!Må‘ßÅƒíŠØÎĪ­āOų,ĄÉėŒ ëíņ<¯ë<Ėŗ5 Q´Ÿ\\¯RŦņg ˙Ú\ūįSą:EqøCÔ|f_´ãē,Čl ¯­ˇB<Ôé2īM @Z<˜wõ ´÷Mvš›ĀëęnâņÅļ蝷æ˜j ‡Úc`9•Č c`yėų[ēĄfĐ0@ÉOÃōIe‰b|˜QfúXEŗ\8WG•­iŠļ5ˇ/ QđšķۆÉËÃŧ×ũ­īTūUВë÷ŲÆ‡Ÿq°J/ ˙0ĮũuĮÍWž|ÖÆf$=D iŲØ?BV‰Eá]€#-īûũ~Y´Ú›ßČ9D€* ̀ 4lĻn(*ãQąÜˆŠ}=§;`_Ÿƒ¨˙¯k›Í§_2 kg––@há Yā.%Ö öéiĐ7€īÎw‘\ė`5$2Ÿž g3IķŗõxeōfŽm€Čŋ Šąsũ>[<|{ʼn—‹ôsņ_Úâ{Rˇ-éØÕÂ3[höįąA3’HL˛†ųØDd@XWΊĄ;Ûôw.Ot c™Ö͇rĨĐņ pLŽy—L_!Á]@Ų„Rō m Ö˛c9:aŧ‹d9aŠ,ío0•ŸÉĀíÕ0ķ7ÂvP2ģļMT‡pÍ ÖđŦĪKõ'”Ž0Öđ˜;ÔÖRd 28 jPܚœáCŌ”ŒĶ>†3-n|1Âú@„ëq9ŸÄāųOmÅ×˙īûy˛ˆeŌ&*ëdî”JgPÄÉ3Ų‘7AĄ[ēbžq˜é}Ī͍˜áBâ zˇgŠĩŠm8Ч.ąFžō›™´“š…Ė?ķÖząSˆc×TVyyŠ{Ĩūšš_ĀČæĮKԚKk=•%Q…‰ĨĖRĩÃÄV¤?Ŗ$§U„ąŨ°´‹Ŋ*¤|Ļl§ÉĒ&ņbÄZoˇ*2ͧ"ÂÛîpēa”Fif{ūĨ˙Ŧ–Îí?(cŋíĒbģŧüũ0_đīL@.*ĮÖĀæĸ_Ķ3MU†M#V5ļWĩ|M)E&0Ķm CÍmkĒ&âž)O͚đÅĶZZÔ3Ąˇ–ļvY•Ŧú÷9˛¯īQ8u hܞcúßgb¤=ũž7Ļ\Z­ŽōíŒEskģņSv‚åX–ŧ;%<]Ųû+ų_7EqēWš¯°ųN‚U^īVļ ¯1īŧ˜ÆoĘa^ô‡(Kû;<îüW˜€Žy™—ĪĀ?ĖķM´?2éé Z7B7lĢ:\¯k<ˆZV-f8ûrdžą ā0ˆxy[šę›3¸Gš`ŒŠĖ ›$N”ŗ&6éĶ$ž“.*Á(ĩ>MQáļüûTØĸrzđĘ Ĩ›­[™‰F$Ę;ûŽ—@ˆĒ’ Õļ͸ʔøîŦ Ēļb;Yŋâ>\bl‡&*ŲŽ9΍në¯&įũĸU‹Åšmĸ9 ģûą’mhšĶDv ÆRŸ‡§^ŪØËpT( ×#={NéūŗQû^V°zÕÃÍœÂø˛šČáâæBŨũēNüE„~ė”h°ĢüŽ:p˜Æ…I>Ô2pīįZ/ĩ3/)xÛę#Ú0Ŗ)E˛‚x|!bIɘgä_k™u™!K̍nĖ:ЕøÎā8ôØ/Fĸé¸×ÕĀ9¨Møú›}¨I r7Ė;X$šDā’ĖƒĸÚ.daŗ9\dĐLs hß­DJŖŠIÍ,bŸËĩōÚ—QŌž-ŊÖĒu™^Üb˙”âô[ŨæÆ+[Ö—FšafD›úúU"7ģlŅ'ˆĨU­ íĒ+ž+XûŖ ’4Á†‚ũũ˜ūŋ‘eäâzĘ,Īü0ˇūriŸsÖT?“CƒÖ%%ĨqĐT>‰Øē:h&ß"N”Vē=ü$. ‘ŠÆŋ™I^eĨÄ08靉b^jĸųÛ5vķPgHÄ=Ô!Y˜*.×}”ƒQa}w8(§­}Ŋą€’´¯ú›hĖšc”_øŠŦuËąļ@ސ6oæ4;%”›Č[‰ž_Ą~!HdĒbn^P§@Ō4YĪŋĶ.ŊI#r2Eœ–KDM_~uŲŅ&š˙tZĢÆÅÍ {QúķžĨŋnņŠûЁ˙ŗŧRž;b)B—:+Ũu1¨ŽQœgBT ëCÃÂō•HčS\ø2í'ŊéŲÅjB7n7ŽķĶÌiH]Ą8Uŗ°ūRœ¨\žum2‘ĻÜN .äA›ä}ŗ`9ŽíĻ÷Ô.áVĖû 7„ŗnÛ(MO4Į‹ø ¤HUŽ@ˇ %‚íYũ%^XũŅ˙K#­qLma\ėŧÅáI,?* jÕāÄÛŲ§đĄ= ĘJm÷č˜?VôPä žâ5ũāæNͤqŌđ!/}¨Ļū>UøšĶpHÃ` ŧ5&g¤ÎP(AHv{<ÍãĻ$x8îyũš˜ ~i𞪄ũõäšĻ)ŸcÅÂF1w%Ę|†OÆęGĒ=uOXÅ­ČŽā•Áæ+)įå%˙I1¸Õ6oÜ\pŽŒ†?OAËķŲsE?ĩ(-L¯ŠŌfË X(וqŲ×<Ž`äMÁМđĨzã]Ž­ō—™Ëy(™KŦļg‚Ë qãŲ$fÕCyĒÁ=9FJ-ú5ãõĐ6-™ÛãK?ĪÄīË?ŋ%‘Ž ŋy¤ĮÍ2đpá,A™ŋm{AXėh€Iē >SoT¸õĪfíĶ›äÛ!oÎw}+g¨7¨]H{ĪŌ{ƒį1Xų°čßÖæ<}fŠÎj/6íJ"*€ˇĨm>ō`Uã÷¸Īž)7/ĮrŧÔ¸ .–רˆÜ|­jwæˇŅöVúFã¸=ŌąÎ¸ÜčX՗äOš ԃ=ąŦ•ąšŸcœ°šÚ[Ųąx*´ļöCr„7ĸ¤!˛âÜuYäŖōLؚT|Žwž^Ge¤2¨P›ô“|š‹ •X!0J;/šīu”%ĩ'8Â<Ņzn'XT†3Ļ[Ū*'‘ņ’˜CŌY<†((äi;{õcKæ˛ģÔ?ss+ėėF1I|-$ˇŊ§m7ũEŒ”’ęNÂK´pø:åŊ CĖP†(ÍāžLʘ  „ĨlZČģ|ēwĀ@9éžAlęIŠ14ŠKKˇRsė,1 ´ŠAõ‹+ã4Ŗīš#y§#ĶY§]Ņq;~LÛ¯=žnÛûdúKāûĘ Š”4\ÖÜ7Ūč)Ŧ­Ÿ“@=09ū=Iī3 ĪÅçÕöÜú§Lú؟d‰^÷Ũ%!×@ąōiˆĄčÃâG<Æå€Pƒč͜J’ŊŸŪ1ZoŖ*“Át:K~ƒP­U€‡eې[85­8ĸųĸxRŋ¯ŨI < ĸgæ**g6fŧ|bwĖtÔjĶôÁår ūĘč)"wØöĸ62ļv˙#S•aUŪąôĪé5æû•3 ’ûÁ›Á'mķī]Dū`đs‹~>öËz(ČîL˛íPŗgø|â5ŊŠ$Ą”lÖ j°Õ)`¨ųį4sŽOÔgÂ÷ÁɲŠŨÃwî i]58¨`boÕwJņ ˆ4o\1Ÿ;”VäS–A.ŨĄ9ä틊;†XHu‘ã§×YJ%DĢÕa‘#wáãÅcFŦš J ã[(’†ŪŦAH'ŧô Î~}Â!—nƒĒ7?ÔRÖswųø­ī-ŅL›ûq đūĶ !õĮĘ22ZfC !Ö0‰ÎŠĮ% ú #ûŒXg–īÚ-‰BŽ-ģhąlņĒDmÛm›ŗuΌõ‰ķP~P[ÆCĄŽg˛¸X"ČʏĀNúÔ"āž|[Īۍ(fĸúI€Đ"d1Ÿwĸ]éčũeëëŧ+ԁ1Ķ1.ō?°ãōmׯNŨˇļgøX–JģLR¤][DëôVQwĪ5´Û­ˆ‘Ŋ­Ą\šęõŸųĢÄ’/ÅŊčC0Z }ŽB{NÕ)ƒn*ŗØ¤ÜEô"˜Āš†ŅMįĀ˛8•1ŸO‘ęŪ3¯ ›#kņgMī,j"ÂíZõArC…Ÿc$ŪēL…/(DhŅ”Cã­c YŊ&°'•ˇÚö,+ō+˜Ũâk"–RŠĄ‚LNQąNbŲB˜ZŌĄ?xŋ Ոˆu^čįnOYP­"§+%T§ hÚxũĩڍ§äEÜpŅsnY7 ~ÄŨdz–ብá™H0ĘÎË`cl‹%\p‡ĘT˛­üŒ¯ŸŗŊ°%õęë'ƒĪG!¨‚ŊEéá0ĢĶ:X×\ôt/™TĪNŪŪH&ŗĨ€cĐÜĐdĘĨŠUPfȝņéëqrąFâĘŋŲ¤‚n$ ›5Ų@¸,'gEŗ:Ļķ–쏏'7ũŸFŪú Ÿ*VŸqĪë§ U9W(‚(…fʘėžĖ‹&†’”COˇ™í°KŠ.LĖÎļŠ‘ĢA:•2\ šž•)yË^ŋÍ™hž¸QũbV#Ë }ŅY–›hģ]cY^ŋš%wt,ĘK‚^˙:ĩũYũ§îøŗßtä°Ū–W3nėŋ‰M’Âŗ‰/aXĨRVđ‡ŠÜü¸ÃDKāķ€7<.iũĩbüí {Ã˙ŧáQK5šø¸­įRķ(Å?ŧĄj–ũÅ27Ü\vļĀÜېļkZ~EŗŊ*Œ?Ö×—y) ķžŌīa#aņ+ĩŧŅÕē[@V9\Í;;6XPÍŊL;ˇœ3\âĻ €äˆÄ´āūœ?-ëú­§=ãČúįŧetŖôdÃSũœw‹#ėʕˆîŽ †¯‰Î9 .úßy úcŦ ۋJ˜ņųÕ ČNĨŒĢF?æ6SŋáTk īfˆÕËŪĐŧün× ]Ė|fŸwyžļ|¨G6ÕH˛EäÍ7DkîĪ]0æ=ë‰VœS•sbi!ō$Ō˜ĨžVĻCYZĶרĖÛtØĢx9ũē‘ĪCŌæŦË`۔×;8T;ĨH]ģ<˛)…>“T­iR(>ƒ93Ā÷}Nd7D3iœÖ•øĨÅú—fBŦdŠ)™[ģ/Æ{§!ä’ĸ"qaÉ÷S–qŠ8y (ŸĻĀĪ'ÚÍŨʰ°õDˆž|uņĄocč͚2ž3ĐםW\’ų3WŲâ<Re|oâÔĖGWéđÜčĖĩ/ßmöápQƒåĒB§cˆ'õ:ŗPwúü¤TÚŖ¤fk#qŗā[ā38Į„tD Ŗģį—#¤žeü#âĢPáA¯\_ĨZnßĀäÕû.iOs }Ŧ(ä< !îį#dp|VO‰Š é­u„;zŋ0ŽŦ'7ÛDPu+Øâ!Ĩ˛ÄÄ5?Uö-õđÕ[)v–ã!<Vņ{˛QZöŅ‹Ö7ŊĻ7eÚŽÍ5õC>¨ŗú]>ŸfKŋfɲ…ōSŪąœœ­ēÔû>ÔŅ Ö>´ĪXHø&¤5/v€ņt’4îÆÆDFÆkÎö8đûĄM—­ˇvŖ÷j%Ī'w›ōių9RËz#ŖĻœ4‡'"jÄ[柇kÆ_øOXw´8)ÉwīøŋŧS"Ā‘aņæ”7é¸Pe@1|íÅ34ĩŪ¤IÛžģ;šOƒiĢm=ô‘9Mb .¸T P=/‘3MVÃMŸŽ+ĶĀŦáBTK­¨Hėx1MĮ§š×tôÎRų*ĶÁ{FBfŖŦžčÛģūēŲŪVĢëvQÁ1sbđËw„{ė‹iuåáēH֖âĐĐũŅjMã{ Ž ĄVVōņSPÉŦ?DģŦ¤xC‰Ųîü¸‡`|fę­ģķßîüˇ;˙ŋâΏZ(ÎÅĮƒ>UÂ@OūēíažRí­Cs¨ZĄöB”iĖRÜ*u‰`÷FĒ üzü—:ŨĪvRp¤JÆdãëõņhM“AŦBâo{ĶĐZŽ‹cÂĘ}g)Ŋös‚ŠĪ˛ĒELüŒŌË|ę$f%¯-‰ē|9žI"ëŨķĨˆ@„´Ÿŧ¸Ō’qv_)ürř™”ē°ô>dëüŋlBJČ.‡õåWŠĢøW "Ę&*¯>'í…>ۂ›4ÁO˜ÚߖáJ>{EđqbTûjĢB6LnzKÅ”XŽĶ. ŖžJÛÃŐü@˯õaņ+m,˙úĨwŲrō7¯a(Ž*}Øũ°"ÜōŲĢįÖ{nFņØāņŨęŦ} Ž5CU¯mŠqÚĒiBė üķ—y;DĢ‹šîÄô5ė–xÚ98å‰mÆ> Ã`kˇÜ˛âô2ßs‡4`gČUiPŧĸ¸ßŸú”ã€Ō„āwCŒ]–DÅĩÄÔŦ\ãŊ>w ŌČßPŌ1Đ+„+ŲžŠ,eb Žšø “C”})x*?Ŋפ*ƒ3ŖdËÁ/°ņNŒK‹õģė ^@ėö-ŧYH" åŲ’kĒ-YãU(ė[ä€w|Ԁ(”ņČĶäą8Åmy­Š+Ėé0ôTWĄ´­„Ō3{žI§!Iu–Qņ¸æ9'[pVâ1'TÃ1?<1Ɂ픃ŌĒ›í Žũ\ҁ[ZJjI§FûƜ–ãr€Īœ˙§ŦéŠ-Ÿd2œĘĨÔņ‘öj¸ėũ´ŧ$5ûtDāWũĻ”¯qyļ˜\ĨļKļļ™;ąË Ōī#ųûŦļúw0ÚėĒÖuæųm‹>šTážûn⋆ĄZ•xpkŦÁU´y¸ĖeŦÃĸž„ëŌDŊ.מ ėju:gö¤Ļu‹ÎpŸ¨č–{,PŪ:ņ7ž(ϊÁîrÜ89 Ũ'Ļąé#lNnA\ŧJęj”Y%ĪgĪé˛ųϤÉ&ęßYĢāŽ4;uÕz`ûš1yŅy”î28ŧHít†ŠXiÚt@iöé% ÖBJ™yÜģ‹wÔņÁ›ēž6-¸W3FFÖ¯<5Nw öB;˜7f"jÁßĶ$UāôĢ—ŪĒ+žĸąôŋŪČÎũ¨M˙\|œ8æ,/Š/Š/Š/Š˙C–ÔĮMīōņ:u”Á,ŠÅŗ]NËlhS.ûũHüvw‡p.ßä äĖ:˜Lu)Ø8oh™Ō˛!¨KdBmiX Āđî‡,jûĀ ¤ûˆWžüęEL=…L¤UjČ/u.`ZSÔVŨĸžUĨ$]A9z–ŨõŅ#Z¤´oĖŧ„CāL$—ÕS:ĸ`<ۊ‹‡ ĻoÙm>B↔úŒqš͈ŅlĐÁĖkîIŊEÄmŸF4ė6qŦU>ĸ\Ļš•†[vCđã’#uÎëļ9ˇá/Ųe`YŠíz´ +]¯ĶÛV#U  ?Ņ­!&ĘĶB´ĨŖĩe™)ŲŅ}ÆŅÚĮ2Ņ]ü%ŗ#¯Ēu\ԗ9ŒSũ¸ƒõ:DëG šÁüR R Õ)*ķSđ&÷ÕsQ‡iä-ūe'év\Fđ›.mß6šM6bž Ųv1 fOįšašœā$åžŨØ\GhžŊ ŽZu ö—ķ‘úf1#uûŪ&ļiã:lĢÆį4ȑštĐŦlŽíQÔL ™ēMPĪŽwÕũŸļs5(­l>{ãöúŲ•[ī*h‘N¤-{K°ÔíÆy¯ DhN_Ö{}‹ÕđNåÕâdÉIÂČvGsdĶPųŪŦėŦŽ?øų@ūŅÁ‚Ú']É´Ô\ō~f`Œ€4xÉ‹Ļ-Ę{Į--W•ĶŅõ‹‡Û‹ōĪuؐgøËX6šXd8?ȗŨV:}­@Ŧ îmFÍ<úŋˇŗžĢɌķĪūZæ^ũAŌ‘uUpZŦQŪ€”ĆŖĸûÆL÷[҇ÄúūuĘ ŨSRČķKR?æÛcnzg#?#ŨIÁ efĢ;ä–Ä‚į_y^<ā›ŋįãŠXøķˇüí˙ßö‚ß/TøŲGōGcŌë$™ßō G]GđO ŗ×ŋĒ Č Ø*Ā0):Õę°!•­12¯@Ā.Ž38ā3âmˆ‹ķ`Sũm4ą-'-îīģßäĶ | áįĢN`ũ&ÄōTfku+laí-ŠoƒÜËŪ`-u>(+×N|Ø`ūú/Đë>VāRĘz‚+ĸZ|íԀ~šZå°"Ŋ b1Œ&F–Æ ~…ƒãST%"Ĩfëœđé5)ŗV¯ArįNh&RĸÂBĸËdČ,Á;“Zø“Áã'f–%Ū°Uėū~EÃãöv ;į§Ō tĀ_í'Rbˆo~Ką"X&Q†ŦS¨×L'GĮGQWŋI|˛ķÄų Ø~8ū ŋH+j+\ĢŲÜ3˙Ŗ•…tužŒ!ˇo“š“ė|åÉČTž•$ļ—¸§6U” …n6“ûˆ1mÔĸ̤ēÕ* L›Æ-éáē.-‰Ađ)öq×E@ĩXųķ:Ąf 4ŪĪSž„ŌyÎvy*ŪAh_$ģęƒ9˙,žß/mø9Ũ(ūŖA8×īÅÁsú{ôį:ũK îg\¨Y!}˛ M@ĘBOÖ|=D!Y2…•ļlr+†NöxvN˙ėüÍt’ÜT ‘%Ŋ']nšŦdYˆ–?F§,[2’kÁ!ĘķĩÍŌŖ) FMņRmg$ōđ,ČiæÉ”°@h@CÚT|gcØ!Ų4Ž@…X1&ˇÍú†xņ[{§ĸDĮį9l[ęJ+bÎģįî7eĻ!öûŲëz™r~ęŌߌ“s?a5 đO=Ivû7? ‰žQŠ"ö›§ļ‰#Jĩ/`āk–ŊKXËëŗŠEcfX‰í@ˆ>oHT*Á3>ņ=zļī¯o֚ĐĀ)šE—RP­zH×n&“@>l4?n FŊIüRTõéHHī‹ķØ0&ķW×u8ā—P×lĘjņ‚RTÅ­USwšÛIƒRŖE|ņKėz×Ŋƒô{3ŋȆfŗšhąO˜Œ"ƒûŖībķãņkĨŠqpôĸ퐓$ãœÍđΛzŊÖUtÍĐZöŲņ\ŪtO’,™“nP´õQ“¨@^ ]x}BîW鱀SČOÁļēæįá/dģĨAtŨ#$–ÔĸXËÔ:ųg|AS$dE/Š"i-L§–jé´JÄ×ŋ{–" …yÎũ4Lx´ē˜?QDTŒ|ūė[ABF ´qķĒÔäÚmQj:ŗŸģŗÅp´SO´ŒË´,pQ—ēhœySÄ_×ôŊáÂv+ōvĩ~SŲléPĩAk50N™F.%Íj7¨qV§ ĶĮ¨)×|2ē?Ģy¯­\nã7]ŽXo4:"wT„áągĨ~â0R<–ųą¯HØfŒDj]‡ngä ɓÆa'ˆaÕëŖ¤—PFĶf'œžíčRœˇąaD‰n‡ZĖĶųuĖ3)ŖėüÖBО —‰ĢŠ į`‰čAŪ¸ĪęË^Ū;–2¸…@Š=Øø^ųŸę-§Z§ūꎃöŨ×;Ŧy5+ŸŸĮ=PPÆķ¨4 'wÎ5ā?R\äyÔŦ“Í5ŊŽū?|ÅG=erōėÜP~xŨ/Ɍ:§›Ŧ)*ÉöB>ęĩĩ1ŖFlĖT\ŧL]JôK&T’'#AÔëŒĢÅhƒĨ™ûßÂĮœ…ƒâ_k ųŒ¸§,íõ6V0čd8äT´ßįnōW!:äf)m8\¯–„Z4߆äæWÜĐ[/ĢĢv)/=Kux_H3éü"ŽVü™2§~Z,k2p¯‘wü¸ŊĮšÃ ØCSøČ0ߨĩ}V'kąĪŅļ;™uDI æVzæn?ōm yq{†F’×pú.ȑĄ]uRlˇt)đČírßWĄ- AGû;<ė̚ųb¸į ž†Ęí;ĶÛę)—KĒ9›ŽCÖÜ[hÕōÄL›u39n[ųá$WŦgpU†^Ž+א ÕŖ˛w ';ÔĢĀ×Õ˙‘ĄzTŠ ääõ–ā#ü˙Qģ:œ™Š“0˙á+>Ē: “YáQ‡āøKÎĮ)˜ ÖTéŖ<*ÚđüÚė×õ¤ČĘįÉ4æĻëđxė–Ņjaí‰-ÜÉŊaõŽL¤PŪ^!ˇßÃM 9Npąŋ2[-Ļ–HåšáŸYC§CnB™)Ē`(ŠĖRÍ*GŪ ŸËō_&­…Ā&ĨOxáoī pL–$ā0SĄã–|ôĩNHe劉u5ųrƤiœ§Š7餘ÃPü¸tX–ĢÃ]AĮėá_Pm¨É­îĢËãērøŧEÕIōk,ÂaWMū’ž×nrŧnĶ{"8^-ĒH-žâ;ŋ÷æå: Ž CõJ\įæb“YEAđ“]8­ēú/ÛRķā7  ėeĒ‹ŽšŊ<°:ßĮáÖeÆ͒6káOæČ;˜ļ/įk˙č4 } Ĩøå\T@4Ļø_÷Qk˜˙Š[˙´˙ŖƒöûdãwmücĐ"Ք ~sĐ~ÅRŋÄØÁ}ĸh°Ģ^E Ė!Žđ>ČQĻÕVäzbžôBA:r˛ų-΃qĶ]BÜîy˛č:__]â[‡ÕŽ3c™Č’H(ÃÅŧ)';$bPw8‘VŖ~v’JĮ/eaí{$ŠMTŐ¤ž”—…ŧږԈ”o'iˆ~ŧĢëîjaˆTšIBT-dŖ°؁M wWh2é¯vÜĢ 9e-åcĖV:ŠPkų‹Ĩ|5[ í?¸cBI‰6œŧį õU ˜ŦŠ]î ÜIfŖ4÷8>.ŋøMÎM~f§7lXSΆļZÛnqTÕaEtná6ÄäŸäbDøėiB<Ũ—~ĘŗA;B vTq/§¯utjî$ ô–?UZžĶ8IY4Ö/Å3 ~^ŽX˛°ĩJÉØõ–Ŧt“b˜đš,/ßgÉĸ"îa|Ņå˛Ķ^I×@Ģl6âŗŖįƒJ¤ŌļÖÍĸ7\€1જĀíזLođĸē÷ģņ”Ü‘D¯îzŠ•Ũ3ŖÚ3*[čŽv@¸ÚŊī™F.5d,qrŽ\>5ßô:ŦŋÅŨĶĀ,oɜĨļ5›õŖËūžqĀ0 ލnß!ŨBnĒŊŒŪģGüøîË¸Øi~˜ß˙ß:Įe‰9.āÛ áDeÄÍiSø]×á…cŧŅԝ]ËŲ}ēeúŅXņs-ëu#ĮoĘiFû]!øõ>Š'4(HgÛLŠjŸœÂjŽUØ#vU¯į)ƒŨķÅŽđĄõ IąržqÎ]w~eԌ­Ü>įåde՚gē÷Ŗ‰sˆMĒڙ=ā*æ.IÚį)jP$K3Ŧ؃mã˛Î{šēž†5ŧÖNåÆe•žâį›ėm9Ōx1ʼnϔé7ŲĪžÚ›súŪĨ61OņĒŋO_~^gōĮ—ŗE„đoĸĘŽø÷gSe֟ŊL“Bˆėh0ĢzęEīĐהŖZ(Ęâûô˜t=‘0Ջ\Gĸ&†'ƒ4ü­ÃĖāÕQÉĐHQTéGÍGÔē)ĸMÅ}đö' PōîSgLːÔõFōØÜwP*ŠĄUÎû_|]ˆ7Z{ũØwA>‘ ‚(ŗ7ĄąP4f@d\Ŧ`úÉEĶ)Eũ TLĩĘC4_ĀšRåđû‰z“Đų}æÄøu@ŖÅŠâø›čpĖÎK÷ūŌ.úŠ>¤Š=Іąĩ ëDÁs e ë]cžŅ4ՇĶņė¤á‹/›Ķiûđģ īpGL×°ļ^ēÕ.SCčđ\¨¸L‰L/‹Ā÷„õRqąÛ5:ņ#å-'gų~ŖÄē"1å Ŧ‚=ģYÎÂ#rŪî̜ōV†_.—”P‡ŦĮŦÔí¨ÍÉŖĐęDäĮ3רĀQ…Æ$Ģ&Ø0áü§05} ô¸¤…‹Oæ•üķę/ĪũCC ĘhúͨRį‘i,Ú$‹KU2QQ*_ĪBĖđ§¯={7 LF’Īŋ” O™„įpˇáî֜÷šî$pqēij¨ÍV[—€4—¯"ÁĄe Š~~ŗ=ÅNģÖÁ(ä "ũ4•ŠÅŸ`+#ËDRÄÚÆŊ& 5q1Ɵ„`ũ5礒V`ûT4k;Ä[Ÿ3 3á č)ǐąĻßqŠį0ķÕ5&%Y'‚wõ\S‰Į ×0§Ö\ŗÖÅ\wŸÜ&WėWkŪ/˙āŪ[„Û˜oÃŽõvÕ‰€ø÷ɆČ_QúR9ã÷ ˛QôáÔü07ūrĶ?E´’(>ŖWžS´|eŋ iÛ­(™ĨÔN™Ŗ]D9cŋ˙,å­ië^Ą:ŧ!6öDuŗĪD0üãWÆĶĐTû"+øĀ}9|{Ė ô ­û@Áüņé~ŗėNËlXU8†ĒvQtŖ|8ø>H!QÔ÷ųQfÔĪ!XĨ„āč 8]QÅ QōÔd"P—(HĐüīiéAÉ_8"*/ˇ5^­ĶrB`Te|4n:3ŠôŨFžøzp€;ØujŖ”+æũ’gynuBS0wũđt¯+yĘáö*bŧ‹ŦĨK0Ŗ)!Ŋą14ķtĨ‘ˇ|ihēŪŧ>ÂļŽėM›ĸß&= 틙üœŧEžx@1[›ōŅĄŨũÉ0ÜŅ, ĸ‹c—œKt{_hD>yË´÷Jō$Á×rÕ’ ˆ”Q]Ö×17iœDĪũzÕ'’¤‘ČCøÄ× NūîãÚé­VîËPŠ€3ŋëįsô¯ÚāŌH@]ãßJD‘dd(ŨŪī4īUHN{Pžg¸ŅԆÜYÉž2ÚųäŽ7tOWÆŌWīŲ+īlÍ2%‚n ģ׎—-6ŒĄéö˜'”5Ģô“íf?f63~Ūg9ƒŊ-ˇ“ˆ˛ÖIâī_x/W‘ĩšlt4hsIˇ‰}oIČęŪ= ĮQî[0šĐö•Á,U‘„ہ¸~­=O\=Ē6mNΒŗÂ0Áp‘žōC0˜ ÖI_ČŦؑĨ˛…t4™$(–4Ô7Éŧ9vēzz Á:>šÄķ›#L2>…Tī€yÍ+ʸ âyb f ‡šâsÅâÔØr¨/fÅVFp ļ@i’ĖF%ēÁBÖAp 0ĄĪ˜o•œ1ĩĄnIÍ žÅ}DQy 43oŦ5Â:šk¯6évęÛŲ#˘ĨWę›QZÎé?a×$É) Ŗ™ŗ¤™ŖËŠĪ˛iŪ™ZuÕgŨÁeÄiß]Nę]Ļy–ĪļLFg™“#_jŋ8įԅŗxæTch6īĻQŽÚ*æä="äßoŽ{K!ęÔ,į6.°˙Õ1ÂZƒáŪ/Đ6ŖWŒ§ÛtŸxLšŅ|&˛ähwãĩät\9+6]6´=*_QāLčįŪĮJŅquędÎŌšÁēGÔ0IiLTKŧ[Ķ;^Â^t›vÜiÃHØ=ë;\žæûfĢg4æXũ zj;ÛaŦhŗv|\ãšēU)ã€õi‘ķĄGvœ<7xvȑ”Ëǰ]tvƒ {Xã.ÄūËDÂødņ™öš[ZR6ē&V§˜ēDĘūÔĻtJķĢ "3ÛڂC%ՂiČyÛŅ{L(‹\Ã7ļ˙˛r°=.‰įaC;se ūėŒ˙0+āˆPUQWŊ‚gP_Įã×a`Oĸ(Ž‹/ė'Á“Poå"E°›Ŗ‘"ė; įrŠ v.ĸb 1pbu Ö&Ԕķĸ2g<&›6°€5ØXŅíļō /ēԜJÚGHlü°īĒ3ÎÜ­ī;ŠÕZPĒķAVėŖö˜`K-)Ŧšmõ˜ˆŨˇvËĀŌcS- Ą ­õVmąžŗŠŽOfŪøØą˛ĶÆĀe­ ėOŪ­›^û<įxÁ7üîÕ=~Q"Û;-öė~ræ•jnŦBeE%%”ĀúÅRģRuę~rÛÁą˙æC,2s{=Ļ˙Ŋ{ŠúpÆB%KŠŸ=bXjŧķiĮ XQöžgøœįĩģęđ{_!…ŗdz‘Ī`Š1ÂÔëĶ}5D°:˜šaü+ø­M"1Reé¸fŪtũE”ŒƒĄÚŲoĘ>@–+@Ū[ŧœ0Æ˙ŽŪ˙PK–”œP!žŪ¨éB ¤test06.paUTŦi¨^ux ččPKOF¨leptonica-1.86.0/prog/fuzzing/pixconv_fuzzer.cc000066400000000000000000000010601506303110300216160ustar00rootroot00000000000000#include "leptfuzz.h" extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if(size<5) return 0; PIX *pixs, *pix1, *pix2, *pix3; leptSetStdNullHandler(); pixs = pixReadMemSpix(data, size); if(pixs==NULL) return 0; pix1 = pixConvertGrayToFalseColor(pixs, 1.0); pix2 = pixThreshold8(pixs, 1, 0, 0); pixQuantizeIfFewColors(pixs, 8, 0, 1, &pix3); pixDestroy(&pixs); if (pix1!=NULL) pixDestroy(&pix1); if (pix2!=NULL) pixDestroy(&pix2); if (pix3!=NULL) pixDestroy(&pix3); return 0; } leptonica-1.86.0/prog/fuzzing/recog_basic_fuzzer.cc000066400000000000000000000007561506303110300224030ustar00rootroot00000000000000#include "leptfuzz.h" #include #include extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { leptSetStdNullHandler(); L_RECOG *recog; char filename[256]; sprintf(filename, "/tmp/libfuzzer.%d", getppid()); FILE *fp = fopen(filename, "wb"); if (!fp) return 0; fwrite(data, size, 1, fp); fclose(fp); recog = recogRead(filename); recogDestroy(&recog); unlink(filename); return 0; } leptonica-1.86.0/prog/gammatest.c000066400000000000000000000066471506303110300166660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * gammatest.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define MINVAL 30 #define MAXVAL 210 int main(int argc, char **argv) { char *filein, *fileout; char buf[512]; l_int32 iplot, same; l_float32 gam; l_float64 gamma[] = {.5, 1.0, 1.5, 2.0, 2.5, -1.0}; GPLOT *gplot; NUMA *na, *nax; PIX *pixs, *pixd; if (argc != 4) return ERROR_INT(" Syntax: gammatest filein gam fileout", __func__, 1); filein = argv[1]; gam = atof(argv[2]); fileout = argv[3]; setLeptDebugOK(1); lept_mkdir("lept/gamma"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); startTimer(); pixd = pixGammaTRC(NULL, pixs, gam, MINVAL, MAXVAL); lept_stderr("Time for gamma: %7.3f sec\n", stopTimer()); pixGammaTRC(pixs, pixs, gam, MINVAL, MAXVAL); pixEqual(pixs, pixd, &same); if (!same) lept_stderr("Error in pixGammaTRC!\n"); pixWrite(fileout, pixs, IFF_JFIF_JPEG); pixDestroy(&pixs); na = numaGammaTRC(gam, MINVAL, MAXVAL); gplotSimple1(na, GPLOT_PNG, "/tmp/lept/gamma/trc", "gamma trc"); l_fileDisplay("/tmp/lept/gamma/trc.png", 100, 100, 1.0); numaDestroy(&na); /* Plot gamma TRC maps */ gplot = gplotCreate("/tmp/lept/gamma/corr", GPLOT_PNG, "Mapping function for gamma correction", "value in", "value out"); nax = numaMakeSequence(0.0, 1.0, 256); for (iplot = 0; gamma[iplot] >= 0.0; iplot++) { na = numaGammaTRC(gamma[iplot], 30, 215); snprintf(buf, sizeof(buf), "gamma = %3.1f", gamma[iplot]); gplotAddPlot(gplot, nax, na, GPLOT_LINES, buf); numaDestroy(&na); } gplotMakeOutput(gplot); gplotDestroy(&gplot); l_fileDisplay("/tmp/lept/gamma/corr.png", 100, 100, 1.0); numaDestroy(&nax); return 0; } leptonica-1.86.0/prog/genfonts_reg.c000066400000000000000000000153041506303110300173520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * genfonts_reg.c * * This regtest is for the generation of bitmap font characters that * are presently used for annotating images. * * The tiff images of bitmaps fonts, which are used as input * to this generator, are supplied in Leptonica in the prog/fonts * directory. The tiff images were generated from the PostScript files * in that directory, using the shell script prog/ps2tiff. If you * want to generate other fonts, modify the PostScript files * and use ps2tiff. ps2tiff uses GhostScript. * * The input tiff images are stored either as files in prog/fonts/, * or as compiled C strings in bmfdata.h. Each image stores 94 of the * 95 printable characters, all in one of 9 sizes (ranging from 4 to 20 * points). These are programmatically split into individual characters, * and the baselines are computed for each character. Baselines are * required to properly render them. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "bmfdata.h" #define NFONTS 9 const l_int32 sizes[] = {4, 6, 8, 10, 12, 14, 16, 18, 20}; int main(int argc, char **argv) { char buf[512]; char *pathname, *datastr, *formstr; l_uint8 *data1, *data2; l_int32 i, bl1, bl2, bl3, sbytes, formbytes, fontsize, rbytes; size_t nbytes; PIX *pix1, *pix2, *pixd; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "genfonts_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* ------------ Generate pixa char bitmap files from file ----------- */ lept_rmdir("lept/filefonts"); lept_mkdir("lept/filefonts"); for (i = 0; i < 9; i++) { pixaSaveFont("fonts", "/tmp/lept/filefonts", sizes[i]); pathname = pathJoin("/tmp/lept/filefonts", outputfonts[i]); pixa = pixaRead(pathname); if (rp->display) { lept_stderr("Found %d chars in font size %d\n", pixaGetCount(pixa), sizes[i]); } pixd = pixaDisplayTiled(pixa, 1500, 0, 15); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 - 8 */ if (i == 2) pixDisplayWithTitle(pixd, 100, 0, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); lept_free(pathname); } lept_rmdir("lept/filefonts"); /* ---------- Generate pixa char bitmap files from string --------- */ lept_rmdir("lept/strfonts"); lept_mkdir("lept/strfonts"); for (i = 0; i < 9; i++) { pixaSaveFont(NULL, "/tmp/lept/strfonts", sizes[i]); pathname = pathJoin("/tmp/lept/strfonts", outputfonts[i]); pixa = pixaRead(pathname); if (rp->display) { lept_stderr("Found %d chars in font size %d\n", pixaGetCount(pixa), sizes[i]); } pixd = pixaDisplayTiled(pixa, 1500, 0, 15); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 9 - 17 */ if (i == 2) pixDisplayWithTitle(pixd, 100, 150, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); lept_free(pathname); } /* ----- Use pixaGetFont() and write the result out -----*/ lept_rmdir("lept/pafonts"); lept_mkdir("lept/pafonts"); for (i = 0; i < 9; i++) { pixa = pixaGetFont("/tmp/lept/strfonts", sizes[i], &bl1, &bl2, &bl3); lept_stderr("Baselines are at: %d, %d, %d\n", bl1, bl2, bl3); snprintf(buf, sizeof(buf), "/tmp/lept/pafonts/chars-%d.pa", sizes[i]); pixaWrite(buf, pixa); if (i == 2) { pixd = pixaDisplayTiled(pixa, 1500, 0, 15); pixDisplayWithTitle(pixd, 100, 300, NULL, rp->display); pixDestroy(&pixd); } pixaDestroy(&pixa); } lept_rmdir("lept/pafonts"); /* ------- Generate 4/3 encoded ascii strings from tiff files ------ */ lept_rmdir("lept/encfonts"); lept_mkdir("lept/encfonts"); for (i = 0; i < 9; i++) { fontsize = 2 * i + 4; pathname = pathJoin("fonts", inputfonts[i]); data1 = l_binaryRead(pathname, &nbytes); datastr = encodeBase64(data1, nbytes, &sbytes); if (rp->display) lept_stderr("nbytes = %lu, sbytes = %d\n", (unsigned long)nbytes, sbytes); formstr = reformatPacked64(datastr, sbytes, 4, 72, 1, &formbytes); snprintf(buf, sizeof(buf), "/tmp/lept/encfonts/formstr_%d.txt", fontsize); l_binaryWrite(buf, "w", formstr, formbytes); regTestCheckFile(rp, buf); /* 18-26 */ if (i == 8) pix1 = pixReadMem(data1, nbytes); /* original */ lept_free(data1); data2 = decodeBase64(datastr, sbytes, &rbytes); snprintf(buf, sizeof(buf), "/tmp/lept/encfonts/image_%d.tif", fontsize); l_binaryWrite(buf, "w", data2, rbytes); if (i == 8) { pix2 = pixReadMem(data2, rbytes); /* encode/decode */ regTestComparePix(rp, pix1, pix2); /* 27 */ pixDestroy(&pix1); pixDestroy(&pix2); } lept_free(data2); lept_free(pathname); lept_free(datastr); lept_free(formstr); } return regTestCleanup(rp); } leptonica-1.86.0/prog/german.png000066400000000000000000001323421506303110300165070ustar00rootroot00000000000000‰PNG  IHDRãgĢ§ˆsRGBŽÎé pHYsM&ĀÜÚetIMEÚ’eĨtEXtCommentCreated with GIMPW IDATxÚė}mŌã6ŽĩÆ7ûH×]ˆãŌF&5 q\ÚHænįG™d#OŪ˜Æ @ˆĸ$[˛ĪųŅՏ-SüA˙öõõÕA;Ɖ]@AĻ&‚ ČÔq4<ĮãÁ~ ČÔąSÜn7Ō41 ã‰"Aä'ŌWúsûŒtŽô‰>oŋĸÔ-×D2ĄoKép‡Ĩ%¸OŠ?Nî…_ÎōI(Ę*ÍJ‘Vžå‡öOāJ%/-J_äቭ§ŸHĐ )°4Ÿa2ëcPĻm5ŧÚūŠLžÚ噂X—ŦmĮÂÚę á3ĨLMŧ ĄîéyÍëÎĄļ¨"œkßâåŸņZ§Ÿ™ZN‰kæ3ĐņdˇČŌå’ŧ(äĒÕËɯȝßĨA™čÍ™ús™ÚZ?„n€ĻukķtpoE‘•?ŖĻ•[ŊŪj¸ 4éá% IINā}Lø/§ĩí_tũ6%\e- ŋ‡éãëë‹'ŠäđdŅÔŊAOZô gn=ņG‘—ËEũ.üˇzžg?Iü(ôœGŪĢËėáŌívĶ3=9YŌJQöÄOŊVô= ÕĘ[7y‘ŗS}FĘš\.×ëÕžÎ÷8™ÔœÜ5°Ŗļēwo—áQļū$‡ķũ`Ū÷§iëŌāõ ‘āa,ŋ¨žę2V)ÛˇW^`2xEÛĶ´DĻč3Ąˇ\>Įnˇ›ŌŊwø|Gō‰ŽÚđ+ņ°6Ŋ€ˇ îĐĨGä' @UED‡Up¸ļ“Š?E¸•aA‚ī=¯—(¸Ä€ĀËūËt~ūø‰§ępče՘ôĪ]_´üpĶ–owdęgbĢ5ÃHãØ÷}›k6™šx%DvA•övá؁¸{îöœXzÆž¸[-`€žßīęEëÉÔī+õqßF¨ääĪĩnIė ŅŦD{}Yŧ˜ŦHÃ3VWš]’Lũū°4—ˆžÚ^Åb&ãšŗ¨íaŸ ÍĨ<ްČü,í…ŊĨĸŪ”4ŠōkÚ_ņĢU¤7Ü÷<û ôŗĩbUî´ČÔīŒũg‚VSF(úۘ0™ü3!_ũĒŪ1‹åũ'ÖPãß^Ōë'ÍDđŸÉõĻ!9 ŖÛĻUåcÉ.О|dę5ĨjŸĒ“Ō‡ŧ@Œĸr“%Ļ$™ŅZJ4˜4Ø˙6™‡áÂc§nX˙ĢæķF’îĮ y5•RŗžÛąpˆ’Ŧv^wN¤ņˆŖ@/Ŋ5ŲPŦ`Ĩ$Č/Ŧ›ē:)Yį"kû&%;42Ô§@ĶęA%;ã§|'Y¤ģ‚?–ššÕ1+´uĀÉĒXėųĄ¸č>IW2ËaJõl,ŅhĸTΗú ũs†ŌæUhŊ4õ|ŽÄãŪõ̇Āî0üɇŽäž˙ęN§á‹đs9ņq đLįUēŠđ?} ô~v—P ° ? Ã#ĩ|ũU¸‰NĒö<§IũlŌŌ ŦDnķŲgÅõˆūdęMB`÷& žJō:yŪĻŧđ4”ķ˛ô€gŽRlˇ2šĖIŋ¨K†Kŧ+\¨ô+ĪōP1-Ü.lū1gGßŌ 3´‰îŦĐķŌķI™C€vęõM ŪÕlĩĻ“ėĻv›¯¸Ũnâíd­ÆĀDŨ”÷›ôĘ۟„ĨÕ5ÛZ~ŊņZĪ?/—‹DOŽ|ąļ@Õ 5Ü1´‡ęOŦ1ÚHÚ=¸ôŧ”OģĮ’S–Iä×;€!‹Öâ? ¸Í‡šķ j°é5J”ŧ"™|ōõ=­¨WK!9ƒĻk ZË7+ōjČ˙įˇaF)H{bj͂b×ë}{ņĪ™nĨt‰īĄPĶúņ 3HMZį'[Ō“•Ûr´Ī ûz & ģŌ62PK•JųHÃ„× {dHÜSĒ-,' õSÂwhÎ.Ųôj,~;ī&ߥĢĀN ļŊÛÅG„—ŧčŧģÅÂ^†nč8NĨZ-i˛o]e“ĐnInS$v%Ėšĩ$1gdęÍŲĐRŪee×ʉ7›ĻËĐۘ„4ŸœųLũ,yī8AĻū8˛Ū­rŊ“^˛1pa#o§&2õ“”Ö$c‘›#‚ S?›ŒHCAŠ ‚ Ū Œ|!‚ SAdj‚ ˆz1ë)™š ˆ °ūÃ.ōj-}2‹mmúÜĶétÄ;瘟š ŖčŲ0ĨR`ž~ģ:ų˜ÕÎĨ_x{ĄZ zũ›ūJƒûá4s–^–č/qÖø)ŧ•¯Ž™ēë:ú~Dg)štŅ•"ĨkÉÂ?߀G–Ŗ&ĶŋŪŌ°üuáŨöÔŠ?W?ÚÔ{zāk5!ÔĄÇ!^_Ÿ×Ī“kÆ|9^cĩ:]IAƒ¤WĒБ‚ëQŲWpÎĻ;ęÔĪŖHû§ß9Úí x–)ėŨwá´×N§ūĀ˜…‡~s:ˇ¨ĐSÅ{†(Á…G=%%Ž‹&>‚Šeøa ī ų7|Ū‰fŪ,ījØĶ|…h=5î~Ėŧ‘ėL—ûK4°Œ~žÔ!§īĐĘ_2ũ×,a %õ-Ô°r‘ =įrˇ_xĻۙ¯AlËÔGô§Ū:—Exˆ‘øu„›Đ] اdqĒ4žTū°ž$A‚8*Sˇą$lEk4Ŧd°Ph'âxÖ0튭Āzqx7 šö ŽŲА͛#^+GdęvpŸKąwĻ&‚ VĶ*AŠ ‚ 25A™š ‚ S*ßÁŽx{ÜnˇĶét:ÖnŠ™šxčÔø ĐÔtËYUŠYōõ}oŗo‰ŸØĪ×ŖČ큃.˙tÍęšæØĶp3ĘujbMŽĻúŗÛŅŅ$æĒąú\w͐ô Ģ܇-% àz:iš:õÛNKŸ[9IÖŧĘL°×g{“›q˙vģé‚ĻĸmāÖ—įį¤ų‡ÜĶ™úĒ“gĖaŽ×ĢĪ,žpŠÚrōôĄŨÎŋp&ëåĢ,ĸōÉQSIÂęËyŊ†îĶėŦKĶã82­/3>ô}_Rl‡ađĶ>ŋ0ûUûߗc]%qĄ`u!Ņq‡›[+SĨ?AŒk˛ã.×*HĶÔŠŸÛíĻÆŌuGBÖj¯ĢÅB˛žŧčˆdũ~ĮQwũŗkōIQîėõķ[ŋeųFAĢq K°ö‹¯w‡Ŋ„÷zŊŪī÷äĢ˙ʓrWoŪWžĖļgvˆûũ~К7 ‰ Āų|^ĢÕäĩ°3CĶ™ČĒ6ázŊ.Ŧ­-\ĻL8qęĢú "´5Ū™Ší I$DÄTK(ÍÛëõZ37îßąJģėV)6,dušöŽUūÂr@T, >GkĘ U %]‘ŧĸžæžĒ â͙ē´Ē‹$‰Ō$ĘBB֓ ’Τ2 gžNËŅËį§° L'éĸį˜VŪÛ Ŧ%ŧ°ŧÖ%ëPŽēTÛXs­ÛÁUj;ĢÚڇ2šÖZ?ˆˇeęD‘ņR$;Ÿ ˒TŗČډ$õą*˙’úUd­­tIYĶerá+|ąËIßKŠÜ×V” ]V­E¸š|ÛeËXißKĒDĩšL=1­ÔZéąËūÕāl ލUŠ"ŋÜzč'ÕÜb˜äįĐ{ËĩĄ|ÛŪL‚Ų+Jĩ]eoˇD„@’ũk93z1kû­?ãYËčOĻ~[쇕6¯*z˛ÍĩĢÔd ũÕØgfW¨@­¸ĄžŦųríĪSör[0(­+*Ē Ũ2u(ĖĢ0csm­äčŠS“ŠkŠÁJ[h,![ŦKD6$ĐpĢ>Ģō‰ß÷ZöāžUĖ—:Ä~Å]BRžą‰,=M§ļŗ-TË=.VaęŌ0dę"9z9öî@y¤-ÜD—ļˇK&gi!YËîöųræōÖyoÄ_…Š“ũŲķ™ē¤S‡ôŊJm—čÔ2"4zŦ…w‹QôÁ,51 ā™?Žã0 §Ķi};°$”܇ĖÁĸŠĮ׏žRš}×õzmųŅĀ}[ą#V|Åî÷{퍅Ŗŗb’Ļ-ƒnÛŪ–d•Ņéûžīû%’C>+—žHa˜Ü#ä÷0žücÃĸ–”ŋbRæRHĄe¨ûũž¤ļĨßęJöǰLŲ䁈JeÆq}Ub;ÄbBdh"™z†’ ˇŪ”!7qؙ1^%ą|e Ŋ;t]ąVl8Ö[Øp9Q—Ŧî“5‡ū) ˇæ~Âĩ5dęƒ@ÂÕûvģi:Į’Ąŗ2{ŲkˇÕRíU4ž§ŦbĒ^Q‡˛õÜčČW}7Ĩđđ> ļi¸§Ú+j„-¤ī{áĶ…ˇtú$ėÃ0Ô ­]ėęžĻĄ“‰iŧgŗĪ-ŲÆSaŠ~ŠĄ*ŸĻŽšäUWšūfŨŅ/m†æ2u¸ŗ‘ũPŽŌ mũiˇ#afJč[2õ§3u˛K4ā‘Ēą<Ī™u(\RlRˇ|Ę5Pj[~ÎäՖRváOd“ž é{ö¯¤~yžr ›ĖųdhöÄ|Š‘|ÉÔķ†įEz‡@ƒ¤a;šp—,˜ËSH=Ų„Ĩ “tCĢ+™ZIŗpkhēôÛuiēĄžÍ6…’đ4ũ‰zô\üíĢlī{'€{PŽĩ\˛Đ#ōtęg }{:ü&%ˆÕr˙ŋĮãNÁ:įķ9q,[Ū´į;PŋĐ?uĮ¤—x->…Š­ƒ§§lĢM¯BLĨÕâX™kÖãņÔW~qNŲt]ü(¨{õvŌKŠ_C@V×Ŗpoē.ZĻÎj‚ ?}`›7ĘjOÔt¸Rc˙Zéi¸ŧ‚COĻ&öEĐBĘvKϧũO×2zīͨM‡ÛÖ9$k25õš}1ĩ\ü1ŽŖĪ!‰JÁԟf"+Ox†m>Ų–Ô% )PČÔÄįF%nˇÛ$>œÉ6Ī‘?WäĐīY ģÔTØæ)$kw*sņ‰'Šī¤ÌzĄ{™MÃļâ˛ņr‡šƒzėąádjbGđž¯š`]GBå‹ ČÔA‰]đi[Zú/™š SAĻ&€™o°Ö.ų!čęŊtŧ(kį —ŪĮ15;Ą’Ûn=ö?ņ#ĨßnqÍæÜĘSBČÔQKsÍ÷yÃÃŗ~k‰R’v­H/gáĢܘLŠŸGû”×ĐoÚkĘĸ…ß6̇ĨI œÔÃĪwÅe+VF35jRĒđ]•wچ]ŨlŅfŽãHĻŪ3čĨ÷â°ŲŨ’iœōã¤Ä7Ė+QĄŽ\2ÅÎuēÕ5ÄI•9wBã¤Kƒ›/i EĨ(íÆ+i¸<ɚL} š>ÁŌ2Žc‰˛-sų=~â–[WkĘIX Ą*ûjX2-ŗ0 Ž Sŋ-4%E˜?h wOZũmŊĢH6ƎÃqĐdákQĄ‚LŊĄ*-7’x‚ž];Īfš’š ‚ S¯LͰ­Ö­4÷ŅAŠ ‚ ˆy`Œ"A™š ‚ SAŠ ‚ 25AAĻ&‚ SAdj‚ 25AAĻ&‚ ČÔAdj"‡¤ßãÍĄ5°y ßĩ§Ķ‰7ÁĢ€ˇs­‰ˇĖŽQrÁ-úJ×ČļÅr­DÛvęûžIЈå`.ŊÃSŪ֊á0 ōIŪ}ŋß÷ÖaFųV=_ëŊ?×ëuų–čršŒãøõõ%˙Ųadjb‚ ”GÚŽ­›u_ÁÂĩAˆÆ~r>Ÿwĩ¯ƒ°¸^¯I?ßžCVŖķų|ģŨ–ŗĒô'ƒvę IIJjß÷öčaúžoۤέ@ÛÅärũ`‰Ua;UZiú|>_¯W˙Ė0 ÉɁ˜;„Ļī÷ûē׌ŊŊ!ž NũPí,ŋN×ö˙ē›eģN4(×B4ĀõģRO§“Wķ“û‹Õ˛!Zļ îrÖeU[ō,; A„ā‰âVĐģždÆĘ6\>Q˯nŽĢĀrĸßŗyŨ3Ŧ,KÛĪĸ_ëpč"šOî¨VQŌ}˙kÉĨ+= 251ÖĒTbĩ9y@'ØäĨæĪam5}4Њ}—´4'”6ŠQí8aÉÎŨ1¯z.ŦŽö~÷°Į€åĪĨĸšû$íNr´lėNK7 ļÚR™UėėÄņElĩœ^¯×ŌW°=ŋßīöąûũŸ”^t>Ÿįūö~ŋû_ ”ŖĨd_1ũšmš4JŸ”?áķųė )U#Ô°T+Šŧ|k?ąŸËWv€î÷ģÔęŖÉ‡:vaõápD|ĩĨO‡­hŋyĄ˛ GŠxŠ7„Nڄkt^ŋÃÎ4 Â˙Œ™Ŗ~)Ę~(¯Z,-đR­6 ôŒ"°<ā NH ˜hÖ*čŲÍ6ʇ'2í: tûs&ĪžĨ†Īōiø|> ō+čąp°HÖdjbf˙Ļ3G¨YæŗĨ ā>Q¸€ī”tôÕˀŊr]Ōč“om+Ā!D^aĢŽđ"˙Ī­“Ģ üĖYÃVĨ5Év&Įãū#ĀÁkGfRōŽ+Fë‡Ūû <ÛĀģ+÷ęS˙6ë¨ŅÖ-ėršĀšNŪÛāXōŪŗd-Ûā˙g›ö°mÚ\GCđÅ,ũ\*Î$ąTŸųÆŠdęįɐ…—-Ī)ĘŨá´ŦJK ųžÁØEÉį* ŲtFY'­ŋ˛ëw¯–˙Ā BˆÍ$™Î›đĢRųîO­šdjb+- TĢÎÃúįkäģRAŽ|—m¯đNMŦԐ{I? ų:Q–ķõunÅVYŪF%"SëC@˜ĀĄĀÍ =ˇô*×ŗâåŦŽéŖø&YŌG~įô]Īž4hsãu&×ĮBN÷†ŧ@ũÄģ7‹ÎZ-ˆwŖÉgëk[äÔWfŠO‘›¤ũ4†į×mEBĶsß5WŊõų=:“W6,ŗ-äÚ[íÕĸ1ëÚØŌˆ”>×´0ē BõŌh?”4[Í)v ęÔGĨéUļįž›ŦZŊúß[%hR ŸÕĘJž„0WF¨ {C|^ĪÉvõ}Ú4šJ¨ûKåCŽØ4x°•ąú{¨ÛĘĨ\ZĢqíģīûŪ÷€lŗdŖ w}Á žĮ4›Ž´TRė2™™úŗđÅÄOfģīļûkå‹ŧVJ—vIđtcm/°ŲŊ;dū—r šä™ę Ú’ŗģr‚ËhŧÍ'?Y’o•ō„LĨ'sƒƒäÕ˛î"Ã0@XOåGY>×á€ãJĪŪeģŨM"o:;īÄÔn„ÁKWãYüđųHô0`¯ä/ O†Äõ‘čĨT˙õŪ7Õ.E`Ī PĖ#š}đ‹<æĸEé'ĄĶwØ.P~åøpÛ˙>RÔŋ˧Įę*ĸxFžk2ĩįD›mÃō˛į& Ą$3\)P0‰¤đšĨB÷Ņá!%ÍMÖa‹ #ũ’õĖ˙ âÂ}Ôĸ¯dČzaŠģd™ ;­´(úõĻ+ᇂąfv=251/v.Oī&ZķJ_Îé–7!íĖķPĶėĸüy(`’Đ5\|p]Hģ•ũYĘ;šøiĀ[äáq‡•O^ęs†¯ ;­´„Ÿ‡—•9r 25ņUCálĪ+ûŸ÷ų̐¯ŲĢTš¯c’y!Ä9”Į“î°ísĶ3ÕPų¤%¤r*А,IŠßÁŦ(%JŽ!žŌc5ä•oŪa=HØí\ũöß…b?āˇÛzqhĒ !bđ¯Rˇ_yLnÚÎŊ$šQWxUÄoLkøöŪ¸Ōy¤ AĐKī=™Zčī~ŋ‹7lÉÅŠĢī{áˆ-ÂjŧW\čŦ×ōÂßĀŅŌí¤i‚LũŅ€ Hē¯Öá'p„T|ÕëšT‡ˇ'kģĄĄ¸dęC)CéårąŽ> ęvõ‘÷ŽãØ÷ũét’h:ņF€:´]~Đa’ %–Ø-h§ŪœÂü¯ĨB*ĖmĐ[[c‚ SAŧ hũ ‚ SAdj‚ 25AAĻ&‚ ČÔAdj‚ ‚LMAĻ&‚ ČÔą[Ü Odj‚ S™ú€\ŗJæŧw%Ŧœ‹ßAA"ČԛL?öĩ튅ōÆl•ô,r6š6A|ūįˇß~{Âkž}ûÆž†ŪXŌ'ōÛ?ūøã;Ö7íÛˇoŌä?ūøƒéX‰ÂOė‚'c-ŠyWǚlj‚LMŸ˛ÔāĀEâ`4Mš SÄļXÎŗŸp]úÎŽ‹%™šxÛy~š\N§Ķ*L}¸†úÖsu4ēŨnrKōívێŦ×ōk’ž›MØOĪ”×ᔝŖƒ´äÕP‚Nš7˜ ¤]kų} Æq\‹gŸs¯¤%åŒã8ŽŖē&īRBÜÕ(ë<˛”ˇQ˙ßnˇaēŽģßī _Ą"÷&øÚ×ëõzŊžĪįķų|ũųę~ŋ¯õ–ûũnÛ"oŅ?Īį3ü‹įîŅ IDATGū?ëļpč:mŅē¸GŌXíØ*°–lĀ­Ōi2š+JQ"à “RR”vÔFcZzéõz­īÉ'Û$M†ī9ĸōtۉ¸Įų;tĘ-Ī•¨šRCVœĀ•D6vģ:Ŧĩ „Õ^ĨĀ­M_´dž‹˛"ëŽ,0“’öLĻžĢ9U.ēV-Y’WhoÔHËd?ÔTûi‹ú!™Zģ[f{‰_–ĪĢ)Cų27@×ļĪ×7ôtŅA@Ÿ@”öÕڐĩDpV9sš…ũcņĻž|QIáđŸŦŦ ĖĨ'ũfËūnÅ6ÕĀ€yuARá”?Ĩ‹&UĨ|ĻķąDÁ25 2đ <ŧŨÆôL­cäŊ/ũŪŦĒL(xåËĘA"îá ´R˛ũÕ°Æuæ04ÍË+ˆ¸Î54ėKfũ &•ū d1ĢĖ%Ē@éE —„œUŗō$åßhetFûēMû$_~l“Ĩ’s7ĩž1´ąV<ƒ­C;DĢ'XĸoØdŋSëLļĢ(Ŧ¨kŦa]jmĄéĒ´ņ´ÃœŦ+°Ņ“?ÍkĐPðĨ5vFË&VLũvf ôd›áøH ZĻųYlĒ%Zŧ×ElZ9¯ė.ĪS%ŠürįĪéĨ?;jVæU¨ė‡ō'Pg}'Xõ<B8‚O`‡”ķAL­ƒrî%eD5†ŊIÍōĢåXQ°“ž‡bÃ1ĸ/NXĮâ’9ûGŋ9˜ËS ĩP=Û-áŌJyŊp‡ŗ˜ĖbáZâ7ļOP‹ÔŌå-NR`;dМÃĢ?ģ.‰–}oČM›25ÔĘĒĪ:d ŊjĒÎëfŸ/ÉĄŽĐÛvúCįĀ´zÚÂļSĻŠĒdũ()nõũēĐ+0u‰juI(ą•J˜ßXC<,ûám!SCgYŲ´žđ ?ũüÃĄ ŧĐú¯;_˙ wŲ!YldĒ-$ԚK=Vŋl'DŖĨAĪ”…MOPüöË:J;Ũziyg%ÁOád…ІîŨÔ˙m]Ŧųĸî–âÆXâëĐSÛ÷=üļäVyš\,­ƒ­u|žtõõU‚—Ūn7y‘­į8ގÛÍę2Ö§[”‚ŸPũ‰üįrš@oȟâåZé{ Îæōgž æŪĩ íJŧ‰ĩEs}uĩ7žŨ`ģēŪWW$aR­ķĩ´ËyÆq_ã—{ņkClMŦ†Ņ0”õ\VĻŲ ģm<›0ĩŦo–ÅDŸ d0´Īįŗ R:ŸĪI× kX˛.ÍaĨÚžīuøûžŲĐS[ØR-?dd‰‹Ų.@cknōŧ0Ž ‰›’ë[$$õ“y•!ą¯žŦ°ĘļL„šÔnˇ]d§Ã××W(TĪ Ũ„†ØW—&leõōĮrV Ķ ĀšąbøÕ™Ú ¨°­íˆčƒÎō\Y˙.í}K ú ?Ĩ‡ađĢĨ!ôĶÕūD„CK^ĸĢ6Ī“6Ŋx•rÖbęå=V3÷æ†)‡Q¯!k‡a×oUÚHЇČ._š[—.|fŠVõī˛OĒ—Kl.ĨWÛĨ÷ã˜Zzm1e,™r53PvŨ•¤Ųî(ELE/‘EIˆáOär-eyš %ÔoÃˇŗ$=ŧÄd”ôjß÷}ß׏‘gjģ K‰¯īûad×" ¤ōe‚–3kā*æŪ0š}ߟN§atAŌJJÃŊäršLöŋíj\ŪiŨp›Õc‡Č qÚb*ŪnˇæÆĪ•6UlŊĄ Œ×Ö$zš\@RC ˜;ÆkqÜZy'*{uhŽ˙UCļ“}Đ[?B ÔŌĸđQŊĨžô'v5Ĩã°!bY–ĸžßdúˆ&C? ÃétŌíëėŽt;%Ņo†Âõ6Ũ÷ä'š1ēNV;ũ |Y`;@ō!ØŦŽbžū/Vv%1Ö4 }sƒ¯9JîwÖ¯j^ŌŪYÕ×Jķ>‚ā"F”Ėōũ(šĀްæĄëk„ū^pV>Ë ,ô‰—pxb¯}‡€ ×÷¤8ŲĄÄqÛûyį"{H3kŒÂ~ŨēáÉY!éŪu–įbؙa€˜ō@ĨØxy¨w´ ÃpBgŗ§ģîԟ,IxK"ŲIī×Čˇæ„˛Ú`Ī€Ą[1ˆ])ü¤+e´Ež$î´õąs•L ޏ°%r߯Ô%äÉ:l¯.¨žšę{¸r`Î$öVâĐyqnxˇ' Ŋ­KĘM}$írīÆ$"|-˙Hߟ%ÕDæoØcĒHyĪîz]đm#_<[)4.˜Ž”1 _ö+=¸Ą>^ ´ōū[ fĪ5ĨeÉ(Š´ÍĶ ZęÕŸÉēΒ…!õ9+J‘Ü•ŧ°0uÁÖi^üëšÛ[Ų!•;ŒbÉJā—á%oęVīĮŌ.ƒ+ˇrÚŨũ#¤o?’ŅĻūŠ‚ŧà āŦL’‰Zí÷w¯âŽŖc‹œj‡ÎĐv ]?ą S—4ëĐØ{¯ø´ņäw^˛rzsØĢ„{‹C…ÁB…zŽæ{”!M û*äģZîi`oúPU:÷dxÎ]3yüjځCN°ũāĐ:5AĻ&ˆOY;IĶÄĶpb¯bēwŊŲ ČÔÄ;āvģÍĘ S™Ŋan¤ûPĄ&ž‰ŸØÄ3!šVēŽ;ŸĪĨL吨A8ą”BVĮą-!8AP§&ˆX-å&”+|ëŌķ]× Ã ė/éÂÔkėyâ=™šÂM<ŸŠCÛÂív oŨÕo56Zŋ•\¸ņžLÍ]ä'#_§AKÕ?Å@QšÆkxÔ¤q9šĀ^ŲŖi‹męKĄi 3qx0L“°yé|Ž1HቴėķđÃ<2Ū&›ĩ‘Íļđ$•ŊVS$BŌ•…—ÄÄ~ĀEâ?wåH‚vkV—aÍX—ûÁ]eúŸü* š×*TáŊîŪ\Ŧʲ-g5tˆj/ß §S­&ŪĶúA|@†‹(áŠK `ˀĒ}׸ʉŅCTæüBBĪæōCŊ_Mj¸ŌI¯Pá@djâĀ€‹ŽJ¤^{Ļ<.r ˇĘŠÎ›[ĸŊ~ųۊ‘y6NŠ‰÷W´KÜŊä‚Úp¨D‰yÉČ™šøTjĶĢeŋCŨ… šdjâ0 k’“cĀކŸWˇ[*ÉZļ‰]Ĩī{’5AĻ&Ž đģ°˙vÎjĄė9É}âĄaËąQā9Ŋv&¸ŧ~ōĨ­Ģ›h@š2tT$‡Ú_šëĻíˇđaîO ˇ}ÕŌū:M{Šą>Пˆûˆt?ĩ~õi}ÜKÅ>ÔŠ‰NŨEÍ´ę-xƒ„z¨Æs KæZ›8į õKišvœŧZˇÕ{DŲu–.ëŠŋŌū=āfˆŖā~ûí7ö‡ã—_~ų÷ŋ˙ũķĪ?˙ūûīßž}ëēî¯ŋūúå—_ūųĪĘßž}ûë¯ŋūúë¯ŋ˙ũīŋũöÛĪ?˙ü×_ũūûī2įŋ}ûöë¯ŋūōË/úķßž}ģ\.ŋüōËĪ?˙Ŧ¯€ũūûīŋūúĢ­ž˙äī˙ģüüršø_éįŌ[1 œŋīš ŋ ž}ûöQí}'đÎâã i›ė]ÆAĻ&ˆ}á…wĖD˜÷ƒø,<^8@Š‰÷a4ũ˙,^Û˙5ę4zdjâ Éú4PjĶ™šx43А VO÷ĩ+§ģ+ņŽû3 ö0ō…s‚Ø\‘›ˆôē!SžŠŸFÖõŗĨ91š˛}ĢDö~žŌĖņ;¨‘Š‰˙NŒą Gô}_Ã6Ōs2ĪÁ+–ŋq•:ĪŊ!a’χahøĮw(‘ ÃpDÅSâ?ˇ™lč?Qã(Š4÷Žû1Ož\>+‘ŪdAQRC_úwŲr–ßŨžŨ\°Ÿ×Ëö’vUθđE:gëe–ĪēôcvQ†ĨƒAėôĢ3›°mkĘķIJáŦ™Ųœp˛ōWzŸĄö8í…a+gšĨ)Ķb˙ŋ„mjĶp$ĨZ̚Åf-‘XQēė §%7h!6Ŧ(=Ą$C^Y?^öˇvō†Ŧ ëHB)-LĨ’pNJŖ­F(o%Á.=˙šL]˛C)ƒ€Žæ•‹\É­dę%C’k7ļ5ĸm,I|Žęd=ŋÃâ!­k8Yϧ˜iĀ Éģj–ųy¨A—(,YJ›5Įĩ4ĐY2–3ĩ%ĶP—ĐoK‚*õ÷‘ũ?,Ėá2ū)õ„ÍFÛ՘ģœëJãETx]uė7ÖÃ0ur\ *6h– ō^+MNŋļ‡úERŦ§ĄPüf.S—~j‹üiģĢFy´‚čSō‡j‚ZĨüL“ŅŅįĄĶė…õĻĻūJ:ūö€Ō:\,ã‡?!ņWäÕĶrTĀ,˚ķáļ>ą\lĨøŽ¤îX†˛Œ\bj 뜩ũˇŌ“@ˆ“WOÔ@Jܒ¨PáaLiĘ|SÛĐi2äį?¯ŧˆXBŅW[QĢĄQHBŸh7Ą 7 N(a2ų+f>ŧŅž.œ<ŪūŸÛįĄ@ķ|ÚU\S×6'T”’uԓXQD8KzÖäfÎ6ŋM=Ŧdę’2ë™Ú+ŗē@Ú% zÕŽģöEĨéP˛~øZyãģ_×įЁßÃAŅ…–7í"[íY;ãˇbęd§Š g᜾m9žƒB-ž™@Aô„5W‡ ƒF•¸Oš &¯A{Qkė—íÁa—^˙arj¤'Æ56+¨°-3ä EÕņíĀyŠĢ=w„Ö3~ĨõŖ´—¯ĄH`[`dŋ„[:Ī_ÍLvrSũx+(dvAęĸĢŨlWĀt>„dÚĢÆá* ŽĄ .dØÖSW˛›ō‘]]A˜`°˛8KÎlų0Eå+čO1õ¯Hlģ^ˆKķÍëāቨ{`÷°mœė.˜{ļz%J*҇Kōįo÷ēö!Ŧ[EžØhĢËå›DųD=+Å­ō~ŋËķzy’¤ļŋ’Î_pÖá?M-­äŊ+¯}rÁW_ˑ’å̆P+аŊu“KuŽyQŠąöˇ>Š6^áßXSë+˙ŋŨnā  Lé+;֏ĮCū†Á+$]ÅŊæs›æ aƒļ]v†ŠT†2ŠD…ŗŦ~āVō?YÅC\ ) ­N;lyH¨Ņ!ÜŠWfjŅhl´Õdļb‰—ķUŖBą.ã8Ât­É ’¤k@‰åĢqûž÷Ô0KÎJSŅFU7͂Søæ„~IčA>ŖÄ]]>čĮã!}+k-ô˜üGFtD äÉX˜6žP‚ČëÛîĪõeBŒ õ#’W&Ŧŋr–×Ģ–tiŠ&ÍŠÚnŅ)Ö'œīĮÂĘL-j7w–7CŽ€û°-Ąä!‚ ņĩÁŽÕ ^ĘāTųj߯nAĒūŧ7”âåĨ^ĪÛ]5zhiÖYڝ|‹ĩ­âė)[˙´Â3ˇ k­UmũY*Ęa†5´[mž†wÂÚ&Ÿhá67ĀäÎÃÚ-‹Ž[%Ō/]÷cŪķYŊ'KĩžZ7ļŊ o^Bd? ÛŖĪbj‘0I(ĄZåh?Ŋķq 'šũ•}E5Ã+ wž¯žîåg)P úŪ€üēƒ’č†õ[ŨƟčôŽyW¸oÕtkĨÍ~øgžÉëPc™YWOˇd1 Ãétęû^9ÅnÉũrk÷úLß÷}߇k›| %‡á•ۚ$UÕēÉȲŋ-A+™ôĪÜ]ŠŽ¸Œä PĻV›Øét‚båC;ŠõŒņ0úõFÎÔāaęŊ_ģŊĐüaTWđ–í DsOáĀbŖÕΚJG ŗbRēũĖÂNķūd>îĢæ8×ûŊAĮz7vũĸšŦ7qčę Ž7áņzÍšM8áĻ÷éC6|ĄÚÍN„vt×õšãĶPš ũĘŋĸX͒“Oéč5įŒąÂ͐Vâ@ŅĖ Ã,ŽN”oËÔáæw’”‹M˜‹Ģ‚‘O?ëķnčž\V6Ė\Į)%iö6 foë†ü]ËE(Tũ*CĀķ6ļÕz2}lšˇú5˜ØS‡›wĖnŽŊĻéĨ_#Č!ÃC3_”žO>ß­Ė­›œs.S>A&öƒMnƒWņm´Y˙õXߞˇŠ{–÷Æ …mhL× QķüÜĪ?Ū5žûą 6djõ‰ŋ}/ŲsīãRJœO<Íkˆ@ĪÁß:ßx)=ĩ<Ę!AĻ&HAėŧ›œ˜ˇäČAP§&^ĖŅI,é Ų'AšØ”Ļģę,Ŧ“™í‚ NMŦ礟NŨ÷Üx9˙Š'Ļ˙îæûöAĻ&Zpš\ÆqÔlm Y §[@Æ2xo€'ûYŅúATAŌØ†)4põ‘M!đxbĪ“å™jujâŋÂ'’g5YāJŊWԒrŽĄ—~8ŠāĶBMėŸŦÉÔÄ wŽįš,Íņ|Š‰˙Rđ0 ã8ĒÃF¨#‡ĒŽ˙p!Ą‹' … ČÔDLĩã8ęŸęÔĄ÷B€šClõ–Šš'å]ōRÚ@‚LMü—ÅôQɰęĨ§įō‰zõ ÚäķqO§Sb`>25AŠ‰ČwGqŗSŠTĒW´õm2ž'‘?.H•4m‡Ŧ˛á5bā OØ´Ķė"t˙h“LũĖÕמÔîBrŅŌMáŦˇčē•Ļ-ŲVI{ō™:ܒXČČÚ˄}WÍđØKW“tÂhĢķbÛë7Ę_°ĸXĨx•EŽaô— ¨N?-Jûy–Í$a.ĩ{Čģæ2uŠđSˇ18t#Ŧ *Ā5ƒ3.!ĘŌÛgYŸ@‘ˇŋōÄ ív!ˇ;Š`č>ÚPüæ^>TBĩæ™{ŽŊ0uhvĀ>ŗúRīIÖO%›xí~ĸ––Yoû:ÍJ^Ķ¯'n-PËņÖĀpĘK;Ęp1IĮ2ĐĨÖÕ´Ô¯I–ģķšÔPRŗĸām2!“†l2ËĻ€-Îî'âˇ_^JĄÛ­:Ü0Oũ–Z~õôv—­ŋÂö?:ĄÖøåŽ@dā^™Š= [ Tĸw‡Ļ+ŋö*!&Boôĸ_ÚPZQ(™ouiÛ=ZIõČ­“Ę;ŧÂętļ÷ÂãR•lķKģ øÜŽŽv"%ķÁUũ'ļ&ÚįZfé, Ä MEđ”ē-´.ÜņĖڌ–!)­ū€QÛ×SΟŊ€Éc ̚'ÁЂ7ŠQYÕÚVžŌŠėãũ“dę`šƒaš‡ėõ|ĪæŨęÕyO4Āŧ%3Ėíp1(é,žĄJR29“õL<\ųJŒ kRhXO˜ÂĪ ˜6^ĻöMøŅgj-0{2…ļەuîNN—ŊŌÚÜ ã5iŗĻ ŋbY’õKf^¸í"¨Ēv‹§T îzû@éLÛëdЍ~cĒz†ßエ”6"vgPŌĀžāˇGĻĩ7W+ü"Ëxbøžĩ˙ōå{ųĐ¯ŧÁÄ"ajĐģáŦ–ąPĢ×ŧBēņLí‰ĪÅĀŦkeËņSĻđ;Ė´„SÂãPØÍ„sę }kë ŗzY‡= ōįĸŪ"TšŸŠß‹}å‹Yča=ųėģ™Cr‡j„‡ēĀÔ`ø*Š9Sëé4 Øvöī4˛ōí\)ôõõåCEāĻT°äŖ•,÷Ųr”}r'v˙­\ôgŋŌWëįöö)OôID†uŊ^Ą|đÇ|ü >ųöōĒđšA)JâbôjD{?‹ÖS/aéž_Í%Ą4úĄ¯U uĐä|v¤jØđ ŒŠŊ3Ė^ ŠÖ÷Ŋæw•ö6‡ä”D´s÷¸Ī PŌÜŗáUÂá$š[sf ėZ=†{n¤I(*Ĩ?UÎKo‘æhúÂKŗxŸØęE¸ÜēĀ/číy`ū—Qy<÷û=īV¸‹OCĶ[įvXōívŗ3gRõÚV‰Ą˛wYåōW)°ÔĨPð9á¯"Ä|´˜ļhĨ’&ë0‹Í!dYWÕ­ÚČē˛&ŌüJš†‰Đ™fõOs[&ûĄĮߔt ũ ÖšüŊ“} 3ú9ũyĻ–›÷*Ų'aF˙Uƒ‚&l¯P ĮL4P?¯JÜZ šĸ;ŸŽ âbįåÔf¯ĪįRBIã8„_2 Úz{ōvÉLĸąín ¯QA”v—kŠ5â×đŊsRođKČFcZpŠuĨ,KĨ—žÍõöë3ĩN{?u“!”¯ė­ũ¤-OĐÜ߆| åĖ­‰ĩ‡äLW9N§“,<×ë5ÉFRÚ5'•Id:—ukd˜ümÛ4ί”.Mf˙F/Ą…GîY/•Ŗēžß¨ųuznîČ$—Xĸl{k^!ʓa*u`Ūą“ƒ%[˙.¯5ƒúŦYœÎį3Ô6¯ĒŨ$éúž¯Ų9í=+ČFAJõ‘ĪŖ6f…“%'0áŅVé| *!öÛđ%Ŧ3=Í Ģķg­“^zūĖ=Œ¤‡úûCWpą(y>@ąĄo_ŪRīËō‡NIME+ĨĨ“C˙•%S9/Â잺s}(ŧ>ī“uteW×ʀ[˙pxāÖÕO°íamĄÉ%ŋ=ŠI(‰CgXsđ/*9×~Dä 8AÛ~™Œé(I6œãįr2áCWŦũˆIž|Dl(Ą›ņ’į]Ų*OđKM͚oqÛü!%ĪHī –ŲōJ3§ĻĨŪ‰¸Ø3~Č)ū]‰;PņTúyų××,`•ãë;*aꚕ äŖĐŖŽä2Tī:ŨûBücž~J–b͒ōŊ$3÷ŗ˜:T́ |?Âį'yÍlßkĶë€f “ÄĢáKC E'TĸCūÉ]‚ĮĮ~Pũ|ĖNÉ'ŨÎd"QĒ6ĐeW´2—Ša+Î펂ä]øŊįbåîMUPBohë_īÜ6™i¨+D*Užĸ”ëŅŋÎ{pÎ%˛đ]>´Õ úxˇ’Ļī™:l)DáÎŨ1ŧSĪĩä–gB'ëIéW))\$ūÂIeÂ@á<듏šĘ‰Ļy,…ú™xø§û„m0m|ȝ7Ē„Ļ“ēhUų„Č]˜'—ų<RŗF@ÍW r {2ĄËå^Ā•ų ^ĀM‘攄É,ėûS¯ĪÔŪJ•$ę,…tw… sĻô+˜ ÉÜ.M›ŠÃ8” J+|ƒÚ˛†ZæĒB¯ĮYJâFoŸėąWõRw„DB+ÂįčÍ?¤7ļÍĨįuL=*ÉUž’Q{#•Ąáįá Ue~§šÅĐÖgĄÛ—ņĖĐN IDATDžšŠwÛc['VŨ!ŦY)Tz>‡Š×ŋKË˙/—‹¸BÃY"Š|.üĢ&oų‰čãō8ęi âmY€„;šįîáCŦŒ|!~ k=-“´vąAŒō˜rˇ>Đ÷ŊØOĀÉZ^ÔĖ-OÂĪ…ž…ĮĮqY†mĘY/؂æA‘Üŗšx6ŸJž&ÍķąæĨΜq×ëõ‚ũĶsÖ+äēŨēúx<āv’ŨĸĄžo›ŗ‡éyZrÖęP†ũ‡IÂŦJAJT4w qZĸŧ—Ú2ˇæŗR€ųibĨWßūrø×ëÔ÷ûōËÚĨĢëBUWʗ;G xīÛh‚ļKĨá 5†A,ŠKGQLžŗ%ē^¯Ë;D†>‘2u\–(§RHRI˜šĨō:hUå]"´“=ãPÕžf*/‚Šé ¤&̌ÔsĐ=g†‡Ēmč&ģ™ō‚˛gĻnĻWŊ':đ ÁØåžĩ7šš[›GĶ‹Ÿeu­FV˜Eōé3ųۜd'™Z RnõÉļŪĐ)ŸĢ~7ŲBH)û(|Ũm7Ân0Zi/O˛0<ķBŖXØ-K$uÅMIåڐL°Éĩ°ķįK låR–Ų¤zūsûÉŨ ×"ížÃŽã¤†Ģ[Fŋw ˙ˇĪ/žË`Ĩą“HUTûp%u––ųRlؒAų Ūg§ŒŊXNZôLŊgwLj°ƒļt3‹§`ėK""r™?ĶŦ^-T @܁@X--ZŌTE`Sõ?_Wr…ZÄĀj1ž ’.PXrVoÄŗ- wîĒduå+"'Ęj‘Āw_îzIø ą~bˁĶōŠôĘMiÚĘ[;<\BVUD×ˏån­€]YK/ˇŒŦ;?`ž{VĢ7gjĩ¨ZĻÎĪCģŗåŠúũ”§B}øŠ ųĨ™ßAÎ<ÕzK4ü֛)kv¸–ûô'š™2œHР„: §!ũa‰­ Ĩžnėë¯Įĩ}hû94Ёp†Ė[ŗĨŗÕʃ}:4ūĻöÉ5yWŠ@¯eŗ‡?ˇ…įę‚׊íčC,;‡Ķ˜×ūP+Ž/XGaĐ?—Š­mČ2ursž4`°ģôĶŪsM¸Ė†+ļ-°Â/Ų%yŖgęp;fÅŊÄY“Ö=Ģ›û^MĒę5ÜĜ—‘û™ā{>ė˜Wö-áÕLà [æōė Fž™°Į_áîÛîYFũSZŧ“j(U…†o}ôh/0s%0djp„VC“ũÆÚVÆÖ<7•Œ:õ91^{ĩ”O‘á”Ë@>=W†+8ų\ŞÛ ˜*đ"¯aAerÁōĘZØ“ŠĄe_C0ųÁXŽ“Ø*ũsÉMŦâČiųÚ&eî~ŧ \Ŋe!ķãņ˜ėáÛí6 Ãõz-=œėü j˜Ųãņ°ĒĸÜ ũŖžŗR‚tŒ…ū_íü%^6“ĩŽEtzŊ^']bá6™ÉęNkÛëeoaT›-Ü'xĶĢpęŊz—Į(ļš3û‰ļ„ d.@—ÖL4[Ŧöaب|°ėķõŦõlMny͏+lĸåN&ąĒ‚ɇv×r ʂ—Z­†žÚ^D"7 õčÖ Ū>ŧŠcŧŧh‰)°u“¯ė˛ÎöæjČoõįB¯2õgģŅ÷‰ E׎ü§†ōōęÉK+o‡ąwé–ū¸ÛHHÍ ĄÖDoAKøEž†áršœN'™) ƒk 6ͯÍõĄmsĮQ¨ZTi€‘Mr‚‡Ŋ1Ģ‹ö˙rڂĻûžšÔîVMÖ*áüņCv+Lŋp&—D?äšōZĢŖ’Ē.Ŋ|rĸJ˛*Ø Âa6NvoũĖôq>ŸmTX2ũ’’=ëÁʡ„V íZ8ˇgōüĘdĨס.‘jÛäíž^Į-U•đÛ%ĐnŸ;ˆ ĖŗvÉ:ũ)L ])4K(čŧō€Œ}ß÷˛ŋŽ‚ŌõŠđm}jÍ\](—^ÍŦd+ҧ†a€CŗŌ Ád?äĩM–ĨđI8†%6ÔpíUš"6 ˛štŧTg˛Ž‚“S@ŸW‹œ‘t…С÷}oT°˜é“ÖëĻ’Yŧd%kš6ĐŪkeŠķƒÛqI{Ou¸’ÉBÅŪVX,EĄĘÜ0 §Ķ $Gw!%Ũ|Ą]ëØL­.hbdPÛ́Ąö^Ō­57gبԎĨĨ5‡ęa¨S$úÔä,]ntĢė18WH@;Íėõ`’˛ŌO×pĨ¯/Ģ.h´įÅ@ĄTe)ŦfWT#9ã8ö}¯$#Ž7P ĄÅIĶr<Ķ%ĩ•Ú=1ŦI ¨Ōisëc‡Ø6§r&5KDŊÚžs :Āž>ū§+ÍÛã]Üüė¸tš ‡šāzzP•9}ŒC芞&×øXp>ą^ˇŨ~Hā™žŋÜiáŨ†ŽM:øn÷ލžÂāŽËC膘¸åĀá~eP{’ÆÄ{Åø†čO&ãļŧ ]âŖRúĘŋĸsŽƒųđyo°JŪá\č&ŖTjÄŪ;nû +J¸x×Ŗ’ģŊw7\Ë­ëx^z%m.ôéąîYĄķ™÷ąɆl5öy_`)~4t€ˇŸАšLmĢįŖšÂĨ4äôY‘ĸačZR8B}š\˛ĄŸŒŸ~9,­Į>8\á ?C´\(1&„ķ”ˆ`Ō—ų+ŠqĶ…ZŠäô’9+ŗĮdÂO ĨŠ‹¯áä2Ÿ0uxåc)l7úO î1\›ÃŽ…8Ŧš•ī ũŠÃ9l5˛p&]–Ļwi%đôęIÁG–^ Î„"ë#ãŊNW ˇ ã#€ōf- Ąr7™ßĮĶĤÁōYĶ%ļЇQ ĨÕG*jĩ“€‘°Ų==JB{8ߤnzõ9‘ÃzuÕįWxBß. ?>*SûŊ|ÕæĮÔĀŌŪBŽŊāÂŊޟ>”tęR\VM$ŗë4ƒB79sJĒ_eÂːŠķF­%č•úšžtî´Uéų 2õō|§msššÉ‡K¸øAL퍤“6MTo)mĢKb”pG˜Ŧ Ü(ų¤IF›YũSФOLÆÖžSŸ=Ž™ŋĒ“­r-Hŗ˜Íí“ĪÕW„;×$ĄŪT%'ļejŸbŅgĢ)ũ0˞æmd%ĢâϊO¨?á0ģAyÚ}cõ ˆ_2ķÃÆcŨ|ÖŧîĨæŧÚm!ļē›Ü{Ē>žīÅQ/Ų¨tž‘€égÆĒ”ęđ„ œN'HB¨´HFŽ[ŋŽŊ]ŽJÍØŠŠ˛pĨï„ęŊđōYwģ-ėēîˇŊŊhŊ„˙°ģ2õžT*ÎFbV AŠ ‚ ˆõqbī­nWf2Ōør‚ S‡fŖ~˛Ž|rĶō ĸ?ą ˆPģ‡Š÷hQŊ7QGĶ>Nl ÚŠ‰7Y'ÜfÕx×ėöhwģŠYš&S›OLvŅ™LĘ ztŊ-xˇÚtsá¤iâ9 õƒø/Ŗ īhaϤŒėķ˛WÖۘ HĐ™šØ‹ĸ-lCKôâGÕ(åC}ōÁÛ0NY ž 251›õ˙pWžŌt÷ũ˛{_°Ū\līyQī{­¸ū–j)AT‚vjĸÉ % +VŲŧōjĐ?íëp›PŗŊø˜4Mdjĸpcēūiŗké]Ŋpņüä]ˇJë¤i‚ SíHØļt!)AdjâŲđŽzš Ŧß& Že†WŗAĻ&ÖQ´ĮqåZūYå„ĪŋMØ:AŠ‰ž§(ÅâāĄŸ‡žvšŗ[Ŗi:įFb )Ã0Č@˛&25QËÎj čû^ĩ]ȩ̈ƒę[mųp uũĄüŲ÷Ŋ|̟AĻ&Ļvj _Tˇ u˙°×ˇ[ĻNBŌ•ņå?öĘ`25A”Ā MGŌvŸæÜ&yšāæF¯\ÃĩXöO0’Ø8l &‚L}`Xf|Âģļ‹!äjAĻ&‚x7ĐNMAĻ&‚ ČÔAdj‚ ‚LMAŠ ‚ ČÔA™š âSņæ÷(jŒ2ƒâ‚ NŊkš&ˆ]ŠNˆš`49Aŧ@ä'ÜęÔŠ bīģ=ĒÕD%~bĘTņžv2AĻ&–*zä’5ąCĐúą/ŽÔƒĻįß+Hú ˆŨ‚'Š;‚\ƒ&‚ ¨SīWĄ&MAš Ūd9gWP§&âŋˏŅiAsɏĮ#<àÃß{ƒžěPęēšĻžëÚ+Õ×bg-ŧĄ9Ã0ČŋįķYleT´?´~{#l§čf,(nĸßÍ*AôAˀké§+šøoˇ›ĸâzŊ.šŪx>ŸĮq”˙hí ʋŧŽėkeqŋßIÖÔŠ‰ŨŅ´:ŠČŋĮŖīûķų\"A%šÆ”W”ŠÍIę~ŋË˙…¤VĮ ĩ%S] –Đ´ŽŽ ß8ŽŌļXí"xŨãņ=ēë:߇×땓âÍņE ÷û]ĻĢ|rŊ^ī÷ûũ~—˙ȝŦōÕö^/<įķšæˇP=_ŠęõzŨI/ė+@Н”^ĩávpáÕįķų|>ë°Ú.•Ī95Ūdę#ÁĒNįķYØ-_‰…–ŗPƒŧ´Ä&•ÕŽį˛—HPWģ…CŽOĀÔú<¯<Š‹Žū+UŨÉ Gl Z?Ždņ°ļNШj5ė‹eķn-ž^¯Ä8ŽÖV;Ë&n Ŧū'{Î!. 1;4ØÖíMũ­5 lîöI°kKÅ8;hũ ö%YÕ=ŊnkĩWPĩ–˜ŦN7ųdbĀ'+†b@˜kį)UžŪ’|åG*ė=¨ļ”` \´ĐúAėÅxĒûbû ĖsŲŗ×ĐhÉdná'y*Y VZhVĶmM{Ĩs,ŠŨŋÃwB¸˙˜EÖ%:†ÅĀÚ:Äm+IŦEÛ/ᙚxą…Z§ĢUŸ=ŅøO<}‡ü+ĶŒ¤j¤žĻ2į†ĻmOX įcZŊČlQ–yÁ|ŽmRˆįëYdĨBMtŧtL­}\öæėĐW“…LMŧŪôÎvåВķ€?§˛¤āįø¤|˛6x¤”L u6SĄ-Ä;ē”>,9ĨØÅ)äë†%Öļ̤M{EtįœĻÉÔdjâÕãäĻ"LW™Õ%ĘķtŸ„ÆYy2d`ęPņ IšT˙Ļ.Q­÷Y õwĪŋž4KL:‹K `å€IÆNŒ3öImg ™šxŧ‘úëģÉuŌŠC͸ sŠõĀŗČÂ` ސŸ‡š~¸ŌQj ŗNÆJ.‰Ąi6`p(1uh̙ʼnūR”2ĩ7I—6Ĩ'yœHĻ&vÄÔāT˛OhÖ OĨB{…ˇŠ$^ úü$•ėÔamgõLÉāã-!&NÍÉųį,Ļž´ÆØČ—|Ë25'Č'€šôއÛíĻ.´āá+ŪĶĸTÖÄy'>šĄī°wÖg¯wįŲŨäۅÁå—ī˜q.næm=ßVIģ Ē+ē‘Nvūívkv„'ŪdęãáršŒã¨ŪĪáËåRÃ)õYâJ4!oąīĒĪŊyˆtBkĨ ‡C†Šá’wW8x15ûɔâCŸn ˇ›Õ3Ö);LŽäĢ:&‡ĩ˛˜åômģחc#’Âaę\$N蟞 kC Fž+`2\h"Œ^éĸāÃŌ<ŸdjųH˜Š&ÂÛ3ÔÜ@[B)2R"G(Ąō, ׇÎ'ų˜ `2L âc,ģHĻ&^ V—ÔŊŗAHy9)ûäD@%Ļö1~ĨÜ{“aŠ 4­ Iō4yU4ŧQĨÔēĘ<‚a­J!Ž ûke’u.ŽRĄ&S¯Då‰V˜xž‹rėÁ|ļY)€ŠÃ™īS†úŒŖ ­|EYAš7ž—ũÂāßVØ.kiĻyhžÕ—ķĻŲæ”J`2wÂßž ÉŌ8kÚULœq%ž ĄĶ^ؐĐgYN¨ė“§Ķ))ÖGj؃˛äI{’ÖpũUŪēR5'Qr29 Oŧ1ČÔĶ“Jdo^(€˛¯×k}*ŒNB§“lÉ7jË!‚Ë_8Ö}ßĪr;!Ū ŧņvÚßkŸŠ Ü|ē5ß]¯×äōÖUÚBDQUbŧĶĸÂNxo͚@Ļ&bŋkpsÂâ=@ëA… 5ąwđD‘ bī õƒ ‚LMA,íÔA|fŨjDš âŠmÛž6‘:™š ĸV›îŽãÔDëAŸ…äâÍŨ‚^zA{­Adj‚ ‚L `Ü-AhļrÂ~Sī3m<įAPĩ"S˙0ä[$Ņß?ä ˜įO*Y9͈%xá„>„z÷V^zĢP?g} ÂĪ\‰]Ņô'Üô ĻŪá=„÷UŪÂ1%ö@ŦÍ s fä AlĢŖpIÛŗęÆEj^)‰ģÉâęÅNžÆ(3ĻŊkęwîk)ԖÚHúËԌ|y%ëąžŗ´Ŧ˛ēGĪ* hũvģN'9ƒ­ũĮwčĪ)9°e˙„ė§wĸ{<™xOĢĄ:ŌŨn7™įúęYúšü~ŽÍŪ:\¨mĮŽëÎįķō>†aVQĐ'Z‚Ti–Čåíã8~‚ĢqHĻŽÜāČcû—cŠŪsüꔭēŽëû^'ŧRÆũ~o[…Ļ…DvÕá—ËeG!5iėB%TIv-#ÆŦŗ‹„ėHĶˆįŲŠu§Äq>Ÿkļ“ĒĮå*ķS˙ŧßīī'Е]Qęëõ*ũ?×üj‡2éęĮã!˃žč9{KŦ %\špŊ^ÕėЖ3ķt:ÉĸØŸu:ũ`ĨlmĒá‡Įׯ¸ßī×ë5Ų3žĪįëõzŋߓ’oaų“ŋ:”^kž^¯ļ‡Wė"̆OVFĢņĖáĐÆžĪį…ī•ĸ¤ۇŗJ–[8îŌÛ -ēßīöWōgĨ{™ûO›39–ȍ%Y–—šCĖĨ<éy™ĸļ[äĪķųÜĖbõLm_=w8ÂēIÍKĨÉģŦÔɟōyCcĩĨŌ]^Éđe†•KΟĪįšĄÔĻA!v í‡RŦm‚•ĸU–1âM˜ÚÛ@ân 0}ПĖ:“+ĩIæ›Ē2WG–ĻUî3ôą„āÂ^ ÕˇûwĀžĖ×G)ĩ~1ļäRĒ-hĩ%VĩĪk/`iĻũĐÖH0™VŊ­Š´ DÎwrØáv– HĻūAveæĢ”—öãž}j´?UXB¤Aûđģ]āģđÛJ]^[VŪŽ%ēK…¨’û¤d­9ĖäķwháZ, Ą9Å/ŊöÉp…ŽäDŒš”ˇ.1•vv*uŽG°õŲMÃäV)iĩŒ /Ôp­z×M'™zŠéÃ*JĀĄ y%:TBÖ ë%Ҏ> :QČÚĸ’â69ė /­ ō:ÛöŌ¤Í'›åbۍ~˙kŸ g~ÉŌ]ǤŨk×P¤UKüxũĘĸõ‡z‚ ܰoFööFßęP&Ąķ+­@Ķae >đ­˜ S˙WĘ­Ō‘ė득]iρ%.T¨ĻCŗ]I[ôLī˛õ,“üé{LIš\cíõ-õúrb>­?Ük[ĸõm’"ÃBüRÖŋ1ō*ÂB-˛ÄÔúUhžĶ“V Ä¤5{SŋkąŸ@ųđ@Øˇ¤ŋaÛEq Â×}pĢRéҝİtŧ:Ģ7’õ˙ˇ_1#hiō˜uO2}āņx(}xĮŦûũūx<ėÃGš-?´$*ÅØ‡!PE|ŧ¤Į|gz¯>Š ´´&.\°OJĮڊieŦ›”¯Ūr“īōÉTáëxį—đĐQ? #}fÉđÜßB{/ÆŽ.æ* ž’ u[ŌÄ̰-Sßn7a4G?ouōĢà 1 @šđéÃ}ßàąy5`é[ĸĶŪÆä ?g…Ā…s֏:ƒ+9Ã0 ƒüPžä'Ĩo-Z§øRĩe Ņvã87]F^ŋCōåÛutĄļąV!•ŸW¨ë´ü›ûÂ68’Īž'ŽĘÔ Úy[zŌĒËÎF -=ŦŅ Ā2Ģī^‹ŧEÂÎēÛ°›Yđ7Ų—&ĢŦėKėĐTöpX ÆdˇŨ0č‚ŸŒŒãč­jIú>l–Fŋ͂ÃEwōuöŲÔRīūĻ3K„Ķ^ƒåÚä’Q|}}ųKKHIĢ-ŠŌ9GĖâņ† cHŌ–čkū24hÔĀOZYŊiBŒ!vīRķŽÉŧZĢ,ķÚA´™ŒŦŨŖī{ũŗ˛ÕRNß÷}ßĢxøßÚfÚĐMA ‰ËVŖō†3)MAU"VUVāÛžī“ŨUåĘJŧS‹¸K0+Ž•F%o÷•L–đŌÜPzæ%*FN^ š{kOĨ;$Y¯¯Ö ‹%điÎ\•Æ"GËČã8 ˇÚeà C˛' Ž[1ëwßOäÛ0˙†ÖÁx{š„šé&Ņ÷Ŋ_kå]á‘æë““ƒî­ˆÄ^°uä‹ Ōųģ=­÷•õIŸĶ0ÚÅ6Ö;T€ŸœõÃĢáÜÜí´Ŧ‰Ķņdāā.Ûļ™ÖŽ2&ČGRxīPÃáŊŌĨ…ŗä>\“ĀĮõØ:h\egBõ Búú#ĒËzâËĀ×>™ļŒŽų/ŊpėKōú‡ze$wĨ …ž¤ÍYGãuÂÜW"—DžsGĀ5Ã”ĢœE%â€Å ¸8ôi+­g!sy§æz ą^ƝsMŗÔrĨu7ļŪ>•ŒSŠ;‡¨?3j-…¯CÍ6÷ÉIÍŧž fŒŽųĻ34AVĻPõƒ‡sĻöŲ JÂ~ęZrô1‰֪*9š`”ĒščÔĄâ\O=Ĩ„%ZPQ“ŠŽąæŪąw’õęŲdMhŽ‘ģAãxN´Ę˛˛¯læd&ƒ]aR¯"Ū3ōĨKâ@=y(Aâ :cIƒ /L”™Ø‹AĻ&ŽFąNėâÍȚ@Š b×MĻ&ČÔņ2žLŽqPģ¤x$ˆ´S–MāXtĻIkÕMčÍz@q+@ė‘4]F IDATŠÃ{{`Í+ôNŒ`3úw+šč=GHÔËsE.vÍ?ūŗŖŊßī<}oŦ uĪtŪÖČ{“‹&ũŠvĢÉ ŖŅƒŗ‚˛´[֊e°wË6ĮãhúĄæČ—š×„ī-Ļy­ Koė$PeVBâĐhžŋOŠ&Of])kRÍŀy–"Ÿë§˛+ˇXŊė=ŋmą0ÖÎŪŧ>‘ŋĪËšuöšævfsØažöČÖj.S‡ Éhō•įĐ´ō—j|É}¸ĄbމŸ|NŒ6ZÜ"øøëĮ›¤Û ‡ŒŖyĪøŪč\vĶšĶ;L“RĒĀF’ŖiUÂŧQ °t.­ŋFYEȡĨū>õ¯@ę™”7•žŽÄūĘæ“‘iԐ§ SĪ š.J_g§JÆ—dn[Ž4ųžõĶ LädŪŧ T.’.-eâŽéHs˜4ĖYvY…fõĒJEHģ>÷Ąžģøœ…~šōyKė¯ęīS…Îņ#;-k  āz25™zMÂÔ` 5ĻP!ĒÜ/—´0­O)ķ,ØgjŸu…BũRWRŽ}RYËYū` fm#•&ü úđkģęģÂ35 ™Ŋ7ęo3RŲĄé~Ė1 ÷Ô§´ļ‚TŌüá*č×!Ø…WL0×™zĻļģ<`–pū{Ú-ŠūŽ’Žã9ĢÂųÛ,ێugōĩ¤cbiBÛíf7Âz۞~poiiæX*ÉgˆŊOVkkŠAšF.Ī^î9Žw›B‹JŽ4žœÉ‹_kî_ˇũ“Ņ0@áāmí ĢMŠŸ'6c˛Õ=%FÃRĒ(§ž&¤Lā_{s7uīx8“ķi&oĮQ¯Ŧļ/•kĒõɅŅ4Ú'á}á“ŧ&˙ąYI¯ĐžĖ—Čė&˜ŦO°ž­ô–ƝY>+×<É)x:¨‰OŠúQēčôä~Q}MŖæ` Ųi#ũX¯áæS:úŌũaúL¸kŸˇ3Đē‚Y“ÅFœ•ĖX]HN§“ŦÍÚYōÃU´ČY˕m{øö|-ņQ˛ c5M(í'ŦOéUÖ6x]ių׊1™ē@…b#ļ. &Ã˙Yä˙5Fäđ+ŋ9MØsōHËČá”ĐŌ|ÂLæšäMOU`ąÛ—U¸0 ƒ5õLúWļ×o‰Ä(Vč@ЃĒĐōgß÷ú+5ĻËhö}:äš ftûRk!Ņ3]GE#ņ˛ †ģš‹"m&“v˜Åė%ūÔá%Ąö(ŋ}ģ.…'ėöOëÛäƒq ’5ŽZá­ęĨ€‹°¨°„ÜWÚeĢ]ō}s˙¤Ã¸XĀuėŪī͎/8MÃoë=Cį?_yûUâũfŊM’TĄŦÖû5…™H5x C+ÂKëKæĶ„ —Ūl3{čSČēOY:đ$čyʆ>ÚéŸŪ™Īģ† õdo x+gåSīĸ×EAw]tŅģõ6Ģ÷,EģØ2ģ:ŋāđ€ˇ›¯‘ÔJB%ŪS°ŸĸĨĮcD=t?†ˇ„:N †šQ¨ –ä >ĸ2QŠíÖ)ę#;f…Ë[°Ą˙Ír (°ļ>“!ĻÉâŅ6—žę¤šn–#°äŊ‡KđōZ,ÁˇbjOÍ^RCŊ˜úËB€¯ßųŨ´æöĢ”õđ-ö q2öŊ>GOMF. šīä~?3°›hĶ&á̍2së™<\ŋ$S›>JŽĢâYģDĮjËöŌÖEyė'ú̆Ŧ’úŌYZڇ†ąė^÷ŲnFŠN=×@üŠŌQ+<ļy{%‘ĻYøéUž°đŸf;KĪ?đąūÚŗŽŋÅ[cÖÕĩÃ_ŒįĪcFVôŊŅYâĸw¸3}ņũ°ÎE{ŽíÎ $^ŽŸ^õâĩB'ÂØ?qįjsTԐ™†`âš/ŊoģyCŸ‘xĶÄ$ė3nįō:ãK\kîšŊXŦœŽAĩL]s9ô~°ŅĸBņˈQ<÷‘ω7Cet;(UĖûņq:5A,'š­WPȐĩúfk˛ü-úMÃô'/hŽļĄíb¤âōøéų36Lü4ˆē!ŌŦŽ\ǃPĻ7tÍâŊ]—’UÉÛÅĻd-–njŪš‹ąRļ­7‘;EúMđœāŸÜ“:‰‹Ũ4ZŌ_ō˛ÄŗŌĮō•Üė?Í_UúvĶ!Î=ĶUöšëĐā›ŋĸ;ü¤cū—šuL#¤čRũNčļžĨ Ũš\BŠ­eKãY öÚV`yknã]˛$$6Ÿ~RĶĢK¨ö%÷ÎhŠa}ÔAĻŽį*ĖXomI|SÍ·ĄĪJņ1ŲĀĘPīR^ŊŨRÆBUˇĢžŽŌ& )…Ÿ—˜Z´éšq§_.ˇ‰ĪKS_ˇĩ$6ŲœŲ‹ŨŋR­&Sˇ™ÍŦ¯\ã5îíÔ.ųrQöéRs]X×§…Ü—§‰(mPj¨$IšzüJ%væk sĖÚúôrá,dj/Zõ‰\:wQrŨnÚ ‹`͘;ĐIŖüeÍŨŠĘ˜ø”L=›ŠÃËĄ­L/´BĖÚKBē"EV§ŗ?Læ˜gjO^á1Ôē{”d’Kë*­šö˛…„\Hací)…OˆZ:?€ŽJŪ íōëb géĢ“”aļ[ŧŌmÅ&€M֞IĻõÂfŖ„Dí瀭bg#>‹Šķ„č5Ę)dļŗ“Đ.“ Ž•ėD’dĄĀbúŸđäJ'UĨ:\ßĨ%­&yx‚šėɌöEĪļē1˛‹1<Žuŗëˇvs&Rj­1šÜÚRŗ>žc›€ÄPkMÂķëzg’ēđ¸ŠæhËĪ—Žéŋ\8Y~ŽTãõXzuéŦŦÆ9 ÄŪŠĀÛá’rpĨ÷n$ĄMß$„=ˇ#˛¯I÷ã}캈čĒaßzčC@S>‘8N$T Kfø!Ôš’Š++o='§Cƒ‚Oŧ9S× ‡á ^§ķBVŠ7%nR%jSļ‚ųVŌūJČĄsqŌWõ `ŠĮāķÉ<P[°ÕĖō÷>ĩjī܍ö*ąū ?IڛĶßēsg.Sw?ÆaÍÚ\dęki;YišönĒ_.7ÅŦ]¯øĖŨ‚Sš)÷\žTîB’Ũ”Čžčą=c?ÉiÁžQŖS'™­j–yâŖ­ĒT†ûĶĶÕÔ¤+äŠXEjgM­dûfXØ-oļhĩíNÖ}ø(Ģ&Ąø¸Ûš$øE-•÷Uú“õ}¯~ßm?Ëģ”Ä?oģK­x_ņöøÄ{ÕąWgø*$r:Va|‚ 2õ†Úú3īB%‚LMŸ¸Ö†QøņrœØ! Mdj‚8S¯[ -ˆĩđģ€ Vg|͎´Đ™GOŋįf$ČÔą2Š­â›¸_ŊÛí67ųbŌ"-M\Ké\DĻ~ŦoœäPî^d´8i|!V$ĩžī'‰lë3C{CÅrŅWĸķųŦŊDAũ\<3˜¸T‡RjŊíÂģĶ1^k?AĪËc­ĸ’Ū€T|›FcŽ(¨pË3Cõ>˙ķÛoŋ=AũĮ?ūņįŸ–øķĪ?˙ī˙ūīß˙ū÷ˇoßž}ûÖöŠ˙ũß˙ũ˙ī˙}ûöí?ūH ųõ×_˙üķOQž.—Ë_ũõ¯ũëįŸ>–ļ"*äŋūõ¯ß˙ũ=l Ģ’Œûü!„MĮúvģũųįŸŋüōKX“Įã §čÎđšĒÔöÛˇoŋūúĢlÚ&Aē6/’@sœB*zû@ŗ:S“–ŪfiH¤đdT&.iŦ“ŧQ>ČĨåSŲ|Vŋ\_. " }WČÚh‹˛IŸm>ÅÉĘØ=ĸmŖŊz’ļ‡;?GĒÕĖĐô kC÷ũŽ HŲIõö§–SōާŸžôķ*L;ÎäRNg{ģųōů”‚š”2ÍfIŠŧ&—´ŋ÷¤’OmÃ!Ĩ-\ō]šx‡)šÃÁ…ŧa:i[Ž•šĨÄnĸ€Ī}åmųĨ\ÁŧŸ…LŊ­åÎĒē!9æ33ĪÆgå8׊!ˇu‰ŽĄL¸ÉęGžVā‚xØß<ĐFÖᐠļ´ūų”ķö‡Ĩ_YúŽLW[_ĪGĀÔŨ8䯀{`]ņm/Ÿę­a}jÆË/Ÿ_îÎ ĐTe†ōáW5—dęÕtę¯4Y~éN˜0 Ų͚K`7­%É­P KÖöĪä A˙gķÜķ\^0æsÆ'_Ų[á~“Ō%d•Ö č¨Ō˜á::š”ųëĮ”ļö1õ—ūߊ,$ycËâ€dÁžúžW˙aĨ$S,6Qŧ\.*…öķžīKOv?wAÚ#šJųvģN§aĀŪ=é™ĢĨ‰Ã–ü˙t:éĨ×RąĮãĄLĄYz˛ÎXrWwxcēüß.6ˇÛÍūŲ|ēĨųZĩĶô’iqÂŊßīļëüEėzQú0 āÜĻîeŪ‹ŽÁŅÍ:DvîîyŋŒÉŋ =Ŗ÷ˆKĩåŊp%šŧn7ŗœk Ī3p…†õOđū†+áK/ĸ—Ūģb2-đ3ĸÉoˇÛ×חLđޝ^%2B¯vՁĘë“Ø].)Gx͖ ķGŸôÕKƄėĒŗŅ͏Ũn°Âé´ˇäëTRŋ…4°–ĮõÛ@žõ’ÖēĨĢo(o~C&ŪĐv…›UŸœŠá[Ûá5 †ázŊ’Šß•Ļ5žä•L­Z'ПŸą@pĒYũ×îívS ŊīûIÖEFļķōĄ|RԃJ čĒ““|•ųf_§ŦĒZä¤b ŨXZēŠ8æšmąúxŨ—Ų7$Ԃ“(’åQŽIЀßĩØmPŌ´ËåŠĨŪ"ŪU•~*S?aŧšcræīč“õĮŽĩēÂF2”~ĢJûe@õģ‰^b˙ą­ØH-˛ÆŠšj‡ %JËaÂ8[læv‘üĘRpȘ5ŖéÆ ēÔˇ*"ÖZeŌ÷}ß÷$ëŖĢŌvI~ŊNm7ŋĄäÕ(%[Äũ~—Ĩ)Ņh RĻZ*@'†A:ŽT 5•ø%œ<0 jMtU0ōät)iÄúėXû(Į˙iWG˙ēJâļ&ōPĖ ‘mSƒŧyûģˇ<Ø}CéEZíÉÆúz[ĮTŸ] ū_z^ƒ,ëiŠüœ&‘C[ÆÁģgÁŸđpŠ’I(¯gČ;āū6‰ŨđQsŨŪl•L]ŠOąą0Ūy"e&Į4”pž•“>vIXM%Sį!H°Ø–ÚĨ<&“2‰Ŗ`n Åķ24%‡0BĩĄ{ŋ„°đŒS“‚' gčĸā᎐m=5ûú}€n›Į24GÄÁˇVģ|ÃāĖđížæ2EģˤæŦ‰ä ļRe)*ĩä1] šJ¤+ Ũ KČĮׇnúŠ‘Šų’IØģGŽDņ†miCBŌ íyŊ^Ūe_TSNeޏûũž ŋ´kn{×Ö_ yZ+ˆ'€LŊkÜīwāčd*ĘÖ4æĒ-A‘¯˛áŽ8Ú2—ôÃũ~ˇk˜í"ų|õ4šÎģˇaY˛ á "SOÕ Ī?ÂrWŠė‡ ė&œ++Ä$Ũ[fBÜU×ųõÃķĩ6Đļå Y]ķÕū×îmí$ČÔokô°Ė+6õúíōm¯°ØB|'ĘĩôRØPg[ÛUVģz}ÖHÕ÷ĒJ ozéíúüpī–pš\Ŧb8ŽãZūÚ åø“Ģqûž?NsKS-ŧ>āü34ōČWÚ =V-•wī˜ėUČ ? )uŽ!Öŧšā‰"ąĄéÃŦf-ĒĶܝģLØŋf=iÚÎu:Yi@o•ˇÛōÃĮæšJ•)}nm#ö+ØßhĢõĩˇLĒöa_AÉa?øÎcĮ¨SĶúA<ŠKt>%Ļ‹3|Ōĸ–V˛8×-N’ĩ%-Đ¯KƒEÅ/!†úRxŖmNzk~h›āßRę(ej= m2PĢúg‚LMlk§.Ņ UKÔã¨ÅڙžĢrļëņŖ”.(9ĄÃ!˜<˛OYƒĘi›5ʃ†C‹@u…&čoĄĨcģ0x_ŋT‡|ŊCW‚LũÖ#)_!ģ…Œæ™ÚOie4?ák˜:<…ķDj;đPĄ|žœŠŊĻ2588ÖXE,Ĩ†[X'lįØA)­ÍVURüžD$OĶĻĨn\žž(î˛×†ÉYæĪ”.—‹%=Ĩ´GR:áõ„mîéĸũĄ+J#” ~}}Ũn7°4ĮŨÉåŊž[¤íō:Û3Ã0ØZŨn7č7ų3,Ķ9VVFG>ą¯.ÁÛ€Ō§(ęģfÉ ÁÅwŗSkČFx¨fÜÄNėũCŖę,-ŠiÕCûRÕâAĶ Ģ´Đ5X•w°øē• aK­ļë°ŋ*…ˇ$í âKö=žíœAÔŠ‰'),V_S§=¯1ŲTįķH´0ûíę]šž%ŽröĨŪ6Ŋ\7”ōī÷ģM¯aŨ}%­x@‚‚lhÉ(O~"9UÂSųOß÷āS8 ]ôŪ ĖĨˇk<žī-—é~Sg¯Ü §åår‘š”ę,3Žãét˛ļˆĶMkC•ôēž…ÅjŠîĮ J—ËE)~ĶA¯īy[Šļ]„HÖdjâI$øõõå¤Iú7°Ŋ6Ėü’ƒ×ēĖbM Bs-āËkŲō&ß~ģŨdœEv^ķ$wŸK¯a=Đū”ĸäįž2ëæí#ž Z?cą4Ũ÷ũę)Fˇ›ÃPriuŲĸÂMŌ]–…kÖ YÆBŗÃv“¯…áðđ” Ô՝ S›ë†Â;r>ķI.ČIÁ{,äáo7_1üŊĻĮÔFdãī‡aïķmGC¸ļ>ON´ž×Ƒ{cNr,~‡˛\ŅBĻ&VÆíGGwî|Ln MĩZ…Ę’ĶË6Š‘_ÉŅåãņ°ä%™=jFĄTŦZHę—.hÅų|ÖËh,Ģ™¨3ĮZg5tŒã8Ž#,9ā FIãõŲWˆ@÷—Åŧčn7q•ëL‚|* ÃmäBƒKœ¸ŗ/õ´áŊ6{_čí†ųÍ­[蟗— ‘aeēČ÷Nü5h3ŧfACTôsŽbÍúá.'ŧAsø_Čdŋqö1F‘˜í§\šĢ:ąK9’ĀÍV94 SlcęđÕIJĪD]đŸø\ŌmĢ]˛`ä$aŠ5Åú !Ĩ'K᝝šîĀJˆ#÷c´‡XŽdęyŗ[Ąŧ‡pąŸĀĨČāL)•„8ˇž^û+%ĀK‚ļC*Y˜.ĖNԜš"võ\EaLš„<Üī÷RšOĸN#âØ|úīߒûTTzøn˛‘{+?Įķ’âMä SÉio2MZ=Q–~žŠ ‚ØŒ&?S×čŨĢ(īėm‚ØųBŖ ‚LMAŠ‰ņä,wě'djâ MKhšLŊxĸHÄ:ā9uj‚j‚dũš ?5Auj‚ ‚LMoĮdj‚8Sŗ25Aė“I]ˆOO ‚ ¨SAdę'€6D‚ ČÔÃŦ ‚ S@­ūÍúņxpe"ˆũā~ûí7öÂ$ž}ûöíÛˇĪ9š˙į?˙Š įčuęÃāŖ<¨¨P™š8ÆĘÄsT‚Ø ˜õ”ā‚ öFž„…wˇ‡ëˇQ;¨Sī‰Ûí6 ƒü˙zŊĘ\ŊŨnã8ę'OžĀ—ËeGŪfĮHūŊŨnvÕqŅíH‰–>âËåbGŋ{;įžb{Üī÷ûũū´×Īįá?ŸĪOkģVézŊžjŽ×ëų;ä˙/ЌŧڎÂäHŲzĘķPķûũžøÂ>_ ŨKÆ zPäXäæ™ķųŊ™ņ…ŌŠjGü9´h_Œ ōąV{+—…ƒ"|ÔVˆw/ÔÕJՐņJČZ;Ų3ĩĨéœåÉÔíĘ|"3ü…|m—ëÂ]É)Ģ, Ũčô{ژ ‡"'uOÖ3x]ÎMËiēš'U›éīÉ āyĀ2Ŧí:­Ē|îË´ĪËā>y'÷>L¯™[lKTK¨ä;1ĩ4­žCæJ9ė–Âiļ…ŌR’ī ­†Tl•9,뙋Ģ]ēVŅrÚf‡úš’ˆ(7ōÉäŒĶõ[ž ‡xZíÎoāÂ:ĀõOÕ0ČÔ8aŠĨé§ÍĸI;ÚA5k¯MĖÕČŧæ2‹M@Eš5m`C#…Ô‹„W™Aē’~đ“ÖÖDĒJŦåíų…ú‡ß}–šāw„`6YhŌŸ‹˜iÖČT^‡Fęv”•"o˙Šlšep8X-|§Ŋv˙ĻļkŖ—šJ*™Õkž÷'ŽĮ,:–•l•ŦÉÉŦ~wf$ä2¨g˛CŦyŖÕ:ÁčėÍDá(û9Nu?‹ėiâęĮÂę°\-.1 IDATڄšuOŠJÄĄŖdōöËü*Lļĸ´•ÛÅkŠÍ;'`ēģŠŨX[™ÔÍWĖŽ ^y<œøvė’3Lŋ SƒøÚIh™:d[BhŲđ̟Ÿ-víÍYfîq„Ī%Ũ|‰Ų¤šæ[ zŠį”üP1ß:˜í z NúŲ*bvކ‹z=ŗĀ|N˜ÚÎLĪāĄ&<^Ú­—]˛†q Ĩ7iūÜmXÃÔ0Ë`_ōō“0ĩ•%˜V`uņS#4Ë|"S—Č:ėĒ=…ÛØŲâM~sUƒp¯~h2ޜ0‰ `Ī @1•L]ō Öŗ |į× ŋ ĩ5´ÍąRQšœ•;*?¸~éōZ‚Õ¤€)`›•4?\í–[Ō,ŠųÕHOãŊV”ÛæŌ´ÎGØm¨?bR,HŖej„pčKååSJPy ­4 o×ī°Âŋ{æķō~XĪsqJˇŽë čû^–'ĮqÔÄū„Ā$[Úų|–ōĄü̝–˙<y‘ˇ{LGhÆq”˙ki–élķÅ-ߒā0 ‰gž­8ŸIĶ€ĘĄu—ËÅJŧD äĄstĩÄĀWyĒé Cų ī˛ÍąÅB5ęU ûIŪÛĨw…ڇĄų÷û}Ŗāš°ķĮqÔ¸’<„Ņ"s§°ūĮ—&9ŲŊV$`￝öΛ SRū“K‘ȧN^[ą—ãyLmG(tMæ ÷&ĨĄ˛SŨūęzŊj˜“uIō3šĢžįåvģ•ÄKŪ.ߏËWšhø čĒS ėʙŠåŸĪg;ëÂ‘Š Ã`ŋäkÁų|–ÂĄVĀûĨU9o‚†ĨA\ĸöƒí|}‘ü$”;íí‡:˛Ā ÛŅ´j˛ÚÉKķ<Qų‰íYčû^ÖĄŌ<ʇFTĖJŦyZžM>g““t°t‰TÔģ¨Ŋ'SÛōZ›„“úÉŖOŠXčôĶŪô]_Z“ĩĒVß÷Ē}ׁļĘ=ü $,ä&åŦJ=ˇa™œõŧVe؎„­ {hBgĻëķŅÃ%zšĨrĘ2#KB=+Շ'Šn[Ú~­¨ũTžBž”Ufâ¤ČUŠũá”đúDrŦ.““MļSģTOЃ¨ÛģÍō<ĻöĒÜm‰UÉÚOZģ­ķæ‹Uô} Ģ.å;&{ËM°ŨkcŌŨ9ßÖ-ĄiZ؊ŧu‰B(ŖÆČPîĨĢī{1+MžĢÔuaŋŲí‘ëšŗ@ŒQ§ĶŠY†­āiNŒDV‹â’YĶ,lĸo‰Ĩ[U{ŨûúōuWZŠŋ‡ëG¸Ĩ€o•‹lÕŠÕÆ*3G{¤RķŨBŲ„=¸1ÕXÁD€üîŦM÷ikuIŨXkYLA§æ?¨IÍ:W˙­æņŠŠ哞'ú­'5ßLx>)ĮÕ`ÕBĀŠ5ī|_…c!Ķar˜DEĶÃ'ŅĀæNä=ëGŠÂ]zzą#KČĢÂį´#JÜŪĶ`Ō“Ŧ+œ˙&~—ā .}Ũ”ŋAč´ä]šå1īxÖ3÷0ŗû0Ö#qu¨ô§†Aˆ?Ƙ”BÎāœ]C~ÃGŽÚũCÕõ-Ą˜AT‹]xB×lđ }šÂÚÚú™úĻåÁ/Ą i%ÍēCĖęĪR`”Kmô‘~Ĩ—‘J˛Mx‡KHø3Ŧŗ¯°~QißUÔâ‹ķŗx†Ō‘€?KŠŗĀ›§äú ėæũ–ŧUŠrâ?k%ïĄƒ]Ŋ7z(yŪÖļŽ~~úŊäw\â;p+ÍęÄŗŪb›?˛õS7,Ÿ,tÅg¸ĐŦ$fž[Âų?ĢiĀeapˆ–%8 ģ†ūĖ#kēēcíY'ID„¨S‡ō˙Ûûļlő$H Sûč^ Ía%ŊšÃÂ8ˇØIm„šŸôō4Č%aö‘'/ˆx)ÂÂÃÃvö†ėŋ6ŧ”ŠÃwîš0Ļ~ûõŸ{[úš=ÁŸÂēąÂ“Ü^ &\v1Ž1…ÕvFm^îđœŌôQ,֞u%ČvĐĖL\3vĶ*˛Bæ‘u=Y<ÛT Ú0ĖE?ˆ„ÚqO"ˆĖfŲĶ1ŦŦŠRHÍŗ~Ÿëŧ 1*Õ­Ôh-Jđ>qŪÚŋ}ęę2/|Â1ĩ2c(`úƒUí¨28_ũIČÅCîÆÖœvÃīvõ™té‡"ĶÔ˛ HÍV]ā]š@ę™ĘõO˛X<@ Ąū! ō—­Ĩ‚›Ļōu}¤qā}P[Ü_9‹XĸՋÛÖōøP(QÎũ8ĘÔNŒ¯cj ^ūp”ÎTŌŖ =ĮGÃ~÷,čËvođ˛gu,ķsk # tØp‘ų.ŧ 1o úš@SũT? aœÛûļ0ŧwíudØBžąĢ3ų€7\Ž:'BĻ.ēėĪ7uŪ›Ŧ`3ķÆ´2õö’utTRŸŽ7gŧëœĪÍGųķķs<ÕĶú\ÕÖū`žũ<6ž>Ân¯ŋ‘aŽD⏷/õ ĸn§;Ö rxSęUâ Á9öŅxŗLŊ¨EũâžÂ_8’ŖÎ–ÄļĨ~ž}25ąęC´úŦv4HKæļq¤ÛŌÔĒãđ}3vĸOĐģŨîx<îvģl9õž=MĪ‹ī1C °Ûí.— e7‚LMlŠëđBåķÄ៟ kKxžx5)Ú5ņdĄÉ‰áí7ŠÄ§@3- Q@zÕ]Ė0b‘=Āƒ'žwč`jD¤Ų Ÿâ‡ÔÉ”ЉåŲMhZ"Ĩu"}gô”Å3ķ1--ƒ…@ĖĪŲB™ÆƒĸÄ3ÜB4ūuÆŅĮã1ûöxũ*ÚbjWb(SÄšz„Ļ%‡/ˇFûKŽ&(SËˀM'AŠ‰ĩS6A‹ƒ>ŠA˙"ëtĨLMŸ ũĘSÎR4-7įb™Ŗl×0ŧdj‚ø`NQŧ=ļmRōđ5͘]o˜ ų!vg€Ú‚ø<Gņ´Tf6yũū|>‹ƒ¨XĮgŲ~ŸŨ†Ųd…â!9ܟß"šž\9&OØ{a ’YÆWôøK‡ģ5ũxį&íyoWŠ.c2?}ôíŦ+zø[$‚ĸ=Ÿ Ą™!{ÁaŦŖ­įäôŒžX$×čN"žMzŋvbƒHî…bégÉĸVAÂøĮßVjŖqųĩŲÖm¸ÁwKČ$v|Â@ĩV§4Ŧ)~Öđúå7šCīŖOôvĸĖæ‚Ĩ´F+‰€ Z æėˇ Ī‡Đ›q¤…B˛fdŅøüÔí7É2—%5Ÿ…IJŧÖîĶĀC Q#ؒũšõ}‡ø´o™u^ „‰7üîj;*;ŽG2ŧ‹Čj,˛•]aYyø€Žíģ0ü;dĢĻžÚĮtŽcÚ^Û­b6?fģ…Ę,ÕiZ‘Ë´Rˆņ?uŲXšRËØ’øpÕ3™”aáJÖÄō™Z^œũš­hŪ ”!ҁ f[Ÿ'|ƒ_ĪÔ2‹üJÔ-0UŸûb=bõđúqœÁԙŒ“qÖūĻŌtxhōÜĢT)šČtī7ÁFũMāØ>é΃~AÉ6ĐūãG8Hú`Š*\]u&%…YåĐēŨōõ]ĪßkŸũ ĀÃčeđG$A•ņí%!42Û™3ëa%Jku ĩ‚S¯äˆ˙~Ļļ ï?â~6C2¤yšâ0ob¸Ķ.ĨĪÉ ą¤YĪ$ŨBRã9+lÆląÂĢü˛ƒ'ėáIŋ_;ĐM6¤^Û ä¨C4ã´RCČū–y›L]K3”“ĒŽ_SgĀ;Cķjô\?Pīy e‚× Fß+S‡D˛I&RéPZ"Ģī'gk΁Yä}{ĸŅŨøÁ›[(!+Đįô÷T^( Ú*eØIlÛ"ļJĄZÖ3u˜¸ ōĀoûüëZĸfL ×tķÖpxÜļ ķī%”RAųPß7>rä5ŧŖ]†Ģ…úa]8 8÷„'€ęĐā&Ķ ā+(Į˛ŧmØznãßpŖXČÔ ˛ĐÁõ—0!2ŅŦ)øhE^jQæ (a!Į¤Kd/&i‚ZÎk 9 4ģŪ,ŲÜT‹[’.ÅÔ÷(õL˙,J˛°%‡ƒŲšĮ›ĮÔP>ŧ˛0Ĩo¸m<ƒŠŗė‘ÍŠš 73Š!Sۉ63Ų%ă÷ØĪĀĢíŠÅ Č~rš\ăSŪ´ÂîXs‹OãTtf‚í¸zoę‘ íÔåŒ>đJŧÁķœu8.}ĻžR0ĄgĖÎzV…ĖÕį2hį¤uU×í´åO š ÛÂeMŽ:Ô4‡ēĶ?žP8ŦŊˇ ]ɖ|Ã6[íĮũJnˇ›Lø,ų Œ0ė"ûũ^ö×°=âĖ A&ÍXõņŗEˆ8{ûįķšéķĨ}Ÿ0ŗI%SW<ũ+ŗ#3ęž´Ī—÷ø(f‚LÍ%¸ÎĘé“é+“ūY‚°b´Ö āŰøĮ€ÖÕŅĢd™îĖãŦũÅĢ)h´Y—ôKˆFäD]¨ęe7üîíĻ"˜ū°šw†2Š– īQ(ՖŖOJÛBo@"–T3Ū‹6ævģYÂĩ ֚/Bˇ.i<´3ÔLZ‰{Õxą’ÚĪú‹xĢ õÅĄļŽ0!č¨ĖŦ–üžû€ũ€ÕĢZŨēũěņ6UēžSĒYÎ,@īIRđPixū¸1–}t/auvĀēyĒÖūÜëFáĘ ZŪ ĖÖ`úË.U•úa„ih†“ĶĒŧtė, :G/ŸîĻoíęmKôCßĮŲV[ŧQsēđ˙áŽ˙ŗÉÔ˛,h$,•ŒLÁ’ĖŌ§ŪąĀ…d1>Ū Đ_OŲzŋģļáú>dÆĖ”{txí°ŒŽ'lu3.ĘŧŲ–ÕĐ.3Ŋë`Ͱ!ŗ0kŪŋy‡rh‰ŸW`ø”H3ŪNajõ]L…eęŒmõĀ´šfęŅå]Ąĸđ-vÔĻ* ĢΈÓlæ^ Ŗá?÷ÍČĖ&ŲĒ[B(ƒāšˆ-{ _¸ė Œk°°7lo`ˇ+"|;SßsŸ1øĘû×›ƒŧéikĒ‹Q¨ÉNž@m`KgO^“dĪÚ$Ë:#„įS°,ŦšĀ6.÷†gÆC õt†hķŅnßÂÔēäU߸žžŸŠ}rˇ?÷LˆžOŒæÚgāģPy ßúĐh õOR….ÎáÃ^řEÉ<ōëČ!™6ƒdJp˙Û,S‡ÂiĄYöŅŧ´ŽđÛž0 ú>ūMilæÃw<õ.ņƒTčâõxiÅ0ų›Z’Š%&¤ƒÛívE‚8șöH ĩŋՄlb÷:A<€Wgŧ:VIyÔ×(t X?vģ]ŗAŖøãÅõ í6]Ŧ×g ̍>V’ž ĘÔĪÅlˇ4‚ 2õÂtL.&ˆ-A]áÕ]›k|Ë25A肷+‡­ Ÿíu”…áũÍTė8ĚšL"ĸĮŨngÃBÉįŖ1’4įƒÁ¤D$ĖĒ;ŸĪúU§:iU§ũžš5C’.BĶ>E€DäĞ*“ŒŠ}ŧ‘'؃C€*Ÿtuč… ¨3´6Û0$9d}čĨNuķlím“ŲC:É#ė7ī8fG’Ki՞/ÄG#K5š,›dœ2˜(>]dX ‡ūŦËEgCbjfąšš‘ųÁ…ČĪcę0ÂÁëãIm Ô~NĩöHĸmôäëŌD<ƒÉŋŖåkc˛l$qq°R%F_PgĀņ‚†_‰2üÔššM* ™”äåršˆÆ&ü |Ĩ%7õHūBŪŖĒüøC. ­î|>īvģgëj¨ũ 6(PŋæÜš­ļ  R› Ôĸë¨*ŖĐT„)ĖīQŪÂ0ŒÄE€XMũŒŗĨžũEŽđ¤bY5kĒ86˜ ũŖBą ŽhĪ4aˆ#a_=œW 6o(žKƒ7)ļ“Š‰{Ÿ°<›@Č1Očöf˜yBbˆëBÍhHŋ‚rfÄ´´\ãƒúɆÚƒ7LŖQëÜ}6zËĄļ_5ã‡dí;;˜xz+ØT¯Û 9Ų‰Äō8ė áðˆ—%á S_„0~–Ę/!úœ8}6ą1•Ų!O‚/'dá06aVBŨ˜P9† ŗ§ømČMõÎu5{ōģ=ģh„aÍb%O†$ ˛öį_}MöíËWļû^ôļ;™g25ņ]zO˛ē†‡‡ÃÁį S›Ųđ~ÉßŗI@D_Î(üÕĨ„'Ŧ“ÖCEörėršČ5ŖÍųÛĪŗ.]ˇ[žm†ÍL˙ķķ#ä%WjÖŦXGx’­´6Fė˛m†õΨf™^%ŋ°´sŪ§ä&ׄšĪ7ŦôGÛ0­î‘ö뙚h‘B¸<”€ åš%AY3ũu¨¤öˇÛMÜ^,ÃZSĨNĄ†ûũžUgķ‚kE“|1`ۀūZjVâĶŊ×Ƀn,6˛ŽæSī”ŠI{`Ŧ#XŅ4ˇ=ÜȞĒŧi“ƒíGØĩL°ãlw>ąiš^¯°=l ō0™š˜ÃÔvÁƒ‡^ąäš| ‘žáFNŋõrXõMĨŨNßÁnúëģ¯*…įY›AHš•2aÆ|övšâ…ÍĶyЃԟCۗ•LMlÅB˛4‡úâ‡5“ÚȲØô’jR0/ߞP^Ģ ĀGũÂ;ŸgĸŽW›Ė{V, nd…„ē‚ĖäüįFÉZG^7NUƒ‚HĮ’Š}ī3ܒ˛ęčnˇÛãŽøooˈI—АM­NĄ›Y4ŪötnąlQ–vŊၡͰ4 QÂ+D°böFĮá=*|VŖ—Z¸ūy/“#‡…€šøž§Ĩ÷bx猪d–3Đ‹Ė’~WĘ>Ģ7øûh;k25Ņ›(ÉĘŅ+~oĶv/}Ošū֙a,X„6ÂÅ3ü˛u)¨­0”ÎøÂÛąôIŒ( Ĩōčˆyrԑ I9„ŽrļņøĪŊ‘xsoķĨAŋü ęė…djbƒLíŊQŧYĐGŸŠCųÔsG(“g ‘­Im6|HažBKgp˙›t˛ēŧĨÚh9ÖB\“ŦÉ3 BŗŲy+ôņ 7KīaäC¸XSũp'ķ~´; ™š¸Ī[~áÂ6gšr_͒™|ĒVÂꚖÔa3 ŌPKÔSÄlštI6?( œ¤ÔzŌlɆĨš3…Ãĸī×zöûÁž”ŠLũ6ĩ,Ã}eëÄJ”>ÆDŪđBSæ×ĐGuūÅidŒō&QdXTsĒ|ÛtōZ¯~ØŲ 3ŒU ž‹Ÿ>¤+Íųō–|]p5˜`˛z<‡%˛­ĪÎu¤šŸ5mÄŪkŠ_l3ˇiķĮ:ßņë+•ŲË/Āė5CŽūŦˇŦQRÕC'trYí|#S¯tb‘ȏÄ3 b›LMjXįKU#ßAŧĖMNąvЛœ ‚LMAŠÁâ"ąUPOMA™š2,Aej‚ ĘÔA™š ‚ SAŠ ‚ 2õ3AC‚ ČÔĀÔ$k‚ ČÔĢCžąfОš ‚25AÄēą~å'sžņÕĐÄ4kVRĻ&ˆ¸ˆÍŋ\25ąüÔ˙”Ų/i׋\’Ąõx<’ŦˇŠƒÁšÛIíĮëáIœ($ō–ŦĪa“ÎįķívÛī÷5 žŊĮãQū/™ŗa­jG†ažpo˜Ŧ×ßHÚ~ŦW,Ŋ\.Bvį÷<ĸx;9žĪgmķJvŽQšļĩ`_öŖejØ>i“ú‘¸+ƒ¤÷Øī÷×ëõ~ŋ_¯×⅞N§wĩ\Û í\'tôN§Œ¤ l§ĶIūŗū5gÔ~ŋ×Ŋq’ķ@=õębVšŗ¸Ũn"/‹|ˇßīOŋ`9å]jbå×)„Št){žHũ–ŦUö<NįķŲöčŲŨyjųįķųzŊĘÄÖŪžÚ}û ÜŦVčŽ×Ģå_+Y{™(” ßx°˛ÛǤQi$4 1zvÅāķ:"{í“ʇbeĒė÷û-œ>ô´Ŧ$ĮžRa{*%ĘŅ -Å.8ŋ L]‹´>yÆÂĶÖLmŋĩ›Ĩß˙ėĘΚí‘ÅhKíö‡q‡#SŧG-\õfÚŲÍS™ú‰<õåŗäeģ,3ĄĪŽáZ¯ĒXr‘˙ 5ËȇSŠ0S˛gG“ŧϊĸSÃĶÜ˙d0åC[‚īŠũ6ĢÚ~žŊA?VúNŗ)a_ī:™zÂ"§ęC—bÍ&…t.E`O‹ĀD¨/üũUØ$ØZü}Š=[øÚ›-„ģÄߖAÂÔĐHí‚Oߑú¨ak×r|ÉŲk˛UdûˇŠđÚ0h!×™šxTû.隈ëSŧ—sCR–á~r’æEŧQłįA8@c´‘ķZ8:ūæ&¤H¯ šŪH¨q[āĪFžîũ‡ž;Vã[UÚ~Ŧ—ËŚ6°ŪŪCÖĒxÜXģėЌD?Ė,OšæˇŪÄ[ -ÂåIĩF(.ô}ËũEķęßÖuģŨôWEĪįŗūJr8lĢė3đųívģ čĻ/GۈXÄë‡ÚBŋƒģgØ.čØjÚ6­…ë‹ļÄ P͎ؖ&āšĢEõąđ€˛ö¤ÆÃIÜ7”ŧ @÷fŋpžČdĪŠ—PFUøfb¸(|jmģ?XšÛ×jĨu™0€aĩÄCúz ëS,K4䊐”­Ō|Æ6ZPxĻ–ŗ9čd}Õ!sŲžLÕ2A5S‡] ĩįū=úÛŋÂø¤˙6ŗĮ`dšvAĩÄĪ—ķųœÉץ:Âü3WrUJdgųIZŽ*t âoōĘķ¸TZ o§ ĩ×ūĪĪ(‚˛Wfŋ _Ĩ~¨e†ce?ũ‰Æ!°-ŅqqĄ}ČÔk$ëI>W kÎ$ÔÉžÆŗK›¤ä%˙֘žę‘Æ ëõC/Í´Ŧ|ø°nCČãÍK@Ydô™š˜É Â\Įã„2]]°ūáÖNDÔz ûģ)¨ÅŽäūĒļåû„&zÁõˆT>D–ÅđJ|"‰ĐÔĄQ'ŲßWšœøoÂ$2Å'^ēœŨîdjbS+GÛB–=ģŲExģŨ.—KŊøUāō JC, ŋžĨz¤ƒyŊ^ikŧΡO{jb]đ>„šXĨđét]ŪûŲyv/îņÆˇ˙布C°B¨3Â(ķĒķ÷—,Œe}4(÷Ÿj?ˆīŨ/—‹¸kĢ‰Ú‚25AŦˇÛM¯ûĄõâÅ žšøRØûQ÷“ωՂÚbŧذdŲfŋ K¸™ LMlœŠ?‘æŦõCĘ”Љ…iqmŌë‡ĘÔ<š›•ŠyB$jᔇƒĮɚ ,hûAÜđˆ-ĘԜIkXĪ„¯’j)h9¨§&ˆĪØ9¸=SĻ&‚§(‚25Aš ĘÔĘz=Ąb—ØhûAlđxNŅžØ¨ũ ‚X;¨ũ ‚ SAdj‚ 25AAĻ&‚ ČÔAdj"ƧdĄĢČ(ÎįķnˇÛívšū5īe÷ ĪKt á·Ãų|æ4X'hOũOõN6=§%ûĩütœ§ļaÁž Ünˇũ~>ŸĨĘŨĖ„¯rHR˜˙üüĮeŗ›īv˙ČRĪ[ĒŌōTDĖÆû}­ÔiyjŠé~8$ųô~ŋŋŨn~ę"lʕ2­-Š…• ÷IŊŖÅęRŪTŽžėn'ÕirîÛí&ģ…]ē+‰˜,Æ[#CRâ/eqiô|>Ë4{ö^~8Ž×Ģ”¯s€ä¸.Üß Í Øī÷§ĶÉ?:N§Ķõzí~: LûíõzĩŲŠ§–6Šųk´Ėëõ -ÔZ$mvV׃€ņŅg#ö.Ø!}ŌPŒŽR§‘Í)Ô¯T <NvFų—"ÍĢ] —9&ĩ„å\¯×ūē#Į°†å',R6,ËI$bö?ĸúSPŲ-û‰ŦØŠL‹š÷$zŌJ-eËēG‹ĪXɖĨa3~8›[õEø'áį5—Me:˙p7õëBF>—ŸÛ ǐŪŦÜ@˛ū:ĻV:°ÔÄ ĶBŗ?ĨÔĶ/Lō‘%M¨ČĪxŋa匒‚•Ą`­NĨ¤žpgĮŽē‰6Į¤™šŋF‰^[ĸ|1ûč#īČ˒MYŲŽOx*Ō lĮvS[žļ’5”ˇJâvüĒąü[Ŧŋ6IÖ_ÄÔ0ŗí,Ļĩ˛aČ# Yž2ÕÉ ėŖâÔĨ˛IøŧNtû+Ũ' Âōt`WŽtŲŽ"(_— Č!?Ú6ÛJaŨ† [žˇRŦęP•¤Ņ^ģA/<ąÖâdį8Ĩ?ÉÕlĢÎ^ļa0z瑨Á´åL•cŧ˜ŽgÛú…ÂYĄ‡¯€ØSÛU rt6'üOŠ“=Ŗdį} S쑨5æ%qHuęûÖfLéĩŊ„kåA}ØvÄë1ü>jŸŧæéX†1)Ž`¸˛!˛Z—ē¤Ų“ôõZTV#uö^ÂíG…eûRŠáōÄ=I”ņ]ļõęöéÉ7{ŋ0ÃeGŠĮ‚ˇ`ž2}Ų;†í0uļ€ }œŦ˜1đ°…āœŪ§A úXĻ3 Ø=OxPȘēĶ<8¨¯žÂũ ¸Æ’Ņœ‡AŽ •Zģ•ĶŲũ(͸ׂd}2ķ{6”/o6,ÉæZ K˙ˇīĢy;õéöSܡę¨õ~ĻΖˇ7ōˇķU˜ą9 u?°åû6؅‘5ĩ˜ŦĘzö­´éŅ#œROÁŅv¤đ|ÉEŋ…rāOuq ĮM€šŽ<:ú¤đˆ=õũžuˇÛęRsØöEūo_ßŧēdf†ŗN T7•'t÷ĒwppÄ3ˊAĄûåår‘—Hwķ/bj%5™ ”€‰˛•>Ü'ëbé†dZ°RA4"˜ŸN'K4ĐÍBĪĶ—ÂŧHÛßNņRŦÄW˛Ÿüx ͆ŧŽKuŋĖl Wëč ]]ÅhČ$ĻŽéŨ hˇH<ĻÅ=š!ŦÕ¤fø‘>āAŒĖ†ĩę„˙%÷cɈ zt~¯!ƒ,Î[2ĨhtoEĢf]ÕÍ~iÔCŋtXCŖcÛČԏčy|ëĩy~m|QĶŲ˙ôi”›[NR°û2}ēwÆi!SŋTDõ)ą§ )/™4i‘¯ų@ÆYpT į‹Fbä‡tЗŠ}Fög}2!ÂRûĀĶ}™ĒŠĶgpKĨC ˜%I°ĄŌ!ˆngŸ\ę™pšY1œá´ČÔī‘OeÚÕJÁh– íbžt4ΤN_o‡Ņ|īQúŒ"Ą†]ɖ/ ĀȖÅĻF‹ĩ´åyHÖĮËYĖ>lˇœ~*‰Ld‡†Bv¸{] ļbĩß*úãlŸņpÆÔa†„5K3ÄϘÚ'7\MáI3ŖČxŌÔ}׿1™T…mļŨŠQĄā™ÕYĩîŋëŦ'éjŦęiTI ō<…L­ hČāEČIŅÆA¯íeęp¨;û(čjD–BŦš1č¨ÖLfŒķ2 Ézķxŋí‡ĩ1„öjˆ&+D"ė“6ËĒ&NöWđjų šSÃK|K‚š#U˛wیԅÉTaƒŦ%[Þ:ĶšDøS}Ž.Q;2āø cōsé”Íĩ:j$`JXCŖë‰•Åđ+U9Ø˙YĢŠąČe)Y;Vn6ˇ,d:ī˜ĻŧĀ:BĖ–äEûģÖReČã#Öũ˛ŲĮí Ņ˙ˆļ/ĢŊŽ>÷™FU(ŗ‚= …‰­%”ŅŧÖdjHÉXÔžŲCInąÂ;ĖėĪėųž:8“Öá@ÚĸĀoA؄Į@*l6lpųv3}ˆæxëe2u8%™āÛStÄ>ī3Ŋezö°ŗkN‚AlDĻ.ÄŌÃáĨī’ĮTBQaÄKs"BGøˆ6"ĢfI T’Ē7]ÏËw~dd7˛Ōēm’.éŠļˇŲ¸†Ė†÷h­āUę´Ŋ˜Ô0Û*™^S$5vŽ/ˊÛRQ‘GXģl{qš\ÂĄögAûĸõ-ƒ|Ũtt">Ģ`ę‚F›~%25ī÷ûŒc`­Ņ…Ôq„ĢéÆ ûtv†ËYțvë*öŧŲÃ^†’ˆdÉFÕî"ķÚ&ĩčXUO“…­îČ7fˆö+düŸŸŸËåR'ÍŅ΁Ĩ:ĢVŌoU(J-‘‘(˜ k2õ?đ /‚øļ%°†ųīõĒ­ö"õ?ĸ6q{ØĘĩ˙Žŗvo‚øfIåSVhMr‰ldęßŪ1ɚ Öš6%*÷h‚ˆ~ 25A”Tž°•ö$üŸÛŋČÔA|Ā."˙ą7‡–—­VÚ&?jĻą_?xŖHÄ0õ~ŋCiɈ~1ōáöF€25AkM曉ՀÛíV¤!ŪĖÍ™š ˆĩĐôņx”džģŨŽļ߀lÔō°M•ˇ1ĻĻöƒ ˆĩĐ´ũDėŖ­+šđ˛R°č õŽQĸW[õétÚ S¯.–Aß ëŽĸ°õFŖ]ZēŸsÍ öƒ ˆĩ0õ0 Uˍ;4=ã<}ēPĻ&b-Īo!\‘ŽEĻnÚzkhŊķųŧ1/625ņĢWL8ßöŪ‡‰W‚ŨCĻ&ļšh bK žšøŖ 25AąjPûAA™š ÂöBYej‚ ĘÔA™š ‚ SAŠ ‚ 25ņm AĻ&’5AŦ´Ō#ˆ˙ã@PĻ&ˆõŌ4…t‚25AA™š ‚LM|-¨ ˆ5€Ú‚ ĘÔA™š ‚LMAŠ ‚ 25AÄįâ˙UöZƒáIh-IENDŽB`‚leptonica-1.86.0/prog/gifio_reg.c000066400000000000000000000172021506303110300166230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * gifio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossless read/write * I/O in gif format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in gif format for * varioius depths. * * The relative times for writing of gif and png are interesting. * * For 1 bpp: * * png writing is about 2x faster than gif writing, using giflib. * * For 32 bpp, using a 1 Mpix rgb image: * * png: Lossless: 1.16 sec (2.0 MB output file) * Lossy: 0.43 sec, composed of: * 0.22 sec (octree quant with dithering) * 0.21 sec (to compress and write out) * * gif: Lossy: 0.34 sec, composed of: * 0.22 sec (octree quant with dithering) * 0.12 sec (to compress and write out) * (note: no lossless mode; gif can't write out rgb) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #if HAVE_LIBGIF || HAVE_LIBUNGIF #include "gif_lib.h" #endif /* HAVE_LIBGIF || HAVE_LIBUNGIF */ #define FILE_1BPP "feyn.tif" #define FILE_2BPP "weasel2.4g.png" #define FILE_4BPP "weasel4.16c.png" #define FILE_8BPP_1 "dreyfus8.png" #define FILE_8BPP_2 "weasel8.240c.png" #define FILE_8BPP_3 "test8.jpg" #define FILE_16BPP "test16.tif" #define FILE_32BPP "marge.jpg" static void test_gif(const char *fname, PIXA *pixa, L_REGPARAMS *rp); static l_int32 test_mem_gif(const char *fname, l_int32 index); int main(int argc, char **argv) { char buf[64]; l_int32 success; PIX *pix; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; #if !HAVE_LIBGIF && !HAVE_LIBUNGIF lept_stderr("gifio is not enabled\n" "libgif or libungif are required for gifio_reg\n" "See environ.h: #define HAVE_LIBGIF or HAVE_LIBUNGIF 1\n" "See prog/Makefile: link in -lgif or -lungif\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ /* 5.1+ and not 5.1.2 */ snprintf(buf, sizeof(buf), "%s_reg", rp->testname); #if (GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)) L_ERROR("Require giflib-5.1 or later.\n", buf); return 1; #endif /* < 5.1 */ #if GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 1 && GIFLIB_RELEASE == 2 /* 5.1.2 */ L_ERROR("Can't use giflib-5.1.2; suggest 5.1.3 or later.\n", buf); return 1; #endif /* 5.1.2 */ /* Set up for display output */ pixa = (rp->display) ? pixaCreate(0) : NULL; lept_rmdir("lept/gif"); lept_mkdir("lept/gif"); /* ------------ Part 1: Test lossless r/w to file ------------*/ test_gif(FILE_1BPP, pixa, rp); test_gif(FILE_2BPP, pixa, rp); test_gif(FILE_4BPP, pixa, rp); test_gif(FILE_8BPP_1, pixa, rp); test_gif(FILE_8BPP_2, pixa, rp); test_gif(FILE_8BPP_3, pixa, rp); test_gif(FILE_16BPP, pixa, rp); test_gif(FILE_32BPP, pixa, rp); if (rp->success) lept_stderr("\n ****** Success on lossless r/w to file *****\n\n"); else lept_stderr("\n ***** Failure on at least one r/w to file ****\n\n"); if (rp->display) { pix = pixaDisplayTiledAndScaled(pixa, 32, 450, 3, 0, 20, 2); pixWrite("/tmp/lept/gif/giftest.jpg", pix, IFF_JFIF_JPEG); pixDisplay(pix, 100, 100); pixDestroy(&pix); pixaDestroy(&pixa); } /* ------------ Part 2: Test lossless r/w to memory ------------ */ success = TRUE; if (test_mem_gif(FILE_1BPP, 0)) success = FALSE; if (test_mem_gif(FILE_2BPP, 1)) success = FALSE; if (test_mem_gif(FILE_4BPP, 2)) success = FALSE; if (test_mem_gif(FILE_8BPP_1, 3)) success = FALSE; if (test_mem_gif(FILE_8BPP_2, 4)) success = FALSE; if (test_mem_gif(FILE_8BPP_3, 5)) success = FALSE; if (test_mem_gif(FILE_16BPP, 6)) success = FALSE; if (test_mem_gif(FILE_32BPP, 7)) success = FALSE; if (success) lept_stderr("\n ****** Success on lossless r/w to memory *****\n\n"); else lept_stderr("\n **** Failure on at least one r/w to memory ****\n\n"); /* Success only if all tests are passed */ if (rp->success == TRUE) rp->success = success; return regTestCleanup(rp); } static void test_gif(const char *fname, PIXA *pixa, L_REGPARAMS *rp) { char buf[256]; l_int32 same; PIX *pixs, *pix1, *pix2; pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/lept/gif/gifio-a.%d.gif", rp->index + 1); pixWrite(buf, pixs, IFF_GIF); pix1 = pixRead(buf); snprintf(buf, sizeof(buf), "/tmp/lept/gif/gifio-b.%d.gif", rp->index + 1); pixWrite(buf, pix1, IFF_GIF); pix2 = pixRead(buf); regTestWritePixAndCheck(rp, pix2, IFF_GIF); pixEqual(pixs, pix2, &same); if (!same && rp->index < 6) { lept_stderr("Error for %s\n", fname); rp->success = FALSE; } if (rp->display) { lept_stderr(" depth: pixs = %d, pix1 = %d\n", pixGetDepth(pixs), pixGetDepth(pix1)); pixaAddPix(pixa, pix2, L_CLONE); } pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); return; } /* Returns 1 on error */ static l_int32 test_mem_gif(const char *fname, l_int32 index) { l_uint8 *data = NULL; l_int32 same; size_t size = 0; PIX *pixs; PIX *pixd = NULL; if ((pixs = pixRead(fname)) == NULL) { lept_stderr("Failure to read gif file: %s\n", fname); return 1; } if (pixWriteMem(&data, &size, pixs, IFF_GIF)) { lept_stderr("Mem gif write fail on image %d\n", index); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { lept_stderr("Mem gif read fail on image %d\n", index); lept_free(data); return 1; } pixEqual(pixs, pixd, &same); pixDestroy(&pixs); pixDestroy(&pixd); lept_free(data); if (!same && index < 6) { lept_stderr("Mem gif write/read fail for file %s\n", fname); return 1; } else return 0; } leptonica-1.86.0/prog/google-searchbox.png000066400000000000000000000066001506303110300204630ustar00rootroot00000000000000‰PNG  IHDR€1%vQ)gAMAą üaPLTEøøøŗŅđŌŋ§IßF0|ŠŠöööÕĢ÷ĩĢ­™‹T2dĐũō¯b™eĖ´ąåäåšæŧđđđj ŗŗŗŊŧŊ„ÎũđlöČg‡ĮĒŧãNÅT…äėųĒ•ÁüüüĮÆÆĄ Ÿ,[šĶ-ŨŨŨķiVŸš÷–‡’ļ™™™ŦĒ̊oīĖ2'HÕãúr{’–ĻÅEŠ!YŌ˛&o]Jļ˙éæĩēÆQÄîîîÉÔëÁˇ“:ŒSh—ááá5Go­Í¯j•ęččč§4#ĘŠ)/ošĮ儤į‰ŦŽĩ͎…ĀĀÁDtŲCkŊ“spōĻœØžTĘÉÉŽŌ’Á›üöŪ˛ŨxŖōÖÖÖpÍuØØØœ‘k:eŊÎÎÎÃÖøÔĖ˔ƒ‚ŌŅŅw•ŌúÛÖqšėššķŪXFˇŅøæWCļËôY†äåĘÆˇˆ‚˙˙į˛{sŋēŦãˇšŦĐģĢĒÅ9&Ž)––ÖÛæü}jĢŗÆōöüHqÂöæœIVr‚4)¤Āõju{äõ倇Šņ?U‡U{Åėōũ@œîååŖ­ÃŋD3f~ŗÆĘĶ3]ēüÉÂûŨūũņûĶÍ´UHŒąôęäʧŒ!Ĩ´ÔdŽčqHBūūūåßĘe‰ØœÕŪķ‹•‹P|ŲDeŦ$MĨ9]¨@mÍÄWÉ]ēĢpukDĘĀŋ¨ĻĻ˙ũúž›™ËĘĘûâßNrOˇĩļõøũ’•ž<ēCSnŠKzā“”—ūųųU‚āgœōŸ ĨũũũÍaQāßŪĀëÂČġÄÃÃėëëÜÛÛš¸¸‘ĻŅßßß°¯°tŒžĮĮĮ–ąí˛ŗˇđ×w4Ž;ķķķöôōÄqf–ᛓ “ÂÃÆ˙ô"ßåđåāā’|$îėæĸĨ¯ŽĢĄĄ‚ĀÅĪËÖËÍÔâųũúûüūØŲŨÕŌĮņøņŽĢëũūũüũ˙˙ũũ˙˙ũéëđĖÉÁåãß˙˙Ī“^V“`Ytžī‰‘Ĩŗŋؗ‰U–|ĶŊiLpģÕÔÔn×ĖĖĖ˙˙˙Æŋ&ģ8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I ÔIDATxœí˜{\SįĮO: *č1$TāĀKP ‚ƒDĸŅ .EŒ˜ AĀkUÄŠxÁ ŅĒõ’V§(kéŧTĨSĢĻ]s‘xfwÖníēÖÎŨœ[wĶŽĢåėyr“‹8ŨgûŖīGųœüŪ÷<Ī÷<ĪsŪķœC°˙ãA| đ PũÆS0ŋéߟ5`üānōųIEßŨ9øÜûŸ5ëŲ!CÆĻĮˆ.ɕÖ;zŦ^š™z*{áoŸ`Đ Y?2āę5@Een}mõ/ŦjãĶÚ ™ŠŠĮŖž Ū¯4¤˙Fĩ­×HžŠĢšėhĐzƒ>Îņé8iĻQYŨ=ū#ˆg~úJ=p*ų*juŠZC×fWו­V›å?&`7Āf-ÕK€čĢēŦkâvoÆ(ŪŲúË-äālļ÷`Āāܖ\åfŗžņ“Æ 7; žd¯Āßö`~v}VcĪÚBjėO´WšÚē¯A€7öæ*7ōɀÅf´ßŠægv6Ÿ40#44tÆCš×â]7€ŧÃæéŨpžëˆƒå˜ g^P^nâÚđáŧ=Ŋ´ŧĻĻĶ>€äWRĄpä~ûй…ķ FM„H 3{ŲĻ/H ›& .?ķjëā×Wōb¸ÛdqŊR Z!6YÛíļĀîÄp7? įs/ÜšķWęęŽl)1~I [Ļ:¤đ&pæÚ1@?¯‘—ū•}"˙YW+.)[ÅžœÁ ė˙ûEˆ÷t—‰1ˇwÖ,‚ Æ‘ĶƒT˙đÖ(\|ëŸ^-Ōhgj%ã(ėco}ĢßĶķ‚bŪ]´f~TQĻTb\ãEäĘõ֌+ОŦÅ<\øŪ§ú™ǃbr.ü-4bDēXN /ĘdÆW aWīcvļQ^€ˇ@åŋ˙tĀ’uRФūļˆáņ>.vmÔ;p~?ĪcbXMØ4ĮhęģÁyˇÆz´ÁÁé›6–k¸ßZõõŊ{u)--ŽĮh€iŠgûę €X#…qa•Ÿ´íXšėⴘ˜ ŋtk§Wl„.ëåŧ<Ξŋēƒú⎯ae´ŗō–Ō"t™î`ˇ—A‡Ā/ûŅÃ% ˆō)ÅnîȘ˜=?ÃŌ‰ÕiE-°™rĮr8œī¸´?æŧ&âģ6XÂ&Üq)U’”áļ<šŌŸ1.ĄĄ|:˙AG9DV~#…@J÷ƒ“Mŗœ4wî!ąSđ€įë:nø,<ģÚųō¯MXáõD ÖÛy”k†! qVēŨĐæū‡‰¨fם]ĶŪN;Ėg%RIŌ*(RCާ-Œ°Iāp¨õrƯëéÜqR ŠÕ€gUcĐļ)ÂįŽāōx Đ3hķ¯^Hq´¨õZ{ŨG*•õaX“Åd˛X,îˆS¯“ŽZ^E0x%— ë`ÛĖãYfžÁįQLÁLYĢüŅįD!ɲ(ŸĘ÷‰‘{kÃĄ§ēWŋŪėšˆß…ČÖŨŌŦĐE†Ŗ2–ĨÉĩ×I¯9•†bÉNįD Ų’E’*_OG‘mÔŦM¯eãE"­H$˛ōâ;Y @ēpmCųų•E¯E[ŖŨz<KB(Âņ•meÃņaŌm…øčưųH§€Ÿ„H“ÔŪļžâ¸ō2ė¤HΊ°_øŖY{ĮēÃØ×ÔX:r­~ę <‹SŽEV{ ķu;PxÚ_ĘĸPxS8ú #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 d; BOX *box1, *box2, *box3, *box4; BOXA *boxa; PIX *pixs, *pix1; PTA *pta; if (argc != 3) return ERROR_INT(" Syntax: graphicstest filein fileout", __func__, 1); filein = argv[1]; fileout = argv[2]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT(" Syntax: pixs not made", __func__, 1); d = pixGetDepth(pixs); if (d <= 8) pix1 = pixConvertTo32(pixs); else pix1 = pixClone(pixs); /* Paint on RGB */ pixRenderLineArb(pix1, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pix1, 30, 40, 440, 40, 5, 100, 200, 25); pixRenderLineBlend(pix1, 30, 60, 440, 70, 5, 115, 200, 120, 0.3); pixRenderLineBlend(pix1, 30, 600, 440, 670, 9, 215, 115, 30, 0.5); pixRenderLineBlend(pix1, 130, 700, 540, 770, 9, 255, 255, 250, 0.4); pixRenderLineBlend(pix1, 130, 800, 540, 870, 9, 0, 0, 0, 0.4); box1 = boxCreate(70, 80, 300, 245); box2 = boxCreate(470, 180, 150, 205); box3 = boxCreate(520, 220, 160, 220); box4 = boxCreate(570, 260, 160, 220); boxa = boxaCreate(3); boxaAddBox(boxa, box2, L_INSERT); boxaAddBox(boxa, box3, L_INSERT); boxaAddBox(boxa, box4, L_INSERT); pixRenderBoxArb(pix1, box1, 3, 200, 200, 25); pixRenderBoxaBlend(pix1, boxa, 17, 200, 200, 25, 0.4, 1); pta = ptaCreate(5); ptaAddPt(pta, 250, 300); ptaAddPt(pta, 350, 450); ptaAddPt(pta, 400, 600); ptaAddPt(pta, 212, 512); ptaAddPt(pta, 180, 375); pixRenderPolylineBlend(pix1, pta, 17, 25, 200, 200, 0.5, 1, 1); pixWrite(fileout, pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 200, 200); pixDestroy(&pixs); pixDestroy(&pix1); boxDestroy(&box1); boxaDestroy(&boxa); ptaDestroy(&pta); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/gray-alpha.tif000066400000000000000000000006321506303110300172550ustar00rootroot00000000000000II*ˆxÚíĪ 0°;ŋt°ŅÕAįŋĻĨ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡Ĩ‡åĘcšä•9dd d€)=>Š?ZR˙ ×Ŗ˙˙˙˙ázT˙˙˙˙˙ĖĖL˙˙˙˙˙™™™˙˙˙˙ff&˙˙˙˙ī(\˙˙˙˙ P˙˙˙˙˙W9T˙˙˙˙leptonica-1.86.0/prog/grayfill_reg.c000066400000000000000000000170541506303110300173440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * grayfill_reg.c * * Regression test for gray filling operations */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void PixTestEqual(L_REGPARAMS *rp, PIX *pixs1, PIX *pixs2, PIX *pixm, l_int32 set, l_int32 connectivity); int main(int argc, char **argv) { l_int32 i, j; PIX *pixm, *pixmi, *pixs1, *pixs1_8, *pix1; PIX *pixs2, *pixs2_8, *pixs3, *pixs3_8; PIX *pixb1, *pixb2, *pixb3, *pixmin; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Mask */ pixm = pixCreate(200, 200, 8); for (i = 0; i < 200; i++) for (j = 0; j < 200; j++) pixSetPixel(pixm, j, i, 20 + L_ABS((100 - i) * (100 - j)) / 50); pixmi = pixInvert(NULL, pixm); /* Seed1 */ pixs1 = pixCreate(200, 200, 8); for (i = 99; i <= 101; i++) for (j = 99; j <= 101; j++) pixSetPixel(pixs1, j, i, 50 - i/100 - j/100); pixs1_8 = pixCopy(NULL, pixs1); /* Seed2 */ pixs2 = pixCreate(200, 200, 8); for (i = 99; i <= 101; i++) for (j = 99; j <= 101; j++) pixSetPixel(pixs2, j, i, 205 - i/100 - j/100); pixs2_8 = pixCopy(NULL, pixs2); /* Inverse grayscale fill */ pixa = pixaCreate(0); pixaAddPix(pixa, pixm, L_COPY); regTestWritePixAndCheck(rp, pixm, IFF_PNG); /* 0 */ pixaAddPix(pixa, pixs1, L_COPY); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); /* 1 */ pixSeedfillGrayInv(pixs1, pixm, 4); pixSeedfillGrayInv(pixs1_8, pixm, 8); pixaAddPix(pixa, pixs1, L_COPY); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixs1_8, L_COPY); regTestWritePixAndCheck(rp, pixs1_8, IFF_PNG); /* 3 */ pixb1 = pixThresholdToBinary(pixs1, 20); pixaAddPix(pixa, pixb1, L_COPY); regTestWritePixAndCheck(rp, pixb1, IFF_PNG); /* 4 */ pixCombineMasked(pixs1, pixm, pixb1); pixaAddPix(pixa, pixs1, L_COPY); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); /* 5 */ pix1 = pixaDisplayTiledInColumns(pixa, 6, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix1, 100, 0, "inverse gray fill", rp->display); pixDestroy(&pixs1); pixDestroy(&pixs1_8); pixDestroy(&pixb1); pixDestroy(&pix1); pixaDestroy(&pixa); /* Standard grayscale fill */ pixa = pixaCreate(0); pixaAddPix(pixa, pixmi, L_COPY); regTestWritePixAndCheck(rp, pixmi, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixs2, L_COPY); regTestWritePixAndCheck(rp, pixs2, IFF_PNG); /* 8 */ pixSeedfillGray(pixs2, pixmi, 4); pixSeedfillGray(pixs2_8, pixmi, 8); pixaAddPix(pixa, pixs2, L_COPY); regTestWritePixAndCheck(rp, pixs2, IFF_PNG); /* 9 */ pixaAddPix(pixa, pixs2_8, L_COPY); regTestWritePixAndCheck(rp, pixs2_8, IFF_PNG); /* 10 */ pixb2 = pixThresholdToBinary(pixs2, 205); regTestWritePixAndCheck(rp, pixb2, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixb2, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 5, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 100, 200, "standard gray fill", rp->display); pixDestroy(&pixs2); pixDestroy(&pixs2_8); pixDestroy(&pix1); pixaDestroy(&pixa); /* Basin fill from minima as seed */ pixa = pixaCreate(0); pixaAddPix(pixa, pixm, L_COPY); regTestWritePixAndCheck(rp, pixm, IFF_PNG); /* 13 */ pixLocalExtrema(pixm, 0, 0, &pixmin, NULL); pixaAddPix(pixa, pixmin, L_COPY); regTestWritePixAndCheck(rp, pixmin, IFF_PNG); /* 14 */ pixs3 = pixSeedfillGrayBasin(pixmin, pixm, 30, 4); pixs3_8 = pixSeedfillGrayBasin(pixmin, pixm, 30, 8); pixaAddPix(pixa, pixs3, L_INSERT); regTestWritePixAndCheck(rp, pixs3, IFF_PNG); /* 15 */ pixaAddPix(pixa, pixs3_8, L_INSERT); regTestWritePixAndCheck(rp, pixs3_8, IFF_PNG); /* 15 */ pixb3 = pixThresholdToBinary(pixs3, 60); regTestWritePixAndCheck(rp, pixb3, IFF_PNG); /* 17 */ pixaAddPix(pixa, pixb3, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 5, 1.0, 15, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ pixDisplayWithTitle(pix1, 100, 400, "gray fill form seed", rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); /* Compare hybrid and iterative gray seedfills */ pixs1 = pixCopy(NULL, pixm); pixs2 = pixCopy(NULL, pixm); pixAddConstantGray(pixs1, -30); pixAddConstantGray(pixs2, 60); PixTestEqual(rp, pixs1, pixs2, pixm, 1, 4); /* 19 - 22 */ PixTestEqual(rp, pixs1, pixs2, pixm, 2, 8); /* 23 - 26 */ PixTestEqual(rp, pixs2, pixs1, pixm, 3, 4); /* 27 - 30 */ PixTestEqual(rp, pixs2, pixs1, pixm, 4, 8); /* 31 - 34 */ pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixm); pixDestroy(&pixmi); pixDestroy(&pixmin); return regTestCleanup(rp);; } void PixTestEqual(L_REGPARAMS *rp, PIX *pixs1, PIX *pixs2, PIX *pixm, l_int32 set, l_int32 connectivity) { PIX *pixc11, *pixc12, *pixc21, *pixc22, *pixmi; pixmi = pixInvert(NULL, pixm); pixc11 = pixCopy(NULL, pixs1); pixc12 = pixCopy(NULL, pixs1); pixc21 = pixCopy(NULL, pixs2); pixc22 = pixCopy(NULL, pixs2); /* Test inverse seed filling */ pixSeedfillGrayInv(pixc11, pixm, connectivity); regTestWritePixAndCheck(rp, pixc11, IFF_PNG); /* '1' */ pixSeedfillGrayInvSimple(pixc12, pixm, connectivity); regTestComparePix(rp, pixc11, pixc12); /* '2' */ /* Test seed filling */ pixSeedfillGray(pixc21, pixm, connectivity); regTestWritePixAndCheck(rp, pixc21, IFF_PNG); /* '3' */ pixSeedfillGraySimple(pixc22, pixm, connectivity); regTestComparePix(rp, pixc21, pixc22); /* '4' */ /* Display the filling results */ /* pixDisplay(pixc11, 220 * (set - 1), 100); pixDisplay(pixc21, 220 * (set - 1), 320); */ pixDestroy(&pixmi); pixDestroy(&pixc11); pixDestroy(&pixc12); pixDestroy(&pixc21); pixDestroy(&pixc22); return; } leptonica-1.86.0/prog/graymorph1_reg.c000066400000000000000000000313521506303110300176210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * graymorph1_reg.c * * (1) Tests the interpreter for grayscale morphology, as * given in morphseq.c * * (2) Tests composite operations: tophat and hdome * * (3) Tests duality for grayscale erode/dilate, open/close, * and black/white tophat * * (4) Demonstrates closing plus white tophat. Note that this * combination of operations can be quite useful. * * (5) Demonstrates a method of doing contrast enhancement * by taking 3 * pixs and subtracting from this the * closing and opening of pixs. Do this both with the * basic pix accumulation functions and with the cleaner * Pixacc wrapper. Verify the results are equivalent. * * (6) Playing around: extract the feynman diagrams from * the stamp, using the tophat. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define WSIZE 7 #define HSIZE 7 int main(int argc, char **argv) { char seq[512]; l_int32 w, h; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; PIXACC *pacc; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("aneurisms8.jpg"); pixa = pixaCreate(0); /* =========================================================== */ /* -------- Test gray morph, including interpreter ------------ */ pix1 = pixDilateGray(pixs, WSIZE, HSIZE); snprintf(seq, sizeof(seq), "D%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestComparePix(rp, pix1, pix2); /* 1 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixErodeGray(pixs, WSIZE, HSIZE); snprintf(seq, sizeof(seq), "E%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 100); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ regTestComparePix(rp, pix1, pix2); /* 3 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixOpenGray(pixs, WSIZE, HSIZE); snprintf(seq, sizeof(seq), "O%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 200); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ regTestComparePix(rp, pix1, pix2); /* 5 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixCloseGray(pixs, WSIZE, HSIZE); snprintf(seq, sizeof(seq), "C%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 300); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ regTestComparePix(rp, pix1, pix2); /* 7 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_WHITE); snprintf(seq, sizeof(seq), "Tw%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 400); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ regTestComparePix(rp, pix1, pix2); /* 9 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pix1 = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_BLACK); snprintf(seq, sizeof(seq), "Tb%d.%d", WSIZE, HSIZE); pix2 = pixGrayMorphSequence(pixs, seq, 0, 500); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ regTestComparePix(rp, pix1, pix2); /* 11 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); /* ------------- Test erode/dilate duality -------------- */ pix1 = pixDilateGray(pixs, WSIZE, HSIZE); pix2 = pixInvert(NULL, pixs); pix3 = pixErodeGray(pix2, WSIZE, HSIZE); pixInvert(pix3, pix3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ regTestComparePix(rp, pix1, pix3); /* 13 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* ------------- Test open/close duality -------------- */ pix1 = pixOpenGray(pixs, WSIZE, HSIZE); pix2 = pixInvert(NULL, pixs); pix3 = pixCloseGray(pix2, WSIZE, HSIZE); pixInvert(pix3, pix3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */ regTestComparePix(rp, pix1, pix3); /* 15 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* ------------- Test tophat duality -------------- */ pix1 = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_WHITE); pix2 = pixInvert(NULL, pixs); pix3 = pixTophat(pix2, WSIZE, HSIZE, L_TOPHAT_BLACK); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 16 */ regTestComparePix(rp, pix1, pix3); /* 17 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixGrayMorphSequence(pixs, "Tw9.5", 0, 100); pix2 = pixInvert(NULL, pixs); pix3 = pixGrayMorphSequence(pix2, "Tb9.5", 0, 300); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ regTestComparePix(rp, pix1, pix3); /* 19 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* ------------- Test opening/closing for large sels -------------- */ pix1 = pixGrayMorphSequence(pixs, "C9.9 + C19.19 + C29.29 + C39.39 + C49.49", 0, 100); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 20 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixGrayMorphSequence(pixs, "O9.9 + O19.19 + O29.29 + O39.39 + O49.49", 0, 400); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 21 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 4, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 22 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); /* =========================================================== */ pixa = pixaCreate(0); /* ---------- Closing plus white tophat result ------------ * * Parameters: wsize, hsize = 9, 29 * * ---------------------------------------------------------*/ pix1 = pixCloseGray(pixs, 9, 9); pix2 = pixTophat(pix1, 9, 9, L_TOPHAT_WHITE); pix3 = pixGrayMorphSequence(pixs, "C9.9 + TW9.9", 0, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 23 */ regTestComparePix(rp, pix2, pix3); /* 24 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixMaxDynamicRange(pix2, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 25 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixCloseGray(pixs, 29, 29); pix2 = pixTophat(pix1, 29, 29, L_TOPHAT_WHITE); pix3 = pixGrayMorphSequence(pixs, "C29.29 + Tw29.29", 0, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 26 */ regTestComparePix(rp, pix2, pix3); /* 27 */ pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixMaxDynamicRange(pix2, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 28 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* --------- hdome with parameter height = 100 ------------*/ pix1 = pixHDome(pixs, 100, 4); pix2 = pixMaxDynamicRange(pix1, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 29 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 30 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); /* ----- Contrast enhancement with morph parameters 9, 9 -------*/ pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixInitAccumulate(w, h, 0x8000); pixAccumulate(pix1, pixs, L_ARITH_ADD); pixMultConstAccumulate(pix1, 3., 0x8000); pix2 = pixOpenGray(pixs, 9, 9); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 31 */ pixaAddPix(pixa, pix2, L_INSERT); pixAccumulate(pix1, pix2, L_ARITH_SUBTRACT); pix2 = pixCloseGray(pixs, 9, 9); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 32 */ pixaAddPix(pixa, pix2, L_INSERT); pixAccumulate(pix1, pix2, L_ARITH_SUBTRACT); pix2 = pixFinalAccumulate(pix1, 0x8000, 8); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 33 */ pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); /* Do the same thing with the Pixacc */ pacc = pixaccCreate(w, h, 1); pixaccAdd(pacc, pixs); pixaccMultConst(pacc, 3.); pix1 = pixOpenGray(pixs, 9, 9); pixaccSubtract(pacc, pix1); pixDestroy(&pix1); pix1 = pixCloseGray(pixs, 9, 9); pixaccSubtract(pacc, pix1); pixDestroy(&pix1); pix1 = pixaccFinal(pacc, 8); pixaccDestroy(&pacc); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 34 */ pixaAddPix(pixa, pix1, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 35 */ pix1 = pixaDisplayTiledInColumns(pixa, 4, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 36 */ pixDisplayWithTitle(pix1, 1100, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pixs); /* =========================================================== */ pixa = pixaCreate(0); /* ---- Tophat result on feynman stamp, to extract diagrams ----- */ pixs = pixRead("feynman-stamp.jpg"); pixGetDimensions(pixs, &w, &h, NULL); /* Make output image to hold five intermediate images */ pix1 = pixCreate(5 * w + 18, h + 6, 32); /* composite output image */ pixSetAllArbitrary(pix1, 0x0000ff00); /* set to blue */ /* Paste in the input image */ pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixRasterop(pix1, 3, 3, w, h, PIX_SRC, pix2, 0, 0); /* 1st one */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 37 */ pixaAddPix(pixa, pix2, L_INSERT); /* Paste in the grayscale version */ cmap = pixGetColormap(pixs); if (cmap) pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pix2 = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pix3 = pixConvertTo32(pix2); /* 8 --> 32 bpp */ pixRasterop(pix1, w + 6, 3, w, h, PIX_SRC, pix3, 0, 0); /* 2nd one */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 38 */ pixaAddPix(pixa, pix3, L_INSERT); /* Paste in a log dynamic range scaled version of the white tophat */ pix3 = pixTophat(pix2, 3, 3, L_TOPHAT_WHITE); pix4 = pixMaxDynamicRange(pix3, L_LOG_SCALE); pix5 = pixConvertTo32(pix4); pixRasterop(pix1, 2 * w + 9, 3, w, h, PIX_SRC, pix5, 0, 0); /* 3rd */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 39 */ pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix4); /* Stretch the range and threshold to binary; paste it in */ pix2 = pixGammaTRC(NULL, pix3, 1.0, 0, 80); pix4 = pixThresholdToBinary(pix2, 70); pix5 = pixConvertTo32(pix4); pixRasterop(pix1, 3 * w + 12, 3, w, h, PIX_SRC, pix5, 0, 0); /* 4th */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 40 */ pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* Invert; this is the final result */ pixInvert(pix4, pix4); pix5 = pixConvertTo32(pix4); pixRasterop(pix1, 4 * w + 15, 3, w, h, PIX_SRC, pix5, 0, 0); /* 5th */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 41 */ pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix4); pix1 = pixaDisplayTiledInRows(pixa, 32, 1700, 1.0, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 42 */ pixDisplayWithTitle(pix1, 0, 800, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/graymorph2_reg.c000066400000000000000000000123151506303110300176200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * graymorph2_reg.c * * Compares graymorph results with special (3x1, 1x3, 3x3) cases * against the general case. Require exact equality. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test8.jpg"); /* Dilation */ pixa = pixaCreate(0); pix1 = pixDilateGray3(pixs, 3, 1); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixDilateGray(pixs, 3, 1); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 0 */ pix1 = pixDilateGray3(pixs, 1, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixDilateGray(pixs, 1, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 1 */ pix1 = pixDilateGray3(pixs, 3, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixDilateGray(pixs, 3, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 2 */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); pixDisplayWithTitle(pixd, 0, 100, "Dilation", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Erosion */ pixa = pixaCreate(0); pix1 = pixErodeGray3(pixs, 3, 1); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixErodeGray(pixs, 3, 1); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 3 */ pix1 = pixErodeGray3(pixs, 1, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixErodeGray(pixs, 1, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 4 */ pix1 = pixErodeGray3(pixs, 3, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixErodeGray(pixs, 3, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 5 */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); pixDisplayWithTitle(pixd, 250, 100, "Erosion", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Opening */ pixa = pixaCreate(0); pix1 = pixOpenGray3(pixs, 3, 1); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixOpenGray(pixs, 3, 1); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 6 */ pix1 = pixOpenGray3(pixs, 1, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixOpenGray(pixs, 1, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 7 */ pix1 = pixOpenGray3(pixs, 3, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixOpenGray(pixs, 3, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 8 */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); pixDisplayWithTitle(pixd, 500, 100, "Opening", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Closing */ pixa = pixaCreate(0); pix1 = pixCloseGray3(pixs, 3, 1); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCloseGray(pixs, 3, 1); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 9 */ pix1 = pixCloseGray3(pixs, 1, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCloseGray(pixs, 1, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 10 */ pix1 = pixCloseGray3(pixs, 3, 3); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCloseGray(pixs, 3, 3); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 11 */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 2); pixDisplayWithTitle(pixd, 750, 100, "Closing", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/graymorphtest.c000066400000000000000000000065171506303110300176100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * graymorphtest.c * * Implements basic grayscale morphology; tests speed */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 wsize, hsize, w, h, d; PIX *pixs, *pixd; if (argc != 5) return ERROR_INT(" Syntax: graymorphtest filein wsize hsize fileout", __func__, 1); filein = argv[1]; wsize = atoi(argv[2]); hsize = atoi(argv[3]); fileout = argv[4]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pix not 8 bpp", __func__, 1); /* ---------- Choose an operation ---------- */ #if 1 pixd = pixDilateGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixErodeGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixOpenGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixCloseGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixTophat(pixs, wsize, hsize, TOPHAT_WHITE); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixTophat(pixs, wsize, hsize, TOPHAT_BLACK); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #endif /* ---------- Speed ---------- */ #if 0 startTimer(); pixd = pixCloseGray(pixs, wsize, hsize); lept_stderr(" Speed is %6.2f MPix/sec\n", (l_float32)(4 * w * h) / (1000000. * stopTimer())); pixWrite(fileout, pixd, IFF_PNG); #endif pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/grayquant_reg.c000066400000000000000000000364371506303110300175540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * grayquant_reg.c * * Tests gray thresholding to 1, 2 and 4 bpp, with and without colormaps */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 THRESHOLD = 130; /* nlevels for 4 bpp output; anything between 2 and 16 is allowed */ static const l_int32 NLEVELS = 4; int main(int argc, char **argv) { const char *str; l_int32 index, w, h; BOX *box; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ------------------------------------------------------------- */ pixs = pixRead("test8.jpg"); pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); /* threshold to 1 bpp */ pix1 = pixThresholdToBinary(pixs, THRESHOLD); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ /* dither to 2 bpp, with and without colormap */ pix1 = pixDitherTo2bpp(pixs, 1); pix2 = pixDitherTo2bpp(pixs, 0); pix3 = pixConvertGrayToColormap(pix2); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ if (rp->display) pixcmapWriteStream(stderr, pixGetColormap(pix3)); regTestComparePix(rp, pix1, pix3); /* 4 */ /* threshold to 2 bpp, with and without colormap */ pix1 = pixThresholdTo2bpp(pixs, 4, 1); pix2 = pixThresholdTo2bpp(pixs, 4, 0); pix3 = pixConvertGrayToColormap(pix2); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 6 */ pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 7 */ if (rp->display) pixcmapWriteStream(stderr, pixGetColormap(pix3)); regTestComparePix(rp, pix1, pix3); /* 8 */ pix1 = pixThresholdTo2bpp(pixs, 3, 1); pix2 = pixThresholdTo2bpp(pixs, 3, 0); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 10 */ /* threshold to 4 bpp, with and without colormap */ pix1 = pixThresholdTo4bpp(pixs, 9, 1); pix2 = pixThresholdTo4bpp(pixs, 9, 0); pix3 = pixConvertGrayToColormap(pix2); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 12 */ pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 13 */ if (rp->display) pixcmapWriteStream(stderr, pixGetColormap(pix3)); /* threshold on 8 bpp, with and without colormap */ pix1 = pixThresholdOn8bpp(pixs, 9, 1); pix2 = pixThresholdOn8bpp(pixs, 9, 0); pix3 = pixConvertGrayToColormap(pix2); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 15 */ pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 16 */ if (rp->display) pixcmapWriteStream(stderr, pixGetColormap(pix3)); regTestComparePix(rp, pix1, pix3); /* 17 */ /* Optional display */ if (rp->display) { lept_mkdir("lept/gquant"); pix1 = pixaDisplayTiled(pixa, 2000, 0, 20); pixDisplay(pix1, 100, 100); pixWrite("/tmp/lept/gquant/mosaic1.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixa); /* ------------------------------------------------------------- */ pixs = pixRead("test8.jpg"); pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); /* Highlight 2 bpp with colormap */ pix1 = pixThresholdTo2bpp(pixs, 3, 1); pixaAddPix(pixa, pix1, L_COPY); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pix1, box, 2, 255, 255, 100); boxDestroy(&box); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 19 */ if (rp->display) pixcmapWriteStream(stderr, cmap); /* Test pixThreshold8() */ pix1 = pixThreshold8(pixs, 1, 2, 1); /* cmap */ pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 20 */ pix1 = pixThreshold8(pixs, 1, 2, 0); /* no cmap */ pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 21 */ pix1 = pixThreshold8(pixs, 2, 3, 1); /* highlight one box */ box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pix1, box, 2, 255, 255, 100); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 22 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); boxDestroy(&box); pix1 = pixThreshold8(pixs, 2, 4, 0); /* no cmap */ pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 23 */ pix1 = pixThreshold8(pixs, 4, 6, 1); /* highlight one box */ box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pix1, box, 5, 255, 255, 100); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 24 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); boxDestroy(&box); pix1 = pixThreshold8(pixs, 4, 6, 0); /* no cmap */ pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 25 */ /* Highlight 4 bpp with 2 colormap entries */ /* Note: We use 5 levels (0-4) for gray. */ /* 5 & 6 are used for highlight color. */ pix1 = pixThresholdTo4bpp(pixs, 5, 1); cmap = pixGetColormap(pix1); pixcmapGetIndex(cmap, 255, 255, 255, &index); box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pix1, box, index, 255, 255, 100); /* use index 5 */ pixaAddPix(pixa, pix1, L_COPY); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 26 */ boxDestroy(&box); box = boxCreate(4, 6, 157, 33); pixSetSelectCmap(pix1, box, index, 100, 255, 255); /* use index 6 */ pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 27 */ boxDestroy(&box); if (rp->display) pixcmapWriteStream(stderr, cmap); /* Optional display */ if (rp->display) { pix1 = pixaDisplayTiled(pixa, 2000, 0, 20); pixDisplay(pix1, 200, 100); pixWrite("/tmp/lept/gquant/mosaic2.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixa); /* ------------------------------------------------------------- */ pixs = pixRead("feyn.tif"); pixa = pixaCreate(0); /* Comparison 8 bpp jpeg with 2 bpp (highlight) */ pix1 = pixScaleToGray4(pixs); pix2 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); pix3 = pixThresholdTo2bpp(pix1, 3, 1); box = boxCreate(175, 208, 228, 88); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 28 */ pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 29 */ pixSetSelectCmap(pix3, box, 2, 255, 255, 100); pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 30 */ cmap = pixGetColormap(pix3); if (rp->display) pixcmapWriteStream(stderr, cmap); boxDestroy(&box); /* Thresholding to 4 bpp (highlight); use pix1 from above */ pix2 = pixThresholdTo4bpp(pix1, NLEVELS, 1); box = boxCreate(175, 208, 228, 83); pixSetSelectCmap(pix2, box, NLEVELS - 1, 255, 255, 100); boxDestroy(&box); box = boxCreate(232, 298, 110, 25); pixSetSelectCmap(pix2, box, NLEVELS - 1, 100, 255, 255); boxDestroy(&box); box = boxCreate(21, 698, 246, 82); pixSetSelectCmap(pix2, box, NLEVELS - 1, 225, 100, 255); boxDestroy(&box); pixaAddPix(pixa, pix2, L_INSERT); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 31 */ cmap = pixGetColormap(pix2); if (rp->display) pixcmapWriteStream(stderr, cmap); pix3 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 32 */ /* Thresholding to 4 bpp at 2, 3, 4, 5 and 6 levels */ box = boxCreate(25, 202, 136, 37); pix2 = pixClipRectangle(pix1, box, NULL); pix3 = pixScale(pix2, 6., 6.); pixaAddPix(pixa, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 33 */ pixGetDimensions(pix3, &w, &h, NULL); pix4 = pixCreate(w, 6 * h, 8); pixRasterop(pix4, 0, 0, w, h, PIX_SRC, pix3, 0, 0); pixDestroy(&pix2); boxDestroy(&box); pix5 = pixThresholdTo4bpp(pix3, 6, 1); pix6 = pixRemoveColormap(pix5, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pix4, 0, h, w, h, PIX_SRC, pix6, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 34 */ pixDestroy(&pix6); pix5 = pixThresholdTo4bpp(pix3, 5, 1); pix6 = pixRemoveColormap(pix5, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pix4, 0, 2 * h, w, h, PIX_SRC, pix6, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 35 */ pixDestroy(&pix6); pix5 = pixThresholdTo4bpp(pix3, 4, 1); pix6 = pixRemoveColormap(pix5, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pix4, 0, 3 * h, w, h, PIX_SRC, pix6, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 36 */ pixDestroy(&pix6); pix5 = pixThresholdTo4bpp(pix3, 3, 1); pix6 = pixRemoveColormap(pix5, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pix4, 0, 4 * h, w, h, PIX_SRC, pix6, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 37 */ pixDestroy(&pix6); pix5 = pixThresholdTo4bpp(pix3, 2, 1); pix6 = pixRemoveColormap(pix5, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pix4, 0, 5 * h, w, h, PIX_SRC, pix6, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 38 */ pixDestroy(&pix6); pixaAddPix(pixa, pix4, L_INSERT); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 39 */ /* Optional display */ if (rp->display) { pix1 = pixaDisplayTiled(pixa, 2000, 0, 20); pixDisplay(pix1, 300, 100); pixWrite("/tmp/lept/gquant/mosaic3.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixa); pixDestroy(&pixs); /* ------------------------------------------------------------- */ /* Thresholding with fixed and arbitrary bin boundaries */ pixs = pixRead("stampede2.jpg"); pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 40 */ pix1 = pixThresholdTo4bpp(pixs, 5, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 41 */ pix1 = pixThresholdTo4bpp(pixs, 7, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 42 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); pix1 = pixThresholdTo4bpp(pixs, 11, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 43 */ str = "45 75 115 185"; pix1 = pixThresholdGrayArb(pixs, str, 8, 0, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 44 */ str = "38 65 85 115 160 210"; pix1 = pixThresholdGrayArb(pixs, str, 8, 0, 1, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 45 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); str = "38 60 75 90 110 130 155 185 208 239"; pix1 = pixThresholdGrayArb(pixs, str, 8, 0, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 46 */ str = "45 75 115 185"; pix1 = pixThresholdGrayArb(pixs, str, 0, 1, 0, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 47 */ str = "38 65 85 115 160 210"; pix1 = pixThresholdGrayArb(pixs, str, 0, 1, 0, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 48 */ cmap = pixGetColormap(pix1); if (rp->display) pixcmapWriteStream(stderr, cmap); str = "38 60 75 90 110 130 155 185 208 239"; pix1 = pixThresholdGrayArb(pixs, str, 4, 1, 0, 1); pixaAddPix(pixa, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 49 */ /* Optional display */ if (rp->display) { pix1 = pixaDisplayTiled(pixa, 2000, 0, 20); pixDisplay(pix1, 400, 100); pixWrite("/tmp/lept/gquant/mosaic4.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixa); if (rp->display) { /* Upscale 2x and threshold to 1 bpp */ pixs = pixRead("test8.jpg"); startTimer(); pix1 = pixScaleGray2xLIThresh(pixs, THRESHOLD); lept_stderr(" time for scale/dither = %7.3f sec\n", stopTimer()); pixWrite("/tmp/lept/gquant/upscale1.png", pix1, IFF_PNG); pixDisplay(pix1, 0, 500); pixDestroy(&pix1); /* Upscale 4x and threshold to 1 bpp */ startTimer(); pix1 = pixScaleGray4xLIThresh(pixs, THRESHOLD); lept_stderr(" time for scale/dither = %7.3f sec\n", stopTimer()); pixWrite("/tmp/lept/gquant/upscale2.png", pix1, IFF_PNG); pixDisplay(pix1, 700, 500); pixDestroy(&pix1); pixDestroy(&pixs); } return regTestCleanup(rp); } leptonica-1.86.0/prog/graytext.png000066400000000000000000000077471506303110300171170ustar00rootroot00000000000000‰PNG  IHDRÍ)ŗō!ŽIDAThÍÁûSbđīŽVZ–EHBH€,„xÄ+cė$>ĮNÆõŨõîæšË´ŋtæ~čL˙„ūÚéô—k{wswu“ÎʼnG0ą 68ķ4âũ~‹7HąZ­´,E<œ“ūb×Ķ·pá¤ŊÁĄeu‰Æ€7éI?'/&áU.œXll2Ũ(ˆÂ4ßč’XũE^áÂIžéöq˛ü۠Н{ŧŽđOŦxU„ '­Žús>ŒÃ›ô§i?c줯Ģ"\8iyëų´”VaÁ›4>'‘ÉYxe„ '­=uŠ„ËVŧQĸfhŧ2…“<ß´ SíüŋÄ ‹īáļ Ĩ-@¸pBhŗaX¤ŗ/$ã˙Ž$I\˜aIœb''ĖđIņlŽo [¤U›„ļ§Ë<#!ŨœĄ \ˆ„$ $¨(qņų _gĢTãȞI”tr| ōAA”¤(•JŽoņM‘Øņ ëT6‹ī}Ëk!IČx…Œb$>Ņ ËÃ%šÎčšĨØŦŧĐۙ◈Xso rN8CĶ Wu8´Ü9ļäķ‚.% +ŊJ¸„f6%‰ ‰4&´>#ŲÚ˛hÚõnnzBDDYŖßÚ[ôˆžõ ŸŒ¤tÆtŽ -Q†”‹ū(§ŧ '‰ũũa÷‚J}HR2žŌ‹>Õį(xšņü¯ŪbpÄ×ũGę~Ž}ĶŨĢŗQЧc—ghúWfDlŨīŨĄ j9éYäeW āYœ QB’‚Ë™pIgĨ 6įĮĻ9HŸ1ddëĪh€š†VIåŧƂ|Ô.åä˙(vž¸N¯üĀĖífCBIŠ€ÄOu6.å›o¤cęQ—Ŋ—‰cēå᪜\g˛(E¯7´øÜ͘MĨˆęvKД¤‰bØpģ8}ZY "øÎV¯HŲFŗ sōĻeÁqɊ}\û§K*Fe6ÚĩH5žkmđҚŨaLÄ>ßD[í(ˇ¨,<ēMÅW\‰ƒ´Vßē`ũ {í˙FķgËĪū–˙æ5Ž÷R!p={5Š×Āđ§ƒŌ…*;ŽēZIJĄĖ)P#$NM÷ĪđlBž-ƒ°>Õ=Ĩ/JO’ŧž|ĐĮĻĻ^cđKu#{ŠÆ‡}[;ííŗŠŗUer\÷īfŦ|zVž /{4ė/Ŋœ‚#]Ŗs–K•Ø7Ųđ ”^[­đôĪsŦéƒDė|~?†-ž”,ũöyŒîÜU¤‰Ī{dĖ/jÁĪúI{Å9 Gˆúšį>I›kS#bhØ5M˜RßĘ īâB{YˆŊéļ:ŌlyĮ`n˛sšN+ËcöMļ7sg+Fä)ŠöŌ(ŧdė÷3LņĩDpkĪû—“ßĒÁž…úFOŌGĩØ7˙ĮĮqŠįßC„ëĢi>ŗōœHí=˙÷Y=ŋŠÆĄų/ŋĸbßš‡Ų›mąqYe6‡ˆ[ũĶA‰ü›djë܈Í{ĢĀzīipâČŌ@ĶŦ>Ŗ¤ ĀÔ@kp÷RY"ŽŒ Ü]N¨­1ĀZ[Ã&“cuđąŋa8Žā',,=}Ā•; õõQi—ąoĩņ?iÃ[īęėÜiæä5åYqĪęsË t˔ ÉÃëĢŊOČØsŋdÁ?líGŦŲ—n!ąøÎi%yÎIá€4ĶŲ?)æū"ĀÂĶIŸu)G„‘ŽÖđŲü÷ą'ˇöA[]%ÑĨž–Y˛ Æ.–ęšBIΒtŧLėx2ŋ›%–ęņEذođîcÆ^ņ.ömuۚSūUĀ/|ŲFĘß­4!$ÔŨö¨e™9Ŧ´ š°ŸįÚū÷,āūtbbWÃÄZĶ)ˆiâTi ēZCļ‹@hũë:ǰēH†c+í ëFĮü-ķĒŧsFÛ}2c,Ž‘î†&vÕy%N1rû9›rĨû‚á™ú X/›:DËu'"úî´Rgß?đ}™ e—^TKîú™m“ –˛m9#l´øŪ ĀüđãU>ĖkQ”™›L˙ā’'[k)°°Đ?ĸ(pdÁųĮRƅŧāé}0˜U›ApO:RķŽ)qŒyԒ˜—ö#+ė$]Ģbq ī×7}ŽŌtÜJũx-ûÚĻČäšZD,˙å>—QuU!Ûnú3)ŋö–@_ÃSŽŅ‰æ0­åV†€œĄu™9ˆØ›ßYKˆ˙;+ņĶ~mą#Â!Ņ3ØĶ.˙° FīwĮįۋņ‚ŋåŽ?ÕęĖÆZ{ëŦžŧˊcÂ@}OtæÛÅL8´ŅÜæ3ÖÄãb×Fô™9Ļŋokæ›íŦd}MöõŨôqÖĒZDl7ŨÚПŊ–áÛžÕŦ˛—Ub_Ī_\rŠ$[ RNҞ]­‹Å!qT˜Z]†Î?‰ļUfãH čēģA–_JƒDŽ~6ʖ8ŗql××ÜP9ĢąÖÚæ6æU§86ôؐĸ°ĘAĀŗėęõ›K˛ 8…īÉoüz-ÍZ()4ŧAŧmC„0Ø0 ũõ"ûvÛo Į%זaüŸ%ĻôC=ö ˙nBnÎû‚D‚ÆË&ø‰ßČ”_'~=¸“UQLáĐöâlįˆĨ<7õ>žĄŗœge8˛7ÛņÜ-¯¸šöÕõx,yN#Žíuũ—_*rūÖ;dæår§˜úŦc3Q#įŠ!Չ™ųZDˇ{IĶKq`ņ‹œÉËĪjŧĪĮVũ5"–>i•t•ĩFü‰œr=îM0ß ~ŧĘ,˛ÅãȌĢqąŌ‘•šF”Yey4ŽėŽ7Õ#ôqŽ SÍí"k¯ļâČîęTķŦÁč< pkÍÄlį%œÂ×ņt ŲĖÚäPY,ÉJH“ˇ›•9?rā€pŋŅÃ&į)†ĸĪŧoG„¯ĄaC˛ũ"?ˆ_úō3uZ ņĶA¤•eXpdĢģ)pÆ^¨BÃO]H).WãČÖhŊ[Qė43đ-žÔĪk2‹*â†ú’Ž×€'ÔØā5~ėáe#YSNЊ”Ā(Āâ˜ÔûɌĘTëÄĄņû%Fˇļ•n˙IôÜ 5Ž÷Ŧ8IÜ$ciDđÃ_tōĨ?#ūŠi5!̰$öIËŨ$ĩöœŒ$ 4ÛŨV•”ĨŅ8āŸčr…Š2Ī&ÜPCŸ”ä<ŸD`_Øëāfķ/gā–ęz7Ǟ¯Čđ˛ŪĮ jM†ƒ%JNÅŠ(éûÃ$“u=‡ø/ŋZ$Å8•å84÷õmyŒŲ™e¤p`ŨƒL÷bŦ™ęX˛ÖąMÔÔ˙úÍ *ĄŦ<–B;Â\äÄ‹Ku{ÎjԊŗRdÂÜfĪĐJ|Vv6 đîö†UšĐaAƝąGcŧTNđģëēiGm6N1ūøá6ËĻieģ$¨’ã ‰ˆÚ?§M?+‘ößĪ0¤ O´}ƒC{]uŨąō˜ÔD’ŒÆÎŌôęî3°zs0&ÁžD‚īoõÆæWŸt5Éĸs ’5RČ;ˇ9=$“‚ĨĩĄgõJƒ1ËŦÔŗØXZ™%ķŗÍ‰īØŊ^Ž.Ē2„|aīŌz[PSeˇbŸ0ŲōD<ûķtœbŊũiÉ@ÍîĘ ø(—-z+ ˆwW`ų0G&īŨÔ+i$_ŽÂą•ūOŨ4Ŧ)ąj9„u7ļ\ÍđÅ=´V-m{ˇ8sf­‰hxŪ>¤ M…āúø Å0”­&û–ģîx•Ņú$–Ô0ĸĐEB‘mˇ ‚›j}ä7*”‰†( œ{9Ŧ4g¨1ņŲ$WqŨˆStyƒ*Ī“˜į-V\ĩbßŨņ¸œŸÆãČNīoÔ Ę~o-õ=ŨšghZ Á{c­ 9 €Ū[n>^ļ#g`I°Y‰(ĸmĒĢm>5FŖSloŠCJ`tj1õdĀM2:2 ‘a–Ĩ]fÄĄŨžĄÆJ ‡´rDą›Z˜¤Æą{-ņÕ5&œ"4|§—4åÆą ˆ VÆ&CČ)fn÷ęķ98ļ|gF­UUâ;Äížõ2šŒIĮY ) "åz*ÔöVōː>čĨhX¨Ü7ŽršÁéLŠŌyŽaˇHȖgÆ­ō䓴rxëZsÆ×šŒ†’­\i×vÛŧëw]ĒŽũö]ØčHėhm:ņ yžŪDDp¸`‚A==įéëIT‹ÖáÉ.ÅZ+BßGģšŗq,I”B \FŦXöÚX|ãÉíU­Ā‡Î0J"Æw”;qĮ9éÜ~b…R/¨Ü$ēQS5ĨĘĒcPÎ ´„újÃč÷ŠĻè˜ļ˜…FY’K2Œ¨;†J0ŽÔŨH­Ø”$úhĢÎä3Ў˜`Œ •@} ĨŸOģļ™âšÚT‘%0°ÚNzfŽx÷WØ­ŌŠģ“{,nënĀ!6₉Ŋō Ī ¨EÉ y‰eŪ1åŊô÷ĄN/f’ėAE>Hd‹o™Ļå ģSЌõÎĻŠ;’Õ‚—ÄņÚĀķHx^Ū§Ō°Ö=OYf‘Ŗ‡˛Š }­sb1PŖžįfSđėkɍدÅ^á28 ˙*û^ĮŒĖF{”ođŦ‘á@âŲʁŪĒ>Ÿ<ˇÆę}Åy˙ÚSoK¯ö<ÕŗŦŠh§]ŅHŽ=Tæ\|fkgÂĖŽ;¨āũkŖĶĩz…]BLŊTt#ÔWf¯•Ģ3ÎÅ`%Es-QwbŠ3]§ž¯áíet=AŽÚÕnjĒĢąbDbxöR?r89ĩ5!ÅÆ[2Ą'ĖŽ–[ÁÚLĸۇa(É]ޜq×áMÄą­Ŋŧ–ō놅™dÁÃ@"%xāņšį(Ŧ>ŠKą¯Ö&jëzŅÕä å4C͞R›ō’FĐ6*õቒéKgM֒@Ų“8,qĮŨ:{×7Ԋ¯ĢS˛V؟m;ˇÜčô?E¤éÍnö¯,‰,“ĀË&ÕÜņČqƒĪũjˇ†ĩÅđũëÜũŸĪ.Ģ)l›ƒ0éßhcP(xjošëâÜyĢy,>*ōí´øšŨ¤ėŌLŦĘŽ|Ė…ŨÖVÎMRž×Ąâ8ĩIãarŖyA°v†ÜØ>¤î?V5KJ8ZQwKúc•yÉYŗĸ_ŖZL—ī,—7M5Ãyœ:3Äė:uũĐQØj)ŧG%Ə}e,EĨģ¸k‰&ŨÉbČ@õĀ xõ#ĐV}V’wˇ˜:ķ}Mk]am,aˇXIxūŌÛˇuybŠ˙€ŸŠ­3âØļAØÜÛĮ$DÆŌä4hŅŊ;ˆbŽVŠ%…§'v‚5įdt7ž$–úŠ2NĪt"UfdBG$:|ūŲŠlüR–ē^“iöG‘Ŧ.#œ’ā+l–I8ã9>f:㎕ĖŌŅõZVåļŸđ,5ˆīs ēņw÷ŅyS–ŸČō‰dPžXEÉ Ŗ˛c9Ô˛|UÛ~Ō-gr5OˇĸŧŖ ¤’TqĪQ× c#5ËQKꔭk ë:)ŧH’´˙¸sæ T32ƒ‡ļō  qׁíīNžņOÛ-¤axËŲ l†P‘ˆąÉ?{ÚšĒ3GÕ)hí°}b}Í=_RRûXäW†Ũbv‘ÁŪG~Œ| äķY”PΛ 5´bŠÆËc6ÜŲ‡|ͨjŋfÃ׊īūŲhĄUb €1ŠátYLˇģŧ‡?¯5éúdA c¯–ÆUs›gÜåÔ#NšKĄŅŲØī@1{c­:÷ÖW1‘%ēō9ĀëZn6ŒƒŠŋ;(LbšĐīo[ūĶ-RA¸!ŗÜיŪ[ļ‰Žl\ųAģõ*kÜnâVV$^Mãōu@äˆĀoQÍm†Š(Í3—J¤Ķ$0 ¨í[8C‘‚ –žÂ.é3āfŦÚ î~hú~ĩâ Č5HîbKRęĐ6õü‰ŽWŖü˙‘ĸûūŧĪū†•Ž)ĩJMáuĸ™čsx7Á‘¸Šm2Â7aÂŗícôį5‰Žü"Ō.ágŌ$’ÆãTw2FĮĐį,>šü+™øÎņ‘˙.û;U/‡ž6ēŅõX4ÛÉÚM2v€į>Cƒ=GNõà u}šĢ |BuhûWJpVîqúž—wŖjØ_Bb¸ˆüËØŽÄāúÕ:÷?‹MCÃ˙ÚŅ'úU‡,@åĸ'æčHoĀú׆×vˇĩ…úž~*‡ąŠËĐ|Ésqŧ+ēY\FƒÕ‰ĀũkŅž(øbßE´Ņn,âT‰"ûŦĢĖŖ*OŠ?6Oĩbü1Ōŋ´ümjĖšŠĐ5ËįÕx_üxŠü+×~!é_ÚŪ ŋW2ĀŋhŽrœœ{•Ü?į¯_–ŧcĶüΜ>Ÿ9u˙#įDmŒhlín‡Ø×ējž đîĄāۋÍ/J‚)æŗķíŨÎvîûôükÂE}đŋR‡íccší­ÛčW˙e§æŠŒâöbËÔe)BKt|ûžūĩ5ĩŧ——PÛB3,Ō,h?Úcúšš¯éßŲ> Ô,1…ˇ¸tAūÎ~_Ķšđ×N:ŽlršŽÛuÃûm/ūĨŗNĶ4Å<Ë+NāĘ03õ-úU‚ņû­×8›×Ÿe†”›ÕžœÔ.0KDsŸ4ģ#ŋk§Û%ŧfGōĶĻIlŸĐWWđŋÃ:.ŗá‰îu:™–ņãāä(D8ũM`ü_˙‘ŲëŌ?æÕÚ|˙‘Bįūŋß˙@ŽŽŦĨõXģö"Œ"ņrMiŠŦū đ]Ëĩēéļ~jđÉÅ\~M‘\‡Š>ŦP=߇Ĩ‘™FM¤Į;ŋÜo_c×Ö¸ož9ÖNn˜‚:ƒšôo…ū5šÔŨôMNc5Â!{yœåGU'šséŸJ— Ô ĒFW-TĄZn”ŖgŅž6ČČĖŦ ˛œ0#CM¯Høˇáčė5x5‹tÛîV`hī˙Țķzô(ÔU ¤2Ŋ'Jn VÔI]:äĻ2ãVĒ+„ķ-OB9úR¯g+v'V7Účå´mŅH%ÚĖ (ękĶôízĘģŠ[e î§oį\…ŦÖ[ųbČTÉPėšÚOJî`đm­ģ´“´ā…ãeO^OŠįô¯”¨âŪ§ŨPŒãtėôë›y-„¨āĢ}Ō:ąquhĢķÜF‡Ņœ æü-AĻŨĻã"$­å1ôéüķT5Ÿ5Ԟl3…á’I*zäÉ%ŗ7wZ›7ˇ2ė‚häb…¯ņ-Äŗj÷fA–ŽB˜ô^cáÁníqráä‹;0Ĩˆ˙€×e kqkÍĢF6˛Ú^ÉkUsô<Õ[$_ü>Māną˛2:úɂÄ~,MyįÁÍQŖ×¯ė%l›¸D “ÕĐķøÄūÍ8ēŧõ{p’Ŗėéw8MwLm]žĶ›8ˇ™‘sŨsōŸÄ`× üÔļjž˜Į‰c[„…NÖ˙ЗōĒt¯˛øŽßREÂ^Æ>ޜüt¯å\į5ėŋés“ˆŪ_!ũ0ão?‰đŽé~û #Īî1VķüÍĪ‹ēwŲ<\—j¸[ËurÚ_”ūksāžÆŠĒ2˙rŲū<ßÍ+Kã&œn<;g¨(ËZOĩĸ8Á˙Į‚VĮÃëDŅ~ZM8 æ#]Ę}›īĩË*ˇÂ¨üޏQļ1ž›ž]ņGRūĐņŊĖJr–‘ĨēķÆ@ÜV#đރā§ü~ë?õÎæõæ—÷’j…Íėŋë.%i[ęĮ?ÖŊ/ā§ük?õĘæõĶZ˜n_C—>|W7v˟‹ßō;/ũzGüÚģOƒŸō(\˙×û˙č×ņūGe˙¯H˙›WiđoūE Ÿú˙ũ:¡ûŦ~Fô?ßeķ<ŗÆŋō;ë?õô˙ÎŖđ…ãXxŋH¸SŒ]ĸ1˙eŽÖũԞ5˙‘ÛY˙¯§ūuŖŠ}oOU嚿 ?īą]É^•ŧŋCģVŋŸę{Åk5šđ-Ĥsm4R¯ÔļĪäæŧž‰ø”Á~ę¤ô"1ųȂžvŽ|Ŋūí¯3§3_ŊOČ(# ƒČ=¨¤ÜõĐķĶļ¤žFŦŅH0ĒKį×Ļ vzˇˆI€ZE„ķT¨vëĶĶđŽ[H{tÕcûHũÔĒafWwūxüę׈ôébž6ÚLáˇPûzŠųŨëEu1i˛9ÔŦEļ‰áOŋø×-ĸX\-ˆ‚[ÂÖĘ2.#õ`kEŧéķo™kT\I#°Ûôõ'éĮŊs¸ØíNæĻąq&å?.9ŦM:Xtũ"}MÂĢšf',~čũ%ôFÖĖFōų‹vķÛ°üĢ”ŊÕno­āČX!D^„úŸS]8<+ÄOÉnpføái˙yėS–WšW•Î]ØŗsL Ņ_V••‘đŌmģ°¯Hø3˙#E÷ũyŸũ +ÍëŌ> ˙ČŅ}˙^g˙CJįÅ˙GFøņņŸūF=;ūŊ?öv¯7Ž'šUŠ%-#°TQüLN¯YøŠ júĮˆ,$Ķ´ë‹˜ÖÛk4IķÁ=ĒOü6ē°ÔcÕõÄXŪšŪÔ0bŗ1qØzũ+ UáN‚ģÔ魇\K˛ĶšÛjR'†ŧ 6°Øyh}X&ÕüÎ?:đŋé_Úū/Ķmf5”K'ĻÔųˆ?\ø×qņkÅQĘĢáë9q%Û)ā÷Sķäũ7⯕ēmKWuûĄmŖ>įæũ’˛§zXyMîÍk5[qÚ'ĄøŗB›Äšē\7‚×Íe.æ=ųPsŒdwš|-šđöŋiĒ&ļ’–ė¤oR#;ĪcX?ŧmŦYxļk+Q–Ū hÖ7ã įæ'‘îá\ˇü'Ū*˙ ŨĪäŋáJ• ūÎŅi&:؜?ĩŧĸÛGŦüVŌŋ´<% Ëe"Î1×oŨoÃ?…xŗ#BU”åHėGC_Gxfņ‡Õ“ū߇3TŊ௪ûøũô1Uü}u…đöîĐņĨœCØü¤ß;ǟÂ]Kíž û+Ŋ”īžĶķũÂ°>4jYūËŌÔ˙~æA˙ޝūĪ\Ļũ˛§Ņ3ļĨEõkÕŖÉĢÔū Įöŗ˙\áūo^W^ŠđSū?uŸúįķzôąŸÁg•ū>oæük[ÄŪņŠã-R[M&åâšá™$ *븐1^‰ā//„ŦæģŊ–7ŋ™q#ƒōDƒ ū¤ûJÖĻ"1ŖdõhƖsŽÛZ\­ņP[o Efįģ¸UÛęĢķų…üëu˙üNž%ņm˜›@b€ö~~güN?+ˆŸPŗļ“d׏éÔŠĶ F’æŌæxš:՟&ļ,ŌtŦŲ5ũ9:JŌECũqUÄđ ėļũX Ņâi-ägymlÜšŠÚId¨Î+¯ŅŽ ×t%K†Ė¨z÷Čī\Ĩ¤SjģÖd‡ÉˆÉäÆ ÎáüGú~ti—éˇ(aīÎ;ņ3Ģ4â}6QF­ mOĢ=*ĘÂXpģÔ§L`ZWĨĨļÜrÜîk—‡Å6Ú°l`aĒXÍÖĨ&ûƒĩOWŠö¯1§Ôö“l§|'Ôæk;$ŪÁYÉÄ@'ØW'^á¤ø~-Æ[ûŦ$Ĩ>l˙Ë$ŸÆžŗÖbžģ¸G 4ŒņŠ8I$ôÎ+ÛƿЧ u>k;¤ęĩR:ØŋŠ)h¯hųą+Ēđ'Š-ŧ)Ģ\^\ÛË:ˈ,DdĀįŸĨr´tМââ˧QĶ’”wG´ˇÆ/i)¤ŪÛ.€:æuߋzļŖA§[ĻpdWß.=Ž_Ë>õįŊ(ŽxāéEŪĮDņÕäŦØĨ‹ąf$ą9$œ’}kŌŧ!ņIđ· Ķ›Nģ–UfydB¸f'9ë選W™ĐkZ”cQrËc*UįJ\ŅÜŗy&Ą¨\ŪÍūļâV•ūŦI?ÎĢŌuĨ­RIY6Ûģ;Ī|AƒÂšuՕŨŦķĮ$ĸXüĸ>RF9úÖšĪꖚ߈Žĩ+($‚+‚Į&2ĮŠükŠĘ4aš­ŲŦĢÎPTŪČė|ã8ŧ#=ņšˇ–x.Q~XˆČe'ž}˜ū•›ãøŠ]EcxĄ(ąÅ‘•P9Î?Ú,ĀĨĄQ‚Ÿ´ęŧŨ?fö ė<ã oÜ_Éuk5ĀšDUōˆãicÎOŊqÔUTĻĒG–DĶŠ*ræŽįIãoA⏠FŪ `ÉXļČFr į­ox⠗…4IŦ.lŽgwšiƒDWQŽOû&ŧ÷Ĩ-D¨BPTŪȸâjFŖ¨ˇg˛MņĻÁPų=ĶŋŖĘĒ?1Ÿå\G‰ž!ë$‰­XĨĨ“u‚rãũĻ<Ÿ§Úš*a…Ĩt‹ŠŒ­QYŊ šĨߨleûųÚšõ5Å;4ŽYÉf'$žĻēͅ‚y9sü‡õŽxt¯;>j–č[/ĻŖK›ĢŽ*K+)õ+č,íPŧķ¸DQęj3]įÃcˇģÔõ§@ōZÁäZĄū9åČūųWü+ŒīJîĮsâk}6ĶápŌ´Ë)ĶÚ('eR>rTąįŽrzW)_ŗÛ]mWtē!Ķt{HîcŪ.bß|dļōŋž?ũU—āoÁĢø†}&ûw•´Ŧ āļČ÷=Ģ ŠļN“Q‹}„°ę71ZéļĻi_?AîkÕ|9áDŅã[‹˛ŗ_c¨ûą˙ģīīSEo†äO˛Á6‡å‘#Œ(Į¯“îky›*H9Ē…veZŧ¤Ŧļ8¯Šz˛i?õ-‰n—ėą ã,üÉwžV’0Ė {Į}pÜkļ:$oûģHŧéTųhũú(÷Õy ’1[Rd–ēĩå“lWķ#Á'?—ĨkĮâ;fLËĒũĀÁÎą !#Ĩ7Ŋ ČŅ}˙^G˙CJķŠôƒ?ō4_ב˙ĐŌŊĖ_đd|Ū øņã9˙Š‹N˙¯OũĢSā˙‡î`’ī\¸‰ŖŽXŧ‹}ÃԐĖßO•yīÍwšžĄáÛ;ØWWŸOŠäŽc7!wĪbz æ¤Ö ŧÖ´F]WKI$\ĨÄj$ =3ę9æûwė•+Yw=_Ģ%]ÕŊßcĮž,jąj.đ0e˛„BÄtߒX~ę pgšŊĢiwē>Š=ŽĄ%Ėmķäįvz0=ÁõĢ~ŌŋļŧQ§XܒL ƒũ…ų›ôŊJ|´éi˛GQĘ­guĢgˇčqü5‰äP˛[YĩĖ€˙ĪB ‘ųœT~4ˇOü:šæÉōörxŋUÜ?ŠņoSûƒūȧįŊcĮ}ĢķúøÔ˙ /×Sđ-ŧ2aÍĢ=ŗƒÜ?ī–ŧ‹IGÛųžß4\ū¯ŌĮĪõīß -ŋ`” ™ä”ū ŗų ¯×4ÆŅĩÛí9˙G™‘sŨsōŸÄ`×Ŋü7*~é;zmqøųšîĮJô“]O?.…Ģ4ú#Ãüax×ū0ÕîXį7N€˙˛§jūŠ+UŨTŦ߆ûÂâP~ģÍRŽĘjŅGWyļË6ōĩ˙ŽÉ˙Ą ÷˙‰ŸōOu_ûe˙ŖRŧÃūB6ŋõŲ?ô!_Oę×ztŗęoYĻ<Ã0Ęō@üq\×Ë83ŌË×59ŖårG¨¯Pø+íWŸųwOũ×m˙ /€˙įīJ˙ŋ#ü+KFÕ|;¨M*čŗYŧˆ Éöt @ĪāT×ÄĘtÜ\Z/„:ŠJižSņūG+ûĮ˙Ŗ$¯>ī^ƒņūG+oûĮ˙Ŗ$¯>šíÂ˙ >‡/øŌõ8}m•ĩ{€ģ ZĨZ–ķwÛ'.0Ūcd{äÔQô¯nōlú:jĐKČÜđƔú׈,tõûDʇŲząü¯ŦlaŽĘ†0QÚŧāՊÉâŠoœ ļ–ėĀú3|Ŗ˙ß^íæÉ?Ę …õŠ6†ÄZ›5ûˆ8r#üÎ?­t’2B‚(ĀU@éY–0"ŨDŖ”3ŸÃú°ŠfũŠSŠĪ4‹qčX׏üyÕŗ¤#ugš‘G ųW˙g¯`„îž”ž‰ždøŸĒSâĸwf;b-ãö ×˙-A2zy摆F)OZ:Ķ2ÔbŠ(´¯Hø3˙#E÷ũyũ +ÍëŅū ČŅ}˙^g˙CJ÷1Á‘ķX?ãÄÆq˙Ÿ˙^Ÿû;U_„ÚŨͧŠIŪÍiz¯˜Éá]T°aé‘ī‘éZ_4ëëīiæŌĘæp-pL13ķŊ¸āU†~Ôl5a­ę5°‰mᓇ,Èė0HÁįŸĪ•N iv;&ņ—r_Œút_fĶ50”;[ąūō‘¸~DΨ|ŌüíV˙TuųmâĻŧĮ'ā˙}Sž2k1OycŖÄÁšÜĻÁûĨ€ >¸ÉüEv?4õŅ| m,ØF¸ w)<`7C˙|ŦÜÜpŠ>ϊž1ĩ˛)øûÁzˇ‹¯lÚŌęÖ+khؘ°%ØōxcZŸĀÕ<$ˇŅ^ÜÛM ÁFA bU†AęPGå^ssņSÄĪs3ÛŨĮ,ėcCĒO$vŠ´ŋŠ^!ĩ§ö…äoffA:ų>By9°æŠĐÄ{.M,%‰Ã{_i­Ëtŋ˛ø’ßQEÂ^Æ?íĻ˙ĮJūUÚ|$Ŋ H3ͭđ‘é“ŋ˙f§üWŌūßāÉ.Pf[qŽģ~ë~9˙€× đ“^M;^›LÂÅ~Œ“Ā•sø‚GÔ já|â=(ã/ŌG1ã+6ąņž¯nÃéO ú9Ū?F…^ĮņOÁˇZ„ąëšl-<¨ž]Ė1ŒąQŅ€īŽ‡ŋOC^K ŨÄ­ŗĘč eHÉ*RqŌģ°õc:iÜāÄŅ”*ĩ`°˙¯ũvOũWĐ?äŸjŸöË˙FĨ|ũa˙!oúėŸú¯ ~&É>Õ?í—ūJįÅ˙ŸõÔéÁ§§č|í^Ŗđ[ūBú¯ũ{§ū„kËÍzÁoų ęŋõîŸú­ņÁg>øņ(ücãÆV˙ö˙FI^gŠÜ}“NšPûCūÕzoÆ?ų­ŋėūŒ’ŧ‡ÄĐŗØĮ('žú÷ũ?ZÎ2qÂŨv5pSÆZ]ÎUŨ¤vwbĖNI=ęHĮTjÔC${W{Įĩü°UҝîÛŦˇ?¨Eųš¯Y‹ W”ü Õ ¸Ņ.tÕ]ŗÚČdoöƒžŋ†1^Šu8ŅļļTƒíA´V†Ŋ‘˙L¸qÎØÔ vę ĒåĪö€’6&7c×ĩA¤Ü–Ōĩ œũë†U>ÁT<Ō;kÍŋĀÄíÅ"™Ą%ÚYÁuu!Â"b}¯‘.ŽžúōâōOõ—´­õbIūuôgÄMWû?Āē“+aĨˆÂ§=Ûåūĩķ`āS2˜ĐRįŠ3“š_‚äú c§iĖOĨFIĪA@Ũu˙RGNJQŨėß<4‘ ŪÂū­\îšņŽYĸh´Kn>ŅrC0ú ČĪԟĨyUĪ$îuK0­%k؝Ĩkģŗ5äŌ9–MĶJ~f9<Ÿs^­â/‰z%Ī….ôÍ";¤šXD‡Œ*Ē)į?ŨÎ+ČąEkR„j4ßCx‰ĶMG¨QցK[Ágņ3A¸đ´ZnŽ—;Ú}žā¤Aƒ|ģI=úא)hä†S•qÁą”Ú+T#NüŊMęâ'VÜŨ^đĮÅČŨ-ŧCĸeû\K¸0õeƒôĪĐWKsņGÂpĀ]oäœãˆãˇ“sß@Ė×Ī´•Œ°4›žÆđĖkF6Üŋ5şöë\ÚC$6iķ#‰°Yvqø ôŋ|GĐõī ^éļkwįÍŗa’0‡V99ôŧ––ļÍÅž†0ÄÎ Iuģ_‡^)Ķü-}> &)°ÁĮĨGE^Ä˙;ŗbIĻ3[ÃUTˆŠPžÕ"^ʖÆ´ŽIÉķUčŖë؏įaėãØæ5ŸiÚæĸonޝMĄvÆĘ}TúÕøV7kŊCūûOū"ģZ(úö'ųØŊ”;Oü+ū5ûí?øŠ?áXhßķų¨ßi˙ÄWmKG׹ÎÃØĶėpĮánŠzŪj?÷ÜüE!øWĸĪŪĄøēņÜâŠ>ŋˆūvƟ`ŽŖÁļ–×m{ö›xĨÚ#Ûæ lgw­sĢ­đ'ßÔ>‘˙ėÕYzOü˙!WøĄ4Ū[Ų,&[įŒ…uhÂm$ėœßŊQÖ|%Ā×níĘ7IܲzūÍë‡ū*ŊoūžS˙DE]7ƒuW>Ÿ3gbīˆ“ĐwËõ¯FU(ÖŦđõ!nĖÖq‚šgœŒŽ†ģ iöw:7™=¤š•†é" qĮs\į‰,ÖÃÄăĖĢ:Đn$0˙ž”ŸøŽŗÁŸō˙ļÍũ+ g‹tå­Ž]iۚ’+_‘ļˎâĖ‘ųíŦOßčˇ6öQé"'Ús/•nSäōߊÚ8ŨˇôŽz O÷EIQ_š•>D8QĩĨs¨đmĨĩÛŪ‹›xf o˜ąŪĩą#ø`ßž"XĨʐŦ†0‡$p9ÁŪŗ| ū˛˙éūÍ\ūž?âŠÖŦé˙ĸcފU#GŽ)ëú˛%*­^Æßˆ<1•ģ^X–ō“™"cŖÔJĨáÛŊ"ÕnNĒ!;Šy~d%ũsŽ;WSáŠ^˙Ãčˇ_ŧtGw;—ßđ8¯5ļmÖ°ąl’ŠwzņÖŗÄ*t\14ãŖéō/4á'ąéē|zŠËeii*#m'ėÁpz÷¨ÉĒxJ)¤‰ŌĖ{ļËF;aPa’ųļ+&O4íų}6ãđŽ˙Q@ŌĄIomláG}ŠM¸9lŽ ?•pZoü…l˙ëēčBēŸ˙Č?K˙¯˙ũŖ-ašöU*¸ŽåÖ^ôcrËčzĩjf°x—°–Ũ˛ô+Ķđë\Uå¤ļ7rÚĖ’3ƒŽ‡Đ¨­_ \ŧ:ėpŠ;'VG¸ƒú~ĩgĮ1ŦzĩŒƒīMžˆÉũJŠĐ§ˆÃēņšÜpr…NFî‹Ūą´ēŌæ{‹X%a9¤Œ1jņ“S>Šá(å’7K0ņģ#hNžĸāųO˙_˙AZáe˙ËĪúû¸˙ҝ[ûhĐÂÂ|ŠÜŽNz\Ūņ&ŖĄÜŲÛGĨ,>q¸ŧĢb‡nÆęvŽ3Š“ÁÖļ÷W—+qR…Œ$@Ø9÷ŽrēŸ˙Įõ×ũrΚ(ÖUņPn)ΔښĢwyá{§ļš†Í&LnQkģė§ąņŦ­kUđÛčwËbļ˙k08‡Ë´!ˇí8ÁÛ×5“â?ų5/účŸú*:Ė­ņ8åN¤Šō-§FéJáۊ(¯ę ëŧ ÷īū‘˙ėÕČ×]āOŋô˙fŽėˇũæ??ČÆŋđŲÎëŸō5ë_õōŸú"*ŗá™ ~"´=‰e>ųSUĩĪųõ¯úųOũYđÚņ ˜˜ŸÉIĒūģ§ķūČĶņę¨éOëč}ųˆ˙CųÖ΃ä˙m[úV'¤RŌ"īå\?äbû5mx7ū@_öŲŋĨz‹ūFĐæ˙—?3‘‡ÃŌ€ØļB€G˜ŸãUī´ëŊ5Ŗ[ČŧĻ”1@XĀc=¸üë]¯ŦÚøgGūĘĶæYuCXŖŒˇüĩ Œ“Ī\`W K1ÃvFĄ>€`WŖÉŠtŸ5P+BšûҎĄöū•įŒŦ’˙}/ø×kĒęRiûlQ,Ž‚%Í´ĖĢ×ûŲŽkū­K#ū%֟÷ųŋøšõq´đōquĨgcšŒĻ“åW0ôÆ ŠØ˛Uό‚r7 ë<~ŦÖ`PIŲāĶkŅ"0]鰒 ŽH”‘ß ôWTlÚj°]Õ×ŲŲđæ7`5ņŦ2øFtjBúw.ģjqg7á"ãíŋož6Ž8Ԉ÷Œb1‘í‚k3ÅZ„zˆĘDÁĸ°ŒÁ¸t21Aī¨>šĢĄņĨÆŠogØŽŊ´„¤ōFŋŊøBˇđƒķqœãW iKj šC GęĐŨęŲT“Š/hÎûÁ?ō Ÿūžū‚ĩÍÉá­aŽnœXąs3Šķ•iƒ×Đ×IāŸųĪ˙_˙AZȗÆú’\ÜF–V›#šHÔŗļHW+“ųWC…a)ûgdfœ•IrŖ÷KŧĶDfō+Ė$&]Nqץ­īĮõßũrÎąu}nķ[{ss ŧKâ<˛I$€;ũ+kĀ˙ņũw˙\‡ķŽ,Y1¸ūđû§ņ~_öŦ*¨ž(îũŨKtf‡‚?ä?ũ|ũk…—ū?/?ëîã˙FŊw^ 8Ōg˙¯ƒ˙ ­N|#¤—‘ĘËēIFũáęÄąũIމa§_ N0čB¨ĄRMž{]G˙ãūīūšįOņ.…aĨhrŨÛ+ųĢ$H79# "Šũ Ļxū?Ž˙ë˜ūuÉC <>*ŸSIÔSĻÚ2ŧI˙#F§˙]˙EGYĢŅîŧ3ĻŪ^Mw0Ë1°ø(_ägę~Ķ-4Ģ˘’C$0<ŠCŒ…$gō­ą9uj•e8Ú˚uã¤Î"Š=(¯čuG,Ü.ŲĸŽE :†ķŠ(Ą;l ciŽÖaŨc˙*Ÿ­Srop°qQMkmpÁώŠFēüęZ)&Ö¨ ßŲļ?ķåm˙~—ü)ŅŲZDáãĩteŒ?œbŠŽyw "9`†u 41Č äPĀ~uXÚFû’ÖnÅc˙*ąIG3JɅ´Q@Š)­­î3A¤tŪ€ãķ§ĸ$h5TAŅT` uîí` (ĸ}ŽÔKæ‹hD™ÎņÎ}sëSŅFiļŪá` ƒČ=jŦía}ņ[Cc’0 Oۊ.Ā*˛´Ä‰k8ä2Æüę‚NÉ=…\ĩŗ-ļGČ!šV^ĸĩŖNu,LęՅ5yōYCuĩĨļŽ^v‚čÜĶÆoķą[ez~é~o§¸‘¤cj.9ŦXŧSg!BmîŖŽMĻ)]WlˆŌ÷Œ6B†eÎ@8`qŠôé`lĩlķ§Ž”Ÿē‡&ƒrŖGmn„ īXĀ*}°)ŗØo‰~ŅHĨ°Ô7>¸Ĩ˙„žŅŽímâļš•îLžV kŽP°Ü⑯F2qÎ*k/[_jMd°\Fų™Qä ļO)ö>6ą#ž™5rĀEëvLq•VčÍ:m’ą cnā)ėëÖV˙÷éÂē ­RT`Vc’ØÍfĪBíōļĀpŽĩįWĄV–ˇē;¨b!WN¤TQEr!Eŋ§iÚ@Đ$Õ5I&Ž8åØZ0ORĒŖj‚NK•ĩ ­.X“9¨+ŗŽõwV›EŨnē;ÜĘY›Î3C"\q‚ĘZ҃MĶ4í2-G\žDYÎ!‚5%Ÿ##…“Žxč9=ëEƒ¨įČšīž„ûX¨Ũ˜4WE{¤éˇzDšž$…"ɒ)׃Č#¯Ō đ֓oĢ]OÁ* aąąŪ‡ƒ¨Ē*}öėÖ<ŽF%ŅC¤húŨ‹Üh7ŗHꡄs#&āG Ēyõé\įjŠØyҎ7RĄ5-‹6¤úŦR.RI‘Xg€5Ŋâí*ĮJ´ą{;qKsåšŪ͕ōŨģŸU‰ĻČZËūž#˙Ѕt˙?ãËL˙¯Ã˙ĸdŽÜ%8Ë RM]¯ō1ĒÚŠŽ6Žéņ]jö°Lģĸ‘đ˒2? ĨZZü‡ėŋë ūĩÁA'R)÷FĶøY{ÅēuĻ—s`–pˆÖT•Ÿæc’Ļ0:ŸöKáM&ËSKŖw˜PŽß™†3œô5/ã÷K˙ŽS˙8ĒĮÕß}Sú׎éSúú‡*ĩļųÜĪØŪå™tß ÛĘŅO%œR)Ã#ŪGÔŽsÄkŖÁse“-ŗīIQūaā Î>ņĒ:°Ûڟū>ŸúU@:ÖŦMÍISIíéNœ´“‘ØøkCĶu 'Îēļķ$ķg{?VM—ƒÔĶØŠAŊäãÕ?ƒä˙m›úW[öxøt*č”čĐÃĶ›Ļũ?ČÍFSœ—5އÄÉĄ[[Ų &kWšKŽ"¸ķĪ-ĪMĮ…æ°éôœ Ĩ†y ÖŧĒõcZw„y|ŋ¤tÁ8GWrŨŽãžDaŒ2ļkG­64XŅUs´tÍEz‚K)”™€ØOî̜s…#œņ^Î’§ïU՝Ų? Ö4~°Ž+ˆ‰¸xĨ…­ÕLˆcc’ŠĮā÷<JĒöÚ´> Hášš:¤‚&Ū۝Ŗf‘IķĩA#čj­Įˆ&¸]Ãs™|É@JĮļ|.{ûsūŅŽ”´Ņĸú3`čĄėŪ îmͤ"ü§(1ÁČ9éO˛ĐŦl/žōÚ2“?›æ7?™'˜wqÎ 8ôVUžĢt4ũ I ÕwDU/Á˛›s!úšaŋo#<â™-ķŨNōQ4ãvú,n% öhʅnÛæÎ?‹ƒŪž×ž×:ĒŽX’u āp r 'ŠâĐĘŗē9°ŽåUÕļå20ĮlVÔ€×gYÎ Ģ=IÖ 4ĖI#xÛ…IäéLĢú„@~đ+=HčgâžzŊ/g7ŪĄWÚAHZßhŪO‡w 3ˇÛa;TdāM?Ĩ`WQg¨\i^žîĐ ™n‘Čģ€ß")ã#ŗęË­í]û1Wŋ*ˇsžŽÖSs RFéæ8QšHÎN?­jøÉ÷xš1ō[Y)Œá.ėô*„ē­öŖĒØŨßÍ}”ĸ8ļ 3!$ō¸+CÆQņ7™–KH°}Hy3üÅ\T#‡ŠėŨöō%ķ9Į˜ŗāš3Š\Û09`Ë)čp@ūLiŪO*öî"I1'–IõV ūĸŖđRÖ%~Ë ęX§xaqwyrŋvu3ŖšaúčÁü›î˙"*ī/‘KáĖoļŪģ vJĪNBņúgđŦA:]<×1˙Ēžyf‹ūšŗŗ/ū:Etz•ĖúītËČæh­äEõŧ *žåsˇ= ĪĪtúW>7–8ŅZõštŊé9?BŪ™˙!k/úø˙BÔx˙ū<´Īúü?ú&Jåôŋų X˙×ÄúޟĮ˙ņåĻ×á˙Ņ2Uā˙Ũ*˙]Wø‘8ÚŌĐ?ä?e˙]ō5›ŠŌĐ?ä?e˙]ō5įá˙‹To?…šū>˙Ũ3ūšOüâĢ˙W}õOũš ņīü~éõĘįOā_õwßT˙ŲĢŲō2^ŸĄÉ˙. NÂņõ­EÖÎᕮXĢ˜‚8äU `š 4RFHČĨsų×g{ãd´ŋšĩlŌyˉEsÖŦu­J;¯˛ĩē¤>^ÃwÚšq´(§)ŠûŨiNnĘÚ—ƒä˙m›úW —¨‹xķ§ŨŒ(ë z}+ģđoü€ŋíŗJË? .”åO ™Ā8üĢŽtŠTÂĶU%ĘeIT—*šËÍk=ļŅ=ŧ°îÎß1 įéš}ā~ķi¯ĩZ×ĩĻ×.í%û'ŲÖŪ9æ@Ė({ö A§îķøU#“Ô}+ËTá BŒŅ­YIŅmĢ3PtŦÉ5ģXĩ3`ë8pé—Ë&0ė2Ē[ą>õĨYshPÍŠĩë]\Î’˜O/ĖA…oģģ#Ž3Œö¯q[ŠáĢu~Âyš8äbEŲŗ$ސ)<ŸC´€zgŠ‹ū[nŗ"\H8$DHōĖ&fXđ3ÜĄũ*°đf––3ÚG%âGÁëXحɎ_jŠ8čŨ+ō¯0^úgĢ—ü Z֞ūŅ<-‹\Â.äŧ…’ã{4d:ãūU“Fk—]Ņ“’WēąÛ8s+jéŌķJÖô¸!ÔīÎîØI¤ 8îxį#=EsQBģ¤Ū—Ot)ÛÔÜŊÔ´Ũ/G¸Ķ4KÕŊžģ%ē…ƒ, Đ’Ã€Ā…É9 ž2iūŋ°Ō§Žî`ĩ‡bĸ\ ëĐf° Íô­Ū5Ē‘”ce‘ĮŨiŊÍ?jöēbØę.‘ŲĪjĸC!ÚėäöãĀVlžPšT†xî#F*%WĄČãĻ>”ŸJ+•ųé¨5ŗĶįĐ¸Ã•Ũ´ŋų Y×ÄúŽŖĮ˙ņåĻ×á˙Ņ2W1ĨķĢY×Äú¯BÖô8ĩ¸mã–WˆA/š ÉÚˎŪ¯GSR1Ũ˙‘…wiÅŗĖĢKÃ˙ō˛˙ރųéO­?įōûäW9ĸ¨OĮįŪKÉęŲsøâšV­ ”×ThęÆqiŪ=˙Ũ/ūšOüâŠü ÷/žŠũjŋ?ã÷K˙ŽS˙8ĒĮÕß}Súץ/ų/OĐÁæ5_ųjõô˙ŌǚĩĒ˙Č{S˙¯§ū•VŧŒ_ņįę˙3ĒŸĀAđoü€ŋíŗJķĢø÷‹ũÁüĢŅ|·˙m›úU8ü i*‹Éđ ēĩëUÃÔ¯…Ļ sB¤aRW8Ē’T™Y•˜Ās[Ū đô5„wÍ,ŦķđĀ2 ĪOjįAÁČ<Žâŧš”jaæ”Öģ QĢczНg2ÉĐY™FX‘V+ܧ58Š#ÁŠ 8ŗÄĶŨ[é‘=¤’FæáŪ0IsžŠĮŦõ lÅhešųn qũÜí¸9ÕüĪ“å„<íāį¯NžMwMŠe…î‚ģ4ĒF1\:€Ôë­fĘĘyĨyY.čŧ¨Bɂ@Į<ÖĘöĩ=-c˜–˙XEԌRŪŊĘ[Ũ´ą4H]_ygo9\÷9ëFŖ¨k0ØfiŽ"ŧŠę_:#lJ0 b'°ÆĀaÉČ'ŠčŖ×ôŲoÚ9Ũ™ŠĒ¸‚O,–@ę7ãnJqœķBx‡J}›o^gQą1ĘÁPãÉLķŠw}‡wØŌVʂAŒāõĩFËV´Ô.§ˇˇdyļŌFđq–P3‚=zUîŨ3PÕˇ3*ß:ŦY ЃĐÖV*ÍÜÂY>F}¸å[ÖĢׁ‹¨ĒTē=Ė-7NšL(ĸŠæ:BŠ( Š( Š( V*Á”˛r œ}AĨķn?įûP˙ĀŲøĒm¸Ôœ~a4žâųˇ?ķũ¨ālŋüU53|ˇ‘X’w‰~O$îÎrryëÍ-ŨYËvÁE.‚6įpōÍq+(!LĶŧ˜ÆâqœƜU]Š<ņŒäųSÅQ–&âĖOōīNĩ’HtnX˛$[™Ę‘ہÍkS.Q“Œeüŋų7{6ŋEœUũVéo|#%Ōãį ‡pČüˇölÔiIŋÛm¯ˇų™}u^ĸKáWõąļYA éĪZZåc–xõ7NšËIo6ROīÆWÄtŽĢĩaŒÂ<3ގžŋ‰ŽíĶŌÖ )sI\GHQER¸ÕŦ-&0Īr‰ Á*AČĪ#ĩ]:S¨íÛō&sŒäė\ 2•<ƒÁ¨ííĸ´`6Dƒ š'įŊDڅœv‹t÷°7ŨsĐũ*Kkģ{Č|Ûy–DčJöúÕû:Ņ…ėí;\žzn[ĢÛđ#m °6ZŸųgšŊs×9ëEŪ›i{qÜÃæ$tnaČÔQkzdލ—‘c’E_̜ą4dœœĸ÷ęždÅQ¨šŠM|ŠļZuĻžZB#ß19ĮÔԓÛCrŅ4ЏÂâDäŒ0īÅV—ZĶ­äxĨģ]Nx?•YûTdųŖ|ā´Cx“úSœq<ŪŌjW}]ûwô] rFÖ]4$tFČÃ*ÃzŠŽtûFŗKC`LMĮŒõÎjDē…îžŲdhĀ,Ā?ūąKÄ7Qų¸tÉ\QÖŗ^ښꖏüŸųûšžŒkÚA-ÜWo7‚ōxųõīJ–°Įq5ÂFŗ$l“ģŽ”CuōKRĢŧ-ļ@?„˙hûTkû/šž~Ũū_|zĶnˇÃŽ‹Īmūîĸ^ËâĶĮüʋĄi‰qį­ĸ dā\glÛBnÅŅLĖ`lŸģœã:ŌÃs ūo• o)ĖoūËĸ ƒUąš¸0CuËũĐzũ=jå,UKšs;/=ųŖBJĘīËrh­a‚I¤‰6´ÍšÎIÉühžÖĄ™7ˆä'$a‡CÅ*ÜD÷[Ŧ€ËÔvĨ#ŨAĘ[4Ę'pYSš˙Ôk?ßsß[Úūv˙†ü ũß-´°‚Ōv×bšŠbęúsM䋸üĖíÁ$sĶՋ›˜lá2ÜJą&q–=čk$ų“vļúÛ`^ÁĻÕŦŊ>bKgo<ĐÍ$@É Ėm“‘ū?OÅCmwo{™m2Č ā•ė}é!ŧ7L­ įsöëYN5ž“OM=/иʚÖ-kø“ŅQÁáŽŲé]4"+ Ą›ĢÉük§ ‰t9ŦˇVüŒkQöŧˇ{;˜ēŋ•oĢi“\(h]I#åV#Œ˙žÔimÚŪ§=Ļ>ĘQ˛Œ+>;~ŋm:,ˆQŅ]OUa‘Dq¤i˛4TAŅT`VëG‘§{[}-{ŪŨĖ^û^ké{ųío¸âbK‡ĐlĄ”[%•Ä›<ā„ČŸ1<žAüwĀĮĨGäCåy^L~_÷6Œ~U%,v9b­ek6ū˙Ôx\/°žˇŅ~=§ÛĪ.¯¨ēK…nH‘0Åž‡ĩZžx‹H€n?āǍŠXĒ*–9b2}č(Œęå˛ũÖ#‘ôĸxîzŧíiËoŊXQÂÚŠë{ū79›˜f:öŖyjI¸ĩōœ'gRŸ2ūBŦi‹kᙯVvP}Iā~x­āˆŽÎ¨Ą›Š“õ4ß&–afsˇhÆ~•ŦķTĻŠÎ:._š+[úîD0R„Üã-ī÷ŗ–Ōŧũ;R´k‹y![•1HĀū UJÚ{ĘöÍļæ e–/rä¨&ē'$ĀtVÁČÜ3ƒëJ7īÚģņØįZŠf—Ģí”lėחõm°§ėų´Ŋ˙¯ž§3bōŨø{X’$e’iå}ƒ¨Čæ*æy¤IŸb&¸Ø(,§äãŽüÖĘ"&v"Žã¸íÉõĻŦĮ!‘"]瞍ū5qôę)§ŽîŦü­gύĒxIÃ•Ļ•×ô3lųņ6Ĩ˙\âūU‡u5ÅÅÔú´6ō:E2´SųB&Aô5Øyhœ"†n Éô‹i–ąĸĻ1´/•:9ŒiOŸ’îĘ?%ŋŪ*¸78ōs[Vūoo¸ĮÖ.a?Ų7%ÂĀnU÷›qœūU§m{kyģėͤģqģaÎ3R5ŧ-ŖC"ôR ôąÅYōĸHķ×bšæŠZ”é(YŨ^ŨĩwÔŪĒFŖ•՝¯÷ WvĶ’6UvēPĨ†@8î;ÕŠĄx4;•˜ŖÍäIŊ҆āãĨ^hŅʖUb§##84¤HHÁuūļũ:vŌ.ūēũâxtį9õ’ąČė&osöhí¤*ņËŲ…$÷5kVmž#_ôČ­sh?y*į<`÷˙ čŒQT1FUNUJŒ§Ĩ$–đJÁ¤†'8ÆY5ŲũĢTSqŌÍin¯}WŪs}A¨rŠk§~ž†>Ŋ4øni--ę'LîĢ:UÄ ē/ˇ[Ũ\dļč!ÛĮaīüę˙‘•åyQųÜÚ1ųRGoMē8"FÆ2¨Žg‹Ļč:6{ļļëmôōčmõyûURëdē˙_yĘ ‹Ŗjōė{§¸F›rųČÆ?ĐŋgŸD’ü~â5+1ahÆúVâÁ>õ†5ī*€:sĸH…U”õ 2 o<ĘI¨ģk}uÕ[M42Ž J-6¯§NÎú˜ÚSÅ?ˆ/§ŗÚmŠ"–A…göũk Æ;¯° Xŗä_î,ßÜØNīĖ]´q¤H4TQŅT` EŽ4R4UėāS§šĒr“Qē|ģ˙uhߝõđi^Vzíægø{ū@ŸîŸũ֝5cP¨ĒĒ:‘^ezžÖŦĒ[vßŪwQ‡ŗ‚‡dKöi˙ጟ÷ÁŖėĶ˙Ī īƒE~É™‰öi˙į„Ÿ÷ÁĨû4˙ķÆOûāŅEÉ3ŗO˙Íq˙<$˙ž Qės1>Ī?üņ“ūø4}šųã'ũđhĸdƒ™‹öi˙ጟ÷Á¤û<˙ķÂOûāŅEÉ3ėĶ˙Ī?īƒAļŸūxÉ˙|(Ĩės0û4˙ķÆOûāŅöi˙ጟ÷ÁĸŠ~É3ėĶ˙Ī?īƒKöi˙ጟ÷ÁĸŠ=’fgŸūxK˙|OŗĪ˙Í?üņ“ūø4QOØÄ9˜}šųã'ũđhû4˙ķÆOûāŅE/dƒ™‡Ų§˙ž2ߏŗO˙l6W@dÛĖû† *Tā‚Ŋ}CŽ1úUk­:ÆôbęÎŪq˙M"Vūbąj7ĐėXYÚíŸ3QŠ÷›˙‡žžFŏŲ\ô{w*Gār?Jâ5…z•¨i4šŌö03ąžIô?+ƌŅį”T÷6“ŲÜŊŊĖ/ ČpČë‚? ƒŒ‚Š( Š( Š( ĸŠ((ĸŠ(ĸŠ(ĸ—€Ī­wžøy.§ßjžd§”‰xy=ũ…iøÁ˛&¯ĒC¸ˇÍo1ũöČWĻš ¸ÕĶJ—ŧš•Ûūĩ1›nœ¤’ëßÉŦl-4ËUĩąˇH!_áAŒû“ÔŸz¸ą÷4Ô›üjltޜMofš#Ŗ3ËpŠŗöĩ5] Ŗ4”Wš}%ē-‚ŠZ)ķū4´ĩtc4ž¨Č×|?Ĩø‚ßĘÔ ę>I—‡OĄū+ÆüUāÛß Íŋ™ė˜á'öaØ×ģ?ĸžŪĢg‚xŌXœtqÂģÖ‚}Ī­‰š­%mē]OšO4˜ŽĪÆū:ĀģŗŪú|§'&&ūéöô5Æōk‚pp•™Ķ ÆqRŽÃhĸŠ’ÂŠ( ĸŠ((ĸŠ(ĸŠQ]ˇÃß sRkĢ´ŨejA ô‘û/ĶÖ¸û{y.n#‚%Ũ$ŒGŠ=+č­G‡@Ņmôčyō×27÷Üõ?ŸéЍoráOŸ}‹äl@Š=Í8ƒši99¯^„\oÍšãcĒ)ĩˤmĸ>UČĨķ<­4Ŗ ŋ§ķ&Ü=iŲâŖĘíÔoöŽ'‡oáLöáQū$—ËQKaąNÍDÍģŠ2GC[}Oš+Ŗ8ŋĩš&Õ¯¸Ÿ4ŌvãŌŖ”°cÍLp˛R÷ļ5Š™ÂpŊ=%æ!`q‘ȤĮ'bŠíŒUĸxĩ*ēŽķũ.Awiũ¤ļ—Q‰ •Jē˙ũzđOčrø[¸°|˛)ĖNCũ>ĸžŽ?â'‡Æ­ ĩėK›Ģ\īGüCđë˙ëŦ1t”ĄÍÕāk8ĪŲôgŠQF(¯$öŠ( ĸŠ((ĸŠ(ĸŠížiCPņRÜēæ+$3˙{ĸūŧūí†ŧīá§—Ŗę„s,ë>Ę3˙ŗWŖbžĖôpđŊ-Š“íNØ08éOŖŗÄMĢ- Ŗ—ŌMš+߸ƒ9ÅEŽqVĻã5Ĩ[ÅŠÍ‹ĘĄRÎ~¤ĩ)QM`+ŽĨ7d*ļW:1rrũšJ•TbĻNERÄBüģ,žŗ‡>í‘ŅƒéRđrM?3ÅÆ.ŅÔŌ†URjķ|¤4R°Ãb‘FHŽ•4ãĖyōĨ(Ôöo{ØR¤Sļ,ŠUĀ(ĘU‡¨§JwjķjbdãĘĪĸÃåđRį‹ųyúŸ8kēiŌuËÛé ĨTúŽx?–+2쟊–žG‹øââŨņSü…pĩÄ9Į–MQA"ŅE”QEQE{ŸÃ”X|dGü´yžģˆū@W`9Ž?áãĢø*ÄĒŌõŪOõŽļ3Æ3]Õ¨§J3FX \•iR—waäāP 4ŸZæšš%ėzŽēöÜ­ü‡ŌQA8īY(ˇąÕ*‘Šģš@4 äfŠiĘ.Ä5 ąŊޘĸŠ(¸ų-ĸ ¸Ą; Å´F˸ pi`dõŠ Ž+Ąb/'CåņsöĢâūĩRö  G;Eb—<”bu9*4ÜįĐķ‹đŽt™˙ˆ‰PũŌ?™¯-ī^§ņuÃC¤ŽyŨ)Įũķ^YڔââėĪ:ucUķÅŨ1(ĸŠ’EĸŠ((ĸŠ(ĸŠö/…7>w‡Ž­sˇҔŽčeMy7­Q-uˍ>BŧäĪ÷×$ȚõŲ#>•߇Ä^ÔåąÍˆÁ~íÖĻũå¨Đr¤R§šŋz¤#Œ÷­+Ú7‚Ų“ƒŊD̎ŦnŊPÆj/›­9r ¤Á8Ŧԕãk›ÎœąQSm¯/;ˆšČúS¨ŠâœšĪf?e \(ĸŠ–j˜´RQHwbŅE% \R•‚Ŗ”ō)ûšÅDĮ-ĶÖģ°´ÚėxŲĻ".‹õ<ƒâĨߝâ k`r ˇúą'ųb¸*Üņ^¤5OßŨĄĖm.Ô?ė¯ųV%s֗5FĖhC’œb6Š(ŦEĸŠ((ĸŠ(ĸЎ§ßK§j÷°K‚Eúƒšú?Ož‡TĶmī lÅ:úöü |ĖzgÂ˙y3 æLG)/l[ŗ÷_Į¯įUjSåv{3ÔT|ؤÜAÁ§89Ü֙ŪŊzmU\ΎÜĪĨ†—"ēiŋFēWƒRÕz‘ĩa‰ ­Īŗ.ĮģĒU>D”RRמãcčKĢX(ĸŠ[”´Õ‹E&i ĄDTĩĐN:Ō ÷¨Ũˇp+zTyįĘpâą~ʓĩ{!˛ŲŽsƚŌ螸‘_ÃĪ9=Oā+ $*–$$“ĐõáŪ4ņ x‡[g‰ØāĖp/¨îßRĨwר¨Ķ˛ÜųÚ–"̜ŊYËæ’Š+Č=€ĸŠ(hĸŠJ(ĸ€ (ĸ€ ‘]ĸ‘YĢ/!Á֊(ß|ŦÜkūŠâė=$0ŗãĀûÄzšŪuQEua¤ÔĐņ°Œ¨'$GKœsEë3æSŗĐ\šˆ4QYՄy^†ô+Tö‹^ŋŠ(9g4Q^;ZŗëĄ&Ō#v=(ŪqEéBtãĄķ5ņ5UiûĪv&ķŒf›ß4Q]4áôG,ęJvæwąįßuûģĶJļ>ZN¤Ë ?3/÷}…y7j(¯+ÛĒĪ_’¤Ŧ%Q\§HQE´QE˙Ųleptonica-1.86.0/prog/hardlight1_2.jpg000066400000000000000000000033031506303110300174740ustar00rootroot00000000000000˙Ø˙āJFIF˙ūZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā uĘ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?åüTâ˛×?ė!?ūŒjĖCÍXCS!æŦ!ŠĐÔĘjU5(4điĀĶÁ§ pā)vŌmĻ‘IIFhͤͯrĐä]Ķ?ëŌ/ũWÍ+?ņYkŸö¸˙ŅYhjt5:5NSĄŠÔÔĒÕ(4điāĶÅJ‚ĨTÍJ#ö§yTŌ•.*#M4™¤Í&hÍ.kŨ4ų4Īúô‹˙@ķ'‹üVzīũ„.?ôcVZšĻFæ§FŠŅĒuj•ZĨ RŠÔÉÖŦÆšĢqDM[Žß4˙ŗqPÉ*¤‘ãĩVqŠ€ši4ÜҚMÔn¯xđ˙ü‹z_ũzE˙  ųÅ§ū+MwūÂ7ú1Ģ)MJ­S#TčÕ:5LÍL­RĢTĄĒT5j1šŊgĢmqZÚûTÆĶŽ•J{lY—`ôŦŲF ĒnqQĻ–¤ŨIēÕīž˙‘kJ˙¯8ô_0øšŋâĩ×ŋė#q˙Ŗ˛TÔĒÕ25LÍLÍLÍL­RĢTĒÕb6̐ö­Ka’+~Ę<[0Ä6ŠĸĒ71€ a^.3X—T%jŽÍL/M/FúMõô‡yđƓ˙^p˙čž^ņy˙ŠÛ^˙°ĮūŒjÉĨSRĢTĒÕ2ĩL­S+ÔĒõ*?5b6æ¯@ũ+ZŅÆEtv.8­¸\mŠ™Æ*…ÔƒšÛé95‡s'&ŗe~jzŒŊ4Ŋ!zC%}áŽ|-¤úr‡˙@ō÷‹ĪüVú˙ũ„n?ôcV@4đjEj•ZĨVŠ•ęUz•^ĨGæŦFüÕČdéÍiÛÎÖŨØæļ ŊëSĩčĮZÎģŊkîë$ÖDķdžj”’qP3Ôeé ĶKŌo÷¯¤|3Ī…4úņƒ˙@ōīŒüVú˙ũ„Ž?ôcV84điāԊÕ"ĩJ¯RĢÔĒõ"ŊN’{՘åÅ\ŠãV„7„Í_‹PĮz{j$ŽĩRkėįšÎ–ë$ķT¤›5Yä÷¨LžôÂô…éĨé ×Ķ>įÂ:/ũxA˙ĸÖž\ņ˙Šã_˙°•ĮūŒjĮœ <xj5<5HĨWâ¤R+ÔË.*t›:\cŊLˇG=iMŲõ¨Ūäžõ]įÍBŌÔ&OzazazBôŌô…ëę sāũūŧ ˙Ņk_.xÄ˙Åo¯˙ØJã˙F5cNœ 8xj5<5<=Hžœ˛{ÔĸZxšŸį{Ņį{ĶLŪõ–˜dĻ=éĨéĨéĨéĨčß_TxOŸčöˇ˙Ņk_.xĮūGūÂWú1Ģ(Å;˜ĒÜQŠv)1@ ŧbŒR¸¤Å?˜  `˙‰Ŋ—ũw˙BS´ą˙{?úîŸúĸ¸ą[ŖĻ†Ė‹¸ĨÅ-vœŖqF)ØŖÜQŠv(Å0Š1NŤbŒRâ— m5ˆE,Ä*ޤœb¤Åsū#™ņļ ÁsŽäŒÖuj*preBŌąjûVKvōáĪŧÍōęk’ÖĄÔĩS˛kö1˙Ī(†Õũ:Ô°ZfG3nŨcĪÖ¯éŒ/un0:î$täĪVŖĩÎčŌ„j Oæ[‹e+$’mĀá@$ņč+ŅlėEœa–Ą"­Į PF#‰pŖĢË}iدG EÂ7–į-ZŠOA¸¤Å?bēLFbŒSąK@âŒT€ Ō=(˜ jJB)>™˙!k?úîŸúĸĻøšŲ˙×t˙ЅŊŨ46dXŖėQŠî9Dŧb“ÜR❊1@ ŧbŒP1¸ŖėT‹m3 Â'ĮŽ)6–ā“d8ŽkÄRnž5F}XW[s§ŪCĨ]_ĀXc-†8$ã#ÄW ĻXKöYnof{‰œüÎF6Ÿa\ēŅp勚ĶB >f@dĖŽr‚1Ī_Z_ fMzR:Û?˜ô‹ößš€ĮNÕˇá1­mæģ—–˜€žË×ų×. ÔFÕeh3ĸŖėQŠöޏŖ¸ŖÜQŠv(Įå@ ƒJhÅ7OÅ&ŌzR}7ūB–ŸõŨ?ô!EKĻĮ˙;ROüļOũQ\X¯‰46e|QŠv Žã”n(Å?cŠf)qNÅ âŒSąHÄ*–c…“éHcí§´†vkČå(€2ãįĄ$˙JĪ‹Rŗ‡W&ßʕ‹?›pd#=@ĪAôŽ3RÕ'ē”I:į$íBp'Ļ?­+ŧ6ëžF]ÃŅqšņņ5•GĄßJŸ*Ôī5}Z]NmĨüģDû‘€tüM`ÆpØW~yĀ< ĀZži+Hd™ērs[6ún§$^kĀ!|ũÂā“YET{"Ÿ*Ũ•įđäēæĨŊ–<æįĮ'=ĢĢŽÛė‘%ž?Õ ‡#j“Ež‹KEŨ°‚Yv„e:žžŋũjƒÄž"ûŗIuišíÎŲ™×8īŽ‡Ōē0Օ9ÚjÆU`äŊŌ\QŠĘŌŧK¤k2ŦރM‚ŪS)VĀëÅkâŊE$ÕŅČĶZ1˜ŖėQŠbŠ1OØM?ËëÍ āҊą°ĀÉĨōË”š‡b\ĶŧŋJ˛ą¨Z_”tC°–‘ŠZŸI“˙BU‹›íöäįũjŸÖŠäÄ;´tQZ2Ąp:ĶļúŌbģÎQ ĨÅ BbŒRâ—ÜVˆĩT˛{kC F›.ßîūŋō­÷a=ĢČGĨ00Ĩh fŌz žv÷*)ĒĮËÅ8IÔVĶTå,œācښÔƒ]°wøR •úŒb yIĻ'œVœ¤sˆvĻ”ÛĐRFâž[vij€Ģ 5ޕpE# ”âŖ•JCV˜š+í莔õMŨéD~âĒâŧĐd8ĨŲķ{U„ƒxčMKi &2Áöˇũu_æ(ĢVP•ž€„Ā.:+“ĶhčŖŗ(íNIÆ*`‡ĩ*ävŽËœÖíĮqV<ˆČÁ* Äu§ G­fîĘŅŖÃR@Ŋ*ПæĀ§Ŧ õ¤âĮtXŪŖî­&XžŖÕųž•2 ÛPô⍌áM2mÛ¸¨v–ëVĸ„Ųn9Õ皟Í\Vp@Ŋ4õ$Oœԋ2ĖœĄ4›×+āŽøĻˆĶĐū5QI ļʁIāT‹m#ôevŌžd8 U9>‚˛!ŠÍ‹|ü ēŠ #ÔûÔGéC#875›ģÜjËbg:UyJH0qR-ĸí$ą&Ÿ‹J~DÍŠŦĻ"{íNÆ0 ú֘ĐäaĖĄ}…P—O˜\´ ¸ëŠâö`â×@T„°ÅNŋ;„3ôŠŦôG#uÃŨ^ŋkÁk˛áŸSÖŗH­ĩ.0lĖ‚ŨÖxØŠQ¸uúŅ[%AÆFqEsĘ\ÆŅ˙Ųleptonica-1.86.0/prog/hardlight2_2.jpg000066400000000000000000000066231506303110300175050ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā€Č"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ëEŪÎ({ŒI!ĩąox“ÆTŽ@æžâØô;[¨¯!ķ">ÅOPiYpk‹ĶuĶî—*xĮ÷‡§øWi‰qKnGĄĢ˜ÚCN¤4†6ŌŌPi)ƛ@‚Š(  9ĨižôėRĸ†8ĸ˜įšb\žˇz.ĩ$ÛÛ ¸Ä۟įĐ×I{p-,Ϝ˙Ë4,>ĩÂ4Ū]ŋÎi?{!=}ŋĪŊ4„ĘúųŽ7Pßŧož~ŊT H˛eaÎ{{Uh3st]ųKˇģŸ§ōĢMUĀ‘IyĢa‹§jŦH]Ŋ̤Ōŧ9w¨'´Co˙=e8ûw?…KxHč2)›OĨzx_Jˆbk̉›ŋ–ëNo čr wõķū˜ĨqžvAĨé]į‚de/§]%Īũ2qą˙ĮķŽ^âŌ[iZ)ŖhŨN °Áî"ļ ÅR´û€Ë˙îqƒü'ü ^Æ)’Æ˛ÆŅ°ČaФ"Č}ˁ×Ē×OámGsG<8,žĖ:Į¯į\UŖŋ’UĪÚ}ņŪ´lnZÚõdNĒD‹õäÆœ#ŅČÁϚpu•E?+€ĀûiŦ‹iĻžiĻ€i´§Ĩ'jb (ĸ(ĻæÍ*&?1ŠDßxĐ#ÄβŒ+ÖWTüÍqˇÎæîä¯Đ]o‰÷VŖÖuŽ"âBĮ÷÷ú¸‰‘ØŽÛMŨäbĮų ´Ģ“PÚ¯úéšéĸĒ ÔđšŠ`yOĻ^Émr›dC¨õƨ^Ÿâ]1uÜÆšŧ´RÃ^>ãđëųיēāÕ'q2’|烝i#ŨøŠlŋŖb˜Ë‹ûVĮPãôÍp§Ųę„z>‹!“GˇÉåOČãųUãY>9ŌĪũtoéZĻŗeĄ 4ĶŠĻ jJSI@‚Š(  ˇSĶĨB*D<Đ2QQ8ųĒ@i˛ G?âE˙DŽLd$ȝp×*ˇ´…<ŠôMb?Ož02ÍĀ÷å\ânœp&PĀû˙úęâ&>ĘÚE¤Āpáob§?Ȋôŋ XũƒÃ&á†$ŧ|÷ųœ×ā™ėÎĨqĨjQy–—x•W;JČ:āö=k͝判qĀĄ!B"ŽŠAR÷‘!Îj#Đ •¸&Ŗ"€G5aíÕ IŠKįåGÖ́RcŠ@*D¤žš§ŒPž™7—:“ČčAî+ÎŧS¤dëˇ6Ę’[|GũƒČ˙ÂģëS†Žë>™­ÚÁ5üۏŧYzâ„ėž8đē˛ &)&ü Ú?‘Ē@đŋí1­MJú;ģũCPE 0ˇļQĐ"đ1TV%ûMŧ@ä¨ÜØéëVļŨčSIR‰Øūŋũj͍,áû=”1cPgëSˤ!ϚSHhÃ֊ QEåŠF)ų dĘxÍ‘ŠN ?4—ĒLmRŨI@oĄâš nÃɒTNˆ|؏Ē߁ŽĪWƒíZdņķ$}G5Ë[Ū%ũĸ[JÁn ˙T[ŖŽëT™,ĀˁõšÛ4NŽĮü zV‹ŦÅĢéŠ2žz:įîžâŧōT:}ך‹ēŪNOōŠĸ–ãDš]OOĖ֒cΌw˙NK¨'ĐôväĶ{Õ 3XĩÕm–kiâǟB;Vˆįš‘€^zU˜-žpÂ4,Ā@­Ī.ëōO*ä}i6)ŒŽŧPnjZ9Gi-Žäëŗ¸ŦVNĄ0&ˆãšįŧ_¯IĒévm›Ģ¯—ā^ėiúÖēēt;aC5˝‘ÆŊĪŋĩr3‰lD—/įj—=qÎÁč)ĨpŊŠ7(†â$˙{UË7ŋķīWŧ;l.ĩE–^š {qüǃÂҁjyÎwLŪžß…jčN?ļ­‚pƒ*ŖÛ›ŨM=)sMÍI@i†M4J(ĸ€ (ĸ€)A⚠( c…87cL– Ø"ŧįUˇ6zœŅŽlŽ="ŊĨr^-ļÄĐܨûÃaúŽ”Đ™›oqŌĻ-÷‡¯¸Ļ'Úty‰AįZŋŪR8#ŪŗFUÚĩlĩ,~îqšOSŠ´Åbht¸¯dûfyö[ÁË[ąÆƯÃâKũ=„ZƟ,dqæÆ2>ĩQôģ{œMi6Æę0z~=ĢRÎûZ˛AÄIyũ5]Ü}i4˜īcRĮ]Ķīîžā‚ tÚ.ŠclîfēŠ0Ø™°+KģĐĻp×:qIŨŖb1øWY;øz[Ũm*Œ„ۏÖĨĄĻeęŪ7Ņtüė¸72ã"Rsø×s¨ëšĶŗ[@,-Øķ4ŋ{ÃĩlęZĨĸĘ™ Įæã)ŧÄôŦkĩÔ.—ĖÔ.E´_Ũ'ŸĀSQ[ą]ô+ Ŧ4˜ü‹æĸī™.æcíUd…äš{ŸŪĢ’ą˜õ^{ømŖhŦWbŸŊ3ujÎkŲ|φ7eūøĪŪúĐ„Ũœ’~võöúV§†Ķ~¯ūę–ũ+WQáH9žāŽ03C¨Í!ĸŠ‘‰šJSI@Q@Q@ šPi€Ō怚Pi€Ō恎ÍgëmĶĨŒ ¸ų“ę*öhë@0u āŽ”ĐÅk ņ–mŽ ĖkûŠ8ūŽ|Ф"Ô7†ʖSėkbĪÄmnFPˇĶå?§Ĩs˜ĨĶŌtéęęˇ6ōŽO'ËGĐ×QuņÃöČțå$|ģ!ürkÄUČ9Ĩ26:š@´;MWĮr\1ņŧkØ(TūUË^kmš‚ƒëÔūĩE‰<Ķ(řÎX’}M’Ö’Æ °U$ā ô-2ĐXØEņ–>į­sžŌüĮûlËō'ú°{ŸZë3I‚ž(&›š3š@-€ŌĐEPEP˙Ųleptonica-1.86.0/prog/hardlight_reg.c000066400000000000000000000116261506303110300175000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * hardlight_reg.c * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void TestHardlight(const char *file1, const char *file2, L_REGPARAMS *rp); int main(int argc, char **argv) { L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; TestHardlight("hardlight1_1.jpg", "hardlight1_2.jpg", rp); TestHardlight("hardlight2_1.jpg", "hardlight2_2.jpg", rp); return regTestCleanup(rp); } void TestHardlight(const char *file1, const char *file2, L_REGPARAMS *rp) { PIX *pixs1, *pixs2, *pix1, *pix2, *pixd; PIXA *pixa; PIXAA *paa; /* Read in images */ pixs1 = pixRead(file1); pixs2 = pixRead(file2); paa = pixaaCreate(0); /* ---------- Test not-in-place; no colormaps ----------- */ pixa = pixaCreate(0); pixaAddPix(pixa, pixs1, L_COPY); pixaAddPix(pixa, pixs2, L_COPY); pixaaAddPixa(paa, pixa, L_INSERT); pixd = pixBlendHardLight(NULL, pixs1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0, 9 */ pixa = pixaCreate(0); pixaAddPix(pixa, pixd, L_INSERT); pix2 = pixConvertTo32(pixs2); pixd = pixBlendHardLight(NULL, pixs1, pix2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1, 10 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix2); pixd = pixBlendHardLight(NULL, pixs2, pixs1, 0, 0, 1.0); pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); /* ---------- Test not-in-place; colormaps ----------- */ pixa = pixaCreate(0); pix1 = pixMedianCutQuant(pixs1, 0); if (pixGetDepth(pixs2) == 8) pix2 = pixConvertGrayToColormap8(pixs2, 8); else pix2 = pixMedianCutQuant(pixs2, 0); pixaAddPix(pixa, pix1, L_COPY); pixaAddPix(pixa, pix2, L_COPY); pixaaAddPixa(paa, pixa, L_INSERT); pixa = pixaCreate(0); pixd = pixBlendHardLight(NULL, pix1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2, 11 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixBlendHardLight(NULL, pix1, pix2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3, 12 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixBlendHardLight(NULL, pix2, pix1, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4, 13 */ pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* ---------- Test in-place; no colormaps ----------- */ pixa = pixaCreate(0); pixBlendHardLight(pixs1, pixs1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); /* 5, 14 */ pixaAddPix(pixa, pixs1, L_INSERT); pixs1 = pixRead(file1); pix2 = pixConvertTo32(pixs2); pixBlendHardLight(pixs1, pixs1, pix2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); /* 6, 15 */ pixaAddPix(pixa, pixs1, L_INSERT); pixDestroy(&pix2); pixs1 = pixRead(file1); pixBlendHardLight(pixs2, pixs2, pixs1, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs2, IFF_PNG); /* 7, 16 */ pixaAddPix(pixa, pixs2, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); pixDestroy(&pixs1); pixd = pixaaDisplayByPixa(paa, 4, 1.0, 20, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 8, 17 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaaDestroy(&paa); } leptonica-1.86.0/prog/harmoniam-11.tif000066400000000000000000001053021506303110300174220ustar00rootroot00000000000000MM*Š (7˙ )ĸ_í˙úũ>÷˙5ūaG (1Vß˙ųM>Ÿûûņú˙¯}ü˙˙ŋ^k_ũGûVĩü€ …˙ōš,čŋËdŽŋ–ȸ¸[–Ȑ&ĩˆáwĐ!ņ„Mš¸%|T+č/×Pׯū6ŋ6ˆëĮ˙đ˙˙ŗŸ xFĨ˙ū@RĨīūšl:ž%šHĢĐwË]HFī–¸ `k–šHl–¸’ _ ¯–ēq„ˇŌųk °ūZķKk‚Ci¸åŦd ĸŸ†“MSÁđ[ā“| E¸5đD5›¨!Āŧ/áĩËXT5Ũކŗqf<&M߆Ŗp@›áŌn–S9fZÅÁ¤xAt.rÖ@fŧ"L† Pä™\Éđ`(¤2ã(fÅ#@Š| ‹r]2\BgdpBĩRˇĮ ˆĒ;8ÍrŪŠ“pEÉš@h&Ëm ÎæFŠŋ  Âkɸ f‚!Ėɉ•’ šapΆW’°.ˇËs4F†VÃPîÃa‘vˆlTh3†RāMjˆ,lÔu„Ķø@ĶCm-™ä5khCB…ĐDX1Č-%üŠ‚’ōÜ(áĩC†ˆ(aEGuéß-ËUB§}”kÚ!ĻŽ\ Ģ |Kz[常+ļvŖSē™qöƒˆŽáûIüxAŊį~ 6īīpÂ_Ϛzé÷÷ ØD  &ØXAĻwjģīž Â_ĄĢíũëŪ †ZČKÂ#Ē„íoŽĩDŅ5đ’!”@m͝uí†Ē¤׏TA¸6@ûˇ×d”2Ÿ A¯„@āø7UáĮ¨ Čnáię6ƒĸļôŽÕô×Ņ Âôƒmí †Ŗ‘m6Z ƒ\6—IīĸŌMˇAá@P&a°!A•įg€jŪÖ¤Th' ÛČgUi4 6TÃDƒHéAŖXf\ˇø@Ō ú}§mАÎL?UjŸ ƒ¤ÛtëƒMĩ #=ģ˙Į¤ô˙uļÛPYP{˙Ô2:ôęŪŋ_ÖÔ=ģęģę&īĩÜ6×ęĄßīŽ“Ģëõ†úŨiũŋŽ“Ķmöžīü.Ģúūéz˙ßīî×Ūūīé7ëŠ}~Û^“Ĩi}˙Åīwü?ĩŊĢ˙uē˙õw}.›ôûūŊ/ūęúN¯úũ˙ũSöÁ2ŖÕéĩ_ß˙¯ūÄ_öŊ÷ũÚôˆwî đĮĢ÷ŦŒzîŸ_Yęģõ{ߡõũé1t˙ßô¯ũiīĒÖē‡×ŪEz"ŋtE~2#‡ü-…ĐMvũû¯ŋɄíĶ …_˙ÖļŋĢĶáļãĩļôūßëwŋkč5oĮú˛ČE×ū˙ëīIũ×m÷Ú^Ú§ĻíũZí|?¯ž˙N¯ûūũ~ô—ļ–ˇ_[Tˇ]øcöĢ_ũÛũžŋoãŋ¯ŊVŊ×^ũ‡˙í*īîļ˙Ŋ/Øģ§˙_ ˇŌŊ%ģˇõûIvūČ`Fū—Ĩûûí×ļ‚J=ŋß }˙Õ˙ŋnūė ģÛ&ék˙Ŋ{uûúOf Ī~Ãú˙ëũ˙q ö˙×é_uû}­ÂzÃwũÕ˙uũ‡ûp[īû´žŌũŋ¯÷o˙îž˙Ģu̧Ūß˙˙í'" oũČ1ͨx7ûũ´ŋú@Īߤô Ū§v ×īöŌō\ ˙í­a˙˙×˙žū•áŋvëŊûité'Oˇúī}6>ú˙_˙aúšŖaõŋßôŊ´Ŋöû‹Ûü›’˙ũē˙îöũwßu÷û¯Ŋ÷˙Zļ{_ßŨWkģíú{‡<īû˙í˙ß{wí×ĩûK_ŊģöĶßē^˙ÖŪ’īų+âÉš"˙Ũkuīˇ÷Ūö6@ĮŨ*˙ûõč0ļęīíÎFīI:ûuãˇ÷ßÃMĮdĐīģ¯˙ģôCZžī˙ûkî—íü†j~˙ũ´Û¯Kí/Ûų}ß!J?_īũoĐ_îÕu]ŋOo¯Û˙î¯[tß×Õūũ×ŋ´õõ÷]É%ŋi{÷öũŋî—MØũģûĒí˙é{ūģĐJû˙ö•ĨMŽļ—Ž˙ĶīũŋŽ?˙ Ģũíúų7­Ģk´´éjļé¤ßÚ]‡WKũ÷Ž˙íí­áÉ5m[]¯bŊ,7Ķ}ūš´›­˙­w×VûN×Úļ—^××T“{{ Ą„ģkkúūˇ×ÛģĢKļ“i[^ūo û{k %Ø=ĩ_ęõß |?X0—a¤õmiŋĨžˇļ›h(a.à jJƒfˇKĨ~°Ë„ģí$>ØI°MôßPģ_Ŧ†˜Ģl% °`­¤ Ōa:TĖāŠēTäˆ4‚ĩK†VŌ7Đz’°U!‚„Ū Ú ‚d eļA†Õ­pÆÃ HkW Ļé„)7+ ¨" ĘFQôAļŠv˜i Ú „ôÂIē \ Xƒud3B(\; %āˆi Ņĩ!˜[X‡VÃj ˆ.ÍNį@m@đ ĩO°ęČjB‚í2 T[I č ›ũaö* BôĶt žžØ)€¸iĒė‡KũdH 4Ô"@~[–ißđé^ēÁĻC†ƒNSŸ ÕySG]+õ!•BcD80„„5CËu0Ö Úâ;´ŧ†5ϤCC9‰Č*rŨ( A§vDüƒ ŋTá‘F”ƒx/ŠH‰bÁ5ÄBUŒĀeP0ži‘T‹$N" ‘(Bd´ƒÃN „"B2 Ї$B%š`4rn.`ɡ 6Æ"Ëáŗ“pPė! T˙˙ (3˙ø˙˙˙˙˙˙˙˙˙˙˙ã (L˙÷÷‰åã (‘TŅKVl'ËS@B ņ Â ĖÔ´ëͰĐÁËj>ōÖˇnZÚßw_ļŪCûD¨ȍe†ŸåĻ\0Ûž›á֛ß÷ī ī~´ēģũ˙ŧ?ēüŠ;Į{Ûūßö˙Ũúo-c ˙ũŋûoũŋû˙Û˙ˇ˙ŋöŪZÕ¯ú˙Ã}‘×ö÷ëûãũŋû÷ū˙ˇ˙˙īũ˙åŦžô¯}SׄĶ‚ •p˙A„ßč?ũĻ˙]˙{ŋv¯ė„tĶß ÚĄkâ-_ W÷īßžÁz]=ž@P#ú_đ~ūaũ§ũūēϏ˙ß˙ûõī~ũŋŽĄ`°Du.˙ŊījÔļ°3“p—Ëed6ÉąX*Ë`\É8–š\m‘P3´ā§-‚n3;$ĪŖŗĻ˜BAÎN EËHđƒ-!§ąq!#2čCNYJ¨ gk`AØ@l;d!§‹‚CYn$\Ž(†ƒ˛Ô;ŦÁī¸y6Čę[ę er`xe‰ØL4ú_BæA`A8f‘ YA¤KážÁē †Ü%ęái•ŽĶŅĪiŪACPmŌéŠØ¸{Õ6ÚļBÕuPœ;ŖŊđKR%ßkÕՐm;Ō0Û!ļ––Û¯é´j ĻęAŠ ĘØjvâĶVˆ¨ŠØ(fƒÜ†ŪÆhNÁ† &“āƒÃ I ĢpoD5ļ aļLÃ+PōĻø !d5ŦŊ‹ŧēĻlL‰˛Ē™`qW ˇI6ÛTS†ƒIáŨ$ƒaļ°¯IÚĨÛ;H ¸H6Ûęé_uܤƒmž˜žžØt’a°Úí´—áwoIˇõuSĘîÛ}&ßöCõa~ô›o­û˙îūíŊ÷˙×ŊRn˙uhmū÷ĢmÕßo÷íĶØmīŪŋŊé7~÷õīˇJļģ˙ũíUģN¯˙ˇŨëߡk×{Iģīû§ũ­÷oíRnũ?_ũúģo všūū֛˙†ĩ˙ũ.ūŋžŊ_ˇo÷˙īõäH~¯˙_ĩÛÛûY ÷ũ˙ ƒĩöë]vŋũĨĶvßú[]ĶûũûûŊÛ˙ũZWŋ§¯ūū×ßoûûž›_˙Û|‚îŋëŦ‡U{~“Č#Öī÷ûˇoũũäĩĨūũáÖ[ũž˙ûd5\Žuz;–Ÿ¯˙_†D.„Y!îė#˛ s´¨ƒī˛ ‘§iūČ4†\9@šĀaöAšōi“‚9*Âé‘ųG€Ÿ´Č›W„d;đĀa5˜Ü Ȱ„Dv„Dƒ/™-ƒL†žĨŗMBg‚đÄʔž!h26ē42f’™rM ŽvQá햏Į ߏGãČ (OÖ+_ë˙˙ú×ø?‚Ķė˙ūGõ­ōĶS\´ÅA‚4—gŽZJAÂaĐ@†VĪ‚!œmĒ ˜ >ũ>wž›T˙X  'ę 5Č/wv™? OOA ūúMŋIöúw×ļ¸kĶīãöģKøũßũú_woʇëßŊ´ĩė5˙÷ëa÷ũŊŌûēũģäaũŋX íŌBD<6ŋŅ ûö•īÃ|uŋnÚö–īûžöšĮûŋūƒ_ü5‹–Ļęã„AũkĶU/n­īŊ5˙ޘ_ÚH7WíPxXä"ŠN’ë_‡´ŊĻŋĶM2‰zí˛ÚҰ‡–‘Pc_ī˙˙˙_˙ūS BôA†€.ø~”Čâr™åĮ˙˙˙˙˙˙˙ųmũÁz\´ĘB/-1P"Ė–GË. äŪ*Ė‚ŽYNˁāˆi2<ėÁ‘Ô2š78gA§zS!§ŊHب3´E¸ĪBĶāˆ4l˜0ˆ7a ‚ ŋc~\°‚9 ­—i¯&đšC_`È4A_dŝ†úāˆoÁہžčC.‚šĄë[K„ė&ˆgĐ8lŋÂr^´Šāáĩŧ.¨ Á„ Øa˛Û9 Ũ—‡ÎĘ+…AÃ@l2÷Ä &ÎđIe & Âč†nPA°ØinžÃ!žlėÔ6@i°ßŅ Ē´Ãm„"ŦIˇÜl+ ĨŅ)6 ´‚“náĘpĘ­ë @č ûH&’aŊ¸6öÚô&Ût¤Ūøm˙é:Mļá ęŪÛA‡÷ôi'oAi>öŪēô&Ûz~öđũß×X}%¤ŪŪßnĢK„íëĨoíëīIÖũ'_íē˙ĨĨw֓ˇ}§Ōz{Ō}˙oOú^Ũéi^û|Š=5ūļÃ×Ûú}_ũi=õ¯ûuWkŌûˇWWũŊôŌŊũ%úMę5‘Gé0ŋ÷÷ŋ´•Ģuˇ×jYJGö˙ôŋ_DAãĨ~ũÛû‘ģ¯÷°í-×Kūëûũ_]é7Ú˙öõ˙˙ÕŌ˙÷˙ ˇöûŪ—{øKú÷Iz^ßÕëúŋ˙õo˙ +¯m/ū˙Â]û_ßŋũ/ëIŋ,ĸëūßüW Až ¯I˙ûzũ~…í¯˙ÛûôŦ/¯oū˙öũöū˙īú­Ĩo_Ûũd17ũī_īÛûđ×´ŋūŪßÕ˙"áƒuõßößũŋŌŨ,wîßŊû­˙ĩÛ˙ģëKŨ'˙M˙˙ũ˙wūûēßõûKÛko˙ßZOŋ˙Ûß]ŋûí}Ŋm÷×ëīą_ũŋuÛ×[˙Ũ+ˇ]õīĩī÷w]˙¯iíŊod“zÛëîŋeNmmėw_¤é{]ĶŌŨī÷˙ŋö›~÷ļŊõ¤ë]ĩtˇutļõ˙~ÚÚûi6ĒÚ×OÕßzŪũ/uUŊûjŨnÚˇW×ŌīŌŨŊ´Õ-&Õû{kŊ­¯zëŨ{VëÛÛ]Ŋ-+ûļ­Ĩ‡aĢimá%[Wė5a„­ÛÛA-Ē ĢémͤŽÃH6–Ũ¤šęéÛH0ÂWļ†F…oKNͤė0V $Ũƒ 0ÂJ館0˜OAŲ¤é† .Ã5pÁ‚ 6Ĩeh „CU”2tL0JČ5ÎÅa0’•@Ķ%ÃPĒkF°Ûąą mąA„†ĀĶ4Í@Ē<‡ ¸4‡Âƒe@Á0I<&ŌÚA¸hA6@΀A§īÁÁ‚Ol0­†„ D5Ę.ē–QŠ xpÁa¸AR#b;×Շ ¨ ­án"4ÂeA 6T˜paS„S° !ÃÁemlƒv€ŧ2vŽÆÃCįi0ņ‹ļh-Ë­˛r ›f{ɸaœGs˛ƒgVC>ÉŧC+BÉb""ą–=åļ—ũã˙ũdĨ§˙Ŋ_˙¯ĨëK˙īīīū˙Ĩūū}žßp@ģjļãŋŪü˙ŧ?˙˙–C6Ke˛.Dn•ÁZf]C8dĖZpR@d9)6VC’Ēb ‹FBę X‘+$RH\ąxDC"{*"k"†…’Q 5‹ØCAKA—"2el‰(l4 Ār(T@‚’tĐi„É2;P8d´ Ązv™-„ÕSˆŒ% `–XM2›)\  XTĐŅ ŗ ] Áúë§Ļvš& x;_´Õ†Úuˇ Ũ:ęƒũxA÷ׄƒh=„ÕŪ!;L$BįTūūƒĒ×ÂA‡xh0ļÃH… Á$ŌūŨo]˙Z ļÃģ ÃA pČ$ØatđAîÁ„×]b_‡ÂAš2 ‚zÛa$ wzxU†Aū †5Ntpa2Ęxi¨ Ų ģé&¤ĶĩTԌ;Øiļd(Žŧ a˛ §œƒ[Ÿ!…I6ŨŪģéŨ­÷„ūīOxĐM†šäRė‡NC‰ĻûÛōBíŌũõkÛéĩ¤ŽávšßmoôŊ¯ÚĮÛŧ+õk¯IŋßĢ´˙Įņíßפߨī˙Ũöˇ¤Ōũ˙ū•[˙ö÷Æ×Nüõ˙ūūŸé>ģĶ\”='$-oŋũI¸š¤˙÷¯ÖHüSīôíë˙ ~˙˙W…ĶtŊ˙ũ‡ũ-˙_Õ˙Nų{ˇúũčßü›š!˙ŋ‘Gë˙_Õ7ļëß°ũôŋtŋOé7úŋęÚ¯mĒá~īõŋ}˙˙˙Ū•‚v•~ŨEnÃ÷Đ]wXûúo˙´Ŗo_oõÛŌģIõŋĢß˙īžŋoŋÛ]ķa?t¯ûĢüĒûô¯Bŋĩ˙úũ˙ˇĒ{tũ+zß˙^ßãũ~ž=ģɁd'ßoCūkÖŠûŋr:WŨa:~ßš ;ūū˙û˙mˇ^ߎūø7˙_˙˙ä-öĩ]žú÷lŠZíūë˙î˙éŋŽöū•ĢÛD[ûõŨ{KÕt­{Wivū­¯t×í}×˙Č%ž÷öū¤TUŽŨĮî-N÷~›ŽßԊũmâôŪīūäBT÷÷ûĐM˙kŪęîí˙á4Ī-ēoú÷˙×ē[ûßĒžÁ¯Û~˙ũ_ŨŋŪ’Ŋ˙"‘kĐēŊŋZ]¤ũ_úģûß§Ûßo]ķ§o˙m-ĩi[OoUĶ×}+ī¯Â"ˆtŊ_öũžŋvŽŊîČ4Ŋ_oö­;ii-īÚ[ŲN°—ģjšĒúBÂŽöŨUô÷_ļēZ[jnˆ`7ģM$ûŧ5”ú^ßôˇm'Uģđà ' Á: Ļ›°a4AžB ,0‘ œ]íļ’ŋÁ´°• ÷VÖØ0†ëh7bÁ !„[k[ƒ´“Âkƒ 6ŠĻƒ´˜0‚ .Ą0ƒÃĒ âŦ`͆Ãĩs¤X`“a ša˛pv)6^›ƒIRÕà IØ$Ÿob™xMŠh/o§ļÖˇÚzaÛJęęĶŊ7ao[û†oYžcI;v+~ ÂũZ×´ū †Ā2ņ2äH0ÂÅŠaڒ´-<6§Ú v0ÉC•!\4áI<‹Ŗ „ĶáÃBfˆą0Ą†Ķ¨F&ƒ@Á4K‹‰&ȔohLˆ!„§ ÖEpŠĸZ ˆ‰7ŅJę@\0„D2ĶDЄ\DDDė8ˆƒĘë@ÁS !ÃĖ­vÄ4ZeÄlFŲoā…ϐÃà ’M ”Ō;†Ū}ƒl€Â0}‡ØdWáĖ&Ã!§ĨāĮËp`§Áø5à –â`ŅËpCä×ņ_Į˙˙˙ä׏&Ę&ã2Ķ@´ÁYĩéôÂ"íKôîdĒy6T-j™xW2("l.Ęãdũ]?2[vd4Å 0D’ŧi*æI)TŽ 4='ûZ4Ô mi×ßOH'÷číoß ĒŌ÷Ŧ"wTA~}év’D8tēôÂųUĨ >¯‘8†2ĸ–•‚~ĄaBT´’üpŠëéÕ/ímeŧ%ĒĨ"uRņϞvd6´ŗ!ϧÍ3ŗĨ×Q¤Ķ_ÚM$Õzč˛ ­¤hGĪÉE­uæŒ¨ÉŲ<ĨB*™zäSzkÎĘūĄ „ ‰CÔëeeCÉ R*ã34d苯ŠDa|‚ &gC*ՄNgđ™žha3F•(RXō[cį`L'ō\DÂĒ`šĸÃ3vd!Ō!™áĻ2x 0ƒĘĄÖf“P ƒ!ˆ0D"y(¨MT( ĖĖ t§äāÕ5L_P˛ 2čY¤‘ˆŸ<ŠÄb)ôרT# ‚Ōi„ĶP™˜@ša˜LđĶITügk‚ -Ēi§iđĄTUL&ˆ&­šza5M)!‘Č&|Î *Ē„üņ ƒ4Ļf::°ˆ$Á„EŸújšĒφM4Õ5 M|☠Âf ôUĩM4đdžĒMB„ÂJĒĢ…U‡UUU_0ƒL*a4!¨  0ƒTČk¤ši„ĩUMS‹UŒ&š§i¨UMuUMi8â5UÖ× ĄĒĻ jWZ ŠéĒŪA¨_ëëëëkz~¸P]5¤-UpˆŖŅĮčŠ>5 ĩƈŖõUĩ×_UPšzkލ?ŽĢP´­W}i-T*ZŌŌ#Š#Ķo!^ˆ.ä#ĒÕÕ-R\r=ZY=RUõ“uĄĄuúkKŌ‘ÆCŅ+„°Č鄈∑ՐGTˆŪę—ĒĮ¯ONˆĮéu_ZJô—¯P•yđƒ„ĸ‚A¯H=t‰C_TEôĢôžBŽģúä15Ķĸ8ō:V’‘!UF”Ž(‚FĢH4“Ōõ†ē—¤ƒ˛=2 ¤š­ƒģk!‡\ ,yvC×DpęŠ^ŋũļZZę“)Õ:A…ˇ ĀũŨ „:¤Šuę …~8ĄZŊRĩT†ČWŌN-:‡ŌKę–aĐ­× îŠÃZ"ŋIęG=´—ūô—ĸ+ũ!ĨčRÁ„—Aī÷äŌIUzúI}tŋõú#ÚZ]kôF:ĒDc­¤­iŅ ]U?é+Đ× ¤—UúI}ikĶ]uÖŌG "K¯Jŋ‚Ĩú¤K-ŌI*[×KĒīé8áø[uÅTž’ū’¤¤ŠuúKKĨJĄV•%×ĨĒ’ĨĨ˙ĩ¤—H/ZI~ļ –T–ĢH …%õ¤ĢI%ÖēŽžúę’˙ę’K× ŊQJęēĨ]p]-$’KUIWK}%ZIj)V—ĨKPAūĒ’ŌA.ļúĒ]z×˙ĒUõô_].ŋ­}tĒK^’ ŋKũ~ ¯ĒĒJë˙Õk¤Dū—JēKĒ[¤ŋŌ_˙ū°˙é-.–Gū’¯­/Z×UĒT’ĨTTžßĒô—Ēé%­%Ĩ Ē—Tē­-oúÖĢôĒĒ•õĒžŠ ×Û˙Ēë_֖ŋŽëérÖŠ}z¤’Si*ōé-K¯Tž’1ĒÖŠ=ŌĒZëUŽĢŨ˙¯OõīŽžŠkJŠ/KKJMo_^ŠR.’JĨęĨH$šU˙I%],ŊŌ‘æÜƒēŽŠu_Zûž—]zJˇ RŌõáĸŌ­D‚ö•=WФ{û]VŖ]?MK¤•zˆõŌŽĒĩNĩNĸ>Õ/Ö ëõu­7ëTžē ˙ü÷Õ}÷ õ¤R:ëK°œĩŌĨé/KˆzPzTŠjĒdž¸CR;Wmt—ĨúõŌD;˙„˙õˆĩ˛;õÂzęĒ–Čy†–‡Ą_]u†a7ßTž”‚M|jš!ĮT•—KKJ¨ë´ŠkZNÖBFĸŧōČûõ¤ēА0?bԊŽ4ŋUžC¯ZI*ãŽ.Ö)kZÛŌëé}*[¤*?TBŧŪ­¯Ij•i'ôŽĢ~ƒ]$.ŊúÖĒĢŌŌõT¤#ÖĒģ Ö´’Z_U]%TŧURUUIĨ p—iRëé5ĮŪ;kú¯ŽšuôŠ+Ē^CC¤’J’ũƒ6´ĄW]$”…ē ĩ Ē•|‡ŌHl†2Ąj+ĻŌí(*ä ũũUUHwU]WUIWT’UTԂ°ĩ]5TÅ5O]uUPĒĒĒĒ”øbĄ"ÕB¤ĢĻ;I]RbĒŠ*†Ŋ¯Ļ˜[Ķ[ Ÿ…T•=T%ĒjĒēĨ­ íu ĻēŽ–Ģ~L ĐI5]U%Tõ]U5_ôą“a5ÚvŠĒjŠ…´Â­&˜]5UU]}U5 ƒM; š . ˜]BĻē¤ŠĻ‚ŨH‰Õm5 4ēkĒĻ ē¯MUS ǍMm4ÕU0žƒ,…[ĩUMu[ōĻh ˆ°„0™õP¨0ŠØTÂ…jH@A„ÖPšxTaVĶĩTÔ6H*ŽĶM4IЋ0…„, ÂĻ0†¨a5[ „a TІ˜N""Ķ „"Đ´Á Wˆ´"Â`š:AÅ§ĻŠ…L(bÕBĻÅ821 „DDDD4"Ą„ÂĄ„Z‚%°ˆˆŒŌL!dBКa40ÃGM4×DDDDg71OÁ0Äi„Ââ#ãb#ú‡ü ū ŸKD,?Ō9\åĻJũo¯ ž˙ĒVßuë1¤’ĮúÕ5JYĨˆ'l0´Âa9ž¯Šĩ,Đ)Ã˛ ŌË5]b!Šfˆ!7ZQ-: Įņå›ųe*)gŦ`‘\°UŠŪ†  LœļvāÂ'™‡Ō„•PrČRÔN“ÖYAžLš>˜4dÂ)ŽÅĒXAŅNr čÚ„(4û„˙Q´StG¤œ%†­/JôAųüŒ`L4‡úĒ4ģ(¸A–ũ­z7₠ڴ+]'Ļ‚īMkRn7 šÃ%^)WNŧJĀ>õ×Tŗ´­3ģ ŋęĨbÚXN¯JĒ‚z&:Ō—‘R]z„L$Öĩ֗O§‰Ęq’h—Ģ%C'<ŽĘŧŠD34ŒŲō4=Ikԍ3ēâ’ÄOK!Ÿ’§!æM ›§GÃôJ e Ķō  Ķ‹0„Ô(L&šÃ8* Iw“L ŒŲÔDÂdBgÍ2 Í™2đęBÁčdôĶ<Šî•Āä(éW ĐUõÕi$¤p‘'ōOëŌ *]<‹ioüŽ(ŠédKČ#éd‡ĸ'…¤×MoԃŽ”2#ԐĀéŋëD$W —K!‡¤Ü‚ãĨ ˆãVHúC ŠųÔ"J—R.wInŸ ĶU‹TÂÕérᄃ"ô*ČŗĶr Wtļ•$Šj™õ†ŊĒ é5Z¯DąKé8ŽõēC­†”ZJ’ĨIĄI*D‡á×k§—¤ĩÆ-]¯ĻA-"7TŌŠeTZK’uõétˆŨzín¸××ÕU×ǧ’ǐŽĒ$EŊ4ĩ]. â—Å?UđizK餗I.’]RT—°Š Ō¯^´–´ŊP¤••k×[UøI^ŪפēIt–•ŽĢ¤Ą‚Ņ'Z JĢ^’T¨ÂŌZô–•%^BØ_ 'ށWĨJĩÖŧo¤•WCIBI$ĩZŽF4ŋä‡KK#ŠtŊ¤•%ˆôŊڂK˙ ×֕úĒKéV’Ĩ_IRĨ¯ēIU%K¤’_I%­uÖëõô=iz†ú¯Öĩ˙ë_×]%˜õ]*úôĒ•dt!=?ékIåúÖUŸt–´Š*I´ē]*¨zŽGÕ=i/Õk֔߯–ší%÷Ž/J´ĩÂtŠRúIj‡˙KúŌdžŋI%Õitēz ^օøŌT•ĒģĒõÁÕkĐX?TĄéUi%J]kÁę¨?ÕBRž’m}Zū烺rWvaúJ睤šõ§qkę’č]ŌKÕ_­ĄŽ•¯ėÂŌaWijŦ}xMR×I 6´=Õ/Z]z°˛ ?ę’č!ZúI´ĸí&´ĸ´ŊãĖKq_Ö¸Nžô´¤õę=$–Ōõĩ­$ēÃø¨%ĒH%ŊRČGI%ĨQ­WkUÕSĨ!uÕqÕ}Hqü…Ōa¯Il…Vz_ęž¯ī¯IŠ_ĨJ4š:d+Ũui$´’Ļ’ĒŽ“ÕÕiuUUUISU„öĩd#áURMUT†ÕSTÕUUh*ūĒ’ú´ĶK… ĒtĒ•ę̤S]USõ ¸L.Ģëi֚§ëaUWė$Ļ:ŪSUT 4ÕSP—…];TÂĒa5ÕmSTÔ&ĒĄSP•Ē„ÕUVŌa0A‚ˇaR#ŠĻÂiXUD0ļƒA‚Ļ „Õ50šĒatĐa4D `šjƒ,.ąjŠ„¸aCB,B;M0… ĄÃB"â"ĸ" †E Â ô´Đˆˆˆ°„v-4> „Øâ""4#ˆˆˆĐˆâB-b†_‹ Ō X-Tt íWÃ@ˆwt:Ŧ0‘oú´ Ēü0H/­dÜ ‰?üiēI*úų^ ˙ŌÁ-„ĩŌáT› ‚%äŌ…ûuÂŌiÕŽ“ + ÚAŒ'a\A–lT¸‹ÃQōÖ ˙åŠeÂ!žČ厅ælĄËH ô“NŋŪßë˛ ?ũ õÖǰÂ[ã]0ĒŖËH•õOųQ‰ß-#„Âz”ᜤ,Ōa‚LÍ A¨*~CĪ5(Ƀ" ‰ éži„Ķ=ĸm0Až ƒ á5öN 0’ë`’„ DŪĢ[OUUéuUM5 ëB4õDŨiaUS_Jē[Ž*ēQõ]ēŲ„Ŋkĸ7­Pz!G]" Ü*Ĩš(ÖAqôÂKú"÷TCŧzDŖĐ:^•Rĸ:,5ŌøĒkKmZŌŅÚëũ/Z!úI~×H.—¤’_­WJ—{ęŠ%Ōđē­|*Z¯Åũ.––ĢuŅ>Š$ڏTĩüžēíiU%JĻ×KĨI%I/ÔRë_Bß×Z¯ĒIzõ^ē‘I%0šú˙!ŸétâŸNÕ% ëĒę_Ķéi,úH4´5âŽ-O`•úČqÕ(,v ÚÎ$ũęú~đˇdSŨ‘=<Šú֝íS§HŽ;Ũ!‘Ņ7"–ņũwŨ´ŸŨ[A}$đŠļŌü+R1ũŊHOé7WëWhVEįûzũëņū×˙˙┉DūęÁS#BëĶMŲsûũ-˙õkú_ũô ä\o_Ķt˙ũën=$4ãŪ¯Mv­\wŨ˙ū}=ũjôD˙¯ŋ#BŪãŽŋū×nĩ˙ŋ¯f¯ÖßčŽŋŌw˙üŠ1˙ûéûV–v˙ûĮDb;ˇ_ī§˙˙ī­Ķ¯ü§ũZ}N€ūģî—úūēēõŋõ˙ęë×˙^Lv‰},/Ē˙˙ū˙˙Iŋ_õ]cîˇ¯áQûÚčˆ?ē˙T˙ū+~ßëßuŋĐÉCˇ’ˇ$īīU„ß]=i~ūęĩ÷Ē÷{Šķ…_°W^ÉÖšŪ'ÛÖŌĩ_kÛ]+mž˙H‘d5īé?ūƒ“b ^í[ ˙a¤ŠĢiēŪŪŦ=0Ŋ¯ÜWи˙í ƒpƒûūģ3ū“‚…´ė"OoNÂØ[ ļžÛ ZHjšĩnH†¸¸n†ŠÃA^ųĨ˙°Ķí.Ä69 -Œ&”kŨPkhS[A᝱H>ãAŨƒáW]6}ĨVGl{}ûmĢa…A焨iēzl4Ēi­ZjéŋJƒA `•ǧpi-īIļ[í{žĢ~ũÛtÂ÷ßNÚŋi5âŋM8§ŨIŽĄĢÚé6ĢMŋôÛ Âk÷öÚŨÚ¤îZ 7ƒĒÚÚĢM4ĶMl%ģNÕo@ČėĶ2ęRí5ødŠ2,XL&\*ØM?í!Ní[ Ŧ"dv0šiÚ¨* "A ĖŧA˛(X á„!\&…ÚĩĶRëpÁS …:á„-a2 +&^Õ n-$! ‹/d$(\“Mma“(††""""."#ˆ†×!–"7QéuZX$ũ&JBŊ uĐJŌÃQ[ûQ˙˙˙˙˙˙åŠ~éáÛûļkø,´ÂĐm(Aē[´ĒšîŌŨ…-xüR{ÉôŊu˛‰Æļ1áuÚąÕ/a/ŌRUŅãN­§^é_Xwˆ>ƒēwDhā];ĸŽA§M ƒ–iš$D”9pd#Ŗ€ątėƒ‚ °†C¸6UĒBMØvRiÔ*¤ĄvƒZaT%awÔ.¸fŊĩĄJ˜qiÃZ¨Cģé(DĢÛg–JސPdmŨ„ÔŠ‰H†ˆqŅÔÂH0ä!Ûq¯4ƒ‚ ÃAtGÃvû… „%b&qÃļ>IR†]eöīĘEzĄA˛:cģ :s"ęŠQ,ŧ.mũÂGIzA ƒKļ[ŋXB -$’!Ļ8qąm˙M$MŌĄîãžštē ĖōyĄēĶNŠP6C¸Ãģ­×ˆô@đ+ąVN–ē֖@đW¤7l‹ Â_äéICFUpMļØluūú!Š Į>:úŌ ¯ „t PˆjÃ(xKúē E^8—âËÃ\ ‚B"Ãd|:×@” A”9 GÄWđP§ĀđÖú´ZAP˜" x xĶū…p„… Q6 ‡pímXB@÷ÂC\áĨđáIH `ˆdp‰Č5Rļ’ėÁĻ`äLˁš¨Dtl2—Caą>ĄõAB.‰Č&q{Ũ4‘ú8ŸĮTƒ‰ˆlÎ%ú¤! xl|P§ßXH†ĂŖÂũR ˛ Ž$‡Dy ū¨$šd XC¤F;H;ŨVŒÃEHD(ˆÃęUD5ėrœ„pßúáH†ŠÁĄ Ņãŗŗ~Šá #n ‡ˇĨ¤ĸFô>ļ‚NÛÕPA-$ˆHoäGU‚U ü†ß7ŧސA/A ČÜ%@¸äQČŨüZyõ„áa&×oīe¸)ĐŌ š ƒPkē÷˙ Ŧ‚ãĐB‚c IŽ?éD‚*!A!mƒöôE°´BÁŽ"%…ļũŋŽĸin;†G_cJŒ]T‚ Á!ÆũjLu°H"œ #ēTĩ#„d5ö @¨Ø/Ž(AŅ…>COdՐBâĻGÂ7­%aB„ Õ1áúŅ ÍÁ„uB&ÁhŽ wĒTF:DcĨJxoŌ­)Ų°' Eļ ;ĒQˆJŠÃmę•"sD\V‘āĘMģôĄGĄB°xH6øKB)$Ō iÅ֕#˛€Â„Įr šcšf­hBB+ČqÜ,h Ą†öG2ā^ ŠpIąõ<4I}ÁĨ Č;ļá(*X Ķj-ļáRM ļ¤caēX*ŲØA†Ã…B*ÆEpŽ[ÃtĒáBÛĒ!žI>˜[l:×­Ũšg4R†ˆ Ô9[뎈ÆÃõ b;ÛÚĨ ŋsŠáBI ›Š.>Ø}R@™/@ŨŨ4’D¸ Â~Ū܉ە"€ĀģVø`ž’Ŧ dĄl6A‹A…ĒJˆi¨Ãm¯T”{ĩõA#*Ũ0ÃvĒih eÆÃ(ēéh†ĖĒ †íxI@’ˇ´ˇ„E"āԘbØū…He!"+ŗŊE †ë¤„‚ãĒŗŗƒļĐ.ŠAFûÅAv ļģD5‡H'LŌÁH5RdŸĐԐņ†Ūē!ÜUąY|6{ĐD5G ÖéS ßāÖqČ7 C5čYS[ÄV‚ z`ƒˇ}Č ęЄ–ˆŒ&īøĐŖ´ęĒ6oü˜åš!ŌīPEáN ī˙ID#°Ā…Tƒa‹ũU"ۃëuŋbĻ¡ûé$C;Âŋ×I(ūģ‘pãwš/¤*gÉũåԃxNœBTa:[ą†ŗ°ß~HfĐ@ĀôûŊ=ŊhRRc‚’vë$8fįBãŊ$”$“#•ĮÚáÎ=:¤°ĸ˝ņÃä‡ 'úK Äûņᐸ˜ˇOցB}žņ(ĐEEŽZ …HŨŊČlpķ´ĸa†éīŠcØ´F=_ڇUī=Ō]GŋŲÉĶŽŠ" ģOĻ?ÁģoOlŠ= D7 û$‹’ļ5ŽŨ" Ûû!‡ĻƒÚq["žų§VŌi-kbƒPíŨvôĄņŨ­ē#‚ŲŗwúÄR{WøîŪ/k =ĨŠŪWēũ'ĩuęƒĩá$CPŋkD ē߈úJ‚ė$đš >¤Åz„2vxa]ŌBˆ'ˆMۑŋ†ĻΤPu´ŧT> rƒŊé *ĸÉq X,zĻ`x‹ĸÛ[ nR ‚:á!—ô Ņ˙\7Å1‡Â“j‰ãjį 7…ŅßÚK"¸l*‰)õIaĄí’ßIkē膐ôIėEŌPÅ#Á„Aˆm}ú†ˆ#Ą°ƒ –ė†wSģDŨí”é Ua…¤!ĒVØsÁ°[ {‹Ē[jŅ~ÂŨŲ¯‚ļØPŌĸw “Ũ‚ō n’ÛI$’†Ą/ žfčƒqÕ$í…@‚W°Rq†îŪĩ‚@ˇA%HMÂAA;˙áIDvĒÃh ‚i[¤ˆ+­ˇŋüt“¸$G!LøkéCđŲM{×^p mIÃJ*Âe¸ļáĻģ[Ŧđp˜p’†PŪŽ4:áVŠ t„ `ÃĢØLjģZęØH§@ß{Ië`–ˆ¨‡Ū5Ž)ē­´Ⰲ$āŲ‘ Ä˜īŽÕRfĐOēôք^UƒMÃ[Čl‚íh6ÁÕēNČļBz-`]aAǁŒē!Ŧ;M" …T†F>äĮŌ„ ėŸMې— CĒA¤’I7‹a‘ÃÂ'*zI$l6ėŽ„ÕŨi%I";#čˆîí‹č†~Ŧ#¸*Ą FÃO`=ŲÆ?‚ ÅHƒ  ƒađĐ"\¸ī„Đ@‚j°‚)Č0ÛĻn͇ĶB 8a%ÂAÃn‚’vÆdcŦ‚Ē‘EÄĄÁ‚K™ ¨›Aˇm“l>ß`™-" ą0á‚Ē"‰ĨRãa†â¨Đ3› āĶB "’#…)Ô$"A m„Ē8øH ZIƒ6m-ģIęAŨá"4Ņ kĄ !ņ†Ü$­yĒĒT3āPˆe¤L6áS¸îD3o Č0=f†”úl—ƒ $›hYQôC3šliĨÂ6ŐQeR{vūäĄÕ%ˆ°a‹LjZJČ09 ąÚ!ĨER`Ãļ!m:č&!" áą*.‚o‚ ģ7k´ šDKŊŸ9P ÕAɘ4ĖĒņ!´aé2Įît  @„`䇤‚pšŊ1Đ[o$;ô’÷ Lv“„CGN*Å~íĨĐHÎ §Ķ!ŽS…O§Kûk¤ Ū0áá8 Ų ĄúUĨõ‡é$›húnBPƒ…´CfŖĩČĒęØDcĒB’ˆ@ÖDÛØŊš0ëX… $ŊŽ• ‰-ØmģmØt*Z*RˆļŌõ„ŊIVá†ŪFĢ 2> 8Ē o6’×!U$ BļØo`öv8V0G˃mˆ*ē¤#]–ėa*„ļA¸›dQŪpņNA‡ .Û LŞ@m‹Ņ~Ū WCÜB,ØfîÛ ii°Ę6úųˇ'âV­˛-› %Ãa†ČĮv–įŽģ„ˆw!”áRÃ#‹ĒA ˆe“ 6Ũô¸ ­5áČkŽ•­Xž„•H+ ;ˇímƒÔ‡øl‚Â@â‡VÄ%TŠø$áģmļ¨6C\l"htŊÕHi-oaœ¤‚phxnījČm¨ģáŌKV „H “M&Û{dŠC ÁõV$zŨ1†$&…{Ä_FöXéĢJŌ@•’ÇvČf;ŲĮ˂ÚėRUk *ŅÃ)éģģ É{Ā`1VřTcD,2Čāģ@Á*A(ļÛē „ „ ;%Āšģpv‘ÁPšIiámûKh'r÷֊UPI$Ō!‡J‚¸ˇ#ÚÜ2$:6Øuw!Ũđ‘ d[֐PDyģ`ŧ&ÐąļHéúĒ 0q¤’R:o„,2=nׄėĢ+Ü&ßBǰ…!ŌH4Ū-–?d1Û( `†Ûl†Ģ{ĐJZIXƒˇ‹ØŅ8‚wŨiˇâ’ë¤;MėÂl‡núˇˇT’­0= ˛8; Ņ˙L5mߤū)kZ‰Žą†Ce_L=ļÅęŪä4)"ŌT”āÖA í‚ m" †™1ŨąĨ}ˆX5Ŧ-‘^E„ęØĢģ‚FSi6ēAH7›ļīpûvÛL‡Bp Ū†¤1ŠI°Č0?Îę;ĩî´ÉļŌažĒęĪwķ˛;ō;ŒÃŪž›j‚6H Û ‹c?÷´8­´~ŽD.šß§q ŧiä ã…]]Ût’ÂÃąŨ Ũ/{#†ŠÛ‚ˇúT˜žũÛ]Į[¤ƒž’ÂMˇīnãK–9v†wYũ[ÖĒĄŊčr~ŋdpÖ­6ŌO•0Ŋ(ĸ1Ū˙׹C×Ū­É  ž´“ –?ú°Õ)=¯õŋĻzĒTFé˛ļGūÛ R@đ÷Iw–>˙ 2 ƒųšøü=…{{žČíB}*ƒ@Æöâ+P°ČáĸŽ­‰m?¤™ =oũ„*$GŊđŌņpAITŌļßß°Wyßßúū ČâØm>÷¨Û|oĩ Ãē×õ ĄĮlY'ÖĶļîgūõÁoĒdQųB ĶAˇm͋š ąČGĢk‘@OÔë×H7īÚ{ŨŊ]Dv˛7Ãô–¤õo˙Mė=ZŽžˆWéW}*!š]ŋŌ†ƒ˛ î-?BuĢ _J’H ßÖĄ„{ÖÕųáW辑 #‚™FÛ&?ũná¸øWHV !˙Ē@ˆ.âCA q˙Âĸyéum%ūĩN ŗŠßú ‚lƒkŪŠt–’K×T„Siŋčmawސ"‡]]/ũ$ÂmļÛęˆAp“īZ|†SގŊ%ÂÛ ēúŪ˧ĒS:Ka&•^ē›T 3ŽÛŊūAĶĮUI~‚}ãI$šÛwoôĢnß×zƒ¤ _Î:UJ‹ã ÜvÛäTŧ:Õ4ģŠ hoIũ.ēîB[#‚7ģ]“A‹ņIX]ė$­ücIr7QnŨßĻģLE´ŠŊĩH?ä{ÖÚAģąú!Ą8Ž,Ž ‘ŋ¯ŊûƓ 8ļîX˙)ÁpƒÚkŅ‘¯ĒZöúoŅ!ë `Īîß^´ŸņúĶ{z˙XĄwģū ˆ8đČu2FYôĒJĖ´×ëûģãôÂT 4x֖…’>Ž˙P›oĖëK (ļ ŌOÛŌ˙PīˇtŌKd0=ũ,‚%Ļ⨝mū†Ûīč‰õH;ÅpČŽ“@öČá¯I˙č8íŋéRt•ˇöúļvĢ­ØĐžīꋛ„)ߨ֛Mƒā¯ĻˆjŎõâÚMļ3ą¯jJ›zM[äAč ßõ^ŅØJÛīÕĐaī@Ō§béļîũ-Ú„„ŠŦ<0tĄCĄß¤qwĩ¯M?Aŧ=qĶôũŌM^1Ũ}°šÉp]Ûß[ŋˇ]+{Ô*ŲÂjíßk¤KíQ _ŊRŦ"$Û ƒ)eV4CēVô*č+ûƒ‚~Ņ>BGXÖ#íˆ"é wúQ28g "{lC5AHļí¸ä4=6C4|ÃúéZJ†á…;Ŋ0ÛŊä áV×ĒŠ´•u_ 4¨r#J°íīîŽ˙ģČ2ã÷Ũ‚T‚TŨž˙!ÚÕ(MŠ #ĻäcƒaŨ'‰ÆĨĒMwoũi ƒJ¤ĮģlH| 1jēͤ’Ō]>ŪÃßŌ´§í gō+Ųà ˆW]¨A ‘GTŠíÛ|I$ˆĪm\8ģØ0Ãm.Aë@ˆ2B¤ĸw_Ŋŋ´ĩI[3frĮŨļÛmdŪ:ŋ¸ˆdÕ$‰:[o×õJŒXĩģûˇfŲä1&ē~ęÚA.ŌôôÛ§Ã HĪ ’A××Ú 1!Žm—Ģ[jéČ[ WÕ/PŪŊ¯I!ëūŞpʇj‚úá=8žæļ˙0ūĒǤŽ’V;‰ ūØmáÕ:ŒƒwėR˙&:vŨwéU%‚ĩ đĶn!ČAĮˇŽœoã¯Š¯ö÷˜~Œëî+DąC ĩ)Ûš{„ļOīé{ˇ ã˙{é*Œ4ų1íļëļúÂõuŋļņīŽc֑œ˜ū’ö­ģüRØ-“ÛkcBDƒlØ_U]-$´ŽĶ Žõŋ˛XGQ‚a{Õ2 –Ûū#Ф’¤°’ ũ˛ā×oāB)wü0mŋ˙ĒĄM„‚ Äö™ ;m×jN õJ”>ßįëI% iŲŦm‡R¸ĸ–QĒũafÜtà ŊWoūXã“wQT°ö˜m†%ÃXĶūä[!ŪŋØDf¸dĮ\{@°n,2āA€–`BeÃ1.Å%´“Rûĩ„HÁŊÃķŨ(I°öBv,ņĩ­ŊͰ‚ŠdŪ´čđaļī_×Ļ•…m‡piųŲ-}črĄ H?+Ŧ"8 Dķo}-ũ>‚‡­ÁÄ0F=I´ķ‘Ā#VÃ𰐅,{šdp.aļ=¯Z¤"@¤P0öĖ;p Æ[‹ĸ qļ=P$ĸšC ŪôøøI$f ƒĶc’†•Ķ/”ūŪÂÂ'ˆú[ĸÚD¸aˇzŠ_Eē (vŸ* ģœ~šmiB*š……´ĄģztŠ-%„Š @đã°bŨÆ6ˆŪnūDœ†ˆTäá€Ķ Ž“ ˇ|RŌHh1 Ã>į¸äQŌƒīaũ$AR8MV4ÛBmļīë*ČgøđÖ$0=>r FÉv…ôĨ„0•E†q… öú^hX5}U˛^œČā_rĮ ƒŽCĄkM ›h&ŨŊĨ¤…"¤-ÚÅ\1@#,tŠ5 Ē­É í‹dc˙TgH†Žl5ІE;  |&j”AD Ûą}-* ÁĐũ†ˆ0;dcĶ:™Å$-Ul&lģmŋI! `q ĐĸR͐Ë…ņA0ˆ@ÚÖŠ„mß˙H‚öūÄ=čâ-Ėæ˜aŌeŽĄ:[A„MģląÛēĮH5U†ģ Āđ˜"ƒėxQĶ&8=!  oũ%I™ĶhiÉģo¸Ĩ*v(Ė„|-ŋT-§°…ģļ-ūĄ éjwTŋd+Ô Õ]ä=Á‡ž WŪÛž’Ō ÕčBCīõč6ÎԐPôÁY# î†ún÷ }”:JC!(&ĒüuÛáa0TŌ {]vŨģl¤+H4°Šw¨néw ŋ°Ą†÷úÖ›íšü%Ô$Õ¨j6[÷¯NûÉũŲúÎČ ˇ_ŋI*H@†;˛cŪqé+Č(î÷ņž †§|Œ]ˇĄTŒ:Z& ũ‡ü&÷]÷ CŠ;5Väßq"ŽÖŊ hÖ ”1$:tBĨÂvÕWb@áUJX,1ļũzZA“AHȘé Ö‡Žš‹Ãŋ‚HQZ÷mä(ãX …@Ō÷k†‹Û!GÃõ‚J ‘īÕ A÷ũôˆcJīĒ@°n>’ @˙mã ĶÎĘĢzI@ûéT„p<&ũîLĐ2ÃČhՂV4’;ƒhôÛn‡H˜@ˆԃn^ŋJļōw Ŋ$ŌA}ô8D4Ž3™ÅĮaãT_ ´LxŨ$CÂ: ÛÚTÆ"F† ‡vûá# ,&É;é­ūDÃeCkČ8i]ī!œq¤…‚˜Č7ė.Ãę ŧ>š[ēA)!čƒP` öČæßUĸôA"81!\‚vL ĸÕMA”î˙Š ô@ˆ{VG{|Šô‚V„HI‰!Ų –Ķc n?S„ôqmVHõÖ H?mßT’ ļõ‹# đûxT’ožŖˇØH†#XHAŠ~íž:ˆŅ:*d0vXá´Ãũ‚†‘ĮÕõŽCŽ‘u}AŖF ņŋŌĻIŨļ-Ģä8äQŌHV"ČŪö].Č2ē‚3Üt -ũߊ ŅčŧžÆ^ HĮt|W¨D3ãvÜd=žĢuy¤´Ö‘H0ûŊ\~ˆQî BėH°÷¤’ Ô;Ã@ũ{ņt„Ŋw#ōįwqļõ­ Ĩ8fAĐaõáB ãĻÁ7n/ŋÅf—A įD=īcKOHÔ0ÉģÃ{Õ$‡nŪ]+ŌĄĐH$ o˜}ÚŌIh†X1ŧ7úŦväˆ)ƒ)ŲPˇîĢĸ¸ˆ;}A×ęá°Ãl˜áĶ}VBļ|5˙K°’ æa´ßŊu­"8AģbČáÃAßU öD5S÷˙ĸz E$„ĄÞ˙X­1m‘Í˙IârũũkÂB ‘)”80›ôēI*4ļûU p°ÂÆõ’P †ް’AļÛ¸­(VæĀđq|R"nž”Ŧ6Ũõ •Ž ƒä#‡ō ú¤8jƒháœžęI$ Ą”âßuę‚Ēˆ E“Á†GˆŽīô”bAKˆ5Tūˆx $‚@’ÃĨŠIƒpm7WŌ¸d ]‡y ÁÃÕ$H‚ 20ũjIA¨2 Žá†wp×Ŋô’t@ŋ÷ĸg}HŽõI A#X°dŨ'qô´„98†Øe;m+cøIHW„C>‰Ģk ŋXI"n ‚cÛģÅR7eģļSļŌäÄ%h8 [mˆ`ÛėT…*FA$!={ų  ;mˇØdpũĮPģ3 (PÛ`ÚĩIR ēAh÷~•  Ûw ŗÅŋ‘vÛ"Ž #Š0e@QČAë ŠT’ ~˙ŌAŨļÃíĩÚŪC˜H"…m†öǐI$’MÅßUI“c⠎ÛTđüŒp6Áˆ* Øl˜ŌTęēASßųzJ{bۖ?Ø}BMäI ˇŨáU$’I'0ũųę$ Qí‚/;ÚųHđÛZ ÛDQâ6Ã~đÂÕ*ęC-ßûi(I}ļÛzÕ¸WHÁ˛¯ŊPé*¤™80$īëÆ…íŊŨŊęē§Ōm†Eū’UP‘ ÁÜnX˙æUJˆ5;‘Ũߡߤl느õéãŌJ•´›ũߨÕG ˛>6Û}Ŧ[žƒ<ĢTß­Č(}uHknũņô’AîÜ^Aŋč¯X(8 Ø0Gƒi 4ôēé*K<ˆe=A;˙zēIöíģqMƒ×l=¯BÄ9"ū—¤Š'ęNģNũj’ ž7{! Ąüũ걑ŽØo^5BĢՇŪ˙úĄö6ø°÷zļFlOđē×}ģôˆQ֒" cžīnĩà Ãa˛HĢé*Ž„A„Ûum˙MAŌßŋļÛ!Gmr#څއ 膒CÅÛßņčh „ˇûܘé\4‚ęßõ|‡ģ xe=ˇ˙Ĩ¤‚õļÛmÃęÁ!\0Ū[DcĒÖÃ0í}ũã¤.ķ­}îĩJöŧƒÃa¸Ō¯Į× ˛‹oģú!ß $CNË÷}˛cļĖÁã]¸uĸM_öúô@œ›n“žĒ­PĘĩģm‚÷.Šá8‡ūéj˛ bMß˙U‰c. Úģ ¸ümēÔ_Đ@Û)¸ûzú§0Ãm­õÂIE!ģ{}…ë„÷ũk¯AœÃ ˇžę‚Ē!ĒL™ßúß÷íQD‡Ŋ%zg;Ûu˙B’a;÷íú„Sē}ĶpĢü† †XŠ˙간2?Ũĩŋö“…ŲŦļ˙ZŌžˆ3Ãm×H„ EŽÃ ˙äĮ0÷ÕvÕēGĄÕtŊhų‚a; ß,vîŪ’¤rBÃÛĨíöŖW Žé7ūž÷—  ŽĻG>Ŋ ‚69ËZz!÷ĮĻXqr7­õëü10ØŋöūAéĂwũ×dĮō(đÄná7MØ­~ÖAŖÉ`ƒŋäAԐ ˆ‘8ECũú]‰č+\xzvß˙{H 0ÛM‘ĪÆ:‰ ÈĶ[ģé¸éM ˛á A˙ `‘‡ ü[ũ"cĐœ4A‡ū¤VŨS̰ˇ¯ęĶ ‚DMQÁßŪ]z#qm„‚iŽíÆFÃC Āô“› ŒSö–—ˆI"^S–9ĮŽ˙T„†žĨV#ũÂü[@ČŽÛ’´véŊ?ö‚Ib"A¸â˙Ö¤JHfŌ[ÚMí1kÕ ųeVéäAũÚB&G‹ƒ÷´ĄoçáÔ­T3YĒMˇļš¯â‚*mŋ–ô  ģtŦˆ8ŅŅÎ{°Â WéĐa.š˙C”í˙đÔd  üŠ&ãBŽiŊĶîö Ôî"ûúaŧqÁ$cũ—ŧ6éĐûi˙ĩĄļßö Ž’˙´ ꥰčQÚĩ{Ûū9™įō÷Į$@ģũļĶ ƒp‚ˇēŋô ÍPÁ„Ë“˙HA•Õņ%€}N´7ŊŧwÚMl;ípĄ6ˇ\…5Ö™Ŋw܃­S֓ōîö’Dސ6!$žÂj!ûã̧×ÄŌ#‚í¸}ú¤ Ũo´ëîˇÜœķš§AœC1î×"!QĐ1 1õØ"žŦ‚¸ôE‹¨ š‡÷ļ“÷CI™Û}âqH.?ĐAoúŊ‚Ō§.°”*lí:ūréíP>“õŠ˛él°—„PRøÃßī}Č.ë ˇly„.¨ A‡duKøh.”z­Ã˛Ú$=?n+H!oéŋ&ÛˆŪ´žĐ$†ßō,ßÚZõ]{dĮ}tƒé8Ĩõd3'‘GQR5†÷˙¯tē Ú=ˇ¯é ƒ ēë‘īa*PTĶa‚#Ģ }ĩÛB’ØīôŸ¯ûgô5â5$ėė6KkŋŨúļŨ˙Ž›m-5­iĶčO}ūëíVdŸ˙ސOŦGéziÛ<&Û˙íũM§ŪūXú¤Ū‚WMīRG&:nÁmŧ÷Ww¸^ü‚sƒ{öî+’tŧƒPā‚ôëĒdžEÅ-´ãŋļ–ÛY†Æ˙ĩé$ģ'˙á&W눑~ČgëŌŋE8i_ãŦIēNâHz!ĮH:Ōĩ]ŋîŪ˙¤î˙ôĢĄIé+;ä‡Ēh*Hí9ÆŦ3Ŋâø"?oᾗģųcŌJAĸmáŅūēDQÜi]Ã^ĸ!_и÷í7¤tĸâßåū+I#P{oūŽõФ¤ †™z!š?ˇOd&^; › øũb¤4ô rp…zëČę*tØõx-öÃX{H'ī$÷ô‚ § ¯ĨõÚ" ˙ŋ°ŒxxÂ!\ƒČâßëô‘ÛiČ.>ŠazîLĐF ;{ĩß°ÂBîHxDJCōĮoŋņ÷¯î¨īP`2ņ‡|qÆéûŊ†č<š,Œū?H0é§KęŊ Bs93„7bŸûd4‚ ß6ŌGCí˙­RēÄ*\īūĩ&,$DØŠEœŠė]ũĒMŊč Û#ŸîLj‡ĸtYۄū•0Ą"īMõÛöŪ *#røĄÛž˙ôˆ/YĊ9pKá?á$Ĩå6CĐyÕ=C ŅŨė1 ocHHŧÃ˙o8ę[Ĩ@Š€b…BA*é˙XJ+< Åo˛ oöč&ÚŦƒwnÚcûũj –öĸCg­ošŌHqü^ŪØßDĮuŽ˜é8Ącīˤ8éÅč†SˆJ—|WYXPC ŌîČ`hzCZ\÷÷õáuÂĒäGÔ%TÁ-¤CC§ģö‡“††˙ņ0žgT“ŌÛNŌI$¯v§I/P‡#į|žÃ\ Ãm?åĐĮg":(ˇúpŌIt Äh$Ē’Ēm_Ã]LāŪĮãõA w]´’ImõȰCߨDU„…˙ .> ?!ĮīJ’„Jˇīˇ ’¤ŋ *Õ$(;!h_˛rČ´ákM‘Ķ˙­A4á­ĸ/KŨ$•,.‰ŌŋūØk ŽĄ—Ÿ˙ւėlA)$Žũnę•Ļ8ø°ßH D4Qŋ~ĩЄA°}ô) ģŠH×0Đ!KČęĮš§.d ŽEuŅ@e6Üoduõ„CXãŨéUë᎐А¤vyB ÅÕ6۴ՆJ›ß„Pũ*I –91ŨŠ X­! EC@ōP› ho[!˛eAxZo˙úĒÄE‚ YĄÖ‚Ô#ƒ „ī†AĮ´ÛA­ÛÆ?Õ+‚ ;éR@§ĒV0ídŠÚj¯˙ĨTäv $T• “ Ö8NļՁ˙ũ ’VXä+ŽĻč…ÂA~ŨÛkaÔ-6ũ~Šļ\4ÁŦRúÔ'iīũ‡io˙×[pî`*OJdSt&ˇģēÃjÛ~Ŋ$ĢaÁ,ąëk’´ĩĐŊ˙°ôŒ9û}Â˙R QA‹?Á’;&ßPž)5TBæÎËĢmũ‡M ĩšĮÖĒǝvЅAģÅé€!^ˆŧļ7ēÛ>pøģú¯Šˇ`rz$ŨĂGęhB_ ļ {Ύûøĸúˇ!GäĮ„A¸ęâ§ŌZōĘ$[]† ĄÂjCķB›Ų >˙î;b6Â÷%”’ž’˛ĩ‹/>Ŧ1DD ˙īäcŨbė ãŽČāŌG 鮚‘m"Ąv’ČlI'ļũęMõI4¯ÉļÅ$–ž"D†!'â5v "9†Ÿũï^˛ QØDGš„_Ž~¤Dpƒd8ô˜˜r,Éh! Ų 9‡÷ėEūCŽ™n4žIõĐzH‰nīeŅpWÊA9ũdD_Žē˙IRĘƒUÚ ˆ>ô^ēh5hō:‡žØž†B8l $œ†cÃųcãũE-tGĄÁéDƒHë< ãĶvĸKŨ°íąt„a„ {ŋčP"‡HB ‘. T“!–:ézkŊLÁvG°\lƒÛa›”9ã‘l…!Ũû„GZM!Ō Rģ ¤•ûĩ A(dJÃAR –Ø9TANhŋügËz,t‚¤†Cë×k’Ų°”ėQA؇'°ĖŅ vÂw˙ũj¸Id¨÷zHŋãŨ…‘~ąi&;ší‡#„ˆ°Ã ˙˙qФ’Lƒ ÛŋKÕ!iä&z›Ø¨gck{mˆH‚đC3Ã˙ũ*…DI‘×!Ũ=a8¨õˆgÃ.Â,rÄ{!Xl‚lmŊŋđE=$ÄE$Ëī´¸T1˛ Į˜ &⠋‚ˆl7˙˙DĮB`¨”’Q˙Y°E>$4?ÚlHj"Cƒož˙ę>„)Pį!Gc@ßõ[ eq ØåÃČnđÁmŋ_×JĄ Uā¨.ŊzēHˇ!ĒņŽÁė†w[ƒ ׌6ũ‘˙ę()FD J/i/q¤Ą7˛cēOļØmˇ˙ÖüR*`'>‹† ˆúJøëDĸT(čˆ÷­mļûæø)8 ˆĨ…Zx^ŨAŊ*ŨÛ¸ l7zûŽq˙…. 42-Ė2úUČeAČÁj’YƒGĐdÜĒ ļû˙ō,|¤…˜ FÃÅh":‚Åë(•Aˆ`éą$; ˇßúGũū°ĻĀŦ6ę§3NĄ$+`™¤‚Ō@ˆƒēV-ļ˙øŒ­$!6ũØTáô–´5I0ŦV{ŨãJēD3L:x‹äcƒˇ…âX˙Ømģ˙¨Eá-",ƒĀLH2Åj“~,*ĄuJîūü~ëDDAÅ2đŽĄ…kx\‘ ē°Û~˙˙zIPI$¤c‘Yä4`‹†ráûŨ(v/ū˙‹Ōi¸Šv’¤„‰!B ƒũéî˙ ßūßT’H ÚÆœkwaūģIƒˇúŊi Hĸ,͐k(â)å?M î–đûîĮüŒ~P…" EBD8Aöŧ)áøÁļ÷ŋå=ÃÕ$ˆ3m-ĸô´ė›Ėų Á÷ۄcb´Ŗŗŗ0<w¸ī!ëúI âŒ@4ĐĩČ`{pö0‘ĶĶæV…ŋ‚#ũF‡ü$‘y^""„<'ëNē\ŠäæSÅdĮ˙]URH…‚(öCRE–LęŨČ:Pύ_ 58žqÂ#Ŗ ×ÕQY+ IÜ(@†$ēuB*Øę6”Čē",ŽŨø˙õåŽĒCJäa[ÂÚ÷§ŨH:ŧ ĸßß!ū5úúĸrÜUh1vC* š Sb~ļ”ÉH4v˙ū˙}-Tƒy)¸ĪkFo÷éoüpōßū˙Š)˙­|%Õt+áDpb•ŧ˙ZŦ?Ŋ÷ūÅ˙Ŋ,+áEI­ r:H+ĄSĩĢ÷ûz÷PD}­m$MŨ„°A× @ūÃ}ZTƒ˙ˇ&?×Įãz¨ĢⰈ1=u"ģÛÃĮWīøũü˙ĄÂ2{˛ CčkČŖŽ6БÅ ø;ģû˙ã˙, n8H°}~ ‡˙˙ú˙BF‚\ W}pVGúė=z™)õwīūü„z0ūŊ6˙ÍĸËwĮ׎CVāˆ_˙˙õŌN˙ŠčCÛŋwE?]A—Į˙Ģņuõoé¤ÛÂ}_ GģÉBēŋîšn¤áˇqûG›ėHl}¯ų ãšū’^˙ūõ,~”ĄôüHf?ØŊZÃuä0:htGák÷GũL/ãßÚnãđīëaõģô°Šycú˙œü]ģd0j. 984¨[Úž/TŠWö=ē¯õ|;ŅĢŨwŋ‡áĐÚOPT̝˙Ü^?ũÂÚ"Ú>Ž$)č"‡P öAÜŨ¨AŸ0úĨ–>8˙_台Ę{ ŖWŽŽÅÎMâŨ6¸!\Ī˙ūÊ5/hŋ_l2!ĮGÔ7…DX ID`k¸U Ĩˇ ÜtC-î7_ŗ N†Ž–Č氃i @đÜr7ĩ’iašĮŠ/÷˛< Ĩ ŌÄ$n(Ša$Š„”6đ‡#>m#ęÚJ…S¤^4 îČGA$“­úX4û#ũ?˜ųhNëUē*bx$”ƒJ›i ļ áĒ}Ģu×pLä9xC@ä5ÄGN4oŨĒ ļx2˙v@ÁëŲŦƒŽ‹žé ™‹/‚! ȐPä;ͅˆ‘A‡OĨŨPvG "ėŋūOĩŠ­2Į“ŽaÚ ńČčÍɍ„Čb†´ HHîÅqôŨ:î:Ö(ęEÁÛ ÄDD`Ú tŋŨ'ž~›LT´R+ēė§6"’=qá´č%īŊ,‰ią+ °üˆ:ĨŖ.?ôB$lãáHe9ėH0ęL~ëP­pŽōʖ ČQÄ} Ũ‘ÃFÄF EnžŪŽâéUa´šņÅzĪVĮT !ÔEoĨőCuĒ’+úė„Ķ„îūˆ]÷[iN;m=÷¸y•ĸN ;˛†U=¸L,&ŨŌ!”>ë{ûü5x˛8‹aļÃ!G¯a!÷"ēD1e._0ĪõžŖü4E iX Â öĄĐCCŨûU­Øé‘Ž!&Ũ&ÁA8H”đûzëÁ¯aę €lØț­iw˙đņ°­ƒIC>Ą n ĪąOē¤ĶÕ%īÃtԄ†HF@çÎ9cÅÕ_ŋ…úīæH'dQÃCõč6ˆ&ũ Ģ˙éųh¨2š Ąė‚8 JØŅ ebĐL&­(N~Mžúmچ؍ˆ„ė‡=Wm¤C6ēDcŦ†ĻjīûpˇejMö‚I/d+ģĄ{¤!Ѝ?īŌž;KąKNģé…p‚ø7äŽDŧ5^ÕxL5í% Ŋĩ 'ÅĻ_ŋęųhžAw¨kē UKƒģƒ)Ņŋž‚}ƖúĄÂö$’p‘ ŊØ3Ÿė*mČ(qÂ˙õĸ CÁ–~FĀĀ!I!ėAđŌA'†‡UūČG]ĻąU *UîĻŠˆˇ_Õûę‚PdϤ,ĐKvCkĻ A6ÉÕ*ú_n$‡i$) AÂRQš Z6 UĒ­ĩŊVë¤KŲ„8 ĨĨünÔ-"Ä$ˆgR"ž”ƒqԄîŲãšéuhGūŸãøB9/ Ž*^í§mƒĐęFä6:dŨ/īöĖęШJÅDˇGQ°tNĒB.4ę˙÷č‚´ĄA+KÁ˙bä{k¤°ĸŋëeo°a5~ Ęu˙ˇoŋ¤Ŗōßõ¤íŨCá a¸îەo74‚Âꀓ¯˙ė†ÆÃš )~ŪhAÜ>põÚūą<'˜ņ@ß_VØVØßøŋQßí28e"[m— žwKëŋ žÚ¯Ûdėũ ˜2°é˙mSîĶKæãˇa˛ržp0Ōnū°íų {#‡ƒWŽŠ+ã行‡īAc¯îŊ“b"ū~˙Ė;m°Ã~Ŗd ­?kí'†\3­[ŋvÃ.ũēĢĪ_äžøm^SņģÛa č†_[d+ƒŖŪļ™ŋĄīa=BŊ ŊŊėAá4ûVGĐkw-aŧēŪŨ†ÚN‚ûЈä3Ž!ļĨeU#–é1Đ?GŨŊ‡ģJŽ>ĶÚ܁‡ēôŸáļëauČe9¯cÖ/k $UöÛnCO›MÂKÃá %ÄŦģã’vīžpÛvŪAόīRtAęõrĶ Á§ÁĘŊŪvj<ב×Û|†^Œ0ŧÁŠé=xB>ÄXАy âVWš~íƒrÂ"@ēīh-ŧ…@‡HTRÆŨģÃ6;b‡ĢkÛhHĒŨ°e[˛}kK‚zgšÚ %[mÄa˃6­§„‚t Ĩ ¯|9|‡N;$­<δv#ĒÅĒI%Øa†T Đ9pÂĶbIŗņ)ÜǧČY×ÃĒKˇ'Å Bí'‰F)1¤\= #žŗPP@• °“tBÄĻņ ¨;°Õ –ļwd`ŦąČLjŽĩq´ĒČ@Ⴤ_Û†Ū (TCIĶ èí¸6 J‡{ ÄÎ0„yŨoS­ewqAą°Ãb‘Í:?×-aĻG6Ũ"@ÖîØa×i27I’RYh–Ø´JNknÃp„×CØZƒ-!™mŌI!ļÛm‹ĨI'°Šũ‹g‘†ÎZŨŪ †~څW'xä(WČ=‹N’ZV,(h UĖU6>Ų&Ą‰1ÉŋZ“…HÂŲc´AŠ֒˛X*äĄ: lJAHGi¤2t$TŸh@Âh$ĒɃN°ˆúpė6LvũhH†~ Š[†´ĨŊ'tAqÎ[áāœmÃmõTD°b;-ŪßUK†Čę!ūŠÃmļö$„$­Ør áēĒJ“ˆß˜Č°""ö1ɎÛlWIZ@ƒ—öđÁ6Č0=:T*îģxAí‘ĖŽDqOô@ĐŦJ M×­mūä¨Tƒw‹#ˆÄ„;ę!$Bœ6Á‚mˇT‚IYO™’~$môŨ˛8(PŦ$‚]°Åû´’ŨēîüĄbÂĸNú‚Đ$đŨģČ=é-?uKėv߲ Vč×­°û´ÕjĘOÍ]y Aíö”‚!ĒėŪLq–ōúÕR[‹Õ‘U´;$ž–‹6žžĩ„ˆ}äAßBˆlVČ߈L;kļˆg‡FøģMü.ŨūAĻ”—ĩvęĄŅâŪ˛cøaī_ˇö+î­ëĨh‹-zģl=RPÜąÃģ§I.Âģu-Å1ĆĮĩ ßi+{–‚ ļBvīĨ‘}í}8î¡ļŨ°.–ˆlŲŦ2ŋ§"P†ÄHē–pÃQûHI!÷!°–ßíĒų|NžīŠļd0”Üíũ[ ‚ģ‡ëØ_ˇ‡v”/a†œ=&ðí.,éÛd"l|*^páøíˆKkiYģt] ;ƒWM˛ Į-Ûī qúZōæÃ†´C5Č)7UlˆâÃuˇ ũ$ŧ‚b8l6é u…ĻĘT6SŦģkaģõ…ÁQŅíßüo%DlĨž pÛÚIiɐ°öČš#Í,~ &á0ČAÜl.öBÛPˆ|áÂh1bēÂÃvÛû> ėX0Ü>¤íZŦ6Ãō Züę ûĶļoP֚žo†CŽŨúztĶöÛm|˜ęŦ0ÛÔæ÷ƒCtĄ˛3–Ží>"_#0ØmŪu ~ßjPä5›ĒÄUÅĢąļØmŅ1ג7ūč-Ŋgĸ [Č;ēמķ!Í(‘a*m)¨ųg6Û{ß}žIĐ*jÚ!ļĄmßK˙rĮôŠ2.Ũž;1;NĄÜkëīqđ¤[¤ėC¸ąJl6AzīûŽÉŊĻ ‹˛>–Û˛80\_ķ/ß´¨Øs¨ŲÜÁr9Ÿ û'Ibö/ĒųĮņb렘M°M3ĶK ĶGi°˙|~ø‡Pša˛e`Õmļļ˙tŲûŨŦ‚ƒm"ƕÃ`í˙­Y{ûH]ŧ Ĩœ0]ļîŊį)Ōûļ4›˛Î 8pŨũ|^ãđŲ";Ča* ģNĩ˧â'öčĶvBæča‰Z0šëoŸ‚´Ã†ŊAƒ ūŊČ ų lé! ‡jđPÛ~á[z¤Ÿ†Å„`ÛʰGxŽŨŪļ´‚‡÷"8hmé¸Ū›ˇīé$ū厘8l7ID‘ŽTAŠ;õa…„7÷͆vÃm¤–YՁ‰ ĢmÉ厐ũŽAŗu6ÛØ]A ˇéļŠ$ŽÅîCƒ@ÃaŧEh:oÕŪ‘~Ÿˇ˜mē*ˆ%BžÛËļ}|/ppø† ƒ U‘ģ{bÛ'$Öą4yáĩp–ØdpÔ4¯Ûõa$ŊôØ;°–ÃeÃM{¸kiŽĄdāZAÔ0r Ad6XwĻÅŧlj’ ¤=] Ũ°Ûp‚Ô0Įī!œ~Tš‚Œ><8ĨjÁ´Ų!Ã'8'’ļ AF’ŨĘŪA,) 1ÛwÁ+ĄJˆ#ąPȑ)Aąˆdv ˜AZˆiĢ#= Ŧj°H˜p“ávŅ'gl0Xh›Ļ´C`ė$ ¨>‚ĩa;﨤)CJŸlpÂ!™˛Ô ‘ b &"Ķl=n ēöH4 ęÛH‚ô´$„†ĮH'Ąģa†™đU'Z@‰N.áR2l†ƒaļCQÆØ0A3Ą ƒI•ÃAƒ;ö Aî:ĐA…3†ĄQĩaXØ0‚äŌH%B’ Ö VA r ƒÃđšŌH$—|ˇ yģĶ +IA$’bJ [pĶÁŦ‰k $‚[!šJ!iØ@ødn 4Õ ‚A$­—Î'ICX0šĄT ’ Ëp Ė ›gÍ AZlíh_ĩŦ"oAļ-D+N5ÉģZ A’ƒ°ÄU īĢj!A$’˛ŨTģ!DNÂ~ļ– ”LˇYÃ*€’tģ…ŌH –Á…ßŌļ FA-–æ@x$ŗĀü?]Õo”‚IāĨ”É™jŽpˆ!›Ō‡k ! ”&3+ Õ?UtTD”0„2ÜŖ@Š‚vÅ_¤ˆ f"1ģ xnoĒÃZė„ P&6$a—jh† =Ģę‚“JĆ+îŖIRM™6Qė Յh$ÂIĸnÆĄ,°{DRP’‚,u;$`Ã˛&3í„@ØOJ‘ AŖM:`ƒũD&t’О< Ã!\ĢqSáf‚BCŽ“AtBŽŅ Ë A‹äāÖn¤ $DäKé´ 0; BOŨŖŦģ p‹……m’ę†z‰ü0ÃIúZßA:AB Ũ zPä8ŖŊ÷#…ĩ ĄĐOHč:CIŊ ĒOÁGä"Ž4Ģ@†D0UũxŌPúLŽ ‘â0Uˇü‡r#3 Ŋĸâ$…Ĩƒ¨ß´Ą[ˇA4$‘îŽÉ­Ãpa^ɎxCŽÛG ¤üPD3p™hĩfUŠáɔ^ B$0$ŌááŠ5ÛH@Ņ–īļŌ \ģp¤°Ž'Mļ•ŲЁmûp„Pš{ aÎė)ŲÅ 0jˆb+đA M0ÃnĄØķŗPĐ`P‚.  ÚVÄH܋iSl6¤Ü Ađ„" ė2:^ēAvˆŨļČg¤p| â¤H&l“ƒ.A ›MģbŅ!ä܊ėh9 ĀÃaD5ŋ L‚ĶßIC '•A¤HgAü†ŖˆA‚!ՆoĐ蛚Š54+R‚lđ- čø5\H5 ‚ ŖÁ” §li ƒÕ Aψ5xeÂiĐ â@Õ ¨ ŲūĶmĶv’”Ē vÅČ*ũ 99!֐ P‚ 4NÃ#ƒP ˆl!”î ƒ´C0tČđ†YČP4‡Ō&8°‚6)€pAƒ@é7lƒKIšu@đmŒā2Ü0ˆ1đ´¨D ,¸"_VÛdË“yų B$G Іą j b#x„’b#VÛdp͐Øđ°hhHŖē°Ä7>+‘ G€=Ųom Ŧ „†ÎōĄ{`Ã×Ē„ZnÛ`$U6¨†°îAǰČjŽ.D‡ x õK.íˆM†Ãd,RĐBÃę…č‚C ]:˛ Ŗ¤Ē[ˆˆDpÖ> aۅUh!ÄH´ƒ!¨õtAbĶąA*AŦtƒT-‡žÁ"E´A;m‚!¤=y `Éø„„‚NˆGlJ%°Đ*ĸ†īd5B6CnáŖ‘šĮMAZLBm;áWą§IŗŦ‚ Ã8Ø>ö AÕBؤ­†M‹Fv,a‡A( v oØaōÜãƒ*C8á‘6Ąm¤ |„3P.Č3gმIŸX AX„ ɎéáļVÂà íË`‚„ÂaˇŖO„"Ķ´ˆˇ nĖ;áaƒâ_ÂSáƒ+Pę›lDˆ>:M Â6Á´Ąa†M†Ą}Ķ cĩ¨m†IČ/öŨ¨t^„ˆ°ÛŠŦ0čpŖĐŽŸ‹†ã°­A”Đ6Ûi'ēČ:rО 2šŲ,7Bęœ#ŽDnsnĒÜMš„z Ë`‚!G‚D‚n„‚Č;¤Ķb AÜ6ÂAH(GÂĐŠ ŗ‚3Š7PpÕAM’ļ%a† ¸DØ"ÜpšZ ¯ˆë8`ĸ5mÁlMļë Đ÷K ], Û<'ŽËŦ+6l3 îUeßŨ†ŌƈĻÕ¤¤AõAƒš }ļ‡ŠÅЇ+mŧ”bÄŅ_A%R éRIRkH" #ƒTHÜ#ģGÛaĩƒ°Éĩ%ÚQ¤Â RI —HDV 4 âG˜qČ{ډžÚ ¨ DL •iN˛Č7 gš3íą(uÛjäųUˆI+‚&’JŠ„ķĖŽ—†ÚØl¸XúüNęV §@– RPšĄ!Ēō. 2÷tÛ•ļÂÍZ[;pl‚Wd9ŒĨ< đØx*€ÔÍa˛7Vfˆāŧ4”ū-vL ˛EŦ* aB ~í°Dl7§€´hŠ.„t— 6^\Hâ‘Āđa ´ƒÛaО\Ãbq]‚!›~ Ã#ģ †C)Ųnļ•í*T˛Įa0Ü&Ųvvđø¤'3$ęÂ_g™"dA^‚Ûģ_›-Öp‚Īd#*i”ŪĻŦb2ŽAąÉA‹&C\pÚ b!¤ę–ęĨ[¤™C v Ņô'€đ'bÜ&Û `v­…㊠D¨QZę$!‹nˆxnáŠŌ$ĄteŖÍbĸ‘ģP„āYÜ=6Û ÜŌ<‰Rč“Ū‰ČH˛ČAéÉ;@ôŌmŅí°Øk šaŪ–ŪöôgŪ*Ø´vyĨ!%ŠŪn­3bģˆëāīBgĶu퇂!ô ļCļ+$0Ql›VŸĪ­ĮöũÚ x-›zm†Õ„APU‡˙]?ŋw ĄÚ#ą G†Šģ´Ã^›˙W¯ ŌD080ÂĮnØQ Ōáļ÷ˆõŋCí„^@đ+€Ø'؆ÕKŅnZ‡Ģ­ú| šHHƒ<6ĻØOm×PõQ5ˆū.M(<5ŽÃ l8UúŖ°ûžûA4‘AŅĀ<"Aí†`4hĸíŊŨ6iH.: ˆmŽ0vا@ÕI°Î{mzL%Áa.č0ßaD†Š‹r¸ú5ÆŦDEĮą $AČ.B i‡v x/i%ÚHU´°EĀđaĸrŲ cIä5ŨĨ,}†.,6=ÆāƒSĨƒXöaƒsŖÚ„¨› ü*h2ʁÛdpi;H ÕYĢĶáÚ lD"’Ęqg`hØC0Ī˙Öã ' ($Áq¤Č,ŽŠfČąUâ"2ĐT ›H ’ áÔR˙,xd‡l^"fŒ…”&a‚Pƒ’ãbá ™†_Ä4č%‘!euœ _m c-Åüīš?äbˆbP¨4Đíģp|I’[ĘôF˛…ÜH'Pšŋm¤ũÖŨÁ”+û%ų70š h*aH(t—˙TLģŊdô{(`o°ĐAô*ƒM*ŽÛi\ž6-{(‹_i…$ &"?nƒU[â"8ũŌJjAšōĮwŠ‘qLÂ(ˆˆņpI!aŦÁ1쎈ã($3ųš¨]ɏb¨ŽZĄ­"Oöâ2Ė€2Ę4ßėA!j íâŪY…€Ø"ūØYf“ÆYį‘\ĄK0”2›ą;32 šf-†€ÆŅOQĸ*"úc,Ã0@âÛØŽRø0Mb$â͈~Đ‹Ų B đCF2 T€eŸ\V%Zx YxČ Xü€ÁOî{Öōڄ?\@aĒ k؏”ÜĐÆ@@Rņų†‹˙‚ü !ir4ˆĪīLĮ”Ų§Į,Ŧ;ÄÉ-Ī{GQYI˙Ŗ ŋ˛ĢxČ Õr.ŖŌ‘Žėe66Œ†.”NÄõéKJ¤ĄÂJ–ã÷U+Ŧä *‚,ĠΙ‘ DL‚ƒ–€_ jw>Â㇕PnUA„× ŽÕ émđíZ )d´OÛũCA„ˆWŽdO˛špÚD'XMA?Ũŧ2đÕ=RNõ¯h %ŋ‡ūļž˙My]×oÚüG Į|R¯ˇ]–t‹˙ŋũãû÷õĩ3W×˙îŋĸ7ëÃøb?¯Žũƒ,äÖŌVÕv°Ķëú\>˜eĄZ]iv lļ?K¸­‡Û× ZÖđŲdO™)!ā’mûm™¤ŠjëáąOŌø7á莒Ü!īāâ)qM Ū÷…nŸėu#GíũË)4v“ũ'Û§öĖōČ÷Úßũ ŲäTô—ˇdą~K-;(M~öô÷Iˇ¯ĩŋ[Uli­íöĢÚV&CWWŋ´­;^ĄŊžĖpᄲËĒ"_AσÛXÂqĐŊS´Â ģ žĶ–Dđ[N ¯Ļ˜fUŨ5M´ÚöB—ūp¸ Á dV(dM>ŪÂhFŠ2ÍzƒTíFJv‚ΜC>ĐKw<)DEĮ@ Ķ™Ąˆ˜Â{…ÆŲA¸œ÷rRŖ§)°lRÁŅ;šj"į’oĸ10ųŋBT(…&ÉC#NW4Ô'BíM­c`›ĸģįcl´ŠO}§ ›č¨ŠX0w<Člöū[ĢË!@ĶA‚žĄ2ßQ‘Ã-0šÁ8{ÚT!¯vRƒaũ„ģ\‡†Ąoģ‘Ed<_;P"wîũŠF‡Ŋjô? B}ũ×÷mĢÂ}¯ž@ÄîÖôé'ÆŊ9|kiä[ĻMÄūRŲü‚ˇëkņh=$ÆåYŸ2s†k•.wL…#˛Īņũä+Ȁ ƒPL(Rp’ Ņ”‚ ČA"ŌD+´ŋíō-ų÷iĄä€\ áĻžˆ8ÕA0@Â!j Ā<›ąĖŠŌõę“đ¨ięĻ¸M4ôÕ4×;*"’Č\}ä@ģôŪ6CŽ\(NĶ]=ôûë*4S‡Á’¤&b;ˌ4Čį•ŒFICũ=Z‚‘ŽB<:ú#§ß֟iϚ &TJÂdQĄ#Ԋ0‹åc.A„<ä: …QTA˜g†uDt|Uö4ˇtEē"ÆEĮOč‹tÃÂnŊ_U\ ČAU3P4AÃbšBM„/H&„5(æyįõØT?OONÂč7ļn™ :Ã×mz ĶN•T&š§qj¸IPÂkč4ĖÆ¤×ĩũ:ĶÖČĘa'VŨˇ‚[nšDWĻw÷Vƒ‘Öü/ dcĐŊB…LđäČC$éz_ˇ_Ķ{턟Úĩ ´Ô'‘ÆúzĻŅ´ž‘8{#ū˛#´KÔi Ķ<"tÂ Č^†ŊūFęÜk×ģØņą‹ė/ŨãļÚˇŠé7MHƒ¤‘qŅá]‚ß§ė‡zú ÖĶAĻǟ×Ō_Ļûä;ķ}­ĩÛ­"'Cmo´–ĐīMĢûĨÜuO%dXëĄzĒ ŧ]>.žŋá_ôīßX=‡~;ÂmŨ_îŊ’šī}ŪŖÛö úŨ-{Oß÷˙ū˙ŋâØkm=ũĨOˇũm{õ_­uÖi\‰‘Ō÷^÷˙ø/˙ąßˇ§ė8j÷Uũ/øûū0[hŠuũCAa)*wdZ Ü5ŊU?īŋ ÷§&?cےŖūßŋžßé~ŧ…ˇBũŒAicUM- #Ĩäąt˙éü*˙īžž>ÛÛß´¯ûõūôŪŊH‚ēÚĩ˙üžī×ÛŅîŸ|:ܛöØußŋßū XAm÷égˇAjŋŨNŒ ėúĩoŗOJ˙č=žōBĪöˇ“ŽĮūÚXU˙ ŋ¤écÄ#ŠwÄÂhėCŽVCģÖėÅļß}ԁzžømīØúë­\/ū ˇmŽPäMuúˇ ¨Vîâã†\#/†-īģ§Õīƒ†ũŪ˙ö+‹Uˇb”'éû…[ĢŊ ū)SMĶÕ:[ü—X}kī̝¯ŅĖîíŦ/š?ũčWmnÕ~éö˙Ÿ;ĶĩđƒsS{­ÍwØIÕ­}.ô›M7†zĢDXú¯ūßĶwmĒßi4Ûˇ°ą…NÃūžęށī­Ĩ =i Õ;a„Đ]~ģũŋđ™=ØTȎ˛Ŧé­6‚ :N¯ũŽé§Ã 6’&!Ä8ūâ4ێHES<ü.˙[|4í0˜ ÉZh4Ō A˙ŌÚnƒ†Ն–øAÔTjƒzAϟl6’N!Ēō8÷i~ihIĖ25„PÁ„A‚kjžŸujĶWN8áŦ7†ŸM'đ­ éēŗ’qëßpĪ…ķ4' ! CIÛđšĻuLRoĻÕ5!Ŗĩ_!]mĩÛĐw§l3fà ˇa 82 3É! Á;[ítŸü‡­CvGŠ Žš &Lŧ5tČqÂ4Hgėq&āė*§-ņ""KpgõOTĶJîĶČĄqa Œb Cƒ ĸa5§„ë‡K„E–á0‰†akĸļ8‰¸°˜]č7iß]ˆƒ2Ƃ§qņ|Eą .¤$vĒúî"E(Žŋȃƨš­Ļžšá‚ZŅ*<"9ą`šÁ„M2;°\ >‚q:æļ, Š$š_N"[>—ĒÚвfāÂKõøŌ_U×ǎ§iiaØI;[ $âŽJ>×kiÚģL"J+ а„5ĖáÕ "?˙–A MĖƒFlaC3yUP„DD†Á„c†cÄD‚ ä™…&f‘ nAŊ“[>9 ÍøˆVÂdâ|K‰9 ›™Ä†œ,ŽËqbh"§!”Š$| ŪĘá xH#äÔ‡R<ãīB8!`‚đ"""""@‹!¯Š ePĈ¸`Ž Ø¸‚ŦDDŒfĪČ â"Aä Ë1đÁq ‘Å3>`°y’á”\R†CEü§ĘQã`ÁđV0‹†‚8 ‘ˇ™šøØl8ČāÚ`9°¤›ŒeÄ!ÅÆ"""""tŲ ÎLæĄƒ œOɎMČ """""""""""""tD†hČc6  “)Pü´Ë:ĐQ–™B„ĢZ ˇ.ŖqōÍVPˆ"˛˛/`™įaB˜"1Š™8%=%`B|"Ys$ÁsPg õ@Á´É0Κ­øa? zÜ&ͧ ×RÍH –ÖšWa0WH0Ōj°ša[§Ņy "+!Q ëûizH8iŌÚö‚Ãi ŸmƒĶMÕ:ŊUvŌļŌ[ÛK~HMĨļ’Oļ—Ũ_Ūŋm.Ģé;iSNÅy1øûÅ+Ģ[ũčZĮ­Ĩ÷Õm~ũC^ųí/­ũå›ë×ū÷¸īU˙÷Ģ˙Ķõî•˙Ú§Ûũt÷ŋöĩO˙Z#w‘–ˆãÚũŌoJ˙õi7á&û^ŽDåß[ūCzVIģ"Nt6°­‘i6ū”4éé¨T›M4›ģP­Ŧ'H<V×†ÚØNúnM 0×ĐwĻOĻ×Å6ĶMĩA„īũđL‚ņõ†=õ1ŋ†5­ė…EϘ'§v—z DiĻL 4ĶZˆ‰XČčDC!° #–Ši™ˆ'd€‚#˙,W×^?˙ū[JYĨ•d)fÄX("™X Ë1` § •a‚†FÅ Ė…Õ7OÄ#Œ*……M0A„ ė&ƒ*ĄJęB,'§ 5 ™ČąC1 &I‚ H­)e×˙Ũ É€t,đ"‚dP!"adĖ´ŊWm]4“ ú  i‚a4ˆ|Ԋūˆ~ĨŌˇ˙^ ¤šl‡ š¤žétîdGmĶ¤īŽˆLxhņĶûú×tŠŨϚ`šÕ¤›M ŋ§ī"ĀNôîė&ĄS tDü$›}ĒzvŽ“PĒ•%I‘ƘP¸L'IÚ§‘ĐĨ]Ht´’ŽŠRAVí Ē’ļŸĮļŊz¤Ē—T‚ZHkUŌúIą¤%TŋÕRT•.ĢõęøĨ¨UIRôĢÕ­-%ŗ -ŋ×ZXZJŋĻ×ņy˜]Ŋ~ąH~––{HP’ꓤŠ$•U%Z`Ÿę…{ī])'­B^—މÅIjŧ:†úJ–´‚Ô ēÔ ˙¤’j‰6˙I-ēJŌTŠ}R‘q~š›Š<ĢZ dAĨĨõúL+ûtøO %´ēŠ^G‹_č}WOa;ĨZŅĩĒΉ ŌĩZZũixė*TĩŋKH<ų'íŌúwGJ•ui%ĒūēIZD:§i/ŠJ•Wé-wZoM°’ĄÕςԅíRūŊp’Z…:ûAa*¤ũ&’JPí$­%m3ZVšĩKAšpÂĐNĪ„TõVÂK„6žĩWϚvšJ0UXaSˆKšĸ`5a0ēOM´éBlRtœ=φŋuúé'MĶnˆĄ0PÂéÚŨ*ékanF‘ÁDe Ģa0¨]ØU ¨0œņˆ‘ŧ˜°C$Zšh0ƒÔDDC!恒)”Bˆˆˆ˙˙å2Ŗ˙˙˙˙ËBÚ­ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūS@ŧåĻŠø˙˙˙˙˙˙ü´Įīe6 ¸äƒ[÷Ž[nuõaG˙ 4)ŠZåHŗ™eR'ļUÅÃ<ĩŒ+,âø" d 师‹Ûe ŦĘąLHMå‘I‰Tđdƒeě%2Ÿ;. …ĀĖ/&áá9tp ^$ØŖ  °<ĻčFØōÖ1–âˆĒp6ƒ;4Aō!i{đÂx4ÎĮgaDkPkNÂÜ4Đŗā\†tX%"?ˆ e•(dāL;+ƒ†w!™„'įc`\ĩ€äķ´čŽĖIj2”Ŗ$!f‰ĸ9œ™‘Ā9†œ’‚ÂÍ6Íå@šDŲ  ˜Ļaęe˜&`Ō€€m ˜ ˜‰üОŠē(%€ %€ leptonica-1.86.0/prog/harmoniam100-11.png000066400000000000000000002153161506303110300176540ustar00rootroot00000000000000‰PNG  IHDRķĒ[”Ŋ-PLTE$$$666HHH[[[mmm‘‘‘ŖŖŖļļļČČČÚÚÚėėė˙˙˙9ūßē pHYsb&2 IDATxœė]‹bã,¯4÷{Ū˙q °ÁĮmĶ$Ũ0įüûí&ŽaBĀhšMLü˙Îûŧqáv[^]˜‰‰' ˜€ÚÛäüÄg hCÎO;?ņ!(œ7“ķŸœŋųéĪO| Bæü´ķŸūœœŸø8‹NÎO| ,rŪOÎO| ’“ķoĻŸø,¸Ėųiį'>Ū˙œŸø8­'į'> ‘ķ͎™ø(cævâŖ4n&žv~âcP8?íüħĀëŧÉlr~âCā2įį~›‰O5ÆÁ'į'>ÖL~âŗlŪ@?9?ņa˜œŸø4LÎO|fŦrâÐT&į'>Ááņī[Ōt ¯.ÎÄŖ‚U¯.Û"[q~â?APJ§ƒc&į˙78Ĩė˛Į°FOūŋ‚—r2ūŲˇ™{‰˙”eƉŒ›œŸø,g§o3ņQˆv6VNÎO| ŦˇĀųéÛL| Ŧw“ķį,8ô“ķƒhæ1ģŽœŸø„ŧ|19?ņ)°Y߯MÎ˙!MA°‰ķsMęmā­Œ&7žđįP1hП}5ŧ{ŪÁi!8Ŗt!Lęį­Y™đ1¤G839˙ZđHy˙˙ ͇ÃNÎŋŅŠá‘īB<ĶĀ˙aÛŽõ§<–zÚų—ÃG§ Í-|hžÖɃQRIĄ´TJÉØĻ•c¤ąg2Æ)!ŒŽŠNę îMĮ*—÷ŧŠ?œĩÎ9˙æ$üj) cBĘvŅÉëŅÖÅaŦSV"÷ Ėâ´Y땱:ū+ŗuŲŖäđ8<Û9E€ėbYØ;´Û!Õņ 8Ē8UŊ­L^ķ˛I¸vŨú‹Ö‘G“$ŋļdLėGÖǝH}iXBAĖCzü¯÷qŌĬ7„hgēÎi{Œ‚+ Ļ2€WÃyÃņ`ãmˇ,+EJ ŋ#`„*T„cŨ­õKŖŲnš}`6)??įŧˇ<Ė­€˙ŧĨ~`ŪcæŸČų`U!Įq$, Ër Ÿ“ûzĢGģu_?ÍØęQܕ_Ņŗrú›¯ %mĘBãČNÖmdģN”F?tQ“.%,: k‡Š‘œÅûE#¯%v`ëËlŋ„éV|Ppĩį%>Wvúa8\5ø|)ŋ ´ũœÖmbŽO}G°ėķ8oŲž^˜ė0 ú=ãĮåČbW†ĩ[@čö€õŪdTJ9ŊDJW?"‡ŌTMģ]ļļûĄ6/^  =š+ ĪųÔąčĀwŖ{ƒ× Š[)öoĒ×_Øß™ŋĻ™k÷Ūå ŊÕhčũ“æ°ĄGe…7Q,1e´ÚfĩgöVĪũÚ­ėŌÖsū9v~3”īL kŽK_ŠėÃonâ‘ôŪäīHßßī4'xÖš ({­„ŠŖĶrKë+îGžšŠkaģ~H…ŽĪ^úësū¤ŧÃāMicM}?Õ Ö*Û}īWü§ÜĐú-Oœ„¤Küœ9lĒF‡Ä¤/â+ƒPûķ‰ōY[Ļ Gâ­Čœ'|īÉ Ē/eķ¨`Î´ĨR;ÍY™c7Žĩ[߉ĩŒķTv ëÖHw ézlepã.N "į$ÜP:­ĢŨjŊ>îú_•š7ĪīqŪ‘ÚĒãėx4Įz5R†Ø§ė1K#ĸj˜ä‹•Ž?Ŗ-/Ģ“"¤'ĶŊÄųÃč”܏}О[īV7-|WĸÕub‡Į:˛{(<‰+‹ą dŸE4ˇV+F‡ī´ôd/‡éČ{\YŦŊ2aqžįØNŲxÛCá‰īēkÍ&ŖûÎ'*\ĘĒîđÚ;Žüc›8Žp$fŌŪākF61ĶŖnKŪyđ:i9>×,­FĒu-ĮÄ ā•ûdÆŦâđé/ÕŦĒ—č ŸĻķÚV&í÷€Õ8xũ>į2S9†F¨Ē=2įdD$5jÎBŪ kÆMJGÎ7D*Ī>öÂuf}¸Ghß5rží~ĩžE ƒ)⿝×ŦĘ;47ŊUöŊwŽÆ?HŊsGé]‚cŠ/G Đ?ÁŸĮaŊ끂īˇÕOōTzöˇĖĒ_•/Ž øĒ€ĖËÎü [ķŽ#öcļmĮYÍęĄKí:-­Ęļ^Fœß&Ar´Ĩ‡@ĀhfSVŧ÷7˛ũō¯oąo…bPījŨđŋĖy?ŽŋržŪ€2tŗ§ŊwöãĪS4nĪmž0?â<íĪ{=ˆÅ/čįWVŪ5‚X"ļz-ÍDûĀēÚŨĀ ģÕåĶ5ꄑŗ˙ZöjîļmNO)~×Ŋ"Įz[wŸ#´o†āžŖõĄN[Hl^8ãü­ß>ŅÎįā[Ũ‘Ōw†áü#•ÔōĀĀíÉ °-įÕpˇ,pžīB‹q-˜į‡WA‰ŗÛ6\Û7{;ĪG7ĪwÚŋČē÷ ÷“ŪŖ×Šõģ›ú˛ûۜg][Rāˇ#ė´sØŽuC†u Ŋˆėč6Ī ûƒÎ?jJ1ömǞŧ5†•xR}'>ŪäŖĪYŧ=TmWw×vWá¸Ļ)ž•*ßUæøCÎī_Ũo“˜Înļw‚Ž^eĒ×ûŖ^6:#Îį¯[j{4Ŋi’\?Á;ü)įņG×ėJ_čD>KŦŧîw Ł+”ÅŖę*1Ž…ƒ;ŌoāĪk ]muÛėB‰5R)÷Ÿ~::ŽÛÂׯK >īÂyRŅÛ}ZãņƒÄvˇW´‚np;—črXĀ Voį„q‘é<šįķ:\¯’c;/÷ũŖĩŽ3˛Sįķ;ā&I2ž|ôėŧ?‰yĄãsėmĄÚF÷ÎNxŠ?Ÿíķũ!/s~hėD§Ą]rąņ+Ö|ŦŽį Í”FÕÔHĪ7ųGēíŌ,ÚųdbÄQgŗš v~‹īģͤo)e<ílcr¸fËģö¨lpęr^ôęmĸīy0đÔØoī%ÎōūnęÜ9†í“ŧØ6"nRÃė=X‘¸<Øā—9và Į{‡AréĒ ũC;ŸŨ [6LČņË]ņįMõLÖŪųxaä]ŲÉ99ËĨ‡.žG˛îč GMWūÍŊŲøËĖ3öĪgÎß߁ņÎëÜĸØH+ŊmĒôîtëļr>šu&X>%};ŸÜ‚w°õqh•Ã6v˜ĨŋËųsϰŨĸÕ°ŽđfąĄė“Ūö9_6N÷¸-‡Ī Õ ˇ¯7~&į}ŋM–ĸģ;܍÷ē$؎-,î‚n( “Gņy“[9ųĨ]YböŧIš­ĀŒÜix‹ōĒef—ĄĮœOŽÁéĻs[ĘĮĪŗ#Ґy8Ø˙jčXę~Ÿ(œŲųa[Žgî7÷‹āā0Ō¯ĮmčÅžß ĖT°æ+œu¸ŌįĢFūŧ*-RĮ­]ũŖáŽË••b´jģŲ@˘ķ˛3†íC ž?_6œ™M–ËgAp>wŠîʓŗÄˇmC›ģŊ§˛ˇ3@˜ß^‡=?‹w¸p¸%¯ˇļĨ+>­ÆEe.„Áō’(†Ēę‰<ņrž5ŦÔÖ'ĩ¯×ĻRđS Ž8ĄpÂq=4āõū&u^ųēoŽĖI—įœß6­ōˇ Õ?‡ķÃ}ƒ G6ŠĪ[96×#ūÕlŸučģę%§+Hūī(¨ŋ[ø Œ $ŌXķLz\”7÷žŸŲųūéŲn€DWĻ#œ˛ƒŦåPp¯)`plŸĒZ…Ąâwqmßņ´žk˙mΗŨƒ™ÔvāĮ^—‡lŋ˙,ĶHŽũJJüy˛r؁^Ģ)ôõáüHK0ą‘SûsbæŲŽķŦw‚MœK]Ž÷:žĒû9ĩ8ƒ=ádĀ ŋÛ+Ô:ūlũí[z7€đÛ{‰ŗsĶ_+7UKĶąíē흋õ™†ë 7ÎÛ˛ŨōÛšq>ĩ­ÅeĶÜž#ÎûĶū¸!ėŽōųíy.~›ķ0ĨÖûPōėdŅûIÃų˛ˇš_ōŅÜ9ƒņŽ7 PķAŋ´ĀöZü:įOšŅĒväØē”Fn›8[>ĄyØ"‚Ŋcl˛ÛÖ&Ā—žfÖĶؑwplEÚŋ€[ÃôzėßŨõmĖĄTlhŋÛķ ƒÍõ—ĮįōaG ‡† {Î_ÚHņZü:įKÄŦįBĨ¯ÁŨj;P[ÔËôߎ™vĨXđGëãķMųÚŧfDíĨßėž1doÍ éG˙üŖūcë{´?‡+“é(¯Xü”î„tdįŗõétBŋgøņ¯m}ļáé×9ŋîĶ;Näa+VĩŖ‹MR8ėŠšíÎe˙`ģ¨'KqCÎo Ŋv[/q~ŋÃ=CīŸŽå¯v&uw×íÔņÛ2Ī<ŪRļ÷*ûš{$ÔΏ=§ÎÁw˛Ų.m¤xŧ^ ūÛsØÛļ!{/YŽ wÕ.×Nîx7iĀîČÉŦm^zÖ:Ü8ījB`ãRļuĻÄųãHŗ;ąZ ũ,tØĩí:8š~Hąę;r—MlGÂōŨŊJíwzro‚Ę ũw/?Ô2kÁÕõ6YBDąöÁēuĸ%åū8{ąRuķ¤c?ߋz.ŦcŧĪʉ\i?“”wĄOƒĸpž­{äVl)_gŊ yM´v•ÖdÚ´QJ_KąŽķĒâĶĘŖĻ#îUĢaßËHv;ŗHØ}nŅ}ŲMh#Oŋ÷ĢÖXĻĩ,JNží˔ËQŨŠqÆķ§AחëŨ3vŪHéL”gŧųž?w˛-đˇŽÍߞĮųöTÁŠÃJUPĨ}˜˛ÖjŅ_i3Ŋ$̟áŌrK‰Í+­mcž¨Ž“Î&å|=€ŸIqˇDŠÄ–ãđĶXtxuxåāˇûšS—8­x>;Ŗģé4TŦOŒ<¨ęīmŗ­. ŧdj>ėŠGwGåՂh ؛ĻOĢņ4ÎÃŖ ßUtīđ¤īŒîŲâ l2Üĩ-Íėß§ŊØļÉXČH ˆ8-Fˇė_hŲEļ>ÖÍ{’Đ–ĒŊp73DĮ ßĮ§mézv—ėû„\?%„1ʄ”ōuĮ‹@‚J!IëI@0¨žîŌRIe,œãĒH‡Žŗtĸ“9 Ū*ūHÍ'r>=ÎęØ$’˙sCzÕÚĢžPxžö’ÃŽčũK‘ļKØtËÎ3Nm!Í<ÖhJDôXĘ+ļ9ę.v/Ųa”ÔZÅîÂ)c$ēŦĨüŽž{~ģSģ `÷ žˆ÷.žĀŽJĐQE§FÃÃËæ¤@YüM'Gkp~ķ ­ÜŲîø+ģ{^o]&˛—ģ6đw՚ãɜŋ Ģ šŒ•ĸ/pt‘F^3ĨĪGÛÍõågęîx1UfˆĶFG>rי= }Ü9ҧŲĶ`1]3‰Íđ†÷oâ™yŋŠąYú›ø¯^æã9?1ņX¤ŧŠ“ķŸ—RŸOÎO| ’¯<9?ņi˜œŸø4LÎO|&į'> “ķŸ†Éų‰OÃäüħar~âĶ09?ņixĶ}•ŋ‚`­OĐ=˜˜xcė3´>&&Ū“ķŸīüäüS1ŧŪ¸Ûôį A+!7Õ ˙Į€ß8yęGk3ã6?…RÉŅšŪåˆbŖŗáOEpŧ›ÉųŸaSÍŠ›g9ŸŌ4I:’˛†Nü*‚5ĶÎ˙A&#N[žTŅ*mLōi×4&~“ķ 6؜ōUmB9ī¨Ęūđ“ķHU“HŲ*OčŪ<ËŌĮĀNÎ˙˜wā¨y¤ÛYëäü{ ˜šĮėįp^-¤Öōõ“ķī7íüĐO9ŽŖ3Ī7ÁĖ@†IÔ&žŠßĪĄöč§W ͙¸ņģČųiįßsö ];/A {K—Ū>Į‡`ŽÃ>}ÎkĄĮ<%˜`’NÎŋæ9ŠG€v}“/āŠ,¤? “흇Ÿį¤ƒ>įsļû”ÍMLÎŋ P99˙ô}•wā„ą$söåÆLÎ?#>'S†N59˙˜œúžZĄBÎm59˙˜q›G€t¤ÉäŽ4;‹'^†ā§ú{ĖxEōĻķœđŸkÜäüĪae‡Ī3$Ķ’Ū2›švūå0“ķ@ɅLjÖûõđTqoÄäü LÎ?kîeRŲr‘žÃ<öīåūī`õäüĪá¤ļŪśŗÖXcāÛ'dú흇‹59˙4øš­ōõ°ÚĖũķŸ„`”žg'> !ÚųÉų‰‚ˇvúķk´2“ķo'į'> Ņš™œŸø(xX4™g'>ar~âĶ`´q“ķŸkôôį'> Á¨™saâƒ<ØųÉų‰ĪÕŅŸÚ}9›š2'>>ú™öŋEÁ{įŦõīÃ*`B,N,Ō %ÉŊąá?ä|pÆúXģæ›:|9Ŋq¸|}¸-Đ'Nƌu@k­Wû /Y**{^N)e!ë[ qFcÍĨ”T%zĄÎO¸=KŽ‡Ļ 7;q2Ž”āRIÁ„–äËMoĄĨÔJœ6G0ņ9Œ F%”Ģ{w&^¯$ąÁáâ~?tņJŧ˜pÉ)ëĻ“ÕËŦš@/¸r× .ŽŠāznU\j[ķŦŒ ķÂäČßrŪiČxmĸÁ ‚VJJU'h ŊœĸáI5Dø5ėŨ…Ë<Ŗ:­ÚúŪ=4ooĀĮ?d÷S!/:åaw:ŠÜ]ß;BÛš/kJ”¨‹ĘbĢ\`YzŊ+6øXË1ņm)ģpíķāĩļ?õmzŊ¸nŠ^ģwōJā$ŊT7žŊ3ļžmzÎ1ˇė1nôŖ}=šˇSU9ę}Ąg´r{:uHŋģ†ÄŅí@i˙uW"ŊģaˇUÉž!UÎą‚ˆg#rŪü”ķˇãōƅ8QŪĩPüŸžûŌIË÷J2—õ Š6ŊĒm ŽēˆƒĸÃÂ5—2ĄÎLļY/Lt{ƒáÕoĪŋˇ"ą$8E×wTæöŧņ ĩ&Ãįߎcč•‘ێ \vė O„S‘ĪaŊĒ[s!Úíį`Žmn{eŪžģģÖ\ĢC°Z_šõįŽėąųē>ôm7¤ÜąĢž [_ļļû§ĻŪ7:"aņœFoˇ9I×TuléŅ—Ŧp0[10_ŠĩßG06ŧiI6˛‹ĩžÃŖĩ#ՃLãߟJŨėœzubɇ U×Õyäĩ&:Ė<ãC}Ų ũø ¯{HŦ2Đ;onļkÕĀp­–zœ¯¤ÄF†{CëO HR[ļķ×XĀίĒÛ˙´×ėIßŊ=åáH¸ŊŌgÅ]-Y÷ ŠŠē%iÜų‹Ŋé÷¤>˛¯˛˛“]Ã\ŊøŊ6ŽMwÖ>EëOWŗzĮĐßöN'í_T_szĮ­ˇíkŖ~ĩSķģsoēĩ†Š˜‡Fákœ¯ŦŌu…Á]!ģŋk:ÆËķãz#ĨoS™Ĩn‡/qūëÕ´Ųų狏ķB5h§âŨBÚúŠSŸkŽ^ŌU÷f ėĪÃášáļ÷ĘXY›ãËa•]ĢkZš~ņz;ī6ŲWYĩdŋ ļŧĀų†\—¤|ˇ_4Íĩ‹Ūí9mD­7Lû†…g¯ąY€cá.Ÿuœ}<ŦŊ×÷­ž;Ūwín­7uuĻéwĶ˙ۃšÅ—sãˆá|íĪ÷+xs…¯,ŒÖíĨČÍÆØ†ÜÛ}îöœ]˜ŋc‚›žxÖzۅ=ƒYÛÆ…Øų ŊWĀ2ø6ļ^ōUš:ŋōĀ.vĶiĢļÖ^ļ3ũ3#ĩņę؛Õē´ 6WĸÎoß5uģ•“Ž/ŅŪ1į+Đíiõ}N8ĀĶJF…cÍŅ3Boot‰Â }OÖĸ÷…lpXk í÷ĨįWáĩz įë ëŋÖæĸ_á|CĀ+Vę˜áą™ēģgŋZx| Ü;qá56CŪ÷‹k‡āÄĐG_CĩŨ돠ĖĪíŽ<Ĩsõ¸äŨBļØwbhļąãõúû4ÂųęŨû¯ĩœW8ß´õ•UÄģœŋ;¨î90ôđüJ,dŗl:^ķœ%Ō$čzĶÛĨ5Å‹ŧ †ĀíĀbų¯pūh]גTÅšfŠz͈ôäÚâØ=úfđĨpžÎ:ęyPia_Žâ<ũ֘ĮÄmvÁ…3ÜĢIŦôԐ•ÍŊ3:WqsĨ•ŦZûōŲKV[ŠËÜ_Ī5%õÂę×ĮŪŊ6øÎÛú­Ãn™4Wbč>åX”{^4ĢîSu¯ûUÅBÎ×áWš_)Į"nõlú•§ŋ|tēŖosÂyBYŊĀyĪM‘.—ęœ­Oܸ^ÅŦpŦžen™ĩÜۋ îĖ?=ėą|Ë՝ĨO §OšžÍĨĖ Učæū„s ęyP>á.ÖåÄ­Ö^ŋôƒė|Õ$D Šwqū*ĨÂXč­V§¸÷ÖPyÅžVõ>‹ŨížBģB ŽīRĖŌöŨÖˇöšjû/ē2#;ī–ftÛíBČ|¤×â6wŦ+FKßĢÜÔûŊ^_ŗŲ9ʍôū–¯ßd”~ßšz°S`m€;ûáŅXÛqkļķŽRí=ˆŊ­rɯģtŊēVÁ’¸Ā›íx[ĩ2~ø;o—ÖĐî'˛6ßįŠŋÃy(3ā‚ęZõŒģ&ŒR^a8œz„ōs¯Īϟ­ôc8_5u˙čæļ~^˙hÚšĩ /ØÃR_Žv•lã_=…ˇŅŎž}á”˙xlē0ؗ@_[ įgoXŲĄá5ˆĄcz×Đį…Ö}ņhžkaxåŧܟŋŲ:Đģ IDATŸk:%T!–ŽáÚ8§§v§^cī*­uę.O~Û7pûÂĻĮ˛­­în&ŽÜąqûVëĄĪŦīŧ;‰¤įg Žná9†gĨ˰ÕkÖôLēk™ŋĶfbHĸöÎ׋ÖŨ V[rn;F“ŅåœŊkŗe‹ļ ´—‚ķY=ĸ§=–IžŒûaī÷$6räü~1uG=âęŪŽždÁ=ŠÚęę7'õ:ōģq^=ˆķU+vƒgՖ‹SÎ÷Õ/ī6Üf8ķŨŋ*“~ąvĢF¯GVÔÜúöh6vEg#ī˜ļķ ˇŊ9yHUÖĶ:Ë îXŒm1ëļ÷čëéõ=/āŠp˛ķᎇîļĶeg1ĪŗęjüųöF—TŧļECDŊgÎ× ü÷ytEÁfģfxŋ*Ą—Ūēumd§¨ūyōÃõöåúkŪl8ļ“ģé|>ôŅ.œ‚Ú&7ãōô9ôžĮĩrQČ CŦ÷Ūš˙ÚōœĮ\Û mķõļûŊįƒ}T~Ø{!Øģ‹9$Ē€”CÖŦžēūO~šŪ~mŪ/­'ŪöœoO_ož &Pw—ūbÄĨcēõĖšÆ~(ŧÂų3;…Ų™…k kˇlĀwÛO;tymņx˜?_›Ÿ.5/ŲyŦ˙ķSÕ˙‰sšŪ~5.õÂ啊Ö-7jæōŪĮc]‡čĪnîqąK8ˇso†/ˇyg^šėäʙ„Ũu‹:^YŨķŪęÍ3*­į|ˇ/ÚQZŽmĮø§GÎפ'jZˇälĢŽšŖīwt š{‹[}÷īßē7ÃwÛF„3ÎŗļÖîj1Ũ;Vu^™Žo-Œ˙ļ&uWĨǔūáMz"gwFŦ4¨Z¯2Õ\új}ũwFÕz›ã|55ī6åĨ­´÷}}ž|Xc¤w÷KŊĨ`ĪųJÉģúđĘjR´;N×[œwDŦЁU WĒĀûŠrg<š¨úīŌ,û­u.ö—ŨīAOAxØ:ėŨŗ˙Æņrß­ãKŗXŌ{x6ŧģAî[dŨÔUøâŅÎ:RŊoeŅšmjX•ˇÖŌ_Øáp.Øã|ehÎēĻ;đxŨ Ņ xŊJë9oîTŌÎë.įī‹įÜ*׊q]+ęŅ{Ž$;đ¸đÛu>Û?i1éՕŸVëjŗôã¸Mu xüŌoąÚ\œÔ\jõĻ֊“[ŋuå*]\!üE8ķ(ÎWÄėFŽ/`Číxũ*+1’4lÛėŪË&¤ĒZī4ŠW{už´õs~eU˙¤cŦÛčŽÄ*Į^´ąŪp"Бj¨ŨĶ”ĖOĶ*Į÷õn‚}įkŲˇ^&Č+g‹å¨Rǁ|āŅWänĪfņ4x“īИŦ°oŊĐHé Ā4§ųX~t(I=ŲŨđE*ų‰lá–ęīcuēŅdŨ'ŨäØĩÚM8ŖŽW:^ķ}ęFue7Zl¯VzkôĪ÷Xv sŌ79OgßíÕ6Üáë dŊ"Ī|}EŖ svY÷îĪëF ^‹ö5éi>ķæŅLYŗåæž››|•5%røˆB¸Ž‡øáL>aëVKĩ?CšĪÖiiĪØo­ÎĄƒíVV5…‰oä^9‘ĩZ?€ķ†ķũ.ĘE4”mqhHŋeÍûÚŨíĐ폏ÛŌHmvšÃĶd$TT'*Ŧîîŗ@h„8™ÉîÖ'ÜirĢ›ú"‡ iëĨS‚îŽøSoy/đ5ŗ˛œvŪu?ēŠZ.›=IåaĒŋQ™ŋÎÚG3˙sΏt>Ęk™^͎¤mĶÕķMŦ ÚVv¸ãū˜ũˇK;ÕĩíãģÃtsV5ŽčĒqļ5:čã "īšÎ &~iđėõ:EL*)ã‰Ũí›īĪ×ÂVČôÍčÔNKĶ&›~ŋZ9ž>l¸OųJˆßA0F۟r~´ĩTA—, m;;ˆÅéŊëaēĩiõĐÛģˇ­ĶĄÜŽedéŨF•AĪžsdÔĢÚÍ Įîˆ-âöģÁ¯pzŅíÁßB•=ŋģE‡Õ÷{•~ÄR–īÜÖAFēG×$`!ÚyķSÎŽ–­“yÔ@aŅę0&”6Š‹ˆvŽxä|Ž˙įÛÄ ZÆq!øcnąmëÆFØØĩ×ņēĮy(\úš 6“ĻÖgŠ…PØčÉŖņ„ķŌôĖ…p3-]¸ęÆzk­ŗÎ›GëḣķuāâelÁÎÕŠL_h&x8đh.”‰˙l7éîŲ,X!ø€ęŠ˙c<Ū…RBčÎ˙2ā¨õũųØF‚0ų•Ŋw.ڔØbīœžĨ[ũCĨDķ)(ƒ> Šmãí­š"˜ÛCėÁ‹&ą˛.l;Ë×Ã]éu]xcc‹A>1¨—؆uÍÜĪÕ7ĸĀee¤ŦÔŗöF§FŦƗÎaã‹ũ˜ķ°?cƒ‹\Žvíũ851„‡„gė~Sënį/ßF11qö1v~bâOĻÉų‰OĖ%ÜäüćÁĒÉų‰Ī‚Ÿv~âÃ09?ņiđ͎™ø0¸Éų‰ƒ•“ķŸ…ŸŸø4LÎO|f|~âĶ0íüħar~âĶ0פ&> 3>˙0ĀA*īÚ^V˜‰1ˌĪ Nr!U}0O§ƒĨÛĄpI U Ę7i8\)Ėx8ˆlĩZn"O‚“ķ_ĮLJS‘>Ë+TœßÎÂ۝2`# ķje¯ƒ›vūë@ĄÂe+´˛^ō‘Ū|Ģ×P6@pΗ7ęũ4ĖŊߐY0퍸 ÛĢm‚é_EKÚ#Ã6ëÁ8ōRŊ†iįŋ–ũO-öĒÖ ņ–Í÷Úŗžč…īJ—L|s/ņ7Āû€âđąĖÖ<TÜũ+õë>“ķ߀îĪ<õķ ō d—‚ģäy6URžŽéÛ|(Kģׯîq>î¨*iA\Ūy9Ŗ6ĪĮäüw€:š‡Ė%ú˜ĨÆ`䆗ė&[ˇ*ąÎ¨ÍĶ19˙-$5úņ6,)4˛: Š/#Uî(Đk8Ŗ“ķ/ĀÜoķMāTkéU‡ķqËLš0HBÔŧdø“éÛ<arū›˞âē‹{^Ė|ŦlJuÃų›žsØįcrū›PCozúšņ ˜Ęˇšœ|âWđ]⏂ȨĀŪxã˛Įy˜Ŧ˛ZÅ~ũ¸pžŋ>ä‡arūĢ(‘GŊˇķŦ“õģZ‹m ׌9ĮØũÄīÂUœŸÛŊ/!¤ŧ­īĖ:n–ä‡8 īŦ_Ĩ$•L)%é;äÆū,ÔēÄînĻŪ‰[J?F& Ē ^2ąí-Ŋ9Úņ]ĒÅēy.fŦōëXŗIļ™ā”Œf[ãíęđQ ThĢ•Šp~\Нø]LūËNAZ=5‡Å?ŠÉų‰OÃôm&> ĶÎO|ėäüćar~âÃ0÷˜M|Ļ??ņi˜žÍDÁhëü˙¸`6íüDAsÁr~b„āúå4'į'> “ķŸ79?ņa˜œŸø4LÎO|f|~âĶ0íüħarūĶāô§đšœ‚Bšˇ_ļ´A’/"8ķ§WĒŪ˟÷˛é]ĢP+%„råÎŽ÷G“`#ŒŪšĶŸēK(N-zĘû_×SšûUįyëÃ+­ĩ’ŋÁhÉØ>qÖ_ÃûØyo$M´!”Iãüx“7ŠĶM,ƒČŅh bc46­õ4TĨŗqËve1aBŲāĮAĐXȍ‰ŋ!#ąáĀčĨ\pÆ(eŖSä6>P›DŧeėI]D¸[´4ڀˆ×ÅhPTž'œ&‡•ŗ&<<{ČÛã]8ŸyĶ€čÁÅ"Ņ‘pĨ33yŋ |š)ŠHŸ•؀K†,Œš9āũ’âp~AúĀwˇdĒ÷|ßy8ávČ{[rē+,Ŋ9_ž_nwPŪIŋ§ĸ#iō‡đ&žÍšq• )Ī>1͆:ņ<¤ä̃ÛkŨdHđéid$-’=#Âø+hŸ ‰ VVvBú8Lå1Ö¤—”âWĢeˆ/kųĨūōîđ¯æŧņĻ‹ėRMM^ĶęŅ!š1ų‚M$îË=đbęÜ†;ŽäDRÂ;u|§ĀŒģ’ģĪy› d5ØB/$ué2 E?ŽĨˆé…Hį{#ŧšķ™7Äk?†ؘ[ؗ!"ĩ˜í?2ûH_ãüņj3~ŠÔĢ\Yė=ˆ |‡ķÅšÍĻΧĻ2[h>,*ˆxEzœ)ÄBŸW˙^nįųw8dؐ~8(ŖUËŨ"-6ųžŠsŖ>uVöcGŗ'œOf6oRžįĪį1b‘šģlŒ?°ĄÔ\rßtœīĻ؊ĮĖÎâJwy{ŧæÖ˛Œ6U­Zëī/ãåv>“õĸ“Č—A­ŸpŪŦ,)¤ĸ‘îВÃŌ=-=ę¯gËG´ŧmŠTŽh毜īõ“ģœ×ÛŖĖ}æšô_*•§š€ųŠEx[ŧܟ/ģaŽíâ([­_ĐŅ€6Ē´oÉĖĒqĄĒsmžÃ^ ĮŲQU'īT氙P#ęuIŦ†Ėîv‘ ¨\˙>¨ÃöAČlšŽĖfūN‘˙ ^Îų˛3āši-÷ÍîŸę%WģN‚iŸØƒuŪ>Ębåáj>°˙€•ķÉsÍģœ‡\ė;¯kķ,îžcš›B‰vÜZß´Wų ¯į|ąŧGkIzÃo7&îÎŦŗl›ˇL œÍÔŲ6Īv‘Ã胀gÅų4§î›MĶyÍŗHOg Ģ‚n‹s÷đ[ŋĨÍĨŨŗ ¯įüJÂŊ\ëļJŪËØ%oDé7šÜ‘Ąœč›ĢrŦjwV>îŨ>ŨŦ J˛N 7Š¸'qįíØĖßÛcÆQ—ūîūƒíĀŽnNJŪ ūŪ€ķÅtī6œģŨ2ĮQátŋ:z͍˛), ”.ا>Ü$#5Ļn0<K+ēĨĄë’ĨģÔߤ=_3îĪ+X¨ū:öX°ÃmcąŒcyōõ—ÅmnīÁųP\úú`?œžlO–x›‚éķaüđ<ãüĒÃĒIúģÁōIÕu6ĘVũ1ôÍ4Đu†‰„Ô—ĒĄû"={Éačũ V΂Č+ĒGËĒĻrÕüņ`å;p~TYŠŠKĐllĶōå,å:rà îØēū|ų*ú”<ŧSäÄ*Ļ>H•…‚˛•b¸ulwļQČwØnĒN-sį`|F~Jt­#–ŗb& j÷ģņÂZ1Ōē?lë߂ķļ‚wŊnđyųœČUΌ ØPäo’+°UĮģSÄV.ŗē͉÷›yŧUˆf´_ĮnZ5Ō¸ęY¤U€ôĢ`˜Ęo}i¤Įŗ­f ŊŪļ÷än9QiZA9v/ŗ DŦŗC ˛ūŲō—Åž įo^uĖNÖ¸ƒi.2žnÆ˙d*æwíģąođšQkáCSŲŪ1¨twŅŋ.š–${Û)Vn¯ÉdKûF9 ¨Âč RTžÜWCķæX&‰ÆÁ-;üY'ŧ|ŋ͊Pąž@{ OS¤Ëĩā”&•ČĄzW¨ŠqiÁ;>ģŋ3ēøøÁÉpNšŸäŒåaâ,š¤Ą,žœ’"MX(ģ=@,EúrĨ2īmšĪf†˜2Ę´§ ūŸÖÆäĸU>N´wSTH!ĩVņú¤6Ō“ŊˇÎ،lœķáīú6ūåû*+„X­ąĒcânß+1/=ģNKm­™SŖZ(î‡Übyŧ]âĐ?û3Tī,P˛ú7úŅ÷ÎZgŒŊ+Ë}dä_ßéûëx+Î?ūīZLJãÜŋ†æüĊđįĨÉž‚0s"O|&į'^įNˆŨôm&^ûԓW“흇~jŦú6/GxnĒ?9?ņjø|á/aú6/‡?_q4œšœŸx1}Æôm&^÷\;›œŸx5‚|îĄ÷ŲW9ņః”ÖŋƒéÛLŧė\Î…™œŸxč'z7fÆ*'ŪĪÜqc'į'> “ķŸ7ũų‰OÌUN|&į'> ŋĨoķøxĢ‹C›Ūúƒ<Ɲ_4˙ũöō=ûOī ęĩ† ũ¨ŗŪCüįŊ7Œ mv‰•2Î9 K7+…VĸŅĘŊYĨę_ŽHą`sP(][ĖYŌ,Yį/뉧æö&Ûk̀t†ŅR] +!AF*ÅųļŊ; =‚^X` ‹D[y3ÍöûĨ$H(ås@ž‚ĪAs\1Čj@(Ûž‘ŒqÁ95œæ 8܁4Ŧ8…ōæ}ŗĐÔļ™E/TIiŦÖøbmQƒ’웆øū ´nöŸkə’qŗņŋB°íFržm >6ôÛ žũ†oSD—†t[ŽFŗŠã5‚ņ´UëK×S*ŠíLj &†:y$å:F]§F¤ ˛ ͤŌXסĢÔžîŽ~ŠP)á$Õ1\+G9/č;‰ī¤I–zYO' ›“ųmŸj5ąēŦŖ„„)Á_ŗÄb™â•~›¨nŠPUíĀےģMTĒíKĢ€|ĢrÍZF™8ƒ^āđ qTˆ$…á*‰ąUˆ•øU Ž1yŧ• nZéŋŪjUˇT+9Ģö‚ÎʎhįĒ^•øÂ%ė‡I7ŋ[î&a§‹˛j RŠg긝0$ŧSĮ7ķ‡Ë\LŊrN¤BØÜ˚Ŗū`‚’‘đé‰ģoøÖAøn¨ĶUˇˇÛ÷Npæ< ’Ģ./ØĘjĀ•ÁÛeÂąËŌTŸâ%I}ĒBZ3"l#ŗÜy ´[íŽÎs˛~*ĐZ Kįq+Vų/X¤Ę–ģwØ^ŦôCŪ2“Õ—ķēFV.í„ėa¸ė8  Ėy[ŨŅ-Gü0sųnü(÷Ô{LUō_ÅNĄØVŖšøÎ7c/úĨ[•Tœ7‡ŠĮ :ĻĮņE4ģŲ’á–šķõĐkĮE4"ä”1ûl;}ČA"›rO›ÛsÛ•´{÷ŨI/bĢ”–ķļšē‰Ŋđô‚÷įũášb$îz:Ú˛Wr’8īž Úz؞ķfË2x?7ųkđhÎŖ ˇą^{ŗ^•Ķi÷œ?”¤ĶœŽk“Ív_ÕR“5MmšJÛ`=JËZA¤Îd÷‘Ÿ\tōRy´l6l^HĪ÷Š­F"û<Ũ‡œ0ÖĨ‘_övĒž;W?Tũ jŸ˜åĐHĒz{(Ĩ؞&w~ĸ]ĸŸē_T¯E_ŽGûķn7Qo‚1˛á|ë@nvŲi Ûå|5š˜&{Âęy$øĻ!CōmôŅuíBœZî¯å)`t4—,ΝÉÁŧēØ;q˛ĸo;·ū|t}ˆ÷ęØ'ŠåœŋĨô"ĮKM'Áĸ‰¯Ę÷Ÿ‡dįãœcŸĨå|ķ+ĩø2†úƒŌ‹ņh;ovœW5e+#č÷œŅ\ŅfJZAnlŅ įŨŽĪ´nhDĻ •Ž4rfä ;ŧīĘeācv0ŠJęrv^WŽ?įü> •Đ7ū0J9FøĄōŽS)xš†ĒۅQáŨĩėHīˆķM×KˆÕ Íhãôüyŗ›ļ¸š˛Õđyā<~XŽļĶtíŧÜØĐvw‹ÆÕYƒî—lt&™föļ2Ųrv +Н/‡~ë°¤P0bÛ!đwŖ™‘ĸzX]kåąO°n˛ßķ’pEâĀī=KSá¸{ˇ #¯¤W˙•“Ēvõ#h™z{OÎ?zÖíb^ŽļT•Savœ_SˇėíZŸķfģ˛ÍŠvvš Œįĩ—ŧųD„Päā>ÃėVÜęmĢĨ”KlÔ8IlīFĢ—ŗ-?ŗ C˛vCÎ÷BQz×­õ=ÎoÉŅö÷t>Œ5Հ­wŦf,O<å-}›Gsž˛8ļļŗjĢUŊ3ŅįRwf€ĸ;õˇÛSL;ĒĶæŸUL3Îb'šĸœ•3LēŖw€Ų¨X.ÔXg š6—Ūž˛æeę4ž4Ŧå‰-ĮWīs~÷ëú6Ĩœ°EC*ĨŲÁ[ķdQąäb7Vx´æžôûˆ]˙ڔ‘ĘôTÍÁã¤īˇy4įSÖ˛ˇ=×ÍĖĶ´?Ãß°ƒƒ[M—*įéšËqŋeĄ ˜×ÁĀ´ž#{#ū‡ŦĒmĄöOđ_ŗwn įķnŠĐ|Uí#  kåúģssthįÛâ¤˙˜ĩvdôØĨ Ŋ/ãę¨yĻvË]yUĮÕŦIÖĩ–ˇŒÛ<|z×v ŦšÛÆ ¯9os{ëCˆ^u“Zēķ;OļŲ8âvQ”4ÔŽA”s˜1įuß CÂėŊĢønŕËÎÁõ‹ŌũčŪÎ'ūŪtĄ{øę1nכ•åķŌãĖÍÁް49ĻÕŗxKSžYŋUŽá*ãnwčVlÚΝ}zKŨĨô"+ÍQ˙áœOÛŖJkč†Ú~[ô—-“YŽ9¨æCŌųΠ6öØŨĐ`ˇĮû}ke'Ų_ÚqŗúũAí,'Û&:6įSmį f}tļļã&¤EwM™ėę€ņ–Ė՜ˆU_´ŗ¨Čd›Ģ)fîɔ{——+ͅ-œjoRú4Ę.vŗēLnWû:q>ėŌļÜ[÷>sŲĮī%NŲĸEŗĩŖ`]ÚTmUŠ’Î7ë4Î6;Ō Ā C`ŽÕV§É°öÔd †8|VÚO[wO-Tpؔuō}GD뉛õn&[îĘ>+đēfIfBâ‹ÉĪšÍ c7Ēn–RtĮbIČÕŧU!ndĢö"Ŗ¯#´ûĻÉYī]ČE2˜"wևuå,?lYSĘBūéšõ&×lėŗQ‰/HqŗúǏÛ0ö{œØŋŋą÷’-\Iē7@P§Ē´ĩŋiwĒ]ˇ§W+ˇi3&9T:7Jbrę}Û•Ō˛×mEN5ŧķĖŋiö=hģsmļ‚į”ŨŽD¸ĩ؇1cM[LV9¯6yrõōŧ˙EŲ{ŧõâ-3nÛŗ× ėĩķ>íÖ[ЀäDĐĨÆBĘP‹3xüU3BÁĪ´“{WŨ ĀŊÍĨõžĶH/įœ“ōkbęŊ>•/;„›Î=^JąÁĩŒm§*|؟}\šąënøũ"á ōģ§Ėí78{#Š‘Ŧ¤¤ķÃęJ9gŦâ<ÚÔŖbģI°ˇF+Ė[,qhØ~Ą8ãlēÔ~:xK靚¨“ĀzãŧƒÔ´ņOÛL+ãÁi­aĮ}e6B€äĮõq‰gČ>@bņdxđÉ(î/ŽuacA9YŖT؍I~ˆ? 6HĄm—ō6–dëŠÎyįÎ7-Ô]WōyxøÜâ. IDATŗ oĶɑC ĪiHƒŊë ÃČ!4:$&î}•ķÍķ~msüŧœŦzž^ōĮķîÜę˜ãģsMėÚR)k=:ƒēŲÄę4áĮĒ‹—węøāˇ8+ûåŲī ^rõLĨÃ˙ŅŽ”1ÆŊĶũ‹øEÎO†~DENüü˛ÖG:aĮŪ'N51ņĢvū–Ž8ƒ­×­Ŗø›œ˜8Åīk:šÄ!” ­QíCŅNđbbâIxŠŽ™W›ĖF2ûĶĐOŧ ĪŌîs DŖ­B7)?ņ:LŊʉOÃoĪa'&Ū “ķŸ†Éų‰OÃäüħar~âĶđ[9&&Ū“ķŸ†éÛL|&į'> “ķŸ†Éų‰OÃäüħaÆm&> ĶÎO|^ÉyIų;ˇrÛ=āĪj%Ū/ûqđm\M•¯œĄ—äN1ɁšõßĀ/ ÍČq"”=ēĘ[o‰Ÿs^/DJeąÎ)vLü7}€ˆĄW¤äĮ¨2 đījĨËŖLÚĮĪ}aÔ•ƒôš*āØū‰ųŦۚFŋŸų1į˙îI×AjŒŅsúĮÆ{iמ€PI D]ģĻmJ™§:ląëú‘¨ž—÷Q`—ŽVīAļīuŊĪ<᧜GĄæŦ¤zĖ™w†ŊŒķĢûœ÷”ūČ ¯”“;š›.û<’įn_u™nũû†ķÚĮmčQúė"ų—Öā`č¯ĘĩfÔEIW"|+ L¨ō Ōī[˙#­Ķœl=ŦŲrÔŊž´VŲ,ŗ ąŌûŖ{ž“Âü9ĢԕēC[ĨAAÕŪ GNģļUƒÁ´NĐMØĘÁãŸáfPÚßčš~".fW‚˙YĖāöĻ5éįĒÔVi >­wŦZĘmū(ĖLž $•yŗBoH:%ŽČ•˜JY=}†—án–KčŌ˛`‚<8ü%åyHš¨>”Âm#ŒÍ\îô\+C.Ot7ūc×5Y’|7Ĩ Žq2ėŽ€‚ŒG˜d˙¸•šJ?Ū˛xY{ĢßV íŋÁĮŊ×qƒ _ŗŠŋ„øŽ?įrEŨ YŦ… ˜žÃYHßuA1Ū-&ž°č&ÄĮÂcHė}ææÔVKRK§6G‰YЎņ'˛ÃH䓟'ǐSūc“¸Ä÷ÉŖ8d!€|?§ĀH€ÆŋAN>ŲChJ<ųĄéADJRŒ]=Ā4:04ܕæ´4œŒX é^­Û§ŸäKrmĸ ‘ØĨâ[+žûNœ`“øîOšN $‰÷ LÆļÂŧ–6%!J7•û\&š­ØĶ\4]œÆŅDqŽšÁiˆ?’0ÚjŒËÛdeŦL6ŽSŽ”ŋil•Ø8ÜKÔ-eUīŲĄį!<‚ķzÍB‡úX}:%× é&’ˆ‘ÍB†›øæx äĄÜaģa.@č1bŠ.WøĄŽ•9č0YæŽĀ¤}*HœŗNBö†”€&–Đ~ņŽ.ūÖm9ņ KAiĢĶŲÄģȔ×úØ; ~2$2Ą˜WDBŸˆtÂ/)΃>kÍ[œÃuГH2L"‹Áņ‹˙" eø+ąˆØĄ jÅ1˙FJ "ķĻĻĪĨW@y†&4V#$š]ÂÚP _XŦP &„ĸŅ˜‘3 _đhŧ#d!åĢqĘ)ŋ0‰ˇˆ°’Ÿœˇ“’ø/LŊ)Ŧ%؞”ô j”ÖiÎ,""wgžBr˜{7&L"˜ÕĄ‰đ” ˛<á<_ÍŧšHiD¤B#Q)Ôûæ `ÖĐäÎshéĻ™…ĖFŅŠÂëÔŌßM4č‘;ŅF`!ŸŅÍSF^†œĸŠá ō2ø˜øW°ú‘0š1}fzėžÆn63ū”q+,Ēë™$ŠĀÁxo`ˏi™cJ”ĸÍ\_$R˜āhG`<0  ƒTRą+¸ÆBÁ ƒ1č ‘6\;OĐ@@f æ¤Å)>!Á ô8ösã*ž@NWƒUŧ­Gōc Æä-Y‚9Ėx4"Ė(—&2,&8gŪĮĢÁÖį{˛]5ÂY¤Ŧ‰gD) ōÛ Fƀ5c ôDĩHu$Ĩũ[´.tQ–BuŸÖ@ØōŌ”jūœĮ~œ<ßE!īąqhÆčØļÔel#ĀũA˙3`BB4ásD:0´˙Ųš–™[ЈÂ$Į0ŗJI 4wĀčZ6 ; Į*ÕÉÆ9āÂâķx Ŋ%lQĩŸō%ĢdVŖĪ“sCŒEŲÔĨMúX1š§Ū´Iŗpס z| ŧ Ū$Ëęo2Úeđ3,|8ܑcÕ8"/%u.ž` č$ˇˆLbTļ—kę!đâąęü+›î(éCÎsfm /¨iĶžˆXŖúĩ#U|$:ZÖ9ė=!°bđąōäq`Inød…6F`ĨúÅø´îˇáŽ]ŒNžMīā˛1OmŒ¤K Ē.Ri+܈L_ø4šNžĄ>ų\Ļ“ī™xįéR8H´j`â ĻŽvØĸ-΁´ų‘JЧĩXÛ4ĄDc!r=ų5W2KŒŅ5_;RšIl,Dœæ””yÛ/ü mąSDS°zÍüæÎ+xUCŪöÖēžąHvä]žĮ6mUë-BœéÁĪãđ7ÃLÃ:šÚØü"õųøwKũžÍagf…ņ}bÁ”7ÁgĀß[œˇGˇO¤{ü=–Gë­ĖžÔ‘Ā:ŅØĶq¨ŊÉX†čžDo_÷'D—ĖÅ?IŠmAĘ/ąfĩú*?ģ†÷É#žŲ0e"L­ëG’ų˛ž„ėbzOȚäÛ{]‚ė†ÍļlģN ‚øÖņWŒCäŅ፠BĮ Â㜚įK÷#ÖĪā3 ˆB_žōqĸ]äØ}4P ŽÅRŖē—Ų˙.oOJļH‰žĢŗeb¨á† 2÷‰„r§|Ģ`ŪŅÖ`LėŅũãą3{=:usy*bq)ƒÅ‰/ķĪÄųĀĶŖ“-vĸˇŅˇđđ—į‰Āiœ€zŧBCPō8A€‡'+ ē–ßÂđ´,ą)Ԋtĸ<P,€M=#Žāŋ‘,$ãh”b ™ŧËXŠÂÏ<†“ĐĶgŌ/܆ķs;Ÿ÷ wRÚÕdĒDōôâß8LQsJmĖy î?„ō€ČWlĮ‡Uą—u'MxmŽŪ`ŨCËĄC ĪFOŲ§|ĨˇÜûÆK!Ļžŧ ÛŦĪωc,Ztƒ($Ν Į™!Ą7ÁŦS`ôKrSŒ`ņphÕRí‚hī ÎFyŠSyđؒMD\ܐȲ+ŪGƒ…^…)TĨ€Ú2Ѓ‚˙1K†qҐfŊĸĘ@D DÚIô chõ—”^•cŠËdÅq“ˆH~xާ2HągüqjēŽw˜FŨCŧfķ,Äé„DÂĻÖP2ųėØąŽ´Éīļh Ã“\0~‰I|#ÃÃymü/<žƒĮŲĻC2~Ęų’|I—1 ´Lö@¤9.ˆ‘AāZ 3I‡”L“įYXrŽMĖų<‡:ÅöXd˜#‘{™iŽî/|ė0ã2:ú.,@ßņ*ų ËŠŲĶk@$Œ„Jpúyc8ą€šFZsƒØ ė–ĢJ”ĸK> ˜ôRĖįá¯ņ~ z› 1¯'ėC ň7˜o+œųÃS§%ô–JģU`yãXĘŦđą,¸”Ĩæ( 'Eņö)iü†Å—ŨwœQØ4“&6ŅØ/šU)M1ņ.|8zfiųЧBa Ū&ÅDyĒ™äQÅĒŽcÍČdÆaåĐ*āԗY -S"yåļãŸÛųXųTˆ|Ū"$7,ūy+oɕۖēqVƒ„9“~†Ģ€Aåø•¯r2˛é…kJŌąÁŠfZŽĮXŒGæDĘÉᐰ†ę!€c0ąf(üxü™ÜŽ9xX#„{Øč3¤ Ü=DwØÃS)LŪlošH›Ķ‚ |ūbËēd™ũĩt Hčoœß:ü^Ëe&Ū4āštõûôŽ˜Å)‰”á5ĀtŋŪ&Xā­ą•jÚáū^hŸVĒ7í”ŌōčöČØĸ°Čm„—0ME†]Ü8í ){šÁÔÔ6×Sė°xKkƁà ™‡1ƒ¤0UœÖŧr‡ņ#âķīˇCz‡Ÿ0X˙~Ißö)ŠIqČÉC"ßã$՗žđÕČ^“ QûâlbY“šx5| ēú×zʈ ēî?;Íķ‹x@Ŧrbƒ{Íš S&ĄÕōŌĢûOŌž¤ŸœæĀ?"˛?9˙P¨×‘…_õÚÁ‹ rˇã—÷!×Ĩ19†÷säģtÛLô ÆõKpyQד7<˜09÷­P×ËʹĊ_ģŽ\'RkIŪ÷Éä|Á[ū@H á„R1ŧĨ^ŽŌƒģa•ōÕbržgŨ(˙ ŧâGĮØc61ņ§đ1œŋēeûpÂöĪ~îēŖ;=?ņ)œwÃpq°Z̞;ÂëĮĘĪÄ<úŽc|1bŒü+J“Â_âŧ7RJÆÍwŒĻŨÎÃîžĀsn\Á^ oí—×”‚sŪElāŨ†ģ2č ”ÛîãkĒfå“VŸƒŋÃy<`Œg‹Ų7H¯‹Â$ —Ĩ\ā>*/žud-ĪŖ#š8ęXķT{E&}7Öįž$B(áȝ,Ŋ-ū įA$6õÁųãoX@ZLmŠ”ˇ~ŪŧßÛ6€û؝ũ‘ÍéÁs…•Z|ĶËr_qmđ¨Ų—ôįū>Ū‘ķļãyåķ†Võ ·õŠëšFN‘o +&RËŅQ~ÚÛkõˆô“}ÁSÁÍ â;Väīâ 9ŸpˇØžF+yŊ…LRqcu ÉN2ŋÛė(3TßôģQéÁ‚Ũũ}!ô”´v† ū[˙Ũ8B:Â<ÚBÎÖŗ{´L8ņī™C6Š5Â:R9Ģ '0ŠnÂMl“€ô_kđ8… Ij‘ÛŽî&°ˆJyxĘÄį˙áI_R5Ā1#p 8pÛûjzšŽĩØÍU†ĻCvEw‡œe ņ’j[üĒŅįmU ŸDũĶ 'QSRØtˆÚH…úh–#AF ĶŲæĨX<°ō•H€‹ˆŨ’meSĒtŊ8YXրϿĮĨķãrI=KV x°<–^˜ĨŽ+˛N…ĄSâŠsąlũˤsÔŪ㨗DAü&Š!ŠMâīQĮaŦOĐŖpvŧ%šd5ˆđü+1I^ sà 1ŽđAp~$ŠÔ˛\ÎņÖx';oÁ qŽ‚aĀ VÎoZCVĨá\qôÁPDan .ˇPįQäDå‚ĖEĨUˆR‚ GØ%ņ@ÔŲ$GBQŽbŨ^ãŲ:ŌC˜ŅY¤5já€õ-ę7ųø{‹ZŽŅpÃĄn œv6, ")ÁbNÚĩÖyMP>$Ęˆį øĄ’˜”:›leMÃtČô™#(y˛€0›ĖfĀ’xįŌ˙EY¸š@e=A’H$uŽâØQ|€ŅKXė]ÕHˆ…ĨTÉøæÔuadDĨôø  ŌĀF—GĻvx%ۈķ @jԊá€%8™ÃŪĄhĘ)´ū¨ö§ŌÄ4Zp—´;PūûˆNd…4‡= Dč\VjĄĢļ@´{ŽgÁ„ž+îØ=ĘƒD4ŋZį Påa(ˇ[$M@˅ĸŌK:ŸęŖgŠŧ?ŗIĨÔ"Qé)öš´ŪVBV!K~Ąœqūģ§Ę/ ŗX‘tumdRA+*CÎÁ] ‚ëÎYQUQá-C–WͲ¸ôpā-(ū“/SŨ9œe˙EHķÎÃBˆ#­ą$Ŧˇy3aÕ˅ãÅŅĪ’ãíÕöüšž(š°č“‚¯ í(Pl†‡T+‚78Z$ųŽnĖŋ(Ō$xƒĘ"€Šž^MĢĒ~Yõļc&d‘ąĀ@…‡ø"ŌŽP {Ą¸āú¸$ņ[Åhu–°Å—]cO…ø@“Ō Đr`”Ąû‘j‰ : ŨÖŗhĸģDY+ˆņæKˆKąšķ]™Ä-ņéāë°$ģ—z§ĖŽĮ,9߯Ûpé“8Hœm&ņēS]ŋ Gšˆƒ§Aj(IļBĪ”‚ËŦDüB&cÍ Ø$„âH  žfHŽbÂ[uĸ“ĨI1W¤iŨ`ōā’/â•$WVŗOB‘<„Ķā–ččĶ$ā=˛Í&M0žÔMW€Û†ž¨á‰,`H}ŌیÆ8ēčL9ĩH˜˜4ąII\&*ãņYHĐĸƒ6ĸŪ§@ĄD‘5bs˙ĻiX0Vár’ÛL;ė™iæwĀ;qžJĩŲžė %ՀL*MÄģtō2ū/ģÆ/t'ņī@Ž(d:ƒ’G ędjHâ|DS7%/ļT†ԕ‚ä ÕPyR;&˛ŗmËö,ũ2?ļy9| ŒøhỐjJWԀ”“ĮÁ DaĒš`f t‚oĪ=Ž 0ŗÍĒ1 õąp‰ŽĄ–Ļ|…ŲĨBE×8c¨ę͘Hš‘ŌčžXg:XJ÷Ŗ1!'4q– ˜°•%% ‹5ËĩTûNœ¯ÅOÛ]5 QĻ’~ÖÜNbx¨ VVŠŌĐւŲŦBmŋ$Ė0&˜dŋSH^āpĘx–ˆM-° Cb×AJę$j Ŗ:}qĩLĩ=˭⃠b“hR10?ÎF“&hUĘ,hq–‚âžu4ŪXg‰6‘Ģ@h  -˛{…ÃļŦ,đOŽō|'MŠĶ|_8NjK.ŊM‚n(Y‹•iķv$ŒŲ z0>îeIÎkņ™ų÷áŧ¯øs\ĘĮ€1M'?=[sĀ cQXūæ’ö5H*.’Ę0<ų0 [ĮqJKS4S„JÃ#.ÅÎëMZ’Ã&2ë)Ä6ʖ˛JŸvÛį!¤4ƒČģ99dJú“‘hŽųyDHŪðŧ%dÍļ”úŋ@Ąß˛2JIqėŠs }†ų€q ÍTpÂ$T¸9JPĒߊ˙D->ĘĘQGM Åä8\â[ 4žH]Qbč ųˆëgÂüģxÎŖĒ*ŽĻĨ `á&ĩčÛ/Wvā ¤J9˛ •˜…¤4”ŽŪ<ūĐĢ$ĨķKæqũÖÛʧ¨W'Q0°Čęm*|eeÔJŠôšų°„;ąpX4…Ū>.;īC*ļMk¸6%Šƒ[Ų´¨>ˆË¤Å×9˛‡õQŌ†_Ļ÷‚Wē`aŊK( (”¨Ö—{åˇ )á`ŲŖĘw˜xҁgáW”ŧíéÖīā}8Ÿ6 S’u?;臇=F0fø7Œ“ Ėl'žŠcyG{Ųcņũš˙›xŖø|I#ŋÅĪ`ãŦÍzۈ§ÛŊ^ė…=<ĀĮédđ7Pú{Ū‰ķ0zk%„úĘĮĸįé~ ­īĨ|ž:ū*éX‡÷•]úeŧįŋõÉÁ“1Ë˙l¨‡s*<.f¨%ûÖé›˙œķyąŪiļˇęžŊ–ķFōĮsĘ<ė–áãŽÁVøãœ%ĪĮN´3öĐוÃx&ū}čũaō@Rúęé΋đ^ūüwĸAåRŽü)ƕza¸Aŗ¯ĖÄ/Á-ŋŅ‘>ķŸĢ´’ęƒ?“ķŸ†Éųw‚¤ßQ&įŽ°ö?ÛĖõϘœ˙*î,Ä;J˜B*ÁŋcÁƒļ5 ĖĩÅå­09˙E˜;am›ļ Ņå;G‹hÚÖ.n}ՙ‰‡`rū‹0÷VWU ßPœLm¤r% “ķ_ÅŊM†&īcąüˆÚOwū˜œ˙ÔØ†ŗī¯ŲOŨõõ\LÎwāˆGõ¯†cVŊU$8ܸ¯Ųæä'a›Ža8k´YåúJ“ęđÆúE¸ĨĒų¯ū[:ûW09ßE$öæPTΤƒÔNĸ#*ķav8ŌåQnisJ@2‰KŠb<ËŠr€´’,ĨÁ †'˜ĸ¤tˆĸ222ÁųD”įûŸN]ŋ&į;Č;×\:—¤—ČH8Ā˙ÃMR?Ũ¯4]ƒĪ…ŨŽæ“/āĨ$í>^d  Ü6Ŗ’LyÂ%Š’AœUoH’zúŸÄ5Ū “ķGDn ƒî ėļ ĩ„pÁ@Ē7āvŪ¤õuSÔ 2N#ÆŌNŪ d™]„ ļ˙ĸ`“Ĩ¸/3¨2ƒB=ÎRiuŊĸķxŽ÷K™&ž†Éų#Ė‚:0 )YhÕú„!=aI>)eHZ ´ Å'!IŸÄ LVÁ¨%Ĩ@Ũâ*ū‚ĒFH 2Ģ  ÆāMęyŽg`rūOEö­Í\—.܊ęJŨĄ{n‹lÖ+Ë`YÎ ūîŠÁŽÄ÷(+đc @Í,:÷I žQŸtTքG}ƒ‰_Âä|ĄH4qz ™Ī*™yüjH Ô÷ĸ"IœVr!9„ceŌIbã1œĢŽŠ['öSPK2YCīŨĖŨp8ŊHøąyå €˙“ķ}€¤Ą/ŸDP} ¤PbĒëčĐ “X\XÍr(éԜ"(ë=#ĸ‚>NaâJœKRô*ú6T Û-ˆ'Ą>ĨĐqœ` ĶMeÖžx8&įûH‡’(n™Ėb0 Jî7q‡7 Ô˛ÍNr%”åpĖ-ˇ'š<”Į¨˜į’ēžÂôéˆrB<4Éš,5ø˛ø19?€(ņŦ5Yš¨¯’‚7č‰i'Ĩb=ZjAčQTe}f?ä/qNô ũ*O} ã J‚ ČņŽōsi˙*&įđœrÜ` .‰ĻŦm Âō'É.ˇÍ8e…Õ‹$ąŠŒū%‰.Émß~}k%üėÜOü˜œ!ĀIšÛ'ŸŽÉųWÁ‹…(”†uI> “ķ/‚Ž.}ĀŦ˜ôūŏÄäük°JȆ›y6&į_ƒPvŲëƒ6&į_XŧRJžXVķ#19˙*XŽų‚™äaâ&į_ˆđ_%đø3˜œŸø4LÎO|&į'> “ķŸ†Éų‰˙ĢË&į'ū'\ „MÎO|&į'> “ķŸ†Éų‰OÃäüħar~âĶ09˙-„ûšŽĀO“OüۃķNuŽB-ŕŊåÎHÁų3÷äļPúķŗÔZ ģž‚G‚ˆæÛ›j!Ĩũlm­ĸ‚1ÎčÁ‚MpîŖöwžįŨŌ‘žN‚Øônk ø5üīË雾UĨ?|^ā QdtÄEÆ9ÔģŠ:[@‰cĸ¯užļ cO`ĩĸBīg@õī:ŸøœWËrÔáU‹°†,÷%^"yh€æâ#ĩ\(Ø9ĂųqW•›$‹¯¨øöž!u_žĘ^åR/¨­č:'z†!PB>+Õ[pžõŦ4ĶĨŽ$œ40¸§r^˙˜ķŽÜÁö:üU°Ü_ÔŌæ%á{‹.‚ŗÃ-8 öŠu÷rŧįíBIm뒔Ę×é•ķĄü‰ õäĪĀĐ랭 F+]RœyīŦ(WZL?i”ZĒ׎ÖN&ÕĻųĀÛŨdSÜĩēŲ&?Ũ‰Yá,gé^!§­Â'yVÎ|.Āöî5xqtDëžČ}j3Gaw ·˙XBí8/cPōϘųG4FœIÛTČ8j[AI$įĖ ęnÆîm`ˆ}Æ‘[_ŖßJō—œũoNxļ…zE€Ē$Ą,į-Ëéq6…V¯[íĻ­Ātē'K*ôq–é-§ÍaoŋÁü°Ļh Ļā:ʰęfY¨0(J‚å@[ĪXWÃíÚŠ=į V‰ƒË SÄNIļ{Ņtwŋž ”ģ茭´å)æ–ÂDƒ˜c-ūMÅWŠčî“rø`Z*^sž•ģ„6Ņ Ũ΃T,^Đpëørąēâm%ôÃĀR,š e…ˆÅÕ¨…oāąųÆÂÆą sŦüZɯį<˜9)(΂šB ‰A˜”@csBã0ĖÕé"¤Üė :ĩąņˇåÂx!¤[¨Ųbą,D¯mĻ ßlw4w+ H˜'•!ũ"Đzūˇįŧ„ņ¤tBJIō‡Ęƒ! ÉZ_˜įWW ō§áÃ|öš1aa‡xˆ]Iŧ—&‹ÖÎį„vR펜§^0™4ô5&La¨o3&+ĐÆËâh m€UF)¤Đŗ^aЎœ/ëOãõœ97ļ&렐g)ņ ķīĨ 4OœßE“yNLÉōũČáÄAym}Ŋ8Zũ›åT`Ķ5Ar>ä _öøfČ+Η°Ŧ†ÛGßÛ"éFŽN •¯3, éîÁ–ōs˛•Į4>_âī1w›čÚyŨÎNyĢ”W8ZDLJŧO#úķ6yNķ;cĘŦõQ4}?ÆķrÎ›ė”¤ÖÃʧ\ 0ąĒDš LZ`oĮ¨d ØąĶč“ŲM´ŪPû]ũ™h4SĒK!Ļņ°ũF#›ltį+V]%'=ÚfgĘ á-IœąVœīÄKt™8Ŧ_’+ ¤VJ4N—”ŦĘ Ģ—c,Ļå|úGČŠ ¯í~\‘įUâ<+˙R™Į*yRidāÉŠōJ,{ ē_ą ŪüeŪŋ–ķV ’f|¸h‚*Ž0˛6ÎǜW"úĩ’ë¨w›\ķ9'6Ģ ^GŖSķŖ¤!‰ËĐ[ÄJzč@žØųHI3ģä¤{å‹å4ŗÁ0Ãn΃…Rkcō´×SĖ#›¯,‚Ĩ'[8Ķ$~;­7&ÂŦU:č…đvđk˜žā¤•ˆå(¯aūa!cf(šUŨáVŠ/[0.ĘJ4+ŲyKUõ´R_8lĻé‰7ą´ęĖäŽnō\œAW€‰ļ‡|*Čų$+‹]Žũxú•x)ჿ9ávō-4 d&SÛ@ >†Ijlu !4j *ŨvXČ\+ëį&íD@ūCN›*-Ã\{7‰ķ0Ťa] ƒÄuR–œ”ŋ{]ŧˇčšmŽXr}gWöąÄp/ˆ‹XN<ßŌLáŅIŽÜėĀķ-HJ1ģŦá’xŗ”’nŒ‘O ēË­| āĮ'CXÖP‚´i>ā—uxÁÕŪ< ĨJ„{Ah˜CP r?¤`o™A‰SĒŦX…`(փԌxl€?œ+âĩv>hƄûi•ąQ<ŖÜRĻŖW‘é_„? i{‰OmŊ.5™Ė–Ėp4Ŋ”RüŗG–3šh.%´\Ę[´âņ+…Áú;OWŒ`_Ņ\Qĸ­TĻžš9‹p6EôļŅXZŖ’1Ÿ -ÛĮ,‹÷;MëÁ"XI)i㗊ŗōhĒ5N3Č_ÅXü§‹›ļÅ{šxÁ%¤j ų&q°‹`´ˆ^æ­ˇX0ĖWE×~ŠũĢ,ŲRČ[îhę\hZÖî ]oŽ#Y,%ÂÁâĻ…%ē`TˇŽĶBxŊ??FĒÕ´jsŖf…Gg+oũ–…)ԛË~ßûÕ~ZØkôŌN¸Ē4áP˛3‘Ëô˜û]p%xˇ.5įõÜ ĩöiÍųŊNû}÷1iųÛûę_oĖų˙AwöūÂcĒÅį/Cû×üqLÎ?ėįģ1/Á]Q6üôī/9ŨÅäü!ß>Úa韏žßĮäüDų}§čī`r~ĸBP˙ņâ‚Éų‰OÃäüħar~âĶ09?ņi˜œŸø4LÎO|&į'> “ķŸ†Éų‰OÃäüħar~âĶ09?ņi˜œŸø4LÎO|&į'> “ķŸ†Éų‰OÃäüŖ1Sž;&į Nū˙SÔ“ķ†.ÂĻZ÷čÆäüÃP$žDĨÔr’ū=19˙(˜ĸŋš2*:ũú7ÅäüŖ°ĻĪT&ûiéß •v'įE"ŗ 6(ƒû‹ųS0¨#=9˙(Č$ĘŽˆA•k˙M°ŋ…¤ĩ<9˙(0ĖíæA¤Ëō˙KüūILÎ?Ė‚­‡ė& -ū͆ gāū-09˙D'^gG>ũAȲËnöų'^ƒÉų‡ō5Š’ jŖūÂ*֛eŸœ{â%˜œ<ÃN1$´Bē§.Ā”Y4˙ũtÂ˙&įī’YŊņ˙|ž'CáRrF0!Qb5ú,ew%Ë'H]ŋ=&įī!a5ÉdõŧLDĢü–Œģ&@ŽŽHnšåĶÄĖž:„8ąĨUꚒNķéæ?“ķwøbĖ–Š•´zŠ`šĘÂląpkŒfɗ'ŒŽ]‚IéfcĮŧ÷îÆĶ7|B:›ˇÂäü9 '-Ũōđ‰œø;Zq&ßh 9ä˜åÉøSŽ'į9å Œ<îŖU$āœ6xš´œnvßÅäü9R&l&9hÁRba Q%Øjʙ&„­žĄ2¯oTâŊÖBY7’|VX-<æƒ÷_“<Ū›Ž 3ņ|‡ķᘨ÷…‰SŅe‘ ˜`sRmĘĨ`é#"ŖŲGÎĩŗFQá0KPAįkuė"đģÄW7ũœĮ‰&lortGūáäōoŽopŪmėgŒŋž.ÚÃĢ2Ûđlú™Ō…ō ŖéoŌiÎ!=匋ØGXÎODtzht†â0á‘įÂRäMŨf[$4vsë7ņuÎ;-¸úHoaW°‘6˛Ō/æ–üv>qžb¤2sžErđŠ8Á•ց#Ä9•Ļā{įĀ#Š_1?Žķœj5ëũ'>9˙kø2įƒ•Œ1ūf°ËBIą¤pLėq6 *Áā ]&˛Ņ›YIO¸qVi¯9á0 VÉ8…[Ā|Ā(å4F^zŧĢutÛĻĀĄc…d¯Ÿ¸ƒ¯sŪŧ?‚ķāĘKMŽ—ÅzKFãߊu=yˆÎ¤Đdt]ĸå‡0=0ƒuFK)5ÎsIôōãtÖŦeŦa ŋ9#îȒVŗ6Ģ]†•˙?ũĢđÎŖ˙ī}ŅF˜•˛C2yMŪ:‚ûĮŪ—(ļąãĘ6÷Ŋ˙˙sU`ˇēĩÅ[NÆ˛ųIJ$[ X UL2ų]€r€îŧČNöAŽRåWŒäŒ"Ĩ+ž.Y"—"‰=äšy’œ 6ķy/ĢC‰[Ž˙ōģžvŊĪWų´B,/ÅŠ×?M/ʖą5ēHÜjcŌč? Oaq^‹Õ5Ö.fđs üš“°NX)!ËK1āČ76,%Ī[ĮæJlãņ?/õ ūŋZīų^sJųĨ MŨÆˇUŠã.uƸ^´š3‘@rļ”ļfšÜ:YIį†šķ#ˇī ÁŊÆĨ_띷ú›L x*üUŖxž_sī׎ô*G¯ĨžÔ'bˇk  DėnbmÚGĖÖėų›0Eāļ@s°€Äĩle†“ŅĖŋmÎ ú°oīåh‰¸Ŗr&`w \ä#ũę#áŊÔoø˙jũŪÃrz[ŗjÆJ;œb ĐXⲹÅåķŪmŧĪ‘„Ę(!´_#U,›—>īõįA!ÁĪ^Ĩ™ŋI=Ām"uQr{ˆķ ^Žõŋs…mũÆ<;âŒųL. Āą9YĸQŧdc“ ÃF›5nŖ˜íxWQ!%ã’`ų s7—Æúū!Ŋ4AõÜŽ´ČķDwÍR2Zķnų%žũĩõķ¸yReCfņCJԌŒãÜÜ`Á0ž”^9šŲ9fsų~4"ŗŲõKŦÕ#ģíčŖfíjJÁÔxņÜGŽÂ$ĪŅģ9ח¯ß˜'}Æ)ƒRmˇIÛęuoË#Nką×7­^+W_G“Ž*r3Ęø ‹7û1“€ėĐБGú­Fũ¨¤^â @ÁŸ}›×ǜū/Öoˁ-ˆyĻô.Į5ÁԀØĻŸōx ËÕ"¯Lę] Ë*aėō¨9×ä .§üü=5VēhĶ,VJˆŲ]šŅîėōvdY7ôŨũ‡÷ąågāŠß˜āųîqAŅĩÉŲúXúˆWÎĨDŠ+WoŦ‡K#}ã›ÆerÎV‚=Æüb.dؚ”×€Č;Ŗō|¸ī3&-‰( čËrFH?âPųņ1?Ė"Ø=jUÚúšŧ=!.Ųmņģ¸xsŽxAãŊ‰Û^ޘ°{ržtîív|XÂ÷ũĀåÆB6č›á÷cËügŲˇ˙Œ{°ķãÍĖbԏ¸Ÿ}h(<ņ)yĉöÍdģôÔLd‚ŲžŽŲĪŋôÚĸvoŒü'““ŧdģĪ.΁f ĸäŲ’ŋĖ›/^?>æÃ’ÛÄĻ—Ô–ū¯'āXZŠ(DĩĢŖŠĪŗal#\āHZĖĩ¨ÍčŊ%¯ÜŗÆfs ‰=Üæĸ4ŽRĀâ}„9ūŗõãcŪ.cuĶ;‚-ĩ| ūÂ1īÔ$æqá”ūtū_-ߋ׸ϙZö0cž,†Ŧb rę„}谑“æ~ƒū ×Oų˛øuRël'‡;Q2Øw ˜—˛˙ũãPä@ĢįøģLūY¸|-ixfņ˛ĀæČnTÕVPüĶSūގŽņŗcž'’ÕĩéۜNuāÉl÷G ĮŋҏĖíĪÉļûˇhĻæĶâA( āc:Xõ†P”ÂPÁ;^\qy{ŋĖâ¯Z?:æįˆkY'[x"kŖ5ä\!/ #&CËϞŸLķƒ ü4Ķ}˜\ūä5¸Eggą8p™!'âYKÛßŠŠ¯\?7æË,\ÕÄīÂæČƒŲađōËŗđĢčņŗŠ˙<č›Ģ, †]–8¤Úua{m_#ÁUpŗƒô‹nžnũ¨˜?‚“kKbgD€EŨÂúŠ(ĪņÂ'~q꒒gūė÷č崑VøœŖDäV¸Ã¤Šˆlč˙Ú~ÍúYØĻšKqŅŗšæ][÷˜ˇærqēE`îÛĶũQø•%…ĒœœˇŨîd ÕĐĖžįŒ'ļ—]1´ā°?ƒđ÷׊ųa%€æJÛT%w—N[°?ŖĢ˛å\ƒ>ųš-įėÁ-Q$מûû“rg\KŌo5Äāö÷2Jj† Ųß´˙Ņõƒb“yķČŠLž‰42Āī@ļ3âņؖŧ[‡Ęęl ŊĄ‘1š:sŪÖä^"‹X´wšÍÎīÜŨyZ˛ŋ=ûŽķ—X•ÜŽĀ™~gŪæ ŧ7Į›¨ëŅĩTīUįûŦé7ÜŅ“8Á[ZiÆųMQjsëI;J~׊yˇ5?š]œ2žJ[l0.6jn_jØ"īŨ ņîļcpĩjÂģųsRją6Ēž=ļ¨DŪrtö­˜>ô×\?(æũĸŖŪcęŅ„Åƒ pƒ!í`!ēİ{?×a6|N[vZŸŖÆīLƒô9Ug)bYŽ"Gn›ž3Iīlđßå4üގŦķˆ rh’ˆ1š‘fą¸]H!ך™ZâNÉō錉,fâēĩƒnARĪĘ:0PˆšSÔŠBŋŠ?ĄÃôĢ×ũņõƒb>kę͋õWĸ܀÷ HT}ÉJ‘øa#÷š20§ė|yđČ&gL„‡)÷^j”Ãb„yĩļ”&nō”ëöwžņwŊmũ ˜G¨”ž:S)ˆ¸ĀŅŧT#$–p 2Ô>øôč5š¨OĢāžé}Ā›äæÕzŽiWļĮūéy“ÚAûŪĪ<˙ËŠ˙øúa1īS_|ÎešāÁĘŲ;f{ÅUuø{°Fëũņ Ž$ž2ÃŅh1˜Ōšš@}Ÿš5r~Ų-ž%ķ-KÔK nŠŸX?,æ1‹W¤,ŅdÕkxáoéũįž$ųÂÜûpOŒŠe)I|Ū›>ËRĨž5Ž_Ģ*qŧ1ô~ËGG告úäø¨ß<˙ņõƒb>jCfŠÃį–ā脀Ęs–[˙ķ?ÖąEp:PƒãNļœãĻÎĐŽâƒÖOĮëN¨_ŽæA(v;Ũ 'QXĖ–DĮ“Ņôū‡Ŗ/^?'æ'…7/1´.pX„áō¯Ū>QÕ÷ é!J´kî´dĨCēoJ„<‚ķhĀĖKÔq•č:M&%žĖIíág›×JO*HčęŲoĐhũœ˜OhHš%JîžĻTSĖœÄ Oį\Ëĸ“ĒzÛžŒލ…ķĶļM_0e{Äë…;{c\ē6pĸ˛PwaIĨ—€÷!t‡ũœ­—ŽųqŒâ€qCũĻ ÁĶr\ūš >ĘÜ0`X—XĀŊŧÉąĶ!đÔfŧˇ:zĀæY|G ææĖčŊ•1ZI*|ã=Úb+‘ú™r*Á§ƒ,?C›ãk׋s‰í1׆in í¤ZŌEy’õį0aÉŨĖĮØY÷&ÜX¸†Ã|ÉŖ:Ļū’ĩėmyOęfŽ-'…w­ß%_ų ŋ]úŦWŽųĒ5é gˆ†1Â]/9UwČȂäŊąąÜ؍ėˤYŪV(.Áķûf“đųNō~ˇ€ž`BâRË*…uōxBRˆ ‡ŦŊ-ŲĻQ"-ÜäGqĪęäßõlŊrĖmô5O3yč1§æÂijcĘ?Ęš į蟒Ą˜å-paMpŌæžmáāi›°‡‰Ú>•"ãá^ëÆåČÄ6ˇe4ÖY_ęŅ`ŊrĖCČ@Ā÷ĸ)9\ĄĘˆ~yãsÉP´Y–{āZ—u{ĮûąÖ/Á7TķdĒYlåŦdũēN(ô0æĢ‘7ęs%*K%ä` ŲôNÕcūë•c~ö 5XĶ}s̤°lÚ—9?ø›+ŲQÃ:pkĩũš†;4ŪCYMõģlÂõ(ø8^BŨKúÎOcĘŗ ÔJį\-ÎÅg%bĀ6ū!Žė_š^9æį¤E¤ŌĀ–ÔgPNˇŋ‡<0ÁŪö¨a›ųôĩōŪ$ëOũ |û(ŗĄđ&/^C•ÆJqzŽšlK< žSt]6jMeK¤ŸĪļĢēlŖgSéŋëÎzå˜Ī¤‘IĖīĘH|ßøZ\3,û"{ Ö>ŲĶĢęė|•WŊX5ėúŦēô†v›ÖbQZAČõLäqЁĘņ闭`Ā{7–œã4Y>ŋˇSīY¯ķvqŨģ%4]JķU5lgž ÅĨš3Ŋ’Į“O$ÎD0bJ ‹é‡\oÎmĐŅöč.Ļí؏fhĖrĐė{./“Wšu†ÂšđBĢúĶū6-ßŗ^9æáŌŌ"õĒ[ļËÖ°Ëá<,ķâęąņ[ūūã9žškđް̒â!Ķ/öūÆ6B íÎHÖ …ŌŒ~hŨ+ûŦJÁF¨”!uu7…ÍŸ_—ÁwŦWŽy“Õ‚6ŖDˇ$TÛ,Ą´”=āB‚Ĩ=öS"7É=˛6ŊĪFh‚âšKŽG[wÅ”wgƯ’$•ōą-3ĸîžē ō‚]ΖĘĘøWÚīë•c>,RŨå% .áPHŽK[ĖÛg ™P;Âo1Ų, ŅMspd%ëÔZËĀąĸ0žöHzäV7ÜDũ0žÜá'DŲˆųÄP>}š,6¤Ū§JĪ0ōHįå-öåWŲī]ë•c>IFėÖTŖ>"A?.swOâ$ÂwžZ|HĻõ7—Ēų3Öo‡FSÕËĄ(¨‡;¯c{Fž!€¨cšį×oƒūë…c>Í>ŧīF%O¸čpq'ˇ} ]`ƒā‰Ÿ;ÉB¯c7Xƒ‚_3|Ŧ1w2}R۞ĩõÍOjĄūBjÆaöö÷Tėh‚ëFÉ>¤+ĮŧÜmšđģ¯×ų<†‘ôNÁí-ŊRŋnAš+sīŠyĀŠūō×ŦÁk§ĀĢŨíāūpķë œCwt⯠Ķ>\7†ēh´—|2ˇÛ˛R ĮCČ -É8qIexāüũ[×ëÆüĻúĩÖčú>aĒqxūJŨj%տ޴ûŅđH§{ōÍD#ŠĨØÖ1ŠiS¨ÃŌ`ŲįÖ{Ë҆1â%į:5,+ē7ĶĀH÷Ā%Ž/kPä~~ÉQ“ ·ŒŪ%n–]¸ÚNīY?p’üec~ÛŖí—°‘× ‰XũØ+džb rRpP&/”z˛'‰mfųKĪĄÔz (L ĀTCé­ĩ!Iūg\fI.'ŒÚ,C´,맇GÅ\ÉHXĖŨ)ōæQ0ČÉĶ$xN>–čĮĪ;^5æ7ÚŽúĶtöų@Ē´čc)962—¤ÍÔU]é#AS‰*vŲáø~ÃOúKÄžsÃt ũԚ5ŧķĒđwÂÁxŸ [™ûIsčÕ´éN¸ƒŒÛŽyUĮņGíԊŲÜÎYqj• o}ĸaųÃÆj_5æËžXsōmhŸR-ᔍB}î­Ũ"ģCUŧŖ Šaˇŗ0Q;TÃYršdō”rŠ ŊCZAršˇ—Û(ĘÚëÅÍgFXĢÁRĶlÅĀzq6Ė—5|š‡Í%/ m#ã1´(LĮĶģSwųY­ÎųŊą‡Ü,‘4)6㝙ÚiÍ0 ŽXAŽ´}ÎĮŨ>Mū°;?I’ÃS*[0Oū¤~th#p}ŽM"…Ē+›ņ!ķŪVļ =bŅĒĄ”[{"°zäĢ0˛Ôh'‘¯ō"ôr|ŧWsķgaúų™TáSķ6š­Ėųt5Y¤Ž”x¨íhāāBäā^Čā\Ŋ&\࿤¸ügRÄ$9ƒĨKŅ %‘(Á-ĪÂū„C‡~c ~Ęŗ7Ž…!LÂ6IJqģģz‚ĶSAuĐ{Ŋc–¤愞ĩĖMļũ€ķš1ßíöØrôĄY~‹˛v¸‘dŅüđžø5Zˇė ú“ßRQFåYŌO$Ä æ™ļ–CYĨÁD9ˇIX>wDKˆËĩĒ_ĸˇĪė&å1"°Ã/wųũá^ú-m z7+ö:oĢ~)gĪÖkÆ|˜qž HBūÎ,Ģ€‹0‡ÄLō~õĮŒ 8Įųž_ÛđĄV*XtXÂEíŨKÉŌmië1îš×æŒÚ˜\ЍÄ<åHŖ$ûöa^IҜ()˜6ínÁf@PŋöjO׋Å|ķäŖk¨‡­ÉîˇĻÉŨ™! ŪJrį6L.ŒˆGŽfUžG`GŦŲŊŗ}•˙ Ų…ØŪQo"–ĐÂąRuæ/TBIH‡T¸5ŌÖJ‚BjBģrd=Aũ~[‘랐ŊÖģ?Í; ‰dŠb{ģŖmPQį¨×Q’Å 9;æqåûŪå^”Žųb1āKc@¸ÚŲŧõ™ęĒR]ŪoÉá>sŠ˙Ę#{ô¨"=]’=}ŽsÍvaΑ8*ČßÂXRyqęqļØ*‰4Ūb%Ŗuė)ąŲ˜Hŋ-S*qøsŠ[“ƒ' ÍŸ,ײ9EĢmü°ĸÆļø+ÁÜ9 öMčÕ֋Åŧļ`  `h•#9™ŒŖŖŌæ^Ļ/‹7āĮčžŖ+-jΝ |5ŪĐgJžŊÁØR‡5¸ d…Ičų€eTS'ŪĒër›w° |a;^uâđÅb~^ō{ l¤TŊœųôVŊÃۘī *âļÕÂYįâŸ9fĸ1=xŖí{ī\“ ļģŠŸ@î|prĒ€š°_Ú6ß{vķÅ1úrčųˆčÛ&;âk┉ßŋ$Q f§í­ÁbĮ[ˇ5Ū –˜ĮhlŅFäÎ<E ‰@ūœj’§*Ãß,Y9œá]h<Įđc†j_)æ“›ÆÂĸۑÍmëd—Ņ$āĖí0Ū•Hü*m”ÎC¯|cmRižœuđōĩ&¯ŅŨ ÷AHŊ.¯6Á:œKØp,%æŗúÃ*ëĶøē WZī°ˇ­Žũ%Ũ^ī˙õŊfgōvŊRĖW†RŨtĘĐląSØôövE‚Ä!i:ëÁ–,ų†9jŽŌn÷Ŧ‹m­"áĪūFŲ'ãˇ¸GC^Ąˆ-eØÄøøâˆC.aT3Ā>Ô.u­“$ŋ‚ÅSĄœy„Ū&„,X^*pŲ´>QĩÛ<Ō ü]X¯ķ Y0)Ļq*Rénfˆ‡,– &×ļDëŪčĄ†` ”ÆđŧuM}˜ŊN`‹~97}š˛7K\ôdxķ÷ŧÆVE´g7ĄŲЕ\|%ĻfŗŨšSĩ: Ŧ”ŪUŋūŧõJ1–"hžĨ]UiŸ ŧ‘ÜöØq—–(XAŌi¸šŋEū—˛[xvŠ×{62Ņ)ų0c—Č^ģos&ęŒ.āķÂ;'C ūņUĩ2CŋĘĒü0‰WV‘¯‰}0O­–å9 gb"¯á°S"ĘÚ_^åĶõJ1ī–Ž˛Ī™›BōÜļAôĻß“V}š1:֤״!#Ē*ųŌÍŋƒC] mBšĀēOŦ ë>ÉđĄŽh&.N ÷âŸĮ|n(ŒŊ‰žZcŽ´:Î ÜŞŽŨ$K.‘B)Šcæū.ũÁ}ķīšë…bžŗR3Ü5×ĪkŖkĄœŗÄā1’ WįCŧŪ­nöÖ>ķŧÄü0䲕Ã<ˇWUGēcbķ(O?rÄŌpQjjz÷ô0æšđĒÁáĻ ŸÅU°.ĄŽ,™|¯aîÄqŖ9¨1‚Æ?Nģ_pķxŊVĖ#j9ŨĮŽŒ…%ˇšŖŗ*ėŠpo ¤\Ŋ•@<ē­čĨg˜24X”¤ą˙Å|†Ūōkė žQvetÁú8K F=žš ’šÃ°Ž6"ȮŒ˜OģM`ŧÃø`‚ÉE›ũíŦ€÷択0˜ērž,8đĖaŗP9G*įŅm(ŗa…‹Ú˛°ú‚¸ž~j{Ĩ˜įĖŅŧÕtĩ (Č nŦן<ÆžÉcGŌÔa¤Hņ ÃF6:î~†¤ZIĖ[Ŗ¤áŅÖį&5ƒ[3Ž+žŧ´ Û'6‘ŽŸŠ™”°žĩoĶXķœ.GCĘr™÷dz­ \”<&šÆü5ėĢb‰Ü”w*ģ{Ü #ŋâá•b3G&{ĐĪ–˜ũ×ÜĻyktZvš‚Y–üÚĄ'LŲ2÷=_rŗ—$æåŸJŠcÄN¯ļ4ITY%éEâ:hFÎļĨēæXp?,'ˇŸv8ÜÄmâÆÕË+ÉŠdû(ö´_•{’2Ú¤äĨæ÷vũ5ŋØ[/ķ `Á+ŪĀEg­@ÀŪ7Énn4~͂ ˆzŖ’ŨK, ‘ÛGÅĩf_÷ų=y‹’XNŊĘQ[õ†Š-{،F$§ĮšU‚ëžŦž /_%æ9Fx“‚l€Ü ō˙á‹í 9Ņ…õ0Ķīšyy}öœžj`ęÅÖëÄ|‡Ak^H͕=Pn0Œqėš ’y¨>gTdmō ˜: CČŦ%%Œeã%4 Ėķ|FÎĩĨ16ĸ˜Ä-•Ę.‹ė čâĖ—öŠyČČ>XÃPūŲ•ÅHĮHÔŚZ˜õ˙čû›ōˇdöĨŒ°é”Nú›æīŽ×‰ų&ą -píúéŨą‡įhą"jPŠĖ‚­n‘3r 8ō^ FIÍ|T'ŊŨ&8pæsŦ}K†*ŽÉÁĨŧÄėÃė’â­tA@kĖ̃›ņōĀ\JØcÎYŨ÷Æ&ß9ÆünŽŌØDē%R˜¸ųŨ.Y*sį< ø;Î=Ī~}7Ã/ģ^'æķ’‹r‚ōĨI<Ũ<Ķ˛ųNJŦ ጠx>—õfM~į”Oe›ĄâbšÃüFzĖi;):]Lml×\9ãŠßē_ƒÄ|˜'­^sõ“6"ô`qŖŠBø1.ēxہDÕŅtę-Šę­ÍX+r=†w“×&rvúZ0´ˇYĸrÕ%ãC¨öcžûÃĢb^|‘‹Īq7Á„ēKcuÚõ¤đĀ5eH-­E°M.a*Û#ÂÂb ô3ĄÚįõ ąÄᤙˇ‹ŽzAt\d%O ‚ÁeÁIÜī\¯ķnąCrUƒ{¤dōR.ąuŊÔ0ū –‡÷ĩlÔc4s8-5)ļéĐÅˏŲ÷âr2ĶŨ•‚b~—áxG–¤OŠCĻKÔw • āWkAĀ–†![fWč‚'Ī–2™x'Īķt<¸[cĻ!nßā“üsāĖiŊLĖĶ%Ŧ”e@ØŨÎ>ũ}y‰évĀ9š’.`# 8m"ŽA[Ü/Ĩ8đš­eIŲNIáƒy”ŠƒŽ&ÎŲŠ.&¨&Ɩj Öu°#b˜ÉāĪkŗ&h“īÉgũ‰SđÛÍ,Øb[é âį\âā|/?’—ķ21Ī&ƒÁ ôY– iū=—2͘ âĀ6vø‹~ö~CĢ—ŧ 0ĸ ūđÔFUI›6pH ×{ŗÎOI5lb.ķž5_ų0؜Í›$ëčĢ ŪrX $É?!›A ã­í„j@~x–ŗė\ĒĨŊ%žī ŧøz™˜w$Įf`5>Öŗyü AĒŌ]ÕÕKø1ÄŨúëN˛nL^R´‘ę}€˙Fā=‹OÂ/õáEĢ]Ü^\9§C-1ÔL*vv˙Ø:'šŸŽáĸŲ t=h܀p¸÷>õz§éswõúcJ×}ŊJĖ÷…ēLhĢt‰?_ŠcĪځjŽ™ 1H}€ û-ĐÄėM \đ#=Ā  LYl'Õážüi9ÂЇG}k%Û<\™j6úlm1Đķ¨ū2Ú=ŊÄ˙L$æā§.˜…•ÍS÷VũÛb~?ßŧJĖŠ›Ū&šØS%|ûˆ\8ĸ™B0‘ĀЧÖ¨ķ ´% ´x0OËZi–lpbē€ųŨ8ļlĐh´Ļõí´°ŦEīĩ%×[Đ v{:ôšæí–dđäĢ/ĻCą‰×UķŠp}ļŽÍ0Ą${0ŸĘ hšw啿õ/‡ĘĘ6Đ8%­$ãŋË>ķĩę_$æœ-ëė•ŦšdÉw@ôtķGΗæēS['ÅŦôáŖÕĐ{õõâHhy’„ØÕ9+˜RņĻ8—+žs{ŅS(ĄD ųuŪ0ø÷˛s’Õ§˛ĶBHU°J÷&ķdúáLŠ.­Ųâ†"c:Ā÷÷´jĮjZžHĖCŪ×ĩPA%ö†moĐ}DÛ6EŲŠĢōh_G/yŋ“寨í :¯5 :ŠYĄŒ˛Ä@˜Oäc°Ž+ŪF˛Õ āAMpãÖ ã†Üq†œ$Ė,ûū=ų)}iÔ$ķ¨ŲĘ4wQeuîņmV=ūŊE°(˛—*Áˇå}ú}?fŊ@ĖWW×ēx'ˆ9Ōßôē&|“ŖEĩņáÁŲz/4šėû(ĄlĒŠY0•ãe؉K•Đc€Ė`KF~ĒĻ‘”Û~[ėåāgĶ4LáũˇŪLũíõ˙Dáüū1Ī[ĸŪ )ābFÖĻ5捜zį„QCŨ™=Œ˙đÉHíŠ{$:,Ķ’TļväE€ “-ĶŗÕXš×›sUž)Pč æV¸ƒgĮ5NjõR<¸9^%o˛ŧᘉa cl_dČäĢĀ )/ô"õ8ÄE†BnrÉ[‡\+*bâwUAkáÍąAņFdã͝˙rÉú˙Dpøū1?šûE0rIÖŨ÷/_+|ĖäĮY Įdb0ČōËZM(9ö$Žaę‡Į,Ņí@zb¯>atjQÉüėzˆ-æT Ë˜ĪŖHųÉĘ歁]ÎdA,ą“y‰:v`æ6}›îTčŽÜu@;ôs`;ՄÖIößy@RĩÃŋŧ ĩEĢTČų?Ęą˙ëbžŸmKJ’Ŗm-÷ôŽĻ‡Ėk$] u×V˜kžoh+†´f$Ė’,ÅkųNĘĒZ­kC%¤nēĒUŲ‘0Ō‘˜O5Ļ’k õƒ”ĩ5e q~ŗˇÔáxĶå~ĸ$fd=Vú"0˙Ė1‰mĀ„4)€¤Ŗm§+Ķ;ÁSæ™įĢ”1ŋ1Zß?æĩkb烪]ÚæJĢî3ŌÆIæŖƒŸƒ0rĒܑÅ^°äáWÕwAŦdiÂ:¯ŽŧŖôžʲąc_} 5Iˇ¤pđ+ž­ĸīéIĶEË&hĻ×J6ƃåéž&‡–Ŋęˇ(xJŌÂĢK% :ŪĶÎ͑šUvŽį{@X û|ņ/ü˙ §|d}ī˜Į˜F÷ ´ëē›Yķø8Á; q)xßč%ŲîVĩ|-„Œ‰%uTëŊ•MvĪ–"1|:4hqÂFG0G–†Ā‡ŧ::L?ؚ„׹ ōĮ"Ė™ŲĒŅhaŽn=éÔ÷Ĩ…Õօ[ĩ.¤îLŋe“l[ˆ–˛Ĩ„Ãl Ôē-§ Sön1Zũ€åČķõR"|xŊ9æ˙?yÖFŌ\R=24 GpmæˇĶåŦ‡y1ôœŦÎÚęĻĩ×F6ƓC3Ã%¸į ÁX!ëg XķE¨ņÆH"u šŌ<ˆÉŅ)YMéKrˆŅŌ$īIÂ9ŅFdãSÆV¤ü]î|€Ævn.RŨĩÍûb‹ĄÃŖ´J…›ųŧģ5œøK‹‚áúŋŊöZš`‚ņęøsíy{ˎ˙ĮímŌĸ—FÖŌ-Îy\X*ÛJ-$y(äîaŗ„ ym[$ÎRÖ;ž3Rr6ÔĒ—°ĩ(īŅImƒ/ʆŊ āīÄÆņđ’‚ŧ g|OKīōRŅĘv1xųģôŽŗgjéīsúęōsĪ ×ģ]΍ĒUN“›ĮUôlĸŠ%%%7Į÷j~|t\Š„7üpOT9åf˙?i$olƒJ2āvuS \BÛ:đ{nÆĒūâßøÜ$ÃVëcaGO%7.§Â@Ä úPU ÖgH—å<@m‰æ" |˛-}~˛MMvŖ(p#XĮ fÜČ=įH‡oMØ`9°öĨ'ãnč‡õ’üLj¨œõ1wō'”Ĩĸ‘Š‚ Ú˙•æG čŨ#Ũĸ!ėCĀČnā˜ū/ū7ųďĩx‰úĸqæeë%}’öâģs(\ŧSīpdCÂápú(†yséīw‰!Đ`AėÁ[JjÚ7ÁKFĐl \q1–‘ĘīĢbM5įivlbl8BĒÄ&ƒVRqž‘Ė0ČpSTķČĖu„Å9)&¤ĸpÉHI+/ūf™œOŽ}^ĀZų!ƒ Á G#ôVŠœŽö>Cîŋ]/ķ6JÕ¨—œTŅЋČËąôoC;&äÖÅ7ŗGē;B„Č˧ŗ›ėTÖÃŋBû:DčUÛļO9¯ōé Nq-f惨Noß í}02)‹ôžlô*‰8”rēpk/'õ2é3}ļ6]Ęō ×PŨĶėAž—ŋ8@Vû/’ko“ dmĈQÁqļÃē‡K$ÎMŠÃšžyĖ#‚ DœŌ†7iĨKč\„åײH!Û ĮËIpޞjwEGÅ<‰>.ĢĐvZknf˛vZķč]Ļ,y"g’Đāâ]"fĻØ\$ĶAN›Ą3„tŌMĐûĄ+Ų ë‡1o2†^×m0†đá,QĖŅīL•rƒoGL¨ģúC FhŽë=sķÛŠTf/ØøZ¤nELûFT?D; dĩđŖøĮQ˙1ŋ¤¯Ëéæ=Sō%×Sĸs0˙ ĄäGĪüĸ™Vđ| 3čŨZ ũm‡—OÜqŊAGā'lĄh áŅŽYŦqč÷2ú:J“ÂT5ī…]—„ÍáĀd0neU…äL"k°'ąŽD’;ȗ,€s eGüaw´yX{Œ9ô"ûŨYū ’‹)čúēōo TÉ:­Ĩøoqũ+ÄáūUɘĻwM÷îšŅ>ĘvŊD đŠZ)E.EŽ+Ún4FfI~Žyū“‰Ø×aI!Iö0§ZÔ×tÔŪ |Ŧ=YˆãÉoA^yŽV"=”žåy÷–$ß˙ĸĒā7yĩū`n[˜ëe–K~ˇĐīģĘ)O=ņ#/kÎb}pn’Ŋ›N}ķ`ę(Šw›” c]§$T)Ú+ķĨ%?e<Ā™7hQÆĢ˜#o¯#Åk“ÄŸ2x‘ôtIūéøØdęŽĖËBķĢlŽc.áhŒ{ĢgŠPoκޚÛ=ōÖõ …ĘÛ>HžpqÜŨĢŽŦĸŨc´b´ŅŪ…T“íæXzų‹uîwųuwô€A nø5‹{RrQC$×@ãxgP”%>đ%ÕÚJ†ö‡Ąüߤ \Z*c‰ŠÉtåuē¸âQ‰2Šå%ĶÆ HZ÷øšŦ ĶR¸õ !„÷›í,ŋĄÉÎ(a]6cĒĪ—•bāq*ŗÚėvEų5á~Z*Lk*D°'kËæ”ˆō!c”šrqg]å~0mĻOĻNŽ~pmļŠ“$v–āč@QQø÷uÜ”Š&ĘÍQŪ3˜e¸ö(¨qô'ō ’_fJĨkĮw0Q\˙%cņÛĮ<¸QÉ0(ĐpHŠNÜ×c­UIŗ‘ĒĢįŌ6ŅØczÅWĨšDŠPK)6 „ųęÔ a˜õE Á+Ϗ5Ņ;ˇ.ĩxCÃåöfL[ŗŨu5§JlĐKÕļ:,ūrĐ4vučqØˇŨ~"ŧ.ŽnĪ:ö~Ö).=—Đ™æˇēäËÔüh&„ÎĶčĩ$RČđ–RËÖuôŪĢc Ō!ëÔŠ(cz!¸ņOįXžĖŖ‡ą5UƒCGšŽRųŌîdsÆš˙-×°/‘(Ņ3bā>'8În*„Ų0ôÃ$m1M“ŊĖ<Ĩ"õlėBĘŅÎ-YĮ1-´¯]ŠÎŸÚAˆŽJææ“Í†Ú^ļį97‚ZcŨõ@^%ĶķaYüĒŌŌIÖÔĸį‹" ēĪFGŋ@­É|†LĐđS;"ÃåŧŦs$ÉON„Ķ}˙§s'ß?æqmƒcĐšæ&RT›ĒÃg\ƒR+–8qzķ)ą•Vs`Ķ`Sc€>ŗ%–7ŒcvébLĶŽ¸5RķJb•ô5¨ēÅŧ [‰wŨĪéŠáäEīŖÖŌ¯ Š¸‚É ÅkN5ĮPo:úûꆄčķWŲÆ‚†xĨjm&4öV܆<Úŗ¸Ah‘ :ˇQ­JPã'“Ŋ C1īôŪ9˙ÛkŠˆų Ēw‹ŨÃdā bĖé÷Ē%œ& ~õÍ`(ęŋ5ø’!ĒȲ ļ2¤-ÆŦį8!X25—äæÍĻnšš0Ÿ(/ŪÜR`%Ë e†#Б/z9BxkīÍ<˜āûŊŲ!KĖį€*Áw‰za÷CÄCšįú@‹( īĨ9!nûûŨ*‘¯XhõjßV #ŋJá[pûåˇ×24!zNÍdļõRj ‰ūŸÎÜŊ@ĖŖ ĮÎ{m:Á8ĩ.;}ÂȖÕ čĀ͒™€võ5ė—„eJØH¤9薲ú°ŧų(+Ų'⊩HČU^ īiž1ō{C`´€Ŋ˛$žÛ0 ÜúÆ wēãGA/ ĘÃ÷œčĢėz‹PĒžē  ˆs›đehĸCNdÖ h—vĀuô<°¤‚]ŅņÄxØ$×jF7ø ž@ĖÃdųN°$Ŋĩ7|C ´*Āß'kNi‘Ô…Poɇņ ąlņ]ÖŽÁyéĮ(á$;l¨Y‰­’īrö’ũÍôbĶąoH;_âö ÉĪcĮīÍ˙…Ŋȁéō\KBŗÅĸ„Æu§ßⲠĢ`¯CĒKĄ!?¸5ŗŗ*:åPY|]ÄCÕ % S0:æBo1ŸęäH]â`ų_)byŧ”ŊO3ē7*ä- IDATំüKÄ<îų)ģ1-ļŅ-ŧ*aņatņ§č ’Æc|Џ)ļėY~'Šc¤oíį.ÕÖÔüfæoXņ˜Pé9@?c>‚ˇ9“¸UŠ?_đŧļkąäQļŖŖôž—Ū‹ -Ø*G#ĸĒ?ĪÕę z—øÖË!āL’âš"—&Ō:ËsÜģuūøÂ ąĻjÍâ8´Đ,åŌ„jVÎÜ¤Á ßøė“1˙„Tü 1ī‡áV3úlPøģÚuKĨûJđ7ö­ë‘Czƒ™{ČKũŠ€AŖQw:žĶ Ŋü ĨOŦĮKĘ,^ât*×ę“ÜŽß>pSYJÂÁĄĒK`Ûč¤ ĢcŧmX ¨žEžÛÛåš?‰Ē\N“‡¯Ô‰ĄŠ—WÎôō’úËjƆ~*ÆÔKbŲ*Ũâ5Ą\žQ3FŗŲ|ū fØOįk Dû7įbƒKh“-cĖ–ešĢo‘¨G|ø@k_ĘĒ–5=Ž}Ž™ļũĶ‚=ƒ×â ‚e vsúpä`˜ &j˜ŋæļJĸøßG•œ1/5îY8…šč“Ē”‚‰‰‘z=ljšō“'Ímš3끛]{užM[7¨Ž8¤x#oĖ? MhQ¯cļ ”~UĶū-hFÎņŦĸĘ*×=!)Âk–í†GrV,Īû&X7;Ąũãáß=æûV´"EFŒĖÍ2öæ‘(XOŋ“ŖĄEœÂ—Ō5]ž3íV$^Ãj”\‡×. ÁÉéÍÚšõ¤Oál‘<ŸbGStn؍c^)&[ģEÄŖĪüÁ*“nkUą`b~1eíÜ,Đŧŧ“če7Á âü“ܝutp`‹îÔ´íĢî_qīˇj!‹ôŋĨš™ļŠfk–]ėŅ˙b\~ô~;nœ˙"ÎwymOęl†äįČ,īĖmß&*Ķņō+‚æCeZŊˆ¸U°„5}k7ú1 ĀŅ“Ocm×1͙’-McMˇÉĒŋŽ1usĒ Ū˛Üaą@ž1†°Æ(ÛČé=k/P×;ũ ÆVô÷—‰ũ%J|IHčÔs^üÁ•r#ŲTņ;ČKŨ+‘/jÛ€äm]¸L*ÎÖhËmáéZŲ֌8KWĸŌËū>ŸWĒeÜžl}÷˜ßŨžu8‰Ųȗ7ĀШb^ M¨‚ĖŨëĄ7VŠKĘæÛ*¨)՚R))cEĐcÂÂaW7ĸė ßÆKŦ,%c•§Œ‘ƒJK-˛1ĸOÁË ėĖŸS‰ą\ÚMEg§› ÄÎt˜*{^)d˜—Ŧ'M]ˇģ;‚÷Î N“PSEú/iĪļøęÕ>›E}2åŽ2D‚JĸQ6_hģ/ŨžŅågܖļ_Ŋž{Ė÷eŋŜƒą–B7ŋ8Đ'Oũg'įšąäĐâĐ4oũ.Z$ŅK$ƒė^ā!+Ĩ,ІEŖēĸŽk\ÚsƘžqáKĄäŊ1¤d–f<4ãL_9„Ĩ6;:‘ę ŲC%Ņ([ÖÁęGÎAH™ãÛW¸ŧŠbōŅ„'GŲ“FŪxŊVĀ#Õ_ɗüĻå ą˜6˛ü"ŠŧÜ=Վ8Xį…“äúXY˜ßBú7ČN}r}똯<LpķũtK w¨éOéŽ(Ë ļÁá7 ËÆOü7ȃ|’Ø6ōÉZ'PiĀ8Ō×â¨RĪg…‘8š•  g­Õ6ĘT´”ˇhe+zFiÖà ƒŒŖ4nÄ+Ŧ[°ëģÄc'hČUĘTã&ŋáƒC°§ē~Ry† ĮZZšŸ•ËœeŅیIÃ?šVéējítųcž#?úÅ.7ë^Ë ¤īCû -!JîF5Põ7į‰a‚33:ĮZ’ Iō›~ĀŧlĀĒčŒkxF,ĻÁÁ2°* ájņ‚ĩF‘zđ–ų•p­!9UbäP0.ĄPˆ[+æÖ*ÉĐ×0&ĸ+xųk@ķũūd`#qäš/ŠyЃä=Ų¤MX'ŲX~üGŠōãxŊS3m¤_‹vjNˇã;Ņį˜/œQZ83 :û#(\’š)_āÜLĄķyRŨgYįöÁ3†|Žš(ēLƒT;Ly,đÆBŊÆ|dˇČƒ€ė §Hī}¨’ĒP w{‰Â‚‚÷\’VŨŒ2âÕæ­Ā5gß6€nžۀ´LK!3ķB.VÁ:ëMĨ0­Íg @˙X…“ëtÕūļvņwŽyĒÕ p Ąäƒōųũf°*˜îá–ŦÍrŽÖéoœˇ'Ô´ˆ ßY_ėzķŋpΐl€$°ä#čפpS@۔˜‡GWn > DĀÅX'OéÁŊŊmJ[íÕSĻ~™†Æji iŸG^īzÚĸ˙ š¨ĶšÛEå¤ÔRü jØDdÃá c >„+úΰĮŗ û„˛čŽBÓUūōÍÔwŽyŌkĸ”ÎÆwGԇ­šŗĪžŗ`|TmÆķķ“ā˜ŠwŌ3[ëžĪt_œOōIfŠd3„pĐk€1ԐšZîmôf}ŖĀâĩLāõ“l{{GMֆIAŗ÷č‘ØÃ¤ã ŪJ˛_’ 2 ĩ•1ũ•o%ĒÎŊœÂ1r˛ÕPBĮY(|^~ĀĘS~:ėÂP%æÁš{ČC æŧĨ%Oķ´s}ėũm ÂwŽyŪ—ĸāĶ]×ėuŧ˙DŋLXxo1ˆ<&žA)¨4Öē5~G™™˛o“ÔHu)9 Ļūäå †”$úCžÛán×ŗčcĸōÔd@+Ŗēeߝ e gtõåĐōđweûEÂ]ÛGĄãøuÂÎæĻI‰@Fœ Ãô•>_fXs"+ĖÔkÆ4æé\z$ÉÉ@Ģ&Ē9<|ô-īæĶī÷éúÖ1ŋņå“ ‚GôÔ¨|¤BŠ&†ßÂfĀĢUģnÚäLĶhv™„˛Dà )Âũ1 t‹„œqA øé*]1ž ­/sĒņޝĄŪ#ėĨ¸“ą*´9U ļ?ŽF¯Ü6ælX؛Ņåd‡×]˙D7)ŧcō’~ā9n-­O_čwc‹ ņp€Āb,Į?‰L\HĨ4ZíŲųš}ļĪŪDŊNėwå ŋl}ë˜×>‹ą’R¤‚ėÁ‘ s­ųrypX.ĒĀ‹ą+Nßr.g­ØŗŅČ6›$W%æbvĘeh)×N‹¤x QU´'}(ĪŅdp=-n$ĸ|{‰Īúî×h˙¯’ŠŋwĖk{€Ú¨0&.›šûũßî—¯HŦēu#˙i:uŪO6dlkĪÅ&?ÛߐČđ/ÖX=‚”ÃŪ$Z0Ãöu‘˜ĪžyžSŨŌÛ"%ü-W'ĐÆC'O‰¨†hÛĻŅá6’ķiûJ=q°ŧ9q˛ĶÔ2Ú÷×yž¸ÛlˆģŸRL#ø-ĪßŊĸ{Ī’ĩ­ŗŒ(ĩú‡WLü= ž‚EĸåoÉČņ ÆO>Ž)•uķŊc^¯øƒü? ŗšRĪĶlįÁãÍ9æãũųyZUŲ5Ĩ†člĪIaĢ7ŧšBđú*õsp,8„ÎÛ9KPž”´J[PĀIžŧÉ$ĪNt_ˇˇËRÁyA9hPĘFĖė(YÕüs!ČYƘ¤z<ĻõÄÉÆ7\¨ æ‚ŧqˆŨ‡Ũvå“1ß‹eķĘĪØÉ…9T5ĮˆĒāu&j<,×_û›‰ūģĮŧī${YfįžÎ˜Ԑû1ßBŦŲíw:•ÜßL_MXŖĄnK'“ĶĩōyŖũ=ZŒ Kg+5R5ŗž%†ąščĖPdû]ōŧ4nCō BΕ˛ÕŪ)]0VmđAõUŽŲr‰m"eŖH-ČŪũŖ˜‡^ ļQ*c âæc^0~3?øîU–ķ5j7u/Įlč;´ôG‡âSŧŪ(ŲŗwŅoߟčëæoÖ÷ŽyˇåŠĻžMđø˛ˇ0šĮ %ŅíôYXE[ŠĘ7К­`3RŗfŒw‡’áw*•Y¨S°˛^bÅEœė¯`ųá:°øKN*<Œ3Ž*ĢJņ4cÕaŌĶ€aū,!Ђ,‡1ī0éÔŪ€ÔÍdįLA…j>;3Râ9ūâŊVÃUį`ËĩuĐåT— ŧ<ĐXí“§Ē¸]žœūÕė{Įŧ2h8ŒŋŲ_Ú-÷ÖÎLDpHYĨD.É돃5*Ôė=45ņXŠdP§åĨĨŖLŗŦš›;Áģî0SAŨžč%æmBâõ+#;†…:Ŋ—I'Y:šŪʎI}Ųļ÷*ØļPdÛ<úš’“÷Ę@Ŧ8RBŽš†­-”>‹mšŠ'%įvŸĪ¤ŧz­‡Ô]G~ŋŖB™ĀŅģÜĄđ˙t˙¤˙Zĸ˙Ū1_˜Ō‡U&¤šô˙øûŒ*čŊøŧNķAĀ´x„R<\pá#đŨ_ʃFØŊŋ1 ėäsõk0Ęˑ˜ˇ0ãĢ+ø]âPveËî#fvæûŧNøJ ą+ØÄmŗRĐBJ5÷Ÿīå2uE@ß´~úXų–-øHŸŒų$•’n{æ‡ábĨÚf qč¯÷LJ“‡¨ėœúfáų'ļOŽīķƒhTú/‰ķŗōû#‚E‰œ”‹ŧPsT —˜Ôē[x V2Vĩ{yPĻk̚ˆŊŦÚt°KxT¨ŸSmrŒlÆ(1ŸĄ¤75H̤h*:yS§7zĖ,IÎ"Ĩ2G&¨s‘ Qš°gę¸ĸ~ĸŋCŗÕ  ásØf ‚÷}š¤ZĘC4ß§ø˙5Ųa”dķŪēbÔedmŽž>É&ƒv„Ŋ`đÖ8/…XpúĮĐģ€ėCé=G !`T0õ“ôã—ZãĘ%äķšAķĪÜ @iC&Zí<Ų¤††"UūĶ•éŸ$4SāF]RšzšĨĒĒŋ]Ļ\ëCGĀ+Ÿļū×ĻÁŋyĖn4=U>œJū˙ų÷Ė’ 4–BĄ*…ŪáÚŲKœŨ‡ ˜-øŠã& DíëHĨŗÍC<ņ™’   4 ĖžĄüäLņŦQrųŠÎuæ‘Ũ C)qē)†0Čs¯ˆyÕ$ãĢ‚Ë yų(fxōIŠ7uúšyä÷á̤įôy؃.ÛŧŸ0Š”ü7Ö&ۚŠŊ×]χëœßŽfĀ÷PŋnWū5-ËoķķŌÅ(˜Įõ'ė]ßÂ$„ze­‡ AÁú]r;@ÍzŲ°Û0„ô#ąęôEämĸЇÄŧ ˜ļt‡s?ã× Ü”ŸHmhCoŪĩÄŨ˜Å<,_/Ā1\É= Ĩķ ė$›0˛ĩF+#įÍ;čYôŲ•žr4”ęÂŌú”zŸŅpĮRļ>ŧüĐ Ē~2wE…t>đCūĄ?zc×ŗd_ļžyĖoŨ ´ÃUõĀÁû ^aĖJ‚› ę­1c>]JFgI†%šKĨQJC‡ÆJĸ27åfá¨Ēˇ~Šn6`wmy>DtöÃķū†FO‚ąaî¤ōŊ'@°<,‚Éû`ɐ¤˜Ãöc>'$ÁØ.Îy7gđÆāÁg\2#ųmuūÆ@1Z4ÍĖuŌ븥QŪ[˛õ˙¸ųæ1?6p#Q_ˆ,aÂ~Ģĩ'jÆË(ZŸĪļ‘mđ4”Œ”"3a´Ô*č˜žzmĒחØ:—¯–&#Ryōf üc‡;°€yV?ŗYŖøp0“hf,'1 ŧã#Ũ94,u<\RkNR=čë>ŸņĢRŌ°Ų8ōĸĸȘŅ#ÃúS§D7mqÖG¤`v)OûJj ü¤W—% ŊĨ%“ûúˇxfß<æWÕqgģ@Ųį.\{‰ô-c­ÅEJ…+MŠ—Ví†>QĀžũú°Ņg& to´ôȝAzôČ'žÁĀ0ĀZ˙āõķw‡_ æqųHĶcjuHF4Ē€ũ'LŸŲō6Ąfˇ$†•ūŌЏ2ŨTĢ„öí@āâŠĒŽQ™ģÜ/ykP;>tŲ‘Õš:¸ÍDĮÎ×+i~ĨR-˜r§ ¸)ƒåë¤9ãúėĪižK 8Ž_Ŋŧ}U¸ųøx;ßiįåŠ'F×ĸėNK[ļkaĨtnĩ*E|ûƒ´Á3æŦoķ2zÍ,bĀ÷Į/4ūąh˜q3ÖEÄZđuĖVv#}'J™ZØiOëlƒĖiq;ĶŊņ" $/—dĶŌ› ’į3šĨ Z BĢŌÆPp—ÅIR¯‚3Sf0pļÁ˜×-ŲBTÍÛĸÔ×âũŸ'āļkžÃoO( bŋ|ÛčÜ@‘æķ9æŅ{ÔĄ› \‰3åk3ėЍ˜•ŒžHčŋ%Ŧ˙’īČ7ų:3§‹YĖŠk&ĒŦōūAŅv~†N0>C怄aėC>”`|gŨŌA$ŗez‚qŲ'PåHŲŽJbw˜ ¯Ô*“˜¯čë•%{;§wîp‹ļP *âÄH4gžÜ ÂäÚ(o‰} G۟ø ‚a&ā-{:œT–k<~¨Ī-7SŒĪ^Ë´6wĻ”ĒS[ģTËJŪt+{‰!Ļ›ØßĐ~˙KŖāß<æI/+ļTīŌĪ;ŌōgPˆÛüč<„M1ŪÄOA`LíŅ ˜.Fĩģr†tN¨ƒĐŖ2ū%SŸĖCW/ģÂF Ô< >/Åd—JĄÁĮAГāzywžeę¸ÜŠŧkr}Đ2UāuUƒiRĸƒž |g˙tĩ #9*¨¤S‚ÅV„E_ü¤Q&,HGÜ% īõ<•Ŗ—Ę´ŒM'3ŸZƒž)4x +…‹œ?H›aõŋCšųæ1É;Ūē2gKĐ@@2Ā÷æM÷RįN¸ŋŧÄÔ[”ÄĀŅk Åd‚×ãū NäˆĀLĒA;2…ęÂ@žk¤ĮĨ‘ęM°p4đmLķʛŧž%Ļ ßåßjJŦäŒņ4™%ĮŊŲ42€ I@ą?Sä `(ņÆ6ô}Ģ+ŲȆųĶß;n”oēP—D€|[&Ož…×ÉIBŊā— éH\FϘ7ôßÁõß=æW†`$4ÖWē¤bŋįŊ/\ÆÖj-îEsŠĖGctA䆑æcÎŖēīģ˛q)9UpŧŽžÕ;ūčöĀ'ŌB>WRŪįVåũA÷IEkŽ&€`{8ėa 9o P†G`_sG{ū΂”ŽlŌÅŦŪJ=[1ülĐämk’åˇŽ{ģ÷FĻüĄō5,LS—SŗÔOgˆöwrō’D|N!Ķûvm×b›÷~ĻĪŧõ‡ëbžøQ4¸ĪQg:nŌéŨ´K—”VąÔÖZ•OŠ—™™iČæ Ų}”†Ŧŧ ĮčvĮâĄ6‚Æîae×`Pą¯V Sƒ`ep*õt°ŗä˛Ũ°˛čĢ%Kĸˇ@MũĶËúîĢ6*;ûHō’›)ņ§”ûĘ!sHšŽË­€jÛįnúĶ‚~ZôĄ´lRĸ”a’OÆAåmnŸ˙LĨ˙ÍķË?#Qgõq˛Š¸ßr xŖBė9ÖÁâ¤íë\‚^:ËIO¤b=…@ ’XąvMėqÜízģ@°RNōžĸņnü‡Üņ”EîYįJZƒ™‰—ã'Ma‘?× Û%ƒl––†×‹Ö„OŪ¸üË9Bātõ1¯wžIoaĩė7’1ŌĀšßßËXĨ yĸ˙+ëbNÄŲ›*ÃĶQŪ-æ „âu›ā¤üԆcM¤ÔÂ’b ä@[)œg%[ô°CĀá‚Ģ)yá5qđ ƒčÉŲU k)úb(pžÅšpãaŧŽsāŠú1Ėķ8 †SķŊŊĄĶ˜TŽ/cÍčŨF ũÄKhÄ ķfqÍ´ëņë×É.;Äŧ ‰’˛ô|ČpĪ-AŌ:$”Q!`¯Á÷˙āëbãE%GOČ/ąSƒá-‡ãnYmíCėd˜mîÆ°å÷ŽÃwŠōüŌ:˜™ĖK`ĐU9zŠ’į-ž^Ēļ¤íÆŧÕ÷ģØ]œzįm8J‹ŋ)jŗ Ŗ§yÛå6ËPyÉO%Ķũû %(´7"Ēõ95sl#<ŋÚÔŪ8Š.ŋG=ĄFíĨĘĄû€&‚˙ģĸ”OÖ Ä<ėĖŦXģÜLĪ„7AÕîAwÉVj5ÂŅ Ö!CÕ5“[‹hV–ø¤Ą#!¸H0ėĐ];d[û°“ŗāŽ_ŲrĘŠģc q õË[yŗ‰wM!h4C6ØĘĶĻę?įˇPvWAV=˙ØëÍMKsKƒ@\MČĢ’E ‡ũˆęØē UÎsĸūĩ‘?Žī훯Ē[ė‚-îŠRÜ[Ęš™dĮE3¸‚á)—jäéHæíËĖÛr:ŦĸfiiíËÎiNb^ĒVhGI‘ÚļËŦķl&xÜķųŽ”ũ6eėv0Íß´’ä׀iÛŪŖ¯"9Ōŧ ˛ņÖį¸^Ũ-ĻæäīiΓk#¯KEqúZdˇĀÜΚĒOĸNģ#ŊöŸ¯īķW/–˛]më›Iá4Ú;\eFÚ(V'´™r%hÛǞđļôDwhĖČ˙_¤ę4衤Ša ØĻú€b‰hŖ,ˇ:d•œbކjsÜ8c…ˇ+Tíjü2b>ĩ:ļŽĘG jķŅy'ÅJŲÆRÆí\åF/˜^ĄܧbíqúŗH¯?KŖáŋĒ^u}û˜GžMĒŨA ŅŲ&6ŗ‚{Į:pShÎAGž1dĸ*™C ĒļOv^öHJՖĒ#å¸+€H‡‹đÍé´fL–•o’ąĒî°ã+ĮōŽá8°DqO€SĸyI)P2ãėF’įCšŦƒėŒÃŗGXŧwÛ¨)◮6t°ÖBÃ&čOÜĸĀOũ#§×ŋvĮú–õíc>k]ØH’´ ÛtÍpsyŋ$ī¨Ô_8Âä}ē‰Ŧ0Ŋ9$^=PNHÜ ’-ķ’ÁĀ&sōטd´’°/øčSÚ04ĄÖŸŋrÖ1ĨĶĻWĮŗĘ­ÁWīåíĖøÕWĻeO9ūŊÅļŽë)'”Cqt/v0U¤ĸb†;ēz/På֘Ûú{ZZß>æŖÖ…UģßĀ|> ßDēyļĻ ŽdpΧĘI IDATvä?pÃrŲ‚+> EŠ8äŒ;xúˆ ÷.ŠäaįHĘ)ūŠ/Ú ĘĐ9°ėw|ĒŽÃ$9:čĒĨTŸSĀÖ5ēH(ąąˇ‘Šë7:lŊā*J”Íīrč“ ĩ9ˆ{âĮãt¯^¯–ߘ˙čĒnNŨŲY÷)„Gį߇mî.ÖÄÕ6¨OļåÔŽT°\Ķ@_ˆŽ„ĐJʍ1o|ƒO,*KÁ˛N]Žûė ‚ōs÷>Üicžu]vu´u‰a–ß΃ņYEbu?k҇Ũ–{=uäđ^`,čÔ>Ö ö7ÅL5 Î9-¨ƒÜŅ|.LõõÆöŋZß>æįōū֘§Á;ņüũOúá 5–|l6jÃ(ŧ¤dŠj @%Ђ‘?D+1objëDį¨ļ[y°Ī›ˇúūžõ0{3Sö™ˇ•ŖbTSȟv[Æ6*ęč{ąËŊĖĸ*ÛŠžKQŋ ',•”Ü{wÎīeMOŲ"đîz•˜ŸŖA(cœ&{ø>ķœ]ÎãBå›2’´9u+už*WdōE0t RÉQ<[‡[Cž&„1fŲëöIß Ũ ķM88Ū?ÅᎺg`FËtĢ7 R ‡O€sā)Â ļ‚ŠÜÅŨ)ˆģbŗą)H?ā áËōKÃTdiÄĄV§^XÅMŨāņz•˜gŧ¸œõrT~^SÎ'ž§u6ā$wÜG!ĪĮSéS…Jü‚AØčZ¨đĀĢtĩŖ†•؇ûå.ˆy‚1t^9[›ī}›}ëúŒ¤l—Įžp*û?>–”§ ƒîJ}ŖņOžôō˯ąJWZ!8iÎŲ XÜå˜bļŒųî ¤ąÖŋ§šũhŊJĖ#éz—TŽcŨ„ä>ãúÎK”ŽŠũáŅ{ļ9>!¯bƒė„Ü%æsKŽå„vD `n!Īģ¸ ´uhܜcŪ¨…Ô|S—ļ5āķŨĨĶЎV3fQJ.ŲOÛ˙øúåĮnSh4*ŪdÅEĩŽž/˜â<Õd!Ct'ŋÁ˛v‰ü¨1?äxDûߗ˛/ķāī ŅԝđÆ$rįĻCå’šŊ jJ¸•K9•ĄEÎ@ŠĸnAØĪîu\‚w’ų "Ø~&Ū8oĀ!§?| ŌJ`$¸lËŪ§™ąĐö‰>”A• ˙´ÂGKP]B}Œ[,w×+¤û,ŋÁų;į‘\1ĮK0Åî‹|rHėĐ8Ö0÷ĩũ8˙:1/e¤`@’<)oãŅv¯ã­įŒ#1īB‹ŪēCŗ„Q9E$oĨüŠģ}ŠGĨ` –}ˆ?'  ;*9İGĖ• —É“B WBˆ%X‹ÉGÉ^vA­…ĸ•;ëüîÛg[dę-ÚÄJ“ût ­˛ՂÂā ë˛ËKzPq´<¯3,$l9ļ>%ô!¨‚ņoųxjŽnûP|n˙†sķ1¯ŊŽa$ęRín•XŪúĄ+“ZĶĮĮSœ¸ˆ™ĩ,öҟ¨ĀƒŌNīiTī’`“Ø L1W˜bžĸs“ÉžŽŊĻ–Ú!OđŽú Å29#’(§ÉŽ?Rš?Œy,”dQ%ό ĩ[ū\¯+ÉÖmqŠ_VВŌC–g!jUF5¨[õĄ­'8 õŌC—+oi#¤ÄŊųū1Ÿ) âã% 9ëĸķæ c#סô÷+ ]ī˛Á'L€yˇ…U­!JCî&ē"¯haK{ˇzɃ¸\‰ؒĀŧ˜@Ôíęĩ­žl9ŧîō‚ČīÎĐĒ7į0ŒnņRŒōÂúķļ‚]qÕG§+9sRÃY#,>T–ĐUŸwd9ÜlšÆßíĄ˙ŲŧBĖOé*(ŒqHøēä͖ė˙Ė=G!9 nCĮ^RžĖĸ6:Sfø¸Ā@Įŗ|!EyŒd[ų‘)7ęÂHhŠ R¸Õ]zŲ,[T Æ•×ÆMš$öåĨ9`ŒŨ˜N-Đ0ņčĖ‚,Ĩ‡~AG¤w AxķĩĶsĢÃēž9Ļ0Ví1?ĮI(-/ĢņԌíRWü[ëûĮü>ÅD¤d‚¯!I鹙uxžíî9Ī܍€ŒlzŦ ^ĻЂ7čŽĸ Ũ)V@Øī‚ŖGLÎXŨ†•F2—šģÍ/Ÿ ĨzJ‚ˇyÔAFs$UŲ^1yE_á6™å ôZ00 ŪyqÉŅ7~ų#ŨĻØĘj5qĘx>įiĀ#v/ĄúŋbĐŋ@˝mĘŦ†ĨšœdŅ`íÆF?ÄŲ1QĒÔŧcÃCā秞68‰§Ā∠$kaŖžŦí}•<]$Y÷VŠ`ķ&¨Ķy ôĄ˛"A֒ss‰ ‰?ĮarÉŋ0—/Z+OTL8ŧœāü™ø<ŊÁĨ´>p—áíųĢđÆGžŌšēS3ÍŖRķ} ŧĒi‹†k|Ē$hãĻÜOĪß7/Ļũ¨ÖĖÃ~āߘ˙øÚtã—á{vuØlũ†é÷ŧŌŽcr1] äuáŽ^G¯%ÔĻ\Qo§n|´5 ß'1-ģ ´#˙ā.qŽ=‘e%ũŖl ŨĨĸč(F‡ŽŦwî$o ķ6WNËŋã)Uz$æŅ¤\`ÃjžjîÍY;ÕÁƒöÃJ{"”Í<Ÿz-čqę™YŠÁé& ŧ|>ģč¤1<ôųkë%b~7ŠąJŨšJŽv‘;¸Šî”ķãâö‚˛¤Is…$%Zš¨ 1‰>¨‚ÁÃÛŠšģ‹HšŊWㆇĪEį‘ŋŧ €õņÄâ4ņfôcŠ>v°2a…Đæ§dˆ¯ŪĒ1cŲ,FljöžŖåGĨÅĐyXIęŊĪ{TŪŽ!'ĪhōŊōwĶŦK1”Īxū|pŊFĖŖ;áĄdk1ąÃĖĪo]RaÉ~ē`uú-,’Œŗ3iė6˜õģŲfPPT6xHYšoøĀIÚĖãčá”,yúc,S‹„]ô¤å‡ž¯õ"ƒ ûŌ€c`öJŨÁ+éúááIp€+Õ¸Xîy›nbvXФĨ`ė°ĀčĶ>6Û~˙ōK1ģČvËōô’VžPߑ|ūAØĀé)ŋyŒ7b\ŸDθ@Tߌ•ēë—WųÉ%E§Ô}‚ĸ/ÆÅzßėÎ'ZOu%…ģ=VgCK"âį#ĀcG6ŗ !O„w°ßąŽTõŖ71z˜_ʂ:|‰å¨(īeA3mø“…Û2œįė•|đJ†Ļd4ãuޞ8[`zy}r rjújU=SöYrŦHFKŪ}I'0á2mG{pé õfRęôxhŖ ‰ųÁœŲf …သ“]jwē+öâ¸đb1)ģ-ÔAåv´Ŧøõ¯'’ĄßÜs\:š ŌēÕŌ2/Ŧ¸ GœĻ|W[î-ø1]Č͝‡0ĩŗÄœF%ėŅc€:č7å1m‚dv otF “ÄŋŊCBÍhĩ][ä]"¤ÔÛæføöƒ+ãŠÁr~uøÜLŸ*ũRíŨ'~Wō…ēÆ8čˆē4|rŊŽ՝š˜˙_{Wĸ˜HŽÛ÷Í˙îĒ$÷E7’ $×Û7“! ”eI–J°É>iʄŧŠ"SLĖ m§a‡ķ'Ë Ŗ¨Ėŗ{š…'ۃû=ÜoEžōō5CĒފÁ˙áŦëț!/ Ē-ČŊC><œ!`˙é÷8]‚Ú+Z'č!ä…ôŊŪvįĻXÄ´†uÂčŽkRß>$ žŸOĩĄ'"—'LŦÉĒ—–x'‚_ũŽƒR8†uĐŠšā¸šŦüáâ3."åĻŦWąe‡NÄP*YFƒ||ᴉ‚´7r†7&9iäōĢtČXTēĪÁûôĪ™kw}Ļj šožĻ`„ųŲIŌ:„7rb,ũ'Mã>p ü K{@É7ũSx·Y“‰QÃ!"Š F‚ęÅ&đ S¯ŪŊÚl)đ$ƒŲ8ĶÆ+!ÚFiyÚŊ’á€Ō†xŨ%ĸâÔŊŅs+ĶĶļ;{õĒ 5 ņ¸xãčH FĄđxuZ85ŏEČP7r4ß29ÍŗŒ=9ō†´“>ĢÛ[M’Ĩ–Ņaß0ÅøĻp69pŌ§ŋcûūŧ įËNĶAˆųˆĀT$~έâE`Ž] 9Īü8Í}P—9TMžü“@Ž JEöô<{įŗh1+ž‘a'ãNÎŽËŅąŊw˜•ÇPä Ũ-æŖÉ|YYÛaNļÎÁˇNŊįš_ÂYfķŗŗzf…ú€Ŗ,–VĘ 9ųī Uá9 5f™H‘Oe@×eÅ§ žošÍVícÍhŊ9-ųAm§—á<}ûë|ä^6Yԍmčsß×Ĩ#ÜcíĄØ%Ëä(‚ÁsfΘŖƒĩ lĒĩ^Õh`–­›Íŧš%ЄŧŌ-'•f&qNH'G™5ŅÍŪ@ÔŪõŌÃŧ[ÆÖė8_:Ą#KÚÃŗÜž ß9Žh2ȸ6ķąļ7ûķé-|˜ė/žpŅ(\¤ŸėÛā…8ŗ#PT¸Öpž —|Ãđ‚ũøē‰Ī\-$ˆ0=J‹4z—)č„ŸĶœĸ€ÍĮÛķJ¤¸Mc. LĶvëŅ(ˆØĶƒ– WŠŪw:nëW°¸BŖâ´×4v}ĖĩBŧŽŨôũÚxd-¸R¨›÷øņģį}Ĩob¸AųâEæ mâ?įÄođRœŋp‚ü’H!ŦeÅo¯õyâzîYf›ę§^€€ôúU0Џ¸_õÍÆ%î‰ÆPdôœpEĖ$G_ļ;<Ø<,ŽîM¤'E*åSA%ŠÛÂN‘Íܞ0ŗŗ&Ŗ0=“1ôNĶ[ŗĩŋ FĖ.ĖßĨ•?î8„oCNc„0?âĻrƒjši%ū˙fÅoÁ+qžÍ`ÄĢq,ļG6Ūą€*á+XĨ§'ÜTeUp-wÖqĒ­gļ{´wÃÆ"ãÆÖČ"ÚS_1ęh4ŖĢæ1eēļŸÆ”kíũ#æsČnÕųđĘʄˇŠŸc}(Ž6ŦSKAŠ‚Ää?pÆG՛Îų yFHųĨaįŋN*p7 Ļ€ŗzŸ¸Ä…>¸Ą™ëzÁ´í%īî:Č|_ČŽS(x2•ŠÅ\1U–ĨęØÛ/ėšZ˜iæ`Ō¨K4–˜ŽDĨŦįPÕŖ¤\ķ”ãkoĄäP‹Ëë´/œĒĖ›éߐ§”÷›'‡ĩHĢX‘6;Ŋ;ëoˇ†9C¨įąĐƒR1΅;?ŒâüfÄKåj=Mwt<Ō'§ÂĄ•Ņl„ƒŪ0ŅqnĩēŪ­44‹AÕŪḐũÂęī˜ĶÉĶū4Ÿw;ĩJëÓų°@qk)f¤ûn]p^Ũ<¸q<Í[qå0/QŲ°y˙1Nö~4Í!Kāʧéœŋsúz^Š(Į´bįMŊ¨xAxėãÁ/Äyqm9oŪë —e MK§•¸V'‹ö*ĐeßQŋ>æƒgįÔeĻhÁ@QUIbŖLLCyāk,ĮnĄÎ‡)ˆ~  ĘË4ĻæŦ˛ņĶͤ]ĐøŗsO™ŌŒį“Šķč.ė]'|˛`?Qú/ä)Úm*Ę´v율đŧ7?…æû„éÖ¤åfĸpüLžūųx%ÎįÅČšZĖ\8Ā;sĸ_žØ˜<-ÚÃzoĐķq>ŪEŌčV2‰5ŲāĨõUˇd˜ JtĐūcelčØyrj2ĒlÉãī'ž¨øĩį ÷õÅfGéd?byq Š*OI^Îē–ī˜Aų)4ĨgLŧDš ŪOIo8Â!¨áīˆķØ\kú¸ąyÆæÅ,bģŽ™°Ė_íįSD:Ÿ=g×}ņÕ:ãTĒ(°Rũœ¨ÕĸpÆúņËĨŪėu$q?ÂJÁ‘c¯ƒŠ\¸ūmNüh#S3é!ļ—ëíî okČP^Ÿ7Û.Xį5`xīŠ~fü÷ ĐīÅKq~A+k4‘DŅՉųK*fG–Ą;øɚrJĄ,~U2ä-!ŅHwĒIǞ:^ą!  §ĒŨUi­ŌŪ^M°{#|ætLˆĶfh7ƒN¤ŽäÜhĖ‘zD=:>Ë.úėR€°C,íVĢbsx†h¯â3Š>?ÚøŲœžIĨg's^“ķ*Q<é1cæÉG› ˛Ąî<ŖoË:R>Ւ,Ē'u?‹÷ėÚčb§;SņŊķļÆ y ŸąĘĖĀ:o=Å ĐīĖyēũ‹rŪMß˛đ'§Žod2ŧد{ ž š&ÆËąk ,v^ĻNąąęXđ=Ŗ†ųP^BĢÛÎEe”r—íÄl:ãY>ŽŠåžÆ“Ģãb{t™(Ņ ŲĸĪžzŨ‹:kô$L“ŠnæVģ(][jDî4ņOZīŖ’ųr9ŸfĒž^zķ’œĪ°"æĨtOh¸3ëÔOĻî0ķ/Ĩö-x=ûĐĸzc[Æk`€Ø%œĩŖĻJvØF–Ü(ŠuÛLxÃļYyĮ/ez§´ō,KJ+4;ŌŌ¤ȚĪŊr‡ök>ģ9¨¤˙gģ<átšßų64@ °5ŠP×>đÃb (ÛģĖ@)˜ußNŽ”eōĻ´Č Î ÔfS~Ŗl‰Kĸņk' ĩë[ÛŌ2T<”Čp""c”RĻm;ķw|âü%æūͨv\šP6V!ÕYKčį^ÆŠÉH„YŽ ų„7€‘âžL9;vč#|•žq¤ÍDnäÉt§—…r’Å).éšNÕEĄęĮ‡Rë{‘ũ$âčÉãæĩš0Í:û):ØĄÎî š hO›;Tö.bĐȜÅēÕú/ĩ,÷ķ™õ핏_œķt#qe”JRĨá§( eęūSKėü­‰ÕÖR9ߖČÎvĢM+Žl×´> ^,[ˇ~ŠåjZ&“&ģéŽ1ļFi뛄Ƒ‡RučōēYc˙í0ĸņL~ÉN„då1rĢo\ŗ!šXŗÚų‚&Zø<Ÿ û朝Qn´h |šā¸‰Dߝ.iK196aöA3ģÕsy,R•ŠõjJS*Į -ÍZ¤Ŧ•ŗÁ2 õh+O&äâ7"eÚdĩé§ĖßÖ øx"4)Ŧ]ÆZ„ízŖĪŖ6ļ^jPÉԛʏdÚexĶ7Z Š×æüe!I—$ĀölęÎ[ų`BĶ5P|ô„zÁŸÁb—FQYåLŒAnRīˎÄŦWß0ĸöqūiĻĩn,–Š“¨^ĨŖČ™ˇRđø¤Ž Đ13ÄBŪ¸ ôƒ;ô´˜ˆķYÃęö h[jXßz"O>ßܰķߏÁ܎mÄ*…‹™"GW?ápÆį`J[Š}t*:ûkÆ\†ĸ䜉ø2s‡ą–Sę×å&ŗ>fú÷Ē Ë~•Q^Këʤ1Ļäl)= mˆ6øŠkš@zߥwĩôMSôšUEŪŊéž×Ŧāo*† ¨3gų÷ũÆOš9ōęœgp¸Ĩ\7JÅdœb"Į†ËãFO5R–}(sՒ ÅęŊa.Ė— ŗ§ĩã˜ŧPč›įīcÁ§ēįŽÔ:Qĸ˙đšƒĢ˅•¤j['ŽÕ<&…ë´ø{-ĶnMU‘x”4ŋi0^’ōûI›Ÿ:0ųx ÎŗŒŲ^§ŦŖĀĐ!eūŨœĮˆ7 Æ1ģS…ĢĮē'xŌˁ8¸UŨHŦ4Nģˇ|kʡĒĀ•įŠ}ŠĘW¯^aØÉa÷x HO{føØˆĖ‘âÉļvŽd+ļ6ēh,Õ<–leļšJNsĩoÕ[ģīÁy¸”5{Ļŧ˛Ü¤‰øæÎc)s?€Ä—<;÷]&V™”äˆļ-Ú_ 3eX`ëYyžîšV/¸į§qđņ 4ąžmˆrX—Ķ\OÃų,ĶDVšōAtÅaœŨŽę¤ŊĨũá‡TÍۃķ­g1tŦ!/ÃÂBFqīī€Ŋy/ˎ ĢÜ­‹ÛĞ,”–Öų„_Ę CŒ˜åéeŊÂEš\ʘ!„9 Īģ×Å ÖŪKˇŪ`Žške"˛7‰=™z‘ .PÛ܋Įւ@øTēįņx ΋?@“{9uĘŦQĀɏ{>õ›ŧ’Ä~Ö<ŗ—Îy/h<Ëd– wøĘ|§ŒdĻâĨ9ģMUöĻLĘwM¸˙ šįĐĻ9—ĖÎåsö=ЇPPįœųÚÎĻüŦŽĻŲŨqíĶđœŋ´h”OÚbŽ79H•˜ŪÎúŋöWĮũŦ°n^zĩWá#ü‚Ļ_š­Ü˙‚E*—7 Ŧ§Ä1HYU"´˙Īģø$–žˆ…æg!'e.<ãķւ(;ōQŨ˛ ­:!}.\VĪ?>ņŧ<į[-ĨŅ˜ĨĒĄÜĘŖ P9$rū„bU%ŦÆúŠŨÎ+6o-ÂËëúˆOnASNš8ŅFAMĮōąˇ{=×F÷\Î3í%$Kė\gŗįjā•]sv’°Z.ëfH$Š›Q?˙}ha.ÁR’æ°)s 0˛ž}Ž˙Q‚›'ŽĘˇ+ÎË,ƒĖĮę!ĸԞŋöōé6&4#’+ĻĻė‰c“ÖĐ?PÃeˆ¨ŠšõņK=_F$Kqū‚9ûā|žÄ@›kœīøaāņܨäÅ9ŋÔĖsĸÁÂ1/ĒmK‘Ąį‹%~iĒĒ÷˛fáŧ;*įĐ3å<(ū:+ŒŸŗķؙ F‰šMčÃ@ëŊ2Šlfš<}šv]Ú4.Įq9úZ’ 9—Xˆũĩˇ˙ãÉ9Ëį|Æ ×ĖëL~ˆãŠ.…yŲę^3ō‘ÆĖm$EŽĢZ8‰!Ė|¨1oŅZT8ũųvUÚ9x"ší%h†üč@ņa’ŽÛE*'ūDibü vųĘOŠCŒ|ŧŊ0Ÿ­pķ✴V +™qD‚Ŗ#ze _öv7?ë Mö[vČzšE–#ÎS`įTJx&t‰~֋jãë‡øĪķ‘”Zr~nâÁĮĪ8Ô,ZōGŨŊC&&įZj"įօ>]Ôé-8´ŒŠŧ\ˇ­'0uĩú9}Ū> :]:į+Es¨ą'ÎÛŦÖ)đ?Kū ^æsv~Ŗī…Ž\ķ>ŗĸŦ)x~æ(“ģčĩķáM>WŪŪ‘Ë'Ķ†¨qÁCņ6œgWJ“ųiËáŅ<˜•O{>ylä'rŽāÛTžœæK¸ČŠ”ņÅL†,ŦģĪSá2„OfŌEšFąūōKDđĖ*Å\žÕ“6JŸ åođ¨ u´ĸCgv˙Ž jęöšØđ߸ˆ–¨Ģ|* ,y“¯ob8@šqvĶlP?-qĘ8¤´EM]QX4 á IDATŌą •Ōxv§6Ēå{EÆ6ĩ3ÜÅŽŊ…”ĩĨ <ōuˇ5€Ĩˇb?¨¸ĄX×=h/ĀēŽy¯\9cĩģn§9Ĩvs˙RāŪ„ķMŗ°Œ”Āv/™Ŗ0¯ĐEĩ_āŨÛmS6ą›‰@ 8mkÄLœØ¤‹Ęđ?P+•“üüŋŠWÍæā •ōÜh(3Ŗŧ÷ÉEWė¤\nĘcؤĨ><õ°ēKȚøč6•Äáē=–oŦõõ­jÕĮâM8ŸÉdÂČG;3žâW/R|–Û9”â ŽAyđŨ_„CEō”{‹ôOö(ÔWáâ|ļėA% Æ´FßŅEIÃÍŅ/I2Šžž<ŅķĶ[ ķ¨nĩâāÖŗĢé>)‘¯!bʉ_rŊ<{čšâå|Ęj­@~.Ū„ķ"@Æp>ą':Ų`áŠĐũ­~ŧū5Ē+mÅaęŋ_ŠöÉēî'6ŒöFœ_°ˆˇ"9Å@”HžŸôšģBNĀbÂ@)%"9Éå ę6Ąˆ}§o×HēĸôęŦļp ãĸ{Ŗ ĄF˛õ(“Į\ˆƒĨtyĻøq΍5%K>tßZ­uî8(O-*ģÂr~ņ=Iq"&á¸G‘Ņ+°îÉX3ø&)ô œM×øú+÷4]zįoäyßsž_S˙ØåĘÅmÎÁŲP2ÔlŠãōgķ‰$L“KyšēŠĻĩņė”)įŗąråB°oƒwä|˙~0Āģˆģ=k@.™?§ī‰9(Χ‡ˆų+|S› žSé=˙qÚÎÉI{6˛W\1X凍‡ÂeŦ™.Ņ$[Īüös{æôSĞ€–bˇ%&Ўäs‹™÷Ō ˛–xLę'Ô=öxG΋M8Ã6O-XÎųn*u{fŌŲ.[õLŲ֎~ˇ™ō:¸*īŗ‹MY߯EM>Æ@ąąŗ>b– Ο¨…s]„ŗá˛CžĨÆq‡ą?ZC6úãî4œŽņ–œ‡ņ]ļāäôJ{ä‡īĖĘáMŋŗOMJSȝd˓"GHžsĖöû_ēIg7͇Ââ$UDĐŌ g‡ûE>a#:ŗ/>ˇĶēĝ°ßĘ~Ŧ\˙,ŧ įO“u a&į[ķË×d¸šēŸQqˉ2į-å<8ĖRĘãËqŽÆÂ_[Ū vOkųH •Q÷9o>Î8“ ¯,w´‘ÖķZâ$:÷ČK}œFü>°}(Ņw¤ŊŌ üo˜ ö:œŸ"Gîã{¸[BÆŠÎ}Mܐ¸ĒŊ,]VØ^ŧ+Ym =Ĩ]…õjErē‚ᱝčõēŽˇ5´æ–Ųû?š÷ĀkpAQˇz4¯ ļQ#Hæ09õhGēą: ŽŠBMV/œ××DĨ˜ĶîūMļ–‡*4),Ãņ‹YP¤‘W# ÔP.^Ųėd8ɀ)ˆŠ0e‰ö‹Ã%Įxí(y¨L/$§ČŅī­)EÄĨU‹•iŧįÉG)§“ŨqgÜoN.â/Åúäû™Pŗ+Ŗ%WT/i”ŊøŪ5įq×IÃ7ČŨPd)­}øŖæÉgY?™ÍnUæg‹Ĩįj+âŦQl}ˇr“T°ÎXã”rJOŪīũŦĻm2xFë$yø#%ģŋ¯Áyræ |˙.O­iŋ2„™Æ[æ ™W/üĻPĖûāgÖīŽwúܑåI'Ėv’iNŦ mąäZ‘Â,!˛¤pā6<‚ ÚOz­æ31mC 1UQ>;> ezÁ§aėi/ŲEÄĄOœŦ$õ˙uû ræĪÄkp~3˙øķÅâĩ”9„ß-eôŨĻ—‚‚LŸŲTĶ {ãF7"čN gîÍ mķ6W4q>;⠊ˆ^ibƒ—  Ņk ÁpąRR D´ļŅnr*ņ<đŦY^+á÷fVy7܋~—7˙fģĀkp^Žü•å“›[é›ļÉd_Ī>€¤¤AF­zČ#ˇ^îLˇÃßō Šŋ–¯\v{yĨĢTĨĩSĖ:õÃÔIx )Áhlô}„FÚfIÕ(Nõ‘{eš˛lu¤,š*!M×ė!1ŽŦČÁ/oÎô‰ŗ¸Opü}đ"œy8V;9 ’ß‹‡ĸQ=l,™ÎĢ•‘õDFVl ™ZrBÎZō8“Ô‘éTЛg’qķˇę$Ģžâ™ņ´@0!Dü¤>úÄĄj2ēØxH­ Ūb<šĒ”Z¸Ī7.,Í(Z-¤ä<Ņ]G‹ûã"įmĮcŽÛĻŨņąķÁ?ƒ&õÜ-ĨĢ^…ķâúęyņõgZ%õÎâŅB§Ģ9‹•Ŧ8õŋ’_ŨwÍgĢKšĮԁŪZëO]á8Ģ6rŠ:Ō`‰‹ĩhRÄĘs´žTōôzĐäĶŗwU‰<Ę'÷ĸæ6p^Ë +…5Ļč–qŪ5”ío5XžŲõãåĮu~-Šø{õ'>Vŧ į{$įĩ:Şōõoå˜IFÂLûƒŌyØ)‘ŅĨ–•ĻøĶÆ&6ÖĮ=ܓãšĨîēG‰§Š"¯ķ%¨ų‚đR˜û'–L†ŧyådĻڔZĸWŦ5ãHظR—#XZO}Z•kÜ÷Ę[‡ŸR Ą¸xņė!YI›…ãxCÆ3đZÁܐDAôÚTF%ĒįškĻũ,߁Wáŧ$ā¤;ķwSŗšŧgxÆî,} Ž ürÛ` Č Ö´6ĪZ­e%ōŖsC­Ô2[‡´BAIŒ>G~Q¨nęũĩ‹S=• ­äĀcĒOčįaäŨĪmĒQ“÷´—ÉĖÆQ.ŗņTÉLK珞ɕΪšû&xÚ/´ ķŒJÚļÂī0īč9‰ÚY͐,;Úø§kĐŋįĶ´! mę26uM.n;–üįh0Ž~ßū×ԜŊAŒIŽƒÉÛ˛ī‰[ŠŅDÛW‹ų™Ž:€Íbņžëxö“ĖĄi:Ņ#=ĘųZK‚ĮæČNã$ä÷ôz~Ú+ĪŠ…|j"ŋ&k ĩYŠ<%čŲx#|¤`čŨ<ácŋ9JwxÉĮšQíkųÉãF^ƒķ+åyW':´u¯ĮvZÖjGļ˜žÅŠŪÁڗRę‡:_x˛ŒĻ?Zė•_w˙9(qœŽ<6\-:^›Č8Ģr ‰üš0@SŧJÛ-Q¸)4(›xŠųĒŽä€šlöąđ*ØM›ĒÉtUš÷Ž^§<´ķû^™Æp”ĩ4ųkOĩõ/Áų­.5qZ!ŋį´-ķ–-Ĩļ CXy”9ôycĐÔę_Ãr‚ę<0#Rˆ2úe›hØâ{4Q‚FrŠĘd2jĒm…ĐV°Ú”†ĄąMƒ#nëČrnMÜ.[ŠŽņû,c%ĪŨĻhLģäĀŠŽ×IEß]5éiRžđÃŽsŽ÷ƒˆĘS9/Áųí‘zg}ŽPeĐ‡Ûgî$ą“A6{Ėk&D†âäf(-B¸,mʍŧæDÁ”É×WĄ5Œ Ėž€4r?´-øV8ĶcR0s5dá DiōŸ|5ėsI+ŒųŪņŸVađ]e<…ŅŽfŸ“ąĩj7ēeIįĪ1ģ6Ø ˙d[K‘Aj˙BãĨägŋįšYC›ĐŠ×Úkģ6|o } ‡ĀrŲĩWH0Äŧuh”w:5îzkÕ*ũ-ô?x1ĮŽ‚æ˜Ņw…ŪZ‹&“Z$œ k )<ōōxô–Z|ũ|å4šW?ŖP_á¨ôņhŸyũ§Ŧ‘—ā˙ãŖŊį +ô%8Ī&^u߅]Z.'ÃŽ ×đs$M’ú QŊ­HãR^˛ĀFk'ô&9šn -pÎ —ÖĪ&‰J {īæ8Z*≊^دĻ\1×vI#˛õ8ĐŊ+Qģ˜ežöIU L:gÛmĖ­đč‘ãĄŋ _‚į‘‚Û•ģxsĘŠč<ÛŌ—T¸3L<ˆŸØPȊF÷‡fõņÎØkpbbāß\ ɲ“…\nŽŲČ “Ũl`ŧ7ģŦCyMû[qÖ#Ú5\r(˜Qr"+î\z­ˆėÎŅ ß5o&Ŗ,õąo)‡Ä`4ūõ•9Ž}zmEoˆOždēįĨ  ŋßAęâŅtŊĢ%÷6Úéæ…øÜ*ŗ†Ü# }Éöę?÷臝Đá<č9‹ŋdqh-™0ŗÚz.5ߐĘč‰GVh|5Ä]HĨĻNaƒĒV1æâvMƒ…Ą—į†q曑ņl\B4/ÔÚŖŸ.“e_ ʛ Âjģ%SMÎ Bân ÉŌžĶ—ŗĻ%ÉWõĶEÆ"N!Ī‘Â3cI¤Ú{ŪąbnĘüžęa lÛßŌæ[|¯ÂųM.ۊ#V%™C6ZŠˆ…Ē;ĢÃbÁK ›’"Ŗ÷bÄŊ\§sMÂęîLũv$Ō›Á%yņ ­Íl÷ÍLŦęžmJ´āpR†ÚÄŪÆ7Ö¤’ ōxŦj¸¸ŒāyĸK_ŌķY _Gão™ú4ë۰ۓČ{lČŲĘR؍ˆ}°2ČËp~R.5NÃJ¸5–KĶ\ŧËÍ' hv*/hËŗČ<­OJδĩVËŠ€BeŠíåŋ4zj÷'Nd÷#õ^ēá{ø]ōC .˜›kVsašs1ĨŨv`O¨Q8!N>]eËä.sōķzĀÉąY uwÜĶevëå€|gãƒWâ=…ģ•—F˙¨?ōzœ/låŲŸ',ÕV•—æ)ÔO^Ō¯ˆ“kōã†äģc]΋(ĨŨöXГ۠˞ä\[øļž@ƒ~V°1ĐzÜŧ´¨]˛†oĸ”ˆĸxŦŽíÕēŠE5×õ+ēߟÜļKwʞ&ZÉ6|ūG÷fģ÷āŧøb™•ękâ{Vž-õûu”‡ē7¯Įyŋ&ŧKY9†,Éėģ‹Ųvä*p.åŧ,syI“^Iŋ8íĢëbdj+sX×ÂÉšēŠŠį\N?)ĒŦNŖõÁÁ𠁺Ák6ԁK6÷27UÜ9n”IŲķēXéRą‡=Yë#ī8΂˰ÚX ™]û"œ_Įgæų:—O´įé_ŽķmĶĢĄÍB4DšĢGŲ¤čĩī­Hgę N0-ŠĀŽ47S/Ė×Ķ•­gu¨&ŨÜËkÃģŌ+žģŖæĨ˛QŪ@K”˛‡­&ÎWŅÎ;­Sæ ák-3ÖÖ¤÷`áb• M$´ŋô᝴Č%õôŲaĪ_fbĘk‰ŖU›´Fą’%û.´ `áå×ež#/Žgy9Ηk/‚Yč¸Ét åėD1Ŧãü"D°õ5é0fģ\2Š„c†ĐŠŽš^zyĻRv÷ür •œL,™wˇÚԛkWĖ9ÂŨRĒ}ŧHÛ”ĩE¨žŅǃ˙„fđƒ mUđhP ­0‹û‚ÉÉI9éĨ ôYeÅeM͈Sæ"3ņ—Ŧ?,ĩ6ĪJ.Ŋį7.ŧ‹<-^™mËž“[ͤĀ37wÉV­@0Uđ>s*^{¤ ÂcÉĘ N†‹{Ø}‰HHŠjįpAt0yRÕŌ.oũUr‡ˇĀn&ÎxÎČĀŨu´jnJœ&É‘‹f“åRЇĐûđâYŠĘëĶ Åū^Žķķ1¤ršxmBԋģąMąĪDPŲīŗyEk´‚7WuôPÆĶVō2Ž?äS-Ô,ųˆ?įę¤Æظq|ø=K´’~WۆJ[0ŗҰÔŌ(V‡Đ͇EđÜj‚î@S84Ą'Â Ņ—¸V”>K­å¯Ŧ*Ûãå8ßĨnŒ¯ C6ˆ‹‹ēüŽ,…ŖNī–+‘ö&]d1 R„hė}VsĮ”g?Å-&†Ë/ëėø[1õâ`t‡žŸ}nrMĩ‘Ú. jHųZõœeü8ã¸Ä€âlíÚ§¨<\ã5€’íEޞmũ–ÖZŠåæ2h?¤Đũzœīû(>eĐvÛĪū]Ŋē›v˜§ĐPŠåȁ7Ž2yΰĸŌ{ĮŠ’¸;ünáƒyE’ 6úĨæs*­ēwž‚5ŽÍí,\eĀ~­$öŗ\÷ûb˛8;ČhĶEōĄ‘.ŧũ@äĻë8ą2Ž÷XRKáÍŗ\ÎĮÔ] ŠŽŋ–ą)§4ã­Ū¨ŠVņĮ!ŧį9UAß{ĩ8G'j|×ŧ—ÁŲí ‡§8ĖJqfΤ’Eˇi„Ôub9ÍųB;I¯×4.ēī)ĖnĪ÷WƒĒĩŧ}ģNōaž:hÍe­î!‡|$81ArŖFotˇigã Črû¤De?Šâl叞¯Ėm<@­î†Ō&NÂķ¸;íôČ~ˆ9ô¨$ũ r^ė:gÉÅa?ųlGCŅYļ\CŧÕÄ­.vļpåš:čeķˆ)ÃE[nŌŗŸ#Ükw aŨMiäÚˇ]ÆGqxĢ{1đRęī­íiĪNúŪlšjC.Ôķ8 …ķĪŠ0kr¤Äŧ˜ōŖčŦÉį’…Ę(:ĀJ¨{[Š\Œ°ž§Üūŧ"į¯ûc§saŪĀ“8#ĸ̊ŗƒ5ϰ˛˛p‰ĸBS_äġĶāåzΗ'ۓB)Ώ˛‚m×ĢŽ&éŌŪz>!ũHUCNǏ¸–f~Lږéō‘D˛ŊZŲĨĩü֛˙~ȁęeŊÖMzr=ÍōC’3ĒÚYϞ>6Q˙’œĮ GSFÍ{îrūÜAõŧ‰ĶeogįCröRënĄ†§ ‡ÄԞ…ŲMö…äđ_TÚëzôŅ$š> ÖŅ{ņŅĩhäœéž:¸EËkDōũķOrmębČ·ē :ųëæ˙ëoæÍāÁåÄŋŽķßøv娯œ„Pĩ‡™\Ô[Ī%XßŨĖ"ļ~â#%Š!ãé5ŽģŦi[YßGŽg›ĸMž‚ ͜'ƒMŠĄ—ĩéb"%|ĻZϧ<­]ÎåžtēšV˜'j {ōt/ÜÍēyšëŌ<Õ×M›Ÿë1—ūë8˙ؒēk”>šĄ¨ ŧ$ßąĖŽ #{…Ø×0סĨ^lž /9Љą>&(ōLœĒ™'Ž}˛r`š\5ׯ=›Ē÷­—‚ÍRęk2Ÿ¸Q¤ú"wŽĶĘn*e—ŗŋ¤ŧxBãü“ûôĨú+ˇbLrÁP0ÉJMW ÂėMW36ÜūÖeš žų õ“ũ_…œ¯÷ÚÆ‹ŗMēr 5ōírBQo<ī˛}ÎwSŪũļvŋŽdmķįr˙í?ę‡^Ō×ņë8˙tÔ(yž„–íĖõ/‡ŧæe>bų•nץ›€ŦM iKūÅ8—'Ÿ&Ņöƒã˛?1úæš“õAŠ›Áų ‚×ŲûåCÖĮsŦβ¤[C6g›4§Č…ˇŠĮęiĮ¨˙ äÚ|ę2īąĒcœīh5ą>ßM‘™ĮcSσĶÚåĪ×ęøÆŧ’iŧR¯üúÂwãv’l%y?—ãÔĶCˆōˆīcpū7Ą‰ėX1ĮT)!ū+˙ Đrœx9Üå”ö4ŪāüĀbŪÆÎTmÚāüĀ bqŨžw98?đŖøČaooR{0đ-ø-z å^ƒüÄÍāükâÉŖøū?ö×ۙžRb98˙’x¸Îé÷cs2ģĀžIŲĀKá~3Ŋžf­ļũ1'„ƒķÄ=ž‰~ŧÍĀûāؚ8ƒķŋXƒķŋČĐÎüB”™ëŖÆlāM°„žŖ~~`ā˙cp~ā`[YĶ|œ€ëāüĀ/ĀļKjæüÃZÖįžŒŗjɓ–đaį^wļ‰?ėõį€ō˙ķę­ }›ŋ„¯‘u퍖K~PyčāüĀīôZ#Ę=8?đCøGĘœžÍĀ+Ąž0úq Ę į~öœz•¯´Ŧšú5õÎü2´8kæ?ČŅœxîęœīÛGŽ=ę$vp~āø7įŖ“˘ûĐss€7ßąĶŸžĨœÂ~ vÃdœãŒėVâs‡m=Įiá{ŗƒķ FE)u>t! Ąo)Ļ”dņÕoJÎ)^ß1#íJNžTŪŪÔ' ^MZâ!ÉúŽwōq¨Vxpßep~ƒŽa,ņ؜>}6gu™Ü}@+ŖY÷ŧņü˜Ũŗ˙.ÃqŽBõ†¯y$ĪĄœß€˜Ú`ŅõaW­§C'+†ņøhŽŋËî8QĶņ44w=Õ;LĪ҇!RvŸ^īwsøyëöa<„dÔU>–}Œt2lž\ž¸0 ŪFUĮG´ŖMÖėŽTwõe–“éôGÎŒü¸ũūûđĩz]eM{`{œß‚x Î×7†ŊîŖC_xâßõīÚq˜ķ €ųʛ,6œĢÆKāėMåv÷,ļ/ap~2¯ĻëŨJ…ĶŌÜâüEæēúķqhå„ķúp=Øü9­á;pö–ęŦÅũ Îo ŲŧÆŖ‰­§fšwōmŽFøČųŒ˜ā¸e×SÎ_¯/Lx Öī‡}ŸŧĨ–ŅÎoĢŨŌŅŗåw'ÆŒCŠķčgŸĖ2NŠį_ŨzfįÕqOiîĖÍü\ĖQ¯cUŦr<œøN ί@ÜŲȞēë_ĀBĢŗĖ ĄÎ§ëƒKNß'Ļz_‡ģgœ?š‰ŽÂüÁĩ‘÷nH×än "­(œ_ļ֓*ƒÄē>ËܘIˇ|ˆgHlpęaÁ™osĘy^{'¯ôBhdö[ŊwŽōW18ŋ9ÉĖ_`‰ų”*œ87ޅ°'ač|û•ũ?#ōY€páK Û˙Ā &íąĖâŸ\Æ‘^`18ŋ9įŠ—Üe9qn8†m'ųyøķ×OÃ_šģæü§Ŋúâ=¯ĒŋËLæˇ‡˛Įe‘m÷wÛÜÜÚã[ĨįW ˙rōg%˜ztܛ3N‡(–˜|ÅíÆONOveÕĶ1 а+cnq=¸ōeüzKã`jwķÁ•Į˙ŸQE78ŋ@Ō*‡ã(܈5Ģ`R?Šō‡"xd&y;F]Qw6ŲŨ] .ä*’F~^Âë“Ū߈rĒNŗ€|ĩā_uôÃ>žĢŊŽmncb%HŨؖnqęŋCõÚ&ĪšVáŠļrÛUI˛<ũ>™(`ÖfŸ–ŦN)å؃*ņP~Š ū‰k~Îū58ŋĸ”t˛ĩzã\ÄÍ%xâöQicø˜)ĢiWą‰ĩJ]y19øcŽÆR#ãōÃh)ÃÔį{HĪnM~pŠrÁāü÷ zc¯Ę¤Ū%ßYBĐx[xŠ_ Î< -Úfú/ˇ”' Î<%×ŪõĨۓwÅÁųĮĸæ`Ų!vŠwyü߉Áų‡#į\o›|ū§6 Î<­•FÄ?Í>{808?đ$”6× ˇįÛö-~įwNŪŗŨģ7ÃŖ8ߒ é^ņ5ŗ=ŪtęPŋ>0đxįå ]k¯ûüO`6u‰MˆjlPS 1eŪmą.§ƒœZIŅÛS­ĒÛēįeŸvtú­xį‹füûcŲ) č9īĪĒV€fŧŨ$ãŧsÎ{gųÅiųüŌiáŊí}^7ĖOŊŅ~…œJžŊW¯Ī¤€~?įĪnņËčįIDATC( —ėÎĘs¯@ļ}­¨2sūRã™¤ØˇãáâĢQ8(ž}uŠáô§W TĢŊõš•ķ>Û:_ۍŗT}Us—ņb<Žķ^ĘfÛœ;·c?ęÕ'ŠÎ”fžgębß 3Ųˆ‡ž–¤>^æwiė"6G‹~ÛÄ­&Å*œš–Đ˜ Nkdäębŋ~ôcYībuŧâs°ņĖĒ,ÛS ü1åÖ°cļÅjú%|mōɇ˩_ú ņP~˛N¸”įū:Ķ›D؁Į'Ô4>:3Ĩ<é`-},Ü[”j1‚Ē?īͧ™cąĀîd\ə7 0•›TũŧAģl‰‹ģåéĄĨsÖ)îŋ,­j^C>(ËčŊ]¤™2mHVΝ—|{YtoúŌ䞾rŠ.Z ŧB3Ũō•†—.m4É`ÃĢ“fm땨ãœl˛‰ķ†¯ ŸH` XNdn#œĖú ÍfÖĩŠ`( ŊÉÂĒ߲đØFYŊéÎ7Ü•Ö {Fô8ßĸ1Ā–Vuņ–wÕ6ˇūÍ4Ú´Ŋã5`]ü}ūã8ī8‘U…/uöQ:į#ÍLmˏĻw1:ÆĨe}U_å"ÜL& ÚúŨŌ"X‰ŪÕ8wbÃ8잴.%2zsšá÷)š,{Ô˛š4^Kn~ŽļŦ,ĸ×úU›E‡õD_õâˇĀIËô*'ŪÂyÎF,^lmôˆ@ŦÂî@ī5Ō¯ y†šb¯ĸ.˙"Ÿ]Ē|ˆ[Ö3v4å×õO/SėŧŌâиĸŠ"÷ĨĀäĐōmÛ¤ÍØˇĄéē1brt5iÉ5ŌĶÉŅŋœHæ[ø¯ÖŌįTéžĒÉ!ÍrlŸÄã8oļŊĨ´ÂĩŠŗIÖbY|gQ{!˛(kāscOœŸŽ9ß-–’tÍúđ1ßyrô-<-S¤lq/ U°PÂ]5t1Ūģ5īWņ]͞다-šÁēöoĶfö—åÛų:éÅt­g¤[x‰HÄJ¤™ÁdŸ™|Äu8yđ—AB~Ū†ß#Nâį‡ëÁū<ß ¯ÜDÁŽņ|@ŽR‰oƒ‹/ĨĆĩ#öÄĶÂkąĐŨtöÃLî&í4š ū’3VļJúŌ°ÖJĄM™œ(ZLô %$Ŧ˜čĐ#Œâí'Ûß×÷ø0ΡĨÅ?#U'"…ĪEČVaŖl–ˇrÅļ­dįø•ØyŖČ!WņSSW‰ƒ…KNLįÂųL!ÁĘdåámĪžMjÚ´e#jpkŽĮė”9:ˇôÆO"Â+Ŋá|ZžgqaÖ§īáīâIeiɟÕT¸uõĐ[UŌjžđ ži—jxēŠ1ņņ>Æ+~l…WfyiāĻ–í^uœįŸßËė€ááüNŖŧІög}8UiŽō&+~RɅÚ/hbãākŋ0Ößšđd§Å3ũ…xįƒČ4¤c"…¤´ ŨqŽĄ2ÅpI;.}ÕÚĶŋb7c‰´šĻH_|˙BEúÁŲ­43Ëđ-|ŋbK Rvvq!(îmĢjX™ā!/œw›¯Ã{<͆ķōÕaIõ2ŨÛŦ[Čjį/ ——°}ËBö…ķIŅęĶg?›s"ø ōD^drI ‹–vEf5Yå /ИņdQÖŲa^öAÜ+gS Ų}ĮÛĮ›ÁQ”ˇĖöÄ[‹1׎ˆ^#š9f‡‹TäķÔëÍĨ˙ú*,bįé;×ŋ°8áAœOũ U}ä!ą˙ŽSü‡€IslĮ?ũ,/cj3ŗ€†•ŠU°7Į‹ØPgžĘ˛ūÍ`?×ŦFÃ_ŠĮŗ¯{|ÕļėØhJė–—Hā6~|Sō×Ũ?÷ôC^(×Ãzo-3÷ĘúûĒįWKŠs$Âų`6ŲIģŽÂÜãÄņYs’)tOĪ)–iZüž‰bOƒA• /ž‰eĨ֗˜ŦH˜?'$jȝéĘ8ô‰ģį|–ˇĮNĻ$đ7­ØëF—dPŧ¤úsĘŋö­/ōn,ĖĖy¤ĩ~aqƒ8ŸÍæ\Ŋĩk™ėä}â6÷[åÂKüŦ§!:üŠū˛ŽŋŠD^fĸ­ĸXŊōÄ#)จ´¨~˛E;ŠĩŽz§Åaß 0Ēn™šY=ėiqEú9Ā . HķÁ"?ķÔ3/ũ`KÉYÃå"ų Y`ĐŽĐaąúâu”|´mjÉlj‡Zg’B|9 ábˇÛGąEŦ„j,—Œw|NÆ;LœWĄËĶn[ û;‚ģEʞž§Â#Į‰Ūí– oÜøu;*k $ž š[ô`1Ũ‘ŊFNÔŠU&äpĸåģą?@ĄĘÜŦũUÄX-qFũcÉņ[fšnžÂL;ŨĨ[=g—K?6š/‰åųœĻ„\ŌŌk_vĮ°ķ/ĄŗåŊܒhOBĖŨŊĻĸõlí`üûr)‰>NãE_(wĢëÖÂŅj”ZĐŧ,rĒûŲrļô˛mŲ4uk‘“ĸË Ųøĩŗ!+QsJ¸ôBî>ũ2ŊĖđęš|įp-9•.'E—ƒ/ÍĖaĖc)tŸ…s͕ķŊđJ.MÎ\#oå‰ĒA ĸ(¤''ô#i´ßv<û;zF>ŧ9jyŽģËŲĖ*RŅōÆ-HŪ.”Kū\wģ¯}\Ot{rßŗ{XX{Ŧ…Č7¤īERƙ…l=ļĶŠĩÆĘ/KtPŗĸ5ę*ī -ômq›ë žâ5ƒUÂ1Ú$!œøũU Ë?Įų?1;īCØ…ŖšmjS‡ŗĖĐ‹ë8ũ?Î'>W˟*Âaˇ4ŗ@Y˜ÕėĨûÕŗĸ`ãų娈(|žƒP´:)ôƒø{œ˙ãhöTü f›z”æŽâ—ûCe΍ę¯{!Š×üxŋã0?į‡18˙dT}îšÍ“Ûüt(;SˆPÃ!’ĻåúO@Ą2>ũÆÄʃ18˙Kā{dîσļ늠1‡¸ę˙š+õ„Žŗ_‡Áų߂ĨPųøĢâÂífÖ¯ŖR ũĢí'ap~āŨ08?đnœx7 Îŧūįß.›6đHü6ÎŖx‚˜ ŪXgĩuÎãw–ūiC !Ļ, Ÿĸ§”“ÔRZ%`4ū`üôģų øëĮÖßßÆųlŒķLˇ(Œ$X‹?ĄR Ĩ(JãIMW8Ū€Af´~Đ GˇÎ`Ņ`šr’ņ!ÅsIôī€ÕàTûZDîFÛũtļî¸mæŖYĢⴂõLWPņCŽ)ŅE§0í­”Ė‹ŋ`ĩˇ’ūAoīoŌyzsd9&íčF”üåčé^ôP<ŠmCÎ0/Vņ„˜į†įG'•Č˜1#]ҁ?›ŋnJ~įˇ8Øi|÷=OžōOö>ķ×å;ņ:ŌL7ҟ‰ū […VÆŅŸúzq܂’^nZ{ŠVôAx É2´X‡ŧą ˙G KŖî7úÉÅwrŋã1ƒôˇ—Ō3ōųžtUŧŦąJŅtĀë[)Yš÷^îÁ¨3KpķáoåčĘđÁŅ˙õOę˙fÎ?0qRŒ<Ltˆ’ĶD枌Ö ­&2Š1$˜ÎØÂ’á¤-ČGgɂ:Ŧ"úĪđĀā-‘;m)ŧEYˆQšāxį .0`vÉͤ•@ĪÂwâßYÚâ|āëĀë˛ß–aäąķ°?‡baē\Yũ6šĖî]‘ģÖVįÚé ]žĖīO]¤ ĄĪ’ûč] Ŗā#=ĨÅÅĻl|ŠŧŅō Ļ ¤%틚’øWŠ•} īÉųģÁū™N^ūŧnÕ¯ÃāüĀģapū›đą ŪĀ/Âāü÷ üņ¸î08˙-8čü^ ΃~ŋŸ=#øƒķƒķ߈Áų3´˛ãØ(bx) Ο€E›fõ ÕaHSvŊö'_ũĸōiŌáüØÛC(ucÜļ<íĒ‚øš <áy|äņÎū*ĨŒŋÁų°šQ×`ŲĖk9 ŋžË‡­ÎĨšoÜßŊ‹2ÅŽņ=kv'÷īJEŽøųų¤Ü@wQĩŋ0ČāapūyšĩŽđĶ!Bm‘% ķF•ø"s?PƒpX#5čū|PŖ%˛!‹ä<†0‰zÔ^gŊĒlģĀYŊ9árāĢœ?Į<…‡įūžšõN–[DüQ2ƒ¯d6ĶōĢ8áŨÂyˇ”|-ŧEŗ˜¸ęKēĨߨ.ļ<ė8OūÆ-īæģ18ŠÜĢ&3÷.WÍ܋J|[†FŲi—cš*.n†§=­™Į¸Y vË+*ž‹Ü×Öíy*ŸÅāü0÷†A8 6™ŗëīc?HjnĄ)ŽQ}OV&lÛĶĶ*S¸ĶzÂÔôâŪ‡uēÎ:°Ī8Ôō¤ņ—§ųĶœ?Ô”†ŠNĒŌöpU~ocÂĀųÅĄA…&×@lÍģ‰ĐhÆá!‰ÖđÖ%ã3Ī-zųmd1“,¯ääüöáoû]08‚ĸ”ļŽ\‚ÁœJŖ•Û']* ĸ¨ãĻŠŨØĢm1ō*‰TÄnŒīř5Ä2Ë÷ÔTw2l5ĘįŪ ƒķī†ÁųoÃQ˛œø.´88?đ^ø+ęƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7ŧį+FIũôEü"`\Ûü+oęujņ­?Ģ—ā|ą;}°KtÎŽW÷ëŸŊõeūũuÅVōô˙æĶĨˇ#ŅDĢ“[ŋŽ’Ë<1įƒßŧĶæÕN| Ĩú]7ę"圸ˇü.ü8šĒW-_rWÖkĐ"X €Ą'Ķīaßy͡,…Æüôē4‚5j~Pž”5ᒭÖ]vLDųíGŪuģ6Éh)mĖkÃDĩí*ËÁiŋüoɞ.ĸâÁđĨ†šÍS—§BIŗ‹fSŋo6}ĩôĖN˙ŨŪōú õĨ/Āų"ŖėÂĖų,ãņáØM§EšYéO(›Tļ+Mš™×M‡›ÖõÅîĻrĩ{g1˜gFûkÍĘŌyš[P'OŽW ĻU ĮL*VŪ ëĻ^[ßQéŌ+™öųžUqãI[ß:.né˛BÃVøWģúīEûŊÚā|čĘŽļ›€8…æÅdĮ=Ģ}ÄéDq€žÄlDô.hōÎiÃų˛mÚ`"Š^ LüNųI_ËŅ‹ģvY†š ÖeēŪİĮģLT›7&w[ö„Đûl7>ģŪôŲrzúĢ”§ˇ÷˙›ŋĪų2]õŠVWsguXIÛŦH 'ĩ5ˇËoĄWŗåXáūžõŽ~û ŽÚiëBĢ­vM=H%”ŊeMŌ•ˇÍOvY‰ŗÄ™=UP#'˛Ü įųĨ7Ģ9Ŧčē]äuH)ü}ÎĮé(Æaú-f• #C ŗv~ÁĐĖmÉ@Æt§4ώ­0Ãag„ķîâaUyßEŦžh*dß<ĻŽž“íá†;å|$‡ĘoDC‚™•Ôôܕ#Šu IģwL‹^˙]3˙øûœ÷GáāÜ}†´Ĩ‚…_Æ(들…ˎ^)(Ēķ›üŪ–ĶdĨ/YíŦéŪĩą‘??EÁŊĢwÛôQ\¤?čÎüddĖO4‰´ßH=9ŽßW=c~{]ga~sëÅQė[ĖÉF÷Nøûœ':‘5oiC3'\v;ŨÕ¤âŪ é¨,'ŋšŦĒ:)īôÂ4BÖŊ’ŲęXĩ~{>‹;x5Ē­6äæ´Õģī˛kn“ƒZÛÎiš‰].Aŋ­xČKp~˛Ál÷o2åšAzfĄ( Á두—.”Ŋ…ščá›ĩĄ÷R“ęʐį÷ĐC͏>ØEŖVî 6jĢŠžEę튀ą6îÕÎÔf<=ûë‘÷ˆå>qŗvŊrŗ2ņä4Xxü}ΧyĘM;Ü4“LĒjĸú{ę0$ĩ:ũ ũŊ-m×ÄQĨ¯ŲŨB˛üë˛y!Į—˛LÔOhˇúâÆC—%§“ ×ßÚÆ7ŠO—¸ŌÚczÉ&ļŸøXfŋŪ ŸķM+¸¸f{ŪÃîųâ~pęģ2ņxâĶuŪ"]ĪlJ8ÃĄG™U_l¯Vŗ'c5›äũĨ€t)Ŧrô|ÂZËjލ!V’ŪŧĻß^œšhNm*G#nIq6Jéinķ›_ō4hņ,_đŧpZø†¤ßÅßįüĨ]ÚuķqKÖŦ™ÄĒųâ xr•ļ¨Ö9ŗĄ1/ Ųĩ"w'ų—påˋ%]ßĪE׎zļ+ސsĨ5f.ģßŌ+ė…7°ŧ:˚nÍ9‡€Z‹­NŨŽúŧĻvŊˇ¨áeņœ?Į/–VĮQéø`fM ũžŠlÕqč÷ļžë’RÖæĐæŦu!ŋąŦŲYŋ•@KŪnëų´đ æ„ĸ!īūjíĀoĀËr~`āįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?pūˆ0ßœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ¯Íųö'xmÎ×Ņ6:pĀks~`āˆÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįūZŽ?} ŸÆāüĀ˙Bûé ø<įŪ ƒķ߇ömŪ;bpūûPĘO_ÁĀ=œx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŪ ƒķī†ÁųwÃāüĀģap~āŨ08?đnœx7 ÎŧįŋŠšú ž†Áų/ãī ģŧžÚr?8?đGŅžēŅÎüU¤/>npūĪ"ú7×ĶžÍģĄMæÍ9˙U Î˙U´8‚č¯ap~āŨ08?đnœøShŒ˙õƒķŋ|‰õ"Õë÷ØjąëōæßŌjN„œ ~Ũji j-ô_šįÜ˙ȡ%kú ¤ŋ×´6"caFΏ+…˙Í7´Ël¨AԘ sĩ”‰Į1Ä蝏€ˇÖyīŖ˙Öč āgŖM˙‰˙´ō€˜ŌŋÅĄįĘíķ•ö…īkF mAƔ DGF…|`;Ë7Ķí LĨ[ˆĻÁƒ¤Ä= Ké˙ŽŠ¨V`„ĩjf1ßeú:čųéŠééZū}:;8˙+PōŅŽŪ´ŦõĢIƚ‹¸ė'đ9—!#Āhbļ%›ĘÖT˙/>´bŒŧ‡ø}vžŊ…Wųs(´¯ī}˜ęƒüpmƒa^3ŧ×î(Ô™ĀŗĪ;?Œ~‘éŽđ ģÁāļeÁ˜…ֆ׃8oēsķOC˙1įؐmĀGöÄũdøŽ.°b¯L$n“ĢÉÁāl2Ҙœ‰R”<ōãœx âöÎĪd~R ōmŒe3Ÿ?:vœī64¯™É_ĘeLŲL-,+į )´ÕhŲ­ŪĶîpw„ÉĨ°‘iņw9*SũģÔüƒZ0É?ʰßvčÅ ü;“šã #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "array_internal.h" static SARRAY *BuildShortStrings(l_int32 nchars); static PTA *BuildPointSet(l_int32 w, l_int32 h); const l_int32 string_set = 10967; const l_int32 string_union = 18278; const l_int32 string_intersection = 3656; const l_int32 pta_set = 150000; const l_int32 pta_union = 250000; const l_int32 pta_intersection = 50001; const l_int32 da_set = 48000; const l_int32 da_union = 80000; const l_int32 da_intersection = 16001; l_int32 main(int argc, char **argv) { l_uint8 *data1; l_int32 i, n, c1, c2, c3, c4, c5, s1; size_t size1; L_ASET *set; L_DNA *da0, *da1, *da2, *da3, *da4, *da5; L_HASHMAP *hmap; PTA *pta0, *pta1, *pta2, *pta3; SARRAY *sa0, *sa1, *sa2, *sa3; PIX *pix1; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/hash"); /* Test string hashing with aset */ sa0 = BuildShortStrings(3); n = sarrayGetCount(sa0); sa1 = sarraySelectRange(sa0, 0, 0.6 * n); sarrayAppendRange(sa1, sa0, 0.1 * n, 0.2 * n); /* add dups */ sa2 = sarraySelectRange(sa0, 0.4 * n, -1); /* overlaps sa1 */ sarrayAppendRange(sa2, sa0, 0.7 * n, 0.8 * n); /* add dups */ c1 = sarrayGetCount(sa1); c2 = sarrayGetCount(sa2); set = l_asetCreateFromSarray(sa2); s1 = l_asetSize(set); regTestCompareValues(rp, string_set, s1, 0); /* 0 */ if (rp->display) { lept_stderr("String operations\n c1 = %d, c2 = %d\n", c1, c2); lept_stderr(" aset: size of set without dups: %d\n", s1); } l_asetDestroy(&set); sarrayRemoveDupsByAset(sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_set, c1, 0); /* 1 */ if (rp->display) lept_stderr(" aset: size without dups = %d\n", c1); sarrayIntersectionByAset(sa1, sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_intersection, c1, 1); /* 2 */ if (rp->display) lept_stderr(" aset: intersection size = %d\n", c1); sarrayUnionByAset(sa1, sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_union, c1, 0); /* 3 */ if (rp->display) lept_stderr(" aset: union size = %d\n", c1); /* Test string hashing with hashmap */ hmap = l_hmapCreateFromSarray(sa1); c1 = hmap->nitems; regTestCompareValues(rp, string_set, c1, 0); /* 4 */ if (rp->display) lept_stderr(" hmap: set size without dups: %d\n", c1); l_hmapDestroy(&hmap); sarrayRemoveDupsByHmap(sa2, &sa3, NULL); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_set, c1, 0); /* 5 */ if (rp->display) lept_stderr(" hmap: size without dups = %d\n", c1); sarrayIntersectionByHmap(sa1, sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_intersection, c1, 1); /* 6 */ if (rp->display) lept_stderr(" hmap: intersection size = %d\n", c1); sarrayUnionByHmap(sa1, sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); regTestCompareValues(rp, string_union, c1, 0); /* 7 */ if (rp->display) lept_stderr(" hmap: union size = %d\n", c1); sarrayDestroy(&sa3); sarrayDestroy(&sa0); sarrayDestroy(&sa1); sarrayDestroy(&sa2); /* Test point hashing with aset. */ pta0 = BuildPointSet(500, 500); n = ptaGetCount(pta0); pta1 = ptaSelectRange(pta0, 0, 0.6 * n); ptaJoin(pta1, pta0, 0.1 * n, 0.2 * n); /* add dups */ pta2 = ptaSelectRange(pta0, 0.4 * n, -1); /* overlap with pta1 */ ptaJoin(pta2, pta0, 0.7 * n, 0.8 * n); /* add dups */ c1 = ptaGetCount(pta1); c2 = ptaGetCount(pta2); set = l_asetCreateFromPta(pta2); s1 = l_asetSize(set); l_asetDestroy(&set); regTestCompareValues(rp, pta_set, s1, 0); /* 8 */ if (rp->display) { lept_stderr("Pt array operations\n c1 = %d, c2 = %d\n", c1, c2); lept_stderr(" aset: size of set without dups: %d\n", s1); } ptaRemoveDupsByAset(pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_set, c1, 0); /* 9 */ if (rp->display) lept_stderr(" aset: size without dups = %d\n", c1); ptaIntersectionByAset(pta1, pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_intersection, c1, 1); /* 10 */ if (rp->display) lept_stderr(" aset: intersection size = %d\n", c1); ptaUnionByAset(pta1, pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_union, c1, 0); /* 11 */ if (rp->display) lept_stderr(" aset: union size = %d\n", c1); /* Test point hashing with hashmap */ hmap = l_hmapCreateFromPta(pta2); c1 = hmap->nitems; regTestCompareValues(rp, pta_set, c1, 0); /* 12 */ if (rp->display) lept_stderr(" hmap: set size without dups: %d\n", c1); l_hmapDestroy(&hmap); ptaRemoveDupsByHmap(pta2, &pta3, NULL); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_set, c1, 0); /* 13 */ if (rp->display) lept_stderr(" hmap: size without dups = %d\n", c1); ptaIntersectionByHmap(pta1, pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_intersection, c1, 1); /* 14 */ if (rp->display) lept_stderr(" hmap: intersection size = %d\n", c1); ptaUnionByHmap(pta1, pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); regTestCompareValues(rp, pta_union, c1, 0); /* 15 */ if (rp->display) lept_stderr(" hmap: union size = %d\n", c1); ptaDestroy(&pta0); ptaDestroy(&pta1); ptaDestroy(&pta2); /* Test dna hashing with aset */ da0 = l_dnaMakeSequence(0, 1, 80000); n = l_dnaGetCount(da0); for (i = 0; i < n; i++) da0->array[i] = -7.4 * da0->array[i]; da1 = l_dnaSelectRange(da0, 0, 0.6 * n); l_dnaJoin(da1, da0, 0.1 * n, 0.2 * n); /* add dups */ da2 = l_dnaSelectRange(da0, 0.4 * n, -1); /* overlap with da1 */ l_dnaJoin(da2, da0, 0.7 * n, 0.8 * n); /* add dups */ c1 = l_dnaGetCount(da1); c2 = l_dnaGetCount(da2); set = l_asetCreateFromDna(da2); s1 = l_asetSize(set); l_asetDestroy(&set); regTestCompareValues(rp, da_set, s1, 0); /* 16 */ if (rp->display) { lept_stderr("Double array operations\n c1 = %d, c2 = %d\n", c1, c2); lept_stderr(" aset: size of set without dups: %d\n", s1); } l_dnaRemoveDupsByAset(da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_set, c1, 0); /* 17 */ if (rp->display) lept_stderr(" aset: size without dups = %d\n", c1); l_dnaIntersectionByAset(da1, da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_intersection, c1, 1); /* 18 */ if (rp->display) lept_stderr(" aset: intersection size = %d\n", c1); l_dnaUnionByAset(da1, da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_union, c1, 0); /* 19 */ if (rp->display) lept_stderr(" aset: union size = %d\n", c1); /* Test dna hashing with hashmap */ hmap = l_hmapCreateFromDna(da2); c1 = hmap->nitems; regTestCompareValues(rp, da_set, c1, 0); /* 20 */ if (rp->display) lept_stderr(" hmap: set size without dups: %d\n", c1); l_hmapDestroy(&hmap); l_dnaRemoveDupsByHmap(da2, &da3, NULL); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_set, c1, 0); /* 21 */ if (rp->display) lept_stderr(" hmap: size without dups = %d\n", c1); l_dnaIntersectionByHmap(da1, da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_intersection, c1, 1); /* 22 */ if (rp->display) lept_stderr(" hmap: intersection size = %d\n", c1); l_dnaUnionByHmap(da1, da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); regTestCompareValues(rp, da_union, c1, 0); /* 23 */ if (rp->display) lept_stderr(" hmap: union size = %d\n", c1); l_dnaDestroy(&da0); l_dnaDestroy(&da1); l_dnaDestroy(&da2); /* Another test of dna hashing, showing equivalence * of results between ordered and unordered sets. */ da0 = l_dnaMakeSequence(0, 1, 20); n = l_dnaGetCount(da0); for (i = 0; i < n; i++) da0->array[i] = 3.4 * da0->array[i]; da1 = l_dnaSelectRange(da0, 0, 0.6 * n); l_dnaJoin(da1, da0, 0.1 * n, 0.2 * n); /* add dups */ da2 = l_dnaSelectRange(da0, 0.4 * n, -1); /* overlap with da1 */ l_dnaJoin(da2, da0, 0.7 * n, 0.8 * n); /* add dups */ c1 = l_dnaGetCount(da1); c2 = l_dnaGetCount(da2); l_dnaRemoveDupsByAset(da2, &da3); l_dnaRemoveDupsByHmap(da2, &da4, NULL); /* Show the two sets da3 and da4 are identical in content, * because they have the same size and their intersection also * has the same size. */ c3 = l_dnaGetCount(da3); c4 = l_dnaGetCount(da4); regTestCompareValues(rp, c3, c4, 0); /* 24 */ l_dnaIntersectionByHmap(da3, da4, &da5); c5 = l_dnaGetCount(da5); regTestCompareValues(rp, c4, c5, 0); /* 25 */ if (rp->display) { lept_stderr("\nc1 = %d, c2 = %d\n", c1, c2); lept_stderr("c3 = %d, c4 = %d, c5 = %d\n", c3, c4, c5); l_dnaWriteMem(&data1, &size1, da4); lept_stderr("%s", data1); lept_free(data1); } l_dnaDestroy(&da0); l_dnaDestroy(&da1); l_dnaDestroy(&da2); l_dnaDestroy(&da3); l_dnaDestroy(&da4); l_dnaDestroy(&da5); /* Test pixel counting operations with hashmap and ordered map */ pix1 = pixRead("wet-day.jpg"); pixCountRGBColorsByHash(pix1, &c1); pixCountRGBColors(pix1, 1, &c2); regTestCompareValues(rp, 42427, c1, 0); /* 26 */ regTestCompareValues(rp, 42427, c2, 0); /* 27 */ if (rp->display) { lept_stderr("Color count using hashmap: %d\n", c1); lept_stderr("Color count using aset: %d\n", c2); } pixDestroy(&pix1); return regTestCleanup(rp); } /* ------------------------------------------------------- */ static SARRAY * BuildShortStrings(l_int32 nchars) /* 3, 4 or 5 */ { char buf[64]; l_int32 i, j, k, l, m; l_uint64 hash; SARRAY *sa; sa = sarrayCreate(1000); for (i = 0; i < 26; i++) { snprintf(buf, sizeof(buf), "%c", i + 0x61); sarrayAddString(sa, buf, L_COPY); for (j = 0; j < 26; j++) { snprintf(buf, sizeof(buf), "%c%c", i + 0x61, j + 0x61); sarrayAddString(sa, buf, L_COPY); for (k = 0; k < 26; k++) { snprintf(buf, sizeof(buf), "%c%c%c", i + 0x61, j + 0x61, k + 0x61); sarrayAddString(sa, buf, L_COPY); if (nchars > 3) { for (l = 0; l < 26; l++) { snprintf(buf, sizeof(buf), "%c%c%c%c", i + 0x61, j + 0x61, k + 0x61, l + 0x61); sarrayAddString(sa, buf, L_COPY); if (nchars > 4) { for (m = 0; m < 26; m++) { snprintf(buf, sizeof(buf), "%c%c%c%c%c", i + 0x61, j + 0x61, k + 0x61, l + 0x61, m + 0x61); sarrayAddString(sa, buf, L_COPY); if (i == 17 && j == 12 && k == 4 && l == 21) { l_hashStringToUint64(buf, &hash); lept_stderr(" %llx\n", hash); } } } } } } } } return sa; } /* ------------------------------------------------------- */ static PTA * BuildPointSet(l_int32 w, l_int32 h) { l_int32 i, j; PTA *pta; pta = ptaCreate(w * h); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) ptaAddPt(pta, 316.27 * j, 243.59 * i); } return pta; } leptonica-1.86.0/prog/hashtest.c000066400000000000000000000247571506303110300165310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * hashtest.c * * Allows testing of ordered and unordered set/map functions on dna, * pta and strings, similar to hash_reg.c. * Use: * hashtest dnasize ptasize strsize * where to test each type use * dnasize in [1, ... 10M] * ptasize in [1, ... 5000] * strsize in [3, 4, 5] * and to skip each type use 0 * * For example, * hashtest 0 0 4 * will test all 26^4 alphabetic strings of length 4. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" #include "pix_internal.h" static SARRAY *BuildShortStrings(l_int32 nchars); static PTA *BuildPointSet(l_int32 w, l_int32 h); l_int32 main(int argc, char **argv) { l_int32 dnasize, ptasize, strsize, i, n, c1, c2, c3, s1; L_ASET *set; L_DNA *da0, *da1, *da2, *da3; L_HASHMAP *hmap; PTA *pta0, *pta1, *pta2, *pta3; SARRAY *sa0, *sa1, *sa2, *sa3; if (argc != 4) return ERROR_INT(" Syntax: hashtest dnasize ptasize strsize", __func__, 1); setLeptDebugOK(1); dnasize = atoi(argv[1]); ptasize = atoi(argv[2]); strsize = atoi(argv[3]); if (dnasize < 0) return ERROR_INT(" dnasize < 0; must be in [0 ... 10M]", __func__, 1); if (dnasize > 10000000) { lept_stderr("very large dnasize = %d; using 10M\n", dnasize); dnasize = 10000000; } if (ptasize < 0) return ERROR_INT(" ptasize < 0; must be in [0 ... 5000]", __func__, 1); if (ptasize > 5000) { lept_stderr("very large ptasize = %d; using 5000\n", ptasize); ptasize = 5000; } if (strsize < 0) strsize = 0; if (strsize < 3 && strsize != 0) { lept_stderr("strsize < 3; using 3\n"); strsize = 3; } if (strsize > 5) { lept_stderr("strsize > 5; using 5\n"); strsize = 5; } /* Test dna hashing with aset */ if (dnasize == 0) goto skipped_1; da0 = l_dnaMakeSequence(0, 1, dnasize); n = l_dnaGetCount(da0); lept_stderr("\n================= Dna ===================\n" "n = %d\n", n); for (i = 0; i < n; i++) da0->array[i] = -7.4 * da0->array[i]; da1 = l_dnaSelectRange(da0, 0, 0.6 * n); l_dnaJoin(da1, da0, 0.1 * n, 0.2 * n); /* add dups */ da2 = l_dnaSelectRange(da0, 0.4 * n, -1); /* overlap with da1 */ l_dnaJoin(da2, da0, 0.7 * n, 0.8 * n); /* add dups */ l_dnaDestroy(&da0); startTimer(); c1 = l_dnaGetCount(da1); c2 = l_dnaGetCount(da2); lept_stderr("c1 = %d, c2 = %d\n", da1->n, da2->n); l_dnaRemoveDupsByAset(da2, &da3); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); l_dnaIntersectionByAset(da1, da2, &da3); c2 = l_dnaGetCount(da3); l_dnaDestroy(&da3); l_dnaUnionByAset(da1, da2, &da3); c3 = l_dnaGetCount(da3); l_dnaDestroy(&da3); lept_stderr("Dna Set Time: %7.2f sec\n", stopTimer()); lept_stderr("Aset: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); /* Test dna hashing with hashmap */ c1 = l_dnaGetCount(da1); c2 = l_dnaGetCount(da2); startTimer(); l_dnaRemoveDupsByHmap(da2, &da3, NULL); c1 = l_dnaGetCount(da3); l_dnaDestroy(&da3); l_dnaIntersectionByHmap(da1, da2, &da3); c2 = l_dnaGetCount(da3); l_dnaDestroy(&da3); lept_stderr("Dna Hash Time: %7.2f sec\n", stopTimer()); l_dnaUnionByHmap(da1, da2, &da3); c3 = l_dnaGetCount(da3); l_dnaDestroy(&da3); lept_stderr("Hmap: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); l_dnaDestroy(&da1); l_dnaDestroy(&da2); /* Test pt hashing with aset */ skipped_1: if (ptasize == 0) goto skipped_2; pta0 = BuildPointSet(ptasize, ptasize); n = ptaGetCount(pta0); lept_stderr("\n================= Pta ===================\n" "n = %d\n", n); pta1 = ptaSelectRange(pta0, 0, 0.6 * n); ptaJoin(pta1, pta0, 0.1 * n, 0.2 * n); /* add dups */ pta2 = ptaSelectRange(pta0, 0.4 * n, -1); /* overlap with pta1 */ ptaJoin(pta2, pta0, 0.7 * n, 0.8 * n); /* add dups */ c1 = ptaGetCount(pta1); c2 = ptaGetCount(pta2); lept_stderr("c1 = %d, c2 = %d\n", pta1->n, pta2->n); startTimer(); ptaRemoveDupsByAset(pta2, &pta3); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); ptaIntersectionByAset(pta1, pta2, &pta3); c2 = ptaGetCount(pta3); ptaDestroy(&pta3); ptaUnionByAset(pta1, pta2, &pta3); c3 = ptaGetCount(pta3); ptaDestroy(&pta3); lept_stderr("Pta Set Time: %7.2f sec\n", stopTimer()); lept_stderr("Aset: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); ptaDestroy(&pta0); /* Test pt hashing with hashmap */ c1 = ptaGetCount(pta1); c2 = ptaGetCount(pta2); startTimer(); ptaRemoveDupsByHmap(pta2, &pta3, NULL); c1 = ptaGetCount(pta3); ptaDestroy(&pta3); ptaIntersectionByHmap(pta1, pta2, &pta3); c2 = ptaGetCount(pta3); ptaDestroy(&pta3); ptaUnionByHmap(pta1, pta2, &pta3); c3 = ptaGetCount(pta3); ptaDestroy(&pta3); lept_stderr("Pta Hash Time: %7.2f sec\n", stopTimer()); lept_stderr("Hmap: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); ptaDestroy(&pta1); ptaDestroy(&pta2); /* Test string hashing with aset */ skipped_2: if (strsize == 0) goto skipped_3; sa0 = BuildShortStrings(strsize); n = sarrayGetCount(sa0); lept_stderr("\n================= Strings ===================\n" "n = %d\n", n); sa1 = sarraySelectRange(sa0, 0, 0.6 * n); sarrayAppendRange(sa1, sa0, 0.1 * n, 0.2 * n); /* add dups */ sa2 = sarraySelectRange(sa0, 0.4 * n, -1); /* overlaps sa1 */ sarrayAppendRange(sa2, sa0, 0.7 * n, 0.8 * n); /* add dups */ c1 = sarrayGetCount(sa1); c2 = sarrayGetCount(sa2); lept_stderr("c1 = %d, c2 = %d\n", sa1->n, sa2->n); set = l_asetCreateFromSarray(sa2); s1 = l_asetSize(set); lept_stderr("Aset: num unique: %d\n", s1); l_asetDestroy(&set); startTimer(); sarrayRemoveDupsByAset(sa2, &sa3); c1 = sarrayGetCount(sa3); sarrayDestroy(&sa3); sarrayIntersectionByAset(sa1, sa2, &sa3); c2 = sarrayGetCount(sa3); sarrayDestroy(&sa3); sarrayUnionByAset(sa1, sa2, &sa3); c3 = sarrayGetCount(sa3); sarrayDestroy(&sa3); lept_stderr("String Set Time: %7.2f sec\n", stopTimer()); lept_stderr("Aset: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); hmap = l_hmapCreateFromSarray(sa1); lept_stderr("Hmap: num unique: %d\n", hmap->nitems); l_hmapDestroy(&hmap); startTimer(); sarrayRemoveDupsByHmap(sa2, &sa3, NULL); c1 = sa3->n; sarrayDestroy(&sa3); sarrayIntersectionByHmap(sa1, sa2, &sa3); c2 = sa3->n; sarrayDestroy(&sa3); sarrayUnionByHmap(sa1, sa2, &sa3); c3 = sa3->n; sarrayDestroy(&sa3); lept_stderr("String Hash Time: %7.2f sec\n", stopTimer()); lept_stderr("Hmap: set# = %d, intersection# = %d, union# = %d\n", c1, c2, c3); sarrayDestroy(&sa0); sarrayDestroy(&sa1); sarrayDestroy(&sa2); skipped_3: return 0; } static SARRAY * BuildShortStrings(l_int32 nchars) /* 3, 4 or 5 */ { char buf[64]; l_int32 i, j, k, l, m; l_uint64 hash; SARRAY *sa; sa = sarrayCreate(1000); for (i = 0; i < 26; i++) { snprintf(buf, sizeof(buf), "%c", i + 0x61); sarrayAddString(sa, buf, L_COPY); for (j = 0; j < 26; j++) { snprintf(buf, sizeof(buf), "%c%c", i + 0x61, j + 0x61); sarrayAddString(sa, buf, L_COPY); for (k = 0; k < 26; k++) { snprintf(buf, sizeof(buf), "%c%c%c", i + 0x61, j + 0x61, k + 0x61); sarrayAddString(sa, buf, L_COPY); if (nchars > 3) { for (l = 0; l < 26; l++) { snprintf(buf, sizeof(buf), "%c%c%c%c", i + 0x61, j + 0x61, k + 0x61, l + 0x61); sarrayAddString(sa, buf, L_COPY); if (nchars > 4) { for (m = 0; m < 26; m++) { snprintf(buf, sizeof(buf), "%c%c%c%c%c", i + 0x61, j + 0x61, k + 0x61, l + 0x61, m + 0x61); sarrayAddString(sa, buf, L_COPY); /* if (i == 17 && j == 12 && k == 4 && l == 21) { l_hashStringToUint64(buf, &hash); lept_stderr(" %llx\n", hash); } */ } } } } } } } return sa; } static PTA * BuildPointSet(l_int32 w, l_int32 h) { l_int32 i, j; PTA *pta; pta = ptaCreate(w * h); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) ptaAddPt(pta, 316.27 * j, 243.59 * i); } return pta; } leptonica-1.86.0/prog/heap_reg.c000066400000000000000000000112621506303110300164430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * heap_reg.c * * Tests the heap utility. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" struct HeapElement { l_float32 distance; l_int32 x; l_int32 y; }; typedef struct HeapElement HEAPEL; static const l_int32 NELEM = 50; NUMA *ExtractNumaFromHeap(L_HEAP *lh); int main(int argc, char **argv) { l_uint8 *data; l_int32 i; size_t size; l_float32 frand, fval; HEAPEL *item; NUMA *na1, *na2, *na3, *na4, *na5; L_HEAP *lh; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/heap"); /* Make a numa of random numbers */ na1 = numaCreate(5); for (i = 0; i < NELEM; i++) { frand = (l_float32)rand() / (l_float32)RAND_MAX; numaAddNumber(na1, frand); } numaWriteMem(&data, &size, na1); regTestWriteDataAndCheck(rp, data, size, "na"); /* 0 */ lept_free(data); /* Make an array of HEAPELs with the same numbers */ lh = lheapCreate(5, L_SORT_INCREASING); for (i = 0; i < NELEM; i++) { numaGetFValue(na1, i, &fval); item = (HEAPEL *)lept_calloc(1, sizeof(HEAPEL)); item->distance = fval; lheapAdd(lh, item); } /* Re-sort for strict order */ lheapSortStrictOrder(lh); na2 = ExtractNumaFromHeap(lh); numaWriteMem(&data, &size, na2); regTestWriteDataAndCheck(rp, data, size, "na"); /* 1 */ lept_free(data); /* Switch the direction and re-sort strict order */ lh->direction = L_SORT_DECREASING; lheapSortStrictOrder(lh); na3 = ExtractNumaFromHeap(lh); numaWriteMem(&data, &size, na3); regTestWriteDataAndCheck(rp, data, size, "na"); /* 2 */ lept_free(data); /* Switch direction again and re-sort strict sort */ lh->direction = L_SORT_INCREASING; lheapSortStrictOrder(lh); na4 = ExtractNumaFromHeap(lh); numaWriteMem(&data, &size, na4); regTestWriteDataAndCheck(rp, data, size, "na"); /* 3 */ lept_free(data); /* Switch direction again and re-sort strict sort */ lh->direction = L_SORT_DECREASING; lheapSortStrictOrder(lh); na5 = ExtractNumaFromHeap(lh); numaWriteMem(&data, &size, na5); regTestWriteDataAndCheck(rp, data, size, "na"); /* 4 */ lept_free(data); regTestCompareFiles(rp, 1, 3); /* 5 */ regTestCompareFiles(rp, 2, 4); /* 6 */ /* Remove the elements, one at a time */ for (i = 0; lheapGetCount(lh) > 0; i++) { item = (HEAPEL *)lheapRemove(lh); if (rp->display) lept_stderr("item %d: %f\n", i, item->distance); lept_free(item); } lheapDestroy(&lh, 1); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); return regTestCleanup(rp); } /* This just uses the heap array. It will only be ordered if the heap is in strict ordering. */ NUMA * ExtractNumaFromHeap(L_HEAP *lh) { l_int32 i, n; HEAPEL *item; NUMA *na; n = lheapGetCount(lh); na = numaCreate(0); for (i = 0; i < n; i++) { item = (HEAPEL *)lh->array[i]; numaAddNumber(na, item->distance); } return na; } leptonica-1.86.0/prog/histoduptest.c000066400000000000000000000237001506303110300174300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * histoduptest.c * * This demonstrates two things: * (1) Histogram method of comparing two grayscale images for similarity. * High score (> 0.5) means they're likely to be the same image * (2) The morphological method, based on horizontal lines, for * deciding if a grayscale image is text or non-text. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" #define TEST1 1 #define TEST2 1 #define TEST3 1 #define TEST4 1 #define TEST5 1 l_int32 main(int argc, char **argv) { l_uint8 *bytea1, *bytea2; l_int32 i, j, n, maxi, maxj, istext, w1, h1, w2, h2; l_int32 debug; size_t size1, size2; l_float32 score, maxscore; l_float32 *scores; BOX *box1, *box2; NUMA *nai; NUMAA *naa1, *naa2, *naa3, *naa4; PIX *pix1, *pix2; PIXA *pixa1, *pixa2, *pixa3; PIXAC *pac; if (argc != 1) { lept_stderr("Syntax: histoduptest\n"); return 1; } /* Set to 1 for more output from tests 1 and 2 */ debug = 0; setLeptDebugOK(1); lept_mkdir("lept/comp"); pac = pixacompRead("dinos.pac"); /* resolution = 75 ppi */ #if TEST1 /* -------------------------------------------------------------- * * Test comparison with rotation * * -------------------------------------------------------------- */ /* Make a second set that is rotated; combine with the input set. */ pixa1 = pixaCreateFromPixacomp(pac, L_COPY); pixa2 = pixaScaleBySampling(pixa1, 2.0, 2.0); /* to resolution 150 ppi */ n = pixaGetCount(pixa2); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa2, i, L_CLONE); pix2 = pixRotate(pix1, 0.06, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pixaAddPix(pixa2, pix2, L_INSERT); pixDestroy(&pix1); } /* Compare between every pair of images; * can also use n = 2, simthresh = 0.50. */ pixaComparePhotoRegionsByHisto(pixa2, 0.85, 1.3, 1, 3, 0.20, &nai, &scores, &pix1, debug); lept_free(scores); /* Show the similarity classes. */ numaWriteStderr(nai); pixWrite("/tmp/lept/comp/photoclass1.jpg", pix1, IFF_JFIF_JPEG); lept_stderr("Writing photo classes: /tmp/lept/comp/photoclass1.jpg\n"); numaDestroy(&nai); pixDestroy(&pix1); /* Show the scores between images as a 2d array */ pix2 = pixRead("/tmp/lept/comp/scorearray.png"); pixDisplay(pix2, 100, 100); pixDestroy(&pix2); pixaDestroy(&pixa1); pixaDestroy(&pixa2); #endif #if TEST2 /* -------------------------------------------------------------- * * Test translation * * -------------------------------------------------------------- */ /* Make a second set that is translated; combine with the input set. */ pixa1 = pixaCreateFromPixacomp(pac, L_COPY); pixa2 = pixaScaleBySampling(pixa1, 2.0, 2.0); /* to resolution 150 ppi */ pixa3 = pixaTranslate(pixa2, 15, -21, L_BRING_IN_WHITE); pixaJoin(pixa2, pixa3, 0, -1); /* Compare between every pair of images. */ pixaComparePhotoRegionsByHisto(pixa2, 0.85, 1.3, 1, 3, 0.20, &nai, &scores, &pix1, debug); lept_free(scores); /* Show the similarity classes. */ numaWriteStderr(nai); pixWrite("/tmp/lept/comp/photoclass2.jpg", pix1, IFF_JFIF_JPEG); lept_stderr("Writing photo classes: /tmp/lept/comp/photoclass2.jpg\n"); numaDestroy(&nai); pixDestroy(&pix1); /* Show the scores between images as a 2d array */ pix2 = pixRead("/tmp/lept/comp/scorearray.png"); pixDisplay(pix2, 100, 100); pixDestroy(&pix2); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); #endif #if TEST3 /* -------------------------------------------------------------- * * Compare two image regions * * -------------------------------------------------------------- */ /* Do a comparison on a pair: dinos has (5,7) and (4,10) being * superficially similar. But they are far apart by this test. */ pixa1 = pixaCreateFromPixacomp(pac, L_COPY); pixa2 = pixaScaleBySampling(pixa1, 2.0, 2.0); /* to resolution 150 ppi */ pix1 = pixaGetPix(pixa2, 5, L_CLONE); box1 = pixaGetBox(pixa2, 5, L_COPY); pix2 = pixaGetPix(pixa2, 7, L_CLONE); box2 = pixaGetBox(pixa2, 7, L_COPY); pixGenPhotoHistos(pix1, box1, 1, 1.2, 3, &naa1, &w1, &h1, 5); pixGenPhotoHistos(pix2, box2, 1, 1.2, 3, &naa2, &w2, &h2, 7); pixaDestroy(&pixa1); pixaDestroy(&pixa2); if (!naa1 || !naa2) { lept_stderr("Not both image; exiting\n"); return 0; } bytea1 = l_compressGrayHistograms(naa1, w1, h1, &size1); bytea2 = l_compressGrayHistograms(naa2, w2, h2, &size2); naa3 = l_uncompressGrayHistograms(bytea1, size1, &w1, &h1); naa4 = l_uncompressGrayHistograms(bytea2, size2, &w2, &h2); lept_stderr("******* (%d, %d), (%d, %d) *******\n", w1, h1, w2, h2); pixa1 = pixaCreate(0); /* Set @minratio very small to allow comparison for all pairs */ compareTilesByHisto(naa3, naa4, 0.1, w1, h1, w2, h2, &score, pixa1); pixaDestroy(&pixa1); lept_stderr("score = %5.3f\n", score); pixaDestroy(&pixa1); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box1); boxDestroy(&box2); numaaDestroy(&naa1); numaaDestroy(&naa2); numaaDestroy(&naa3); numaaDestroy(&naa4); lept_free(bytea1); lept_free(bytea2); #endif #if TEST4 /* -------------------------------------------------------------- * * Test comparison in detail * * -------------------------------------------------------------- */ pixa1 = pixaCreateFromPixacomp(pac, L_COPY); n = pixaGetCount(pixa1); maxscore = 0.0; maxi = 0; maxj = 0; for (i = 0; i < n; i++) { lept_stderr("i = %d\n", i); pix1 = pixaGetPix(pixa1, i, L_CLONE); box1 = pixaGetBox(pixa1, i, L_COPY); for (j = 0; j <= i; j++) { pix2 = pixaGetPix(pixa1, j, L_CLONE); box2 = pixaGetBox(pixa1, j, L_COPY); pixCompareGrayByHisto(pix1, pix2, box1, box2, 0.85, 230, 1, 3, &score, 0); lept_stderr("Score[%d,%d] = %5.3f\n", i, j, score); if (i != j && score > maxscore) { maxscore = score; maxi = i; maxj = j; } pixDestroy(&pix2); boxDestroy(&box2); } pixDestroy(&pix1); boxDestroy(&box1); } pixaDestroy(&pixa1); lept_stderr("max score [%d,%d] = %5.3f\n", maxi, maxj, maxscore); #endif #if TEST5 /* -------------------------------------------------------------- * * Text or photo determination in detail * * -------------------------------------------------------------- */ /* Are the images photo or text? This is the morphological * method, which is more accurate than the variance of gray * histo method. Output to /tmp/lept/comp/isphoto1.pdf. */ pixa1 = pixaCreateFromPixacomp(pac, L_COPY); n = pixaGetCount(pixa1); pixa2 = pixaCreate(n); for (i = 0; i < n; i++) { pixa3 = pixaCreate(0); lept_stderr("i = %d\n", i); pix1 = pixaGetPix(pixa1, i, L_CLONE); box1 = pixaGetBox(pixa1, i, L_COPY); lept_stderr("w = %d, h = %d\n", pixGetWidth(pix1), pixGetHeight(pix1)); pixDecideIfText(pix1, box1, &istext, pixa3); if (istext == 1) { lept_stderr("This is text\n\n"); } else if (istext == 0) { lept_stderr("This is a photo\n\n"); } else { /* istext == -1 */ lept_stderr("Not determined if text or photo\n\n"); } if (istext == 0) { pix2 = pixaDisplayTiledInRows(pixa3, 32, 1000, 1.0, 0, 50, 2); pixDisplay(pix2, 100, 100); pixaAddPix(pixa2, pix2, L_INSERT); pixaDestroy(&pixa3); } pixDestroy(&pix1); boxDestroy(&box1); } lept_stderr("Writing to: /tmp/lept/comp/isphoto1.pdf\n"); pixaConvertToPdf(pixa2, 300, 1.0, L_FLATE_ENCODE, 0, NULL, "/tmp/lept/comp/isphoto1.pdf"); pixaDestroy(&pixa1); pixaDestroy(&pixa2); #endif pixacompDestroy(&pac); return 0; } leptonica-1.86.0/prog/histotest.c000066400000000000000000000125021506303110300167150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * histotest.c * * Makes histograms of grayscale and color pixels * from a pix. For RGB color, this uses * rgb --> octcube indexing. * * histotest filein sigbits * * where the number of octcubes is 8^(sigbits) * * For gray, sigbits is ignored. * * Also tests pixThresholdByHisto(), sliding the histogram fully * to the left and right until, in each case, all numbers are 0. * This has been valgrinded, to show that no memory errors occur. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 d, sigbits, i, val; BOX *box1; GPLOT *gplot; NUMA *na1, *na2; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa1; if (argc != 3) return ERROR_INT(" Syntax: histotest filein sigbits", __func__, 1); filein = argv[1]; sigbits = atoi(argv[2]); setLeptDebugOK(1); lept_mkdir("lept/histo"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("depth not 8 or 32 bpp", __func__, 1); if (d == 32) { startTimer(); if ((na1 = pixOctcubeHistogram(pixs, sigbits, NULL)) == NULL) return ERROR_INT("na1 not made", __func__, 1); lept_stderr("histo time = %7.3f sec\n", stopTimer()); gplot = gplotCreate("/tmp/lept/histo/color", GPLOT_PNG, "color histogram with octcube indexing", "octcube index", "number of pixels in cube"); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, "input pix"); gplotMakeOutput(gplot); gplotDestroy(&gplot); l_fileDisplay("/tmp/lept/histo/color.png", 100, 100, 1.0); } else { if ((na1 = pixGetGrayHistogram(pixs, 1)) == NULL) return ERROR_INT("na1 not made", __func__, 1); numaWrite("/tmp/junk.na", na1); gplot = gplotCreate("/tmp/lept/histo/gray", GPLOT_PNG, "grayscale histogram", "gray value", "number of pixels"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, "input pix"); gplotMakeOutput(gplot); gplotDestroy(&gplot); l_fileDisplay("/tmp/lept/histo/gray.png", 100, 100, 1.0); } pixDestroy(&pixs); numaDestroy(&na1); /* Test behavior of pixThresholdByHisto() */ #if 0 /* for valgrind, use pnm instead of jpg */ pix1 = pixRead("lyra.005.jpg"); pixWrite("/tmp/lyra.005.pnm", pix1, IFF_PNM); #endif /* pix1 = pixRead("/tmp/lyra.005.pnm"); */ pixs = pixRead("lyra.005.jpg"); box1 = boxCreate(0, 173, 350, 580); pix1 = pixClipRectangle(pixs, box1, 0); pix2 = pixRotateOrth(pix1, 1); pix3 = pixConvertTo8(pix2, 0); pixThresholdByHisto(pix3, 1, 0, 0, &val, &pix4, &na1, &pix5); lept_stderr("val = %d\n", val); pixa1 = pixaCreate(4); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix4, L_INSERT); pixaAddPix(pixa1, pix5, L_INSERT); pix6 = pixaDisplayTiledInColumns(pixa1, 1,1.0, 25, 2); pixDisplay(pix6, 200, 200); na2 = numaCopy(na1); for (i = 0; i < 260; i++) { numaRemoveNumber(na1, 0); numaAddNumber(na1, 0); numaFindLocForThreshold(na1, 0, &val, NULL); lept_stderr("val = %d\n", val); } for (i = 0; i < 260; i++) { numaInsertNumber(na2, 0, 0); numaRemoveNumber(na2, 256); numaFindLocForThreshold(na2, 0, &val, NULL); lept_stderr("val = %d\n", val); } numaDestroy(&na1); numaDestroy(&na2); pixaDestroy(&pixa1); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix6); boxDestroy(&box1); return 0; } leptonica-1.86.0/prog/hmttemplate1.txt000066400000000000000000000133161506303110300176750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * --- * PIX *pixHMTDwa_*() --- * PIX *pixFHMTGen_*() */ #include #include "allheaders.h" --- This file is: hmttemplate1.txt --- --- We need to include these prototypes: --- PIX *pixHMTDwa_*(PIX *pixd, PIX *pixs, l_int32 operation); --- PIX *pixFHMTGen_*(PIX *pixd, PIX *pixs, l_int32 operation); --- l_int32 fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * \brief pixHMTDwa_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a 32 pixel border, calls the appropriate
 *          pixFHMTGen_*(), and removes the border.
 *          See notes below for that function.
 * 
*/ PIX * --- pixHMTDwa_*(PIX *pixd, PIX *pixs, const char *selname) { PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixHMTDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); pixt1 = pixAddBorder(pixs, 32, 0); --- pixt2 = pixFHMTGen_*(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * \brief pixFHMTGen_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa implementation of the hit-miss transform
 *          on pixs by the sel.
 *      (2) The sel must be limited in size to not more than 31 pixels
 *          about the origin.  It must have at least one hit, and it
 *          can have any number of misses.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 * 
*/ PIX * --- pixFHMTGen_*(PIX *pixd, PIX *pixs, const char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFHMTGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; --- fhmtgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ --- fhmtgen_low_*(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.86.0/prog/hmttemplate2.txt000066400000000000000000000070631506303110300177000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: --- * l_int32 fhmtgen_low_*() * * Static Low-level: --- * void fhmt_*_*() */ #include "allheaders.h" --- This file is: hmttemplate2.txt --- --- insert static protos here /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! --- * fhmtgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fhmt* routines } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fhmt_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ---------------------- pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.86.0/prog/hole-filler.png000066400000000000000000000740701506303110300174430ustar00rootroot00000000000000‰PNG  IHDRŊHá2 pHYsb&2 IDATxœÔ}mw9Žî8U˛ĢcīĻw˛;ŗw˙˙ēįŪ=Û÷töÄ=r$ĢjˆŌÜHU%KŽĶåLĮR‰Åˇ‡ßáĸDúˇ‘?Á}ŽĶ¨ãriá˛J}%ÖÜ=t ĩm‡‚ūBõ{“*Ŧ9,˙EFä~úĮŨh1Îļzœ>€fÄâø&LŗÆés>Sh™Ū]”‹Š†8ėÚ ÃũC×6-Œ,Íāh”qŒhžŋfǘŽQęv‚ææ§›nĶvd¨´=)Ī‹]–‰9ōái÷eČoŽ–åōZpßĩÔ PĮˇaœ"GMKÔ5Ô`Ā#3ž'^ ßEčā š{ &4Ôl>ŧĄë€ˆh“›Á”ĸī3€ˆp|ė ûqčûį—Û™Š~{{ĶQ Č]–ŗôœ“v’†F>ž|>äaĶ gĶíMG„†šĐ´-FĻFš9ˆ|āaŒ#čw´Ûmš–šÛu ­üõ°{ūÛķŪ ž ŋ+Đ3đn>m?Ũęč†Č†Ž@ĖÖmNõ3rŒ Ž8ö|<÷Ã8ė?Ī‘bQŗ`ˇŨthŌ=Ãđ#Ö˙§]{&…s<ö˙÷ ÃļLáF¨ĻCnnÃD2nEcΌ#Ëô8ôcƒîîvĐ"xŌ"æØ?íŸûūŠGĒũBø.GOÁûđđé/:B@ .€ŌĐ -zŌ§ÁM…1ŒČ`Žąį¯Ÿ<†ũaX¨h°ŨŪo3Ų gz;ĮDŖ6fšĸL:Žüõŋ˙ëĮ—ßFdüēûÛļkÚļŖ@ĄC ™¤Ķž{Áˆœ…°"Ā`Nˆ@„DĢ€Áāķ—Ī_RŨÂw zŧîãüÛũí:€@ˆt*LÆ6qĩ Ŗāōą° €92sŒÜŋ~=<í‡ũsMSĐÃĮģŽÂŽ+~I鏎‰l 3ÍŠ’ģjŗû˙ü€‡OưŊÛŪŪl>ŦiM”čK{B6Wʙ™!úS’4Tˆ@3øČ_ŋū÷=öHĀ%đM„ĩ…$ā=üå¯?tAaë JeĖnT˜Á` K8UEtr2"˜9‚™Ÿ{ūúõˇ§ŨĀũ3ģv5 vûqģĻ Ülg†›™čAĸgßŅEB0č #øá°“ĘFcē{蚖Ú÷]‰yú&÷ p´ekļ–ˇĄ ’1 @ˆ!2Ū3­ģļûĨWaö˛t)zšnßŋīB0^Olž3ģ…‚ŅGƒ“l„Ō¨¯o×:˜ÄÄ î˜#ē>vī?üöÛS˙ė[ßÍíļ%?ˉ։ŧ#˙毖žhĩ’ĻĀ!*5¨í~Žüt÷aŨ…ŽÖRvZU FĮĨÉ&f„M`P`™šÚÖ%L2t!‚ĀŧžŲlrÃéâģŊ/_ū•9¸q`d&éJ¤Ä ×$&Ú ™” ‘ëŊ“ŗ›ô^ ’Ÿ{1ŧ—7´ b}?NÅĪ`-I¤R¤jmüøķ‡ODˆ(M9[PKt‰€č2æĮšĢé™Îë  ãØœĶgŌ…čYŠÃ1?cbá „˜Å>R‰Eg!2ž¸+đŦÜ SøĘ>å”ėĖÁũđ–ëžĻũÁ3ČürĀA?Få€PĨõˆSVÄ´rŲ(Ŧ92Öˇëõ×vŗÛÆ†Ā“õÛVūāZĄĪ™Ög;\ʧ–(5´?mÛû{Ą;B^Ö ž ?RĨ29ËéC^D)ûR´˙ĖoįŌ…čJ|O†ƒÍˆ/†ĀÚzã’Ŧŗ›efLÖ~R2ĩĄŖZŋ?÷#ŪFFD p.uÚ Æq—úO^ą÷íÔW12€ö§÷ī×JvPåĀ3M]Ā%žqNŅd ^gᩊŋ(fe1°­lL1¸c”É.ŋ–—JB€LœdÜ…58r˙đe'¯ģ~%âĢÉŒ#–Ų'âü Ā Ú~ŧ˙ØՉĢKėlyđU¨Ļ§€cAÅĖ2[‹Š E)—§k_āc9ŋcP\t†ŠxEā4ÉfĒôĻŖ@Úx%@&†Č"80ëۛÛũfÁÄĀ™X đ„ĸxa%ŗø\GĻųđ~MԅÄ fPÍ7˛AāŗÁ*(q:gŲȧâfR„ôęËöØ1ŠÚéVē´ēÃOŌlHĒ~0}i†ôŌʘWi.˛>¯I—į➙Чŧ’ yôÕhÆbiĪĘ™â ] jmadŒÄ$Vŗ§ßT>XŖWĘËmUø’PC6Ā™ k€ģ¯īC‘ĨL¨.Õj\RZY_uŌÍ+”ô”Ž–9u ŋ&>`Ú ¯ jŋ)‰ēnZ‚g LĀzŨŅū(ų¨CRĨZhÕßhBoŪ˛Ūfš56Öķ^÷†ķú7ˈ€eõbšEjÆĶ’=Ķ­9åîÕ ūĶ´ē<ĢđãĄ—ųåéŖ”—ŪL:…îŋ~ĘļEĸõĮëô€œT_-ĸä˜Å8Ÿ‚MžŦĀtaÄPėųŔPŠ–1ÆŌMÆwĘxi~ĘßĖ9ew3/z@ÍY'ĩiē–ö00X8fŠöčš`6ŅT‘‘ŽFÛÛRúĻbYß9ÖÕä‰ĢÚĨĢÍĘ/)ŋąYų‡6ՋŖ¯Ļ ŸŦ SŨ‡T!´1”VžéZĢīųK/ĸĄš,‹ézôzõÉՓĨˆjBĖ[,.I÷ŒÁQ'ŠĻA¸į¨Ü-ÁaÃF }ŗHS Ā$%ũĨˆGŽËCp›•žp) "ä†1HGdËU­ iXũ ‘ķΊIT›Nįįˆėy‡B… &‡Đ!HF"eŸÆHģîũZß ĸy,xR‡4*ÆĨ&P•BŜĘ[ãYģ0å¯ā2–­Ŗø§PAâö+cNąæ,a^!ĶŪeéjôî0mŧyG(lĸÕ%{ŊNÛĮ>Ąi€Ėlhũ!-} ĢųÜķį UQj!;(E†°XƒŊ$Ŧ2mKå%læĨ‰h`ŖhÍ Žš_Ę8/C¯(k`æh.’iIæĖÛŗT˙->F0sßĮ€ĻAŊŖûkäd“ŲAô,ųÅIģ< Āfģ6gŊÔJĀD Ø<ÍīęÄč)Mü§ÕĮäúéŠøÆy=í=힎ėøLÉ?ĀjIFÁÉø˛9ˍŖūܤ\Y4eœīD^?ŅUH ?sfsgš†xmŋ l”Ĩ^¸,'e™2ĪøĘŊ>ņ¸Îiē‘ž˛M>Õš,! ŅčiM„Q tRb"3%´¨vrRvŅ[J´ÁÎ'Wwö´NĪ0ÚģpŲģ=?u‡áëz €î—´åG‘|BŲnWąn;%øbgИčšú9†Ēw靈Ųē˛i˜ęŠŖđ\ˆŖtNP+ØLūDP!M!![Ņ"÷õ>ōRb‡ëėf×ĶŪ°ŋ;vk§ÛūPNI].EcS§lôkm(}Œõŗ”Ō+œõīĒ?ŅØÄ  Ã:t zs-Åā×ļŧĸCöĄMÚ´ũh×fQāō ĒcqÎjķB{8‘%Χ Ņķ$v⨇´€y?}[(qAöVEãÂëđU•dЉŸ::ŽĻŗ„ÎY^AL EŲCI[edē“rY!@÷Īʕ–ˆ3érŒK§ĶĨč1Ĩej8lĖæMĻ[CŽ ĄbŲ¤VąŒėņˆ }WâËģæiÛŗx ā›{ĩŖ:ņž×vŦ93{]O#zCDǰÜIôMRa0Ą?÷˛Pēqđ̃ KGXŽdœ¯X÷¤ŌĀëˇŨ1ĄõQV!ōĸ)‹ĻāÖ sķņ+֒OÜŠ{ōōl^›˙Ũ:¸ēƒõŪ PÚ12uĪ#‹8ƒĐY˓?dĸ<[-™xė•˜ÕnS°xÍ“Á”ãu Ãuč ņ‡°ķ7…Ōã(#íč„ÉKŲĢQ×ũČ‹ŪžtĻF~žbīiŸrFûĻz3'%…Ų{L`k[“ÁĖd”ŅãS1r_íúڑd2Îęvaz í†Č˛x{2ĮÚŗ<-î ęļd4gļ ŠŗģĮˆĖĖũ×ŖëŽ÷FČ^ I"Õ”KöÔęžv!S0Î`đŅrĢÁ\Ī„˜Üs@äđKˆ†#îJ¯…Sf>jEãxĐōôÆĄįH aņų…)møˇd;'ÕüŌ“ŗåÔ8›Ā™ųØ?WFŠd×Hk”“*&=“ã T([RŪŪ‰-LB/‘aŽôv1Ã™î™ÖF1Ŧ“Č3k{#Äũ1ûߛ|3ŗ°ąYsm2KéRôRžÄōįT‰ ˆN3.?L/ ÂŅĀ“ĩGîŸûš“ žÅŧ]Bėŋ;å CYU™]eG[ķˆąâ˜}ÄfÎēif9 Bܝ*ĩ;įÚȸZāÄĢhã0tDY服 šđĖëŦ2Fe}ĸ’‘Rđ˜ûįž< Lœ-KđĻ~Ôų•Ú™$=Đ&ŽũםҨąŠy#YÃęPC ŅX÷ˆ!tVdļå:‰_ÕEŒ 8)šÅ*ĔŨČ^Ü+K¯A¯÷ęUdlpÉ Låį`>wōU4G]ōĀ|ėŸûÚYa’„ŋ™(BB,ǍY•aV,M&›Ž@ "ķ‘ĮŨ# ø A#ÜƒGFÛm¨kZbëžBĄđ#PfŖk÷Ū*áÄēô„öō”ģŧWĄ×ļã€ĐQ}ēl%™0–* lë§ŌЁ—V>ŽũSŸ…'j“ŽO1‘‹îĐÜ1‡rõ§a$€Gæcd4O=CÂmĮíy8´ˇMÛ1ƒŽĄŗhT]IŽųō3§ĩÁY´×ŒS™%J}Ÿ“Ī.Űišցո *KĄ¯Sņ—Ō—dū¤H/(Ņøā¸, /D„¤7‰ķ™Đę\OĻĸNÉj"Ė‹mOŋÛ}y^ę÷8ōĄíēvŦå]›Ŧnĸ¤H4* Ã$^#™Y­vÛTņ­ŊŌ1âU´‡@ϟĖĀ•ŪEöAzH Đ˜Oį¨Ū b(RđžZAjŠmoWĪų;ÔíK­bj216MKģš¨?’F<=ˇÍ­„v"Ņü B§ŽŽĻņDö1œžé™˛Đ(úSøî´'Ķ´ĖÖ9\ŠŦéy Y+ <‘đ"3Gî<Ÿ<áŲŖĖũ|n)ņRn‘’ %ˆ˜ˆ6ģ˜‡q’ŸTĻzn‡įû÷ëu1˛øCŊ>#œąĐ´\xõÁ_ŅY0fšîÂô*ÚCŖ,0&kmjˆ1IÛ$*b%‰a* ąö~û(¸eҧ ŸZ8)HĪ`ž™I#4”PZ>ĢĸU]b€šŸŋ|Ų] ŪõčÅà &•÷€;ũ¤{DF\L…@$ädČb,|ĪhĻõą´)žyƒ ;đGË杊Ÿä&> ~üB=x ƒĪ—?'ˆEŽ<ė>?ö׃w zŠˆ“-&ƒ%–v˜K‰)|Ã4uŲ͛_°=e„bWŠhžÎXŠ„.LūžđäÂn˛Ė,zb„˜ ę˜Ą”—Áķo¸ƒž EĮ$\ũÍī]]œŽ@Oŗp;mĢQÜ~û,)⋭†Ųė4mģWĘōEŠŒēgSQq,ķM(Ô8‰-2ŖSĘķkŸĢ-ĉÉhēGÉ|Ø9đŽJWsN´PvY=-’)?“]ŋ)aŲǧ—÷šō ,g˜ŲÂRŧäšiú)™?Šĸ“Ŋˆ°āÍåØ~’mäŊYR"Ę-]õ-õģũĖĶ‹ŌÕč…MG€žFÆ+ÉęŅÜ%<ī\Œ˜Í¨îQYX ˛°R!ËND‹CUkŊßÕFĀ$ ģŸ[RöŠÉ„¨&Uą5 fēaA’ōNķŒŲˆG˙ēt5zíF/2_ĶIŽōpĸß,šŠēθCkq\/|1¯wXÚ,U k8¯DŽ9™ĨOé͋("ô*ĐÁ^ÍōsŲc•+m>^qy”+ņĘtĶ6-“yŽī”Ūß3/0ƒ0ąĪ˛ŋô’-Žég­”X ^5t186w°Ķé‚Kz_(HJ†~ī˛t+u%I8&ä 'ÄēƒÉæUé ô īÅH ֔Ĩbu‚ĘŒ €Ėāë€ÉœœûĖČ _Ūį4Ķôoú+ųfä'I™5´WÍĻ`Îpú$ŅĻ3‰'˙Îg‹¯ĐŌSëŽ~ÃØØ‘Hĩ¯yŊnūkZ ːƝ“/ĒĪ‹¨œÂ׊ĨŖŧtĪׄË]͜ęØBŠ4 z…ÖĪÜ%Kų_Õ9Ėß459Õ,ߨUäÛÅÖë1°tũ›j}^hÔurÁ=åázq†Fâ’ĶpķÜzĮB• p/ņڟiøSâ? @Ŧaę ėpKŌNŠkoŅ ˜>MGJņë^íÃsíØ29­ íŽTM§D~H+ÖNíņæ´ĻSœi°ŗ°pš›9hŅÔ⍪‚PöĀĀĢ€KŸm FÆ44´Ļyu]ÉE­LÂ>EyŽD˛ãũIGW‰slúÆĘHîPĄŒaGŠĘāŗ6/<•y•aūĻ5Ą:īžJÖ>ōĪŲŖ—’Ųß0n6ģå÷ĪĨĢŖĢ6žáŗî‰siŽ Ū=`÷@Á3"—3ŗ° h„€ÜEÔņ”Rķ<¤AåübæåđÉÅŽrų0WÄĮ-ēįšQŨFlœŪ}• ÷jKįëLužŠ´–3c°|:CT‘¤DÖCĪüœ4ģĖÜã(ÍlŌÉā<Ũ“9*‡ŸŽafĘmsî0ÅS3(돎Y›ÃšëeĒ(ŗŗ•ĶQŲ‰Gû'ÆđPŋaē=ŨL$ļŸpö’ĩdĩAf&§5lAƒŨ¯`ŒĖY,Īĸņ ČQÜ3Ä?iœÛá˲Œyž„¸ŦĶZīĒ sĻ%F¤Ņ$€ū‰ÁĮëÉR¯Nnûš—ũ€lHw¤"ģ˛Vr¨ēŖÖ‘ČũŗSFûNģņŒDķ¨Áķkž¤b˙qÖŨÄÍ.eË4ÉUv5ú3cĶÎĪ•œŪVĪĖ *öœĪî_•ŽAOåĢâ•8gĢ(ŧ"bqĀ­°šP5øvŸ#Ë+“áČ#ú!IėIī’ŠĖŠČ—ģØąŠÛ+D¨{•ōŸÜUĮōíOeáŦHo5– <0ķņ(ˇĀō8ŊšüÂt%íõ“Á™‚gŊ4Ė,ž¨{ËÖ,$‹Ūņ˜Ãaļ0ō€ q“˙Ųŧ0†Įį:>ŗK”‹)š@[ŊķîuƒP<˜ QX*s1/ø2UĮqŽ>}2Sö%I.ũ­•ÖIˆ9O ä/ÉD#†'Ą8ö×dĀēČh¨‘Ŗg(į:'Ĩ›s g:ÉîģëzēŽ3g˙GŽfY—#čw"gS4ašcŒ*1[HÜë%ĪkõŊöŠĖ ÃÂŋ%AS‚×?÷đŨgÛ+āžÁC× 5ÆÔŌlˆšt6{&ģmž´áíĀļĒMé˸čô—ĸgĶĪ֝‹+ž+xœĸ ņxnâOץ״r‚(§ũzŒú\unq3eMEdžcr5ĀŒ<ãôlōŧlĄ;Ę6sæ¸&ÃķYH93ąƒuÎö3Q ˛XŠĐĐ­ŲXĸøsōŖc12_wŠKץ'#čB×{Oøė&‘ÖBųc0i°ˆČ}dtFÁcˆ˛Įœ•LÖ8çæĶĮ—Ļ˜zbFŅ ļšĖ+S•!]—Ā IDAT1~/YŨKƒ‘ /_gD jäWōÍkŅ‹< šžLėŽ5+͗WŦî"J'—p÷ąg1íCÂ5 CŠáĨטrTŪĒjˆžÔe¯ŧĄøkMÁ‚qŊ>‹Ģ)ÅyāÄÖuî>xi(Yëf‰‹&oķˆ1^dļhååi|戚.Ä ψĨ]†R]R' 3’úđKxžRnâx6îcžmg'¨Ī‚‡ęĨ!ĄŒĮĘgYg÷\EåXųÕ˛ŖzreÂX1åŠgĢƒ™%`‹ĄŅ^L×j ;jšÜdhŒÎĢÜ#L•“‰xôKžOÆûÂĐĄõĖeĩrƑĖ:“ĸÂ/v1†ŌÉŗę‹Ô’×ļÄÔĶJQČyüō%I1)ziáyė‡×û%]‰ŪøLÔĨ5˜ŗÄįÅŧ‰¤ĨũĀړ(ą‘f„/ŒîĀ÷Ī}_Z(ȃL<ôZÖ8ėl´4 ĀĘęš;`)žÆœ›PÖgęN’Ųõ$uÂh,Ö{Ą’2ŨČ`‹ČüLRđĖŪæņđüē­=m蕩ĩFÁ1 tn­ôv˙7Ik)FËׯ<ëL=‘Į45Įa0YŽ\lÅæãļ’&š‡n3˛Đ@#ĘĨ͙rܯĖQĐb~1n@Éĸ;“ô(Š7ķˆđ8Žģ]|‰ŗęÛeilúG ™dŗ‡ëš Ō›&›ÅāˆūŠ&< #'H¸E÷Äņ}.;ÄLJrîË(iĪëƒi uÒŽfڐi1 âČÆką¸ĸr¤ëĨ|ešT\ãŖr_%ŊũkÎ;mž6õ9H Ž])Û9đ&Rt’ÖdG¯?~Ŋ€åy@ÆaŸc…ÍĖUwØq^Ã7yAÅgɂiūËĻHĻ]ųJđ×÷˜)­Ž\cn+Į`æqė‡oī*ôŦ]û/ÍvÔ=vîÉąN)1Ÿg,$>ĩŦ@âr¯åĻ|ŗ\ņĮüuô}ÍŽ›Nßdīõœ{˜ŠÍ$@yŗvÖOÖ$Jļp œ;ifÔŲíN ŧČā‘yėËëVŽM¯ =āŠAÛŲZƨ/÷uŗÔŸĻ3ėÔ¸rLFéų†I #šŅĩqrÕKŌÉÛ¯YļŪ啞ö (Īͧĩié`<æAOoÍVmNú:FLbđ^™^…^|Âí8Ęá‘c—u¤ųël$T:Ģcœ‹ŒTåGe!k*˙å’ÉlbRĶ5)FÁ Ŧ­–g‚Ã20ErĄ§Ë~ģƒ^nž°ZŦŌëČŧû2¤7^•^…z ũļĄžņ×LqÄCÅF}’á&(DZląŌŽ„Âø5ÖšĸŦ1 § ˛(:ŗĘĩåøúŊÕí›bS“ũ‹ųŋ‡@nōfč\Ąr]*ēÃ8ė~ũ&‘Wĸ—e“ņydjÕ¨ČfÂYēžļ4w˜Q*,떁ŠāČũĶ/ɌÔĀ!ŋú,ĸ(éŅš@嚝RŲEÆ}ņ°Ãû5iy%tzą’]Væa8ė_}âųęfjjŦqÃÜ7ĀG9 Ļ–z&3öŪōŦ͇¯8ÄbåáÔVÂCäūé×DõŊÜcäaÜúį+/^XHßB{ŌÄDâ˜mEd‡c6ŋg…ĐÄÎÖŠS5‚ûįĮJŸƒ¯ķ€ģyd’%ģ<9+vĨ/˜_ŋŽāÅē_Ēīå,ļRŌҌ5Ė#c¨ī:z5éŊÂÎ dâkô2Afņx§ŗĮ  älŠ"‘ÚļE*7ōGŽā~Øī‹ : :”Ž %xú‘:6C q +Ļ…Ŗ]ûÆMZ“~ WMĄÜJ^Á( 0'â‘C?\0ĀoT^K{wšÄÉ%P>`Er[—¨ō6ī¤éĨĐ)9ɚÅķøüœ.ąˇGŨļŲ§ŊdÍ Fį,>Eņu7dû”æ~vUsõÉoÆĘ†’Ō5~,‹ÛûĢ]fŌˇpN% c@`Ē\ģĀHáKŦŽD,'{2[ˆŋÄĐīgֆ1á5ׅⓝũŌ˛KŠk¤ķF–^JĢf–gÃÔs†|÷3'älIÖ{^"CNcäîsú&ôüŠOYė‚…“Hž–ĖÜA,@w‡øg"ô‘y'÷™Û>ÔÍΔGū;›5ÆōMH=XĢØŊ*bHIism$Î{‚b~ÁS]áÆÃŊų53w´Ŋ~ŲģŊzÉvî’ru2zĐ:°îE‚€čb;å•ų¸lč­hdŒ¨úÚ ģ?ëĮ`Îcåūe$8ÃG§˜īš•ēt‹3–Đ |Տ9ą˙×ŧŽķ„Ô–õĖGm/Đ´DoĮ:¯ĻŊ1Y[ęĄn{"ƒųēž€ˆ›t÷†é?,”į]Ė,ÉŖqŒũ˜jŗ” uBExé7NE >ũiŨßd‚;1bšĪ§J5›ÆātBÖ{G5b€ę63Ą^›ŽA¯ĘÛPc'š}GžŠ„ûãZBŲĶS,BéDČūPm—ˇ˛—2izōk´lz ­œč-5ĐŗÔÄ8eÜ XxQ…/īWÆ đUÚAík•#Jæã1y$b ¸Í€×^ž1IW įŗÆP7#oE}d öCÛŨAŽĄđQ-¸Įū¸ŧnĢpĻ flüė D ¸‘c#ŧ9ųOYĨPa´¯Ąv…ô*ûh=¤ ›|Õš3žŠ›IG G‰yŅlûo#´\^™3†$×RļEæáËķÍmß­CO˜ã:[šøšįŖ͗ĢûĖ"÷›ÜŒ&Šų(%͂W4ßâk#%’ĨĖėm-ŦwsĄžäE÷“\–ęôE°ųéy¨7^™^-sÆŽ% %š@`æį_ÚvģŨ´Ũ:0ŽĶĄū÷ģ9đxG¯Ķ6Zúˆģ÷™\IŖ›b žņ˜]áC:[ôĒ\.oÕĀŗÃ\*uÖl FˇwĘxüVđ.Go’‘ēFYQĄgd><}éē›Ûģ÷XķēëÔ^Õ÷GW^m—Ķ5ÎsŽHˇrĒ5­” i‰ÕMžÅ,Š<ˆ:ہcLøæ+Š$ŅĄČėnũˇZđ ´šŽ+Bv-ą˜Ÿž@7?ĩ›ģ_iMÔ…Ú ȝL:=št™ i’QšœŅûfĒ{1ŲđQgķ.š”Îĩlšé-æÎIŅ4íí0~KXÎ\čˇŊ)įĶ”øŌÅ& ˆ4 ļwģģ Ņ%wŊ”˜ņ…ĮĄ?Lüuŧ?-9ÄE ĒÉ–¤Āĸˇ ×ŪŲũÖÄcķŠ1™˛z' CúeŌĒŧŦ¸ģËb0ŽˆÜ˙ļÛßęÁYĻ×Ŗ‡‘3|ĒНwx2Ō+ā>ķx—ÔÄŌķĘŧ­Fž÷ŗâķÃhKŊzyC99UŊ­ÍM >É/06›~%_ÎDŃMŧIŨÅæ~Ø˙:xiė Xį+Đ3<†ũĖvĶvGĝč/Ÿ.āãGŽ[*Oøe#ũžžw\Ë(œ~2sLĒLyĖŊI­ö<Ëâ˛ĮZÎûjŪOš\í–ĀËųėúíR_ß&ŊžöũM#'ä$;äP÷Ãṟ×ĸø‘ŸÛmÛt•ß§čÁcŋķ|3.SjvyBĻgųšHõ'ĢŲ-¤ęô&šDH/ŲBÉ(VÕŠ‰ ¨ŅÚącۛ§ˇPō\ē=7īņ ™|0đx8ėéĶĖĀ?=ĩÛÍvlQz›0˜G0ÆáŠžÂĶ™ŗgšëĀ SūUXRÂÂũŠ&)Õ-59Åz…ŦŦØ ŧ—Węîöųm+uúÚCßꡂĀvœŽŅCŠŨÌŧ?|ÆŨĪ÷mG&ŗËáFŒŒ‘ĮŨôūÕ’KŲLû3xú˃X‚WÍ&#=0Įdé‹0 ŦáKËä”ōæVÃę4?1mÚˇq%Ëežæ%ÃãС C—Čæ85öŠ• ĮRž†ÃGx¯$qtäģ/‡‹ÆĢžŠ˛ėĶĖÂęLš_Œ\ĻFĨŲ­…ēđ‰šįŲ~ŅĻÛ |/î#žO¯Ŗ=…īđyÜ6c“f)ŖŸˇĮL=1Ė(ÛĀđËūáĄe†F‡ųpö&ÁqÚh#Ŋ—3eØáˇ:2ƒžXƒĪzPđĘAÅŸoŪŨģŊ‚ ũļ›64ÔPCꎸúÁ;y#qæĢĶĶĶ—Ÿ€†šĐ0ôCū GˆˇHĩÚäÂņU?–C3Iŋ…ęį˜DĢyŌéôŖ0W`~ô“§%Ą™Įa8üœļįwĪ7Ôt]C]Cú÷ÃX‡ū‰sÆ.āé  Ļ%"Â~8Œ¨wjŗdu‚Č&d:ķ'M3$d/0æzŖ(&á“f¸˙šãkH6@^Ā<ž5x× WÍCõËŨ!4Ô ĨŽyā tUöiĄ<Ôŧäåčb™@ ˇ‚ÎÔÍáéœč:rĀyŒ#üš|ûęK‰ĀĶâ™Įa˙Gĸ7OŲĄ^°Đ`É|'Ãļ€ŲreŨFp zĩŲ[Úę>–đÕ02€ũSƞyq Z#^^A|@OÛ3sŋ÷bˇė}kējrÕSŅĪ ˛ œ/õeAÜ(BĄ8s˛Wé’ÖEĶ&}ÃËN_ŠĪ˙ÅŖRÆãļDHŧs)Ã€`ŅA‘yž ķߛ¨íßĸīIÎa’RDĀÔ=ŗ,č…d§ö’ũ×ÔĒ ^˛\M­É•ęVĮō=îŸōˇ_ˇ„už#sÄw.ÔOĘ<­92ãáoCjčw%zsSņBŋ—ŌņĄÉ•+xnë-/Hß/Á—õ0ø˙´âhŧ¤5d™sN˛’ŗŠ9#˜yØ=9ąė fWŌŪõËx>?™úųZ7ņš ˛KPß&PkĖŗ uoxîųđ7_ĖĶ/7aMzT žųmsĐdĘdĩQžŽĖð{ßĐ<­éZ4æ‡eqIũGË´`x.ûVęˆYåˇcÆzéP6ū—­œ4T0đ*ŊGßą|ŗ8DŒ‡/Ī3ā}szÔr)ûœ4˛$Q5§Äú`ku8ą$ë™ÛԘLįpvÁų–Ļįf5 Ԙ N‘×Ā}ŽwēF[[,ož9Áž*tˆ|䁇ŠŪ0ŊJæ|­;#uFL9fũŽžDh-ļ–PN&'ąüŪx’ĖÚ2ĶMNøĀtĶšØ’¤Ą$đ’â ö0vg[lziā_å,âîqü¤÷JaŌ›™…ožg•ž3I 6ž…+ãĖĨô¯=OĐMãČ?^ ēũ) ^‰ĻPž°\$ė@æ â5ŊŨ¯ķF–oŪíģúūŊKĶŌĪĪŧ fˇŗūîrŁÛnŠīĶč2Ļ[ƒÕ¤zÖÂĘōĘ|֜Î‚Ųą5r?Žģ_žņ]Hī•´7}ĢĸŠs-œYÍ^z-é5Û%6ØNËÁOĮ~YĨZsâŦ°4ҍa¤ėQ#JĨ‹ĨÖųÁJ—yĒ•}ČÎÂxßžŅūf´7.~ąT4vœĐā8}TˇšŋÍ⟨߹`FŒ1F°cT_ąĻŊĻÄ:TI.t4N)"šE7‰ÄÆ7!ģÕûŨ÷ī­Ö=ŧČĻmÁįĢjiļ3zĸˆœQMZ…„ĶNOŲf\°ø‚ô,##€É.%¯…OĀŽwJ ÂŠâ9r? ģ_žgšæ[¸¸ŧ’öŽŽúÂĘŅ5 ˇ˛Ųí֟L7^ÃB'jT ģ3HF}œŋmŌCĶų.k35#ŗ{9å^ę†Â¯Í=OŊÃį ŪøÆāŊšs^Wų [@œŌܯ†ØÍ]K™ö”FcƒöēHú)šĢÖØ÷"j7î*rš4'Z8MvČMZHNtŠ4đ8ėŋ2xžĮ Cq]zõē÷ŠúįßXĀlšno9īS]¤ėŲ^ëęW˙4Wx[,|ãa?ØeŌ/Á‡ ‡ĐåŨqČ7Ė4ķ͎í]˜Î5öŎ¤R“øÁ"Ę6ZŽRˇ7îĒ÷<đ™ĩ–EĮ“—í˛NKœ pœx;ŨÃyúĩ% ĖX¨ŨņĖ Ô—Hī-ą{;Ú[V×,ŅĖÖÜųTäīēĻđUEéeĻÉb ¨›RIsŒ"›ķØ&ÚŪL°ÛÍßP‡T˛iév>2gŸŸLķ¯No‚^6lœ‡đjüIoĶRŨ!”Ûķ%s'L™g~6iÚũO͇Ã08ëwųZę( äG!Ί w‚Įî5C°œžŊEQrĀĢÛn[{ëú­ģ:!čĐ!ɞŽüĮÕxÖyāũvĻĩûA:Sé sÉpķ™ã´Įo ßh 3=z CĐeŗ4kĩÍ-j‹æ¯˙ĩ4w6đđ8p<ënČŪėæ tā ŪOÎŧ!|ßÎ9ßv†°!ãD ”{îqv?4‰™ĘīvMYšKķXÎÆ.ŋėd1°`&öiôĩĒ1 bwŸëŋ͚|#zsr¸ûé‰ ŲÆŨ<ÃČ>(N!~¨o2ˇ'ÚöœūRlīælÃã3Į¸; g•‰zŋŪ8ėũ/s6]ú62žŖkÎ-6p+Ķ~Ķ6˞—^(ČŲė˜ž•õʅĶGā~Ūõä°ke˙ΚĖ.Hvvx/7/ŧET¤ųôŨ´õ%”.Ÿ.Mb €įacÆČ0ĖņM̝m 3YÆa–F†ŨĀ1fēšĻ´1<š‘€Įņ°;{ø Ō5čŊ­´;[CūXß­Žũž{æ)ī4UŒPšX9Åz]Ūį;WŖíäÔŗî°×›歝YhqŌfxä!]*ûŨxįčŅÛāwY3'Ĩ‡QĖÆPąĨXãōŌ—•ĢhŠ€3g;á:@úéyeėœŊ4ƒĮ˛ŠËāaŸÅÍīßåčUĻāĶâˇ\‚Ę™MĶ43GģtAÍl1aĩsåĮŗõˆą>ŊĢŲĮũĀļžÕÄg„ĮÂ5<å›ãđœī'ø.E/Ŗv!|¯%Sá˜!„φo8<ēד~JƒéLÎŗ)΄ôôPųRƒø0æ+GË_]öŒkJ˜6šTļ_ƒŪRÅēlŒŠürAũįĘ]’;Ŋ1Ĩ™™¯‡]͐ÚņķDYčLaįF(߯žĢįė'c÷ ŗ‘õąÅɤķ&F„pY1|o‘¯ĶžŧWO>Ūˇũ\8xWëlɒ)P/=ˆ đäQ›㗖ˆå.“"ū6’šxĒ^8bäŨĢėwđi)ēpiē¨ōooĶzk68ŧ nĄ’It~y:ëģ”R<ė‘SÁõčų/øXDˆņ꾝–5ŌÃîWéęwīBô˛ƒęˇúrc3ƒđūyƖėJ-Uv7āaÚ¤ōÉl8W}vø…?ļ]¯ ›™ĻÃû‘‡ÃîŅ/zß ŧKiīĒJŋ™mŽ æĩãaßā™!Ÿō•BéI™iĘaųpÎ$røPĶŪļÛĄõ›‹Bw‡ūYšæÄ1ûuĩŊ˜ŪŊo“Xfz"ä~=_I˛{ĒáQã1ą"•āŠAå|1†štęIŊÜJžÚ]wˇu b÷C؝ņ;¤7Eī[ ģ Œs6za:,ĶĘÛ€ˆ4nŽ‹4= Ø=™ˆĐ€0ėķĮ›/jéëĶīÅ9/ëĀõ•Ä—ŋ•%ē­"f°cLƒY3"‰vqÛ^;‡'@‚K4yc^Z\WüũŌ[ĸwĻŦKģ0ŗqEۖNË3ûUĻ@‡œcϚ—@î ŨáÚvÍ`<›oÎwJŋíŊYn7˜8#ČWē-VåčN7wDg—üë+>Ÿ^ŒĄķ]Áû}ĐģŽ gV?Ŋfzē¤Q­ũ÷ĶB{9Č'ĩ—SŪ|ÆŠûûāwˇs^”JøŠ…Ī܌ˇ­UIųĪUÁ E^ī Æú;āmũ9—Ú|u__ ĩ‚nŸ¸z Š&Áų­‡…!žö9ŪĮ’CÎxķÍß ŧˇõƝouõ”.8ČWŧâ‚#ļíR4ã,Å,”_Ž{1šąGĐļsYsfOāšUī;V8“Ū–sÎŲ0f ŊVq7Čnnց˛;’ŸĸåĖÎJįJõD+Ŧ3lģW|jAĮf.ŒÎī›ŪÚž>ŧ7= vYtšLÍCŠ2WąĘ4kfŪrD—ŋ‡2;Ņwš¸’ķũaā}Šå¸ūTôÜ>l’sQ] Ī=Dĩ¯—“Ūž‘[¨ûķnw% ķöčß5ũ?^JF~&OÜũ|Ķ­ĶOœõ6\ĸåÉ{铝XgށūųgņâĻ‚Ë,>ßß[ķåôŖ'YĀöŽ[S ōÁ2ŲķØÚP3_*ŒcŒ‰ĶúŸÅWt˛ą °œYô~7‘ķAī9ônģYʡûsã䞐=›#‡Ÿ“3돝Št!âk|ŅÆōû¤G[ĪŽ>UŒ °ŊS ė’ĘĨąx“ÜgY›.Ļ*đw÷—Ũ {>‚ũīIy?zŠ_r/ĩīnۅ@ApRftw¯G$#6-Ž+#0ÅŸūwųCÍtĄûŊ6aĶÁ9--ķOŪŪŅÚҜĐPÆy4W˛Ä;)q\˙˛­›aũpļmu…™Šž û]ĶD{ Š„ô@Á ”ĶT-xĨĻāNœ—īFĄÉhŗŨ-¯cđĻõūūéĮĸŊI"ÚØĒW(ōî$tœu´ŊxY܌ëM yķũĪˇë˛ŒÕéBo†÷$đĐ49ú€%Į‡Ō?Ŋ.Mˆ˛bĪyA -ü­9eÉK^xūû¤=ãk>b@ ˇŗš%Ī[2M"ĄĒ˜ĨDzĐA ĶcŌųe§ëUđũ˜āũ@ë^MŪâŨloHĮ<Ú5[)Ž\ņĸS#Š’suqmžr7ĪRgČŽK‹Ū~ڛ÷ņ#=ÄŽŧ¤Ī;VZ°ÎB°Õ/XɄP„Â’mžv&N fŧīđ~ ô–’E)šąÛb=×x!7y~å úåō?RJwƒÄ>íņŒ0ôÀ÷c wnõ°šĨ`Ątŧœ9—|eļ ÔVíî&.ËēK’ŧŊ…ˆĪĸv IDAT§ŦŅeOI¯<ËSėĪ(ABÉË˙ĖęˇÍRįEōČ,´ü čÍá—C]5˛R‰ čĖĶĨņ̈kŠâKȗRfũoƈMmq,~áūĮšū ôŖ W…m´éXˇmC•Ž0Ųw%wW&Ȑ 1Z mŧZ;åööŽŽQÄ˙pđ~ ôÎ$wIåŋžhæˇÜ§FÍĘ Ļ*4ģ{/‘ŪŪ„žŽb¤É§‚ņf‡1Ŋ—ÄGˇˆbs ˆÕ-īĶôƒXČ,ũ@čų¤ƒ¤§áÆÉš–¤ũZuH¯ŠpzÆĄÜLû>…ú‡8mžI?(z:N•|?3Įũ:˙,ÆXô‡É;ĸV,Đá5ũÃŌ„Ū∊÷ŠŖ#ŗŊØUJq Yž5,œÛĸûœĶ„Ūžät7I^™{ą°ˇ$ bē"ĨxĶđ|aYûŽÂ_•~(ô^Lz%ĄfwîU&ĐYYúaŅTŨqŧ)ė’~0øūG 7#uN™_9ΑÁÎĢ nꞲI?]<‘Ĩƒ^—´wąoūG įn“I#B(ŋ§ŧ2û" CÚtÕģžßcīíĮF/ßúiŅĝœRY}™ƒ1"rRh&[åõ2'˛\ŸíãW üąŅK‰pō#+ĮxâëWTbņa"X ë|ëd–Øīš~,ô–؏&k¤[dĪ?+OŖāˇđĸ¨}Ņ9ŗ71õ”™õ1Öú2ŋ‡‡āã,ļfÜ7\l…×įô)äj4ūęRÔprątHŗ L ÚÅĀ$TdÕØ?~éí=īGŖ›ÉáY#?ŨŦCÅ Ū–˛oûLų–“2Ņ%{°/-iŗšč›Ļ˙´×đ‰@Œh’@ČÉY_\iQ‚zŦō¸ĻHtuĻ9Ę+P=O~x Ærŋę…Ėŗ/ũ@Š’ėúĄEÅ;̍~BeFą\§aÉ|¸âō× Œd/sĪ ¸ĖviÜ­Ŋ* ‡‚'ˆęIÄSøĖĖâ”ËÅŨMr4BZįÆŽŠËr]|ŗĨôZ~(ôrcjĨjˆÂũPē‹Ī­rÕiZvĖËøĻ3„…:~Ëô] ˙ĄĐ[î)÷#Gš˛Î$oe‰ĶĢ{œŗTDaúŸæįäķÂ9ĮŒØų]ˆī•é‡BīLâÁAÉ/ š-ZéöîčR6ļŽÜ˜ŌâgŦ“‰A’ĩJš3ļ˛WĀ÷ ūą4†×'sų+žå”ÅLęH˙Q͝ˆļ÷€Îč3ąKleIRĘžŌbö*YįûĨ‹.[JŖÜ––/JfĘZņgŅĢØNž…æ´ ‹bHj#Ŋ˙ëa€Ųیg†é>ŅŦ2X6h:°y]^øáúôŊЛmü7¨s7äBÎËŊâ aûX­g Âúã—˙´'ÍčƒË—đÍɗSm˙ۘs’Ĩ…_¯,.¯_ÔPā¯ŋ*+ŌKfąiÅĨ¤Ŗ&ĸģOwé÷ŠA.\ËøÚ䏚ŊžˇiËRYĩäk%´Ļ%Eƌp§ nÁQÉ΀ÉwBD `b"ŪūëaÉFæŠõm.áūæÁ;ô&%Ջ{ƒņÚõ/ĮŲLžÔ:Ø *zb—ķûH€âFųsąu$!Žī><|>×{ež˛Įŋƒëį[qΚ75“ˇ1s w]Hũ ¯+ާ>G2ŌKö-ūĒW’QŒP ŸnÎ5q"ÍæT÷îĨŪžAz#ôĘqŸ…N~9Gí3;4é§.oÕYšQl‡×fËüCr&Ė"„Ü$ĸõĀ7]øę6UŠČôÔáwđmŠ/ÆŊ97#ūŦN/ĸEXëVë‡5…æO'Æ 8Ĩf¯V§Õ €SsĐHá|:\=§€°˛g+ųrc0NĢĶģNĢĶģšU’fūcļRÄĒüąčth€FZ˛Z­æKy!-ŒQ•Ū„öü¸_0Ũ.^kmš7‘Sž9JĘĒ6˛ōmYÎ.°ŲʙÁD´žũø 5Í÷%Ėüč?o2]ˇY‘fš’ËÆč ¤–’đ^Č܌x…ęˇŲ’ėžÅĘĘU§ųEoNŌ<‹AŒĀáöãđ%ŨRsFö˜ö5 5Ô:•ŠîG~îg^m^Žälúvô\ —°aģZųĖŪͤ ÚnÛ@”¯Ē$Ŋ-#Tī9Ę[jŖĒÄ'—XRD`ŅÛĄ?Œússąđڛ[BCMhZŋ]2‚G™Ÿö“‹•´ŋ¯ yöč<Ķ}mĶv]#Ŗˇ[ČŖ)~ -)1Î쇛NI/BˆaB‚)ÖÎL2CYvhâü/Äv-"­q÷0Œ™EĶ2#Ŋ"Ĩˈ@ˇ‡_‡sʝģģŽģšmĶJ-¤Œk)ߌÃūЏS8ĨWÁ÷ÖŌîîöÎúQ iÜōpØ ģ/ú]˜Å+`{ŋm‰@đÕĨzř šŌĘM]ĘŲ(jƒ‰Ā7÷û§Ü:?˛;Eåö~s{CpölķŊp@ˇ7‡Ãîp˜đúôî•īMąk€nŗŨlÛV$ *g`Gæái×īėž:?āí¸ųy{ĶŪŽƒ'=éĩ¤˛5Đ! & h}ÆËfI7‹ō0Ļ5Ž|<î>˙2äÖyē(#ĨE<|ÚļŲų™Ä2ˆ`æáy÷ëķ„„_q´ķ•´7÷Zw÷ĶöĻ큐"€Ĩ#Äč6†Į_”ūL€Š›ęīŽšųųžmģˆBė‘Žöb3<ę­ŲĻĶ“3]¤JבElo7ÛŨK‘rcîūōВöšĒŠŽ˜8DqĀionŠ÷[ŌĢЛ{is÷ĶũĻéHģQo›0KËģļÛ~ō›đúIÁ7ŸļmÛ)ßToÛ˛ėe[įŧīė™’:VƒĀëxŗ•ÛÁ‰Ģ††ŧ“€˙~×JäĐŦANk÷\”8DĻövķųiąÍ—ęS¯Aon/ááa{ĶvČCgšü+BLtŗųŋžrIĘ)†ģÛMĶQ0G*&øTé.āĢ;NåįzÃĪ“_PŲ ŨöđšĘ;I1|ø÷Öi(.ô—ėâÁŧĒ"Bd4Ô>Žķđ]Ŧ ŋŊ™WîvdŖXĢD&1ãæā›ĄŧMÛtÖDč ģ X¸ĀüZĪI™ß<ŗŠ(ųŌsö‘I9B`ĸ›ÍËQÆoūũCGa-$ķęë#ĩĩ‡Cˆ@GÔŅã0ß喌ëíœ3āmūúķfũ' hE N|âbO.Ŋã€ÕĒY5īÖôjüÔôéÍ€í§÷mĢāņ ģ NĢæ´_ƒĶ §VboĸÕę”,„+ũ—Wā fNŗQ'œ°:N8ˆW8+­wĩj€œxŽōũ„ŌâŠļT<ü¯ûéļm[ātЧŋŸOf€ÍŸp:­N N'œVÍiĩÂęÔā]X: c..YD— Áaquöí§‡ļ% TO0á°:Î YYˆ˜ÖŨÍöŗ/ĻúĨ”ÁÛJąD&øDˆ,ËžŗRķØīų˜ã‹lmHÂk4F?e­5ЏœäcˆĀvģy¸ë#:éŦw)Snh@$N×Įö—gG}fךxû*ôæ27Ûíæá†ˆÂ$ÚķÄuĸGGL´Ųļ˙}îtŖ€'ã“CĀGšKIļÅÛēSY^oŗ*įŸĪ¸wV d$ĸ|w5š đá§í]kØ%*üŠĨe÷Í{1Ϛ¨iÛ_~+ËøŪÜR6›ŗģŲn7­¨ "¯¤šˆ–ÎS ĸ¨Ũ~ų-ĸ==xD](îŽ ēTŒ™%„¨/,…öČ>\"C^ę į¸RģŲ<ΛŽ_L—Ņی]ėŪžßtô§U U­h%ā <ģ3ܜ°:ņt:5'> ų­ÚŽûV˙˜¯ų…–(D>%Qō$‚f§•ļëônEhō†ģdRIsN§SúŦ9 ¤ā´ZN'•IWĢ€Ķ ?žŋNģ>}zŋn[ ūũų>IM+ĀČ{…Úb=ŋ[ĢUx×`EhVĄ}ŋ>yú\!yžÎRÖÜŪ<ÜېX4•âŒđdz%-5ÍsˇF§ÅŪ˙ĢIt÷ķĻ%UôBä#ĻBƋģ BqĨzžoÆ šŋŠ jļû§Iš7ë5ˆ#ÛõoėdÚd7XnSTSĢcĸööËįŧ˙rųnÃe´W-zÍç?o×ëîOĢĐĐ*4´­‰ü-ķ|ĩZ­Zeg’æŦNĒŨœNīøÔŪ­đ. /§Ųö_Ū'đprāÅ€&6ĢĶ §§•Ž1 aujĐ@H;ņĨ <“…WZæŠąÅ¸iĸŦ{ĢđŽßOÄ׈6Ö|øˇë5­ø8üũ>! ›ēĒĒ*Z +ICN äé„ĶģՉV+ŦVá]X5aĩ^ßvl|úrâģŊŠ@ģúŸ6]÷§ļiWmc؅†:1ĈŋUƯ€§ætjˆūą:­Ū=ëËíŸ?xÔŦVā#`‚Ę.ÍétZáÔ`ĨZAĐkŒÉ6'ÆJ‡TgT.+-ķ¤ŪC+œpjV8!ž#āæĶČŊÄJĉŸ~ÚŦ |ŒĖR&+:+^ÅrPŖˇZ!4Í §Ss’ĻŸĀī°’)žz4Ģļ]ˇQĨ—MŊ˜‹Ōͧ;噓ãtb'tėC¯iĸ,īÛlkņ‹ãPíĮ- xYW(RuæuéĐķT„¯Š#Ž­Ŗbeg€ˆšm1¯n~ÚŪmÖ žgĀÄ"ŠLšãmÔÉ×[7(%ėOfĩԄÍįČŦķMŽU—Yl?m7ļ”ļ€DĒ"TTÜũ#>ɓ¯´Ļu Ļû•M$pj5/¤5čT¤T1wØî–Ģ}ø¸éց K^y}jNē÷ûã[Ú^e•ÉNŧĻĐŨl}ęq|/ĄWũŪ„›íũCĢģČnmÃSũ#¨Ž@Œ}°ZĻׄģ@7ã°û~dlT ĄUBÔŨĨÄ0ßĢōî`qy\[v2ĒžRŽáJÔŨáË^Čīį?o×kĀG a—T~âJåWņÍĪoŨÉÕvE× vAÄD›ûĪ_žúėĨô|įŅ+ín6´ŲnZĸ@SąŠA‰ürĨ*Œ‘3&~Æ ˆãš°FĮũCĪcģ1đJ”1}Qą“tšhŪŽŋ0ŠUˆn “§u Ø4í~öãöáÃZƒ˜KãŠtÃąËUڟÎ[fíŧąŲɐ…HaŨm>>~yÚ_jr9ëQôûūaŗiێŌVd•˜Ō´KŦÉnˆ…´;˛Z°}h•°&āȈ=āĄ=„ˆb/›/6LEŗŌ¸tŨœ”™9Å%˜bU cŌ¸e‹ ŽŠTaäÍVn,æ(Ŋp<Ų6 î6—ŧõÂfƒų–ģ€ų"äæxäŨîņqŲõŒįĐsmîoīīŌÆyĨÉŲ2ļSŗ+ÖH7Ōuέ'…XVf ƒNB€šYÄ6}ŦštíX@OđĶ–F!Ąįæ^Kzk"”āi[؀7N( 0l4ŠyŽE*p ˛i.uōņđåķcŸũ\–ņ;ÃVŌOÍíŨÃŊŦØ6×ëîИ°KÚËÅåŖb;Z !˛"Ô­ā8TĨI*ØtdÃaڇę•Bœ.-lŪL]097•=øÉÅē­ĖļŒ“ĻļMå‚Îl&Eo 7Ŗ;ˆÄķ…Ö›íįĪO9žŨ"|// Ív{˙°YS  ĮŽ“ĀȃâXŠJ,AGāĪēq\¯e.bÆ3Æ7xrĖrĸˇŋ9Ži•rĒ6Ë M¤<Į&Ņ`8õ'ķX‚Å$Œ%[&uņ&/ūäé!|“‹]x†Hb ]8Šõåŋ“¸ģ˜^DoķņįģÍz ĸ@BDV.ÖP5øŽzÄc3ĸŅMe6ÃYŧŖÎlōũŸ7B-†z™Ũ-Mų­ä åŒ!Qh3cš€ŧô+åEũ71šĢ¨ËS6Kq¤ēöös\$žeôä—ͧŋl×´†nqgú2؃PųĸĢWáKĘŅ`´e9Ûm˜üĘ ›ũŠũäā\´}†H.ž\ĘÆļā(¤É$,xŽ Ŧĩm˙œōįc!Č”āšŠĮ”Āa,Ä`ļ f›ļD|\ĩ žĨ´ˆžü°ũ˧í:ŨUlE§]ŌŌJ¨Ū͔úcė LØĖÍ.lC „(™—nsŒŽÅ]šrąiŠs XŗíįãúJžL6sבBhnũ|HŊŸKŗŊûũį÷ëPšļ'žĨ}"3Ę#Z‡Ž˜xĸ'3V¯8ČTčŠũŪ€?F„ ēmMÎ×sŽO\ČŒ¤ęrú9ë9å‚nkŊĪ5(ū–I;ĩQĻ5+=æPvbŠe~â (2č˜8Ũ~øųËįŧ4‹ßTcČĸæÃ§Ûõzmˇ –Į’čË >ûįzP˛šŊëŠ8-Rp^ņü°Ĩ#7„€u’Ö8­åZ™NxNŋG›ĩ”>P9į‹$÷aú™ā ”@WâûÄģ,Š`UhüäÎļö˙Į•˜'ŊyZ ūG Ö.¨k"0sd>~}|üõŅ~œ 8A/w˙ķĮûõē[ĐåU'*zÁ|Œû§ŨA‚ÍÃũûĩš—Eåô {*"4:ŸIŅ\ęIJđk!ĩė<|ąv“™Ņ#ĄyĶÅ|PˇhcŪßãE@˙KÚe7 ‘9÷OŊĻ" œîČ Ē\˜"ôuÁGæãņķ2~5z6Z÷?ßßww´&Ęzp ÎÍAcÔxÃį/ĪXOŌĮOwīŊi‰đ¸Ž¯‘Įl8*ģyĻdô\/d‘1=đ|fëų˙í}͏fÍu×īŠ:§oÕķÕ3=öŒßq]įVŗ8§>îĶ=ļ%‹]ŽŪˇģįų¨{ĢNīß9ÕÛÖO@ `ÃJŅ0ðąĘĪéøņhzSŸÛž$É8^ŧš@°!OđDˆũĶûPŠęŧ@"2Ęxõūõ›â=@ËC× ÛR:Đ"1D€H´›ˆysúwm.ג„O~â“ĶÍv3lNNŸînīîJŠ.ģŒ•Ŗė˛Ī>;äŧĘ9sÎwFM ߗtöá&ŨËj įķ Č÷€ô ‹_üĮã̀ϭŗCvŲg—}FFVDÁĐ{d—=üŖ)iÔ4c[Ųî3ÉYîr. į2Yš2ZōúdĐŋŗ"䑓>ŧsšˇžøq…8fįô GÜč Ä9įåœķŨ•Đ ­œĪ9Ī÷ķaēV'++įō ΁(į $HEˆÍY˛ĘųnEäÁŽ×[íEŗĀK,6?öęlŊŲl†“āīn␠$â␓9¸•AGV€Ë9ûÉļÆũŊpoő'w/ŲAŽÄæ/ūĶ_ũâO˙ÜëZU➃îxdäé`)ZPË€pđēŨ.~–{jE?%YÄAiMpŠŌ —ëㄈ#ęee&‚ī ˜WŸË€÷ČČx_dæn)[FȘstB'¸×#čŌA‰#į]^Áym5É@VŠŠč9¤Bŋ,yuįAà Là %š_â%zę€ÍĢ/îvÛÍNN w“H>äUÎ9;ũ_ā€œsŠĀsĀ y•áVWUvķáænđƒŖUÎYÜ}Oŧŋ˙;_:qîķ{ķUEę8E¨Øō!‹ĶI8É.gŒŧrpû\ļ9ā Ģ•˙W0bArš;xG€¨°žA~+GŌ†sG=—‘se,ĮFPøŠ/8r§U%…P>ôŧGÎå|w'+€2‘'^ß]圁° îÄųėŧsŪ98‡,9)ņ’ŗš/+ ™˛wŪ­Āŧ:–ÔŖå_áå'›] ‘0M6TmŊmŨZĀŗ†ÉĶtĶbljKũĢŧßlÆH5ŌŽ/€‘ÂßûĶoęÍM'Y~ž›ųĻl_ĮŅ9ëÕ]/ÍËįNJĐLHŅo观ZĐ-ø IUŽ´ŪįĢĄÔėĒ–S/YDd@Df9LídąÃÅāoM9& +…ÉĀ#ŧ4élj˓ėÔǚ§ÃtœĮī~ûO^ņ8‰Ôj€€ˆQ 5/?{SYKËÍAâŖ>íĀšũŊũõ?ž:JēO42Úŧ')–/ŋ%aaŨŲôËžĩˆeA 5ÃŋÎVmĐújG<ŅøHÅ~¤’ÁûŠĐ–ĩŒcË2u‹ ‚ˆ\]%™‡ép3Õܘ^Ëŧ‘$֊>æōí˛UloĢX °~!¯įŪáõ=ņ6/_>ŲÅà '1-ęŊ'Åf ĮėOČČ9!įœ2Ž—õaa´UÍãˇ&hrß1ũę—<˛sOWŸĒ¨UõdmčÜJ…E…™Ņâõ#ä˛÷Čšî–€÷pÎQy!įžxŦ`D6!—UQŅ Cė?IwZ†ANŅ;[Ģü l&‹ gGîÄŲ|/gHAē,2^\M—ßûđöũûĢ‹ūHFĖrŸWȀ'īœsđ`ÁJU‡H>ŗ–pv Ā;aGĢ{4ŨŖõ[ŖîįæåËũn'™ÔdFÛ˙ "^¸Í """ĶáŨåGęLgęx˜ĶP˜ōë×OpÂöâŋäÕõY°ĄâŠ´â‹-+Tq‡ßvÄŨ•šŒ? ›g° O ŠYÁR‰6æĪî,˛dJU=rbäęģˇĶÍAöYš¯1oPí8ĒÉ)+#+¸+}L“z 4F"–=æY.ēŋnš6¯>9ŨÅFšęawŠ‘P@‰7ßÉŪOë#âU¯nžšŲ  D}—'mũĖŋųęŋ~}ų$MąQUG­‘zmÖŅí7Wčŗ ĀT9Ŧƒ[Ųl*ņÄŦ֜EÄJ'U6q†ēa’%¯r>ŧ;ö$̇¸ÚōÎ V9¯Šč¤œūwÂ÷ÎŨƒ_ũÂĢËs8r€ķĒmÔȤâô9힉Î"P;b9û¸Ú”*ä į ¨ääZīsAĻŖÄl3Y‰ĮžœC†ƒã•ūÖi–Ŧkj%Û wΚķ›â§p›īūÅ÷ô6G>@äNˆV> ėVœ÷—áVŲÁå\į>ų”=˛“ŒUÆĘ‘ģΏ'šäŪ&ÜÄĪæÕ—N÷!†Œ2%‘>×I%^ūāT4?D~{ûą ũۋ}KûW #Ākbm‘ã1oéË˙˛ ¨0œL˜Ô<°€å¨KŌr]:bščŅ*Uî^Ši<Ļü!&5K€ĖâÉ:Ŧ>ķįk‘ĨŖ:CãÍ ßZwäšŗ˙학H‹Ī.õ7WQÍŠÖë$`ŦÁXŧž(,íĀáĮžøtŋBDēŊģK"cFÎ^ ļԞЂyx/Ū[ Xá>'™Ž˜¯†\Üj=wĢ|—;ģeū'€'ŸŨzûŋŗs€ËŪÁ“;Ąa`VOËeĢŪ@^ÁģvÁĮē‹ž”}į3Ø{đc=jkUh6ĮJ˛JÍ :†wĸĨsDpî§cũĻS'/׊ÔģĪēqōáŗoŪĀ|Åųd8‰'fįsÎ{ä|'ĽėÜ*;—‘| iíJ^Éʑ[!{:™'kÕ`›Āūåŗũ.PLĸŒW´8€$(NVG¸—ZBÛųpĖ|3x@n.6–ÕZ€ŽŋÎ `N~f¤_ūO° 8˜ ‰+aēŦĖJ%6LR•ác|X,ūčžļžÕąEÉ PėĒŒÅvŨČFx{t{š™†Yfā1DßžúĄ54*H‰â( ˆÆIDAT¤A×ͧũ ŠÂáĸ}āŸ=ßīĨiB’ąTæYFÁę?€˜ė$CP”Ͳo-VM¯Ų‡‹ĶãB°Ų[ž”3+ūŨ?×ßąt‰€12–øžY/æŲé|é§Öˇš-âÅNëD=!ļ9āLR>āĮÛ(†WÃ˛‰ŧŒWÂėķch(lN×ä‰ô-;ŲßŪSpŨVŒ@ gšiĶoNÅĶĩųĒ,Ŗ5ŠĐ7ŗŗrRNÄĮA‡›MPÔ,õ&Ø\ĩ'€ŸØŖv´ĮBĕYģ,SzEŽUĘ {īØ6mW*Ä{˜TlŖoAÛl™7o+cŋ§ķ÷z¸Āáëō8ÔÃųv>¤ĒŧŠ,’ˆˆ…‚œ}¸@ļŖũf° $ŌHg(XƒáČ8Ä.k§WØLx˜= QD3‘TōÍ'Û ĩ^TŒ?ÄJ‘$Uë@ër%”PK&Újdil_=ņ4 ¸äŧÎY ÔwdD}YĀßiĻXŠ2N—įŸÍ^ãŌ\īnΞmd“Z´12Ēĩ¤} IũŋÔF„XálD2+&ĘÆļ!2˜…1k›EŠÔû1ąōūOqDLû—¸|tŗa–Ž(ģÅØūûoÍ>uŌåg˙u÷™G,2ŽĮé<)A×´Sęl*Ëü╗–ÄĢėĖX¨ÆŪ"îb$ō—hú|Ä4Ętx4 i×ô^žŦûg#ĢžĢ-ŠH…Ÿ0’†DˇE„(ŽezŅf¸Y+Bj Ėd“āËC›ÂS ‹Ē*OPá7o–yé IąļũË˙ņŠēđŋũ¯˛ß¨Žë‚E6Q×YŽ͘yāĐô2Öë´Ēšž=™zH:Ÿ ĀZ(B€éāđÁ `ĘØĖ ŠNI 7…Ą 6Ywõg—‡ŠNq쉑˜o§|MU÷čV2Ū+°¸ æT ™ˇg§ī–lUŌŦg&Ė۟A2Š]â2Ÿŗw܇b*QĮæ÷j;pcI“­ĀG]ÃF°Nn.×ú¨īSXEcĐXŊŒŋoRTŋ8Ũ~°ą?vMØ‹(ôÛHė'j^)'ˆF"mž_TꝝíˆŌteĖkŋŠíļä".-$¨p $‰$†įĪßËCÎQ?AōĢ~Nđ˜1ûšAZ3A옊1ՒGúR÷YûņúÕ}H<[/”;ÚpfaPÜ=Ųj†kNr# ÔDDMtIŦ‡ck d× YCĐGŨĒĢP¸hŒ @QöĪonī˙“/ŸlNȧë Éâ4–ōĘÁšœŲƒ<\vXÁ9Ŧ įŧw>ÛgûŨæÉ}sŨ€û°] ¤ūŊž2âî?ųmēĪĀ wīîœüyvČ`īœ×\y>dÉš4*ĘĐCOœ?rĶŗCö؁ÖäØÅô(sũQLKžv@ °föÚčɓsnn#Gôäs§'<ō}ūˇ2œ‡sÎĶā$Ëõûj\‚[Ārm?wļß 9į<“#Îwę°CRÎ9ŨáN3ÄeMjäėSö€xäŧrÎįÕŊģŋāŸĸNH­É˜:ȒĀBL¤Õcq_R ˜X+š%I<ûBēxwûá˛Ų\2IÁ#õ[3ËüŦ¯}å?Ģe Uæ´˛ØFÄMEÁjø#ďøyíZš%ŗđāÍĀË2ħF¨ŅĮ oŧéĮ¯wÆ(AR:,JŠØkWØŋ8Bly]@$%ˆTĄ'É2âč4scŒĀÕ.€%žŽßĖúr#WŖĀœXúJ‚ÄËN ’:~œ >Wvi˙…Ģ‹÷­{šLkaŅB=ēōŗõ速'_ų3!õD¨ģq?õ#‡DJTˆCXrøčĨ¤åk‹ē–¨wC<ꅰŸ1ģ„cJ|H.ŪcņŇvę0œnN÷DŅĘKÕį•”DŒtfMXnŒm‡ ™•M ‘($Žûˇ„đâl)đx%’PjË(aDíÂG6A ę D{ņ•š( >ĸėΞp~ūîÚp–YŌ1ĸVđéW4ãgm)é×˙L;zåö¸>BĐ xKëE ĐĮŖŲ:tW÷î‚éWŪîÃŌá \Ēī §i[ŪûWjrC.ĨIÛķî7üĀ~ž“@fČ6§›!0(2NA’Č„Ŗ}e 1E;*X) 1vˆBÛŗ›aĐ>|ÍS*ˇ˜Ē‡e ÃĂIƒŸA Ũ‚œŠuD /ˇJŊÃÍŠūÁ]ė‡äųį81fíĀéiYŲ(ĸeĪ‚Žîöc@Ąč˙:‘‡Q}§l‰.Ÿ $iĄØ˙žß"ĒĄDb • Bg͈Ü^Āūå)ČCÛ@Žã4CfųAá¸zē+WäŒI‘ę$ĒË>‰u*P#ŨæM B,Ã~ OžĖÕ¤\‰”cĖϐ–š™ŪCȚŗĄ…¨’ĶT<ķiDRLÄb g€ūĪīũÎoPRÆķs*€~k=QâŦĘÔĨÚZ=z-õ/u”+”$›šhĶ ę2{Žõ§ ¤„øķūš€nė_>×ö D`„‰ÅԚ˜Vâ'€Ĩļk°Eũĸ۟¤`-ŽiyOEķpâJZÎæ­Se2Œ‚õH+ESõŅ…Ä`$œ0ŒšF‹ˇARĐú ņ8(ų<ūŋA*)įTŗyü6ÉąÚyŒr­ËĘÂ4‘ūW*cJ{§ EŖu(ĨL]ĘŨ’$i˜H~Ī^/kŸäúl^>ßjŸg% $ļ6x¨' į¨_Ē˙įgq—;PˆÃŌe]ëbØAŦ:ҰņŖ¨áTÖLI*@‚\‰ųÆķ‡õAJ\|Õ€_ åĀ_jz4ąXF„‚O9Žŧô}det!ĐrUĄ ĩ I=>vôˇ‹OĒ.2\˙[5šôeb•#Ãæųķml´ĶÅKüȍõͲDMŠ&Ž{îķ¸ô–'€"†rRBЍg-ō­fFŸ+é ­fqŅ׊J|’ÂĄK‰.O“Ų˙ņÍøÃđË(ÍŲT5Y2ÁX¤éUZĩÛÕe}Œû˜Š‘G”ëžH@ÜŽ7BĮÕõéZ“ ˙U‘›õ럜>ŨF&BK5‘Ôĩ1ŲkœĻ*á ‹œD¤TštEâĘKDÃz@ ’OÖmļöۖW0’0‰Ōz’8!>@Ú °RäŽãČÅŗgĐ3ą+/éõ^ū Fb;ŖÅÜXė˜ŗ+‘ŖEĸˇę˛Č‹B÷¤?JõįąWQ^Âē÷àķv¯Ę'X‚5îÅĀđbŗ×c“JÕj­n­ÅŖöŅ#IsP^D'tÄ‚×€î n멄Õ/T3ÚxHPÚiVT "ĸ$LÖ,FoT”l ˛î™īzQŌŅŪ÷ôĪš¯Sžf˙M AjäĘfŲęs›l1EšnáLŊJžÖĸCŠ*‘ĘĸÄŪf)×tyK€ŸÉ›‰@8Zo#Y>š,TVųÖ6bÉ֐’lų’zėI(ĸ܈Vz™I“,đ[:]›Ą%ŖqظĀQęî'0jÂAõØsE*lY)(8ÃÕŗÛ2[ĄYRRIrTžū˙ųk6ĩæŗD<–ÖũŠl`ÛMŲÖī” ČÂ1Sč/ĀEĄ$JeO.9Î^‡^’ZHš@"˙ÆC[%‡H ;°L?^úˇÔĢXTkhv?Á$Ÿ€ "RXŠČQ×qÔnÚ€ˆ‘ÃČĄdøË œÉ÷Ū4°Ëõb‰KęĢtlÁũ'M”Z˜)ĻÔ´ŠËŖxšęDA ååŖ´b8ØR7Į°…)Ž:+čZ<]ĮēSda FLĻHˆ`ĻMˆ]ą˙ĸwaS|J;ŅH‹˜m¨ŗÎr"0—o&A"ˆâči 6÷T„ĸÆģ&͉kœFÉVŽIģÅ$*“¤h~a×ôB¯ŗŸyķuĄo¯“§$$fĒÍ |˙oŋŠŪũˆbŋEõ”F*T2+ĢzE=û5ÁyD7[ E1ЈH[3%Y"[•ļĮÆOzžÔ“õũøO÷0)MLÄ#3EÃ"´&%DÚ¨‡ŌÍn Δŗ“Jļ*Š[ŌŖŦš°Œ€§")Š,efåJ<ũ@×ģ ęDŒ ‚ÁÎ /ŋâŋ]cļs=´ĨÕ }üÚÛ&āĢAĘČLUˆJLqj’qA¨‰—]öā2ōSˆ†í¨´¸„qÃ/4jˇĢŧ`ŽõôĮUŗˆhˆ(‚,ŅW9oIēB;Ķ(S ú”û1ÚA‘ ?dē ĩųĨĐ%ˆH„Y…¤4 Y\kōenĸvMãÄĄáÁíøĐI.šĸ|)ŧē¸Ŋøpk++"^Ŧ0…}ā˙õw„Oŋvv)Ķė!"#qS[ŦÔí|ÛŨ0#5üđ*äClŲ´ŽPЌYdt˜ë€€õ›*‡!œ„-0‰áx›<^ܲ.&7kúŲ0ųǁ45éîiC'$LúĖ{°Hb2BHeîDD`+*3Z§f;•įڜG5Κ°&ėĀO§Ģ÷ī.¯ŗ%/âÔYö!Ŋ)ɧ_‹ ڒJDčq*¤V‹vĩ[rĘHĖX§uĘÔY ›ŗ/ųīnđŖčš&ā˜­Dj‚hÄ –ǰĸ#;ĒÛUÎÔn)mhļėTĸk^j6˜ !;ņIä†nn†R@âuiŠÁ‰ļ`€ĒÛ^Œ"ņļ†Hę€KF 3ˇ &Aˆc؍_x{yqQØ?ø…čŒbДô7đ!AˆSŒH"­z¯'bš)Zˆ­éîõ|įÛŠƒ ļ~ xÚ Yi'HHl˜ ũvbĐĶvWũN2‚čí[¯TVQ ûļ(77&ėiWtmodëGĒãĀ”s•˛ž˜eh:õp ››S͞ʼn€DąŅ âT\ŒĻ°ĩm­Yķ Ė4“Œ1E*>Šū ÄĮãûũ鐀Â~ˇEŸŸË I$L $1Ié WoZÖĄaWę¤ IbB/YÕ‘´CĪw)Aäš(–ؒˆ~˛~ö!ūąŲ&7Ņ‘‹šŌĶn)2;ĄjũnJF K ™)tf\÷.‹…#‘4_Ķt}$#%o'uį+ąjņlģŒxé+H4ē=…XŒOD’„„˜ˆö[Ū™pß]ô|ˇe Øb“€“$‘Ä‘ĮV_g“ P^tn_m¸nôë-í*o‘Á꾒@Ļ˜'“$ŋō‹ uũo+íP5+Ļ, u´ëŲNŸX’ČmĄVQÛŠĩ ‘šxPd‡*‹“r¸ĄųrRaĄ5Ž+áP \*ø$ĩ÷LģęãĻÖŧqŠÄíˆ9¤0…+š‡ šŠ ėŸn×´˜›ĶNŪ uę­úL 9ëŊBëāEícI<{hIāMsB¤ ŋ˙•W@ Ŋ hČgųĶŽņĘĀ]b°Ŗ]}­Î˜¤ÄŗÔ(ėČšŌ7™N&í` BÍņ‹ųr}K –ÕHq˜ $Ię20•ôēR^ S(V¸H€$JŲâ$ ES„xuI# ˇ"ņ‹x˛ŽąÉ˛UÕ`◸4!OYX")-ŗ!*Fŗ@:]Ug šøh‘ZĸR4 F ¸ūÍ­ ÍíPö&„4ūŖ¯ŌÄē WS7ŋÆųŒJŧN7˜Ü'$āD„ĩ€CŅ :ddžČīà XôŗŽMUöOvͨRÉĪåå‘@Ë kMÃ. Œ0Ũ2§ø Ēazt÷k=™ã‚ųsú÷šÅkĢŊĸâŸęW ¯ŽZ+zūÉV!Ō\ä§ŊG8ˇÅ*I Žå!V'e I"#DwN‹L§sē3ŧTHfĒ{Ū™x˜#OšĄ 6+Øą8,ĩÃ˛P‰# b8œK€–kŒ11JŽÂ–bLA¤’ĮÎĀaø<áé93’`ė™‘ļšē>ē.ļÍ.$LGo4˙NŌ"îÚ˛ˇ?˙eˆ&‚øšˆ`ûÚˇ•b…xf+Hī#Tš.%(AFm! L@ŋ){ãšjÁÅ/hĩĨKˆ4Š5Ķ$ˆ’jmRäNŸtNc[,ۃ˜‚ŠÚTã2"¯ ™)q$ĒF–™yÁÕ.ˇ""ŠhU¨^`PÜ*fÆbļ:Į‰° 4jô Ŗ˙Wd ¤%lŽœ šę¤nPĀŪT>üúMˇ ęr3’LŠɲôHíoJ`A"l1)Ú!ōD# Z))Äęãč6h ‰!pJ"2žŋĮŠāˇûįĪN÷!ęąô‚dĐ@m͘ĸ!~D…_)0#(Ԇˇf—[ßNí˙8ãwžyíCŒ; ãŦ.‰ŠM‘Q›I*LWv 1EĨŨč^DĄÖí5ŌՃ¸ŌąxwzrEÜ-áˆĖĢŧŋûܡķAhš§ß/ލ:ÎÖHD"ˇ×cĪz´ČfØ/%0ŠXJČH€ČâTũŅãm!ˆD[’Lãôū[ß|ëgĪö§û)0A“&wd4ÉPh%-~G$ĻĀDÄtͤbËÕåt~u~ysķîō/´'\]éŠzíÄE#öúŠR\Ō ēB4ŗ ic<äBûļ&É 9Līo6¯žīĢč#{ɚ5—qfĀ÷Í ›}ŠųxĶøú đ›ĐJĐv)¸hI.Ôĩ¸nŖĄž5K=ÖŪķ ÄHŖLãÕųˇŋ}ĨžžŨ|vw¤ Hjb3’`ꔁ(¸Ų%䀲aDdœ.ĪĪŋ÷îōâĻL›ü‹ON㎴īëxÕXčXōwrZ'Ėeķ$Ko€ļč§u¤JtƒQdŧēšÕ“Ąôŗ›ŸD‹MGCģļ´.‹ÍŌ¤9ĢvKĶåëo\­ˇš°õ`hşą6ŊĄŽíG ¤‹lwŋÛbėHã4Ęxūö¯ŪN¨Ô|Øl6ĪÖOcā@Äš‚#+A‰dnĩäĻI‚)]Mī¯..Ūt-xl/žnUzdĮōÍ%bŗX4åP {€Īon„YŽyōŋ+6ŨŌ%ãÚņæpņî萊áÉŲ>”Ļĩí;’ĖS 9^å&÷rŧzķ­÷æŒ@ g§Áŗ'øáŠUwwč•mbciAŊ’Ĩ4Mã8ž{aŊrWũTũvũdđa˙tG‘PAkŨĸvĪ%í)ÁĨĢķQd–ÃÍÅEkÎe7÷axļ~ļŲÅF›Fųņlo–Õ—1]ŧ~#Į%Šž|¸}øņv­Ÿ aŊąđũ‚ Ņļg™J{vŦyøMĄ~nūĄÎ„åũé@>'ĸ]¤BhŧÆ0m(’äęüöĐS€Ŧēyx…aMAÃŧÚūí0™]1=Ōg÷ģėû{ôâá‡;•x}ē!øĐí=(„ķt¸žŧ>jũ 'üX‚å˛yp˙ĪáôåĻ´ˇíŸjn,ķČ.Š“X,M[`˙Øg|LĻ-Hã7›āÉŗ'o[ļҰ= 2ĶA+Ũʸ?üYÛ?âe{ņûžžø˙ãz €đŽīĮ6‹ĄÔą~¤ŊûÃ>å__}éõ˙ifÔ>:l: IENDŽB`‚leptonica-1.86.0/prog/htmlviewer.c000066400000000000000000000242611506303110300170620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * htmlviewer.c * * This takes a directory of image files, optionally scales them, * and generates html files to view the scaled images (and thumbnails). * * Input: dirin: directory of input image files * dirout: directory for output files * rootname: root name for output files * thumbwidth: width of thumb images, in pixels; use 0 for default * viewwidth: max width of view images, in pixels; use 0 for default * * Example: * mkdir /tmp/lept/lion-in * mkdir /tmp/lept/lion-out * cp lion-page* /tmp/lept/lion-in * htmlviewer /tmp/lept/lion-in /tmp/lept/lion-out lion 200 600 * ==> output: * /tmp/lept/lion-out/lion.html (main html file) * /tmp/lept/lion-out/lion-links.html (html file of links) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #ifdef _WIN32 #include /* for CreateDirectory() */ #endif static const l_int32 DEFAULT_THUMB_WIDTH = 120; static const l_int32 DEFAULT_VIEW_WIDTH = 800; static const l_int32 MIN_THUMB_WIDTH = 50; static const l_int32 MIN_VIEW_WIDTH = 300; static l_int32 pixHtmlViewer(const char *dirin, const char *dirout, const char *rootname, l_int32 thumbwidth, l_int32 viewwidth); static void WriteFormattedPix(const char *fname, PIX *pix); int main(int argc, char **argv) { char *dirin, *dirout, *rootname; l_int32 thumbwidth, viewwidth; if (argc != 6) return ERROR_INT( " Syntax: htmlviewer dirin dirout rootname thumbwidth viewwidth", __func__, 1); dirin = argv[1]; dirout = argv[2]; rootname = argv[3]; thumbwidth = atoi(argv[4]); viewwidth = atoi(argv[5]); setLeptDebugOK(1); pixHtmlViewer(dirin, dirout, rootname, thumbwidth, viewwidth); return 0; } /*---------------------------------------------------------------------* * Generate smaller images for viewing and write html * *---------------------------------------------------------------------*/ /*! * \brief pixHtmlViewer() * * \param[in] dirin directory of input image files * \param[in] dirout directory for output files * \param[in] rootname root name for output files * \param[in] thumbwidth width of thumb images in pixels; use 0 for default * \param[in] viewwidth maximum width of view images no up-scaling * in pixels; use 0 for default * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The thumb and view reduced images are generated,
 *          along with two html files:
 *             .html and -links.html
 *      (2) The thumb and view files are named
 *             _thumb_xxx.jpg
 *             _view_xxx.jpg
 *          With this naming scheme, any number of input directories
 *          of images can be processed into views and thumbs
 *          and placed in the same output directory.
 * 
*/ static l_int32 pixHtmlViewer(const char *dirin, const char *dirout, const char *rootname, l_int32 thumbwidth, l_int32 viewwidth) { char *fname, *fullname, *outname; char *mainname, *linkname, *linknameshort; char *viewfile, *thumbfile; char *shtml, *slink; char buf[512]; char htmlstring[] = ""; char framestring[] = ""; l_int32 i, nfiles, index, w, d, nimages, ret; l_float32 factor; PIX *pix, *pixthumb, *pixview; SARRAY *safiles, *sathumbs, *saviews, *sahtml, *salink; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!dirout) return ERROR_INT("dirout not defined", __func__, 1); if (!rootname) return ERROR_INT("rootname not defined", __func__, 1); if (thumbwidth == 0) thumbwidth = DEFAULT_THUMB_WIDTH; if (thumbwidth < MIN_THUMB_WIDTH) { L_WARNING("thumbwidth too small; using min value\n", __func__); thumbwidth = MIN_THUMB_WIDTH; } if (viewwidth == 0) viewwidth = DEFAULT_VIEW_WIDTH; if (viewwidth < MIN_VIEW_WIDTH) { L_WARNING("viewwidth too small; using min value\n", __func__); viewwidth = MIN_VIEW_WIDTH; } /* Make the output directory if it doesn't already exist */ #ifndef _WIN32 snprintf(buf, sizeof(buf), "mkdir -p %s", dirout); ret = callSystemDebug(buf); #else ret = CreateDirectory(dirout, NULL) ? 0 : 1; #endif /* !_WIN32 */ if (ret) { L_ERROR("output directory %s not made\n", __func__, dirout); return 1; } /* Capture the filenames in the input directory */ if ((safiles = getFilenamesInDirectory(dirin)) == NULL) return ERROR_INT("safiles not made", __func__, 1); /* Generate output text file names */ snprintf(buf, sizeof(buf), "%s/%s.html", dirout, rootname); mainname = stringNew(buf); snprintf(buf, sizeof(buf), "%s/%s-links.html", dirout, rootname); linkname = stringNew(buf); linknameshort = stringJoin(rootname, "-links.html"); /* Generate the thumbs and views */ sathumbs = sarrayCreate(0); saviews = sarrayCreate(0); nfiles = sarrayGetCount(safiles); index = 0; for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); fullname = genPathname(dirin, fname); lept_stderr("name: %s\n", fullname); if ((pix = pixRead(fullname)) == NULL) { lept_stderr("file %s not a readable image\n", fullname); lept_free(fullname); continue; } lept_free(fullname); /* Make and store the thumbnail images */ pixGetDimensions(pix, &w, NULL, &d); factor = (l_float32)thumbwidth / (l_float32)w; pixthumb = pixScale(pix, factor, factor); snprintf(buf, sizeof(buf), "%s_thumb_%03d", rootname, index); sarrayAddString(sathumbs, buf, L_COPY); outname = genPathname(dirout, buf); WriteFormattedPix(outname, pixthumb); lept_free(outname); pixDestroy(&pixthumb); /* Make and store the view images */ factor = (l_float32)viewwidth / (l_float32)w; if (factor >= 1.0) pixview = pixClone(pix); /* no upscaling */ else pixview = pixScale(pix, factor, factor); snprintf(buf, sizeof(buf), "%s_view_%03d", rootname, index); sarrayAddString(saviews, buf, L_COPY); outname = genPathname(dirout, buf); WriteFormattedPix(outname, pixview); lept_free(outname); pixDestroy(&pixview); pixDestroy(&pix); index++; } /* Generate the main html file */ sahtml = sarrayCreate(0); sarrayAddString(sahtml, htmlstring, L_COPY); snprintf(buf, sizeof(buf), "", thumbwidth + 30); sarrayAddString(sahtml, buf, L_COPY); snprintf(buf, sizeof(buf), "", linknameshort); sarrayAddString(sahtml, buf, L_COPY); snprintf(buf, sizeof(buf), "", sarrayGetString(saviews, 0, L_NOCOPY)); sarrayAddString(sahtml, buf, L_COPY); sarrayAddString(sahtml, framestring, L_COPY); shtml = sarrayToString(sahtml, 1); l_binaryWrite(mainname, "w", shtml, strlen(shtml)); lept_stderr("******************************************\n" "Writing html file: %s\n" "******************************************\n", mainname); lept_free(shtml); lept_free(mainname); /* Generate the link html file */ nimages = sarrayGetCount(saviews); lept_stderr("num. images = %d\n", nimages); salink = sarrayCreate(0); for (i = 0; i < nimages; i++) { viewfile = sarrayGetString(saviews, i, L_NOCOPY); thumbfile = sarrayGetString(sathumbs, i, L_NOCOPY); snprintf(buf, sizeof(buf), "
", viewfile, thumbfile); sarrayAddString(salink, buf, L_COPY); } slink = sarrayToString(salink, 1); l_binaryWrite(linkname, "w", slink, strlen(slink)); lept_free(slink); lept_free(linkname); lept_free(linknameshort); sarrayDestroy(&safiles); sarrayDestroy(&sathumbs); sarrayDestroy(&saviews); sarrayDestroy(&sahtml); sarrayDestroy(&salink); return 0; } static void WriteFormattedPix(const char *fname, PIX *pix) { l_int32 d; d = pixGetDepth(pix); if (d == 1 || pixGetColormap(pix)) pixWrite(fname, pix, IFF_PNG); else pixWrite(fname, pix, IFF_JFIF_JPEG); return; } leptonica-1.86.0/prog/imagetops.c000066400000000000000000000067701506303110300166710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * imagetops.c * * This generates a PostScript image, optionally rotating and setting * a scaling factor for printing with maximum size on 8.5 x 11 * paper at 300 ppi. * * Syntax: imagetops * * level (corresponding to PostScript compression level): * 1 for uncompressed * 2 for compression with g4 for 1 bpp and dct for everything else * 3 for compression with flate * * The output PostScript file can be printed with lpr or lp. * Examples of the invocation for lp are: * lp -d * lp -d -o ColorModel=Color */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_float32 FILL_FACTOR = 0.95; /* fill factor on 8.5 x 11 page */ int main(int argc, char **argv) { char *filein, *fileout; l_int32 w, h, index, level; l_float32 scale; FILE *fp; PIX *pixs, *pix1; if (argc != 4) return ERROR_INT( " Syntax: imagetops ", __func__, 1); filein = argv[1]; level = atoi(argv[2]); fileout = argv[3]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (level < 1 || level > 3) return ERROR_INT("valid levels are: 1, 2, 3", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w > h) { pix1 = pixRotate90(pixs, 1); pixGetDimensions(pix1, &w, &h, NULL); } else { pix1 = pixClone(pixs); } scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); if (level == 1) { fp = lept_fopen(fileout, "wb+"); pixWriteStreamPS(fp, pix1, NULL, 300, scale); lept_fclose(fp); } else { /* levels 2 and 3 */ index = 0; pixWriteCompressedToPS(pix1, fileout, (l_int32)(300. / scale), level, &index); } pixDestroy(&pixs); pixDestroy(&pix1); return 0; } leptonica-1.86.0/prog/insert_reg.c000066400000000000000000000135401506303110300170330ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * insert_reg.c * * This tests removal and insertion operations in numa, boxa and pixa. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, n; l_float32 pi, angle, val; BOX *box; BOXA *boxa, *boxa1, *boxa2; NUMA *na1, *na2; PIX *pix, *pix1, *pix2; PIXA *pixa1, *pixa2, *pixa3, *pixa4; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "insert_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_rmfile("/tmp/lept/regout/insert3.ba"); lept_rmfile("/tmp/lept/regout/insert4.ba"); lept_rmfile("/tmp/lept/regout/insert6.pa"); lept_rmfile("/tmp/lept/regout/insert7.pa"); lept_rmfile("/tmp/lept/regout/insert9.pa"); lept_rmfile("/tmp/lept/regout/insert10.pa"); /* ----------------- Test numa operations -------------------- */ pi = 3.1415926535; na1 = numaCreate(500); for (i = 0; i < 500; i++) { angle = 0.02293 * i * pi; val = (l_float32)sin(angle); numaAddNumber(na1, val); } numaWrite("/tmp/lept/regout/insert0.na", na1); na2 = numaCopy(na1); n = numaGetCount(na2); for (i = 0; i < n; i++) { numaGetFValue(na2, i, &val); numaRemoveNumber(na2, i); numaInsertNumber(na2, i, val); } numaWrite("/tmp/lept/regout/insert1.na", na2); regTestCheckFile(rp, "/tmp/lept/regout/insert0.na"); /* 0 */ regTestCheckFile(rp, "/tmp/lept/regout/insert1.na"); /* 1 */ regTestCompareFiles(rp, 0, 1); /* 2 */ numaDestroy(&na1); numaDestroy(&na2); /* ----------------- Test boxa operations -------------------- */ pix1 = pixRead("feyn.tif"); box = boxCreate(1138, 1666, 1070, 380); pix2 = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); boxa1 = pixConnComp(pix2, NULL, 8); boxaWrite("/tmp/lept/regout/insert3.ba", boxa1); boxa2 = boxaCopy(boxa1, L_COPY); n = boxaGetCount(boxa2); for (i = 0; i < n; i++) { boxaRemoveBoxAndSave(boxa2, i, &box); boxaInsertBox(boxa2, i, box); } boxaWrite("/tmp/lept/regout/insert4.ba", boxa2); regTestCheckFile(rp, "/tmp/lept/regout/insert3.ba"); /* 3 */ regTestCheckFile(rp, "/tmp/lept/regout/insert4.ba"); /* 4 */ regTestCompareFiles(rp, 3, 4); /* 5 */ pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* ----------------- Test pixa operations -------------------- */ pix1 = pixRead("feyn.tif"); box = boxCreate(1138, 1666, 1070, 380); pix2 = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); boxa = pixConnComp(pix2, &pixa1, 8); boxaDestroy(&boxa); pixaWrite("/tmp/lept/regout/insert6.pa", pixa1); regTestCheckFile(rp, "/tmp/lept/regout/insert6.pa"); /* 6 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Remove and insert each one */ pixa2 = pixaCopy(pixa1, L_COPY); n = pixaGetCount(pixa2); for (i = 0; i < n; i++) { pixaRemovePixAndSave(pixa2, i, &pix, &box); pixaInsertPix(pixa2, i, pix, box); } pixaWrite("/tmp/lept/regout/insert7.pa", pixa2); regTestCheckFile(rp, "/tmp/lept/regout/insert7.pa"); /* 7 */ regTestCompareFiles(rp, 6, 7); /* 8 */ /* Move the last to the beginning; do it n times */ pixa3 = pixaCopy(pixa2, L_COPY); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa3, n - 1, L_CLONE); box = pixaGetBox(pixa3, n - 1, L_CLONE); pixaInsertPix(pixa3, 0, pix, box); pixaRemovePix(pixa3, n); } pixaWrite("/tmp/lept/regout/insert9.pa", pixa3); regTestCheckFile(rp, "/tmp/lept/regout/insert9.pa"); /* 9 */ /* Move the first one to the end; do it n times */ pixa4 = pixaCopy(pixa3, L_COPY); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa4, 0, L_CLONE); box = pixaGetBox(pixa4, 0, L_CLONE); pixaInsertPix(pixa4, n, pix, box); /* make sure insert works at end */ pixaRemovePix(pixa4, 0); } pixaWrite("/tmp/lept/regout/insert10.pa", pixa4); regTestCheckFile(rp, "/tmp/lept/regout/insert10.pa"); /* 10 */ regTestCompareFiles(rp, 9, 10); /* 11 */ pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixaDestroy(&pixa4); return regTestCleanup(rp); } leptonica-1.86.0/prog/invertedtext.tif000066400000000000000000000012661506303110300177610ustar00rootroot00000000000000II*ø&Ą’ ŋ˙˙˙˙˙˙˙ČÜđA–4F@÷dXBÉš+!ŽĶ#‹!cM;AϚé‘nÂ{čŨŨzîw_÷˙Á~ļëíWĐ.é/ī˙…ē˙ē×{ũú¯ƒöŋõ˙õ0Ÿû~Ú6ē÷˙ũ{kŋũu˙×ÍĻū˙ņĮW˙מ֞Įīúís?˙ü{ũ:W×N˙ûĶčüŋûXū ßՎ¯Û[ūŸtŋ_iǧģvšqÚvŸ„DG˙ō Nx!ąČ$<$hŒÃńė‹d-°BŽGjx!ܸO ĻCœ÷gE„Âаš~A’“sî—ųÅ&~°TšâíĐ+ū ^|/œē­hœūÂÛūžû ÷ū˙ÃŨŽ˙‡˙õÃŋXôžūŋ_˙˙˙ū×˙˙)ī˙æ×ũ?øŋ×˙¯ūæĶúö7ß_ŋ˙ūŖöŊúØôŋ¯›ŋŦØŋ˙˙˙¯xũ§ũ˙ķÆõ˙úûk˙×˙õ{×÷˙ņũ˙˙úŧÕĢŌŪûm0­ëöŋϚi Ķž.׈ˆˆˆ´"˙˙ xkš¨Č 6ƒ#˛ Ņ}ëpĪwÕwŨÕ˙˙ë˙˙÷ūŋ˙ßß˙˙áf?ßÅŽA˙^Á?›Oę°_˙fęõûüĪ03Ÿ˙ã÷˙ßųč/˙ø-ŠŨĪ~ĒÛëŋ÷˙ŽÛö˙՝ÚkhDDDq˙˙˙ū 펎đĻŽ(,,leptonica-1.86.0/prog/ioformats_reg.c000066400000000000000000001106771506303110300175430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ioformats_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the primary Leptonica regression test for lossless * read/write I/O to standard image files (png, tiff, bmp, etc.) * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in different formats * It should work properly on input images of any depth, with * and without colormaps. There are 7 sections. * * Section 1. Test write/read with lossless and lossy compression, with * and without colormaps. The lossless results are tested for equality. * * Section 2. Test read/write to file with different tiff compressions. * * Section 3. Test read/write to memory with different tiff compressions. * * Section 4. Test read/write to memory with other compression formats. * * Section 5. Test multippage tiff read/write to file and memory. * * Section 6. Test writing 24 bpp (not 32 bpp) pix * * Section 7. Miscellaneous additional tests * * Section 8. Test header reading * * This test requires the following external I/O libraries * libjpeg, libtiff, libpng, libz * and optionally tests these: * libwebp, libopenjp2, libgif */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BMP_FILE "test1.bmp" #define FILE_1BPP "feyn.tif" #define FILE_2BPP "speckle2.png" #define FILE_2BPP_C "weasel2.4g.png" #define FILE_4BPP "speckle4.png" #define FILE_4BPP_C "weasel4.16c.png" #define FILE_8BPP_1 "dreyfus8.png" #define FILE_8BPP_2 "weasel8.240c.png" #define FILE_8BPP_3 "test8.jpg" #define FILE_16BPP "test16.tif" #define FILE_32BPP "marge.jpg" #define FILE_32BPP_ALPHA "test32-alpha.png" #define FILE_1BIT_ALPHA "test-1bit-alpha.png" #define FILE_CMAP_ALPHA "test-cmap-alpha.png" #define FILE_TRANS_ALPHA "test-fulltrans-alpha.png" #define FILE_GRAY_ALPHA "test-gray-alpha.png" #define FILE_GRAY_ALPHA_TIF "gray-alpha.tif" #define FILE_RGB16_TIF "rgb16.tif" static l_int32 testcomp(const char *filename, PIX *pix, l_int32 comptype); static l_int32 testcomp_mem(PIX *pixs, PIX **ppixt, l_int32 index, l_int32 format); static l_int32 test_writemem(PIX *pixs, l_int32 format, char *psfile); static PIX *make_24_bpp_pix(PIX *pixs); static l_int32 get_header_data(const char *filename, l_int32 true_format); static const char *get_tiff_compression_name(l_int32 format); LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { char psname[256]; char *tempname; l_uint8 *data; l_int32 i, d, n, success, failure, same; l_int32 w, h, bps, spp, iscmap, res; size_t size, nbytes; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix8, *pix16, *pix32; PIX *pix, *pixt, *pixd; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; #if !HAVE_LIBJPEG lept_stderr("Omitting libjpeg tests in ioformats_reg\n"); #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBTIFF lept_stderr("Omitting libtiff tests in ioformats_reg\n"); #endif /* !HAVE_LIBTIFF */ #if !HAVE_LIBPNG || !HAVE_LIBZ lept_stderr("Omitting libpng tests in ioformats_reg\n"); #endif /* !HAVE_LIBPNG || !HAVE_LIBZ */ #if !HAVE_LIBWEBP lept_stderr("Omitting libwebp tests in ioformats_reg\n"); #endif /* !HAVE_LIBWEBP */ #if !HAVE_LIBJP2K lept_stderr("Omitting libopenjp2 tests in ioformats_reg\n"); #endif /* !HAVE_LIBJP2K */ #if !HAVE_LIBGIF lept_stderr("Omitting libgif tests in ioformats_reg\n"); #endif /* !HAVE_LIBGIF */ if (regTestSetup(argc, argv, &rp)) return 1; /* --------- Part 1: Test all formats for r/w to file ---------*/ failure = FALSE; success = TRUE; lept_stderr("Test bmp 1 bpp file:\n"); if (ioFormatTest(BMP_FILE)) success = FALSE; #if HAVE_LIBTIFF lept_stderr("\nTest other 1 bpp file:\n"); if (ioFormatTest(FILE_1BPP)) success = FALSE; #endif /* HAVE_LIBTIFF */ #if HAVE_LIBPNG lept_stderr("\nTest 2 bpp file:\n"); if (ioFormatTest(FILE_2BPP)) success = FALSE; lept_stderr("\nTest 2 bpp file with cmap:\n"); if (ioFormatTest(FILE_2BPP_C)) success = FALSE; lept_stderr("\nTest 4 bpp file:\n"); if (ioFormatTest(FILE_4BPP)) success = FALSE; lept_stderr("\nTest 4 bpp file with cmap:\n"); if (ioFormatTest(FILE_4BPP_C)) success = FALSE; lept_stderr("\nTest 8 bpp grayscale file with cmap:\n"); if (ioFormatTest(FILE_8BPP_1)) success = FALSE; lept_stderr("\nTest 8 bpp color file with cmap:\n"); if (ioFormatTest(FILE_8BPP_2)) success = FALSE; #endif /* HAVE_LIBPNG */ #if HAVE_LIBJPEG lept_stderr("\nTest 8 bpp file without cmap:\n"); if (ioFormatTest(FILE_8BPP_3)) success = FALSE; #endif /* HAVE_LIBJPEG */ #if HAVE_LIBTIFF lept_stderr("\nTest 16 bpp file:\n"); if (ioFormatTest(FILE_16BPP)) success = FALSE; #endif /* HAVE_LIBTIFF */ #if HAVE_LIBJPEG lept_stderr("\nTest 32 bpp files:\n"); if (ioFormatTest(FILE_32BPP)) success = FALSE; if (ioFormatTest(FILE_32BPP_ALPHA)) success = FALSE; #endif /* HAVE_LIBJPEG */ #if HAVE_LIBPNG && HAVE_LIBJPEG lept_stderr("\nTest spp = 1, bpp = 1, cmap with alpha file:\n"); if (ioFormatTest(FILE_1BIT_ALPHA)) success = FALSE; lept_stderr("\nTest spp = 1, bpp = 8, cmap with alpha file:\n"); if (ioFormatTest(FILE_CMAP_ALPHA)) success = FALSE; lept_stderr("\nTest spp = 1, fully transparent with alpha file:\n"); if (ioFormatTest(FILE_TRANS_ALPHA)) success = FALSE; lept_stderr("\nTest spp = 2, gray with alpha file:\n"); if (ioFormatTest(FILE_GRAY_ALPHA)) success = FALSE; #endif /* HAVE_LIBJPEG */ if (success) lept_stderr( "\n ********** Success on all i/o format tests *********\n"); else lept_stderr( "\n ******* Failure on at least one i/o format test ******\n"); if (!success) failure = TRUE; /* ------------------ Part 2: Test tiff r/w to file ------------------- */ #if !HAVE_LIBTIFF lept_stderr("\nNo libtiff. Skipping:\n" " part 2 (tiff r/w)\n" " part 3 (tiff r/w to memory)\n" " part 4 (non-tiff r/w to memory)\n" " part 5 (multipage tiff r/w to memory)\n\n"); goto part6; #endif /* !HAVE_LIBTIFF */ lept_stderr("\nTest tiff r/w and format extraction\n"); pixa = pixaCreate(6); pix1 = pixRead(BMP_FILE); pix2 = pixConvert1To2(NULL, pix1, 3, 0); pix4 = pixConvert1To4(NULL, pix1, 15, 0); pix16 = pixRead(FILE_16BPP); lept_stderr("Input format: %d\n", pixGetInputFormat(pix16)); pix8 = pixConvert16To8(pix16, 1); pix32 = pixRead(FILE_32BPP); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix8, L_INSERT); pixaAddPix(pixa, pix16, L_INSERT); pixaAddPix(pixa, pix32, L_INSERT); n = pixaGetCount(pixa); success = (n < 6) ? FALSE : TRUE; if (!success) lept_stderr("Error: only %d / 6 images loaded\n", n); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); lept_stderr("%d bpp\n", d); if (i == 0) { /* 1 bpp */ pixWrite("/tmp/lept/regout/junkg3.tif", pix, IFF_TIFF_G3); pixWrite("/tmp/lept/regout/junkg4.tif", pix, IFF_TIFF_G4); pixWrite("/tmp/lept/regout/junkrle.tif", pix, IFF_TIFF_RLE); pixWrite("/tmp/lept/regout/junkpb.tif", pix, IFF_TIFF_PACKBITS); if (testcomp("/tmp/lept/regout/junkg3.tif", pix, IFF_TIFF_G3)) success = FALSE; if (testcomp("/tmp/lept/regout/junkg4.tif", pix, IFF_TIFF_G4)) success = FALSE; if (testcomp("/tmp/lept/regout/junkrle.tif", pix, IFF_TIFF_RLE)) success = FALSE; if (testcomp("/tmp/lept/regout/junkpb.tif", pix, IFF_TIFF_PACKBITS)) success = FALSE; } pixWrite("/tmp/lept/regout/junklzw.tif", pix, IFF_TIFF_LZW); pixWrite("/tmp/lept/regout/junkzip.tif", pix, IFF_TIFF_ZIP); pixWrite("/tmp/lept/regout/junknon.tif", pix, IFF_TIFF); if (testcomp("/tmp/lept/regout/junklzw.tif", pix, IFF_TIFF_LZW)) success = FALSE; if (testcomp("/tmp/lept/regout/junkzip.tif", pix, IFF_TIFF_ZIP)) success = FALSE; if (testcomp("/tmp/lept/regout/junknon.tif", pix, IFF_TIFF)) success = FALSE; pixDestroy(&pix); } /* Test writing and reading tiff colormaps */ lept_stderr("Tiff read/write 8 bpp with cmap\n"); pix1 = pixRead(FILE_8BPP_2); pixWrite("/tmp/lept/regout/weas8.tif", pix1, IFF_TIFF); readHeaderTiff("/tmp/lept/regout/weas8.tif", 0, &w, &h, &bps, &spp, NULL, &iscmap, NULL); if (w != 82 || h != 73 || bps != 8 || spp != 1 || iscmap != 1) { lept_stderr("Header error testing tiff cmaps\n"); success = FALSE; } pix2 = pixRead("/tmp/lept/regout/weas8.tif"); pixWrite("/tmp/lept/regout/weas8a.tif", pix2, IFF_TIFF); pix3 = pixRead("/tmp/lept/regout/weas8a.tif"); pixEqual(pix1, pix3, &same); if (!same) { lept_stderr("Tiff read/write failed for cmaps\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test writing and reading 1 bpp tiff with colormap */ lept_stderr("Tiff read/write 1 bpp with cmap\n"); pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 0, 0, 0); /* inverted b/w */ pixcmapAddColor(cmap, 255, 255, 255); pixSetColormap(pix1, cmap); pixWrite("/tmp/lept/regout/fract1.tif", pix1, IFF_TIFF_ZIP); pix2 = pixRead("/tmp/lept/regout/fract1.tif"); pixEqual(pix1, pix2, &same); if (!same) { lept_stderr("Tiff read/write failed for 1 bpp cmap\n"); success = FALSE; } cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 100, 200, 50); /* with color */ pixSetColormap(pix1, cmap); /* replace the colormap */ pixWrite("/tmp/lept/regout/fract2.tif", pix1, IFF_TIFF_ZIP); pix3 = pixRead("/tmp/lept/regout/fract2.tif"); pixEqual(pix1, pix3, &same); if (!same) { lept_stderr("Tiff read/write failed for 1 bpp color cmap\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test writing and reading tiff with alpha */ lept_stderr("Tiff read/write gray plus alpha\n"); pix1 = pixRead(FILE_GRAY_ALPHA_TIF); /* converts to RGBA */ pixWrite("/tmp/lept/regout/graya.tif", pix1, IFF_TIFF); readHeaderTiff("/tmp/lept/regout/graya.tif", 0, &w, &h, &bps, &spp, NULL, &iscmap, NULL); if (w != 100 || h != 100 || bps != 8 || spp != 4 || iscmap != 0) { lept_stderr("Header error testing tiff with alpha\n"); success = FALSE; } pix2 = pixRead("/tmp/lept/regout/graya.tif"); pixEqual(pix1, pix2, &same); if (!same) { lept_stderr("Tiff read/write failed for graya.tif\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixRead(FILE_GRAY_ALPHA); /* converts to RGBA */ pixWriteTiff("/tmp/lept/regout/graya2.tif", pix1, IFF_TIFF_ZIP, "w"); pix2 = pixRead("/tmp/lept/regout/graya2.tif"); pixEqual(pix1, pix2, &same); if (!same) { lept_stderr("Tiff read/write failed for graya2.tif\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); /* Test reading 16 bit sampled rgb tiff */ lept_stderr("Tiff read/write 16 bit sampled rgb\n"); pix1 = pixRead(FILE_RGB16_TIF); /* converts 16 to 8 bits RGB */ pixWrite("/tmp/lept/regout/rgb16.tif", pix1, IFF_TIFF_ZIP); readHeaderTiff("/tmp/lept/regout/rgb16.tif", 0, &w, &h, &bps, &spp, NULL, &iscmap, NULL); if (w != 129 || h != 90 || bps != 8 || spp != 3 || iscmap != 0) { lept_stderr("Header error testing tiff with alpha\n"); success = FALSE; } pix2 = pixRead("/tmp/lept/regout/rgb16.tif"); pixEqual(pix1, pix2, &same); if (!same) { lept_stderr("Tiff read/write failed for rgb16.tif\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); /* Test reading 32 bit rgb with approx half-sized tiff buffer */ lept_stderr("Tiff read/write rgb with half-sized tiff buffer\n"); pix1 = pixRead("testbuffer.tif"); pixWrite("/tmp/lept/regout/testbuffer.tif", pix1, IFF_TIFF_ZIP); readHeaderTiff("/tmp/lept/regout/testbuffer.tif", 0, &w, &h, &bps, &spp, &res, &iscmap, NULL); if (w != 659 || h != 799 || bps != 8 || spp != 3 || res != 96) { lept_stderr("Header error testing rgb tiff with small tif buffer\n"); success = FALSE; } pix2 = pixRead("/tmp/lept/regout/testbuffer.tif"); pixEqual(pix1, pix2, &same); if (!same) { lept_stderr("Tiff read/write failed for testbuffer.tif\n"); success = FALSE; } pixDestroy(&pix1); pixDestroy(&pix2); if (success) lept_stderr( "\n ********** Success on tiff r/w to file *********\n\n"); else lept_stderr( "\n ******* Failure on at least one tiff r/w to file ******\n\n"); if (!success) failure = TRUE; /* ------------------ Part 3: Test tiff r/w to memory ----------------- */ success = (n < 6) ? FALSE : TRUE; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); lept_stderr("%d bpp\n", d); if (i == 0) { /* 1 bpp */ pixWriteMemTiff(&data, &size, pix, IFF_TIFF_G3); nbytes = nbytesInFile("/tmp/lept/regout/junkg3.tif"); lept_stderr("nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_G3)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_G4); nbytes = nbytesInFile("/tmp/lept/regout/junkg4.tif"); lept_stderr("nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_G4)) success = FALSE; readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, NULL, NULL); lept_stderr("(w,h,bps,spp) = (%d,%d,%d,%d)\n", w, h, bps, spp); lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_RLE); nbytes = nbytesInFile("/tmp/lept/regout/junkrle.tif"); lept_stderr("nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_RLE)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_PACKBITS); nbytes = nbytesInFile("/tmp/lept/regout/junkpb.tif"); lept_stderr("nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_PACKBITS)) success = FALSE; lept_free(data); } pixWriteMemTiff(&data, &size, pix, IFF_TIFF_LZW); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_LZW)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_ZIP); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_ZIP)) success = FALSE; readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, NULL, NULL); lept_stderr("(w,h,bps,spp) = (%d,%d,%d,%d)\n", w, h, bps, spp); lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF)) success = FALSE; lept_free(data); pixDestroy(&pix); } if (success) lept_stderr( "\n ********** Success on tiff r/w to memory *********\n\n"); else lept_stderr( "\n ******* Failure on at least one tiff r/w to memory ******\n\n"); if (!success) failure = TRUE; /* ---------------- Part 4: Test non-tiff r/w to memory ---------------- */ success = (n < 6) ? FALSE : TRUE; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); snprintf(psname, sizeof(psname), "/tmp/lept/regout/junkps.%d", d); lept_stderr("%d bpp\n", d); if (test_writemem(pix, IFF_PNM, NULL)) success = FALSE; if (test_writemem(pix, IFF_PS, psname)) success = FALSE; if (d == 16) { pixDestroy(&pix); continue; } if (test_writemem(pix, IFF_PNG, NULL)) success = FALSE; if (test_writemem(pix, IFF_BMP, NULL)) success = FALSE; if (d != 32) if (test_writemem(pix, IFF_GIF, NULL)) success = FALSE; if (d == 8 || d == 32) { if (test_writemem(pix, IFF_JFIF_JPEG, NULL)) success = FALSE; if (test_writemem(pix, IFF_JP2, NULL)) success = FALSE; if (test_writemem(pix, IFF_WEBP, NULL)) success = FALSE; } pixDestroy(&pix); } if (success) lept_stderr( "\n ********** Success on non-tiff r/w to memory *********\n\n"); else lept_stderr( "\n **** Failure on at least one non-tiff r/w to memory *****\n\n"); if (!success) failure = TRUE; pixaDestroy(&pixa); /* ------------ Part 5: Test multipage tiff r/w to memory ------------ */ /* Make a multipage tiff file, and read it back into memory */ pix = pixRead("feyn.tif"); pixa = pixaSplitPix(pix, 3, 3, 0, 0); for (i = 0; i < 9; i++) { if ((pixt = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; if (i == 0) pixWriteTiff("/tmp/lept/regout/junktiffmpage.tif", pixt, IFF_TIFF_G4, "w"); else pixWriteTiff("/tmp/lept/regout/junktiffmpage.tif", pixt, IFF_TIFF_G4, "a"); pixDestroy(&pixt); } data = l_binaryRead("/tmp/lept/regout/junktiffmpage.tif", &nbytes); pixaDestroy(&pixa); /* Read the individual pages from memory to a pix */ pixa = pixaCreate(9); for (i = 0; i < 9; i++) { pixt = pixReadMemTiff(data, nbytes, i); pixaAddPix(pixa, pixt, L_INSERT); } lept_free(data); /* Un-tile the pix in the pixa back to the original image */ pixt = pixaDisplayUnsplit(pixa, 3, 3, 0, 0); pixaDestroy(&pixa); /* Clip to foreground to remove any extra rows or columns */ pixClipToForeground(pix, &pix1, NULL); pixClipToForeground(pixt, &pix2, NULL); pixEqual(pix1, pix2, &same); if (same) lept_stderr( "\n ******* Success on tiff multipage read from memory ******\n\n"); else lept_stderr( "\n ******* Failure on tiff multipage read from memory ******\n\n"); if (!same) failure = TRUE; pixDestroy(&pix); pixDestroy(&pixt); pixDestroy(&pix1); pixDestroy(&pix2); /* ------------ Part 6: Test 24 bpp writing ------------ */ #if !HAVE_LIBTIFF part6: #endif /* !HAVE_LIBTIFF */ #if !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF lept_stderr("Missing libpng, libjpeg or libtiff. Skipping:\n" " part 6 (24 bpp r/w)\n" " part 7 (header read)\n\n"); goto finish; #endif /* !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF */ /* Generate a 24 bpp (not 32 bpp !!) rgb pix and write it out */ success = TRUE; if ((pix = pixRead("marge.jpg")) == NULL) success = FALSE; pixt = make_24_bpp_pix(pix); pixWrite("/tmp/lept/regout/junk24.png", pixt, IFF_PNG); pixWrite("/tmp/lept/regout/junk24.jpg", pixt, IFF_JFIF_JPEG); pixWrite("/tmp/lept/regout/junk24.tif", pixt, IFF_TIFF); pixd = pixRead("/tmp/lept/regout/junk24.png"); pixEqual(pix, pixd, &same); if (same) { lept_stderr(" **** success writing 24 bpp png ****\n"); } else { lept_stderr(" **** failure writing 24 bpp png ****\n"); success = FALSE; } pixDestroy(&pixd); pixd = pixRead("/tmp/lept/regout/junk24.jpg"); regTestCompareSimilarPix(rp, pix, pixd, 10, 0.0002, 0); /* 0 */ pixDestroy(&pixd); pixd = pixRead("/tmp/lept/regout/junk24.tif"); pixEqual(pix, pixd, &same); if (same) { lept_stderr(" **** success writing 24 bpp tif ****\n"); } else { lept_stderr(" **** failure writing 24 bpp tif ****\n"); success = FALSE; } pixDestroy(&pixd); if (success) lept_stderr("\n ******* Success on 24 bpp rgb writing *******\n\n"); else lept_stderr("\n ******* Failure on 24 bpp rgb writing *******\n\n"); if (!success) failure = TRUE; pixDestroy(&pix); pixDestroy(&pixt); /* ------------- Part 7: Miscellaneous additional tests ------------ */ /* Test writing and reading alpha */ pix1 = pixRead("test32-alpha.png"); lept_stderr("Test write/read of BMP with alpha\n"); if (test_writemem(pix1, IFF_BMP, NULL)) success = FALSE; lept_stderr("Test write/read of PNG with alpha\n"); if (test_writemem(pix1, IFF_PNG, NULL)) success = FALSE; pixDestroy(&pix1); pix1 = pixRead("test-rgba.bmp"); pixWrite("/tmp/lept/regout/alpha1.bmp", pix1, IFF_BMP); pixWrite("/tmp/lept/regout/alpha1.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/alpha1.bmp"); pix3 = pixRead("/tmp/lept/regout/alpha1.png"); pixEqual(pix2, pix1, &same); regTestCompareValues(rp, 1.0, same, 0.0); /* 1 */ pixEqual(pix3, pix1, &same); regTestCompareValues(rp, 1.0, same, 0.0); /* 2 */ pixWrite("/tmp/lept/regout/alpha2.bmp", pix2, IFF_BMP); pix4 = pixRead("/tmp/lept/regout/alpha2.bmp"); pixEqual(pix4, pix1, &same); regTestCompareValues(rp, 1.0, same, 0.0); /* 3 */ if (rp->display) { writeImageFileInfo("/tmp/lept/regout/alpha2.bmp", stderr, 0); pixDisplay(pix1, 300, 100); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test conversion between 32 and 24 bpp */ lept_stderr("Test conversion between 32 and 24 bpp\n"); pix1 = pixRead("test-rgba.bmp"); pix2 = pixConvert32To24(pix1); pix3 = pixConvert24To32(pix2); pixEqual(pix3, pix1, &same); /* bmp */ regTestCompareValues(rp, 1.0, same, 0.0); /* 4 */ pix4 = pixDisplayDiff(pix1, pix3, 1, 1, 0xff000000); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 5 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test writing and reading 24 bpp BMP and PNG */ lept_stderr("Test write/read of 24 bpp in BMP and PNG\n"); pix1 = pixRead("test-rgba.bmp"); pix2 = pixConvert32To24(pix1); pixWrite("/tmp/lept/regout/alpha3.bmp", pix2, IFF_BMP); pixWrite("/tmp/lept/regout/alpha3.png", pix2, IFF_PNG); pix3 = pixRead("/tmp/lept/regout/alpha3.bmp"); pix4 = pixRead("/tmp/lept/regout/alpha3.png"); pixEqual(pix3, pix1, &same); /* bmp */ regTestCompareValues(rp, 1.0, same, 0.0); /* 6 */ pix5 = pixDisplayDiff(pix1, pix3, 1, 1, 0xff000000); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 7 */ pixEqual(pix4, pix1, &same); /* png */ regTestCompareValues(rp, 1.0, same, 0.0); /* 8 */ pix6 = pixDisplayDiff(pix1, pix4, 1, 1, 0xff000000); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 9 */ if (rp->display) pixDisplay(pix6, 800, 100); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); if (rp->success == FALSE) success = FALSE; if (success) lept_stderr("\n ******* Success on misc tests *******\n\n"); else lept_stderr("\n ******* Failure on misc tests *******\n\n"); if (!success) failure = TRUE; pixDestroy(&pix); /* -------------- Part 8: Read header information -------------- */ success = TRUE; if (get_header_data(FILE_1BPP, IFF_TIFF_G4)) success = FALSE; if (get_header_data(FILE_2BPP, IFF_PNG)) success = FALSE; if (get_header_data(FILE_2BPP_C, IFF_PNG)) success = FALSE; if (get_header_data(FILE_4BPP, IFF_PNG)) success = FALSE; if (get_header_data(FILE_4BPP_C, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_1, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_2, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_3, IFF_JFIF_JPEG)) success = FALSE; if (get_header_data(FILE_GRAY_ALPHA, IFF_PNG)) success = FALSE; if (get_header_data(FILE_16BPP, IFF_TIFF_ZIP)) success = FALSE; if (get_header_data(FILE_32BPP, IFF_JFIF_JPEG)) success = FALSE; if (get_header_data(FILE_32BPP_ALPHA, IFF_PNG)) success = FALSE; pix = pixRead(FILE_8BPP_1); tempname = l_makeTempFilename(); pixWrite(tempname, pix, IFF_PNM); if (get_header_data(tempname, IFF_PNM)) success = FALSE; pixDestroy(&pix); /* These tiff formats work on 1 bpp images */ pix = pixRead(FILE_1BPP); pixWrite(tempname, pix, IFF_TIFF_G3); if (get_header_data(tempname, IFF_TIFF_G3)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_G4); if (get_header_data(tempname, IFF_TIFF_G4)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_PACKBITS); if (get_header_data(tempname, IFF_TIFF_PACKBITS)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_RLE); if (get_header_data(tempname, IFF_TIFF_RLE)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_LZW); if (get_header_data(tempname, IFF_TIFF_LZW)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_ZIP); if (get_header_data(tempname, IFF_TIFF_ZIP)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF); if (get_header_data(tempname, IFF_TIFF)) success = FALSE; pixDestroy(&pix); lept_rmfile(tempname); lept_free(tempname); if (success) lept_stderr( "\n ******* Success on reading headers *******\n\n"); else lept_stderr( "\n ******* Failure on reading headers *******\n\n"); if (!success) failure = TRUE; #if !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF finish: #endif /* !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF */ if (!failure) lept_stderr(" ******* Success on all tests *******\n\n"); else lept_stderr(" ******* Failure on at least one test *******\n\n"); if (failure) rp->success = FALSE; return regTestCleanup(rp); } /* Returns 1 on error */ static l_int32 testcomp(const char *filename, PIX *pix, l_int32 comptype) { l_int32 format, sameformat, sameimage; FILE *fp; PIX *pixt; fp = lept_fopen(filename, "rb"); findFileFormatStream(fp, &format); sameformat = TRUE; if (format != comptype) { lept_stderr("File %s has format %d, not comptype %d\n", filename, format, comptype); sameformat = FALSE; } lept_fclose(fp); pixt = pixRead(filename); pixEqual(pix, pixt, &sameimage); pixDestroy(&pixt); if (!sameimage) lept_stderr("Write/read fail for file %s with format %d\n", filename, format); return (!sameformat || !sameimage); } /* Returns 1 on error */ static l_int32 testcomp_mem(PIX *pixs, PIX **ppixt, /* input; nulled on return */ l_int32 index, l_int32 format) { l_int32 sameimage; PIX *pixt; pixt = *ppixt; pixEqual(pixs, pixt, &sameimage); if (!sameimage) lept_stderr("Mem Write/read fail for file %d with format %d\n", index, format); pixDestroy(&pixt); *ppixt = NULL; return (!sameimage); } /* Returns 1 on error */ static l_int32 test_writemem(PIX *pixs, l_int32 format, char *psfile) { l_uint8 *data = NULL; l_int32 same = TRUE; l_int32 ds, dd; l_float32 diff; size_t size = 0; PIX *pixd = NULL; if (format == IFF_PS) { pixWriteMemPS(&data, &size, pixs, NULL, 0, 1.0); l_binaryWrite(psfile, "w", data, size); lept_free(data); return 0; } /* Fail silently if library is not available */ #if !HAVE_LIBJPEG if (format == IFF_JFIF_JPEG) return 0; #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBPNG if (format == IFF_PNG) return 0; #endif /* !HAVE_LIBPNG */ #if !HAVE_LIBTIFF if (format == IFF_TIFF) return 0; #endif /* !HAVE_LIBTIFF */ #if !HAVE_LIBWEBP if (format == IFF_WEBP) return 0; #endif /* !HAVE_LIBWEBP */ #if !HAVE_LIBJP2K if (format == IFF_JP2) return 0; #endif /* !HAVE_LIBJP2K */ #if !HAVE_LIBGIF if (format == IFF_GIF) return 0; #endif /* !HAVE_LIBGIF */ if (pixWriteMem(&data, &size, pixs, format)) { lept_stderr("Mem write fail for format %d\n", format); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { lept_stderr("Mem read fail for format %d\n", format); lept_free(data); return 1; } if (format == IFF_JFIF_JPEG || format == IFF_JP2 || format == IFF_WEBP || format == IFF_TIFF_JPEG) { ds = pixGetDepth(pixs); dd = pixGetDepth(pixd); if (dd == 8) { pixCompareGray(pixs, pixd, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } else if (ds == 32 && dd == 32) { pixCompareRGB(pixs, pixd, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } else { lept_stderr("skipping: ds = %d, dd = %d, format = %d\n", ds, dd, format); lept_free(data); pixDestroy(&pixd); return 0; } /* lept_stderr(" size = %lu bytes; diff = %5.2f, format = %d\n", (unsigned long)size, diff, format); */ if (diff > 8.0) { same = FALSE; lept_stderr("Mem write/read fail for format %d, diff = %5.2f\n", format, diff); } } else { pixEqual(pixs, pixd, &same); if (!same) lept_stderr("Mem write/read fail for format %d\n", format); } pixDestroy(&pixd); lept_free(data); return (!same); } /* Composes 24 bpp rgb pix */ static PIX * make_24_bpp_pix(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 24); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); *((l_uint8 *)lined + 3 * j) = rval; *((l_uint8 *)lined + 3 * j + 1) = gval; *((l_uint8 *)lined + 3 * j + 2) = bval; } } return pixd; } /* Retrieve header data from file */ static l_int32 get_header_data(const char *filename, l_int32 true_format) { const char *tiff_compression_name = "undefined"; l_uint8 *data; l_int32 ret1, ret2, format1, format2; l_int32 w1, w2, h1, h2, d1, d2, bps1, bps2, spp1, spp2, iscmap1, iscmap2; size_t size1, size2; /* Fail silently if library is not available */ #if !HAVE_LIBJPEG if (true_format == IFF_JFIF_JPEG) return 0; #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBPNG if (true_format == IFF_PNG) return 0; #endif /* !HAVE_LIBPNG */ #if !HAVE_LIBTIFF if (L_FORMAT_IS_TIFF(true_format)) return 0; #endif /* !HAVE_LIBTIFF */ /* Read header from file */ size1 = nbytesInFile(filename); ret1 = pixReadHeader(filename, &format1, &w1, &h1, &bps1, &spp1, &iscmap1); d1 = bps1 * spp1; if (d1 == 24) d1 = 32; if (ret1) lept_stderr("Error: couldn't read header data: %s\n", filename); else { if (L_FORMAT_IS_TIFF(format1)) { tiff_compression_name = get_tiff_compression_name(format1); lept_stderr("Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, tiff_compression_name, (unsigned long)size1, w1, h1, d1, bps1, spp1, iscmap1); } else { lept_stderr("Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, ImageFileFormatExtensions[format1], (unsigned long)size1, w1, h1, d1, bps1, spp1, iscmap1); } if (format1 != true_format) { lept_stderr("Error: format is %d; should be %d\n", format1, true_format); ret1 = 1; } } /* Read header from array in memory */ data = l_binaryRead(filename, &size2); ret2 = pixReadHeaderMem(data, size2, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); lept_free(data); d2 = bps2 * spp2; if (d2 == 24) d2 = 32; if (ret2) { lept_stderr("Error: couldn't mem-read header data: %s\n", filename); } else { if (size1 != size2 || format1 != format2 || w1 != w2 || h1 != h2 || d1 != d2 || bps1 != bps2 || spp1 != spp2 || iscmap1 != iscmap2) { lept_stderr("Inconsistency reading image %s with format %s\n", filename, tiff_compression_name); ret2 = 1; } } return ret1 || ret2; } static const char * get_tiff_compression_name(l_int32 format) { const char *tiff_compression_name = "unknown"; if (format == IFF_TIFF_G4) tiff_compression_name = "tiff_g4"; else if (format == IFF_TIFF_G3) tiff_compression_name = "tiff_g3"; else if (format == IFF_TIFF_ZIP) tiff_compression_name = "tiff_zip"; else if (format == IFF_TIFF_LZW) tiff_compression_name = "tiff_lzw"; else if (format == IFF_TIFF_RLE) tiff_compression_name = "tiff_rle"; else if (format == IFF_TIFF_PACKBITS) tiff_compression_name = "tiff_packbits"; else if (format == IFF_TIFF_JPEG) tiff_compression_name = "tiff_jpeg"; else if (format == IFF_TIFF) tiff_compression_name = "tiff_uncompressed"; else lept_stderr("format %d: not tiff\n", format); return tiff_compression_name; } leptonica-1.86.0/prog/iomisc_reg.c000066400000000000000000000261161506303110300170150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * iomisc_reg.c * * Tests several special I/O operations: * * special operations for handling 16 bpp png input * * chroma sampling options in jpeg * * read/write of alpha with png * * i/o with colormaps * * removal and regeneration of rgb and gray colormaps * * tiff compression * * This does not test these exotic formats: * * multipage/custom tiff (tested by mtiff_reg) * * pdf (tested by pdfio1_reg, pdfio2_reg and pdfseg_reg) * * PostScript (tested by psio_reg and psioseg_reg) * * Tests for zlib compression numbers in png have been abandoned * because of variable sizes from different libraries. These tests * are found in misctest1.c. Likewise, we no longer test for * tiff compression sizes for TIFF_ZIP and TIFF_JPEG. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" LEPT_DLL extern const char *ImageFileFormatExtensions[]; static const size_t tiffsize[6] = {65674, 34872, 20482, 20998, 11178, 21500}; int main(int argc, char **argv) { char *text; l_int32 w, h, d, wpl, format, xres, yres; l_int32 bps, spp, res, iscmap; size_t size; FILE *fp; PIX *pixs, *pixg, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/io"); /* Test 16 to 8 stripping */ pixs = pixRead("test16.tif"); pixWrite("/tmp/lept/io/test16.png", pixs, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/io/test16.png"); /* 0 */ pix1 = pixRead("/tmp/lept/io/test16.png"); d = pixGetDepth(pix1); regTestCompareValues(rp, 8, d, 0.0); /* 1 */ pixDestroy(&pix1); l_pngSetReadStrip16To8(0); pix1 = pixRead("/tmp/lept/io/test16.png"); d = pixGetDepth(pix1); regTestCompareValues(rp, 16, d, 0.0); /* 2 */ pixDestroy(&pix1); pixDestroy(&pixs); /* Test chroma sampling options in jpeg */ pixs = pixRead("marge.jpg"); pixWrite("/tmp/lept/io/chromatest1.jpg", pixs, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/io/chromatest1.jpg"); /* 3 */ if (rp->display) { size = nbytesInFile("/tmp/lept/io/chromatest1.jpg"); lept_stderr("chroma default: file size = %ld\n", (unsigned long)size); } pixSetChromaSampling(pixs, 0); pixWrite("/tmp/lept/io/chromatest2.jpg", pixs, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/io/chromatest2.jpg"); /* 4 */ if (rp->display) { size = nbytesInFile("/tmp/lept/io/chromatest2.jpg"); lept_stderr("no ch. sampling: file size = %ld\n", (unsigned long)size); } pixSetChromaSampling(pixs, 1); pixWrite("/tmp/lept/io/chromatest3.jpg", pixs, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/io/chromatest3.jpg"); /* 5 */ if (rp->display) { size = nbytesInFile("/tmp/lept/io/chromatest3.jpg"); lept_stderr("chroma default: file size = %ld\n", (unsigned long)size); } pixDestroy(&pixs); /* Test read/write of alpha with png */ pixs = pixRead("books_logo.png"); pixDisplayWithTitle(pixs, 0, 100, NULL, rp->display); pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); regTestWritePixAndCheck(rp, pixg, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixg, 300, 100, NULL, rp->display); pixDestroy(&pixg); pix1 = pixAlphaBlendUniform(pixs, 0xffffff00); /* render rgb over white */ regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix1, 0, 250, NULL, rp->display); pix2 = pixSetAlphaOverWhite(pix1); /* regenerate alpha from white */ pixWrite("/tmp/lept/io/logo2.png", pix2, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/io/logo2.png"); /* 8 */ pixDisplayWithTitle(pix2, 0, 400, NULL, rp->display); pixg = pixGetRGBComponent(pix2, L_ALPHA_CHANNEL); regTestWritePixAndCheck(rp, pixg, IFF_PNG); /* 9 */ pixDisplayWithTitle(pixg, 300, 400, NULL, rp->display); pixDestroy(&pixg); pix3 = pixRead("/tmp/lept/io/logo2.png"); pix4 = pixAlphaBlendUniform(pix3, 0x00ffff00); /* render rgb over cyan */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix3, 0, 550, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pixs); /* A little fun with rgb colormaps */ pixs = pixRead("weasel4.11c.png"); pixa = pixaCreate(6); pixaAddPix(pixa, pixs, L_CLONE); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); if (rp->display) lept_stderr("w = %d, h = %d, d = %d, wpl = %d\n", w, h, d, wpl); pixGetResolution(pixs, &xres, &yres); if (rp->display && xres != 0 && yres != 0) lept_stderr("xres = %d, yres = %d\n", xres, yres); cmap = pixGetColormap(pixs); /* Write and read back the colormap */ if (rp->display) pixcmapWriteStream(stderr, pixGetColormap(pixs)); fp = lept_fopen("/tmp/lept/io/cmap1", "wb"); pixcmapWriteStream(fp, pixGetColormap(pixs)); lept_fclose(fp); regTestCheckFile(rp, "/tmp/lept/io/cmap1"); /* 11 */ fp = lept_fopen("/tmp/lept/io/cmap1", "rb"); cmap = pixcmapReadStream(fp); lept_fclose(fp); fp = lept_fopen("/tmp/lept/io/cmap2", "wb"); pixcmapWriteStream(fp, cmap); lept_fclose(fp); regTestCheckFile(rp, "/tmp/lept/io/cmap2"); /* 12 */ pixcmapDestroy(&cmap); /* Remove and regenerate colormap */ pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixaAddPix(pixa, pix1, L_CLONE); pix2 = pixConvertRGBToColormap(pix1, 1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 14 */ pixaAddPix(pixa, pix2, L_CLONE); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); /* Remove and regnerate gray colormap */ pixs = pixRead("weasel4.5g.png"); pixaAddPix(pixa, pixs, L_CLONE); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 15 */ pixaAddPix(pixa, pix1, L_CLONE); pix2 = pixConvertGrayToColormap(pix1); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 */ pixaAddPix(pixa, pix2, L_CLONE); pixDestroy(&pix1); pixDestroy(&pix2); pix3 = pixaDisplayTiled(pixa, 400, 0, 20); pixDisplayWithTitle(pix3, 0, 750, NULL, rp->display); pixDestroy(&pix3); pixaDestroy(&pixa); /* Other fields in the pix */ format = pixGetInputFormat(pixs); regTestCompareValues(rp, format, IFF_PNG, 0.0); /* 17 */ if (rp->display) lept_stderr("Input format extension: %s\n", ImageFileFormatExtensions[format]); pixSetText(pixs, "reconstituted 4-bit weasel"); text = pixGetText(pixs); if (rp->display && text && strlen(text) != 0) lept_stderr("Text: %s\n", text); pixDestroy(&pixs); /* Some tiff compression and headers */ readHeaderTiff("feyn-fract.tif", 0, &w, &h, &bps, &spp, &res, &iscmap, &format); if (rp->display) { lept_stderr("w = %d, h = %d, bps = %d, spp = %d, res = %d, cmap = %d\n", w, h, bps, spp, res, iscmap); lept_stderr("Input format extension: %s\n", ImageFileFormatExtensions[format]); } pixs = pixRead("feyn-fract.tif"); pixWrite("/tmp/lept/io/fract1.tif", pixs, IFF_TIFF); regTestCheckFile(rp, "/tmp/lept/io/fract1.tif"); /* 18 */ size = nbytesInFile("/tmp/lept/io/fract1.tif"); regTestCompareValues(rp, tiffsize[0], size, 0.0); /* 19 */ if (rp->display) lept_stderr("uncompressed: %ld\n", (unsigned long)size); pixWrite("/tmp/lept/io/fract2.tif", pixs, IFF_TIFF_PACKBITS); regTestCheckFile(rp, "/tmp/lept/io/fract2.tif"); /* 20 */ size = nbytesInFile("/tmp/lept/io/fract2.tif"); regTestCompareValues(rp, tiffsize[1], size, 0.0); /* 21 */ if (rp->display) lept_stderr("packbits: %ld\n", (unsigned long)size); pixWrite("/tmp/lept/io/fract3.tif", pixs, IFF_TIFF_RLE); regTestCheckFile(rp, "/tmp/lept/io/fract3.tif"); /* 22 */ size = nbytesInFile("/tmp/lept/io/fract3.tif"); regTestCompareValues(rp, tiffsize[2], size, 0.0); /* 23 */ if (rp->display) lept_stderr("rle: %ld\n", (unsigned long)size); pixWrite("/tmp/lept/io/fract4.tif", pixs, IFF_TIFF_G3); regTestCheckFile(rp, "/tmp/lept/io/fract4.tif"); /* 24 */ size = nbytesInFile("/tmp/lept/io/fract4.tif"); regTestCompareValues(rp, tiffsize[3], size, 0.0); /* 25 */ if (rp->display) lept_stderr("g3: %ld\n", (unsigned long)size); pixWrite("/tmp/lept/io/fract5.tif", pixs, IFF_TIFF_G4); regTestCheckFile(rp, "/tmp/lept/io/fract5.tif"); /* 26 */ size = nbytesInFile("/tmp/lept/io/fract5.tif"); regTestCompareValues(rp, tiffsize[4], size, 0.0); /* 27 */ if (rp->display) lept_stderr("g4: %ld\n", (unsigned long)size); pixWrite("/tmp/lept/io/fract6.tif", pixs, IFF_TIFF_LZW); regTestCheckFile(rp, "/tmp/lept/io/fract6.tif"); /* 28 */ size = nbytesInFile("/tmp/lept/io/fract6.tif"); regTestCompareValues(rp, tiffsize[5], size, 0.0); /* 29 */ if (rp->display) lept_stderr("lzw: %ld\n", (unsigned long)size); pixDestroy(&pixs); /* Test read/write of alpha with pnm */ pixs = pixRead("books_logo.png"); pixWrite("/tmp/lept/io/alpha1.pnm", pixs, IFF_PNM); regTestCheckFile(rp, "/tmp/lept/io/alpha1.pnm"); /* 30 */ pix1 = pixRead("/tmp/lept/io/alpha1.pnm"); regTestComparePix(rp, pixs, pix1); /* 31 */ pixDisplayWithTitle(pix1, 600, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); return regTestCleanup(rp); } leptonica-1.86.0/prog/italic.png000066400000000000000000000504311506303110300165010ustar00rootroot00000000000000‰PNG  IHDRxzēgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœíŊKäJvįi^ŧ“–Ba9¨MŠģZi›BĶQPŒÛz1ģŽ¯… fĨ A@Ër9éÅÂe/„ō^jQP|-ĩdß4*ŗ™… 4ÂÅNiŽ -visūFŌ_áņĘ Ī›ĨņSu#ũA'4;öĸũíķŋ[Æžo€GڞwˇļįŨ­ũîķīŗĪō@ģÉ;^ŧĒcü‰>|>šûíŽôu ŗųgƒy€=€W6˜ØMŪrņęûįÍãÍOîâ ūûŊúC'ŪG‹ˇFÜÉۘØ1Ķ]–úÜ×|ņÖ­ōÖŊæß[x›ÄūĖ–y Č–%¯eŨ1ëÖî❒m7âíŧ6ykŲ~ī˜m›eTânã5ø“ät “tLę)/ũ@fžōöįFÕĘ]ŧFŽķNß6¯C5°8Ģd•Á›swČ=;‰<‹u”K-ōW߯ŪāMz>ņy<…>Đ/•°CU–öœŪ¸ƒČÉ¨>Sņ–™ūæ{杀—yĻrúƒzN”0NeĨ!÷0õķ”āņŸČŒįĨųÜŊšŒjā\­ķę—ŖŠYÜđ:%*ú¯Ŧo/ŧq}™™Z”æÅ÷Ā›(ōGĢĘ)Ŋ¯qÄ7{‡fˇ 4üwUT_GÁĶC•éZ–FŨsū§įũģøŋ)÷ĩĒDÄ]/đÎŠĒšĖŽãyĮ[ÚĄô)5UÍŗŧTųŧ0ņ÷Ā{¤ŦŗÉ/"rQŅōfoIŧđWŸR5\9‘•6%ĒПŸ÷¨˙2ވ!ËyeoōĻöLfv ü3Ņđρ×Ă~T~öžņžĮ3;’“|Ф ŧ†ņŽ7ŗgŠâe ‰-EFĨԖr†īƒ÷”xÉAÕåØg[y‡ÄKm/*‹Ō*ÁMM œFå§Õgį­OOML”ĸa'¯lüÉŲqĶže†ęZmãZlđRåāŗÍĄčgā=ûMP”€Š ŪØwŧ”ļŖoF~#4x+'ÉøfWķ3đ‰WŪZ˜UŪÆˆu$ō5^×đŌ°H|ŧxŠ"åĩėxzģā-ėã˙G5ŧfô"§ ØW–xk*xŸ›× yU 4ļā õzđ|v‡Â$JûsÎNÕk~åũ/MũC‘üúGéue~ømpä¨%x…ky“¨fŧ8ˆĒj!Ŧ`_OT4ĄÎĨŠ9gg<}§sÎГøüŧNoaˆĖÉĒåõ‰Ė˙6ôw杤•땪OĨ÷ãy͓WC‘sũ•čŲÁį4•Y'‰wLŧŧđß÷oČ%fŋ‡Öč sß #˙t^‹„Ę›æXFŨī7­eúˇô›ãųn°véßŅ_x¨ŲŧVVšžĘh\ũæŗķ’REŊŒGÅg“ˇyĸķåõēã^ÍžôkUËɗĪĢGCųäļGd‡2øīĒ}yŧ1•ũ¨r‘%ņ—ĪÛŊ@I¯ü °ę3Ũc7Ÿ5ũnķŽŽõŋģ÷KķßņÆûmĪŋ$KÔÚ[ûĨķnØÖįë_ļíywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­ũîņū=?õ^ŪvĀģĪķcŽąˆ/&†nZ˛ōēVˇžįõÕĶ1Ũe÷ņÖ,^žš]o„ÉąM›.ŸßŪž5æúŧĖîā=—onį57yĄƒíxíōôŸˆÎ܈Īî˜guƒxåēõ°ģy\9ō.œ™_D /?¸Õ˜ĢÅģģxãÕ7ęÖÃäM˙ÍļúÃŨŧÕĒ<š‘ōkĘØûxWžŪĘûfha+g]ųáŨū°…ˇˇÎû]-><wž•w˛ h$؋cļōÖwķ’?ܓžžwéVŽîáuāuõ6=üëåËxåû7wŨoրŊUŗæĶ%×Ēq;¯Xđ†{[ÖŅ[yíh¯\ŧĒãÍī×EY÷ŊZj:î+™ÄĶHĮ†1vnåWyœ\īÁŲ cL–šęĶǰ–Îßg|iö‚8“3& ŌœŅ‹‘°8‘?`Ŋœ.WËÔū4'î¯MD7úbØķĐĢdtkž>6ļ?ķīq=}x tšŧOŖ€Í×ę8Ģnáĩ+ŧcSƒ×GG#1Ö'åtĻ­Ãaė™LÍAo Īg|ĻÁ{ĖO˜:9dLhĘN'ŖųœüÁ Ŧ˜† ōú„Zyž3åísncAŠĨ|~Č äõš)ō>U0ŸÄ߲ˆĖ›ŧ|gálĀ{įmËkVxS3’Ų[ĒJl-čĩô~:5&đŽ+ Ķįxŋ"ŋÕCĮY>8!čo‰WĄ}›_Ķ)íîT[öfˆ„âúˆžc‘ņYęNãoĨ×#Ų‘Gä‚,“‡ëČ ÍŋĸÔ§ôJQQ&—ĶŨŦ´BS1rķ%/´pÜ0‘™XÛ—™>7uJSqĢĀ+ŗ)A™ZPŠĨÚĮŧ¨…ŠoxGЏgfG„“R95^¤vR"ŽxŠŒĐG'ėyÔ¯dAį 'œöŒd”úUŠeĮr*˙šĐTˆrnžYōŽ×x•˜$ė\­ķVNĻt†–ˇŦęę+ī(öA_Ųō {FĨugA/Dž-Jh팝HüļœYå åҝcžÛŗ‘čȂŠ;ĨÆĄG9YVæ@wŠEĒcÁËRĮ“Ģ:^*^˜˙Lį‰—_$l 7yUx=&.Ēú9#^i^ƒW5ŧ9;]ōĘĀ[ša?đx›<*ėņHĐ*đŽäee㨯=p§AŸ~LΚÎ( Ŋ‹eÂā-īÄ[x­2KHkßđú%īYÃ+Á+¯ĘŲËĐß!Đā+X"áĄ3/ !#đē#ĘRJĒæ ņrxû×öUiG*K+™ßŸ.y!ÕXáÍ$ÕĮŅ&¯BK¸ÂûĀú“ŋvÜõ…;S%Ôđ’o+ē|<Ąņ¯ņ%x9ņšž đŌiŽ( Ā[áTt›Ķ ŧšdÁ‹eE+ŧŠĸN<ģƒ7^đē㆗j_÷Ūé ^‘yķĘŪ˛9EÍž~ Ū]ĒŋāĨNίŋ, eÂ*¯ãkŧŋ€¸3Yį­ná= ŧub›éKū (7ątJGkŧ8G4īĨsœqŲņöÖxŠh‰×œ¯đžŧņUfFāÍQ\t|KúŠUŪú÷šņEā͇kŧšxmœ• ¯¸•×ūEāU-¯[đž6ŧŽŪÁ*oļāĨú,ÎãÔ˙•‰7ę_rü/ÕgGęx{ o^Ŋāģô%„’¸šĮō‚ŧ/âĀû#:ĮŅŗŽ×TĢŧpû?[ōōĀ+i8Ké:͚šFĮãú/mË\ZōÆ+ŧōņ†î€,¯4]čÕ ā-ü?^–5 oÕōË{îxŨÉ÷~ˇŧU:„ĸåUž*6y/Ļh…hx)-rģä5 Ū1 "čâtgÄ{,¯VxĄ2˙@Ŧœ Há_.Ōž@ÜĢŧ¯—ŧGņ{đB|ÜK:Ūr—Ę[xCysWL2đ2‰×Ô~jáįÄkâ4ŦŊčxķoyŠ8SjßZŪNwMŧXÑ×Å;^j,^Ų%o‰x-xOÕņ†Q[/÷7xÛúę3'^Ûķ=}Æ3ę rĮTO¨ĸ^žîĄR$^ĪáĶä|úXĸIôčËPTģi3œęx­Ō;Š_dÔúĨˎ¯Ė3_ÕMúęxqĪĶĘˎ7ZđĻ /ę‡fųÕ ¯au/?Ēxz51z­9VŊDčëęęņ 矜^ÉHãŗ#^SͨÛŅkxĮ՜ÚC;FŜNÍú-Qāĩņ/õ+žž×6ô׊Y /§ė*ܐr– ŧÚˇíÛ¯xĪ‹o×QũË1%ÉPXé?P͊ąõW}.õQDũ ķō°g8úŽÔƒe4 Ą?Œx/Ą c&ĸ&Įž¨#ęÖ×,ōôz <•ÃąųJäÜŋ9–)š3ä‘ČíÉŦūũ0 Ė*âUāį-/ĩ!…ņ)ņŽDĩĘûŗĄŖKŧ¨(ī2úÃ|ÚņŌõ‘Eœ:¯œn•M¨å/š‰ÔžČ\â^ígÜlÕ_Éü뚩¨ŽŪ9ĩkŧ ;íˇŧQbÉíĸ1ņÎÉÛYģLkąúi]†˙:ü•a0~ūŌ)ebÜ+5 •A%qN÷5bÄ{Ŗį>ąĪĸ<Ϟū˛OÓ(ˇ’1Ŗ˜¤Î-įåņĘžboÚÕΕ/&4>ÃĀûÁ'ÃCĒÕŧ>uQf%į2éi7%_#õ9xˇŽę2ß-ÎãOá=5oĸęrŠ'áUwžu•Ô&ī=įXØđŽ.ŪfwņvßŨņä~Ũ>ˇKŒ¤î˛ņŪsŽ…}oŪžŊwë*´ ¸ī ûŪVõÜ]#ŋõĀÆĸmnđ>ãx™ZŋæmÖÛöaŗ”šū,ŧOaX¯ļ2û´)ŦŋÕž/Ūļ tŧ͇ūîwo>öwËöŧģĩ=īnmĪģ[ÛķîÖū=đŽNé/ėŗ¯Eßnŧ͔ĩ˜m|ĘØáíaæÂ¸hëŧp5ŧũŧļ×‹.­aėĢ{xõ6Ū0'š-ŗ:ģ~tÔē‡ņžž<û^tʡ:WgÅēBáĄŧa6ēãŨđügˇŸ+lbyķ› §ē‹7Yãu÷ō^.yWôB7$+s'§ÛÎõŨōåÖpyaųõ]A.ōĮņR^-xWzøoŨ}đÎÉĢmįZ ×ņ^Ŧ~Ū;ƒˆču˙} īĘi;Ū…pæÃ-ŧ+‘4;^šúũũŧëoīõ‡ŪhŠėėäÖ¯|˛å\Vâ3ĩŧëŽDŧõŽxi¤ŠąßähįTfW6.¯đ¯¯˙{ܸÎ{wP™Oáž Ė1æÅYŸûž×•NUEYÜĘJ1ĩ#15āÚáaLŧNđ’* §ÆžV+žię7E“t6Ë_J1ÖLfxŨ d¯=÷"5ņąLD%”ÛŒ\2eZRΈÂEđ†IÄū‚ˇ´Bt!é…J›įr¨Ē "^É8Ķ⁗Xˆ7 ŧYP†`zOoĒ-D1*›˜Á‰ū+Y–īôđDæ rĄāđ9D”M`“$’ŧ'‚1x9Ūŧ€DŒxįĄ/Hŧ)x%feŲWBå×xkŠŪ"aƒ¸đârÉ;ņsđ†ģ¯+ ŧtCĒ-Ô?Ķ^ŽË÷ÚJmF9HŲ ŪŦáĩCč˙D–OƒūâWŠįæ„nc(g3Äō$^9ˇ~Á›īZŧ|ÁĢ!coŨōZâ哆W/Ô CÉŨ‰ô!P蒗Ąv ˇŠkÖ+čÜŠxOdËäJß5é;Ä;dƒŸđ÷E.~/¨ ũuc%´ŧ—ˆ+Ŧ}4ŋ¤"@¨]MTšÆãZ^uŪŌÉ!@îģ–WSûņ!>­áaļ9Ŋ>N‡°ÜJęúpSĩŧ†×Ûį9;9ušNzÚ‰;5Ĩ¯ˆķ‰ #”WtYĪŌ)uúÔyIŪÔqđoDB-Ą é[‹w÷*´ôÃ1đÖ*đVaÎnrĩ#’ßœ)a9ÕčęČEÉ:>&EsF´ >8š˛ķ"=ãšF¯zPŽjm:HQ¤‡˜ e˛ Žœö /gzsô zÉŧH(¨9û‚˛…Sŗ#xQķ)xųŧŠ‹uœģsՍ‡”ß°0RŊ=ĸ?YŲ‹ōНåņuā=ˆĖ‘…ĘčXrË –<œB›„ yÖËû¸Hĸ CJT.ŠŠĻ^,×CI4ōMbš‚Fą3tĒĐĮ@ŸŧŦ:‰Ô‡ˆĪаŪĢēņäâ1ĮúŪŖÕđ–4G Žcä\Nw^-)_zĐ\’™Ã( MpvĖ5ë‡ŧč%ũß1r…x+č÷4CŨđJ˙@Ûäũ¸Õí‡ņ¯Í{‚É ŦėņidNà moĖB˜xFš’˜áŽ=ŧ°å5Ū“ãix×ãJÛĩGVûN¯šg›” >1Į•Ŗī Ngmü3ũŅŧŗÛ|īüöņūš… ŸÆkīzøxģUīąļö‘ķŧw¤5ûėŧ]œĘ'âŊ|øOÉkč8­|ÜĪ[[ Ĩû8Ëcyņnũö#ãUŽ+”L'zˆ}/ķoëa%ícž^ŗöîΙMû÷0ŋų%۞wˇļįŨ­íywk{ŪŨ[ÎPĮëßŧūŦ5ļ˜Äß ū"Ãßąü>nôtÆÛíáQãŠĩq0–bîšc¸äŋC>Ũ:Ų÷$Æņ96bÛˇcüMŪ%åí[ŋÛn¯ŧĩÆ­ŧ­?Ŧ¤"Ļ{”žÍ=ÂjYßXDpˉųuŪn3ŪNę˛Ę‹Ī–CÃ;6§Ę™žuÛąūŅ-#ÃMŪîH'uYå]ûáÛģxš 'į›g{(oWūģcˇō^nåŊXyąõzņÖOÕüFŊķ@ŪÎ?;š[y'[yåōHšíûÛôq7Ov+īa{âŋSđŽÔwCî[yÅGņŪļĢë#xĪ1n™Ę•ėėeĪ(#y‘8Š}a  q{Šļ^U¨ļņÖKŪõgžŽ­7ejWm•‡đ†ĸÅji,Å6šb˛ė%ëYŠyr,‰7Q…FdÃuS}–Ë™=W(ĖŽ!ŠÂīü¯TĪĮ”%WQ‚Īj<_ŊV7fßŦčĘļ™zīŦåíaŸ2_™~_d—cÍ~Š0šE ”#YEé;+! Ņq"ƆÉy‚ /áw0SŅ.ą Ô'ęŦ—ā‰Õgl°ļĖÉ ūĀOĐ‡2uÕģ˛+'eÛ ¸Y™ßä-^­ō’īA‚…‰áé$5ņda‘˛Hĸ<"Ô\įė%%â5N"Mė€ņ1x+ĖXWøĶųN^ĀŊt Ūø2đ"w!ûQ˜ Ē…0^bžÖRˇŧĒáÍYĖ”n6ĶĩĒåũqa/CđÖå-*,Z5ōI3ĸŧ ‹Ā9‹˛B31Ms,œžŪáIË+’†ˇ¯ī†x52,>ī PRVAŦļÆËxVKÄp¯lž›ĶŅ!6ĶMBhœŦ፠ʩ’4­đō"Hā&oƒ*axšÆ˙F?8á“B˙Qj[ŪŅIxcÄīYĮ‹ø$Bĸo\ų%ošāåajĀ4uË;lxEˋÍtĢfŗA'Ėø–ßĻĸ-o-o5‡D‹|J,Ŗw2-ŧ¤ōEŧæ¯SGE ŧõaŒXDŖ%•¯Ž×ūW‹,”’-ŧ(Ú Ūįė!ƒā‚JfÔđΊE›ĖâyĮÛĨoXßIuę’WTAR–‚×_^UT5&î#QP: ^iüAĮkD“žÁŨŸ }ũ3ŽWx‹ų Ū.Ћ´?nx{¯§ ^áģôĄļËĻ7x3ô‚j#„‰ixqJÎK­}¤o$^ĮWyxŋĨ›qŅ*¯žmđęĀ㌎áŲ’7{ˇÂÛĻoŒÖd˛•7KsžäuāĨ†Č`ĮЋ†7ixU˜ŸWAīŪ(đb™qŊƋIŒ›ūpÔđūĪ o>ęx߯›lįÅŽėj…ˇjxƒ¨-Šŧ˛áM‰÷Ũë4Ôŋ}ۚ[õž ;/ž7ŧĒá•wđ†Œ6Ũ$Jā]øoxqÖŧŌ×Č ^ģāå éÛ( R*ŗW/˙Đō^•aräMmdÍ@Ŋ/:š ŊLŖŪgí@,3cĪŧr•סŧč6l÷+ÂfįÛŌˇá…Ū5P"ģ€Ü@Û~4kxå´á…$$DõģĸK‰ĢŽš ˇ1qV8ĻYōēoėŧY}ŪņÚmŧAĸUķ2ėģ–ž"Äwúņ*DĶYĘ_01™Rú™¯%ãÔ xá8}ŠWxŠD}ÖōöąikŒiĻÄ–‡Đ‘õ6ŪÔuūđ7îVŪ×Äk—ŧĄ~hyx =z–šR,ËOZmĄOĀ˨aĮŠĻ3čqĖ(ČDŽ4|FŧĄŊ¨ņŌ} šHWxûA+ƒÍt¯fÛōŽ­ĄžF¨ëmŧÄų×ņǎ /ú]DŸ‰ŧ9xŠ+^ÃSÄųĩ°LäŌsQĶ'ˇ(ŠMøĄ3›LJ-¨+ÆŠC—ēš´nö@åf8ė‡p]â–ĒKßŧGU˙ø^HĘČ'ĄâYįåūxMķPÁ{tãŒî ÖƜ"f 9`’sÄÜÉiŧÁ^GyĐT$įŊ.ú"Ē!íĻ?=ō^đFúėt„đm؜–ņęocä„UydyÂÎcôwTh/Ę0nęx-!]L =˛i§UØ­y]ƒWˇĪSo]m?k˙ŖRZ#°ĸO¨ķĄ1š&į•’îui’큗îė˜^ļŧ‹Ít˙•z…V$_k•˜3ôĶY ĩ}XF}RT‚“)T<ĒáÍ áQ"Ąö¸\đŪ9?Ū<X`MWõ>Ëā ŗpĻ‹æ}Ų,HÔÜë¸zúg˙*-õ‚ōeĶĢc\7Z^ĮļĘē‹lOËDå=÷iiOdQ¤æáŪāŦęŠĒocōŽs-íMķC Rₒ*JM"͑GL+ęPų‰sŽĄ;ĪŠ‰éx/Į+īâ]ųęãŦ†ĖĒŲã^PĶk$ ŽĖ•ö-/–:Üj&7xÅŪÅsËOæ]ąVŽ@ĩ1–ļ}ĀđŪ@§•fŦņŽ[7xŊ ķ.[ō66{o›øĢ’ŪęãŌGãy”ŨÂĢīēF;M°* IV…lō~áēmō^5ŧסŦ}‚´* ÉW5åí÷í۝ō^>`ū­Ŋ™UŪĩ™¤&0ÍâûĻyˆmđĸ(}Ņķ…V6˙¨æ-Æ _4o[7uõí—ĪÛ”N. ?üĸyˇØžwˇļįŨ­íywk{ŪŨÚ*īm“Ĩ_’­ōĸ}nė#u͟ÁVyķŜâ’üaÖõø\|÷vHŸnĢŧĶæíF(V™‡ˆĨ?ĄSŋĘ;YÄ\zl*-ygá]îy†9VĮ˜ëįiŦö7mwņęąŧK( …Š_vXáiąeė å]âoWŽō.§Ä?–ˇöĶŦũpË=ÚZŪ.ÚĶąZ=n›Ęęiyoyt¸ōʍ/áXTÛ^­KÛϞúnjí IDAT$Ūæ’wĢ;l¤ųJ=ŪëEô¤ZÅĢĮŨÅû~măęßjYÜÃģ;mEĶō^uŧkĮmåuŧgc†g<–ÅlÄs*ëf…ĖØŋŋ@Œ“ö‘ˆÜøéÃy7´"ŧĮ+Ævø">ī‰-6đÖ,ū1|"ĢÜ žÍcÃësÕōâŲ¸QœžÃîHȞkđjëũkÛm ļQĮmđ.Ŗ'mdë6EĢEęC ‡į˸ ODÜé ãŪ <ļazÕUޝøđ4Kb°Í5ˇAeΰĻJ‹oÔˇ"—š¤ŲW,IoûƒģŌĸQīŊ÷ĪëEáė°¯ļë¨&­đÉ0:$^ëļaęvÎRͰEū†ôÍĘĖŽd ”QPYhĖjĐŊū-Ũ§J$ũ[‚Ų^aÍ(ö<3‘9Õ¸}˛Eŧ‡aW Ņí,ŸpŪÆk‰WžÛÍpHŌY¸QS‹ņŧqšŸãLN´…Ėčŋ…™A‰&m’•āÅ.S ĖNbvė™Ä–`R°„-ÁŦâķyEŲ…ĩōXĨ›0˙ˎ÷yØĖô\¯>:;§œ@žVËåŦķZÕõ ķŧē¯G0…Ā+1)‹c<‡ôldã´ęvÎJah=pR+ŧeŠlĀŌã_ŠT‡-Áž5[‚)ūŽ2͞gĨ™ˎ—EöĻb0Ǝ [yĨJ(P8zUb$å ô;>Ķ×ŪᎠ1äØAĒå­¯MāmwÎ:‘-/Bb×Š‹–ˇ‹Æ…m°­—S…v'!JGŗ%ؒžcãĻ–7ĪC0ƒŠJŲ큞ŦĨ™Õ/ [bĸĒ‚~Įgųœ EÔđρ7ëx1ũ,ą•“S ^xË)Ü ŧR^^„ģ ŧķ°­Īl\čú@FāÅXÅ?#Ū°į¤VŧŗāåM´'5ŗũg§'Đî˜YēžœUhŊķ—œĪĒ ßņiūŽúlo ^žāõ+ŧĶ)f?$æú”O×xŅî›Ā[Uõ‹J*ȁ7ŊzgP’mŒPÄ{wŧ”zˇt'Øŧ ŧ}9ÅiĢ Ķ!¤WĐīø2ųY} ÂödEÃ[6ŧEāuQËHĀ{ĒD"§W¯Pu„—ĄBÂQ9x-Hƒ—ƒwˆĶЧz<đbÂžŽđjÖōJʛ*lœ‚@KŲ ģČT×)Ä[)’ŸĶ¯ÃödÅZú6ŧu[9-x;ŪYĮ{¨,xSđ†ōeLĮë$KØĖ‹čÍéŧYŊāEŨZSVVĻáiHáˆ÷:Đ´oļÆvŸbkŧ7ŌׯUŲņ†ôu/ođēSđö.Ũ×aĪŗŅŪYķķúP6›3ˇ T5;wyĒÄÁĢ•VôȨÚixĶÖo~xŗ/ųoŽ–ŧ_Åeš–žP[ŋÎûôåŗŪÄԂ ŪÁŧU- œĮöU—A GŧgT‹ŧēá5įqØo.mxE[Ūŧ‰ĪÖyį¨ÁĢĒŽˇ.Ē /eRe_>„7å /âšA_boØNÉ´ŧã–õŲ;ģāoáģLŲĻūõ?Ŧđb,y%ḛ́įYāŨ–žé/4EaŒ„ëS3Ī€–ģBhŠm û^w ī[ Büb×yķ¯Z偗Ęįâ ãžü\•æCS9“?lđV-īIĮKi‹j:Ė8ĄüĐ߯-/;¤–ĒI9N¨=ÎØ.ŌĈn4'^8~–cwĻZrĶđvõKŽč}i^ˇŧ…iîÕA•{,Ū-x xmÃ; ŧęv^øBØ3kxŠ>kô;ļV†=;Áö‘aŖÄ3™j&ˆ×öƒtōqršŗ(ņį oŲöÁ‹ÍŒ"}Úö „E¤{ElĄēΧoīÚÅmûļÁĢɝ¨ū]ōRâmō=Œõ 1ĐoĨšSŋˆĩŨ ž  whĪëg’ĒųfįŦ!vĪDgƒ|œ Vqæ;Yošūâ9ŌŊÖØFmÄxáŸ5%ŪŧáM­;áPŠ"RËŖū-ęū*¯^áM+L ŗæe֐wü…ĨŌAœŖŪ.b—ŦäŧŲ9+?E”ã¨á…„ŧԛWŦv™ÂĻdģcžS„ ũ2FVąöĸqÎNą¤*ŒcQaĪxoÁk°skĐB6í5šå˙,;Ū4Õ =Ėƒ ŠYۄņ›ļr 樄ô­Ûô}īsË¤DK ā4teÃÂ8Šō„ē&qØĖŋst+§įčÕëĸfQnú,đZQķÁzœDŖfË/*3?J“ų&}×đŽķģxīœß°ĢæŋÅÂęܘŸyTˆšąvK0˙ŽöæËrAƒĀ§úARŠH5<Áđ„úŋ/7ũĀ;Ĩ_ô…‚ô•õ§ĒģĶ÷Ŧ}4ŗŅlŒčŠ f¯Kë‹7D{ Ŗ>î"éclŪFAM+‹ņԔĘOxįˇķ~â:ÍMŪ‹ûō&ü•Ũ[B&īđÍ"”=ˆßŨÎ{Ģ$íaÖ>:XđĘ[ŽģŨnŦošöūŪ7žĀšmϝzôļ­Īšílžeƒ÷ž-ÁļØ6ŪĢĪÅû*$šåŗéÎxÛG͝Jéņŧ[C†=Dŋķq–7—ëž—įˇx›mãŨĄ~gƒ÷ņĩãļX÷_˛f[ä¯/™w›íõ;ģˇ=īnmĪģ[ÛķîÖ~÷x/žo„Gģ{jģ–mWe9+vĩKœ{Yy××Vļ –Ú‰2töļF€™ō¸ī^ģ'}ÍV^+;™ũēwÄ:Ôŋ÷x¸-ÆîŽũë:Ūez–Ąsē5}ĮwđæOS˛īá­eŗ¯Ö ßU6ŗu˙)}G(›ôņcŒmv/oûb-=?†÷Ņ1šļÛCy×øjš…W…ápķ@w˙ÄĶÄĀú¸ôŨ mH—žÛОŒ÷¸Azŗõë‡ķbŠĻãŨ’õĩؖč7V3î~V‰\ᙴĒy}*¨ĪkQË–)ãëkŧ[ü×ŪĘbī““'ā•a#$lōTÚ0§”7Ã~S%ņ–ģ)d÷‚xąuH_īÔĖŨYLˇxĐ+@^ŨŽ Ŗ^Uú'¸P.ŨPb2ͨI˙čå}wÛ]ŧ˜æ,mØA$Üa–°š5ŧŽņ‰ēFNJãKkûB…\ÍĢĀKŽt ^'˛˛á-0¯E {!öDgļ˜€L0m–ô‹ ‹Š?n…âkä˙{6ü,]Û°aà ÉAé Ē9xĄ|!Ūīl_/0ŸPŖFßgöT… S×WˇÔõ3IĐIā5‘­Á›ŗ°ÜŪa“;™ ķ¸~x›ĀWā=U–5ČĢ𮱷MÃ[Ga{_RņÄūš ?#^AŧąOŧØÚÅOm­&ļ×Ę/U’‡!Č9ŧĖ{õ3ádĘíRlũ^w4‚~ ˛ IāE“āx1g ŪúD؈ü×ၗą /"u„ =I/ANô ]yĢ{ĻáE Yž¨ÅÄ)%Ę& ĘŖyŠ’"Ū4DbÁk_Ą˙Ë;ŪÃXÃüķoÅĸČúĀkoļā-І˜.x}b|+Ãŗ~2;õ2sІ[nôQŧõƒŽOČɈûMaŸ¸%¯?ˆK”7wēā͈ˇčŌˇJ;^xsiÕ o~žÂ{EŧS×jîķáqŧP†T7ĈĶÖcÔŋe-:Ū¯|†ú ęEėočąŲ‰@ykx§å2}ĖÄ%¯^đš~u´ā}ÜÜņVK^ôL¤Oũ?w—Ŗ9JĻ!Â(”/MũÛōRŗĀ—ŧYšô_Lõĸ˛āuŪ,y™XIßĮķæÔ×nxQ*ĘaĒą?ւ÷Ũ‚×,xå‡Ā[kĒHŪgaˇ.đ–áæÁë!}^åmŋŪé'đ"ö‹Įv‚—.ģ!ä:ČH°ëŸåUŪņ2}ąķÔ;H8S§ũ?Ē+Äj"^ėt„›w×"BÜōÆÄû¯ō;LĒŌš>!}Ş ũ Ô/eP•蝉7?ˇjLŧ…‰ÍŗqKW¤āĩWLÁ;ž61"ī@5•‚7¯ƒÜqæũÄ:ĩč?ԊZėß"ĀĐŨãO_…&Fŗ1nx FFyĪ1ņū= zģT{ˆ ųaG=îŨ!ĪŠZEäƒMŋĒZQˇ#đ–ˆįÔUā­Q­+Ågm!đNĀ[=ļ>Ŗ>lP˛Å>Ūz÷ō4öģ7ŋųģe{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íywk{ŪŨڞwˇļįŨ­íyŸĖļÆĄø‚yˇÚžwˇöī™wsŋō OĐõ{īōĨŸh=ōŽ_:Ī}öŪe˜Ü&XJē7×<.ßĮŲ'ņęõ¯ëOŽŽēb[Ļoļ‘žw‡–~¤%q–1ƒ›ļ#Wâ]؟ZáOļžIœųˆ]ČnˇĖëŪæŌVŪĮģ${s?í.HPÜüķ4˗'×ņ2 QsézÁģĩ.Ē7Âloōļˇßm…žū˜āS[xW6#x/64WŪoōŠÅa˯?q_žĨ÷íâ]sÚ%īÖāčā]žûΗߡŧ]ğĀģyĖGÛīëæŸûy—Ÿį¯âvŋōŧŲÖį"Ĩ×ögZ9eįØĄ66˜éVŪ•°sj…W˙Č÷ŽYæŗ¨š-įŨh‘Ņ /Seũ\š˙„[ÔÃÃČŗú/ÖQ.ĩČą#ŠVųɓõGVyëUŪ<ĒéĘNŪķŒBNĐŌ2IÍj !Ŋ>–Š;“Uد܌ĸš>¨ĪT–æĒĖrJôŌ¨ėøÉ3­ōÚUŪ$˛,NŊA0IâN¸e‚¸™wŦŲēœÉlą_š=/ >ÅļĩÔ*‹Q¨K‹‹' ŪōÚGˆÅė##•ūrx6Ë 1ĻÍ ÖÆũʧYqē ōĪq™ûß:ėW^DkõJ;ÄūšØôˇ&Ū?iyŸŦIÎ|:¯#cŽ„ũ#}Čk6âxk9% ǎeĻģãŌĨ—:"ŋ6C5A-Ą‰U;%Ūilo\GĨÁžĪõPeU-KjĖlĖßđRĩ2ĸ.T>-(}…FĄ|ZŪÔöĨoęNxŲÖUÛ›Ĩ?īHt‚l؍;đŌ/9ö˙ޝ™É„Ä›ĄÛ@>¤CDí§á­ÅÛĀ{"Pv2ĘŪĻū•čv7ŧŽá­¨ŧųŽŊÔg)578ų.oxÉ3´į)Ÿ •ßōCdF'ŧœĒĻ,đrė ÔđâŊĸ_7ŧMy ĩ•~'9Ō¯á NIÛņŠĀ[<5/vģ§)đZj_›ö˜Ûž°#đ˛8´úk/õ™ņoŌ—ĒÂ?åų?/x˙Ŋ¯%ŪU9ÆĩéŗĻ‡xŠžŧr*‰ŠŧåÔđĻ>[Ā3Ãŋ[~ūųy¯ŪáÉ šŦ‹ĻŊPŨēeÚļ[ü÷ČģÁđÔŠĩ.}ˇ=Ęŧ{ÉØVŪ‡?Ÿ´ōÉHfˇĻīÃė‘aą?ŨļEwOßĪîI|ķ3ķ¸įÕßģ=ōųú—`ß'īGí˙öäģĩ=īní{å­ī?dĶöéģ[ÛķîÖöŧģĩ=ī#ėũã˛OßĮØãxŸžģĩ=īnmĪģ[ÛķîÖöŧģĩ¯ŧ¤ęCŋŊįĀۃŸO*üMz˜ębņ*~Ī}ö8Ūȝ=ˆw9›´m{­bÂÚãx ׯ[đŽ F[ËoûŲō™ēēZŧœˇûÍ6ö`˙ ×-ęøąéĢn~{?¯•KŨhŌíŽ0Qø¸úĄXˆ~īą;ũáVaķVŪ#ÕL°iĻ…tųΊėŧúĪÅīåäĮņē%o}Ϛ LķŪĸQ>€÷ BÜĀ+Ŋ÷(Ū…­ĖöÕũÖėĒ?l×˙Ū8õMp7üc 'íEgæíTåKŪæ“…‚Š) įÅŧüFúBtC œ9s{ŅâÁŧk3û×} /fœ‰ˇV<‰_ÆŖæ\ų@UËÚ9ŗŌOPŠm˙f“ą•wíÆ¯ŨÎ{}+¯]™12A’Ėķšu§&Ūf.[ŋ+- 7ßôéÛ\đf§tvúRAîáĸ:ōylD=ˆ-Ԉr*^ĶŦUÔwņæQŨkŽÎ#˙ƒČ'~ŠÍ-8n*üĐČɤ‘P—n!‚"ŪF+Qr3ˆ3^Ĩ9“!}YdĪ^&5vx¯lĪĶKnÂ6îØĐ÷@2Ás,SēäošĻģēÂŦ$ęnđ ŖĐmą›ŧIäđĮ/ôā/įЃčÁéf GtR\ŸXܲųSeâV´=IÍŠé´ĐL˙e‘1¸xa™(é˜ųÜčē/§ĨfrFí…;˛“Ŗ(ĶöÅ3ēj˙ĢŧŪE7FŧŠëá#pˇķúT:Ļ.¯ˆėix5%ö×ŽŅƒ ēP=¸eqžā-Šŋ#įÉ{äš×͚YØ?ņ2ŊÔĻĪ38(/ ´Ąž´R@īX]ĪͰ/&•=SĒūŨđŒŸņĖXƘ;;a=J͚Ī(ģLŪČÎÁ[F¸ÜĩeŖP˙Öt+ËBÁ¸Ļëe5 ų >Ė ¸Q#RUĪTH¸qĪ=WIoÁKĒʉ6qÃ+ŧJL4xgv Ą-ACO8TüŦ/RãÄØ¸ĄėđH>{G‡šžķk|•15ÉÄ;7g ¯Ęæu̝vq̝åŒ\ˆnŲBT9™#}Ŗ†—ņȤ´#dDĐJÔŦŪˇ ŗo5‡–ŧW7xŖ.}ŠĀzš)đʇņ’WŽđ֛ŧÄ{ŌĨ/xCúBuƒŊáņ)§Oœ´ĢŧZ…úĄj:3~îŧŌ/üÁ‡n™SPīWRwŧr…ˇîmđģĘë{XJĐđ†ōvĻD} ˛ôĩt ŧĨO]´Îˉ7¨ųBŋîbčÁ'A_Ŋ,oū5. â†÷™Đūõƒ ĸ†W8÷ ÕĘŧ>_đV ŪPCįņÖ ^¨y=‹ĶôĨN†7MyķŊíŧžqã/Võā”6ëŧõ¯‚&íåĶ…Į*†^~í¨Ž|Õ6žÜä­Šg  ˙ņŋAģäíų–7îxĄėoë3Ÿāëŧy§§}ĐWS{1Ô_Ąū ëqŧkŧŠQäŽX~Ņđĸ›Í­‰ĢąŗXȡÁ›ŌaW&÷§ęˇAÅ ŊŧZZ-xßļūđļhx)ûŧÜvŗŧi˛lôÕč7¸įčPĮ.ĸNIŦc{&#‚Ĩœ4ŧcËĐDFT}ē2DÁ;įvÔ˒9õԛūzĄMÛĶĀ̇yąÆK7ÚđÔe›ž—Xö×đž~!õoÚņú õ\úā&mõāœē–ÔĪŠŲ¨ŅƒŖ×$Eč~Kž[ôuÔ¨ŪŠ*” ¯Ŧb"ī™>Vī˜gÄËÎ~ŸJęß),KķŗšfCĒfé0‘R-k’ę3_čxå¤åEרhüáÜd;/:Ī(”íÁŖg考Šē3ŨĖ×ôĨáh…™9ˆō!ōÂŌIÆ9xsj.ŠYŅ‘yލGayŽą\Ōį§ÔÁ§ĢšĄcUZR/ ĄüąŒ ôŲí1ڋāW„€ĩ^ŧĄ4īxĮ+ŧ­ŨĐ+ŖÃI7ƒęÕJ´=ÄÛËûa<TīÔuåč­iY‘+Ē㞆Øã(9?:ĄÛÔ_Dčû™ũõ8Ῐį”–=Ã˛Ęj3†L/•ĸ?‰î‰“ÅÜÚ˙čą@ĢåÍMč!>T_}Ök™eģ|ŲRĄ4…ŗÔęĩ'ߞ r: ā°°vŒî÷qd^Đûg=Į¸~1L÷Ų(Ę”zŊĒlyŠ—9Į”%~Mŧĩ[-¯üD^ĩōéļĮeÛŦ–ō ņŌ-ŠžVãšŧ mNRœ*xŸ‰0^Ĩ1!ũ͇Qã_kúęnÜú ŪŸž[lû(^˜Ũ~Ąnˆ‹úÎ[ŲņÚįÆwE_Ũžē%ôÂē-ž­=čxīG,ļg+ÂÕNžMĘēizÁģļôū1ŧķOÕ?tņT’žK/ú°úņcxŋē˙ MûØų–[ĀÅ_>ūēOīrĨåf€ĘĨ­VíņÎĪÄkäÍõŖ|e%ųxíãözņĒáũ˜•~ [ĻÜíŖ!{3}ëíŧnKĩ ˛hĐ4ŧŸĸ°z¯“ĶŸ­ō.Īa‹6"‹&ŨŪO m¸¸ĀÕVŪ×øŗm9{ļâŋKŪų–hs|ũdŧ‹kMˇō*üi#áũE÷ÅĒRe…wKœ•‹ÃŊƍˆk™Vl›ŧånŪ&eFø@ŪÍģ-˜Ãly8ķšŌ2—ZÚ‰ģx1soļ×mđ.=c•w32æÍ+¨Ž—ÉR$2zœ/×ČoëąÆQ™ÖņģKĢ LĩgÍņ\Œ˛õ-^Ŧđ†ÛųHŪēã­OD–i/yŪËOŽoå]|îXÍâD\‹Ī8 ƒƒ}•øDň|Ë"aŠåĖ ÉØFT‘ũÎÅë:^§OZI÷&áy–ČĨãšúE|•õ'Ŋnā^*!X”áųūs9¯a ąĮą‹„ļĻĪ:ŪČölĐŗ=÷bˆ†˜Q=Wŧ‰ĸkŋ šx’Xb>ŋã/ŌÎÄ ¯îAŖšWIđīˆÚ'w$]ŽqēaIDAT&–zķô{gŨ‰I$ŌüëQ_āˇÜ09IÁ{ʎû‚ąŅŲ1c2u˜¸ŽæsjūęŗS>זđsAx†Vä^xĻŦDÅ„Ļ3>ųs˛5Ūđ,Dxd6žˆ4đz´ĶIĪQ2…ų-į˜ą‚ŽGXÆ52¸†`ƒxk‹ųęüJĻš)ŪĖô%ÚŨ|pōėt$Æz8”Ŋ…ųÂFāuᙜ™û3ÂôÉØ0û‹åV%Đļå1å]ŊĖrÖoM™DŧŅ/0aCŧT#Ļ•ĩi;“Ôõeāĩ/bķrô• îqT3Ęx:›cqAŠlG†xyQ˲°Ã˜‹ˇā ‰JwÂéîSsZ N)xËę:LCeiĪūŌ‘Á•=Ä$ÅËXXg3ƒ˙RŽŅÕŗR3Å-¤(8§I¯~Ąo5ŧIā•SËātNãœĖ kæų”üß&€%"^õ–xT;ā=„˜„x…ÁŒíé0đÚĀĢ}˛YJc{^ˆNĩUrŽ™Üjâˆf™•æLōkä¤ ū›|ŲÃĩ[ŪæšēœšŌDX„ItjŠPSsr1‡úÁx™]‡‰&k^b’Ōž2>^å­ĄyISû’ˇē^ \œD¨¸>šØé’ˇ˛}YŅÅ&eāUö¨D<¸yˆÅꇱlŧUëAŨQË+(]/fæ]\šZIۘū?oõųŠ÷bɋŧYōŠU^û—Ā?īņ&ī0Ä7Ģä’ׁˇēoÖĨ/î×Ēëx_ķŽŧųŧŅ’WÖ!øî+„,Š{x1XōĘ5Ū?î.ô]ŪīŌwéYāĨô‚P> `ū ×xįWūļãmšŧŪ:ø/ũ°/ũŌCwųƒ9÷˙Öđ–!Ę`Ë+ŧYé^’¯9…[q­Ā%„žÁk†#ŅåoĮ[‚×ÜL_'ū^¤ÚA?t1ÅđlÁ;T¨ĻM|>ŲÕAíķÁžĮ˙ƒxkņĄ ŪĢ×YËû]Ëú—xß.y¯PŒž#_@}VŦķÚĀēr?d÷'7yŲ ëéƒĘõJWčyÕglĀKEa†ėęßÍöšz*ö_Q{!ĻĒåå!đ6Õ'1ĩē¯hxq=‡(ԁ÷—ŧäģ#j$:^šä…æmƒņ™bĸãIĐ/æÜˆúHa‚,ÖiŰĩuõZÎĩo/+ėŸ\L›ö8B‰v}AŨ’4]œĒ7xK7’ÚŸĒ%oÕōdžw0Ņņęīyúë1ˍLdŽR^Ķ(]žĐ]×L˜žĪŅ ĸ[CgH˛?Ŗīė€ú!Ŋ‚úS…í3×/ÎGZíFGĻÆĄŊ-ī,đŽÎ$å‡Ôgšä-íŸËq—žT+€—^ÄV ŪKâ-|1ŗ*W ũ/(6Ϙ ŋ‚NœI“ya6’n­‹īh_:6bŊÄ't%Å$úúÉĢĄ@¯VŸ×¨¤ĸ{ä. ™VsĒķܨßĢ,e9ŠŪ‚wj~+zįņH^†Ęp”;ĐNáa¸õ5Ųö|gŠaĖ4ÔgR)¸Ŧtmjt“Đ9†j°GĩZ/Ĩ§bZ&14Ŧš>昐ÕX@Ŗʛa ŊÄī{æg”ģî˜ú´?uÔ;­ŅĶ žKLĖ ûfĐ¯šlš‡Đëí'ƒR>–-ī@nļx˛Ņ=E™ß<Ļ9îMwPūÁ0—Ǟú'”mŋ~\Gä÷¸(ņBČCŊgN RJōäü$ōõ3ę˛Ü!ë°x+ ˛Ú„Qn‰I_Ņ|]Ō6ŪÅ(îŪ[­‚-ž˜Šĩo߄ŋ—o0ž8áh&l<Žę(ĀĐXA"“’WųiāĨ¯úW=}ÆâmŧËĩ`OÃģ&đŲbŨˆųĸÕo4cpr÷Z†Į a\Q2ōŧmĪ'—ŖúîyÄcŸūlōÆ÷đĒ[ŋÚĻOˇōĘî•n_=F$ÛāŊ/Fé1¤o>ŋÉģ¤[đĘģ/¸iŧÉ=‡"īŌēņ˙폡ˇÛī}ÄīāŊžņÉ.æ[ÚŦī}[Ll{&×X}ķ§ģāmôkuwęûļš=fp}ķ§Ÿ7ģũČ`FŪöÍgâ}2ĢoÎŊ|ŅŧËgÛ û˛yoڞwˇļįŨ­íywk{ŪŨkGW7{n_Ļą­[iŽ :Ÿz_ÂO´†ˇŽ6ĄšA\˜Ë×",cŋ›Øv`ÚDŽhk͗[wzø$kĶ÷ŪĐÔëB'ÖfüyŪæ@ ĸŖvŅĪ‘ļ˜ēũĢ;ŦõßtSa˛ÂkÖc¯×b-Õŧŗ0ŦhFļųE}z;T;Šŋ}pqĩUmÕÖíØe3āqËģvÕ ^ŦŪŧĶ6Š ūļwčîØŪ§=äÖąa͗I¸’ųëŧ›ˇÔL(¯ûC-×ŊŌ´Ķ,¸I3¸éīŽG í!ˇJ~jžüjåĻÖyˇęŽ6 ͚§ qrŅ {¯ë`šƒŪljn÷‡l s+īÖĒĢãŊ\åUÍÛūFv5`3‘ģÎ{ąqÂÕōzīRdļ’ ā}ģāŨęMo[%oî2ēuŪoäV^šq•eo[ã 5^ōëÍ ŪZ–=,‡Ĩ’md.´tsKxûŨ m˜Xáíž1mį5kŧ7´\+Ōš­ņ„ė’÷⯠:(÷‰ČyN˙™o4§J@'PYĖæŪū' ŧãZ4xé ŠŽ˙^jųŗŦ.ĸōQáĢį1–`öĨBvhˆĪŽ6˜ĩ­-ĘÛã 5“k[ykIŧRdŠV“(gå›5aĢį^GyŦ…cƒČõÜąôļĪ]OKâ>§ ̟mäëšŌ˛ņw‚ö"aō˙É įë#q]ZQŸ++ŨŒĩ"˜KČyF7yõ‚ˇKļUJ˙ņŦ4^šM¯(ĩōŠęČqg‘†”BRį9ņޏ-rYTʖ3đæ ¯aÂčŅąōų ãK“°öėˆx-ãųXG†IÃuÎ^IĘųmˆĪķ*jøw?­š˙ĩ$ˇä!˛ ņNŨ6Ū ‰×^ŧûqv…€¨„ ‹Ėx‘UÔĘi3bXUŸ(°áRĒkđjTūB[&*3ę+ĒąY4×øœxûCAŧQŌ+g–挕y{‚ ŒOØ#ķÅ _š—ėˆë N`tĢNDÆŧŠéĻĸ ß2ao<ɰ¨6qúŧ˜”ųËv[SúJvôƒ†1Fˆ—S†ŧ•S×*lΉIēņߎF’Ü+ŌQĻÍ!GHĄĄÁlØö,ĩLNSdŽfĐ!E&7Œ!Â@ĻGg/öLĢYĐī„÷ÄKŽŲōB+ŌņžSē#¤ ļ×!jLŽ?Ūž(Öye¨â iyS§ˆˇcí…(>)Ė_ŪZŌGt’1ĄdëæĖŖŪ;mØĢ]*âEÖĐ),ųQYŲ/õŌožāU æ„]ąũĒEˆ!ōã›ôŊɛ…(AāÍŋQ˜ĢLĄ€c5ŧ)ņÆtPL™6žPâk($ĀxfĮēá5Ã>nUĻ׿XfÚ:tGVy]Dtæ<†V¤å›f?YĐ`ģ–ŗôˇņŠ–—аîŨ‰Ā[„%^r^O÷ ŧąˆ‡0JŽ2lj†Ô?ŗFe˛&EԖ.ڀAŪaZ^-ÛĀBVĨT˛ĀK2ötr•ˇēÉ;Š:Ūf>;§Á{ÚōÖkŧˆ'ÔđžHĒ<†ĒÂÖ›ā•Ą*įf$čfGļ^đ†ô­Ę†Z‘†7&^ėC×0 ēwUĩ´j;¯BÔL[/fo¯áÅĪNU‰Í?‰W­ōŌ/¸my“Ā›5ŧ"đīīŠ úDjyŗĀkbŒlZ^^5‚†Â&ÉoPû¯ųƒZōRģØņ"ÅÃ&đŌ%ã†× đf?xHˆˇ&^Ē+ˆ7Ål?• ĸ{H?†‚Ŧá ūĢ|¨Īˆĩ¯‰yQ­ōÚđæj-}ĄØšÁ{¯đĸ͝oxËËĀ‹ŦņŲø*đž5zĨĀ q—z/PÉīë´ã%įŠ‚ôĶÍC‚`TP4lōŽøƒixˎ—:(o+ŧ™o¤oÖōš†ˇ˜„íŸÃā2KŪ~ožÆ+¯/°‹˛ãĨëVŽ^úŧeË[lãĨ‹X~ˇāĩKŪAëŋ>š•ˇņ‡ę"đæØ6eĶĀĢØ"}‡ĐVˆË ‘ØäũŠ…^ŌŠ œix‚ÖlåĨsŅk¤oáCũ›}įZŪāŖ%¯¯ßā´ūÛōę†YãË?ix“ķĀ+(§E]ƒˆūB,1™ĩõ¯ūų›Ÿš}kâa˙į˙bųōŒxŋŊˇnxķēáuuāU¨ČaxķU^ÄBũī<õ˙^xí ũ›ŋ ¯ŧ2bL/cį‚SâgĶĀK×=‘‰Öü—f4Ņž¨(ķˆú'*đĸŊ(ūQ!ŦĄįT” 7ĸl€×ŽōÁ›Ųkęî\Üũ<•nüĘöՔzŌä'>‡XΈ1GåÍ #f{ õĪŠ˙íĸäüēė}ˆÅ8ڟ|đŒ9GHƒh–rŽUĪđX wšŸöC<Ą¨4ąļ5Ī4Ŗ&ā'!x"kPšD&ŧvƒÃ­úĮX÷@cg<5q˙kX|Đ˙wâēȞīQ}[(#h´dD.5FôöY-ËĢãOˆq-M/hĮŦ42ÄĐ2gČėŌMŧÅÜē[ô;;°åÃ2ŧÈž–“wˆ'tĖ1LŖ é¨KNũí‚âŊ—#küuë3N™ķ˛ŪŽßŲ)oc7­đÅa đâ­ŖŠ$ ŲĻéĻ„ƒ”ėËãmÜ~š­ú]Ø&īĀ0“ÕÃø~x'›ˆÕÃîR}/ŧ7ūpûēŲĪÃÛ>œî”/7WëŧÛ֜ļöyxÛmĶģtŊ)h[įĩÛÖô6ö™x›ë‚dŨx¨Ū uē'ƒ7ž.í˘ßtpĢ ŽūÅķļļ˜î‰o=ä‹â}€íywk{ŪŨÚīī˙‡_"‘:]tIMEŌ /6Ö #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char opstring[32]; l_int32 size; BOXA *boxa1, *boxa2, *boxa3, *boxa4; PIX *pixs, *pixm, *pix1; PIXA *pixadb; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "italic_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/ital"); pixs = pixRead("italic.png"); /* Basic functionality with debug flag */ pixItalicWords(pixs, NULL, NULL, &boxa1, 1); boxaWrite("/tmp/lept/ital/ital1.ba", boxa1); regTestCheckFile(rp, "/tmp/lept/ital/ital1.ba"); /* 0 */ regTestCheckFile(rp, "/tmp/lept/ital/ital.3.pdf"); /* 1 */ pix1 = pixRead("/tmp/lept/ital/ital.3.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 0, 0, "Intermediate steps", rp->display); pixDestroy(&pix1); pix1 = pixRead("/tmp/lept/ital/runhisto.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 400, 0, "Histogram of white runs", rp->display); pixDestroy(&pix1); /* Generate word mask */ pixadb = pixaCreate(5); pixWordMaskByDilation(pixs, NULL, &size, pixadb); l_pdfSetDateAndVersion(0); pixaConvertToPdf(pixadb, 100, 1.0, L_FLATE_ENCODE, 0, "Word Mask", "/tmp/lept/ital/wordmask.pdf"); regTestCheckFile(rp, "/tmp/lept/ital/wordmask.pdf"); /* 4 */ pix1 = pixaDisplayTiledInColumns(pixadb, 1, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 1400, 0, "Intermediate mask step", rp->display); pixDestroy(&pix1); pixaDestroy(&pixadb); L_INFO("dilation size = %d\n", rp->testname, size); snprintf(opstring, sizeof(opstring), "d1.5 + c%d.1", size); pixm = pixMorphSequence(pixs, opstring, 0); regTestWritePixAndCheck(rp, pixm, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixm, 400, 550, "Word mask", rp->display); /* Re-run italic finder using the word mask */ pixItalicWords(pixs, NULL, pixm, &boxa2, 1); boxaWrite("/tmp/lept/ital/ital2.ba", boxa2); regTestCheckFile(rp, "/tmp/lept/ital/ital2.ba"); /* 7 */ /* Re-run italic finder using word mask bounding boxes */ boxa3 = pixConnComp(pixm, NULL, 8); pixItalicWords(pixs, boxa3, NULL, &boxa4, 1); boxaWrite("/tmp/lept/ital/ital3.ba", boxa3); regTestCheckFile(rp, "/tmp/lept/ital/ital3.ba"); /* 8 */ boxaWrite("/tmp/lept/ital/ital4.ba", boxa4); regTestCheckFile(rp, "/tmp/lept/ital/ital4.ba"); /* 9 */ regTestCompareFiles(rp, 7, 9); /* 10 */ boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); pixDestroy(&pixs); pixDestroy(&pixm); return regTestCleanup(rp); } leptonica-1.86.0/prog/jbclass_reg.c000066400000000000000000000155311506303110300171520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jbclass_reg.c * * Regression test for * jbCorrelation * jbRankhaus */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Choose one of these */ #define COMPONENTS JB_CONN_COMPS /* #define COMPONENTS JB_CHARACTERS */ /* #define COMPONENTS JB_WORDS */ static PIXA *PixaOutlineTemplates(PIXA *pixas, NUMA *na); int main(int argc, char **argv) { l_int32 i, w, h; BOX *box; JBDATA *data; JBCLASSER *classer; NUMA *na; SARRAY *sa; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/class"); /* Set up the input data */ pix1 = pixRead("pageseg1.tif"); pixGetDimensions(pix1, &w, &h, NULL); box = boxCreate(0, 0, w, h / 2); pix2 = pixClipRectangle(pix1, box, NULL); pixWrite("/tmp/lept/class/pix1.tif", pix2, IFF_TIFF_G4); pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixRead("pageseg4.tif"); pix2 = pixClipRectangle(pix1, box, NULL); pixWrite("/tmp/lept/class/pix2.tif", pix2, IFF_TIFF_G4); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); sa = sarrayCreate(2); sarrayAddString(sa, "/tmp/lept/class/pix1.tif", L_COPY); sarrayAddString(sa, "/tmp/lept/class/pix2.tif", L_COPY); /*--------------------------------------------------------------*/ /* Run the correlation-based classifier */ classer = jbCorrelationInit(COMPONENTS, 0, 0, 0.8, 0.6); jbAddPages(classer, sa); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite("/tmp/lept/class/corr", data); lept_stderr("Number of classes: %d\n", classer->nclass); pix1 = pixRead("/tmp/lept/class/corr.templates.png"); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa1 = jbDataRender(data, FALSE); for (i = 0; i < 2; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 1, 2 */ pixDestroy(&pix1); } pixaDestroy(&pixa1); /* Display all instances, organized by template */ pixa1 = pixaaFlattenToPixa(classer->pixaa, &na, L_CLONE); pixa2 = PixaOutlineTemplates(pixa1, na); pix1 = pixaDisplayTiledInColumns(pixa2, 40, 1.0, 10, 0); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 3 */ pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); numaDestroy(&na); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ lept_mkdir("lept/class2"); /* Run the rank hausdorff-based classifier */ classer = jbRankHausInit(COMPONENTS, 0, 0, 2, 0.97); jbAddPages(classer, sa); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite("/tmp/lept/class2/haus", data); lept_stderr("Number of classes: %d\n", classer->nclass); pix1 = pixRead("/tmp/lept/class2/haus.templates.png"); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 4 */ pixDisplayWithTitle(pix1, 200, 0, NULL, rp->display); pixDestroy(&pix1); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa1 = jbDataRender(data, FALSE); for (i = 0; i < 2; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 5, 6 */ pixDestroy(&pix1); } pixaDestroy(&pixa1); /* Display all instances, organized by template */ pixa1 = pixaaFlattenToPixa(classer->pixaa, &na, L_CLONE); pixa2 = PixaOutlineTemplates(pixa1, na); pix1 = pixaDisplayTiledInColumns(pixa2, 40, 1.0, 10, 0); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 7 */ pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); numaDestroy(&na); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ sarrayDestroy(&sa); return regTestCleanup(rp); } static PIXA * PixaOutlineTemplates(PIXA *pixas, NUMA *na) { l_int32 i, n, val, prev, curr; NUMA *nai; PIX *pix1, *pix2, *pix3; PIXA *pixad; /* Make an indicator array with a 1 for each template image */ n = numaGetCount(na); nai = numaCreate(n); prev = -1; for (i = 0; i < n; i++) { numaGetIValue(na, i, &curr); if (curr != prev) { /* index change */ prev = curr; numaAddNumber(nai, 1); } else { numaAddNumber(nai, 0); } } /* Add a boundary of 3 white and 1 black pixels to templates */ pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); numaGetIValue(nai, i, &val); if (val == 0) { pixaAddPix(pixad, pix1, L_INSERT); } else { pix2 = pixAddBorder(pix1, 3, 0); pix3 = pixAddBorder(pix2, 1, 1); pixaAddPix(pixad, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } } numaDestroy(&nai); return pixad; } leptonica-1.86.0/prog/jbcorrelation.c000066400000000000000000000162661506303110300175370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jbcorrelation.c * * jbcorrelation dirin thresh weight [firstpage npages] * * dirin: directory of input pages * thresh: 0.80 - 0.85 is a reasonable compromise between accuracy * and number of classes, for characters * weight: 0.6 seems to work reasonably with thresh = 0.8. * * Notes: * (1) All components larger than a default size are not saved. * The default size is given in jbclass.c. * (2) The two output files (for templates and c.c. data) * are written with the rootname * /tmp/lept/jb_correl/result */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Choose one of these */ #define COMPONENTS JB_CONN_COMPS /* #define COMPONENTS JB_CHARACTERS */ /* #define COMPONENTS JB_WORDS */ #define BUF_SIZE 512 /* Select additional debug output */ #define DEBUG_TEST_DATA_IO 0 #define RENDER_DEBUG 1 #define DISPLAY_DIFFERENCE 1 #define DISPLAY_ALL_INSTANCES 0 static const char rootname[] = "/tmp/lept/jb_correl/result"; int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin; l_int32 i, firstpage, npages, nfiles; l_float32 thresh, weight; JBDATA *data; JBCLASSER *classer; SARRAY *safiles; PIX *pix; PIXA *pixa, *pixadb; if (argc != 4 && argc != 6) return ERROR_INT( " Syntax: jbcorrelation dirin thresh weight [firstpage, npages]", __func__, 1); dirin = argv[1]; thresh = atof(argv[2]); weight = atof(argv[3]); if (argc == 4) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[4]); npages = atoi(argv[5]); } setLeptDebugOK(1); lept_mkdir("lept/jb_correl"); #if 0 /* Choose library function or detailed steps */ /*--------------------------------------------------------------*/ jbCorrelation(dirin, thresh, weight, COMPONENTS, rootname, firstpage, npages, 1); /*--------------------------------------------------------------*/ #else /*--------------------------------------------------------------*/ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* sarrayWriteStderr(safiles); */ /* Classify components on requested pages */ startTimer(); classer = jbCorrelationInit(COMPONENTS, 0, 0, thresh, weight); jbAddPages(classer, safiles); lept_stderr("Time to generate classes: %6.3f sec\n", stopTimer()); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); if (classer) lept_stderr("Number of classes: %d\n", classer->nclass); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); /* Write the pages out */ npages = pixaGetCount(pixa); if (npages != nfiles) lept_stderr("npages = %d, nfiles = %d, not equal!\n", npages, nfiles); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%03d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } #if DISPLAY_DIFFERENCE { char *fname; PIX *pix1, *pix2; fname = sarrayGetString(safiles, 0, L_NOCOPY); pix1 = pixRead(fname); pix2 = pixaGetPix(pixa, 0, L_CLONE); pixXor(pix1, pix1, pix2); pixWrite("/tmp/lept/jb/output_diff.png", pix1, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } #endif /* DISPLAY_DIFFERENCE */ #if DEBUG_TEST_DATA_IO { JBDATA *newdata; PIX *newpix; PIXA *newpixa; l_int32 same, iofail; /* Read the data back in and render the pages */ newdata = jbDataRead(rootname); newpixa = jbDataRender(newdata, FALSE); iofail = FALSE; for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); newpix = pixaGetPix(newpixa, i, L_CLONE); pixEqual(pix, newpix, &same); if (!same) { iofail = TRUE; lept_stderr("pix on page %d are unequal!\n", i); } pixDestroy(&pix); pixDestroy(&newpix); } if (iofail) lept_stderr("read/write for jbdata fails\n"); else lept_stderr("read/write for jbdata succeeds\n"); jbDataDestroy(&newdata); pixaDestroy(&newpixa); } #endif /* DEBUG_TEST_DATA_IO */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%04d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ #if DISPLAY_ALL_INSTANCES /* Display all instances, organized by template. * The display programs have a lot of trouble with these. */ pix = pixaaDisplayByPixa(classer->pixaa, 5, 1.0, 10, 0, 0); pixWrite("/tmp/lept/jb/output_instances", pix, IFF_PNG); pixDestroy(&pix); #endif /* DISPLAY_ALL_INSTANCES */ pixaDestroy(&pixa); sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ #endif /* Choose library function or detailed steps */ return 0; } leptonica-1.86.0/prog/jbrankhaus.c000066400000000000000000000163741506303110300170320ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jbrankhaus.c * * jbrankhaus dirin size rank rootname [firstpage npages] * * dirin: directory of input pages * size: size of SE used for dilation * rank: min pixel fraction required in both directions in match * * Notes: * (1) All components larger than a default size are not saved. * The default size is given in jbclass.c. * (2) A set of reasonable values for cc or characters, that * gives good accuracy without too manyclasses, is: * size = 2 (2 x 2 structuring element) * rank = 0.97 * (3) The two output files (for templates and c.c. data) * are written with the rootname * /tmp/lept/jb_rankhaus/result */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Choose one of these */ #define COMPONENTS JB_CONN_COMPS /* #define COMPONENTS JB_CHARACTERS */ /* #define COMPONENTS JB_WORDS */ #define BUF_SIZE 512 /* select additional debug output */ #define DEBUG_TEST_DATA_IO 0 #define RENDER_DEBUG 1 #define DISPLAY_DIFFERENCE 1 #define DISPLAY_ALL_INSTANCES 0 static const char rootname[] = "/tmp/lept/jb_rankhaus/result"; int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin; l_int32 i, size, firstpage, npages, nfiles; l_float32 rank; JBDATA *data; JBCLASSER *classer; SARRAY *safiles; PIX *pix; PIXA *pixa, *pixadb; if (argc != 4 && argc != 6) return ERROR_INT( " Syntax: jbrankhaus dirin size rank [firstpage, npages]", __func__, 1); dirin = argv[1]; size = atoi(argv[2]); rank = atof(argv[3]); if (argc == 4) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[4]); npages = atoi(argv[5]); } setLeptDebugOK(1); lept_mkdir("lept/jb_rankhaus"); #if 0 /* Choose library function or detailed steps */ /*--------------------------------------------------------------*/ jbRankHaus(dirin, size, rank, COMPONENTS, rootname, firstpage, npages, 1); /*--------------------------------------------------------------*/ #else /*--------------------------------------------------------------*/ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* sarrayWriteStderr(safiles); */ /* Classify components on requested pages */ startTimer(); classer = jbRankHausInit(COMPONENTS, 0, 0, size, rank); jbAddPages(classer, safiles); lept_stderr("Time to classify components: %6.3f sec\n", stopTimer()); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); if (classer) lept_stderr("Number of classes: %d\n", classer->nclass); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); /* Write the pages out */ npages = pixaGetCount(pixa); if (npages != nfiles) lept_stderr("npages = %d, nfiles = %d, not equal!\n", npages, nfiles); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%03d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } #if DISPLAY_DIFFERENCE { char *fname; PIX *pix1, *pix2; fname = sarrayGetString(safiles, 0, L_NOCOPY); pix1 = pixRead(fname); pix2 = pixaGetPix(pixa, 0, L_CLONE); pixXor(pix1, pix1, pix2); pixWrite("/tmp/lept/jb/output_diff.png", pix1, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } #endif /* DISPLAY_DIFFERENCE */ #if DEBUG_TEST_DATA_IO { JBDATA *newdata; PIX *newpix; PIXA *newpixa; l_int32 same, iofail; /* Read the data back in and render the pages */ newdata = jbDataRead(rootname); newpixa = jbDataRender(newdata, FALSE); iofail = FALSE; for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); newpix = pixaGetPix(newpixa, i, L_CLONE); pixEqual(pix, newpix, &same); if (!same) { iofail = TRUE; lept_stderr("pix on page %d are unequal!\n", i); } pixDestroy(&pix); pixDestroy(&newpix); } if (iofail) lept_stderr("read/write for jbdata fails\n"); else lept_stderr("read/write for jbdata succeeds\n"); jbDataDestroy(&newdata); pixaDestroy(&newpixa); } #endif /* DEBUG_TEST_DATA_IO */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%04d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ #if DISPLAY_ALL_INSTANCES /* Display all instances, organized by template * The display programs have a lot of trouble with these. */ pix = pixaaDisplayByPixa(classer->pixaa, 5, 1.0, 10, 0, 0); pixWrite("/tmp/lept/jb/output_instances", pix, IFF_PNG); pixDestroy(&pix); #endif /* DISPLAY_ALL_INSTANCES */ pixaDestroy(&pixa); sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ #endif /* Choose library function or detailed steps */ return 0; } leptonica-1.86.0/prog/jbwords.c000066400000000000000000000112241506303110300163410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jbwords.c * * jbwords dirin thresh weight rootname [firstpage npages] * * dirin: directory of input pages * reduction: 1 (full res) or 2 (half-res) * thresh: 0.80 is a reasonable compromise between accuracy * and number of classes, for characters * weight: 0.6 seems to work reasonably with thresh = 0.8. * rootname: used for naming the two output files (templates * and c.c. data) * firstpage: 0-based; default is 0 * npages: use 0 for all pages; default is 0 * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Eliminate very large "words" */ static const l_int32 MAX_WORD_WIDTH = 500; static const l_int32 MAX_WORD_HEIGHT = 200; #define BUF_SIZE 512 /* select additional debug output */ #define RENDER_PAGES 1 #define RENDER_DEBUG 1 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname; l_int32 reduction, i, firstpage, npages; l_float32 thresh, weight; JBDATA *data; JBCLASSER *classer; NUMA *natl; PIX *pix; PIXA *pixa, *pixadb; if (argc != 6 && argc != 8) return ERROR_INT(" Syntax: jbwords dirin reduction thresh " "weight rootname [firstpage, npages]", __func__, 1); dirin = argv[1]; reduction = atoi(argv[2]); thresh = atof(argv[3]); weight = atof(argv[4]); rootname = argv[5]; if (argc == 6) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[6]); npages = atoi(argv[7]); } setLeptDebugOK(1); classer = jbWordsInTextlines(dirin, reduction, MAX_WORD_WIDTH, MAX_WORD_HEIGHT, thresh, weight, &natl, firstpage, npages); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); #if RENDER_PAGES /* Render the pages from the classifier data, and write to file. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); npages = pixaGetCount(pixa); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); #endif /* RENDER_PAGES */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%05d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ jbClasserDestroy(&classer); jbDataDestroy(&data); numaDestroy(&natl); return 0; } leptonica-1.86.0/prog/jp2kio_reg.c000066400000000000000000000163401506303110300167260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jp2kio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossy read/write * I/O in jp2k format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in jp2k format. * * * jp2k supports 8 bpp gray, rgb, and rgba. * * This makes calls into the jpeg2000 library libopenjp2. * * Compared to reading and writing jpeg, reading jp2k is * very slow, and writing jp2k is miserably slow. * * If we try to run this starting with image half the size, * the library gives opj_start_compress() encoding errors! */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Needed for HAVE_LIBJP2K */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ void DoJp2kTest1(L_REGPARAMS *rp, const char *fname); void DoJp2kTest2(L_REGPARAMS *rp, const char *fname); void DoJp2kTest3(L_REGPARAMS *rp, const char *fname); int main(int argc, char **argv) { L_REGPARAMS *rp; #if !HAVE_LIBJP2K lept_stderr("jp2kio is not enabled\n" "libopenjp2 is required for jp2kio_reg\n" "See environ.h: #define HAVE_LIBJP2K\n" "See prog/Makefile: link in -lopenjp2\n\n"); return 0; #endif /* abort */ /* This test uses libjpeg */ #if !HAVE_LIBJPEG lept_stderr("libjpeg is required for jp2kio_reg\n\n"); return 0; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; DoJp2kTest1(rp, "karen8.jpg"); DoJp2kTest1(rp, "test24.jpg"); /* DoJp2kTest2(rp, "karen8.jpg"); */ /* encode fails on smallest image */ DoJp2kTest2(rp, "test24.jpg"); DoJp2kTest3(rp, "wyom.jpg"); return regTestCleanup(rp); } void DoJp2kTest1(L_REGPARAMS *rp, const char *fname) { char buf[64]; char *name; l_int32 w, h; BOX *box; PIX *pix0, *pix1, *pix2, *pix3; /* Read, write, read back and write again */ pix0 = pixRead(fname); pix1 = pixScale(pix0, 0.5, 0.5); pixGetDimensions(pix1, &w, &h, NULL); regTestWritePixAndCheck(rp, pix1, IFF_JP2); /* 0, 5 */ name = regTestGenLocalFilename(rp, -1, IFF_JP2); pix2 = pixRead(name); regTestWritePixAndCheck(rp, pix2, IFF_JP2); /* 1, 6 */ pixDisplayWithTitle(pix2, 0, 100, "1", rp->display); pixDestroy(&pix1); pixDestroy(&pix2); /* Test cropping and scaling in the jp2 interface */ box = boxCreate(w / 4, h / 4, w / 2, h / 2); pix1 = pixReadJp2k(name, 1, box, 0, 0); /* read cropped to the box */ snprintf(buf, sizeof(buf), "/tmp/lept/regout/jp2kio.%02d.jp2", rp->index + 1); pixWriteJp2k(buf, pix1, 38, 0, 0, 0); /* write cropped to the box */ regTestCheckFile(rp, buf); /* 2, 7 */ pix2 = pixRead(buf); /* read the cropped image */ regTestWritePixAndCheck(rp, pix2, IFF_JP2); /* 3, 8 */ pixDisplayWithTitle(pix2, 500, 100, "2", rp->display); pix3 = pixReadJp2k(buf, 2, NULL, 0, 0); /* read cropped image at 2x red */ regTestWritePixAndCheck(rp, pix3, IFF_JP2); /* 4, 9 */ pixDisplayWithTitle(pix3, 1000, 100, "3", rp->display); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxDestroy(&box); lept_free(name); return; } void DoJp2kTest2(L_REGPARAMS *rp, const char *fname) { char buf[256]; char *name; l_uint8 *data; l_int32 w, h; size_t nbytes; BOX *box; PIX *pix0, *pix1, *pix2, *pix3; /* Test the memory interface */ pix0 = pixRead(fname); pix1 = pixScale(pix0, 0.5, 0.5); pixGetDimensions(pix1, &w, &h, NULL); regTestWritePixAndCheck(rp, pix1, IFF_JP2); /* 10 */ name = regTestGenLocalFilename(rp, -1, IFF_JP2); pix2 = pixRead(name); regTestWritePixAndCheck(rp, pix2, IFF_JP2); /* 11 */ data = l_binaryRead(name, &nbytes); pix3 = pixReadMemJp2k(data, nbytes, 1, NULL, 0, 0); regTestWritePixAndCheck(rp, pix3, IFF_JP2); /* 12 */ pixDisplayWithTitle(pix3, 0, 100, "1", rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); lept_free(data); /* Test scaling on read with the memory interface */ box = boxCreate(w / 3, h / 3, w / 3, h / 3); pix1 = pixReadJp2k(name, 1, box, 0, 0); /* just read the box region */ snprintf(buf, sizeof(buf), "/tmp/lept/regout/jp2kio.%02d.jp2", rp->index + 1); pixWriteJp2k(buf, pix1, 38, 0, 0, 0); /* write cropped to the box */ regTestCheckFile(rp, buf); /* 13 */ data = l_binaryRead(buf, &nbytes); pix2 = pixReadMemJp2k(data, nbytes, 1, NULL, 0, 0); /* read it again */ regTestWritePixAndCheck(rp, pix2, IFF_JP2); /* 14 */ pixDisplayWithTitle(pix2, 500, 100, "2", rp->display); pix3 = pixReadMemJp2k(data, nbytes, 2, NULL, 0, 0); /* read at 2x red */ regTestWritePixAndCheck(rp, pix3, IFF_JP2); /* 15 */ pixDisplayWithTitle(pix3, 1000, 100, "3", rp->display); boxDestroy(&box); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); lept_free(data); lept_free(name); return; } void DoJp2kTest3(L_REGPARAMS *rp, const char *fname) { FILE *fp; PIX *pix0, *pix1; /* Test write and read using J2K codec */ lept_mkdir("lept/jp2k"); pix0 = pixRead(fname); if ((fp = lept_fopen("/tmp/lept/jp2k/wyom.j2k", "wb+")) != NULL) { pixWriteStreamJp2k(fp, pix0, 34, 6, L_J2K_CODEC, 0, 0); lept_fclose(fp); } pix1 = pixRead("/tmp/lept/jp2k/wyom.j2k"); regTestCompareSimilarPix(rp, pix0, pix1, 20, 0.01, 0); /* 16 */ pixDisplayWithTitle(pix1, 500, 500, NULL, rp->display); pixDestroy(&pix0); pixDestroy(&pix1); } leptonica-1.86.0/prog/jpeg-coded.tif000066400000000000000000000156301506303110300172350ustar00rootroot00000000000000II*0˙Ø˙Ā @€˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ų˙Ø˙Ā @€˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļ—UęEA%ô1õaTf×`OâJ_Æ:¨ū(įŠoü$˙Z?á'4Ģâ~zÕÛFØ kN Z ąķ ē’Ŗ•…>Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠBÁG'R}FAË Æģņ"&BšĮŸÄ3HHLÕēŧ¸‰¤ĸŗ§đĘōŠĖ›Ãr.v択wLÔaŊ_īRKßöŠ•é?ÅNûīûT}‚÷ũĒ …īûT ßöŠŗīO÷Š“vüMU¸đ´ķpsX×>ģˆä)¨!ĶîmŸ tšlK€įķŽžĶCˇ1Z‘h'đŠšŒ1ôQSĒ*ôEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHT S ˇUÃi ūIö8ē)E¤#øE/ŲbūčŖėątQöX¸(û,?Ü}–/î QoūNōcÂ)’[E à üĢ˙@Še%škŊ*{7ʃRYk3Z¸W'õÕØkQ\(†kY$WR :Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ3I‘ę) ¨ū!L7/V_@ŋÄ*&Õ _âÖmĮņ aÖíĮņ OíËī ?ˇ-˙ŧ)Fˇū!ųĶŋļm˙ŧ)Fŗnˆ~táĢ[Ÿâ8jâõÔ ?Ä*Eģ…ē8ŠŅžŒ)ÁčE-QEQE˙Ų˙Ø˙Ā @€˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ* í#HeÍę^-Ž}āšą“#8Ąc¯É !5ŌZkpĖ,3ZqĪƒ*¤ĸŠ(ĸŠ(ĸŠ(ĸ˜ŌĸõaP=ü)ՅU“ZˇOâYüC ôaUßÄŅŽ† o/cPŋ‰ĪjŽū%”ôÍ@úũÃtÍ@ú­ÛôÍGö‹Ų?ŊKå^ŋ÷¨WŦŠũ›yūÕŲˇžôf^ĩH4ËÁũęSa{ūÕ4ØŪīQökŅũęO.õŊIæ_'÷ŠëzwTĢ­]'\Õ¨ŧI*ãvkB)ÆãZPkĐIՅ^‹P‚^Œ*ĘČŦ8"EQEQEQEQEQEQEQERÁĒw:l7 rŖ5Î_xs1ŠÄ–ÎîҏŨÅOm­On@|ņ]—ˆ‘ĀkfB‡ *Đ`à 斊(ĸŠ(ĻŗĒŽN*•ÆŠ üÂą.üJBĮ›]¸”üšĒĻ[ŲĪņS–Æō^ÍS&‰tŨsS/‡fnšŠ“Ã/žsVÃĩ2xa;ОžˆuQVSB„U”ŌmĶøEL, Â)ÂŌüöh‡đ >Ī÷g‹û‚ŗEũÁIöXŋ¸)>É÷!˛„˙üŠĻÂü"˜Ú]ģ¨[Fˇ?Â*ŧž…ē(Ē3xeNvŠĪ›Ãr.væ¨ÉĨ]CČĪ–ōŲŋ‹ŠŊmâ ĸ >kvĶÄQɀĖ+^čf0Ģ!ƒ -QEQEQEQEQEQEQERQU§ą†`rĸąo|:’‚°ntIā$ 5U..íÜV­ŸˆŨ0ÖõŽģ Ā´㚊Aà ˜ôĸŠ)Ŧęƒ$Y÷z´6ę~ašæ¯üBîJÆk+7wü\ÕûOË)Á­ģoF˜,+N-*˙„U…´…z(ŠH:(§mQØRāzQEQEQEQEQE…Aę*6ˇĮ**¤ÚLē+īÃjA(+ãF¸ˇbWP)ÔQEQEQEQEQEQEQEQEą,¨U…qšū™å1‘)<;zVA5ÜQEQEQEQEQEQEQEQEQEVN¯~–Ņã5ÁŪnÔĻ*Ŗ‚j{OųÃ{-Y“ÂÍl?vŊ*ĢAwhxĪbßZ¸€áŗøÖů‰Ās[úˁ–y.b“Ŗ ”zZ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŦOlû1Î3Šä´‚~ßĮLפQEQEQEQEQEQEQEQEQE‡ĄŽ/Äėáˆį†íŖ–@_ÍwÆą¨ )Y‡ Ui´øf*+&ëÃąžJX×>‘ )šÎ{KËcÆę|ZŨšųŗÅjZø•—ë^ßÄ0Ɍ°­ĩ%0Ģ+*7Fú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¨..Ŗ fÅëzĄ¸sŠ“ÃÖ Ō WoEQEQEQEQEQEQEQEQEQ\߈ŦŒą–š­2ņŦnvļ@ÍwÖ7ks ķVčĸĒˇP*ŧ–PČ9QY×: 2į +"įÃDd ŦŠ´{˜NW5{ËsüUfræ.5Ĩ‰F5§ˆĄ~Ŧ*ôZ´ĢKuôaRSЊuQEQEQEQE„Ū˜ĶFŊXUiu8"xVU߈Ŗ@B‘\íæą=Û\āĶôŨ&[™C¸5ÛYY­´@Í˙Ų˙Ø˙Ā @€˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŠxVhʰŽ'[Ԍ`S´-HÅ ÍvŅH$@ĀĶčĸŠ( ĩÁõQUeŌā“?(ŦۏÄųĀŦŠü2Ā’ĩB]æ/ģšŽaŊ€˙äÔ/!ëē­Åâ ãûŲĢąxœŧjė^%Œõ5r=~ęÂŦϝnßÄ*AŠ@ˆSÅôø…8]ÂŒRũĒ/ī _´EũņGÚbūø¤ûT_ßĶ{ū1QļŖū!Qļ­nŋÄ?:ˆëpâkđâø’Ņ…V“Äę:Ą7‰]¸ZĨ.ŗu/LÔé—øĒÔ%ÄÄoÍnXøuc ¸­ø-c@P*z(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ēz…ĸÜÂF9ÅpWÖĪctXkĻĐĩA*cÍt`äfŠ(ĸŠ(ĸŒژŅ#uQP=„ÕET—DķōŠŖ/†ã9ĀĒx`˙ĒRøztûšĒͤŨĮĶ4߲^§÷ЇíÉũęQ=ę˙zœ/oGvŖí÷ŖûÔŋÚWƒûÔŋÚW‡ûÔÖŋŊ?ŪĻũĻųŋŊFo_ûÔ}šõ˙ŊO]:ņēíēî§ŽpĮœÕ˜ü7!ëšģ†…hÃáøSNJŋ™Â*Ōˆ8QOĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ°ĩŊ4M e^kˇšK ŧšíôŨR;ˆ€,3Z€‚2)hĸŠ(ĸŠ(ĸŠ)Ĩõš`ŒõQQ›8[NJŒéĐáÃĨ[ŸáÃŖÛŸáŸØ°tS?°āūčĨ$øE;ûßûĸžēM¸ūųTƒM€Š”#ø<[D?„RˆcÂ)Â4Â)BØRŅEQEQEQEQEQEQEQEQEQEQEQMtĨMrēΉģ.‹ÍsņËqa/ptzwˆU€W5ĐÁwę °ĢQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5Ņ\a†k#PŅbœĒ3\­æ5Ģ@p)–š¤öoĩķë]VŽG8˜fļREeH4ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĸšŪ9”†Q\ūĨáõ“,ƒšæĨĩšą“#wŊŖjrąųŽŠrƒNĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(#=j•֝ĀåFjĨžÉ¸ ÖEÚ S¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+˙Ų˙Ø˙Ā @€˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ų˙Ø˙Ā €˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŋ˙Ųū€  x†:@([!VHHũøËogũ•ũČ 7ž›˙Ø˙ÛC    $.' ",#(7),01444'9=82<.342˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ų/tmp/foo.tifCreated with GIMPleptonica-1.86.0/prog/jpegio_reg.c000066400000000000000000000215001506303110300167770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jpegio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is a Leptonica regression test for jpeg I/O * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images and image * metadata, between Pix and compressed data in jpeg format. * * This only tests properly written jpeg files. To test * reading of corrupted jpeg files to insure that the * reader does not crash, use prog/corrupttest.c. * * TODO (5/5/14): Add tests for * (1) different color spaces * (2) no chroma subsampling * (3) luminance only reading */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Needed for HAVE_LIBJPEG */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ void DoJpegTest1(L_REGPARAMS *rp, const char *fname); void DoJpegTest2(L_REGPARAMS *rp, const char *fname); void DoJpegTest3(L_REGPARAMS *rp, const char *fname); void DoJpegTest4(L_REGPARAMS *rp, const char *fname); int main(int argc, char **argv) { L_REGPARAMS *rp; #if !HAVE_LIBJPEG lept_stderr("jpegio is not enabled\n" "See environ.h: #define HAVE_LIBJPEG\n" "See prog/Makefile: link in -ljpeg\n\n"); return 0; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; DoJpegTest1(rp, "test8.jpg"); DoJpegTest1(rp, "fish24.jpg"); DoJpegTest1(rp, "test24.jpg"); DoJpegTest2(rp, "weasel2.png"); DoJpegTest2(rp, "weasel2.4g.png"); DoJpegTest2(rp, "weasel4.png"); DoJpegTest2(rp, "weasel4.5g.png"); DoJpegTest2(rp, "weasel4.16c.png"); DoJpegTest2(rp, "weasel8.16g.png"); DoJpegTest2(rp, "weasel8.240c.png"); DoJpegTest3(rp, "lucasta.150.jpg"); DoJpegTest3(rp, "tetons.jpg"); DoJpegTest4(rp, "karen8.jpg"); return regTestCleanup(rp); } /* Use this for 8 bpp (no cmap), 24 bpp or 32 bpp pix */ void DoJpegTest1(L_REGPARAMS *rp, const char *fname) { size_t size; l_uint8 *data; char buf[256]; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; /* Test file read/write (general functions) */ pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/lept/regout/jpegio.%d.jpg", rp->index + 1); pixWrite(buf, pixs, IFF_JFIF_JPEG); pix1 = pixRead(buf); regTestCompareSimilarPix(rp, pixs, pix1, 6, 0.01, 0); pixDisplayWithTitle(pix1, 500, 100, "pix1", rp->display); /* Test memory read/write (general functions) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix2 = pixReadMem(data, size); regTestComparePix(rp, pix1, pix2); lept_free(data); /* Test file read/write (specialized jpeg functions) */ pix3 = pixReadJpeg(fname, 0, 1, NULL, 0); regTestComparePix(rp, pixs, pix3); snprintf(buf, sizeof(buf), "/tmp/lept/regout/jpegio.%d.jpg", rp->index + 1); pixWriteJpeg(buf, pix3, 75, 0); pix4 = pixReadJpeg(buf, 0, 1, NULL, 0); regTestComparePix(rp, pix2, pix4); /* Test memory read/write (specialized jpeg functions) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix5 = pixReadMemJpeg(data, size, 0, 1, NULL, 0); regTestComparePix(rp, pix4, pix5); lept_free(data); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return; } /* Use this for colormapped pix and for pix with d < 8 */ void DoJpegTest2(L_REGPARAMS *rp, const char *fname) { size_t size; l_uint8 *data; char buf[256]; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; /* Test file read/write (general functions) */ pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/lept/regout/jpegio.%d.jpg", rp->index + 1); pixWrite(buf, pixs, IFF_JFIF_JPEG); pix1 = pixRead(buf); if (pixGetColormap(pixs) != NULL) pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix2 = pixConvertTo8(pixs, 0); regTestCompareSimilarPix(rp, pix1, pix2, 20, 0.2, 0); pixDisplayWithTitle(pix1, 500, 100, "pix1", rp->display); /* Test memory read/write (general functions) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix3 = pixReadMem(data, size); regTestComparePix(rp, pix1, pix3); lept_free(data); /* Test file write (specialized jpeg function) */ pix4 = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/lept/regout/jpegio.%d.jpg", rp->index + 1); pixWriteJpeg(buf, pix4, 75, 0); pix5 = pixReadJpeg(buf, 0, 1, NULL, 0); regTestComparePix(rp, pix5, pix5); /* Test memory write (specialized jpeg function) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix6 = pixReadMemJpeg(data, size, 0, 1, NULL, 0); regTestComparePix(rp, pix5, pix6); lept_free(data); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); return; } void DoJpegTest3(L_REGPARAMS *rp, const char *fname) { l_int32 w1, h1, bps1, spp1, w2, h2, bps2, spp2, format1, format2; size_t size; l_uint8 *data; PIX *pixs; /* Test header reading (specialized jpeg functions) */ readHeaderJpeg(fname, &w1, &h1, &spp1, NULL, NULL); pixs = pixRead(fname); pixWriteMemJpeg(&data, &size, pixs, 75, 0); readHeaderMemJpeg(data, size, &w2, &h2, &spp2, NULL, NULL); regTestCompareValues(rp, w1, w2, 0.0); regTestCompareValues(rp, h1, h2, 0.0); regTestCompareValues(rp, spp1, spp2, 0.0); lept_free(data); /* Test header reading (general jpeg functions) */ pixReadHeader(fname, &format1, &w1, &h1, &bps1, &spp1, NULL); pixWriteMem(&data, &size, pixs, IFF_JFIF_JPEG); pixReadHeaderMem(data, size, &format2, &w2, &h2, &bps2, &spp2, NULL); regTestCompareValues(rp, format1, format2, 0.0); regTestCompareValues(rp, w1, w2, 0.0); regTestCompareValues(rp, h1, h2, 0.0); regTestCompareValues(rp, bps1, bps2, 0.0); regTestCompareValues(rp, bps1, 8, 0.0); regTestCompareValues(rp, spp1, spp2, 0.0); lept_stderr("w = %d, h = %d, bps = %d, spp = %d, format = %d\n", w1, h1, bps1, spp1, format1); pixDestroy(&pixs); lept_free(data); return; } void DoJpegTest4(L_REGPARAMS *rp, const char *fname) { char buf[256]; char comment1[256]; l_uint8 *comment2; l_int32 xres, yres; FILE *fp; PIX *pixs; /* Test special comment and resolution readers */ pixs = pixRead(fname); snprintf(comment1, sizeof(comment1), "Test %d", rp->index + 1); pixSetText(pixs, comment1); pixSetResolution(pixs, 137, 137); snprintf(buf, sizeof(buf), "/tmp/lept/regout/jpegio.%d.jpg", rp->index + 1); pixWrite(buf, pixs, IFF_JFIF_JPEG); regTestCheckFile(rp, buf); fp = lept_fopen(buf, "rb"); fgetJpegResolution(fp, &xres, &yres); fgetJpegComment(fp, &comment2); if (!comment2) comment2 = (l_uint8 *)stringNew(""); lept_fclose(fp); regTestCompareValues(rp, xres, 137, 0.0); regTestCompareValues(rp, yres, 137, 0.0); regTestCompareStrings(rp, (l_uint8 *)comment1, strlen(comment1), comment2, strlen((char *)comment2)); lept_stderr("xres = %d, yres = %d, comment = %s\n", xres, yres, comment1); lept_free(comment2); pixDestroy(&pixs); return; } leptonica-1.86.0/prog/juditharismax.jpg000066400000000000000000004443741506303110300201210ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙°@"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?î….iĸ–‚…Ŗô~4œĐž( š3@ƒĩ%4(éE€ ŅIJ(Í'|(ī@ƒ4‡ŋJ(Ŗ>”qEsëIžô PHhĸ€Ŋ-'z(fŠ(QG4P!(ĨÍ%gĩŠ  ŊčhčĸŠQE'Z0héEÍ’–‰AŖđŖ4(íE 3íEt ŊĀ⓯j)QE%0“Ĩ.i)QE QE€1Í'”Ŋč 4”­(íI@Đ(úŌ”u¤9 4QšO€Ōö¤ Ž(íA¤IœR撀šJnhM&)i3@4ĶēĶI `1š?J_-'z 0 RZ;S´R´w¤Ž´čŖÚ€įGz( bũ)3Eč÷Ŗ9<ŅGJ(´Q@n´ĨQÎhæ@qGz>”P¯ZRM HÔoz;QEԇĨ/n) 19>÷Jh§Į÷ŗ@™r1Å+ž(N˜¤~)ˆ‡øĒĖcŠŦ>õZN”Ä<ô¤úĐx¤Í!†F3FhíE0 J( AIKG4 J(æ“4QEsE”…¤Ŗŋ4PEPŊô¤Ī­-Y!Ū—ŒRRPiF)(Í)4”w¤ —4”Pš;QF{PRū4”´ ZOj( AKIEQIJ>”Qš)(ĸŠ(âŠN´´™4j( Š)(Ni(ĨÍ%Qڀ (¤ ƒGJ( Ō(éEP)3íKĐRcŊ´”´”P( Ōö¤ ”sGjC (ĸQ@ÃņĸŠJ(ĸ’€ôQE%vŖŊ ŌQڀÔQHhĸŽôPIÅ Ō(ĸƒLéIGԊ@vŖŊ‡š(4PE&h Š(¤ ĸŠ(RPxĸSGæŽ)(QÅR QL“éE€zPy4'JĐ!;Ņ@ š'Z(īA4Ā(ĸ“ې íEÍ%ĸŠJ(ëIGã@¨üh 4†Š3Å'áER=i8ĨĻõ ŅE%)8 bŒŅEĀ(Ŗš(¤÷ĨĪ4†€ ;ŅI@“ڊ( J( aEs֐j é( ‰Å.E'8éE‚ôĨ4†€ŒRŅڀšJZJ(īIŪ–‹Œ;æŠZ9õ¤úšZN´ _Ɗ %! GJNÔžôĀ(įvâŽÜŌQIK@CEč 9¤ĸ­ŅFh Ô~4Q@~(ĸŽ´{ŅGRÂƒŌ…éA4Ä7>´QI@áIÍ-!=čŠbÔU4?z¨LļŊ)˛t§¯ŨÅG! Dk÷ĒĘp*´|ĩZ^”q4”´Úc ŅE% \zŌf‚q@ ÍŅEQE™õŖ4PÅĸŒs@Ã4uīGCIŪ€īEĸ€5éi3EY"Đ}(ü(4žÔfŒqF;ĐQԊN”¤â“<Қ:ĐE'Ō–€ŊčŠԌPhë@Ĩq@z( Đ}))GJJ(ĸŠ(íEԔvĸЍęh4”QE¨öĸz^zR{ŅíE-%Đh¤Å-%(Ŗ4R¤Ĩ=)(i(ŖŠ`QH)´RQ@ĩP(ĸŠ(ĸŠ(2qE-'ZRRĐQJM% NŠM! ›KIšCŌZLw ’–ũi€}hŖéHsHŠ(ņŠ)€u4QIHŊŠ(  RŌ´QGŊ¨:ŅŪ–Š? )=¨ī@'9ĨīIÍ 3E˜ĸ”ũ)}) %-čƒĶĨ!ëJšÆiZ`&hĨ”~´QŪŽÔÆQE JZLš8Í%…) B”RŽ)=čQíEč(÷ ŌPER '´é€RRŌ@-”´d ;RPh Ņ֊)3KHh=é)Ɠĩ&hĪ4Ŋ)(4QņQøQ@ Hi~´u 4‡ŠSIր J_ŠN””A¤Qš\QŠc J)i”Phéڀ ´zŌŅíGĩ'ĩ-zRPŅøRRĐ1(Ŗš)~~Q@QÅ ) i)sE%(¤Ĩ¤@Ŗ8ŖŊ8t¤lzS‡JaĻ ¤4QšLŅGz)ˆ*Äš¯V`!2ČāTRš—ĩC%4D9ĢC§J­Y(QAĸ˜i )ëI@ÃڊNô´´†Žôg41Eĸ š(Æ(ĻAŖ¤ aۊ(4cŊGãE5ĀĪj\qH)jÄQøŌv ëIŪŽ‚Š9 Š;ŌPšJ)h(8 ŌPG^”´†€’”Ņ@ Æ(ĸ–€Ž´RPKړĩwŖéE´Qô¤ QԊ(Ŗņ¤ QíKۃ@  ôĸ—”qE…Š( ’–’€RŅFhĸ“­RŌRš@%1@”´t Å¨ëGzsEwĸŠ)(4f€ ŅE˜ĸ–’€4Rö¤9ô bz)O4”CŌÂz(RRŌt ŽôJ;ķER(ĸŠZJ3I@QīLŌž””€JZ( ĸ—ĩœQœQE”´žôsAŖņŖ4€;dŌ´ŧŌPhíAŖÚ€$^”Ķ×Ĩ8tĻ÷ĻGZ1IŪ€¸(æŠ:RQøQŠ3@‚’—œûŌPhĸŠJ9ÅP0Å(&Š'z:ŅEĩQ@hŖđ¤¤hŖŠëGzJZ( Š(īŌ€ŠZO€ CJ:Ņڐ íE“4QíŠ_Ǝ((Ŗt Ĩĸƒ@ ŠJZ(”Ši;sHŒQøĐGŊ0hīKÚŌŖš(Ļ1)sF)9¤ņŌ’— ÍbŒQøŅԘQHaøŌRũ)(Qš(ühŖŒŅE´QE 1F(ĮzCųĸE0 (üh¤Eéiˆ^‚õ§sŠaë@=)1KøŅô Ōũ)i€MZ€qU‡^•n”ɏJ‚Nĩ;tĒîyĻâëVGJ¯Oځ ëIõĸŽÔĀ 'JSE ’–Š`%´” ;Ņ“š(¤Ĩ4žÔbŠ;Ņ@hĨĸ‰Gz3E5ō1KIڗ­X‚’—PPhŖŊZ(<ŅÛ4QIK@ EPuĨĮz3Gր RKIÎhÆhQ@Q@ ڎø Qī@J č ڒŒæŽø ŒQõĸ€ J)h¤9īKHh)hÍ™=¨ĨéI@(¤Ĩ¤ ŒEsŠ(@%/jJZ)9Ĩ¤ Ŋ!Í-”wĸŠ(ĸŠ(ĸŠJ)h4”QK@ IKI@Ä4sKÍ'á@ĻĶŠ(:ŅGz1@ô¤ĸ”ô “ĩ€J:QۊJZ;ŌPíIKš;ĐŠJ^ũ)(ÅRPGԃFhį4˜Ĩ¤ī@ĩĸŠ­}M>ÔQš:š†–šB Z(  @ųi”īáĻĐi(ŖŊ0G=čĸĀҚ( AIŠ( ‚Nhĸ€ƒKI@¤§C@Ä>Ôw ŌPEŸZ RJ@%-čÍ QŨü(RRôPŠNÔ´Pb“š^ÔP1§Ĩ(qŠNč4f€ (ŖŠ@QGzJ(ĸ€ûŌtĨīIÍ ))i˜4†—4”Æۊ(¤Ž)1KšŅ@ŖŊĸŠ(Į­…fŒķ@J(úĐ0íF(úŅ@‚’Š_­Š=č ŒzŅAö¤ĶĨ-%€ (Ŗņ Ŋ(ëIJ84qéL4ķŠaĻQKIÆs@ Š?*^ôœP!GZšŽ*ĸc5v!ÅP‡ĩVoŊŌŦ?JŽOÍB”´œĐ( AIKEƒE! aEP ŖŠ);Đ1i:šZJ))zҊ)){Ō(īF( š(üh¤vŖŠ1Gã@Ôv¤ –Š1@ IJi)¤)i(ĸŠ(ĸŠ:PRŅIL¤ŖŪŠ@QŽh ¤Ĩĸ€Š % (¤Å.i(īE†Š>´v¤úŌö¤ 4bŠCց‹IÍ-PcŠ=čÍ īF(†3EœQAĮ­&i´QGá@ E-%0 CKÔŌPŌQE IKHh }ę)S“@‡ˇJe=¸)´ ڃKÅ% (ĸ€ 3Eí@%)¤¤Aĸ’˜h b€¸Pii &hŖĩ†%ëE€Š:Ņ@„÷ĸŠ8 &ƒEč(ŖÚë@~4œPE&iiŋ ûR~4QLŌqJ~´žÔ€(ŖëG=ø æ“đ Ņ@%-'z@”´”sšBh4Įpƒ­ZMãÖ¨Īv#p—qĒ2gaéJã:™Ѝ^ō%ā¸ŽJ}NwnVKŠ|îÔ :Éĩxc^MT> „pqī\ŗ\ãíPŗŒžŋ§Z|G9Í4øžqƒ\{Ī“ĮĐÔmfČsôÍ;!Z]ÎŪ/Zš|sŽjâëvŒšŽ>ĩį„7 ČŠŊíֆ•ƒTz+k€āū4ßíhŗ÷Įį^x×ޤũsMk‡<ųŒ ÷Ĩ`ģ=5H›¤ƒķ§˙i lã^l—’Ģ}öįŪ§MV`Ų"ŽPģGŖĻĄ˙:Ü#ôa^t5mØąĪ­[ˇÕ]_å—đÍ-Gsž .}+–ƒ[uƒëŠÖļÕ"—‚ø4\.iûŅQŦ¨Ã‚)ā‚)ŒSFhâŽhĸ’–€ Қ;ŅŌ€ pĻ­8ë@€ņM§oj`ôRQī@'֖“Œâ2X‡5qxZŠæŽģL‘Ķ&ĸOŊO“4Ô50e…éNĄzQÍëE­%íEPQGb€ ;ķIøŅ@úQ֎?)=)sIš)?^ÔS÷¤ĨühúR3KGJ)­Ú–’–ŦAE-%'áE/zJ(Ŗ Ŗé@¤ŖŊ/j'z(ŖˇfŌŽ””´”wæŠ(ĸŠ’–Š%¨ĸ€ (ĸ€ J_­! ƒGP0ĸŠJ8cš¤"A bQGj)˜ QšZJ8ôĸŠ)ˆ%/j1Š@%R÷ bQIÍ-%-%QEč¤Ĩ&’€ ( ĐE~4QERfŠ( ŅGz@›N4”ŸZ(ĸ€ŅKŪ“­'^´:Qõ ĸ–’€ CKE'j)i(?JCKGjNôQGĩ”Rķ@ IKGzCôĻĶ%Š(Ļ÷Ŗ­'zif“ŊÅĀƒŌŠ@“ļ( ĐJE6œy ļ1L4öĻöÍÔJ)i( ( Ņ@>”QE„bO|ŠÅTԏcJ{ ä‚k6âFn„}j™ģf‚?:gž\rhŗFsžZ¤É*2Ų÷ĒŦÛW$Ķ㗠‚8ĸÚ1RA¨rsëRŦ—#Â4 #-†—­7h'īVQFˆš’K#%qéOAÜ Ā“ŠiR¤*Ã!É#ō( Œŋ9šU(\ÉĮŊFc qЏņ˜SpäÖĸųIÜŧû aäThŨåõU•GU`*æĐuīUî!0>ôãŌ¤-ØôD¸Gĩ jã­5 c\ĢäzŨ´Õb¸P€ÔĒijc äT§p¸ę:Š)({Ķ…4t§ CŠLRœRaQÉĸ˜ÄŖÛԊ;昉áëVņōæĢB*Éáh$…é#ëCŌÄ)ˆ˛:PzP3Š(;ĐxĨ¤ ŌR÷¤ aAŖw  QEqGzLRûŌPšJ^ôw§pÔPi=¨ RŅøPÖ´‚—Šąwĸ€žhüh4Pۊ=Íu¤Ĩ¤§ŠJSëIڀ OĨ)”3E…Ū€–ŠJ^ô”§Š((ĸ–€KA”¸ŖCE-% 1E ŌŅ@ EPi(ĸh Ņڀ JZCHaEPAĸŠJZLQ@QÍ’–Æ€Š( ƒÍPIE-Š  (ĸŽÔé )úŌ@/Ni8ŖņAé@ EԊ”Ŋ)(QÆ=éQš( bQKõŸJ):tĨæŠBŠ1E0 NôQ@Āõ¤Ĩ Ō†“šSI@ÃĨëIÅ-™Ĩí֐PHzŌ⒀ (¤ lQEäĻT‰@gĨ6œŨiŊ¨@PhĪbŠCK@Q@†—Ŋ'=){ŌRŅ@Ŋ%P֓ŊS¤žõ@é¸uĢDÁ‘UUŒ`Ÿ”õZō#ŌĒĖ…tčjŊøÎ3Å$ÖûXŽ™æ‚šJ‹™"āũE*œŽ×ĪéJ€Į&2{RĒ‚Į#¨õĻeg„ÄwĻzÔōIį@­ÁeŠâŒ´LÉõH!ŽF…Í ”o19įāĀĀņЏJqMŒ û­Á¤t°#•=hVKÜcÉ\úTĒ3Ķ˙Ö*;rc‘”ôīSœ$ĨAΧԓ †S‚OM^O˜†ŒāÕĮoÆŦ[??ížõ>`ҎkŠ$Č#ŒšŅŠüdskMŽĄ”cÔT2I,?2gŽÔĘv‘N’rëR­q–ÚÃ$Jß´ÔŌ`2˜QN Jpj\ņšhĶyÅ:›ī@!õĨúR~ÄĐ:ŅëšsLE¨GĩX#ІÅJŲÅ “Ō¤‹=*&ëSELDÃԊ?(”R撀 )>”t Š(ú)(ühīš‡ Ҋ( ŌRŌPEP‘ŌŠ1E¤Ĩ4P°ĨīIKô­ŽŊčüh Ŗ4væŠ;QE%-’–€õŖĩQځ”Q@š1ÍP ĸŽ¨ aIF1K@%-‚ƒëŠ;Q@€PxĸŽô”Ph `(&Š(RQE IJi)€QE€AKESv¤Ĩ) ŠNÔQ@…M'j)i(ŖŸJ(4R´Q@Q@Qí@%)ĸ€ CôĨPRŌQíI€‡Ĩ%)¤Æ(ŖĨPĮĨ% ũ(¤?J;Đh¤ ķEŽô{ĐsE.)) J(ãŽ)xĻ ¤ŖŊ% (úRŖŠ)(ü)(4P†P(āŌĐ8ĸŠJ)M'éiJ(4QA 8§ĨGR%ŌR“IœP$!Ŗĩ-'jŽŊ(Ŗ4QIKô ĸ—šJ.š)īGŌ€“Š)i oz>´Ļ’œwĸ€ 9ĸ’…!Ĩ¤4:PhĸŌŽô 1íGj( ŌšLĐ”žÔƒĐŌķ@i)~´”tĸŽ( “ŊJk0Q“C6+:ōėF„dR¸ėWÔĩ 6 q÷ŗŊËąbvũjæŖrdr Ŧæ`T9Ĩq0Έ1Ŋ{ԉO#50Œ¯sž”Æ@¨3Œ`SÖŲ dwÅJc*rWRĻÂ2­Í š—åœÁŠGr1úŌą ÁĨC,žQ]ÃƒĀ W-‰×kwīP Ä0GŠREų>•RG+&ÖãĶ>´Æ‰ˇ+pįSFäĮĩôĒDî‡ :ũjÄ BäāzĐĐŌ: ãˇĩ:)wüŽsîjINåÆ85ˆŖdvũi\ĩčQåāŸ›ĩW‘œ qO.HŸ­ČÛzuúR‰!+NGj–f.ŠAų‡Z•ĐĮûÕ)Ĩ5Н"‘J%)cŨķtúRˆžPxĢJ§#‘Á÷D ŊniÜ\ēQ°sĐõǎPų^ãŌŽ…ÎA=)ķÛ)dކĩ Ē7ĀceäwÎ 3â#*į– }i ‘ÜvĸáËr´'wō9ĢCiæ˜-ĖNŽ8ĩLą āŠĀœã5"&Ö=?Čĸ5Ëã=8ŠŌ<đ¤+GĘã׏ĨIŒŒíQ„ÚN¤`P+σžÚŖI$‡îsZRŜžøæ¨´8ädЉhŋoŦIQ!ĪlÖŨŽ­̆85Ʉ íô§.ôå;zĶ&Ö;…¸G<—9ŽBßQhØ'ĩŗmĒ#aY‡4\ jO ¤V š—4Ѓ8ĨN´ÜûSsMːôЁM‹Ĩ+Ķ sSEŌ <ĩXŒqLD(ŖĨŌf—­'J(ĸŠ'z_“đĸ…ÂŠ>ĸŠ( ’Š(ŖĨŠ(´tĸũ(´”Ŋi1@âŠN´áZ~”sšQÛ”´QIڀč”R´t @i:hÍ/ց…čĸ€ÂŠ9 Š( Š1A ĸƒE (¤ bū”´%QHŠ)8Ļ0æŠZ(”uéA¤Å!…ƒEvĸŠ))h Ī4QF(¤Ĩ ĐIKIí@‘Š((÷ĸŠ(ĸŠ(īÍ? J^ô”Ŋ¨ŖŊ% Đ(¤(Ŗ¯zLæƒEôSsëN4ß­/ZCéE)”žôϊCņĸŠ)ˆBxŖŊĸ…”P~”QG”QŸJ)) /ĩ!ôĻ(>´R ^ԝ8ĸ€ķÅ%ŠNԙöĨ¤ Aš(īԊ( zQہ‡CNN”Ę•zPm8ĶMRŌPEųĸ€ N”sF)‚Š(é@ Ŗĩ†€ ( ĐuĸA ëIKI@ 4RvŖë@%/ãIí@X3GSEtĸŠ(1@4P ¤ã4Ĩ ) -%˜õĨ?ZJ@Q×ĨPRŠR@Zi‚Ž3I€ÉæÚ§&šŨFđryĢס !%ą\ĩď,ĮƒŒŌ’4ŌiV#€?ąžã¸ņ‘Žĩe#2GJE6^•6Ā šļY2 ÕYĐÉaô4Ä \|¤qU% 6@éD“lnëP›„' ;ōE4ō“÷NtÍ!˜ÍÖ0=i&yˆØī‘PĢĀ0ëÆqLĨŲ(ÃĢ˜§–3œ‘ƒŒ’8ˇ §ķŠ’ßkc-šF!ˇŨ’OĩJŠŠžOLb¤ä7<Ô\ĩ„yĮiī•'éS~\NHČ"‹–ŖbąC€ĀLR„Ö­|öĮŌ‘"ÚvžiĘ6Ęlaœt¤H€ųO ˛‘ၭ "‹”Ą2^*Î20}ĢFHw &Ē4EA8$SˆÜwzõ¤|˛āô"§|¸=¨Ä|vĄ2yH@#ņĸH÷F7—’åOE(xūT)SnøšĪ§Hōšö§,`ejÄhq@r•cR öíV”\äqBĸų„bž‘íę;æ8Œ’TŸĨ*d‚1œT‚0eéۘÆįŒƒL\¤Ą÷.jˆĒô"ŸœrQQˇ+‚9Îh‰ ąylŦ>ër1MI6ļOņŌ§Č1í#§5 ĸŒs֙-Ņmų”TK+ŠãÔPŪ’–“4 (ü(Ŗ4wĸƒ×­'Ō€ˇJJZJ9Å%-žÔŋ…J( =qG´”qE¨4Ž(īH)kA IEQEĐIKI@‚Š(õ ĩP:PIÍ.i(´”ŧŌ{ĐEP Ŗ4ŧ Nh{ŌQE 9Ŗw ŌR÷¤Í'֖Ž”P ëAQšC CEĀ(4”´”E:Qۊ@QI@Q@RPķE'z(ĸŠ1@%-%ŽsAĸ€”wĸŽhīE%- ŌQŠ9ĻHAĨĸ IKHhč4´†€š(4P0¤Ĩ>ô†yĸ”RPAĸŠCķAĸ’–’˜ AĨ4”sE¨÷ ĸƒGJC­QBŖĩRP⒎ôŖéC))i(ĸK@ EP95 ûĩ~jQ÷h†ŽÔ´Ū(Ph Š3Í&hĸŠC@ IŪŽ´}(iZ:QHƒE'J`Qۊ@'ԃGáE%´”(īIېz(ĸ˜Â­PhĸŠ) H’ŽôPy¤üizŌĨ5Ž*ĨÄģAæŦHpšŦ›Ų° KeEo.3‘XsÉšķWn\ļEPe¯Z„Sė"HĒr0yŠŧŗ/5ÁÎâ:w̰#0āp*‰%XÆ1úSŨÕS&Ÿ,GĮåU]H\g“M *Īv8QŪŗZā“‚ fŽÜFOSŠĒmÆãŽič\PFģÆBķŪ­Cj =ķL‚& 0¸įÖ¤H00*$ÍáĐÂĄxm#ĮjHS#ˇ:TŒDĮ5 LŒāԀbœzRąHE@*D]͊k)ôŠ`R&™CĖ@ iLŠØS(cDj¸āͰ;ĶŗM °éA[*3šĨ.Ū(į§ÃJļ{u§”šrōxā1HV ’ WúÔ*€§đĢØęŒ“zPMŠÆž•ʐjč\´Æq@Ō(āŒZ#RÍÉĢF1éDqÎ(ŦŸ!ĪqB=ęimâšĢ…Č ""ŧiq9ÍHFFÅ ûĶ‘S“IˇÍOˇŒúĶR\tĢ:äōjįÔT2.h%ĸĢ&:TZ2¯Ĩ\⃌Ô-M¸˜w1[ŽĮ"˛ã™ā”Ąûšã5Ņ\IJךČģĩî8Ģ‹če8]]Į pûŦ9õ+¨ĀƚĖļœĮ)…ē7+č iÆrĄ}øĻŅ€J`“sÍtú}ėąĻK­s.ĄÔ’9~•%ûYɲL˜Ī<ЙGĄÛLCŠĘšŅBŽGMŋÎ?š3ÖēKiÐzUĸ tRf–˜ šAAĸ‹PŖQ@é( 4Qš:Đ(ŖéE™Ŗŋtæ€E֊9ĸŠ(ŖŽ‚Š(X SH)ÜV‚ԝ¨íEfƒI@…ĸŠCր h úŌĐyŖĩ&hæŽôw úRQGր Qž8ĸ@NԆ–ƒí@ Eĸ%/4S(ĸĨ”ŧŅ@Š);Đ ĸŠ;ĐIKĮz) CEŒvĻEæƒ@ GJZJB P1)h¤ Š(Í ( Ŋ”v ŒfŠ(ÅQ@”PŌ(  ¤4ĸ“  GJ))QE”tĸŠ)(īEœŅEEč4CERRQGZ`ii;ŌP(ÍÆ4፪4ãôĻAäRϊ3E (4PQõĨ¤ ŊQ@X:Ō ÷Ĩ¤ ŒŅIŌ€uŠJ~õHzPi)i;ĐEŠOz(ĸ€“ĸŒsHŠ;ŅŪ–€ŒQKÅ%%)¤ ō(ö fŽ””Z(=(1EP0ĸŠ @~´”sԊQEQGz(¤úŅAëHĸŠJ #qK‘LsCĩÃāÁž›“Č­[Évƒ\õÃīr+6ZV)É!i=?y׊IˆŒf’''‚h@ZTœc=ĢN(JĻ@ã˜˛Q´dՍᑪôĒéÎ$U Ĩ@8ašˆ$ī95JpĄI­0ŗ+K&ãƒBƒĀ'5ÜIÁŠPHĒ3øTŗx"ä  Õ¸ã9ÍU€@ėkF5ĀâzÔQ!-’*Ã(ÅIĸÔTķS"Tqr:Tę0ŧŠ /­?ĐĐ9éHE2g4qڛœ 8sEĮmDäõčt šTRNsH¤ƒm(điøõŖ)ĐĄM)=č`iĨd8haÆ"”sUq8‘íî)§$āÔģ{SHĮjWD{E(Įjp÷›Fh*‘Í4 SĪĩ4āP+ #ڐ}ÚRry Ķ\AÔr)Œ=éäĶiˆXr)ŒC ‘đ*3ĪJ. “iČÍDÃ*jËōŊ*ģz-\Ēë’sT%‹;š­IxǞĻ‘M36ŦŽzâÜÜŧr+BĘAs`>uöĨšėTirŽšÚ[žxÁ­“ēąÍR=QiЕÜnqÖ¨LŽĀŒãŠß–4ā¯*Ã"ŗŽĄØÜt5(‹hI¤^´l¸'ŽOC]•ĩĘ( ŒJ7ŠûĻŧõCG&厓OœÍ ũá‚*ŒĨˇˇ˜K Ôüâ°´Éʇ†^5´ŽU"GQEĀ3AĸŠ)?3Gá@fŠ;RR抔Q@ÅQŠ(¤Ĩ QÉīGãE05…;ĩ%-Y"vĸŠ3ŠQڊ ŌtŖčÍ’Ž;Đ÷ĸŠ=¨(Åw ŒŅۊ(íGZ9 aIKIŪ€Ôw š=¨QE=é(ö¤E  ĶŊé -%QE!))E!Ļ0Ĩ¤ ĐG4vĸ! Ņ@¨ĸ€Ԕ´„PßQI@ GJJQ@ AŖ­P(f€ (ĸ€ NôQ@'zZLREPq@ IKIڀ (ŖžÔ†ŽôRPŌQA ŅE (?J(h>Ôgĩ J(ĸ‚ĨP1 ôĨ! #֐ķÅ!AõŖh  ŒwŊŠĒĮvĨĪzJQGjO˜ŖˇQڐJ !ĸ€ŅK@ Eč qģĨHzS­<ô⁠¤ĨÍ% (¤ ¤íE€RLÍv¤æ•€_Ĩ%ĸ€Š(4tŖëGĸ€Ž)M%'ԌwŖĨ%/Ԋ8íIÛQE†æŠ(÷Ļ úŌ)i(üi^)M!俁‡=Š=ķKŌ’„>Õ ÎõЉĀŦëɂ)æ“e"…ôœkâ`­ŒĶõ ŗ¸āšĘk†iÁ<úTXdŌY°‹ĮЧEo/ X枒6[<[ÉtĒĖ0á2zĶ™ˆ§ÄŽÃ xõ§JŠÉo­ EcĪZ§ ,0sĮ­Y¸™CAĒūhvČ^ŊšD‰ŽÕe ČĪĐõŠ‘ ŒŸ­KfŅDąGŒO5ŖĘc85N,ddUčÔi3T> Gzœ&y¨ÔsŌ§\ÔØ°yŠwqŠbõ§š WŊ(<ŌĻ€{„Û†ĨÆ:Rã4cŠEĄ6俜ž”ĐOãR/šcį<Ķ 9ÅKÔ›)ÅPÁĨÚ3MĢSĪ4€B´cž)psJŖšbFi¸ÉŠHâŖhÜWÖ^ųŠ1Æi¤֐ČņëM)O*sœPN:SCh°)G"‘žjrŠ‚FãšÃŠ”Šcƒ@"ģ“Q°Į9ŠŲN*RGØ*MWu'ŠœŠdˆ@ČôĄŽSˇåUäSކ­@¨dS!Ŗ>D"ŠL„ŽĶQZŽœ‘U%N:sT™“BZĖYą„séZDÆqę^™ Ŋj„ #dtéZĖXÎ:U;Č3#ą ĘÅ­äÁrˇ^™Ž”ˇjéô5ÄÛJVDqœƒé]´Õ‘Č]Lš6P†_–6įnzTq0āf¤ā?ÖŦ‚J(éIš-%´ 9ėi?ZCô QGž( Š=é;P ZJS@ õĨÅ%-&hRШëN bŒúV‚ ;QGրIJij:QÉŖÚ…֎”ph”v ŅÅ”Ŋ( ÷ĸ–“ŊhĨŖ­'j(4PGlŅA Š;Q@ĀŌPh?J))F)8 AKG4ŸZ;ŅԊ(‡ÚŽii)(ÍP0į֊(Í’Š(īEv “éKI@¤Ĩĸ€Š(ī@bŒ (¤Å)´”Ŗš(1Gj3M$įęJLã­("€’—"›¸tÍúRs@eéš\ƒČ #ĩ'ZR)3ڀԟ…- B)>”¤úSp}h[îĐ=i­Ķî!i Ļ—Ĩ7pĪ<Ķėäâ†pƒ$Qæ(\䯠˜‰07qJâŊĨ“xÆĐiÛ‡ĨHËĒ)ėLcnßjCe~ņļ)pĘ0"R=iÛA9<šB$b€'GāŽ|uŖ‚ß(ãŪĢ8d9*>P‚y¤‚\¤R–=Ē!Į?= cĮjhøĘŠ9zSܓ…UÆZlj nâĨK&˜2ļėnãړ•ęr)îAn´Ū( ûŌŌjP{PIJG­&)vÍQL'ZsuĻĨ9¨´ŸJSH}( š(‏ĨRúŅE…%´” wŖ´Ļ“ë@ Ĩ¤ īIE€–Š(ĸŽ”R)9&–Š`!˜§RŠc Ąu>æ­ĖøSXˇ˛đyÅC)"Ôś­eÜ>ū„ŗ3ĐæĢėÜ++ŨšÛBŗc?•Jåœ!U9'šlōųåĮ­Įœ•ĀĨUX×qÅE Ő1_ĨI2z…= RėI.wc ô§JģŽ â­Čĸ8@zUV' ­ ¤îÆ…SÂāzŠÛŌ’AąH& ÕąÜÛAĢ1.F ?Z¯9õĢÖņŽæ‘´^…˜ē`U•^j8ĐdVĀ&ˆM˜Å8gĨ/hīÅR4WœæĨPiŖéO Ō‘CÁ§‚j,įœTĒFؕN{ĶļƒĀĻ€§;Ō 4Чq<❑NÍC\qQíS’*&ëH¤0dMIŌ•TĸŒ Ёą3ëJÅ#JhÍ2l)όÍ œR€x¤ Kģš2zPRŽi„œ‘š“ŒsL Ew#枸Į9¤ÁŨÅōĻ&‡pj[o8§äŠŽ@XR‡Ą šĄŠąœ/"•šäÕ!1‡ĄĢąÁŠŲąÖĢÉËR†6J„ŒœT§ĻE4‘ŒRĸ!p* ;ՆR[Ĩ1€ķôĒ2ÜĄ$`ƒTÂí›=‡jŌ”xÍS•0s´ĶLM\ŗ ˜`šāŽAĢ'ĘōįڲʸAīųVęíuPØČôĢ9dŦaE$åH?zē 9Ël^xâŗu–+Ĩp88'Ŧéį?\Ķ3‘ÔÂØt÷ĢDëYöŽZLáĢ×U#2aԊJąLŖŊ"œöĨ ‚h PE˜ 4u ûP(4}(ĸ€ ;ã 9 撊;P¸â–’—ZQî(Č ŌQE”´PõĸŅ@ IžÔš¤ÍvŖĩPœQږ’€ŠO­â€Ɗ(úP0ĸŠ3@”Q@€ņGz: (t¤Ĩö¤>”wĸŠ(ĸŠ)”tŖ4 (ĸŽÔRRŅ@ EhqÍ%…QKFh3Î)9ĨÍ!"€Ȥ4ŧS@9ë@ ŌgdRŖÚšÎ^) ƒ<`IŠOz9¤Éîi\ {ŌƒšŒœJAƒŸ­)$ō*6p8=i …8¨d`Fs“IąŠōļx5pGSJ!wqšrZF -ô¤¤ĢØÔ‚@:œŒĀ#Á~ũĒŧŽžf?Nô]‚4‚:ŌqŒæŠá€$SÄ đN)Ü CŖ8ÔunyĨČ ŲöĸāJ1œ’(.*2ãĨBķc<Š›p-’x¤’UéģĒ›…e°'­AŊ‰å4އ•Ž$÷§11¨P~næĢDåXy÷ŠËØcÖĻã#Ø>ô‡>æ“yĪHÍģ;ŽBô¨’ f`qĶ9 -}ĻxĪOm4čfãÍ8'¯5A”ų›ŗĀéR…û¤ŠĄ0ŌÆÂÄhßwŌĒ›´Œ~ķŠŽxäÚF÷éR‘âM¯ž"‹…ģiŖuŌÉ÷0¯=ę!l¯žÅVųTŊôõ¨äpė’Xô4ŽĘĮi‘'ŠƒŪĄ Üu÷ŠU‹ąfÆAëL „ģXF:Tō85 L šû¸ĪSž0á×ÚĒâ%Į94u¨ŧÁܜûSƒzœSųĮZR}*2sÁ Ō†ĪJ;ڌã­Q@ÃŊ!Ĩ&’€hĸŠzPŨ(N”M%!´¨¤ĨÍ%QGz(ĸ“Ŋ âŠ?(÷ĸéš !ĸŠ(éE!ĸ€ÔRf’€ŅÍ'ĩ)ë@Äĸ–’‚ŒQ@Í0­P(Rg4ŧf“94„Ö4ėĶü´ î[ AŦˇËc5ąvŲ°îsŧúÔH¸”Ÿ­)¨$ķK€$ÕvpOōŦ“ÔՏcÕŋĘižĶw†o”qzŋ{˜­N9ãšÄļ%Ž*÷æļŠ1oShÆL@(?AZ6Æ2 =АÄ!ŸŊVŖb@Ё“\ēlÚCnæöĢå7/"̞…|R*#¸¨dģ{U‡äTd‚§¤Ņ \ 5r=ERÎų#ô­đ f‘´K*ÄfĻĄA“SRo­'°§čzŌ į֙ĸ`“ĪjxŖfM8/8 ĄÁGĨKˇŽ”Ä\`žĩ&NhŠ9Í?9ĸŽüRĮKH įšq ᤯M<•Ļî(ŪGAHIÍ8ã­7¯8 .'ŠNqŠ Ŗ4\BįŽi‡§i‡9¤KÅ¸Ļą$‹œP4XĪŌqQ†4n>”ĀyāqLĪ­!r{SI ĐöķÅ ņÍŽ(°ČÛ¯‡8Ą‰&“#ЄôZ­ƒœžO“éQēdqNĀ™ 7™›­JŲ#šn܎”˜…GéUäR:wŠŨļ¯éQÉųZ ąJ@wäTNš\âŦČ1ČíUä`sB&HĪ—>z°ä VŲ•BDßŪbąŲIn˜Š…ÁzVМõföQ.ĐyÛĮŌŽi{Kr}ņXėÅæptâ´4ėŒķŠŖžZ=Ë3cŠŧ —ÍP˛`"ÁīW‘ĀÉĻfJ́ŠEš5åÛ58ĻŒQGJ(ÍŠ RRĐQEQG֎Ô}iLŅ@Ê:ŅŧZkzZAKøV„…{Ņ@Ō’— ¤ ƒIKڀŌŌ(Ĩ¤Ŗ<ĐIEšĮ4”QøPG֎Ôv š(ĸ€ qEŸJ(ŖĨ  4QŪ“>´´žô´hQKÅ'áH¤üih4ĀJ(ĸ€ũhĸ’ EPöĸŽÔ”QKIڀŠJ &}čx¤8ϐOzk6Ņ’häÎi¤ķɨrO*31ÎK @[žOJG‘PdÔf` Z Ü {Đ1 ™##­;e@Í0…Û’rÔŅ3(ߚ~üˇMŦ)‰ÉÆjŦ×.ŽO—׊Š'’]ū`T§Ŋ!@)¨Iq$gpuzķŠŨŌ0[īš.1’LĖÛ6­$l7đsŽ0i1Žü1įšt †6mã#õĨp.ŽJ‚Ø‚•§)÷jļwŽZAéÖĄf}ø z˜Î üĮši‘ÜƒŸSHąäžinŸėŅĒ <į=A=Ķ+mīŒņU$y\aR{žju@Ęėzã$š`PĒš@VÛ{[Ã)ÁĀČëSĮ¨9EIGÍ׎Õ$Že\œįĨF–ÄąĖ`úšC%y %ÁŨŌĸ´€Œļ Z‚Ū-āČģˆā(č*gaā¨1Ú6 5Â×ģ2ņßĨYŊ™bP e…Eb­…OâãŸJCGi#WûÎyŠØ4FŖ-ŌĻKf{€Áv¨ČĻ‚^(Ī$ūTX6”Ī5¸ø2I§eYd .æĢā ÃoHÃúP!‘ŠfÚĘ=jl° ÍŽW Î*XĄ2–mŖŊ*åcžVm§qSŪ—ČØĀģõÅhČ"RzUöÉ’91;Jž P!ĶJ?,ąųzÚŠ<ņÄĒAģģÔ­ ō  Ëœ “ÍB–Í•”9āú{R$†`N̤0?.jŸØļî‘döÍXˆ˜†oNâ„ĩ8%ēĶ’O—kgĩb@a ¸`}ú}iÆÔ<.ɍéÉRjŠĘvž^•/œYvĶÚĄ ŒĨvsœņڕJ€?1yk’yŌž?1HîPAĮŽ:R “ĩJFE8Ô ,ĀÖ¤;ƒ@‰1IīFCw ĶRQEHŧ ŌUÆ);ĐQۃA 4Rõ¤¤sE-% Ā;ŌRŌgš@-&{Ōū™ôœRæŠJ;QGjLŅô Ō´RŌ (tĸ—ņ¤ BuĨæŠNô´vŖÚ@ IKM&5 ˇjsĩ@īŠŠ× ÖE‚I&ĩ'|­e\zVr-’ŦÃ5 œúTŗGģ‘Ú’%ÄmĀŦē›t!ēhšu÷Ž)*ĢNž@ą…^ãž+ddɚBÍÆ*{r}j­°ÁŽ=ęÔg2dtω.˙Ë2jŸ-#Ö´D`ĮƒTed`=i2ĸFTģ`vĄ“jāŠ|@0N)eR3ÅC-ãQæätĢę§ĐsU!R$æ´B‚ ƒLÚ"Ä8Īz˜{ÔqŒtАyŠ7ˆāšô§Ē…â“sJ§'“L´.Đ9õ¤Væœ9<ŠMé2“$ š‘HīPǜņOaˇŊqĖĀRƒÍ4E4)$Đ%š0zqéLE§ކ'Ū€5€4 RcC¸Û֓McôĻdžô_A$LįĨ4}i9€$ŌAâ“é #šDĶ1ÅŌfÄpīK‘M"˜I!˛JiëÍ41&“qĪ4Á!ä€3HzJiČ nGZanԁCLf ,? æ¸iĨTnN3ŌÄ°ĮJ<ĶTüÕ>^”–Ą- Ō¯ËUÁ?w9ĢrCŠŽ~FÎ2)4FBķĶL§ËJŌ™ÕãĀ\TØ s֙“ŋR›‘ˇžĩ[sVfROOn• ŋt?´Ė掆Ä˙ž8ūU্#$Ö$,ÁņžĻēKƒÂ01VŽYŖR'P *Ti ĒųOZ† ,Æĩ"‰*ŒŦJ„*đ)ÁŗÖ‘qNĀ ëE%ÄŊ)3Fhq@ÅPGáE&hhŖĨvĸŠ)€~QGZC5Áâ—9ĻŌŽĩĄĐ(÷ĸ€Ž´ JZNô´{PQAPqE/J((íEQڌŅ@Px Ž):ŌĐIŠZ9 Íwĸ‰KE%QŠZ&1FhŖĨ%QÅ (Î(ë@&8Ĩĸ!ŖŠ>””tĨĸ€CI¤ÉĶFĖdšRØ¨ĖŠŸŊúÖ}Íɑđ§jįˇz­#Æ"ųŸ<öЏ>pėEBęd;‰5‘–mÂVR9\*už’5Û!ŨīŠ.4‹ĨH?Æ ēžE‰nŌUõĨ/ží™~āP -!bQ¤ÆT` W¸(Ü.~•ÎĨ‰ČôŠ ŒãŠ`9$%AÆ)Aũ)‰¤7ŪÍąHNŨBîåžãČNp2h‹ÍhōĀqÆ)"ˆ‰DíÕÁ'ĩ9X4…U‹zãĨHвGˆ—'ØgŊLJˆō]˛j‹]ʃG\įĨHãzã%¸āĐŲXaX{ša‰ŖË+‚3Ÿ–Ą‘\ ‚xíLVÃåHGë‘H šuÛ¸Úx”Ą Ž$ųķ´´ÆI&ââ)ˆÅøĩĪ´ōĀô\,[2Ĩ‰Į=* pĮ¯ŨÆQ8ĪcI&㌟ČSÅÚĖ0 lįÛņĢjgan=ĒáōÁ]ā“É5ą‘ŽõbO­!—˛Wî9â˜ûÁČ9÷5 v—‰Ėkœ°#¨Ģ‘¯É÷-ÔzQ`3īíüû‰$]ÅHsÎ*Ũ¤Égo6Åà sÖ¤6Ë҉Áė:Ķü°B€‹žOsM05lŖÛníQž:Õ ŌŋnfQ–^vŌŦ͉?|yĮ~*¨”[‰$ ģ1Îiˆ¯¯,­Ëp4×X:¸ ØwÍ8ퟐ§§Ø |Á œ‚zTŒ˜HI"˙ŊíH÷)Ū4Ÿg(€ÁĮáP´4˜Á#ļ(¸Éƒ™0ÅAúĶĨX\ī Î;ÔB&€üĮ ÷Š|Ē6äp=él"'cĶ÷šā{T #Ęw¨JP ļK}ĶĪŊ„l^ô†9cܙ'kSԔۆÔˆHH éË$„ä¨ ¨ M:å#˜‰†GQ“Ú§ŋ_%üØI1ŋzSˎãĀ‘3ļƒM #J ā‘@úĐzņQ™“8'ô HŦx`hú;ŌŖ9õ/bŅ‹)`Į°¸Ų†Í,ƒ'šb!Æ2ĮЎA’Ą.~\ņNdŨ&Nkj$`=*ĩādé×Ōļ‹1e¨Đē’ZĻ[–ęHëVãĀųŠØËJ¸58ĖÜU‡˜įŽ•rsCØq L‰HũjFRĘIëš ĮĪ­•:1eúS§Žįą¤oĄ2g8#8뚮͚NV„j‡$āŠJEĐAõĻh˜ü2)ɞôŠĀŒRœô‡qāƒŌ‘ŗšníŧb““֐yČéwÔĖ{P“Í+‚DÁ€ĶjpZk›\hh~phf=ŠJ‚3IŠW)!Ĩ¸æ€x¤Î /NÔ€uĨ$bō=) æ‚GČÁĄ‡lŌ#×4 ĄŦŖro,vĻhxĸŒ`÷§4†Ō%įj㊆IŽ 5#ę dgđ¨C+ €KzT˛IļK{ĩP|Íŧ7JCE¨ĄyswR8Š’vąųĮ â›ÄFŪt  ū*‹í^`eVĀ=ۃLDí;'ßÁ=ņQŊÉB6‚A=j,[Á,ŊIÆMŨG*… zŠWü¤EqĪ\â‰î,Ć9$vŸ™QՀô€Ą[iīRĢéŒw­Uw æãiũ*bZFCŽ[éL,OŧXžyæœ˛Æx$ņÍB¤ËÉs€)s!AįX@8?.9ĒŗĀd*ņšNxĢ‚"‰žWÂŨę).UIÅÆz“IČ~7f“Ë*ĘC“R‹ĨۇgœxōfŠLŸî‘ƒ@ 3%šķ$$õ9¸BŸ('<€5VdŧšT•ô­8+kbËbrO4Đ2šĩrÁ}é6ËnŦܰīĮ"Ž\^Čņm8g§JÍ7͡Ėm­Ú†-K+#íۃ"ö†ÚŌ[Į—ÄÖm˜ÜŒrzûVŠß$Ę]ƒ=JŅpˇQ“^܍ģŠėėĢvķ,‰œgéY÷qŧ,¸mņ?CSX°NIätĄ1ŊàiŦŠÜ9öĻĢ]Āá¨9į¨íTHØÛ9_J™px'Ą$‚yČžW+Ö€%#€Ō 1īLĨ¤¤$tÍ 1ÅšO΀P) ŊŠ(ö ŌŌv¤ô\ĸÁ47Ŋ1dČ43Á4Ž;§4æĀ5NiųĪ$Ō'f87jN^´ÜŒõ¤'Ō‹8ũ)„€Ķ‰â“>ĸ•‹‹'ĄŠ1‘IÁ8Ą‡lĐSbwŖž1Å"€y 8Å1šéOniŒ1@XiŖ öŠI⛂G4XĀŧԃž)NGJP2hHÜw4SØvϞž´Ãž´¤)§=)øųy {ž:Ķ‘O‘sLƒÉ [ŒaqHāsۜØŽô™Ęā㊠ķ¸gšVô¨ØĶ|ƒ¯ĩCĐ|­žÕZė˜,r‡Ü íŪ `YĪqL‡+˛ĸ3”ö§0 į֞Đ0}āS"‚[+ĖÕ°ÎqO”āt¨Cž¸Ļ…&LĮįR”Ũā†#ģ |ÕÅÂpykC–[‹ĻMäÜ(āđEv6ė6Žk‡ˆr„ķ5vŠĒ0–æ€ STšZĸGq@¤õŖ4 Z);ŌĐEf€”Qô¤ë@ š( PIKš()i( fĀ9Ĩ¤ ķZ.x J^ԔQGnh w ŒĐqE!ëEPEŠ9ĸŒöŖŊ zĐuĨͤ ¤úŅڌĐ0Ŗĩw ړÛ4RŌ†Š=é3LÍ%P0ĸŠ âh âŠ%-¨´„õ¤'6zĐ$€/U¤É?…,ō„Žĩ•4Ō™9zÔˇašŠ0v;Õ9ÂŧŒF8ĻA&2ÃīEŧŠcbŨN{wЏ(bÁČ>XåąÖŠO#ŗg =+H:Ŧd#nŨĀĒīį.qÉÉ exÔĖŪX@$÷ŠÖÖ/!É*3ÖĢĪ4„°@;OPÜnŨ(¸͌aFŅ×Ōža’`?‹ĨWņ"ŠĮ=…>+–'c¨Á4ØßÉ}ģˆVäzR\$3p˜ps֕ãįcĶÖŖ ’'mÃ/Šãæ/䂪 jzĄ€Ã#¨>´Ô`Ņ•rĮīKy!ô%OĐnHä •{šTFxüÖ\`eŊV ‰6ã y5§:˜­R>9Ž(’ÜX°Æ9¨ĸVK´ĪđōA¨å͏Ģ=lYĀ&˟š\uŒR°- {¤*åđZGĀĮĩM4Ęą"€ėpŖ-Ô9¸O|’jŌ!.Öbp!€õĄ!ßBįŲDQÆÖ95‰s+G+¨ËaąĀĢú–ĸn%a’ˇŽ+>yÄj6Ŗ4§ŠbL}Ģ,Ēb1ļ,OŊFmļAķHĖHÛN q E4Ŗæ˙ °ļkÄK†tSÆ(ė1īĶx œŒƒTĖX|ƒĶ­iØŧI,ĒęH|…_JŠ,InŽ’äá1Čæ\­h˛‰rđŊCųU‹k)[Pˆ1Sœf ‹Ėi4|°˜‘Á9­‹{RŨÜž ĶnåŽEÁ]ĒŨė;U!n`ˇ.ĖŨ0:T˛ŦI!ōÃåRjI¤–*€Iũ(Ŋ¤R>$$ä}ęԊIēúS‘ÜDF1܊ ųØüŪ†—Pl`“ †L`ņīPŧŀØôÛŪ–i>ėžĮš|í^h@:îYc‰UXŒ6;UKvt¸P đ8̇æNsMBV^zĐ AˇežrĘŖ8Ā5lҧĖH'‚pjč Į%zŅ%¨•€‰ø Ū€LKI<Č@0=ķȨįˆvuīĮJfÆŗ‘dS´gæžõ­öd¸ˇķã+žM0ËPB–=)—1lPĖS‚*ËŖÁ9…—˙0=jI-Ú{&‰ˆ=ķŌ€šžP3BÃĩ[Ž-ĐJ­ Ā<íĒŌ3G `dâ€cÜėž3Ԏ§„Eh›ØŠ…g5žäĻ2ƒŽŊhēÁ!c'8 .$ŗųōvĪ?(íIä–_˜‘ž˜¤ƒæ$ˆČÉčE^UTŒŸA@S–|ƒü>•8ĩ(aŒr Xī}îqV ãq¤+•Ō4*sĪZœB<Ļ*ç#Ö§Ėcåxđ}ÆĨō’FÄ|=iƒ(<ęęĒā zUiÎBāVæļÉbpAĒ`ä9Zå‡z ;ŊÆE3ėË4_hŒšÚĀt­)wũßUaĀĨkĩŗš‰D@Æß+§¨õ÷ i‰nÆXÚq€Hö4ŠK36J|ö­ā’6ĘېAéUe,—ŒzõĨÔ{š‚6u܌ ã=iŅ  NĻ‘¤Zlē˛āSՎ*Ø`U…N3š,[hvsŪ—ŠdķšUsš, ‘–Lâž[šc6M9sH´.ŌŨéœķOúR€ cp}i¤v5*!ĄĐQbnE°”<)Ä3Ú¤LãˇŌer¸<ķFĐ5; 'Ĩ&ÜcŠäeri„`sS¸ĮAQļqšH¤ČˆšÃŽH@ĶƒE; ‘ļĸRœĶß âĸ*s֋{Hį­Fd§æ˜ĘŒŅaM@ė°Ļ•ķÛõĸ dž}iXĘs˛Đjnä 8§`ô÷™QX)žg98 ÅkšcÍ*Ûäv¨XŒļ;UW‹m­ÚǤ’sÉĻ0y0üŠĸ0ËÅW‘!$õ§Ąb=øĻ€|8í=øŠž*`@¡šĒĘCĪ=:Ņ1#“Č ÕŖ n_ˇP÷ ß"ēåæ(ۜ㸸ä): āqžk´ĩ­”LÕ# n[¸ÁëOÜ*`jZĸG \ hÎxĨ”qGN)i1@i{ŅÅ%QôĸŠZOĨP1i)Oĩ% ^:RfŠ,ĀĨĻŌք…/ãE'é@¤=hĨ怊 € (¤ Š(÷ Ĩg֎Ô)>”PŌRŅ@¤ĨíI@Q@ÃŊQ@„ü(Ĩ¤ë@Š(4 &hĸ…Ši(f’–ŌžÔ†ļ*6r(Y€¨¤l.sQI SÉëU$šļ“I€Ų~áŸĨSc‡ Į=ķCˁ…Ns×5œŖp€’:ž•R‘< āŊMRÁTįqS­äØw dQEpdyÆP$ģA‘ųÕWi¤ČˆãũĸiÍääōĮ=)đĄŠ\;ŖŒbA$HŲXŲiŦl3ÜTŌË PŪ­@Ė]˜*œژВĖČôõ ŧ‚õhŖėĮ$TJ˛`´€yc°gŊBį÷Ģ1ÜW ´ŦîģI܋҅*ИmL3+ zŠ`M:xQ†ÔhÃ!÷î*ŌY°˛šųōTÕWe2|䝕ŖnōŊēšUYAqLFcC‹õēn•nå“ŋpũßÕ¸ym™H8%H=jä§sœœf.;ŠnsBGfÂá•N+ĨŌ‘`ŗ3ŠfÉ'5…$[4ČËĩēã­\3í`Ž1É$sŽÔ†[š0Ų›a*=)ŪR­’|ŗFxüęēΈĸ8ß$žõiäimpHR=¨Đ“*ūÚd¸Ėqouč˙ 22S‰ŽfËžH ëZu +í9ĮĢIĒŦE„QĢ÷G§4Xh{D# 8UÎ:Ÿ­GĪ0î8\c”É& É$™ Ä ¨V ܑÉ=hŠW9$ÁôÄųƒBĄ!ŗÅ$Yō@ÛķwéMŧ•Ö?*$u O$Š1H¤!qÕ¸ëZ6hĮODîböĒĐ2† "ĢH0AöĢÛĻķ“$mįĐcÛց2´šŠāouč3Iu K1 Å@]‡Žif °ŗˆŲÚ>Į5MŽî~×#ų 18ÅFŗŽá8۟ĨRk‡k89Á÷Ša›Íŧ–2rÛKô à Å2ā+€GûŠ@@áŽC“psO…”n;Nuג™ÕÛʑNaRG°I<{HäÍLe‰áܒ6áÛRBKöüiąĀS!Yv“1NĨFn[öh:–LŠCˇią•‰•1ōg įŊ=e2süUoÔ˛21ڝ„O)IË#9üęŪ•#›3€YļķéT§@=ēÕËÁ6Cõŗ@t|GœP€W9_QLļØōm`1‚Ŧ DĶ!u§ļ@ä€  F|Ņų:ˆ„8ŒļpŊŌ¤PHh¤<€1Sj0ēIĀ č} ЙæuÚNҜ÷Å h†Ú3 K)#‚qPH Ęį HĢ‚[Q úÕwd’LwîÚM ,ĀĀÎzžÕ2GŊƒƒŨ=ЌH‡b nĀÕōZH•~œĐ€ŋ5„ėtīPŠ>dŋTBę]ĀÆFAĪĻG’UĮŪÚ¨ZŒŽâE›÷˛,ąciWW|° ˜W͏ŦéQČGq“ŌĻŽāE"aú¯#ņ¤‡VŪ@$psÜV\éČSÉČ$đ+IÜ4[”O#ŌĢ_Âĸ&`p6‚:C3Q JT1e#pĪcTî†éŲ†zŸĨ\ļpŽKø8Ņoæá˜ ÑÅ!–ŦPK§Žr^/•‰î;TF8ŲX¸;ÃeHôŠí ‡#8Úi#LŨÆG4ĀEni`¸`Ė4øWũåpHÁQîj(˙pË#pG˜ār1ŽÆ¤g ōŠāuĒМî aIÍM´œĶ$˜2ztĸĸÜßÃČ´đA”ĀRhÅŽ)(=zQEIڗĩ& č÷ĸŠCEP}Š?( ĩŖ4Pf–’Œâ€z)sI@tŒŅHAÅ€)ŦF( öä C_šf™!5r &4‰%˜ã"ŠË1§I.ƒU%˜Nj[)"å`j“˃Å>â䌌Ք–īĪjͲŌD’ĖûrBį$n¨ŪF$J‰Ĩ-"äŒ ĩą-…ÅViKIŒ{ŌI.[héQg§­R܌};š’59ÕY˜ųyČ4ûg>O=éXhĶ„†#>†§!æĒZÔõ|.ūHŠšŅ ĒÅ["¤fæŖx𸭠L‘ÍMÍ-Ôk>sLyË|ĸ‘ĐžA¨ˇ4dšÍæXŒ+8ÍM$j G5YĻFPSŌq điXŽbėR :S'>c={RŦ9ëO š@4ö%ģ”3$Ĩ›ąÍ:[DAšëžZeQĀŖfåÁÁÅĐĪ.ũ;j|WŽŲ_~:U˛ŠœqH#B2hėX‚đŽĩ}.ÔsŠÎD@Ŋ‰§+Å)\ՍÉ=jRCVts˛ôäU!a¸QÔĩ-Iv€sNBˇ×š‹qĮ4n$Œ:šs°ĸš@Š`V'9Ą÷cŠ4ɐüš#ŠŽ[Ą ŠPA9Å Í92JF#wĩ sœS[ۘIČĄĪŌ/ĖG4˜ay¨˜āíR;áp*`4 1Émž´#Šc°Š|ŧšØÖÅDAŨÍIŽ´¤§#ĨæąYÎ͚ac8Ĩyg&ĢŗČSŌ‚% y°Hâã÷æ•S'šURåæ—S !éQ, ’*}˛HØĨäũęl…IcH~|dAUepĀąG¯N)Š4ˆ6‡N‡ĩ;’îV9$nôÍ81GÁūté1"“åyÅBIRsŽM™j6ŨXã*´Ė0āžŧSҊõ8Í2y# lÕŖ)n[ĩ&PûEČ5ÜiėŌ&<•ÄiHf‘•k¨Ņ.JЎs‚ŊQ„Ā4 STœæŸTHtŖŋ…%`Ĩ)(ü(h¤¤Ąŧ(4™ ŖëGPԊ? ;Đš8”ķK@ AŖŊčúŅA (¤æ”Đ(”´”sF)h  Ņړ´1E”wĨ ĸŠ(? ih=(( tĸÂŠ( ‘ÔĐ[šŠ5ĀÉ Í>I0Ų˜íō“ž5 )|ÍUä¯'ô˜ÜO€qÉĒlå°XäúSähÁ˓‘ØRFą`‡héRĘ[ÃąĪ4Ģ”ÉĀÅ#Íšq°p(UrQ˛G< ííģų 2Ē įīŠ–…ōb}Ŧy˛|Ļ–HÃ*œäôĻÛåÍōą*1ÛĄ  rÛʲ+•<äTąK%¤°€HRxÍVļŊšŠB’/™=sČĢ—+ę*ĮÃ+dį¨4вJHîUƒ/ĶŪĩ¤šŪkn!îÎ ŸCYōBĸFÜû€ÆÜŽOĩMo•VB¸^ã¨3nąOœ|ĢÉAǎ ŋ<Ķ3dž6ž‚ŽLûw!$¸ãúÕ .@Ę1Į‹Æ-ėŗÎ=jÁ“Ė(čėüŦjĻD 6˛Éā¨ī@ķŅ˙vßģąÖ“ĘčæË đyÍA4ËßŗéĶpųį&ŦĀ…‹!~§€:}*ōDbU,„ŋCõfH0đēĄTœwâ’dG˜Wŋ@9cß4Ļ`ˇaՇËÁŌ…R–˛Å"ĀõĻ4Q–ķT™y  ŽāFĶ@”įqíY×VbEV 2zž$ctEH'3ЊII.Õ á‡ڀ*ėh5 {ĩll8qę [ļļKu§ÎģU\ŧRz“Í>[wkB¯ĪĐņÁ.]RāŠķá\ƒ’DÛ;•yQXŋ:UVĶ•Ôõ:.˜įŋZ‘0dČôÜ9§\O-ũĐ:úŌŗHŪ`}¤’3×q¤V„†ųx Õ(ÜŊâ„`ĒÉëVÚÜŽ]˜í$zĶie ČāÖŦE:YĘ?|?•f}¤FĀîž5níËX!ku;[!—ī~4ÆÍ1dq¸äzË(Ë~Ę2íåčjX„-§ā>$ CsLļ”´Ķ!Vķ21Žâ“,ňÜyœ`g Xڍ”wfYPŗ•=@Ģ×Ō4ƒ‡;€ãņYņĪ,@–—*~\tĨ°Đ°ŠLŖdĄé‘Ō­ÚÎđ„¯–G<ÔĪķm' īÎ*ôj˛BĘa×\ ?ēž]QØ“ŌŠÜ´DT ˇb+!ETū.SeĩMąņĮŪR(kbÛË-ôĸiØÛƜĀíULŠšĮ8ĀéQIpŅ*ššĀրĩÆĀÆ2˙O֔Į#ÃvÕÛ8Ā $Ÿ^õv['‚&R~j9zŽæ8—ld9­>2ēĒ–=*Ŋˋrņ1ųßgŠ|Mf†ũhÅíĘšaãļjŦŒ$ōHį5Jisq¸ŋŪ}ÃqīIy9c(w;œc4\,m[št*y c`<÷Ŧ+MBEÁP@JŅ‚F•rrĒß­;‰­K &ÁōséRĀÛĐą9¨†Đp1ŌŦĮ)[?'–ŨšĄ}) E%úSĸīF­ J^ô†€ :)(i?( “đĨŖé@ š;ŅF( -v Ŗ§Z;Ra Ŋ5ˆ4‘UŨȤ$UŽ:™į5RF-ÚĨ”ŦU–FΊJäÕį‰jŠ4x ôíYĘåŖ:F$Ô=[$Չ#%¸™ä7\+;3TDÃ+ÅW‘iŸâṍ2yã čJœÖਉhĖö?#dŪš¨‘Čq×ôéÁÕc(VĀ­ĐАîUīRÂr@ĒŽĮ`æŦØ.öúúR*,Ö´éĮjŌQō‚>ĩBŲ0Ä~ĩ}GŗgTv 3ˇĨF_ 1`ŠŽøÆGnŖ‡qÁA$“Ž)­˜0:SL€éSBäShE˛ˆžĪ42 ¯ÖŦĖĮĻ:Õe%[§´“ĄāũęŸp#ŽÕPǓ׭MɌcڋuȤØäf• nĩ+°įmW;•¸Æ=)ؖ;cdœäu¨š}ŧÔĻwQ÷=…BÃ9b‡¯îv❅{1ĘBõÎzÔŠ9€k>6]¸ Ō¤I0p:Ō°Ô‹éuÎ ZFÜ;~Ãœ“Žõ=ŊÎ3š–TŽiAMķX6ĶÖŖiCĀķJĮqWīI–™1ž1RÂIûÜUppĀ‘WR ‚(ØąÁæĸf#•ÁüjF`Ų­WU*IöéEĘB™ŗÁëHŗlnE6P<ŧŽ5ÎĀq@›-;ȨëÅFg ô H[=…&=ŲXāSP;Ķ‘Æ„u5XÉģčM2\‰Ūø!éPļĸĖ í?SQēd Ô2ĒA'¸§c'2FbFwu¨W+&Tũi– 8éRËÛq‚V¨žr@āO4y€÷æĢ°qā:s@Ë&})XĢÜšŧFšQĪZ†[ĸЈoÕ ōˆÆqJĀÆI6îŖZ­+€NEC%ËØéLw/Ō„„ 1IÆ9Ĩ•LĄJũO4"Ũ0¨ŠHÚ9û› RđŽAÜk>ōCúãéZ;Á@zd`Ömę†jĸc5fkh7*—c÷Zë’&Y‚G8¯9ļ‘âeũ9é]vĒĸLx<Tô3ålë"$­J­WŒîPÃŊNό‡QIôĨ)€uĸŠ(ĸŽ 3E¨ AF(¤Z-J( AG°¤úŅ@ Qô¤ŊëB@ŅڊJ(Ĩ¤=hĸŠ(ëE%QGzC@ŖŪ’€ (Ŗ4QEQAöĸ€E¨ ’—4” ;ŅE- ŊŖ’˜‚—ĩ%;.q@ÆŌ­)â˜Ė)^æQLOáP$`DKHÉ4ûÄ"sÆj eXãÎsJā!—æ Ž85ŗlãž*6™ŧ˛AÎ9ĒÆs:¨CķûÔąĄ$‹.îš'*BĻ8–5$džÂ¤ˆx9Ĩ8FZ&'ž*C*!@ß3@äâįLÃw!ĶĨ„ļÆŪøÉô§[ņ‚0EG˛JŠā|Ŋ1S€ęŋ*:tĢQGk y#žp)¤ĩĮÉ0^ŋ…;vŒÎ[|`|ëČĪJbC3ą.p3Ÿ­]6ølžĒ÷3°] e”t¤ėWX•fÉʎj;ˆ9ڈĪZ’to›¸"Ÿ‚UŅČĘqÆ(A%.dā“ĻĨšŒĄ)Ąw ) 2ųÛFŌsÄt§Ũ”] ąw<ZĘ1•G=pHg#$)Čõ¨ĸÄĖဨ )žtĒåÛĀÎGQ@ŅYI˸§Ē<ŗĮ*Č~SÔwĢÛģĀÅĖ{¸éëVŧ֖B˜ĄéLE‰ŖŽIA fĸušÁEVO\Õ6¸/Cã6rjڲɔrĒ:¯ŊH­Ão$‡S­Gqh“’(đŲÉ^ßQM åļŽvį*tV2¯™!bŖå`p ”‹ąņƒŽ˜Ēæéüŧ\Î;û՛˛df6œāsYÎŒĢ˜Ģ×?J@6eW$i`3‘Ūĩ-,ÕŦÕeš^=yÍcÛFĐŖ96A ;UûX娌ŧĻ=;P4_ŽŪČ0h¤ķNsž•ĸ¤\EŽAøČöĒpi‡Ę mį’øâŦ2k}ŦםŖž ,&-­ĖJâ7`šmŧž†­\aJģœãŽĩZ{ĻUrĨIûØO­MY ōI ÉĀlwôŖ` .ãq„ÚEg‰›Íl ¨=ģU™-ÔĀc#cĒrūí›Ę 1ėŨ ‡˜ų¤ķxˆŸ”ņÎ0iĘē2˝ëü,?QLy!mÛpWœÕ،S•VDv\¸āĶYĻ6č—*9ÎIâĨKčĨ]Ņģ‡õ`qO‘Ál$;@899ĻŗFĖWĘfo@ŧb‹6Öķ)a†;LúĶHRÄp=iV&WbPsŒTw’Įįaž{{Rzöd×&Ŗi‰=A§Mä~I?(ôĻ3JFU‰ŒŽŖąĸábŅē›qF‚ˇFė)LĒ‹‡bj”k/›™_ä#5)IgffRūT`g`/—>¤ķTÚFķXĪôŠQŨÉÁPãŸūĩ,ņŖ1×čˎ=é>–™‘™°;ųŠŽî(#æ(Ķ™-!’Y@1ĸœ ōI†ŗ5Ū .]ÜFƒîŽ•B[“‘Ü~ņ‰Æ20*ÍĩËÍlŅÜäÛã5‰$3LWc|Į× ­ˆíŧx™ˇqųR¸ėL|ŖØFW¯4Å!‹Č™GõŖķQOUQīQų€įdĢųP$NŠÅ[' Äžb’Dü€WÜŸZÚ´-å0,qüESŋĩ.Ŗ`AÆjJ*ÄĖē ¸ŊIA/ˆšãŪĢ ‰G WŪ¯8FĩÜČ:á… 8.Ũ”ocíŽ™ĢŠīĩŨ؃t×,Øˇ!Ė¸ĘœâĩŦ¯ TŠiI' ŸZĄ4Mæ;XÁwNšnĘįĀ÷ãĩV_ŨĖâßx‘ÉĢĐ|įBËŸį@6Úq…ZpÛyųONjĩŪĒūn&9Áūõ`jąI$pä*/úzÖ§%´2Ę#Ë+6āz*žÄ¯2–¤¯!7 >P @ĶšX ¨.qÚ wž\4­¸„R~ęúRČPā8ųA¨/Ȱ­įLā(‚OĩV‘‘åBŽ2i~Ō¸Čr0–ßlŠ™p@'øFE!“FĄ_äsõv&`¸Š­åŠÃW"BG#Á  1–‹æ$üÃĻję:°ôĒqĢŋËĀg&”1ˆ ,1žsëT‰eāh¨’e-°Ÿ›¯áRõæ¨AIœRįˇzoW¤¨ ũ(4RfŠ(&ŠNh E%-%č ŅôĸŠOƁKÅ'z'jĩ i\Ô/jĀįũY5ģ*8ŦkøËb„ĨZfuŠõ0äČ$Ub ŋ#Ĩ^ģHĘôĸÍs’?:ŗÄjá†Ō:ûV’y@`sU’XÃzZСÃķŒRlij^NAÅ[PEC ņS“ŽyŦÛÔė‚ĐCÍE"ŒdSØã‘QļŒB‘1mĘ3Žĩv%VäR@¸\RmT Ž Jãe‰vîÅTœņŒÕŲƒUČ9š¨Áä=ęĀ€E1Q[žũzÔÉ Æ æ’-Ęƒ×ĩ.€ūÃwrOJ¨u‘˜+p(*ČĐ$\1‘ā€sTŌ"n.9ĻCv’1ÁÎ8ëLŽX–‹ (XÕ …íP=ØY9ĮĨ'۔d +1¸ĸÂŲ™FpGJŽKc9Biņj‰€§KåcĶ"ž¤8Ŗ=šáŪ2>” ūn+EŲ$ T'ĩ'•SĩÂ:â¸ĘcŊZŠ]ˎՄ“4/†ĪõĨäōĄĢ&j,Ÿ(,zRŦäžĨTFg5jįķŠf‹R`9É4ædĪ˙^“nîõŀi•¸4É0Ģ€x¨x8¨å“åaԚ"D’ē’ĻI,jŊj•ÕĐ ‘ÖŗŨĨ›>‡Ļ*ÔndåbėˇHüĀã­U{Ũí„$cŋ\ĶáąŨæ?ZdļéČëWʉģäšVãqÁíV`Ą.G=9ŦũÃqJt7*Íą›#Ĩé—|¤ ÃwŠU1áŽHŦ”ēųĻ;ęĘ2Ĩ ĒŲŧLŖ|÷úSäv'ŨžŦĐ[„kqNŽX˛F3X¯{ ã?•Uā>ëSĩq|cfąuØō3PHĒy OŠ4Ä>ōgŊ(1¨å‚žj”—* Ģ7~=EM"ļÜĢc°" k5d,ÄÉëšW,+ÆČ )Ëc8é<¸e 9Æpim‹§ ¸Q€1Sj@8Y ĪĨQ¸ÔL•‚‹žwõĒ0Čķn-)8Į^=ĒĖĀ6U‚ËÉĒjņF‰ØqÕ}h1Ņ“9Ær@椴ň-Č‘ošž]įÛ9ŠmW›œí$žäĐ2Ú#K#!b uö5Ô7I0Û Xs‘ÉõÍŧŠQ‹)XM\% žÆMÍÔąíM¤A‡`<ŗō‘ķŠHäō$dŒ3b(/&&TŒ¸aÁôϤåe˜ō~„P’Q]Pla÷õĸ}ĸ×(˜ ķm5ViBpAüM73KWCå†ÚŦ§ĩ;ŠÃ˜ĀĒ:Jš§tëË ą%ˆŧž”ŗJđ#MėĮj’OäkĄŌtÅ{ŋ´<|¸ÎM"ļ3ôŨĘÉ!i$ā,g ­Ã­¤™•„ŗ‘GŅÆĢ]j˛3IšlO7§°Ŧų/cJ!e.FéHäA@ˇ6¤ÔFĶ(@~mĒ: §.ąPūōfÃ8ã5—lĻxŪāŠÚ„Ér=*Cgsrų”$cqŠ{$ēĖP€â] ō9ëRAyãų°ĘC‚āÕfĶ-Ɍ2p r+RßN ĩŨ~qĐ/‡ĄrŨ÷)C‡VëÎ5́nš6é:TrĮ$m”Éö-åÔ?) vÁ9Í! ŽÂâ“.öĮ~™úUČ똯ʖÎsŒUdŊ•äųäLõĻÉ1vĮšā^”ĒŅEmæ”ō­0ęqÂXg5öėŧɂ:™AL-e‚Yækž~äc€ičšn^öEۜ“Č€=MS¸Õļ<ĒI$§#4\ę7lģ- މã’*ŦPHėÍ+†Ččc#ķĻäãiį>•:īea°ŒŒüęĖÚĖáŠ)ÎŪĻŖ–é›#ˆ€ €jl ķœ"[¸ôĻHōG I98Éâ–Ø ÷ÛĶŊ€fBŊIųŊ…4Ëučāãv:úԗR${Øņļ2ČϞŨWļwvZ]˛ÆėÄcOԘŠ7wĪ9;7l ×4˛,‘{xQšIvŠ~™oAbČ V΅ndē–åãÆĒô w&M6; c,žYzįŸJĖÔ'ލėÍ#ôEcÜֆģĒbįj€â4QÉÁīT–Ąo2Eß1F;š,/2‘I“nP*˛†Éėj0Sx (ëĪÖ´.­.&ÕF1É=k?ėRJUd*Ļ#ÆO'ÜŌfÍ]Ž&Q"œ/úU‰*ĪŠÆ‚ÚņdY“hääõ­c*P3ŊN:ƒH øvĘ 7#Đ7qíVôčÁS™Æ1—čjÛC>EÁų\|ŽŊ­J–āä\ė‹ú'ļGļ"2Y{ō Vĩž8-œœŋ*ŨÁĢosnĖíÜŧ:YŌĄš ę@fc‚Aēt-Ķî#jŠ'=ÅL˜–'ˆŖÍC§—6— Xōöîîiöō [wÁäô8ëíL‘ŗFļ0)v-)ííYs¸iz’O$Ķõ)æá"Y3#rÅ„zņ¨åōŖQ6΀ã’M"ˆÕHbėC`|ŧô¨]Ų÷¸Š†ĀÛTšB¸¸úĶ#pdu*tŅ`" ¨ĘĮX(G ŗa€ĒÄŪ{§—Ę89õǎ‘<ˇŠą’ĒTž ę&’g'bƒˇn '­KĨj+otĢ &)>F ÉõĻ6ĩg‹ĸpŲ<æŗ%Eģ‰Ė[ļ'ŋzW ž§i-ēy‘ž˜9¨Ŧ“|Ą›< wĢZVļōéąÚ܁'•„bz•íÍgęŠ-]°CGČŨH]p3Čŋ(Ë č}*ÔRî^ãĩdÚM#1Ī |ŪÕifōŽå;†phLMÉÉČüiGÔI(•ŽxŠ# Žr)ˆ}%-%QGz;ô ŌZJ>””Ŋé:PE~4~4}i)M”cI@húĐM%Qš)3@ HX c¸ZŖ=č<Ôļ4XšO=k†âN:Ņ%˙›ōäū"Ą)šÎLë ­vV”dRĮ2ŋéSŦ@œšŠuÚ8"„ŽĩtHéķũj•â„mČÅZ÷ũãÍ,‘‡āŽ šį•bŌę8•@>æŽĪ­Aåyy#Č֛•õ2a™Ũ•>+^ØŖ5’í‡ÜŠNxĢŨĘnĖ˙1Scļ>fä,@äTķT-ޞ0ĘsÛëVLųįųP.WĐÎŋ•Z´pņjķ4ũ=ąųTËaĨŠĩ€ŧÔé&:Vr6:Õ´9VLÕ"ęÉL‘Ž3MJkƒ´žhEXĢ+7<æ¨Ë/̓üĒãąäÕ …Ę–Í2dŦˆĘ¤ŌĒ“īZŲŖ&AÆkĖQÕŊø­(nd)œžkUąĪĘî\’…&ŗdh÷gx¤žK™T€×Qa”7ĖzôĻˌlIö5˜¯ ŒņTeąہįëV^c mæôiēHˇ61ëDt1ĢKf\đÆą§iÖz­–Ŗæ'ÚĄų$TŨČūlú×#$),ŽPaKqŽ+U­Ŗ•ãÜbŖKm„|™Į<Õß[™´ųmmHmtæ›gÕÉô%Ž ęrĀzķRÄæ  T‚æKˆōm4Ĩ"aI­ĖEg°Ų­K&ķy‘QMfī 8Õ­>ŲblPícĄ&‹čHې~ĩo`<ž~ĩ ŧzTŅM”Á9ŠLrR9-ԜЁã*>žĩl€Āš¯"ŗŽ=Ĩ&8”ĨŒ`‘øUiVMš=Å]hČáE1ÛéŠ"DŅRÛ,ØÁäcëWRÔ´ĢדU´äķ$8č9Ž‹Oˇ2]ĻœúÕõ& Ũlč4¸DP:Zŋ‚)"]ˆú´qˇ¨€Z\RŌS´Ÿ/”RŅH9 E'Ŋ- N”QGžô JZCր6-%ք…-%/ŸZ(ĸ€ NôbŽÔcgŠ(&€ J0:Ņ@´žôuĸŽ”PhĸƒÅRRņŪ€ ;ŅôŖŊi)i?)3KHhŠ)1Ū– cTn&Ž9ĮzŖ7Ū¤7”ŒR´gžS0ÜßūĒLh¯ŽįæW‘TfAÎŌsšžØf ÆĒ9ŗsŽK`FĨãŽ9ëQ†1ɁĪr´Æ&iÕą´(Įfq Ģ#/-דŒReeû¤‚8ÁíZ1öąäjĢb‰=ģÄč<Ėg¯jŽ'x$žLdāCči ,#*ĢŽ˜5]ä`|ÁČۍŊąSΞŒ7'¯ĩT,J‚ЉD <ĮŽ‚˜Î¤€:éQųĒé‰@;Ķ”(—bž@ÉĪjrMĒœŲ¨”V‡Ĩ)yeœ€ŠTŽ€ō*O˛ˆ÷o' 3ց\†=EZFŒuíW%\ÂZ"Jđ9íU3;‚¯ un9Ģb[ƒŧ"¤`eĩW]ņ–$ī-ƒI+•]Š3ž¤öĢ—&q隠ÄŦĄ@ČnįųĐ=ȝ­ÆC+0^ŪôčŖ{ˆ1 ’FzũjxíĖL*ûsšœm ōŒđ($‚iĻ@6ŦCŠÖĩ$ĩ" $ŠSØõĒ™’> áq’*ŗ]iņīw;Üt@qŽ}iˆžsC1qPg||‡e<ŒS…ü@%Ŋ§–3´nę}Í6hĖûÔœ0SŌ€čEäÁ11R2=A¨"—æ`„Œ|Ã>´ÉLĸ\FÄm!H# Š‘Uû%‰Éô€CėŖ7 ēTU äíÂē î­¸ Hŋ1S÷WŌ¨i*M4 yqČÆ Оoš7šd;¤ ˙J`õ*\ÜÆŦ"ÜĸwŧiļÚ ÚŊÚ+u9ã QØTļē|nÛä‘y# Iyw<¨Q ÅnQŽ˜ŽuŦ[iĶ-Ž™`f1ĸI8Ą›íˇ‡i|Á"?C؍.JÛŖRáxëžÕÔçĨĨ¸gĻĀ´FĪIļĘ\*āg“šK‹”DĀ“Ԋąy8;ų’ tÃük éķܡšĀīė)†åKģŠ•°­”–Æ+:Kš.%ŽÅ‡Ž1õ­)ôk‚Ļ[ˤ1w]øĮĩQ¸ē‚ÚՂÆÅ3ˇäūĩ#mã.ŽÛ€á\ûÔsŨK;YØîäŨ@n‘“ːÜķŧ{SĄÜĄÅÂ!Få_ÔbŧS\ŪBĪĢí9%žĩaSSHAX•‰8ųxI V˛mŠ<Ģ6žõbÄ1—%˜d.zƋ…‰HŧhâGa –5,[6e˛Ūƒ5š×Ģ!YŽvärM\ˇ’0™ëœĐōŧĻ0°žŨßÆÃšrÅĩKģp1“ÔūČĖ’)•%LHŠZ6‚ŧÄČÃ'ژ‰l ħ—U!{Pĸĩ3M× ÉŠ¸YT Č =ũņU'ē Cš#8č}Mą<“ŧ•C+ŗĐU{–ŨK`ˆ>aīTžwVF!EÆT7Æ]BP]Š“ˇ‘ÁJCHԃy„9ÉĀĩo/Øm ŗzÁ<7"%pUW¯\’koÉ3ƊHÁ­eXŅ =Č™žgrr°Š“TEbą"šéģ“Qj‰cû”ˆ#sŅŋZ° õĒŽH'dTĐJrR&Ũ q` 2vPœŖ¸?…G2:L›4PŸ=sUÛ,‡5<ØĐ&=*‘Z•lcw}¸ē­<ĘīéYņØ!r?:ÛŅĸ+mģŒži­ĖįîĶ4Āâ—ƒëNâĩG”Qš_€—Ŋ%-¨Ĩ ĸ–Ž”Ruĸ”PĨ-% ŊŠ(`QGjQZZ8¤ĨÅ%%-%4QKŌ€’­ (ŖĩŠ;RPŅõĸŒûPAĸ’€ ^´”´QF( Ĩ¤ĸ¤=zŌ‘M4€\RJ)¤g­G!ãFSĩēÕŲŌŗ.Y×$ @ 6Xœg3¸*[h<~_Ė)tüę/´ `wõÆ*FI2˛ĮÁéĀæĢɗ*ãŸzĩɎđ~īQžĩe*Üõči Œ.B–Áįԟq—uaÜvėiŌFęĒČyí= 8ō āî#j@ElNų$7^{úĶoW)“Î4”“2Ŧ88ÍK)Y aÆ{L ˛LŅDŦįk€{JPéĩĶcˇ<ÕëT‡UŌ^0^“î+u–&$IÉ$cĐPų°ąPä ‚*fÁ1H P}ë>ÚY˜–*Bšˇ(wŸ˜įnOJb6@š‘ˇgŽ”—aÂ.$lŒ„—Y—ÉĪOZŗ3[,FãÎjb!‚;;>â1šŗé]jąØÅ:ÄQ 'ūĩR˛Û,N;1ÔTŗŗÉU‚Š8ž§ĐP”oîJ™'=ŋĒ–ėŌå×*Ë!ųmĖÜü{Sü !c€C2 ƒĢž¤ĶšåaR°€_a$‘ÚĒÜHJÉr\Jö¨ Qy)ĶžĻ€+}ļkĻ ’Ãvr:Tâ$Xŧ́˜žŦ(6¤FŅĮÃ)Įô^9ą,Ų˛~č>‚ˇq‹Ī՜œö:™Ŗ‡tdūđÜͤ÷=›BŒ`zÕK­Ec( ĒQūҤ&xƌîÉëO´å*™Z–Å{A")Wîãj 8Ēų$ą'=O4ÁņM9bFũôjÅËK*ÚŠįąĶ8–Hĸ†#†Áę:šÖØĨėÁđÅ#ę=hBĶqŗDVĶɍļ‚A'ÕYŌî8Õĸ‘FBÔĶ.îärc‰ ō3DWRĨĀœáBž„ĶÜĶxwOĖ quAîM Å4î 䐊zÕĩ‘"ĶT!ä8ëÅa]<Û]Ü&ėīī@=Ę×WqÂøŪ[=ǜŪ#–``´ũÔ ũâ9'ŪŗÚq#yN ōœÔ6ëåE"ŽXĻNįéIą¤Oxë9!ĨŊūĩ+ ž ~WĀíT" z˛æ׏zX!š6Är:(Æw6+ŽÃŪÂxgÁq$j>VöĨÖá„l$Ü?†´Q„[”`3Į~*ŧ—ļR&øĄaÎÖ*y€AˆbD°r7uC<2NŽV-˛`úĐņÂä•Ã’O'ŠŌCųxĘsHĢ›OLGæõ§¤HdŊ3Ū§mĪąōŽ€HëíP,ûmĻęCÜŊÂ[a‚ÆÄ ĮŨ§,ŠË,ęžl˜ÉbÜÖ|Ö͘ÜJÄ ąO~Ų¤ˆų†‰÷ČefÂāĶD´N“3áŪ&œņÉI§FĶeg1ų˛íųÔ˛–†?´Ŗ•‘OđŸCUn:Ģė-ũŌh¸2ۀ(ûOË!ĪZ8GÚ"ŠúH@ũ 4ŗĒe‚El‚‡ }§,2‹ČœtČ2ĶŌ€ąĢ&Tˆ šžĶ8ˇV„|ëŒäÕM3wc>¸;†G#֟,˙feBxa…杉žq™ø9,QRa—dŠÁ”ŽOpk6æ;¤’)Ęr9Ũš‹döĘâŲ_›Ë ’Or)ą(åÚ=ã¯jTeTkˆÃ8Į#ŋŌ˛lüIÚ)žÜĮ,m´ļ ˛‘Z’\[<‚XX€}:SC7y’•Ęî\…Į4â‹&R6dd1÷žô,XԀŽx Ũ ¤.Ņŧ¯å–Ú™ĮAšč1f så lžįŊ\™ÜGĶ•8?ãXķ‰'ˇ2Äĸ7Æv“Íh[]Ļä†SūĩvƒŽ “šųĨ.¤ķԁĘāėZļ@ŽFŽpÑéT.$šiĘŋvAÅ$6kč…¯wąVÉtö­ĢûEƨŖ%7U=zX™$'s?SĮēuŽu = U‰oSĖüXÖTŒ’ 'ĨgÚ°áW ã-íĮ"¯øøŋö§ŲĄyczËļUŒÜá˛cąĨąKaķūųˇ#äƒŅĶĨKdV6äŠÃr1ۜSĶ3žsĩsĮ4Øz4›—÷gw&“L¤sIlā¨bÁHĪ=ԏ×"Ģāš`#*ŒO΅x<~”$“}ĄŒNæ{Ô7 ĸđžíŗļK^¸˙ Cūč9ļrŦ-‰JÖ˛Qö|/$‘Īb ayYšh.v”,Ŧ­šÛĩŽb­jĻ$<ãéB)Ģ6Í`U÷EXļ´kƒ ‰2HäûU)äyĖk+ít9Œâĩô›’ÕI(F ;Ū†DąĮ m! eđsĶŌĄ¸ŒE2” 8#úÕÁåÍ4öė ÆIšålOē"É•+ nEmrŅmIIpĕpz{ßļAƒÅ;Tí&NAäU°āœU<ô”ÅœQÅ­RRŅ@ Aĸ‚q@!( š>”€CIKE0 Қ@'áQK÷MJj~í!ŖR'W=.7æēH}ęįĨČc“ųV37…†ÆpAĮŊtÚ4›“˃ƒ]‚āą\Ô#x;H֗…5— Ėĸļn#ų"ą˜%jž‡Mô%b6āRě'Ŋ7a+ÖĻPZ<ČR SzņYĶĒCuĢé&kUī‘vî­hg&etnqšŗĩQÎįŊMĀÆiąDļš#­=WŽj%$ŽŊ)áųĮ­M:ã=jÄ@“ÍU@sŌ­)Āãš–1ĮNœĶX RƒÅ# SCEVŒg5 jķ.VĄō3Í2† 8éÍ?Ë,Ŋ*P€-*€8&„ԁcÁéNXôŠK)4ĒÃv)”†yGúdę) -FŌĢՋdœĶ.ÁNÁ™C— öĨ˛V[ˆØˇČOZŸa21vrp ëį+yKž{Ԋ‡%ä'ž >ÎŅLA'qÍ3PēH—`ôåģP÷Đ6%7kˇËą_CŌĢ´Â[…D šI'" @°Ø—F ŋ Xž}ęe@` ĄÁ$÷ ,Oi ;<ō1ÂđŖ¯537—›æ<ķR,[L1*@ŪūãĩWēƒ•<¯_Ĩ1…IDŒr˙6§´q›VŠ2ÒOĨRko*Ą?7#=ŦņË#ÆÖ8ĮžÅŖ”+Ŗ˜)–ŸhûQb~WÎ vô­Éĸ2&ōI=qŌ˛å ÄnIŠę;ŸqM05ŽXy ˆëXķZÆnĀpi žĩzåƒ]^šâ›I¸!bqķ–ĢíäܖĒvǐĖíŒŅa܉ ^„Š'ˇB*Ģ4VëōqŒ ˛rÖåŽ#ÎÁšĖyâ¨3,ˇ ŠjZ5PD›ēū‡š Ņ°#ˆ†I9įŊfÉËt™ß Á­I،‘´žĩ]KŨŋ+$|sÁ4†ëe2)1ĻJ’ŧœæ¨ænËaÃ`‡ę+EíŲR6edIŒõÍ[žĖ\Ü4ģB†˛Ž3čE1y™‘I&頓 JôöĢ0Â/-qqÉAÜzŠh‚[kĨt<uŋŖš‚å'@v?¯\, æī-™äXŠāõŽqOˇ‘âhbŒļw|äū•š¨Ä‰åKc8åúVl6Īo7Ėە`ũM4.†Ž‹~,5$,é´ļÂŽë6e–S_Ũžåã{YŨdÃG ʐxlj—“qžjÂąÃ(`Āāāö˙ ›ŽÃfŒK:€ŋ(\šˇkrP…Čųõû8Ė–í+ŽÖ<úÔ%Āgœņé@u.h$Æã`ÎFkNÖā\Fާ¯ZĮV #Df(N ĢĖŦĢ÷CķÅR723Š)Ŗ—&œGqMf€sÍ´ŸQKI@))i§Ō€’Í¨4QA¤B’Ž}(ĻQČ2ĩ'zkr) ÁÔSål­Eĩo—“SD2rEUĪ#5jž)ĸČÎ3Šx'fGZhŠŠ‘\‘Oɜ͎ Svâ”)=čE¤=pF +` Œ§Úœ\mĒšv°ÂŽE@ŇSS9ã­@Ũ2;ŅrŌ9IbPˇQë@u0<ækv_4îs€GZŗÁn¤HHÜGSíWn´Ø#ēlƒÂĨN3UĄŽWįB‚Āc<Ō+ržæéš3ē8‰Č8Īš­{ eHŲBį“ž‚›f.$9‚,—ęíØVĒÄ!Œ!9fĪ^ &=v1Žpd0äüŲ @¨cŒ⅗pSËu$ŠēpđĀčOsLH§Œ´6Xũj[--á[x9Čį=ĒQ#ۃ´u;ˆõĢŋ(äô¤–%XisŽd†fōΜnPĄĢzijŅī.a'¯P=ũjŧÖ ( OĘ­šqÕOĩ Ģm‰ãRŦ_ī{Õ)(iĄnDK…vęm5‘5§”<ČܝĒF ĢĻãa;ĘpĘ{T;ĶÜũ)ļO+ …ĘÃæģÜĒĶ$×eŠá"Š]Ã!Ū¤‡…(H>† žßäMčŒá‡9 —SRŌâ[ÁūˇdÃǝĢGQēĶ”ŽFŒt úV2Dņ˛2+“ę*jė/ßtšsĩ¸#éLM2ßü$Z}Č X‰ Áb=ˏEV1‘“TŽ`ĩē‡må’HéT[O€)+€ŊČɤØYË! U8útĒ ; FIAqŲ¸8÷Ģ‘ĩ­Ž#Yd™‰î1õ¨nLXŧCå隒†\ܖefB‰ŽĢëÜbĄIažę(ŨØėppEC4ÎČR3É^āԖl÷“§™–Ûƒ€;Õ'Ą6: ÛŸ d|Ģä}+‘¸ŧeˇ˜QÁÎIŨôĢ÷/ĮĖĖD-ķ(ūéŦ}F7’Ô­ŗ~ķ8ĀôėiÜJ'I<@Ž0gą5>‡!ä†V<1*=ĢNÔLg•Č#g•0õ5Ē^DšW%UÔüŧđÃĐĶōFĻĨh$ˆĪîöÍaGeģšmäũĶÕĨtp\@ųOĒ{ƒUeĶ•Ļy"“w8ļ’ōƑ'œ œáĒ4†{‰!Ãm‚ŸZĶūÍ(A!XšĒ÷ŒmÕ|ˇU}ßSíJãCV8ãF+ĖĪĮ'WÖŗ¯ŧ¸-üāŪdŠIUî}~”ÉŽZe,áЃ“ŽūÕš‚[U€ŧ.An´ÂÆ\Ąå”g9Éu2icsŊä!=Z¯3,¯ŧĀÁÁ_đÍFbŠI%įa“Wē7ĨŠŽa!ÅB]”b¯;(}+:Ij[Ø­tėFjĄæ<žõ ņųˆHŸ1ÛĀ8ό§ĸ(\ Ô Ø5jpO8Ē@ášĒF]KYšž†éUUƒqŠšæ‘ĸØŌ‰ƒRDŲnz ¯ĘÕ:ŒEKbęX#w S‡LQĘäŅ!t¤ir7ÁįŌ y8Ļ'+ÅBĒY˙ƙŦ"‚Ë“L8L˜#Ō˛qAĒ܍H#šz šĒIĀ2€‡üh/D9FxÁ§y|dĶâųš§‘“ÍOr§R„ĀÅLĸ‘†Mģ Ø)Jã §ėÆ)€Đ ēSŠ ŊiXÍWiĮ@h3›\*æŠČųÎ;Ķæ›+€j˛’įФf*6[­N¸<š¨>VÆ*Ė9ôX6+"aŠIķĨM&Ô`á@ü(T 6ī›§&Ŗ|ėõ¤GbÎHrôĢ&"ãwsA\äŽxôëHĀĒäļAíÜĐ ˜ŒvöĄHĮ%ŗĶÚ¤!B|Q$Š{Ôļé$€€:Նh Ë\÷Ąļđ‘ˇsöĮj‚9hÜšÉ<š`6R%ÜÄĄvúP›ŒH™%|ԟ* ōąäzTr@ãîHTã*r1@‡Įå‚Č9íPČ!Žã†epx>õĀŦxYOP;{Uņ”T Čīū4•7˛cb7-M.‘Íē=Ēdg ÁĻųĨNx#‚+BÆĐÄŪdr2šë´āúŅpfDšc´^Z3œđ8­ [YâÚXŒ`qŽõŠpÂ7ČĞâĻķc88ųh‹XO$Y$xāÕy,.< &]Œ§ä8ãÚļ *‚ÎAÎ)ésį۔cģoĻœŧö¯o“<ādqšdjMÆyČīZ÷Ņ„‹Íä ų}qTÚF‘‡yÎ(njQTž‡§ĨTŊpgÂ}åR?ũu§š,Xžƒ$úT2Ãģm”37Ķڀ3ĖJ#,û†ė7MIn#–5H2ŽĀúŌŦQÃ&@gĮ¨ČŠ`„ų! g’ŖŊ ZÛmrY÷ ‘éŠ|âmÛP(\uëR˝,Š"#Ë<ŽjˇųA-Ž9¤=ĘŌ$ƒ™r;Š ÅUgŪãjF_Üģ°ųąÆ;ÕI¤•dÆę1ÎE+•fLËÃ8-´ž‡ĩ:ÖcæĘâ>ŖhÆ WĖ‘K“€ŦGԑŨ[5Á” ¸8>„Đ˜=4-K-­ˆYb2 Xå‰n­¨î–ū ā`āũáę+•Ô-×R’ @lnØŨxę*"õtčŌÚōâGbÄŽ*)ŠÆõæœ˛IĘa×ĩUExɊHXĸŽŽq[ |G!Ôōjkx­nũbx4t2íÖ5]đ•céŪĻa$ī”EĮŊm:cũÎÎņšyĶda¨7vÎi‚0ZģÃÆDŒ{öjŋ1Üð=+lŲ[DšžāqŨĸÍQŊēJÛÂcˆôÍ&R×DFķE!F§ķĒi4¯p˛-´āARFĘFŲ1<äu§Ír›7&ėgŠÍŗXĀŽČw”)ÎI'õˆƒWcęOz”āTˇcEŧhxã>ô÷…$7"žĮ¸ƒÁíA`y+Jå¤FŠ$d•;‡ĄĻÎCŠ%ę•d°šxE<œf‹ƒ‰ĪKWōĮŲž@ūĩ‰ ‘RU-Mũņī[ˇ6Ë(8@•0xX#d‚0rj”ēā‡˜ŠæÛČ ˇnyĻ”‘ĸpZ<đ{ƒSA I4hpy>šĻ¸ō Æ0ïąĢLĘĖ`„ĻLrĘTœM4y¯'åŠék/Ėcf> N†w…ËhØ9R[Ļ}x§tKLQ¸Ŗ&×ÚIīTn!”:´.ávōĀĪáWx%“a’Āäwü*œ×ļl™‡%ÃČæ† 2+yĪ ĪÉ´¯jĢ{vō)HHĪ5*—G•ĶlDü ™M[ŗíg’Ö…€‘XV͂˜t×8ÄĶuĪUBg– äsĐcéV`–vØËŧuÍ+ܧWLų˜¨1ʞS`ōx>‡š|9†î!)…Ú¯ũáīS^Y,˛ėsˇŸc؊ĻŅM‰RüîĒä4CËĘ IAĪĩlZŪ- ”īŒ +HĮcYßÚA.ˆUČĪI1Ĩ•Ž”P­ČØŲĪÖ¨SŠļPe#ŽæŦ­Öæ #YWĩĘGrD‚% s“¸ņŽôûJCŊ!.&ųFzsN×&ĮGwĒÃn0Éš‚įbžMs÷ø–ÚÁz˜}*ŊĻ™,[ĻØ%fÉ?QWŌ;¨âQųĪËō¯cEƒb‚Ã8`Kˇ !õ÷ĨVeŒˆŨIF$šŸėW !ķmP ŗHÜļ=ŋZ‚/íĢ.ŗČGSôĨaŪäŌ[HҰ Ë_œE-ˆT ØíWtõVg3lŒLüŗŒō*ŌÚŦđMqgiæY>_aE…{Í)hB"†Ā˄č*(ã•dXĀUyIn0*뉴i˛đ-Õž•Ō;ČÎT įg8­f°ÛiųØ­,­€zåjŊĀlH!Q´“Čĩ—Á’$‚RDHTã€*dŊH`¤|3œqžØŖ@ą%ĒĨĨĢ™ī1€­B'€ÂZF3ʎ¤úĶ ×O,ŽÍ+.Đā °mP° @=Ƥī5ŠÚŸ0RZŋ¤@Đ[™fÁ;H hŦ÷…ųģUøaíÁpyŅ ú홞Ė'ŌĨëPDp6Ž‚ĻĪÉŠ:õ ĐQF{Q@!ĸƒ@x¤ŖÚƒ@%-% (üh8ĸāyĨÍ&{P2†TÖŖsÅtN2+&ú<ŠâĻEGs’”aˆDbjíŌøéTņŽkšēd$ÖæšãxŦyÅi钔˜Ķ>”âÍŠK–GXėLŠÍsķõĢČwÅÉĒ7*TäRšÚ™f_,ƒéYXߚšŖzÕKĄ†ĢLÆĸ*¸ČĒ ‘Ō¯6O ņU'SÎ)˜§œƒųUČHČrjŠœ UØ22(°úQ¨)œūU/c¨ĸžŽ@1ÖĄŽ=ˈE‘UŲ‹ ÔŗžØp*%œI„'ĩ0ĮëFíĮ‘Ļo=99ÍK¸ô¨ãTęš Đj Į_jPÔ¨˜íOÚ ĢŽŠ2*RŖŊ>5ĪJRšúĐfŪ¤|‚›ÔņJėdÕ?$Šv‰]ņĮZI8&•¤õĒ͖lƒ@öA<ß.Ēj{椚Č’ŨqMldÆē’8üi"\6ĢF,š$ ĐM%L6zTą )dBMFKc4´eČ×**ÔpoTQd`VŽ›ivˇOzi)YĶĀáđGÖĢ:ākĒÕ- Cû˛"šŲ!ĖĮŽ)´Ėé“T¤­;ˆĘž3ФŅãŒT”ŨŅ@į¯cRÄ6Ę éHbž Û4Ķ2ĩŅĩ‚¸ÍL[˛mĨ#ŒÕô˜ÍK*ÅF1ëQ˛áŠZLúĐH=č6CJ⃚†F¨ŠØ‚ŊWeɤ5ޤ,r1ŠhĪŊNTcš…œ~5ЏœžŧŌc#žŒ‘ž:RŽ16V”c隯#axâŦĪíYķr§žlš+n…ÕqQذ˙Ú4ÅmĐmĪje›…‘€üëEąÚ7ô„ÍË1ņ]Ŧ}<&ūy­ŠÖ'i^lZ? J^ÕFAFsE9 ­cQ@ Ō—§JAKš>”QGN()zR(ĨīIKõ Ĩ&ii( MKH)GŌ´$) )ö¤į43Å%´˜Ŗ9ĸ€ AEæ€ŌfŽ‚Š;Ņ@ôĸ€ (¤ī@ĨéE%-Q@ÄīK͆€Í5ˆšúTRíH@ō*…à Š|ĨąÖĢuVÁæ“Uäō§ŦDļN6Žj&'¨ûC4eĀƒëPQaåŽcąÕQƒĪ\ķŒJƒHĒ<ŗ)Ī\š_=-Ø"&æ#Ž8Ā}…@ u§ÆĸąĮĨŽÖåˆÉŠícq‚‡##:`Vcį5˛,`îĀ­IDhw#‚zšˆÛĀĀ3¯%¸¤(‡É\Ž3M cpH9>ŊĒĖĄĖ€p­%éZ…zĶ@g͐äœg°5b+d6[Ā Ģ&ˆģe¸#Ļ=)ėL¨đî°ãĶ›!„LÄš/áO‚uŠAÂ7ËŌ›48PÍ>P ABãfw _fcņÜT6ō,“(ŠĪ…ŧöã…Vá‰äRŲÂd¸Húsž´Á‘”QÉ'¨Ė𠀤Œ—ĒļéåāėÆ2ņĨģČڐÃíPîØŽĖî{ÖŦŠ>Y9q‘XöHîŅĪ,ÄqīZ‘´?—(đI\,NVT+*š8ö55ĨÄWŧ¯Ë&;õ>ÆĻ†U–ĐǍyį­cO‡Pe$%z Ąž`'Ę|mcˇ“ëYķf†Q€AČčjĀ–F˙žƒwŊUž…šįj:ē`dûŌęöĄ$NräŒc°Ēė6Š;Y€čЍœ+ŗ,2*ŽœwÅW†5Ā,1Čî$PR=žÄķR¨2yĸ–Ģms )# ö4ņ,ŋ1q´úŌ .Hĩˆ`Ü2`*ĸ+ÜĖ6ɡ&–WybJY‰ĮQSÅ7”ģcM¯Œ zRe¤BJĸįåëQ…2Ž € vëC3ŦžYîN)˛ĪˇæEÎN:ã,´ŽSeŽ6,î\ē[žj)°!ŲŗiÎqÜŅyФŠÎ[ãLx帕Cdn dJ.+XXaķØH­…Ryiĸ)šã,ģņĀ,8ÛéV‘’B*g ŋSOKÉ&dD÷œbšw°ŧļ— 73GvcZi29 ägãŠĨxķŧ™B§ >÷ˇŌĨ00í¸yé@$]k÷ˇPcļķ€ŋ6ėÔãPžāŧn0zĀŦøËF Eeįå9̰ŦĶ1Ũ#y<ņKšÅ¨Ü˛o¯dd1ŒtbFM),XÉę­JÆŪéW Âôk)IŗhÁ!"EŒáFâœÛˀ@úŠR§g=ęDŽ}*5Q¸å Qˇ9§‚Pė)\¤ˆZ3ØĪ4cÔĀv4…FėEĮĘBb ČĨFŠrĀā¨"šQ!ph†Ÿ›Ú ’æ8e LB&3š™@+•@)ÜV1å°(áãruĪ͞vÉî}kaãqëU%[!ą€GCT¤CœlĄ<ŗ7žĶŠ>ÃåžbžV‹û˛7 đ8N sMĀ+‚¸8čjšŲ<Ļ–ŤbĄCöb3ÅGžļ‚B3ĪAZ~\Š#ĪTĒšŪS,Ü})\|ļ)yBđāĮ^˜úSc…Ĩ]Ō Ę Į5e"333ķÍLQ`6 &ŎŸ0R0šäÔ+Ct˟>U}ElÚ 2OUâÛ,Nāe[-Æh¸œJ8–åÔ&Ŋ*)íC@ [ŧÕ9Z K’øū”:˜ÎSĩ;‘mbHi'!dĪsŽĩV%ž –‹‚ãæ=1Û5ģ{iōeÉÚzŠ ŅũŽO>PÍZ‘%HŨ]%ÄĒžã‘íOXîÄ&ŪÎå$F_ēFNīJĒļvŃDZ1œėsž~ĩĢ-´‹$s,'ŖįŸnjīs&ŦjĻģaļHÄņŽD‘į?…9ŧO¨ĘSmÂc†HĄ­S†æk“įK‰[9ŪzƒëMŠT,í)ϸŦ1žÉ˛Üŗ3Iw9¸š‘ĨQˆH'ņŠ–! _´‘ō˛T}j„HČįˈeŽCîäā֔R$%šQ# nQœH,jGŦk pېwõ­XL- Ęō°Œ`…<kš[Ą•…ÚV$\r Y%• ŊÄį€NĀŧ bąąæÛOuŗĀ Ž@ŒuöÍT¸/:TXĐՒoĻ•đģÔ1āį¨íNE’æP˛NUTáļ÷ĄŽÄé!‚įoņkbÖFĩd`Ø`ŒÖK)â‚$ڛ‡^Ļ´/Ą!ĸ—g;rHÉ'DŽ5,„0ãpčMK{‹ü˂9ę=*­”Í,*d]č9•a„đÜ$‘’lž?„SBŌ'(@Ī5bv‹Ŗ€)ŲŊA!‡Š×=†1ŠäM 9īSS 4ā{S´RŌu Š)(¤īKš(œŅG=¨ b(ŖœPIŪ–’ Ū›KÍ„fŠ]GšOwĩE2åqI3’Ô!ÊÉ`CWKŠEHÎˤ1ãˇVFņdC×nŨŽõ`yS'Ą95,mqI=MŽįYkr5ŠĻMɞ+ Š{ÕûB´@ mYJvE-Œ’ŖŠ­r_Ģ Õ0Î*•âeyč*Ž;ļŠ+ķ/ŌĢĪ’qа¸ëŌ™*‡\‘Lɔ@ÉĮ5níųÕb|zTčØ9Å2QŠî$Ÿn¸gz†×ˆËãÔļā‰K*Yĸĩ‹“îĒ;zÔ>ĐiėåNj˛‚Ōg5#D‘Œ žĩ ÉôǃŽ?‘T‘HÚ,r ã§Œ`âšŖŠP>lƒLŌäšįŒHé@lpiøšCL|BüŨiĪ&9¨ōšcžzš¤‰jėYYvš¤Ā+qĐԒ6jlŠLĨ âÄ÷ĨÎ)€ņÍ\qM r €OJ|(ÎsNaŊ99ĒžiF+UĐĘHĐFųŗOķ8ãšĪķÛ€ĘüŠeį#¨Ņ°āzÕ#vUļ¸ÁĢĖŦŲ8éŪˆŊ4Ž•7œT8ÅUŠMËÅ2G+“š°Ķž…Ö¸f^Njģ‘ÔÔ )îjV`WŽi^ãzæ9"Ē63žÕbBy$ņYŌ\ōŽzŌ°œ‡ļ4Âøč*5—amÎxÍ*7-DûNsVã“# ÖxF䓊ŗ |´ŲĸV/ÍJ#Uzš•N;Ô‡ļAõĻļ{ŠxÚyÍ)ąAw+%° 2)ÁBšâ•°8Š`ČGR*6ëO#McšD˛ŧŖ#5AÔoûĮŋįW¤`*“ŸŸ4ҌÆ)Ā4Zr:’ŨŠŽvœĶôåķ.uįãģž{ ›ÉØ “ƒę(c&ŗ]¨ŅˇĖPŦÒ)‚#…brÁ‰äĶíÕĀķ ÷95 FÚī´å†ôŦ>ĨI>B\™šĒČĻF`;HõĢ1Ę.NAĀĀė)#ŦÛyn8ŦŪæ‘(Ī2ĸŗüŨ~´‘Å3&Õ.ɃĮåV/SlĘ̓ōnÕ]LûTĮ/” üÃÜІքŸd™ãĖ‹¸’zúUĢKCæŦ˛F\ qōŠ"@;;öųsR4á§XŌwbŨ?˛,[ŠÆ%ŧŖt­Ķ2â0ō¨ÚqO´vķÉfËcŽ8œ# ¤‚Į$Ōl¨­FÃø•>u=;Uëf)QŒž‹ŪĢ`nsך2d\ Ŋ†dŲĒE°ŽM"§­>,0Āâ8,ŅšnLŠ5NH2F1Š–h€ņĐS”Ķp}iG 4‹AŒœŌ”÷ ŧš 3EÆ.ҌnP)á°zf˛ō6ĐMˆ˜dã  ų¸ôōėŽ)’ež˜„,H¨ŲU 3S`ôŌį4ƒBŽ5Âą?SMwg^PSē¯Ri€ÔîMŠjŗ ¸8ŒbœŅ<‹‰ˆ\öZą€„œph%H$riÜ,RI|ąōĄ`ŧp1L2I4›™ ŽĀŽ•4ČíÄJ™K"`ã×Ĩ X­åüÁ›šĢ:<ŌĒŽëīZ/Ŋˆ;x5F8ϚFoŲÄ,HšB Š9éWŲAãŽ*‰O8ČFd‡o0qŸAÁĒĶBģ*7g¯jÖx˛¸^H¸$qëM2dŽs’Y åmg =ũë5ôۀeWˆāšÆGq]ՂĖåĶålgŠÄ¸†æfI[=ƒr3ZE˜É­•´9)!e 79 Rj <7KČ­˙Tvõ°j{Vf™Ų(ÚäņĩŊ­;čŒļ(­!ķaÎĐWĩheŗ0Ž,Élá÷FqPG0ŽPĄIČæ´ŒBXžN1ŌŠŨ[<, ™ô*_ĄvŪâ.0é‰WøŅš#éV)'`\”Œōģ短e[Ûģ Ž7t8āV„“ÂG›˛BŖhB8ü谙cFĸ$Üc=¨ÜŅF2Ģ’p=žĩ\ŨmsąĖNrqČ9íKhđŊƛ÷˜Ág"‹j2$))âEp~oJ´g7ŦĘx0’:j‚ēųg—'Œūëy™'¸RäsīŠAši]#Qn‹„PGr)"šÛCpIõúŠĒ‹æ<˛AõíIp‡ėáŖq¸ņJúĄŗex¯"Æy^Íë[1Š,đžOËÚ:§’ė‚zé­îbyR@ØāāĶBeœcéH:Ԗΐ)"˜‡Qڊ(íIKIH’Š3LڎÔ~4Q`IõĸúR4QŪ’˜´ŠqMa‘N¤=(2oĸƚæ.Ї ëīå\õõ^HJ>åīÔS]ÎÎ*Ŧ`ĶOBA0ĪŌ¤7j€WvĀÍHbmŖ4Ŧ7v%ÍÃ0ÂīT gsįŌŽ20Æ9¨ŅIÎhŊ! ¤OåRÄ8 IsMaÉ⋚8¤\\”ÚM %[Ŗ ƒŠy=Īz‘ġ€>žŧÔ¤žÕD‘ĶŠŗ“ÁĄĄÜ°™!'nqLR9Šü¸¤Æ™ŌĪ$TŒØâ‘J‘˛  ‰ĀíR7$âĸãŠD”îŠéš¨Į ˙Zĩr@ĮĩSęã ãĶHÆZ‰!Wõâ¯h‘ī¸ŨŒ`ÕQƒŠĐŅe¸'Öļ‰ËUicąŒa@4úŽ&܀ԕhâaEgŊ0 8ÍčÅQøŅøPKŪ“ĩ¨úĐ(ŖĨ;ŅBŖĩvĻԌҚ>´€×šâgĩ(­ (¤ Ō})MJZ %(ŖŊvĸƒš(¤ĸ€Š;Ņ@sIKŪ’€ŒRQ@ ôŖŪŒņŌ€!•ąŪŗæpr ĢwÅdÎĖÔą rĢÜ&čXԜ%ÍŲR*YFl!Œ§FNM\\1b,@˜€Ž9Ķ4âėĶ!SģžqīR1‘fÜę{U¤ ÷*Ām÷yEAĪLúÔĄöíy?Ĩbā°d<ti˛ŨœŽAĮŊ=Fō”ŒqD˜˛3`7CL%sįg’}jIXr}ˆ8¨#;a*xÁĨ‘€‰IĪ"€*j ĩĘ8`# ûTYBĪՀëV‚ŦÖ˙1$n$ d$'íļ׌Ȯ̝Zē“GrŦfä0ĮVXÅ´+—,I'‘Ú ˇšUÚ8NârU¸¤īc8†B~§Ŋ-ĩˆ"RwëNûD€†ō“DwÍ6ԉēōM04axíŽā )čZĢ^jk:7˜Ķ8Ā母j7/énT—n@ôĒėd”GŊNøÛŒ˙ 4#UwD`žGEj6ĘØ'§@gK1W{rOĒŪJd@˛‚%fų›?Ĩ]™Ū SiŸ›Ö§Ą* ž”ØÃDgb*tĻ=Æ~͏đ¤/ˆaļÚHŪŨ8īYlZFÉ}¸æ•QX–rI9ô5[P3“€pyį´Āģjbž&ga ÁęjĘ$M´+‚Ž8†šØO/Ú(á6Ãō‘ߊŗotÖųˆ;ēį$‘Í1W6Œ@™eę?­V™Qĸ ¸ŖŸ×ÔSŖŋ/ˆĪb:â‰$Œ9u㌴\hHšCšeDN#ŸÎŦŸ#h\2‚3ŌĢŊÄ1ŠBÛąšÍBōK:ˆã`žŦ1HdĻî(¤1ĸÜgšCtĐDe•‹6wĘĢFb22œqžš4ÛđŌPä € 1I–åigˇ呇8=3R›H⠀øŨžõhD°–\g§#ŌĄ˜d' ŦŲ¤YBhä—÷yķ|šôĨ€4HIŒpqĪ ŌÆ˙ŧi p ¨ëÍ[Ž6Ú Œ>´ –Gˆĸ,tĀäÔVĖŽė í`2HīVܔˇ)ŅņŒâŖŗˇXíØËBrIī@ėO4qšd€ 5Š Â:ú“U|¤h‘@ÉôĢāmyŠeEĖ4ŽOȧwŠdSЌî n`Wˇ­ZY™Ü´J]ŗ×ŪŽÚč3Žé€![ v§Ã§´JAũŪŪ1@\Œ‰,NZ¤–Ûˎ›ÉæÛ(UŒˇ'Ä{Õ¨<Š N„•‚å)ō"$ķžJ“N`”ąŪŧāwĪŊ@c`ŌÁÚ äŽ™¤)$vá]˛FrGŠu(ŪūŪļŽ]ŽéÉÆAĢKĢÛ8Hŋ¯#¸šfVķI%X‚3Č>Ŗü*˛K #š-Ôblī b+NßĮs'DĮéG# ž—œŌ×gã›IN$Ü­ÜlÛøŠÎq•™?:N-ҎIøÕÔíä8ŽOøĒųųūĩ&¨‘V§R⚝¸)éRŪ‹-ÉøĮæ…Pjøjd9īE/dL¸‚ŨÍ4điŒGj,H×l÷Ǟ.OZ•ĪÍÖĸÚZŠæ°ÔB[8éR0ãĨ< Ē9ĻɎ§Ŋ; ;˛'8ZD9Í4’x=)cÎqŠ ž€ÃqĻ‘ķTÁ ëK°ÍķŒ+Å<Ži\ŌÆŒë8õ ™I"XĶ&Ŧ,b› æŽEĘIĻc:ŠÅf„0#UhVƒ¯ËÔÔM|„ÉĻfĻE˛ĸäâ‰!V×Ú­2pF)<ŗŗĮ4 ŸR„č*“ÆA•`ž* 1H–Q—,O_6Ģn:ÕG<į™Œ˜ÃŒļMKa'Ū<}*š89ƒO´lMŒu5ĸ2gsbÅ­ĐŸJĩUė€ɟJŗøVˆā–áGzNôšĻ ĸŽ( ĩŅۊƒ­ÔqEÔfŠ ŅFhĻ0ĸRĐEP¸Ĩ¤ĨĢ$;QGjJ(īGj1@¤Ī41@æ“Ŋ-ڀ LŌҚJ\RR÷ ŠN´´”t Š1@čĸ‰GnhĀÍŠ@ˆ%#5Ÿĩ \>ÕûšäUy%x­rÎ8õÅ[˛ˆ8Üŧīįš`Ayåįœė ĩ\ Â[÷Ģ×0œäGZÍ{ЌĻ?ŗ ƒŒŽÔ…sBKĮh€[|āã öŠŦ‘ÂŧĀĒāsģŋĩUŗ´2ą%›žŠ–ęPĐ86 uč)ŸxÍsuæ §‚;SėŨÚBZ>žŊÅF=5–,s’ADsM3a9Š,š-ЅJ—uÚ G wšĸëœäjÜDŗ&eFn:*xôÉĸL ũĐ;P2”v—w…ä§ņzÔįO’%f,0Bđ_KvŽ5Q–įõ¨ĐÜ´Ŧ ĒD99ëLE_°EÁ‘ųĮzgŲ"F/0sÔįƒV¤xՈ`Ė3ŽE4MkjāâÆī-7VÖĒ”—v$.}1ZĨ!‘Œ‘€öĒ×´ąķ‚W?…„iûĶמ‡ĩ:x"ōœąíƒíR[]A#ų`āŽŧqZ[‘„ #Ž‡ąƒ i žĐŦÅYJ“ßņŠįˇ–æU1ŋ•^ƒŠ5ĸŅKa%„#;‡­@ ÆĖ­ˇžsLzŦ&XņŒ|Äã­=ĘÜŪ*įˇŌŖš)¤;™ˆãŌ§Ž !gÆqĮ5,´L\´Ė1BÎŦŦĖ8čCĶōÔÄeŊ)ÉoģäbGaŌ¤ĸ2KąyäS]™ÕQ‹ûÄcĨ^šØŽÕÁĮЧĮEb@ŨŠL¤Ulyd:–ČÆiö1ŗđx_~ ZX‹|ŖĮ$ԈBƒž}Í"™;ŠPĀa‡<ÔX0Ā\ķSĒ’ 7Ļ0rœsÁ¨“.*ÄቁļôĮ5˜ųHč3Á¤W>QBܞ¸ĢŦ…Œ` Ô\XČķLyī“íV­ã$ņ“ŪŠōŽĮ?;ŒVœKÆOíRF@—`#‘M ⋉Ž2šLfŖ‘ŪNĻ”‚EãĻMˆX8fŖËŒķVdįŽy¨H#9 ŠāĐ S“MSÍ?ņHbcĐtâ˜NzƒOÆÖۚi6{R†či•¸öPx¨ØSD2&QĶĩFTô5#IÅGš—ž´ÄDËÍ0ĐÔ˙+sĶëPĘĨ[#š.Y ZĨ:•~e$ÜUYv“ĪŌ’ØÅØEĘ8QÃa‰ācŊliž[ĩ垃„ï×5•¨ōœ?6Y°&ŨÍÂļũ+ĸ-D÷*j!Öé]~M§vF.ĸ3Ëi:Œų¯Į§"š €īĪ­Z!ĄģŠ ƚV“Û4Ä?qiÛķÎj,cŪ”t dĸ@F)É)FČb1Ö̌ ^zŋĄsg—Ū­G¯j ÂÎH÷5Ž[Ŋ*ļOî+5ŋŒ¯â|7NõĩgãČÉÛrŦŧrGJķōsJxÍ+ =f×ÅÖ7r†5ąŠo0]Oĩáųũ*Ä7×0`Į3sŒÔōĄŨžāˇÃ9 pzņÛę™7Ž:Öí¯Ž˛§ Îir>ƒæ=–š[OØĘ€™žų­KmrŌã&C“Ž´Ŧû†Š÷Ēq‚§Šę`’ë€qÖ¨ŨęÖĒ0dZ—ŠHވ>ĩ˜Ü~5zûTˇ|á×ŋzËû\r7 +EÜŪ-w%ƒž•­§NÛqšĮÜ‘W,%ä1ĨÆĐ•™ĐJų#ЍJū䚌Kŧ…ĨM0+G&ŦŲęŠĒp*9[üjhÆS'ō¨į—‘A ÄåˆjXÁ¨ŖÉlÆĻå8ω#Î*Ę6įĮZĨųņīëW"QžĻH"]rD9ĒĀĢOÄ`fĢĘ '‘ŦHÄÛēž;Ôë'k87ΌÕĨaˇÚ.ö-ŠÜ:ÔĒqÅVņÁŠC)XĨ+“$ōxôĻšį4Å|w§‘ÍRdl ŽÔõ;V S€%sEÄÆŠl“C!~•#ƒD$lÁ<â2\’"ōp0hDÚŨ*föÍ9BŽĻŊσBm8aÖšĘ ` Ë&IĀÆpi *J=iØÍÔw"kv#'Ĩ9ŸËƒbŽOz´ō(Ŗv5S Č8Î4šĐžvĮD āãšš„ąĒ×(Ny=*ĖeØĄ&LÉ!ÉnŊŠÅpAšĻ—ËϜƒ w}*ėM™ˇ9õéJĀ21éĮ!uPqUZP¯,†Ŗ-×=* Ā ąÍȃ Ä`sQŧžj†ŽÔ‡gš@Ļų=zP#ųs×fMąŽGSU„ƒËbN+;ęk2)â9Î8íQ˜ūPOZ˛:€{T@™@<i•Ė5W sN@{ ũ)Ų@ÛH‰ąđ{U\|âdįĨzŒ)Ž7Aī֝’pi\ęX N øĶÁiûsAĸ–ƒãŠŦęIĢ›~^j´‹ķqQÔ*N 9Ǟîâ¯LIÅSbcER3lĢ ÁÆ9éÅ>ÅK^"ŒäšIÁŠôģT@@פLj7c¸€m‰Wž*Zj”SąÍZ8Eĸ’–˜Q@XJ(íK@ãFhÅvĸ““GjZLŌ⎔œŌŌqGã@ ی÷ŗKL p)zR *ÉžÔœŅE'9 õĨ¤ ÎŠNÔŊé -€ԆŠ(ĸŠ^´(ĸŽôgĩQ@¤ĨëE‘𴆀+¸õĒŗUÉ+:áöš‘ĸ•ÂįëUŌ&—*€oô§\Î'ŠŠ  !j DÍû˜Õ3ĪFŦģŸ’č„ß2œđ ZÜî 7 į#E@ÅfA/–AN Ĩæ4hZîh‚įī•b(CBWĻ+;N˜‰„lß7|zVŦ^d/Œã'?Zu ¸‚Há9Á≀6Į-’Ei[æWq#/=8¨nėŧ¸Ũ:Œįšv–HŽ@Næęh’ŲŊJyF*xÛ͊{‚Q¤n÷ DŗÅ°Ü˜lqŽ•n؋tČĀe]x &™4ĻN‡h g.Ōc="ÍjšbûĪ|wĒŽ~|īÜŊ9銂8„—[m@jvk­RVV[lƇŽ8¤‚@ ‘ÛØ 2T`B Čį YŽØē&8ãæÅT†Å¯dß*ŖīdđkV9ĸąUŽ(ƒÉŽ3ÚŖi?åŪ2O§ŊK i“3q†O­eÔÔf ēYTM^E<…T=9äÕ&`éûÄČ^[ĶQž7¸Ęœ3Dg°ĻŲûSē.ųž´ÉÜĘš‰CØļ3Tã.ņ¸eŨŗœûPPd!úƒœR¸kĒQWÆqڒ5‰Ū§¯ĩ1$Kĩ0Jßžū{}jŊģŊ´ÆČįSHĸËBņ>č˛PķÔT‰!åēOõŠVWŽɐ Éö5MĨy N[øģõĻ"ŧļĢ­ĩHį#ëZļrGw„.U€Æ{ŠmĖLÖėč~d ŽĸE|ÕeČ*Gs@úYČ"É;°:Žõ‘5ē<‹•ÎH­ÔQŖ0 )(ęsTȎhŸ Ë! äSb[•ÉLĄß´pzEĖNJøPN[ÖŖBąŪ\õi­:+ącŒŸ” ‚Ņuļ!@rV€–Irǃ'ôĶ3e@Ž2*y…šg ´-"pÁūrr}čYcÎ Ī°¨$fV1¨ŽH9ŠĄƒËRįđĨ˛’ä1ÎqQį¤väՏ/ä$ũã×ĐTEF5ˆš2ÅIĻ20p¸įëN {úRGČĘOJ’ˆŒLdFņV|§U ˜â$` ãÚĨ‰8Éč:Ō)Ŧyš6#$5h.BāņUåQ´>8[ÆG+ÉäRh¤8pĶÖ=Ø$ĶAÛÁ\įôŠcÁÆ)‰‚E€O¨Ļœ6N)¯’Įž;ĶŅÆØ<N{P4’ „ąR:ŌpǞļŌ¤‘‚ÔŌHc†?^ôģ>]ÅCz{QaŠ#P1ģ§|ÔMĮŒSČœį֜aÄA‚2;Ͱ_šT*AsœzT*:V6íŖœņLÜ=?Ĩ ‹įÆ3¤rXsÔ °PāãsP+ ĘõīBC#ęzqHÎ\ ­JӜĶ8Æ(%Žƒ‘KdqRēâ˜0{RÅ9'$SYąÆ)Ų ņCsADlxĻ7=)äô¨‰#ĄĻ‰dnFxüi0éJW'4Ō ž( °Ü0*7 ­OĪOZd€fĨBbS¨ Ĩ#˜ĀäņŠĐ˜¤Vp„ļsšhLĪŧÁFB?úÕ:k'Q÷]é׊’ú%GmƒŌ’%Û§ÛÉ"ü‚gSŽã´ËQ] žáÂYÎÃīGą˜8õĒ×öŽĐ­ÄEv—ˇáL‰Ėēd°°$Ã&}:Ž~•fŲŌ[I>q€@ĮŽkSŦRļŽ;Šw -ąp2qŠĩ ēŧ„ė ˛xĒŅâĘō5Cš ‚[¯Ģip‰ Á?0lŸ­_š!›—Ã)ÃÃŽA°.ZEo“'8ĢŅę7 $Ķ–Üd)ąYļr f|Œ'Ūüũ(Ģ ’{"‘’ŨÆŪ´ČáTœ+‚ŋ*а Šb2Ŧ{u­}NŪÂ{t{y6ĘFJšVõ9yQbl(Nš$Tęđ2ˆļąū23Í,ļ¸:įœÔvZjĪ#}Ŗ{åŨŋJĸaKĢIX:°į"ŗ_G–cųNáb+ŠÕ4õąš ­‘B…ØInOĨg\JËÉRr9ĩ-JN䅁纎ō â,Ÿ™ēœWžŨÁ%ŧīŧ8'5ŪO4q&įÔōŖĨpē„Ļkˇrģy#ĒÅ%ÔĒN;ŌäsHM'5däŽ{QÆ)ŋ(Ÿ¤Ā<Ōž8ĸ‡NhĪzC͊Oj8žx4šÍ74ʀŊ.áŌŖæ”(ûˆīN ß5<ĶķŠ<7&ĨŽáâå$e˙tẫÅãšĐūÔģۏ=ēö¨žōyĪ#}jĻisßî"S+s’UĶĮ׃P’ &p)Đé×ūgČįž•¨Ŧˇƒ\Ŧ…'R oĨÃ>ÄįŠ ;Ŗĸœôŗ:{ 7s“Z72õŽ~ÆG…psëŌ­Ow¸ĒjVšÔĒ&‹ņ°)ŠARMA r9āՉ~UúŒŌ+ĄN<aČĶ‹•Œįô¤U;¸?•8€G˜™yķ3šŊĘ&¨¯ßæ­BpÜPöM9P=j\b¤%@Sšz!-Ķ­B4‰™å384­{âĩâĒM Î@ǏäúŒC‘œÔnÕ\Ģ.zj’<‘HqdęšæžKc֛ლœ¨ā(Ļ6D3RĄÛM#'Jš•Đ’>;TRK•ëM–@:šĪ–ũļgžāSKą ŽĨõšbŖwjkNXāĘŗÍÉ8 N*ItŒ:ĻARЋĮšĨĖÉĨ–`äØ ÖlFâH÷øSāI¤”Ģ b‹ ÷M?=\c##ß­Gꅉü)ŋ`r ŠÅWŠ Ŧ§ĻxĨˁ8Åß9Ü:ĶÅČcƒŌĄ{&šČģ˧wŽ)sŖU8v/ĨØØŠžÜŒŠ¯ũ–[ĄĒ×6r[Ą#œzQ΋RrkđŖƒTÍæėäŅmd× Ŋ‰T§īõ¤æƒÚÁhU3œž´ŋmGëŠGŗ"`šāö§Ī§ ČãÔҜǭŦWkŸ5IįŽÕOĪ>fŌx=ĢZ+ŒŽHĒŲ=°:QĖ›3ua˜ã5h‰ãœzŽaŒäĶ´ų ÎÍéVŒĒlĪA\āf–šŊ4ĩhኤĨë֘z3EP撊(ŖŒŅGá@âƒE ^ô”q@í-%ô ´hۭͯ-ąEhHŋJoSJi( ŅīE%¨4´”RŌPEPԊ(é@ IԊ(īEPRŅG~4‡­˜íˇĨ!€9Ŧˀ&­ĖįŠ5JfƟ\T°0īŧWš¨.É'<` ĩ8‘Ĩã€* ­ŨÛqlŒtô¨eĄą\ÉĒۜÖ­DVéK.Ž]­P’)YQđ ¯ÖŦG&ÅgUĀM!ų“ZGģQeÆŌGž+`9’Ū9^ø<ŠĘˇtģ`čq ĄĢq9KuRF@éŽõI’ËLäœcĄWUÄŅ´nrãšŦËiDĐíbC‘ƒíV#ÄčsĶī{ĶōJæßt  ã<úÔŽTSĐb´Ļe,Hĸŗ$„<€äzŌ#ųaOQĶž•aČvNŧdtĒĻ Cíaž‚Ŧ yÔa]G8!ų ei-‰“pSƒV<’H\‘Œb´ĸĩWU%Įę+‡PûGœf˜ŠrÁäF#“NEā:fĒ]K)!Kįn9ĪiId[ĻO<Đ; ‚ËČd$ŌŦ\I&ÔŸ&zš† Ã–cĪŊLĶCšyØŗō0;P&R2ēÍ‹āę*ĩ¸q1yvŒ9gíĖė qÉ ĸMƒ€¯Ô(Ŋb¨ôôĻĘÅ Øė)ĖB‘õāįĄ¨$diĖr9ēgąĄË‰͎TãË#8ãŠØž!ugڅWg;‡JĖS¸4n›pp1ÜVΖö‘8ÆÆ;{Đ>ƒííėØām*¨=ëEŪ5\āę;×A`ņĮå@Ų;ŗøÖ=ŲÅėģ"3E0E—"8U‰ČeÎMgŧģŖXŽ3V/& kn’+29#3+!ˆČĄŠ¸Ōy&™HŽ]Ŧ¤H椎âéįœSá.n—đ*IHĶ‚•^E"5#šŠ$ĨPONsšGa$˜åQŠLi„hŦCāā:ŊÂĻ@ǐæÚ­Ė­åĀųŊ:ŠÅ'vD]FI=*l™n0§œÔ1BąŸZļš& Đ|О%_\qS  ‚[§ļjėō@âĻ`֐Đ4¤š,:ú °…”`ƒU˜ęTöÎ*aō ÉnhCD€ÛK2iÆHüЁIAÉĮSBPPOĄū´ƒæaōŽp:še!Č{„ķH G#Ú¤žâŅž[xÜc֕v$YeŗŒvô§¤ŽwĪĖ:ûU-„Ų Ü[*ƒåģHpWŠp¸ˇ™lcĶxīOhŲžp8Áät¨&$ÆŖ 6žp(¸˜É„É) ā cäŦ­†s¸}܁R:8“O š˛ *9 Ū“*$.¸É j& xSŌŦMŋso\6sÅDIBIČŠŌÎIđ¨ß{ŧžsO/Đb™Ÿ98Ļ!ŽoĘEEšÔŽĢ'< …ÔîČĪZLžĸŖķ†ZŽHĮJ äԜœäĐ>„e†yÍ@ā֧##8¨ĪCÅF:šd‡=éÛFiŒĄŗÅŦĻTŒŠ‹~áƒ×öxĪđyŠc œUG$į­Y2đjŖ6O#\–E:’:ž:ÔwËŌP˛aŒöČæŦ• Æ~cŌĄ*ÍeqåÃtî+X3žĄ—ĩSZx#l$ІãŽÕ÷˛‘ÄœĀĖšÛÔ TÉ ŽĄmp§wîŲžâŸrǎ’įc #5˛9åšZfz푚 *h¤xf–ß^#ŋĩK ˛6 ØUČĄĨß ŨÎw€jŅ •íc7pÜާ8ũjÅž°īgTQĀ_ZÔļÕl­"uUPÍč2jąšIŨ˜öîzbÅ Š/ŊV$ĀÅgĪĒÆ×rđ1tū08#ڙ{yĩv ”>õPNÂ%Ũ€§°äŠĄj[[â܇éíZ :›}ĖBôÆ;L›ãˇųHČlԀÉ>äa„ĮvëRĘ/ë}™vHeã'efŨȍgwmÅJŽsÚĄ˜…x ģT5‡–ÖĘ)äWûû[¸Ĩ{°ĩ‘y|Ī4hØQ’čk›žo=÷Á<œVŊĩŲ{É`‚ާ ‘ŪąĨĸrŒ#ŠŅ+Ų^zP3G~iHĮJb‘ĐRuīF;ԟJsŠ(Œķ@ži;ŌņŪ“œPÁëJéM$îŖŊ.;Ņž}i1šR ķÉŖ§ZNŊ.8é@M'4ėRPƒÚ—9ĻãšQĀë@yŖ4 IÉ döëēuu5ÛéúPHÕĘõŽ) r+Į5ę6WPKĻŖ‚ŋwŸZĘ­íĄp܅ŅcZDW#ÔuĻŪßÃpëøVSë;l “îkÆ] ›GE܁Ģķũ*”ÛâĮˇZģąĪŊS:ĸ´ŠŽy¤ ‘Š•“k“ëPHvôĻ&ŠųũájįÖŠ’<ÎM]‡ŪŽ‚Eöo‘sVmÛ"¨¸ÍYļzÔXŅl^TÉäSdˆcĨIIŠ>9 Næl ¤ãéTJôæĩ%\+Vs§Ö¨pÜŗœcƒQBęo,ŽEMÍAp3QLISŽ{Ķ3ž !;}ß1ŦĢÛœ˛|WFƒŒbĄž!’ŠIĸ\#-ÍŖŒ#“í[–Ōmˇ äbŠÜÛ 1“U ¸–Ũן™H?­>TÎiá¤ĩŽĻа¸ąeĄ]܌ņÁŠå‰Ŗ‘?ˆr=*m_Äąkە‰#e@įĻk:{„n\uõŠåžæ6kFlĀPĄŨÜUQũ āRÃ:ÁT-wsrÃķŦųt-"ķF bĸ˛ˆ!eĮzŒj1(É`~•Z-fŨf˜ j›}ätĮ¸QŪÛ.Ō0+)|E MsôNãÄrNNÄ8ëƒŪŸ˛`“f­Ē¤jT1Į5˛ĸ÷Ž~]Fä’W šŦ÷w ËH:zQė[/•!åVŠŗ4`ÄF;s\¤Z”ņ’ŦNÕ$ū)*¤4m‘éGą‘2‹6R@Fj„ ŗ+ĶÄ0ːŲSžôąë-šRsœzSTÚz‰AËbÅŨˆ˛Žĩ™К}äu4âÆâ]äuįšŋk^ Íi~UĄĶN…ĩ‘jÖ˜ö­œgU{b­Ąų0jnT•ÆžWHŒs’)Ė2@ĪZ9â¤MXO)į֙ æŸ!ÍDRc¨ĖØšą$ŧÕ+†âŊĩ!B‰Î* fũjÄ*H-Ž3Q¸ێÕHËŠFsÛ5.Œ7j°ŒķžÕÆwM]đâÔÔ÷^xhĘŽĮpŊ/JAŌ–ŠBûRQß4u4ĀZ((Ų¤ĸŽ(úQš?•J(¤Ĩ Š( QE-0 ķԌŅÅąõŖ4 Z˛D dtĨ¤ī@ ŽÔKHh⒖’€AĸŠ(öŖĩbŠ( ŅGãE”´P0QAõ BUŨÁ94é_­VgÉ4†C;N*•ǚР2æĒĪåâ“8Ļøķžĩ DB°`@< ¸Įh(?JjgÉ%†N{ÔQ hÁžņ/=éhĘë÷ē՗›X8éĪz•íD(ĩ¸ČĨaÜ Š ŠVY‚äŖ=kB'ãō*ôÔķŧŲ%ŠY|ˇ¨HĒĸ2ß7j’[€X1ŪĄwt@N ˇOjŒIŒQō1Îi’J/ o¸(e?xÚĨYô듃!GˆīUĨEHr0@8dž6äŦ[‡¯zkųVųÂHÍĮ­){XÆd~üâŗėL…€ėE[™KËąĀųąŒ´ėŌ_*"˜Á+ߎÕ^í˘ŨHų‡nÕ;A‘´.0@"˜đ˛í€3ži\,UTAÉÜÂz• E š āŠzƐČ_¯ŽzU‘*đA/ĪZarÆČؑדííY°–YVN7  <`ÕŠ—zN>‚ –ĘGÜPWĖs˛ģ• ģ@Ģ&ė žÔˇĨËG(*ŒpG[û†Kh;ˇp(ŦRŗ9UăīžõjūYá¸nÔp;{Õ HÚ)äp Õŋã†UcF>īPh•.SߊŖ§\ˆÖwÆDĢëY†'a‰x9íVŖ"8€Č¤ë>émŨ0G\ÕRrņ’ Ãŋ^h„ŖĪĐTĒd…=ĒŊÁ’Y÷AÉ?Jliu9$0Xĸ.8ëHŦgUd!0>•h!fĀāzņK%°ŗšhđ=;T”‰t Ļ_'˛ŠēŅų’Ž0ā{ÕKh#`áWíœ}įän}Ŗđ ĸR§æųŗO „íųˆĀãD¤`nāƒDØOåL‘ē;uq1š"ˇEķQģ÷ Ž•´¤ˆ0S ņÖŦĀĨœ0ę âŖÔ w2• ­t&sKs6Ų Ŗ–Y]|ÄûŊžĩbYmØŗōI9'úUfRķ`8ô­ Ĩ܎c} Aw!Ąí§ÄÉįE.4ûxχwœØ'ČëUŨ¤ōÉ-´ŸâũęO9–(w¸vS–9ëL’ÜöÂX˙{ °}ĒēÚļ7nĩY-4!Ô Ē>ëR,ŅÆ’awÉ!8ä Iå(PyĀô5Jî7‹pŒ`H­›y;pīķląŠÍigvÚ0üįŌ“1b…îuîYņ+ŠĪáV|Kn ‚JtÚ^)\;]$Hv§Ļ>ņ÷Ĩņ ,,+ ƒ´†ėhęŠg Éäl_âۃĮjŽî'ųHáģãŌ­Ũ4h;ärG­f‚CdzV„TƒĶڐņSēų‘ųĢØá¸īQÆ{P>”`õ§qI(;IƒJ1ëAÆ:Đ!94íNŠny‌ž”¸49=é{äPr)=)H&ŽqÅ/"“­ cFH ÅĐcœQžsš1Š;PH={Q¸P1qÅ $vĨ8¤äP“ÍN/'6,Ž1Á¨:Ō18 D†y坏ãKŸ9 =Å@õ' Šīôš>TŗųĮã\Ū–åíŖq͎ $¨>•Ī%ŠęRÖ&‰Œ˛gRHrUø[rãh’3Аg<ā̰Å\ˇlß Ōė¸nF;S­Žjēˇ4S%sŪŦCÜôĒĒÄ bŦDsPô4F„lzÔŎ:ÕXF*ĀP275™:m“ŠĶu!ąU.”c4ė-™ĪŽHÅQŠãĩ[˛84PöņLd†5'ZP$(lp>•ŒõĨ99¤ÉcƒKŠj%I€éTg€œV…Ā }*Ļ7zĶ6‚ē3Œd¯\ö¨Žmå¸gqƒØÖ˛Â=)ŪRŽp)ķXS„eŖFBũļ(Â,§oŊ@ö÷2>摉õž Ú¤[UĒšŒũ”;6lĐæÆî+Áä{ÕfŽS#¸Ít?f€ĄlÁ9Å>pöP9ī.sÛéJÜn :uúŠß6€v§ `ŖG8š#ĐÁ+q°ŠĮ'" 1Mœ1öŽˆÚ†^•Y`įčæ)B&Ųä'“ÅBl2I'<×Gö1Œb”Y9ך\ÃäSœAx ĮŌ§[b: Ųû(ô [ācĨ.a茸!eãjŧŠGZvĀ•HRŊÉ{’FŪzÔÁŠ÷ČĪĩ+’Z‚lNÍĐTŠĖcÖŠīÉÁĢp’V™œˇ&AŽqŌ™0'z—8 Ŧ1šbLŠ)Ģ>gËíÍ\™°ŲíTņžC͊hrŅÆLT2¸“VČÂtíTfđ¯$>2ŋÁÆÚUņĨōŽBļ}čä}ÂūG­yČz‘Kį'LŠō_øM/pršÎ;ԟđ›]đvž´r°æō=WĪ@y"2kɤņán\Ō/Œ¯‚ā§4r>áÍäzɞ1ÎáGžŸŪäŸđ˜_ũۘ§Ū•9QœņڎGÜ/ä{­- ĨĒQīGj(¤ĸ“ë@ íIEvĸŠ(ŖëGãGZ(¤Ĩ īKI֊Z(´‡­āSXúRša¤“ˇš¨_jfíUÅ!ŽŽSŗ†ĸi$˜NÆ>ũ)Ŧ \úRc!“Œ“Æ*3:…PSR Ãu¤1 RHät5#yÜ>•Ą ŗžrL“Ul-$š›';Ga[2‘īNÖœđāpŖŠŦ‰'w˜ĸ)ĮL‘Zˇ3yŦTŊĒĢBJ€Ŋ{āS°áŒũœĮ;îu;”ĶmËÆGCV a$°#ÚĸhÕŖåöãŊ "ŪBzdo$’0û t4ã•ÚdŨâfŠ(7HÁĮziXLjĀŲ—nĢVŅÂĘŌ¸ŖlY1K4˛Fņ¨¤ąŌ›4“Ã:*ccļh¸Ŧt_eW;ԍ¸É>ĩRXÕF@Î*$öÆ ˜ËSd¸)~\zP æʘāZ‰$1üä“ĐcŌ’i|¸É&×RéHdˇaŒ,ņsĮnyĒqÜ$¸b9Ú¯Û$|ļGĩgJŽŽÆ0š=Gĩ0ąid‰ãÁ į"Ģ^ÕPĖsõĒå6(pvö”†[ˇ„rH\f­ŪÛČÜîČįÚĸ€€Â]ãi#ņĢ/8"Č8 Ķ@HÖB07™éÜVqw†$‘Á$~5ˇââSjƒĘ˛nb1_2<ņCV} ĄÁ<í\ū5VI €áqųÔŖqŠLpIĀ÷¨!RäÅ'P9"ŗf¨™[k ÁZcũå,;‘QÄÛØÄũØÅ9ˆ(ĖāūŠ*â;M$‘Ä‹„ûĮ”ųnaŒm—Į8=Ē.F‹ĖPBš#wr)đŲĸ¨#š<Ōe$9U昃ĻMY.ؚXĸ‰988ĢhÆĨCz‘†ĀQŒž>•b4 y8¨b%x:‚OJW*ĸdsOåäR/ “ČôŖ!Î1ōúŌ“-lābžHåŋ•3h-ŽŸŌœĢ‚HĐõmĖ3üŠāáą“Ú„PŲĮJ•xäON{SWĀ’Į,ŧاądhą1ĮŪį­`ߍŲ8 äîAĐ’j ^YŧhŠH9vÎqĪLR„'#âbŒ˛‚žüSŒž$E?`ېŲCÂĸ8ŲōĻåÎIh ä;ĻėíãŒĐ‰bI îāî$vĻ.J°gã‚îiĖX•°9Ŋ .A#84ŠŊČdTÜĮ ŠB¤!ĄãĄŠ>Rįy<‚8õĄXđzt Åh׀IĨ#¯ĖJvĐŧfœĒ üÄЂä NėúĶņōäqLe#= HO'Š`BOĖ˜ųÎ=:TŽšzRÆš ęyĨa2Ģۚ€įš–BAĻ/­ÆâĄ;‰ëíVXjŧņI‚"e$sP˛ˇ­Ze¨õ, ˛nÎIöĒŽw ŅtÜ0EQpNGJd˛œ lČÕYŽFĐjė *āvÉéT[—é֜L¤Ii ķvgāSnŨãųÜgøIĶŊCŧA+;t úĶīeŽDP‡ä`{tވŗž}ĖFãß,xe$‡\õĢŌËņ`“ŧ(ÍVdxĻÂüĘĮinV( 4X,į sVŒŲfĪsKŗibq׊|ą:7˜Aäœ ’ÆāF“ČHĶ™™É ˆŽjˆ-[ŖĨĄōŨģRÁûĩrrrIZ}ĨȚŨãiã#šĐĩtAŪ@ 4įŽ8`—-Č@Ö2É#+ūŦx­ ĩeÜČ7 œQjÂ[t7iåč¸íC(BņE+O(˙UĶ#ŊQÔ'kų°Fß9ˆZšsēStŸ6Å!”ã’+ėą”In`¸P;RˆŲĮ߯ŅŪK. ą5[š×֕ķĪE‘A+œķĐÖfô^Z,LUļļvˇŖa‚@4ŨÔĶy" Ž:ĶqęiwFh曚vi  'Ž´ĐpxĨ8 q@O<ŌāŌįÚĀŽœĐr;ĶsëKõ¤āŠ9=¸Ĩ#ŊãäP‚GzJQīHq@jQ@8íA $Q’x¤üi@Ī8 kœŒŌž´6H Ūž éĸœ¸4ĶčS–ĩÚO*{×Io)+Áâ¸ũörŽēĶjĘ{Øy^65Ŧe#‚kKh)’kAC¸zž“îL×ĩAšŠDDŊ=T…ļJ nO0}+ hĖ3<h]‰’ęi#īQôĢ’*ĢŽ=jÚ9ÚĨ…Í8œbŦ#`cB)3VŖ'%¤I!sUĨ”âŦž¨vœöĒLžĀĢ’zUˆ[<Ķ$OšœÕĄŽ2čZ^zĐäM雉<Ō--f;€ĨĪqHãë@SRŲǰŲŸëU|āUæ`Ô€ĐƒRģ0BĮ‘JÉÅ>,´Éæh™(ÉŠ•FzURÜđjXĨã“LWe•@ UˆqĀĮCš¨%ŖÎnÔÅŠfH €)hĘŧõĒí1+‚O4đ•†N´gbûÁ¨UGI#Ū‘Ļg=j"ĮŊI h@=*6Į SŒĮbŖã9&¸Âį֚Ēœú͘æšŪƓ1€P‹ĮZ6įžõ*´CHHS”äô¨älúÔ¯‚ŧЉ†zR‰†*sŌŽÂEPF!ˆôöĢŅcŠŖnXaōÕi›ĻvĮz§3|Āb’ŠķąÚ*‡ÍĮ?Z|¤–›9ĒDHšSĩ1šĪ”÷>õjgĪšŖrÁWŠ 25‚+8=:\Œî^BÆļõ›‘ˇ`īÉâ°Xķ[ÁYuåwa‡ÚŽqŠVö¤íV`($œâ—$nqÆ(švOJw͊a>ÔgրŒQ“šfh E;w4ârqMęhÁū &hÁ šnx ÉŖ<õŨØâ—´îÔ JSž”é€J ĸ­u¤ ĸŠ ”´”Ræ ?;ĐhŖŊ™Ĩ<Ҋc*"õ3Uy9¤2'#“UŽsO™ČâŠKpâōŽFN1MŒm“Pî혐Ŋ)Äy ßĨHÉ%Ûs÷ŋ•4ČČtôĒŗÜÃ,Į­X†9 n~‡Ĩ 7Ŧ[ėö# gŊC>d;ËazĶf­ŦhNN;U9¸ ė@īLlYī"Œa{¸Ē驖l´{x¨fōōUztĢą?7?JjĨÉvÎN#ŠhÛzáŗĀĮąābÃrüūĒ*ܗáÉRŖŖ Ņa˛=E!„íLœTŦš9$)(!sĮ5֐ģÉģw$Šĸ¯, YIõĀæ’ętƒË?sJvHĒāäãJĮIŪeÎÕnyīíZ6ėZ ™+ØĶ(˛%epûÃRĖY!ĘäqÍD•qķcMŧģ0Æ`ƒŌ2ŒŦe“x$sÖ¤UÃüĖOäö¨ŌhËĻåÚJ’OQV2oŲĩ°3ÁĄĄƒLąĒaŠžÄ |B+€Ęō…|÷čMgšhĶkžŲūTŠ){|°ŗķ(B,Ũé˛2z¯@ŠĻ[,ų"DuÂĒũsۚ‡Ī’%ķ"—åĪB9Õ%ĩõËÜ#ËŧĄë‘ĐĶč’9JÚųØ`XėlŽôĀÅU‚ŊĨ[ŠTaK|ÆŖ‘P">^j@¨āʤŒŖs´ĸē.P°<6+E,ßi|ÃzĐé2¸õįšWKAģå.{`;Sä\]d|­Œ6+EIlī)ہŠĸ#,Ėb_Ƙ‡ī’Įgw§ÖĄ‰Ūy7ƒ’îN 6'2;(ÁÁųČč*ÔkąÕJ„=F:@ŅNcöːsœŌŪ…kĨ$üÅôĻÛoœ(ŧÁšFäap}ÍęQŅá'¸äcŊ,ŒŸj8vŅ“īRų n˜üŒsŽ˜¨å‹ŧœ`ÖlŅ1ĸA,˛1be} BÚ *Kj°‰ēã’vŽyâŸq ŠôŌsŌ—B“ÔjnXQĩb(ö­1’Bį§ĩX Ž•”¤m …y!x<{Ō‘žXT§SŒād搊fÜËŌ“.+¸õMĢÁŠå^ĻĸT;sŒÔũHĀ ČŽĀ9÷ĄNFT÷ĨĀ*OzPgqëC 1€9'y§ĸԎ9 !?1=iŪ@+ÉĻ€‘$C€~0*B@CĮ=rj% är(2‡lž1Ø w$aš<°`„õõļ9Å5rø…ėJqČÎÃĪz¤;Ž'ŧŌ(l‡iųĀôŠVŨrAŸziË!äüžôö\ŖņÂđ>´Ę­÷˛*h€gCŧ?:Œ€8ę)ņ”YaÉĮΊE Ãb…R3ČŠīcXnš4`ĀŊ@F$Č;SĒĘŠH2Ō=ÁĨfG4Ȏ%v9Ĩ`d3/Ͱį=éŠĨ•bqš‹ ‰FzŌę č6CĀ SJņÅHF3Š`Ž ã ĄÔ20QÍO.I*aWĮŊ&2:žsŠĄ(ō _xĀLŌŠēŒp¸Š°Š¯ĪãÖŗ%“ķ­9FņTfBpŪĩH‰"•Ã'~FáÖĄŽo>Ɂ'tc=9ĀŠ'ĢŠĘđ}ë6ŌgjģÆH*GAZĀÆh‘‹ĘŒÜœđyĮ­*Ŗ2‘ŋ÷dįoĄõųŅã‘7ŠLŒr:Đî• VȰd ÄĮĖFâiyˆ—œr:ÔoĻÜ´"hÛå' ëJic IÜ?!NÄčY´so4‚VÎŪjŌŪļÂātĩTœ‰™ļ‚p2ŧƒõ§"4m°’r8ĀÍFˇ—w(i]‘ ö4ûœ[qƒ°ÕD™€P@ >ö)“ČĀĒn$1I°ą$3I3ķ¸Ŧ›Ķˆe2BTlĀd85§lĪ`SæŨĪŌŖÔB^@ņÄØ;€čŊ˜=NæKw˛a”HŽŲ sÅgæ­]EäĒŠp͸äŠĢĪjÔĖ­ûŅÛ­ “ˇZ^¤ÁĪ4xŖ‘ÖŽ1Å€ IŒqOIČ4Ō8ŖĨ žÔ‹œæ€šŋCGC@ œ3ëGŅĐĐžô„gŊ/z(9 Kž)Ŋ/č sGJ1šÅ)ö¤#+@Æ´đyĻ4å Fū…oö˜åÆw'5ĶXJĘOĖ+™đÅЂ˙ačā Ũ•^Ōķp)=k9#ZSŗ:(Оāũ)ëS‘š§i7˜ÍiÄAŽŠž‚Ô•0Pg¨ŦíV  •Ŗ€@Ē÷}ģ>”üÅn†5ŖøÉĮ­k(\&ąĐįÁāVŦd4c­7ܔúUr85j'#ĒÂÜāöĢqš†irnqHã+šz—Ļļvœ )眿˜:āÔÍ×& aķg5Bå,))Û@ Nz”š–ZH#>”āsŌŖ<÷§)ĀéRh‡5FĀ÷§Œ7Z erœâšŅš˜cqæ†\ŒĶˆV?Z=jdâĻ „žĸ„ÄBԚxŒŽ†œ(¨öĻ"víŪ”tį¸sM~šķ€š܃֓?. qI…†sMe,1OqžhVr(—HSæŠX`Z@p:R m#‚)éÅ?ķŪ™œpqH• PŽZ”0ÁĒėiĸXądlÕČĀ œU#Íú֔xōÆ?lĮ¨ŒN0jŦ¸ÎqV܍Ŋ*•ÉāĐQ\€XŸĘŸāiŠšāԒąāhÎ[•Ļ;›îk.úMą’OJА…SÍsÚÄå!~yĻ–¤KEsšŊ˜ËpĮôšÁ A‚G`ŅĶĄŖ QF@ę):ķ@ õĨ΍Ļ÷Ŗ ĐÁi§&“Ú”Pî!qŠ@xëFrsŠOj\ķKžižÔgĩ8“Hi7vĨ´R}ii;ĐhĸŽ”QIE(¤Ĩ¤ ¤Q@Q@(&Ž´(Ö¨dŠJ†@iNEœÖ}ÂĶô̎ @"ąnĻulƒÍK#bG<Ņ4Â=OZWˇ.G=ę" ´“‘žHŲjVIŸrüĒzŅ-ęīXP Ydōâp8ĒVđ‡š<äŗ{Ķ@nî܉J­6âŽũsWĢĸĮĘ;TNŦSžÃÉGų—)Ō–0dœDĢÔŧōÅåųrÅĘ˙i–/^$Ņļâ‡q@šÍmäO%˜1=Auė$RŽ+Rīk]äŊšĢĒ&äCŧ8÷ĻSIĻ<ŋ˜q’iNJ[‚’8ĻY~đ#¸5 ĖĒ€€N9¤2ġBU$PyÆGzŊŗFÚŧr b93Ží €1“Jneĩ‰ķä˛äŽ˜´ötŪbÉ`A9ÁĮ­EpĢ-ļī(’Ė A`ë5š:䃌͈u˜¯üŗ=3ëH<†1â€.* YŅCDĮp<âĻ!$Ü`1ÉëI /ƒHŦ¤2įčŖd)ČČ#ŪŦ)2Cŋ€*ŦįÉ rO5,Ō+Rd"6$‘ĀFÛå“9ƒĪJļLā Æ=iq—NT8Oâ$u9ĒwSŦvNĘ1ōí9M_Ւe”ŅvíXēÜ\˛|¨79ė­( oCޏ#Ė rzkߎ*ÛF‘ģFĐ?3éUeģg ô­Œ†uë@ôŧČŖ¨Î1@O4šÍ!‡Š_zĸƒœPœšQŸZo=§0h§$ķKô Đ ë@úSOZ\úRcŊ.8āQøR~ŊøRäâ›õĨŒf€EĨéI@ ڊNzŌįļ(GCKŒĶyN8#ŠˆŽy§/Ĩ4ŽiFhĤYU9č𮩤E*Š,Ģ“ÍyŌđ:WmāÍ@|ÖŽ2AČÔĨ°läx¤Øx*Jܡ˜qšŠĢiĨOC×^ŪrFZÉĢęŽÚ5:3ŖPܖåz†ÚcŽMXfV[3ŠY˜ˇqaŗSŲš8æĨŋˆ”Χ5VԑŒš´îŒÚŗ6yĪ&§BCc5U$;Jš7ËgŌ“U‹ĘNÜöĨažE1pĮ­J¸ĒMVÅycš¨ã´%+Фãšhcĸ84é=iˆ9Š æ“ b÷ˆĮįNĀĪâëAW$ĮĨ4‚z4ŊęXĶšĻyŠeqM8 žôå‘{AĨô$ŒdSņ•ÅGŧšF›åâ‚u¸­ōŽMD\?:c9$ĶpzĶš\ŖÃ€H ¸ ‚)IäĶÆĐđšĸl&Gznđ8ģ"šĘJ.1¯&WԘ“`E9ãâĢO<Ō+•X¸%OR§ Õ ûHԁÁīRC‰1wЉÍJãHz Ū´g=i‘L͈Ÿ+vö­+ƒYāžž•r&Ä`՘ˇŠ,ŸwTe9$U‰%%zU7›šV-l=3ŸĨE3‘Å=_Š­q.Xž´ļUšųdü×#­\&ĀkŖēŸ ŪÃ5Å^ÍæÜ9'<Ö´Ö§=whØŦy¤íŠLāņKī[aZN´ž”‡¤ãĩĨíIÁ žÆŠŖĩ.8āRcڌŌĐŽ3@8„ķKÆzô Ĩ%.s@PšJ8ĪĨ/JCŠ8 ķAĀéú̓ŲBŽ‚­Ęŋš3c¨ëR7šZöˇ¨āÔq ACķTĀŦ뚁ŒTHãdg }j–‚:ĻkHŲxmœûÕr‰*•'āÔv˜ļōذô5šYX†ųO"†G7”NėzÕ0ŪûĖ‹##UÖo3’ĀǞŦŲéĮōĨp°ˇ–‡cT%šē@e!TdZšge…™Æp(ĩRdÎ ‘ųS¸ČŽbp6ƒČčEf]?Ų“%rØÉÍmɄ˛wĸŗ/Ã\LÅÂ(æ•ÄSl‡|Mō°;öФd˛Á;Yx÷÷Lj¨ģvt#ĩkÆ-îm-ĩņ†Ö¨v,i,‘C 9`ĨvąbņLaƒdũáÆ+*ŅÄAėŪLŸŧ‡Öļ ļĀ^RŪlcd€wŋ˙Z€(ĖĒʤ™‡įO‚"˛ ;”įĨK=°`NqČaŪa`;‡+ÆsIŒ°#K˜öČu9R*”‹"Ŗ xĮCO™Ô)pŒ~éõ” Z8ˆÉ8ĮŦ[[ĩĀ:˜Î~aëW|¤BC)UÆr+1‚sÛĨXKɤa¸äsÅ4„Y“ ĄbųŽ8&–ãũaļ3PÍrr…˛sĀT/0’ `ÜņŪéˆŗ5‹ĢŖBÃõ^ęÚKˆ’HŸdƒĒZÕļēÚÛ>P2riøˇbLDĢfÜĖĩ„ļ<Đ—¯ĄĸV$°Ëôîh‘1sÔT Ž~W~拁Mb‘ö…c´uâ´!ļ*įžzSƒC%ÎKtĸŒĘ !É$AH.(Y6DpsųÕhNë—,IÚ0E:ivÄõ¤˛…T3’Û‰,Ĩ&RE„a ENyéU$•dœ1ļö4ÍōnāˇP 2!ˆ˜•Ī_jĘLÚ ¨ąī”“ާ€;P¤ĩĶ.0Í9‘0NĐh˛‰ļ4’Xˇė*[˛5Šģšd(%”āņV•ū\ĩZ@cu õ 6`Ÿ\V{š- Č.Øš§ĮžŖëOˇ#vHƒÖeWél+ß@o˜ãŸ­=QŒR!Čæ‡ œh)"A íJŌarZŦō\jáđIúQ¸DÁ›§nž´ĻPĢČĮŽiܧ× zډd,Äõi’ČLÃkmŨœãđĨŽu…KHáøF{Õīŗ)‡§­W–Ō҃3M#¨,8§r[E9u<>Z9p9>՞×6…™3ˤŸJš4va ˆš8 7zωj­•ž<ņЎ*“Đ@.c–ƒÉĄëŸzy–Ú\ríčzcđ¨Z&rÆ9„ĀĨx’Eņ:68qØĶ¸ˇ¸ÃC aØ0ÁŠ’eáŖ?z§oŊk¸w隐HVE_­!ؖ@Uƒ žŨ*hfaċĪĩ1“vAa‚>_Qõ Ą!YOJ‘ĸĘËĩÎĶžüԋ!bOJŦŪ3éO߆w,¤Z¸ž)>r…įŠXã)끜ņN —w÷y¤UÉåGYšÜqëŪ ˛7c‘S8Ë1äŠĒß'^jŽlĖq֙&@E$­ēŸd¤$į)=Áč‰9Ē“?8ĢsœsšÎ™Á42Så#ŠÅDf8ÍBK<Ŗâ–GÛך%Čdˇ´ėBMT:”ąafUô85$ŒÎH/šŦ븃ļĐŲČëŠĩC‘iõD\O¯'‘D—k"Š ×€Ãą÷ŦY#ļŗ¤ˇžšį4ÄēķFÅPIá¸ö=håΎ+ IWíNg˛0+ž†ô™|§%\üUŸļ…uËepGcRĐÃS@0Ä{Ö;yąČԘÉé[ĘŗAË|ĀôŦÉ›įAģ•õ¤ Ē2ŊÄbßrv“¸ö5¤EwÚÎ}ęÖ§@Ž1ķ $zVd”gBĢžĀō Z3{ã<Ŧ ?PGĨH’aÕ¤”‘žp3TĢY6°<´‚]™œsTA<ķŧ˛ tÉâĒž F:žsVÁ}įEjÕļŸssē!U<īLØ÷ŗIÜۘč*@Ŧְˌ `j¸öŸcCŌΎ‘õĩĢ<Đ[û‰–īļn:ėĀĻßÍPę¨`Žc[ŧ0ؒãb×C{ƒ|ōF FŪrū%œRÃ-ž8î'ąĖĖwž3Ú =qR;—äņL>ŊkBĪ8ƒœô  \āu ž€RŧzŌg AŸJ^sւi? &M8ôÍ'ĩ4‚qJ>´gšR2:ĐcہéCqH(NzŌ`ކ”ƒžOŽôiz”€cŊ(â€yéF3ÎhīAāu ™9 úŠ:ŽhĪZpĪ\SpAĨŽ(aMéNaܚoŌ€*öŸvöW‘ˤ€?Jĸ2Z~}č×lnâŋĩP •aU/tĮŒ‘—=…ržՍŧë ōጚô˜]naÁ9Vr\ģ.Ėį­æ#ƒÔUЃ“R^éE[Ė‹>¸ĒĄI]¤r*šÛJ­÷-HÂhØV\yŽFBĢ*僚†čęĀđ}ęRąŗw/ĀÜ:ÔésTí›åQŸÂŽíIšEh]¸ŠI }j´l"Ŧ ŧõŠ)"'cŌŖ‘Ģ;ĩFA"šeXŽ01Kœ7Šn ätÍ4x4ĸBz…ƒoâœ\Ģbŋzb%Æ)¤œâ˜dųy4ä|Z’â) Ķ~”šĪJE#wJV.âāž)=ÅHĢíO m¤Re`™n´ũ  ađ(*pjĐ]ˆnĄĸ!jDĀōw wʈ8&—?ãOd#‘HČād÷ wCY[¯5 žÄ™XāäTmĩ¸#ŊHĶąޜR¨Ë ~5!\ō)́ŪĨ ēd˜Áū´1Č⑘Ȩ÷e~Ŗ"‘#_ŽjÄĩLܯ5 1ĒFmS“Vԑ RSķ*ęˇÉTemHĻ}ŖY‰vāTŗ°c×œÔ ãšB1!x5Fî@‘œu>ÕfGâŗįä=xĻ‘ ÚĨÁ†ÜŒœˇŠæ[’I¯HÔ|(×ZjĘŖæÛ“Šā/leŗ˜¤ŠxīŠŪ­ĄÃZW‘Oč§4€āsVb0‚MŊiHæ€tsIĪ4)sëI“ÖŽsր¯ wĸîhqÍ.22M ëÉĨ'Ū€­šMĐ‘Í/&ŒŒRgŌ€I֔ķ@úĐČ‘A'4”õĨ¤ĨĪb“ņĨíIŠ`Ph÷¤IE´”Q@ IFyĸ€ =¨#ŌŽ´QA4PŌQE5”U9›m\sÅf^1U5,ek‰ Íēaä÷éQ\]˛ž Rŧģ,Ŗš†ZE´™›Įą m-‹ tuôŦŊ2?ĩÃqšĢoO;^Kv` õ Lį|ɑöIØö­_20\z†ÅŅ,7ޤU>ĩ ´¤ŽŌÄā÷Ŗp[ŘĨ,ÃåcƒõŠ.ŖbĢ$g‚y¨J’ĮiāŽ”ąLĀ4rāÛրÕ˙´9]Ž ž;U™6w?Z‰ļ3^¸æ€ ‘RX‘Ü͘Š‘/AÅ]†ŲÛĖ#';BŌC&q98éNĀ@mšHø'Ž+6ōĐÄcÉ8ŽĸXŧĩUQÉ=+3UĩÛc÷‰Č'°¤3ÛEp6¨¸č:Ô6ķZ6P™īS¤R‰ 2sSųo8TŪÄzžhzjRMčT°IîŽôųÍČčkĄHš dŒíeרÔ֖k }ÍCrâ9 ͎­bę]Ē‚Qķ&ŒH ķПëUÔ$w2Á"đ˸vÁŠã|`““Ķ™ä`ŒŠĪQZŠ\åœ\Dō…ÔHHĻ@¨ˆu\*C“OØ(N1œqM˜˛7Ą'Њfv!–`ɒ>éäcųPĶ€$˙–€”ôÍ=„lų9ƒ×äSb`!ĀČäS@ŅcĖEDŨ•~„öĻĄ)6Ōŋ+gúŅ,lclel03än žĩUå‘ä'ĖRĢĮáQĖKãw âŌžƒŒO.֔ã^9ĢTŠ›#—ÆGPEFģeäˇÍГéJŅĻĀĒO\õ¨lŌ)‘ÉĶH °EQ€1×ŪŦ¤I°lŒ’*8ũÜ;“V6 €2qëY9#hĉ‘ŨđNjÜQ@8Įz!Œ/,jmÃ'ŠÉęj´D7$< ÆYT÷"Ŧ2IéËdnãƒL.=Ëô§*–94Ņ’Ųõ§ŠÛĐsI>Ū3×°¨ˇJNÕCĪsŌŦÅ,X˜Õ´ˇQķ6R{P‘W(EjōëVfš}ŋ™<ŠžíÔвO~ī’E"KŲF#CßëįÅTōŦ ›Ęڕā›™ųQô:ķúv­#ԖĀßŨJ›Ŧl‰Nĸ{ƒą×§ķByõ äßc<ėļOĶ'ōüëV[Rq&ĄrÎzˆÔđ*,qŸÜÂĒANņDŲŗ"M6wr$7Ũ?y!ūBŖūśËBĢŽ $ščå琺ėŖ ˇ w§ĖÂÍns L8âĢ>‡rą–Ÿp+ĻirN Vi0ĮũMK› 3™}6ū3Tõā‘LûvŠiË[ äWHd97­V•Ё•˛{QíųLØüO™ŨÛĮRĩ¯o{kzš‚Unø=k.îĘ @ČVvúVTúKÆÁíædn1ƒĶšĸüƒ–ĮnŽíNG`ĨqļúũíƒÔË80×ĶX]Å}–ŪA"JkPEŨ¤ŋZ˜!STd`f’ 9'Šy_Nj(’=}jDV zšŽ.[ŋ|ՈŠŽĐÅ#šĢ(;…\| įŽĻŠÜáģđ)°LĨ#…Š-Ĩ*`|ÕNážn ,ÁЏ=‹™Ēr°pä)gīȑ2ĮЍ§Ō’bĸ8åÜŋtƒŌļ’D#æ™&­agūļåú“úQÍ}…kGE˜´fA–Qųæ›qhņ ĨrQč}E\›ÅļqļaˇšByük&ķÅKp˛ĨĒ&ŪvąÎ*ŽY0ŋr=ĸ›ct#& \Î8ęJÎŊÔĻģ!Œ(„åÔk¨É:”lĪČOQ‹FsÔØÔœŌAPš'Ž:âą!@í’v‚8=ÅMsĢĨĖpGōĒÆzFMI–“üû‚9ƒŪ´HÉĻ9+‡9āƒÖ•mˇˇÍģxsVí-­ßHA§jŌŽÕK#S×NsL–Ę–p“÷j0;öĪĨtÖŦËLœ(ãšešŦ*Ō!P:qN–æ |‚čŖ×=)’ŨČŽĪŲ×ÍsēfûŖŠúÔ0DövėAi>iį=…,—0\ČŅŲĄšVLŒ:}*KĨK"ûA&á†<ąÔŅ`3.‚Į*p>ņ'Ö¸]bčÍtË(܀ãĐ­uÚŪ 4ø¤MŌ0ÂÆ9Žîhå}ĶFČė3ÁčiŽâšFDåNWĩFGИ"ŒĢn• g5Bņ¤Îhš2hsŠ Ĩ Š:PzjPxĻ“@ IÅ õŖ&ŽÔ“Ōœ4Îõ"Ši8Å'CŠ•€ÆsÍGõ 8¤&•ąëIڀGĨ•(#<Ō´RöÅ'Ō”ŠoĩĨâŒņƒ@9 QJZxÁŌ´›‰čiĘŲāĐ:SŒ¸8Í($t  RCSČé^áqn Dcķ0kÍÁöĢz}ëØŨ ņÜf†¯ ã Y’Ģ]é‹ %F cøw[Žę5à ‘Ü×VŒõŦZh¨Čäįŗ’6äU9ԘđN1]ŧ–‰*āÍc_id¨ŽtÂϚœäS”8ëŠĶŽ@҃Y—6¯ œŒbĨˇ›j„-ųŌhęĨ+čiÄįw^*ō°ÅcÆįvCZ(ųAŽĩ:l‹ŠÍ8/PECŪĻ_œæ™Ve!ēqM@{Šžtî*¸ltĻĩ2–ƒev¤P6ã1P뚏Žiĸ#Ā'špxĻ?§Ą¨ĸŧ ņĮ4ėĸŖ-Í?°æ•Џöá@„~Ŗ'­sH¤ČŠ 䞔g'3 4ØÔqMÁ"ޘÔ.xĒ2žD§q]†zqOv-'éME ÔŲOˌā ]Ԉcj6ŒīČ5!C€Ū´™!Æiq 9Ą‘väiįŊŠė\RdÜĢĀôĪJžëéQ’6āŌ°6FŲÆ*ŧ„gŒqRš=Ēģ°ä“M-L¤ĮŒŲĢ;đ•Z ōj×>yĻČEWby¨%bVqš‰Ļ2€ Ŗb“)ČūüTēmą¸žO— ŠEÉ­˙[-)™•iYho¤ja ŽƒËx“ÃQŪBĪ|ÓÅu92^E5ύâßsŦ¤ŗŖ‘HĮN*‘ë^'đäwP´ąĻÛÖŧēîÖKYÚ'í]—1›V*÷Ŗ>´¤R“LB‚ĸšrO¸ ŠLIN šB(ŖŠp>Ôb“ēPiܚn=čր1HF Í.sÉ ÁŖŋŸņ“@ F4”ÍĐŽr“@Ĩ>ÔõĸŠ(éK֒Žô~4fƒŠ(3ÅbŽÔQž(ŖRŌ -ⓎôQE”´†‚hŽk:ëNjû€FjĘœ–3—ÔcĀb+&mĻ&CÉÎk~ú2ĀŽâ°Ĩ…„āƒĮ|ÖOsH›šXííäCÆ<ÕĨŸn¤\6uĒÉäi@(Ûķ†ڝ82,rŖ\‚^•I‰­M›˜Vķæ#-ŒŠÉ1<#iëž*Ėwĸ pÍÆÉ5g÷71íeįǜô ›2‚ŧEUšBë´üC­[xÕWæ<ū•Ÿ,Ģģ 9íLä˜Įâ9ĮĄąß构Ũë)x“Ė|ņÚˇáKlŽÆ2;Ņæ2;ɨDúõˆ›{ļI8§ŧM‰ŖNA>õL×A2 §^ÜШc<†āvéYzŧ.āÎX†äG ŖHĮFņŧęˆ,rhšIufZGæˇ+ļ1Á=2jƟšä0ĢĀĨAŠ;´Š)”Œåœ+cJE‚ ŦæėŽšæ‘fr!„‘Ô Â)æīrÜį?…nÎĻ˛gˇhœ°ƒÔV;l‚q؀ЕÃJCŒ2} ¨­ŲŲ!CږqåŽä ­ą„⤈n’RSwsV#™eŒDād §1ˆ/Îŧœ`Õ)-Îķ†ųs•'¨ö­V§#V%xFF:ŒķUØĪ€ĮžyČŖÍ¸Ž"!°Á‡j|ŽĀŖŒAî)؛˛Å¸2[l`Kg§Ĩ=UŪ/wĖŖ‚{Õ@Îø9WĪéNÜû€l‡cR3ÃJŠ'†ŖļT{]Aå ā+¯j˛â!•Ļ0ÜņFëĻ}Č&@ūt|ƌ™!ÔíYŖˆ;Ēw9?(Õn ŋŋC‘×+ŽkZ8ËļdrŪ –EŽDōD GßžMKf‹R„zÄExFŨÛ*ÄZ„2íS2ÆIĮÍK.‹ly)ąĮ9ĩRmä(ue`OB+7(šÆ=ŽŠÜ!EÛ*8öj´Ē3€šŽ[I`bZ\wSV šh4šĨŽęap$ €“ĀīÖĄÁ=™Wks˛qÆÜR*‚¸ŽIuũJŖg–)KÕpp=ëAõųm#sbs"î[gz9s#|.܎8éOW. ‚šfņhgbmeU\ÎG|ÖĩžądËûŲ žc•J°üčp•Ž4îi o0ˆvk4jÚt*]ī#ÛęyŠ#ņ“­{ˇgŽ*,ŲfĖb8É) Š2IíL˛‚-m$žÔd’×EˆáĪųüŋ–eŖCâ]íŖŧEĶí—ĖēuløWĶÜūUvęäęˇJ‰ˆtëqļW…ö­`”udŪė–ææMQVYéq G šĻj´—pÛF"íœTwwĘbFpŖ­fÎzÔJw)Gšiæi į¯SK†lTüâS╃gĩ(ŲąŊŽīJđŗŨiÂy&ō˃(ģrqīé\ŪŖYO$-œŖBÖŪã7´°Kve(¸FŨŒzë\ÖŠĒÅspķĪ"†v$Šë’‡)Í>}v+HØåŽ^j´˛îæĢĪĢÚ …˃¨ž­’ØŒū"šyYЍ#&˟­V•Ų˜’k:Mi#ĐPgæŨŌ¨ŽÅ āpE*N6œäôôBmFbÍŧ{ō1–JY™‰ų"Q’MR‹Ís{ )gPyĒSę‚Ią„ēdüī^{ÔÆ-mÖMJS$į”ĩŒã„˙ŸzŦXŪ"´ŗĒ*ā, ¸ O•uŽ%™°ōÉ19ĘEŠéŒĶ °y•XÆ8<ãëWS0 &ŪSüÕc‚1KšÛ) éPđHÎ;“š ¤Q¸ 1ŽTŪiNrH÷¨'‘¸Œķš›žĸq3īDš ŦŠXtÆ*{ CF°Č¨äöÍTÔ[2Į’'"™įoŨ9qõ­âŽŽižÆ”Vb^eD|õĘՙŧ1§IH§ĘŽÜTá–đ…D![ą5ˇ§ØI4¨÷R™sƒĐV–2rhį$ĐīíûK’Ãû‡Š¨ŖÕ¯­˙é’8ŠŧU¨2]ļFĀå #Ō“HÕSY?bžˆ<ÛruÅ{Žé­K֗:ŨÜ@ũ¤Î ˆĪUäŌ$š“tėHI=Ģ-߅Ž|øĸ7{d2u)î+Š´ŋĩŊŽ9ā!Ք0įo֚b”mązÂÎ }ënŊ öŦ}BQaģPēq$Ŧ Gį~ûVˇŗ€\;…ÉĪé^Ŧë’O9KxäËdsÁė*’fz•uéŽf’ö𨑉ōĐs…í\ô˛$,ĮŠŠnKų˜ąį9ĒŦG­1†yëNci p9ĨqŽ(ÜķÅôcŊ gåëH9Ļ’{RŠqŠNŪ´v â“ĩ'ZQš:â”9„ŒŅÁhä–nE4‘ØS‡4Ã@ øQŸjQ׊BM旃IŒQŒķ@ ĀPŅ͊Q€(:EŽÔŊNhČ 4ÜŌžNih3ŽŨič æ™ÛĨ>2}(F4ÁZyįƒL#šwԁ@&—$ šĶŅõGĶ|šįÚŊkGÕōŨ7ë^%Áé[ū×$°œDĔ'ëIĢĄ×™ÅNȲ/JįtŨZ;˜ÔĢ[Ė0kŠLĄŖ¤ņœ/5ĖŨi˛ÛHp§ßĢāŠ†æŌ)Ԃĸ’lÖičpQß úUØ$ƒWots—ŒuôĒIFpTŌi…*é­K‘?$VQûUhŒ•&¤ƒÍI¯5ÉĪÍÅW–"š TĘĮԀŠuĩ)+qČ)H Š&„šEFčER1h­)!ąŠLåF*Ė‘†\Õ\sŠ: aęà T§œbĄÁŽjD8"‘i–qR:æĸŨŠMĮ4™+LPįĒœR:PUĮųŸ. @äÅ#œTr¸™HT““íLvËpzĶaŠN3šWš(`M?zŖ$敛 Bę<ņJIÎFŧ÷ lGāĢ#‘Á5$’jĢļNsڑ ؉Ģã{`T„œ`÷§Å$})™IÜ|hT…š‘ÎF éA#¨4ÅÉ<ö AŽ*7.z™ĀūUJw8Įō d_}øøŽŗLA˛^k›´ˆŊʏCÍtŅ € ¤Žz˛čh)ČéNcņĒņžjeæ„aaŌF˛&1œ× ⯠­Â´Ņ§Cž•Ū eÄ $di§gt­OžîmŪŪRŽ" õ&ŊŞ5Ä+Į^•į˛FUČ# ­âîŽfՈŠsëA”˜žôÄŽ”Ž´یq@ }qIéAĮĨĮ&€ ¤ö¤ÛN8t–ĶĨ ôÍ<¨4Đž”Rįĩ'CŠ'8 âŽØ¤éJ1ŠŊ(=Š1íFOjúˆQH)hĸŒRP@Ĩ¤ ­RĐQÍ(éEQIKš”´f AÅ-5ZFõNv!yĢmTîzT°0oåÚ %bŋJŋ~¤į)&O$Vl¨—'l2F0T uŠb’267˰qšŦJ_¨Bîy Č<Œ`ŌšI\ŋpĻVm dŽ*kįŽrOjcˆ<‚3ôĻFIĀŠ•A“>ՃgLQ Đ!áûUôKyÆ ãœÖÁLŠ1Ž NÃąĘ\xxėœT.ĄģtČU =ë¸ žA%˛IÁJlN)îŽOOēŠIž,†RW<Ž•šŦøÎ=zXVæÎÖ3mÜK€ôš§ËŖÄįrŽĻiŠŖA¸y‰ÉiŨė ŨĖØŪÂf/˛-š€ ›@Ū[C$į5ÕC X4|¸Û#VąŸGĶĨņE´g†if##¤gwbZHĄvsJŅÅhrĨŒG:t­÷¸ŽvGœU-tËa$ŌŲڈĸw$S.smëQ9_CHĨb™䟩§4¤ŽüqPîBK3ĐÔR^G1 XšÎÅ6Z1ķ†MI#]ą€ĖkãQ2 •QÜʛY0ąŽTŒg¤bDĨcĢ73JÄØ;<ŸZ­<öPȆ`\ŗc;Ģ–û^Ŗ(ķ÷`)É­ Üé×^)ŗˇņävúqßæHä(ܐ "ˇŒĐÉĪąąöŊ<ÆYAێõĒõq6~]ØÍb]ŧņ?fēN2lÖc枪ŒīV7QdJV;HoRĘŨ” ŗrAƒwûŲ‰ųē'aī\Ũŋ‰Bē™āqĪ5šˇ§ĩ¯› üāe‘ņœúSåkĄ)Ļ_%âhã†#$Ō‘GË1ôŦļt\ƌŗëN’Le`_îņīôĢé^đúj—n§]Ô1BÃÚ2=;zûũ+–˛ÔäēÔ#˛ąŠKËéÉ;UK3°žœôūUIv'KYŖũė¤É$‡&B2IĨ’ØHāÁ#ˇ‘y­ŨÛĘmåĸel2¸Á[ûvf9,W°>Ô8;ęæĢÂČ~NÔß4ąÛ"m#žĩœ59T"„đ@ÍNš…ŧŒĘXné†ÍCˆÔŅm‰@;™zõæĸsŗrŠČ<õÍViZ&ûäĄãžqOˆ†-î*yzŽæuæį™~˜ĒĐNc&&ķWnÆÉÆWŋ<Ö{ië0WY™OJŪ;ŗÜŨĶĨ_´  HĪ­ä珏ÜņŧtĮÖ¸Č,îĄ|ĩČuĮJØ_\YÚĨ‚˜Ō7Čir8õĒÜÍĻbøŠ†éSvö’CLēk]VŪåIRŦ}Ēęé"îy„‘ˇĖ9sԞ¡ēŌĻŌ^/ĩ`ķž†Ž.Ä´zĨÄŨiÂî JâTqę+XfŌ5E.<ģ ļ$ãC]‡<[ŖEŠéåEdÚA?Z¯}ŽĢcsģų¨Ĩž'œ~5Fi ÚĖŽūÖÎŖącØį$įųWŦŨ›Ë\ÔåTÖ­_jĪ%˛ŲŨY"]‡ŠÉM+Q瞖ú䴄…yÕrŠéš¯S)hfŧŒ['œÔgqR2îz`ST RW‘HNã’zŌˇŠhŧæŒķE&?*w{Đ)=¨Ų)=é0Aâ€h4š4cĨ9é@sJúRsK’z1AÉҚqⓞ´~4g=ŠAâŒzQ͚Rs@€i2}h ö¤‘Ō—­(ö #ÜSŊÔÂ>lT¨éM w Š— įŠiãšL8Ĩ<ņH(úQĶŪ—ięi=č@įš äz#Šv2žôĐhzÜļîĒIĀ÷¯EĶ5”•GÍ^51°"ē]#SeŌ“WėV× āÕÕ!ēWĨꛀËWMmvx5“ŠLžŅŠŖqĨG($ Ŋ Œf¤<ô¨4ŒŽ}Ŧ^ĀâŖ(GŪŅ2g‚*ŧļ¨ũąAŅŦÄŠËW%˛)÷yĒŦĨ[TØčSL ëÍW‘0w ”‚ir“F˜eÅV–EY ÆütĨ‡j‚×E%ãŠUāõĸAĩŗM,4´$ÉSՁ¨ƒƒ×Š\€x ¤Į†ÁëKæņPŗãšEPRdå5]ōpiÛķÆi„÷ĪļÄ s×(j"øéMYė“Å ’õSQ“‘Í!˜v¨^U<š¤Äۀ4֗ŪĢ<Āsšãô§b\ô'yN95KÅ8BĮ–īR…` Qb^¤J„œš—#ĩqŒSXČqų¸žØÁے)Äw4#“ž•IÎæĢļsÅB‹’M}‹úD{ĻÜG wŧ@Íei)€ÍøVŽN:UŖ’Ŗ÷‚6*qW#lŠĸAŨœÔđČ3ƒAŧĶÔņƒQŠČĨ'Ԑˆní’hĘ0Zōīøu ™§…N?zÎ V~Ŗb—P4n2ĻĨĘî&Žx)SƒLĩtž%Đä°ēfUų í\á\vŽ„îŽfâ“Ŋ!ŌĐ~šõ”„ЁĨ&˜:RŠqaŒSr{PztŖ4Z旯ĨÃĮz§0äRb€ 4”õ- Ĩæ€ô)1@ HE-%g֎´P0”Ŋč(ĸŠ))h4 J hR0´“@ļ1Tî0EZ—ÅRįŠC2î" zbŗn"ōЕęMmȕJâ=übŗhhįä‘ĪķéUe,ŸxOjÖ¸˛9Ü8ŦÉL‘7#rƒĐúVlÖ%pÎŲpxôĨ†æHH.Ŧ=qRÄa>FÎ? šj~Ņ"ƅ=ū”!—í.ŽA9]šČëV⁝AcÆy5•ōĨ>lbˇaW’ČŒŒŒį*Ķ3ftČc˜…bØ8Ã:¨į<Ô× ëœœdātŦÖ¸Y#t`wg’i‰Mzb‘ۏĩlˁ`0y†ŗ]ĄFÆō*{YÔĢ#r#Ū‚‹6ņbėČ•$`Õmb)ãÔŧŌĄ×?6OQVėetR›FîĒ ĪĢŦééqkĨ€YĐmaŲ‡Ŋ> Îy’ŨŠJ-?xčz~ŲÚ0‚=yÔņŨÚšWp¸`Wgq^‹¤8šĩŒÕEeY¸7¸ Ė“Ž*ĨĘnSZ%v\ę gܞMbļ=ƒän†ŗ'ēØų'ĄÆkn q73éÍ2īL„ÆĘËÉSOS Ņš”ÛdˇŽhÉ; ­9fyrŲUv¤A%¤Ī āŖ`ÔĒĸ6![kuēz‹L¤ ŧmƒę;•Ī›ÃųTqÛÅ,žc)‰ĀxúS¤yT’˛+ëŒôĻfØ×•ã8F#¨Íāu+)ųŗÁNl2D÷Rj´öÃ̃9â„Åkk͟(!˜ô ô¤†IĨ¸ +ĸBoŪ5ÚDė–$rqÅXHāpƒ¯īMŅ ~ėcÆsÚŽ[DŲÆ6OĨ2ã.¨€î<ļ{ZͰˇ&fę̀íHĨą#Šš™×áLOšÁô­ˇ+\Ķ‘VĒ‚9ĩŅ”ĸI œg5ø\ĩĘ<’3&rĘŖšëãˇ(Ę[öͰō“‘ģžõrĘÂk;Åšr á@ũkŠŧG€ īæŗd“p ę=…m SOV‰'Ôäž ‰\úV5Ķ™g_>>Üív'Á ę2j)IdąÉĪŌĨÉÜĩN1čQˆėÎzˇ ųe<‘–aķˇ\zR!‹#$tĢÖŅĢą*R:uŠeX„Ú§Ū9īŠ[|ĢmÅ^[g†pŲĀî3R„’ĀņЁωŖBb9ëU_ŗßDz2Ļh–ä$7ÔzS4ų[[™BņíUfe=™Ÿ éO¤íœĘę“8T2ĢķĀú×Cg§Y@€GiĀĮÜ‹á˙9lŒ‡ũSĖįéÍtą) #ŸZsræ*/BĘE‚@ĮŌĢMå;NjV˙R*´ Ģn$‘ĶƒRĘäG?ĢÂĢnÄ}IŽ~[+y‰y⠁ôŽ“YâŲØũÚĮˇĨ`s•qÁôlj”ô9ãŖGu3l&ü ú}ksÁēž0ÎĢsÛÚ@fažū{uõĢąiöŌŠ•Yd •89ĒzlĻ+]NhÛ\L FÎx^ĩŦeĨ‰kĒ*ø—[›_ÖŽ/fb0pˆ:íY:6ą}Ąëpjšs¸ƒ%w&åÁĄŽ’+cœ&æ#9âŦ. ÄōF@$lqˇ‚ vz#9[VŊ×ĩ9/o{‰NXĸíúTf4 .vžœ×Búŧr(>“UƓrɓœõã4ũĸnäēMŲ-]6ÚØXĸ\…`īÖšRĘ”´$žOáZîاå>õ Ų‘&1לâ‡4 •ē˜0ß_%ĪƒžkRÎdeÁqŽ Ôwz|LĀ‚&–ŌÅ"|’j[M ]0ž*%MŊXāãŌŠĢ¨mŦ~SZi—1øÖTˆÁļį%jŖkÍusvbb'#ŒŖ4ÛĀ˜×<ÔņČ­uåJ…Ôs´T#žņ„JU'nzZŖWRI p\U¸î'Ž)]Ũ2–ÎĩVy'ßĨhh°›jÎ ũéĮŌŠjÉčz>ŸđîÖkî!Ô%†Mš둚ŽÚ§\,E÷0%I5Ū[=4’p3ŸÂ¸8ŽVōHf÷ ŌšÜŸ3] iŨ­LÚØĩä“ĖĘB˜ŅWĪSOđ˙‰ĸŅl§ĶÚĮíz}Ão–ûFūĮßéĶŊ?Æ+åڋž0¤ ¯^ĩÆĻ¤#íģÛĨRĐŨēšp[JIx *rČŖœdôĪz˸ą‰mŪX§RTŒŖpØöĢrë1Ė̘Jí9¨nu y-œšOp1V“DÉÅŖ+†”œœâ“nFjĖ„>ÔqŠãŠ\`t Q‘Ú€ hŽ´iIIëÍĨįԌQŽ(:ņI֔ûRœĐį¸ĨŠOa@Č §4j tŖQíKŠN§”v¤īÍ/)ÛG^”(s– š¨ĨEĪ&€p:Ō“Ú‚9uę(ŧš9—éA dšLņHéJ 9J\´Ū;ŽiØ4ŊŠŅHŅHOJháM Īs@^—¨’ŗĪzí4ŨL0šō[{†‚@A8î3]V—¨‰04š¸ĨkvšĶŽ`GZáôũ@cÖũĩč#­fâ4΁XqLÕnAjÚL CEŠđnǞŲĢsŠĐ ž”ģ3ڑjG?=›¯AÅgLd­uĪîÕFâĀ:Ÿ–‘Ŧjč‘dīȧ€­ŌŦĪĨ˛Æ8džĸę9ĸŨŖQh{ÔoiÜTŠ6Š•\74ÍtfsZČ=ę&Š@yĪŗíŠk"ž QrLc¸AĻãZĪ 1č*ĩSچ+389æ3"Žũ‘(HMКĪÎ)‰ Đ6Šģ8¤0¨ūAVfv×n§ fnXņW‚xī/<ŅrlTKE<š“ėā(Ģ' ¸ǏÁ#­bˇ–`ÔmČĢ3(#­AŗšDG4ô†OJqLôŠ\P!}*[æÆjË pjŗ˜“Ž)Ö ”ƒÅ4ām§–ĨÛšÔ hV6ôÔ l9=ęîڊŅ6[ öĢ­RՌĮ4ĐJžj^ F€-FųjPEQČéVĐädR`hpiƒ5"âūŊŖÅhá—-Ž8¯!Õ4÷°ē1°ãN†K^3Z^^ 5R…48Åc]Ā2r+­šËŌąom>ÕCLæ]n8=hŗ&Öč88#NŧBõāĶ Ũ :ã?JÉčl‹QL]Āu¤ÖŊ…Ú2Ę ’`ZgØĮ x5§&ÜąÆryĢL‰"ĶÎ!˜1\īY× “´ŽŠ9 {ÔˇW Ģ3f>ĞÕUäØÛ‚áŨŗTČCmž{BÁļēįõ"ĄBë“ĩŗÆOP*õ¤+? ×=j;¸ãiY ǧ*=hę;>ĸ¤ÆFIaŖ ••Ôi’¤ö’i÷/¤´g=3Ū¸2ÅnS!s´ˇ×Ĩlh×ÎŌyrdLŸ)'ŠĮCMėTuĐ[čLWfŪRIÎQˆí]7‡™…ēų#ŠÂÖ¤ķ-„åäl6;ĩá̧ÕÆAíQ5xÜčÃû˛ÔčĪ=e]eĄĮŊiO3O6@âŠŪŽ„šÃcĶ‹e÷@8Í[šÁ„9ŌYEš#ĩ ˜Ž)#9ęÎzę!#Ęę@q؊IUwĀ$7n*Û*I; 8$dqéU'…ą„ûĮĻGZŅ•7Ô§&ˇ$œŒfŖŨĢ~îQšyÃ/jŊ9xÆz‘ŠmÕĒ*ä1ÉôÎiÜÍÅ_BÜģ™0yãŠEEũûn=8§įKpĘšŒTGNf“$Œšd¸Ž ˛PˇN‚Ŧ$A[Î!~AĀíšHâdÂD¤ķŽâ­6ŲĘ9Œâ­ÉXŽÖÔGēR>fä’kVŨ™"˅’Äz §pá6"0ÚŖsqßŌ™Īy0;ˆāâ†Đ­sczŦ?;ÖM´§1Ī,ō€˛āB‘P…Ų¸+)ģҍ§+R)ÛŪĒĀCŽTā÷Šŋ"°:&ĪëHqŠ` ¨>é āt¤ĐĮnäR'm4—#ko#ĐĘäœãSE(IįĒG aÉ&§R"3B@kŖ ×9Ž2áĀŊŋŒJŒuąJ¯U7bš]MY5yw Q,yäu ֔ū#9#ŖķééČ$¯ĨaēŖHxÍhÚʏĨ)KcĒ ’7$íRÖ甑Ÿ,(_iéĄBp*ķB¤dœĩDad”=hH,Wh›†§ÃI7…ävíS•ī 5H‘žĒĘŲ4XĢč[I"‘ą"uúT3ųaYvtį4Ī@`T{š­<íŗ¯šÍRv#–åK…Aœ1ØwĒīķ“VĨ;šĒĖĨŗƒ‚i\ŌÅV`ąäŒ1>ŊĒ›ŋ`IÁĪĩ\’<œN=ED`@Āt$zU&+Ąi Ę´mK, {TQ[ ÷÷ĢqF[+°đx"†ŌW.‰ƒcīO9īW@ģ™@P2j K|ɂÂŖÖæöÅœ°įGVD—*1î5 {F+A/”­(ķ°ëŖš6ļĶ5ƒ“hŠX9ĀÎ_jįŦÕ]!„ÂĻVo0œd¨÷5ĢŦš8´ˆ€ķ°‰WĻ{œõĢwąĖįÍ ß HéáˇyįĆ`"„¯,§œæēX‚ņJį4ģi­Õa}Ā(č{ŪR@ŠĘŖÔڔ[Ô´åW–ÅIāqRų™NqU$’xŦ›7ąŸŠÄŪDā‚ĻšŲ­ ø^\+,ā3 ôąŠéޞQĢ“ēMąĖ€˛ŽN@į#­kMœõâírՍĩž‘á}2ū+Ā~Û ‰b89WÛ¨Čü géLÆÆØ—fyIĮSšÂģ(›âˇ.`Qæ*ščOŪĮ˙Z´ô؊Yؔ&‘ŽœÖÍis8ļŲ°[qËdu#R .RšûÂĄ_2BIÜqQ)é†ëÅetn‹ŒĶ #žœwYÉnHé֖+€Ŧ 'ŊMū°–s…'ˇJLhŠ0N9§ŧ@Žŋ­;jĄÆA÷ķuâĸíĸœ(=*ŝ¸3oÜāÆhÆH5’•5Oû>XŽ$WY"Ž˜Ēí'…ĻR¨ŅĖ´nE7=ķ],ļ‰p„ÃV%֛Ū=Ķ(ĮĨ-Of™“wĨ‰ģ#]ĩI’MEŠ”VŽ!i .3NÆGîjĖ-‘Š…—¨ŠˇZC.Ž1O°¨ƒdSįéHDĖ §s‘HāŒUŲĄÆEG‘øˇE6ˇd_”ú äÁæŊģ[ĶöÕЏ›dWęvmgxņ•#ŒŠÚœŽŦg(ÛS;ž(ėiqIŠĐ¸ŖÁĨĮ@)ĀëJ*LPÅ/֌s֊QÍŌj]´§Í&sŌ”Š@1Í}>9Ĩ¤Ĩ ’–ŒĐ֒–“­ŖĨ%´”Q@hĸŠ sK@ EP0į4) !éÅ%)ëGjBŒķLaÅH)ds@Ęםw#ĨjˇV|K\Ō@Ė ¨Œ3Ŧ qŸJ†ų?w“ŽqüëFę6&Nk•–M¤•qÜŌ.Į-EÔ˛Gķ('G#ëQ˨#„“ØĶ^W…Ã8'=HĄÂßFËlrËŪ­ęc{ ŠYHĸUëƒJ.‘7G_˜rØĨ]1‘ŅeœŋīĢ>]ŧ ™‚•Ét++H#;Ž@5R#1Ú§8ė)Âв)ĘŖ’Oz“2 1ę)ëq+cįÎ=¸Ļš%§ĐíâRKŒ0įĒū\D Ĩ\—t¸’Oֈ!ÜwÁ4s QîW0‡Ú6cnŌÜ 9Jš‘Č?…XDHãbpéĪRĩƈLQIīéíXšÔM4.ĘI*§âļf,ĒIĒĸšˇ`G$ņš¸ngSc3ÃļŗÅ i÷;ãĪáNÔ/c}y U.-Ķ—ĻķÔįüŠØ.š]ē*Ī’0Fwž;øü̜Ņãyįy˜ąg9bÜäÖÜŨLT.ô:K5,K19nMiF0sÅAoTį­XČÆ+žNįTcd#đ2jŖ>I-×ÚŦ1,¨š5'#Š“TŠ“¯š]VîųÛŊO^•×KœÖ6ŖndŒÔÂĒÎæU!tsŪĶa—\´ˇŊļ™ņ^yĘ7—õõĒÖVīĨ̆ßn^w4í“Đd×EÛLäK•›Ē–9ü Ļ´` ßÖ­ 6 ž´ã ¤āg5ÍŅSllC…*=4įhCa]ˆxâĨō|ã“CÄ3ŒsIę1ĄceÆėSŖ(9nƅĩV'' ũ*TąR>S‚:cĨb”ōÆĮÔÆ—å=TО‹ ‡ôĻĪ;Hčyį֋“$R•B~ôøŽĩ‡,†æA•b7`õŋ>ZÚNÁGW9hN'b 2qŠŪžĮ%MÆŨÉ.ąŦÛÛ|Û#SŸ¸ŖéRkˇfęîAŊ°ŽqĶhÅW†Dļą–ėąķf"ô÷9ŦĐpŦ2yîiŅÉšĒJEô>õrĒœšģ#5mŸš×€ä ġ<ŠØ„ė„ąŠe"vḿڕ°ĢŽõ ''&œíē•Šš¸-Š• ã˜aÉÍ7c/N•-\-ĸ.ėŠYcV¨5]”ķSų™ZIå9l T §.‹giÅkuŖoĩU˜ų™ÍĪĄH9Lō;VtšeÄm÷JísëA\r=zš*ŌGdíKCH×îsØ-R$`vŠd€ÂøaŠnîÔŦo˚ ™FėŌ•idēSYN1A}ŲˇRČr'ķQĘ܊Bļĸ*îÉ9Î)Ō&#Í63¸‘R̀ Š[ĩ4’8Įjs6NE7 ŠC탴ˇlJ¨Ŧë™ @šo8d•Q]NzīĄŠš˜JŗVVîjUsÜÕö4‚¤ ;U%n:ÔĘūôŽ‚2*<`Ķ•ÁīG“`J†Ÿž*HĪZx;†(¸ŦJ­ëR#gŒÕcR#SĶFtŽÆz'™Ú"NG'č„åxŦëûušãaF(NÎāÕŅā΁X‚1ƒLaŽkg_ĶÚĘųЌ.xŦ†^kĒ÷1# fœi:´C@ž•z؈ŽBWĸü¤”D‰~žTéåL§ öđĨašū ŋ?e6ÄįĘn¨Žžu ‡Ū¸-9_NŋFP“ĩĀŽî2CœŽ•…HęzxyķCĐ4Æ#+ŽøŠŽ ÎsUa&ÂÆyëV§Ë’HŦ¯cušUÆy“}j Ą×†ÅkÁÁ¨î"ŪšĨRfS‰¸Ŗ”qÔuĮXÛ\G+5+ÉŠw÷GZ‹q׍;Ōąģ‘VƒZ‡ƒÂԈž´ÖÅFœJŊ Šm8;†Ē;ąÂõÍ<$’iĄÚčåĩKy4kÍÆ"”î\t¸­Ŗ ģŒMĮ=@õ§kGS°hØūņ~d>†šũũŖ/m9ĈpAāÕüQ!+3gc)āãéRĸr9=iģ”œƒšPôāT¤X1Û'qÍ#[™´ŽOĩY€€¯&šĘ@œšiBôôĒĻĮ 8­„ô¯Z 8ÆsEƒbļč ¨Dá’9éZ‚ ƒĀâ•CGãwÜQĘ+™QĀYNáÍ\†Ø `ōFEI;xÉĢqÛ㌃ÜFŲ[ĘP§zƒĩąÔRŧLā ÷ÅY`8eņ‚qÁĻĮōŽū ē´ėO™Fō%l(ãŽĩ^ÚĐ#2´›@Û…EĢōČėûΧjĖģŨî´ļ|ûŲņŸ@{âŠ$Œ›rŅ.¯~Ũp|Ĩo%FČUŊ;ąôĪĨX°´/L~b 5U Ģ^͜š‡#XÅDU,O(ôÅ589Å=˜g sRhÃÁĪæ)3ƒNfņëJĀnęh.Åg”ƒÚ¨ĪČéŽõŖ0āgVExŪ‚Z0Ë}Žé—Ž9‡ŊrڝĒéZĸŧo˜Ž2ëß5ØŪD{W;ĒĀ×:c€§Ė€îRkX=Nj‘[›đš‚9ČeT‹(Ú??jČđ­čšÕ­É%ä:ƒüëĨXIPä•2VatPû!#<ņ“PĩšŨĀ>ųí[ģųÛˇˇՉ0˰ę}E+Tdų ¸, ųĶ€hÜō6֌ą 6€ŲÆĨU–&NPô-jC€G=;T3¯LÂŦƒŒTSsÎ;RDHËģĘŲÜ€.kšķDvŦrCĮQ]F ƒė˛‚?„æšæVSÛŒWE%ĄĮWrÜĸVES˜Ķ!xâĢī%¸ ą3*Š;fĨĶm>Õr#įh˜ôĀúÖæ:˙ØĒ\¤ŦŋŊ—„ãjޤ˙…w^ą˙„ƒÆ­:¨Ō´aŊž@6´€Ī§_šËrEÕâŖÛö{u ĀúŸ­z'‡$ĩĐô‘Ų-ŧyˇ ×íŖûØãžƒTŋˆsĻņ.Ēée‚LĢsr7Ją¯ĖŠéíéžŊkį˙ø‚W^k%?čÖ̞29Ékĩņ—ˆfĩ‚Y]ÕooA%Aæ4j›ā’ÆC’‡+“ÔW›€:ãŠĶĐuĶu{yÃí4nŦK]OeŋļY"'Ö&9pxæē¨ĀžŅ_9ĘæšŨJß˓vqY'Đ{ęZ€îšĐО,Ÿv5¯¤3BØ~đ ֔„‰TVmĸ‚ĀÕ̇ˁiXe¸Ž#úԊ2jų*aS+`ÔąĸLQŠPÔáŒR(`ô (Аōx M¨™æĻ tĄUāR qVĸ+ˆđ`fĄeÛÅXyIéL#pÍ X$Süë’(ĀĨ>3ž*F`ęēhu.ƒ‘\´ŠČėŦ0AÅz<‘NFAŽW]Ōüļķ”q׊^FÔ§fsø œÔLųlôŠq–'P偐9ÁÅSkÆvpFÖfčZiljWp9œę4;ŋ6Ü+YNĶ\4ˇom :œ9Ī5oÃÄ˙Ú­ČdVĩ3WGF|˛;ÛĨlŦĢÕ•Z…Öâ1‚2x¨Đ‰#ĮzŽčöĪŊ3´õČŅé玒#’)‘8+´Ÿjē'D7ÆŗnŽÆŨ9E’å}ۈœd§CéU$˜…ËqÁ5~;—ĻĄÃ&p‚ hŸc)D ˛Čāĸ99æœ ||Øü:[UÜ$Fä•< ˛&mÃĩ'܆ŠsO”œDj6ėŪŦÜ žœb›nŸŧsÅ+‚A AdųøãŊ# ŊV@ËĪ5–7dŽ”7 ’Ôb’@ŠQAc‘iqČÅ9_˜jË$8RíMÃ€RČ˞´ĐšË~B†4€€`tĻĢ0c‘O❠Ōĸ‚"“ܤ9ž•i#h¨=*XÁÍ"…§îĀ4Ėf” öé@ĐņJÎ1MÉōôüEl¤ĀÁŦ[ÃĻi~ĶfŪTęK`p ĒvzːOökøĖ2â#Õ¤žÄ^Įa ÜԂ\zVuĨâ8܎ úÖͰĻFséM!š ĄŗōgÆF Î1ÔU‚2rØĮZ‰ĻËgŌ¨I܍ĸROôô¨„D1Æ8âĨKd“O2ļÆ0(ėEåîFŪyĪčã%vđ;SÚâĐ|0{š§-úžZE+äY1¤98Ė õėQ’Pī'’ˡn^CŅ*ļĄĒE ĩšWa•éŽŗę{U0—ģVāˆ-T†Hc?|˙yōė–äĢČd÷OrĻŪ˞ÂĮN‡ ­ [tŠ ŖąG… VKŽÃ§Ĩg)v6О°Ą@íPĘüjemëœsPɓ€j "$ŽE=H#ž´ĖÎiTØįš &ÛMrHøS“=Ϟ’pxĻ5k‘9ĮoÆĸ ŌŦ°%pãĻM@⃊s:éF#ķŦ9Đ%Čāmq‚=kĄ¸˙huëX×jĒCēÕ#ŖœhĨĐu•œnō$<{ī,ĻImP†ŪĨr¸9öŦÛŨ2=CO10ĮRzŠÅĐu'Ō¯?˛¯ŽĀNcœ į§5NuĄØ` Ĩ ‡8ÖÂ'˅Ũ+ŽŪŖ5§symĻéÍ{w [h~Xãī+uGķ=ǃÍiĻØÉus [xĮ'v ­č?Ší\6¯­\ëúí´’¯•gܖøáˇŌĸÜĖÖ)AjTņĢ&Ŗ~×3]ÉĀ…_OūŊd´ĒōŠ‘OLøRęN Û`‚N*)FÚG#Ū´JÆR““!a9ŪOáP1ŽŪ”H6ąôƒé+6THqŽ´c<ŅÔb€éFHâ“´ H¤sF  EŠ>”c9Ŗđ Š.;ŅøRpրx4™9§)0!Ŗ  į4„ĐŠįƒ@âŒæ€œ:R .qRłš5lĶ‘ģPįĮJ´ârš­0įĨ!Đ}…įĨúš9§õόÔ ö I“Ö”sJqˇ šp(īÅ)éÁ 8÷…Æ)hČĮZU'°ĨÁÎsHHŠ^ø õĨRgšQÎ(æœ2¸8üúRdúSĪÁ bđN¨/ôHŅÛ2F6ˇÍž•T‡rŠķßęoŦ=ĢÛ*äzôû´JÎjĖKąĪX’& ž†ēxÅsņ.đzčcRҌT˛{$ųŠsļûĸO^•&–ČmIoŧWFg&úbčM=IëMˆjTLpj$ĘBŠ”f›ˇžÅMÆ) $SąF2iÜ,HŖpI:õ§¨*)Ž76H­T´€°§)ųiyŠŠ” ÆE %yŠ”2ņR0ķ}j–ŖšļeUÉĢJ¤š”(Qś𿎖ōÛČęãÕ2@+Đ5m).ābߏJāī-ÚŌFž¸ĒßSŽKčĘōŽŧ `#¨e˜ąãŪŖķ˛O5J,3Žp WiHČĻ4ŗUä—Ō°™+HqœÖmÜí+mŠ’I Œ ŒĶ =jČÎOĄ­áVÛy$e‡8ŽöČįšaÕ˙xWŖÛ‘僎ÕMõ9f­"pŽqYøg™›ĩXš^1š„ēô(%!áFܜb dWn)YËp:Sã!Wš–†Fm†r)‚ͤnGŽEHÜUđ‰Aäži ˛ [h Œ;€(šņH)üdžą,Ļhĸ‰°ŖībĻŗƒŒōiĩmHŋBŋ“#’HäŌ$5¨ z 'Ĩ-@ËɌb­YĢ[)ČāķWÂ/Ĩ1ĀÆ1@ˆå†+˜ČčH¯ņæŠtûö¸ BąæŊKG #ĄŦ?éąßčO.ߙG5tŨ¤ģG‚rF)¤3SĘĨõ" 9ĮJčfc}Í7õĨįŌ{Ō0AĨéÍ)Ō“ ęhĨš¤Ĩ” (¤ ÷Å%-%})i9 Š -%QEQA Ōb–’€ôQĐQ@ZcqOϚečŲ@ųJō*°Tk~ Æ9­Š­c™ €(ĮĩVÚáo%ÔēžqéG2Ų’…Ë! Āu5lˆÄ@‚yŠb‡É‘ĘĮ…'ĨEuåŨ9å‡LPĮrŖYbWĻFEM+8XâAŒO¸¨C-Ŧ@GÉ•ôĒ×w÷™ HĘâ„&><Ą,[ÜSrČÍÁ‘šLŽø"ŦBž}Ã&0Ž„‚GŌ†3)ĨHŲ`UOCRC!âH†[vīĨK-†Û€ •WldŠÔ–vPCũĖA/Š{…ėîuÚ6 ˇvąJų”~uĒ@~ŖŠâ4̤°ŋčĮėķ|ÉĮģŠėŖ—rôŽYÆĖõ)MN7!•LDíči"!ú튚R ķTԘäČPŠhļa :U+ĢBå0éŠÕ…•€ÍYkteČ Đ^–9A3Gō˧Ķ5–_5Z,”Ī$ ņ]ŀ#;ERidAOŸš“Šzĸ…ÜŠ{w¤PÍKr¸č*¨”m$X™†ÔŨÜÔqŗĀ~ÉegPˆiņ.Áķw§ĐVŽBáúôāR;˜‘M'æ8§Ē‚Ã4 ÂÆĨŽæ5+ĐRcI´‚ Še!;ãĩ<đJLŒbœ2qH¤=Iî8Š”Žĩ'nMKHÎ)Ą“ĢnSØüĩmĢĀĨfiܤ?Ôš.ƒ4ĘvēuŊ¤žbŠiNKHÜą'žkE"%C°8'ëQF ÄwĢÖ6čH>•Ësk•U¨P¯ˇ<õ¨æ•¤\)Įz‰PîÜM&Rˇ,ųģyÍFd,Ŋ)Ŧ„°ĀâœtÆ) °ˆų8=Šáų8éL#ŒŌâ^Â4Ė\¨ZzĢâ4Ĩ0ųĮj2;˛ĶĐŦU„˜Įš§y` äÔâփ'­clθŒÔcč=8 یw äĐr9Ĩ@^ĸ“8âŌb€4hÆ)O­uíIõĨšLāŌäw Ņˇ=E!ö ķیāĐ9 į4™įî1ŠiĀ ŒŌ‚{@(šu Ī­íG|ĐGCF=hĮ  ”dPF;S#bx§įą įF )ög⛌ô§ž™Ļ1Hž”ŒâHpyÍ4Œ ĐG4gĖsJOzæ”cĻ(éņÅ/Ŋ Ĩ Š?´Q@č š3EQEĨQE~Q@JJ ¨Č¤¤į4›ą@Å1ŊqKģŽNj9$¤2•Ü„-rڜÄļĀ:žs[÷Ō|§&škÆ-6÷¨‘QZ)2\…ĪĘŧbļD„rāfąNbŸ&ĩ,ŊÃd‘ĀĀ51*Eķ 4āp+:æ3œā|§šŲ‘ŋpĒ1TŽ"-•H9ĮĩDü÷.ƒ$”đ$:¤ŗ•6œöšŗlGΊF:Ö(lr˜=Å‚5æŋ”*#ĄŗƒÜ¤"š5y|ņ'$Ojj"KnÅä۞ öB…ĨøČÁĻ2XŌ1že—,G(iŨ[%¸Sέ4DUÛ1눁‚:ž)e’0HV!ûØ ÄīđĀ„tÅiéōÆąÆįnâŦ CŪą"šŠi0œ…Î{g֖ÚCÆ>rpcHŖ ōüËPdųķ‚?*Ą{–Įí $DüĀ‚›m¨+Cöy‹1 ǟåRéˇ×0Ėö÷H2¸'ž>” ™z†­w$ņC’ŠâXŗÔŸ¯é]ž…ĢĻĨb˛Œ‡WSÔ5ajúg–|ˇlJā{đМy–†øzœŽĖôŨČR’* [Ĩš$‘*à ƒV#ŠåŲž‹ÕˆØĢ;Ũ<ЍNÜr*Ņ}č;UnŒîŅ7šy¨ÜŒqQŽOJ{0U÷ŦėĘv3Žr&î+,œ9V¤ā´ĀŽÕFDˆ4ÄL{ĶČ'œÔAXOĨÉã8Å2Y*¨+Í< *1! €3JŽws@"nqš^Ŋ雉^)Č =y â¤ĶvŽ”Ē1I œTČd sëSĄ<āuĖe?JešmËdPZˆ9§ öĻn8ĨĪjĩ€M=FEœuЇJi9 m´ÕÛSšŗŠĖvÜ2:ÕŊ>^HĄėā9&šˆSų>‘r@n¸ŽĄOŽ3â[ĸ9āöÍU5ī –Ėņ7Écœōj29éR1[ÅĩĐŠËŪąč 3ĀáÔž2vôЃ—æą´āĶ—ķ–byī[Šâ˛æē5QÉÍgN‡Ė<ū°cËđ+2õJNh!ĸ¨b§S0ʼn59Á"€€ PH՟Δg84ķQ‘ÎzŌ 9NŪ ŠPsPäõĒhÛ"€%\ô§8¨Ô€H¤ą"‹‚5ÉjL`ņŌŖáZœXõÍŪ”uĻn!IĻŖæÖŖÅ>WŪųÍDĸēŽ!pOZĮzqS ZocGCÍ) į4 {ŌRö ¤?ZP0y ņÎhzĐyĄy PÉī@ŖŪŽ=hÍ%) Đ=ÍāŌRô ~4™ Į4Ŋ(#Ō“4_j@;Ōā@ IŸJqâ“€‘NÆ)3š2s@Í4‡“ŠP1@é֕­!¤#`ũÜĶqŪ„;—•†(¤sփ‘ېûPF(pIĨöσOÁ&€~´¤R c­)Pāđ3C)éŪ€vōi {<ЇSķ@É9's@Î2yühž 8ˇ4ßlĐÉÍ<;ĶAÅÔĐ€ķÖģo‡ˇīŖ$ Į2¸5ÞõŗáĢ˛kÖԌ`ļĶøŅä'ąí:’™­÷uâĢhŲPOLÆ¯Ä ÖÛHÎESŗ_$J§}9Ŧ–Ö§ É5Ģ ŸŗđyŦģe$s[+ō"Œv¨e"dNĩ*NG¤55áŠH˛"{ÕBŒŧƒJ’•āĐ2Ū3FH8¨Ä€Šx ҏ Šv($R°ÁƒOYqÁĀxĨĀ4›†Ļ˜ûŠ‹xŠAŒ@ )M+SŒ0 Ļi ¯ˇœQļĻ)ŠM´ĸ˛ Sƌ:Gš}{E ­,k]pöą,ˆU†A¤ŠNĖņë…19FŠĻŨ ĮJíōÛXŸJp!ßĖ”œã4Æ5ėãU[æîZ§&™įLą^ĀįVĖØ•ŲspĪō°ÆĨ1ôŪsį+ČҌ֪@ķ[hSŊYOJÉD8,NrsO’÷ÍepŠpAî1֐Ë÷vĶątmĒ@ÁęÔ7viÔDÔå†{V7”‰ ‹‚ŖŸÂŽ´Ž! ¨?J“Nčô[+øu+(Ū2vČŖ¯QNMoäÁVå2G˜ÁėkĪt]v]2÷dāĩĢˆ>īŊz=¤ŅMsDĘčüĢÚšĒS;iÉMĻjÛÆ¨ŠĒ1W#ĸ’ŽiæíPāœV|ļ:BĢ‘ŽâŗuXŅnŌ‘SĨŌ:‚ŌĢ^°v'Ž:Qc8éšÉp*_§…QÎ*@“æŖuØyīNŪ‘ČÆM! äŗšĒŧnČĢ0’x&ĸUPE?ô¤QķSČ w`ũiF9¤Sƒ@Ë74Á A+ŒR¨ãéKˇå%ŠpiˏJƒNĮ4ĐÄĮ9Å!Éš9Å;`*•†*2™¤5!˛¸+€*¤ŋ('UŖzUY—žįØS ĸ„ģYšÅC$a‰8į5,ņœ’*“ÛI!ÉČÁĒD9-ÅûIÎsPŊĎH_ĄŠ–× ëN1L‡&UˇˆųģÜe]’ų{ĶQvļ§ō ÷ŠlW&V!F;TŅļMVŒāã5,m“ךve AëL?{ŠazĶŽæ•Šša`SŽ; ‚6ÅJ[ @Čä?-T”āņVYģÕYNy˜6Pšl)Į$מø–b×[s͊îīzã°¯7Ö§^9d8­¨­nq×zDž´ qš ”šŽƒŒL€0i­ŽÆ‚yÅ%{ŌPzæƒĶ4žÔœRƒĪ4¸Í'QIÆ)z)Ō€Æ(ČÆ)3ØĐ(Å(™öĨ˜ ŽÔ‡ŪŽsEQŠ_jB:ĐtīJhĮĩ!Éí@8¤'œŅķRöæ€ŅžÔ)sÛ” QK@ Á4FqK×Ĩ!É ž)xÆ(éŠLĐ ƒŌŽ:АāԄúš‡j`Ų\(8îi1íNĀ&—ī@ Įĩ(ÉéJphČ^”ŽiKƒÉÆ9搞hŲ-Ū”€4 tÅ) ƒŌŒRgĩÖ€ĐRg‚ÔßâÍ8ƒœÅ”hÁ(ĀāâŦÛIåOŠUƒsõĒŖœc­JšŒdЀ÷įĖą‚Lį(ZšTlâ9ŽsÁwÍwĄÄŒ~xūSë]:.öRk'¸GbũœytĻ\nÚHâŠYœg°â¤•OšH5ËHŧ=)FESŠr­ƒVŌ@‚Į`cD;T¸Ĩ'4XŠSÁ§,„uЊƒÚŖdPÖL÷ŠC*™ Ŋ)Ë)€.Rį HSR‹6h+šh§dŌ°Ä–ĻIāÔ|BšéH #Ĩ!_jŦŽŅš•f րZ’*6T ‚8¤+@ėB8§}(+Í(41X‚æŲ.!(ã × Šh& ZNŨüãŌŊ Õ[ģe‘rGC‘Bvekc*r#‹€UĀöŦČäųąšÔŊ_Ũ8Ŧ`qõĒ[]0¤1j—jÂHB {|ö¨L‡"´x4…3@Š <‘œ™/N94÷„ÕYíąĐQpąy/īS ĨõŦRŽĻJÊ4\,nũ ôõ”õ„'8ëR%ĶÍ ˇ¸0 gGxSVpz.Ī#š‰x;OzQ.{Ō3Í!™ˇđ€H+•5Äøƒ@Šæ&’02+Ņ\$¨QÅb_X2d V‘‘œ‘áwv’[LČ˙‡¸ĒŸŽ+ĐŧGĸ‡S*.õí\$đ4lU…h$W+’M4įNéíHG¯į@GڐƒØƒL<œb€¯Ō™ŒqNčsIÁę(éáNϊu%Q@%/j(ŖĨ'z(9ŖŊPAįš=Š:q@ĩŅøŅĐĐIôĨ>Ԕ´v¤ ĐMv§Trté@ĘŌjš\ķŠ–N*´×QĀ…¤`1īI ¸Åsz™E IÅ3YņŦ9H÷Ö¸G\ģž$–e_LôŠäopLŅ—VKi ¸J­w~ō8).ŌGĘ[šĀffrĮŠĢŅ+Il Ÿ•x5\Šeˆ`š—ˏ–`Uz đk_Jšxâau—Éų1\ôĢæ!rOŨ-ևžtÚ˛č=h°:ˇ•!Û1įĻjÄwo˛08î qÉw?˜CŲ=AĢŅ^cäįĩ+ 3z{„+¸õgJŧŠV( NØĒ6Ę^Īæ9cČĻY9†ûk dƒœŌzšÚ”ŦļlŠåyÜ=ë2iœØËķŲöâ¯Ũ‘sjđƒÉJÜyš}Ô.„ĘģJą8äP‰2ŦīĖķnbģÁä՘m„Ŧän¸Ē)f|ö|á˜ü¨M\‡61Gs!' ŸZl ŦBšÂa”āzÕ9$"NqĪ\ŠÕĀÜĄ<ņž?:pĶŌF4[v“žÔb´Nę §Oj-Ōt•Tž:V“¤wP<¨Āyd;╁[G‚#‚ë@ĩ1í#y.ÂÉõíVn ˛ŽÜí'ŠŽÎo0 Ũ ]u##b/ w*Kōāō`gØVĻ‘ŦO¤ūæ Ō@í¤ņŸjĨænˆŒ1ĄĢ‘rã€20:“Rö. ÅŨ|>'ŠAˇĘpø§ũŽ[ÎŦUO8kÎŋƒƒžÕģ¯~5ƒ˛ØëUdŅ<qoÉ)epksÍ(#¸ŦĄžEYļ“6ÃiÍCdŪäšA“ŽÕ)ûŊDH>ũÍJ¤cĨfh5pé#ō§:ņHÄmÉë@†* š%Î}ĒĀsšz>ZCE…ÎqŠyÍD¯Cšs1ÚMHaąŽjeôŦäv3n=øĢņ°ÆhVÍ8Ū‘rzŌô⁥T`ņJI'(8ëNĀĪ&™Bƒ’iŦØ#*AQ¸#œSČܜg8ĒŗË×ĨM+`šÎ”´’uρąV7¸`AÂuäuĢBŨ€Iâœ“œqëLɲXâÚ8⧍NzTjĀđ*° h—!ä㐞œÄušŒ°&†5¨áĮQM=hyÉéMs“jYH\î9éL`-šķÁ¤ĮPĮ4 †51‚ P*Pāį8ĄO84åhlr3ųS°Û  Ny5§zØoÁīQ°ČįĨ v*”ŧQŠLâŒņ@3Æh\ŠæŽhq×4™íFri0hzŠ)2sŌ€q@ ׊zN*>üšp`ĨM7pϗɤ€[#fœĒJSī@ öĨÎM%Šp8gŒŅÆÚn0(Ųæ—>”ƒëIŠ\ķԃKĮqG”™ÁÍ)# âŒ đ(ÔĒyÁ¨‡Z•@4č.Ā3ÄÐAŊ6 ƒŠōĘW(Ių×úWĢŦ|dVU ‹ö„ųĩl˜ŠĖ†VŠUb8qfŪsYš!îéŠíS÷f“n{S°Ë\ƒÔՀᇚPŠČ§Į;'ŌeūM'ĩD“†īR†˜PEDņƒÚĻ#=(â€*ËŌž’‘ÖĻ EBҜS:L LŦ güĘjDœŽ´†_ÅÔQÎ2EH €zĶ}*LsAģ'ZfVëLhĪQŋcĨ#/ÅVYY L˛†i=SØŅ Ę8¤,1ŠLŖ"í2Ŧ+ ĶHŽŽárHü+TÛ)ÖŠl"ŋČĨYŠāT,¤uϘ‹q͑ÍN•– Šš9ņÁ5WŖÁâšÉžĸŖIčj`Š`@Ѓڠ{lŽ•ĄÅ!_jV%­Čč*=‡¸­vˆŌĢŧĩ+ĩ‡"œŗ2œļaĀéP<”X ŖŸwz”Hk;æˆôĢJri¤ōHG ķP-ā.cqŸ­HÃ"ŗįL=RDąu 1.c%pr+Í|GáŲ!ČŠī^›ËDpĮ+Oŧ˛‚ūS¸tnjš%̟>ËF9 Ķ:ޕظŸÃ/i3ÉŖ$€+thúŒĶÍ™ĪcCâœAÅ#´sHd}i āt§Ī4­É Ļ…:qEŠZ((Ŗĩ ŠÍ ŠCKô Ĩĸ’€ ? :õŖ<ĐŌ“éF( Š)Žáą4¤ÕK썠BŌ8P;šÅÖüYiĻÄG™ēAĐ^kĢøž÷V‘”HR<ô“BW ö;=kƖļĘŅĀÛ܌ āīĩûíAŽ÷ڄôwŦļÁäōsšcH@ã­V‹`ˇq[ŗž”ĐGLg4„’š¤Œf¤ƒÅ8Îrxô¨É8â“ĐęTĘĀ{™nYPá†yžj–pØÅ(~ƀ-Í2`4hˆÁ¨íũĄKœŒķíQčĮŊ*°DČęhąÛ)f?J‚á˜˛€pęx"¨éZ—/–íō0‘ZķE•lĀqÛ5›ēeĄmdŪf8ųOøÔ!å†vČ]Œ0Ũˆ4ÔB“ûžÆ´-‡Ú#Û"Šuū/QM ™Ž‰$­" ŒQūĪõdž}HK6JgŒž•ŋr‰€ČĀÔ•MR.˜Ü ëBac:ėĖ×Ŧ@ ‡Ļ; ¸—Ŧą•_›<J‚kiŒ ‚ũ:b­Gc"ÆŽĀm<zbHl;$Wf„rÛOj­qp^w@ĨS.=ĢBåãŠÛĘ Ū5ƒ,…dÜ‘œ‘ÔP;Š.6Ü r[°ĪcŠŧd ļFRQ°Œ+?.d,ę8éôĢ‘šMî>Lã=@"†5Š,V¤ÜlQž=ÅZŧÄn Œ’ŖŌØō$nKĻBņÔT—‘*I)ũæG­CcKRř"N8a[6Î2äd{ÖD9,IîyČĢÖŦ‰>¸Ŧ%šŅkŽvŽZ’͆ zPĄ9ļĖ<ÖÁëSĐĨŖ4bÎĮ~ôōĻŖROCSãæëÚŗfˇ:áŗGō{Sœsš`+ 4zTŅ/9¨Xa¸Šc>ô†‰Ør Ŗm(#ƒ,Hü¨P|¤ãŊ^ˆ|Ŗ5T€’ä횴§åČô¤6L­ƒIŧSW ȧ…Å1Ąę})åyĻ(ÁŠqīEÆ5†1HĘq’*B9É4žŊE4 Ô.@1ëTí×2ŒŅ•y&ŠG…¸n*“&[ áx¨CØ÷~ÕNG+&yē™ĨsF6õ }jUzXw´’\*ŦúĪ–éZ$?fŲŅ´Ø8'4Ã2Ž3ÔW-ũŗ#Á_ß iNĸĮĄcĮĨ6ŠPąĶ-Ę~aÅ#\‚-\×Údęšü)ÂâRNw~U64TΑ%CÉp)Í$Np=1\âĪ '!‡Å;ílI"‹4΄J {qOį€%TāŸJįãŧķduæž.‰$ûķEŠöf÷šŖ¸üéÍ*qķŽ}ëNüģ˛x94íŲRy'ˇ=é¤O!ļā,€V#¸9¨ä AŦĄraf!ąÛ­Fú„ĨöŒm'Ŋ ‹{,NāCwĻJÞk*]EĮUYoe“Ąâ•‡ėŲ¯qq6 ;Vt—iA<Ö|ŗÎXãZIp¸§X95~Ų÷õ¨eŧRšČŦ‡¸ 0N*{ bĸLœãĨ>RFÔqËÎO^kBŨÁËG.["ĩėî[É45c)Gą´>u jhųIaÚĸŠpëĪÕb5Ũ“Žĩ,Q5疐œvĢâ29¨Ŧ# 1õĀĢr &; ‚ĖéøÎ+.āđNkJë$V5ĶíR3U3š×Ļdĩt{¯NÕÁ¸ķ]wˆn †@>b:×!Žkļš÷N ¯Ū)āĶŊé¤įĩYÜū”§­!Í&yĸŽŊčÆxÍúS€į­7S‡¨æ€֚zį§ŽhÁë@=¨ÉÅ┠AīF Ū—¯9sJ ũh0hÅŌŽ;Đ“éIĶ­/ZCրžhÎFiqې@ :Rt¸üŠ;āPG4h š: Pš3ĮJhįĐQ@&ƒ×­Ņô¤ĨžÔĻ…ëNÚsÍNx sOvĻ€@äĶ×É >´„q֐œž)O4ƒ"ŒŒĐpiĮ"€đ įAĮ4gŪ€švM&rpiÃg4 Ņ“š ĪP9 rE&9¤Í(Á4ĶĶŽ )Ā gäÛ'bž´,pËžha´uį­nÁy$…XĮ€1ŨMs`;E•'ŽĩjŪđÛG„9cōˇ=Š1Ļtí"ļF9#ƒéK×6ƒ,ždDđS­` Éb*’ŋ™”õãëW?ļdˇTTV#¯)Xw:¨^ č°Į,xëŠVŌŖˆäcwPk›‹QŠi„ŦJc“ŗŒ~Ē5@ЅG,à>”bĖË,JĖ"ßnY¤Čꅎ1ĀQŌ–MYÂlf!OP 4ę‹O.-Į=úR.4Û žĘYŽKžG8­S’ĶĘV'ķZ’ę7rĢ(ŒŠ9ǞO)3īڋš*ęWˇRUãuÎO\t$-sQžNāw4ôTŠ6îäôϤQdŧ’ĀÎ}č‚LĶŗPZB\m\ M¨ÆŽ"~WĄSëYöķ;[>ÔĘ8ëšĶŽ0öQÅ!$¸Iû§ëR÷!ĸkVRß>yÆjÜQ.YŗōũqU#FaÔpØ­â%Tú튯[šDˇüĸ'nŊiŅäŽÍDp˛ô¨-p°éVÁj„-Œb­;€ę Q.Aęj&ḧūŌFė #,Y˛jXøæĸ ‘ÚĨŒ‚ŧĶō,/"” :ŌEĪü\}) …ĸ-"Oa}*<ÞôîV€%qŌĨĸFį5`.EĢ€⟌œSyîEwŒzPsŽ(^0E9ČôëM ¯"š¨˛•›ę+RAōtĀŦû•+‡Š‘"œU;€Čš95}NãœQ,aŖäķH˜ŗÎÔuh-%š[h\ķ2ä(ÅJ4ao|ÁĨ[ˆÕŽ×Ú@ažJ_+ė×0ÆîA5jŪFyđNBŽ+d—)j’æ˛Øģ”Kã# RŌĀ ÉU“r ĪNkKøh˛ĮšĮ“š™- a&C6”ž[<` vĒövĸYüŧGZębūĪ•ÄŠŧ”#’=Q´HžØīí¨Šŋ*:)Ô{ūĮGŒ&ŅĪŠÆģĶ´íQÁÅvĨԀ: šČÔ"2ԜuЌõ4Ĩ6žĻĶQ†vū•, ×Nëo ČQ ļßJé`´@˜"‰g¸°‚dļ`‹*ícÜ}j¸Í6míoĸ94ņ¸/˜W‘ÛĨIqĻ4vâx.Ŗug*#?|cšô­;{C<˜Åh6”ĄsŪ´æHs’•Î6H$_ŧ=ø¨YWil6sÆkĻģŗƒÆ+=müĮäæ‹Ļ\ZjčÄû$’†Æ}zâŖkiŒbģ´’Āâ¨_Ø4CœsŌ‹Ŗ'U^Į<š~åä“Mû  íę1Šëlôаƒ"ōGz¨ļˇr—cÆ6Ž8¤ä‘‹Ē¯c“Ô´Õ…2}áéšĖŸLAf  ‚v:ÜjöŊxCšÃyĻŌGĒŠK™ĢŊLģHIāõÅh-ŗÆ3ĪÔS#TiÁNŨk}cŒ@™į#šsFëbŧNHÆkj5Ûš†°ĩa‡vÂGS\ĪrŦžÖ@7LQrqž*á@ˆ}ôŦû’&˜\Ėģ8°¯<~y­k§zuŦŲ6Ģ9ô<ÕE6pŪ ¸/rˁįXƒžĩsRŸĪēsÎĒĒ8É5Ũdyōwcz(úSØÅFÜtĻH„s֐€:ŌŌx ãƒ¸"”PM8p:ĐWŊŧcé Ņۚ3@y斐N/J@)P3F=¨(íJ“ŒP}M.G­qFŌ`wŖ>‚“§4)Ü@ žÔzĐ3š^ũ(QŽy4™õ4gœPÅPšŖīOTÅ?€ĢëK€)ŨēĶ1šRxį­)gŽ”py4 €)1Ū“Ĩ;9æ— õ¤Į9Ŗ‘œŌ=ii9Î()p;P=('PŒf”ã€úԟzLúšP3ĐŅÆsŠũhNzOƗ3ÎM>´ņŽ9Ļgœâœ¸  Ī ãûz×áĢÜ­ķą}Åx—…Q¤ņš€ /Ī5īđäcŠŠ=FëO§ōyĨōŊĢ+Í59Ššc=hŊÅ=&hĪ^)ÅĻ”¤2äw*ãĨ0âŗ6ŸZ–;†Œāô  Æ,Ô/ĩIĘ8äÔĮdS¸ĖöFNE9&#ƒV^<Š… ö  Ō`j`ĀÖqVN”øæ āĐ.⑔b˜˛ƒŌžn) =*Bsm5—4„VYjxî9ÁϘÅFc ĐĐ͘˜8"˛ƒ2ŗũ3RÜ ƒQ+įœÔĄ˛(¸ÉAÅQ™Ū~•ŦFGJĨr€Å!˜„lsĪz˛„ëPŨ)0WÕĸKl* #r5ŽE) Ęu"ĸeÍi<Ž•NHĘįŠ`S(3)ģ™*ÁZaQԊX§>ĩi'ĪzĪ)ƒ‘J˛8Í4#Y%Īz˜>k*9ÁīVã˜wĒ-‘L+Í āŌä`0ŪŖdĩJqH@  ¯`xĒ’Ų+•§M*é@™Īͧƒœ ΒÚ[v܄ņÚēĮˆÕ^[de9I´&Ža& JæéĐæši‘Í™!_\Wos§Î5u`ę ‘‘TFĮ•KDÄ05 õŽĶTĐ÷)tQųW'unđIĩÎqOqŸF÷ĨϊQHŠ:P:PIš  >”wĸ’ E”PhŖĩš\(ɤw¤“ŒW!âĨŒM™›Š7ĐącĞ'‡O’3™ąĀå—úÎĄ;<īģ'8'ŠeÕˎ<˛ĘX“œUŒ ĒÛD+ubŸŊĮŊ'ĘŧšRęҜũáŌŖ1éHcė'Ģc‚ ÆI4„w¤1¸\äÍ c´ņJ} ȤÜ:}š Bn´€1š3‘Ö†ō(4Š<F ëA wÍ}*3Å(Čį…+`ˇĘ0(¤ņ“NY\0Î:RŠnĨXIÔP0Ŧ0j įېä ]ä.â€$‚č#(ܟʮ4šģ*ŅūĸŗYUžī֕K(Č:Ō°ËŋjČB/ÍõĢņĪ$°üãŠÎGZĪŗˇ7†#ĨlvÅ'dtŅĻåĢ‘X` ÕČã ŧ­Gn€q‚*ŅųJÖmž*v!,ZĢŧĮ&ā:ÕĮPpīĮĩUšŠëB4ŠË$qüíōGPyYœHž`_Ã9Å:9ŧčŲũ`č{Љe+&×c’ĒG5f[˛iĨĩ– áO ŒzUԟËDw8įoãTėÉ Î„F8ę*â)xȓ ëÆyõĄ™6哌0Æ*ä@*ã‚kĘPŋ(mÛMmD|ÃĄŦd\IԔ#ę)īŠôЈR ƒj)@$`rZĖŅ lM]L0?:ŖÆ&¯FOĨK4CÍ# +9éĀa°{šāŒúԔ@§$ƒOSÎi‡åo¯jAĐÁUļ‘R’:ŠĒrį*t?/4†<úúSĪB)ŊF(\‘Ö€į­[FǍvjaÛÆJH%Šžų§-!Ąā€zRŽ:úĶ1ÆsJ­ķ`Ņqu%qTîųdc­^+UŽrËĀĻž„™đđvúTŌ dĀ5YNŲņŽsVōHäŌl]JP)æPŨŗÜ{Öm¨û=ķ•™_Aãēę ÉĒwÉ<$l;ķÁq“ĸĻŦÍ+)mŅØŨ#´{H=Vļ˜ SßÖš‹øīC.fŧŠ›EģkQäŨ9#$ŦOĐÖÍsGCŽTœ§`“|ĨXáX`â–Í‚úšÃŊ×Ŧ,ėžāKįmíĪ5sNŊK›X§CōČĄ…c8ģtBã ÖĒąß(cØæĢovāQEuē0 Tɡ~ĐyÅdh¸åzÔWîMĢėœ ¨ĪSéUŌ^:ÕŠd´}>"ĨÅĐr„vĮéM&Ä:`"ŲT)!p'ĄôĢōÉŗ€* 2æ+[øgž6‘9ō88īEõĐēģ–T]ĒĖHũÛÜ$ۑNõÃ!ČĒútaŸxž”ų÷1æŽhĶ%ä7ÄdE' c=>ôFMģÆ-!ėÄVméV8eœķZ—>}ĒŦ~Xf,=+6áwļãDĨīYŽė‘%!:öŦۗÍÁ`qĮJžŖäÖEŅ&ápqĪįVõ%nQÕåŅË}Üs\rŨų“8C‘œV˙‹gō4Á2ųŽŨ'ŠĀ˛ˇ1ÄŦFIÎkJZE›ŌW5lAß÷ĪzÔi”(#Û5Ÿd<ĩŨŽjŅ´ųä/‘ׁD™ŧŨ‘Šnģ˜=ĢjŨ@ĪN™ŦËEˎp+V2rkĻ#å8&˛n¤"¯ĖāįĢęQČ'4ĀĪŧ“å"šÍb]–ŦGR1[W'.pk”ņ Į—nĩ­=Ėj;#Ž›sg­GÆ=éĖYä,OZAĮZė8X`wĻR{Ô|ö Bp)ĪZR)0zP㚠”…N3šG ŅĮZ@3֗Š84˜qG=qNíÅ ”¸īH ­)ĮLQœPI<◯ZBß.1GN”­‚(3ž c{‘J@  ‘H=i{SNhN;RqÍ)¤ö Qš8PxįcGá@j\ŠURÆĻr(LuÅ+ąÅ!éQõ8Ŗ'šLķŠSÁëAįĩ ĀäĐMúŌqڗԟQ@ 튭”˜ĪZ^¨ĪlQĪJ:u žh÷dbŽhĪ=)ŨGJLw§€J Æ(Æ)1ÜĐ‚1F=¨éČĨÉ#dtŖ¯"š>”š>”ū:bœ1éœT}ķOPsŌ€:?“ˆínIb+ß-œ˜×#ĩxOđŪ"ˇ““Ôt¯xˇm ‰ôš0 š*‘MP­Ry\qPXÃ4†:yVZ2{ŌȌTÃĩZ´í ŌƒF}*6ˆÖ‘ŒÕEE†g*r*Xî8j™âįĨDĐņœP¨æWj`TŠËØČx8Šcš#† w.˛U¤‹¸2HĄ§ā¤7'­IŨNŅƒÚ x{L *āŽ ;Ēž>*Äs‚9¤,cŌ¤¸fœ(@0 4ĶíSqéKI9Nĩn9Aj"™¨Šäf•€ŅÖŖš0ëUVW^ JˇđiXf}Ä@Ģ-f“šŲŸ˛;ÖT˲SīU1Ú|ė’l ã=ëo`uÎ:Ö#ČÆp{šŌļšũØÕĩԕ į‹æéUŽ-ÆÜâŽæĸvjJ2dƒž•]Ŗ"ĩÅA$Y*„ŒōĩGšļŅ`ô¨Ę`ŌĘeJž)ņĪ´Ôė€Œb x{Đ"äs‚:ÕĨpEbåãjŗĪŠĒ¸yŖ ÕdŸuH¯šbԚMšz“"ŽzЇĖᚐHÍ4HĮˆŠ=Ǐ9¯’1‘L`jb0gĶ”ƒōŠį5,ąŗ"`×xņ‚:Ui R9Äi ZAÅ.i€{Ōf—šNÔOÆƒĶŠZOĨz8 ¤Íĸ€­1Ü É8Ąäš'ŠäŧMâXŦ )~ôđ¸=Äū$ŠĘ&‰==+Ė//$¸™¤wË’sEíėˇr$}ÄúöĒ,Į‘ŪžÂKĢŸwSMÛĶ€§Ž)ázņ@Æųy?­8…\‘Đzҏôū´ q’? Đ1Į œ}i„ž˜ũh9Īõ¤ä.M! ´ķČĻāu9ŠÁČīøS'ą #=)ã¯JS“Ķ Ļž{P䎇õĻ•&ŒœtŖqb€w¤Á&”āõ4 ëŪ€q֐Ĩ&hIÁëHyéøŌs×4uäĐŒr IÍģĮJ$*[d2Ė uĪzĩv7ėmŅaFŒķVļn` īš‡ō­G)ųsŠx9ę)˛.á’zP&eČ1(~jel.I¤™yÎ)"#Ą ]IpI=iĨyZ—iĀĮœT`ûЁŗ:ęŲ$‡…įŦYíŪŲō¸ėEt’Fq€9Ēr@’ä? {æĩŒ‹M5fs¨°5Á2DGŨ5ģn1ˆNĀtĒ7V^_%rqÅB’KĮŽÍÍ[wÜÍáÖđ$žMMn1¨ĘÖōž1Ā zdV­•œVî&Š0šîj¤ē´—_fŽx•|‘ĩHQ͎Öĩ­¤ŠHGTMô2ji{ƍšÁ5ĨÜŗ\¤ TnL‡ÛúúU8îŧÆĘŽFqÍ6rЏ$tŠĄ´ōФÅWroį9éI$ĖļÔļšâ¤ ÉŦéå’$Är•ü*š•×HMB§¨īĄ§ \d‘S[üČükļ_†'ŋ&Ļ2/—‚Ø5ĸ‚ÍIdI @æĒĖņ$2ôČæšÛˇW¸Ã8´Č 1ĀŌųpyËsK•!ÛBéÖÄ0žb§ĩs~"ģyÄ{w$jw`ÕÛģØ dĮšŊ0;ÖMä˛ß`ē•ã&´Š[˛•)ÉčŒDVžpĪķm'ic“ŠĶ$€Hô⚐ĀĀ t5)aˇĩM‘‡"ą:1 ¨<ÖÅē€A˛-3‚}kj,(ük93ģŗfÉp2jôŒp*™G?…O+€¸ H‚y0™éXSĘY‰ĪzĶēŠÅ¸8R4ŌʲČy>•Ãx–ée¸ō$€ ÉŽēöo*áPI¯;ŋ”IrîŪ5ŅF:ÜäŦô*ō{Ō€1Á͌\€:WIĘ# aČãœäĶIæ€'Ŋ÷¤n(Éšį”ãÍ7>ôg ķš1ېŒŠ2sĀ Īš€äāŅJQAÆx q֊RO­'jvE7$ЁĐĐ@(ĀjáÆOANÂ(”Å4­ZhÎj6R;R°Ę­=ĒŗÂTäUō=Š ځ™ë+#`Քš’@jĒņ˛MÔYCwĨ8"ŗ#¸*yĢqÜiˆ{ fâ§&CTnŊÅ4&J˛dSÃT÷cĨ(—­1Ī5QMYAīNŨšX⎴”ĸ¨AEPGԐũhé@h¤Ĩ "˜Îd͉VŊĢĻhÎHÎ8ÍPņ/‰"ąļxՁŽyUũô—s´ŽÄ“Ręē”—÷M3ķž˜Ē6aģ[ .ŦŒ’xŠrĄ#TëŒu§6qĪ4Š#ČÚ88 į𧓅 wĻqĪé@N@íøR=IÍ)a˜Ū Ō c'Ŋ;äP#āœQDˇÂSa´üzR˙$“’:PÂūtôģUļe(K“€}*ž&Č%4\DåaŽ; ˆD ĐĶžĐtĶMÉÛĀÁÔh;BÔe0ĩJ.4ĻEs–Í*ãœŌļ#V$Š…ā;ŠXGZ24Ĩ6žĻš€ƒ4˜¤cŒQÛ§4x"¯éî˜6Įjĸ‰Ŋ€ŽL´Dœ›˛7ÃÁÎeņžÃÚ¤Lũ1īB…xįV'ŗä öĨ*JđzņA¯^=( H<Š“d@ęzņQ˛ņĪŌŦˇŨ銮ĘH8ī@š*ēœã¯ÔĶ\Bc`Qƒ‚0jfp~íCÎ6ã99ãŌŠN:‹Įr—Ÿŧ§€jY%0b<­ßÖ ˜,I¸“ŌĢCrdwã<ĢG hōŗn :‚ŦC)ȝipYˇn;ģäVƒFĘą ;Öĩ!¸ØØ$nŽqYČÎ&ōO´) šIØŗ+ `õĒĐM•ôĢÅĸ!GOÖ°5ļ„Q~î\v5Ģ ŠÆ™›ÜV•ģœ‘Å ¨ėiÆû—ž*@2:ÕXß5`Š’Ŧ#(d vĒ āûŠļ8=j)ãîS×­V"eÜCÕ"ļ=i¨pA§8Ú~§"ĸP{g­<¯Ę9įŊDÆEHO֕ŠBrĨV÷Ļ:z÷ĻŠ#'ĩ!–‘Žj^GÍWB1ÖĨ H#Ō‚‰;Pæ˜Ŋ;ķ@ŠãšR¨ÁŠycޏ JŖŠŽŸ+gŊ[aē +‚ph$ fɃŠEœVŒ‘…!O§ZÉ,6íÎz UhÍ”ģ•ˇģsæ7õrŌöé$Į42cŽėŌÁhĶĖ‘Ą›ĻN+éĪŧŒa‡¨Ą]0jFW3Ũƒ“.}GZ‘ne —eü)ÂDm¸ÚŲčjŧ°Č­‚HÁäb„K§M’ɑƒSÛ¤{ŲĻsœ.}*šBH¤$Ģžh¸Õvđ‡9y?ZŦöņ)ár*á†HįÖŖ* ÅMŲjĒW€ŧPBí$¯=ąS0Á˜ m"´­ōã]gĀZ°ČîøŠrFWæĮÔĐsԕ‹6‰Î@ãŽ+N €¨ÛįĄn@” ķR÷9Ķ5"¨ã˛>GNę2đL–@9аĘw/–éY3ŋĖ@=*ŨÄØ$Ö\˛€žõi&cë—]Ģ ?3 ã=k…•ËHko_ŧ2Ũ”Rv¯kõÍvS‘ÅUŨЧÔP{RJ œU™:S§LņÍ!Æ:SHâ”į4ŧb€ˇJA€)IR ĐđhiĨí@į“FqA täĐKŸZ^§HĀtÍĨ/ãH­'­.3@&´PĮ­7ŠëNį4ĶÁ âŽ(4cŌyéIJԘ–@ ŌEPN(ã4b€'„ü¸õ§¸âŖ‹4ö'Đ}(Č&ƒ“Ū“Ĩ)ô™ RķIÆ:ĐŒœŅĀâ—“ Z2(=(ā(3N=éėhČ1@ĮjPF(w ãŌƒŌ–‚AāP8äR÷¤Ī4¤ĐøRž:ŌšĨ#=h$cĨã"“Œu§:ĐŠ#Æy4Ææ”cĻhŗđEõĐĀ‘ĩkØQ~E¯#øwĒČĀņ°~uë‘8eÔOpŽãÂŌāŠpô§mã›Eõr)6{Pĩ!’‰­J˛‘ŪĢ…4õSց–Džõ ˜šŽ¨MJ¨q֋:žxŠ0j‰õ2ãš‚ÃLG¨Ō¤vĢJr8×LŽqEĀ€i| G4„`õŠPlāUI-Ę6A­C÷j&•ė3•nDŨÉ5bČéNYJž´æQQ•ĻâsëG›ÍVÎ)sšâ¸4¤fЉ šš9īV™6%+Q:gĩNŦJB8  L¸=) ķƒVíP2⁌* Dņ†íRšP=h>[oAUĘŖvã?ēņž´jž(Ŋԃt=Ŧ3&ãŊ|ķëM+ ×B¤g ī“ ÷Ļš@…ÔV U'ւ…*W;ŠŅ4lŦļ8 ÷ /$ĒĨˆä@Y’pØĻ‘eWŠ­ķ5= vįÖ•ĀžîYn&,ą¨Î>īJƒėė0XõĢQ)Úœ{Հ˜ī“ô¤Ų\Ĩ$ˇĪQOXÂļ0*Ė™čŌĸŠ7wĪ?•&ʰ*ËĨ rA’*xí ˛eÉ5},‚Ÿ•N MŅJÆ_Ųä”d€_JkY€š'œsĮˇ**BLœuĒ“9ų#=+Ų˛ĸ¤ŖvrM5íãe%2¸ĢÂŨPrŸ7ËQž 9‰ä2š&Œ‚Ŗ"­aVl‚OįVü°AÄ{‡|Õ9ãtl•8íÅTer%ˆž%q‘Ú dÚsŒTé €:ŌĖÁÕD$äuĻ÷äT˛)VéŽôÕR[  šuŠ–`Äp+ĨUÚ :zU=2ŽWœgšŅPvJĘOS×ÂŌåĮŒdg4ŋ7L(ü)HƒƒƒJ:gųÔŠč3ĮԌíÆŅĮ<ŌcA>ÜSķōāŒŌ,Œ€W‘īM*įŠ” Ž{qLeÜ ūQ×#ˇY°9Ĩ] ¸ ĒåxsšhĘq)HwŠ;°AãÚ¨šunWqę j˜Áę9˜ĒLäŠEĖ—LŸv܍ŧwëZŽGÆá׎ՙˆØ9ÍZ[“°Ą_j™jgõyŖfŨÃŀGJˇ¤ĻĖ}+ ŌđDÄÔr+FßQžųۏjĘQcör] …“íWmœqŠÉšhZUxČä`Õģk€=ēŠZؔš6ã`ÜwĢqŸ—V\rށ°"ŽÃ/­M‹- փ…:điˆG­MŒĨ!Xyraį§¸Š7OqŌq)œÔPɒTP ’.HäfĨ…ȨČe=8<æ…%OŪ¤ÆL­•÷ÆãŊ vžZq\ŽE"‡)qRĢw&ĢĻÁŠ—‘@Ņ.@ĨW昸Åî¯JCš`y4šČÅD˛#ŠWæäsLBfĸe9Īj•ÔõĶ–Ā#ƒL¨§œgf˜Ā–œ„uMŦ ŽED@cĨOËu8ĀĻ€@ BdíäSፍҙŽ LN˜­b´ÖĒü‘œĶD?2đrŊĮQWF¤ ëM›D1‹"—ļô&ŽЏJúíQ;TnĮ ^+E; ģ°’tķrņ,ƒœō+9Ŗy91œ1Āæ­ē ųÛMn9¤äRi–Ö3tAĩ9ÜTR=’îČÆ=jÃ>â=Š…Î)^ãįd@>_ĨGö>A=ĮZŗ´žÕ \v¤˜:–3žÂģ˛Įü*ŧņ€r+QÁ Н"*Žš4ę2Č=*=‹ŒcĢRŽ*¤“A“wc PZģqâ¨D9ĪjŅPŠY,gņĒwŸ/Š™ÜƓԞާtuĄn&Ęō1į'ņ5‘Š]mÚNÁŽõvyNŨ¤W!â đ×Dm•æãŊmŨ˜Î\¨Ãģ˜Í39ęM@F,œSAÅuœoqŲ9Á4™ŖŒōhŒP!zķŠi#Ō—8âŲ8ÅšL ^ôsÍ0×~ŧHO9€AôĨ´z03œP‘@8攑ڀ ú L{QŪ—&€‚“ Ph8 >”¤ûRuĨÁæ€ëŠi<Ōįļi9 <⌃ڎŖ9ŖŽ˜ ļ=)zSĪžŲ =hcžÔ­b€×ĩ斏ƀ't§°ųsŠŽ2§–8äĐDâŽ{Қ0MļiŖž”`Žô¸&Ž=)rEh84¤ dQŽô˜Í&húŠQí֐ķրô§ŒRvĨįրj@})ĮØŌJBrixô¤$öĨôj^´šŖˇ¸Å;P@ëNÆ0E/jUäæ›“šzzîūÂdģ™ĀčúWĒE(5į? b.ˇ @ÍzljqƒYMę8’D„Žĩ>Ā&˜ą•ŠÕsÁ,Œø œbŦˆ°)D@õ4Ž;ˆ=…9sŪ§(&íHŲÎjE'Ą¤´åuĪZb@¤ÔČ8¨DĒ;ĶÄĘ;ŌŌ*@šZǎ ÜĶÅĘ㊂BH€bšsHĨDr 0dĄ™ę äR=č°r§Š§4@“VIã­FųĸÁrĒn°ym["̏=E1&*Ø4Āŧ=)JŌ#3RšDWŽ0ÆO8Ģ[3ւ PØĘ ãԘ#xÎW5}Ŋ…0ĮšW Ĩã/ *O´,é’CíUÚ":Tč1Ō¨R}JĒįE:i.x¨A!ÚŨhLF1šg˜ $‘‘ĐT%X Õ9 Ōt¨•ņÖĨ0Č œĶ +ȧí>´l8§q ÉCÍZIÎĩPĘQãåj“Ĩj7\ôĒąÜ‘ÃU”•Xpi'4ÜÔTįÆÁךRš4„RŒĐ!"ĒËnäV€Œ€ö  )mHäuĒÄŧm‚ oKęQ–{QpąAfÉäÔĒCTs[ĘÔ #FØ5BąŌŌgk‚šø†ō-øúVįĩ[Ōæ"R:uÅkĘČ=aįYÔ\ŠĪšņ›hĨĨēŒcŽĩãŌęZ”ËûËŠHãŒâĒ:ģüîŎ3ÉÍ̏jzUīÄ;ŨŌŨ\wÍj>7ÔîÉ œũk’iŒüT-xF2sŠz-€ŋqw5ĪÍq;ģwÉâ̐/ 'ˇĒËtŦNŪ•QŲ°3IĘākË=°‡"OŸŽÕBKļcÁúT ąËTĨcˆÔŽUäfų˜€jpbˆda›ŪĒ;–lW"ĩ 7ąâ•ÆFĖīŌ¤ŠŨäĢi@Ĩ<2ėųi\iŦkÆÜŸsS(Âä gĩ*Ų¯ŌŸ´ãqRĘHj@ÍK¸cfĨ†0āŅ°Ķ ō=qRŲĸ‹ÜŖofķöų}úÕûm$Ģ`Œ Ū‹OŠāôęiŽâōrO›•Í”R+>LšŽ}j hÛųGz‘ËšËô4ė \øR*ůLcŪĄËĢd/ËߌŠš V=ĐĶ0r ācŊ0*Hr0GOʛą%\ߜUĮļR ?…@aā×­;…Š’Û´GМõȧ`2máģG4öÔåNGSŪ›•#?ÅíM1r™wcq)ōŠĒƒaģV´ĘÅJį=4lŦ~•¤YĪRw2`žxúS-ÔũĄ8įŌĻ9e dQoŸ´ aĀëõĢ{ÃY#¤G–¸Î@ŠÆp3Úĸ„a@?Ī56M`÷>‚ D/QÉĨÉ9üéŖŽx§ ɤh(`Ũr;Ō䜁H#âtāĐ4;vrĨ&Ꮄƒ gœvŒã”€ŽAÆäúUiŽĮЏß0Ī9Ŋ@éŒįŽôZw:T˜;A?…2L†ŸŌžŧri˜­ņ׃ÛŌ—a$æōއ5"ŽAÁĪ­4H‡íNä7RūQūM)\žŪ”†‘-œ͊’ ™Q˛āį<ĶXžšĨ“žJ,.D]T•v†qZÚÚn@WˇZįĘŽ=xôâ‘@HęyQŒÚEŦ[•ČõĢąę0ēî)Zķķ¸(,OR´ÜÉķĮ;{RäD<2čĪKiC&I#ŠĒėclŽë…RŊ„(ŽwÚ0py­Ë-|NžUŌíl‚ŒRå2• GTtņŸ5$‘Úƒōļ:U;[å“‘Œ‚Oj¸T8ČëPŅ…õ6G×Ĩ=ą¨T`ûSÎ;R)u*wgŠ|męi#;ÆÆG5.ͯ<”‚cžRŽP{Ôģøâ‡Š)•zc1õ¤&‹ŌÍëIŧŽôâž´Ü „u4āįąĻ¤äCИHzKæŸZ„Pyë@’āŽ3S,ÁĮ&¨Ž´Ąˆ=hņ\ŒƒLe ÔqĖGZ˛Xs@ËORŊ9Ŗ 2*ĨMĘĒōGžELŽz\)^)Lm†éZQH2*‹Ä 29į•Í&†jdš6’i°J’(ÁŠNZĖcvŌœŌ*”š بX ]ÄĶyjȞ4aÍQšØ+nCZ%3LhIPâ;”ã_19"ŖxŊĒi!u9Sԁ–\â’‘‡'"‘C)ÁĢ|+r(uVįŠąŠÍHĩ RϤVæ€cÁ§ĸaOF ´„Ō„ymč*™I">ÕǎąsOQsĐÔĄķÍA$e[8§DŨ<ąô 9iāgƒIŗœ.Ĩ žj0ŖĄ"€ #)aŌĒÉnzZ3K…=¨ŠĐpj•Å™ô­Ųb˛W•2˜"É<CÅšd=E@/üĨų8Ŧã1یÔÉāWEĖÍ)5n‡YîēąĒęŽįTËlŨ]€Ĩp"2œõ4ĄņŽõ)ĮÆ2ipJáF)īŗ…fúŌ™#EŽ}jąvnĻ“4#LÍۚ2Ü `<ãfîÎzĐ ^ŖšĐŧ+”žH÷QR** wqÅ&ĘH‘PCĖNGCKfF^)ęFyöĢ[Í'#*=Ē4Œoąۖm˜Å[ŽØ ÆŌjTŒŖ 횎 Á˜FN¨lÚ0HŠÖË šÁ͞“­ŧj‚ĒŠų=:Ķ|Ær–§rՋ-r]pN}Š2ĪōĻÄ$GČį#5:ĀûrWō¤4FĘX (ÅX^Yqš[ĘNjDˇ.2M!ØŖ$eĘ ĩ'¨õnKy÷(ČÔāJ¯ÍÅ$Sēî^¸8âĢʄdc5ŦJ’ ĪqL™ tČã˜XÂ`#āņÍV“1•Ģ,j[j.}3P5Žc`SUyĮéČĒS—üØšeįĢī¨IÎTÔN‚N^õI‘5uc!eg‘˜Ÿ˜õ§!e™[ ĪëOšļ0˕ƒŪ˜ĖJį?_jŲ;Ŗ§uíē%Æ3Š‘[<ūUSNŸ}Ē‚AaWW>†°–įŋJJQL_ģĐR‡į$Rdã€hĻx>ԍ‡yũ(Á#“ųR`įž” í''ō=h( pO„Æ—!”äRG'ځÜwĘrO§(ÆqR. Æh*xú^<¨l{įÔÔ$œœš´ņáFMVhņÎNôҜ—QņœuÉŠ†H‡õĒņąf#uŠU°ģMB,yu4Š@äsŠ|ŲÁ8ô§c<=é ÔäņČ&†(FqŸJ~ÂëHŦ7zuÅąŒįĸƒŽ}éweA ŸéOeĪR}8ĄÎNqœŒũ b5AķG֍¸9§í;p â”!=‡a$FY‚žüTäįŒãŒQÉÉä R‰mĩKĢ}‘šŪŠO^ WWaŠ%Ô(ČsĀĪ=ëŒxö’ĘzibškI‹Âø>2(jûœõ()jˇ= Ž@įéL_ŧĀžĩ“Ŗë x 9Û2ö'¯ŊjšnQĪqY8œRNĖ•+xø8ũESrMYŽ@ßZ@ŽN0MHyéQČģ[xĒøŠeĪž­Ÿ­E¸õŖq˙ëŌ(¸¤bĻ HÕDrx5:¸ÛīT+’ąöįŊ7įåà šBGLŅ`Lc)Ī˜'8§ŽI>”ĄN3RR"`GJU9āTíJĘ’qB1Ō¸ĐĶŒqHĒÔivÆ)ŧđO&áģĮp=i H‰ĸc×ëP2Ø­–N‡9¨Ÿã4r"›FĜV œÔ_.y4ŠHN‚˜ĀöŠ\ ŊxĒîÛ 8ĸ°Ō0y9Ļ’UŽ;ĐÎ:âšHŪ3ĐŅbZWŒô¨¤'TĖrqÚĄ˜¸ ‚ aM™Š÷§¯ŨæĒŨHvωlĪģŸį9č+2ælmÚr=1Ū–ōã.@MQ`Yˇn>ÕŅŠķģ‘L7ČÎÒrHŦģģ”3!‡ZÖe'<*'_—#ŽõiØé(Érŗ•d1ąbžâļîėÖU$}ęĮ’6C‚9ĒižEj.›#ú Ŗ8ĻûĶ1%ž)pq‘MSĪá“Å-!įĩíAPvĮzC‘Ū— ã­Í >´„qÅ)Ŗh0M.8æŽE&hĮŗ@fzSŗĮJLÎ(ę:RäSNIČ  Š(9Æhö ¤ŧŌOzq=ЧŽÔ¤Zoz '&—8¤ęh 4ƒN9éHF8 J:P9Íb<ã R>G&–3ōæ‘ÎO&€9¤özŌt< v0)9늚#Š:QíKH~´f”éI×­( “ÔP3ڔõ Ž(Ū—éM c­€'Ĩ&1Ū—¤=3@ Œķš ëF@ `cĨ 4™÷Ĩé@ y4œQŽiŨúP¯ÖĨB2j< ‘@āzīøhĄĘ‘¸÷ŽĐÅÅr˙§‡ Üۉôé]~ÚÎ[°ŽÅ'„v¨ 5ĻÉžÕ Â3SbŅY%+Ö­G0=ęŗÂE1XĄ¤3Q\RT"œt&Ŧ¤€Đ2\úĐ ĶHE;4g=)ļ’ŸÚŌ°áÍ6œ8é@ *Dr Eš\Ššžõ&…QVÁëSĮ'Š HŠō)Šø85opqPÉ ĀaÅG$Yό¯2iT…˛ĩf+øÜhtÍU’2§"“ArūėŠMŧ䚩ä­VUŗŌŽÅ/n(ĸ˜€ ~)‚Î)0ÆÅWxvœV…C TØf\‘įš„ĩ§,XÉJHŠĄØŽZ€iÆ#Ō›°­1RGJ—94āH  äTĘáēÔĻi‘T˜™4‘+Ž•NHyQWV@G4íĄ‡4ė#/Îdá…8\‚*ÜÖá‡JĪ’ŒäJÚ?Ú9ŸjX784ā€Ņ`EĄz SÅĀaÅR1gĨ4̧"„jh3¨Ü:UxîppÕedWiØW>fXb^IÍ $H~UTšXНåÉüjBŦāäd’‰ŨQŽF3۞´ŠjN0h†0Č8ĢjvįĻ(cļĸĮBG8āŌų€ž™Įj@w.KS‚í >ĩ>Ĩ i(B‘ĶŽ*_ ŋ84l›pO_CNãAænSūuDYI­Hļ¨$“ˇŌœJ)ژĨqŖ>D–,īpA>´&ŅŅąĪJš"o“iU#×4É­°…€ÎxëNāS–ÕÃąĪqƒP>dĪŽOkËG<1゠)ˇĀÂãšhFDąÍÁŒíū•YŖŠVŨ…`0yâĩÜēnL’­ØÖ]Ė^T—…=F*‰ą‘tėU”¯ŌŠ!ā€JՕCœ(įž•”Á╀8æĩƒ9jġĨ]yw; $zčCä3ũ+Œi RîëÖēm:ņnmמGjS]NĖ m9¤#€(,ā-7'8ÛųR|ÜVgĻ?-ŒíIƒœĀô¤ËzԌŒŸ^Ô x03íH$ķéH2sĪz8-Î(ãœQ’1Ԙ[éFF3‚)įd~jŧ¨vãÚŦŒīŠdŖŒ’H  {”FQ°ĨRzœJčČÄíéĮZ„¯Į´ŦR8ԌxéK€ZogŽœõĨ b“‘@qž”;QĪĨ!Ī\Pi:ĐOjN¨Å4u§g'4huā`ŠF9íKNiΧ8ĨįŌ‚=)=čŨ8ŖØQœ Đ1Š3íF{Rf”û 3íš3í@Æ)õ šSĐŌ9Ŗ€€hĮ¸ųx $ŌNü)Ŋ¨īKŒŠ4ŖÚ€pphü(9ô¤æ€GėįŒR(ô¤gœPœTŅ‘Œ‘‘īQ‘üęhĀV÷öÍ5¸įā›q‡m†?‡=s]8átŲĄÚ)?ōĖVĐÖrŨ„6 fšVĨÁ¤Į­IH¯$Ī{niŒ‡Ō“Cš–ņ”_­_ XātƒgTU„ÚėAĨL"Œã4€ˇE^*ÍĩŖČ|ÉHÆr2jJ! šĮ5nÚԓ’I”õˆvT܅ڇ’(†0 øQNXÉĪcS,Xô§üĒ:ԖˆbˇUa“ęjÁˆœŽj?3œS 9'`P;@ëQ|ƒŽ*6.r #ŪŖp̓“Ö‹dOÂáˇpjsŒfĻĖ ’=éį 8įŸJ4åũMIoŠŽČĖğ@*dA‘ĪBhcō#’Íœ|Ē~MF§jb¸ŠÚ@āäTBœã=Í î#/ŸĨQ–ÔíOB i:ÄN 0úUK‡âfĮLT™.,į/#6ķ67@ŦŠŲˇn8<×C{lLMœ“ž Ž~Q‘´Žzõ­ĸÎjЕϗpiú}ķŲ̓‡­2F0 Q`Ž{V‡´XWDĄ€] ~Tg#ĸFŨÎJy$Ō‹ 1uÉĪĒKFxĢyĮSĪ"šPgāšCjåXÛæÃ­L$ĀŲcË~ĩ1_”Ÿ•3=‹%dd÷ĨY`dgéQįņHß)õĮįLw-^Ŗ…ŽđĒži Đ œņSŖ$>´Ŧ8ČyĀëÉčhqÎ0i ۚf89ú{Ō,q%Š–jV`:6~”ßųi1ßžiā:Z4Úšü(ÆŪã4ņŽŠO⑗<–ėOjC€@Įn´8 cƒN ‚GšĨ끜ƒ@Ü8cÍDU SĮ#ÖŦ6IÁ}iĨx €s‚Ĩ!~ļđ€—$0ūõtvwņĖ Ģ‚+‰1€88>Ôčf¸ĩbņ18įi¤ÕĖ'‡OTz”HģHėj2H⊿ėõä}ĸbQēdô&ˇŅÖxÃŖgŒŽk7sŽqpz“zō(F W ķÖĨČeČÔÚÂeÄ|weŠĘG9ÁëVĸ“žMEđGcŌ”6Z Y<0:Đ4Nā‚8ĄāTa˛0M9qˇͰÉ3ĩÆWNjF…č 5;G<Đ\‘Q—;i426æÁÍ@åW TĪĀÎjąä’zP&ĐÆ ŧT āÅJį*ŦŽI=)XÉģ•îĨڇ&šË™ŧÉHŨœV–Ąt¸+ē°CĂ=EodUwvNô¤ÎOSƒÛŪ”0*=đi ‘Å3¸6‚ŊNęBrFĶųŠP ųˆũi=1î)‰įAMašˇÅ+g8Å `A/b2 pôü*…Õ§ž…°7kLI_oZ…˛:)ĻgRš’ŗ9–‘ļ‘Bņ[–Â@]G͊ČlŽÕĒwí"Į– Æi x慇žjĘF tĨpESš‡ @ˇgëWBÚ” Kc)­Šg$SĒŠs qBí#&„JĨI´‚šX)Ā4āsŪ‹ )@4Qې íEķHs@ "ŖaRMj…A ÍZaPH8Ļ 9ø¤#ŊЉzŌĄÄ ˛“d`Ö|fĨWÁëLEã†íHP¯JbH;ÔčC R†íN 0ĄãôσˇŠ`C4 ЍCDÜV™š¨$„b#†mÜV¸ëT2‡+RE9<(ĀôŠĪ5V'ĩiX‘4Œš)ô„f•†Q‘0Äv¨™7sWfN2J€ŠhWaĮJL°@ĪÆĩ1Xˆ§ĩ0ĻEXĮ›}E0+4Æ ļRŖhč|TČÄ÷ĒŌŠC‘Kšęj‹™â‚°"ž9Ļ"Œ7jŖ=š t­B*'@h”˛2ŗāõ4émÁíTŨ3)ų°Æ})ĨHã:ą¤#5Š™XŽ(Žĩ1ž)Ĩ °sF)ø4`ô ÜԌö§`ާ É  VĀ–fļâBäáYÖ{rŽ•Ŋ§Û´’?^•fÔŅ~(Ä1(Įjš LŅ’NŅJŽ8歈†ÁXyHŽōØĮNõhŧÅ,jĢß8@NO$Đ41XŽĸ¤†Á4Ų§@*8„Ĩū\ä÷%Ø˛Ō$3Õvi$lFJŒõöŠ(ų„ą§ŽŅČJ/p°ÔFXæšėۉU>æ’YÕÜĒëCLDd(éNôƒšY# 05 nĖF[­<î.'š`ÆqŌ†ž2@}ܞ})' 0 dPČ Ÿ)8ĪJ[‚%7̘ęģf“ éQĒ„_,~´Âޤ€A ģ؜JÃ!I>´ÖiĖIÛüéĢ#ĮĄĨf'šq ƒë^ĩ ĒĘpĮvz*ušdNxäS˛ŌF]“o¨Í; ”ŨŨ:‘ÍbjšsėŨģŠë"Xãų—œž‡ĩUēA)#Ë Î})Š4Dĸ¤ŽT‘~V^œt§Ånd\Íu7úb:‚áO¸íY†ŗŽ@ :ŲM3—ØkŽÄ iē=ŽŧúŠąn­j6åˆ÷Ѓ‚Ŗ­#O$ú Wlí…4ļ.$Ģ"đF:sRFÄđqYĘæ2ĘjėRGDgܰhČĪķŖv9üé7€š?  8–ŒôÆ)aō†īIÎ1Æ:RFė{RäĀ;R"Jã?Z\ņ’ß…+€G*>•1QƒÎ>”Éz†cųS™r¸Ž3ÅVŽCģošœHCm/Æ{ĐĐã+Ž)Ö 1ąnÁ8ü*ÆāFĨ!Sœ†úEîSYž ũjcą¸ĪŊ$ą÷`ģąéUÃ˛ž†™žÛ– zöéQ†0žrHíH˛0BHĪ9ĩ Øs“î8 ,žÄčŪbäzQ‚ĀŽ„qøÕ`ÍeNGĻ*ŌH$PsŠV./ŖF ×ôĨå%|Ō2qדĐŌ–'Ž?*E^ÃÕō9į͆+÷{{´Õm¤Å9d>ƒ"Ü0Ş[ķ§ ÉîĀņÁĮĨ0Ŗ˙ëPŽÆ8Ī˙*\?8íœwϜ–î úŌŠ#¨ī× ‰ô9éڔān<‘ØûS˛KĀĪ8¤ČUÁ'‘ž(ĐąjˇgŠ\X°9ŖŊ1Pė/ĘqéšFQĶhãŌ‚\T•™ĶÛę^.åĖrʸÅ]Ž~œ×ąˇ‘ĐŽÕvÛSšŨļĘ23‚}KŠ8ęaÚÖ'`HnCĪzjɆÆygŠG&ķ­c™CŠųĪZÎQ9õ‹ŗ-Ã(Æje˜“ŒVbČQąĶŦ$š=ju);šAĶԜ%ŠĻ­ķrjMáH ĸîü/jk>Žjã&Éši‚dÂP[~t3îāUbyÉĻ̐sšw…’Bލ¨Ä‹ŽOJ…ĨÜÜkˇ“EÄLō‚85 H1ŠŒ° E¸—ÉĒAĄcpžI¨ŨŽĩ?p3PŗįŠL\Á$›¸Ô!=úRŗ…_ņĒī *)>O&¨Ī. éœŅqv#Ŧ+ÛĶ)+œt&Ē1š ōvE{鄺ļŪUNzÕAžH8ãŊJqŋŗÖŖ?+séÁ­NČĮ•X•hĀ<ŸJxuB„ÎŌĻŸJ S¸šãšØÜ1úĶ€Îxāt9¤āžIĄ ŒbO#Ĩ‘‘ŪŸÂŒŒR9 ČČ V#np7~B™—Ļ3RŲȤĀ#ŒfÄŅÆ fßZc÷ˆ>ĸĩyb9ü*"Ŗ%OCÛ4'mNz´”ãfsÃÜt§dŽsV.āōœ•)¨95˛wĸŽqAČ9Ĩįĩ&”gĨvŖ‘Ú€F8Îh9īGjŊņ@ÆyĨČÆqÍ Č žų ’OĪj_ƁčhQڀžÔ¸ÍéŠ  piŲã4€úPxāĐžMœqIJ2}(@#“J °æœÍ8ä֖ŒĸMRÕ?4‹Ōŗ@É­F$×ė×<ųƒĶ[‰ė}gl‚vu @:Tƒ(>•pW9qØo–; āôŠ1JWŊíÅ9iH4 ^Ŋ¨}iĻ$qIˇŠ—nE ^ĸ¨D8Īā´ĨyĨÁ cvSJTĀf‚¸ E)"ܸÅQt(x­w_jĢ,CŌ„HæėjŌHĒRÄTäR$ÄĄ9ͨc“#­J4Ä!\Š‚HAĢ?Zi)>VđM4zRƒÍjf;Ž3IZvxÎ)ŊčĨ!P9Å8ŸJ Đv“ĐRƒˇŒTĒā0>ĩ4VÛäŒį°ë@ŅoJŒË:ĒŽk˛ļ…ŖAÅVŅ4•HV@ēqĐVÚĀ!ęr+žrģ;)FČd1…˰č*D`AcŌĘGjđ‰ÁšĸŖqéôÅYHŲŽOO­Al§;ą–Ģ\† Bô,Ĩv‡< ‚hãYálĻŌ2ÜņÅ$ēt„.Ö Î=é˛24€GČ4Ģ)G OOZAƌ›Íkvķ†BTžUę ū•Ô<p|ÅP8æŗî´‚ŧ‚rägŊR—r”šŅ˜M 9ži!“Ę“ ¤Õ‡ļ’Ë'āįš‰•1’ë“Û­h™MßSF?Ū.A ]ĒNpGLVls˜žPŊOŪĢ‘ÉģúŒQcju/Ą $žũéŅ‘Ķ=zŌnūî( 9ëëHŲ1í†? …Ą8lc'ÖĨU ƒÉčiNvāidĘLŒ§§,œōô̌™ęcøU9 rŧ{™¸ĩĒ&GÉ?—Z™H`HwĒ #ÄØ8įÚ§Žaˇ–ĸÌ×RvPÃqš…Ŗ'Ž98éS Č#v}ũŠ@r~”4e ŨÔäŠo$į=ëWž z‘ĐņUŪ8ÜŅs7Â$ŒĀ‚q‘ƒôĄ NNsíPē”cíNŽCˇüE0LŊ€Ę9Āö¤w<Ô0Ę€'âŦ H>Ƥ´ČČ;ŗŠzõÁĀÆsJ3Œü§ąĮQMÜIíëAC”ØĪnŨéėHëô¨Į`įŠUa’ÉP1ĖH<āc§9™;qžžŊéßáéíKˇr• sĶŊ1Ũ“Ö—Ęp\ô †ÉΝԐ)ôĀö=éˆvōWå¯z@H#‚=)9}zS!s÷ŋ@ 1Œ.JiBpĮpsO$ƒÛ  ’ŧ€„g&€#I$‰˛Ōĩ-5ƒħãšËÚ@ûĢ“ÜPĘI(G=9¤ÕĖįJ3Üė#ēŠåAV=č˜Ÿ œú×’M ā6֕ž˛Oî§L{žôšN9Ņ”5ZTwšĪÖ§2‚:×6— ōŽ9Š…üŠÔdzÔō˜ķžiō)|ėō bO<iNĨÉĶšZ9Žf9ÁĶ0c5ˆúĸ–áɨŸUd=.VĮÎo…éŒS ūõĪlgŸ^yâ†Õ— ũ R‹1Đ…õ¨ÍʁŒŠæßTfbĒĮëL7Wnŗgԟ+ą.hčšå}jš@ŧšÁûD×!}rÕ—›W™{ņO‘˛]DmÍv g?­RšüČč9ÉŦ‰'v9Ú[2id™•]9ÎõĒPKVO3d×SŧÜĒ’ ’MP,”r:­i^*A  8$vŦŖž›F:SLéĄ*7pi§‚A=¨9ëGČĮ<‚1LęN9ĀĪŌ§CžN:zUrG­JŸ0g>”d™ņâ‚ãÛ#¯4ŌĮw#Al\°ڌįĩ=‡Z9PNzĐ 98ĀëQļx\cÔüķ’)0 ’;v LkŒdŽ*2ŧāõŠŽŪ@8íHĮ99÷ –T¸ˆ€ŸÆ˜ĨąîÖ˙ęÔz ´•Vûĩ9íVĐņ\åĮaāf”:Đ:S”PPŌ8Ļ‘Š”Š…ĶēÔjpj@}Š…I¤Xžb}j@iĀāĐ0Ą]А-?1=Š›ŗŌ˜ĮŠ\q@#){R:SZ‘L4ⓓJÜsMV䆚…ŽML܌T]¸  ō9ĒĀøjAžÕN`AČ  °qNÔqH`ÔãR6\sB°## ŠŽr­@U˛j\į‘PĮZtOØĐ†[†|V[l‹ÅPaéNŠs`š %`coj‘$ 9Ĩܲ¯Ģē˜Û"€'dŨUå‹=Ēd”ƒO ԁÃtmjĖSúš$=Ēŗ+!ȤĐĶąĒ’duĨ—•v5›Áļ&ܕ;‰Wž´ŧn¨Ņˇ.E<U"A–šF*BAĻf˜Ō‘žÔ(柊c&j&‹+ŒUž)¸  Ų#`ŠŖ489ĩåL5U–0j€ÍI 75n9AīU勜âĄWdjcT0#Š\fŠÅ8=MZWŊ;…•Į4 ķš0)01ŠĐČvî)¤Œõ¤4Ķ@-īI¸ŠõŖh&€&€Á#ĨkhāÜ_" 9$vŦČĄ€OŲxBŅIf# `j™;+šSW’:{XĖqŒ€1Ofdõ÷§;‘ÉééUžF’@̐>ĩĖw ŧäzSVÚĖI'Ķ4>@ÚO4ä(8ë@!#-'đ!r>b >‚š™Īšacã'  d QÆ)ņۗã īRų{ĪĨO ãƒ@ÕÆ˜—fÕgž}M#Ŧy9ĀAŌI˜•c“R2Āa¸ôöڌ <ôĻÅPģÁ÷ÍM<$'Čzū”ŽZ}T’øÆ3ĪZlČX“OPTeĮ"&3Ž*Ž3äÛ&Ü{ԐÜ"šāô4\@¯&āŦŋF–ËīZ] ę>X’vbŸ(Įz „§4ŌĒ2 ‡¯­Û„Qß>ô›ĐlW’‚1š¨Đ<#xã§ŊmYIÆsUūĖŌ7Îß)č*Es.?´:äĄ\ã§5 ĩ!†æ’j}ąĮ…g=id‘YëøPC•ØÉü̍‹!U=AĪ5œúsíܒe$vŠY…?…KÔ°.ž0E$R]ŠĐZܨØĨ1ž>^”KlC(+ķv=ŠčŌ4Ŕû‘Ú­”iSa8|}(tR{ØrA=ĸ2įcļBŽ3Z Ž'ēœcŽ{ÔsBé! ŖZä9”Ŗ Ī^k.ãO…É!60čEk2É͊¯:4‡+œûJ{IŖ›Ë,ŖĻ*n™0„cŋJéQ`W8ŦûŊ0r~éÎxĢS[1Ļīr§CÁëëS1ŪVã¨Ē’Āa ’įš`¸heۓÁÅZ×SxÔîh+áFių'īqĪj¤˛å¸” ūaÉzbĩĩ$*6úŠL:â—x|õéÅ)QÆrxÁâ‘[‘ŋNNTöĮ4ä'ōãéÍ&ÂOSé†4åĀi9#ڀ$ Øį¨¤Rāōr=sšo#-ĪJ@Á"‚Ž<ƒíAëĶ‘H01’On´ģOlûĐ3ųœÔ„¸qŸN†™†+ƒØTgīI'ØĐORf*7 ŲĪ"˜JîÎiǁˆĮ~”ķ€#Ÿj!äcļ)ŧŠÎ8îOZpW'Œ3ô¤bpŊ!õõëMxÁ#4ņō€=qøPNŅīšb mŅ8 ĐŽ2>•f-HĢ Ų“éQ-žŖÜS#~Üzw0ŠB2FšßDR‰˛AĮzÃ0ė Ŗ0íÍ q4_xƒŠ,Ž9ádļ7Āš ĪQN.N1ˇßåēÆc<})~ܧ #“B‰Ë$ãŖ4$PÄō¨ ¤āëUEâI8=ĒĪzĖܚ|¤\Ō. g~8ëUĨž5\y„ū5EįwČ Æ¤K*ŽFīN˨\kŨ<ĪļŒōz tpŗ1f88ÅYKt^3‚;Š–;y%}‘)'ûØāPØŌš Å!Â*䓁ÅjCkäGš‰/Ö­[Ú-ēį$ļ0IĻ\¸T#¸‹•ÍbŒHæOœ•ôĒ*ØgĶ"‹×2LÄš'>ĩd$¯Ĩhļ;)h‰Îy'ÆÎzæœp9¤b9ÜIų ’Čs‘ƒKÉ,N)Š@ԁëIļšÍ0!hŗUg„íX}ĒŖ)CÅ>l ã­ô§c4ƒĩjb4éKˇŒš\ҚUņF­ČσĪ sŽhPåW ãĩv> šŨņļOCšâÔSšęü6É/Ąâĸ 6ĸũôvEKŒg¯Jk*FG­LĒ ÷¨?2eĮjįGc¸ŗšy;TsI(ŒÔkēO™ŋ*С¨Én*BūhájŒ¸Æ0*ŌÄ0Ž4‰"@‹’iû=úÔ21DĘöíëSA&îIü)ô)'¸É­Ë šįŠz[„*ØĢ%׎8ĻHÁøSÅ&%{Ž*Ž1Ԑ…*9ÅFÎŅRˆvŽI#°×Œ:í¨JŽĐ ÔĻBŧd‚âa<ĶAb´¯“ĩ†1ĮJŒaŪ¨Ŋŗ — ķĮĨt’Ų¸ĘmœįĒ'ą;SRMÖĀŧæ¤YHā öĢĶX3dƒÍgʆļVŠÜĨ&‰ŌPNHЃqŸįTU°ũ3üęhØēž?^”•ËYln… ã“ô5lžF>•"°<HŅ1O”’{uĒSDŅ0*2§¯ĩ^Š'ŽžŧĶKŠĪqéM QL­¤¨ų˛>ĩd9ےpšīU$…ƒ–Eã9¤I‰^AúS܅'Ëų=q“Šp8’*ēJĖ0ÍJŦ ÁŗÍMSč5“6;įNÜ $‚TœfŸÁ9§­4I9iÕ6Ū1ÔOlŽĮaH ŠV9ČĪZ°Fwž´¸4ƒ,2@Įփ‘‚~” Bü‘ČņHc“×4ŋ3ííBį‚G€ō„’ =[i 1$õÉíQgzԛŋw’3@ÅfsŽ9¤ČĮĘr{æ—p(Ņū"›ŒžM! ˇ'ŒqŠQ€3ց°‚šĪLw ž8ÁĪô@I9įžŊ (c’IúúŌUr[Û­.py ÔtĻ!ۗ`ûŲĮëBāļrW‡wȧŖ‘N(ZiP:V&…˜æŠÄ€¯EHÍN§å¤R,o'i‹’š§9¤9Î( “4cŠ`7Å@◁HhíAŠ=¨Í!⛓Ķ4ķŌ“Žâ‹ĖŠ0 ^hĨŊ &E.8¤ Ōį4@†{ ŠE$TøĻ‘ž´ Ė™sUŽEiË{U#ÁÆ) Ŧ„ĩ:MŠŽWƒ"€.4ã4åYzU<äsB°††aÔ zIUËBļ ŠÅĐF3AÁ >xŠA@DČsÅ )NĨLpxŖhķ@Į jT~1TūxĪ*Xå ÔķRĖįŒĶYi¨üõŠG5W ô§p*L R &×"ŖQ†ÅY žĩĻEc$āc_hY†[ƒW RĢ´a~ŖĨY%˜&ÆjęEeF2Ųv7āf“X8¨Ļ…80=čnTŠ’Š”Æ´ķ÷ąHG9Ģ$Ŧ隩,=x­=Ē7\ö¤ų[ŠO˜ĪZÔČn=évúĶąƒMbs@ §*āķQîĮSFīzŸŽÃë]…$tžōķō7ozåÖbŧ ÛđõÆ5(،āāR–Æ”Ũ¤Kaą= G;ø9gÁü*T ¸×)ÜG4{›'ĩ W‘ß4ƒs>ҟ­ZėŒri !ŒÔą’ãđ)ŠJ™P‹2` ŸzlgolšīgŌ•öl/Ŋ_BŽ% ĸĮz’ßpĀ4ÉbØFĶÔķRG”éÉĨa\ŧ˜'ž•’e°3Š…™‰ąĒE(ž(°&A1t ÅU’äãÛŪŦĖÎÃ`c‚jœ0/,Næ?ĨØĪŪ˒Į\š–üą–ÁĢHŠnp=Š’ Q•ZqŪ\mʀĩ9dŠ5&Ґ}č Yō@Ē@Oånã­Hąųc‘dĘāš7mäh—qHrN*ŧФ§i|wĢką—9ã5^gˆž™#Ō‚Lų!ul КiˇpŖĪz¸ČI”ĄĨqĩ@ŒŸø ŅÛÅå&r€÷ÅYXÄ@ĸŸ1BE1æ~3RX†ę'MŽ0ŨąHĻ›C H¤ãœUy"uŒúúÕÉÔ¨ųār*Wn ”†ˆ9›ŽÕ$hŒ8=ÅL¨6ō9§Ŧ-ā~(@ˆ#ˆ+!ų<Đ|É[q=zâĨ.7nÍH‰ˇŋ‹V(É –Î0)†ĶyÆ?ÔŠ9Hˆ wčdĩyǎZDSF3${WIå)Œš…íČÁ$w¤26åĪĨe4oä|ŨĀ5čW‚Q’+Ô´ŌĒNÚĨ&ˇL˜ŽŽĀšž6 ģ{žõ °°Č+QxF@éĪJĶsTÚ/äpn9æŒ ĩV9Šo¯8ŠÕŋģĪzV4M1˙0įvëUώæS‡īĮĢXsÜ÷¤q€¯J¤Ę1HČÄgŽâ­G*œsLš%qœüØĪS/˜eã֞æwpf™`͚~Ėd3ÅR†āddįĻ*מNHPXņ߃SchÉ2`0q’ŠĻîČ84ß4’0sAįëéAWÄ<įĶœ0Ŗ'ũЧpÁ99 A$8>â€ĨúĨ1œRäįž)Xˇ÷‰Āš@7pÁÎ9ö§…Ps‚z⛀8ÆOj@Äāz vüÏ—Ūˇ!‡§NÔÜ`đãN-ĀĪ~œR*3ČĮŽ) @Áã͚sxīšc(Ũ–č˜ęHãĻ ;#Aȧž)§“ƒ@„ŒĶŗŠŒ’§¨9ÆiĄWuWųŖäw ę)´GŠ’F.å÷­ ˆ‹bŖ,OjR§Ą”ĶžôŖ‘Ԑķ@t  jÕŌ÷E{(čzVH$ÖĶĀ3Dsƒ¸ReÃsĶB!Œ‚@82ŋÉÍU2ĄđIŠK` å;Ņ2°0)>Ô]ųÜT !íŌĄlŪ‘f猍>Ŋ)…ŠœfŖˇmŧģtíN‘ƒÃŒö¤ŗ%E2 ķŠ{JąĮ´M"¸T2*\3āj­r’š )”F*ÂģmāķŌŖŗžAÎ;T› 3@;?˜%ÂgqĢ0ŽÁ–?ũz€Ŗy›ąČīJ•qKd+č:YI'œãІ5ÚĄ‰üÍ:MąÆëęiŠÁžõOA­K@Œdâ—*@Ījj #4Ąl–āS@G$lFsĮĨVĖɝŧâ´0Xđ>QQʙÆŪŋJe%܂9Y¸#9#ƒŸÂĄ(A,FH¤ũãŒc¸ m"P އ­;bHŊ}iD˜(1íĀPhܑų 0OJT(øŋ:‰rä͘oč0E4&!‰Ā 8ĨĀFųŖįÚĸ'';ģOÉÎâO hą"ĢĮ•Î} Dq;†;­H‡t|ąãĨ9[ĖB„øSPŅîŸLÔŠĖ¸!jŽZ&Āĩn~8¤+§sWõ§<{sN™@`T^*PĒéĪ&‘iĒ€ƒõōŋtŽôĒv§…Ÿ5Aæ0ąJr¸8$qCFv†æ–5zāŠ@FĀníĪ­gŨ@Ž­šÕ‘09RhĮ–Hiô Î6îČbJÉhNŌ¸>•ÔŨÆÉĀÁëX7m¸lqƒÁõ§Zo[3.HŠü˞hŽvC†ZēčrzŦņ3ž‡ŌŽæŽtN“:įĩH¤3ĮŽk,ŗÄp9õbĮž¸ā拟F\ÚyĘũ)ށ”Ŋ}iVmŦO^sÅ<2°õ‹ŨŲá`Ęw.:RÅ30>õu†A gŠ­-Ŗd´L š.ŒÜmĒ%(ŒœeŋZRųÁúÕ’EmŽ0GëVō 4ė8ÎåûqŒwáƒÕÔö¨Ãŧļ9ãŠs2 HפÕ1ų`pztãšvIÆ㎴Î7`œÅ(ÛĪ÷ēqIÁÎ=¸ëšCÕqN(ô;įšRGː8éHbî=Į?Z]ÛF Œ‘ˇŠxĀP0:zæ€>Ū@É4rsĪĘzäöĨ åqųĶrŲÁ;‘@Įr3LœãõįōĨāĀôãžôà āûP…qw=sĪԘO AÛÜfžĮé֘`įãĄĻ&Šãc¨§XdrG#éۚÁpO\ū4)PŨ1šs@S‚2?Ĩ)UĮ ~”Đ `ƒ×֗9įđ d`‘×ېî+ÔdvÖŒ/z\žAëNëŽOz3ŽF9Ļ€pŧߊ”ārĀúŠC´ļ8ĮzĖŨR0Č“ĮŒqļēk˜ÃÂĘWŸ_JįJą_~•Ŧ‡“Œ…Ĩr5ÁÜbœA<HsŒ~ugqØNĨÉŋNũ(r:R)Aö¤ęy `RbœAéŠ9€zb›“Oį9Ϝį8 Pg<HriyëŠ^ŖšgN´”§'FzCƒíMīÍ8ô¤Ú{PNJN3Í.qMÆzĐŽĩ:‘ļ Æ8īS'JFHĨ “4š¨ķKš  fM.M?ë@¤”PŸjQE¨sI֗ĩ í Šĩ&(\Õy"ãĨ]+LdĖÉ"Į8¨Y=ĢIãöĒīĩ‘#ĨFįĢ…1֘É߁€`yéNÎÖŠˆp)Œ„­cã|÷Ģ(Æŗ(qV#“=ęÄ^švA¨ķŪĨV(PēÚ§<ҎŠ,2‘VŒåjÕŊČ'ķC 5^HprŧŨŒ†^ĩVâ<1"Š[^´D,‡Ú´ ¤Ņäš— ĶšEŗŠNĩ$ƒT[€9§Š4Ԑ69ÍXG ÔË ĮZϤGëLEÕqƒQ 0ô408ÍlyÁĻāP§ÖÚ¨GɤŌ•c=GãV| F})Ļ&3Z‘›H#š… $dtĢ6<‘MÁŲ  žQëŠ6‘VJxcxPe\°ÍkX# ˜ÕO;…TČ^jÕŦŒnP†ÚCsīC.;žŒl)œđšwįŠd ž%cĪŸÂœHqĩXqÉŽkä29,yŠ BBԜšd@éíVmĀ\0ĩ ‹m0Á¤Pe‰ëƒíOW$î#éLiM įօĄCæpW Ú ,#ˆųĒHĀÎ)&E# 3LŌ/ ë9TĘŲ<˛ī†Ú’j’ n1õôŠb–L’hĩ% Í+Ģ•âĸåÅKÆ&MŠķFōœ ķۤРō=hYÔd“ÉâœSq•‡}ĖYSąôĻÆ%8Éã?IA›{jĘĄ H§bĶãT¤)ÅDŦGŠĘK8“Ab¤ęI8^FŠW&´ 5@BîĀ 1FXdzTlÄ6åbÖ­yyp=*&‡žšŖV Xb)€…v‚:PQ”SãA7Ū`Žāi ķ”wíRo+ˇåëPļJí Œwą+"äHĻK,nĀúâĻ.ģUАO­RÜPĖ{qSF/Ŋče°ëƒÕßō)Đ2ŗ¨‘€#­Yt.?ZLkBš”9ĪĨZ‰ÆĐAĒĻF0:T ´n~\÷4ŽRõ4HËd*D^ &ĢĮ(É÷ĢEe÷Š čMŧČǍ”o uĢ C.¨™lĮz:‰ yK&XÔ,ZsGŒĶHĀ ž(ĐËŧ‡*Hk™ŋŒ‡Ūį85×\|ŧp°õ(‰ō€N)­Âí;˜jr1ŠÕXāj?8Ææ7ŽũņR@8ęzâ¨ëŒ”ˆĖ`î%sT倏™{VÁ_séL)ōą#éF”Ü ’H€r3ÎjÜs‚¸É" –[*)@GãLÆō‹ąĸ%==qN!ON?ĨČ#sYA8¨Šc”ā8=M#UQl>hTÉ?8éĮJĒÉ,Ü \đjâļė`Žiåw Ÿį@ÜSÔĸ˛åZĻSĪN)’Ųäf0Cg׃QŦ†2CpGķL›¸ŊKdä Œ’1Ÿjx;æÎOĢĮ/4üß#ķ¤h™1}Œ{sĮ4‰äũŌ?*B28 ū‡ĩ( € #<ôīéHĢ€°Gœ‘€{õ¤fAĐõ=jQķ`ry¤;YpN´ŧįn}ĀŖ‚IĀöĻg īÔf‹šNASÅ qߑIŧ…Á9ÎqڛŧnäŽzP!í´õĪšĻ’íčM7~îG§éM$ŧIZ2Ű2#J ‚Bäú÷σ‚AüHšĀƒ‘LWäw=úƒF>\šãëI¸@įąúŌ†€;zZqwØ'ųiāgž:wĻ3l÷¤ķH_œsß΀¸đ]@Sō‚q:hb‡$ä”ķĐÔaÉÎAĮz7gĻ:`ŠqėY°q؟ëJzœ‡ÖŖä;ŽŌ”–8ČåG~☇ghį-‘‚}Š›Č#ˇNš€6ΚĮ#ÜSš ”nî(É*9$¨īÜRŠ`@8äwČϐš‘ŪÄķŒ`åhĮŧŒ9ô¸ĨÜq•Á?yF?Jˆ°ĪË÷zP{Ō#œ}F:Đ',ĖšéÜRŠdŖ#?ĘŖÉ Hî>´ŨŲlpĮ=8SJÚ(aŒ¯¯ņŌ—rîÎOâĄrq€N3Ôv?Ō€Įvy?L,,‰iĮ úåJĻyį8Îr*¸`@'¸čOčiôĮ2-! ØÛŸÂŖ(ģŽŋJ„LCp8éš™ˆņ¸uĮ€ēcĖ*:ĶÜO'§<â“Ė$$ž:RĢŽ:Đ+!†6S–φĀííVr89<1žEgĐŽdĪ@)ģØƒģ‡59‰ įš Dā}Mŗ+ ėsƒ×œÔáį"ž@UĀŒxācØQ¸­d#Žq\ÕŪDäcŊt2>qôŽnéËÎ͎3ZBį5û¨ĶČëKÅ!īŨ¨Gép\é×#įT'9ÚV­Í¤iWđ*›hÔ÷aĮ\ŪFmIR#\1Ž”Æ„õ¯@ēđeôÍg\x.T]Ņ9>™ôŖ™Î?ėāŽ¸õ[ā‚wqZmÍŗhˆô8â“O´iîâ!Úyũi6‹ŽúuĒíŗBŲåEN¨UAųĨØ €ÚJVÃqœg€=+›S¸‰˜ŧƒžĒÄļ`üš<ņQ¤_ŧÆiã9ĀĨ°ãšiä=1Ō Måƒcß”õų€\gœĶŠ$ã¯JVÄą1‚9éRē’F8ĒŅ)Y9歅<šeđT7…FĶ‚䌁“CĒ„ÛŽ´îSE9N P>呸úV‚Ä(hU‡LŠCvHŖmlŪܟz™žEÆ8=*rĄ ĐB˛d ãĨ2:‘ÄŦXĶjČŒÅ,Qš SđĀíJÅĸ"„AHŽôōŦü=éÂ&éAhl‘—^OåQ¤X õæŽĨš ɧyAyŸZ)ĘĄyúŌcæÆ*ÎÂ&ĸ›€xÅh‰9¤1m ä~âI^Oâ)IR=é’Æ”ČɘS‘“íš”WæšÃĩd“cڜ­åČW9 3Í:å8WN:ŌČ …a͆IŨAŽsVÕHZĢ [õüjä*q‚)64ē UķTgšrkQ“j*š!b1×%§Ž‚Eíʞ•j váŋ:’(ĀĒ1ÅR˜ŠĀĮsCĻ)ʙŊ)B—ĻÉųDx$‘S˜Āb}ø¨˜’NE,U•VEĀČ5›ĩ1pŨ:S:RF{#Äp@éSÅ #?˜íVYwqˇ<āšĨ4E] wĻfãËĒ-( Ü ņúSÔä€O'¨÷튩ˆŧc“ÖŦ‚O8ĀčqI—\yŋ„ņÁįĄ¤$•Ęƒ‘ĐƒĐûĐX€#ŸOj0Ã:r=ipcyëCN “¨ĻũŅמüw ąĀįŽŋJãŽvHäéHŦOå‘LČသŊ(aĐ3‘ÅqwáNž´íÃųúŠŒÎĪn(%ƒp=×4X$×8˜¤/Üzר ķ’=Fh8 Nxę¸î( ã?—qLÉėw``Špp‚9SAP ?…10.–ėpF:ŒS[ƒÁÎ1ī‘J+ĀÉ ĨŸ␄įį}r)ß(8cލ¤Æ?Ây^ô„ĀĮ¨ ą8ÉÎŅĀ=Å(lŽƒ‘“ÔR…^˜9íH ãļO+ūĀ@Nė§ÔS°Bã$÷RM#uĀ!{cB}܆ÆyéČ?Ō€Á“ÜW¸ĪqBöŒôúúRˆŽŨÄmSČw¤Ũ€@Į öj3p$ãÛë@!ēƒ“üéIÜØ ņ€;Ķppcíץ¤Î €;ũ 4žT_NÔå+†ëÁö5 ÷‰įĄãĨ11K‚pG$zãwĻî,psÉũiš ’xĪ(ž‡¯Ö ĀíĘã' ÷¤“œ•NŲŪ—ŖhŋCH S”î9 BTn?60F;ƒüéۉęzdĶKÆi7@Á'š .I¸äā Įžŋ<1Č>ŨE8šĀu‹6TŽßZp;ˆĮjJƒ‚š8üÅ $÷ i–UÁČķ¤/ģøŋ „?<œ{įJĪČ9?…+÷sˇĩF)팚˛¯š‰ēŌ“Š@Ų§S ÅV’ z ¸FE4 4ŦLmČČŠ„i2ü§žņƒPdmËÅM€GŠHۑÅ*Ÿjž;Ëļ@*O&9E' oąXt )=ĒW´ūëtŦËų.m9+IÅŌ1H˛˜Ûž•„šĶųÖ­EŠĮ&°3ŪÚ+<Ú{"ą¨e#ÔŽ!f1‚+Đ/t¸n0qÖ°fĐdRÅI9č1PĶF°ŠšĪ"1”ēļƒŠ–+ۘW>ÄÕ§°x ¤õ]ĶbdĄ,:DfĶ-Å3wNžiĀɝkō(aztŽ'Îmš#‘W- xÁjkąm+\™īŪŦǜr8ĄPméS(8Æ)= šRUĀâĒ€rr*üŖĒmÉé@ÖÄ%xÁĒŌÄÉõu—œ“UåRx)ė#>u1‚qŌ°ĩ `ęāŸZčŨr¸5BâŠŅq[ąÅËœqÍ5]ŖÂäâļ/ŦY>p2=EeÉ ÷}ęĶ7‹ē%~†”‚܁ŪĢōÛŽGŊLŽĻj¤5ЎÄzŠŒ Æ§b_œ>ĩPXā’i ĄˆĖPáČãĄŠæšk™<éAĀÜŧ~8¨ ?PrHë͐Ōe‡´2ˇĖI”ō¤taU74OąƒpF)íŊ¤ŽC!y<ą¸]‘‰žëv î)+Ŗ6œ^ƒS&yéÉĨ íÉöü*•Û Gų˜‡ĨŠčHŖŸÂļöRåæļ…{hߕŊIeƒ$Îā:TI!°ß{Ķ5a$Ü0#žh’5~AÃ}*Õõ@¯š0y隔āg'ƒÔU$gVÁę*q&@¯Zã.„™Éęz`šxSĐãŌŖWlr0Gō§4€I'J“D~lsĮãMåNÆxĀ)ĖT`äzwÜą8ōp~”âę}¸Á¤ŨœIΏ4œ îĪžj2XdņއЕI9 ps‘ŸZf~PvõÎ1ØĐŦTj`lŽGs‚=)…É73€šéĮJÖāúöéšbœœÍ<ž;ûûĐ+€!Aõ<ØŌÚ‚1īOcîžŧŌŖ 9ãŋĐҏŋp~éžrĪmĪ|zũi€c<î9ÎO˙JP ('Œž=&@L“׃íK”’:āâ€庐úô '9'ô4Ŗ'8ãąĪķĨfr@fn*uādŠHáRs›ĩ8ŠĪĩ2Z§+ŒĶ€"šƒŋJpúĐ4‰W‘ͧzdõĻŽ:søÔęé@î9oãJãrã4‡ÔĶÛ„Ī­"6AˇhÄRą‘E[pŲښUŖpĘO•<ŠĄ‰ ÉéŠapÃkŽĶŽīH¤ĮÔämڒX‚ŽAÁDņÆ}(2ŽG\wî(, ūŠÍŌØ<ûôÍ!ØĒsœ“€}é ¤ˇųíN#k}âÜzöĻsœāš0FC}GøP‹‘ÕCqŽ{Šw`ņ،õĻnž8ãéJrG'¯áL}¤zg¯¸Ĩ/gœwÜ#­;;zķĮ¸ ‚ Žƒķ¤…Įãķí¤c<ôã­+ÔƒœûRØ.9Á8;‰ĮsԊB9‰8ãę)ŧ0NëNŲƒ× r)€H6œIäduå 펃š͆eŽ>a“Ú†;rqÔP!㌜wë‘KĶö˜¤ #\.NG4›‹?°ä ãÉmØĮ˙ǐ ܎žõíšФ Ič:ķ֋ â°îÄzuĻāō@8ëKƒœ“ŽqFėtį­pG'ƒĶôŠ>RH"ž¸^¯#“Œāqí@š#8$1Ž(' Áũ)ün ŠBsž;P+‚O>˜ĨPÛ{ p¤fUSDˇa…8Íej7)D<Ķī¯B#"ąŦ‚ÅÎIÉĢKŠÃˆ­ou'́#ƒMQN ‘éVpNN)ˎũ)ĮZP;ŠQœz‘ˇ$f™Žzô§`Ō€Ų=)9šv8āsHOlS3ƒĀ§gåäS’Ɲߐ ĻîŠp÷īH-Ā ‘ĪŒāSŠãĩ5€q@{QžM…!ë@ aŠ?qÎzSNhz1A$Ōi4„zSŽqMį4Å Á¤=h(ĘįnGZFéŌ•HÛJGh"sH2)H4€s@8Ĩ⛂h€äŽiGŌ…ëH8îEŌS€ö ņ@Ą œP1Ū€b•‡Đ1“JpG=h&—ÜⓁJ{PŖ#¸ ‚xĨĮNhAĨ=W'‚֘<ԑƒ¸ `zŋø4Ōāü…Ž+žFí\€Ą) BH9&ēėYOâ“ĢâĨIj >õ"ļ*K/+æĨ TRJ°žô†YŽ´bĸ žõ # cēRš3Kž(§4bœEPqM+Näõ ŽôŒ¯ Ŗãš°E0¯Đ2ŖGÍDWt§=)  ƒ"žžÉíQí"§†âĄŽiA>´ÂäŲÍ(8éQƒNā}iá…Gۜ9 d O54đƒKQƒO€ûSŠ !RcîԇŠaéÛäĐ9Ĩ恍*1U$\ļA¨ĨNøĄn&4Âĩe–™ļ¨L¨éž‚ x¸éWŲ}Ē2”3 •5,rŪ§’,ķUZ23Heԗ=ęÂļGZĖG*jĖrđ2htÔáŌĄVɧįŽ)€ãŠJLԊC 5ļáÁUŽôģF*ZaĪdT’D-Ā+}ĸ 0ESšØ¯**JL˙Ųleptonica-1.86.0/prog/karen8.jpg000066400000000000000000000371361506303110300164270ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā F˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?đ/ãüi(ĻŅE:Š(ĸŠ(ĸŠ(ĸŠRry¤ĸŠ(ĸŠ(ĸŠ(ĸŠ‘[?ZabiÉģ<æŸPw4ņ÷›či¤cŠ)´R▊(ĸ”)= ĨzŒRR¨†N=ĖC„R}ÍFOĩQE x§ygÔRųí C¤(E6Š(ĸŠ(ĸŠPpr)é÷E: îjFûâ™E.܌ä~tÜsJÜqéEQEŽÚ 'ŊQEuúŅEä?5HA?tP-æ#Ą¤hĨ^O3{zĐ͞ÔÚ(ĸŠ(ĸŠ)ĘÛiKŽÕëSĶî ŒôĨÁ#8✃-HĀ—ĻôĨĸŠ(ĸŠ(ĸŠRry¤#Š(§n#Ą?˜õcųŌdúšJ(ĸŠ(ĸŠ(ĸŠ)§­Jß|SY˛sIND,p6įŨ€ūtå]¤ō3ėsNf!ŨT÷ę*(ĸŠ(ĸŠ)Č9Í)N2)§9æ€2qHF QEQEQEQEQM=jgûŋGE:5V8fÚ=jO)Ŗ'ठrOŊCÜŌ‘ƒƒEQRÁ§$ē ĶZŊhØ=éŪYÆG_jpbϐ¨aš…—i¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)§­H[“īMĸœĄIå°>•vœ*–`:ņKqˆåz`søUÅ<&ô$GZMƒ>Ô⃰ĸŲņ‘I´z ĩbnŧjÔļ°É_Ƥ¸Ōr¤×Ōą^ÜŦÛÔŅÚOû‡oŌ›5ˇp>•M^ÕšJ(§(ŨŸZmQEQEQEQM=iÔSē ËJ[žéO@Ņ‘Į¨5Ĩ<‹5˛mÆqúsT'ˆ+ņЊ–Øōú‚?JHãË=‡åS˜1ˇ=1š-Ŧ¸9<ÖÉŋ|kō? z{TÖöųUäw­Ŋ5C0C€} tdáâ0HöŽcYҘ)¸TƒķJ—M+-¯ĪÉĄ¨omCÆI{€+›ē’SŌŠ¸&ŖĸŠzŽŖÔR7ĖÜShĸŠP2p(#ķIEQEQM=iÔR¯Ūœ)ûÕ*HŠ0XūU+HĄFÚ|ĒŽŠÎ2;ĶíÔ)(H$ĪįH‹´ą˙X$ŧŠ g#¤–X@́žÔօ”åô§[DÁƒŸQZIBŧXY@+ĸŌī~Ōåmp9SÚ­ÜÚŦösÂTƒļš-ä†-Å SžEApŌ)lĄëĮôŦk§ Ė\{•*¨b ģøÔtRĢm4”QEQEQEQE4õ§R…ÉÆqOHÉ88Š#náß?Ĩ@ÜŧŌ‡$âĻŪL`ÔõbA#5< ûŌČj]Ėŗį8ÚØúWMor’'ĖŖÍœt>ôŽ7ŋ8Õ4H‘üĮ¤ųņÃvĮ­i&Ÿ4Q‰™]YyYã¯ÔzTÉĒŧ[~Ķ€Tå[ü ZŗļŠ]66ųwķÁôŦCOŽg9@'‘\íæą¸fÆėsYōØ(\ļI÷5HۅbUvLß("™EQEQEQEQHzŌԛyūĸœšg։’A¨‹֒ĨVČÍY‰DŸ)áģP ¤ûHÁ1ēũāųdÁ8­Qg5ģd§ø—Ö§ŠPËķČcö`jĘĮîÛĖ~Ÿ(­­Nynˎ9ĮĨw°Į–oJÃ×ôkqa=â)…€ÎŖqXQŊæ…yņ<–Į‘ķΧ§ŌĨšæ)ļÜÂų8Ē7č_¨$ņ۞ψ`ņĮŊd\ÆA čzŠ‚hĀF g#5B]šl}ڂŠ(ĸŠ(ĸŠ)î8t4Ę(ĸŠCÖŦRˇ88Ģ ‘ēxcЊŠ"ė|dĶ(ŠUžoē?ĩ//(*ė–32†*K/ˇ?5`2.Ōv°ä ÔļŧW…`šRĶ(ڄū•ĢĢÆ1ųƒÔuĢ‘F€€Q‡ļŪ+ ĶåXšUį§ÍÆ+­˛ŗiQd”‚O@: Čņz´j/;^UÜ=‡5#Áļß:Œ0{ŒW {mŸŦ{f 䞀uŦûŨ5í"/ Ös'Ō1ŠcŽ÷ĻQEQEQEQHzՎ†˜Ė0E5w}EN„—h¨\m,=iī~*ũáõŽĶÂQfō3ØŌŊ21ĩĒwZ@R5,įŽ;V<đß]Ōģ{TF#,ķ`Æk2ūŅāŽāĩbŧˇ(Ųķ[5žŖ:¸Ũ3|ņ[ēvąqŒĘYk´ąŧûBžMh‹GבÚĒĖģ1ÁīX:Ëa1Š#{O ī\ƤĘ%(UU(Ē>Īgö;¤?‰Ŧ-Né¯å;ļˆ—°Ŧ‹ļBā' ĒŦÁ§Hû”{ ŠŠ(ĸŠ)͡ĩ6œ˙{đĻŅE‡­X=i›˛p:R Rß;2ûã5#灎‡¨¨øaëKŒŠr.[ßø>¯>šũ+ŅcO“ØŠĻÖh’™2ßCU.'XAbpZĀŊÖ~s´â?_ūˇzĮēŋķ‘žĪŗä°W?>¤XāÄÃuĩŪæ}IŌirA1]ãiõ+ŗ°‹ĘQÎGb+ĨąØĘzRŒ*đ:W!Ē\yq㸎BæP÷#c€0 e^Ũ4§n˙“ŅjޏUČĒŗÛJƒqSĨR§š‰íJŸ÷hQōũj:(§'Ūü*P¸‹q×.ŠîįĨp÷wEÜōjKJáG$ôޟN°Œ°P†i˙ēJąâ RĶėūŅqE}ČĀÉFŨĮzŽŠ(ĸŠ(¤=jŪîģŠųwĘĄ“ĩ5>đĢÎ+Ō<-h׹!P" î9ë]&Šoĩĸ"c,zҤ¯—;ÖƟ—Ú—ĶšzŽ{âŽ@ŧį5iA$ ¯8āvéŠÎ’0O>´Õ‡wlTę›O5eŠŖ­cė-’9¯×_7n3Ū°ĒÍŗäVŲiWĄÔ+ķīZō ‘ÆF1ŒÆ+ęĖ副ârkōČīmŖaYrÚļ ņUJãƒRa `gšŽËŸ­1>đĨŊøShĸŠ(ĸŠCViåCrĩt?J‰>đ̐ cÜ×ĻøT˛é˜;ÕĢÛļ–xПēkJÅžo­kĢn*Žã“úUˆ×¸Š‡ ʏÄÔĒŲΧĨDøfĻųÎqšSŒcŊCˇįÅKĢYä€Xąö¯ÖuÛķŪąûŠš åĢkOvˆ€sŽÕŌÁ.äëøĶå]ëȨKgÔābŠIf ’G>••}c ´ûVđÄLģøĶSī~Œri(ĸŠsũī›E†ŦÔąŽsôÍ2HđĮ*%“žÕnÕ˙ŌW%GÄ8¯YđĖ(öáŒĢ t!ƒĮŌŦj:FÉũiÖhctVęŧŲŠĢ úÕÔ\šx‚@Í1Ŗ<ã5"AœsSĸ^G5ËüĒ ?yĒ9dĮ…¯6lØ{s^=Ē‚ˇ-õŦÎâŽ[ˇĖ=ëjˆØˇb¸•¤¤2žh1ņ‚3U.c§Ö°/›(sŪš™lŒj (ĸŠ(ĸŠ(¤5w€}wSЅÉņŠ”€Ė§Ž@Ēŗ.×bzb’ŊGĀ+p€Ũē2†ų[%Fp2;s]Ũõšx .Ū™éY2C°Ģđyįĩz6č*ĖgŒUĨ9sVМ`u§¤į=iÄđÔ TR¯?: íŒŠŠ;c<×?Ŧ͘JōŊaēb++<ՈO+[Vo‚+nŨō^‰…X$c#éŠĪē~ĸšÛķÁÅaLrjĨQOĮ“×ĐĐ#-ЏÄâÆÃĩ6Š(¤5pn§(R8ôœ…Čė*7ģÜz“PÉÅu~ņčĘYC,‹ą—€¸Īá^iâK{åY€X tá]ÅHĀ9úžqW$š'Ca¸zŸjš3 ZŒüÕf#ÍZGĮÖ¤ G=ŠęNūšô¯2¯SÍV¸¸ g™YœņUî\íŽ[Zfō›šķMQŗp՝ŪρžaŠÚĩ\…­xhÍ]Ž]¸ôŠ~r*…ÔŲ°o\×ĨdLŲcUhĸœŋ+sRŗ–P8éQ?Ūü)´QE†¯¨Č$㊕yS` +€ˆAlķŒÕixĸĸ<­wú`F}ië‘L{4ās\ˆâōQķ^U~s;}j‘ëNC‡Ķi‰æF8­SØĘâ“ ņ֑äÆ{V}ĸ&ąŽdÉ5œįq5QOedS(§+céMĸŠCW•ÁR§Ŋ >܀*6žĻšä°ĩ!ã­>1Čö¯]ФŠo…WŅüĄĄ‘™†9$ŽčGã\ī‡$ží3˙!^‘ĖcŠ~*TfŦFƧWĀ5Nč–9Í2ÆÜnÜÜWgfaÁŦgûp•аÚŊąœÕøĨ)fš/]ÆŅ´ƒ# ¯%ē`dcīQ„sԈâg’ēŨ1´JŨhp*…Ōílõ5›+í÷ŦۙzŽÕ“3į­Uož)”QE=8íHËļ›EQHjÁ?6sF}¸¤ëÍ 8!jiLnĄ”`ô4ØÖ^§¤\F˙ õ(ŖmŗGpQŨ”ŒČæ°ô'?čĪŽ<ÖĨze§1/5X1Ĩ.ÅôŠ#?6ÜÔØ85 !īô§¯Č08ĮzV| w¨O<Õ{‰Ö8Č`qí\NŊŪFūZdõĀŨX:9ČĒ^IÜ*õ´ƒŠÛąsĢÛÖē!*ŧ]‰ŦÛÂ2Ų5u&Ū dÜIœÖsœÔO÷ŋ mQJĒK`u§Œ¯dzrÆ$? $úzS\b==ķMUĪŌ‡û߅÷ŋ aĢ‹ $îĀúĶc­0œ ÔĮøÔ„ÖĨ‡ũhú×ĻhømŽCæŗ'8ūA?Ō°t‡1ƈGė˙§˙ZŊKLs%´gÕE_#Û›xĪjPŧŠ›?.)Žûzv¨š@Z˜dųp}i<ÜPÔ&qКĨ˛I<×ĢYĸĘãëhBō)öøĮJŧ=jÅŊ،=)&¸ Ŋs‘X×dryŦ™Ÿ9ǤādÔTQE$cŠĢÍÉäpÃúúÕ2ŽߘûSÍģ Ũ(ØžũMFX;FaLcķ})´†ĩ$\8ūUÆ=xîŧP)j晟yx➏Đü- .G2Å#~8ūUäO‚9ņ \~ w¸iņųãĐ/ škũīŸŒCIģįųÕ‰Â}*ŧsnËfĄŸS‚ŨŋxûŊ–Ą"ˇÎ&>™ĻMŠ[]Ą Ŧ†Ē>§ooҏŋŌšíBę+‚N>õĪÜ&į¡ČÛƒZ*šO¨ëU&c c׊„Ü•8ĒW2î$Öl‡æ¨Ÿîū5QEHSG9Uš§ĩDfrNÆšÎY‰bI>´Ę_āüi) jŸēXŒÃŊT ŗŒ÷ĸE#‘ŪŖÁÛžŪ´šÉĮzŅŌdōo#a×5ô>âËuđ ļÕHĨF'šÆxüëÆī¯Œšl˛GÆ.#Ũq]ĩņ´ī^ƒČÅm`{PŨWœTr:Ö& d|Ŧyü+*UÔ"ˆŠÚ3ĶšÄžĪR•‹<€sĘÕģ>Í<^mē2+ā÷ÛĮ}áéĄļ9ųjĸ˙Â;#Î$<‚§c×Íx‰4xÃ5š°8āO?q2Ü eũܙĮ9õĄYX†SøVí¤Bâ dÖv§Öą]ˆ'š­+äõĒŦri*(ĸŠ(Šcˆžâ•Ô/ĨFŸ{đĢŕČ#čhxW§ ûÕiFAúV‹?ĪĮ8¨QYŸ8ĀĨ˜QP8ÁüŠQ7p*ÔË ũŲi7“ĪāŊY#™Į“´ėūá×ĨRˆ!đ|Ŗ`ßöœ–Įmĸ¨øS:~¨Ÿ”œ^Íer“BŦ§ ŒƒW 0ō‚Ģ\“ˇ¯50†mÄRŨ@$Ed›2Ōė`qŽĩ`øwÎBņH áo­dÜé“AÉCŒãŠŠ-ŗGį<ÖMôeX‚:qÖšûžĒbO›šč4KƌÆqļĨԈ–2Ās\ÍĮČÆŗ¤lše QE)PNjDÂEĶ“QHۏŊpsSĮ#ĮŧzƒŪžōŦĖ0|tĒR}ã[ĶEgEf$w¸Ģē%ķŲj1J‡nkÜėfķ`Īņ(5uvíūtŨ‡4˜įÍ;Ëį­)‰Jã=jÕ¸#¨âŗ$œsšBHäU ČâlđŌ°ī-ŖPp+ õ@/AY)škɐNy5By2ÜŽzŌTo÷ŋ mQE98õŠqƒJt€° ?T‡r–ÍihöbYrØÂúÕģË5ICžrEtÚDöÖIâFڄôĪ˙Ǐ=lÖ.6 įųÔ(Ų?1ęi˛ŪSÕG–AäņŠ…†r)caą”ôÅ'zėôë8 6ĖMöĻRŨņļ˛4HÚŦ[“*=iuë6ˇ.N@Y™Uē:Ö=šÄ û×ŧxqŧíܓ“ååZÃ+iŨ[ûÔėQL\áŊjL’žõJ`ėÄøÕ)ĄįÖ˛îsqYŌHY‰'VEíį%OįXwƒ¸fŗ%o›9Æ*ģK×°ĒîûŽi”×ûŋGESŨ|ļ*H?CLĨ5`[w€ʚ=āl¯SŠét{U.$ävéQę—q]}Ą›†8ëN0fĶ WÜGSˇ­qZē”Ôįûįži-ŖŪÜũéōI Á<ô¤.Ŧ1ĐcŠĒ[÷™4å8RŪŧSīší4i×û!i8ŽOOĐ<)ĩÕÃîDÜ?šč|YĻEugys Īs.3Œ‚kĖc;^ŊĢÁ׋&n3ĘŽ+Ģu.áà €6 `Š3ÎiW…KÔqC tĩBo”€>•r ķXwD(nÕÍj|ÅĢI*Ŧ˛U|ŌQPŅERž7t¤ĨOŧ*ĘÆÆ2ãĨHŖJŊl¨âĒ~ŧÖž›~žaŒ€ÄŸ”3Z:Ŋŗ”Sž3ČĒ֛šeŒäŽ9_įA¸o0°=:WOāš7ëg$÷áVíō[° h ÎqVÍ잕Tޏīčj8 hdSˇy’+ĒąoâI[#h<īãœVŨĩēØIŒFC¯,Į?Oķ˙ë¯3ņ|kˆî‘>čsŠĨ‘Ôv§Čß.1´ûUpŸÎ;€)&–06ąG÷‰æĸ‹` ž}ĒIæiH' āÚĢV–—tÖw°LŸy0üëÜ-õ‡–ú+’7[KnŠčsʡŊsž;đųēĶZxT<Ö8ų€æHOŨ?‡Jķ[‡ļ”q]Ή¯ĄY¸ŽŌĶTĢķfŽ›”•qÆīåQŧØų[ŋzŦķ…9ĪJĢ%ĪĢ=Ā#­Tšã }k"ōqŒW9zŲbÍdÎØjŦy4”×ûŋGEQES“ī~rŌãČ|õ­ Är ķXU¯*s÷X7Ëŧ|RČ9|ũxĢI<–’Į*7Čŧ*ƒœí]֛p×V–ōš…B‚äƒĶķ˙9ü‡˜øäÆŪ*Ŋ+ōА ÍfĢ„ÆĶŸZk4nqŸZĘŽ@ëP8ū!Lĸ¤OģøÖŽ•h×Z„Q„äŸA^Ŗ,æËMļšDųcĘĮcĐÖŨ†§ĄaĒŪÄŅ‘ķ4';€Ī\pkÉ<]ĸ6‹­JŠ?q!ß…MeZŨ´.9Åuzf´@ĩtÖz’?͑ģ}kYoĶ$ÕYļ°%[úU9#rpŽ9õ¨^ ĨįfīĄĒ}ĄsûĻüĢ.āLsˆä<úVtļ—2ˆ›>üU94Ų1~*ŦÆ*Ģ qMĻėõQEQR'Ũüjxd1¸9Žu{uBpØZr)¸Ú2ƒŽIĮãVX‰aXmĶ>_9ĮCëīZ3ËqiĻGQ˛:ž gđüũë…ÕægÔf,rwcŽj8Ût„v#É3ģ… Œ6hpprj?/ŅŌ+¨īĸd7kŧ1ĩģŠāœ<ôõ§Į)SÁ­kŌ¸æĩíī÷ãæĢÉw¸uŠcŧÚŨjÚŨ‚ëCNXpÕVVb+6vbk2āšĄ"ãéP„ĪZkŽ*'ûŋGESÕA4ō™ëLäV4ú)UŠœŽ =fu8<ƒšĶ´ŋ2Ęâa¸Č1‘ëÚļ\”ˆÎH8=0:ä{˙žkŽēm÷zķO?xņŠŠCĮZr)Û¸ôĻŗn,OáJ^õ`GĮãSYĀ Â}kŽŧŽ tY#2ũėž´Ģw ŠĮ*Ü[ŊČ7YWęŽĻē잒HĻķ¤]šaĀ8õĢž ąMO@¸‚0€ûTs…^Œŋūuã˛(.Q†2pGĄĒŒ nA§G!Í\†ã Ö´#ē8ëR‹’;⧆÷o|U¤ģÜ84ö›rõũj¤­ßvMgNã$cš¤Į-JŠÆMG*āUr3ÅG°ûSļz6zqõŠwTǘĸHw ČĒācKEbœąÁô­~ ŖĢą.Ãå˙ëÖD‡æĢrGģœqOŠØ7Ūā~´ŗĀ@ā`zUWˆ‚yæ–tÕĸ~Nœį­Yą]×QŽÅ€­ÛÉ]õEp›ĶJĸŗme‹ƒÚœäÉÁ;‡ãĩM§ŗCpĒīšč:šīô‰â%wȏŗœd#‚:zgäšÄ_eÕ."0W 0ĒrŽåØņô5Zž˛sÍXŽb;Յ—"œ%՘§į­[đ9ĻHŲĩS Ũj  táĮAQH:­ ųŠ”õLŽ)|ŗíJ#÷ŠaSÅ?^•m-A^•Fö×Ë;Ô}j•š õĢv–Öī†š¸Ą§&ŠŨYÜGĘgƒVÁÁÍJ€ŧxŠ\`aU%\¸5[co#ŌŦĢBžÕ~Â'š"RÎHĀ­;ŖŋPeĪĖO'MSd4ĒĄ'>•bK0^á†ō8QÉ‹sˇũR€IĀĪQ]7…onŽą;Ąf=JüÃõ\W5ãËdˇņÂÆŲ Ûˆ+ˇöŽP“ŒdãŽ)¤įžô”ĒÛjuöjvķíNYH5e.ÔĻ\ŠŒžæŠu5ņƒéU$ŠE=jÂĮëH“ĀĢÚŗrjäv uj()å0*­Ä[”šÃ¸d‡*P3Ž)ūDČCOŽĘw`‘’Gu t$ãúW›ëv¯kŠÍ‹† R@ņ“Įz–áLT ⚮:gŪŖywVš v OZeÔ¤~ä|ǧ īõŽƒÂ“Gou#mk(Tūĩŗ5ŪũHm$ áģbą5}6h5PCŠô˛éĮËF’-ŽA8ĪŊgˆš)qŒúkĻŅ›įŠE;d‰ƒīž*ĪÄË0‘YÜsģzĮ#†<ŠķF]´č¤18aD¸,YzTtRƒƒ‘OŪ=čŪ=éâĨF'­^„U¤LŽj_#v=*Ä6Š9ÅYPēã>ĩ6*-ܜTđ1 2jc"âĢ<š8¨&mĮƒøTF2GJÎģ‹Ëp{ÕĩÔ9ėdXÖ8“y`dö$ūUˇu­Ø5ę›{e€ŧwg'č=ë´Đuˆ. ŒĘ`dBrrĀį˙¯^gãČ#ļņ5Ė1}Õ#ųVJ1SqOi”į)šã§ËOD&LO¸O"ß~pOŨÁäûÖ`,O"¯ØL@ …OftV74Ēodˍ›G{×Ydļ×2‰æd’Lqōœ?aërũļæhb•î•õ˛4­6[ĢątĪ9ģû]*×OũôšP BįˇŊVøĸŌ,Õxų˜í8ã“éũkČeBŽ7Œ3QÉn9&Å Nîj(Ĩ"Ĩ ķRÆjė'ĨhÁČÍ_2ĸ§U {ƒåŒ ĪžB3TžNχ=ęC)AM’|.3Í@ōsNŒ‚Āš°ŠĶ.mDŅ0īÔVLrų$‰ą\€ja™˜Üâēo_ųrĒOœbąüYsö¯]˸6_¨úUZP¤Õ›{VĀûĒ;šŅ´ĶÚęE‹Ęd…yvÎ7SXúĨ÷ŒąãË_•@ėg!ųĒPH5r ËēųŽF:7ĨuVˇ%ēũŽæBšŊÅtvņÚ˛æ„=Ûĩh[Yw4Q 3`gЌöŦ›Ûš’ü|)<¨9įŊn|HĶ&—ÃļrÄ ÄĄ˜ƒ÷†O\׋ÜÂčꭒ1Á¤Hš3š>e>ĸ–å#•<ĶŌŠŅETÔålš ā֕ŗÕ§ øÕĩ ڜãä5™v¸&ŗ!¨Cƒ“JĖnj'8įŊ@͂02jh_šŋÍHã9ęk;Tŗ8ķĐŊū5“ÎkNÂâ+l3|ĖAŌ¨j’yˇ˛>sČĨNĢēĩėt—” |Ŋq[ļvņC*ŧą8ĀqĶĩQŋÕĸ…eŽ0ŋ ŽÕÆ\žųYŊę5lÔč<ÆäõŠ]4Œt➓+cœãîŸJé´=qˆ''x<1n1ôŽÆÖPÉ4Lۘ`ļėcŌ˛.…͈á‹™é’ô=/]ąņ>’–Vo,#&G'Ôg§ąüëĘŧCā‹í.ųË)g÷e†23Ûü+ž#m8Ū‹üjôj ĮnĩŸEQSP*xŸ´ ”ņÍiA.H­ŪĨ2ņŠĢ6ŦšŖäš€ŒRT.rjûÆĨwãZŊܸ5!]J°Ü§ąŽnöĐÚ܃ąšZĢČp{栛™[ë]ž—Ą 4ŦĄēāֈ lĮ€‡sëU5 T%ģnPI\•ÆÜJ]ō7gķĒŽ9¨ęhÛĻ:֜v2ĪšdDAŒģ`Ĩg¸*Ũŋ ļA\Eņ°/‘;æ3×qÎ m.ŖÅŲHČdlH=ę N+"xîãe'#ctŽßAņ•§‰4ßėb%|ā+÷ãßÚ¸ĪøR}2ãz=“sËЃßüôŽáZ)YX’:T˜m8¤ĸŠ*Dûŋ:œ8ĢQž+B p+B)˛MæwŨL•÷ ŽÃp‚–ÚUŠt‘ĶzĢd¯­]ŸkēĖ€ÉáE\ۈƒA;ēUļ‘VîD[Rx0uĪCë[&°°Ėą´ .âÜ:č|iyZC,ģ¸=ĄŽ:ÆIŖ™LG¨>•ëžÕĄÕ,ä˛ÕY\nģ’9Įŋ¨īõŽ'Į~}ā\ÛĄ{žëvŸL˙*āpi´QE9>÷áRRŽ•e>\U¨É š˜ÔË'ŋ4íųã4€äõâĢĘ˙T~XŌ„=č ž´đ08§§Ūf6äķÚŦ!'W#ÆĶœšÎÕ,‹į"üØäW-(`äZīŒģūΊ­ĘāsÔzÖuõĐyZ'mÄ•@Ēr[Č-÷¸ādũ9Ŧ™Á'rŠØ§ÅBC6_ Ĩš !;d]­čzÕf|RpŨqÚ¯M:Oˇ`یüžõFe'åR@Œ­*‰4ûŧ6U‡"ĩŲäÕO™ōŽØä“ĮZßŌôŊ>$ũíʙs•Ãc˙­üęâÛIŖČ`ãiûš=ē×[asũ§oqiŦ 0N Ič„˙ËAŸ~N>ĩä^0đôžÖåŗ~cûŅ?fCĐ×;EQSRŽ•:œŠ°­‘SŖæĻY8æŸŋ#¯žaÛōÔRH:t¨÷zvëKŠ2: ‘įO^1ũ*ĖOÎjüo“ÅLcÜrkŠÕãj3(éēēģyUmŸ*íûųéūšĘ <øîM^Áh áˇ>1ˇ9΍ū•ƒtā­†#ŌĄIŠ.2ã׸¤˜3ČYXČ;ä}*´­¸ũŪÕāÔđ‘ÎsžØ5qēų{FōŲ-ßéIĩ ō´íæ9ĖĪ­,wNĒ6ą_ĨX‚öo1NōOŋ5ŅYęSˍĶ @Į?^ĩąkâ1ewžjĖųV`OĘ}GŠâ3ū#$‹$đ#OhŨŪâOĒ˙*ņæVV õÚ(ĸ¤OģøĶÁŠc<•[52ˇqS#ƒO$gŠLĶ 8Ļąųž”íãŪ—pĮZZPÄsR#’qV!lŠŊ nĮĩ^\ã5Åkŋō›ũīé[2HčURPĮ,ŨĀŦöēŒ1 rylķP]JŽ~VbØÉ'ŊUTy3Žqך dwr{w É€F>ĸĸmŊę7jUmĩ:šķ7­ZWIe Ü/|wĻÜ*<ŦQAīãOœ­ƒš˜p89(9æ—4´”§­ëFhíÍHƒŠĢsZˇÕ¤|×%­ę3ŧ?•kj“G0ˆF€Čĸô˙?ũjŠEb2ŧ€2¯ųíųŌŨÜĻÄXDp sÆs˙ęĒË"ųLXüŲãÛü˙J,€UƒĨIö5h]ÚDBŧuę{ãô§ÛéwüąŽđFrļĄĨ–Î F•\‰3ĀéÁ˙õVuÄæwĘŖ€>QŽƒÛi9UÆŽ×OšššhįÂ\€§nüyéQŨZ ufUÆW‚įëm5‹Į4¸Dn2â–\¤-"ļĪ'đ˙=ĒŽ–'ÛåFcoᚏÉö‹dŲU…cßĶ˙Ŧˆí^)ļn zs]„CuĸIc<Œėš–Ų‡X܀p=AÎö§Ü|8#Dŧ𚨠ėnØÜÎ@ī^QqŠB„`ŠÁ¨(ĸœ­ĨIJ J­Ÿ­1ŠåõsF_­JŠ6âŌųƒŒ†¸¨Ļ’LI˙Ĩ0šp7¸ÍMöbŅ'hÆ}ģ˙Ģ0ØÜ(>D‰*“ŽüúU›‹8mZfÜ_øįž˙•OĨŧPydvžIĪ˙ޞ¤•Ļ;IžN)_K”í1‚ÁąĪNŋūēŠ=ŗÁËwä}:˙ZXޤBæĮąŽŠĪPwŗ“ģåbßwy­xî5]ōüščsSŦAQHÚ]ø Œ÷ôǎ‘(RĖ@HÉ­–(ėËÃ9cČčFįT/<‘*´(¨Ąŗ‚IÉgŸÃõĢ0ũ‹P@<Š'ę?\W˛\Ū-æ“a¨Ą.ŠÆ)pz+Ž9úWΞ(ļû'ˆo Ų´¤¤č+ŦjGû߅6Šrļ>•%:¤VĪ֞ H‡œSé;qŠZ:uĸOŊL§iĢ•NŒA÷ŽsV9Ŋ—ũáüĢŦ’‹c8e¯¯ūÍY׋Ė÷/Ļõúõũ˛n-cķcpW˙?ZˆŧÂŒÜãŸķíP­Ä‘ŠUr õĶÖæ@ģs‘NY °ŨˇõhK€. |į `ņíZ|ŅĘ7ṕĩŽx˙9ũ)څŧQžGf# ĢĪ<ŋéXS[4lÅyAÎ}õĸ9Ų(8æˇ´}CėŌĮq,ßÄ0=0A­ûەķĄ1R3ē3ĪëéTīe•YLlŘw÷<˙ZļČ# Š0įßq5“r ÆTĢ3œöŠ#ŧC,ŦVD8rGOđ5é ģ–h'ŌîÎčîŖũËĀuéĪáúW ã­IM@įBŪUŌálõ÷Î3Ÿzāj6\})´QR+gëNĨ¤{ĶÁȧ–,)Ë÷ >” ҁOUĪŌžÉ>´ņS&TįĩH­–öŦ Oū>ä˙{úWku§M&YX(BŸ¯_ČūuĪß#IkČg)ŧgō?f ņąŽP@ę9īOķã]ęT˛°ŸķíTä@ *r=j:•NE=~đæĩŦŧ—Ę˙>p1ĀĮ¯æk§¸ŅbM>;†••‡P: öũ[ūųŦ ûeØæ ÍÆXœqũ9üĢūWÅ>%g8 ŠŅ†æâ$*˛¤đsū}jä2ą îŨsëŽ+@™DKšĖ‘ˇLãƒôĄŋy˜Đrp8žØũk:H™›xQŸķüëCGÖŽ´éĶËc€ÁŗęÎkŌõx-|AĨ&ģ aŖ‘WĐG÷îÕãšūŽúV ŅZ#ĖoŽŦ|`įŊDË´ŌQEIŧ{ԃ‘‘Nœ­Š”6E<А’}jhú{Ķé@Í.ĶčiÁqO_÷qNÖ¤su!˙kúWĻJÅlÚˆ&c–ū˜˙WęI ãĢįvsÉNJÅ#­˛œå~oQLv@>üœS@Ú¤÷¤OŊøSÉĀÍ[͈7€\ōOĨwëg&…"n9U “×ë˙Ą~uÆ%ėžln>Ŋ}ŋŸįQ^§ËķGķwčy˙ëĄ˜ä܌U‡"ˇíeķ-†Øv‚@Îx=¨­+hâižkrvō q’8÷ëüĢOOŽÚuX$‘’6ÁI`Į~*•õ¯‘|‘Į2ē8VĐsĪõĸ÷MžŌ(âb_æyüņUƑ,„â?1ų@é×ĩu^ÔįŅ.™'B֓’ÄHÃũy­øvÚXR"˙gܒörŽ|“×i=˛q^?Šéķiˇ’[N¸t<ûÕ-ƒŪŖĸŠ)ĘØúS•ŗõ§Šrļj`qŠž¤ŒķRŠ“ËãŪÛ&“† š~9Ĩ#ž:V ˙ü}ŋÖŊ28 ІŠC÷pųČãû%qž!#ŧ*›ŽŽ;~˜Ŧ<´9ņŠ‚ĨYF=3ÅY„Irʋ|ŠŲB¤Åe‹`˙ŽiĐ,[˛˛ļā~U)œūĩĨnō$ "•$fū#ķ˙õÕ 2“6ėAž×"H¤W;—/<ķũk4įwû^ÕjÎå­ÛvãJÖ´Ö0drÜĶiéū•CsŦMįļÉ>Rr1éZzMųž)c–D c; ōūęė> c6˛…ōÔã'Ž>ĩŅĮ{j|—ޞĸ)SŽŋp˙X(.Nácrúū(+sLšÚ;94ÍHŋØ';sŨOĖ=ÉX~,đąģ͔ʂöˇ˙\÷W‘ÜÛIm3G"•e89¨Š(§o>ÔålũiâĻVČÍL‡œTÉ÷…NŸ•N‡ ô0げiʀ._ΜSž:SJ‘X:ÅܟīJôå´H4HĩK Ÿ´[íUšŒ 4}G÷sĐûW=â eģso†V›ÔōErâ<N;Õb¤T$`âœŋ|×KáÍ?í .Ôū÷oĐÔ>$\ģ3ĐėÁ˙ū•„§#ŠŲŌ¤"ņJ îs´ßũ|ūēÄJ˛I<‚:ū…e‘ŒˇÛ šŒų[?Œ>yî1K) 'ˇZMĨ’@=EK4jCrd{Õ­(ļÂ삇pŧú)f›mĖ€g`c´zsZvš´‚(ą {zt­ M~pø‘˛Ąˇ|į<ķĪë[öúũ´×Ē×ČĒx÷˙ŲĢŠŅõ -~ĀhĶÎT‚¯m'up:sęs\÷Œŧ0×Ģ,ūBĮŠ[¨71ŠáĮfQ^Uun`ĄéÚǞãéMĸŠ)É÷ŋ x9õb*qRŖįƒÍ[#Šxv ÖĨ#š•>č§R0$cÎęņ÷'ûßŌēČ ģŗķ­Rå’]Â#gĄį9ôČ{×ĸhž’ëAš;ĢED eųÞ1ČĪĒ:ˇÃšbpæÉ|¯ã0> üķĘ¸MOßgweĢÕĮo¯ųë\ŊÅ´–ō‘Hôô5hX€I¯@đæö]9ŽnĢcåũáÔqõ~5ÍkĖ%›+Čė{úOÖą hi~k\*Bŋ9=qÛŊt熖#„ŗĘōįæ$=˙]ߕr÷ėX6㑌P2O­N‘ÄŸåL}Öō˛Ŧœtʞĸž. @ŠˆW9Ë ĪįZ‘I§IÍiYSzfÆ~žÕŧ„Š_ąBœî,Į­néö&ú8ĖVvãž.Ė߆jÅΙgqæŦŒmōAę˙9ĢÚf›}y2Kå+ŸŨ€Nœp9&ĩ,gQö™ZäŒđ9ņõũ+Đm§ƒ[´Snâ[ûTŨfAŒjō?č1YŨ ËE˙D¸ųŖ˙d÷͜×'JŽŠ(ĸŠ”ŒŠ‘šŗ ąįj3ÁŠ5*ŽŪôīzJį5?øũ­{ úÁ­Ų¤‘3NĄDŠĢĘ1†QüĢŲ,mR[8e1íķĨ3•>§$:~¯dŗéWqĒ€Íqí\T^MGIU”sŒ^=â?ŊŽŖqmîōä+ƒíÆk ‹ŽCÆwrHãükŊĩ´ZĀvÕáđ@'ˇëˇōŽ6˙DŊ2ŒG¸ŋ 7qî+&M&édxÅŧŒę2p¤â’Õįĩ“*6öûĩŌ‰æŊĶäy˜ęĄHĮo_é˙Žzį™žYYēzƒūsT§d vŽžŸįÚĢn9ûÃ5<.cqÅG"4Ra‚8"¯ÃwÄ k2ûcŋũn•Râĩ¸1ą ƒÔvŽŸÂˇ’A¨Aääã—ö'¯ĩv:Ģy”ĄņÉ qú¨üę{[Ûvą%”3ɔΧíÕ*åīc’—Hå*§'Ā>ũøÅuž–æÂa:üĘ1Éî23øāÖļŊŖ áy§Į“sū“fËÎ[wųšđíNŅ­nJH ö"ŗ(ĸŠ(§+céR+S#įƒV#έŖņĮ*7<žj`7ÍJŖu§×5nj^J?Úū•ô~ŖâĪŪÃk9×m–hd)!™Gđô­ËO‰KHŧÍvŅ[+ĪĶĨ9ž'x,‚ŽÛx?+…Rˇø›ā›{uŒëqqŸųf˙á\Ŗâŋ \x–{“Š+ÛČ厈Ÿŋ>•KMņ„~×tnĩV1í‰ēgéVĮŒ< š‹Ä/Ųp1*ĀĀįĐ ÎÖįaŽÚu8n3Į˙^˜ž0ĩX#ėŌģ#ôãô¨î|Uo:mHžųŨŋ ŊaãČl Ú,ŸûÛĮĻ+u~-[-m›M™ĨŠMđIį“Û§§ÃøŸ]ļ×5YníŦĒHrcßģžį8…æsԚ[ړ"ŒŠ2(ͧo˙d~TĸR;SÅĶtT‚ųĮđ­H59üŗZ”kƒ‰ú͆ˇ0˙–qÎ”ëˇņCđ5qp÷4ĪĖyÅ˙Ųleptonica-1.86.0/prog/kernel_reg.c000066400000000000000000000324301506303110300170060ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * kernel_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const char *kdatastr = " 20.3 50 80 50 20 " " 51.4 100 140 100 50 " " 92.5 160 200 160 90 " " 53.7 100 140 100 50 " " 24.9 50 80 50 20 "; int main(int argc, char **argv) { char *str; l_int32 i, j, same, ok, plottype; l_float32 sum, avediff, rmsdiff; L_KERNEL *kel1, *kel2, *kel3, *kel4, *kelx, *kely; BOX *box; PIX *pix, *pix1, *pix2, *pix3, *pixs, *pixb, *pixg, *pixd; PIXA *pixa; PIXAA *paa; SARRAY *sa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "kernel_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; paa = pixaaCreate(0); /* Test creating from a string */ pixa = pixaCreate(0); kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); pixd = kernelDisplayInPix(kel1, 41, 2); pixWrite("/tmp/lept/regout/pixkern.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/pixkern.png"); /* 0 */ pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); kernelDestroy(&kel1); /* Test read/write for kernel. Note that both get * compared to the same golden file, which is * overwritten with a copy of /tmp/lept/regout/kern2.kel */ kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); kernelWrite("/tmp/lept/regout/kern1.kel", kel1); regTestCheckFile(rp, "/tmp/lept/regout/kern1.kel"); /* 1 */ kel2 = kernelRead("/tmp/lept/regout/kern1.kel"); kernelWrite("/tmp/lept/regout/kern2.kel", kel2); regTestCheckFile(rp, "/tmp/lept/regout/kern2.kel"); /* 2 */ regTestCompareFiles(rp, 1, 2); /* 3 */ kernelDestroy(&kel1); kernelDestroy(&kel2); /* Test creating from a file */ pixa = pixaCreate(0); sa = sarrayCreate(0); sarrayAddString(sa, "# small 3x3 kernel", L_COPY); sarrayAddString(sa, "3 5", L_COPY); sarrayAddString(sa, "1 2", L_COPY); sarrayAddString(sa, "20.5 50 80 50 20", L_COPY); sarrayAddString(sa, "82. 120 180 120 80", L_COPY); sarrayAddString(sa, "22.1 50 80 50 20", L_COPY); str = sarrayToString(sa, 1); l_binaryWrite("/tmp/lept/regout/kernfile.kel", "w", str, strlen(str)); kel2 = kernelCreateFromFile("/tmp/lept/regout/kernfile.kel"); pixd = kernelDisplayInPix(kel2, 41, 2); pixWrite("/tmp/lept/regout/ker1.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker1.png"); /* 4 */ pixaAddPix(pixa, pixd, L_INSERT); sarrayDestroy(&sa); lept_free(str); kernelDestroy(&kel2); /* Test creating from a pix */ pix1 = pixCreate(5, 3, 8); pixSetPixel(pix1, 0, 0, 20); pixSetPixel(pix1, 1, 0, 50); pixSetPixel(pix1, 2, 0, 80); pixSetPixel(pix1, 3, 0, 50); pixSetPixel(pix1, 4, 0, 20); pixSetPixel(pix1, 0, 1, 80); pixSetPixel(pix1, 1, 1, 120); pixSetPixel(pix1, 2, 1, 180); pixSetPixel(pix1, 3, 1, 120); pixSetPixel(pix1, 4, 1, 80); pixSetPixel(pix1, 0, 0, 20); pixSetPixel(pix1, 1, 2, 50); pixSetPixel(pix1, 2, 2, 80); pixSetPixel(pix1, 3, 2, 50); pixSetPixel(pix1, 4, 2, 20); kel3 = kernelCreateFromPix(pix1, 1, 2); pixd = kernelDisplayInPix(kel3, 41, 2); pixWrite("/tmp/lept/regout/ker2.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker2.png"); /* 5 */ pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); pixDestroy(&pix1); kernelDestroy(&kel3); /* Test convolution with kel1 */ pixa = pixaCreate(0); pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 3, COLOR_GREEN); pixaAddPix(pixa, pixg, L_INSERT); kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); pixd = pixConvolve(pixg, kel1, 8, 1); pixWrite("/tmp/lept/regout/ker3.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker3.png"); /* 6 */ pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); pixDestroy(&pixs); kernelDestroy(&kel1); /* Test convolution with flat rectangular kel; also test * block convolution with tiling. */ pixa = pixaCreate(0); pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 3, COLOR_GREEN); kel2 = makeFlatKernel(11, 11, 5, 5); pixd = pixConvolve(pixg, kel2, 8, 1); pixaAddPix(pixa, pixd, L_COPY); pixWrite("/tmp/lept/regout/ker4.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker4.png"); /* 7 */ pix1 = pixBlockconv(pixg, 5, 5); pixaAddPix(pixa, pix1, L_COPY); pixWrite("/tmp/lept/regout/ker5.png", pix1, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker5.png"); /* 8 */ if (rp->display) pixCompareGray(pixd, pix1, L_COMPARE_ABS_DIFF, GPLOT_PNG, NULL, NULL, NULL, NULL); pix2 = pixBlockconvTiled(pixg, 5, 5, 3, 6); pixaAddPix(pixa, pix2, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); pixWrite("/tmp/lept/regout/ker5a.png", pix2, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker5a.png"); /* 9 */ ok = TRUE; for (i = 1; i <= 7; i++) { for (j = 1; j <= 7; j++) { if (i == 1 && j == 1) continue; pix2 = pixBlockconvTiled(pixg, 5, 5, j, i); pixEqual(pix2, pixd, &same); if (!same) { lept_stderr("Error for nx = %d, ny = %d\n", j, i); ok = FALSE; } pixDestroy(&pix2); } } if (ok) lept_stderr("OK: Tiled results identical to pixConvolve()\n"); else lept_stderr("ERROR: Tiled results not identical to pixConvolve()\n"); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); pixDestroy(&pix1); kernelDestroy(&kel2); /* Do another flat rectangular test; this time with white at edge. * About 1% of the pixels near the image edge differ by 1 between * the pixConvolve() and pixBlockconv(). For what it's worth, * pixConvolve() gives the more accurate result; namely, 255 for * pixels at the edge. */ pix = pixRead("pageseg1.tif"); box = boxCreate(100, 100, 2260, 3160); pixb = pixClipRectangle(pix, box, NULL); pixs = pixScaleToGray4(pixb); pixa = pixaCreate(0); kel3 = makeFlatKernel(7, 7, 3, 3); startTimer(); pix1 = pixConvolve(pixs, kel3, 8, 1); lept_stderr("Generic convolution time: %5.3f sec\n", stopTimer()); pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/regout/conv1.png", pix1, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/conv1.png"); /* 10 */ startTimer(); pix2 = pixBlockconv(pixs, 3, 3); lept_stderr("Flat block convolution time: %5.3f sec\n", stopTimer()); pixaAddPix(pixa, pix2, L_INSERT); pixWrite("/tmp/lept/regout/conv2.png", pix2, IFF_PNG); /* ditto */ regTestCheckFile(rp, "/tmp/lept/regout/conv2.png"); /* 11 */ plottype = (rp->display) ? GPLOT_PNG : 0; pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, plottype, NULL, &avediff, &rmsdiff, NULL); pixaaAddPixa(paa, pixa, L_INSERT); lept_stderr("Ave diff = %6.4f, RMS diff = %6.4f\n", avediff, rmsdiff); if (avediff <= 0.01) lept_stderr("OK: avediff = %6.4f <= 0.01\n", avediff); else lept_stderr("Bad?: avediff = %6.4f > 0.01\n", avediff); pixDestroy(&pixs); pixDestroy(&pix); pixDestroy(&pixb); boxDestroy(&box); kernelDestroy(&kel3); /* Do yet another set of flat rectangular tests, this time * on an RGB image */ pixs = pixRead("test24.jpg"); kel4 = makeFlatKernel(7, 7, 3, 3); startTimer(); pix1 = pixConvolveRGB(pixs, kel4); lept_stderr("Time 7x7 non-separable: %7.3f sec\n", stopTimer()); pixWrite("/tmp/lept/regout/conv4.jpg", pix1, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/regout/conv4.jpg"); /* 13 */ kelx = makeFlatKernel(1, 7, 0, 3); kely = makeFlatKernel(7, 1, 3, 0); startTimer(); pix2 = pixConvolveRGBSep(pixs, kelx, kely); lept_stderr("Time 7x1,1x7 separable: %7.3f sec\n", stopTimer()); pixWrite("/tmp/lept/regout/conv5.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/regout/conv5.jpg"); /* 14 */ startTimer(); pix3 = pixBlockconv(pixs, 3, 3); lept_stderr("Time 7x7 blockconv: %7.3f sec\n", stopTimer()); pixWrite("/tmp/lept/regout/conv6.jpg", pix3, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/regout/conv6.jpg"); /* 15 */ regTestComparePix(rp, pix1, pix2); /* 16 */ regTestCompareSimilarPix(rp, pix2, pix3, 15, 0.0005, 0); /* 17 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); kernelDestroy(&kel4); kernelDestroy(&kelx); kernelDestroy(&kely); /* Test generation and convolution with gaussian kernel */ pixa = pixaCreate(0); pixs = pixRead("test8.jpg"); pixaAddPix(pixa, pixs, L_COPY); kel1 = makeGaussianKernel(5, 5, 3.0, 5.0); kernelGetSum(kel1, &sum); lept_stderr("Sum for gaussian kernel = %f\n", sum); kernelWrite("/tmp/lept/regout/gauss.kel", kel1); pix1 = pixConvolve(pixs, kel1, 8, 1); pix2 = pixConvolve(pixs, kel1, 16, 0); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixWrite("/tmp/lept/regout/ker6.png", pix1, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker6.png"); /* 18 */ pix1 = kernelDisplayInPix(kel1, 25, 2); pixaAddPix(pixa, pix1, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); kernelDestroy(&kel1); pixDestroy(&pixs); /* Test generation and convolution with separable gaussian kernel */ pixa = pixaCreate(0); pixs = pixRead("test8.jpg"); pixaAddPix(pixa, pixs, L_INSERT); makeGaussianKernelSep(5, 5, 3.0, 5.0, &kelx, &kely); kernelGetSum(kelx, &sum); lept_stderr("Sum for x gaussian kernel = %f\n", sum); kernelGetSum(kely, &sum); lept_stderr("Sum for y gaussian kernel = %f\n", sum); kernelWrite("/tmp/lept/regout/gauss.kelx", kelx); kernelWrite("/tmp/lept/regout/gauss.kely", kely); pix1 = pixConvolveSep(pixs, kelx, kely, 8, 1); pix2 = pixConvolveSep(pixs, kelx, kely, 16, 0); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixWrite("/tmp/lept/regout/ker7.png", pix1, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker7.png"); /* 19 */ pix1 = kernelDisplayInPix(kelx, 25, 2); pixaAddPix(pixa, pix1, L_INSERT); pix1 = kernelDisplayInPix(kely, 25, 2); pixaAddPix(pixa, pix1, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); kernelDestroy(&kelx); kernelDestroy(&kely); /* Test generation and convolution with diff of gaussians kernel */ /* pix1 = pixRead("marge.jpg"); pixs = pixConvertRGBToLuminance(pix1); pixDestroy(&pix1); */ pixa = pixaCreate(0); pixs = pixRead("test8.jpg"); pixaAddPix(pixa, pixs, L_INSERT); kel1 = makeDoGKernel(7, 7, 1.5, 2.7); kernelGetSum(kel1, &sum); lept_stderr("Sum for DoG kernel = %f\n", sum); kernelWrite("/tmp/lept/regout/dog.kel", kel1); pix1 = pixConvolve(pixs, kel1, 8, 0); /* pixInvert(pix1, pix1); */ pixaAddPix(pixa, pix1, L_INSERT); pixWrite("/tmp/lept/regout/ker8.png", pix1, IFF_PNG); regTestCheckFile(rp, "/tmp/lept/regout/ker8.png"); /* 20 */ pix1 = kernelDisplayInPix(kel1, 20, 2); pixaAddPix(pixa, pix1, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); kernelDestroy(&kel1); pixd = pixaaDisplayByPixa(paa, 10, 1.0, 20, 20, 0); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixWrite("/tmp/lept/regout/kernel.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaaDestroy(&paa); return regTestCleanup(rp); } leptonica-1.86.0/prog/keystone.png000066400000000000000000001143451506303110300171020ustar00rootroot00000000000000‰PNG  IHDRočÁ˜ŦIDATxÚėũp%įyß ~Ū>MœĻ ÍiJŠ ÚÃ9MŠë°vPVė‘2ŧC1ë&7ææŪ­uRŽ)*‡ģ77%epđb8á\Z„}Sˇč”cŲŽDĩåÚK§ŧ[Œ‹âŧ˜ÍqĸHãÄō]‹ĶB"˜Đd„Č>`Ÿ~÷ˇģOŸ_Āŋė‹÷sNŸîo?ŋßį}Ūį†c4ŒÃąG/8r¨ĢTį?ʼnėl3*ÁøŊ¨ØËFąˇ_™ė˜´Ō‡`'ĸ|$vįÎ!‰œ×O˜ĩ ˙xÁŨ#'ŗŌáĻ“hV•“ĮKŗ†x։G?qĄ'pNātŒä,å‰ŨŲf­ˆøÆ‘0'ŽŌô—[ÁZôĀŅĀ ‰cLpؘôKŪZŦ7WÃ_\R,CĶ^ö_M”Ŋ\–[_B”fŸü–\ņFį>Õ/ŊjWό›˜"ôŠ÷N >ž Āô{˜ OMz՗ÕʍŌ*û˙[“ßū>›ļŪvĜø”øKãéŌpS3ėH+FŨX1Æ$ĩp"šˆ'ž‰k×âj2bŌēiÔ#ŒIAh0ĀiaT5æ~€I¨Æâ•ažą fšy‚Í÷A"ū’ ˇCÄOD§Ē@ĨĸÎÖ´TīU4Lzņ8*#ZlĨn­r`§^˜ãsŧ€y€‹tgú}ShåO­mųlMĸ€¨Ąļ呋pvī$ڗģ O¤āZAõTÖ#BáH˙\­^ yå'õv÷ŨJ æ}– ļSį|§^0V{ę* ôÛ?hÍX]Øœą°Į‹Íį“–LFî×Ú)@ē8Āéâö•PíÎfng€Í\ĩ“f۟'$ün—‹Úb4~Īq÷ĸüžØ)%7ZĐBâ#TĻsiæÛOž'›a‘ ļ7ą!•ŨÁņˆ2ŗIåKä¯(‰‡ 'Ļ3X8ˇƒ™ wK;2Fßmßt3`u<'–UœË ˆÄN%¤āĸ[–dƒBĻ$A­îNLŽ( [*h)€ķå|G´&AA[Ė’$BnĪĢ”ˇkEŸČ)ëãhŸ°YXFĨnK×īVɛh+܎ ¸nx RÕe‰”ŪŖŨŠĪŖ„ŖDD`Ā€ ʁØ no-@ĸ}6ŧíoęŗ°[Q&°NKâ׈**Îâę!rNeō(<\V? -E`ŲîŪ¨ėÁgųaÎi@…4&āOÚBę’ŪĄĀGãë˛ėŽq}whvĮ‹ NCx&ŽNƒO+(ŒnŅy8E!1¸õiļšlüHlmčî4Ģũ§˛ųšŠĘ#¯‹…“­[pxp*zí-•l/2e×f0ĮÄ'!bÆ ė×Ŗ\rqI}ļ…ŗe? §ĶmoŠ=Ȏ“R&Ŋ›LƒQ9ŗō@ĩ38ŲažbĨlwp„ĶÁ<™ ^î=­ÆZiqQÜŪ'ÛÛÁÛĶ=ŖÎˆļÁå—hčōÉL¸cû7ÜaåØxö‚ááD1Ÿĩn9 @Į¤č™ĐšøÎÉŧjN’¤Mžž¯9ŪØ%uū y7EZŸĐđƒ‡ !Å%Qn$Ę Œ.픍ĐVÔvÁŦÖyCøëā.˙ggÕ¨^Z]ĪÅ7§"$„ü}ąc>õ3"ģķYAfmßsÖî%˙}׿x7—6į€wZŦ’Ŋ}ĀyVķ)Ąé¸“ß}ķuv+;cxV`‡@¤>€n €˙BĐX'ôVZ(Ÿ:׉ˆI ¨Æv7ŋÉníNÕŧd8˚ę8á”FČn•Yđh)ĐāO¨ųõտ̭áęmŸÔÍ~ŽčîēÖq 8ĮDlbę …„ęFĢÛũPQgIŨ}ÍÕ^ļœ…ö#LævIlÖvÍŊ†_CŽ bN͚YķEc<_ų;]/wvüˇ8.ļĩ?™=V‰ÜíßÛų€ôWætkä¤$ä¸ČÎ œc gm/ ĩÍ:‘8'pNāüš„Ķ*Eí{ûį$Z•?Nⱞ(ú œ8'pNāœĀ9ŗgĪ}ŧāˆfĀ9s#<™IœČÎ œ8'pnNS+8ąū?ŗN|։ĸŸĀ9s§c,CKy\āÄEŠ_a)žn8ũœŖęžė„•ČíĀ …ĢË>›ī¸ĐÛw8ķ,áũ@™F"ĖĢ;z걗;ŗĩßpŒß÷?Ā•n‚å¨íNHŌÁŅÁꞙĩĐũßįgSöYë†Ŧ.9™%ž š{8i°müŖvü S”–ÚbŌ„} öJí:ēā$ôV]GÛĒd$ĻēoÖGOûlH—Æ°VŲßkhWĒĒ4}˛“ËåŦOõƒ/§Ëī/ÍöŦŠķNX"ĮĩŌæį *Æ4˛m ]pŧl/#+˙úļפéŧũø@.õ§c‰/æFŠŌq4Pŗ,ūđī$cË[ķÆ›S`Øą•ņ ÍÎ1¸8ÛIįúũ¤ÃõPĩ<ēŦmmĨa#Bŧ*‰ÖV$\ōšuž}ԟA÷ÎTę|_îī`üĐ{į"? -ĶŖi—ŗkU˧YŸƒÍuXŖåZÖ蹇îŖYQŸV¤čŽį¸\Į›f„į€W~2¯B3’ DJ!ų~VSäƒĀgL0‹•ņ‚jAŋ­AEh ’Į^öųyÔīųsęa|´˙/aéLMÁíڜ…4ę ­ü!hž!Ÿ”¯ëK@ˆø´dH˙Đ đM]pDiK…`ŪĶ@ÄĶ0))w+NUāTMmÅŧ˛Ŧ6Įį˛_IĩüŸūö,°Df#X]âu’¤Ë—!vą) šŒsoæ¤H”míTAŊč‰0…õ¯ę(éĶ×fkq€Čĸļ aĢõŊ|ÛˇZë/~ôÆåĢŦ4-iA˛cŦ_qÚ íķLĻ€cE#ę˛3ĄZũš7átõ ŸyˆãāZXŅ܌ķ ā›7ՄZžžē.;„wûk™æmã$Šž )€Ę%ĪwœĨûØ,1ķW‰ė›Ž%ŌR—Āø FB|āŋ ŒßĀø\ë1CŖZƒ7Ķ€j¸+¸øË’ÖoÆÄéį&ƒ‰ĀRظ ž[KÕŖ“ž}Ėt•G’íw>&ū€čŲ“Đ(ŊŲšų˛{t"?.ØŧĪB ž ūКĻFŧÅ/0^UÍp{fÉGÛR]Öɏ)AT2ŽÍg;Š;õŲ— vogßīŧãÂčŽ?N đ€7 ã6 aœ7 đ`-D´šč1}ב‘ 2Ÿ Ô"b¯xŲ°äCœžQ\[ëāäÖH’ú´ÆĘ,\éz—.—í5åGÕãķ(ßģ—­ô@ęä›ãŽØ!Ē _匚j?Tfēŧƒ‹Üooķ“™u6?ØõöŪöv'pŗ_˒š2öYę'ąŦTĘîˆOÛVÖȨCvÂe­zb#šÚáįķ_÷…coˆ8V*ԈΧšNa×ē;7†Ĩ¯ŋĢš†rÆĖa˛\Ō—>pZūŠ*û\ÃTÔ’ęâ­zcģķŨ;ŸÎF—Q/´Čn5žkcĒv¤–~ƒäË_dLˆŠ7$„iē8Qq‹( ?7Ąē#’¨ļY_ŋYØ)š“(ą\ũAZ*&<÷åWƒš&8›ĀkDDĔšęl”c0QÎÕۛU+: ØDÚØ^vĒ&<$žË¤ÜĩĐĘŪ]áÆ 6‚ā=Mû”5|ša€ 2;b ‘ÆšŒš˛ œW3Øšm¨SW0"Ŗgņ'o7áé{O›˙‚āä'=b@l4›å'<¨%—=o t;h^TzNØļĻJqĀč!’qMíŠ*×BÜ:đ{ ^ūĩāĢ1•{yy/ž xšqqž>ī0[’üÂÜßŖ ‘–}æ‘v|o:õž{lõŨ?~֊h-´›Å0ģ~õn<B=8ˆ:+A!ŧ:¤‘Ûõŗú#Äm]—Û+:ī¨aįž5ŽúPa6{¤ĘaÉ"Íg¯Č`&\†“‘0AĔvŽGÛj–ŪÅlŧļÍí&Œk1§î)Œ@>´dŒņWÖŽĸ’0MŠ8@AŠáG˙qj7pz'Ŗ˙Đ]ĖōtΤá÷îŒû¯š,ˇZ¯šû^~;°ąQĀēīiÜÉõ9‹ FGUC„°ŧ‰`ĺ][‰ü÷› ˙ec=¨Â>ī)6F=˙ë™ÁŊįŋøĢUŖŌĒ1æĨuÚĻēģF[ģÛčÂwīøæ§b>&<_9Y׌ũ§Îķŋę;_üTņWe÷mČvG”aÖXŊ.ˇŊ˙K$AP$=ÃŠŸÛŋDîEŧláz˜=.Aw>ãāއ@Ķ œYģ Į NŸļ*GYôĐ+^'Ûã>ËBGË,?:ĄÎŸŲ9,ŸuįÎ œ8'pNāœĀ9pšîąĨÎŨ%–Y-!*Ã†SŊØ÷ĒeÖČĢŒ:Ĩ`˙ųžÅ sꈘåA%üĢLg˛×ŪČļŪûšÎPđ×áĄĶŸĨĒ<Å6vF’X„ßUIã÷]N9Û{e–ųĐ)|-lK”bķ; đP—î•@Ŗ°ÍũÚģû•ܡáüSËņĮ2#iû-„Fũ$ ü8'¸>ipnd=ÄEšįĸļWUÅÁüąˇ^{”-ßn0Ē/˙‚n87ŗO,ķeÜsœĒŦy4ÖûŲåģšÅ›žĻs—j!°•°ļÉ],¸™k5nIÂü̜Yę°&žČD+*ŠlQrrļ˜ÜôâÔ}›Q^fEĢ+bŊ&ŌÅûŨ­ąĸš*‰Á|ŖĶ*įæ0{Ō€*,ŠĪTöū~™¯šQq=°äyÜĄœwküŪ™ôŧs)ûmlf õZãģMw‘ČĖLuZeë÷Ō1ëe×û„ÎĄk¤)ŠúipîÛWM=ŽoŊ–"š> §`=h€rŌVŗŌΝáĸĶéGs0Q_“û×u~ŊwƒėȐMAÄĩ¯=>ËSqÍ]C…ÉT§ėdO­OÆ},–vڕZEņ^X}ÕÃŨačۊÂk*ÍŪŪ¸øcƛĄō –â§ģŦr¤ˇ1œļ~›‘WQ•/“ëŊ——m…×vAá¤)ŅŅÃˇåĸʆÕ=/FÖHŋ=Oi‡V­ŽįɜL§ov{ĸā­žhÚ֋1 $„p>c¯×­čEHĻÖ(’F‡(+Q˛EE9ŗßz(÷čšėøĻyPU”e^@€;“í1Z°gÉpœĻšOp#…Põ‹ĩŒ}ŪrØ%˛:Y9Ö}íhËīąŋŸĘÜbĒÄ&ŧ’ßiŌ>¯äBĮ­ëēyEžŗŦ!EšR91}|ŗ™(*öÃĖ üĮžyĮéüYãÚÖ4YČīã\_č`–z8‹Į>§–%ø?ŋÕņ†z ~‡=p­Müf/[²đˌôÅ4Ÿ.ĪTŧfŖ#Ŧž5U¨~îĩøÜ¯§w—cf€WÅÅS_ŗˆĢyÃ3¯šIw¨wē;û`¸QBčA<ŪiĻÂNÍĘŌKÉ)>ō13*čUø¯Ôg?´ b­Pƒ.i\˜É\ė@o Ųf Īéâ $ō“\úÎBG\ āɑļ¸aĐđđp—¤Žļ~iųwŸ˜[ģL„h ~PTžu ]j)3S|ĐYwũ]í8).ÍĘ+õŸŒTJ"œ ÷XWPŋcŨRGĢŲ"ŸHŗÚ•åRÄîLÅģ̎Ã×ÅīߨnĖ[z˜ô–+TXŧî•÷ĄB%¸odŸn™:›Ŗû¸$qRŋsįčDy_Į‰(ŸĀ9sįÎ œ8'pNāœĀ9ķgÎÚąĨÎfūĮõŖƒļ˙Œō)Đ9šĒsší(¨SôJ‰uyšíhāä$õŦÛÄ1Ņ,_æũŽîũ¨ {īõˇÔÉĨÚY;\ÍZ‘íŠ~ 5đ^•¯ôöõ7ÃÂq€?jŗö z~āKE¨Úwđ’˙!Ė,Wļ€ÕuH˛ŌĖøV¨ķ_fu_÷´á¤•đ”&^N$" ×üøR~P{„ĩ0w-K~nhfmã€Æ^kûM‹ÉŽh÷ĮĒę×EÛæ*Ā'ˆjøˇ˜…/]YšaŊJˆ2bąÃ>īV”ūb Ô´> —zŲ~§ ;RĨ 6pl[Ų3‘ąį5‡x‹’-!WÔne§]f5ĄĀx l/`Đ*h:bˇg.´‰%x ,yDø%ŌķHlųzˆD†e{syˆ,āÁÔ ĘlL}Pˆzīë´ŦrmLŪļ5ÉoģÁäBt֖†Ÿ…ĒP˛|šsŠŊdŨ'„"FOcÖüĮŧį=DŪĢÔ{1ëÉë–eY´Ä ;"‹TĮš“ÔÜę"Āj*úø;ÆŅŲãÜĨ€/7ˆpY‹eg\cú°ãŨŗžd_Ö$ŧqmë =KŠŋ×XHķm›žēėˇiyl–úŽWg˛Xš_pÜZĻÃâI\{Įķ’úŨ€ŠO¤Ī{!ˇR"F—÷—æ'I¸;§ģū8ĖPI^ŊԛYúõŪr>1°!$.Q9 0ņą+.ûš€drÅž ^kŒæšrįfĀ7€hũúęü3-Žöf#ŗCzö‘:Ũ1X%"ĢWÅI))W׎ßųAax׊R&gˇë ė{ÍîĐiš°g–Z8aLÆÄĩ§ĸ¸šTÃˇüėãîĄÎĄ'Jp¨EHîŸÛiËĪnĮđ۟?ĒKģ BX1Ēz‰ũÖŦša/ŧ ¨€ÛüņQ§Ĩô(ûgíøÄđ—ļŖS§Ļ+§{ŽĒąhŗÚ5]û õëG´1!žĨüΏõŪIīQšyŧ¨Ķ­ĪIx¤pēŗË×o)œņŽëŖeVĪÔĪp”vg`Pđg `&::8'ĖÚ-ŗNāœĀ9sįÎ œ!ā˜ãgË=28ãĀŦíãæí‡Û{b‡x'Īs͒˙ĮVôBuĸåC'ÅvÔųÅŋû0īĒãc“„ˇX\ÛßJ{ŊG8˛ų2˛HÕÚĪ]‹gģ€snŖÆKÚ8äŒũ`ņh™åzĘ;Ã*ūŖÜBŠÅ Tœ;d8¨°îf=?—]b”\ŧëV¤*(ũ=?”Ũšâ2˙äܝ*¯ÄĒeŌs! ­=jEĻũÛŒĀÍ?ŲĮwEÚPĶÉe’i$‹Æ›ņf °ŦÜ ÍaŦ‚SÂߛ.5˙§ĒŠ“Ōq°t$!E7/kĢąŖŧõ@ņō\°ÖxgVîuÂIœ–Ŗ¨žúá V§“đôfA"'bĻŠžøõįĮš/l]´E `>gŌ†ÂkéåŌRē˜}E?/ÖđúÂ1STR+=R•ëkĢOLˇYMā@Z4ČöŅäNŋū¨âiŨÚJēŋšPöYrˆHĘéĩ8=•|Lž+kčīĒ\āŌėD]˛Zq_+|‘I@˛´xåCaōĶŽ!ŽWaŽfMA˙#RWTt Îiđyáfá‹ķˇø›^áĄ}TŧYļ´ˆ”s@ėH⧟äė?šņ1JÆ1EiĄŸ§uߙSNd@Í|ė.c?ZŌ¸ņi`Ũ5ÚgŠžF ŧļ6„(ÖáâŌ’<įÃčwĀd›Üôû)œĄ´/sē´ĘÁâĻô°įqC3 YãÍ^.(˜Ä€wˆ2fkÉZé*ã@€lļ7›.ëyq30üjæB“Ģ€ZîzāŊĻ͍ šI1„ŲEĶ@H$āσČǰŖpRŲ ķŌ‹@ÔČIŲŦų}ᜊ˜^'ŒÎäü Üė%Ąŗ+wŨ(|ęiūëPõ›I‡Ö¨dE¨‰•ÂȅzūõT~õZŋ(PkÊū Í_cÍ­• Kŧ}§C#J á¤ÛĨj:˛¨ÅqP xVJ›$[›ŦŨpFƘŧĖßŧ{ ƒ !Ŗ–!EÛ4ƒ˛;ˆ:‰ķšĖˇn9PÁQÖ<$>ëŗ ?§„=VY„Œy,xnN{ŅaČÛĒãD­ÎŨŖ"—8@ĪCVCĘÖċΛZ u. ÖođŌķ}$ģUNMUž,ž+›ŗÅ5[ƒ¸õ60]đE:EõŸØ„Ō62q%rēū~ŪØōÆ4đ‹īnúĖ÷0Ë~ Tq :pÛ/|!ō>Ŧ˙įgVo’$ „­FŽ’ļ:Ôq …´% æĄ ~ģ’Ō_RåM%D¸h¯ˆˇ™Ÿʙē˙›ö„qĪĄáükĶÍNĒĢķ@Ī–2¯ô]KN—ģ†aÉEåūpį9zåWĒį>}înęĀÖ€bzĢËø=Ĩ¯mí4ņH™läļĖÎ*^ėą;¯‡ƒđLZÍ=]y™Ķ#Ÿ|>úÍås}V^Q”\|øFûÖ#p}š›vũĖāŗ7‡ˆ/+1˜P÷–ß™´”đŽ´›ĸš N)›vē°B¯éđZß;{{O¨T#nƒ3Ņųû2Š{5đ’$2ŗÂy˛;/“ņvdZh^ķáĸū˛€ķãģڛkãúoä.Ŧ‚ä៸Ė:€7ņÅ+#§Hx  Ī)ãE]ŗS2á…ڍī}‚š<ÎâųVūbîÕsŠĘØxųlė°ß~÷žžũšˆky7€Ņ3ø§*ĻŽg1ĻbLZ3Õô\=š}rŸ õŌíSœJ|ž°Ë•Íģ ŪĶ’‘~.Ī Ā •ĘŽo-oŋãããÅÍUæÂ´\ãą…w€EãÅ7×íTI_Ŋ¸/Ė2j†Ū5¯Æŗ/špŧjŒŅTMČŦŽMMũeŒ1é>,É|l7š/—1œžūTéKĪ<ĻĒbDy(q,íĄ0ą0Ú¯ˆũ­9ŨŖ´×S\‡ā>k §`Ļ슞×x –ÎZ÷éSCšÔÃaÖĐO9ŠnÚ2žĀ9sįÎ œ8'pūŦĀųō‘Ã)¯S ˙[_ŅĮ"üz“Ļ‚čbx\˜ÕNHÉŖ‡ŗB¤âÚË`ÂŖ‡Ŗ¸ˆŠ>ĖēÄMœx¨JįŽkķ—~Įŋ˙˜iŽīÜ`âÖāĸ…×Ε”ß\i€q:1  †ü]izppŌ„-†=ŨŦĘi ųäR'ŀJ%ÝĒú÷eŧŠ÷ Žą˙QlîØ€ęĢVäE7÷€“sr_ā`™Ā/ČåEļí=;^PH7%lēˇĮĖÁĶh@ŧ#ˇ­Œú|š)`ÍŊuędúeŪŋ Ārˆ”sˇ;"`ņ_ôūΧo ×ÁÂŦ7\ģ5Ĩ×ôwGæ€C¨Š€¯Ef4÷]Š`Ŋ8SūĮļ2lˆãÅ`7ÔšÄƒā¯’{DŋHúÃŅԏŒč€Āƒåĩ•š€ĢūۘŒî’Y3œŗK€™f$rÚŪ¸æô÷†áK3¤(Ėē¸pį^$ŖâŨƒėxęؑĶļŪIÜÁü'ÆČ*?-氉ɪIUøž6ãÚĨyîË p:~+\”N䟚;Ÿ|ū{Uf7=Ū‹ķiš.}ÚŨüúŸ9ŋ7ÍōAgīéEHÂ$j›%?Ôō_„Ņ×iÉ´l;u=fjĀã[ŠuY*čØ,ļŠŸ:ā‚ˆ7mŅ„ÂiŽ"ŒĶs:|ũ˙7—7›2ĢÔÔíˇĄŽŽ–š¯X>vY7UūŸˁ‚‘#l^ ũeæĸiiemĶ2GÜč¨AE…˜¤ŧ^fÍ>mŸ§"š¨°íU;V1Däzå'! 9oßfŗ)šDķ34† ŌŽÅPŦ–:ũ nĢ= ;SÖ…čāĀ:ÔÁ[:uĒĻKf:d–¸…ēÔI†>öNŠí'œ…4Ī^nĢ›î0ĀĶ8ĀÔ|†$‡˜X­gŦZŧM,Ūš ™ž\ÄũdĮĶÄRRŖ–ģæ]ĩÍÎ÷ē}ģėũkUũ.„žÎëŠtlŊ)ĀũŠ“tëÃÅ@ÚhKx#íėŌNŦMYūŊ܂%ĀøT¤—ĶúKŽņ:]v§+îa–FØÎFžr°2_/ö@v ũuGį‘ũhpyüUû­lmĩÜõc‹ˆ#ˆAÖĨNË[—Ŧ…w4"{„[X9ß×yĪŽT9ĸruw˜Üž‘­ú䟌Ž} MyÛDÅāļĄĶ|Øģx¸._fåBwhķī&ë>@åSũÕ§$zθxVY­VÚä%ˇø™Ķ•Bų hąĢįq˛ōf§Í”eē*’>ŧÔ×ĐŨ™'*ēō&×.MƒcN‡[cŌŪO—‚ŌöH+Æ4˜œt+ĩŌtžUøyU´= .wHģÃķÔR˜jÁ, gæÛ“”|œO•v‘.ũiøL¨āIŸy–úĀqI]U\>ŦŽī+"§Ė¯D 3á €­ąrl˜īŖ%Y Ā%Ėŗ˜ēČÃyņp7QR?ķĻZfĩĸ>äžžÛõ¤@„ĄA*îpØj}dãŋŧ!>>°îŠÜ¤įļžAŌžŠgŧōü#‹DÎüD;rWũw f=‘›ømZžg[ÍļÚŌzą-=N’Í“RÚĪõŪ=…zpžmy?Q‹ā” š>œŨČŊøķ0;(JÆ&Ķŋ :TĀéĘLˆ[Ks+ÄSĻžâā9H…uŽ)ІŖĻMÕHį)~üÛ;„ĮCÁy´F:sj66ąžë}Ŧƒ˙Ûŗš˛B^ŋ­ēCŋŽ^ŒÉĄ{˙1p†yHĨ˘u—ßH–VæqšĩŪŧƒ[6Šžũw´k8ÛN=å02ÖŒŽ\°Ōl>î]O›L…îvƒnûYĩ`—püg×B1•øëÉlœuXœx:l—ÁĒâiĒsšĐėŦíŽ7t)ķō)ŗōŧœ.ÍæŦ•Ÿ$ :EÆSģ„SU;¨Z9‡÷~ŗžøœ;đ>$ü›ëÖMž/â ?č¨ķŪŖĸ÷ŒÆ R*Y ĮdîšMæ(ę1،5˛ķûÎã>´=ÜæIģCcX1&0‘0šŠI˜ŽEkŅ´ Ύ¯I÷ŖŒQlī_˛QO‰į¸-`^đ;v7‹ŪWf™ßۍ`¸øyŨũõ€_ę ^÷!7ŊM"Šŗ×të<ˆ˜SoĨTLŒ =k%öQvļ+˙ŠOw—‡&U•€Ļ\ŠļtރVÁĢŊ—ŧ{[‰6ŧpŨĨ)¯õšäļ}ļ;ÛôíĀõ 8ŧŅĒî°úr¸uƒŽ{Ŧ¨ŗŗ ;) ŲNtŦāœČΟ%Ų9sįÎ œcgõčāôDąĮŋL…:.4uVOįŧĐĀâēˇīvĄĢŦ’N„EÎkŨ?RŲšÉuųS’lŽjécA…‡g EŦÎe™˜< ŀ?|8ĘøDĨe{æ‰:ã°’=^t‚J_vR?b2yhp€ĢũŸî>œ8Øæ`Tī4+‰UˇŠįļ›}ËtĄÖstOyļ{b‚ Ú9>oá˜=Ũ1L#ķHûæ¯ąëNŒũād.ĩĩĩÛîy å§ô*â3ˇ§][a°ŨķJ‡Šm7â^R~õŠãx€ŖÖbĩū:@+a=€Å'ŲéNq™Ä•p?dgÄ> Žž9Đz™(ũBŧîoÖ}š;UžgæÜ’ZzkpDLīBŽ °Uã•įaōŨˆ˙4Ũd­žÖß&•ã¸g‹ûĩÆõ=+úÛÂŊJûÄ­ĨĶ0ļyƃDņ¯ßÄ[—C:Vę*^ûV“äéöūÆÁÜū˙Ųõ.yTR*OĻõjZ7&­FĻļbjq-2ĩ¤˛bj_­Ãd5åcŒF}2™5ĪĖÆæķTé.‘1&Š—ŌÜ/åŦ›f ˛īņV}wë‹pÆm/žSÄŽ‹ÉģėĨųĒØsĢÖg5ė´UĄ öąxuĮ¨Jn˛ GŲcÁQžˇ}ā^!ũ0ÚlYĀEŒĀZÛMœíh€ŸV%Käwš$ü9c§ÆÃ—ĻELŪŖŽųãęf[õú Č7ņōÃėv†#čôXVYƒüÁT ąÃíĖK\{ėŧņĩĻWâpĪ ÎŗĄãīuEĘw‹ËW:ožeüĶ.Š4ĀzČSI\”Éö–ŠĖ×pÖ"+‹å7’˛ĮgpĶ7žö aŋ Ŋ•;ƒ>ڍ†ˇ;Ē+RîPƒâ>˙ŲLIS  ŽižÉœ„ÆoúK´dģ\0`1úR',:Ŗ nÚMä?p7ėÅÆ7€āįÕBXząL)VŊj­#RN˙~Ö}āx?įS۔Ia‹ÉQ~’Ká×sBœÉ]ŅDú_Uņ(‹ŋ+ÛĄ˜á÷K#Ĩ(ųûęf°-œ‘$_ŨõŊ°IDÜ"Ęۅhl(äEöšgX,§-üŽbûĀ —–>˙[˙ p}ĩå^ Gŧ˛Ä¨°ōōÆzāĪÄ1g3Q™+v§ČĀ4\˛ÖZöUP,é@=ĸ8W8@Hō#Ų-ušp1Ŗ_?Í:]Ą2Šdüøģī‹ļ¸ķ×Ö×pyģ0­ŸÍŧRšT¨d?ũ†ēâö¸+¨ËrL}‚‡‰/0YxęŠÛ2­ÖļŠ#tuc"ß=í0ötÄŖ¯Ô/Y›—‚2Z&iŠQ÷tæúģŧĀī—˙1máĒé1Ëã I †ôYŖq%Á÷ĄØĶ1Úŗjė€ąųņHę‡]Ķ ūV%Ę%*%ãŸÔCŠTtíÆ[Ī\Š]×ĀĪ7Yļ ;E´50đk+kΚbĻMfŒWXíÜEš$€Š­ŠžÃÜcY*H1A”‘$é´ˇ^Æŗī”Î’ī_ŨŊnew›ĩQ02Ē”ŧ;ûéc÷:˙ްŠm{če.$čuÕĪOį“DĐÆ„‡ĩí"š×Úžšôn‹Ĩ_x7ŲŸĀTŋ“`Ōl÷LgÂ[ĖiÕrQ÷QĘËéķ^kĖ&ŽÖ9 B¸‘[íIõ.á˜Î¸iŁZ86‹›}:_Š'ļZ—BeU&CõŧJõ:( °´Ģt‡„3Ÿ[q•”Ļmķ’íŧäv!Xąø/2Ųåįŗ0āŪ_Zޏ쁓ŋ™§—Ësž°ûĮS^ō^J”íuŊŪėH˙t$Ô.í>z)ŖúČâG: öYk:[ĨÂdgķ‰Ī|ŗ•öNō›,Ž÷vį‰sš‘xO!F>ƒ’Põ3bÖÜø™û€đõëPßtëԐfOv'úp;Ū.…(Eđô÷Ĩ#Ēá>‰¤‡MęrīdsˇpjēÛ÷ė˜|š­ĮīÅąėŲ[éŦ§u;÷ŗ|kštG2ô‘7ÁpŠDÉf°ˆwÅëØeĻo ŽPāMyąĪ˙ؕ&WîU?3Kē,ØG10)ņ˜š0I•—ž4ĄŠíSëĖ=ŒŠt×§9ū×6_ø­Ųž!ū!ŽkįŒŌģzO˙•ŖcV>ž1Ƙšx†‰„‰C(Ū7;ŗęĐZgc_}ŽœŒFû}Į[;}kßáŒÜŌ¯OĘ•Y'pNāœĀ9ķgŽ:VpšúXÁ‰C`Å?ž˛ŖŽœ"‚š;ôÚĶn8g t" _ō¨āØüžßNi‰#hĸY*€ČO~( 'âzZž‡…ĩ?YÁéIą”†‰ę1Ō,ąžr8qGįĖ!šÜîQssÖ27[ §yņ ļĪbWŪjĀīuĀĖR$e=ĪFYr$fHMßåūÁ1č°unJ™ōÁeC“Ā:Ü?8BOž%yP“nļZ…:Ĩé^yrõ–5ëĄBĖËĨoeŌM‚*”åL3Ėų?ÛĀY Œ•GR,wFĀJqbgYëû,0Ü× }ĶÜunW€Ģ"ŸĪ bh„‹ÛizÎnƒô–˜%F Ōe†/ÁĸÃģ0-Å Ŗ2#yŋ´[ĩĘeûŋšczlD¸)ĀVÂfƒ Xyīō0Zėœ.LƒsޏRQ/E†ˆ$–,NyÉYą~Šč5 ŧŦũQûƒ5ëĒî.ŒŨ¯O§1>l­å{*áÆöɅvŋTb¯›5FĪ%¨Ķī&¤@œ(-sqCŊį\§-īø‘Ģü2×ĪB'°Ņ† Į–¤WôéĶzsörĪs†ĩŅ‹å€ŧķū…ėcāŦlŋßĘšŸ‘&0ú‡õ{P>éŲķ( ps/ŌāŦž6ؚtŽ„[bxŠdęɏŊ€ĩˆē„ĪŨÄļãbü7¨ëāTŌm[Í<¯m …bNčM`$3ŸīļŪ{›c.Gš;*3 ĀÆ`[đS ōwUŪFĩ˜uL xmĻu~¸IHĪŠ‚g§Te"tļ?üán^v™{Aņ™ž`ZŲvJžäpÆ[|ö{hhÍĪûÍ! bÔ§5Ą¯YQ×ɯ|PuŠē›ŸôLšdÃģSÚÁz@Ĩ~B2¨Lwļ—: “ÉrŅAô…Á¯ā™Ņ ždĩ:({q-ĸÁéÚŅæ[īÜ6{[¨vŒą‹S>áúĻOœFŧ‹mčiQļ!õwļün§äļ‚v"6Yw4 8xҝÛûi ›ūģ_Ž=Wøt˛ēRokĪ‚Ū{ČÜûf% ‰Ŋ(įęåOžJ¨ ŠßūÛBTÅĸęk5Kĸ<‘ŧõŠD­…\ 4¸8 KkĻątķ`Ŋ`YX0ķbˇqÁ“И‚ŨØŲg­T[f9(^ëáE‡?rhÁĪvžY˛Ĩ­ZČ ĮLa[?ƒ¯˛īyę§jzų6žîŽ!ŽöšŽūäƒmîŦ]†öIĶ…G{§dĄĮģŖĨK>¸4ģöŒ@ŒŽéE1^ÎØ~f°–íSÅIc)šžķÚÄGZnb Õ'‚¯ŠqĀdPrŽÆ]ЉVzšœÎđBˆĒB!@¸ÜwÁaF™įĪĨ™Ų ēŊd ŖŠÔGa:ĨkË#%ą5ĪpÎö[å˙¨OĒ{eöˆĮ˙[._ŧš^bƒi[îü÷.•Ôņ|˜sĒRø9U>„Û›ōû‹ōé>ÕtÜ3õkW4ÔÍ ųUO €ĮJ{œō{‡žešŠzs2^ņ=ŠôЊž­ŸĪēũŲíæ%9ŽëHø5ЋÎ&Š=[7uëƒ×ĘáL{‚ĸeųv¨ÄË8sQ/uâ}ŨŠņJōÃ5Cž¯$årķŦmi‡Žg‹Á:‚¸ēß=O\ˆ/ļ#Îę&€3ÚīŧēãÔHh‰yLũ 8ž€Į”ų `jŠ#‡ ^lĪœ=Æ˙Õ)¨ũą1_uuģôÄĘ üŽ›úA×:]ū¸Pú`ĸMŅ=¯Ødī<îŒ"ÛXú#ž“mōģ͊eönŋĀ^įžüֆˆŨ‡Û_ädoMÔ?­?t—EUjČä‚4ÁfG/֎šĖū$ŅĒÜąIô•6 ūæÆøF_́é‡}\^sNJ Ü.đY6Rđʹm_NwĢ}#hąAá)’ŠĮ#Ń^Éĩšœ:›ā=øĖŦŽũ ɖ|&đAąøv—ĢŒŽKMҌa֏sBe׎æĩ–áAÂ)ĶV ã2°ūõ‰AøfĸlŠD[ĶŽ:Ĩ0­6ÅøõiŌÍöLnu(Vx€ĸÜA]ĩŦ•ėx÷šËĨäņ‘ƒÕŦí"ēZÄm4„9˙έMkŪkO|žĒ2ė;Z,%Ė|^SÆU3pđU•au§+>nR¨Ģꡜîī¸@÷<‚ÉȞ9qāĖōüarõ+8˛39Ä5į ×'á¤npˇY÷8'pNāœĀ9sįÎ^á$Į ΡŊãÅŦ##OßhĐÜvDxúGƒÅĘöúĄt„Zŗ"õúąRtŨûQĶ5ūĐgOīœí§;)WŖãcĶnŌûgåžaá:]ËC­ ÎØ­ÂhuSᯧŧŪędŋOIE—›ĻXũ|í–íMf5¯›ėXøÜėŒËbUÜCŪ“ō˙ŸŠ<ëÅÉÖ xnqâK?špz}H#˙#÷Ev„ëN­ŋœĩđLāēüÆÁ€ârŅŠW•¨Žĸũ×,uŗVqC`ës Ãh3ĸīęŪ[–bwpfKžRc@<_ˆˆb’'Z>´v4zcņ؝ļ§RæŽéŗ¯*š @ōĒZQ@qPäîĖfKČ=ĀIđōâAH×;—•­}ŽFø-÷Åâ”sŋã&Á€ŋíxa•ĖœķNņ’7!ÉjqĢOFP™â™(}/ĖÆ1Āģۘá>ĻAî‰Yq7ÛüŸë_%*3>•|įZ"čoa*ŊPģwĪ§î–ąØŽĶÛ~ĄĄ gã˕‹Ŗü°ĩe†ëlūū¨Ķˆ?ޏėH¨&ۇ%N°îhŠ~€ī‡ öüÂåÍ!‚Y¯‹dšŖāø@Ö,'É í 3{Ļ“¯Í:+Čđ ÆÎĩGrŲébi‰uu„„J %=cîąŅÖVØĻXĐë‘îÕ>pž+iŠ×Y'ü‹ œÎrúßŗ§™Ú˛„Õ(P‰Qkŋ˛([CSžo˙yšgzáxeč4˛ūFoŠøŧÁXī|ën p–đMM‚œ{Lv‰ã°áo˙H.Û3ņĸė¨ĘIÍxÎ80BT'^ĸ:-‰ƒPe}ˇŪˇëÍ/7 Îx*QP:Ą}…ķ•GĘ´$H–öÂáú§Îũ „k-ƒøŒėŲ5ĐãßnėŗâŽ_¨eø†ōf“•M…“dŦp}ņŲYî5¯gę?Qđ"ŲF°Õ?Ž‹Û ŽøxZƒž‘VŽ!]ĶD(Ä|”™‚’.*| ž„Ų¯ž-*bĄ_1ž ;’ŋŗNŪuŅ퐰ëyÜļy°˙SPō›RŎ’ī$z:Ô^i2mֆ÷Y sÜwji)˜Đ€ēŗJĘų@hÅ}ĩd¤ŧ%’Ŧä5›8ŅxļļZî%ŲA38Ūs üŧŋŌtĘ-´–ˆAģí[8ßg4ÂB4\Z–¤īYÄpjdņ›Ŧ}’Ô„Đ\0š’Ã1 ŒœÅ˙Œ #Ā܊wũwšZg:æ8šúšÜūlНXû™2Q.¨Œĩ ¨Ë×<ālU™§6íÁāŗl&pü?č¯y„ÛįãîåÆ~wBԜIbÂķ"JlHŌ~™Sŧĸú΅BĘU´ \đ$ŪÅ35 )*ęę¨7`2PW0~‘ ]šH´~ĒšēzEÆÍU5 ÔÔ6§Eįą|ŽOęK‹~Z‡7:āx;&KĶĒųÚŠ\¸Œ ?ˇ ļ`<‚ƒšōrŨmöĐh “=ĪxŨnãrxÍĒhąķqˆ —û׍Ļj~•0ņ 𖚧%ášŦ!§ š­ŒhiYúĪûĪ÷IĐÖģb‰ÂđībĒ/ -X'õ Iǐ”Æ;Ō%! twÚŖÃ]ūŸôÎiˇmcĖq€āM\đ]^Hĸ†•î”÷ˇÃޏɏQnƒÕ/ļŠN;ŗ÷5‰ĒĄŽ8˙˜yĪûũ–Zņ[Ė/™(î7ß !8N!ŋĐq¸e8ĖV5⟙jTTāßN*īŲxŽž˜N‡ä ŌüyQW\jöN)c¨|‰Nā2yŗeY1P?zžČf˙ûUĄRI]™üËūí›Ųķ|wÂoŸūāŋg‡âūŽg­L×:e4 hú‹dŊ÷“ÚĩŒÖŲ4€4'Ë>/¯)¨čŠú[ļÕžÕ›¸PųķšÜ”öNdJÅn5?Č2ÆJĨkŽdÖdē¨œĩNe4ėŽŅ8ŠĒ<sįÎ œ8;Ú&œ4ėIXîīXÛŗž°ĩŪ œ,ÍØÂƒ€ãī ÎX)!Í:}pō÷Į9.šUÎųņ o¯p:—ŠĄN˙æĻ­ÉÃhë9´´$QkųxųŦøáŸc0 8[›Ŧø0÷xpt´)šĐ×´]vZ‹V¤í•ŌĨūŪĄRgä /M„•Ī.~Ôgõ.ķÁō…ÎaÂņ`ūø¯Ë1ˆc¤/ ‘']…:ŒîÆĨW6>)Ūō™Îū‘â™™~.ûZ*ŗÚđÎ΂Đ˙Ŗ”ø”Gqdí!ÂI ˛D¯/€`îŠtĖzp˜ĖōIƒ‚>>iÖīĖK~Ę6oJÅ2õ¨KÛ1-€‹hŧ$2=DŲq IÃ!šėá8[nŲ˙QöĖn!6pm"éüOsĄ–™cĩĮēņ]Áqvfĸˇ˜ĒĢ>M˜ČĶ–í*#W2;ØqņĄ"Ō€r ]<#Ė%&›Ö(ˇMIu(šNl•ˆĮæį#ŠwÜ0+~Ґ´xŦ#øĀáŌŪEü=íĐøh˛ņ9uæ×4Ņ–;§ŠøˆāМŊ“Ā”›!ä_ģGG:đøŊķ×ųī^ĩĩ‰ĢVąę(ļmË} p&ZFMzNųa:˙ ŌĩRœmēaK2ŗ@žžšˆ95@ÜēdMŽÄŸõh‹|˜VšĸĄęéėœŌ6‚ö^„‹Ãˇ'Ū'EīrĻ)ÎÚĒzwi‚ßx÷*6ŧąNBã Ŋ•T1B1§z6ŪŌØžíŨ̈́fí˙×M2kLĩnfTņėĄœŲs@g#S!c˙c‰2ux'ėtá#kĩÍÆÆ¤ÎÄថ9°w“×XƒÎ¤BŅMÆ,wåî”×õįžŠŅđF—.8G2NŠNāœĀ9sįÎ œ8'pNāœĀ9sįÎ œ8;Ù?j8 ÕøŅt&T Yšéx0KwFė­ėTø›YņĻŪÂqåZÕž("¯3Ŋî6ōnŦ¸G‡ÎÚĐĘ#÷'嚑Æã÷”:ÉĄÚËmʉrKõ@čû_Bŗ-ŗ ?´˙’ÍZxé@á=´jl÷ã0š=H8ŊxŊm‘˛.˙`]ŗÆXúž#ešôŽž9D€ąjã¯ôėŽ1ŸN–Yˇk8:Œ(ŋÃFŖ ŅÆāûŨꏱí]¨ü/EéY…˛´WuņõAŽÂøŪ­É‹˙čԉđ$yhņĘųâÅĩú]Uîúŗ­*ö„/ÛYķšÚYv"ˆ/…Ų‘_A(ĨĨ6*FŨFŦŨQzÕ^hЁˇä-iØÖhö‰KŒMŽ›SáÖO-!„0ČÖĮuîÆN•„Ž˙sŖ[ŨģĪ$ŋ*.ŽŨ"L€×ģXuہØ̞ų;ÍR‚p8Lgŗ2Íp‡;UôžĀąqjūõ|"ãHB?;!â#JC0ȅ(3} ƒb´’>Øõö==Ū¤„6*@unâÚ}ˆØ"d=x õŲß°9Môß5¸ëq˙ Ī­u™;+Úup\€s˙ņ'˙šmŗžŲ‚_6Â( éžaMīFŧû‹rúˆĶíJ3Šōs9_ûX|Oô6@ËYÕ@‹ÉmËaũÆÂp|Dƒr˜3§Š`Qy´ė9wAĨŖ‘44BÃķáÎĄŖßAÍÉíāô†EH6#?“ßnĻÖû3?ŸúT”žZŽ e”Ø..čņZ˛DD§ŋB4Ú ø§EĀlĀĮߐ]Bp{,g ø-’ûmāp%+ZĨ߯Îj'e0ÎJ°ĐE‰ądU€×DnÕņĐ]›ŲFŠĀ_ē@4ŗ’ÉÍŋTsjõˇcpv°ėŦ›@Fĩnˇg/¸ô6}ĸĻŦĄŒŒÁņKQøĢĀŗF€øeēúŧ˜5ë{Žn iúFÁŒ‚Õn¤T<Áģ„=Ž„4ģēÚĮŪ `~*œĻ: đ¨#dÃ_ z”<)׌wšŨũy3qī&´”ļĪÍī&DĘōÁlg{…Ĩ”×ķŅ(XšÃë™G&Á`QæFęÄļéSŌXÄÜĀ՜19BZœé˛tųũ”gûCëbō¨r! ĮE=.ivŽąÜŅ Ē'ķĸ+Ré;á—ũÔ^,AĮQēŪ´ėĢ•ץ×ūO~ęEfN[į“q?ëo°fĄžBõŨˆWĒ­$åĶIŧū‹*ãj¯;R)¸æáÔÆ= PËáōŠZ ģ=ÆööĶũ$Â,ķšĀõZ đ‚¤ÍõĐÎMtûHKĮ´S1í `¤Ā‹`Ĩ# ŧĢՐ™€€Ié8…‘Ū4öĶËđ5 ÖžnĨ_ķ{<ŗųk€Wnė2UŗP—ØZÎ'wC%&ęJ$îeėLE7ŗ+Āgu0lnNöüZūģĖé¨Ė@øņšģfk3–éqLŖąģ<‰ČUÚeä*€ņr_ķDž2Dī¨žôB°p_“lÆÁÁ?oīûV’Ÿažģ´†īĒ@‚÷ĪüĨÕüLú gOÅëÍvøpIŦ:$ËĘ >ĪĒ2Ųüz—Y¤1DtÎĶ Ü8ĀØÛ%‘§hŊ¯÷7ŋiáéeŽÃųL‘¤‚$0Ā8x’Û÷žÔō'ČÎDĩū#×xË!Ā›~ÆH{÷”ė {į ācē-äǰįŸÔ6ˆŪû&ąxž,!1WëΝ6’ØžfßeŨĸH3Zr(Ē#@ÎíúŪS~֏Œ/U!Ū´TЧe;yVĖUęCŪ€Z•ū—… ŨjRķœCéŋ~[!ŸžōËVÛDRīŲ÷Ļøö!!j|āgųpüÎÚ÷­ÍÎ\[lq֟Ũ*¸ōuלļuÜ8Q‰^uM¨I`” Ž6Ą%SĐI;'Ģ5 ũöšÚ8ĩīpÄ\F8wua)Ũ´t!FåMÍ{ü)ˇĻYŲX=}ļ#šßÁ4oĪc2;¨šĻCįĖõ*jW}(;ÍgËĢ„q–dĢĻP1ą3é>[Äą/ˇ'ĩ–4ĄE,5W÷Î<đ€đÛ4īŒĄĢI=ūŧ“IŽģú\Ų“ā-áÃûį9:æ¨÷™*ÉM‚ČÄeūzDÜ!(¯ī  œ~˛­Ŋīt×}•Īߟ1i+¸RÂÅîäÖ~,ÄTÚMĀĮ6é†?ͧŠ0q­ÉęĨ(zŅPŸ×…\ļ?hĖž ōŋÆbũr!üųÉ ‡ģk%z,˙k6FՌ1‘Ppąö”9”É9%%.!ũü#-°ō>‰õū“rް 4kßKfÅS1`šufÔņŧ*ĀČØû߅•gŽ„:ß7 Ļbk$_58Ô1¨J`ä@}G4ūŪŌÜ4F&w.Ov fĀ9sāpVœoyŊYŊŖgVkäHáVšõ=1@ëļôŅ´­r%ûŸ>ŅŦ~p×+ž{ŧ¨ķ˙čāĮ^vÎ!œ°ß„ļûƒš™C€ŗ6<ŗ~Nˆ…c<¸SŊnÔņPô„ú?}´/îüĢ‹•ô`áDoœ ųæs™ŸåŠNëŊ.÷Î+<Gܔ8˙(`‘VĀR4ČĶ•elX^ļOČũŖ+ĚŅ8{J-GH™ŧ:û@8ø‡mm+a6WÃ}Ō,'?éŌŸú:æLoĨœ#úŧpĪäėl÷É­ÁšÜž‘öüéôîh=â"˛ t{›^ŋ)ļÕūeāģ-qKvĮ“p‡GĘņ˜’ €Y%Öeé(Ūx€áŒžß;œ’tΑ-1MˆqŗM.1´Æ4S!;ēˇûĄvÕ Ũi Cõjg ī$ lSōSaøŋEfLõyp˙>ĐU{…awu˛e'ak’Ä’R\ŋW,"ß'ũA]R§æ3ūvnMQ ­0Å{“Ö2:Ų3,ÕŊ*TrĄôžbíbėŦd§=–뇠9œÍq€tÆžŽâj=÷Š1Äųb7@萲ĩôŊ„a`w%ķŸģjRúÂ" ™™™ÃßpxF&”]LeĒŋ%9Ũü„IšäƒŠZÉ.9÷úQĖ<ˇ-uŠ—qŦÃzĪ"Ō>¨ŧ”‚ãĖŨx‘ø§‹ˆāúu{fˇtË1Kîë6~bGQ6)!i z y›‹:>ĻúČAMŲŖn#ņ´Ģ<`+A'Ŧ5č.˜V]sĨ`[K‘Ã9—včˆ+ú…ŗ@ķt7ũ2ũƒĪ#ˆœJ%Ū}™ę‹„°Ëíˇ—ø2K)—ŠtR'ÔādĪãsĻÚ–Ŧ~`āáÄMPuŽũv4‰—ˇƒãŠ>ĸuĀ âŧLŌĶØå.^ØN ŧqĀ\(ģÕËöå˜ôÃęΊūŪŗÎÚw_ ä&Ŋ†ŖtFĩŸ1×ĪL‘gH0žo}í0ļ;ęēuy›;Ø?åwĀņ>ƒ˙ë<{ŗõĀÔöČí|Šp6;ĸŲëĩŊĻ}ŠF;–?UĶ—Ī‹‘\”sŋĶøÂpĻ;Š3rģđF/IāŲÄ_Hŋܚm{ŖúĀ Đkš~š)ŒņŒme ŧąLČZ4ģÜ ëJĨÕčœ*aÍ'.ŊĒ€eˇ0# bŋĖš„nģĩŠį+Šū¯āŧƒ†GŦģ˜öųâeęõ$ō™ÛōŨKō1 ūīävbžėîŨâ˙:7ŠxTęƒgK/8Íôˇ/žĩŧ ÖXäįÕĀĶ úMŠk¯Tā0'=āúįVņg-¤đånË˙_UáVWƒ¤×ueWŸ{(„ąŠš-cĖC윪˙ŒžŊEāƒ'˜\õ~ՏTLų­Ŧŋđ“Éⓕ˛ą).” đQĀČč…g=^Ŋ•Úx÷M įŊŒ;#õIpG.¸ĢAđËMW/›žČá4ļ ~,ęZÄeęNņ`8MüWføƒīŒOK™ÁPP‰?z&qĐD8‹ŪŲÉÅȔ#D¯mĪįK–=°ešŦ˙é”âxk“Õ‡X?7tBň9Ė;%ŗˇtâœiŗčŊãv_‘—3É0Ņ­yKÂ8%L‰–ģCŪí'å€áņ‘|.ŅL~7O5Ør™3iĩP6›­Jū:Ā9‡č/)ÂxŠĘ‘Ŧū,ŗ<ĻūĄĨÚdÉØČ*Ú×^íÔĩļéä•1•|’kúV2§oFļvtyƒ+í ĄSœ'Ũ]Ģg˙™„Ũįšz,ĄUÛ÷î Ž_›MĪ4ÎÕ ĨÚīĩŠā÷I7úĶö—‘nIā|“/Ųî=¯,F07ļŽŽÔīyGũÛl/|‰€™ņâēSpĐ^ ”ģin×Õ*ßuą5>?Ŗ¯CJĐ>RÛīeY‡Mf"æû‡ą Æ%Üã#Áķ 8FÄyĖ×ÉŦ4øíÜex|€ËQēOÔÉÃøģŪ4áĘŧ |€ fVÖ7Üļ"Å%š8ŊŠ™Ú>*|×$ÎTÕØ¤ Ųz02|Ņ”'^Pw×úÍž6öMvēŖā§b@ŠI×Įš)Cˏ,'VÚÂĶ(ųûåč€āØņ8ūؚąąm¸¸~ũęŧŪöúk(œģƒîÚ ,>á.žãį2TrÆĨĖÛAŽg;=‰H.ŠŽˆ,%îlņ_Ž5<čåĩĘ\:‘ĘŅB|[ÜËsē}ˊ Ái+ߥŦöMŧeZ›š o†×īJJų´ŌæÃZ|t<;sß{l}až 3ČJčü2‡?R‹ĒÆ(aŖ¤ĻnÔ‰#Š´ō222&2ŖlqŪR:—v î7 8 Á"é¸úYY9TŲé?fŋƒīdeņ ācŒžæÚ_ųzāŋeŠuž.[-ķ1Qa@}[Ņ97ŦX° iV—yíÖĩ_ĶqBÜŒ= KiĸĐî,ęåv aĖŗá>ÉNHDÁ9€čyĄĻۃ„ÆŠē:ŦĒ]ÛGQրKjKÉW\=ųôŲ2įD.B~ŠŅwr÷N×Į!đq+žšŪĘ]1žŋÍ͞‚é Ã~˛ËŊD%8"{í€uâ3õ‹?šÉÃë Qœô­?O@ŒuĘb~Nä]rÔé!"ߖŊ&A"# ĘéÛ_æK5†–ˇâ­Ô}ʖ@öí'Ĩ¯úüš—¸SĢĶhšl•ķļáķŋ l&Ā›+2ø3iúvÎ!¯\4ËÃÃé€ršD̏{Žü–ū~ؤˇn–öI÷3›%aKãĄáÄ@ÜFĻ‹ž+q[<} ¯§ˇáķâ)k|ęlĩrŸ2ÕĮjzü ˇīÔîtiŦ—ķ8Ļ•Él”¯”{÷Ų˙T%Č{œĒĨ/ ôđq‡Ã{nHęŧ^ļ):—Ú->đœüĩFL­šŊkeX÷^酱gģĶa¤‹ĮVŽ"›ņtÄen[ŸoäŽKxÍīRb–ë"J”ewG÷°W(E‘,A‹Ãŗ?ņb~^Áe–U•œū6´3§8sfËŪY¨'úh&˜fŗĀĻ åņ:į‹§¨R¯°JcžXÖŊ.W„}u/iī7(&ÅAÍ2$oHáãĸžĢĀ(ŧÎģũm‹Uˆ7fĖč2)W”ģøŲË] CËNāqŸÄ[vpJŒˆtn8K‰s+ÅĶŖŧ2@™ž’1E*˙TŅhŪÍö¨FtĄ”mļŽ(Ø Zz;B§I ڊÛf˙WėN :pGš¸Ū‡`~Jā AE<*3ą`UŧīäŖÔ`1‡36^ąXW¯oÎ/ץŨHHE(Đ5Úįv§Ž=ÎjŽp&ô15đ!eÚü­Ũ0ĢĒyV¨1 öÛŨ’S¯tŨDTüŖ­%­‡J!ERžōœÔWœĒ(HR+ÁÖ kéõxtÎ||??c…×~*ŊÖ/ökËÎfgÆ#–€$ÂC%Á4ŒâH7AFņēÚvcgOøuNߖŧ7v+ ,6ŨPGˆtąÛr,HO…Ĩ ĖG|)ާ5žŖÖ2÷Āąk’•_˙Œ‚9+ Á3) ŒcˏģĸĶ•>‘ķĒ,(•NBHt9ˎP†Ú(ÅÜmÎeēę Iä$LZĄ‚€tâūægVƒ’-ö;!™’÷ũMƒÛzŽđ$voˊ§= /‡)ķDĐTCÅĘmĖÂAÛRß°e{ŠöR8IØĘ́Öü'•‡I¤āĩōĨU(ÉĢéÖÖĮÍĐpėa$jö-ķ0c…béÚÄcīĻ™6øšaRmĸPąÛ~ÄU ×#‰/…LŠ0Žžå¨öųÛÉ۴|Ę|ąõ¯oÔ" E§Ÿ‰ēĨR5ã' ‰nĪW_îoīî‘ÉI=cß'÷pģJ@üD:>šëÍzpû:ŧĢú‡6éxūqTÚՕ9"k&îPO÷§[éĀÄĢņ˙E+û´ôŽ'ūÆ7ûõÚ>“xƒfĢŦn¨ãÕGDˆÃ3§¤4V]šČlĢJxūõÖŊË4Û4ōØĄy; K§ēƒ “Yæ${pŽņå0p[OÍģ# B"=—֛ĨčÆ^6éâûmZLjƒaāüĐļɏ&Līd!ˇHžZáüaá[d\3ÆŧC%…Q. ĒGVsŠ]s]ĐŽ HXtlOčŖŦPĢ@0†’.äs˙#.'jU¸yĮ_ šūŖwD§ĒJŠ9)ōÜÅÉ œ8'pöhkzcļģs";ûgN8Í~ŠĒãÁŦÅā­ã%;‘Ggē”$ąĶq¨STœ™CŦÄī„Ķ™ Î6N‹c";Ų!Py"­ģgÅÂiz×KÎFíČ4+N>zˇG ˙ ˜ePæ!tw×ĩŊUŒŽlĨFõŨAš•&g$uœ…>Mšģãs7÷Ž˜s‰â9R`m™_ÜÍ-Ū8E_quxxuÚ(ŲĮāôáŒ{PĸėØZAđÎĨgB @ą"Xã†)Ä=v§rfP;‘|’ģŖĖgy@ąÕēßí{`í ÍJöyNüLâûpF¤^ΓÆâĐ'šŋŊpTq8_Üv맒ŅTæ^ˇß7°Rë˛áÁ0̝\Žs!騺ĩUaĪ5ƒÅøn÷ģ—Ąč8”fk×Â%Ė{b iĒ둎 šŅ}ˇ[…ãvŪ-—ÅDCu˜>Ÿū…ŧ6&J`Å7íbĮ}ĨŽęP‡jĮōDšŒ'ÁE8ķ. O Ä7īzØpp˛“ü˙”cܰÚėgēf˙[‘į9û†ũûõdĢåhųû Ũ]ÔɘūĮų‡aĻđĒdf\˯Îde[[ĀæĻqVJŊHo: ĒũV?˜3î<á÷@ģzĸ3œŽ|…ØQ+ĨĄî¯œ’ˇ°¨ÜÉ3ÍČ-ږ¨nMš÷Bé'^Iv—Ę“Q*X hŌˇö:ͤœmiKŨŖļĶŨ7yÅŽúŽyڒˇĨŒ{ŗ][=x4§­ø›iŠq­ˆŪƒ‰˜ŧ×m×û-C<hOCę-ęãˇnđĒÜŊī*dĮ‚$ž›¨$;1>[–wËžōģ6ʑŊö<‘wŋ–@ŒVßU‹ūŪ=1JcĩÔc5F&”7{ÜõX ŽĘOŠV@EˇƒVRë­x7f:ƒSûŽßPÁCĀ”FįOuCˆ°…^ļ$—5ž–]rŸ›ĒsQ¨L}ÚĘ8u÷—ZÁލs§‰=Û*ŧš~Ų Î*‰lĨ‡ÛnR{˜ŖP]R/‘~p`< ’´]`v3*ęģļ‹—ĘVyß䘺âÃķ×ũ…ŧ7{ ß?æ;!‚YĶŠfˆdLģߊg˜ŠYnŦ8áD%Ļ6 ^0)T$ŧą'ĩio€jŗĻįD—Ē=%8—ī)$x(Ēéte…|*X‘‹‘Wy~§gF5r§BjxÔ6šî…ü4â<4¤ŲIÚŨÄŪ8kī—ąī6%‰Ĩ´T—CōL<ū‚F¨×–'î>ņΈõß›āĻi{DíØ_¤}fĻy­]&!—â’xfôĄü|$wP­‡ŖŪũwۆrÂŧų7>•KėšĒAÚ~=ë6|QšoHņ‹6’ÁyÔíęėˇÕY¤ÍŋøTؕŲ)˛ü-Ą” oÅYqaiƒÎ ŊŽ?kŒuÖkĢ,Zsđ­á¸Ãø1ŪÖCÄo’ļ ÷nŊ*w7q›Ĩƒæ` fí…˙–Î=K™ŸŸi•ĸĘî”L´ņ=Á9|yîƒëß7’LņÖŽ¨cŠ^q˛ļÊ÷m4^zBaⲥŽŖ˛ŋAûĩ¸É ĸÎHÍiƒĮ&ådĘw  šiŦU@ĸõB‰ĨļkskÎáLĨķ@O§:š4•íčĢnđ ņ™Wę$™‹JžcĐô´āŽvĩÃ>â\ũˆ™0ŠÆg2%h-œeŅú_´š'zœųtēcWbčîÎf×[hûÜÚ;ļ†Ųø _Öegęņn陋KâļŌŊ#åÖϐ^Ŋ•NĘ hy­Yį•üūĸ}û’&'Ed?ƒmĩßräŽá8Û¤–…—~PLvÃQcM¸î؇$žĪâky\6GŦ Om¯ĒŠQ˜ütITtˆ‹ö´Û%Ž īûŌΚØĒÚ5ąƒąŦ< Ôį^1īĻVLZŗŌwÂË ląYâĸ=’Q‰ (˛īŠ:;%l'ۖ9Ė##ąâš7ŧäp$ZPôödŽĒ3 ŠũåŪqŨ6zžPžsĶoëėŌŪ€SŧõAÂyAÛ¸ŪDLN pĄųŗqö,å—cÍWöSŅûp ¨* ŽĐÚRņKĄÄĪ%8(Ėwx pPe/?ARɟˇøĘ(āØ$Ix.w§Žé×c¤ún2‚ŧč#kųŸ›MĸLĒŖÄ1ō Õ}įS.MX4Ī?–āUîJs}Ũzõ ™%~3ĄxHĀw߈`5í FöŽÜ6SčÂDX7Æ,›Æ‚Ņæ`5kb8zÖ(Ū×IÎ..Ub›/˙rTû=âZŠę‘ļÎ\núˇ,ŗvVNŽŋâŽwĖė8Fã¤ēéÎ œ8'pNāœĀųķ gå‘cĮHtø[Îq“b&Žōčd§3u&Ž‹ėČ4`î‹íÉČĄĒNŦ 䋿ÆO”:ë6uĻ=gĶG įfÖŨ,—ė¤kÆŊvØvG€STâöŒđ°áØl‚>šõ•NUrHŽVŅí9ģęŧĶ)ŽûāB3K]Ÿ÷ebtppōįĩ˛Ã/ã#e–ĖõzsŗųK ‡čŌí—ÔRˆaŅ‹˜Yđ‹ĀååļhõŽSmxˇ ¨œ M4kž4qũZ˜0>kj`ŒáëynĒÖīȞâÚĩlZįŽë;ķēŽ%ŋĸŽkã+ŲōX—ģŪ4ĢĖÉĪėUžÂ% Ļ.Bz6NĸåˆÍw¤‘ÛÜKDįō3Ŗ5ˇxz|ĮđĐEŲGōq/~™Ÿh+ÜZĻ ž×ƒy–{{låžĀ1ĸĢX¯ņ’-‡[‹‰#X÷.õĄ“[Ô͘ũÕ,˛js ÔMO͟ƒ¨„abOhNf7–ûĐô–7äl§‹2Ŋ΀ërí[č-Ā0¯øs´‚˛á‰nš:ˇ/œ3˙ZyģË>OiđŌq‘ĐRjs­dũÎģ\ęwëÖ3{ĄŽ[ZĘŲ@ņb&ŗ^ĒęúŋŌQBk'éߌægÔnátöéqÍT‰g^&áŽĮiG~‚¤\ō’ũ2 ö“YNį?²žŧčûØöXޏö ī~-č˜!íôđÎÎNbôlÕH[ÅŊĻĶTF‚Ą¨-zæ˛Wžg0am™—d_ųÛNEÃD ž <>_Oælâ—:ug€@-+s’mõK}Åĩ cô2 “Ĩ׸gČF<“žīņø¯†8RQ´SqO.îEH”Ü:×fĖ3Ų{Dm8W\€ŖJŅ/8ū¤'—Al0v*BÔ'œoŽúŗÖũÂĢĻūŧĪ͟Hmv¤ņĮcB ˛ōTķŅ!á¸5Uũ øŸ])ļ[äū§ŅŒ>Üė0ëC pԒf5€æÄB–´Ũ™Yų§JĐzâώxqĸĀ<Úi×t!ÖËPûtö¨% |F„Â`:Mđo†ģ€“Ÿfl”ÉLˇŒĨš‰ˇKJé8“TRxąĒ}ÁpÍū:1f=d÷p|FÆ{$Kš\h~ņ;¯ˇUĩ ¤`‚-hvXĻi™YIåOŋˇÉŗ"Q؞Éģ]“šjĒÆ˜ ”Œ‚KÉwëAiŌ­Lū~%—$'tËiŖØ ;ęĖé˜Å|3áŪ3ūīU|ß-Ũc3īÄđf§ĸ ˛&Fõ .˛Dņ†[ŪĘÄųZX›Ž›0§ÎŸĘ_ą˛ā—2ŽĄXņlČŅža™Īi:îß2œĖ(ÔŊüĻß6į×Lŧž9drÔdŧīÜĀZÂĐŌ*9ĸ’ZÚ Ū—ۑōH°ÅļigØmÛėKD<ėœlüđ¯ā6‡ëĐʞ–æî)~¨ëúō|ÕûgôīĨ˜īøHžŅˆÄŖú>hE°æÔžÃÉb÷Sã_Íϰ›!˜8æ˛Ü§ÚaūuK{B;öļw=TDc›‹WĖcŠ9‘j‡īŗŌ(¨-=*1x¤‚ČaŊ,Îßgē]öA.|:Īúāģ[J:-ˆpKŠōĐv#"8Ũ'UC85vp ŊGÄ7;}ÂļO=8Ų¤|6ߍ0./Už­‚’­jî&ûĩcO{Čyf‚üųîgG‡ Į5:Nāې$ęęč>Y÷¯˜ØcRcŪJ'ŒĄb”į2Q[1ÆŪú5h>áŗęŽė˜ŽĨ(Ÿāē0úE{ D]C…ãËîvūõj gí^1˙7‹ĶŨ§ļéUļYĄhŪ{Ķ™Đ@é$Ž#ۖøT ĸ~q¨ôåIŊōîĶÜ'pNāœĀŲiĘ瓁:ą;æeįš#‚Ķ_vÖëY,ųĮBvōāíŸ ęāexÜ`ũu´Ôņ:cn}Ŧ4ĢĢÃŅÁqōdÃņ€Ŗ˛yČaÃYę˙õC‡î&ė`VĮŗíYlgŅY|Xg‚ä“bCCߡĀb-Øē#< fmŲ”†”pAˆīö×ĪœožgęÍi“­Žŧ-šLo¯ž|Ŧ¸(GbĪ'ũágh]¤ųč ßŒ‚ĸ+ ‘<ōcˇ…瞖@ĶeΖĕW„sŊī:?ra˙āh•dĮØãAjđ•Œp ”¸Ų‡uŽVũÜî~™ÁĨ˜ۄi̍‹ūBĐLFĐ]’ČƒcVˇckŽúŠĒ2÷ĪØö[@‹åƒo›íëvķąŧg8đ˛>Æy;:7KØ?ĶDCB,¨< ŗƒƒų0K°ėNžV¯€d : jĨuĸŖtÚ2îĢÚ˛tđ´ÅĀų]‡&oø$ä+ėEXŠ ^ŒSË [˙⑹Į‚ Ö§´\Ųŗ(÷'ĩŸøx×ē%`ëŽŦ…•ŠˆÖ?ô}Ÿ“5čĄųY‹:Üœwđ†*Sxͧŗ›DĀēw‰ # EũŽPô=éWîBxģŽ´¸3ĐYr*Zķ]nu"žéŽ,žcęëĶđp’’ 1Jnß)ķŅL¤cŊËđK4;ŧ•Z$*×ä5Ā!pĀįLí)Tx HY^ûŽėĄM{| ë)+Ūļp” Ų „I‡ȒąũˇVŊ4øVŲūũJ’œ‡šâÂí—ķé@ŋŗŲE”‡&I_ŋâvÃ=Ų_3Ūū¨:×kî.Ĩ? "G_üĮF‰¨Ļ°Ŋø؝ĀLOõ§ŽĪ| žZ.ųeĒ?Ũūŗõ$:ųKKõ`æ¯Ô™Q‰ 1Z=×›å'‹Ÿé˙öy×û/úĒüæ"ĢQ¨čÂČ%§Ą§×Ų9۝2„Šĸōäs?J4*"XękļuÉ2BvÉÎM?ßtēm1ręˇõ,ëlØ~ëÔĮ-œŠũē#(&Ãö•ē!ž*‰JulˆzmxČ^ǐ@ĒßמũÉūęāˇOš—č1.Ꮒ™g h>ÂMŲáo†PôƜ ž—Š}ˇ#•ÄŊŅšÉU=l˙؉¸Ē<ķ,JÄ1p@AuŪ ´Đˇ‚YųäŠQš=Ž’`áe8Q”Å`ÎĻĒŸË  ōéoāû¤’ˇflŲĻßéŨŨâļeeí”ļY€û>\€æįãž×Ēō\BZĖܝkđāØ= Ŗ’_˜ļT’Q;XJ‡žû#ÔRųÄđ‘‡ā‘Ĩ`ō]ŌöIė‰ēi.đq(o߀JˆĐ@˜˙¸ī(s*fYbW­ÄnįčŖvÂØn™_J$ļįĨ¤~ˇ’læŦsRFōo…ül[ĀÚšôŽž> lĩāöŨŠDP3WŸõÛõ…§Ŋķės%ŗîÕ<Õ!]¤øIƁ8P­-ZôҎō;ĸ‚ųSc…/nČv—iÛ+0ˆ¨\UŲmzímôMÔYuæ>âwoâ.‘ëà đœ9poúõG%ąŨP# ›Oĝ;}–mÜč†ņ7đ͘Į—;ļ2í&¯<2úipÆĒūČjãNœĩĄSīËɀJ¸ŋp”MÜųCiv 0DgÄ[‚>ĸúČŋ‰„>`Ų)­ßR7wøÍŨ‡GDŲ?oČĻÜKŠbŋāHeĪ™œhB#Ãųõė›Kęrüƒå ģŊęė™(§WUŊ$샞đāLdįũˇOīŽ'_ˇ˛ žČ[ –Ė|–(^‚û „úۅRsސųIíúĀá”-qō\^ftļɘΖĶMšÁAēŽ~VŲ/˛‡IüSaxąBI ‘á0á8Ų ŽY„ŠP‘Īh7X‹ˇZ+ÃŪ?ēeęDößßąV8ö@hÎŧëķĨ ĸĄæ”ŗ—vō¤!°ļĶ]hû•ž ëáŋpāüŠÆ˜P2KØŽëķųíâĄ1÷Š|§}wŖö uėfÎͯ^ŠZŸ§ā:-Ļ€tņö°Ũ3,alŖĻ¨älûMšŲžÄÍEۀ @„˙k˜œĪûė }^XžhėPķílFlFųËå§—•<ˆÚŽË<@̟ˆ(”ãSģ—ĪŠ>߆‰}ĪÔo—Ŗ] ũ)î§æÕQ„1ųŒĀ)o÷Ô)ø{[ŪūĐĄ×`įVyø0šŒeS‘ Ņē§PéCŠúrg8ǰ5ųYŒ^1K~Ŗ{RvۊÎ,įO…Ú ŅĻQbEEäN¯L-ŸĄŠŗT dŽē9°\¤“ãģƒ š‹Æŋ¤UMiBũ‹÷ûŦČt—>Žį+ϏĀ=ļKŽSšđ 8Ķ(q1čҜ‚Ŧcg™Géb°+aĸŊ˜A¸œXÖÉ|‚ŗiz"ž’6kš’q/ 4n8ųÅH.ƒŒÖÖeß (CĀ‘myä.{˜ Nõž_1ŧ dk<ĄBđÎVgL5Ø2^žÖžî‚Y&œˆgŨw˙÷ ‰Z–\j›ÉōÍbZčÛ˙ŠrnČRÓéX>OÚZËŗZģaÖXž>Pk*俆ūĘć"ß´ÉÜuôō¯Ú×~šėîׇāü™šÄ××2k;HŅ;í]ö`Ō8B`&]–…wŪˇȞ—‡Î†ÍÕW2!ÖįŨNųțū**züj†7l*Ü-‡åßÖPWâĻ_(g!Ā] ,ĢžE‚vĢJÁ[Vhœ„ĸģŗōj—‹ƒŅëYzÄŠĄ2šiĨŦ?˛ ÍĘĒ~NOhjélķ§o¤E“Ųd#ā–"‹2 ærĐa)­ISžCrƒ(ek(8ļõ_Ųt‰'Ūí@hXūėŨ(mUÄĐ´$ˆ­645šq6ėš§§”|ø.õŽĪĘ  ÃË÷ÜėÚ}Ō Į*ewg`|˙xĀá‰_xāŪՅ+(ŲÁßÅõ*Žd°M¤üŪ'€gψ"ž(į~F^6ÛQg°Ü×6Mtö4Ō!DŊS˙P q—mŅ2đúJĪŒë\v\ëåvúÕØ|!$úúˆ_ƒāČí]L5$¸Ûlz –ˇüRģåöIė;l5HIđf¸#’ŋŖŠ8¨ÎÎŲ‰ēæ{6g›÷LđđM1uĪNT)ŗ{Ũī ēoëŌ|™ęėčÅéEŊ0ΙaŊī}=ũæÅ\rÎû… Ȋö-ŌF×Sę˙Ö&AãŅŨ0“Ë€…˜WŠ1Ēĩ+yÕBũö­‰ō§įmøŧŒ_œÆ’ĸ“¤ų€Ÿn“˛éŌ˙Ößs}īpū‚’Å?Ü8—6_15Bzž8SYĖeúîĒ]ÃI‰c{§¸‘<““y-3Ŗĸ0s§¸akBā˜ ĶŖx{ŽŊ‹žq?°eßU‡ąršŨ64ŸĢ“™¨ĻlŦ­×høåîá$}~Ũ6˙A^ h/ŗŧ¸ėįkŠ7‰ŪNšå˛v [:Ü T„cĄĀnLX–&K/D­{ËW{āzxYŸ:¯ŧ|*™Ŗ-Wū‡ũ˜ö:ĨkeJgäIذĊН!.ĸØ–jBG ßrvYßŅ9kJÛōž5ąÕդ̚Ќ9Måjų›?Vx^aq\OëžÂeŌÛm-üuŨĮŖ`”ûVs†YIņriŠĖ¸”ŗö ĖsVōí@WS™[ø§Î#ųu—{ģĪôs¸a?fe‡Ä;o˜ ÖŨ\Z¤ĘÄƊōŨ;§<ā)ŧ =žž/÷[O°í<ŅũBŲ™Ŋz€ ›M˙™ `OĨÖ¨ )sœę4ž!Æ=—ÕÉčōaĄŅfϐ­ÁÚîG}¨#tõFBvîiĖ7¯7ŠĨfMv o&Ú]´|™ļGV7ŗYēKÔŪ3âK{õåĨ,d‰§-RŊĸJû;ā|JušˇN×,ÂOĀ8T„/Ņ„Üū‹l‡Õ ܎ãÜũļåüŽŨÜĘÃx*@F—õ !HX[^¯y}āt– >.L`ŌÚ3iēx€¯¯û“į’‚˛ˇĢ˛ŠĢŲuŗEéĩhũ ĀĪ^1„õ{ëĒGéΝ­&ģöîw’jrėÚOyîŽ˙Įúē:Sv߅īQEÜĻrÖ/z!!ĄAcđÔĖéDíįtĩOÕ> `äZ,žúËËøŋÔļ$8ūƒÅ¤h&Í7‘ž…–…Sf­ĖJzŸpš=˛cē•~‰äö~ZûŦķbų/G§F=”įõhH•õ`‹xÎáŪŧ›ˆæØÕ˛ˆ §‡: ō÷ôDT5ŒXƸĖ/EŊŗĶҧ 7ũ%ŨaáRLgsĪĖÁŒgpŅļƒģ&4¤IQāž$YķÕĘs|>@EˆX´Éãö*ē&ÆŨ)ŅĶlęaĒČÚ%Fä¯ŅŋâÁdG„ʏ*ÁųŅaėķÂNi­1f“ÄļÄŋO=°Ų 1Šväa€ŗ=p†ĘpMsQåŖá+w@ķĸnŪ0AXž˙3Éɸ}NY;Œ9€‘QČy›bČÔ[bŧR zåD+ #§aąūđȒĖ$W™+¨ŸÉNŅ~đ`×ŅEÂhå Tķāæ:I „tœ;P4x?œęĻ)sßã2!„ķÉåĨX)ĮČa{čPĒ jĘŋČÃ.P_ãæ'‰ĸr¤×ŪļshEâķÔ[pˇĘ4+°ę`Đá•ĸ ;As„PŋrĪŊ¯ũŠ%(ÁĄS§FIĮ.ųž÷ėÄć6áĢ]ŗ‡#i•ÔRÆ(LíZZ+ˇ’:ô*Q +‘fŧZhcŊėŅ¤P‚¨ĨđāYJšā#/'zā%&ĮüvĐőf‘ ?éU9T"÷Î œ8'pNā8+ūą‚/ęĮ Nq Õņå׏œđá4wUž4'Nœ´\Đ=mŗú+ē:hę,§I:\x4€˙šĩãĶÎâ›n.#˙äŗ ;ũhú á\ōžt&Ņ×ĸ˜ÅÕōœGš’˜fi5Ƹčę 4´™PüĖŽÛļGMoáˇŊ 5ŪøB˜ĸąĮĒ ',q˛ģšŗ¨â€įĨæūŠäbūôt6ÛåÔpūVá¤å´“ī§ÄąÂ_>ŠļZAĶgÛåSí733û@ äĮ&Ā‘ˆPlN)ˆ‰âMāđ;ˇģ´—“äÍXĶÖ~9‰l5,‘@LB4oĨ›\)N¸h‹öNĐžõšŧŨĸpŅĘ k”Ūj ōeŲīãpŋ¨S64 Y´XĢ0â+xø•Ÿ#–’j} Ŗö×ŖKkN’Ž÷×0îĘĪ„Ņķĸ— ۖĐ-‹Ņ>SgNĩkæėŗ\/uĀ…SHŲ€ZŦŠû7œ ’Œk–ößÂ"ÄėH‰ų8!ĢC‡Æi KŽ°x6kŲ•æëb*e =•Ū™5!¸ŽˋõŽpņŽÁx>uAČaā$mÕšŌĒĖ}€—€$— ã'‚ĒöÂTĖÖ÷Úã “xkĖęÚ<â]„uĖ.ŌIdˆČLm&ĀØŽĩ­KQũ†ĄÎÅXö"\/šęŠYîRÕöåŠ/OW[? 4]E@]ÃÊĒ!āLÜAĩ-†ļ'Š´K¨ėÍĨ8į!¤“ŲžŌ†Ë%^oĒAˆ†€8˜`5˜ˆ—Mƒ‡Ļ;’ém[: •ę Ŧax&‹gų .Ā+ŨĶF7ę}—ŗˇŲŸc.Ažåņėo8ØÆY7!Ģ‚+YÚx žˆ]‹.äĀā íž€Ęäh Iŧŧ"ŗãÄ65=pFžel<{ܝķbųË(ŸIāLOč)TÔYwk…+ Î*JfŠjĩhŖü|'ŪÁįĸ&Š^KL xcã<ĻFŋ0ūPA¯ĩ<’ĩJԐ uŲĪĮ—ĸņë@ ”ŋŧļî—ä(íU,ą˛“ˆĢšÉqgSrĮØŌfÍVåč˛wMbOķęMēęÆÃėx@A$ė íôŠŠÉkIÔŪ#’âÜūÁK]3wq},>ZđUyĢĄį†>§}žŸéĩÁŌĢā ”ß9 iUö6GŋU}žŅëhĒsmaNZũĻŨ’Tŧį™ĶUž+›{NˆÄÉz3Ũ(¸’B\Á‰P›Vã:ˆUæQ‰GĎņMGáÆüĩ÷ †x @ÚîKzeÂ}(ŽÁë=jŊėfø˜Á&øNÉÖLRĪ}䥤˙ôŋŽÖŊā@åĮzÆA„ˆ áîxՏĘîđ+%;ƒ6›˜Ķ!ąūvuŗ_ĻĻÎ#}öUÕŠ> üÃˇTā#Ž˙ķÍËŦ‘hÖ/;€Û^ėǤÛ%Šôƒ‘ôđĶhŪ÷îĐĖęŒy';Fgolú?1β´o§Üpp¨ŽzžZ#‘ĶgĢęTĸ€ĩäíĒ ÉĶjmœVŧI˙äNíKĪęû`Ũ&d°ĩ[›É%ĩ“ķIĐpøËÄÖũ €đĸ—ĻĐúĮs§Ųüsą” œäĀšā5cgõĄw˛É™K<ŌqÛķ/¸…ĀĩOŽ$SÃ1Kl |Jc‹ČDËãÕŲŽPuÎvTɃFĒ]ÅwŲĖ+ĒEÄēėlߛų €?>Ŗ|ļ&ƒęÚ/:áF§×Ž7Ü 7ڑŽOU.=ŋĢĖé QĶĀä¤@áŪÍŦŒV3>{;']gĘ6Ë=ˇp, ×îņØÃĐĒ]FmIÕ`#œ‚V–^r;ēÛqMŖbXü"€ˇŽ:•2ĒíāÃĶ>Ežˇ8&qëÜKosN*;āzš7Đ!ô û  Ļ bÖ´}€‡ˆE“ƒüf N&1BĄr)ˆoBhĘķ8ĨģNŒėÄp°p "Œ—ž¸ęķ2iÜf^zHpÂîŽÕwîęėgš*ëxãāJûÃ@÷s Z“ëžŨ?~XÔé?[˜Āqø ž¸{}cYkģ Ū8ĸ‰.Е5ĘD:Ņy^čÁ o§œęø¨7Ė}ŸÆö‰7 aŒ1sæPā 5„*ĨYŽGUež×8U•­sų<ķXĀIÂ!íNt8xšš•:ÅVҐÔņŽs8NbØá+8î &ü/ œļí4ƒEÃŅ#}Íāûå‘áéˇŦ˙FxL⨠°â¸Ā)2/ĮŽĶĮˆ˙(⨇Ŋ–!=:ęl¯‹ÁÁÃɡī'tM4ō(ŗŊ6“F'^Z*ų§ßtŌë˜õ0ŗŌ¯p™–7||c›0ĩg|÷žÔC™š™Í­aÜ %žĻáÁPĮŲÆÁ†>ÍEß'ŅĀŠ*š5Ŗ_ąmnž§õĄîë ‰qŧŒžĒč*žĻö¯<ĮĻQb]1WŦ8ģÄsšŽ¨ŨQ"ßŊäąk–ĩQĶúģųüļø…, Û)KfdŸāˆ÷ˇ Bæp ?Ļį5_•s÷ƒƒæöĮoŧģ_ÔĨŧH_îŽņ‡<E$ē߯+“û<'rJaaŒīĄíę†Äü@4 ā~û‘žũÃ;c‘ŽEŲ_ŧ%87āĖšÍ¯v¤ÔØjœ§‰ÖīÚánek Ô­ĀÁĄy_LšƒØöĒ;C ­Ákūâū Ū”ž0žž5ĮS9šīÜ´|p.;A—ä<¯ŧ`/Ü"4Hīģf)0kßPy2|ÄĪ”;ąĢ„VÃCwžĸ‹€qiĘ|*„=Â”Š›§sk#!kÃĪEž‚sU ¤)kË+Ald˙Ϗɭ™ÁŽeׂL¤c^ĖOQ‰ Oa[íŊIũūG—š6ė× ÷íƒĐXvķ&Uyg¯+>˙Ŧüš‰klžzé…3>qŒ~9¨} §ķēA@+ķ˙oī|bšî;ū™áDœeq6ÉA v—ŗ†ú9H‘ĨYۇ=ĩÚCo‘Ũu6`€•íęI (j(ZŖēlŊÅíŠ(ŠŨ§Ũu­ M"÷¤îz¤UQ9‰ģCFČéáŧŪĖpH‘”ēK2)ĀwŠáĖwŪûũ˙ũŪīe$3†‡"'TZ?Ürṇ‚Í Ä-§ŲIáÖŖsVCķh¨ŋ‰’™oŪ]b>;°ZvØôÖ-bāh^Ųŋĩ‘U ŌP´5Č8UŽ-ˆ‚¤D“cŋ%xņũŒu Ü˙n+ǤCœåčĪ–Áũö×xR™ûg ‰ÁrįÆöõĒ„@ũmEŽzõ΃ö—…ÛļBųTĪļVęSB"ƒc¸ęO”ëÂrĘC-‘gXWmÍvÄ7âļOļcœéb<ŋƒôáĩۜĨÅhü@Ā3ÔÜ<œU-āyŽMŅĄŸx/k2L Ų ōwũÔR*÷ĖŲčßŋŠįķûbgą¯0Ė9$*"ōp Q‡ąË\ |¯*¸GW{ÁlčÅL‹˛ÃnÚY ŧŦ07y&îgC86ĶÆp EĀrŌū#j.D]ÚĘ SCgFÍ^öH˛u˜CZXôwŠíۖk61I‰ā÷ëžb’§āÁąČŦ />ŋėȸĮ;ũ›´°\;w€ÁŒûŪî]@(œöz']֕ŌFōĸļ0~š7—¸đ3`ķ&pĢÂk՝ߓŊHΰ˛×ge ĩF=´…ŒōVŸŽ°ÆĄ=ęÆ[(?G¤ķØ (ĸĘĢqÅ=FžMKæ@ÛÎa)ipZi ˇãä1~î§õ5}ŗŖĨNĢ"Ėy nj˙Ũåŧ?Æ%´N‡cĄ(ËÅ΅ÛX;ފāGaûÅZ€Glΰ/pâƒ9npĨŗ=?ÉĪÔlzÚŖ&´sgŠī¤w›*–”‰7m ÂÆîūĸ‡ŠđŊxŅC ptŧ< |ĮY÷8~Î%ÚĪIĨˇN‡uEUEö â°×^ˇÂ¯¤%6;ûUë{‚t0œKžŌ*ŋnÂlĸŠKú‚ä¨â 0qŌëŲĖĄ3;H+Ų×ĮYęw”øÛÎ/ÜŠŅįM€g.ķõúA)­8ą)ÂÞˇų]8Oš÷ĢBåū U ģ֒§Ã™]ëŲÎīɖōÁ2ųŠ‹ÚzįZbģø`K§ũHŨnž]WKČ”ö´§nøFAt†Åš61îLãLú2°Ž—ÅÆ×TåwŠÉ%Z鋓”YØm˙lc`]eĀĖÜôŊÕĪ åŊ~õ›XØĸKcëMCzÃ@”НØb׃ĸ(–ÎÂ胇!ķjåkˀįđ™bYÁ*‘fæx¨ĨŧO = JėŨ´S˙ŌkĄ°$¸ŽįÂFÃē!n¤ūĖŦ´øĀBÛŲXģžhs‘ׯC€c€ŗŪ—oĪæAY˜ĮĘöTėAĄ—­ęž8YihÉĮĸ°Œ‡†¸18w­ô­ũˈu̧8ŠÃͅÚÅņ 6ŋŋũ$5°¤FžNŨꎟ NWžr/”b°MęÎîĪ€ Ų[ Í~‘ŠĄÂąŊãvŪÃČēÎũ§U‡D&9Y%pˆ+zŧŅāX;}ļ:.IĮ3~Y@ā[ Z{CˆC€Sčw“2Ÿ‹Á`˅ß8äī¯bg$\) Žå(K“WŅ1ŧ0ŗ4eˆÔ0ā\ŠÎđ;4ëxk0˛ U¨žtöŽNÆ ' (Ėĩ]ėęÎĩTŠŽĩíj:ūĢĐ~ŧž‡õv”h6 .‹•Y¯EU‹ÅXlķPŊšÆ„Į7;A ķŸrjb•Áđŋ•7ƒÆGšĨî6ú¯”žEī8ÄčG_—(}āūŅš1Ã1LúvĘrųãąĪN‹ŽĻĘŊŊ~Æ¤“įÎÎÎÎÎāŦGīŸQ…ާ’9QĄÍS/Œá,sgąžēfҜ€ŖpL´Ŗ.[§ī™”[ŋ=čē°B÷‘MŖƒsÎxŸ¨Õ2wĒčŨœ=† _×%œŠuķB#Y\÷ õ&Šļ{t4‚ÅZ ėu<@™GûO^=á´9SBšõI‹}†gŦ9ÄZN‡ O€ú×ņ‘˛™$.D+ĮĮ€ēČ~Ō—ĀąĀčÍ]Ö=Æ2}LtĸūcÜb„Ü´zĨ‘rØ\{aÁqŽgJ@4/ī܄ë˜ĒŌ53‰¤Į¨ĒÖûCũ×U1.īĮ%ĨÂōģǏy'TJņba?6‰šN!^UĒ”m0ŨWJÅeũ÷ŽÍ§œ_žíŒ’dv“4Äk!ÁžĢ<>ʸž/ė,ąūg%’ˇáQ÷2™yÆÕ¤PØŊhÍđDäą%ÂĻa[āā3āÔúéĮĨ;'÷ū1‚öɍš×|XúUMŋ*Ļ–“…Įfô ũÕļČhX†>%mvGsPüĸĻZŨîßĸJ<úĻĄôŒëļĀS›–‘ŦŪMœ­>ĢKĢ5ģŖmqôAĖ2ė}D˙"īņÄ`ÛКW‰ĨeâVܜœSk6Æė:ĮbˇÚEyŲøb×įŗuŦOĢ*mV’LW”Ûcoy­^ŋ8`gGĶURØņmĄĖ¤t-Íu…÷ˇĪfHžd^ũĻÅP Üw|LÚMEņ‡Č/Á,Ė—…Ŗ˙!åëJoh$sÆ–iéŊƒģ)ëæÖũNĮUÉ X)Ī)gŧš.Kŧg›š˙û—¤‰Ŗ>ĒmÚšyyŅŖ*ü\“ŖÔpc×<å6|A }ÎéÎ6†ĩvņL/8Ĩ¤Œ„~¸>Íî˛Ōu}=r„1 cÖŠęļ>{5q˛˜Z$”Ų(û^_î‚#ë€ŌVX:úÎŊLÄ(-s°íR˛įFŠoļŦ–ĩŪiĀu9JŗŊú:ĩßsē€ķ)öŋ/n0:Ŗ´ˆ˜pœÔUm]'ŽXEŲ‡}4•oŌ §åyĻą-Ā DŊÆBėéļ^~Ē{F‚ĶOÉ)=ŊŌ´%,”$LPˆft/Yô sĻŨ>pĸ{@ĀÔ/fÁ­@9 ŖÜÁzŊ`îvđ”›ūŊj˛x}Y†ÉÖ]/?ĪūIķ ȒÉbé“ķ ŋÆŋ/ƒcÎ_ēČü~‡.îôÃLTûz€!S–[NØĄf¯ęŪ'“ˇ1€ŅķĨæfPØ`¯{5ąx]ÚēŨ’čˇŲėŦ‰ŠŨBÕ°đĄ}(phx§yL&Ŋ•ÎÔ0Å•ĻZ˛äö’ ŖG¸ŲEŖę'• qËxÖÔÆO(Õ1GģũtŊė’Ę'Lķ0î°ŗõ4˜;ešÅ?G)E ܲîŧ̞9ßžoĐŽ÷ĩĖŦîcI5jЎΤB{˙wž…âØ7đ€Ũkõd"Ŗ|ᒾđHvčģË0ŧPžÕŧDņ&ü&Ŧ9’>}§xlĀũ5udTęЈB<­O"~í,~ I#VmČAÚáĒҎuRÍ}ĘÎÁ ā˜É ļöļ[aļ3Yå(gp4>}}i-Ta‰HÖļ ņž}"‘gô3„íŪ_Ŋkōp“âÉØjĪFÜOÚ.1Ũ‡åžPĘ§–ÜTüœę;ÕW™- ^Ë_÷MKčn;až€$.P?!ˇlƒķßK¤ËNųe”÷8õ;įƒ) × $4VĀJ$—ŨĄÉpBĪÎ5Įļz8Õ͐ēßüØ{Œ¸˛ąŒã€iĩ [ë{Õ¤X:ŋ`–ĮƒŠ°˛ÕØMiB´ÛˆØ ”-Ė-˜ņÁ0“˛RŖļĨ^ū0”'¤iõoøąH‰ĶászŊ-ŋ­3žĢßCۏu7ŽYšîmļīĒL ÚząJMTi[5õšô™ĮéÚMY°yŗXxL8 ĨĖJ˜j Īá@ŗąŊKÖ!UéøØtáOævF=Ę.cųC€Ŗˇ&sŽc›":Uw­ŠShķķítfãļ¤ąKyCa8)’’œžÛđž2ë! x…ဉl$†OčöˆĘde1›™Vc{Ķģx \Õá¤%ã×:­d[Š!Ê*DīMŦC gLŠts›čëˆ 9ŸUŒą‘Ū×%Düin=4Yœ|ōévF‘^{Ĩ ÔG’įŊ™Ŗ@ЎöēĖÕh„p.Ž ”ŠŪUQĄūTęČõļøÖá´ĮáÔk5įĪĸĒ?H;3†\¨Ŋ´–7´ļĨ:Lžßiđ‰` p`•‘€° x×.[yWĮĖų_ãČKāĘfŧx/eōˇ%TēËsVŪš›¨Ę€/¯ģŠÄ‰ZŸ¯g.i˜ų_ŖH‰ŧ ° 9뎎‘ėžpĒF[ŠvÍ,vy0Eø¤™EŽ÷:vPôtIIЍÔûŸ ŋ ”å7|U(Ąu&sĖAÔ'h:UÖÜ<™kÎ8hgæŧdđ1Ÿe%×ĖŽ-ãN'ĪUv:Sã;§åĻæx>aôIUå*88Fī΄ŗūßŅŽ2&ŗ3ķhp 2;88?/8§ŸT>YŦąĀŲlĐ¯Wīą=‹G× ĘÅØPJųĨwÔųą¨6‡íĶĮ)œ™RČĒRĸ ÔNŋ‹ÃΟTačpŌÅzV¸)āVÁ|ģņúiíyÕđ›.gôr¸ņ"Ę^ĐņŸĘxÍ6ÜûŅß°Ŗ×j$|tŨGMÕ` rņéM´°…XƒbGŲŖƒŖ;tR@,,$>îčŠôOî– ŠpáQ% Ą§ŗģŽĨ˙o|f×ĶJtgąČÁ9.pYŌ=XŊ‡ÆßÔWų„—NŸîT…%ƯŽāÛI7Ú´Šm€?gŗyˈĘķ–Ŗrq0GkM ÍúĀĶvĐí70ÅČfį{ŽsŨMJīŽäRP(üGpŋG od¤l{ö†‹ !ų膺šļEž€ÚËŖUĄ– ×ÕįۉŦÖ}ڒŠ]§Ŋ#ĮJâw0 0“ŦˇåīŊ\pŪM´<‡~ĻõKoŒČLÔŪ,1›Žsõ ˜h.]…T+ŖĖb.%Dz9adŨüIĨķbŽxƒ¨Ų{Æ|Šv‰‹¸qÍsø2g*5ĸÕ:ÅÍ Ÿ3BÕł]Øŋ¯T)TĨpĩ­,Ž"•;(5Ģī>°đ­ īšcЧaųÄxüą-V2š+@ģ |á=m4ZĮĄ6ŋÆŧXᗔRw´+ü†ōãrPRĘ"@”Öjai$‹5Āž ÃŌ~ĘļÜqĪNëĶÔĘ_ø—ņÅâÔ8ę˛ ģũbĀIϝŒΊaŒh&™âGƒ888888888888888ã˙ QSTE #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void FindEMD(PIX *pix1, PIX *pix2, l_float32 *pdistr, l_float32 *pdistg, l_float32 *pdistb); l_int32 main(int argc, char **argv) { l_float32 dist, distr, distg, distb; NUMA *na1, *na2; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test earthmover distance: extreme example */ lept_stderr("Test earthmover distance\n"); na1 = numaMakeConstant(0, 201); na2 = numaMakeConstant(0, 201); numaSetValue(na1, 0, 100); numaSetValue(na2, 200, 100); numaEarthMoverDistance(na1, na2, &dist); regTestCompareValues(rp, 200.0, dist, 0.0001); /* 0 */ numaDestroy(&na1); numaDestroy(&na2); /* Test connected component labelling */ lept_stderr("Test c.c. labelling\n"); pix1 = pixRead("feyn-fract.tif"); pix2 = pixConnCompTransform(pix1, 8, 8); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); pix3 = pixConnCompTransform(pix1, 8, 16); pix4 = pixConvert16To8(pix3, L_LS_BYTE); regTestCompareSimilarPix(rp, pix2, pix4, 3, 0.001, 0); /* 2 */ pix5 = pixConnCompTransform(pix1, 8, 32); pix6 = pixConvert32To8(pix5, L_LS_TWO_BYTES, L_LS_BYTE); regTestCompareSimilarPix(rp, pix2, pix6, 3, 0.001, 0); /* 3 */ pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /* Test connected component area labelling */ lept_stderr("Test c.c. area labelling\n"); pix2 = pixConnCompAreaTransform(pix1, 8); pix3 = pixConvert32To8(pix2, L_LS_TWO_BYTES, L_CLIP_TO_FF); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix3, 0, 350, NULL, rp->display); pixMultConstantGray(pix2, 0.3); pix4 = pixConvert32To8(pix2, L_LS_TWO_BYTES, L_CLIP_TO_FF); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix4, 0, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test color transform: 4-fold symmetry */ lept_stderr("Test color transform: 4-fold symmetry\n"); pix1 = pixRead("form1.tif"); pix2 = pixRotateOrth(pix1, 1); pix3 = pixRotateOrth(pix1, 2); pix4 = pixRotateOrth(pix1, 3); pix5 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 6 */ pix6 = pixLocToColorTransform(pix2); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 7 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.12, distr, 0.01); /* 8 */ regTestCompareValues(rp, 0.00, distg, 0.01); /* 9 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 10 */ lept_stderr("90 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix6); pix6 = pixLocToColorTransform(pix3); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 11 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.12, distr, 0.01); /* 12 */ regTestCompareValues(rp, 0.09, distg, 0.01); /* 13 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 14 */ lept_stderr("180 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix6); pix6 = pixLocToColorTransform(pix4); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 15 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.00, distr, 0.01); /* 16 */ regTestCompareValues(rp, 0.09, distg, 0.01); /* 17 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 18 */ lept_stderr("270 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /* Test color transform: same form with translation */ lept_stderr("Test color transform with translation\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); pixTranslate(pix1, pix1, 10, 10, L_BRING_IN_WHITE); pix3 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 19 */ pixDisplayWithTitle(pix3, 470, 0, NULL, rp->display); FindEMD(pix2, pix3, &distr, &distg, &distb); regTestCompareValues(rp, 1.76, distr, 0.01); /* 20 */ regTestCompareValues(rp, 2.65, distg, 0.01); /* 21 */ regTestCompareValues(rp, 2.03, distb, 0.01); /* 22 */ lept_stderr("Translation dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test color transform: same form with small rotation */ lept_stderr("Test color transform with small rotation\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixRotateShearCenterIP(pix1, 0.1, L_BRING_IN_WHITE); pix3 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 23 */ pixDisplayWithTitle(pix3, 880, 0, NULL, rp->display); FindEMD(pix2, pix3, &distr, &distg, &distb); regTestCompareValues(rp, 1.50, distr, 0.01); /* 24 */ regTestCompareValues(rp, 1.71, distg, 0.01); /* 25 */ regTestCompareValues(rp, 1.42, distb, 0.01); /* 26 */ lept_stderr("Rotation dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test color transform: 2 different forms */ lept_stderr("Test color transform (2 forms)\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixDisplayWithTitle(pix2, 0, 600, NULL, rp->display); pix3 = pixRead("form2.tif"); pix4 = pixLocToColorTransform(pix3); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 27 */ pixDisplayWithTitle(pix4, 470, 600, NULL, rp->display); FindEMD(pix2, pix4, &distr, &distg, &distb); regTestCompareValues(rp, 6.10, distr, 0.02); /* 28 */ regTestCompareValues(rp, 11.13, distg, 0.01); /* 29 */ regTestCompareValues(rp, 10.53, distb, 0.01); /* 30 */ lept_stderr("Different forms: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return regTestCleanup(rp); } void FindEMD(PIX *pix1, PIX *pix2, l_float32 *pdistr, l_float32 *pdistg, l_float32 *pdistb) { NUMA *nar1, *nar2, *nag1, *nag2, *nab1, *nab2; pixGetColorHistogram(pix1, 1, &nar1, &nag1, &nab1); pixGetColorHistogram(pix2, 1, &nar2, &nag2, &nab2); numaEarthMoverDistance(nar1, nar2, pdistr); numaEarthMoverDistance(nag1, nag2, pdistg); numaEarthMoverDistance(nab1, nab2, pdistb); numaDestroy(&nar1); numaDestroy(&nar2); numaDestroy(&nag1); numaDestroy(&nag2); numaDestroy(&nab1); numaDestroy(&nab2); return; } leptonica-1.86.0/prog/lapide.052.100.jpg000066400000000000000000010660531506303110300173020ustar00rootroot00000000000000˙Ø˙āJFIFcc˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā]"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ōÉíD ­ŗo;~ĩ \ØAš~o´õâ´uXÂÛ)ãxäŠĨ'Ë ųxíôÅ{žŒ‘Qo´b{0įđŽĮÃĄKĖî¸˙žEr)ƒnã'ŒÖēī&¸Éūā˙ĮEgScGąĐ!wg¸TĢpsÍ9BžYxĶã|ŽŸJĢNztqIĪ5"$PŋC“Ō€0dĮ¯4cåüŗRpqĮŊrø Ŋxë@ 1ŒŒķŽØ¤+ĪA´TĮ# ÁīQą<ƒ×Ļ1@ÜŲQČīABqž=1O-‚ŠŒgĄ>”2oĮ\úR°Ëģã¨8éN(JāķÎjWRĒv(sšNo#€+2)ę;õ¨%Lr ƒž \b=;ÕrŪd‘Ļ1š€æ€4ã~NI#*Eo žqԚQšēgĶĨYQÁéM]­žp?JP23Žz‘‡ņuäR‘œŒ)Íŋ #ĐŌá{žj2zIÚOJ“!ļ˛āúdP'Ķ=čpqģ8Ž)vî'žß† ۀ6¯¤RËü={T…ˆRy^9æŖÜIãÜsL,!p9ĪZ‚†ö#ŗĘã#jņĶ’iǃ ũ éŠ@9H;”/ŋ4ŋ6íŦƒˇ5!įk°njPĪŗ;˙:`7 ČĀâ—õĀ nbnŨĀĨŲoU`xƜPnĨĄÛŽH=iÃ-úzTĄĶvJ0ĪĩģSšd8'Ō€"Ãā|Ŗ×ĩ;Ëlä7~™§§…ŊÔJĪ.ô¤cœņÎ)ŦģĮ$åIÃĘPKŒ ũidCŒÉģ'Žiˆ#;ÉŠČ˜ã¯€CãæE'<Å9—˛ŋ=°)¤|ČėzđAŠ>îNqQđdį¯\PĄevVPyŨž´Ž¤ādm<iÁÁũiå†p3ļ€ĩđQQÆėČ”dķÁč)ę§%XwíMUļ\ãĩFTŽB.ß\÷Ĩ,Į ¤J‘ÕNFIĶųT~R“ÆOŠ4ŒĀáyρ€Aã=E;‘• šnĐŖŽN)ƒ#t$šĒķ! šį jbŠ™qÔu”Ā@$ķJb ctâšyoē8ėiYœô¤#=0ąRE´j”†8)éVä'¸?ĨDã(AŠ`ę ˇ#ĩÂüxWQœį ŽoPBí ųę‡˙Ķ ųúUˇîĸ^ä¨/s“JđÆÍ“&œ¨l–8?Ĩ@Ž+Z+ŦQķ4™ëÚŗØæ8ŗ×í?û(Ģē”mö6Sûæ č9āV|›„i´dũ§˙eē4†¨jôY}OĘģ ´äé˙ ŠãS+nüwÍvŪĩĀôØs˙6-ėΐ&áÛŪ—aۂxėiGN'ĶĩH˙ęøõ‰˜Ņ˜b ŠåŠ=8¨@-”$ 2sÖ§Č'Ķžhb#ŒC°>žÕ"Æ99>´‡$ezžôâvÆN9ī@Ȑ|äķc&€9#89¤„Ür = ōr @y$v= 4‘Œ‘Æ:{Ō#ƒ+׌fžHÛüéĶÔ¯ÂŖ#pÁ8íšyŽF*2˙!R8´Ŧ ŒzzS•¤ß¸tÁŠF?ʀ"#yõĻ„pvã+īOŸ˜“Ÿn”Ž; ë@ Œą:ķԟō3î 8 B@-‘Æ}{Ķ‘âOZk! ×­!.@õ3(#ītâĸÛÁ9éÍ0vAāuÁÍW’4ž5Rė 0a´ō~žÔđ qœįė$*7p3Œˇō CW$mQČ?Ĩ5Ÿæ;s¸uÅ9ãũø|œ@Ĩ*õĐ2ėySLwBņžæĨ# :ÔLíiˆ†A•8Z„ *ÍÄdÂ u;°§¯C@ į€@ĮŽ*ģžIjŲBķÍ@P.ėŸÂ€+ē :wĻIÜįˇJ™Đä÷õ ĄōNyĻ3RĘĒgø]Oū<+¨’p1\Ū¨3G÷†:écë’jú÷—۝Ŗž•2¨5ŦR&1¨/īéRÅ xÃ.?R#Î5Ф}N8Ių"\õęOųūu@‹žEĀ? ­ŊzŨÍg؁ÕĀ G8ôÍaČõ`§ū>1רVéŨ#Ji¤Eŋt2ŒîĮë]§…æšn+˙ Šã’0b—“ĪĶæZë<$ŽtIų0Ÿ™QSSbšĐë…–b—{ŧxĀÁõĻ @ĪNsS€ŊĪ"°3Lq’Ė ž{S•Ā]šāSĖĒƒĶԚJ[šęhFŽrƒÜņCdō0;÷§ •ęh'#iÚrzĶēwsčip1ĀĮĩ(ā᧍¤]A&˜Ääã>ĩ Ë6Ļž~R1ŽxĻy^¸\sÅBüįŽĩ,”ÂŽ}*Ŕã¨éëh„—9n‹Î}ëE”1É'8ĒÖą°ˆ6ŪXņô̊2ø'8â˜ŦĄ˜dŒ äŠ2Ŗv­#îą 8dã€LcĨ)¸É €Yji€ÚīåI._=Ž)šQĪCŒô§)%P)¸;ų<‘j”äœzPIRėp0GZ\.2Įh\ŽĀsC7›~”`ĒFĖÆp=ģTŒÁ×îõ?­1wpÎ8éN+ķíûĐAÛˇļ/# üŠäĨŗŪžŪũy hLäc R¨āGzFŒíJ§!ņfŠ,Zdms€v…^ś¯áZŸ/ž++0ÄG33IŽøÆëVü všĖ-s!,ŪÁū}ëĸ BũLdųĨĘU> גņø†C()šąŸŽĨSĐ¯uģ¯6“ŦÎíjYҏ9Ezwí “ÍUšŌßíQŨų*×1ŠU~ø=EGĩvjCö}‹ÉĩT"€Ąx”m2xÅr3xŠō[Š-t9¯eŒ‘,Ĩļĸˇ§ŊZŌ|Hoo$͝ėÍĨüc;3•aėj}›ĩĘæW:'`ĄpŨņM‘”å‡× ĒøÆâ×Tž8âDXɏÉpwĮ œtĒV~/×mĩhoa/ŧų^FÖlôĮ¯5jŒš¸Hėz[Œ{ũ*äIH÷€?•qąkŪ"ŗÕ­ŋĩ,Ö;K—¨ųrq×=jOŪjZ@ļ6Ėa‚Y K:rʼn$/°ÅOŗwJûZįn `p~QúŌMkÎ5šŧT.ŦgXlÔĢŖ|`vŨëš}Ųņ>ąaũąkrļÖʛŌŪ7 ;ûĶö=n…í<CŪ¤œ7?Κ\#Žâ+šĶu™î<"59ö‰#Ė‡Jįˇå\kk>!ŊS}ö‹•PsEØ!Χ4F“më°9¤z°ew8$āsN. 8ÅqÎĢĢ?ƒ­oDi1 OĩvœréUõˆĐNŪ‡4å. ČÆiŸ0œ ūāXÉ#Đ€ą* <’ģ@íÁ¨Û!—qäqR( O?J&9b‚:ã‘BļPÎ8朌vXb›{@-ŸÎ€GąĀϐšŠ?ttĮĄœLņąjƒüčŦ –āķÚĸ9^zdķ“Ō­60îĩ Фa!aš+ĮlSÕĮ|;PÃËB3Ū™€FN*bš2ąČÍ;5XžOJšá‰=}éex8 ‘HĖŧ îéQ‡'ڜ'ž´ ‰’FÜÎGjąÛø bäļ¸9&0ŽA?q[Ôį’:tgæ'§J@ۆ=y¤čįí@ P œsžÔÆ1ÆIÆiä3BJ.XsˇĻi3ÎXŽO¨ CH,ŋwļ*°Ā#¸ŠŲ‹\ŠiÁ$pI俘 ū :T7Q ¨BäŽ6Glԏ T$ÃĐ”rzŽ´\, wãëɨAgŠëRėÁÜXdŒsHĀĻиúbČš@%>aųSp]0W“ך§ĸ`šbW#¯Ö™$8]ĀĮ¸ëQ¸,2=3S•ųÉ“M0åG#ĩWlã§j…ˆīƒVœœÔ!#8Ī4‡hũ*Ũ‡ų§ĩYsģ"Ģ:aOn1@Ņ¨‚cÁÅtiŅ@įšįuõLOŽ’ BåGĢč)“Ž”Ú0§ĐQˇ#Ž)<ĩ8 žE"NGÄ96új3ųÁ<9'ũ$u>¡õåŨ`8)Î1Ëúî1ų Ú&ąøl,l|šĪ ˙Ų…vPĻčnÎ g?îŠãc8ˇœÎ­v>¤ē;š,™˙žE*› ėÎĒ5"0ˆŽ•>ā>A÷ąQ ÛŽF3ÔŌįyŪ́˜Ū×&…—‘ô4Ĩq‘ģņ§ā`ԋķrĨĀĮԐÕI÷^ԊÜ(æ€˙&zŸëJ¤ž1Šh|šV;ŽâšUZTecŒ@rBäŽ{ÔeŸãŒÔ¯œœæĄ$)9ü @ō6NJ‰Ž!ƒæšš8“švÆjyrrW§Ĩ`xIK›9n§ŋh‚Ą ¯\s×5QIģ2dÚZx–Él ¸I7ÎN#Ÿlō*”cvŽ.gkŅN‡w iɒBîéM#îãŒtãŠP3Éę{ÖeŽ?,‡ ķuéL'iãŠaš|ą%ŗŽ;SÔqŋ#Ĩ ųXt§7sĶŖA¸Ōˇ-ŽœĐ0+´Ni@ÜyįŨ¯æ)Ũōķ.3ēž6œäځÛŠ~R#ۊj ‘ĮĶĨ=23Œ@ÆˇŽŲāŌ0'ŠĀ=Ååã*ZxRP0žĻ †?Ü ŽzgÔSãôŧĒŽ8‡Ĩ"ŲqڐĮ2ƒģûĩœØę=AËt~4׏#æ=č“#āfžũÍ=†ôč1īQāŽX w 쌎<žj3#,Ž}Į­JŖdiÎėIĻ%ã*MWFķ!]Ķ[0(,1Î+ĀĖ~\š\ī‡VŨnūĸŊ 0A9tŽgSđf›}|gPö˛ŋÍæDqķ}+hÍrōHĘP|ÜČč˜’Ú9Ís§ZûgŠ’ĘÖmņA ´ģpAcÂĢ?ƒ.ĨŪˇ:ũôö@zÎļ´}ÃIˇÅŦ9y–nüÔû‹Ė~ķ0| ūWö“ļ.!¸$†ęW×ķŠu0_â™öqēe…ŒØčœfĩĩ XŨŨ-Ø3[]t2Āû[Ö§Ķ´k-*Vu‘žâ_Ŋ,­—p;U9Ģķ+ĩŽV÷æøĄgŊT$yÃTž+”/Šôq†Ū{cp­‰ü§]j?n’[¯4žāD¸ĮʧÔŧ)Ĩj—ŸiēŽf~DŒ1úņBН$.IY˜ŋäōtË,EČ*sĶÔ^:™$đė,˛ŠĖ¨Āę0yŅßx[IÔĸ„]Å#ų ąs#dΚ/ü=ĻŨYĮ–‘Č-Ё'!GlŌHĢy Åģ™zíÄMāY2Á„ļëąŗÔņG‡oa‰Œ¨<¨H<āŌļ×EŌ§Ķ ´kD{xÎčŅÆvžƤ‡GĶ ‚[d˛aå Á>ôš×-ŧĮĘīs‰đâ6Ąā{ûHČw ä&yčũi<=âÍ>ËJ[+öh$ˇ%GČNáœöčkē‚ÂÃO$ZZG ”ŪZŸ­CsĸéwRyĶXÛČ˙Ū1Œ“Uí"ÛēŅ‹’JÖg1âMB=GĀō]˛yi+)[‚@nü9ĸ}BÚo‡ĻQ0#ė“˙-1Œ}kąk[i-Ō'ˇ‰ãOēĨđϘ`Š ‹1ŒÔķĢZŨGČīšÂÚ@ڇÃ3 @ŧ‘ƒōŽš ŸåZ>ņôš|1Ęn$%p¨Tc“õްDˆxP Ąb‰ )=Ââ‡Q;č%­Šå—R_ŪęÖú•ÕÔė Ú QO͏§CZ:EÅÅ߃otČė'ņĀ_žXžžõčdäžÔ¨°āg>õN­ÕŦ îs~[ˆ´8mní§ļ’ß+ûÅĀ`I#J­ĸAu˙ V­röŗÅop?w$‰´?ÉŽÅUI8 OJBFߕ^sPęjôÜŽM‘įąiōjĀövō=ÁbˇRžXƒŅEnx^ĶSK5‡R‰`XŅR$ÎSĮ­tĢ´>zžôŨā>môÍŖjÖ‚Oq’\('ŖOĖ}xМī/8ôŖgĘ2qÎj °ÄŲ “°€jO“xßŅNAŌŨ>\g­<ļA@ë@…UFrN ĮjfN 9čEH¤‘‚Ŗq¨ŒņŦĸ$aņ’™ü¨ÄąíÚŪ cqīR&2GžE0ģOËČäŽô¨Î>”†;r‚įˇ=é"exAT`yĮũ(ÆXŨ}irIÆ@æ€ PƒÁĪáH‡ĘrŨ' RĘdQ¸t^ŧuĨmä ¸#Ž:P!w…Đf˜N롅ÆäūTá…%O\Ön­Ģ[irC,ōĪ•X‘w;ũü)Ĩ}7bûô;:†ÃR QŌõû=Ny!ˆÉč7ĻB\UÉæUBW'8ž=(i­&™ü¨Ęų¸Í0)NONŸZ† Æš´†b˜Gîä^Gą§´äJ¨G'84X4Ŋŗõ*U<Ž;šÅŗÔL÷W6īÁ$M€2ö ÖŦR ¸^@ëMĢ 2IA ŋ7lŌÄwF7 ã´É(ēÚ˛ôJkûF–HŽVB äáN3E´¸7ŠļwĮŊ(hÛ ƒœdŒt_íUƜŖâ›¸0Æ1ØÔÁUjŒcčĶvĮz­yĻÚëVŋgšFų>eel}jËėŧú‘YsŲę’j"K-HA 24[€úUG}ė)-ŧ!xí>Ŗc!'ėŌá3é’?ĻŒiž$k›–2Ų§Úį‘Xî č8ė+sKŅíô¸¤īiˇÉ+ōXրQÆI5nzŨ¨éf%¤+mo*IE\Į$ÔĒA“h9æšĖQžœ R+f@ƒ‚W­fÍ ÚĮLķīOįãŽsQ,ƒ~ŌyëOg\€ Īs@*¨!ˇ}ho˜­CæpĒx?­<°f*8Įõ¤4>FU‹ax!:9žæ˜…`Ā’ŊØņAÃĻ7‚€cđÅNjxÎCtĪZ@،b›ŋ "ŽxéH ģį9”Ž–ôíU–ffË‘ž;ÕwÔļKwŧíí1Œ×8=ņŠiÍ$GŽyĄYz W9Ĩx‚úîéíĸZÛĖģ w”O—Ö­ˇˆôŸ.yEâ2Äá$ ķ÷曃Dķ#c€>ņ´‡îžüõŽrķÅzeœjë7›žq‘Ÿâ?†jÕžŗn÷:Œ†íÚÔ(o—3ƒž{ö§É+^ÃæOcX@,pO¯JITÛģīwŽkū;&ąkßŗ\U˜D˛ëĀÉĮaÚĢĪã‹H&‰e˛ž6ōÚF ;xõ8ũiû9>‚į]ΡøÂųÔLy<€:û×){ã”ŗ”FÚtī2ĀŗHLŒķū5gDņDzî§5ŧV’D‘Æ{žN}¨tä•ė.xėtŠH ;Ÿ­”Œc§FōúßN˛’æáü¨“‚OR}aŲøĒKëBîÛN­ŠcŨËzįͤ Úē+™-ΕļĘ­.WĄ¨Õ´1ۙTK&B!n[•Χ‰Æuv4ųŒÃŊfŨ´ģCŪ˛õaėüG‹i$Ī ē"ĄqōģõÉîp*•'{æˇGušXd`{úŠŽÖË}Ҍų‘äđ^+Ÿ¸ņ„pŨÜÚ­ĻéŖ‘a €]Sė]Ņĩ§Õī/€ˇˇ"5—~wˇ~=)8I+7c}6ŒäŠA"•ãšįoõëŅŽĮĻØÛÆÁ ũĸI[sŲ}NŦčüE7Ø¤ēąŗ€É> b3’ŌqÔzŌ…MŊAÔIĒ°g+´ō3õĻ4€.â=zåÛS×ė65…ŧą…i˜‚Cn' ŋ€<Öu¯‹īîĩˆ­Æ"’í€pœ€éúuĄR“ØNhîKŽå{ãĩ&DˆÁ?÷sŌŧäx¯_fV/l"5ķŗbņģ鞞ĩ§eŦk7Vš*[\(žée3‹€ĀoÏ­7E U;uۊ7r@Éô,žbWmŽëx˛=-fY ˆ˜Ļų_håĪĻOJę,/nn]Ŗ–ÂâØ i ĮÛÔĘ#SLĶā8ŦĩÕėĻÖ%Ķ‘qbFR8 úĘ­ĪqŦˇŠ0XŗvæņŪũŸX˛ņ“!‚îyĸ ‘ôÉõĀÅ:pæ¸JV=)_–ČëЃX‡Ä!u ‹(ė/%žÜeÂǃŽÄdō+m=ņļå|0 đk––ūÎÛŎo<Ē Ú"n?0c‘Į~” “¸Iĩąŗ§ę°j0ŧ‘1Sm‘dYHėE,ˇę"FŠk`EB^N=@ĮjæÖÂōūËWžÚ'QtāÅåÔĶ84É4–—K?`Ōn —í1ČVfĘõ#ž==ęų#}Éį—c­“Pĩ´¸Š)§Š9&áØĮڙ6ĩ§ÚŗÅ=ė(ęÁH-ОpkŸÖôJúė5ŊœHØÉ¸fVÉ\žƒéëSM¤ßÎu„Qx™(ĪųíIF:]š]ģm_Oš §[¨š(Oīû†Ģ{NšŪy„ĖEģ04d2į§gÕYtKË›ģŠ ‚ßΎ[w΄žGTSčú…įÛÚqi ķÆ#IeÆIĪ8õéíJĐî•‹wí­…§ÚîÂ+šP†3¸{ãŌĸēņ5ĩģ"š˜,+34qd=4û2ōWŗšŠ[ļBŦē2Ұ8č3œņQÜiw3ŨNīwÚũ—Ęč}zú“Å5ËÔ^đí;ZKũFH2Äâ1$fQ1J÷éĩ4[î Ņڙ Œ3×ëÚĄĶôi­o⏒äHą[ ˆ°[9ÎxŠŽ´‰ĻÖę]„'—“ÉÎsŸĨ–ãÖÄ^%û]Ôpĩ¤đ‰­üčwôôú×=Ŗˇ›ĢéWs[ʡR Œŗžš@8īۑ]%ށö6°&öFkHÚ8ūQ† ëô☚ŅËbí~ŌĩŖ1˙VāŨAü3TĨ{ Ō{ܖŋ bíí|øĐɒFˆ‡Œâ¨§ˆõģˆ‘ÆÜK5ŋÚ"%˜ŖŽG¯ĨlÃḠˉį ҃ßôšĄØ-#}{Z›ėëb°üö?j”’H#pĸĪÄúœrĩĄ6ķY5Ô)9MŊ‰÷ÍmÛčVų5”c0ŠķOŨ=įRA Ø[Ĩŧ‚˜Pě¤c…9ĘõéÍPė˛îsrßø†ëÃŌÍpĐ[hž!nĒĖ>ĸēë5xlãļŧēIî›$°K}Ō¨ Gą˛•ŠÖEÄĨœāsԞjõ•†œMĩÍ´1ŋ“Xe XmnIÎyÍL¤šM‚†mÆsSĘļū;†âívÛËmåA+•dĪ#>õÔ<É 4ÄŖqvāTm/4ŨzÎAÅs ļ×VN˙CSmFÕĖ}NÎ;ŋY^X97Å'žņ7DÁ|šįtY䷒Ę9oȖæËĒĘO–Ãîį=­tíáHlåitģÛ­8žJÄېŸ]ĻĩŦ-ÍŊš›Ų"šâ0ĖŌ,A2=p=ĢNt•‘<­ŗŽāßĮ Į5ܤKo'ÚČT’|æĄ…c–]æōkĢæĀd,ÐpšĮ<ūĩŨFc¸Ų$eYJîSˇY"€_2){Aû6p7¯xĪ0sũŖč ÜşN›q] ęi¨ŲŲÉ tƒvÅk6\Ž?:Ļöļō_EvcVFÅvįhöôĄÍ=ĐšZ9롸OÅ:[]—A$‘‹6PŠčĀ\ÕHĖ’3}”N—É~Ø_˜|’{c×o H=3ŽM5vĢĐĮœŠ=§r3ŸÕã?ڐ¨¤–ČÂāųjN×Č# {qTbŠę(´¸õg{B˛BĨ›ü…€į§ķŽž[Û;7@w4ŽHTEÜĮ×đ¤’ú%‰.$Fc#"*ČÜxϤė´3ėņ YãēĶįšą BŠH‘œüŧķÍVŌíîÄO °šŽķPČ!ÛvAb{`qõŽŠJ´¯BÁ6ƒģ# {^*xŪ4`)sčēœŨŊĻĢZDÆÔ¸Š9"ž"0-ĶŠéSžŠÂ"ļfŨ^åŽ lˁķįƒė+ŖķīŽõKNžû|/+ð™1ĩŗ§ũ)sˇĐ|ĻVĄ`×W֒­¤w`d’͈\y;ēuëVõĻĄgmšÖÉPQTØ{û֓°ˇ… %œ Ë!ķƒëíYž(՛KŌŅ­nb[“* Ž,¤āāP›m$ %{›~R$< ĒÆŗíoĸēžšÚÜHÁ&\| įúֈÉOŊÁ˜Ž_Ã.‹ĒjĐÁ3=ĸK•$u~sƒÜTÅhĘoTŽ“hsŽõ(+¸TŸ)¸)…°¸U÷ԔDņápÍÉ?- :ļO=F)[k[?/ĩGĶ$œëۘ @㜠‘€úÔÎpõÍDî ōîœP2#}Ũā;w¨wcåb:⤚VjÆL‡Đđ>ĻŖDXbÎė“ÔúĐ" Į˙ZĢš ķĶ8d ãļj´Ąģ`÷éLhΞųĸn¸ÅnÛ6čž>QüĢíŋrrsÖˇŦČûÍhĄÔ[F ‡/ō›ëëN†8ãƒoĘ  `ÕJĸ[!r>Ŧķ‹{}Bkũ:7šō;öŒK´7BŌd–ôGOĨl\ItâæÚéfŽ;ũImâYzycāzÎē-?M{K›û̉ŧén\7 *Ō" õhī&–id4Pŗūî6ևSPäĐÄžŌ5K­cPx­ Čˆ-ŦŌ‘ō|¸ų{ƒ’j+O].“Ĩ´.÷"YČ%ŽÕ3ëŸį[íĒČēÄöąDސÚų̓ƒ¸ļįŽÕ_^ÔĨļ[âšKa,›¤wĮË‚[úƒ”´CåŽæm„Ž­aŌc0ĸZĖķĘʙ,Iā ûqš‘üplî"ūŅĮÚ¯>Ķ0Tā¯8Qú~U¸úƟļ y7yC?=1ųÔ#ÄzT—Kj—¨Ķŧ†0ƒ9Ü? \ĶzŽĐ2ė|'äZAgqxĶAŅš(WåoEëëÍE­x2 _Pšęâî@ÎP" ûĒ#ņ­/øHŦa‡uÅÄj¯+"2GĄ>ĩž%ĶEŔō‰ŽąąJŒž2;SNĨî…hZÅIü#kq|ķ=ˌŦŅî_UQ÷3čN \Ō´ m*îkĄ$¯s7úĮcÁį8ĩåtˆcĩTn&ą,|OĻęW Rîī&6íëŸJW›^Cj)–u­nŨ-į™ãU”IōĪĩgÚø>ÆÔ4qĪpą´…Ų`8<oQ@ņ†™5ÕØA#Åk˜Ōō“8õäО0ĶæŽyŖŽãˆ0ėY>öNôŌ¨•¸7qđx_NL—NW™ yw°/éÛéK'‡ôôÔΤ„˙( œ ĀĀ8õÅWˇ×ZęæÍŌęÖk‰ūDĀÉP9-č?^*Ŧō˙hK5ŨĪ2›ŸŗØÁ›7<ļsߟAE§}X¯ˆž|ĨI—%‘˝#6ė-ØãĩiéZEžm,VaÕYˇ1fÉ'Üũ+PņˆĶ]b瞒9L"GRĀ€{/~´ûßE§Ę ’Ęc+EmL–íŸëG-G ^ SbMÂM]u&ÆŪNķˇ8ÆqëEžƒĨÚ}œClŠ`v’>IäŒ}MfĪŽŨFū?ąƒggguqģ~7bĒÚxÁīm'{{XšK{o9ķ'‰áAúM.Y´;Äč§Ō,eÔEô–č× ģCžÃéųŌ[čšm¸œ(ęĨ•y éPhڕíũ˜–ōÖA.Ķ ‰2Ėį"ĩT€dd~5ëB’OS<édh Ú@ L2Œ sīÍXvąļdiL10Ĩˆ\AY~ ŗT¸ŗĶeäHÅÉî¨Ŗ“í’@Ēz\ņj oi~æĶ7›‚Ã?s…<ö9ĪáTŖuv&ėė‘ĶÅ ´o$ŅĀ‹+ũæ 2ßSRaK‡äŌ¸{ĪŠxĒ#uK#vĸeŽÆO¯Õ隓j/(’ÂęŲPāÔ ßNiJ[„džÅ™ĸYSˑ7)ę­4ÁF#XŖ :Ŗˇ” 7AČėiåSh ū5%ã…(ĮŪ՗ũĻí¨_Z}”ˇE’2­Ė€įƒžââÔą':vã9>ö3Î=ņ\Ųˇō†¤°Y]ĸÜØ. Ŗd¸Ü?>E\bšš2•™ÚA/ š0NéíI$öė6ČP1<+0Î}+’žŪ[‹Ģi.āÔJ,Qu„c:†ô>ô]é’M>¯,Z\¯rnc’ŲʀHrA'ØĶP]ÄäûtwVÍ*Û¤Šæc˜˛7|S乆×`–XĐģm]Ė5ÍiöIâynœÅš`¤‡8!8 wĢZöŸywt<‹HŪ0ˆ|ĐĀUķ´įˇŌ§•_qķ;ĩíEl´Ûĸ— ĸ6(ÜtāÕ{ë녏Iš)%ž5|c ’sU¯tŊFMBîxb‚XŽ­|ĸŽø16N9ÔōiÚ™Ō´¸– ÄJ ˜^88ęERI$N­–§×Ŧ!ēKi'E”žÜ`ã>™éŸÆŖmnÕŽÚÕL.˙-ŠFJŠÆpOŽ+:MųÅÆŸ›sbķųŪi'Ėvâ1ŽŊŗšąa¤_ØjWMĐ=•ÄžiŪ˜ Ú‹E!ŪM–`Ö­æû*Æ\‹Ū[#%zƒči‹â;96*ũ ī,ą‘ |ėšĘŽ:ņT­4 øgļ un`ĩ•Ũ–w2ļx'=y¤MP)iū—l­mt÷ydä6r:˙´h´y¯õ臇_R‡x8dPS”~AČö9¨ĄÔ-4¨n$KY$¸ŠÕ&•ˇcĖ\uÉ=zĐÚ ĮöDöŪ)7î]cáC-߅Úâ-ßÚ/mE´Ĩ#:ŽzQîŧŸņ:Û}ĄRŌi+u¸o˜ĩŠ“x"y!K9Ĩ’;asĀ Ŋų§Oá‘:ēŒËēØ[ČÁ÷Š:nŊŠËáĐŗũĄ¯%P-~ĘrĢķ/Šã­ģ|uˆ#ģēŌĀđ 1ģAN‡>†Žj÷B âo-nb-ĩŽ zÕ9|? ´ˆFī<‘Ú›t6ŠõĀį Ģ6Z2§†ĶJš|ŗއōįŠO—tRæĩŒûe¯4Ãgeoī°ķ¤$ĒĨH¤õüĒŪ“¨Ĩ‚mī ’ZĀ'ĨK'†´įŠ"PņFbGÛ} ZšcĨÛXiĸÎ&…dbüÜĐåY )nÎFōûVžđ…ķ^Em#’ ­ķ÷ƒĪĻ+KEęJ.#Ž n„žSŒ}íZĐøcFŽĄ[UM€āą €xöÍ[‡HĶíŽ"¸ŽÖ!,K夛yUô›œlŌ{ŗ—ģņ%āPŊ‚TQgr°›GŒeԐ3žš<‘Jž+뛍WW ¨´bÕ3|¤ Įߌđk~ãG°–õuĩ€Ęŧī*2HéøŌĮkϞIyP?˜¤É$jņÜZ\ņļĀĸûœŗë—“AĨĸ_Giö‹5Ž]AĮ_Ë=ꞥvgÔu]šœáí­RHÖ7ØģļįÜtüëŦŠ-SĶ­vÅmåMĖ´@c'ũ*ų‚)!ĖÆ ?Ņ.ĘßSІī~ŊæĩÄŪdļhÖņo!$l6xéTRįĖŅŽŸûFņŽžËûØĘ°1ȝcž8í^‚aŒpŦ@Ā=ÅWH“ĘÎqßņŖÚy#îqĘædŽ{ąĶÄዹ"P}˙•tZ~ĄöÖąŗ´Énk ÆG­hČSh`wNõJōŪ9Ž<ØĻÜl)@Ī^;ĶræÜ,Ņ‹5Ė˙nÖ5Ā"Ō/&2GCŒą÷äĘĢÍ{!ūÎ"éŪ1+NŌˏ(ÆG2xއM°ļ{^S$’ĘĪ+€ÄœôôĢ­ ąÁ*@oJ|é •œģęZ—•kl/Ÿ(FÛ0_/Ā>Ārjæ§-ė—övpÎöË6æy#BÄãn¤ÖȐ4…v81ãæa€sčiCų ’šÍ.nļ >æWR˙hŨŧOq2@Ī•BŽ0L–ĨĶmŽė9Ȑ}žŨŒá‰D,p@ã×'Ô֖›fÚ}ąA+—wl nÉ'­_ŽEģļōäBŽJIŒũjē Q2nĨ—ZŌ,.l­ŧÆûDr…Č@<œũ?RÕ4ŨHĮ¨ÆējÜũĸt–9Œƒ*Ŗ`ķ‘Öē˜DqF¸uŒĀčŠËF‘îiT.:ąâ—5ļCåžã#g0!’"ŒĀRAÆ{R,"ŖR0r ¸üŠ_Ŗ&ā~ž•"¨ē qY–ˆÁäqÍ@ČîIgų};žOš‡xÃāvĪz#!eʡ¸õm-'ޏ§ģxäŸzg2îÁë@ ÛČÁäT$”—3žõ&ĀG\ˇ­5ƒ/'­0ep˜ė;sQČzdöŠŲHį#ɨ˜ “žjUsØôëPHO/Íß rBdĶ2n†"qŠßąæÖ:ʰŽūáoiŖũ ūČĒč)@ã¯J>lqNSƒF2Ž;Dœ†¸Äé’cĻWųŠäX69¯vZ‘¤L6÷^āB¸×8†Qųh§ųÖđ4Â>ÄœūÍ]W…úģąū‚+•îJŋôĖ˙čU×x_%ŸūšĮĮüRžÅ3ĒE'¯×5"¯V#$šllqÔĐfÆ0Iæ°3%ųQ™ąÎ8"–'Ęōs×5’/$wĨW!qˇÁ DŦĢĐ ųôĨ8ĐõģÆGZW%âÁ#´ ”ã~ ĶNp1‘éQ—Ęáqō÷ĄˆrAÎĄëHwÁ _Ą¨Pį?AV ŒdœbŖcÁ?§­0*ŋ\IŦÖÕėWQžx7 ÔĮĶëZnÆAĶīÕÎ.‡yoy¨ŨBЇœ~į“ž0IĮUG—Š2ŋCvM[Od uhW|‹žT{ūbšúΚ,å¸[¨š8P<…NH§ĻšĢ j -üjđ*Ũ*#år7úք>ēOŊļI-ĐO:2€§ũZõ=+FĄÜ‹ËąŗŗĻĨŊą$BHˊĮĘI#ĩG/‰4ČÚ%2ģHņ‰$lKĶVVŗá[Ũ^îWû|h<¤Ü|Ŗ–Î=ûVŨžŠļ÷éxō´­ēƒh@돯š…ŽõėiŒƒ•\+õƒ/‹´Ø¯Í‚Ŧæq*ÃĩSŠ?_Jĩ XŪÚAp/§vÎZ(ä}æ5ôŨPY6¨ē„˛Ë$Ģ3LyÆIã';ØOøT°čÖ ÖŒĘĖöŌ3#1'.ŨXúšŖk –F^Ÿ,qÍ­ëSc˜ÆHHÁįņ9ŦûĪŨXééq$ö’›ļĖAa,“ČZé­ôM>ÖÎæÖąÉ>nI%ķ×9úĶSCĶÎÚgŽŨˇĸ•ā5 Qž¨m;hrڟ‰5ąq"[É J°Bō÷7œāŖ?ĐTGYÖgŅŽ ^´Ëx–đõų Ô/#KÆw?,ŒbĮ;˙t`gÔ×tŒģsœŽ8>ÔÔšŠXHœœps֏iä giĄęŌéú¸ĶŪ9§ēæ–n NNrGøÖæŊ \ꚍ§”°ũ"(ÎįũY$n w8ŌĢd’rsõŦ]cS™- 0Éöw’ėB]Š‘´¸ũ0 ō“Đ|‰-Jrøjåĩ´–)`[R0ąāīųĘšė3ÉĒöŪž×PŽúIāi#îväŧĮ^Ę0+ĸmRÅDlnáÄĘ^3¸|Ę9${bĢ˙kYÉJîØĒ[ôéŌĢhū%ļŋH‘îPÜģ° 9’ΎZ=öšƒŨØŨēŽIa–(äŲ#Ą øÎĶŽ s°øB;{wŽ+ÉŪĐĀŪėrĪîI­MC\˛ŌŲîp¯1#,Iö]üGĨÅzÖō\9JðÄôŖĪm.WšŸkā;;T¸XîæÛĩ ŽöĘīRšh!Ž)ĸWŗnōÜ&#Š MGZđyŽKtŠōuÚCƒõöãĩ +Ļ écNÛX˛ēIŒw |• ûF:ķô4‘k6K2Į0ÜáÁL/¯#‘īY’č—÷ksæũ֋U‰!×'=:dĶßDģÔYÛQÂæÍ­×Čbr[ĢŽžßZV‡pŧk=R AŲaI˛˜9xІĄëU›ÄCPz1g%—p^œS´‹mRFĄ4 ĄB"ħœw$úÔ0é—v—­äŨD,žV”ÆbËäõôĪ4{ˇcŧŦsÚfĄrotÛÉ÷Ū4ęņÆØR đ0N+UēfÔlme0Ĩ–Hø>aP0?\ÔpxhE ˜[ÖÛ4ŽŽą~~ŖÕģ­ ÜjVˇr]>ČQ&ŅķnûŲ?•9J-ÜI;m5ČvVđÚõŨøŽčÁ ´ˇ2ĸO+ģŨĶŠüxϤ¯ 8ģjrĨϏ—N‡Pžæ)$´s"ÆĖƒU'úĶaÔXEĻŽ§-Ėv¯nTČģƒ†8įĨv’ Nā¤uČĨ¸/ÎcG´]ƒ‘œ^Ą!˙‰Ėk$ė‚8,HĮ\…MĒJąŦ-joHŌT*_oį=ÉĮ¯jë×Vä{f´ķpEĶČ\§2ęŸÚŒ­Ņy-ÃD|WœcŒō=ę(ĸ‘…ö•ĨËڛ0‰ō11Ę8$ÎHčk{PÔėô˙/Ī–L°8 …¸$œvĢņ¸`ޝĘOj9ļާ+ŸpgĶŖe-É[YFe,'åŪĸ“OÔN—§­åÔđGDöąË†Ũģ œ{WnpOņŠsۑ֗´cä*él-ĐÚ}•Œ`4{÷ĀāŪŦ¤f<œ“ę Aŗ,~TŒŽŦāzUˆ„€aØëžõ›weĨdFņd‚¤ƒëHÃ$exéR˛öëQ˛”aŒäh˜ÜH 3üę-ÎPL60Hč*eäÜÔlsōį4ˆžęe°}éˇ)|pÕ&ÁŸģŽE€A`x-Ō€# ž¸¨\ ÍO) ‘ĐúŠ…ˇ`îčzS¤œ’­&:•j@AČĒ× õ  ĢĄōœ~Ŋ` ąˇ>EĪåXWpÖö˜ÛŦ õō×ųUô.‘ĀáąÁ§)P>n´ŠH`{⟷<ā~T‰9-lÄĸPēãۑ\l ˜¤?í/õŽĶY!t‰û” úäWä˜e˙y?­oX/q“ ɐîžāUÔøaŋzātō“•rąđd$õ +¨đ¨ũëņ‰9ü*gąOc¯U,&”FĻLõ‘0 õŠBu# šÄČQŠŽX“Ÿjp^OŊF2xĮḨ įœĐ!J?N)_ĮzR˛’Ų_ƚ„ųdíų­ŠČĀëÍ8ãŠCČÆ?ZcĄÜ lķųPļp:Ô27ĪĪ4Š!BAˇ>”ÄU|!ŊM ąWnryúU8ĩKIn§ĩ[˜Ėą ˛į§­jH6œp=+ūÞû.¤Ō$æéÎuU'“Ÿ§j¸¤÷dÉĩąģŖl—‹ˆø“¸`Æ~•Ŗ&ĄhĐK/ÚŖCōČá°úãí<9zö&’3æėŠ6nģË Ģšį…īîāŽĪOXÆ4R"/´—Ī$ņÉĮ­W,/k“yv:ˆ¤Ą[˜åW…“ppr úæŗSÄVŋf´–WöЌq,ˇõ?NõatšŋáūÍc˜Ûy[“å\ãJĮÃw6ŸŲiöˆ„vēļī;w—.ˇcn] ˇ:õ”Ĩž™–’æGb í÷'Ĩ2/ØËŠOf‰+‘¤2Ęí^¸=ųâ˛,<-žĨm{q¨x‰g 1““Đ˙:n“ĸY=ö­ (…b†`rKKc°ĮĒÔė+ĘæĨ¯Šíg;ŧ‰"ˇ3ĖΌ ū}Čæ¯hēŧšŊĢMöVˇPä&ķ÷†:㊊ƒô¸bēT3/žĒŒwr6ã{ņZ–ļVövÉ>aÉi–ns’jeÉöG.§;?‹$“^ŠÂĖ@ŅŠo6W?ŨRHŠuk,ČZÖ&iŖE¸åb:õs[zŸ‡ímtÉcĶ,Ķíoē8Élŋīžø¤›Ãđí2Å4ä:]ēHîŒČęúõiÂÛԊ#^Õ/gŌí 6ņK0Y§/ŨNxQôÕ6Öī^ĪPē‹P•škŅmrgĒúäWl-m–įĪ0D$UØ˛lĶéRG 1ÄĢjˆ@P§Ú.År>į××qŨkwŌIu›hÄ"ĄØXôãģf’aŦÜęúmĒ‹ą Å$’ãÎ2ۏ¯lWnĘW˙:Ĩ}Š­¤‚Ĩķ˛%ÆHO= zėŲÅÁeŽôš6×2ĢgōŪREú˙.)ō蔚^‘lÖJZ1+ēųŸ*ČĮ‚Ū¸ŽÍ&ķ#IːĶÔ{wœŠ71äŅí_`öhã5? ^ʂ+icŽ8-’'ƒ 'æÉíZņi7+ĢØÉ*[ypėV^ŦH§l[~jļõ[o^zw¨ÚęØ#?‚ōÂ{õŠsÉč‰Ū§ƒPÔ úmÅĐŧQäÉ8@*Ođô­?iÆÖËĪēHÜŽdv™ū~€Uۋ˜I‰" x22H}}Ē(5{Iīnlâ•^X0$ چÛV’w9ëß^_ë2_›õW7+"ŒglcĶŪ¯Åá@ڌ7æä4Ÿi3Č|ž_uG ĩSZĶ‚4†î=ˆâ6 ˙íRę:֟ŖŦFö`‚FÂ. 'đsÍč.X˜GÂ.mŪoKųˇfæeۅoEĮåQiŪ[mJ;šĩ $Ų!˜ M Éëô¨cˇ'?AŽ+°ˇ'ļ†e$‡@Ā‘‚r=)šMF÷ÜJ1nÖ(hzhļŗĒM$¯<†GvãŸaY‰áڝåÜ÷í"Ī2Čc(:Š8וu €ŠO¯4’•Č8ąYķĘíÜĶ•Xæ$đE”–ŅÂ.n´’HfBÃ?‡U´đ­Ŧ7w“G4ŅĩĖ^HTlÆ1ĮŊm+<ō=8§ˇi ƒŒĶu%Ü\‘ėsíāŊ7ėļqbR–¤›¸~A;ŋ+BÍn~ŌC´žq›%ŋˆ¸úŌ´ˇŽĀÄ}i( =y¤å'ģ*2†tąkw,ˆnŸ|’+|ũsÁúŠ›ûOxícōvĨĄ&%Éā‘ŒŸSWüŧ˛œ’GZx%†ė`žÄtĨĖû‡*2×ÚPŠŪŗ.Ũ‹ÆĨ^š>Ŋ;ÕÆĶ­fģŠęH•æ‰HG#%EMģ ІéÍ> CŽsCl|¨¯›em*I´I$h#V Ɲ ĢLŠĘ3“Î)žco*Tš$$ĒjCØbYX6@ĪËīNs’ŽGSڗcŗr2Ŋ ˆ*œdįמhßē2Ė įŸJj"¯Ū ķTuÃŗBŊo2Hŗ mtÎAíÆš‹—Hŧ1iäÜßų× –;›>`^„õ=…\aˉ”ŦÎŨNÆ ƒŽūôÖôĨO.C”Ü_ ŸZâfœ^KĻ‹‹ĶæØ0Ä^`&@@ä}jåējqŪZ$¯9ŧūĖurA#ĖÎW=ˇ`n…ÎoI¨Éĩ—’Ļ7€Ę$ŨÎAĮŊ:âųÄ豄ģ¸FŽŲ @$äŽÕĖéčƒS´u˛Ô {Ib¸y‘ōXí<ŸĀôŠííŲ?áYŨbdI2§åĘāõ4Ü35ôËû˘á‘ūʰžāWÄŽ2ÔUĻÔmFān p\p:fšŨ>ÖqũŒ[O”^a!*D;ąž}ÅAeĻO#iĖúQ+o4Ģ' Ę08<úd~T8Ģ‚“:§ŊļŠŨd’hŌ6ĀXm?L0ĘX ûƒ\dē.ĸú,v"Ė ̏ē“ąČœsĶÖŽ-Ö­öšPcŨhC•ųŒL2–éÎ:Rp]sž¨ˇeâ›Yš´keXaŧ‚w ^įļĩ\ūŪĶäĶ’ôĘŅĀ[j—B }2k’´Ō5+‹(måmî-ƒnš2dĖ 9R85ŋ{iĒŪ閑mĄpåePüÆŪ*ĨÜĨcBmrÂŨĄW—sO•6ĄmËĮ#ZŠ­ę(ĸ͞ƎQōÁã,2ôčzUk#T„é $VŒm"hŸ•8qíš[ÍSˇEoqoäÜL.6āĀŽ8úTĨ÷ Éĸäú՜’X´ė'wŲ…RFObi–^"Žų#Q ÉĖŅp1¸gŽšįčôģÔŋ’Xn!Xeu’Uhˇ0`9Ú}ņŪĢGá˅tûlBčŨ[~bsƒ’xŖŨä1üIîwsä]CRË!˛j¯Ž;ŨK{Ļo.ÚĪΈ!Æ“Īž0?Zē|-ū‡{d—ސ\Īæ¨2š9#=ęKŸIquuroŲEۡ(#_¯_Κ”ĶúØV“ÜĨeif^Hāc:ØŦĖṔwüsÜԍâ;¨ÎÕĶXŗ[ũ ™~įsõöŠ#đĘŦ‘Č×r’ļĻ×Wîžũ:Տėüȉģ¸vŽØÛgå_~:Ņxu H§?ŠĖwPZ[AæO,"lHû@d/CĪzO@<<šÂÆå aŧ˛yÎqÎĒŨøWOģ’ÕŪKˆäˇ‹ËYđÎŊ0N+Péļ‹Ĩ›„}Œ f{}i7 + sksÛQŸOÖu‹Ģ˜—1ÛDÁ#bCuĮ'Üâ~īS“ÃWR\B°fXđsŅ’škÁáĢĻ‘ņ4Ūt^K‰e, zsN˙„gNfŨÖg€¸r­3@Āį==¨æî.YXĄũžĐžŠōOŲÚ$„¨ |ü ĮëUVyôĢvāŧRŨæ›nA#$āu5Đ`i˛<ĖöĘūzm'pãļ}…>ßÃÚeĄ• ˛Œ4ŠąÁ$†_|ĐĨ;Hæî5bKHįÔ­io/$ U+ĐįĄĢWÚĨΕ&Šûõēō,ĸt@!‰ “Îˇ#Đ4Ĩˇ[a§[ˆ•‹„+‘ģךą¸’I ´"W]…ļ •é‚isG°ržį;Ļ_ÜIâ5´Pû}Ŧļž~đ÷m¸ dk8Í-žąâI`ēy.bÛ"D¸ ü˜É^øŽÎĶNĩąĪŲmĸ€ˇŪōĐ.ãīŠXl#ˆË HÕäb]•@&Žu}•ØķûÛėiI$zĶĖq,ŒA@~đĪëŽÕjÛhņ 0­ėūAĩ 3æ6ãßžEvikHGPs€*# yš]€†Ÿ´Ķar.¨<—zlrŨËį,“C2' gnáĶ=*ö“uļ™>Ą4—3ųlŅŋŪbyÁÁéĮzęZVRÁëĪ­CuimyˇŸæˆÄgžž´ÜĶčÆ­-­åŌĮs,ąŠ€IfņÆHrzƒŽŧ`bŽhŗÅ=ūÛ¸dS Œ(AéÍtĒB€&…Į@=*$ē‰nĮŨn .m,ē˜v‹˙=ZSËJŒÆ7¸;Iã¯JÃæø^Ũ¤6Ķ[ ˜Qãy•™Pƒœã-[ˇzƒYĩų‚y„Eˇci ķīŌ¯A*Īæ&ÉDûrÃŊĮ¨æ›–›ޤV_GËéĸŗņĄ^8Įx°ÎĶÔôü*1Æėđ8ZPã)“ûĖtŦ™ Ņļãķ cĖIEI6ác>Āu¨•6‘´pܜĐ1œĶ‘Í4‚déĀ9”í¤9ĄÃpx=FÄî#hĮÖŖųz.I?J”įy‚Ŗ1îVŒö>´a¸Į˙^ĸÜ aĀæ¤Ü}0WŽj!×ŋZb+J܂WĒ’œŠĮ­[u`Įæ'œšĢ"⑨õ4 Ėģ#iëwK\X[?åūUyÁ“ĶĨoéG:uļO𠾄ŗ@‘Īœ:6)Ģę*ČČéRIĮ븛M}Ž@R~k“a‹iOŖ'õŽŋSÜ4Š~n˜üyÉ9˙EŸę‡ų×DMĄđ1Ņ|ŪnzmcÎē œœõ‰k™ƒ“:đ8oäkĨđ›9ËūfĻ{ö; æĀێžõ#;p;šbā ŨJ^7‘ˇ1Ōą1dÛÕI ņÍF&Ë:õĨ`¨c>ũ9¨Áųˆ89īŽ”ÄN]BķōƒīB° ’@íLr7U$ޤtčÉ`r0ĘyũzCąš’ʓ˜ âœy“‘ųŽ´ũŖ$“CFr9‚!Ė@žĐā|Üäf 8õÆöx’GÜÍnFŲPĀr=jķj60ĸŗ^ÅąÔČá÷GSôŽ_OđÖø4ëwļE†9YūmÄpšīž˙J‹Rđ–§{q%šĩˇˇ•ÕxÎv `c§áUË÷'šVØęäÔaËI4kÄeg/Œ/cOz†ã_°†™/!uB!¸íũ*„ēäך´€Û˙¤Û,–đ0IôúTZŸƒ…Ôzl0\`ĩdR9eã'ŽįŸÎ‹CĢ{ĸ7Ūé!ĩûTˇũ›g˜e#.3Åg?‰ė,­!7įĪÎFŪ>žžÔ—eíԚĨ¯$V3Ĺ Ą*; qÍ,Ū‚õV9î%ÛIt$*ōy÷ãō¤š:Ūč‹l´ãåŧN߸Ypxë÷GÔĶĨņÅwzĻĪ6ļvË,Žgqۊ[Īéw—-w|]Čul…QŋNôø´mö;é"j]0YœIÛqōŒtQxX=ã6ęãí—:Bɔ[xZúEi70p Ÿ^§đĢpëW3Øé‚(ÚúLąr[jōqõ ąoe ŪKs$)˜Ŗû4€(wۊu‘Ņ&ŋd‰<ø"؇aĀPqōžČâ‹Ģl}Ė›cPO}ŠãkuxŅ ōų!†Yŗė?E§ŦAĄ^jķ\—…YŌŪ1l8ôô­=4‹TžP¨Čæf8Î"?*ß…n4ąųÆŲbo•ˇ ôĪLĶrKKMës‹ˇūŲŧƒLo¯įšW2:€D=n:ú}hŋK…ļÕ崒æiaYDËķ?9úž~•ŲKæÉo$i'“) \ÅĶØéz’élžcLu%Á<ŗîÁātëBŸQ8Øã›ûTÅw‘t[j[F~lqÉܞ­]ˆôwŊŅ"XÄÎöč6Ā÷‰Ā?RkĄđ­‘Œs늆úiaŗšK}†Xâ,r8Ô{FÚ°ũšKSš°ÔNīibņÜ^ĘŠŅ‡ÁŠ%\ žŨ?ZĖŗđÎĸÚ"ŲÜÛĸąŧ36 ^ĮԑŠė´ŨE.l,žy"Ž{ˆÕüŊØÎqĐ}MR—XxíÂÆ`72Üy˛ļõS“Īn€tϧ%ĸ'–;™Úw†omí´¸ž(Ct×eËöGš˙ –}V7P[ų 5ŨáwDD÷ũ*M+QŧēŲ-ÖĢ EnĖ%ˆbl~š9íZŌëztm†ŋ€GŪî:ŠNS¸ŌŽkMđŽĨöB_%"ˇš31WëĪĻ9$`{bĩ5O˨xŠÛQyŖKkuŖ ž 'Ž˜5gRÕĄ“KMFĪQ†(ãl—aō>:Ąã#đŠ×X°“F:™MĻߘāãЌ}xĄĘ{F;õŽ•&š,z„S„ˇūŌ–vlrØ .;v5ÖÚÛ]Equ$÷"Xä`aŒ XÆĪzįî5 [ąŖÉ`īqę Fŋ čNcĨh˙ÂS§ųŦci%š0Įä\‚WǃëJ\Ė#dnJö =iå˙yŦ;o[OqkÃqū•šŽĀĀ÷ëBøšĩžŸė—*mPHcuēœān G$‹æFîîpHéļ”Œr:V Ū!ÚöđŽ›uæÜÄō* üŖ§_ķšbøŽYí´öļĶd‘īĘ#JĢ‚žĻŽI27ĘņÔâž1Īnj<‘[!€qíXPøŠZ{ĩšĩ{ŗÁö€ŽĀŗ/=@č}Ŋé(ˇ°6–æķ)āîųCdŒS€pOĪ^k3NģÔ.ĸ‘Žm"…ÂRmŲĪcĮĢ"×Vē:rÚZÛDn§’' ėUŨųôĻĸØš‘Õą-“ëMQˇxu5‹cĒŨ]čחKsndBv3'\Vl:ļˇ>ČÃY:ĪíHÆ3ōãyëO‘‡2:æÚäôĪZ/ũO5Ę6ĩĒ^GĶcĩI$´K™SÁ$ãžØ<ÖÅæ¯\Ci-­Ė.ÕŨD§8ū*N c$ar;P ) ņJ€¸*_Jj-ž0[P*J ˖wÆ)˛2€\’@įÍSÖc™ô›ŋ&Câ'1ēõËiSÜ´ŌĮ¨\MYģ]31a€0A=sÅRÕÉrŗąēöwW:ÕŽ§Š¸ˆŠŠHÎâ÷āđ+iœ)ÚO^k‹ĩO}ĸIq¨\FË ‡`PËÁõĪ9’Ūį† —/säŅIģ~6ØąíЎ ĨcŗÁ9*äŒdûSČ‘Æ s:7“go¨^Č.$ž”ĖŲ1î$cø5BūÖIuEžm>ęî9R!ŲvˆäîįלŅ=üËŦ/ö{–žxä‡s¨ÜhõöĻĸ›lč[R°[‰bû\áûā¸h]WN25ô!â]î €qÉüë"]*IWY‰ė‚­Ü{ŌRW†(_^ĸĸ°ąŧŸT^iĢbļŌ*ą8īK–=ĮÍ#q5K6cšCûŋ4œđ˙Ō˛õ-]n´Á>—z Eqŗ!ę ƒėjĩ¯†.“¨[\ĪēyG“„ôx@qúũi¤jgF¸ˇŽÆÆ 7ÆWÉcÎĶ’ÄãہM(§¸›“[sëvVßiß#–Õ,dí-Ķ>ŪôÛmV Nm9Rs4G ŪQŲĶ=k*ãBÔ/Ūņ⸡ŠԉÛpbU×ĮˇŠmĻ\ÁŦÜ\ųą5ŧĘĨĶiŨ¸.2qŠME!§&Įžĩ_4 ŌgnvģąœgĻqšĨ'‹!K4,nØ<âų@ËzsíŠtš-ķę1Ũ åTIwĞVvĄ+×õ¨äđũÃŲ5Ģ^Æ'ûEģy<ĄÜ[žzД:ƒæ,c}ņļSŠTW’ĀA#žOB8ĒãĐĩųŅKoöhÄÎŽJ‡ĩK‘;ę†õ¯XģÂ"‘ ĄąüCĶ’jĩ¯„`.c’îâUž#…ņķú¨ŖÜxÄģ’ūƒS–ŪáĻ–ę33 ģ áqœ`Œkzã^dŠË͖Ū1$鿀S98rx4ČŧZÛeΧq3 U†@ųaH#šāsR]x^+‹ÅsysÉŠbŒœŖ×ŽŋJ§(=É´–ï5ĩ‹Iļŋ$“í;Q)å‰ííԚ´ųŖØ\˛îrōj×Ūõņx­n!Ûs°ĘĮæSÆ3īīRŪŨ\Å{¤°n%K‰v“),sėp;Zé—M´XūĖmĄXAÜŠåŒg֖]:ÖuO6c?&čÁÛôŖvWÜÄšÔĐEw šķ/m­™Ę#Žw–æB%*û Ab'Æé]T")cWV8ÉįĪáIƒbČAõ9ŽĀĸÎJ ÍÚn–'Y÷Á|CĢ#’ŖæÆIÖļ‹,‘.¨ Í+ĨԎˆā‚ËØ{V´îv‡.YFâÛxëëVˆČÚSœÔĘ},5ÚÍ4ļ‹-Íšˇ”.oâ*ĐØę›œ§#vzZRN<Ú Ņ ŲęWŽšĻŗRÄCR •ĀčhÉT ĐVÎ0A9éŠVeĀ=;T΃ĄúäT-ōŖž:Đ*ĀņÎÍ  |ĘĮ“‚䃸ƒĶëK–RÄ‚€*¸ įš9úSmsĩ¸=sR¨,KyéL“rŨ@4ÄU†fjŦØ F=ÅZ• )= V•IOa@Ė› Bŋ=y5šĨ.í>ßūšŠÃš\Æ}kwGĪölîb¯Ą,ŅÉ ¸īNʃČš ʐÎI'ĢēlƒoR8üErMŸ&nxųsú×eŠ&í:ã8/õŽ>lyWvTⷉĩ?„|LY˛9*ßú Ž‡Â­ū’}<ŸÁsČ@šU9û­Œēk{‹Ô^Ą ˙ŲاąÚ!` ą}ĒF ĻõĀlāUsûœîų[ī-ZX‘•8Í`b3;Ũ7Œũ误;}Gņl°BŊ>8בŠam̌c'‘ąxÃ䜊ŸË áÆi‰‰Š€6žTzzĐ1ģ÷qųRÉ7—Œ÷ÅHĀ?/_AMq‚2@Å6@É\wéU/QŸOš]š2ĨQõĢí‚ {Uy­ĸšŠUDÃHÎE q4s>€MĨŨÚOe ΅â$ =Æ?ĨiÛŲAcn°ZĮĩ–Ûžį×5z(㊊D(ŧ ĒķœûĶ”ŽÅŲš[´ŗą"ŒĄÎäų š­i}Ģ\^^Ú(´[°ØmÃ>ĩĄlÃÍÉ d~•KJ´ŋ‡\ÔŽn T‚āĄFûŖ*ŖŗˇF‹jvi|–­sÚ#gž3­T“Äļ+jŗ šd2*~î"I-ĶëŌĸŗŌ.muydörÁ$Í7žųķW=TëéRP“EKfžî!¸ÄĀ\ČĨˆ^DÍŠCsyunææKt‘ˇ ģä ˙…MĻë1Ü2[¸”ČĐųŠî›|Åéģˆü鍤ŧ×sO=ÚĩK ÁëČ=G$ÔPč˛Ā4ŗ›™š†$Į–Įr;œi{ļx“Ä2Jm­# ˇQ$ŧ˙ nŸ/ˆž š X>ÃȡpN7cĻ2š§č̇ā´Ôn‹änY ˆČ9qė=ęXü=¤Kz5$C#4žhĄÆ_ûØéšiÅhÅi=Lč CŠ#,ŦÃ=ŋv9ĮįYãQšĪLŽŪ¤…˛VXŽKBz×\4M5MÉ[UÍĐ>{d’ųõ¨“KĶQQœ>TDĀ=@Ŗ+9)ŽžMDÜ\Úģéąŋ˜Ĩpė ãŸ~ÂŦĨíËÜĘ×7’Å$ēX‘ĸR@ũ@ėq]KYY<ąą´€˜†Ô&1ĀöâŠM¨ížōaĩ–↠+Ļ0™įœŸNiķ_ rÛvs–Z„‘´ešžin4ÖrŽĖāĘ:uéĐūUVĘøŸYËl×4ÖL’<Á˛%=ŽxŽÜW_Šj+c§ÉtmĖ‹įb=juĈ’Æá¸īÍũl._3™đŧ¤ŗįûCí&?ßųü(löõ?ŌĒiđ\CŦË/ØŽÖ‹y#lå‰pzą>Ŗ§ÖģMۉãĨ Ā÷íŌ—;Ôj-§Ø\$š4ĶéÎÍšˇ}Áso§ĢĮĨß-­ēϜë$Z“K‚Ta2O>„WI¨ŪŊŧ–°ÂĒĶÜąDŨ÷FI8íVläœ[ĒŨ´_hįōķˇđĪ=)ķŊÕls ¤jhŒ#˛U_í1tš”pĮ`i‡”Ãė‘ ē‰š@Ō€ g=ŋĪ5¨5ŠÅ$‰íŪÜČ6õ žõĢĒOkc<ÖōÂZ ”Âüß) }4sKarĮr­Į‡ī.Ŗš;d"ķíĢQ†0C ˇ>‹uáÖ°žXRį!ƒÆ˜@AČôĢļ÷đģ]3Ü[ˆá# įwĨ(ÖŦœ]!Œ9LŒ“‘ÛsSyh™RhZĩå­ šŧĩ[Ü ŋwÚBöūtë]X^M˛ņ>ÂîĪåųC~[ą>œÖÍŊũĩŨˆŊ†tx$žxëŸĨaÚjņÜxšsĶĩ—ØüÂ2¨!ēŒöĮqBrw@ÔSš†oío­Ųõ1ÚÄŅÄĢ!XõÎzôŠ-ŧ%,\Įũ¤Ō-ÜTœæ'œ6sīE÷‰í'ĶngĶ.VYĄ!3´ā î3ZK¨Åg"Ųfęæl¯šĘģļnéœtõĻÜú‰(Ž4ģ¯ąJú‰ŽęÕY ‘De Á'ԟgáŗožQ˜‹"Û>Eˇvâ-[QžgtŠį\m.ūGVöúU;év“Í iå3#E ‘ūđ=i‰Š­÷‰4ŲáŽa ĖÎČ0ã>ŨęXĩÖXė#ļą¸Ÿí- dŖrí<įõŖŪ[ Ũę[ŗŌm´k6Œ]Íŗ§—;G`3ĀëQÚøgO†cũķŦ2™Ŗ )áSĮųæŖņ`Ą’@ O^qķLģ×gŗûpKXÛ랯„ģā0lr8ëÍ ™ę˜;'f^ˇŅė­mŽmãB°ÎKHģĪ$ŽyÍ"x{KSÛ_õq˜—.Nį#“îj$Ô.noîcĩŠ&ŪQ­#Ä‘“€`{Õ ]sVo.SMlR'x&2ƒŧ¯b¯éJŌî?tÔmJ–(b–Î6ŽV1č3ĶéíZ$ ~OnÕĖÉĢëƒÉK0M˜Ŋ\†\DĒîõéŪ‡ J&ļĖKš~PœĒ7tôĄąžOjlˆÄ1^Ŋ* *ęŧÖrų;L"îb#âĢčļ×6š’įd2$åŖRsŽüÔ'FŋšoÚlÚEÄöī VBO9ĮN(äWÜ\ĪąŲĮ— ĢåHČîŊAũĨj.žĘ.#3äūīw9ëü¨ą‰ ą†'cd@6)Č_`k 7S…ŽŦBm&’G7;ΘᎍŠIÛV5­õĢ+‰Öå]ų'đĀuĮķIŊeu4I‡îÚˌcŽ Ö>Ÿĸj*tČŽŌ$OŨ‰ōe8ĀãZ–ĮEÔ OYž-n$”íf9VĪ_˜ūUN1îJ”ģ0x‚ÂæÎK˜å"8Û Yį8㎠‰ŧGdë¨e˜< ĒFsŧ ‘TâŅuėÃjĶB \yÖī‚w|Äᇧ=ĒĮöfĄ)´yžŌ9!ŸÍōâŒíÆ1sÉæ‹@w‘a5ģi-Vā{4B2Ÿ>ņü8õŦŨRûŽŲŖœ‡ŧx”7%73éSŸÜŌ­â,ÂåŽcaTn*Fy¤oÜ´7é¨%–ånco+…aŒägqGēOŧJ SgđĒM%ôŸl”Étč劌+) ~{ƒ|æä´ątōY‡1ąˆĨyLhNrĢũŪMdkz=ŨöļņH$ē§ÎĪ—ˇđ:ũ+R+i>Æ-ä}íåígÆ ¨inRoc|PÆĶP¸6…^Ú1(F|ČsŒãĄāņR_ëˇphâ„ĩŊĒÜEķžAĪō5‡‚ŦŦVhÅÕˉ4&)Pāāôę3V‡…íP3n%fˇû;y’}õ÷úUˇMlEĻÖĨí:{™Ŧҝ•\į1#gØęwē”r^F-Ŗŗ&EEbKšžŨGOJÔĶ´øtÛEˇ‰åtƒ+–?SM MŽöIaˇĮ˜O˜ģÎܰÁ g9íJëRĩĐČļÕ5†Đ’mĸŠâŨžP#8ĘãĪŊKŋzĨ K ŠGPSąëÁ­i´ (Ão ´Aą& šäô5ZīOĐmož×y ,’ žHīŽŨŠķEô,—S>]_Wfē—í1•ĩžûR îCžšĪ5¯¤^ÜOuyovâI-'ŽĢ´˛•dT×:=…­ÍÔÖņ$LŪtĖA9>ĻŦØCf¤ŨZÅ5ĀąUÃ8ėOįIÉ5°$ĶÜĖņķYÛFąŨiöŲš˛įõ5‰kŠũļįD¸žxŒ’$ŠÄíŖŸŌģY­bē æĸ8 šIPp}ĒtëhŽ<˜NÀv ŠJJÖs‹VŗXEq"C3Ė’\‚,ŦBŨ^ŪŊŗŪF5 pÖJöä°°Ī#Žs]fĸÖÚ}ŒŗÉ0Ä7˛¤`ū•Ī5ĸt FFY€$3ŠŽuŊ…ĘûœÍÅäģî|‹šKž›æF¨Į‡įęx¨Æ§-ä÷‰ ėÂ9,‡RH˛A#ßÖē]Jō.Õ‘ß÷ŠŸ Ž?*˛#3ŠCĻ2vG¯CO›KØ9z\Æđ\Ūv“(&vu•”´ŽX;Š=ĢĨ\wd <Žz{ĶÁbÛĐôŦäîîie`ųBžMŽ Îz})7Ũ# ÆiI ぞ}ÍHÅ8ŨŒņīUŲpÜš$šŌzôĻHĨH§ōĻknœōI§rÁÆsøP]•°ĢĀ‘L' ’š `â€A#̰.¯žŽũĒWrĘBōĨ1ܐxŽ´Yūī>˜ĒŽŲVãuĢ2Ÿ•đƒŪĢ91íš`e] î+oGĮöt9ūícŨpŒ3[H"ÂԅĒčK4TŒW­JŠHįšd| ™q´u¤#ŒÕ[ū%˛ōzwú×$ã\c9ØŊ+ŽÕ4š†y8ūbšĪ“rÛē"ņë[ĮsZøČķäcĶcŸüvˇ|*¤ßDGüđ˙Ųsûą<¤ ü˙ ×CáL‹ÁÛũ˙f4ObžĮmņÁjeäđ9¨ĶîvĨ,`°%†{tŦ š%`w Ŋ3Í?` Å5qˇ¯­!`Ãp^‡#*rz↠ÃÎhQ•õ>ô…sĶųŌü @Í2l’¤7géGņ õԟ›'ŠŖĮ|ãMߞ¤TŒráp1ŒŌ8$s@1‰ãdÕ6ģˇķ] Ô;”rĨÆAëÍ]qÔ’ĮŽ+†Ā&ŠŠĖÚrūø0_›Œ횤“m ā:hœÜA˛Ž)‘Üg¨Ģö¸ƒOŨq’x<Æ_ēĖxäJĀĩĶī`ŽÕäĩcĩ0ųlãälũīNE]Ōl/ÁŌüËuQģÃ+oRqŒzôũjŦˆģ7í5KKÉĨ†Ūt‘ãá•['ëCjļ?hx Į|JKļÃĩqÉËcGBŌîl$1Īki6,Ņąg—ž°õ´[h×Ģksc<đĩĢ™?x ī;É8ôīI¨Üw‘3köĀLDWb[›„SĶ"ëšHõģ‰>ĖO’#rYbß ėģ8õ¨āĐn$…–ūķĖu­ãxĶi @žNO<Ú'›ig—ķ‰-rL†ĀpĮæēõˇļ]ʐFƒn8@0=+'QŌŽ.ošTˇą¸ˆÄ#QršōŊÆ9ĪéUĢ’āĖyŨ˙ļR+ŊBō%_(ÚŦ!›Íō{’zÔļėšLäëŅēŠVb2@1’9ĘúūUÔéÖĢg§Áj¤ŋ’wÉÅIq SÂĐNŅ‡Ė§ĄöŠu:ČsúƒĢęúüP\0(ŲÛ`ĒËÆqĐäÖŗ´­*āKx˛ZßϤÉ(k‰÷GwBå]EņēšîßČōžË/”9Čnzuen˜ÜMEåĒ`.9Čôíz9ÚŌÁʞ§1ags¯ĨK,8ŪwĘãļŒō[]L¯ßžk= 6>VČėk÷OŊ“WąžÎ D†Üą’UŽáƒ€Ĩk3ÉŦ’0ķ$-Æâq:g‰Žî/ėí‹<—’-ĒĻKõę÷Ģ„[Õ9%Ŗ;u‚%;ÂF u `Ԉ"ßįŖķ€Į™´nüë”ŗÔĩē´ÅøšFŧ’)mļ¯ sĮ#EcyuwÛ\k†99wŲĒíhˆĪCÔc{Ķöo¸šüŽ´Č"*12ŋ*“Īž:z{8 NŊMrÖĶ4:V‹:ßÎÆââ/;Ė”°'i{ öŠôyæ“_ŋ…ĻiÔŪhvÚŖwTŒ=Š8žĻŠŊyŽĖvđy‘ÄåÃãixĮ>•u$ŪĮb¸—Ú“Ís ×ύ2Š\ŽĖį8éz|p´w],wm<:€ĀQ!Ėd‚xčF3TéĄ)“6ôĨ܀íÎėuæšK5Wņ'úSj?lšUQûŖčséŒqëTôí:#ö dĩšfķ¤Ž}Čį)“Œûr´šqķšÛlAČ Ô2Īʁ§flb7#-ôŦŋ ,ŅéŗA<đĖëʸÂg+j­ŊÚë7‘ÜéMuįÎ$†ėíÄiŒį‘ŽÔšUÚ6‡AätĐyņ@É@ā°úŠŦšļŸ$ëoė-3’Á$ŽĸšĢåÂĶŧ›Ģk6{ÍÚ9äœäqVŖŌ¯–ß §€ņjá ē“$ĶåqsKąv F{ˋ™å-í­.<§WPw€2ܞqøUų5}>%YšxĖnvĢ)Ũ“ÜqôŽuôËéâŊŲ˛¨ŋ+pĸečGƒßš´4ĢČÖÂöÖÂ+i-ä“uĢË÷ƒāgpæĄÆ"Mšąjú|ņ@đÜĄId(„än#¨õšÕŦžA†ė.ë‘Ėeˇ7uöúÖ,67séŦ-!qmĒ<Ļ7“9\ãŪ¤DÕMŖû"Ę/ÅÚáØ‚:‘ŌŽX÷iē†Šo§4ibĢ#C°œˇ§^oYEm$ĨÜ›ČÁC’ū€wĢ:ŠjVrÛĘJ—A‚?…‡B?͟@•ôË(ĄšŲ{lâa+ ÁŸø‰úäŌ/Qžn…]gPKŨ>äFŠō$tårà Ą­ĩčmÚf0LŪUÂÛžÕ3c¯NER—פŦ÷hŗËp“šXÎĐWgØsNžđÍÍŨÍÃĮ¨˜’iŖ›ËōAÃŽ;į‘ÅWšĸb÷ˇ-KâHāšš‰­.J[:‰@†čzՋMZK^îÍm$Tˇ xÚršīŪŠËáãu.ĸMķ*ßŪ1ōíôæŦŲéŗCŦ\]‹Į Pņ˜Æ…Ā9íôŠ|ļr5‹wīŽ†9;wžŖ°éQʼn K2™Ęã'פuSŽĩœn‹sqúÂÛŲËw›×üÅÆ=>cQéW-oĨ@âŨdķĩO,Ŧ͟/įĀ#é]•Ą[é t"šūĐK6ö {Ž:Ô1øNÂ8âO2å„syë™Oßõâĩsūã.YX’ĘūķTģw‰-ÖÅ&xJą>aÛÆ}:Ž•{ttßëW7 Á 7 āįōųēÖä~ą´ÔÛP%ģ<ŋ0ųaĪVÛëLšđõÅėúƒ¤¯<‹ĩÁ|Š_LÜTŠE1ĩ+īīĻ6ˇÚeߖŪmŒ’Į$Y`‚ÔsRŲ]˛<ĒBWû9]d9 OØsVít->4™šŲ*ymēFbWĐr°ŠĄŅ,cuhíĀŲ’ ģĶ1Cqĩ‚ŌÜĢĄę7sŲܛæUē‡īÄņėXÎ3Ôuõˆ”ŋbĩ]˛$ŠQ…e@ösŽÁĘûœUũĐ˙„zęY5(nŗå:…ĮČw įōéíWŦõ)›]Õ#ÚäŖxĸ߁͜vî+}láŨRŪVę02}iëW?*ŒŒ 9ÕļEi4ŗÁž{ssxoåVWĀ1ÉõĄ/Ę—†qĐū• Ņ GBsŠi`~nrZqoühQ´tÎ:ŌŽ1ķŖˇ­6GxnsøĶd%HÃ*äã-OÚž™ĻāCÉ&šY#ž?ŠĨ Ģ ãiĪAQd*ŖĐ aŗÎqÅA"í,s’MLK ´ņÁô¨Ÿ8Ū€+š!~nĒRČÚ21Č̞/ßÚŗ¯e{{YeEÜęŧ^iĄlTē)=k[F'û>#Éëüë™ÚÖ6aŲA#͊ØŅN4čņî?SUĐLÖäGZ•Į\TCīŠíS¸ę)ãõ WKœõãú×#(eēĮ÷ŸÎēÍHŸėéķĀÛÅrrŒÛŨz„JŪ&Ô×ēÆ)ĶrJ‘úé<,ĶWސc˙5Ė…?Ŋõ ĮôŽ“Â˜7Ēüđé˙4OaËcˇPqĶéNÚÁļ…>昤āuëŽ;QŽųĀC ëŽ `dN3‘Áį­īÜĶX) Ķ–=Ë÷ŋ ĐƒąÆsíJĮ’1ېííÚŖ9dŲ¸ŸS@=Šp“ŸZk(]ŊzõĨãŽséÍ!‘KōąAÔõ"‘›{1hœÔĄAÁ9ĘĶXqÂõ’(ˇ;ˆН<ņ@ģåtAĐn`*Û$ôČëÍqú͛}§R{ë).b–#öy‘A€ŊōxįœÕE&Å'dnĩÔHĨžTU ¸–aĀíšĩk{kē™n"O4eYœßJådˇ•Ŧâ{[6&Ķ%)ޝ9#ÖŽ&æQo,ú2܃j‘š`<ĻSߞAāņéUËäķ>Æî¯Ē&Â9@ Ō>ÍÍŅx'ÆíæIÁŪ¤õUöô¤”yAķ\n̍[¸ÔÖæ+‡ŠÆ8ߤą$äsÛõĒzŪŦš–‰löķ[ĪÕ%íČÁāôāÕÍN0YëWĪrs[XņŒmīŸ^M:ßPĶ$•¯äŽcEiÔ.vác­RåI1;ŨĸGÖSûb-: Y§1íY]ä#Žj;}ríîĸYưIrÖģŧ˞°Î1íWWB1ߤér¨ûL¨1‰Gœq͜u¨ŸÃÖi冖åüģƒr?{˙-Ō•â;HĖžÔeÔoôŠã‰ĒŪ˛+1ų÷˜zR>Ŋ|ą}ŋmģZũ¨Ûy@ëķmÎsמ1Wäđū4ūiIyž`Q+­žHã>Ô\ØiWötŽ'y c´šīŽ™÷§x됭-Ė÷Ô¯!ƒUš’hØYģĸÄô*IüjąÔ5Htī2âúˎŸƄڌpsųņ[Ša`“ÎŅG0ÄŨËgÔRCŖi°ÆĐ%•¸Čbģ2 ´sG°ržį5>Ą¨Y‹į“W-ö+¨ĶoVÆsĮšüĢŠĩÔ­.Ž.-ᔙ :‘ŒgŋŊ/Ø,ˆ‘šŌŪAmŅŽH隡i6Œ5+‘ ВęE&B[q Ŋ‡°ô6¤ļšg=sĒy7zƒBčĩ­äfúœųgÚēIn#Žmžth̀°ÉŦũrūk !qŒm–4rã#k0ņ暔›I Å-LKÍ#Uē]\›HTŪCE3g 8=ĒâYęVw×Wd[*Ml€ČIcĒã…‘šÚŽúŌxžXŽbtī:¸ }j/í<ŲÉp.áhﴁÁU4sIô"îU˛KSÃÆ;äOqŖ˛Ž:äƒĶŽjŦzüē4ÖS5Š3D9!ŒŒAŋ*ŧuũ1clßĀļÆųēŗuĒXŲH‰<ë`ÁųAî}֓r]Ëš&ŠÎš‰’æ×ĖŊŽ4;cl)úÔˇZÕÃę,בyn‘`D~MŖ“×ë]d*­¸0lŽõ‘ŠNŌjZz–Hî7™ ttįųPĨ+ƒŠ(ëlÖVڅÜwą¤3Ûbt’<î*„ §l’,h$c†8ük•ŧÕo…ĩōÅ~Œđ^mʕW1 BįŒõüĢJk÷ƒÂmŠ[îšUˇ­"ᛠÉĒQo^âMl_QŠmZ]8FÉ<1‰2Ā`‚zОH•RIũkˇž1ë“ÜÃxˇržž eŲrÍÉÚĢ0_ÜũĒŲ­oín-äF ė`1Žœœb‡LJgN‘āī}jBF?×"šš*KĢ]Bigh“ĪÉ,!$Įob9ãÚĄētû-Ŧ’j“\ZߞhK  Ąųr9ÆqK“Rš´:kŨCėW6pˆAq/—šO Á9?•_Ā]į'žÂšŊtÂßŲ(]Â5Ęm Ûv‘’z÷LMqŸ"Åö™ėāÔY%EÜĪåc§<‘“B…Ō•™×œãÖŖûJ+ ߁ZäåŽWĶ'ŲĖ–­{@ĨvŪ7 uĮZŠ}5P^˜tëƒ$WQ=ģ,lxwmôčhP]ÁĖėcåfO,faķdgđëOŽâŖĖnŦ ār+ģĩšXõˆã˛¸}×QO166îÁ?CN›KģÆŽ––2Gm+C"Ƥ&đ>úŒ r.áĖÎĄ/ ØäAbš,0iË}i+Åwpŗ?*ĄÁ,=̐j¤iąŌn’$Ŋķ LBã NOį§ĩLēUėL3i‹SķŖ  >W|sõ⛄{‚“ė^6ÉĨøŠÎ+,ÅؕĨįv÷I<՛ÍZ9tũAlŽP]ÛÄ͔Ãm#˙ÕKeq.ˇas ;áx”—†8ë*ßHÕæV’ŪI- #`!äŽ+=X;­ĩcŦZßC­Â´ĢŧœāŽ94‰­XHΞ~3)ųO(:‘‘ČúV<6§v‘ čŌĐEhÖų÷,1ž:*X´]EÚ)nŧ„{h(š7'y GŽœŅËâN]âmöŸ5–Üŧl7qĪáO›TŽ]mJŅüÄŗ)PrHĪQõŦÅĐuėK;c-°š˛`b$ĀųīÍh+áĸ<2Iģ*ßęÔŦc9㚏AŨõ2´íWOĶŦ­õÃqĖņaˇ–>aĀ%‚įį­G­ß­ô“G—ė ʈ‹ĖNqĪÖŦõ!͚ØEÕǎ‰Đãļzđ*ėē Ü×Fs~™{3lßšęO;ēúöĒŧSš6•ŦgéŗZiĪm$6— u.œŗ>×ų\ dO\÷÷ĢßÛÂgļ6֓HķÛ„PBņĮ÷æ˜ŪšVą&ūDk{cnėˆõ?^I‡ė/äÅĨģ@  Ëëú~T›‹Õ)-†éž$MFö+fļxDđ™af`wÔ:UģũWû2æÚˇb—,SÎÜŖcŋÖ¨ZøR8āuš¸™íRE@X.íÃĻqÅú ķøi´ŊFf;É*Áˇ˛|ŲQ“×>Kč šÖ%MNK™ôšdŗÚgķ 7;SŽ;ä ĨoŽŨ (ęRÛ ŗyqÆ˛’ÎûŠāƒĀˇqŖÃ-ŔŪtŠöLųj„œcž=*đåŒ:tÖgΒ)$ķų *sœŠíĪ4¯ÚE õËûm>)î-š2”v‘‰E\pĮ€OÕ­KYŸOĶŌæ(âs噞\/äžÕ$ē´Ö" dē• ;‹LrĀđAöŠ/4 ;QŽž' •Œ#•ųHÁ^"´Š˛ëoZ´fnOš ŒzzDÖĻģ›O1ŦũĒÅæRé–VxΧ?ĨO†tč$\BîV#g•‰(zƒÍJšo$N°…hãhŖÛäSØsEãĐ-#&×XÕîcĶņ5ĸ Ø]ՌLJöŨÎjĐ×%™l$ķŅ"šˇš ȑqČöëÅjEĄiļËn#´čáŧŦą;s×ŋz”ikAgoåÂKÅt÷ÅQė 3™MZūę=eęD/VA#ˆÁÁāāôĻXëwB2ęâčJˇR42 A 0Į<×Pt}>%ˆGgnĻ?õ ųsĪķĄtûHŅoŸQ˙‘Ož=ƒ•÷!†ęę[Ųc–ĐĨē’]āīü;UŊÃoĘ3ÛŠN@^H#^ 58jQōđ)ãĩ&KŸ×Ŋr2ebšįŦJqø×]МiS•Ī+Ūš7ųĄģ8˙–kÎļ‰ĩ?€‰Ë1îUēũ+ŖđĻā'¯“˙ŗį‘2ŌŠ_āc˙Ž×CáU-|ę!<v4įđąŊŽÔ:Ƙ| gûqˆË‚ÜãŌ›‚TtâĨä¨'p+&*ōqĮ­;8ČííM q×­+j`•ĄYĄ”Ē˛0@íŌŽÛXę6ÚĩĖąŊšĩ¸*īKĢÆˇĸēŠōb\kv6z†Å3ĩ´FRÚāg‘žŖ"ŗ­5}*Ų§kYåēûsČPüŦ‡Šœ T°xvú9nd›RY$šˇh$Ũ9ÎpGR01ĀĄ(ÛPnWąV]^ūAhЧˆdšw@ŗI¤ ŽƒŸūĩgë÷חv×PC ^EĢ!š”ˇ! …°48BîęIaČ˛y,F?—ét+™gicu3Ž%åCũ@8Í5(Ļ&¤ĖORŊ‚]Tڋx¤ˆ@UĘrCqÍjĘú…ŊŒ%ŒÎyŽųT žŪôįĐlgC+2ŦnKąĘŽûTÍ¤Ų‹e䆷\Œ7ô9īIÉ E–gBöÎĢÉe`6œdãÖš)otgT˛ĀËäHÖ÷hHäîĪšŽÔʁ‘¸ÁĒ6ē•hō{“Ė_#;‡§4Ŗ+&†ã{3W2ÛØ%æĒö°ĩŸšgBy3‚2GaÚˇĩffđŧ÷6÷R+ }ë áŽs횙Θ—ļúkÛÅæ24‘)‹åëŽÕ>Ў:]Íĩˇ–d–3ßÂō1چõZ Eęrļ {‰íīonŦM†ų;™%ô\ޏĒKpīŖ¸”]É"_Æëų„ųGķ×ÍvÚ-ĩŞ“kmså‰bAØw ;âŽ91Š` `ōSOÚ$öMJæÎ9/ŽíŦí§ōäԊ&UöîÎ@ÉīŠŠsjbŌ4¯'Ožk<0¸‚5Év÷Žî9”pS=›ĩgļĨ2kđéĸōä…Ĩ–į‚1øĐĻÁÁ–ļą/ˆ`’].ãÉû$h’ʁļH “ëŒ ÕŋZŨ]érÁki$ī3ĮÂÆÖį?JŌÖoMĶ&ŧŽ%—a†l`dZļ.!D.ÎĄ›wņŠæzH|ĒÍ}ö“ŠMqŠÅoa6÷I‹šÔdÆTëĶđĻßčˇ÷Öú”̧-ŗ\EiĘ>đ9Ü{{WS-În`XĖMąÆP āgŪœ5md™/ hĶī8aOšĻ§$ą0JÔŽQ_ŗ@ĸæÍ"RdįxŽNOåVIÔVkÆT‚ežˇHÜHį÷lˇ#šĶ—W°´XŧûČgɉ‹đØ÷Ģ ¨YÅpļææ?9Ú…ÆN:Ōæ—aōĮš•ĒC{ĻčđéŽīs—~ī~üpsč=ęÅõ…ô÷ÚmĖ- ¤ Z`Äķ‘‚)ĮÄaq‹čcp ŲČ̰]ÃqĪĢ$/ČeäIš-ĐY>Ļ z¤ŗ[‘små[]<Č<ŗ¸Ģg œõäŌÚh:‚´pŪ\@Öņ]5Ė~Zää°Sž:švĨŽ]Zø†ÛO#ōäŲ÷Į/’sÎp¤yëZöz‚^\N‰Ąamžc‘Ôžj›’WŖ{‘čWDkõ;oė\įå<ûšqđčPč—ŗ$Ÿj7Qēĸ-ˆÆÆÅXūÛ˛žõ C)ķˇ*8Œíbŋ{ íŠĖĐu(ė4(üöžyZæXãUËģá'°h÷Ŧ–å…đë“rP›Ėy…Är*(1¸ČõČę+fÆļŗH¤žIß$—“9>Րū%€E ąAq+K1€ÆĒ$ƒøNOÆÖ<ŊBī6wŪ|pE!‹p į8gõÉöĨi4 ÅlM˙ĩœWë|ˇW‹'œĶadãžĢôĄŧ%§:ÄĸKĨHdķ"A;‡ÛĐTqø›ĪŌãē[7ĩĐĩhĀíbqœ÷ ž&šņ.˜é \ y¤3ĩ‰ ŊE;T¸tá€]ŊqĶ4˜ŨŽqøĶ9ÆXRēî8ā Ŋ+3A[€sŒw÷Ŧ¸ô-/ɒÜYÄ!•ˇI+zžÛ•IUü̐Ū§wko¨Ã, m%ā€Á°–U-ˇ%ŗÖĒ1oaIĨšž4m&$h—OˇÚ͖Rƒ’:UđĄShQŗĀé\˚Ŋę9˰¤ļîį(ØĮ~5$:ŽŖqŽYėŖŗIŪ#ˇīãßŊ>I1sEÉkoųŠŪŨp ž+hclqĸwĒī~+žÔ¯ī—QÔŌ+ԅ`ļ[ˆĶËRsÎAĪnæ*FÔo-éûH¸Ė\FĄGČIÁĀ‘ŪŽG`æFô‘¯Ų˜*ĒoûÜbĢŨBâā,R(ˇ“Ęu؜œQČŦi5+ˆtÉ$]J ”ÍydžûÄöüúUYîÖ;mi­ođRhœHŽ2ŲU§ŽJäuĨĀ`0 ^zSՕ—ž„W(.!‹QÕæmBä: xĐ1a° ;•zj„—-6•:=Ôû"ēō’š"3ŒØõ&Ÿŗs¸IƒJņí`¸”ûëO“vôã=둝î‘/×M–âE6q´{‹į8'ž*¤Ķ¯ŲîdąkÆąk6ķ”—$Kü<“~”•0s;Ļ`~lô<ŠP¸Úzâ¸kUģRĸÆ ˜Ū}4åŠŋúҌdˇFëZž` Ė´‹•Q!ģ€č~´8Yn53EĩÛsŠ œJb/ÆŨĶŽ1Ū­Ûß[Ū,é"Ŗm%î}+‘ōĩ §™ŖĩšˇÖĸv˙JØ:gž„c÷­Ũ%d—G1 IŦ¤ÁR$ą8å¸ëĪz%a);šbî7Æ“#:}äÜ2>ĸŖ‡Qŗ¸ ëu lŽ$×é\Ŋ–›zŗéĪ Å›ˇrJâUÁ99ČëS[XjVÚÄ4øÚÎYM¸Ú_#Ąíž†Ÿ"]C™ö7æ×4ča‰åŧ„,ĮåÆčj8uÃŨŗŨDŅDFBôŒ`pO¯ø×=‘Ģ%Š{Dwļŧyvų‹—FŨĪL S\čúÃjrDąDe–) ūņLd7×rĮk‹š]ŋí›e5ȸRŦ=×ę:Ķ`ÖėnG†æ6ŽˤœlyíXĪŖjˇpę÷G s^BąG~ƒ=I¯5%Į‡nîÚëw‘Ú-#„ā–ç9Æ0Gj9cÜ/.ÆíŽŖiæiCyD+ A=8¤šÕ"ŗ*…&–W–(—s:œzV%ÄZŊ–!‰-áģ2(‰-!ŪŪāc>ŊĒõŪ—u-íĻĨÚAuyr,‹šOQÔwĨƊæbÃâ;{ˆmdŽŋŌ‹Ŧ@ŽTƒčx¨ĪˆR}-.ŌŪã.ėĸ0á´áŗÎOZĖĶ´×Ôlãō/9Ŧ¯Ļl…Ü9fãî Nūš6B×ûVA™å!#`ܐFyäšĻ ™)Ė֓VˇƒLŽø1ΠæbŨę*‘ņ/—eu4–Jö’ŦRWŠĀõéČ?Abē_…FO+jŦ¯āŒd/Lzū5ZŪ5kk­0Klą:‰MÅŖ9-ЖīĀü)(Æ×)ljßø‚]>4Út˅gpYpĒ:ôÉę,ÚŨÁÔ&ŗK6hŌ—ÍŪ!ŗØũ1LÔ<:uTĪž›å…ĸmĒl÷Áč~•%ž‚`ģŠā^ÜX|—Üų˜Î ã‚3Kܰß1F {ėŪˇģ[V1˜÷ŌũŅģÉäŸjŗyŽĪms|ąŲŗ­´))o0 ĘsČíƒQŋ„,šxš{Ŋ‘#F¸įž*ĖŪŽo´ŗ]\ŗOn°7Ė>čīœuëųĶŧī §ęŗÜ^ĪkqÖ5•}Á”’9ôI$’U$—™0zšW‡­Čígiãi ŦĐq‰€ûđM9”¤‚y9éSÉōlf'ŠŠĄY‰Ü^ÃRRAˇœúT,ĨY†îŖ?ZšSÍDŲ—#ž” dc ą?1Éü;SøÎOZ'*F⑎ 8ã×=(¸X‡Ąč6įŽ)8'9ĮãJ{6×Î8ĀĢ+(ĮĪ4Ų2Á>•Ŗž8æ¤lîŽ:l„ãŒ~´Z@˜ķUIn槜œuÅW“v āƒČ  éÁ*ãĻXđŲ"ĘaŨfaú ‚|ļî1šŸÃęn×.ū‚ĩkf)t:[(3×ŊJŲf¨Ķ8äR;mnÃØšDœ–Ž@Ōæˆã ŽZA‹kž@&5?­uĄ˙‰MĀā’Ŋ1ī\ŧ§÷ æĮį[ÄڟĀ0>éķrŨރÂD‹Ėm91v˙|×?Œą=>CĮüē 1û`ČĀōösDžŊŽŨ[aۊzļr㠍Ö)øÅKʞG~+&?$¤iÅ˜žžÔā7gëM§ņ V[Ū†!x^7ŸĪųR… ‚!Øŧ— u' zsšvĐÞ*9ŲÖ1´eĪ ‘HÚ ^Hį4 j)ÜYs×§o­Gæå‹õÅ=ÄĄ†Ō¸ĪŨoņ¤ōw( Æ0€c–a–Æ3Ī=*0Ø.ŖˇÕ12ŧ`Wr×cÅĢ"ĮzĐÅ:Š 1]¤c õnjyŽLŸ)ŋiЉ.o"¸Ų Á(Œ3‘ŸëZQ]Á,ĪŪ“lp>t >Ũęäēmėī}ZŖÃwGîČ#9zsž)¸Ąs;ÛāÜÎ<ö?tdöĪōĒZîĄ-”V¯ērŠä ää~•MÜZÔSÆč‘FĄeer|ā+؁īéVĩkģôĩû;ƞUĘĘÛķÎŪÃ.TĐ6Úb&ši5ĸ\(æCa_ĶŊW“Ävßg ģųâŨŖ †Gô šŦtŧË ēf†ę¤ŒnyĻ Ęaw’û]-Ė’,|ŊāS´y zƒtÖΓ žĪä y‡§Nj õå‚ŪW[9DđJ‘I0\nčsЊKČ×'í2ī–u¸WUŠAĀ8î1Š™ŧ>ˇˇIwy+ÉpčōJRvôtS\‚÷†iŨ$­ŲœÛ4ĀAĀ÷ĄŸ]¸dąōlƒ=Ũŋœ nž3Wî´8ī&ˇŽįY"Ŗ.Œ˜§¨<*Œhļ0IjĸâS%ŧM`ËČR0xĸņĖ6ĮWšîâČ4Qˆo!2GĩŽå#ķŠ5KëĢIÄP4Q“ē´ HĮĘ0G5bÛDąˇ[C¸k\ˆ‰‘ž\õúÕMn{ĢMĐ]ʋģ2Ú6ãˇ§ŋĩ+ĻôĒ%´ęŗ]i°Kq ģ\BŌ6#åXq‚})ŅëS|Ú5Ô2Ãļ\Ɖ÷q¸õ>ÕjÃJ/gšœK-ĖNÆ'› čšĘ‚{šŋ“aöŋ´ (|āå÷…Ũ뚍Á&s–ˇr^jÚ5ô÷°‘*Jĸ4ylG ęzcëVmu9ū——áĨg•&Œƒˇ8$vé[ÆĘĘļpyËŠŧ{Šm-’A,pDvâÁIõÍ'4ú A÷0´Æ2ŪG5ˎ/‡gV܌HÚ;ØŠoui.ŧ/=ū™ŋĖĮ¯Ė¸l7 fļ qeÕ(`wëô¤‚ŌŪÆŨ ļ@‘¯@9ëK™^ö+ĩŽRúxÚÂąšŊ6&ā}Ē\ģģ{gœgÅ-ŦÁuÉûlČļŌÆ&š#žHÚXã€pk¯ā°PØtĮ‚E įŽqr-ŊŖ3V„R]BKg ”˜ÃƒŅ}sÛŠÃK7PŨ5…ÄōØųo ‘•ß7bôõŽÚi⎚d“l“’¨?1īO,¤mWRAõįŸ´aȎ^K'čŗGĻ4f7o8*¯ÉšpIį×Ģ[iš„:3Z&‘ÚRčüíˇ ¤ļzās]ož´†HÄKĖOņ§=ÄjĄ„‰‚p°äŌį}ƒ‘Ļ•¨Įa¤ųš|m-”˛G‘Nå9äĮôĢļēEÕļĢ>ûiĸ{‡¸ŽåŸæPÃîëÛ5ŖĢjka˛‡Dk‰DAÛLä“ų u­ņĩ‰`žžˇy˜¯›Æxã>”Ü›Aʓ2m4]B$Ō÷ÃnÔËæ~ķ¨lã{֏‡´û3G[kĨŒČŽÄll‚ d:ļú¤sˆd¸‰fų s’8ũ*ŧ ĶŽĸYmîŖpîcŠcĐ}x¤ÜšQL͗Dŧ–âúŪAlö—SųÆV$ʝ8F8=ĢGGĩžŗ€ÛŪÍnņ ‰HcîŲã4nZ-ŧ— :Ē,žKnSŲ­ImĒØŨÛ<ūpŲm}ĀŽÆĮžhnMQLįė$h.b!Š[F™áÖcōns¨GįÍZ‹Ã‘ZÆ#ÔSí0Ü<𹇏›;•†y5N:#ÜĢÚÅoö™œ2Į‚ppyĮ\՝FūŪŨ'‘üŲ#;cˆäw#>´Üė‰QVÔË˙„bãʇč—čŨË ‡!ŸļxĨŊđĶŪŨ^Í%ûu ÂȈhSsųūu_K×āĩĐ,&žžF’HˆĖØ<“úU›¯[ApR;{šÂ@ŗ–Ž1€‡ŋ&‹Nāšl6 ¤v‚Õ/îÕ<åœpŧü=y§ÜøZ¨nakë ˇ‰Øŧ0ôã§ōŠ×^3_‹[k9Ļ_)%2‚ `py9íMŌõ['Ō`¸–snÍ´\Ę7đHęO4^ahėm 1Äˁ“ßĩ!#RnĒĘŲR2į"šÛÆÜ“øVfƒ¤%_€HöŽO_Đã‡dÚn˜^áîW1 Ā“ÉĀÍu“ĮvŽPëšĀŅuKÉ͚Ös:¸_tLíŗ5›BĶgŽĻ°ŒĪ.Ö}ܜŽ™íRyzdšæäŠŠGö;>`§ÍejšÎĨĻéČŌÉfge`å†zž˜ū#QęOšyyhŅĮ"iĸR]wd'{⚌‰ēėoËgĻÉ} x­ÍĖ‘åƒ(,Ë͟j–+kdrÉhÁveT=>•ˆÚĖڃym +ibárŧ†'Ą=ÅAŪ§<§Û‘ ö?i_ܯĘÃPsK‘•ĖŽ†;ktâHcH˜å‚¨Á>ôä†(ōË`˙˛ fšÄÕ.YŖVģXÅÆ›į¨xcĻ•:ÚöōI´§’w1Ë1m?9ãŽî=(paĖŽˆ *Aã*$–3)ļ@sŽr‡>‡=* -RÖöúîŌ)OŸn~ueĮ^ãÖ°ĩ[÷†ëZ€]:´vĢ$@0‘ĮãÎ’‹nĀä­tu„äíĮJDPÜÁŽB æTšŒ_ÎÉ&įfÎ×ÎcíRZÜÍ•Ėķ<ēy•UذķF1ô=xö§ėÅÎuĖ6āŽãQŠÆA!ŗ’+ŗ-|!ŽŪîîo:ŌAvŽíōž¯Ũ9ĪĢi’‡Ô4Ö1^KŽwØãįĀõã=y§ėüÜîķV$wįĩ1Üc˜  #$đ+‡´YfˇÕb[ŅŨ’%;|ã9ä÷Î*ÆĢbJXČlQËÃn¤0sÜŠ^´{5{\\ũNãz2˜ S<øƒķ"ũŌrOQëXV×*­g¤5ƒŦRÛ<Ų0ruīÖĒézLą=íŧ/—h Ģ÷Õųũ8<ƒæėtm‚D-ÄmŨĖęāõĸ ģ{ V)Ŗr;\=k O˛ÂĶ[KaöiŽŦ€o!yn?T°ŌĻÔtø§‚5´Í€2‘™Iã°ū´ųVē‡3:SĒéņBĶ5ä#`ŒÁÁÁ=Ö­lļpĪ䤲„WpH<āī\ëéWrhWV°é opūZe§ ŋiëžĀcõ­MnÎķPŌ-á†Ū17˜ŽčŌpģH8Î)ōÆû‹™Ø¸uũ2™-ŪíD¨áp~SčN=ÅWÔ5Í4]˜§rÂÜâdō™•K ãĩJīDŋē‡R(-ÕŽŠ‰lā(ĪÔé´+û‡ÕI’Ũ~Ũ F0IÚTuéîhJX^LŅRĶtûé,ĄHŖ`žl‚$ĀPrØéIuâ;KY&&• ŒJå#kt9ôŦ{ß j3ÜîmÖ+ÄU™š2Y%>ĩ=Ī…'y$ˇĘIjļî˛)c…éČ>ôZĮyv5nuÛ4¸†ÖHŨÄûQžLĒ–č ŦķŽ[%ĻŠ7p%™ew…éŽWĐķŸĨ%/.íå:Ļà ÆV5+šO\Ks ßcQŠ+čÄZÉ/™Isč(J|řŧB–ņųQÛÜ\IK,Ą0Yô'ԟjlž#Ũ4imk-ĘÉoö”u šéĪz­7‡/E– DÁpđŦlŒ0uQŒŒô5jŦ70IËG6ÆŲcØĘyÎ}sÍāũá˛xĻØEnÉ Ķ4҉B"äĒëūëī‹czŠg; 0†GÜŖåaÔ֙†ūÍöcm¨M°Åä–Ø§zõĩ%Į‡ŌâãQvēŸąŦnŖn^˜ãëųŌ÷ß&ŗÔÍÅÜÖŌÛŧ3ĨØ,`ŲÁúβԂ[ Ģ›Q5̄āLg$/=¸â´`ŌžÍ¨=į›,Žņ$L¯ˇ/CĀëū5‹­XGĻZZÆŗÜm—QYĮ, <‘ĀiĮ•ģ Ū×5æÔËÅneąÅęÄęΐ‡ŗ uëRĮŠ\ΤĪo“kŊŪs!N 9ô{iāˆI,˙ģ—ÎŪ$ÁfÉŠFj ŧEķJ^ŌæSÉ=qéøTŪ6Ę0jƒZˇ†‹ė‚ĐLG;°OAëŠ[OIv,&ũĘÃ3˃˜wöéWƉjfˇ” w[ĮåŽ$#+Ø7¨¨ĸđΙūjZĸbC08ę9âā•Č4mj{ũN{yš%Ļí›pzõ$0Ål‘ģÔ×<œįŊ,ŠŲ]˜ö4§Ž‚€!•rNTūėLŒÕ–9āņŪĢJ8>”Ÿ;`~ĩ7†ōRõN?ãã˙eZŽpĨIÅ?ÃxŨ|?é°˙ĐEZŲ“#Ą@ ¯5í¤3HĨā߁€j °Įn”ōO¨üé ×<ãQŋ‘Ŧßv6‘ŒVe¯Ųį8*D+øķRÜÜÛÜBҤR.{ŗƒúbŖš%­åéÄųšęqåhē2ŧYH$įøOūƒ]„‡úR˙×ņķ\Đ'v{ė ÷ū]'„úZūA˙ĐÍDūGąÜĸG<ûÔ¸Oĩ1cˇ9=éûpqŽ_zĀĖ@08īۜÔ}=hB Ũ8§nĘāäĐ!mēķJĮŒāúR†V*zoĖé^ãĩ!‹Á\M) ĢĀÎ)€c%Īô§’vƒ‘Í8 ķ€=BfË;g­K†Ī^ƒŒĢŒ{÷ d'k§<ņM>ÁĨLņ¨#ļr=Ûx™g:mÜpīxÚG%ˇgėŒĶQš-Øč.g‰S>jĮh%‡&Ÿku R˜ŪhðC0įč+•L˙‰UŠ6RŅ\eø<ŒœČŠŽŦnËß@ļŠâ띗1aû=øę1UȗQs6h_ęWČ/|ģ€Ÿfš‰C*`˛6܃ųõ­Iĩ+[vŧ3\.Ü+:…? =9īžĩBįNŊ¸]B8R"ŗ˜Z7gĀ%qœņíR^éww'Peh”]@¨‹“ō¸ĪˇNižV-K-ŽŲƒÃ; JÆÜǜqëTß_ĩdˇ1Gq1ž/65Hķ•Č֙{eĒO=ĘXįX^Q‹2áąČ㞕ZĶFÔ-šĻæÛ6q˛#?:œwĪ^(J6r5Våf욞+ĸĢ–*BœúZĢĒĖEödی77™‘ÁI åRIoqũŋņ<ĸßÉ+*–ų ĪŊy§_YĪ}%ŦŠp"û4ģĀŲģwõ÷4+\Ú+Z_ÚØÚC4pG¸yˆšQˇ¨ĪįT…Ųŧ×´›ĩĩ1C,R„rÃs 2;zū5§kŖ5ĩĶē^KöFfŗ1–ę3×9Å3ū¸PÚlēē+jÛĸS ųAÛĶ8§xĻ“Cn5{Ģ{̍a´Gû5ēÜ1y6ī^rž)[–$ē’klˇHōYNx9î*ėēŧ÷SO$Ķ“4^K(pßN•4:%’L¯åģ˛Â ųܑŗĶ¯ÚE?ĩßÅąqë‹s4¨$)ČaŸqÍ'‡oo¯Ļ¸7SÂ<ŸŨ41âşCÚŽÚčv6bU‰e(YäbUđ‚OéS[iļ6ˇ+<0"HFwP8.JÖ@“ŊĖ-{RÕl5e<ģ´Ûję™"\Žļ3SMŠ_PØĮwgŲ㍋MÁ“?xú}kĄ’Ú ƒÍą‰ÃÆOđˇ­Užˇ°B—WQB^ų$‘A įŒP¤ļ°Ü^÷9įģššĪ]+¨Čfļy ‚Ļ}Fiˇ7ĨílŖZ1ZË–ŧl6_—#=kĸ˛k[ˆäž}›˜Ģ†‹a$uČ"­tUˆ“Ë€`Sį°š|ÎBūGkDĨåĶ´vQËÆa—į ĪĘqīR$žoˆKųķ‰ĨŗI-Ņ‹/†ÎGN8ë]~ §ŠŅ’zã¸æ—´'S™đŪÆ•ž[‹ų.ŧąį-ˆāķ‚{õéÚŠÁg#hēœv–rÅwį6Æu*^2ųĀcĪ#?v'k2ŽŧdTbVk—ŒÄȨ ‘‡ú}(įÔ9BãL–ōßT6v2Ám%ǁ ĻŨōƒžÛ×Ŋ3Tąšē°‚ ?D’1nų‚ƒ Î>ĩÚ4§h ŊũiۆŌI‡Ŋ5Qö"î`jąOymĻČē{I$s¤ŽŒWä\sžqU/ô{̆ÔmÚÍ&KĻV†f`<’÷ã¯ĶųĢ‚¯ŪÁéIöˆŠHD‰ĩFX‚>_­J›E8ĻeYØŨÛëŗ;BÖXÛÆK(98üqTcŌuXü8–­ qkp˛DCņ"Ģgž88­ÔÕŦž Íyn7|Ą„ŖĮ­X–ę+Íw *oŸ4ģ •äšFĻöˇá…ˇ™quÄ1ā ¤ƒĮû5bm'R3jRÁ5´MrŅ´|ˇnĪëb{Ë[]ßh¸Ž0FFãÛü)“ę–6˛(žé÷~g¯ÉœgŽÔsK rÄÎĶ4ģũ?ΊY-žfpȇy$įžÕ5Ū•qsŠÁ{m,qJ‘dMÁ”r0FEYū×°s.Û´c~kāģëīøSm5‹KšcXĻ$ų~h܅C:dsJōŊĮhÚÆU¯‡¯­,­WPũĸÜ:nxw)F9Æ3ÔõZæŌ[¯Keö˙+}‚¤ĨPnq¸äC]ž¯e{+GŌHû7…ŨÎ3T`Ôt‹E|Ą _+æ,cvā9õÅRrÖäŲt$ļĐūͨ=ŨŊĶ$^Hˇí^œûhĶŧ?kge­ÂĨÚŖ1Fž%%A9Įįš,ĩČ^ VQs'ÚĨ‘r¨ ŽIō8¨›Äö‚Ō ūËpÍ,¯Į…Ü {ãĩ/}Ũ7†T Ē0ôĻŦĞJHå/N.õk ĨæÁÉīŸJ‚„1˙wŠÅO iъđą[–ß*™sž0xæļXŲā(üķX‰ŽOũšŗ[¨ˇ›xSœ¸Ú:8Áüę•ú+u&ŸÃzeÂĀ&ļY<”1 v'å=ŗRÂ?§+įė¨G“äãžWĶéT!Ö/otÉĩ8RŪ;UŠGYŽėŽqģōŠbÖîM뤋‹ė"é0Jōx “Āí.âŧ{cŅtČŅ™,âĪ–cÎŪvz}*EŌŦŒũ’‘<ĩ; éôŦ6×oeŌnŪ -ÄĐÜŐ!(Ęû{ĪŪëZ—WķØYÂō´rO,Ģā6 $õÆzPã!Ū"×tYŲšˆ)ũYî:{Ô˛ĮcbS HTÔĒ ōpüOJŠîëNmUá’Wž7Ÿ•T2Ž ëŒS¯åšÎ”ˇW3}ŧ)ōú2}E>Wqs#WN´ˇK‹ËäĻmŽeBĨ@č c §Z^Z^ŦĪeŠHb˛`äc5”5Ģ€†).qÔØĖ@tĪæ¨ÁzöpŨGÚ“R)$íŒ(*NzQČØsXė5EÆŅĮJjKJęŋz6Ã`p ss]\Ŋ2 5¯’q*ŧPÄ—¨<ö§IĒŋ´’mIđˇi+ Œ(=94šs#FEHīõ§1'* u8M`é’ęžw7,.‚ÉČ8eaœ~8ÅféSÉ%ĩŧŅß\KXšģÜĖBžŌcœôĨÉŋųö:ÛfŨl"x˛šØÃ}+’¤œg?Ã\ ũÕ÷ö1_ŊÂĀŽeMā)æČ%žŧW[oĒĨÆ ļmo:9€L"ãpã?B3NPkT(Í= ÁmūĐŌ„A1YĀųˆô§HC2ā3Ī¸Ëˆ}õÅŊË]. ­,oœdũ8j’ú‹†žėŽZõĨ i:Ą;Wô\`äSä]ßČé/‹Imä¸ōŧÅ*ĖŦ§i–éVQŲ$ÎęÉæ°'ƒÚšVÆéfÔāM:YÚåb’9 ģĮ“Đ՛øī[Uˇ–=&VÉ™ˆĮ dņŒöŖ—K\NZŪĮG5õ¤ [ˆ‘ģ+8ō¨įÔ,ĸ`^æ7ųmķĶëí\ž§m-Ŋō]ØîĩŦÉwōAqÁį#Šŗ¨iڊMŠGob$Iå†häŪ dc#žüP ģ‡3:!¨[­ÂÛ<đŦ­÷vĨ:īQ˛° ×7IîŠįūÍŽ•¨˙ÂAö—ą‚H¤‘fķOš3€:wÆ hŨØ^ޝöÛx#¸Imü—Ø)^sœúRqrš™z]gNãGC:@šmËëĮjŽįÄe…œ7or S|ɰd°õãšĮK Ŋ*÷Fĩˇō$ŸėōÆL™ :Ķž˙Ĩ9ŧ7ui “Z k‰aWFŽá~FÜw:āƒO–ÅÍ#`köfę;hüŲ]Ņ\Œ• Ũ >”ë]{Nŋģkh&KŨ÷HÎ2qU Ķ/cÖžÚM°„Û, Š Žr;uũ*Ļ›Ąj–ēÄwŗ^A"ėhåųJį Ã˙­JŅļãŧŽm_ęPØ,rK“$Œ8Ņw3Ÿ@*ŦēėQˆÄV÷ÎčĪäÅ^¤‚F9¤×4›‹ķi=œë ÍŦždlëšO ĨUēŅ5æ†úÛPH¯R6†W1eYIĪļ;RJ=AštÄmėå”\n õ'ü⥡đņĩm0ExWėLų |Æn§¯jeĐ^´H¯XI˛9o,ÁĪ#?sĄ>đq!Šyŧ›—"ė[•l|¤ā?Ųä~u#ëĸ8gií¤W‚uŠDʒ7c ôäUsáįōî—ûBDIŽĮR1Āü‡åRMĄÁ:_færnŲ_rōÆ1Į°ëG¸?x[jŖÍģ´p‘ÁĪ›¸qÎ›¤ę3EáĮvĩ™eļSōLv–gŠôéŸjjhķEw×73 žc9k/B0=*ėZ2Į§Oi5ÕÔūxÚÎÄeF1Į7XĘÖ~")&žÜ"Ëj×*Dģ¸ã§ŊYƒ[œ\ØCuoÅ~¤ŖŦ™Úq¤cĶŊúŦ?g\ˆ!0Fō žšãéųRéž´ĶîE{‰ŧ°DK3îE¤ųCŪ4ėæ´s"[ːrÛz’Np:횊ŌÖc1ŽŪ8‹’¨īĘĻg ‘“øT2‘á@ĮZˆŠËgžĩ1Î:ûÔ Ü•Ā?ėš1†w=O­38cČÚCM;‚įnNqKœ¸g<zc ™ æĄwØFyėqOķWq9éô¨đb¤ցšįå=:Š27c'Ķĩ9ז cŪĸČõ銮ĀJõ'œÔR§5fDÆŠČBœ{P;€}:ŅáÉ/š˙–Ģ˙ Štũ¸ĒÚeÜVo–`vyˆŅ“’*㎂‘ÕŠæ—ŠÄģÖበVt ķˇNGoĄ5!Ölcâîōܒ@ÆÜ?)ō˛9•ėy¨8į<ŸZŗ>Ņm(ã›qüÍU#å"­N Æ˙/[|ūĻēęîƒ đ˛<˙pœ~ē.oÁ##ūû5„p'9íôއÂ~Üņ˜9ĮņšÆ Ōևtą¨9É})Ywē¸fiy‚2¯†į†=ÅJ¤ )’9Å`dÅpXØČô4lĀ\ų"—ŽĀŪ…'w̓ô\9SŒ“ĐŌīQœķøRb1ę3Ÿj0‚wdü¸ŠápGšÅ&Xwīšqã'‘Í '=8éM‚Y™x=éą.Ä7'ˇŌœč…ƒ6úôà Ál„ÁĮ\’iī~éįŊqW)æÜëSīDž# ũˆo¯z¨Į˜R•Žžâā*—PŽ€*ąģˇÜęfŒ˛Ÿ›æVÅ´§—ž'‰BbØĪĐÔˇ/)ÕĐiûež=ŅJT ÃhsØäSäBįgAmŠAs™€nbX|ŖßŌŦ-ė7—…āN2§ĄôŽV¯Ļž˙5šąĒHË÷†xũkBęöōÉ4¸0—˜„–0IaĐ1Øw͈\īŠyuKYdšîĨŒe”•Ļ­o{3‹ąUÉb„3ÔÔV<:FĒ÷Ėķ‹T…ã’ŨœmBrëZz-ŽĨo ÅzöÍQėC98āM¨Ĩ “m•-/Ąx×TškæYUcBÄ`1´uĀbßÄļr[\\"\y0`ŗų|0< Tiĸj&ÉmMō 3<­ąNX“´ķ‘ÉõĻÜé—Ŋˇšõ%‰-™c0¸ĮByäôĻųX{ÅÕ×­Đ]Vd0*ąĶ Aāc×&¤‡T–7%Ŧņ˜Ã)GYŽ;ëQ&’/mK‹$ˇ"™c]ģ@ämëÎyĢ֖Ei4RßÉ<˙- *íãj_(×7S>Û[i!Ķĸ˛´2=Åšuß7ŨĀ×<Õë éot“y'{!e›¸íŸŽj¤Z­ē[,Wwyĩ3ĩēöö­M2Â-6Ā[ÄΰFö,y4IĮ G›Š‡ģ>Ĩa{$vđ2Emž@ĖOī9Ę bĘūö}N;xÖŲmVÖ)Ørwd`~UŖ“eŊÜ ¤Gu#<Š$ ã*Ŋ–™ĨMäĪ #Ŋ ō7,¤€GđžyÆ{ŅxôAgՐiúÜŗę0ÎöŪJB%WˆĢÉdđqŽĸrOĩ "x¤FˇûlLpr„˛žĶmkKXR]Œ¨ØŨŨxĪ"Ÿ‡c …Ŋ¤ĐŦŅĀrĻAüYÎZ9ĸĐZMY™ļڝôúÄŲ촊Ũ&xūÎĮ÷˜nūŋJĢey˜fÕŲí%Y6Ē ŦãÚˇ-uœZ é?‡Ė#ŸJ¸ē}˛( (;pƒđŖ™v+îrKĒLđh­>Ĩ,Q\ Ri#`ģ˜dŸÃõĄī/’ÆĘ;íBKXĨIŌJ’I ōgÁĮ>õĢĢŲ^I}§Om;-Ã1PAāWlĩK=NÔŧY‘ĸr=¤20ėA§ÍĨŌ'—[\ÆĩÛ'ŠÔO-ԙĩ‰ábYUœg$Ā㜃RšãÄ*ĢrL–Šŗ Ø.3ŸÄtޟOŋ‹Rˇkˆc‘P;'ī āū´ëģč­#Sĩ‚"'VoAIÉķl>UcH‰­õŦGé ļˆY™ig9ĪCŒUmVŅn5‹ä6ŗÍēà Á `'>ŧŽ•ˇĻë ĒDmχ.ËķySƒ’:Uá,fM€Ã’23IÉĻ )Ŗ’M6å‘â˛ĩšŨî4Ō’HˁæįšõëĪŊZ‚Ękš Š§Ij‹dđÉíũëmÆ9äú×JYcĮ#Ņ,m'P =i9ļ>TrãL4Í$˙en{iI ’9Į\ē4ŲĶZ–i4Õ¸Šic‘fiBų8rŊČĮõŽ€ž¤TõmBM;Kžņ ų—*[nE>fôTŒûũ>ō=RâęÚŽ"¸€Bęōm(A<ô9=)h×ÖæÔ'“$PØ5ą.ÄĮã8ŠŽu{ĢX­î'‚3k1E2FĮ1–é‘Ütæ¤Ôõ´ąąģœI´L#UíŒøœũ(ŧĄŌ/cK@âÜ´6MnÃ' Ä >_֛oĄŪ'ö›4aļ0Jļ@đĄĮŲ.Š\ßų­!]ˆĘÂ{qØûՔÔm$Ŋû2\FĶōBÉĮZ\ŌHËŅ´ûûŒW javFaL;Ũŋ MŌnėîO‘{ąŪî¨bųōsÁo@I­ĢģĢ{ y'¸•b‰>ķ1ÅeéÉkĘLķG3˛'•bYFHĀīM9>d´!_\Įgmz‰Y­î^uBųŗ‘Œ˙´j<+<š_öwöîÚWv&$n9ãĐõįŪ¯Kâ{{†Gķ¸(­ļ"v3}Õ8īĪJ–oXÚ´†S&ČØ,˛%c'ĻOnŖķ§y‹Ũ4 €[ÁA™„H1<œ dûĶ€,3úŅŧK2C ‚9SVEĮRĩ™ §níĨĩb¯†ŦRũîQŽD‚S2•˜…ÜzņZĶ9Tg8\W6ū#œGy7šļēHDœØį§^zUEKĄ2ˇSBßÃm´˛K šV˜0$Ũxč)ađæ›nŒĸÜļøL,^FlĄíÉĒ÷ZėđĨäÖÖé-Ŋ“bpd!úvņØĩŠęoi§ĨÜ=ŽĄˇĖÛUF3“ūŸŋÜ^čĢáŊ"¤,—dĒEÜH`:wŠŪÆĐÚĨŖED8ˇ"ąãÖīŽbԌ1Âŋm…ß,IÚĀgJ[}NKļŌĻ’ÔÜ4ˆĮ’UÔģõÚhq—PN= „Ōė’ĸû<[%˙XĨx| ÔCH°H’/ąAąøÔ !O¨÷ŦÕÖ/H´gKm“Ī%šŦģ°}ūīJŽfęįėp1†+Š'–"ûI_öęqG,‚ņ6>ÃhÛãkHBĘۜyc GsO]:ČA"›hU$ûč|ßZÍŌĩ27K÷Š)Ŗšk`ŕ‡LfĸÕ.īNˇ•ŊęÛÄöī!ũÚŗ¤z˙ž ŽöekšëemEŧ@F>LF0ŋOJœÁČF7Ÿr}k™‡Z¸ŧ‹NSr–íqnŌ´ĄÜËÆxÍ%Ļšu:i’\Ü$+pf‰Ų@ åAÚĀž(ä`ĻŽ’h|ÛIbI´…ū’:œU]Ö]?F†ÎėEē šāß‘Åsö:äōŲiKq}˛+—•n.A†Rv‚qšĐ͝'ģĐ¯EäûĸG–$šĐĶņöĄÅĨa)&îhŲęR߸d´eĩx÷G9|ŨēvĪZŗ­ŧW2ÜŦCí i:’=>•ÆZš‡ÃšbĮ¨ÍŦĘÂYķŸ-ĀW#îŠĩ”Ū!˛ŽkëŠQíĢŗ27ęë֛†ö.į_Ãå žšĻ‚Č!GõÅ%Ë-흚7"h5)‡ĪÆOLtĻLׯpˋĨÕâģʰ QĄŨŒgĻ1Gŗķs¸.™ pI88=)ĖxSÁÁ5ĮEjæãZkXĨûzÉ!˜0etž:æ¯xr(‘%–8õĸ‰Č!Ctāw>ôœ,Ž5!Ū*ŧĶā´ŽFYÄ37 ˆį“Ûĩ^ĩÔŦĖv5Î%–5dŠSûÃĮzÄņ%ŧķj,ļ3Ū鯀r$ĪSéĮzŸE‡T˛ŋ {a$å”*]3¯îĶÚ}ÁôëNˑwĖt-<ē,“"8PĮĩWmNĐjÔ]Ädä÷ Áē˙*Áņ›Š^^gdŦǍūpa¸ílí<~=ļvúލígä­Ę.ã*J°\ëÉ4”U¯qķ;Ø.¤ŗÔÚæ;aŒĻD¸G%äęÆ8ëÍ6ŖÜIžÆÄŪ8fŠį Kģ) 0qÉ>õfÛPˇŧI$ļ•d û)ÆĄÍb6‘.‹ud˙fFyLą’§/ģk tíZZL3ÃnâęŪÖŨŲōąÛ ŒcŠ8äÔÉ+hR“6ģeҎ’pŦ¯´ļÕ1‚šëߑWW]ˇLŠčŧî3ÅķíS‚H1U-tNĢ dŋˇakÅÄDR;õāS'đŨėú\ÚJ?0;~ö㞙횧Éܔä_—^‹ûE,D7 īHŠ”Æ}{S`ņ7WžEŧÅ.K*I€+œįŸcNˇĶŽíώ”ÜÂá!J {œåyãõĒPh6zŠJ—Å`ˇg’8Ä=œäŠ9÷ĨîŽō4´ŊRMEŧÃg$1‚Ws‘Œ‚AÚĩŒ›AbsŽ1Xš~—=ĨÜ1Ū9yYš7dBI'­jF­´‡9e편īQ$¯ĄQŋRž¯i&ŖĻ:C<ĐɡrØŠŨ؃Kš-VK[Ŧ8{x>dg#į<`ŽøÁëZaIPÛ[ 䊃N°‚ÄNbFâc+‚z’;Q}, kqš.Ĩ{ŠDĶ\YĮD˛Ģ,ģ‰ ãĻ+D¸,Ęã¨"ŗôÍ&-1îŒSO˛g,#wĘĄ''ˇZŅ0ÉŠJ×Đ#{jDÎYI81T呖s gƒŽ•t¤lĮå5^UŒļŨŧũîh(„ŗl-ØG­Wi3 ų°‡īVĘĻÂ6õ<ŒTË!eûŋ0ī@29c dõ>ôđĮ›Į~Ôî:‘Č>ņb=Ė x<ū†Á\žjÆcĶDėš „ČāzÕ9J˛“Ü*ã ųsUeUvãäP[ “Ú¨Úo/téKåÍ”Q’FūŋĨ^xãQčˇÚÜŪÉ4T´j3ܜāUĀ™ėgĮ ŪŨЉm…ŗci‘Ÿ 1ŸΓPđŽ­u*ÉÖÉ÷˛ žėNz{ÖŦž ĩYíĨ_=ĄũéĘŽ7šäw'ņĒē”úyŋ•ī.o bT ŠBŋ.ĐFGԟÎļRŸCŖÔâKVf˙Tã?ōĮĻ}ę™ųzsW&ŨąÉ<Héī[UŨa~ 82äq”ū‚ē?o×#?čį¯ûæšÂA‘Hūā^tÉÔFį‰Û˙}šÆ{/cŊAĪËĮ৘ČČÉĪ|R(ų@ĪĪJ[i'¯o­s˜Î;ĐšpHã&›ķ0;qĶ׊r‚Xž›};ĶێrséJH J]ĄˆõūT„*(Î}éÎzöĨH0ã‘Æ1Lßķt%}}(feĀÆîO pPĀĮ|ÖœHĪ#§ŠëQĄ2ž22)B!õ#Ší@îŨ=+7TÔZÂ;wXD‹%ÂDØlŨŪ´FæČĮL× qŗ{ ×ÚĶPVá]”&î6öÅT"›Ô‰ļ–‡aæ+†Įõ˛Ž…ūš"šÄļsŽŧŗÅ|n„Ėap?wå㌟OoZ­ösuĸO i˛­ø„‰$uûėx=ũjŊš;:¸. HĨ•åYĖI(÷ô§ëVg[ˆLG€û†>™Ž^ÚÚ[ˇÔ¤ūĖâĀRU°<÷ëõŠī­îSÂrI{yé*¸/?8ÆėqŸZ|‹¸š™ŊũĢÁ%Āš‰Ą Á†ņ¨$ÖŦc$JRBÛv)|ãŽ1Y2čW71^L Š9&š)–ÛĘvuŽįü*ęéמeŒņZZÚų34sЌu¯&ŽX÷ ȑ5ËxRęY.$eŠUŒ „‚„ŽŠõÍ?YģŽMĨHĨÔã™>ņÎ1ƒßÚĢÜhˇķ΍âxíR$‘pNŌ„c?P*ũí…õ흙­í´ĸ@Û–Į:ã—ģtÃŪą—ĨëS˙fÛmQ¤yŪ?& njãpĪõŋ> –†8„/-ÄĘâ\dÔķÆ+.ŪĮyöčoãŠō\‹†åH=0 íŽĻ´oôŲ.eļ¸†áĄšļČY6†#đIÅąĮšÅ_øH`•`6ļŌËu32ĘT¯ŪÉ< RŨxˆÁwŖ[bWŲŊ^@ģ į 9<ʓū´h"){füu5Ŋ&“§Ī|—“Û#ÜĻv$•ĮLRŽ—§ÃŊc´€ _Ėq°rÃŊW2ĩ…ĘîVđūĸu-Ūwš9'Æ%#7ž:b°-mĨ‘.ĩm.D{¸.ĨˇG¸œC]|Vđ[!X⍒Ä*€j:u„ą[G04ėBĒ&Ũä ö””ŦŨÅŲ\åãžáü)Š\Eä\É4†Ú^?0–SøTŽfˇAkÉÜĘ÷ Icģnäl|d ÛÕ´įÔ­–Ö’@gr]3’ĻMXģŧļĶíi#, Ē*¨’Hų…Ęqļī$z$“\-š_ȗ,ŠK„ÜÄÆqŌ­‹{Yn´å+y=§ŲĨ eVÉÉwcņÆkŽĀd.§œgބͪlŒg įŠAōe´w ē$סOū-ŧËå–?ėîÔĶ,ėīKԊŲ\5Ė#ĘxgŒíeߒIū5Üqœ¨ÁĪaOvĪb(ö‚äķ*ÛÉ,ŗŨĮ$ hā#–Ȑ`dÛŌĒød“Bŧˇ†&’xŒj‰×$`VƒŠYrhęE9˛ËĀÎZÎúÜģic™û&ŖĒiöZlöMiŦfæIdíÁ€{‘ÖŖÔ4MJtÕŌ(#au,- 2 dŸĘēdsėÛēsũ)ęÛÆF;âĢŪäōŖ MZ Ráü‹citÉ#ģČwÆB€Ws͊‡CĶ/Ŧ¯BĪgfąEŧ Ĩ$É '#ŽŨyŽˆČ‚3–P,I}}*?ĩĀ%ōüØÉČ\nMĖ|¨ÍņŽÚŒĮ ĸÉĢ* FQŠö>ƨ 'Rû>œŌ-”r[ÎŌ:D„)ī‚y­ų/mĸ•–IĄO-78g(õ4‰wopÄE,nP áXĶ4)I qMœ\ķumBō8`žŪŖic3”"@?ēFôÅiĪáÛËŖqqĨķy“G$:“Œāū…X—ûĖ:„ö—Q‘pØ įđ§čÚä[\Ës ĮĖĸN ũNqíWwkĸ,ļfÔq%ŧI GåD ŖĐJcĪ8Éū”Č\Or+Ģ̌†S}ķNu_1YúŽpJČÔ~P¤ûũ+_ [\Ũ]L×7!.]]ŖI07Áéí[ōą'>ÕÎÜxškyī‘4öu˛Uw>`SÜéUo˛L­Ôĩ7†ėîne™Œëæ€%T…—ŪęmOGŗÕíâˇŧŒ˜ã`TWųUiuéâ†äĩÁĖ#ƒšy{tĒZÆ­5΃y%ŧēܑ‰#“īÆėĮŌĐ›™ĨoĄéļŅÛ´!öÛ3șˆ\õjdŅl!ˆâ#Čc$C{pOSÖ°-¤}=ĩø °‹ėŸ0Ą“ūėqŒw§§ws:ÛZÛCē’Iwš œĀ=‡z$ŸpMÃĸéĢo­ŋܔʠŗ¯Üõ§.‹§=ģBm—i“Í=sģÔÆŗÛ[–-ŌĸUKÁjü“¸qČ÷æ­iúÄúŧöŗĒC´ą°!Šį†ĄôĄŠē>ëEĩšļ†ÛũMŧR‰J ûÄsŒõķVŪĘÖâušKxžTá]”ƒ˙ëŦ›-KTŊĖĀ–MŊP–ųß۞• ļĢŠ˙bÃ4–˙žuBV#ļ’ yũ(å–× ŽÆÔše„ą$Ų@Ņ!ČO,`š[+YR8ŪÚHŽQ éé\ôZĻŖöO6y" 5Øˇ†Q\ãyį=ĢGLēŊ{Ëû;™GˇÚV`¸Ü‚œZę ĢėKƛ$ë`–Ûĸ,Ø"ÅšzŒãŠn.-­n­,eŒâãrÆåx ×9¤ßJļMšÜˆÁœÉ>ŪV'ņ“œūųodŅæģtĨü‘‰GĀR­W&ĸįĐëö" EQŗŽâ‚ŠœŒįŪĢXjVē”rĩŦ›üĻ1¸#ėk•´ŋ’?ŗ\˙iË!ūŅ{vC&TÆIĮ—5*-”ä‘Ų´c;ŠŠiRŧįÖ¸ĮԄSÛB÷× ė=ĄŨ.71ËJ]Ā|Žëž˜ĪZä/æ˜ëļķE§Ū2Į4r<›XŦŧ€:Ī"Ģ=–å™ÛM¸g]Oz“dÄzãÛ­/gæghĖ­~R:ĄŦI|P`‚N“yļyqįh.O ÎJ‡íZŌįR„[K ģ\yåvŽŌOÄV|—’Īânn­o<›3˛ŲŲÛsw~˜ö(̃“ąĶÜŨ[[EžæXâSÁ.Ā~É/­RÄ\˜–#ŒKŧmü `jVˇˇķéÚ‘ĶÄ!d˛f—wCÎjąđöĄ­ĢÅ Ėŗ faˆÃ}ßcˇŽ(QVOąĄ¤ęŌOejķŪ@ķKrņ‚Ãũ`V?wņŠ×MJÂK×ļŽdk…˛ŧW/™ĒĮŽë8TŨ›ŪpÆÂOOÎŦ&Ŧ6¯įĘļËīŖ7ÆÄ~„(xįžôÜbú‰6lļŋ¤°Ÿũ2=°ŒÉ€pqžœķÅ6]VÂ9'y& önf,Ú§8úŽ+"=+WMĨN–q"[’DrKF ãĮ>ô¯¤j7KŠŧŸgVē´Ž(Ô98`Š#§9ĨËãæ‘Š/ˆô˜÷ošÁ@ŒN=zt÷­“ĖU1Ęãp`zƒXKĨjO>öÜé˙eo™ž÷¨ãĨ-Ēj–š•…™q5˛Z„„xT pCw'Ō‡Đ|ĪŠnNq|$¸ [+ĻМv=ķPéwsŽjj<ņŠ'T˜‚wd€~ƒōĻŪh7w‹›˜Ņ.|ŋ/ IVC‘ŸQRØi—đę“Ũ]ŨC(’4BąÄT¤ãŋŊí…­ÉŖÖ,›Tû"ši9S´dd ‘X÷÷?m͝‚ÜI%ĶÎ$@Ü`*␭[M*ûOÕfō¯#k$iDmYKuôÍGoáŠáŽŲF¨ÛíĻyˆFH~Ŗ“ī֚åB|ĖŊ.Ģäjo—9e´3mØ@=Ŋé,5Øîæ€Ko5ēMŸ’*Tc<ƒĮ^ô\čæãR{īĩēƒnÖ抠ā§žų¨­<9åIddŋ’h­ah|ˇvē ņė?*^í‡ī\؊îŪņXÁsʧæōÜ6?*zŒD¸ €pj;[/Ųm!…\åŧ´ “īVōrfír‘ãæ.AȝC1>vŨĮNxФ¸u•"šĘ–2q´cą÷ĒķJC!;WwŠÍ"HÜ,p9534Ap߇j¸ÚXŒJ…JÉPAãۘŲũâp9âĨWp=9§0UāÄōiôČëœPA-Pp@ëē§.6ŒąÎqšc(9ÅWs”#øŗUĻäqÅO)ũā`ØzT“ց”' jЧŲĩã]Ǝ¨wÄĕĪuZ›•'9íPY_ 9o§ōü `.qœ’+H_Ąĩĩ, Á Žn/” ‰0 Ę“ųU™ŧ=cy!–vy\ãæ/číôŦ­KÄRĩ­Ė[GhđĨ˜œ’Øô˙&ˇt‰#šČ:ų^a'x¸'ĨSįZŗ?vö<¨pjõŪD`ķķD{{ÕN?:ˇ;4‰ƒœyG˜ŽšģŖL'Ã"!¸JŖļŅŌˇŧIÔœ~éˆ˙žĢ>w9ÎÕãō­īäjG_)ē˙ŊXĪftŊ@*Ž o^• @õ‰Ļ Ũלv&œø,Ŗ}=ëœÅŠ>éųÂ✄2­Č=hNQ‰^”Ŗ) Žy  ŒŽn~O˜ŠŠpq“žiA;œĮƒNVĀķp 0¨@ A=š4å_Ũ 9ũ)æAŋę3Ō‘ąÄr1H 1Ɓēũhsv¨ãšpĪ@7˙_zfžœšmÐ{Pîa”sÔgŊQšŋ1jpZ4gdĘq.îáĮĶ5}™ˆtíÖ¸;­Fâ/R÷ˊãpJ• €uīUķ2'.S¨Ôī×O°{É3ąŨÉč?:ÎĶīnīmĖ—–FЖÄj͒}ũ¨ņB$š  ‡8d('$0ė?ÅÔCĪ5đ’+‡gTk@Øvô9õ̌SˆĨ'sbÎõÎŗqjáDq"˛°ÎNėõüĒũí„ZœZI+ˆË|ĻņÍsCyö‹„XäķdŗUߌã$Œū5ąá˜#Š Ú+)핆i›ī×úĐÕĩBMŊĢöļ1¤s].ā9i˜ÃĻM:=BĘk‰!†ę'‘æPāā{Ö]í‹IâdKšhņ쀏É<Ī5ŸeĄßląGą[qöI-į‘YwdƒĮ^Ÿ­ĢvÙ­– NĘęA71ģ¯%AįŖÖŗ—Tx’­ī BĐČ]ʂÁĪâ{ÔPi÷ jo#ŽÜŲĀņ‰"|™2ģAĮaßëOŗŌuHä͌ąÚyVŅ<,Čį%H8#¯Z+¨^LšëĖm§ŪMg7™4—iÁĮ^j…ô–ˇ÷pI%ėč`Ž`ÄØHlœūXĢúŖoa}g$ö­Ą+̓Æ[ņR[h—‘\GqöÔm– WË$63´ŽxëGēŽƒŪcáņ Pi֒ŧw2$ǧyQ Ā'ß>”ëĪ‹[̍VĘyąA#‚ēO=jŧžėímRayxXƒØ$āÕŠŧ?$æõäŋpˇŠˆÛc¸æ—¸?xŸLÔęōîÚkwˇšÜ(*\6C ƒÅi” C`ÖuŽ•ökųīZæY¤–%•°íųÍ7@Ķ'Ōė$IäßæH\FŽXFđ‚y5-.…&ú‘\kwÚõŊ‰ˇ„A#ų{ŧĖžvį8ė8Å^Ą}:NŸf[&‘ã1ķæ ¤ŒįĻI1ROáí:[×Ŋ—ÎY^E••€Ü8ōĸ-N‹Rûr@RBKc-´1ę@éŸzw…i\ŸWÔ›ĨÍtŅ´žZ”62ON{V-÷‰äŌ^;o°™Y-R|ėāž0Iū}ë ŋ°´Õ- ŊŌų–¨$AĪj¯sĸi×ī5°1‘Ÿ,pÛFā=)EÅn‚JOby/’ēšGžAœãŽ~ĩÉÁŽ5æŽf˜ĀŠij÷Åģ•$t'šĮ§L×e,ĪnbhÕŖe*TŽôĒ‘išd+š,ā'–B ûž˜ôĸ2Jú ĻÎ~ë]ģƒIĶŲ-ã¸ŧC#9ČDįž;œ‘Sx–ņíĨŌmå‘D쌭ĖĢ€îw7Ō=­´<11‹˜Ë(Ę}=)Zd++F¯"“ą™rW=~”ųÕö‹ļį'&ĢŠÛęV:g˜}ąÉ(įĖ,~o ÆĨąÕ/î5DÍoŗ<˛ČƒĘÁhÔc÷ŅãÖēyeˇ…’I°ĨČEb9Éč)ÎUc{G2ėŽûœ…ĻĨŠj^Ą8ûH #T]Ĩe,~Uã8?ZŸYū͞†ÎyŽŽ'$Ī;Œíų@ãßø{×OŅo’ĸMČīZsģyĘ pN?J9õØ94ÜãÚ=b{8y—Ë*$—pĖyÂcԓĮ Št Z ^×í-<‘Á ¤’B{sĩG|zũkĢi>]Āúcā˙)ĀäõĨí­`öj÷9é—7×Ö>\WäÄØÎ>ęõęMRŅ´=RŌųdhūx-¤ÚĖüd*AŸĪ5ÛîzRMáĮjGk‚nįēܞ6ÍąŨŪNž{É(,–8úž*Ŋ§ƒīRˇ¸ōDCífg}Û~ęã<ąęMw˛:“ŒŽ:ŒĶ–DŨ´HęÎ)ûYtŗG‡59Pē¸Ž;¤‘Įšˇ ˇŪ>€0=ĢjëEønįOĶDirđŪx.{’?Îĩä<ī,ēĢ$G5™ĸj/{f÷3C¸ģ˛¨ ‹vŸĀRį“Ô|ąZÖv&Ítũ6(āŠˇ"l€áv.I˙{ôŠnt Q´]2Õ$ļ@Œŗg8É =HÉüëvŌ`–kĢsl˛HĸIdVrö$úf¯¤‘L[ˑŠ…9Á÷Ļæīq(-ŠēuœzvŸohŒJC cŪŦ¸rrqN 2ˏĮÖŖa•+€9ÅfhÔ1äôV ūļžęūynîT^'— Øâļ؊ãŠã9íåKlԃæëęz})Đëí=ĨŒ†ŌD[šDk—ā‚sô❤/u“ÖIîf’{’×Qė•|Ė+ c8ņNūÆŗ7Q͝$…3˛Bž`zÕ)ŧC(ļŽH,wČ÷F×Ëi@ägKq¯=´WAŦ×ˎhÓīnÆHãļiZax‰qá¨.oå™Ļr“J˛ēx#Œp3ŠÔƒJ´ļšk¨Ŗo5† v-€NH< Éš×.lŽīÔZ$‘YˆŲ‰—•ģŽ*í–Ŗ-ÍåÍŦđdˆ+ŽŲ7VÎ9ĮąĄķ[P\ˇ$EĶáģ{¤‡>IÃŧõ8Î5STŌŖļŅÚÂÍĖM*ŗĮ ØÎI^zņŌĒŽģ¨{ų ļ ’ųAQÎ~ūĶž*[vîÔj`Å k7‹o' Ŧ;Jân6%ĶŦå™.cģŽgą(Ž+ļÜŲÉö?*Õ˛ļĩ´ļ1CDŒNā_¯ŊaŪëw°ĻĻÁ#-ią”ãŒ7<ķÖĄģÕõ[GÔTf6qŦã(~ulœuã<ŅË&>dąŖéŠ´rw1Œg×ëWÎÛËEōc œG„'ĶŌ˛5mRî9,áąTķŽŅ™FŒqõæŗõ-KSĩ’Īuô)ęĸo(œŒ¸'¨íøÔ¨ÉõŌ7ôũ6ßKIŒo$’LÛå’C–fĢē ¨@„ž:×6ڞŖ6ĩ‰¨y×7&â$•vÉ´íÎPŽŖÛĩ[žÔöøV]BŪ?´Ąˆm ŋyO‘øæ“ƒ¸)+ ēk_i—6šuėY`ŽP ō08­‹th­Õd‘]€Ė3ĮĨpŊŽˇŠäMĨÜė]Š;áî‘ÛųVöžËà Ö.đÅFÃÉ<•Ü3ĪžjåY"TēŗĸfP'ĩ;¯^@ë\\âũ-o$ĩšííŅwË8Sūŗ䎟­6ę8ßMa%õÕ¯Ú_qu~TŠĪœg>Ė|į_,Ž$‰LUÛipĀlã¯˙ǰmĩŨEā´gXɨ5Ŧ¸R>PHČįÚ¤ÕŖ Šh†+y™a˜ōŠÄ"m#ŸĮ“ž[x1ĻÜæU§Ã.2„“‘ų͌U…&îvFâãt‘‚Íąrã“éõ¤û]žķ\EŧģwŒį¸Ž=´ûČî.qc)ōĩEē@a“<í>ĩƑ3›éWHy$ŠÍe“ŨOCƒųŅÉãį}ŽÕ âŨ¨ā|šVČ—wĒÉŋaiÄ-ÁÖHÆ }ēTZEŒđ]ęāZ5´H˛BNĐŋt€:r+ÃIÖmŽ,ZK@ÆÖV,Ū`;ō¤ĮQÅ%v7'cnMUüĢx–XZ[ģ“IČUÉÉį¸ķŠĄē‚ÁZŪ}H\Iæ%ʆÚ9 ãĐV4v:„1ØæË- ķėÜŖäl÷Īû_ĨZ°˛Ôâûe”֐˜XĘÉrdÉmų#Žšį…6•ˇ&îæÄzĨ”˛ėK¨Éō|ÜgĒ{éUĄņ”öÍ2]ÆbA`2zV>›§ëpMc$–ļū\-nÃÍûĮļ8öčtQ|7ŽŲn!–6í*­ģ͝j9bē‡4§Öė5‘ŽUÆá¸qœƒĐfšuÛ8îZ–LeF!I铌īT5=6ö]L]Áog1–‰?HČ$îõŧScĐ$Š;b—)æ­Ņē•ļpĖr°æĸÃˇQíX/Q#˙k Å×'•Î~´ũ̓Ū:6uVęiG+YŅhVúž†79c+ᨚ¸ÎCœvéYŋ"é 20yĒ’€î§héŌŦ[2d%Á?Ĩ#*ŒžŲ hƒkƒˇ3éPˆĪ˜Ü÷ĪŌ­ŗ‚ĢänųG'¯~)Ä^]Á€õĨ%–=¤Œâ¤ ;JdО×å=($>jŽr:Ķ™Ėiü8Ą&yíIŗnNMVd\įô¨$ädôŠä |ōzņ@ĖųĘب,tø5/ĩÛ\1ąBvœ2zÔĶ‚ “ÛŽ*]æęįûŋÖŽ,™lHžĶVYYÖI€‚ŽäČ<~UĨoikfŦFąrBŽĩcąĪJ^#š9›"Čņîįę*ãįjŸXß<{ŠĨĘ´įPą[uųĄsĮÔW]]Đđ¯Ũ‘U9š‡DëøVīƒÂũŊFy1ˇķ‚Ŗtđ)ledqÜVī„u˛??÷Íc/„ę ß ãæÃá‡U9ÉρŧmëØ—aÆ5“#9mÛI`ĶãˆÆ0$-ƒŅŠ@ÚŲ9$út§ė9ũ(ß,í%ŽGnô‚ Ф6ė úĶÃüƒhĮÔSąšyúãրąøÅ1øĮ˛GJwÜč~cؚIÉúĐˆ‚äž{ŌH•ö÷✮[°Æ3M Ä‚Gj…@ Õ I™㌚”! ~cÁã>•įúžŠĢŽŗ|^”‚û¨ƒī^{œÕÂĖ‰Ë—Sļ”7ĀÍRš¸E#ŋŨ ąā į-5‹Û{FįQy$Ž /Üķ8ā{úū5UõdĩÕ#ēšCæIA0w_ĶĮx&XÃ;Uz’h‚Uƒ }s\bXjWVÉo:Isv¨’F ķ@Ļ›eĄęŠÚHÖ˛"´?šĮ āęĮüĒšpį}ŽéĻU;rsT[XļqÁĐ´EX™Ģ…#ˇÖšËĶyŠGį]DÂÚŌķ­ÁÃĮ‘Î\Kigg¯jFļŪe a™$‹n@RŠęyæĨAZė|ĪĄÕI{on‰$÷¤m€˜sŌĢÅ­iķIQŪB^RU\XvĒzî„ú§Ø­Ō(ÚŪ.ę[€ŧ/О+?Lđ•ÍŊõ­Ė’ÃŒ´˛yc%¤lŒ{(?IB×l•ė‘ļuŨ:¸vģŒ sûĶ×o§ëPÂY¤Æ.|Ėē¨ ‡œôĮJßÂĶχ-”Ō@˛O"ų¯’Yį$ķ“ĪĶ4ÂŒ&ēc›Ė|/ĖU~âØ iCĢ ĖŌ“]°T:w˜ÆuØČ@yü*ŧ]§Mm4Đyō`38‘Ā8īŪ™oáւķQ”^07{‚‘ܛģįŠ#ĩ)đ¤ mu7RÆŗÄ°€0B"žÃžyüč÷ß#>*‚;IomŽ"–äq*2Oˇ"ŸŠx‘´Ũj+/ą4ą•Bō‡.æÚ8úÔ¯ák;‹Û+™eŪҍcÃ`đO­W´Ķ Ô|Ay}rÎ$Q ,vä(Ār§œdœQînų ߊáÄIĨŲÃæ1m˛Éģj‚9Āõ4۝Bú;DļIpŌtEÉ÷'ĩ]>Ō-ÔL°ˇ™yÚC÷sPM§i–ÚmÍÆ“nŗŨ[ۘŖX›qRŪŪŧį=hŧČ?VV´ņeė–3Ī`ĒįgˆÄīŪHQúUÄÕufM9 Ŋ˛]]Ŧ›“%‚ҏíĶķĢļžĶÆ’–’@dVÚÎ$cģpsíZZCŒŦjžZlî¯ČRrD 2ęÎmĩÉ­õMHŨÜĀ-, A$hŋ3; ņøņYōxĻōm/VšI⍡X–ÕyRĮŽO×ôŽŊ´Ë)u{XOžÁ¤GÎG¯­)ĶėIdû,f˙ģ‘ĐūÔãØdúœÜēíņŖŧ÷QȰÚ+JĮ™!é’zõšĸËqsĸCsrūc\ ø)ˇh?ÏëR^MĨچkŅYšmɒ@îxč*ôoĐÆŅ2”` •<RŪ› -w9 íKSuĄk1Y#’;[}‘ņģ<ķūqSøjįQ–}FKégx”ĒÆî¸R•ükĢUXķÆAÉéېātŖZÖ os€7wÉáøî!¸ŋ/tCąŒŗFŧũŅĮPÍIĒØęFT[gÔ$[kEīæČÜ ãĶŠ5ŲŨOœĶĖpąĄv?JŽĘkšÉ<*•=ŽI>šuĒUé ÃĨέ¯­4ÛÖē{ˇIVX˓ēSģæĀëŒtНŦõŖĻiö–Âá|ųČw” ųC@2~ĩĐLō_ø’+IWdVˆˇQ•<ą9\øšŲ‡˜ß6vöčEŖVvÎat)š˙TŊx]™Bũ”3ŸŪH̐įŸ^*Į†ôŲôŨ*âííį7ō.Hš@ZB{täšß[Ģw$ą–Álo=j58 ¤s\Omp~ėp{ÔšÉĢ•\ãŦôqī%ŧžĶũ"[6ģ?I<}zqĐ [? jx~î/*%ģ¸E…Pˇ ˛YŽyn˙…vQęwŦ0ŨC#˛î ’HõÅ2][Oļ¯!_%‚Č ršéŸJ¯i.Âäs”‡ÂēĄ†ūLKĶE9ÎČ×<ų`VƗáĮ[)ĸēi`-32‹yŠåpÜGSŸÆļ$ŋĩFHMĖ+#ãb>œVE…Ũūą+\ÛŨ”ļ†äƨJČĢÁÎyäŌæ“Übļ6í­–Îāˆģ* ėXŸŠ5+ žôąĢÆã–īL“,šŪŗŊÍeP0zÖ%΂ŗj77r]Jßh„Û˜€Bc§O^khŋĮ5‡w¯›kûģU°žSo”˛o¯'ØūUQŋAJŨI"ŅDfÂy.ff´ŖÃ;ÆsĮ°¨ãđō­Œŋl¸ Dą?˘đ1ĮNOZKŋØĀĐÆ|×icW!;ô&­ÛjâëQ–Ō($ũĪĘō1œ͝~´ũũÉ÷J˙đÃö1ŧšÜˇ&ådČÜŽsžŪæsáÛ{š'•î.šĒ€¯CĶ­G/ˆ„wwÂŌV’ Q1¸ áúíQÍŽYu[IœÁ,hËæ Ā`¯ äQī‡ēOq ÛO5ãŊÄŲģEIFá€͊ž68/eŧķ%2´+ Ü:¯Z­ŠkO§ÁÄöØŪ ‚S'gĄ?JD×ÜčĶ_ŨXÍl#āDãænÃ\Ņi4ÉDą÷p(Žė–‘|ÀsœNyŠ@°1ÜIö˜Ö9wČI`:~>õ›6š¨Ã`÷Ĩ”H_‡cŸŪs˙ÖŠ×]ģ6ļŽl•§ē ņďÉ>ŧŠv¯ßö †Éc1š*Ŧ™•˛Ázdæ¤mNc#ĩ°f’1–c‚@yŦëZú;†,ĸYŸÚJË!āƒĘđ([ŋwmöÖá$ŗ70rsŒpÜ{Š\˛ãØÕÔ,´į°ÛfÚ šŠ† +JģfŽÚÚT’0¨ûr vJˋVēŧ†ÚĢx|Ģû'•Z,ü„/CŸ­3LÔ.–“ĻÚÉ/%ˆ—Ė•KÆĐ2>´ųZBæW:)4­>I#í`2ÄFÚ2¸éTå¸ŌmĖnaˆ™n<ŅÆ7\‘Ōĸę ĒiIu,j¯–FQĶ*H${W?6Ŗ,Ö-įI<ŧqŠ ´`0¤ĸÛŗjÚ”–ˇ–÷ļļÅĄą…ö&Ė6:ņĢļđÁkiŧkˆQĒžxĮ›×ąmLÁ8n§v`*ÁAë­^î+]K† ąĸ6>[c#õ?•>FŪ‚æ]N°Eo ‚8Ō1ü* /åYēåŧšĻ™=Ģˆå ›šE F=zVסOŠ˙ÄŲÛėO‘Š+‡VÆC sŪ¤Ôĩ)!û. TŦ1Ą{ke ÖĪį2ˇpOsĶ­t:ã^ŸŨÆëËųvũī|{ã5.yKsHą-€8Ī4ąČ¸l˙ ęNq2ˆįŅ–m.ĘėB'ŒŪE†ę>đŋ…#ÛÜ6™Ē;+Ļ´yŖ6Đ4g#ûäȧėÃœíæ¸‰#Ūԯ̜fƐÜÁ¸–>G0ÁŽ&ûL’dÕb´ŌĻ[wÍF= °ûĀ\Sī4՚â}îK6ļU†pĻ' O͎™ãœŅČģ‹™ZÜÅį´S\ÁF}3ÍTņĸÚfqqÄ1\ ܋&üuÁÔ4šįžÖŒ:S3Ëk üš >ãō¤ŊĶu9›SvĶ~Ô/-ÕbbëēņƒīĪÔš‰ÉęuqęlˇYf…e™AU-‚Ųô ŧĩ{†ļEöģŒ[†ė}+‹ģŗ×åšŅ×L‰’%…øuW%vį͝įZļđj0ë—Kb&G‘Ôēī‡¨Î0sÅ uwØčËebĸžC.Ņ”V vîę* )Ž$ĩIn 0Č떏ŽßƝ3LĐJ"Evd;U¸Ī3Y—} N°%Ņmī¯0ĶgOJš&ąeÂZR|õ/Df,S€+ĪJÕŦü;if¯ođČwKNzqÁæŸcŖę1.–Žö˙č[ÃįqČ&Ķ5Ãim;ņšTŠų‡¨5§ÕÞr?*į´-'V˛ē){}o-ŦI˛%Фû“ŽĩĐ"AĪNš9ÍLŌOAÅļĩ9ĘØéM$ļPv4öĮŸ­D[$c9=ŗÖ¤ĄžFØâĸ-…R dԙ\nį§J‰˛ ßŽh>%psž4ܑš•ņüg#Ž3“Š`FĮæ\ņMī$qĀÍ[Ę!°\÷Å0†e‘Ī  ›¤ÅU”qÚ­M€F: Ģ/Ë×==čœŨ9÷ũ mšåąũßëQĘNH<Ԛ+~úācĶúÕ!=ŪԄgĩã4Ôxܒŋ!*29õæļ' °Ú¸%˙˜Ēoi›in03Wî”Ŧ6ĀļíĮå]uÚ+ ŦŒøĀķ­ˆÆ§ŋ"ˇŧ#‘ЧĖČüß5€[k[œ¸‡ˆ­ŋ °MR/Wũ˛—Ât}“Ņ#8AĪ=iānÚzcŊ221ž õŠ>éÎxÅ`dpO”ķ¤/Z@CČ9āuĨęÄcéJ4aŖācۚ0ĨˇĮą4đ R:bŖ•w:Äcžh„áG°ÉĒR,’!@Ćc°d‘ëëV3ˆ’G$öŽ?_ņļ÷Īaųe!24›2Xã8ãWš;"%$–ĻŊŊÅļ§kđĻčY ¸Î íõdÆ ōƒ–É8k•}\éÚŦl ßf홨tøú“EŪ§Š@ą5ŊĮšŸeVwX†KąĀĢtÛ!Mu:˛3͚vœË4Ļea´6šW>'öĩä¯sqū‰l *§ĘĖFOëœU;Ģ­I4ë{D7Q´Ņ+Íqå’Ā“Čã§•*žģ•ĪĨÎøJādÛéÍ"ÜG¸•2xå‡'Úŗ´Ģ”+ƒ‰ĖąÛ$ŒŌõ9ãŸ~*ŽŠmŧA$fk&æÛ÷da‚ŋ‡'ņšw¸ųļąŊo¨ZŪû5ÄOˇ†Øāí¨N¯§GĮÛ­ˇN<ÁYū˛k!qm6œ°ˇ˜äL1‰ļTqĪÖ]žƒvčņƒ Ķe™c9ĮôüŠōÆīP敎¤ę–QZ%āšFŠC…u;ˇAŽŋ…Duģ8āŠs6cšO.=ˆX–ô +: #PŠŪ' ÜAw,ąĄlĢ#ÆqÁįŌĨ›GÔ˜ĩ¨¸kÁrę Ú 8į Í+Fû…äY“_˛ūœĘžg•‚„ū˜<ƒQ?ˆ­ZâÕ"†ęqp…Õĸ vœũ E&ƒvÆâA4qēûL9BT|ģHaߊŗ&›vnŦo~Ų sB E•ebĪ(´EīŧRĖ‘ØČ$¸P.‘Bė )ę0:ÔÖ7vÖ7WUâĸÍ´E;ėĮmĪbMOŦię‘ĀŠx`Ę%â=đĐäŌ6‹ö›k˜ŽīįœÜÃm cÚr €:拎T˜ėîØ­Ŧ]GåĀö.ær‘ÆŌŒI,đ¨&šû.˛×ˇPųL4âō"ØÚũzą>‚.-âYu §ē†MņÜđN0@ãÅN4+e¸IŪYåo$Â|É2'#žMŠxÃÔõ Fķ@ŧk‹ŗFʅĖr1éßõޜFšd@ tŦ¤đ۟ŦÖÛŽZp9™ŽÕ…‚´Åa˜Ëŗ1,Xf,ņëīJM5d8§ÔĨoŠ\^\\Äą#’Aät9ÁÉí]Ā;Ôa¸ô môÅ%;+X§ ësœ°ûZx’ēļŦg ”9<˙ZЧZ2kŗŊíôˇBiYfęŧ˛ĶcÖģ1wᲠ5_ô€|í¸ãfÍG?r÷8ũ/MģļIqŖ¸hLÉp~PJv÷į¨ãڗOŌîÄz2Üi,ģʲō‡ ßwŒûū•×ĮrÆYŅŖØ‘‘ĩË 6—ãR$¨ĀAãå4ŨFO"9 ;Jŋ´ūĮ#HØmî%2ÉŊØŲĮCĪ_Ō´5 [[\Ã˙’ā^/1O™?^*ŨžŦķë—öŌŧ&ÚŽDuãÎAįÚ´ōÚIÚ4š6tu Q؟JĨ{˙ZEXæŽ4ĢČ|G%ÉŌāēŽY–D¸ipbĀ{cŒzԚN‰¨ĩÍŊÜŌŲnšy‘­eåƒsƒĮjØēÔŖ+ ´šŗfiÖ6ķ%õę;ú š=JÆkįĩŽî&0܏—4­°rÆå‹KsmgO4“Ūį,}ɧ`žsNnG$揔.=Ē tV8<Ö,ēM¨Ū]}ĩÂŨÁäö•}ŋZÛVÆ9ÉĮzÎŊÕ­ėīĄ´hgy¤F‘Diž­8Ūú VļĻpđõÅŊÄ2Ųę ,2–ˆ6õ^„zŗkĄųãę’Ũ4ŒPƨ.?ÄG\Sæņ›Ÿ ÛJvLĨŖ]ŋ1Į^=Ē%ņģÜÅ6×™"YFœc€NjũöOēKuĄÅqŦÚęyKt`S{#Ë'ķ¨åđ÷œ/Iģ•~ÖQ‰~BŊ1ëW¯ī㰅ZlėFKąčR>!Š+ie6ķųąČąÉ n8Ž1īIstʡ¨ø~=Eb7ˇ‘–@ ą ôāũ*ĮöL2i’ÚĪ5ÅÂJ>g•žolcĨ%ÖŦmcŠIí'@Åwô"<œ œķøUiõ§cŠĀÖ3˜­P’čáw|šã¸āŅī0÷I×AI,Ä3Ū]Ė ‡&G6:/NŸÎ‘|?lļ‘C—abņH˛üɞŖ>žÔČĩŸŨÅ­ģO"ÛŦė…đUHāgš¨×Ä/4–æÎĪÍÛ´č^@˜ÚpTđyæx=Ōėš%¤—w’réƒũaåO\úŸz‰´ģ[[g¸XÜ´6í `31ŲŽ˜īÍV:Ē\ęR‹6&k7™™ČčJāqéÍ^Ō5&ŋĩķDļŖäŠîGPԒc;ÃztC„Im,R„S 7÷ÆzĨhÉáÍ%íĄˇklĮnsŪŲ\ö9ĒÖēÍæĄwū‰b ŠgA;7—#‘čH¨-üGxÂũî ˇŒØÆÆxԒۆHÛėF9ĻųÛ¸—*V7âŠ;XRŖÄĢĩPĒkĸi{›ũšˇŸŨŽO¯ëX÷žĩ‹-äöÖŅ6čŒgvāUŽÆ~•+ŨękM3íVÉuåŒĻ3ĩ†püÍ.Y.Ŗæ]Aaϰš…m­Îâ<Ô9î2)ãKĶ× Z@rųcöí\íūĄh5–ŽXíÄ%$HúįÎzĶõŊ^ķL(ŊƒÎPŒęąķ&[đÅ>ItaĖŽííŖlũž!¸ažAÎ)"—vŪ|KÄãø—†ëXĻâę]CSÆĻĢ,ĮĩO% Č>ƒ\jw+ĻÚÉ{öo:ĪĪ3(PdOAëK‘‡2:…KwČVž\aqĶĶ0Tāė+‰†úęō}!åž{V¸ŽQ!ˆ(-ˇŖr;õĻ\kwsXi騖ģÄĸK§Y[ :c$sOŲžâįGt1Ädv”ËCČ \C_¸ņ-Œrj2Ü+ŦjŨʀØÉbŊ ŸŌēQŠÛ˙mfČ$˜üÄ%p­ô5. ¤˜Ģ2ŪÉiif×K*Ë&õPĨšĮ=HÖŠ*¸ŽÜÄ5—‰Ĩf‹RŽlŠ9Ų• õE:˙tzFģ,O8.b–&,Āė!IÁ?^Í2Îëq3.œ:cĩ*•(673šâ'Ši4íJKuŧ–ŌF… ÷–Ü[įˆ"ßaw°ÅæŖFÎü“´÷¤ŠßKÎĮu.Õ''nsIŊ+ ĀëƒĀ5‰âoü)>Č'2KÛSŧ1Æ2a^iå´}-ƙt–ĒÜۏÉ€=Gķĸ0žėŦvÆ{pņ†‘S÷Tˇ-ôéf¸ˇ‡kM,qƒŨ˜ ×ũqĄĻËiĻN"#´ûYU<œä0ĢڝĨÄēđ–]8ŪÚMn"tˆŽrx=•Ēû‡37įÔŦ­îV)Ž`ŽVTgœú ŠMJ ^âd8Ū2ŧg‘ôæšĢŨ.ôJÔX%ĀŧpŅ\†_Ũp~1ڭŧ_G}¨°ŗW@Ģą\3*í ÷į?ĨĒۇ3ėlA­i—HžUÜ. Ŗw9# |RļĩĻGiö†ģˆÆdōˇ†ĪĪéXqiZ”Z›ļCqe*>Á"ūđ.G^Ũj­ũĻĄgŖ\ŧŅB’ËФą Ų°ĮĶ˙¯O’7ĩÅÍ#}üI¤‹_´‹Ĩ1,ĸ"ʄüŪ„b–Oé‘$ōĩÎԄ!p#n ¯nõ“&ƒ¨*ŊĐû7ÛĻšŽáãÉüƒßסēN­q-ķDm—ípFŒĪĘëØqČį­°îŌ6`ÔV}j[X¯2#‰Y­üœO}Ũø#ŠÕäOjåėė5hŧZ×ķũ‘ĸ–Ē“Ž=Ję2TžED’VąQwÎp:zTDbC}Ŋ*R0š¨Šo—;˜qČÍIcˇí'žsHĘwcŋŠúSŪ0zgZc BüŪƒŌ€#Ørš?*fÜąR>‡Ĩ›wÍ‘Ū‘É8 tĻ•p9Āįĩ3$gĩ“× R) &î€ņÍVqÁĒ÷GđôĢm÷OōĒN~mŖŊ*LNK~ˆs=ĮáĮįQ8įÖ¤Ņ?×Üúü¸ũjžÆØjRš&€p}Ŋ( ßւNQ´i361ōôLJؖ>[ƒ‘ôŽWEmčîfšë¯še’Aō\cō­¯sjJČËvUû3Hō×?nøUŗĢŎūš~XZĀu,-@“ūyރÂdT@~Oü‰liĐīŖáčsŒÔņĄaķ~V=‡jœœ‚ôŦ ˜Í€8;p{ɧ•î)9c–JTã$žOj#vÁ#đ=æ‹a|ë5ŨēHČA9Č­.hŨŌąÎ^˙i ZīPĶîlÕŅ$pĀą!s˙פm]âžšÕ”)vŌc™#a÷2ĮķæˇŽĨ>ÁöEÚĢąT’Ū¸ÆyĨŧN‚îŪ(ÅÕ”Cåå™@ägĻ¤ģ •˜—Z…Ũ­‚˜õØn>Ņ$aĻdP°+d“ĮbFi¨NĢĻÅuĢnļĘ%ģ‹3/Ũ\ãõīŠčŦ,4ĩ˛1ÚÁnan$ƒ GÖŦĨ´QÂ"D@‹÷ ĨÎģ+îp6w­ƒ§AķZÚyĶ,ķāäIPH霿­ÜH%Ŋ†'Ô.åCĻ3†We,ÃŖ`w=kˇōŖ1؛ģéQÄc—'i+‚1ũ)ē‰ôq w-Åæ#Ü\<…"G€FVîūŒ8į5šâĻŧM6ŠYb€Ėĸia2ĻõÅoÁÜvãø “HŠsÕ; GFŽ#VÚ5ŧP>ĄtŒ’ųNC¸t'?LĶž .uÍ.åmîĨ.‘‡Ybeō€įxnƒž õŽĐųj1×=ŠÃœSöšÄj6w'ˆ,Ž%ųES‡+ם9ôëŊēÄZe”°Ã40˛(C0ûāsԃŠėgž8 –WČXĐŗvš‚ËPˇžˇˇ–"‰Ŗķ2`íūTsģ‚šË6Ÿ-ĮöŦpiÛÅsbAUĖ]ŨëČĻĮaŠŨũŠÖÁíŪ}="ÜėŖsŠäqĶ"ģEáØž‡ÖŠ@lX,G4Ëģ§ÍŒb…6(ÂēƒPŊ´˛x´$‚hî’G_1F;įôŠm4ũJĮYÕ§ŽŌŧË‡Æ6žü×I,É M+ļÔE,ĮĐ Á_Ũ]Ë*ØiRIåíf2ĘŠ•n„uįāâ…&ւi#jÉŽÎŧEŽč¨ķ@5+(Ü8Ą‡\}iPäæŗfˆ6…Îzk”×Qæņv•Ko/•.ŽėôãÕHÜ.xÉæąoo4{{í÷,—q vuƒ{"ö$ōЍčɖÄshmڝ>HãšÜ0ĖŠš\7-‘ëžiɤ]jA|n„BņˆžđęNsĮ5ú¨ˇ×’VžWą{!(XĐēįwŪāzU‹­~ĘՔšRđųëäÄNS×õĒ÷Åî’jzZęåË‚HÜ íaĶëYōxyĨ†íeē/qtČŌJˆ]‡*Í^mnØ$MÉ0š=HXėõ>•ž!´Šf ,‰p…ĸtQ‡?Ũ?{ڒæZ |­ęԈ‘¯æMąĒǏ,C`ô9§&ŠL÷n/ĻŲwIEå€Ûģ§SßUXõĮ:â•Õ€ {­ž)&×mĸļžsÁâ™axÛ ‚@#œāiŽm…îūÁŠ9!–+Ųĸ’(D×ndAĐ× ĐlŅá‘UXĸhA!ēöęi÷Z´v–PÜÍ ĒŌᜓێĩw-ŅŗÚ\4W2˛Km!ŲĒOüũņGŧÆųQŖ‹eļéŌīTķy zįŋ˙ǝXiÖöUA!’sæI#6âÄqüĢŌfĩąĶín_O˙JY$‚,ä–Îqč|֋ë—~}´éųšâ'‘VgØTŠä=hiė$Ō-[ø~ŌÚéîb’â=śËIH@Į‚ĀzÕkOÚÅ<—cĪlî÷˛ŊNs¸wÉÍnîéž23Öš˙ÚHN6MŦ ô¤›n×)¤•ė[O é‰i%°ˇo)Č$4ŦsŽú{T×:…ęĀ.m•ü•ÂĮ zg<Õ ŨmôëÛ;E† ˛G˘cģ•}ŊAu¯ęVŌ^ˇļh-gHŽæmĖ#ˇziMõâē ĄiĨ§fļBŗ I2OĖ=?JŽ] J ’ÎTO-wŽė¸æ›Ļjw7R][Ũĉ5ģ/1į0ČëŪ˛Žĩ­NÍQa[QˆWØÁˇ:‘ž đi%&ípn)lo*Á$Y>Į˙/Ę`áqĶéEƗe$kŗ‰ĸ•M€…ú ËM[QēÔÚ8 -`tI ­†;”QZŸGŊžŊžé§š#ÉÄNNÁÎ})5$ŽÁ4OdúvĨh.!#b€˜đWéÍYk Kˆ^)mãhŽc #>¸ŽVÃQ¸´ōŪ…6Ķj˛ÂŅ‚Xį?QúÔŋđ^ŧmzŗ"ˆī~ĖÖeJ–ĮŽîū•nĄ*KŠÔ!I7Õ\ ĒÁF@ôĻg[˙h öRĶ„ÚĨ˜ŖØtËÜęˇđË{7öËm~ąyLĒFÛĮ¯?•,zŊÜž#šÔĸĩXeōÅŗG“"‘ÁúšžF>tm˙nC&Ļ–‹o+‡f&f\äuĪcFģĻ\ęēL–°Č‘#q|žĪī+’´ēļ‰4뇾`j3‰YO@wĶ×úÖ˛ëqÂ@/§Lą8aōîī×ŋ5\–wˆšŽĩ:x7‹tm2Ē€åF>ÂŦ¨ūUĘøNy\_E-Ä×Oį™7Ŗį'åČāúŠÍŌīo^öđZÉzōIi)C>Ne Į…ú ŸgĢ6ˆéd×"m%û8œ@n8Æüã§^ŧf¯ų§í"6ÂmÜ$ãi$ôõÍq2›; cļ‡PßŅĪw÷ø`ÃwãÉÉk,>žņČåHũîŌŲīhtŌę56uėR"ÎÄ*ōI'üiōÖY^x’Ų€ŸzãŦ´ķ.‘5ŧÖz’\…ŒLĮ,r đÜõõnęÎōķÃņM§ž)’I!UpߓĮLzRäWÜ9Ž§Í€¤aĨsŒ¯ĖīĨgëÚ]åŧ1j7"šWÎŲ’;õį“sĻHud‘ô‡¸‚HŖTÛ6Ī'ob3ĶŋáSkņí×´‰Ē\ŗ SË8ô<úPĸ¯ŖfÄúŽŸkK5ÔjĨ3w`;ƒŪšúĻ› Xfē$lŦĀuéX‘é7ĐÜéxˇIcˇ2ų˜`6‡č=qũ*žĨŖę˙éút6ąOk}7›ö‚øhÁĮolPŖî7&ēŽWīĒ€Hä͇88ų°kßEhĩ.$Ôod#‘™ûąĮLWC͌ T4‘IŒ'aąQŋ\…Éö8ŠēˇéŌĸ$–ÁÆ!`û÷¨q´“GJ|Ąčöæ˜wcļ;P22ãpéœLÎ#ÚČ9ĄARC6Iäcĩ4Æ[ž1éLÔŠ8Œõ&—iëQÍ•Är\wšXUüļŽAķ/ņÔi!¤8> Ēã’­Y—hLûķUek6{ĐAÁÁã5.ˆs=Īáũj)ũ1RhøĪŽøūĩHš×œ{PTįŠPIƧr=( åõÆ)ĸÜ@Ęā÷ęk›¸ÉKĪ1°ūUŌkgf“pIęŽ+›ģ?š°;xũ? ÕÁhg’Iŗúĩš­ī qŦ “<{­`mũõŽ{ĸ˙ZßđĀ_(:~ķ<û­Tö4{äĪ>ĩ0Ā@Ĩ˛E"õ  Ķö‚tÖšŅ‹…KúãŪ´i#]ŦĀãn)rN6ō:rh á˜ŒļAÜĶØ H#=L¤Đ}ŠīĶž¨î¨Āî)ÌūĩnSž9搰$dP]Â€ŪŖP3b†O$ ļą ĪËŌĢ2(mッšb"nfįÆkžņ8˙KĶĻÄ8$.ÆiƒÛ=k  ŊF2FüŸÎ˛|Gŗû&čŧaƒ`ãÂŽøYröę äŧ(a“~BęOn*Čō˜遁Ž+—ēi6âÂ@ōØM$g ųGx;ˇĄĢwz“CŽÃÛT•RXđ”žIäœã§8vŸshŒŒ:äˇ\qQãŽzį­s‚yX S˜ž0>´“ŽÜqVôō÷ļ—öŋh•ŧšž5ąÜcŸÎ“…‘JwgGbû|Æū˙úęō2–ÁĪL‘\"ÅqsáŊMĖSųë‘´3J`–Æ{˙JÖo*_ īĩ‚ôÆøųmänį9ÉĮZĪsĄ–gFˆŦ>jŗ`ļđ6Œu÷úS–håb#tb„ƒƒĶë\…œĨ„RYŨ—ĩŋ$~逨I9ĶVƇg­Åú5ƒÃ)ßÎ)ÃĄl€zR&ŲZ]ļ'žÖ€]W䞜í§#5$:…ĖOŠĮ{yXîÄQ´ƒ!í{ķÅ3DĶÚk‹ĪļéōÆRņî-ˇ sĐāŋ_ZeƝ¨É&ĻąY'úDņŧM$Ŗn9=˙†ŠōŪÄëbÅ­î…ĄģØ[Ė!rę2Į GĪLÕĩÖ ‚kÆē¸d.ŠcHÉ1–ād÷ĪéY÷:>§tÚ ō-‘o[s);JõíRÜčú•ĖúžEĒ-ĘF#;‰Ã'¨ĮCJŅ{ąŪ]rįÄ6QC;š—6Ō,n‚3ģstwÍAŦŨ ØLŅ<,Tå`øÕ{Ŋūî+õy푯|ĻĮ–]T¨Ž~œTķh á´Ō–ķ÷™Ļ‘Kg 쁟\R\ĒĀųˆ5ģŒ¨â7[iāmŖåęÅ=ÁëZÖzŦw“ÍnŅKoq␠í= ERŸ@šēkƒųUŽc‰NØžë!Îzú槏H’/ĩ\Ëz~×**ųÉU{įÔŌ÷l4ĨqúŽ­ũ–JÖŗN’H™1„€ õäŽ*äŌũžŨäsÂß@:Ö~ĢŖžĢäŋ¸ˇX¤Ūĸ, ‘ĐœŽÕ2ŲEĘ Í10ˆ¤ķTw#Ôį­-,RŊČôËûËøÅÔąÛÅk* #+),û\cĨDēÄąkˇöw‹mmlŗŖŽwÎsųS đž™ rÄĸv†D)å´ĖUTœāŨ*ßö=‘ŧ–čÄL˛Ãäš,H)éŠmÆė^õŠÖēœŌ^¤VMndˆÉoÜô>ŪĢę˛g[Đ\ô2Ę=üŗZú<6ŌĢ™Ž&eR‰įIģbžÂĢ7D˛‘LļęГäyĪķNxÉõĄ5}Ūژąj÷+6ßkŠ 'Ŋš¸ōÆnpé“ĮZ…5+øŖŒÜj%„Z—Ųä”*…dÆFxĀ­āšĪ6œ‘Ų4„—{p ’}HĒú—4'QŽöÆĩš:(ōÆ:•\ĘÛgsJņ,fŽ-MTAák™ˆm‰Î:p3ŒgŪžīįjšBMŽK†…ņ,L&pãĐį§á]'™bē‰Ķ<”W’3+/•ō°Î:ô'šēļĐĮ°“ ÷FŪŌ“ēŖæTmB×ėW—0΅`.ķ…eæ¸ũ;ÄZŲÜ]K ųVMpbTį–ų7ĶוÜ[ØÛ[G,IÛ3}įvæ=IÍNÆĄą€ÃĶŌ’’Ič6›ępŗjzËéqŧ›ä{ŦŦžPÚŅĒåĪÜãÖ´t­^ößÂjēˆ–iÉfE)‚Fp ÚēuDXĀÚŽ˜Š̓ž49Ļ­a([[žrÚļĄ6ŸŦ-ãŨbSĻ.wŪbkBęīQX5Uļ[Վ"ˇļbÆ÷ũ+ĩ.Ēœ{ P†aÎzSö‹°šsδ…ņŸg¨É:]4ĸAēˇĖĀw#=kgðŨĮ¨ęÍ-­Ę¨#’v-ģ§>¤“ĮŗĒëPé1Df‰äy_jĒcО§•=ž§kr–Ė%÷8܀Äc=)ĘmĢÛpQIÚį%ocwũšŌßĩÂŨj3G¤‡€7e°3ĀÆjK˜ī.<;q5œSKöËÆŪ!?”2̌û(üërúÎ Fôy—Ō(Œ"Ā(ØÆî9čHüjí˛ÛÅo­ĢKŗäŠú‚…f4íÚÕRD še‘ˇO'Ÿ­i N?*b_u=Ŋ9€cį­fŨŨͰ†03Æq\ÆĨáÍB]f[ũ>ų"[ˆÂM •<`të]DŽ­Į­f\ëú}ËÛ\NRuėØĮ9ācŽzö§īĄ2I­LŅĄßŲIhl'ˇ) ˜ļo<\îãųRÁĸ]EwlRå6ÛڛlŧgæĪ9ëęv]nŌŲ¯d¸ē(veLDÜ?\ÔGÅ:Bo 3ŠVŗ|¤ô'ŽŊWžÅî•!Đ/,ÚŅíoâķĸˇû3ų‘’Ž äÔTĪáįm:=.öĮĖ'Ė%ÎwxęxŠĨÖm펯š[ŅÚĒ™G,Ÿ~ų§_kN‰s¨@¯˜ÔíI‚zŠ/0´Bm[™¤•īwļō *cū×Ö¨Gá™#†h~ØV9IO%J’2G|ŽÕ4zŽŸˤ\Élœvč:PšŊŌĶhPŽ‘mb’Č °)Á•‡qI6“4Īa+ŪČZŲĖ…Ę ģŒz‚jĩÆą ĪtPŨykf%20ĘIų”zûՃǰĨŧ2ÜJaYļ‚2úįšŖŪC÷FÂ=Ųē]NŦ“4ņČ܌sœqČäõõ§žŠ˛^YÜÉyrdˇkPNzįŽũ)NŊžQÛĪ#oŧŠ™TlgÔíu#]<^LЍyœmlöô^Kp´EXcŗ{›‰.lŦŦ¯ō§ã=)—útґ4Îą9 |ļw§?­TÔå-¯ØÁ2mäË#nÁ @G°'ķ¨ėüAļ’sa=Ŋ”pų‰!\)ōĨgē ­™$ŪĶn¯’´Ī2ĸŠq7Ė6‘ƒĮ9Ģ áëÖ|ö,­(ķO;zU )ŧU3K ÄeŗR0Ų$n=}ų§\ø†ęÖæũEœrEdPČ|Ė1R31NŌÚâ÷zŖNßOļŗŧ{˜UüÉÎ$bėwcÖą ĩŗxēæâö‘2ưÉ0ÚŦÃ9ÆzöĢskSfō[h#xlÎeŪpÍōî;~€÷Ŧ]bᮟV™ãV,chK9ɆœSžĄ&­ĄØ>“gq|—˛Û#NƒīgͧņKmĻÛYĪ4Ā¨ŌļįaüDÖ`Ô¯Kk(šŨnž6ō ] ā3’}j+-nöî=3ĖōŽÖ`˙)²ôĮ5<˛°Ô‘ĒēF ļ6ĘĄˇåŽ×ëR>Ëí&įė°™Ī>fÁģķŽtë×§Bļŧ2[ŦŽ’9›ič>Õ=î̍™Ū;F#ûÚTē–ɑ֎Y ™ΧÚFd?d†F‘ˇˇîדęMHļ°ŧŋhhŖķĮĘ$Ø7éšÂŌ5ˋŨI!’X;ˆ<ÕōÆ `Ž>õ6Ģwuˇci úÚÁ4Rŝˌr~´rģŲ™Zæī•üĄTsũŪôŠaÔmŒôŽ.moPšÎÁfēŠĶĪI —xbąÆGÍZ7]kßg—SlG3*DÁUÎ#pF ›AÎē/—‰2Ŧ6ãúÕkÛõ°šÎ! 8š“Ęq…8Ī9úƒÄĢcĻų˛M,1īU-nbaéõŽvßVŽîËJķgy&QÛķ‚]WæD.fvË*ĸîfOROBīLĩŋÔl¯>×*˜ xÄn6ˇŽ}r8ŽnâŨ“da°ŋ‘MúHņʄ1ķ|Ŋ…M6ž#…†• )s‘Ü.~n§Ž‡ĨļęWču&[;hqŋûš _ZIâŋ–?x-éõŽ5l'Ôĩkûx->x¯ÕÅØ*<°’žžŋKs§ę‹=Ä1é/"hĨÚĖŦĄJņ2zņG"î77ØëęĪífž!?_/xŨīÅ\gEA–Î:×eaŠÃâĪ´gĸY]ŲĻ*ܡņ!ę3é]†ŅØIĪJ‰E!ÅÜo›$éß~é#qŠ”€™mĮÔÔx%™ŗœŽ*Jîz“ĀjVYp!¨ūœÔåw ÷}j&R\ņԁˆĒĪZŒŽFs× §ŗ8ū*M¤c ē€ `C’p='zņ§nA¸R’@āS´˜ëÎzÕYHņÁ5<° ķČ5 ĀĪĘ9"€(L9ėyÍ?G˙šŋŨ֙6GĘ1OŅŋãōo÷GķĒBfō^iĒ0s×5(^4sŌŅįåĪäEsWjEžž `„é].°Ēt™ÎĶ÷GN܊᝜lĶ™1’œ~ĸ:!ąŽdąčĒS[ūpfÁl}Ņí@™6 Æ2NMUŋ˛ĩŋ€%ĖbEŪkÖ­21ÉëYēíķčÚsŨ¤)+luūJjíŲė•Ų{ˡɍ +€ t¨îūÃĩÅÂÆ‡pÛ$tëXâcĶįē{dM’,h…ēš úb‘ĩˇ6IZ$ÚnK? Œí뚮F.uĐŲ‚æŌé\[Îy#ŠvPúûW:—ŗ[A{sÄ/%Õį–„ŽŅ'ũŅQęˇēĩĄ‰Ô-¯›3Ŧ@’Ka@÷4{7{´VšÚ[ČĨø^úU¤ 1Āâ¸}VŊ†[įÔZiŖ†%ܐşŸ¸šęÎĩ­Ī:ÂÖms/mįŖFœģ“€ vĶŊÍŪÁÎŦv qČ=ōyĒæōh¯ĄˆĀ ŧĄ”Č*Ðą渭zķZ‡Pš;&ŧ”Į pĢĮ˜Ã–÷8üŗVuõНí,á˛ģû-• ČØåŊ=iĒ}n'PíK€GŠĄČx *dą=ĀŪi:”ēĖá/v=Ņt%› u tÉ<jÕˇĶīãđe崖¯ö›Š¤fæUb0 =¤āģ‚›}‰oíüĩ”ÜDanMÃũiĪŠYäŠē‰H%N\d2GåÍs7žšëPŌí͌gLŠ!ž1.9'Īj?9]^wļ€ÜNĖ-”ũÔ\`ŠīK–=Įyv7ŖÔŦŨ\Įs ,jʸ;Tō ¨ŋĩô÷ąûwÛ"6šĮš‚sĶë\ūĢá[š´[M.ĀĀą*æčą*\Į#¨É5v ŋáO’xæ@ĪŒąŋ;Nz’3ևÚ÷ ËąrOiQÂfkÄŦBRp~á8ņŦW˜˛jļöž.œČfo’;THÁ*Ŧy,}:V-üGo{;”ˇ¸ˆA¸O$Š…Lv<õöĨŗĐ Ä×s]CLĶG\l$c$÷ĀāTáĩ›HūÎ[—Ty<Ų&R 9Ũ¸æ“qˊRøÎŲlŽ.#ŗš’(ĨX˛ŌXŒū‹_}ĒæxŦ$Üķų,Îã ÆsõëÅYļđ}”AžfhķđĖ1ëŸÂ­ZxjÆÎ{yHō@&÷ȉÜßSž´ÛĻ;Ošĸ“Dã1HŽሠ€{­sū*Ķ~×§›ø ŒŪŲ‘4nG$)Îß§Zšmũ•ĻÜfYŧi<ō™LA‰$õ?ËĨk2SČ9=1PŸ+ē+ufs:\ßm˛ÔuĢu ķ¨XYĮ@‹×ūúĪåTí5-Væ;$ū͉>ŲhĶgĘ_‘—ĪôŽŽ;+t˛û"Û ļå| 8ÁęįPÃĻérÆĻ+[Væ5ڀíõÎĢ™v'•÷0 ÛjzUĪÛEŦŗXHL€)‚™ëôĸßTģÔ.tˆåÔ ą¸Š]ŪPQæ2‘‚28Ī5ˇ}gĨGoš´…‘N"Eˆ1Ī\(Û ŠĄK+č`ēŽŨF—‹k/ˇ#"Ÿ2ļÁĘīšÎÃĢĘ|Rĩųh #(UtQܜ÷īKuЈŧJЎ—GËšT–3Âd8G^qÉŽŖÉ„Ļ iœîŨŽsëCĒ8ÉõÅO:ėŒã˙´s¨[Û4ˇ{mE҉Ũū­ˇ`QÂÔqy°iZĸZÉyö”ē+p~veˆšåsĮŨôŽéöāļŪž”&ŨÍĐ˙> ä8Š aĨĻÔ.­…Ûb¯’ĨOn¤dŠŽÆÔÛI"ŠôIĸņ䤄Nq×øyÛî å@ŽzSŗ“íŌh‡)â,>Ŗ °Í&$ ĸBÄMž:{t¨´ī-ĩ$‡R˛š–``ēe Š3‚{6zÖūĩŠ.§}ŗėī2F@`¤ gŒķQiÚŲŧÔ%ą–ŌK{ˆĐIĩˆ`Ę{‚)Ũōė\ۙ §ŧzæ˛b°o6â mî°0Ėž “LŅtŲ|ŠžĮk>—6ÔW–|IŧޏũkŽf@AÜŋ7ŋZˆK™´:îsSÎė¨ŠÎ ¸l’ ‹¯>ādųģįž8Ģ€˛ōā’­ 9Æ9ũ+&ķÄąÚŨLë(°ą1Æs*läô+DŽz×3­éĻŖŠÁsmöDû#€š$ąã;¸é[–א^ÁÍŧĢ,2œĢ/zÎēģēÅ֖ĸ`-eļy=Ŗī)ëžŊéÆé‰ŲŖ:˙CÕn›RrÖÃí‹QŧüĨ nĄĄęrę%&ļQyq–;J÷?™Ģúޝú6Ą&™vĻâÖ"ŲL1R>ŋMaŠÚ]ņæ6–$ 0ČqÔÕ^IhļP]P{‹ų${RˇQÆ 8,Ņ‚ô<ԑčS MĨĩČ/#0ķ0HE' äãĨhG­iķ´‹Ō1‰ Ž0GËę=GŌ›ŋ§M›ŦcĘĒ‘e‰įđ¤Ü‡h™:‡.ŽĖĻ;ĨdˇH6HÎ_z{蚀d†ō=˛ÛĨŧûĸÉ gæãš­?í{Wō64įÆŌĄD'*ŊjŠoéŅXÁtdo.dgAˇæ uâ‹Ė-œžH÷Ŧ7&4{Qj 8P:įŽzĶW@•^áŋ’)Ŗ€@͏Aペˇģkqz- Žy$ Ä|`H<Õ+-mš8îį3I E}ĄūSČĮ;´ũņ{Ĩ”ŅZ Aî ģRfIžŊŠįN™ŧEč °¤E_÷™g Ûí×5Ē[€O¯åU¯oE•ŋ›åŧŽHUHÆKüžĩ*M”âŠ×zPģžˇģ3Hž@ "ã ¨‚™&ĨhˇąŲ4čˇģ–2y#üŠĨ¯]Íi”Î#Ũw8Ā%”œP“lļŌÔģĒ]ÛÚÛÆ.ŒrČąåFv’p?Z˛ĒŖ.g9āu5ÅęúĄž[´{Ĩ„ÚßGˆ02ĘŦŧžũķøVŽŋ¨ÜÅygkÄVąĘŽÆy:ĀúķŸÂĢ‘čO2՚†¯meŪŽōa›Ë ;GV#Ōĸąļ—ûFãPYak[ˆã(ĒāpkP}ÚĒîŧI6”č$xfČ9ߚÖđ­ÔsčȓÍ+m„˜ũÛ2ŖŽ”ÜmĄ)]›ĨĀ\Œƒ×ĒžĨ_ÛŲb§œuĻŪé"Kû–ūÍš•N •ÉWĀĪ÷ąÖ‡÷bæļČîRX&ėtr@9Å8Hšä€: âtËK‹oiˇiŗCnöb9Ø.™ęߗë]ŽÜē–=EDŖfT]Į6Üz}jí¤.Z™‡sQrņČõ5% tÚ7Ļ cģ•ę*gfÜéīQHHl'žh¨~ø=3@|&8§eHo×>”ÖÎãĶîô  6ãč;T@0āũ3NdōÉaŽG4ÕÜnÆqŒĶë͎JĻŲ,Xįlä†l`ôëŌĢ> n˜öí@ŠüŖ8úҤņ}/Â1ųŌÜ Ģ/JnÃíīūįõHĐFrp@Í? z{ĶnōšųņŸÂ”ŠnBįéA;­ø”]dá†0=ˇ æŽFa°ā‘˙§5ŅkC5ËãÚ ˙ įoĒX ˇQZ#ĸLk3Į(?™­ī Ÿø¨˜Fdū•‚H/eŽ0Ŗųšßđēį_“<ōüúr*§ą§CŅņœŽy§ŽėnīŌĸ‰sŒŊS‚H9ĪaX# ûã­<)ci‹Ķî÷ŠF gˇJcg$ĮŊ!ĪŊ.U˜ aģ+ŪœŲ 2¤æ˝ÜzÔD€Ėģļs׊ČI=ę&ų¸*23LW2 į֘ˆŨģå8SļŖ’xĻÉŠį$tëšv‡Br0;Õ][NĩÕm+€ïĖW‘VB‡#9ŦĪ]\XéunŅŖĄ^\duūt$ÛĐOmIÛI°–Õ­ūËF_{.:ˇŠ÷¨î`ĶbŊąûDĶnō­ÛË'o3ĐUYĩËīÖyaãHŨ.ĀģÛķĐc9Ļ]}ĻC`×ųŸm^< ĄÆ{gšŽWՊęÚ#Y4û(Ŗōcĩ„CģvƒŊ~ĩЏí+•^xÎ#Öą&Ôīcášė+E|°Â…ŪŒ? FJ‹VžhfXĄÔܲúŌęe+ZFÚ¤uúúĐá š›gHî›ļ3/8ÍR—Rƒ-ŊÍŗÍr¯.Ч?Ä{VŊœąOh†Æã6×ō—vN<ļ߂qČĒÖÖ3\izÅŦzVŲe•š,…ÁlƒŸcIE™\zŽžnäĩp}Ļ1šãŪ28Í$ēî”ļĸčßDĐ,‚3"ļ@cÚ˛F›t—ÚŖ .×P)GvRĄļ`ĢwëTâŅuX,¯Ņ­ ĖĶE:(šJäp0:Ο,{…ŲĢyâM>ĘáĖ—¨đ˜Đâ4,W9Ã;Ō˛Ŋ‡P˛6Áļœ€JAäzV,úmũŨÕˆŌÔĮ-ēÂc–BI9Ā÷#4AoĒØ:Í%Ļ÷ķÔĢ6ØĪ#ģĀ÷¤ÔmĻãMßQ°kW“øŠ[c$KnYQ’Ą~đlōsÁr-{"áė.ÔH؅†y3œ€>ĻŗSÃWōÚ6Ÿs=ĒÚÆĖĐHˆD äIéߟZŊ6“}{ĻÃoq¨Ä$IvŠ"×ÚF(Ŋâi5{kËX|¸^i/!gHplžĩKBÕ ž“¤Zų/$“Ûą°ė{ÔļŪ–Ū+Lj.&ĩVd¯úŗ—>ƒšzøhEoe_ÎÕܤŠpŨGLQxÚÁi^åY•nSR¸ÔŪÜ[Á $qJË#øläqÆA¨WÃŅZÛ[ũŽč5ŗ7•2¸ Ąē¯N•~-Ú+Ąx¯9œB" e?tqĶ×ŋֆáĐ-.Ļ“¨ÜGkύˇ‡uԗcœ’9ÜS­5U´Ŋžk?6y ÆÅÛ׌ķ1Zöē5°ˇ¤™‚F’=ō1Ã0įúÔCÃZRÅä‹Uōŧß8)cÃūtųŖØ9dgYk:ŽĄqĨ5ŊÅŧqÜ@ŌLž^ī˜9ã­#jē‚i˛ČމåŨʲŧ1 ŦkžB“Ī=km4 61nĢnm‰hzü¤Ō K1˜Œ!CÁn=M'(öVP¸y'Õô9–`ČcˇmŸ{ō==ę7Uģžm1&¸ĪIDĢ…+ĐúŠ×´Ëĸ˛ė…žÚO)Y×7たÃĨNšm”2 "wĀ$ž´ŽļŽvÎîęH´é'Ŋy>Ņ$°ē| ģ°FsĀīNĐe–}ōA¨Ís0WĄ ļ;u­—–ĘŌ_!mËAa %‚nčN:UČíĄ‚"ˆŠžHPhrō3•…§‡Ãv…ļĄqv`*ķ§š e _¨÷§ßFöoŖGy{s¸LRVÉbšäõāđ+ręÄÜųQDņĨēƝ*ėåĀ9zr* BĘūëY°¸ļkqąc"ČHc¸cŽ)Š&KŒæēŒéÚ tÉ4wģĀ‘Ÿļ:wëYÆIåŌtR¯s,‰•ksŊL„ļ2ÔuįĩzÚādôėiĀ€T´*žCp9?ęj>ÕmmÃÉ-ŗU ;ķÛō¨ė]+Y&9îm/ŅBÎAg‰€ÆÖīļē-JátŨ2ōîÚ42:7cŽN:âĨ÷–¨ëĀ‘CsÛ<ЧeļË¯™Į-ŗGq§Ā,.wÛj2“ ˆąąlséŌŦč6ŌGkq%•šÛßyīļk¨[&b@ļĨŋš’ö[[!—ėû<ö•Ęõį ØzÖŠA =Ŋ3Cž–H4õŊH1{,RIž (TøÖļãū}&/´Ež\ų-ƒ€TuΝ5Ķ*a@ɨ%Ķėn¤2Īi ˛msÆ üÍJvwcjčÄđL€øi"X‚ųŸon’F&žg.Ņ…,{õéÅ Jö¸“[Œ]OûZ˜Dæ(ķ[åačsĮԃáí;Ë0}•DeüÖÎwúį5^ãRÔ –Æ!mMs$ˆDŒHAã׎Ŋu$–RO °‚yŪŲʓë쟧ËNŌŪáxö4—C͚5SkĐūg›Ö•´<Ųi gJĮn~oī}j…–ĢŠ_ƒ<đĨĄY637ĖrFyéíPØëƒėĶ]ŧRGshķlŽ=ĨY@8ëĪZ9e܏bäņZM¯Û Ĩ>|hd†-ŧ8'8÷éšĶšĻ@eŠ9;—xkzŒ÷ŽjŪáåÖt[ÉσJę€cnTg<Ôø’āÃĒmŊ‰Š[‰ ‘Œķ3Éhpo`æGS"Y”Í&YxØįŽ*im ¸nQ&AŅY×?ôëqŖÅöŕf %ų@ŪvdjĢĩu2ZŪ-éËŨųØė(Î08Î@į4šsŖĢG‚B&đ0hČ”Č ŋ—"C´m¤(Ā \ŦZ•Ôŧ¯Š3…ÔL2 NߝuĒ\%­÷úx&Ūõų•YŖ Õ8Ā=*9sŖĢ‘‹ģ?.JT›æęqU4ųDúu¤äĘKƤ§zæí/îeŌõK˜ī'žęÚY.ėĒĻîÔã?•%î7$Žēņ$–ŪHĄt ęUY†@8ĒZ5”šV“ ŖN&hAU!q‘œ×:÷& 1.âÕåŊHîĸ/ ĪʄüĘqÖĸûmÂØęmwpb[åg,cˆ’šíœÕ(;Zäķ+Üí\ČIäv(ûŦ2rFNJâ.gO+L ¨]\C%ǑY“(Gˇ8Ļ™$ļžÖ–Ųî~ŲäĢ[Žö#nĐ đNirœíå!ˇ`šœ€ÜõįæEoOö{íFíüčXîW ‡<øg5wRĩŽ&ĩ„‹åĶ$€í[u,D™ÎNA ķÅ?gŌâį;bP§9ĩ)^FrqÎkĶUnLû5ČHāVŽÁ>ĩŗĪ\ũ+6ŦZwēķL ,qž9ĄŖ Í'%ˆ“éšRAô9¤2PIÁĪ4Æį9äĶÜ|ã¤1ŒŽ'­ ÛĮ äzĶd;œHâĨ-ķōpęj9Or=)€×ÆG=‰¨Øö#>‚šÆ8Æ;ö >ä-Ū€"lō95VUĀaīŪŦg“íúÕi;ÆyĪ4€ĨqĮ퍴Ÿ—Qq˙L˙¨Š%)\ô8¨tÃ˙FūyŸæ*ЙŌĸÁ‡aI¸y ž´!ëÅ<Ŗ­Ö´„hS6s’ƒŸ0˙ëW5q‡ŽÃˇZéuÃB|ōI\Ÿ_˜W=pbđÁ üĢDtSØĮÍh0~čëõ5ŌxT/öôⁿ~<ŠįzËkūčūfē_ (:íÃr7ãŸuĒžÆŪíÛs˙Ö ĖĀ“ŒæœĀ5œ#ōėŽ§­`Œ ”d}á¸Rįö 2įĨKHĮĩĘRĘĮ—ĄôĻüÄōpGĻĮ!ÜĮŋLQģ!x΀ģįÚrpri ļĐ7ĩ?aĻ3Î į5#™w7R1…é@.Hœ×*)g%ē “qØc֚Ā3†LŊŠĄ[$/ëUõ;KËsÚ,ąŠD‡ 1ŪĨLÉģhŨ×5‡â˙´.tbeN…ŗ’šä­8Ģ´…'d_´:]é›ÉHämĄ$ųĖŊš#‘Jēfžļ˙fQCî ˇŪĩ•uŠŪÚÃx°ų(–fAˇ;•€āķך/õF ĩ2’AåZyr*„$˛‘ĐķĮJŽWĐ\Ëą˛ömãØB•fĒ,ĐOtQ-Ų€Ęļ  ŽĢše”×RŪŪZÍ*ļÕY#eLūƒëU­õ‹[Ûâ¸ē.!vŠP;°ĐņŠÍ{+û[Ôx´ušImãD ˙GeĪR{tįڛ‰Ē}‹Uĩ(’F–)ƒŋ,Üc×­>X؝ΊÚ⠃,qL­4XqˆĒ.Ž­Ļ[}žė=Üí(O—Â1`z ~•o¨ĮĒ_\ŨC ir#!V]ÅYW*œZ>Ĩ VRŲĨļē’B7 žî‡ˇTŲl6ŪåŋøHôī.ŪT’GģŦ[bbXŽr1Š_ĶÆŸņivŗ˛„X‰|¯ Įˇ5RË@ŋˇ†Åd–ß}ĩԓ Ģgõų2o ę3iâÕ5$@×I!T#*ü㯎iÚŧ‹v^"˛ÕāÚ,Œ-ö–,˜Ęžâ‹?YŨŊ°û5ÔKt]bycrį#ƒ×Š›DŅî4‹_ŗÜÜÅ**„ŒE@î}IŦ é°ŨÚĨÃŪcļš›É…@YbFIęxä}iÚ…åĄ$ž(“ČÔlŌ!:¤Ž>`Iú ÅYMNåŽl„öb)¤ˇ–E~TŽz})ļŪ†ĨC{s"K†@vĀ“íÛ&­Áá¨-ZͅÕĖŋeGUųÎîšâ“pč KŠ›gâ+ÛĢm:"Ô Šŧ–Ų!;NŌ}:ņŌ“û{Q{86CkįI|öŒXļĐF@#ŋQWíŧ)cobļŠķ´i?œ‡Ė!‘Ŋˆč1S éËÄPĸS0Q3d9īœĶæ€%"ŽŗĢŪéŅÚZÅ RŪ\),YļÆ žžøâ’=KP¸žû$gˇšKdšPųpI<…äqĮ_zŊy§iZũŋŲ§ŲqäĢ/ˇę9¤“AĶ\BĪjŽöŅm‹$ôô>ŋMãm†Ķž†?ÚĻĩKö…bRuTW2.āCl‡š[cSŽK×@E­ÔqŦ>QËĢíīžĖ*ØūÂͤ ZÍ?zâWüĖ;ŸzĄ§ØI˙ >Ŗs6žÂ6)äÎûqō¨äsÍ5$&™Jkû›7ÕæŽä# øFXō€ČĶĩ FífÔĨ[đ‹isŦ[WiVېxĪs]öUŽdcen|×Üų@wSS5Ē‚|˜Æėn!8éK™v+2u}e!ļŊ[7ŨslČÎÕ$e€ī€sYÂōUģÔžŖ,ņ=‡ä1VɧĐC§F—Ķ]šwyP&X•ē§z¤të¤ņ ŋÛk’Âa#qÜFsœcšiĮ`i˜ÖúĀ˛Čš‹˛6˜%<ī ę@îjž‰¨ÍyĢ+>Ĩ|ąVˇI9ķ‡~ƒūUÛÃ%Ŧģ–ŲĄmŖ!•Jˆ¨ā8bŽtē ‘÷9M}å–ķPĩ¸k”„Ų“ną ‘סĒÍu-ĪØ ˇ7–öæŅ<¯&6ųĨ:đ:×lø2ONõ´Ë0ķ>eÁ*w)éBž›ŲËÜęZüļQÍöŅ0š ‚v`BA§hiky›Hšši™—΂0T89 īŌēņĩ— đ}ŠP•ã4šÃ”¯f×dŒßžĶÎ˙+;zöĪĩXldqBƒŽz ķŒãŪĄ–;h×Ęø6kšGh—24’/–Ā ŽßÎēÃvŪü×1â–û-ƟzŦb—l{e˜ãžjŠüDĪbmúÆįK)jސÉ3ʨŽxQž J[ŨPfÕ,ÅĒK ü‚DšÜ‹Ôuãbĩŗ5ļĨom¨[ŦbäíŠXܲ–냐5ŖöČ 2Jfb1V`à }ŊS“Ü\Ģc–ŸO—PÖu>(âd’8“9å>^ c“ÅkÛØ^ÁĢj˜á0Έ¨ÛūlĒ㑎ų§[Zéö÷SęévÄNŸ;4،ŽØíÅZ“VĶāX^KؕfÆK 6=)97°rŖ—@ÕdŌm´đ-B­ģÃ!$“œđAÆqíZPé×KĸĪfVŌ)J*Ĥ c'ŋ­]:•ģĩ›Ãso˛áöĮ%ÆvãŊDž ŅÚäCöøŧÎ@ĻGQõĸōjÁhŖ?ûRIŦž9m€†ĪėĮ!š>ŋ ũh°Ņo,ä°yf…ÖÚŲā| ‚ü…kI­éŸaÆé• s’GQŽŊĒ]_LÕŖ¸Ž–áq P~éū}čŧģĸbøoM7ZEŒĶϤĶuD´PI(@…”=;{UíÍ<ŲIpd”,RyL m¸ˇ ɧ'+‰(ØĄ˙õô։ÎĻh ŧ‘ÀģNrÃ<ž*ÃčhžSsreZ‹yĀ ĮņgąÉŠlãšŖö”ĶŸ]‘ /ÚãųQöũå^:-&õŌ4ÛÃVīnbžk‰°Ā¤'Θô#ĨK>i=ŠZ:쯘(ÅÎõ#Ą ×4Čõļ}m´ĶŽŅ÷ÚL3qœ…Į#ˇZŖuâK›i.›û7tV×o4ķc {ŅiļéĨ‹hÜ+˜ČŽōļwäᚌh6 Č ōËæŽY°Ž{õëU?á xmŽDöd]Ã2BąFų_Np=igÕĩ[1öĸš{ƒ šĮBCqۊ-1Ū%†ŅôË9eŧ0¤aÃy„ą 3Ôã ÍCĐÕ`û;[˛Ą `†<•ŦûŨNâöÆËĪŽ8ØjkʤvˇocNŋŋšį`1@“[jĢ0ÎĶ•ęīĒŽYudŨtFÜ:&™‘ČļP,¨Å•‚ô&œēM„c垁NԜ û§¨Ŧq¯_Ā^Úxā0ßE…s´ÆũįƒI6ŋ}mk|ΑJđ^ųÂ0æž3SË.ãŧ{6ÚUĨ¸ŒEm *1d—ééNûĒĖn ‰˙Y´üęĸjIĻYÜũĸÖĖ›ŨČĀž@>§ĩUņ-IJ]éÚdRĘR@ŸhË&}¯­IĄj—i7ēĩũâOüʑĄÄ` ‘ž2yŖ‘‚š:°9ŋzTde8'×Ĩyä>&ŊēšúWy †;C$QŦ|Į yīŌ’ÃZÕāŗÔžævmnG– ų¤ã¯÷šúSöLŸjCˇxĻ„aW=‹ļŒīĐŽ)Å3Č<úĶĀUĪüéĀ‘´Ղ0aÂrsøš‘˜†pįļ:Svg$ŒŅ…a:zĶĖgkāŌ¨c­;pPNŪ‡ŌŖRZ}šĀA“Žų4 ”p¸ ךCWE5›,p0:RõëĀí@†‰N…!b7€ŒŽ8Ļģyn8ČëJĀ”QžZ@B`p2xĒ×ļ6ڌF dˆā•ÜFqôŠō ĀįÛĩRÕĩĨéS]ųFSŌq’Hši;č'kjWm#HģÄąÅ$ėĄ]7ōBôČĪn*gŅôųä—ˎF3æ1$î Œ Ãģĩ잃IPöÆčŨå_Áē÷?ūĒŗqŠęvßm!­sm,#!đëęjėú2]Qˇek>ø Ž9BîÛÎj¯-ž›[FKU,r°°늊뙔–[ĩĮ›ė†f\ÛëYšlŅŪÃ-Ōß4*–1y™ōGaŽÄb˛ ŋ7 Ļ)Ô&]÷-¤0VaƒÃîūt”)ÉXí/¯VÉ ^YœF‘¯VcۚŽÛS/m—ĩ’) ۂÄq\¤Ëļšyēž¸  bWw*ÛyäqÍ]ˇšū ڔĐųS…ŠŒâTÚ2IčyÉ'ÚĢ–Čžk›Z~ĸڝŒËf@™Ū6PĀĒm$sę?ZŊ,žMŧ¯ k#ÆšXÃÎ;gĩqÚqķJhÖčųwķ†Ú­ˇiÜA#Ļ9ZšŌ(Ž4ŊBÚ}:äę‚)w1ŸŪxÁčsÆ>”8!)dw‘1D’TY™Cy{Á?ũzŠëSˇ†ŪYę%D#sžõĪÛX˛ëw2é’Å#߁û§\į'ˇĩgYhږŨZ7ŌÚîí†Ā]vĢ.p=}ōhå]ĮĖûd´S\Æą\Û'~ ,pqzbĸŊÕú-ŨΛtŽņÆÛ$L6@i÷oĒ[L–Cö9HÚPŗãåĀ÷­;OŌu(4 ëGCšaoH UÆ,8敖áv[ĶõÛg˛q(7ÛŦĶaOŨĮ$qĪ>•8×ė Œ‚G?č˙iĪ–Ø1ņČ=úÕ´ģõû:ʐ"ŽžmœĢ’A8éĮN*Ž“Ļ^É!•§ąo&ĐØ”@Į =søPÔA6^>+ĶæČXîß÷b@ŋgo™ņ9ĶßUŌôČ#’ÚՄ2Ē9{x@UV8ēzũjĒhWņMfÂâÜy6lØF “߯°ĻOá+ˋ5mĢo  U‹åܧ!€'¯‹Bû‡ŧOyⅱ–æ6ą™ãļtĘĀ Đã9¤ÕüSũ™}˛ØĪ)l*0 b2H÷¤šđĶNˇĸ]FFûbÆŽV%mĻ^xJÛæŧ’ūíe mJŒd~9Ąr_P|ũ k[éœo.mšÛ÷fGŽYqX_đ_j%ũÄvo ĩi œČ9ëú÷âēK(íėVÜŧ“f™ˇĪ\šË‡ÂļÖļW6ą]Ũũžd1ˆüĖˆÔœŧRN#jF^†˛Ãâ–Ęd†M>•‹ÄsČĀäÖļŋ¨^X%ģY,>lͤ9˜ üRÛxjÆm%&rö҈ҚSķ(9ãŽ*æĨĨÚęöËotĨŖŪmb¤Ķ›’rLi4e^ëZžĸ–rÃlXÔĀÁÛ>@+íŒæŖŋÖuk[ÍIaŠÔÃf‰.ÖŨēE įžŨ [š´iĩë…´Ÿg°ŒČŗ?!˜ Ôã’ Îuļ¸ņœŅŨZLųˇEG1ļÍ˒rzwĄ[°;’_kWņ.¤c‘#Xĸ2vļr>Õ8Ôo‰ .läÂÄ+ļܐOU=ũ1Z75ÕÁ¸š´ŠI bÃĒúSmSJ’õÚŅmZâ>Ë ˛ŒcđôĨuØ,î\WŽh÷E"ļr7)Čã­cx´“ák§QĘė ú|âĩíŦ`ą ļ‰b‰I;WߓMÔ4ëMN×ė×q™"Č8ÜWŸÂĻ-&7vŦdjĒ‘_isB€^<Áw åЃģ>ŖÕ(õ+éŧE,sę°ÛE ëژōeR:úķŸÃĐÛiVVsĸ„,¸ ŊØŗcĶ$ņH'ĶeÕDe´—¨7āēŠŽa4ÎZÛS|ÛÎuĨÛŠ=šRŲ3œdôæí9OÃ\Í%˛ęGq:’Ycįo#3ŽkĒûe§ö™°RĪ•æ• Œ ã9ĢESŒč;ĶrK š|Î*ÖëĘąš’+ۙ-­õ8ˆ“{7îČ\ƒūĪ&†ģ’; HZ^ΰ˙hĒ´Ųghâ r3Î3]§^Á¨_\ÜÉlcš`á"+´uö˛ŅHĀįÛ­74˜šnŒ¯¸“M;ŲoHÁ&‘ œz õõ~Iå3$1¨ ˇs8Æqū?•NTØ➠Ēôük6îËZ"VGCžGSŽĩÍøÄ\\Z[ÛZŲĪq8™%ĘFHO95ĶČ û´ 1ˆöĸ2ŗ¸5uc›š‚ī]ÔlŦ¤ĩŗ´—Îc6;pņÍP‡OÔĸŪ-=ü¸õ¸û;dd1Î285Ų°ąĮJ\ŽŪØĮįT§mãÔĀŧĩģ›DˇúdqJ% äîS°düŨ”žøæŗė´­R/ėŅ-¤`ZÜ;1iW•9įū×é]`3QĖpØãœRSv°rĻÎz=.ų–Ķ÷P††ūIÎdč‡w?Úũ*¤z>Ž#äZĢϤ×*N6ņĀ÷ŽŠfCŋ ĨA랇ŊGqp°[5ÄJfeUųžŠŠąrŖ›}WXĨŽ#hĸK™$?7*Œ0@;xæ¯øMŋĶā1ŪA„TC ĪŽėOō­su ļT^FT°gĨ6{ÛH˛˛Ė‘°]˙3ĀīG3jÁʖ§?Š˙d%‹Ml$ļ¸Ya9l0 I Į{T‡LÔbŠé"¸&žāL6Ģ`. útë[FúŲŽÜM™—zĻī˜\TMyg—"ę,Äšqŧ| zĶæaƌ­H¸Ō  ˜¤ˇVbĨcÃN~cžÜĶ[ÃŗËČ[ôũõÚŨäŠqמ‚´ŋ´l挴w!ķ‡Íˇŗ})bÔ--m­DķĒÜąUōŸOQĪZW•î[ōømŽ%ģ’[æŨ4ë0 ųĀįžŦ[ëØíu[Ųb6˛Ëëļ ď&ų@8$޸ސx“KiÚģĖW(yûŦ;TČm5(ÍÕĢGægh™P=9ϤץŌ{ÛÃąÜŸí3ÆŗĖˇ-ÕĀqŽyíDŪ†a{›‹ .¤Wa¸`㑎:tüĒ!Ž:ún•$ą¤+Ú}y˙=jížŗm{n1‰ŒBWÜ §=˙IķĄûŖcĐaūÔ]FY&’á3d/=Š%đô3 Ĩ’ęãmÄĸfhà c8•6/iÍcsuJ`ĩmŽŪYäãĩD<]Ļ<ĄA™˜˛( 'wũ(´ÃŨ-ÜčR›—˜Í!¸*ÍķŸ”¯Ũ+Ž˜¤ ŗÅl&’æF†O0HōÛŊ˙+Y™S?‰Ŧuņ-¤Ú„vÃ<žfí˛…ų>QĪ=é''°5ōxkNtc” ›íˇßõëDžĶgŽPŅČ<ŲDėË+ŧt=x¨mŧWavņ¤)6]dsōũÕ_â#ßĩFž'ŗƒBMJV˜­ÄŽ"G#qäāzÅ;L^éwûÂKgŗ– ņ9ŪėėK;„ˇ\Ņ/‡tÆĩ’Ū8|”•Ã9Ę’GiúNĸ5m. åˆĮįÁ3œ ‘ÉŦ}l-įŠtĢō ¨ķLČG@qīI)^͍Ú×7Lą[ŦŒöđcb8ĪN{Ōjmާ Įum­š ’Ŧ‡Ô\ōjMŖ_ë ˛KqgĘBûŠČßĀ įŽ>”Ų|cvlŦgM_2âg‰Ŗi~îĶÉŪõ\’Ũ š;3u4+!­ŪÜI0‘„„ÍęI9ÍJúe¤Ĩ„–°ÚĒw(9? Ö—âų¯n!Ų¤i$2K¸>IØ{{{šĢ‹4ûk¸ėĐũ˛âVhüŌHŋ?O Ŗ’aÍĒm2ÍŲŨíĄmĀ,ƒœtüĒSekö…¸0ÅįíØ$*7cĶ5ČÜxŌęÚ6gˇ„%ĖM<Ē­¸ĒŽ€}xæ­Į¯ßOˆĄíÕī˛ōČTáGPŖßgڏg į‰ątl-ŪŌX­Ä›"ˆE[¯?ÎŽ}ž=ë'–žb +Qí\‰õ;¸õ荁ŒÉkošDœå܀Î?[ūŲÔ&×ŖĩŠKhíí×ũ'Ūs´ĀôŅČípįWŗ:dŠ4F@‹ƒÔcƒš`ˇ€DcTHâB€=øŽ'MņN§-ÖÛώû8ŽiČU!™|¤z ŌGĒë—‡¯.dēļ ;¤Q$K’ģŽ'בMĶ’Ü\éUöŸ{,‰lÉ @ Ž9œr8Ģ˲Bļ[$ÆkŋģŊĶ%˛Đm.ĄIŧąēwŒ3…sŸķŌ§ÔĢy¨Č/vũ…_mžŅĩ‚¨ų˜õ'Ĩ'ēeÔë"–9•š)Æâ RvŠ2ŧęûR’îßBˇ{Ģ›csēY ŧX;‹|§hÅwëæAl¨YĨ‘Tė9o|R”9G\z’dbXösԚĘۀB89ĸcÜ:yíëNdVÁĪ~ĩ™c$%"bqÔw¨âfh•Š•-ÉSÚ¤sžƒZjį'ž(“sÍWʓÜdg'Šą+`ũŨĮéŌĢļK)ČĪ9üiĻá°HæšĢ•8ëëR°-Ô ã“ęj%HČ튉ī­SšE# ËzÕz`Ũ×ŋNS‚ĀN(ĨĮSéTėđ5ˆ}ō?Jģ2‚‡šĨkí{~ĮæūFĒ"gNœqSãĄĒëœæ­ ;s~´rū!˙c˛ŒczƒųÖĸŪoØHmnŸ…møƒ-Ĩ7Lo+RR$ąČĘícüĒŅĶ ‘ĪũæˇãøG?‰ŽĢ Ÿ\āķ‡8ĮûBšr|ƒ‚NŅÆ~ĩĶxMļø†áŊCņ˙sØžŒī•p ÷Š~v ƒMë€Üu§Č&ækbÅË=})Kc‚NzSCmeB2ØĨ~0@8Æpi’5ōČ~n22(Ûûß0¸â†#YûøįŠxādŌFŸ$āœã°§äन3ŧą>´ō–cqéLŽÖ’8ÛËđqĶ”íŖn1“ÛŊ##avnę}¨×SŧaĀrCsoŨŦ°NŠŅH¸u'ŒT냿īĪ4Į$ŌEų`_j.2ãđū–ļbÜÄ\ •˛1Ķ9îi‚ÃFŋšmĢ ¸ ˜ŸģĐžĸ°4+GšĮũ æ=D"œ@Ã!Ļ8Å^I §ö“#“vŠmũ;9āšÕ§}Ė“VŊކ6Î+ÆšŽ˛ā‚rAœ ‰ėôŲīį“n÷Q­ rŸCīŠÍm[QIī‹aomt î`ØīØüÕNKëģ?í2BĻ+ø‘Š åĪŋ=}Ē9[{—ĖģAk q1GæœĒģÜúÕ9¤‚ÖîŌ<ų<´*ŧŒķųV-ŪĄzļš”KzĨáģTVĘŠ)´ ôĪZŗss Xh׿ã!Žc!䓐A'ķŖ‘ßPsVĐčgÕ,‘íĄ™[2ĖaBc$§?ί’˜ÎĐGLãĨq“\$°ĒOŠ7îum‚RT”R;`uÅkhw’FˇÖ÷—‚⎄p\>üōņÁ ņC†—ž§DŦ8ÛΧĩÁŪĮœ`W(ē’Cãw‰õ)üŖRQ\ô°äŸzĶ×{i,YpÜ#3(o˜ųĀ4œ-aķ-M1H¨'ƒN Đ3ƒŌšë;û XšÚÂōŽgXŅZ3’ÄrpObĨÔá‘ĩŨDˇ™–9$:JãæüqG.Ą} Hĩ+)oÚ˜d¸_Ŋ¸,? ē#k…E/ãXĪAž(".žyŒ bĮærqČĮO­v|˛]ۙ%´–ØĢ˛„”ŒņĸQ°'}Åžž+Ki.ĨlG–b{\čņ5ÂYI~,í’Ųq#ÄfÄÅ ĀlcöŦø‡YĐDwVĄrĀȟŊX”ąŒ{āqÚą4Ũ>Į[Ŋoŗ_yÖÁÎŌa^mƒå@¸QÜ÷njŽÄäīdu3ëzt Ë-ÔqŧjŦęO*gķĒ“ęņޞäęvëkk70”ÉôįúV%߃īnuy/žXcx%!NvŊ;r~Ŋ(ŧđ–Ŗw%ÜĻęŪ?´]yÛW 1ˇˇ'ēsG,;ƒrėnjí­­Ŧ*ŗN’Š‘K’P ’sŒ Tä1^ÎņÁs!ŽÃí 7asž¯ŊKŽh2k 1Ūy1("DؐųqĮJd^rņ‹Ķ)[F´lF*{ūTŽ[\ošåR—RĶ㸚Ņíŗ‚ĄØĀ€sôĒkâHŠÜÜ4-°lŨ6ģ)ÁuäÕŨ7L“MąŌŪ=Ō¨ ĨÔ ĢĐ+&/ŦztÖm¨ĘĘė­Tb0ļ1ß$÷ĄrŨÜ5? :}­ÚX]q#DŠ@péõÍEqãˆ,¤]YÜ-ÆÕ>^öĪĩkGĄÁØŧ“K;Z(d9Ü[š÷â¨Ũø:ÂúųŽî$™äiDzŅ~•IÂú‰Š“¯ˆVMfKĩžA–’U( goÖĢé~&‡U‘ŧĢiUR##eĮ€u?Zˇ‡­ãšūE¸¸ÅØ`WîûÅ}Í áŨ>ÛÎ0‰ai"XC$„Uė=){ƒ÷ÄmZ{ K¨X^XĪ”nëÂū<ŠÃŅ:5æ§rđÆ–ąlŦ.îŋRIëZwÖS•ąŅí-dŅKĻRFŨŠŲ#ŽIÎ?:ŧ<1Ĩ2J’BŌ §ûDŠėN[ŸĶž”Ôĸ—¨ŦŲ…7Š59´Ö’´ŽgžŅ|Œc$“úf´^ē˙„†1 &ÜąŠB Čp›˜aĀ­á­&6…ša%3“įšõĢ ¤iíq<ßeŒË2•v#’_Γ”;Ōîgéúœˇ]åŨáŒ,2H(ûĄIāžįŒįŪ°-ĩ–Đt™î.-âyb@ĮÎŌɖ9>˜5ĶjzsI§ŽŸcoÁ (íģhAžxĮ'Ģrév@É-ŦNŽá˜2ƒ–ųQÍē›8;~ø˜ęĻHeŧs´Jã`Q‚r}ēūUšöŗ4Úeē][gˇy%",ĒáoÔ Vėz–¨ņ5•žŲ{ŠQ†aĐŌ^^iZ}ė+s,QO*ųqņÎ3Āã Í74öBQkvq’øŽđę7:|W ģ]Į-]ŊĪj–įÄÂj{¨Úßí.ą€Čƒį$˙ttĪzíãĶí#t–;XĶ$2 ČĪ^iŗíJ6ņ Œl ÉsÅt+î`x3RŋÕl'žųĨbeųŖÚ¸Įđ㨎Ĩ~Tœj4EŽ0b1Ņ@Å;9wÅg'wtRVCU g­rū0†îsckf÷k,ŽIxIÂ($ãŋ Ž¤°ÁĮ8ãŠBÁA,@ÔŅgpjęĮ¤Xę§Sļ–S|-„Ļā‰ü¨29ęOĨ-ŒēžŠâ‹Ģ‹{•ĩ-#"rNJŸzín¯bļIˇ)fŠ/4Œ1õéÚĢiú¸ēŅãÔæˇ’d-åcyĮnkNvõąĢkœ~ĢĨj7ÚÍÜņ›ÔGaE]Ø@,˙OOzš-7RMäų7Øŧē\¯™™ŧœuįž˙Zī rį§G\ģ—NŌ§ŧ†4‘āBåXzRöEaō-Î_UŌuOėõĶ4ÛV$˛d3’r=˙•^ŧŌîįĶô›A gÉxÚe…PŖ8÷æŽ[k.ŗÁÚGĪnnQã' ÆāAúÔVZƒJ–ú•ÖĄ6×J|ĢvP:Ÿ—æëœSŧ…dc]øfîķX7˛C\̰2Nœ¤ū•­{ ŽĄâŽî Vˇ†ßždbzč:ū5=åËøšöŌIˇ[Įo{@ œįžŊĢN[‹už+yfEšL”BܜԜ¤5r–Úč›Sģx‘/ĨܰJd=qü#nQ´ŅŪōßVŽŅ-‘ÜĨŠāí]ŧž=O=}EwÛ°62Æy#ÚĢXÚYé6ÍdšG.äāž¤“G´aȎY<+¨Ae¨ÅæÁ#Ũl<ĖáP˙‡jŧžš>$ˇÔe’ˇ‚DLt#Ņ{sÎk~Û[‰B[ÜA)ےÃ=xĢDĮQCŠ!¨#OŗšiĨ…™įlČi ųsūʎÕĐhÚZétV‚W”¨ÉvĮ$œšĄuĒ^ÚøĻ YLKcqylîŪpNj•ÎŖxt +ųįmæņō2ģĶ~0@ëÅ7Í$“dŽU˛/ŗŲŪZŊáŨupdwUįƒŽzņÅVhl'˛MFR“H–ÚŊÔ}E\¸ņŖi—æę#Uí‘3Œp{{ՍGU]>(ášCq"ÆžXôÎM+Íh;DÎļđŦpé×6?k”Á%Ā•†ŪĒ?„ũqÍ>ÛÂvÖō[ģĪ)ōäķÜtŪãîäúJ°šü?c2ŧúUËí[ė÷ZÁl×2ƊÁxIĪni^_xô*Yx?L°–fĪÜđy[‹ô`‘îiĶøCKžŌÚ%Ûm`ščz“īŪ “Äōl´’ÚÅä72´%˜ŨAƟČĶŽļlgÔ䏺ØđÅWÜd-”CĄéél›8°‘˜€ĮE'$~& ąžŊšđI䋛i6+&vļTã¯zÍĶŧE{r’O$QiĩÔaá ' 9ôĄ)w Åt6äŅŦ$R ”<ąGŨ8öņĻŲ­ėw"Ū!$qųjøûĢč+ zå^ÂWx&Šö&”¤c 8ëČíJšĩܚ7öąŧļōŪ ËLll×98éõ§Ë æFúéļĻ÷íÆŪ#sˇo™˜JŒA`odO*xé™HO™—§'¸ŽeuËųtđŅŪ"L爎fhÆv1‘ØķúVŒz”ÖZÍÂ__‰ ‚Éeså€wdŒņôĪãG#26>Ëci ŗŧPF…3Ø0}Ē„öy-¤6ą[CĻBë6božG ` c<į5O_Ô­ī´Ģ[xnŨJą+įgV?Å%¯‰Gö”ļŅ,dļY¨ûĘOļxü(Q•ށĩąŅËo Lŗ4Q´ĢÂŗ/+øÔOen˛É Š!æņ'Č>¯­sø’ņ´ay Åą’åŅ#aũŅ<‘ūŅVãÅZ¤ēcOg,dŧņ+¯Í€9>*9œNÚHãRŽĮ"¤Ũ¸āu÷¯5¸ņvē¯īˇÛ%ÆÔ)K(āāz{÷¯I]Ĩ zvĨ88jĮ )l! LúP¤…9#Ŋ5™wĒc’23K• /z˞9 *nĪ#Ō„å;gŽE=°ęx'ڙ娏 1”­ŊīŪĄTØ9äķÉŠØîˇĸ™r¸S‚{Đ]HCž ã5]œ×q’*w,õ¨$Ágüž”Â19íTæĀ;zŸjŧãrúU%Hۚ§&ādsŠĄ+ŦZãģäkB`6ņĶšĄ†¯fÛ#˙5QÜOcĒ^@ĢQ¸TâĒĄŨа›JüŨh åüDâN:/īĄŦmF-`ˆr0üúô­m|†Ō#'Ą•súÖV¯ģÍąoPÄ~•hé‡ÂŽ|¯Í'øGãÉŽ—Ã#ū* Œs ĪüW;"€mÉ<íū­]…đ‚št~ôĐBF ß8æœąŨļc €8Ī­2G¤Ž֚qÄqŽô>ã÷zzcŠNĢķuō b,€ŗ* Įķ 6ãŒgŽZC…PFNjp Æx+ÆÍ0Rx8d‘ģ$p "§īg#€§Ō’ä;ˆė;RâwŖ=ŗM•|ČZ2Jļ8dę§ÔPøb2ŊN 5G\ēM;C웕Ų ƒÜđ0~¸Ļ•Ū€Ũˆô9„wĘ'mīæ0?7rM0čzd†XdW-q'šČgl’ú~•F õĐ´-8_É4×m‚TĖKdāį§\Trßĸx­å6ī#ĻËDÁû…˛ÄũqÖ¯–WnæwŠIī é†I™­ÃœI&įcš‡CŒĶ$Ō,1rZŌ67'÷ŲįÖ¨Iâœũĩ­ė¤‘mĸiË$ÚÛN={Ô^!ŊŽÆ9cŌ˙rAˇŸ–\e‹÷{Ƨ–e^˜ŌtôâK+-°Jųc3ZikisK-ŧ.‘ũĐČ_§ĨsŖZ¸ūÔ[YŖ†bˇÎė܌ņô5{QÕ¤ąĐ–îËʟ͕V1ģīØcŠŖ–Wqé–%´€ÂĮ%LcõŠ–ŪŪ(VbŽ8Ķî¨Pú ådņ5ęibEÉ$ĶH#rr¨‘Œœúœ‚8ëTõ_ęp]ũš/ŗŦ˛[DpT’’62=Ī=*•92\Ō;k››{WšwT,ÄsíõĨ´šK›q0In@’2§CŌąõTZž—e+å5ÜˎģđÜJÂĶ5NëUŒ´—OmûۓˆņŊB(‡¯š¤ŖtZãm$~™īH˛ƒ‘Ö¸ŊPžÔ5é¯ī'”F‘f;%€AĮĖŲīÎ=ųĻXZk’jŸj“íÆ Ĩ’tŽGĀE B†÷'…ŌáÍ~‡nŌ(=zˇ>Ų¤7P(!$[ŠôŽßOŋ]*ōō[mAŽnäEž2JîËmqÛ5fm{­CH‚M9áĶb‹Í0Į'É™$î'“ÛõŖ‘wg؛Q{SĢÍ-†“i-Н!–yķ‚ävđ9=*ôVv/}kw~ö_nķ™`’ŲļyƒĐŒōzņĪJİ/w{o˛"|É.īUO?qA5rĮAž,ĩ„b;[FåØee'=Ŋ˙S͍•ßCĨŸRŗˇ—Čšâ4—irŒāøĒ1ëļWVąOisŖĖ!ßnNyĮž9ÍÚxYƒß]$&i-ĨČ2gsœãéÛÛ~ĶÓų:(•-Õl‹<ŠšÁ8#ÔûŌåŠęUäúמ%ŌtۖˇēŧŽ9•wl “Â›ˆt‹Ŗ?—yōI# áWëYĪ„įÔõĢŗ, ųŦŪ!† ûRx¤Ž&Qļ7Âŗdā{sYrø´Ļ”—˛éÎŌO1ŽŪ1ƒÉČ8Ē~,štČ4+XL˛Ļ3ŧmPŊ‹g¯wOŌŦĩũ2Æfˇ¸ąLŅU°;nî­%Ĩv6ÛvL}׌…Ĩȡm:āĖ#ˆČāŋc鎔ŗøŠSw ”;fļ1D Ėvģ;zįW¤đΟq<’ĘŽėķŦÎ đJŒôöŠÃZlW&i.fšc“rö7‡aÚFM˙‹å´Ŋŧŗû.ų ÂÅķs#’1ĀzÕí3\“PŧŧHã_.Ū4%ŅŗŊČ$ãļ8ëSĪáŊ*ᤙ­™ĨK–?1?n”ËAŖ[ĻĄĢLjÛmʖ<0=šā ´Ai_Va7Š$´ŅRæmâ¸ģ¸•”Hė˅õ÷<­IĢx“VŌä†9mā‘…ŠžbšxĪ<įQëVZ¤z…Ĩž“¤D-,NøšVHîšãëÖēˆôĢmBÜO¨ØÆ.fXĖęNFTdЏĢ;īlaÂWu&Šee ŧ,ĖąÆNrã'o°5Ė–ĮPQšÕ.\$ŗŒŦPĻzû`gĻļĩ]*MĪ6—mf.åŒÅ$Ōd0L``ÚŦ.fšmĨ¤ąG:YĒ„ŪšÁĨÍh;Hį5¯^YK ĢÛ´ęč—3˛ ˇĸÖļ›y>§ŦęņÉy–âqÉĪæ? Đm*ÆGi$ļ€ģ¸‘‰Œd°čMZ‚Ō iĄ‰#2ž÷*¸Ü}O­'(ÚÉ•ßs#Â^oödģ§Ib7”‚O0ÆŋŨ'ÖˇŠļAĪÔ1EĢ´0ÆąŠËEĀ<ōjʀF 8Ēģ¸Ō˛")ƒŒžĩÉxŌ9î§ŌŦĄŽæA$ûĨX QŽĻģ_ō7QO$vđŧŌ¸TŒf'ĩ8žWqI]XáuŠī †ŧåŽ %Ŗļ‹p%TŊO5vēÄze°Œß{u1.‘*ōsü9ŽÎÎūô"18 A $EClŽkGlŒwÍ_´˛ĩ‰åžˇ(Û^ ‹›Ģ&Tû3Ūãō3ÁīUŧEæKáûÛxb’iæŒÆŠÉÉâĩHųį=…5‚ķž§Ö˛O[—m,`XØŖh‰<–Oöåļ˛?,p>čÉĀŠË}?U:ŊŸö\ER×Ëa$Š0<`į§z뤚8Ŗ,YTw$ĶR{YÎ三šÛō¸<˙Z›%Å iŦCĒŨ_Ckm#ß(aŊA ;dãđĨ–ĶS—[ŅnŽ-•Ú(ÜO$lVaØHâĩŽ/ söĨZa/'æ:Ÿj˜][›Ãn&ÎQ“a>”s0˛9$ŧÔĪ‹cš{ €Ĩ$ŽÁ\ĘüĮšé¤ķf¸žÖâÚ3gåŒ9lī'¨"¨\M5ΚqŽĮô&—YŅäžĶÖÖT…ĸ‘6a6žOˆ4™–GŠė~s §;1ÔôméÍn.LŽąä-Ųāc'J~ōų ō˛„ž¸ŧˇžûEÜBæņQ’<Ē*ôĀ'$û՝CI¸žŽØ=āFˇ‘$Ü#áŲ}ŗĀŠFŋ§­¨ģķcKäp‡*įąE6_X‹e™LĪ™„D2šJ/1Z%i|9į,āßHŗ5ČēŽEQûˇÆ:wĒ÷•ėä_;\Í*HĶ”ÆŪ*ķjŅ ‰›–ĶĪ6æ,qžŋ_jˇhŌd˜/ŲžÔ­ˇ‚œt÷ææ‰CQđÃę70NúŒĸDUØB)—œīVn4›‰¯­ĻŽéĸšUn0°#W4‘xĻÎO,%Ŋۙ"ķcķ/r>•Ģmwí´W1ĘĄ”ãRnKpJ/c-ü5ą[¤w—´2´å×nZCœ“‘îjÅĮ‡­ŽĻģ’i&“íHã,€:ĮQũjŋˆo 2iö  ÕČIˆ?Âp~¸ĻYkVCn–ē{ŎmnFGĘÞ=ņOŪjâ÷Są(đôŲ'ŧž‘RE”;IÎGNŨ=ŧ/Ļˎ@‰ŗ<‹#4ä2ô#Ō _¯Ų¤’[9eēkd‰[qfyĮNĩdë‹mĄžĨ5¤ą$yOÜ }M/|=ŅōøzÂK¨î™fķ‘Bî0ߎ›°yüh>Ķ]n⑄î%“t͡­Rm~ú9ī"›ND’Sr¸›;Ā=:qJúÜōÉqŲcd6?iU.~n9Šv—p÷MKM.Öŧšē`ČŋnĮN´čėm,ŪyUÃy“xcŒVúôöZmŒÛB#hc-“HEëĮŠâ´ûD ĒĖ#ipOÜ$dJ|˛Ķ]ÅubâÚø~îw‚°y ËFĨrHöĢ÷6Vlā ížįÖŦC ÛĮĒK|%•ßzŖ7ȍŒd\VŒ¨ål1ëTuŠg´Ņ/.`SįEeã<ŅÍ'ĨĮË­ŠpxLļŠæÕ c><ÍŌeąœāz šyĻYŪKÜBŦ`ûœ;vīČ™•§Ũxq\F<׀Kö~pûsģwÖĒÚkĸéʲG”iÂč<€ä°8įØüé´ÛŊĚ[ŖQôģ`n䈞āa†î=íßŖ§höļzmĩąO1 ų¸čyįõ5Í\ë—P‹ qlĢ/•æĢgvā˙ēŠĢw7úŗqâŊ†8Ŧ˜Ņacܧ9ū”r˸9Gĸ6§Ķ4hÖŌÖ[k`ĄÉ‚2Ŋ8ũjذŗųæŪāîŨŗœãĪ­s‚ęá´];í7Q^Mwp„LȈíŨŒ/~1øÖΙŠË=•Û\¤{­ĻxŲĸkäƆšiØi×g[šÔ5áŨ˜`X”Œ&ėķžũ?*˜ßĖueamąĀę—_nĖķ€1Î8÷Ģ:~ĄgĒŲ}ŽŌPņ1#8ÁuvŽF+ƒöĒŦō4GUSpč>,ž˛1Ÿji_pŊļ:bøØZĮ*F% \’U‰éĮĄ?ĨŠę;ˇē4Įˆėn­Ąš+‰ĄVbÂ~rN02;ã¯jŗcŠÛ]^\[C įĘ%^Rŋ)aŒŒúķYđŽęÃG‚ĀIf Ą4Raō†-Ī…_ąĐŽ ņ Ƨ-ĖAdM‚P¨ns–õ=ŗCQļâNFVƒŦ=eĩžûS¯Û¤‰.AÎŨ[6ū!ŗēÔeą‰dwP˙0_”•Æ@>ĩž|7zĪ,Ow°’đŨyars3žœU˜t;Ë;—’-DĨŖ3ËäÁ!Û߸į8ĄōŊFš–„V+wąË§ËW!üš]Žr8öZO6§aŠ ;”1Âīå~VĮŪÕzÛÂĸlę2Čļ’ŧ€Ŗ;‡ ûr:l–ŌŌâŨ5;†ĩ’6HâĀ>^xëߎ(ŧī:%äV1F÷:dvátī´4ČŲy@#¯Ôœķ[’ę÷ÖļņO6ŸG,ŅF„Oœã'ŽŖŠ đÍž#]O*Ghmv1J\§åNO ÛI§=„×—sĄ*Už\´{Oˊ‹`”’ąQõÍJ+é^ÚŨeˇģ3 ˍ˜yĮ'­mYŪģ(%/ ™ŖDM‘ĪqíYãÃúS›‹).Ļ’Ye:›ƒŋ c<|>ŽßW†ęŠ(mĄōQPÎ1Ņ Š|­ ^äZ†ˇueŦÛŲÄļæ’5pI.CgŽ~ĩ‘rÖ7^#š‘^"EÜ1´vŽ‚ëÃÚfĄtg¸ˇ+ī#ĶĄ§OáÍ.o8ŊĸŸ?BIųąĶŊ5( iŗ:įSŧŽ}Umŧ—š(âhFĖsœķÉãŠmƯs/… í­úƒĒ™„;G߂¤đkdčšcŠ˙D‰ˇ*Ŗ0Ŋ9öÅK•bšią[X…ŗg1ÁīKš=‚ĖįĩfķLžKûwd´š– ø$ķ…ûÕmOVÔ#›W6×čąŲ¤RĒÕ˛¨?ã]+čZ\¨{jykš!zâĨX+ ( Ė6HÛÎ;íMJ+ šYÎÜë7ļUŒ]Ãrņ¤2Bî Ø$Øpi÷wú•ŊŊŠ:ÅģŊHŲâ pØœc=úWA‘erļtōۏ™} EmĻi/l‰mkjÖęä…TCt?˰ėû”ü9ĒIy{ĒY\\‹‰­'*€ Œã8ëšßRYŸŒ`ąŗ´•䡡Š'“ī2 žĩŲtw%ËĮ¸š“ũ+ŦbĒÛXŽzsډ!ļ–D–Hâ/ŨbŖ+ô=ŠsŨYĸš-­ÎÄ\Isg ą{Û8ŨŧØWŠ$|­ƒ×ÖEĨ‘ŠĐIibÍöMY¤0¨‚‘‚:öČâģt;S;†sÅgiÚJéīrëu,æâC#ų˜ÂąëŒĨ V@ãv`ŧŨIlŋņ,‘$MTÜ* Ēg9ëŠmĩļĻa>ã Öē7ŧƒÎŽŸyy¤Ú\1ˇ,ĖVę3ÎāXū+BMS:n›™mÅæžÃ ˜ä]ģyã â§ŌžÃMDŌ íģƌ|´ÎÜdķSh—“]žŖěĖm apéõ§);ļ -Īx‰'Ķ4ϚI#w—ņH<•R¸Æ;ŸģúքšÔđ3Ez†æK„šFxÎ2˜Ā¯j×ÕSK–ŨSXŒf@ĖÅÛ֒]gNŗ…Œ˛•XĨä1íüŠs;+*žĨi´›šīšåîbXMĢ[˛„99ęsõĒ–žÔat’Kø^D´kdVc<û Û{¸NûIvŪN͐ŋNĩ[ū <Ŗ˛ĘėĢoöŒˆĪ1úŠIĘÃ˛2­M*.%’8Ažlŧö랕nëT‚ęÖîÖÖIDâĐĖŦ¯pAüĒ=z8­´Č.–âIįļI Ēāqõ§y1YžĶNĨyd~ĐP[Iæá@;Ž?ĪįMo ‰!uûtĘæčŨ$Šooj‰nîí´đÖJ儋æųK—“É_z†ÛYŗ˛ŌÂ^Ü_Âķm‰Xf@xų~ į­ š×@í}IÃĒKŧ¸24˙iI~PcsԎ1ĪĄĢRéÉĨļŸy$—JĀîw8bsœņ͚­‰OŗĒŲ\ŖÜ˜2pr{ú͉ãd7_cĻR˜”8>ŨŠZaîĸ„Pĸø•l¤šæådŗh%y2ØÉČŠÖƒÃqa„×E„& ´¤ü‡ĩ5uÉäŊM˜āūņÂä⡏[ōm¯,ff[™"ØŌŒI$đĩ7ĖÁXž i“G:LBD!_Ūˇ E[šŌíŽ4Ķa0fˇÚB cą=MPmriâԚÚÎ67ą´ƒĖ—nÂqĀ9ëQm¯$ŌĶ눭t%#t‡ $yã§BGZV“Ũ†ˆļ4-<ŧŽđ4$bf‘š_NĩtX[ĨØŌhėØÜŒzsXâ‹†˛°¸‘!¸f Ī!¤6įOŊmO5ÄVâHdsįø(1Ôô5%¸ī9t"ĀyÍEmō $;ûqšš…åŌjqC’0fSœčk7Q’dņ=Œ1Ǟ˜%•U‰Á|ŋGoŽŨÉœ#KXÅպɃœ+Ž8úsO–M\WIØŲ›EĶÜÛĩŋÍŋ`\|ŪŋZ“ĻĄ rŅŽÅ!BôĮŌ°S^Ôn-4Նĩ\BĶí…8Āæ¯ę­Åĩĩ‚bîo$X‹“š#$dŸz\˛Ø/Mt›0ŋØíķũ×îĮÉߊ ļg#ßŧöōtiŠ…<œuŽf=ST°´ŧŽk˜į–Ūö8‹´xRŽžsV.ĩģčŦ5BĶĀÍkuj|ąˇ9įũ¯ŌŸ#25/<7¤ßLŌOcĘĪšÛĄcZč‚ļĒá@°ŽKRņ͟‰ílÖö×Ęy@t+‰Ë9ã<ôޏT# :į­L“I\¨´Û°ŠÛ“~rJlĄ*zžjMĄWāsL# ¨(…K9lŽâ‡ÆåĀ'4ü`“ÔMa’xãځĘ6Ŗ(ÆîĩųĢ ōŠIĒČK6ÆBîM1#ĶŠëQm\î$dZsŽXžG<Ō ã€h`ŠÍ‚Lv⡛Ļpü fj™ §´C$ūV‹ĄĶ ‘‡8PļųūįAõj×ŅūoeGņą#Úąå%Ū!ЁũMlh§(#=K Šlhūzre@árzŸZ‘Ø…ã‡ĨDŲ &÷ÅJ‘ŠžI9ŦÎĀ'9Ƃ1!—’j\b@ĀÆ1H]C8ēgŊ1§Ė,7cõS’wņéŠ@ĨCāšU\) 8 @GŊQĀnĶ§ŨØΖ>[@ĨOĻyī@Ää‚Ū”ƒq xĨ`:øĶ[ʸãځļ§āËåˇ6֑ŒÜ‰'wä¯$õ5ÔíHÕU@ôĻŽA!ģU{Û¨´ë)nîXŦQ ĖG$Õ6ådJIjJËķ*6õĻîŽPS*Tņę°5 ZKŨb–ŗĀ ņ!/Æäv\āũ*mļÔ5;híŖK4¸Ü I’¤ĒņˇZ\+ąŠkĄĮ†ĖPēi—’Z‚Ky$î„û=U”jĒcmKB†äĒËÚ\c*{m8ãÚŽŨk—Ëw˛Æ#¤ņÆßžä†ÆOz%×&†ÖôOŧ3ÛĖ#%æų0Wp9Æ{ôÅUå×R}Ō%ĩŅn~ĪîŸöyeQPNpėĻ>õ¯&Ÿeg1šˇ´‹~î⁒Wë7íĒÉáÍAâTw’RqĶ„==¸ĢÚŽĢ§]ŋ•6˛ÛHņH[,㑟OĻ(i…ŅĢfúâ6™il 7ųfe†zƒŒ¨­h´û[k&ĩļQ $>0OSõæ¸ë R˙Lŗ÷ņÜ(Ԍņ@#ÚAqžįŋåV&Ô'ˇŌãŊ‹^[×´¤*aŽã ˙ n JJĮMĻé֚]§Ųí†%‰'%‰îIĢIŗ$ nN+›UôŨN8ĩ•- āHŸĖUcĐvŠÆ3×Úē +[ļšK;?:ss-˛Î†EåÆ9ÉéšNr“FėŽJ8įė äšāõ{™ē“\ß\A{ á­ãW* \tƒžsLņäēŊą{ŋ1Œ3Ûmg âÆ:ŧSTîö;Âüã=9ã°Ļ’ŠwUQܞ+ĪĶÕIĮJ‹Ôʡúĩ۟ũŗGsíÎ*]fâoė&đˆîŽņnŋgc€ĖxäöõĢ’xfÆFēi ė.ãHR~QĶãKs i÷zXŌæķ$…>e-!/œđwuÍ+Į@ŗ9Ũ*[؋čpΖ—Âc$ˍ b,u@>ĩĩ­ęˇ:ZYÁkÚ.î_Ë@üI=)įÂÚP´† .#rÁŲÛ{rs“ĐqíWoôģMRÕmîĸ x( ŠŒČĄĘ-Ü,ícÕukOĶín¤‘—ũÜŅũíŽs†ÎzzúS¯5=N}w0†ÉnO+øšĪéĮZÕ>Ōü¨ã6û–4( ŗƒœ÷ęs֑ü;¤ĖPIl¤E‰Ac÷98ëĪZjQ+3-õ-N÷^ŗļ†îí¤ŗŽéąâ܀Ë׌æĄ]WSx-’+ˆ#•ĩm¤aW8ã>ÕŊ‡ô¸Ļ‚â 4ŽHT*0ėj$đö”lÚ°D!2 6¨ĮÍëŸZŖØ9d%Ž fēŊ´kČĨš'Så¤eß=sĪJÖh–A†ČS÷†zÖuŽĻĄ=đvyfUŒAØV›0`æĄÚú†d€#ˇOĨsž2ž _ ]‰¤ gŒÆƒûÍØWJr* ˇHbß"3‚ĀaSwč(‹ŗąÂ\ßE­ø^ÛFąV¸ēa3,gl[q–' éZfOø¨~Īw=äs$ą‹dlˆu#‚3œæē€ ĒĄsØqMžHí­äžyGîwnÂ­Ī˛#–ÚÜáâ3=ŨĸnưˇĨ§r§i‹qĪ'ģqŠŌ֗fĩ Ŋ˛¸¸Ķ^"”Ĩ€ž¤z Y˙„ģOķ#yîyXî%„ŦlOLëZņ™.ÂĄį¯$PÛ[ I=™ĪAoįę׿+iŌa=ŗJ­ĩ_aņž•BÂ7M:ōAeŠËuöuIŖ”Aä'¯#ĩv6ķ‰áķ RE‚WlƒƒŒũ8§2…W98ĨÎ>S„6’dI ÚDŦ‘ę 0ƒËāÆqŖ?^)ú„ÄęikĨLŅ]ÚF"TˆŦ3Áô<Ší‚¨üĮŽ æØy=y§íš[ėWg^ŗš†Á–7T™J•P‚;†‘Į_é2K¯Ku.”÷ë"ĸÂë.Ī$¯\ŒôīšéSī|îęŖ=iâURĘ=ā}ŌØ9ĨÎĮʎ:ķJŊ“ûE†›ōŊäwĘíĀnüƒųÖŽĨoyqũ“46$ŧW #ĸēūėm ōqëWmĩd†ÔĪ$1ÜKĪ–˛äõsí–ų Ķ ,v¸g>ŸZ˜rŖ”ūÄÔʍ=Ąƒėņ^}ĄnƒáˆßģĮ^Õ<įTŌm¯įH!ķ&ģķ"O™Ė€€6Œto›¯8­ÍĘP(\Ôß0´zTķËš\¨Áŗijfēx‰1ŧŧ0'8?hŨXÛ]Ím3Ä\Û6čöąāãdiöņꌡ†-Ņ€,H‰Ũųâ´gÔŪ ņ§Ú[ųķŒ­šö\āsƒÉ5Ošû’’įJ‚ķPŽöH¤ÄĻ5o1—õĀÍB|1¤ĩ­ŧM1Û11ūņ˛šëÎ}ŠÄ-yöhŦíÁ¸š”ŦĪĩPŒįĀŅÅ ī$4€Œ’ŊŽŠ­w>ĸđÛŲo)ägįĪប­ ÷JZ^˜qĢ[\iŒļSȅ¤ØzįļkXh:T°´kelcwD9#ŸĨcYëzƒĩĨÄņÛįģ{mŠÃ°Jzk7°[F!‚Ņ&“Pkgë´ryãŠãšĻĨq+Xܛ@Ō§f–M6 ]ą–eœZēĢŅB€}rrxT´ˇg™-$HoE´Â0Ā‘Ÿŧ2xë]vāŒûTI5šJŨå}Ŧ@'Œôģs‚ÄŽyÅ=Āqœ`Ž2hpvãšô¨(ƒaķ1Ÿ—ĶŪ’g1)î[ §“Čų{Zdą,œ­ĨØÄ`Ž1Q:Ûō1ŠĘBō2GíQ:ōÎ1ëLŨžnųpĻîäķĮj{dœđ6Ķ2cƒĨFËÔ=ōjŧ „ÂÕŗ€ģRj´Ã)žŧĐ2„¤`ÕÃjvūģ˙ĄĢ“’}jŒgū&ļŲū÷ô5Q:hō1ߊ“Í H•"ŽœņÔV(įbļvqÍ5ÜyëŽĻ‘•Ž cũÚ^¸ `ô<~”ÄHv>jV| ķúšEa¸. sīCļjũy B.îņÍ8ŦIėãQÆĮ,ØÉ'ĨJOlsŽOzCĶž9íPķ‘ÁcÜ❚CŒÅ6E0Ø2;œ÷  ˛NFAāw¨ĩĩK m%Såȸ>ŖéRēâLŊéžÕåė:}¤—W V5ÆqԞ€ëšj÷ĐOb”ē¸ĶÚÎëPš“sĢ Õ+ˇŲŠāŅĸƒRžõežP7+?ɐŨßYCÅ[šã~yÁ›åɀYsŒŽ~ĩiü@–ķ_ ­Ų"ˇfÜ;Ãg ü*œdJqܒ_YKöŋ2[–û\‹$ŸŊ#•éŒtíųS.|?ĨÜ´˙hG˜LČėBrĘ0>œUy¤gíIBãsਉU$Fh*…ƒŠ ž¤į\FĨ§ žŸec&Ŗ$lĻU”įvâÃĪ`<Ķ’ÂqŠß8šÄ[Œ0‡8‘ŧŧĄčĩ7Ü9ސJ“C˜Ü:ŒŒŠĪ?Z’aÜĩįW:&§†ôÛ;k+Ĩi÷ĩÄi'&B>RĮ°Ī5ØMĄm᥉ķoŖ…Q7ŧĀO?Š[1)7Đŋs{´ÎK¸ÍsúˆæÔ/.äÖŅ ėÆÖŒ’rO8“īX6š^ĄĻišˆž‰Ō{ŲŖˆĘŌ†.€Æ>„Ö„ÔWHÕm<ˆL×7Ry cã$ú:UrÅ'Š.R}˛ßP´ģܐÜ$„"ČB7E=éUä×t¸íe›íQȖįl›[q z­sž×lt‹Ø"–!=܈…ˇäˆ×#¯ĶSėü!Ē%´–˛Mj‘Ŋč›p\Ģœ{zqK’ĮÍ.ĮO&ŗ§[ĨĖ’ÜĒĨąbxØHČZĸū*ŅãØMįGæĒ…bYsŽ8ëíXwÕdĶ#ļYāšFģk‰Ãįiwūö+vÛ@’-fŪöFˆÅ°‚$Tۆū#Š-áyéË{%¸•ˉ,í8ŨéQÃâí&æđYÃtZāĘbTܰūžõ™ƒnNˇĨu¨e§tUĀ'?(…[ąđŠÛŪA{öĻ3Æī+ o‘¸ÉöŒQhwxĐŌuË}^k¤† ‘mä($uÂŋ8Ɵ¨5Ļ͍A•'č+?HŅdŌôv´{†¸lŗ?/-ÔJ‡@ĶŽl4ւîRÍæ3"™ ėSŅwŋũz‰[VŠWęd_xēię>×1.b[Ļ”§ķĮ=Ēī‡ĩ—ÔV8ŌávÄ3rø*äpŨy5˜žÖ"ķô觲ūÍ‘ŲƒG+x  #‚6žÃŠ´tm6ÄŲÜHėĢbŒ#2?ĘģēąĪzw‡aZ]ĖkĪKĻÎÖMdŸiXŖÆdÎé_(öķíSßøÆKMZK§hä‰wų œãŸJš'‡´;‹Ąu>Ų$¸e dáØõgeü9Ĩ=ɞH÷HgûAË ã#Ûĩ‡T;H‚ĶUÔ/|OulBtësåŗųÁœãŋ\WB@įVnĸXŲ]Ũ^@™¸ēbŌĘ[$ķœAZ’pI>•k ÕŒ8ÎqŽÕÎø˛wˇŅąÜK ‰SiC‚Üō?,ūUЗÜČãôĨdRšã‘I;;ęŦp:ÅékŨrH5+Ĩkxĸx%!Cã`u?:Ûņ$7ŋ‚Ĩû02Jņ¤…FFüHÅoĸŠ Œn#ž)čÃ}ĶëUΎ‘<ģœvŖŦišĪ…Ĩ´ļp÷2Æ"KlaÕøĀÛÛ´ļ°"kÂÚæyŨ­ėã3W\úq͚éâæîP°âP ´žVgũŽæŦ<žUģHU˜($nj“øwŖ›K ˇS†æčévæŊ[eža<ĒŦÍԔĪ|sSÜ[Á5ũ¤noįŒéėģØ8%ŗ•'ø5Ú+nĀ+¤`Š@˜‰įsų)ÅÛD^ûEšūÚįĪk3b‰CŊÄķÅ?ÃđcRå/ŋ´x™qÉõīÛÔM)ŠâŨrļōAe'Í=ø^¯éMĖJ:œõÄ“ę‘Ëe<—’ÉēÆå*ƒwđāį5n 5ûéfĶd4I‰LyV`¤6ŋēDšāōAĨW‚YĀįĨ.qōœmĻ™,qč3\i/ ‚7…Đ &3¸mb éÁŠ%ŗŧYgŠ=5ʍM.R@nÃˇ8įØ×\@۝ØZÍÁrš9ã4sģÜ\¨ÁŅŦîĸŊŋ’æÅcķn Į0ÛČ ĐįļjĩōÕÕõÍŊŔŒī6ëkä`<•ĀĮ|đ{ĩĐ­ÅžÖ <ģl8āûŅöČĖcqX› —ëéK™Ūö•ŒÍB(Z Û4‰Đ’͉ķØ˙OƝez5[kûXŖ#â’'m¤n ä~X­H&ŽåÍ‹¸üĘŲɋT–úyŧ‰mãĩŽäۓ);Ĩ s´įŽŧ}(ģnáĨŦdXÚŪIĨŲÉi LöwĶ6 `@8횒=#VDpļF72ŗî'%'ƒŽ:ŠÕąūÉĶ Ųov…%˜ŒųÅ÷IÜdžĩ;ęÚxˇk†ŊaWōŲķ÷XvúÕš;č„ĸēŗ*ßJÕã›HyžĘEœ-ísķd`vôœšúøZM&I ĀH )lįëÍo,É4+,.$—(Tįpí\Ū—â9ī^ôŨEqÛĄw ’Ņā‘´Žü äRNOPi"ŅŌoä{ŲáģŠ §ļŽ$dSō2œįņÉĒņøoSK)Ą:Œ/žá.4Dᆠī܁[ö7)sn˛ĮˆŦ €ęTãčjŦ~ ŌexáKŦŗJcSą€,;gÍ$å˛ĸC—i¨\ĪozŋgšO5ĄhÁ!°ÁĪãŌŖļĐ¯míív^Ā.-åy7˜r99Īŋr-nŌ_9”Ę#‡w›#DUTŠÁ=M]ąo7į‘Z2:˛Ŋ’V”ÜŠtUuYHˇîŸ­Pd}Ä6+k$ĪeyšŨÜžÆ9č)÷ŅēŅįģ{ <ˆ‰DáYˆb§§Lu§ītbĶfjĮĸZ}š/_ÎgŒ’ŠŌĒqŒ€{â¤:§ÛčYG9p…cŒFzÕ9uī+WtwŸ—{ ĘĻqü˛ Ļ\ģČ^É1^ Go7'$€÷ĨiŨ,ĮáŨ5!UH$ÛŪrŠ•Ž×­/ö đ?ų˙ë[ũg¯Z˟Ä706Ĩ$öÉö{I6 F%œņúŌĻš˜’m,Ã$ˇ $ÆCwéØņNĶ ÄĶŸÃš]ÂĖÛpžO5ōí†o^ĩĢj¨¨Œ{W)sâ]FÖÖâY, Ųkr ˜,¤“œ`¯ũëĒtųZ™&–ŖMtN8ÆyČúRlmŲŨ•ÆvöĨžÖīԘ#ų2œ0ÎxāÔG,€.vōĸrØ$ātĨōI}Ō>O`Jd˜py⁐Æu^ rĮ`Ž•!@H=ÁāÔR'?ˊ`1Čwt¨å8U õ攒¤n<ĀÅ!P9ųŽhģiÎ:ū•]ōT〠Ye˛WõǞ1‡ŋCHeˆ)–Ē ęv˙īCW§G ŋBUļĮL’#W=Ž:ÖĻUã­BšTęELʍ§ëA™™vÄX\ĻÜ%ÎOŌš+˜ÚF°,0IlôŽŖX™aĶd$€ĮääņÖšëĩd[V‘&? ¤tCąĪÎ{Aû€Œū5ŅøT,ž ģČČ!¸˙ æî•–xËg”ús]'„ˆ#ēû­Ķũęšü&ŊC ōũ(ķ Ž¤E*F4ŖivsۊÅė•ƒ*ä0ÉĻāívrĨIP{qL‘~pĒ…ą‚Fy4¨™”ŗlš*‚ō;0`€ā)íR¨E<(ÉĀl.FãÉæ¤ÆĶžIÅ&7r!r2Ĩ:sH(õĮJnX9ÎiP„íü)XŋËĩN3É CŊÁ9÷ŦíVÆ WN’Úf#8 ŠÁV ūu3ÜÄ18Î*ļĄ.“r7•a Cm= Îi­ÂĘÆ9Tm{ė7WAϏą1 + įƒŸÂ­¯‡aĆk‰§[‹yānPN ĀëÍSđöŗ ú}‚\ÅŲŦoé/{dÂĘĘŲī%t-#aƒ×=1UŽu r [5š[8Ļ’đ@ĖĢģåaÁÆqš¯ŠĢ#ŖOy¤7˙d™@›¯šĨĩ’Ų Ŧö÷Qąxâ'É*ã8aÔdŽqW\8zW#.ĨpŠ"ÉŠF¨!ÜĄAØqÆ0zg­2įQxtëø$ÔŽ?sx"Y”ø`8ČÆ9Ī>ÔšųŽļIcX^F9 īU,5[]C+ ŗ:¨“æBšSœžŖƒY:fĄq/„špÆâępY†K0Ī_Âą {{dck3Üéˇ ĢtÂ2Ín=:ŖĻsB†čö;íĘNA‡zdō:ŧ4V &—ÆŅĪ>˙JÃÕėŌûÃÉ>œe Q,0TüŊ°}@īYéa,:f8ļššoĩ­ĖĄTŗ.ė“Ÿ  ~”SÔmŗŦk¨" dž1´bX`zAsf‹ĩ§ŒMß|}Ūįé\™ĶÚ[ÛŽ’âbŌ´NņcĖRržüÔĶŲ;Üéwö:<‹—,BcT(pJœ g?>T'&kĖÚ%ÅũĨĖ÷<ÄfÜ~Vį¨Á9=kCíöAãAq4ŒV5>b:ãé\nĨŪ[Žt“/ŲÖX]r¤ŽX~ON´øôũVČ-ƔŪEļ¤ķ‰ÄŠ#nč=˛)¸­Ž.gØŪÅz,˛ŧ"õwŠĮ*Ādv&ŽÚëV]ÛÎķēBÆ:į=+žEÕa1ÚÚ§—ŠĄ™OÜ9ã×š¸4Él´mo–&áå˜msŒ2ô&ŌĻ™Đ\2¸O0mëœ‘Ōš|S¤ŊŖÍĪ2Ŧ‹ Čf§2ĀŌŧ¯åcYäÜBwP=?¤ąđ톛rŗÛŖŧˆ…cķ$,"SŲAč)7— ģąšęH ē†I‡,ˆā‘Û8М)`1Q[XZZąxmaŽGûĖ‘€O×+öŊj +™\z÷ŦīĪ%§‡¯g†í t(ãΧ>Ŋ+_q Ži$†9¤ĒŽ á]r?ZŒOc“MPÛ=āmNF„YĮ7˜ÁYŖbH8xŦąĒ ‹7ßĒ\"Ê(gķFåˆôÜzc9Žņ ‰r4ÚW :zS<ˆŒ2{[īŖšĨ5؞Vq÷×sÂúāĩŋŸ0ÚÃ$G~q×${Œũi×ZĒÍ.ļ Ô¤1 $’2˛p­Îvū;:ėļ)FPSŌ›ˆáU@Î~Tsy Ŗ“‚XäÖėL——‰lchÔJBģį‘îj ?TfÔn \]ēMhÛ š$Ȥäã^ōŽÔÆĨÁnŨ)(G#ž}(æōS—ŋēQĢhMˌŽĪģk|Ž đxāķQøst—wą~ōU7Ú `’x ôaßÔ*P¨@čéMaÉ‚MÚX9ušĖxŽŪí.ĄŧĩIdķĩ–0įhÂļĄ¨īíŌ B/⏟O[_.2¨ĪûĀy'äŒ`×X2Ė2qŠILhĀã‚(Sĩ‡ĘqĻ;¨SJūÖąššˇû+#*ĄrŸ”°öņíR\[ŪnÁpšTøŠhŲ\|ĮaR02x¸õŽēo1ĸ[€w ŸlķT¯ī¤ˇ¸‚ÚŨKģÛ’BŒ’qÛ§įOˇ°št9‰4§6Äé.ˇfv•`UŪhŊĶŽî`Õŧ­"UkŖƍ°a‡\ķūs]S]=žŽ÷WƊņŠgXÛ#đ&j×%¤I Į•0”bIõzŠ9ØšPëŲg[Oŗņ“P ũqÅrņéˇŅ[ÜĶäÕĖqîQš3Î9âˇ?´Ž†ą¨Zųq2AIŨ‚ÅŗÁ'Ō´em˛îÚ?—­$Ú“9QĻjMkrRĀ+Žĸ.‘ ‹ķ/íPÍĨęō[ŨæÍy.ŒđįÃFvã=1Ž9úšÚÔõčôģ譌#JĄÉWŒíā§ØUßļÚ=ķ[%Ō•Æ*=ũ*š¤•ė+-ŠÆÆîO›C$qŨstUm¸ČÅ`W™`“ėö–÷Vņĸ}ōË8C8ûÖÎŗ}&MÔHæáG'%•˜Ī5q.#–âõ^æ°€NÖÃ&GņTĻÖĄŖ'´[–ļFģHÖl|Ë%Gâk™Ķtë›Ų¯áwm!ÔÚR0wåH`=1͚Ü…šŗˇōõvĖĢ 3sŧú Ļ ˇĩĶ´ŊSÉļt†K…y$‹ŗIâ8&ÕÆõ4;ŠôÍJÎââ .¤i#hĘsÎ}Å5´Ģ &ŊÔ'‰¤ŽÍá,áŗÉcŸ â¯Ųëļ~ZÛOŊĨRSå#v:㊊ãXŌώēŽâe0ĸ;ŽÎ=ųôĸōØ-'MŌįŋŅmng¸¤k&Š@PĀryäđ+R KØmė#)ļ žfÔ?ŧP¸Į^)m¯t{8gļˇo&+XŧįUFĀCÜzĨ:ÛXą¸vXįaļ!6]FĪQ‘ČĄļú $g\“GyåFˇfč!'$ä‚sîiËᙡķžĨ!–t1ĢÆJķ}ĪlĶu}R+ŊæâÂiÕíĨL” ų‡¨čAĢ’øŽÆ8ndc2ĩš]čŅa¸āŪôī ÷MáxŖ|ÂåP!c÷›Ž§ŪŗõmM ™å– íÎbš27/øÕ ~ū ŨVĩU•%ļ@I#'AĨhÍĢÁm4Íė_lf@ŋ"ą ūŠZKU¸îļcmôo2ŨÜŨMwr¨V6| õĀŠõ¨!đė?Ų—6 yrb‹ō†;ˆÎ=j-WWg´š‚8'„ŦŅۙåá˜Ę}9ëNT°ŌÖņ ˛v\$2ķÁc€zr(÷­q{ĨßėU[áq ÕÄe•DĄXb]ŧ ņ×銎OZyR§Ú.ņ-Ā€“ũšĮĶōĸ_E]™­æFļ•b+€ÅË ŒcëRï@úDڄ°Oo[‹¤ŠƒĮ§Žh÷Įîˆūą-z ŖēæHŲūPÜ|ÃĐđ*đÕˇ”"–æöSŊdŪōäåz úRĮŽÜ}Ĩĸ—Mtcj×|ĐwŽ=4o4ģbû~öĀŨ/ī1ĮMŋ^zŅī‰ō›Ã7BņœNE͇—J׆ˇˇHSqĄC9ÉĀ÷ŽZįėg‡ŦŽ ĶŲâ0ŦŒ^~`dōÆē´rÖđË´ƒ"ƒīD”­¨+_@<žIÚ8ŠGÜųg€'‰3÷PŽF}Ē ›Ž=:T28 f§|cĒōŖžr1@ #F8ĪJd„Š'ķOrŖ¯\S‰ÉÁí@Ęü|į’Hãڍģđ: Qĩ˛Ā“ŒœJĖĮû4†C Á 2sPČ~CĮ5`íTĮRžĩ^cxÅgN>fuÁŦØAūĶ€SüiN~ŧ÷Ŧø?ä/mé¸˙#W3¨¨ŠTœp*00*hÆWš9?ËåŲ[)$˜}°j­ķŠ´ˇ`3ûÁČÔž*Ã%š‚K4~•RëĖAglōOžSØéĻ–†āg–.ØUā~5ŌxIAņāŗ˙:æ¯Į‚~ęŠé|&Ģ˙ Ņü­˙ĄUËá-ėwņ’ąā’sNŲ†6€:ŌFŖÜ0iäÃ‚Tc5ÎÉÛfŪAãwj ‡9ĀęĨmĨ×$ǃé֘†30 îiЂß{öíJ|ŧ“’G ¨EĀR#T%AíL #8ĀôĨ$3œ‘īJsģĄĻŦŋ( ũ;Ō¨7}sN'^š CZ0 ´Ā€ŗ:>æ§ŊBn-[ ] œQSũã¸ãÕC\VūČž쪈]”Ģ`ä ŒP:W†.m᷂úõ&‚ÕXB‘Įˇ¨#$įБRØøuŦÚÕežyâŗ öddĄ#'ž§éšÄ0éV1OįKtlEÁÜ  œúæĻ˙„‚ÔÍgpĪ#]Dŗ(UUcŒž•\šˆ\Š-”^;uŠčHd ’Ęɞ‡¸ĸŌâi KŠŌ;w˛ŒÄ’yФ†éŸ\ĶâŌ´čäg[(3o'`åŗ×ëYzFąĒjj÷QEa2Ž@ãp9éןČUũViĸŌ.ώ;eŽ2ĘÄgįĨ I;0M5rČ´ļ%-Ąl’r}j`%F>•Č&§Šļ‡Ļ˜îĄ’ęņ”yŌ(Q˜wã=ÔēƒŪiļ˛ę‹ žk[ Yq‚ įų_PæGNT léšU!FÕŽOČZ^=ÜÚ˛jr"ʒ#ǏŨHëî})–ú‰šÕ§€_]qe•HØFH`:€}xéIsâK gōĻ3ŦÂ!3 6Ä=ÎVûCÔu>ŌkKWˇ&AåŠÂ¸û qĶž}jŊÕŊÜž(ĢsK6™ļv*HûØ%GâzĶQ‹ŲŠuâ;v ûɈŒLÆ$,ņj.ō8â–ŨmæYš*Ŗ—sƒOO]G*´w‰ˆėžČ?u×ũŽ´Z#Ԗ}vš’H’æ@ļ&áS #¯ˇûUŖĨŨÉ}d—YŊ¸||’ONŧVzx\ƒ›zÅČÚ ÷Îz֎c6›`ļķŨ=ÎÃ€ĖĄpqIōØîbë:œŗxĻÃD[C,m$’FvŗõƒÛĨ:}2ųæyb–ŲÕĄšBüõČÍ_×ŧ?­%ŊŌĘđ^[ļb™9#đīUbĐ.æßRÕ¤¸K›bXöę~ŧSMYY‹[”tMfâßMŗŗ6*öŸ ,Ÿë6x㨊ŽąqycĨŪ]iąˆŽnbōȜüš1ĀûU´đÔQElîäų5ēË÷¯o§åBxf!aieö›¯*Öa$[œdĐtéNņ¸ŦÎ{PžwÔ.nÅ´Mu¯HÎÃ(˜PFNk ŧ×îí´BÚBĪg䓙N?^Ũ¨o ZĘ×bYîÜĖŗ>nÖ āqĐT“øZŌâYæšU•9f?0^„úš/`uĢŖâQ§4P$\}÷!ÜmÎäė@Šyj5?ėÛÉ/m–Õ%ąŪbryīĮ͏jė•ģ.ÔX†IãŽkuŨ9VîbˆHv¯ČU\û`ĶRO šķ2ßP°ļĶAļÕnæŠiÕKÜrAųwģęk1o’đčSŪj3Æš’9$+—Ā>¤×ncPŧĄF3ëQFöķ‚bˆ¤*§FzФ—Aō˜úŊÁ]fÚše‡NxÛ.ŦW2d`:qšÄŽîK-+Kš•Žî"Žâxdė°Žčhß,'%C횡ĄéŗiÖrCs,R•¤Œn$‘Īօ$4îrŸh”xb8Âß2Î|㜒ģŪéŒUĨ—ízž‡3ÅpÛŦ%;_ •}9ÍvÛ@į€įЉŽíûØātÍ~@ qŅy’ø ėĶAsįŖėØŅļâwä}xŖPŠYoušŌęgž4:|ˆ‡÷goL˙Ī'5Ķčú‰Ôė>Ņ$>Cīth÷gXƒĪáVbå]|Í͜ôéG=›Đ\ˇG)}oxīļ3NōééđŖkJéĪĢֈažå„ÉĻK%c2€‰…?tį ķĶĄ­čoį’īSˇx3öB›ˇ2īĀ­5v)'i#8=Íi`åšÅęV÷s_ŨG6Ÿ<ģļĩ•Ä,?r@ũ9äúÖĻ€ˇČe‹Qą"āŌ] ÍØÜqÚļKǤ}:b‘Ž­Ō-Žb!v—Éč1KžęÖ[;œĩ֝¨ˇöŒgOûD˛ÜŦ°\î\í ¤/<ŒV/4Ģۛ­Y#ĩTŠę(ļ30Ã˛rAĮ8=+¤Ycķ+"Á ĒēļĸtŨ=ŽZ?0‡TĀl“Œ“Ø 9ŨĮƌ7ąÔîėŖōô˜-dûZLÉį‚H^äãŊięvwĶkVVđFŅ’,ûOĖ1ĮÔø5¸ÆŪæīK;HÁ.ƒÛ‘ßéZfeÜYœė“Ā6Á$szn“ŦÛŽ æŅcļ•Ũļ;dĢ1ĶũŖųSĸŅõ1ŖÜiR A ‰ãŽPIfÎq‘Û¯ŊmÚę6WfW†ę på$oÖŖ‹Rͤ‚Iaŧ’27Üz~t9K°$Œ(tmįî~Â<Ë!i„fāŒāž=ęäZMō,žŨ^+mģi'wo§ŠŅ‡Sļšš˛ŨBÉ s°ä3éôīÅPŸVOøI,­-ī’A š5 €Bį?\ņEäÂČĻÚĸö7°=ŨļûŒQ¸qŒ“ĪN*{­įPŽíŽŽ!K‰á)Õį<õæ´Î­§FejCäĢ3xīcמģĨß&øŽß,͖”mHČįĩZ&{hsĮyįß'™wq9X¸x'īO¸Đnn/#–MAŽÆyC WŽ9ã<Ö­žĄm{I`RęW¨Č<öŦQ{kyu{wys,YÜŦQaĘä€:×$М„ųQ=ö‡sz.ę˛YQ×rō‚œíSŠdū7ųÚųÃ\:IÄcädÆü…O'‰,VÚ M#Nė‘ĸDI,ŊE%‡ˆė¯æŠ4IÔČJĢŧʅĪaÚ$káĻ–;ŗ&Ĩ3K<‰*ȨÆë҇øU¯ėÚlļw÷RŪy摀\g°ĮJ†ÚI2Ä°Ü 3˜VFˆ….LÔŅx›Ošú[HŧŲY‰dLŠ+ÔgևĖ/tĖH–ÛÄēdˇ˛NŪXÉ|nۀH€Õģ ō—Pģ“Ę…­×q^öéÚ¯iē˛jVÆálæŠ&UdiųÁ°k NŽOŲ=üˇ÷váät†+yvĀ8ŠīÍUß]d^>ą¸ĩˇ…Ĩēu‚ųĮ+īĮjŲ˛˛[ >+(¤’A íW‘ˇ7ãXŪÕŽ.Ŧ.WR•<ûIڐüģąĐŸzŪ†æ)ÔJ’+ÄnFČ53æŲŽ6ܐ˛†PF@Ŋižlí$ {  ļ bą9Ī5 ĻG;äĨ5ĘÜgĨKķfĪŪ5Ģ8*p@äP2 $āķŌ”ŠpqJÃåč)*ė8 ea*K§€ÅO×Ŋ0€€}Ē6(/ŠÁ‘ ¤cÖ¤xō>V įրD/ ŪUQÉ>Õ Œ]9v÷ŠŲílô¨ØļĐ e B¨ĀãéYļākÁœõ?Č֍ÎzœcŊgۃũŠnOPĮųUD–u~ZņĐâŖt*\h$ã|TÃ~žTĢaŨŋ–Ē_;lŽÂwVüHˇZrz™1ų­UÕĸ1%†OwœVŽˆlŒ;°’rYWŒz+Ŗđ']ģČÁÚk™ģbfˆ’xÔ×Oá3ˇÄ™ŽĶôûÔKá5čÎų~čÁëR)`Ūžõ-ģŽ„zĶĖ*ɍėsŒšÉĖ–=Ā’TƒßŽ´;1éHŒĒ ĎæšB–Ë9Á9; QŽĸÄ Âry ´NiģĀ'iËSÉ$ƒœ¨=)6:e€üŠ˕#ÔĶIPœ‘aĶëK¸)čŪ´‘Č͸˛`†=ûvūTąœĖāŸ—­*ËÁ]ŧņĪ8ĻēˆAÚy>ŊčBWŸCéTuHŪm:hátYdBŠŌ9==ĒÁnÉÉŨĪŌĸ‘Á ķŒō( č:„PY,Wy[5ŦŒđļ1žŖIáĢ™ĄĶ#7ČĖ&Ybų‰_îœädpi4¯Ou­^闋ËnßģhōĄĮ~áV4Ũf[éoÚ`‘ÛĀ˙ēÚ9dÆw{֏šYģ‚NyŦ$ĐDfâ+kšŖ‚HŲD]@-Ôķ×ڜŪ"ĩ—S.1m´ēÁ*Ũgĩ$úį’¨Âáî¤ÜVÆíĢÕŗœcņŦŌ’.ņdhXŽŨ üāG ˇfPŖz€ņH4h@âiŧ&Rà §¨n9č?*Ķû@¸´Ũ7ŒėnŖØŠÎžÕ-,Žmmd'Íš}¨Ē?SíBrzŅJåĩM7XŅÖÜ\ȊîÃ:ÆĨH¸­Ģ}ÂÚxĨDe19‘ĖbˆÁã==ĒÎpąœcĩaoŪ6¨šzÁ ŨŸ,ŖŗŨíÎū*Õä´%ؐh–W&æÚ ’ļ{’=p: Ōd)°CAīP™#rĘoN ãë\͞Ŧ—õŧ×bsįË$6ŠˆĶi –É'éÅ$œ´Žtm9,͐´‡ėåˇye23ëVĘÚ4Š( ‰V1ĩAōŽøô ŧ…\!ŠÁ>••iĢ]ŋ‡.õ#‰Ž-ÚUؐ BGsíKW¨ôFØļļSʏrŋ(ųO¨Ē××ú~’ąĪwTfŽ­ŦņęsŨ^FÖö×-nL }zÕ¸üC¤yÉöčöĖė#Ā98ëÅsŗh:­ô¤oe[î’æ$i˛ŽB€TãųúÕ¨4Sn"閖˙fä–8¤Â¨#{žsøPÔEvmÛëú]ÔŅÃâ<’ƒåüXëøûV&¨Öú~ŋo=ÎËw¸ÜųBB``!į9īéIoĸęĘēzkuû5ü—™sō1ĩ.•a¨i6ēeŠφ8Ųn%bA^ãhôĪ­ ^MŦEĢéW ôK尔.Tô8äRI\nö VĘî×J՛íĶÉ[{üҰ8aÛĨOkâūÍ*ĩŊĮ™ol'Øę‘qÔsíŪĢIĨ뚀¸…íŦK=ŗ@ąB•wc,ry8ūu(đå؜JڂāŲ}‘ÔC×ũŽž´ôļĸԕ5đĐŲČöWGxábbTŽFA<đ Wžøjhņ5ŧ‹m{3—z…R@8ėqš¯­Y-ˇ†­ô‰eyn$)ģã H#Ž˜ëV}å›Ohn^˛mÁBŨÆ1Īą4i¸Ę°kVV 0Ųŧv-9ˇŽTÆĀų#ÎqœŒÖFˇrōŪŪ]4R4ļz…ŧ0mģTāž˙Ŝ~UĨ˙Ąû`Ú2ļž.>ĶöMƒ‡Î~÷\gœT—>k…Ô„ēŒšž‘@<˛˜ÚG¯AM8ĸZlÜĩ‘å´W–?*CËF[%OĻk“ņ|ú„“Į—q:›t2Ũ,‚ ũÖ$uÆ Āë[Đi I/ŪîydâV +s÷°;Õ{ß ĩί%ũļĨ=˜™s¤` ^•1i1ģ´?KÔ¯u…û)‚[ÕCŨ19‘ąÎŅ[ Ãøã5Ļøm4ģļ’Ūōé ]mC/$uÆ3[DÜvëšRĩôŋQ˜@˙ލk˛ĪzĐēFë r8^:֖܃œfĢ_ÛCyjÖķÆ˛Bü:7ēËŲjWßJĶmäŠÚrĖ$dÜXā  ~dÔpj/¨ę~ģœ"<‹pv'qųVüÚ.Œ ŠŪ{hQCģ¤ö=ũ*Ԗ6Lc-kōG/ũßNÕ|ËqY˜ū%ԟN‰V ÁnĖŽËûŊĖÅW đŠ5˜×r^ęš}ĖWņZĪ.˜XČĄYKeIû×UuiĀí0C6Õ2 lĒÚ.—2ĮæéÖ¯åpƒË\žÔ”’@ĶšĪęW×ēŸÃįēd+q"0 á”> ÄdŌë×z6ŖáĢĢXŽmäeˆR6ˇ˙Ž+­’?ŨÕT ccĶN=#Oˇ—ÍŠÆŲ\ĢÆW=ĮĨ5$'sË5ŲÕtˍEíËY+äWc°‰Kå—ŅíK-ĒJQ|¨°FT}iķŽÁĘÎbÆök¸¸ÕäŠTšx—ONôįi>Øį5Н\Io{`d3-ƒŗ Ū Ų(8ä ÖÄæ+hšæEQķ8s͎5>~A´ŽĮĨK’Ŋė4´ąÂAv"Ķ‘bžxŦ’úešPŒ[i$Š=đsÉĢ sØĮy%ėÚkĀŪ\ 8-&î ÛÎqŌģņĀÉĒZŽŦļĶȰK/ŨT`mįĄ],r6öÚŽ™t’ÃaæÚ¸Ä1K8ß'‘ī‘éĶĨmjÚd×ú͜lyŖ1• ĻÖ2´ČBũįwj|Wķ̘Ž#' QÁô8ĄÉŊA-,rĮFŊŋŠ}ÖqiîÖMn\ĖN{ķĢ7zŊî›næÎÚ‹icGæeeÛÛ8āz}+ZķWĩ´Ō枎XæHFĶąÁËt?R)cš{Yŧ­BúĶ2‘ä =Į'žhæ{ØVFuņŖ{was,0BcY@’dÃr{Õ4jÚ=6 ą[&`dYN]J‘œ×Úļ—XļŽ&{ģģ@ĸvŠ2¯ÁĮ89īëVާ`ŠKŪ@ 8SûÁÐ>´sKk–æ.›ĨŪB&…­Ŧļĸ:G7ņžŧ1ĮŊEmĸß@ļQģÚfÚŲā†,éĀ­¯í[söEē„\ÚSvNqœ~Uf;›Su-ēL<`6JįĻhrc˛24M.ëO†Tš™$“rGJF=5JŪË-ˆæÜ3Ũ ˆHBv• Ã<đ?Zš;ËmBņŪãQžŌ÷Ȃ(›hv\uĀÉÉ­I5>6PĶg3ųoõž8ëNōNäŲZÆuƗŠ\\Ų\IwkēŲŲŲR"ČÆ>„ÔvúÜ>Ak¸ut×?,ddüŊÚ<ÖĄÕtôŧ[F™<ÖmŠ0qģŽ3Ķ8íSÜŨÁm Íq"Ŧ@€O_lcš4š™VG5ĸØÉ{=ķItĻŪ=EÜDŠÎār2}9ĪJŌĩĐîí<ØĄÔ‚Ú1vHĖ ˛–ĪVĪ#&›g ØGw=ĩšˇ˛‹€ e`OLŒfŦÉŽŲ5­îZænœų2ƒĐ€E6å}Ŧ–¤šFœúv´—~x„íB/ˇ^k?ŪŲ\\QA3īhexRz•įƒZōëļ6ŪMģģĖˆHˆĨžîOAš5‹øė4ɧsqø䎔¯+ú†–ô"˛đƗöYĸûWī Žķō]ûą­K4ëqmi ĮIŊy5›}â¨ė/%´]:ōv‚%šG@¸ {ō{VŊĩÔw֑\یĮ*RxāŠRæļ ­} b<`cĄÍ5”džLäqļžęBáXŒR2ŗ8AdY Ą_åL$qœgzšLėÎĻ*%QCÜb€!ãoBBÔAX9A;Īj˜°v˜ÂŖfàÚ6•$ŸJc+Īlž`îų>čõũi–QˇķŠÜŸ1íUōŊŠ CŸŌĒģlÜĮ§aīRČÛrËĮ­A1>VOSژf/ÎyĒQøšÛdqģĨ_rL@g“Tc˙”įįLj™Ķ)íëOËcåĻ&88ŠF(&įâ hé cåWlŸ¨ĻkŧĨ‡=\ôúQ­ÆNŖ`ĨzĢ1F´Ąe͎q—?ĘŦ肨æ'Sē/§õ5Õx4¯^õû§ŸørŗZ^ŸŠŽŖÁ˙ō0^ØxĮÖĒ 4{ā,ŦFV8$ æŖs7fĻP š°=Ģs18]Å>•ķAC€@ę XၜvĄv”ų['Ō¨’žŲЅÎÎjpw*°ÁĪ4ŋ É9ĀŽæ(U ŗ@íbī–$ŸŌŸɓ?xôʖn=Ē@ĒIäô Ælāõ9§ČŠĖ;Œ…Uį<Ķ&Č=? ŽPä’Gŧ]Āg§LĶ\a°N)A;˜lÆ=h°Ÿöíä÷3ŧ"ŌVēķQ‹‡Ę2…aĮˇ?•_ĩĶ.aÕĩR‘ÚÜF‹FË!UÚ1ūqYƒXÔtŨvá.åV•˛¨ ėāœvãšÔĩš’ íBææņäĩ B0Ą†p09æĩ|Æk–å(ŧ+wWHÚĄ“í0ųro$žĮ9ĪzģwŖ\Ėmn!ŋh.ĄŖ2Ŧ`‡?J•ĩûEĩYȟcSˆŽSg\ŽÕ ŧw—6EMĀŖ˛¸Vuo|t¨n{•hė>+;˜nŖß{$°¤!62Œ–Ī.OôŽ{ZđŨÄ÷ŋoˇēĨií%G–ŊđOLsÅj.Ŋ=ķ Yķ~n×—ôēwĸËZkųDm%š’<{˜Ëø~.xģĄžFŦiÚ[f’o>WY@Y!qÜ}{Ôͧ[6 5-ƒí>_•ŋÛ9Ē:ύēn™ö…R˙2ÆĒxˁĪj§?ˆ.­moQ­b7VąŦĀ% Áį׃BMŠéöšU­­ũÍė D×yĨ›9#Ō›‡§Ã¨›äļU›s0lœ)=H5—¨ëzŽeŗGiæ°22Ģ6į€Ŋķƒ×ĨZŠ÷Po^A$°}‚Œ„Øwač v—pæFĨϟodg†Sq!’BI9cüĒ 4?ŗiŗ[iE i˜–i 8įŠÁ=jÂ]¤Ö5Ŗ$ ƒeI¤{Ôv™›LąšŊhb{ŦT$F@įŠŠÔzž•i Ĩ•¤,Ÿe äģ€H c#Ū¯]XZ]*ĩÔ1Mą˛ģĐz b>C•lŌLëˇáÁŨ‚zŠ›˛´ä@ōÆ%Æ7mąõŠļŽ#§\sL¸;ļĐw#¸ã‘ĶJÚŌyî%B^Iäß#1įØ}j¸`ˇ—ĩy΍XäÔûKØ ĪíĘs÷…9Dg'=…GŒ2ąŽ09ÃnČÆGŊ$$å€"›‚fVgų0qúR}Đ7P)ųÎōWÅ ‘ģ¸íīLg ĀŒ÷Ĩs˜‡ āc֙`(w4ė§h$ąČŠŒį5_,%<€3۞*s¸€G\ãŽÔĨJ¸ūé(PŲŨŒŸOjW7­;ŋ+`éHãĀ’JS Áڧ֜Ą™p SŽjš ĻB?ũjœm#s/CŎMEco$0>ôæŒąÎO\Ķs62)'$ãĀ§ē;ģâŖT'æá¨ÅüšúsJāāãĨ4#ÆTzT8 0zšTëš2€Āúæ•ÕÁę:gŊ!bĮæãŒPdm‡œķŪ ģ‘ÖŪR<ÄRSy8'f­đŽĄˆäÕ{ģxî"hŠæ9 ‡*@ö"ŠÔõ+Âūq`ëq<.ÂväķÔõÍXŗÕõ;ŨVT† q§Ã;Bī#üüwëÚ­Hˇ4öBâXŅĻnˇSSi‡RmGėĢöžĄÕˆę:fŽņėNĻŽĩĒČÚ|ŗÉm$WsK JîÁÎŲ¨ėĩmQty4öōMqr ˆ„Ú#ųˆÉæˇāĐt¸Œa-cV‰Ė¨š?+waÍ=4 -`¸„YGåÜ|ŌŽN˙OŽhö >æ=ÍūąĶ`’öåžáãvD •ÚHČėxĒÖÚũôsŲ‰īā”5ëÚŧ~XS€N9öŧ4]68ĄE˛‡ļbČÉSÜũiN‰Ļ.ßø–ÛŸĖåŪõúŅÍÁĘĘ^#žš˛ˇļ{[…Ūæ8ؔ •cƒY×WšŦ:ŠXÁ{l Ŧ’Orų™cž=ŅŨéöڊ*ÜÛÅ4hw*ēäQŨhök\ZBæ#ÜŖåöŖ$Úg3¨jq]jĸ+ČÁĩI >ZŸ3pûžŧĶÚ˙R¸ņ Ô-í-āhÕ­ä4€<Į…]†ÜĮâ[ÛëģKfXÖ+‰ pGs‘œÖËŲ[ŧé;[Äō¯ŨvPJcUĖ—AYļq‘j7)ĸęŌfSqÃ(Cˇ(˜ŗČ­>7ÅwÁõ)p­÷Ŧ d:ņíZ÷ŲYC=äG´!y E’ÃđëSÚ­ĩÂEwÆË$`Ŧ€rWˇ4œ•ļ]J–z´ס–ą VkbĢŽ ˆõƒyw#ßxŠšB‰gšbcN8ģ~•ˇ"ÚhķŧąĮ$ˇWŽIU;žBp3ĐøV•ŗ‹›XĻģŠH¸aėEMŌÕ!īĄĮAy¸8ĩžškitöyĀr|—ŒcĄ9éíOY Äz|zšû$– !€ķ¸Îâ9Î÷ŽÍ"HÁ؊ŊøP3Ud›ĖžHb ŗ,”ĪųíOœ9N6Ûl6z$ķĨÄŅĩŧÖōí ä“Ķ8ūuM#™´m-o-õ´‰$ŽdŽ3¸99S‚9$gĩu\oĻĪ‘3ųەĨYB휕ÆOLÖĀ…DĨØ9ĀöĒu,.[ĸļžĨt‹`XȌ`O˃â÷ŦlœęzĮ‘§IėĖÖ×/%œs]aÁęqęEgA~í¯Üi¯*GĖ’$°'#ĩBoVŠkcއJēūÍÔaDœŖŽ<Ęã- ëÁ8#=ëkė &§ö}+dSY X÷*ĢH3•8>ā~͆Šî74oˆ†>jęNxĮ­76ÅʎßOÖF—ŠÅ>wÜ4rÆą˛ 6đéŌļ’ßQV¸´ņ<7^[+Čę $AĮž+ĸ,ļĢ äŌ‘§ˆ+3ʋˇ¨fZÛčļ8įŅīÄBAĻŦ†=IŽDeÔîFޏŖPŌĩ&¤6Ö1¸ēxdW2n21øVöŗĢ =&ęâÆ[y§…C”-ž ôr[¸žÅ,ŅÉxĶŌacĄ=ŠķIj+-Œ‹ĨÖ¯d{eŽ ļ:ČF?ZЊ ĨÕ.ČļX%Û*˙Ŧ,;7ĩVMIŖ×eĩš’€[¤ˆÅą’Ä‚2O=+RâęŪÍsšĀÍL›ąË Uˆ­”D]Š2cŽ:u§]iŦˇR‹cja’ņn”ģ6r1@ÕĐCĢXOvö‘]DķĄÁwĖ•`*ĢŸšŸ;Aƌ}.ō×U•Ņl´“´ÆGBe\ã CÚŦë:Kę6¨N°ËË4dŽ /##ԟ{ŽéÖ-åÜ\¤sŪPä=xųõk !ˇ71¨™wĻNr1Ôcĩ•ĶŠæŗ—PÔ5› Ūî'ˇ‰BJ’3ÎáV_CÔîM÷Ÿsh†îŨa;#bT€Fy>„Õ{ŠâĶĩ{;ËWCŌģE dā¸ĪëZ0kQM=§új"Mœf3‰0?ŊÛMŊĐ´ęAáíBčFRˆĖLˆŅĄëץ­ SL—UŅ͐ēXŨ”+Iŗ?Ígi×Ģ41ë7ķ*´’(„rŦ \dž3WĶÄz[r’1YfōyM˙Ũ€{Sd$¨#Ž)Ã#Ԟ§Ū˜Ė[pĪJ€:ã=ąQŋĖJ‚@õĨ#åqīH܊W‘ˆƒÉj‰@¯>2Į9ÉíP˛œ’z C*Üd0ÛČÍE)ČÆ0jB9ëL•˛r0(ˁô=*„@›č<‡ÕųĘ}5F#ū—oîâĒ"gJŧTĀuĪčj!ŒÔĄ–‚/\8×ėČ"2FOš¨ĩŒĩ͉>§¯áSkŠdÖėŽ9Øx>Æ ÖI69É ŸĘ­nŽˆô9Ép ŽĄMu^ū Æ}Ķü똝F-ČįäJę| Ö¯Ž2JôĮŊ9ėjö;ČäÄÛĻGjÄkÆG$úŠ…įŒsŌĻŪ‰ÆîsÚ˛G+ :˝ƒ-0%GŸLÔ?hÛvød•eūAn¤f[æ;{* KŖ { S^› ÔÅļA–$õæ˜ËJ’Pqî;f•CĢ{v˙ VųTg?(āThHv'q×ĩĢ3đzōsH ī#&8"¤Üy5ˇĘXŒôč b2Č8摞lG\ũ(ÜÜŋ)õĒëp Ō!¯?_€2­t̏õũFęxmŝڨĀbXāc$cŊCoáۋ+mNĶšėåōL8ĪNxŽ„ƒÅך<ũ*š™<¨æ?áž\ÚwÛmÂI?˜XFĮ+ÔŠį<‘VMš6sËx…íŲË 1´sÆW˛ŧŧņÆĄ*^ÉkiĻ–7:ą$Ō ‡RģŌī.,õ9Ō$&â9ļüÅÁ ;‘š§ĖôÖá‡d…ågÔds$M™Œdį8'ŋ§Ã¤›{‹yÖîbÖđyápGž°üĒ[Zę‚|ũ›íJŸOzŽēģ'‘o¤×­Dየ$q×=M/|=Ã\iqęØßĘnrŋ<„m,AëĮCQ[x[NŽÖâie€˛;ĘK?‡>•^Ķ\^ÛE›É Ä"mū`A8ä~5_OÔÅĨė—Û˛é—>Vâ˙vBpX/e'õ愤 ÄØŸÃZmÂAČōy(Ņ)i­ÔžjtĐŦ#¸Žé`_:4Ģ–$ā üņV$b-âUcÎ@ĮМV –­u5ŽŸom]¤Ÿ#e‚Éäf—ŧĮĸ7Ą˛ąĶ4ÖˇDŽŪےFv¨Ī^{u¨ž—jd{SgnĀÃ#Č Ŗ˜$Õ¸m[Á÷]ęheYår22?šĮ/y'ÍĻÚÍm…!ˇĮŽ¸ÛŒņë֚úõÎęI•e†ExÜŦ§‚;ĘļÔ,õKŲ ļv2Z6É)NzÖLšžŖļvZdvŠąŲĮ4†wĀ*xĀĮn*ŊÍÍ՞§­ÜŲÜADą\›/-‹`Å!ÚŽĨvœqŠŽ˙MÕF¤u Hmd{‹_ŗĪ˛¨rNAĮ#ž˜) ģ/\x“K´Ø'šÉ• )lŽzđ)ĶëštQ“æ;í„NvFĖJâsY–Úõ‘˛ y#ˇ°{vfr 1 ä tČũj'ĐõH­lãŒÚ™RÉ­$b́ĶqÍ;G¸]›ø“Kļĩˇž{-.ITä¯\:iSÄo}%šųÍ4dÛ*=+øsU€XËö}ÄąÛ-ŧĸu%FĶÁ_ΟZŌ‡KÔ`Öo¯ˇÛ4WĒĒ|ĀåAĶžË,­Ė‘ČT”–áŽ6ôž+Ä,ĖËŊcS†ÛPŒIl.-刉ŌŽG&Ÿ{Ģk+~4ëX­¤¸Ž4¯&Q['/>‚ĩ›B°t™M¨-pĄe%ĪĖLķQÜøkKŧŽÚ9Ŧ÷,+ąHįoĄ9ÉīÁfh $6ƒhPåFx3\͆ˇĢĪ „Ķ‹VŽņ¤ŒŦjCF˜Ī#ŠéÚ3 _,Gl_uP{tŽÂzjG§3ÜØIoqšÃ™”‚Á˜ž? TĢYļ7{ĸœzŽĢ˙âę76ō‘Ą‡@}Ŧzōiu­wTŗ¸ÔÚÚH6~I Ņd°~š9­uĶt/1ôq %ņį5ž:õ4ûŨ7DˇŠk‹Ëxf*’<‡†ėü…R’žÄŲÛs.MfūĘ-]&’;—ĩ&‹jmČlđFy¤Ņ§– V ž9­gˇ7Ë@<ļČČãąĪģ—c¯2ZB’2lf ÕGúp)ÖÚuĨˆ˛[Cã– \Ôķ.ÅYÜÂÔgkiÎōŠ •#$›Œ~})žÕ.¯oYĩKy|ØKH×-œžØÎ0kĸ’ŪŨĨYdŠ'”}×dĨGa“šļŽÎJģÄĖAîEĘÖ°YÜįŧO>Ĩa¨C43ÍöK˜ÚØ$d.cÂļŌŖžę};Wû,7“\Ęēc0ß;¤ã×­uķF’…ŪŠāÃpÎcõψÕ\ļŅģûÔ)ik/S„“RW‚ÆyĻŧhLĒŌĀr§< úJ‰.CøQoí;ۛĮļĖ‘aåIžƒĐįŽ;W|U]÷1íUoŽāĶ­âs„SÎŪ¤“ĀúæŸ?D…Ëæq˙éŅĩ÷öŧU]7F´'LŽ}"褖nˇ ÄØ2 į߃úWž|ELRGąŠ€ã¸öĢr9=åKÚ5Đ|†‡ ē_ ÛÂŅI ņFP F#§áX.–ļŅ\Ŋæ™}5ÛBËqŧ’œô_\õöŽív—d 7ã <ûSXb<;…'ÔÔķ=|ÆŅÃÅĻŪÛøgU˛m)ŌYTyn¸bāã yū•fm2w‡Q†1–+›UTfQž:õäsí]“4b5%ÆŌ9ëôŦĢÛéŌøiö ܈Œíæ’ ā;ŸéUĪ&+$bIe{$ņÉ6™$čúzF@Úv8Ī'ŽŊ}Ē'ŅõuˇÚö–ûhâlÍ´G $’}G#ōŽÆ9G” *­€Jîč}*;‹˜`ŪYUU~ķd|¤˙*ØrŖŸ´‚ëO×/ąR—.%YUĮËō€F*]?Sŧ¸×¯ėb6đc™3ÁūéĪS[ōÁsŊš„pÃĄüiÍ5ŧS¤rKČ˙q [č;ŌŋícķNŧ›^{”†Ũ­ZÍ ےĮžF:fŗSAÖm–Ææļ{˜-Mŗ¤ŒvíÎC)Į_jéÎŖeƒ%Ü#-å‚\}˙O¯ĩC.­eh~ßlŗ `Q¤åH9JĨĩ…dĖhô=FŌ)­VŪv´™œ %ũ8< ū”ąøvö?ąmŪ5žIމ—ĪĘŖkj RÎ > ››Č‘sæ…p4ˇZļlbIo`ŒČ.\ ƒßéC”‚ČįcĐõ;[yíU­'y76Ō­œ‚qĮZŠßMēÔFŖo W6úŠNĒr˝Ē}<×GwŦéPŠæî܁Šģg*zĨgi“čzd—ōĮ$@ĂIeRY™;g×ÕJRļ²+/†/ÄI%ÕŗÜũ´ŪD gËŒGŊt:eĩÔ6˛%ė°ŗģn {UF:zŸŠĒÃ]ŌŨåŒ\mōáķÛr0=rG=j}ZĶõ¨äk‹ė 8d*F}ˆŠ““ZĄŽTô/.V1Œ‚Jj9ˇœ¯céO%B•QĀ4ŧĶ'1PY p¸Á'¯=)Œ08Īz•˛SYx§ALäîŒĐ2,sžŧįŌ›&p§¯䃏N9¤uÉ#îŌVsą@Į*ģŽ¸ëÛ54ĒLžŋJ†Q´c=0)HĒ#lōMP›Û~ؐV„ãpOĻ+><Û÷ĮķĻ„ö:€0IëÅ<`”ÁŽ=éø>´ÉGŦģ&­d™8TûßSQkųV°lķ?J›ZMvŲ3Ō-Ù5ŧX%Ž*ũ˙ ž¨Ū/Dsō¯î­‰cZę|q¯^Ž›—Îšyˆd´Æ1å€:éü vëwĖ@Qˇžø§=™ĢøNô¸ņž9&ĻnáTŠ‚<ęYOÅ=KDƒ{ ü”qY#•ŽÚOĖĘĮą  ä€IĻom€ƒÉ8æ…U ģ9Ī­$ĮĖ0)H}ĘĮĻ‚ qŽAĻ’C‘žI e )ÉĄ“"pŠxÆsN ¤ägn8¨ ė8=iˆ˜ŽÁĄA<\ûvĒÅyšô§– 3ķ@(°„õ;Ģ“đŪžl´šXs ˇĶnôKëļŗ‡íV7RLjÁ^6ī€x"¨Isi-ÍäÚ¨’Æib6ņŦĘpõ ô9$~Uą/ˆŦ ­Ųĩ¸G’Ú&“hœq‘ę3XúNĨtuuˇŊš’ę;›hæUōIąëĐp*Ōní’ÚŲXėWh–úœße6ĨŖˇ;GBIī[xyá’ŨūŨ hm¸Â ?ä~UbįY´ĶüÄt‘Ö,|¤Č=3Kwâ kxîO•3tY}ÖĪ#'ÚĄš=ŠJ+r|> {7ŽōpmcōÆ6üéœāņíOļđũšÎŌ<’ų)/Ú<†|FŽúԒëąÅŊb†iĖq ¤ŲĩLäû•_RÕažŌ¯m …ŽD–fS‚U āä÷öö¤šî7Ém M'H–Æ;ĐōlKÉ ĸÄ䈲0pOsÖ¤ļđŊŸŲ ~sũąˆ´§+ģ¯áUÆŦÚg„ôÛ¸āÖūūŪ[9úÔSxŽū8όiņ­ä7QÁ"<š\?Ũ īUi2.¸t[ ]2K"Û īŒ1į=yÍWÃšdzY°0Ÿą“Ÿ)Ũ˜u÷5‘­xĒįB6ņŨÛÛrĄą)ęsŖĀã9Š Öĩ[ģÍ:/*Ú10Ę1áåO¸4rĘ× ĢØÕ—@ŅîϞŠHáPąn…ŸJ}Ū‹ŖŊęÜÜZĀgm¨Ŧüdē1ĐÖ>ŸĢęw÷S<6PĨ€ybY˛Á—€HĪ9=ąL‡XÔN§_ÜÉjëqs˛ˆđPCrO\÷Ŗ–]ÂčéÂÍ.šäAÚŦãÛ­ÛAooöt†1]ĄF9>•Ŗ|cÖežîŲ"ļ‘ĸPҐpA8<đzzĶô[û­SHŧ†;ÁöČdxãĒ†ĀÆ ^”šY\ČčLhJ E e6™~Ū&]Edˇ[QŲŲ;ˆŨœūuÎiÚîĢq§ę:ˆ’]ÖžSDę ´ßÄ܃Ž)÷ZŦ‹¤yΝŦā]@Yā`…UŽIŲ?…RƒBæGvģUI#;GLdŌA2ÍČĒé¸d+.ÖüEqîmāņhõ[ÁXĄˇbVCķdįŋ5KLg—Ãķ_Ktû­ŨKĢ?2 Į­O(\îŧö7RBŅēĒ(o0‘ĩŊēįŠxxđpĀķĨqZ˛ÔŧDWLŗŲ*ĻØÜ0g€zwĄĸĢE¯ƒ•ĖvķØÆš2ĢæO9īŠ\ē\|ÅģmRâ÷T¸[{›Xíín<™RU%˜2AÎ'*ÖĄĒéņBåîâ6B|ŧãŌšė‰d°×ŌÛK‘n%š2Āî˜.›”āgžÆĄšĶīī×^ƍ,_jŠ7ˆHneę8=MW*bģGd—ÖkãyÅ]ÛŧÁ€:g>™¤:•œm–î!æ€P0'Zåî-oĖ–×hm˛}>Kg‰vŠŗ‘žĀU‹+ôÕtY¤ŌIŽ;îė¤#1ßļ3øŌä]ĮĖÎĸ ëyŽ$ˇŽTicå—pČü*i%]˜Î+“Ķl5¨<@ˇ/§@–-Ë(†mĀãŽxũkHmJkڝŧp\no‘p'ēŠ ŧũ8,‰iö¸ÂJ:ŒdgEWŧĐ Ō4[éā¸ē Y´{dpU¸8ȝ?­ÖvËáIoL˛ĘōŲ÷ČrTmûŋih‘ŠzĶÄW29K9’VĩûDA$ q‘ž0yMŧUvÚMŨÄv–ūuŊĘÂËįnCģäŲcFŌ,o48ĒM$ˇ‹ŗ9܃ēAšVđf˜axķvQŲXƒ9ûËĀ4{‰ęđˍoTļ–+$°ŽæķĘķĨō¤!s€=ÍXąÔĩ+ŊrōŲáˇ[K} œüŽ~•%ׇ­Ž…ŧŦ÷)<)åų‰1 ëčÄuĢI¤ÚÅ|o‘dI¤@Ŧ‡iĀÆHéšW‡fdę:ŪĨ¯yiiąH-…Č21ˌœŽ;ņPŋˆoY'’8āMēzŨÆ$œœäŸjlö)qãwûEĨÁļkA|0FlįŽ1ZÖžĐtëæĪâˆb]—ä=Ž ?wK†ŦČ{ķ˛ēœ‰ķdYô Ķu™/fđÕÅÅÄ–ĖŽąKH*wĪ'#ŪļâŅtô‘&å!ōįb6cëU×ÂúLv˛[-ĢyOË5ŗ€r9éžÔsF酝Š’ë÷öqęŠqÍj¨ČŅåT‡8ĪĄëQ__ø‚ŪĘ/:kHå{¸â îũÛq’3ÁÍmĻaö‰ĻniĐG.öf cP6‘ YZ‹yáˇH÷īgęÎæ’qė 2—QūŪK)54*ļÉ'úĨÎâ~>ÕNMSR:-´‘ŪE˛j-lō¤@Œn `~Uš0ŅaÔŖ–qhˇEBÂĪ€ätfœ41`ōÚÂ+Ėķíãw¯Ö—2ę‚ĪĄËÚjšŧE$ģÔÖE‹P’Įå¨ ­üYëžEJ5Įx–MJBéĒ›w@Tf2xČÅuiÚ~Ōëg–3>Xåģ­Sŋ¸°ĩēĶŪâáļÉ"ÁfđÆĢ™7ĸ[u1ôHĻŗyÕėĶ"ųŒĨzm Đ¯UaÆĨņlĐ>•g3\m‡íČ9xÜ?ĻMoKcˆÁ#X™ÎK§ĘŪüŠs­ŋŲíJ'ÍōD¤g ˙ že{ŽÚXÁ´žˇ¸×.bēž•.P-ãF!^- ƒĮšĘ‹RWĩŌÕæ’aĻÄš%›h.>Ø"ģĻXŖË•öįŸũ¯nš­´vŌ˙Ĩ@Ķ#mۜu<į‘MKČMˎ,ļ,˛Į˛›­Á]ûŧŖœs×nqŌ›š[tgÕSKh_Ęō•™ˇîĪ9ädcŽÃIŋSĶâēÔŋcÔãYmå7Ĩy-0ûĻPr9õŽ„ę77šKįw“iSŒœ s€}iˇ”Šâ++!<›¨ŨÆ;”¯ĩ4ŪÁdrļúTG×ëka¨ ļTv“ b~\õ=yúV‚[5ķęķKĻŨƓJĄYˆęqž ķ]w–ĄÆ8ŦK\ˇ°žhž)$û:ŖĖWhvĀë֎föTŒûFķOJ´¸ŗuȒ*0 pÛGo_CPë67īŦ  ĶąĮ$R‰U×sm<ŽOA]FČŧÁ PICmä Yf‚"ĸIU č†MO6ˇHmikœuöŸŠŸíáĶK$×q\#@6îī×å5Ŗ •ÔwēŦí§..Z"]~öĖ}3[†îŲËÍ"œ1gįžÚ1åÉ2)¸€ĪŌŽgĩ‚ČåāŌuĢ8´Šíímį–ŪÜÛÉ ’` ‘ķjŽûOՖöú8ŦĄŸûF%—B@Úz˙9­ŨkQm;Dē–)Ō)ŅŖķ0w3€=ęKKØÆ+ûŠR?65€Š|Īqr­ŒgĐ¯ŅHá…ágŲKŗā–úcĨ4č甍ŠŅ[ũ˜Ör&rĮĄéĶÖē#}eövšûL>Rš÷Ŗņ¨WV˛ũ×īâŲ0b„8!€î=hSųQĖĻŽ•2OˆÆž- 3– ƒė;ÖĪ„´[í"Ōeŧ™6ģfUˈ—ĶqëZ–wvú…¸–Ōdš=ÄnŽ:ŠŗĮ”WJR›z0Q[‘4€ŗ(ĪË×5(mŊXF¨]Aä‘ÁÅ<`‚q’Ab–ĘđF}i˛ePc“üŠ‘€P|§=sŠQŊŽâNn2sŒS㞸4’įĖ]Ŗƒø d“œˆÚ3–ã#‘Hb+sÍDíš›=ŊŠîA9<ūTÂĘŲ\ŒĐ2Ē)V,[ŸLUi¯\f­6xÁņœUy'ĶŊT˜î\zÕČĐsæ ŋ!ŨĶĩS075RŅŽd~!<}ĶMQÜԇ9Č=i’qÚĄ â(›9ÜųšĢ¯°kkLösŒ~.´ģü@˜$bĶęj w÷V–€õ-ųôĢęŖĐÁ•ž[`ĘÔ×Uá,Ÿ^㌯CõŽ4ɝ‰=ŋ"kŦđN_Xģ$vuüjĻ­KŨŠpéČŠ/MŠ?ģPĒņŽ´ī4~bs˛@3!;x”ˆ ’‘Œ(īÅ#I\;qĩúÔÄ0đJ€?­(ÆI+“HFG=˙JcîLŨAĪ9¤vÆH㌞ŧ ŽÜ įdnŠ$&ĐëĩOŪÚsš…Qž‡逘`Į‘ëJË’Áx÷§'–ÃyëÍ6FRŦ1ũ(!Üá\ŧ8Ĩ’ Ō$›†𾔡WÍķzĶ7e˜č@Í1Ėžž/ËÍn’Kx—0ā’2¸á¸ökJĶuÔu¯¸Žä&ֈž cŊGĩ8ņ]ՅĖŅÚŐ1ĪA’p=ilõYæ×5MÅŗéöĐŖ‡Eį-ęsŽ0kOx.AeĄęļ2ؘėų r¨!ä'€Xã°úÔö:§kse8žŲ|Ģam0Àr ûũi5=r/°ÛÜi÷Ģļ;¨’RŠ(ĮĄČ­3â 6;c9ēWO0Dv)bôEKr°×)Ŧiv–Ú´đM ˇš€´‰ 9 Sî:MMV×í^Ŧq]ŲŦR/$sĮR*æĨ­éÚŋÁŠāō儓ŒđJ‘Į#Ŋ=5Ũ5,ĸkPÛYŒQCGvG\Ø /$ļvå)ŧ=+?›m¨L°,Ÿ,7˜ zv5$^ˇ‹osqnžGŲÛË#æP8ÎGŊZūĐĩ¸Ķ…ô3‘’(r8*WŽi–ZÅžVI–aoå0ų‹œ`~ĩ7™V‰OÄŅéŪŠĖÜHāôÚL›ŗŖ—RąU -Ü(6éĘ˙Jdw‘Ë<č3 JŦ\H;äō;væš›_ ˛^iÉw s[YZÜžBŨ1ŨFI¨n<9ĒI§ë„I}rŦą‰0| zÛ"Ÿ,{ŽīąØŲĪ či­îcš8G2 ŗdō:zW=…¤“DŗĩûmŋD3*Yž؜œ“ÉވˆœîÆÜžüT4†Ž$œ.O\TO/”„vZ•˛øĪËÆy¨%ˇV•‰eu!ŊÁ¤ÆŽ"Ī\ÔēnŽîŠéĶ™ ;Ž"u…uČŽoõŅgģšČA*FĪa÷Įābŗ"đsĩšąšÕg–ÅX!åžĄŗÜŠÛƒKšM.âÚ]J[‰YDŌ F1ĐV’q{“9ŊV“YąŊ{b‘ôÆfbT™›*r0Ÿ­kŋ‰$ŽËQ™Ŧs%ˆ]Č&0<õõ”ļžļč××°Zĩ˛đŖ(}ņx•2/ÚĮŅ›ÛãņŦn›ÆN´7ÂÍ ›Ä7Đ=Ūũ4fŲWÄ˙ōĖį‘Į^ˇŪ#ģļšņmėEļ. <ÛICžƒxĢSč–ŗMp ÷;§…a“æ¨ü:ō:tž´’k‰kŦOl-ØŲíĮ^ŋ+Äz•‰ĻˇûPē˛ cļQyoģząĀŽiZÕ"°ķ¯4Īŗ–ž(ļ™*ĮģŒÕáĢ%˜;ŊÄËöqjUß!“ĐÔgÃVkfÖ%㤎;ĖK.Ķ‘ƒÛĨ;Ä,ČŽuûû{=UŌŌ9$˛™cXT€wüfĩ4‰e잊ęI!Ė̏Ŧ-šsę P}Oĩ‚į xí)>'mŲ>”í.ÂĀÉi=°š‚;TŲLøV ÎO­/u­TÍķÃ`ôÆxâš_aŌäHŖyVú5A'|ö'Đ×RČ;Ļŗõ-ĮSh…ėNë,]—׃ÖĻ.ÎãzŖžÔ–éõmo ĩAöŗ°ÄåˆųĮJ|ÚŪŖĮ2[ėŸŲ$AT=;đkzįGĶīĨ‚y!ķ$ļaå39;HüzÔxwIžâ[‰lQÜHĒrÞ3UxõLĪŗÔŽĩ+ÉĨKëx`†åĄû1Qš€āö$ķUüˈ|IĢMö”…c´ŽF€Š7S׎ŧVĮö-öƒj[F.ŋŒôūžõ4šM‚É5ÛZD%$‚Jã9íJčvg0ž#¸[-G7ÂS°…˜ÆHß›o ĪĢĪ{%­æ”‘kFæ Ž6-°–ų2@ėqųÖÍŽ—Ļ*ˇŗĩŲ${ Deô÷#iv 䝨 ÄG1â1ōwãĐĶra$Ė In,/d›Y’Y‡š…K(0ᛠę:wĒ:ÅģŪxf{› ō%I›'$Χ5Ø­Ĩŧo#CoŽdeP7}}iņ[ĀF|˜Áõ )s.ÁĘÎ&ÃQ†-;H”ŪŧvĻyā›c9ÜW8ü1KaĒíŌô嚿įėŸhš+‰˛Ûē’€ˇ\tިШ @ĀÆjDîācÜ×`åąÎøFXcĶîmã‘ĪŲîf$¸9ÚXrzņY^˛MVÄ$ŌLąZ^<›Cŕ‰#5Ų:ƒ3z‚šŗG¤`$c„āļ9ãđĨĪŋ˜rėq­r°.Ĩ Gw'›¨šPļļW‚H# đ=ŠÚuėŌ]xqä‚éĨŽ#™ÚųIsĮ¨ë]°?Ŋ$Š ˇŠãžqõ§ĪäϝĒŌÚX~ĶGv°Ÿ”‚pã8õfŗüEmuuĒĢÃm/›KöYbL†“w+'lŧû×Z~lŽŨĨ2@G9ČšJVW(ũ˛qŠ‹CjūX„H×Â[8*?ršÕ¤ŸeÖÍũœ’HĮΎš •TĀĪlzWPúŠ6˛ēqF'ÉķŒ€Œ(Î1OÔ´ÅÕ4ÉlšâH–AĩŲÉœĶ‹åh™+ŖœÕ,SŽßN’ĩÛBRHöãrõÎO^”ûģKÉ.o|í.KˆîāA%I…€û§'ŽyÍtö–Éeg >{ČBīōߕH말Û{š9û—šË\隒y‹%Šŧil&õĖnƒ×׃‘FŠ °ø*ģļũäå1ezúëŦ p1ĮŸĢéĐëŸfžybŒ°cå°ã§PhSÕ\9tĐğHģxī§ĩ˛ˇ s,lļÎT„Ú0[Ķ<Ôiš”ÚX:z4ļsĘĘ7+rnŊ=Ģfūi4ČlVg/ķayäĐ2 ^§?•T‘JŖwj˛ä€HÆãÖĄl÷ķL sôâĒ!?lƒ'øÅZ˜7˜pØņЍŧŪA˙]RC§Cš•OĨFƒž#'$œPIČęɍqH#˜@úāš§Ž‚ĸÍsĀcĮášĐÔ@:Č8Î"ū&¨k„#Y¨S‚Îâ*–æņčrÎŋŊBlĮ5×ø'?Úˇ€åI^Gã\‘sž"8ÂãC]‡ƒu›Ė`’ ŒũjęliotīcĘõlŽÃ:væ V*ĀqĪOsV•ˇ&3Į9=+s1›H@ŦqŠ…îŖŠEF` ‰ü*@7Ī'§&‘ã@¤ėRÄ`œS‰*•ŪsˇŨŽĩ›ˇåDČ'Ž}juXūXø(W§ãBE%Χŋjq¸ČëJTœˇΘcčC÷Ī=¨ō Pæė=iĨX¨ Œwö§1Ps¸GZˆ–*Ėzpi“qL ;QĀÍFĐųąī@ef-쟭!d!YX’EËĮĨ]ËãˋŲtøÍ—’!ėžā*It+ë›Ŋf6X"ˇŧ‰c‰•˛rŊ īščPŗ’y KˆÚX€gPܯ֘ēĨ†KˆB„ķīۜgéUÍ.„Yu0äŌõҌqYŲErŗDę‘7ĘÛy8ŠnôkŲaēž5ˇŽââh\ÆÎpĸ3žH’kn+Ë[Ī ąČ†Ā㌌â˛ī5[™nåM<Û$ yŌÜ‚ĮŖ0;ŸZ\Ō‘O\ŅĩMVâ6ŠkHĄ1Žô9?:œúr>ĩ4ÚVĨ7ØŽÖkHîíKĢōŠ0ÁŊĒ]GU™5M&ÖÔÄņŨ–i3ōA­8D`Ð2Rŧ’CJ-ŗ-æ-*îļ*ŨÜģHĶF¸͎ƒ=*­†f#ŠŪjOˆ‡É"÷<ō+OQÕmtå˙HvÜã…D,ĮßĩQĶ|GgåËŪ˰Œ{Nėp9ėI=ģS;WA.Uššĸé7:uííĖ÷ír×EY‡– ņė*OėtņöČaį˜LL;~÷×R^j0Åsg¸Ž9%bÅ]œã͎5§Št‹ÉVfbėŦs°€õ$öũíÉēØuŋ‡b‚ōyãŧēŽ)™›ČI0˜rĀz÷¤˙„WOūČi{ƒuuc&YH95Y|ag-ĨĖđÛŨŊŊ° ĪåđAĮN}ķô¤ēņ…ŊŒ7/ir~Đû`„ ß ĮŪĮ§4ũá^%Įđũŗ¸‚c,ĸvS+ŗüä¯ŨätÅ1|/Ļ›9á1LŅNęōfw%Ęô9ÍP×5čžĘęÂ(e{‰ãXŗ€Lü(>üįŦ.ģeĨAqiûí–ŝŋ+3túô¤ų‡ĄĸūŌ§’v’ØšŸh—|Œwã§ĢzFŸ¨,Iwg‚õ{×8‹ˆīnbĶZÎĀ,—rļä™ņˆ×Š^1Tdņá:ŋØRŨQšņmĶ{g*aĪJdHéĨŅ´Û™ šąļ‘ļÜŅ‚JŽ‚’[M*ÍfššŪÕ€$w 7ŒMdč:ŪĢŦ^Hd˛…-!y"–U~¤ žŖÖŠx–úXu€RĨŽĘÛ&bÉ#ėSī€įK•ŪĖwVšÖÚĨŖ¨¸ļ"äH€r>ŖĩGũ§­čŊû°oôë\TŪ,¸ļÕIŗ[hb[¨íŖōАĒĖ˜ŖŖk×ÚĮŠ.Ŗí×Oļ,s™ úg4Ũ6ĩ:gZB’@=‰}ĸ\]jw3Įu“q‰’h7˜ĀĪŨጿąüKâmFËÄ6fž <ÛKe7nËcÚQŽÜI>¯pˇLÉeŲlĒ Ŗˇ|–ä{ J-+Ąķ-ŽĒŪ;]#KŠ"؂X'đ¯Ē.‘eö“ L<ďbXãú×-ũĄp–zbÚę—W&ōõD’ÁĘŽ7môZΏÕn5 vÄÍöŠ ûq *„'úœŒ“ØU*wbæĐôĸĀtĻsš`bNôu*G5įqŪ_\éZÕü×w~dØˇX‘,Dž0ŖšĐwŽēÂ(ôlC7—EĮžÄ°gš— Jä‡[oÚYįŽ7Xä– ŖŨsĮ|tÍM&¯zŧZa‚C,ą4ģÆ6ǃŽyŽsŠAáÍ*ŪČ\¤ˇį–XT’dn@cØ|ßĨtV,ž%Ô ąČd‚Ąˇ p7}Éũ(q°)õÎ ĮīQŧąG:‡•žMcčúĢjĐNĶZ´Á)‰ĐĀ‘Ü×­Gâ-:[ÛŽmaVŧ´M#ī0ūÄ ›kf;étI¨ęâÛR°U¸ļûæD‘Éä2ŽG9Įją6§IbĻâÜũĸMĢ–å†3ōãŠŦKŨ6æÆĮDeĶMā‚R÷F ōĘŲ8>æ¨ĮŖę‘­”ŅéāÔ^å`. ÅĮõĀĢI5š7gq¸O5ŸĢ‹ķf¯ĻĘÄnË bAŨyé‘NÕ-öÅāß"næ2CpAĀ#׎@øsWoėۘc’fy•î 1.đW<ķōŒcŪ”bžėrgvĨä't{䊎âöÚŌ5kŠŖ‰ Ā20üęŠŧŧ˙„™-—%œ°bĒs2zséX:äZx“ÎÕ|ΰũ˜$ ąPûšČĮĐŌQģ# ŗņĨÄ÷Je†8aeUv|ųöė2qīZ|Æ\`ŽÕÆi^ąÕË^j$ŤVÍ"˜Ū@ŧ—`1Ԟū•׆Ž0GCĐ $’Ņ7~V!‰`ĮŽzTw1ų–’Fc.ŦŦĮn‚Ŧæ)ãķĻMy“Áös$ė“G+ImįyHęxŽŽŪú@;ÛČs+&å Ž;yŦˆŧ/wkĻCoú<Ö÷"â"ņí^ųR=rjū™ĨÍk-ô÷/Ÿxá˜FNŒÕĘÎîäFč‚ÛÄąLnbKKĨ0Ān:€d_nxüi!ņ0ēŒ˛ž"ö†æ-ĖŋŧQŒŽ‘Ö¨Øø:KIeš[ŸtŅ´RŗF°=9>•z/ĸ- —P•ÅŊŗ[` ”˙^åCäxĪŊÕÅŪ‡hdŗnnH{eV ãvāGJ֏[1xr=NōŖ!@xŲpÅķŒcÜÕCá†m¤ ŠNŗÚ90\Ē(*¤cn:+BãG†ķGm6îy§0Ōąųŗœ‚1Į†â%rœú•ŌKd/4÷‰¤ģHÔ¤ü Š œuxĻ[kzÃ]ÜļšVŌ´HV@K@ÁôõÍN|?ûĢxĻÕo'’ „ÁÎܒn:lžˇtžŽîDWG{ÄŦVČ$Ž=¨ŧGŠöû\ZG+Y¨2]ũŠP˛äœdr*ŗëĩ”ˇĘ0_%ŠVrÃī 0ã¨&­7…l~Å4-ytĒŌŦÛüŪQ‡qĮ$~°’ÚxšæęHϘNH—ø‡Bü˙ ~āŊãfęf‚ÖI’'•• ĶĢc°¨íį’âÆ)Ļ…ĄwMÆ&Á+ėin­VkCje•M…Õšųõ¨aû=ŦpXyėŌm™_į|uúÖ} 9ßaįŌ-#†wšyK4p9RP °ę§Zš.‡seĻÎ$qŧÚŧŸ0ĮÉĮÔˇēeŒÚęÎڅÂ_ˆĪ”‹*‚Šß Ž•j-ĘHbg’âPŽŌļųIķ ;ŊG:UŨY"mŠqâ̤ŌfÔFšËj#G…žPžc1Æ1ØsUŽ|M&¯áíIV(Ôá-QČyƒaž nÅáŊ-tåąh¤šŨ&’ByĶڕŧ+ŖŊ¨ļkoŨyŪs(b77=}iŪ„ÔŒÍ6ūM1į´ũŌišmē#Ųs&ãķĒđ™Ũ5žŠsåÛ•ļØąGŧōÍęŌēOøGt–†æ/˛ŠŽéÃJ~lcN‚ė$< ŲDēHÃY~īŪ”šŖÕĨĐæãņmäÚ^Ŗ4ļđ°ˆ$•ŪíÃūĪ<ĩ~Úūō_˙gÁqV––ÉæBīdvúqųÖÚi:bĀŅ-¤^Y“Î*Gķœũjž—.wsyuiK'—91íbĀhēÖČv}Y‹Šë­Ļ¯2<°AlČé7<˜ĀSõ,z{SbŧÔnä7×Ųē\÷¯'’›Š åĪĨqļ:Ƨē­ÕĶ\īōŅbCŲâ9Ûßúņ]åÄĐŞ72ˇ–Ŗ䜞})ŅĒŦjOđņS$ĩE4ßSđĸųšÆ­,Švd;|ã¨ų“ÎJgÚîƒëfīļAž8ļƒĩā QГ×5ڕĮ=sIæ€qūÖ3éG=õ.–<×L´×>Ų:ę1^­íP‚Ä’y8į–<ũ+F}ķūč}Ļ{É|¸Û.vÃß8öŽÖF@Ĩ‹cHŦũX‹Yŗš¸‚6Ë V=GPOą5^ŅŊR'‘- ;DÕ,ė"[Īą(ķ$xؐŌg’Ėzp*ŗčÚŦŪ%K†ûJÚŊߘSĖĀ ã?SĐzV´zŨėĐhķāQ{rŅMԅÆzß5Ņ)F`ĄĮŋ49É*g–ēŦÚՕõƛ<˜–G$ˇŨĮŨgGnäĶŦ-5ËŋZjZŽŸ(@ŽíŊ¸Œō{ŖéE|ą$’Iŧ*œœ`u4û ŲnŧIФ’Dö–ĘĢ‹Æš9įŊtĪöãɚ9ã*ÁąųSœä×(ŖĐá;ŗžũ)Č­Ī÷qFFŅ“‘ŌĄøü bhF™3đãĸw‘´œu&Ļ„b&f#Ž•îcÆUšČ¤>ŖU˛rÃG­NŪ@āTmŌ })âthČSųīé@Æ0ÁëŸĨA/ÎwŠY#•>nFũhY†>ŖĨE0ãpôÅO? r:­'<ŒŽ´ĀŖ/z¨ŋņ÷ ?ßnQÎyéU€ÍÜ?õĐ:h‘@Ü9ę*q÷EB~ōö§ü〚Č8ûŲJø…•¸%ĀôäÕ_6&Ķ׊,ÄcđŠîƒ?ˆĨČĀ­Wņ"´W6p ´Į¸ksuĐæä‘1î?S]wƒ05ÛžŸs­qį$§'#ˇã]gƒYNšvNy^*Ē|%ô=~1“SĄ8•G9P=9ĀR0NHįŌąG3ry+ÖŖl 'Ëܙ朇h<úÔM¸ÎIā{S!#,@Ač)ķ;2îE#>´â¸æg?Zy ¸å›oNhÂĨn:w§áÂįfãÆ1Jɡv2sĐRĀ”î$cą í¤2ŠũĶŠC´ų‹Œ˙T玖é]7´dđ8#ž1W&)¸åCTE—iGõČî3T"•…Ŋę+Ĩȉ˜•`°Įz¸aRŖ÷cvJI Řî=@¨ĖŅŦūHc¸ ‘éHÛBÔ‹Ē7öHŽöîVXÉ|ŒFxėžÕVßQWļ€ģ–°ī#îƒ÷€čZíEŨ—›*ũ˛0đĻdRāí_SéQ WKIv‹¸Ė^oŸ“ûÜv­9åØŽX‘iē5ž‡baˇEL¯īģ:ũk‡KŧŋđíŦđB“=ÅĶŨK ļĐĀ“ˇ>ÃåüĢĄô]r†Iĸž3ûĐ\p27pzu¨/õ[{mŽŸ$E•ŌŪ §! ڄß˧c?MĐīŦ5‹f%ímė„;Øķœ’vŽ:öĢļZ„ˇ:Ŋũœ°Æ#ƒ ’#{7Ą§ZŪ[Ø%ßÚõ´ĸNą|ę–ĮøxŌhÅļ­ŌåŸËÎÖáŊ~4›o Õ—S3Sĩš-n=DYM}“å‹’œįúŅđæ,jō߯¨ŪcHÉūöI¤×Xt+Émæ’)cMáÔāŒWmĩí>æ ŸsîļPŌ”ā÷Á9Å4ۈšJAq ĪwŽũ¸\Ŧk Kå‚ۏņéXˇZ‡-MÄ÷Įl°5´(äq–f>¤ūUũSU†ōÎÂöÚK¤ōuâ‘2ąįJ÷˙ëÔ×>"ŅæĶnŪî&+‚)-χ.ôyëÖŠsĄ‘Ą[Ykz5֘˛ĪČukžCnĖ… F1šr3ÛĨfŲëöBÎ=F—^cl ąœĻ3kĒI‹…fųzc}(“iÜi+Xį¯|ey<ķËyt,âáv>cņëRMá+ ­îĄ{‹×SŦæ@˙2˛ôÅKâ™f{x-m$´K "(›kʋËŨ¸īUt}Bö{k+;Y#žx‹É.ˇÂs‘Üõ†i^M^áerņđî›löSŗžŨ:"‘ų’| u,ŪõŸcĄxfia’ĐĨ˞2˛–ųĪ9lu5cÆŧZŌY."I2qō˙ ¯.Žmæŋ-­áx.ĸ‡Ėt‡3ôéš^õŽ\Ū˛ŗƒM°ō,áډš‚nÉ$œžžæąm,’ââî˙WļŠŖōa†FÁōįļKdâĒ6šĢ 9î Ú ˇĢnŽĄļēÚX ûÖwĢ_}šd“ėŽö×ĐÅ#˛mŧžŨ×ÚŠE…Ņ~FŅlīŌdá$f;rū[šā’­;-6ŌÎYĨˇĩŠ'˜î‘‘pXû×w=ö™y¯Ü[ßĒyWn0I(ę}mEŠÍsŦ]¯öŦvém0‰m˜).ĐA9į’xĮĨ' ļđÉ*ĖĐÄÎŧ+ã>ĩ™q¨ŲYÍ|6,OK<ė#89Į=Ώôņ ÍũŽĩoĢŊŎ™lāb˒ûF2ųĨÔī`“HšH¯ ÎëĨ3ŗ‚îVNTņĐfšƒę.nĮkkqtČÂâÉm×v# á˛ëíô¨-/ÄúåΝöuŒ[ĸ:Č;ƒįļ8čkšÔõˆæšÔ—ŗC …$Ķ|ļ!d;{÷‰n9íEÄ÷ĸķR0Ŧ‹|tčwÔä8'pĻ@4ųC˜îŖ Œ /CTuM2MZ!/¤ļŒîYV5ĖR0W'ĨqrMmŠ’AwĒNĻö.dŪ¤ķ–ôÎ}éō˛G~Ößoi-uĖ÷§÷g†QÃRåÔ.wŅFFąŽÕ@jsሠŽ˜ö5âhZëÃwŅ,2HåDŠ œxšĪiWÍŗ-gzt–ĩuDn˞gŠG ¨Jęå7cnj[[ ã$Tˆ9Z"T—$đ3ÉŽ: YWPŌ%ŋĶᏓė†=æ2åx+ģ̓Öĸ°´žÚ÷N´ĢÖˇĶn“ËČļũŧ÷Š|žbæ;QsnĖ΋=p9d‰ÕYYOB ū5ÂXé;[N'H“r_J]^1“ ÆsۑÅnøn ›+{ģi-Ú1tí ļ1哑Œ)-{›_j€JmÄČ&vŨà }+šūÚÔuGMÜC ķĘǍ™*gœž9Į§ Ž5ļĩr÷:LŌÍö‰%Kß3å(AĀÆzãŒbŖĶ4íJ%đû6˜ņ}žiĄ•ųŗŽū˙Ĩ4’gIĻÜG›IõēēˆĀ ņ•…MusļîŗŪŦJŗ€ütĀīŪši—:~ˇåŨi1ŠMįíærL™'ĸúž*ūŠĮü%z}Ô6K1H¯*cĢ?įšN*á} KM^Îy<¨īmĨ‘—rĒH ĮBqõĢN‚B3ž™öŽ:ËKŋŠM˙ŗū{I$ķĘČŖålõëŸÂēû˜™á}’mbŒĢŽÆ”•žƒ‹1Ļņ5ŧrČļVw—Š+#ÛE”R:Œį’=ĢVÖî;ģhî#EÜģÆü+—đ†ĨgcĄĮaw2ZŨÚŗŦé3?xÜöފÆũ5:+¨Fc“8Éę2G•´A}Ęmâ}nî"AĨˇŒŧĄA;@ëSB;R[hŽcÚ°Ģ”P|Ážį°ĮŊbˇ†gMNā[ h´ë¤Q!ÁŪ Y@˙hž´ŗø_QˆkÚŪēßē*|§ ë“×8ĪJvq]š âî÷]åmHķ) ĀįŠ€xËB`Ån™ļ˛ņåŸâéYcÂ7 ûvŧĸš’FĪā^Ŋ¸>€t§¯ƒœd’åa,žP!Š.6"úŽj­O¸^gbĖ_ÉŦŊO_[šÚ;‹ŠŖA$‹bķԓėj-fŌúíėÆiĄ)(gpáSo ;ätĸ÷J.ĻÔáž6ėđ”\ŽŖĄįĄ¨Š]Fî*kâWŒĨ”ÛåŗûZŽååx㯚OøHŧØlü‹'žkˆ<˙-X Šî}rqŠÍŌ4ąŠiU܁‰–ĖÛÉĩUōô#v? ėK?ŗęsÅsi“æĒ/Ν”ŽœU5+ąË­Åwe‘Ė×áaa´ŧ6âxāņNđ|ŒžĩãOo˜ņCxvÖ˛Oq Öá”I‘—Ürۆ1ÉæŽiTZE›[‹™Ž"’B˙ŧåÉä ZMÆÖCÖ÷eOøH%:ÚX=“Æ’;*Ęė>bŖ$ãĶŪŗeŊūĶÖô+õĩ l×$r—Ë7Čç`qëZMá[&Ô ášäą¸ķöyŸ(8Á:R˙Â/` e&ģHá˜Ëk1ÂsØšŠ Jú€eņe„›¤sã?Å÷x'Ķüi–ēÅđļĐãŗŗļTģ‰ĐšįãŪĩî´ģKËõŧi$2GD<š07^=z~B >ąKk!ÜÆ,É1•˜ƒƒÔjWVÔČ,õ]FīRd†Ā5ˆ™ái‹€FŅÉĮÖĸĩÖu)Ŧ.¯%[(’)ČÃ+íÉ'ļ;wĢÖÚfŸ%Ņŋĩ‘Žæ-û™IŒˇBp3JžĶE•Å“G$–÷žEy˜ķœį“ÁÍ; ÔÉMP–ÂҐÚ–ų­Œ˜`¤s†>Ũ*ĩÍ]%2\Ŋ›Eđŗ•UX1É09ã­jÉá)”ƒbŦÂPÛ‡CÖ§ūĮŌ^†i&O,ãŨzĶŧ{ ˇ^Ô%Ķ!Ŗhҧ üĒg9'ōŽz;ûŨß_e†{„ģPŖæ 7ė uIĻęi%Ģ<(įpl}E$ZNoæ­Ŋ” %p#8÷¤šJÍ ĻŪ†~Ÿ-üļŠu}o,ĄIF‹Æ ˙ŦÍ6ųÖĶD°[ī˛Å5™c2í$ēācžRk ´].ŨĨŌā‚5e@ōB‘ā0<} O&“§Él° Jw$~XÚŽ(æK YœĒjM=Į‡æē’?8ÜNĄĮ\PÃëÅYđũė÷ˇÁîĩufd}ö!9ŒƒųŒ~ĩˇúDˇpÛ,–¯qB(•ĮP=ĮĨh‹Hĸ•ĨŽ$ß ųßhÉĄÉ[a$ûœš¨}ĸ-^ŪîōH^‚W"đIG>Į4EŪé kĢ9›söVĘųM­ķ™ 8ÚKaŋņáúÕÛ:HåŸíP_‹ņĘnå™8#סĢ|jĪũ˛4߱͝žoœJíÛĶ=s׊Đģˇ[ģI­ä‘‚JĨŠÁãƒMĖJ'áÉ4Ųĩ+{ļEŽõm„IlŒ•û͒-í[šôšˇ†ãk[iAiŪŲžVd•5hiÍi¤ŌÍ%ķÛ0HTM ü¤Ÿ^+b9ŅÜĻîzâ”Ĩ­Đ(éfpi—÷cXH4‹‹x'ō]aųcŪ̀ɐx$VĪ…l"ŗk—ˇŅî4øˆUâBÍ!úgŒWKĐČͲU#‘ÃNwpqīJUVŠŊÁIÁã¯ōŠn-Ī$RģŪŖhÚ@¸‘íABōˇ­@ŅŗbsĮ§U›Ė`FxĪõ¤ØĄWjRŠ-K˛€ÄfGŽË} 95,Ļ6ŒŠ9įŌ 8#Đ1ŖæäqĮ4ŒÂNĨ=•2Cōō) ­7*@늭&\ŽƒgūZuāÕiøLL s¯<7jΊ]×qdƒ­hHAéŌŗŽ@ rMR:°wí öŠã¯jŖ`ėųG((?AŠŊ•\ â‚npˇ­Iˇ \ķíKâēiĀ ģ“ÜņROuë•?ėsøS<@¤}‹ Ĩē~}Qŧzœß,„ŽäOo˜×Yā|>ŗvÃûŧ~uÉŋúūŊI?­už ã^ģÁČ)ÉǟÂhö=>üâšŅ– ô>˜ĸ>9ļyŠā“Îkr˛$œã9§˛‡%víR’l9ÅFŽĪ …ŨõDÜa- ŌzåRĻôe@3ؑúĶWk\HÄ`*€9§ÂáĮn8aīH ĀÚĕúS ąĀ ¯Aښœš<õîiĨq!’a@Ųž<ųx?ZkF=ģˇsS h?7Ō“œ>ã‘ëژˆ–cÜt5Z[Bō4 åqˇĩ[‘€Č>âšHÜrN{P ĸéZĖZĘËsĨÅMå6ādƒ–9$’AĨĶlõk{­7v’ęļ–ļô;ŽzWf—vņųĪ,č<Ąšˇ6z‡ívM+bå7ėŪ@pŊw}=ęÜÛčJŠG)eáíDXjļŸdˇˇ[ĩķ#mãåbyá˙SK¤ęimļ“okpķÄėžvAAÉ?†+ĨĩÔŦŽ–ŪęT1TpÄZÎ:”ŋđ“Aiđŧ/ŧ‘Š‘”ŒdįßôĨÍ&Įec.˙HÔŲõŽ Os ņ7û˜ÎxãĨ2˙IÕgMI!†Ø}Ļx卌Ŋ6íëĮĩtgQ°¸šKxŽá{…\ē+‚ĀVvŋĢļ‰a ĐIJīp›œáW=Í%)ļ’Ŗk†Š§ÜęZ4öąÖY×i,Į'šlēŽōO,WVÖī-¤pväe9Č?KoĢŦ˛YE$R%ÕĘXÕKmú8Ŗũˇb×ĸËÎė JŦH$§Ļ8ëJ.Hrŗ0áđƧŒđ ëm˙hK¨ŋvÄ+Šä’O8Ģá›‹ˆŽ.äŧHõĨŽu’$ų ÂŒŧœúօˇˆ4›‰fŠ+¸ËCHįœmž†ąí5HŸÅwr ‰Ŗĩ #‰ˇ*ƒģī}Ŋ*Ķ“"Ņ/6‰{,VsËĒ0ŧˇr|ä‰pUēŽO­3PĶ/ou2æŌB‘[ą2ŋ™€ËŨv÷Í âŊ2{In.$Ž&Eqå˙xāĨ>oÁi¤~Å>4÷T |ÛēĪNiZW…SCūŌ’ÖXī$ĩēĩbcš ŒAëÅB<'cũĄāģŧûB`ČË.ß9Î\ĪøPž$ļDŧ7PMm%°Bęø%ƒ}Ü`÷éY–WâĮ\×îî-eˇŒE žY!™˜†`‘Í ™h'c{TŅĄÖā[[§‘bŪ$"&Ú[++Ä$Ø\Ŋ´7rÉtņ Ú9 °E#æ zã1WŦ5Ÿ´\Ŋ•Íŧ–ˇ^_šąą ”Î3‘īÚ¨ë:¸Ōõ•i!VÍä9 0Ęíéß­$ÚcЇL°KŠŽ4ëéäšļUI­âšÄs3ÎÕÁÛĶ­oøFôŠÖešÍdķ¤ųcķОyŽ{OÕæģ×l5[ģxáŠM>fBŦI`ĨOÎģ@ōmčvô¨d¸†Öâ[‰nˆ¸' œžÕÅŲę÷BÚÍWS–Yo´é]•ʝ˛¨#úūU-Ļ !ĩđô§Všpōėœ;ŒdÆxë„ŗžhÍĩĘj29՞ŨƒHYZ2N8ééÍ2 G…ģŨŨũĸ VHœ~bbÛsØöŖ\Įgm¨ĩ9ėžŽH°Ę[ŖĄî*-G\˛ŌŽŌŪrûŲCŸ- ÚšÚ ôâšŨĖž$2MŠ_ Ņ4‰%›)1„įi Å3XtŊņ ÜWM<7áŗÚ8K, Ī0Î8=(QÔ/ĄÛC&Õ#yĀëDaKg#=ëđô°My<“ØKŦŲ7b!V<qÛ­RąikĩžÎīû]d˜Å1V؃ˇž›qZžQÜėI‰R)†h¤#d¨xėEqš:šģąhėīŖļq¨ U€sˇßī6zbĒéoht —J¸…ã–DšaiČ]ŪŖ‘UČ7WÄrÜ_ÛÆ°Gö+‰d‰%ßķîLä‘ĶļŪí4ŒēyŞW#8ĪĨpŅXJ‰Ļ;iN–ÚŒĖAŒXŠįˇCš’ŪĪQ_-ܚ,Šj,~büÆMÃ!ŽOO§N”8 æ;[{ÛYg~B‡€:⟠խĘ!š)Pu*āûuŽ#GŅĻĩ“J™4y#ž;š|įÚļėgžŸ0üаé2Cáų L$ŠķuЍv´ņīcōŸâĀ#Š9pægt÷,‰žX•H$e€ĪŌ“å8!SČįŠâītë2t24[ÆŗY%i’Hˇ2Ģ ŽÜķŠí–ãUlJĄT€jMYeYôûĸ­skÎCIb?:zĒ.PŽ{Tæ F 9íPĘ ƒķtũjhæãžŧÖõģëH.Ĩ•ŽÔvŒ$Ž} ô¤ÖÍ垄7ę3ģĨÔx” ŦQ˜ uāžžÔĄßXkwúDđbís4îĖūU=ū›Ŧji†i­VW$Į%QT‚ādä~ĩĻ—]ˆ×Š<ēũŠZÍ3,Ą-åHžQ¤ãœĶN­lúŒ%Vî70HÂ&‹heR3œķŸO­VŋđöĄzu!Õ˛ ĩ˛…1ūŽÉĻß=ũä— …Ґ!Ã3cœįĀŠ÷Gvsún§s%ū›u#]ÍũĄždJ2ˆ¸sŪļn5ûD”‡ŽVĩYM´Ãg<ú÷ÅGi _[A§(žfŗy +Ã#ōF ëīUÛÂĶ;\Û-ō>yüé"hūläĪ#ŌŠ¸ļ%t[ņōéš\cOÄr´ƒ îŖ– 1Œâ™Ŗk×ZuŠAŪĪ&æšA _)wuaޏãę*槤ÜŨÍcwezļ÷VáđĪõ*G<~[NđåŎ /aÕ%bę?)q+gˇ÷}8ĄrØw¸ž/žk]ãŠc평y#œ“Į=)–~$X|#mŠI MĩU$ pCgi'>˙ίŪéW7:ŨĨú]ĀBS9'ŠÎ~•…­é Ĩx_VxĖ—yv…Yâ…k$ûš˙đ’Ä‚ņnm&‚{bƒË$áÎrjžĢŦ܍/Vˆ[=Ŋäūbāü§#p>ÜÔãÃöwzuÂKu-ėJ„Üdnųy\`cƒÍ:_‰­.Ręúy&ēŒBō€ĒU8į'4ŊĐÔËŌ´ũzų!ŗD´6Ë!ßĶåo›ÉĮéZū#’WąûEŸ•oÄ$ sŒ€Ā2*Xü?mĖw/urvۈ$ ãlˆ3ÃôË/ YØÉŽââhb$ÁŒ ÄHęŧf†â÷s'CēĮ§CöT1ŊõŌŦ…ˆØAc€>™­m\¸Õ&ģ[‹h­ü†+°9Ūŧãæwë‘Å%ŋ…ė-ŗ,÷mäĘŌ ixÜŨOķüÍI.ƒĨ[[܋™¤ÛtĢ<͜:(47=QŦOíČė+–ņ4)c¨Yxb]Öōˆî0:ÆÜnúŒ×MkQÆ aG­GwiŨŧÖ÷)TĢß5)ŲÜm_C]Úw†ĩ ZŅ![™wÜS‚šųņÜRžą{ĻĩīÚ W;Eē‹bėä’0yŌUŗ†EAgĄi–wh‚Ō4”giÞÃ=)ßévˇMioÉ ļī*´ž2rĀc4Iķj4Ŧdé>cęæxŧëČī*qœmÆ{bĄÕuo;Ãp_YĘlck˜Ô`ŽJnÚ}Ŋ˙ Ō†×Iņ1_Ŧ.H% ŅąÆAČ­Eŗĩ†Ö8#ĩ‰a…`ĀĄ´ė+6Ž_RēšŽö+ÖūÉn–ÂT¸› Ķąo^œz{ŌÜBįRŧ† ų!š)bĀA1#ûŨJë^ÚŪdBŅFū^6‚ āûW+ĒxnæûUŋwĩŗ.@NėUāĀĮ@99æœd„Ķ)ęwĶŦúš=ôö÷Vá~Įl,ĢÛø‰9b a›ÄīÄōũĸ(ĸt‰d8 TîéĶēX-ãļˇĖuc cĖ|gu&ĒŲ_h°tĩ–8 îŽw ‰ˇ9üÅÚړZŨEwÉ nEb™÷š=Y´ũWÄ˧\ [ax ¤›>¸Ņļ "ÖbŌĖG2Bō‰W§‘ÄUĢtÂ. 8Î6ˇãRŸ.ŖÜå4™õĩ{‹kØä‘íŦŠG2u™wp}›ĩS˛”yz™“OÔ~ÎđĮ2ÂÂBY—¨,{“Œâģ´€näœį ÕĄ‘҉ëéOÚy ķč­ŧŊa—­sö¨g‘ĖOÔļJ€y¨Å,°ŨÃãīc´ž1­ÃĢåKnV^zĪnÕčx,ŲßōūϚø Cp ŖÚj‡˜"KAi$Z]ĖSϤL’ĒŪVsی`ãđŽķNÔcŊžæíĻC -"đßCWŲĐ2:qšt*ĢÁúŌ”ųˇ.Ą|¸įŊ#ĀE1ĨXĐšō¤šx`@ėOlb¤d \96#Ÿ˜cđŠvüĄ›ˇ\ņOÜFHęiާ$nÆO4†U•žaŒįŽQUä,rJœtéW™W9Ë ‰ąŽz@Ę(‡ËŒį4ÂƟ/$<Ģg¯°šÜ2((ōĘyÁõĒ×+‚¸=M\r6´ŊjŦÉŊˇg’(‹įpá~՛p­æ7SčiJ:Õ3˙q:¸?­4&oéįũ"=9ęú:UxĀQĀĀĒeę€xú×SāļÛ­]įō€˜ĒŸÂlūz 8gƒĶĨM÷OĘšĒče,réVk‚HÉŒVË.FĐS\…ÚIéO#cyzRHąŽôÉ ¨ ŲÔã=Ē` ° •=éŖ6ÂŪŧŽĩ.ÔN2 Đ)'ŨČĮ4ŦœÛ88Ĩ>쏯qJ1Ú­ƒÖ ĩƒr>Zpų“8šL nīųĶdÚŲã¨ĀÎŅĶ5VöŲ¤‚_)Ų$t!_?tö58˜"198č1Q™Ä˛28æíŠāŧ?ĸÜ'ÚmîôËĪí É%˝ûĻÜ01“ÎxĢzfŸĒą‰î4¯$&–Ö¸.…™†1ž{âēļÔ­ÛQ6’nD^km 3“ØšĘžūæ÷VžÎÎî;o˛,m!tŧļIž˜Ŗ“d¤‘•eĸßÃũœąØ‹fK`š@Č šƒ“Ķ?&ŸĨjPŨØĢiÍm˛Ö[i%WB aøää×_%Ė#vébQî|°āzŸAP-õŗDš€¯PD€đ:ŸÂĄÍ•ĘŽjĶDžy4xįŗ[ėŨÂIÂ&ĀÆ9ÁęsV5{KåÕ­Ž ´Kët‰ŖhÂí$ũîx>•š.Ģbą#=í¸IQ„ƒ 3Ž=y¨fÔ,``ęÆO/ũ`û˙ŨúûTķJ÷JÆ.‰Ĩęúnϊ m¤äČd;Ą_îPO­lç]&ŋws˛k4 `į~FyÆ?ÚĮ^ÔøuŊ2)¤‚[ët”6ŨĨĀ9Æqõ­ =BĘú"ÖˇK¤ÆŲÁô4ī'ĢļČįm|7r4شɚ×ė˙ghRhĸč“Áo§ëJ|5qy›ëģfė¤‚(ˆ$u$õ­ËŊ^ĪM1­ŨĖpŗũܜäw?ũzĢsâM6Ūâxå/nČ%"&!Ct$TœēĄ_ūëÛ­{ ÍB6ܨ"’8v•Úr äđ*ģøNîxuî5bí|#ŪŪBŒôúVŒÚíĩœÚƒÉ<ĸ!tXūā ō8ÉĪôǎ>-˛ŗ7­ī[ČÚ_•OGįˇZ/. ]xM/Mņ¸Ŋ‘šę(ãmĒBœĢ|ķM_ų‚äŪj3Ü$öË‚Ǥ•9 ‘ÜRøĸōk}%nl„Ņo)‚Y€<`ö5[YÕ[ũ%4ûģČķt‘KûĻEu “Ã“ĮęiŽa;[Ïö{–žâ[ÛŠmūί#öŽrTz÷¤_Åugd5 ‰g¸ˇˇōĢáXšãžß•6_XęW:BĨĖ›–HÚ]ŸģÜ#9ü* ë˛EŖéöŗØĪ5ą0JXœ¨ÎĪŽyĨīXz\ģeáKKYmˆšåūĘFRBĢu\zVm֏‘Ŧi-cozŅG;ŗ"n‘#FR8ė9"ŽÚø–îm jMĻ”GÁ|Ņ‚0I,qōŽĩV/ŨjZ%õāŅņfļåÔ´œIũåÎ>Ŋ)Ĩ$ ŖN/čŪĨÚŲb`ÆE&F’sĀÎ:Ô̤izMĖēŒ0Env“#ôu?OŠ6ŊršÕ…–Øaļ•#ÚŌÖ*­ĐĮ­0šH´¨CŨÂŽ¤}åŪ8ūT­&ėÂër֒4+›Šī4čmÚbvÍ"&žyŠ ŌôģiĻÖPEæq.ÔxúzV=ίy ę(Š~UÔP …¸Œķ×EīĩuĶáîâˆÍ~°‰8ŨmĄš=úŅĘØ\ędvÁG“ D°HđrOaU¤Ô-ã›Ę‡N’g—ĖXcR#ŨПūĩaKĢÜÅi8mEZkMB8ö(/ę:§ŸjŖŠ]Ëi¨kÍŦņ2dØģFđpÎ?• Ųßċģ"1×Ļ1N1&ō6wÎEsęéqŽKo.ŦöÆ)PA ÄĘTôËd“ĶĻ+>-qīn5"Ôæu’ÆWŒŒ/īœė‘Į¯=čåaĖw"4SœžįŊ8F6˛m‡á‰ĸ—@†Hoåŧ%W{É&ōŽ@ĘįÚ˛,õ6š|ˇ——i¨Å;,Á˜!@>^¤šž]Xîv ˜ūęäƒ=*%=ÅqZEäķĪ§Ë õÜ×Ō…´ŽHO”ķƒÂāã뚇G˜îĶ%†KŲ&{ŠĸœŗHÃËų°O`9^iō1ŨĪ#ÛڗŠŨĻ#*c=}ũ:Ķ׃ÎĐ7Wn‘Įáģō¯äēŽį,›Ĩb1)ĀĮûŊhÖ!7žĩ2Gxįėņ5šEb@;įĨ>As‚åC6ā6Žsš ŽĨ=Ô{WĢÅ+ž¤ou7ÚėâÄLFņž¸čŨ)učįmRĘō;]G6‹`HÜ~´(y…ÎŪâė%ŧ ‰dAū­\)ĪĻOJąĒ0%$dķ^xÖ-Gũ™rŗ\æHœ#ãŒGŋ5.Ŧķ´ˇ†k]@Ī%ŧcO1+ü‡Ž>ëgžhåķ ôŖŽ8SœŠb ۃÆ: ĘÛŽM¤Zi-’åcq:ŗe°3Č>š­…` ĀĄ5,cw<‡8c5 ˜e-čjŅÛėj´ŠWF{žĩ#G1ũ§¨ęēíļŒÖđ‹BIå]ÛÛû vúԚGˆ¤užĩÖb[[<•—”e?Ä*tũOB×.îė-…Ũ•ņÜņ+…eQž1ÖĻm"úá5KŲcŠ;ģø<ˆá/ŠÆXš9ü+KFÄŨš?đ‘čņŲ=Û]ǝå–*F[āc'Š‚ãÄZt3Ú§˜íö”ķ"hã, äs‘Ķ­fĪcĢ_évÖļæÚmØG&[!—fë-Vļ])ŅŦ÷ZÄÖŌ&æ Ą+ķ:ņúŌ´{•ŠŌü¤[œōk2ãÄ:uŧÁIYLĸņÆJ‡''Ļj͡Û|šÅŌDH”ųF3ÆĖņŸzäĩ=2ķGŅîWΆK'ŊŽd čLŠHĄĸ1Mę&ŲĐŨkļ––āũžeˇ“l}ąÃ‘Qę)Ōô˟ŗJgyĮ#v3ˇ=3ŠŠ}áíBææũ­o X.äŠ|˙@Õ/īÄâūÜ,SŦĐ,‘Úvá}éĨ摪.ša‹Ļī"Á.ŨŠã IíZĘŋÕāÕaŌĸÍ6÷ˇF9xÚ@Pr2:dĶļkGQŌî/ô¸-Úįũ.,Â.7UôäņUeŅõKÅĶīaķ-&ķØˆxcĐ3Æ4—.ኆ%WĶĻ ē/nŌÃ9ÉhÃļsÔcԐkņ‹-68lîŽÚņŖÜËģå븓֭éē-Ղ^Æˇåâ¸wx•ĸē,I'ߓTėü15ŗidęLE`€BđŨsĪĨ6âÛ`މ5+¨uŸŪÍ2‚LĢŽU—<~SFšũ›g§Fm$–&Žy˛øëīŠzčomĸŨéąßJÂáß2”7,==:‰ŧ'ÄQ™ĩbŠ8ÁMŊTä0āāũ(\ģ1j:ķĒB—gė'ũémß2âÆqūĐĒ>$ž7Ú]íŧVË"ZM’flm`Āđ1Īž•vīÂą]ŨO'Ûî‘.HÁ\3.0Ũ?ŲŠŽü7iy%Ë}Ļę%ē˙]o…b1Î1ׁBåNã÷šMfaŠ5ĨĨƒÎ‘HŠ3ŠÆŨÃÄW;§Ft=VĘĪPļŠâ;‹†{[øūņsžđ5ÔÚév–R\É Jdē}Ō–rr•FËÃ6w)(¸…ŗÉ+2ĮŸîƒŌši\fĖrÅt¯äJĩļ§8=ĮÖŧųⅮd1ĩĩĻļĖŅĒâBw``údįŽîĶNĩ´[&ßbĖåäÁ9f=MUOi6˛Ŧđéņ‰†N¯=ũéFIW*.­puõ˛Y­Ū <ÄÄjs.-ОzvŦ­Qē´ĩŌã3ÄŅĪ<üŧ’KAíŌēŅt´ŊûGØ#ķw™7ãøSMˇŅ´V‰ÚÎÖHÕˇŖ&oõüQx ŗ đ™ˆisÆ%\ĨäČ>aŸžMT˛Õu ũVT[ÛX"†ęHŲūųP8#ŽšįĶŊ—g oe G†,‘†ė~´ÅĶl† nVÎ?´÷˜ ŨĶ֓jí'c NÖ.Ũô”žũ Í4ŅMnÛģiãxV-VūEļvÔ×įÔd´‘B(rØ?^tãKĶVėJļ6Â`ūfņČcß>´Ģ§ŲƁVĘŲ@}ĀyK×֟2ė+3šî{ĪëŅŊБíÚh„ĢŒ•3Ž2GYuÅŊŦš‹iņ-„s@ČĘļ ’9ÆõÔɍģ‹O*kXDaņԞ=ęAglčĒöŅ2ŠĘŠAôĄJŨĮĢÅî=ÜĢĖ–ĮIۃíК|š­Ô_ín­§‘ä;i‡Ėč¤áÔWb`L|Ȥއ* |ģTw˜Äą€Kdá@Ŗ™v …Íõ´piūEũáŌ§•ŧųĖšNߕwu5——?aŗ2^Ũ5šÔļE*1ÜđÉ8ä×[a¨Øę"Dļ‘d Œ…BĪLdtĸ×YąžŅîšX†<Į8lã°Í>o ˇ™ČC<Öå%Žîüĩž§åFŒĖCÂXg>ŧg“Q1žãVÔ!ļšŊ[ņ¨æ<1Ŧ|g?ÃĶ=kĐáTw ņíYZ6—uau¨OsQØõĨUãí0×xĢ’duëŪŠEÄDõķķĒ@thH9ëĐU„#ëŪĢĮÁöĢũ)q$°×ī1Ą“ˇû"ĸÖ×7V|uŨČT‘ģzīqÃn^:¨uōĢyc†ãįūB­îm Ė-E1x ÎüÍt>ĩÛĩeôŽ{Q`gBr:õ˙x×AāÁŸ\Įî˙œžg𞊑tr}iđ–ŸNiˆ\|ØÜšâžŦr={æąLädĒwģ>Ŋ(uÜFAŨCģdm ōi›ĖāņVHøĐ`¤0jA Š$¨ę B cĐĶãrø(œâRi $įp:\ņŌ~ÎMŖ.CĪĶ­*ÚOiSÛčÎ#Ž9"’ßäV€ų8ÆGë]ˆŧˇ $3Ä’Āc5Zūî+; īeF‘`RûTd=(į}‡cĶôûëuĐüí!ŋŅ’T›% PĮƒŒū4—ēfĻ×7˝椗ŅŨG.õQˇ>ųāÖõˇˆmfŗžîė HŖ` ;‚§å`ŽŊGãšŌ7PGl%i!ÚĖn=ę\å}†’ąĖ6‘¨Iũ Šeiībž2Ō]šú}ĶųÖö•§]ÚęšŦ÷1F!š•^=“Ī(ŋŗEIÍÔ"r¸Áü{Ջ­ZÂÚ8L—‘*ɒ„ˇŪ’E5&КHČÔ|=s/ˆcÕ­ŌÚáZ!ĄēΜ†?N)ˇšũäúģ$öŅ­ėqĮ‰]ŊČüMXÕ5¤iĐi×k›éDĘmPĨ‰׀*/øšŪãCk‹ë•ķ cŽPŒÄƒ’@č*Ŋë ]h7×cRÅÄŊˇŽ/¸~R äõī“IuáËë¸īw^Â>×j–ĮlDā‚rzûŸŌ´Äzrà Ģ9xîXˆļÆĮqäc E'‰ė!ĶĄŧķ$hĨ›Ę]‘Áģ‚:ŒsIsB=[AēÔt[KHîŖŽx^6yJ6ÎzëīV5=įP—N•o/˛J&qån0^ZAĢBōj&;ÉĘHÆ$‡åŒ°Č#Œą>”žš{Ģ{‡mFKÆmĐų[FŪ´ŽĐhAiáųí/fhõû ˛4‹måŽ˛OÍ铚Nđ´ļ>HŸSšâ;d)lžZ¨‹ ŒûœzÕŨ>iÉģ‚YKÍ šV˙a†Wōä~ÉÜÜŨÛ^ëpũžôJ“B–Žeb¨_œ1č=éĢģ vZ›īá;i´(ôy.îÚ(¤Ü¸íĀÆ)müame=ĒÜ_$CĻȍIÉ ;f¯^ęRé÷v­ –KĘX.qøâŗSœÍidņiÅæēšX–?0 2gŠ÷ÁĨīX,‹/ĸčö7×2üņ…XÍÄø€Âœ‚ØâŽę:5ĻĒąÅwI`øŪ@Ü:tŽfōæTž×/ītû{–ˇû2G ¤0EnN?úUûīęVŅë@[Û3ؘŧžN_ĻiŲ…Đž#Ņ!ūĪ™ŦŦeyf–3;DįĖ*¤rš<‘Š4]Ļ7i} ĖŅ­áÔ0îŦË{jŠīÄz͂ę>tNlŧš$ė7ŖáĪqƒWŧAŦ^ØC§5‹@†æå"f™s€Ā‘ßڟŊ°h[.˜äˇIŊƒ 9#šĢŲļ+#˛ŲÂĪĖLcæú×*îyaė+Š“SÕG…nĩ+ETLLĖą…ęøëĶ8öĢßŨZj†ŪKåš+9Ļ’f‡į$ô$öāgéō1×4h­€OjlĄ …S€? ķéõ­_OąŌČŊiĨ™ZîåŠcäÎvį°íV ŋ×o­´@ˇsEqv$’g1 LJĄÆ;dG##§ŧÕ-ôųm šŪ[§1Æsķ{úqKy¨ÚÛęļV2C/›rˑW+2A9ôŦČ-Ž|? —R‡ûFįœ/Ė\éŽū•ëö/hŅ}Žöë‰KŽå]˅č03MFč.uæÚÕäTķ hYTœgĻiēmâßévׂ?$Í}šÎ23Œ×#§K7öīÚnīÚü ÷Ú˛Ÿ-W¤vÆ1ŠMÔE§›IîŒIfÂų |'ÉÁô9ôŖ“@šŨ‹ąĘąœũiNí nÉöŽSÃwÖ:o…äÕnĨē,RāÍŊˆ#€~ĩ×DņÍn“F>I2ņŽ㊖Ŧƙ8,3Ūĸ”ÆX‚ŨNjÄ̐2cUĻđq'n*FŠiŠY<˙fp™ƒŲŧnČäŒ})Ķ]ZIm4ßl‹É‹‡mĀĒzįm4Û´Ô5ŠåŅ€iØŊŗ1^~\‘ČĪZ­c¤ęÍĨëPÉĨ$/}ųhŽĄU‚íĮ_ÆĢ• ™%Ĩö˜–˛Éä†éœ88ĪsŽ•'öƟ%›ŪEwļBw˞û×3wĄęR]JcŌÕ ›N[vU‘F\œûãĄĢÚV›ĒAáY ŧļ‚âíËmŠRáÆÁ8i¸Æ×¸s3 iƒØģÃ$lZ2Ņąû§¸ü+–Đæ¸ņ=ƒIĢÛYÉĘDJš ã<֎ĢŦū6ļ–iöš"Žőƒ×°ĒZUŽŊiŸĻĨŒVļĐmķæ+—¨dЖŒĐËwc` †IŖ‰‰X⌜dô û[LiLk{:H#e ügĸũx5ČCá¯Iâ8u{ä‚Vķļ—â% ^ü~4ē_ƒu;m^ÎōâX@G’âD^@ôwúĶåq]ö7ĩŊXų–Ömō-ôˇŦƒ„ęŲAWeÖė-ī ›Ü¨¸Ti:•P2Iô⹋o ëÖˇ0\‰íhã˜ã$ūņĮ N9?Č ĢaájŌk˂ö­ssjb2$™‚.síG,m¸]ö:˜Évæ(nK 1ÁįĪjuˇ†Ļƒėo÷ĮdW÷ nV œÖUũĸø|i0‹æ’ŋS eCqŽHĒJ-č+ĩšĢ¸g–Øũ•€žåíŽį+.ÂĢEĢßĨŦbËKŪí}$2#ÎNÜdį=ŋ•O?†\3­ŨŌ)¸ûJ*íÂ1Î@$t9Š!đĖ+i,úõKOö(põÆči{ĄīqžØPČģŨœJŽîöÛOą–ōæ@ĮÔõ'=÷ŦÍcDmJ;ã—ŪUĘėKŒc‘Žįæ­ęÚ=ŽĩmŊΘ#ŽQ!Tln#×ۚ•bĩ1?á0ŊžÉ§ļŌˇ7Ûŧq´€ÆNqøÔŸŽžö’ÍdëÖūkdũĶÎc¯ r{S$Ņ-#×­4ˆ#ŧŠÛ2]M"’b0z3Åk_x[JÔĨ•åŽB Č ĢØztæ¯ÜM\›HĪÔ|döÚdčŠ÷’[ æBøX”ôį’HĀ­ ÚŲÛšp:ąäūύŪx?F¸–I&I Ž‹áČ Āü:ÖÜpÃmfGhäŒTÉÆÖCIßS™žæŧÕį}Fæk@ąBąĘW3c<ג*Æĩâi´]28öĮ5˙’¯0‘°#'999ãÚĩít .ŌãíY ßvöÉ9õæ’ë@Ōõ Bâk‹$–IUVGlüĀtút]_]‚ĪĄĢøÎãLģh…ŧąÛĢæypėsVįז+æ{¨#QmfŗJĘų$ž0 ~ëV}I’FžKŨŲÔļėœ•{SįŅtųÍÁšĘ'ûHi#īc§åEãØ,Î]5÷ŸSģŊœDM…žÛ'|„qžũĪNiu={Y°‚ÃƊÔ\\3nBK|Ŗœį'É­öŅtUl,­Ņį@ŽƒēŽØöŠ&Ō4÷ YÄBÆaQމÜ}8§ÍėvÜä4Oęē†Ĩ§[܈#[…wad’Ŗ;Oû"ļū•Ρq I¤éú\°ÍB&ē#œ“Éäū&ģ¸ô<™Uė Û72.Á‡>§Ö‘´ËŪfÎæŽJ˜€ũ)ķĮ°š_Vs—šŪŖ€įÕåēXî&ÃD0<°H÷īÍsĶx¯Y˙„v͚â]ŌÍ!/ī cœãŽ+´Ötá¨]iöŽ`[52H‰Á“há@î3ÖĩãˇˇØĒ h_,.Ņ€=>”)E-ÅˇšĀŲk/Š[čŅ]ũĸSutķmađĢĮđįŋĩwl礓ˇÚí­â‡2JXį銚CoiščĢjy ÷GáV­ÜIu+ Žr8Š”“č4Ŧ9“%Fi5’sŒSÉų&‘˛F09ëíPUČá+ŽøÍ?ˉ˜ŅCŧc5|0 ŋ­H ķ0,3“@´ XIČĀ ķô¨Ž:’zMK–iLDm=ĩC'ĘXФR)Kĩˇn<*ŗ( Ąģį<ŠļY@n™MûAČČÎG­¨Ā Ø=Ē&åI8ĮP3RŒ”į§õ*އ†QäŠĒß4Ņ‘ũđ?Zĩ6FãÆqÚŠ¨Ä°ƒĪÎ3ųÕ!3ψp3R¨ĪQQF=ûTęŲņLƒ…ûÚÕãī˙tTņ-wb02w zp)ņēÅØ'$Íũ;\Pn4ūā3ƒųUõ6Žį;¨ķí8ÉÁ=ūc]„x×Ļ#œÆNüW=¨žäƒaŸûhkÁā˙ÂBũĮ—Ī×˙¯N ˇFz: Š÷CZti‚Ų|’yôĨ€jlRnrǟ(?{ŪąG#'åĮ<úSc„1ƒuã“ĪŌĨ#ãīz⛴ƒ†đõĒ$ļ“ĩ”ãÔtŠ‚„<xę)]š åzũißëeíúĐ!ą)mĄų8ŠÉųTĀâĻ vƒ| aÜā`BŅ)lą8éI0ßŗチڧ*X °\rxĻäzyĀĄĘčžS“ĶŽõ^c$쁠!zôöĢŌÆ\‚JRŠ*RÃ8Ļ#δ4Úg^˙fŨĮsû,…‘˛" ūœŠ|6Į:´—–Ú‘ž)8ÉRcp~î={`Wy%ÄpE#É"U,Ū¸æąôk\{ÂŖ1÷AÆOLRrnK@IXĖŽĘú;ë-I4ĩh–"kUu2Į;Ŋ9īKm jiGī3Ęģūč|áWŽqŸŌē+;¸ü•ß„ ëéRĩėnŌ¤RŖ2Ŧ‡Č{dSR`ŅĘÁ j6ķinÔ}žîI¤&B>V'Į\7éV­tMVÖÚx[U&äË į; ’yĮš ĐÂūlîĒØ',zÍU‹ÄÚL÷!-ĩd)bē'§JŽfĐ­ffÛxsTŠ ŪâĐ}’éåÜģ˛ĘÁŊ{üƐøgQOÄ76Ísųŧ@U‚s:׏Ětķ[[ĮpįC$ETáĮ|b‘üWĸĨĮ’oãWČQ@įßĮlŅwqhWoęn§,ŅÅ%ÚGå•B|ļQŒäū56…ĸŨhÆëΏŠHe˜ĘLjAã9$ŸAZSę–Ööŗ\Ī"Į&âÍĶšŪ+Ķ>Ãu?™ ĘHĖ,i89õ:Øzé6˛Iy¨_O šPą#pv Ā?‰ÉüĒŖxpËyŠÍqv’Ûj,ųX …ÁĪQI7Œlĸ’ā}šųēĢɈ~ââëŌĨžņŖ=ÕÔÆ+äT’7pĒ ũŌ2úŌGá'ė÷Q7Ún‚ ‹NĮp^œæŗĩ9ŪķĐËaö¸ŦŦTļ—…‘™š#¯8,^*‘ôkĢÛ[üĢ{d”(—Ą#”<ŖŪ + éLĶ4Đ4†tXäŨ#¨ÆÜķíY>(ļ‚ō->ÆŪŲîĩĖrO8bąßž3ž)÷"Õ­Åú› LÚBˇ$ųÍķFAéĮ_”ÔGPšƒÄ:­îŸ ”`š#÷mw`÷Ā=}*šë7÷ú>’bÔ%-“ļûp É:ā`ŒtįéG-Đīc´û,gŽ…6!@\(ĮN;Tr­¸‘ xsįä7îōš8Įį\ÄבęšU…æąŋ•GĻësM&‡,ēƒ=¤ĸQ¸m,˜ŋZX\é!žˇģŧōãĶæ{rZ/´m]Ÿ)äuÎ2éWä†']ģGA^}Ą]‹oė\ęŗ:Ës:˜ÚEN[Üãķjß\ŠK Ģ˝Zč^,ngļL+ Žc×Ū‡LîBĻķÂô¤q8î+ĖáÖgoJ—œŠ:j+!ŨåąûŒ5&ŖxņØęļŋnģ{{kØ“ÍbʇžoAÍ>G°šēžŠĒÃĻIn˙gy>Ņ2[îR>RĮ‚kE‚7A͌ ãuۛeŌ4u†ęG‰îâ+.ōX¨<œõüjÕŽ-,uĸš”ÃúFÎXģĮÆãž¸<ŌåēÎå’ƒkČ~ō‘i„aeÜÅ@/jãôũgP’ûSj6§gŒAž@¸$Ā9ë]—suskžūÄZK¸pøZMXiš28féĀĻ;dũīÎŖŨĪAĀâŖ`Ā—žjF>I3O9ŦíVĩ´Ķ„H“ŧAƒgx^3\ƒËuqâ-Z[ĢkÉĪsZĒîĒ€qĶŠcŠĢ§éˇÉe"ŧW¯äYČ%‰7*ģž6ĒûŒœšĶ“MY<ڞ‰uuĩŦŗ1Ņ$Fģ˜ũĻ­ÔKŊ<Åķc\”Ü7(=ņ\TÔ´ë}.Ú駚H…ĖĢ!*2JœôŊęĻ_^[øŠåtŲÕÜĻœŠōķ‚@=¸Í.EÜ.ûúŪZžŅŅša‘ŌŗÆĻōx‹ėPŧMn–ÆYߊVÎĪā*á­´ ~Ę Ö‚Đ™io +€vgæ+éžy<Ō˙cx€Xj[鑯'ž 'hĀ9\÷ÆO|šŽH÷3ėzI6+#+Ą?xÖVĄâ:Ín#[¸dēˆ`EœeŊ č9ëéXš?öŽ“uiĄíŠe’'’rŠA…É'9錜íYļjm,íŦWOž}Z9I“tGd­ĪŪcÆÁœÔ¨j;ļ¨Å{įå1‰cpĀg¯áž)NąĨ›…‹ûFØÍģg–%\îôÅWĶtk}2åÅÜŧAduïë\Zø*ųæIåŗ„Č]į•V@ŖwDŒÛš>ô%ŨØ6ŌĐôoí+ŗ{ĩš…­ã$4ÁU#¯5žū$ŅílĸŊžö! ŦDn2Ûģb¸û k‹ĸŲi–īn"M÷8 )$Ēã¸÷Ēëcwēe…åÔ"-ÄW2F2‘°pÛr>é8'Ԛ„_Pģ;yœņBPĶQ^Eí/^ŠĪNĶáÔoîī˙zÁb7Ę č+_WÖmô]5¯.N"GŪcč+/ Lú•ŊÍÅęKiPG†,€ã˛ķœU´-VëO—Ė”É47ßiĩŽâ@Ä(ū#ŽyĮĨ‹{ŽílM˙ MĮö„W’XßÅjŠ EV%Ødnú‘ŠŨ“]Ž =JX&ÍÛļ\>ãĀ\zæ¨iļ7÷:§ÛĩkkUSæ$Pąvy1ˇsžøĮÖ´u}%uk3žĐ2H˛¤ˆ2C/֔œn+”nŧT4ãkũ”ļŌÜo$3#UîHëôAüY+3e§É+ŪĄp…Āž¸äÕë¯ Zę,žuÅĶ”€Bŋŧä`ōŲõ„—šÔļ Z…Ė#͐ XŖmĀŗp5…sŠëM¨ŲËqk{wPÖĐĖĘK>vį׀xÕkÄZÔöö6ë§4rMsp-Ņ”† OSé‘īZ‘čZl7)4VŦȁ‚rĒ:Tm<-jš}Ė{¤{Šŧ÷d67b¸éŌ•ãqZV2 mMo#‚KÁ6 ¯åÅ$ąŒ2m,Äc ĪëRę×úŊ•ŪڄŅš $€ 1–ëĐ`qëšŲŌü=eŖĪ$°y˛Lü•÷6=Ĩ]“N‚č˛ŨÃČåW]Ø>´s+ŽÎĮ'qâ[›tØŽnĐ ķH?œGœ ĮlŠĐđeöŖŦÉw}q|åŨåN„ŨøŽ†M:ÆęF’kX$v_+s 'o§ŌĻŗļˇĩƒČˇ!:* 9Ŗk$wܔ¯Ė:‘ŽiLGƒ“Ԑŋ>Āg§Ģsģ8â c#æīڜûā•"äõëéN2äŠįÛŊričIŸ?8Î*ė„î}Ģ>á°ûV<H¨•°r ’iJãŧ}j@sÔsPąng$ūB‚ČŨ2SŪüĒĢųĮ+‚Ģmƒ¤`g­S åÄ āņô¤Fl’zœÕ^ ĖG˝9–sĮŌ–Û+Ŧ^nį÷ÆĸÖXI¨Ø  [ĢęoĖ;ũžMŗXįčwščü×î\F¤~Bšë´˙Fļlđũᮇ ŸNãČSĮĐQ?„ßŖ=J‚ŧsŽ;ÔÉŅp=ęąÉĨL„n8=zVHâc”‚I wtÅL0O'Šˆ"rÏ\S‡Ęxn1T™$€ōrįķĄT įÕ0Üu>ôá#J€OCېŒBđ3øĶXꚐIæ”3¨8<ô¨[,჏Z<Ž€ĪÔRˆÂąläúošĘİ\{†I;Ž{P1å‘öĒĄāķīToÖi-œĀå%Um›ēŽЌŒ¯@ätǞÜė*<Ņ—ĮĄ]j6ĐĮIqG#‰á‰éR6+30É<~us§K™i­ĨŖ´NŸ$Ģō&:•÷Ē>)ļž{H›l!ß%Ā’BšĀųsŽŖ=ŊĒnÆŨ‘ЍJÔD˛ĩÔ+ī/qqŪŸZæĻĶ´DkŖŦĻæ`ŗŖ]Fb܂3ÉëÅcˇ‡uKHŽÚ8—ɉŽZW#&VɈæ™&yĨXY]Mö|X‰.gc–,į ÷ú֊)m!97ē:Åņ&ļsK ôF |#āũĖp8ĢÛvÚCs5ÜBŲØ)~ŊkĪ“JžƒNĩãˇ7ˇ{ BNōXûŸđ­–đåü—:bŗÉk nŌŦ€í ĖIÂũ(pŠę%'Øė§Ô-mm Ô÷1ĮHĮ Y˙đ“é$])YÉTÉúqÖ°üeĨ5ÅŦŊĘGimũÎ9w8 éíQ^ø*ęōÎÄCr{]vžXũėŸNĩ*˛m”ÜŽėt)â [—°û%Ä$\ą ]FsĘĒjúœ°\=ēO41¤fâædPΑލĮR‘ĒŅhŲŗŲ_O|ŋgĶíJ`GÉ=ÉöĒ7×"îĶRtpŌjw1YÛ68(1“ô动Ģč&Ũĩ6-ŧU§Ûč‘ÜËqq)B#>d{dfÆ@Įs‚:TŗøÃKĩ´­.$ˇĻØÉĘú}jƒx=Ĩļ‚?í HŨšYB‚_p “ÆĀŠīü?bmä–YæXb‰#5ÉX“’Ģõ=h´.ņ%ũųģ¸Ks<ÖļQÛ}Ēáâ%d`~ędr8žõ[OņMŗÚyQĮw?Ų 31‘C6ÎێzŸ˙]Ic§ RĶR’F–$ž—doŒ?”Ŗ¯LķųÔëá6Ū Ô„ÎĻí|ˇmü…ôŊÛY]Ҝßėļ–[ĻũĪ™Đzķß§ŊjëwŌ\YØÛZģ#j*†Sķ*csčp1øÔmāũ5ŧŅ ¤Œ¤Ļė Ē8N?‡ŒÕ+éK˙ļG Äúd*ƒ77twŊh÷/ {Ëq4­~ŪŌßPH4ųmâˆI rûƒėŸĄÍ-ϝ&“iĻi1ÛÜ]ßʂYĀ$ˆ÷ž¤ŸŠüŠÚ?…!—ÃŦˇ“Oæ]­+”ĻNōŖņ­ˆü?moŠ&ĄŗīX’2†BCm}N 98ĻÅ"…ŋ‹­åÖFž–wF_<Û#ä-üęĩöšĩŦYYŸč°Mö‡Ÿpp:ã$s[ø_M…ā•DĻHˇ•Ëõg<ąõ<â ĩđvep’F%-ä´D´™ŪŦ1Īā)^=îĨ$ņąšąŋ¸ĩą`ļ]L­"ŒôöéIâFÖBéDŨŨ7ú4ōLx3zuéZ‘xsLļĩ6Åe“Ė‘™ß%ļ}Đ}†5æ‰amyp†I­ķ°3|ŧžãŋAJđO`÷ˆ/u¸­tûĢņJÖņ•@pØûžÜÖ#x‚ų´ É.mmŽf௒ļËz ãCMÕô‡ŗŧšh-WÔPÛÉ,á!CܨÎ[šˇ¤ŲųÚT‘_iK ˛—6ãËØ%ĀČ`§ĄĪ­4ĸ•Âíč!×5×FŸdļĢMåÉ$ ’p›Ž0G gŪŠĮã[GÄëocäĻœĢ /(ûåFsžÂŸĨ IĩŸ´ĪĻ4bô•ž7‹ũJ€C÷ĪVęč̆Ú¤hŪ(”œSË;õĻųVčZŗŸŌ|UĒĪs*Ũ-Š"Á%Á8`ÅųO'ĻjņžšFŸ\ZË}~Ī*ģ`ŖūéĪÉük¯MNpVÎ?ô” !#;” cØTë¤iŋšÎôn"ųÉôĨÍÃå}ÎZņ7ˆ-u;›;) aj­åÆ ķ žNsĮĨZđNšŦ^ërŲßŨ-Ėi 2( 7lšęŽāŅŦęą#+†iY;Īđ3žÕzÎÖŌÖŠÖŨ –ØŠ´zšãËk EßrÂUÎG#Ą§dąČîyÅFō¤H fÎx§IÆ įŠĖąß>ũųŽ˜Ļ9'€Ãwˇj_3Ā`{ĶÁ-ĩyõ4Ŧ<§Ļ3šĄ:Ŧ˛Ļđ /?Jŗ4™č‡>ĩ[_œĀri†¸ĀƒŌ˜üā§Š—É$téP 4üWĶé@ĐÆ)Đ÷éĪZĢ2BHĀę*wõĮJ†rqũîœŌJ@¨ųIÆnŖS×#>Ŋjä‡cŽ}qôĒlƒíŅšûŀRt°€ŨĒĐÆ?A8āp MŧŌ›38+`$Ö/ ŗ7Jfšĩu-;?úS­ƒl\Œqį;T:úųwvgæÎ_đāUu7_‘vĄmmx# Ÿ¯ÎÕĐx@˛ø†b@¸ž1÷kœ¸f[[sÉÎņŸ@ē? aüA0s˙,Tįđįđ›ŋ…ž„NW‘Āį56@›q´t¨“hsÆENŸwæ5’8˜d ‘@E^‹Žô2ņÃg‚)ŽĢķ&ā7qœôĒđä:Šį"“pÉĀĀĪ>ôˆ,ûŗĪ¯JAģčIí@Š—éq5´‘Á!ŠVWŊ"¤ĸ(É%Ü.F~•wkŒsŽõ›ĶįĘüžų w+E"OÊSŽœņO0ÆÃœĶŖUmĒųŗjCĢʕTĒKĒ…eÆG^ŧVÖ•r÷:Œ†ÃtW"RŗmË×ãŽŊqZö×ļĸáw\Ä ÁvīWĩ4û›:+Ëvz˛Č0šĻ§ qW0dĶuGŌtöŲŪZÍæ4D…W0Á c89úÔ˛é—ĻKk¤ˇ„0‚H&O3CAô­'Õė ōÕī!_3ņķqŸĻj×l …ž{ø6ųí °ÂO­´9ËĢ+6įÑlˆĖģ ~NÖųF{{Uč|9$3X*J<ģt™dČ!ŽķžN+GQm"âæž‘LđÉûÆ čI>õkûvÁufĶ“pŧē„cˇŒō@ĀâŸ3hI#ĶDÔ-äĶR_˛´vaвîԌ1ôĻØxwQ†+EÛ mfwV Ŗg#ļ柊hĐꨂāČžK š`į։öåiąšt;h…Ģ-Íō4V6WÚ{Žœ ĩkŖXÆörÄԁl¤DUˆ<œúįŊF|Bė‘ÜĩŦc’äÛ ķŽHôČĨ}kP]/QģkkP–m"mŪI%OĶĶõĒ÷„šGɤZG¨=ô/2Hræ8܅fÆ3Ž™Ŧß i‚m×6˛ÃxŽüʧ;XįŽp=*üšÅāšū8cˇsĸÜDĮ=NxoËĩCũĢŦyĘŖė9–Ė]ŠōہŨO?­ šÁĨî]ūÄŅÍģY}Ÿ÷,ūfĐĮåoQéøTNƒh!ĩ–$C4ûŖsšÍ6ãXœYéĶÄą@u #A!‚3øž1T/īŽØy7MOi¨ĀÄiōļîAĮ¯4$Á´n\CŖØÅÅŧ`ÜΠf,?ũzšĶOļ—wIpītėĢ!ÜĖr§ZÁÔ¯nf†K[ĮŒŊĨũļ%Q´0fdv#ššīUŋI/’+ČĐĮ¨Eņ8‚į?Ÿ_j\ŦwFņĶlX\(ļ…V~d_,|įÔĶĄŌŦ’ļ[8D>d§đŦ GUŊ˛SŒ_Ļë{Xį…Ę.X’Āņß8ü*MKRԓPŧŽÛQ#‡O[¨×ĘVËs‘“ëŠ\Ŧ.Û*ÎsûX‹F6Ą1ƒĩ}*7ĩĶãē>jÂ&ōrĀ ÎÁĮåYZfŗ4wŽ5+čšŲė–đ6Đž^Nãˇ"qĢJú“‹{Ôû3é˛OÚšî0h´‚čÕą‚ŲmŖh7—(Á@āķÅIĨĒ#ˇ@į…šäS^¸hÍ%đO!ÄAK˙õÚzqŌ­kš…äZŒ6V—qYĢÆōĻÜW(íīC‹¸)+2ĒnČ ęG˛ŲnŪ- LëŊž\ezrq\ĨÕüí¨Ę‰Ē–-I|8ļŧ†âîũ‘Úg!œcžÃVõ=3Pļ6ÖŠvVÚŌ:9>k‘Œ ÷Īä)ōk¸syœ’˜¤A–pėCŖ 1Ū–+Č&…ĘĪHØĢá†Ģ’˛Ķ5K]NÚK…š{{{B´™Ė¸äz“ū5Lč73č–ļÖe[-qpĖØ%Āāß$ū”špæ}Žô20,&]Šy ŒcYVz¤÷7+ļ6nĖ:ãĮŪ9<ķ‘Åsöú^ŦúEŦeW.ŌĪrA†ũŨŪŖØz —Jҝ„Z4rÚ" O2Y—ĖÆd9ÛĀã<įڎT“Ô\͝ŠÍâ‚e,§ŊQŋļ°×"“O–e•UtŽLõÁŽcNđÎĨmrgktK—W˜ČŌgkB¨Ų95Ģám*M.Ũåŧ˛ w#mfo-ܓێM'ĩLißtkÅueŋf7ą #!|˛ã#=WÖ.4I´ë¸¯n"’(†é“#ž:*͏Ãr˙ijú›[ۋ™‡ú&F⤠‡?ínūU•ũŒÚ_…äŠ{h’ōųã…Á—{Xg9ãÔņBŠî ŗVÎōŲŖ‹ZÔZÂ+(¤Dŧyč¤įŠĶ]oMYŧŗ{pU6“Î[ Ŧ­wAžöúÁ`аÄĨdBÅvį0ŠĀ"§ĩđü–ˇúĩûGoö™@[Uę@āŸBHí¯pģ-ŪɤŪH–7˛A$é™B1åBķģđĩ&—ĢYęŅ™,æķUIF8Æ s:g…õĢ+šne¸‚I^Ō@71'ĖsœtéīW!Ķĩ-4;K&fō˜}¨ĸ-—<’zįŌ‡˛aĖ÷ąĶ_^Ųévm=ėÉ#Šc×ÛŸs­iqClXgQ$!b$€qķcuÕxrį[ŧžEž…bX„qF˝ŦH$ŸÂŸu­ĀžAÁR¨O™ļgØ)'ôĨhÛVd÷7ŌZB.|Ģh {‹‘Æ đ'ˇsøPŪ/Ō Ē] Ü´ū@m‡†ëø R]ør[šuC%đXīcHĐ,| _SųūuxB˛XĻšvď3€•†c°^…Č÷Ŋ øH,ZÎ+¨ÚWģ$jąÎWīa}gø›UĶâš°ˇ¸Ŋ’ ą2K–¤‘Î>`;•yw§h÷–0Gs<ŠĻîŽäã'-†ürG8æļŋ°ZīÄ1kÉv$‰w@P6p8ž”ųRÔWoBÍÜîúõŦfvŽ xžy€lž7ˇSøT_đ”éīŖ"Į+Ĩ”jåą€ÄįĨÔ<4š“_ŗŪKŧ‰#8Qō…>ŋŸįUbđ´×q%õĪ—tč͞¸Sœgß֒äkQžn…Ãâ˜ã{;Wŗœ^\í>@´`œdûS›Å–¯ĒĨŒPË.e1y¨ÍĀd€{āU¨tXŖÕÛS[‰(“<62?5ƒ§iļŠây­ žvK8X$<ĢČx ہŸÎ’å M /Yę„vpÛMæ<Īî<íQ˟Až*֕â85›Û˜míĻōā8°ų’0*­—ƒtÛ+Øî#iKÅ $Œ’zš=ÉÍ]ŅtH´O"+™æV;‰”įÃ)˓ —7Rß‰ ~!m5´ų I$jg ūīœTiâ˛-nîį°xāĩvÛx$¸8 =Iũ*HKũFī^šiüĮš&&ʨUųUąëŒÖĢhSiŸŲĖ[‚_†9Ũģvs뚊ĐėdËã#ö‘§°¸ãČi1…A–9Į¸:Õ§×ĩ$ģĩŗM:/:ę“i!éž:cŠŦjkŠYĮe ]\[Ø3gx%fŨ‚pyį#<×_okÔ̍ŧ2E;Ā>dœ~t5¯a+ŗ6L÷ˇ;ė‚iļ¨ŪeŅl|ËÁÛę3ÅgG­ĩöŠ%ë¤&->ŅĻXÖ@[. zíë[pxKKŽ;ĩį„™ōI-“œ{sD> ŅĄ3˛@ŗ*ŖÄeG8Î?Z€ėʑëW‘Χi–v‘—–%–Vi2ąĢIÉ=k8øŌęMuôčcˇ]×bŨ$đĖO?•ux{KS[ņjĸtMŠÜā(Jmˇ…ô[yãž„‘’QņĪ=M$áØg%wâ&Öī’Æ9"[æŪûĮÎƜ“œņ’0^đĮŒ¯õŨ~+w‚ˇu‘ļ¨;ŖĄ'>øŽ‚ßÂúD7eĶ GV%H\uę})Ú,zû@ŌbŠ9bĮ6ÅÃį=ķÎ3UxÛak}YĒņŒŽĮŸ@)Ûv¨UÆ: tĀÚxiĸExTäũk"ÆJ÷öȨLx9$`ŒzÔ˛žįĮOCP°_9ë@ČČ*'9īéTæÜcųH H zāՇ9pqČÎi’ ˆOnԊDK‘’d˜HŲūî1QœĒ–g=éķČ<˛ÜüŨÅ0°ŊzŠäa3ģČõ¨äe(@ëÚĻāžŖĻMVuÆ}é Ĩ8'=ę“&‹qčÃųÕųW8‚+=ÁûBg‘‘üę3Ŧ„åN)Y7}Š ŽHŠ ķŪ› á" ũ­rFW÷¤T> QöĢ<1<9ÉúUĢ$c¨Ü™ßŋNjŋˆũĒËhā‡ëøUu7Ä`^.Ú4ÎO™ ˙ĮëĻđšîņÄ ŗ¯8텮fų1brY03ž]?„>"œnĀû2ū<-9|&Ōz3ŋ=2jf~?Ži‘ŦjÓ‘ŪĨL˜Õœ|ۃ ük$q1QĩrpFM""Æpc=i܆ ˙Jy‘ ` cđĢD‘*FŲÆG$õ§&!œíĪSۜuĮ^´‰÷ūUČ÷ 0Vu?ZLFT¨-Ž?{3”¯_‘ÜŪôŅ6ā…ČŨŅTqõ¤r„ÉP{Žõ(,œ  đ ¨JIŲĮˇjBČą&ˆ9úš¯0,P‡Ų‚ zš°$>YŨ‚G_SUĨ•Ō,l]ĪÁ˙ `p‹ Éâ-míåŽU C–ÛŧĀėqĮ›”šĐĨh×Tœųą c•;ƒeŋLįÕčJßģ,r㜭‘ˇpúŠŋhO!ÆKĻ[ŋ‰ŦXŨ1mōü˛mFŨ‘ŸC×­%•Ôē$÷FÂ(ß1 ˙'ČŨÆzķÚēÔe"M8Ä <>j¸~¸8´œžĖ|ĢĄÄ>žĶ뚜VļgĪûLr-Īģ)<žs×Ĩ\†ÆA.ą1‰2;Â䁿Wpädæĩâ˛k=Ręņn]ÅÎŨҐĄF8īĀ­rq„VV'æ‰O°(œv‘ĸÜÊŧĶiQĸČÁÖMę<¯—mį˙¯R đhÄ4ôŨk6^6`ã0{duĮJéžĶ$sËæyij“ Īâ;Uˆn–xa’'*Få >žœRö’nãpŽ~ &īícÃhĮ:H‚A” Ā€?,ū4É4mE<×U€ąÔÔQ™:Ž0rqĮë],šœÆ˛CqjSxCķŧ{qßڒ-^Îyf‹í6ÛĄÍųÆSÎ}ēUs2yQ‡uĸj/&ĸ kw†ü0ĘĮtGnĶŽGåV­´‹Û=Vk‚đIk$ >cméÉ'Ŋ]šņ™me ËŨFmä-~aģđĒwēר×Q™fŽXíāYU6ãnAĀ'žhŧƒDUĶYI ŒįŊ\ąđäļ7Kw úÆōn \ƒü<üžęä~ ĶæŠîT”ĒÛ ’MčËō‘ÁƒRXëVˇĶ‹SąOåųĸ)c*ĖžĸĨšČÍo I%ž§ˇėEėÆeÛSdõį ˇŊˆęŸĩ”Qĩ—`Ōĩ.uâ×m­ˇÜåā‘ÄjŖc`Į?ãPi~&Šú{T6w0­ØcČŽr89íBr°YękæŽSĢ\G(ˇ6ķ2"ūõO¨č*Õ¯†íā’ÖcupōA‰~q†_|oŌ’ãĖąj§OXæ’TuY i…ēSÎŧEĖļ˙b”2Å$Џ€dØp~^Ŗ9ã֕åačFž͆ nc2„yžG˜|°˙ŪÛ뚕<;§Æ—‘ūų–ė“2ŧ„†'¯ŋ ¯eâ?´x~įTšŅbŠÅ&ãĶĄā`įŒT—ÍæŸmÅÕ¤a%šŽōåÉģôėh÷Žáđ†—k ék‹įGå>dc•Ī֛s¤čZ|QËrU#0‚åÉŨzôæ‰|Iz–—%--İßĨĢrA ģ8˙hQ-Íũļŋu-Â@d‹I.$ĻāğĪōĻšē‹CI4]:[4ĩH‘ėJ‚ącrâ¤>ŌVĀXĩ”eŨ¸Ä}s×5Ÿ§k73k6ņJ O`.E Š%AĪ#šmļĨĒĩY%ģĩörŧhŽ˜uYK6xÆNiY…Í3Ąé)n°›8<…}áC Ūŧ÷Ļ\iÚL"yŽ ļXdÎßÜņģÖ°ßÄ:Ši:ƒũĸŲįĩēŽ0æ" ŖmÉۜ˙Z.ĩZ -Z9$ļ2Y<$J"ųX>2¸$ō(å•ÂčŨ¸Đô̐%ŗ]‰˜ĮĘ=>žÔKI+YBŌH‚7%+ŒcéíYGPÕVÖV;¨|›XUâŒÅ“’„ƒœúŠmĻŗ}u{oū‘.4Ī´1Œ$œŠįr°ē5Gŗû#ĮIlĪ’$Š%ÜĢžƒ#Ĩ-ŋ‡ôËH"lâÅ”­"Û}ĪžjĻ>Š{áīĩÉw΃ŽG^=ŠĮ+ÁĮ¯Æ`:Œ9ägŊ3ûÜRĨŋxŖŒŌUšWãÆ—2­ĐƒOˇÎ…ˆÉĮ¯b˛ ēÖ5;™o^ÅV´wŠ$áU‰Â㎸˙ŽNĸæčt:Ÿ…aÕoL÷Lč@U‰°Uū%ô5Ąohm­’Ü\4ž\aD’rÍõ5ÆÚÛkļ–‚N÷“´vĸ$#?ëōW×ëõ§ęzeũģŲ[éö—Mĩš‚Ł“ĮRjžWĩÉO­ŽŨÔaC#ëM<Ãį]˜#ƒÖ¸k˙ęSEĻ/ŲîœÚÚ“2dŧ‡ĸ}s×Ú­xgÃˇú~§ˇ`˜­ádķũįb ?ē0GįK‘Z÷3ŊŦv*ņFpfAŽBįÉ.– ĩ‹…  ÆŅƒĶ­qķčĶļ¯'“c+‹ČŠ›§a„I|÷ā`Rę:NŖ:j’EgŊ§ōí-Æüâ1üGĶž \̏93ĢŽęŨåĪÚ"*ŧũáĶÖĢë×įNĐîŽa)æĒūėã9b@^Mq'°@¸lB 0ĀAÉvĮR{ÕĶkšeÖĨ§ŲÚÛ(DķQį!Îâ>XĻĩ ļË[•–Đ–3" ’í<ŸĨsÚęZîˇŊŗ0Ŋô“$))mꀸã8ČšĒoŖjŸeō-íŖ†;™Y‘dû (T\˙p õīP7†õitŨ*Ņ %‘Ĩ"A„v<1øĪք•īpmícŽ7–Į—P¨˜…‹ŒH{cÖ¤žęŌŪhĸžhc’Sĩ˜o Žj5ļ¯ndX%´ļ…b‹{œŖ’B÷$āķéL˛Đ5yõ{mRí­ZU™ËĮŅ@õĀ'éK•wŲŊcĒŲj70YÎŗInÁ]}?ƯŖÆ~P¤d~ĪiZU֑ŖŪĪvŅ‹§i6ņī`I'ūrzUũ/įĐĸM^1įH\Áe=2CŽĩ-.€ŸqÉĢiW3•‚æ Hė9ųJ“OÕ´ũFōîÚÖMō[6Ų\ ˙ž++MĐĩu –Eļ[—Í‰ĐėŠ€ūu>—Ĩ_ŲhWŅ<đ ˉ$uuf¤äņéÍeAáy­`ԅžŠáķ ØŨų‚03Séž:Œ÷Ģy1’xÂĘģ˛ŽØÁsīū5<>´ĩļ˛ĩfžU†o97žėŋ<ŸnsMōÜVe)|V"ŊļĶΕrדˇÍÆ5Î?õŗ§é0iZ|VVƒlq—q$žry¤ų- Õú˜:‹kļú>Ÿl.îÂĖw` īۜOjü%2IĢ[ÚZÚ+A-Áˇ;āą^XĒã•#>ĩj/i6ú§ö’@ésæ4…čË_ojĄgĄBž*wŠĘH-ĸ…˜Ęr<Éķƒčķ4ũŅj7LņŨūŦ–Ÿd„ .0U‰ğ^˜üiūÔÚ˙ZԞßIŽÚÍĨlÜ˙Œ0?.ĢiáŨ*Æd– tŖVUlžëÔõ>ĩcJĐôũ2Yî-mcŠY˜—qÕ˛hn=&_ ÚWīdrjnÜxâϜo\Č䄺7p1éÍgÔ˛0ßŊ!¸ĻiîŗžÔŽßLƒĀ4ۊĮƒÛŊ! ļÜûÔ2Ÿ•ˆûŨ1ëRHš8Ļí$āĐ;•›î‚@ū”É„8ã#õn@•VP?7jE"';WœÕ90äį‡Z°w–AíŌ • Ž É'šU˜á7~Ežiâ÷qüęķ`L÷ĒQ°éŧÖŠ:HU‚ ddõŠÔ–đi¨§ËRŧwĨ+“‘ÅgĻ2îāúĖį˙5_ÄjVöČg?ôŠt JT°c# f5‰.Ŧy%°üūU]Nˆ|f.ĸĒbEīįK“˙ŽƒÂŽWÄoœĀŊ˛ÖØ&4#œK/nŋ=tB|C(c˙,>ü-9|&ŌŌ,ôØc%I8ŠŌ@Ã8#>Õ_%sŒTŽYSå\TGc…‹ *Cīā mÎ)ą€pŨyĮĨ9ˇ0 ÆĖsëO$(* ã4í¨ˆŠēɐrŦr@č)Ī‘Ņ˙ZC–AˇÔÅFĒËšŽÜu=鈕QXoų‰“gC°Ļ(pFŌĮZīUXõį"€ ągo=2j"0įœį€jšMčLšŽí$¤.āVĀæ˜üŊŲČ#ÄåUn,ZR¤O"9 ŋZ¸Æ\ŋ*==Š ŊWzn#§­‰×Ž…–ēĸ7žũĮ”Ė‚ÃvûÄķRÚ@§WօšîP´Ī´’ƒ8ŽĩŋĒëđiHŠ"ŧ×. X!˜€3ŸĨ\ąŧ[ûK{ØØš0ë‘Čĩ[“åؔ•Î6Ö'•ÔėŨMg$LfFȘ`ķžœūVŖû SŒŽĢ-ëZ…•$CˇĖĪ㓞ū•č-p|ÜqÜqHÕōYI<;ÔēŒ|§ qa6ˈ­Ŧîãļ–Ō-ĀFF'$ÔāŒŽõĄŖš´Ķ,!Ŋ‰­&žvPĢžHãør;WQ!a‚Y ÎĨfëWVļbÚk˜^iV]°"NōŠĮAIÎúXmŠĪęuËj:ÁKž›1°ÆĮãî?*Ÿû"ūhäŽŪĘKc&›å3 yŖ8ûfˇŦĩ;këx.#•Q&Jv“Û>õ°× åZjofŠÜâæąÔ.4„˙‰8ˇ˜OÁtÉÚrNGl üÔÃLŋA­E„ũĄ–XžR0Į 0GāMt×Q,ĸ6ž Åļ…Ū7dô÷ŦÛ]Fâ_ŲŨÍ[Æą4@ü­–Īīԟ3‘‰oáũimå –õo" (!˙ŧ§Ž?*ŌÔtmJîPíˇÍåŦpĸī<0Ī^?Úũ+~K¨ŅÕ Č˛1;T°ÖV‹ĢHRëí÷)æ-ô–đīÂîÆ0ŠŖ™°˛F+čzŦsPŌéâØ“#gw<ũŪG'ō§¯‡õwĩ–ŲėĄ›ī āô÷5Đ˙niĻÔÎnŖØ%ō˛9ųũ1ÜքSyök5žÖŪ›úįĄ§ĖÂČåĮ…¯.RHīgVkjæ-Ų CsWtÍö=B íBî9dļ„Á–…r§ļ{ņTôízxĩŨR×XÔ`Dˇd#™Ü3ŸSŽ•žĩ+EŠ\Üjo$0Ū¤Jąœ×8Íđ´6¯t{›­bÖú+¨âŠÚ7P†-ĖëÎ}…gÚøm M6?í) XĘÎ Ä>mŨAį§'ķ̎^*Ķ⏖ $• r,R0„íVn€š˜k0h}‘ žYÄr4qXÉn5>ōCē+ËáŲFŦזšŒ,ė­qPD…zON8Ļ/„ [ŠnMũŲ.e%w/!úŒã=ŋJ}׉ĸˇžē´kYÄļÁ_…1 6ķęqøTˇ~#‚Ío×ėwö[<Đ ŽdÍđ;CáÛō%–XîĶ<ˇíŽÂ’/ [KĨũ’KĢÖ_1dY$“æR§åÆxúUVģM/[×/ž61Ē[šAܐ­ˇ‰îm’ũįŌŲE‹ , ‚#CU¨´$“Âŗ‰§ē‘g•foŪ‘ķãô•\} Ņî’匭*Åäå¤b}ÎãToŧO%ēj'ė„›C>rAW?xņ‘Ö}â Ģ]"ÎōÚÚŪW¸™#˙Xv Įi4ÃB[/ é6 =ŧnŗÆ…´ŽÛTöÁ52č:diuļŲÚsįdg~zæ˛ŸÄ—Ģ,Hö°ŦĢz–ŗa‰\8Čeđ\ŨČŊņ זÚ}ŽÕšhd™Û÷Šc#ž°*ũæŖÖ-Œĸ0Ąŧ¸öį~YIį°8ĨĘÂâ}Dĩē:`‚ßÍš_+ËÎā;ôĮi´Ŋ=ŖũíŦNÁv‚ņŠÚ=+Z3ŋ‰4ŸŗĘļÎŅĖĒ뛇AÔT0ëˇķ-ĩŦōÃo,“OÜ*‚ŦSÚ˙JĢ6Ž‚é=Mãö }FŨ%Œ%Äۄ SæādŒãVVÆ)fy$‚XōÅH÷õʋÉõ%Ō™îLˇŗ[­Äj6¸Ā09ĢVúŨķ]iņKq%Ŧ˛…%URAįĄĪëK‘™r‘ácā| `žĻS )Luî q’k7īĸ™õˇAu2Ī*l4jHGN8ŽÆÎu’ÎÚ@æ]ņŠßŒoČ늗†™(ĪN¸č}iŨđHÅ+}ÁĐõ .ŗ˜Ž1Ū¤ ĢÃ4…v•‡\ā•ËÜ^ŊߌšÎWēHa‰L1Տ%˜ŽÜbŗ—XÔާ}"ÜČPFA]›h 1ØrHõĢä1Ņi:ė…ØˇŽ)†bķƒ8X¨īėM_ŊžM:Â[™ *¸Â¯V$āîIŽŊĖÚUÚiö×)4ˇIjŽƒ‰{âjÄFëėö‘ߤžl׍)GČÂF™à ~tÜĤΟJÔæÔã¸iaī Ū[.ũCøÕé0ģ~uã€=MqQiŗ\h;K˜î..DĶHėpƒ$îÆxãĨK.4ž$ˇ´ŽÖuŌí˜[å.I,I=N{QĘŽ;lSA%İ,ņ™Ŗ˛ĘįĻiëÂđë׊é\Į†´É˙PÔ/t˙&ęIYŅ™š(sĮJÕŌ51ŠYMžŅ’HfhY28ī‘Ûš—fŽø|ũĒč\.JãĩK™"’x–WHËOĐwŽUĐoīuëģ¸-ÜFīE7ālĮێ•jÛGÔŽ|O¨ę7– 2m$2qĶ ôĒqVÜWg`.a{—Š9á2 ųŅXQÚŠXj}u¨ƒGŦūJJī9ĪĐņYšĨũσ=ÅΝz‡–BၒSŒ’ĮŨĢ´]zMOļûKų­:´ €íŅÛ×'=Š(Ģąķ3´ēšŗĸŽYbIž@ĖcíNmKOļŠF’æŨ6ĄČ0¤ú×/ũ•Š?ˆoXÆņũ•™[!6Ļ_CģœûU;Oj-ŖOŅ—FœoËU9gĪv<ūtrŽŦ\ĪąÚKĢiK‘¯mÕ7ųa‹Ĩũ>´Ųu.!o-˛ĖĘšrG_ĘšŸø^úwŗļŌ­­ÖÚŌ`Iŧ„mĮ=Ā“Tn<¨ũŸMáˇą[1%_æcĀ'Û­‘ĩîĖíāÕ,.$Š8î w•K"+‚X¸Ĩŧš;K;‰‡– ŠaæļÕĪlžÂš/ø6ëJ×ÖūGE‚Ū/-Fw4ŦG-ė2kkÅ:Túž¤#™ÕˆG'×éI¨ßF4Ũ‹­ŦiđÅŨ´2„Wu2 ŒãšD×´ÃŦI§‰Ô\G˜ã(NOŽ9Ŧ+ĪŨßko ŗÜdD]Ã8…q“ĶīcØTķx{Uš p›‹d{÷Q ˙Ģ\ 1ô##֟,{…Ųąˆô˛Gp—Ja–C°–÷âŖ—Äú4[]…iŖ2€Tƒ´w>;Õxü;)˛Ōí ÚĮ į\G˛0č{…QÕ|wŦŪ\Í6ĸО„B§D'?‰ãĩ‹ÜM´oÜkZ}žŸė˛lŽT( î îõīXöĢ}ũĨ%ŊŒŪ^ØŖPģA˞8ÛÔvUcOÔ|w¨jČÚĻ#E*W8A9úĶ˙áÔ_^MEĩ8üątnL~W$m ^ĀøšŠęæ˛kĄu žæ6ˇ´!$*‡ålr3Üō8$—ļ°éÂîBŅÁåųšu*@ÆzuŦ—đÅķépÔ"˙Kši§“Éč¤į ;ÍhkZDēŽŽö tĐų€#K€Íˇŋâi; \­Š,RK[iĖŽķÂ&ķ„%P) }:Õ)/îš"žŖ=¤š[u…x,vcŒcĒãØÕ8,žĶĢŪŨÄ]7Oō­NᖐÆ7ž˜ÉõÅiYčŪé–ÎnZ žŌE*|)ÜĮúSŅ r叉´ÍRímm„ÛŲBYƒŒũ éVtMR ^Ü]Įëæd\oŒjĄ§x]téî&ˇŋ—Ī’ÜCēP˙í}jŨŒ6ŪŅ †æáІoŪęĖI<Į9¤ųzŊL‘}ŖŠ^ŪŪ}ēÚÎˁÚĒW–ŨƒÉ< ņSIãaK+”ĶnŪ §dVã=>\ûŠúv†u‹;Âđ=îųe+Ã)f-ūfÛÛĩ†×™—NR°Ģ6A$cq÷Æ:~īPץFįÆK§īK› ŌD„HáØpí÷Pz“SÉâømõl^ĘáŪB‹+)Dė2úœM¸đuõÕÍÍĖ×.ŌĘ$e2``{U„đŒzĖúĄ–s,Ŗ=˙*ļ6î×{ĄīhŪ%¸Ö/ZĻ:Ca,ÁōŠ 8ÛīĮ\TkâŠæ‚=)ÕaLŠ•öŗåļ€WgŸĘļ´Ŋ.ÛI°[KlŦH;œą>¤÷9¨WF´:ģj<ÆG.v:zŠZ§)¨´—Šå†Cš%–;učąūōCųāV†“ãAĒ믧GbņÁąž9wä°ã YOéß%Ūe’hæ’U!<ŋ^(Ņ<7§h4–q+õw;˜@{ nQ°$înĻāŘuĐS…‹I'ŠĨ‰€#šP9ŗ,hs¸­~m c$ĶPŋ͖Q÷ąÉéPļpĮˇ4Š!ožČ*Ŧ„3œœ:TėHoRyü*)c#•8<äP2Ą?6F8íīU´GŸīƒúÕŠ—,6Œį=ęŗ)ûLD˙xgķρ]ˇÍR8Š<ĒŠØ€vUĸ8Ū)™3ĖtK($1ëõŖ_s%ՙ8ÁVÆ? ]*ÜÆĮŒō7Ä$ ėÎ>`ž§M?ŒĖš;F9˙]!÷ØŽ‡ÂCū*)—¨û:įōZæī[æUé‰%ŋ]„˛Ū&“įĮú:ū<-ØÚZކ¨Ŧ˛ōZ”āX?*Cģ…uõ§ėãĻi%Ąį˛U'p‡4âTįåíÍ.@KdÔ(åō{nęE:BˆwĪ]€Ž™īMrÄ!éÍH›˜ Äb€ā’ ķŒ÷¨9iwHrŨ ¸ģ•X(1ÉĒā’älé@ŒHÔ\ííīP’¤īf<Ž‚žęØčšĮā*5‘‡ERqÎÚ."?*5f!ŪCĶö¤{hX\† mJ|íŖäúŠ‘Ā##ԘNŦ7Ŧ‘dhËÛJŒ¤qŽ1éœū•SN™,´}e¸šÅ?—tž*Fė3Šī™Žėžf1œS÷Û~\jŽ},O.§ËtßđųPũš÷ŨÍãJî8ŨŒcúÕąåjO¤›vCX8‘ŋxŋ8v÷ õŽĮPÔSLŠ9ŽFG•bĘ āž?Murmâ F%‚íw{ãŌ‡>ļŽ=ÜĮs,ë'’QÁåšp}F9ĪjÕņW”Īeo{ §O“wšŅ!l8ÆŪœŽõĶį“ššj#'˜>îFp CŠĒe(ic”ŅÕŖÕ-ĸŧĶîfQK)|„OVūëz՟YMsĒ@!ąē•ĄeIcl€Ušd`ãŋŌēgswƒŽ*ŨÃÍÍåy™!vŽžŧūuJ}E(­Ž3QĶn.nõɆ™!i!…ā‘‚† 1œđ­j]ííö˛ņé˛ÉįØĮÅ3ŋ’psÆ29öŽŋ(ųcĶŧ÷ŸĮnU v=)ķ“c’ŸJģĪÛ&ŌŪén"‡ g ä2õČÎ<ņšôTArRÖ"ɨĨÔ*fxî:pp?ZÛÕ/îeÔ^ÂĘx­Ū(ōË*o dzkM. x‹¤ąË´Û{ûQvmĮ‡õŠ,.•m YŪøÜŋŒČ0`:§5ŌŲCĢÁ%•Ŋ†HŖĩũô ášQŽôëSlYGnĶ4đ•åîŪĖz­šœwš Ž+›Y!{q4j­ûĖgû46Øô2lt=I|W¨ę+mö+•UHK€ŖŒwúÕfđ…ųĩÕmŌęŅ"ŧ¸Ilcå…Įøč­_ęŋŲļˆÜÂ÷1Ãæu*¤üÄ~X^éú[Įe.Ģ$ŌÎáĸûC–o› Î?,Ņw¸´2îü3vuukĢd[áF; ƒ×¸ĢVēŖk­\\ÛęQĮmpÉ%Ä>^âX>ROŗouģ›Ģæk}DÛÄ5°DŒN76qןŌē ČŨ/no\21¸9(ÃĒķØPų’Ôz2 ˙%ūŠcvĶáí bûāôŸP WÔ|5.Ąuy*j wqĒKˆ6âŊj–•âK×ÖoE҉­âŽGØ Ā6ĄĪÍÆsī]$ZžÍ1¯nífļD@göéÜįĨÄ4f6ˇ§5Ļ—Š^´ōČķÛ,R"Æ­‚?ˆ {’ÎŌ mF =ŽážÆh›ˆĄY29Č'ŒūŊ7ˆĄK(.–ŌâA-Éļ(I2F>ՙĢę ĄŖŊģBĐę#DHÜHŧpqČ?­5}„iEáˆŖšy?´¯d’uMō;Š9OēzVOŠ-MđÕŽ •ąuÃ’øŨ’xįÔ֜ž$Šg–[yRXeX<• –fÁ\ęk.ōõ¯¯´K—ļ{iVņĶ lnAô8&îF‹č6ré’[ŗ°*Ė­šˇ‡î'Ži‡ÃZ{ĮŸ §”Ĩ¸aPŲ î*ošömėÃúPĶ–ĐÄV$s(;Û!ģœį#Ŋ  é­oBĀwÆ2xoīuäũk3ûfæ8Ž­Ž ‡íIq;ūCũ;{Sš÷Pû]ļœ$ļH$;öļÜ.6į9į×ĩ]hzxԚũ!Q;0fny8뎙÷Ēöē šĻ˕ v˃!X•? ÆŖŧ×fŗÔ-ā-iŗti*ŠbüđO_”gĻsU#Ô%°¸ŋ:=ōęąŖ’ŊP…Ā˜Ō{…ŅĐ]hö: ‡í0‰?tēō=qUã‹JÔXĮgžŲ9Œ˜t88>ĩ†Ą=喭ûčf’8ßhF3ŠĒZNĄ)Ķ´› iŌ6BW•“vqųäŌŗҝ-Ž”—6ēuÕ´L‚#TãĩiKĻÚOE%Ŧ- Ŧf1´öÍ.Ĩ=åîƒu0S2‹…+G!HãØâ‹=cU›Hģŋ{ģAžŲĨ†4\˜˜sƒüšīIĻ;8Ō4ķ•66ė…÷lō†3늹å€ãp1Ō¸Ø¯õvY@Ö'NˆD+Ãwé]>xچizė “BŦÁzŽZN/¨&Y9ęāj7níōôښr˜aķ’pÄöĻ üŒ.9ĀÅI@„ŒĒ3ÜĐĐaģŒg­p:åöЉnÖŌöãėļđŠ1Ƹų›…QęI={~5•öŗkgŠŨM=ÄĪonąŸ0|‚RyĮŽŅÔ÷毓KܞmNäD§q |Ŋ+ČE¨k—WEæymY Māl\€NÜr{uŦmKRƒKļŠIŽäSģŦ˟ŊxÔ (ūébN3Đ ĸ÷‘ŅôØ­ķĪģYev‡ ´›° ŸAœįž*”Ėz&Ōã`Į=yīHĄ°@*<ãšÉÖÄņx^qîY!ŽâĮĮAę}+„ūÎ×#Ō/Ÿz­¸Pė7°å›'ĸŽžôŖõėzs;G"G´“&y •Sڟ ŲĮļ4Ž4ôA´fšMFßRkëÉRÚđĮ’ÖØ+Jũ8įëYQYj֚>ĸ$kįž8#ˇˆ÷œžJûr~´ry‡1é$lĖ˙.æëîH­­ä•ļ„w7NŸZķíĶ]Ņ,ĩEŧŗO%Ĩ˛íû§9f¸ÉÎ{ĶŸĢ>›ĢÅ=Ä“ŨM ķXķ6Iéמ”:jû‹™ž‰ÚFÃfd\­‘ŽŧzÔí…@Nė¯8ÖtdęNēu”âŪ(’ŌœnûĖŊēpMm˙Â4oĩį[ˆî#˛†Ú8Öæ°įƒč0?N)uÎĨĐÎÅų€Z‚æI,Ŧįž(BŖv×} ãŠĪ>ôē}ä÷)p&ŗ’ÛʙŖÎK¨<0úÖ_Œí´ļąą˛šžKąš%ČDČ ßŽ3Š”ĩ°îGŖø†]RîŽŦ>Î×ßhˆ¤›ū\ãæā`ō i^ÜÛXZÜ\JãtKæ:ŠÉöãßĨaGo¨i:~Ĩ6—Ļēy†8­á€Āã ŪçŌŗtÍ"îÚökK¸øŊŧˆ/¸ē 20údc=ķTŌbģFŨÖĢŠŲÚFfĩ´yn.#ŠÕۀŨsîm5Ėųīrb}›ŪA´Œ}ŋį4ũ?Q‹QĶ~ҧ°T3Ü9 Ģ#´ęÆŗîŧ7ŦÉ ŲD-cydē–{ˆ¤Ÿ#sd!bzã#j9SĐ.Ī@ŒĀëšv¸+… äúÕy.ėbģŠÍ§ną3 ÄoĨGĻiķiz5Ŋ’8•­á¤ņ–ük°đįˆĄŋ]Bí-¤š0JĖ@xųĀĪåė’ZŨƒlë­õ­&i–8ŽĄcŊŖR#*2qëUėüAĸÍk5ė7#ɎS1g=Ŋs\ļ‘ā}SKģK¤¸‹|vŦwđepsŒŽNjĪü":˛øK˛’âҚÍËH­ŦN}:ã'ëM¨÷ŲĐŪxĢBŗ!&ŋ]ĸ…Á$ŠÆ?XļÖ´Ûۉm­n"–X•Z@ŧíĨrúˇƒ'Ö/§š/{‘ Œ €‘žz}îÃÚ´|=á—Đîīn™á_´m‡ĘŠŊ9<“JĐļú[šŌëēdz¤zl—(.˜nŸĐ}M@Ū'Ņüé!ûNįŽu€íRríĐZÅŗ´ŸWņ~Ŗtmo$pî#æ,ƒvļæûUM3áíŨžēšÅôA„­3$K›œqĶžiōĮ¨]ô5m5§ĢĘåMˇ•#Cæ—cĀÉ9 Q{â+xĩËĶÉēÛK<ą•!› PWŠū#øT?đŒëMDŒå/šëw–JōIÆ;õũ:÷ÂwwWŗŨ}ĩ7Í[ntËŦXųąÛsôZ7 M9|OĻCvļš™î)UŽ9Vč~ƒŋĻjĮ‹m ŗkˆkĐ×"Ū(āˆ‚XFO^˙•ZĩŅ^ŪúöäIûŲŖXâ,ŧDŠ8QøäÕ ËmmĨ‰u7-g3Ü1UHĖũ%Ęäמ3ą°ŊžÕášw„ mˆ>ûc9ëĪéQx“^ĩX'Ō­’i.&h˙å‹?'מ*9ŧm>ļē¤×ŗ4ßiķĪLvÂũ=üŊ–č^Ëöĩ} 9+í˙ëô§î†ĨŊ7Ä’ę-¤"Îv‰! †s“×Ōĸ¸ņt0ŪOoöÚ(#’F™˜(;^ŧS´Ÿ 6öKŲ.žY\ČP0Få€ĮķĻßøy/õdŧšâdM€I#l›NFÔŊۆŖ/|JÜÜlĩēwĩŗYäˆK@Ī\Ë­Sģņ­ÂéöŗZčōĖ÷2"A™deąßŽ•f ZÜ˙jM4÷M@v >Uų@ôâ›/‡­æēĶä–i;&cHØ^€}i§Ąff^|B†ĪPžŌM>U•6¨Wp 9ĮÃŪ­ÃâIæņcé)b|¤Pe—w## ãĶĩVi/¨-Üī<ō™ZW,Ãį$đĩii~ˇĶõĢ­AdžiÜm +ä<ā~B›övĐ7SmŽŅ^zП>í§Hāä~tmfnÖ¤Œ2đœŠÄĐ|a@Á°y¨ä`$čqŽŨę]Œ#¯CšiÜžŸJ3h ¸ëQģ$Ī\T“å#bNxá}ęPĘN{ûĐ2w-´Ē€y$ŸŌĄiT–\Ž1Á§ēązgĨGåƒŲ'$ũiŠf2ŧ‰3Ŗ‹ü?•5ķåŗ9Ģ' -ÜUiwĀ(ī@ʅv€2séØTõ—¯izlŪ]ŨėQČ6†BÃpĪCJšäڒXūĖSx“pۏ­{…Ņe™@Áb^ĩN܂9Ļ[\A¨Ú-ÍŦ‚XœüŒĄ¨ÁĻŲ5Í딋p\íÎIúQg°\Ÿ–Bŧũiĸ$¨íž´ī˜Ä$ ŸZĪÔu´´ûTĒūY`ŒUs‚OjĀž Iœöô5PŖggšĢ˜—oôĻ;ȉ’€8@æuĻōŧSĨĢ^Í2G `ˇĮ5^Ú÷`ÖŽdÕgck,Ѝģ[b`sˇš VåũÜv‘‰nÕ\ģÜÎŨ‚Z–ĶËē´ hÖĪ&w$ą…nzģéą)jr3ęq\č—qMtōy74~kå‚§9ŸâŠnîäXõXîŽ\A{ÆÛÉrˇpĪR:×dW䯨Ôcņ aˆ Ūü—5Ø|ĻUæĒ–ˇöđIž\ėe ōn=>õˆ¤¸K(ŒK)‡ĪQqäũņ~œút­›‹+{‰ĄšXÃI e˙ õÖ¤ ƒ’y¨æJĖŊîqf=–úƒŲ5Á[{˜&P ØqœÎ8 ‹sĶü(“Äzr-ŧŪ|Ķ‹de˛Ã9ÆAāÕkéļÉo:Irâáš5 $‚šÎF2 °ĐŦžģŠÚ8†ĒDQ܋•ĀįŽiį²\X\Ã& čĶ] Ŗĩá†8üĢ}æW„žIMšŦ{-zÚîâ'…n&GÚĻ<`ĄųŗééEØhW›ÂĸsvŌ_ĖLōŦŲ)Ô ņíJ|<ÍĢ\ß\É%ŧÆe}˒qŒtāc?IeĢĻ­j×imu]cl ˙NyéŠËk–{ũúÖ™Œļ’ #98ĪZ5¸hMwáS-ŊŧV÷,…nŒí+šÜ¤œ¸ëžœÕû*Õīĸžššd‘c1.dÚ'ž=zT#Z‚ęįKhíf"g‘ wÛåēƒ•eīĐÕ+ËÆMcZ’KXîžÉoHÜüĄNâĮĄ˙"GĄĨ†tûShņ#†ĩɇ2ąÛŸÆŦęl:”- ĐWvTr> ö5¨k—ļˇ×ąÅg ĮgĖĖŌãzs€QŠe׈Ží,ī]­ 3Û— ‰I ‘ÉĮ\ƒJŌz…Ņ%ö§[iWIåĨšÃĘō’I?Ū,NsīšCĶæˇ†#äOž& I÷ŨœķõĒúõÅÔzŔɍ,<ÔdÉ$2ˇéŠŊ& Öv\q*I5ĐHã/ŖäÎOā(÷ƒBŊׇ,§›Í–ŪgU]Å2@^EX“GŌbĩ\E ¤ŦFŗÁ?‰ĒCZÔ#ˇŸí1ۙ ŋŽP­įŽAųĒ+Íbí ÔĀ{|[]FĒĻ<åaäg¯Í֞ Ú7ĄŌŦãYDvŅ"KÃĒŽqŽ}k6M7E-œßenc 1´õ ~ŠŸÛ—ÍŠNąCn,­æĘ]°üĶņ"ŗmnŪ {xXÚęëPœyŒ†lãߝ˜Žu1iv‰,r}ž Đ.Ȝ ų=‡Ĩ*čē`2°„ õŋ ũįû՟{ŠÜŲ)ĩOļH †ØÜŒ+—?ÎŗNģŠ]ëois*CwqäÂŪWú¸ĐägŠ$‘žĀUrßa^ĮjŌAæ›t`dEĀu ČĪčjeŒuāc­pwÚÅŨŎĻ˙lh’KôąˇxŖÁQŸ˜įŠāŸĘļ.õikyĨÃ%ķŨÃfeŽb ™GĒúž@éG%…sĻō“pãļ8ô¤k`Įi‡ĨyŠē×`ŽH’öô¸Há™Ļ8,Ē1ÎåŊĢ Ôu Zâę=>Én–8^(å¸ ‚ÄāąĪ éßéUČ:ŅÂäũ0{ÔFß÷ĸFįšãÍĩÎŗã ōMö[INR9J M€¨āũâĮ'éQŲŽ¯>ŋ77Ģiqw$Ģ%|Ū€žƒņĨË \í7FZLØÜā3×­LcQ吃q\äZ†Ĩ¤ŲCsĄ"_j$Ȝ†HAāA€5 ãYšņ Åũ ļ2Ė-Tļė*)ˆôĪ<ŅĘ+ŨíÚéúl÷mu†2Ûę}>ĩi?y´´eIPH=Ĩpˇ÷:…îϰOe~ļé¨,+°O,įŒ9'€*öuĒ_x‚î{•šŽ$2#Ŗä&7G°“īK—KŽæ­īˆl­%ž9#š“ėüĖĐÄJ§äũ9¨o|Jéo}mgq!͌ĸąã“둊­âiã–[m&b×ŗĸÜ2ÆH÷$ãÛkÄļ×Wl6V‘2ī:.á¯Í’? Qe @–Dwd PrĮ5ölS7夒`¸Eg%SŒŖļkŊ°ÔeĶė­Ō×P6×7Žķ.īŪĀ ģ=9&Žļ¨ËâhÕ-å–f1ÛūUFXVcĮĐSå ›özŠ]ęwöĸ܁hĘžfüîb2Gļ8üęŲhÃ䧜ņÍrYjSX[°\+\Í-ÅÂī?p7Ųl\ÅŊnėwŽVÜŊ†›hšZĢ“•Æ÷=™5Ģáí*]F†ĘK‘>ÂInÃ=‡ĩ&ŖmJ÷Ôyņ––érŅ †ŽŨw—|Ŧ mųIëĪō¨Ž˙JŦ<9#jĪ9ŊEĶätÚ,` ¨āgûšįé<8’Gs÷2:]Ũ ‰éĀŖÜ HŽãÆ(.ėíá͝ސJ`ėÄ ņ…Œ×†Ö(.e\|ĮšëĐZģ7†ãēņZššcōãŒīúôĒ€l­/ ŋkŠä¸BĖŏ äžZkŲØ^õĮ/ŠŒ–Ú„×SÛÛÃ'‘Іf|íéĶ ūĢũ˛ ÖŦô‘o4ŌÉi%n6¯ŠĮ¸ũjŦ~ ļ[/°›Û†Sp. ˸öęÂøyÄīĒĩÍ˞"b8ŲūT¯áÍ&ā?xŪĘnëøvϧČėėAîԛ~UápGZ] īČJĖc7g8?֚6ƒ×$qš$ŗ 8¤V=3œSĐfÄŦ$z{ÔnqķâŦ$eˆčjŗFpsKBĀĄžlöâŖ`Ŧ9É9Š›s‘ĮlÔ$(ˇšÍIH­6ƌzÂü¸zœ°,áŽĩ rr8=sš *H0¸’jŗnc$sŧU™[=ōGT“æF?Úõρ*AįÖŦŖ°EWæQŽHæĻCxĒ3<÷Jã#qjwæĪĩúÔúVŨŗ×žj?ƒö‹qŅŋ*ŽĻđøŒA…Fá“4ŋÛ­3nžĐ yû*Ö-ķTņƒ,˜Á˙jˇ<,Ŗū&ųąē¯ N_ Đūz%“0…Ÿ,›Fė3ßhrA9•VˆK`sõŠC8ÆViœÜ~ŌIä)¨‚Ī’Nx94ås’~]Ū´›7̌÷Āæ¨“ņu­ĮŠ4čĄxcēu`ī"īĻŨÃķŠŽ´öž3ˇŅ ୘O,°áW)Į=ōkŖ×oaŌÖ FęęeŠ'“Üû eŖĢ\ŦWOf5Sē8ŸœvëÍi}ŅÔå4ÛíBÚÚK +™$-įÜ=ĻŨՎŪ{æ†ÕŸPŌõ@÷Ūt"dU` V?x?ŧtúFĸڄ,eļŠ&ûSĀëæį•î=ztĢk5¤Ōŧví¯ " •ú⛗Xįnõ}AŧWkŪ-ŊĻ#ōâh‰ûH=@8āOÆŖņK]]<ļûŽRÕ F-ã.%”7Ũl: Ũ–ËJÕ/⑤W¸´bÁc— §ž@5`ęšeŧSʡPl…ą!Ū>R}islė;Üi{'‹a¸vÔü€ÉåˆĮîvmįx=k­šÄįĖ#¨Á5jZZËnŸkƒĖēĸ_3—ĪLUÖFä sč)IļGâööˆí;aÂĢ0vžĒöž§p÷3ɨE#¤rą`osŽŖ įœæģl­î'ĻˇäAōŗ b?Õ,vļŅJgKhŧæg#К9ôĩĮ[œ\×Ō _AĢŧĖD-&~BX‚FĨ2îüÛ[k5G_*ęæō°\íÉüĢĩ,ÚKˆãŽ•€‘€3ŒķųĐ`÷å"ÚLΗ:ėēEõËZ\_ĩ›†6rDņ↠ ņÎrj÷ŠĻÄ1Ɵl/$Nņ´‚†‚qÉ>ƒĨlęWņØ4jļĪ<Ō“åĘ$āryãŦÚÜũĻÚ9&ˆ˛įd̆_cīIËgaĨĐåĩ9$Ôáž)ūÔ-¤ąką|ß8ëZ:¤Âh×-æ€.-ÛiŒƒpŲĪ­uVŽv ņU5]v .KExg•ŽdB%nėHš•íd&ŦÎpÄ,­ĩ˛!ŋ’AtØÕūdfƒĐŽNqÍTXĨk=:;Ë{ŖŊäąžQÁU`ûNzíÁēŠhEO“QûDd˛|ČNIëíĶŪēFÖ$†æÍ  Xî&’7-&Jí‚1ëŠŲS@$õãĄ§ve j­mŠÛHEĒÎŌ˛muÁܸė8äQc¤kIuižĘŠ;ĩų ŽØ=2z~ĩØG"ǐAĪÍ#MQ´ŽáTKˇ ?\Ė,q:v…¯Ŧ–‹{´PĮe%™t”ŗ.@Ã?ŲU›m;ÄpčIcäX$ļę‘Å)bۀ?{xãëÍu÷ļwĐĢÚN“&HĘ0ašKjŪcķucŽišŽ5<7Ŧ¤ļ`Km˛ Íķ“Œc¯ĖjÍĮ‡īÂyąKmö„ŧ{…B§n×>üÕÍkħKŧû:F§mģ\nvÆđ6¯ûUŗ Ŧöë6_.ģ°ŨE'&F6‘ũĨũŠ|n7 WĘR;€ĮUéÍIo mjöú9O‘p€$=‘ß#ępjŊΚw‰ŖĶQylčÄāGNõĨo¨‹š'T‚Hã…ĘyŽĖG\sĶŪ“žác?HŅnôÛĩ7k"¨aãfI÷į“QÃá™Ŗ‹MX5Š[ čŖ ŧ7^*ŽĢ\ŨjŪEõÜļ×++âҐtä ŧdž‡9­ĄâWšKxY¤PÃr¯¯Qšnã+ ÃZąŊšm#M•a‡vÎK wÉüęY|9oqw{;K6oĸX§Q&¨ė?ÎMT‹ÄąŨOëI­â¸ŒČ’KŒ08&ĨˇņTMi5Áŗž8"dIYp$ÉĀß§įKŪ ÉáĢyî.[˟âŪ@î@Ø:ū{ԍĄX,ˇ/ģ̈́ZąyHGAĪzą6Ŗ}oo$˛ØĻõč<ņˇh\äļ8ôéT5[´ŧđŨ•ęƒ{y0u?֒¸1_Ú}ŦRų’H|ØD $ĶąÜ3Ā'>øĢįÃö2i‘Xŧ@Á2ÍšHčAÎGįYzÄâ{]VQĄž 3Iį*AĮđ֍ŽĻ×:„ú}ä~MÅē‰0’oGF$œÔt§­ŽZn•Íöŗewcwö9]pÃ~ÕüÄį¨V”~Ō#ˇpšzb`ģËeˇcĻsVĩKš,­%¸Œ ˜cä.°>žÕq[2O?ÞøĨv- „Đô‹Ûī´,q5Ė,•~r:nã?^ifđž•qjöbŌ/+ĖķHÜw+úį9˛&‚[}{PÔ´Í˙h…”Ü@OËqPxôaÎ)öšĨĨĨĻŠŠŲTžtdŪ Œ•PsߎxëT“č×öŸrŖÎ˛…ĘĮä‚GE"•´ :Yfi,ác0Q 9!‚ž3ëXqkú•Æ—i$"Ũ%–ņ­ä..îGqŌ¤mzîŅ5p$ŲąœĘܞũyĨf;›˛é6­4× QÜÉ•æė…ôÁāŅĨéąédvVĔLœļ2I9'Ž:šĄo{uâ)ė×ÉH >v’Ė÷ã‘[d/,­ķc¯Ĩ&˜ t,Āžp9æ•Ņü˛ą…$Œ/Ņ ōd“AžƒØW#uĒŨŨAĒ/!ŠI¯c°ļš$ųŗŅ‰=úŸ§5_Ä(ŧˇ¸:m•ŅV…ã†kŋ/%˜ŒŸn€ûæŽV Øī‚ƒÎĘŨąÅG4kąt˛¸XˊB˘;{dzķ\öÅÄwŪ ŋmAĖvj"†O°Ÿs¸ã§Šk÷KĶ­.ŧšüˆår‘q3ų†;('đŖ•…ËÚo„u+R)ÎŖDlŧnj%˜u˛H#ü+Ž* QÚ˛âÖíî?´¤ĐŊ+)`3Œd0ö"¸í#[ÔâĐ¯/ūÛ4삍{•ILd`t A=¨ŗz°ô=E!98 qN•BōH$ķJãäļÕn!Ō!Rēy%™å–áĒąĐ‚:žŲõĢ:ü÷š}ĨŦ—!X9–įīČFp8cž§Ĩ+ éWģļ{ŠĒdƒß5į2]ë°hš'—=랕{ۆ99AŠHü8jÅÎĨŦgéömöčîîŖy‰U!ˤü¨Ođ¨Î~‚Ÿ Žw‰ĩn$;Ô1Įũj|3EsôŽâ2Aƒƒ\L3<šžģŠH/ZKDmRUÎÎ@ūnjĻĄ{Ŧ%•ŽåßČĮíʤĢI)ĪĘĖ:ÉĮ~.Qž‘Ēϧfŗ›wEy¤‰0w‘¸ņĀ85} nãî‚x>ĩÂéōÍmk§41۟˛iī(…4‡}˙^k:Ükq¨ŨKo~n%ą*˜$ îzœ {tŽ]@ô—o‘¸*HõŽZ ŲÁĩōæEY|ũÎylįīãwë\íĩ–Ŋ§éŖ'ÚäœG ŧmģ%‚Ÿœ öĪŦŲØj‚ĮO˛–ÚéÕī~Ķ"HŲXâämfĪQÁÅ;[f#žŒ¤DäƒģĢYēž§öy­ā´Ušęā‘g…Xã°ãķŽKÅé¯jqaem'Ųc„0dmžc’8÷Ā˙=)ö‘]Íu{öt =Žž–ą.ü푗q˙žhåŌāuļWëöm÷On“!"m’eWņ=({û2ÃlņūņKŪ™}~•ĀÍ j7: …¤zvŒlŪGæ…wÂā3ˇ~rOz“[đ}ÅÄÅaŽŠ dļL›FŪcęíŪŽX÷ {Ģ-ÖŖiZCupĢæ¤’ŦH1ķgëŠģŖg'–‹qģ…G뎸úæáĶĨē‡UK8ã/kaæÂĢĪ>™cųT:O„õ-.ęyˇÚĘē– māžÜsøš,ģÖŧöw6Œ,ąČ VČ#ĄäU+ ôÛP4û#ũĮü˛GÉAīTßEÔ,| ēu”ąԇb9l “Î?X–Ū Ö­­īa°´“ÃHėĮ8, $P’ŗģßc~=cízōÛŲM $ķ•ÁÃnF:Īžš¸°Ö ąĶ-ėÃß;Ë/˜9ËŌ­øCÔ4ģëų¯$ļd”"Æ"\p°ņīLŸKÖSÄ÷:œAqļĀ­.ĀrOCŪAtŊq§šÔ-õ8#ĩ–Īc+e ž“ĶŠ˛5íˆEģB.ˌs— āņíY÷~ž¸Ō¯3q겤—ķ°…čƒāRj^ šú+Qö¸ĄK[bĒąĄU2žŦqڋEõ ˛Üū,Ņ!Ë$ųûAeŒ„$§ũ21RéŪ"Ō/įŽŪ KJáˆA cŽr8>ÕAüu$v!nb˙Dļ0ÄZ>ŒĮ—ĮͧŊYĐ<t‹ß´ÍvghĐÅ…ÚIÉ'IĻÔ-¸^Wâ=U4Ëh’cw;ŒˆË äđ; ņQ.ĄkĻĪĩÖŖss-ԁ SYāgÚŦ]yzŠ4ËX&ŽQf$žpŒFjįIĢ1xzhüGqĢ-ā˃ų`BãīzwĮ­Jĩĩõ+ÁâÍ>d”šQ2Y!!Sob}OaQ/‹´t´ĩē2NŨ;íũŲÛ×ųöĢáßÃōiIvčĪ(™į*ģg'pô5ĨክĒĩãkD;7VĮLã§Ĩ?p^ņ4"ĩž+Š+Š>ÜäB¨ŧāu'=­xnö…ÅŖCĩ‰<ĀK˙Ā{VMˇ…žĪwĨ¸ē&ÛN]ąĮËŒ“øÔ‰ĄN|húĀ’8ĸXŧŊ‹’ŌņŒžÃ˙­JŅ MŌb̂YJd–)bĖxäzÕuWk‡wĀ ĄÛ×üûT 9į>ĩa”ŋÚĨe˅<žNOĨ&ͯĀĀ4 ‰ōT|ÃŽqQą›÷cšÕd€ŨĶéPȤđŖ<œ{Pe‹1ĀĪŽ´Ã ‘Č&§eų 8ã0Ú~nz E˛Āí^ĩYĮ͌sÜՒ¤K¸uĀ ›p|ŸĨ"ŠNBŽJŦėUŽGķĢ/¸åČĀĪ U™Ž7nĐ3τ䕑SrŊ*>PßZ°1ŽX­33Ōđ"F žŸWņ>^{GĪqSi, 1‚qĶ‚*2ŊͨĮđ6*ĨšŅˆÅžygwČe~=>jÛđâ–ņ*ž¸ˆs˙ZÆÔ ˜Y¤ī ŲđÆO‰t&!ÆzüĢU/„ŨėĪFS´r ô&€žŊĒ5l˙Ō6î%22GŌĢũ˛úkMΧ$Isr˙6ÕŒĢˇ@?:ę&ˇŽXŒ&ÄlŦŦŊ˜‚(66ĶZĨŧ–ĐŧąĮJ9–Ö‹fM•ÔōŨë6ōŪ†xÎäū~ĩ†š–ĸ<=k|ژßvéĘÁvA×'Æp:ú×lļÖŋ; hÁ“‡;ÍõõĻ-˛Y´Kk‚A“AƒõšŌč>VÎ2}WC’]Qdvķ“Í„€1ëëԈ¯n.Ĩ¸kMŖœyᭆC Ú}°įŪēkKÍ.æäÛYŦđ ĘĢ\ãå8Áô­?"!#8DW|ĘŖ$SsļÎ*4´æ}Nņc’áEĖ‹;|‡a{sŠÔņ}ÔËĄĖeî7V' rO~âģD†EM€÷’Dļ™#FÁĀČÍ>}nMŽ;U´“MŌŽ'ii¯/`•P@eÆĪV Ô§š&ņOļŪKÄȝ‚xČR;}+ĩyâIÖ6•VFÎÔÎ JtōÅ$›°™''ōŖ˜,s:t˙bŧÕ8îÚNƒۛvŌ{Ÿ—Š›Ušš[x­î´ĸF_(Ÿ)Jwc§Ū§cŦéˇåŧŒÆAšC# ÃÛ#šŧė8ĪN”›‡†ŲãąŽ)´Û†‚ JGōĖE‰ˇüØî9­}Ŋ.ÎéÖ ŧ‡šŨmņ$gäƒ98ô­h¯DīKIöšugqˇfŪ9äqV”Į‚CeO9Í7 ąÍ´ooãO´Ee|CF#’eÆÅąęq…ˇŠĨņ-ϧĒéwVëk Ō:D\bålûúWB$ŠBP1mŋ{§Öƒqn]pËŊÚR¸XįâÔoŦgĩÛ ŧęmŦ°āų@–l uūUˆí˜ÜEwv {hŅâ[yIc#ļ ”ÛĩJâkyom5ļ†î0Z6ž?™âĪŲāĶO¨Ų‡ŦčzŊāĶ˙vŗ”ĩō‹4ģ Rüŋ?ž1] MF;ÛX–8ÚØÄLōŗaƒ˜õ|°# đ:W=¨jįÄO¤‹÷´ōā†Y‰čr ū4¯}Ö+˙bj&âō VŪ[9î>Đ.w2z=GŽkOJĩÔmbx¯äˇš5c1!RGĢsÖĒęēē6‰5֟wūĸh„Œƒ<\ƒĮpjÛëēlVķI$Īļ y€ÆÛ”„Œgũ(m…‘@hú¤×ö_]ÂđŲĘΆ8ȑÆ0vüĒÍļ“{k$ņ[_˛vwHŒ@”-’yĪ@NqQkēœW.¯ŧ’ÃsmüŽPŽĨH=Įyu{x ēIæąpŠ\'ĘĨēdûšÃBˇ…Ölášy&hȀ¨ÃuĪ˙ZŦÁáu‹NšÆ{ۛ›I#Åāyc<`œŒM â[x¯%‰íî@ŠqĘ#ųP0IĪC‘N“Äf/í6ūΏd°ûĖ áđã'9ÁÍŠČü#qĪ1ŨŪŪÎamâF”xÆ80jSáĢC¤EĻŧ×B]O™ķ|ŧ¨Î:åPKâ!ēsg1XmVčW÷Š{B0kBÎúkģ?=­ž&<ĒŗYqxĄÜ 7 Ŧâų$¸™šđŠ|Č2ģzöøt›xš6w’âí<Ļ’Y0ė tÆ1œņYZUęėŗ–K_3Sŧ30Ũ€Ę‚Ũ€4÷‘jw4Č%†ũát|nF¸#?€ŖQšZž”/ôĻĩ6‘Ė~ęy§„8Æâ{âŦÚiŅ#ÛNÂFž|œŗ˜q“Œãļk.ĶÄSŨyŒŋfPûe'•8įŽø>´ČėíRGāqŸĀQoŦÜ9ŽIm#HãÚˇ”į įąŽAĨ¨ô5“H˛ŽųŽĸ‹ųb=ęį Å&‡ŖÃĄZ5ŦĪ"ŧ†Bf}Į&ŗ4Ũ~{ĢÖ˙B1éÉæn¸whSŒ‘īƒZú~­aĒ™~ÁwûŨŗ¨ôĪåK^ĄĄ}•Û§ ũ)ā2'*9ãéD*ūY$ÄôÍL<ą÷ÜöíH GO…ŽžV´…ŨŖØX %‡ĄöŽb×OņP×bŧ’8"ÜV9Õd[D Ā ×#<Š_øƒRŗņ"[Y] ‰-ØZ<™ŸjŽzķĪĶ/‹gmvæÜ¤bÆŨ&ːKåÉ>Ų8ĢIŠįPÖÖíˇũ"QüÅųFŊGŊ<ŲÛËYĀġ™“ûÃŋÖ¸AâN 7N‹ÍˇšúũŒ€ŋʑ!=<‘œ~5÷‹u8uģ›8!ļku’(#’>vÁ#ÜõúQĘÂčíŨržDx'$``ĶDbVĒ!#8eį§Qšã'×.STׯ Ÿg°dvåzļÜį=šâ Ö<]&“¤Ã§Z´Q_}™ežXŖĘF[Đg$õ?֎FôÎŖQŅëGŧąŗT´{ÂwH–$üÄúžĩ¨–éif‘G…DŖØ Ãmytë>K÷–t“ËFž(øÉ Ū€ŸįVđ˙8Ģ\GmēYJĸđ71Āôūuį÷:ą3øŠōÛRģYãDļ<°IēÔęūå@˜Ä|ûíúg… ƒ‘éĸ!+ĮøĶĄŨœ÷¯5ąąÕdžWûAŖ–čIûĮ`4āģVĮ´lāÔ&Ôĩ}Bé5•#‘bS€ÔāøĐán ¤vr¤SDQ÷ĘCqõ¨tŨ6ĶKļhíãeV;Üŗ,}I<Ÿūĩr^°ÖbÔã7va†×aiä.H8žzŸÅļúæĢ$ö6Ė-ĸƒĖŨ˙Zäā/˙ZŽ]mprŌį`Ī*¯#ÆĒøÁ$Ë֋Ĩļ{wŽåÉq‡ķ>醸ÔŅĩ)õû(Žôą-”vqÆ­+‚‘ËßwŽxŽÃZÔ5+XŦ­#šÎ8؜I d# ‘߇Ъ•if.hˇÃėĨĸĩ-VõíāōˆQ°7{œįĨQ_ēŧņ$–đŲÍ,ąŦg#~sÆ[€=Ēļam§]ŪAēUœŽéæä´˜8 3ß>õwFŅ.m¯-§6˜cĶ’5w<—?1Įây4ėĩ ›ßÚē|ąb+˜g‘P¸DĀÖŗīuVæ•Ζ°ũî.”ē‘ƒ€ĢģęOOJˋÂw>{h,íŸQšČ‘ķfÉ\õĀëĪ ^j#•įE——,žgđ/T ޤ÷ôĨhĻEÆĢĻÛÎđÍw o{Ü3ŒĒgũE2M_N‹Ø}ŠĀ@ė™č+ŽÔ<Ģjzė×§ėȒܨ)¸‘äŽ1‘ß âĩ/tQî5é|‹O6đ­‰?0PäžÜgŠ9cmÂėÛĩŋ˛k($ššˇˆJJÆÁƒr@ÁīÚĩÆ’= Žoj2jZl!Ąû 6ŅÅ& Č*C6škĢŌmĩkhîŠsÃK6č‚ĻŅö_zRIlÃ^Ļ›ĒģœW+ˇ?ü$Z§›si:r¨rŅüÅČÎĐs[×Ļúk)’Ô@.Q“;sžøúW1…õVđÍÆ˜×vââ{ą5ÅĀRKŒ‚z÷ā~FŨA›˙ښ-­ĸę4Ĩ×!ČÚŌwI§_kēV”..Õ]Ā!,@<@­aę^ŋžÔn%k˜LdÄąĢ'ŨE ļ}Ī?§ĨfjžÆëöĪ:k‹Ÿ´´)Ô÷M$÷`îux§C˛–XdŧÄĘęŽĒ¤ÍĀ:ûTąx‹J:ŲŌbnČ$ B@ĀÎ éœW.Ūš}]u)ĩFumrëŗŒ‚01øc5ŗ øvm;SŊģžhĨûDŦéļ n9åēŸOJ-´bԞOč1_ɧŊŅķŌAAąė)ąxˇM &=ķ\3,Ē6ĻzÖl~Îŧu;‹Ōō}¨Ü6ÔÁl}ÕĪ`?Zšá˙ ?‡īާûigv+Œ š=ĪSNаjt2`t‰ä÷?•>L.sīM`Å0ŽdËDhŋŋcģ¯Rēķ“ÎGԙV žĻ‡ ‘ž1é@Čp 8īHvōr=ö†Q×4ŪøĮ€Š1UÎI%IéYˇwëk¨ÃA!Į3BžĀũMkKę 0G5‹Ž2Åjn6)ehđsŽ˙ץjĘwĩËĖ̌ƒÉëQ0ų†;jBĘbÎz¨5 AÃqíH˛éRČwdįéTYKH§sW] É –<Tåbdāņ‘M:(đƒëúÔĘåŨQ'lT˂>cŠfgĻ‚ˆģŖ› ņß´Û| ŌĻͤ Ų8éžj ląģļ,A jĨšŅŒČŋ GąË™¤įņˇá¤Fņ"ƒÁ9ī´õëS_˜īäëõģáˎˆ‰ î?đ§/„ŲŊčh2ÛGC܊“jÉ$ŽÕGå˙X>˜Š‰*ĒÎNOdŽČÁßf84÷ Ē…ãž)ŦF įŸN´Ēv… œ ´&fßhÖwÚĩĨĖë8žÜnÁ!:įéXĐøM[–ē[›­Íŋ ģõÕ)/?ÍĀ=8§90!äėĐUŠ5ĸ%¤CcfšnŸ ¤2ģŦjKœ“õŠBēŽáäķLķ°J{jHÄ“ŸÎĻ×ŦĒpTŋŽi~DŒ’\ƒØĐ­ YJžsīL-%Âæ00:“ĐR ‘ˇĖ@\žø=éîJƒ×¯nÕ"ąLp îÔ¤ČTŗ*į?•09Ŋ{V’ÉŦm­†ęāBō¸áĮŌĒũ˛ūÍ/Œ—AŊė1dD4oŗ¨õæē;Ģ kābē…%ŒJŋ#>ŖĐÖ>•ĻēęŊ­Õ‚Ĩ…ÁVŠ9Y[pU Ķ$öĒ-X–ČaÕgōõ5{ąļÁo$`¤€SĪ‘ŠÜßÚLŌŨĮōÃ*y{FwFp:q] ŌôáĐ­¨Ž]ĨÆÁ†ĮLÔQØXÛų ĨēųšʀnąĮQSĖģ &rZ<’ ũ–éaOėāØü0ČĪŋ•jjÜ3­œ°ß˜,æšhfšN6åÉdãš|Ņi1ę– Ī2B1…ÉÚ{ÖĖQÛ SÅG|•Ø0O\‘Tä›Ŋ„“ĩ‚ĪY´SecöæģyŖfŽVŪŠČ˙õV^™­ŨĨî§mu{otĐöp˜ H\•rqĀ­+}Fĩ9"t–Ųä¨Á ĶmMgĨYÛģI Ĩŧs.G˜ą€pzķBķđíärHŌē Ļ{s<÷dáŗĘ`Ž …tļw˧Ãsn7G"nV`FGĐôЌQ&åUC ÄĒã& kՋɏĘr$aUr‚yô7v9īØ#Ú%ĘȎąNåW‡f=:gķĄnîŪūe—í?ډzžZaļ4;€ãļŨš?ZéwÅ{#MžŠ‹åRÄPÂËųąōį­>nĸļ†I,ž)™.ÍˆĸŸ%¯0POZΆ"š[6•rÎ&1ÎģO› ã?ČŽļ ˜ÆÃ”bŧžÔĮ¸HÉi^ųĪ—7ėsū˛’Ú #žÂh&0ˆĻ’b¤9đ0y'ŸįU´Ũ ōĶTž"Š-ėṎ́ģyũé$äúŒ~ĩÕĨÄ>^ũÁ”œšŠŠęŅ­Ą‰TÜ\ËåGģ8IާĖîG$ēMãi7öÃJ¸n!iE+#g ŽO¯95Ģqmx°éĖ,ÜC€ÜÛG‚JāöyÁ"ˇlĨ™bÛt"79;„DãõäTi M;M,¤rˆ÷ }‡ čyéG3TUŅmŽâŽä8tļ’fhød\1Øg•öΟ„Å4’ŦŌ:ĒĮ1ÜŖ$`N)ŨąY#:]S”^‰¯-ÃŨÛ-ģ˛Äp įĻOĄŠ&Đõä:ŠD‹byY čs3ÆjÜū Ķíät•n¨r‘’ĒÍĐs‘ÅYmwM†ú+Fvķde^…$déEä;#6_Ũ\Ŋđ’ô ģ‘%ų"!L`uį8û¤ŸRÍۘ/ŖãĀų[h]ĀũGˆí$û\†+ˆĄļ W •8 zšŋĻjvڂK$%ō‡k+ŽÜqJī¨hf/…›ėķ¤ú”ōŧļĸÛ%TaAëĀë[ŌXŲ-ĄĨōĐ*Í&7lV÷Yû !–ŪR -2ēā)Ú2W$õĻÅŦM6Ŗ ˇö|ád…f.Y~Lœ`ķڇvDMᲖöQĨåÂÍk#´w 7ĪÔc įôĢ‘hqC*“ÜYŒėāŒČĮŠn?N•īˆmŦ&h rĘč¸@ĀĮ<ķ߁éPÍâXāŠâC˛Ao'—<ˏŨž;g$ Š5‚ÛčqÛ^O$2\eO‘KHŸįK…˛YĮŸ6ąŧq“!$)ëŸČTچĢ5åŧ6Ļ´īōÛĖ2yĪŌĄ‹Ä!õf˛KI˜ŧ¸ųUą“ø†G °[[iꖐĢ!’I—>ŖžMč‡D‡L?ŲŖ6ė2œįp>šŦÛ=GʆîōūÎ7ežd„îˇîØŖ§ęõΉD r’ÅûčŠ'–¸9s…Áãŋ(× ´&‹EŒ-ĢI-Ëg2Ģ<¤ąb1Νbŗ<1mm,—“Jd˙hHņ ™•rzSÁ8Í_šūx¯´čŽ­@ife˛ä.}ķČŦ˜WĖ:y•†Øõ™ļûs!ĻŽÁ›ÖšŽ¨÷ņ՜ą1y‡ËÉęvôîkR4˜„T-Œā +ĮÄqŪ\˛Ŧ­ .Ļí†mã$žâĩôûÛ;į˛]Å8ŒüŪ[ĮåPīÔjÅ˙0’ŦšÁõüĒcČ Ŗę*8ĀS‚xį­,ÛČpõ?á@͖›Ÿ}}¯ë‹l—J6ÅÄ(8wäū5˛Ú6šM܋gû`Ää/2 sšĘņdņ´V!Yšîí"ue_˜ĶSŧņuÍŊš“i ē19rdg$žĮZ­XæŅ4É^ÜĩŒ;­qäü yASĻ‘`„kt‘ĨWōÆCž§>ĩ…ũˇwyâogöx­ãeYŒšŪí´3*ķØØū{_×?˛`O%|ۋ‰PĄ;FOr{ÜҍŸOąpŅŊ¤e}ōЌaĪŸSE֙a:ÉįZÛ:˛ÛĐrųsôŽ"īÆē…ŽƒôąÚ™ĨŊhŽâĨĀęFA§Eâ‰õ-&,ßí—ÂØ#d$§‚O’[Ščéõ˜tņwēŠŗÚų B‚1‚TuæŽ8Y˛ĄC.2AčkˆÕŧAũ§Š.‘Įi%ĘÂ۔–p§,sĀ*@뚂ßÅ:…ōëZ‚Ü[ÅeoŽ70 ¤ũH<}(åvgxR-ėV|d…lzžõĒ’2FŦc;”•Úŧģū˙ZÃ)žæŅšŨČvä.;ļ:ús]žĢĒIkái/<Ԏq5“!XĀ´J@¤™ąvņ1+JÎûÛ :úĐæ8 čd`Xä¸ũ+ËÄÚņ˛g:ŠžØFO’ŧHĮåAęØëč+ĢēÖn"žõŒ‘4Vzr—]ŋ9•Į=ēt÷ĄÁ æFöŸ{§`—°ĢG›ąŊp@ƒüŠ]žŅj&ˇ›‡SąĶ9čkŒˇÔ¯tũ*uŽUŲifąˆ•æ-€2:ŸQī]JŨžŸáąu6f’ ]į…ØxíJQ°îSļŗ]ã3Íww¨\*ŧĒ€r¸ôčQUŖų**ķ{=zâįRג\oK)n!FäF#@=sW'Õ.'¸ŅtËۋä6ÂVh2Žō1ĀäÕ8;ŠįrDōķĪŪ§ÆC+ųąŅ}kˆ˛¸Ŋŋ×ĩY§šžH,’H’Ԁ@=ØōzTbĪPĶ<-k;Kz×WEapĨœÃ;¸ž8ĪŊO/AÜô„ųcië%sŠH‹–`„/GŠĒÚ-œ–Z46æ[†!w˛ęO8?L×+g¤Īˇ}ĻK%ü˛Ęb-tÛļaHrŲ''åĀô¤\îÆŪp`į­LŨčN{Wļwˇˇ:ũÕÜĸP’E @ėW'<đĪŊAĒčZŋ…ė,cKŠį¸d[é 9¨S…į Î >as˛ģĶŦuE¸O3øąŧ€G¸‘õ§Ũŧ6–1*ĸ4%rxāf¸{˙ j3HXÛKVökjĻ˙X[$’}õ5cXŅuģŨBxVÎ)ė#†­÷ÉČŽōîFrOj|̏ŽÎ˛ÆåŸJ‚[÷Ž+ˇd•AÆŪ98=Y{Ë Å$šŒmPN\ gĻk‚Ôü9­ęZÍíÔvÉŧͤ.ĻNZķØŽVÔ<+¨ęZî¤ãNōby#E”Č1°}æ?{LĶå]X]žļæYb„nØŲĮ 4ųä„:ŦŒß!Alū5Ęø#Ã×ējŨjpë1gP3ÍОj#Ĩ\ÍâģŊcUŒ›{l5ŖyØEPŋŨõÎsš–’{…Ø—ž#ē‹XXėŪŨakkûė–sŒšđų×Tgļ{ļĩ*nUC˜÷ØõĮĨpڏuyw¤ŨĪcö­ —É.Ī#w ų×T“[–cϧ–!^ÉŨ÷1×éÉ EË앺x3yf ‰¤ÛzãÔûTVš…“ĘЛØdw••T8°ę w"ąõM"ëQ×4ũEDj–‚O•%˜Ž? ĖŅŧ5u§ęļWSOØdš`Ŗ%Ĩ~= -n•ÍÍĨ’k™c†#ŒģžŅž˜ŦûÍSAļŊ2Ü\YĨɈäåL¸ŦhzļĢĢYŪAqĮ˜ĖRdĒ“ü`w85RûÂ3jŦdx•Ucį+1˙xôúRIu`îu-ŽiA&oˇBc…G›—Č@zf ML0I*_ۘĄČË ;AéĶÖšņáK‘Ĩj6Ūl(.\lOįLø.˙û:[hžÖ×K Œ‚TÆŖrOzvpģėtOã …ÛP_ߊeÚŦx{SŦ|[¤ę7QZÛŨ;Ë(%WËa‚:ƒĮŠÃÔü#u}´›Õß%ČÆ=ŋJ•w•RBƒÖ‚Y‰VEĨĀ\įŠĪjafįpĪ59fYēã§zD„vΆ40+O­3sžp;wŠ•Ü1ÁĨFBä€rOZ‘Kģ$ķØVFŖķZI žc>sĐg’>ƒšØ‘~SéĐ{S$]ØīBvcÜĨ-|ÜéĐSœü‡9Ĩx˂1Û8¨c#4ŠRđŦ“ßFQķeF9Å]düš$õĒRåGaƒÍ4 č"įĐՀ\ ‚!ōŒsšŸcnb3Í36pZ,JņĄ$n?3īUüBÔ-rz#}*֑ąy$đ0*ļŋƒ{hŨаįéUÔč§ņ™šŽyĪúC˙JŨđÁÆžčqŗŒ~KXZĢÛp8¸|sĮjÖđŪ_Ä^đŽī•Ē—Âlūz2“Œ¨ßZQ’ naīQ 3Š˜‚IÆ Į5’8¤ĢÃņî) |ÍķįÔĐퟐvņÅ !œsTHĶdRAr9éO*ž‡$s–8ü)@,y$ķO%iöÅbŒÁ^mžk€Ā_cÍZČ;IU<œb…“%Š& " ŅŠ* $žXQĀ ÔÚĩuM ĶPš‚âåσũQ2íõāeī‡íu –í]ĨˆáYĄ ö8<­;ĮAY™šũŨÔB\Ejî„üÃsd ↺†ĄwpÖbČÔÜŲ4šU]šū}+ĢšŌ펄bâÕ$ōÎT:ÁöÍU“HŌ­LÖ֐ųyTʅÆzõ¤¤’Ø}Î5/fÕ§ŅŽ–aķÃ20Æx?CS&Ģyso§ĸßÁd&ŽM× ŒãņīŠë?˛Ŧ–XŲm-Į—„FĐ})öúeŗ>Æļˇ6ëĪ—åŒnúSö‘ėŽÛœíÍØMGT6× o—ĒņuÜšäĻĐÔãS/ũ­-ļĸĖ?ŗÖxÎāĘ­ķgŽŽįė–‘Éy"F‚5ųßnßëUíf7^j>˜öč¸8_}FJ|ÂąĖI¨\\&ŽęĻũ­X2pÃ>Ũ=ĒÅíÛËk ]™dS<ņŗyyÚT¯;ąØ:×Ij-n#Ū‘!(>L`‚9:,lŖ‚PŖ™v L2Ü@Í"ÍvŌĻĻc坁ŒžxčF;ûUÍZYNŋeËr°KˆÉ0ĄV8éĐ×Q#&đ Rí…ŲI^ƒĨÁĘpÖov`°’5Ŋ2Í Šq€ü˛ũŌsĀ'zĢ%ĩíÆ‹ŠZ.‘v†O.XTŠ °’zįŸzô]¨ŧ4ר‚A<œSįˇ@åGĒéōēY9ĶîZÃĘuk[p’BAĖgĩ_ŋĩšh7ŲÍ#C&_3FĨ0A$ķÉ•tņ[Žæ;WšsĀĢ— Ûqž‡=i90˛G!ĄéŗÚjˎvW r!ûa›äu'#ōOvĻ^i„ĐëI›–žî)ĄĖˆÛˇs{}ßÖŽë 6w“Eon-rOŊˆbŽØ~y­ŅyE4ą¨Ŧ\|Ū‹´ų‚Ëc››Iŋ‘ĩGŽŌ4yä†XpeÆztéOžŅu)%Ö v‘pbx\Čæ\g_z5 qørQcg5Öôē‘ĻBąí1š9ëž@ Qqc­IĻGWNn–E"HÕc@\Žr*ōx‚ČEu,Í, k†“ÎŒĢzZŠ&¯mâ j2Z<ĄU$Cō”*Bä(węlhj:TZ¤G0dhdY”ōqÔ}Č?ZItđڜWé<ėŒĮ$aAV\įđŦIæ- 5Ļû/ö@˜J$ÂđŖžšÎkKKÖ`ŸėöSG42Ŋ˛Č†P1*€2AÉũyĨf;ģĐä›Sû]ĩÛڜ(Œ$œg=&‡đĘK4Ų¸•-n[Ėš1‰ˇqœ âŽßę0YŲÚ%&ÕĪĖ{qĶŊKp ´’8åtb…C!Á^:ŠWadE}Ļ‹ûĢ;$ąŊŖ$ŒäÔÄŅcMVKčĻ–%‘ÃKaąČzgĶĄŽwKÖ$—ÁĒLڄ×&/2Ģgw<†ôÕĢa|ČúT2<ōI-Ą3Ėʒ“‘Üúvh7-˙Â=jÖˇrž9åķË’Bs• qÍG˙ÍģŲM ēK,ÅKĖíķŧŠŒi4ßŊË[3ژŖšŪˁ°W9Î:tŠ´í^MAšqjËfāŧs™ŽGQž´j…Ĩɏũ‹Î¸¸ymä.Žō šÆ9㞠âŖO YĄ‹dĶ‘ÁšÉpxzö÷<{Ödwą_&v҆Ą"áÛq^$ 3é‘ŌP[ .!E,ŗęsF0Fžr}¸§g`5ė4XŦî¤h§›ėō;1ļ$y`žŊŗÔį­E–ŪsO”|Á1ĮÖąeņVÖbæXĨišcÛÄw30$B~•āā.ĩ-ze‡É]° eyéĮ˙ŽĻÍĢąč´;BÁÔpŨÅO÷qīQĮ T¸Â÷õПä#izĐ&Q¸Ņė¯pķAž@ŒĒęÄ ÁÁíõĒoáÍ2Gĩ2Y#›Oõ<Ÿ—Ÿ×žyīQx“VēŌ ļK žæá-ĐHؓ×ęņ=ÅΞúe­Šąš}ü+c8sÎ}é¤í ‹ÉĄØ[ęrę1Zēaß$įŒtü*/Z´šLŌŧ%åĖjZØĻyŦ$ņŽŦú-ÆĻt¨’(7Šc?ƒĮŽŧúŒUģÜÚéKs{fi›ũŨeœmÉ,O˜\›MđÔ+ĨXĨí˛ËīÅŠZiĻŌŪŅo5¤@䅎>2ôš]‡s§m.Ė;Iö5›xc$7Ž}}ęV%ĸ’$u<Ë‘øŠãuŪŲÁ§H˙gÜößišU’;(ôĪ­Sģņ^Ģ Z{ ¨Íjn'QvœgͰšŖ’L9‘Ū›( n6Đnŋ;wzũ}édŠŅVxá\€ōd ;Ÿ^•Éøs^Ôoĩļž¸Œ2Z‡–5ŒeX‘ŒžĮãŪŠCâIõ‹mgxŠ3­šQ×q ’ŨøÉĨČīaķ#ǎÔôËϞΠÂŦŦT`aēƯų{Ôîųˆ9ŽÎöŲc hĐēžKUW]ÛcĮŽāU ž#Ô'֞ĘļOz°ÆÉ Š~lzœđM.FØ_Cžku“cUûØŠRÜ:ĸ1€ëŽ•Īčē”—Úæ¯(ŧim!Ú‘Ēåô{ļsŸÂąôvîę-OYšÕÖŪŲɡ‚/,ˇ’ÄáONOŗÖ…+ØÎōĀ& ŽHnA ēĒHQË)^G\gˇŊq.ĨĢ\Ú_ËqĢHˇ:l#BņO%]ŊO*Ė:ŽĄũƒ,—7ŦÛlÉĀf–FĀ=8…!saŧQc%İYÚŨŪē!lE €ā°'ķ‘[މ*#|ËĮs\?™sĨiēĩõžLˆtøJĻBĀvuÁf?…ié:‡ö,:}…õÕåĖ—ō9I§NWŒí<äqTãØ.tR rS“čjIƒžxįŠāŧu¨ęō\˙féßhXÖÜLæÜ͖یŽŪŪõ;˙h-æĨwkkxŗÚiņEl’1*I\ˇÃ0ČüŠrčÔíCÆÁ†N{ l!|Ü HãžÕį–jW Ž:Ã:ZĮl‹ææO1šf=ätč8ĸĮLņ…†´DS4ņÛ-ĩžŪĨFKÎIįŊžasŌHFBTp*ŦW $%ĖRGÉ]¯Œœd~¸ŽgK°šŌ|u´WĸöDi63)r0:pą5 [:dPCx˛ŲY–•Ŗ“qy\ũĐO~I'°§Ę›Ü/c˛ÔĩôÍ1Ļ)$’1  ãs1ĀüjŧZkkVænÚ ąË”ĘÛ\cŠÆ=HÅdͧūįÃÚMÍš¸1#Í"ŋĖ[btĪģ0ũ+*ëÃúÔÖh†Ū{scČŅĮ. Čí÷:ņŽįŌ„\ô2 ˇEU CŖîŒvš…žI•w”ÎÁ×ĩÂOáÍB˙UŌlo⏖ĘÚÕ2É.ĖĪ͒y=ą[šUŅ×u=J[3 •R8L„8ĮE8ĨÅwŲŗ%í´Q5ÜhąŽ]÷ŗëéXzŪŦ—ģHŋŽIŪXáFRnâ=ēd×;cá}U-ĩFšîęÍ a+3å¤>˜ĀöĢzĪ…į6ZeŽ•mˇLũĨÉØXíĀfĮ$õĒåIî2_G'°\Fé#ŽH9ä^GJž)-nL‹ Ųsl}ŽĶč}+“ĩĐî­ĩK#mok§Bȥ܃$„zväõ­oŲĪĨéŌŦđĒÉ$­!UÁ Ā'ž*KŠJæĪÚėüé ´‘.éîTæĒļąĨŦ‘ G.åG2Ŋp}Ģ”›GÕNÖWȂ+Ģۏ1Hc–LŽ úUø<2ĪoĨÄņAVÎĶM9ÃɎ:õšëUhŽĸÔĶ_hī WŊ‰Y‚•ųēƒŌĨ¸×,,ĩlÆëŠHU‰A'Û8éYĮÃōzįQsĖBd ōĮÆr}ķXē_ƒu{OÚę’Ũ[Hī–NwÎ:cÜ}ôŗ™@ŽœTĘKģwNŨŠ›Æũ rzœTą‚3ŸĘŗ(oī'éíJØ\ŽN}ũi—ĖØ:õ¤”î 'ĩ5‚ķĪ&ĸe&2Ā`┖Sķ`‚zŌ3ė öūĩ%"ÔsŒyĻHqõ#Ļt0ÆLÔv`į8Má{gĨT q(;gJ•^zZŗ)ˆļp0_Ze°ÎP@}ÎsŠ´KE˜cō•ˤ.3žæ¤—–%Ĩ_ĀtŠVŪ7&ž„tvqFÍûŖĪ­ ņæG$SĩžcøUĨārŲã‘PFąGČ|ØĀ=MH]#~Wī:÷¤2ŗĮpŽĪÁKuqSU›–#¨â›$ÂXäUƜsƒŌž¸!Ucæ=éĖx›UÔläĶSNØŌÜN">pāæĸžÖu[_íe-l¯goĒB’2ŲČäķČāÖî­ĨŲęöŋgœ>QÄˆŅąVVÁZ} Hž¸cu#D°ˇīNYGLāõ÷ĒRVŗNúā—T¸ņÖĢwZ[ĮĨL9i‘œņČŦŋÂÚÆĸlí×3Ú[´Ž%?+Ģņ´gĄãīvŽĻ/Oļš7q[mP'˜Xä€0&Ēę>ŠĪ÷vÂIPm ’8ĪCŽŖëII'qōģXÄŅŽ›R¸Šx.¤†Ö%ōÖɊ–,;_˙VjHõ åÕõp/’ÉąÚ*(ķÂqëÖŽÍ—Ļjv÷1^\1‰#åŽ=‡ĩ_ĶįҟÍēČI„Æ”Įĩ‹đ6䌞Ô^îéV[œĩåÕÖŖákų&ÕmĻI-ÖUXˆĘ䎃ļ h ›‰5ĢHWsZ‰Te3&ØwˇĨlŅaԝŦK-Ō´¸ >sŒV‚ÚŲ,›…´Jņ€7yc8öĒæĶblqļē•įØĸ2_ģFڄ°M4DoĮͰĶ ¨/Žu{M+NŽúödY¤sq9lūč%qß¯^+ĸņ6u§ÛŧEhČŗ‰%†t¸×ĩZŅ4…Ķ­.”Ŧh˛Éæ-ē6R>Ā'韯ŠIn&ŽnÚ}Úí” q8’Í]ąŒHęÜ{ÎŠŲ=Õ÷ÛV}Bøß”™f´ @āNØÅw–Ú……ĖëoÕģNÍ8,=x§]^ŲŲ*K3ė"ć’Į€8ĨÍäG -´K„7rZēI ä™,ËÜuë‘Uíė^îß@K:ęUˆÍģâcōöŨíœWĄ Qƒ€á‚§Žôņ&蔅÷ę(sSŽÕf›W°×txėlƒh x<ŽčxéYڅ‘¸:|‡MÔœa)0!VŠMܒ:ŒöŽ‘ë0éžSģM ĘԁĪԚß@qFv˛—mēG¤%ũģœMA+ĮgķYÖÚ>¯oĨXb˛IãČ-ä”|‘0`qĪL×XĻז9št—0ƍ$ōĒ"Å™€’–– jsđéēŦŽŦéol–÷)˜˜ž~m€`L˙*͗IÕgˇš†vˇķŽZWFŨļD#9āqĮjí @JîĀāg­DŗA2É3!d;~R SīG3 #īÃsęÜL] ģgŖ1Ę61e$qžĻĸŸÃڍŨŽĄö‹ˆžÕz‘ÄŪ\xTUîzōk~mFŌŅâŠ[”Ĩ`ŠŽÃ,O›aŠŦēåüŪ€­(ŠŪaŸ•räwęJ`ėVŧđÍÕô—æK°‹u H<ĩûŦœ†ëĪ$ÕÄŌõ9t‹‹+ËØüŲA@ņBU#3ÉëŪ›§x…$ŗgŊēŠ#=đڎ…‘NëĪCÍXƒ\ŗ‘m–"ˇ-û—,@cœq׎ô6öb‚ø]ŌŲ#{į•ÖČŲr€nCßę8§Zč3Ā#{ģī9ííĖŒ!@@õ9n5Ĩ§ë6ZŒ× i.ö…Ę2í#‘éū{S¯ĩ+;Ry €rĮ$ãĨ&ŪÃV3_Cšk6!x]ėæ•w4˜ĪŋŊ\[į’r÷Ja•0‹´f#ŽqëøŌKâ2 ™­žfYb!÷m…ĪCœcô.ŋĨÉôē!|Ņ&6~=ĮĨ7pĐŖĨøv[M ]3ÄQ‘eÚPzā~&Ĩ Û-›ŦĶ4–q´qíÛķ1ĪāåRmÚˇŲ$†í@¸ŸÉAå’XƒķØéÖ¯A¨[ÜŨOR¸{v ėWŒúĐûŌŧžádfZxymc˛ũüŽ .T1vėį<{šM+AL’Æ—RÉm‚ Ŧy9ĮLŸÆ¤ÕŧOkĨÜ}â’yĐe‹j“œžO°¨õzÖʉŌÚâeˇe UˆÎ9#'Uj-7ÛÂÂ4ļOĩ܁ īpËË6sž=ĪįOO 뉖;ųÕÍĪڃ€ŧ7CÆ:ŗy¯Áh/Q­įvĩXË`¨Ęļy=°AĻ\ę¯m}v‘¤ˇÛį0ģÎOsÉĮ8¯ Đm߆–î8Ŗ3΍Ū|s ÕōOcšĩĸøm´­VęôŪÜOöœÂ€gŽüT–úÄ2搨Â$˜I K¸c6pzäôü+|ŠM¸`jW{ƒFב”!8äĐÅWŪôäÜváĶķĻH@Ë úR:˙D°ÔīmŽo i$ļmņüÄŪãŊC‡ôû-RķQŽ'7CįŒõĀíPëŪ!ŸI*-ė¤ģ‚Ä+mUPR{œŒõVûÄGczŗYNŒĢčō Áä\āÄãU­„[ūÄĶįĶ×Hû9mÚģ$ŒžüŠf§ĄØj‰=ÍŋšR#Ä ××Ūŗu/IĨ]^Cũšķ , ącßĐōxöĢZWˆSUļŊ¸xŨ-\ŠV`Äāg ūT{Ö¸ô¸ŸđŠč‹ŖÚ_%aÃ9ÆÕløŸÎ6˜4øŽ/4Ŋ:oä#r—Û¸dq¸ôvé\¯‰uķ6‰ĻLĄÔ\܋% ˛Æ­‘Į§LzÕŌ§hĩ°Û+L-Ĩž™ƒāĮ}y8öÅ;;\.ļ/iū…tí5+xį‘äi§p]‰<}2jņĶíąėPyb?)W`#g÷~•ŖøÆmRé"Ŗ"ž\1;Wøõ'Ŋ_Ķĩ{Ëí û@Y'˜ĘdŠäÜY{dã­&˜+Ž§Ü<’Ke ‚Dû`¨č>‚§6V2Ŗƒe3mRÅH^@ü+œŗ×uI~ĪöĄnŨ22DŦqŠÜã5ņ&Ĩ>›¨ęIo‘EēÖIXœādgœŽŸ…Ŧw:[۝?Fĩ–æUHŖÜ72GüDŒŽŧâ¤M.ÅŲۈˇų¸ōÆ7˙{žõĘ귗Ļ=2=JKq,“ŖČXŅ8o_›ô§Üø›SŽįMļÛn—.‘<ņ˛œŋ˜ØFxã$õÅ­ė+ęu ciQ ´QŦlJ…P0OR>ĩ"ÚB˛nTŒpH;GĖA­ę‰¯{,–Ÿe˛’UV+!€ąīÜÖE‡ĩ;›Kķ<Āö–m'úŦ—v#flt÷ÎhP“AĖCFęęPØRGklĐy^Rā6B•ã>ĩįrø—^ŠVŊQ"En<ĨâfūĮ-ПJëīu“cs+5Á&ŌČĪ%ą‹Īf íĶôr´7ŧP)*ąŖ0ų˛:žŲõŽ^ãÃ×÷ĄÚmBH˛ēĮ@dû dôÍeÅâ-VkmBęæú3V~hōâųØá=N1ųÖv›âacÔ$ģŸÎV¤íØi¸-ĀÆ8úĶå–âšŨézrXYG”ĘĘĖėíÆæbI?­˛[_ę7q7Ia _1”˜¨o”ũÍqVŪ(ÔĶEĩKŠåßÜ0Š(oōÔ í‚IéíWt pŲøûYŒK=ËNí)r\Ŗ$@y†ŽW¸]\÷ĐĻŗo§›Ėš•e…ĮķĢf=Ѕ/ķÉâŧē jęŪMrøMw=ÜV‘ŦsÍ ģÛæe_á‚ ŽģBŧ7ƒ­īu;ë‰ŧÖßæO798˙R†™Ą§iļúƒ†ēi7JķK<Ä –ęM?IÕ`Õ­ åĢ7”]ŖWaØ8${W¨jw^)Ķ/ī!’âŪŌĖâ tƒsÜ8tÎ8Ēڍ ŠÃÃēFËÆ”[4†87ŧ€w ÜĮš|Ŋ÷ ž–Ë—ĩ€ž!ķ5ˆl’ŨÚ•â3‡ęĘš8ƒĄ>ĩ‰ˇX"2OöĄĖĈž5‹ž˙33ÃWE‚Vŋ´-krūF›įî B]‹ķīŌ—/pšØĮ§ÛÚßO¨É=ÄԈØ(‘¸D8%W͐)4­A5;{ ŗÃö˜ĖˆŽŧíĪ=9Č5ÃYÍŦÍáÛû—{™ī— )VÜŦć!{ĐVиš˛×.åuēLŗ˛XŖIÎ:(ûØįĩ7soÄ7ķéZ<څĒE#ÛĻâ’2\cŊR˛Ö':Ôz}úEēko´Fđ1#Ü{ķX’Û\ÁđúxLRÜ]#ŽK>XũîzøíšĐĶĄ6ú,šĸXJu1h,™-•^‹É;R˛H.Ή°ÎI‡0ÆED—Îŋģš7ęAV u?A^oĻk¯>§y5„¯,öR3Ƀš=û˧éē6¯¤&Ŗ7ŲÖGKQmhˆqבøä’zŅČģ‡3ėuúûj?k‘#„ĖͰÎTĩŖ)Œų?ŧMĶæÆãÛŊyÖĄĄks”ûœVæÚÕ-Ņ7į;žņĩ:Œ`į°Ļ2đ9ËvÍ eva#ŽœŌŖÛŽįžŌ§eeaœwü*2ŲcģhĮj’ˆ7ÎsMĶŽôĄI%ąŒ“øĶ\~ôā‚h"U(ŲÉeĮ ˜a•üĶōÜ`ŒÂĄfE^0Ŗ<ÔꊰI8â˛Gį`qõÍ1•¤\o*G_Z]ĘËŨ€īRäec?ízÕ:8v@̐ŧúTđ"lĮ˜„P3÷ˆ#’qSÆŠĩ7n÷íB, 9Č~ũ) ß3&áŋ<:zR&Ā:ŧqK•gäc'§ĩ1% ,Đ ;ˆ'Ŋ)ˇ¸c“а} Ļ/ ^¸QLE”1ŗ``09S†|­įpU\ęhžaq Ģ ‘,}p~éëƒRFŋčĘÎ@ĪšĻör^0ÔoŦ4"ĐĻ‘biUŗ°r!Æ¯ĻĻ[C—n„Æé2ãĖ,RŨNkZú)íMŊâFđÉō•ŒÉąŅŦĸeŪ]É MÄãr)Ž:ū´_Ũ°[RŦzíôšã؈aÚâO/k Ž>ņsžESŗÕuėũ6âáíX]܈˜Ŧd>ũr+ ‡@Ķ>Õö•ĩÛ"LŌ‡.ßxõ8Î9Ē2Yørkģ6â(äJ¯)"6'Ž˙/˙^‹Įĸ >æ ŋēŊšÃÎtfƒR1o# ~8ŠíޚÎ+Ÿ(ÅÎĩą÷ŽrŽžŸZčCŌŅOú;<Ī4cŗúõëPOeĸŲÆe¸†Ū8|āė]2 ö'ߞ´{Eĩƒ‘Ûq/eXüo¤+mP–͐ÄņĐ…mÃvš…ŗ\Y4rÆČZ7uˆū”Ų­4ãvˇˇÛ‰Q@Y:÷?ZzK¤[ĸŲ-ÅŦI"‘+Ü`?‹č"–‹ĢÉ{ŖMsz`W¤Ņą*’7sČU‹Ģøc°Yf}‘\˛Ÿâ~ã֟§i 6×°ØÁoļOŨ\ÆŖ=CøÖ­ÉĻé÷vËm<1K6PUqĶ›jâąÂÛŨžeqūŧĶ‚ŲĮvå+!3{Ž˙ũz’ËQ–î}įČĪ-Ę1LyЧœbOá]ēXXCnöik Āy1„?QÜ͌P$Ģ*ĮtM íĶ>”ų‚Į6ˇw.‰É~RkËâyq€ūVđ¸@z9Ž“Rŧ}F{¯-Ĩ’$āc%Øđ ĮŊ[>SË´h/™HåΧĨ7QģƒNĩ–ęfo*ÜÄ =…&īĐ8ĢK­r{]QCŪ‹Ų$„ĀRzã#ŋā(y5k'÷ŌLÍ&ĸ|ā$qŒ– Ž™\ZëôŨrÛQ’$Ž;…I"ķI!*Ž8čĶڄœdúúSs×`ąįķ Ų’ĘuÕ˝įŲ¤)Ā@OÎKsW§šįOŋÕ^+K™ÚŪÚ(-¤d,€?>H'é]UÕËÁč ķ_ PĀzzņTuÍN}'Fšō8–W‘ÉŒŽ˜Ĩ{ôČÚizÄÚv¯Ä7-ws$)Ŋœ€§$sĐdž8íN“Jŋm ’Ęâîiõ’Œc“×…ũkĐR@ŅnũõĻH˜ŖvA9ŖŠĮiĨ\ˇ‰§š›N˜[ÛD ĸ‡Gš$ū•ĄáŨ:æŪÆW¸ŗŧ×(RA}¤ä#Š5ŌĒg Z‘•˜Ž6ëšNLvW86đūŋ.ŗĨr-‚ ī1—ŽØĮ õú~56‘á­V&ēģ¸Ep<סMŲŨ+įį'°ãZígH64ģ?ˆNĐŒã88÷§ÎÕׂõ;Ë{XÚhbk{Cläo'žqœm§cákËCϏGŠÆ&U ˜,ė1Ÿ`?:ęČa’ΜSrN8ĄÍėF&‰ĻŪi–‰ÔŠq.âY‘pNzžOZˏđÎŖq¨Kv÷qåîÖECŨzŊk¯dÉuÍFĸ@0Ø$q“ÜŌģÜ,r˛øNņį’S{Záî2g{Ë0y辝ęDđ”‚Ę(žÜîÂV™ÆCJG @rq]AdķUIÆFiŪf8ܸ\r:ŅĖí`9Ø<,ĐOĻīŧ•ÖÅ]øP<ÉXœ“ųšžŌČéBWŋš9îu&@6 ø g¯ˇŊ‹€,NĻĮēhØL‰ü`t#ĄĸîÂ9íCÃR]ęÚw-g3˛€Ą„ŠzŧûÕ-sNŠËLÖnÍŲŽQŧČ^M¸ÄāWh2ā ĩC ‰ĖŠyŨĩžnhM††߇×\…Ž-oĖP^BŠû[v9õŠæđėĻæy"Ԟ7š‰aœÔų˜zkv5؉• Oôë]ŖúխΈ˙ĘÔHXæUä \~‰W´e×íŠô“ôŲU55E7%zy­ƒëōĨYЏüOí‡*ąTūo˛zC†bĨcÉČíVūfãh,0=M?-倯īœÖ(ã.Ëmųą€}Gjž/3vXp b**œ‚I#Ū”|Ō˜…ąÖ¨‘KžæÅ[PåpĮ{ ŦØ2’'ŒTÁ”ėž)ˆ°Øä1úЇq'¸85°9į‘ëJŦ‘nÎâÍÛԁė%°[úŌđ r gĩC¸0ÁωA8āö‹ŠÃ'…@gBīlļ1ķ}hˇÜĒwp Šßar:ķHķĈģTãژ?ĸŠãMˇœÛ–’;´D-ĀÚO=ûņÖĨw:>ĢÜAa ‹Äˆģ×÷¸^á*Ķņŋk3ŧŅBŧŦLãÛõ!PĖ„¤‹Žri–enXcŠõÍ0Ÿ”å†îĢƒÖ•ÆŠ‘ŖyH@~ōHúÔed+ ųNO ņĶëZ1ē„A“–ääæžX[§Ĩ0F ԄÅ&pŋ3tõâŖ’¤nCLíWî%1E$Ė2–ãÍVŅõdÔm-^XÅ´ĶĮæ¤%mšāūŖķŖ \Y*cāɜ7Zą—s•€„$cwjŸšXĢŽ!篺Öī.Oڕ-ŖĶ<ķyĢ:Ž7Žß{ĩ04æ20f˛3ŋáP,ˆ6†ÆNNÚŊ,Â%ÜĖĒ n,[€=ÍF5ļi~×—ģnņ #? *Īh|šÉVbW§ §EÖÜPā¨úTC[°Ë/ÚâɑŖÃ8eaøĩ3ëz\&×ļĀĘ Æ ŖæĻ)ę+’[Āė§ĖWäs‚?*t1Čû”ŗw6k:īÄVÚbŨÜ]ΎI$ō›s‡#•#Ö­žągņ[<ŅũĻqû˜ØōŲŖPe‰‘ÍŦĄCdŠÚūŊ*6ˇ•†Ņ€ [x=é?ļŦ¤Õ[L/ÛcˆJŅ“÷WŪĸÕĩ7M1dĶ.&•a‰ŽA'œāöŸÂ€-Įr>Uی÷õĨŗą øŸOĨfézô Ú¤öë$ōÉöp>BŅŽ‡ØWļtļēŨ@‘ųŠē@>Oī}(`[Œ8\ŽŽ=)Ä,ÆV$ž„p+1uktÖRÅe\K•cëĩA9üjũÍÛCk$6Đ[jŽN;P…w!}ÍDÛD 0OUWšëėĻQ RW;8b\7`==ꎋk¨Húq–Îh5 {†{ģ’§FAÎ[ø‰8ātŖ”w;Ĩ牁c,?)äī âĨ &ũŽ„GÃsƒ^}5ĸCā}W~œđJŽåw “ĖÜŧ÷5j]éíoî,mM ¸Ž-˛Ė*rųÁĀČâŽUÜW;_ĩ@mžåŽ"ō”ÍŧmSNSĩč.!a‚p*ä.tų¯4íIítˇˇYíV$ˇ}šyûÄŽzš}oqoqŖ_[éĖé‘.†]ęOb3JÁsĸMF ,†â!œĢß蝭žØą%Ė/+.Uƒ%}@Ž14ŲåOĨ֜_ėí1˜ļŌ9ÛßŊUąŌ¯-†ÖÚ3Į5ĩķ´î ‚Ņ“×9éƒĶښŠî=w) īIķmČ\ãšqØŦ76CĸŗėõÍ.÷QžÂÖí%¸w2§8ÁĮ^• røWûĮĮT@7šÜõО6ŸNĩ[ø˛>é4†…bÍōƒ‚=j.ĀîIŠ™U—‚s×#ĩG°˛•=3ŠLhkF,“žZ­–bč;•chÚFrsQ•ŋ˙^Ķ!“đäūbǞĄH*ÕjNÜG:Ôlå{Žô‹E7Į–Ę?Ė9b>†´§ ‚Ŗ ãŸĨPœN9šhfÕĻZÚ?÷EM’¤ņš†ĐŖFØe&¨ČátĄūŒ6ŋÎ8䚪â"~×hFOĘÃ8­-JŲ#’#ŊfëäBŅW`ŸĖÕ¯ˆčÆfę§å˜qÄė8˙u*֋ŸíÛcĪEéūåWÕWã×Ī#¯û V´RÍ­ÚķŽ#˙Ņu] ūĪČô”Rc;€ŨĮātĀĮڒ2Šäõæžäy{ˇrxį°ŦQÄɔ“!p fš ÆÎ ëíQ!`ģA8é“V EBx“šĸ"Ž%~ZD|' Á f˜Ŗx?9õÉ4đ‹ģ‰ QČ֘?x(§¤°g¯ZŒ Įšp1?6sہ ĤäĪJFL&bd^@ ÁúĶUļãÉ$ õ’É.GĘzP™ķīcõĻ;˛ĻJmך–e'`ã‘R|¯$~5B3ƒŧˆ626ąāŅįÛÉ$æžÉ Ј°QMa„ œüsPĘBŖ’Ø9ų—ĩA$ģ—p$ úTĒPväƒęh䂯OLÔ1Ŗ›šIu/.‘ŌEm>}ÁF!›<*ƒÛ׊’ŌęM6û_†"ķÚŲʼnɝŦA%wŋ6“ēĒŪÁ+ÛŨėōˇ ÎyŌŽÛxzÉtģģ#æ:\’×3üō“Ô“ZÆJÄI3ßŊĩ”–ēb‡ģ•DĻûČWsqŽÅMqâŖŋiĻYÚų$&‘›åŒ°u"ĩ.4k+ëĢ;™‡Ø[÷­…ČīŌĢ/…4¨/cšH§ŽS.YÉˡ9>ĩiĖ™ģ­Å§"5YgÚg>a!bPx$žŧbŠhˇëcime›Š›{šK‹ØėíĘ& sÎ;ž§Øú×pąˆĘ˛ŸLũ*r‹ˇ?.3œcŋ­O7Xķ[{í^âú=ˇSD÷*€&~eB<Įô žīDsëWŪ 8[ķg=áđURĪŲ=OzôiJ™vã'z‰5;xõ}5˜ũĸTi8Ú:ķÛ­W?š<î;-fî忊įSX^v‘w–ųcN­sĀĐé2_é>žY-îžė‡`—pIāw5ÕË#ųP€ƒŠ>•ÍĘZ*˛ÛË4Œá?tš#=ΰ¤įt8‡TŽßU’âßQ‘ŪĐHA$īûĀûp1ZoivuJöÚÁŌX­’;‘@$…9v<ãđŽĖ‘$8,Øã>ôār0@R§sĮagsĄxkUžh^ŨĨŖ…ČČ!6‚Øū"ܚ}į‡îĻmĘ[w›O‚Ü$ƒĖ Ąō9aÔņœbēKË -BHíd%˛Ė*ŦAČČ <Õį˜nPĒĖŽĨˇƒįôŖ˜,sž-Û‹ķļcķbŪĨ Ž;zûUKß Ī6ĨZX‹YŖ‹3<ü`žß—ŋ'ôĢ–öƒ^Š Z[É ‘I*-Øm1‡%ry"ļŦ–  ´JÁ2eØs¸““øæ‹Ø_Lđ|ĐZiÉ|-Ë[Ë$ō fč =GR}xŠbŗ‚įŒËįBąÂĘmö Ãá1ĩOL),qī]\“EöV7;7ÂķÛ5ĪŪę6Z,)kg¸éž5žL*‚p÷9?….fĀ­˙ŨķYÚۉ­UÅųē¸*:cԎ?*ŗk \'ˆu BčÛH˛0h\dēœcƒžĩŠĨ^ÜKo}-ÁˇxâœŦr Ú € =OC‘øU“ŠŲI3G,N’°†o\zŅwÔrOę2>ˇpĪkŨĢRwÔ”“Ķ##ņ¨&đö§”ĖA…žW]ø #đœs‘]\ÚĨŒsAnō {€D(X|ø8ĢA•ŗ…E;ą.ĨáWW…fßl’Ef–ņĒ9'īî8ČvīR^xbîîíJ-ĻØí’Ú,Š.>f9č+ąšP€1VãĐS#˛˛Šl§œRæcąĪžyiĢjˇíqƒ Ei*'˜ęã…úšŲĶ…ũƕl5& tŅâMŖúûļ’6G˙ p;Y†H6hæ†EeÛˇqÎjXšAŦŦŒÃĐTO¨YŖŦfâíČ@ã'đ§—R¤íĮziÜI‡ŌĄÁf`ļy"šĪųâ÷Hh..âIŽÄŦrm ­“Ÿ¯ĸâëCņ•´—ÜX^U6Z'UΏ>ôíÔ M¸Ô´KģfŠ9'K¸'Žũ;ÕQ¤OuöC¨ÜÄéVB¤aĐļ}1œS‹lĨˇš¸ŠÚáã†6˜0Q‡U?69ãלfŸ/ˆ`ˇ’íĘmļöÂč>TīOnzũij€{h(Úŗ^Å}soæ2´ŅDøYHéŸūĩ#xnÉRU{‹†YŽ…Ķî|aĮL`{ĘŽØ^}ļĶí ‹qųT°`}ÁĨQ]n[ÂōÚØ´–ņī_8¸˛g#ž ŒŅ¨Įé÷]‰^YRâQ+ūķ\t+čFåYÖ1Oâ=SMtģšŌkXãi' †#vīœõę*֗¨'ÚSėön"Ô-čC °#ã;…6×ÄڔÂĖ.•‘ŗÂ ĮB¸Î~Z5üĶ­Ōá|‡—íyRī•ŸzŽ™ÉíVt­&×K]ļâ@ōdrä‘Ķ$ÖuæšįøDj"Ė’T‹Ė)ƒģæ†ŖŊņ ėWēŒiđMŒ);3LU™H$ãŽŖŊ=D[Ŋ´Đ´čfŽõmãK—2H$cķ6~÷'¯Ŋ\:>qb!k8¤€ä8Ü č '­`\j~VąŠŪÍn%Ž; sLz‡csĶ'•i隆ĨöK–ÕėRÛĘɏË}۔AœRiÚã5D)lSjá}…U‹D˛ĶÛ}L7’4ŗ&N]\ūU§x‚ú[› ™ā­oūH„d,3žNj+oë—meļÂÎ4ģibŒ­ō:gŽO”ŅĘÂæëø{NhcI, )”@W;ĐfĒKŖh˛Z[[ÜŲÚėV+oP2q“ˇōÍg˙mę×ÃHŽļ‚KĻžÁBá^<Ž9qNĩ×/%ūČ2 |ĩÜÖĶá3ʆŽOĘ>_֋0š§c—Ší+H`–DĖ+2GÎjH|=§Û*˜tÛd˜ F8 ÷ŋ:įôÍFûL´†DIdú”°!ē˛ŧ,`;Âǟ+ƃƒÉë}i-uĢÛéīn’h’ÚÖy!û?——}ƒŽsÁ'ÛĨ+43R="Í.e˛€J͸Ÿ,g>Ŋ:ĶūÅj€ˇŲ`-““°wë\Ž›ŽëcÜKyo4™eh’=­m$wä sš¯ũ­Ē§‚įÕ_Vß:Ęąm@$ÚqĮqG+Ø9ŽŲbUS˛sō€1C§™ #CČükŒēņĄc¤‚øÜÛĮ<—~Z-_ītāācķ_PÕŽŦ­õˆí5—šh"š+’Ęˎ)œ`đ?Z9\ŨŅí.4EēŠ÷ʕîĻ–åbrš<Ū•Eē‹Y°†ū(™!•NÕ|9#ŸĘ°äž6ēŪ…o¯$ņOĨˇČ§ĖĘåIĀįĐV^…w<š?Øī¤;į’ ›]Ā„\ą'•ÆįO–ú…Îåâ2@3Í(L€\ ũ+‡Ķ5)ÚãHõ ‡¸Kšá™RIQŧŽáųUŋ Ū ¯¯ĸ3Opí,ėQ˛Į‚Ŧ>V08ⓀĶ7og÷đÚÛÛy÷nŒÂ=Û@UîOĻHr%gĩ†IĄōĨëœė=ÆEsz‘đ’_Ļfē}-•UXî @č{Õ=7SkĢ›×W,ŖHs/ېcÛīuæŸ.‚šØ4^dûʤ`Õ¤HÕsˇ Âŧ÷Oˇ[„ŅŧëAEÅĢ‹•-"üˌg͐~ĩ"šŊ¸Đbēžō@mĨŽS™§ŨÎ:ÉĨĘ;OG]_N’ÅĻ0,ŧ;"‚qœ÷¤°šY-.-^ØėWnD‹ŽßĶĩr!ž?ėy‘īVæEš)ÚRä`ˇvxÆqƒV|0ĢosÚ~ßŖ8ŸÎ#ōwĩ>]íŅQ‚–Î3QeJ}ĐÜa‡lWhŗ>ŋpׯųĻYŨā‘#ōČãæĮ§ÍfZéņG”eŗģ<ōĮsōą%IĘîöéSĘ ŊÃ$°ÆļĨÖGÚÄ6 uĮ§ ļrÁ@ČÆ1^oËū2E}ūy(oŨ1ŲNĖûtŽĪOžÕįÔäKÍ>m€!%Ž}äķĮ8Ø ž9ŧ¸˛đ­ÔļŠĘā*¤āŸÖ˛ŧ s‹‹Ŋ>ÚÖÔZĀĄ…Äüäú“ÔžĩÚ4QĘH+ ‘GԚļ°[G˛Ö$^ŠŠ~”)Z6QāŗAķpIč*0Á•žQ8÷§qĶéŪŖGo™0@ hMÄ0Fi.=ŗO|›vŪŖ4œ" 6{ũhGü įĩDā`d“š‘‹2ãg& ™ &~öjJDnrPJîėxĻ2Ÿ^*YGaÚĄˆ(ãâ“)%ŪË´ sÍfN[ĐúVĢāˇ_z͜ã$ŠhŖjСŲĸĪĘ*Ėgå;ēæĒØ0{Hą‘ōŽ}xĢhƒ5FG cpZ.rWÖfē@Ô­ˆéˇ#ķ­=>9 ā9îk?\ o­wpDyĮnĩqÜčƒ÷Ęą Áū#qƒôØŋãOŅÎ5›Bšėā˙šQëˇ:ŨęS[MÆeE?ģ’ÜzzûÕíOYŠ˙Dž‚ØĘŦč‘!Îܙ8R1õĪԟa Ú2..áVŨ­Ņ× 7äu<jëxZÉ,ĄŒM3l˜NĖ\fB́“čĨlœnfĶ+[ę–ú{Ū&Û§‹MļMų †ã9ķŽ¤Õëul´˜¯îm%”€ ĖĮ uĨ˙„~ÖâÚčÃ$‘ĩ뇖Xä°mĪM¸âŸŠhē•„’ #ŠÜŠËrĀÆ3ôĨîõĻe׊¤‚Î3.žËpŅ™eG“äœu=†*žĄâ“k:/”Ãe¸™žpK3pŠųõ>Õw]Ņ’ėÚG†egŽŨ¤‘ äœtÎ23īZw>Ķ.īfš[@í9F“'˛Ž==Ē“ˆ4Ėû[įģÖ᷒2˛­§œĖ%ČˆÂí~ĩŸwzmĩ=CQVäąEĩĖmĄČ$gņZëSN°ŗē’æ(!ŽâmŠž„…~…R¸Ķ´{.îį´ƒ?Úgr…ōËßԓ@`§Š.ώŋlGû—ŠÎĶĖÁb?ģßp)[]ÔM>ĘíŽe”ų˛Ü2ėbUzįūUą/ödēc“oZKÚV?ŧŧØëW-mtû¨m¯aˇ„ūčyĀ! ã­ ŽÁo31ÖæÕæˇļhZ5ŧ(ƒf2ƒīdžŠ1É­{oß7‡mæžDInϐ$žWUˆžß¯Ję“JąL”ŗļPASˆĮĖ_ÎŖ×­întiŦôւ;‡báT0=(r]‚Įyâ}^ #H–‹Í7™s(1˜Tđ`1×ôĻ˙oę×ļúUŠęgžę6™įtÁ9bT`įũ‡ZīĘ}>(DHūT!( ÍC¤]AĒéö÷é–ާh Č3Œ~”ų—`ąÎxŖVšØé–vĶÉ ]ģ+NĢ“‘€01ęGáQOŽĻŸŽkė’O=ŒZÄĄ ŨžIéŨˆüĢą­" q9DHA>cŒmÍQ]^e…E•ĘĮ9 ŗŧXF'§¸éÜROČ8¤Ö/oô]].$ži¤ģŽŪ?-*¤üØÛ<}+VûQš×[š(n.Ä6–¨ŠÍ‹+đ7žįŲ¤1(ڈ‹ßÔß$K‘´€GuĄĩØGÉÔ đIT{×Ô.BįæË‡b3ĪđŒäû ­ņvZƒĮöŠ$šå ŒČø 3Žzdņú×OũĄsuŠ”˛[vˇˇ—ʸi  pĻø‚ū}.Å.mü—s4Qˇ›’0ˎ~iÜG-§izĩΝ–ÍDģJ_%bī œķŒzķšŋ.›yg{Ģ+)Dú•hĸL†fË6ŅëœWYæ(p€ã=ąR6 ĖØÆp´šŽ88ôĄáŲEŊŽÉ.„1$l2ƸÜÎ}zņØbĄ¸Đõģ‰dCfÜÜĸÉ#HaB1‘ŲzņĪZôŸrŋ™Ā'*=Ŋ8˜Ī8Å ]@æõÍãP“M†(ÖKHä™ …Fvásë߁U&XĻÔV&€kØĄE+Ÿ–(÷Ÿ§5ÕĘ"–6Cæ u+”8 {U+=#O˛šYmã—ĖU( ČΌōO'Šîh¸äÚvģ.›meVņĢy˛Ü.ėüäîQĮ’J…ŧ?¨Kg§C,ŋčĒO )= ūčŸS]ģ˛'͡æíQ­ķŪÔs>ƒąĖĮŖŨEŦÅ/•mö{{`RÅ_<íôíÍoÛ5ãÁģEIđKŦg*§ëS$h f9įŠŠWĘČ?0ã?7LŅ{y˛Ē9l‘€hŒ:gi#vOÖĻ ģĪŊ5ŒH9RÄϐܒFŋ/Ũ Ÿz™ōŲBÛ˛9Ąä“#|Ã*Ĩ‰7FĘáƒcoĨc’Ņ´6K=jŪâŌ_Lŋ:‚@Ā#ˇZŗáKš'đ͑–S&dxŖw$™IÁü…Xļđvlōí[§ķš™^áČ÷šæļR8b#Š5DQĩx{b†ˇ¤j:´Ö^MüĐÛLŗb,ŇNr8æ‹}ÚôŨŪŪ5Ėč…!6ĸgŽO'Ԛˇ¨ęöÚeÄM ďpHAe˛@Î*ŖøK[(ndiI!ce!ˇƒ‚ö"Ũ€‚×Ã×1isi“jF[FĄ|°ä÷Įj†ÛÃˇv÷h}Må”Ā-ø‰@ÚA |A§Į7$ĖņNĒû–2|ĩc€[ĶŸÆžšÕĩÆģ6™ĨŅx‚ŗMŗ÷c#=síF eI Ũ[Ãi”Ō+‹Ŗ<˛+\’6Ž#ŒUë/‹*öāÛ;;ũ˜‘ĩYŗ¸ƒŒãÚŽęBy¤ŪąˆĐī÷AŒ×5Ąkē¤pŪKt×1ų{-v…rHíĮC‘×Ū‹ļ7Ą{NđˇØeˇq¨Ũ•ļĄE}§Øã§°ŠāđÅŊšąÜ]dC™FëÚĩaēsn¯wÂåK2Ü=đ+1ŧE'öLēŒZdīf!ķŖ“ĖPAôę8äRģ _ÅũŒú_™pöĨ˛w?ÍËgôÍc‹+Kŋ]ZÎnY>Į7‚K#ƒÁ¯7ˆ¤ŠãQ‡ėLÆÖŲnTŦƒ÷ŠAüē{Ôqx†åŽĪė— Öĸę1į¯Ėœd{iĢ­DZ—@˛žęęåâ‘Ūâ Ąs° čč1F›g§iÛėmÛũ!Á‘’iKģ™99Įj­7‰$Usmh1`/P´˜ÜŊ×88úÕ9īKkVúœp¯šÚ;Ęą–ÆyC‚qKQš>°ĶîDÖļåYI(ģØĒįŽĐNáRGá­>Ų-‚%ʋiZhÁ™Žēžŋ_ÎĄļ×nžöŪŪ=ŗX}ŠsģqĮĘxéĪZ‚/ę7/d#°~×lg‹uÁĀ ōņ׊,ž<7Ĩ[y-ŧŒÖîĪiXĖrO^õčēmŧjSMU1ČfŒ đøäõëHÚúÅáÁ­4d+ '99û gęzÕ;­[SĩkØ.ĸļÅj×1ؕ uS‘ŸO΄˜hiiž°ˇ]-Ŗ yÅFeW=HRqži“øWGšųîŽ4Ôi^@ä’GÍũėgHkZ‘qYŗ›!x§{ˇēũzsK6ģŠĪ}m ĩg°7JeŽáŽ8>ôõĢo§iö7Ī,ąGq(byä‚rqíŸJl:6ŸĄöØėPŨ0ɗ“Ķ?ZƏ[ēģŊĶfH-‘ŽŦ$•]Á,ŦšūîHŠôĪßŨĪĨ‰#€%õ›Ī€NU”3éķRq{ŒžžĶėīšî×L†9¤s~ŋLÖG‹ŦaĩđuÜVvpBŽQ˜ ŋxr,QkŽk—ŲLZÆ1¨ ;ųL Ÿ^sƒĮ—úœē—€/Ž.k7—*Hq•b3ƒô§fØ\Ūļ€KĨĮŲÅdШn84äĶí5mmÖ6$˜Äc•s÷zæĨ¤ĨŅv‚éĀŨBțv@Á9į>Ô§Sž†qÔŖšIŦ$š*(10c§=ũ:Ōŗ /Ųíˇ(ņƒ BíQ­ĨŧlōÃn‹!ęU@-õŽcEÕ5’Â[ģ˙ĩ%֞×2ĢšYBžįœžž”ë kP‘4ۛ‹ˆ^ßR û¸ãÁ„í,9Ī8Æi8´;KƊUÄkœįĨ #˙žgzWĢvžļÕ?ĩdiæ!6ō›|ÍŦ:p94ˇz¤âĪU–ßVÚ"ž„,ŒĘŲF •Ķ–üŠōģŠįfˆ†CŽ<ĐņB¨ŲCĀĮ§ĶŊqWZÅˆÖļk2ŗXŧRDŠČlŠëu sŖÍ ēōŅĄ,%C‚8āƒIĢÉâq,(Â6Įđ†R¤Rō§ŦQī į’}kƒMNk‰4t¸Õn"Iėz,[x ‚O\ũīĘĨŌõĻ—N¸û}čum ”—P1Øđ:|Ŧ;@˛1œtÉĻOmОˆÁudúWĄŨę +›=BęâR˛ũĻ9˜˛ۜô9ĮJSq3øQ’MOP–õí˙{|š3ĀqĪvŖ”.vÆÜ/ĘA^Ÿ•9%FWO&DĀe€ÃqÔW'pačldŊ1įqwXŽ7wë%’[_í1*ęÆ÷Ãj!~Ag8ÎĖįĨ.V;=ˆq'îŽæ¤Dq vLW›AŧMõÔ E$°ÉęÎ~\ãœ{×eĢÜÅŠĨŖj7Vėd!#…w,Ŋ8cŠn‡1ĐōG#n9ÉéAÉ@Hęzį­1ƒ° ¸ôíAÜę§p_j‚„!UvąīÔõĨôP .Häaz0ØŪÄgԐĘĄÁ]šÁĻcįŽ´ōO]À’g#?LP1îāŒcЍŸˆČ‚ž˙pá¸=ķPģęĀ c%ģUF3ôéQ‚Ī#‡•īŒ?Îiėģnū´ŲŽ„b‘H¤äĀ`Âŗdfyœ66¯qZD† žžĸŗÚ%ųܜ’sM Ú˛lÚGūčĢ`õGO?葏jēo¨Íœ=†ô>bjČņ#•ŧˇäūė‚į­jiņˇ’ƒsr*ˆĪúEšaœZ-ÍŖŦĖPŗ[ÍģīĮüjį‡ŋä9kÉ*@É˙€Um\æ9ņ˙?˙@>€OöŨ¨ãˇöh Ōöų˜§ˇŒđxŠ‚,¸,21ÅE9]āÎ5ĩWėÉāŒõ sÅãÂú‹´ÄĨŅãb¤0éŌŗü;"'úH´ÔQlĨžáÉYO2O9úu­íwAm[LkŽ¤r6fd]Ň÷•TŗđĖļ’ÄXēšˇˆmXYUWqØf¯š<ļNå]fmSAžöâĀĸ,ˆŗ}ņĪ~ÕNØ%ÆŠ§Č*IϏ*ĮqÆS‚{õ­›O G§iŗéâōâh&ÎÍäf0sÂņīŪĢ/‡ ŠKicēšVˇˆÂŧ¯*{=‡åSÍ{“c|=zöú>›c"G–Õ¤F-”Įz쉖[ 4û.n¯#gnQG'ņôĸĮÃvņX؄šēė˅uqš•ēƒĮJ´žŗ[{(RiƒZ†T8ÜTōAãU7ČÕhVđœĮūKhŨÚ2× 9_˜Š‡FŊ• ˛ęáŨĸq#LÄŦŽ=đ âˇtÍ-ĖÚÁ$˛E¸˛™X3ÉũjĻ› }‚(įiVr€¨ÜI9úf†ĐŅ–ž ¸XšųUÅnģ6ī›;ļnĮĻ{UĢ}gSŊŊœÁhĢitI]ÆIPFHô$b¯Â1Ļũ­îrōyĻ!ōˇ{oJš= É/ ūQYn(„-Œgnqš]fbCĒ_ÍcŖÜŨ‹0×S eU$¨ āŒô9Š­Ļ’įHÕŖuHöM<hāŒg?Sšŋ…gÛy’9|ȁv;Oˇ<jv›Ĩē[ßG}lˇ7Iå~C€3aúŅt5t`é‘xė-‹ŗK¤–ä îP Œú`šMūętë5­íļĐ`ÄUÎsČíÍtvē.›-Ÿ{T;@Ú§¨•5†‡§iŧÚŲÃ+€ts.Áb+ÉQtۉa™Â*˛Dģ›ßšŦŸęq.‡××ŌJ~Đ`ķ.k)-ōĄŧŠŨ[1 ŖÛŲ$pĸ†UFŽNqõæŖĶ´{k ;ė“˙¤1—Îw˜dŧ„įq÷˙ ZX ũ_Qû­ei5Āĩļ™\™Éæp žR įaŊŲ é6đę&ÎÔËqˇ%ŋ‰X¤Ž™ä×vlU”]Énƒ¨°ˆÍWs§ĀļÖŦ"ÛräDģAW8,}ēM?!3žÔĸšÔ< †sy 1ģ66ųĘŦ ãÜ Ų‹_˛ž(Ds#I3¨Ž&á>Ŗ¨Åkyj#(…UTpaY÷š…ĨíŦĻgēb‘”w g’:qK}ä#žš3$’OrēĐÔ=žæbߎĻŨŧįÚĄËhMj§‚R˂JõãąŖ˜vk{%ÕŲ„Å,hģ[{ŽdöĮ5ee‘Oß aĪzŸtQÆŧáq÷M"yJ€J îHųpJōjjeNĶ‚sŪŠÉ¨‘â }:8wFöí3Íģp@īšŌ% ųž€ĐėŽÃ,qŽÕ*ŗüŲm¸ęhdUdÚŲõ÷Š0…™‰Č>”,ęß6ėŪ¤`ęF<ũ)Ã{ß#Ÿáæ—ėrÛ¸Āɤ ¤Æ˛`€ ž”ā›Ų“ĩAã#íUŨķŽqOŒaJdā•B!XŪ8ãŒ~”8rb,#銚DMņ€N3žiĖĢ 6įŊ +Äe[y Īf§síڑ?6įÆqךlm´dŸ˜ôÅňbĄ/—SÁĪ5#7O”ÖĒųč÷MĶ$°ã  ŊKNŋŊÖ4û˜å‰mí]“–%H=ũ fËáũB8 x.ŖûTwÍ4&’¤g?ŽjĮ‰õ,%Ōd‚yc¯„r*ŒīR #įĨX›^ą{+Iaš‘ˇ+"XļpTƒ÷Ĩ=@ĖÔ4=WTŠ8¤ÔSFQÉæŨ¸ ūu4ĢČĩ+‹Õš;ˆ$EYAŠÎ^õcūM4\<),ۖ%É‰ļŖžÄ㨊$ÖíNŖö8ÚgemŽé*­Œāˇj.ö2=&ūīÂæÃP•ūŌ䔔Î 6PˇbF$ēĨquÔú‚‹øHō掴.`Tžsõė+WUŧ†ÂŪ)&–xÃM…7–āôĻ}ę ŋ[B'O.ā˜'HdÄ} céČæ‹°-¤2ũ˜GpÂbc;.7ņÉtëY–ži7gö…ÔļrFŅĮûĩ=īŽŲĢ'ZˆjsYgÛYļ-ARŲ'=0(ŌüAiĒLb…'C°J (ÚĘN2xúRÕ!čA†mÆíJíÚâÔ[3°Oē3Čã¯$QäK}˛éš;Sj¤ė?!ī÷zđ?*Ŋ¨k)eqö[{iîŽ/5Ō>D铒*’øž~Člí..ž×ÉL mÆAÉķN툆_ FEĒ-ŨÖ"ĩû#`<ČũåVcđũ´Ûŗĩ˘mūĖ“å1ãų~TßøIZK5-4é§[Äwc¸)Œ)äBy¨[Ä kÅÂŲÜŋüL>ČÉ$€áŽ0Ã'…įĨ,>ŗą>dwĖé @ŽfÜR3ØgŌ›ƒonlNûŋôXŒq3ø[Žxú~BšįÄâŪ;›˛<–vŗ˜g™XeHÆH^ādQĢx4k84vĶ RMfĀŠY“‚sׯZ¨Ú œqÜÛvææ3w™™ļt7đÔÚŽŗ&™yfē›k’PÎŌ`#H{â ˙„‚õ–Æ8ėâ[ËØšeŽYļ¨UĮ|u9b@_ė>W p Py D͟,õzĶĄŅtÕhäKyˇÛÅä!2>vŨ}ę_O¨hm­næ2†ŽWÂÆc8l2y"}¯ŨéķÁļq‘ŖY?~3—m¸QŒsŠ5Ø4&M LŽōŲÖÕÕ­â+°ĢÜu¨lĩĪizëÜx”ÂڒÜÁčq)ē ƒš[?†)Íj%ą6Ĩuoi JčK<ĸ(Ā8ÜÄā öŠ •î"ęÉ “,Ĩ7†zäv5‡âäŽa¤Ŧ˛JÚՏ—ģî€rN?k6ūúínõ;wšŊ†ū&C§"+"ācŖg9¤Ŗu ^ĖėŽˆÛ°Ą5icĖqsšķŨZWū×ÕˇĪw$É OŖ¸U˜8<ãŠē/¤ŸÆ6ĶyˇS$‹ōâ.†#€IÆ0T÷Ŗ•ž§wŒ§,Ũ~•.ÕŨ…ôÕVfŸ…FĄTm•ãš”œōzu9¨ØĀ9ni `Ą2ĮŸj„`đ~õNę ôĪ5m$99¤R š+8ëÔÔ*Į´õĢR*°ÉÉQéUĨŠõ¤R*ĘI`ū5B@vã=zք¤ĩBbˇ bš§`GØâĀĮ ¤ãƒTlû XôĢjÎOäjĖŲĮYŽüĀžkÅ$ö䜧oiš–0J•ČÆąŧ_ĒZȝƖSÂĒ;›ĮI™:ž ´„ūüu˙qj} í×-īũĢjũ’Rüˇ_ũTúA]ŗ''…˙Điô:^ß#ĶGĪ…P  Ռ*Ę=3P#m ČįĐTé!äxūu’8XĢ€0ú z+3sŊi…÷&ėƒĮ2nÁSŽMR$€­ō’Ų'?ĘŦP2TŒ|ģŠŒ ÛķqÅ;.sķ/Ž)’,D÷r@ãšF*ûŖÚ\ņ͊ ŗc2; lM´¯Žųõ  ˜„Į9'˙­Hd#’0¤zS7î$—Å<Į…€Ēōr$īƒéQ™Iå<šs;? ƒÛ5ŒsīÅ.€/œĘŦ$<Öš’‡ķt¤ō#,Xŗ|ŨŗLŠ¤ ą,s–41ĄŽĪŊиÁõnjY[īp9įšĢŦ¨Āžs܎õU†ųžNAHĢŦj×mŊœ6aeģģ”C ˇ@OV>íXŠ;ë[˜g¸Õüؖ6ķ÷Ē€Hî08i5=jpŲÍÁˇšŗK ĄwzGpj)ü9uĻËosĒ9ķ¤Vbą  ä¨īī[+XÉŪ䑸žÂXn%W—Ę‚A;?Ö1IŦË`D×w„ΟoÔ\e”€ņĐr Yļđdv–ËÛn1ҏBČČÆ9ΝZ–?ZGŦOqpđÁr×AK–'€}…Uâ+2֟ĢÍ}Š^Yˆ"ļ}ž{ũÖ8Ék.]DÜøŦė{ša´L‘ÛŋĘ]ŽW##ø^ŦOāj=+ÅWzƒéÖė°$—;žRĒ9 ÷°sZōøcJ?fSaKpëĀŨÔũ}ę{/i:mÂ\[ØĮ‰–¸Ģô=ũOZwˆŦĖM|I¨øĢOą‚(f{h^å’cōįî¨cƒĮ$ūpŗhōØiđÍ˧ÚM;ÎÃ䍘õĮũôŽÖ=#OƒPk䷉nåyqËLŌOĨiŗÎŌĪe ŽB–,€ƒˇ8ĪĶ'ķĸác‰ÔŧMŦĒ‹w´áĄ‰ ųØĻ÷9=Č‹ËËø¯ôԊâ9ĩ­VŲ’ī#˙uO=†kē:NŸq+Ī-•ŧ’8™ã:u#ZÚ¤âāA—o–%Ø éŸJw]‚Į­øÂúÖ÷TŠ T p#Áįī÷>ÕĨáīÍ­MĢMšĩ€Ä°î@:™ŋˇn+Ļ]:Ų‚ģZÂN˙0’ƒ;˙Ŋõ÷ĒķOŖØ\‹BĐG$Ŧ”ƒŠc€[šõĨukX,qđ‘kZ3\[ÜF%ŸPaXFŅ}âOĻsZúˇúˇ‡ŽeûTŠ4͞˜ļ?”đęŪēČĸŗ*a#TOá 0? ™VFaEĶ[Ŧy֋su>‘5ĖO~EĨ´ĘÅËy]†s×n1Ÿz} ÖėžŨ$’^ÜBv…Úvū;EIkĻęvZÔ‘ÜĀtë‰üō\ÔĶ­Gâ=&âTŠ+øšF}€sÃvĮëJž!ԌÆ'ēc"H `cmĒũ8ĀÍ ą’jútēžœ-ã‘bs"8wMßuƒtČôŦģĪ ßÍ%ú. ‘ÅtŅ9&"ĖqĶžœV“ëö–ī|Ī;ÉöyR/)a9V`0Ŗ›=jí{u˛ŽņÚDW čw’NیæÄT]sŠj\\‰-¯ŖXž5‹aqœįÜĶ´6úÅ;@\[Æĸ(”B… ōqĮj‘ĩëa R8y•"0ļķˇ¯ËŒāzÔGÄļ+i"ķnČo-b‰‰%G#ØđxĨ¨ęZ$Ōj_ÚVˇīgraōe̍9čzĖžÎ;Wđū›i{öm‘ÎĸF Y˛rŠĪãZ×>%ŗŠââ†íM¸F•ŧ’Uē})oĩ* §–KCpÖǝ$Ģo%O “×ߊjā  ‹w°{;šb{=āĄŧÅ|=ÉjŦžûLrŠÔ.Ix/ U^cq́ųUĻņ$K¨ũ†+Iåų#“Î@ģ9 7'$qUnu˜ĩ;mRČÛȑ­Ą‘ €ƒ"Ã véėij×~[…ēÚW ]L“6Đŋ+&08•G/†m¤¸™ÍŨČļ¸p÷ĘãdŒ1Éã#8ÅTĶĩ„´˛°‰ÅÉhôąrÅpU€ ž:–­7S]NĶí6K Ŗp`G ƒīCēHMOOˇÖŦĨ˛ēbvR6㠂ūU_VđõĻŦb35ÄrÁĖRBÛJãéĀŦČõĸęēô˙dš[_>7–HČ" PdāœõÉâ¯\kė“Ü‹{fē‚Ņįu` †¯ĶW[SᛆŨí1ŧ.Ė“G)K}âO|÷Ē÷žąŊŧŪísˆĨ„ÍŸ”åO×ŪĨšņ3 Š#ŗ˛1­¨ģW3ܧ¯§&¨ˇZŨĒĨģ"ËbnC'%rĨG~œŌŧ–ŖĐąo Y˙ĻĖī1€ŦŅ™ĮČÆqØāUaáM:ÛE%Øaˇ.× IOJҎÔĻdģ’â&+rFíÁƒ¨îéŪą,|UsyycØáû5ņ;ÍË XnÆH´.f Õ˛ĶaĩŌ ŒBF‡g–žcÂã§>Ԛ6Ÿ$8°ŊU- =w,ˆ8˛;UKO;i™ŗEKšåˇcįgc&îœrچ-rxt™į†ŌÚ[Š‘÷Ęv‚¤ķęI# õĨfpéĢcâģ´ŌîE”PËČQw`ާ§Ķ5Ŗ‡4{{…– 6$8`AęĢúNĻ5MŌũĸ™b댎ՅiâAģÜ%¨ŠK÷ŗ*ŗHût§¨ŨiŪŠ;Hî­mŖ&Ūۜ<¯ÔÖĄļĶítÁj°Ã ’/a8S“ĶŸRkššģžãHW’XæMePųjB’$'š4û­gQuؑ-k;čávōÎĮV)‚'æũ(ŗasJ(ô‹ÕģŌĸļ…’ŨĀ–' ŒƒĶģUąĨiâŪ(>ËČ9Dc}…QŌ܏k€`ķ?÷ÅUŋÖuŦMg`-‘mãI§'æÜNqėĸÎāYÔgĐáx,oÅģ ¤o pL š´ŅÚ@ŅHÉ0*ˆÁ@Áė ×Ē]HĶëÎĶFģ.-ėn ™ëųÖÆĨ¨ĪmgĻI äE¤ēŽ7(Û"“Î=? n;Íá˛meŠ%<U@ÆzÔq[Ã-Į˜ÖęX úõČÍĒŪÁq}vÚŠōíõ„BÁ6”bš3ÜķėkSVÔäūڇNËa Āf)PYŗŒF8ęjyXėņ,A j#<ãęŦšzͨÅxŌ’‘!XŖĮ ĮĢ~\W7yŦŪ+ęšÔÄ3YD†Ú,&ŲōšÜr2rxĀŠė¯fŧņÅs{F…Ísŧ¸ ēģ*öEÜOĐ š™ÜŪôôtÎījÚ:~9Š@pģ‚(=…2C*ä(Ũū4ō9ëQ”’8ëÁ…84ŦTāü\ĶÛ“ŨM6IL‘‚tŨÛ4øĨķw0û āßjGÚĀdn  L0IMÃ'Õ&õVåFŅĶ֜bíĀ\ú vãˇ'zR@1 †rƒŠĪĩĖO´ÛŽELĖųi>ÎŲߞyųsښ\ÎÆMĨųwR™JÆHŒŸJ”[ūōBŲ îŲž,Ŗ('-Ԋ–402°ŒŒv¨L€°\gæĀõ9; 6 e–`YŽĐĀõĨšE]PšŌôw¸ˇsšU›ná“Ëcž*ŠëÍĸŲÉuĢjlŠYŲ QŒē`ā~5kSĶĩ™ĩT›NŧmĖ+…f“’p=ąT—Á†ŌÉŧßĸu1ƒŋ,#?wĶé[.[jbîö$ņFŊö]͌2Č×2ÄyJ~F|m܇­[ÖfžĮBŠŪ9ˆŧ.Ū7?3arSøU Ÿ5ÍŲ™õ)T5čšØqí׎0 ĢW˛ÃŠxĸÂŌ.ËGiįb„(!H^zŊOM Hm5KM:ëû&ÚîââãË$Î\)“œž:vãĨH|Tņ[5ņąœÛ<ˆą¸o œ7\ã§yĢKáËHNŖ3ÜNđܗm˜&īŊŒr-<5k Ĩ¤777 m(”ož@‚;ŒEâ-JŌxĒDģļ´{Åäį&ƒå.pŋ\R[øĒīĖÔĨžĐˆ­æđ”p|Ų3ŒķÚ´[B´o.Ąū”e‘ûą´pOįPÂ!Ļ‹wĩ-uąįķŲüߙ›'§ äМGf6īĒ?…ŸSļ@nwųi7÷íÜfëú°ÔcĶŌãČY\‰žUū÷nOĩĨqáÍ6ãLŠÁ­Y-ceeDbŧŽ™ÅNē-”WWŦDK0@ėĖHÂäúš4 úxēKŋ 6Îx9yË˙wĐ}xÍg?5Ėk Œ"79&CĘ(ûŲĮ žũûWGkāNœOĄųmc+sÔõŠáҌB6ŗ,C‚įî!Č^Ŋ=}iŪ=…fdÛø‚MJûFofKgŧg2œ&ŋ^õ˜Ū4ÔŦ<3owqöfēŋ™žÎ¸ "gŋ?OÎģ#áí3í“]}’?2H×Փĩs§Åap…]Z忐˜Ë3FTLŖņޝR°Ŋ{)cĶVÖ)î˛ŗÉ&Gcp#Š}(–×NĶcĶėaķĖfŪÜēn,6üÃÛ Rē žâmCQšÎ7?Ō.’.%„Ŋ9=˛+¨Ķĩ¨õ‹C5˜%Vo/,„GPAīVáŌí-ĸ_.("tM…‘Bí_@{ ‡OĶŦôëo*×î.ĖĖY™V$õ46"č’ãoJX î'~2Ič)â09ŪĨˆĪĐĶļ(ûīÎ=qIéEĖd€2Ųã&› męDgq˙ÕV7F7äõÉ Ā´šКCįf= õVcp­+G Ï^ĩq„[Ā$N)ԈŲHcˇ‘šĸĖá%R8Éb8Ļî—2(Œ”Ú>fīVÛËe$ļiÂ4 2ŸC@ĘÎU§dōų( 8õ5 ”pŨ‚W*îPG'ôĻ—‰#*EÄP–wŽFÄg”Oj¸dmøUV€#'īãĄŖË ÷ųHūt\,“,žXPlœ ņV3ķ €H=ęuYPnÁ'¸æĻbI!ŽäĐ1Ŧų'ߓL=W Œϟ=]Bc‘œœSØáK7ėJæ›}u}§ßYĸ´ļR<§}ĄÁ8>ĩŸ>ĒËķyë<ڄw†/3åE\wĮ$íįŽõą­ę3iķémą,\ˆ§Ū;NAĪ*ęŪY˜Ä­{ YœGfėŊ=„sw>ĻɨˆĸļkčîŖ&SČ]¤ƒĮ_—õЧŅ5YŖÕcY-cK˨î#9$ŽŨŧ?Ų°Úޚ–ŌMöØÚ“Ę$ØîņŪĄÕu!mifmeM÷ŗ$Q97%‡áš.ÃC6ëEŊ¸mEœŲH—¯Đęß.ÕĮcœđÅKsŖ^O´Šûũ6ÍŌT™ÔėŊ˜w8ĻÜ_ĩĩ´sĮŦ5Åē_ŦR9A N œÄõĢ÷:å˜ļI ÔĸgXƒ…ßķ÷HėMc*Ü隤×6:‚ĪmöÛrčĘQ„LŒŽšĪš„č7vĻÅíîaG‚áîd-!™ķ< 1­ŨFō;:{šËeØøíX–ËQŨ^ęŊÄÖbáār*œrŲÅ ģŦmäŋņVĩnˇA khRTŲ–*wt=įÖ­\čsĩŨīŲoD0ŪDŠ,mėavåNF8į5FMKN°ņj ą‚æČÉē(rOˏcž‡ŊkĮĒÛÜ_Yy7‡mÄ-2¨*ę;–#ŒPīĐc-´“oŠũĸ–XͲZŦF0p89õæŠÛxVî nMa§ˇ0JÆÜnaĪ9Ī^M^ƒÄēEŨĖ‘%Ō—…<âJ…îĀ÷Ŧ;Zî ēĄ{ôVģ#‰ĸ>\ŗ``u$Žyį8Ą\44Ŧ<3 XĨœęđÛ5ĸŒ đAWôm"\¤šc+›@'ŅGT]ąˇģŧ‘Ūå#‚Ņgxž=Ģ´“ČĪ$öü*ũ†Ąöë3pËFŲTËãŪ“nŠ–{­Ba~ŅÛ_mķĄōÁČ ŒÛ"™qáØžæYĄģžŲ."Xî#ˆ@Āę88ã"´õ BßOąT°UU.Į€ zšĘ>+Š1~&Ķîĸ{4V•.JˇB0yéBģ@ė%Į‡íäš{˜îŽbj-V4#jÆ;tŠ­ôK{KĢ;ąut|ˆ>ĖĒėģY=øëĀįڟ˙ ´3ęĪ Ä,Ņ]™ą†VÎ1ƒíQ7ˆ`A4w–ĶZ´QŪ€C'r0OåīFĄ Ũ;L[}SU™öųWÎ ‹$āA'Ķ9Ŧ‰4ËMSŅíėžÔa[ļ‘âēÆĨg p2GSRX\4ž8i͜yÚnā˛`nųÆ‚{c­ljēĐŌÂĸ;Įš<É́Œõ>Ôj˜hVO iņ^$ą]Ũæ+ƒ:F&cfÎ@črjĮü"šL‘aq YÚā+ ;gqČĮ˛^ųô=g^ŧ†ĀĪhZbŒ( Éŋ­uIvŗÚ‰āĉŊL‚8Ąļē‚ąRÎ×MŅíbĶ “ËC’‘<„ąņ“žQĶôh÷Z~õa¸3![†aæw=k"Ōā^IáĢÃn ˙HŨÕ[ŒŸĨMđĶė䷂(ÚâįSž(•ŽÕq9'Ķ˜ĄéXû8…†éüō ¯÷˙Ŋ×­xkI•§[Ŧžsų’–få‡C֓HÔĨŋ–ęŪîŠæĘ@’*Ā‚2qUßVÔ¤ņÕŦ0ÚĩĨŧi!%ˆsģ=;vŠÕ1č_‹Jĩ˛šû]ĨĒyĶŗ>~b?>ÔËÍĮR¸Ž[ģhåxÎQ™yŌ˛ˆõcĢŋŲí<Û8Vd(Ŕä‚{‘ƒŌ„ņí¤×§Q‚XėÖî3GTįÜu§f#HøwMķĻ—ÉuĮúŨɒã¨Ԓi6oDmãxâ9 `…ú qXīĢk6ú‰ļœŲ´sYŊÄF4o•†8'<ŽhĶĩûÉ5 +B-îtö¸aˇqˇžzsE˜#LˇXˆōbŸs,|˙ZuŅ­ėKĖĘåC¨8úfšˆŲũœĮË×§4r°ē:kč,m­åÅēŋŲ”°o/, zwЌﰨĶ,b™æ7LcÖ˛nõš֗ŠHėîŦį’Q1,¨ec¸c#žĩŌĮfžQ`€ČÜŽs\Ė×W]6žÚŸŲ–+â­noŒËžÉļ¸ā&NŸîTš c­ŲœįžŖčiē€O&ëĖ˙EĶôbWY˛Āį?ŌĢėfz|k•-ךļ[øķU#, €ƒžĸŦ ã˜ÂąôŦ‘Å"N¨R=IĀC—öĻeÎq€E!SŊAā÷úSd ŪqŠTÃ!?Ūę)Q’V ã#ƒC|“Œ†Ĩ„ņž' žFOqV°į3Í(b3×ĶŊ1>b2Đ¯e<¸äŌ(@ĮQųS|ÍĶËzûĶ“k1!øôÄ Nvādt#­5Ĩ vŒnĨ(ˆIũėô¨åےÁ  2ĖšÆzPƒ.ōŲHéīNōKK‘!ĮB#4ć÷„<Ŧ0Ŋ˙:,| ļĨm{%ôōΝ+6îfl úuŠ"đ…ąˆģ¸ķČÅĀ2šæN{Ā§hĨëOC>‹qŠĒ2E“ržųsŸåX–šœV7v“ßš¯įä"O‘‡Î1“€ėMXÔtË[.=NˇšŨpȝ!BĘSp.Yēg­Y|1a6Ŧ礒ο(Pąg ƒƒŒry4+ĻiÔM­ÖĄ!š+wt–p$|WåȁķgōŠO‹%‚}HĪdËg`yĒŲ//(đ!V#đ„iû‹š–+ƒr7IÕųĮā3ڜ|+Ĩ˜īФåoeĖŪiÎārôÁĄ8…™V?ÉsĨC0ŗÅėFÛËy@PÞîŋ>*MCÄ7VWöĐX™¤‘‚īgÚš'ŽOôn?éVöö‰ąÖ 3ŊUå; Îw7ŠĪ95cQŌŦõ[uŠS*"8‘'(U‡Búš^íĀÄÔ|c=Ŧ ‘Y‰ŽĨšx-Đ1ÅĀÜO㊔xƒV}f{ąƒ¤RI#HpŠß{?íuĀ­)Vū#î{c˙­[ëW^Ԟæî˛ŗFÆA´g?1nÄF>•Đ‹  Éo É €'ŠúŌ >Įɖ%ļ‹d§t€(ÞäúŅt#:hEÄQFۆ†ĮįVüÅu/=~•{xV8ˆüĪ–5U8GOAO•X†;ĀR¸ČæČį‘U€~” g=˙Ĩ:wōĀ>IäŒāįĒöÅuj­—Q…1"9gÖŦɆ=@ĮŊV‘ßs‹åV=;ŠwڏšČa%¸ J ŒäûšnĮXHļ™JŽĮņ¤1Í+}‹–ę{ãđ¨ƒÁJ¨ldņŪ‡ķŖâ#!™Æō¤|œrON)p¨[sŠ לšVy#¸ÚlÚIãŠí@wĖK´|ų'Js ã#Чī°ö ‘ēHŽßŸ$‚GJ—!~CŒį&ĸšuŽxBōo$omN:šŸ`rXXāŌ`G+îÆÕ;ˇdūTnÜģČĮĨÜÅöđ1’iė›#ÁäŠ=į”+ Ü‹BÖ,ŖĶžŨėÜÃhm¤ķ NG#jŗkáÛĢYtøĸž†ÖŽ@†ŋŪ# П_Ōãąkŗt>ΒŲĀ<1íŒUë;›{ČâŪPņēå[‘ĶŊ °9û^-ŒšmÕÍģÛ}™ ‰â‹l˜<ĮØzS'Đuk>+;ŊZaōü†X02Œ-Ī'Œqë]N'å1Ú˛7`tāVŒzΒWđ›‰n#2§“į(:ąôŖTŸđ‹<æöKŊJY…Ü+_ģЏLTĶxjK¸$kûŅvŪAˇBP&OCׁĪĩ]—Å6K‘† ‹”ŧW1bĪŨęĄãĨ:/X]}‹dsĩīōÔ§ņGĘ}›Ŋ…ĄŸa \ĮĒÁzúÄŌÉoCDŖrdø}jƯá˜ĩk“,×w1ŗE卆āyĐ iÁ8įŒ˙ZriT>˛ļļ˛AwrÉi!’,ËŅ_æ3U—–/k-Ąšc™ūĐ$ķôsÜÕr˙[k . ģĢ ÎĢ,aÁō˛~ņ=U9õŅ<Ë&Ÿ.Á~ļęÉ6ų°ŽŖ=¨ŧƒBū™¤ÃĻ+Fy[2ŧšœŒ“L¸ŅmgŋkÂdķdO)ÂČUYp@ČĻĄļÖī&—P˙‰QÚJŅŠIC3oã×5gDÕÆĨÉ{eŠ[yÚ'U8$rãIßq• đn•l˛%+$" 3ËčyĨŧĶô]5–[‡Š1äũŸt˛2w“ÍA¤ŨŪŨj÷͉_M%Ŗ&U:ļÜs´cõĒWē’ÛëúÅÜ -ŊĩŠųkÁ',sôÉ~õnĀ4écņĢX[Lm|‰äßš61÷N:Zš§éZ3ČÆÍb2چˆā“å“Ô`ôĻÉŦ^A,úzÆĶNÛåømÊĮLcņŖÃžzę:â\„iÚ“劋ëMŪŽ#žĶ|=ĨųBkh#/VTˆą+žø=ęũՆ•eĻŠmáCŌŪVqĻ1œVDúŖišˇˆuvČbЉ (9ûdäÔ÷š•ÛÃĒi—‚DšsĪ Ņ!Œm ‚O~†“¸^ÆÅĩĻy§Ā‹oļĩŖŒĮōāō÷Ģ2č–3ژÖ$>ņ–6“늊ŖĖ°xrÆa`–‘ļŅׅ˛ôßjw0išŒĢ[ßĖbō0ŅõÁ<ôæĻÎėgC>kâ˜Á OJ¸Öģxĸ$ )Ú2+’‹Z×dŽÆA5 ûEÜ–Ž­!J–ÃŅzTŋÛúŖAc3K}%œŒ"Čr uę9a“ŗĀŽDÔĩņ„ëōE3ÛmŒÆëƒ¤t"ŠF÷v;ōʇš9ĪĩKĩv“Čæ¸ÍCÄCRĶní‹Ye…åˇ}ßë9'Ž:V–ŖŽKaádÔ-â0Š2Ą‰îÅŒW7ŲvŒŒõ÷ĨX•˜88q‘øWũˇŽĮŽZXOooģ ę–Ú¸;Ô°8ČĮëN&ÔZîæm  ķŌ'ÜX†Ÿ˜zéO‘‡1ØąÆG^qQôfGŒ÷ŽEüMt,onVKV’;x%‡#oƒ“É­ųõ Úæi’Geš1€yôíIÆĘėšqÚVØ|ĩSÁÁ=§Ŋ)‚rƒķKå/9f ķœÔ*Š%K{ŸZ͔Œ]^ûPąÕ,f 4ųæHĻ1”'ĪŊM¤^ÜĮ.ĨuyrÖ)#Üā)äįë‘øQ­iÉĢiSÚ´Ĩ]—(ĮŗAâĒ˙c <:tĻšũãFČyËu$ū5iÆČM3fi˛Û–RĖÂۀ#l‡aĀÆ3Í,ū'˛˛KĻxįŨ+<Š!!‚ˇƒÆą-|;­EŖˆMƜ&K´¸]‘ŋ)Î8súUũW×÷×w3Åyn‹weöy•Ô“žqŒ}jíČÔĩuâ[Xw#A;ˇŲÅÈļ#=éÚˆŦīnMŧk"ŋ&_62ĄĐœd~5M|;x14ˇļÃ:wØÛä<Ÿ^Ŋ3ړHđÛYÜÚ]ՙ"ˇ0Š÷ōĀį98č(÷l=KÉâkVԚĘ$’IüŦ Ę́žŋJ‹LņCŪKf§MoŅtIÔîuÎAįøM>ß@¸°Ô$–ÛR1ŲK1™ 1wÎ=3Í6ßÂÆėÕĩ9Ų'yĐŦj2[9ۓųĐšE¨[ëņĨžÛ)Œ“ŨK¤ UÔąä“ß’/Ís-°’ÂH ’á­ŧĐJJ3ÆQĮZ|~D ˇ× äŨ5Ōą ËļsÛ§'ķ§˙Â1 ­}tBŪžsŋ¯§LšZš—ˆ¤Ķ/§˛[@î°,°î“q-ˇhãŽj)ĩëĪí1e,Æ?,]2ŋ—āãœ{V•ök¨^ØÜȸ–Ęs"g„ˇäˇŌ™agú‰Š‰€éŧ{*/PÔÍ}jYlõgžĩ€ŲYb•gÆŒ`ƒV4;émî`Ō.-Š+Ûyöė$ßōƒ÷OĻGáWbđŨŒm}4‘ßn7 $„ŠĪ^;zqOĶô+6QqNōŦ~R´Ō—(žƒ=ōŖ@*jW˛Eâ=*ØÁ,Š6Ų[īFBį­f.Ą6§Šh7åcKY&”EŒ—æ6äöį+ĸēŅí/ĩ{ə횈‰müZŽžŌŖ‘$ŽĻT +V=ĀÎSÅ@cÅ­ëWv÷7ūEŦzyŠG€™ rW8Čü:qŠAŦkRųB9íą=€ģWœŠČûŨ+`øGI4Īl\eYØ 1ÉĀÎ}Ēdđö– ÚEļ8Œ Éû‡9^Ŋ9§t1ĩ+ŋĩÚønīîÃ-äLëŸŧYN9ôŖ›Ä"ĩn ~mžĖ›nũ ƒ×wņ}+~ķLŌ!ĶĄ6Đ­™ķvĮM}M}HŪ›žŌy…įëŸëEĐļžcxuxŒjn¤€y#ËSƒúÔZ&ŖsĻE¤D— qƜō, Ē6˛@z‘øW]ũdŲcUÎ]‚ŋëë×Ŋčöq΍­ŧ~H>Y(؜įqŪĐšv¯qq>–í|ˇęŪlAũ‚îcœ‡>Õ^ĶVÔŽFŒ[V(ˇË,rãådä‘Ôâē¨ôûfi ˛ļäĘČȀúŌĮ¤ØĀ‘ˆí`EŒ’ƒËPž¸ãŊ+ 9ģ-b[št!=Øũųž)•vá™sƒõãõĒZvĄ#6—3kH'¸žÚTyB ž=x^}ë­ĩļąx„–ĐÛy`˛Ģ"zÔŅŲŦ Š <ėũ(mÎø>č\é“Ŧ×r\´SË\îmšāįéX:üĖouļˇÔnŌKXĄ’(–FÆ{€ŖOÎģáqO1BFėNŪŦxÚ§ōҍŒ Ž´skpąÆCy ‰ÕÉ{-˜‚ ÎĖŲbCm'§lãĻjŠj’Ž’Š ‘ŦWŽ.$tܧqEŪq‘Đķé]Ģk1Ū.ž× ˇ… Ī' ž™Įj̝X\_ņXWː;Å*–I:6?:/Üz"Đ[čōŪęcx^O.f•QHl ú”S|4â}OQI!b@CȌŒĘĒą đ t>Š4˙´LÂ%–á÷ēÆĨq”~ĨždΈHķ€r3ÁīCcHãtŊ2k}JæÜے4ã#Zģ|Ķ'+ųc—Äú§+]ęS_5ļ&ã`Š&F0}sĮĢŅ$”[™ZTeUŒČĪ‚TüúûS­]n-c’!ˆwĄņ<~tų´ Uö™u{c¨K˜ŅĨÍĖGjårģ>ķã8éZúD7zŪĢ?ؒ kž^Ö^JŒõ­æšļ,’„ŒüĖ;ÍļķB+ÅģvĪøŅÍĨ‚ÚœvšĸŪŨëĪœwqLąĒŋ›°ÂTį§piēŽ“{;ëŦ,’CuInėČ9ę:įđŽŅŽmã˜BīČNB–ĐT&îÍŽ~βÂe˜÷ žŸJ9˜YËX^΍ęļH ē°[xūu8lrģøSáąÖVY'k{8Ĩ:xļˆ3™`sĪÅtņ\ÚÜxdŠEŒā˜Ø|T+Ēéŗ,^UÜ]ŲSOp=ũ¨ģš]#YkKŅ"Ûžhîc&RK2mƟ”`|ŋ­oÂēŦš”sŧÖëf`ųáPK 3Ô6:SŊ§ĮkŪ^Z*Í#$rFß+`žįĶŊ\¸Ö´Ģ0Ī}oĒîÚXgJĀ´XĮfë\ū§ĻŨj:͓Lļōéļá™Ŗ—9w#1Ž?­k>Ģ§Ã§G{įÆ`llu9ŨŸO\ú Ž|I¤ hekÄHäÎŌAƒƒ‘Œ€­%ŊĀÂŧM#RąûE¤P\Ld…P"äŽŪĢbĪMšˇÖ.īä牄öņÅąåJû“Ķ“Ú§ē×4Ģ9ÚŪęę’5Ā‚v†čIw¯iÖwp[K1yŽ*yjXdôÉ ûĶģbĐŖ{¤ęGYMBÆ[d"ØÁ ˜1ū,‚1TŖđåՃiķiˇŠ“[ÆŅH&\ŦĒ[qéĶ“ZãYĶcģ’5ŧâNōąąPĀgnā1œvĒŠŽiŅi6÷W7*H ŠūI€qģh‘ÍcŌåK_ ÜA>˜ņŪ&ËO1ŲL_}ä?1ëĮ^*TđÕÜ6ö"ĶPŒMis$žd‘d0|îgÜִڅ­Ąļ…įîˆBŠ9=q*Ēk6—`aŊp&•ãU0Ū#$|¸õöĸėZQx{P†=:#y ;™. Î\ļxëūĶTŅøfí­âVŋ@#ž7¨A$åzûšĐ‡^Ķ%–ĖFōˇÚdhâ>SŊsxāđk/SÖÔh˛Iou<Ąõnū\EYWp Ŗôã=iŨÜ4-Ũč×2jĢsg-¤“čĒx\yč{f —Âūtڜ’^\|]xĀۍ¤qÛũ*˙Lˇ†íížŪģ'ųsî,]€!T1īÅXģņ$6–&ylīTÍ"ÆåU#$ķŒsëKQčJšam2k ŠäēIŖŧ¸,AëĐ ¨ū´ÛM,Í,qZ•dxđ 2œ‚r~jĖėo­‹Ŧn%4”Î1´Î Éö­GUiwé×#4ŽÖĄĄ‹'†âx5ôģ¤PÉeÂągKnô'ŽAøV%—‰õ)ům­ÖîÚÉĖeˇ  0ĪlŽ•>§Žę1k“XéšqškxŅæi(mŨ‡#ļyæŽWpšxÚhļžUŖ x%’]ņ)`œõ#žĻ¤m'Lļ´%ė-Äp;LĐ ­ŨžŧW;­ĘōÉĢM姟öĄ vAŽO5­â™Ž×Bĩ%‘˜ÜÄ.VRy|uĸÛĘÛFÔáo˛Ų@Ęŗf0ūŧŽžõkûKûSHt›`ĖÛËų`’Ūĩ Ū¸ĐëQZ/’Đ328L–\.yĮj–ÃX‚îúKtŽíp›÷Ë DëĐŪĨÜ Œ•N[=ų˜˛§Čà y5w“†<~tDca•ÆxúT•bP aĘō{žôŽÁ°qĮQŽ´ŌÁ—9$éIž}q€)đ ‚Ā‘ÜįĄ¨H;Īžiōā‚@ŽôŲ{dÅ vÆ@öŠ Ķ$š pqīQ;fRüĒã­&1pzUØÁä}zU†îŸ‡ZĄâmgnŊ˘cąĢ:c %ØŲۃģ¨Ēž'mÖÖáŧđĩRÜ֟ÆŦc_UPŸÜ¯ũs¨´÷dŋąÛAQŸø§^ų„€2¨#‹€;ė˙õŌéNĨb@,ALgũúއgCÖ!u  JŽkØ­e !Į™Âœį&ˆÎæöų1ŨåˇĄ#šÉ{%\qŽ)X„‘Xœ’:S3¸WŽ´øØķÆp*‰pÃŽqŽ•ÎŲx?H°ÕQŽ)špIUwÜŖ5ŗym%夰‡hd‘)åOb+…Ōäņ6šėĶ]ŨKudžZEà ÷ cœE\Sŗŗ&VꎎßÂ:U´“2ķ4m“p‰[¨_Jŗo§éķčīĨ#4֑nÁؖv΍õŽvĪRģxôfmNí„ķȒHmv0 ô\…ŧĀr=8ž‚ļ´ģĪí .;ŠZža“r ĻŪļ73^Û˙6XÖ'e›o Đđ:˙‰¨ī<7øe´›@’ZwbT–Én9''4´ Kž¨ÖRŲZÚĸ›ŲJĄüƒ$œuātŦ›]sSh#K¸­„ƒSûģA‚2æļįĐíŽôë[KŨķpĨf UÃĀŽFkIŅĄžãTĩš´ģ6ŋjYĄy™×8P7ęNAĻŦŽŗq6wöŖjv]KhÁÚÁAĀ Xž˜ÍGĩ{5Ž™†1ufō43ʨĪĩO…tqĮö4uyüũĨ؍ūŊ}éÚM¨†Dļ1 ræ3æ0ƒ÷ģã{ĸÔÍĐŧIsu`—‘ÛŦˆûBg*Č2rI9šŽãWÕcņi‹•KJÕĩ9äŌ¤ŧÔcš)îfˇ1ˆ@ S~#ŋĘ8÷ސxwJ ŠtøZrūfâŧīõ¤ūĘĶ"1Į…Ē2ŗÃÖģpĒËąA÷ÉŦŨ'Nˇ‡QÔnĸÔ Á¸—2GōŒ1ĮN=hR íî‰qsq¨[˧ŧ—s܉`žÂ/Éę6ō1ZéĶĮŽH4Ôvœo‚I €į`R2FM^˛ģģŋžiíŪŨ,c™âetbíˇ‚ĀƒŽšãĢs"Ãe,ą‘æÎÂ˙w Rradsž´ÔŦ¯īEΞ-­įŽ7 ŦĄU•pT('ķ§ézö>!ģšl,™íãad~ ũk@ëf? ĮŦMy­n˛Sō–aĊ“NIíDīŠę0ȤŠUPDOl÷öÍ ŊAô:^§ ϜÃOŽI-¯&Åæ }Ø ôŨúTzŽ“Ē]ę‹ptø(n7ĖĄĘSiÉ럯ŽÉŽm­äXåšg˙V­ ßAQß][ÛF¯<ŅĮš¸Ū@žÂŸ3 𖕍=Ļ›-”6‘Oe “ėûŠÆx#hãĐõ¨53WÖ-EžË8L˛JŪČ nÆHõéÖˇ Õ´šR%[ëgy ĸʤąƒ4×ŋ°‡Rss2ĢH$ö¤›Lv{;ÉuųėãŽŨ^m28į.ĖvŒ˛äqĪãŠuī‡ĩv¸ˇk9­šÚĖÂĐĮ&FYF 8ô­GŸB^šŧ°-ė1í›täQę3Ž3éZP_ÚOxÖÉwĖ#2)ä)č~œŅĖĐYš~ąĻÜÜÅ´k)f’ugŨŧįií×ŊdŪx_YšŅíėEí°HŖxœüÃvOËø{WBúî•íšœƒ”+ŧ}áÔgÖŦ&Ч>žnŌö&ļ ᲠúФī{ŒËũ6îīðÚ#ņx§ŒĢ"ô#ųQ.rŌhŠlbōėäŨ"ą9cˇž¤ũkDëšYĩĸúˇ, álv4ČõÍ*{ĢxžÚ‚I†čԂ ãŋŊ`a'‡uŋ:Ų|Û5ˇļž’ås,H>˙1§Ÿęo§IlŌÛ#=đģĒĮ6ėvîk\ø‚Ęæ{Ũ2Æčũ˛8@PgęAčqUôŊAįĶ´ČfŊ˙LžČĘĀŽ\ä›=3ŌŨŽ+'đõôŋm•oQ&šå.b+ũĶ Į9<đ*-OÃˇúÄđßjŒŋ+ųĄ"Ú­‘Æ{{æŽhZäĻÚC-Ķ=ÛAæ7˜„8Éۑ†?Jĩo¯XŨMnĒeÛqK Uy4ŽĐô*ÛhˇVēĩŊĐÔŠ@°ĖžP` ˙ŗÖ¯i°ę˛Ü­ÕIey"8Į–‡ĸūŨ3YˇÕĮ™mʸ T*OB=G“p—Ū"›MēļVö†Vå—sŒŒrp?SKVėÃBæĢ§\ę—ö,.–(­fķL&=ŪcS‘ÚĢž‚^]UÍÛ$:’…xŖ@ `cƒôëĮz§Ē]Ú_h%¯Ú#{âM˛îWSšqÎrrzŋyâ+k(ī [NEŦ¨’āãčG<ŽiĢėƒA–Ú[ę–÷i¸’HĄû>†6öČĨēŅÚ÷S[…šžÖháhÁŒ) ¤‚s‘M‹^ ļ’‹{@KŒŠ\mŨœg5ņr5•ÅįöeüjŦˆH‡ŪqÆOįGŊpĐtž´XmEŧ“Úŧ˜ŌH Aå=ōyŠ!đŨē‹9Ŗ3ÆÖĄŧ°˛‘ģqųŗęIëUîôėú°:„đ֞c S“ĩÂæg˙X‹­YÔ<3eŠÜEsqyām.ŽSpÎpØ<ŒÕņäVpH4§YĻēęŽûAĪFäg…X´Õõ+~[9míĸF‘„ä°$væ§Q›ÃZt˛]ŧÖæFēڒĮ Ļ9ã]hļw:zXM=ēž#.xĮNkN[ˆČ xĪJĪŊÔa˛´žáØb8ËõúRæeXĖ›BĶ#¸×2Ŧ‹&âÄüĀc=jübe~ø>ĩĖø_SŧžÚîōīTld‘ÔgœÔæ'a—{P ǐyæ¤CæĸˇĖ äŒÔ!܎D ĄsˇqNĄļã­ RÃ,ÃéډC7N8 œ;íŊ{ԞጠŽĻšĪŗŖZk:ŽÖu4†Ą!wf mģˇ0ĮsS1 “ģŋ6­ĢÜXË=ģŦQ,¨öųœWqûŨš&ŸĒ_^Æ×ĸæÔ[o• ¤° lûdņĐ֕¯‡4­>tšļąŠ)PŽ3‘žŊū´‹ é)}%ŌXGæËįr0N=é;t‹Ĩëz­îŗ-ģĪh`„ŠwU+ŊXqˇ'ž{ô5BÛS¸Ķô{ĩˇž8ŧÍbXZáĪ‚IĪCŽÃŸZébđî—i,s[XDÆāŧâœ<=Ļ‹9íRÂ4ˇ˜†‘qŋŒŅx‹[JíŠh&ëTŠyIž5– ģK BGëYš-ôÖú6šąę͓z°ËČŒļAã#8ÍvSŌX`•,átĮ“…yãhí“SCcn%ŨöhÆN˙ē:úôĸë`ąĖØkoiw¨›ųî<ĩiË;Đ&ė”rŦ:cŋZRÖEä—vōędˇ6BHY{6zdv‡­uRé°M ąņųŊ^#ĩšëȨãŌ,­mŌ(âÛxĮē cŸĨ[…™ËZkF4Ōí%ē6–m§ŠŽP@ ›ØsŠd^"¸œiņęd˛Båæ\'˜á°9#Ž>lWY-Ĩš*æŨnDdíTĻžÃûR)Ąß4ŲxɌc r=¸î‚ÆTēÕÄÚĢ[kÛÛ$ÄĢĒ Ü)–į8ãĨ]đŧīqwvōjŌÜHŗĘ ŦŒŋ"‡ c#ųsW­RĮQ˙HKxŪX\ŒČŸ ’ĢÄ# ‡'øŠKi~Å9ÚēHķ•ōŖpˆT÷×ņ§v- ‹-PdĶ"ž[t íxœ–s´¨ę҃īQXxoVˇ{o­|ģ$–5&,C dķŒ˙…]ņąöwĩ†ÚüGr×Q#"IRĀxãƒZ7šžŸĩemĻCļ5ŗ1ī€94ŽÆPĐ´yt´ŗËpûļB…>€“ŒÔ3h×W:”ˇŅ^ ļn—–^r9ë“WŽŊ§y0L.7 ‡)UbK ŒdŽ•ˇ‰të™a@ōČcBđ˛€ãĒ’G^:Qī^ãŌÖ1Ąđ´ņZ^Āu ßjdy3åĮ9Ī|Sĩ Ir÷{ĩ7Qx#2"Â Ū˜Á>Ũ+V/éķŨ,ËēIšÍ Ū?‡$S!× ‚ۿ餏”-ËB#0üā€2ĒaęhŧŽ-`¸Ŋ•Ž%h¯Ą ,%G$.܃ۊˆørę]&kõ›‰™6<ˆšESœ{žœûVŖëViĨ[ęƒsE>Ņ…ųŲ›€õÍ2}ymbƒuŌÜĘæ8íļėGS×įŽi{ÃĐŠ?† ˚€žūf葸TQŖëųÕëŊ!/ôy4ë‰fųJ­*ļãŋéPÍâ…X-ž; ™Ĩ¸¸ko+hVG8lž*Ž¯Ēž§ac†XmAm/đ ō¤ƒĐņŌ¤Ä đ…ĩŨšUÔ¯Š<‰!U?:zqĮAųUņák7†ų%–âEŊ`íēOēãî•ĀāŒĘŖ°Ö47Q“KĶŦ& ពŠ3å‰QôíéšKoŧšKjSi2Åkæĸ!2),K'°qOQÃ!ĸ†9¯o˛ĪYO˜0ēbĻ›H‚MJK褞+Ÿ,FØ|,ƒúĶŽē’5ėfÚC=´Ģ–¤ۆTûåYˇ^&ŸėöOo`e’âá dķUv2į#=úF]‚ąZÅË$ģ]ōÄ÷ëUõk ĩDŽ%ēō#4øä žœûUéz!ášĮ\VnĢŠĻcs3š"(Ë={RÕŊ ļš‘"ÕĻŋÉēh|ĻAØ ¯má}UˆhÕË y_ä>ÜņŌ°| 5ĖwđJ˛–‘V}ŌđrGĄįõrĮÅē˜6\ÃkäŨ]ĩļØ÷nR3ž•n2NțĢjw~bŒĮä÷Š#ũĖC“×Ŋ2(|°žHÉ>ĻĻ`>c‘ÔÖE˛6fŪBŽIũ)˙8S=ČŒá[“ÁÖ~ƒī@ÁBûКrd)‘Ī&œęĨƒtb0;Ķ2 ¨äæ¤dr9ÁPËÍ1IFĀ%8įĩ=Bãq^įŠFį*Ĩ&1˛åy8ÁɨŒ„ĄčGķ§ē\õ=FcRF7ÜŌ)]Ų‰;OåTæÛ‘ĮĖjô€`ǜc¯ĩP•šžGŌ™E/ũK’ŒÕõčr;Õ 4ūé÷t.­%qVŒŪį3ĄøĮJĪņ iÆ8-Üc+Jßrĸāūu›â& iüĮ¯Ō­nkOãF%Đ-,˜#n!ãūRéKŋSŗų.ƒéķlá˜Č{ÅĪũŗéI§!…ĻN2ęG=jžĮJ=j3œā(÷Їę*¤<—ž:U¤ÆĶÆbŽ)ˆšÜH pfeI4ĒĘ‚§OÂ@ÚÁržĮĨQ™ĶË$?xÔwĨH–$§j”(0';>⟸ãĄÛÛ=é€ÕČā6p*@Š–o|Ō†ā0#=ąJ¨Ĩw62{f–U9į$RüŖ 2}hÆ[#­*‚GĖ@ŠĪ4ĐęFīQŌ˛.5åƒ]‡Lû,ÁæBë ÆÜĩ¨T=+įCšãÄęŋm CˆF1´õįëüŠÆŨDü‹zŊĶÚiWWm2$m ߜp2•UĶuēŗŒąŧžZŧŠ˛3ĪÎbą{wMęDįcēõõŠmôÉÍ “OŒųzqˇ—s.Cö?§_zj1žāÛąĐÁĒ-ĩÔŅŨ]ĀcŽÜJN~e§ļ*Ížŗ§ßĮ#ÛM‹îb­Āĩƒo ę $1’ú`F|ÁŸŌ‰Õ*vŗ ŽAÖģkļ x,LßžcˇĄÆėgéœvŦøG/˙°[N_ą†Y#*ĘŦĄ‚rŪ¤â­Ã¤_Ûj2-™‚YLÎXčHÁ íĮznÂ1ŽĩÕå…åÂË<7ĪŲÄ^bíL…!q׌įë]'öåĩ´W’7Ú$N"#į;AÚŖ¯ŋ5‹…õhmíHŊĩŽâš.l.1 9qëVî|=4wĄu1ŸöyĪn¸ëIáí&}#Mûˇ):‡b›c ĩIÎ?2jŋ†n-âÔŨô،„Ú´@ŋ9ųēã“IÛQĢ“YxĻÎęHÖH. Yãimä•0˛ĒŒœséĪ qL_ŠEŦZeāķmMÄn a“ŧUlŧ2ö‰÷ú¤—PXDëm„  Ž2ŧqÅbxiîQ°ŨAsĖ^K4Y@ģ )Á$3ŒtĒË ŊNŠĶÄLLļŠÎæXîmDÛŲՊ¨Ā;˛y#<ÔŖÄ’Ģ^Eö)H-Ę#°Ôs×oãKiᅲ}9ãÔ%Ũe‡”Sæ! āútÕ[OÛYÜË$zÛ ‘ã”3/ŨoÃˇ4ŊŅęZ>$šK ifĶȞī˜!‰÷–]Ą‰$:ÔēĻĨ*øqîåŗžxÂEu‘¸Q\šdžôû[eŋŧí[0ÎyŠ1ŒgÆ*{ŊÎķGN¸šœ€T¤Ŧų89 Žih.†&‹ŠĀŗiøQĒ´Ā›k‚Ėą&.§¸$õ8Ž’IŽËÎeL‰’Šōî#ëĶņŦŋøD G%Åũë^&IēYą!š}ĒûZژßOš]âHŠ2oųŠ‘‚}LhĮo\&“Š\‹kw’É”ŠRUĮ|F{zS'ņFŠjˇĸkTûG,˜•‰(ŲéĮŪ5{ū=)­f‰ZáRtXä>{ÁzSĻđÅ…Ų¸iÚâCž”ÄÖõŗŊŊ˜Z˜måxV5Č%Ú'ˇ5bOh÷yŌŦí Ų‚&aƌ׎*ÔZ&™ēQo˜îÛ3+ČX1=x'Š=ŅŲÜM?PžmŅęQÅ …€Œ#¸cĶ'ņZ,ŌąVRˇ\Vē.‰g§•“÷0+,’I$­œƒōå‰Î3[$`­¤ļ Ü;Š,€ãõû§}ŦFđ]ØÎÉä ēām?ˆ8ĢW:ÅÕÖš-Š_ÚÚEˆ”áĨR8ü_ŊŌt+[…ŋžHC’{’0ĀgūélôÍEĄŧD‚FeĖWCƝ×QvZÜēƒ\Ęú˛Ã*ɝÄoq{qå\ÚĒ€QFG×å÷ŽŋNÔ-5;s%œË2+”mŖĄA¨ŪÎŪāÉåÅÍÁÚ( Ũø=é4Ŋ.×IIV1ŪW2K+ž]sÛđĨ&˜ŌfĄÆ@ė ¨‹ŒnĪĨ(}ņ¨îy>Õųe9É=šŠĪøÖ@ē5¯œÆ8ūÛ÷ŗŸn•›5Õí¸ÔÖÎîâëNŽH32ļæU'÷[ž>™ŽŸXÔí´ËU–ę eG‘cų08įĩZq/’Œq=j͞%Ģŗ„žģ”Øęb¸ģ“O_ŲÜģ–ķ ų•OR1Š—Qėõģkwŧ–%†)ĸŨŽė’Ø'đâģĩXūbxĻîD>2hæ  äëĶ[Gw2ÛC$$#ŠgČüņ‘S^YÃ$ēĄ†æWąI­öųŋëNsģ]ØRŌ€’:ĶĨ9léCYnĩ×ĐisOkzö>OúDPŦÜT`‘××ķĨ ˇöPĮat2H˜KlÉC^ uÄ`Ÿ9?JËÕĩI-&ĩļĩfģ›w–ŦûW 2ĜRŋD+hO„ÖÚ+,î#‹gī7>ŅķqīŪąŦmŽ`Ô4Y›JŧYŖI#ŧ›hmä¨äœō3]V•{ũĨ¤ÁtFÃqr7go¨ĢɰwĮ‹Ų°ąÄYYĪoiĸHú5Ãũš{„’/+æØáļœÜÖŖļĶŽ#´ŅÅ΋$‚Úîmđ˛.U_qŽ0 •w†E ų#ĐĶŖ6D›ščæŽ˙NŧY¯ĸˇŅĨ—vŠŌJ6íųI“œđkJŪĘeš×´l­Ãn…ÉC¸” W¯‚k¤ŒĸĻB~lâĻ>Zˇ—æ ąČæŽaØäm4‹Ø˛Ų´åE‚ÆK{Œ:ōÄĖ|ŋ­G§é÷ÉĄ›%f6ö­ ĘYO•Ęío~nyŽšîbThÖPÄ`0'Ūĸ[ģ2$dēFÛō6p}ĄŖ˜V9(lõ4Ô&¸›KˆC4Ûų)"¨ääõ9õ5nŌßS´đ­ėW1ēOĩ„ )“fĐ$pOÍt?i…ԁ”9\,aęx“ÂŸŲ–vŦŌ dX㑗*xęOqUL¸ē׿]3íĖ"9–mžA^ ×׊ۃPŗ¸ēš…%[aûÕ<˙<Õ7Pģģ‚Rk¸’Æpv@Ęp§w^”&ÃC.įCՔIoŲd…ī…ŌË+°r7ÚxöëéZē…Ėú…žĄdņ‰mˇŠŠRv¸lČä8§ø›Wn‘pđÜAĘ&čŧ cėZŊ-ėVļ)=ÔąÆŦƒæcŒ’(ģzŒĀ}í ŗ !}´ŪKØÚŧ~Ļ‘4›­Â34?&ĸoQēd’ŋŠ­Oí‹ļŠvŊ‡É‘ü´`ŲËz~”ØŧC¤É< ė,Ķ8E^šn˜ö?Z.ÃC,hWÍŒMn¤j?lSą‰ÆI+OĄ$Wu%ˆMvĶ0HŽ#O9­!â]7ûIíZė –_%†ÆĀoBqŠ]ļŒj öŅ"[ΨSÉ ŖáŪ$ķĮ­ŦŠ1xzøG"Ķ%Ŋ}ŦĢ%ŧéŨÚršķīW[Jēŧ‚ÖIoOö”;ŠN€ 7vį§žsV­5[Kë¨Á2}™KngqƒÎsĶŦ˜õh›ÅA5ȀéÆBv° >dSÁâXh‰Ŗđãũš×ū&ĶEyöš¤( ‘ú~b‹Ī K,dC|ɛÁx NĻ>˜¨ĨÔúM+OûD˙e¸ŗ{ŠĨG•GA•čyÉĮĨZŌŧCĨËikmlĶ䍚'¸VųÕzáR(Ô4‡=ž¤ķÁ¨Ī´˛yĪlH,zŨ@Ī8Ē’ø_ËđôēSjq×ĒAÂxįŠŽĘpOPz☀č*S÷HyæĄd +ļzr=ęXÂL… JŽ­ƒĶĨ8 äS ;N3×­!ĸ˲†,@éÚŖ.8āūęvstTlnãAEvÜF{w÷Ē22Äj稌Ož=Ģ:N$u< ,i§÷3’“ZK&܊ÍĶĀØę:ƒWŖlƒĮzŗ'šÅŲģčsëT|JXYÎĖEiÛĘ~S‚HŦß96‘dšĩšĨ/ŒĘ¸.üg$ÄqžŸģĻéä5õ°åJ€āYĻHK‡Ī'(3ôJ[N.mųŋjžĮdX€>Á¸€1Vq…<ŸzŠP#cÉ#?J´€ ‘ÚąGˇdv€Ēɡ"¤M‘‹ØīCl<ļG4Ā LOOđúÕ*OĖsŸâô5*íÉbp=MAŪä cļ*eČ' ŪéLL{ånQ–5Ž=˜%†sœš˜åˇĶ֙đĀí`p:R`…DQέ9†`G¨•ønāQ—'œprô …>ĩ‡u¯­¯ˆ-ô§Ķî&˟øI8ļI.zŽ;×;¨xfKÍPjVēŽQÂ*ã¯p>¸Ē¯¨ú덚Ã5Ũ[—hüÄܜ2–UMFģ2â;IļNbtŒį$qÍs‘GŠéNÖ kp`’)ŧÄÆėßøģķBŠkPwLęÍõŧ€eÉ]ÃkŽG¯ĶŪĄˇÕ!—/- ]ųž€æėŦo­Íˆ}=ö[ÛËnä;‡īíúÕil5)´k[u°U“ėī †BF@;sëG*Opæv;-OSX§ŗĩ…ļ\Ũģ(fØI'ú~´ëKø„đÜŪÃ5ËŠĮ—Į™Ž¤-e˛ßÜŽ…tÖ’"ŪvO” íęzö?…WąŌĩ8îtå6‘Ŧ6sN žhųÕķƒÆĒȝMø¯ŦîV[hnRFå}§;IõĒ&ĒĻÃfŖrĸsq,(Äŋi=öWHąÕ­ĩĄ<ö–ŅDđœG Âí$ œ÷Ļ&‘ĢE|Ģ}đę wyß}NxÎ8<͞ MĄŦiōZũĸ+¨Ú"åKäĮ\qRÉŦ鐤%ôA$BΌÖ$:>­+"En&†ųîU ‡kŖį‚qÁũ*=OGÔ'Ôél­'@ąK ˛ą0$‚=G?Ĩ++…ŲÔŨęđ[æ[¤€…f søÖv—Žėđũ•îĄs™Ĩ\|Ģ’ägĸĪĩCyczoôûËxā—ČWFŽFÚ0Ā|ÃĶ­QļŅĩxc°>În,e•|––HÜįŽ88Å 6äņž,bŧ2ŗÅ+mˆFĨ™Čės‘ÍW¸ņ^‘omŗ\˛‹…ÜŖaČÆHÆGãY§@Ö-­íŽíšŲīRę[‡‰áÆ ƒíĮ4ûÍU¸ŊŽņ[Ok‡b™%BU$å{÷üi¤…vlŲëV÷ZÆŸÎ&‡›Ëm3÷ąŽ•ø—L{Ķdŗ›€€œíûÃ>´–:eõĻą{rf„Ú]mr¸;ՕBũ1ÅUŌü7yĻ_\}XJÎá<˛dģg°6C.Eâ+9eļŽ$œ íÍÄdÄyA×ņįĨUƒÅZ`1ĩĩ•ÎûˆŒą„ĩ Č ōj ?×örZ™/ tĩˇ’‚ÆA!ˆÆN}…K†ŽícĶž‰žÆ "˙R~`Ũ?‹ļVŠĻ5ËOėQŠŠ-¨dĀå‰8šâĒÛÃm|÷w0ÜYÆ˛Ë(.Pô#œ×ŊE†Čđ´z<—‡zļäSHmËÆyÁĒúƒŲé:ÆŖz..žČÃŊ#Ø€pĪri{ îZ›Åļ‘Ar×V—6ín‰)ŽE\ávāyâ‡ņDžUŗÃ¤NŌĪqö.B#įnāA=Aū• –„ēŽ”nno¤ē’îÂˀģōģ@ô<Ôķčw}—í:œĪ$ųĄö/ŪÚ@ã9'ņŖŨLVeŠuöQļ´šČÆķ°%ĮĘÅwqę;fŠß“mâÁx°dĶ%%AžRŪøZ›ÆŊûmÜS3¤€Äã‚Ŗdp1üęí։Τ—Īs8‘ hv[¨#įhņéQn-RW°ûh”I’c‡F™}s$ˆNXÆäg!sÔã§áFƒÔĪņ ũÍåžąe14Û=äcÁ([ įŽy­ W]›KŌl Ĩ¨š[ĻHŖĪŨާđéü=§ŪĪ+HfũėB'ČģĀųąÔķS]é6— `čō[ÆĒ™ÎāAāîÎr)é XÃŊŋŊ“WĐŪúÚ8™((ŧႝ§ũz÷Ģ>žUŅ@•ãe‚*Į‚¸f''<ũ*ĐđlÍģ[ĐŗHÄŠ=Ī<Ÿ­XƒIĶ´Ų&{h–—摇īĪæhmZÁgs gWmTirI™f.؃ƒoŽ^šâĢWQÛˆîcF{é`b" n øWEqœ×ō睗֔Žvg?•TąĶô=L­ėã+ā(U¸ÉÁžœŅuØVe¨jËyŠ/ÛcōímЅ0K'=xäg[ëW÷nâ-.–nT,cåcŸÔņ[Ķéļßjk—ˇˆĘ#ōÚBŧ•ô>ĩ Ž‹alwÃeR"•¨•ĐėĖģmVö$ĐZįQIVíŋyûĨĘd û×ŪŦčšĩÅŪˇ-­ÔëŧÆ\@¨ÆîXF1ךžē(ąØÛ,îR#Ry$Uģ3OĶųŗĩ†ŨYßZLeĨfęIÍų™ĀČŌŠƒôüé͟OĘ ŖņŒž_‡ä‘ūAæÅķņō ãšĮģÕ¯íEøĩģ’ęŲ<ĻûQ Ícķ€@ÁĀįÛ5ŲÜÅÖí ęŦŒ2U—92H!U†ąÆ{"?!VšHM–ĨŠIĻ­žŠ,ÖÉl’C8G'însųķPŊÄąÁŦ[[_\ÎĻÉg‰ŧŌĖœāõė8÷Ž.í`žļ˛(R[‚ė›cų~^NO­k¤`D6ž ĸū@ŅÁßj^dZĖÖwˇu„OlÉÎßNÊ}Ė€ @G{zßč s [‡âNyõųxŽõ#(vä ŠM˜Ŗ™ ”ãõ›ĢĢ­JŸ7-lÅZėÄŋ9z‘Ž›ēŒUQkęZG§$LҺˌVĮLŸ§ŽįËmŋ+rqÎ(;ەz’ G‡ÂXøRę°_C>`28 ō;Ž1X)ãÄootR[l˛-Â.Å?@ŧ÷īšŽ{RĶŲĨÕVĶNŧ ˜äĩ܎Fü|Ûrx9ÁüëR(o›‹Û ų¤í¤pˆĄFCŖ9į5؎惑Ī4™`>đ9ãŠ\ÃąÄŽ•2¨–-&O555ĀBNO9é׊lúCÚE¤:ŪI3J’ų`BĀ€šāņ]Ę7˂~”’lņߞ(æ ü“&ˇˇFšTŧˇË;c čß9ö§Ūé*ōߘ´y15’ȍF&÷āō9öŽčF¤‘ƒëšŠycY=4s4;ä)$—ë-Ė7Nͧö]„Ÿŧ=ہXËĨ]-9.´ģ™aŠÕĄkt”!WŨŨpAVÖĄâI-ĩ ĩКi.$Ũ…úc׍ހ˛ŦLųāŅvĩŽrsč×Lڂ­´oŨĒEyraÚ¸+ĪQÎr*ÕÍļŖ4EÄi¸´åĄß…aˇiÁĮ^âļÄŅ"ųŽ@ ÃÃęjž­~ Ōõ lψÜÚBͅÃmĮ<Â•ÛŦc&ƒ{˛)#Y%ÔVņĐŋ¨:rOԟ.ŠÉÚ–ÁĨÔę2î~ęíë…ęvūĩēux-m^ęhŖyN‚ä:~uOGÕŲuMBŪúæ"]yP#§iP@÷ëMIˆČ›AÖÅíúĢ[nŽuŨ#eJ•?Ũëōūĩ|éËÍŠK öąšã‘$*€ĶÂ6’ŪÃ,û‘Œ‰ “1†=ņUd×֛n.tįķųmåA660<GQíZđ”ĀšõŊŒļá#”˛$­ Čeõ†x¯=ƒCĨB|ŧœ+8ās’1õéLĘF ęzûŌ‡Ëō§=ë2ˆŧ“ Ϥ‚ĄÅHáŠ0P>¨Æį;s“Áö§(+Æ4Ôt"AÔ`ЍKW8gš’BÅČÁ$7~‚Ŗ•‚ļ wĀ"¤Ą„–=i’ ß50ÜęI(âšøޏÍ!ĸĻĖ…æĢM 6…,H˙˛xôĀéPÉÚAU9<æ‘D.Yūg\qĶ9Ŧ阀Iāf´œ`íŨĮĨP¸röČúP1ú[ee$įįÍhÎxŦŨ4mđ?ˆŅŊqVCÜãm›‚ ˇŪ¨øœc'''Ĩ]ŗĪ’Ä.>le…Qņī˛ÁXôéÚ´ęiI{čÂeÆđ[ĄĮüjÅn Ø2Ų'ëN•ˇHęÁxuāģIgŊÍēƒ–$tíÍSØę‰ęVĄÚķ>öŪjæ÷Ī*JŠo‘jŲh$О§{g8õŦQĮ-Ë•Ëcž€ĶWrÆy<Jv2íښK($’IäÚ™ÆĢ fc’{“R–ĀÎqŪ›F˙{Žˆt4Œ2š ÔöĀ”“´`döĄzįĶĨFŒ¤äąÉāgĩ? dõã­+‘žƒŌ•đprp;SÖDÜŋwĻqQģ’ĨA4¨7uŨę+/[Ö"ŌrIĶFHV1ōä㜟~•Ģ‚ ÜIü+•ņM‘Ô¯mm Žá¯$‹•ŠŸŧĮĄ<SŠMę)^ÚŽĒ9fæąæĶ`ģÖmõy1k`@‰Xmäsšˇ¨Ãs%‹Åk Yļ0W=˜Šį4.Xî,JXËlÉ­á~„¨sķdķŸj"ēÜĶ5Äā×$fĒIuj$-ŋåHÆ~ĩĘi:S]ŲÚIgؘA4rĖN<Ėä.0yįœŌ6éĻÜĮ—,s•xyC Hé“ŌŸ"žáÎû͕íšļSæ GræûĮڑõ;8ÚHÅäu÷eĀč3Ī Žc\ĶoޚŲŦ´ĩXãE|ĘĨX6vã8…h[XŨhj2ËĨ(Žâ0ĘKŠ%ļ`¯ãũ*”RDŨ›–—KsiĖˆ@ŲCšyô=ÅbŨkˇĮZēŗCg Ā'ŽIwĀņĪ#ƒVô¨u;=?K´kX•V/.rŌPÆ1×5GSŌ5 5ávtÛ[Ûsj!+#ÃdœŒŠW`nOĒéö‚%ģŊŠ‘w(gÆī\{U Ír(uË2õ„–îĀđWp+Đũ ĒwBí/4)$ļ…ŽÉ–3ü ųs×ĐTļÚí¤úqT…âļIÄŋ6Îrč:SInæÜˇöPĀ’Ëy†Q˜Ø¸ž•–—ˇZ†ģqōC§–ŽžXo0žO=¸âŗáÔ#ąŗekxđÂĐ>e'¸?Ĩ[šĶn/ô‹ëInL˛K!–Ũʅ0÷QøÖĻČ54ĸÕ ģi– X¤œ•‡QÍej^&6WŗÁörî‚6U'Pį'¸Ší,/ôíŪ(V)ī7œČØąËŸįYúƝŠ_jAĸ _!‚BáMģķwČĻ’¸t:uv{pä`‘ßĩr—×ŊŊÅŽu§Qux!ڐĻÕC¸Œdg< Ũ–Ūæi63Ælüĸ6ŒīŸËŦũ{JÔo§ĶÚÖ[h–ÚE›÷šų™rãˇ4-Á—ū= Ėļ̍™Ëˈ™ ģ€{ķL#Ō¯V n–â!(A`Wv2xõĻęÚ]Õ貖 ¨ęÕ÷•wFČ{âŸoĨęYĩž’æĶÛ´2ĸ!åŗōút}čI ėĢ/‰lĻŌn¤Š×P‚+yAâ‡n>||¤ņŒõ­;ÍJ ?QC$˛Č"^Bäü\;ƒ˙ÖŦš|?6Ÿ§6ĨÚĪ!’"ąɗŪAįŌ­\iˇgPv— dˇō%)Á“¸cžIâ‹!š‹rf…fˇÃFSrxa×­d7ŠŊĻ,å{{™Ė >FŌŲ#×8Ȩ$Ōīí}:yÚŅBJÆL# Á^įĶŌŗu-4é)n~ŪĐ^ÆŅÁ(Ļ_-†ëŽhI ļlÂOšĐ}ŽEÍŲĩl•ų[ąëČ9ŖūKKšM•ÃI ÁË û į=ķŪĢ?‡ƒ]4É2Ą¸" Ē@~üõ¨Žŧ<ŗ%Ė-{7úEœĒB1ŒwõôhU™nį[ŽëÂĶji˛DЗ*¯ą°:ķÛŊUšņÄ3›x,P–Ëq¸ČĘzöëÁŠcĐ!ˇĐfŅÅŨÁ†E WrŠė8éū4 +;ŨÜÛ}œļåAß§Z=Đŗ!ŸÄīšĐŲDvë1%ļä7@8>•3ëˇ_i[hlGQ§Úr7`qÉāúV-ü)­ÁxcŽLBe‡ÍY<Žü…kAĨ}ēÚÚîņĻļŧx€`”Ļüā˙žôôHJåv×ĩ$¸ŧf†ÔAkv‘>ˇ•m¸#ļ~j'Ôõ9?ļ„‘Ú-w*Ą K|Ą†}°yĢ’h4í"ɛ†L †#§§åHú¤ŗĪ6Ų Ėž\š‘‚°č8Ī\ 4 2–ˇ<ōčÚnDk ˛Û™08Áaæ×ī–I#ōõˇ Æ~ãmĮ~&ļnt]:{Kk9ŧPāĸīa‚;ūø_N¸ēk‰-ĸgvV}Ųųļ÷úĶē 2ąÕŽ_]†:Ų ivË…ÎsĶ9ĮÛí^úÛS–Åd„4ʍiē3ÉŨ‡Ī<āsWäđæ–×?hkHĖ…„ˆįpīS›kynbšX“íåąĪ5:ĖĮ}cT¤Z­ŗÃk*GpԜ3d3īÅkXkļڕéĩ….‘‚ÍæBĘŊq€MC>…§Ū_­ėĐG%ʇĮLtĪŽ+YPĒ…3ĶĨÁfK´•É=ę5`ŲŽĐ1ĐSÉÚ:ķLŒå[iČԌÂ×îīR˛ļK‰-íįYI‚û€ų@ŠįęÃH‹PÔ mt’ ØĒ.Ö •įÔTž%ĩ’YŦîŪ+‹h™ˇ&í˛?wiëø ŸCąˇšĶ€‘<õ34Š“Ą%ŗ÷FūxõĒ[ÔÁļē—PŗĐ%’ķeēO¸P¤ôaôÎĢ#UÔZÚ 95ĄOĩMž**‚žĀ’Oå]9ŌŦZ/&k+Y#BX#DģCāTZ„öZ~œ-ÚÔJ –ņø:áGjwO ja%ō~ĘŪëX‘Ō[%pаUyģö‡ojŦšŖ‡[˜õ;—+ĢYōĻ"qŒ}9ü+§2Ã.œˇ‚ܘ–/0~įæ poĨKfĐŪZĮulcōŽ:‚’=HĄX,rIĢ+øŒÚũļëɚ)Ą}Ü l.}Ü ķß­XđæĨc§xb)äģēœąT›qi 9ãė+ŽhËJp)ę@īTĩ —I°ščÁæĮ —eFp: ôĨ~nĸkZ¤:F™urîÃˌ•÷cĀrzK\´[›ä/íqē4ĀČ9RzäĖ3]ŠÆo­–C ´rp’q‘‘øÔéÍ´*’ qĮ'd 3Gn!žK‹Ö¸ŗ)ų„“ÛĻ#šĶ×>ĘŪ!UŧiĸV˛m’FĖŋ6üŽņØ×ZđŠûĀŒjIr yū*#‹vš1X¯ˆęXËģV;eÉûÁ‹n?KkG{=R;™ĩ•eĘ9⟐1đ+´ÃđÉâ˜Ä ”čhæSŠ´[„ƒF{˜/9íåV‰Áûš˜īL†Ü][xz ›kĻT2ŦęQĀPsŪŲÅvŌ4mPHĻMUŅîãŋĶRéĄōŲ™”Ļwr¤ŠūTsŽSMGˇģŌž8oŧ乒)œĢ‘å|ÁsžÜ­Z× g×HŧŽöKybA[.U\XC͟­u…Ŗ]‚m$sIÍw1ädtÍڎĮ ¨Ú›™aXå×UļՒgĶ–â+‹XâdyW÷ ™ÎsÔįŠmƙŠ\ IRŅw\^GÔ_A™ŋŲzēJĄ-­ŒPęFņXĖA`Ų$cu¨ĻĐõˆÃ[ÛËjöâô^FI*āīÜU¸æēA¨Ú ŋ˛ũĻ/´6ŗôõ¨_[ŌãĄû\Beq_ö¸āŸ^hRb˛0nt EĄž´‰a6wĶųÎėĮĖLH=8æŽęV“ßߨ?Ųb6öōn"FéÁęjņ×4˛FžBÉå7?uŊ* ÍWLˇ”C%ō#Ģ+× {ūŊ+ąčeę–Z†ˇáUmšŲá#’Ä7\vÍU]ūM&[ ™mÂÆŠäÉ[NTäõí[vז—âSkp\Cō2œ§†Ē]øNŌŨ žfip8ÚX¨'ŸAšw{ ˛ŨéöËŠË{u4Ne…b%#Ú9õ>ĩ—‡Ėå=Á:|S™’ Ŗ†Î@Ũé“ŌąõMZãÍš¸WšAkyQĮvœōۇ|û×WsŠÚYX[Ũ\G(I™Så tŨĪß2ąžÚ,Ļ]ßj‘ģ(Ĩ۟JTđÄWS%ÜĒVīí?| š•2ë¯ ÄÍ;EōŊHįāÕMbx5-:HĖ/ üK"“‚§>ŲÍ%}ÛsF_ ĀHs<āžŌĘ$Čķ=yíTSÁziģ[ŗ=ȚIūĐĨ_€ŨH̎^&KpU´ÖÂ^ RKŽøÁÕŗ§ĻŧâÖ;ģw”ĸ%qģōĸōC˛eŲŧ…}ā¸ēSĸl¨;×Ŋ/îögĶĩ${|°œžƒļMf÷+ ß1…Á#n2#ĩYw;IôīUL{Xād“Sãx;†Ŋ c$Îī[’Gz¨įs”^qÉ5;˜ŲT¯8 * %Ŋģ61ķ ~UĸÜÖĪģnžAœ éūč̚hFŧĩ•À:Ŗ j˜æ~B¯i‹ēęØ9?ë3úđĢ{ĮąęQ¯ éŪ¤g¨äÜīUípܸĀ=MZ,­Đ9=+rąŅļq ¨î{ŌŖŗI–ĪķĻ‚ul•M Œn7“„ ŒuÉĒ •XIČįņ¤ÜËōāÉâ…*2‚O|tĄ’Į“ßš]ŒĘ ãđëN$Q´ã×ĻiŽI †ŽąY"Mt‰?Ę1•\ĻG<:|¨WgOo<ĢJ“̝BTįõĨ[ģs:Åį.ķŌ2y5ÍE5Ɖ§I,:PļžY•LrNdi¸ĮˌķéN‡Hž‹Y’WĶcŸtæešiĪ˕Æ6úŽŸJ9BėŲtŌ59RãíIl\ãʛ[wÎķŠ“[Ԛ9BßÛŨ&%(õ?rčãA|’AmˇXĀWc*NäãÖĨ’ÂâîūæÚ[%Ķ!ķ)RA9š§ËægWĄgq4‘ĨĖlņÎĒã*BibšŠ`ōÅ4RFŧŦ rëĨjˇžzÍiu’[äĘ,‡<ãąéZē$‹¤^Ų%„ZwžĨ@ŠMŲ%qģõ¤ŌŲiu*ęcrgˇÚg2y€ŦYãžŨēÕÔÕėØ\‹Ë!œF$ķ]Ū™éœ×?.‘¨\x}-¤ŗĩ†h"Č Ü<ƒĮûÕwŅoš Boą¤FæâVuØrĖqĮ4rŽávtŗx“KŽĪím‹Éķ{ĪĖ{Tc]ŗ\Čא˜"…d ”<“Ü1YéwR>¤ņÛÆ ˇĪi0ÍšŽ:T÷:=õÅåô†Ū.Ŧ–<ŪĪˇNJVAŠĢģĻ͆9Æ!A,Ÿ+ !ū.œŠ™u­6iĖPZ8…Ã3) å˙{q#ņŦH´-IĻ‘æ’­`mHÉ;[ÔqČúúÔvú.ޞ”Ú‡q´EÉ`XA9Įĩ; ÔčtũZÃS25”‚hÕļ’ đʇÄRžŗud֋ˆ|ÂËÎåUÆÖÉ89ÉātÅ3ÃúV§§ũ°ę2@æā/’KŽ˜VbøsUš˛HeŠÕ%ļR"ēIé}˜cŖŧ͞¸ĩąÔiÚÂęVĸxíæŠÂųŠ´°õՙ'‹4ÉmoVÚI^Xag>R|Ûs‚T‘ƒƒW ‹P’ÁÖô[G);vĀĨ_ŠšÅˇĐu;}>{ylmüŗ E`ņęĮ<)$€ŋ˙ ´¸hnĮhˇ%ˆ”=úŽ}j•ÖĢoy¨2NŌGg¸WV(rĮ“‘čE>u*lQŒą}’BaÎWļ9āĐ|7,°ĸM|­ū…öB‚>ŖûŨzæĸ=I-õxŸÄ3;,ņÛ­sįp ÷ŋ*‘7^jKpŗÛ˛ˆ‚îV÷éĢĸŨĪŖIguĒ™#‘"`õ4šˆ]–dņ*D'g°ēAlĸüĒz7^GëK­ÎáôČcOŨ\\ĒČr>eÁ8üqUgđųē’åįšf2Â"8L€FG>į­_ēŌ¤ŊK7M[:Č`%ˆį?/tz‘XëpÜYi“y $*ŅÆ¤ä{dį ģēōLZY sŸų€ ŖŽ:ЎoĄ}ŠR!ŋ¸[v.Âߍ¨[9 ã=ķŠŽÅjļiŨÎ-㍉_ēŪŧ{Q2x’îVĶÆÂ'Ņ4Ĩ”ŽŌ¸ČābøĒęxPYéžmÉVgŒČ0ģ[n3ß&¨j:}ļŸĒhš|owåFdų×q*w`8É­šô >HáŒûˇŠB„ã=ķOAjIĨ}6Ļ- Ĩ焆9¤ß!Üp1‘ŠuæĄ|šũŊĒZų–F}ۀ Æ>´ŋŲæķíđJßiō–0ÆRT¨íŒāõĨŸLŠâų/d ׌Dc¯šG(ē 3>×\Ônã–ém#K"’ynî š ķŽœbĒé^ ŧ‘ŦæŊÍŗĪˆQ•”¨rNsšģmáë`ŌLđĒÉ,ŒYFØëĐę)öŪ˛ļšŲāCÛ‚Š–' z€ āQx…™J^­æ“4ŠjÖZĄÂŦyķ"8ČÉÎ lZëú]ũĶÛŲŨ frË´ŽĮR9æĢĮáŨ'Oeē†ßlŠ˙ēV!Ië´gđ­(- …ĖÆ5ÜR|Ŋ“,uU֕@ÁČÁã<ū”›‹.BZP’H…HĖ-n3ũ¯ĄŸ8,_j$Ļ9fØØ?įÖ¨Á¯\ļĄĻÄo#Ū÷˛Á22Š`ˇAų×E6›o{ē§Ú$‚)5'˛ˇrMˆáD‚'Ž08ĻXßŨ_jzOÚīåļ{‹/1⍂uqŽŨĮjßÔn­`ŲąûK*†Įr̜g…Yų[ĸ\Ž0Jō>”6‚ĖætŊRęķY-sŦ$r äŽM8'ĖÎ?9Ģž(ÔZ{"ōKŖÜ¸–"C*ā÷Œœ ÖúA Éæ˜SÍ#—ÛÎ=3HĘ9 ƒƒĀô¤Ú¸Xãgŧ.,Ŗšōųt–‰öMæ8-&îaÎ1Ķ5]$šoėDÔîn†ô™X‡xË(?!ls’+ļy”/ú°pÔ<| äįŌŽd;]Ļ ĪgĨ ›‹Õ˛c*M'Ε? b9ÆãUė…..míâhįš4bëÉ+žüæģ•.€Ŗ“Ķ=+6~ÖMMlR Hy5Ÿhō˨%—ëÁĸ÷ŲŦcM*G-Œ…ŨķØIkûš°čZMßŎœãÍE}3ŊÅüm-ØŊūÎ1īÃ.ҌcŽ į5ډdĻv‹si •ŧV‘ΑɝĢ"8!€į;ēVģH¸`āž5U9ÚĮ=zž•!(aĘāˇ`Oz†3‡}2ūīLŧÔ"†ú;ØŽUí­ßĄFĶ‚9ČÉükJō)¯ĩģKÖŌexūÄņ¸pŖk6'ØūuŠĄj’jzj]\¤qšgR¨ÄĩˆīôĢ›Ō<´Œ“Ôž*œ­ ’2ôģŗŅmmŽŅŖ–ö,Ąę1í\ävķ4v˙ŲoÄ7ī?ÚūP6o-Ôrr1]ãã!@-Њ‰æļI ŧ¨­fįŌ—0ėrMĨjŌÚ6—5´[M×ÚRø?*7îåzîíK{Ļj’ލ‰gģŠxØĘGĘģzņ×åũkĨšŧ‰,Žfļ0HWēP>…ģU{^Á'Ž ī ŽvۈˇŲ=ĖVG3ĒhÚąžķė°ÛyWĮp ĘG*F1íRjZvĨ<úƒ"@ŸlHŠî ã9ĢŽģö]6ŪYŽ­Đ\Nb3@wĒ/<ûž1Nŗŋ‚-!n.5Xī;(›`R{ãŠWv¸ŦˆlEÄZĩõĖŪOúB ؎s¸åÍGq¤]6°÷öW6ņųĒĢ*Mö{Ѝ5­bÖÆ;ĄŊŒ#ļã܉ņžœÖˇĄ# Š-ģĄ”6ÖŖVzõ·y7Û"YĀŽæuœlO™zu<Žk:MCFšŌđągw3ŸP>´Ø5Ë9žéš+ˆáļ,%™“ ĨzŽš&Ŧiúî—4ÜGį-Âuå™ēc×4Ÿ0hUÃō6Ÿcąˇ–Í‡“:rG$įƒžâĻ_ ŦÖģ^ęo9ŽžĐōĄPY‡LŒcŽ*Y5øm§‚§_§ËP1ˇ¯SŠH|Uc.ŦtõŠãˆ2ĒåC’žŧQyt‘^û‚öâyRūâķŦĨŽƒŋJۏH´‚Hį‚Ō9NKÔq× }:Äà WĶ ‘öTėpu=úņøÖū“vڍˆ¸’Î{LôI€ËĮ‚x¤ųŦRˇBüM˜”°MØÁÁéNUl}ÕĀ9$TQ !ÛiãųՅPS˙¯R1ė˜ęzQ’Āœđ;R=˛ã={rzŌ1*ØÚ¤ ōŋĒ8ëQ´{° ŖęypŽ9=3Qōų#åíŽÔ1†@\dzã¤!š<’;SAWBgŠV' #=IīRÆ#/Čģ›B° pxÍJÁC”–Î3M$ĸ‘ŽĄ”ŒÉ¤¸mąČˆŠ“ČbI=Ē)ĮËĪoN*͇9=ēŠĒûœˇN:ĐPšs''#$qZC8隡§“™3ŽÕx÷"¨Î[œ¤\t\ķĶ5“â‘›X8%ēĨl@ģW@õŦ•HmOđ9ëŌ´Žæ´ū#QļæPæžā*Հ-jŊ~eūtË´Üįƒ;0üUOõŠ´’[T´s‡^ĩoctz„ 8õŠ7Ā„vÅB˜8%šīÅNķáˆČĀíXœŦ–3•ÜF>ŊiÃ÷Ÿ.JãžÔĖ‚r¤qéN2=qLHíæœ‡ dZoĘĒËŪ¸¤Vų2rqÍHÄî‚zSJ¨õ4…[‡_֓c€GZ Šø*œÆ¤Ũ—ČSĮozŽ%íĀ‘Rįi#$ķڀ‘ō¨üiPŦ.F:fœ­Á qŽŪ´ĮFrv6=ȤsI{Y˜zjĨĖÎ#R!’L\zõëĐQŠĀÅÖS„HØŗ.sŒ{Wg qxb ‚.RágĖ\Iģ*Ũ1é´Õ(Ļ&Ú;ĒĖ@lwc=? Bģ`œgĄī\Õŗ=ˇˆĩĩļ•—ĘiiĻĘ āŽ8ôĢķĪ6ąá‡ēĶÁIfL '¯ ĀāĐã¨&hi÷RÉ­^iė"ĉ*2į-ģ9ō­˜'‚bÍ Čāpv6@5ÅĨôÆũŦ4Ų­ ŊĸîÚ2ęNAÁî8ŠÎ—}tڃXé˛iŅÉiå8Pōg9?QŸzˇEŲÖĨ夰—YŅ•ÖmÃ˙Jqģĩ$Ks÷]ęģÆHõĘ\i’ËohĐi/Á0yāBĒŌ|¸ČÁÁÁ=ęÜ_•ĒØĖēfČģ& )1ų’}=(°]–ÎŽÖŪ!ē´š¸‰mÄ1Ë˙”äą’yéV%ŽĶíņjHĢ"-ČB€{c8įĘ˛ĩ6{ÛÛįK"IaäÄėTåōŪ§ÜUwŅoHOļXŊÜmn 2)ËВ Į§4í \ę&ŧĩˆ:Ësl>o™€ĀĪŋŊFúŒBŌY ēļfˆ!gWâ#Ĩs’č÷Âáĸ{t?ŗ>Ėf,Ŗ2učyö§bŪ§ˆÕôŋŗ¸VNd÷įõĸÁsxë1˛$×ļĒæ5}ĻAЎ=šŠ§ŧļˇe†ycRü"ģģé\ėš=ė’Ė~ÁĪĨ­°gu˙XëúsL}ynã’ûN[Ķ$P¨"mĸ'AĪ~Fy╗pģ7“T̓„7™”é5X­uHfšî$ĶåļgĀ AîúÆ~´‘J‰in…ŽŪ`Æ@ÅQķœdpƟomŠÛĮĻ+Á†ŪŨā’1(9û¸<j-Ô ËoNĩŽ9åDrũÂŋ6ār1ÔU+¯i-ŋī^O=KÆ"Bû€ëŒ Ï@ŋ´kI 4¤ˆc/ĩT9-ōœqŒãéMļŅ/íSMō&ˇ m$ŽÛ˛/ÕWØgôĸ˸jjØ Á`ĖÆvcĀCŒõÆ}j]#Y´Õ7ũžŽw2āœpj…Ž{ üŗÃsˇ–C,ã˃Üž†ĸč_Ø×7ˇOz˛ĸ>D`öõ§h‚r¸ũ{T‚;ģ%Kƒs䴙‡ĒzGNEëÖēv™`ˇr3Jöé!Į$đ2ĮņĨģĐî.o&ŧļžōLĐųr)ˆ6GlzMAoáûØc´hĩ%IŖ„A+y †AĘđOQîØ5¸õ՗MÕu'™neļ-īuˆįč*ėŪ%ŗ‡Q[UŠy›(ŦņŽU7tũ*­Æ‹;ŪŪ˛ŪÄļˇą¤R+ÆI89Į95n=Û_līŪŪŨļy°„6ĐÁ=8Tč=@x€l¸¸–Ęe†d,prÁ° õ?ÖŦčúģj–î˙bžÕãmĨ'\ôõĒÃC†KKøfŊ”Åu)”a@16s~ ~U=„2ŲDËs=äŦŲS"ė'aër!â9'ŋ6đYÉ$>i€ÎšÂ¸ęqŽ™ã­`Kŧž˛ģŧ…ŨÛTh '*ǤáqøVÜ:˛ę wm}rŸŧķ^ŲdYs×#ßŌ”xuj>Ų9 tn”d}ķøtëTŦ…Š›¨Ákzl4í6F´ŧm"’B?Ryíž:Õ­^ųíĩ*#j’¤“•ŪXæ6ÚHĀx™ƒ jÆęîcG2HQņ?rEXÕ4ÛkŲíĻ–Iƒ[žčüˇ*3ëīIÚáfc¯‰õxņĻÁ˛[—ļV3‡€O85:ø’÷ėÖåŦ­ÖwģkWÎĐ@<ƒŒãŠsxvÎ;Eį%g3Že8ŪO_įYšåŒËaGtđ=į›3&ö ā‚r9ERQbÕ'XšîãO[›“eéˇ|ą!X)!—×ŠŲ‡RŗŸP{Žc{ˆÆ^0yP=1Yˇš-ŦŲĮ-ŧ‚UÚå~n䞤ķŪĩ"XIbA!Æ Š•ŠW,ė—wŠ’0ŌĸËĀĪfš ČyÆsŌŦEå,gōâ¤f?ˆ¯î4Ũ6­Z LņÄŪfH Įˆæ˛nĩŨZÕĻąG´Gs ~rĄÚË!ôĪdwĢž1„Üh‹V’ÜŋžŒĄ8$ž}3R&“ĻĪlm’Úŗ8ÜĘXî œöį#ĸĩˆŗ3_XžˇÔ-íe’ÚLKr…FĪĖ É=Øsšą§jwšÅÅŲŽ1fŠ=‡%AĀpŲÁ÷ôŠäđŪžė<Û8¤ČPI$“ŽYŗ‡J:ĖvÂ?ļ"âEåTķø})h:ˇ&Öu¸–b‹1Xd›Ũ1ßųŦ‹B}>˙ÄK0iR;uŒtÚ‘ΰ'&ē[ 2->Ū8ab‰K6ĐÄōiƒHˇ7—S›(™6;Ë8÷öŖ¨=Ž~}cRĶãŠûĢuyî|ą:|ū\er 퓏ÖŦøZ]ËŠŸ<˛×;Č6UyĀ­?ė‹ake°ˇäî)´OŽ "ÁcĻ*ʐZÛo 1.O@(ēØ,ĖKûĢ›Ī\EvąÁĮōũŅ–ãšsjīŖŠ‰5Tû<1ÄņļĀÁ d^ƒķ­Ņ§ZģI!ŗ€É("F* p{I™eE#˛A`ąŽG§JNÖ™WÃډžŗē>dÜ{;ØĖļp…T”Į'îöËÁÍ\xã \Dģēn”h˜Xä ž¸›^˜O­$*“IØĘüÅ@ášöÍPŌuCĨLúĖ­s4°ĘŽųP9ĮĐįmw‰l™Ūb‹Ė ÛF~”Æ…B(ō”ŲGz|˰šN#NÔ¤’˙K‰¯Žáeš€XãøļįˇĨV­…ŊŒĪ¨NąE¨NŽŅļgvÔņų× [ĮĩËÉƒŽžô<1‰ČPŧqĶ Ŗ)ÉĻŽËâHTŨ]2É #åGO­V[÷ļŅ#ō5+•o;mÛHĖæ!–Į†qŌģ)mŅØŋ2ž ãĨ#ÛĀŅ7˜ģw (æAĘĘzÁ}*Üĩë]ä&‘v–ã¯ozæ§ŋģķį˙KēM`^lŠß,chķĀÛĶnŪõĐĪök;Suq!Æ!Gä ~•5…䌎ëo4/ l–9x ‘žßQBĶPˇCŌ÷Xš†ōKÅŧYŨcD.ËÆN1Öŗ´›Š#žĐCũ¨Éš)Ų‘ÎđƒĮ=kē ĀâčHˇŅ*ųÄDJ =*ŞŖgŠŖŦfhZ"§kŠFŒƒô4]Ø,ŽbYø^Qky ˇ× g‹ĘmÁyĮCŌĩ˙ŗõ†´ĶUuVGˇ|Īû°ĸQž˜ÜUjZr¤–nÄōŌ,x.0lã5nĶYēœÛÛÃhˇrųqŊÄë(XО uÉö§ĢW›$E‰Ü <€*Ú° ÃwÍÜ{ÔHU'ŽŊ(Ü0BŽXõ>ĩž`ˆ°a‘ß֘2ęYž_j‘Âā–+ÛÖŖ‘Ņ€U$“Ú“+ĘNķ„ųGJaŪS/ˇž)äĄlą'ĩEąORÄFjF8D9>â—ĖlF3žhrĒņÎ)¸FLŒœtÅ+ Œ™$Ũœ?u@¨œą'8 >•3LJū|zĶe`€ärO4ŠE9Jī9Ǟ‹°g'šĢ'īXŊ*ÁÛŋJ Oë7n•tČ āâ¨éĮį˜qØUėNEZ3{œŧė‚8éXŪ'bŅZ#)ûĖŲüĢI#bN=1É"˛|JŽZĶvpĮ´[šSøŒ‰äܤ0ųüįéčŽi#ū&Ö`˙yj”Ä*…ÉȚNēUŨ&Qũ­i@Ū1ĨSØčGĨĢAÁŗŠz(åäqˇJ€3\ģ9ÉíV"3¸Š?^ĩŠ9Xč›Ė@Sîũ*ÃmÆã€GØÁ۝ß\Ō†*ŒĮ•V cAœeI=éCŗ7O—ĩ F#s`žø§ÃoĮR$Ē€s¸ûSØîˆã?ˆīJãÔÔģö hƜco÷NiČp~é#Ū’8ß$g#ëN œzĐB­‚#ĩ8yéM+ŧåT…^2hbŪPPNî™ëšlޝ#Žj 0ĘHÍ,Đš€ˆŲ|Áœėq\^’Īs]Ũ¤r[4‹3 Ŗ™Üîį€=1MFârąØ:Äņ˛Lâq†V\‚=)ˆ-,`´.0=1\u´K/†åšO´ŊÄs+0%ÉÚ$Č ģéS0ķcԚ;k {ą¯–ęYxŨ×ÖĢ“Ė\Ėī"‘ Ŧ <č*–ĩ¯ŽŠayLėP*Lõ4ūsĮ$rŦøXHF{ž3š,3jV1:Į%Ė+œüĻAž:ūTņ4w,ą8’3ʲ6AüEqņ貖Ũ.’"j0fKDIĪSĶÚ¤ynü9§ŨyabkâÁĀĘ1č€gœöĸŨ‚įQq¨Z[ˇ—4đŖ…ÜC8¸ôŦ÷Õ´ãs ­Ü&I@ōÔ8ųÁ=ŋ*Î×ôɯd‚æŌ4kŒ}žv*3å7 ĩ<šdöÚŨŧöVQĩ¸ļÜĢåáēāõ╓ę=I$Õ`K‹”‘áT‚1Æ˙}r; Riš…†Ĩ&ÛYĎ3ČĀ?ZŠ{a|Ú­ėŠf)ŦŒ´˜;šį§Ŋ^Ą팟šDŠĶɐ+į#‘ĮˇëE•ˇ ˛yu[xídhnˆQv É'œŒ¯ëÖ§MFÖ[ãh#s*įŸ,íČŒã¯5œÚ6§4w‘ųļęŗ]ĨÂ’WuéũŅųšŊmĨLēéÔ7Ƒ˛éG˜{ŒŠ,솪îŧGco¨Į§ÄÄǰU'ēj f^ŖīqĐõ¨ĩ-bSáKĢû($2eÚF x$øicđü̧ú{oļ¤\Dwg#éÉŠ†„ŅhķéŸl‘’æGgpĒ’@üč´C[Åwg¤ĪåZØ<“b3´+’3ПSÔÔ÷~#–ÜÜíĶ™ÖŪu…Č•A;€ÁĮ§Ė)NƒļåfŠîę9B$lč@ķŧ1ŽœfĄģđâJ×Xŧēæe•ŽáÁéė?*~īPÔ{xŽh,.¤“N‘nmĻXÚāįv0Aôæ™7ˆ–.-îldŽâ&@ą† æoû¸?üĒ–ŋb,4íNu¸šGē(_ u8ãåW×A´žŪMŌË)˜+™ËüāēAíŠ4ĩŨŲĩË▒gĸ´ĶũœC3ÁÁ!ŗŽ‡”ũGVŋ´ģĶápŧˇEƒ8¨Rx8¨ÃöîÃ=ÍÜĻ'ķS9 ģ×đíW¯ôhuldiÖ[vŨŦ…OžM\z؅|Cq. Öļú\’Âŗdœtu=:ĮZĐMcOûrY}ļxÜÉų‰úUZϤ×Ļ[…ËųĻ5”„/ęEiAĻØ­ãÜũŽrD›īŽi>PW.|Ŗ FãßĩNrĨE‘Ī^‚ϝ–71!}ęF`øļŸÃ7Ë"‡esÎŌQ\öĨ´ĩÕ-‚[ßG^L‘¤ąÆF\ķ]^ŖĻÅĒŲKm4’ˆŸ†Úår=8íY:fĨErąĄIfGîÚvqėB“ÅTZą-j%æŊ{o¤cŽßĖ´†9FsƒœîōĻ˨ 3\Õ¯öØC!ã',1ŸĘŽj:^‘,ë.  I1ōGīJų™' €FjĮü#úz‡?f,ŌEäąg-”ô94îjfęÚö¯ĻX,‚;IįšUŽŨ"ŨÜķgéVßYÔí|6oī-ŖŽč`4!˛2HPsØsš!đö—ok-‰€”•Ãy‰lŽ›I9ö­´ĢQd֟g×2ģnÎzį<Ōv™Īßj:ė6iŊ­­æ{¸âÜüŖxĪ_ĮĨGqĢę k0i-ÚkmB8O+ŅļôāüßĨh&™ĸ3=š[Į(Ž@íbÅ[äįĨ>âĶKļ†iŽ,íÖ%>lĨ” Ą5Ø,ĖË­kUĩ ŖšĩÚÜGFBrŽœį¯5§¤ß\ËyiuKĢ{H­ä9(PaˆīéëRÉĻio”°ˇ1š Ä0O¯ëNëqXįN̍[y­.¤˛ {ôļe1Ŋ“Û¯oJ’GQģÕÜiZAÜĸ¤ŊšÃG´IŪßjī û´ÎÜôú K4ĩŽi-ā æîķ&Îzž„“ūxĄŲę%ĄËŲ΍ŨY_ĩÅíÂMiĀĀ8ÃËÉČĀôÅZŽîâ/›ģ+é.c ]ØHc8‡áÖēļ†,LļrĖ~™÷МÚX؁ĩT q’qNãQ8Ģ› |14‡ZŠ—Pœė0ČĪ_lV†ˆ|¯ęŠ×ŌČėâTžWVPsĀĮ+sT–ĶOĶáķao.Y‘ÆŖ‚N?ËņĢ—%c„•ų7Ž3ĮÛĐVÔã´ũRIu׈j3˛Ė“DD‡Ēˎ~´Ũ[ElZ ÛŲ‹A$w…Ųļ¯n÷ŗŽ•ט‹Į/–LJ™éŸZĢáũ:}+G7rC#ÄIC?w9į4›Vĩ9>ęA}ŖˆÍҟė˛Å1urģĮ ģŊÍíäS1āH#XX'ˏįæã×ķŽÍWb%ž§Ŋ$VņCÛ+ą,\äķŸJ9ÁÄį.t}jâō ûiŌŪä@!š +㜁õÍK¤øVûIģF˛ÕZ;"Ë$°4jKˇÁíšéą2Ī\Ôˌd`Í.~ƒå˛†8Æ=jMĖąũÂFjŠ$Ÿz•>éĀ#$rjF4ŠČn‡ŠĨļ!Āũ)eãĄsĨFÛCuÍ +¨Ãa€ųPÁŒ€õĨ8ķ g§ĩĄc‚sô¤1¤˜qšl@ĸˇB:ŠRĢ‘éRŠAŒ}é …Pbāã<“ŪĢ\'ásÜuĢ ŨĮéUn#AH§vĘ˰ úŠĒÅVX ãÚ­2Œ+…9V`Bc¤Pšq,% `9üë@ãšÕV€lAŊLö÷ĸĀJJ„S“ÅWyš v–vDU$—\đMH€āģą ô\chŽSÅņęķXËä[ĒXÉF—˙j¨ÆîÂnĘį]ō”)Č>ëŸƒÃŽĢ W¤‹ūhG‰ƒ‘šŗZļMq5”-:$nFJĢîíÍrą^2ÍqrēŒŌųZ@<Ķ„€rž˜ŨųSIëa7ĄØ{Õy3ŊXæšFúėę/OwũĨöŊąD„ėäc+Ķu52DíwĢũ§ûdlí fl  Î3Į\ŅėúÜ|įo ŠņŠbFᚑĪŨ œw9ŽG@“ʆā,—Ōî ģí €­Ž@ĪëUt˜™`˛k:Ė‚Q<¯ģlŸx/ąį‘ĸČW;€áA$Ž95ÍŅ|—1Ēŗ„,ĄĘHĪÁ˙fÅ6‰xžM˙ÛZ%ķÁ!œŋŪ9Ī5ŖuĨ’öņ}’āéŋgp‘DŦ<š ęĘ9čMW*žäŨM­ÉŧĶ­īÔi#WØLŒÕ°Ā¨Æ^k‚´´•-t׸ąšdk9-d_(“ŋåÆGaÁäÔļ–ę×*ŪØNĘ,ÄN^6*˛séĐķīMÄ/ĄÛLFWn܏ZŖwf×SÛŨÃu%ŧą?uĩ•ÁÁä§ZæėŦ&{˯ĩĮ¨=ë •ˇŠ*~îúŒUŨ …ŽoVsÛMÄr)Œœ–9íīJÖ ÜÕ{˜4khmŖŽIf™—ÆųĢØTvÚߝzlîm¤ļšÛšLęGŠęņ_CŠXęq#\Eäš$Áe2Žũ*ŖęÖúΚl-ÔĢ[n-æŠV†0äŅk†ĮP.c1‡W<Œ“L3ĻŨÁ•UN]Ŋqv–W6ˇZ>`ö:4Š ­ģnzr?:­čŗÔé‹ģP›8 8'’KdžG4r…ŲÜͨ[ųˆĢ⚝-…đÔd‹û>Y'kÁ› •Ŋå2Ũ#}ą6āŋs×<ŌQžƒlėūŨb¤nšˆģŋ–€¸ÉoO­WƒUˇÅIJÜAäÅ!MčßtŅŊëôëņu40Úf1¨ ĩ2€WåČõõĨ}3T‚=KȂŌ^‰á,Āü¸1ÃqŸÆŽT+ŗĄŊÕ ˇĐn58$E…¤Cžöũk+Lģļ°„Ũ\ßŨMpÖË4Ņą,ĒņÂĢØiúŦ>šĶ$HŧÍŽ#ũé9 žI#ļj4Wʉb{@æÃė’o-¨8§e°]čÍĢßiöQÂōJĮĖ_1!cˇHVäÖ-ÃíÆaöf‰1œƒĶZÁ‹FÔm'ļšŲ­åsjļķ$„íčËĮ׊ü>íáČ´¸nv< Ŧ’˛ä ģ§Ĩ+G¸îËRx’ÆŒ Ūå%DfģdœzTi{ģÄŨ Ųm^ÁĨׇ8č84ˇēuū­k/ ŧMåÆÁ\€:į­G‡nvCÍÔO vmhBÄTqÎsė(J6šbÛÄļ˛Ė¨ŅOxÚXKĻĀrv˙õęøJ­ÛM[ĶmpÉúgŠd~˛ō’é8;LŎœûUÁĸŲC{ö¸äŽö…d"6lc$zĶĶaYœöĄ3Ūhwúŋ‘$ąnĩvoŪGˇÛŽ…¸5z˙_Ô´Í2)Ž ŗˇ{8ōŧpŧdž~•(đļ‘ngšU•‘Õŋrķ‰ž¸ĀÎi˛x[Hš†Ņŧː…Ļbp}ķÍčjSš¸žĩņŖ5”pČæÖe‘7đ1QKĒÉ~Ķ(†%ŠãKiˆũāĪP}šĢãÃÖ ņČ Ā)„íœĘ 8<ķÔŅ.™¤Is&Q^åbōŠ,¤ž˜–ƒŗ2_ÔáŗĶ,tËXe•lc•ŪcƒĮŠĶŊÕuU–ŌÖŪ;ļOHÅÛåPéČĪ'փ iSÅo–ƒŸrĻ}*õæcĒCû”“ˇgĶۈYœöĻn^ūę[‰"!†Õ‚~lzũj˙öî“áhŽdxŽ Ä›BĄP …OLōkSûK+;Ú§›#<¨1éO‹M°‚´ŽŲœĻߗ֕ՐYÜČšÖ¯tĪ´-Ҏ¸"ÔÜDČ ƒŒ“ĮŊBچĢœW#U†Q$đä”V8#éī[0é6ąēAfˆ˛ >wN{{SbĐ4Ô˛–ÕlŖŽ)\@ŋ{(M™Ėę7×Shú¤77kt ģ‰Āø”ãzŗ{Šęmb+{Č÷Eå—å2Ā\g­mÉĄéá]”"6Į˰m$t5úE›´ˆö‘!ÁÄc’:*wBŗ3—PŊēđ¤wÖr3ÄwģØ|НWĘ ‹ū¨œc§~žĩŌÁiŊ´py` R6TR].ææ-8[<Š€„'1)@=)&Ÿ@hÂÖu'Ŋ†âIīã-oĸEļ~eŧœķę ž[û‹ĪOÔ`ļŽQc€õ¨@äzįAũ(æCŗ9´ŋšƒHÔîāÔĨ¸¸‚i"TbcM˙hā*ÔŅ.e–+•mF+ōh×îŒtĪZ˛/ėåÔ.lV2ŗÄŸäĀ!ē`÷Š’m‘R=‘ĄęĒ  ¸%Øã-/eļ°x’f0.Ĩ'ÚĨ^X!Î #ą8äRO{t,ÜšæÕoâ{gØĖÅT‚Ūä u5Ú2D pä֕aO5xųBã4ų…Ęr4“ëŌ­äڂMį—‰–ŅcŒœtĮ_zˎōtß2Ūí›í2¤ß+ķ'öäWwu"(mŋx¤V&Ĩ¨ 9­3qs0‹ŽĪ|cڄÁÆÆn‘wqad‘­ĨĪĪvҍa‘“ÜöÅtیjl““€k#T¸¸ŗHdËa,Š Ôdã"­}ļ8Rqu%Ŧ1FËËæōIÅčyĄë¨-4-‰”ē$ŽŲ$žŊqV"a1‰öļ9<÷ü+:i­-Ŗ‚âKøŖˆđŦä˙BzÔ:ĨôŅĮŖļy•qp#w@0#×đĨ`šŽn•Ø|ŽAl{Oļ•Žã"¸q‘×5B SM¸Ŋ{džGkmĖč21ާß-ļˇĻ]€–×ņŗ•2ûŖ­+挌 ČėŽ8¤VĖ6ķŸO­bÁâ ČmŽŸį¸Xɒ6%Ŋ€õ>ĩn ^Ōúú{8.CL ä8āāāô84œZ1b9˛y~S(ۜúŠąæ„Sû˛IĮ ĒW—i=ÕÕÖČÕ@,œĮjŖ'‰ôdIīŲ `+)˛=út÷ĸר/ÜÛbɜF_)“ŌŦ[’~MŪ¸Ŧ[­kOĶÎÉĩķ(#8Ą$÷­H_ˈ¸T Âō8ĨaÜģo,˙,đzŠˆfÚÁYˇ7ļú=Ŧˇ—Rˇ•ˆ\ž¸č*Ļ™â7]š’ ??tCsŒ¨ëëE´ÕėkČH%”Ēô­œ‘šRTŒo$úšcl|)ôæĮ#@ŎƒķžÆ€K9;ˆĀÆ 4"r?{‘Ōœ+cōâŖUŪ~0;RŽ'= *JdûŖ${õАąáGz†ʃžzšš<7Eī ŖŒpāmũi⸅I z‚IĀã­6áRX94l6°a•Åũ9éOtėą¯Ø¤ûbŨ™ Ų7g$õûŧb›ŠčgZ“Z!p­å‰ qĪŠŦíbÚ Q-Ąi3˜1Û6ΜƒīĪjŅÖ_=ƙ1uŊܭ–Œũîs͝˙ėë¨ $zsPķáÚW叞9ā{QeÜ.û0Ŋ´iÄę6qōm. ?­9î ķŠyéæ(Üˑ’>•ʝü+˛éĒŽuēFÜš žyĪąãŪĻĩĶ.-õŲ%–ĀÎŪl’­Ņ›č6įŽ8ü(q]ÂīąŧÚîŠĢ#NÛîäâ@xĢ6w÷vé5ŧĘņ7*ËČ5É[čˇīļ1!ˇ2 >dá[8úõ•lønĘëMŌÖ ”]Û*ų'úŌi$ ģ–nĩ cė_rą9Pŧ• gŽÜzQĻkˇV!šVœ[Ŧ˛dc°ÉôÅgYÚęĐŲÍcäÛÉīJĘ_ û˛Gã¯&ĄˇŌ5HŽÍĒų6mm&\ļâqíĶå™ĸĘÁvlĮ¯ém ŗĨā0ÄĘŽ@œũkŸļĐ5˜­õy­ŽQB–'å ũ:~ąu§^ŨßYÜ3Äĸ(Ũ\bIaŽ8öŖ–7 ˛Ké“Áö¨LާŒ[qīĶņNoÚ­Õ´+‰MĖbT1DHÚqÉôëYpéZŸöd q ,'cÎ1čAįô§ZčWÖæÍ–ę"Öņ˜œyde8éĪ^)ōÄWeëÚËq:EōՙJ.Cíę˙_­Ft`m‡įRŨÉî=)ļēŅ›Xū×;­ŧMų?ūĄEĸ‘ŊkŠ[ŪŲÁę^Û¨¤)倠pž€‘Æ}Š$Ž7{ņ }i4õ´¸‘<ÙSåyĮAŌˇúĒ–$ ôõŦ(4y­u!uŨĘÛ ¯nH ŧŒ|wÅi[ivŅę-xļáf+ˁÛ>ŲÅ'nƒW4P‚íߊÃLĀ 0ØääúŌ€UTädņH†hԜÜ:Ô>aveTFę$}¤œŸ—#šŽĮa Iéķī@ĩøŒšöQ”ŦāĢāäGJÍĶu94ũ'Gĩ‚ĐÜËuíÍ.B‚rNkCS˛[ë?/í¯mâV\|ĘF œúæ°5 8tĮĐŦÅíÃ$s8–Eیg: ¨ęŦ&ZēÔÛTÕôŞKRfFX0ķt=Ž*]TkŖö{][k,ŧ3“€F{ÖĨ—DŗÛjë$ņ›}ÛHų‹}âO|ÔZvicr˛%ÅŲJ¤o!dLõ (ŌÁf,:ü×펛#ÚE#B×%Įu8úÖ œˇ˛KŖĪ Vây$šß$„üĪ“œāz čĸĐ,’ũ¯ŽPŪ҉Foīmõ¨[ÃZbAÎ+"5V=yŊ;ĄY“ŨjWSˇąļŦōDŌî”  ƒ¯&ĒØëšÂØ Õd¸–h¤;NĻvãŸjŅšĶ,îR7š)K§cFÅ\qĐÍfišRͧųWöw "ē’HĖͰ€I ‚zJÖŊÉ Õī.“Hšâ+bōŪ<.ÁOĘFđ ķĮŨ?Ky¨ęqx†XmūĘĐEĘĘųŪFN@>ŧT°hēö¨!E–8&gPŗ1 &yī×üjceĻ^j?j â Ą(įcŽ^ô›AffnëRiW7ÂÚŪ8ÖØÍ1Ī#œ`xīĮ4ŗęÚÉaēŗßx\‡ō[åÂîúÕãĄi1"†ÛUÚęĖÄc¸<Ĩ5ôM.AxOú9Ė`; ™ôÁĸč,Ę3k—Pk֖o=›+ŋ–č2[…ÉlįžÕWû_W’â&ŨkÉzöģJ1ÚF~lįÛĨjĪáŨ"{ĩIhbâBų?xtĻ6…Ĩ´$}œdķHgcķž­Œõ§îƒš>‘¨OwkwžYšˇ™á2;N:fšũ2˙QĩŅ-"íäšâGŽ&u* Ääį“Į+n ;ZÂčŗŪāŸ›­"h:tV^OŲPDĮq’õĸč,ĖÃyŦO¨X[ÍqM4Ō“p%Xp2{ƒUUÔĸĶõ̝ļDMŧŽ‘Ąˆpyô­K[m"wAl°Ë5šå@ū žÔétÛs Á6q‰'9e6:fž‚ÕŖ*įUû.Ģ{yY%:tnúînZ.ĩÁĻK0ÕasæDwG´”V xī[6ÚUēJ$X"VTpA=*xôø-wy0Dˆy*ˆ>¸¤ÜBĖå.o #ÕgŲʍ–_[ äu­?^)ŸKÍėŅBō‘'’Ä|ĨO\~n•ŗ%ËgŠč(rs‘ņĮ-Ž’Ņ؃ļéqję‚6úUqoqeoeå[Ē/ūŌ°+q€FŅúšéŽtHukŨm u18áũōåV&XVĻ[ČKÄvfKZ9’VŽrÖļZĨϞ燨íŒCÍL+€ąÎqŽŋSßĩ3N´ÔlŸN‚X!ÃĖ’_Ÿī+ä8įŠüĢŽˆC>”ëä1bd‘XSÜVNqöËũcí3@Đ۔d\ÚFy9íG5î2a°ÕWOĶ뤆ŨÖáe 柙A=€÷ĢÚvŸŠézžĄ)Ž+RŅĀŦXnęXņÆqÍoĩũ…ĒÃs5õĒE'Ë–oƯO4)hgk˜Ō74Ŧ~P>´œ‚Į,—Ū#đ´‘ÉlÜNŦŠpUg†įš$đõŨĮÚä+k›Ë5‡;Û!‡éŌˇ_PļûÅÍŽĄ`Z8ō›!mØ5Vk–ģģ°Ķ"ēōž[vž[ˆ[@gą'ôĸũ‡§S)tKØ/^HŦėîc™bI ʒc+€vúŽ3Î+jķÂúVĨ¨-õÄyą>W :qíQOĒYÛé­žģjnP¨2Îwg'ãĪĩmÅæ%˜ķĻ÷GûŠNL_ŨÛZi×rÜEŊ"ŒģFŨûâ˛ā!ĀÉĻļæeũHĄČũ{СĻÁĩķëŠv@RFãˇƒL9āqøÔ˜lācŪ€ ęyér0rpE5AČ=OŌžŲûĀsëBĐ:å‰Áã›å…ÆĨwb–n˛Ã‚ûŖ[=õ­I]˛ãĐWu<ąkž ŽŪBˇ_gŽE‘Ní^ũUqÉnĮfąÂwƒ'ƒĀĒÆÔŧ™C´cˇq\Ĩū¯+Ûę­o~áŪ'FŒƒĩ‰ÁĮĻx¨%ē–õI#ÕîĪŲbŽXÄūŽœ{ĶP™ßͤžy8 Fp¯åU$Õ­måŗŽ}ųģ;c*ŧŒõíXēėä_ÜAys%­Ąļgd‘”ŗķ“ĮR8âŖ–ås>ōxīÚĸdb1Ī#ŠäÖ\[ÚyŗÜ0ģŌČ_™°Ō sž VģԖK+syuw ˛éčb’6e&aÁ“ĀāĶöl\ĮløŠ?›‰kĢ}ļfUĩ•")ž9˜|ŽšĮā}Ē[wž_ ÅöÂVy-ŋzGŪ~ĩĖÁqš~Ž’Íu"Ũãxâ åQ×õĄCqšZĮA‘ZßĢ$ ­.|Éė=Mj\HKÅļ6™ !Hã=ųí\b¤ą 3í&äģC*8;‰ĒįŊŖi,vēMš܉žÕH žFÖĪåŠĨ\E;Y@¤piĘãĖšÎz×öxg X`—íRn–7°W‚1øÖ†‡2Iâ[ųbļž(na‘Ū=ĒHŸn´8h GWįbšÁĪŌĢĮ#2žŖŒqÁŽSÄi,ˇĒ!ˇ–R#Žš`¤đ:÷5Næ&ŊÔĩcą•'FÆ OÎ įÃŌ…ę]Ë)œŸŧzgŸÂŗoĩ™læ”A”A°ĘĖØĀc”c“X:ĩŽ Ō]ÛũŽK‰î3 ʎ"Āî{`Œū4ē‚É.ĄĒZĨŧ˛M-ŦlXƒ†të‚}éMDNLė%•FY€ŨĀÉÆjŒz•ä~ 6.ąakį'?6CcúW=*ãʸ}ií%´1ĮL´o“ÉŗĮ4ēu•íĩ͈¸ļ–w6/Ėy “Ŋ{`Š9l7#¯kŦÅ ×[Ôdr}z…Ž­c›Ë’dIN0Ĩ‡Ė;qŪšU[Û{ 7~–÷!!kg…ĀĘ6G̓ÆÍ&§kzƒPDĶÖ_ļ„]Ã÷8P0{đFxĨĘ.mžiá‚y]V5亜=I¨aÔ,'‰äŽōH×{‘ 8ŋJĨröÁ,ĄņWl}ãŠÁĶėĩ ËįCũ„Á +s&@ûŪ”(Žãrg[ąĻųRNˇPyHv3īAôÍIŖ§\ųĸ¸›ĘųŸ ×>žõÎ^Új'G°ŽŪÎĩ(Ų"ąS´m+pj+MQm!í^ÎÖ' HXĖPƒ†8ācųUˇ ˛ũ–´˛\kL/Ą{xY IÂ(aĶ#Ūĩ¤Ö´ØnÚÎK¨–åSySž3ŸĘši"×$}Z9Ŧ î•<š28īœzsšŌŽ ĮÕf™­EqŽV2dŖ{wĐâ…vlAĢé“\-´SĢHŅy …8)랔ļ:žĄ"ŊŧŒÉŽŒ…rB29ĖŲéúͭ͑–ÖÍmģĖÉ9ÆŒ{+[@Ķ/tčį{ãÆä!ˆ’ąú€O?…'4Ųrī\´ļš’)<ÖX°%xĶ+zn?•6ë_ĩŗŋ‘$ˇ¸&%•ž4ʄn˙N+.ëBŋ{ûŗi{vˇĖ ÄrGš‡;O¸ų´[šnŽā[ØâK‹Qn‹ŗq{äŸsųŅh…Ų­'ˆí–+×0Ü)ŗÍhž<CœöâˆŧAm˛âK‹ymŧ˜Dų‘FJLÎ{V\ēĄqsr'Ô!UšŗÍļ˜î9÷?;ûÛĖkŊDĘ­h-_÷ 9ę ;!jK‹!žÂâčZÜFUˆ €MێÉā ۆčĪf“ȏŲ¸Špã‘ÅsķčړiÛÜëfF$/˜m×qŒß5§iiĻ• œs>‹+}ėã¤Ōš ŋˆ-L7o,3ĀmŖ2ČŖ,§8ĀÉôčj–Ÿr.ŧpîĐĪû °Ž^7ØÜ$t-|.+”—P’HæË—rXƒ•lúŠšßDš´×ᾗViD#‘|€ŽsÛ§ji$`Ã`Âė¸Pƒô¤`ŧüÜâ˜üÎYŗ×ĨfQŽjįGĩYEŦ—¤XÂ&9'§=Ēĩæĩ-¯_M˜,ģw ‹yäũ*}gM]VĀ¡M Ģ,‰ ÚÃĨdŨxuī¤Žk­Zmâ5PáF ŠČlv̊Vԗr–Šeļ×ÁDÚ."“ ÷A’i]kkĻ]ßy–Ōm†8Î7 „žįڙuáķsöØŋĩf wĩ¤ų`ĮåL›Eif¸sŠĖ¯,H„ė!sÎ~´ôĻŊĨܗP$Æ›¸pnũAjĻŠŦ>’čÆĪ|%•^BÁyc€w>ĩ†özŽ› œ’‹{uc<&™$íØ?OŠøn ZuēžâáS`T| äRQWŨ‡]ø’âÕî[ė ´d¸ĩ†rzmÖĢö;­RabŦĐĮŸŪēœō{ TsxbŪxæŪ]âä*ɗęĨJÚŧņ\–ššĖņ,R’˙yW§nŋãNŅ GM¯j0ŋ3OļfU‘Įž~áĪN:đj{ŨnH¯­­ŧˆĖ7 ¨¤ŋÎwĄ}ŊBÚœķHōÜÜ;M†Uķ8*:ŸsQĪám6áĖ’Ipî6‰ˆûŊ×´ Hãē°^âäOí5VW8 ģg#čMGöۍ6÷Wģ‚ÚmVāI/·ÆÅÉQŠļú‹‹…2ÎVIŽ<ÃËķúSfĐėn¯Ūi¤™‹`ēy‡c`7ôÕ‚ĖŠû^ŧ¯^8íÂ[Ī`6ręā~ŧĶĸÖn[_6yQFÄėFCēEÛ÷ƒt<öĨÔ´.÷SYĨF.p[k8鍓BĶ—R–ø$†æLüĜ)#{ĐšlõÍ×;—b–$̊d‘¯“$ ­˛E!ŽH ЧØÃ§YG 2H qÜM>OŪpYūlō"ĻÚĖéËeáũNę6ķe†gTķ]ĘŊ?LÕëíVüŲj˛ũ›Ø~Ņ‘ƒĀ9z†įF:-ôbâv¸ JžNō1SZéöķč‚°É™BČÄzž•ŖŗÔ…uĄöĩųeļ°†Ø-ŧ™f ˜õ­Ģ^4énŖO)rOē*ŒŪąš$˙DRĐ&Ô%›Đúփ[Et­oŖ¯&ˇüLžg†ŽŦŽŌ`(L’[< ŨČAËt 5,P>ņ”ųAÎ?­O6ˇ+—C‡Ôągö5›Oģ}í[÷qŠ ’ė3œÕ=ŌH´ËÆˇ‡Q‹RkbŽĶ6š;įé,˛ÉlĀ.dÎpÜSĨ…ŲŽä€9=iķčēœ,>dšo™ũˆlnašŠM‘ōŌ*“ȍSÄ÷VēŒ+¤Ęs|—1DáG˛:ë^…-´Ūy*@Û4Įļv•ÕĐ+ŒįŊ H\§mŽÄš°];K,s¤h@YqšxčOëx¯Z×Vxt+íDé …J‚:Œ sŪģąnXĄUUĀÁúTF)Ôĸb=Û÷céG0rœd•Ž™jĶécezÎ",¤ŧmžƒ Á"ēŨ_ɓÃģâÂvČÆvņũ*đIJ€Á89#5öM¨iRÛK!ŒL ŗ!ÁÛRåv4ŦrVö7šÚŜq0ĶžĪ{Įī čĮŽ]m>ūäZÆ-–9Fœöō9~°tę2?ZÕąĐî,-šxŌĮ‘åų͒ĻqŌ´|Š’w`ëķ(č)ļ+ÎŸ­Ũøwėeœm—H&?6͜ôã üëJ /ĖžŠõĩ Õtmō[´ģĐ7qĶĨoȒŧClЏNG¨%†Aq•p¨F:擐(’‰Î22)ŽHmĒ™'šéUQ&7-$Ͱav÷Š€ĪßnŖ­CEĄxI#AÍ=ɑAĀÛëւš\‚E \DĒŦI“HcCášúbŸŋĄ9qíL ‚äõ§mÆŅŒŽ¤ŌģŗUАpzŸj•ÁÎā ũM!HŲĖ…T°āf†ČÎNy¤;‘NėÄ\đXz}*Ų(X`ŽÕ9ä\÷¨¤E'!ŗčh)Ė€>ö ŸJŠpĀš=rqVXĒįw动Āā:w&‘CŦ\eUįĨ]e ÷ŗšŖ§ŠÉĮ¤ ķƒZ#7šËŒ(€üëÄĨEŨĄnTõíÍn+ŗ6Üķ\˙‰O™¨YĮŒã€1īZGrāõ2HD\voĮ“ZšVåÕmvœ`įéYģvÛÅĀ'kgķ5ŠŖ˙Čnמ1ũTÖĮ Ú ō@ sԊĩ”‹rzUksÆĀŨ N˙7ú˛rOqXœĖw˜ PG'­<°n\Љ$ç4âÄ+˜s֘„BĨŽÛĩNĄWĒ÷¨ae1õã­<6ņČÆ{ô&ü¯Ę3ĪjO˜üŊ89ë@@”)ÁÎĐU>vlmÎ2*|•įЍƒ<ŒTģIBŲ=ķԁnƒĄĪjAā“ô‘đ d͎įjƒëHŪ€8ÁĮŌĄÅžGGš¸,dũičCį,28Î)ĨŠËÁÎGš!en‘íKh€89Ļjd†ģ&1ĪĘ9ĨķJāä}iŦKœN)Ü,G=Œ7rÛO*ą6ä´iģå×ŖĩI:ĘŅ?•ˇ,¤Ũ3ŠU}§yĨķAVĀëFÂąCG´ēĶôČ­neŽW‰B+"ãĐU§TeÃÄ­Îāg¤/Lšl› āP=†Ęā!;{qX×öš„ē•Å´¤6匈āåķĮō­ÄÆãžĐÚņ aą¸ŽtŖan1˛T1SÉĒ÷ šōĀôÆ Kw,ąĮûžIã$Ô,n\*ŸR2iXwo(ˇ™QžDqĪ+HbÛpØûž•›$gnˇ7¯øU=ŨápÚ3éB`Ņp&>cÆqT-ô‰-ĩŠõ/ļ1¨CÁŽũMi+I…Ž}Šxy6‘œŠ; ęFŅoCÉR}:Ō€|Ā3ÛŊ9Ų™Â1ÜQ†GÁrGn9Ą€ŌŖ$=0{ĶD1†ųpR§ĘdÎЛšÎTBNåP<ņŠÃVŌy€ž3Qŧ8 9'Ō­nD_•3JG`pĮœtS@nôë{Ë9­]œ xb­‚G֍/O‚ÂŌ;hwėN3ÛíWÆYTj •įāŅv;!<„“*ĖAÆIôŠ ¸Hņ‡wbFiĢ…üž"¤/ČÉ}:Ō#H‹6Ö ’IĄ~Ķ€ņ#×ŌŖ ŧŠaHÍ$x*BÄ:ԇ*ŧ b™yÆ^ÔđSœŌģ‹ÍåąŒqH#XŽ„8ųģT…‘Wåäž´Ņƒ(É=('åg9Čįj7fĮZ’FÉ{ŠcŠĒǍĮ,H4ŽŽá#ą€#ĨFČc ŧ†sœš˜# rG`;ĐęP‚¤b:QvD^Ap TvĮjYS "|§×Ō§ļåNdųŗœĀPŦ°Į ˆĀéę) ?ŋYKpr1Š˛ąŗŒã歇Hw=(ĒF끜ĶĀÚYy$ķȧHōÍ-˜‚Į”q˙ÖŠ GąË3v9Í@ŅīJ¨{cHI3eI*č:ŌįĮzAb'y3ĮŨČĢl~IäžõBW>ĩ#/ĘĨx ö¤2E'æÚ:Í#Ęß3u>ԑüŦU@ĮRIæžCgoύ’| Ė84æØËĪLriI `m9ü¨R#ÆįQ¸í\sÍ!‹šAäۘD{÷m!ˆŠa„g×­5÷|Ų8Ļ!ŠbÎj‘Y_‘ŽN9ĸ(ü°@ tŠ]š2 œ}(Žō7#Ŋ!*Ŧ–G_šžsˇ¨Î*7/“‡ũ(960œã֓*G(Hč`O;ÉéœRœ×րō°ČéHXí<œôŖ šP0Ũ)ŲD\aAš‘ûĄpÎr{SI @9ä})ėO—Æ2EF8čr9úRĄūņe$ąĀĮĩG#HĖFŌŽŖ­LCÃ§jŒ đ;7-°ŧįœŌîĀN~ņ4§ü‚‘‰,[š¨Ŗy]•ÉÎ{TęÃ(Üy4ĀŠÉ}Įn1RdŦX@Ŧ3Č4Ī™†pō§ŗŧ)ĐRȸ wė}) y;攞Ôäbš H#Ĩ‡*Š×MA“‚üÂšŌ’IôĻžXUCŸČĐÜŽĄįž´VmÄãŠbü§nÜÔR¸ôCۘŖ‘ĶÖĄ ‰^Q‚X֔˛„Û‚@4‚UûŦ=č…X7ü 1ÕÃ*ŲÔە”náGAŪ•ļüYõ Užf;x?Ūū”ÂĒÃîŒuöĨܧŧōy į†RsÍ1†Wˇ¯Z¯+AQœöÍZbų8ÆŅčj0HSĐgæŅ]Ŗ `į:šf"Ŧ’Å"˜î_z|ÅvŦÆxĮsYō†ĘēœäôĄ ›Áˆ œ¯8\Ķ÷â<`î''ŽĩNĘú;Ī•›lè˙ ¸z…ŨœäÕ+(ĘįžGz~v)Úŧ‚=Š õdûäōMŋ<ˇR(ĀíĪëOM§h-‘ס•T<„’? qRĐ1Î8 >ėŽ×Qjŗ+7Ž:Ōcā*ũI§g€Hų ‰ÛĶôŲÁp)šŨ’ îÆ3HŠXžÃĄÍ %Ūwc u"¤ĀIaÅCĮCĀĪOķô “ˇ!A=°:SōN@ĘãŽj6Č9R'<Ķ;TߎôŠĄF äნŌ031/¸;ôÎI9äĐŌŽåPĮ8ęhLmęRĀÄNEk’>P?:.GáF@Ë‘@ ŒŽsڂĮqÛߚŒˆÆ~l`õόgåã=ũ(sÂąp3ښÆF+ŒīŪ’FPŋ3üž‚š8bĮ€$Pā”6:JUqŲFs×*7™Qs¸đ; šŽ)RWĘ1ŲÎxęiØÆ>Ņ'æ4 ũį ĮļIëFA`w’0?Ę@bzš@HŌ0OšŸL Yƒ‚Te‰ėƒŽNĩ 9—$Ž=hFä|Ę9õ¨Ĩ’ΤfyqŽįԐ:” O\uĻ4jYH‹§&“įn gĻĘƐė<ęM*8æ~{ãĩ ‚ÎŅĮ@M$ˆÃåÆ MÃwĀvÅ4mn'ŋš‘b“œõÅ5c-ĀgÜTSŗąP„žI?J`wŨq@ۀOãjVŪ¤gnOĨ#t!G>ôÖPdqõ …rr6Û43ہÚw)ëŨqĩˆ9īÍ<ļæ9o—ԁ fB:=ŠņĒų{ˆ\‡­ ūg@iĖAP1‘@ ŒN0|ŲP2OzPÁ;rHũiŊz‡Ö€Ą3ˇ9掓‘j÷ƒåõõĄ$ųR# qPČę­ŨŗĐ ļå ĮĩBåļ‚Ģ’ši‰ķp ’}ēPÎĨˆÁãSK6ā0r;š”€Ÿ—>Ũé ‚´›ˆ9č=…9ą&üŠ8§e÷;>ozˆĘd$¨ß€]ąē)ÃqØRĢĻÁ­"‰ų*WĐRģA3ŽįdÜëMgT‘ôšĨÜŪ^K ôÍA´´…ŗÂņëI"F|˜šęGjsąč¨I>ô) wqL$üž~”†å‰d͚‰ØŒíâ”(Ė[qĮã9úR}8Ǟ9ÁĪéŪ­ģA€AĒŌŊpF:Đm[†P‡5tēŠÁĒîéûqéVÛq:Ģs˙5Ģĸ65x9Ú+'iņy!¸˙ÔŅ—:´ 1ÎÎßJļmöO@†måw!é XÜÆ5J"ą˛ˆ^­X2nnF ÷éX˜R7 ķPą-‘Éãž:ĶËđÚŧœS ŒQKĮ†Į8öŖĪŪq‚=qŪ™¨\’ŲíB1Ü vÎ{P ’Bįœđ}Ē}ĘŖž=*(åËíÛ4íĀ\1‚€Œîä÷§īĘā9ô¨RWr¯^Õ"r9qü¨ė)gžM p@ `j2Ĩļôäã­$K—+Ž(ß1*÷ëLŪĘG÷4 ¨,w}j2Á“jHô4Ä<ŗ°-…S͚“z*Ÿ^Õ-ÎzÔ[ōqŒ‘éJĀX2ŋ{'9éNFÉO›ŋ ˛cwnƤRxĻ‹nÉ?Jc¸Ü㜠MĖÄ įšiVŨÁęzĐ™MßęōO(VR¤,X#Ž{ÔkĐCc֍áF7(8¤&Qæ,Ą2á<î(w Õ$v⤠1ūŗô¨dEÚĨxĀP6.r /^ ĶJņœWžIįžŊŠ\‚xĪąĄjgˆŪ9D0b=­!pã Ųōhä’ÛN8ŠC2ˇQŒtÅBåWgŒšA‚ysĪ8 Fu›$ģrŧ~teŲˇV‰5ŒŦâ}G‘mÜs¯ô #M木Ā=*ĮĖ9q×5ĐĨ˜HŲ=iû,’[‚Ŗĩ #ļ6ǁ׊QUYžCĪaڔœãcũ)0Ɯā‹~„ÂķÍŗĀäNۃķO˜Šāgˇ(RUFåô ÚHŪ@ÁíQŦ™ `ŸOÉY؏•@įԐ–m¸ŒžzúŌm ¤—ü)›Jžwˇ˙Z€;„VfQÔãŊI™…Iˆ)#§ĨAäŦŧŗ`tŽ}iËB3Ÿbiˆ”–Ú7 R,eœnúĶxvO^”n;ŽŪŖš¤ŲwÚ d~”ģ o˜Ž;{TdąrmĀdāpi鸜2O@OJ` Ę% />Ŋ*A‘Č@ƒŊ898āíęj’Į€1О”‡$–*š÷ĻbŦHÁ€ 2 žæœí? ¤.OË´ãŽOzkĸílžĩ+1@ÄzŸ”{Ķ‹Á,Õ5OČÅŗÔëV„I#îwÂú wpT…äâĨ…§?ĨEq4p0ڄî8ÎiÎAÛōŸå@†ŗmdįš]ÅÁ<­'Íģ!IÉčj~IáWt ™ČWâ;{Ē Œį4Ņ.PĩĘ`ŗ}Fi ĀōÃ#üÔÖ9å°÷4ŨŊ6¨ö¤՗‹ás’}h!,Cœúb,ŦC6;QhÁm̐Ã8÷ d  Rl÷=čŨ }Ũ0{Ķ\˛‚žž”ĶæIa9Å+ē—`sĀäöĨ6ķģ=¸ĻĘšČį‚h2+d­`U‡cž īHFŒÁ9<ĶQdxƒ“NÜœøÅ!ŽYÄ Ą˜_ŧŒķJ…˛Wjž§$LœPļ n# t 82tĀņHß{ ŲĪsڑrÄ ũG zŌá(`xúbŖgeČH8ÆGZx “Jfw7ŪûŖ¤&|> ‘ĮLTGsäō§"Ÿ+íæ’j-ÛFíŲÍI<č3ŒU-Œŧ7r=‡Ĩ^wū"zZĨ+¨ ĀM6Ķū>ž¤sZ ûâŗ­ĪīŽzí̤ėÆH9Ģ[-În7l÷?^ՕĒu›b˟ŨÎ´bõČõīXúĢ•Õmˆ<ųx­h‘PÜČ'0Côũ֖„ö­ščsYš˙Ũl~mZú `ęĐ)=T˙*ŠlmöNåFėML„yƒ¸QÜöŨØËŒ_-˜3=G)ŌˆN@>­ÍgÜjb3ąFėuÖ ô.ģQœS•k’@'ŸĨ`>Ģ(#’3Ô-(ŋg*ŏ­W+&įBPH'E Q“'V?-dExĪ&æRÉ̉uÆ}ąÍbšt&Ų2PŽ™Ĩķ)8čx" GŪĢšŊÅJ6”o›ë@\GyGÜĪ${T&V…9!s¸|ÛąÁÅ#0$(#ցØān#LĶ~č-Ā…9€ eÉíM;[=xí@%ĀT¯ķ§„ãžëš`U9Álã m9PNŅĐ•WŒwÆj=ÁT–‘ōöĨtf8<š’0|ÂÜr¸ĀHŲ|ŋ•z´­&Pä#ڐ@í(‘H Œ;Ôæ&ā61HHAu Ė@č8Ļ…Ypv㓊œqü'h8)[%Jnjôč@@ëīCežé^•BĪP38†DÚĮ߃W!Ä SšĸGEōƤ0ĮR}i˙4CvwxųsüŠ“ Ž™Šk6YĮCšr)ÆsÉõ4Į‘Æ@۟­G$‹n¤˙*ˆū䌊s<œ ãĄ¨ÜØŨąãHĨHĀÎJ *°ÆI<äĐĐJ¨IAëĪ8¤RûIĀ˙Ч° Á&ą['Œtæ‹3pTmĮZų„.Į|ôĄÜ*áNsMų2y#šŽ@!“¯JzÆÛËČT` ŲlŠ”•Ā;ˆã@Ä#iÃp;â•H ”ƒ3œž´äPŧ3{@1ÉpXšk›;S÷‚˙|(ĮĖFOC@†‡^X Zļ=3×Å]Ŧ˸c“ŒĐUŠ…ÜĮ P0ml9Šcå'n:<°¤qÛ­ˇßė(ą‰¤ß/˜‡” 9)]ĘzüŊhU ‘‘Į4+Ū´€ŧœw>Õˇ™ 0ã#Ž*~yÁ“§Ížzt ŲFī3?끚#,sķqÆ¤ Ô):`Žh”m^Ŗu7æ'ķĪJVįnėnöĨe9}iÜq¸ ‚6ÜÜõŠx$c挎OøĶƒ‚4‘ĢŒõīJw +ŽžÕ0@úSŖķ(rxP –zāSļŗ8ÃQÎ䂨ų•r)ÛÎĐQHb3@Čå‰[l¸…#i§m@@'?ʄlˇĖ#Ž:SÛ á@ĀI ‚äišߎjAÎBđ:į֓Ž1Đ5Tw ãéīNȁc“HĖąGōläûæ•dFAÜGz`7!mπF ā‘ƒęiÁÃSŽÜSw.õʟʓũĄ‡8#RĘđx÷ϐJļx>¸Í;cU=}hߟœŒ÷ 0ĖNGÔ(ƒ)ÛŒtæ€ÛÆåI'ĖŲÉĀā PdÂá@>ØéMgpÂzúP1¯Ë8wÁEĐԙũæáØT&}…\ƒÔŠ~ü÷$  @H]—ãĐS7 ˇĘÜũ(’EÁlt•’QōG\S ‰wŒœšp#ÁߊŅĶ=ēS]ß;‚gÛ4ų$M€cw=4ƀrIëŠa$s°:bœ¤ē|ūœņH €=ũ)ėŒ~cÔ‡pcÅ ;†`ž™4„ ¤ķõĨ ¨BāįĐS@8ė}O­1äa*62I#éHcؐ„ˇž(]Ŗ'žžüîĮ\S÷6Üāe‡Z'úÂ~´É03Ԓp) ­†$m Å rPoʐM“ōSM*–'§žãst†Ŗ8…E!Œqš™¨&Î8#RŗáNåõÎj´ŦÅzũęmžã1Î?úÕp ã*HĒ0°ûGqWU•r9úV‹b%š‡š bęČXˇ8ę‰ūuĩF“ëéXšĶnÕm‹˜ˆã?Z*˜aBÁsʓúšÔŅ 6­oÔŸåYmūĸūÁūfĩ4/—[ĩPŊ‰ũ*Ĩą˛øOB‰X(ËXg1Ļæ `Taî+ÎqJŖqrfn:VQ‹“%Fú ģžYĨᰝ…S’=íËp*ÆĖœŅˇžEn ‘ˇ˛]JQ÷šíQa—¸ zvĢŠŠÎ‘Ų"ŽS9ŅVē/ÆåÉ-ėjä3tn€ryŦ´•%!°xČĪJž"ģxbCG3Ņ›)!Ú3œqWq‚2OVLL)'ŒUÔbqRĐÃr@\c“MŒî9 cŽi›˛:c֗ \üŖ¤›Øg/¯ÔbĮî€>”™,TĪ&•—h4'8Ú b˜ĒĨÆW“īHIĀÚ3ŽžôX23ÉĪĩL@žÔ¨€ŊG'4¤tú’(Üw °įĐb€%Ü$â›Ŋ˜į?)āi0E+v€G`hT `Ō?ęÃ`ƒéC3.T{ŠD ‘…'ĮA@faČ$ãžE.C`åFzÔoæ;ü ÷§m;°āM`2õ8Ī\QĶĢņž˜ĄÉ8`ŧŒQ‰•FÍÄphĖpØß×ĨF@-÷ŗęMIßæZqėĀ4†Ux’ŪaÆ:‰Ņ[Į5iˇL{b˜™Æ ß4€Íx\¸#*GņĩĄevg'b$^ˇ wŽŸˆĒŪVĶæ+ޝč¸X֋(0XwĨ•ûĮ5RÖč\Ač㨊.úU"+īcøœĶŅJdÁīõĻp‰ācõ§?ĘĄ:Ž9 Šų•[ūqv@\ÔhT ÆxädŌŽr p %IK¨`¤d{TQČfRįk$Žâ–@Jņ•ĪB:Ņ$mĀ8ë@€ `ę¸önYĪzzŌ(ĀËŋ'8ž^ĀF:ä÷ c˛äüŖJj‚IÜIÁčØä›Šr3Āé×4rå€F3ڑ‚îĪLâ¤QÃ ‰ÎčōĮôæØ$ƒÁęiĻuE\&âNĩHV@ŦŨN8 7ŪöãŠTA–.ƒÎHĄWfy8<ã4ėļ>o€•ČĪ Ō ËnäņĨ!ČÆKzŌîmÄ*œzĐ’zāRä`rN?1˜CqF~`0@Å9_ã9n8ĨĘž§Ō˜NäsíQ ãæ–°9#Ŋ *Îwk6ëĮÆ(\Äį@î sĐuÅ AnŲŠ„•WŒƒĶ'Ķ÷J‚rŨNzS 7āŌî~PAČÍW<¸€1Å)u#qä8Š˙0ƒ†tsŒŌîߡæŌĢē ¸GØqžr}ŠÎy œ1Æķ ,=]˜įp"¤FvÎã߆5Xĸz•¸!Ŋ¨Xa<•úR Įļ3¸Ōo ģļœũj"ãp?NOj`NX´žéMv!I˙tTxTvrŦyéšBåŽ6?:@JÁ„j:sž´ŒHéĶu$đsß5(`T§JÂĸā`8Î=)G$Ÿ­4H Ãô4†Eí›8äô  Cí“ĮŊ2IĮ';@éÚŖ_™pũGSŽ´§Üˇ=ŠÂîwąČėOŦ§$v›ŨŨģõīK¸žåĪŠi…‡)*äôīHØĀfŨĮÍqōœų̓Ž ķčE īŊIĨ9œ{Ô€¤d“žĸ†aęŪÔĀxÉ=‰=(ÉrFPāzR(RK1až”ŨëŊ‰Éõ ÃÎC|ÄcÔTD’F#š=iųÉû¤æ›(FI,:úP1Ēėx-Œĩ"2Ã7õÆ6Ⴊ‘Í5ąä€TŽÜv Wīķ0Ž”Đ7ĘxH„/¨č,k„ÆÃŽô†Iŧ āŸJŽ"o0ŗJq—=Šņ  v‚;yÅœ'8cí@ Y™ąęjdp>PI÷íQĻß/%AŨĐÍ;.UP=¨`4–o˜gõĻī1´’FHĮ÷ƒĨFįsüĢķ~*F"d9ëÍ3p r2}iŪcoöÆ*v#ã<Ō€ÎŌvdÆjŧęx8vŠË“Ŧۃpķ2ÄB(<ŗ æ‹É#]—íˇj¸ĩF6>~P8÷Ģ€ŒsZGb%šÔĀäÃ×P RÛĖ~6g#ˇZÛūÆŌší|•Ô`cũÚĨšpÜ͔mD‡B1˙5ĄĸɡZˇ9čŊ ĖēnTgXûčÖö‹Ĩ2ē˜aļüĢéĮzžVÍSĐčŪc)ĀnŌ;nH\õŊhgMÃ9č1N •$Ĩ `8Č?7lU[ƒÎĀŨšâ§•Øez u_jĒmf.zäŠ,;•IĢ*| uÁëZĒūlqąo”ō1T ĻTūu.šŒUâfCĮĐĶB,ī"B™ā ŲŠzœqĪãJmN9ā}ęUļPœ1ëÆ)ˆ†ÂŸlRm8Ā=;S„Cyņô§ “ģ=Š i,q¸4¸Px?\Ķ °`įúŌ•äĨ)᷑ģņéHī‘×ëZiVyNãÆ(0Œ– ĒOĮ_zxe$g8Į§zyP@ĪsQD lëŊ˜ÎIíūíš ôĮ=hÁŒdîĪNMIœeHÜŋJrc,i  =NzĐ1žb…oŨāö=<Ŗ×ÔĶ ƒ‚xÅ8āŊրe\‚=ÅG9Î}iř˛8īŌĸ‘Ūž´/@SÔôĄÉųy“L,ĖĀSŽ”*;T( gbÛēŽ”å”Ü*9ĖÛHŒ÷7OԘŗqĩønāķ@ęrOSéNÉ<{b Y–î)[yU+÷ŗÜĐ"AÆä’{͇Ū5]ՀRķÁčJ†īQ‚ČâA!ŨĶbæ€/˛žLTSHÆöŽBū' Ŧi|A šĶî%\}īē?•UžÔZxpöwɎ~R@#:,ÅsĨ;ƒŒ”Ī@Z”+îÉÛĪST-įÖBA‚ÐF0}ĒÔr‘\me⁲Y>\d‚OĨ;•ÁqŌ Ü­†Á=˛iC¸‘@’%š¤ Ė $ J„X¤zšq3“Æ)ũėųa´´×ߕîį' ļ6ō֞]æĀPĢ ‘†8†iØ9 F{w¨ ؗæÉâįƃMįŠ<°éšŒ4‘° .HīI¸2AÉôĻíQ…Ũõ¤ĒۉbF)îā` c§5XPG$˙* ŦĖÍĮl rËDÅąĐI9ĀĪ5A›w™ČíŠ@č­ļ0Āž(ĐŪĮØô026 zb We7OZ˜X`š .IÁ+žÂ—å Ë´n#ķ¨rJąũi‹!  Ą$žŖĩŲ7šĖØ8ēĶ‹7Ũ5X2éī@;Ë›ĮÉ|Įˆ†qœį¯Ŋ56ėÉ=ōhm›wrAë@‹lƒÁíF ¯ßã§ZLQÆę!a€§ƒØôĨļ"‚ŲŠKųqˇQßĩW`Ēģp´ōĢ(Á-‘ØP ‹¸˛ā`Z .sŒņƒNT@…qŒSM<.Äî9=č@>AŒp9Ļ4Ŋ‡ōĻœ Äí=¸Í:ƒˇž”Ŧ‚ œōzûSK:‚C/=qCž…9úÔAʁœzŅaÜFl°QĐuĻ;7!G=:Ԝ.qМįĻj< ā’8ũh°\xPq“PHŒō}ŠK’ÛwrzŸJEŒážn7gšV ‘‰×žÕeps“TwsĀį‘V•øĢŽÄËs\+ŽU•†;ĀÖæßw #?/øÕ÷|­āaąœŠŠ…ĢJĩ¤VŖ‹ŗ,éÚP’āŨÜ/F&4=šęk A´TĖtĒÄ fˇØÖ(ŗģš]š„ô¤zƒDĮ\!¨ lŒTŌō†ĒDHAwÔˇ+mJø—–æļeæ*æîķ¸ķHšC"öLČj-.VK€ĀãšeĪúÃÍ2Čá†=jíĄįMęzV6čį­lĄ"1ƒœūBšF6ũ¸ŽžŌ5eRGZå’ÔŌ,›c°RX u˙ëSˇn$qĪZLâR€ū´đ>sõÅAc2ŽOĄ§@ ôÍ=99Ļ–<{ˇ4Ä J3|§×#Šhv,IŸAQČė3ÉäRÄÄĖAį R^ßå#ĩ#Ē€'đĨPœĮvAĮ\tĻs„\šãĩ8ŽAķ:qŌžā,H@ÅŠ\ŒqŠ€#Ųr;ŒĶš9÷íS•9öĨTP¸cŌ€# •#v3Ü `ۃ–ãųÔNJX’9áQĘ0G¸¤ž\ŒŋáMfÁčC†–E  žĸŖ_õ­ė8 `6…Û¸džĻœß2û͊L ū.´õP"R&€&dĘē…ĨKœˇj†6>aã$*yJ@‡6ÚÄgëQˆđŖo§Ja?8÷53ĢĮ†2@ą( “UUÍ­Ā”øoĨ[æQŸ\T<—>ԆhyĀÆ2¤ŸJC?N9ôŦm.W!ĸ-•^žÜf¯ģ1$ōGZĸI–mĀwÉëéOÎ,*Ąb̌đzæĨ?* (|ÄfÎÜņ‘KŽI īLÆÔ$ō‘Š$bXsہ1Ô✚6–ûŖ>´›‰Č'ĩFdc(Lü¸ dŒWvqO\#Îč3MŒ›ē’:šjü͓ÜhK€w›¸ãŊFĀgŒ9§ÄŖ p3€sPČÍįōs•<RbŽœŽJsˇ*@÷=*(ØĢoëOg`1ž1@1ęewß8Ļā dœũzĶ\“7zVåŖŊ(Ø\íȝ4‚såœq×­9€Ž>đĮ5 ŋęYņȨå`#ČÉĪ(۟s“ëÛŪĄ‰“oođĢ;‡>” ,9 ųžņīOÁ ôuúfšŧĘTôÚķ˙ CĒĖyĀ_AN-Į`TųŒ€“Å5@Ø:œbąĀR8Í+?!xÎx÷Ļ?ĘÜv8 ¸ˇ|ŠŽ9' Ō¤ųąČ\ãĨDF $qÉĻ‚Jdžq@åÉ't3F įŽ3Qäė#&šx‹#ր&åX’(’3ŒŪĒc1€z Ôą V Ír~™`Ŗu"ģš ‘ÜĻIIäÁ#ä_ũ›ü*hy-Éõ w,0b:{sI‡!@Ļĸī¤œ}iŸōĐ žž´`ŠÆîßZˇy¨F3Ķ4Œči@Æ=€cÚB7a”œu"šI'i#v;RÔã#5ņĶց0.ÅKŽ;ƒMÛĩI ęi‹÷ Ī|S”î`Ž)đä š¤;D_6™Ņšœę8s@ŗØāŠc `•ÉúqP Ä`îĶ÷˜Í0œYßʀ¸‚Ŗĩ*ŗôĀ=zŌSãšĻÁíī˞ôqË|¤áh߇ 2žqĀéO1ŠF8äĩ]cUMï'ŸZC'ËdF})…‰ÎâžŲôö¨Đ ¤ãži$bŽéĪMŧŽ8ëīQī\îwĀ=9€o/#ŒãŒ0ôRrsÍW é×ė?Ũ<ņĪNôˆë˜üŖÖš˙,|TģyRŽxĸÁq‘žûƒ&xį¯FØâ˛-ØųˆsÛŖ¸€1TK?˙Ųleptonica-1.86.0/prog/leptonica-license.txt000066400000000000000000000027611506303110300206700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001-2020 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ leptonica-1.86.0/prog/lightcolortest.c000066400000000000000000000114421506303110300177370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * lightcolortest.c * * Determines if there are light colors on the image. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 nbins = 10; int main(int argc, char **argv) { char *name, *tail; l_int32 i, j, n, minval, maxval, rdiff, gdiff, bdiff, maxdiff; l_uint32 *rau32, *gau32, *bau32, *carray, *darray; PIX *pixs, *pix1, *pix2, *pix3, *pix4; PIXA *pixa, *pixa1; SARRAY *sa; if (argc != 1) return ERROR_INT(" Syntax: lightcolortest", __func__, 1); setLeptDebugOK(1); sa = getSortedPathnamesInDirectory( ".", "comap.", 0, 0); sarrayWriteStderr(sa); n = sarrayGetCount(sa); lept_stderr("n = %d\n", n); pixa = pixaCreate(n); for (i = 0; i < n; i++) { pixa1 = pixaCreate(2); name = sarrayGetString(sa, i, L_NOCOPY); splitPathAtDirectory(name, NULL, &tail); pixs = pixRead(name); lept_stderr("%s:\n", tail); pix1 = pixScaleBySampling(pixs, 0.2, 0.2); pixGetBinnedComponentRange(pix1, nbins, 2, L_SELECT_RED, &minval, &maxval, &rau32, 0); lept_stderr(" Red: max = %d, min = %d\n", maxval, minval); rdiff = maxval - minval; pixGetBinnedComponentRange(pix1, nbins, 2, L_SELECT_GREEN, &minval, &maxval, &gau32, 0); lept_stderr(" Green: max = %d, min = %d\n", maxval, minval); gdiff = maxval - minval; pixGetBinnedComponentRange(pix1, nbins, 2, L_SELECT_BLUE, &minval, &maxval, &bau32, 0); lept_stderr(" Blue: max = %d, min = %d\n", maxval, minval); bdiff = maxval - minval; lept_stderr("rdiff = %d, gdiff = %d, bdiff = %d\n\n", rdiff, gdiff, bdiff); maxdiff = L_MAX(rdiff, gdiff); maxdiff = L_MAX(maxdiff, bdiff); if (maxdiff == rdiff) { carray = rau32; lept_free(gau32); lept_free(bau32); } else if (maxdiff == gdiff) { carray = gau32; lept_free(bau32); lept_free(rau32); } else { /* maxdiff == bdiff */ carray = bau32; lept_free(rau32); lept_free(gau32); } pix2 = pixDisplayColorArray(carray, nbins, 200, 5, 6); pixaAddPix(pixa1, pix2, L_INSERT); darray = (l_uint32 *)lept_calloc(nbins, sizeof(l_uint32)); for (j = 0; j < nbins; j++) { pixelLinearMapToTargetColor(carray[j], carray[nbins - 1], 0xffffff00, &darray[j]); } pix3 = pixDisplayColorArray(darray, nbins, 200, 5, 6); pixaAddPix(pixa1, pix3, L_INSERT); pix4 = pixaDisplayLinearly(pixa1, L_VERT, 1.0, 0, 30, 3, NULL); pixaAddPix(pixa, pix4, L_INSERT); pixaDestroy(&pixa1); pixDestroy(&pixs); pixDestroy(&pix1); lept_free(tail); lept_free(carray); lept_free(darray); } lept_mkdir("lept/color"); pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "lightcolortest", "/tmp/lept/color/lightcolortest.pdf"); L_INFO("Generated pdf file: /tmp/lept/color/lightcolortest.pdf", __func__); pixaDestroy(&pixa); sarrayDestroy(&sa); return 0; } leptonica-1.86.0/prog/lighttext.jpg000066400000000000000000002406511506303110300172510ustar00rootroot00000000000000˙Ø˙āJFIF˙ū“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā H|˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ xZz‘´qڐķ@E'ŠvĐ5”žôŖ§ƒŠGPM qC"‘F8Ļē)J6ņŠ ­œĒGĨ.ÕŲM â—jŅ€(Ā#€9íN)­#0'Đę{Ķsėdf¤ãRíŠ@ĐzŅI  hP;Ō3(ęyĨR¤d\ ? ^ŲĻîĀ4ėⓊ0)8Í;šŽXÃĻÚ¯og$íjŌāS”âŒõÍE$k à DWįTB?›8ŠU‡BEH"Œ ƒŪĩOãJUO#B;qJīNiģÁlf—Ž”ŊûbâšÎip? @ĒĨÆ{ŠnÅđ9Ļ4H[ §SØbB€įžÃi$~ 4["į­Āąœ¨Å=ĸF9"FaQËl“cpÎ*xD*F äņT™sr>•l Ģu)Œa{ÕInž\ŸŧkDžčˇJΊņŪéĄ#‘VVGķ°z™æTĮ<ÕK†fŽ8ÅKĻ˙Į¸Ģ™æœË…¯6JuÅeéÂS<ĨØõ­Ž jĢnĨ­ķíNą•›rˇcŠ’k˛l\gŊ1o6Ėúŧ"—č'&Ģ|Į •œÃ.×<ÅG¨ \Ļ­ÛĮ˛%úT*Zá=i&=ŦCSMp#€9=ĒĨŊΟķ–â­$žlMŒÖm°žIĨFbt­+Hš<†bjØÅKQwH NžÕŸ đ1' WÕɡuBķļ$ˇ5>Ÿ?n™:íģBŠuÄâ2Ēz“Q^@>ĖXuÅ;Jm֊O^õĨŸ—‡‘ŠŠdی§jͰˇ +{Õģšü”<ąĄ#w¸Í%¤ĖîęßÃWG4šŽwŲn8¨!"hwĻ€5cšl•Kj(åuŧ1õjžĸŋé€q“S\CļĀāŠĩÕwÕFÎÕė‡o'šŊr?wŒÍUiÄP;uĢvOæ[ĢzŠŽAļéiטû9=*+dØøĨąČŪ Ī5ZZ)3ôÅ2mĻÄĩ1#ͲŠ’t-^ĩ48HFzâĻ<æ‚Ŗ=jGÚ8¨_pqFp1Uo¤hãŪ§ĨMo0h’:TĒáúhČ”ÕpāŽ*Qڃ×ĩ7ôĻ<ǃ’)Ģ:1Ā"‰Á1ÕSN’B]dėjëĖŠÁÅ$s+’ö‘WŌ…•OqKŠ\})0i…ëQųɟŧ)Ī*ĸî'Š<ÕØ#ØåYT• ŠĄ}xÄA€&ŗåŧ’ØšcĮŊ-•ġ3ĢƚŪ/ˇö§G:“‚Fh–e„eZí*HÁԍ(Uę)eaƒN‘ÂŽI˛ī.ŽH5cM”ËlœŸZŋīŇŌLJč¯p)gŧHqš Ō žĩ*8tÜESšėGrКž¯• ІK…SÍ,rĢ‚A“í ¸ŽFEiC‘‘‘P­üM!BÃpíS „,áS šČĒæíIČÁčĨY*GĨQžķ"te=ëNLjMIŽ{QĪĩWŧrąö¨ėĨß뿟ö¸Ä… äR‹¸Ė›€=Ēvp5B C^0ŨÅ\3ĸžŌFM$“,gæ8ĨķFÍŨąš…obnŒ({¸ö¸b’Î4œŠ˛]GZrē°ãŒËĶŒĐ¤„SēsFx¤#­fÉpŅ^'å&¯ TādTƒ‘žÔÍëœdS¸4‡Ž8Ą‡¨§`Õs8Tä+&ōå–ā!\ŠīTĩ%|ÄčIäfļmåĖ ĨU„)ŋvĮ55ÃâuÁ¨nŅËŖ™æŦĖĘ-ũąI§°0ävĢiĮ Ļ8ȕ áūĐŦ:SŽA1Œj+ˆMÅĻÜsŠ‚ÆŽŽ0EhDĄãĒöĀ­ÃqÁ5 M(Đp*•ūī(l>•KėąKb›_ڝ*K˜UĶvŗY•)ķKĨŦÆPƒŒÕ‰Ã5œdQyleĀrj+Į”Û”Q“ŒS´”–;}˛.+H~ŋ5†Adžfx&Ĩē‡ÎŒv=Eŗ,[Hä fŸ% cŒš˛8Ŗ"™2oM¤j­ē4Ļ>^Õ`‚ČAĮ5 '’ Ö’83!sÖĒ^ÛË%Â2 āՉŌG€.*ke" ¤tŅÅpŌÖ–â3"{Ô[–ƒf9Å>Ę&Š=§ƒÚ•âvœ?Ĩ>æ6xJŠ-Ņ’žÔ–ņ4nŲÆ [¤\cœSOqMüĒ  ŪKmëŠÁTyäŲ"ō=kjŌ&Šž”ʼnÖrŲāÔŗŗič EķRm!J†„„,xĀĻl#åĮ.ÅāRF§4é#ʀ)č0¸Ĩ=;Ux—÷ëVC'=iĘ1ÅTÔ˜i-ŖÛgƒĮļLĀ0cۚ÷¸(1ŞL6ô=jō┞qGÖŠNģĻ"ĒĘå.P3Zy%9ĮJ§kūšųīQŨI"ĖXr*+ ×.ĮąŠÖo>吞•Û5ŖĢ)āšĶ†A$AŗÎ*JLōjĨîī+ƒÍP@ޏ õĢ“{L†(ˇ;­px¤ĶÆđFTwļÉ%Ę9ÆA¨õ+D’Û>ŸiVęW"ž 5Ã)ã։„áŗRŪ¨haM†Ũ|ĩôĮZäÉö•@>Z{+–\p-Ėē5㗐#Úą#ĩ.’ڀ hūTŊŠæĒ2bđzÕ}R4!#ĄŠLJ-ĒK"~ÎzŠhĶíƒv*ãaPãŌŗ!fšGtŠ­#d•ōxíA‰~Ö_w'ąŠÅ˛‡/ëYFÔX¸üĒÍÚ*TwíWˇfßæôĒqą‚ŒZn˜ØyF{Ջė_­\‡>ZŠ’Š‚éA‰ôĒējbŒuéQMūĐ ÆMGŠFŖƒš´âųāS‘ČŦø#ōõ'ĮCR^ ˇQˇŊ?QÃÄiđ‚m{VmžnĻ9ãŌŦØg­WŅÕáĢ€ÜT¯vdēhû ąēLûĻ ŧģōî6ŸģëNļģ8āŽâĩr9Æ(éAæąuL—Qqƒš–tx•\7zž˛7ŲÁqY&VŲ›UÍ2äÍ ,zTZ€ŽķËvÚžĻŦÁ0’@Ã-^Ž•Xœ\Vrj I9 aĩLcæĨXUFãĩÛ ˇ4˛ĀĻ@p(1\Tmn ō)ĐĀ"Š{t§žŠŖŠ¨ŒKģp4ė:R…Ũ‚šŅ+œĐąR€Ĩ¤=M#Fį€ĄiĮiR89ĻĒč8 īŠTŒ)ĄFÜqHap1J(Ą˛§g“Špxųâ.:æ˜c&šĨļˆÄ¤g­6âŨšEu<Š™•äÔÜĮ!e=zÔҧ$žĩ Dæā6p[##¯5OėĖ.|ÁKsnŌãÔžI0í>• V…c#wŊŖE+œRÜÂŌ(÷ĢP†=)˙ãKƒšŽd.¤T6đ˜Aõ¨žiÃįĨ2úŨį@Š"Á+õ­E ų—­.xŠîĄķ*y5Rę)įˆ(âŽ[Ģ%°C×:JĖzĩ(>YĮ\U (]÷ dĐmLwF@šŨÖ­*–oēEP’2×,Ŧŋ)îE2 EŽër/~ĩ´Ŋ:ĶēŌ7™rŽnŅ‚œ uöæ„9§‚ßdÎqTvoˆåNę~ŸžŲvžž•Ze ŗ/Đâ‹KymīAF%= t9âĢ“ū“øU‚~\ûU7b3ÅCĨ ԘկáÚ­<Ë“š‚B9\„9Į\UŊû€'ŠPĀ`ŌįŊ&9ĨúŅ“Žĩ Ԉ”*ŧWÉ(;y§=ØA’*[yÄęJ‘OÜ3ɧ’JMĀM.ņ؊ŠYÄl=ęU*y­.@=iXŒ)ģ†(ŒĶž”ã­&F;PzŠLŠ=yĨȨg ÆM=[ “QĮ:ŗ•ČĻ]\~8ø'YbžŊĒpĀŽ´Ļ“4nÃ"îÆiÁƒt§d~4Ÿt4€āĐÎĒ9ωWĻE)‘Gzgœģ¸#­6y@^ SŖ|ĻIÍ)™AÆ@yŠzHfE` y˜nōÃnA¨a”O#ŠsÜF†` !ēŒÔʍ ƒCČŧsLķWÔSķ‘‘O¤'ۘΊ‚dŨŒŒÔSɌsƒëSŖeFOjkJĢՆiËpĨ8"¨_šEV ŽjDēM€“ÁjÚ8ttĨĨíHzRgŠL…ęE(`{ĐXž)†d˙õĶŅÃ.AĨ= ECƒSdzUi¤O¸9 ‚hۀ)BČ4hP)zP9īF}Џį4Æ!N3O^WƒF>”Į\Qš]Ŗšƒšs9'šN´Rc'š6 Ō3*õ⚮¯œRcŽĸ“Đ@Ŗ§Ĩ¤Æ(=i8ĨâĘŠ#ĩF৏Žh§cŠ1īAā`bšEG$éųˆôH ‚§Ž(jLwtĨö qHFM.)=;R;Đ/åGSš1IŠ~ĐW‚3LÛL’0ã)#Œ'J—Ž”›A†(Įh\S4€iÄsëHŌF4Ō€ž‚FČëOûĢր;ŅŽ9Å0¨Îr)By ŌlÅ7ĘLĐ#PxâŖktfä zÂŖ¤ĮÖĢc7?…X|ėâĢ…&ŦĢO˛^%ÄyžkVOŪÂf[H€$˛zĶš,°’ŊqÅRˇ73E¸ļkNÛ0Įš}/֊Že qÚ°téŅ.f<ƒZ‘p­ŸZXâ6ĒÄt¤‰ŧĐ[ōĨŠbŗygš§¨Ū<(Îõ5,—qĩŗšeúJĶGą^qZf(†Np*ŋÚDŦÛXpiĐÎŪaCQOq$r…^ô‰%ĮÚq–´ųÅ/8ώNŲĒ>s­ÉŒž1šĒ÷Īđ‰¸ĄĢûœcĨGx–8æĨkn¸âŗ4đææBXœŊ~3hßJ§§ųĻĖãjÆéågGęĩĄÛ­'~ԌNAT •.YēTzeɕåāÔĮ¤ÍÕK‰ŒG$ãœP$“zļ2Ļĸ’ë7^Q=Ē/1ÅĀ( ^õ-Ԏ…Yyõ[ĪI%^vœÕģČ÷Ûy§[îĒ?ŲĒjûƒo<Š–Î@$“´ž(ŊBĨ=ęWlŋZšŲ‹ÛĮ5*ã€j Zr„=Šķ[nļ Ÿ˜ ŗdÍöEÉɨšoß6ãaW’å°NĘÕU*€ pČíCÕÖd¯$U(ŽÃĘ‚ϝ\Č­SŠũČäŽ+5$ķÕĪ#ĨIeîby^Õ& ™„/Ŋ/’ Į^)Úy&Njč4īGjLzUI•ŧŅĪ œĨÜh:ģ0Ė| g=ÃF :gŪ¯ÚŅ*rx5^!‰`téPĘ2֜Ų% ‚ߍueÜ"•$ЊG/4ØįRz⋩DH_=ŠļŌųąƒÜķSãšR1YZ‰h[<Մģ] äО2į=j6¸éR,ĒÃ*EC5ĘĄã§z’)ÕãÜ5[ûJ%˜ÆXnôŠ ô{‚–5e[ zSÆ)ŽÁsÍT’pę*‡OlŗŒæŽI0QŽū”‘ÜÁ8ÍC}yöh‰8ÁīEßŸ85eĻĀ=)‹rŦÛ23éLēģō1ž”Įŧ )ĮŊ<ŨĒ`7Ĩ7JZStĒģ‡"– ‘0;HČíT/nvΊx$ց˜EæéŠŽš„nÖ=ŊÚKfœō„~Ԛ{mžPxæĩ%@Ņ~Ēá Ž*iÆšÆiUˇ(ãšq$ŅŽ• į°ÍbiŅ(ē˜žæļâŒ&@úĶĻO15Zō—f)U?~_ĒŌy˛ė‘2ŖŊ2SáŖ<˜=…RŗũÜō0sšžũˆļlw¨ėlĮb)–9’äqZ ũ)j9ŗ°í늡nŽwo>Ļĸ´ˇx.d ŦkUrVœhۊÎÔJÔš‚ŖāU9­HŧŒķÖŦĸģqPΏæ‚ŧ­DĐ |˜úU™ŖcQHQŖˇĮ|Vqĩēvá×Ļ*Ũ¤ķŲ T—ģ™UTgąHÂGĩÚ͎”ë%‘`ÃpE$qIö’įĄĸö”.Ū æŸ"9ˇÚ)ļĒņÂUĢ2hįy\ĄãŪ–Ęiā˜+ŽAā‘]2Š{šo>´U;˜ÜČ?…BÖĸB \šXœÆiä˛Á†ęd­ŦŲiOŧjŔ“$Æ7äzÕë˜ŧŅJ#cÂ{R[ÄbˆŽxŠ-•Šžķߊy§sŽi¤úU6ŽyĐÉö¤p8yÃ<\uĒŪ\f­@…Ô§8íUábdaV@⡙‚ĮĪ­*tíP^`n9ÅGi-‡ ņKŲ+¯QLŪ^äŠéKtģég;í2}*k@Ž•` YqÅej˜(šîhxė ã ÍGk3}‘ķÎ:S-Ĩ’XÉ+ŪŦB’F˛ņŽ• šiKî5ŦO¯“ōžÕ™uj¯­+ã̎ЍXv5ĨnA}qSôĒ×ĖË sНhZ‚G&›fĄf—ĻæCxÃ?/ĨI$ldV΍õUŨl:pjŚ ļ\c8íQÄdißwAŌ‘ o´‰3K¨&čÔņÖŦC´)žMWŊAĩGŊ>X×ėųãĨGh­˛j+ļæUíIŠ*™c8īWf]քvÅeiŋ$ŒŨsV _.ũĀčGjl’ģ^”†i‹•ŧķS\JLņ‚3“Ö—Q…Ԃ1Å?JÚļh:V‚°#ƒKŪ¤8Å7Ĩ%SĮ„wâ“ō RäRtlR‘KŒŠoCN):ŌQÔԁÍņÅ(\žÔĶEŋwԐõ÷§~T˜íJ8¤cNŨōâš J?P\æ“Ą ūŊŖ¨=*˜?éx>•lž)Ļ0Wژ!`Nō—ãéLČp56Ū1B _J>´ĮåĮZNž”ÉxįZ"¨æŦÅ/ZBšôŖ`4†%cČ‚ : ]Ŗ¸jÅ!EĨÆ…YÁaRŽ”ęĻ2†ĐPcb”(QÅCuŖĪ%sģ44JÜ1H°Ē&1H°Ēą ÔËøRđh#>ԋGĐŖvx đÔ´ĩŦ‡-ƒR*qIˇĩ)\Š`Ā5 Æ3Mu Ba8wä„)ÍHTÍ.0JL‘‘N\c9˜öŖˇ=)0Š„ÛŒžÔØíbÄÕĨíKÔŌw¤ÆOjs`ôÜsŒŌ2†8¨žÎüŊ)RCœsR‘ÎiqÅãœQĶĻ(īÁĨãS ¨(Čāņõ¤\žAüIŒšR0hĪUážb*Č8^q•§'LT7qŧ‘•^ôÛX^86wę8Ą‘&$ž LaÃoi] €§4AãÛ͊d1˛ gV‡“ëUníÄāÃĨ …ŧ­§éKĒ$eqõĻ ,üŊ*dƒžõ[ynJô50NõIė‹] rjK¨d 8ÅXļVX¡aSâ™$bD Ô ÅÚŊ) ĩō˜ĩ+B§'ĶDL=3K=ēÍĶQÛ[4Ci'Ĩx‡Q֒8Îüš.`qČčbŲ\æŖž!€Ņ$LĐíĪjŽŪÜÅ \õ¨ííŒs3÷j’ęÔĖĀæĻō‘ŗ5ĩą…HëH-ąpdĪZY-ˇ8q÷ŠcķzĶäļW=EE=ģMBHĨ´ĩ6ņėŨšž(Šą9âŦuĨÆE%ĸ€)qš)1Š;ԁŽi4¤(#Ŋ¨Å*¨Éôϐ ū´¸¤#š^‚õ¤Åwæ€>lĶĩ Ĩ4ĶZ1ÅŖPhčsKyĨ$` h<­ö’}ĒĪlô¤bs@9Š…Ĩ+ SŪ§ČâœŌ‘pŲ$ãĨqéŒf…‘GúRw¤<23A#ÖĄyļ¸SŪĨá‚iZ'Ą¤$/S@`zTs\ą [YÖáw)āķS‘Î*2W8&—9ųąšR@īFxĪQP­ÂŠ2*rA¤Ļģ„RM2 …—<АœSwæœ1GŲ qP[NdvtĢNāãšTlqškŖ9¨÷ŠčE<)Ā‚1MúS¨â“ jRA\ ΒgK°Ky+ÅäŠ-%3@ŦzՌbŠnᎴ¤úsT/oD …Áj]>yfBdUáëHßtŠŖopßhtsÍ]WÆi˛ąU8ĸ6ʂzšq•GzUpŨ4ęR}Š›48ŖpíÃÍã8Č ļOJbÜ#AyĸD;MGm;;˛°Æ*y$ Y—›Š†F?JŊ^ØŸģQÛ)Œ˛’qÚ§2¨!Iæ•åT'õ;ÔiOŨ5 c÷†ĻĒ÷tb¤ŒeAÅ:Ž; L )ŽáQŠŒ\) 1OIžŠ2H¤üiiŧzķ@îsHÎdĐeČ4ŖņNŠ1Š(=(—בLČ$ŒŠ šDq'*r)ø÷ĨëÁ¤8ÍQĀšé@äu¤cÖĸICąPEKßļ)'Ĩ,Ÿ ĪZ‚„‘ŠŽĸ§>ƚp:â…9î:ĶēRhüiŽá?6;„ā04įp‹’x¨âēŽ\…aÅN=éi1O*M 4t4×m̏ž2)–Q•9Šz AŪ‚sKž9¤=éO֑Xֆp9Č įĨ-4ŌnÁÁ§œQœŌsAëEésAéĮzJZ4ŌĀN֐u4gŠ9ĨĪTgí];Uą÷sUoŧ°AāĶ  匚‚äūũ@ëN}郚Ÿîö¨á•Kƒ×ŠlWM#˛ˇQP]oBųOj–îv‡OZœH|ŨN*™•ÜdR[´˛gwĨ¸Ȇ‰dxÔ7jĩî[֟FHäbŗĻw30'™m+­éŒļWnņÛĩPą¤/åniÖîdĩēâ˛-ĸ”ę“ÄJß\€3OÁÆjĩ▄ãŌŗô¸]T–nsW.f"ELōi—%âˇßžEKg?Ÿn­V€Í5ūéâ¨ZŗÉR4­,ĨôëP5ÄļŗĸšČcOžŅQ‘žqUŌMę0Ø&­Ëpa‰rz÷¨ŪåŖPųâŽÃ(š ĀõŠą‘ÅApå‘TŪvXw“jŗk1šį5RåsĢWK˜zRØŽ ZēqŠ‚VÚŦsÚĢE™S~yÍHÆgCÚ¨ßÚų—Čs…'ĨkÚÆąEŠwåNUÁéYu ņJwEv¸?)ŠîÆa$SmÉû(įœUV—nCŠŗfA$ƒWA¤nERgdšĮđš¯;IԜ†­ã{‚\Oå`zņK ^îøĻ[HŌÂCvĒÖą¤J3Å^HDj@Ēöį÷î=)˛ĖMđˆũŪ´ˇČĸ,!šĩkōšô¤—cÅCx¤”ŌDęęôk°¤w5g÷SUy‡Ę1RÆHAšpƒŠ“¯Ĩ'OJ†é7@ØĮJÎĶ|mģœUŠŖōP˛žG4Û[ņ,YĪ#­XŽå%'dR}Š|ā™Á4]Üv8Ē騆P@Č>Õ%քTšų•^+ī6F\rĩb ĸÎclRM0Œdž*¤šŠE÷Ž­MâÎp§>õo#ÚŖ‘ŠŠ VeĨÜ’Ū´exĄpģĸoĨQą•ÕYG ŊáÉSÔRK8SŽ3LŠđ3ínj¸ ˛đ): Ĩssö|ĀÍ#Ũ2 uåML%A¸wJĘFk‰0jŨÍȇ÷ôĒī¨y@ŠĸēķÔ˙ZΊRˇŽ‹ßšē.™&ŨúRę4vû”r3N•å…YģևjOøS'@ČGŠÂw{;´#;XķZˇ2 -đ¸9V~… ˁÎNîõŖ¨ÜDÜ9Ą[âņŖĒũęŅō úĶ‡Öƒ×ĩĒ•üĨ-œ.rGáûæ/$`:ˇĩŌ9ųr*´&IHéC\ė˜!īOžāB™ãšĻ5 –4כ-ˇÆ*6ûíYãŋz“P˜ ^ÜĶÍІ ĮԚē”er?Jž ¤œ§&™"9˜xŠ%a\ąĀ¨’ūā0æ­ RE1œ É5Ũ#>܌ÔÅŽHŅ2Œ(iâF)‚î22Sã™dR)ĖÁFMPš˜„Ęšą…­Õ\Tv× $Žŧ`UîÔLpj˛Ÿô’ĨZĒכļqŌ f5ņPJÚŽôûŒíœĘ^ßoĩEj<¸öx5"B<Ö|rjĩÄenR@8ĻŪžđƒnyĢ[‚Û zVwšáĪČqšĐļ”?ˌNą"ôĻŨ`ÑRÚķ éSûŌ0ũŲŦäFiÛx&ĸ`bŊ ZŊ)ßĪĨGhĀÁƒÔqXˇē\—Z‡˜ =+SN…­ĸœāfŦy!î1Q_DåŖaØÔ’’ĐcĨ-§6ācIåÜš#9­9ZjŽQē2Z­y?/ŠëEÄ;¤WŠfS,;1֝iˇ„(< ´´Ų:ĄÛpãøÔĮ;:Ķ.bûD‹ßĩ6á]]@Zd°īhÁĨ¸ˇi!QžEHļĘŅÃ'jŨ6FvŠŗŽ*ė…`f –öüs‘RY„ĮJdčÍtŦŦĪ–‡RÚ¨՜ŸQQĘģã#ÖĢÂ<´)KXŋsP]7@āU؉+ÍIÛĩ!Î*‚3ũЉSN˜ąN*K†&íQÁŋėØĮ4ČՉ!Ôą{#VG&†Væ2āę)“[™mŊéÖh ­-ÔhĐæ— ŗn:õĸ(ļ&Z†dŽwlpjë}ĖúÕ v?jqŒ ’îՙÖEëëPÜC,¨B*Õ°aVÎGzU•‰Ī‰HpPúTV–å g§jē>Ŗ4§Ļ*´9ķžŦgÚ ›1ڞ‡ TŠûARvíGjOĘĸ¸˙RŨ:U $|Ž23¸šŊsĖ'’+:Æ×ĘFĪsKjÁo$^”\0ûtcŒÕ›ÅlAĻŲ@ŸgQŒÔ÷<ŖŽ(ĩZ°Č&ĒZÆĸy4¤¨ŧģQŠ>Øp9ŦųJ]H­{ u‚PNĩpôäSåHĀŦëPąŪHŨęüŦ<ļ"ĒYmØÄbš‹Ö*)–FŧāqOkv,ŦOJͅƍZqö*ÉéT­†.=jđĒwcä,< 8íPŪ\y–…Ųž=ĮĄĨŧ›Ę }jx¤ Ų*3p_îôčîäæ mD,â"MJ÷^S¨~õi_r‚;Ķŋ*Īģ¸{bMšđŦ>`éŒņSZMö˜ÃgļjpHútĒŋirĮĻOo7Ÿn8âĸššōˆ ŌĨŅ gŊZ€h'å5@ߕšō~•:ÜfBOZC9n‡4č§ÜÛOQLšá’`¸ëCÜ4d3*o=|­ųÃ+¸(ŠäLûíQ:‹-ãCŒœqV­î$v!—¨MÛŨ‚¯ÛIXÎ[æVzTąN3éPŧ&vō*¤LMčãļE#~MޤdE÷%Ĩ(ØÍIwqä 5P^žĀ ô­(IxÁõ§b˛õ)%PĄ{šžŲ ¨cׯ+H8Å6ÎåĻvBTã4šŒŒsSFÅ­wÅeA<—OßģZ–Í#+Č .*+›×‚ER§õĢFäĒ œÔą;0ÉŠsíUn§ŠŠ;ŌÜ–æsa”rj Ŋ’6Į´ŧÍ҆éYp]J÷ŽģNÜÕۖ",ãĩ-ĢŠ€0ĻĩڂOĨ:+•• R+2ōéŪpŠ ^´&( 6A¨§cÅZŠU‘w1JŌ¨8Ī4‰:ąÆyǎˇ>N>ĩf <ČÁĨ2ëMK„gĀ##ĩ,ˇ ,@Ŗûd||ÚWģDä°Š<õ)ģ¯z#”8âĨĨ'ŽÕ\gĪ=ę|æ¨_ļÕSīR$‚H¨¤[bļíĮĨ>×+S֙å´o ÂŦ’aĶ>õ@a•LgƒÖ‰WΟc§KSüŊ 2[|]#ŠļņÅGqˀ@+MH6WŠĸë-€Ë¸Uah7Šå9Ģw[– riĘ ÚŪnJE´Œša?h2*ŦĖEú *{âÁA<öŠąˇôĒßfYPî\5O 5ĩšœU¨%2Æ 55Jõ 8Î Hšh€qQ@žI ôĸT2J¤•^ô1•FĖ­Cö%wFAŒœSĩ\”ãpx¤û"°FAƒíNŧ´i dķˇĩZXÄ—6åŅJ•§HXÚí ķcŖĶĮGúV*‘ĐÕ{°|–ĮĨ2ÉÁˆÖĢęˆ^,Ī5"ŒŲ…ÛÎ1KfŒąn*( ō¤n2 ÍXŠ2ΐ0*ØGaU/y…ĒI’ƒœSííĘČíũęg”Rđž8"ĄģIež2Õįˇ#ž)–cj"|Œč6Ē‡rČ{ ŽâÖCįVíÕZ%Ō­B›¤į4¯u™g^;Möģ$Á5%•š…6žƒĨO8o,ãŌĢXFč¤7­?žŽƒëVFâ9¨!ÖWcĐŅ,Lķ+Æ­ŒƒN'Œb“ŗį…ūŌ˛(āUÔ%“ĨA¸ō84ĮV ĀRÜÛųÛIėsKŗr€ÉÍYvĮŒ q<•Vû÷隹øU{ŒäSâÆÁô¨/“6íĶĨAĻāzSīPđhÁ6›TƒÅ%˜ Ķ֙d]ąæĄž5ûz1ÅMŠ xЎĒE\„æ%õÅNqŽĩ^æ%t ķÅgĮDãId^Ūᥠōކ´fm–īYč ĢžG"—J”„tlg4ˇņŦ¸ΕV#5ģ¨'p­ÄmčN)ÄqÖ˛e uÍh´†EĨČ= 5Ž:Ô\usÅM#í'Øe2&xĻ›…ėČŠÁRæƒE7xp)rĨZRG­'Ŋ#̜ÕC3 @ĪpsKŒŌ ošžĸ”FF(Ū3Ž)䀹¨|āIŠrČ­œÅdädfš˛Ģ“‚8§Æs@ Ž4Ž) ¨įŒQæŽ3‘ŠQ*°Č"¨Ũ^b]ˆyÅ-•Ė’2 WVEasH%RØfŖš‘Ŗ]•$&ũņQ[Ü´ŒÁģU9U°XPōĒŽqƒNIžéĨn†ŠBstĀÕāZį…$xØ1Oüi23Eģf€psJA-QK'– 5ŊĘNpqVW­/zGzLf—ž)Z-!õõĄzŌ–˜íĩsš‚ Ĩ™™sČíSI \Sã&—#&›ōâĸ!gŲŪ§'$’hČĮLĶD›hÆiãĨ!p犁§Û ĩ>á€IĨ.:f›‘ë@až´ģ€ęhŪ=E/ŽAĨ2ųr8¤ČõŖ8īI{Ō)NqK‘žšĻ°p)ęw „Œį4āÝM&­/NôgŪ—=yÅ5ˆ­"°=éÜc­´ŽÁąíPCuĖB‘‘SäcŽÔb“ˇZČŖQŌ—( f€ĻŧŠŸy€#2ŧîM)Áh ŠŠX„„nÅ=P(b”ŒŒEŒ(ãūÕ]īÍXÍejlņ/˜ŧÔStŲ"šjŸ›Ą=üJŅryŠ`>]¨Éč*;{Ÿ4ŋˇĨAk>ŨAâ kuĻ’äÔ&BGËŌ’9Ã|Œy*9ËŦƒŠ˜’Č6šlŗųnf¨DÛŖ ŊK†X Ī#ŊRļyÚyĘ:UčUÃĮŠŗŌŖ—îœuöĒv…ÚGÉ8ÍOs7—ĩsɨ%Ū‹æ|ƒôĒ6k#D~cÖŦÚĖŪcŖTww$ËåųT\Ię™, l)ĪLr)O­TŊ(įŊG$mä‚įëyÚHHî*rI,Õ5Œå÷.rJnĄŧ*•84Ķ›pŎqSŲšhyüéęūc2įĨT¸¸Œ™Ģ“&čHÍ2׈yįœĐ3jdî8­°ģPizãP~´‡îžk:V4äā -Ž \ųeķV/–"Tô¨må’X7椴˜ē°nĒiyō:įĨA4f+¨ĀIÖ#ÉĻ}ŠzäbĨŽQ*î\RÅWLyÍŌŦV.Ŗ<ĄŠmųM7O´18tāH­ŧécĄÛ´>D˛zt6 \´ĮŊ^¨nhˆ°+ FEAå9žŪ>čĢSĮæFyæĸĩŪxnƓQˇ3C´SlâU‰CØĢ D;zUk`ËpäŽ h)ĻŋŨ8ëU-Î×pGz.Ą2:?ĨHß4{iđGå ĨĨ#åŦôRˇn[đĢ7Ä@ô¨lÁŽæ™?isŠG€ ĸädR“p!FjÚpúŠvŒāé2ŪVŌ9ÅE-lAäÔbA-KeD푌šąxĨĀRļ~͌sŠ‚ËzŖ+ sŪhæ|ŽĻ›rĪĄĢŒŲ„ņÚŖļÎĖTn ]ĮfIfęH%2.HŠzškg‚^V Pà ŽķcZœÂzS`ƒŒt¨,ō^AęjXĸ0ČįąĻÎŽ÷ Ũ@ĢÃ;sК*ĩæī,ė5mPKĻ×úTļö’ 1úUčŲ’ ¸ä f‹h63ššo”ÂīĖĮyFV¨PxĢwų0öĒvŅĶa^ęâüĒjĒ8kŗĶĨ:įbTķ•ōqÆ1M‡iƒjúUkh‚ŗîāæ­$j™5RÛä [—iëVåųĄ8éQZ”EĀÅ_vgŊ ŊН÷k6Ü)ģ“Í,ŠښuĶį Į5JņD§ÕÛ$“D–é"n‚ŸJ‹ˇSL•|dwU[åÍģtÍT‚ŨÍĒØÅKepÄŧoÉZŸy$æ™ ™™”EK4û/" ĘsK'Īæǜ3¤P6*ŨĢ<ŠēšŠ^}Šf2Z§m•vÖĄÔÕĶoŽ)—BD\7NĩrÚC5¸>ÕCėíũ¤NėŠŅ–_*>q“Q2ģŽíÔûiK‚=*ĐhãÚŠŪĻčę1ēãŠšØą‹ y¨]vŪë֙¨JņÆ AY°^y˛¯ƒŸēkĸ‹>XúSąHÜ/jÂÔg•' 8_ZšfėĀāņN‘‹ģE¤ŽŒËŸ—ĩJäbæĢ[\īŧdЎw“@8¨4Ô>NIÉ&¯÷Īr}(ũ)ãîöÅfßĢ*‡^ĸĢŪJįOŨßÅ7M§´ 'Ū´ĸ‹b~ĩBÍ}(#Š{ĢCr˜o”žE]¸\ÂN)–ŧĀ*$?édqԟ4ÄJą¨Ũ™%RŊ*øbĀ_ƚ°=+"h3¨)ĪĒĢ„Š,@Üž:Ōhn“ žEM{1Š1îjŒûž0U~oZŊ§;´8~ĸŽ“‘Č]9”ŠŗŠĢqĘt§ÅƒéM¸fT$v›ÔĶĮ÷Ģ0\?œcaôŠ'”Ģ„čM2MņŽāsŠY\Ëiģž*ļ˜Ž3ˇzĩu>ŌĢëPI;Áƒž3WŌ,Y'’* ÷4%…Eσ埭iv¤éŌŗu$vdÃcšģÂÉTbS$ĨGJŽiŨÁ'#5,—#hÁëŌĢÎŽ#Ũš’Ņ˙ŅŗŪĄ1vÜqŽÕ%ÃHî¤į}ŧ!+֙o+=Ž ųĒkee$“šˇš_ƌįŒQFx9Ļ“éIģšPy§vĨ ŽÔÚ?*LņK“ŽÔ™éŠSøQIšQNŨŠNρ֔ũ(<ŌgŽ´zŌįĩ&izĐ:â3FhŖ­4ĄąI“žÔ įԐšQÁæŽôQøP:t ŒöœņG öĨ< Đ:QFGĨQíG|PAÅ% PÆq!ŠŽHŦų "ėJ:SoI‘hÉÍZŒ“íU푒GĪsVåMˏQP† W(‹3ot`\Š`F ´ŠąoEæĻĒŅąķÛĨYÍW›•Šĸ™7Ũ>âŠÚÆzn1w‘O¸šTpx3Ņíéʛ`ÛíQZü€‚9Í1—e>”×EK4ÉP: yqäãÚĸ°$–cšĐ4€dfĒ^+0õŠŖ9{TB?.rŨ6é|ÕÆ;Ķ%„ųjAO˜“o´Õ¯˜°āŒsB.KäûŠeŠ´SɑÁ5¤ûYp{Õ…n°ƒ ZítĻG8waŽ•9Ô wŖŠëA¤ĨúŌwŖ­ŠAÆi ŌRŌ Ō‘Í¸ĪĨj7b”ķÉ4™÷ĸŒŅÛ4” ŒŅHM¨ RŅGj3īK¸‘ŠAփõĒņŸĒĮQ@Ā TF5=qOUÅzņKŠŠR8æŠÍoæ:’3ŠœD õ§:åN bŽIĐjĐÆ*ŧí…ëN„†ŒS™Aψ•sŠi‰Kdšy\ŒdQŗ”ā8äRp(eTb"Ĩە­0Â1Ō„ˆ!ā ”õ¤Ļ•ČíB¨)JƒÖ›°)väRyc¤1ŽI "ƒĀąn9œ‘āsÖĨ `R$aI4ņîiO^)({Qß­.)ã¨ŖˇjLsڜę¤)1H84õlN˙.1H(Ĩ4bƒIž{Rz(=Š(į֖Ę“);ŌæŠ^”¸¤¤īڔuįzbŽhĮԐŅ@Î(Æ(üŠi3Ī8ĸŠ\QGåGJļ)wq֐uíHOÔHG˜jZ2Ĩ&āOQJj7q‘A#4™ĸ—9Ļģmä⅐? æ¤ūĶW§)šÁëI¸g¨ĨČÆj)Ĩ(1NV%3Å29ƒĖT|îb4Ëy„ŠēĻ<ƒKIHĮhÍ5&Њdķykž‚ ‚E š”z8¤4`Ō㎴Šģ†y4ė‚84ŌĀu"”6îâ‚@īFáÁ́äJ{ŌŠíûĀÁ⑏§4î’(`ņVårj@9¤īHÄ Š@ëœ Rŗ…ņTfŊÃŧâļüŧu"§ļ˜ËÍÖŦQõÅ&ā;Ōīĸš\SUÃtíJŒŠq`7p#ņķÅf^—/ōŒŌÂ\.YxjUCZ†ĩi@ÛUTĩŠ'Hę[Ĩ-ĻÚļ-[Īhĸŗ¯!c2ȝEGyn]ŧ*Ũ c.NqMŧŨŗ¤ƒ>@‚ĒB wNHëW&`a9Ēĩ™IúÔv„ĨԄƒÍjģĐx=j9>áÁæĒZåKg֝ztsIØ}:S-27ŽœÕhaļšcÁj_%ĀûÔyr`|ԅ%Į›˛\ũę~É6õĸ$”7'Џ~č¤ãą éJpi=q@ô¸úSO֎ÔhĨôšŖđĸ‚0hĸ”zŌXÔ¸ÍWhFėĶļāã"¨UĮ¤ŲĪjR9âšc]ŲĀÍ=8¨Æ)Ģ<ŅŪ”÷S6ƒ×2¸ãǏúb‘7Ą 8âšcRŲã4æŒÁéLXRŦ*ė ÔŖƒÆ(Ŗ S6.ėāRK¸Á,*ŠŖËPxÅ!‰XŒqŠxNÜSąŽô B3Å0Æ´í€zR\PNéŌ“—ö ŠBģēҎojÉį›Ŋ8:P)ĮŌšô¤ ė)qž)̆'“bįĨ<.;R´¸ã¨¨Ÿ#ŊG%°“īV"A`R•dŠ6­A"ÆĢĐqO :āS¨úĶ…AíJŠ6ÍŽÔmīÅ.?*6ƒM()@ ԜzQĐv¤ëéMÚšíHĒ< Õ{‹o9ÃՔŨÃڗ4ĐãÔSˇĀ4…‚žM.ėŒö¤ íJĖ\RĻ) Š *“€E)u^Ŧ)UԌƒA`8¤¤ã4§Žâ˜“+3DĩIĸ6ܜĶËpH¤Č>”dd ŌU8,)Tũ)ũŠæ”b˜\/R÷¤2.>đŖz˛į"āŽ E–•ŗŌ¤–eŒ >´Ąƒ&sųU?ĩ˙Ĩų'§­^Čëž( ôĸާĨ'ŒbĢÍ8Œã#5(lĻGĨPûCĨæÆčjč•Ię>”ü€5 ģ‰iaš˜>ņ‘ŒS׊ŒļŠ~x¨¤éŒŠrũŪÔŊi¸ĮøŌ~4Ŋ{Ō¨Č4œuĨf {RôĨč{QøĐG¸¤īւæ`wĨsNš`ŌŽԇĨŊiš_ʓô‡ę(tÅ(>´N”bĘĶĩ• ŋqEčīGâ(ü¨î:QųfŠSĪĨ'nÔZ?\QųP8ôŖō ūƒ­čü¨ĪԜ¸nsÚ¯B›!=Ģ.ō6kÔÁĸx^9Õą“Í]žMļŲœU‡ÎÕäŠŅ´B‘āšŗųT#uN ûT6:>W× īīĩĮũáųŌ}Ž/ī/įGÚc=~tī´Įŧ(1ŸâĨķĐņ¸Pgû“íôÜŋæ?ī/įJ.ĸ?ÄŋzuÜ)Ūr˙xR”wyˏŧ(ĄȤķãë¸Qö˜ĪņΗĪNš ¸Bq¸~t˙1qœŒRyĢũáKį¨R ÔRų€zŠžĸ1GR)<äūđ§SÜSL‹žĸ1}E.áŽĸ“xõĄĶoŪ Čžĸ1}E׎E q×"¸zŠM├ @ã=E.õĮQFđzMÜõ§nĸĀžĸŒį¸Ŗ#ÔQ¸ÔPJûPHĮ ãëIīQ!ËĩMŠŠxŦv‘RÆãmDÜĖéĪ’eßoŽœU8m° î9ĢöéåŒfŦgŽŧŌR͸âņ  ēXøéU­˛øęiŽ­ö ØâŸx E€9§Ú)(#*+ģmō+ãĨL€`ÔWÄcmSšÖà sWm ō°ÆI°8¨XâėqWÕ¸Ŗ<ŅųTW Z"ĒļYD(ĮĄīRlÍÆîÔËĨ”œuĢ‘ãhÆ:SģŌŌāâ¨ËˀũǰaPÜĄl:PÄ´xöÅAåDEW´Rŗ9#ŠŠeĪž¤ ˇÉøVwŲŲ.÷/CÖ´üĸŗÍ Kļ˙ZDPsLšBX`wĢ(NŅžĩB⏛îåjxcƌS&W3 ô¨g€™Q€āUõåzT.FČāš–vĖG”Ûl˜pE:41“ކƒųŠė1‚OŲēvÅ&žHFSĮ5{ōĨéڊlĒÅS†-¤ŠrBRbGCVvņUQ¸,G$ː8īOŒåET›ū>”ã"ŖÔ™ŒJyÍ\´?š\õÅXŽÔ)9Ē÷*ĩ늚3”æĒÍ7 Ā)—…ˆP9Ģ<ØˇĨ$q”Mį!éŌĒī?hĮj˛3ІQ…9ĨCōMšc,èį—ū ž7 œĸ§‚}aĶpš°ˇļBāûņVęĪÁÁúT;5Ž…åR­žŦ0CœwŠÖ=O9&Ą+Ēyß{Š‘bÕ ûÔõ%ncĪJΆ er=kAlĩŧČIõĨ}:ų׉i?˛ī˙įą¤m;RëæņIũŸ¨ū°æ…ĩÔđU¤8úUË{°ŧ§Ū­Éc+‰5[ėl˙ëN)ßŲˇåĨ?•>2T|™Iĸm2I ũáĒĮJē^“RĻt§‰›i÷Û˙֜RIĨŪÄĮ4̧߁4štzuį;¤5ÚMãų­øA¤]•ÍjIŧvf¨JÔIY›4ļúvŖ˙-&=*q§_ ­Bi×ÃūZš°–7€s)¤i o4šOē ą”ƒôĻ 6ėœ™OåNūËģ ÍĮ¨oÎķųT‰Ĩˇa~(uÔ0MD?´°zĶĀԆ9§ÔIČå5īõMÛDf’kíQbFMVUÕXŒÄŨyĢ‹Ē_íÁ„ķNūÕÔŸŨ*Oí{ÍšōŽ~• šåęnI$ûUu×uîO>ÔŅŽę{ČōåW—Wž( „Â‘5›æ—˜ŽßĨ[›V¸TˆÉĪĩBúŨĐ\˜åREŽĘ@&#M2Ž|ŗųT#įÎ"?•G˙ Y`ĄĻˇŒXn\qÍu}ÚŪ[ŦŠAgЎP§5LM#.})ĨBŽ)H¨4íšĻyx'ۜ ?œuĻŽôcŪŖ’äŽE8 ŒR„ lį8¤*3ȧqHF{PŌ††Ī-qŽÔåP>î()ÎxϘmا¨§r;ņGjB2*#Îj@¸Ē7ˆ>3Šz.ĪĨIųRwĨSYA¤ Ž”¤֛ąI§1Í0"ƒœQ´œ ^ô`gĩ.p) ĪĒ+`ãIíM*aJŒPĘ Éb“hëN Ĩ#"“Aâ•P/JR´˜“`n¸Ŗ`”c'ą¤üZ“ĐR4a S•vŽ)z (ĪŌ“ (€ģŽ֌äSļāRcž´ėb—ĩVĀ“V2=* |÷§!G4—QæŅÎė\v‰wĶQzâēĩļŒSÅēt~TáôÅRį üŠ|ĩ`~Ty`v•<?*<ĄíŌ%XŌy*AųT‰=Š=)6oʝ´` ʘ#đ?*pE8•FxĨÆ(ĀŖhŖmÍF;Qŗ#­zM€úRų`Q°Oʓ`^jęÔŦjŋYĒ~*'ŠFqІõˆĩqŸá5ÍøxĨMÁ5ÕOÜRcšNMRŽ”PĩsJ QMäõëE wåIøQžhÍqڐ}ih<ŌŽ”=)3ôĨÎh=)sœ RŒSOzA“éN¤úR}i}Í ô¤ŌūTŊi;Ņžž”œúŠzŠaûS÷dcŠi<Ōd\Ō‘Ō“4uô zqGåA=¸Ŗ9ĸ’—&“Aë@ëNíŠn(ŸĨü)ŊéGŒR’9´sHŨ9Ē[Ė;Ž“6BՋļÛ ÖVDąœ7ÍVm!eŒ3ą-ß5^KÂ÷M< ĩeaˇĨ-đ%ŠkFMžíĮ8Šėؚ˜æĢ›p×ۏjĶL/•ŗUĮTų÷Ļĩ*ķU¯mØ{V‡Ķ3ûéqÅ9qšC֓>´Ũ(ëéIŌÃړx{ҏzŅŋ=Å( sšk:úķG˜û—xėEÁ=E¨Í(÷§gŠAĪĨ5œ/Ĩ*¸õ¤ŪuÔR‚ãŖJ éHWÂ”>zR“A8ä BØëŠi•;@uĪQJd\ã"€Āō :”dzRFpzŌdJrŒņÅsŠ@Øã4™`KŸ\RvĻ ÔSƒÜSÁÎ}Š3Æx 8öŖpöĻîxĨÜ;b—?JMÕ-Žŧ—SŦc‚k|ŠpéGâ(¤Î((=Egę˙-‹ŸjÎđĶnĩcŽõĐ7NÕ^6>aŦŽ•DŦsŠxAĶģM+(8é@Pji@NM!IÉœĢMޏņIœfޠЧymįŒĮ5$ĐJŸhÆ)žX>”ĸ0xĨōĮSŠO,ڗËSÆ;ËU9ĨÚéIˇ8Ü: `}TrWk˜°īJÖÛÂįU•\)qARäb—¯…PŊ:SēRgé@éÎ(ī֑€4Ī)sœ pPīMōĀė3N 1ĐS|Ąč)V5āb”¨=‡ãAAœāSÆv ūPFG5Œgĩ)\úRyj@ éŠ] Šv1ĶdbĐtĨ=8ĻíéŠ\zŌŌ€¸¤Ø=Š6ڝˇ”íMXĀl€)øâ”t¤#Ū›ąy8›z GŒ7j€ÛķÖĨŠ•)\õ (¨#>”…( ãđ=):PzT@3§j˜Ôm÷iGJ¯v3nßJĪŅ— øõ­8Á hwíIKĐVf§aöÅ œ ‚ĪF†û Ÿ\W5ã+1K* ˇaIāußäg'$ŸZėįŗIb*@õ­šÚŖÎkÎüR™××uĸlm:<āœVˆH”g LkT”†ĒęöÁô÷SØW“É+ČrC#fŊÁúĢ\؈e9uŽ´ž3Ö°üC¨‹kFÚÃuy>Ĩ#Ũją“<âŊoÃëŗL„JÎņYHÄmĀõ5gÃÂ9-FŌŊkÍkŠČ5Âø†ix˛FHĮa]F‡r×ZZëŽõÍë0˜¯†ųKō+ļĶ—ũ3íW: P9OS@mĶžĩÁi÷ÃĒ$[Ĩwąd ƒHD[ļš5$6Š % ՁԗņĨÅ2UČ"ŧßŀŨ+'\gНĸës[ŨŲ ÜW¤Ú]-ÔE ‚+ņįIëģĩ<-„ŅĸĪŽk;oVŲ$œ`V–›ĨFÉæĘšcëZĻĘ"›vŒ}+‘ņ6†4 ƒßáb[Kņm!;[Ž{WkĒéĮSNÚ[]ŪqąsJã|Mh-ĩä¨ė+¨đŨ¯™ĻŠuįžjÆĄ ÃtŒ СļōmGy§ŠĄUÕÕĀÍwˆ 66"´5kõ˛ˇ'#5Čiū~ą¨7˜IŽēû]*qÂʤ›OŽXŠ•ëíYÖYŨ™<úÔ~'Ā—č:âš éņĪ|ĂT3]ōŲD@¨&Ō •pPd÷Š´ëŗBĢĶĩax˛ūKh@SŽj_Ú¤–bgÃ3ōkf]>)T‚‚ŗĸĐŌŪđJƒķ[ę0§ƒŽ´úP~””ĸ“Ön°sc&z`Õ ö2G­ož*Įī[ŠąGgŌ‚qA qš3‘P4Å$ Žĩ7nqN)Ŗ“ĩ<Š@AĨ'ĐĀĶŋ*hqģĸC…ô43094ö<õĨíMÜSJ#9¤'RęíĄPF1V 2%>ĩ7`)3I‘HX␜Ą#ZÚs$Œ§ĩ\$ RĨĀĪ‚EädRîRĨf :ŠÎ\uõpã‚)isĮšīĩsLŽa)āƒQÜLcaÁŠŌQ´r)ŎSKۜÆ(ĸ—Ōp94 ‚;SKb‚AéŠ3@`N3K‘œšBÛzš]Ã֜Į4Ũœ RBĶw¨l)w`dô¤.x4…¸ÍÚWp4psHΊ*9§g=(Ĩ¤Í‡­æ˜Ō*œ)<õ 90lŽi#Χæ˜ĮŠ‘“Q\˙Ē?CTtŖÃ€;Ö°õ¤ÎsŠ=) æ—ˇgېôĻž‡Íxļ!&œŲę cøķŊzkŋ8ĀÅFāâŧׯ$MJõôÅ\ŅŽ¯á´ĘĄÆ8ČĢŠ¨ßI&X/Ōēm1œĀ $ũiú‚“jāsÁ¯2[Cqu:í,A5cDēm/Q°'“Šô„œI5Åko&ĄxbFāp+˜ÔėãŗŧLãq#’+Ķ´&ΙČ#híX^1,QTižŊH ō¤qģ•å—pƚ“4`ŗ“Æu^ęPÚ¯îØāU{mJō}QՂ†į5ŪFsæŌ”u§đzTNp3^¯GįëQ§Sš/tO%„ą)Žx­OߘGŲ¤n{fĸņŒMq@sķƒZZoît•č¸NkSöŊ|;°Ū•é6ëˆ€ĀŠ{Õ R öR gƒÅy7ڌ>!@ +×ė†ëhĪr*Ë+Î<\Z=McÖxoæĶc9ę+snĮ)ÍyˇŠãSŠ/šŽĪÃˡLŒvÅbxēYÔSĨ\đŒ!-=MuÅ.8¤Ŧ_(kWĻ^Ļ—pĨ mÑ]2ø„yaŠM6 xÜۈך锖Pk“ņ‹Ü[\üŊëAņŲ¨‚AōŽ+ŗ´Õás¸ ĐIRAAŠs‘KE`RRŠJĘ×2l$ÆzU? ņgíščNĩgąÍX>šĒĪ/ī6ƒÍ#ģÄAíNšB"Ü=* ^X÷gĩIlėT†ę(˜*“×4ˇ„d­Ai;ē0cČ5f"ŞÆĻīJ}Ē93°āāÖ\3NŌI'ĨH’Ė—[•>ĩfyJāɨ^9Uwã­KĻX}¨aÛ-Å[ÕĢŒîæÎdbĶÖVƒULûå+žJrLÉ8N ŌÍ3<ĸ0*§ŠBëe'ƒŪ´ŦrmS'ĩY' 9ÍW¸ē0ŽMFģįxlgĨXļ°ũECmÅĖ€æĻy “„ô¤¸cÜ:Q$Ĩ­ƒ  .œĢf­Iraˇ ["œ—ãܧš•[|<ÕKd2oģÕËx|Ąˇ qÚJnÔä &ĒøŠÃėˇkQŠŒi° <ÁŨžĩyF)M §ŠŽL9ŽTkčGs]˛[@9럒Í`ŧ/ģn :ųūÖ#@ĀíīW∎žËíŠäí-š-h0įšôHäŌ¤ÅTŋ [6kɤ€Üx‘v§Ëŋ­zŨšlļAčĢ$|šįž0„É|„q]O†×n™'8ĩØ lŸtķ^sâb?ĩOzėt#:?q\īŠeōŽW= ­Ÿ ˛ĩĀŽ„ )=kÄōs\—‡­…ÕŲ3Q]˛é0•Û°céUSAŠ+ŋ5s[j6Œv¨Ž`Yâ(Ā}k–ŋđ˛“ē,`+6KKË(€ÄĩŖa¨KnĒe“>S]mŧĸhƒ r*lRņ֓'ŊĸŠĘÖÛ/ôĒžY1“[­õ¨ãPæĻ#Ѝņâ}øâ¤qæ)ŗ¯îvâˆF"Āė(€á6~dSĘŦmĮķĒŒ—DēkA@ãŠw_J5ˆ ÕHÔy§Í2e?hRaã šs`ÄWÖŖˇ‡ËB)ąŗ6{Շ?%C;˛ŨÃwĢ8 œu5XA˛B}juŒÜÔRBVa'įQ_xp9æŦŲd@ õŦ‘šaŒĢyjŗGļjĻ8ÂŌŦcƒšĢˇÚãƒOhļĖ­$ĢæŽŌ;ŌJŒ…Z¨ÖĸeåpiæŅšßa9úÔöņâÁÔė§ËĀĒÚFņČųšŋŒķKŌ—ŒTr)(jŧ$ +Æ>ã&7[ãž*+0B2âĸ[SËH9Í]U G8â—¤` Öq´äČGZœDģšYØí#ąYOh`™eŒsŪļ"ŧcpÁÅR0Ŋ`:U™JAÅŠāSíÁō†j+˜w0#¨Š%@#Ĩ+†ÅVšŲ&ę€QK$2,éJļĘŅŒŽ K´¤8 ¸-+3Kf Ę2TԆ ō+žÕâąPĪ5"Š1ŽÔû`Ę0zTäRb‘Æä"džÃzĮēmĮĩ6å cŊ)hvJ,Ãĸ…aŒUŧņQûΕ0éQˇJĻj;õ'éU4ūôÍi ö¤Ĩ&“Ĩ˛) āŌöⒹ¯éíˇëXŪ|™Ckž^(lm<× ârPŒæēmxÚÅ>pp=kDL õ¨n/0IaQÉ0šĐ¸éŠæ´¯-ĩVÁīZúՒŨ[#šķƒnŌk+‚FqŠõ :Õm­ô⸏Y¤šš;7zí45Q§DÎcøĨGĘ{æ­ølĢ[Žæē,qšĻČ~FŽT…ļˇRÕÚXʂŨ@#ĨY{„NGJįšasŠ(Cœk^ôí´aÆq\ö“t¯vQØnŒ×XޏÆE;ĪDSȨcŧW”ĸqVN0=(Ž(¨ä /5Ã_Ęˆ c5ÛAƒ ō:Vˆíeh|ČNôŽoOŧōäQ+|ãĩw6ؒĐpkœ¸Ci{)+Žr oiZŠOų†î„V˜`OZËÖ.–;bŽWIĶ}HNA sÅwą& yāsŠáüU HqĐ×EáįS§'J×íšdŸtô¯7ņZíE'ôŽÃ@9Ķbՙâģ¸dSƚ¯á‹Á†ŪFôæģ49âģŖi‘O,3œU b!-™×?ĸÛĮm¨•Sž+˛BÎh,:ÔFå2@a‘U ÔŖyÚ6`Ģų 3PKoƒ¸W¯Æ‘]GŽž‚ēæÆ3íZTšâ“4~4§Ĩ%fęĘÍÁĮCU<8ģm0Ny­žĮ5d568¤+ž)§° ĸšAĄ•r0 ¨<â™4eŖã­2(ŽrÕ>?*3GzNĨ7Ë=((ĻŽ1MĀ&œ0)†0M;ą@vöĄWoj^;Š^=Š›°0Á”*€§zN)¤ L ͏éIœâ”õČĻíį"†PÅ.1šL.zqKŠ6Œæ”Š3Í.~”cö‘2ĢO5´.u ƒå9īBÉ}1ÁČ­m2Ņĸ%ÜōEkZ1AÍVŧ. bƒ,yÕÅŽŖ.˛&(@°¯@°/öUŨ×ęiĄYPĢī\NĢáų–ņfˇûšéŠė4Ä)fŠŨ@æĒęZwځ+÷€ë\‘ˇÔtŲŲãÉ\ôÅ[‹\Ô ÁˆũjXāŧԟ÷™Uô5ŌXX­Ŧ*ük@`qëM›!95Áø†ÖęöįäBpkoÃh†ÜC2ãŌƒĨVŧ”Å+é^kŽĩĖú†ņ#×ÔxjîE„DãŌˇîíÖæ"‡"¸KŨęĘøKšĪˇb×^ t)-ôĄüB·*¯Ŗwyp)UĢúĖĶ-šų`“\Ō]ŪEx˛*•8įŠÕ‹Äw=3ųSŸÄRSË9>ÕkEK‰‹Ë)8=Ŧ­xOc¨ ŖÎĶÉÅZ°ņ+ "cZO­‚œĩHÛ>§2ģ§õ5ĶZD …PtŦäÁ¤=)1čE8~„ŅŸĨfęįũ [A9´įŗÛ­F˜ÜjnÕČŠÁ4å`GŸ< œ:ļpAĨČöâ›ŧzZRt=ii¤ÕY/Ŗ…öšÁ50•]wĻ­Āķvž•1"“pĪZ\ŒŌäŠ@yĨ4”Ŋ}(ÍE#”ÉÆqÚĒC~&•“¸Še¸1Ģ>W&œH‚€xÎi ‹œdQŊOЍķ˛N<ĩæÔ€iĀîį"”QAįŊ&ā8Í!w"‘¤QÁ"”0n”וSŠĨIŅēiZ@ŊHÅ4Ėģs‘NICđ¨ĨfÔĄļŒšŠÜdSĪN”Ŋ¨¤Í@ķHâ¤Irš4žb–ÆE?ņÖuHĨ7JFp¤dĐŦ€FjNÅ)§­{ÔrąQÅ &äÉâ¤Ü;Rõ4ĄĨüEt ŸZ7 ^ÔŌĀÔ¤āÅ0ĘĒ@bhyFIn šcR[í.„ņW 8¨žuT-‘Å> ¨ JzfĢ1ũøb˜Ü āT7dų.xéYō p ocڌzRŅaFlQaKŽ:R~+į ~4‹mžTāqAéL1$)Ÿg_AGŲ“û SŌSŠs +ŽÔՅG ~1Ī0ŗKŒzˆÂ¤äšzÆĀ։OP ĄČ“xĐ iĶZ5aœ hGjpˆ`Œ U@ŊĨdŨÁÆ*3ƌSŧ• ĄaPsR*J (iAŽmŖ Ŗ5:¨ŒR‘ôĻ4aēOTĀãíP=˛?ŪPjaôQV#SĸŠŸø@4˜úQÜT&Ũä¨ĨH•TŊŠ’Fp@5IôČ\ōƒōŠbąŽ,mP>‚­`âĸ’Ũr ÕfĶ aĘøR 6?pTąŲDƒĨK%ē8”UÛN€œėZhĶ 'î SĨÂpLkĮ|U¨í–1ō€>•ZîÂ;Ž$Pj˛h–ÉŅåSGĨB¤ĘŽĨēG÷@ŠĮJpŖō¤üŠp}Š>ÔcéYڸ͛ ƒCMļ‚ĩûTq`šéRĩfŪŖ3¨SŪ­ÂŒą€j´ąą˜ãŊ.׉ÁŨÖĻž.-ŲTHΛÁíëVíe/ĪZąG^ŒœV}혟¯ZĨi4–Ķ%ŠšQŽõŊßĨ.}ŠhÍgڝڐņېúŌRŌž””§ĻhĪf”Ō{QíE-%wĸ–ÂŌ˜Ŗž)@ĸƒZ3Î(ĸôë@4ėĐ=)Äæ˜HÍ—˜ĀÍ(¤ úŌâ†ô˜4§Ĩ/RJ1֒–ŒRg< RŌŽ˜éí@â‚)1ĪZSF8Đ(ãԌņF(ŖÆŒæ–ôĻįš)zŌH>ĩŸĢ6-[‘QčÍēÍMjējžņŠûU;•ËŠė XS•JŽ™ČĮJ|Ŗq“EæÅƒMŠ ąŠą\ãԇĨ(ĻžŊ*ģČž`ęģA"åG=Ē; %ŪŅČ:T÷QīÁĮNÔ”¨âĻ „ÅV' ”ĶĖ'ĖÜ8öĢ*^iŨE(<ƒHNhÁŦíIwĀxæ¤Ķßę§ŌĻēMņ:ÔĮl[ZŖŗ^ųƒĨ-Ūæ¸BŖW“„ŦÛčžI— Uylž9’Hx=ëfbƒw\TĀâšhĒ— ÆEĮcO˜‡Ŋ6+ņŌ™lޞ*6…ÄėØČ=2[Vķ–@Ŋ*ŲÜbŗŗZQŦî\ėĻ l(9CųR.ģŧœ-/öōt"š5ô9âĻ]i6ŒŒRn.}ŠŸÛą7ĨU)!zRS%MW:î8Øib×C™J›ûf<C­D 8k0c9ŖûjĀnԟÚŅzŠSĒF#ĪëQ˙kÆN3Kũ­ęFj1ŦÄ$TŸÚđņ–b ũá@Ö`?Æ(}byaN]Z2PuXŊE!ÕbąÔÄĐ­Đch?…Aļc÷>”˙ė;|}ÁųP4Kl°sí@ĐíBāF3ëŠQĸ[)ČAųSCļnJ ũ)ņčVĘĘ?*?ąm÷}ŅųS×F€7?*”iƒ÷×˙°CŸē?*QexQųR›(Ø`¨üŠ‚Â%čŖjwØŖūčü¨û _ŨͧĀßĀ?*C§BOŨ•`‹ĻÕĮԜļQÎŅĶŌ¤6ą‘÷EŌ<}ŅųT_ŲĐķōʛũ›÷GåR-”j1ųR‹(Āč3ôĨû$yûĸƒiPŖō§}•(Í4ŲĮœíŅe$…>Ôß°EũŅųRgCũŅųQũ™É?*EĶb;F~•'Ø"=T~T (q€€~T• °…AōĻ2îʙũ•@ƒŸjöde@Āãڏė¸yųGåM]*ŅåSĨ”Iœ(į­?ėąãGåP˙gÄNvʗû>,cjūTŸŲŅtÚ1ôĻ>— 6Ęė¨BãhüĒ3¤DX6ŪžÕ0ĶbÃúS˙ŗĸÆ0*Ōá<â”éącE!Ōa |ĸ˜ÚL'ĩ'ö4Î) ļq֕´x[¨§G¤BŧbĻū͈õQJútLvū•]´x‚ SWF…?„SD›4ņ¤§\s@Ņĸ9 ŌIŖŠ\dÔ)ĸ<1ëSž”’E0čč ‘JúVė|ÍP6Žäņ!˜t‰—+ ÷ĪėiÉ˙ZÔ pŲ2ĩHtyXķ#SãĐū`Ėā[PÆb¤n˜G’*^ĩBíž)¯BzSœ>ƒVŖoŨdõ¨LŦĮå§E)/ĩ¸5VüČ]3W!Ü#ēÔšÕDep™"œ)lƒVĨfUĒsNé†ĪáWĄ20Ūĸ gdŸÂiÚiŌ>ÄÉ#5_Ībģ˛1VbH™(¨ĨčEgÁiXžyâ­\†HĀ^*ļ⨠8>õv2L|õÅSˆēŪ0' Ôׇûæ”Ė"ˇÜOwĒÜ} ī Wmn ʞŨé‰Kj“DŅ_ģƒZãĨ(5Nø3/ ŽjHŦc'8¨ˇ'dė)ˇ e*xĢą’Č­:ŗu4%RAÍ*ÃēØœã­KfįËÁí@ũķ˛ž‚Ąp`6 æB3".CVí×dJ3ÚĄsŊČ'?JŽŨ].HÚkI} !ŗå„ sÆjđLV{FZđãŌž+…ÁāÕš˜íŸw)ˆ)^æ´ĄmĐ+¸ŦŌ’ūŋ-j¨Ú&ŸÖ™/(j¤1îBsKl Č˜ŽŲĨģRXqKp[ėÜqY–÷DŠI­kS˜zžŖ˜úU[(đ¤÷ÍMq)\`ĶY wzKw2FC ûų9c u隒õļĀ[8Ŧԑe‡åošŽZ@Æ!š‰4˛FVá8ÉŖP\Â|ÔŅĘRĶ>‚ĒĮ'œsW`v95gˇZ„ŠķŠúö𧊎qšĩÕ@ĻāŌRãŪ‚)ëE}(īF(ÉáČëIŒԊ÷ ŽsIŪ–“¤īŠ^H¤Å(Ĩ¤'Ž´¤´˜ RâŒQۚCŌ‚¸ uĨĸ—ĩ&1IŠqĻâ—Ú“ŠBŸZ:Qڌ`QÛ4vŖQŒšZ\Z  œPGīIƒíJSHĨ Ž(ŖŠ;QG~zPyÎ:RÍ ûŌãžhöŖŌ•¤ÅŠÍ!`ķI´gĨriBāûS‡Ĩ ëHŨęNYOœzU Üî^:|’ņN…Ųíđx4[ æ”&éˇ eĐ ŠĮCVQ÷RMoÂĒĸ™Ŋéŗ‚&B*I‹léUî"Ũ=ÍZĩˆØR\ĄdČę(ƒsZ™y:ņúTiō@üęh#ōÆY9¨ä)ǖĉ{ĶîˇäČĒ÷¤ˆm_šŦڗō@aČV;ąÅ-đ-OĨ7Ę3Z#ŒU{;a•5u"Á$´ČÔĀėqÁ¨e=ĘļߔĩĻŋtSąƒPĖ›†1Ū•ˡŊD"Ų.īZtąų­‚8ŠÔm STîŅ0)QXAˇŊ6ÕT‹–å‡zGĖQqđM>=Á Ž*3G,*DÁĮ5>){Uiī R+ej¨ öĻ8â’ec*:SĻŪvņÅWģƒĖAŌŽÚ˙Š {zÔN6ÜníV•ˇ-8qL—!:ÕkrĀE5…ÉČâĻ¸Ë Āæ˜ęÍŪõۂ¤2sëV­c1ĮˇU‘Ō™'(@ëTí÷Ŗ° âĨš=ęzPXĻÜSŖ‹ËŽ¤ÔŖŦ¤‘ŒŌI´ÁĮj‹R ÖĨrEcYØ\šķ úÖ팒VNŪÕ4ņ30aÔUK¨åœÁëVŖ‹6áŽ)ą@#@âŦ"ķœT¸5b%éRÔOÂÔqR§—Ÿji”(&‚=é;ûQz^Ũi;Ōū"ĘĘŒbŠZRŲæ›×Ԑņې}iÜ㨠qJi.\ŠN}hí֗JZī@¤&ŒéN'"ČíIƒš>”}(éAŖ¯z;ĐO4˜Í(8īKHsK’Eâ“ņŖ4¸#ŊëEŠ)zsFI=i?ZNũ¨Ĩ4Fph9ÎsE“ږ \w¤>ÔŖ=xĨ'Šm)ü3@Īz 'SÔR⛜qš4¸Å#ũĶU­žķr*ßåM‘D˜Í7ËŽ)BĀSLx&¤TÛMtÜ0ph6tÅ?š)Ą03Ū,Î3KˇåĮjMƒÚ…”Ž;P”ģ‚ižX RĒāõėûŠiÃuψÔxĨÚĨ ANØ1FÁÉĨ 23Š ŒņԘcSéNĶĩséM Ŗžæ¤ڎ´Ėôđ0sA=¨Ûƒž($šLã­7~áŽ)ØíGĨ}(ۊpëÍ+tíMĀöĄGlŌąã"õį›~”ŨŖ9ĨÛô¤##ĩãŠp\q‘HP7Z})Ef›´gĩ@įŅŒŅŽÜR3ڔ{t§™Č¤Î})6ŊéHúP=)NJnF1ŧϔsßŊŗÅ7ō§QH? q=8¤=hÍ&1ÜQŸĨ-'Ni{öŖō sG'° Đ(ęip=E'åGåGOJ;öĸ”:ŠN íGAڊ?* úQøŠ3ô¤Æ})ũŠ„s@ëJ c‘´æĢی3p*×nԙ ‘JzäR‚"i<ĀN2)ŲĪĨ&@<‘N9Á™Į4Ŋ~´˜ĀÍ~TŨÃ=E8yâšXg­‡#"”9Í # Æh'ŽÔ›—ÔPÄc‚*ēČL¤qS8$ Ģŧ)ĘAPdōE'˜žŖāARôīAā}j´îW=ęQ'îų¤Ž8e§#̜3ObZh‘xäQ#asž´!8Ԍ‘T,Ĩvēu'"ĩsŠO1Ię?:wQJ9nMښN8¤Ūšę)Y‚‚N1TMŅ‘đ„qWŖ'=i˙••TžäÅ ĄĢ^¤nô¨bbYš38^¤R,ĒŨÅH§ž(é V’r’…ĮZ° įĨ0Ną‘K#€›¸Ŧy¯d’}ą€y­›d šæĻŠ@ëA§ūTsKŠBĀHŖpn„U;—xåS‘Š™nS$fĨ$mŠ€Îę*XåЊW/qMYUÎ^í™*{ÔË0 š5*Hāb¤?…VrDŖëVTņPšų 2ÜüŧÔô€sC %E<žZĮAYëŠHœ/õŖĘ…öp;ÕëkŅ* ņÚ¤Žéfc‚ N Ŗ"—ōĸĸž_- "ĒųÎĮ#Ĩ,Lōė#‘W7׊PÁ熿FŽ"WĩWąšk€Y‡|UĻC„īRƒ‘F*‚Â2GŸcy4ō˛“šÖĮ&”i†E§g#5KĪqtSĩZķTS÷éŠiuÅ<zPyíMb9Ēët¯.ĖŽ*ÆáŒŌTœf‚Ázš‰ŧ)CĶĨ‡­¸¤Ū=iC‚Ē—wgįTđKæÆÚ¤Ü9ĄNyÎiI įŠF(§¨¤Ūšę)Ié’IąI¨ûŖĪz¨o‚ÜųDōi÷w_gwj}ĨÂÜDĩdzæ‚hÍΨĀT€†d 3ôŖ4gĩŌÂ—ž)ĮĨ@ķ*rZ˜.ŖaÁ”NŠ9aR†Ō—'=Š7 ōir  ԁF1L~†ĒÛ920=Ēîp¸Š]ī¨g•Ä*ĘjÍ´žd@椓;*Ŗ6#,IĢRyį9ÅC{1G^8>”\o|+įÔUüŌŌōÕ%šCrČG§‘K•žˇ_i•šÆĶÚ­Á#dŠíUd–eŊ>éĢ2;Æģŗõ§}¤yAŗÖ—’ģ=3DR™ûqT¤š )Vb*Ė æEE‘zÜņéI¨†PŦ‡œŌIļŨ“œTÖNÆßžÜsTšåžÔŅģmŠÉ%ÆÅsļĩáŘæ¤Íäb¨ß‚ëS/Īn3éTíā&Gų¸Š-ã1ܰƒSŨšTČĒ"āq“ƒīW‹[ä|nEžã×J…<ĶaGvå:°į4ûŠö§ĩC.āšPjô ē1¸sSÎ)9ôRâCį*úĶ.Ēn^1NReļæĄ˛€)nį5ĸĨ sT/ĶpuíMDPÛŌ­ĄŨĪSPĀ6ĘâĢj22 Õ ×sé[CiWæĢN˜ŧwĻ]JČŊA"3(eÔØgˇÁëŠĢajŠ#“ÉĪzˇyhļô§YÄ#ˆsVąƒ@ëHÍĩjšHĶ;:T‰ sڙvģŠfŖžääpjHË}˜wâĢۇfmÕÜuĻʅ¯€ŨZh6ŒSēTsŨĨe鱕šCÛ5ŽN*‡Ä)™<Ž‘Ģį5§Iî*¤îŠryĮjt.9éSÜKäÂHíY†á䈞N{b­éˇ/,e\r;֒ûÔs ĢcŌ˛--ČŊv$ãĩ^ģ”Åŗ¤™ö¤îĢlŌIgœØŦí5Žäw1Ā•eV‚OATī“07Ōŗ, ,G-ÎjÛÛųą§šsÜ\g đĐŖÁĸōr-ˇ¯Ĩ?NÉ,ÜÕÜҚGûĻĒÛĒæ*9c=*¤…[ éRAFØĪ,ųØqUv“Rilą}énU™ųZŽ+EGœõ¤ŖŒwĨëAāU] N[3Ņ‘ę*„ĸ'b{šš€sĀĒw$­âœ~5b_ŪÄ@ęjl|;Օ8ˆlTpÆQXúœÕwˇYÉ.ŧúÔ°BaÎŪ•i>ې8§_ ”(ČÍO†û0į9Ž&ČÅd”šyÂįž Km<ļķĒēN3[čAQO=hj•đfA´gš’ Ū@ãœT6É"Čųi\:܆Š.ƒ°\ ÔrÛŦˆ2¸5!’Ø/SR[Ŗ4;XvĻĮE¸ ­ -ãHMZ¸€ÉƒÜS‚åpV§ŒmĮ!cŠLš­,Ypū”¤]´å LJ1ãŠĢ=h¤ę#$`ū5( \ŸĨNTp*4Ú[+JËū—œqEā, ĩ<90 ôĮzĖ=AŒƒVŪ?:eaĐsR^6Û|Tq)šËņŠĢiląG­XˇĩTš2(ÆkMx4˜ãšĨytę*# Ioķõ§Y#íųĪJžčâ¨töĖ<õÍE;æíOĨMy6ÛcŒt¨ôŠwÃĶ5§ôϜāâĒFG˜āŸÎ¤HI‘Q]°GŊ-Ā-Å:SÕIļg#ĨPēA$ŲVØÃ¸ŠlZEĢķči¤É-͝j–ÖŨĸ¸ŨžŊke[åĻäÕ[įÛÉíTlāGļĀęMhÛÄci¨o•|†ŨŠeœ(Öę S¯,8éE‚âԚŽfķ0ã5z,Ÿ7¤l`Ô1¨ qSQIj>”¤qMÚ§;T70 Ô)éKiÛÆTSn!ŽÜŅ>R튛˜ P¸90Č=*(FŌjjByŖv{Ōd/R(ķŽ´+î)r;ÔRÎ"ä‘RĮ t ëKۜi5PŒ‘FāFxĒé93aŌŦ† āuĻų€ĸ”œjgšíȧ} -’ĢŨN`MŨŠĐN%Œ7Ôšuǎ2:ŪŦ)ųA4žjtÜ3O=1OŠLPOŋ5QŽJNŽŊęØo—ž´ģ†84Öl.k:[–iFÎ*ÁŸd;ŸŠ|‰—*xĢŒŅKšaqĶŊ;#nx¤ÆhŪ3Š]Ācš7 ã"—Ū—ĩ'j öĨĪšƒŒķMyUzšS(ĮQ@qŽĸĸ7+œdTĘÁ†T敝Td1dV<Ԕ”tŖĩ/jG8\äUhŽČ@=*Yßd-ŠŠÍ÷Eš•æTęiĸę3ÆášlîLLTÔ÷@B 7"ŽEÔęㄎ´ŌëĶpÍ.x¨Œč­‚FiŪzŒŠtĪ ō¨@ĒđNZmšČöĢĀqNÖ zSCŽÄS‹íÔ_hN™§ŦŠũ .ā&š$V<s0QÉĻoRČŠƒô§cŠiČU îŪ[†Q,A‡z§w¨­ŠãšŗĻT Žĩ?Jĸ‘˜IĻųƒoQJcJ[ŽŧÕ9æ+Ę՘X´`ž2)û‚õ"”ÌRōir .2ĸŒŒRšĨŖą¨u2‘SžÔdtŖ8 QÅûŌ(ã֗ôŗIŧgæœ9īMlāÔqgqŠJĨq# p:TM;$ČšÎjÍĀc #ƒŠĄeįH;t=ĒÔ%ãŸä´ō`ÆMSŧ Wžjͧ¯Ļ*ĀįĨčËԞU•6ž Ģņîō†}*ĢôŖŽâg_›ŒÕ‹’BšÍ”˛ĻâÜÕë9 –āŸÎŠÜÅ#]ŠqZ1)TÁ5 QGjŠ|?ŅیÕ+evļqRØÜ;ŗG'$S¯F{ÔˇųVû‡>Պך1*I­Ë#ēŨNsĮZļŸ\U9ãĖęp84ˇyJ:S2H ՎZJĨijžsļsÍM{h ûRØB#…qéWGJi8÷Ĩ¨§- Ī2>}ÆŽZģK ÁS{C{‚ŲSWqŊ˛ˉ|ĨS|ŌČ5n"Z>zԘČ˜4t¤=)čsTĻ‹lÁ¨/‘ˆVCRĄ"Ô΀GŒâ¨Éĩžĩ>œûĄäõĸúãbˇ"Ģ[N¯ ÁÁô­qš)M%(â™'*FxĒVą…™Ŋ[•TÆAÅAh1ëTæ“Ëē;šĩ,P‰nwŽ•~D1U`ˇB‡ŒĶ-ĮvčËRŪÄi>ĩf Å5ŽŲÔͧzŠÎˇœyvéZPÄxŠĒ īMM-ōĶb=ȧ“YĪ#M;"ž•JęT%˛3Z ‘{âŗšG‹7# Ģz|Í49&ĸģYe7ËSnķUvœŸjš gš~ qŠÎԗ0TļI‹eúQ"rčũâsƒšš‚bÉįŠ†ÕpĪQ\†ŽU`x§1ķYJ­]EÂŪŸP͍¸8”˙ņōĄūîx­ˆņˇŠj;TSœ'Ÿ$›S#¯­\ĩrđMRē‹ũ-X5IqUÁæ­ų„[îTMĖeéPÚŖGzËÛĩl.irqTŽeũđ@y4Éŗ îSõĢ!Đę*ŧ1+!éÖ …Ú+ļAĐúŌÜLæ]ƒĨU/2NģsŒķW¯ =ŽAÁÅAh¯%¨,Į5jÆF%•ĪN•ˇ‡¯Zę"G8ĒV2”ŨņPjqo(N5Ģl6Û¯Ōĸ–Vi|°i’;Û˛ķMÅÚØ˛U+d¸’Üąsšŗ§K#nYãÖ§–LČ8&ĢŨÂQ2­ÛmמÕY¤bîôéŠuÁ•Ų tŠo†OJ’9G–âĨŒļ0OZ{ĨŖĨE;íCĪZĮf0\¤›¸cƒ[jÛÔ0î*ŧÎË"ā÷¨īdtˆ:žj[Y‹Û+ÍU{—i3J§õĖ“´jšÚz֛ŧ‚ž´­#ũŸxëMŗ¸2Ą-ÔSfŊ).ĐFiVī{•EežĄ?ö‰‰W"ˇm،@°Ē\ šŽ!‡&Ĩ^ÕCdŗLģ—kBYÁZš2D ŠJ¯vŦŅaj˜…žķ ąlލ•Ōš ĒÃŊA!ž`ƒWŅۅ9Î*Ŧhöå”AĨ†6ķ÷rkH”¤ņÚ¨\ÂL‹ ę žeÚW9ũÔz Ŗg)v™ĢQĀ<Í᝭Gs ī Ŗ8ĻĻXāĨ>į"Ą{T6lÉ ilŨüæÜ¸­QԚxæ¨=ĶyÅvqUŠ:ŨoåĻßÍō.Ņ’ _´“| wÅFčcšķ0NinÎ(ŖąÍ-ŪVܨâĄŗũ”†S‘ÚŖ°f[‡Č;IôŠŽco´,̟z†ūY"œÕ‹6o˛AÎ;ÔIg,>ĩ ›4wn@8'Ōĩ'ehĘįŠ‚Éd1Č*܏ą3éIŪrä~ĩ:ķôŒ@ę*ŒōyŦĒŪÚääsV´ų÷Ûínâ–ë!”õÅA}/ú8Ā<Ԗr˛ Œ+&O5¯Ëv֕ŖGæí+ĩģÕˏõGÚĒ‹…KS“ųÔZ\ÁÕū´Ë•Iem­†ž$ŽáÕžoz˛Â(īr@ kR2ãŦp E î$tŠúĶҰg8Ĩ*1Í P: ]ƒ#Žheb‘ŖR)ҍQ€8§P=hęy¨ä@üRĸĄ@›=(*)6 zШĸ†PԊģxŠ~sÍ{P:Sd*1¯hčlsOĀ# ĨĀčh žƒëN _ŠspiŦ‹Į­b ô§`bšBŸ­(ŖĨŖ4f’ j |¸õĻ, • ãĨ/ZÅ/JZ(Í#Ô`íĻŌäzĐ4SN)ãh¨Čâ“ØbŸ“J8tĄFãš÷ ˇJLdæ”â“­Fa]ÄúĶ„jøĶ¸ĮãF&æ”ņ@Å#"3I€:SŠzúTNp¤ëHOËQÆF*L{Ķ0Ã$ŠhŽÕ$ãÜŖŽsO2¨MŲ¨ú6æTą]$§ŒĶŪ@¸&Ŗ[•ß´*VŊ)žjžw)c•_Ą¤ęj ĖŖŠ“4‡îŌDŖmL `æĒÜģ*œTvŽė§}ZãiÍgIŗG5nŅSæ9ŠÍM-C4އ+Ԉg2ŒšYßbfŗ¤fÚ$օŗyƒžMRēybšQž ­9QŸJdŌĐąĀÅQŗŧûDėāVĨsJFĻ‘Í;#Œ N3‘E%.)z h4§z? @i8ëKŸĨ;p4Ūũ¨īڔqšNôž”cŊ4ƒN*Í)QŠLãĩ(ÁĪ­'íG~ÔšRņéM8~(ëŠF˙õéZ_–ņéF2:P# RˇŪ擂hĮ4c4ŊŠĮ¤8Å 4šgJ>”ŪôRœ`RqIŠpŌp 'E(éGåJ8=Š$û§Š‚'9ÅW’aŧ ęiŽdIŽ™Ĩēæ#ž´E K`r8¨DëēĸŽR—E;mÕÃG ĪOZHgß' ‘NkĶĪJt2°˜Žx5bgOZĢv Ä8īW!˙V:Tŋ•4QßĩÉ9SœVUÂ,2 €Æ:͝][§ŒuĒžEU‘@ā5]Õ$’ˇÄzsŠĄ Åäņ, m[34Cxæ§8ŖĒž*ú˛ŋņ\ö™<Û>ãqÅm؁qo—QÍV¸ŒÚą eĒúÂYū,Smäf=*”— mé•=ęí„Ģ,$ŠëÚĄ1¨{UĢ–há;k>4iq5vČ?–Uú”Ī(5ÃÕfe‡ĨYŽ•›ŠBĖ™S‚(ˇˇc –ni—ŗ4{cûÔ,Åv˛‚ ^–V6Üc$VOžË 5­Ä– ät§Û¨Á=)-”,ƒœĶŽcÜE6xž@EHƒt#"™Ė:ĶL…æeíO@DžÂ‘›|Ĩ8ĒאČ@īZ`F>”ū=dž ›ĸéŪŖōØ@nqSŲŗ>cÍ0Œ^(ÔY‚ Ŗ5Ž&ũúŗeOJčáqå zT¸ĒđnPŨÁŠ"ĪŲ…* tä d*VG\ņL ˛đ㸧Ũām'­L˙4QUíaāõëV]1Vuœ æHsŪ¤īåSî]„¨ qI,E™XvĢ2)x{gJßhØķW-áՑŌĢÍ÷ĶŽõc¯aQ7 zQ ČŠ:ÍE iŠĪJ‚C†QëS(ÂŌä3KEG7ŸĨAi(ņÉ54Ŗtd͸,°`Uí<îô¨¯ö´ÉĪ9Ģiŋ…Sē|œÅU˛T†äíū*Ų äŠRpEÍqFh¤ĨĪ‘ÅķHzĐ=)HⓀ(ü¨đĨö įڜ~čõĻŅ@§b›œŅš­ @Í(äҁŠN}ŠNOĨ%%;ß4™æ”ŽqMÁÍ/4§Ĩ&iIŖŠŖŠF94´œƒKž{QIŠ(Ŗš;ҊSøPHÅ ŖŊ)ĻŌ“IJ8Ŗ<ôĨúR7J‚.ϧ<ŠÍš7[ÅásxaD‹Ŋ0i‹1yyéDjb]ĸ‘cŨ.ķQN7ɂ ŠX­‚ļSš°îãƒŪŦĒ Œb’E+ n´—01ÍK~ėtéRgŽ(č(öŖņ¨fmĒ{Õ9Á¸ˇ pqPCEiĩÎ*= y ÍW¯đa=čąT0¨•eÛˁŠzÃ4Ŋ=*­Ū<ĸ1Ú¨Ú*l)ŗšŌ†0‹…S. {ƒš@XĻÜ{P!)Ѝ ĘUÔôĢvÂÂŅ<$N$_Įö‹ĖL7Ĩ6üŦ‚8ÅK|š5\FârÜbŽöŒÕKÅ,˜%°"%v¨Ž-Ąr(ōō9Z'Œ´@(æŖû>äÃųTņ@-š4C(až;QN˛‘OXãm+‚cĮzEV⥡G15'—ļBŪĩ RIĻą&ūô˔y`ō*h3ŗ R€ S¸¸Æi$;`éŌ™dĖĘAįžĶœqEÂŗP5ļđ7'OjŅ…pĄM+ü•VâU’2äæĨ…s Š]Ŧ‹ŒŌ¤xÉīQŧgÍ 1šŽéR§*eRŅۈc*y5#ŒŠëUŖ€ÆäƒÖƒ3oÍK$;Č4ģ1ôĄˆUëÖĒ‹|ÜoZžŖQŌ ”üÂĻ:ĶasIĩHy9ÅA8b˜^ĩēČ>õ\ÁâĢK3ŠĄŠØ•Nõ^ŪFf9lt¤Á& œļ ÍEj˛C.X‘IRR[gfÃdŠĐŽ-¨=Ē…Í´&ėôĢp+*ZIcÜ ĀĒp[¸˜ą^*ÜĘümT¨Қx~T¤jL &)qĮj0}Š9Ĩ‚9¤äŠ\p3IJSĪQGj4ŧŌséGá@”ũ)b€§ÚNâšyŖ▒ŒjsڔœšNô):Ō‘EŖĨiNzQųQGj1KŠLQŽhŖ”¸ĻŌҊ1ôŖ¸>”€`äŌĶNqQDŧ“SŽ”Ö@Ũ@ĻˆÂŸjR´Ē€tëFÚ ãŠB€õĒ1Š zâ€ŖŌ”ŽE7Ę_AAO—‘ŠQŠyĨįļ(Æ})…wu›å¨č8¤h)ĢnĢČœņ†\(Ž1ANdÜ9§*ĶzņQ˛āŠAދЗė)6ĐgŠ\Rė .(#4˜ ŒŌãm§cŠn3Å!LâŒ`t j6ĐWš6ŌãŒRâ“4t  ŅļŒqŌĸ€&!Kœ œš Sš0ŖŠvÜķې¨ŖoõųM5lôĒÂŨUōxĢ0=ŠHÍ(Í!Ŗo qHNj>”Í~” RcškÆc)*PriÁĒķgxuŠĮAÅ1žéæ’œÔģ@Į4›}sH4šæŠF&˜ˆĨIEf„ãëF ë@§Jz)„Ôt=h84€gڝŽ)3J>´ )÷ŖŊ֖ÖF MÆÆŠCJŊzū´­ÛœúŅ@ã­ëEŠ3Šp4 qIHhīKƒŒĶyÍ™Å(9ĨȤĨQÛ4 ņMį4ĸƒõĨĪŊŖĩ'n´§§Z)擤īE/QIEēҚ>†Æ”Ž3šJFāŠNyЇŊ#0č CKĮ­T{ƒæaNqS‚Ļæ8§G*Ę ‚ 8ĐŽ3֔°îh;^~h â˜X’E1&Y3‚*+‹Ÿ)†zŒÔčā¨äsRךnyÆh ?*B@ęiĸEūđĨ,ÎF)ŸiBq¸fždP2N*?=F*Ã æ˜fElĐ.v7Š‘H<ĶLŠZU7ņ R4ĒŧĨV 84BĀM7Ė_ī U0āҏķM3*đN)V`įƒJîäš`ŧ*RŲÆi}¨ĻšpeeČ5ĘĒy"žm4ģ×iģĀęiųÎZÍ\đĀâœ$ŌŒŌt4ÅA!;Ƨ–Ú9"Ė˜ëNIŒ‚ 8ũhS'•aBÄņUí.Ōpp{ÔˇGä<ŠE˜5*8eČ=i@ƒ$Ō$Ęũ?Iœ´īPŨ DH<â ļœˆ†ķČĢqʲ7ĘÜúSe”F:ŌGp˛wæœō…īÍ4\ 8'“Uo¯ cœšąo/˜ĒHÁĢÉæĄ”0sŪĨΏ¤# 暃ĒEÆyĨc“MéÜP:vĨéA¤äõ4ė)Ŋ(v=(æN'ĐSsíKÛ§zJQĐRūTŌ>”QÎzŌŌ­(8æ—<âŠ?J ŋÃԐĶizSK€yÅ(9ōx¤íIƒKڎ´Q×یjãŠLs“F3IÎiÛž\w¤íڌSqÍ8tŖv RƒĮjNũŠ{b’Š:žiOáIųRŌ{RįŽ”fŠ\ķGZCIKĐô Ōt ŅøRƒôŖō¤ĨĪjJFéQEŽj\Õ)ŧÎŧTÎÂëfx5ĸüĻ*”ãĖcš’ņĀ@ëŠM= B2sš}ÄÄ8Z‡s# ŠnYŧŦ¯›‘ãR[ŽGŧš~xǎŒ-ŗƒŠĢĻÂʅ™˛sS_ 6äŊÚĄˆIä†Ījĩmpe,"Ą–ķ,ʸČĻZŪ3Čc~ĩŖøŠ?*Ą¨Jņ ÚŦÃzŦĀoÚŪ•%öĸmâE$eēT{^HÖD$7ZžĪ!˛‰ ŠĖ{ĨŠrKzÖļ—?fŦO&Ģj1;Ü!Y6ŒôëˆY` "­E+ @{âŸķcÉīBĄ„1'5N;>WtŠāgYp:Đ;PĪjŠeܤĩAAō\ķ M™÷H’GJŌUۓšŠ#âRIɨ"¸&ûŠģxHƒŽĩ—öĻB;dVÍŗn„ŌŦNj9XĒ’V„ų¨M5]Ŗœ'cOģBČXuļō "Ŗ­I#lŒ‘U—\āæ§Œ¤†ņ+šĢq&ĘzžsE%UŸī/֝1- éŌŠYÆLm¸įžõ%™+;§QZ•īŠ†åUáe5[O…#CˇÖŦÜ ĨDbVƒŸJmŖaĻ<ŲYqŌ„‰’@WÜV€Ō˛/ŊZ™âĮzŽ;}ɇ‘VāËMŧbĻÍ# ÃUtS`i7Rē’„zÔ0Aå“čjw@ˊ…a#!Z†âV&§™Í2gšŸŠLfĒ\+1õ§8>V1ÍAkĸļi°ŖĨÉlpkKļi â›"‚¤ĻĢ[Æņ3 đjY)€)EƒÖŖˇ—vz %$.ĸĨ“ŌĻíFyíQĖ씀jŧQ4@Zx‡'s ŌqģrŒxR~õE,N\xôĨ#ÅK$Uæ›E{ņV3ÅC'ßõŠ@āsM~”ôíRž})ĪĨJ:S%?!ĀüĢ1áF͓ž´Z,’ÝÜՈVPŒæ ´ē"áÕÛĄ­™Yļäf¤ĪSÅ3Î\ã"žNíMĄžíg™ŗ1BĀTW&Hö”9Ģ‚Rļᛮ)-.DŲÅZ=(ü)húRÚ Ēfc#B)­Š Ke$Œ[ĖíŌŽ<Ē‹– TIu€ĀԌĀN8¨…ĘąÆzTģÁBĀŽ*ŸöŒbB…šb;„pyĄ§@q‘šTēL‘‘ÅI捚âŖ[ˆķˇpІĨgéHßtķÍfH˛ŧ­‚@ĒË$ë{å–8Ģ$Ė“¯'i5|Č"•fG8ČÍ2k”‹° ”ÚF iMšRŦČįĸIDk’@ßÂFwŠš9V@vjÁt œ)ę*đl(é5fGo+pė*;K†˜ŨE[ô´SYšĻy‹žĸ™<›rŠŽÎäÎ{UŧéI¸}iAúQ¸”žônæ”ņHØĮ5xqSbšcôŖËp3N*1ƒŠŒ"ƒœ “>”ĨF(P1šFĀÅ*€)h8íI×ĩ7`8ŒĮ PÆ;R 0#F¤îã4ĸ0FqRڐõÅ4ĸ“Č Fž”mÉö  ĪJ1ĪlSvŠpz k"ąÉĶ„kNÆ=1AÔ{R°€ãĨ;Œt¤üŠOJaė}(āRGĨF;R€y øĶ°6Ō~~TŌ9ĪŸˇ‚;ĐqŽ) ķ@\“AéƒBõíJÜđGÕPŖS°1F=éĨxæ‚(Ú  Í8 B( KÆŪÔÜRāuŖš9§qIAĨĀÅbŒRb“4`Ôî1H4EA',Ŗ0Ļ? h„üšŠ€ãĩbk‚e¯ZbÉ,RįåŠ.nLpî^õ˜Ú„Ɇ šŊ%đŽÜ18&Š˙hJ€š#§guö¨Cƒ‘V[ĨESÅMږ€GĨ5Û'UOĩe°ŧÕÅ%”Sŗˇš‚Y‚°ĩ( ŒŅžiqšRphÍ&āi7éŠdãŠRp3H\gĩ%sŠPp¸¤Î3KF3J=(ĮŌ€)Ļ‘NÅ-Žô9Ŗ™Å(§R~„â—ÍŸJNũ){QÉ=ŠyÆE Í\P? RN(âŽÜR`į­(Č4u)G@)O=hôNh9¤æŠ1J3F^Ԁ{ŅیQKœŒbŒqIJsHF(žĸŒ})h¤Å v ”߀3PM•eÆ:ÔÃĨ6Fų)7ÉÖ§Q“š:QŸz9õ¨&Ve ŽŨ XoģĮZŠH%'ĩ1âvš ž*{˜|Øąš†ei^Gzˇ!yŠsō#U‚Dœ¸n*WVqƒN ļ ‚ĸļãĘįŒ÷ЈË×åŠÁ8š4 ĪĒ<“ĖSĪzVVd*sÍGil` îiķÛųģŒĐ‘‘Š|Ņ#Įz…6ĩ,qlB;š­öyГqĮĨ^?sŪ˛åˇ2M¸6=¨‹Í†P2Jšģ<~rzÔj¸]ģ{uĢvÉļ>zԝÎHŖPzS$'œŅIöĄ'jĐRYyâ¨ÍnVãÍ^sÖĻP͌ä~âI"āSŅ]mÂķœT‰2;nčj;¨fk„eĩfæB–ŦOĨsļ7ŗ=Û,|Œ×Eo ŪÜeä2I2zU‰b2ۅ=qUŅ5؁SÛE°“VÆqG>´žĩ҇ŒŽøĒڟ%ŅšĸÆÕ fëŒÖƒä&T€:ĘĎ SžĩŌ¨<Õögû7œUm8¸gŨëZŠr)hëT¯ 2m#ĒĶŖrWy§ļDmôĒvE•ØcĶŪ2ˇAĪJuĮī@UëLš ą*°úÖ|ökÃÆN3Ō¤ŧ´ilĸ„ˇSjëŒb¯i°"ŲĐf¯ž{Ôđæ§#åĒ­93y`Ķ&’HXr3N¸-%žsÔT6sœÖˆéJxRėá÷¤YØF*Ä-įĮ¸U^;öBN1S\9MŦœÔŎGœãŠŦ›äS’qL†Y ­9QŌ†2Gp¸9¤ŧēE’yôĒPËq)ߜ p*Ũ­ã>č›ī †KšRäÆĄŠ-ŒæCæ*úįŒĶŊķHzŌŽ;Ōį=é¤ķŠ:u 0íKĪ­4“JĨüŠ“ŧQŪ‚OjLŸZq ­7¸Ŗo|ŅF;ņA÷¨L+ģ4žHČ5 ŖŌžĮŨëžiwgԐ°­ tbFáš\Ō—›r(Ú) ƒK´IˇđĨÚ:œUî-Öt(OZ×L†Ũˇ*€}jų!@'ŠŌNœĶČãĨ&Úâ”tŖŪ–“ôƒŊRã4›@ôšČ7r?qQŒqLXԁÍJĩ ~”ŨˌäQšOqHöÅ)ՌĐ V@{R”qÍDŽ9Ŗû2 `tŠY\`TbŨsŌĨ JŨ*8W;KÔbĒ<;.<Îĸ–@$ qK(ÄX…6ŅūM¤Uą’(<ÕKĀ6īCcČÆ;TļdyX銭q”ēßÔU˖2ĸ¨$f´ƒf}Š $)TQ.˜í8§\d\ ¯¨ĀķÂ0zv§Z:‹}Œ9č!"v“ 4ŲûZņŪ´@gŠEpX¯qRfŒsš?*=:QqF3G~;9UøRK7”š8Å 8hà bÅKœŌR`õ ņUoŧ–`{UM,ģ+'"¯M9ŒŒô§<˜(‚Q$[Ŋ* /6K˛žˇ@°SÆjrØįŠ­%â#rEOĢ*nRŠ8Å'SÍ)bŠÅgąc’xŠ,ĨiîíQŪ\Ü( fĄ…dķÃ+äw­UÎ:ĐzP3K’* Ž>¸¨’õ `ņVYđ3ÚŠF/4ĻáŸJ‘nҤ XfŦ33ÚŠĪ8+ŽŪÕ™6é$ÁČ­`xúŅHzTrJŊ5nPœg)p5ÚĶžøŠ#•déųQ,ĒÅ5.Q›§I" ËZnПŧ M‰"ä0§ w8¨åČCޏŦœ\˛ŗnÆ:TV’ÜĘY]bÖIŌá•ÎV´Ä œdf‘ĨUl)āäfāpHŖ9 OZ áCrÔĶȤˆđE?Ŋ!ëŠhAģ4Ĩ{MX‚öŠ&ƒÖŖxÁšo–6⤊ƒ"ščķQ‹tôHåĮj}(Ú=9Ŗ`'ĨF)ŋf\g4ņŖ0ŽũÄT‚€ƒ9īKKœŌSą…ĶŌ”ëIԌņKÛ­;Š)ØĻæ” ;ŌôÚSEâŌƒHhíN4œSFiqš:Ԋ:QÎ)2iy4P:ŅߊN){RR~"âĨ¤\ŅF):ôĨ##­%ĨņŠ)y¤īK¸ô šB}č¤Í“ÖŽôŧšCõ¨g#Rĸĸ’Oēi"û”Ŧv‚MU‰ŧÉ4Éō˛.Ūš§]/™ÍéLĩ@!ëÆ*kSÔUąÅ)f›ž‚˛¯ĪúB 㚙mōĘáĒî2Pš@÷ ‘Îjá‰xãĩSuUģšŠ§8#Ķ4˛Ē< g¨ĻۅKpŖ0ąëšKiڜgÕrd„Ukv;LdôéVŅvАĨæ‚zS]ĢÍ x[‘ŒTwŨcSÜŽ@&‘Ų|ŒqŌ‹S ĸ•ÚG"’đ s‚ >âCö]ËéY¤ĶFĮ5kH2$žJÚíE!o5 ⌊X*1øUč|ɓüi6´ĻĶÁíZJā(§ŽOZ1Í‘ÖŗîČf Æę͘´3ŠcÆkm$9+-ĐęÎŲÉôĢwh¨čsƒV搋lJ‚ßlļäņœsL͐$Ōr3ëZücĩ%4đ+2Yß= IuŦ{—‚*h‰’ØgŌĢÚBšrzæš$1ßí^r)—îūz¨ī@†RUĒÍØ&ןLT6ļÃÉ$œT–[–GLņšŅĀ÷ĨíŒŌ2äTRˆzc›fÁޤ V—–šŨŪĢíÅ×^)/T|§8ÅJeŲnz ͎éĻ,IÆvÖāē‘žET–é’RĨąÍYą˜ČĖKp*Ã]F¯‚Ã?ZX:äJxnŽ;TŊOJ ĻãŊ8u”÷ĄiZB8¤íÚ¤ŒTd{ŌN#(íJF4cž´ŖŌœš;RwĨÎ!āĐx uĨĮšLRwëE-Râ—(<´˜ãŽ´:RôĸÆƒMÉéŠv~Z;cŊsIŽMŠr)xíIØŌg€(ž)piO4†”uë@āԚJ 7īKÚƒŌ“Ŋô§ŠJ(Æ;ŌĐŧri që@Ŗŋj)M!äqH)M!ôv¤–u§f“­W¸RJāՄûĸ›&6ŸĨ6/ē)äfĄXŠ1 ŌųA›&›´ũ6ŨāwĘöĢ’Ų,Œ ëVĸ@‰´SŸîš† nj°:õŖŠ Í€Ĩ šnE.;R&F)sɤĪJR@ ļi ĀĨĮZLđ2Gž)}i(Å”vÍ794¤RņĪJMÔg­7#ڔžĸ—#ڌ§‘Fxã›Âž´Ĩâ“zôȧtį4nsJ)8ëF})yÍņIœRéGz_ƌ€h$ 2Š8öĄHĪ3b”ŒŌzp¤4šuf“¯ĨéHH”„aKKÔãŠBqFG¨Ŗ9•É=+1 öMÜb´Dx^*˛Üēō[§jž)hįŋ4¸äPĪĀ"ghĻÉ÷i`Qŗ4æsUžr_jŠŽį÷ǧŽjáqfĢÉwļ0Õbą†\Ũ7ÚJK,ŦŽĢQō ÷§ã„w¨. XÉöŦÔģ˛Ž?J[tU¸2#dÕvkœ´Etí'šmŨĶ[āã#ÔR›˛aŽŲ§År“EšO>•@M#^tãĨkdj„ČHÜŊ)Ë&ä'¸íTRņÚáĸÚr=*SzŅž×Z’K†E Gb7ķ#ČĒ’)[ŒŠĘQĀ?I$ë{‰Ē›ÃÃjÂĖãĨ@—ĄōQVĸ“ĖPqÖĨŒU;ČCÆÄgĨC¤†ō˜zÖ āQ@Ri1Î+?PļĨÅK`ģ`Pyâ–đ°ˆíĪJ˘ĒÛ  ZV2}ĸÕIî1YZ•ļŲҁ?zˇ ˙RŖž*Ŋõ†ĮŽ+›Ņ/¤¸Õf§ōŽĀ.FE.8¤ĨÉéJF)(¤QE%.8¤ĀĨÅRöĻ‘JzQøŌäŌcŊRŌw¤=iŨJaö zԚ=9Ŗ•V× ,ęUf5qÚ¨jŠY=j5ķB§ÔæÁšĸƒlĮ=é— <Ô×­XƒQš‡tGž*íˆ n4˘˛ÛĮZ–8Ã|Ƨ)4ėŅÅC1 ¤õĒ‚g\āS#ļMō G4eîÜ@Š"´Ų mų§ß…ō~n”čĘ=¨éŒS,bž3N@ĸ鏊î~hˆZŠŨr5K8Ē‘"ũąĪëĩS"Œķšžußt§YãėāHė´ÉĀp=é—Pī‰Gjėč!Ú§ëSÛĸ­žÎÕ ¤h%qŪ´0ĩ(^)ŊęØŽxĒö Ŗ8=ęã¸^Ϝ=AđxĻ­WēuOjŽÍÁŒ(5<åDYjĮē…n!ÂŌĶáō-BžÂŠj“"”É´-¤Wp{Vvĩnķ[ƒ\ƈŗAǰs]ā”F™&œŽriÔÅ*đsŪ”œĶih?Z(âƒŌ€h&Œs@84fƒGZLS˛¤ÍuŖâAúŅÛ­ëG~´P1AöĄųZ¯˜ÔųõĨĨŖ8¨gs°âĢÚŗ ‚)ˇÕ•“ņĢPądô¨.՘93å€E fŠ_ũYņYÖģŌg%HՉ%e æjŽņąn´Č܉XqIu‘@šĩjž\ ĸ§#9æ›øĶí$U7u™$N:V~žŗ$Î$/jMĀjŲÅnĘpj„ūĐ*áÜŅûâĢFeŒ~aNš3*ŒRI…P)äTŠ\.Ō*HĄÃĻ\‡pzRÆŽ¨¨ĨIZAŽęŅcJĸĢ"ܗЏYĘāqK 89=MNGhQ̓PĘŠQÖ †7AƒRíc×ĨKˇåĀëK E19cPļũƒ8ŲX“Ū–xŒ‰Š ‰Ŗ^´ŗ#ļ0ØŠ3/Ėy¨ÜƒāfŦ‘•ÅBąc´Ķ&‰¤ęjXPƁj~1IԐāŽjØvMĢĐĶlŅ’0Ŧ)ˇpą2õĢP1ßz˜ņ9iųbŧõĸ8ļäŌJŽ*Qã'Ž´ųēãķĻÛڈKāš†t—ĪEJ Œ0E:mŒ[šëIsJ1QÁ Ņ.ŨŲMm$[J°ą˛ÄqUœ‚c!<Ր˛Á4øâÚsN+†­JGhô:T3RŽ6ŠdŸpũ(‹…JyįĩDņ†=*&ļ A5!Œێ”Ãn āĶŖ‡ËRJEÜ͆TāqTeķ ĀÛŌ¯p)yϞī5ĀņĀĨXņšdįĄ°ÄTķÍC¨)tW5ŧ`ČĀ̉UHđ)mŨéáÜTfá5m€}Ũé$ĩWlšsD m4°CåŽ;Sš ŨŠžH :T­)Q }ĸ”Į„Į Vž[–ÉÉëWp)K”Úd‘y€æ™>”Mr隙ŅŽ)ųĻžĩ ° :Ķ!ļį,¨pEAšŖdtĢ{p¸ŦųėyC0éV`€B¸q‘1ëYĐi1ÅqæķVŒ‘ #ÅĮåĸĨ#‡ Æ)E8~‡¯j1ĪjLĶ€ČíGAڐõĄąŌ”Rw4~” R‘ĪjmZãĩ.9íKM=zŌsKƒIڗĩ!é@4§ԃ¯j^´×?-C ɂ”uíAü)…AôĨU†ĄÔ3r:P Ž}( Īj< æ›åéG–:ņNšĐŽsAQž”áĀĨŸjiü)w.8¨ŲQ‰­HbQž*i}ÅFīZ˛Ē€(Ø3ž)vũ)6J]ĸŧöŖhā0) ôĨÅ}ŗF8æ›ļŠQĀíE­)Ļ‘ÎhÅ/J9ĪJv{SHĪZLcĨ)Īĩ9zb“Ōw q֔ķJ:šiĸŽqڔqéIŸĨûRŒ{RQJ:QøŌvę)?IÛ­-'JQŒuæ”HÜ‚[¸Đ€XU„"A窜Âœ­ōŽEG.JņÍ:<íŊI“ëIGj;ŅøR1ĀÎ*ģˆžŨÃ>•9l Ôî=Ûwje}˞ԚãĩÍ)>ôgéFāâ™ŧ)`Ŗ&…}à ŒSŋ*NÔĪ1C`âž9éŠSœMäQ͚\ĐN(í‘FOą¤ĪŌ†}Ŗ'Ą\7LqÍ&h?AJŽ(9qH2{ŠUúĶKíϤÁķŽÔĸAšĨg ֔>{ƒFxéE7<ņŠs …nš\ŒÔģ‰ô ŸĨ.xŖŸQIš]ŪÔ´sē—ŋjÜ!äM!čĀԀäRū4gši‘A÷§OĨŅž(öŖĄ ļZÁÍ&qÍ4Ęđw ņGz›ŠsĪj”Å Î)yÅ08éۜ2h= A;ÚŦdŒRžĸuĨÅ!šĮôŦąpņß`•ĢX2;ŅÉĨč{Q“HOD% !œTõīQB_ÎmŨ*Áö¤4 šCœÕ;Ų(‹)ļîōĀžMy#˜!ÁÍ\'åĒō\Âp3ôĸ+…˜j–ŌēŽAāք“Ķ'Ģ›§_˜ƒŠąÂËከu3dTą]orJY/1 Î:⤡šYējÅæĢÜÅæ)俞m#]°/‘šØ‘ü˜ķIáĶx"–ÖR@ę*Ŋâļõ*qSųģ"úR%Ō? 愸GbšŠĮ­)=MSŧķ6ž•šŌ4džsšˇ>ī/åëYwÜ mŽy­K`¸äÔŨiāgŌĒIzĒN9­K ë2î\Sn.–— ZDŧ×p`jt‘déL–@Ērq\üúŦ‘ę `A5үŐéJz†!†j°:QģžhisíHO^gČ k&ûÎFI^ĩĢgp'ˇVîx5g#8ČĨúŌ1ųMPƒ+vĀô5|ķĀ4ŠŖ“KģœRã&“ž)3ÍTÔmÛŋ anŧöĨŽEkŦFáëW$˙VqYîfn{Õ¨PÆÄÕ_5Úņ—ĩIäŋŸŧpi/ŗ(Ī"ĢČō,‹š~ZŲ…Á@=ĒNŖš\qHGEÛ|ÅF2=*šw`gWæcäezâ›lÛĸÉĻŖ´75<Ģš Vļ”–hČéVĨĪ–qéT ˆnyŠ`„Æåŗ×­-Á]ëœU€ āņUޏeĢHrēTâqĶĨAtŲpķPî‘,2=Ēä­ēėjx‰ōÆzTķrįŌ’E"áHīQę2yqg<æĢÅ/Ú†#Žõ­€ŖŠĒ)€ōĪŌĢZ¯ČGŊ 3žM$ęЎ9íV$#ËäņŠĢ+Š–É‹@ Ļ_aļƒĮ4“ŽÛ~j’ÚBmFxâĢ(%ØĄĨŗwēˇASŪĮĪj¨˛„)Å[BÆvtõĒ+$ĻõéVŒNeWĪJ/StbĨ† aŦ(Ú1JM ŌŠ†oĩŽ;u×ŨO9Š>OÍéQÛ2‚@̊= E0Î=GĘ*)zTˆv)øâ’ƒÍ%摞īQTåU0IĒ6ŦËž'áA¨UûP0ô­Į §áYwNV#…Îj֛Ÿŗ€iˇQ#\)` Š'UX;zRĻÛoQŠĢa E#ž„šĩ{ úS4ĖycŪ´;vϰČ5´. XŽĸŽÜđŊiÄ|œąĮŠ-ŅcFæŗaT“Rr@&­ŨDĄ×އ;F‚<žF=iöüÂQ’ûxn”ûÔų^žÕf2M Ī\SlÎ#8õĒ3Ë#]”•D‹rāVŌö ōj­ä!ã< UmŠã1V­$W´c•āÔÎĮƒUlØn}§šdī‹ĩęÜÄy'5^Áˇ!ãÕāi’SˇËî#5$0,NĖ;Ô"ũ¸/§_†!p8¤Ā{nŨ* HÚ$|ÖkĀívŌFØöŠíĻ“Ėda“ëMļGk‰I'¯zŋi E9lõ­>iŦÁFOJŽ.Ŗu`ÍU´ųŽ\ŸZģtš…ĒĩŸE˜ž:TĶōFiĪxąę+)JÚNPį x­+x;ņÖ­Đj)ČžœŽõVÅÁSĐsWx#ÖŠI"›̍PÁĻJq&˛¤ ęåČ §ŽząŠÄ%‹֒+e[@;N°så¸Ī Ô!š{—BzV-ũ‡“ŠE '¯Jęā?ē_ĨJzTQ˜ÔŖ‘J1KIC ŒfĢy“$Ņ-¸tÚ@Å6ŪÛČWĨK´īÎjaAéIP<_6îõ&X” æŖTq)9âŦt"“#4 ĩVéYШYŖ,!YFEQģļ“ík*{քaŒ\õ¨~ĖV\ŠāՄNrj mŗ!uëN‰dĩۗmŲæšm÷ā74­@$bޝÜ´7֓ęjĢ[4¸āž¸¤{U,¸ŠÂeqLHļgÛâ]āõĢ]8<ÔkŦ…€ëR0Îj„@7HĒzT2ĀĮ¨ŠŅvŠŽx„Š3֖4*žôƋsîĻ›`_qëNX9æœņZxB#Ú5CĩË~t˛FXƒéUîâķdUdĩE?(æ´­ķSŽhĻ8ܸęĸ)œÉe›p<tŅŗŠVš03ÍFbvB•%ŧmāôĻÜBe#ڝ$Eâ۞ÔCXöŸJjĀPš-ŠžāzŌĪåÁéTŪŅJ`1ÍZ˛FŽ2¤äT_pāÔĒ„u¨įŒ¸Å>U1S mÍ/ƒßĮ’:dRķ×Ö¤+•ÅD–ę­‘SŒŠdŖŒŌŠųj9HĮÖ¤>X§įåÅ6—Ĩ'>ĸ–˜é”ĮzĒļå[9Ą­$ŽĻĒŽœÂmåhˆ—ˇ5]­IH❠Æi^îžiŌAæ(ZXáģ{TeÛ&áÔĶåƒĖiĻÚ[ |€xĢmÎ1ŠB:Õi-•ßuJą(L o•ÆČĨōĀÅVK%2¯Z’X7°&¤hˇ&ĶéDQųiT§Éģ´°—“š™“÷{EE ŋ—žzĶ$ļě׭(‹s‚EZ^)OZBSžj%„.p(Ž„°Í>T,¤U-­LLĮ=h’ĐŧūaëRĘŽŅ•” AäģŌ‘†xĒ­nCåxŠ#B&Ģn<ŨÜæŽ4AĶĸ[|qš”ÄÅSû°=jXí[v9 ÚŽōGšž8ļœņSwĻHģԊÎ%d$1æ­[ۈšúՇM˃ŪĒ-ģ&Bž 2 i#•˜œƒRÉ HÜTŽūLCž*“D.™[ƒÅi"P8āS…^â6eāÕ{kW…‰É ÕėŊ*‡Ų\Ūy„ņéZi’GŊH5WėĨQ€=j;k3’ŠŠ.ĸyÛëKåČ-ʎ¸¨l ’-ÛĪZSE1p:ÖfŖġq•S€y­Ûp|•ĪZ”ôëQ!,ÄqSôІP§æšgPpHÍ(KmČÍ9¤P@'­8cŌāRRĪj\jB ÷×āĶDŠ[h#4ãĮZDe-֟ŽiÉíGzBŖŊ;uĻ•žôp:ĩ8{õ¤įņĨ4”Ÿ• äõ§ QžŲ’ˆÆOJz0u ę;gŠ:ôÅ})HĮJ1š1Hx¤čx }ėņA8暎uš)pB’)‘Ę­žūÕ'ãøRãš1F1ԌTLĘ[iÆM% *L`qBiO֒–“ķAš6äf’Šinq‘NÎ@×(i#5apS4ŌpižJƒž)Bã‘ŌŸ‚zRž>´Ō3M'QQËČĻœR“Š~PzSHúRĮQF)OzSúŅíF(4…€īJ9 æ–“’{RžÍ&{qIžqJ8Ŗ>ôāØόzĶKKœ­Gä)bqR¨ (éɤÜ7‘J fā$SÃĢ0éNaƒH? ;Ņž;Q‘IŠ;PFE 4ŊņF=hĮwĀĨâŒûŠÁ旞”Ą~”Ū™ uŖõĨ4`ûR~T)G4bŒqÅ Ö]Ñ#TčIŠQŌŽŲ¤ë֒—ęi0(ÆhíF=zQŠ1ŸJJ\vÍ@úŌ0Ō4j@ãšP0(<Ô1ņ#UŒ|šĒæ,š&ĒHŸé vÅN`ÄĄ…%×ĘģŠVš+lqSÃ(•C sČĢÜf‘%8"Ĩĩ!ŖōϏČŦģ…’ <Ô?ZĩÚÜEA5,Jh’që“PũšR@­Á5;Ëĩ7. @.÷Ąaڙk~ŗŗ(ęĩ:ĘÅēTOs‰6qštsåöšˇÁô¤ühĮĻ)qĮjkœ-CŘЯEGö‚.gŊLwnúTw\Âx÷¨āfōŠā›¨§™@;{Ō+’zS’@ë‘OĪgŠ3Å@ōādRKqå°Î0jBųsCŸāÔpĘNÁ¤2>*É?&+:)¸e`LU¡z´(Īf—5Bā…Oz{\4DdqVCdqŽE1GŽøŗQ,ÄļĶVG=čĸŖ‘üĩ,OJŦ/3åéKל ôŠ•ÉÍDdxŊIpåa8ŦËxšWŪŪŧVŸ˜"P3Ö“ÍÆsRŠÜæÛÁĨc“H9¨Ļo ĢŗĢíNķOŸŗą§M!LŌ•Ļ0ĮŠíĻBŅ:Õ{&‘ŨŗĶ5¤:j9ŽŠzũŅQIÆHVŽ•LíBÎŦÄ3DŌųkšŠ;ë¸TąL$ĻI.&á¸=iŗŨ¤l=i>Ô¸:°uĶŌŽ´Öâą¯¯š+¨ÔtÎ kà ‘SĻ‘c\“MYƒ.TäP’†čE*§SPĩÜ`ã<Ķ„ÃfęX§)"ĸKĀķ”ĪĖ)gšōņķj5ģ;€#­E}rņė 85nŅŨã…XŌĶ$ ŗƒT"‘ūØU­r8Ŧۘåf;\Š[åV,äšŅįŠ"”~bÂķøRŅKŠozSƒ@ĪáF(IŖŊ“Å.OĹį9¤4šĸ“œŌ“‘Fi (QžsIš)@Č Š ãĩãŠ?†“Ą ŅœŅEŖĩ L{PO4 úâ“Ķ4¤SOJ†?žŪĩdšk3T%|^ ēŌĒŪ‘€)v¯Ųų㎴ZåtÍ@Ō9šeĮøÕÄûŋ†¯ŽiçJAÅ# €ĒJĨsšËž&ŗ“Ė‹€zŠŌĩ“Ėˆ?r*ĨČcrŧđi—6†Bv1éWb\ĀķīU0"•QŠ­o\¸õšũŪãYŗ¯›qōžTĐ+$œō*ōĘ7ãŒÔŖŸJúQڐŒŠĄ>øîCÁôĸáå}ėÕȎcõ¨îŋÕĩ2ß@öĻ[߸üĒIF%SŠ|ĮtGæ›hŒîÅYĮvĮąUŽ“åE1ĸ3F ęKíģOj™øCôĒļÃŪ’N.Å[?w†’īũWŊMĖKœp*4#Îj$ÛāÔIš&œƒWבš:QQĖģԎ*‚>Ôh0=Ē;ux%*~éÔÃ4šíI‘šáERŒŅšãĩ uŖ4M€9ĸƒõŖ•0ü)OԘj‹Z0pyyĢ]ۙ—nzÔöđy0Ēú #ænÍKŠœĶĪ˜qíAJAøRūT~TP3G=x¤ĪŠWŽÔcæ P:æ”ã­ Ŗō u Đ .séF>”¨ŪŽôîĨ%!éK@Ŗ§Ĩ&(Ĩį¯ûfíE();RôéIƒß3ô¤īځF AúÆŠņ‘ÚŒķڏʗŒŅ‘Ō‚pŧ‘HŦĨ/ŋ€KœúRg4áAāqH ÜŌõô ÔO*Ą5"ļå֖€{qFr1QK*Æšb*(įÜøãëVCŒcŠ23ڂiFZ\ũ)3ô 0Ī‚Ã=hšRhíڌúŅA#Ÿ•¸úQÛqķ6bĻĪlŅĐŌäuČĻįÜSĪĨ5Ûbæ‘:æž)xÅ4ļ;ŠMĀ÷ĻI&Å&ˆd.EJ0Gj(#éF8ŖĐGĨ)8ĻôúĶI )Ģ bpE2yLK3OŠ`č"Ĩ;Š@AiÃԘøĪ4á€E "ôĨÍį¨Ļ• ֑P/aĪZz‘Aü))1Í/"—­•8íIŽ;sF(ہÅâ‚ 3MxÕģ PąĶđŧvŖv¤ĨĮ~(üėi1LSøÛīMĸ“ĶąÅ&)ÄņHß1ę(Á u œšJBN1E)ü))iKI͚ 'ԁKHM—ōĨ…qIŠLéJzQŪŽM.8Ŗ§Ĩ&)9Æ)G^Ô§ƒHyī@įŊ)f“<ŌãŠm.}čĪz(ęh9”Phįĩ8¨cĖlTŲãVy'čM9Ã’{•ˆ ‘“P­Ķ˜ã4ŗoˇ,¤RYh5,ŦWĻĖåcÜ1Ō–ŨbFjœ—Ė—^W¯Jž9¤.C*oŲ.`uĨ–íâ*HāÕŖ/îˇöÅgĩûą;8ĢV—‚•ą‘SŧœāšĄ~ėtÆjõšĖ ôŠH#ŊņIŪ˛uq)P° Ģ6ųqŽNxĻČ]n ÅYƒîĪß´f]ƒĩ,’˜Ā'ÖĨf AZ]Üã‘ed¸1“inĸÃÁ5n6Ü ĶŠsHj#!ŨŽ1Mķ1 \ŽjĀvŖŊ)§§U5ŨöŦg"ŦMŸ(ãŌŗí|Ų‚yz%eBŠŠ>k }Ã˛‘ƒO$ųYīLˇ›ĖUõŧŌķTŽŨ×nĶߚš1ōŠŽA‰F:ŌJė„ņV,€är*Ą2yĨAųjh÷ ųZĨŗŒP$Ũ”b3U䕭Ų@Æ Ģ #,a†)a—ĖˆÅC,Œ_¨ rËį'"­IĖDt¨-™ļ01SE1ķ wĢ=zŌ‘ŠLŌæ“"‚ri=ø¨įFxŽŌ=+?NYrÅÛŊ\š˙RØëŠ­ Čaō*{Yœ‚¨¨în@˜&iR˜Újú6PRIŧĐ t¨ĨÆF*TûĸFsJ{Ō LԁNhŨ¤Í(ãԃGZ(=(ĀŒŅøŌœp));ĶAM”āôĨ8#˜íF(–“Ŋ˜æ—īJ_&2ۈ柀Wkt/ģ<ͤ‰]piR0‰´tĻļjT]ŖSZ%b)°Á9§Į@!Æ(ŖŊE$JũM9# 0)v)$ŌņëņÁĻĀæœTBÆ9Ŗ\ƒŪ˜Č­Öœ”Ŗã4âīMâ‘Ŗ\æĸ’Ũ‚{TĒĄ@‘š2=i3īHT­.ҊMŠ)HĻ´jQÍqztiō€{T„b—Ú—ĩ×@ÑQŦANE;h$zŌ”RpiBÅGĨGJg”šâ•T.yĨdR0MFa\PąĒŒ …Ą œwĨH°{ՂŖШĢŌ(1Î9§ãŠL¤š8īJqIœŅÁâ“õĨ?Ĩ0"į4ģGsNÚ¸ tĻėæ”¨#š6ŽiF$œ PF5 ŊWĨL˜Į4œs@ĨĀÅ'=(éMeMeĮûc)ŪôĶv‹(By4ųšŒ‘ÔTvÎ|œąŖíąųž^yŠZuR9ŠAÜ⏭TžšhĶ2j—Ÿ2llũîÕ¤Ō'v;V ÷—;؀@ĩô뇞\UėûR5N{øâ|%ŊÔw •`iĶ]G˰Ŗût[CŠĸ•eR 8A’qYW‡”ü0ëZVōųą†õŠiŠÁœŽõ' Uyæh†qÅ,+2dMķŸĖÚeX`g¤Z3Š…%&R§ĩ6âc08526Tw^)ãԐĩŒšh =E)aŽ1Q‰A|qÅIÁįdŠLŠA ŒŠ7éNړx”ž˜§…ČÍ1Ž:ĐRoę)Ň­C4q‚9Š7‰ĻEp˛1Ž)ĶšUČĻE(tÉŠƒgŌ—úPHœÚ1S8ũŅ#­Tˇ¸%˜>8Ģ+*ąĀ#5&@ŨëžÔščizÔNĀo›ąsKŪhÍ4ĘDģO>ņĐĐXRnĸ”r8Ŗ zQšqÔ ´ ÷Í'ЁTMá7Ķt¤ķS\!*kS˜WĨMPÜäĀʯ`GŽõę1y8¨ÍŽâyĢ’¯î’:T -ąĮz­§@<é=M[”šJŗ?0œãĒļ%Dl2:ĶŅÚIÅO†U$i÷d´ÂžŨĢ6ÖĐ!=ęõ¸ˆ^†´*7]ëƒXsy–×EųZ –-eĮŸ˜ķ[Viû°íÔÔWl<åõwwîr1U-.˙ZmėĄA• ”A]Čîj܃(séUcMĘpxĻÛģ-Ã!9­œö¤#ƒŒUL]6{ÕÖųWڨš™ņŠŠŽ`Gzši GŸjĒ$fwząnėéķc"Ŧ ŠŠv­€W­Aö†U ëøÔöΤ¸Ļ]#™—ą§Ü¤“$Â<âĒ—!Nã’*[9KŠäqRËģŲC<@ЧĻķԃåĶ|Õ'ūŖ‚+-Ã.ĄÆ*䅙p5ē4JIāSŖœK!Ž)ŗHb‘} >mÆ=ˌâĒĮ1hÎ[æ%ĩΘsČõĢQeEU–rfŲR$ŦŽéSKĘhˆæ1Ua\^ŋŊhU;ŨÛ>\Tļį÷+‘Î*]¤ņQš1&x¤OŪG“ÖŖ†V2Vŋ*Zô¨æåM9Ø:TrXT‚œNi(ĸ€yĻH›ÔŒÕUĩÛ)lšt3 d⤆ÜDiŪHŽ (ŠĄyh˛É–[#bEh|Ȁz‰ŦƒĻŌr*H­„XņC[)`{ĶÚ`§ĮAŌŸŠd‘ī]ĩ^S4‡ëMHpŲĪK‘qL[bą•ĪČ,üĻ$´ų-ˇH5$ĒL[zņŠĨmlTžŊkB8v€jģU•ÔúTȁc Qũœ8ŠR0Ŋ)äŌc5^ku‘ōG"žöŅŧj÷§*EG%ē;‚@ÍJPÚGēŖŊME5ĸĖFęŗ ^Z`cüņŌ ž“­F–ėŊZ–[o1@ɧAvžiŌ@æ‘aäõǎv†WČÎiąXĀšāUֈ2bš–û{äTā``RÕKģc6āŠŦläb718­×bš¯<˜:j´Ö˛I"ļãÅX•$xvƒ“Kl D5Vš_=Z&_jąel ˆ(w€(8ŦũF)dLFØ5NÚÖå rjËÂWÛ”ÚtĒJn%MhŲZ‹xĀpޔׂ+2K–*zÕôwKŸ46 <â¯]ZÉ$ATã‹éoŗ¸éI§ÛM žūCSŽāq2ČŖ8Ēz”ŌēqZš~ī˛Žá‚Z=*ŧ y­Š´)Ŧp+2ãū>Ņ”}MhĄÜ*žŖMÕĨļV ¤r*Üj;UJŨ“Ž*žŖ#1MŖĄĢë™mÔcœS`5*iûKJTŌ)1`uĒqÂZ6FíE¤F2WļxŠįT⊴ Ëiöą˛1Ęö§(1]œô"ŦLžbc4‘žÔÛÜ S!ˆ†fõĒŗ‡ûZ°Ô×Jdˆ TąFLOĻ*´1eaˇ‚jâ¯Ī0*Ā ôĒŗÄXŒSgˇ õ< ĩĻÜŠeĮŊ:0|ŧÕ jÉ+qÁЧ,#ü* }ÁGŌ‘c"mõyNi āāÕ6FKÃjqš’Ŗļ„ŦŽq։CyƒĻ)ŌFdŽĸ‰ ĨxĢĻqR`‘U'/¸3N*ŦŖ S`ˆ+’;ŌČėâ™9,œSĐ1ˇĮĩBė!‡5šŧR2‘ÆkI—1ŠŽ4#>”ā7ĩHFF Eöpių*8Ågģ7Û#ƒZ ČšëŧŌ¨Á C;pjIc2¸Ģ;~LvŦÅĩeģl}ĶO04w ¯CZj2? ¤Đbįwjœ('M¸-åāSĄÉˆqƒŠ‚4u¸,GZŧ;kÆëQ*˜ķĪŌžž”:oLMLĸm¤X~c'zDw2=)%•ŌQŽ•eTôŲŠÂŠŽCûÅŠqF(ČŖŊ-'JAÍ.(ĮŊSJŋ{šŪâšP0äfFéO¤āz0:Đi^´Ŗĩ)¤GZJ8Í-7œŌœ´yĨ㸤ÚJ‘ļĸiŠ]ĀĐr 銡t4¤sAŧVdšĒ YlQ mš-Ž+K¯Z\ 1G֎)ÀiŠ@ĪZSÎ=Š03GCF¤ÁĪ4c֊Ĩ”¸ÆEÅ„P@Åx¤Ú=€ĀĻíΐ›úSĀÁÅ;§‘ŠBŖŨ  JB œšĨ4SHm@ ¨4›GĨBôĄ” Fę)č@œÃå5RÜ3UĖLdTfÎH"¨‚š¤Ŗĩ8(ô¨Ú0I$ c[Ŗž@Š‘BŒMdįôĨ JwjfĐ FiJį­3Ę_ANT ĐR:‡l:RācŨ€œâžíM(šĨÚįí )ģry¤sOČÅ 8¤9ĩ&1ž){ĐÊ1ĶöĄžoĨ AŽ”ģAëAqLEÚyŠ0=¨č¸¤P3Å)QAāqLāŸzxé@<ŌásœsLdxĨđi r7ˁO⍊zŠAĶûR…4€îėfƒõĻ‘ŸJix8§ŒbŒfŖ`3Í8ڔŽ´Ũ™ ÷Ŗ`ëNŽ:Rm­qFĐzҎŒtĨÚ)EŠ6ŒRĮĨ.(*;‚ƒŠfÉĀĻ2nŲŠíH˙wšr¨ÅC'ßZš‘Ø(ÎEW sŠ•%20j ŽÄNīJn@ĮŊL­•Ü:zÔ&äŠc™]IpjžA&ĖāĶ–éLIëVũÅ ãĨ4˜5BövŠAƒŌ­ÂūdJŲę(–AÜzSc™d]ÃĨĖ$b Ž(šáb EöÔP7ÍL&I¤ŽádRGjDšS)C֖K€§Ļ-ĐfÛŪŖŧ¸hĀĮSéV-Ų™aSâŠcįošęîXąÆ:U‹BėŸ7j}ÄžTgžqTôˇ‘ßw­jöúҚZ¯öhüī;hߌfĻôéNči[â“cQųR‘ĐŠNԟį­/Z Ō )@õĨ<œŅ@ëA9¤ cŠJ)IÍâQŠRx¤4v¤ĮšĨÆqF ¤úQŽ(Å%÷ĸ’–ÖƒPF˜˜šąŒau ŒŠp`})"ŠÁ C2’yŠāŌPO4™iwJži’œ)"ŖË'Ėz•[ŪŖ™öŒäSү˜S|õ$āįĢ*ąÆE=ˆĮŌ™Ŋs֗põ§”v¤"ŒíôĻ™FG SՆ3Uf¸]€ķRBYšj°[šŪĨ#Šņœ´…Ā84íĀ €Ž´ė€3Q´ę§Ņ悤ƒÅEĀ‘ĘúU†8EEö„Ü"¤fsQ-ÂąĀ<ÔČáģôĄČ< Ē gĩZ,9ĻyĘ I‘ŒÔf@ĶË`Tr‚āsO(4ožiĀįĨ;ĩ%2L”5VŪFË+vĢBeo•HÍ;ĩ aŪĘžj¸vãõ~#ķ֖'&v¨Š%Ŗ`h„퇁ڒ&ÜjģDāaZ+MņN_ē*)šŠ ¤a¸bĢ rŦHĮ=jTŒF+;PÜō*¨īÚŦÃ1Î=ęĘÆ1ЁíFōTņR,%AæĢ‹gķ‹f5ģHW'Ĩ[Œm@´á×Ĩ × §sË÷[倈vˇđ*PNj)˛āj)ļá…Mn†5Ļ9Ŗ°4ÖZŲ$$ã–TbûŠí˜€fŖÃĒíN‚/,ÜÔNŦn`T“ÂdPp2jÖV‡bđil"’(°į'5$đ—`GQMš•éR†(ĀĪAP¸/sÔtК=ė3K.ā˜Z’Å0Õ'~!ϰČĒÂ&ŒņQ›0_v0qڝ r ķG’âbÃԛ)ëN‰[f (‹hųjģ@æpųāUĐpĻÉÍ*ô¨e?ŧ^jqž:Rķč)('ŠˆÆĨĀŠāvĨ”ŒRĸ”đ@␎‡Š /z9ĮjLQJ03IØzŌí>´ÜR2riĢ…HĄxĪbš4â(íAĪ Ŗĩ‚}¨Į¨ĸ“ÔŖ‘IKJiŒû ĩ/8íIõÅ´Š^ÔŌhiiOLŅôŖŊ/OJm(ü( œŠ֔ûRgڐšQͯJAÅ/>ÔJ1ŽÔĶE;¨¤öĸ“œŌsKցÁíAĪĩđĸ—šN:ԌŠGôíU‘Hœâ­SJ äI´z ĄW|’2*dPž”§đĻ• ÉÆhĮãĩ4 ëÅ.Î;PŊ=(eĪ\R…Ââ“!O$f”ÜÔouÁ„ŠëR¤AXž3SãåÍ4ô RzMŖ=¨8VÅ(4Ŋ 8cڎôO›9īG#Ō—ŒsÅ;#m&3I׎( i:5+rOJ;RGåLfŽ)ĘC1JG÷*2Uz➠N¤SqĪ4(æ—Ō`㝰i€l*B>”dÍAĻõ8ŖË“Å.(Ú8¤Ā…žr(ĀÍČĮĪ)wgŒĶņŒôĨÆ})Tb—89 7<â“'ښH^´ÕpŨ ?Nh+J)qÛ4‡Ō€;S$$Ô.vƒÅA"æ@jqÎ3Nö¤Į4P:tĸ—ō¤< œúQƒAúŌ‘Ķ‘IیԿŠJ\Qž´ƒ¯Z^´””ėāS{æ‚iH sŃŠ:ŒRö搎(ã֎ūô sHiiÍ/j@qEĮ4—žE.G­+cŌc#4dQœĐ)HÅ!Æ8Ĩš\ķIÉôĨ8Ŗ?JoSڗ8 äSOLPĨ.}Š;ŅŽzŅKŽ3H)IĻū4ŊF(é@<ôĨīGSEé9 úŅžzPNi)IĄN+3RÔVŨ€Î*ŕĮŸoZ˛G C÷­V\âĒÜ\ˆØÔÔĒÛÔUĖwāÔâá9ŠsÆj#(SœŠrȲ&ĸ¸šXWæ fŸ‚DÍMځĀ4Ŋ5 Ō\“M‚_529ÖFJx˜,c&ĨÃ.å9¨Ļ+ŽOZ˜°UÜzT"ōÕe%mš8Ļ5ƤIŒÔ2ÜœМSŧĶ‘ĮZ{ˌ{Ô7ɓR[6b"–YÂz"\rpiėāUKĻĀÍZ€æ5÷ Č4Ŋ)=čhhÎ %A(@sÍ<ĖWéJŌqž¤Š`āāū;đEJzŅEC<›#Ȩíe2&M>iŧ˛=é<îG÷.:Sãv LåȨEĀ2l§ŗØĄåT4Á?<ôŠæCŒTÄaV@QLY×~ŌqI<žRdtĻ%Ņ`*v*ÜÔ_hĮZ°šsL—•ĨP6ŠaåÅKĐŅŪŽÔ”G­r(ī@—ņâŒԆE–“šŌPėĒ3ÅEįĮũáKį&3¸QįĻ:ƒGÚŒîžzx x•Oņ O5q÷…eÄ)|ҟŧ(ķG÷¨3(ęšg_QŠt'¨Ĩ2¯¨ŖĪLõ§,ĒOQN2'¨¨Ė̟ŧ(ķã'†i<åÄ) ¤Veîŗ#hpZšÉđ \§÷…!ē@GĖ)ëp‡¸¤7Ū¤7 ŸŊKöˆĀå…7í žĸĩFˆQö¤õŸkAÜR‹„?Ä3Nķ”œnyČŊM!šŒ î_B1ķŠž9D‹iāķGSI€(i{ŌtĨ—Ŋ%Ŋx¤#QE­gj tnŖĨ?OŒÅĖtĢŨЍ¸sOíY÷|ÄČīVĶ8ôĒs€n×֖ę‘ÍYŋŅ€>•MœāČ)ē{ļį ëR^Æ˛(ĪcVĄP¨1Ķ7LQšQ‚*­×1)–Cl#ęKžSXN:T2įrg }Đ”ûĶŽšŦ—‘Ұčqž VŨ›ĢĀ51¤üiO×­gN6ŨĢ }×ˁAÁĒŠæ&7 ÖŦ(Š;ŌcŌ‚2§šĖ^ŋ{։\'M#a#gŒŅäm—vzÕ-B@“.;TÖŌŦĨKqZM´'Ö uN-ąÚ„K¤Ž}jĀQŌĢ\ķPö§Ė‹’9ĨˇP°€Ŋ1U•L“¸'• ˆ†=*Lūôn4—!JsŠ– yC•(ĨúRĮJ)GZLe¨${UyX qLš9Š|ų+¸uύōå#ąŠÔwõ§wĨ>´fĄŸYãĩEkÄ}(ēÆ}jDU(*†€={T–p*ôM”Ģ\ÁĮ~ĩj63ÅSžVܘ?Z”FZ5æĻ_–3P[æ=G>ãpAR˜‰Á&¤œ„‚iaEōĀŌ\SÅTd‘ îĄ f O˛—ĐŊ*#Ÿ2Ļ÷Ĩš¤¤Î)zôĨ4˜ĸŒRœ CÍ Ĩ=(íEQQʞbTVË NM;ėgĻM9l€îiZÍ}McR;ĶÅļzF´ĘũãQ#ũãNû#â4īŗ}ãM6…Ū4ĸĖc–4åŗĄĨk`GSQũũŖOÄŧi œn5 ļ´ír RŽÆįÍËHv֗Ųrƒ$æĢΧŗ•ČŦ+ŋĖî˞1ŦßøGgbU…iXx`D2ÄÖÍļ”°ô&Ž5(A'Ĩa\č÷;ÕÎ3[––B^IĀŠžŲXäĶMšUŗLāô¤’Ę0ã§‹Uā cZ/=išįŊ)´SÅ7ėC׊’gŠqŗSŠoؓ9Ĩû"Z>ČšÎM5íw4ÃdÆMDt´b9­bFTÃĨ<ԍŒŌcæŖ`P€hĸ€(īAäŅڔ šBhÆi:Ķ\€”ȰAÁŠiĒFķŠyĒ×0ų€c¨¤\/&Ąh\܇ė*K…w z+y[Iį] ‘ \äR%ŗĢ:™Ą,˜4øCĢ$p)8Ĩ¨äMčEClƒojYã. NŸ/ž*­ŊŗC+x5%Ę3ā-5ávE9ϘI‘×ŊZ‚1mĮĒ\Đ1éFG|UY 2Hö§IņĪjh€ôĢJÆĨĨÅ!^ Dļęˇz›})˛ $†šcVhß,2)>˘ųAmcĖ@Ôß/žŧRˆ†iøĪj‘W׌63Lxˇ.)ŅG°cښbËįŊ=TãšG‹'"˜đī\RÅEĩIĐQIۃŠ8ŖŠŖú‰ãŪÄŅ历•ūA€)€Á50û¸ĸ—øE&3Mu ¤T)FāņéK<^`÷Í>4(žĩ ĐyŽĻŊšq‚zTĐÆPbŸ,Jãš#P‹Ō‡ˆH0iĸ28ŠqAŒf˜b–H„‡=éU1ÁÍ+Į•Å*Gąp)˛ĮŧŒŌy9ÍHĢ…RIĀĨ^”ÂFūÕ ĀüiÎô„æ’“¯Ĩ-ŅŌ”ôĻŅGzS¤ĸ—¯ĨÍÔĶ …` ëRņÅE/"•zu¨ČhéRútĨĪŌ›ųRä{RgŠ\dPp(§ 0äĶ•r9¤Ā¤īJ>´Ÿ\QųSŽĨ'å@<öĨüŠ;öŖŋj^†ŌĘŠPĸ›ŽiGž(ĪԊOʏʌŅĶԁøP ĩúRįŽÔœPpZ:ņCbŽ=¨{Qß§ĶŠNô§đŖڌãŌ€hëéA= )9ßʁøRäcĩ E&F{bŒįĻ(#´ŖƒÚŽi2íJ9įŠČ ~u=ŠzRw qFh=)0)H÷ĻņKųP ;ō¤īڊCÍqĐPFWĩE7­KÚŠ]LҞãb6,™>•U›Ëē΍ŠMČ Īzŗģ)ž1UÖč3˛zSŌRŲÍ5îŸZ’9•øČÍ6Yüĸ22 ŠDƒĘĪÄ}ëšdŗí;jšbûHФųĸųŊ*Ĩ¤ŸyGcV’āļŗĐvĨ=i`ö¨'r‘ąô^Îg‘~oZ5Ū•^æ6ā…āUÛ[9 î:ԒNĒÛr3P‹’ŒcÕ°sĪáČææĸ™ļĄ`E2 ‘†ã4øåũáSڞÎKp:TbaæmČÍN[j™¨rÛ¸äTˆÅ—šŠ7ŽM9\ŗTŊģRūTC<žXĸYƜ’1Vw‚›¸ĒâpIŒÔą9læĻíڐséAĀéYķŗũĄBž3W0L88ŦčÉIØ'>ĩen!jøŒgŠ„ĖU˛G4Lä ŒRÂĖFN1SwíJ­ĪJĢ9!ĮĨNN)ŒI ķ°ČŠd”!ÆFj/;cdôÍLŌü€Žõ›hÜqŠ\:1PHGšĩd7ĩ5ČīJ¸Įj„ŸŪŠ˜{Ҍ1ۊCGåNSŠ'4€ķNĪˊnGŅģĒOzŸœāSã¸YSrō=ié*–ÆFjLņŌŽž”šsŠnGjQĪĨ(Å&{ŌņC0ëHŦëJ§ž´ ÆhÎ;ņF~”ŋ•ŒSiz´ŊGja`Ŗ$Õ_ļĄ›`9Å[ Ōđ(üŠ’H#R[T+7˜2ŧĐĶ` E=đ‰ÕHÕČÜ:N8#~Tg°¨n&Æ\ãŠe­ŌÜŠeÅY$RФb3@ëÅĨ"ÜR~T~UŌycv+8kP,ž[08­54{—šĨ&Š sˆ™€cÚŽĮ qģ!?į4™ĪĨ÷¤ČĩC5ÔpŒšĀ§Ã:ʙR5(äh§E§j@{RôĨÆ)ôŖûQIųS‡JLŌö¤Ĩč9ĻãŒÔ)ū°ÕĘ¨^xã5a ĩ@ã7#Ĩ:åP õŠa˙R;ÕhÔ}ŠŗVe]ąą^ UK&.­ŋŽ{Ķܸ\tŠ.pcÎ)cq䎜 !u •éYš×•8­Ieq¯ķ´åÁ‹đĒVHĒ_ĻsCá/Tū¤:RŽ Ö ›ũ[}*ŊŖ LqÅŽ Xčˆ/Ų°=*+qŠIQžÕ’NßJšHUˆ5r?¸)ãĨ¨'Œũ*Ŋœ€ÆGJTVķŲŠé1ÉĮ5TļËąéZƒ%6d‘Š˜ā&qT.[iĸÖãl†'íWŗž”áøQøUkĻčĒsîT\5ZY„;U6‹{ąVŦãčjījLcĩšŠ?C=*Ņ#a9ĒVÄ5ÃņŌ2´)4ë Z!ˇ­6$,Ŗ'ķĢ.ˁԧĮŌ“ˇJkQ‰Wí-Å,ãléõŠĻ˙WĐRĀßēãŌĸ€‘+œqŌĄē]Ę85 "DÆ~aß5f`Ly$ kôŠø'ĩņڛÖĢ]b¤l˜†(W1Ž•. ­ĮZ.#Ũ(&Ä{ÔĖÄo­Qŧmą‚;úUË97[¯=Ē9XyËëWîõ¤’œ¸ĮJŽOīÆjn‚”æŠCͯJ(Îi@õ4ŸÅJ 1ŸJÅÖã_#wz›IĮØT{U]NWļ• w5}.KZŦ˜į^Kō‘Î \ˇ¸3BĄÅT7ˎ^V3V'šh€8āՁ.b‘Ķ5WíE•ˆĮ:ƒĘpCO{Â×>^igwŒĢ'<ķIsvņĀxÍ6™d[š’{Ī)T3KÉnõy#>´§ĨéUd˜ųÆ0FGZŽ{–€ĮŠtŌīĩŪ„ŒÖN”K‡.9Ít#RūTgÚą5›†VTÎĢö ‹UėpjáŊŪė¨Ã"Ŗˇŋc9ņĮCQßß<.΄ÔÉu(e8ëSMy°SPKĒ,.Ąđ­ä u<xāP1íQJšR+ˆņŗÚĖŗÆ;ķ]wö=IûØÁŦØX뉹ž\×a lÅBˇV`ŧĶđĮ Y1ĪJ†ûT[LĐúST.Wå<Ķ5Ļ&Ė0wjM2YRÍXķÅ_ˇŋI˛E Ôc7>Váģԟ5ōÂĀ1ԍr‚/0°ÅVmD 09ŽA(™qÍXĮ‡§ZJNôP (éH:ĶąÅ!úŌuŖļ*1!ŠGáLš%p*%ˆ†¤06útąy OŽ=‘íÁŲ7w56܌SRØvđ)H §<[—ŊB +Á'ąÂ"ÎÚŠ5ĒŧĨœn5 Y/›•\VŽß“Ļ*íö1+ۚÖÛ¤ŪOJļ8P;ҜŠ\fšËŊH5QmUX‘ĀŠL*ÚrÅĩ6H°*œÍHcW¤Xļš—Ŋ§j­r F@Ēö‘÷ĒčAßĨ4ÄšÎj6ˇBAĮ52Ļ Ō”ķÅ1bU9Ŗ{d2nĮ58áĶ­‘‡äã5¤`ŠQÛ´ĐļęšÅN>čöŖņ ž´•‡ šw–b˜Ēļā)$€9ŊHcųqÅ1bĀŠvĶķéŠ Í1†EB}ŨéĪy=E9ŖĪ*t¤1‚ŲĄ{Ķ&‹}1"*1š˜ŽTBFŒT´`QQ´aČĪ4ĄqĀÅ4D äbœT1æ‘bŌ˛\­Ļ?ZXĄũÚsB qš)˛Ž´ĒF*s0TÔvŖ ¤ĪlQÛ4gڊZSÔ`RRÂą5Ö˙GĀ뚓G`-wÅE¸™TëSĘ<›E@>ĩFđ/ŲWšĢļ/ūŽ ¤ėF¨ŧpjíķÅM f3ØV[M‰JĢđkFÍSi ŒĶ%ļeŊYJŊ´ûĩGS0…ZžÆ0ļʸíLŊ…$[ķĒinöämbsë[0ōÆzÔ´ĶÂņÖ¨+vĖÜî¨õķŖÂõĪj’üģPŦ: §`ûo¤R:ÖāîÔŌ+WŗiĀp:U­=öÛ*ˇZ´ĪÎ1Y×빗ކŦoסJĄ`2dÅIfËÉâ§Ô’0ĢۚČc°*x%jž’€[¸õ&–ŌØGq!aÔÕŋŗĮŋpÍÕ'‰@Ī5ąĢD‡ĨSģ!ĻUŦ`ņŨ oé¯ēÕFz ŧ8Ĩúw¨äluŦëÛxîĄäĪJŠÂFŨ vŦģüjĄížĩĐž× yÅVĶÁBęũsPj1ŧ—ų~ŊĒ N-ÉaЌÖŊ´F$%sTõŧ-¸qš–ĶoØ1÷k/N‚Q}+†;3Ō’E?ۊ@#jÎŽÃtcŪŦË –ÁUO$W<ņŪÚžŌ 'jęŦ&Î68ÕԔHšÅ;4A¤´™â—ōĨ āv Rcš‡?Ŋ"Ĩ… ×ĩ Á8īA⁃øŅØâ—ĩŠ“ Ô{=ižyíMsŠMĒÃ4Qڗĩ/J;sE‚&GLŅĀwώCŠŠ)~v ÅNÅ H\Ķb“päT™ĪZLĶ^ELd̓ Rp)BâŽĻ†;FiĒáúbš §Ĩ&F*)¤Úĸž‡+œS‹éIÁ9 94ĸ@üŒQš PHqMķŠĀädRnĨ4™ëJÅ&qJBFÜĶUՏSø víGjAEFeÂäS‰N)ĄxSÁĄĨ'“¨Ļ3íZr1+ž(sĪZ2 ÆE8õ QA8 āŌdPIs´ņS#n‘Ö’ANW?ņņV1žh#Š]š¤Å&8ĨAŊünj1Øî“N1—•H*iI ĸ’oŪ&ĐjHãŲmŒķéUíÆÉ_Œf¯ĄČ§ŽŊiœ•Hîij­hīKsƒZ¨Å†iŨ¨ĮZŖs•XŠ˜É”8ôĒ6œ\š €kLœ.GĨTŋpĪN•Ģm¸qÍ_Ÿ/"’˜ōj%8™¸ĻJ J¤ ē§åĨĨæĒ2•œ7j’O˜b”qáP[ļ˛*įjŽCOQōÕoųmŌŦ¨É ŒP:ŅŪÆ;Rc'ĩ!āâNĮŠŋ•ƒGZ;ŅŪĐS1“Ö”qA9íFzQĶĨ4žôqš:ŌôīHzŅړņ֝Įzm%)äP84¸ÉúQIz)h=(·­čĨ֐žixÆ8Í%-%;¤úRf”tŖņ™æ”ôg‡$õŖĨ.Eq֐RúŅĪ  ŒŽÔƒ4¤ct4i@÷dQœzf“žô¸¤´ VÁīMëE•;¯ĨĮ4ƒƒíA=ęs!/^*ģÛ!bqÍI r:Õ{”s*}ĶSĸîųŽ3RãFr@Í8E0ŽzŌ…Ú0:SÁÅ♠9¨ŌƒžBîÎ9ĨxCžGJ‘FҊPpzĐ2xÍ9ĮĨnŧHˌr)1Å P9â”(īŠ‚"Æā CE(^ØĻKõÅ"ňöž˜¤ŽâĻėŪ›iŒĐà Ķ1Įj”AéH8Ļ:ÆE(ãéM(9ĀÍ;ËRsOUĮĻ)6€h+ž¸4Ļ)ØČ‘ŠM  đ)sšBĸ“ąM1ƒÖ” QŠĨp’4ĒGJ˛‹ÆŠĨĮĨ7Ë]ŲŔđ0(ĨĪjc¨# #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_float32 angle, conf, deg2rad; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; deg2rad = 3.14159 / 180.; pixs = pixRead("dave-orig.png"); pixa = pixaCreate(0); /* Threshold to binary, extracting much of the lines */ pix1 = pixThresholdToBinary(pixs, 170); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixaAddPix(pixa, pix1, L_INSERT); /* Find the skew angle and deskew using an interpolated * rotator for anti-aliasing (to avoid jaggies) */ pixFindSkew(pix1, &angle, &conf); pix2 = pixRotateAMGray(pixs, deg2rad * angle, 255); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix2, L_INSERT); /* Extract the lines to be removed */ pix3 = pixCloseGray(pix2, 51, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix3, L_INSERT); /* Solidify the lines to be removed */ pix4 = pixErodeGray(pix3, 1, 5); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 3 */ pixaAddPix(pixa, pix4, L_INSERT); /* Clean the background of those lines */ pix5 = pixThresholdToValue(NULL, pix4, 210, 255); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 4 */ pixaAddPix(pixa, pix5, L_INSERT); pix6 = pixThresholdToValue(NULL, pix5, 200, 0); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix6, L_COPY); /* Get paint-through mask for changed pixels */ pix7 = pixThresholdToBinary(pix6, 210); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 6 */ pixaAddPix(pixa, pix7, L_INSERT); /* Add the inverted, cleaned lines to orig. Because * the background was cleaned, the inversion is 0, * so when you add, it doesn't lighten those pixels. * It only lightens (to white) the pixels in the lines! */ pixInvert(pix6, pix6); pix8 = pixAddGray(NULL, pix2, pix6); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 7 */ pixaAddPix(pixa, pix8, L_COPY); pix9 = pixOpenGray(pix8, 1, 9); regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 8 */ pixaAddPix(pixa, pix9, L_INSERT); pixCombineMasked(pix8, pix9, pix7); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 9 */ pixaAddPix(pixa, pix8, L_INSERT); if (rp->display) { lept_rmdir("lept/lines"); lept_mkdir("lept/lines"); lept_stderr("Writing to: /tmp/lept/lines/lineremoval.pdf\n"); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, "lineremoval example", "/tmp/lept/lines/lineremoval.pdf"); pix1 = pixaDisplayTiledInColumns(pixa, 5, 0.5, 30, 2); pixWrite("/tmp/lept/lines/lineremoval.jpg", pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pix6); return regTestCleanup(rp); } leptonica-1.86.0/prog/lion-mask.00010.tif000066400000000000000000000006461506303110300175660ustar00rootroot00000000000000II*č˙˙˙˙˙ūV€đVų0ÖØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōšPdœ˙˙˙˙˙˙˙˙˙˙ü@ė€€ā–ž(xxleptonica-1.86.0/prog/lion-mask.00016.tif000066400000000000000000000006321506303110300175670ustar00rootroot00000000000000II*Ü˙˙˙˙˙˙˙˙ūB€Ė ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€€ĐŒŒÔŠ’(xxleptonica-1.86.0/prog/lion-page.00010.jpg000066400000000000000000001501011506303110300175350ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā€ė"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷ú(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (¤Í-›¨Í+€´Rgš3Í0Š( Š( Š( ŠLŌĐEPEPEPEPEf€ )3K@Rf€Š3EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!¨ŲXŋ¤Í5Dĸ¤ĩ ØįĩûŨBÆX¤ļ ҆R;Õ­7[K›]÷KöyÁV4ם/gēą¸Ú„Ņ1Į#×ėEqwN`Ôe´ŸPY„(ޝ~ŧžƒķŽ œÔgĪtÎúTáV’VhôĀÁ€#œķYsj‰ĸđ<Č6…;3Ī5§xˇNŠÂ;y.ŨÆĄ6ˇßŊs+¸2kēŠhĨdhØŠĘ˜Õ†Ō}ūcųU×ĢÍāõ3§‡|ö’Đôôš‰ĄY7§ĄÍH˛)čA5ÃčwúV˘ €ÜgüŠl:ÍÄÛæĩ—+üۊ1ú÷ü¨XĢ%tSÂ;ŗŧ.3ßĨ7ÎNNáĮZãĶ^¸ēĶcur_kāsŒõĮnĸ›{ĢŨ,2:Ɍ ŧ÷âŠâ•ôD,,ēŗ´. d‘ŠC*Ēî'Šã?á&I"ōL…åTiã5=Ū´VÍ0Ŧy:Ž3éTņ>Dũ]­Îą_=¸Ŗpk“[ $“boá\õ­­4ņ[ÉŗJA܃ŠĮ 4,Cdē-u:Í”zWyâ …ŗ,BVoMŋwØâ“Nņ”´M#+.Čûۘô¤ą:ę‡ė[™a@#ë\äz´_ŊsrBÚįĶĨ7ûQÍš0Ė~^NõäUĮ­r}‹gK烜×+g­ËrIdXŋ„?;OĨ^{įƒË2MģvÁĮ4–!Øŗw4›‡ĩdžĄÂ…î'Û횁5ĨŲ$˛`F™ sĶ´ĨŠQč „ÍÜRĩ‰i¨ ËUģi<¸Ü’ģŋˆ„}jÄZŒsŗ-ą’b§ ņ8œqŠtĸK§mÍ Ūôžg<šÎ’,ëĐyBF+Wæ#<ëĮJeÍų†Ëí‘C$ČF~R<“ĪjNU–Šdk dsíPKtb)˜œ†8Číî}Ģ:ÛR+¨­¤Ŋ$RČÄNzgņ­Yd‰€AõÍmNRŠÆ@ՅŠU‘Đå[Ą§˙õë F gUI'“ôįĨW[×ē•Z ŠV<(Œ36;ŒsMU’|ģą¨§ĢgBd=@ãëA™Aˆõ5BÎî'€ŧ“ƒƒĩˇü¤ëœUĻK{˜ōBșČÁČâĩWîHøŽĸ•˜#†ÁÁÅOQ"FŧĒŽ{âž[ˇįV„ĮQMÜ1ôĄX0Čĸā:Š3E0 (Ŗ4QIš3@ E&h€Ԛwd`ņŪ•‰ p2})ĒėP…OĨKWJ(Í@QEQEQEQEQEQEQE%C2ŗ!ØF}ŠéŒ@ õ3ĩĩėrw ˆ˛\ÜŪ%ĀĮz™3Ä4›qqe/rŗ6éČękĐįFhÛk`ŸQĀũ+¸´‡Nņ ×6 æj+Ä‚FčHÂã<ëúW$¨ÅKDwĐÄKŽŦâüQ O áiėäAI"Mų^āžØŽjxVūí|–hâ‡<í* ädzâģ¯ëŠe¨é§Sˇ˜ZΏ ŅE!Á'ļ:×!â-rĪXšŗ]2Ũ­Ŗ‚ŽRPHĀ>Ũy÷Ŧ§IGSЧRSK™!ú/ˆeKֆwy1Rį/ĪB3ŽŨĒäėzR\%ģ´‰#ŠUíCÁĀŽfkK[4Š`vyN íË(ã?{Ѝ%ēŽCpą gŒcy ž}+>Kę\Ũ‘ØkŗXfå” ˜É2c=p}XĀ–k[uVÄļģØ÷Čū•“s*ŨxE_n锏$§ĄãU$ļ c™[Î1lRųŗžŧönj49ulŅŽî"+u—%YŨâ™§<#3Ü,Ruį8?į5˜đŸģvâ@$u<Ž™öŠ’9bļ„Č„ä“ōœŒv­yBˇCj[Čâ¸@ĻP§ļx#×5eg˜J|§ŽĖd“øÖ5ģyÂV9s†8øęƒŒvëZQÎŅZäDŊN8ĀĮ'=ę,§Éí–ūâĘōQq$bŒƒæūB˛ôíVavLJA,1œt­éķģXjL]m'‰­á-Æü°âŗ ‰#ŧĮÆÕÚF2AĮ­ÉŦ™ĶiˇĶËjÅĻŪ˙ÂN~^z §§tmŽ)Y€$0ųÕs õŠÛۋV…._`w$žŖōã4ëВĪ3ÛČą&~WŽ=1ëJÚjhėö-AŦęK@ Š>H  ÖÍõ𸸡 ;‡'θŠfKV-&>đ˜ķÍ]7{°čĒ_ßūúŌq°Ü4:ÛĮ’)ŅČ”ļägÔgī\n­ŠÜÜŪ^Fû “Á÷Ž;ôĀŠoÚâ=2āĘÛ]ÆŅÎp8ęséŸÎ°¯/Ą† cBĒwR@ģVkâ„’š×éŌęz֙fͲØ\‚¯ŨeÚNĄŽæöŪįLÔRm6Îy`’WHÛ#ĖmánäW“øFņ§ņ—– ‹(ƒëŪŊŊ%ß•§<×ŖBŸ¸pÕO˜ËĶtĢ;Ŋ>ÖâņįžeÄÄË1ũÛû`ācšŨĘĢätĶÚšp6›ŠÛę) KY• ¸ŽB|ĸĖ@R}:‘øÕŸąęąë^1ķcÆÁ3ãN\sÎ9ĪzŅs/uēi”ĩtŸOœÚÉæKk9&ķĮ$íúŽxöãĩOiâKņŠK2(Ûæī“ūģqo§awđíqĩđŦsÕO¨įš‚ßLĶŖq!„Hã‚ōącúÖ/œ›rkĐĨ/vÍŋéÚČ\(áđqV?á[ēn—Œd—2Ü?ߔŽOĶĐ{TęŅl~Et(SĖÛTÎkXÂ4×ēŒZm‘ļe$…ŪÖrrI@y¨įĶōĐŊ¯— FŲ . c(œcœķۃ3}Đ:wĻå¨ųZ*Ëq}gHđ- gČ?0C×ķ¨Öâ}Nß}ĨÚĀÂģ7ėŲÁqŽWrŽAŨëYŪ}˛ę >ā'“ä;xŨč­c*ÔâõeÆ ô-Ų<ŌŠYË+&U†ŪQÁôīV­WėÖÉČdeū"1QŦŔ–#Ąœ$ūNEi‰­q,—éIæ.ĪZ‰ĻS~}j;đY°r:­70Œ.jo™ÅRžÔ ˛@ds“÷UAbß@9ŠŖuØ c“üëžŌŽãž)õG*d•ÎÅ^JF8ÆCŪ˛ĢVČq†ĻÄW÷3Hšą–8ņģ*"ÕíŪé-d-îHTcv=CY:ŽļļĶÁjeû<Ō†+˜÷ôƘëYđ’BúœVŌ\fH~ų !7ŒcךĄ‰nVŠšĸ Ünw`įQŽH?Μ8¯E⚎'. >¸éАķMVŨíNā>Š( Š( Š( Š( Š( Š( Š( Š( Ē÷3Į~rîqęjÍWš5s2*ŲR{ZŠŽŅlkrŧ×ļÂV§ ņa˜ t9ãô5ÉÉĸi7ÚÃÎđË4‡÷Âc9Č$“´ĀZęM´HZMƒ$rÄd˙žMr7ÖļéĒ%Ė,bpŲ;ˆ+bÛgn—3iqiVŗƒÎŪģXÍķ“ÎHãĨyŠ%ļjÖPG"ÆÎŸęūU(Č>ŖŽžæģŠ|E}¤XŨÉu\ÆŠĖŗ(ÁÉ•âŽÖÍq°ĸarO]Äũ2J—FĶSÄĸÅ4’›8I1|ĮęGŅW'ņŦīčĢ[-ėîɧ€<HįŸAšé"™÷íbY@ÆŪ Cú͚áŅ|„EXú’8¨uybGąwŅŽģo"ĘI%Is8 `H\ödž+âŪ°¸šiūʑĄ}ĄrāįĻ:xŽ™/ėE“Ū>ĩFęG°Ídjv÷7P–Æ {1•<ÉpĄBâœ%Ė‘ņvg–R2›ŊBჲîXÉČP}}OJĶ´h#D–BŽévœœ’*.KՖG•ÉV[xļ`žHįČzTzÕ˛X[&˜ģ^ķqšõÃęę2?*éMlÍauĒ @!’3hƒ~dŪúՕBiâH• ^2ÍÃąéMˇļžåC%ŽŌ€ö=x§ŧ‹k,–qEē!ōČn3× w˙ëV]nnÚĩ™×x,Į‹Ÿ([–E.x`ŌŊ4š,Fâˇ+Î<, M_Iˇ€,R4—vK1N‡Ķ¨8öŽũAWÁqČĮzëŖQōčrT‚æ+ëdzÅĸ[Ũō–T„8 TįÛ8ü…\iÜĄūRyÛQÅ6 zÔ4ß.ÅÎ>•ĸ–ē™ō’ Üą ĮoLæŸ*H'Ķu@€œ?.jX× ‘ˇī֎`ˇbmŲ8`29ZœĖv)žâŗËŸ0™$pE8G ÷Å'!r\ŅߘķŽ*D| Î߆ ī‚§8̐HY†įsÆ;Ô=ĖĨ VšŦE.ģuo/VCĘ"Ifm¤đ:qëëXÚmŊ€2K2ĪĘnwfÉÁđ­/éĶØø°\ÛCrö×Ĩ|ĶĘ7ņü]øęÆŠ &´.×͇E÷*⁠6Wûķ\Ž„dÛoSēœ×ŗF—…ĩšŽ5kŊ&æQ6ȄņN+œØî? ęG î''ôúzוørÕ´_^ęww -,!ōˊ›D’‚Ŗ?xzuí]ĨŊūŖzËuŧQÂW+ įįqØä}Ņųš¸^:_SžĨ;ɸ­€ofËąÎ8ĒPjļ“_ËhˇķD~p1øÖbëŒt–3Ėy)ėîôÚxČë\Ķč‘ÄZCs, ‹æË0õ`c9ō{Tšķj˜•&ŲéĒ>lí'Û­rz֏{˙›ĨMĪy*–%˛*ƒœvĮ>™į­&§¨ę §ÄęžDf@IÉ2ÁëØg­oŲÚAy‰+;7;¤mĮ™¤ÛnŌØË•ÃS%<9i%ķę7ą™e`„ÆOŨeū GáųUËmŪįR7W(&–”“rOP@āãĢkMyg#]Å*ˆcÚĨ@ÎA<’=i[_CjöļLĨU%PÄrp}h§;K]‚nVē5÷íāņøS˛HÍ@7`îašrxoÂģîô9Ų'~´ƒHŊ)Æ´Z’-QVEPEPEPEPEPEPEPMeČÆiÔŌi5u`2ī–á` AÁ 35É_­×šČļ™Tn#‘ĪŋĩwoåDJœzæŽwŧŋ}MyŌ„šQé`Ĩ$îpū!›GhšvrųĀˊé\îŗ<Ģ¤Œß$ĐųkŊˆāžøú×]ãHÖ}ÉwÚŗ\D¤“Ķ •qZŊÔĢvËl¤JT–Ũ˙Öé[RIŖŌroVWÕmÖÂęęÎk\(ĶkđŽqĪo΍#L7:eÖ 1´*"Ryķ%8ä t'ˆãš!pŋŋxĸp˛ĮŋOŌēËí1t¯‡Ö–’á‘ZbĖĖIŸĀū•˛J&3›{ŪĶŌįG›Pâk ĐDNvƒå$}Nj–ƒ$6WÍžõŸËp;ÖÚųVQ%ĩĒíDPė+—ÖDPoŽ5ōÚiw>ÜōsÖ°œœĶ:hŌÕ\é$ģ´žâr_fq’„Œ*Ë´ėBT)ČĮ^•ÍÚĘépÎãt~aÉĪĩjy‹5Đ€ķØÖwž‡Cĸ–Šī/vCŗ!‹öôĒ–nR62&âNA&Ē”-q1Î0åW=ęD-¯$­ßõŦĨŦ„é¤Ŧ‹Š!y0YÆ@ۛ–Į—æb>oĨ1lĨ‰8aÂÔ+–íãœîķÚĸKĄ‚r'ĩÕ^;`Ŧ› gƒÉzčáHĩáûH.ˆ7˜É;I÷ņ\t&1tZ@<ģpH…néķ\]¸2“ÉūčôĢ„mŠzJÛüE­AŖŨËi§ÁD2íŖË‚G@äœztŽoû*āÛŖųW š÷—ššÉęĮŽk[×-4+éÂēÖe;Ĩ•ÎV8įˇĶÚš{ŊJūä´×:•ĖĶ+ȏĩH>ÂēÕYjo•ô…ō`YVGųĘãh<œZl—VņLÆ+lKŠ ÄŽ1ÛŌĄēē–[X˜ēŗî-ķ6A¨.¯œĒ<'ĖXô$g=>€Ķŗ–Ŧ&ú#ēą[U×´[Ûv)<îLŠOj0ÉĪÔWzō(ÚÛy gšōŊXīôš!œöČ^ŨË`Ą9Á×8¯EĶ.>ßĻZŨŠŊ‰XäķģįņīUN|Ēˉ#I ąÜīR]ÄāãĶ=+*ōų4ųFüņ3uČČĮ­]ŗ™n ķPe~+EU9X‡ .K,†$•#wÚ3ĩOåYƒYŒë6Ö12ąžzāācõ­g‰f´š6‘á ŋ}8eĮqëXvÛhúŠIrŠ;L¸ŗ0ÆvŒä°ĮڛÔQ’Ié¨í+V’]îęáO 9@rzātúREâEžKVH$Xy#Ąã??@Ō.t—¸ĩœBö÷*XLŸ+÷āƒßįôĨūČš°ąGū™H'‚sĀĮ$S_ ‹Œ äîl9;R['¯­HB”ÛøŽ+Lš6Öä?™=’ķ¨ËÆ=î¯éVFģ§;7•p˛6ėlŒÄúc¯z9ÔV¤J:ØĩŦÍht÷KæÛädį=ŋZĀŌbw–áҁƒÍųd' (ĮR;õĒnŋˇû+ĢÅwt­äûĄ—œBEWļņY؈ī!.ĸųL[38ÎGⱍîäֆ”ųcŠ^6’æ GM´H‹ÛÍ$Ž™nBĢĻHú֜px‚Ō.$3ļđ×x%õNįQŊÖŖOąX0 r÷ ˜OЧjBD…\Ēĸ Ž“ŽŒ2së͊­$ū•œmsō[kąøŖFŽxĨ.ˇnІau2Į;ŽįŸĘ•*‰ûĒ$Iģît(îŅFÁGĖ “R)äķČöĒļ%ßMĩrŲ>R–#šÅOmŋSÖģQĪbecŽG4ŦÁ@,p:Rž´Žz醯lvii:÷ĨĢ@QEQEQEQEQEQEQE †Q´œäįŌĨ5šp=8õŠ–Ã[™ˇ“† ģ,F=+TÔ-­ŦZiYv‚sŽšņõĻę—2Ī Ŧ’ņąÁSŽ ë\ŨíŧęštŦ^W2ČQq´†Üyxō’”Ž{zĩĖk^ƒT’ŌÖåķ ŽÆ7NÁ˙XēDRßę6ēa@ Mîx8NOsĶķ­­WG}Biˇ4‹4@ŧmÚÁHäøŠ<+0“WŋT˜cÜã3“Įá]I]˛mŪ6%ņĨĸĩũ¤Ā˙­Ę†ôaŗū ZÚ܉¨$Öîr’„žv÷§k3X<)gv<Ų&9V:įúVLå"Õ luÂŗāŅ*—ąt(jî}ë´L%;Ĩˆ•čGOéI{˛K0ô8ę8“xo6;œļA$ãŊj_AžŌ@2äõŠzhu´–¨FHãąwŽ<OQÖĢ%Đs‚č‚î÷ūĒąĨÍöÍ5U€Č;ėÍUķ..-3˜ß1úZÍvw6mJOjdˇ#= N‚&ĩÜĨ°zŸzĨjf:(ūfôUÛeō`1lg,Ō*’:ņ‘P•žĻR܎ܴˆûņØ_qVūe.¸>õ•Ļ°Ģ¸a!\°# ĪZÚ´`ĶÉ!S÷ĶĐSjäk4øgŒÃˍ†į$ņŠĖÖ|emioöm!CĖįkM•¯šĒZæĸ×ú”öČå,-ÂĮ˜Øü̜Ôf>z[¤V1˜ņĀęJē4Ûvg-jŽÚ –Tĩ„ĐĀgšÃģÕÆŖokĖ’ÄĨ\ˆŖË*yĮŸūŊkÜēØčVšTl~ĶuķĖè[?ž*„ņGunm§„kzu ãŖÔ™ŅmŨž$ž{Ŋ4Ŗ1æhG΍=›ųņé\õŒZŽĄâi5+ˇˆÛųrųč9ëß<•Éh“ę}åīØcŊĶ›$WˊAÎ ÛųÖÂx¯_Š=ĶÜ&Øí?Ĩ’%Ķ–ČëæĐ/'Ž9¤ē…Žāo2(aN˜ ’rxŽ*_JI{m'z €ī*Ļėzpx­[j÷7qÛíä3ģŅ2ŖģséPh~Ō]ŽÄļÉpž{,fBI ČAJugnn‰Špw–Ĩ8õėZ^’eŸcČW Ŗ†.G@jxņ +H…cŒŸ_aPëjLVŗHrĢ:Îā@ĪžHŦ$š‹’ÜÅüFĩƒ/Øm¸aåŽ9ČÅX=ĢÎMēy|¤QÂ*î^;c¨úfŽÛÜə!œu>ë_oĨT+h›3”lô/E*Ę Cœpj+•™•VlO$Œö?ןŸoƤ+õ5)#"Ŋģ­ …´‚–¨Š( Š( Š( Š( Š( Š( Š( 5^`äžÜƒˇƒīV @ęAv rGz™+č8îr/m K :L$|ônĩ‹­?—5šNZ5ÃsøVžŗu…ŊŨԙŲā}{w¨8¯Ŧ ¸B]•‡'gúם:}r„šZlį‰n5.J5ššRz?øĒ6VéĨëZš˛°yBɃøĶŖ|úÖŌqĨöĒ’•ÛäÅÁõŪqúŠÅēk“ihSûR KB ųfFÆņųŠ¨Ãš-ŪÕ/ĐeäžtŌf5!y9éīXͨ4ļÆ,a€ÉlûņZˇl­uÉ(ūsŽŪ†ąīmB;<8xXrĀãåâĸ)-N/RÅĶ<ļđÜ.Â0RLŽ„´ëɝ -ĩ˛N×ĮķĢ’Úˆ<Ļ“ä#iäŒqUnÄvķŽM¨¸āôüęēX‰EܟAœÃs$LÄŲųIū/oZ†æO˛ßų ‰71(Ck5ÂIĀ2m#jžxĪOCĮō¨oäŪ‘Î†AëŸqSĨĮ&m^ƒ5§+I÷€õÍ]I ÖĶŠÕ 7c™§,ąXũĻžTlųdrTœdV„Ī Z˛.Bģ6Ū ’E+™ÉkaŅá‚+ËŊĘ|‚Œ¤{Ņw¤‰Å$÷.1ä'Pę}*8Yī~ĖeĀHļČé×9R@ü Ŧũ*I.mËDLZ†Š;~÷ŠHųl Ģƒžæ3M—z=ãŨM2\ÛÚ´îÎĐŧ€‘¸į5OTŌõ+[c,ņĨÄ@¯ˇâ쨴 %-ÂIlŗ9ųL’|ĖĮšŽRļ—BŧŽM5ĩ|Ŧ–ŒŲR;ã'ŠŨģ=u}81ūĪ"‚Ĩ†Ęķ3VŒ0yņí(p¤cHéZšž•k˛_icũ—|–ŨĶ=Hõ˙ëV"ĘŗD °dįûÜu­ã%%ĄÉ:Nœšd\KK­B{kx2ŧAŲKt˙=jĨĖ(Úßq2G ,ëŒ˙LUƸH5/:ŨØÆl$`ā •ÕgՍ×Ëą‹nLķʞ?JIô4åIyšē-ûé˛ÄĐ> ˛GĘŲįŸZė ņ.‹uúķđvģVP3Č>žŖŪĨK4‚đ=ŧk,šdÜ~cÛ9Ž,DŠīŌ’åКCŗ–Ëg“UĻ‚ÂęhâžŪOŧÜ?y•^Ėã ŅyĪô§€ĖGĘ0Ŗ‚G5Īvļ5mXÄK-BÆf6˛ ģ\ąLxŧtŋãíSÃÖ#ŖõŽEà OÄVšŒHr0{zĶ&˛Šëg 9QԎFxë×§ŊkܯRhĢbĸ_!P6Z[H’įû/ëZ–qŽīœ…ViđģxųBŒ/Öŗ>Á&—ŸĨBK&ŨđČ厍bx'ũãZßÚÜË)öÉÕÕøaõÚϤqÕMČÆÔŦį´¸Œ[yO äĨ<™˜Œ 8#ÜzT˛é—ˇ¸K3iR1tbįđy­”Mކėĩ„Ææ'úųÖŋš‘†'F2Ũ€Į_¯ZėĄ;EÜÂQIŨ#“{–öŌHt× ˜;YRKAã¨ëžkFygŅĩxoîa€4ĐÉcrįn2Ą¸éģņ­ÔœO§œÕMb%šŌäVZ-˛¯ü†Į㊚;ÆČ.å-LũCÃVãNQd%…ˆ û”đzÖÜvmÖŌ,‘Éä&ØÕĀc×üô¨ ¸ßl$ņy ~^ūĩbæ)dŧˇėQ’J‘Ôq\š´–„ķšÍs0ß*ŽQ3ōŠĮoʋÉŧû ('G,ņnįA ×Û7 ¸ya—Žõ›ŽÎâM<$¨’<ŦŖp=ÔÕIrŽc Bú"Րķedž1*Č ÆøŠÆGHæŦÛ<°y0ŧ…ĨšËODāp=ú~9õŦģļJRęږņ!HßkHsÉÁ؍_‚{é#U¸ąhĀÅXƒõõ÷Ž(×I%%ÔÆQw7-#’(f—͐_fŨŪäzÔĮ—Օ§j2\I$RÃS“^Ĩ:ҚšƒV%ĸEn ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĻČ ô4ún)uŸÔôoļGs Ч#PYxhéņĘ`Q‘Œô]̊ér~lbĒ_Ę ĩ–f$nj⠟ĀVn6ŊΈ֛i&yŧ‘ĮŊŦÁæ`°Ė1ߨ˙ŲqøÔPÛÍI‚0ˆM§9ü;ÕmnėYj6R¯“06sƒÆršôĒēÕäQĘ+áî^kŽĨâô>ƒĒådא –7vî˜rĢÕ¸ŠÁūĪ–Ę7šMŌÚžĪU'ĩXŠîKH "‹?)Ī?ũnŋĨ,~ ŒŠæMđɑ¸ŽžÄZ…tŽŠ'c{ŗm+.˙—åT$dœžJę?á[š%{ûŒ BĒØ!~žšÍaÃĻG¨ø˛Â%hĖqfgMŨ—‘õīZuĢģa•œĻ3'úâŖ=¨O[Ŗ“”Ÿ+ŲĪĄhZ­ŧņC$QŨ¨Ή°ĘÞ¸úũkm#RĶõX ¸ŸÎƒcI ņĻwę¤z˙:Ī“Ãp}žÖ{9įˆÎ¸r\ķžšŽ§Iŧŧ‡MŠÂPf’2ęd~~„~s=ĨŠJœãīCK’h’G¨[ ™#@ģœŠÎ#đâx‹’má3(*›¸/žß­dhōÉl–ņũ×ŪsîMMĒËæ4q¤›]HgĀįŸ˙Ug{;8ļîRŽ{ˆuQ1ËSžš?¯åQiˇoiŠˆ|ëC qÜņ˙Ö˙9ĢŌfiŋÖ/HĮ5öeá˜ÂŲf\ dU¤˜=56#ņ)šĶ|øaÄYéÉôī\Õė÷÷$Ė÷2ȁļ#ˆCz'š’Æií šˇÕ ˜ÛĘB†DČ^zÖúiVsCo$×ĶŪ@+ @;p:‘T’ƒÔÅÉī2xe…|Ûu öÅUH˙ūĒåīôš š’k4/nįq…FZ2˜ë^œ°@Œ%‡Éäô•fŪéé1 9 ã“ëJ5zšjÆŌŨyۈ_2Ē?]Ž žü`â­Ã4ģc1’UXma€ũDÖŽšgymkˆÖhÔß(cĮ^z˙úŠ-oüv¸x|šĀ`6gŽØīšŨMėsNŠ‹˛eKˆŧĨŠ$vYr:ŸZšÎÖsįáco‘¸āŽGëT,'ˇ¸ģģ†9žHŖ``‘š#=AüĢh€ōXĻ,ž:GJŽk+īŠĶhrĪ&‘lō°fU*r98bjšnâMuT… mjH$p ˇ? ‰á+ŗ˛[V_™[xį9ëú˙:Ų‚qmŦ\$ĒT܀ņščÁTžcGJˇd՗4,‹ZÁ‘'˛˜1pŗ}Õ1J㯸Šb’;°Ī |ؑHåpGniÂ×aæugH¸ßä0?A´~ĩ¤YŪĻĄ-û\‚`ĘÜrĮq ûéĢLj„ãuš• J.ĖŪŽEŨ厃ŒĐĢ&ö Š3éAČįƒČãÖĻ@>î5ä4îvķōU‘v‚Į;ģԜƒŒƒÎrMĩˇ§ø‚Öá™&›‡Yc#sV„g$vn”:å[xų;ŒæšÄIĖMVˇia5%ĒÂÁŸ`Ÿ^Ŋ+ĨŽõdpÁƒ˙ŸJΟOĩē Ëi1ū2Ŗ5Ņā[–¸žč|ļ8nIä~&…‰—BÜÔˇFÅÖĄ-¤1”„Č^QôĪz“SUlRXĐĀnHpAžÜ‘Y!oã¸w đ‡.Ē~VL‘Đú:›RÔŖkTŽcä1™gSŽläqZÃ]IJ)ü'NUˇėSˇÆņWaFÛķ(üķYÖ7vú”^}´Š$yûĘsZ°ghŨŪĩĪS†ĻƒÂc˙×Jƒy§cž)‘°2¸ˆĨuFšŽvMEW@‚Š( Š( Š( Š( Š( Š( Š( šÎ)ÔÜI^öålídņļ5,séXĐø‚×QšâŲ2¯ÖŪ=EIކšVTfW ū,đF+ŸšX—R`‘lfÂ:ô8öŽJõœv:¨SR՘^(ŌcšņŲ#$_AŊT`‘?Áũ+âGģ?gŋ”ÆĐšPĖ6īė2}+_ÄÖˇ“Mesk![Û9KD™æN>e§m/Ú,ĩë1”,Ŧrޏe=pGnĩ”¤äŽĪ_ +;ŊôR[\$r0Ė}t?z¯%„Zœ^di‚ĀŒÖē¸láē°[küy‰ŦŖ Ŧ‹¸Ž”ąImš$b¤zZÉģmšŪš–Œã,e}ÅÖSŊ•Qåģ7M§"ēßÃ1ŊĩÔžYmGîî"?ÁūÕrū#ˇPÛqņ†Fę?Î*m3Ɵc„ÚjÖæuo•Ĩ+?ũUŗ‹vhįO•´Í1âM6 ¯Ė"TFHįŒ~Utjí-Šęf’Ü>HWęTķüęŒ'Ð][Īi)2Č˙$x䓑øN×obKb÷‡î’Į=1éÖĄÅTīfäiIÂŖ“žZՍrą’FTˆ7dqõéDzŽ›æyfēeP,˙*uļ§[ZÍ@ĩíŲÚdwa€Iå\ā‘[ii¤Ī#Û8%Ą˜˛ ‘œgޏábŪŦÆUZčfŠã$ƒžœvöõ¤smĮzPjhrŊæ’ –‡ -˜9ĀõONüRŽĄhlŖģY1ŒsÁÜN>ųŦjĐt™Q¨¤YnĢzįĩ8€pĀ{Õn‰Œ%Č |ąŨC X-•P§“ÛükúĐV“sāąÜS‚ŒņƒL*ÁpxöĨČŨË1ŠĘKŠ$Ę/¯ŊGÉ šE#nŨŲĮ­H­÷v‘¸žqéQä&…`Äg'Š6œˇĮĄĻŗ¯z"EVlKzķŒ ¤‰hyRxßõĻīl)•'¸Æ.œS%öä䑌ĐĘųäđz­W#b—š°ōâ–B@FūŽ•ģoĢ\ŗ!RšįkäūUŠį''†ƒüĒäDÕÜāžv­W4Ŗŗ&p‹Fũޤ/âVh¤„ƒĘH0¯F?y!õ?ŌšČŨËųĢænõųÖæ#Ëw{×n´§%pUЉzŠ(¯DÄ(ĸšIŨ€8õ QH3Ū–€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ĩ2GĨniõ Ęyą”ÉôŦęļĸÚÜį¯u“f“gķBzæŗ.īāēÔÄb'ûSQdG˙@k¤žÖŦŠŒĒsČīëUŽ"Y䈎7Š?3k˅åņ3Ē2Kc“Ômn5ģiĸHŧ‹›vŨ  āųƒ~âškieÕ5Yf’Ü ģ–p§cŠęŋZôÁJn-Ž˙ZåuÛ!ovÚĸŠuM ^{n˙č‹OFváęĨ#œÔŽĨ2 1Ëœ1É=:uĒņjī&Œ2€AéīWí<ŊQĖw[— €wgueßč[4žKyˆ¤đN*\:ŧ*ÅĢņiz’4žXŽsĐ×ÎęiŸ-ŖU íÉ^ElÛX\HŽxhČĪZmâNŠuYw6FrGjq|ģŖ+Ø_ŗœ J§ĐsÍʲA$į#°ŲķdŽk¨aŖj‚xĸ‡a!Č"˛Ĩą˛ŗ’AnírÁN×n­y•Ét¤ēč\Ķq`P+åÄgÛųĩ›ļöxēÄíō‘Ôō gčō}ˇJÂŽ%ˆĀrsœ“]tą+ꑁ&Ņ"‚pOc\ŌW‘§4cŒ´ŠúV Ŧsäį}õúķšĮŊ×Âļî5í0me™\Jß$J6°ã͊혭¤Đ•œUõ%Ûąqm"ŠQ,H¨ŨöđáRīVN8ũi¤;dc¨ĖĒ&Å9aԚvžåE#í'OžÜuŦ ʸ7°O ŌäLˆz Ā8#ņ$Õ=>` lõĢĩēI—lo#|°ēįktö˙9§xrįíoRŌIr$l§nĀéJŊÔ.s:|SfúÛ͸ûDå(vämČ$~8§ÚĒ)fŪĖe;ØĀlqíÅD7Hv•éÜQ”Ëķu¯=•bäŽ`žāS ļā9÷¨Û–ߎœfœsü8î:ÖRb[Ę‡ āķČ➠ŠĘœ/N•*A$ŸÆžŒ¤’N2)uÉŖeØsȧŒ¯8ĮōÍSŽeBS‚šŨŽ*č0įVdąĒ›€`¸Ãd4ō¸Į'šĄā’zúS•šŨ–=‰īU{ČĢ* ßw§^jŨģ`pTņĮ Üįo>‚ŦB­cŸ}ŊxĻÚhMčh[>Áōā>3œÖĻ—+K īÁer2;Ö%´§ĪÆĐr;{VļŽĀ­Â€$5ļVšGsVŠëœáEPEPEPEPEPEPEPj†AāfĻ5(É9ëYÕWˆŅ—vĖŽĒ‡$vĒĻåōFAĮņWæÛ!ūđąTĨtlbü+ΊHÕJû2 œVlÁŽQŽAāƒ‘čjé`*ũ뚮ņŒä¨ÍMMŖ;NŊ¤]Crnm#fÔy‹ĘëūéŦĢ-OIĩV‚;‡ˇ‘ĪĪöĸAz‹û˛r }…rú˙‡lŧ@9•*ˁ¯åTĻĨŖ;)Wqķ2>ОSIéqHę˙ŽŖmD”-ēÉ0uúU=Eo´(āļŋ‰Ũ›Ûų KST[RņVb9ŧĸža3cˇĢhRrØëXĒqҚéqdđJĖĻ1ʐFY¸ëY¸Q Įm‘ĢaQO˜w¤3Íg§ÍuwkžOŊÃuÉĮAé\î­ĒŨę÷ždōǝHŅøņZ{)u.xÚi{ēšū”ÛëBāy>až€Šôy-Ŗ{ëK Ãr)CĪPkČtéŪŪū6ļMåÔ¨ķĮ#ųôû;ąuĒ„į lĶבYԏ+ą1¨§ —õ,jZSŲnÚqëÁúW ugqo¨ŲâR‘ĖĖ“c§ĘqĮŊz{ ‘‚Tt<× ãŒÛčIĸ;JŽG@I?įéVâ¤ŦM9$õ!Öô¨5Ŋ1ɑ/mǝBëŨOųīYzuŧp xî~Ávš˙G— :”=ž”Û ]ož)ôä•ųįņ˙č ڜņ,›&RŲܧc§ķ5ĘÛZ3ē ųJÖzū¤‚;U)+L8îđ~ķduP3ÍoéWIĒi°Í4kö…@猜ô#Ø˙ž•…r!Ú5ííZ˛…Ø{&9įŋ­ZđŌš,2˛Ĩē7đÄŖ¯<õæŽjˇ[œ“NîįHŸ*c˙!\ŋ‰d0Š aéÍgEEĪ]ŒdßCžĶüaŖĪa$úŅē’ėnÛm+tņëõŦÍ2{g[ˇXiņĖHeŒ žį“œĩ×ĩŽ‘mĩŖˆēÜĖĄ9ä…íÎ1\îŖã)ôé+‹{K¸LŪhp]WĐ zķ]ŠÁ&ĸŌš\ōgQ§ę*đÃųI™vįî͎ ׎GcV÷ųk$ŽHQü=˙ũuĖę:‡öĩŨš¸røkp2§pÜūžõ^įYÕîy—ėļ@ž0››<Žũđ}+•ÂÚŖxĶfžĄ}q<ĻĮI ×H<Ų[fBÎ:rMi”Ķĩ‹(SŦAÚG&3ˇčGÎøvūKM^i&ŨG0ËJąŖ(ę@NÕwWš°ŽâĘæ‰4s!7Ą†y΍ÆzÔÉŲØ¯a&^ &“4w7B ƒípĄ$2Œ|ã҇>Æļ´›ģËčåšåc‹ų?ŧÜīÆI-ĶÛŊ'š3‚ČĪáū5o _Īp֞uŧ­†]ąČzģã=0:9­és_C6úlļpęvFۄnw/ú‘X֗vÚ$ÆōÖK`ƒ>thÍžäÁöŽ’ÂG{xÃÂ#aō”ôĮ§ˇĨGzU"ÎÂōä\rI8ŧĸĨLŸŧėĖ)uëŲ^9^XöæIc’.‹¸üEh†Đũ{ĶæĶEå´zh \ũ°‚‘šāņĶ‘Y‘[ɤM•uķ*ĻmfōŅ}û@}…sWÃZ)ÄÉÔÖĖ×Rœ¸Ī\gĨ#2RÎ:qŠ€>ĀÃvqĨ Īr8ũ+βeYNÖMã`RI,6ļí<Ŧ‘ÆŋÆĮķÆū ­Ŗ–2cūēˇ4]ە•PŠī@qøZ(Aé}G*v#Ķîíĩe’ŪMˆ&#˜W<­Āũį5ÅęĒ4 m¯mq ŦŅFNÉU›#ąÎkˇ‚>\āŒgۊÎ^ī[˜Õƒ‹ĐŽÁ'§20 9į§–B€A'Ôä 2†>ž”īĄ›ÕâAæ„ M^ŅŋډōĶúVuŋ7JP#‘Z*¸šô“ō@PĩvaRį8kŪö6… +Ō1 (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€L~”ķQŋ\wÅEGhw.ĄČVįbĒ´Čˏ8ôæŦŪĢ+åWŽüU˛;nBö¯6÷f¨fAnōHã\ËÕ00FUjRFÆLą¨$ ƒ:œˇ 1J[DŽęH,xLt÷ŦZö='Ošņ“ĖĀŧÄāĖŠØ¸ĮŖ5ÄxĻv¸Õí,”’Æ× Ŗ<“Â"iS‡4b튁N÷ĻķPĩõĮ?ė¨ūčöКF“šéˇ°Ļ\ Đįw”ĒŲqōąūīČË­z‘´G4ĻäÅÜĸ3ÆčŲpÜuÍszĻŽ‘Ÿ>ÉrĀå㠏jč‹"ÂË÷Fí w$ôךŒĒ&ŠHÜo­jö°ÔšÔâ­Ž$ˇž•å••ÆqŽq]ļ“ĒÄ5ų ‰ŖōŖöÆHü†sēΚ֧íP.ëYd9FŦ­>ėÛjqIbƒk7Ą#–kžŊ.eĄŲ‡ÄrĘĪf{Ėle…~u'Ą9ãŪ°õÁÅög€Ëí•aÁP„ôüĒĩž¨ˇzhkfŨ‘īVzt>•™=ÛˇˆôŽXĢģ‡ĪũsfšT›‰črY]–î|3Ĩ\ČO‘äIũø¸ĪáŌš{‹kī \æGß ĘŦøãą÷é^€z'×5^ęÆ+ˆMŧʲE !äc×ëīXÆrZ2aQÁŨ­Ĩ‹iņ[ë’B“,'|¨ßxŸÃ5ÚŖ+*°}Ãkgļ8Ŧo˛ßO¤_DLr/>d}~•'…I4b’õ*š´]—j›JžBņ’?/ŌļV<‚qÁôĒ:ĩœ“ÛÉ%ŦĻ„”•2c%O¯JŠS´îa=V‡ŸxsOšŋ˛?ņ31}ĄJå' ęF9ĮCšŊgávˇÔa´Õ Žx§FQ+7,Āäcž8­iđĮ4öˇJūd*bŽfÎ׋ąąŠĐÔîn’ŗšÕn+\HD~}ŗšîŨ?éú0‚iJįōëfÖĀ;AfŪZ+7ʧ?6=9­øšX?ĶÆ.ŧ°1*î ĮQĪ^kŪÆâ×X¸X•oËĩ[;ķÎ!ų×A¨] .š+Xđ6Ș9Ā9¨åēąŊ)F)ķuč*jëũš~Û"ÛßÚŠ) wįĄëÛ"ĒI5ŨíĨɂv‚7ûĐÆŖ<'ŠŊũƒŗ§ Žk{¨d;’ī1O†)šÆ˜4SĻ*ËēåÁķNžƒ$ ]wV;-‰åņ\ļöË™+C*K$‡jŠ`zĘĩ´™ml$Š‚đ´…ÃėC9û¸ĀŽZúk™ãī†6YN Üu­Å EqΎûŲ–ŪLĒúŨĪ?€§Iu9ĢGŲ´úíŖļî‚į#üšIîįķ…ä ē+b0­Ā›+…=ņQAĨžø|ëüÆ)Ї8áļôĀĪ\ÕĢ‹oŗ(ģ =´"8Bį…''=ŗÉޏSÖĖâ­YKáBh ŌhpĘã÷Ĩ¤g ØīnžõŊn/´É|ší7›nøų•”gõäœæ.|b,RK 2ģ¸židŽ0ßęÁ%Žā=Ī­TMņŽģšîęhGī˜~õ››øbŒãĻõ†¯§ęۘäæA”Á䁒čqWd nAār9ŽEŦ|Q§Éõíŧ­¨%/ŨíĢ(įšßŌĩk}^ŅŽ-žm§kŖ“Ŋ[ĐūŧûW™V“ƒŗ6ŽĻ„YĘī˙gĄ>ĩJ×|Ū?x–Ũd€Ûˆæp^…šĪ|í­(Ėp>PąĪ5‹¤ŪÜĮâģĨŠÖ+ΐÉ0S†;síŠtU¤R6ےE cU6–  ČkpÅIP c“žã×ÚŽéúüw|r˛˛—PpŨy­û6ˇšåį0Ą›nß4 ą_Jãu&×Ãv×L—/äģn…äGūÆ{ä“ZÖŖĢŖz2NjCõMA.4;Ø× ˛+(Īn+ĒŅåiü9§Í.ß6[hŲÎIÉ*3^}oiyĢĖ4ë\ˆÜūō\|¨Įķ¯M†m-#†+j#@{(Æ×*Ԍw"’P!eū%`@銒5'džŊzS5ší×S “b˜ēŸJN6Չc<ÃbIĩ4nØdfn‡ˇŗâļ™öÜ>nŖđæ´4…1Ūęā€Ī|Žĩ؃OŸ^ĮwĒ6¨ĸŠõ BŠ( Š( Š( Š( Š( Š( Š( Ô¸J`ƒSÔOÖ˛­đ.Î×Q´āõ$ā Ĩ?Ī‚IõíV.™š]ģF3Ū‚ŠßK ´3Ģ–Ú=;šķc+3[>âA=}*FäŽLuÍHĖ.#,ŧĢ/ĩ ŒÍō€¸ JrwÔ¸”frc,§“ÂäWžŨŨĩÆŊŠÜåÎÉ<…Úqƒ‡$×gĢj0évō^ÜįʈnÚ:“ØĊāãŠo#tɲYĨu8ÜKsīÍo…Ũ˨í’ ˙1mĨ8ĮŊ*HėT3áAā~Ōb<ąËdÔÔ{\ēĢą 3č§ĩz'"ÜcČĶë1@\ˆáA2(4œķŸAũjôž8ƒĖKÜzUKTķnŽn°ɂ t šĪęjÚĘË6J §ĻGN•Öčģô)Īšíyo"aNz×-,oe›w€ÄÄá÷rũĪZė/mžâØũĐáw+z0ÜՍ"Ëû7NŽŅpĖ>fsÉĢ &NŅĪÉ隘(;J›Ŋ…qˆæB@ÃéL{¸í˙y<Ģ=2Ũh/†8V<ã=*Ļ‚ļú–ĢŠIyHĀ”A ųc@Jđ;r3øŠÚ>iXnM+˜†āøŠå Ķ kv\rdÚŖ“ƒŒsÆkbÚÎ{Ģo˛ß\O4D€ņɌ\â˛4YáŌoî띭Ũ(ČĮNŲ8 ū5°uë-ŦČeG÷ŠĄ=ųÁīÚģ= ¨Ír]ŗÆ:D6đGykClŠä2Æ>áÎU¯<_ ęŲZŧ;Ë1,ŗEÕPõNŧҝjmŽhŌØÛ#FKŠrb란ץü+ŠŗL#‘#,ėvÂÁąģ×ŌĻĸi^ÅĶ”nz„WIĒ“-Ŗ´¨¤)Ķ=Æ{Õ×[MRÅã–$–&wËzįë\Ļ“Šjw~ŽūÍkžQ˛&“Œęką˛ûDr4Ā›AY"9F0cĮOzp“{„ÚåĐæī<0ĸ8Ŗˇē“cĘąĸM‚'ÔÖ‘đ–›{lĢu%Ë˸yFU*0pŠ4 %ė^zf‘Ũ™Jŋr;t?•Gcåjēa’čy‹#Čwį•!ˆcžMjžÎ:$c99čAo‰-cŗt´Fû:yr§Ú4ąįŽ:nqĪzĨâßJ|1%§šmd–äGtĖĨ^(Ī\^ČÍlŲ[\Øi/æ¸ąÁŪÎrʸīß§|öčjÆģ¤ÅâmįI™Ķí)xނޙưĮcŒÂ†ĨŠĪ8$îyW…íÖËÄČ>uMĖqԎpN õ#U™iÉs‚™ūĐW ĸiö÷šMŊ­Ä‡ív°Ha) zä~đéPéwĒ õŧsė÷˛…ëZÉÉ{Ņ:ãJ3…™ę2YÛŪ°’tg|åw7Ķæ­4Zä‰Už"F ÷&ãņާūË{{xIIÜ ņÎ 5ČøÉžĶâÛ(“&7%OŨÉ>˜įÚĨĪÚÅŜŪÍÁęwˇ go%Ė€íw0'đ÷ĒIŠŖéĶjÃĮ,ĸFˇVÃāŒž\ž•ŦëRF4ÛŠô鯕5Č"N p 6û‘‘ĪozéŽīlõ¯ęHLļÆRŧüŊAŖĖ“Bækat[ø¯ėÅĖQŧ`3)Lƒ‚=)5û;{ö#ą•H†røųqīšÉŅ~Ņ ĩĸŠša$éŌ%oīzc{æēÛ]: ôíFđË"œĢˇĘ‘û¨?ÖēãdŦ´ų5ęgh>DbX¤Ũíu,-Áđ'žA{ĶI gî'ĻęåõŨ~!Ŧ5֏ip͍Û; žTáGqžH=kĸŠō ąnmŅåiĸ Q“ˇųW%J/ŸN§+nÜĖÜˆŪIJĸ ,xĮUŽį\?ņ.(­˙]ČŊ=Į\×AoϤ–Ęב^2rúTÖPÃenļĐB#r@ĪrrkĸhĮVa*č†éöˇ°“q2ŧŽŲ`ŖåSíK§ĀŅßŪąd…H9ī‚ O—r Œ|Õ<æ‘p85´SĶąĪ5ܜRŌ Zč$(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ Dø-ƒéRž•0ŽøŦĒü#EKāŒ.1õŦ-YæÂâ(ecŅŊŋEn^€G$Žx÷Ŧ× (šĄ=ž•ᤓ49Ŋ%ŅŽ4×mÂŊe U‹`}@ŖråUBXõŠM˛DæhÕ <āZĮÖĩôŊ>{ģ–@Ę N =€•;slkaë¨úĨŨΙ-Āļ´Ļá¤8ÉÁÂã͟é\pÔ¤…ēW3"ޝĄĢöŅ ŨßŗË{8EfųTg!qéŌ¨Ím(˜H˛˛ĢļaČÎz0ŽętųQ3’–…„玕"d™ķĄžaéÅEŋpvÁ¸=jĄ&ŌåZ{HˇoÚ&„õ;LdÖ ˇŒ…Ž1ēgnāŽ5˛ÚÆ|ĸi͟&h Ĩĸ?SŸëW#“œäķĶŠĨdžeŽáÉiånzōÄsū{UˆŽ%ÁõÃ×% [Rט†ÜÄIŊ3YšT’N×R\¨Wy›rt\ŒZ2ŠP%¸úņKMŒIˏr×/Œũk:†ąBÜ]A žLäŽ9*H#>ĸ¨\ivɋL›Ž?+øÎ…hŨíĀ0²Iģį’Ē;ŌÁg4ēKĻŨæ/%vǎcīIļ•î\ZŲŖžŅ~ß´˛ę4e*ÜĮcéŪē¸|FąĘ"ģ´–&ū6(‡'į§ĨQōV-ZË, HŌ™d~ Ī<ŸÎŦ¤É=ÍÕÔX0¨Hãoī’OëŠĘTã'vtFĢ‚,iK3Ą2ųkÆáä÷§ÂUc"â(ŽĶ÷xŽPA'‚:W= ˜4-Zl|î!ļ΍f,ߞÜWĄZCöb] tÆ*\!Z;4?xŽĖY”ŨŨÍqu yėXžnmŊˇ„ŠĐĶî4ۉ$’ßBũøųDlãË8qœøÜņAƒ÷€ã<{VLvÍEö(Ô˛ĪÉËßéúĶR’zŗ§ŲBJö:+NÚŨÖÚ;4ŗ•są?Ũ5ĪęžĐĻw‹įÁ"Ŗ\yQ—qiŠosuŠö[ˆZ26a’ØåŗėIüę;f+X¯ŦužōkrŠ*<î0 sÅií­ĄJ)j‰4ûYĸžÖėĐií œå2pŦG~3Ítj6ŅC3’2…‘˛ƒœ ‘øÕ;ioķ\ÄņĀ×VheI“qĘä7qK6›v‘YËz~Ī(’%÷m.Üt&š#‰ŠÜ–Ų=õİÅpĸ)"žíV+d †“ŽIôęiút0Ø]Mgoû¨ŦÖã?xc?í~ĩ$qŧW>{I-åĘDË—€'“3DQ¤–QÚŨĸČĘx*}AíŠĘ¤ũŖ]‚ÖÔŋ+Ëgum.Į’ĐŽĮ3ą˛0Äu#¯¯jËÕį›HYoą’ŪDMš.Al€î*ŽĐęÛMwåŗ­ŧ7™ ũ͎ cŒŸĨ]ŅíĄÔ,ĊZæF&LŒũHöĮōÅ]*Ww`”oī|+wEąPž| 6s’á€%īŸéWüC§ŨͤÜ˙fF†O$ˆŅxfÉų†:ūĩsļĐÜč~#žaIc1n‰ ”Äe‰ãčIˆŽ§JÔåģží&[}ŋģ 9Žq]iĩčK•ôžūã‘T$=čŗÔ~§Ú™ŦÛ­¯üLc‘üÕ 7 >ãÍPŌ’õURFÄ<y$§ŸĮuyÜÍYjąK6‹q´2˛2ŠœãŠķ•ŽÆR2J×ņį%ËäĄäāúרß9Ú ˇ¨Õåz۟ĄâũF9|Å(ąĒēu^3ũJę¡'cD´'ŸtD•@ <{˙œÖ{ŧk¸ ~veÃôĢwŨŠē´kģp1įÄ>`=ÅgA<3ĘŪS¨$đßNkļÍ=L\Hås1Fīö{ƒŠ–ĮMąÔu8āž6Uˇ’Wˆ;TĐ~t饐(…9ų—ŊMičļēŒ0%ė0'Ųĩ ÖÅČų•rBãëÉ˙õTVšŒ|ÍhĶr‘‘`đ[[ũēG,Фún&ž&T•€RTŽO|Sbŗ{T˜—4ˆëŽ˜r(UĮ$œ7 ßįáŦQ2Z‘Í2dÉ3mybĮūxŦ{ī!ԉb5bfpGĘĒ}GcŌŦ\ÜÃ=âî*lâ‘wƒŅÛĻ=ĀëøTĢjĶŲ€GīoĨiKzFŖ§č?:šžîįf*WoĄ _ĩ˛Į$oqu89¡ĶŌŦůČęÅŦŽW ­S¸‘žVP G‘Į§Y$ÆÁÆ;TōÛ@›ģēE›ŊDŪN Íŋ–b‘\;˛šÃ=i&§l!U„Iå …S`zöõĒ4Ākö Ų¸ØF8*TäWĻ ĒŒ0€Š/ŠpĨĖĩ˜aüëĄĐ|In-„2 wĀ€`FNW§čs\Ĩú„š´ō„Ÿh„".HbAųHõäū•Øé÷ze•ÅÕÄkö؊Áolã’GŽXŸÂ°ŠęčĪ–„šåÍŖÍm2>žr^ĩV)#–Ö[¨Ą.3°wīĮäkvo iזV:dņa!ˆ™F\Å·ĩ é÷wˇĪlŒs†8Î=yĢ–M]Tq1ĩ™bâđī-œMōn\Ž3ũ `ëOö¸lψ|¨ę͟ŧOĮøUËM+RMZ eM‹‘Ûœ ŒüÃÛ UCÃ3ŲëP=Čtõ}æ` D#.#‘ŒôúRTek˛Ēb#ËeŠŅÎÉ-¤—R?Ųe´ąr )ĮCĶ×éQGĒ5ü­”K[Iķg$’}€úúįÚĻš†ÛReԑĉ+,’ˆÛîFzSüꎧ§GkĒŲ[éÆä<C…O`N; Ÿ^•Ī 5““2Œáŗ/ËvU!ûT>CG÷fŪLRÁRŨTž1ŸÎ´!ˇŒÜNËdrYøüÁäUYVúŲ1$da´Ŋ°É#ŨNōČĻ[ŦKp :<ĨĮ$Œ~dbĒTáŗ%Ån™e÷ęÖ˛ÛÛ#EfęUîd,=įVl´ë-=_ėáüĮÃK#9%ĪŠĻ1Ôf‘‘"Š'UÜÆVÜÛ{Ŗ¯įP_čw—6é*^Ktāå Ī–Ž=|̓Š÷be'î`xŠ˙Îņšš{oŦŗrí88Āę8ü3W´ûėÉf3,ŋŊpķ<ɰô20?ĻĢiF9ĩ-FxãōĖe!nŌŋ.Y}š5 HhŪ7`D€‚3ūČĒŠ+JÆ~Ķ[ØŨˇ¸Kȟ1”u8+qQÁVĖfÚųuu„‰í–xTäH˜Æ}Ûkd~^õ™Ĩ\ļ›ŧÁČ*Ío2%r9=3ß­j_jža@‘ũžk‚C3ŒãŒpœū“R™Ŋ6¤ĩ2ū(jđÛÁĸÚī˜Ü2gī(/įģôŅč–öÆš$BÄü2žŋ0č=GôŦ[ čzÔ÷”ˇŌŖD’&'k3“ŸēĄŦ-OĒęž*ēÔ­f’WE呸ĸįī/9É'B\ąQƒØĘi¸ŊoiŠĨĨ,ŗūęUQÎūĄąÔᜟaYXÃ6œQVD¸AēE z™ĘēgĄ•ÔxsZ_ŗjWˇī—P äAîÚzƒŠåΘÍ}öô–hŽefrÉ'žNAĪ•\ĨĖĩÜĨ%Ė×At+ã>“r‘˛UœŊķŊvūqkã#Íö‹ÜEÚÜmôëúW ĨÆËs$lU]į% † ŒtĪ­vš{|ec1)¸C4{ã ‚jdŨŌ"ŦĻŲéF`_c`ôĒβš%´7Äæ}ŒËÉL÷Į§e‰F.NFz Ŗ¨AmĒ^Gg:AnĖyÁųˆųkz¯–<´•ÕöĪypn$™–Ųņ˛F'=:ū•§eÂ8ôlqQHÂyÚ p{ĶôđDn[ŠnÕæaeÍ]\Rˇ+ąxRŌ ZöĖBŠ( Š( Š( Š( Š( Š( ƒČĸŠJēԕ °ßŽøŦk|#FuüQ](…ŗ÷ƒŊАGōĒW‚NdnĮōõĢz€ØVRíé´ÍfŪž`.<ā^Z‘ĨŽS‘•œČųá¸ĩĀY™5ę‡`_ß*=°Ŗ8ŽâZæ%a‡‹$gЌƒ^zŗ˙gx¯VElΗ@ŖĻ~•Ũ„øõ-čG‹1åsĶ€OƨjŌ5eo´XDO=標Rc÷éŪ§ÜœWĢgš„es€Öükan­iwv¯,Š !|įqÁũ3]Ŧļ†;:Ô¤Ņžũ_К§3ũŗÄē|*™KxŪåĪû_uGū…ųTÖzQ˛Ô5 ~Õ$Ÿi“ĖÚĮåNŋãúW‹˜T|éÔcĨÎ^Ž{/ß]›'ĩĶ]Är9åB8oĊËx ĮĘÃēļ[lgi$vúW¤øŽÖ;2ÚÖā |۔㨠e›ôS\áËøįŧˇžō>ĐęĒŽF<~•ÕBĨí:ûHÚˇ'ĸÆĢˆb…zGš°Iõ$Z÷Q}ŽęhܒļV…Wš˙åQ_ø`iˇļĨãMoqt Ģ›×9Ģ:Ū“ŠjēļĻļ?$H‘°‘đrĒ8ÜÖĩ#ûÅjO–›ķ2%ŌuDŅÆ˛ĐŠąûį ķí'ãŌĢÛi÷wļōÜ[Z<ļą’E_­M{?Š-´ÅŅgŠW´\/ĘĄžQĐgŌ?ÅzށĻ9Ŧ•–h¤Œđ~Ŋk)*Ē7H”Ą}ÆhéëÚnÂų†RĀöU5é–sÅ4FI AüëđƑũŠ3Ü,’Ã0ˆã“%‰ÉÆ{WIhĶiZ¸ļ¸—ÍIÔ´sŒ°<Ęĸq–“:0î­=ËōÜġ2[´e)#ƒUŽ Yš[yˆ0¸ÜĢØÕëØ|ôŪ¸WÎF}k/Qyƒ%Ė3[1Ŗô4›ęޏĨtW:|zMÔsėŽkIœˇ¨&=1ėJԈ}§Ä6P Bpp:“ō¯õüĢmrßW6ÚT ëpŌ _r*ĢĪëÅm聤ÖõIÎ ŽČ”ä02ô.jVĩ0šŠZŒė˛ķ†Ā#Ž˙8ũjŊÆĢklg¸Œ ëƒî+XÕÔÜ-žpI$đ°`AČ ęM?Nĩ‡Oŗ‘­ã,įæl’ĖįˇÖē*âš_*.vŖÍ#DjÚkܰK‹qpØŨ’2ÃПʴč0NKncÃ¨>˙ZÃÃpT"yĖŐ|§=âåUgŊ¸ŌWíą{4*܌˛ÆTúwĮĩDkČ~É=Ļ[{;IfUŠ .įuLôΝ^ę; s5Â^]3FH‚2p"SԟöąO˜‰¯cĩ؍K!ęĨŨéÉüĒrîdŌŧ›dS5Ō´"BØĀÛÉüÕUŸ5—B{Éã›ËƋIŗvļˆíyÚ6bĮ8ãc­jK¯] GēDŌeĸ˛H1՗<8ĢZ-šXۘ#…ĄˇŒ*Ą$&?‹ĻĄÔm_WŅníd†hXŗŧėoČ9xĩB¤¤^–ąąjŅ_Į§j )@ÛP ­¸w˙=…M¸ÛßĢ̞O…Áā$°<­s~k¸tae{G$LXė äÄûõ­ÍWZˇĶŖš9qįųbĢ!*NN?ņė~U0•™É?uØÂ‹d“j3Âûbšá¤ŒįŒOĶ9ü*ËÍe2f’æIɊ(ķÆqȨ?ŗ^8-Ú@Ä~ņŖäÄÄîŖĄÁbô5ORŸĘÔlėĨÔ]ūČĨÚe]§ÍPG§Ję<5ĒÚÛ]-ä°É š!‚9ļüĄ™˛Ėۃ…įžõGUļūОÉZ܈D…C¸û˛tLîäÖŪ›t—Víiq”ĘÅn:čs×˙Õ[:œÉ1Ô¤ŦâwĄŖ’áō8čjĩõ„—‘G>Ÿ:Á}Ø˛˛äČ%î8•sžŊ:\ŋŲWû>qlėsƒĪîĪô5ÖĀpÛÔ ¤äVôĻĻšdxõi¸;–ē•ĖW2ézœ%gUiRr˛&IÎ{bˇôÅ n@ ääči]b-ēTF;vî#ĩMlĒŦá@ ‘€;qP¨BŖ(˜ÎW‹BŠAK^ˆQEQEQEQEQEQEQE 5ŋ=ņRg4Æ"˛Ŧ›ŽƒFVĸvË9Ø3¸āātĒ7Š ĀÂ9v—a}kZæŌÚčĒ]Æŗc;U‡ô¨Ī‡ô†_ųĀ>‹å\pÃĘN÷6§Íaį<“īķØĒŋ(<î?RNk‚°ĩxĪX<´žy$žAČÜxĸĘ 5ÖM.Iųĸ)-#īÛÅhˆËâA@o’2qŒÖģ(Ō”gvtoē°¸Zylåéč*ę6‹7'Ļ+5#xgą\1ÁĨ_Y•ƒcn1]×lÁFĖÅ{ßėĶ­ęæ).%ŽŨcŒs€2ô,ÖĖļéŠiRĀKÄ."Á~ëšÍY—GņE8Ûe¨ídsŅd>™ãŸjšĒjWz~§§Am§5ĖąYe_ųgoķÚŧ0&“_aXĶw§qËI\‡Tņv:wÚ%B&ķk^ŽĒŨø{מ!ŋš{ČŌ-.[{ŖŽ@=F}+ĶæŅŦf–[†ˇC$ ‡ld‘ĐĶ&ąlqĻĖcnĐ8§ZÜÍä-ĀPŒ¯œa€āäņ¸zt­Û’  88¯&Ĩ9S—+•äsēēHtéÚ7"h€–2!îĘē=oEk‹}ZØm˜*4čŖ;×ÔUúXš˜Æp å—bũ[üëŅ!am 0“Ā@ z čÂGšéœøúŽ‹‰ČÉc đ"nYĀ ĩ€#ҁīØūžÆ,čÖ÷l†â7)ȑ{?Ô÷÷ĒZŒúeŌ5ǝØåo”<ļ'îũį„ÖeČšqŪDʓÅģi~™'ãĶN§u+,DoÔí^U“xhČÚØõn!‡zÆŌõ(5;Rņm;XĒ}ųô­˜ŽdŠMŽgŠįԋ‹ŗ&´‚–Ŋ# ĸŠ(ĸŠ(ĸŠ(3KQHøš5îŲŠ(hĸŠ(ĸŠ*6Œōr éÍIEϜSĒ2Ą‰ âĨ°!ŸėųĘTōw÷Î+:įÄV–ą‚ŅĪ–áĘ+ŧú ÕĢŨ:Öxöĩŧgw€üëŸWūÍŊM˙ŋˇf*’ģ|đžË~€Ņ$ūÉqŲĪx„ÉgŖųL˙9{—ĪoåŠķ›šįąņŨûK Ã$Ō+āŽT?*õyn@ļWgŨŨEy¯Ž7A­ŲjË÷dC‚ŪS‘úųVÉØëäĐčžÔ›@q’y™ĢjâUįŽ5ÍĮz%„6Tq€MmZē´{|ĪēpĮ­k} Zŗ-Ũ[[jMoxĒņČģYOđŦ7QžŌî.ínŧ˝>Ü —E#ŒúŽ:ֆđ‚3ŽũĢ>ßNmjŪųĸž’Ņ–ø2ŧgī*(]§Û$×&2ʝúšŌV‘6ĨĢ›J=*ÚÜËíģbåN@$øöĪ#­TˇOŗëŧ;N#¸Üp}UO–’ļ—-ÍåžeŗûL‹,XÉ@ ¯â9áLŌ š oY2\¤ë3¤ąĘ~F\øW&~ųŊt’E}e‰ņ&‹ĩXæ’1Œ|ĸŸĄ+ąŋČÜ Ü‡ëķU‹…ķŧKaĀA3ܝ ŸzĢáŸų,„€ZI3Ÿ÷ÍvĘî¨)~ęÆÔ&NĐ?ČņRũ¯Ã×x$•Œ2 úĨj;0$ށ×ÖĢÜFg‚HdŖ>†ļkŖ2†éœ^ž]ŽŽ4ß4Į îŲU‡9‡ãÅwvđĮēGFƒ Š\.•i7Ø­H?Ŋ~F˙iOB}ëŽŌõo­‘”íu4m÷“ž„}s\”¤•ât׆ēåË+|¸ĀĒō•t?0 Ž3SpkųĪ .ršČä ×RZ\Æ;”B˜ČáH?/A.ŸÅW æŦ\Kų— ĒŖ’OIu[ĒMÄC# îíKĖÚQV(ę:4’ĀŅĒ9ĪEQĩÕŽ4YZŪņϚ&9IG%zúWVXąc>īĶkšŊԟÄwĪocšD'lķ¸Â'¨§Š%Ë%y"¨šSvQ4fŌæžŸėV› ”cš:ú?:ëZšØÆŅn‰“nĖ1ΧOūĩaAĸA¤Ėe*‘“Fŀô §§ā{ÖĄŽ%Œ>ĄxHGʃžƒšŽxSQ“l픛HĮŊԨۯ’ ¤ąšJ~ØĢŗZĮmИ¯$ §¸$Í´ģ)Îpp>@ry­ u{}RHūędۈĒB ú÷ĒūmŅEšá‘7”6ܲŒnčmjˇØčâš9ãk((TäŠIwˇÛĮŸÔW-Ą^}šúú)BÃŧyũؘį }@Ÿ?‰/ŅZ{M.6ļUŪĖōáØ֑âŌ9jR•Ëš´ÛÛMq köŲŅVQÁÃķ&¨kW‰ai—émæ.Örqą§šéTíīŽu}oNģē!":G?*•`úąĪéZ§’u{i.6Ė üc9^įčqXNŖi.X;Û-¸‰ÕãeQŌ7ôĒīi:ķîzÕĢũ:ÖëIˆTJpŅŧGk{ę8üECŧļ÷ Öųʒ‘÷“üW{×2ÕĪĖæ|A šŊž ģöG¸8÷ËČâ6%{RŽßŪ){)-ŽĄÛ,ėÉ5Öd ôÉ$ķīÍXĶ#e˛š@RW<Æ^W?¨Ĩ'ÔĻŌÍ]KŠhŖÔî&{‚Íŧ}!¸ōsÔįŪˇä“åÜPž0ečūdVcœ’ŲŒ,A´ãõ?^wÚߘûW‰VNsÔŌVš™Ē8gąˆ6Ų^ę&_l0É#ĶükŅå˜G"üŋ0{ ķŨP!Ķg•cųãRęGŪČįúWsâæÖŪ`r˛¨`{cŽĖ’Ņœ8čˇ(ļZYRî&†eRŒ¸ÃĩËŨÅ´ÂÂėI.A1J˙ƙî{‘ßë[äŒʓܞE–Qj–†)Į î×Ē7b=벤N:rörē9i ŸKš–ĒYdÂMn%Sëî=}+ļ͘<×[`ä+˜‹DÔ..”\˛C đYdÜ_č1ĮëÖēËhRü¸Ô*€rRĻÕKąâĒFKMË"Š(Žķˆ(ĸŠ(ĸŠ(ĸŠĪš“Ŋ”yë§ōÛū5~˛n؏鋨ÁpXëZ¤bŅE!8=*„-€į‘Ō–€ (ĸ€ LPj9%Hc2Hę¨:ŗKp*j„žsĮ5Ëjv‹x&ķf“s F… {ïáZ×ڜ×ųOĶZéTįÍsą?Ū˛.­5‘ ĪqwejąŠvÚĨĀ˙€5qÎŠ\ļÔɞââÃO/}v˛L €āS\7‹uų5ĢX,ÖEüՕ‡'?Η\ÕåÕ¤šōy™Åŧ @p Ūßąfē“ė˛,ˆŒō0]ÄpĒ?ŠÉŦ§RÚ#Ч ÅÜŲŌ/R{4ā,¨ØuéČ­ģﴜČīˆ›ũbŽr=kÎâKģV3C–ÎK/9"ē]RŠâ5ŽFĘ s†Á­ŠÍ= *SžĮKyĢÜyJ!Œ*ŒåģđŠ<¯[ !ŦŠ?Ú"Š[ϐ¯ĘŲ$õüEfjËöY&UŪęŖ#pŨŒwüĢwm­ŋƒĘX’g˛‰ R7ႏ×8Ŧ1īÜH(Ķqo¨hÖͤčÃ%ŽŽ\ųīz—n˜ė9ūuá–wšõˍãp…qЄā‘ëÉĮáMņ5Ôvē‰K)Ũu ¸‚LåžXŖ˙Ž+ĶQ¸ŌáXíÕV"'Ü}k< ŪCÅI+$u௝âØki’3‘ķßūTôßŖZ€ûF7QšÎĐîÄ&ą}(cæ9Œ‘×1üÉ­=!|ģ;x•ÃD#P8įķ­īzÅō#D3¤ĪÂĀīM˧h*ŸĨ6úōÖÂŲînfB™f=žŸ‰Åy†ŊãY5ĢxâI­a‡2eN „ƒū}kvŌw3J۝~ŸļËQŧąT*IšļÖÉĪëúSoôI~Ú5>g‚ėŪ`đ˙Z­ms/‹t˜ĩKUUŋļ\đôO¯\V–¨´ĘĐĢ/˜ƒ&78aėEpŋv\ÖĐô)ÚpˇR…ˇŠu ižÚúÃį^wDx+ëƒK?•ŠĨ•”ŽÁžv“Œ§jĐŊŽi_ËšÎØ‚ŗy¸?†+Z:UĨŖÛÄåîäĀP™lפ<…ėâĩ3 įPģio§t‘Ī"0YŠöz×GŖx{N"¤Ŋ’î܈Š8ƒĮŋ"ŖđƇ5ĢŽŖų¸ũÚg”§ß§ëW5c&ˆ’jI–ōČ<Ȝ‘ąÎFWŧd~5\’܏iŖĩ–Ĩ>œÎ%_2“¸!Ά?•Rąž‚×LžˇŠáMÃ\Iōžä’AéŠĐ”ާa ôŅN¨J8įø‘‡qëXÖZ]æ“ĨLíŊĮ™nZD“ĸ`“ĮáųqQ&ėtŌ‰ŋĢ:Mę Uiåŗ†-‘Ī˙ZŠŪÜ­Ķ,jH@T‘ fAžøĒZZŪ]Á ĨÄŖÎ€€;ļļAÉ'Žséü"ˇôØŖ‚æEâV_8ōíƒ˙ëĸ:šÉ(̐ [‘ĒylËö†tĐĀõÚ ãđôúSWJÄūDw Ę xäHT+zãԌãņ­ ÄMs€āąōŲ‡#,ˇB?wŲ&¸šq%Ō• Û#ƒųįŠŠ+šŗ>ÚÚ;ĨÕ-¤_ŗj“[…hWdęqČõî+™›ÄâÚGˇĩ°ÄŒJÉĒwué×Ŋu2[]j7^jΰŦ)û˛Ŗ˜fæũ“ßÔfļtĢ‹kÉwÍißDÛ&,ƒrļ;B:RŠww"S”=å­ÎNî`ˇFŋˇhü¸áō6ė,NŌž˙Z†Í¯ĩ(e•  ,~s ,8šÕÖnįģÔĩ¸ĘâĒ2y<Ŗ˙&ąžŌ--ī-bF?gˇhŧĪî’ä(˙ĮDãgd`ęĘ*ĪŠĨl?⒱`Nä’s‚A8ĀãЌ{֜I-üoŽbŋŗ—å‘GFĮà dUKIm´Ø,w‡Č#Ÿ”8ūŸĘˇ\Í(ˆĢ6˙īņüúŠ)Â(å’r9ĐôÛŠ‰š)#1šZ+‰ 롞A÷Ŧ–KÔ/tåŪĐy…ĶqÉÁ¯zė5TŠ=dJ…ˇO× ę;p *žËYŲ~ŅRŸē<Åūu.|“ŋBŠÉÄã2`šūXĐf9#š2F9ãü tÚSKĒx†Ū(ö˜í¤É'eĀĀüɨu}Áté/-#ĩŗŖ¯ō˛†ŋ×đŦ>F§UâŽCŽ„’ßũj*VŧG_?4rŅŧŨWXĪk˛Ī8Úĩuā‘Įļ*”Ņ;_y›Eō‚ūšĒā¯Ô€úŅLž@Æ:ķÅyU~-ŠRN ‘4k‚’.å9ëĶŌĢxZŋĩĶĸ†ë÷‘ĘŽ–Ķ(ÉBƒ#đĢ7 ‰>ö=õŠ<,ę_[–YVÎÎ9PĀüÍ]+'b11Ŋ>cOŋŽëOŗž`"¸¸EũÛq†ĮOĐÖ´p˛ƒČéÅsZ­œúˆĩžÜ[N’+žüÃN*ö‡Š_^ÜI%Ô) ŗ {œ1aüYôŽøÕiEHésaˇf=ĮpĪ­Z…‹)$c$Õ/´%ĖĄcpB>QÎ?—įWŖ?/LQNJSĐįž‹RZ(Wa˜QEQEQE“vŸņQižÎ?ô_øV¨éYWn‰4Äîaœū^_øÖŽ*^ā-5€a‚2Zu@5T( ĐS¨ĸ€ (ĸ€ÕymyÍųŅyGõĢ4”€Ša„:ņ֞҈4[y$ģRŌ2Bdtúץ\ą ÅyŒJ7Š^nCÅEĮBrÃķĒm¨6Žŧ,SzœōØÅkkpŌ(gPˆú›ŸŽ4ûíGU[]=V|äc…ô'ĶŽ*ū­w5ŧwv+ŋĪfRŧķÜsĮ'$WĻøCÃļú-’ Ķ ĪܞŋÖ¸ãynwÖ¨Ą#;Eøs§ŲŲFڛĩõÆrŲ8Aė^×<¤ë‘(xŧą€{qĩ€ė­tŌ„P[~G =*"ņķcšėĨ|Ōzžn˙ ¯­e&ßÄ TđCÞ?:ˇkĸBÖ/3HÍ}öslüđޘãꠏ¨ŽāÎğ›ŖuŽ/ĉ-†ŋe{dŦíuē)Ą‚0īüvŖ(7ØéÃĘNIz,õ›ũJûQļļyū|IŊ°á°2ĩ1Ќ$—O¸‰Q°X¯ Ōēë)5]UAŨĐdĸņI|ĶÜĪŸŧŸ9÷ˇ¨Aũ3ŠĒUyi* sÔv§gũ™ā—ˇÁb –_ãfaœsĪzÍĶŧUh!•0:6͌~#­iÜ4˛ë6V æ;tķc#$đ?JÕße|Øá;qfP÷5ž—{•YZJ(ķĪxŌĪU°šŌĄ‚V,@ķ æ¸kÉį›hˇPöŋ•uZ厙âĘt„‘ķH~énäJ’ûáÍôvĻk+´ēełĐzÕķ.c–­)ö5>\´S_}ĒBāÔķ]ŪĢĸézÄâb|ģ qį@Ø=8ú÷¯%ĐėU.NĒ#iōːˇü:ÕŨ^×ūÉ! w<—fO:7Û´tÆ9Ģí&‘Ŧ)ķC™t;éŧ5)´H†­pĘ?é˜Î~´Xč–s iŽ姝rÕÆXxÛR†Ô#Ɨ%:ĖGĖGn2:WKe&­¨X Ø/mUY ¯—f>ܚŅVŒwV 2ĖĪrŪã5“¨ĸŪÛ´w(‘AÁāÃšÉ˛Ô..Ŧc{f(ã`@Øķî=…_ŗÕt{TK;[…‘ąšTąbOsÚˇRēšB{ĩū˞KŽö“s(A“waŽ ŽĩVk¨ĩgŽĘÎPęüÍ"ö_îū=? ’˙QkhîHo)I^āãũΓNŗ¸Ōâˆų˜Ū'šš”œø'aU$íÔîÂIØąegr˛ ėŲ%œFĀ˙/õÍZûo˛‘&dXķôbúæŦXC$6ÄÜå76?ŧFOęM>`ī´äą8ԚPIĢ›šš2;™­ °šYwĸ*ėTdđA¨Ģq0™#‘Xíu 8įĨSˇ–9beĘI(9ęŦ*ÜNv•āŌ´ĐÆwz2ˇÚáūŨ–߹ȎUaÆüeú€A÷ÅD—RÁs¯,ŽaēV9Ũ‡šÅšXŽ Ä,Jģ2HƒæĪU?×ņĢ"öâ]ĘÎũ.`ŧ8<’1SøŒ~9¨-ãŨy¨Č?ŋ ŧôŠÍļėqN<ŽÄŪ_čņ—šˇ’ķËŧčąĘ’Hvė;Ō˙hjˇ†úęXŦ Y„b$MĖā¸^Oâ:¯ŠÛŨÜi“VuÃĒˇ’ŋˆûMNËÄPŨXõr(ÎG–Ė?Ŗk7+nGBƟikk§…†0.c™˛woSŽsíƒøŌ’ßj\¨ÛœíÅdé Ŧ[j7K¨e‘ãÍ$åxņü…kš2Æ1YÉëa5}ˆ,ÕŽ4;ÛyĘVx˛G`HŌŦøH‹™onՀ¤zān'õ•VĶ<Åšģ‰‚°ûCüžģ°­]đ¤vúHŒÄĖw6O9J†ũ֍iˇËb˙‰á[ Āųnĸm¤°KĻŲĨģ4æYYq cÃú=}ûĶõh^mņqĖiæÜí!ŋĨCo.ؔ†Ü¸ëž?Ī5…Uŗ:čEJ-"ŨĘÆHãŒRøzQ-öŦĒ *@ëō Ĩ5Ā–QÁ äUĪ Š}åØPEÅĶHė0ŋĐÔĶwņ)ƚGB’`}æS̓ũjÔr Ž€Œ÷z ĻKė 9ÍZ†(Ÿ/ÃëZTē<šÚŞ[m]%ŗÅîä é`mŅ=ë¤-B#¸­kQˆWŒuūuĻMÔųõŌ,QEęáEPEPEÂŊܟ^:šĨęC¡JÔrļ­ūĸāœ…ū5ÉIÚZž–"•ŌąÛ9”ĨB1ķ(;Ķ’E)ē6FR8lõ¨$‘W¨ĪrEv)u9ĸēXšŧ8PWŠ#­rž--o ĩôq4Īm8sŒå •#˙­éŽ0ža ^zW9ŦjĐAŨ.NN9cÔqJRMY›Q¤īsŸĶ –ŪÂkģĩlŽŌČsČ'ĸ˙ŸJ~˜DqÜëD§ČQF8UįúÔvv7Ō ī”ÃlNR"~bsœĩKrWX¸K8%”OûÖ‡>•ĖũīulvrĒ~đũ%%–Iu ‰SrŒņ… ++ÆēŲ-"ą‰ÛÍšË;pƒˇãĪå]‚ÃĒ&ÁšvúךxŨžO,dab0lœ×M­KW"į†l°Ÿkœ.}?ÉŽŪÅY7LIārqėk I™VeWRÄ}kfúAēÆŦrqžĩĘĩw;y]’1üUĨ {HbŖū&˙4N:9#?‡—kykqák[Z0Ė70ū Ø?Ɲkķ\G§HöîÉ,l¯šx=kŠÕ/dšsg"$•'BēŸĪ5|ˇ×ąœš§;ŪK%™ėĸTÛ+#GÉä;ĩÕxp]ß1wFe‘Ŗ9#?]‡JūÁđÔ×2¤ōŽë‚ë’ŲRC“Ö´ÖwđķÚD¸vˇØŠŠļi_¸Ô%w)>†5–‘ŠlššÄ%áe‚áIR@ëíŌĩîîŪՒ%ĮlĘœÕ}îŲ´˙ąJ|›  2¸Ã*×]°ÃQ”`Ģ”ƒžkǟ-Ŧr¸>†ÚęúÚÚáJn ’+pB Ī?Ž+ĒÔn#ŸI"'ĘNņÆĨO š€?ĻkMļŽį\˜\!uŽÜ.Öõc“üĢVúxm$ĶėÄc` "ģÃcō#õŦĒ;ÍžĮmōĀՎ×ė÷ˇ^{2JĪEÆzS'XĨ†HĨĸ‘J¸=ō0j{€cPČȤ…Īj§ ¯uaī’îš(yÛW(čVڏ‚­aHaŒ$kŅqĶ'4û”ģxâ[9H ጭVžē[+#3—`¤ (ÉúÕņĢÉäĶ[YŠOŠt(ÎÂIVãķ §ŲôKũ9_ßpŒžÃũbäûd~UnęâæÚ{K8— ĘOEîjAoē…åŧĒ Ī㎌? Ĩ'Ą ûœö¯Í­i7ąą\+QŨ‚_Қ›§‰ß$‡¸œžáˆŖUqeĻč‰åļ"ŧōÃįî¨,ƒ?†(Ō?wĨÂî2ÍšķRMsÔŅÜÂĒ÷‹Šōã;ķš‚ėŨ"cuĢ$ˇlų(X‘ę@íS‡|žN8Ģ^*÷ڜë(sŊQA9Ú#Į9¨‹žˆĘŨQQZ;¸KÛN“”å•[}ĮQP•d ĒFF{×OĒYi÷ڄ6…$ˇÔ3*^@˜ ˙īŸC\íõ­ū’â]DÃ5ĢņöˆWiF=7OzU)(ü,”õĩˆŦ€7÷Ņŗ€ŪrÃˇČ ^đ˛ĐR>Ļ9d\ũĢ™–öîMŨfC‘Џ,VĪ…P‹;…ˇR Û9Žy—Mô:0aŽŊ3Į>ÕĘYÜ­”ke{û™âĖ{_#pz×DšĢN"ķâ.I\nAä{tũhk MoÄöÖ×*ŗ}’ŨŨՏ͗#úcõnjOu›Æ¯ąw{}ŋ¸´ešáŽ#9üëĒŌlΙĻÛØ–ĸQŋĶqÉ?­6MĮ@׭ẈGėo(čFå#đ Z—G5FÉhĸŠõL‚Š( Š( Š( “šĪ’톚od>ė–ŌĘ@?ô#Z€Š( Š( Š( Ŗ`¸ŊjJLq@Ė +ú5‘eXWGzؘžĩVhÆBŽGz¨ŊM)ĘĖōo$xjōHæÜ– ųŠPŋwŲŋ>+båtũZ2Å!# Ä|§Úļīíã8’0Ņãzåkœ“Âʉ+i3ÉlĮæĮtyúvüëšt•Ü‘ėQ­xûÆ{iZŽ—1›Jŧ¸‰ķüč1íØRGĢx„~ę[KGv?$qôŠå—^!ĩINxŲ!éė˙9§KŠj!2útģļåH?CÍCŒŌ:’†ä÷6×7‘DéāĪ2ykœûsŌĒMĻiÖ1K9ųĨP ;ļqÎĢËwŽĘ›~Å[>kįôbÍk%ÅäVúĶĘ$s˛ūTãŽ{ôĒ„%ÔĢÆúĶRžÖfhmRÖ>ˇ~÷˛Ö’ \¨Ī^ã5Q Āą@ Æ˜8U@˙"­oŗįøEh’‰”Ô¤÷4^BYJ…Îpxũ+Ë|U2]øĒūEČŦkŽø<×O¯x•4Ëgˇ€îŋa…ä'šŽÎ&žå™÷‚YšÉÍ\ž†…šHícŽâ8f ÛÆãĮQŠĨëËr‹ŧî.Iv<ė)÷úÁ”5ĒaX.Ų]¤cÖ¨LŒĒ“’<F+­ģö6%Ôĸ‡YŠŌņļ‰~VÜ2:V‡ŦRķĮS†ų–$”¨īƒTüQ|—vrÆĀČŽš˙9̚~–ךÚI¤,Ļšˆ:ļ~ø' ŋĮŋĩ)+#šræ—Ąčz­”ąĸMķF9QߥöŦ­š71Æ]­Ŗ”Ĩšs–pGĐâļŽŖŽ×MmĖY"%ĪReéq›[÷ #yd.įĐąéųš‰;CÔÚŖ˛LÍņj[ž›IûCÜ*,~lwæ°âŠ4UXīnãSœm•vĨjks#ÜÚÁypģŖcåļ~YSõ"ĢØŨŲZšŽâ@¸l‚Ž…zũAôĄ6’ątÔwf†å¸[ÉļB÷E§XؘōŖhæˇnwŠ ¤q“ĶÛ˙¯Px^E’˙S*WĪČ Ô‚ĒE_ŗW¸ÕĩåEI#aYT/ņČ­ ĶģCœļąeË3\)?ÎŖn“nĶåŒq×ڛdˇkj‚íƒ\ŒîÛ͝,j“œŒķÆ3Z§ĐLx@á˛ĒTđxĪÛģČ,ĸIgfØōRĢČ&ĸ˛Žô$æņQ„)Ũ{U˜ņ*8eëúŅv+ŽãޤuĒnĶ˙ÂIDCÛ|ė{Ü3SÉ"$~dÎucųSāP×k&đ @CÎsDŒí}L=YU|;Šā ŅÎŌ ŨˆpÜ~ÎĒiޝĨZ2“÷q3QŪ]\Åá=V[„iåu ã'h?ʙ¨Cgaļoí1§3 8*ÄwÚÂŖH]Ũv-HĪæí ĮV$S4ãqĻj˙#‚ŗ†ØŽŨБߜÄW)¨x†ņ[ÁŽI)gĨXB"{œOz۝–[E6ēũŦŪV&ŒĖä`ƒę=;ÖOF`ĸĪF’dL˛˛ƒ€“úWŽ_ Ģ™SÍ2C *Qš_Ļ=8ŦĪø’ō=#JÔmĸY4éâ!ĐsåH;\ö—w}ĢEl'‘c’[€ĒOĮõ¨Ÿ;\ËcĐĀĒ\Ūö˙ĄĢ§Ę–’ŪX™‡–Ŧ˛Ŗ9ėF1úWSáK¸šl$2\ČęäãåÎ3X‘hž1Õ4ŨNŲ.%Uã$ä;~ĸ¤ņuôšäĩ´īŖĮĮmĀRp(QOŨl䍪í[Öĸm–5H܌ 튎úĨúUIyDõ̐˙Ē_Ĩu`ž6c1▊+Ķ3 (ĸ€ (ĸ€ (¤4…!ĪŽ­Į÷tŲOį$á[¸öŽ}Īü\š˙˜[ņ˙mVēR†ÅĸŠ*„QEQEÖéœĶŠŽØüi7`"Õ4‡ĸ ˜÷ƒœŒæŗĩšíÚŲdŪŗíõ—‚Ķk§1žFzŠÍÕŗō5;—î"ķwoPËØv5Ėë:ĘéĪŊŗrģdtaPäĶqü*;ßŨJ$1°@N#úW7¨NŌŨ¤­“9Œ!>¸éS,DmdwŅĻīfZĩņež¤˛Ä‚ô [¤ ?Îŗ´mrō9ŌÆķq•ĀsĐíœũ0*­!‡S’ûj‰š5@{ŒgüGåJļËũŠöæĀũŪĀ šËëw:ų™o⛉/ã†v+ŋûX;Ž?Ģ~'5ІŪWŽö3ŠĪ< ķųTփm}rn?ÕN\TđÂ•-cŠūâîLČĶF#;ŽzĩĸÄ[PIŊ 7Ö¯įĶŌdRŧHV@?Ų*ßĪ5ĩ¨kLļÉsh…H—ĘßÎâÃ'cüęå­­ŋöH˛PaJļQ“˙ÖŦ~S ä(¸H­íō™ ˇ?BĢĖôķCv`4r7ĖK;Ɇ=É5¯`ŠaĻ\Ü4L΁åƒëž´ëÍ-l4Ũ*đĢīģķ īęŧŒ~4j,dŠyjü~güũkI>kX)EjؖQÂexŨšIß.įՏŊM Úėŗgh{{RiPÔ¯HĘíUPqėH?­Z–ŲžŅ ũ%fœŽŸB’M kœuūfžŽ#ĩB‘‡¸;úŠŠĘ\C đČL.ģ”ž?î9W[Ëįø žÃz}+“žŌm;í—7“b/$ÜęœĮ–$>U9įū̝AJŽčʝWË-‹[ŧÄ‘Xt*Āi,­Ąą€El@ÄđzŸzt~TŠē'V 7S•?CV! ŒÄzbŧå.ŒŪ\ļŽČĀ‚pųõŠ`'¨nœ†ī×?2<ŗĨJĒPŪ†ĖŨļ4#•äP”ĪÖŽĮ´.å v~•‘ī`žÕpn@įƒĀŦŲË8$ɛrŲ‘¸téøÖ”_ę×č+(8kG9cŒ‚qčkV˜—é]x{íĶ$ĸŠ+Ô3 (ĸ€ (ĸ€ CKHh›c˙"1Ûû%˙ôj×H+œu˙‹‹zéO˙ŖVēį´m4ĢØÁĢK"Ā—$ bŅ&y”į''ĶÚą¯ôģøŽÚ+}(Cf8FĩU.Ãũâx§ ÕQ4ģÅĩĩŧ†vQ†=ŒņÆ1ųÚĶV7RIØuŊΊ#y#M5äX—q[‚7{×­CqâMz ë{{ģqĻÅ+mķļg¯LgŽĩĐhˇSéVŌĨÜ­pK™B{aĨfkZíÎĨfö§Ū8 Á°sÛĨk{ØŠT•´v,Į§ÛÃ,Žî×7|’\3͇z{eFJ†$ ņŌ¨xxŪMė—ņ˛KæĶ€Ģ3%RĶ"œ`Šln+š7f%mŅæX™ˆ#9į’jåŖ6æ?#¯ŨĨPšxæt;Ī+rj͛–Ÿ:=Ēf;˛ûäČ djšûÉlã%G įúT1Ōzúž˜¤ē˜ZÚĪ8ڇčxŦ7b•’:ŋ ˆáđŧ-˛1!ķŨŋ‡æ9ūĩŧ­—ߡ kĶL’ßĀŅiĘ — nwtßÔéČ­8n{h&xÚ#"‚c=PžĒ}ÁÍz¸{¨$yĪVÍĀĪ|ÖĨ'r7äcgÛ•E›—n8*•ûģHm¤ņøulc%ާ¨Á†oL°á4yß÷ąÅŗžŒ=zŠÜB<ĒnËrAãŊp˙ŧaũŸŦ˙cĮoąˆÃ\yƒ;˛8δŧ ŽAĒhF­ū‘nģIųļŽ‡Ūŧœ]7 )ÛCĒ6åĐ檌!ųA7_ZœÅž™É= œüŖ9ę?­HWøŗ×Í{jCm m5‘†GlvĢÂ0`˙ĒĒ"¸l¨ę*ę@^=ņQ&īs ˇrŦeĖŒ-œÖÔ_q~•–ĒŠ˛1ÉįĒô­H‡î×é]xûËųÕ$ĸŠ+Ö1 (ĸ€ (ĸ€ CKHhŸcâšõŌä˙ŅŠū5Đ ĘhŧMä|ëfĘąu'ų ÔüJ” uQTEPEPT2ˆëŠšĄ—•l šÂģ˛N;R‘Öė’§s`āŠČŧ´ÎŊōzwŽ’ę&yÃ<,BŒ“žžÕ€É+šĄ8ן9_SͤŽkV…¤ōÛ$”9*zb’Úån"hđۜcŠĶÔĶ.B°įŽ{ÖmįŲĄÛn2˛ķsUl™Öž…XcI#Õ€Č<Ԗ¨Ą|ŠË–$*z`äUX#hdhb’sRĘīę;¸…ĸ+ėqåEĩ4vĩĖF´’ÆÛû66ųå:ÉŨpF~†ĩJO1ˇf'E${“Q›+Bæsæ\HŦ§wׯÄrĐā*vƒÄ$ŊĶDėˆ,,Åš–Fmėįįf9$˙…C+y.X3>O#=*Ôî-íÉĀųĢLLÍ*.á†3øÖ*ō÷¤T#ĨËŌ\, AmŲ?Ĩ=%T°9<ƒŽ•™š§N@`9āÕËw ÁOŊL­k(Üē˛E dã÷§0TŒį`cŽUx8į5H‡SįîķīW7b1I6¤’B=Ô~[Ė[lkË1õŦk›´Ŋ$ÃhŌ‘dd ŋ‰5Ąsf—–’C!Â>Häĸéwg¨ÄŦ÷7m?(}ÍíéZSkæc6ĘōYÜ]Zņgh¤t`NGŊjY,‰nˆāŧ˜å‡qMŽūŌĮ:‡tDņW`6ķ•–ŪLÄÜϊ’vԘģlJIˆļŌ: ­¨ĄDĀI* ÉËаT™@äu$÷§AģÕėlãmŌ%ÂJë×h<ū•”UŨ‘Rz]šŪ(Ö.m­m,tų€ŧr]€ųI9ö$[zmŌŨÚC2ãˑVMščš‰Žĸ>)ģhŖĘčļņ 8b%ēûĩTŌuŠ´K„Ōõ„ ÛžË&ėŒg„oOJ锜dšVÆ^ĪC셞ߋž~ĨIęGŽX]ũ§'ɞ0vĖ›IëũGōĒÚēÚé0Š@&uß/|ŋÖ´nėF=zWm'ĖŽpĘíØņ_Š>Ô­5ëĪ­°¸‘FTōŸ/qéĮëLđŧņxvûQRĢöyƒÚƒÆHÆõúqõúWu­xžÚKĮŌf€Mk Ų!'!‡ôŦOÅg¤iPf…ļIŲ”däā õúV5ĒB§šmNĒ8YÁ§=™ÛŲ\EsRà 18ÜzŠēāįđŽoÁŽ…´âÃ,b}+Ŗ_—9ö¯&ŪæUŖ÷nAƒõŠĄ&XųáŽF}*Ą"ß1wŠí.âŧ˛[‹pv7BW=éÉje=„đBđZ¸ęsųÖǐ}+=‹ųAJ‘Į$V‚}Ņ]¸/‰œĩĮ ZéŖ0ĸŠ(ĸŠ( ŅEShČÕ#“ū˜ē˙ãĘjبŲ|­čüņū'4€Z(ĸ˜Q@Q@FËÔûT”Öčj'%¨Ņ¨ē­ŗ‚ppyÅrFeû,™Ā==}kŦÕ4$ŗ•=+‘šXæFš`8¯!ŋzĖô¨lfČKD$fËsžâ°fgûfįū!…ô­ôFEŨG<Ž•—|Š“ŠaŒķZÁi”Q M–'v~\SßĖ™B°$+g'¨ĻVttŨæcv éW`€Ī>ĀØŨ‚IčiIÛRõاfcĪŨāį Š5(Üxfđ,Ģ›Uɔ€)Î?ĀÔüb–Ō5žlVub+ŽpsƒĮá\įÛn5gy.îŪbÚ 8Éėc[ŌĄ)5&g:ŅJČM¯›WĩN2y"īHķ÷rgđ¯`đĩŔW:‚L °Ü‚Üž1øô¯)˛Ô.ŦîR ~ÎUÎdkļGBkĐ|'ĄÚÁe&¸Ë#ÜąqŨĀ__ÆēęSŠw[œqģ:BÍ…ŦŨ)å“ĘۄūdÖ֕AdHų˛Oōū•‹:,~ŗŽU9¸š6|z–Ūk¨ą@-ĸÚŖëT¯ÔMØÃ˛p|SĒ™åÁŗĶoĖ ü˙˜¤ņĶXĪ Ųģ=ôŦą­š?+gw$vÆ jęúd˛Ü[ßéęŸmƒ*žė¨pJË úÖ}ÜÆüÚęļ6†ęXÔÃ=̰G Īq“õÍ'tÛîDe­˜O)Ė7m䎙ĮųüëŪ?1Ĩ’i.,Ĩ’ŨíņÎÂ۔çĶ­jexŖyŖōå#>Y9ÁÍsÚˇˆ4‹ zhÅŊúß˟g2ÅØĮ¨ú‘Šų7)ŪúÕˎ7Q&-­î$dvoõĒ?ÃÛëī\”öĐ鎚†— $pĖ$ßyÕÔ6 õ5ĶxsK’ŧÔîžIäI÷Ÿ×ôŽÄVO§ë'R$ËŖ WS˙,œ(ßō¨Š84o ûëąXNŠH#ha÷‡\Õ¨˜nÆũØĀšË#Ęp1€ƒš´Ģōī,APĮ­y~§kĩÆÜ\y‘œã'å8ĒbBZ6,MOK$„íAö^ø¨Ŗ!ōĄ¸Ÿ Ų1TĘĪũĄö¸R)€?yÕ1éWm>ցŖš‡-ĀõJ— jÄå} ˇ×ĄÂ-‘@OGČRÁũŖ*f‚5^…$ŗ2+ȃrų‡œ֚PIÁ‘“Û­élCą ēt˛D­5üí¸ōåz+FĘŪHǜā{÷ĻCvoĮĩbķci ŒëJSmÛ¸Ž &k@Ļe;ļŸâÅ]Ōâ‘4ëˇØm¯/#ÚŌ¯PqÁã4øŽČÁc‘ƒĶŽqÅYV&0Â<6Cc¸¨æaË}Ž•k§Âŗę.“IÛá•3ŧąįԒ*}bĶOÖėŧOM瀏ų.2Pö9#éŠÍ]ę{ŋ´Ũj2āQc8 Č#úūuĻņę-#…Ŋ‡oÉķ{“ųWEĢęĖä ;V6Ö­ į˜Í ØgX˜,ž‡ÎzįéNÕ5ËtŌZæ'WWĘpIüyŦ]u„gūЙđ ĄÚßyƒdÄV^ĄĸjzŞMu/–611ÄĮčkeVÎË`…8&™‡j{ēPĘŽwzûf“Ä2> #ĩGĄYO|ŽŖÚēÂÚUõœN“•PTūđ€pOjÖÖ<-c-„2ÁFļ@ŧYC9ü bĨ{ļwWÆ)$­ąƒâ­.-.ŪÖW{W‰IęlVęx’ŲˆDļŧsÛĖ7~8ÅrvÕnŠ\FPF(Î2XqÍvļZĩŊ„fÆî ņ˛:pëŽ@įƒXēJ2Ņîy•>„wsyhÎņ42Jģ ļ'žO,qí] `Ž`Lkˇ$VEĢ\[Å#-Ŧ’-–vų†1Đ€ķZqHۉ$6ß~Ô§wĄÍ-Qdî0` ã­h ÂŠĖv¨pÍiÆr€ûW^ {Ėå˜ú(ĸŊ0ĸŠ(ĸŠ(ĸŠ(ĸ“v(ÍhĸŠ(ĸŠ(ĸŠ)’}Ú}G!dÔOáÜČÕĄCŒ˙{Ĩsˆˇ,EŖ,¸Éū^•ÔjŪx?.é\ŨĖōeđ 9?sž;s^[†ŽĖôh=€Âq3Fė3ŽŖĨTŧ‰¤uLpÉ=ĢJhJg'ĒÄÁ— ’}MBŅ†Qļ’ICFį Ã?įķĢ[åˇšM>Æ?:ūã‘h×ûĖ{Sîė &8ËM+lŠ02]ģĨvūđ§ö=ŗ]^6ŖrwM)ę ö¤bįĄ5k¨FũO1ņ~“¤øzušęé%Õî"v•ĀF `…ôÁë\6”e‰MŌQ9<‡>ĩÕ|MÖgՕ‘omk€å´Û‚•Žk׊QJ'*ģĩŠÚM¤šžēlÉ$ģŒ™íՏå^× °đ´vÛp#ˇÉw#?ÖŧĶĀ֑EĒÎۀŲi.K‘Á8éÔ׊ęŒR?ØáˇšXä•`F>E$ō?!PŨę>ȕą´ŅI§é–đŗôŸ,䂨Etöą˜’$Æp sô‘Ž'ŸĒhШū)&qøū*ˇ­×qP8ëVē37- T”_zÅŋŅ–âôęwoev~ų“Ķr÷­šFîũ*œ™BxÎ{ÕY34ĖiîŧAieƒM+•A&æÃp2; įĻ{ÆÖmuéEÄęáTˆ7 üG5ÛŨgû9Ũē##Ž˙uū•“âûAäI$k‡ ŊqūĪ=? VÖÃį-S%ŗ‘Æ:VNŗĻ.ąŖ\XîŲ+ŒÆßŨqʚւAqf…1†ŗėy¨ü°[*šüzÔ/†å)4Ī3ͤ{˜\—0ąŽt=CøĶūŲl%û)ēE!öüį8Íkx—L’ĪYöâ%[ØĘJ\áŠ2¤údn…qöZt%Ô&ž@ņ&âËļv AôëÍyÕhÚNWĐôčÍÎ6ęmĪ%ĩ„ˆ%š$#p6܃Å6D‰Šnx÷Ęī#ąëUŋ˛tŨjgˇļķŦ|š$ŌŗÛÃĐŲ†ķ"ÉŽ~īŌ’‚ļúšōČģvđYFdŧ“bąÂÉ$ú ļ\ 6āyM÷šūuČ^@°0Ģ 1ō†;üúéŧ1yk%°ˇW•œ|Ė6œ˙_­*´ų#ĖLe­8 pˆqÆzŌĻ’2@ųwŒ÷éZĄÆ:`ô4<0Uã¯zæNãoĄĪjv/u ɸ „ qžĪĩ6Ö{í?ŗŊŌ4 Æl)'Úˇ–ŲbryįŠ&‰,mîy°Å Î9ÕŠifC+¤ĘÎUZ9 ã€FjÔkļMė>n™íU¯4 [ĢCK$Q‚9¤K=^;‘2Í ‹!Ã!/¸<ŠõbÖŠ*ÃfąÂâåŧ¨ļõ { Í&ˆ÷Ģö›]JPĶÛ0Û8p¸ę}GŊCq,0ęņÜ]:ĒX[4ŽO÷›€?CL7ÚöpŪęQļy´ŊÜ}íüGcÖŽ1\HRv:#†n˞0*Rv`^õË\øŽûG¸ĩƒWŠÅ%¸]ÂbŦžäōnN85õ­ÍŸ´Šē?ûčd~xŠöSNÍÍ]PI#9ëVc%r$ãķ¨-š;”ķ`–9Sy@ĒwÚŨ–˜â'w•É˄ ŸZöBfĨŧB$¨LUÅl!#5žŲ VĮQœt4đ tã>ĩš•ĖžãҊ4Q*€qáŠŨ‡fÁĨBĒAĀūu!8R@č}ęÖû™4.÷8,AÔę\įœtį[vÍX€4Ģ’[ąĄģÍĸĶsnĮÛĩ^î Ē` ‹žĢ‘qÕׂo™œ“K@ĸŊ30ĸŠ(ĸŠ( –Đ&•ŽŽąvō ãĀUÚĮ˙g—ØYn˙ĮĀū•¯Š˜ƒEUQEQE ‚āœu=C:nŒúŽG֓WC[˜Z€c#c%°1Ú˛'ļüČž3ZsË"Ũ°w]‡¯Ö¨\’F|ŧ‚Gœũ+ĖŠ¤š;ŠļŒ§„ÜĮæîGj­=¤CHĮ¯JÕōŅ#˯$úâŗõ(ŲėZŨ%d7$"AÔ`?X­Îĩ; á;ûcU“Xš#äBLV ûuĮĨz2 FĨ¤ŲAĻéĐÛ@¤hÛ{’˜ q^Ž G›šæÖ¨į#Æū!xõõéĩ{D°Ũ˛–ųöė~Ô\Ū¯áÍGA‹Čŋ†–dķchÉ<ö?ã^ßxPÖ ˛#0Zq(Į‰ųũOā+BęÂĶP‹eŨŧs¨ČÃŽĪJéŊØé×tĪøW¤­Nöi`ͯ‘ąƒ¯ŪÜÏŌŊJęŪ8ĩ 2Ę‘cWyØĶ ú°­hmĄ´„Co CôTPgdņ ˇđE  >ėI?ČTōęØœÜ™˜fņ0-’bYUN~īdVô1ķŸĘ°ŦŖÜ=đcš¤œB<Ėų ĐAģfI"´¸É0oĖ­Vœ|Ø•sr—<ôĆüSˆŠ’áė.į3üʘK›{RyŨ,=ŠãŸĪõ§ŪÃ,úuÔv’•â! ėqŪ“Pˇhm Vl˛F°îF?¨Ą|BlĪĐËK Û'Ņ|ˇ+ÜŠÅYcp­œãéTü.Ž,Ž`vËGs(ÜÃŽ[wõ­;ˆú”Á äâĻ=bÔķߊ“Yé6ē`9k×/&!ˇļIũ+–đŦ{īšÚ6&ŒĢí=>•¯ņ-ž*ļ†sō­’˛č~cšĖŅãûĸlļv|Û}ŗ\xš{–Gą‚ĻäŽz.Ÿ§ÛŲÚ†1=Or}k/\Ķb@fgzą>•KOņ4ÎPˀÆŗuiŽíäđĨ€Æxašį§8ÚÍjo sRēzæąiFK•'Č¨i—Τę°Ūo/vؐsš;įéHĶ2ĖĖe;Y‰'¯߅j¯†–ãDmI§hÁj'\– ΎZŨíË.¤Ísęēĩ•펥›e2N€ãå=>ĩkˇ#ƒPéļPéÖk j‹Æ *ãqõŠŽÖ#98•į(¤ô"÷ÜG€Ŋ =ęUAå* œŒäuôŠÕYS$œcĨ ‘¨æB8Į0#xÂđGAI#b/' Ģ–Į§ųÍQK›ģķŗˆÃ Ļī2R>aŽ8üjy]ކŧÉŽ4‹=IÃŨB€‚FqĐZąŦFEŸj/ú:‰‚‘ĮČwcôÅYĩ…ĸAæĘdī#đĒzėÂKh,Æ1w Wã8~g?ĮãWŪũ z™7IáŸß[M~Åo Qōy›pAë[ū*ŌîŋJG€õE$gž9¨$IãķŠ•@ÃļîõÁ­Ėšh’čŋwņ'Ĩ i‡íڛ&%%]vˇ÷…9ačéŸjŠ,b"™Ü͟ĀU˜ĖkĐ cÖĒĸėfãtĪJą‰ÕrÔqTĩhĘh˛pÖäā` ŗÛAQ"/–P­X^˜ëaé%Ē9dĮQH)kŦĸŠ(ĸŠ(¤4´†€0LøōTūķÖøŽ~ŧsw0ÆÄĶâC“ÎY܏ũÖūi-†ĮQEÄQEQE×åOĨ4Œp `^B$‚˛Œs‚:Ö|ČÂ>@bP9úV­éQ! pߕeËMĒļ%<ũîžõįV…įtvA˛ ’7Aƒ tuÅQÔ"dŅæO*häPŋÅĩ˛•M‘qĘž@䊝¤„žb,dÔW3ÍšŽné^ Ķu(3 ĘÁ,Ã.=EhĨÔ ngŽTxB–,­@Ž.é!ŽoĩŠ_´˜ôĮƯ| a–Įß*GôĒ™ēTe´{6ÆĶqüI'õ&ļ#RôÛK4ĩĩŽŨ2|ą´˛WqÍ2›!*Nr>ĩŲVƒ‘ÖŽāã­V¸B0 į֜X¯qÂĨˇtúQ}´AØn+ÉÍKĘĀmÉ>ĩ,ĒĻ6 ;jžmI9ĪDđ΍Ģ:ôĀzĢZ˛¨8+Œ“ÜqūyŦŨ)ą¨ éįŽo‘kYW8ãĄéM|Nãgš|Kͤ¸ēļŸËėļâD}ä-‰>¸ĘĻkĪė.䷑‘”Ääįļé_Aęzd:ĨĒFîbš2ZWŦg?QÎī^5Šx?T]ZōŪÉb”Å.ĮĮĘFå=ņÁéXՊqŋcŌÁ×åN7ąËÚFBąw]áˆ\núVænēŽēļĸEG:+ Ãp ;õp>QČÁūtJŨ•ŊŒéŽEŠŲčĶØCá}=mî#•ėŠI*įæ ß,€ŽŊŋ*ˇá$÷šk7/0v™™ŽIĖ—Ņ´_dŒ#œf_šAëĀįķ5Ąkysa~¤ŸíNŋžiít^â8ŽõÎá'ËŠEFMŝŗųi–v ØšĨŖÍæiVŌI fōūv=r W]sKÔ õ™FģYŲ° ôĪĨfح֐bĶ’1™î–$Ģ;ũX(6Ŧ÷šŸŠÔĀé,+,, 0éSĤĢ1'ØfąŦ¯`Ķ6éģdymQUØ/(_ú~ĩ¯c#Ic ķ ŽŅŠĮ§YęfÉ|¨äU‹y7¸ãUs‰T‘ÅĢ$ĒŖ$ĶZjD–†Š–_<āfŽ•°ČO8ųãZ)÷Ez¸Y;jrMĸŠ+Ŧ€ĸŠ(ĸŠ(¤4´†€2­‰>)ÔFzZ[čSVĻ­dZČÛĒ{YÚ˙čSVÁ¤†ÅĸŠ)ˆ(ĸŠ(ĸŠ)§Ĩ:“ĩ 9­Qŧģœļ~n1ëY×HĒ›†pŧįŌˇ5HTIæį<`tŦÛĢRČ&-ģņ¯>Ŧ}ķĒV3’T¸$Č0üma֞ĄI1ĖßŧĮjŠ8ä…ĖdRzž•l4j&ŨGã\Ž÷5æ(4m‘•cېGĨ"A ąKŽø ílúz´!Á X4`āũ}(6ō$o,`•9ųXõĻĸųŠŒÖĖ‚Įû^Ü xĩHžōĮæ§ĖlœķZÚW‰-Ξ˛_Ί8bŽ€s¸:{ŒƊĨŅŦŸ0\÷=ũęŨŧ™ŒĢHë•ë]TkHš‘V7,oáÔ`2B˛„ ˙:rÛž–ã?ëSBÜ˙ãßĨgÛČÛHäŠķĨ˛[ģž‰šÕFčį,2÷[×ĢЍÜnr¸Ø×Ø1šxQŒÖCx“IļŊÚŠ'‚jA¯ŲJvÛ¸oH—4Éiš€TS&áīO ‚Ā‚FpzŠQŒä $E°įo4’3a†:ņSįV~Š›j×BãG,ĮĐæ‚â›c-m’9$uSŊÛ,ŊSÜÉ´-4ōâ^ŽÄ+Ÿ‹ÅļíeĶõā|ĒĐ“õĒ’wWŪˇī ĩŒ‹Ė(™víøV2ÄA+ÜŲQ“–Ĩë˙iöģVÔžĄ;ŽåŽØƒĮšÎsv:ÜĸîōöãJŊ_ĩĖeP (Q‘Ÿöh}]ö[ËíüšŲTŦą’{wŌ¤šmjYÍŦ7HÎÖrWđl~UÁ[)Ģ-ŽÚtankXxŠÆųü¸f"AĮ”āŖĀõü*ÔŌ‡C…#Ž{~ËO}¤ę0ėŧ™Q*'_-ÁöĪ9úVmÂĢ<>müš†KŦm™PqË(üë(V}MŊ’^ō65mEd‚k›ļ]ËķvöĒē~›%ŧ÷w onĖũ”t}*ũ•œ;ŦBÉÕã%ƒqëũ)ū_\îČ9§:ÎaĪÍĸ#ÜÂN„RōIVë׊qIg'™†$äm$pjcąIu…ˆÆI˄iíFK)  úŠ’4e]š5ôŅ82ųx'• 6ĩËF•åFžd˜.}i\ˆĄ@ Ԛ¤ų‹ĪĘEJ0OĸÖ¨‹SČĀį¸4q†˜äœĶaų›æ>ÕeW'Ø{VžÎčÆrbÃ>rúUÄUT_Ū?>•i:WfsžbŠZ(ޞŠ( Š( ŌŌ”‘j1â­D㭝ˇū‡5lVt1‘¯^IŲ­ _ÉĨ˙Ҥ†ÂŠ(Ļ ĸŠ(ĸŠ(āP:RŅ@ŽĸY†\Öt–“‚9­†¨d…]J5Ī8krÔ´ąË´bW î ÷#ŊF¨7`ŠĀ÷­w´ŲvvĄœõĸK ĸ\f¸Vŗąŗž†,l!€! äâŠe_Ũ#Ë)ã’ĩĄw§JU ũŅÎ)líŧˇ.FsÔzÖŗĸã$Éįš› 0ČĮ+ŽĢ-AæG÷3ŸOzԒĘ=ĒÉÚO#Ō™ĢŦƒ€W#VĒ’ŽÂu›C#R’(Į\uīWДė@öĻ›bĨY9ĮPjqā3ŸÎģSV%Îâ”IF×@ŪÄS’$A„UQūČÅ=Wm.)Ų ˇJzĶņA‰ÁÆ@ÉŽKÅÍö‹ũÆ1™ūØ%ČPÅAį‡ĨvV%ĘYéēŸÚæ%ŽoF„ •P:näÔOHŗH=J7c–Ö0sÛ́Ŧ9ūĩ/īäķ×ëQZŲÁ=䚅ĩÔßg•Ø´ōĪv6’=9lĄŨĄ˛sšōmĸØí„ģ™NTē•#ļŠ?,n8ųÛŠü?:~™Ĩ[éΎ˜åØi'Ļ?Šī<=k¨•’_1HrĮīdAöā~UpÛ2(Ę́ۆ޴+>Ĩ)ĸ†į+< "÷ æ JĶš]>ŨOĒÆūb¯(nsĐĶŧ˛#,W&…Í9´Üä—FžĐŽo.-#[ËIX0†?‘Đ ũÕčĮŸl՛Kˆ/!ķRBw|ģHÁVÚēUI$Ƅ°B}델´Öąy- ´5œG;đq×ŗcųUû>mvL͐6ÁBÖáN@īĐԖá.a’DY@ŒâXåhÎz0ôô"Ļ[bėrĨHíÛđŠq’ÜŅNú!›WŽ0{`uŠ–-ĒÁ>†ĻK^ƒŋ"Žm†×ËYĀV•ö)#Ø$ ū”[z™ĘĸEE‰dmģNzû š œŠÎz“ÚŦEo’¤ R3ĐŽÔŗŲJĐžT™Ā#œ×D#žU™‹$€qéšc čOãŠĩˇŲĐΎymĄ¨¤MĘŦ úņQ6•Ų wĩŠā dŠáõmccöĻí. jlØųŠÅųÜĀúpĩ āŽ87“æ&Đ{g=9bÂ`ķŽ8njPsĘrr:ôĻGŽvŠį>ĩd€€Ų=ę–ßĪKa2‰ĪD“ÆjÚFŠnÊ Tđĸä ÷4Ą@aÁĀâ”|šĮOz-Š-ŨX’"žfvœuéVSk9ę*œJ|ŗkœ žÕ~!÷qÖ¯mŽy‚ĢCŒUĐT!G˜ĮœāwŠ—ĨoEu2c¨ĸŠč$(ĸŠ(ĸŠ)ČÅ-@&i;°ōĪøÔ”Q@Q@Q@Q@äP8SXāt Rš­- #xÃvĨ éO¤¨öqŊĮv!ĻŦJ­?­-[Iî!Å" \͍ĻE-QEQEYÁöÍFkŠSˆÉŠç÷įĮáīZäf‘P(ĀéS8ķ+ ;ā°†Ū†  õļU9­bŒV.‚+‘yCĀÅEöeĮzĩŠ1MЈš™Wėę6æšÖ€āā uŊ\ÅÕ>y…¸¸ĮJ­i¤ÚXÉq$0%ב%‰­,QŠ=аšŲšúlOyö‘$ØcoFuØãęj4ĐÄõ#­lQCĸšąJ¤–ÆZÚy-œnúõĻꐆ˛URŧÄÚOc¸VŠQLhà ô5-Ŧ'6Îf%솯üÛ(kÃrÃ(0ĄˆķØdf¯iɨ=ŧŸoEK”b GÂ8ęūUŽą(' ã“ĮSN+īøÔ:)ęZœæǝ<:—&0Ļ' ÁZŠXĩÄņ.ôÆ$Ŗ%zcú×Mˇ“@SëƒYû4ÛĶqŠ™—+söq‡Ęg"f8]§Ž++WģJÃm?Ųæˇ‘Yân éūÉüë¨Ų­FöņJU¤‰ŠĘîPqBĨaûC&ę-Gė iÅF âP8_§­7Q7đÚÛ HŌI¤•D›ÆP s“ØgŋŊmė&‘cÛMCKX|æ.“ ÉąI/€I˛wFz§=?Ī­W°ĩÆąĒ–UpŗFĀíåIA‘]Œ8éŌ P­ãŨ*‘+¨V;ŽÔrŲ Tg?mŠMĢnŦŒvsķķ {Ķ84ÆēÔ?ˇäŗ1ų°,ŠîČ! ōÛģāûWRS=NAëKˇ Ī&Ÿ"`ĒØį%›T‚ũ,‘!“wīRc`€Āûō+ ųՔ*.ÃԓĶđŦ‹ÍQ-õktxĨČéįm<ŽAtéŌĩ­æŽaōēąÆN .UͰĨ{]‰Ú|é6 ^ŋZ^ƒ=j™eFûÍĀ÷ŠÅuB6ÔÉģ‹EVĸ (ĸ€ (ĸ€ ‡ĩ˛qKš§…ĩ9â=˜}IđĢt´QEQEQE˜Ĩĸ€ (ĸ€P0”Î…Jųx;ÁįŒ`ūu=%–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¤=)h )hĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ 1ERKE+˜Ŗ´QʀJ)hĸČÅ&ŪiÔQʂãvŅļE.Tž´ĨA§QBŠ@BĐ#0f˛įŽFzĶÖ$˜Ę¨ĸB0[Ÿ­Yĸ“„GvUš$O,1‰fE;œdúgĩI fYĶc2šÎ8ŠzŸĨb­+ âŅEQEQERZC@Ŗ9ÔŽ¤q˙7Ģ8Ēąø™Ü˙×(˙›ÕēHŠ(ĻEPEPEPEPHN)íRk"kÛĢûK[[Y"–_žYrWËÉPÉČčZ‰ģ¨ÍpÚ&ģâ[J}H 8B¯uPŽ ´LĘ­÷ŽA+Č÷CņvŸ¨ø~-Bæî(äû$W#æUrõ휌OZ§‰æ:ĒZåoüs¤X.œXĪ0ŋģ6iåÄIŽ@CŽŖäc<ô­CVŗŌĄŠ[Éŧ¨å‘bF*H.Į 8dŌqh¤ŅĄE`Gâí g*š‚d I,Ŧˆ¸“$Œ šæ•<[ŖŊ˜ē[Ļ1´Ū@'._nėmÆīģķtéG+ė.doŌfĄ†tž–2YC)Æ2Čë\ŽĨã8†•¨ŪiĀ7ömōZÜŅ‚ōęŦW×ŋOzlnI€9 šĮ“ÄzT x÷h!Y<“Ôˇ™ũĖu-íV?´ķGkí6XĻV„É į*ÜqŌ‹0M3@ŌæšŨÄöšŽ…m¨\M,öŠs2’@@@'ę9ĮåëW^͚/ÚT)‡Ū`+ˇŗœcĨŦ9‘­EsđøŽÂúKil¯­eĩ–9d,XîeLd§ž~ŊęH›s5ũĄxų˜ė]˙u|ƞņÉŗ‚;´Y…ŅšEa/Š4†ļ’atBF¨ÄÜ1W;PŒOІoXÅ­izj­Ė’jI#ÄË aB`ŲrũEŦ9‘ŅŌf˛5oiú)€_I"´Ûļ$q4ŒBŒąÂ‚p22zsPMâÍŪūknĘ\[˛,ŲöÆ_î–l`ęMaĖĐ}ąK\•—Š ŗkm­KpŲje€ÂšÁDurK7ĪÛōŠäņׇŖŠ:ŽVxšhöÄä”S†8§‚#¸§ĘÙ18¤Ũíú×â¯C¤éSK§O ׈‘ĘÅ$‰ąÎą^=‰?…]‡Ä0ĨŪĢö‹ËOŗ[\%ŧb0ÆEr€”aüGœ€ŊŗK‘‹™&}¨Ís> ×.uũkËąøîĻ€4(ĘŦ¨ÛAÃr§xÖoõ9o§‚ 6īėëqåČei‡]Üw=>‡ÖŽW°s#ˇÍËŋü1´7k*KŋfCnm‡ŒđGĨtˇpŪÛGsm"ËĒ9ä2‘E-n5$Ë4QE!…Q@Q@Q@Q@!Ĩ ô  ø:Íę˙v(ŋözĐĒ0.5‹ÆõŠ/æõz€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€˜v¨™ae‡jĖŽíĀíSŌP&rđÎĨĸø^ķI›Pˇ–YZgŠhá+°ČYššÁbzŠĪÁ:´6īzĖ ˛āĶŅÅŽJųmØ-Žrxã¯^+ŋÅéTĻÖÂäGžEā-ZŌ8ZÛ[Ļ‡S:„F[bUw#+Ž7äƒģ#G­uúŪ–ēžubdōŪTũܸɍĮ*āz‚ü+Sôb‡6ŨØ(¤q–> “NļÖcļÔ0ú„Acgˆ2Âåpîžw0 G­dGđķTÖŌjöw sp—8{ic„ØYXKšO‚¯c^•Š1īOÚH\‘(éļ’ŲivļĶN×ÃFķ?Y?\fšÉ|+¨5Ļąjē„Uåō^ĀL˜ČuvVų°Āíöë]Ž(ĮŊJ“NãåG }ā‹›Ö¸™îėŪaŠ›ø[mņ`Įå•uÜ3Āęäfē};Nû†-ã+R-ĄF ūęƒšĶÅ!8ĄÉ°åG7>×ĻÛZŨŪĢĩĨŠŲÂɆFÜĘIŨĖiĮĻG|Šū ˛ŊŌãŅå˛ļ´71Ūŧ˛=ŊĢÅĖl§vÍä2AÉĮJë×Y͟Rm=oíšņFM¸•|Á˙ëEî̧iĄkkæ!¸•SwĶ8ÍR”“DŲt9ŊN¸ģ´ŌoáĩRYÛÜ[ũŽTgûÅ@pĮ <ŽH=Š–~ ģĩ :…ģFš9Ķ?ã܃’sŧüß§ë[ŸÛ)%ö ¤Ö3Av˛1o´ÅTpQGßāž1Gü%ZŋļlÄlMƌ1Î^§7!ōÄÍ>ēÛzĢÚ[[. 8C 98ŨÎw;{Ôw~ģ¸Ô/nô—Z…­Ūß ’!FŌwsƒŸsÅjËŽE$ša°šąš;šš<›€ *‚[f3š†9­ZĩÖ4ûÛŠm-¯mæž!—qœ}AZ9¤…hŊ:´žîēÍŖ¨?ļHUD‰$%”)›i]¤`žww< ôCKûmՍÚɲâĘFxÉŠÜ…X‘ÆöŠŽu[ ;˜`šģ‚ĻlF NŸ§Ö›ŗĻŧ¯í^O0ÃąfRÁĀÉ\g¨ēŅ)94ė %tcYxVk cNŊ‚˙÷6ŅÜ,ąŸĨ&Ũõ)ZÚZ—†īuXĻ3ßB“OĻIc!X LšxŗÆ:^´Áá=šûęžmŦ‹?”ĶĨů˜áãP ÆÛžNƒąäqÖ¤đĮ‹-õŊ0Ku-¤Če3[¤ÁŠ*;!o\p>™­|E¤]ŲÉwĨk%ŧOåŧĢ(*Ŧq€Hîr0;äS÷–‚´Fk:+ęĶi˛%ÂÂl¯膏vü+.:Œ}îŧôƒ€ä[{K{­EeˇŠ+ØeT„ŖHˇ-¸CpGĐæĩ<9¯ĪŦč÷ˇrĨ˛Éms4 äšhØ!Ā9÷Ē:7‰ĩkûũŪįKŽ%ž˛’æāŖ’``@PxčĀņøúRNHˆŲŧ5ŌIöĢËk‰>Į”JöĮg–Ž–˛XārĮQKká+û;Ŋ âU]´ôš)|čŲüČäelģ € Iā ė‡"—sĘÖ*9OxVo[[E ĖVÍb˛´E€#+)R9õ¸Ž}ėn5ŋx“EûAŠÎkkD™ŪŲĨ[vĮ$(<ã$ÆŊ/›hSiX9ÂßøīPė÷öĖŌjI¨Z¤ļÅãB#”‘K|ā¨ö ķK?ƒĩ)žČŅ_iŅŦ.-$H늪H$LJq´qõõŽëæŒ{ŅĪ ä‰Ā]øS“H–Ę VŅ|û;{{‡’Đ’ZŒ¸aŒúÔÍāŨEõ[ŊIĩĩ5üWļá`;–/(Ģ Ü‚ž„yŽįbŽy*9Ī h—ē­ô7—Ü›‹Ųn•ŖˆĻŅ!ÜG,{“ŠÆēđfĨ&‘smũ¨ē:¸Õ v„íR$ĩ†rzuČŽķcŪŽvĮʏ1ņ,Me*ŪiÛŨŪ\ˇ™ˆ¯ö… Ž3ŒoŌēŋč÷Úƒôí'Qx^æÖ?-š%Hã€zWEˇ=i@Åœ¤ŦÂÖŠ(ŠQEQEQEQE˙ŪÚyš~hŤtL^ĖŪą ü‹UšŒ/īYŊ@ĪüjJ`QEQEQEQEQEQEQEQEQEQEÖįųĶŠ1šķ¸|%âŧoŽŗéŋeŽöi|¤ÜĨĸ‘’T oãŠÎ ŊãĢÅĩžđšSoįTybwØŋę¤SÎ xvëŠíqLx•ö– JœŒŒâŠIŪė—ūĢķuhŪmĸÂ^úK…ƒFn1Ā÷ëééü"ž —Bļ°š]žÖ[P’Ǐ3E îųÉ€6ō[šôc<š\SįbåGoá]n9ėŨŪĀõ™õ 6;#‘Ypŋ/-ķ“Ī ĢŪĐĩ] #˛ŧtļÖą40\Ä­ö‰T° žx_q““ÎEuØ÷Ŗm.vĮʎ#Yđ…Í˙‹TH,/-naŠ)cŊg-‹@ŧ09čqČ5bO™|EĒ_}ŖËŗŊƒå‰AŨÁCJ8āėÚâk¯ÛīK´QÎĐr#Í.<¨Éá94¸­ttē?eC6é1!˛î%ž°w÷qĮûÆHãōĘ3‹ˇĄ‚ę}éqG´šQĖøSGÔtx5$Ô՚æú[¨ūÎ[?$ŽĮ>ĩŌl¸§cۊ–Ûw@3KE (ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠLRŅEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˙Ųleptonica-1.86.0/prog/lion-page.00011.png000066400000000000000000000434321506303110300175520ustar00rootroot00000000000000‰PNG  IHDRĖp3åĄ'PLTE***UUUĒĒĒÔÔÔ˙˙˙aŧ pHYsb&2 IDATxœí]‹‚ĢĒHü˙O>Ŧ•€hĩíĖiÕ͐{Īž>-˄$ä1̓ēĄéęô9`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜ŅķË$éŧk 0ŋLĪģÖķÛ¤į]j€ųkR‘z‡žĻ>ųúÖQw gˇ§qšâŊî˙[`ÆÃš'Á—Mņ˙iš™CR’oąHƒãOz¸‚L™ä+×ũ-} LÍ?4D&"qBđ.dĘߐ#S~õ?´ ābÆķã|ž–ņÃlĖ8=Ph_Ά7_üŽã…$A•H<§3¨øīØÃ böâKé`Ē=ĩdÄ˚6!ōJT8ķœ„ø?ĀTģBΘôķ&/s°bdis/,ŋÄ™ĀŠŽ2ʉ.53R˛wøüˇ`Ļ-vė öy¸Ÿ0=ϝ€)뉝Z0A™0?ŋķKģ_˜ô?&¸¤é0ķ@ņ× ė-ˇi€ų0ŗ2ŌŽ2`šĮ2üŌPĶŨΟ1ûŠ+ĢlŊf–gŗŋs—1ąPĖøįÁÜĐ˜ūųoÖĖ}Ƅ­đ…I`nčĖĸÍĒʃš¯4cö‡3sáų%áz6)žy÷Æį`ŽFŗŊVLøÕ’M´s—ƒI 1dËŗņ؊9â>ĢĨ—ہ§iĘ˙•Aķ“}4™lOŲüMđō[wjąc0q—Ë*aWĀM§âŅMĀpNÅržæi`îüÂB¯ Úđ*D!ĸģ–#Š]ˆvŦØ_¯čVŒ~+ÆŨ“-î6ŨŪ×y>Schįdēūb %î÷ 1œԨËÁäOä2čGÔķĩ§ í(Į-ÁÍæĀHáøâöĮwvĒąwaÜcE8îßģ °wÉr­°<#x˜ūúMēĖ2ēĖĖbüËž8}!´bŖ#;ojų$-ŽëxĸĀôąb=(ęÃĮb§ęæÂ_¤+ÁŒ V˜4˙ŲĄ~¸?ĶS™%ĢkŲķ".mɘūe3Ŋ*ĮÃ)-jËz`ūw ŦÍ}âīOõ՜Y^§&}ŦÜDŒëÕsÎŦOE6• *Žh……(}đxĖ4Į`ǁŠë‡˛š•wT §$ŧÆģ•3_BûpÔå3øTh‰z%(9ËĮRX^7ËČß“Rö ­ÂŨĀøĖ4IëK­6øæ–YR8ŽyΙŧ Ų\˛âÖF‰ŊÔmcúÁcÄ8ŗĻ1ûēŗŅ„ŗčÄMâĨaÆGA(šU­"\ô/+jÂXĄŠŲ<€ŊëLWáŨ€u(ĩõ' &nĮVž@fbÂlĀ4ŪTf{œîʐXÂ'p¤˜ĨÂ$Y§Bl$1ģ*]X‹Š†Rą`ŗÉĀr‡ÉVkŪĸĢ>ŧõŧjÄŋϤĻtgž×‰ÚDų6QKĨ"ŒPYéæŠUsĸÃÖ cĸ– Ļ‚ä5-;T™üLˇĸæŌ¨(PjōÅ)HKF;™2s!´Xz$`9NYÍ5E*0ƒØj[`<üū’`ąķĀ,âUŦēļÆUú­•’@;Õ~d˛Ceb´ËG°vt÷)Ļ~•ēKŽ­/†ˆX‰oš!ūy¸‚Ú:LV”;f6ĖĖeâ9ß8q/âŲģŦNÃFLPž0ß0Ū ˙°Jøwé<0KY}Ģz¯Åō¯_—oŊūárėjëNn6K^w]KZŧ.Ųņk_ÎŪ¸íēëųŅĩ˙ļšÄ ÄŽŲûŋŋ[w ~CP.ÉīÚ^č­ žsC4ßēĮ čDÎüä`۞Ÿûų…÷úĸŪ…:ڜ4Āėˆ˜ŅķĶtáŠ:Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#ęLd Äô˛XWÔ-˜ČVˆēĢöüŒú“™–jyĐ„ē3!ōĪ@Ų=˜lŠhygWßÎ Ô5˜Á’=Cũ‹g×`"Ģ9Yûļŋ€eß`˛ĒŠöÕÁí€:“eœæđGė͎Ád•/VDH×Ė:ú“åEŦŧ­ū‰ŗg0•ĨšĖcđŋ <˙Ô/˜ Ĩۖ”ø,ũ05ũÆü`ęļ–WŋÔ?˜,ú7č€ųwh€Ų 0;ĸfG4Āėˆ˜Ņŗ#ęĖ?ËEęL”čūÛ%Ní˛PF=ÄLßb îöÆĨš_[Ž]Bņī0§ōáJ÷æô‚éíy„Mžž´ŦÂĘÚ6­(ËūXŦ}96~f#SŅ[åøĶ`ķDú°˜-=šô‹=´é÷´_ŦŊŌĮĸfÅ*ŗk|zš÷č{ÃįÁôWņ{ŅĮ-ׇ§ÍĮ,ŊÔoz­.c<ŧø4}ĖPģU|M÷{`îÎĐŗ&Õ?ĸ â“^Ģ/.UąČ§nꁞfžķįŠĮ˙û5í„6â|gĐ­™ķŌ+;­š›ĻTjö“™> f°UJ–††Kj@MPt§mÛÚĸŗÅrPũü(ĨāĖš4ŗ­oj“ęU?œæuĶ7ëÄKÜ*bÖˇnēėd­ÚÚáĒDļ&ǎ–DÂ~¸ /CS%ônŒá+ęá§Á4Á&öđąMV´‡:˙,6ĸ´°š„Ļ–Ūb‰Ŋœĸˇ…Bŋ[o÷Ģc÷"qLÚ)E–ek"ÅŌ’+Ovžâ„<š3>.Ú {Ÿ'N1N8ægA›b Ã4Zƒâdq€Á:îæņËĸŽnēŪwĩ‚™Ø›ėŸ3ōNË$Ōr°ÖlЇJ_ikŋ^1YX‡5&ļšâËØ2øö"Ÿ453ĶŌÃ/QųLƙĘ&īlŧ–ÜÅfålÛVÛČŗU5ûņíū.ļ*øę9īĸÆRJ|R Æä:Ŋ}m="ĨôLĮmĐ˙/}š3ŅI'ũGŗKpRæ}TKÁ§ÂU8&Ä{'ÎĘ˜áLīš¨lĢŠ!xË0ģPZŽC”Ŗõ›ío´Ģs™øGRڙĩĐH[oč9{¨ļŸ—æŊ):ģKÁ0}Āē9 ĪƒÉY,k|ô¤č`ŠÕR(ņĪēu­šZâėMGw/˛'fĢē™Ŧ›ĨĢ+AëMāĒx ĐrO…ÄG#÷Îr0ĶeÍLւÕoŊ‚Ę#[0“u¯7í <ŗ‡—ø} ĖTŪ7š›lĀ´Š(zâæw˛ŠåūEZĨ§ŧŽēŽX'ī”´|bßwĩœb7Ã{xĻ÷C.Ž_ĮÁ\Ÿû|ĨœUé*˙Ž˜Í?Ë@_ÁT6(öß^8ėÚö*n=6˛tÃÜP˙ÉŊ˛ĖUX ‰äŧŸü Ā~â[0gīËzf˜V+ž_ Üoã*q0Ķŧ‘ŲRōeúÚæÆįMWQũ}yKĩŧ+\Ž‹'/–-|*î–5gÖu¸ŽeLåܲ'ņ\5Ĩ™ ~u­Ŗ™¤ÔļiŋéL}ĶŽ[T‡š>KZŋ/ĐįÅŦŦߗ9ˆķü¸fēTņoLŽ3û­*wÁ,™^œÎĩ:ÉÅĢ-Ē “6ÍC¯%ˇhĩ nÉpYîĐ|ú fC˙8˜Ú.˙)?ķßY3§h,ėĖđX98ũö§&;¯%ÁbÅW{`ŌšŽõõÚąb  SYÚį9äŋØ9t2GԑvÜ Ũ.č âGÁė™Gâ+<}K‡ų_t;0ŋ@UîĮé&ĩžtĖj ¨|&žëļÔ5˜ŽaĩŨÃ×â’îA]ƒidģŒY9ū^øįMč€ –`<ŽÉė„ū˜¤Ūũ0˙ 0;ĸfG4Āėˆ˜Ņŗ#ē ˜[Ã! ÛÎ`Œ›“$y(ķōQkTjŲælGōHhmX.šŸ”>˜Ėōē˜Ė2rį˙MOî Îü•8—ô¤äņđËÔŽ‚jxG;LtßBzõ v~7ÔĄŒ‚dēSūí=ĀôÛ ÅžŽ.÷õĀR%„ņŅ –pMąÚ$4‹Ņi–ša~xleˁŧ@ļAc ˙ģ ŨLM–ˆ@öDˆš*Čg›ĐšÍ*ŌZŖ[, ĪÃãŒķ2´sJ’FĻ•”lĖCfæĢáģšî‘šš#ųĢ,m‘@”ōq–>ŋāF܂Í76*īčŦ9z‡nf›–T kŗmRBŽ@D! QÅķŪöėc%Q)˙A §1–xԜúš˜ĪΒA$’ts‚ĀŒyíĖâZŗ€Įųų>pՈãRϚ$‚ĖĮˇ­zq 0c´@q$IEĘ?¨2A$€˛.‘]¤j9Į^Û „<æéwˆXīYŖžü¤ØQY‹˛2hLWĘ0 JôÛC9FAą ĀÍÄ ühÉmöwbM L1Ö)!¯ČČ­Ō›-L•MIĻCä‡`ĸ$›´ú=Ĩ1‚ņ9”ÔŦ™Ņî!_:mî2:F“ā88ˆį*š ˆbEø"–=˙/?° =A$0ˇŽ XFķ›ËšĖōÁŌĩ(`\úSBār~Í'Hx#{’á&t=˜ž–Ūä­žü%tŗüŲcŒ&隆°Ī?úđîŧ:>ęîāĖßЧgíãécOn æ鷈ȝktũU0K÷ōlh€ųsē-žĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDׁyŸPâ_ÜÉAŽŅÅt:˜Ö9]fûgwJ3ƒOĖ‘>TŸyc)ũŪ8Ĩųũ>Wé`ŋŌķgt2˜Ēl§Ųâ9™Z*éÄUyÄÎ'ėōb’,§:´ī6¤Ũž˜)Ԟ$;`>īe/čzŗęuĨG­ŠNĨķ9“}˛ŦÛ%‘kŗŽŽō†CēæfâžæŲŲEŦĐEÚ돡OûŽˆ7)ZŨšė$tŸM᝙ė˙c]žę”a6MÄ0Qėēs%–ĩŧ?˜B¯@‘æcbéöãÚ!ĨƒQ*ՅXöfzĖã=›Î“8˛ķšcPÚ'ÕZ[õžØŗ0­ ¯qŌĸŽÕå{-Ų×ö§äíO—1Hątõ˛AVēŊ‚Jà ĩŽFÖ˙[kcŖE[ų EPr-…Ōwš ŊEhŗX] ø ^ŪYļÂR­ĀDX˛ $¨+Á XWQj)N(x l:Încø6OcÂBËō,@P`ÎĮ˜@ĄŸē@FtŅMÖŠ ũŽũĀķgē°bøÄU€%PaéMžôLĖˇÉŽŽÍˆŲˆĪģ_C€™į-Ī:0)â) ,ĒjUĩÃŠÖĄđ˙A‘5e—;´ŅB™'õB…=r‚x“jÖ# č_’9FcQĸU,d Œz‘]¤…kfžv^Q8HPʍ$Ml5žø¤-ũ]Įʗp9ā‘Ķ|iŧ ĀĖķffõō‚W¨ŖúZą>ߊTāá×ėˇÎj0“IA–"¤Ŧԍ1•Ģí¤ĨĄøėÃā›dĩ}üã*f!W­/ĸõ9…ŧ`› ļtŗZ—/ãŧˇe™MŅKÍ k>]iĄ\á4`wÃŌ‰ŗ}Í܂YÖL<íhœˇl}MrÅúeĒÆDŸä5—ĨŦ3Äļ™ņaÍLÖ<• Žŗqb´đŖø8šAģ‰íöōgyĩ!p.ģsž2‰{t˜ÖčŨ­ŋĖԂ9m6E3Q 0A~LĖz~Mδ&ÃÆ‘)‡æÉÎkc‘†V—åÜZåÄë E51ĢÆa” ™3•Å÷Ŧr%-L‡ÅuRQ%*ĄŠ‘•|ŌZķ*ēB˞´Z)å dQ.‹hĩų„?qÁDEč¨ÔAéĮbÍËĸ*PVæ‡%đōįų”Úĸ=ˆŽm[īĶjžƒ€ŽŒÄŌHtĶQà ¨é$-Mo­ +ą€ÖēÂF¯I­ėÛut‰oÖ+3áMC53ÖÁ*­lÅJ‚˛šW~g…ˇ¨´ [ĶĒUäŌHVė$ŽbhrĒM+UQ÷ŧĩ́/QŽ$ėĢjÔzĨÖk×Ŧ|ÛxŠŦą)ômĨ{6IZ—ĸž€nļkĸ›ŋoņöÁņ7…_žų–ļī/vĐŪ Ė¯Ōwēv/”ŽöĪūÛ`ūhîâĪw?Ŗp­ú흃ų#úē ”Ģ+ąũ!0û§fG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽč"0Q°ãĘōG}ŌE`Ę4Y‰ĐA¤Ģ8sŠzbÖøõĨ`OĄĢĀĖHNĶÕiãŊŅU Pšg8ŖԟydŽEGQk包SÂǜzŋt­iĸaûe8QŪKvΤWۙ™Aŋ§ xđĢÂũ=ĐÅ`ZĄnĀųežAõčŪķj0¸v~YŌŨ6 }Ņ-Ā$w†o¯_-ˇĻ,yąä&`š°ũŽf[ûá|x،#Ēôͧu-ķßL+ÉËVNßZŲäã^ ÔvG#ôgĒrŖŪl!ũ2wūĸ!Í1)jÃÁŒšŅ(đ˛ ô´ëÔ×éV`ēfû›ŋīŅįė´v UŠķČgĢk”Ū Ėb¨|kđĪT÷Å*‰ĘáøũéģũaåŃ7ôM8?`ž …î &ĻîÃÜ SP`ëŋy<×Æå°­ĒH›Ū3:HIŧŧ=Ņ}ÁŦ¤ČĶ.”wģvé•pßÅ$ļ=’ŦˇÛ¤ šo|?0y€3|Š;Á”h ũÎŊĻ@™Ē.‹&)AbLØ8ÛoåŨĀ„šƒš.Ą_˙RžĐGmFėL^ȖÄ|)Ũ6ÆB(SÚîÁĄ9ÔW0%˙ wpĮŽčjm6ΧRäqŽą¨!úüļô‰ąp8\ų^§įH(Ų‰+tž6Fĸ’ÛäACMPsaaŌ}”‡’=ęZēLķÅPA v¨DO]c˜~(!PdōC䕤UČH¤*ŅôˆĐX“mƒČfK™ŨiuÕpéņđ˜|­œī&aI׃9Û  ZĐSąMmQFŠ*™ō5DķiY4+ua@5KĶEøęZÅVĨėHÃ"ŽJMí~P^ĻqĨáčŌÖˇÕSŠBs˜4gqĘęB ŋ @>=<EĒ+‡ž•Y=ŪĮ‡€ōÃĩ:¤Ö`ŅÍßëčj0Iˆ$ļ­z8Á_øØ6ī ‰§5ĨMƒā€˛SVC°$z*O´8’zHŗ!­Ļ˙<.§ˇĄĢŗĀ¨S"âĮĸ0~žÛ•Bûg˛p„ÃH$ÆÂĘ 1üI°•—l)>öFa›āķIÜD)||?ēLî0%pĨygBøY„ŋRd‚RĄ;—€Úé />ĪB:ÎƒŦ—ÎT”x?`åųĄ€_oŊXga#ŅgE‘j÷ IDATŒĄžĀũ]ė›Å˛ák,õ&OĖô\˙iÉųĘŪyōĒj›É™Õ&KŌÄôÛ)@‡ EÜëĒģ$qĩ$Ēí?NUÜvĸ:Lu-ŅĻJö(NŽ_]B—s& Ŋ!÷L“™œ?ŖâĖŨ77Ą &eX$:A¤o"1ā Đp…;OĨnCˇüGvÕ˛zr#“Ō{Õ°[áæ…R~B–Ũč­Ē—¯™˜˜wJ„ëŸũ4Æ_§ËēŖC`R”/.;މBųGÍĀËįĸļ.Pđö¸o‚Įü'U ÷Ĩ@ĸSH‘>$pë^UãjmÖ$%ĶŠ’§‚üX[ŦnĩG•–ņV`Ģ´lÆ`Ĩ#%”T[apēlĮŌ¸œk¨*˛Ū@ÁGĖ`ÜD‹Įv2֊ū€OŅÕ`’čΠܸ՟s&LSS~v{hŋ2÷ŽęG™)a/ÂȘôX~įÍÜ^KĻôˆŗf3¤š „U‚[Ŧ&´‘E„—”3°•ĖÍúf¨UKÕ$;Ē0 3']¯ą:o NJ˜G/įÄ=÷”¨Ž"MÍí˜J§÷;gƒ’Ŗsňby0‘ŸE¯(ˆŸ\uŸ´“ÜÉ=éŧc­4L‰Ū@á+ĪĒcRãHĨ76íÅĻ(]G\yĄUMNʍ4‹œ¸ĖŠp0#ümj"īĮT΂jŗB”š¯)PĄĐyfķ÷ę ÔquĩfČÁaԈr_“Ū M^Í båÖkS§oĻՏøˆJU6#đq/ž/j|Ģė‡ę@H- š8ÉyÁ| ~(ĩØhŠ,Ųy ”˛ÜSÚ#ļ2ŗm˙ŽĶ Ą†›z÷Ÿîų0˛đꤞnĀô͌e—ÃwJü3]O46iŧ ´˜žĮ3ĘԂtRxÛÕS`dfĘ)¤‘lû9zTdÕcaíëÔŦČÂø ĻPƒ“Îû@RaŠ\ĸÛ#ļ[T×af×P?`"OoGÖâČ͏l)CīņŊfl4›N3&ŽĸGWĐäÁ\›vČ5„: ŋlØŊöŲÔ˜°KvW-îŗ)åŠ/‰ž,¸âY¨Âž,{JīŨčÜÚ¤ yÛXÍ+Š#0gāą⎭Fq:×qAĐH_ąÔSvčČ=R9+MŸE\ļLA’Ogw˙šēŗn_í[YHņŧ&čĄByÃe°WŨÕc4‘ já@°h"+Æi–ã+Š0’}¯0ˇ€l‡p†l˜b§Ã-IaĻsWņ!ŦāéãŪ(wŋ˜īp:Ķ,˙ĮH"É=/Ô"Đ]ņč%ņ,d^nOT“ĸ¯–(4Âčƒ#īáEt˜_M{:I"CąwU\vŖĩ=ĀâÜÍ›hC]qŊ'šû'2ÚįágßĨkSúž9vŠKÔæâ¸E:ū['hĶO ÉĩŪÕ0đ¤‹į%¨I‰AE\+īåu‡Ō˙ˆ ×ŊMƝÃ4>čļHū ZŽ]wräķą:1L!Sf1ŋécE>H׀‰ ­Sø7“!7)Ŋ3•:Åu9& ÎRĮÁv-ãôâŠĖP\aÅ0˜ˆ +­ÎtēLÎĻ’=§ŸOJ˛œĘ—į¨ĩRmŗ/é‡5i›^øPŦV~ŖņŦˆöG‹Ã‹ŒŊŋk˙ĸKĀ,Ņ”P,.Ŧ,bįåyĘ LØö5l‰xŅŧy|ĘæŗGâ5Ÿs FXŧ"ėlŽŨˆ.SÛRéiúqŸ.n KÃmGĮ!– Ž–žnĮ2Es¯ ‰ZāŦ–čĘ[ ?ÕŌņĮˇz2ĻLmė?<œK†¤ž•Õŗ4č!\z× eÄāJqŋMųĄX^đÎÂayPŲǎbîWÆ„Įę{Ōų`*ą3ɇ2tÚÆ´Îé‰N¤%+ZRģXUfc'3›s]ļ2`ŒŦ~Ŋ؊žČÅ ^ĀqkŅą\6•a˛bŲIvž’ÛŌų`&™Zi\’eõ8 ‹††m{DK ¨nü3XGÄk¤ÕXd^Ŗ W‡™‘m6š ŗ&˙°TeÔJߘ€īŅé`*Ĩ"ÜŖ2×ĖÚ&‚įpūĊ,ŲŪ¤X-Ÿ]:˜ e.j–C+‹ÕM`apsųŅ ¤ˇĒėķ3:ˈŽyĒY” Ŧ–ĩöããvĪ+Ė,IaÛ;@ĮÍĘ›ŲĄrę˛ÄÚø*@ĄĖmčT[c4E ¸-ōŌŠ`‚-&Vƚ"yŗēÛŧâaäÍ<[Ōi>\h-Đ5z"ISl‹×aj}B"&ÕŲŲ 0úJԂ$ķ3PÃ\ĢhĐÁ™īR2šÆZŠŠöãŲtŸ‰–^Į*ÔļK–•ĮīüŅ*?žpië(×VŗüšX<#‚3īkgžG*ÎÂlžjnVwNV1ĸŠČŊđ2ãĮĒaĻ›=åN!î‹čô,.jģJ§˙&†?[đO9öúV3ŋ§s930}f‘4ēÚM)ļĨZæíAĻčũaāĒarÎĻÜYS€[ŝ Öjš,tė*ÁƒkH<,hŠō-Ĩx—ūKF‰Ņš`‚!ːÄ2ĮH /˙bĶÆ ĢŖ˛–ÕT€dèŦDbíWA0­aEãlb‰Ĩ’K=*1æ@0™ō 넎ŪĻÂķģt.˜ĻŠđĨ'nQī´˛vtĄŊŗbž‚šíZ†æŋTRŊœĄįŽÔ‹¯ĒažLîZ×LW˛ 2YGÅôĢOŸJ'›&HĒķ0ķ’&§ÂŠ( R}âĮcTü¸-ĩøáĨ´¸l~!Ī ō>Â<Åt ŌąDŖcjĩ;QĶ"ēočæ.ŲJgƒ¨ũ„P8B‰¯-›jB^ŅX!ģu% ˛Š4 ģŗĖŲhŅtRŸ˛Ļ“…z­¨ÄRÃ$˛jAŗUv:Ÿ3Š[¨LžĢË/ŗĀT­—‰}ÚĻÔs7 ‰āHŠÜm%).Ŗ#˙L)ŊƒčÛc­vōHĐéœY$ŨdbÜĀZÜâoõėHž_¤ž>SšYAĸ^nZ­q•X'…€1(ļϤ  sŠņWŌé`ÕčąŪ:Âb[‹ų¨ÔV!+3ŠrāGUkŨå&+aYLdOę*ö7)éä9‘ņ Ô|™]¤o¨ÜƒÎö͆bŅĄōK´34ŧ‰¯š_z}Š,‡EáļWĢąōš9Ņ˙ãŽÁ,ô…wāÕ ũۊŊÃk¨ö¯(§ƒYĢÉĒŧ‡ēĪ/ļ§Í.A­Ļ'Ŗcu ˇWË3åˆJŦJtĩw…{fŠĘįĮ;ŧ+fŦ6Ąm/o;Âjr–Gy…ēƒã´”“Ö-šRĒŽ盁Ą%ĨĻ%ĮĻZËē"ōĪ,gƒš 4įNÖēŒ7 IühĀŨ™.tÕø’ ĨWŪw˙DíģĄļMŊŒPۀ!ÉÚvSp_WĐéû™Ģ^‡4ĻuR¤n‹>ŸÂŖ¨×ęģo<~ĸĩx4} ~G%^ÁēƒUąąŦˇ1žwhų‚ÎÖf56‘:Â4åuŽ,Ŧ&îH’ÚŸ Åŋū6 dn.éë3T­„ZŖŊė˛jYœĸžÜg>äĖëeEņŪ¤“}ŗajZ§Õ’‡´-ÕŊzXĨÚŌHO“õŲCō ŖØÕŠ^Ž7oģ(cŧæb¤Šģ2ųۃ"˙Íé0}˛įWčdÎdŊ¤"G5T¤đ)w”ËtúįČëx6žmhęN ˜ƒ)k0í9Á¨˛ŦŪRę[96́‹‘ë万O~Û~ü$:}̈́ã4)}ĒM§Ä~#Ü.ž7;:=­XZ6YtžˇÍž÷`Q&ÍįŅË´9ņĐhęĶ ûļĮ€œMi–į6ŌũčüPËR`Ǝ´)wpšÂÔ/<âĖg(m}ģ5×øšįy Šz1Š€ĮÄ7?y,ËÃĩhžü<ô[mŠîD„ZNŒ˙a#@Ei’Z e íÅî`í›jmĨ˙fŅ\T#“ęĘ÷2–D:˜Yēvŋ¸Áé|ÎĖz> 4FĄÅĘoŗČká9‚)é ņjQ”´ÖúUeíyŖ„úÂĮíéÆ+LgBL^Œ;­âôģßz2æ ˛"dļš‚lR;ÅIŠVjnQ„ ‘Žļ9ëzšâŌëÛŋrŽŪa¯ŌÎd1˙“mjۅ%ĘCēØŊé1ëÍØęŽ>KsŠzōÜëÂĖĻ2ûƒ(ΛN$ĩž°g­OsŽ­.“ˆ NL§F—L’ũ—díų`š×nrĶi­‹ ÷…ãŌe-š 7RNώFß}œōjĢúve+lŨ&Z%ė&õâ–l+Ôb7Q'čß Ōģ Ŧtīrg;S2RŽlv”“)m-Åa#L‹„Ũ¸x Ķn=s•ÁË3`qy%´ŠņËíŪĢ<Ė3ē Ų61›g?X$œzSXŠ}ÄĨ}ƒŽeËŧîN Cļ`͡*đŲi=ĢĘNw÷âUēŒ3Ũ „ĐŒhJŊWz€Ē÷āÃy—ŠåSÆYŲĄ%ŪÁ˛°ų­‰E˙#\ ēLūY‚ Ŧ„Ā,™XXËáļfõô:ĢoĶÆ(%Ü€NKęeXĶŌR),üoĐ™Ķ.JËî1ÂGØmĢ>¯Hč30ŸŌz#-Žë“°¸W€öD„5öŅÂTŪęh}ēL_¯P ›Ũ ¤éÚŨ´ˇ50#ë?ūŧŗš'UqzÜBŗö^øæßAķ‚.fáĪŖC;Y{ėS‹Ū°@ ÕҧĻÉ3ZĮîéL3rËBų¨ skÅ_\Ûßâtgšl›XYûąNĻĀöĨ’YōÎėŽúūœÖ)HíT{ÜîŦëŌ“ėŸIēĸ5=´Î•aŲ°¤­i՚-3D‹&û,ī‚IsĮŽd]Äw¨t{+éD˙]QĄ mCŤmJSüĘNëūūOŧĶ_Nįj+tüž¸QÎũSŨé‰[ĸwÍĶn]—kĄ+Ā$›šėŌ­Å/5 Ũ)m{ųWŊ t%W×Á¨IĢÍģöņK:|íxôū4/áLĖĖa7âmÆ9ķWĩ•ĨšŅĸĄ›÷;íĸåhļĨf!…_ÜĀŲt¤,Ļu¨đ7Ņ\Z ßMĨļĪË&|'z~W`ūīöQŠą}(eŠÜnũė“+jį!Ņę˜×´Î¯2A¨Ž™?fΘ›įĄøúĖĸŨ]•Ųb“ī}oē`?3SŊļ¸ŅÚĮ @Yųqœcąšõ;ÄbéŪžHVŖ˙_)Ar6˜xÅũ| OFq´$Ūîĩ¸`Öų™ī`æFP7öЎ-¸Ũ zÁāũ'°<Ėô"?Nį’*Īčv¨ŒHö°4öm-ŽbŠÛ˚§ĸž{´b—ŌęAÅjĻܚNOļ}ÖĮ×­‚ŒŊŗÁV[Œfeĩ÷uĄC…Y×[(s\Ոh58 ‚Ūb˛å Ķ؍čd0åYLM ,<BX cJŨ¨Ī ˛mčPiŲ‚É0ÚuīÔ"giƒz*į~=ŒŅé`Oís.bŗ؈T“x?Ø;SļK¨ē÷Ä‘Ô\xĘÛÆV/Œ›îėt?ĖgKfIŽĖœ™X‚dįŧ͇<,[0Y´tō>â¨V›˛<ˇ”v~îŋÕ#Gî=čt0įBJ¨N‰íF÷0SÄŗîĪįŖĻ{8īi­uyU81¯“é=ZĨÚåuŋmÜ=č> Úv Bģ(ėvë5ą$mÜ{"Ōô0ō! ĮmˆØC5 ŨXŖ„V÷n įéEŽ6ŗ8q\db_Ų—’ãØ[ ĶúzxŠ´‰fGˇâãCÕŖĩÅ8é ŽlēiõŲvæĄdÅzč4ˆtÆĻ'LŒ Û RqŪÎđ1˜ōāŨuŊZ*šyŦXĘ?†ÉôŸ×•§.ĄĶ=@ĶÃ4hiSáĖÁļ†ĐĒŖčīŖ\Yg͇šŌc/žƒN7ę÷am1P¤fĖ߲6ĐŲ%Jį­—“†Ŗ§?ûžIB‘ģ3ēÜĐJŲ$ūl9Q”­÷šŠb5…T2Ɩ î[–“š Ĩo­Ļjé?RÔ+Õ\žÜCĶWĮĨĄģ̈́×mö'ģYLŽ@&§ŸŧĘéŧˇ sk´3ųqŊŪ”É)‘?’šŌģœ C”8Žž‹ļā,l?‰Z€Ō3s÷Æ/]Ķ!îč :ĖČRFK­å†œĒvrüč#ŋĶ+Y,>:Û|ŗ? 3&Ž3O°‰ōˀÁīŌÉ`–?lÁŒQ=rvNĩËádŠ­´`āUJČļ^龖ōŖđxsc 1ÖũŽÖÉšb–˙ŦįÁ[ŗÉėAĪ!•’#Īŗ–QÁySĘåÁáēĢ=HŲ'ŪV/č˙€-rs/ē$ k'ĮæO deååĸŨČS(g3bR\oŦlNy4ƒŅg6cY,wEęŗģTT†LļĶeëįËŲ˛d‘Ī0]On?Œ {"0“—°šŠûnK׃i3Å:ā4Eaha_ —gĒ÷“)īek›øßŋG&{ĸ—ĸ8‘ke˙ŨĖĀ%Ų2Ñ#omZû¨ĻsɆĮ–6‹•vŒĖ#0ųŒŲĒyĮr‡nfæIčúę[VØ~ ėE2ŋļj_ KúüúØđæ!e%9æ?R ú`ÂåIiiú œ PŠŠch¯ŋŦâɲ,õ^c<˛:Áíæåž÷§BžōŲĒGįņãgK7ĸ€YĩRÖŦ@ī>õÆOŒ>뒄P˜u.`–ū¨Čp^Šų4dÚ°؁…b:ŊŊĒ?Z–rdš Î|›&ú°5ÃÆ89äUzŸ=újĶl%IļXU6ĢŊÚˇ–f˛RŨ˧{…C¸Ō2ņ—ũÃĚ:¸ãA˙LGÍ{€‰’ÂčĖļ.´NÔļNĘ6ņëĪÂ9´…h+E!ŗĶü ͘’Ų{ûƝ6rG§úŨLļî’0!YmŒ;=0ˊÎJÍeqžrā#˜Ę`ôŒeõ4K’ßĐ2Âņ.÷Ũč`ą}ˆõ|ķî1ø´î†Í”…i]ąÔ§šõ;ÅÚfō ×´–ĐĄĩxūeöF`*r¨š`%ÆhėųL-?Ą‘ž.w+īôÆé‹ŽČR¨ícŗĒ ôË$üķé>`ĸ }´ĐgtUߎŪÅŊë›P–ē*H÷ ŗ5ۑ›7ß XŽ­Ą{ŨŌ{€‰˜g$ā˛^-…cö‹ĄÛ’wJ3ĒZ Īĩ^Á€“LŊĒ⚕žėėŨX¯?čēL”`I0FŒÖÜ"ēČ"ˆEđ^‹U5Š=Gv$ĸÆWŪ8˅gHA+kíģiõ‰>Û1ģš.Ķ’ø˜t`ųÉŦ“NŸ+[ˇģĪNÉ"…T0ĩ„/ė-o2=ĩ-ÜĩāĨ0Öģ,)¯ņļn÷ëÁĄ-̊Dxh#—EraÚã*V— WžvQ¯ƒwāhMĪT˜b‡ē?ÉÄ~áuāËņËmĸ{€É˜–j×41]§ļĪK;Á6,|StYĪJšƒRņI[‹ā0Ryō]øö‚%k/÷XŨzw­ōt0éB…'¯yė=~„åĩįVĖZų lŽøą1=UgįŲēö¯—^ˇŗÕÂđ”¯Ô”Q _Ēēõöŗš.§Û€9Úf˜9Ų­Eü\Ē4š&6ŋŦøl\œÕŲ˛¨ûW“¸[į"Üy÷P]­”0ƒUņĢt#0ŅŲDÄöL|šâŖ\ŖĄÉļЍˇO–J4{ļ‰}q˜z[öbŋ™‚¤ËSâ7„ôˆÛUģŧ˜Vĸ]<Ú<íŅSáĢžˇÜķZK͒¨{Ômę6ķjYû‘Ģ]&sEĖ_GwĶ`ôí olâŠ`ZØÅĘI5īĶļÍŽVmņ}ĨˇĐŌũœ õž)jJuīģÕGŧ˜ŠVaÖ>Oą´îJI‚q +ŪWØyréd{|…ō•ëīųī~ũYîŽqmE„ižã­$í=ĀTšpüCQ[ÜĸtŋNļMė8Æ >ĮrŲSĶGÚĶ9ĒėäŠĐ8f[…(žGMĘŽĄ{€9/ØŦ@a;CÎOÉË´A˙ŒØbi2Æ|Re“ÖļŠãŽ­ĮoėūŲ3ÍØú-T%éV{wĶsÎŊÛķšLsAa I”PØÅaęe ĩķ°§Œ6jĶ.Û>D;CĀ ŒM€T[-¯& 3ķædE„?„5Œ5s>ÜŠXŅʖąøiŒ_¸TÆÂ”I×ĖLƐĄËJõ¯>Ã~vš,ų)*CŦ¤ÅĨzŦҤ‘đrûaq‡fŊsĸˇŨ-7/šTŋē4Üqų˜oœ6-3ĩå'īj2t&ĩŌÛZéĶ„āmD3]„ęÅ`rZØąīudIŠÍVń2øæË3­ĨDHzlf͏h‡ã%Zē™`åUãâ÷fČSĻĶŧÜ´1“Ŧ ŅŲ—.ĢĖ-˜(Ž$V{éuüĸĮ>ÂīÃđssõ$ë_ēšēõ æB¸SfqÃãåÃM¯‡3cŠŒ¤5ĒØ–šš¤yoĀĶĩ`Ɛ…Ÿã7 JYŲ$•Ķ%m¨jŌŗqbË.a5ÅæÛw\ÜĮhû&&ôĸō]ׂ‰Ēön0ž.`*M–sܓ+{ŒŖ ˜Ĩ‘ĩ×Öųi)-ą~%Ÿ*&’J´ >–?….ŗI–{ŅÁc,îrŠž7\äÖĻ–ZÂĖäˆôŦ[Ŗ-ēr°ũcĒ:y¸(ÕúJ0{ũ˜ÜÖÔ˜ĖMjö ›É˜ž–-`Ē^=ĢG€œ^63úŸ?¤P‰–˜. ÂŧLmģļzZ(.!8Ļō´Žō¸Ē‹&ļŸuŧM]îĀ!J]ĄëC Ņ~hĀŌu`ޟŨ7Š@†šŖU_36`Úē៘å˜^Öŧ‹Ÿ-ĻÆŧ"ä ˙E;sĩI˙Š‹˛ FđsI¯%gÖ/Õ-Ę]KŽ{é ˇMīĪÍ}ĖH†§€_Ĩ;x€Héų:Ŗ–ē€"‰^ōŠ$Oû÷†H …f?¯=Њä!ōã˙‘ĻK“7of^AŸÄ/+k^$fiŲđ_1”+1e„(ēļüöɚņ}ĖŽx^îøût0ĄÚė.6ö‘[2ˇ§ųo6 ´Ō 0­lŪ‹kZ°ĀŨö˜M÷“ąÃd:ē[Ŋąŋ^ƒšŅ§ŪĶPÕˇA:Ą;yāÃ>#_¸Ŗ=ÍCûdu’7LŲ9ķc–Éåt/0šß°U[˛ø]1!+‹č‹Šž¯ę8™3ū7wzKē˜yŨdAÄmá§öė‘•Įô–RËŌ{õļōgč^`29ĄđÄKĢâ0ģI7ĶŠíuųŊؖФ7ôA÷Ķü;§ØŪ.ŋģAķ~`ú5 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų]æcŪ˛ž“7Ũ]fJ ĩ`ĐÃ˙°˜K˜Ū/g÷ēíÂߥËÁ´æĸ(ĩ–bŒa6éÍ˛Ø¨ŋÆF3_ÅeĻŅ­úūÍÕ`z37™&+§?ą4á[‰ų­ôė7ÛVj~ÜĐgũŖn^Ėâj0“Õ5/`zEŧđgĸžŒC¨ö |…˛°(åĨÃtķÂl—ƒŊcĨO”ÕûMoÎHüŊžŪkôÉR)LĨ'j˙nŗčj0]}ŅŠ<õÖŲéõŦe^n|YīŨĻBÛĶVēX`žC2ĩ"Ėú‚´jjÁ|ų$ŽÎØ)•§:×^äš˙ ˜Y~ˇWY7ŗšßōyW0%–ŪŖĻ´nûkeVŪéė‡&ĐŪe*Ëí,"‹&eÚ2z YgãRšÍmŦÖûãã˛s•ĻßĐũ ŧ!˜Ŧ1‰…*ÃaÜ$D5­5\LķÃ(čcš™ @åg!˙ŊgßL°€2˜‘bĶ˙Ė„›×Q{X6íUtÚŗxŅĩęĒv_Oé>`ļÍNm ƒqEœĐ\Ļi ævšÅí|Ą6 xAEåXöysˆŅĖ™qšd،¸cņæĄ”Ĩq˙įoū<ŨĖ͚I;2ŲWYČâ˙+ˇ3Íėw˜ĸágSŽŽ%ká0‚ŠSˇhë“ŖãCw|QŠ2{ÚJåĢé&`ęLÎmPcɇI[iĒVû~Ę|“IDATZ‰v~&+V0§LëđÄ÷•‰ŅC̜G1[¸,~ųcŋF7šĄ-˜œâʙ{gĕ˜Ĩšēú$ڀ˰p&ŸōžZŠnlĸs͙hÉP÷Ņ}]I7š!ŨŦ™Î™ļėí6¤^ f(.ëəėéįãķOŗ4Elŧ }}Šë1|]ģåqŅžšnæV˛ÖŅ„kķrˊ5‰ÍjÁĨmsřĖ…ķúîÃUB{q0ŽēZæģ/;TIˇSŠ˜ĩV]æOßöCežÕ&֝ĩ*æ%Hv˛–Ū–b'›CĄQ_ÃŽåÚģҏėÚ.WŅ-ĀÛ+S)ĻēĄŠl—ÃC#Ė|˜"čU<ą)J˛Æ‡ė™Ę­Ņ"nmįĶzŠĻŠ:ø+€i—ŠE)ÖÕÁŸąņw,¤ëč`ÂqkZkĀĮmD1k›–F:=Chížŧ›…Â`īZ“ƒņü[vĩ´fQ8)?.ėOCøËpĶŽČTl°ĄÃu‘ Ԅ1ƒtpæ[¤¯Û…ņ ÍM”gŽ„$x“?ߛÔ%RA§Ü ĢnĮčŊę~ß[E¸ÜĖŊķø˙„Ev<ąoôcŊ9ũ+`Îßīgølßíßh™ņī€yDŸšb 7˜ŋŖĖ‘ŪĐqūS`Ĩp#­ôˇ4Ā$­==˙* 0Iž{{ 0:Ār€iÔ”ĖŽh€Ų 0;ĸ^Áėcü!] æ—æ\ŌNŖĶÁ\&Y™@đíŽöôããâļŒĪŖsÁDđ€g{aãx !ČÛŗŽmåāq:HË}bæëķ’T‚}š˜SōõÔĢşû˛ęķüÚæ„8 ‹dáŨ.¯Ū¤6ŋöéiĖ3H§°ÄģÉ{Ĩ ZJWŧpĨ†æ ”Åc–•5ąü§§—|Iy‘ƒ58ķ ’€ä_+—Lä]­vmŒÛĩvslčÕ~~Jįs&ŲËųËu!MájA—‚p8$Å2Ž9˙˜Õ0Ļ"ļ@+‚xŊų@ c3Ŋ¯+ÜŽęæ9[ŊÕÍS¤Ī ĻīĶų`*õ‹+%Ŧ\<ĒØ˛`Ąį&}H°-":¤Ļ@„¨L(ąˆg¤Îâ āL„Õū_0%Ž"kE5ZŌÚ@JĄ¨w×Đų …•3Đ<•LG&É2ŪßSB öŠ ¤c›1`ãyØú”,XYú‘bOaķÎįmÁkYōŗS“ÄŽ ķ9ĶķyđŖ­nŒōqG6m*æž' íDą×ÁF›Jʈ'ęÅr•ųõ#ŗÚ€é)0‰Ûf‰fĶWĩ˜uŊ SÍtôĖWū›aDūÖ´—÷ÅŖ0eY3-/wŗĒņ`b5í \+mi‡3Sõ/mËd\}{2˜Ú,eUF%ĢŊäîV/׎ÔÂUŅŸ_ ÎãLKžŨՁ6ĩŊlĐŊũ MšE¯p°fÎ,tĄĨyōÍļ2kēɉĩaæĨˆËqÍYi´ŲYŦâ‹ķ 4bęå´ghN;Ugđ„ė3UķPy1Ą´,”k0lŪ#?ƒN“ķ0-IEÃÁúVļØKŅRĐā‘xčōŧ æ<â诋đdxč#‡Ŋčõ°WžÉwŨbõ0e뉕ŽũV•–6‡NáJ¯đŲbv“[ūkfžcyđ„3ŋļuĶiMˇUÔ¯¯lTydM‰;ŌWö÷G™ž]ĀT^l^Š**=†Õ Ĩty§Tîˇčžé/>ā{CëÛųŸKžØƒ¯ņhđ“čž`~‚ž2ąĢj§Eļ܂úķ ¤rß|ąæéÎĩŊ˜?"ŊeŲBĖQŅąoŗLŽh€Ų 0H÷äIŖfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆ˜Ņŗ#`vDĖŽh€Ų 0;ĸfG4Āėˆū[á2¤˙ Š˛IENDŽB`‚leptonica-1.86.0/prog/lion-page.00012.png000066400000000000000000000066411506303110300175540ustar00rootroot00000000000000‰PNG  IHDRĖp3åĄ'PLTE***UUUĒĒĒÔÔÔ˙˙˙aŧ pHYsb&2 2IDATxœíŨ‰Vã8@akķû?ōč—lĮLŠĻJˇîí3ėÅpō!y‹ÅļĻí§ûį”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1ŋZĢí§„_%æ—ûí-Å$%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ ø˜í§€˙ŽÕ0ŋAķW˙ÉēúĢa~ųąū.IËå›˙ōį[ ŗÕRj}#õĀh9}ÃĨĻô­ėwh1˚ļ´m[ū˙¯=0ęv`ūb”ļv˙š’îī-5įŽ…Ų-Kke{7xj=ŪhûÄlåöå­ėøĸœëģ1ŽsJãŨYIíü÷kQކŲĮe<žĩ„Yh´vŧŠáÕj˙¯ÅÜ'ãø|ĘĩôĮH>k)„k×ëߊŋSŨsŒöæ–s˙éĖ%Ĩúę§øm[ ķdéŖ)Õ.Ķ_•Ē}SWb ÎĨc…ÄÖ_ošĢ…\ģÍĸÁÖ?ē÷ÁŽi‹ą\ƒ7Æq—.[kˇ_‚%Z s;ˇ‚1ö˙ÕmŧŠídŸ/sĖÁ˛ƒĩáÕw€â oûA­oHkĮžŖ3\ķÎå1;æėŋ$ÛZs1Ė1GÆ(Ëũįn[ ĖxČûƒßG_.!¸ÍíeŸ%k˙ÂnüØüĩ™Ŧ#3&ßūâØG#3~IļåRÖÂĖs×§ļ<kŠĄ:1ÖfĶl*ŅßŦĮ ­c‡g?ĻؚJSs-c؎i÷˜TsLß)žŅļØūĪb˜ą7cĒöÍ]ė¤Ö9*É2ĻŲ=6teî¸Ä›iėāä6>å9¸û î[Ķ[Ü9Zû÷JƒģÄÎm|åzœkavĻ~”Ų‡N8Är‹ŊŌļĪ˜Ō÷Bû'Jëæ[ õ{¸ũuÛ÷ë˜ķ<đxėŠļ<ĻÚíyVmiĩšæ8č˜Įøãåš‹R&Äņđ×TkyŪ{Šųqø9žM`Ÿ_ŋÍ_…v˙š,ļ+읇9ē­™4åyÅf¯>#ļįaVîG+{~:4žŧĪ‹íĘî‹b^;-%=ĸÖ'ßōÆâ+ķg[n’]ŗÕ§Šņũ×ūâs â}lmĖ×Ŋ`iŸ>°ûÔǘ_ˇøģŖvĄÖÂ|õ úX{ņĒ}ūÚĪßk\Dyˇ­ũŨ[ ŗÅņ|*yDŧ’­ĨöÍÕÎwÅ ųVV;š~o)Ėŧ•šŌí¨ããîOķ ŽūŸaÛyŊlž×n;QißÄáe+eɉw-Ė>$ã$[ŠãáŽãēfŠåņD‘Vqâ§Ī–Ĩ(ļ<ÎÛö¯lķēJ˙5(ãô{‰/miĢ{:Î.ÄąIØ%žõŒ“o)ĖCķŒig×=âũĮɞëy"qŌv<hÛZ€ÆU˛ūqÚ}ĪķĖQpõAÜΓųü.mž´_pÛšftœūÎ)FPĐäŊœOđĘf×*m|63´ũņáų/ö8S[į¤ēĩër÷ãWĸŪ/jYĖ­ÖqФ?ę×Ս˛§hۖĮ†5ˇãé=ķ,î8?æ×crmÛu"đäkĄÚâ˛ĖrÛÍe1ûĖŠũEŊ<æķÃ2^Ôv)Ž öxēûį‹ZĮĢûš ÷'„Ök5Ė×Ŋb{ķjĖ/°ũ#`ڙ˜ Ä%&(1A‰ JLPb‚s.;qĢŽJ) ^vūZXˏė^z´đķīŪ‡ÅŒ,j{ęü öÄ-ķLLPb‚”˜ ū`LŪNíŒÉKLP(Ėŋ4qļ_Ū´Ü<ŧf+q“^ģŊ_įG÷ũúčķÂ=õąō])):ũSĶëE›V^û`ĖX:ßūy—Ī\Žôz6{ē?ō× \Ãũv į9 دW ž­]먋`Ž[ŗęũžëåõ(?¯âtŽ ;îļ|Ŧ'û¸—s~äģųąÛX[hÜe7,ÄBļ+Ü}ģ æ–ĮRąįŲōãĄ2njŸ‹ãÕ4oS‹?ג¯…ãeĐÅŨˇe‹ģĮâŽé¸K(ĻæX#ąæÛ­ĩu,j7i÷oą•–rXVXIoĖXÍ  NąâhŒŅ¸(né+ÎæņЧ1ęr,vYŽ-âąĀAÜD”K‰Õ†ûDÛÆē¸ÔĢwįzģEhÜŅ7îĖcíī’ãnû%_[ŗõ-f7mmsmįCįŧ]ŊĻąÂs‰…+:@mšĩsVœĢęĩ¸>ۈeĸs'AŨß äõayu¸ĪĨĸĮ2niŦXąÄ5Đ50ķą=ė{5uŽÜŌŧ‘=æĘX;ķ.0ÖcĪeŋnĀĢC÷ 3o܃Ėš„˙6˙Ęģíņ7ŌąæA ŸËŲÖ5îÔ\ŗž‹ķôaˇÁöqŌįÍXë0ÆãđéžąnĖX¨Û^Ģ…Œ%Ųc Ë-6ĸšīĮ¤c3u+b §!ZĪkë\!ÅRŅņmÆÖ´­°÷ŗ¯Ųb)įņÆxŒsPUöKü9…–ÆmÎņ7ōüC%ApŨ›į‰¤ŗąˆwŽ7ęØũpã–ÚvaËĀ—ņĮSĘŧ4¯°÷ŗ/ŲJJĮЈQYÎõ~Æ[Ą’užŌ‡‘ņt‘ÛũĐ—Z{y āĶ_Xˆn€u‘šfėŨÔöt4øy‘ĘŋYũĀõôwÄō[Ė50 z;iu…Ã’HĖ—­ąü˜˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&¨/`ļöī˙öO$&(§YPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%æÛÖúÃbžĢ­õg@Ä|—˜¤–˛“”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚úĖą/üm§žIENDŽB`‚leptonica-1.86.0/prog/lion-page.00013.png000066400000000000000000000366761506303110300175700ustar00rootroot00000000000000‰PNG  IHDRĖp3åĄ'PLTE***UUUĒĒĒÔÔÔ˙˙˙aŧ pHYsb&2 IDATxœí]‰bä*4‡ü˙Ÿ<¨$>úHė\ÕîË$Ũ>)JbYn°üôîCéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™?ĸ¯šnéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:ÂKæåŧ˙Qx#“jũĀŪä‹T_dRYŌ˛¤úÖÁĩ¤† ķ"&A÷oīŅč!Ē9•7ŽÜxĪ5-ųîgøAü™%-lü#ķ/9nī`ļĻ„;ŧ6Nj÷mw,9,ķĶ ’ŅæĨ™ON?–öYãvÉš6V×väiÍís6kģW?øâÍļwϊ˙Ũy͡ņŊdRnÆČŲ¸Z åԨˉJķ[jû#/°×ø0‡[؍ž\‚(•OßāüĻT*ŋ‰ÔJ}‰[oņž—ĖšZ“šJaŗlīÎ?J#w-NĒkYkŖ­4ę{^Ė#Đ3׆Ūt‘Ūē5…­]i•si/ÖZšÄžØ7yßÜĖæöĘíĩ3e*­.%3Ë<•ÆjkŖß 4ŋãĮ<ĨĮŽMžÅ.Њ?ÜښÖõļgmīPZEm7=ė`}ŗq~3™­umüeގÍ2äļC6K6Ņ• ŖĩZYũtkUu›t—„¤=<÷‘írĨ}Ōžŋu üāíĄ[ķS™ÖËwúžÛ›mešCaž¸Ĩmu¸UææÁ,Û&´˛#ÄŦfö|?g ´ĻEÎkåģr; WĄ’>˙øėtķØGėąņĮ$ļĪÚÅۃgļĖŌŧũÆ˛õĄ÷öÍ/đíCæ°ŅÕz™Æ%q{ÔūŽŌRĩēM°NéBa­…ũ”!Ģvc…¯‚‹ÔüysA˙ČŊafōÄM#%“[ØĘļˆ÷cŽũãœĖæpOÃ>[&7JÍV¸gØ&s˜šįŦŌô6c&4ËįŗO0â$nr›ÕË|ΧŲf‘­áom'ˇë*˙‡û\™ĖĖ.P%_ekĩ—h˙~k;ûíd˛QĘËf‹°âũÛīíŖÆ"šV) ĻŋˇÃ¸Å-īOĻōaėcJif°ļ+´›}ęŠQ›— 7 OVÕ8‰+`kbÛwlœÄžzĢĒ­knfü­†ų3@<>iŽOëO¤åÖ–Íŗy Í=bƒ´˙ÕU| .BžqxoÚ E&ëd÷$nsŸŽ?F÷2ē;í8é0V ÆëÆčnĄŨāÅîŗu~ mÅāTÔI<ׯŊī9šb•R :ņŋō”ģXŠäKbĨņĢČT—bL$põ?)§ÉÜė¸ 4O•G ܅æÍė¨L$°ĩ’­[UX™Y­~˙A7nĪúęđĢČĸ“ ]Z(Jxjĩœév&ˆ'“ ö“UŒ>{Ûŋ/}2ļ,lM/Ē6õ ¯ĒÔWõŅ .ĻØQs0kü+ZXāW‘)¨"9(ƒEqvÍkM+$DĪzie™āē˜õ$sꋆGĻĄė×ã9Öãė*ˇú23š§dõÃOLÁ>Ä/$sáû~öMb)SG:ŧ!’ô$-­¸Ā,˛#ĢUĘP¸rõXml?:eŦ`¯ę=øÔ6Ą.Î4|3,ØL`VđĢ‹âCø}dš UŪŅ›-2īą&/[pą˛æ„]]3áå¨>(QAr#xU'›­#I‚C0k_Į-ąî īĮÆšr{nˆį“ õ§ũÂyŋĖZɘå¸d!„Ų?^Ž`˛Ģ"Đɲ0Ą5m´ÚšYé˙ZŒĢ„€E*OĄĮŦÕL79r`)í'§`â“9ÔÕLĻ/ĻįÆl™ü˜°eKdŠzv…CKڈu—jԛz¤SuÁũ‘ĨˇāoŲá;ÁĒ$˔ę9n™@ļįŒîV–˜U§ÚZ^G˜ ˜št‚aÕp.ԉÉߒē„ÉŨ+j_Ž?F& ũ܊qh3K™kÕBÆ´‘hæ¨KžåÕYÂᝨÔy_qVaŅš¨2Pf|4ø7ķüE2WČę°d›ĸafģbp˜ē!ēŦČšĩØE`–zQž×-:ÖÅĖ뇒]üüI2Յ5˛L|Ņƒ ųŽ1 9_ae9,•{UâIwYüÂeF;*?Į¸öø›†oá’ {ņ ~ëâ„Ŧ:‚JŌr¯™Ä)ÖÅlŅę­E†‡tđoú/$ĘŦ?†ŋG&O×Qéū æHĘ"#IÔr#@ĀfŽüŠI$ĖcĄK~öĩ6uŽ~ĮZČûøƒdBÕ¨ĒroBŅZtņĸ"úēĘ,ī.SÄz Ģŗēĸ˛-Q!TČūŠ.ķ‘ŲË5›_IķāĄ@ãēʐBf{r‚4oēf‚¤ižûGž‚NęsK*]_W úø;db Ņ‘}ũ –‰%y\hŖūZ1_ŋ9žũ“øCdĸ°1 +ŗ˛ÖUjlz•ĪŠ'ÎÖ=DÖG:¨´ÕihÚ<í„Ņ›~į›~…LžØąE ™§‘…eeDlTæ†0ČįUŽŗļqt„2ÔÛŲ1RĄÁî0öë‰Ļž…ĖÕĻ䓟)Ž Ö%…„,b쇅/u­ŗ]Ĩ/œmΙļzsûģņwČTŲÖÁõYuŽ\'Ę1pœ!ßÚ)BoŌ'jĨ)g••Ņîų™÷ áĩO[í/ü4BųgҤM´îu:<Äq•&ŌĻuŗ"S4žüõou3ū™cV]ånĻM˲čZ_+9Ú'[Ä>ĐõŠĨĩËöÕÔ_ßmū 2æū@mn Žĩ2â—Itô›ĪƒÉ éFŦ=nícĪÆBļ`†5ˇšm˙•ø;dŽĢĻÖßÉē8uJĩËT.ž%mé 'iŒ‚*PŦųļļ[ŽĶqĩúwáΐ‰Æuˆe€ĸÁĘX%ōĒü”‡Z+˛%N Ë(Ģq†áí2ĮŠKû`Ôķķø3drC7÷•âhB% iÖ8’@k}$‚¤ŲãąÁæF";˜ę-+bā!č㕘ߚ>ú¯I'> ĖR§îĻõÎtX%rrŸv˜û*rĄ2]kgˆ0ŨãĒæ/üU2I—OôĪ­wۗŖMV#TdļĻŪOŨZá43€ęu‰ōëņgČÜ[•m€Âæģ„~Ë[US‡ČøTÆ8˛FvΕĸJž2äC„Î?Bf=ņ9”°ē2ŗĢ¤˙b–$ęgĻčPõ„ĖĀ;2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķn!“÷vųĻííĮžĨ>Č5{–cÔrYÖũG_Ķ§TO÷ģ˙î!séûΏˇ\d Ūķų)›yY}_xÜÍ%e“éelNŊÖåņĩõ“e_e×ä}Џš–ûrdŪB&ņs~đ‘>÷)‘f̜ĪßüžėĶąxÃÅM*ŌUˇ1.ĶŽÃô´ĒpŽéåÃOŽ“ōŽ”äōÃē÷qÜBf]^Õį÷ŠâÁQåõ›—ĶGáëĨ´˙P7OƒŸ—EÕe•÷€ “éđÉÉS]Ā-dĻSk°ĖÚ͖´ęķŖWÚZōYúBš?[ö–c*9t´Ŧ“?âːö4āØzkĨĢwîC~™åÔ0K¯Ã­Ô˛ū[ĻŊ 4‰öȚŋöŒéēųÖnƒKʋ&L›ĮĖÉ|‘ xW8}8ڛĩĒ% ŨŅ6vŲŧûæ&ĩ.ÖČ÷d™ö‡kô[ãWč'hĩ§.ęR˙y™ųÄ0Š*ƒø]7cŸúŪô› F“ģ–ö× w€Đú\˛ĖXûh‘ÍÜy/ī´Z%i%šcÁNÚôyœm´¯–e“ĩŊŨJ˜{åf¤=´ģš”ņJ|H*y)zŽätסÃķ˜mŌüs‹„Ē…›oÚ$ŧ/ļpāæ’=YŊ؁Ū@fMË1š=•ĩ?X•—$Jyœ“xoõUė…_‰‰æw$~7ϚvmZ­ėČV¸+ˇŧKīMĸGņ=ßsq‚ĸœâyYvÖVÕiãü´æU4ÅČÁ_įWâÛ`DTB’†ŗÚ¸ĖĪļōũ§ČŲzÄv̞š;WVä&Î Wu9ķ#ŋī{œá2ķĄ›ZeGŸ‘s;Ië9¸A͆´ø\ԚšĀ˜Ō”kûĨōąeķtBŧŌŋđ^¨ígk‰Ķ/“?ŪvŪŌÉļ‹åPáz§…ÍUÁ"ISph{K/+ķ†E•Ũn­+Nĸ‰ Éî.'”ƒ—SI_ŧđÍaõxõ§-“–Ã,ĶŽM­ū'l>;uN\kĢîqPŲ¯ãzZšæķ/íXØHÚ $¤.“ūlĨĐ*Ú!ÃT×­aĘĄRŽ~‘>uĢ0ü€b0Ú7vũd”ŊžYҏ7R¤V2ĮMÄßŌG8p”{ÂV K˛ ÔkcÎëd–cÉģhQß!¸ũž°ÍÁôJ¤#:Ū‡¤ŊĒnJۊŅznÅ6c>'ĸJąKŠ/œtĢ‚ļāÛGԊūh˜âqÁ'Ķ1Ÿt™Ü‰•Ũąō$bä¨HŊRŲ|“p1ŨŽ7(>gđvxļĘu\h¯T/zļ—ɤ“ŗōÆÍÚAļÚË5îĖæ ąū˛īHđ úxĄlŪMŧi℧ĖÍsAš 9ۑē ŸØ†Í-4Ģ=‹õét¨ŸīHö“Fé_"ˇTŦÛĖsO’z‚íŲĢŽ\I|ģk¸Lf9N¯É(Ã^ŗšlI_ŖöžKŠŧķ͝ĘĻÍ!ņSač7IøHŊâŽiôëAčļQÄæē[épļëž{š>L˛.È'šÚŗaI’„ũ}ĶĨŖNBUāzVšŽĪę]%ķ`˜dī”tßCŌÂ*Û^+ŲKmMR'EÔ5Ø:€= e˛HC—å낿ŒŊ˜BŖH„ÆŒ§;lXˎâ:—Q†˛ķ1NR§AĀâ^q-4ö:2L1ŅĻYȸųų„]ģ3ÛxĢNŧ‹V”kûR]$ŗ9ķû‰bîéĐšÉ+p'XņĐģVvŠē_Lģ@•- ´ÏŨ|š ģųĨe]ž‘[Ä>™…eŗ×"ŗ/E=Lfc8aFĶÎĢbŸĖW‘y#1 cáŸ-2'ˇTŲe…MđĻ7Ë9šģ3ߋ›Žđ¨ģă´ĸ-ÅՕ§Kdbė›ļMXÖĄ¸¸ŧu¸s‰ë~™\Ek>ôÏ)ßšā į¨Gˆ[…/Āī#“WäˇŊ+Īō|˛zŗw{˛*r'ZÍ;î˸‘oŊûiGøU ů#“ö{˛ĒãĶļUNõ,ˇĸûoÔ¯ŋųŋŽĖ#ĘëÍŨĸ9Ņ?ˇĨ0ī ų­7˙dŪR?Æčwâw’ų_ũũød>… ķ2~O3ō›Č|Į[ /(<ē2ũB˙xį„{q™ØœûÃ:č6@›Ļ§eEäՍōÍŖpČŽŌƒ†×gOë15ŋŖŠ-_8Xš+քwįN˛~ū>vK#īIį"į+8WŠžšÕ€Į)õčęĪawû;p™ŊvRū Ņ”ą4Bī6 ŸxyÅ +OskôNe4-đ§į´žáA—ŊÇģ3JĪc€ÎĪšÛ0Z¯OĸĻ÷ë2}āØ÷qL4.c}˙g~&nãūŖ퓸H›!ĸ™{î;p™ĖzP¸ôå ĘÂū õGaÚČõŠČLÚY˛6 %ÉžoaÅzhŦÖŦOu7L[~ũŖ`炓ȁ~sš‡öq,ėnh‹%|8 ]:>…ftˇšŌƒ0’l~ÔR/Žj^&sģ^Į’‚ĸü,ž',ļŗNyŋzQįu-Ę*]-ĸmÆ45õĮŨr՞–­hßēÜŲ¨dĀ 9‹‹qd;GîÕĘyīĨ”ŗøČR¤#e “ę˛*Æđ)ž,œĻāž†”+BbøņiīßÖ´Č[,‡†ŖnĶQ`û!\tí›JŽųĐC1ĩ&g=ÔîČŲ0+ŠîŽŠ`­q­Ŧü¯Ûõ@šyņĒËA|$= qx ™Õ•¤~ĢDęA[tĻŽŦÅŠzi‘ZU‘Đ ™ĸ5ię3gáA TŨú>eG™]`=.ĪōŖŅy4Ũû¸JæžĮÁëi ‰ę˛ĒŦuŸ5?yU-B ØÉaĄw†q~=đOKņá)OĄA­ŪQĢ‹ˇofOúíîŅÉ#‰nŽõDĒÛėōZâpqŖ ËBĨbķžĀÒš˛Ŋ’žũĩîû*™ģŠ]'íī¤DŅîúĻŨ€ œh)u§ëR2‹Ļ›áqwJŖ’kĄĢÂOxÎķ¸} }cÃ6lUjÛÂŌæ yZļ0<ric"Q&‘Ušoģé1š\/pt3øíéL.ô!ÜLĻj­+ą™¤ē­u”6ˇ÷ī¤QƈžÜŨr¯ũÂū^ÉaÎč+Ą|ÖÚc–AIUīywy➍HëvÅújĩhŸŽœW]ũ˛Z ā ŌI¯htXĢ$û˛_}•Ė­˙S՞◠ūP$æüy~l˜$M'YtˆFĪÕMXÕǚx˜'Ģn§ŪĮč[Ģz‰ĐG—¤m™tUi9HøčdŌĻŋ‘F“hlK.Z1ĸDߙėqŒ‡”G[tâ$/ō@ų,-WɸŖĪ1Eí-WS†×å yš XäNuRû9|qÔÖŅE)ÉÕÂüH#YjFL—Ä\Ԙ]D%ŗs&œæhˇŗÅę"ë\•+5üJŨ CŒVÆ:Œw[VÜcJ€Û”EĻûíëCËņ1ÜāÍęs•Ēē^0Ú*oë1ëp=v}Õ’ĮÔŗXejP48ËķāŽčŒįMÄ×F ×Ŗ*eå#šmÄ}vY÷ķÜgŗŠBĢ’ēxę]ųP¸v7ˇH ēōķ4`ëŌNĪŧĻ.ryCāVHC¸re„ØĩŅæ˛ômg<)Īîaå ŋˇF—ˇ~FYGSņņ8ŗ}Xķ*žŖŪ7§"gŦŋ˜V?šđŖ'đõķ?ûä7‰øžCi°ī">tîĪņ3ˇũžĢ™ōÄ<-—~Nēúá‹-“ī&¸ü|u3[kPų6Ž–Ô÷Šķ‚Ķ/Įo’Z."Čt„ đŅ™ŽđÍd~dÜŽa™ådĘúf`RņÕŖĨ-xtvíĢ˙ß¡’I™ Ō˙žÎ`S"ˇnÕĀpŌ‹Y*ĘO2ų??s“R_Š .įÂëKQ/ßLæĮÔčĘb‘Uɍü˜×đŌQų¸ą䓺’›å0)‚CâĖņũI×w’ų2ķÆæ=6GĶf1j€ķ—ūTQŧŽGĨĮÉíÜ{ŽÂĸMÚfžĪģ”Vå[É´ˇ:]˜8,q”mē­šzČ0ß(œSšę|ĢZæÅšūyu}3L]ĻÕŌ7ˆ˙8n&“Žŋöļ šbYáĖ™į5Iŋ~‘FEĐ?hīFœw7otB[šĨœ°ÍÖ[JhH?’ĸ}}œ÷˜äÂ=Y}ĘëąjŦW ķ–íŧbĖĢĘĸFfäžûgɁx¤neܤ"s$á—"ËO/gKŲĒzrNŽß3ģÚĨÎŲ*+jĩˆÜ{\‡ž,žm*xHųũDūĩ:4Õ,:—0~vV’*ÛËÔrÖxYŪnīXFI=_ŨU‚Dæ¸Ņ!­ä‡p=ypf-˙E‹ģ¸œ9=c’ŒĸœĢĒ3¤‡Ũ …3´Í÷€ŋW’JPY”‘IŦ ęFwŽ;b@ž3ĒŊ䞯HšŽÁ XģŊ Ė.L‚3ŋâ*bV$Q‡´¨äŽŊʲ1ĄItD‘ČZCHúË2]œLÂĪd,C;¤Š”ŧ¤K;ƒ]t‰XI뙋„Ŋ˛ŠÍ™ Õi—á´ˆ4UœÕ˙¨Ō(‘‚UdÂF €5ļsœJĄ!`ī}L+lUkÖÕ2z{–į˜U]ÄDRVÉ.ŠžËĸ¸ Á¨$Ī>oÕl•üŋÎĸšvũąĪØvUš.z™Üc*Žm^—Zm1Ƒ,ŗ,DlÁō¤›îĀĖ…ũē\DxĘ2iÎe*ûômmÄo˜ũ‚‘)}"Ķb˜‚.ˆÎīL9lÄfĖ_Βąģ¨žGũ-ÉĢÎwáhČČÚ­ ˇLĶMĄEFb‰m˜/ŽkĘ*/jĨ^eXŅ.ą%Ōü'ŲĢŠķĨP‡a†3ĮŨh!“jĄ„žeŗŗ“ęQõ”mžôéI*ÚÛzW*†0ĶėĶËp’;|J†ũ´ŠC˛S‹Ü´âŲ;H˛[5܎'s){F˛Ëu‹Ŋ„ëdö§,ē“ž“KŌčîf§nú]ũšl‚ŌH9bŪcÉ M¨ļ|ũõÅU‚ëŅ“áŋS6ûĀiuŌęĐ=nęÍ6Īž„ ņŋeĩĶeÚ¨LÔĒŋCIDATíĪj]˙ČŧéË3!WÉŦYˇJĘņu¤Ž¯]¸O¤ûÉĻ ƒl1nVĸŖÂVkŲt;‘~˛ˆ‹1&ēa˜÷D?C9Ļԟą}Tžĸ™LmŸˇ7ÕM͞ŞŒiHĩ?‰A’0'1_ۈãáLČģ¸NωÎmŠûiI$$oše,ËŋK'ŒÄ‹aËę5J¤‡˛Ž˛CIōtA Z+Ļ„öÚWÛŦPÕ6ãĨF|8Ũ{véŅTÎ>ZŪÍ:BԁFқԏ)Čâ‹OU8¯’ãß4÷ē' †8U÷_¸Äæ52šmŗÛÛčAQEb’3WNlŒ  Jw;S‚g +¤dî5+ēxę|$ŨUN51a\+ĨĖ]I=nkH›0 ŧ=?ÆnĨę˜Ĩm̟Åa•˜”l7Å.[8G-Œ Į­ŖŊšP†G,GénKWp‘ĖŅ/õb ˑ$Û˙ <čÚ\@SĀ÷ÆŦZÆ`„āhÅĐÄôŌ'˛í­&MŲ5%ŌV#CäöYĨéOBåxë‚M„¨vĶž?GąËŊø˛ÄüIę~G$ĸ̓äŠɛõ­Éä.)-›ŅŨ~›Ų‚-%¤]ĩ'ąõ;ņ7ų"}nĶÂÉķôÛÉGÚô­û û4˙œ¯NOÛÚÃՇ­ëéÕ\˜ųĢW7]×ã4â”Õ*Z§ß/ryq+Œ*ŗ?Obžģ|yš—|āÛģđŽ‹ųôIŪyĖ›^å ™š?āl?ķO<Ũ÷pķ!ĐGōũ‚įŋBĻ:ˇĨ¸úmāčÎīr˙“¸BĻŽÉęvAĮ 8“ËW¤+ü:\ę3+īŦôpķ€?zi ãpŅ›ũ•YāsŨŦ#\ĩĖ{ž"p Â2!Čt„[Čä´Ķ įÅš$0QmÔĮÎËSKočdĶâT>¤;;´Ļ“-Āö›Á~n!“ķĒŽųĪĮríwQģrŗŅo¯ŲÖ­ŧd:¯ÎΟ¯~dä,+ŊŽÄ]šė'qO3ģM.v9Ôgˆœi]_ęā6‡ÖЋEΏˆ7äĄ<ģÄ唕oā˜ô3돰‘‰|ĀÎ7Š›Öōų€ĒŠÎč§Õīļ×Ŋ‡ĖĮzœŋĀé§ĶrÖ\7f{ĩО‰NYĻÔCņŌË}dCdMø˙¸œtēå=ũķs¸%C×6îĀLŗZęUÉDˇ[Ņ4Ũœä >S×ĩö5¨…õCüÔuFLēaâ v"‰Y‹‘‡¤FÕ˛Tmëâ̍V×íN(të(Lj›ķą>ˆs' õmæ0…žŅßDu2^ę[Ä|ÖÍįOŠų5î s+Rí[ę@ö­+ė´ÍŋĘë  Ž$­ˇŧ¯„Ī'™/~Ëz~ŠíČEĪ€rĻčmXÕĨØ˛žOØTv˜fęß4ŗškz+ĸÉ6›ČeETĮų)+돠GL~sEcÁĨ0˛ÅŲ@JŖĘjūŨâ¸Îā/ņ ]pÁBųKŊ;vš}HėkSƒå”ĸI<§;•.t‡Né9EéÉȉiü!¯ Mߟõ Öū‰Ŧ-ë}Äđ6u‡×ÄūíŸ5¯YÍŨ‡{AbĨŌ!â<•+’œĘŅ+FrÔąO‰čL4ûĒkû,Ũ>âr°§h,]{ÆĘ—'Ķz54ĻdÂn˛ø5Ąk§9§ŗ0ĮĨۚ'.O2 ãČvŽWÔĶ4…-šQ‘ÖęMEyŦŠĄ,ēvZ÷>HĘĻ8' Äb)z‘"g û0+$֌ԚčÂ"â[î U“Ž9†ûëŠ;éŒF“å`ײd­EŌäŦīxq?ĨČÜzŠ"|í_đA4[Š ķģʚZV‚9æ!}ŅFsYČiø‘R –ēzÂũ´3LĄĐH˅EXWÆ)ö.DĒ㜎ĘZBÄ­y_'kĪŋ};D?ąTOŸ€å—ičüҌí˙EH[u3ŸĪã†ŊĀļ;ˆ!ĩY3ųŌ6Ųē¨ũŠkõĢÖn‰&Úhģâĩ{Ņq'Bm4lŖL•ŖĒÕn\YŠ$d;uŠ Iƒ¤hœēhiÉåéEÕ,_"˛ éĐFëféÚa ;§ŽzYęB{mš´5C’aÍ yæėŽŊĀäå¯Í.jžuœ VĢ•0‹Ã!•'ŪG7ˆéû‹ô°Ų3fU+i‡|¤N55 NŪTˇ=áōb&aΟ„~õ ž+™ūyö͆ÕҚčūR^ęOЅö=ē„ô8é-ļãŽĮg.iú›{O'u”ËGdčēĨųRM˙fĩœ÷Ãã†âžS¤Ī¤‡&Ųc$‚Ĩ[× ũ5ûPs_Gŧĩ‰Älp |‘̎– ΅Ŗ ÛčSj0Å\#“5ûŠ”d;iôzQthQ§sI Į,JG‡—ŠĒ„ÕÉgē%ŖlÎ`‰õ{ÛÅXķ|;\ ŧ‡ËÎķIk˙ØëÍ¯4-E?PGøōgIÛ=ęț¯˙u}(Éâ¯ß4Ķ×râ`ŠË ŗ˙ōât+ĪreÃhwøÃdĘČįl¨˙—LlEÖĶ]mĄ\āī’iŗŗ%] 8vƒ?L&q¨˛ßdėÆ&&'üu2‚LG2á^2ŋĢsĶSŪû"÷lšXį?Ū>ĪVûp…GĶ’´ÁĮnpû{Ũī;_į2Y¤Ö˙ø€R‘uđō˚ķŖ,PŲ’š *ßíûf|6ē=•xŨ|ƒ;ŗÍßŖÎ›ŗŨŧ_ÔFŧmn|ŨVŗË‰LæŊ4jw`—žëCZę7qëī!s[ß>O­ņɎ4éV¨š>­pûmĀ÷[g_G×FßrŨ;¤–Ÿ,^Ë üēeî˛Tē!į°7ĖĶ=Ū/ĄŪÚĖÜŅg‹÷­zf–WĮ5ÃĶPž´k“åK>8$_ ŗįÜ´OrĘiį+O??‹Ģ邷¸A' ŧ5ķŨX‡%Í,'{ĖÔžhK%knH,÷ķN>gqķĻÖMsÕĶæRúgˇƒ|^SŠ#E>$ĘŦ״ᤚųÛ}‡%*:‹Ķ#=kúvąÕSVčVUēÖv'ĘŦ^Ēĸûž0ĪZ QŌvaX•° MXWōE˙ę:™PÂ%̘ūápæŅ WÔw%MúŅĘĢËĮ%v‡II2 x%ĖATcŊBå/ÉŅ•ŧÆ+B]‘U$ÔČËOģ6…DšÛķ2söÕ!æÁO ûĪÅ"[ÚÁėÍļS0e­†¨@f5ĻB”QZ‘dKŅ+SŨ⁓šįs7đ]ܰ{‚*”Xu!ÉÚ9^€T'r=•ŽëČĢoŌÖ×ÎĖū+D}O€,Ĩ=áūb ZVĢgl†!–ÁæJ„hÂuâEVß­įĨ"Ké ŲǞ`~…#ũzĪIŸEޟäņŠĩ—RĢą§ÉMô ˆÉĀST“N‹XåœR~˜Lå l!ÉÆÚĀ–mRo˜q6-*ãĩož7LÕc!´`čmĀ JšĢ}.æ)ļ­JŌ|bØ&‹BāÍ%{“>ŦHĐ* ,3;?hƒĨYeĩ.ę IîdęžQIšvVˆ&ۗF4LœĀM:" T@āĖŗ¨6øgÉ\ËŦKĀJĮaŨW'„k=MÁ ôN@q*eÉ ,:Zëĩ˜´ i“øßž‰’ ĩDq§ĒdāųĨ O¤’<ž:[#Ü)‰æW{N,$ËuĢ’j4yÄ$Ę5‘m‰: o#1GĒžæ]Ūׄįä$ ? rŽ‹š°Wĩ¤5OR#“•û“8]ÃÜkŽzQˇ–ŲĩD3gĸđŗ ų¤ū™‹ÚQīˇĒYϤqî3šKŋ+ôŌbÃH0Gc¤ 1|A—jÛĒTڌģdŋ—ĒOĄ-¤™ĄĨâũhŦIM˛s€Ļ< 4î"Ā_Ŧ¯” ¯î–jLŅ›_Í.gíLë./*Ēf˛H=œdĩ¸<”Õ2ŌŽ'Ũ­h›88ÁGš›˙)*ĢJú÷4ÂUV‰XŗņPž{7 D# ģ^5[\DÖ*Ö˛jhÆĪîk"yAXeŽoŌ;Å:t“)ۘ‡r ̘ękÃo¨2˙ÂŖFé7%3TKüOÆŠW"mæ =‘Ŗ:”‚an¸¤r&+ūÚŖVĢŽEۆ’$ø/‹Åõ⇔{܌<¤ßYž Åįq‘ĖE¨ĒĖ\¤āĢąÄ´:ú¤e•6¯JÄēô5fũx“§i^ŨˆŠ5ĒyŪųHj Ô áA"H›ŪŧėäC ‘ĸ‹í•S7‚l¸C2r{ƒė’¤ė:;OdūR—Šķ/ûV•ĩí`áļtynëĸĸ]Ų—L4÷ÚĄK¤Û"q5ŠČDzĩTû˛¯Oī ę7§ĸUßĸåtëŸ9‡ŋdčŽrxß{‰šŠt ĢĻČ/ûÔĒ2dĪÚF/ÛĨi)Ũö{VÖ>,äŠ!â|Ū@V”ëso€ā°9Y3īko™kžŦ2ŧHĻÖLÚücŋ-2{ފž–^ūí=æãˇ KQßOReŋū#_ U|Ũ]jēčÉĒáĶ‚+ģëØbÆÕdĒp{ƒŪîŽxķüûd–Éâ‘áJƒQēīžpÉ{ëw"´—åÅÆŅz0‰´ØOšoéÉ_ÅU>TtĶ4sĪÛÕ~íāÁÂíūŊ†ëWų2Ok÷aĨÛÖ4ÔŽ>öĸ>MBĶßæ“ßt‡Ķ‹]žøˇXæI‡Å›)]K­1] ápåļėø”ˇk_ŦZyĐĨŨIî/ĩĖ7@ų$įᝯAÉw]Ž8áęœā‚teē×*ŋĄ›=ĮīgîœĖ?Yæ_†?Nf`FųĪęŋĖ§EsøōĢ ōõõ[&žwŪ'ow žghBO‡!xU‘^Ų'ī ?YF5Ŋ”ĒÔ|2[üÖíæ̚^žN9gęWæŨ˙&Ë|SPˇBg|ôVBsúä¤Ã+Q<­§‹æå­ąÔŧ€Ŗ ĸ:MMų‡/Āw‘ų„ũnŖŽzgĐø Cú[OķōĜ†˜Ū*ĢÍL fŞ+ÆŊJŲ-nŸh?˙æIģ&˛Ē÷'Ũû]ęŖi™WĐLÅĪ9pŧZG×9öš•Õ[Ė9Û//@?Ã÷Xæ“h’n˜G3{NÕ]†9–ą&ø…ĀÅžÛKq×ŋ_i˜×7vƒNúžáēŪWE.‚wŠC$u ¨ē/zÕāøĐ&Yk9,j‘)ãkŅ`˛EãjęšyWî~§]GĪU'swĻÄæÍžS–­ËY†;ģ–¨ė4îT~h{ISđĘÚēlĩ’ë‹›ŸÅeu'û%D˛,@r5s €&v­Ø0U$ŋåč#VVˆĖ" IVŽēĖŧÍ$Ŧ—&Kôš4?iŌS^sä8OņžļûQ°Ā$éĸ¤eJ7tQĨŠB+?ņ~ų’u^’Į°đŒūĄ†5‚E­‚äŠú–Ē2°.†Ķōg1L<ĄHĨŠžŗ$vŋáv•ĖFP’, œl]ôŧąÉsɆRe7‰Ũų&uK…Ŗ§5Ŗžt†‡ą?|]M 'IÚUĖ*)ôŲoŦ%Äá5ĸR…ĨĻõUújËĪd™'÷īYĮ;€ ŸČúc•]U]`5æäÂęjHFJíRĄfÁ›/°ū%| JāįLÕTĮ˛™„ˆƒ.âœ}ĨVÅ-kLģ.ž¨žøÄá]’…(đOI œrE"`‰^țn ĮÉĒĸ ŽiÃ,8.},•ŦÂ#Ô˛m‘ĶF"_ŋ ãĨąą“ų^ĨĄá0ˆRåĻõƒw„āW¸2xQÄ :1Fąx-›q…ƒĪFX֛ōģ˜ËÚĨåd4Xmˆ(æ!­$f/ЍdNÆ%"ÕÎĶ`båU•ĩ°p,SKō=~ßaÕŨKĖáÃÔ;Ą!Đq|_¤¸æ Ų…‘KųēwtšĪ\ C‚Yø2K=ëú/ åČĻėcŖ šmG‹Õ9c_ũ%‹RN`Ʉ—ȝœæsä( đL4ŲĄænÎjâ§s ÚģJĸî]‡:?OŅvWeVkė6Õ[Ë;Œdŗ—Câ/÷™’ŒY9ĩbŌĮÖWĐp“ya„ÖPÛYÔ¯˛ƒLÍlc:Dā?7vëäÚ Õh‰מsŒ ĩĩ#ĩ‡ũMiēécÃ\UŪ/*wu•uN•S;oûTâá¯ø_%3mB†ôîE8 ŒYv2vvU˙ĒQtYū(CĐ_ϧëÜČiÛĩđÕ*Ú9ĪģÍJiÉ™ĨV“4zG| ūĀüå^R ąûŦžŪí‚TéŦ1,Ķ×ādė$įNJžMĨwZ}Ŧôw¸ž ‘lhŧĐÆŦ˛…”mtĀÛt!žn] .~­B=ė “F<ķu4jos¸Ä[ân€āƒĒbâQÆuSdģĄwjWGĖáđqe# PąëBJsUĐļRį×ũgUN‚4F§›ĘŋļL_CĪžmcąŅ&&o‘„˙G ›AÕ"ÁH§_-^!Aŧ^¸Bī7ÔaUYC\ôY°ŋZŪsĪ%$}pĮ-€´Ms2|ÚîĨ=Él7-ļŠō\ļ– ‚ÚVUŖfĪĘēgēŽ^­Ģ-ežĻ‘{ZŽÛÍ_<÷AĐ3™t§÷oL$~ ÷Yė…›á Û¤0”™XHat1ęZÚ yŧO'*ä7Ÿe[ ^õDg_oOŗ˙U¸…L*ϚĢuYæ$l]뤒Ÿ&)}Rø!>ϊzrt¯ Ëō?‘YĢ’ÉZđSÃLÖđ9:MR*ĸK +Ã1ĩ¸nķŊ—3ūU[‡+fgLG›@éčëô7éī1ŗû헐} ™Yã>jŠN2d“CėöĀGg1HZ¨^•(Ŗí¨’ĄąáÔ÷I…RÛXN¨ˇ’čŽxˇT=ZļĒ_×MĪÜŧŦE”ĄĨė#Bģ¨HeąŦ“°c8Ņ?ōŋKwPŸ…Ō|'nŲ ŦjÚäBSPÎdŖÔuđ7o~*Égå†J+ōIjë k…J)Č ¯j¸Čx8RVÍÁ_*')„ļąė{˛øØ%3L™ėŠzĘ(qZNŽuũaa%ØōV4é7ā2‹¨e ú™ŪfN6JŖ!åā’YbsÚ!I’`‰:ĐûiˆĒs‚|ŦŨ Ą@‡‡Ũd–!K´ tŧUˇ&šGKÕSŨũ–LÖÁ`d 8´Tâũ!D4ÍΘîJNuwė8TDĖNΠĻg˛cņË\N%ÍŪá!4ˆĄÚfIMĘ**1(Ë ŸŲ +[⨈@o*ÂÉĒjŋuĩ|ޜéũb™og õ!ĸWâ7™Ū&Ų‘Ē[yrû˙žÍčīØqhécŲ8ú“ûS÷ą“ÄõlqíBÜb)¤GŠö‘Iĸ =­›ĩ^TlŠôŒŅ"—Ę[3ļāM-{’,EiJ]:o1hōØ=Ŋė¯Āu2áÜ, ÔéĖũ •û B/¸SÃl9ü‘œl‡-o0ĀģŠŦŗz–<íŽ°Ú ôĩčĢinâM)UdĶVĘ#Ž<™ō-/ė:æƒ,ķ'qL¸ ’ë΃‘1#I 7ũd?똏BJLJ€™>¸Ę[nīž×>M§ÂĄA‚mũ"=iöŦ2–°…M8Y‡jĒ­ĨąОc]M6ũ*.¯“YUš,ACŖÍÔ ™ b?1˜: žëûƇQŪ­Ą÷Ã|#%wkjIv™ŠÜ›jôUY/‡pOvŗjÕ­žNzĖuLūČāUb¸ãå ­úûæ†.“™UÆŊîŪ­ĶÆîæuwļĻ“˜M9.%õ1ųgs,Å 9ī1ČN Ũ4VųNyL—ÄsTí"›Îą×Ō„īÆ%TėYÕô°ĶBV›äˆnœšöå…×;z| .’Ų TöŒāx}ū} G8 ũ&SÜQ&KųB¤I“UŌáEoôL°…„eŲX†íu’ퟔ4…=ōĮ–ũŊ4nŒoĩqˇ‘đ]ÛĪĸO˜S–M‚Hc|0×ÜįɌßÕēõ7|-› ¸únÄr<<āLŽc–7(9Æ h4į:ūé{ûí+wƒ‚:ŸÃĸ騃~^lŨ|ÁëĢļˇšlEcÎPcõ˙cŠëW,Ŧ„ŌĀ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LGø*2˙ZÖø"29ÁĪ×\9đ_ÖĖŌMŠ•īãëúĖ0ÍoĮ’ųeW<@xŗŽd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BųˇPéɗA柕gl™ Ī 3Čô„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķ‚LG2!Čt„ Ķū'2ŸĻ*ķ€˙ƒL*5ģ§ōŋ!3•úĶĪđ øOČ\–°L7(i)?ũ _˙ƒLĸd:Ĩ”–˙ Ķü?ČĖËRĸĪtú/œŲ˙„Ė˙AĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéBæ Cü–éAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žd:BéAĻ#™Žđƒģl,.Qī~IENDŽB`‚leptonica-1.86.0/prog/lion-page.00016.jpg000066400000000000000000001407621506303110300175570ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀŒĐ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷ú(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ LŌĶqI°4f“Š5M j‚æ/5–ĀČ'™å$ m'oOŊRįb’šo"ŒÕ6•"˜’@.ąmĸČ˙;˙ž†§ÚĄû6ö6(Ŧ˜õt˜°GLĐžjíåķŧœ&â:–Æ):Ņ]Ųŗw4Vd÷w1D|Ļ|dĄ<Š…uWÎ6‡Įp?>ô:Ņ[‡ŗf́U#ŧI#ß÷GŊUģÕã´ĀuÎOđö¤ĢÁė.Fjä 3T!Ôņ‰QsfëR›’ŽĢåąĪņvÕT&™nŒÕdē !Œžĩ.æĀ#Q¨Ĩ°X~hÍPžēšĸ//'9-Ûđ§Y]<öË$Č#âā{Ņíė.æŠÍĶõTÔMÁˆ¨XŸnsÖ´|ģŗĮ­ZwÕ~h¨šdRAa‘Ú˜—Q7Íŧ͚i0'4ĩ™Uļ3Į ¨įģ 8-ÆxŖQ]ŗFj‰ŋ øĀ9Šë…ķWk0č9§fČ´H&“pÆ{VDŪ ĩƒ_ˇŅ܏>XüÎŊ*Ü÷ž\›iõ–Ŗzn]ŅUžĐĸ2ې¯JŽ/ŨQ “ÜûSŗJŠ€Ü(p298ëNiBļ (ĪL÷¤´U/ļäp´˛PGCCĐŌUY.vrĒ āķš/Ë9(8Îīūĩô/RæŗÍųYnôqšŽu…ä!wä/nij SbŠŖm¨-ĐŪÔõ&§k… ĪãJāOEF„Ą¤ICĒ‘ÔŒâŽ`%ĸš\͏QLŠ( Š( ŠĄĨjvú֗o¨ÚyŸg¸A$~bbąäUņ@Q@Q@ ¨Ļž8PŧŽGv8ŠMrú‡Û_Tĩ™–Ž]v¯æj*MA]šRĻĻėŲąúO!Xˇ>~e$`S,“6á*Ēāđį#ōŽZ]n=xí$ũõäĖĒē ā~´ßˆëéÉÅqu E+Ācœ~Ÿsû^d\éŲĢlië~,Ķt !ŽčČ|ҐPgŪ˛5ī-´PÉh<Ī;„=EyˇņŨ[<„,Ûō’î ąHįžæŊOŠËQŌ`hgC I‘ģ–ã9Î+ ˛mYƍ•ÍdÔî›I3ĘNB3Ã5ƒ,÷W:]–ĸD:ŊŖ?Â3īëŸÎ—OÖ,o¯ŸOF-Œ†eRB?­^—ėš.’ ÁŽL`ˆĄ•Æē…āoĨ*p|ē•fĩ+AzmåŽæYü•8ÆsĮLķÅ[eŋŋ2I ¯”Ī˛0įn{UK=\•xšŌ´ĀĄņåä) āĀbœž*›YąēŌaxm/™@‰×î‘õ̌[†ã”ô4înŠMĶŖ~vÎqŽõŸ&¸ˆ‘ˆwMĖqéTN—ŦéšdŅyr$ŋņōW¨ō9Ē—q%÷ŠĸŌ,c 僌zšä—<Ŗx”ĸ˜ĩIŽˑ—ŋqāqëZm,-m ‚áXŽî:r:V•¨Ã{â[˙ ZÄ%1æ\ž€ŒpųëRj—vDpÚʋsu ‡pmE'ĸŸ`)Hô܉ōÛCkL×ŖļI–%]ŠØÚĮŋˇJŅT[ɤũŲCŒįĪoĮĨyåÔī{=Āw*Į´ëķc¸Ģwˇš€É§°Œ`â6ķīØ~­=§$Ŧ™›Ĩtví{öpō ÚāķÎ=ęq­Č q€Ÿī˜_jäėžūæË™ģļJÄ0>ÅŗœĶ S[YÞy`GûÄæĩuŌÔÅŌąŲÜÉ%á1Å*ēȤ‘ĮsMs}¤ęfåŽU-Øc!' 1Û§­ĖœEžĀ€ öoj˜Y _A†ÚûpfPÜ6"ēiÞōOTc;ĮCzÎęŲŖ&UžbÃŖô§\j1Ŧ"3¸‚ĀdO­sē&–ÚK•ĨŠ\mĸŸūŊj0!öŒą>˜ÕŲĻ´V3i’ÅvĨ¤ H`Ä}íÜv?=gōÜųįĻkL`ĐË(*Ĩ[ËĀāŧf§eX‘´°ëEQlŅ–i$šIÁmËƟJŠs¨M&CŖėwž†Ŗû[: p9=(ųŲY›sØfĢ• BÂÃu#.⤠ō3ĶŪ¯& Á•ŗÁc­d˒ĀF@éøÔ–˜s)ųČúRqęŦķīkōŸˆ&hU´hâM§ŠĮ<ãŪŊ#ûZĘîYa[ĩ–ęžr.2;âŧ?U–âĖn-ƒĀˇÆIΘāäsé€+°đeÅÔŪ;šâ[V†șÖ1ČoNkšŽÎ§MĘ+MD–l0ļAއņĄ&ąÉÃîqÉ=)¯éäŠ §îį? ôâĸ{ĢHdV‰ƒžvƒë]6šŠ‹5휡ķŽ,\íČäĶ'Ŋ’K…f°/ “ë˙ęŦĢ­IŸkFĒqÉg9Ē3Ü38ręÄúŸJŸgq¨ļlKt›HB]‡?ėƒTu=NūæÂhí%mƒjŽĮųõĒĘXšbË'šæ3; T=ŗSČŲNN{M’ōŠ#›Qk?˜ūė’qß­oIŦO`LRá?x‡'ņĻĩ­Ŋ딜€Ę~ōŸ›ķǎēeĘxÚU3‰Ęā#Ķڒ„æÔ–Æ‹jžcA¨[0eLĢāō3íY…ÃŲ]ŨĪlŪSž×ę;įčEaÛũ¨ß°Œ5 c‰<ļY{õāĨtV>ŽęÄ6‰e;÷–_ĪëųÔÔĒŖĶRŠĐžŊ }7U“Q˛ˆÃ ]Ģ÷œmŪ}GĒņÁ¸–ææMÌį—ĩbE$šzÄĄ €)Û˛GÁüMõāTwŒE;â6{~9Ž5:“Ņ+ÔĄęŽļÎh ’5žvC(ĻéžzĮš•÷sŋ¨Ŧ­6@ąŠ’æYäoãā>‚Ģéü¯°K#U˜dŒœäđkZ‹ŲĨs•G™ģ˜¤ažõWO¸76Š!Ī#’F*ŅĢŨ(Ĩ¤´ĐQLŠ( *Œp)ôQ@Q@Q@u;Õ°˛{† Éõ8ūĩĀiēŨæšâkÛQ<ĖcōöÆxHĮRN=ˆë^…ynˇV˛B[Į\g…dGcgáÛ;‰ †3+åÜā.ķî}+ ŧîI-ē4e­īéÚyÖeŧš{ˆÕpíĪã­gøĸÆĶWĶ•n:FKã<ŽH8âŠizĖ„÷NĶŧ“ŗ‚įN0žÕĪüI¸Õ&ĐŖ´ŌåP’0ķŽėŊšüj=„ZîW$“Mŗ…ņ|š~Šq–<~e¸+ĩyŨ“ŪŖĶžĶĻĨŧE™cV+&ߎõŦM+N}>yNO8l„įĻ{ÖÜzŒr‰–t;|ÆbSī.NI˙>ĩ (éŽØÅrŨîv:V§ĨŖÎšU‹} g`6}HįņŽĨŧg~ĮW4Ú'…%ŧēĐŖ†[ëĻ;˜I¸&zįׯN?JÎŨĻh–ŋÛ$’Ešäą‚ÎYG÷ģsĶŊtúGƒl4ˆvieōōUf9 }qŒ ]CA´×/[ëxäe] •Čã§N?JŽVâėŸ/âȓQG ŅžOĩ(ž]ļÂev‰í[\-Õ˛ŽväāS|föēl6æXŌáhUoē°éPx}dŋēš|Ča†7;3Á=‡čkŽ­'Žæ‘wFœ‹ Æb>fŅõgæĪJKûé4ČĄûyķābņ‚8õĪųÅTą‘.ãiã|ČfTûĀz~K§ÜꝠ’&6ŗĄV,ß4'Ļ}=éԌĨĄŒÚļĻū—bnL3?“¨ĸŠÄ÷$˙…lIŖ÷g9Į4ËDŠĘĘ;Xä‰6ŠÎHúĶãf“æĪ#ÖŊē1䎇$ĩÖäWW‘Ų Œî°P@āNI÷¨Ĩ×­Ą”BmädWÃ0 ä•ĪJÍŧ•5 …û,åŌt‘‡BN8ëŠHô›‰ŖdGO9ånpāĘĒĨUb”9ĩdē%Ü3}šaCĩf,IoRHĢČĐÜcéŌšķi?†Že„Km U•ƒciõĮŌĩ˜Ą ąÆ×\ĢŽƒŊ:U9•Ķ&iE–a7–l`ķŽ¸ö§´ą*'ëžj ‘Fጜõâ›#ĸF@“ųšÚ÷›ŽķaŽŽĀõlņYž ģŽËJF¸id Į€zš´Ęų(ÛՉ÷Ž{ÆōˇŲ, V8gf#Ąā ~š‰mpęsz•܃Ü],0ųĻ5ÐOÍМj—ĀúÄíâ tŊžl[äE¨’1מ*‘ŒcÍvˇđöŌxrÖÖ/Yŧ“$*žGs€x8üë‰Is\ëƒoŨ=^åQŸqSÆsTå<–o0…˙JžhÜļT• ČsMōœĮķgÉAÔW5ļ1ŠiîT‘|Čbšāįš‘tõ]¸|āįéëRĒ•dFÆFH8Š|•ˆn2§œÉĄģš9[Aßg$ņž3žpiR8÷Œåxūß8¤€qĐđx¤ûZīPäã¨Å+ĩąŸ3CŌÖä&Tú≭c%|āŽŗw§Å0:ą#*1ŽÕ/˜ąÆdŗqČÍMŨėɓm\¯Ÿ§ļÉi†Uđ ĒZĪ%ĸ4ņųŖ&RC ö^žÕļŌYgqäķTe opˇ-126íˆõ'Ô×u}cšžŗƒŗØĖ}ZŌãPē’éÖ98ũĶ/`3“šŌĩą{‹¯í+k†Š=FĐ6c¸9ã~•Ī^2i&ëR¸€\Ëv<˜!\cw\“YZ(Ô¯žÁcŠ\HÖSĢ7• m ˇ{×D'xjMY6ôg]ˆŖļģ’ßNFž™ųT‡>\xŋ^ÂĢxJåo-Žn.#h§ķŸpp0~•cÃ6úoˆuˆãU[x–=¤ž…`č’ģNą‚ę.æw¯­sV“–ækT{*5p@­BR ahr~áˀ ­Âw)ÅT>Q…t§SPaE:ŠQEĀ(ĸŠ(ĸŠ(ĸŠ(ĸŠC\õˇ˛ŊĶ1ļvÍß|ũ; ÔÔ.žÖßÍTÜ3†>ƒ×ųĮįOˆ—€o>>o¯Ĩ&‹I­O3ņ;Ļ‹¨ŲÜZĀ#•”&Įn÷?dkúˆ–7_› ūEuŪ<‡nƒtҧīŌ02OĖ?ĨyMīöļ|Öqō°?ÏZĘϊĮ}¤Œģ‰wUÎsĐÖŖ¸VˇĶnKąXöãæIŠo jĨ ‡ĄáKĢGåhåX 7H¤ãų:ˆ¤ˇ4lé~[nņÄņœ”ą ܌šõ}q€Ä|ŋ{wc^Iđæâ+}rôyhÆxÍz‚_•Œ—!‚JŸĪĒÎˊŠŨæf2ácģļ5ÂøŖĮ?Ųō;H• Éæ[Ŧec°ä˙*čôíDëĐK=ÚDņo"(FŽƒv?Ī5“âĢKXc­í!û]ÜÉ*ŧãØcĐVnR_ *1ŗÔâáđÆŗâX~Ōn<´•Ią‘ĘįũÜâē[;_đ˙†ƒYjžs[…Ũˆ2ĮŠŽšMŧB5(Āã§cųSŪ\/lņšÎ*mŨŊAȧ‹´ũZĮėönįS’ ąŦé~Uĩs5ÅËė2ņōČād˙…Vņ hŌÍâ4 xX+ ė“ĮŽHĮXžē‚åÚÄRÂÛĒˆžrÆļSo]™“Š9‹]/ûËûK[‘K˛;xų%¸9cOnõ |E=ŦļW18K6`Æ1ëëĪķĒŪ2kÛŊSJŗKui6œų+ō$dŸ`1Vô JYôŲté"ˇx-d ’2ŽŊČ=ĪjÍ­n÷.vhč¯q´×šuŠmŦŅ/ ŽāûķSXx‚ŌΘ˙glãŠũjød–0Ę7drqųԒZÚÍhĢ4Jųādd}kĸQ[ tų‹‰s öûƒŖ‚8*Ų$lhĮ@Jå.tË­:O;Mē’Ũ;nVú¯˙Ē̝‹5M:/2úÚ •Ü>æQ‡áƒ]1¯ iÔÁá'ĐÍļŗ3Os4WWQÜĩË*…o‘pģŽkXCk{ĮTē_Ū,"3ŒŒƒīÍ3Ú¨˜OHⴌáNp7ZŊsj?ĩŦäk!ē_3rãąéëQQ^íF<ŽÖ4LÖ"°•îĩ™î”å]•į"ŗŧ/ Ú3žæį“É8Øū•ÜŧBKV ?{°ö¯4°ˇŊ“KˇfēqP•ÆõõŦ¨ËŲģɘV÷ļGTå(APņôĻ˜ØŠec¸6õ5‡msĒ[ķל ÆËŒ5ŊĻę ŠE!+å]FNčĀĮ3]QŠ´g;AģnŌ¸ßDßÚˇMŌÎ$æäFz~_wŠŒNü€ßtdã9ūuČxģ ¯ˆžL´K$„ƒÁúTVvEÃVŽeŨ!‘Wėī•?ōĐũėsųU]EaiĻ” ļv¯§eĻļ&†ŲėŽY% ÄFÁ‰õ=įTRâ=?Vŗ¸™<Øĸ;™qžzų×=S=B$LĮȊĨAčØÎĻTpęaĶ5Īx.i§ŗžLО‡,Ũw2î?­tjĢ‚vŨ9=zëƒŧLeš wnîi­!vû̟_Jœ€#‘A8<T$GäųŗßŊW \W\ũŌ@ÜGĩ@’F_>_+Œ~´Ÿ3†ũŪ0p[8Ĩû9EaåãŽÆŠ Ø¯ssŒh™‚Ģ8Q“ÎãĐT˛\l-Œßič?Î+•øŠī‡it–ägžpšä~8­ ÜļĢáø¤rÛâĖlIë_Ķō¨įIŲ‡%âŲŋ Š2ãדíL¸Tdaæ|į‘Ūˆ"mäŒđ>”Öf6c=y5”Ŧ5sŪ&•!SHĸ\ŨҍĪn°ėåÔa×ė-Ąm V&¸įp'vqíũk_ÅrķøLq‚č}?: Ŧķ1n2rBЗ yĄŨ–ŪHÁÁaéúT]Ŋ qÚ͞‡â6’õöA, ?įšŋâ]kÄ[Xn´˛ÁŪÛ°ōč9ükˆš˛ēŧŧ†å•Œ—D¸U8Úš?Ĩtē6ƒ.­ į’Ä[Z&ųåŎ¨¤ÕJj1˛Ü•Ū§Kāģ›8ŦËo+iō ¨@9šAŲ~Ü×Iq=ÂęĐꆓsoŅ LÄ ī€O=?*Wēļˆxf]>HbT”G" ËVõéĐ՟ø“Ã×z[ÛGĒŖ^Z8š5q]ãą*1ԈÆmY“*˛Œ’ąĸōēĘQÁãŖUK™ œ `t’Ōå¯4û{”ĀY# 3ÆsõŦM_Ä隈ĩō ŽĢēG Nõ“‹KAōëbåҊæ3Š…cksĪŽ+;saŪ\šÜ†į#iôĒÉw­jŒMŧÉ 2åėŒúäŸJ‹NÖM¤’Êۤp§ĘfSŸ1Ŋ…KzÚ%ƌ–čÔûr[Øîb­°āôūuĘÚX5˛Íįnâāģ|ŧ×G{lftŠ%ƒŒā×?ŽoļšXŲ”ļp:ûUFWvf-jz…#ļ“ldōrG­€Ģ°+zäcŌšÍU´ž-•™eŠ!ģv{zõĢe$’Ünōn’Eĸi#|cbx<Ö%îŸŅ,LĒœ€íŽky ĘŦ2sëČŦ nDKå…đQmÁaČ#Ös§ÍąŦ&Ķ0.-î4ˏ=ûČđúÖÕŦįS›F“xtKĄ¸+cŦ\X-íŗĘvž§§LúU-Nm>˙í›ŧÅF.Ž Gõ•(U’÷dÍĒÁT2ÜôƒƒĐ\qžÕā÷÷š„73Gi¨Üĸ$„ cnwtĮã^ŖŊĒâÜnīÅ+]”Œ}V§†{yčä\0H¯ē’;=>Ö7™ĻHÉë^ËöȝmÅĖkē2{ņßüūuâz‚Ŗé‘ėÁO-‡ũk*ŊĪJƒåL†7Dˆ’~rHį­WK!y ŅļPēä94rŠ"UŗŗũsVRe†)A IĪjÆėŨÉ7re´Ķ͒—ģE”D•[böļxÍhiĶŲéūŌåž<Ú5æd‰Téš°īøÔQ^ŲÂ7%ävʡĀ,gž:ãĨYņ™ĶžčÖAwį#;Á$5Ĩ*iŊHŦí°Īë:%ö…q™¤=•ËãËeĀČŸ”p>Q\y\Z˛Ē¨ˆ¯Œ ÕĢ‹•ŒĄ#gĖíx?ĄĒļŅlĶųüĖ 9ŽĩhŽV›úī‚5…>x§‘D–;SÔ¨įōĒ—š×ėno¤ŧh&œdĮ´CÔ=;ūŋ‰íĩ6lDĪŪ2k‹đė—:zj'sDîP…ū:įō&ģ‹[øŸį ķIĶ$ ņRâĨ ÔäļėËņ°™Ē2ÄŽIĀ%ˆ˙8­VšITlBŦ}Ē(>ōĘr;ãŊKƒlŌ3kS>ŌĀ9ÁV%˜,֍Ũĸe ¨8ÉQĶÖŠ&­öxĨ™mėŅKåJĖāŲ§=krhã`+ĪUĒIĮˉÖnZž}Žxsû:UģÂXHGœ1ūŠŊF;…bqo•*]IGAÎr?3ų×ĢÍåKēˆ:?ČaY ām2w+˛e‰š!$ĀJÁŽN‡-Kœ]ƚˇÚ|2EĩYäuʧR ^O?ĨVĩ’'’!vʑÅ÷†9ŋĘēŊfÎßH´ˇ†Ō"-m%nIÉŨģŸ_đ5‘;i÷RLņ´Ež,|ØÁ÷úÕsIĮDeŪĮn/¯Ø^B“í8I#äAŨ‡´ĄÕ¯üMŠīŋē]ę@ ė@8ãŽÕÛørkĩĐí4ø4˜>Į>DŒ@`WįëÅpZėáīÜĀ–Đ@’HŅåuõ<ƒųÕsO•Ŗxk-Qß![qg"o„™”I yäÖōę—’Ë ģųŒ:`7Ō¸ßjãQŒ‰eß(„~Üö5Ŋ!1ŪFÖûŖuBņČ=GåZQĢeī1U¤ú%žURĘ@ėĨ]Š?™HŒw ųuĒvD]Ā— >W‡Ž=˙ZЄü¤”9Îk§Ėæi­%ņRCˆn”ūl˛?œîŊ`{Õ˙ N,tuYŒ“MqqŗdԚ†c紌2m—søõcĪŊ6Â'ŨĨÍ ŅĢËᆋā:zšķaY9ŗē0•’:™ĩ¨c‘•a’H“;ߎ͝Ĩ: rĘYĨōč xS ĀPqœ{×.÷)kĒŨÛK2+Gĩƒ19É"œ5;)-¤ŗ)<ŦHÛØû`~´K¯+FŋVŅ3WÆë%ž˜ÛņHSÜb¯^iöē·Ána•Ũ[j ŒšĀŊšé´ũ>;¸ĨōÍø(&lē¨Sԃ[:†“hum"ŗ•ŠFsÐxī]1ŒeŠÅV>į[ĻÚĀž)¸Į nģJãœæšm>ęęmFí$!ļĘP9\ņœJét+ {J[XŌHÕ`GÛŧ÷-ß9ë}ŌīW% DŲ銮„˛Žqž• rŖÜâėgķPļuō¤GÉÎHį“ŽÃúbŧÂčŠ mŖĘŠYåįØū†ŊÅS%ޞˇZ|¨—Û;7!˛8Č1#ØzWšjŅ˧Íaa<čaDƒ`ÛÎOôcõŦ*ęŦz´ĩI÷$Ô ŠŌú8ĸ Ų]Ø#ļŊeOp$F‘#ķ@ “´{V–Ŋ>ũAÚG(ĢĖqÖģ#ÃöÚmˆgî)äã?†JäNM•ÍnpzVÃ:„šYvā‡#Ÿ­wŪ,°7^X BÆŽ`=‡_ĮÖģáÉb´žãIb†fhO#o zõŽģKÔ­oėŖō›„A‘žÜc?taĒsm¸ęA´xģ¤Zƒˆ—*@`;xŌ¯¤ Y wåHõ5č:˙ŪMA¯´2‘Čã÷ļũoJá|IoybZj6’D­&JdĀuÕ —õ8¤ŦCpdû …‹iuų¸ČJßíąĮ5“ųwH¸Č=~ĩyäō ˇ2‡†uÎÕ?ŨæĒ<dgîšÚÜȈˇ ^'K¤üFŊŌÕ­oíî@ķōįōú~UZĐoĩÍ:ß\ŋÔaŊĶR\˛C•ōËzū@WöÁî#‘Á]œįjüW—Ú~Ÿw­ô‰k4x’,ä}Ĩc*Mėėnņ2–Œô;i™„6ļ‰ÃQå¯`;zūõzæÖ]ÉŦaÖb|Öaķ/ úW1ĸEukģOž›cĀ‹)Ápë ØŽ„Į%ļ•qœŽgdĘ Ü\{ã5Å“q.ĸŌæÍĒD¨Je€Á ÜŸåT/­’ugąxŒ€å–6ätŽ.O^x~(ėįS-Đei¤ûČę)Ļ?ėwĩēŗģI`‚“ƒŒ{?5Ķ8ÅÄĘ3”%uąÛøsO:rŪęWĄC°xČTQĶņ5[O“lƒPģˆī¸.íČû‡…ëõĢZf­ŗĄŨFpŗ,dJ¤wĪUõí\õ˘Ķîa7Jv”nâ rxĮĩRŠQ°s9NīŠ§lÉn^Í%Ą‘1( û? Öǎv×Vņëä!uĪ žĮŪĻImaŠ[x<՛a—,2XđO>œV†Š/Ÿ¨“u2Ŧ” yéŌ˛Ģ{]TîMkĢHÚuŋžÍ%ËcvåW#ņ=šd„ė, äH¤gߨhs-›‹ibĖNŦKŧ: ČŌtÁĒx¤BЈôûyŗ¸Ā8<.OsS]'sĨ5$îm_ÚĨĮÚŽ´ų) í–1Č-×=û÷ükcÂ^!‘°ģd[Ûa´Ž@qÛųb˛/˙âQ{s$@ËįhŒōÜôã͊æoæ—KÔãÕė×!ž%=ŋ­iĖéģ3 ķ#Ö.îíŦÜyŌ,.v÷üŠ’ęĐ&šnāŸ0¨,Hę0=+†ŗÔSWS¨=Öæ$™7`ƒš¸×oc$!ŗ9`Ä/ĩ)ĘúX•游ƒūŅūá{;yę›rCąČũ:ÖE­­Â^ }Ō*Ēî{ãå=ôĢŗŠ%Ŋä+%#xÁÎqĪáTŧF×Mōë7à ČÄr ¯ëEXZ*Åáä”õ7’KŲ­ŖēKÚHF}ņߑTLšG’idš’Wl\€9KLž7"7é1k/ŗ¨ĩ#š<ˇãšéÖûdį…*ãH>žũJææMōļTą<ŗqąÉ]A—â fXЁÂäõĩIČÄ›œaŽ8üMEU}ŒŠiwäkO+[hĢ-Ę1z)<ä|Āv÷5Ŋ§Ŧ˙h‚W;‡ŨÉ#õŽWRē2čO1/´ņ˛˛˙Ü8ĮŊu–Q•–B@[ĄŦéÁķÜÂ{]š y4úb÷§×Z1 (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ ē. bŸzŖlÁ4ˇnÄFß-IœtÍ Ž^ãH´‚î{”Œ4“ģ7$õš¯ē‘Ļģxî0%Ę!cĀtüĢŨīdV“žI=ëÁĩéžÉ¨Ũ6Ȳ•DQĖH˙ŌąĒ­ФløjÁĩ=}d˜ĢGg‰ßøGáŒ×Ŗ!Úą9!ČÆO\5ĪxôÕŅ Ųģ´ĘûŽ ĻąëøSüIĒcXų˛´‹į’rF:đ+Ė|îgc]W×2ŧjW„ėR+†A$÷U}}9ǰŪ“ÉĢčŗ$Á?ãę!ÆáęŽi~ĶĒË̏ûvĪ5æšeåև­ÉĸꋾŨˇC$L:œõüëÕ4{đ]íèr7ˇ<ņ¯.ø‚/O9ā+ŠQž}N?:ŌœŽ:‹—nĻî‡|tN(UÃĮįmãøö'Ûú×EŦiņ$×7å<ЈToRĀūŋŌ¸M0ŽŖŠY"g3LĒ1õé^ÉŠhąÜŪJÄ ˜(nŧ:gŪˇ¨”ENO”ā-"hnČIŽ%?/ČqõĢvņ VApėnD+Œ°û͌`}+Ē’Ū;=0´Ę<āŒKĶ=yŦŒÁ§ÛÜķÔ/‰ŽiķKC{‘H¯%Á."FˆŽCd¯9Įô­˜ĩ(˙~†2âāĻ]T2į#&ŠŲÅ&Ž;ģëIČxŠ9FWp#ūÉGĨĻę"ylæKˆäc$€‚ŋŸzčĩ/ļę6×qE ˛˜Ëœz:VÜüԚęLĄË$Æ- XbÛåĩTũ*ÍåÄļĢ>fҎ“ŽsëÍR‡NÕ|’‹hÂāõlãéZ6š5ÆŠm†Ŋß'÷‰¸ôöŽĶw+–œˇ,ß\†°7Šįqnƒ>ĩČk7BI$4’ŗëô­ŗ ÍqũŸ%ŨËĮėi7Īã­¨ü ¤9VwšpNvŧ˜_ԜéIŊAƚģ3ü=ŠĐm`[„k’ŋŊSÁÉ'€ mÜDōá|Éuú×ĸh/ŧn¤Ŋˇ ŦąÂŲ$väUë'ņ%ŪĩlōZ¤P”‘6ŒzåS9G•ŨÚÅJ|Åø¯›NđÔĨėcēI.Ú܇| ƧywĻÚééÍlH-ã= šŦ›|k:5͎”ą\›mGtŌ6åÉÂõĮøSõYcKFęFšhŅD2@@Č#œô5×MÕ#'}N’ÉMĩ°ŠŪÉĸIđ¨GR9īX:¯¤AâKÎÕážV;Üķš‡QŒœWMjÉökgV 6 °Č+Ī4ˆoÅRæŪÆ[˜ā•ūXđ$wbqZ´’ÔÍ=u=58![ =;*lî °<Y-ˆdÁˇ´ĶĐä<ŒßŽŅÍ,zŗZ\GmĢZĩŖžPÛãsõíÖ¯EąŠKĄŋ ŦŦBļįæú Ō­ãyAÜ3ÔaŌŊ&8–2Ŧƒ' –'ĩy÷†­Ž.cÜV Š,Ĩ‘’7ĩgStiMé#vōWA"hÕãFfFÃæũsŠém$ļŠËĖFIįĢÄi<š$HŗF— >`27 ŠŅ˛Ž– d”)ŒļÎ0H­Ŗcžz§ęnĄ$ļGCÅ>˜‡9ČÁôÍ>ĨQLŠ( Š( Š( Š(  ×+šQOvúU-kQļĶ4ɮ8ԟ”rO`=Í]œüņVŦ/éōęžš‚™@*Ž­´įZ/esH%ĖŽq˛øÖŲ.Ņo­ŪŨ_îš;‡ĐãŊyŊõŧšĨû}…KŨÜ]7‘´}áœgtvúTšŽ—%ĶaÉāîL×5Āiė˛Ō„˜?xĄŊ[UĩÆ^‡R˛!/ @ÄcœúĖšÎ¤bļFÖÕL›SŅÅÂŪ´ ŋh˜ĄMŨ—ĄüsWc€Å LfP ;.~ũeøoYmFĀÚŪ~îöOšūužA1ShĪŽ E§ŠĨėÎYŌînw][Ī3:@¸ ģ–üĒÆ¯cŖĸ]ÛĖę"hŠą'ĩøUų™ažYUNw9ŒwúV$ŌIâ7ûš˛éėĀOpĮo˜đ¨î3ŸOZԜ[kČĘrJ-ŋ†o/íŦÍژ­öî$ŗį ĀéÆ+ĒžŅ­ėĄ´´„¤1/^1“ë]ĨôĢk‘>eĮ–]#ÛÁQéę}¨Ō˜]é‘ŧâ ųd1ǎqõ¯Ntį&¤ŲÍ (=Ž)b_–`܅<՟ėûķhŠ$ °āW|mã~R=1ÔT­ˆÂāžųŠTf´šR¯ĻĮeĄßšķ<ˇŒ„`sųũk/ÄÖēŖr°ßÎö÷Ņ.G–úúņ^Ēŋ(ųWąĮ#üņ\wtgŗ—UˆŽŖœH:`ЎJJ;˜ķŠIs#‘đ^‘aĸkq^ßŧŪLd›7 œŽã'>•ęąš-<¤‘ŋŪd9Īa^nÖwÚ}œmqe @(Ņp­Ī Ũ‹]NFq5ĩœŅ…_10Lûtã54Ēkf'J){§Sw\#e(xÍ`jZe´zø˛|Ļ8/ÜāŠčŽL "99?JÎÕŲÉ FV2˛äĶƒÛ­t8-Îu7kũŗD ō–bĮá[ĘÖŅËûŸ5ŒÎŦÃˇ=+':+#Ž:å}8ā~­t^G\ˆĄš`Ōyƒ0Î@Ī$zŅd÷ÔŅĘå:'Ņãv9#ėōļrŪ¸öūĩ}m) ԁF~E#$÷$×M—osö˜4™<æ2Ŗ“øœTĶi\ d‚Ōož$v|ÜT8.€Ĩc G…ŗ40@|ČԐō/q‘Íj3§‡Â_]\'•(Ā“ÃŽ€9íWC^[ÛŊÍíũ”(:¸‹ŒžÉ?Ĩs>*–]WÃĶFöO!•ã-lP>đā{UrÅ Tw÷KúNšoĢj÷pHģbšUXÔ¯>ŋŌĩnô¸8T^I Ŗn#ĖÆīĖûW—Ų˜íf‡QŽG1+™ōAQßúWm^äĸZØÛpĒLî7ÎrH˙­QÆHvr՛’Ī`ŒeģÜl.ŸņŦŊGRŽÎ´ÛšS/Í;! „ŨØûÔē°ĶkĮG촃ΠģĖ€ ŖsÚŗī/ ׉/>Í “¨mŖË]ÛB§Û$ūTäĶ‹hMr´‹7īĸ0ÛD-¯cÚC–ŲžėsĪ5¯Ļ_ę…’›so D|ˇ‚ėÄu pįtš,īuCOÔ¸ŧ"‹ƒ´äŒũHüĢžąŌ#°ĩđCqßũkšŸ57Ģē.n<ļf4°é°*ØČUîe čî§$ú’kRÂŌę;h™æ,qŒ/8”š†‡¯ncŧbÁåhÉSCŠŗkd–öĐZ@]b‡‘ķ~ĻšëÉJZ!s{ļ3ŧ7 &‡ øY\5ÜÍ1 Ā\öĩ\ŽĶl˜36ÁĪqW–Bv0įZ'`dÎąQåw[œĮˆ,?ŗ7Ķn¤ˇžę_%#Sōeŗ–  d×Q ØZé:TpĄLą%›Ģ;w'Ūš˙ŦsÜØˆĻCylÆQ8ÜÁö˜|w4r ŌŽQZl+¸;t īĨī-IŠhž–ΙD 7ˇŨ¸ëY:äPŪ*Y·YÉUäpk5/ßj†â˛Ķæ‚+‡HĖĀā~cēkz´ÆMSU…Ņą*Û6׉†@#%}jUZĀ-"lˆd*ûq€įŸĶŪēũ"æ`ŒÄÅ(8o|ßá[$qÕ\ĒĮC6 `đ9-Aoƒį<~U=AQEQEQEQEQEJėšļSŸŧOJ†ęypky5ë~‚§–0÷°œ°1ĪĻi×Đādã9ĄkĄkĨ.Õė ûl÷Zeâ[[- Č@Ũß•Á^hĮÄ7Ļâ8"Y-˜‰HāĘĀôãų׸ßÛĮtøQ<sšō-TAĻx“Q6ī,X•C›‘œW4á(ģėz”ĒsŽS‘žYä–äŨ+‡Œų?`W¸‚3adŅÆģ‰;›=zvĢēšēž ųØą ןZĄ-Ė_d‚‘"1ô'WæÔŅJúZ~ŸįiˇDî‰ĢĐtíRĐ'‚ōÍ{9bS,;€`vø×ašÛȊB˛—Œ`ČŨÍ{d:–+ŗ^@Øãđ*˜ĶsžĄRn)Xāu[-2æę[´MBŌō^QL.Fáė:Ķ´ŨsWŊš*vû ëķ ‹ˆIy SŒwë^††mûUũŗumĮWŽ!so„–ŽH؆ˆŠö™Ē¯c+ū%šQ6Ģw5æÜ|˛|¨?•Š+YéÖęÎÉ Æ2xųÖEہ:ŸÚng–ĘUōŠI6vļ29>ŋŌ­§†ÅŦŅMg ‘Påcšfe_÷rHŦ!č'ޤÂÖįPÕbģra´ˇB!A÷œœdŸnëY:÷‹,ü5"Ų"ÄnßæcåĐ;ž ~ĩĐAuz>Ņ-Ô0ÅQĄ;ą’sÅy¯ˆt“N›ÄōŨÄ[į ’ÎÅŊ{1ĮĨjĨmIWßĸ:}'ÄZÄą ۟ŗŊģ.Dj0ĮņíôŽ‹NÔáÕtÄŊˇRĨ˛67˂C^OŖëĒöčĐ tUˆôú×Ģčúy˛Ķ ˇœ3Î:yĒDÉ÷'i§~#H‰Į,ėp*šIŽŦä[††XĨB¤Fŧ~döõŠŽí$¸*"hö+e‘‡ĘãŪš{ŨnãCē¸ƒËŒ9ÃlFWü؁íŠŌČÍlXI#°ŊõkģuŗĩP‘ÎYŊęHãˇzmĮ‰ô›ûfĩn!‚åâ  úã9šäYä–ūMBũŗ4Įvâš9ÆĒū\ ŋ˜‰VëSÔ"Ķá#ũYæo}ŊGåSh'Ē4I=ĻÎhīg¸˛ēh%xX›*Ã×JҎ´†&8"‚œúņõ¯9ĩ×´&9Zkš.$žėá_#8ÅtŸđ‘Į­xb9,nŖŽäļ%¤ WČę /mÅ8_cm¯m“Pû…ËqôÍZwŲˇsíĪÜ0X6šE­ũœës+ĩÉ’f9+čF2? į4}ZęķRŠŌ+;ˆŅ™Q¤^HRAcúV^ŌÚ¤S¤ĸŦ÷=Ž­Ö?2iŖއuD5}ĮĘķ$ūyĄ'\OGžãGPŖ'ŋ8ņĀ÷Ąîđzzíŧ+Zž ŗČŌ"¨bRT K`ōIÉöŽ\ą–)…â^;Nŋ bx9ėk¤øsy)ƒSˇ•0ë"ɏRzãÚŗåŗš—=ėtw°YxNžæÎÎ%–LDĨd–8íéš_ éQi›…ˆ‹™ãÎxéũ+Xųn 0pqYږˇcaēšXį‘P)<=ĢŠĘVčTUââQM2ßĩķDˇaŖ xëõ$“øWVfV¨¯2Ņõ襚ĩYŽĻ¸xI,bėŧMz4w đ,‡åAÃGáI'ÔǰŗDĖN-ÉņÆėsČ) ¤Œ†ÜTFV*§đęk6ŌzĸHûqƒG=y§!9ĒŌČ!ˆĪ4‘Įy.Á@üOzãĩOŸ´˜´wˆÚ¨[’2Hī°OSNœ%+ļ´Žƒ[ļļ‚â=B[ŗo#+n~ū{ęO5ĮęēõÛXAoĻŪ:YĘI‘UļJį˙…mÁĨÅ# ‹‰šö ŠČ—˛ä/\z/á]0‚+‰UDjŅĒe\zãúRöę:EՒLánŧEqeâSŽ<†%ˆÅ8~NĖ[o^•™gxɤęFęUQ<æmŖ™$rNÕę{úvŽöōË1Oö›û °1Ŧj \wč};âŧûWuūÜąIϘLa|yĨK‘† zƒŒz]ęēD!ĘļF’kē ļ‰4åŽÁae%’¸îĖū§Û=jœ:L*ĻŪs:ĀÁŒnėp ķ×랴Ō4§XįīČ6ãœķč iÁ§]ęĢ NāŲĒ~û‰9 ŒätįšôT5Š„ĩ(\ˆRŽĒŅÆ¯ģ7œgŒäãĶÕč7×6°D%,î€û€kœņ´IoáëD´LGÜAO§ZÔĐnng¤Žv˙¯^üW&ŗƒV0Ši;žĨhs#“ÉãdÕ{eÄ`ņČÕbļƒŧn`÷ (ĸŦAEPEPEPE‡Ĩ@nHĸŒūĩ â‚Ŋ@Į­K˙I›=AŊǁÔ<ÍAíZŪD š‡ČG֜QWÔ­pŠą ŪÜŊĢÉ|Km>'ÔÔeÂŖĻBdūĩęˇ^Ysģqž+ĖŧM ›Å…Ķ,‘Ŧq8į׏β­đø[ķ^­Ŋžâß6ķ†õĀŽmā •øMd×5ŽŠ$– 9fˆ˛b3#08 Œ`W§6ƒg Vkhö”cŒWĨ´ņh„–ÛČ Œānū•čV7"ëKŗ™9f…céE%ĖUkÚčÁ纃M™Ūúę›î¤DŋNj=kV—æiʀHÅÔ[3øæļu=<^\xaČûĮæÉÁâŗöÉģAj\i7žĮiāũwSîĻ!VBČ%9f#ũ‘ÅnéŪ ļō-fžúi‚6Ȱ¸ˇCŪŊ6ŖļˇD–-ĩW9'ôęzū5ĘZ۝Tšßt^[){}ဠä~”ĻĻ•äˍ(ģØčā´´ ų19Č ķõ>ÕĖ^xsNŌĩyau5ĨÍˁ˛āōxė8ũkN=FH$‘Ŧ{3…fÆFO!‰ÁīHī/esk0rĢåŧ‹Â`ōsŌŗåvBĩŪĻ;MŦÄx´‚ā}āb“i#čßŌĸ“VūÍļAũ“yåųģå7Ą=yôރZžŪ;­:ę8ŒGĖ),€qŗņĮZÂÖĩVĘ_1G™g–lāÞĩiKFÆSŒT[#MFâņR[]5֐wĘ7:ävį´øfžāîš0›GŒ}@Oūĩ>Âæ=öUģßä\0)&rC÷ϝ4%™g1ˆÕÁl) ô9ˇ#‹ÔÉĢĢŖę5+;äUeFXz‘ĶŨ.øéWöwŅ`ąEÂ/\}=jęÛųW›”d‡=2=¨]Ŧ÷[B&CEÔ¸'œôĢzuĒjôû[7¸ŧt™”EíĮĮĐ4Öĩ¸Ô´é&™nˇ-¸h#sŽõŨJ +–Æ.Zčmx\—Iē‚Îí‹éŌ?ĘWūYØûVôž#Đôë™ ŧd?1ÂRÜuڇé\|K˜Ī–ÁdU°9ú{õéņb(í6wėĪú×=lsē-TēÔą}ãH×Ék™yu7xŽ ĮŒųk×מxëYŲŨjWsę7ĒŪ3î%žmübŖÖę S ƒ q‚@ũåRo3ĩē>žõ­2Ļ¯Ô—+šZt˛^jé7$[ųŽWÎPJąÆqƒ×$WEĄˆGļ6ėÅJ‰pûĮš>ü×;ęYęšTΌÉÃĖbsŒŽÜÖ߆Ø&™nØHaĐšĒŽŌHráq_”G>™‘Šę‘ų:úy$Å n…ōk'OŸZļ°K´@ íC¸ūņ5 ÔŅܟƯIÎŦ˛`0‡įÎk†xŠIØíŽ/c)/lå!Ū%ĮĘVPWsûkIŗUoˇÁĮČۛ>ĀsúUKÍb2Š’Ē6HĮįž?ZÆ˛ž]FU[uR™#~ĐĢ‘Üzš_ZKĄqĀ_wcvËTˇŧŋ4Ë™åōÃĘ ˆĶĀ?7s“RiúÂÚÍ,Ž,Œ2–!Æ~ZĖĩoėPßÁŊíÛ v§ŠŪãĐ×vīn`ĢFcnUˇ¤zú÷­!S]#žĨGc'BĶūËϤŌŞîãį›ŽKO?LÕæ1“q)cž ŽŨ.b3Ÿ,H Īŋā+3TÖôÍ-MÔˇ}ųCĖî\ß_zŽ[ęŅWļ…Чa\1ģyíõ¯>Öom\ž{-×>rÆĮĘÁEp0rŨ?Ÿ^”ÍR˙Sכ7Ãiŋåŗ‰Šä{žæ› ?cem¨eŗĶƒÜt5×B“Nį4įŽ…÷[°ŸP¸ˇ[hŒėŖĖ‘|ÍŊ~UéŸĀŦ¯ Üųbņî/YËH<f<üØõėØÅ+ÜĪ8Ų,ĸ( —T †“pät^^Ö;eÖ[Ęr‰€Ņ&pN@ {Œ“ĪĨmĘīvBz›‘iˇ6?jH"ķÉ!ßo žx={Ėžģ‘"xî­î-N~ķD@ ‘Ro{øĩ+š×h…BĀØN1ŸÄÎĩņ­fķ[[ę2ĸųBŸ˜|ņZj6ŦË.Ö70ŖIuĒä'¨mîvšu?čėHā×8Ē:åíÆų.^Öd‚E8hB“ŋŒ¸=@ŽĢÁ^Ēë~]íŒ)-˛ŠķŦŧąÎzzTTĒā´ÔĢ\ÃZ$šÕĶŨD%ūĪĩĖĪ+–GQĢę;šŌđû´Z]ļfħéūq^‹¨2ZxzøÂĄ;Y61”פéņ:ŅæbŠ0Ē>™&šc&ī'¸ŽÜ\HütĻ_äēáĻ‹8÷p*§…‡H€L…ēĒ’ŲØŲę?:ŊãT'áüŠ|¯*Ãūš*§‡ÆôŽ7G•eÁã9…{ûĻ\ē4zÜ$‚Ģ’~PI=ęz¯nsˇŲqV+hl`Š(ĢQEQEQEQE€35,BcŨ´œûŠČ¸"wPÃķ’9ĮĨmę.ĢHį5ÎI.$Ų’7ņÉĢTÔŖŠ¤ec*ãK˛rKÆ äsÍ` +[?¤ļŅ”vŗpBŒgŽÕŋ{}Ŗ:<ĘŦ7'?Oư­¯ŖÔŪ:6j×4MuÔ­åķ#•š|Â…ßü÷ǎW‘ß‘agæ,N7]žÜ^ËėOSíZĶĶ-†Ÿj-Ռ„ļâōY?ŠŦ;-õŦÛÖųåg,@rN'¯~ŽŽ"đŧL!Cßō5Q ŗļvUURŧOOūĩqVĐ^xƒQŪWˇļF>lë˙ ÜĶī´'ö[hNÉĨ ģÕsíÛŪģû&‘ĸۍ<’á e‚K\Myöm{šÍō-ŗđžir$ōd¸~2gc éĶôĒzׄ‘ƒ]iÅp§w–ŊwŌļ4ģƒ6ŸlZ`eh÷cž;~• Žęŋ+qúÖĒ0ļĢSĘiŪįžYߋ›iĄ‘y‘LDČĪN?ĪjGĶ,mÛ́æ1ĀõĮųí]%÷„āģÔōÖæ{d›ũlq‚}}QÔ,ü?ᴌK]Ũ˜­Ü™‡ŠėŊdŖ>kFį\ąĩÚÔį..tûi`•9g߈ዀũÎės\Õ(Ryĩn'LČ˙1}¸Raė; Žqu4úĨĖ1Å3ļŎ4 !P}įŒžkAĨsj"FÄŦģ™ũœ~xâŊ\5•äyõëĒ’ÚÄđo*4ųšAéč=éÖĐŽ§p’Ė]mâ?ģ„ž[ž­ī˙×ĻZi"âė–%"aĢīđĢ7Oyχ„–PÛ-ÕO sߨwŽš;úÍ\fˇI¨Æ- 3ŧCÍ$ü¨3Œ‘ë׊ĢfaĶĻĸy bVAČ.:Éô8ũ)Ž#Ląg–Eķ]ÛŦ€ŋŸØVÍļ“§ÚÁgwŦęR‘|ác–8' í’:qJęÃQå3ĩRîÕ.4i¤Î0ÂmvNŖqî9&°­!-Ú$ŧŦ+ΝëS6ąu{rˆžāÁ'`čü*EXĖąŗąUQŽ}ĢD´&éęe4m>ĸŅÎ~ämÂņžFüëĄŌŽ?˛ĩŊ:õЧ–áY‘H0?ZÃ1ɡ((Ę;†FO?ž1[Ī ˇōä îL`‚IĪü?*‰G™4\eĒ=¯P—ū$׌:´ˇŊ•'Ö°–ßm´ \Ē‚6ôĢ^žkŋé6LžFĮSžÜ U0äÆG wŽXÄMōŨXÅņģ—đ­äHŦīæÄš?Æ -ĻR$!ūP¤ķĮŌĻņJ Ō|ĸ ŖMb:“¸TúK´K×÷np=ĀŽlGBzžj”™ęfĒÛā@ŧsVĢXls=Š(ĢQEQEQEQE™Ē„åÛøFIôä ãuYƒYĘéųcŠ<ãŪēíY••Ŗnę8¨Ī˙ZšMfhl4ã)ˆš—÷`ÉĪŦeîØŽ[ØÆ‰Ulãs¸bĮŠ5NÛ˲ņ*9@ßč„`IŨŽ•ļĸöķ5´đŗ(8RŧP­ė7>-ĩH•ļMAœvlž? ‰|'e(¸ËúėIâŲ +ž4Īšõ˙=+„&—:Îŋ~I\ŽŨë¯ņ•´ęļåeĖ‹´:¯ŨTäûšĮ{[ώûQų’€đsšÂR] ĄdüÎé.ÂۛĻÁZČôI?ĖW=Ŗ+Hŗ‡ ĒÉģ=šįúÖŗÎļöG6Y^”?ØāW;§j…tëhb‚W“Ëģ•xÖôeĄS[ŒŠ"ō帕ɜäŽŋįŪŽD.7æAĮ`+*ęB’Ō—ymÃ!ķŸJŗ :‰Ō –ėí!ų€Ī8Χ͚ÆzɚFņŠBk'´HguW•Î=ë%‘$ (f,8(šČõâĨšš’’\ĮåN ŸĢ{‘Mˇ/<*fdŊŗč3øŌRļ„ŊX˙ŗKũԋ€wu?OzÖąÔ- ŗKY$ÚŊ9ŨZ€FҘ$"TƸČÅeęg´ŗmąF¨ŋēIëTÚ{–ŊĮtGwĒÛĩģYÁ.é]O%OĶÛ#ņŦõŽTQ¨ ķŽŧžĩą¤hŽÂōE24§€XĸŖÔ4ҧę-´ ¤‡#'§LÕ+Ŗ’æzYÆoī΁åG¸ šÜŨŠ//# dI`ŋ„íVŒí;žžœSž íįv‚ā9Īː¨ÆkĄ5ëų€ ˆØō ā/˙ULd¤ô+XŖŧđΊSWŽkœÃz#<=2Ķ­sž#[=]XRí;ü4–ĀķyØ}†–p–j훡+/XĮ¯ë\æ§m}§øģ[ŗēX¯§ŧ(‚æU˙VŪĮU,ãŽæJÎhĐ×â‚×KŠîb¨EvS*Gjė¤ÕlmÖ’é1>6.y< ˙:åotģOė MtĻw˛E"äōĀ ũ}ķXÍኞ$y[1BŪŋĘšęōJÎF‘M&‘ęhë´ĩę>Õ?ļ´8Žßp˜1I€ūđ˙"šÚåf­s+”üM {4ÃŨD3ëÍ[ŌÄA d ųāŊzQx†BšdCŋŌ#?øõ^ŅĸŠ8 E‹[8=ĩqâėfē¤ ûÄų6å Å\ę¤D} `qåöéW\4Đå (ĸŦŠ( Š( Š( ŌŌzPĩ:Å&N~TÎåĢŒÔŖŧŋĩhÜQŽå ɇ?Ōģ=e[ÎŨü;xĀéXW?)ÃČį´I´ikYœÚtÃÍ "<€î˛9dꚄ–֑{åmeiUG=k~ōį~Ļ˛äˇ $§˙^ĢMd/|CcdP˛Fŗēäį’œrk*ąPZtœÉ5éĮØŖ™ƒ"†$ŽOJį5˜ęē\/”YH?Īá]Ąhīc;a؜ôŦ/<…t™cbŗl(væĻ:Ææ¯I$÷­x‚ĐI‘vÜ00įũ+›Ōn_ėÖŖõc厗EŗOėˆLų‚ÉnHųNyü+Ķ2ļđ´jŌBvííSÍ[ÖÆ­ē-ȕgP]…8Á˙?JšĘ]Ac6ĐsÁ,zúŸz­m ė6‹t,[%Xtõ=ū•rÚXôëKŊBęB#C†Ú3Į ÎIĄ­KæVĐKšŲ‘ÖúĐG ¸ãĩI𾉠š“G( 8į@šŒ:ŨŒŗZ–ÄL7FËÔgŊGzČĶÆUÔM,~ƒ¨Ši\ĨŽæ´2ÆÅ¤\ŊG¨ô•­"Īi$+†iä_~¸ŧ ÕČ/­Ü¨ËĘDj§$ôéMKgš¸ûUÚãęā=ŋŊÖDÉ_Dli 5Œ ›€QʞœVFŊq‹č’)•ŧŽdQÉ'Ž>ĩ­Å͍ÍŅĢ&_ũXĮ@I<Õe­ímtŲMĖ‹å`4ŽÃ¯×ųVÎjÖFP¤ÜšŠ_nB‹ŸŪHÜ*(Ī=ŗéÖĢÜÛģČcĩŠBʃr‘’NOLRé—ļM-ŨĖs—ˇÛļ7 ķ Ī?AÚ¨ßj:ŲēĀËrFU&NÂzŸ~õ1j:Ü*s7cĒđōO§lēžeUK9n\OŽ+7Iģm[ÄSLą4p^]}ĨædˆcQyõ&ŗcĶĻiÕ˛Îø ›‰8õô­‹ynZÁ`Mąėų”ëōQkԎ}AV Ũ4Ã!Y n‘x˜žžÕŋÚÖŅÅ;ʲ¸ŗĢÉ .ĻŊ’8€ųĸāīö¤×Ĩiא[2Cy-™,K˜ÉúŒzūub+ø!ēĪį^#ŪK&â§Ô€×JÄC—ŨÜåžW˛gGĄXËŸ4÷jęîc,‘Žv_ĀYž)â–ÛMjJÍ,ØlnQŒíž Ž/YŦā5Ú0=ejũĪˆžU+(h8ķĐ6O\öæĖõdĘc+Wßwk5î Œm\Úvč`éw+§j6§WōÄ[?rB‘ŒŸ¯?Ĩn_kCiĪm`a–ævÜÅU‚õįqöũk‘š……Ũŧ×÷Ė褓æļ‡ķžÚĩĸ^ le–å>lq&GŽO_Ã5ŨeīĩœŊؗĩ ,ÖábŠå•1´uëĪ˙ĢķŦ‰ û˛ōA—Ļz~ŸÎēmE}vénnˇ:,3|Ōîã¨sÄú0Ãâ¤;ŧ¨-üåŠ8ĮĸņZ{TĨƕҋĻúčq鐇p]¨ŧŒķ@`\ģ|ũôô§_ŗŽ[cncæ”ČĪ9¨tq$Îŋēo˜(\;V‹ČÂjĖž÷&+I%ÉW!N2x'ōʖ6°´ldĀ+°|ŖvKųĘ Õ.„‹GOžLÉ.rH>üίÂBZB’ąG*7šI'8ĶԛhU™ŧĩ"I ŦT•É$ã]oÃ딍õ[@ø "N ˙´ŧūĸš JØbrãߏōį]ôßĒëŽÃ”Æ÷S¸ÖuK§ĒgOâ9"ûI<ĸͧ8'$đ^*֗qo:$ļ›ž0?Š2¤ŸĄ˙ŖöXÛlM ÜĻAÍu7Öŋd"TÃ;2†Ü3“ģ<~F°ŧlÍĒ_܅ßäDTw,úÕĶųW×wÆ ‹`Ēš>bˇ ĀíÉéXNĸriô:i§Č‘gQ6ļ:t÷Ŧ¨“Bždmœ}1ŸĨpÚ‰ūÕâ8–ųĘG3l`“Öļ|k–ž†9åûEĖ͈ÕĪđĻIãđĘŧæËꐖ8 ëĪnŧ֏’pmîSŒė{U΄îYŅüļaŗƒž; Õ }[N.%šicxöɇ!ŸŒ`WIvÄۂXg>ĩ˜ZaÛąĮŋZãR{#˛1bĮamnĶ4VȁĐã}?:h´ōc‘ˆVŒ(~Ü˙ŸĘ­˛ 2w'q8ãŌŖPîÛXüŊ}Ģ7æ6ē•#ĘēlRJ›ĸÚHæl`ÆĮpÛÔÕօ!cãd“ÚĒ=Õ¨ž8ÍĖjä—w=qūŊ‡{–&ÚVĀ “Ÿ^ĩZCŋĖf`Füž3éũk/RגÎsmi ]Üđv $/8Áãß5UāÕ5@ņ…Ŧš‘"ęQÉ}d8+ė^Õu¸tũ9Úâr˛LqSœļ?AUíõšõGˇ hPĪæi2Æ ­IcĄYY(ķTÜ?8yyĀ?ʡLŽB(ãŽ>•˛Ú(ŅC_xÆĩĶĮ9ydxļ38Ũž?,VÍ­Ŧ1A‰>oī¤sžj_$ n!†ģųz֕ŊēIočۂŒĢĢduũhÖ[Š\ˆ‚ōÖëso0}€˙ mŦØü-c 1í‘Fs÷ĢĄ`>éãđŦĪ^Ũi^ŊŊ˛ų§ÖūîN3[Sģ|ŠØÆVz˛“øFÔŖÅ™¸Āf~÷âškũ5Ę[-ÔW|HņōŧōîīRøSKÖŧAesŠŧ^|{ˆ Ō8i=p3‚*ü6öwģa1ĩŦąœ*ô*{ņŌē#ÍĩÍđÔiÍŨģÛĄ%Ž–&!Tˁũ+mt"‘¯y {~gHŠá,áv(â@ĀîümīB{)ĮS]éĢ5ëĘö‰ČO Č˛Vh$-Œ¨ІOĩųŽKûۋ B@üĢKVņĶ FmŒeƒysJr ×?•dÛęū šąšîÚ&nÉ,Ģ¯Ÿ&ļšÉRŗJōąxI­õâˇDō[…ŪŎzäg>ũ=Ēŗö6Ÿ+hŪD÷iŅÆĨ‰öāšĪšĶįģŒĢ쉤Ũ^Sōũ0xĒļđ*xČīĪR{֋ äũįĄŒąĪ—–(ŅūĶŧ†iŸI–kHQą°2ûĪŊ-ĮˆŽõ7ˇ¨Є12ŦsÁöĒîvĢE Ȇ&¨]ōĸ˜H9Åu{5k#“ÚÎíą,ŖKī\YLąĮ OR×ųV’Éqm9‰ÕXuĪŨëœzvâ°XšˇŽĐ…pwÜc%ãŒ}j[ĨxĐĮšœĘ ÷t_â9õíBĐÆZ“omfíĨ„Š g={ū'ķÅk4E°€ õꎙžBâ4I& ”ΠûĢųįR\ŪHĨ-ãÃ\H:ˇHĮŠĒƒęfīrBØŽ˜'ˇ<ÆkĨøoē­ãK$˛¤i8åĪ=Mr–ēmÖŖĒÚiiuå­Ébīí={gŽžŊëŅ-<#ŖĨˇ•o§Â Ļ2Ān'ŽIīÎk Ķģ˛F‹Ev;^xäÖ´há–2ؐü’GbēģRŅÛĸ §Ķ¯=k“›Ãv­‰ė Š ¸[tr Į#<oņ­˙j§RļT]BŪ\ŅĐö#Øā×4ĩՐõ‘Ô/,O| ’ĸLîbIüjZ"r…QVEPEPEPHzRŌĀš_.úæU9c´éÅcjJŗ`9ĘzûÖėã}åÁäۜ÷âą¯€Mã!`ßJmÚ6:ŖŽ‡%u%‹Šl‘¸ú{˙žĩ`^ÛXmP~ÄíīŽĪķ­íLGŗ9Āwų6úäuũkŌ´ŲßXŊ–I7°+ķŊü̚WØę¤ŌlåķđĖC ûÔ7퉪…X|ĒI!{gĩ_Ķ-KÚÚŠB LÖ]Ú˛?” ŽÄûv­÷BŪņҤogáĢŖÉ[rsßuũJŖŠ5ĨŧQHņ ŒŧƒōŒįéZđŠoŪ.0ÆÔžGCŒįō­di;d°ĩËüę‹ōŠõŸūĩcQŲ#zjíüŽ{Å×ōišLö1Ē+ß0'•ƒ×Üןۯ“!îa‚OlŸķų×CâKąyâģĸĖZ†ÁŽŸ(éųÖmÄ@Ä$U íßü˙JŪ ¨Ģœí{I9w€BēÉ|d´kŸC‚kĢfrˆŅ†2îwzúũ+˜đD xrá˜1ģĄũ?­tR^Åag-ää‘ĘŽyv=ŸZķęŨÍØô`’Ļ™Íxūî9îôũ,ēŖÃ K1'ĻqõĮķ¯9ƒę0`ZU@ę3ZēīÚÎĸ.oIk™Į›'ĻOoÃĨ'‡Öņ>š­ōƒp™ČĪzîQä§dyķT^§ĩŨĻe<€QÚĸŠØ€ Îâ{Ô:•ôvˇRnŖyEåąëÂšš|_=ĪÚtë;GŠũmfį?ÁßVz’Zhvķ8E#'?×5Zūxl­Ug%ö…O˜–#8Ž|mgŧĶÜ+JņŦf4r3ĪŽ3[úîŖ§iŪĩ”ŗ$“*š„á—ŠëīZƟ;ŧzÕĻsÖ÷Ú¯ˆg–)÷Ø[[1I6/Ėėrü9ĪÔU};ÂvÖWMss$—7 .õáAëšŌŅĩËbFŠÂëlŦ¤ˆ§!2G^{֔+~˛HëiŅ“(cŸqØ~5”Ũ[ŲhkMjÆ sį´Č‹æ™ąÁ'žjht餈ž6“Į°ĢvĢ6Ņ%ÅŗÛĘŧœ‚GåWawĀB0>•Íg'Ģ4uøLY㖠FWŽ$~•r;Øc˛ķīY-ã)w<~Ŋj‹HîBīåUzž˙#5æËâ{[ŨZkĢĢ§ÂJÛ&ߕGŽņkZtä›Ōéæ§ŖÜYŽNĨs3ŪÅ!¸•ļVU?Ãũ ÕđˆŧŅõyt ™Ö{y`ûTdOŨúÖ ÅÆĄzVXɉÉKx‹c~OaßļkĒąŅ’âÁŽ ‘Ž­ †%ēĢáÆyČŪēT.Ŧ9rÚČØŧŦã  /ĖÜuõ§ ]áŠD Čva€1õ¨ÄVėĨ'‚OÛm ŗŸNœũkRßÒÎņŨŪĖ’ŨDÛâŒ˙ĒN;×ëíŌŗĨ{DLä’ŗ4´Ō´;k~_-áīןđ¨u}ĶXĖ‚ė ‰WŽ}ũh“R{ bŌĘņcTģF "ôi8įÛŦSđ@Åz^Í%c™Ū/™;dr]éÛj‘<@ ‰ĐŋÂļáŪ)Siāĩn\Í6N÷D} ~™<Ö¸ĪčZ~Ē÷÷w6€tËIŨĢĮ#=*%7nĢķĢÉls†Ą6Ŋ¨ĨœĀà ši ŠÎ[8QÉüjM2$KVg›rŽĩĐxÖĘßM-ÅŊ°ŽÖx¤h—„ qøĀ+ —˛4\HÜpJö8÷žŨs3š­OhÉn.CÄR5;؟ÃņĒPÛeã-Ÿ¨õÍ+‚Ģ‚„g;ÁÆ~*m…DŦŒ~XۏOÆēīØÃ”‚3#Ą„‚WÔ{f¨]ȖėL†p3ËzV„wkm•* įķ7^*Œ[ĩëJ˙ëJ`  g‚zt46–‚Z‘Ûƒŗ\ĖHĀHčAKu*Ksän_,|ōąčeūgđĢ0éSę— mĻBn.\–\āy`tf<āuLJOžÄIm|$‚ų\—ķųũ6Žã­dĒÁžTõ2ŪŗŦ„+F¨P[9Įqū{T*~ĪæGšâ*74ŊČ üįUāŧhæŅ|ۅFĘÆ7u{ u:€õ}kD‚ęKØ ŠåCQģj˜=sŠSĢ+ A-ÅŅ4˯ą7ˆĘ<gTû:7VŒœãĐö¯Lą lõČé[w[j%[ŸqŸ­rž Ŋy"’ŽœÜTU¨ŖNēqr1ĩ¨H˜33HųGĨeéģ§žõ„mäÉl¸,ܕßú}?ƯXHńؒ§q#ąŖBtž˙XEe‹ņ\ŠnSŋC­RP\˝kąX•aĀôĒNu‚@’MÃ#’=+^Ū،…AËÉCY+ŗ–lcŒéŠēb{ĻjNYô+ã‚JÛšq“ƒXz\ą2ÖHÆ@ íÅjM|"đũüųVûŨzëÅbĢá_:"Ą~ĘIÁé•˙ëV5d´GE.§rāy!#Ļ_2GĮ$–'fPcË8tīP_ų6ÆØ7$ÛĄõÁĮzmĨęLßfy„Nßę¤(OĄŽŠt0¤–¨ëü!‹}QWî™ÔŒņƒˇŸæ*ū¤5 \Ė6Vį÷Yŗ‚ūūߝA§ucĸĪ”"–õōÜƒJĪģVM+˄1UĮA€a\°ĨzŽLčŠ+EEž ģK­FIT‚¨nØĒÚ"ųž"ą9i×n͌Ō^A0TyW ˇ,Osí[˙tOí?‰]s¤fR3üG€?­oVVĻŲĮŨDŽÂ=3ɸÉēIž„폓üęhtōˇm/’Ēd –¨ˇÍ´q…¨ĪPF}i™H4œdd-y)NG¯Īé"´IfE†Ic€ŊĢĪĩÉĨjˇ ĻKēĶy_%ÆQ‡lĖū5×ęN—7Ööŗä[f Ž$8č}1Uĩ/i×vöyJ1ËJ„–RqŽœîÂĶ•?y+œ‰JGk¯i­čŽ_@.%Ŋo)ôŽ÷Jē¸ĶmĻĶ4Ë8lļŌHīæļņŽ>ĩƒÂk‹;ŖqkŠ ĄÜ7§5Đi6×öWđĪyåÉô[CF r:ãÔ~tęMßŨ_™%&Ō‘jÖ9!™”‰XHÛ¤yæfõ­6Â8 õ¨įgAšT­F.˜ ž@īžõÃi7ynvībęhŪ&V(ęU€āāõÁŽ$xCĩšVģžyĸÎá” ŽžK‰m‰rŦëQ-ŗ€Æ8árj›ˇģwōiĮvRŊĩˇšîöB€ D@îãŌ–ŌŪîÉĸÔ#”Ë,`ĨÂąåÔ˙‡Šģä`F0~\æŦÄM˛ųÄP~ûãWMÍI&šlƒSŠÚįM‹U‡ÃĄ@á˛Ācq׏Z›QÕĸ¸"ÄÉqw‘åÛI€ ŽØãéÖąŖļĶu °^ĘUs˜bmëČ>†ļm"†ŅP*GŒ—õëī]žÛ“H˜ržĻ.ĄáËũR÷ēŦž|X’ÜGÂ#Ž™Ī'ô̚wŒ…ĨēZø‚ŪK[¤aš˛>zö­RÅķˇË؍ã†t0ÜFXÃt5œjĘ.áe%Šŗ$p_$[Į›!— ûÖ˙đøÆĖXęd `E Į°=jžw/†ĩ8,g—ĖŌn–Éx›—é]ŋoöíęqæßúķū}kĸiN7G;N.ŨŨwû:ÛAŊ}V-ö(š‘UrĖ3ˇũŦãõ¯!ĩ‹Tˆß_A§Ë6—ÛWËÆ1œgÛ"ģOë-Š|<°nFÔæzƒĪę?ZɏQŧđēÉáī&“PQüHî‡øV1Ÿŗˇ+ą0§ÍŅ‚—Ņ\Íl"‘á‚V^eÚŧ~o¨Ģ ¨iōKäŧ++ž Bû§Ŋ~ĮI†ŌÆÖ×Ë]ąÆnß@;tíVâŗ‚?œDšė1ƒWõŲĨ¤Q2hķŨÁ÷šģ›R!igģ"Ø}ųGûgøAôØę^Ņõ]>;ĢDhâ˙Wˇå(}ąŌĩ„23NÕÎv­J#9,;ú×74§.i=HrF^• Øč–Â;(îTrO<“Ôžišåœ–ŨŪÛErDŌe āfĩČ%0qõĒڍœ:Ž™sg;‘Ņ˜Ø¯ŸCZB’¤î?đ”úT6rÅy¤ÉlĶŗLō,?ģ*À¸č1ũkšOx“L–K[]Eb°ļ&8ˇ ’6’=+ –cP€é—qÁĢÂpÃōnüÍhÚxrÚ( Šâ4’U%„ģFIįđéŠqįZ%ŠßĶZ˛÷‚¯u bÂKũJ=˛‰ jÅ6™wÅsŪ#I%ņV ąĒ ‘ĻöãåûuŽÂMļVķ_2HņZFeØ­Œāzw¯<ŋÕĨÔõGÕ4¤Ü×mŌ[H0Ū^~ßėū•ģvŊš‚RœÛŽÆŦąZÃkąJ$RÍ ‚Gu^ĶmãĶ"dDÛfĶëĐWhš˜ĩžûJ™VęÎŨŲ×?$mū9Åz/…ĩ g͙ũÜĘŨä€r?(MiŠŒ”NÚˆÔwĀ5GŨqīRUDķžâŅEB (ĸ€ (ĸ€ (ĸ€ JZC@wŌŦ7ō¸Æī(~=k‡Ŋî`xPzžĩÚk*‚Y ûÆ0ךâõ' 3(ŪN3“^~"Wv=l,SŠf6­o4ąÂbbpÛ°Zģá)ũ¯?ĖZ1Īl/~4ÛeY0Åž^„ãĩ¤[˜¯uIvŽ^5ū×ųRĸõąĶVÅ9cیÖUü]ø‰g~î˜?ũjčcŒîVfĮsĮJ¤ŠC(i]ÕąžŨ˙•vė´9ššBÔĮsoq‘~áÃ+Ī'ųâ°íKāÆT+ŧ[8Áč#ükqώŌí¤¸šIÆqĮ'ĮZį¨ö~fņŌëČábĩo•Ü’ŒĒ7gÚŗn4åƒ]Œ@wáę+sU˛pēŠã˙Ķ5L¨āuŦ}2Y"ŒĘĘĀ@ÁÍt'}Nf–ÆÅŠiˇîlŒ•PO@:˙:ŌH ķdLÛŖeÆ>ķtŌ´|#Ļ[ŨZÜ\ÜîŪ…›3Á¨¯aûE›BR0Yđ~ņä ū8ü¨Z–Ũĩ9ŋ][\8X˛'F÷@ÛĶķ§čúĢhúlæ-îōKķ…rĄ†\VuÂAŪé (¸`ûíÅIiŌ)Xb2J_vÅ<öĒ’Ķ^†jmO˜õ­ú6ŌĸžöîÆ! ų#S†_Š''­m<1]āÅ$r(8;}+Îô? ^O){¨Û˛Q‚ŧū•Ĩ}ĸĮlėī$' ĢÂä­qēiŊĨU=ÎÂ[4Ú<Å]ŖĻęą ųf-ƒpSŨŽ6Æ;›xĩ‡Ú Él­:ĶÄ:ÍŊˇÚZŪ-BÉ$(ķ *ÃHœ$éŊÔešŊ­ø˛ãG¸’%Ōf¸ālx›9oĘšmKâ ÅÛ[)Đe ‚O˜’sč==? ímä‹P….āÃÆę[ÔFÚ'rŪJŧGéDņRzr‰Ō]Ė­ÄŅkŦb’Ö[i[?+ Į¯á[ĸČÆ;Št6°†&(ŅTU˜ã*ģIųGs\Î*OcNr’[*…ÉíOuŽf•ÕŽXāgęk?QÖņqĻ”DĶ;í’P7,Xūf’=ŽYeÔĨyđwį#=Ž)¨(î;ܡŅ]#:s8 FúzÕk6;ûĄöZ4@~īåZĻÎ| =)ŽŊ=+Tģ“{ZZ[Û§—`c¯:ŨœzbŖ–XėŧŒ#^Ÿ9Ûüčŗ›í°4‘2ļŊ&Ŧ=l,І> äŅŗv0rsÔôŠi_™†8ûU]Vķû:Ã0F$ģ‘ŧ¸#ÄĮרrOŌ’}Eu˛(ÜN÷ž(‡ėŦËĻ$RØÜĖ>`=ĀķĢú…ÍÆŊ ē4VW1HŽ‚ę]ÃlkԂAįŽ8§i–Į@ŅI į]šį#™%n™š=yāWKŖi)c§ØŗČį|ŽzŗO¯å[ÆO–ËvaZv9/ˆ°XxsHXÔ,6÷iۅ8ŦŋŗÛßüJŌ.âãuą‘Ā ˆŲG? ôĢ6ÚöÔÛ\Âŗ@ܲ8ČÍcŲh/†%7öÉ ÉÁl՜ã$ŌKC8VJ6ësyWį ÔŪZÆGzʛW(cšˆ< ĖÕõۙÛMŌ~[ۑš¤eÜ!AüXīž@ĪŊŧēŗ *üŒ:Ž{õŠ[ 3Ûë\vâIîėžĖ÷ÉyČ­’72ĢģŽŨ¨“YÔÄ yą„Ŋ;!ēOŠÔģ œĩĘxĻū&DĩŠvK„uvTcČôĒ÷­ķFXLŨįŠĒ‘‹§i$ Čz“Ūˇ„l#NېŲ3 IĪø“[‚ęÎÆH–ęî(^Sō 3ūsPCkS+;`“ĩrq“ŠĘņnŗOm{2ŦęĒ"ØGŨ<ųāUJVßCeī4†xˇP“WžMO—ČšŪ3;ĘzH00ŖØį¯ĩaB ķŲŨÆÁ ļ1”Ŋp_δ­ŖgX<+äŗwe';OâN)m4ĮĩņDÉl sÎ}+Ī­[Ú;-ĒpTŅą`gšŨ;ȇČā}:Wiá˜$ŦĀąt¯@;ūuŸĨénî–ęĸ&%PķN+°đĨ’A§Fg<“Ey#*ÕT`ô:ˆ#UÎJŒ–Ą†2)$|Ī‘ŽÃJšŊ4ŦxoqhĸŠĄQ@Q@Q@!Ĩ¤4Îj‘<ˇ2•Âōk™ŋ„Ŗ›sr;žĩÜ]HžMÉn\gë\ŨũŒ.Ļ‹æQ€OOZķņ÷ŽzxZļVg—ßOŠXlU@‘$Y™”ũņ’Oā;×BŗũŸÂ1_åˇ]Íö’‘僁úm­y´!sy?šN&H=29Å[=šŌ—Ns ļX;sĶŸüŠR™ÕR|Ú"´¯›j¤€&›¯Esž"ŗģÔī`[6XÄq7'ŧ1šĐkYoôIā cd˜˜  įŠäâ4…’zûVŗ­Ę´cŠČXi×7ļ0ĮЇq”(O¯nø­™,lŦ4Ō\a6•\6čãZélCėMĮ<ã×ë\ˇˆ¯ôËčΙĄĖ4¤ōGPO׊ŊIjhÚļ‡)ŦŲé× &ŗ¸)pŋ,ČŲlũqÍaĀBģÛJ€Ų÷­ jō ܆8îļīŖŽ€˙:Íļ‡}ČÆNrMw(Ų˛zVŠĻš$…áo.N3ŸZdĶ&ž.#ĶKÉቐįîD8Ë^ ŦÉ.c Ā•8ŽKŠ.‘erģ7K4`zškk ģîqJ…Ļi|äžÂĩŦ[ɡvˇšōn™ÁSž[čk>Ú0Ę‚{ņVā…ŖšR ŸĀ ˇĩŒc}ĪHđ¸ŽŲ%Ô/áY°á›'§Ojv—jë¤Ë Žd˙Hv@O* ãôŽvÄÉŒ$­Ž[on†ļ´„•˜'*~lŸQÅc“7žĒåõÜ4Hë´g~q“ô­5ŊŠ =fšÛcŽ:“Āõɨe+M5Ãė‰G>ƒŸūŊe›čVŋÕs Ŧ-ē(›Š#ĄaëíÛ"ŽQ]HŊŅjúVĮˎ×Ö§ŗą[LŦqĒķĐ ČSRļÃØËƒDÜË$í$¯Œ•‰Éú+f+! AcčM]TÉVeĮëVâŒJHĀāt“ގšĢdfˆÁŗ`c–=Ģ›Ōį‹\×ĻÔØkō­ņČ_īëŸJOë2Ú]éú ŒbK‹ŗæM–ĮîĮđ˙ĀšüŠņ]éöúdķ[ÛË‚2­XtpEimŽ:Oš.H×ĩ–;íL]ČČ,mF!vqĩÜ÷Ø ëc €:įÔvŽÂúū›ŦŲÅɡŲĶČ19ÚÄãįéšíŦâŲĮ Hd ¸ H9…oĶl原Ruųē~•Ũ´wUSŽæĨ`ņžž´Ŧ¤“ß?7čsėÎK[û‹äĘųi\‘KËÉô‡5‚× Ĩ-ŨÍË7öŦņ‰'p°Æx nŧ{ÖׅŅuëŠõųÕI‘Ųm•Ž|¨ÁĮáœV†ĩoĨ¨Úii“æ,×tE9Ŋ‰Ŧw’[ķÛFrŪŅĄŗ–mVKWˇ’åqDr‹Ž˙Z×i`vë‚NJÖēļ]žčÆ?ŠĢ˧Ûų…Œ@{ŽÕq‹ę_ĩG0 7Ōģ@ąۀâ{ Ōhti&x–ę—¯–˛Įč+ÛPÅüēJi’CÆÛ. #ö*?9MGr×ŧSņļz…”oûÁ,žíāņôĢ–zmŊƍ ÎÜÜĀ#3ŗ|ØÎpj[Ûyvķ°–8`ņīŸqQYÍ5ĸ]FŅšø&y>ƒōÁŽJ•œ“GLTTn‹VvžbŗČ€“ŒŠäžĩ-Õ¸ēÕŦü¸÷É*dr9P <æĸš´ũQ¯J–ļhXÁ嘎}*Ũ´2[Į4¯šäp¨sŸŨŽ@ũkŲhȔ›|ȡ.ō–ÚoŊĮķ­í2Ím#RrđĒZoīc ĒpqÁ­˜Ķl™õŽÜ-4ĩ8ą3m؝įŠÍ>™^”úī8BŠ( Š( Š( Š( š{SŠ fÃ]^Ģtr1˙|ŠÍē"9Žäž × >ĶrO|túV H,ƒ85͈I+”5cIÉČ<ãŋjlėbļ,ĝŨņŪĒM¸F¸f§§ÖE ā¯ZåzėvōÛRļŌĐŽė'Š„ūöfUÆÔĢs8E\đOgĨcęē„N‘svJ3"ĮīžÂŖ•Ũ#E-.Vņ>´ÚN”#ļŒÉ}xL6ęxŸâ>ĀWŨééV)“Īŧ‘ˎû äūu§Ĩ.Ē.u]C÷r˜„vШû„pØôÍa\åŽrĀįßŠė§ #6õšP[‰>dÆAÎ:b§ė^i†Ÿ”ÚŸ§ŲČÅUČU#$“Ö¤Ôæ3@aę¨;ĩĩîČĩĩf4nÂB@zÕëÛR–ļí#ų“Č™nz đ?Z†ŌŨw.ĮkRîØÍ´ŽUc‘W§BUĖku1žN5ŠcháŪ?™yPGō)đXÄ/2(Ü ÕČíØĄ,HãÖĨģ+#@"ĩŽB˜ûƒ é×˙¯[ZFąîU{.?:æ—$#.ÍÛ=+fģK%‹Î•c…Æqģü*cn_ÄZ¸ÕöÁq=ĘŽW gnŋ~\=O§ĩIĻøJ[Š~ŲâæČXĩVũÜ]ųÍAĻ-ŗø”_Ė'šHã˙FÆ\!$‚Oāuö—Qjéy3@‘ˇŽj*9Iō­ ĩ‡"˜Ī—*DŖsô§„TSģīį9<ÔĒ0ĘĢ€ĖÜŌÆâsœgÖŗŒF¤Fšį>Ē'o/īÜRI Œä)ĮšīQ+yŌį-ÔzQkl5ŊĮC.Nc F:°āÕ¸DLŒéŒÔj€8FqÚĨT͡rîÎvŽj›Đrw,Ål7ØÔæ= –Ā>•^7ōŲ€ÆķĐM&W9čO\š‹¤gfÍHBméĮqK…C¸žÕNÚbģúfĻffÁR}(„yŒœ]Ė/xZËĉŌ“äCNoĨqwžņ‡ėÚå¯VöÜ6^5SŖŊz\›äƒlmåčøč=ŗYO§[ŗbęõ啔‚&›ąöĨTéģčkJRŠĐōķø•dŽ8ZĘĮ"q•ԟ^ĢĶ<¤Ũhú#ÛKŠ™ĐËæFã˛úsÍ>/ ˛˛įŒ|Ŗoųũ*„öwW3ËŸ— ÎĻĘZ˛ęJ5Wņ œíūƒpō)?>ėƒS\xŽÖãMģĖ3'î_īöMsąĢų¸(y'č*ļ´ŪVö‰>ų–Ú0RŲÉúc5ēvw0•(%sWÂښh~Žæâ5^ĸ÷ØôũH­Ũ;kxĨ•î#’ęã÷“;79<ô•Īx†ŅœhLyŠ Í&WÕPíũjĻ§ŨĀ‚)¸%ŗQ;4“!AIŨžŠ6\‰ƒĐæ ¸ q ĀŲŲ"8ôú×4Eˆ?j{+ī˛e2ūÕ7+"•Š‡Âv6÷pέ+rry­¤ˆ1,ŧ§éRZĪęPA9"ĻFËüūĩ”`“š2Š-™Bhá•äķJ.ÄÉ$ũŅëY+´ÎnĸE}ä•aĐŠ~•SđéŋŠūHfkyî`XXŠėz{ŒŠĨ`žĄT R0{øšËËēZšŅ•ī`žŪ83ˇ1¨Č>Įj…ō5ŗŽHAųÕp°˙õ×1#˛ÁåīÞzy­c+„ĨwcSF˛&PD^R7cąĪŊI­Åqk{%ĢHUPUHÆqŸëZPŨŽ•Ĩ‰‚æã`0äđöä×N~čķ$ģI%š¯œæC—lsúÔN§/@hķ—’y…Üj랞õ{OšÕ5›–ˇĩ&C€š ˆÖŊR hÖßętøđ>ā$Į5¤–öÖ͈íŅrĐ1YûIKe`včrēÃë/* u)¤yĀåb}Šū5Ž|'ĸ-‹ÛɧŖF˙(;‰o^¤Öã22ō~cßЉ…ąÉõĒŅüLÉÜã­ü5…Ôm§ę×6öęÛĖ=qô&ē[khŦ­ŌˆŖû tääūϝîØŸZŒ!*GnŪôŦ–ŖL†8˙z˛p äíųRM"”$q÷zšŦTtqžŊŠĪ‹2HÁUq’qļ‡rofTšÕä`ØÂú­}skĨĒÉ3<’žå˜û ˇqs%Íží1Ŗ˜ŗmQ}N{âŖŌô˜ŦgiĻg¸¸cķK ÉΎ Ŧäĩ-NÅ5ƒTÔ¤O´F,­ēâ9ŋxGÔ+ZÛO‚Å?t˜ynKŠ<Õķ#$’sĶŊ ’ĀzUfÉs*öIōd6FO­WŋŧˇĶŠĩÁfyË `ŗˇĐ~_k nĀĒ×ē%ĩäÂōHYį… .Ž}¸ĻĄbėdZęZ•ķˇŌžÖ<Krà ũüjÛh?lpú…õŨÁ@Äŋ÷Ęā:ÉĶ­üGbĶEö(ü¯4˛bNpzŸ^jė^ † îÜą!ĩ_Ū˜Ø•œŒã¨ãķŽˆB-y„š›ĐĐ>ŌĻAæFō0\#ąĮëPˇ4U…„Vˆw6âX’sõ§Úøš‹Y.Z)#ļylßōĶč+IuË(íbšââ8RBī8Ëz{ĐéÅõ&õ#ŠËé÷_đ‰ęSŲę.4š0-äûŒöSÚģ^Öîš#ą8H`Gļ+#ÄŦĶŠąŠÄ\ų˖i=øį5WMđíÕļ›mdš…ĖvŅ)_*,&sÎsŒ÷Ŧym IŠjΊU´ļĻ—ËŠ5äšãĪÛÚ_\Q’Ŧ‹hˆÛÉęÄzž>Ÿ\ˇđÂ4ÖŌĖĶJÖüŖK37>¸'ƒ]p,IĄ@čųũhPŋC7;ÅÁû_´ûUʡļ’i8éœ(ūĩĶ­¸\G_Jæ´Éá—ÅÚÕ܌‰´qÛīcžI¨Šn%Ôuģ‡X.$ąĶ2>%›Ü7aéU>[ļö%ļė‘žÖĖ"^;T'KĩķWŒöŦ„ĐíŖ€¯ÛoËã†û\„×ĨP‘5X =rä(;O›Éüë&Ŗkĩbã}–uööŅ[ŽØÔ ÷ļņHˆÂiŒ]˜¸Ā$?Įá\_ŸâˆePúŧcnšũ̉5ĢC§ÜũšėšÃ̧ģ/8üÅ8Ę\‰Qž÷;-O¨ūuĀøí䲞 ĀBŦČB%҆AĮŗW ãp栚Ö)‰ķ€‘HÆÖZ'Oš,šU\%svΞ6_´ŦJėŖøOSU´ëc1Dfv­Gž-|U¯H%mŗÃÁīŸcųÖ¤1,7(Ęģ˛0A¯>ĸQ•ĸvÆ~ë5l†c;ŗČäUĐ÷¨mԄÎÍX'Ŋ: Á7v ÷iÔԕÆjđ°ŊR@,r Ía^7W:hK•œŨåÖŲĢļæŊ* ™^x™—ĸž}ëBKxŅ~rēc8üjŗÂ$…™bč ŽãÁŦŦŌ;ĄË}Lĩ‚0ČčUÉ8ĪaJu {w0ÉĮbéVd‰ĸthāãõŸsjÂ5v_ēy=ŗUÛÔšÉt6´{x–‹ˆÁ 2•n;Ts‹6ËÉr~cɡķĒĐ_ļŸk†; ¯lqTuíbŪîPļĀ)NIõޏÅXåwæ05IãpĘäûķU´ģļŪŠb8ÆāÄu=éŗâęėd…Ī9˙fˇbDƒFyƒlypˆO§|TËĸFą2Ũžķ]ĶíH8{ˆāÁoå^É9ũį\ō1Œ×”ø&Åõ_†fh´ø÷“ÛĖa^ŗ&ŌXORAū•Ī9^Vė\]÷! +dãjq#ÃrQ# mĮ<ū5!ÁĀ8ę)k¸4M׃N”å+°.vŒäbš[1ķ;cúĶÕaœ08ƒJú™Č2ŦÛŗ’*Hƒ0O{Õ+íRËK>[žn¤\¤ ģ ã‘éīŌŠnģŋ"¸s nĖąEĮ—p9úâ›kŠ6švæúÆÅwI2ÉpĀųi,íøëŠÉ[K­VégÔö›uŽĪøúˇŠūUvÃJ†ŨŸČb û‰îkV8V2q’ßŪ뚙IŊųR܎ÚÜ›]~R8\qS¨f8ĀãĨ=CoÚN§9ĢW8QžÔŌ˛!ą,€qČäÔĘI8#ƒéB #ƒŸZrFҎ ķČ­bŦfØåRŧmüûTĀ€@ëī@`Ã'sÍ4žG9­-ԇŠŠĶĘēžŽæí(Ō.DCŽGĸņ%¤¯ÄX|¤F˛‰dgĮ.ÍĶ?@?ZėíãUDŇtÎ*TTē#YN\ˆą pĪ N7äņķŽ \‚ püéMˇå;ÆqŌŽōãVÚnL]¸ĒדĮknķČÁQI'õŠŲÄkšˆ :“X~%ŋ[]1CB“G4Ģ+t(y'ōĨŌä­õē›6Ž÷ōB’\>qPqĀÅl"@‘•PŽĩCNÕ,îlĄš°Ž  °ĪOjŠōũË•”Šl„•›eĢÉØ%U’č˜˜ē°Āõ—ŦēÚZÉ wPÛÜ´ĮUd*V܌˛c—ZģÆ×FĻîWÕu¤Ö]"ÎÉŽÁųfßē=œđGāûÕ VŪoøIŖŧšK™Đ‘e9e'îNOøÖõ™ŗŌK›éā†wá‹6ß~õ^ÚŅ|K}Šs HOú,.8oúhGōŽYÎVŋāCKĄb=f› ØLör,JšA<ƒ×Šüé‡Ã‡PÎ­"Ë.NÃ)°ÁūõŅĒãŊ;j’°ųÚØŖĻiŅiļÚBYŖ‰B‚į$ãš÷ĢĄGãJhÖą‚JÄļŪĸŠ(ĸ¨AEPHxíKIŠ)ŦN8ö§Uyîĸ„ĒČvî8†‰-Đ$ABí™ÍKM\:˜‚Š( Š( Š( Š( Š( ß;ĮVmØ2SWËfãi<ČæĄēˇ ģųžĩqi åīāWŖd9AĖi mVįO•×}šÜŧc*}+ēš×y*ā “\ޤĸ=vɑĐųâu=qŒį?…D’:)66Ū4Œ™$å‡*j–IÅÃņžŖĨ2EØ6ĄŨ¸đzūU%Ēâ@‡^Mf‘rdČ0ØųļžõČkúWÚŧžžŋĨ_KØ”ŽÆÁĨÚĮpˇÎĻIFOÍķ}zäŸrjƓ¤Ûkz§™:ēéų D{‰¸qžPJŒōGõ6—Ŗ_xSH–&ƒL^^v]žo QÆkĐ4Ŋ>ĘĘúhŖg{oÜ8 ƒ€?„wātŦ&œŸ)ǞC,ü Å˛Tą‡#Î%Č?‰<{V™Ķr˲ŲxXŖ\d{žŋƝ  yéØ •F#~Î(Á͌‚Ú8$H¨ŖøT`T¸Á9 ˇįA9õVFwšOĖņ,¨dNЏdqXŪ)ŠÅtŗ{z¨eļũäœ0tמÕĪëē=Øņ-ÕõžŸqu‘Å#nŨä~5—e j×÷ŠXMhŧ‡–æ@áA뷓ķsXδbųY´!´Ķ5ėĄņ-í´2Û%˛ÛÜ"˛É$§rŽųsôČ­áíB k˓4sŪ&(“tqįčXŠélmb˛ŗŠÖ,ė‰Œõ qÍGĒŪ.Ĩ]Ūģ`AI“Î0=+D¤õž„ēŽú†6Ŋkem¨Á ,뉸rņŽAšĪūə+“u?›wpyßrŪf¨ŒÖüh¨0ŖŌž§Q‹š“bŅE¨‚Š( Š( Š( Š( 4Ɖ‚Ę9% (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ uũüoŒœMHÃ*sԚÃt‹ĪJs}Ķ@Ė‹†B™ŨëŠĀģŅūÛm8f_ ŗm a˛1úf畤`1Į\W7ŖĪ4ž$Öbˇ—Œ'8āō> ƒJi5sh\…ÔũĨA…āœ P)$‘TŸ|V­ôÅl[h;Ī'+Y0†<zāvŠŊĩeĨÍąŒˇ10~T‚1íé^nÚßŧX>d.B.xÆkģšd†ŨŨyÉ=̃Œ›ŊI§Žų ÉôŠææZ4ãmMJåo47¸B ļ’,́‚6HüĢŅāqygmq¸č§5å Ķ í %šDt ũâA˙?…z7ƒä{ŋiŽā+ļļ;ā?•cSEcGmÍS…b8ĪaŠC8ųą“Vŧ ‰–#šĻœõČæāėcœ ũ*|gŠĪĻ)T¯~ϧ‚,Œ•Į=û֑ԉHdQ´Œsĸ­Ã×gaō‚zÔŅR=k3Yņ%ŽŽ6ġJō”ā.z'…ū~™­âģ˜9ļėŒŋę˛ÚKgŖZ‰ī74Ō¯UŒ`lį˙õÖLڍŽ…f°E´¯€ą§Ë…õ>˜ŦË+jWމûÉ×s ËĨm…I 1ę{úTWžĩ]N[ŨB[íI†^ŪĩPĨ˜į=ąŸj¨ÔŒX*wĐĢäOâ]iRØHÃvS¯úc°5ÛŲx×ËUš’ōRCNÔėíõ5gBŌ†›eQD`îm‡;‰ī“Éú“] ‘‡ų˜öĩ*nŖģØs\š"œÚ%Ŗj߈š!ĩbĮ8ũ+C)Œ““ũj“<ķ0ŒĻÁŨįōŠííUy,sëMYlKZj\Ļ}{ԌCqšfŪ:š]ŧqÖŦĀp^.9☠/^iĮ‘Í!\į#JvĨ8pÍ>XöĖëíVĪLÛöŠļŗįj…,Į€ ãŧ[âģ+ßj‘,Ȇ=¯4‰´ ã€9ü+ĸņN‘.̤ŧ6ĸ%šÜĨds‚ ‘‘Ī bŧßP†Íí¤.ąÛÆĒßšl“$šõ=qÆ+ĩT4G^”%Ģ{ĢĄG:ŒqĢX/Ķh­1Yĩ{/éöŌŗ4‘‹œâĩXāg¤-kŖšIT†Ĩkįų&P¯žqŸĨ[ ĢMĸ˛ĩrĶHļ2Ęá›?,jFXÕ][ēÖŧɍ“AhyŠGa–üøĐÚ[’Væ: )Í-2BŠ( Š( Š( Š( –Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(<āžŖĨ9ŋZF ŊH#é$%cbĢšą÷sր9īë ŖiRÜlNNČcîĖ}Ŋ+˛č>ŊÔ.ˆ’úsæ0ëķž}Em\iī%û]ę^U˙SQA}Ĩ@ĐF“ŧ‚<´¤oį#ŒcĘĻlÚąréā†LîUåķÆã\åÜžgšYq“ŒŽ+ĨŸl–$၃Xvæ(6m$œš‰ėhØãüAuåÛ-¨~d?JŽTETuĪFWS}¤¤×‹{&įll žáS˜-ĸHŨØ.Écr莸ĮKœÔMėúōi‘H^[î2nųŖP~lR8ükÖlmRÎĘxÆÔE ĒAé\G„Ŗm[ÅWzšč֑}–"Gąķ~Ŗč)’ÁúqŌ°“NDMôIČįՌĘqžz˜+HØ'Ū§HŧĩŊiÅ9ÚC"ˆ‚8ĪĄ50nŧúR fcÁÅ9W$ÚļŒR2”ŽTÕĸÔ.tšĄĶŽ…ŊĶ $ĨsˇÔ|qøÕ 7Ã6ļĸ)é9Üã€Ür¯šÉ÷­ļ`ŠĖØëSYuhŨfxíÉËųgieî3éôĸvę(EˇĄŖŠO¨Á4:K”ˇ”o2īlūY=ûƒNŌ ˛æŪ?3žKŸVn¤Ôú$oÅn‡hR¸'ëv%ņŽĩdâįļ†ÎÔüʉÛßéZˆŦ#žđīRŠü¨ Ũ˛‹G,§pōžCˇˆāžqK†UPNOsR("—֑ކm\•ĨÁûĶļü¸ĮlS Å_B3O zSŗÚ¤ O@4™´F+ŸÔ­Ŧč<÷Ķ#ūŦIũ(nڎ*æĖˇ6đŽégŽ1Ķs0Î˛Ž§đíØ‰n'ą#ųˆ”€}k+RķĖĒL¨_#pÎ+7Wđâ^Ü<ģL$đCœcß5œĨē:!GÎĮ  JÄDΗP¸EÉÚāņ\6ŠãëđŪfŦ‘(Ë+>[Ž=EgØøZú L–rÜdŒҤU Ŋ ÄZ|ŽëhY Ÿ}}ßN9ŖÚĨąĩ*4“÷˜ÍG^Ô|M,X–*r¨vį=ķΧ­EÖēᅪ–h•ōgܡ¯Oj˛× uĨ {ë,d„‡Yü†ë“Áã8ǚtđiĶJķÜ ãåct-œäžā~.¤ē3§– ZÛ>˛†ķQi/íūĐŌüĨ›'ŋšū•ëĐEoĮ*F ŖWĸøĒÖ5T¸ŗåļŦФƒõ$WYРǧ<7*Aę* žĶ8q mÚÚ sšuV{¸ĸˆĘĖ6ĻŦČĪjŲ­5¸´QE (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€#—!2;SšĮ5 Ëm8ÎXˁNi8Ų˜Ē€2I õ vĐÍÔĄÜŲTwsØz×-m¯i÷šĄ† ¸Ļ‚H˙tËŨ;†jũÕķxŖP›HŗV[$8ššĪßŨ_cëUŧGáŊ6ÃNQk,3"#ĸņ†`?Ÿ_zÎMŪÉ\tä“ÔĶY<ä,~AØU[ÉâxŨ@ųđëYķkVĐ ¸ā+[:ĮĶīģq°{˙*•ā)˛v^ ķŠNjÖ:azčēV¸wrŠc,[ŖšŽOUģ—RģKk(ķ$ zM&?’õü_ņ"4ډ#žW{ę}:֗…íRīħĪ+ū…h¯>g<ŸÂ˛iÚësš´‘×hzdZ&ocß°eĪ÷˜õ?ZÔÁesÍ4ÂY‰^G\Ոã'ôŠ„Đæ›&ŅÆ}M?a- œ›T`ūY§F3“’=Ģ[YhbÛ §aÁĮ֐2ĒņúR,€!ųIį^ ä°‘^XÚéĮĖøĨZ0¤jP8Å9•8æ’H^å—æ+´ö¨åģÔnVĐjĸŋŨSéVŖ‡g&[p:Յ.­#)O ŠŖÅ8(ĨRâ´HÎâ`QŠZ)ˆ E'Ļj\SsCed¸PØÅY 3Æjƒœã&ĻT$‚ONÕ:ŽVcúÕil-f“Ė’gūņ՚ZĢ\”ČÚÉ+‚}Š^Ū)‘ôЍĨʇvFąĸ.ÕP°§Í-->T+4¸ŅXQšĢ.a0ĖҰ>̚ĐÅ.{ĸ”¤ļfSh:~ŨĸÚ%\į?• ĸ[ ÄxŒ"Z¸Ŗ•8ĸŊŦû™įO?ēw(ŒŠ Šž.)kEĄN[…Q@‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  —ļQ_ZĩŧÛŧļÁ;XƒÁĪQUŦtk]:6HÚwF"i™Æ=0Ä֝UÔŽEž›srå”L˙Ĩk…ĖoswĢ_Û—&(}6 Æ@úæĩ5{õ-2{97mg(pĀ‚ĮâTđĨšˇđ͂1%Ú îO÷›æ?Îļ[§4’Đ6gšiZ0—J]F`Æ!š ŠV<cŨÎ=ĢZ0ōĀ›Áā}ßJˇksö­•EDyAŒ|Äņū4‘+$f2€ÔëXrōČڝFp2Z WÄ72HÎ#„|¸÷­ß Y™õģŨAH1,f-ؘņíÚĢë÷ÖúitŽ?”FYö}á‘ëõŽ›ÂBižˇ@Í#Ė<æ$t-Î1íBģgLĒûĻēÆz፧¤uiPÁéJ¨šæ­#Q•L{¸éũiv°PE]+ÜtôĨX” 㝉s+;FG4õ‡'žĢ!xÅ(P(åšlˆBZx@: }j$切RãŠZ)ØBb–Š)€†Aq@sH¤"–Šh<ĶŠžôšÅ-QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŗĩĸ‰zLfAäžTqž hÕ=FČj2Ú3”ITĢ9Áô  ^,|3§nbÍötËŒņZė2*í-ã‚!ļ8Ô*`1S‘š”´ÔĪéöĻßMk}­ûš¤#“ķžjĩëQŽ •ÕԘ÷EanÅY|§ÜÃĻ€ŋĄŠo/.āÔ­’;S%̞Ę*OL~?ÎŽ@¸…„`…VPGAĮo§+š­u$Ém‚´›€ųÆ3ƒĶŌ‹Idš-ō¨VÜF pHīųÕ­žôb€+Ÿíe /•ØŠ‘™üÄÆŨœį=}ąRâŒQ¨7žni_$˜c“Dĸs$^Sĸ 9|Œ’=OŠZ,9pÄđFõīũ*NĢĪz\PiXĸB‰´cŠëMĻ`â`qˇ¸Š”rsKŠÆįíd.ÃÁ>üԄČ€Ú¸>õ>)íœb˜î œ ܟZu 4´Đ‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŒQE&)hĸ€ (ĸ€ (ĸ€ (Ŗ4QEQEQES%‰fBŽ2ĻK@ # Å*‚'4´P€(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ŗ4PEPEPEPEPEPEPEPEPEPEPEPUk‹Ëkg‰fž8šgōâāoîŒõM_ÄÚ&ļof†M)Ĩ+V]ęƒžœ֚ˇPfģ_Û­´ˇ ‘"$?•ķGQ“‘éT?á(ԟCƒYŽg’Ę|y,‘9y3Ķj¸ôĪNœÕ-#B‡Ážš˛Žâęō$if“{åÉlŖ'“\օ ˙„OĀđKgŠG%œč’ ˆĐ°…Ôî鹀ÉõĻ’&ᤴЏÜBäādã&¨XkVZ•ÍåŊŗģKg/•:´l›XŒŽ dc¸Č÷Ž{ĮļĻh4Iš éáˇÕ#’e˛ķ „ÚÃ8NxbŧņŠÎ˜ß[ø‡UŧˇˇÔ՟Vŗ\Į”xŧ´Y€6•Ā`ObJn„äĪC9āū4y‚¸ ßVēÕ¯#ÔouXn|˔‘V'XLlĮĘdrvd.Ücžšõ­.Š5œ—´÷O<čEd“+#DHi€õcü¨qAĖuûč =Ģ‘–=R<Ëö™ė\í*Cˆŗ•Øę[æîÆ&—ŋ¨YęÖLÚŤŗØÅ5ĨÅÁ`Ë8Ũŧzv Žž¤PĶpį}J (,ĩpŪ‹Ä3ë˛ĪŠØlŲEäqĘÜ/š yũ¤ûn§xôęī1é1ęM7Ųî Ą`‚@Ŗfũ¸9É8€yÎp(qÔ|Įl[8ĒšŊ­åũåŒ,ææČ¨Z6\nŠ€8<JĪÔ&Ôn|"ķié4zƒÛ‚ŠËĩÔānėØÎ=ņXIújZÄÚ}ĩúŦ­bKĖ<‘õšČ\đ^ÜĐĸ…ĖwĄÁFMVŌ-V 5Ũ…Ôņ4ąŠFÃ*æÆ228ÎyŽFú×V—Pąųõ5°mXLj¤pßf0Ūaph8öĮ­RyĩĨĶ´{Õ°Ô%šŠÚņd2# ‚o\dāūđĸüšęqMFáĖz8p@=23N ‘Đ×yũĄw­[˛ÍŠÛXIo Ú´0;3qŪ%Á㍃į뎆§ü&÷6R]^5‚˛jČ$ųv•1˜ļáŧ֓ŠfveøéFņߊäõGŧ˙„œÅp5a$ WąŨ…˜;ߡĻFĪŊÆǐ dŨ@'ûwœnn~ÚW”mČ/ËĮŋÕcoÍ÷ŗî(‡1ÛīĮ˙ŽĒĮ}דÛ+7А Ũ9čz‡ÆŧŪÚOG¤į:ãŨa$ŋ8æõIāä}î™QÁEikcUø…mŽą–˛6Íqƒ¸yž_§ČéG(s3ĐC 7r8¯=¸–ķOĶĩEš]J;Hĩ˜–“Ėgkså—Æ_nī3ž{véˇá1j4ۉmĩYu’æF/$Ī!ˆn%SrģWh9úŅĘÆ´úĩĩŽŖea/˜./7ų8ŠļŅ’7cãžqœŅŨí\ ZęmŠérĪĶ_Ã5ם;äÄģ‘ÄgŽ6ãNękbö yoí šcĮ{,ŽC ĸWk'=ą'#ŒG*cˇ/č3@löŽÃļ:ėšĀ›W:„pŊŧ7 ËŠe ĮÉä6Cöįč)<5§oŠi†hõr%[ÁrnŲŲTy ÃĮ”1Û­(jGveU`¤Œœ3Éú ĨĻjöēŊŸÚ­ ˜ŧĮŒųˆP†F*ŲzŠüĢYŗfņž|m.ω!¸ˆÉ ;bv1•-ƒĶëžŌlukkģcim¨[=ÄÚĄË¸DĨ¤f…™sœ‚1ëBŠŲé{ŗĐR šāūé—ÖFi/¤Ö>ŌđÆˇ)|Ë3 –e#’NzúcŌĄ:6Ŗ?üEyÔĄuļ´Ųwû1˜ÆĘĮnėJđArĢØ.ėz|ûTrÎ"…ä*Įh' 2N=yˆĶĩ{m6ąÚk ØcŠî%¸>lˇ&UÜčĜāoÜøŸHƒ]‚ Hu+-AŦ­îîÖXԒîŦw@Ãį,Pø$uÆiō-îO9Ūi:ÅŽą¤[ęVģÅ´éŊ|ÅÚĀsÔvéUĨņ„Zļ§n’I5y-¤7Fę̏üũ3Ž~•Ąéˇrü*ūĖžĘâ ąe4DŲ ģ Čõã‘X6ú[6›ā膗ŦC ­Č¸ $Yü 0XÃs€ )™ŖÕ‹}hŨ^?%¯ˆuė ĩ×āŒi°ĒĩŦ ].Õžs*œæ#gšŲ:¨ø’újęįM/UŪ.ßärqœmg!ąÜ(ä]ÁIÜô}ŲĪ›šÅp~6ŌĩŲõ9t[ģčÅäRYKäĖá-؍É6Đp1´ƒë‘XPx–O éW—3ęÖËu?™¨Į›<ļč#ځUY_ia¸í9ų†sŠJW¸ÜščzŪ˙jPĀ’jņ]OLņ5ŅÔ`ŗÔŠ=߉ü8ú‹Ü@­äw0´D$2a0ŖŒōœō>K=ĪAšöÚËk9g qrĘLļŅ–#ˇyĢdƒĪ\ņÛü˙rēöŖ4.Ō4øîfUē´ē/&A .ÜŊŪ‡—q\øLxī..Y Q4“äēČ˧#ąČŠqŌås`Į˙ĒĒĩõ°ŋ&EûYˆĖąrTd~&ŧÃMņĨ4Vfĩ¨q Ō3@2ĸ'ũÎ2œŧûⴗÅ7¯m%ĘŨēĖ|8/J´'bMŒ’@\įÛüiōy“Īn‡u¨ęvzE›^ßΰ[ŠČ 8rZm–™ka%ÔĐ+‰.eķ%ydg,Ū€ą8°Õæˇúŋđ~štÚãŪŲŧvņÅÉΎYw’§§=.š­ ,īRmNüÚišũąyŖ8€Ē–ÎæËô…7 •ĪW=Muāëë\Ä sā™.ašî8Ökwy-÷ōŧÔŨĀû¤ž•Ėx“Äךn§rđßęb `Ķî,ļ@XHžagäālÚH89ŠQšW=[ƒĮNÜR™§ô¯/¸Ôĩ  ņĩÜzî¨ŖN.ļpĮ€3•#äË|á€Æp+[Á:ŊÍÎģŠXM¨]ŪÆļ–ˇ÷•!ŲO˜Ú8ÎÎ;f‡0æ:ŨCM´Ô Xoa"8‘0ÅJ0čAG¨4iöēlO´F5’C#–bĖîzŗ1$ąãŠ=¯?×äņ ZõäĢũŦ.ÆĄnēZ[ ĢÁ”ķ›~QÁ|—öÅUĩÔĩæącĢ=í0dŨ;§ĩŠĘæÍÎβNƖO?Ā´ûl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ûR0ņĶđ íKÁŒ!}ú~Ą}'˜¸9ĢæĶö`Îfö%ûR0§Ŋbˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`~ÖnŨƒŸ`~ÂĀ>ÜK¨˜`~Āp‚9ŽŊ‹ß4ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6Álí{,M0[›`dˁl‚9íl‚9M0ŋĮ.7đĖīą æ´bˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚ųiģQĻ}‚ųi›`NëŲs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9ŊĖ_āˇŲs ›Íė@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`d_ æw8}ĮSœąī>?yé —ß`Øüûû(˜ˆ€fĀų›Éolôi;iÍįd˙TũŌ+œæv‡Nj ĩį=xšØ'Áİl‚ūŋat$,„Ëv,đ1Œt(Đ÷íOėĻ”"ũCâd7øé{ĘYėúˆt‹-Hŋ%:q—TÜŽNų!Ķö}3; RŒ ø6Û}H!\O‚sįû$˜°,q̊ôļü&œšä~ĨHKŨ~íäpt-Ÿ1l•yKQSÂ-Ĩ´ÕÁ­P $ĸĐČŠs+Ûy–D%-&Š…6$S4Ŧš,ōŖ%.†iũ¨}LL”Û”Į”s°*íqÆeX)?íSl3ŸąûDM-jõŨĀ•—“í) (å†Īėä>•ŽĒÄP!AģÁy¤_a{J-ËūŅūŗ}´fJžYKgļnkÉ͏”ÖuŸaq)m"ũĖÍ4“[EÂRĪK„^쨂IÍąũĸUí‰Pû:+|Ë/ÍĸÉ߸ėWĮ×\ĩd`ŌfŲ–÷Õąr˛Ą€Šq°ãÚw+æLI†īŕ‹BˇPSrßķīü&ûü`•w¸ä'ʍ[ŽØĢIąÔeÍņ|–$\[ÉM:}†vđŗģĒž=¸;åōiąáÔŦ™-˜!”š™ÁÔ^zߐ;TŊŦ4wÖ;Ž\ã]5”>ī`đyfIRÖc°ę˜m6ŗüM͔9Hžf.ۄŽtÁŦĻ+Š &äA|Ĩ´Ą?Í93ˇÎlۘWÎî7a‚ÉÖ6ŗA–°ôžÔ ō˛AZ:œĢ/rîâÁ” ļF6”ĩ‚•MGķQÍLIÉnl¯ŗ™ĨG5˜ų“Sõō?Ö`‚ƒ"`S[§ˇŗŌAÅ<ÕĖV`Rj[ŦZûØ7€Ų4ŗ˜ˇ`ŽØ™™¤2JÕ ü$ŸĨÃŦ. KwZŌ•ZWšyÄŧK;mēJ/Í"oû™OkŗI“•¤˜qža™†`^¨L3Ĩí?ũ–øƒšũ+Ÿ ąņ‰qŋh#k9´åĨPņÎHÜžĘÚÛvJ‰ūæ•pú:i­!íĻNråŅSŲzÛ ?Ą~Ŗ•Y-^Ŋ6ãÛ§ÁTÃæßū×įĶ;üåá u­ŋ ”QÔZvÕۋ>b_æöųĖü´ æ'í; Ōs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ģæ‘^ũ÷ŲoyÎkv ĖHB_ ™ōƒa ˇ<$‹ \×aĮ‹JF:T}{ÁŽÕL`…žģžå]Æōώ”8ė+ūī% ÔNčĢŸŪ‹vąĪŒ­hā˙°'–ĶYƒ^›ôÚåĖgÕŦõE`ö$ ŋ­ÕO—ˇnP…å.0×ŌLāîŦ os-‘|HxeÍ,8 ¤ĸ‡ÄA…~ʤŪĶÉ\Āú4ÖüqčiēĨ—ĀėŪÍø|I{`ī“ÅÍX3P†G3ė‹GKP•ĖëŨ€F nÔAĸkt€Áˇ2ĸh­…ģ‰$…§%+%)=ÛÕxCƒN%ųÂqĒX?z7ú5FĶáåS{2ēÂáRŌØN†ūûÁ”ÁDzVUĶA+aQ Ŧß)-ũH¤/HãÖõŪŽN„,–RÂĘu°Šå‰´$ũâāpQ"Ą— ōsœ"Ļē‘TÅQ‘2äˆANŠž2¨Â:×ČĀÉ)pģ!‰IĶA*u¨ĸ‡ŦOÚ ŽÂ‡Y5œ&"M›ä\žNūRséÖäe0÷ D×­˜V Ņ|_Á¤Ŧ0Sœ¨­]Bž€uҎgØPŽ ]EūEN‚r-[YCžm'lm7?{ˇĪŒÖĖ&{E‚;*ĸ@UDKŖIáZR`ąĪžLĩ§1ģ"ep,/.ËŅÅņM.é`h"oË)äŠJjËM5‘Đ”yŠą€˛ē3ßTīĖ]1ęzŌÄ*ĻĀ¤€:ÛYHŽ4ĨNŞõjĶž]ĩdFNH›\ĀÃčĪØ;@čN:ARj) ëR!Í7œŦ™L,ƒ Ē"(MgYčÕL3‹ŠcnŦfRˇ@U¤bĩ™@rĨœÖA€ehę5(WƒĻ‚ųOy=‰=ųHˆūœŊgž ¨~4”‹á&íĄâÖÖĖžU`æy`$q,Cy‡ãfļÔĖ’‘š“ũÍŊČãf–Îæ:[ ëčį ųöōåˆ$›x,tTžOÛšY1Dĸōô¤¯UØ Ln5Ī€YWß­ŅŽĶĮé†$ĘÉhą"0ĩ­ŪšIksA9“âä˜@sžšĪŊ¯ÜTZ¨R3ĨŸ”ûá­ÄŽ×ĖŨèxvūL>‹rŊŒ3Ŗąē€,¨Žŗ é„aB˛E˛,0˜…’&ā°™Å\Z¤ĪŅ LõRN‰Ē\ûZÚĮ)˜üEēăÕ,%Ō˙˜×įQĮ_˜ī÷= jMö í2™ŖxV ĩÍÍĪ/cw jĀkāŧ€ÍÁhw`2dŠ•õsü\—ļņ-SpâŨt•†›šežķĄ„S 5ā°”°‹S7B“ĐöÔ4ۈŒĖ"ß`7ŅyiíF€cĖKxŽĨ ĘrÍ.îš$VG#Käs_ šųÛ 'ޘüE~äxÍ<ÔĨ7ŖĪ‰F“í-€›A°ˆļygĩzÎwL’ų”æL]4" m—cÔÔŌ"ąLe\T&V=žkA—€×čLéŽ;qŽšņŪ ŠĖƒƒ…6ĸG‰-˛\9ĻåhĩäûÛL^ũšCÖ ēײūœ—§ũܕž ö—Á”E‹;>€ō/Xž{ÂQŧšßfĖŧ”ņõė“ö‡Á¤I2ČžŲ×m¨ŋfLL5dĖÕhąŋ æ`6ÁČŽyē‰ē֖áîķ@mãvŅŪ'aU†˛Pwá.Ėé˛/ēLö˜đ3QûôJLĩ‡ŒĪ/āŧŗ^ŗgļ1"]īā%CO´VBØSģō´ˇúĶV!vwB{æ7ũđA°ãÎ=x™økÁ„SWIKžTô¸fTĀã]×rĘY’*­ôÄJ ͘Pø>wŽ˙0zxũœíöüö÷eÛŠû?oâ?ÛũK|ë'˜’ļsƒëŅ‘ũ0/;´œ3sw†'Ā|Դܜß[.ä–÷šÍ]Ég,ÍÚ#’w[3õ„‡Ũ^õŖ26ėĻöwwŊģQ5ún0‘h˛Ŗ}ō0öžiô_´+`‚m™§Lōæā„Üxĸ3Q¤u!|a Qúb4%ų4•˛iÚvŪą1V‰ž5\[ šÕiijŅ;)ĐųvŲÅA>ߎē1”ž˜HJÉ÷j´kŽļé-lÎ(Œ!+lå b<1 T×=aĨ0eKŒwæuįfŋ/˙ŧ]“ø˙ĖÆc–ŽđN#¸!{&†ˆÂÁdNRt”LĔ '‚Œ&-ˆ ؘnCSânō_ÚŌˇrC~ŧŌĘWĸ# 0ŋcģ–Đ¯üŖĐ‹âVž"ņ[˜ KĖĐčÚA`Ž‹<x…#Ū ĀTR*h?ၠ, 5˜0p!ēÜú^›g O ]\2Ũi­Û‘ Ė”‰¨ŽsJaS6°p…ŅüúƟR˙ĸŅŽXn­d$ÆŌ Č|čÚÄ,,ú+į%žH§&Č)VĶĨƒ>)˙ÁúLXWüy„įķ@š-)Ŋv[&ŋ}–7+Ų )æ| UĒ˜Ņģh" = #‹Âá"æt^‘plKÚčˋ’ ķËI[Zޞ1œéwĒÔԃöwZƒ%E+$L%¯ķÛaųQ—÷øyL ~Ô#T.)`ĖŊ ĖûËÕ=ō[Āö!7´L+†õĖĖįÅĘô&Í{jF™ĮҞŠb)-9Ķ™ŋ%Šäģi 1’nDcÉzšädWĄ2[ņHí3G3qt`Ú3Z9û)§ĐĪĩ…‘§`ÆU؂ėOxŅnhf!į2rC‡PÔ:oÔķJ†4x(ôrP?ÉļÕō`&sí€É0j“Xƒ)UÁĖ.Šü{0É=‰Kiû 6ÜÕQgrÃ×*oIĨ #Mŋ„'œĩđ”sÄáJ‹ËBĐAjj.]ķxE˜•#ōęĩo¯Į3E•3…0?âÂˍí0ˇ&ŠĻ•Û_v&^Ė=ŊŪ i}™Ø‹÷ZLę­IĖđŧĀP|ÉOÁØåü%"ŗĖˇJ(/ˆšĖS>Z6¨ä#-øPä5ƒhî,ú@HOĸž”\~Ęßj1\J•VE+šĸČ@ŗN~œTõŅ]S?¤'ņø}ËBđË$/ÚÅeĶŌĢk)ßkéû‘˙Ō]ŅƒĪú­üąÕ:^ķÍē“2ņÉĐÙŽĒ‡ė]°dō,wü ˛PGNZûVĐqPŌĨ*vžøąfŽęaOęŖangö†˛×Áė#$|¸ˆ,ŌĐ=ãŽ^ãđļUōú1ąÜÅ­Ž;Īî>\ąkŽC퇎0šߛļkđđËÎō|ô]ëŪ˙ŨnÍĶ0S€–á~žôĪO€yOš'ÁY›HĨt­žAbY$mĄ&áËŦđ#ģ ĖFwU&’]á˛i<æ-NÉo$BŋfÂĢsâ,ˆŒÍ\ßpâ0mŸ¯Ú”ŽcqxÍîčC5ēę[ wôu>,Ĥķ)?üŨm‹vĪģŋSŊŖfĘŪWÕ=‚éĢĻũ™؇÷ą3gÔš÷š:ÖĨƒšĶŧš~dmiĶWQÁ‹č%Á&^O^0c9ˆĒá˜“JJZ‰ōOŠ„QĀõ|á"hš–€|Tj:dqũԒÅŨo•ÛņŗK›Šļõ¨››ŧšV{õŽų‘ÚšžĪ¨=8°>ë‚]Û#Ļ*#ų ļS¸S@ĒuE›ōBÉrN]îŪ>*5<Š˜> ’P zÁąKN3/ēŗrb0kiûvĢŨŦÁú<É}k´h,Å3Á2r•¨í ĄËđ‹âĪÔ­™ÉūvæÜíôj&Š iÚ yŽŊf–xēōōžĩΡņũ ;ĪTÚ…Ē  Œ§íĮČ.÷ÍB Æ0›Įˆ:Â3ōvņˇŲ§‡ŗ˛svi¤ŗÄ]Ÿ™cÂИ;áģJ"ĄIœjz~ũdbúŌ¸ŅNĻäžV˜'>YũŨîäŲc9?“ī§rĮŠ>˙Ę`æ˛ 2ŽĻ9LŊ%ėīÖû̓ÉĨŌû6T^jáÍÅČļėž N5qx, XyDS4õiĸëžŦéÂ%÷_î‰ķĶķįŠ[^$ūˇ‹5fŲ=ō[:ŪÔ8ˆb wjĻ6ĸĀV3‹Đ>všri­Cĩ V-L EZFĩģŠ\~‹jÅĩEƒ´.’ęŲWaö2Û<O\'ŠŪŜRYmZeČšâņ)4”Ī>ËâëAäuN‘Ãũ!z&=;Įŗw:M_ą^‡J´üĸÍ7ʤŋO”^™ms`ˆ&š_ĐâęÖX’cĪ1<͝J]bMą¯÷ž™ŊŽŽ#v•Ņnë#­!/&KŦ'ˇâUų“ļJR@^ÜIV l(+×J2ŧúck@&ğ,Zĸ˜ˇQ“& Ј˛!čāÉ!ˇFƒ˛û.ˆ÷평'ÆĘK"K=FfŸ‡Dßrz´˜áV¨|qt^Îāx Îic}čpÚ>Ë4ČĶÅ$V.=ļęŽ~p Y†ŖĻ&ÖcdėœÛ´ÃO]×{螷íšüüÃKŲ|ō" "ũđU8=FØŖĪ5ŪÄ"'ßsPréīģUlöSŪ’›xØŋ ĖŖüÉû'4yŽ>‚Í&ÄŨžNP§Į×헁yhĀa~ū ?#HĄI2^6áQ¤pÚĮũžßPV{û`Ūc•ˇ›ËíôĀL\´…÷(Ų§Ėđd‡kilgؐ)ÎŅe…ÅN@Ŋ…ŲË*F3(u:ZpS–ļŌ“•ĨQļž…Ę§i&ĮÛmLVW‹"..|´åÁô# ōߜfg96û7Ņ–"VÍgĖaœXwG ŨÎV‡Įß70éˆ÷2:zĒ]t&mx­´dŧæ{Ĩ)Ôà ēzw–˜ZĨQ‚Ic=ž>PU}8ÜáM}ŅNĒĀ‘•xųÚU^SNBë›qX3{,šęĄÔF,ĸû­[KõH1uZß|ķícö¤\}ÍäÛĸ—ę–wõŽQŊž-Ö Ÿį^N[*‘;‹<úŌ”ÂŌĒ{ŧ`÷6ŗ(›o˙ļü0ÖĄ!rsÔé3ÍMAkæRØØR‘wˇ^UĪģ•ë7=,°Fņ”‡0wšīR5ƒĖõ $™ģ"˜,ĖcßÔ7¸įAđu؊w €b´ūœ30˜7W7įĶX €bQVĪ`r JE§…4¸ķĢįQ…Ü:p{Ļzŗô:ˆfdâõq3kS X"•ōį ~ŊĮ){Į<BvNĻ~Ğ‘ĻqęĖ˜ôŧKÅŨ9™ŖŠŅ,<ˆ´zÄÄbŽí­N,še"ģ_7é27Y$¨•‚VÚwŪAã•1Xõˇ—åėŊ>FŅĶĮâĐÖ1éD ŧdoZ4ĄĘy΁õd-á)^{é6 ØĻé6PĄķŲ%ąļ?ĢëƒĻvĶé Dß=Œ°ŨÅĄYŠ_ÆU  žgFsĻā Š– õŖNZj€Žķģ‡f-Ĩå pęĩôŅrŠcÛqáž!NßûÕĩŸ.nXāũĒ }éNĘĒõŋúE^;(ų;<úkЁX•ĀŖ˜á➁<ȧŋ*ĖŋBęŸoWņ¯^‰˙‚}įŽÉ8˛é˙Õžˁ4đ˙Ģ}%˜ÂgĶ~°¯3Ũã{úįėÁÄt&Œķ´}#˜Ķ^´ æ@6ÁČŽƒy}Žûŋė÷<é‹v‹Ūė Yũv)į^lg#ûŸ?aåŋ÷Ø `ÂĪ*æŧųédcnU’€všũzč~å ļ[Yå { •Vîä67Ũ]æ?ņL—ŖÕæëŊŧĶõ¯Öū˜ą%80ŒŖ‰ÆÖĩ"-w9ę6vQÔI7ØûWQnhmšéģãĩT=Ö1/ĘÆ7–Õ7BJ"SmuĶ2ÎR3Õm‰ÛėĒ4ũs#ĄŌ]8ŖXūō;ĻVg˛ˇņũÎú™Ĩ7ĩ˙ÛĐë’b:Ž‘€m…ũ9*FûÆøđWo˛äUÕ:ĢģĪîũ>uvÄŊbšõ>ŅŲSrŪŽ)A/ÉÄ´ŗrdQü ú…ųäJt4 ŧéĸɑŦKÉÇęt“u˒øŦŊ–ÅđWUŪÎwKt~‘zkĸĐyĢQŦˇK-yų€'iæDsÚ9î¨_M×r?¤ĀäŨx!c%Ö¸t…öФHæ5,=8Q5Iy›Ÿ1"xPŌt%“O\`2I΁h‰Ûe؁PBģ ķˆDŊP(Ŧtu`Ėšĩ”^Ķ7š-ō1V$ =Ɠƒî~ÄĀUé×`ĢrQID’*/DĨ_\—ŊšÔĖFåōēā˜é5U3[ÕLa K•¸WiĐÕä’2aKɖ ôœ`t OūĨė;J˜ö„!$,–â1`ž 2šaˇáŖ áÂ)0Y-m7ÛâĒāžT\WËč_ÜH†<-Ęž<.ē4Ōʃ*,Ž9ĢŌô›Ž´ņqqŊ˛đ¨†wæ¨+cÃäƒËMõįũgĄ°;ū-1û¨™Í´Fqh‘xÅãP—?KđŊI IDATf¸ŧEŠĶA„v~õ…*÷ÉD{‘ĸ]oˆöv˜./}v›íĀD $—k… ų¸č˛ēū¯ēĢh֙–ŋ¯™{`šlx\HĢ|¯)­cq2Y•8ëu§˛ČÎ5íx֚Y‡’EüpôÎÕ˛ņ†Áöí`"‹ũj3ëÎm"c9üT&u0ĸ)LįúÎ( ėgÅp¯Āģ“{>æŽ Ō­•ŲųYŠ8ĩlžšäž_[m†Ā-ÆÂ%ģĖRIx>’8ÕC0É\īgėoéEŗ“On Ķ’=š_‰.õÃfV(ŦâÔĶūĨfP<+møô˜˜Ģ^ŗŦ™Gŗ’Q1}3ģú– nļŧ fî9_uķ°fbŽ™ÆÍŽĪta 4#q)cÔdĮҎUšnõŲQã LõEk^bë˛ĀŧPīˇZ|€eHų:+jĩƒA55‘ņĶ €z×7úÉ.‚™0kŽƒ0ˆÕŨ°]ē7•…š2š5ǏS=• C˛n9 Lč×˰ZžhŅ‘šIPĢŠ_Q‹ļjLo€ÖŪÄōaũaÛ%7Íxļi šāÁĖŽģ˜Ā¯Ų%0ij-7â"4õTDŸÖ+-y"ŗ˛'-;#¯7𠑰šųŅJ@'‰Ŋ(‡"{EnĢčg>‡r. û é“ą(žæ]Đ, 4é`-Ķäc;–Ą­NĐ5Ę$ÚÕ.ÆWmˆ%”gđlw upœ…c‰1—_ËdrMũ-$k‰€Ŧ“đ2Šp˛‘ųß*ĸ_F¤nX–{3°¤ŸØ Wd÷ÅÅßû*‚ōn‡u"āŅ–[]Ņ—#^dR{V¯töW×Ūi¨=cŌ“rŧ’‡ĖΞˇĮÛ|bce‘ƒāôüŠØ‘Ŋ„ā˛ęjcgôEûm돇-Ųģ2ŗAoRЄü~œ‚ĢŽÅâø¤uįGqĶ&Āį9@OŧF{ę=8ß%ĒŊŗƒĮëžc^˛~˜ĪŲęéŊ[c¯$†7Ņ.~˜īho)ŧå‡ųÖÄE¸é~˜ī0cÔR_Ũęûã`Â"ឈĖõ?Œ–˙ŸM0˛ąĀ¨–ŊbcųĮímd'S÷ÔÕė~Īf•€›¯¤× đOVS‹ßš{ާ72°Z ÚĶtņVuũŽ]‹9}a˛K+”ëjRwU:iŲíSJīĨwŅ Ū;:-Š?•KĻ-ĒÉEģë{ŅÍë\íÚŽÉ–gJ lVÛ[SԜxĖvoãŦˇŪlŋvPĮv?GĘkį)ÔÎ'˛īđnŨˇô™į‚úFÚVšĨ\īwŸMo=ŋJwxŗ ĖS Æš& ”‘ņÍ5ķČ⩇öål“_…Įܖŗģâ1<^6“RÜ_†ŊTZ0ķĪŪßčÜUŗÍ€húŽīn_ķ5‘G;™~į§4'ŧĮŠYČģžūeôÍš ‹Ōŧ”ėų—æŽ}Ŋ.ūT7‹Ęāö6ˇá=‘GļŽīį GWHsg ĻŧÖĮĖå‘\ûúSaũŲŽ0ڕŽÆAÎŨĶ1˅HĖjõr0Æ6R)ŋyRf+XP?Ļōō1Õą%I†$ŪI"°Ûņęf›čô*åEԎ;č´[Ôæš‰)čž9‡ƒgŠÂVT§_1~†ĶdŠĄÁŅȇK5ģq”€÷ŧwēÃŋ‰ü`}MVí Ҏ‹B6ß2”Eä”đ"UÖ?oČ`rf%ÖPî‘\wŲ˛xVøIķ$%léT4HemūĖŗWRQjL!ĸIJŦšI*vī„jDĨėĮŠc`6‘!Ā<#ļļâĄBÃLa[+Ã}šęâ}Š™eĸ)gQŨø‰˛Öy ixĢáœj™;YP#ä)+8Pŗč§?\ĢĸãƒKMgŦ7‚RĨ“t )7Ūm‹éguHĢ,ŅjÁŅ|ŅÃė6"6ĒüÆŨǤøAķÆ¤ZwîßĪÛ50%C[' S\UQbÅe=mī ĪĘšJiLÎAYV?y–4ŧĒĢ–„–čˆ>ÁPĸˇ7cJãlBĻŽjŨ‰ŽûyN?ĶIC{ Gü”ŋۄˆjŠRØë+ —Ā\TŠåŅĖ‘ČĀLĢzÕĩiėÁ´Žŗē#Ąp­2&ģ"ļs]AYŪ¨øķÅĖĢ,åÛû€ú÷ėčĖā&ĨåT"œ^†Ÿf´[kŠ"s;­-b§fZŦ%¸ōĄėIũĘĀÃ(9§@`mxƒRŊ2g~A›åáĖÜĖ*>”Âq˜e4k0xßUzĘü†îsm–i]s"Y4ī!§—(˜RƒrŸé0Zũčú8Ė`rįۂÉ)Æ fžy;u÷ÔxöB´ņîRyĻC+`ļåĨmf뇠1ķL¤kÍ,gĪãü49€˜BËą—$K°" úfV›Hî_-E%Ŋb3V¸zjdY{å­7 AŖS‹Ōˆļ~^rŸB´dIæēf>ĩhĐë3ązãĒt OĖŽÛÅ]4üX5ŗÔģįZÜYА~¨ß€ū1WÔH#Ō&eļē,—rİ‚?yĨĸÄSV)ōVcĢwĄĶ"JäTw^™üÖ­3LīV-G9\ļ‰"˙xz­%o ˜(Šm0pēhŪą6tÉ ž§Ô˛P,RĨ§JEs|}\Œåŗ Qm5pÅPo žsą?ŸĒ‘22ģ_áŧĻmW}IĄĘž­Äkļ•)`ŗlʗ‰<Š0ŋœ {7ûiË{š)=Ü&"ŸziüSã†â ˜ĨøQîķœwî5ûŸ›ĶmFTËŽ>LfūÉ Úĩ=ŅâĪW•ąá>E—Č~•EôUf?đ6”0{OĐŋ?‰įĢ/@sžDVŪ§Õ(iEtƒėŋĄ˙æ[˜<žõĮÅxĮVÕãEŲ{ļSū ˜o…ōÁ:÷}ø(Ú§cã•ųūĮŋ‰đ99@Åđh;ōŨvn˙÷g›`:ŗiđģT'ģļtŨ&˜Îh|˙+Ë_b<õm‚Yą˙oÛŨ0Ņ&˜Ųŗĩ˙\1ī´ æ@öûĀėt1˙Ą2}bÕãiûu`ļŅŪQ™;ī5ŌÅũá.éÕ Æ}úûŋĖöĐ^QûuëW$­Øf|ҧ‚ †˜šŧ&ąa#ųj7å0 Ű]¤ŊŅ㝠^¨HF8Eģnoŗ÷vėš™ĪēkíT~ÆÃU5v<ŒĐ*Dģ“Ė’Ž}˜¯öŪG üįŌKK!ǟķŊû1]<ôǍh0;aĢŊ Ļ%|}tÍ ŒvŸ…WYžL6$.:Ę6T!ßi Ą•"öŊIWõ‹s"¯%ÕJy”ęËÖ/xÆŌ%F˜ssđĶ#%ĪãJ—Ÿ­S=C|ˆFöÍXåĒéžsËâ&,_,Åæ~¯ÚEŊYęgÔÉgEĢ@@NR3%yG‚¤ŌĶjĄŗÂęVNķęšd]‰XŌ´ŗ4¯/ÕŠ´rWu$âX5Z“b ŽbB–Ę•ŲėjQQ˜ĩfj'Íšų”‚ļÅėÕTXŖ×ėu05Ÿ¸k@į t×ēffákŽkiŌĪUģBéH./­Tz!ĻķĪž1ŦÍû‰ēK€âj˜' Zab=‘×@܁i.l”ëŽ  o—ą‘Žg˙4›ļ¸Ē+L|ē͑ zšü”]jfå%ĪéŖÄ*āėˇ>“Iíļ¤ņ_ ĖĒj†h9PēP¸fö Ī\][''X†' "•ĪŒ–‰ą‘Xbî\Ģ>ŗŽ™T*îm4o'_3%áĘ—ĪˇÃ‰4Ã5•}PWíŌHFq2NĄÜ˙C4€šĩŪąN ;Îo'úĖĖķ  …\ņíWN‰æ?ūaP•ÕËGŠ ęX’8Ėæˇ¯7jÄfäÉmÁÜ;Á×`Bíķf.nŠĻŽ æõ…"Í7m^ö`R˜5õOfĩ|žeQŒ+ŠØB/@ŦmpÕ 8œˆrbĻÛŖÄ’.؜&v4 ŗū•á:­}D Ũ93°˛>UcjVš§’ĢhK.` 'dîÉŪÁ~'įģēĐú¸4ĪjķšIbļ‰Ā| ČUAZ\‹M¸ŒwčĘ\jfŠ‚™?>Ž9L!ûī'xÖÂY‚BøS͜â€vš9 Đj ëg0UFŋUH pu‚t*'“ÄģGĄ$j`´xŅHÕ¤Đī–œDąŸ˙ʁ&P­”/āčČjr|m’đˇõ$āą4yúŗˆCd U^/šēlpĪB{ī)Ė'ŽzÆwnzæfĨØÕÜ}čY;ŊĮÃoĮéÖķŠå7|ö…:öŪ]“g6FîŌļ~⎯Ŧšā>Îŧ€„đ’Ų{˜TŌN*%JkŽ—ĖgėõPj9xĘë÷ļiĪ9õĢĶö֚yZörëHîbuŸ4QÚĻ\ŋšÕČŌōöN0‘‡­g2,-˙9†/…ŋpYZîp‹E‰ĖŒ7…3Éöۚyš­ũŋiä:Ŧ~žfūā;}6yûĐÛķûu„Ží ˇÛ_ķcpžëļĖÁė0_{õûžøŒŨ&ĻnĻc˛Û+÷ ?pBXōdr×å@w–ˇÁ;Rûv×7—ĄË`ĸޞīŦC=ŋvŖû‚fĨ7HßÛj†yšwÚ5%h])îOŲnŒ˜f7ÍËā Ō÷ēsƂÉũjwēQtí˜Ō÷œ~į‹ēŲʕžjīžw[õ;ĮÜzŖ]Úëčã¯ĪėhœÄöz›ĖxiŖA))īĘÖĨˇF¨›f_=Ef{U~ž‹^qÅY;ĢWs•ā]#‚ŽznįPûTjfÅcĩzžæwÄnŖ˛jī+BjW´ķd‡•ˆI‘Uîø(sĩ…Ą¤3’ŧÚŖÉî 1Đöu !oĖĢ“z*{bÎ83ŒIâŧˆņ?ZĮ§@ņ:úŨ:ąí֓%æ:tŗ5;OčR›9M˜įÅÖ­ yNėŪ‡ģœ´t:L’dâ5 îÛ:ęãĄā„*.ōfy'd]¨ÍÂCuã!hړ\×U¤ y‰-ĐČŊGŸT.8íû1ûdqHvíĐũĢbHĖĖ“ÍlũÔ&Ü1kš4šU.ˇŖj¯A ë‰>ŗ¸ Y¸›Tō>Ї\Ž&5˜2Ē úqoōhą37åŨÖЂčéRÎ͓ëTĪaÍė 0S›üÜcœ˛knđ2˙ķ`ĸ‚“/Æũ ¸qŦzųqŖĒÔ5öpīДÔZ9YĀ—9ZHM…ʸ1æ<'Ņōŧ3YB ņĻŽ•š īŸ˜ÛūÂã>3RM‰IŠˆVūõĻ…˙‹kŗTų/ua‘"it6fu͎ū‚ģxžo“J•Īį×Jļâ°ōÖVc~?MßTĸ_¨XäyLČ ŨüCž›˛WŗėV€îYqžčm`đŖÛúEņoáE öũdę:ŋŌūu8 €‹mÛ< ĄU îS*å]īYŨžļægũú‡?Ŧšáņ‡ĩŦōæ5>I}Â.Įļ˜Č>/ũŠĸĢOÄ7ô{‘å D“ΰuĄũÅČq'ĩ¯iqąC9E9a>L:Ū@ų[owO¨ŸéĮĒ;^ī)ՖڍgŋīŲ.ŧ æqËS>˛ģɧŸ°›6­?ĄëÆ=đ˜´ü7•Įßæ¯Ærå]œģØ$ŋĖ_n/:Jtm‚ųi“ąö-IM0˛_ æoī(ßc˙Ė?Ÿķ˙+ŪæI9ØsiéúOĢÎõZB_fןč]`–5Ąđ0‚čsMė%-—–ĻŊLæMÆë}}ūs%ôwÄI7h:ŧĖæa!Üw¤Û_!ĀĨwĸöe‹Ą7Ë ÉGš[—&¤ĩË÷ŋĖ˙áF0ĩ•…ė9ģ LËÚ˛‡nGŠ íã+Ī[?ôE5÷Ææß'ėtd=ãĀŧnšģîU÷Īõiņā•÷SūĀ{ĶŦáËûvQe*ˇz”bģEMęhŧ5o[…Qå÷Mbŋë&(ú°°#rŠ žíqæØÜē¸W•`Ž–„õF°ũEŲ§Ä<Ęr§›Ēœ|‘ģ¤.˜^”ÃÜ@Iƒ<ëîËûbIGü7>-„Hƒ7T)ōˆŠyš‰Ž>ŠŖQ}´--IŠŽ!yÖ Đ4Å#zãĸ†'ŨˇĮ61ņgļ;Rš0 šoĮ%tūĒâ÷4ôāS‰šĀ†ĨÕXdŸVtäGK’8đyõSsįŖFRQeößčĶ,Xd_*‘<-> &Šö1¨d-‚ŦâĒĘņ"‡ąæYUaEßQ"+{cÉĶ3ĢÄäŪĄÖ-úŦÁ…r‹’ŖÉ͍ŋH= MJ]áęNÅȈ;éBå5 =O„~Īŧ9jjČÁ<:”p˙ؚYĻO(´+^2^TĪ2Ÿfęč͋ĢcäbšŪĮ`?¯3ōāÄ aJo›5Śš„B Ëán*"ŌVVy<;ē$˜î1đ¨‰Ã„JTË/&=ĄQŽųlÍlnĩvk2˙ĻZĀģ ŠČļÆōšzæĪ`ŽaĪø3:æĄc(ēč{0ƒËX­YĶļ=;ëâ'N}kÃE õL.Б´‘I]•ģk&¸Äwķ‹üčȋčŌSk.š¯F>/T1Š1ĩ5úßøßô˜ČŽqûÄRNLŽL…Á~T3]–r*Ôē˜A5ŠĨÅqk[;0íŠI§ØĨ•Đíkfž“õ_&šņX -ëÛĀ܍(ˇŒ‘å¯ė1TčŨŌ§Û‡Q‘đ(ždÕĖ=˜ÔWD•|nŋR™döYfˆû2elgb ēâ\ÃXē$p}CÍ,nAX¨•ŗVĩú—ƒšIŒ×Š4Ž:€@΁IUĶ#ĀÜg–aP}6ē_M‚Ŋs‘P§ō¨:ÉØ?Fn2ãzfÕˆôؗéIģ45‘x1a5ŋZ&?oĨ{{qČ~ĒZ3;ĢĄyž(’A9üWqLMļVn€ģÄt _9˜đüv/Ōk5Sž››ŲÕ.âĪ?lŠÎų^ĒŖ õBëā¯ą­ŌbÅqk¯¸ŖÅĩtšBĻŖ‰OƒÉ4nö’ ÉĨ˜õęĨë1wabĢ'd_ä};ģä„(”›jŠŊ=Õä¯į“B)‡nÜŦÜĒ#ˇ6xėŦŧsN× ä_#ąŪe2X^ĸ_Æw.ôĢL3¤Ø!ŋ}!ę-…œüŧEŪÍš´”k0;ŌŲVVA’Daņ^ųPÛz”Oč,_Į\%J}Z’ĩl–$Il•úÅRt§%ųČ[KŧŒĐÜYĮĪ1˙š"לŧüÉ@ĄŒLmŸũ0äū)´ Į÷ãSQŧx0+*üąüEVį-%Čĸüá@ ę û$m÷-ocm|ƒGVáõĶeŨ€E}ãõ(ōíz‘ėŋWįxxæĪi=oWFŗWīũ3÷ˇí3/%æíŠÉÜTb á2ÁáÍöКiŖŖĮv |6øÂ3*âēôsÚŠås€ ĖĐtLŨ<8™/˜Ú‘ČÃŗá¯+YᎠđŧ}L„[âōĒÁ3Œ gÕ1‘Ŗ&¯ˇĶŪdŨI{N>û>”.x‡:ūė—’ ˙ŗ}?ŽlĖ“öđœ`dTpLģCp˙€|õr +xb­ā­†geŗžÄÛá:˜¸'ËÉņåÅ´īëŧĮÎî1ž_}ũœ]͞=ũî„˙ X?*Äēj˙-`žo C€) )iyföHWUÛ×ë`ŪĶęp€G;ËxۓœŗK íZ%ŸŌ—Ē˜3ÍÛę&ä~xĻƒãÆ€xpŽØwĩøny†gėĶ`1ŽĨ )iŧsŦDē°(Q:~ãˆ/Ė3CŠŖSîĒ Žƒp`*)ũ˜&đß*į%Á}âŗ1%‰ŲēĩĪ‚û1oĶŪģÜã‹CĘŌq)“āŗ°>]ã7~y÷–w­Ĩf]~N-(ŠĄj1oĶM@?`ĪĀâ㴅Œy YOÁ+§=qĨ€1˜ÉEŦ׏Đ$Úö́ŧĮöˇŦ^Š™ ‚û ĖXéBįJ*ūHŽ19š3…@ģ[>e7Ūd™FDüa?úGĒĖŅáĢx“Ҥ*SõX ôqϜËŧ‰ƒ´š[4#Kčŗ…é#+û$Pnr’‹˜H˜šŨ–´P .~[ō‹‰o/ĄRúĖJ؊fėܚŪQŠÆēA ž´ûăŗB>Ō–{ÄŌü×÷‹š5ėŗBEîÎÁhB;ĻÍø+s9qÍTžĶĩâŖ'P]Ķ¨ÜŠ&Į”˜"” ÕašcW‰Zé<[^/Î .ęPÕöQK•ōUÂc´“qŲ…“"šōc_ŗ;ĀtT3 ˛¨ŧDeŌ5wČ2´¤=&ĸ 1g<˜;ž Ģø 7_ģŧX7cîQņ}Áuī['Â3/ų ã=ƒ1ˆŠģbhdo}bm&Œ.äS —ĐrŋrŖl#ËK%÷€™ŗÂ î{gg^ixmN8så–Z4iƒ ]0Ā@EāhŪ<[Ŋ$“Iė`lž~íchgŌĢT.:™F…LJš“ÅΉ 1XÔÅåÃqMäjįLå˛5G9¨¯ÁÅU/n5Ë;€Í6`r{–ėn˜.˜į<\E„‰ŽNú53i y(`Ĩ~i Œ{0ũĒĖü7OŊĖ×ŧwœËˆ­ŋ^"žøõ…‡;Ŗ'¸ō§ũČēwKâ1f‡VtĩÅ@‘~ļ.Šä˛+ĮÜĖbחD…ãWaãÚywę˜Ā.zÜšE­™2pÁÜiˇ†5˜i­ §/j=ŦDZßķ†xŖ—ÁĖ9u(!s‚•Ë)*¤í­8–Ę,q¨˜ÍŌA2_‹äĸ˙TŖYXL7ŸCĀhM9ŗōíK֊‹•Ōh^zŨ }3ģš{EyæĮ`Ęíst˜ĪÖĖ$ķÂčĀDbŽsΉ6&­ķo;@Ôu‰ëÅ!3Šã.ČoŊfÖ āk­q OiühV[}\â8BnŦ]ŋ_3Õ­R†ŊVJuĢ.0;‰Ā%×Ié[4¨ĻŨØy} ‚!w97ĖMŽ î¯Ā‚ŠņP•ĶŦƒ@ŸČ]íwá~ķ˒s@Ö< /ˆ”*•Oā2–č ĩį0 QŖ)4#˜ū4°ƒĮՁŅĨf6Tĸ›ĸÍČŨ?ˇžCAÚ;Ļ­™°xTšíB.lƒMjĻeX°Ą˜k€3æęŲŗ^Í$ÆÜŠf–oq­šøô&}‘rj˜]#t ĻŊ>ŦN›Ā„öß/‚)ėgúėĸi}]ËŦyÉä6S(āąiúĖ`ĄˆrXīpÅiÁŌÍ]ībũ6æžj]ûKš™Åļ/ˇįū yq“ÅŦ:nI &š2ĸ(¤:Ō35č/ íøw¸r1Ī+ÕÅŅĮ)PØüÄÂÆō~sāšY]u+~ëĒž ´buZ\Œ)î8Qæ†{ĩIö2˛Eū+ŲĒ#3fnī2B  4Ũh'šš_<ĸ!yÛ,Öc0ĩ] ö yāNS3ŧ<ËŧŦ6B“Kņ­‰â>­Gf˸†ë”‡ gČ_qĻ CŒnĐĐ`AWk#%MÎ@œô  ęiĸˆōvsFū929]k&Ęt„Ļ‹`ī§°đ%UŦ+"´į0ĮÁp%ĸ—užP€)ž‘˜đâã{×&ĘUF;ŋ…2.sŦÃb°„?TÚ7š/Ѝ~ĖđČõĢŠ OÄŲõPâ1cB‹ëČđ(Ų“ĄĶÖǃ;)$Žü¤}/!ŲKaw‘¨âËÉI„ōŠDKūpÕ%_⁞Ž"Č*­Dĩ‹´Ą ĸŌÔ tåß_°O3 p÷ĄķmėįUļöŒę꟒ī=×q†c•Ļ—Vyxû@Čßį§ÁôvĻąųŸįÔŧI›ƒø‹Ũæ˙ķQŪÔkŧĪnpŌęš9Ēl×=eßT3ŋÖP#ŊØ—m‚yÂRųFãqėbrŋdĖ;'Û;Æû÷¨ųO0?kØųô˛M0˛ŋæĪŗĖ_jĖâ•ô'Álũ¯Ž?‰hĪÛUšHkLh&ÎđãL×Y_™ģ´ą^/Û˙ķÉ5^ˇ~æäŗŌæ Bgé50ožŊūG0Ÿ Sk—œ}[|jũ¤īŠĐ¨į=iwwÕ˙ĖXų§/§ŪãN0•˙Ņ;. î¯EO‹ŋ31We‘7à “į_×n€ÔäĢūÃĮFÆ˛õ„œˇĐũ/ÖæüC$v÷oŪJ  ũ$ūī0ųŠ{B<õ\#u‘ĪEõFŸ‰äô3fnš3ĸQøs° ZŌD‚¯Î$~˛ˆF‹=^Ä"ŸGĘ|Á6˛9€ģ@O›ĮéLzŲŲ6GÛdWĨ5ŲD¯ž;ˆŦ<ģŧč‡ĸ°ļ2§@Ü3Rŗ"ˆŲčŊoY0ŧT3M"0fŠ!yPIyMˆ—_[4kŒ‚˛Î‰ĪÃTcr]!DbE$@fČĄ'äŋÄtĢNdŅYfƒq!R™mņ–Ā§ę>3ĮXMöLJŊDŒėzéīäi ũí&::eF>´Xæ?Ō‹‹c“}âešČ3"ž4níe0šáTpWÁ$}qG–ĻP3o4ö˙Ē´!eÖĩŌJíŠN§8t%ŠŖÁė tjâ;'LŅÄUڎ”E´hĒ=,Ėe>š.†š–°úԅFüRĀ4“ŌŌöT=ÕMMW}ÅŽ €4PÁZö㤝ėōš+IāęÕ´ËËl:ö§nT•Ëy¨7ĢÁŦL÷s‰Ë„Ëĩđüš'ŖĻ˜:s˙U⎤,Iđ Ճ; ē(ˆãHžÄĶg;~ŧž¯øTØĻģĻ8Á(“$į ĶĢ™öōõÜN:¸Å]ģ¤îĄ,r_üĖUzUĄh&N;ä\ŨqŗŨ†hyHŲ“HģÎ¸ÍĀ”(Áš-eÆeĘíûõ ĖŗAäŲEg[ōRį,ᮋįPpÜØl ˜>CAēÚPŪM/ -˜î_mcNÛ? fBåÖËMÛĄ'-"øņ(_­ūH|MōÖÍyšû†âȔ|÷Ņá]jĄĮõPŅ˙)ģ8ĪÜ0”a˜)§Ģ͘Øof™D ÉBpįKB“sō¸PĒ™ĻWkb§*&ŧČڗŽ~ ŠP9 öąDķęŪŪr؆ŊUIjwŲãŠĶžåS7ŗŸŽ™”­ J°HHĢ1ĮSŖ>–Ō´4+Y0{8kŽĢˇdÅ=71u“>Xk&ŽnZk(Ŗ’%ˇ€ģ>uDŦlgsë ŲÅBËĢx}"îŽEķ~ō å­|1*Ģ›Ų×Ėō ÜÄč,ŸåDD¯įN4- 6hĒ'šŅwGn Å÷‚Ļ&uЋŖ]ē(JŖ˙ⓨj:đt|X2¤ĖhÄÚ­7ŖVyë4@Öŋf;’EV^Yf­•‚ī„Ų­í!™­Ū(î7céWđĀ,̧Ŧ´¯!Ģī7Kļ;Aˍ^9üËķqš‰‹,‡†ĩAĸô"ˆĪ:ø+yE?…DĖu9Kū"ķÖÉÛŧšķɲ‘õ{(ļ Ļ˜‡&41ÜŅ•91ÉuėBz|qŠ` VË免ēR'>’‚žzŨ ė2˜=¯ũƒsm‘ŽŨ –ĘļJēPc?ĩû„"‚oé鰑×Ĩ‹ƒō‰OË äôP­ąŋ.J".1[Žõi“ęÖn}Ѝ‚híƒ9W€x[HÄGōO/›K“Æz”āķ :éƒ3%ĒIĢ\u}ũĮėęhöšŌt-/-WĄ}eAģfJmpĐ­zĘ~|šĸWƒŒ’ŧÉđKaëÛĨ0ÅwŦ'’ą÷$ĪoIîĪÚ%Q§ÛøH˛cu E˙/Û5Īéģžb]ĪH›MûÁž7Ŋ`ßæ´ 6ÁČ&˜Ųs ›`dw‚9Gĸļ;œ ~‰Ũ)¸ögĸûģ˛6‹)`&§#…På@âğ`ŅCb N”ßj×܈œ‡…žŠĖ=Ņ9„jA‡â Āüģn ŠiˇŲE÷Qĸ¤­x4åt9†7ŗõ™Âzƒrõ´vƒ4—H.=˛•ĩZØƒĖ—!ĩV‹€1í]vƒF;g\sų…J u/ĀŽĨ8ínģŖfRH‡ŠnNMę˛vŨĻŨnW@ę%`ŌAQ×/zËo 5ÍŲ5vķCc×g%˛”cœĘĪŌwÚÅfVBŦzä-EŅŨXížbj‰ŗ×‘ŠŲõw§i]ģ&šČĒÍ:™NžĀÛĀ–Åv˜›Î. Dōaįa"ŠĪ%ĸ÷ØÕŖœkøCQØ×ãYS}‡œY3ßdwŒfw†ģfUüvCÄĄißbˁėbdÛI[ū&ģ&Åū=ž>Á.íš@?á´Ų\3Č&˜Ųs ›`dˁl‚9ũ 0wb5ƒÚ_“~˙šL"—í•{G´ņÁdđÛCˆ|Ĩ&K˙"š¨ öĀ$ÍøqGŪmĖU43?ũ˙Áū˜´ņú'Đū˜øWvęÆķ/TIĩņÁüCpŽ柁ō/€ų‡l‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@6ÁČ&˜Ųs ›`dˁl‚9M0˛ æ@öëĀüCzOÛ¯sÚąM0˛ æ@6ÁČ&˜Ų?‘( ļģŸÚOIENDŽB`‚leptonica-1.86.0/prog/listtest.c000066400000000000000000000240411506303110300165430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * listtest.c * * This file tests the main functions in the generic * list facility, given in list.c and list.h. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" int main(int argc, char **argv) { char *filein; l_int32 i, n, w, h, samecount, count; BOX *box, *boxc; BOXA *boxa, *boxan; DLLIST *head, *tail, *head2, *tail2, *elem, *nextelem; PIX *pixs; if (argc != 2) return ERROR_INT(" Syntax: listtest filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); boxa = boxan = NULL; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); /* start with a boxa */ boxa = pixConnComp(pixs, NULL, 4); n = boxaGetCount(boxa); /*-------------------------------------------------------* * Do one of these two ... *-------------------------------------------------------*/ if (1) { /* listAddToTail(): make a list by adding to tail */ head = NULL; tail = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToTail(&head, &tail, box); } } else { /* listAddToHead(): make a list by adding to head */ head = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToHead(&head, box); } } /* list concatenation */ head2 = NULL; /* cons up 2nd list from null */ tail2 = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToTail(&head2, &tail2, box); } listJoin(&head, &head2); count = listGetCount(head); lept_stderr("%d items in list\n", count); listReverse(&head); count = listGetCount(head); lept_stderr("%d items in reversed list\n", count); listReverse(&head); count = listGetCount(head); lept_stderr("%d items in doubly reversed list\n", count); boxan = boxaCreate(n); /*-------------------------------------------------------* * Then do one of these ... *-------------------------------------------------------*/ if (1) { /* Removal of all elements and data from a list, * without using L_BEGIN_LIST_FORWARD macro */ for (elem = head; elem; elem = nextelem) { nextelem = elem->next; box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); } } else if (0) { /* Removal of all elements and data from a list, * using L_BEGIN_LIST_FORWARD macro */ L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); L_END_LIST } else if (0) { /* Removal of all elements and data from a list, * using L_BEGIN_LIST_REVERSE macro */ tail = listFindTail(head); L_BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); L_END_LIST } else if (0) { /* boxa and boxan are same when list made with listAddToHead() */ tail = listFindTail(head); L_BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); L_END_LIST for (i = 0, samecount = 0; i < n; i++) { if (boxa->box[i]->w == boxan->box[i]->w && boxa->box[i]->h == boxan->box[i]->h) samecount++; } lept_stderr(" num boxes = %d, same count = %d\n", boxaGetCount(boxa), samecount); } else if (0) { /* boxa and boxan are same when list made with listAddToTail() */ L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); L_END_LIST for (i = 0, samecount = 0; i < n; i++) { if (boxa->box[i]->w == boxan->box[i]->w && boxa->box[i]->h == boxan->box[i]->h) samecount++; } lept_stderr(" num boxes = %d, same count = %d\n", boxaGetCount(boxa), samecount); } else if (0) { /* Destroy the boxes and then the list */ L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxDestroy(&box); elem->data = NULL; L_END_LIST listDestroy(&head); } else if (0) { /* listInsertBefore(): inserting a copy BEFORE each element */ L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxc = boxCopy(box); listInsertBefore(&head, elem, boxc); L_END_LIST L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; L_END_LIST listDestroy(&head); } else if (0) { /* listInsertAfter(): inserting a copy AFTER that element */ L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxc = boxCopy(box); listInsertAfter(&head, elem, boxc); L_END_LIST L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); L_END_LIST /* listDestroy(&head); */ } else if (0) { /* Test listRemoveFromHead(), to successively * remove the head of the list for all elements. */ count = 0; while (head) { box = (BOX *)listRemoveFromHead(&head); boxDestroy(&box); count++; } lept_stderr("removed %d items\n", count); } else if (0) { /* Another version to test listRemoveFromHead(), using * an iterator macro. */ count = 0; L_BEGIN_LIST_FORWARD(head, elem) box = (BOX *)listRemoveFromHead(&head); boxDestroy(&box); count++; L_END_LIST lept_stderr("removed %d items\n", count); } else if (0) { /* test listRemoveFromTail(), to successively remove * the tail of the list for all elements. */ count = 0; tail = NULL; /* will find tail automatically */ while (head) { box = (BOX *)listRemoveFromTail(&head, &tail); boxDestroy(&box); count++; } lept_stderr("removed %d items\n", count); } else if (0) { /* another version to test listRemoveFromTail(), using * an iterator macro. */ count = 0; tail = listFindTail(head); /* need to initialize tail */ L_BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)listRemoveFromTail(&head, &tail); boxDestroy(&box); count++; L_END_LIST lept_stderr("removed %d items\n", count); } else if (0) { /* Iterate backwards over the box array, and use * listFindElement() to find each corresponding data structure * within the list; then remove it. Should completely * destroy the list. Note that listFindElement() * returns the cell without removing it from the list! */ n = boxaGetCount(boxa); for (i = 0, count = 0; i < n; i++) { box = boxaGetBox(boxa, n - i - 1, L_CLONE); if (i % 1709 == 0) boxPrintStreamInfo(stderr, box); elem = listFindElement(head, box); boxDestroy(&box); if (elem) { /* found */ box = (BOX *)listRemoveElement(&head, elem); if (i % 1709 == 0) boxPrintStreamInfo(stderr, box); boxDestroy(&box); count++; } } lept_stderr("removed %d items\n", count); } lept_stderr("boxa count = %d; boxan count = %d\n", boxaGetCount(boxa), boxaGetCount(boxan)); boxaGetExtent(boxa, &w, &h, NULL); lept_stderr("boxa extent = (%d, %d)\n", w, h); boxaGetExtent(boxan, &w, &h, NULL); lept_stderr("boxan extent = (%d, %d)\n", w, h); pixDestroy(&pixs); boxaDestroy(&boxa); boxaDestroy(&boxan); return 0; } leptonica-1.86.0/prog/livre_adapt.c000066400000000000000000000076301506303110300171670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_adapt.c * * This shows two ways to normalize a document image for uneven * illumination. It is somewhat more complicated than using the * morphological tophat. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2, *pix3, *pixr, *pixg, *pixb, *pixsg, *pixsm; PIXA *pixa; if (argc != 1) return ERROR_INT(" Syntax: livre_adapt", __func__, 1); setLeptDebugOK(1); /* Read the image in at 150 ppi. */ if ((pixs = pixRead("brothers.150.jpg")) == NULL) return ERROR_INT("pix not made", __func__, 1); pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); /* Normalize for uneven illumination on RGB image */ pixBackgroundNormRGBArraysMorph(pixs, NULL, 4, 5, 200, &pixr, &pixg, &pixb); pix1 = pixApplyInvBackgroundRGBMap(pixs, pixr, pixg, pixb, 4, 4); pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); /* Convert the RGB image to grayscale. */ pixsg = pixConvertRGBToLuminance(pixs); pixaAddPix(pixa, pixsg, L_INSERT); /* Remove the text in the fg. */ pix1 = pixCloseGray(pixsg, 25, 25); pixaAddPix(pixa, pix1, L_INSERT); /* Smooth the bg with a convolution. */ pixsm = pixBlockconv(pix1, 15, 15); pixaAddPix(pixa, pixsm, L_INSERT); /* Normalize for uneven illumination on gray image. */ pixBackgroundNormGrayArrayMorph(pixsg, NULL, 4, 5, 200, &pixg); pix1 = pixApplyInvBackgroundGrayMap(pixsg, pixg, 4, 4); pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pixg); /* Increase the dynamic range. */ pix2 = pixGammaTRC(NULL, pix1, 1.0, 30, 180); pixaAddPix(pixa, pix2, L_INSERT); /* Threshold to 1 bpp. */ pix3 = pixThresholdToBinary(pix2, 120); pixaAddPix(pixa, pix3, L_INSERT); /* Generate the output image and pdf */ lept_mkdir("lept/livre"); lept_stderr("Writing jpg and pdf to: /tmp/lept/livre/adapt.*\n"); pix1 = pixaDisplayTiledAndScaled(pixa, 8, 350, 4, 0, 25, 2); pixWrite("/tmp/lept/livre/adapt.jpg", pix1, IFF_DEFAULT); pixDisplay(pix1, 100, 100); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "Livre: adaptive thresholding", "/tmp/lept/livre/adapt.pdf"); pixDestroy(&pix1); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/livre_hmt.c000066400000000000000000000130061506303110300166600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_hmt.c * * This demonstrates use of pixGenerateSelBoundary() to * generate a hit-miss Sel. * * (1) The Sel is displayed with the hit and miss elements in color. * * (2) We produce several 4 bpp colormapped renditions, * with the matched pattern either highlighted or removed. * * (3) For figures in the Document Image Applications chapter: * fig 7: livre_hmt 1 8 * fig 8: livre_hmt 2 4 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; /* Patterns at full resolution */ static const char *patname[3] = { "", "tribune-word.png", /* patno = 1 */ "tribune-t.png"}; /* patno = 2 */ int main(int argc, char **argv) { l_int32 patno, reduction, width, cols, cx, cy; PIX *pixs, *pixt, *pix, *pixr, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3, *pixd; PIXA *pixa; SEL *selhm; if (argc != 3) return ERROR_INT(" Syntax: livre_hmt pattern reduction", __func__, 1); patno = atoi(argv[1]); reduction = atoi(argv[2]); setLeptDebugOK(1); lept_mkdir("lept/livre"); if ((pixs = pixRead(patname[patno])) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (reduction != 4 && reduction != 8 && reduction != 16) return ERROR_INT("reduction not 4, 8 or 16", __func__, 1); if (reduction == 4) pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 0, 0); else if (reduction == 8) pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 0); else /* reduction == 16 */ pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 2); /* Make a hit-miss sel */ if (reduction == 4) selhm = pixGenerateSelBoundary(pixt, 2, 2, 20, 30, 1, 1, 0, 0, &pixp); else if (reduction == 8) selhm = pixGenerateSelBoundary(pixt, 1, 2, 6, 12, 1, 1, 0, 0, &pixp); else /* reduction == 16 */ selhm = pixGenerateSelBoundary(pixt, 1, 1, 4, 8, 0, 0, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 1000, 300); pixWrite("/tmp/lept/livre/pixsel1", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ pix = pixRead("tribune-page-4x.png"); /* 4x reduced */ if (reduction == 4) pixr = pixClone(pix); else if (reduction == 8) pixr = pixReduceRankBinaryCascade(pix, 2, 0, 0, 0); else /* reduction == 16 */ pixr = pixReduceRankBinaryCascade(pix, 2, 2, 0, 0); startTimer(); pixhmt = pixHMT(NULL, pixr, selhm); lept_stderr("Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ selGetParameters(selhm, NULL, NULL, &cy, &cx); pixd1 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/lept/livre/pixd11", pixd1, IFF_PNG); /* Color each instance at 0.5 scale */ pixd2 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/lept/livre/pixd12", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixr); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, cx, cy, 1); pixWrite("/tmp/lept/livre/pixr1", pixd3, IFF_PNG); pixa = pixaCreate(2); pixaAddPix(pixa, pixs, L_CLONE); pixaAddPix(pixa, pixsel, L_CLONE); cols = (patno == 1) ? 1 : 2; width = (patno == 1) ? 800 : 400; pixd = pixaDisplayTiledAndScaled(pixa, 32, width, cols, 0, 30, 2); pixWrite("/tmp/lept/livre/hmt.png", pixd, IFF_PNG); pixDisplay(pixd, 1000, 600); selDestroy(&selhm); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); pixDestroy(&pix); pixDestroy(&pixt); return 0; } leptonica-1.86.0/prog/livre_makefigs.c000066400000000000000000000077501506303110300176670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_makefigs.c * * This makes all the figures in Chapter 18, "Document Image Applications", * of the book "Mathematical morphology: from theory to applications", * edited by Laurent Najman and hugues Talbot. Published by Hermes * Scientific Publishing, Ltd, 2010. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char buf[256]; if (argc != 1) return ERROR_INT(" Syntax: livre_makefigs", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/livre"); /* Generate Figure 1 (page segmentation) */ callSystemDebug("livre_seedgen"); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/seedgen.png /tmp/lept/livre/dia_fig1.png"); callSystemDebug(buf); /* Generate Figures 2-5 (page segmentation) */ snprintf(buf, sizeof(buf), "livre_pageseg pageseg2.tif"); callSystemDebug(buf); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/segout.1.png /tmp/lept/livre/dia_fig2.png"); callSystemDebug(buf); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/segout.2.png /tmp/lept/livre/dia_fig3.png"); callSystemDebug(buf); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/segout.3.png /tmp/lept/livre/dia_fig4.png"); callSystemDebug(buf); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/segout.4.png /tmp/lept/livre/dia_fig5.png"); callSystemDebug(buf); /* Generate Figure 6 (hmt sels for text orientation) */ callSystemDebug("livre_orient"); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/orient.png /tmp/lept/livre/dia_fig6.png"); callSystemDebug(buf); /* Generate Figure 7 (hmt sel for fancy "Tribune") */ callSystemDebug("livre_hmt 1 8"); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/hmt.png /tmp/lept/livre/dia_fig7.png"); callSystemDebug(buf); /* Generate Figure 8 (hmt sel for fancy "T") */ callSystemDebug("livre_hmt 2 4"); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/hmt.png /tmp/lept/livre/dia_fig8.png"); callSystemDebug(buf); /* Generate Figure 9 (tophat background cleaning) */ callSystemDebug("livre_tophat"); snprintf(buf, sizeof(buf), "cp /tmp/lept/livre/tophat.jpg /tmp/lept/livre/dia_fig9.jpg"); callSystemDebug(buf); /* Run livre_adapt to generate an expanded version of Figure 9 */ callSystemDebug("livre_adapt"); return 0; } leptonica-1.86.0/prog/livre_orient.c000066400000000000000000000065001506303110300173710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_orient.c * * This generates an image of the set of 4 HMT Sels that are * used for counting ascenders and descenders to detect * text orientation. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { PIX *pix1; SEL *sel1, *sel2, *sel3, *sel4; SELA *sela; setLeptDebugOK(1); lept_mkdir("lept/livre"); sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); sel3 = selCreateFromString(textsel3, 5, 6, NULL); sel4 = selCreateFromString(textsel4, 5, 6, NULL); sela = selaCreate(4); selaAddSel(sela, sel1, "textsel1", L_INSERT); selaAddSel(sela, sel2, "textsel2", L_INSERT); selaAddSel(sela, sel3, "textsel3", L_INSERT); selaAddSel(sela, sel4, "textsel4", L_INSERT); pix1 = selaDisplayInPix(sela, 28, 3, 30, 4); pixWrite("/tmp/lept/livre/orient.png", pix1, IFF_PNG); pixDisplay(pix1, 1200, 1200); pixDestroy(&pix1); selaDestroy(&sela); return 0; } leptonica-1.86.0/prog/livre_pageseg.c000066400000000000000000000271611506303110300175120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_pageseg.c * * This gives examples of the use of binary morphology for * some simple and fast document segmentation operations. * * The operations are carried out at 2x reduction. * For images scanned at 300 ppi, this is typically * high enough resolution for accurate results. * * This generates several of the figures used in Chapter 18 of * "Mathematical morphology: from theory to applications", * edited by Laurent Najman and Hugues Talbot. Published by * Hermes Scientific Publishing, Ltd, 2010. * * Use pageseg*.tif input images. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Control the display output */ #define DFLAG 0 l_int32 DoPageSegmentation(PIX *pixs, l_int32 which); int main(int argc, char **argv) { char *filein; l_int32 i; PIX *pixs; /* input image should be at least 300 ppi */ if (argc != 2) return ERROR_INT(" Syntax: livre_pageseg filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); for (i = 1; i <= 4; i++) DoPageSegmentation(pixs, i); pixDestroy(&pixs); return 0; } l_int32 DoPageSegmentation(PIX *pixs, /* should be at least 300 ppi */ l_int32 which) /* 1, 2, 3, 4 */ { char buf[256]; l_int32 zero; BOXA *boxatm, *boxahm; PIX *pixr; /* image reduced to 150 ppi */ PIX *pixhs; /* image of halftone seed, 150 ppi */ PIX *pixm; /* image of mask of components, 150 ppi */ PIX *pixhm1; /* image of halftone mask, 150 ppi */ PIX *pixhm2; /* image of halftone mask, 300 ppi */ PIX *pixht; /* image of halftone components, 150 ppi */ PIX *pixnht; /* image without halftone components, 150 ppi */ PIX *pixi; /* inverted image, 150 ppi */ PIX *pixvws; /* image of vertical whitespace, 150 ppi */ PIX *pixm1; /* image of closed textlines, 150 ppi */ PIX *pixm2; /* image of refined text line mask, 150 ppi */ PIX *pixm3; /* image of refined text line mask, 300 ppi */ PIX *pixb1; /* image of text block mask, 150 ppi */ PIX *pixb2; /* image of text block mask, 300 ppi */ PIX *pixnon; /* image of non-text or halftone, 150 ppi */ PIX *pix1, *pix2, *pix3; PIXA *pixa; PIXCMAP *cmap; PTAA *ptaa; l_int32 ht_flag = 0; l_int32 ws_flag = 0; l_int32 text_flag = 0; l_int32 block_flag = 0; if (which == 1) ht_flag = 1; else if (which == 2) ws_flag = 1; else if (which == 3) text_flag = 1; else if (which == 4) block_flag = 1; else return ERROR_INT("invalid parameter: not in [1...4]", __func__, 1); pixa = pixaCreate(0); lept_mkdir("lept/livre"); /* Reduce to 150 ppi */ pix1 = pixScaleToGray2(pixs); if (ws_flag || ht_flag || block_flag) pixaAddPix(pixa, pix1, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/orig.gray.150.png", pix1, IFF_PNG); pixDestroy(&pix1); pixr = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); /* Get seed for halftone parts */ pix1 = pixReduceRankBinaryCascade(pixr, 4, 4, 3, 0); pix2 = pixOpenBrick(NULL, pix1, 5, 5); pixhs = pixExpandBinaryPower2(pix2, 8); if (ht_flag) pixaAddPix(pixa, pixhs, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/htseed.150.png", pixhs, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); /* Get mask for connected regions */ pixm = pixCloseSafeBrick(NULL, pixr, 4, 4); if (ht_flag) pixaAddPix(pixa, pixm, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/ccmask.150.png", pixm, IFF_PNG); /* Fill seed into mask to get halftone mask */ pixhm1 = pixSeedfillBinary(NULL, pixhs, pixm, 4); if (ht_flag) pixaAddPix(pixa, pixhm1, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/htmask.150.png", pixhm1, IFF_PNG); pixhm2 = pixExpandBinaryPower2(pixhm1, 2); /* Extract halftone stuff */ pixht = pixAnd(NULL, pixhm1, pixr); if (which == 1) pixWrite("/tmp/lept/livre/ht.150.png", pixht, IFF_PNG); /* Extract non-halftone stuff */ pixnht = pixXor(NULL, pixht, pixr); if (text_flag) pixaAddPix(pixa, pixnht, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/text.150.png", pixnht, IFF_PNG); pixZero(pixht, &zero); if (zero) lept_stderr("No halftone parts found\n"); else lept_stderr("Halftone parts found\n"); /* Get bit-inverted image */ pixi = pixInvert(NULL, pixnht); if (ws_flag) pixaAddPix(pixa, pixi, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/invert.150.png", pixi, IFF_PNG); /* The whitespace mask will break textlines where there * is a large amount of white space below or above. * We can prevent this by identifying regions of the * inverted image that have large horizontal (bigger than * the separation between columns) and significant * vertical extent (bigger than the separation between * textlines), and subtracting this from the whitespace mask. */ pix1 = pixMorphCompSequence(pixi, "o80.60", 0); pix2 = pixSubtract(NULL, pixi, pix1); if (ws_flag) pixaAddPix(pixa, pix2, L_COPY); pixDestroy(&pix1); /* Identify vertical whitespace by opening inverted image */ pix3 = pixOpenBrick(NULL, pix2, 5, 1); /* removes thin vertical lines */ pixvws = pixOpenBrick(NULL, pix3, 1, 200); /* gets long vertical lines */ if (text_flag || ws_flag) pixaAddPix(pixa, pixvws, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/vertws.150.png", pixvws, IFF_PNG); pixDestroy(&pix2); pixDestroy(&pix3); /* Get proto (early processed) text line mask. */ /* First close the characters and words in the textlines */ pixm1 = pixCloseSafeBrick(NULL, pixnht, 30, 1); if (text_flag) pixaAddPix(pixa, pixm1, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/textmask1.150.png", pixm1, IFF_PNG); /* Next open back up the vertical whitespace corridors */ pixm2 = pixSubtract(NULL, pixm1, pixvws); if (which == 1) pixWrite("/tmp/lept/livre/textmask2.150.png", pixm2, IFF_PNG); /* Do a small opening to remove noise */ pixOpenBrick(pixm2, pixm2, 3, 3); if (text_flag) pixaAddPix(pixa, pixm2, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/textmask3.150.png", pixm2, IFF_PNG); pixm3 = pixExpandBinaryPower2(pixm2, 2); /* Join pixels vertically to make text block mask */ pixb1 = pixMorphSequence(pixm2, "c1.10 + o4.1", 0); if (block_flag) pixaAddPix(pixa, pixb1, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/textblock1.150.png", pixb1, IFF_PNG); /* Solidify the textblock mask and remove noise: * (1) For each c.c., close the blocks and dilate slightly * to form a solid mask. * (2) Small horizontal closing between components * (3) Open the white space between columns, again * (4) Remove small components */ pix1 = pixMorphSequenceByComponent(pixb1, "c30.30 + d3.3", 8, 0, 0, NULL); pixCloseSafeBrick(pix1, pix1, 10, 1); if (block_flag) pixaAddPix(pixa, pix1, L_COPY); pix2 = pixSubtract(NULL, pix1, pixvws); pix3 = pixSelectBySize(pix2, 25, 5, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); if (block_flag) pixaAddPix(pixa, pix3, L_COPY); if (which == 1) pixWrite("/tmp/lept/livre/textblock2.150.png", pix3, IFF_PNG); pixb2 = pixExpandBinaryPower2(pix3, 2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Identify the outlines of each textblock */ ptaa = pixGetOuterBordersPtaa(pixb2); pix1 = pixRenderRandomCmapPtaa(pixb2, ptaa, 1, 8, 1); cmap = pixGetColormap(pix1); pixcmapResetColor(cmap, 0, 130, 130, 130); /* set interior to gray */ if (which == 1) pixWrite("/tmp/lept/livre/textblock3.300.png", pix1, IFF_PNG); pixDisplayWithTitle(pix1, 480, 360, "textblock mask with outlines", DFLAG); ptaaDestroy(&ptaa); pixDestroy(&pix1); /* Fill line mask (as seed) into the original */ pix1 = pixSeedfillBinary(NULL, pixm3, pixs, 8); pixOr(pixm3, pixm3, pix1); pixDestroy(&pix1); if (which == 1) pixWrite("/tmp/lept/livre/textmask.300.png", pixm3, IFF_PNG); pixDisplayWithTitle(pixm3, 480, 360, "textline mask 4", DFLAG); /* Fill halftone mask (as seed) into the original */ pix1 = pixSeedfillBinary(NULL, pixhm2, pixs, 8); pixOr(pixhm2, pixhm2, pix1); pixDestroy(&pix1); if (which == 1) pixWrite("/tmp/lept/livre/htmask.300.png", pixhm2, IFF_PNG); pixDisplayWithTitle(pixhm2, 520, 390, "halftonemask 2", DFLAG); /* Find objects that are neither text nor halftones */ pix1 = pixSubtract(NULL, pixs, pixm3); /* remove text pixels */ pixnon = pixSubtract(NULL, pix1, pixhm2); /* remove halftone pixels */ pixDestroy(&pix1); if (which == 1) pixWrite("/tmp/lept/livre/other.300.png", pixnon, IFF_PNG); pixDisplayWithTitle(pixnon, 540, 420, "other stuff", DFLAG); /* Write out b.b. for text line mask and halftone mask components */ boxatm = pixConnComp(pixm3, NULL, 4); boxahm = pixConnComp(pixhm2, NULL, 8); if (which == 1) { boxaWrite("/tmp/lept/livre/textmask.boxa", boxatm); boxaWrite("/tmp/lept/livre/htmask.boxa", boxahm); } pix1 = pixaDisplayTiledAndScaled(pixa, 8, 250, 4, 0, 25, 2); pixDisplay(pix1, 0, 375 * (which - 1)); snprintf(buf, sizeof(buf), "/tmp/lept/livre/segout.%d.png", which); pixWrite(buf, pix1, IFF_PNG); pixDestroy(&pix1); pixaDestroy(&pixa); /* clean up to test with valgrind */ pixDestroy(&pixr); pixDestroy(&pixhs); pixDestroy(&pixm); pixDestroy(&pixhm1); pixDestroy(&pixhm2); pixDestroy(&pixht); pixDestroy(&pixi); pixDestroy(&pixnht); pixDestroy(&pixvws); pixDestroy(&pixm1); pixDestroy(&pixm2); pixDestroy(&pixm3); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixnon); boxaDestroy(&boxatm); boxaDestroy(&boxahm); return 0; } leptonica-1.86.0/prog/livre_seedgen.c000066400000000000000000000054121506303110300175040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_seedgen.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pix1, *pix2, *pix3; PIXA *pixa; setLeptDebugOK(1); pixs = pixRead("pageseg2.tif"); startTimer(); for (i = 0; i < 100; i++) { pix1 = pixReduceRankBinaryCascade(pixs, 1, 4, 4, 3); pixDestroy(&pix1); } lept_stderr("Time: %8.4f sec\n", stopTimer() / 100.); /* 4 2x rank reductions (levels 1, 4, 4, 3), followed by 5x5 opening */ pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); pix1 = pixReduceRankBinaryCascade(pixs, 1, 4, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixReduceRankBinaryCascade(pix1, 4, 3, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pixOpenBrick(pix2, pix2, 5, 5); pix3 = pixExpandBinaryReplicate(pix2, 2, 2); pixaAddPix(pixa, pix3, L_INSERT); /* Generate the output image */ lept_mkdir("lept/livre"); lept_stderr("Writing to: /tmp/lept/livre/seedgen.png\n"); pix1 = pixaDisplayTiledAndScaled(pixa, 8, 350, 4, 0, 25, 2); pixWrite("/tmp/lept/livre/seedgen.png", pix1, IFF_PNG); pixDisplay(pix1, 1100, 0); pixDestroy(&pix1); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/livre_tophat.c000066400000000000000000000052711506303110300173740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * livre_tophat.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixsg, *pix1, *pix2; PIXA *pixa; if (argc != 1) return ERROR_INT(" Syntax: livre_tophat", __func__, 1); setLeptDebugOK(1); /* Read the image in at 150 ppi. */ pixs = pixRead("brothers.150.jpg"); pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_INSERT); pixsg = pixConvertRGBToLuminance(pixs); /* Black tophat (closing - original-image) and invert */ pix1 = pixTophat(pixsg, 15, 15, L_TOPHAT_BLACK); pixInvert(pix1, pix1); pixaAddPix(pixa, pix1, L_INSERT); /* Set black point at 200, white point at 245. */ pix2 = pixGammaTRC(NULL, pix1, 1.0, 200, 245); pixaAddPix(pixa, pix2, L_INSERT); /* Generate the output image */ lept_mkdir("lept/livre"); lept_stderr("Writing to: /tmp/lept/livre/tophat.jpg\n"); pix1 = pixaDisplayTiledAndScaled(pixa, 8, 350, 3, 0, 25, 2); pixWrite("/tmp/lept/livre/tophat.jpg", pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 1200, 800); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixsg); return 0; } leptonica-1.86.0/prog/locminmax_reg.c000066400000000000000000000071671506303110300175260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * locminmax_reg.c * * Note: you can remove all minima that are touching the border, using: * pix3 = pixRemoveBorderConnComps(pix1, 8); */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" void DoLocMinmax(L_REGPARAMS *rp, PIX *pixs, l_int32 minmax, l_int32 maxmin); int main(int argc, char **argv) { l_int32 i, j; l_float32 f; PIX *pix1, *pix2, *pix3; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix1 = pixCreate(500, 500, 8); for (i = 0; i < 500; i++) { for (j = 0; j < 500; j++) { f = 128.0 + 26.3 * sin(0.0438 * (l_float32)i); f += 33.4 * cos(0.0712 * (l_float32)i); f += 18.6 * sin(0.0561 * (l_float32)j); f += 23.6 * cos(0.0327 * (l_float32)j); pixSetPixel(pix1, j, i, (l_int32)f); } } pix2 = pixRead("karen8.jpg"); pix3 = pixBlockconv(pix2, 10, 10); DoLocMinmax(rp, pix1, 0, 0); /* 0 - 2 */ DoLocMinmax(rp, pix3, 50, 100); /* 3 - 5 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return regTestCleanup(rp); } void DoLocMinmax(L_REGPARAMS *rp, PIX *pixs, l_int32 minmax, l_int32 maxmin) { l_uint32 redval, greenval; PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa; pixa = pixaCreate(0); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 0 */ pixaAddPix(pixa, pixs, L_COPY); pixLocalExtrema(pixs, minmax, maxmin, &pix1, &pix2); composeRGBPixel(255, 0, 0, &redval); composeRGBPixel(0, 255, 0, &greenval); pixd = pixConvertTo32(pixs); pixPaintThroughMask(pixd, pix2, 0, 0, greenval); pixPaintThroughMask(pixd, pix1, 0, 0, redval); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixaAddPix(pixa, pixd, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix3, 300, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } leptonica-1.86.0/prog/logicops_reg.c000066400000000000000000000144151506303110300173500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * logicops_reg.c * * Regression test for pixel-wise logical operations, both in-place and * generating new images. Implemented by rasterops. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test1.png"); /* pixInvert */ pix1 = pixInvert(NULL, pixs); pix2 = pixCreateTemplate(pixs); /* into pixd of same size */ pixInvert(pix2, pixs); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestComparePix(rp, pix1, pix2); /* 1 */ pix3 = pixRead("marge.jpg"); /* into pixd of different size */ pixInvert(pix3, pixs); regTestComparePix(rp, pix1, pix3); /* 2 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixOpenBrick(NULL, pixs, 1, 9); pix2 = pixDilateBrick(NULL, pixs, 1, 9); /* pixOr */ pix3 = pixCreateTemplate(pixs); pixOr(pix3, pixs, pix1); /* existing */ pix4 = pixOr(NULL, pixs, pix1); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ regTestComparePix(rp, pix3, pix4); /* 4 */ pixCopy(pix4, pix1); pixOr(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 5 */ pixDestroy(&pix3); pixDestroy(&pix4); pix3 = pixCreateTemplate(pixs); pixOr(pix3, pixs, pix2); /* existing */ pix4 = pixOr(NULL, pixs, pix2); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 6 */ regTestComparePix(rp, pix3, pix4); /* 7 */ pixCopy(pix4, pix2); pixOr(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 8 */ pixDestroy(&pix3); pixDestroy(&pix4); /* pixAnd */ pix3 = pixCreateTemplate(pixs); pixAnd(pix3, pixs, pix1); /* existing */ pix4 = pixAnd(NULL, pixs, pix1); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 9 */ regTestComparePix(rp, pix3, pix4); /* 10 */ pixCopy(pix4, pix1); pixAnd(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 11 */ pixDestroy(&pix3); pixDestroy(&pix4); pix3 = pixCreateTemplate(pixs); pixAnd(pix3, pixs, pix2); /* existing */ pix4 = pixAnd(NULL, pixs, pix2); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 12 */ regTestComparePix(rp, pix3, pix4); /* 13 */ pixCopy(pix4, pix2); pixAnd(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 14 */ pixDestroy(&pix3); pixDestroy(&pix4); /* pixXor */ pix3 = pixCreateTemplate(pixs); pixXor(pix3, pixs, pix1); /* existing */ pix4 = pixXor(NULL, pixs, pix1); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 15 */ regTestComparePix(rp, pix3, pix4); /* 16 */ pixCopy(pix4, pix1); pixXor(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 17 */ pixDestroy(&pix3); pixDestroy(&pix4); pix3 = pixCreateTemplate(pixs); pixXor(pix3, pixs, pix2); /* existing */ pix4 = pixXor(NULL, pixs, pix2); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 18 */ regTestComparePix(rp, pix3, pix4); /* 19 */ pixCopy(pix4, pix2); pixXor(pix4, pix4, pixs); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 20 */ pixDestroy(&pix3); pixDestroy(&pix4); /* pixSubtract */ pix3 = pixCreateTemplate(pixs); pixSubtract(pix3, pixs, pix1); /* existing */ pix4 = pixSubtract(NULL, pixs, pix1); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 21 */ regTestComparePix(rp, pix3, pix4); /* 22 */ pixCopy(pix4, pix1); pixSubtract(pix4, pixs, pix4); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 23 */ pixDestroy(&pix3); pixDestroy(&pix4); pix3 = pixCreateTemplate(pixs); pixSubtract(pix3, pixs, pix2); /* existing */ pix4 = pixSubtract(NULL, pixs, pix2); /* new */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 24 */ regTestComparePix(rp, pix3, pix4); /* 25 */ pixCopy(pix4, pix2); pixSubtract(pix4, pixs, pix4); /* in-place */ regTestComparePix(rp, pix3, pix4); /* 26 */ pixDestroy(&pix3); pixDestroy(&pix4); pix4 = pixRead("marge.jpg"); pixSubtract(pix4, pixs, pixs); /* subtract from itself; should be empty */ pix3 = pixCreateTemplate(pixs); regTestComparePix(rp, pix3, pix4); /* 27*/ pixDestroy(&pix3); pixDestroy(&pix4); pixSubtract(pixs, pixs, pixs); /* subtract from itself; should be empty */ pix3 = pixCreateTemplate(pixs); regTestComparePix(rp, pix3, pixs); /* 28*/ pixDestroy(&pix3); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); return regTestCleanup(rp); } leptonica-1.86.0/prog/lowaccess_reg.c000066400000000000000000000241211506303110300175070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * lowaccess_reg.c * * Test low-level accessors * * Note that the gnu C++ compiler: * * allows a non-void* ptr to be passed to a function f(void *ptr) * * forbids a void* ptr to be passed to a function f(non-void *ptr) * ('forbids' may be too strong: it issues a warning) * * For this reason, the l_getData*() and l_setData*() accessors * now take a (void *)lineptr, but internally cast to (l_uint32 *) * so that the addressing arithmetic works properly. * * By the same token, the GET_DATA_*() and SET_DATA_*() macro * accessors now cast the input ptr to (l_uint32 *) for 1, 2 and 4 bpp. * This allows them to take a (void *)lineptr. * * In this test, we reconstruct pixs in different ways, pretending * that it is composed of pixels of sizes 1, 2, 4, 8, 16 and 32 bpp. * We also add irrelevant high order bits to the values, testing that * masking is done properly depending on the pixel size. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void CompareResults(PIX *pixs, PIX *pix1, PIX *pix2, l_int32 count1, l_int32 count2, const char *descr, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 i, j, k, w, h, w2, w4, w8, w16, w32, wpl; l_int32 count1, count2, count3; l_uint32 val32, val1, val2; l_uint32 *data1, *line1, *data2, *line2; void **lines1, **linet1, **linet2; PIX *pixs, *pix1, *pix2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); pixGetDimensions(pixs, &w, &h, NULL); data1 = pixGetData(pixs); wpl = pixGetWpl(pixs); lines1 = pixGetLinePtrs(pixs, NULL); /* Get timing for the 3 different methods */ startTimer(); for (k = 0; k < 10; k++) { count1 = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (GET_DATA_BIT(lines1[i], j)) count1++; } } } lept_stderr("Time with line ptrs = %5.3f sec, count1 = %d\n", stopTimer(), count1); startTimer(); for (k = 0; k < 10; k++) { count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; for (j = 0; j < w; j++) { if (l_getDataBit(line1, j)) count2++; } } } lept_stderr("Time with l_get* = %5.3f sec, count2 = %d\n", stopTimer(), count2); startTimer(); for (k = 0; k < 10; k++) { count3 = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val32); count3 += val32; } } } lept_stderr("Time with pixGetPixel() = %5.3f sec, count3 = %d\n", stopTimer(), count3); pix1 = pixCreateTemplate(pixs); linet1 = pixGetLinePtrs(pix1, NULL); pix2 = pixCreateTemplate(pixs); data2 = pixGetData(pix2); linet2 = pixGetLinePtrs(pix2, NULL); /* ------------------------------------------------- */ /* Test different methods for 1 bpp */ /* ------------------------------------------------- */ count1 = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { val1 = GET_DATA_BIT(lines1[i], j); count1 += val1; if (val1) SET_DATA_BIT(linet1[i], j); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w; j++) { val2 = l_getDataBit(line1, j); count2 += val2; if (val2) l_setDataBit(line2, j); } } CompareResults(pixs, pix1, pix2, count1, count2, "1 bpp", rp); /* ------------------------------------------------- */ /* Test different methods for 2 bpp */ /* ------------------------------------------------- */ count1 = 0; w2 = w / 2; for (i = 0; i < h; i++) { for (j = 0; j < w2; j++) { val1 = GET_DATA_DIBIT(lines1[i], j); count1 += val1; val1 += 0xbbbbbbbc; SET_DATA_DIBIT(linet1[i], j, val1); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w2; j++) { val2 = l_getDataDibit(line1, j); count2 += val2; val2 += 0xbbbbbbbc; l_setDataDibit(line2, j, val2); } } CompareResults(pixs, pix1, pix2, count1, count2, "2 bpp", rp); /* ------------------------------------------------- */ /* Test different methods for 4 bpp */ /* ------------------------------------------------- */ count1 = 0; w4 = w / 4; for (i = 0; i < h; i++) { for (j = 0; j < w4; j++) { val1 = GET_DATA_QBIT(lines1[i], j); count1 += val1; val1 += 0xbbbbbbb0; SET_DATA_QBIT(linet1[i], j, val1); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w4; j++) { val2 = l_getDataQbit(line1, j); count2 += val2; val2 += 0xbbbbbbb0; l_setDataQbit(line2, j, val2); } } CompareResults(pixs, pix1, pix2, count1, count2, "4 bpp", rp); /* ------------------------------------------------- */ /* Test different methods for 8 bpp */ /* ------------------------------------------------- */ count1 = 0; w8 = w / 8; for (i = 0; i < h; i++) { for (j = 0; j < w8; j++) { val1 = GET_DATA_BYTE(lines1[i], j); count1 += val1; val1 += 0xbbbbbb00; SET_DATA_BYTE(linet1[i], j, val1); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w8; j++) { val2 = l_getDataByte(line1, j); count2 += val2; val2 += 0xbbbbbb00; l_setDataByte(line2, j, val2); } } CompareResults(pixs, pix1, pix2, count1, count2, "8 bpp", rp); /* ------------------------------------------------- */ /* Test different methods for 16 bpp */ /* ------------------------------------------------- */ count1 = 0; w16 = w / 16; for (i = 0; i < h; i++) { for (j = 0; j < w16; j++) { val1 = GET_DATA_TWO_BYTES(lines1[i], j); count1 += val1; val1 += 0xbbbb0000; SET_DATA_TWO_BYTES(linet1[i], j, val1); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w16; j++) { val2 = l_getDataTwoBytes(line1, j); count2 += val2; val2 += 0xbbbb0000; l_setDataTwoBytes(line2, j, val2); } } CompareResults(pixs, pix1, pix2, count1, count2, "16 bpp", rp); /* ------------------------------------------------- */ /* Test different methods for 32 bpp */ /* ------------------------------------------------- */ count1 = 0; w32 = w / 32; for (i = 0; i < h; i++) { for (j = 0; j < w32; j++) { val1 = GET_DATA_FOUR_BYTES(lines1[i], j); count1 += val1 & 0xfff; SET_DATA_FOUR_BYTES(linet1[i], j, val1); } } count2 = 0; for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w32; j++) { val2 = l_getDataFourBytes(line1, j); count2 += val2 & 0xfff; l_setDataFourBytes(line2, j, val2); } } CompareResults(pixs, pix1, pix2, count1, count2, "32 bpp", rp); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); lept_free(lines1); lept_free(linet1); lept_free(linet2); return regTestCleanup(rp); } static void CompareResults(PIX *pixs, PIX *pix1, PIX *pix2, l_int32 count1, l_int32 count2, const char *descr, L_REGPARAMS *rp) { lept_stderr("Compare set: %s; index starts at %d\n", descr, rp->index + 1); regTestComparePix(rp, pixs, pix1); regTestComparePix(rp, pixs, pix2); regTestCompareValues(rp, count1, count2, 1); pixClearAll(pix1); pixClearAll(pix2); } leptonica-1.86.0/prog/lowsat_reg.c000066400000000000000000000101471506303110300170400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * lowsat_reg.c * * Testing functions that identify and modify image pixels that * have low saturation (i.e., are essentially gray). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, wpl, val; l_uint32 gray32; l_uint32 *data, *line; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/lowsat"); pixa = pixaCreate(0); pix1 = pixRead("zier.jpg"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); pixaAddPix(pixa, pix1, L_INSERT); /* Embed the image in a varying gray background */ pix2 = pixCreate(400, 580, 32); data = pixGetData(pix2); wpl = pixGetWpl(pix2); for (i = 0; i < 580; i++) { line = data + i * wpl; val = 150 + 50 * i / 580; for (j = 0; j < 400; j++) { composeRGBPixel(val, val, val, &gray32); line[j] = gray32; } } pixRasterop(pix2, 70, 90, 270, 400, PIX_SRC, pix1, 0, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix2, L_COPY); pixDisplayWithTitle(pix2, 300, 100, NULL, rp->display); /* Darken the gray pixels, leaving most of the * the others unaffected. */ pix3 = pixDarkenGray(NULL, pix2, 220, 10); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix3, L_COPY); pixDisplayWithTitle(pix3, 700, 100, "gray pixels are black", rp->display); /* We can also generate a mask over the gray pixels, * eliminating noise from very dark pixels morphologically. */ pix4 = pixMaskOverGrayPixels(pix2, 220, 10); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 3 */ pixaAddPix(pixa, pix4, L_INSERT); pixDisplayWithTitle(pix4, 1100, 100, "mask over gray pixels", rp->display); pix5 = pixMorphSequence(pix4, "o20.20", 0); /* remove noise */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 4 */ pixaAddPix(pixa, pix5, L_COPY); pixDisplayWithTitle(pix5, 1500, 100, "clean mask over gray", rp->display); pixInvert(pix5, pix5); pix6 = pixConvertTo32(pix5); pix7 = pixAddRGB(pix2, pix6); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix7, L_INSERT); pixDisplayWithTitle(pix7, 1900, 100, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix5); pixDestroy(&pix6); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/lucasta-frag.jpg000066400000000000000000001530711506303110300176050ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā _Ė˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷Ē(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ž'âo'đW‡cŊĩXÚâYDhgëÅox[YūßđåžŖÆéŖąëŠØĸŠ(ĸŠ+ƒø“ãû[Ųĩžž.Ūä°Ébã˙×üëĒĐ57Ö4+=BH -&xƒÂdÜxv/ą4Ļ8fiš“ßŊ'KŧmCJĩŧtØĶDŽWĶ"­ŅHHPI8’jĸj]ŲK>œņܔČP­ÁaÛ5į:ÄŨ^˙ĮŅøf˙HKY2wáŗÚŊJŠ(ĸŠæ|E?‹ō4Đ­ŦŪÜŽ^I›}1\ ?|Uuâãá˜4[C¨!!ˇČ@ãŋŌŊ7ÃīŽŊŦ¯GkåžEļbWoãŪĩčĸŠ(ĸŠĘšmV-^Yl¤!]p2ž§ÖĩkĖž x÷Ä~ ˜ÎēTiÍ Ž9‹ōIö¯AŌnŪ˙H´ģ‘BŧŅ+: ŠšEQHHPI8’kĖ5īŠVĐꆕio6•a'•%ĎA‘ŗŒ(ŽĪÁū$Å~ˇÕcŒĮæd2ÄVírēũ÷‹āÔŧŊLĩžĶhũä˛í9īÅpZwÄ˙j^+ÅŖZ-ėD‰7šĀĮ¸ŽŸ[ņWŠ|-cũŖĒiVŗÚ'úÃm!%}ųŽŖÃ^#ąņNĨ`ûŖ~wSÜVÅW+ã}cÄšoôk.ĸ…įWl0ŌĢü<ņ}ߋü.úĨÕēE"ģ(X탊ČđoÄ{˙xÖûD¸Ķ|˜`VPcߊôš(ĸŠ(ĸŠ*ļĄ¨ZévR^^˰ÛĮÎĮRÛĪÔ <.)åaЊ’Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧWâū™7‹ulíd|iVĻfUîįˇåV>kqĄ\i6ŲžEĪA^ŋ,Š/,ŒK1=€Ž%ž(ih’Ü5đ˛N—~Q1ˇž}+Ŗđįˆ-Úũ Īdaˇ?LõŽkâߍ4ũÃzkĖßÚqė‰rū#íGÃčŗčzf‡øŸRōw:'9>ßŌŊŠķā†÷Dã‰c#?ī ¯ā˙čēG…4›+‰$b–ëæID¤| 3^k}m{eäĢ@ëš_´¸š!4ŗy ļY"Œ˛!÷`1]&›ŠÚjÖQŨŲL˛Ã ʰĢtV6Ŋâ+Ñ+j!]øH”eÜûTô/iíŅ´‰¤‚č ųĄGĮĐÔ!ø‡ĸxbôÚęo,MŒ†ōÎĶô8¨'øŖá‹kx'žâá#¸Mņ1ˇ|8Î8㚛Wø‹ĸhC=âŨ$(eĀv€zdÔMņ3AūËļÔcS[ÎH %ļãŠ8č>ĩŅčú͆ģ§ĨöŸ:ÍđzÖ6ĄņÃÚv ÖRŨI$ÉĞDM"Įūņ?ŪĶõ+MRÍ.ŦįIĄnŒ§"ą5hÚ>Ĩũ#Í=Đx­ĸi }ŖŠšmâ&īH›SŠčxFdČå}ˆõ¯/đtkø’ūęåĄ{ųãŽÚ#“¸Ž‰âŊ_Y×´íŨfÔ. äˆÔũį>€wŦÍÆúNĩvmÉouŒˆgBŒÃÔZ:׈4ũŨfž›isļ8Ônw>€MyÆm^ ÃVFæáē’T*Ã#¸¯cŅWn‰d ŒTqôĢôWã¯éžĶî"›Ė–øÄLpĒŽĨą€+˜øAâŊ5ôKMMėĖîÃaĀ9'¯JÍš–?ÚkŠ™c†+]ō;pkŌt˙č–ĸļ^pŲÚ˛)]ßLõ­}KS´Ō,%Ŋž™aˇ‰w35sVŋt;‰!}ĻÚ9Ž"’xYUū„Žk¯VWPĘÁ”ô"–Š+ô{e“öƒŊ¸FČ]ۇ\ öų$HŖi$`¨Ŗ$žÕÉËņDG-ŨMn§ s$Æ~kvį\Ķ­tfÕ¤šSb9•~aƒßŠÍƒĮ~ēŌŽ5;{ī6ÖŨ‚Čꇂ{bĮ:ˆ^é4Ûŗ3ZŽųFŌ0?ČŦģ/ŠžŊÕßNķe†DVfiP¨}jíŸÄ-÷íž\ԃf7L­ Ž:ŌY|GđÅũ¤÷0_å 8(Aôõ­]ÄÚOˆcfĶnÖR‡ ~ĸ™ŽxŸMđ˙–ˇ’;M'ú¸bBî߀ĒzŽtmzųėmä’+ĩäÁ2í|z⚏' ļÁûbqõŽŪËTĩŌü#e{y ŠļLŸ^;U~!č2Áæ<“BwLj匪6぀z×TŦ„dRÔ—–Ö¯sw2C ŗšĀÎ[üBĐne@’Ė!‘ļ¤īTcėM'ŧUĨčZ,ŅŨ^§¸…„ä˙NkĖžßøbį­áínE’ęöčūāŠË͚öŨ3LŗŌ,c˛ąaˇîĸЎEx?„@‹ãŪ˛f8r’xƒŠô?‰^"ĶôĪj1És žhY#‹!‹íX´ë­ Ā÷:™ō#šS2‰8 ¸ë“[÷´+r$hîÍĻv›¯%ŧ¯Îē+zĘßC:ē—š×nđb]ďĨrúoŏj&éUæ‰íņš$L3q€:šĩuâ}/Äū ÖgĶgŪąÛČŽ`ŠÁāŠįū ÜEÃÉ'rŪ\r9`pz éŧ9âī kZŊŖ‘ÅâŠiA‡aüjæŗâí7E¸û4žl÷[wy0!f›áĪé>&yb˛‘„ņ<.0Ëõ™Ģ|Qđæ‹ŠžŸ}4ŅΏ°)ˆĪ×ķņ7ÃBõ-ÍĶ…sĩf(|˛ŪēÎŦk?4-čAu4Ā,ŅÆYTR:VūŸ¨Úę–QŪYʲÁ ʰ5Íęŋ,l59tû[+ŊFæõĢj›‚}M^Ķ|a§jēÆŠj%uˇČ–ŋŧB:‚=k#Mø­áRiâ‚y•árŧD1>€zÖž‡ãMÄRÚYÎâæ/ŋ ¨Q‡ākÍ>3øæŌ.<=kūkJĢ,…ĐÎõāWYđķÆ–Zŧú­ĨŌŊ˛î–Eœ īčĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸН}wŒ×Rœ$HXūŧģÂļž*ÔíĩJ(4ķoŠģ033oÛĐLb¸Ÿ´žø´ú=āÚn_a*pŧō1_AkEsŖ^Á<ž\O +žqŽĩķúkŪ'đn†úUöũĄŖ:Ŗ’"Ncį#=zÂ]OLŊđ\0éŦáaf Ž0ČIÎ w•Ę$–Ō,ŠŦĨNCt¯ø=ŖÚOã?]É äF1Āį°üi,tģYh ëpŋšE2›°?ÆŦüI…,ž+xb樈ĨfUmœdŠŲøņĢí]˙jO˜ŽƒœÕī ¨ž Čļ ‹fģBđ@ū,~Ŧ}<[Åđ ĨØ ũ™ŠõÉ}zæĒü0đ=ŽąáŨ'[ÔÖUŧļvhpg‚}zUmVĶíß!„ē2Ü õš?ũUŸ éVüŠ"ˆË%†÷8É'nkËôO_Y|ÕŌ)Ye†"=AôÉŽĮĀ—QÁđÖŪŅtK̉."mōˆƒ+“ß'¯Z> ØëúMæŖeŠŲĪok¸ŧ"Osõ¯`ĸžxļ×.5?Ž×r^ŲOx,Ųã‚ĀŽ•ąã(ĩŨOÆzˇĻx~îØÛ>ÉËm—#āō:ũ3^ã_ YøŗÂ——{Ė{ÖRĘĀuÍy׊íüGåXkFķč‡Ëˇ‚AˁŽ}¸ü+ŧøŖoü4Ö¸ ˛ßrāÄÆøGĻ@Ÿ `gPâtvm˜uŽáቝtŸxÂÖ.>ČâŪxBIŌü1Ôã˛đJ™t;Û™Žä–háŪ=ũũ*/ŪxƒÂš/ŠŽ.Ŧ'ﺌIqf’¯Brp+GāõĢę Ôu# –ūúW&wųžo­MđįÁÚցŋ.ŋ*K%ŅfîŨœQø;6›¯^^A •ÔX†}ÁũSÕõ“Šüq‚ŪâŅīm´øKC @œ}ī~ŋį"´ ūąūÔV[ĩ]ŽäŒWIQ\ÜGik-ĖĮąØúÍr~ø“ĄøģTŸO͌žt@ąÜ8 wÁxnęOø_zĩ˛˛´D8õÂūuÔühÖî´ČļŽÉ%ÜĸÃ˛žOč1øÖ§…l-Ã;Ke $MfKdu;yŽ'áü—ž×ôû—ojîw;F:UīļĐËāëá$JCŨ89ČŦ˙…1ĀŋŧX°ĒˆÄ›BÁ5[YŌmo~?Ų[• Ĩ|Ö ĐáOô¯FĶŧ §i^"Õ5Đí$רUŖeT}? ķĪ„:]ĩĮ|IxŅ)ķ‘‘Â’O UŊůíŠÁ )ļĮz/œiŪ6†+ŠÚVĻ5†… öĐŧŒ3ĐCũ+;TÛ㎋pm^͞LnÃ-Á98öˇņĘxn|c,$C|]9 _ņÅĩä˙4ŗ§˛ĩÜ-‘ÄÜyĨFqúWŠxũ5´ĩļņ.‹.qopꘃ^ų§ŨE{§ÛÜĀûâ‘+zŠŗ^7ņĪRšŖiģĨŊĖ Ęš ×Uãģ-ūŪĮ$~M (@ŠÄđ]ā×ūÉu¨Ä’Īk ‘,Ž2FŅÔgÁm¯ü15åÅŦMuĶbFPHúõŠ(¯›ôkXuoWöˇ í *œ9˙Ö¯iļø{á‹iÄ˙Ų‘Ë 9rdÁõŠĶîî/Qbēž˜Ėđ â<ô•vÕKVšæ *æK;sqpėˆ¯ øw¤øÃÂē–§=·¤ežž7—ž4izOŒâø›/‰fđķ‹yÆÖÎ\ëœŌøÃEņnŋã+YˇĐEbápdŒōy5ˇņ^Į\ņ…“eĨI)ĘLķîU‡QMņf¯Ēhŋ´Ųf˛–8ÖEŽņüÂ?ūšŽˆ>´ĩ6K§ębÄĩfĖmīƒÎ3Û8âŊ‡Āž0ŅZŋ‡õ]&ūæ(˜ũškh÷‡\÷>ĩÕi:Ÿˆ ÕnĩˆžŪÚū#6’™Ôûšä|7&ŗđļÖīFŸEŊÔ-šRöŗ[&āŲõôŽŗÂúnš{wŠëÚŌ›iobōíė÷dB˜ã>æ¸ Úkúŋ†“vĶ^Ũ1[ŋ/÷a[;ģV÷‰ŧ'Šh&Ķü[ĸĀ×rAÃsnŖįuÆ2+vÛÄz÷ˆŽ ĩ´Ņîtøˇqsp6á{…ÎOųÍdxĮÂú…Žl|cĨ[Iu南0Gå}G­`üFĶŧQãk;Ë]*hmíĨmۉã’Gaí]ũ•ÆŊŠøâ4˛“OÕVK)'kŒø77ˆĄÖõ7\žIŧ€§æ}ÛX“ßđũkØĢ–ø‡Ą]ø“ÁWúeŽß´H@ĮāįÄø:Īį§iÚdöVúcyŗĖī;qÔŦÖ>&ƒâœž,\ũDŠšKcHĪž?‡Ä>#ņsk \‹k ‹1bš~{ úV˙<-uâí/LÖ-- VŎĮœʛ˙ ¯ˆī­×K´đÅė:ƒ(Ĩ˜b48Á9ÚøoJ“EĐ­ėϘÍ2‚Ō9îĮ“ZĩWS˛MKKēą“ÄŅ’:āŒW‘xGÃ2ü>žšhP>ūŧWSão EâĪ Üé¯Ä„n…ŗŽ:â´Í_Ä:O†—ÃGÃˇ˛]ŦMs ũŲ=Īa]€| <1áYŦŽúeØ&áĪ$tČø2/ø(jzč—7+5ÃiŗˆĀ=Ífü:´×ü=ņT{í&æUŧŠœ&rOÕvīOņR|U‹Å+áۇļD1„W]Äcëī^ĩ¨^\ÛhĪu”“O°ŗĄ˛{~æŸ4Í@ÔõĢģŨ xÅüÆdsŸĘ™ĸh~#oŒ2ø†īGš )ã1îfSŗŒäķíĘ Öü;¯i??á(‡K}J͆FFcČĮķÖ˛üSŖxĩ|wiâ‘ĻKqž2‹|ų@‚?žj׉ü7âÍKÁZV‡m¤<˛Ã"ÜK6đyųFOŊt!ąņ6­á¯ÛÚiōZ_Cv÷B¨^I#ˇjąâ…š×­%đúč5ŅPŋm1-O÷‡zíô-=´­ ĘÁÛs[ÄˇŠĄ\ÅÍâ]" ‹8÷ŪØÉæÆŖøąÎ+Ä:öŠâß YhˇąŪ\ŠâIc*‘tÉĪz؟F“Á˙BĶté¯e’‰üŦgqąúšįūEŽøfĄęZÜiL†vÆÕâŊ~Šå|GâKFÔÖĪÃ×z‚˛î2Å÷Gĩy—ĄxžÃâCø­ŧ=*Å$ŒÆ%e$+Û*Ņ> jzÅ΅3A¨;†ĻOé^:mZãÃwNš÷S]ÄŅą  #暯†–˙„<3.™¨h˛™" *´lōz(į­dxcHņ>‘ņû[¸Đ¤j-ŗ`>X'Šįĩ>xƒÃ5]n--ĩ(oî\6 “õ=P¸đΊŦŧ]6Ĩ”gmBŨŖy†"f==p\ø‹ x‹PmËNŌ%šŽÃl"°äŽŖ“V|xž(ņ?ƒŖĶ#đÕĖs>7–‘~\} 늞ÖįÄV_ ĶE_ Ü5ȡû1Ëîãw^•ÂŊ'TĶt[ŸkL°$ÁĨaōœŽ”íJņËÛģ[ &]WL™Ė‘ÜLö9ŽJoÜ\Ükš–žcxã1ÚØŦƒqĪR{W+āũÄڍĩmVãÃō­ļ û‚¤¨Û:õæ¨Ūiž$ŏá˓kØ# zdĪķ­˙ŠžÕŧQ¤iwēmšûẺL$åž”xcOņģâûM{Yą6öVæĄ-’ÍĀÍzuQEQEQEQEQEQEQEQ^]ņ=5C­čîÖōĪ #îŧH×vqĶ8íœVŠøŗáøˆ@ÆĖŋęšNN•—đīLYüiĢkÚe¤–Z,҈áFBĸSũā; õJ(ĸŠ(īE˜Î9õĨĸŠ(ĸŠķŒZömāOJ’éöh”ŦYį‡4|ÖôŲü§éiwž‰øsķũ+Ņé ƒÔKEQEV~ˇŖqĨË—4PŨ>É(ČQÜûÕO xrßÃļ-9–âVß<ī÷¤cԚÛĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŖQEQEQEQEQEQEQEQEQHČŽ0ĘÄf¨˙béži“ėūaęŪXÍ]HŌ5 ˆĒŖ QNĸŠ(ĸŠ(ĸŠ(ĸŠ(Ē—VŸw7seo4˜Æų# qõ5Ļ…ĨXŨĩÕĨ„NÃã@¤ūUĄEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁxÃâRxFņáŸGŧ–5ķ‘>OĪĩtņ4,ĐaÕ-âhÖNĒŨ?ÄŪ$ˇđž™öë›{‰ãŨˇl ¸ŠÄđwÄŊ+ƚ„öv0\E$#syŖU›ßˆz%Šãđė’1ŧsŽúWYYúÖŗi i3ęWŦËo îrŖ'JĘđ‡ô¯ÚKqĻ6ÄÛXH0Et´QEW3âĪéžH_RŠäĮ/ņÅe_ŠĢ^ņ^âũ,ęaĀaķiĪ_ëZw÷‰§ØOw"ģ¤(XĒ ąö¸Ŋ/âÎ…ĢøŠßEļ‚ė\ĖHũä{v3ƒ[~-ņĻ“āË(ŽuG|JÛQc\“īZÚ^ĨoŦi–ú…Ŗ‚t„ŽÕršėÎp “ŠķëoŒZÆŋŒm¯ĸē’_-D‘`gķ¯CĸŠ(ĸŠ(ĸІîę;+9ŽĨŨå…ÛhÉĀāW |RĐ|G­Ž“fˇ+tŲųdŒŽ;×oEQEQEQEQEgëZŦz.™%ô°Ë2&>H—s ŽkÃôĪëŗi6ļˇ0ÜDĨ›Î\cÕÚŅEQEQEQTu^ĪBŌæÔoåōíâfĒ^ņV›âÍ9¯´ÉâVÚۆ5ˇEQEVfģŽØøwL’˙P—dKĀĢA\î™ņ'Mžņ:5ŭŝÔĘ%›0<ƒĮJí Ā'Ō¸{ŋˆ­§ĩÃ]xQX!b<М;ÖUŸÆK]WxŌ´Níáŧ¸ō×+Đ4{ų5M* Ém¤ļy&)~ĸ¯QEQEQEQEQEQECR×4Ŋ=úũŊ˛˙ĶW§ęÚ~­›aw Âw1ļqTõčz‚=KQ‚ ?¸ÍĪåWtíVÃWˇé÷q\EũčÛ8¨5oiZ•ũĨ} ˇšpžcc4û]sKž`ļˇöō’ģ€W=kĖž"xâŲŧGĸhúvĻŠū”¯rŅÉō…Ą#üņ^ĄĻęv:¤ėnášT;YĸmĀJģUoõ+-.ÜÜ_\Įoęō ŠaâmS“ËąÔíŽŌ7É­î!ĩ…ĻžEŽ5äŗ^sņÄ>ąđ˙V]>öŪâUāw̟Fß†Ö Ā –üŗ]=ΡŖK$–/jĶ‘)˜žÜW“ü …cøâuERŠ#Ūۏč2økÂ3øŦk2_UŨŒų™ä{zÖoÄ˙Á¤éļ–1^ˆo.nP ­† 'é]Å։ŠčŸeŊŧˇ’ŨĐ$™N=jh>Đm'‡@ųnû¤(Ûš­mCXĶ´¤{ ˛“€dlf¤ŗÔlõ QsgsĐãFČĸ=NÆS„ŧŽq æ¤KĢy[lsÄíœa\Nšh­âif‘cFK1ĀJ×_Ō/gōmui¤ūęH ŦßÃūÖ‘‡Ûjädt8ę+‘ø ~†É%îœū_ŌŊ@€FzđŨB?im?bĒ€›°Ŗ¯ČG5é~2đĮ‡ŧOo ž¸á|Ļ܄I´ŠÛŌl­4í*ÚÎĮeŠ0ąāį­+ęÚ|wbÕī!YÉĮ–\gōŠ õĒÎ kˆÄ¤gi` x¯í"|4aEGĢ;×ŊžNÆyĖ1]Âō¯T3ųUë–zwywp°…Œ…ĪRq°~ęĻ÷Á–/w¨,÷s–|3åąšî)ŽévUQÉ,pEo{kvX[ÜE.ŪģS.5;IDWpÅ!ÚîÅ,š…”ED—PĄģšĀÍX C)„R×'ņÄöžđĩķŊâÃvđ•…C|ۈãŠgÝ@]x7LKĢ՞öHDŽōĮ<˙õŋ áíí-­h‰La#QmģĻqÍ{W–ĶČŅÃqŽŊB°$TĖęŠY˜*ޤœTmĩ­2ōs ĩôĘ6Ŗ‚jũQšÖtÛ9Œ77ÖđĘJŧ€=i’kúDEš•Ē>čiÍh++¨e ƒĐŠČÔŧSĸi3ou"”˙qŸĘ¯iYũ…oMÄbŲ€"BÜsŌĢAâ-æf‡RļxáæF0ŋZž-VÂk{ä-j:ĘmGšĨÜ xoíäB@ Ž$ôfîöÚžęt†%–vĀĒo‰ô]^O*ĮQ‚i?¸­ÍXģÖ´Ëŧ›Ģč!—ƒąÜĪN)§\ŌÃ*›ûpÍĐoÕđCA„VTū'Đíg0MĒZ¤ í*\g>•Ļ’G<{‘•Đ÷ ׇø% üy×r V<+Üé“MŧM,ލŠ2Y˛,ŧ[Ąj7­iiŠÛË:õUpkZ{ˆmĄi§‘cFK1ĀBËÄ:>Ŗ)ŠĪQˇĮPœTˇzΛa:Ãw{ 2ˇEvÁ4>ŗĻđģß@Ģ ĘānúU—š‚;spōĸÂâäācëUāÕôë æ Ø$2Å\zšŪöÚė1ˇž9BđJ6jIϊŪ–i8Ôe™ŽĒ>!Ō5)Ė6ZŧōŽĒ“VfÔ,íįÍur‘ŒāS[S°X÷ĩä=LƒOZ´Ō6]ū ÖĄ6ĪΧæ˙ŗÔE|?Š;MĮë^ÍHΨ…Ũ‚¨ä’pbCã }HØGŠB̓Œã?ZŅŧÕ,4äWŧģ†ēdp3PčæœjVžRüÁ€OASYęļ†˙ąŪC>Î[ËpqY÷ž1đũ…Øĩ¸ÔāIIÚWvvŸJסš†îžŪU–'WSjZ(ĸŠ(ĸŠ(ĸŠ(ĸąüQŦ`xn÷RÛšĄŒ•_S^/đēĖ|A×õ]k_ÛzņGƒ(3Û´|5câ+OŠs$iĶ´´B¸ĀéU“FÔāņŽŠ>ŧ-ü‰ÉōZLHāv ŋ§JÂ÷wÅ=_Mļ2ĮdŅXÜį§'õĢŋĩ8|9ņ -SWŌžûM’ÜF¤ Á=ÖŖđeׅĩIy¤Ũ,0ÍÖ´“ ŒÖOŠ|-ĄŒV™¤IjëēD°sŸĘŊˇCĐtŸ[ÉiĨ@FÍŊ‘Ny­Zō_‹ú~Ģ=ū“un`k_3$îžG\ņ\ŸŒgĶ,üWáģŨ¤É"Į#B¸FéŸc]'Æ/\Įĸ@˙-망î8˙ŗņ3Ãļv? Ĩ’Î4ŠHã]ÎŖĮi4=eü?đ+øq戊ĻņS|2đæŸ¨øj7–é5ÕŪ÷yXÛŗ×8úVWÁ˜RÛÅ>$ŠE&u˜Žãč ĮõĒž Ō­ô¯Ž:Hĩ%œđOĶĨ'Æ]N‹ÄZ5Áƒ2Ū܁3ääŒô¯@˙„3Ö>ēļŠŌ0˛Ãæ4R9?62ŽGjå~–‡Ãš¤ąNã'Øđdž/ˆū-ÖõMnqmnūU´OĘĸįˇšãŸ­-ĩĐđ‡Å÷đå¸)¤_D6ĀŊ°ÁĀü+›ņ†MøŊaĻisĪ W$Ų!ČÉÁĮĨk|AŅĄđģ Ūč42O0I°ėCō:ķ]OÅČ5Ģ˙ é§M_2#"=ĖGŖŒgÛ=~ĸ¸¯#MĶtMKBÛęŅKœÚ‘´gīŽ#ô¯\ņ]Û?Ã{ûŒn/dsŸ÷kŸø |:ˇaŸšG?øņ¯K¯ž@ŋ´•“p3~ŋ)Ģ˙´ģqáaĢ eŧIR?1[.zWC6¯sáīƒëŠ@ĻKˆ,AL ōGđÎ ä<#áÛ][áŒúūĸÆ]Jd’ctĖKšÆ=:V/ƒ4-kĮkeâ¨2]ŲŨ„–V<˜×ëÉ?…XøŠ ķ|VđõŊŧ„NņÃČĪSWū'ø~ĪÂ.‘Ģi‹kØîK*pĪ‘ÎãßĨk|OŌėõ†rkWq´—il…77ʤûtÍ[ø_āũ ĪÃúFē‘$īiN2G8+ŌëĮ5íwūī‹–~v+ĻZĶĸœyĖp}ēqOņéļøsĢhÚļŽ‹m Ķyw0§G_\zŽj߯M6ĮQđ)ÖUn“cG/BAíŸÆĄ—Á֓ü(ūĐēRú˜ą‰ē23ūy­ßƒúĨÖŠāKwē˜ĖŅąŒ;u īĢĘž7hZtžŸU{m÷ے4”ąųF{~UĐü?𮑤čfĄkj‰y-Ēy“rāšãõ[+=Sã™ļW>c[*NĒHųqœäw¨üeeƒū"øb]›džĮqąÃ€@äwëWū*xŠoøH´o ¤ÍŊäŠ×.§Ļyü ü+;â4zV›ĄZßxZ𕔍ÅíԂWßkÔŧ-ĒļĩáĢ ÷R¯,JX\s\7Ɲ Æ_ \ę‹ ­ō•Q(ā‘œbĢxÁzuĪÃX¯u8…ÅäļŦVVÆbPĐŋŨíœwĒžņŧö˙u‰nå“N.ˆÍéŽ*¯ÃÛ­ãÂ×wšáûNĄ~ėō4‘—#=qŌŽü3¸7ōëŪŧĩšm1$2@ŌŠÆÜ“€HÁŦO‡~Kīø’ÉŖÛg3, >RŲ!IĀĮJšĢxORđGƒ1qBŅoÅÅĖQį?Cė C¯á?kZ3hî4ۘnŌI`pP8Ļ1‚•køķP“^ø•ĸx]ܭЏštĮc$ę8ũjĪÅhm|%Ąé篕 Vˇ6ˇK†EÆõĮ ã­c|\ŽĪUđ—â![›ƒĢ^"đŽcđzMKËi/Ö”\8ÂēßęzßÂXfYs~öínįø€Ā&¸­LŽę–> ŽÖkôWd1aØ3–#§į]—ÁĢۛĪÃö—whäe]ŪĢ“[Ü|o×ŪUd‹k(­zåx×ÅÍzęëÄú?„m¤–(ޤCpȨܤôĒßü3¨iįFĩ𾌩ĩÔŧđ&põaÛëVüuy}Ģø“ÞšB°LŠ-Ū8,Î?jĮÅ*ĪÂ~ąÕ´ˆc´¸ĩšL´këÜgÄxô˙|-OyšFVN˙1ņëLŅ|)e/ÂC¨ęoE‘‘$cĖ|dcų֯™›Äß ž­™Đ1‰ˇ“’+’đ?…-§ø…â 0Ë7ö\N3s‡Į!IôöīZ6° |oĩŌôĻōŦ¯c˰įåčO׊_‰~%kĪé^–f‡M%eģÚy“ž͊‡âū‘ĻZéWžˆ Û[…čņ`•îšėüKá+/xX^ŧ5mÃG)Č(q^_ā*ßÅ6Ģá[äŨX\—¸`Øg\đ§ŊzΉ|+ĨĮā;>(6Ck +čظĩŠé‘ez0,¯wĻČū\N˙Ũ׉x.TņįÄũbķVAq’뎅ųEäķ^*Æ­zž øŊeglžVŸ¨Å‡‰xBIĮOĘŗū'xWFĶŧSáČ­lÕöäųĮ<œ‘Įķ¯cĐü?ĻøvŅ­ôËu†7;˜æĩ+›ņņaā]`Ģ˙F|ûņ\/ėú§ū;įnŋiĮé^ĩq2[[É<‡ –cė+Į>$øōMGÁzöbÉn59Œ`“É@qŸÆˇõ˙ éēÃ9ŪÚ8îm­DË2¨ ¸sžšĒō>$|.dÔ!]蕞ōˇ¨5Í|=ûø/\Ņ/Ŧã76ÎČ/Ė[ŋÎēVÎÛáŸÂû‹‹ļßKĢHO%Ûü3úVg‚fđúxh[´÷×(Í#<%Øą˙kgá&ą§hšÔ:´3ĮibæH™Đįg Í^—ãˇ…Ŗb.Ÿp•ĢāīˆÚoõŠbĶÅÄBŪ"Y$čŲī]ŨQEQEQE“âm kžŧ͏ĖČBįĻ{WŠü,ŋ‡áî¯Ģé~%-c#>ßî6PkŅŖņ]Ήuä‹ÃŽŌiđ!3܅ų˙t×đ¯<đŽ´toëW^(ĩ¸kã)XwFĖ:āmĒ–3Īgņ7TšÔíîí˙´bÍŋ–ŒXäŽ:tāWa¨jsé~3–=CO’ķHû4bRc,¨Øęj‚iÕŧuĨ]øZܤˆûîåJ _Cؚ­ņ°ū.izŨĀ”Y,GtI pÄWcā+ë­w\ÖuˇYVÎbąÛČN=ëŋ¯øŧˇņøãK¸ž†yt4e.¨¤¯œâą~!kûSŅ5[+ GŗqļQ]ŨúĨiøŸHŋņ…´˙Ak9–ŪråXŪV}? Ķøã1â/Χčö— ™Ü!Ä`vúö¤đx‹Æî<6‹$wEÔŠwlzŽ•ká˙‹ĄŅ<$Ūē†oí{bŅGlą’ÎI8ĮˇøVÂ]FM'ĮÅžŽ˛Å=ԇ['ŒúUëvŌ|`Ķ5–Wĩ´'FÄéZ§Üø_VD‘ė#œHä/AžĻĩÅ6W×ÚÂy‡O[AnŒüíŽŪŊk3ā•ėqŲę:4É,rĪ3Čã# ŽŧûRx=āøuãMrÃTc•Ûyļō¸Âã>ĩ-Žž1ø“LÕ/4(ė§YZÃČĘ ØŧœTŸ¯¯.ôīÜÛũĻM)ö# c¯~™Ŧ‰Z–ŸĒø{IĩØYH¯s4P‘ņÂįįŠę¤ņ^ü:Ö¯'•ÚÆHĖ6ŠŨđ8ZģđCUĩ>ƒK2âņ 1Œƒ3˙ׯO¸¸ŽÖÚK‰›lqŠf8č+įųüM§ÉņÆ/n—û5ËķÚ2qŠę>7ëw>‚ŌŨĖ×K‰rvį9"´æņ>ŸiđžŪLÄņ4Ik ”‹žīa\öwi¤øU´ŧY¤ >Ea¸rā1ÉŸzô?Ųhzo‡"´ĐŽ#ž$´ŠĀ–näזxëQ´¸øÃŖŪ'šđYŗH¨HŒôę*īÆŋØk>ą´ĶåyĨ+#F¨sˇŪņlŋÛ˙f:P3˛Â™`åpXb˛<7­[kZ…49îbt{€QČoÆŊžŧOPŌ×Â_`ÖîŋwĻ߆ũûŸ•Ž„öįųԟĘxįXŅŤƝŊáÁ ˜\m>§5Íiúͤŋ¯uŨö/'Él8-ųôĻüZ×a˙„ëÃB7&9w܇äƒ×įĢņНKDņĨŒslžxU$ˆķ×Đ^ü@Đ%ĶJi/¯æbļŠ<–o@=k­Ņ#ģ‹Fĩ[ī/í[Fģ@cÔbšŒĖWáÅî Ŋ'ØÖ…Åô'Ų.-\Ŧr<|:įŒryŽģLņ;]hk’Föē4qí€ŧGt‡ûøÆq\'q#ņŽŊ%ÜsB/æĖD#pĪØ|FÖu .ûDK($šI%o:\†@9${ âüO„ĩģÛC°xõ֑LQC ¯‘×1õ­Oh7ZWŠt/my#…DwEvŒc'z­ņUˇø‰oĻč>vģ•įLcBŊ cÛŊ7âÔÚøGJđŨœKhŅä$d€€cŽ1WügâK;¯†i°Gr÷3AąBŲāũ+;ÃWˇ7?Ž´Ŋ5nSļ…ˇ ¤2’O•gøGQķ>]h–v“ļģ:8•¤CÔõb~˜­o„ž%:f‰ũ•ug*}ī<Œ¤*xūĨdx3]ˇĩøĩĢęw),v—§d.Ņ‘ģœÎŊöŧwâ΃w‰ôÛ@ōĮfëįlĀ9ĮĶ5ģ}ņ*ĪU˛†ĮÃ˛ŊÎĢt¨E˙V{ŗĀ­døãBŧĶ|Q x¤™'Ž× xę9xÕO‰íˇŽė,<= 珚uyų5ĄņÆ=á Z1ŧŽDq" ,IR Š-ŧO§„˙b 0¸[3måųMûztĒ˙Ž›Lđ=ÚßC4_gģ—B8Ŧŋø’ÚˆZũÅĀx­¯ĨC´do<˙õŋÉĒzžŊk/ĮXoûēmiJƒž~¤VĪÄ= [OhŪ4ĩˇk‹T+ö€$.:ãņŽ’įĮz-ÍŦpčÖËw¨Î6ÅÃ÷Iîr8ĮZ¯â߈1xgN‹LËKĢē…uHČ ŸâācŊyžŊäx_ÄÚ/ˆt)ĨšyTĨ I|œ–<{×Ŧę~,Ķõ_j7ļîė 6CxÅrŸŖSøsĄ8hî HH 185Ã;Ø| um \˜[4SŸ…‘ŧūŊ?Áš;ku¯JŒ–(Ė $rø~œVn•¯@>4ß긙l%h“aÁéüęÄ-jÛQøĸ^B${;GC,žYÂáŗš÷m3SļÕė#ŊŗbĐI÷IĢR ’6CҁŧKÃÖMđãâ> ú’´zmę“į˙™§\YˆŸ­5KͤéŅŽg#äf =˙úÕWâŽģ˙‹ôSg ÄĢĻÎ|ōąĖ:z÷¯bđöˇm¯iQŪZ‡ōūīÎĨNGą­9$XĸyáP'ØW—xĮĮē^šáMWNĶŖē–åâ(˜„ũî•Ė|!ņ<ŌnŦ5ˆ.ā-)p|†cú Ôø•ņ¯ôŌü=iy+܍˛L`e ŊĮ#­VÔŧ!{Ŧ|%ĐŽ …žŲ`Ģ(‹‘éZÚ˙Œí5Ož•kæÉĒ̈́ۅ%ƒcē†ž øB9ŋãâSæĖ=öü:W|*ããĢĮqa./%P>RËČöëüĢ͌:WāŋÁáû_ŗšģ2P$ãÛšę|&ēŽšs¨ęē„Ov[ÚH¸%=HíŸJØøiÆD˛˙ŋBĸøGBđôōĪĨéņ[K/Č:ÖŨQEQEQEUũLÕû}…ĩÎG›lTöļvÖ0Ŧ6°G kŅQp)'°ĩš!ώØ‚G4öˇ…äYŲ×ŖÆœņ$€‡E`z‚3L†ÖŪÜ ĮžģT ĶĨˇ†q‰ĄŽ@?ž ˙:tqĮlŅF:™$QĖģe}A ú}Ę*Mmĸœ…d…L"ŒGå„P˜ÆÜqĨ1m-Õ -ŧAOU0h‚ŌŪØ"ãĪ]Š'Øíŧ˙?ȏÍūūҚCmÂ4 ×;Fi†ŌؒMŧG=r‚’âÎÚî&âäûŒš°ŲÛ[Ä"†ãŒtUP§-ŧ(ûÖ(Õ˙ŧP_iv:œa/m!¸Pr‹œ–ÖŌŪʆڊ%č¨0BúNŸ,†G˛œœ–(2M:M6ÆVŨ%¤ qŒ”*SmAäPŌl*1ųT#LąÍn- ōåŖØ6ŸÂƒĻX›dļ6ų ÷cØ0ŋAKoĻŲZIæ[ÚÃã‘8Ģ,ĒęU€ õTÆĐ XôōÅ+YÚˇŪļ…ž¨+Ī~'ܤ6Úo‡âļ‚+mNo.Yš1˛1ëõĒ6ŋŧö`d–iԌ—ā}r*§t+ üLŧŌô;É.tŗmžPΏ#į€OŽ3^ēm bI†2ORPPÖĐ6wCĪ\ æˆí`† q"Æs• Á¨­´Û+9KkH!wûÍ'ëŠĩU¯tûMJŨ­īmĸ¸…ē¤ŠƒNĐ´­ ėû-ķÔÆ˜'ņ̝rcz+cĻFiŸcļĀf‡ŽŸ ĸ;Khe2Eo9,¨ÅMHĘJ° ÔqÛAī.Ķw]ĒiÎŲ~íŧCœđƒ­$–V˛įĖļ…ŗ×rš“ʏĘōļ/—ŒmĮúUKmM˛œĪkao §?:Fį­^¯?øĖc?/‘Ø%J‚ØÎ ^øy Ĩį49dŠ)]-P)eŽ;Wb(ĀAPKci<Ģ,ļŅ;¯FdŠ—É‹Ëōü´ŲũŨŖ•0Zۇ ‹pčv ԏ9ŅXŽ™ÅB–‘ĘŌĨ´K#u`Ŗ&ĻtYŖ¨e=A ĩ…Ĩ™&ÚÖ‰9%jSlrȤú‘IöxyũÔ|˙˛([xS;bs× iŠkoŽ‘R¨(ˇsˆcë…ĐmmÎ3\tųKM’4š6ŽE Œ0AĢi¤éö,Íke,ŨLq€MZxŌD*ęOj­Ļ•abĖ֖pBÍÔĸš´ČŽu õĻũžcɏ›E/“žZm=WjÛ@˜Ûkƒ‘„Öŗĩq†ļ…‡ēR´h鱑Y1¤qPÁailåāĩ†6nĨiÍinėY­â,z’ƒ&†´ļŊoã ˆ)ÎŲÁ oŽPsOŠāŒG* čĒ0>ĢŨØÚßÂbģˇŽhĪđČšû{X-#ōíáH“û¨¸hs g=rĸQÂģbQsœ(§‘ƒŌ˜°B‡+j}” <ˆŋį’ß"ƒo uŠ3ߕđĄFz ­›eĪ4V°¤¯÷œ ÉüjÕ0E”Ë寘F ãœzfŸQ=´8w†6`r (&ĨĨQEQEQEQEQEQEQEQEQEQEQEQERÕ4‹jÍ­5 džü.3ųW:ß ´"˙)ŧHvāġ.ųÖ֋áÍ'ÃÖæ.Í RrÄrÍõ'“øÖ­QEQEQEQEÎø‹ĀúŠgIux%˜ĸíU2Ž>€Ķ´é>žI4՚0ëˇcJĖ {]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVfŊŽZxwH›RŊßäŌ„'5Ėøwâŋ‡ ŧIŠßEnōœ"šÁ5̉,k"0daAāŠIĻH!yd8D˜ûW/§|FđÆĢŦĮĨYę"Kš ›HÉŗ]]QTĩ=_OŅíÅÆŖw´Dā4€OĨAŖø‹J×ÖFĶ/#¸œ1CœVĨQEsw>=đÕĖ–ķę°¤‘ļ×ã›Ä \ΰÛëŌČĖ,n’{qNēņ÷†,Ĩ’;Zš3†qÍOŖøĮB×īĶLžK‰Q7°AĀZŨĸŠ(¤$“Ō˛,ŧUĸj:”ēuĻŖˇQ4øg§ø×U˛ŋēēš'ļJ§F^¸öįŊuSÍoĸhĖîábļ„ōĮĐV/5ûøh_^,{žG\(Ā*æē†—oeûD銲Áąų˜AŒ§‘úW¸,Ņ3lYˇ niôWņÅoᝠdĩž4ŧ–TëÉž•­}ĻZkūEÕ`Žã0o;玭y§Ā[1jŪ! ÷Vį`ĮN+Ú) 2HÔŌ,ˆ˙qÕž‡4ę+Šø‡Ąiōø#W•,`ķ„,áüąœú×!đ+M͇‚ĨÔ'ˇ„Čŗļfuįé[—Ķŧy­ŦŌØD4kF%.>Đ˙‡a]ΟĸéēP˙@ąˇˇ8ÚLh"¯3*ũæęh‘Ō–ŠÆņV˛š†oõ&‘chafBŨ7cÖáËšĩ/ X\ÜČiíÕ¤eõ"šO ü*˛đī‹î5øī$•¤,R6ū žyī^‚ÎĢ÷˜ŠĻOW0´3ƒFÃ]rá^#ā2 Žúä6Č#‚$l"Ž@8ũkÜŗE5ãIP¤ˆŽ§Ē°Č5ã˙t›oøEėĨ‚Ō5“í~DÆxéÅz„­-‡„4ĩ[hÕM˛|ģGĨxũÍäūøųö=%ŠÚŨËšûŋ0ĪJ÷âĘŖ,@æ‘]\eX0õ5ĘøˇÄŌčúŽ…§ZIÚ/îÂ8nvŨÅiøŖÃļž*Đ'Ō¯$t†QČzŌ đ…ė|! Ž›c#Irí#c,OĶč*ž‹âYuOëšbËŲØ¤A ŽwļIĒū9ø{aãYŦĨģģ–ļ?.ÃÁĪoŌēÛ+Xėl ĩ‹;!@‹Ÿ@*RčieКR@'ĨčAúRŅEādÔi<21T•ŽĄXĖņFĨũ‘áBø403)ô8¯"đׄÅ˙ "Š+ĨŠîōåĻ’W?1;‰¯[đވŪđŨ––Ķ™š´‡š­šÆÖ|-¤kķÅ6Ŗj&x wÅxΟŖÛčß´Hĩŗ„Gn0™Qš÷úōíFöO|Mo™öVœžeÂūąŊĩdüHĶĩģOčļūŌÂG)I < lW°Ú‰VŌ;fPƒyõ8æŧŖâÖļ÷ūŧ†ÜIödHčqæŋuĐc“]ׁGā- ôD8ü+‰đŸ´K¯ßZjr™5‹‹—<ÄųQĒ=8ī°éúMώfÉm¨[Ė Hŧn:įĨwžÔßYđĻ›¨H<đ+ŨOkjŠk:ŠÃ0ÜŅŊI0$ôæ^aņÎÎ <%ËDžlrĻ0įÖēŸ…ƒĀz*;*Ÿ˛!Á=ą] Ė)si,Ä$ˆQˆ=ˆÅr^ đ“āŲī$ĶŽ$˜ÜwļvJėDŒeŨTząÅ0<Q¯¨Ã^+ĨŲÃgûEN*ĮŽÕā”^ØŗDėUdFaÔŠ}Úm÷mķâŨĶÆiD𞒡˙ Uš'mĢ"čIn!ƒũtŅĮūûüéc–9Fc‘\zŠÍ$“Ã<ŲQ3ĶsJ˛ÆíĩdVlgäâŸY~"Ô?ŗ.Ņn4-BáṔG=ŧ’—ēfģ˙ˆŪ5“Â^[Č# ypÄE$uŽWŌ%Ōū/‰n%ŊŧÕĨA7˜“°Ûœv§5rOˆ:ĩ— ]B\&Ĩuû˜‹pØį-ųsO_éĢā)5KIÛZ™üņ>[w\zWCđ—Æx§Ã…o$ķ.í°ŽŲÉ#ą5čUá˙|=6œ!ņ.ŸqpŽeÄáe qéŌš¯N-ôũSŌīī˜I ŊÚŦėpŧc=ķ]u΀ž"ÖôH4ÍZöžÛΝRc´/žüŅņJÖëÃk¤K§ęwęf• e¤:{ÖīÅ- _ü>{Éoîā[Ą1DØW>Ŧ1ÍPøAá%ƒAĶĩ‘ŠŨ°*OŲˇūī'ÚšßŨܡĮ{8í_dž@‰dĀ9?Ząãuģđ/Œŧ;qay9.`ō –8?_ŌŊÂ/nNK(9§×Ī|.ļ:Žtú•ÜĪutVn#ûŖĩzî…áåĐŧ=8ˇ7M,‹\Iģ/jō¯…ļWšÛk0ŨÍkh.YžXNÖcčjč>ęú§Ä}cÂ÷wŗ]Û[ŠxžS“¯~ĩ‰•ëŋ•ĩ­ßjŪøƒĄÚÃĢ\ŨÚę#dŠrÛ°rZgĮ],¯‡ÆĄ>ĄtŅ™URÔ ?Nõ×x3ÂBÃA…›Vŋ.-”i0#9¸ĪŪę–ßõ mNîęÎÖ2QerpxëëÔÕŊ[]Ō.ŧsŠiū"Ô'˛hv‹Pŗ×äũsë]7€[Q7z‘¸ÕNĄbJũ’C&âuĪĄ¯<ŅŌ{ĪŽ>"˛ž13my•°ČŖ ÖŊÍŨ÷ž*iZ=ļĄws§j+šŖš”š$pM{%㟴í‡tÔV*Zã įĐWI Â[sá 3ėa mj›@ŇÅ?ÃĄŌ5™üAŦ]GW”“æ˛ácä\íˇˆ#ņĪÄ-CLŊē1hÚríŦ…D¯žsŒzKM~ üPƒCŗœÉ¤ßÆ6!°‰ÉãôÍaøÛÂâ_‹Z-ŖjWšēVo;Ėų“Ų}+ĐEsŽü/Ū^ÜĨ’@Ķ ˙ŊĶ=k’øká8uwÄ>eũô gy°ySc~ û˙Ūükoã5­Ö‘§Yjv…äRIpē HRŋO^?tž1ņ|žøwĄÍÜҤq<î#¯áÖ˛-| n|ũšq}xÚä–ūÚĖ>ld gĢ~ ×âÃéĄģáģ‹÷r<$Ģ9~•Čü/˛ÕŧLē­ū¯~--§`<šˆf=ÍÔt­O‡šö§eņVđĩÍÜז°ŗŪf,ā{“õ¯bĸŧģâŋ‹Žtû;ÚtÆ­F@˛H:Ē‹<5ƒ<%ũš¤Īp/mJ;ŗJĮÍäiÕßx]Ķ%đΏ`—Đ5ÚÛ"•˛Ų ĪJûĀžŅĩé<[tĻco4’ß(P=}Ŋk“ÔôSâļąos:=—†­Ü˜ÚN Ã=@íĶ­zöŸĩޟ{>ĪM‡#ŠŗEx˙ƝQ‚Ėx‹MŋŧŖ!fŠ9zd æŧ_w4~Ņĩ+RŊŪ‹)#hęOjé?˛.ŧGĨøvãJÖoâ;VāĨÁ`įܞ+C㠑´øXÖË,’ų,ƒsœŗsŪŠižž÷á‚j“^Ũ-ŌYļDĒÆđ1ß=k[áĩôŪ2øwäęsĘŌ#´FUb­ĮNk#ā˙Ú`ņ‰íĻē–xíæ1ŖJ刟ZKMZOˆŸo4÷yĻ†%rĸGÎ 8üjŋ…o5K/Š÷:=”đi)AÉ\âĪj­{§ĪuņâęÚZ3s÷‰éųŅ7—¤üZ‚Ø]ŪIŖĘû#f™ļī#žüâģOxmŸÆzžŖŖw%ŦŪ\Qŧ…—wSY7–ˇZĮÄũBÛČēJ/î%g(ˆķÍ õĩø•­hV÷/6š‘ųî}ØätĢ#Ôô„ņũíˇŠd™-ļ/ØØzäũsüĒįÃč˙âĩÕdļԍ큁,dÜTx¯RŽâW†aÕ´+ŊF[˘Ĩŗ°Š'šĮzäū葸j }ī.€™üŸ0ųyįĩ]đ•ĶüEņ6ąy¨3ÉĨÚŋ“m$)Áäûž”šf˛ŪøĨqá]ō6Ÿyōw6|ļÁÎ?\Ÿ‰4  âΛĻé7wĮxÜŌ–#q õŽĢAđ^šĸ|Skˆ_ėpšfi78sß9?zåQEQEQEORÕ,ô‹Cu}:ÃāŗWĪZ?ˆŦaøĶsŠĮ*Éhüy¸ãĩoxĢÄĶjŸ-4‹ÉÚ×J Ø)ÉëéYß%Ō“^ĐF‘?c‚Lŧčr쉓ëëW~!‹ßø/âS¸]GáŲ°eœO–wcž•‘á dEāOXiˇ \É*¤‰ųļ÷&šßŪX§ĮØ.á8ãŲļãkãNĢĻŨj~xn#w†}ĖAčšō¯dŅîāžŌ-§ļ•dŒÆe9Ŋ^1ņØâëÃĨō–ã.ØéÍuM¯ĮqĒO7 Ø[iؙCüģČĀīŠä~Ū[@šā’hã-rÅAnŖÚĄđ­ũŦ?ĩ‰åšaxļ#áŽCŪŠ\čÖú'ÆŲfÖĀm;QVxäbv“ĀëūzŠęŧRžĶá…-´ûKíFW oÄļzāWĨiČŅéļę҈˜FAü>Õhœ šá~"ø‡J˙„WˇMBŲĻhY~`É>˜Ž_ā=å‹x&[)f‹Íi›1š+‡Ôæo…Må“$šuĶ`§!TžGākßmĩŊ/ÄZW•ė%îá+ą_$nūĩãŋ ´ #K×ĩ­ÄpÆˇqM˜Œ­ëĶ ˙žĩčpxj߯ļĐčšmĢÜE{›¤ųŧĄŽįÔ×+ũŦŸ´%ÄßhĸÁC†ČČ÷¨ū*j’üFđ’Į29ŽmŌÃnZÖøņ›ŸÛËķc[ĨbĘ}¸ŽŗAņ5”ĮLŌ-Ú%6Ąä‘mŒßßÚŧûÃzĩŠü}×ˉVHˆ‘ÉFÜ÷̎ŸđŠxËÅZĻ™âDŠâ 6ÁqĘgīg¨ô¨ŧĸÃáˆ76^Šö,ÛyĶeÁXÎ{žžĩSÁÖãW‰ŽÄb&QÉāôÍVņūĄm/Æ˙Iö˜Ė1*e÷|ĢķõîŅČ’Æ¯F Aˋˆm-ŪââTŠÆįw8 =I¯øíŽéšŸ‡´ä°žļē?hÜDNŒ{W ø#ĚTžŅŌKût™ TØ\Xuú×bFTZđ˙ é–>øĄ­Zø‚Åĩá2ZÉ:ü¤“šėĻ_ ĮâM>Lŗšŋ-Ë€ˆSæ$tôë™ņËųŧ;,Î"ˇ2]žīį]Ŋâ(§đī‰Ž>ܟd1´6ĨœĖæ ëÉÅQø%wk˙2ÛG:}¤;ŗEžAÉį‰đīYƒKŋņŖ\ːÜ5Ë2#ŦĮœcôŖâæĸ¯ā=ÚæāIz×É"–Ë`‚r{ևĭ!ŧKđÆÆ}0ųíhÉ č0GáŸŌēK}zÂ…iy-ĖjĢc´Œķŋn6ÜįŒVŧ;ā{Ûûáöav ĒŒ.8æŗūęVpéēŋŸsJ÷-!ŪØ;}~••āũWNãfŊs5ÜKšq†<ŊëŪAČČčikÆ>1h—x—Dņ*míR9ÚšŪø›ĢŲęĨĩ˛¸Žk›Ŋ‰ hĀŗč* mŦŧ#đoûúę8Ž͊Ąl1fäãņ4ī‚zĩ‹øĶN1ũ­^Fō‰ųą¸ķŠôę*ŽŖŦiÚHOˇŪEoŋ;<ÆÆėzW….Ŋ§˙Âū—SYTYžGĘ~QžkŨ´ũ[OՒF°ģŠåPísgŌŧĪAĶSÁ?uFģuŠĪTXdn…‰Éú“Pü^ ⊴錺\Í8w(są:d×˙އ-˛juĩË[Âą‰%@HP=út¯)øŠ˙uφąhĢbˇk! –Ë–<Ž+˛đ*xRĪÃļZ”)j—ąZ•€Æž+˜Ôž,é7RK=ũ„—z˜RÚÜĮéüfĢë?­ĩ=9´}Lš)YÆĐ›¸¯@ņˇ˙ ˙Ā\ÅžÖņ¤hŊŗĮ˙^‡~8_irĐųSÆØtvu•â]5u ę ĄŒĐ2Œö8ā׏|0đä睅5Ë=G{ˆwÛĀŦ8LuĮãüĢcāž™yŊôפ˛ŲĘÖļŲ=rØũ*˙ÆÍNÖŊŸÚc[†‘•Ÿ›sŠšiâ.…qĒßBĪˆBĨ íāĀø;¯é–ģKĢԎE•å}ß)žŋĘĒ| Õėdņ‰‘Ž íĶw9<Šg‚vx#âNĩgĢ‘o Ķ‚w’O_ÆģøIΊã{K #žŲ2ס(švžĩĮZëvqüyŊ¸–TX&!+tŨĮKâŪģasã/,s¤‰m0iYOÜšö­+PĩÔôčŽlæYĄ#Ôį‘W+Ë>7iFZę°ö›9ÁR­bø˙D’Û᎕z­'Ûâ*ė䜆nO?S^—āí/ûÂV‘lÄí™!îÎy$גx{YĩŊøƒ­ÍãHō…´Ŗ' õÅdYxĄô롰Äm%¸e˜h°ÎIxôĀŽŅu]+Yׯė Ëcā&Ō^åZᝋDĖsšoÃH× ×4]NU„´ģāg8 ŧôüŠļö‡Ä›SļEk §ė_öįōŦOø†Áū8iWKtŋfĩŒG$›žU99æŊÆÆū×Rļ6s¤ĐžĄČÍYĸŠ(ĸŠ(ĸŠ(ĸĸ¸ļ‚ę?.â$•3Ž2*šxGŽO14ËUī†jާá Xž)¯ôČ&x†rôФđ֋5‚XËĻÛ=˛ŦEĐ~•f=*ÆeŦIlF<ĩ\ įSៅ#ŋû`ŌĶÍŨģ‰Lúíé]R[ÍD@`&8Ås÷đÅÍÃO&‘n]Žã…Ā'éŌē {xm`H #‰`RSG(e ­Žš†ÚÂÖÎŨ­íāHâlåG|õĨ˛ąĩĶ­ÅŊœ) @’zdÖFĄā¯ęs4×zUŧ’ąË; $ūu~×DĶl´ÖĶ­­#ŽŅ õĒ:Gƒ™éVgđ։u#É>•i#šË9ˆdŸ­DŪđû°i4›g#Ŋwcķ­+;+m>Õm­ H Oģ (úÕb¨jē6Ÿ­Úũ›QĩŽâįkŽjŋƒô]1ôčtčVÕÎæ@:ŸZŠxbÜ'FĩWDÃ~bš|áŸsšS?Z­?Ã˙ \Ęe›Fļiņãæüë~ÖÖ+Xí ]‘F6Ēį8ÛÛ+}FĘ[K¸„°Jģ]B+xVÜ0MĶ ×)šzøÃ)q ņčöąË ܌‰‚ t5›ĢhVš&§c ĘĄĘų‹œRiŌt$eĶ,!ļ ÔÆ¸&ĒhZfĩĻŖe Ā^›×‘Q hßb‚Í´Ûg‚Û4`…ÂĨŗĐôŊ>āÜYØA¤m/`âǎ„´ÕNĻÚ]šģ'q§9õĢ^ŅīĻ3]i–ŗJŨYâšŗm§ÚYZ›kkxâ€˙Ë5_—ōŦCā/ 6¤/ÛLˆĖėšŸ]Ŋ+z{X.mŧ𤐰ÁF\ƒøVZxKÃņ34z=š$FEW“Āž’T“ûŅ]ATĮ?…t -Cskä ÄI,l*㠊ÅĶüáí.ôŨÚią$Ũ‰ÉÛôĪJŅÔ4]3VŲũĄaouåũĪ5múfĄąđΉĻŨ}ĒËLˇ‚|c|iƒZ´U[Ŋ6ĘũŨÚÅ1Oģæ.qUŋáŅ˙čkĶęÅYŗĶl´ũ˙cĩŠ üˇ–¸ÍGĒhöÍŋ‘l“'mÑô=Ēļ“á#Ds%…”qHF õl}kY”:•aFŦäđöM.Đ19'É\ŸŌœš•ĻDĶí•Ø`•Œ J_ė]3û 1÷ĸ_ čŠ*ČēU uåO”8Ŧ_kÚnŽļĻFâčė‚ÛfU›ÔžĀS~xYü7ĸģ\ĸ-åĶ™eT Oaí]…^ÚÆÖĘ7ŽÚ‰‹0QŒ“ÔĶltë]6&ŠŌ‰˰^äõ5Z÷Ãē>ŖwöĢŨ6Úâp6‡•?ˆxSA´cI´ØĮ%|ą‚hO č1īŲ¤Ú.ņĩąų‡ĄŠ đūm,rÃĻZG$|Ŗ,@øŌjūŌĩčŅ5+8į ĘKŅ´ũßČĶí"ˇCɸĪ֑´-)´ûbĖIbcšdūŅî_|Úe̎ĢD*í­ŊŒ XRČDĻĒ÷–Vڅŗ[ŨÂŗBܔn†’įO´ŧĩ×ņËÆ†G*ĀPĒ 0PŸBŌŽnÅÜÚu´—äHņ‚iŗøHšŊKÉ´ëwšîČS‘Sļ—`ŪnëHOšrųAķzfŸŖiÚHq§ŲÃnåüĩÆãWĢ?PĐ´­YÕõ {–Q…2 lS4˙iTí5†Ÿom# 1‘QjūŅõÉKû4–EčũįW4í*ĮI´ļ6ŅÃū~žĩŸqāīŨhö¸ä“Î}kGMĶ,ô‹$ŗąaI!qÍ[ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*•†—kĻ´ÍnŦ ÄÜŲÉūēģEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE֍‚ČŦGLŒâEQEQEQEQEQEQEQEQEQEQEQPÍwoo>xãĪ{š‘$]ČĘÃÕNiÔQEQEQEQE֑ī:¯Ôâ‘fØĒHŒGP}QEŒĘŠY˜(I8¨ūŅî sJyjÅQEQEQHĖK1I57–×,V ˆĨ#¨G•MEQE1ĨQU› '“OĸŠl’$HÎėd“Đ lÜĮæA*J‡ø‘%QEQE×u ģU$ô ´Ô,ī՚Կ)Õz˜ØUš(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*œēļŸ†9o!F.:ÕĀA ŅEQEQEQEQEeĮâ 6]zM'ÍôiŊŖĮo­y—ÆĪ @t9üCĖņ]ÆTYR:tŽĢá+;|;ĶZF,H$s‘ÅvôQEQEQEQEÂøßÃ62ÁyŽŪ暌+ $ė‚bĒ0;bš€ÖWˇ0ęÕŨÄŌG+ėˆ;͝Zöš(ĸŠ*ޝĨ[ëZdÖ[ü™Fc`ūuá>҆ņų4Čf­âW(%ˇs_BQEQEQEåßĩ‹ÃŠč~´šHSQœ †°LyädUKOkú_Å8/ôÔH4HÔąö†P0AÉ÷¯\ĸŠ(ĸŧëÆõOxÃNÕ­ĩCokl4Aˆ9’1ëũ+ĐÔmU\į§VˆŧCũ‰q¤Āą,’_Ū-¸Üp­øb›ãMëÄ~žŌlî>Ī5ÂY2G|öŦ߇ģđw‡žÂōīíŧĨøčŖĐWcEQEQEeø‹L“YđũîŸ Ļ'ž"Įl×)đËĀ7~ ‚÷íˇĸy.ÂĄųTë]ũQEQEQEQEQEĮÜøĸđ|Iļđô/˛ũŸÎ”‘–ôNk°ĸŠ(ĸŠ(ĸšøŠõßkZ’ĢƒĒ#ƒËzדü`đĨžĒiwēy’).î?xÅÉËÖŊęÍJŲ@­ÔF ūU5QEQEQEQEaø¯Ä áŊīŖąšōLíHĸįŪŧ;ÁŪ7Ôæø‡¨j˛č÷ww!S+–Aīô¯AøątnūOu<ΰųLySģĄũ++Á/âMCáü ĸÜGb–ņ oq•€íč+ĸøaã[ŋiWkŠ Kģ9 r0č@īYđ”k>6ņmæĄ^:ĘËå–p3Ÿ`j-Åú‡üx|)ŦŨũ­% ÃpØûzWŦU{ëë}:Ę[ģŠ8bRĖĖxæoˆ!Oá­[R]G|pe\ygŌē/ø¯ūí>k_Ūjw¯å[F:ä÷>¸ß_Ūi>"‘nušõ ˆā2]B(­Ø.:hņŪŋa­Û΍J‚Ūõ\ÁbW˜ûšõÍņ÷ˆäø‹ũ‰Šĸ˜Jî*"z÷Į­k?‹uoøžmÒũ–ÎÔ˙¤^íĪ>Š+×Åž%ŋø“oáģkįhmI°|Ø>ŋ•küqÕ¤ŗđWö|3ßČ#zu?áø×QđûCđ^ŸbWkˆ÷8=‰ä×OQβ4,,B¤+€ö¯ Öüeã_øö×IŋÔ#ŋ†|2*Gˇ9áGį[ZGŒ/ņĩŖęv)Ķ5âDUų` Į'׊‰5ßéeđäšÛ^,̈ÁŒĨ†C`zsųVƇ}âųĩísFēšš[{t/ ôą ävôÅOđ—ÄÚžŋ˛u{ŋ´}–-_`ÍUMSņ˙Œ¯ô}/S}?LĶÆ$šÜō7Ļ{t4ũ/ÄZŽ“ã™üĒ=ĮëK§p$t=¸Ŧ‰ĩhŋí|=â)Îtķ#˜ Ī÷J×1øžûâΗgâ9ÂŨVIɄeIč ũ9ühņ/ŠõKˆVū´Ŋ’Á| Íq21 ¨ôkz'ÄĪøDu[ã¨C,{♗ */Šž ņ?…/­/,5D[ŠU>X%O~}*ΊĩŸč: ø‰/!{d*ZŲSø=I=ëĢ˙„ĘÖ//Š.Ŧ&ÜM´w$ppļŽŠâŪøĮSÕŽl­@gˇ†Ô}ÅĖÕß üSžÜëڒģKlÆ01Ėü#ųSâÅWžI­´4&ámBúûfž˙$ģøZúũĄDŧ°ļėaļ3Xēå׈´¯ ļĨĨxˆę}žvũŪHû¸íū~žŊĻ´ĨÚ´­ēC–>ŧUĒ+Ęū.]ø‹Ãļg_Ōĩ§†V?˛„ũ뚭ũŖã;Ÿ‡ņøĄusGn$ūX>`ÄĮŪēŋøĖkūMz÷c%#€võ"š¯ Ũë˙VmJk æ1ÚĮ`;šŊá?jZĩŪ­á‰ŽÂęv,Č.YyaëZķÍAņ˙ŝ^Ų5æKčЗēÚ #Ž1Đ^ûŖYŨXi6öחFęâ5ÃĖF7ZŋEyįÅŪx^ ,•ƒ]I‰eQ“{{×-ŦęZ×ī´R^ęōËQ•VhŽNJįųuŽ×Įū$¸Ōt[ŗÎ- ôĢ\7H•‡'šæ5‹H‹M:~šöû9îcY&ãz‚qÛ¨ÅzâcRz3NŦZę÷z ąč×ĸŌnKɡ'n9ĮĄ¯#øIiâõŊšËQH"[Ãö–dÜĶ3“ZŸ$ōx~āŠ"+ÄāšĐņ.¯âŊÁëâUŊĒ”?c ŅOë]}¯‹ā˙„/Ũ !ļķX/÷ąĶķâšoÅÚ4ž'›UšČžæļļ‹G¯“ũjīÃOˆ/âĄu§ß…]BŅĘäË@;×ĸQEQEQEQQÎ@ˇ N xwÂUū kōŸö‰?tŋõ{}Sá†Ĩ4 ¨I–<ž˙0­ŋ‡Ĩ§Ã[%V,žI?§Jäū 0øŒĮ!g’wÎ{7jÄøsĨE/ŠuÍ6ęęęÆíg, o´ˇæ+¨Ö|!áÛOiWw7ס:ĢLcĖÉúŸA^Š^ņŽ+Ųŧpļ™Á`%ûĩ7„Ŗ´đ‡Ãy]ãP–æV ã'ŽCāũ”ˇ×Z÷ФÆû–qAČzūU[Ā:ņ.̝ëZ•ė‘D×/ Š @=3Øbģ‹I4K}&öōÖÎ8tí07‘2œ+œr}ë‰øE—Ōkū-¸]Ūc0‰Ŋ=‡éĪĩdøUōĩMcÅ÷ŸŧŊģ¸6ÖqYŽsĀôÆ+V]6ķÅ_ePwĩ–Á×ũŌLôäŸĘēŸCĨiŪ(›OŅ K¨ŅīnŸæ9ôĪs\ĸ§ž5´éûË /…āoķÚŊOÄööú‡ĩ]BŪÖ1t-›ųŋ:ážƚ'Ã۝V蠒fiĪ,NxÍQøiö[MGYņ%ųġ7>R(PXœôûū”Ī™|MņIĶJYØĮįČõīūčŪ×.uģíBHÕ• ­œ\ŧsÜ…t´W†xÎeēøų Gˇ+… ÷<˙…zŋŠ´˙ĩøkS[xĐ]InƝˇæéĶ=kĘ> h3^xnáWVēŗ’9Ųd‰1ÁÍoˇ„´}/ĚǨ^^Ī­ßYJerAQžįƒTžJŅhÚĨ­ČĪû\ƒøūĩ•áŨP_ūŅķFa‰ŖwŸŌĩ>2ųrxŸÂ11É79+í‘^Ą¨Cæhsyh ĸŲ„dAÛÛô¯ø/Ļ B ^Ū}JîÖén>hãp¤úņøWpžĐ´oE¨=ũåæŗ,.vģT`–Æ0=˙úÕÆCđū=ÎģáÍj]>íĻa%˛šÚ{Ķ4Yë:ŽŸáhū&TģS¤3H7îîHīŽjŒ˙ 5K}ęžņI§ķ~Ī+ãŒgpõī‡Z´Úׂ4ûģ€ĸ]ģhĀãŠęj+¤2ZL‹ÕŖ`1ô¯øØõŸZÎH¸¨ }j]ˇēÔ˙h]?ė#ū=QLĖŨ\įëŸÖ´~':¯Ä¯äãāõæŊ|FAzŠZŖ­@÷:ônķ$ÕvžrT׍ü ŌāÔ-5[ŠĻĩšpĐÅ&ÃĮĐ×kcáŸhž8ļ’ÜÜKĒËī1|(õũ)ßĶ_‰|+Ä×w+æžcQÜÖ/Âŋ,RŪxNö4‚ãO‘–>ۗ?­Eņr_/Å`qū–Ná×ĒՏˆąi!ņ—ĄjLĐĸi-îQ°Uøã?ŌšļđvŊđû[ŌīŦĩŸˇŲKt°ų2@c€GįÔWKã @AņgÂq´h1š‹ž#ĪĨtúūĻnt/B|ŋ"ŪՔ6z’‡ ķ\ß§áō(Ā"g;sÍVđ*Ŧ|^’Ë´ŠĢĢIūŅ:i¸[Aģž3ÍjüQąƒVģŌâļŽiõK'ûJEdČÎíAã MCâĻéösÚ[‰VK™'@ ÛĪøwÍzeĒYYAkÂCEúŠž¸_Šļö‡…™t[í72j¨2ÅĮôŦRšõīÔđÄzdąŪ´+nevãœæģøy|-á‹=$JehWįsüLy&ŧÍdŽ_ÚIŽđDvøÎzĩėWERŌw }ß~+Įž 2Ímâhƒ€Ītáyë‘Xŋ txümâ 7U{ˆ.7åLŅ9žÕ×j~đŪã]áK‹ŨZâN \hĐufÎx¨~7érĻ™§øŽ×"}:`IŨ5Ôü8Škm^./5&ퟜáq…Ķ€+‰ģņΊ~,ËĸĀŅØAfĨZáT \ dnė3Yˆl­ž?ZGĶIŧAd–I ËääūˇņÉV{ Ņ”Ŗ]¯Ėr3[ßÃ/Â̤‰ö‘`{Ž+žÔ4éuoŲîÕ!Ȗ¨áWø‚ãü+áŠi× l,Ž9#ō™gūŧŠã|kokĢ|6ÔĸĐ´ámcĻŪdé&ŪŦĩ×xSÚ~ˇāŊ>VÕ/Lonžb ūQĮ#•ĒZxwÃ^Ô­tčM9ŽÖ “#į9 lfšÍcákXiŦø{Ä$Z*yÆŒc<ôËŽ“đÆĶÄ:ē0+ ‡UxôvÍ^đ?­ņ=ũΏöiĄŧ$öų`žŪõŨÍā-OÂé¤j2KÉŨ!š$ãŋ~ŸŠŠm<eeŖ.CP0|îTÃÚĢø{ᮕá@]鷗ŠķnxŒšG>¤TÚįÃí7Wž…ŧĶØ_ųonØ'ëRh>´ŅõÔn.§ŋž#kƒ’ŋJę̜ņGˆŧ=§ ŌõĢĈŨŽĐ‡’GôŽĮú]Žá%Šģģˇģ;b˙(-ЁßÖģ_ø{ūŋŲéî“né>§“Tî~iĶjW1^][ÃrÁæļ‰°Ž{įë[Wū͝ŧ<ú!ŒÅdãiHÎ8ŖBđƙáŨû"Âļŋ6Tœį5‘Ŗü5đū‰­NÖķHŨ˛¨Op*߈<c¯_%ųžâÎõSĘ3Û6Ödô>ŋŌŽč~°Đtæŗ´C‡ːũį'š5_ÃŪ Ō|3swq§ÄË%͐ąĪ|ÖäđGsÁ2†ÆÖ¸ŽONøuĨi×ép—rC—ŽÕäĖHŪĄjΝāM+MÖfÔãižI$2,nŲDcԁīUuæšũ­öĢ‹k†O.C czúéôũ>ÛK˛ŽŌŌ11€jŖž#4DŖ.¤n^ŖÜW›ĪđfÂãT”ēö¨÷Šr˛ŗ ¯ĶÚŊN°6:lVr\KtQv™få›ë\MīÂôŊÆĄĸk:[\6éR,cëƒ]‡<+káõ–A,—W“­¸˜å›ÛØ{U ¯‡šTúœ÷Öķ\ŲĩÁũüvīĩdõČŦ도ššōjö÷v— Ä´qRkŸ 4ŋę {}¨jd9l¸œįJęt-#ûIŽÃí“Ũė$ųŗœšĪŠŽgWøgay¨ÉŠiwˇ:UėŋëÜü¯ë‘Z‚­tXî^[ŠīoŽS˒îs—#°ƒÚ˛ãøaicjIÕ/,gÉ2KŧÉÉÜ*Ę|6ŌŽƒ>—q4ķ}Ļa5ÄÎŲyX3ųUKß…ļ“ŠˇĩÕõ +˙Yk€øcŽÕØé:Mž‰ĻA§ØÄ"ˇ…pĒ?]ĸ¸Ícáí­æŽÚļ—}>•~ãŧ“ę _đ׃lŧ9,÷^t×z…ÁˎSœģ{}*–¯đÛD×5?íé/$ē^cq;û¸é]ĨGĸéŠeķΈI;în}M_ĸšcáŪ‘ĒjGPŠK‹ ĻûōZ>Â˙ZĐĶ<%§i6ĶĮnf3ÎĨ^æGŨ)ĪûU‹gđģEŗÔ´Åô—ķÖI‰5 øGáÖÔüÉ~.ˇV啺õUøo ëW0Üߋ™fDÆcōc¸÷÷Šo>h:ƒZIwĶKh›`wåyÎ~´Ë‡ÚežąĨ-ÕõãÂÅāŽæbézëÚ¯ø‡ÂO‰L/ųĐÅ,mĩ—ņĻÍāÍãA4ŅJ֙ܨ•ƒ9õbMGáĪčū’FŌ–x„ƒZRÃëŠĢmđã@ŗÕŸSļK˜Ž]‹3ŦĮæ>ū´ĪøV>´z Kąz‡"o´ąo˚äü]Ĩøåė4 Nk=WO€,ķŠ!vSęyíéY— ükâ/<—+–Į˜áZģ_…ZîĨŦøvâ-Tīģą¸kv“ûØŽîŧŋâ´Úíæ•áûi^=jF2ÛȍˇË^äŸ|}xöŦ$øMã?-UŧcqōŽ˜øĪį]ÃKũj×WÕŧ/­ÜũŽ[WYÎCg‚ Ų—áw†eŋ’˙Éš[šLĢpĀū•ĐOĄÚ\čŖI•Ļ6ÁBäHC=Mchŋ|?áũE/tØĻ†Eįi!Šéū!đ‘â„ē6Ōí:\[6ĮüéŪđ&‘áģˇŧˇķî/$k‹™7š™ė+[[Ņ­ĩí&}:ī>Là ŽĩnŌÖ;+H­ĄŽ%ŖØW'Ŧü4Đĩ`ę­ö‹kļûĪo&ÍÕĢđĢÃēŖÛ9ImÚØ -‚ÃÜÖļąā\ąŗ´ŊŠFŠĖˇMPŋøsĨjVQŲŨŪjÛ Į–×Ķ8ëŠŪŅô+-D‹IļVkX”¨Yîjæ.ūhĶŪ4ļ÷7–pHs%´Fõãĩu6zŸcŖŽ• ēũŒ.ß-†sžšŽN…ļ—öMSQļ´v,mĸ˜Ēũ=@ö­ëßč×Ú:<–ĀYE F G<úÖ|ß ô9¤Qēí-”ƒödœˆĪáRøĘ} LđĢØę0$–Ō(Ž+EČ{CᇆÃēŌMmöio%2ų˙VŋÂ>¸ŽæšxCņ=ҟUK‰sNĘŖÂĄ“áŋ‡åĶNeģ6Ģ˙,ūŌØ>ĮžGĩ^đ߃´¯ Ŧ‘é‚d‰Æ<ˇ˛¯ĐÂŗīžX\ę3^Zß^ØÎfKgÚ$>ώt?éŪ˛û&‰ ÜĜŗRM`ë tkW}Nqfa÷@éTūxm´I$–Íl÷’™D-Õ°Žō°üEáÅ0¤z­¯šSî88eú͛᷆§ŅÛL6l!,ļō_#žO5,ŧ?Ÿeb-Iˇ´rčŒs–=Iõ=é’ü>Ōg–!4—2ZÄw-ĢI˜ķ×§zę‘hF NĻÉËFę ÷¸K„ÚļŽ÷ŅKtąŧžiĩb=ßJĶņ'€tŸÜ[˨<øvƈä(÷úÔŋ4­FÁ,Žî¯ĻF ŧÄîį<ú֏‡ŧ§xn mėÚf†E c–BĀééX× ´Šî¤–ÖöúÆ)^i6Š'­tځ§øvĀZiđĶ9f<ŗŸR{֝QEQEQEQEQEįž?‹u[]RÚd<š~éÁ­-Á—ڑjšũĖW3Ā› ‚5ũÜcÔgŠŽÖŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¸ŊSĀķÂC6ŋĄj&ÆúeTdܒcš hž=Ŋ„ÛŨkÖE!ďoŪ؞˙Ęē/ xnËÂÚ:iö[™A/$ŽrŌ9ęÆļ+“ņG­üA¨ÛjĐ]KeĒڍ°Ü'!˛Ų­*ÛüãõÆ ×đĮ…`đę\JĶŊŨõËnžęAķ? öÕĐQEQEQEQEU[6Ęōx'šļŠY`9‰rPûUĒ(ĸŠ(ĸĒ]i–WˇĪsm˛Âs:įoŌ­EQEQEQEQEQEQEQEQHIĀ ŸLŌŅEQEQE4ē` āiÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHIĀ`OĻihĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠhu'?ZuQER€HÉĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠĮņ&“uŦéMkg¨Ía!9ķbę}ĢĮ~>ŗÄÛí2˙Qšē[`y”đqŪēé>;Ÿâ ĩΛ;ŽŽKa†ŨŊō+Ņ5+ôŌ4yī§„ī`;♡jŖZŌ ŋÄŖ!OĨhŅE6@Æ'@rŌ{ŠÉ."ŗ‰.¤Y'Q‡učjz*†ĩŠ&‘Ŗ]ßÉ÷`Œž=p+įũVķÄZĮ„Į‹íŽ/Íä÷{aŠ;"ŒÎ^ƒ˙¯^ëáoĻđ–™&¤Ĩo2‚1Î+GPŧ]?OžņԲ…Ȩ™Ĩj°øģÃöÉæĩK•!øĶŪŧ›BŸ\˛øÔ4[ŊfæęŪļŲ¨#Ŋ{­QEQÕíīn´šáĶŽ…­Û/îæ+§é^5ãoxë‡O‚Mn ŲnØĒ–ƒü̏Ō4M§ ‹ßÃįMR5ˇb'ĄĪVũ+‚›Yø•'Ž.<9Ļj°]48NcÄi‘ßĐפx?Gņm…ŨÄŪ$ÖbŊVP#H×WaEQEQEW'âÍ+ġr­Ö‹â§ÃdÉ Bqį?Jķx›Į>6Õo­NąÖca;ŽHū•Ĩâx¯áÖĨbÚĨåž§§ŨɆ>^ÆAßû×ŦØ]Įaow|šŖ.F8#5bŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ŧ-ÄĐëšĻŠe ,ŋ`”FÎO kvŠ*ģqwg5š‘ãĄMčpF{Šđŋ Ã}Ŗ|smĩKĢ›X”˛ČNr ķų×ŊQEQEQEQEVvŊôú ôZkėŊhXBŲčŨĢ’øaĻøĢNĶīG‰å‘ŨåĖ"GÜ@ī]ž§du2âĖO$rķ"l2ûƒÚŧ;GˇÕ4/Ž6Ú$ē­åÕĒĘ%˜‘‚šéŌŊōŠ(ĸІîsi4 #FdBĄ×ĒįŊxŠmuo üHŅ4čõĢë›y䍈y?7Ũô¯ĄG QEQEQEQEƒâĪØxKIkÛŌYÄŊ]ģ äĻņgcŌŧúE’Øy~gŽL…zį'Œâē}+ÆznŠáSŽ,Ē‘,eœ1û¤v?`ø{ÄŪ'ņM´Úĩ¤v–Úr“åD뗐 ōOl⚆wm¨|Y×n¤Ü˛ Ąįmt:ĪüAĄøŪĮDē°ˇ0^¸Č8ÎôǟĩOŲi%Ž=:Rä'æ9ę>•ģāEĨۍ^ÎŌßMŽÜhß,xâĢÚøŋ[ņvŠ{oáŸŗEkhv4ķŠ;ÛÚŽxWÆw÷×ŪԄqëv™oܓ҇ Î8ŽVīâ?‰´ŸßÛÛĘYq’ŋxž™ũkoÁŪ:ÕĩOęÕĸ‡ĖˇMááRõŊ&šOøŪĶÁÖ1ŗÆgģœí†q¸Ö5īˆü]Ąéq뚜O§Œ4ĐDøÔ÷ĪĩAãÍjë\đ×Z*C5ŒÖåĨwlãˇáŸĘ°~ßø hZ]’h°žŽIo´— sôíÍ{MyŸÆw[Ņü= °ļCg*íšvnW<` ‹á įˆ[BąļŧĶc‹K–Šu|ŗ“Ī#ĩr×w§NøųrŠįMåm†1üLGēø>%jŠ­´_i‰möŗˆ$‰‹}Īję<_âÛo i‹1_:ęvÛB.ĮĨr:‡Œ ęļÚΞu 2;}+R“eŠ,|ÜvfĢŊÔ5 ].Æ[Ëɖ("RĖĖz ķĻņŪŋũ§§Ũ{h´Ģû•†X9”ŸŋWüAņ }='ģ°ŗŽm:Ōa Äō>Üą8!|w­Ÿøš<5āéuČHÛ‰đIĮøŌx^ÔŧIáxuMNĄ–rJ,]6öë]EÅ|UÖΉā+ųļÍ8ōc#ṎøC­h^đ{>Ŗuä]]ĘdpĘyã…RņˆÔ>+ø‚ŌĶJ˛‘4›3–ē•Jƒ’2Wđ­wvŪ'ē–fŅÕ>‘ņ6Kø’[&Ž_!c'jģž>œŠÍÖŧuâ Ū鍨Mmxˇ§L0‘°qß<žkÕ “ΡŽ\cz†ĮĻEUÖu8´mīQ˜ŧeČņ\Cx§Å–ú)×䲲¸ĶŪ/5 €č1ÜžĻˇn|_™āh|EâVōĶŠfčĸ°Ļ×ŧ[eáķâkÆąûŅ+YFŒYP˙ĩžN=ĢĄ—Æē\^ >&2˛y^`äŸOΊįŖ×|Ywáįņ4f†ÔFf[6BYzœđ ĩ'Œõ-WĀÉâ[ÛĘęĨĨŽbxĮP1ß9Ŧ |CņO‹ôÖūĖŌ­Öæ"i$b@čŠĢz/ÄŊG\‚M6ĪNG×â‘Ŗ’2؍qՏ|U˙ øōōãÅsx__´ŽßSUßDIWZŊĢøX—Ä’hš Ī5ŧK,ípÄd€Tņnŗ¨øÎãBÔtåļû=ŋ™#Č$ž0k¸Ž{Å÷z垒ŌhpÂōíbī+c`Įzוü#šņl°^]ZÅk<7WĨŽĻ•ÎāxÎ+Đ|]ã94ÍRĪÃúBĮ6ŗzpĸLí‰q÷Ž+*÷Ś÷ƒ5>ßĒ[ŨÚŪžÁ<)°Ąô5čņēËēU†Aęđ+ëÉ4īÚö[x–[–ŒМd•ŸÂģ[ŸëžņVĨkööÍ ņÂKcé[>8ņĸøU,íãDkË×Ųšp€ú“\ũĪŽ|EásMļņ$VRŲß°Hįĩm'§Zę€WxÚ{›Œ^ļŊQæÃ2ntā?ÍÅ{íQEQEQEQ^ ņô]SJ|ŸŗTvÜ+ŊļŅŧMĒx]-_W˛Š  ) $=ÍyÖŖáŅá·ēŪ›gŠ›ųb|ČcR6w=ëŅ~É|4ąlŠUV$gŠâž]EuņgÄ n¸ˆî#=šíZ›â§…Аc ĐAúÕīŽ˛Æ<+g“†š\×ĢŠjrÁáM?Iˇ@Ī{f@“ûŸ)9ũ+œøģ4]J&âXį"@zįđŦˆŖšŸöŠžKPÉ´&{eGéČ­čÚßÍāCĀôãŊzô:m”Ou ŦIq'ߑToŠīVĢÁū5$ÉãO"Ÿ˛‡@ ÎŨۅzWYÃmMÛ~Ęō¯:đt/Á InŒ]\ƒí†˙ëWođåøuašKpNkŧ¯<ø×2GđŌũXāČČŖūúūŋ§đﰚGƒ<-lˆ$’ō41ōõũ+Ž´‚9˙hëļĀ"(÷°?ƝņUsņ+ÂûG%Ā?LŽi>-ŲN<]á‰|ā‘,Š€°ųTį¨íÚēø;Vņ†æŗŧÖā[BAûŒ• ƒ×5Ŗđļ­ük Ŋ÷ÛmãfXæÛŒ€kŗĸžqø§Ģ}›ãEŒž_žmcl`rO$å^­ā¯ \C,ž ֎ũVķæÛž!^Ę>•ÜW„ß^k2øš5­–֏ĖÎÔcÆâ=ĢąŌ4 7M×.tۙĻŊÕõK\]p|´ūî;oūĩr:„'Å?í4¨û•ŨéĮcÛŌŊ&ûáöƒ{ŠOŠ}—ŗāI6sĮc§a^o<)âߍŠe oąi„“a v?EŽ\MâoÚ+Ķ40MÃp?Ė ĩņ _ģņe߇´22-īĻg ė@“aî{/S] đ垍ĢX_ksŊîĄ+ˆm ŒáaĒžŨĪ?…sŸ,dēņām<7Ų¤>vĮ,3ÉĪįGÆ+Öē¸Đ|hۚFC(S’×°hētZVicmXcUĮáW蝸é&ŖĒhžļqžy<ĮQדũkÖô&ÖËGĩ´DËj9@{V7Ä+ét?ęזŠ2ÂBíÆxĪZÂđ%ēøOáJ_L O[F×äûđm`"SÁŽ+ÎüoŖC ü%†ĶHģ{ÛhovÍ#Ž ŸĀ+ĐtķVđ]”gZu+ĸF¤ p3ŌĸxNĪ Õ,,īÚæW}ėGËĮN+āhA⛉2×.IöŦ_„‘Šø‹âÉsȗ^Z’éÁũ¤ėĀ'""§Ũ5ĄâŋÉâ^6ƒĢK§kˆŠã:Û/žmŲĐy2mČēø1õ=>+­{Ä-ėŸĖ ‘…=}k〇ûÃҜ˛´Č#¸ôükԎi&“‚Ö'–|ÂÅySˇˇĨxĮÂĢ]Zį_ņ A~–w^~eg‹{7'ŽOēŲ<ÚwlĩíC_3j3ūę8RģĀ8?­b|!YbøâĩšČ¸2!瑏˙õĒM˙|7rņ4eŋīŖūëúæģ§xwL“QÕ.Ņõb ÉėMEá˙i~'˛7Z]Ā™áąÔ×ĸŠ(ĸŠ(ĸŠ(ĸšx2ׯš?Øį*T;ĸ”ēkšąđ÷Ä[;UŌŋĩ´˙ą/Ę.&ßÄõޝGđ}†—ŖËc&nšã&yeČĮŠöŽvĮáĩæ•#ÚØëĶG¤9$ÚŒžŊ*†›đŽ}ďĢišä–čî Cŗ;—¸'˙­Vĩ߅×:öŋą.ŋÃŌ°ĻøKu7ˆ¤×?á%ē[÷ãÍ8˜¯EĶ-ĻŗĶmíŽ. ÄŅ V”Œ>ĩn°<[áK?éÎį)"đĘŊcaĐ×&Ūņ>Ŗa“Ŧx’9´ĩĀdŽ<Š:kg_đ;j^M Nžû MŒs¸UøQđt‹öÛ]éę…D ˜ ×u\ī|-‹ü;6—,žYo™ûŦ:åŧ)đ÷\Ō%õ-e'1ŦcTųcČĀfõ 3Uí>kVž-—Äiâ–ōNų]ŧ {p:ķŌ“Äß õ˙ë–zŖëŅ ­b>OŨūYŽ—\đ[ø“°éšĨŌŊėDēpAŦ<ãkû!Ļ^ø’°ÆÆ1FDŒž™íÅwšiáũßM˛M°B¸ūõŖEyŽ™đî{‰:‡‰õŊ’¨|Z'^1Á5é@0į:Ÿ5[/Ükžšˇ‚KÄŲpŗ Œúzé<9á“ĸA<“Ũ5ÖĄqˎ,9Ī ôŌ˛|āđÖŊĢę÷bæâūBĀãW9Åv˛Ą’EmĨ”€}+đWÃØ|#¨ę:Ŋ{ģĢÖÜō8ÁįSTøb—ū#ŧÔĄÕ$ļˇŊ . 9ÛēŽ•wÄŠũ´ËŊ.eŗŋĶ0-œŽT/LôĢÚ7†§ˇžmKXŧûu÷đ6ŨĢôQUu¯ WĖúæ—7Öņ˜K0ß´}ūĩpēNuΌ2H’=ÍŽ’ŋžš8ųį=Gáũ+ÚhŦÚø†ęŪđũíŊŦķ#Jģ˛=ĢÍæøKâkCâüAm5üdī cĻkÔėņ!]ätÜ}=ĢĨ—F˛“D}#ÉQfŅŧŧpŽ/OøuĒ[[ÁĻOâ}#˙ŅĻÆeūé>•ˇâĪŲx¯CƒH’âKKX\6ØT|ĀtÖö™§ÃĨi–ÖĒ‚1įĐ į|SāˆŧAŠZę–÷ k¨Û $Æ0ã˜?ΗJđdkKŦęú“j7ŅŽČ‰Œ"F;=O­u•â øÃ×ZZĪäĀf3Ž}+”‡ĀZæ•lļ7ˆÚ-=—kĮ4aŲG}§ķũ+z×ÁZd>>•LöĖ rũK˙sÖŪņ%´gN‡ÅREĨŽD@žßî†í]d^Ķ#đņŅ6Ņ”Ģäļz“ī\¤5ģ fĶô˙ËšIÛ˞@{VÕ߃Ĩ˙„Ut=3U–ŅK~öbš@zū&˛|5đę˙ÂēuŖŸ¯Čb•NÄ0Ŧ‹˙­Us’z~5ZO„úĢxąÆsmo{O÷ŠâŊ ¨Žĸ’kY#Šc Œ¤,€dŠõ¯7‡á,ÖŪ!—\‹ÄˇŸo”üō×$z{TēßÂÉĩŨR×Pģ×§3Úļb! ôüĒį‹ž˙ÂJÚuÔZ‹[ę6*\ÎqĪ VnŋđĻã[˛‚Yĩ§“V…ÕÖáĶåėĶņŽŗÁū“ÃzSÃqrnnįËq1.Ūĩ^ÛÁąAã˟–Œ´°ˆÂä_å]åœö’ZÜÆ˛C*•t=ÅpP|<Õ4ieƒÃÚķYéŗ>ãnņī)ū鮛ÃĩđÕŦĄ$yîįm÷2}éü=Ģz°üUá{/hī§Ū Š ęë\nŸđãÄTzvŠâg›HŒÜF˜gQŅKWUâ?ØkúeŊ° m0mĨQĖdtŦGđŖŦ^YÉâ=\^[Yžčíãją zÖ׋|(ū&Ņ×L‹P{+|muD š}+IøuuŖxyô[OŨĨŠáqåTõķĻøWá§ü"‰{ ļ¯4–×jCÆĘŽ´ēÃË­ŨaŅ5ŠmՇīw¨`ĮšĩléūM3Bģąļģ‘nŽØ´×De™^+7ŸĶÂwī-ĻĢ<–Ō’ōÁ"ƒŊ|Ņđî7Ö¤ÔtJ}0ÜĮĘD}3ĐûÖU× fņkĨŜ¨~bqԜõĪzßņGáņ’-ÛÛj€î”|Ũ*ޟāMŽĸ“]×¤Ô ˆ†XmRGBŪ¸¨,đÆ§ŠęWūkĢ›ųwîŽuųR:׎ÚÉ$ļąÉ4F)AhÉÎĶéRŅEQEQEQEQEQEQEQEQEQEQEQEQEQEŦøjĪ]Ŋ˛žõ¤d´mël+7Šõ­…UE  )hĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯?ø“uâŊO›WĐīĸŽÚ÷IĻIúUŸ…ž!Ôë ķ˙†ž7ņ6ŋâŨGH×+ö0C„^Cé^šEQEŲ7ųmŗđvįĻkĮŧCãoxkÄzv›|š{Å{0TxPä Íw^:ņ5į…ü#6Ģeh.gPSĐÜŌ|=ņ÷Š|+Ĩ¨[yŗWiÜWUEUCŠŲMtã:ũŦ§˜"Ī;}jŨQEQA ž‚¨izŖŗ ŗXÍæ¤r4LqŒ0āŠŋEWâj7~0O čR¤7 žæå—pG`=yŸđĶÆzžŊ­ęēeøiá´'Ëē)ˇv0k͍ĸŠ(ĸŠĨeĢYj3ÜCk:Čöī˛P?„úUÚ+Ëū'ø—Åú&­ĻÃáëV’ 9rąnÜsĐúW¤XI4Ú}ŧ— ˛wZEôlsV(ĸŠ(ĸŠJķx›ÆÄ›ë+Í=áŅŖ,˛0{æŊ:Š+?NÖŦuYŽâŗ›ĖkY<ŠxčŪ•ĄEQEã|Cã ø†ČÁĒŖŲ_\mŠ1ųG÷¯aˆ–‰ ’ š}!!T’pÉ5GKÖlu˜Ļ’Æo5!”ÄįÃĩįž6Öŧmeãũ6×G‚CĨ>ÍÅ!Ž~mĮĩz‚n(ģžö9ú͍ĸŠ+/W×ôũ íöFVē”E9cZ”QEQEQEQEâŋ/…Ŧíė.nՉȀgn=k’Đž4iô’Áo§Ū •á" ¸ąü*ũÅM*[››Kø'˛ŧƒŸ"D ¸öõĒō|V†ĮS† WGģ°ŗ¸8‚ęqĩOÖģ›ÍVÎÃMmBætŽŲSyv.uđÄZŪbڊH7Đā¨ÅrÚ/Æ8ĩŊ2yāŌ¤11Ė;ŗ…%‰í[Ú7Ä}+RđŧÚÜĮɊĩÁî}ǐøy˛jwZ Đé ØûIqBW°­O_[^ü:Ô/"}đ=ąe+Îr+ á+˙gü-Žę8ĖĨwļÁÃ1‘ņ|jÚĚTZĐŧŒáŖČČũjÍ×ÅCiĢ)ŧ9Š=ņÁĸƒĮ­z.d…Ŗ2‚TõՅâ¯>ƒdŽš}Íá”•Ä ’žõãŸÕ܃ĐŌ× wņTš˛Ņ´›SėļâHH[Ķ“Öĩ|%ãM7ÅöĶ=t–Û,O÷ûԚˇ‹Ŧ´ÍZ&8ĻģÔe]Â@ƝŠ=ĢË~&ęÂûÆ>‹ėŌ[Ü%ĮÍõ#"Ŋ7Äū+Ķ<9hŸÚ–ķÉ‘îbąnP?Ú§i>*Ķu Á#YFŦV4L1ĐU âF—â :úöĘÚėĨŸ!æĪ xcâF•ânm&ÖŪę+˜Tŗ S­j^6ˇąÔ'ŗƒOŧŊ{|yÍn ĒΞ;Ré9Ōõ¸u mv[Ũ(ØrN:ÜכiĄšø›¨j7]č@ Š! .9ę}:×oâ?‰úg†$‰oė/”JŠĘū_ËķtõĻ\|VŌ-áŠäŲŪĩ›åcĖh}3ßņW5/ˆšuĨŋeiwŠ" ‘ÚÕ7*)É=+[Ã^(Ķ|UĻ‹Ũ:BĘOT>†Ģk~-ˇŌõ(´ģhûQ‘K x˜eGŠôĨŅ<[mĒßËĻĪ–ZŒJ­åÆJž„Ö°ī>+é:ˆ†wgw Åö‡u‘ę=Ēđø‰ĻGĢ[ØŪZŨÚ-ÉÛo<Ʉ”ûTž<ņLžĐfžÚÂ{§xXĢÆ>XøęĮ°Ž#á/ŠîF“m§.ōfšžKŊŸģÉ<œ×ąÔ7WPYZÉss*Å jYŨŽZâáøƒu{o.Ącáëšô˜É˙JÜeJ¯SĶ5ĐÛÜøwûcLīŖ+šRX׉čž,žÛâŪˇĒöyĻoŲc\ē ĸŊßHHÆ;˜Ŧ–ŅįPīÍŦŋŊ_ĸ¸SĮ˛}ôOéãTŧ…wN|͑Åė[ÖŽx_Æqëˇ×šmÔ+k¨ŲŒÍ¸eCŪ¨ÉãËŊKWģ°đ֖琺;g•ĨØ úÜôĢú7aÖloüģ9SR˛Č–ČũũðŦ ;âíĨíũå‹éWPŨ[ŒX|îįĸ€;ŌŠņ\iĶZč÷r^Z1ŽHPnÚ@ęHč+–øU㠃%ËK¤ŪM.ŖzYå>Hō{ŸjôŊoÅņiēŦzM•ąŊÔ]w˜UÂí§5SÃū>ˇÕĩŲt+Û9,58×w“#{õŒž"Zø;PˇˇŊĶ.eŠbN€mΧ&´üEâø|9ĨCŠMcs=Ģ wx†|°q×ķŦ‹Š7ÚQÔ,4ģû¸ÕwH"LųkęIüđ+Ŗđ߉t˙ik§HY3†SÃ!ô5ąEy§‹ū+IárkK æK8ąū’2'Ķ™=­ĖJKų„qŠĨiR_5Ž>Ōû‚…Ī8§'†Ķ HfŪ0ų#ŸÖ¯x߯ķx6Ú;ˇŌŪæŅ€ĖŠØÚŪ•KTø¨éūĩ×SC2G62žo@qŒzõ­´ņX´đ“kēŨŠĶĀRŪKˇNÔ×='ĩÛ]-uÛŊ&ŒpńŸŧT=¯ëŽĩŨiz•ļ¯ĻÁháā™C)­3mFlg8ëį˙xˇ[Õ<{ŖŲIŖO VĶyą[Ÿŋ.;ײišôŌx~][X˛m1cÜY$9!G~+™ˇņ§ˆ5ģ;[DŌĸm.-ŪY™°ķc¸…ox3Æ6ž/ŌÚâåÜDvÍ ę‡üŠéhĸŠ(ĸŠ(ĸŠ(ĒZ¸C¤]īûžS*ņ_6ōëZÍđU,‡}‰¨ŧNVļåA]ĢŧSø×Iņá!OYąį*‡đũ+âŊÅŌ|6ĐŌ7cDƒÔWOaiâKĀņiļöV)o-ˇ–ŦdėG^jßÃĪj^đ­ūĒ\[Īåīeōd ´cĄôī\—Á=.ÃPļņ ’-ë<Ígē˙’j—Æ-"ßÃNĨéy6RÎYĶwŪl÷ŽĒ˙MņnģāõŅb°ą[i ˛4ĮĨA}ĸŪøā…æ™sŌÁ ŅžGĶ5ĩđn ŋlŽíÁ‹{÷¯=ņÄrx#âՏˆrÚŨ0‘Ī×ô¯JđQ]kUÔŧDĀ2ĘÂ(î¯Ī5ÛÔW_ņé7ũsoå^5đjíFąâ…Ųķ †eãžMGđîâãQøŊ¯Ë| MUwpUAãΉ—RØü\đėļĄ„„Û{‚zS>$"Íņ_Ã%˜Ļđ¤íãņ^˜ūŌ$ņL~!dczˆũ“Ž:WQEx×ĮÔ §håcką’8ĪĩzN—¨ÛZÛi–36ÛŠā¸ë^]đ÷M‰ū1x’v>a…˜¨aĶ-×ôĢ+hŖøņĸ¸o#’=NzÖGī.ī>7i6‘IJ‹` Pŗ`3`ŸĨmüKŌüUâ2bŅŖļKiO3í–:×ĻxkÎĶ…Ã+L PåNA#ŽĩĨ.ß)ÃĢ´äú ņ/GecãŊmü.'Õ7îd1ąėO$ķíG‹ŅiãOÉvÉoÜ~ķåSšąøTž¸“PøŨŽÍtæI#‘2:(=ŋ*‹âÔ ~'xZE ;8đaÖŊ â*!øi̇Á?d8'žqY_¯ÂË]Ę2VOÆšī,$o°ėįߓŠ< !üQˇ;öž1ĐņŸ×5ļ|[ xŗYÖ<0ą_iĪ&g‰ŽâŽĮZĶø[â85ojđΧ5…üā<…88x–Š>-ßûĪ-”r3éŠoĮ&ˇÔ<msnčĘ.—kcr§¯XCmđ>x„JéāāŒķŠgÁĢ4_†ą;ĻLáˇ3|Ų‰đD˜îŧP‘‚ąGrB/Ļ ˙ëVoÃÛũJ˙⇉õf&š.Wlˇ`ÉÆ?]>ĄáŸę4¯Įk ´1 ŽáVläsū5‹ņ&Ū¯‹ū†XĻė÷ųĒĪĮ’"Ķt2ĒĨā!ąĶŽ•ØøŪV? ĩ91–6û|Ŗ5‹đįTĩĐ~闓ŖīåáG%‹`WĨ)Ü úŒ×—üvšē‡Āéš`’ÎRjé|!IđËMΞ8ę>īZáūŨNđ떅Ũ­â¸ÜšÁ=j? 0´ˆT†ŒäØŊĸŠŖŦË$-ė°˛¤,TúWüCwˆngÜgž`Q×üMmAāx<qâ-^ËPk‹û›g1BÕ“XW\o \K§}Œšc/žÄļī|WAáęē'ċÍ^öú×ËŋFco9$tü+žđƟ ×ĮŊj@„Ŧ1r:5čW>Ķ<; ëˇ|^\ˇQŧ˛ŗ6yÅrŸī-tŋ‡ß\eQ'rė={UMz=.ãâíÖ˜ˇ7ZŒj(‚įņéUsrß´ģ‰D‘û§Ž~ĩĨņá´=įįûrŒ{`×U㯗á~ 9ûîÖ_ÂëˇøUåŊŠFo~ĩ‡đ!™mõ؈ĀDŽ8ü+Øh¯9øÛī‡o„’=ĮĐns–vņ|%†(ø‰ŦË1Į<ŽOÖŧĪáîŖxŸ [ZÁđūŲmĨķUŨËļ1–'Ÿđü+“øk4Đ|Yņ5šÖÎîį¯ôĢ:6ÁûBë swā-?ãU¤WŪIŒaZč) ü@‘šÔøÁg|:XWljށ9۞Õĩn@øM‘ō–2ĖØękšøEsđɯfV(%b@ęyíT5Ë?EâŊCZđuĖsyŒ>×nO!€éî*o†šũÔū2ŋļÖtĶcĢ]EŊž]ĄÂú õęāž2cūž§“š˙Ą ­ā/ izŋ­&ÎūŲdŠE06sšã.>Ũ˙ ķė–ë‹hBZ,ßsnŪߎkŠņ§„|IâI,.n.ôûQe(q*–Î3ôĒ˙aˇ—Pđ˛Ī(ķueᆠŠģņmt9´}:×T3›‡”}–8~ķ7W5ņ<ŪÃáoGy @‰qÔ \€sßë^“â+ģyŧ Ē,3bŗÃc¨ųxŽká}ũžđŽÖúem)ÎK`:Ëøą˙#׃A$Ė}ąČŽ˙ÆÚ*ëūŋą.ŅĮB:W–ü9ž¸ņ›Ļxj휝:åžAŸáCōƒø˙*Ŋņúk…Ōt¸QąlfŨ"ö$tÍt—šGˆõ˙f+X-ŊͰ]ų<:Õī†z%Į‡ŧ0tˋȮZXˆä(ôŽÎŧkÆŊĪĮ}€ōĄWūuĐ|]ž2øSˇŗ”´‘mĒį…=_ødСÂũ/gÜįv=yÍy—Áļ¸uu€“hË!qØ|˙.}EQEQEQEsž0¸×bĶ Z&›ëĖĨ;í۞õį?ü#ãßÜĘöVM Ķf@Ķ`¯ŌKĀū3ŋņÄ~(6Ö đ/4üÃ×Ĩ^ņ߅Á<¸—wšĮ&ļëÄrkQé˙ņ$‚§' %l+Ī~ø;ÅūÖong&Ūöc$ÃyÜ 9ãŠÔÖŧ'Ēhū+oxr¸šUŲ=ąmģĮ¨>ĩ“āíK\ņjxŖÄļņA,KļŪŲw—ęO­sž0đ‡Ž5ŋ[ëYÚŦˆ¯›’āz×ĒxnãWšŌ•õ›UļēÎ +gŠØĸŧķâ߄u?h–ƒIU{›YŧЄģķĒūĶ|S=ŲÕĩm:+yí-ŧ›[bųÜÜrOjĪđ—…|cĄøĶPÖī-ėŲ5|ÅI ŲÎxâĢëžņĻŠãËO.Ÿd>ʁV> =ņīZŪ9đFĢŽ>—â-9"‹\˛ÁhAáũƒž´ËŠüuâģcĸÜh‰ĨÛ¸âíæ @î^kŅtË´Ŋ2ÚÂLvņˆÔž¤ –î´ÚKJųˆW דøOĀž+đn§¨ÛØ5”ļW­Ÿ=؆O|ĩ_Mømâ-+ġņE,i—ō¤’܇āäŒ}}ëwQđ†ŠĄxĖø—Ãđ%ɞ?.âܰBO¨í\÷‹ŧâīx‡N×[‰āmŪSIÂrO\×oãŗtŸ uCz#ûH´o3aųsŽÕ[áyŸ tä'†WükCđŋŠü¯jđé6Vķéˇō™#•¤ b΍ÅTđ§ƒđŠŧk”>^ŸÛ8“sHNãŽGĨu'DÔ5¯\č睗oq<-bmÁGc\w‡üâ•ĩĶt=Q-“KĶį ˛Ōí9_å^´JÉņ'‡íÍ;ØĮŌēhšĖwsęúíÄSj/HŖ‹îB=k‹Ņŧ%ãmÆ:ŽšVŊéÃ.üęWÖmŠhĶŲ̈́yá(øäGø×–øgĀž*Ķ,ŋá¸{TŅūŅįIp§.ęvĐgÖŦ_xÄ:?§ņ€`nP̤ĖAĮøUSĀ.‡ÅļŪ$°šÚæíã):ģí ¸c`+Oƞņ‰4Í*ÎŪęŲE–×g•‰.ā{™&ˇuÄ玂G“ėbîá)]XíEÆĻĒø{BņVƒāņĸ*XĘčĨRäpG9Ŧī‡žņGƒg{{ˆėįļē˜ŧŌ$ŋ2~˙8¯PĸŧûãLŠÃKāį–’0ƒ=NęĢā+MjëáŲŗĖF9í@ļ•Ũ$c};Ö˙„ü aᯠ>@™Ž72ãcÖ°4Ŋ ŞŠįNŅíí¯4÷‘š2M­=kø;ÁrøbÆúéåŽ}jųŒ’Ęßtsė 5Íéžņu—Žæņ<—š{Mpؑvđ8ü­ˆ> ×1 ŪÍl48î"ŸžE!GĨtZw†uŨ#W×5‹g†[‹ÉɡwÂ>˙áVtjŌxüE¯4 r!0C !œ’Os]yįğøĢÅ0>•Ļ=ĸi˛ .d'vāj×ÃÍ'ÄÚ ŒzN°–ŋbˇ‹l/Ëžôßx"ëUÕm5ũXāÕíxS'Ũqči–ēOŒĩÉ`‡Äocoa’;bYĻĮ@}cøĪĀ~+ņNĨkpˇ–Įc.ëeRŲ 3īÅ_ņw‚ĩŋizEĪ™mą§Čü‡#ŸÂŠxĢĀž'ņG‡ãˇvĮP‚Exc„P:ō{×E øRū? ę6ZÕÄr^jųĻ/ēœ`\߇ŧâ{(mt[ûÛAĄÛOį~ī&I0rĩMãøŸÄŪ#´Ô­/Ŧ!ŠÁˇ[FûŗÛ¯í]î…§ ZËÃ%āHb.=̜đo‚?áņˇ¨ļ?Ķ&-ĸžk_Åū´ņn‡&Ÿsōąæ9åMqúf•ņMĶ“C‰Ŧū΃Ë[ÆbX/Ž+¸đŪ…‡´„˛G2>KÉ!ęÎy&ĩëÍ|wāŊj˙Å$ĐŧļLsÆļ´? \ajPëōGqwŠš{šÚŧú` åė|/ãYMáí[94Į-å\ČÄ4Aģø×YāOÚø3L’%“ĪŧˇĪ9,}ĩu”QEQEQEQEQEQEÁü[ūÜ_ČúΓŦ€šƒ;ļûbš ÂCãTŅlĩ{¨m4Ö\ËrĨLîĶõ¯iĀ´QEQEQEQEQEdøš[ø<;}.˜…ī&1×8¯Ķuík_ø{¨čWŽ÷zÍäŪZC°æ5'ąüëØŧ%ĸx[OĶ?Š€l{ŊmŅEQEQEQEQEQEQQÜKä[Ë.ŌÛļŅÔātŽOEMgWÕFŖxīok~î>đŽÂŠ(ĸŠ(ĸŠōÚĖoáÖđũŊŦ÷͞8 !W>ĩĩđŋ]‚īÃöšGŲŽĸš´ˇ_4Ë P{u5ßQEQEQEQEQEQEQEQEQEQEQEQEQEQE„ ī@t´QEQEQEQEQET1Ú[Ã#I#ˇŪe@ üjj(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļ”RrTęE(E_ē }-QEQEQEQEQEQEQEQEQEQEQEWžøËâ­¯ƒ¯žŪãIŧ™TãÍUÂõ5Öxk]Äš ļĢMNģ‚ąÉ­EQX^$Ŋ×ŦĸôM>+Â[÷Ģ$›p=Ģέ~7Ėž&‡DÔ´#k3L!vķ3ĩ‰Å{`T0<œ×–Ũ|dDņ\š –‰=ÜÂSlo#¯á]ū™=Œ—–ž,™FD~`sŒdôŽCÁ˙×ÅÚöŖĻA§4bØ1ŽBOÎqŸJ¯Å;Ĩņŋ‡/t-Ļ™đ˛4™yäU˙|Nąđ~ŊeĨOlķKq´ŗ)áœfģ¤pņĢô 3Í( Œƒ‘\•ņKMÕŧm7†ĸļ˜LŒČ$= kŊĸŠ(ĸŠ+ÄZƧ¤‹s§h’ę~a!üšBy\õ˙ëWsņžę×[]ü38ÔY‚,F@2OŊt×~0×tËŊŋđ´é ĪåĖŽTwāV׆|UĨøŗMēdÛ×øÔđTú[tQXž&פđö˜oSN¸ŊUÎå‡QęsūxŦ˙xŪÛÆÚmÅíĩ´°¤2yd?sŠÉĐū*Xkž7ŸÃYĖ lĘŗ„¯^+Đ(ĸŠ(ĸŠ(¤,HrIíB˛ē†V §AČ4´QEQYÚæŖ>“¤O{mc-ôąŒˆ"ûÍ\ŋ‚~"/Œ5këĻKe%ĸ‚ÂFÉÎqŒTz¯Äû-+Į1xjK9]˜Ē´Ēz3tŽņ˜*–b’{PŦŽĄ”‚§Ą­-QEĐę\ a¸rFyę(ĸŠ(ĸąÕŖņÆŽ~…Á "0qčHæ­øÄZNā=&-Nö+WhU‘ų#šī,u MJŲn,įIĸnŒ‡"˛õŸi:$‹ ÄåŽãɍK?×ŦčŪ"ŌõčLš}ĘÉ´áđĘ}=+RŠ+扚IKÃĢ[ ]ü‘É'÷NėŠ¯j´ņ$Rü=TŠPî-ÂõįÆ1ųא[Øļņ¯FWeG+0_t9<û×Сˇ0YŲMqrq)/ÆxúW5áMGÂWˇ)áãmö“ķMåŽņŽ/ÅZüyЉv!įō5Öø†÷Á\€ë2ÚF r7Ģvã¯Ĩ^ņŠ4ī øZk˛+Ė„Ŧ™˜¯Ŧ¯†ēíœū °Š}M'ž1ĨRŲuN~•gHŸÄō_éSXËĢM÷ŒO–>øŽƒW×ôÍ õ¸āķ>ācË}AŖøĢEםŖĶīŖ–Eę™Ã~UŗEQEķ÷ŒÆßÚLāu„Ž>ĩÖĐi7Ov萈˜ą~˜ÅxwĀ [ßí­bņVA§°Ú­‘ŽxĮá^Ŋãoé—_gģÕ!ŽL…9<zdÖˇöŸöyŋĩ¨]ūjœŒzÖu‹ô EĨ[MRŪS“ ÷WÔûSäÔė5"øi×p]b&Ëp@8ī^{đ ‹jo+(/-Ø`søW]ĸ'‚äņ×Z;Ø>Ļā™ D9ëZúŋˆô Tę7ąBXáTœąü)ti:ęšĶob¸ØpÁO#đ¨5č]÷دuKxnrÛgĨK'‰´HŽ’ÕõKUŽfAģō§j>$Ņ´™#ŽûRļåûŠî2kF)Ŗž%–W†U”äY:ĮŠôMT‹RŋŽd!äãč*ŨŽą§ęvFōÎî) PK:ˇsU-|[ ^ÜũšÛVĩ–lą_ž:˙*ąg¯i:…Ã[Ųę6Ķ˧4…s˙(Ņŧ<ņ&ĢĢJ O0ã8÷¨ƞK8îÛVĩÉ÷[xæļ-níīm’âÖdšWCEeęū*Ō4IV˟߷HŖ]īõĀŠôŋiē͛]Y܍3ŧ7 ¸ë‘^aĒx˙CŊø­ĻãPXė´ø_Ė›v˜ö¯XĶĩ+MZÆ;Û)„ļō ŖŽ†­Q\ū¯ã]D¸k{ËĐ%PK")bŋ\UÍÄzWˆ`3i—i:¯]§‘Z”VNĩâM'Ãâ#ŠŪ%ŋ›÷7wĒPøķÃwM!x^öÎâîV# šFĶÃZeÜPCq%Ē•n;šâ|0æÃÆ:üZ•ô:šfaknža^‹—ĩXø=Ŧ=ÍÆŋ¤, ĨÛ˜FÜ<ÃųV/‹´[iž5č֖ą‹a,A¤ō€PÒGĩŨißãĶü{sâ4ēD°ųKjŠ€ŧũ+Î|Q§Å❌Únϐ °ÔHHCt˙]§†ôo|BžÔÚĘ7ĩ˛#Q°myNXŸr?­zJ€ĒāK^9đŽDoˆŪ0ÜŲs(Į>æĢxâÖ o^0@‘–ų˜ œžkSãŊĩ˛xRÚķėŅ›Ÿĩ ķvØįŒūUÔÃöOxMjÚĘšŠÃÍbĒb8?pŸ uÄ}7PÔī­.¯oo.ä‘"/øp:t̟QÆúíœÚmĖ5Ķ4Фđ”^ž„~•Ŗhö×u;E‰EŦ`9  ķŌģ| 6¤øĒ[MH$úĻ÷GbTGÔâ¸8nmSáEö“r‘j°FäOl›’•Ī|°°ŋš×îîmá›Éžo)ŨAØ==*ˇĮk;04K›hbûL×9ip1Ž{Öׯ ?øUĪvđĮöĨXvž<5ŅxfÎ Gáe„ÖÉ,FÄ|ŽšÛ^eđŸÃø‹@×­§qå K Á ū!úT^2Š_Øh> KŲ e\Ę27ŠaĮ¯á]'Ä)tÛ¯GkĄXN5 rn#ˇe+‚;ũ+ŋđ-ũŪĨāû ‹čŨ.vm8 äwæē*§ĢČ"ķ##É~ūÆŧsāf• ũž§sw r$7,ˆŒ āœ,~UoĀ›Ŧ~4x—NˇųlÂīށ¸íøÕZÖ}?ãö…Ũė2Y\DZį|„tÚ¯QŸÎ˛´[_wZFÖļķÂĄ#ĘįĨl|FŋÕŧ9ã+Mr 1ĩ #mä•vܓŠĮđ‡‰´kâ=ĩũŧM§\ŧF9-ŨHŪŪ ũ{ÂüYĶí.|Š\Ím“Ãcr>eįąí\ŋÂß X\|2’îîÜM$ŅÉĩ¤ųUĪ‚—˛¯ƒuA#–ŽÖåÄy9šĪøCp|EâŸëw§Í˜Čwēš<ĶōĨÔneŅ~8ĮmoŞĨ¤ņēÜŖđĒZNƒĨˇĮVÅ´ø šĀ1@T œ}kŲ´ß°Gj-´ī$Aōü¸ą„#ļ;UĘJņ/ZÉá߈ē Ô.cÔ#š L11ÉĪNÃ˙ÕOølĐÚüRņ*B>Īhw–į9¯i2†R# Žôĩ‘â=Ī_Ōn-n`ŽGhŲQ™rW#ĩx—ÃĢģmOņ6ƒ¨[#ÜZģlFsž€s×ĩvÚ´ü:øQ<ļ1,w¯F īÔįņũ*‡ÃëŊ>ßĀëƟs=ÅÂģM!„žâ}û՟…–ē›iZž—ŦØJļ)!0 „ᔓĮ>•Ėü7đŊŽĄâīƒš1D¤eU‰<ãÚŊí4/ ]ér%踑Ÿ{'ŨĪĻkÎ~ę6žņ'‰t-SËXŖ,Č%0ãŸlWođÖi+â ŦĶí×îĶŖĖhIÚ§čÔQEQEQEU]N#>—u‚Yĸ`1×8¯øޟjĘúÎđj7nV“¸ķ˙Ö­¯ˆQępü8ąŌ#˛ģšîáŧץpŖ9įŋ ø’m3áė0ËĨ_ŊĘÅåyi'$zV'ÁČo­ ÔôOKģīä2I ĒGL˙ž”ž‚÷áoˆĩ+­>ęįJģ2 āMøö WQ 睌ęŪ[ÉæÆT; õŽ^ü|h>#]Qk DĄ ƒ€?ĄŠĩ[-SHøŋ.ŊsŖŨߨ:)áC #ĮŽbøõ¸ž"[ëķiBŪh8"Dܘātë]‹īüSᏇÚdzX™n™˜Ė™įßxīUŋđmÎĩŋíΧ~õÁĮjé¨ĸŠĀņ7Š­ü0–íqgysį’[EŋzׂxÆãUÖž"YøŽęIg 9€’@>ÕŦõËÕą†ÎöD[ɚEŲ5gÆVē…ī„u+})ŠŪŧ$Eƒ‚OĩyGŽ'˛đ=ᇪŅî†ģ8‘Fˆ“Üą˙Ü ök)gáŲ,înšę#ŽËu^3éÖŧ˙āõÕׇ´K­;SŌī •æi×0’6ãąŦŊPžßãEūģ6‘¨%•âųQŗ[°Áādú*HŖÔ|=ņ‡PÔĩm:ëPŠT?fxb2m'Ž+/S“Y°ø.šsŖ]ĒŪZ˜íãUåIĮC[tíPxgÂöÉisw5šGĸFbį­^øƒ¯l|<ūĖĩŌĩ¸*›v+Į9ƟáĪGĨü5KŸNŋûTVÆĢąÚĒü 4-OEŋŗš‰å‘œ‰beĮSMđģŋ­gTĶ5K‰4ۉ|Ë{¨Ŗ,6öõŲčū Ô%đīŠõ=4ŲËæŨ]ĢÉt÷e$āš—^ēÕgøËi­ÃĸęOah,ë`ōyW¸Dūl)&ŌģÔ6QšķŋŒŪ:΃^î ›æŠ>ësáΙ.›āĢpí%ĖëįJîyb~žØŽŽŠjÚˆŌ´É¯Z§ ųpŽįnÜ ņŸ†FūĪĮڝíî‰z¤¤Ã#ÂT ÉûŲöŠ—i3Hŗ¤æ¸}Ŗ9ĢūÕdņv66“skeöO)åv–lcW1āíB†ĸīCÕė.¤ˇY™āž‹†ûtŽÃKÕõ=Núį^{Kˆt¨!+š_ŪL{ļŪŪÕĀč—ö˙oüI>‡¨Åavž\DÄr:Gá]×Å7QÖ| q–Ĩ;\ĸõeęEyū•s{wđ Øh7°_Αá* î=Iū´˙…kŠ^\XXũŠęŪßO‚d™äUŲ—ãRøTjžūũ•vחˇ-äT%0xÜOLĩĢņcš…׆4itûf¸m1”ŧQŒ’8č? ÃņÎŋ{ãũ–×EŋŠ(–g‹œ`LķøWUáũ—áŌ[Ũiš€žÚoåų –;qĮ:ÖGÁ{é´Ûk&÷LģˇžâáĨVhX.:ōH­/‹^žÔĨĶ5ũ2>ãMpīęĘxúZž>#éˇZZÃaeu>Ļę[ˆH!ņÜã×šë|7kygĄ[E¨LeēÆéúžÕĢ\˙Œ5tŌô9×Ȟig’5†2ܑŽÕæßîoŧ7§j6Z–•{Ë;\)ōŽ6ã×đŖÂRę0ü[Õ5[ú+ÅŲ­ ëĮ_Oūĩ&—e¨č_uMCSĶnŽĄšZʨYGB=ąYZ¯ˆlž$Ũë7:UÖũFؤ Ũå’0 ‘ÆxĪã]„ˇŪ*°ņ%ŧ&Ę{Ŋ*ÖÅ>ŌģsšĪR=O+"X­<[ã"MD¸ŗ’ų×7/ Œc=ëŲ¨ŽâÎĄ*xFëJļą¸ē¸ŊŒĸc-ˇÜցõÉ´o‡#MŸJÔÔ(Ņ„ėNON;zāŧwVVZŽ“¨Ø][ŧō´ŖĖ‰•pF1’)4Ky>xĢYkËi_Iž"He‰K`įîœtëV%×!šŌî%šÖĸm§[@ŲŨJ§> Uš+ÆuŸ ‡øåe,*DÆ.'q{˙:ô¯hø—Ãē\œc;ÃEy÷üW/„´DĐ5Í>ņnmĮŽŪ`íČŽžĪWÕKŊ×5 Kƒ   {\¸_\zšā>ÜęzOˆõQĸę&§8h `ĢÉ랕íĩá_ŧ×>4Ņīm>C~â 6ps‘“ųfŊžŌŪ;K8má@‘ā@Æ5QEQEQETf‰$ę=NŅRQE#*°Ã(?Q@Fz Z(ĸŠ(ĸŠ(ĻĒ*įjž¸iÔRRA* ņHč’ :ĢB3N€0(ĸŠ) ĢcrƒQAŒ1é@U!@>¸ĨĻ„U$…Qôyi¸ļÅÉęqIåF*}…AÆ@$zŠZiE$ ‘ßĨAÆ@8 ¨=@?Z@Š:(AJAČĨ ŠßyAúŠp) hzĸūTSÕAúŠ] .Ü zR**įj…Ī §R`g8õĨŽ[â‰.ŧ)á;NĘ–á*+ ¯'ŊpÃÆķxãÚFŽ#_íJU7I"(ä‘Û"ŊzVŪáA…E °Š(ŖQE"Ē¨Â€°¤dVûĘÔR€` Ĩĸ“Ļ)BaŠ]Ŗvė ú▛ąqŖJP pØRQĐ}qN#=j%ļzCˇ\…Ô´PFhĸŒRmÎGzZ@Ąz>‚–ŠB 2:RŅMdGuVã4ĒĄTĐ †  2:RŅE&sš Š •އ´QMōãķ<͋ŋŨŽqõ§SJ!`J‚Gr)ÔW—üKņö¯áoiv|1ųSᤒAÁÉÆ3ĐQĨßË㯈6÷ŅFN“¤Ä@“W˜õĮ¯zõ (ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĄģ´ˇžļ{k¨RhddqEgi>Đô)Z]3Lļĩ‘† Ƙ$}k^Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠĪÕ4M7Z…bÔlášE9EÎ*{+ M:Ü[Ų[Eo葨QúUš(ĸŠ(ĸŠ(ĸŠ˙Ųleptonica-1.86.0/prog/lucasta.047.jpg000066400000000000000000007261651506303110300172130ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā W)˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠČ×nu8!Œi™$brBįmYŌÅđąC¨07“€?*ŊEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV}FÎÖQ÷1Fįĸŗ`Ō‹û6éwúH*D¸†C„–6>ŠĀÔĩ ÅÕŊǏ™"Rp œT ĢięÛZōqœo-ĩí­Ū~ÍqģzėlÔä…'ÔÖ ī<;§\ũžįVļŽ\ãidÚˇš†îšŪE’6VSÁŠi’Ë1™%uD^ŦĮ¨ÛëēUŨĮ‘o¨ÛK/÷R@M_ŪģönŊ3Íëv Ē2IíYRx§AˆúŊšäāfQHž+Đeu‹"?ë¨Ģö—ö—ņī´šŽeõFÍYĸ ’psU,5KMd{¨Ž6Øæ6Č éW+6mIˇš{iĩxæOŧŽāI˙ ގö•ļ0U›]FÎôĸŨE7ûš°îąĄw *Œ’{ ĸ5Í)‡Ë¨Û78âQR.̧ŧm"ŪĀQ~ņķ øƒHg(ēąeę<ÁW-î`ēˆKo2Kččr?:Š}JÆÖ_*âîäÆvģ€qëU¤ņ"MNŲH9tĢ–—–×öââŌtšččr K$‰‘Â(ęIĀŦø|A¤OqäCŠ[<Ŋ6,ƒ5§ECQÖtũ'É×1Âfm‘†<ąĢĒÁ”09i“ĪŦ/4ō,q Ë3TŖ×ô‰@)Š[ķū°S ×4ģ›Ágũŧ—nŖ‚qZQEUŊÔlôčÖK˘āF8 #c&ĸ‹ZĶ'›ÉŠūŨäūčfĻ›Pŗˇ“ËšęßûŦādĨ…ĖžLI/÷Á?•\ŦÍKÄ:N?Ķõ >Žā“LÕėĩ‹Ušą&‰ē ÕúĄ&ĩĻG;Ā÷öë*}ä.x‹FRjv žyRIâM%V“U´Un™G5¤Ž¯u Ŗ ƒíT[]Ō•ö6ĄnĻŌã4Ķâ 8CŠ[î'ošĶŦũO[ĶtxŧËû¸ _öÛšNģĻk´ēmäW(§ÆŲÅhÕ[BÎŅÕ..Ą…› ‘Â˙:€kšS ŽĄnFqâ‘ŧAŖĄÃęvĢĮyE[´ŧˇž€Ok2M8‡ ÔôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqŪ-đ‘â[í B[…xc8É´p;׉ü8đ„~'ņ^ĸ—S5Œ ÁĘŪ§ūĘ´üsß|a¤P¸‘&?Ŋĩ’RÁšŗß5ôœÍse ÎģD WŌŗüC ézõˆUŒÉ9|Û^á Aã/‰Z’‡›û"ÍØćžpŧūfŊįÞŅü,&T ˜å÷6ėם|Jņ}槯Zø3A•ÅÄ#?q{ķ]f›đĮÃvÚ8´¸ĶãšI2I/ĖåąũãÍcü8ē}+Äú߅FhlØ=¸fÉy¯HģšŠÎŌ[™Ü$Q!vcĐ^5íSâĮN˛š[} ‰ gEĪzô ī†z5žŽ˛ĸ6š„ ž˜Î0õŽká]öŗâoę:ÖŠpÃėšļ#ŠÅzôĐĨÄ/ ‹ša…x?Å˙ xsGˇą˛ĶŦãˇŊŧ—åe˙ž•Ũi? ü7máK{{­:'˜A—™”o'ŨkĪ~IsĻüMÔ´Ģ9$}1KđNTsÖž„ĸ¸Šž+xbâ <=íÄlĄTüČŊÚŗ~ÛėđēbL—3ŗ7>Ÿ(ūUę5į?ôĶÂZŽĢqe۞=Š.>mĮĄŽwá?ÃíRđ`ŊÖlę[™KŖÉũۃĖŨ\|j‡LŅ$•lædIm÷Ŗwųô\ˆ˛ÆŅ¸Ę°!‡¨¯~"ø{J›â.“áŨÔBō8kØž­zõˇÃß iēdđ-X]CJ œĩ㞠đĻ›ã‰:ȰŅmI ŠäwĀô‰ĸØøLOĶã1Û!%TļîŊyŦhšēEîĩĒÚG$ļļĖQØôãŠķOƒŪĶüAŖ^jšÍˇÚi ÄŽ•íšn™c é‹ie‚Ö,°\đ+Į5ŸÜ|Iņ˛x_J¸hô˜_7Æp_EuZŸÂŊĪHi5 QæG(oŧËĪ>ĩÂīkū.ģÔWRˇ-mH^!ü^•éÕĶGo Ë+Db{ ųŖÄŪ"ŸÆ˙ôÛX÷­ŒsĒÁžŒų›ô¯Ļ"O.$OamĒXÍew™Ģĩ×ÔWÍū.đ֞ßŦ|9ĄCäÅō‰18õ'đ¯kđ˙íÃēšę6q8ē T’ėG?S]}QYZæ…ĻkļÉŠ–(‰uãži֙4Yëš|moĨIxR ŦNUk~|×ļøÛÂūÖŧ?w­^[–šû6čįį§ǟ >ÚxKĩÔæķP–=ĖYžî{b­üLøƒ4ŋ&æj7 Ŧ ?„úŸjÎđ7€ŖģŌĶXņB}ģRģũ㉞eLöĢK ŋ~'閚h0ØęĀŖÁģäV‚=+Õ&• år"–$ö¯đ׀âņŸ‰õ/j¯'öy™ŧˆ•Čķ÷ˇĩcé~ŌüOņj{KxŖ]*Ī; _ēvņĪųíLņGÃÛcņoNŅôøü›9Ā‘y Ŗ­} ˛Af–Ę0ˆ? W„|iŌ´­XZiV‚=BömĖč~lgú’+ĐD°”'ąÖŊ;ÂōßĪá>mQÃ^É ´§ųdxķEĐŽt[WWļYÖ(Äô8¯)ø9áK-oOÔu] Ú+3`ŪĄø•á(č–zΆÄËķųrNîŨ>ĩíž Ņ—AđĨ…‚Ž F qüG­oŅEQEQEF͇ *)Ŧ)­un˜ŨbaēŨi<čŋįĸßTĸQ“*î˜ˇ–­ˇ0œuÊbj6rOä%ÔM/÷ ÕĒ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+‚øģâ øđÅ Iî”™<ķÖ¸¯†1ëžđAŧĶ´1q-Îdgiv–éŽŋ…3ÂVV:ņĖ睈îsŠÚąé¤`Cƒ˙WšĒ„UU 0rßĩĩĐ<¨ŨņŧÄQ3ęxŽ[ā^„úw„_P15ô†L÷+Û5čúŊËŲéw1ŠgŠ&eé^đVÍĩ˙k"ē]Ō+ä؟ō+ßnĻö“LĖ"Éč0+žŪËŽ|L×õv}Ë 8ô۞1ųWeņģW—Jø}:BÄ=ۈ~_C×ôŦĪ„66ūørēÅÄ^匧bnbN:ôūuŋ}ņ[ÃVvØŧ’æŨäSąd†JÎøYŦi%%Ķ-ĻęV{—vˆ¨9bx=ûW§WĪ~!ž3øÛĩ‰]šxë9PïôĶxŗZņ‘¨ØiÅüVļ:Ą0‹‹uųŖĮoĮÖģø+HđÍ,ƒsÎįæ|ú×OY#×Ŧü;ĸÜjrĒ,hJŽė{^+¯jzu߁ĩmoRŋ†mfū?Ũ[Ģsgå_¯­zÁ¨  ô܁š÷1ĮģW^ņëQ–ōãGđåĢ–yƒ2ũ‡ķŽēÎiZļ›ĻørŨDpĒ#ĩĪŽĩ—á_…÷ŖÅOâ¯]Cq¨–Ü‘Fŋ*ר\ĖļÖŌLėĸ–$ž+į?ËĢx‹â^Šâk žģ,k#í_lzņ^‡ã/ø‡Gđĩė÷ú v¨Ņ”‹€ß1āqŠāfŒl| ú„Ŗ÷×ŌwOō?Zõ:ōŽúÁļđ¤\M™ofUÚ:+ĩđ.Œšƒ´ë]Ŧą˙īwŦ”Ú_ÃŨJkwŲ+(@AÁÁë\oė˙áõĩđíÎĩ,xšęB¨Äs°wüNk×5 ĶŽ|¯õž[múâšO†~ģđī†äŽų]ÜÎķČŠ?ūĒíkË ké­v–|÷o÷!Bįđ¯ øClū$øŦxĸu܊ÄFqęx¯sžŋĩĶmîōe†ÆYØđ)֗PŪÚĮso ’Wr8čÃÖ§ĸŠæŧyŠ7Â7Ŧ‰Ļ_&/vnyĪÄß o…:yļ÷ļ]ˆëĪSųķVô-}üGđ÷ÃÚržë‹‰– €=ķøq^šk )Œ*( ų÷Y‚O|{û$Ÿ5Ŋƒ.Ô/?ΞƒDX" *Œ^ âÍMĩĪŽÚEŒ,Y,e]Û{w5î­‚ęš]͋Čņ¤čQ™:€kžņ°x#áÕŅ´cŗļÛ>Ŋ2kø¤ē藚äį2ŪÉÁ=x˙õ×o†f><“ÄĘ­ˇōbNãœ×OŌŧķū+ĪÛî&×Lšo˙\×ŋ€:+įĪ‹čú˙Å DŒx@Sũã×ô¯{°´K> X”*E ØW3ã­ _&•e‹v%•XõUޞ8ÄQ¤kŅ@ŧģ㖸ÖM52_H`ķ\]ķøŸÃž Ō<=kĻ­¤Åb{…|’[¯ē×ļiVZv“ĨiÚT†ȊąĢ€Kuõļ:RŅEQEQExīÅO\Į§ŪkúMũâ\ķ$‰d8Į°Žwš/ü'ÖúiĩÔ¯âkhņ|ÆSŪƒŌŊ[\đD–‡”ˇpIkX$IYN}IkÉŖ.ĄáÍKQŋ\ķĘG'šĮbŽæŊ ü2‰¸ōSŲŨe`:āu­īŨØ/€ôļIc0Įj›†GWxÖåŌØ Ũ0A“5ŋŠkzv“É{w!FpíŠķ]*öË⟋îR[EĶ[l1?I¤õ#ĶŌ“ãLZN™āIžÍij“I"¨(Ŗpįĩu_ ŧ‹‡ÚŅŋøžž•ęQEQERÉāWžxįĮē}Ŧ ŖY]Å%åãy9rĮž 5æú īü*ī ŋéwʲ;dpŪĻŊ¯Xņ–Ŗh­ŠÍwnQCrįĐWŒøįŌī,>!ŲŨÄŌÜH °!ãiūöīøŠĮÄZd7Vw1ČĖ€˛ĢrĻŧĮÚ%öŸņimôÉ!ĢRŠüJO ×ĐēMŠiēUĩœc ajíQEQEQEQEQEQEQEQEQEQEQErŪ,đyņCÛ°Õnė„=­Ûnī­rīđ?C{á|ږĻnÁĪžeËgëZŋđĢ´ŲŖōīu-Jō3Õ%œāũq]>‹áÍ'ÃÖūF•c´}öM&Ŋáû/Y­­ņ›ËVÜ<š søW5/ÂLU䰕Ĩ^’Ûwķ­īxRÃÃĖ–/9YNO›!l~uģ\ˆūiž!ÔSQ[‹› Ā6´Ö¯´¸÷Š´iÁēėwdcĪšmíú×UQÍ wŧR xÜa”ô"¸Ižčī<†ŪûPĩˇ’öĐ͈Īļ+Zé6ˇÚeޘ—O #Œ †ĪR}늎ķáW‡5ųn¯ŌæäĘřv۟` -ŋ Z>č,eAœíY˜ Ķņ´ÛEĨh$(TppĀzšáī é~ą6š]¸Š3Ëw$ũk^øg x“W}KRIĨ™€ķ›Ĩü/đæ‰2ËĻGslÁˇagb úUK¯„žR/ íÁÎs-Ë7ķ5kKøcĄč÷ÜZKzžKHüöŲųVŪŋám'ÄŠj4Ģʀå•sđÁáH‚ĘH ęRVŽĮKĶ`ŌtčlmˇyPŽÕÜrjËĻôd$€F2:×˙ o#ŧą\L]÷7™19ĢQ|+đôŧpũ˛4eÛĩn=Ē´ßü#3 ŪāÎ?劸bßÎē?x^×Ã0Ë­ÅĖË!Īīä,GŌ§×|;§øŽÚ85‘ãˇ(I søW:>ø5IeĶd=dY˜7įšę´&×DĶŖąŗ BHۏįW]D(Ã*F=ë‚ŋøUĨËw%Λ}}Ĩ™N]-f*­ë[Ūđ~—á€íf˛<ōŦžVÜīõ5¯¨Ø[ęš|ö7JZ ×c¨8ČŽ9>ø%?˛CV‘‰||9đØąK/˛Iä#nU31æ¨ŋÂI)”éîŽá)Ítē/‡ė4 8ØØ#¤–Ã9cĪŊs3ü%đŊÜí-Ü7ä gfĮëSËđģÃRn ˙,„í´ūŠôŸ†žŅ5õ 4Gsžōq]mV‰ŧ)§ø˛Ö+}A§T‰‹/”ûy÷ŽX|đ€`ßgŸpęL§šéü9āũ3ÂŅĪž%Û7ŪķąŠ'Ķ~Áæy;ƒ~íöšæĶáƒÂūöÁæl`3ĘĊĶŅŧŖhZ’_Y ÕŅJĒŧĨ† tė씝¨Åqrü*đ­ÍÄĶŨŲÉpōšfß+cŸlԖŋ <3cw ŕŦ–íUIßĘģ*Ė×4;Ä6 gŠ[ŦŅFG ûå!øGáä˜4ō^\Ƨå†Y˜ ü+¸ļļ†ŌŨ ‚5Ž$UT`Yž"đí¯‰lÜĶĮmßš}¤×)ÁŸ ÄūdqܤŊL‹;?Žjiūxré6ÜšWŌIŲŋ­nxcÁē?„aš-*˜åÉ9ÍTá׆âņ×RĮ›÷ƒģå ëZë(ĸŠ(ĸŠ(Ϟ‡FVä0ÁŽY>øMgyΑČ͸ŗ’yŠnŧá‹Į/>“šęĖš?™§?<7-ŦŌé‘I¸>Z7!sÖĻ> đëZĮnúMģÃÜF^XŌü7¤čŗ<ē}œp;Œ1AŒÔˇz}Š[j7Č÷VŲō¤#•­(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)Žâ8ŲÛĸ‚Mxoˆž xŖUūÕÔ<={Ž›Ļ6Æ2ŌīžøŽķÅžˇÉļt-›Ũī]ĩx¯ÄĪxįÂ7&æ6ļM6Y|¸™FXq˙ë¯RđĩåÎĄám6îíˇ\K´‡MlQEW!ã­sÄ: ŠŨčētWq"–œģ`¨•OᏍîüoŖÍywn´r wuä°|UÔåø–|6ÚPŪi‡vė˙{é^ĩExī‰>(ø›Ãž'‡NģŅŖ†ŪyļC#ī]ØÍzô,d‚7oŧĘ Š(ĸŧoĮ?|iá ąįiV‘YÉ)XĻ'vá^ŗĻÎ÷Ze´ōã|‘Ģ6:gnŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¨"ŧļšy ŠxŪXūú+d¯Ö§ĸ¸/xîōĮÄ+ čVqŨ_Ēy“™[ ûĶž|@47ÖŌĀ‘]Y6רrŦ=EwtQEQEW›üAņæŋāÖiáŅĄ›OĘĒÎŌäûUû˙k#ĀÖZö›Ĩ‹‰dÍš"ØÚ¸Ī´Ī†ž=›Į6W“OjļííÚ§5ŪQEQEQEQEWžxûÅū'đĸËyg¤A>›æv~GáZß|G}⯠ÅĢ_ĸ$’ģ1Ā8ŽļŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+„ņOÄxt]dhzu”ˇúĢ.DIĀdŠ—6âÛXŌŽŖ†Kvq™3ũÜuŦø~4Ū\éwxvWkfÄ҃÷G­ZˇøČn|.úÄz4’4lD‘#}Ā;“[câe“ø>Ķ[KviŽ›lV üĖ{ŠÍąø­sˇo§kúšgÚÔģ>āßá^…}ŠZéÚ{ß\ĘŨqsĐ ķˇøŗ<Â[ËÜͤĮŸôÂv‚=@ôŽŌi’xmuŲ.- {ËŌš%øŦžŲũ‡|4|˙ĮéO—ŋJÔņG´Û 9 wÃyl’Ū2áxīŠōĪ…$Ņ ąŧŌīŦgšû\ėJ˜‹.=ëŌô?øm57Đ4‹9!’$i<ĄNŸQRCņCGmv-x.mīem¨’!ŋW=û@ŠoZ>íâķéÁŽ˙ SÂ:bąÉknŠäŧYãÛÍęw Žã<)šWëY‘|[ĐĨŅX÷‚Å_cKå |_%xsAÔŪÃQ¸š)—~åˆoĄīLÔ>'xgL’Ũ.ޤ§EtĖGFGķ¨5ŠūŌįXn§€eKe…uēfĨ­§Å{mģɔn]ÙŦj‘čÚ\×ķG$‘šew1ú ãôo‹žÖ'šˆ ‹y-×sŦŅķúVį‡í[-â!t#Ŧ‹ĩ{ęéÎ? Ëąø“á]BĨ‡T@°ā>ņ´äúzÖωâÄ!ŋŗ/c“ī á‡ÔVÍ5˜"–c€9&¸Û˙‰ū°‘ÔĪ4ʍĩäŽ"QOÖē{NÔ´íKK…–×fōéÎ`ZüQđ­å䖱_8š0K+ÄWúÕŊ/Įē¯Š:ŪåÖäŒĒJ…w}3[Zž§iŖØK{{2ÅC,ÄךxûÆ:všā-RŪžņyņ”ģžĩĩđiBü2Ķ1ūŲ?÷ÕwÕÅøân…á}PØj"ád;–2EC?ŏ ZÚÁq;ÜĮëš @܏ʋ¯ŠūŗŠfk„Ža”f‰†áųVâøˇJ>ūŨyŒVDA´ŸÂ°,ū'ŲOy]é×ļvĶ6ØŽ&j7§5sÅôO ]E . ’1"´išpO­W—âŋ†"ļ†qs+¤Š)!ūņíWoū!č6Vp\¤Īr']č!f#ׯøkÅz_Š­ãM˜ļÇFeúŠĢâ/ižšŽÍÖkģų>å­˛îsūŨĮZnģq%§•5Ĩėcs[θ|zÖ=÷Åīi矨.ŌæwėĖ‘í_Ĩ:?‹~mBY…Ä 3mŽiSj5w‘Č’Æ˛FÁ‘†AéôQEQEQEQEQEQEQExF•§]é˙§—Sq‰ÕŒO؎8üŠŪ;ą}kã“mf›Ŗ€ĢÜ2ŒíįœūĩéWūŅ´ jŌ[ZEÉHž+ÎūøO×<3ĢG"ˇŲîĨeažŖ>”ŋzĒķퟭoürŊēĩđ „’Ģ;,nAÆFܑú Ōļđ„ÚīÁŨ;J´›É–kt%ŋĮōũkΞ!i×>đ“ Áz'W›÷ėšIūé˙ ô‰ã×ĩßAEŠ[_-Íé֟āÍ#SŅ~ŨØęÍža6Åæŗ~$2øPfTiĶqŒ÷ŦũįĪø˙|ģj°ôQߎĩÄ$Œ|mđß;Aãņ­¤Âh§ŊĐūUßxEđŽ˜ÃäÍl$‰&v:ļ:⿟Xū(Ō!×<7§Ė„вŒö5ā ÔÍįƒ5?7ü~IrÉåÎÄęÍüęßÃÛī´øbķÁ—Q‡ģ7ūQI%cĪĖF¯j×mmôī_ÛÅXŖĩe ƒÚŧįā>•l|/{{q÷ķYpÃ;GĩGđ’pž>ņUœ?-М˛ĮÛĢS5(V/ÚON‘W0Œ_•†ĪĨ3Į:„ē§ÆmFŸ"ÎmėĮüŠč~ x'[×ŧM¤\Ų_4ģwS,{ö€A×?ņĻ#qâÚ Ž×bŒĘÚ^ҸͧÚZ|8ĩXĸ HHīü qöŸé2Äũ™'é] |ũ5üēßímŲÄVŽŅĝ¸SZ?´(Ч(ž~ŌGuô¯Bņ<īđĘôHĄã[Ãw8ųkƒøqāÛü*{;™ÛüŌÆ>`Ŧ?ö?ŧ5á[Xdš°ĶXCžflžOå[ßĮˆ|Oa`šW‡§ˇ¸´¸YUÉA€3īOøšĸÜ_xNÖZ-—–j¯(ĀÎ{ķõŽKÆW˛xĢÁúNˇj‘“¤Ä†mŖ$9ĮéŠíü3%¯Ž|IĨj"Ĩ‡O´F)˙-ˇáũk×4ŠGÔ2†RŦ¨5ā>Ō Ô>:kjã0ڂöĪųÍiøû@á÷„õŊGN¸”ĪĒÜa›< 9Íjx^úXūY鐸zîušĶt{>bË÷ēÖ“ĄøŽ?…šļ“oöYD Ā˛8ųšČ_éX:ŋŽķCM Å>{20ą\Ē‘ĩ‡zôŠfÎķᚁ–AåĮąÂũîœÕŋ‡úŋÂhĶËFií™årŋ{#?ʸøē÷Oøsâ¨•Ų…†|ƒŨwp+ĻøwĢ=§Ãč!M öí§V’I”)WfīÉŦí_xKáߊ§ģĩ–Ė+;ÚÆT7OĘŦü#Ķ÷áÎĢyj3Ē]_5ÎIlqÉ­o†^Õŧ=ĸęë¯ēÉ,圯[v;î?ZĘø:š]ˇ†5ŊFöÄPßšÜĘŅ^ĮmqÕŦWļč¤PČ}A§MW˜ædCÕXdWˆ|>´ĩ¸øšâ˜eļ‰ĄÜvĄ\ķvĨøŊĨÂŪ;đĒÃ˛šMŒPaą‘]–ĩākmb/7M´`¯BBžkžø%<šČ×5kĪŪÜ\\csŒāÕFÂöMö„¸Ķāv÷‹‡AĶ;sUŧc Ã¨üzŌ!tAĒČęīc'ü*ĪĮKt‚ķÒ['•7°<|2lüWŌlm>”Š4Č” |ŲãĨt˙ äø{¤4Ž]Œ#“]}xŋÅKEņÆ‹Š T­ÜnĄlŅK;sÎŅīŌŠxÆí§øŖá –ÖKI‹ŒĢ}æ\ķ‘]/ĮÃ|=$Ŧ€Î ÕŊh@øK˜fsīō×/đđ†Ũœ~Ôz×­RÁäWĪŋ4 >+hvđ¤"é—Íōū_â­_zl:>‹ĄI§FļķGpąŦ‘Œ1[ž7Ņė ø7pæŪ3"[ĢųĄyŨëTôíröËā_ÆÅ§ų{;GLÕo‡Z€ļđ?•…utķîgPbB{Õŋ…úF­geâ M^ÅŌÆGimÖa‘Ījįž h°\øģ_ģ–$eˇ”ˆÆ8cSi˙gūŅ—ÖgUé÷A¯wĒ:Íģ]hˇ°,ŪI’Q'÷xë^ā‡mAÖ´y!“V‹â[uĖQŒxÖīĀ'‘ü5’bûCmBrd6iwûDKöxãķ^1ĐāŽ*īÄ8RĪâĪ…Ų ČĒÛxã4Īz•Ëø“ÃÚ6âļ˛Ė˛8ėß0ĶüZĶíOÂû–1€Đ"Čsāú•økĻsœî?­wuįŋü4šį‚ާŠ,ŨÚūõN:טŨ^ŋ>XX[*ÛÚIŽ2@NükĄđŒöž5Ķ<5§Í Jփ|ä~īnô˙‹ĶË˙ †tŋug4čY…o˜pZë~)YƟ ī„Qa1ü<Šãuļmsāw×Éēå@r98&éZũž%ŧ?쟿ŽįŽĩ—ņ7JˇÔž.ørŌHÔĮ(]ãoV~<ÚǤ$0ĸ°¸UVzŋ‡¸đí†xÄ œũ+Là ƒôĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĢŪųŸaŸÉ`˛ųm°žĮWÍļž+ÔtíRho|9ũŗyopÎ.Ķsé‚+vÃâíõ–Ŧ×z„Ų%oŪΆÔņ^‹âkíGÄ^Œh$ãPFGÜNHî@Ŧ…ūņG„_ėWÖļ­fėĖĶ#Ã>ØŠž"øWÖŧIĻëúAŠIlĮ6ōļsY>)đoŒ|Koa¨ĘEug )hōāw&ē GÁ:—Š|.ŽÍūžĮˇkdDG@=ĢDģņ柤&€ē2ų‘¯”.|Ī—Œúô­=gáöׁL–aũĸŽgķ'ŊAĨęū=ąĶĸŅÛ@Y&ŒyBéŸäúã­hŨčŪ"Ō<)-Ļ›oõõáf¸.û@'Ōą~h>+đ¤ōØjZdikq!•įWÎĨAŦøWÄ~ø˜Ū(Ņ,~ßor6÷Kņœ˙āņcxvamD˛.í¸<õõ5šã˙ ęš–Š¤øŗI´ÍíŽ×–ßøŠú}Æ­ĪŠøÆąÁĻĻwĨÛ s<˙) u \ߏ4ĪjŪ0ŌgĶô+Š,ô†sØ#‘ųUŸ‰–ū&ņo‡ėôû/Ũ#Ļ$b]@_cÍvßgÕ?áŠÃTŌ尒ÍV%wŒuŽÆŧ‹ÆžÔlŧsgã-ÜŨ2>n-—ī0Æ+â6•â¯ÛXߎ‰4)o.ØíwüŪėkŽņ Ū#ŊøptËm ˇ\Įör›× 1×9¨~C­č|~Õtk‹}›Ÿí ACė0jOˆŪžÔu?Äē"+_؝Íy§ųõĻÉâoøĸÛûĶAŧ°–QåĪw8Ø#Øz×g}Ą­ĮƒæŅ¤&|Û˛Ü–8ë\o…~žŸđÂ÷D瀭ÕАēžy=åĘ¯|'đœūđÛÅy†ęI pzãĩzRÔĶå¸ļ´{š|ĄÁjđŨ׌Ä{˙ĪᛑîG’Ŧ¤ >ĩë^0đâxŋÂséŌ~îIP29Vë\W…õßøWIÃ÷~ŧēžØyqM<ļ‰=ĒOh~#ŊđLËķļŠ{w‹6V,6zú T×ķęēŽ…6…á‰'žhö •G—œuŨۚ‹Æēé?Κ뙭áŒ>čiž Ö¯m~ZiͧÜÜ\IoļŨâ\̆ĪjŊāī†ŠĻx'PĶu0ëSÜķãøIč? ¯ámGWđ]Œēö…yp°1ōÛ(duíŪē+}Qņ‹ŠG¯Ž;ô+ĻüˆWˇã\„u=Gáœ3ø~˙EŊ¸RÖō[Įšd' ÍwĶuģƒĒjzØōfÔØíÃdD˜āWhZG‰´7UđŌf&ōé™nņû°„ũã^ß§Z 6ÚĐt†5OČTŪŖ>—ĨËumc-ėĢ÷`ĢWx6ĪÄúGÄMCWŸÃ×+ĸx\ŒF ū*ŸĮö~$ÖŧkĻęV ĶC§6I;~›øy¯XŌneÖ´0×ļ2Ú´ŠQá›ī}kÎü=mwđËQÕ-ϰš¸Ķne2Á$–Áô8Šŧáģ_Įˇū7ŋ´’ØKōÚE ÃcĻOĨek6~)šøŖiâˆ|;rÖļĢä…ŪĄ›¯ Lø™gâ/ęcYčW(ļ‰ą?9āUīˆë~'đré0xrņf•UˇqˆČõṳ̈øYqvžƒKģĶnläąA3.7ŸjîëÆ|qáz×âu—ŠôŨ=ĩ*˜”ō§īŌŠøˇIņeߊ4Iĸŧ‚Ũ˙ãĘ3—@:dûÔž(ŌERüęī ŋņnÛYņ9ąąĶô[ŠVŪQ#H1´ŒUßjú÷Ãųtxŧ9¨´ōÂ"` c×Ŧü=ĶßQønŪÔtųíž8Œoį&ܓéëTŧ-{ŽøÉô­ęō\ũžhpe'ŋĨušuŪžēNŖŠęVîæP~Ībœ˛/øšāūĻąámKXkī^Ŧ7˛ųˆĘ ã¯hÚŨŋŋM ęd˜lEōųc5īQ?™>Ōģ”ĸąŧ_Ļ\ëÔ,-$1ÜMTaë^CāÛéžŧđŧZÄ73;´:[žhøk§x“DŧūȒÂâ(áē3Ī1  }ŅøÕû;OCņ^įÄߨ7fÖdōņÆTzĶŧ_gŽëž>Ō5kmëėē|ŠÎĮh-Īnk{â7…îŧSĸiÚŝŗ&Ŗfë0…ūņä¯éXž/¸ņ'ü-…Ļ‹skF žoFāVĪÂkbĮI‡ÃúŽ=ĒÚEŸ´?ŨoĨzeAwnˇvs[ˇŨ‘ ŸÆŧ§á?„eŌ˙á#v΋,í aĮGqõÍ^øOāųŧ96ĩ5ÕģÄō\˛Äc÷y8?iüJđdū%´ŗŊ° ũĄ§Ę˛Æ€9"˛|A}Ŧx×D_AĄ^Z´ŦŠu<ãj*ƒÎĶŪ›ãÍ;SƒÁŅøGCŌ&¸F…WÎm=ęńž%ˇøwũ”|=7ÚÖ!T0Į#īfąžAâ¯éZm·g‘ˇ™rŽŋ1§|8Ņ|AgņXÕ/ô§ĩļŊflŗˇœúÕŊKÚ¯ƒŧqqâ]ĀŪZ^ ˇF~`Ū VíŖëū(Ö­gēą—LĶ­_Ė)!ųĨn߅sŪ2ĐhAĪøÕ_‰ēwŠüYokž€éŦĢ)c ų§ë]ˇ7ŠásũŽÍėõ0› Hw0_QYŸ!ņ$Zuđ×Eȏxō…Ær|gĩzŊQEQEQEQEQEQE…âû ũKÂ×öšdž]ܑŒ?•y߂uæđŽˆ4ũwAŊŠhÎ ën_Ė?QZĮˆįņĻ›q¤hē âđqu”Ē;žyŽįÃ:~Đm´ØÛw”ŋ1õ=ëbŠ(ĸŠ(ĸŠ(ŦEĢÜiOŒđĮs'ËæKŅGsU|)á[ X˛3]ĖÛįúŗĩĐŅEQEQEQEQEQEQEQ^]ņ›Äzl^ Ô4wÔoîC|ÕŖđĢÄ]į„´Ũ2Ūéō™yZô (¤eVÆ@8õĨĸŠ(ĸŠFPà ôŠZ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¨n ­Bô}-QEQEQEQEQEQEQEQEQEQEQEe]xoEžŧkģ­2Ök†āČņ‚M>Ī@Ō4ëŖseĻÚÛÎFĶ$Q8­*(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¨ęs_Áh_NļŽâ|ũÉhüëÍüIņ[W𔰮ąáŋ-f$#,ŲÎ+˛đ_‹`ņŽˆ5b0ÛZ&`Jš—ÅŪ$_ č2jMnn JpZ¸ß üJ×ŧ]#'è-ã8y%ŸéVpöąĩÚ$s‘ķĒ€jz(ĸŠ(ĸŠ(ĻîļägŌŧįÅßâđ–´tûéÁ!RaÂ9ú×{ĻŪhiļ÷{ yČiíVčĸŠ(ĸ“#8Ī>•ÄxËâ4^–įGžš ũĄ÷yôÍt>×cņ/‡íuhbh’áwnĸ´nn#ĩĩ–âSˆâRė}Ž;Áŋ4ę7V61MļãwīŪ\õÛŅEQEWŽ|AƒBÔ§´—FÕ&HF^xĄĘ~u…gņģAԙŌĮOÔî$_ŧąÁœWyĄjŋÛZD7æÚko7?ē™v˛ũEiQEQEįž"øŗ§xgR–ŌûJÔDhûāFHŲÍw67i}cÚ)U™¨=@5ÎøÃĮ6~ĩŨ•ÜęęXŧ)•_ŠŠüâûohÍŠZA$1 x~§ŌQEQEQEQEQEQEsū"ņm‡^%Innį8ŠÚšÛŪĸđ׍ôŸOsmfdŽęØâX%\2×KYēîŗm ięWaĖŒļÁ“YŪņž™ã+YŽtĪ3ˉöëŽkŖŽJįâ&ƒiâÅđäŗ8ŊfÛ÷~PŪ•ÖŅEQEQ\˙‹O.īSŽ'Ām­×ĨnéZ­–ĩb—ļ,Öī¸īWhŽsVņ·tKƒo}¨"Ę ÜG×+Nß[ĶŽtÁ¨ÅwZŨænÅyf“ã/Qøŗ}pú¨‹O†ų’퍟?•GņŨ’ãKŅdFS\Ž{÷¯@Ķ|GĄéZu…Ū¯mĮ” +ļ Ž‘%I##B2+Pņ—‡´ģÁiyĒÛE98Ø\dą¨xHŌôäÔ.ībKV;V\äTmŧuáĢÍ>køuXZÚÚīœ`Öļ™ĒØë‹u§ÜĮqtxÛ"ŽĶ$‘"Ø*(É'ĩy,ž:͝ū.[G­é֖Ė%b˙#6zV§ÆIaŊø]w4 %ˆ˛2ēr:úÕß‡ēž›Ĩ|;ВîúL–ĘĘą]}ÅîŸũœn'¸‡ėr. ŗ ŒŊsžĶ<cwrū{VīŒ2n"ļÅ_ ÕmMŅ;D[ūbjxõÍ*[ŗiŖl÷ūYŦ€šžN:ÖDž)Đĸŋj֋vÜLƒwåV%×4¸oⱒúē”e"/ķ5kš]ŊęŲͨ[Įr܈š@ūfŪîŪč?ŲæIv­ąŗƒSŅTĩaŌ.üßšå6*đŋŲųõmÕA\ú{šú ”´VvĨŽézFßí č-ˇtķŠėĩ =J:Îæ9ãūōЧĒx“GŅ]PÔ ß…Gq¸ūzÛk‹_´ÃMcMŠtī­ÖWû¨d5tŒŽ•“{â}Ošû5ÖŖ swR܊ŊũĄhl~Ûöˆūˡw›ģåĮŽjœ^%Ņ'RŅjļŽÉ"PqJž"Ņ›vŨRÔílJ8¤ĩņ{x,íĩ+yŽȍ'ĢEQÔ5};JU7א[†ûžcã4ø5++™8.ĸ‘w¨FÎG­š•–žĄ¯.ᡠĶĖpšĨ˛Ô-5(LÖw <`ãrŒÕ{Ũ{IĶgō/u{yqģdŽÅD|QĄ,K#jöjŒ2 ” Õģ RĮU…Ĩ°ģŠæ5;KDۀ5rŠÍŧ×ô>u‚īRļ†fč ūoívâßíry8ÎũÜW‘iú­žĄņÃSkŠãû46f8]›å\÷Øx;Āg…ĩ ŨRÎæ[‰oyŪį .s]Ĩgk‘G>…}¨Č#Úŧģā3ÃoáÍYäuVņ,qÚŊrŪæ ¨üČ%IûČr+–¸đw†/ŧ_ģ'”ú’ž}ī\WIqŠØÚÎ!¸ģ†)HČWp 2m_NˇdYoaVē õŠ'Ôl­]âę™ūčw5ad]ČÁ‡¨9§QPŨ]Aen÷2¤P Ë;œYÖ^'Đõ ŗÕ-g1ŽįØāíĻ­XjÖšģXŨÅpŠ÷Œm* |EŖAv-eÔ­–|ãË2 Ôúœis¤]' ­ {įŠōŋ€pyZFą“ĪÚĘņ^›}â-L”E{¨ÛĀįŗž*ä7ļ×6ßi†t’gzœŠķŊcÆv3üIŅŦ!ÔŖ[[u’K†a Į×KâáMjÆ8uĢ‹Imŗš7¸Æ}AĢú|ú&“ ÂÖsÁ™ʎäëëNOč’Á$ņę–ĪGĘų Vėu+-J/6Ęæ)ĶûŅļiš–­aŖÛBę;x‡ņ9ÅgŲøĮBž´šæ øÚ8F_<Uŧ;ãÅÕž›+HÖāÄpŲôŽžŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+×ãķŋ—JÜøįŋü!ÚRؘĘ-ŌĒl€Ļø—ÂVß åŋ’Ū˙É™ņķ)Į¯ZŗĨxžm#ā\z“š7&E-Ī5›āKĪ OāâúĩšžúåYä’KvrĖsßoáh}[IÕ´}ZŞÖÚF{qqÆĶĶ­s? ü3ũˇsâky6,0HŅÅ*šČŨ`+Õ~x&hķŲOx.L˛īųFŽŌĄšˇŽîÚ[y—trŠF ×ĪÚ†tYū6ë=ƟXÅ čƒúץ|UļļąøQ}oi,T Ņ~jĮđ‡…,.ū%ÖĄÍq5Ą!ߝŠĘĐRü-ŦøęËQO´C뉿|ÃŋQø?gŸŽü]@,qMĩãÍÅcüDđėIņE‚Â3j—˜g0üš9ųēU˙‹ú%ŋ†áđūĄ¤@–ˇÜÃĮÆãއō¯Eņ–Ĩ{cđæōîßí­ĀRBŨëŒđį…ôûŸƒŸm’Ū7ŋ–Ũ§kŒûúįwåųV‚ŧwâČtŋĪ|ņÜŲܕۓ(^ƒéÅQˇņF…§jēĨ‡‹4Ųņîd+y°ŗmŨōzŒW¤ü"ļļļđíØļģ[”’å[vNÜņŸzô:+;^ĪöĄ“öw˙ĐkÅ?ghķs­šęĨ:÷Ę*Žą¨Į¤h÷zŒŖ)oHGŌŧ{áQ“Æē–šâM]ę}å ŽAšWđüĒO/ˆ4-OÅ:–Ŗm%ŊšŖH‘‘ĩûĸ¯|$ļƒÅZ^ŠŽęđĮwswrĀ—vÕėzT~ŋ}'ânĩátųA’›žŖéYūŌėíž8kV‘BŠj°"_ēš"Ŗ×ô[㎃Ÿn°$‰æ°^„ķÍtŸ؞p/S5KâwˆåŅŧ ĸévîčú†ØËĄĮČ:ÆˇüWáĢ)~NR(ᚠ-é" ōÕoĢˇáü6OšŲüÍzeáŋ4[+h4ũFŌũÅÎŲ$^Ž*įŒŧe§|/:–ŨÚ´H’ĩÖ~mÕŊoâ{Í?āŦ:Ԓ4—d]¯Ô–#ƒU~čĐę^ }WV‰n¯5 ]Ĩ–A“Œ‘ŠÉøo¨=ΉüQāûĄžÁ]Ú$'!W8 V„íl<5ãOxV‚'ˇ*ŌB ãĶ'Û•Qđ4öē?ˆĩũ3Xŗ‡ĘxxՆxūã^Ÿđ×Á:^“ĨÁĢ›@5÷IæĒ­Đ ¯CĸŧOâ°Ūø‘mŠjēoö†—öm‘ ]ʍÜũjo_hšĮÄDÔ4Kŗ?cu’҉ų°ûŖü*Ė×iņ7P“Äp[IĨJŸši˜3öTžĩWáÁĩø›â &ÆFūĖUķ3Ņ[Úļ~4øZ-WÂSjQFåĻ$ŪŖ–QØ×7nšGŠūhŅ%Ŧ"ōæeļĘ(ĘâÆ?õŋøoNđΜ,ôøDhp\âoZØŽÆÚäžđū§ î–(ūLö'ĄŽá'‡ėõī M­kEyw{+’ōÅF{zU?‡÷‹¨x“Ä^žß5Œrš…ĪʙéYZ7…4[ߌzŽ5¯ú0‰¸N†ŊÚÆĘ :Æ;e+ +ĩ9ĀĢ5[Q8Ķ.¤/üx×ÁŊ WJÔåē&K_´ēų9ã'×Ö¯|:¸}7âgˆŧ?šŗOŪD…¸CūMT×4¸tīŽē:ڃ\'˜ā?ķÚ—ãæ‘ ØiúŧA–ėΰVĮË֙â˙ YXü+ģmUcYMË1/ģëZĐ!ņ_€Fš­¨šŧ–´Œw´cĘ—āVą{{Ŗę67s´Ģk6qÉŊrНygo¨ZIkuË‹ĩŅē^¤h/Į-GEļNžc>liŅ—ƒĻkWRŌĩ…Ú7‰5´ĄÎ#´Eč™=~ĩcÂ÷>O‡¤Ūí—Sē‰äxÉrįžĩąđĪ^žŧđ.Ąĸ%ŲĢĒ´‹‚WUomæøSV+€~ÖûI÷‘á”چŋg⇷ēydcUķŋä+GāŦĻīO×tŲYŪÎ9Ų#Gė§ĩdAá]O’é&ÉÉ-˘¯­uŋô=&ÛáŽĸļÖ°†ļQ°ŽŠÍZđ5­ßÂ+8/"Bm™Š°ÎxÍq˙ŧ;cxÚĖōÆō[ ĘÆ’—ëW>“§|Mņ&•ļÜŌ$YáyíQøëÎÕū/hšEę7öpųÂvryüǝÅûkM']Ņ>Œ“ÎÛ$Ž!"äpÃŋzīü3ā{m_ŸYļ)\ĀĢäF¸ qÍv”QEQEQEQEQEQEVVŋĢKĸér^Ca5ë/HĄûÆŧŽķŞ,ŋņfŸŠ§„/’ÎÖ6Rģ~cŸ˙U^ø…ĸßxĪNŅõ]2t™&ÚņĘ 2.y$VĻŋ}ĒZxb}LĐī]Ö/)%U[éÎxū•Îü:Ô5ī é÷PjžŋÍ1•ž “ŠĪøaĢ\xËHׯ™uq§FUŪ5]ØįĻ+7â3júũAĸ]Gai2)Ŗ;ېIÛÛ§SZmŠsā­aKžgÔ¤f‚7ĮĄŽÁچ§ĸ|<]2įAŋ1# _/īį<ŠÉø;gĒč:…ũŊū‘sÚåÜ$eã¯HņΆž đ†ĄbW,ŅœtaŌŧķāNƒ5ļ›q¨Ũķ!cyP8ĮĶ­{5“âM@ģĶg\¤ČG^õã˙|KÛ{ũ_Šh\LdÖ&euí‚l|8đÄú‹ĩOß[ŧ)s)6ˆü6ĪSų åtJO øķÅ1ꖗ^mûŗˆĸ'ĖœsĶŊ[ņظočÚ ŗ¸¸Ô!•')ļ¯|šÛņŠí/~IĻÚÛ]ĩԐėų-œãš¯āũ:?|!“Ã’Å:]Å1Ū…@9āsøRøƖ^ŅWÃŪ!ĩšŪöԕ\Ä[xöĀŽĒËÄ:€ŗÕ5éė&[P–ļâ?ŋÚ Wü,ņø[VÔĄÕtËëvÔŽAˆ˜˜į'Šú€}ih¯ŸåÔ?áøŨĒꚝŧŅÛÜF|‡–ķˎŸLV5s'ôÆļģ–Ą'Ú…°Ĩēô­Ÿ øšÖ×á”vSÛŪ-ÄVâ"ŸfoŊˇéíYõ˜ô_ęv°]Er’´ÛÕSáŽĨ&™ãf{Í2úÔĻĖ Đœ7'’{U¯^H>2iMcrm,“lŗ,LW“ÛŠoƋįÖΓi§[]Nļ÷Yš8XācˇõØø—ÄÖąx ‰adĩœ­ŧžtG÷cĄ$W §x“ÂļĐÛÅá´âJ˛¤Mæm=TÂŊ;—^—ÃßÃ÷Ëilŋ/^ëÎ4 í%ô6ˇņļœĘÜ[ŨM;×'7¨÷æĩ>i i­kˇšjĘē+ē‹_3?7\‘^ģEq.ņŪ—¤­î”éq%ᅕQ", "ŧ“āįˆ-ŧ6¤ēÄ76épÃiōXŽ? ú&ÂöJÆËrÆ—r–\}*ÍQÖtäÕ´kÍ=Îâ&ŒŸ¨¯ømĒEđŪķVŅüB’Z–—tNĘq •ÚiˇÚŸŽ/uI“Ī‹@{f‚‘vųŦzĩaü=Ômž[_č:ü‚ÖDž"FC/lV| ĸÜjßuo\C"[HLv›ø$woŌąŽîæđOÆkíRúÚsa{RXâ-“ÅdëÚôŌ|ZŌ5ûË+¨´˙,lĘ…įšé>5jk¨čšvŸios,Ū|wOåÆÅBcšüjoéxËáæ™ĻĀŌOfĘÅ6á°ŊE3Ş-}oáäúf“o;Ũ}ˇËaå¨>ϟđKZŠ-?Ímq ęn‘Œˆ@jõÚ+Ãū6ëēƒXé։<×vwAĨ Ŗŋ8­/ˆ,Ķ5?†˛YYų¯q¸ĒVúg‡ī> éWžĩdX÷ŊÛ…cÆ8j—†uĻüFÖĨņ\s5Č}ļjčXmĪJĄe¨ŨZ|Bņ 4Áq}ÛMˆTœ‘ŪŊŌK!}Ą}ŠéCų°p{œWŒ|*đŊõ‡5kiŨ͎›+lŒ—st?—ķ¯wĸą|YĸøbûKã3ÆBũ{W›|;×Ŧ|áËÍ ^¸û%åŧÎ}å= úŠg­æ o[ņ…ôREmpdhC˜ĻIÎ+IņNŸcņ—QÖŽ^Uą6,†6ëÅ} Ģ<1ƜŖ¨eú’šīkvz'‡Ž$ģ”ĮæŖGrØâŧĮ❈tũ#Bŋĩŋ›É•§ipĀįmCāũwN‡âöĩ$ä[Ũ)X$d ?=Šū)Õ ˙…ŨĨŪl—ėöņl’M‡h<˙õĒ˙Į-J+iA—3\,ĀęŧÔž3ņV•¨ü,{8GžH–5coŧ;Sŧ!âŊ/Nø[ Āž;ˆ`12[īĘø}Œē–wą]ÜN^5t#r˙œÔž1øƒâ­â\VFSKķŖT§Œœū5íhÛŅ[ČÍWÔ5 }.Æ[ˡŲC,Āgāžņ Ŧ/ĩwY~ÁrĨVŊŋÂŊ_↏‹ü=œ2%‡ŨģW/āčú'†ĄŌ5•û5ũˆōÚ9"äãŌĩ×\œøwUÔ/-^+{ŊÂÖ!Îˎ¯øWđ™Ž-ü#­é~EÄķ3Ëä#ˇGáļĢũkŠØ^é—Rks;í&"KgßŌĢü=—Q°Õī´ ›k”ŋ¸ÔČČŋ*Ļ~cšÛÔīĮ…ž5ËĒę0ʖsÛ˛Į RŸō*ĮˆgšŸáæŠąģ–ëX‘Ĩ‚ „•\÷ôâŽø'Ä_؟ ­Ū›}ļ‰ä˛ų',ĖŨë;á6¤ūĶ5K}JŌú÷ :+@Ü­Aāš/ŠZÅũ͕Ôq^šîņ0ß=)ū2×´éŧu,ZŊôš[iŦ œÉKzœŌiŪ*đf§ŽÛęžŦ÷×1ąI${Q+Ųmn ģļŽ{iH\ezSQEQEQEQEQEQEQEQE5•[¨ëAD+´¨ v"”(Q…AKYÚíüš^…}} FY-áiņÚŧgIøˇ¨ę~ÔÅü(/ĨÁkdą-ííšõ_é-ŖøbŌŪEb€š÷ފŠ* --Ĩ;¤ˇ‰ÛՐ•UQBĒ…QĐQĩ´>÷‚6oR€šSDäĄôåEg‡ōcĮĻŅNHŖ;#EĪ÷W Ö—,kh¤aŨ”f§Ąv…}1Å1­áb C#Ą*8ŠhĸĄšÖŪá•φ9 ũŌëœSŒąĸCUĸ4^ˆŖč)<˜÷nōĶ8ëļ—ʏ ė\ŽœR”F?2ŠúŠO*3Õō¯;øŠŦũŠ/Jiú„Ū]Ėä}Åôö¨-ūü8ÂVŠŪL¯.ŌõŦ·úV™aņTÃÎ_Hp˛ 9āWŦÍciqŠkxž1ÎÖQŠ’bˇŒG kŠŖ¤ĸĸ0D\š‰ ž§hÍmƒCF@i芊*ŽS¨ĒķŲZܐgļ†BAt2"ÆģQB@1UįĶŦî^âÖ)Yz@qVUj(P;M’ĻĮ›>:nPi­ko&7Á``n@iūT||‹ųRĒ*ŽÕP Ŏ…A `¸QÍ*Ã6ä‰ŊBâ¤ĸŖ0Ÿą7§mHÁ‰˙tRĮqåĸĻzíĻIko3n–ŊYŠUT*€ė(*ãĻi hĖŦQK/BG"ŸE†"ĖÆ4,à Jōi"ˇ‚|˜c=v(5´ •፤¨$~4!æ˜ŖŪßÚ3ųטéŸūŅâ]fÆōŅ`ŗ°VÛ6î¤cņŽ‹áôɤ\jוŸQ§!†ßáũ+ąĸŠĨqĨi÷rŦˇPK"ōãÕ°ŠŠąTé€8¨šŌŲųkx›ę‚ρĀĨ¨§ļ‚åBĪ H ä\āĶ>ÃiĪú,<˙Ķ1IũŸe~ÉWĄō׊{Z[;okx™ŊJ ĐöĐK2ß7 8Ŗėļü~â.?Ø}–ßn>Ī:ã`Ļ +X¤ķŌÚ! 2 ¸˜´OÅ^'QÕ­…„ģ­āaķHŨ˜×}MxŌT)"+ŠędŒYځŴ?÷ĀŠ€`p*¤ēe„퉿ŗåÆČ Ģ&4*ĸ•ąÅ hr¨ úIäD”›˙Ŋ´f AĖ‚$‹o4Ų­mî1įC…zoPqRmQ”qĶŽ”lAŅG>Ôm_îĘšę– Įã#i~+ņĢc…nmį+3ü¸NƯøĮß´ī]Ę!ĩŠo,ųB‹vާám­å§€tøīˇ‰H,Æ ¯a]QEQEQEQEQEQEQEQESYÔĢTđAŦKč—Í{—n“ąÎđƒ­nKEQEQEQEQEQERÔ´Ģ^ßČŋļŽxŗŽ3Í`†Ū—:Z‘ũÂĮoå[úv•a¤Ûų}¤6Ņv$ *íQEQEQEQEQEQEQEQEW3{ā ę¨ÔŽ4ä79pŖŊth‰*"…Uv§ŅEQEQEQEQEQEQEQEajŪĐ5šL熛 Ō‘÷Čųŋ:Škđ÷ÂörĮ,ZL;Ҏ)o›ŸÆēeUE  :NĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)’:Į;œ*‚Äû åôOˆ~ņŗ6•atĪq Ĩuu•ŽëÖ>ĶZ˙QwKu8,ŠXū•áčž.’hôŠŪŧ ˙:é¨ĸŠ(ĸŠ(ĸŠäõo‰ŅnäĩžÕ#KˆøhĀÉŽ–Îî+ë8n mŅJĐúƒOšd‚–Fڈ2ÄöĪø{Į‰¯.-tËą,°žF:×IEQEQEQEQEQEQEQEQEQQO”´SCĄmĄ†}3@elí`qčiÕGWĶbÖ4‹­:feŽâ3ęŽ{Āž˛đ-­ĖV—2Î× š‹ôüuôQ^uņ{NĶn| ŠŪIoŨƃdØųןZĩđy>é{ąķn>ĩŨŅ^{ĸü-Ķ´oËâ4ž™ævgXIč[­zQ^9ņķKŗ˙„jÖų .ŌА'-Įs^—áTŲáM)yâŲ?•iÜB—ōĀ˙rE*ßB+ˆđOÃ+ë7ēŊÔŗŊĀÚĒ˙ĀšÎ+šicV ΠúJ@ ‘֝HHQ’p=é7) õÍ( Œƒ‘KE4˛¯Ū`>Ļ—­-#0Q– zEuaō°oĄ§R3*Œązš@ĘÃ*ĀQH%›h‘ ô Mž%šˇ–p$R„ŽŲŽ/Ā˙-|}{uܓĩ×fūš“Äž)–ËÆz‰g4{Žžá{ėģ=ëˇvá\Ō‚Č ZA"€ĘOą§QEW¸ŊĩĩĀžâ8ķĶ{bĨķËķ7ŽĖgvxĒ‘ët˛:%ė,Č2Ā?ARÚęwĨ…ĩĖSûÛUš(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+‡øĄãđ‡…¤ž ũĒ|Į ­qž °đŪ§áDÔŧG{ÎĨvĨ‹Ī/*OLzUŸ…ž$’ķSÕ-kļi4¯ÉīP|ađŨ˜ņ>ˆņĢ—ŧœ 9Į˙ZŊSÃŪŌü/§ĖÚrHžly}ōĪõäė[Äž,ņ¤í"؛†yB6Ōį=2;Uũ*ęįÂ?ßÃöwS>˜ęE#ƒŽÕ'ÄoI{ãë_ Ŋב§Š qķ`7ąöĒū6ŸCđ՞›ĒxZx–íeQ0ļlî_âJOŠö燁mČŧæ,r{ķTãđdĀ/­´Ōļ˛ĐŸĩ;ˇc?•k|%ņ„Ū*đķ-ß76­ąĪ¯Ŋzxįí3¯…ėaĢ\ƒô4篇vß _Ä7ÔZ”6âXŧ™Jƀ-tŪ ¸ü1ŗmI¤Y&MŒČå *qœŽyÅq˙ $ē‡Åž&´–ææxí$hâ3H_hŊ~‚ĢZjūÕõMSûgWšąÖb–"Ķ”€~\•Ųü'Žō'QK럴H×Lë&āw¯÷‡ÖŊ ˛ŧAĸÅâ ]>iæ…$Á/ moÎŧÁzVĢŠ|AÕü=ąx4Ø WČw””öĪ­jIwĢøSâTžĶĩIä´ŊDĶČ\Þ¸ĪãZ^,K·ž%Ņ.Ŧõ{ÉŌöUŠxfrāŽ„Jčū)xŪãBĶ,,4įŲŠēĸ88ōÁĮ?­Pņg†_Ã:ö¨]˙hÛ*Ęō4ŦŪaī}j [ĮÃTđ‹¨ÜĪ5ĨĩÍĘÅ{$' ̃ž~ŧT+ōņíY<>ŋđ”h35õãũļčŠ]üB2>ī§Zõo xaŧ;m&íRîøĪ†&åˇúWKExÅŽĄsņâ6ĨĨĪu4:V•XĸŽæœ~5‡¨]kcÅz—€Ŧ¯nd‚52[Øvųr›Ž3W5ŋø—žŅŧ=usböO-åfųŖL÷5sÆz}§ƒ<5ŗŖę’hDčĖ}ÆOPFjj!ø[mâĢ BęŌhÕK,2 sÎqõ¨tíTÖžn}nō;Äĩ2C‰H ˇŸ›Ôščžøžâ˙áģęē´ÛŪĐ0iVÅbø&wø†—úΚŠÍvŠÚŽ JĒ;āMZđ'ˆî.ŧS­ø:îᎠ€0†VlžĪs\žŸm¨Ûü_ŧđÍŽĨx–†=ĨĖŘ/|ĐûŠÛˇxjÎß`R~Ā%”ŋ˜ŲĀëÍjč^“Ä^ƒZŋŊē:ŧŅ™ŌT¨Œž@ĨÖæņ4Ûû™íīl$)$ÖīĩŽŪ‡ņŦ˙…^kx’Æ÷Sŧ#œÂ“<„¸P{Āßm˛øÃŦéW•ÕÔđūčM&áP\kZ īõkOjWV70ÍļÉüöU{0í]/ÃKk¨u uįԛPˆÎ‚ûƒ.;WŖTvâęŌ[rė‚E*YĪĨ|č4ŊoNøĀ|3i­^4RåbB•É­¯\ę˙ŧmĻÛiڍÅĖ’e¸ļŸÖ¯üA°Õ<ŖXøŽËZŋ’īÎU¸)(ûšûŊzGÍâ?C1šXâÜIž6ÁÃ|ēŊÔ´_íס8¸hÕ¤bHÕĪ[Ûë|_ģđõžŗzm {ą$Ĩļ/ļ{ÖĩíæĢ❊U‚j77vZˆ ŅĪ!|vÍküSņMՅ֙áí>V†ãQ•UåS‚ŠģŸņ3Ðč_.į°’`U' !o0מū˙Zę~ĸGđßIIY?­vĩZöÕolĻĩw‘U(Z6ÚÃ>‡ą¯đäwÚgĮ­ęww‘EšVy‹vߌßښ­§j:nŠtu(Cķŗ¯Tū7Ķ5ŋ xR?ÃâįÔ#dfBßēÁę6úW§xKW}wÂÚ~Ĩ*íyáVo­mד|?ņEŲä>ØšüEsŖjĢđéõ÷Õ¯!ŧˇļÁOĩ@ā`WQāëûü:ˇžōy"že*ŌBÛ[C\×Â{ģŲ|Wâ{[Ģû›¨íÜ$^s–Ā jˆ×ŧ?ŠkÚŦ:ö§sgĒE;$ e*GŨÛÚē…ip–:š¸ŊkŨׄ¤å÷o\pEz dxG]sG–ĖŨOmŸ›Ė…°ÜW‡|6ƒ\׿V9ã5ÎxĨ5ŋ üQŌėŦ5kÉãŊ$ŦsJYA=xöŽŗMĩņ‡ãĢĢ‹šîDŠÕŪWÜēđ*‡†á“â…îŖĢ]j:…ĩœRųVŅA.Ā1Z>ņLúw‰u/_O%ˊ^ŪY]—ĐÖ&‰ĢYx‚âū{˙ÜXë0Ėę‘4ģU@?(ÚzÖö‹ j:ŋ‚ŽāÕĩ r&yhdÆáÎ?jâ>Yë$Ô5[ Ŋ^đXZO‰ČC?Pî }+­đሿđ˙ċī]]Iqi°KČیgŽzÔvúģø˙ÆzŽž÷’Zé#jyrmķ›=ĪáQÚjīá/‰ømīåšĶoĸĖ~cnhۑŒ×7â.īÃß´ģ=.ūíEįĖ7ĘH OoĨu–ņ^4ē…ī/-ŋÍ1œå¤öôŦ˙…WŌø¯Äš}ÆŖqp–îaŒČûˆëÍs—~–ããréŋڗ€´&Cp;ņ^š{āøÛÂGJˇrIgŽs!WŨîEyĪÂՖîã]ĶĩëëŖqjÅŊÁČ^øüĢá߃åk‡×īu+Éąr˙eŒĘJė @'×5ętVnŊŠĻĄ^ę/Œ[ÄĪΰ¯-øg§ÃãËG]×su$ŗ”YŽ#_@*_kM˙ ~ģā›ų{Dfō1Č_LúW ž‚oŒˇš­Ä°ZnãV8)´fģßx3XđįŽõKš"X´™TˆQ_#ÚŊFŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠķŒž¸ņ„‹ŲŖÉqlwĒ/9õŦ/†Úį…cđ…ĩžĢŧ–ĢļE¸[­u^ÖŦ¯ĩ‹ĢË .}6$9ēXļ—?á^gá/ØiuKۙ [Oš"|}ė‘]Åá"k~Õvĸ$ČÍ!č­Ë=v˙^ë0ŨãJŨō4˜ę?Jã~ëÚ]–ģŽŊŨĘD×~ëw~zЧu­Y]|zût7hö…URUų—;GUīˆ:KhŸėŧPđté˜JĄ gšŽ×PņO… ‚" ;ŊBuTPĸŗī\ŋÅŨf<k¤Ũ4CSmŦđ*ô Wyđī^Ķ/ü-ĻŲZŨG%Äę$EūŠė¨¯ņĩĖzoÆí>öķ0ÚlĮš˙wķŖÅö×4đîĩĒY‰'†Ūä<ƒŽ¸•ØEâí)~î{ČŌoąy^XûÛņŒbĢ|đí֏኎îՑīxFÂö¯T¯ũ nā:v›j&O;Î S<ë[>+ņŽß 'ˇŠú‘­v"ŖįŸJ—āæĨmmđēŨ§#XY÷ŗļ’NŽ?áNˇmoãoË-Ükö‰™ā ÖrĮŌŦiÚw„ŧ~/NąZj+4ˆ'ÎŨāž†´žØĪĨø‡ZĶíndšŌ`lG!éšöZ¯wyoal×S$0§Ws^!đãTĶĸø§â9žō/.g>T™Ú­ÉāzÕ]SQĶgũĄ,nžÕ Zĸaœ7ÃqõĢŋĩK)õ˙ ´1?—8f!žčŨÖĨøģĻÉzžņ%˜ķílŨ<öNBŽWŸĶõŽŖâ.ˇ§Ü|6ž+yã–K¨•!%‰č+’H-ŧ!ā? čúíĒKk}+}Š$\íČÎ Šâ_‡zƒ ŽŊáJHîČcdÎüž‚´ž-É,zĪ‚'”„Ė_5ۀ§*y¯ZŌõ­7Rfˇ˛Ŋ†âX|ōŗļ´é’¸Š'‘ē"’kÆ|-&|auâ";hė¯U‘­Ūp°?xzéü/á¨fņ˙Šon-žūo–8b`ŪZã×׊æž3ø~CŦhž#æk[i”]Îō=+Ēģ>ûdđiōÅån Ø%Ļ=ëĮAĀų‡ŲcĶÖ]Ļ;t~`qĨiiZĨŒ?UZâFžTĄoâÛŌšŸ…1ëŋ 5](N<éđƒĒŒqGÂ}3CˇĶo´jãÔmŽp—å,Ŋé]ސú §Œ&Fj°Ãn|ûôūũÜ÷Ž'KÖtŲ~>ęWbęŗˆŦĨ†ÜāwŽ÷âv7ˆ<w ™Ė  ShÎā9ĮãQxC\˛_†ļŌM4q›kR’!l tŽāîwe¤ęú¤čTjR3D§ŽŪqY u{-Wņ5žŖ*ÛJˇLåd8Ī5OÁõŖüjÖŽn%XŖ Ä_åĪĨn\Eá¯øUĶĩû4†âŪvŽ ĸ6oQÛ=ņQxBø‘Ļč÷w¤Ĩ¸2ۂ?až™¯bĻŗ*)f ($ö¯ ƛ'íöÅŧ‡ėŪN ģž]ÁzNøĩŠXÍãß ´WQHąĘĻ]Ŧ_™zÖĮĮ RÆE ŊÔR3ĪG•ŽģÂÚŽŸ˙ ōÉÚō‘Úlr\pvôŽ#āMô gŦÛÉ*$Ÿi2-ÎڇGÔė_ãîĢ9ēŒDbØpÁn8§xûPļ‹Ū 4N¨~vŨ•o⾌ĮÄ牺cm",˜>`sOøÉâ;Ÿĩ…”ÂyfÚėąÛTc“]ÂmFÆ閰ŨF÷ dŒ7ĖŋQ]í2YÚI"(ÉbpxžŠeí}u5Ü"ŨāQ›ūSĀĢ_/mŽ5—ļËÅ2(<¯=Mi|bÕmáĢCĖEä1ášü+Ĩøguo7€ô˜!ž9$ŠŨŠ­’§ë°¯"øķwhŪ´ˇ3Ą™nC÷sŒV߈u[ž܃snĶĘ(Ū'oĄøE¨Ú[ü3´2OˇR܎{×3đĢVĩOx§tŅĒM7îōß{“ŌĨą˛đˇŽ¯āņēÃ}ËŦWōˈĶŪ´žhŋØ>.×,4ûˇšŌP.ÖÎBŋqšõzdšōŸŨ5áõ(m|wâkYØ#M)e,{î)°ŠÖÂÚkíÜČL(:œ˙žĩĮøŋWąo^‘n"xâû¸^ŊkØ ũˇØZņ'ŒĀD›ž_ÎŧcáF§h> x”<ą>rŅŨynžĩ=ŪĨŸí%ša "ÛfæāôjĒjˇrHĪ ^0ƒ' v¯'ø§ßxwⅭî–0š˛y-Ž™<é^é¤Ųޟ¤ÚÚ.1akËuĪ‹×ÚOÄ%Đ˙ŗqb%XŒŒ>fĪq^ēž5n›†k+ÅWö߆u 7ŧđ˛¯×W™üŋˇđčÚŦŠksm9fINĶÆĒx"Ũnū$kŪ-”ųZT Ŧs7ŊķXzgˆôÛŽ×z¤÷ąĨ‘RĢ3/Ũô%­Ô7ļąÜÛČ$†E܎ŊЍĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¤#=k"ãÂē ÕĪÚn4‹9fūûÄ ­í-âƒÉŽÖ,c`^1Q.•§Š , °)÷Z}ĨôĢxæˆtG\ŠŒiV hö‚În˙z0€P'‡thŠ˜ôËU+÷JÆ)ŖÃZ pëĨÚ̐D`jí͍­ä‹xä‹ØÃŒzU+ hšdĻ[-2Ú VDæŸ{áũ#QšûMæo<øĖ‘8§Ųhz^›;Mecŧ÷š5ÆkBŠĘÕü7¤kģ?´Ŧb¸)÷KŽqVítë;+AkmoPŠ¸†ŪđË_ũ´éPųÛˇtã?Jé4ŠGÔęĮžđރŠŨũŽ˙JĩēŸß4{ëQŸøu‘Pčö›ĀĢxsGĘ:Ũ-d;ž%_•ŌŖÂÚ.¯“hŒ§ Ŧ`MģđĻ…{iöYôËv‡9gJšĻi5¨ļĶícˇˆ Uę­}akŠZ=­ė <÷Ŗqk&?xf‘čvJãĄÔRxÂŌߨ–ŠŨr‘€i—?ü-w¸ĪŖÛģÅyÅkZčš}ž’4¸mÔY…Ú"<€+.ËĀ^°ģ[¨4ČŧÔ9R܅ú ×ŊŌlu a’ęŲ%hs°°éžĩ™kāŸYŪĨÜlK*6ä=BŸaVõß é>#ŗēĨš\D§ 1I øgIđÕĢ[é6ioļ9'ņ­zËņ̉ Ūj3ÆŌGeŠ(åŊĢÅ´„ö^5°˙„…5)lõšAmnx$ņšMSĀü56zՇˆ'šQsfŲŽ<āX|¸ũkŨŒ1ŪØˆîcYD҆AČŦ8|á‹{Ąq‘nNᑐŌļ/tģB‚ōŌ)âC•I ~DxO@?˛m|’wlŲÆ~•kNŅ4Ŋ ŋöu…ŊŠŧb@ģžĩCZđn…¯Ėŗ_Ų+ĖŖb­LŠšcáũ+NĶžÂÖÆĩqĩãÛÃZĻŪ đËm˙‰АweaU9ü+q#T‰cUví\ėŪđåÆĄöŲ4Ô2īŪ@bˇŠ^•ŅECĮ…EvŦ;øvëS:Œú\]’äu5žđÜú€ŋ—JŽƒ‡‘Č#ĨhÜč:UäREqa‹#ī}ɝÍëOŌôm?Eˇ6úuŦvņ“’uĢôÉ#IĸhäPČà q\ü^đŧ$•Ņ- cœ”ÉŠ›ÁžrKčv Os “I?‚ü7s•.hSģTļūĐ­lŒzeŋ؃n•ČÍ:ßÃŦĪ5ž•k’.Įhã XzTká/G0•4{5‘[puŒ­6ãÁūģ”K6“lŌnßŧ§ÍŸ­jÜXÚŨÚ[ˆ#–]Ļ7\ŒV\^Đ"ą–Í4ģ"oõ‹ˇīSôŸ hēˎmŒVōHģX í[5Å´7vīoŊšk‹­"Öi›ĢțE7‚<3:&‰fĀ ĮŌ­hŪŌ|?æ.Í-üĶ—ŲŪĩĢ÷ÂZĨz÷wē]ŊÄĪ÷šTŨŸÎĸønKuˇ:E°‰Nā8ÍIgáÅ&ŽßM…a‰œŌÁá[\-ÄE´S)Čt\Nŧđއoä\iĐ4{‹—œžĩsLŌlt{QmalEčŖ­]ĻJ@…Éč׀ü+ŌŦußøĸČ|Äķˇ R§s`Š+ÛtMŅ-Ūe_—=YĪŠ5—/Ãß Í)’M’ÛģæēKXl­"ĩˇ@ÄĄQGa\öĩā-[ŧû\ĐÉ ÁgĘøëZš>§h:wØtûq<įÕŗęjŒūđõÅ´pI§&ČūîŌTūb¯Ûi6Z>“-ޟnÄ¸^įëĮžhöĖŪ"Šö3eée`pTûö]/G°Ņmŧ‹u‰ ÉĮV>æŠëžŅüEąĩ PŌ'Ũ‘׍.‹á]@I… FaŨ˜ŗ0úšüáš3ģF´$õ;9ĢéŖiéĻ 4ZĮöA˙,ˆâ¨Ûx;Ãļwkuo¤ZĮ:ũ×TäS5Īč#¸KOOŽyP`9āÖfŊã Ā-§iMnĘ';"ŠQëTuY­ŧKņHĶ’%š+Íܯ¸HųGÖŊŧÖîÆøÆ!.›öm7MŸy¸uÚķ˛öėפ€: ZÁÔü k_ižĶĸ–nīŒgëZQiv0Ø}…-b¸Úb ÁŸ/ƒü90ũæfßöČVĩĩ´vŅÛ[ÆąCíD^Š*j(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¨nmĄŧļ’Ūâ1$R)VSÜW ß ūÂË˙ūģ¨i‘‡ŨäĢîŒ}ĢzgÃÛk}R-KSÔnõK˜›r}Ą†Å>ģGÚQEQEQEQEQEQEQEQEQEQEU-VÍõ2âŌ+—ļyP¨™:­y΅đŽįÃڌ—–>!^f 0(?yĪzõ(äú͍ĸŠ+ÄZ]î­Ļ›[IėˇÍ".âGĨqžø[wá›įšĶ|EqšáæS"OZôĄKEQEr>1đ›ãļžæY šˇ˙W$}Ēī†<'iᘧ1K-ÍÍÃn–âc—ooĨt4QEQEQEQEQEQEQEQEQQ\\Ck M<Šj9wm ~5”ž,đü’ŦIŦYŧŒvĒŦ ’kdĀrzZkČąĄw`Ē9$Õ{MBŌũ­.#™Tí%85jŠ(ĸŠ(Ē×ö–ŸņķsGŅÜ [KÛ[ägĩ&U8%qV(ĸŠ(ĸŠ(ĸŠ(ĸŠ&ŠF*’#2õŗŠ’Š(¤f bÍD—0HûxŲŊ‚jjk: Ë0QęN)zŌŅEQEQEQEQEQEQEQL’D‰ ČĘĒ:–8Č. ēRĐM wFÍMEQEQEQEQE5™QK1¤ÔęrĪäĮu ĘFv+‚jÍQEQX×^)ĐŦ¯ÎįTļŽāœŲÆk]Y]C)OB)ÔQEQEQEQEQEQEQEU{Û+mBŅínâYaa‘ēųëÅ~ĶôŒzEļŸ Ã ģ]b^™É¯ĸÕB(P0§V7Š4‰ĩĪ]éöķ˜%•WŽ+‘øYā KÁß˙h^Ŧæā¨„¸ī^EWâ/ËĻxģIŅ-Dr=ÖL õUë˛ĸŠā>&x7KÖ´KŨZá_ív–ĖŅ0rĀŦ/Ųų‹x:÷$Ÿôŗ×é^šEQEs^3ņ#øgM%–YîcPœgqކ&/ 9ÆYA8Š(ŽVÉ7Ä)ü6ą!Ž+a3IžAôŽĒŠ(Ē÷ĐËqaq 2yrŧl¨ãøN85æ < âoxŠûQÖ/KÃ>ācßģqėÕęôQEWžŗ‹PąšŌp|Š”Ģm88¯đ†˜úĮ{­. åkXҊ,ž8¯¯9øĨāīx˛-‡Ší´K9ė4K;KŠ|Ųâˆ,’uÜŪĩĄEQEQET7S kY§<ˆĐˇä+Áž%hŋÚ-l FUPŲČ­tTQEsū2ņđŋ‡'ÔÕI…HÜãq'Ĩki÷w§[\ʁXÕŲGbEZĸšˆüM,ßdđėq!†+A<’gÄôŽžŠ(ĸŠ+É|i¨IâO‰:g„WK5mČS3ÛéV~x?Xđ÷‹õĢ‹ČÚ+ >[TWĘĪ}+ÔhĸŠ(ĸŠ(ĸŠÃņFŊ˙î’/3´ŠĄ8ÉcŠŲFßļ1¸gú(ĸ ŧĩŠúÎ[YÁ1JģXƒŠđí;EƒÃŋ-Ŧ,Ĩ—ėÆûË‘ŌŊâŠ*9¤A$‡E-ÉÅ`ø?Ä2ø—I’úHDJ&dLŧÆkĸĸąŧWĢÆ ŋ~X¯×WŒé^žņ—ÃkkË)a]BîáĨšyO,ģēfŊˇ@ͤŌ4 >YŒŌ[Âą´‡øˆīZTRČ9´QEQEQEQEQEQEU cR‡GŌnu Î#… ō_Üë5ũR]bîÎÖ)6à -´cŪšŋCoņ‡Iļž“”$§ø†Mz_Å/Oá]6Ū &Û{vÛ#>ŗXZž“}ĄøEõø|K{6Ą Yã(OkĸĶĩ}CÅß"Ô4ŨDŲۈË3 ŨČķYŧK­kvš”ÚÕķŨyÁI\*„zũįÄ^čđjŗXi–y %ģmgo¯aüęk/Ũø7â~ēŋ–öÎâ%hžwÜÃÛ=ę=oÅúŸ‰ž Gá"á­-ãË\Mˆôk4kˇ^ø—†­.oî ‘|š>ĐåđÄ}áX^Ö'øĮ5ŒzåÃ]Ēn[–PJįĩzwˆuûŸ‡^Uŧģ7ڃļČĨ#cĶúÖ寉4˙ /‹fņėkÚ܁呌íĩ_Ö>(ÅmđŌ rЃ{pĄ#CŲũ˙ĪjŖŖëņxīWŸVšæiėœÜ@øŲĘŸģŽ˜Šū xb~÷Ú5ëWŸ|JņÔž†ÛMĶÕ[Rž.2Į„Īzį5ø|GāßÄRø†æė†Sqo)pģĮZÚņOŒæočķŲ^-ŦZ‹ĒÉsĮîķúU{â]QŌĄ´ÖЧ]ÎĸYJüę1í\÷ÄË/Üø×D´:´x{ÖŅlá+ķ^ŋĨz=´ē÷…|'Š^ëw‹¨Ü@žd~\{@}ÜW i¯x›Ä>ŸÅvãE$ŗŲ´XAŒŖŋjėŧ7â-[Æ^Š˙Nx­õ&ųK8ʂ:ņ^Sā­?ÅڏüA%–ą _Ã/—<ŌĻwĮ…ôéŌŊ7Æ~5ŊđĖZfm˛ãZŊeXũĐ{ąöŦŋk>'đ6ZÆĨ¨˙hŲK*ĨĖLĄ|ŊßŨ¯M͝ĸÔtø/!`ŅˁjŗuČ5+&TŌnRÚķĒHë¸~U០˜­ZĄŦC¨OĻM—/Ôn|ugāŨao4Ģēâãh×ړQņĄā wMĩÕ5/ėoÛa’\zÕO‰úΊŧ3 zŽ™Šƒa4 ōŋÕĶëSëz§ŠãŅô;X‚i/cmņ’Fw{` ĐņŠīŧáÛ;[먎õÛˇōâÚģA'ž=Q×õx;E‹^ēՍėaÔĪ ´ãîūu[Įú߉ đŌx§CÕÖ/%ŅÂnäõ9ŦvņߋÛÁšvŊo‰™cōÖ-Í7Ģ­ņAüGqĒx}Ūū8`ēš3¸_ēŨ‹zķ^Ąc§ø•ŧ94:ŦũĀōgŠ,*q^mĄx¯Æđ˛ÃŽŽˆ¨Äh‡ī¯â+v+ŋ^øÎīH´ÕíZŌĐ+Ë7?‹økÔc ą¨cš€ŸZ}ā>!’öįöŽ 7”"GcŸČė5wQđ‰4‹{Ģų/Ŧĩ1ą›Ē7¯ĶšĪø‘­xŸÃēæ™&ŸĢ°˛Ô.;ÉĶŒÖÄÍWÄŪŅŋļ´ŨUR¨­ˆqÉĪ֓ŎÖŖđĒ-NÛQh7XųˇWæ“+úV_Áí3Ä2čuņÖB遘ĩ¯—ËsКö*+Ë~-č:Åæ‘}¨[ęī „V˙= 9īY˙ tëÍ/Á–zõÎĩ)Ķã‰É´#åP ĢžģŊø“&ŖŠK}uiaĻ+h “oģRø7ėwúÆŗāëû§ûE°a Įņmė~ĩÁØÜøŽÃâĨĮ‡­ĩ{Ģ4ß+–Ø:îĮ¨Õü<$˛øŠØ]ŊÜÚb†ũėäOl^ÅEQEQEQEQEQEQEs^=ͤÕ|ŠÚCŸ1ĸČž;Wœ|ž;'S´šuŠHĻ;•Îéū‡âŸAĒ|l°*Éö{r‘åą‚}Zč~9YËM+R„!ūbŖ8Ō[i>ŧđäwŽļī”ģņ/ŠØĐ!ŌíŧpÚM™´´dĸ1ëĮZā>î¸ĐĩĻåϚI>+ á˙‡ėaņžĩĨë‚Hgg.‡Íd, <‚¸ŽãQĐ<'§kÚŲá7z“>É;9Aë\g‡â>øá|ښ…Č-ŋ#€kĶu]WC‹Äv‰kimuĒLØ,~ō¯¯˙Zšu$_ŽŌ,›cX!ÎO‡zæū(ͨø—ÃQęĖŪeĩĨë'ʘÄcßŸzî4˙ x{Sđ}ĩÍÆ§pmZÜGēltéÖŧ÷â6“f<Ĩ\čV“Į§[Ũ0ÜîĪņ}?ÆŊC\ņ•ˇÂIŽZT>e–Å\ōIV?ĀKČ$đdņĢ*ˇÚYļwä×ŦŅ^ņÆŅĄņKšm~ë¸íČŽ×QđVwáī´j­ėö{”k†d•}áÉd×5ģéŦ‘<Ķ™­tūŽŌ/Ø%›öaōüīŊˇļkĄĻHÅbvB“^+đ’`~"xŠXÍ.AôåĒ׊Y'øņĸÁ#í ošOž)ŋŲ7xyYđÆį+Į¸˙õÛ,}†ßŨ¨ãéV) ĀɯŅļ\~Қ¤œŠōäôāU¯‹/|EđiuäJÜ˙Ā–´>=ĘŖĀ1|ßzę>Ģ%šŌßáĻoĒŠ6ˇKLĀķĀæ¸káŽĩá=%õŊÄ 5ŒL`™‰~•í~ÔeÕŧ/§ßN…%–,ī[TW‚ü[ĩŧđ˙Ä]Ä:l`=ĀōIĮŪn˜üEãM2ķÂ>*đæ¯anâæ?ŗžÎ2íĮõ¯Z›E–ßĀw\.LíjĘ\u,G5Ä|dˇđŪĨfäŦŅ]ļđßJÆđüS_ūĐúĩíœdŲĀvĘëĶ;@ūyüĢJėíũĸ-€pC[‚@ükĐ|kwŸá=Bæh–H„{eã*zķ^G'§“HūØđˇˆ#dķDNų\zq]ŠĒ\ęßnnŽHYü“uÁÅtß ä…>hČ%\´YP[“]Ŋ柆xú>‘Ē ÷“g6ĮW¨xTđAŽiZáē°ŽU/o'<:~uŗņvöIŋá`Ĩk ĮÛĻkĸņ‡‹î4[[¸­áŽæ84ņ+Ąžb@öë\vœžwÂûŨfîô+ŨG#Eg ڊ}6ŠĶøEâˇđŪ‰¤Fk—™‰Ī*õÅ?ÁKkŖ|DņŒ˛ÜÄ[åuįšÉÛ\ˇmŽ.ū øoUģ-ŊÖŅįĄĀ_˜đ=;W{âč“hrÍŦkZ„ļ‘4,“ š0+§đ\cõŠĩKØãũĄėYv,;Xį§ kڕ•Ô2AčE:Šņė‹ã¯‰RE˜ļßŌ™ņ>).ū-øfeĖëĩŽ:… Īõ§Ĩ¤Úgí %šaš‹1ČĮƒōãúTßíäÔ&đõ…ˇĪq$įj(É9ŽīÅ~msáõƕ1aloFQ\ÁÉou‘ 7¨DZ*´Iîä˙…AņļÎUņG‡5 ÖŅ$ōŲ—øNz×cĒx3FÔô'—QÕ/&ąhÕ3üĩ‰ã¸­´ī‚g°GkRŠĖûĀnâē†QÂ~čč#\AÁį“\ŸÅöđ“øI1Öč:ô+meĨņŌbHÚ­–GpyRNũ+Ë~1iŌč#ŌŧaeŅH\ŋZīžÃ,ú+ë7 V}Müōeūųb“Äß4/ k6ú^ Ō‰ĻåW!sĶ5Ö[ĪÍŧsÄÛŖ‘C)öŠkÃd’_Ú8I;aY Ģc€HĢŋā}OTđ͍Ŗ¸k‚@^HsKņ…$ˇO ´¤„†áīÅ_øÃ¨[ˇÃ„HĨŒŗ˜Č\öĢz´‘Éđ-ļ°˙jũĶĐíŽoÃ~"¸ĐūéM‘Eäˇk§|ÁūĩíqŅ!=JŒĶëø™4)ā=Q$‘Uš´5Í|;…5o‚˙ŲąHžl‘JģAärj?˛}‹ÃږrÁ'ˇŧ`ĘÜŖāËFŋøĶ¯ę°ķkPŋbÜ…fØOlŸ´]ÙSĘT1oâÅ{ēí?2ãžãŊ:Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠB#"š߇ŧÕPō$†YdČU\ûE÷Ã? ę3G-֖Žņ E!ŠņøV͡‡4Ë]$iinĐg !ŨŒũk~øFÆâKá§ŦjfRįËûzS­|YáÍsIÔlt[´ŗDĘęŠFÚä~Yɉ¨NÁļ=Ãlpy˙ëWqâhž#nnb’+Äû—0šW_Ɲáīé•ĻļW–áŋå´Íš˙:—Äž ŌŧT°B3ēšÖëQø{Āú7†Ļiėáf¸aƒ,ŒYąõ5ŋđûBņú_ŨĀËrŊdŠ’=+TxwLūÄūČ6Ęlļí1úŠäĸøAĄÅtX]^}“9žiōĮļ3Ōģ MšŅΓ%ŦfĖĻĪ/bš›_…ē˛Ë=Äņ24iŌXÔ˙wš<9đŗDđžĻ—ÚtˇAįcHJŸÂģš++]đö™â;#iŠÛ,ŅķŒõ_ĄŽFßá.› Ž7Õu)Ŧã`VÖIrƒÛé]­āí'Yû]DLVęâvŗ-ži°^¤˛^^OkoK91+}*÷ŠŧĻxŽ;_ĩ<ÖōڜÃ4 ĩĶņ¨ėüŖÚč7:C,“ÃsŸ9åmĖūįŪŗôī…:ŸnöūeÜöä°Í.QsūÍMំZ7…ĩ#{i-ˇR9[*€ú ŠuđŸG¸Ö§ÔbģŧˇûKnž_jIĪzÛņ‚tčŅiˇėŽÄ,ŊcôÅsv ÜIjÚõîĄd-Y°œtĪ­z%ŊŧV°$ HĐa@íRÖfģ¤kNk5žšŗÜsæÛļÖŽOEøQ¤hZĸj6—×ßhŨēVi3æ˙ŊVõ_†Ú^­â?íŲo/ãžåxåÆŅč8éUõ߅ēgˆįIĩGP•â9„ØūƒđÔhZ?öœ,ÅÜ÷JCĖr~•ŠU¯­Eõ”Ö­$‘ WixÎ}+‡ĩøEĄYę_Ú0^jKzNZ´|ÍõŠõ/…š>­~—סwĶ\Fví1ų>•sÄ?t¯YÁkŠ\^ŧP¨DØū´ÂŊŌ_B‹Gž[™íc”HĸWŨĶ úU[Ÿ†–Wj`—UÔM‰`M§š6qĐ}+˛ļļ†ÎÚ;x$Q¨UQØTÔV.ģáģ/I`÷k“ep'Ž¤vĢ–‡cĢ=ŖŨFKZJ%‹iÆt­*ã5‡öōę’jMôúTŗ¯āūøõ­=Â:w‡ŦŽ!´ķ ˇ2Ü1ųŨņgÖšæøMĨ6Žuoí=OíĮū[ųß7ŌēSÃÖÚĮ‡Eē–GŅUܟ™ąXR|3ŌŧÁöKËë;}Ą^Ū p’zčdđî™.€Ú#Û°´~YÚšo ü,Ķŧ1ĒĮ}ũäÆ DQ<Ÿ"ĨwÔW;â/iū'ž°¸Ô ˛Ų–)čÄúÖ}ŋí6+Ė[ËۋxØ2ZË)1)8ö­?xGJņ]„VšŒmˆNč3ę* 3Āú^§\Ųš–č\ŽÉ^wÜĖ=3TtΆ>ŌÃĸG<ą2•X唞ĻzāTžøoĸxWR’úĀL]”ĒĢžBsÅK7ÃĪ\ksę˛Z“<ãįk~ŠŦxoJ×tĄ§_ZĢ[Ž6āĻ:m=Ģ•_…–rÜF5[Pžŗ…ÃGm<šN;ÜW{I Kja@íRQ\–Ģāh.õ&Ô4ëë2âA‰žĖp%úûÕŨ+ÂZv“eq !Ė×?ën ũã\×5sđoÃˇS5ÃÍ}öŗ˙/qß]ƕ§G¤é–ö1;ȐŽĐŌąúÕÚ+ ×;˙ ŗÃÍĻIa(š™4˛–`@+GEđ>™ĸøzįDGšk9픕ŗ´zAY7ÂmFÔŖŧîf6øĄ‘ō‘Ÿa]õÍx‡Āú?Š.ã¸ÔŌY &͂BĨIáīčžf:UģŸ`‚å…PÕūčúŽ ×ŅËuc<ŸëZŌRžgÖļt_iššlŦ ōãlībrÎORMs<)5ĪÚVŪxæÉ>bĘwgë]ϟdš}„6‘32BģTšÉ?ZĩEQEQEQEQEQEQEQEWŧĩ[Û)­œ˛ĄRGŊy&™đWĐįÔ­ôŨJŨ,īø’RÎ ÜÂŊ?Ãú¯‡tx4ëEÄqž§š­J(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŖĢ6 št­Ĩ¤OxîÖ_ē~ĩäēW_%Ũ ŪÕŊEq˙luģ˙\E ČËwœü­´‘ėk•ø!u­ËĻę6ēIJ9ˇ—blũy¯ZĸŠ(ĸŠđOKâ- ⮙gˆ/Ōúea>ŽzbŊåAäÍ:Š(Ž#ÅŪŊŧû^ĢiâFÎUˆ‘rb1é^ađšüAãĢŊRījĨĻŅûĸė“ūīNžtŊ6+Cs-Ī–1æJrƯQHA*@8>ĩáúî§ââ֑¤jIėî乆>\ō+Ühĸ¸˙ˆvZœū–ķMÕfą{4iHŒŪqŪš†ķë^/ømp.ĩyŖŧ–bäT˙ÖŦ?j:õ§ÅëĪę:ÅÅė6¨F]¸=8¯sĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˛íuÛ;ŊvīHˆššĩUi8ãšōŒQkŪģˇÔė5ûåŽō}Ļ&Տé^ŅĨ—:UĄ•‹9‰KÜâ­ŅEQEČø˙IÔu K7U¸ąšŅP!˙–˜ b|ÖĩkÂMŠ\Éq*\2‰$98¯IĸŠ(ĸŠ(ĸ™$‚(žF蠓^Gđ÷Į×˙Ä]rĘâāũ™šĩŒœ´ãųׯÖGˆŧAkáŊ3í×jė›Õ§RIÅjDâX’@0CbŸYēîŗmáũ"}Nīq‚–ÛÖĒkVŗëūͅüÖ/" RDãÁŽāÖŗŦjSëvúĩüˇm6ÄiqÍzÍQEQEâ˙ô´ŌŸ\ļÔo#™ĨÆ%!?^ƒđöY&đ&“$ŦZFKrOĶŅEQEQEQEQEQEQHH“ĐWĪŪšÔ?ámxt–wp$ēŖwZô6ņfĨáßXčšėĐ܋ėųSÅĖ،ÖGÄīø§ÁŌÁg5“éŌHF˖ŦŨkâG‰ŦIԒŪ/˛^:…„),ā÷ŽŖÄ~7šM^ĪÃē2ĄÔîc$ŌĮ$ZÍxƒÁū*ĶôßÜĮ{k¨|‘MíÚŪ†Š|@ņ§Šü'Ē@b{F˛ģpą1FųGŊ[×|Eã}-4vĩm>ā^€ā‚[Šü8­x‹ÅžđÔzĨēYšHķ8‘:7ˇøTÚ~ŋâ={áÅļ¯aˇöŒņ–e~ uŽá5׌neģēļ[Y ¸ŧ-u,‡į÷Įjëž#øËÅ^ oļÚÛÚÍĻŗm”–_­SēņΌ-ü+m¯Go§ÜC.>D'-Ÿ˙XŽ‘%ņvŋá‹|Ãocqqū¸îÉD˙gŪĩ`´´đ_„æ0ŽVÚ3#žîŨÉŽEüWãt¯¤VVކEˇ‡Uú÷Žãäē·lõ Ô,“ fQÚļ+‹ņ'‹u OC č–Q\ß<~k™ŸjĒ˙WĐüoŠŪø­<;¨éBÚíbie`w dcZ˙Į÷ˇū*šđī‡ãˇ7v˗k‚FO ęxîë]Õī´=ZÔ[j–gįU?+Q\ÄȗūׅŸŽ[ í]N­ãũsNņčđø`ŨĖëš^+õãŠęnuäŌŧ4Úžą´1Æ^Xķ§Đz׍ü[{Ŗˇˆí4‹UŅö—XäųŦƒø‡Ž×Âū#ĩņF‰Ĩk¸ų“û§ŌļĢ?\;t+âF@ķųW‹~ΨĸãÄ.§9uNM{ÍČøŖÅˇZV­gŖév"ķQšö3íUQŪĸŌüq,ū'ƒÃēŽ—-ŽĄ$m&s”Ú;ƒŪ¸?ˆ÷Iiņ“לG {žŊk¯Ô~#\hwŦh˛ÛY^IåÃ8pŨzdvއÄū*˛đŋ‡XģVx€]ˆ]› Íq—ßĩ­ŌĶUÕt{q¤\˛…ž ÷•ĪLņ]ώuĄāĢÛ¨~hĻ´f_qŠä>ņāéūŊē}kšđĢīũĄ5ßlŒū ^åEyŋįø—Á›oėŦ-&ŌđžF;ˇ˙…Aoņ_Ôŧ0ší†‰ZĮų™äÆOņm•ØøoÄöž!đäzŧdG]Χø+•Ķüeâ?Ü^ÜxnÖÉtËI b[’I˜Ž¸ĮjŪđŸŒaņEĩÚGŠúҚ)á'î¸ãō÷ŽOCøâ-WÆWž“L´ŠæŨXūņĘîĮĨ?Cø‘¯jū-ŧđëé6ŨZĢo8Hôâ­øcŞ/ÖüS5Æ•kŸk!Žy‘ŗĪû>ĩéÉøÛ^×|?eöŨ/LŠōÚ$/9wÚʧ­rūø¯xÃLitŊ*š6o5¤b¨ƒ°ĪvޝÂ^1ƒÄÖ×*ņ}žöÎCĖįké\ė>>Ö,ŸÄšÖĄũ/æšp“ˇšf8ĀÕģņáķĨh‰&W7j[ŊkkSņžš¤øu5¨ô”:TaF]ņ&Ė}ėWa§øŽÎ˙ÃkŲōí$‡Î;ˆābšM3Å~%ņEœÚļ‰og–ŦÂ/<1’P;ûVƇâŲ:„Ûģ` b}+‡đ¯Å?ø’îīOƒGˇ{č›hųФ~Ĩji_o%Ô¯4;í1?ļá“dpD˙+ûįĐTđüEÔ´Ī[h~$Ķ#ĩ{ŗû™b}Āį ¯Iĸ˛|Lí…õ7^ļå^Eđnī[“ÂķÛé1Âģ&wy'†=”z/„|`|D—ļ“F‘jļNRX3Æ{~ËęßõũÄļÚ.Ąĸډ.HKįœŸĨiøÆž&Ņ5 Hô.ôí‹dĮ¨ä×mĨM{>› ē„ ĻŧNBšģEQEs^9ŋ{? Ī ™īļ‹ũį8¯ÕtÁđį⎕zŠbļ‘P1í“Á¯¤Ą•f…%B ē†WŠ|SÕ|IuŦéē[ZEmh÷A -'úō§<úWĻxR÷_쎓ûrÂ+\cÉōßvå÷ŽŽŧWãŠâ7„éĸÖ84Š%Kģæ—ž•čš×gŅu}>EHąĮŨ¸bŧ×áĨíöĒø†; !swqzÛ›j*ƒÉc^ážŗ¯ŨčZ…ŗÔ­†ãmĘËę /ˆ|e%ˇˆ-|9ĸĮÆ­>YˇũČPu-T˙á2Ôŧ?â+=#ÄąĀE÷ú™íÆC]𠌃‘PŨŨÃci-ÍĊ5,Ė{ ķŨ3Å~"ņŦˇw>û5Ž›læ5’d,Ō‘ũ+GÃ~0ģņŠYÄ!‹[˛c!å7˙Jætˆ+ŋņU˙‡n-í^ō•x­ô­ŊĮ—ü'RxW[†!pS|RðúUßxÅôJÃCĶLgTž|.ņ‹ũęâ~2JĶÂ1Zęr‹ą4ĘQÕvėoC^“ā$1øDB0EĒgōŽŽŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠdŸęßũĶ^đ¨A˙ C^“~dųđOķڗãD3\ø×ÐÚ;-Ë1Ú@Év¯üd—ĀÚ2\á§YÕ[=ø¯FĐ4Û9ü7ĻyļŅŋ—•ÜŊ+ÉâŌnâøŨ|'ē’ŌYÔĩ´ WņŽ—Åž ‡ËĩÕ5ÍzéÍ´Ēc î$qŌ¯üPđôzįÃįxT´ÖŅŦą1đ3øW5đĢRšņ{YIwyL>Zŧ3÷ũ1ų×Sņ øm¨në• gę/?í‹8 öVÉô5CāR<~ģ?åéąųšëŧw §ˆŧ#}bW/å–Luȝ!øqw6ąigák…;Ŧîwɸ私ų×Đ*Ą*Œ0bxÂx đžĸķÄe‡É`ęŪõã?đ¯ŧQaĄŽŖáĪĶäxˇ‘˛6õĮĄ¯PøcĢËĢøBž†XXÄÁ:duŽÎŧ‹ĮŪŸYņ¤røVšäP ņąÆôíŠÍđÅ÷Šô?ŲAâË(åyQ ‚í:úHŖLš´Ö>,ߟXGÄ#l÷’psü+øTŧ‚Įãˆ/'s7Ų /,ĢĐãoo'Ä ŪÚÂîō(h”ņ“éSxÅ×ļ¯ôĸ%ĖĪûŠ{c°íZŋÖņü ˇ-öapĻm‡¨č?˜ĢÚVâ=KÁ6Öļ:–Ÿ„öÁ?ŗ’ʤ{wô§|*đđđējZWöšŪ4Re•AũŲ=ĢŌk7_8đö rú;õúWūÎĢΞū˛(Īį^íEyWÄ=ëWņe™Đõŗ×a‡rnā:zW?¤ęŪ)Ņ|k¤˙Âi§+3šˇļŊOSØÕßÅĮƯ E2ŠM™Ŋk_ãwžĶ|å>܃=ÖĻøĄyĸCđöÚ-^ĻY?"8ÛkĮĘøæÆūÛáœ7†HEŽØeˆ˛ŪĩÛézĨ”˙dĶ`bĶÛip2ŧsYßĶg€ņ~ÆšĪí›ãūŋ´žĮ˛×šQ^kņĨøw>äŨûÔĮ=9ëW´ëDˇø6 Ę˙g˙Ō¸īCpß5HėØŗė”ŒŖœŠé> Aŋ€"Ęs#3{æš_†­4ŸüJŅdÛo“q3ģÆ¤øž$đ‡Ä=ÅVą“ËåJ‹Ææė?éYŪ3–ø›AņlVÁ â0¸zŗ7<ŸÄ~Uëž°{/Å$ßëîIšOĢ˙Zé+Ål‹á-X¸EŦ™ũÚá~Á~‘Đ.įš}Ä}k›đ Æ‹Ū+pIąO;Ķv{ūĩŠāTƒSÕĩíKÃļKclĖVIä;‹×jöīT~ęļÚmį‰ŽŽ™ÛĖŋåW$’ØųôÜë÷ú׃u?ôy'ešŅ˙…˙‹ƒÅ^đÆą7ö/‰ô˙Y}–åcgš(ŧ2~aúÖ/ü#~>Ņ´ĨmQQŌdL¤-퇎5čß uĨÖ|#û(ļ’ÕĖB:+ WiPÜļÛI›8Â1Īá^9đZõ!ĶüK3îD¤˙€ōi˙.aÔŧ=áû‰Ŗ+*į‘‘Åt˙ĖVß nÆ?wöt^=År’4˙đÍĐų XũC•ūîy­?†Ú~Ģ{đûOūÍÕĸˇ€Š?+%ņsߚÕđ/†-ŧ)}­@šĄŧšQįKĖÎk˜øĄõŋÎG-rqÆ02it[ sûAę’Hˇ'׊‹â°Sņ7Âcøŧå˙Ѕ{m‘âųu^3ū‹'đ\Ā\Â/MÆáŗĪ5‘đôO'ÆĪÍlƒŋmŲūĩ¯ņĮD{ŸA­[!7|™‡eĢ՛ÆZž°ß466‹$õ”ũãú î5ŋé…%Õ¯ĸĩYyëWl/íu;8îėæY e]zŗEQ^oâ$>-øgĄÃvņA§DnexĖđ?­s?|mŧ*5Xo.n%ŗ‘X™Ÿ8ZīžëÃIJšČ2Fž\ŸQ\oÆ)ü%žœÉũEz 'Åqh1 ­šÎōį§ ũ+ĸ¯$øásäŲ良×ŧ\ŸJíä×ŌŪúÃInk‹O3vz`ņŽá•6ģâyÕTĨ2ŽA¸Ô6SM˙ y*˙Š$ņÎŪ+ÖßQī"[˛ŧ‘*FMŲq]GŽ|ú„vzގâE°lĄHqÉ?­z]ž>Åoƒ‘å¯'ŋĖüJˇ’ëĀŦq9Vō‰ãŋĩpŦ5¯8´ÕͲŦĖ ƒ ×Sá_ ØxsÆ÷ōĻĨ=ÕũÜfY‘—åõŦē\|cņ4¤ņ¯–?ĪáPk2$_´&–Äāų<Ī˙­TŨÆžļļ ĨäœČĩŨø•ŧŖéöTëôކŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠkŽøŲzn¯5ŗøOũ˜ōŪiē´–ú”ŽĖfÛšp‡oqZÚG€Ū-euwQmRū5۔؊ôĪü:‹ÆĶÁ%ÆĢuCĘC6nõ­Ī čWĶ¤ú„ˇ€ccIÕGĨgøˇĀÖū&ž 莤ŗÔmøŠâ>ŖëU4ī\‹ØŽuŊrãSōHhŖu ŊHî}ë¯ŧĩKģmX ’&ÜV‚ü#ƒ´—ą…Ä›äg-SšĪņ¯€¤ņĄō§Õî-í¸?ĨKá? é×sjSŪZI–‘Ę~āĒZ7ÃĄę mu›•Ķ|Ã(ĩéķ}{jėSĶî.$´K¸^dxÃō>ĩĀü;ĐRÛÅ>!Õ‘É>ȉ^ŨëĶ+'Äz*øƒC¸ĶSĖ6ŗNõ˧ÃûËUŗŌuéí-6lxĘČöĪJéŧ?ĄZøwJŽÂ×qUå™ēąîkZ¸=oĀ:—Œˆmĩ/ŗL‘BįķĢVÖ.uX/ŧC¨Ãt-säE {G=ÉõŦ6ø_y§øšīVĐĩsj/›7 ŅŽ‡ŌĄ˙…G4ZûßÚë\7(#ģ“- Î[ Û$ šâŋ‡†ģâm;UŗÕÖŲlP,1´{ļúÖgŠ>ë"Õ­uÖáKˆ9$;žšŽĘ? Ũjž›Eņņ\ųŖaxÁéëõŽN×Â?ŅŖūÉŌuËEŌŖųc’Hķ SÛđŽÛÂŪ‹Ã–.Ļy.nįm÷šF­úãŋā‹ŊcÆQkŅ_ũ­müģuQü]ķíI˙žŊŦjļ Ŋ´h,$ķbŽŨ]ą€Nk3^øyŦęū9ļņÕ!e˙S ÷9æŦxßĀŋE´3ęđ[Û[ēČb,K˙ëĢž1ø|ž+đÅϚ÷~]Í 9ļņ¸{V>ĢđįZņ„ÖŪ­¯ ¨ĩōĶj‚?‰ŊM[ŅŧĢYxvúÎ}^?ˇŨĒÄͤ\*€1ŪŦøWš„ô*ĪYXîŠO/[š>ĩ‘ađģYŌüKq¯ZøŠ?ļ\˙Ž/oÃtô>Õéņ+Ŧ(ŽÛœ( ŪϤŽ/ĮŪ Ŋņ­”zzę‹ieŌ'•š˜öæĒ˙Âޝ†F„ž FÃ+ ŗÅZđ7Ĩđ~™6›6ŖöÛGûą˛co¯ÖŠGāí{Ãíyoá‹ûhl.¤2ysFI„žģ}ĢgÁž ŗđ”Н.ˏ¸aˡøTž/đœ>,ĩ˛†YD_fšY÷mŨ;Qâ¯Ųx§O´´š;E´É"‘íÚēãXĸXÔaT`SëÅ ęŲ˙ŸY:ũ+Éž éÚßü"Ou¤^ĀždβÅp„…>ĸŊÃ~´Đėĩ–O>ëPf{‰ļã%Ŋ+Høe¨hbâĶO×Ū:âBīLˇĐ7j¯Ŗü)šŅĩųĨƒV˙‰Tŗ-Ã[ėų‹¯@OĨ]Ķŧ ŽčsŪ_izŧisu3HđĘģŖÁ?ĄĢ?đ‚ŪŪézĮöŽ ŠjqyO2'ʋčE„ßîæŽxŗá}÷Šo`ķuą ąŪ‹îb­ë^ÖuĪŽuâ<ÂFũœeŊ;և„|?‡ü=.‰¨_­ũ–6Dž^ŨĢÜĘąđŗá駋ÃÚÚÛiķ9oŗÉī/?ŨŽŖCđÔZ5•ÂũĄî/nrgē|Îßā=+™đįÃ[¯ ß\ÜØkŽ>Ķ#I"´@Œš¯kđŋP´ņ,Ū ÄũĄ7Ęīå ôĮáUüIđŗX×õˆuWņ.mŽmķ ^‰ĸÚ^Yi6ö÷÷_jēEēcŌ´*žŠd5-.ęČšAÍ2…`-šüķXūø_ĢøN6‡Iņ<‰ ¸fF‹­køëĀsx­4ˋ{áūžr’2ä7Žj˙…|'.‹sq¨ę7Ļ÷R¸P¯.6…QŅ@ôŽĒšø&/iQĀg0\Báâ~ĀûÕ jPÛK=ÖļeÔÚ/&)Ä,Kė*¯…ū_xV{ŠlĩōÍtÅåßņsČæ›Ã}Z7ˆĮˆw\>Į“Œ¯q[ž'đ=žģ¨[ęļ×RXę–˙ęįŒuö>ÕTx&˙Sŧ†Oj˙nˇ…ƒ­ē&Ô,:gÖģUPŠFŒMžî!xePҏÃ)ī^wÃMCFÔngđŪ¸l ¸;špÚˇ4Ī}ŠÆđM¨Ī.ĨxģdŊū!ūčíYZgÂË]'W“T´Ö¯Öę_õĖØ>gÖĄēøQÎŊļÚũûj–Ba}8Ņø“ÁÖ^&Ķmíî¤užÛ ÂũåaŪšũSá]žšĻ}SUēž|ŒN@ʨė+{Â^o ڛeÔînâ nˆ=ĢĻĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĻHģâuYH¯o‡>4Ņ|iw¤…–+˛GÚ˘ōԞxī^×áŊhZ,EĖ’(ĖŽNK7z×ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠãü{¨ęqiréēnq%äždlĮۜ×-đ¤kžĩ§áû¨wĖ_Ī\ú×ŦŅEQEQEQEQEQYÚõœú†gm&Éæ’6Î0Äq^;á/øÆßLŸÃ×ļīogqpâåäĪČ;(÷¯mĩˇŽŌÖ+x†ØâPĒ=Ēj(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽâWŒ.<-Ĩ[­†Ķ}w(Š ÜõŽߪ)đ÷lôģģĢ‹čŽLĄŖĀRyãÚŊŌ<ØRLcr†ĮĨcøĻĶUģŅŨ4{˙ąÜŽwíÎEy—Â_x‹Tņ~¯cŦęp–šA‘Á`q^Ķ^SņOQņ­žĢ§§†–clÃ÷žZnŗßŌŊB’ú]"ÔSmÁQžzņZtQ\Ÿˆôßߤú6ž–6ęŖ07>į5æZ‹üqĢ|BŸÃj§Ų•åXēíë]ˇŠ.ŧ_á=6MZ øĩ;XFéĸ– ŒĢ܂=+{Á^.´ņ–…ŖlĨîēÍŪēZ(¨æš8!ye`ą Ë1ė*Ŗ]›ũK&Xåy#&9Ú[~æ ņŋŠõˆˇ~ÖŌÜ}š2Íå/¸īô5ëÔQEQEQ\˙‰-üI9ļūĀš´A>wž¤“éŒW˜^|@ņ収`đŖ 0Ī+YŒMŒc9ë]ÆŖ?Ž4:KÃ.Ÿyå!wc(H…^đG,ŧg¤}Ē܄ž3ļhģŖWSEQEQEQEQEQEQEQEäš÷Ž|_áīiú]åŊ‘ŗŧ›j:Œš˙ëŠõē(ĸ°ŧUsŽYé qĄEm$ņ‚Î'Î6Úą~ø§Sņf‡syĒ$+,sųcĘ+ˇĸŠ+ˆøŸ¯ëžđÚ]hV­5ÃKĩČ]Ûé[>Ôu WÂļ7š¤&+É2!\s[ÔQEQEZūY`Ķî%7ʑ–EĮS^}đĮÅ~&ņ æĨģdbŠûˇ)ˇŋOzíīõÛ 7Pŗąš›mÅŲ"%9­`ŠYŽ&Ģéú…ŽŠhˇVr‰ab@qę ZĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĻI"EI#E$ö¯>ƒâ.Ŗ­jwūĐ˙´--ä1ŊĶMąI—ÖļtÛk2ŨYŧmŠZƒæZŋ\Úŧkâ>ŋ}ĒxˇFžëHēĩû4 Į ¸ũëü5ė~Õ?á&‰Žo|?-„áSí(7ëj9x…ū]øSōŽūÕā^ԛHøâ9â„Íss3-Ŋ¸ãwĖĀץiß•üJ睧=ëŒÆ3¸?Ō™ã/ˆˇžŧ'ҚKid ÛņŸÂˇ5ähš‹Ûŧ’ŨāC ]jČ˙…m.mmuMæÖâęUŽ H+ΏÍw´Q_>ø|Ļ›ņûW¸ē‘`ˆ–ųœāíŽûĮž:Ō#đŊõžŸ:_^ŨDĐĮrK vĒŋ <7qāßÍṵˇyØĖčįXíŸĀVË|B…ákËm.ō}9IŨr m>ãÔWCŋ§Īĸ6­ęÖĢ˜Xjåbøh°5íæ›ym§‘˜įdČN”ßxĖiŪ7–ÖrËöØpŸ/vôĒ˙ v9éŠĶĶ~'iw2ŪÛŪÛÜXŨYŽé!™~lT–Ÿ´éĩ˜4ģģÛ Ž`7(“Ōļ|Gâ[[ÂĪˇļØ ˆe¤jÆĶž$X\ęvēeíŨũ˔HfNr+ļĸ°ŧKâ‹/ ÛC%Đy$ü¸ĸOŧí\íŋÄČâÕíŦu"įLGl2ĖAV?…nx¯Åiám8_6ŸuyŌĖđBS“\üô‰´ՅĨËÅŌ…ō†p7ÛŧņΓiĄŲęAšS{mnƒ2JĮ ĒÚxö$Õ!Ķõ­>}*kø÷ķČ"OÄdWb##‘KXZ÷Š-4‚"žæę|ųVđ.įlu5OOņ֟ĒÛéfŪæŪúlūæTÁP;šwˆ|ke ŪG§ĨĩÅöŖ ܖļËšąę}.‡ã+=^ęK)mį˛Ô#]Íkp0øõĩĪęô;YUƝ~ˇ,ûv}īqëWuO‰Ún“¨Acq§j&yņåĒÝ˙JŨÖ|QaĄØÛĪuŋ͸Ú"ˇQ—f#Ļ+6ËĮ0ļ§ †§aqĻĪqūŖÎ?ãëTŧMņ:ĮÂÚĸYŪ闆7p‰pōÛčjaņ3DūÖ´°1܁vÛ!œ§îŲģŒū4ũKâĩž¯>—§XÜj7P Ę!ÆÚ¯øcÆ:wŠ<øí„Ũ[ŗ[Ę0ČkĪū+Æá`xAƒđe?/ü kØčĒ÷ˇļúu”ˇwRˆā‰K;¸ûˆđ]D÷ĐéĪĨ.OÛvü¤øëŠßŧÔmīü+u{i"É –ĖĘçŨŽ ā:…đņÜ7lzûWSwã@úÄÚV`úÅ¸Ėå*GėO¯ĩ^đīŠŦõ÷¸ˇUh/m›lĐ?U4ŨsÅļZ-Ü6"9nīæû–Đ ˇÔú ¤|ĻĮo9¸†xnâŲ°ũã}zÍŧø§ĨGáØõ´ĶîŽl™Šŗ(ģ`q†ŽŖF×í5oÅŦĸ˜-]<Ė?đŠæ“â Æĸ..4]kŨ>C\î vƒÖˇô˙éˇŪ:ؓmē)2gĒ‘ÔV ŸūÉf÷×Ú%åĩ‰RĐÎø!ũ3Ž™ŽÃKžž•k| ž1 SÛ5<îb‚I ˛Š`ŖĢqŌŧĪū—¯ĮŖ\ø~öÉF īÍ\“âŊŧ~ D“EŊŽõۏZšÄAsâ!ĸĮĄß}¤|͑Ā_īfŗŽž,Á§x hē–™=ģ1;$=õŖiņ*ÎīRŸN]6í.âÍXŸ‘}EOáOiŪ(—RŠÎÆx$ą\ʎIįŽ;ךëž4Ôoū'éRIĄŨyvhí°\Čųū/§ŲøĢĮˇö~kôŅ.⸝2:˙Ší–¨žx‚Yü9§éĮJŧHöûK.œķ^k{WņĖvÚŅŅt›&Ôu ģĀXū§Ö§đ÷ŒĄÖogĶnmšĪS€eíŨŗųånū/ļ—â”ŅĩMížÕ•›ĒöaëZ7?ĶLÔí­õmęĘÚíļÁ<„|ßQÚģøäYcYåXd}qZ˙Ždĩ××Ãú%Ô5B›ŨwíXĮš§čž3žmi4=rÄXjn›ãPû•Į|ÂņWÅkŋ ëąi×: ˛Ėûb—ßäOÕ~)ŨhmkqŠč2Ûé×-ĩ'gä}Ez%•Ü7öPŨĀÛĸ™Ąö5bŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠā~0j€.Íš`dų¯P+/āB¨đ >XV2ˇ=Ī&¸čMՏĮ÷KYZEwÃˇ¯Ŗņ}Ęü@đÁ8nįņíļÄXHéą•KEx'Ã!?ÅĪĪ0æ)_`ôųOƝøåJ|lНphĮ8æ´~:ŦØēc`>Ö éšĩãm>MOÁú%Ĩ…Ō[ę D–Äž ßθ}KÄŪ*Ōn,"ņž“æZÃ*qđ˛ž+č+•ŧ˛†åFŠ ąE|õ Ė—õ[ŎHZV yâŊŪMļpđØÛŖŒfŧûãũ퇁‚Ú"žQÅN0ĩŅørÚ?øVVQĒá[O }ūZōo†RɨøÄÚUÍãÅgŽ_BjŧúŸ4-#ėž‘ũĨ¤íŲæDģ°Ŋ…u^3ÕĄŋø) Ũ˜d‡jĻĶÔtâģ _Û[xSC'—-Ėk| ąÅyŋ†Ô_|vÕŖž0â%ÜŖĶ Í[ø#[ücđĖ‘.ūF#‚Tãô­/˙„>Øk•ÉĮjŅņcGÁ‰”ö1úՏ†Î$øSfÛAÎßJå>Ú[É6ˇrĐŽ˙´°Žƒ5—ā 8.>8k،…ŒÉ*¨éÃÖ­øÎā[üuҌ ārI¨ž"^ŨÜ|fĐ-xáÃÅí쟟›ô­/ˆúO‹<]ĨZ¤:4vok “Ėi€é^›á“t|5`o@" $ÁČŨZôWÎŪ8Ž+Īē|Æ$ˆ”VCČ={WˇCáĀáãŌ-Į,VÅ[ۍ+áŪĄ%‚”‘” )ÆĐx?ĨVøO ˇÂÛ<Æ:>îų<טxSÕtë_ZÚdŦ!Ũp:9'ü+¨ø3&š„ä–ŌÆ „˛ŗ%›i'?JŲđ7…5ŨƚÅö¤mRÚũšA K¸ÃÎ|2ĶâŸâĮŠ.^5+Ŧ‘įļX˙…֔.h+"ČL2/́ÆBœVŸÆxZ‡†ŽaÚ˛-Ú¨#¯ZÚø…¤ęZ„:%ƍr‘jļŲ’(]ąæ ŧ×Ū*Ö-|MĨÉãHZ˙u{cãŸQ_AFë,i"ũ֏Ĩ>ŧ¯ãŽvēLw÷W1^y߸Žßī?ø}kâtˇM§øi.m ~ԞJ—ËmÍzWˆe´ŋđ.§‘\EhD€uVÛ\OŸ éēĪà lîãy-îä`ų88 ˙ÖŽRĨ|bŌô›+$ž6[C#íQĮ\×Mņ#Ã~)ņe‹Įiik-œžj¸¸ÎAŠôŊ L4{ArÁĻō—yVÜ3ZŊ^_ņ×W_é:Ÿ‡ž95TmÖĖ~fCÜW=ĨxÖ{˙éƒÄz#iڄ{ŖŠUY3Û&ĄđĻĄŠŨüY×u$ĶÚōeVĮ}Ļ0ĪŌļĩ­+Å7ŸtŸE§Åg +åL Āī\ķIņģFX­tīÛŽÛ‹ ”;ÎŌÆļ<)pž0ņ$ZéŊĨ…ĒÃōŅ€, Įį\oˆ/õ¯–ļ˙gûBڌÁ ļųsščŧ{ ø§ÅÉĨŊļŸŦ–“ųģŧŪjÆho xzÚíŌ;‡ēDyEā×jžŌ/E쏋÷ēt`Űá}kƒĐâŗŗøĄĒ\č†įRšcûđNØŖ$÷=鞸Xž0øžęáŌÕp˙7“V~'H“üIđzČ.HĮĄ#šöJ+Ëū9j2Úx6+eVŨNŠ+ƒŒ/ZĩŖĻļūļĶ-4{qm%ĻēĪę õÆ*? čÚ§‡>ęÚvĢ$M$+!cîÚ¤gą>O, õ‰-‰’YY=Î;Uƒrj‹ŖßÜXÃÍĖ×,n ąN/zčt/ kļnõÛŲ,á†ø|ĐĮ/Ėq€8ü+:ž×ãÕˎŽDs[˙Ŗ–.´Ÿ,"ąŗ´hž/žō`œõĒ'ƒoto x—NÕĩHÖņ‹ĮåɑīQÚš{ũWĮ:>Œú^š¤ĻŖ¤ų{ą.H^Į5ėÕ­uŸØ\ZdF‰åáēŧWK^)ņŗOūËÔtŸ[Ąßo2Ŧ¤wŦÜy‡Jņí˜o%nU>Ē?ɯUđ-Ü:ô×Ū!L‘9FÄuU˙ë×ņ Ę+ī~ļe]ŦĄ˜zã&ŊU|-ŖÃŽÉŽ l^´{L˙ yßÂ2§Æž2* Āūf‘Z9h§Ë%§Søt?ĩTžø¯,JQ­Ī”ÛûÕīĘ–ß ôĻ#-l ŨN+Ė>MŦÜxŋÄwvđÁ-ᙷųī´˜đ+­ƒÂšäėüK¨ÜŲ@ûŖnr˙ãY­íŽ~2øf#šRsĐã&Ž|u‡ū%š!]ĒņFOĻ zž–iVĸ3•ō—§Ō­œ…8ë^đĘyn~.øŽų¸BãŸMÜSž*Ī-ŋÅ? =ą"}Ę^¤nŖņRÔOãO—~u=ÎáSü{؁í ŨĒaƒ]ׂ‘cđ^ĒŲqšŪĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¨júEގ§Kcyx¤ פxkÄū‚{M;kû)˛#žÆB Ņđ§‚.4íZīÄŦ‘ËĢ]düŖåØW7â·ž.ņ?ˆm5Gģ°ėrn…=ŽyüĢŌ<<šĖZhMm k•ā~î+bŗu¸õ)´ĮJ’(Qzķ|9ņG‡¸›áŖxz9QŽFé28RįŸË5‡,|\ ąKũ.8WK‹l(e˙ZÃĄŦũÂŪ.Ķ|{wâg°ŗÅĐ˜„¤í_^•Šŧ-ãoƚ~Ŋ ˛Įdãl^v ¨?Jë|{á‹Īx'ė@,wāŦŠ3ĀoJåī|7ãmsÁoĸß[Û@‘BQ%ɔŽ™­Oéž+Ņ< .‘san—‚°eōĨāo xÃÂFđĩϟ*\ŗHH”‚ĶĒžđŸ‹ô?^øė,™oŽŲQ&?"îĪ7Š|!â]Câ]§ˆŦŦíäļŗųQ^MĨëWĮ^ ŋÖ¯t¯銉ŦYÆ2ß+ëŸÎ ŋŧņŋŠ,GūÂūÍY>Iîä˜/}ŖŽkĐt›Ōô›[%–Õ<“ŠģX#ŧņ§Ų˙°ôčo7gĖķ$ŲˇŌŧ“TđWu?ÃâilėÖx˜2¯éÛ5ęžŋņ=ÕãώĨCi Æ ˛JsVžŗĨíh×zmĀ+˜ĖlŊyžoâīé/á­3F7č ō.üĐiõô5ĐxĀŖBđåíĩų^j Īs îOo Ŧ #AņwÃû‹‹=Á5]2i  2„hÉúöŽĮAĶõļē¸Õu“ģ‘6CM•ˆzgš÷Ž3ÂŪ ņw‡ŧaŠë8ąhõ :yŸpž(›Áū8“ĮéâptÜF6ŦiéĶĶ­7ƞņŠõ:ãÉŗŠ;‰ûĶķ5ŅxÃū!ÕŽ|?=ŦŅ[ÍcēI\|Ãv0čzfĒëē‰ŧ[ž›¨Ekkf$WšNįm§8đ¯B†1 1Ä:"……I^mņĀ:ˆõ7ZŌįíV8OĘyÍeøˇĀž*ņE…ĨõŅĩœŠĐÛÆß&Ūų?•jI x¨x:úÉmí[Pԋ†2áS#})ß ´_x^Ō Pĩˇ6Hšt~sۊąãŨęzĨ—ˆtF‰5k•Wád† ž?øĻŪ-6˙NLŗvæ_7s2÷Ú1ŪŊŪĩļŽūäj}*ZķŸč~"ŧņõž­¤v–ÛK7II?v¤ŊŌõŸęZjjBXEc8į.ČGeĮŠĒ:į†õīøŌ_øvŨná¸@ˇģļ’}Ei[¯‰<Đl!Ņ“ÄvāGŲ”mÛØ‘[ áũZÛšœ1Ž5M@ŗKšļ $caÅg|1đžšá-.ãJÕŨíĨfŌ8ū!ę+ĸđW†Į…|7œŌo—,ō0ā''Ü×G\ߎ|:ū)đĨŪ—Á4€Ëôŗ/üīèŧ1šŌ%Q!ä~UŅxG‹AĐmtč@‚0ŧw"ŧˇ_đwõOÚø–;{mlQų§,žüW¨ŨžŽū-m Úlƒ÷nß&{ķ^{ā?øŗÂū Ô/nÉâÔ$0W?/=ŋ:›Äž ×âņōx§Ã­nķȆ9v /ŋŦ| uuā]CHŧē}|Í,˛ƒÆķéíUŧáßŲ[éēfŦ°%Žœ>FC“1ž•WPđfģá˙O¯xSČtēé˛|š> Öæ“ĨxƒRÕbÕ9×õŨÉ&ŅtĄ{Á.Äā-b|2ø{ãiī`Ŋ˛ŽŨíņƒāפ×ņ/Įwž ĩ˛’ĘÄ]<îCg8Q]W‡ĩGÖ´MBHL/kyb¸¸•ĻgeˇŒžÅÉåąŌŊrËÄē~ĄĸÉĒÚģKo’ÁOąX?ŧ1x,âšā]“$ĀÛŠo~*øbÂûėS\LŗîÛ´Âßá]ĩÄwvŅĪ&9r’1ÅMXš÷‹4FŖvŠ#}ؔnvúMĐ|]¤x‰Øn?x:Å ÚÃđ5Bīâ?†,ĩ!§Üj]Ë?–Ą5Z—ÆūƒTN’ũVy1ŗ#åoĄ¨¯<áģņgq¨*IœĮČŋSZš†¯§Zčīq {"ŧē ŠÃđŽĩá æŊ>XTÆ7ÜŖÛųÔđ|AđÕÍÛZÅŠ!s”<ŠžÃÆē§Š˙gZę×]Ŗ#jØžŋĩĶmęōd†gs€+˜ĩø‘ ]Ũ¤1É0ŽFړŧL¨Į؈Ålk(Ņôá}Jö8a˜ËĒrxīÃQZCtúŦ)ŗ°îëZ°ęöé‡RŽåŅPš€+ÆĩŋˆzĨņKJ˜]ėëbĶr>cč+Ø´]rÃÄ {§MæĀĮąŠŌŦx›KđŊŦw:Ŧæd}ŠÁsÍc§Äß ÉbnãÔÕâ ´…lũ+H×4ívĶí:uĘÍ|uQU5¯čú$w÷X™ūäQŠwoRsV4M×#f°šm8e<2ŸqLÖŧK¤ø}c:ÚÄŌą å˜û ‹Fņn¯ĖđØ]n™9hŨv°ü y¯Ä˙i7:Ɠ¤Ep\Av˛\ē#Py¯N°ņ“wĸF ØÍ’ Ļbpŧ{Öz|BđËĮ4‹¨¨Xžöå+ŸĻz×KŦąŦ‹Ę°Sę̍l­¤š¸G csģtšÛ/ˆŋēC}Ôádd"6ú7J“Æ$ąĐ´)ÚkØāžh›ėåŋ‰ą^[đŪ_ęž}^šFžöņØCœ1Éā×´i:Už‰ĻçØÄ"ˇ„aTUęá~#øãJđ΁{k-ā”Đ2à žHāãĶŪŦ|8×,ĩ iöÉ~ˇ7‘[¯œģ˛ĘqŪ¸Ë6´˛ø÷ĒÍ;¤Aa Xœ@¯LĶüUĸjwĪgg¨C%ĘõŒ75wQÕ,´›o´^Ü$1ôËύéž*ŅukĻļŗžį>Yų[ō5“ņÅē†ü=t'EÔąŠ ~cž3T~ø‹LŸÃšn”—ë5đ‡s&ėˇžkžĻI"EHėdąčx˙ŠđĪ5îÔVŒÜ'ƒubN?Ҝ~•Āü °†?ÜÜÔŧ˛?>ÜÖo ų“Æ~!Ō”˙ĄŦŦʝÍSņí™đ‡Å=/_ˇ„-ĩÛė›jņ]–…ieâŸ^ęōZDđZ Š#9=N?1^ŒĒ¨ĄTaI+ųq;˙uI¯œ´6ĨņgRÔīėgžHĸ7lÃcđއW—Vģø“¤k:6{mDw;âÚ÷ĨøÕ§[ĪâO ƈąŧōėwQƒŒŠˇņ‡L˛ĶübđFąËŽÉ;ä9ĢÚŽ‹kÁ;†dß+ÚyĪ#ŒąmšÎ ÔøS1Ô>Y5Î$ųd_›ž ~•É|cņ§‰â ‹–@ĀĮÍÚĸÔ4k9~>Áo ‰ĸĖąŽüzUΊöņéž5đmå˜Xf{Ÿ(”ĘåF>œÔõK­ē’ 1\¸y‚ŸŋŒqúÕŋOsĒøûMđΠ—(ˆa(RčE^ÖídÔū Ī.ˇbcÔ ŗmŪ`ų‘€ëT~ø[N—á‘ŧŧ…n%¸ŽOšAģjŒüŖÚ›đ6wšŅõ:oŪÚEtʈü€ŧqôŦĻÚÚ[i ĩ0äėqJ÷;]>¤ Cĸ ĀĢ—ŽéÖzŽ•:^Ā’ĸFĖ7Œíâŧ_ā6msqĒŨˊūLÅP2đ*õ†¯6‡ņĪVĶ-›ũé7ų(>U`ŊqųŅđÂčø‹â/ˆ5;ōf–'ōáŅŌ›âZOüs´Ŗ;¸•eEN féZôÚŋƝFōúÚk¨lG (ģļsןįZēÕÆĨ/Å +WŌtKč­xŠáš€įšúQņOŗü1mŧh˛1iW‡é×ÖģOˆÚ\‰āYāŌ!$I(1ŋk´W–jž3Ķu2=3^ŅfĶ.CŠIöđ#¯ĩ}ĻÍú]Ŧ°8xš%*øÅ[¯øīŦŨCmĻhļōŧpŪIûünÖxËHĩ_…÷0„Tû=¨t `ä Ö/ƒnâņ_ÂcuŠĮ÷ŅI˜ã8ÛĐũqüéŸ4Ë ¯ũĸ{XfšŠ9]Aeį<õz+Éū9ÛXÛøD^}’3y$čžpA¸¯p[Ōē˙[éw‡ôĻ‚-暁qĩ@g8¯:ˇļūĐũ 5;i9Bģ\(ĀũjÅ›ņkÂķZn͞l ˙Žļū&[˛kĸē”0Ĩŧŋ4œīė¯s\§Œ/‡ü,Ÿ _YÁ-ĄėveÛŧe{~5×|h‚Ō?]Ū›xÍØhÕ%+–7Lū5ĩđ˙Dąŗđž™v–%ԖęZUL7"ēúŽX’xž)T4ne=¯ģĐtĩũ -4äĶ텟“–‡`ÛĐö¯Jņ…––žÖŦí ˇU´ˇvF€ÛéØÕ….ūŲ­ÆŲƒ 7‚3žkŒø=ŖÛMâ˙JҤąCpD`ģķ”ëM:ø÷yh§ũ+Ãü%†0HĢ?ã];â…ĨŗAŧX§ŽyŖâÖŖqqãŸ莒IdeYž4˙–œôĮzŋņ6ĮQņ…áĩĶ4 ´¸ŠUxä€1Ūģŋļ ŪĶ˙ĩ#xī0˛+õČ­ú+Ī~/øj=oÁsÅ›ĢQį#Î_ŌŧŪëR|(´Ķ­"Sye M+åBqú×AāûÛOč~ŌæŽ9ŪC%Á+’c ?3[˙ˇøzË A4`.8ę*õ„1|"e‘D†Kî[Š%k•đ&¯sŖüŧŊRåā2y\ũŪj_†ĶÛø/tZ=åÜ÷ōM8īrNzõ̟ ,|Aa­kvڞ›,mÔ­4;ņ…Ījį>i_üXņ2y@ZÁ3áãvãÍ4ķāei÷R¸ÔîËČXüÄĸēmFioū6iáÛĨ’KA` ÚogÃvēŸü*[ĢMzÕŌæ$R$äāđǟâWđŅŧ`Ä× ÁīXŸ´‹[Š^"”ÂĻ;IUĮ˒O?į֖ížÅûFYÅl<´š0$€x?á^ßEPÖ4Øum*æÎd ˛ÆS‘žĩá_ 5$đžĩâO_Ä Žé?;ąÛōÅz,vøSá­ŨũĩŦQŪ5ŗĖĖŠ‚Y†kā4Bo^]Ė7Í=ÛvŸ­fx'Q’ĮãVŋ¤Eƒi34;Į?­MákdĩÖPĨV1îSņ´KņķÃūZÜļŅŽy¯rĸ¸o‹6p\ü=ÔŪHĐē&Uˆæšŋ…žŗ? Ūi-ҤšŽBŇ8ŦŸ€vķÃĒÜĘLŒ’Ŗ xUöĢžO˛|dņ5˛ŽŽđ ü)ímkŖ|_šöQŽĨ ’Æ$,ÍĮsĐ ĪđüĸßãÖ J›uko2XúmõĪjôoˆ:$>%đMė(ĸW"+ÎOĩxĮ†üiyađō} 25eœZÛŠ:ƒĮîžđ嗇4[kkkxŌo,y˛*āģw'ņ­ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+šņļĄ¨Øh2 7J—P’Pc)å}ëĘžYx›Âú…ûŨøvč­ãį9ņĢ>(Ō<_ŦøūÃÄūa´ÛûļuËbļū"ÚxĢÅ:Ōí4';ļģKŊTé‚kNŅŧEiđę 1ô$Ŋ}ĸWÎkáŊŠ|!cskwáÉÜČėęË"ãéÖĒxkCņ^…ãíO]Ë$ŽH ë 5KÅÚOŠu_ˆV ‹Ã÷~E¨æ6eÉÁ>˙JöÍ&ę{Ũ6î­ÚŪf\´mÔUęæüymuyāÍF 8šYäjĸõ9¯;đ›kūđãéEÕËLģĸ’ =›Ķ­t_ <qáøîõM@búųˌŋÜĩ?ãŠēˇį”ŪÛ1kOáĻũāĢ(Ûq–T;¤šė)ŦĄ”Ģ ‚0kÄnô=Gá×Ä)õÛM2ãPĶog[dÜČsž•Øi>5Ö^Īšģ~u…đöß_Đ|cĢ]ŪhiŖ1‘”džy÷§´~ ‹Iâ1áëÃhĘáFOŋŌ™ņ*-kÄ>&ŅŽí<;|`ĶåJøå°Āā~UŌxãÃ7>7𖟨[[IoŠY°’eāņÔ5%§õĻĶĶLÃZöǝ–YĶl`úîôŠ0úÖ.…&Ž>+j"¸ĐuąÜ€ˆD'<`dútŖĮSęZˇtmR×CÔZ×OlLL'ž{Tž7ŗÕŽô_I§ŨŪéb0L(…ŒMĪŖãÅņŖâmÄŠŖÜ­…ģ¨X‚|üw+Øé•7„5ícWmJŗˇš´ļŗˆ é%ˆ¨8*įŪŊRŠņ ŧ3ņŽÛÄwv“Í`Ņ`Áâ/ jú´×ēŪÛéLŠŪIÁÅE§'ˆmž*]xĄü7|ļˇ+ŗfáĶ“Í;ĮQkúŋtNÛBŊ6ļŽ[hËsÎ9ôŽŖâO…u]´­JˆĩũƒŦ†ya×8ņ–ŋĢĀēu‡‡/­īv<×)˛8ũ[wĨ?ĮV~%ąø} žƒ,ŗ_ÆTK*Ÿ˜Ž¤Ķ~ęúŽ­áYĩŨ¤š ĖAÛĢc­zAwn—vs[¸ĘJŒŒ=ˆÅyÂĪ"wípæÎņ qŒ§jŗđĢÂĪĄ]k˛MB×L‘\|žÕśOxƒJ:6•ĸM<{ÕÍÆāŽÔŠyâ{6–|9:\yfÆåãåûŨjˇÃũUÂWŪÖ4š`‰ÕĘÉ# ŨŋZ¯á{ũkáŤÚ%ū…yyl’m5ĸoÜ 'Ōē{-K^ō¯ŧC}ĨÜå…ļĶã9|zŸđ¯>đ\Ū"đ÷Œ5MRķÃ7ĸ-Rã<õ`ąëų×Ŗ|Gđ‹xÃÃB+pĢ{ Ā[×ŌšË/ˆZͅ„z=Ά/¤Õ#ATŒėcŽģŊ+bFÖ´ŋŊĨͅŨūĨyŦÂ?›Ë,˓éŌ°>?ˆ<3ášôËßŨ c-2Ņ˙ŲõWĀqøƒFņ^ŗĒ^čQÊH íäõüë;W:øø§oâßøGo”(rÄã?÷+†ē˛†v‰â2 bŽ0W=XĸŧWĮ3ü]Ņ.­ˆUŊ9TõŲÉ&Ŋ~îÂÍ:KP4OĖíŠō-įUøW-ö“6“wkq1–ÚKdÜ9íŠØøkámB=oTņ^ĩlmîīܘĸn¨žõCQĐu˙ üN¸ņ&—§>Ŗgz›eT8e5â;Æ1üBĶŧS.‘-ĘD7ũž#Ÿ-Ođįך÷=6ęKŨ: ™mŪŪIsDũSØÕēķ˙ŠWWķč3č–EÕ䗱æÆšTú×9āíCÄ:€†?‡/xUc6ėôǟ `ņ„ ŋĩŧđũà œĘŦ¸üēĶŧ)câk‰—ÚÕ΃s­ų e%Ѝ봝xCâ^§Ē}FŪôÂN{ôĒ—šŠ-ŧsw¨6•$íŠZ´Jčp#Ũũãí^ÛĨÚ]ÖŌNŠ Ŗ~Uâz?‚ā˙…įqķųņ[ĩ7Ÿē+Ū¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¸ī‰zÖĢ ø:âķG\Ũ ghîkĪ4?ęŪ;Ķ´ÍŸ:âGķ/Ĩ*v¤`ũĶęM{}ŧ)oBŠP`RŅHFG<ŠEEA…PŖØS¨ĸŠ(ĸŠ(ĸŠ(ĸ˛‚ŊÔĀĻŧi Ņ[ŪĨTTU{ RëHĒĢ÷T §QEQLĸœĒ(> SčĸŠB<ŠEE_ē }:ŠBŒĐ@a‚úҁŒv¤TUûĒĐS¨Ļ2+ãr†ĮLŠwJZ(ĸŠ+ņˇˆõVƒHŅ‚ÛÚÜôĢÂyEūęZÜĐ4;_hđiļkˆâžė{“Z”QEQEQMÚģˇmõÅ:Š(ĸŠņ‰>=×ü9ãģKi 026ŪÉü+kÂ3xÃĮWž$ōämŦB Büoâa^H@=F~´´QEQEQ_>jŧEĄ|Fģ]CÍūĪ…Š­°_áūø×qđĢNŋõojpy3ę“oŽ6(ƒ ¯KĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŽhc¸‰ĸ•ÆÃOCUŦt?L,lŦáƒw_-qšģEQEQEQEQEVnŠ éz،jv0ŨÎPJš TmüáģKÔŧļŌ-Ąž3•dLbē (ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*ŽĄŖéÚ¨Qe Ā^žbgbÚÖ 8 hR(—îĸ SQEQEQEU ­Lž¸YîŦ-æ™z;Æ uUQB¨ÂŽę(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽkŞ1ļđ´sÜŲŨ\#dą3´zšÁž9Ķümi5̈́3Ƒ6ĶæŽõÔ×Å ãÅĮÃqųŋkcŪF°í]ÅU=KPˇŌtë‹ûˇŲdsė+Â9Ņüi īĨŧ› 8‘$\2×MEQESY‚#1čŖ5Á]|ađļ ļ?hžIÚA#ŲĮZīQƒĸ¸čÃ"EQEQEQEĮj?ü7Ĩø•4›˛/Â/ʤúšĶņ?‹tŋ éđŪęR0†ihPg'­jiڅļŠa í¤‚He]Ę­QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖ`ĒYŽęj•žŗĻŨÎĐÛß[Ë*õE*âH’.čŨ]}TäV}߈t{|ĢJÚ)?¸Ō ūUvŪæ¸DÖōŦ‘ˇFSk7WņFĄ2ŽŖ Ũ›šˇĻęļ:ĩ°¸ąšŽxņ!Í]Ŧŋ"?‡uÁãŨų#§åŋî`Ķô@ÜĖ‘§ÚÜĮŊzŪöÚî4Į$Cęr+’ˇđ˙‚dņXÕ`û3j˛1Æ$ęßîú×QyĢXiÅEåÜPčąšž+˜'â)‘Î3…`HŠĢ7[OēŌį˛Ôe ¸ColdÁđ/ƒŧ?á[{ŸėI|ã36BûĢĄ‹ZĶ'ēû,Wđ<ųĮ–Ž ô¤moKYü–ŋˇįnÍã9Š/õ;-.ØÜ_\Į_Ūv,üC¤ę­ô2™)ë^}ņ+Æļö÷úN‘a|Ģs%Ō™Yî¯|×Ŗi—öš…š=ĨĖSǍVhÛp¯TrÍ™%‘QVcTėĩ­3RfK;č'eęķ^/ņƒFąĩņŋ…eˇļHŪâéwė\nųÖŊēĢ`‘Įöˆˇínņœũ*Ë0U,Įw5™˙ æˆŋ´í|Âv…ķFsZOIžIQ՛ĄR˛™Ŗģ…•>ņ0*a.húEūn—˛Î÷ļ–đˇ.įÚē¯éSčŪ ĶlŽA$ye=‰í]-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\oÄ˙ļß=Œ’,‹´°;™sČåz~ŠāW@{8":f­ŗišLŠcß5ØŨëw~øCįĨĖSŨ`¤s!Ü9čk#Ā_đ‹Íá /5b“ęwģšy%MĮwoéGÃ?Üéöž!˛•&6Ö[倸?w'§ųīYŸuŨ?VÕum_ÄJnY Ư"z ŗámn]?âÍĖ|đôXЍ`ŊqųūuîՏâĸ…5Lôû3˙*ņĪ‚ž‡ZĶnæÔG›o­åÂO˞äŠÔøo$ļ|Iáõw6Ėë č™ëJĢ•iĻ~ĐöÖöąˆĄ6ūhU&°’âÂKdû4ģw,dgpkü4D›_Ôĩ 'X7PÎ˂CķE׎~ĩęÕâ¯ éž Ō䍲Ęaš2IN?úÕįÃ˙eëŨÛEæĪ ɋJļ°ũ¤!ŠÕ<¨™ ĖĢĐļŪ3ÍOņGCąĶV7ū•ã? ˙dü[Ō­4I%ƒíQyûĪēKqšėü?āgHø˜ú”lWHmmŌdĮߚõ*ĘĶ´ ;LŊģŧļˇÛqtû呎I?áíL—ÃzmÆžēÔđ™nŅ6!s•Qė+_Ĩ-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\oÄëÛ­?Á“ÜÚgÍYSîžO=+‘I| ŠhK.ˇaoa¨˜˛ÁãÚėqÕOzƒOđ\ÚĪÂëû(üÁ“<ļĄú•íSøÆē&‹ EŖkŅ%•íĻc)$_{ķ]Ž“|Յ´ÃLÃŖ” ˇĖ 5Ųx‹_Ŋ>,ҝ4ûŽlĻŗi'ųNœs^+W´đ˙ˆŧSĻ6ĨÉĸ&Ye•")´Îî(ø“+éü;¨]FEŒĖ§Øøíĩŋë:äQȖ—R"Ę@lujīĢÃŧĻMáŋŠēo‹ XLU&p>áĘē­_Įk/gaái„÷ōČĨäEÜąGß&ŧ˙âvŊ§ßøû@ōŽ<ß°Jĸé€˙VŒÖįÆéz‡€â˛ŗģ\K$d @īúSÖcūîzåž$_éW~˛´Đ-Áļļ–9'’4;GĢ}MtšüøûáŒöúTO)ąUØã¤ŒÎ*ī‚>!hšg‚íí/įû=íœB7ˇaķî` ŋâ{­[VøYĢÜÍlūdčLų‚vÍaøÅV˛ø/EĐŦæwÔ7ž4āĸƒķgÛüj ÚxĮÚ¤:ÔQĮk~ÆXgeĘgēä÷ŽŊuí'PÖ­lü;iÄĨ÷Os ą/ך5į6ņ-„˙´‹„¸Uļ˛Qķē§-œ×ŧXęē•ĸŨŲÎŗ@˙uĐäķ/üRÔuˆĶøz}8Gn˛-ã—ũåÍ> h-cÁFƒ QŒTÕä"G#Ļå[ĀD1ƒėĸƒo`ÆË‡hâƒo 6ãeŊJŠ…të0e˙Fœ¸# š’ŪŌŪŅ6ÛÁK苊uÄžE´ŗc>ZĮĐW”i?ĨņM¯ˆ`šĖZÁk“ä`ncøUmĮžÖüŅmzH-ƒkcčk[IÖlĩË?ĩXKæÃ¸ŽėwĄEÍÄV–ō\Lácw3š7â7…õmMtë=Idšc€›MutTwvö’]]LÁîyā(¨4ÍZÃYĩûNŸuÄ'øã9zŠŖĒjö-°šÔnRŪÛwšã5œĸĢ|(ą—Lđ‘ŗ¸ĪĖŽ[šÍwJęã*Á‡ą§R 2HÔÔl!š‰ãm˛# 0Îk¤Ōíėhkh­­c†Ąļ Ā9¯xŦHVޏ=)Չâŋ§‰ü=sĨ<Ļ!0ûãĩføÁ1øFk%ģ{—wÜÎFā+­ĸŠę]Ž­oö{ûhî!ÎvH2+į/‹^ŗđ¯´ŊFÚĘ4Ķ'eß)`yũ+Ųo|3áŊCÁūgö|Áöbčņ¨xę+Æū Øi>)ŋąÕ,áēÜ3oį(nõéŧĨkiļÛˆ¯nn’1$gF9oĐWQá¯h^>f™h#œĻĮ”ą%‡ã]‘āēƒîiôÖuOŧÁ~ĻU5:ĶVą’Ęö-ŧŖ„õ¯đցeĸ|t¸ĩ°B–ŅGōĢ7OaOøÅāVŧÖmõču.&’8#ĩÆK7mĩėšDZčÖpJwI*Ŧ}N*õQESw Ûr7uÅ:Š(ĸŠ+Åúģh~Ô5ŨRXĸ&2ŊÚŖđVĨyĢøCNÔ/™Zâxƒą^‡5ĐQEæŸūŨxÛT´ŧˇÔ–ØD›s‘žÕŪF‰Ŗhj&RÖ ooöEbxÄwž(đķjw‘Æ›įuˆ'÷ĀŽĒŧŽo„ķOņ+ūY5"müß4Eߏá¯TĸŠáüCâËģ/ˆbQÅÖæšSŲG˙ĒģŠÎvß17zn椎+âVĻj^Ô¯níR[›kV1;u_Ĩc| ūō1ĪÍ3ÖŊ:šYW`3ëNĸŠ)7 ã#>”´QEQ\bx˛îOŠÃhą5´33ŧŠéuAt­"ęųļ‘Løc€qTü+ĢOŽxrĶQšEŽI×vÕč+jŠ‚îÖÛY-ŽcC"íu=Å|˙â/ éúÆŨßL„Å 픠Ĩ3Ëuæžįsœķ]uy¯ÆŨ]_Ā­4™,dûF1œ€Bkœđ¯Š¤Ö~ÚiĄÚä•lrĪųÅsZŨˇü ?´é“÷vķ˞5ëÖ˛6ŊãŖqĪŲtčFŅģ‚íΕløŗÄx_ÃWšŧų+pRĮ üëÎ|% ÜxķÃ˛øVÔoRúwc“3"Ä œhx Į’ËĨk6Ú´ÆYô†}Ō7Ywũ*ŸƒÖķâ}­öĩĒß]ÛĀ.;H-Ĩ(¨ŖĄã­[đ/.F­ŦčĨËO&šX¤ĪՔzÔ~ ŧŋø.ĢĒÜjW0[ÃpĐÛC í ;ëY>†døÛ{܌ōÃÍũ؏ZôßøEmdņ#kwSIq8âßîB?ŲūĩĖ|Dņöz֓Ŗ A´Ë[ŊÍ-Ø8#…fEq­éž/đöŸo­6ŖĨ\HĖf'œã…8íõ¯Y¯4øģâSÃÖZt:q–4ē›dĶDšeƒÜ×1­ęÚׁn´B ^ōōŌųÔ\CtۈÉũ:פxßÅŅxK’jĖĄäe gī1WžjwēÕ§ÃčŧY¨ëē€ģ—-ŧ$×=÷­kŸŠXü)´×Ôn•0ęŨ3ôŦmuo<;ā‹OŪjēœÚŇ_.b#VnqˇĻJ××>$j6Ņîcˆ cTڈžĻâ;Z𗆊"×onoaDyᘃƒŒāvÅ?ÄÚŨöģđŌ?i”ö’EöŽ20ÄúÔ^‹^ņÂË-BMvę ´Iæ&2Üđ Iđ{UÖ|CáRMCRšYÖvŠ9Xä§\ö™ĒøČüHÔ<.5—“ 3¨>Z÷lzũkv×^Öü%ņĪÃzŽ ú…Ļ ™‰äP[đ[㞟Šaɨ VEąĘGö5^ õ&ˇūxSWŌlŦ.¯5énmūÎ6Zl Š‘^‡^/a¯øåū,I ¸},LP˜AŽ*öŠ+Ä>*ÜøŸÃ­ĨŨŽŊr`ŧ›jÁ´a=ĢĒø•§ęwūk‹}N[hĸĩ :'Y2SXŸ ü/Ģ JÔ`לXŒˇŲ6`ÆŊrd2BčŽcb0zŠņČõ_hßlü?6ą-ՔÃĖÃ(Īō­ęŋlņ÷ö%æˇ.•f–ë"ym°ČŲūõ;ÂĮZâ,–ˇZŖ_i‘Yˇ—<>HëęzפÜFŌÛI9™H ;ZųŪ? ę“üd—M‹Äs›Čāg7e2WÛč>7ņ ÷ÃßÁl/ZķSŧ”šs“üXöŦ›ĪĻx&OÛꡧYŽĩ4) œdŒWiđįÅ?đ–øN ם?w7ûÂŽøëđ‚ëy˙ŸGĮ׿ 4ũ[ÁŸh—Rēŗ‚-âíßhĪ÷­tžņܡÚf¯ĻūeƒėŽäāēŽ•‰áxn>%O{ŦjzÅŨĨ˛ĘRÖŪŪ,(Ī­k|5ņMÕĮˆu ^Ũ5ËØ9ōĨc’Ëší|QĨŨjÚCÃi¨Ía*üūl]O+Å|ĒxĢY\ĶbÕnŲÜĪ÷¤ĀÎzn5ŗŽŧIá˙†-wĢC Ô¤¸6đųËĩąũãW.ü?waāļņ ׯ?ĩV=‡•Î3ĩŌiž;ķž/‰]“$'rįq\ļ‡g­ø“ÂRxēã\ģKā^Xaņ…ūŊë2ÃÄ^5ņ|šf­¤ŧžTwBŪxW,Ė}ķKãĢīx[ÆÚJ[ëĮvۖŨۀÄão͚ŪĶ_ÅZWÄxãžŧ¸ē°–×Ώr6ÄŅ}C Ū_üNŊÔo[Wš°Ķíæ1[Ãnû3â'Ŋ^đ—ˆ5-KP×ü#>Ļ~Ųhv[ŨíËmõŽÂ>Öī~"kŅ[ø‚X/mp†åãXN•Ņügŗņ¯„×V&Â5HĨW +ząŽƒáŪ—â-?LŗēÔud›M€Įn¨oIöŦ.˙Qø“¯ęŒē¤ÖMŒžTKm.Ū¤ÕßxĻįOņŽŠáFéîūĘĸKy܍ÅqКĨ j—˙|[Ŧ¨ÔŽŦ´í5ü¸RŨļī<ōOáŌšŊV¸~8čļײųŌÃ…Jäã>õô|ųņ[AÕWÅúWÚu™&Žöč x@ƒžĩė^Ō/ô]>QŠÉ~ėšbˇŽ•ãū‹SÔŧeâk –´Šk§yæOŧŖyųWë]/†5­_EøĢsáKËųo­/27—–ĸņΧ¨jŦ<=2ŪĮ¤0ųŪ؊‚ŪĨ‡aU´ Ë˙ |WÃpjŨéwIšD¯ŋg^‡đūTīŽš%ËhĪŠ6ĨpaiԐ{×UāÜčYŪÉ­\ŨDm‚‹wû‹Įjîä ҏFÚÄĄ¯ŧEáŊ`ü^ĶlĨ×ä–ōe2EpÃũW^¯[Ôtëũ/áŪĢm}¨=ũĮŲä>i\vŽ á.›Ējžōmo氅%™eØũkĸø[âMSRŋ×tmRspúlûRb9eÍdÁ¨ßxÛĮēŽ‹{y¨iöö„go-[KŊđĪ\ÔGˆõ¯ ^ŨŊÚØšōæä‘õŽKÆū×&ø“Ĩ$šĐ{‰¤ßlZ?–>r8ī^šá-\Ōmį]oWūĐwlĮ…Û°WKEQEQEQEQEQEQEQEÉca׃_?x;ŎņΈ&žÚoė“pD˛*ąØũkŲá*đõۜnZūŲíŲI9a\gÃm23ŠxT˛„Ĩ•ã•„cąÜ}kžøUĢXøb˙ÄVZ¤éÂ\1 ͍ÃÛÖĢø Y‚OŒZŊŨÛųMr1ŋ Ųö§čöíᏎ7o¨°Ž+Đ^9îū~ĩčēŽģhÔ­-”´Ā,ǟŪ*sŠÆøIĒ[GđÖ8d”G-§˜˛†āƒŸ˙Uqū đÅæŊĨxēō5hĄÔ<ČíÛĻņ“ÍtŸî ŗđ•֝3ˆ§ĩēq"1äs\˙†´YõŋxÃR´8ļt’pxfÅmüž-+@Õ4ëÉW÷lŌ#qzÃđįˆŽÚœ—mã`U n`ū"Ŋā@ äâŧÃâAĐõ_iž×ĸ Älņ\‚\nŗāŠžßišĻĢŊĖŨ$bŪC¸¸nŪõīŅĐŖ7Ū* ¯#øŋâËí?YŌ4 RGtÁĨšd TĮĘOCÖš¯ŠÚU„Z¤W2\ÜųĘōČōĪ#ŠĪ¯ņ‡ĖņƒDļ#tlč˛lmÛž^ŋ†kšĐgŅ5‡6KvmåŗKeܲ‘”wŽâM¤ZįÃ{-JÆĮėöÖ×$H1ôŨôī^‘ĻßčZŸ‚ínnMŦ։lI‚ŧzķoŠK5îŸámv;S œā Î í>'_[7ÂģÖ#yШLŧxŽ{BđũŨˇĀK‹IĄqs< .ÃÁ\œŌĩ|{nŋã‰gC,pJģws‘žÕCā%ĖMá‹øL‘‰žÖĖPšĄ‹EøķŦH^ųÅWņ“[Kņ§ÃÂI°V< SߚָŪč~“Ãq?hZë­įøSN°šČ•3:ŠĪîÂ÷ũ+ģ$I< á,ū*h^/$w;ļ XŒŪ•ŪQ^7ņŨāX4Fw[ĩÜä ëŧq,w? /^ĖfØ|ŲéĮzįü?Ŧ3áŋ†­téŅnn^4ãŽ3ķ~™¯U\…œŸZņŊnøÚGIeÄqĀvķĮFĢ>)´Đ„Č™Y7??w‘×ō¯VÖ­ŋ´t ÛhXfh—ÜWŒüŌtû?SŌīä–;Č.IŠq^‹ĄøwÂúG‹&“MG:Ąˆ™\ɸ`úû×ā-J(ž#øŌiŨc*ŁnÆiß5+ģ˙…ˇ3áÅŌ– î?Ĩuj3dčZĄ]÷ÖŦ/UP4đĒēd ĀŨŽĖ+ŋ[{ŋŪÚC2ĩĨŊ°wãîąíēŧĪāÅÜÅ)šYŖS$į gæ'ŠzMnhļ›í[žwqœt¤Õ|A.ŋņhčz•ËYéP&ė°ČŪëđŦ™5-7LøŅͧ—ö+{Vąn8Sßë]7ÅŊI¯>éגÅūždvxQ[ļēķ>ąá+NšũÛAæÜ"FĐ8Īã^^#ŽËũĸ´…r,1<vĩvÚĻŊ-æ‡â—ŪŸdļ‰â‰¸åļūŊë+āÅÚ‡ˆÆD ŽøŦ_„7 ˙ 7ŒŽ<Å Ü|Ŗw^[ĨGá fOxËZ›Tš6ļ–ĩ-ã>^ėg–=ë/ÃĖ:o|S¨XJ˛0˙TĨx?6ŗâ{Ŋ˙ü2gr‘ų āņķŽģÃ~)ģÖ|uŽiŦęövaU wæģŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸątŨ/C–ÚåėmĄxnų¸^ģæŗ“áŋ…#šķ×I„7]ŋÂ? é ˇ†Ö†Ū%Ž5čĒ0cÜx?Ã÷ZÛįŌ­¤šëæ2 Ōx|jÚ#KˇûVw 6ō OŽxkJņJÕeQĐôaøĶ4 i“MļīûĖNæ?Aqā]\ĩÄēUš™Žæ}ŧą÷4ˇ> đÕŲ->hîF7ōkSMĶ,ô›5´ąaI! ÍGĢhÖŨ°ļÔ Âv7JĪ´đW‡ŦĄš+m2’e(á8Čǎ_|;u Eö3E NT=qÖˇ4­&ËEąK;0¯@9ĢÔV6áģ 3ZŋÕ-ԋ‹ŨžnOtÅ?Ä>ąņ6˜l5c`ØSƒ‘ZļŅYÚEmÄq(U‚ĨŽSPøwáŨKQ7“Z˛ŗŌG”IĢ(ā×Gecm§Z%­¤)0¨ŖW9Ē|<Đ5]HßÉ °Lã}žS“ęné:=†‰dļš}ēà öZČģđ‡¯ĩĒOdMĪS‰UēŽ WģøiákŨMĩ´˙ô– īW#§JęãEŠ5~ę€dęžŅõĢ•¸Ô,Ōy )nÂŗm>h–ēœwĖŗĪ$'0¤Ō–XŋŨÕÖˆ|%ĸøĸ8“VŗŽä`J˛ū"ŗĨømá‰ôĄ§K`^Û˛ÎKįũęÖ˛đ֕aĸļ‘ Ē›&\4oÎī­r–˙t+iβī˛Üm ĮËúbģsĻÚ6œ, m‚lōČČÅsŋ |3g{ö˜íd 6åˆĘLjŨé]5ö™g¨éōX]Û¤–Ō.֌ŽŽNĶán…oxŗM-íÜQžø­Ž'-dtÂ×g$K@č LĨJöÅsß éwR\YØ´O `@•ą†ëÆqSh~đ˙‡'–m2ÕĄ’EefŪzĩü+ŋ ޤu´•o 2ŦĖ #×Ģ\|,đĩÕã^Km;\“ģÍûCnŋáÍ7SŅ‘yšĐ.ĀŦyüꗇŧĄxbV—Mļq+ o’BäAž•ŋ4Š,§ŠKjņû]ĪÆŋíĩŊ?N6š}„…Ūën>Ņ éjöJ+“Ö~øgÄ’]ęVrM3œ–30ĮĐf´ô˙ ézn‰&‘ ,öR9[vAŦũáūĄŨ-Å­ŗ—ŒŸ/ĖrÂ<ú•͞†R§ĄŽIūx^KŗvöN×;ˇyĻVŨŸ­]“Á:ŌÍ4ļ!Ϙi Ãĩ?LđŽ•ĨꍩE˛]•%šBėĢč3[õÉë˙4ęI¨^Á"܌x¤(XzVä:=…žē\vëö5MžYä\ô_ |1ĘÍöIåayIŒ÷zW]ikj`ÚĢjZmޝ§Ëc{™o(ÃĻqšæõ‡Z-üÛÔÜ[!Æø Ē?ÔWGĻévzNŸ” ŧk´"Šįĩ‡Z¯¨›öI­Ž[‡{y {ū¸­ŊBĶô /˛éđНĖz–>¤÷ĨÖ´[={Ok+ī0ĀĮ$Få üEsÚOÃ/hwŅ]éŠunčۈYÛÚë­¸ˇ†îŨ⏉d‰Æd\´_ |7 í"[Ė#fŨäyÍå˙ß5™ņ2]14;?5ŗ5Åô‹ĸFvėaüYíŠæm> kë |_tÁظũj˙‚×Ä^ø'‡5]@ß[Ī\DÄį`ŲjžđæĩŠžĨdŌ]°ÍķXús[Z^›“§Įend1F8ķs~'ŊsÚĪÃŊWŋkåķėîXaäĩ}…žĩ¯ĄøwOđü,–qąw9’WmÎ˙SXš—Ã/jzËjr%ÄSIūĩa”ĒÉūõlëĶ5¯6‰s…¨N6cĄá¯iŪšûLsÜŨ\*yqÉpûŒk辔Ũ{áū¯_ ÷ķ­o:­Ÿc0÷­ÂÚo‡"u˛Giåå•Ë;~&ŠkŅĩD_ɐ\ļGĘyƒŅąÖ¨ę_ <1Ē^Es5Ŧ‹$QˆĶː¯ēë;Hl,ⴀJ98Ŧ¯xGIņLĮ¨ÂYŖ;’E8eüitŸ iz6—.ŸkĻHĖäŗgŪ˛í>xVÆO2ßO1ŋ÷„­Í"|0đ”wqŨĻ™ļâ7 ˛ [9_Ö<áívå.u :9&A€ã‚GĄĒڏß ęmj×jæÛˆö`zVÆŖ éēŽ’tËģU{MģD~ƒÚŠh Đü6í&›i˛VLŽÛÛ™=+ Ž[Ä~Ņ|M}õâKÜc 4/ĩĒÛxCG˙bY–Päúš§iđķÃv6ÍokfđÄËĩ•&a‘ųŌiŧ7ĸę+}§Ųŧ“ļVÃ}Gz[‡žšÕ[Qk"—۟ËrĒ˙QۜŪđķkËŦ}mĘíá[qĶ+Kâi+’ ī<čŽ`˙W4ĩ…YđĪ…4ī Ųŧ!ŲämŌK!Ëš÷5ŊEQEQEQEQEQEQEQETÔ5}2Ûí%‚n ōŽNkīÆē@ŠHcyžv\"›$šÔĐm ž‘ 2•‘˙xā˙yš­:(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸšĘJ°4ØĄŠÂCƃ QRQEQEQEQEQEQE`ø—Âö~&ļ….H§ˇ2 â8xÛÚŗmôĀU?á&F‰O­ōÄzŌŌ|1m§jŗęŌÍ%ÎŖ:yäūčėa[ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQMdWu =Ϙ!=bOûäT1ę6s\Ŋ´w1<é÷Ŗ ČĢTQEQEAöË]Û~Ķ}7Š‘äDMėęĢũâp)QŌE܎Ŧ§ēœŠG‘#]ÎęŖÕŽ*$ž´’o&;˜šLgj¸&ŦQEQEQEQEQQ4đĄ!ĨE#ŽXqOV Ą”‚B)ÔQE&qMķļŨëŸLĶčĸŠ(ĸŠæŠ<ų’ĸãû͊T‘%MŅēēžęr(’Xá]Ō:ĸúąĀĻEso9"ŖŽĄ˜öo]ßŨĪ4úN”Ô‘$ÎĮVĮ8§ŅEQQÉv2ļ:ā͍ĸŠ(ĸŠ(Ļ<‰Ëē¯Ôâ’)Ŗ™wG"8õVÍILķžĀę[ûšæŸE7zg—?ZuQEQEQEQEQEQEQEQE2Eß(8$šō |/Öt?KŽ]j~mĢ;8PäŗgûÕÛxĶįáíp$r\4ĢFįīdâē y ļŅHŨYâ*Z(ĸŠB21_>|QđÄ>ņN‹>sts™Íb Ü?ÆŊWÆžŋņG‚†›§Ū[–T`āã8*ø~˙Ã^ļĶĩ+Ąst„–`āžĀšĶ×t?Ø}Ž÷Íįvcr§?Q^!đ×K›MøģŠéÁäxí‹mķq۞9úWДQEW;ãoÉá ]ją"I$[BĢN+[Kē{í.ÖęDķDŽĘ;*åQEQEâß<9m§éMâ+Iîĸŧ–æ8äT˜…`}ĢÔ|+Į…tΘˇú:œŸĨlQE5˜*–=ÍsŪņ"xĒĶP•`1C ÃÛ.[%ĀāĩxîˇayáoŒú=ŽxÖ×ŖyrJĖ0Įž…ĸŠ(ĸŠ+Í~+øJĘûÃē†ĩæĪänd;N=Ē˙ÁövøgĨŗ’IßÉīķę5ÍËÄsY_#4DîXŠę+Ę>é˛iū<ņEąšW‚Ü„Œ;į1įō­é| â)~'¯ˆF­ˇMWŨåo9+ģˇĨvž'ÖŋáđíæŠå MēnN7~5:<šĻ†¯ƒ—g ~é#Öš/‡ Õŧ&5Šę&įí2nUŪ[õįŊw´QEW+㟠Øx‹F‘¯ ĘöčΉĘķŠâ>4 j^cģí¸Ú7ö¯aŽ;âO‡5?xYôũ*įȸ.īm =*߀ôī øN×MÔ.~Ņr™,ŲÎ3Úēj+Ī~.x–ë@đÔ6öNc¸Ô& TSÔ×)/ÃũoLņ‡îŧ?ũB5åÁ—īžŦ[>Õí´QEQEƒâ߯…ô_íœ|čS8ÎæúÕûøĻžŅ.#ˇ*y "6ūëÅp˙ ü%â? KŠ6ģyį,äykæoį<šôz(ĸŠ(ĸŠ+†øĄ ÃŠøVęôĪ<3YDŌ!ŠBšúâŠüYÃĢiĨ•¤iev˜žĩčĩåžđ'ˆt߉WzåŪ _O‘™‚o$ļz {WŠQ_?üEĶ5}ĮZK[ë­k¨\įiüŋ0Čũkß ČˇŒģF*’Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+ŸņnŽę:ZĮ jKct­’ė8#ŌŧŸÂŪ(ņŽĢã |=¨ëąÛÉmšKyKķųSė<]âČž#7‡¯õĐЉJĢWįī[öøæ÷ÆW–ū!Ũ§[°2Hb\ģ\÷Ž5īxGŖ T]A?Ũ@€wé[đ‘xĘÛÅúf™;™!žˆ´…a⌎}i<=¯ø~)Ī ęZĄ¸ĩ„n °.GlÖÅí3W>(ŅÚÁ1\Ũ¯‘O–3‘ÉëŅlNŖāßŨęîŽu‘7F{Bqž•Íø~øōŌã_Mfm:ŨIû=ŧjĀĪŪĢ>ņ>Ŗãę:b_=^ĘRP8ÉĮ^ÕÜü(×õŨkGē]r)JR9d]Ĩ×é^‹^uâ/_]xöĶÂ:DÆ <ۉÔdĒúW ņ"ÛV´ņ'‡mu+Öš…nՒåēōGéŪ4ŧÖ4˙ ËŠh÷pÃök3l‹ØĮåPxCÅŗ]|5Äzģ†u¤¨ĮJŖáG]ņސū!‡S{(YÛėöƀРqķwíú×ā RâoŒzŦŌ[1y›ËrŖåC÷Oō¯}Ž{Æ0ëhrž‹|ļw1ûŲrĢËŧã/xļ ÛîĄ0šÍĖ‘đ¸ėúéūx×TÕ5ŨOÃÚÚĢßY> ŠĀaëķ֗YņĨö­ã/øE<=qÆ3stFâžĘ=jņ^ŠāßŲčēũđŊĩŊ†á†7Ŋrˆ],R[čF™qpĸ(ã^IėZŊ3ÁēwŠ,XkQļš´1/’ĻŨĩØWņÅ7>Mĩŗ’('ŋŸÉōą\wū•u¯x¯FÖt‹¯`žļŧ˜+Ü"á€ĮL Ĩņ+Å>/đގk%­ŨŋöuäÛ#ËÉQß'Öĩ<ŽxˇÃ:+kV76­lĒģâtų†G­hÉsâ]káöŸĒiúŒ6—oįĘÛ3ŋŒãÚ¸¯‡Ū(ņŸŽ-Ž`ūŌ˜%ėB0Oû tükĢđ¯‹u+ŊgYđžĄqöĩŸú‰vä8#†ũGË]øįÆúWâđÄīkw,Ē˜ĶhÉčMt矊uŋęē\zåÔWvš‹ė,ą0ŋõ[㔛ü lČĢŨFyũ+Ē{=VoXĮŖ^ĨÂ@ŋ3ĻáĶĨp^ņ—ŠŧOŽjMõũŊŊ͖åŲårÄqžĩˇá;˙jž)š[ËËVŌ,§hœŦX3qÛé^—\WÄcâ4đũÄē%ÍŧĮ 4í Ë˙Āk‘ø)ˆÎ‡o;\Z˙d´˛3ŽĶæŗÜôëT>%Ū›Œ~¸ ģˏ*?ŧyĀüČ­˙xÃÅ šËPÔÅŦúuĶ„0Ą¯ĸŨÁvą’)#Ü_čj/ jÚį‰>A¨­Ėqęr†o0§Ę? ä<ãx‹TÔ´w–/´Ã.ŅpcĘÆįŽæē/ xŋU“Æz‡…ĩƊK›ußŅŽĐÃé\?Æ_­Ūœú•Ũŧ–Ō_i& úfŊ _Tđw…Žõ/ęķ$q D˜į/ŊG§ßx‡Vđkø„jDŌFf†ÜF6ĒõŊúõoÂŪ0ø6âō͖B(ŲB¸ĀxSÆū/Ö´­b!r$š˛vg¸1ä"ŽĀw&­^xÛÆáŒ~"–ˆ$e¸'Ū\ā*ū‘âokŪ ūßļ’ŌÚ!ŪVT%Ļ#¯ĐV׃üu¨xĶGiŦmbI℉YĪ /`=Š~øâīÄږĢ$iŠXHUŧžŒ*–§ãmOTņėūŅŽaŗhW™dyvëéSøCÆēœū-Ŋđļ¸ąŊėrOíŋJâž0?ˆô›YnĄ3Ũ¨ļ…S‘‚ūĩéļqx ÍįÜXļ¤0b!~@¸=JËøgãWÅ1jŖWé%œŪX.:u¨Å:¯‹ŧYyŖh7igkaÄ×w37 Š´]éž6o kS ĻdßÎ6īú×5ãoxģÂŪ<ąŗŽî)Ŧo\ˆ'8Î6ÕīxĢÅ~ }?SģžŪâĘæPnąāĻ}ëÔŦnEíŒJ0%@āzdUŠ+ƒø“?‰ôÍ)õm ųbŠŲ7I%댱ņ—Н~KâXõXZâŨØÉŒckCKņg‰ĩ‡']ĩÔ 7‚MĻ?+Ôā ęuŠGđģR:ÔąËxÖŦ\ĸáG Ž7á…öŊsā {] ÁvâMōĖšËn'ôŽĮĀ>0ģņf•~—)7ör4,T|ģģÆĐ|]âGøŖqáMí䎊#&øĶi>•ĢãÉ ęv™MĒ߸TŪ~X?xŠČšņļĢáOéú>ĩyo{öŌ7âØbŨĀīY_õ´×<,áKĸĘŌaG-Ęđ+KÅ>.ņ†4{}rh->ÄĖĄ ˛Šé“^‹Ąę‘ëZ%žĨÂÜD˛éšĐĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠųĮâĨĨī„ū"Úëö`ƒtøQžąŠū!éēF™ x–.•ķ)į’}úöũkÖūØÍ‡Rōëū>¯?{%yįÅÉü'ū\Žß5rsī^Ī DĐÅ.Ô$ ÃāWéwQŋí¨~đŗšĢ? øA‚’†ãī÷…\ņííöš¤ęzMƒîK{E‘”uĪ~•đÃEĶĩŸERöŪEfY"Žr€ĨtžĐ4? xƒRļĶáî< ĶĪ#‚Ŋđ>ĩÉ|!¸Gņį‹e—`2\ŗö›Ĩ{rF‘Œ"*aŠ}x-”Zí<ˇŦÁeRŅąčĘqĮáũ*߯}VŨŧIáËe}ĪĀfžâģŋƟđŦ¯ŲäUŨiëÔíé\.“o.Ąû:ÉmfĖ$Xؘ!įÉÎēŋ„Wv°|/˛q*„ˆÉ¸ąÆ>c\O­N ŋŠ^#¸WTŠGbšāc'įŪŊæŗõÆUĐ¯™ŽBŲüĢĘ>$bĮWŸēá˛O§OáŦÍ7ÆoHî ų9˙jŖđ´šgÆ­n+ā|éwŧa—ĒŗpGéR|eˇ’˙Æž´ĩųŽOē; ŠŗņšD:g†cqķ­ÂÎ1ŒW­ŲßZ:ÛÛ$čf1įœ`Uúķ/‹0éz”š.Ēf$Ŋ•„wJØ18Æ?<× ¨x7Äį´ÕāÖĄĻE2æ)˜’9Į÷æĩ~9;Ėž•‰T’Ecé’Vĩž6jÁđîe™|ŲŲ(=GØx`,ß lQč8ãˇË\_Ā…ŠÛHÔí[án[>¸Ŧ¯ ZÜ_~ĐēĩėŊ¸o5쀏˙>•-ô°ĮûFB́$m'ÖŽ|yA=ωnŠ^â[ą(ëŸZŸâÕŦ‘ü1Ķb¸e2Į4[ŗ×5éÚ>ßėkMŊ<Ĩ¯ņŧ3|>øŖˇdH‡Q šBŨĮę {7ƒt÷Ķü9›&yŗ4„˙yšŽ‚š¯īÕĘĪģgéŠá~jΤü'ĩ¸„+Ė×ZĄõgĮõũ+3ĮŸé|1Qļ7lúšĩū<ŗÂ9ĻD¤kĩÉôĒ_,Ļŧđ>{ZvÍÚ8Æ:×UĻxNĪVđ¤+6ĩ%¤öëšDŖHčxĢ lt7Eģ´Ņ|ãkĶ.ųw7rĨvÕã~<ņj_ôß ŲZ[-ę?ü~ʁÚ3×åž+3ÆņũƒâG…-&Ŋ–ōá% îäqĪ ¨ū)ŪË­]hĒÂËmozĐ6wŋõ{?†wÜš‘ûšæôËiõŲīėÖĢæLÖĮäĢ{áMÕŊˇÃ;u–aˆ7‡9Æ9Ŧ/ƒŌĮqâ\"ėIg¨ÉĻk˛'ü4F‰’0 ÁĪc´ÕŽxtO¯W“Đs]Ëj“vÛL„ĄļûI!Į9ĮÃ|˜Isâ›p+zāį“TūFÚ‹üUepž\ærÁR7Qø’Ō]Sãæ˜ļJCZį;ƒĀÕ¯m—ãօeA“žŨi˙âķĨđÚõÍę‚=ŗWū+xô iöÚE3ŪEy†V?|W+ņ3JK‡– 5ėˇsÉ*oÃ|Ē?Ũė+Ņm5ë{¯_XD¸kM=YŸvG˟wë\§ėüĢ˙Æĸų$ũŦ˙*ö ä~'Hcøy̞õōHŦ߄# tü“¯Éú×7điV_xĒáŅ|ÃxØ#ˇĖi–_öŒž*Žįø7ĮF˙EŸ™¯WÄVÆ]:įQøhŅK‹vI\/÷EmxzūøQi?˜­‡ĖsĐâ¸˙‚:tÖŪÖ5,w.ū^}ŠžŪ×^<35ãÍtŋV˙ õUTT]Ŗ€1Ū đʈž E°ųŗsūídüE ģuĩÛdūŸđļ,üMņt ‚ė˙4ŨDxŸâÆĸ4ģ{{˛-טÜō88ė+?Ã×6–Ÿõ›ģģōĐÚÅĖŽr{qũ+câŧąËâī¸o•}7kŌWVÅæž›8mąר'ĩyßÂSoįøĻ p Ÿk“œũîĩŸđVaâYܜ]yŲ!ē°ÍUņ=•ÆĨû@é)fیH˛HWĒ2Nj÷ÄXãâ÷…Ä’ĸĸ•b_ŊW>=‘˙ž˜ŠHaz§ĶŊ Nš‡LđŊĖî0Z†fö˛<#ņDņĨÅÄkH˛ÃÉI ĩØUkûHīôû‹IFRhĘ0õÍ|ûā=.äx¯TđƒEŋOŽv™ÃŽAĮEūGđĢŦnĶÆz…$l펍Û觅úr+Öŧ~vxW?(Åģr{q\ßÁ„ŲđÆØ 1‘¸˙xõŦ_‚’–ÖüT…ŋåčļ?āFĻ͘GûBęˆm֘P? ÄÖ­žĶö‡ą¸ŊÜmå;ĸ-Ķ;HWĄxģDđ×öŊ‡ˆ5h‹ÜÅ"G Ģ}æ'åãŊqŋJMãO@17Ąí-n|jqÃWįŒg5Ņü9dočáâŨréÅuTQEQEQEQEQEQEQX^"đž™âvŗ:‚3}–_5=OŊM­xvÃ^ĶOŧ‹0++(ąW`´KkŗˆEM€÷¸-_āŪũļ÷TԞã9Gķ3ŗé]†“ĄGĨhKĨ ģ™Đžt¯™ã\ܟ ŧ4ڈÔnŌī92ųėK}kgÄ> ŌüMaki~$˙F Å"6p;“Bđž•áûY ĩ‰ŸÍ˙Y$Ė]ÛęMswŸ lRšķNÔ¯´ī=ˇIŧ›Tūŋkāí>ĪE›MŠIņ72ĪŧųŒ}KuŽvÛ⿃c~—–w7°H;m”ü˙Zô(ĶˍS9ÚÍ>š¯ø'Lņ,°\Nd‚îō\@v¸Ŧ[ī„Ú&ŖgmÕÅܯ—ŗūņ‰õ5gPømaĒh°éWzûÛĮž|Ī™ŋŪ=ęĪ…ü§xVŌâŌÖææ{y—iŽfČQíP§Ã]+™īaˇ‘÷ĩ¤R툟uŦÕø=ĸCâŦÛ]]ÁpŌoeđ§ÚŊ $j€’cšĘņˆŦœˇwņįæ06ŌÃŌšŨ/án‘ĸ ›wn˛.Rc‚{ˇÖ Ō~čÚ6´Ú­­õúÜ3noŪđįũ¯ZÕņ'íõÛøu;{Šlu(Fâ.¸ô>ĸŖĐŧkĻęcVÔnĨÔõ ģVy˙„zZ-đ†›ã 0Yę ÃknIī!öĒūđE†e{„¸šŧģuØn.,ûŖĐWQ\įˆ|Ļø—QąēÔA‘-…ˆô%ģÖbü9ˇkČ$ģÕīîí`pņÚLŲ@GOŽ+WÅ>Ķ|[Ĩ õ`ˆs§ŪCÛĪ]|$Ņīôsa}{{rã'‘ōČa]•áøŧ1á™ė-îî'Š8[cNAe=OöōŧИ~WC‚­ØŠõOÛŽ§o¨jWˇÍĒ•€ÜÄyî}ũŠž đ&›âYĩŽdRC,{đˆ}@Ģ"īHđ^›ok}ŠãfÛ\?'ļ+šņũ­‡ˆĩ_ éā$ŌŊȘeFIĮ§JôDP‘Ēá§UmBÆJÂ{+…Ũ ČQĮĩpūøWg jqO§w5¤.dŠŌFųząâ†v>!ņ"k“ęW°ŨÄ•å„ĮĨ7Xøcg¯Á:ž¯¨ÍXØģÔ`Žũ+¤˙„zĘO&‰sēâÕc“!ų˜W'ÂČá‘á‹Ä¤ZkøķI0¸ôĪ\WmĻivš=„vvQáŒ`Wk‹ņ?Ã}+Äz¤: –k-B#‘<ũjļ§đģNÔŦíRKëŖwnûÖí›2õ­įđŽ™7‡Ež3$ 3ŧũíŨKg×5’ß ôŲėåĩžŧŧŧŖ1Įįž| }=ũëCÂŪ Ķŧ)e5Ĩœ“Ë ŊRgÜŌŠ7Ã}ío,SŪÍŊíc›lLßAI¤ü5Ņ´]r]VÆ[˜æ—%IōsíUî>i7Z°Õ&žÔ úũŲÄß2ũ+w]đ–â=2˙Ėt‹%ĪÎŦ;æĸŅŧc¤Eq‰în.']q,™}ž€öĒžø{ŖxgR–÷O{Ą$ŦYÕĻ%XžäTš×ƒ ÔĩAĒŲ^M§ę;v<đķ¯Ąęo øBËÒOp’Ks{ps5ĖĮ.õyđĪDžÕ[S–Kßļî,&ËÎp=Š5_†šNŗ:Myy¨;Æsfá>‚­ęŌĩoÃŖę =ÄPļä•ßįĪÖDZПG¸Ķf{šŖœ/$IJĶnzRCđĶJˇŅ†—åôp1ĖĨeų¤ãc銛Ã?ôĪ \‰tḛ̈™É‰¤ųú‘]…sž'đ…—ŠãH¯ŽnŌ]Ļ8eÚ¯õęĻ™ā+ #L—NŗŧŊŽŲ×hQ'*=j¯¤ü3Ņô9d—Nšž‚II.Ë6wÄT6? 4{ euxo5{œ´>wûԚ÷Ã-'ÄZŗj÷W¯&íčžoË˙dVū™ [éú#éRK-Üģqœî$ÕË7ÂÛlŊ´ZÍü:Sũëaˇ™ęu7>ˇ˙cŲČö0ØĻ߂ŖŽ{Ãŋ tī _Ĩ֟¨_*†ß$LųYÔÖŋŠü%iâû$˛žēšŠŲNæHX(sū×ÖZ|6ŗ‡FūɃWÕ#ĩÆŨĸPxÆ1Ō› |7´đÕģ[隭üPŸāÜ1žæŦøoĀ>×īĩ{kģ‰&ŧ$ʏŒrsTeø]§'ˆåÖtũBîÆYÛ3$$m^Ũë7Vø5a­ŽĄk¨ĪhŦĄg?å¨÷ú×Câ˙YxļŪĖI<ļķؐ`–3Ęâ’ÃĀßaŌgĩ]^đŨ\02Ũ’ °ôįĩSđˇÃ+O ęíeĒ^?˜ÅĨŠMģdcëSkžûvˇũŗ¤j/Ļ_ēė–D@ÁĮ¸Ģ^đMŋ‡'žök™/ĩ+õˇ2õĮ ôĒÚīÃ]#Ä:úë7W7Šv€ĖRíŲJƒXø]Ļklj¨jĮĻųAūĩŦšF—áĪOcvō؄*ō\ŋ%ģ\Âo [[ø‹T×ôûwƒL|Åiŧķ îßJö*+ MđÜoˆuY/6üģ~î*[?XØë÷šÄ)‹›¤T“J¯âŸ §Šl–Î}BęÚ܂$H`>ĩ™ĸü>ƒ@Ķ%Ķė5[äˇuÚĒH;=ĮŊ3Ã_ ´˙ _^]Ų_]—ģVW F2‹ëPAđļÂ˙n Rũ¯‹eœŋŪŸJŊãoÚx¤3Ék}oĖõSYšÃ{›=Rũ{\ŸV{~`øD>¸îhņÃâO&­qŦÜ#BŲˇTb/Ĩ;^øm7ˆė–Ę˙^ē{uä 9aŪ¯x+ÁxCÍCĒÍw ąÆãvTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX,ˇ×Žô†ƒ@’Ū;‰2ŽĶô x⸟‡Ū ņ‚ˆŗiôé´ųeß1 Û˙+Ô'2ŦT<ĄNÅ'šōĪøéŧxž,Ž=-§Q´Aæļ6ū]kÖŦ ĶXÂר‰tPyЇ*ÚŦםüSøuã{[#e4i=ŗįlUŋx.÷Ižm_[ēKDÄ cû‘F; îhĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠĄĒé:ŨŸŲ5DĐn Pô$U¨-áļ…a‚5Ž5UQ€*Z(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠâ~"xSÕôĻšĶõšė>Ë>Čø~ ×'đ/YÖ5k}SûVū[ą ėC+dŽ•ėTQEĪxŋÅpxKMŠōx$˜K U=MmZOö›H§ÚSĖPÛOQSŅE‹âOZøfÂ;Ë´wG‘c}IÅkE – oPØŠ+7\°šÔô™­-/¤˛™ĮËęÚÜŪ4ÖtŊKUžū?‘OįÅhøĪLņåĪl¤Ņg˜hāĄp¯„˙kpī^¤ „ŽN94ę(ĸŠ(ĸŠ(ĸŧoãü$z-â ;]š(E„Z Ā\Žĩčž ¸¸ģđv™qu#I4°+37~+ ĸŠ(ĸŠ(ĸ‘ŗ´ãŽ8¯'đü'qüEž]kÍ:c3í-÷?.Ņô¯YĸŠ(ĸŠËŗ×ėoĩËí"cudĒĶ p7t¯"øˇ/ˆ|;ŠY^Ûë÷EŨÆÕˇ(Aé^ĪĻŗž™jŌ}ö‰IüĒÕV2øŽÍüRūUŨ¤{|ĄMlŅ^ņb_øgX°Ŋŗ×îĩôåLĀOa^Ņ`í&Ÿlī÷š%'ōĢ4QEQEQEQEQEfë–ú•Ö•,:UÚZŪ7ܕ×påžņO‹.>&ŨøXž[ˆm‘ˇa6Ž;ūĩė´QEQESÕwŌî–Ö_*syoũ͊ōŸƒzîšĢë:ÔļĄ-ĘÛ`*ģgqŊŠŠ(ĸŠ*ž§k=î5Ŋ­ĶZĖ녙FJ׏ø{RņE‡Åøü=¨ë2ŪZĸ3’T Õí•ã?n#ĩ†5ĩ‡Ė lå@Ž"߯ž0×ü?sâ=*âÅ-`bÍk´îUĻģo øŽįÅŪ mBČ"^…Û‡ũë…Ņū"xÎŪh2Z[I|‡lcoԟJčŧ?ãÍa|fŪņ%Ŋ´WE7$’ŋ:ãž-ę^%“ÄZ}„–Ņ%‘¸S‡É˜_Jõ3YÔô˙ Ũj>!´K˛Æ$GvT ä"øƒâGDŸÄ:m„šd,I„12§ĻkŊđ§‰-üS AŠÛ +Œ2ú7zķŸ‡øŸâwųjÍĀÍlx‹ĮÚ˙‡ŧUaĨ\i6ÆŪúP‘L˛’qž{UīøÃXđūĨĨXé:zŨĪ{œĢøÖ<ŸuÄņ5ž‚š]ŧ×rcÎōĨÜ#įŊi§øšŌŪī!–ųCtįŊik>+Ôˇ“ ŲEuĖŪ\¯Ü‡vÜū5ãĩß\xŖ_ŋ‡G[ģ›™Ņ.?y´CŽŪõ§ņãbØøzy°Ēˇ€>{9­ũKĮš–‘Ą Z M¤BŠ Æ\3/!kŦƒÄ–3x[ūĮė‚=°9Ž ū7‰.´9šŌÆžŅŠ^6Øa‰öĒCÅږ¨Ú[xŽÎ8bŧ}‘ÍČVė ^ÖŧMymŦC¤iQ]ŪÉœD˛ėP•‰âûÍCćDžŌšÎå!2HKnî)ã;ËĢû¤Ō´†ģ´´b’ĪŧXuÚ;Õ˙ x˛XŪ^$o´Ļ"$ë‘×5–|yu%Ãč,ē…š+%ɐ"ąvúÖį‡ŧMcâ--¯m›hBVTną‘ÔďÆ×ē•ÍŅŅtƒwgk!ŽIËãsģ}q\Ãû…žøÛ­Ũ!Čh˜žz–ŊƊ+„Õ|#xŽ_ø~Í/ĩFfķ%Šė=MMáO˙mëzĄhlõ[_ŋrõŠxßâ\ž Õ ļŸH’[yˆÎžõkĞ>ŸÃb ģ"GŌä*ņ$.īök§mjÉt3Ŧ4 YˆŧŨ˙ė×cã-c[Ō§ÕėôØ˙˛~`2ßŧeūö+”øņÍ­øĻdčĶ)Lĩ{eUÔu m.ÂkÛšpBĨ™yÜ?uŊOL¸Öôí*Ų4h˜âk™JŗÔ[ļŋ4yŧ˙ $˛ypĘÉoîÆ˛—Æ>'‹N]zãIˇAĘũčOīzVގã;‹oC­čšpÔm] ’7™ˇËÍEáīŪøÁŸÛļzNéw•û?™ØulŌøĮŋđš> †Á­^Éö8-ģšä<Ķ˙ ˇˇŲą]߉ü`š喛iģÕ/$ŲžėqŨ‰ėZķŒúĨķxj RÕ"¸3ĢÄŅ6Q¸īô¯Xđ˜#ÂzXnĸŲ3ųVÍQEQEQEQEQEQEâĨWđļ¤ŽHSdŠōŋŲîÉKÔŽšķ]ŋ…>öf?´-œLˆ8dˇ杯$ē_hR4›-Õą§pæģ-sÁZŋˆ|;%•˙‰ļxÁ;mÆ1Z? Ŧlôß ­••ķŪĮ … Ŧ¸ävŽÆŧSâļábøg  ΏŽįÅ>(°Ōô{ø/bYb†ŅZQœ†ŨÆÜwé\† 7Ôu’ 7K‘’Ū>Ií1­ŋ‚—ÖPxI 杄`õsYū‰â˙ˆ[q“Ëû¤öĒÚŦ¨h{(䠋æįëZŸ xES ūĩÛøÛTĶ4ŋ ^IŠ.ûWŒŠŒôūUæ‚âãá~­s`išL‹#$%‹ģpFKķÅj|Õí´˙ ØXIšĻŊ™üŧ8¨>ĖōüLņAsŸŪUΊ÷‰‹<(…Tæã’zŽkŖņīˆ4ŊIMNhc“QŲ˛Õåˇ7jäŧ~°›Å>!MúĻŠ*íNŨĮ…įųVŽÚ…īĮë-’) a­Ú_™qˇ§ķŽËÆ~ ÕüB–w:žˇiiŒ‚U”EŽ}+Ä~ÕuO¯ k>FŠonžržƒSøŗc┋[Ū' ú×Ĩx'š˛ģÖįAįj3Î~LaņĐ+ŽŽCâ=ĩ÷…Ęîf‡Ī•9ø_ĩKãøY-t˜€îēī[¤_ ¯ FÕĩ]ƒß‚+'Ã7ļ:GÁįÕQš×Ča*/|öŦ .×á~Ĩ{§EŖČ’:Bų‘äõnÕąđwUŠ×Ášl2Ąķ/î%Ųˇ€cš>ŨŊߍ|c#ˇĘ—;W>›z°!†AČöĨ¯øđãđôEIi.öūf睈lž^ ÎÅļUãŽ1\†ŊŨĮėųl-ņ 4¤wN3úV߂4Ũv÷á:­ŦI0ÖåˆãÕ7Ão ¯…5McNū×[é Y]qå“ßņ¯H¯2øęqđõĪũ7Oį[:O’>Eä ũŸĶ=ö׏é˛ß/ĀŊ`ÃōÂ×er;ŽFĩëß ˙Â˛Ķ ƒnwcé^iđÕÄž5A†˜Ō2ŗúrzTŗx{Įz6ŠĸߎŖ¤-å;g)éZw˛Âaā˙ˆ.?˛õhŨ’Ôc2đEeIw㟠ëÚ[øĸØ_XĮ0Hį_á'Œūĩg^7—_´ų7ˆ×ČÍšdt9ŽëÅ^Ö ŦÆâI)Ī'ĻM7F¸}?㖯s¨02ĮlZCųz ãđĢ?Lz…§†äL˜Ļ¸]§88­˙‹Đ¤ æ ĸ-¤väVˆīü3Õ°ˇŨĖ1ųžģ8ŽŗáĄŒ|(ŗŨĢîÍr_–?í_´ę|õÛųšöēōߏÜĮāEō• ÃÍĮqRøOÃvž%ø-c¤É!Ž9áÜ]{7\×ņGĩđį‚t­KšûM´WŒ.$ķĶĐ׎j&!đžRØ+ö3ëq/ÁMhL[`ķdŸáÅt_6CđÉp0Ĩ''¯&ąūJ%ÔVēŨúšˆ„´hlķö|pjŊÜĶ?íj%8‰S ģĻ6œâŽ~Đ3Æē—˙ZnwR1^á†-á}1SnŸĘĩ¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽgÅú̝YyvŦlWiĄoÍrŪøsŽxF)ã‹[ŒE.NÁņzÔKđ¯Wo'ˆfņĩâļxƒoĨvž'𝟊´Qa|O˜…Z9—Ǐū*æŖđGŠĻ„ØŪø­ŽŸŅ’8ą#¯Ąjí´&×CĶb°ŗM°Æ8ĪSWë‡ņ˙€›Æ&ÆæÚøŲŪŲ>čœ.i->Å>…yeŽ^Iqy:sÁãĻ=1X–fĩ´}6}vyôœ’–ŋt¯­Zđ§ÂŸøFnž_íy'@Ŧ fŅ=ũÍ.—đĨ´­ZãRƒ_ģ L‡æúÔü%™ĢáËí7Yŋk™îÔ2ŒĮLjĀŅ~ę6ē!ĐĩqĻŌ@oÜě d÷>žÕ/„ž]ønöI¤ÕÅÄqĢ-Ŧe8=ę߅žęņÚ¨Öüápû§ËÆášŒžĪâŊrßS:Ԑ5ŠÄc Uĩ˙…×^ Ôl¯nĩˇ/fĢą nRÚĒúŸÂ­KZÔlîu4ąÚȲ$"=̐s[.đšÔļ:ž™pļšÅ–<šqÜ`ƒę*(<5â­^xėö˙d‰ˇ˜­‡ß#Ô“Ō‹¯j+âĢNÕŧ‰Y"€ŒĻŅŲĒÆ›ámbëÄđkž!玒[U+o …\õo­w^öÕ/l§ĩ“îJ…ã^Y ü4ņ'‡n.ė´íj´›‡$á~uSééQxOᏈ<%¯ŪÜÚjÍcxeCäsˇņæĩ4oøÂÖDhúŦ2M33Ė“ƒŗ'ĶŊáËĄŨŪęz…ĐšÔīH3: Ē1Đ]urŪ7đt^4°´ą¸˜Įoūl€uaŽ‚šš|â ´ąáĶĒ@šÂđ§Í+žž•Ũézu‡´‹{ pÛĀĄW'Äü\ĶlĩNˇrâk´HJŸ~kŊĶmÃMļ´v¤QǁéVë˜ņĮ…åņnˆštw?grČÎ8•‹/…üVÖgG­šĶizSŊC⯅ëĢ"].ėYÜi{DNFztĒ~!øk­xĸÆÚ]KW‰ĩ;g *mqí]o…tđí¤­zˇ×Oži>č' {\Īü5iŽøßÂāį‰ZG¨ŧ˙<~uč—ĖlŪ;Y9ļb7q§ļEy͏Ã]rËÆSø“ūžæá˙zž_Aø Đņ¯€õëzuô:´vŅXņFŅ;žšéĀĒŪ3đ?ˆü[¤ÛiŗkĢ lLBFö;Ķü[§]Xü-ūΚÔ!K¨ö$r}Õv„ükĪŦ5ˆö–¨ņxNÍöËgĩûĸģŸ|@Öu-kûÄēWØoZ?2-Ģ´0úWĻSYw)_QŠķM+áŪš x†ūm#YŽÛNŊ—Í‘vnp}ZņßÃĢĪßŲ;jĢooj*ų{Žī^ĩ&ĩā\Đ?˛.ęąč˙ØWšé“GYc†8öŗgûĮŌŽøĀ:ˇ„Ž 7zš\i°†ō Œ1?xÕŋ…úĩļĩq ëĢgiŠ6n•“.=vפi–_ŲÚeŊŸšōų({õo­[¯3ņ—ÃŊoÆ­ŧ“ëąÅgo!’ÖTúŸjģŽx']×´Ņîõ، ›e"ŊŽ˜­x>}/Ã2č:•ęŪؘü¤6íZįí<ãĢØøZĩūÍg;Râ2ÍŸNk­đŋ†#đüI$īurÛî._̟Lvēķ?ŽkģáÔžž|`ūu‡áŸ^x*ßLƒR†-6ęŨr]I‘€kŗĶ<)ĻižM!h#ØÁĮŪõ5ĘZø7Å:E´šN•ĒÚ&åļ™P´‘‚zÕˇ,Ŧŧq Z9A:ķ0å˜õ&ŗíü¯čö‘XiØA62Ė›Šúâ™đŅ.m´ˆ-õ€iō<ž`_™Ũģūu%߆ģ¯/ĩŲŌ{ûÕØé|¸Ķ˛ŠĀĶ<âo ËyaĄŨYĮ¤ÜJdS.K޸ë+GøeâOøÎã[Ķ5+VŽcĩÄųÜęzô˙^}WKļÔ[Qĩ¸ÂŽ:{×yā{[Ģ/iv÷ ũĄ Pų99ÅtnzבÚ|3ņ‡ŧayĒø{PĩX/ oķ”îPNxŠŽ>kqøŗûbËSˆĩÄ";—•r}đ*į|­øĻ[8âŋ´‚ÖɕĄO,î$õ7Œ.øe­xŋNŽkŨNŠŖ‚AĸúūŊtūĐüC éiŽ_År„ ûĸģ (ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧįâ˙‡5Īxr´WrņIžH‘ö—[Â>×õôÉõčÚ×M€$ģ†w~ėkĶčĸŠ(¯,ø¯áĪjú†‘wŖŧÍklؚ8[ œŽ}úWIá;RģÔß\Ö­Ėˆü‹h dĸw-îk¯ĸŠ+Šø…áGÄúuΖčnŦ.덄“´‹âũvŨŊ7*0|ĻVCøæ ĐômgXņ\~&×­Ŗ˛6ņ­mTî`ņ1õŽöŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧĢâä> ×ė[BŌ4igYe{ØSūÎ+¤đî˛úJXjÚD–FÖ5Dv`C×cEQEQEQEW5wá ]KÄÉĢęIp°¨[1ũÜgûØõސ–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ž[Į â3Ŗ™<9sŧņeÜÉü@vÆ| ņĻŊâ‹ũNßXe6¸Æŋá^šEQEQEQ\ߋÛÄqé~o‡ZÜL€´‚~āÕÍ|$ņŽąâë=B][aheØĨhŖõŽūü]Ŋ„ë`ņĨŲB"iT7lûW”é^1ņ|? đļą-œˆ@gkxČČÆ{Õ߉~2ņ/‡5› }ĪÎ˜á zq^“§O-Λo<é˛Y# ËčjÃîØÛ~ö>ĩâž'ņ׍ü7âû .ím>Īy:Ē´cøKbŊ­ (¤õ#šuW/ã;ŋXéâãðÚĘcRŌ‰ķœ˛+›øKã[Æ1jGUXU­äÚĸ5#ŊëĶ(Ž+â ÷Šô̍ø}ŦūĪm Ipŗ‚IĮĨAđ¯ÅڗŒŧ96ĄŠŦK*˰yk´WyEÖÎÃˇŽ8¯ņ_<{á=^ΤĶZÚō}‘\šīī^ŊnÍ%´NøŪČ c×÷ŨåļĖnĮËõ¯"—Į>4Ō7ŗžžūĄ6ō1^‡Eåö_îîū%?†?˛Hd1‰FwqՏĩz…QEUY/í"ŊŽÍî#[™䈟™‡­ZĸŠāū x‡Å>ˇ›QĶ--fĶâ@\šų­x’ëÄ>‹ZšHÍÃŖļÔqÚ°~üAÕ|]Ŧj—úgŲcƒ”`¯Cī^“EQEQEQEQEQEQEQEQETÔØ&—vOüņoå_=ü'כFÖĩöŠŪK̉ĨÛŧyÎã^­ĻüHļ›[FÕtë2úO¸’C}1[Ū&ņ5—…ôßļ^dî;cA՘ôÉŪ|LŊŅZÖ}oÃīm§Ü¸TēŽuqĪL]'ˆ|O&‘áøõk-:]F&ŠÄØ!}k›Đ>'Üx‹LšŊ°Đn-ūđŪ9>j˙„ž Éâ™dqĸŨÚYÆŦZâlÜ?‡ŪĢIņ QÔoæ‹ÃZÔmmØŦ×&ÅČęÖļü#ã+?A?”† ›wŲ4~e5ĐÜ<‘ÛČņ'™"Š*™ûĮŌŧ“RøÉŠčšíž›Ģxi­Líōą—$¯¨ëwū5åũ¨ÖtV˛ąģ}°NdÉöŨéNņgÄčü+tąĪ¤Üŧ20Xî61>†ŦøƒâEŋ‡-aģģŌodĩ‘ĖņUsÚˇ´ũbø[ûJŨ!¸™Uē€Ex÷ÁŨ}ôĢNŌ‹ųžíߡjņÉ'Šõ˙øšĪÄ)0€É­äáãoB+Ėäņ‘āî,>ÎŧáâģüCŌŧ9ŠÅeŠi×,dm‘Ë傌~ĩąŦøĻĪCˇĩ2C,ŗ\äÛšfãĩQąņöyĒÚéÄ— ĩa•0ËõŽãž<đ‹Np‰>\ö •<×aqņCG°’Ũ.­ī"%ԑ‘ük°ŸQ´ļĶ›P–e[eO0šéŠãWâd.­y~úJžo|¸õĮ\WYˇasŖ˙jCpiŗĖߞ1\ä=˛Õt[ËčėîcąËÄĢ…“ˇÕÄü>bëĶC\žqךöĒ+ÅØ˙„?WÜģ‡Ų$ČõųkČūxļ×@đA‰íînĻiŲĖVŅ–*žĩë^ņV™âĢ9.4éųM˛HÜa‘ŊŦ­gĮÖēvĄ5…•…ÖĨsŨ2[&íƒŪ­xGÆēw‹í¤kMŅÍ "X$d>â¤ņŠáŅo-´č ’īRšÉŠŪ>¤¤ú ōŸŠZøÕ¯|9isi-ĘŪŠ’91œg¯ŌŊŌۛXÜĘĨ¯ņũÜp|gđûÜ:Eŧ[ŲۏZî#ø•ĸN+„ē´ķÎ –xY_Ą5Ô_jēu„ˇ×s,VŅ.÷‘Žɟ‰ZtiĖöđéŌõâũŲĪOzė-îaģˇIāIƒr˛ô"ĻŽ#PøĄ ézēé—Ģuī/–ĻHŠĢsŒįŌŦ7Ä}/`ˇy&Ž9ÛdWXØûęgš†ÚÕîf‘R]ėäđ­râ=Œ‘›¨tûŲtāØ7ŠŸģúũ+SWņnŸĨč Ģ/›s ƒ÷B.[Œö¯/økãûwÔu‹ĢģKƛPŊų|¨‹*Žƒ&ŊĀĘ­y§ĮB?á\O˙]ãūucÃ~1ˇĶŧ§l°ŧžĘÖÚ4–íäRŸŽ+ˇļÕ,î´ĩÔĄŅŖķ<Āxی×&>#Á1k›=*ö}13ēđ&ãŽ3]eŽŠg¨é‘ę6ķŖ[:īžrņ&ŅŪylôĢû­>Û%ėiōq×Ím\xĻÉ<4ÚíšK}n6ČX˙úĢ™Ōū/čēŧ3›K+é."`ĸŲcˌ~•ˇáé~(šžÎšÚöõ–÷ ĩÅu5Īø›ÅÚo…ĸ‡í†GžáļAK–‘Ŋcéŋ ŸVƒMÔôË­2âāâ>0˙UøĄâÄŌ4+ũ(Z]ŧ×6ŽXŖ%#ší\—Ã_éká=īFēŧt åÅžäoĄ=k¯Ņū)hW¯yeogu–cL3E§¤|AŅum2úø;@–$Ŧë/T>•›qņ>ŪÅ`ēžŅī ĶgpŠvĀįšöŽ“RņžŠš˜†[ĢYG’›ŽÜg8Ēūņ^™âĢŽ4Ȟ8â}ŒŦ›y¨.üolšĩƛ§Ų\j3[ Î`Æ#öÉī^_g~5_Ú&Öá‘|“…nųyÍ{ÕTÔu m*ÂkÛÉV+xWsšė+’O‰­ Ū>‘¨GĻšų/]@CīëŠŗâßŲiúdķe8ŠXPē¯Ŏ•æ uũ"Í ę3Ū5åÛ3mˆ˛ž2kŨŦŦmtëDĩŗ ‚1…ĒúŪßė;íŨ<–Īå^đwÄhZ^Ą‹KĢËŠ§9ŠŨ3ĩGs^ĶáßXø’ÍŽ- +#’'áãoB*ž­âí7Jžfēŋ+¸[[ĻöĮŠôŠ4¯隞Oäģ¤Öā™`‘péjÆŌügá;ß HÂj“2ĐísøÕŨg⇴QtíBæH‘ĪŊGsņÃvˇqÛÉxĀģėķ6€úné]Tr$ąŦˆÁ‘†AÅrúŸÄ Lŋ’ČË,÷­X#gō˙ŪĮJ5/ˆ~Ōôč/gž)ˆ ĩI5ŅŲ^C¨YCwnûĄ•w#zŠ‹UÔāŅôŲ¯îwų1 Íąwđáņ"Â÷â˜Õώē[K[sH"bíœrWĩ{+ø—NƒÃë­ÜČĐZ˛oũāÃ}1X ņ*Åd‰î´ÛûK)ˆŨJ˜CžŸJéuMvÃHŅßTģ˜-˛ŽíĀõöįū6ņ„z—5—LģĩKˆÃ$Āaę×Âëøôŋ„–7SG$Š…ÉX“s7Ė{V߅ŧi x‹RģŗŌĸt¸ˆn—0”É÷÷Ģēī‹lô[Čl).õ Æcļ„e×ŌĢčū5ĩÔ5ĻŪ[Ëa|áßÄ=Efęôm7YM2æÖú9ä“ËŒ´D9Į&Ŋņ?FđíáļŋˇŊN@y'cčkoVņ=–“ŖÁ¨Ę˛H.1äă.äö†~&i°Īmmyeyisq*Å2Ļ ĪC]ÅQERîK¸äļ°¤ˆō1c‰ę=jŨQEQEQEQEQERÕŗũ‘w€Iō›§Ōŧ'āMĒËâŊ^åÆ^2TqîkWâ\'ūׇ0 `šđ.ĩÔ|Z‡AŧŅ ļÕŽ%Ž3uēDyvôŽ?â)ž‡áU…ĩåē[@5Š2۟ž ô ^ØŨøvĶCg-:ŲŽõ#¤W”øsP¸đg‰|Eáĩ;Zs‹HĪ9f˙?ĨzG‰-ŸÃ? îbĶĐųН\žĻšo…QxŽ?¯öbéí;ąÎOŌ´üā-kÃŪ7žÖ.ī-ŒW›™āˆô'ž˙z•xOÅ[hŽ>.øe&ÉF ‘ôbkgãęˆ|dąä2].Ķ߁ÅsŸ^{…žkœ—wŒąîx=k´øŠ˙ vMÅr"ŒŠ?Z×đ+Ēü.˛qŒ 3íü5Č|Оk"īrÄúŠŠáĢéŖũ õx-75´čŪhė¤˙?]ģaũĸ tÉy-”ļNßŌŽĒŦš˖7Š3ųÕ߈ÖZŦ‹Ą^č.ŠÚÅŊ ųh¸įõĘi>4žēņŽ’ū*ŅĘö'Ûę¤n'ą­Œ1-ī|/`Į$ā}sˇŠŲøÛk? Õ| Ļ)bÚc+/â=åÕˇÁ8 ¨bIH=ąĐÖæ˜ēüūƒK´Đ 0Ih§Á9^Ŋ+†×ôøWáŌīˆ„Íuąö>q\é^ŖáÛHOÂ[]ã:x$Áųk‘øÅĻë>éš8•ė&Dē‡?Þiõ‰ãk'ŜŸú ¯;øĻĞšŧ* Í3/ĐzQđ˜ĒxãÆąĢŋi °åǟ‡ãˇŌū)jí¤ÜOŠÜĘXK?ģ?Ū4·ŊˇÅ_-†ož@åVΝãRxzõ¯ž>jŋh Í[c$ũÕâ“ãL6ëâ Íą|æš]Į<ãpâŊšßū=ĸ˙p*–ŧCâŠę?•KâNĢ{ÁŊ8ŖnŖ‰&|˜ŲéV6éđžŪŅhŗ€Ÿ–¸ß„ˇ^Ö,î\Ë›ēBĖ3…*Nԟđfk{/듨ōĄŧ‘‹mɝVļ¸ŽîÚ+ˆŽc‘C)ö5į\¯ÃŠPUŽ×Ķm!ļøGHЍtÍØĮr•ä:.ŗ¨§ĀũRō[¯%$į„=qú×ĨxZmqžØYÁŖG$rڅ€×Čj:wˆ<đ{U´š•PĩĪČąžã1ŨëŦđDښø ÎÎĶDķmäˇĀ—ÎQ¸‘É5/Ãë>Ōõ[ `Æš’$ģh9Ŧ/ƒĮ^ņ5ō*—M8åy=*- ‡öˆÕQ3ˇČcĮ¯ËÖŊĒŧ‹â厃>ŗŖžĨ{tˇ¨Û`ļļ\ŗ’}ëâEÍŨƧá/ĩ[ @ˇ1”BŲ“^ õ¯FņŒÖ×ß5ŖŖ4Vnũ†ÛĐÖoÁ¸Ŗ˙…o§ ą-’~ĩĮxOügņ ’¨uŒļ1Œ.EtŪ+đ†|?āÍZ7™Ŧ ž“t˛dą-œ€+”ÖZy~Ko´‚Æ5_*âåŋy'Í×ojī<wj~iöO"´íd\DĮ’¸ŦŋMŸ‚õģ‹XDrDō6:ķƒYŋd’ęĶYŧ¸“ÍžkîĮ¯J΀ۯí(RĮî˜19;kÜĢĮ~>jw–úF™§ÂJÛ]Oûâ;ã ˙>•×k6–íđĸxXm‰l20?Ųâš/‡7rŪ|ŊûagōRDV#<{U΁!$đTųT,ˇoŽ9ŊV¨kc:÷ōÁ˙•yGĀ H˙ąĩK–U2=ÁB}…VđÖĨ%Į~ŌŲ\C*–‘O@p*‡ZÕũΊ|IĒ6}Bé§Ųō”POšÛąŅüI/Ũõßė™,ôšŖōį @íÜz­qk ūĐļĨQžÎ\íĮ‹d¸oB–ė.áךԸ¯Ĩ[Y|$Û jϨہÎr+¨đ¤ˇ2ü3°tr×&Ë*Ųäļ+’ø5fŖëw’zײ,æN¸ĀõŽkÁūĩņ–ĩâk;ĩ‘tČî6ÂČqˇæ' úWšézt:N—m§ÛįɡAgŽZeW]ŽĄ‡ĄãHn>9xŒÔÆ`1RøĪŦ›ûŊ ÂÁĖoq†v‡`ĀmūuŌxļĪ_ņ‚[HļđûBÅËo4|¸Ž#âÆĢ§čžĐĩ"ɒž|däc?ÎŊGâ´|0ŊĢōچSīŠO„Š᎘š …`qõŽCዃņGÅH# ûæŸņÃ7Ŗ}āŋÄ7ÖŠĀOãīn_˜Čŋ5­ŸŽ¨ĢāëlsxŠN9Šŧma¨Īám}Ķí֎˛Å ˙ ~uČßøÖkícJ‡Åž–Î[{¤hįQĶĩīK*4hû€WÁ\÷ÍIEQEQEQEQEQEQEĪøĸã\ŽČEĸiņ]ŧ Ģų˛m pđGŒ<#Š\ÜyzkEtŲtķWôĢ:˙|W¯xĒË\k:-0~fķWüwđöķÅúU”Âá#Õ­yūígkŧIâŸ%ޝ{nˇ0cČHÉŸVއĀūÕôieēÖeį1ŦQŦ=ЇWđ;^üGĶĩøĐy1)ķyęŨękĩŊ´†ūÎ[YÔ4rŠVfŧËLđ‹ŧ=Ô>’ÎįN™Ë¤w CFÂēĪ čzŊĖēŽšv&Ô&]ž\CÄŊp+Нø­o-įÅŊŪŪcÆ%Øãø[,Eu—ƒüEãai¯!ąŗpÍåōfĮN;VįŽüū$đœZUŒ‰ ېŅdqÅrZŋ„|oâ? /P6ą,qĄ$ČGr{WQāÍÄg‚¤Ō58āķ#ˆĮ–ŲĪķ\÷…<5âC2ZØ& / ’EIōßëÜV΃|{Ŗ_jŪ"žHŸZŋ,Ëī•eÍføļ_ˆÅRgĢí!HUšƒâ7…ŧ[âëģHí­­’ŪÎQ"3Hrä{cëWĩoøŗTģĐŽ‘bļšą…ŧ¯ōąėŋOs§xÄ÷6vzŽ‘¤J˛Ip$Ü_iČĮ‰ãß øˇ\ņ~{cĨÄ֚k†Œ™Gī?­ø÷Iņ‡Œ<.šd:D0Uß3s‘ÛüúVˇ†ĩ|=˙„o[˛ûđĀą¤ģƒÃ¸Ēš$ū=Đ´¸ôCĄĮw䯕ߜĒģGsŪˇ.<>ŗāÛ­+Y¸3Ũ\eËöFíjÆąĶĮpåÚãĖÉ_Âą|mĨøĢOø§§jPę­îî’8!ģÜôë^ėģļ.īŊŽkšņÜ:Åį†.Ŧ4[Dž{¨Ú&/ PŠG_zâžčž4đ‡eĶ[JļrY¤BĶ`äöŠūø[ÄZ‰uËŊVŌ8ĄÔ‰pVMÛNO­føkÂ^,đoŠuyŦtčn­īĨ,ŗ´¸Ø3Ū˛›Áž/°ņÖ§$ˆđęĒî3ōĮČ$ķî vZˇ‚õ-/Åū&ĐĄK‹ŋ(G< ûwôį5Īø×Á^2ņ-ū›Ŧ4æę 7­ĒÉōÄČģ“^¯ĄIŠK¤BÚ´ æ0荐+BBË”]Ė zšņŨ[Ã>/Õž'YxŒiqÃolV2†oŧ žj÷Ä˙ ø¯Åëoie§@ļöŗ DĻq—ãĻ?ZŪ!đmΌümk˛Õ-pŅۂ˛ûÕ{ wĮVúwödži.ã_-nĖĘ#Į÷zęŧ% ?‡´Qo<Æ{šĻ¸ô.ܜ¡ëČ|uáīøÅ:]ũ™?˜™œfP?†qVū iŪ+ņ†âĶmôE†BÂFvœ|¤v­öđĖÚ˙ØôMRßė×"ÜGÛļ°s\ôwž/Ķü3˙Ä“ÜĮŲ–īpíÆ7WWā˙E០$ĶJŒg“Õ˜s\…áhēnĨáh´ÔûåÃļ™>UŒõã×ėvÉgg˛}ؐ üqŋŧ9}⟠ÁĻXÆYžå ‘ü ŨĢ!‡‹áđŠđ˛čĨäō~сĮ–#Æ7}}ĢfĮáåˇÃĮđÃ0&XÎųqügŊbčSøĶÂÚbhØbøB6[\¤€.ŪÛŊ+fĶÁ—Z…5+~čÍwŠ7™)+ū=…`øzOø6Äč_Ø?ÚPBvÛ\¤ĄF=ë¤ĶtÍvĶGÔu bŽmjüî0—Ú‘Œ`.~•Ėx Ã1đÎĸgĩ˛š;Įi‰YyVôÅV°đĮ,<qâ§°ŗv¸_-áIūęņ“œs^¤”†9åŸ<­jž.ĶŧIĸ˜fšÕ”ų6ŅÁõĒž)đ—‹õæ°Öf†ÔŨÚJŦ–Q“€;ũE\Ôt?Éá Ŋ: ;wēÔ÷ĩÁix<÷̟tøcïĨ_éđ~åKBë0;Χĩ`xKÃ~4Đ|g¨ëw:d%ķč“}ŅžßJė~&øNīÆû ¤.#‘fU'†#ĩr7Ūņ§ˆü4;ømŦŖļˆyJ“3/LãĨXđo†üU§Ã-ÎĄaKˆŗļ‹Ėę;“Z ŧ;¯čˇšfąkŲ§f“Ėģ“ÚŠé^ņõ{ë}K[Ë×턁GņŽtx7Æē?Ä3â{k(īd+ķ|āXr+Ûėdžk(dēˆE; 2FvŸJåū"x8xĮ@û4lęķ!cĶpŽFKŋk~˙„hčR[Ęëä=Û°„čZēK_xĀ1hZœw.c1Éšöõˇį\˙ÂíÅžŲwē\b–_2Iϗ5ëUCZI%Ņ/RŨ#@áGŠÅy,üGđúÆHæŅĻŧŠøųĄ`ëžÆēox>î×\ÕâĒ[x{SņˇŽ,üC­iīag§˙¨‚B7;{â§ø›āŊ[\Ôô_FŽ9Ž,>K6܏c\ŋ4øģGļyô“ˇ•BZ+[ũļ5ą¯i>+Õ4Ī ũ’ÉíoíOīrrhã?ZąŽxĒĘëÃÆŪBëæŪ ŒH¨ū.i~)¸°Ķ Đéā@ÖØüŲŒ×mā[MVËÁöëLÍ~2o9aŸ_zččĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŽY<¨^MĨļŠ;GS_>øģPÔõ‰vš‡uE‚ĖmmП›äWšč:Ģk:LW¯k-ąųg(Á§EQEQEQE‡;Håôß 4zķëZĩßÛīW+nJáaSũŅëī]MQEQEQEQEQEQEQEQEQEQEQEQEQEQEÆ|O:Đđ]ÁĐĆãzų‚/ŋå÷ÅdxoQđ*čöéqŒ7Aœ.#÷wÎyÍfę:n—âixrÔ"YÉæŨ]ÅÔãĸƒÜ׎QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEF}Lš}ķX[ČŲÎZ0jĖ6ĐÛ&Č"H×Ņ-QEQEQEQEQEQEQEQEQEQEWâßx§Jž†=ÃßÚķĘ_…qw˙u +WM*÷Ã-ëžY—šé]Λ­xĒú–oCl6nZãqjæ#×­ü3 Ũj×jīēî*ƒ%ŊĢ/Āū8´ņƙ%åŦAåžÆGõŽĒŠ(Ŧoø†ßÂúÆ­uÉ8Š$āUxÎÛÆúD—ö°IŽM…_šę(ĸŠa‘‚—PÍĐÉŽ+Į×Á.Ļ}*âx'C…ĪĨtú¨ēևgŠŦf5ēˆHöŽÍ*Á“?ŨK ŽÁ?Ŧ|iŦ^iöö˛Âđe”ˇņ(8Íw´QEQEQEQEQE”Šęã*Á‡ą§QEQEQEPÕõĶ4šŽŌÚK†ŒdEųš¸Ī |Q‡ÄŪ#miW6˛Ēŗ1—c~ĩčUÅ|Aņü~ļ´‘ėšåŽhļ€ZétMQ5­ĪRHĖks#u­ (ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠų§âQŨņēÍv¯ $ôų}ąˆ#bũŅßÚŧ‹ãžeĶôĶ#!RģēæŊ7ÃÅ`đĩ?u-ԜjįėŧGāKÅqŀëm–„Ģūuš­ø¯Iđû"ßÎÁßĸF…Ûō›ãVģŠÖĘņešE,ãßŌˇë+ÄkģÃz‚ã9†? ķO€‰ŗAÔ3÷žŌĀ×yŦøßGŅn>Í$¯=ĀhāRåGž:UĢ?iWēDēœW ÛD3')õŗm>$xZúėZÚęK,Įĸ É4ø>"xbæđYÊÆ÷%öyCīfŽk~-Ō4 Vۃį¸ųaK9üKŖx—Kׄ‚Æā4‘ũøÛ†_¨­Šk篅Ũ‚¨ä“\Üž=đėW†ØßĢ8m…”eA÷5ĄŠxƒJĶôôēšŧ‰ ŸåŲ¸c^'āKŽ|QiâČŊēe]î2ËθמxSÃg…t¯˛iJD.w’OŪ­‹  ¤Ā€FÆāũ+Ã>júfsâ)¯ŽV0×LŠdœÂŊ—Jņ—­ZŊŅÚM ļĶ÷~ĩaãß ęWRÛ[jq4ą\0_ŌüIŖëNé§jÜ4x#gmTēņˇ‡līūÅ6§œ0!OĄ5ĢsŠŲZX›éîcK`3æįåŦģ_øvķÍ6úĩŧ‹ī‘•˛{úS˙á)đíŨ´¤jļ’D÷˜|ā{Ö…,ükuw/†ÚÍĨqžs {úwŽ3Ğ7Ō/~%iV&ũRĘŅd7._O§Ą¯DočZn…ĄöČb͘‘ƒō“ĪOÖĒZ|AđÅķ:ÛęĐ9Kˇ=u4ļ^>đžŖz––šÅŧˇ,jŲ&ējÆņ Ū‚–-e¯\[%ŊRvĀqPøVÛÃļškĮáĪŗ›P˙1„änúԍâŨoŪČęvūz}å ŋZŅąŋĩÔ­…ÅœË4$•Ŋ2*Սâ+l žŋ=Ē[\üģ.(z‡Ã áÛ-Ŋˇö|d–h[*~i,ükáËųdŽßUˇg%†ücwNņĢ9M?RļšaÔE j͍Ž."ĩˇyį$QĖĖxŧ‚įĮÚ6ĄņfÖdԕ4ëfV”ŋČîOAZ?¯-õ…Ō]Û8’&•õŅøS[ŌôßčpŨßÁ †Ō<|gŠén/lŖ°k™įˆZ•æBß. `xf?ĻŖvūku7Ī?ŲÎI˙ëu­+īhÚmęŲŨ_ÃíüšZˇcĒØęRL–w)1…ļɰũĶWj)įŠÚžy8ngc€sļŪ?đŨÕīŲbÔšmĄļŒ}›ĨljZņ‘iö›ë„Š.ŲęßJĖŌüm kdĩžã´R ŦZzޝcĸY5ŪĄp°Ā2yÉôŊgYxĪBÔ<Ąōī‘ÄjŒ0Åž•§Šjļ:EŖ]_ÜĮoū)ŸŖøÃCפ1Ø_$’ā<7å[´R =5Íø`Ū­Ÿö´{?–žwzUØ|WĄÜja‹Rˇ{îę})×^(ĐėŽÅĨΊmÁ˙–lüÖĸȏ‘X# öŽPņ·´Ë†‚ãPO1~øAģo×Ōļ­oío-ę ŅáaāņYPøĮ@žæ[tÔĄķcČ`OLuĒū$ņn“Ŗørkų/Ŗ $DÁƒ“'o–šĪ…:í‹øjÖÖãQ‰ĩ ‡y &įÆsũkŌk[ņN‘á։uKĩˇ2 ĻáÖŗĮÄO ›ļR/#~Ā{“ô­kMKŊĶR†ō3jŖ-!<(÷ĒÖž/đũëL-õ[i+šØ8Šŋ§ęÚ~ĢKaw Â)Ã4mœV}ĮŒ|?muöiu[q.víßĐ֕ÆĨeibogēŠ;`2efųjŒ^+ĐgŠI!ÕmdHÆį*ųÚ=h´ņVƒp`´ÕmĻ” ”GÉĄã/针Žĩ8Cü˛kVÎúĶQˇķ­&Iĸ-Ú,Öæė‹Ü‘“ķfŊâÛĀú*ÛÅōܓ´d‹Š9˙ĮĢĖ~4iöŽ•˛2RY‰5ė%ŧ1§n`^+É5 u‡öĶĖQĸĢF2ö<Õīęē§…ŧvÚÅŽœuG„#ĸ ÆáĪđ×ēĒ„UU 0C|Bé÷$ô7ō¯øĨ[ŨjšõėŅ+2ÎQA9íųĶ´;÷Ņ~>ę4cw§i]Ûsœ~SūÁˇģũĄnlĄbĩ†‘`0Į5wÆ:$˙ ėĩŨ~Ōį/Š0ŠA´CīVŧ/} Ađém.­.ĨŊē„ŧöW2Cßv+GáAŊÕ<%¨húŊœĘą3,BuÁ+Øs\ßÃŲ,ü-¯xŖÃēŒQl‹2Į¸‘č={q^āī Øéūs=”&[ĀŌĘ ƒ×$¸_ƒƞ/ņRlHJcN[úRcéˇ?ĻŗšÂ€[îhŲ\žõëŋŲú]ƙ.oąˇL~R(ڇĢÂūųø‰­øoPŠ-“™cáŠô/x MĶfŊÕeļ…î&ēw‰‚đ‰Ÿ—oĨz5sū2Ķlĩ ę?kļIv[šRW‘Įjķ΁ņšøqĒ-ģ‘)ž@­čv×+kã›IŸ@ņ.‰p“aö¤L’IûŲõ÷¯UøS-ĢøÚ;K1_~ũ#âg͕ŽáQCņÅąÃ¤qĖQtnnåT.-ŅŧSâÍŽtŲ4BŪ|âDÚ$éIâĻĢņžÛIŋŠI´Ũ?æXK‡mšÉ­Gņ*yaņF‘}áí>åfˇoßyp2îīÅ{ŗ™-!vČfE'=zTԄ0FExÅŨØøûÃđXÂļŌ]8Ҍķ~ĩĢņ‡DĩĐ<)Ĩßéą­ŊÅ´ęÔaÉõ&ĩ|GáĢūÜ]Ën’ßũ˜ÎĶ‘ķ™ÎsÖĄŅgŲĐģÉĀ‘˙ v‡˙ņĐ5Ík+ČÅö„Ŗzæģ=vĮJ“ā˛]˛ÅvöրE69_§Ĩiü1Đ´K éŧļvąj'° ŏĨzEaø§N˛ŧĐ¯^îÖ9š8ieÉv¯*ø Z^iwڅä (K†ŽqžŧS<|–ŋĩ˙ 4a´ëĻb!?tYžđ´w_u:5`į‘Ũč Ã?Ĩjjē÷Â˙ ø‚ö+Ė›éBÛė8ōԟį]_…|1d˙ aj’Ouiįģ°Ë3˛äœúÖÁûÃâojē­ū‘ģėQ'ͅíųVO€ĶOđŋŠŧI j6ņ˜”4‘ŗŒå=+ĢĐôM/žŧņX'Úfî•SĘ¯ŌŠ|ą‹XĐou‹øŌyîg`Y×$ Šā]Zm3âļąáÕcöMåâŒt_ZČ:­ŽņwÄ7׊ÔūėŒ™Ęēŋ†š†u¸fņ$v°Ëw<ŊâEúĶū9ØÂūi–¤Š‡ÛČé]™ĻÛj? lí.ãY"6@Ũ°ĩæß|9g|5™ŽâKˆb¸hŅn{á´maņ[ÄZ}ŠÅŠ–">Ę~•?L×˙|9Ļ]Œéģ„ģOŨfŊQøˇØø§AˇąŒD/$M\y‹‘Á•Ũø+áũ¯„ooīĄš’WŊ!ļ…Œz+ļĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠâ|cņ ŪĮgũ›wy3ŽīÜĻBׇx’ãYņ7Žb×íŧ=ûŊ¤ĒÄ͝tĶ‚ūđeÍÕå´Ķ^^ŗ3Ãî<ôŽwá-õī†ĩëMCGž‹ûBëtla8SÚŊŪĒę+#iˇ+ov‰‚¯¯âū{˙‡Šëö¤WŽdâŒļ=Ž:U˙ č—Z§ŒõO^ÚÜDˆŲmäB$uŽ=N+KÔuK_‹7ž(ŧŅ51a0ōÔųž€tü+Ô|sáĪøN<%¤˖EÅæ/!ē€}+•đŋ­ü5 ÛčēŪ›sõšųc÷ ÂB8ʐ+ŽđWö•Ü7ZŽĸ’Cö§Ė08ÁDíĮc^ãOË{ņƒHģļŠOŗ\ᮊƒ‚ąúņ^ĩŦ_Ļ¤IqäK*ĸíÄģ›§ĨxįÂgŊĶ|cĢ=ū—{n5wBŌ@Ę:÷'ëZÄWŪøÅ?ˆ&ąē¸˛žÜ*41—ųŋģÅzƒm'‹Lžōæ&†kéÚáĸ'îį§é^_ņoÂs\xãEŋ°Ė2]ēĀøfŊĢN´uŊĸäˆc3VĢ•ņÖŗáûģFŠâ[‹˜bHĸfÉĮĩyįÂĮžŌüĒč÷:uä7dI4dÆGQĮ>š­]'THôlüi JķÂĘЏŽ5ĢāÍ2ãÃŪÖo­midžŌЌ^Ãõđ×â‰5ĪÜiZõąˆ˛E1”ÚÅ{qŋõøôŊįOˇSÜß[ȑ!gÆ9ĮJäžß> KĸŪŲ]As´äÉQŠŦ˙ÜŪÅņ‹TפŌõĶŽ˙wĻĮNĩCŎw—ō3ZMŊūΞÛÉä7$ŌŊÖÂí/ėaēEuYW 8ÁfŧIŽĄá/‹úļ­qĻ]Oo{!x#/¸ņĮĩKãIĩwø.™.Ÿ{yŠŪŋœUbg.ė…ČVí–ŋŗá´Zcé×ë}ö/ŗy_glīۊŖđškøFæÂķNŧŽę)RžQųŗĶϞ~BÃĮ:ũÅî•{j2‰Ū }îIükOÃÚŦú|WƒÄšTŌØ}ĻFˇ™ĸŪvį¸ĢžŅ|qĢëvXéRÆ#‰ ŠmĻŊ>ŧŗâĪ‚Žu‰luũ= ˇV¤Â2(9ĀŠdø….šĻ˙dčúeúj’gˆĒÂŧXúV<;ŦŲøŖÃ×Ī ÖĨĻŲ ųÎīīÜÔ>9M_YÕô}4{´Ķėæ`L€z:VĶYø ÅĨęV֒´¯s-˰Č1ļ3÷TúvĢ:ô0øĩė­âЧƒRY‘Ūg‹o•´‚~nõ›â¯]økâ §Œ--žâՓËģH—s/{ëoPņ›xšŦ<1or×r°ß<°Xš;ģûTÅqxjÔøvYâ˙ƒ`āš­_…úŊūˇāKŨI™î˛—n¯ƒŒ×g^ã‹ë­_Įē5ũž‘~ĐéŗbV0žyíSüYÔī|OáëM?OŅīŪO1e|B~QīZ~$ņŸá˜Ķ Ōĩģ¸ĩō‘Ũ˛§ųŊ*/éí¯|1¸đüÛ\¤LÉ\xúŅáĪĮā Â;¨Ų]=ũģ2F‘D[ÎĪB¤U?økQŅüâoÜ[KĄŠ,’Egzg;F=y̰_ŲKáČíü[áŲZüÄ8—ÜqĮĖ?ĪZ†õž ęQÚÉįĪēXm†w"îČZĪđíôŪ"Ō|9áË[Kˆæ°ž9¯Xʄ Î=ɯlŦíuļh7ĖN…‰üĢÆ~ø‘t?ŪØe6rŨ7•$H[ ;+[ÁŪšOë><Ô ’+Y6Ņ”;Ę˙{oQŌš˙ xšm+âvĢĢ^é÷Šey„‰„ ĪL}+Õ<áæņwƒ.,á\ĖĘ$ˆZä4ΈV:/‚cŅnâž-ZÖßėÂĖ?ZĶø=á+¯čŨß§—w'šÉŽU{XŋRdwÚ*Jc"ą¨$âŸE5‘[”zŠPŒíKEFĐÄįsFŒ}JĶĀ`p) )`ÛFáĐãšuŒĒßxõ¯+øĢņXđ~¯¤ÛiąFa˜n™ÜuįsڝĻj‡Æ˙ín`ųôũ.,ŗēeaØûWŠŅM(­÷”¨ *ƒ=)JĢuũEeø‡T—GŅĨ쎺’îa…Hc$šÂđ–x5 k[F§zŖ§Ũ1Âũk˛Ļ˛+}åę)h§*ЍúFUa†ũh€0)i¨ĨĸŠ)ŦĒà Ą‡Ą Ō–’šąF§*Ѝú(ĸ€FČϤhŸq~ƒÉxģG×|Eu—i:Zhîŋérŋ ūę×M§X[évŲZ HaP¨*Õ4('­:ŠhU Ôâša‰›&4-ęV¤Ļ•VûĘÔRâš#EbĘĒ ę@§×9ãM^ÃMđÕúŨŨEÉná˜ĮįŸ/,˙áģĩšh|öš%#r7c…{&ÕÛˇ˜Ļx[ĸCU'JŦ­^Q+[Dd ÍN!U$ ‘ĐâPMkoq:äĮ÷”•UQB¨€SŠĪZ`  0FGŊBŒ(z FÎ͎Ž8¯Ņ…ŽŊâ­UV<õëZ"ŌžA ŨƑŲų’!ōÖžÍÛ÷ާá՝Ũ‚4ø/C,Ásĩē…ė+¨Ģ÷T §QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEĒčzfˇ ÅŠYCrŠw(‘sƒRiÚU†“oäiö‘[E×lKWhĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˛ĩohúã#jz|%ČšÅRĶü áŊ*ũ/Ŧt˜ ¸Œå]1]QEQEQEV^ŠáŨ'YæūÆ)›ŗ2ķQÃá] ŪXæ‹KļYcGŲČ­|b–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠÄ“Åš<^"]އöƒ.ī/ÆļčĸŠ(ĸŠ+ Ԕl8g*vūtŅņ7Â$áuxˇmÂkŦ‰ÖX’EûŽĄ‡ŌŸEQEÉˉ܂B‚p&Šéē­ļŠŊšlĄÃ+ Vnĩ–æáÂCîv=…aéž9đ-…†Ŗ×-œ"×EEQEG4ŅÁË+„Y› ‡eãOj7ÂÎ×R†IÉĀPzŸjč)’ʐÄōČÁQXžÂšWø—á8ÎVˆsĨ|JđĨÉ>N¨ŽģTšÖĶŗøYĨŲxîO‹Éši%iDņ–ë^‚H$ā{ĶRDeXîœ×5ãũ"ĪUđ˙Ú I 13ÆHåN;W û>CˇÂw’p?Ō âŊ†¸OøÂķKņž‡ĄŲųlˇ{šn2@˙9ŽîŠŽhc¸á™â‘J˛0Č ×ęē=–—ņûL†Ō%Mˆ8Ī<ãđ¯~WGÎÖ CNχBÅC)aÔÍ:Š)"G÷ŨWęqNČÆr1ëMYcc…u'Đ}3͏8šéŒŌ‡BÛC}3NĸŠhu'>™ŦOëGÃŪÔ54xÖh!f‹Ėė?:ąáģ۝KÃzuíØQqqn’H $f´žD@7ēŽ}N)ĀädtĒ×Öļ—Ö­m{rĀ˙y$čkÃ<+§[Ų~Đwđ[BąAlŅĸâŊöŠ+ˆøâIôVŅí,n’;ģËĩB™ųŒ}ĪōĢū4ŌėĩŸß-ĖQĘRer3ĩąÖš/€ą„đ4¤ÃfŊVšĖ¨2Ė÷4++ŽT‚=A§QH@#dWņ DĶ΁5sŒÄ,āǁέs?tģFđKÍ5¤O1¸aŊĐEzØFR+ĢũÖ ô4ę)Ŧʋ–`ŖÔšE‘w+) ĶŗšZ*ŧpZÚÉ#ĸGJräq¸Ô’ÅÄ-¨¯Œ2‘ExĻ‘§ZX~ŅWPÛB"‰mˇ*¨Āh¯nfUûÄ­-RŠdŠķŒúÕՖ‘§iļŌÅũʤ„w\ôĒúÂë­CÅz6Ģkuĩ•œQūéFGņ^‘Ēi Ö÷Ķ7ΑđfŊÚÎfšÂ ¤YŖRŲėqR¤‰'ÜulzĐōĮ7ē¯ûĮ …ÊŨĶžĩâ˙ôģ8õß\ÅmM-ÎĐ`ˇ#­z/‰ü)oã ĮĻ\ĘđĄUmÉÔqVü+áģ_ ø~ "ÍŨ∓šÎI'­k´ąĄÃHĒ} SÉ 2NФ!ÎN9ëB˛°Ę°#څuoēĀũ /Jˆ]Û4žX¸ˆÉũĐã5!u^ŦÔĐH0 ô9Ĩ$(É8ĻŧÆķÅ÷2üeŗŅíoGØ#ļŨpģ†Üķßō¯LŽXæ@ņēēžŒ§"ŸEQEQEQEQEQEQEQEW1ãíq4 ]Ü3my•ųx§Ä´{¯iMĨOįÜÚ}ķåžũ{W­ü+Õ˙ĩŧhZ@ōÂ<ˇųŗŠĘøŊ¨K§Ûi?˜4†šÅîÂA+Ž:W4:6ĄĢčx_UÂˇ ×6†āöū-ĻŊöŠņ¯ŪioâK}Bî¤+EėĮĐtĒIámNķáēø’įXžMF+o6!ģT(īWĩ¤x[K¸6ķj[LͧTCũß~ĩ•ã…—áÜz~ąĨę÷3‘"ĨÄRĖ\0õ¯ZđūĒēŪ‡k¨ Ā™b´ë'ÄēÜ>đõæĢ?ܡŒļ=Ojō¯ZÉãí&ë_×uŠâ‘äak 3ėãĻ­iü/ņ5Îē5Ÿ ęW-4ļNŅ$Āōɒ3\ˇ‰´û˙ø˙OšīTÔdđôīÉ3‘´úéšíŧá ŠoĨÕîõMEŦܟ˛ÛK3垄û×ãÛ ˙ |EŅ-4BųĸŊevŽIËÛ°EmüD˛ŸÁ–ž&Ķõ Á4ˇ(.#yIFœc ­oøūh´=ÛH¸H¯u’€JÜųjzšŖâ›9ŧĄÅŽéúåŨĖŅƟhŽy÷Ŧ€žpŨ?JÖņŸÄoė˙iˇ`Íū­„ˇŨüûÍøfšÁ7€ŧ5eĒÃ{Š\ę×ģ¤yŲ—q9^˜Ĩø­ö­_áļ—Ē]ÜK JąîˇčĨ¨ŽãÂÚ,žŅdÔ/u‹›ËqhŦc‘+˜đÄrüEļŋÖĩVH­Ã-ĨŧRų~XÍ]øâéRįÄNĨwį&’KG3Ÿ™ãäÔ> I~ žŖ­jw!cĒG!UGCŪą!ŌžØj—š•ŨŽŠlĄdHäášã>õ§­jÄ7ÕäWŅZų°Įü Ÿ›ûÄ×OāŪø‡áėzĩÂy—О)Įņ˛æ¸ ĨΌôũjû^šúÎúa´ÅØ*ûWSđkÄ:†šá˨õLŌÚÎŅŦŒyeĩ‡bĨŋhëėäâß#âmsN¸øs¤ø‡T¸Ķí ‰Z×ËrØ÷5Ģāãy˙ Ĩč}A¯Ŧ˛ YwįŽûŊOŊz=ä¯ŪøīâMĮ‡ ģž×IąÍ6֕õôŠīõ§øãŨ7JËĻę)ŒLŲØŲėJæž)ø~M6ķOģšÖ¯.>×sˆQۈIūīęŪđíևk+]j÷Z‹\e3œėč+§ĸ¸ßŠNáÖŦHyXįĩpŸ gņ<ŪDŅFž"I]s995ĐÛü4žÕŧIģâŊM/%„æ+h—ŸãP|JÔĩˆuũHĩ‚sĻ\8YÚ*qĶīƒ‰ĢNž ø‡ĄÁ¤ßĖÖ×Î#šŲå.õæēO‹úšđ­Ūą ÕÄ76ą‚Ą$*¸Īzá4í?Ś×Ý;U°ēģ’ų]R$GÚĒ€ōO­iüY7{<ˇyķÄËæ˙Ŋ‘]¯Äģ9Ā“_[Ū\ÛMiô09\œĩ‚õE>Į~KĢåŨwŗÕÃØ[ÍŽxûZÔîîėĩX f™”š觡Û|=žēņˇÃU]FyRgŨKÚüw¯:𮝭ŪüJÕ(xÆãBđͤvLīR*ˆíüŽMs^ Đ´}Á?Úļ:‹vŨVC0¸%ģņšwНGŠūĮâˆī.-omĸt.˓œãļi<1Ąj:įÂņŠŪjˇĢs Đ˜¨]šäúÖīÃ]BķÆŸŽ-ĩ+‰•ŅĖz?×5æÚW‚Ŧ¯ž,ęz šģX#Œâe“įĪOį_@øwEļđū‹›i+Ë9ŨˇZ´QEQEQEQEQEQEQEQYúļącĄØ=îŖp ˇ^ŽkČ|CãũÄ~;ŅŦŖģGĶ`s$’ŋ ģ ô]xvûÃ7–íwdŠ4%Q÷ž;ņ˙‚Ū/˛đæĨ¨éČŠŪV-÷r=ũëžø‡âģåŅĒę]͏#]ā€ÍøWâī xNÖ mkÂ×Κ¤ŗ¯•œ’}:×Ŋi"a¤Ú‹ŒųŪZīĪ­]¯)øņ û#JĸiĨR#Ä:Rü0ũē%Øųaw ŲĮĨVø=ŦéÖŋŲeēŠ7ˆ°`̓žk'ā–Ąø‹Ä…æRōĘYqũĐIÍH—֏ûCIp'ĸ6ÁCƒ‘ž8­ŦzĪmį͚Ô4Važ]ĄwüúÕËŨxĪÅz^̍Īom€ĪŲÄĒÆF㓃]ˇŠ%ŠßÂwėd‚ŗíÅy˙Á ģcā{Ą5ÄaÚggXß nmĄø™â]ŌĻ$”„bqžOJ}Ėéífü¨cˇÎį8Žßw^Ö.ĩ›ívVšk‹îĖvėNGq]Ŋāū$Ŋ´5•Ë0XĸI…BÁą“Wū4‘¯_čZ%‰ķn}í°įjúšÃņŪ†tOˆžÔ/Ã6"GŒN`c¯nĩŨxžËĀ–z+Ü]A Æá˜Ą2,Ũ€į­uŪËđŊˆûŲ‚€ˆøĨn×)ņH—\đ&§c†•ãÜ ÷ÁĪô¯6øIcᛏ ĩ–­bú[zĘÜūUÔøN]ßÅúœš&ooaa&Ŋ^?÷sŌŗŧ]ueņ-5 Æō$ŠÁ|Ŕˇß”ĐUŋ„>3:ļ’ÚFĨrŖd|­Ž@,ĩ‰ņjxíž%øRâFâ›ūܚŊņ˛î_ÁVļdO=ŨÂQs\īŒŧ5qŖYø2{øŒ–VacēÁûĩßjš‚SÃ΍Ũ[¤Öå7„iØî=¸Ípß´‰—GđĻģefööÖŦ°m˙R„ƒøt¯KÖüMáØ|&——rZÜ'’X†,Øāëšáū*ÜŨßü.Ņî¯-<‰¤¸Ú5ęĮŊtēôēåĸhV™–m1ŧė`€qō×+đšËCFēŌuˆcRĩÃ,¤ŠÁ=kŦO‡¯×]´Đ­cķšÕŖ’hąˇqūã“øÖÁB 'BÔė5ŪâÚsæ,‡nÜ ÃđŸˆ-îū8jw÷äÃ*‰œí ĶģΉSĀąŲĒY›™.sœĩÖø{X_ĐlõH—j\Æ/ĨiׇüFšh>3ømĻ";dE;ہÔäæģMCÅĐęz/‰yBĘÖ&Ž+€ÜHØä~‡đ>úŌ–xŅÄŦ͸ãŒõŦŋ†7v÷|Xëpe™‚ÃO"Šx/CąĐ<­é^ †-ŗ;InķteÉ<]VĨiáˆ|IĨÚčÚ}ĩÖ¤Ķ+3'&4îÄö¯Oĸŧ—ãļˇuĨi‰Ĩģ¤M1YY_o'Ļjϧq&ƒđQ´BũnuIĸ1ĒŖnfŨŅ}ëŠøE¤Ũčū´†ņ6LåŸa* Î qŪ%ĶgĐ~6Ųk“1K;Ė7w qŒŌŽüf¸MOŅô].D¸ššģlëQü[Ķnlŧ  RņØĪŽ*oŠž#ą—á‚ÛÛβË:Gû¸ÛqŽž•§áZŅ~ Ä^ę ņŲėo›ĄÛŌ¨|Ŋˇ>šˇ3'ž×nû3Ésã…ÄĀS@ĶĸĖdBą–åšôĢw֐|1ĩÄ`˙glÆîûká•üēÁkËģ`ZxŽĢÔį'˛<e{á-[[×nMö¤ĖëģļJņĀ ëÍg|-ņ#iV+i‚;‹­P‰#î#Ú3üĢkKÔė_öƒÔná<ļ…T>î Āâ´5;-Æĩ}[ƒwŲ‚´W ÆÕĀãuTĐ|4<'ņ7O´ŅõŽlgRŌ¨9TÖŊސŒ‚=kÅŧ`|5ņZ‚đˆÖéāfãw9¨ū"Z?Šū)čZvœË/Ų€yŨ~aŨž*>:ÜEŸÛ,ąŗEqķ.~ízū‘woyĻ@öķ$ĒąĒ’œUúBB‚IĀMyĪÅ]oJ¸ø}ŠÁĨnԐDNzVĀkOŗđTÖ÷7QC"Ü3aÛ•ėQČ’Æ˛FÁ‘†C†ŧ[â.ģusņ+JĐnĨkm!Ļlíz‚}8ŦO^éGâO‡‡—ö;y<ûžCƒũęé|gâWŊøWŦŊÔęÍ<…m‡w@ØükĨøGiqā:ŪŅĨô‘\gƍRŨüMá›hgF’œČÎŪGZėž#ęv§á•ö˘ØÍÄÃ}ã\į‡ĩųtM5̅ŊšĖiÉOsXšCØKđĘ[식ļk7ČÃcļYIöíŽ+_á.°,ô}/Iļž7 Ķ=ĀĮ*ũ*—€5;~.ø–wšc“åF-ÁæĒëˇÖrü|ĶĻK˜šģY÷ ĢÃUŋú•å߇Ą†ę9;ÎįoNĩwâ΍.ĩáíX°æžjĮČÛÆkzÖķĀmáØī.ĄĶÛ÷267gĶ•ãĢoøS—qĮŊž7Aw&î8õ5{Õ”” ˜Đ­“ €sļŗū]F<)sĪšnXŦ{šÅ`čZÅĻ‹ņÄwšŦĸß1¸‰ß€~•č? n.oŧ?w?™˛æōI"ŪyŲž? î¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¨ęšM–ĩbÖwđŦĐ1ŠŦ¸ŧ áhbT] ąčZMNŪđķĒ#čöŦˆ>U)? OøCü9´¨Ņl€>Š˛4 $ĶāÛ"%ŲÂįŽUƒÁūļÔMü:Uē\õķō+vŠËÔü;ŖëRG&Ĩ§[Ũ<pĘšÅU˙„3Ã~W”t[3wm1ņšrx?ÃąBņGŖYĸ7Ū ŠŦ|3ĸi“I5–—ko,ŠUž8Ā$zfĒĮāßÚ\ũ˛-.–?˜2¯"ŧ›ū›Šž4ÕobšM>+fō$ōÎfÅKŽüAĶ'Õ,|Ct&ļS ķ˜s~+Ņ|ˇÅŸô˙íˆ ‹2~ņŖãŒũZŊoā Ú#ĮmĨC ?ŪTĄO‡‡R‹P‹LHîbmĘčHįÖĨņ€ŧ?âk´ēÔ­§A$nPãđ­/IąŅŦRĪOļK{tƒzŠÃģđž‡5ä×Z|RÉx˜dļ:}*=Áz)–ÆĶŸã‘‹°üM_Õô];]˛k=JÖ;ˆ[ŗGĐöŽNøcám2ę;˜ėL’ÆÛË!pŋ@k¯UTPĒ0aN¤#=k•Ô>x[Sŧ’îãLQ<Ÿ}ãvLūUŖ…´[m éPØF–Dķčj;oørŅ`Ņí:•|'Ū¨5%§„|?czˇ–šEŦ7 r˛F˜ וüL+'Æ/ @Ę8=1¸×¨Yø7BąŊ[Č,TL™ØY‹˙táZ—Ú}ާhö—p¤°¸ÁFËi˙ <3§_-Ôv˛9FŨI+2!öÖ\Z[ŨÛ5ĩÄ),,6˛8Č"š›/†ūĶõ1š<å9PîYTûŌˇĩ]Ã[ĶŪÆū–ŨÆ § xSGđĘHē]§•æ}æ,XŸÄÕm[ĀžÖīÍíí€k‚6—F*O×­Ĩé6:5 ĩĶí’Gđ¨ëYˇū đūĨöë:&¸îÍßQŪ’įÁŧžûdúTqĮÎGsĮ•ˇCÕŗũ+¯Đt¨ôMĪM‹”ˇ‰S>¸ĨY:ΆôFąęvQ\9RÑøĶ…t1ĨÅĻļ›nöqŦLšūĩY| á´2ô›xăk*.J,üáŨ>ín­tČb™[pdæŦë~ŅŧEMJÉ&#Ũ} 7AđžáĨqĨŲŦL˙y‰ÜĮņ5ˇEWģŗˇŋļ{{¨–X˜`Ģ ÖE—‚ü=§Üyđi‰{;eˆúfˇ•BŒ(z ŖĒhöÍŠļÔ-’xŊV~āÍB™Ļ°ĶŅ%oãbXĻzVĻĨĻYęÖOg}Īo'ŪFčk|<đÂéķXޚ‚ ąŧg“zžÃĀŪĶŦÆ 63l͸Į'Ė3V´ß hZ=áŧĶôģkk‚ß`âĒxgFÖnR}F™mAž)­áM­VŲ´ĢfzFW U?DĶ4ĢY-l,aˇˇåãpãB×Á~ŗŊkË}*Ū9›Š QÚøÖzœš„dIs&w7ÖĻOøn9VTŅlÖ@rD3Sŋ‡tŠ é6i›Üyė:ļG†ô­ Xiö‰n­ÔšÖĸą5Ī i (÷ÖįΏîMmuúF‡á]#ÃÛÛOĩ $Ÿ~G;ŋPj>đŪ­y%Ũū•ÄĪË4ƒ<ֆĄiÚĢ[iļâYˇSÆkJ™",‘˛8ʰ*GąŽY>øM$y?ąávs–ß–Éüj_øWžwGˇQčĐÚÛEgk´(×j¨ė+?Yđ֑âÕ,b¸ōÎWx¨.<áëĢŦæŌ­šŪ/¸›8Zu߄´+č"†ãMãˆm@WIđΏĄČĪĻØĮnĖ0v Sfđρs;Ī6‘i$¯Ë;Ä 4Kám hĸ†].ŲℍrARXøsGĶc¸ŽĶO‚$¸•UxaéPÚøGA˛ĻˇĶ-ãvČ^Ôũ?ÂÚ&•$ŌYiļđ†bc"ĒEā? E7œēŸ™ģvķÎ}iĀ^’c+hļģÉÎvQqā/ ŨĖfŸHˇyņÍkXi:nš4ûX-FwÔsY‰ā %ßڗGĩįvvw­ íIԙMömpTa|ØÃmÕPøCÃÆŨ­˙ąíLrP&4iūĐ´Ģņ{c§Co8ŒmúQŠø?AÖ.VæûM‚Y—øĘķZööĐÚĀ°ÛÆąÄŖ Ē0KEQEQEQEQEQEQEQEQEQEQE„= qw˙Ŧ^ōkŨ&îãKē›&Fˇ<1õ"Ē†v‰ąâ GPļWÜavÚ­ėqÚģ›[Xl­cˇˇ@‘FĄQGaSQEQEQEQEĒĪĒąFe 0ė}kĖ5O„7:ĻŠĢ?Š.ŪūõNŅŽœ˙Zīô+í;KŽßQž7× y˜Œd}+RŠ(ĸŠ(ĸŠnÕŨģ>´ę(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļŗ*)f`Ē:’j’ëZcΰ­ôV;UwrM_¨d率ũlņ§ûÎ=$Iz:˛úƒ‘BK€ųn¯ŽģNiôĮ–8ĮÎęŋīSŠhĸŠ(¨üčËmķ>›ŠũiÕ~ķúšlsG.|šđpvļqKæ&ũ›×wĻy§ŅMwDv =IÅ"K™ØęØô9§ŅEQEQE5PeØ(÷8Ą]e0ö9§QEQEQEQEQQIq 'Íö˜ trĮ2ŽEu?ħ"ŸEQEQEQE5W˜ ôɧQEQETSO ™ĨHĮ̰Ztr$¨7WSŨNE6{ˆmb2O*FƒøœāTCQ˛eÜ/ Į¯˜)‹Ģií2¡4ŒpĒÕÚ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ)+•Đ|d5ĪęēDVác°Úžnėîc]]QPŨ[Gwk%ŧÃ1ČģX{WΞ/đ͇…ū'čVÚt“"M"ģ‚äãžŲ¯Ŗ‘vF̜í¯øŲáKxô›Aqr—;”2Ŧ‡n3é]Wƒ­.ī~[ÛZŨw5ą 3Œi>xG\đĩŌëwÂæYŸ*Ą÷ükz/‰ŧi6€°‚"€JŌį×ĩr?| ¯øŖQąēŅõˇ‘š<ÂŖ9ëÅz&™m%ž™mo3ų’ĮVSVčĸŠ(¯ū+č/áŋé7uũčMF|ŧFc´Šúß?f‹wŪØ3ŸĨr|5o­čŗŨÉwuo5¤Ņ´íŪš/ŲūYgđļĨ$Ō;°ŧ* ļxÚ*Kxĩ~-6š-é:VüãÍūpģkÖ¨Ž{Æ^ƒÄúÖsK,E‘'ۆŊyŸĀŸvŊĶË7“(@ÎŲíĩÍx¯Å?đËĻF-üöžšž™ī] 9ãÔ´QEQ\ˇ‰<^4wFŌ’ÛΓQĻs÷­Sø•áĨ×|9,ëyso5”o,~T…A8īY%šŸĀĻ[Še–FžiąĮã^™EQEQEQEQEy§ÅßŲÜxb˙[yŽc率 ˛RōĢ_Ļ’o‡VM#ų›œžĩč4QEQEQEW—üDđŸ‹ußé×Z%÷—eŨéæíÁĪ'ŪŊ*Ų+XcvÜęŠŦ}N*j(ĸŠ(ĸŧY$¸ņį4č6^—KM)e…n ‰ô5éūøyáë;M;RKi âĸÉæ4Ŧ~lWyEQEQEQEQEQEQEQEQEW!ãīŲø'H3Ę<ËŠ!ˆucū[ÆOáÅņf§â(´ëb7ĨĒÁ¸Úĩm>)ËqđÚį^6ÄÜÂ| {;tČŽDø‡Åo ˙ÂMg¯\JČĻI!x€Œ(ęĩëņDšī"×dVo)‹(éšk…Ņõ/ëzeΚiâH…Áfo°av(ôõ­‹ ßëū3Åy­đŨį<‘ķ´z ķĪ…ú_‹īeÕn4}^( \by$L™0úõô\+"ÁĘÛ¤ SŽiÎÛ›ŽkÆlŧS¯øĮÅēŽ§ëOĻ}pH–-Á‚÷$ÖßÃOęšÖ§ŠhÚÃyˇvM´ČŖZ¯wâKÅ~;›ÃÚ& övöĢ™¤Dˇ…qž,[ŅņsÃÖō´ōBˉˆ˙YķqüĢŌ>"øÆëB{ +Je]NūAlÃ!÷ą\ŸÅ5ũ?ĀšŽĸ/ĸš* (ŖgÛĩuúzÂ›ėÉĄŽō+e`d\Ž:ŠĖøyâ˙ø§CÕäŸÉûtRƒˇ#õŽÂđ™^üB×ĻĄh×녙än3Ņ~•×|@ņ‹žĐá)MR Ųį‹˜ÎÜįŽ+XxĪWņ7—YđЁ.c'ĪŽ^@Āé\īƒž!øÛÆ÷PŲ[Y-ˆ•ÔėØîkĻđ¯ŧAŦj.¯oZ…™Ãžë}+.÷ƚÆŊņ ëÂúEúiŋf\xˇ4­ŽqĪAW| ã^j>׌rŨÚ¯˜ŗÆ0ÉŦeņ?„‘yqt8˙ ö[øö‹ũÁüĢ?Ÿ ęXÆ~Îũ~•æ˙Շ‚u˜ĮÁ>¸âĨ°ņ¯‰cøĢ…õ/ŗˆÜÍõĨt|pŪ:uŒb]SPG=ũŖXZŋŒ5˙?ˇeŽō;ÅÛ‘.Ũ˛côĢ^ņfŊ­KŦéúÕ¨VĩŒí™ ŲŒ÷ŽáUŪ˛÷zŪ•ĸ4PÜËvŌ=ÄĘXFŖ Ā¯Bđ§uY<[¨øSYK}j3ŅŽĐãÜf¸?Ü|QŅme¸ļûAo6Ō Ÿ-1ŨŊkÚŧ5Ŋšá!’Ũī ’>Ī÷BÖŦķĮm“Ėá"K3€Wži^)ņ¤Ô'đôļ–šmŦĻ(¤–2Í3ũx­ā˙ɯI¤Ũ…‹V°o.`öa\|ū4ņ~‘ņ? ÜŊŊÚΤÂÂ,gŽ?*ŊŠøĪÄžņV›e­›k›KöÛēÛåœū5ęHÁŅXta‘M›’ūV<ͧfzgĩ|÷ĢZøļ_ŒÚmĩÅũŦڀF’ Š1Æ0xĮŌŊ–[]Px.ößUēŠ[ւ@ŌÆ¸^œWœü._5ž”ö°429‘ĻRÄ7eÅu˙|ksâdÔm5V+Ũ6SÅ:6;ÕAâSÅž&ŊŅü=r–ļļŨ•ÜKtRxsÆwÖū5šđ†Ŋ,rŨ ß  =+ĐgY^ŪE…ÂJT„b3ƒ^!Ŧx߯žņÍρ=ÄWž ˛<ŨÂũ9Ž“Tņ‰ŧs§]ëˇĐŪŲŪĘ"‘=žKO_­kø÷ÆīáŨ&ŅtäIu AÖ8œāž˙…`k×&đ]ˇˆ.u†ŋˆ•7:P]ŋXøârېø“AÔãŠŅ‘Ë؜“īX×ū2ņqđžŽŲŗ2Lë’ąn2zŗz}+yŧE­ëž"šĶėĩK}3ėqĻčŨ2ą=z ŅđvŊŦ^ëŨļŗącą¨É÷Xœä˙.+OÖuΈ!ÔŖŌĩ)4í.Â_-dD¤nįžŪŪõĢáĪ^¯‰5? ę—^nĄî‚āŽ7‚8?™Č/‹ŧmoņ O ›ˆî_) Œ{šÛëŪņëˇ0ŨÛß§ČņĻŌ­Z˙üi7…`ĶííÛ˖ö]†m›ŧĩî~ĩĪęž&ņ„u­K­M¯ôũI‚mt ˞âģOˆÉā Qü°Öåü+;á^OÍ=;å‰üëē,I<Íy=Į‹5Ÿxē÷Dđũā°ąąŋģ ŧ“ė?Ōxîæo_xfîėßĨ˛–[ĸģX‘÷˛*hņõމqsŌ\ļcP˜89Åkęū+ņ'ƒĩí)u™ā¸´Ô$Ų˛5Į—Zŋu_čú7öƇ<"Ö÷KŽXûÖVâ/kž‹X˛ļé;ØĘ„´íß‚ēoxÄxˇÃ{:Ž *áG@šû/jū=ņ õށ}ö .ÅŧļšT ō?|{Uß øŽųüCŠø[T¸Iu eŨûÖ q\ߊ0‡Â^ūŌ”,—Xb'Ü×5u}ã-#ÃĮġzŒ3F¨%{$‹Wŋ5oVņF¯Ēø J˙*ŗ,Ņ–DŒ€Yą“^k¯xŗRÖünđ%ô:^–˛ÛG/’Š0 Ž˙áYúŒkđ–įRž¸A,Đf+hNČ×=°:֏Ã]R{‡ļ‹d’ÕĄ™Ë1Î'ŠįŦūYxžÉĩß jōi÷2’ÍnÂˇ~=+§đƸž×4Jo>k҉áŋČÍ`|'ֆ‰á_ĖB´S;zgė~ŋ›TĐ,¯§@’ĪvQÛ5nōqke4ė2#Bد đ†Ĩ'‹ŧMŦjđéVvųŪ Œ,’}[­g|:Ö"ĶüSâIã”H%—ËŒģ}ė’3Zŋ #“Oø¯â/Iœ4„žãųÔ>;Ô­'øŨ ¤R"*ŽĀŽšéū}jĪÄĒŠūÔd˙'hÔIčAũ:×CņĮSˇƒĀB?•丑DkŸĮ5ŋāŠūÚ0<3×ũÚ䞐mõÁœ‘vųüę‡ÃÉV?ˆū0ēf#$ŒúāķQ|RÔįÕüŖŨNS{Ū/Ž3Öļ>.ŲËđ˛ÎkEfŠÜ¤˛*÷ĮķŽŗFž ū[ē› žËÍp-'‡ĀšÕËåmåfō‰=E\øeęĶ.7=ËgķĒ^ÅņŖÄĖ>l'oãF‘~ū-øŸŠ˙fÅoĻ›\Ŧˇ!K'cׅéų ÉđîĨ“ņƒ^𕤙lĄ*Î[æ“nÜ֟Åk˜īŧOāëŧmN­ŗ<ŽGZöøÔGūčŦīÉåxgSKgūUįN|y“ķÆ8ôŦųÆi‰Úˇo↝ ž4đūŠnĪ-Ũœ‹įŠXˆˇ}î?Ī4Ī[MņRŅ,ô˜Ļ0A7›<ŌDUPqëŪŊJKhít™‘ –ŽÚō?€ņĨxŠVEÜn=Į4i’ũŖõaĮׁOņ“nøûáÔÎ Á¸qūö•zN•­ĪâMVˆÍŊžĐŽŊI<āÔ? š¸đ&ą§úãnظī\Ā@Ā2 ß0š}ĀöŽÁqqņī\šÔģÛ*ēĖàäbļoY&ũ íIîm2€ŽæĒüheoøNlH×=}˛+Øm˙ãÚ.1ō? –ŧjöt?´e’”‹s¸‘čĻģ­cU{Īx˜&Õ[X¤O_“$ÖÁ&ĪÃô•œši\ŗŊk á\Š/‹dT=z˙ë]6ĄáÃĮNŖ=õÛęōˆ¸ĢLWĨW‰xžX#øīŖ ‰9EÚ{Á­?Žė’xoN„12ŊĐØĒyn+žøĨĪmĒøFæéåŽÍ¤’/đ1Į5Ūęž Ōĩ?Čڞą%™sƒ8ێĩãXôË‚¨–i/ŲT/’%<‘ž3úWoā8ĸ˙„GPĒvÛŽr3ƒŠķũ{Ãz_ŽŧS¨>õ´ÍbÅüĻ(ØķfĻøjč:æĨáVč^ ‹6’)s–ã“øÕ¯áėí5>q˛xŽ›ržŊeZÃqŠūҞÜ[n0ZĻéHė6ãY˛oÚ*õØäEÆßøÎĢüOÚ˙ŧ,*8?íV×ÅÉm¯húŊĨ´’Ū:”¸™ųę3\įĤˇŗÖü1e-ĶĪ/ž˛HĖ~îH‡˙Zģ˙ˆWĐKđŋSxg V „ĄäSžIæ|8Ķ lļk˛ŧC%Â‚Ұđ¯øŲkū#ąē\Oæ`:ŒĩvãKđæâ‹˜4Ŋ<jŪA#É*ļBŒ~œšįū –€ëÖsŽËˆîÛp=OųÅcŨGqŠ~Ņ*Ögtvč Ŧ§ģzδŧJ‘\~Đ"š]Ģj3ĪCķT_ŨFŖáŽ2~Ō{ôé]wÄwEø]zÛĀg\—¯ ü'ļxŽ#ûy˙vš/ƒi%×Ãũ~(Ī%āīšÉø7ŖI"k6ę7—0ÜídŒāšîŦŧ#Ąčž<ƒQ7÷wÅĀ<1cš"ĄøŸooâ{1áËEIuûŨŲ˙RņĨđoÄĻįL›@ž;ûØTõ w5Kã~Ķáu'éĒņáU~:ÛÎÖ^ē@ÆŪFü}ܜc5Ûøļö!đĻúq´#Øásî1\g­Žė~ę-w•C#Åģûĩģđ…á D 3w?Zį>ū ņD€ĻQ˙5íÕæßlînü'ŲÁ"9Č÷jīÃËČ[áU“’ģcļdeŨÜ b¸ī€ąN^že)g$§ËôëÚĻøUt‹ņňYFųĪ_÷{=#0Q– zđˇ Úö‚™VUËdŸ0¯pŌgŽmŌHØōTg>‚ŧĮƞ+ˇÕ>"č>ļ”:Cp%Ÿaū,pĩ›á(HøåĢ%ā!ŽŒE¸Č4ΌŅOĒxĮÖKžčI• רū\×mņ/ÃßÛ?įˆ.n-"Yc=÷(Ŧ„W×~"˛]Jō0ਯ-a$d–ū3ŸĘšĪ‰S[üXŌu+é$K)‚ĸʇOÆģxWÃŌxzkÍZūęęÚ$Ū#yúŸņĻ_ø2oøOEŽĘūįHŽ~TÉÜWļk”ŋøĢ´8ļņ4’6åĻīņ¯Zđ–‹?‡ü3gĻ\ÜyķB˜izÛĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˛ŧAáũ?ÄēTēvŖË ƒŠŠõÄ[|/ÔėĮØíüY{“÷~ĖĒÛéēēkŋhWžļß胸ûŲõĪ­cé˙ tëA$7w7v{ G˛>Ũ*߇~鞡š‚ĢŠŖ™5YˆÔöQP˙Âŗą´ 4BķOãäŋŪ÷æēÖZœövûŨdɒG9g'Š&¸˙øSš:ßK,w÷Šm,žl–ŋvĮ=ëĐííãĩˇŽ—lqŒ(§IËFāa‚ yúü ĐáÕĨž´ēŊļI›tļņI„¯ˇĩAmđoEļņ7ö´sMAËd8BÃĄ5ˇŽ|>ĶuI5Ž'ąģUØeˇ8,=ë Uø-ĄjÚÍÕÔ3A˙-ūg>Ŧ}k¤Õŧ§k^ƒHŧ’gōį ķŠ}k&O…zeî‘-ŽĢ}{|ÎŦŌžYv_Jģ§ü?ļŌü=.iĒj o'BdAíÅEំšo…ožĶa}y´Í?ĘĮÔÖ}īÂkKÜęļē•ÍĸŨßÅĮ™íVõŸ…š>ˇq\Ũß,Q#‰%Â.;âˇė<3kiáæŅ§–[ģfČ&s’AÅrcá|ņÄú|:ũŌhĖpmp3ˇûģĢŠ›Âö‹ás Øą´ƒËōÕŖęs>øVžŠhlĩËčâ—%ļmÉcߑF…đĻÛC×ßW]^öYĨmĶaûĪŽ)×ß l^›WĶ5Í:âõÂĀz­qđgG}r û[ģ‹xÔ4@įÎį<“ëVŧMđēęđ_ËĒOŲŋÔ$`.ģ-O—LĶcĩšîK§LæY:šĪņO…×ÅĢm&ŖuiČuąŧzĮđĮÃ{_ÎÍĻjˇĢ˜‚…ņ}j¯ü*›OøI?ˇ˙ļoÎĄ‘™ŪGĨqū-#žņíÁđEü“]G ÅxŦ ĸã§'ŊTšĶ~1iČu¸†T‹æh՗?–+Ķ<;Š?< ŗÉ-œĶ ’˜Ė¤pqúÕ=án 4ͧꚌFl™1/ŪoZ†/…6vŪ!ėÆĄũ Hķ%wxôāV‹ŧkâJĪSKŲŦu \ˆî!œzsZŪđÕŋ†Ŧd†9d¸žgķ'žCķHŪĩĩ$k$lŽ2Ŧ0Aī\|?Ôt{ģ“álØZ]9y-Ū-ÁXõ+éô­ß ø>ĶÂļŗŨŽ.îÉ=ϚFŦKĪ…Zu߈ß^ūÖÔĸžgÎô îôéLÕūXëwé{{Ŧj2OĖ$ŋúŋĨv–Ú>•“ŨÍvɜÍ7ŪjŌŽCğô˙ęđjÂîæĮP…v­ÅąąR\øÖ ˙`Å}w šEož\õÉĻh>ļđæ—.Ÿ§ę7‰nęTßtž¤{Õ ü/˛đÆŧúĨ–Š|í+nš9čęjÆˇđöíaõ}+PŸKÔ$P˛É"Aî*ī‡ŧvڍåäú†¤ÃoÚ&?uēŖĩuáū3´KŋŽú5ŊÆã˙ `ô=+ĐWĀŅÜę—šŽĨ> lÛ6ŅĘĒ3ëĀäÖŪģ Xx‹L{ øƒÂŨ1Õ~•ĘZ|1Š5H.õŊFęĘ7 ļŽ˙ģã =Ī˙Z´|Oā ?ÅPÃoyst–ą( oá;‘Z>đÔ~˛6^\OE”ũÁíXw? ô×ŧģŋļģšˇž¸›Í3ŖaôúVŸ‡ümĄŪŊü—3Ūßț Äíš‚úATĩoÅu¨IĨę7:]ĖŋëZ aū Õīx3OđíĩĘÛ´’ŨŨgĪ씿I õ5•ÂŨYĩTēŊ¯÷Ĩ3ˇÖĢę? 4Nũ/î/õv‡rKæōŋOJŊ¯ü7ŌŧEmb—SNŗŲŒGp§į5^÷á^¨iQŲÜÜ\ŧą¸\–Ė™9Šnžéwz,ZCŪ^-šYņæVõ­ x2ÛÂ+$VwˇRÛ˛íXf`U9ÎEtõÂkŋ ­ĩ WûSJŋ›JŊoõ’Aü…kx_ÁöŪ3Nnfŧž¸Įu9ˡˇ°öĒ:Ī€RķR“RŌu´ģšŋ×4#"Or=jī…|aá:XžK‹Ûƒ™Že9w˙ëVvĢđĶKÕŧFÚ뎗ąßōŧrcg˛Ķu†Nģsú…åėÆ" aĨûŋJŋâYø‹LˇĶ§ŧēŠŌR6ûāzĒÛ|:´´ŅdŌ`Õĩ´`¯˜>UÆ08§øOáõ—ƒŽY´ûëρ˛LTąīMÕžÚ^ęīĒé÷ˇmäŸë߀˙QVô¯Ûé‘]?ÛngžšM­w)˯ûžÕ“Ļü.´Ķuy5DÖĩI.ä;ŧ€îũ*žiöÚŧšĨļ­ėšäR>jŅņ7Í?ÅWĶ_ŪŨĢÛ*ˆüļĀcæúņ[wžŗÔ|;ũ‹z^âÂōrĮßë\˛ü4’kxôûũræãKŒüļÅ@Čnū•Đëž´Öôx´ŗ<Öļ‘Ĩ ;w.1ƒY:wÃ[+K}:ĪSŋŠŨųUĀëÖĒčŋ l<=¨ ­7SžŒ4åŒŋ}kĐj›ho-žŪâ1$R Ŧ§¸ŽO…Ęže­ŽĩuiĨĘwIiäō3ØWK„ôû_ ˙aX™--ąŅ7ŋ>õÍY|!Ō4Ûņ{gûÃģyŸ|į?7­z¨DUÅcøÃÉâ+8í¤Ŋē´TmÛ­Ûi?Zå¯>øQTûmÅũÃÆ0¯$Ų"­CđĘÆŪ*=cXXĀĀEē ĀT:WÂ?i:ä:´r÷1>đd}ŲozÚņ'ƒ­5ųcģI×P‹„šŒāŠƒCđ-ž—Š RęæmCQŲ°M9ÎŅė+ĨģļKģI­äû’ĄCô5™á ÚxWH]:ĖŗFœŗu$œĶüCáÍ;ÄÚqŗÔbۙưę§ÔW;gđĮL‚âēžžžŠ å8ī]ē"ĸA… uQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^|ž×<=â ũKÃwĪ ķųŗÁsŸŊėjK¸ū jößfTĶ4čäųe“s;…ī´bē_ h0xkCƒMˇˆĮĖøå˜õ5ąEQEQEQEQMl…%y8âŧVđWŽu/Ûx™Æ”ĶũT"Väz+Õtˇŋ“N…ĩ(ãŽėŪ$g**íQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESXŅ‚ŗĒ“ĐŒĶƒ+}ŌŌ–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯,øšáCNŸ]´ÔÖ!ļ(ß qŪWWw^šk쇙Öãģ=+ÔčĸŠ(ĸŠ(ĻIģĘ}ŋ{iÅy_×ĮÍãĢų5íëςƠãaįŋ…z.ą­Øč‘A%ô…yDIœąéXŪ:Ōīĩ?Í.ĒÍa,´ĒҜnãĄŽWāfЍęžž’ūîKĸ—EU¤l•āqô¯UĸŠÅo؏.ƒ–7f?3ĀæŸīų™bqĀÉŦ/ˆī¯Įá)ÛÁÍöá÷>öŪøŖáģëōxV&ņļĀqƒˇßŪģ ķߊVšÔ:úŪ‘­\Yĩœ[šú8īV>ęwúŋ-¯uäžwfĖ’u<×uEs~#đ´Úüđˡ¨iūRãeŗíõ¯ŗ˙„Šo‹-áIüM~Öqå‹oų›Ž™Ž˙Ä^Ôt=īUŅõíDŨ[!—ËžMčøíŠšđĪĮ_đ›h,ÉåŪ[“/lú×sEfŲëvwú­öŗ\Y p7 Žk€ņõˇŽŽŧcĨ™4Ä*XŠã9įwĩzMÍĘYXËuppÆ]Čôš‹LÔ Õô¨5 =Í éž2ÃŠķ ¯ŽĪěöÕZQŖrŠÍōŸ—h¯TĸŠ(ĸŠ(Žâ_Š.ô; 9ļ_jW ?xԞX{×gqââm–›o5ũí„Ę<ųgbęN2Oĩ{e!ÎĶŽŊĢÎø‚Ú׉/ü?<Ív`$ÃsˇÔuÍzc0E,ĮrMy.§âĢÍ[âևĻÚÎcĶ#fû­ūš°yĮp+Ņ)¸đö™kmbÁoĩ „7÷sÔ×omâŊ âE…Ĩ”Ú…ŨŒČ­u$îYyę}ĢÛ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽSâ<ō[x U–‘ŽĻ_<ącčk§Žumvâķū‹[˜­™—2ĘC6=‡JˇāO˙ÂW-åŨˇŲu7Ų,@ä~'‹|w‡oŖéЋÍ^äá!Ī =Z˛WâĄŖø’ĶGņQŊŅÂy >ā֏ŠŧxtÍbĪCŌ [­R됎pą¯ŠĒ3xãWđΡeaâˆmü›Ãˆ§ƒ€ĄŊd]NU†AöĒúƒ].Ÿ;Xĸ5ĐBbWč[Ūŧ“Cø›âCÅ7^šĶ­öÜn+͎Cšĩáī‰ž ÖüKyĸ2Ō;‹2Û×ĖÉrAZ~ņ¯ŠuŊRîŲôŌ+fdi ŧēzÕ¯ ü@ŧ×<]s ^iqÚMl…–]ÜúWŸ|L×üMsã-#O“HōáŽq%ŧ~`&f¯+Õėu FûÂWŗëZhąu‰Ā‹vėŽŪš¯,øEŦ_[xvúËGĩIŽŪéäfs„GA]˙€<|Ū*¸ŋĶī ßŲČUÕNF2ÂģĘĖ×o/l4™Ž4û3wrŖåˆfŧÃ˙Šn>+jWo¤‹‹åO- 2"\ú÷ŽĪãcÍ',…Ęä’uķsŠą˙ íîá‹{ËMŽ4ģx”I>ürzíôOÚk^‹ZCåÛēo%ŋ‡kƒĮz׉dģ“ÂļķYÛ1C<ėG˜GĨlø3Į6ž+YíÚ?ŗęͲxIÎuĮĩuôW‚üyÄ^ÜŖ+(9öÜ:ÖŽąņOÕŧQĻxpLɤē<Ā`J{.}+×­a‚ XĸļEXU@E^€UmkXŗĐt™õ+épB옟å\(ņŋŠGoaĀ4žb§˜|ß/ûŨ=+^ûÆōÃâ-OūС*^Tm*Ŗ¯Öąü=ņ>÷ÄÚišĶ4šUŨž?0˜÷­Ī øîßÅZmÜĐZJ—–ŒË-¯pĀãæZ‡‰ŧM}ņvÍ˙ąÎë8ŸÉŗ.âå‰üĢŌõßk‡W—CŪw\Åįaĸ֝á˙ÃŦø.OKnmáPĖ98ūĒĖ›ÆÚöĻf÷F†]9“xû<ŲuČĪkÆú€Ô~ę7č›Dö%ö“÷r+”ø¯jÖ_ėãĐô¸¯Ė^bŌėۓĶÜ×wā¯ÚøĪL’æŒ2Âū\ą1ÉVŽĸŠđĒÚÛ~СÜĒĸ&I“Ž>^kšņŽmî4;Ŋ7E´ēŋŊē‰ĸA'šáĢčւæäeZÜž60ëŸĨyĪÂíġ:î¯qũ’.’ę÷ũ&ā>]°|WUâΈzĮ†™Ļx{âū§ã˟ ßé‘ÛKnb˛nįÚĩ|SãdŅ5+MÆwĢŪEė˙iŊĒ€ņžĢĄëVZŠmm [Ķļ형ŨéÍ'Äę> X.ŖĶcšĶäÚĻmø!lU]Câ>ŗgĸ q<:Jn•ĻÁũíž•Úx{]ĩņĨfs̜zÕĸŧûTņÆŖ}ây<=á‹xgšˇ¸žSōGíV´] ~Okpä"ķ"1ˇË(ö¯/ø“Ēë÷0đüˇz0ļ–;ŸôhŧíÂS¸c>•ėžģÖu ygִIJ›#` °Į\×GEbxÁ‚x;XbŌNûĩÂ|đLä(U7šņsY—Fø{$?ë&Ä únŦ‡šĩü~´ŗĶt¯´Į9–V}ĒIę­h|: ËĒęOĻØ}WVåüÞŪÕŊŽŪKĢj)áû'¡7’Ąæ4ūīã^nŅ[AûAé֐ĻŅ6¨í€‡é?<=uâo \ØYH#ēĘÉ'0Žwá֙­x+ÃwķøŽû÷aˇ¨y7lZäü-e㯊âo-ãŌėäo-ú ;¯­{Ŋ ËË´¯ y’Ē’‹œn=…yN“ņK^ŧņ{xvīG‚ •'9“ĶŌ­i˙ukIáš´hŖģ@X“/jÖĐH×Ģ§W_}ņVđūĩĻÚkēlq[ßļØŪ'ÜW'ŋįW~!øģYđž˜5;.,PîĪČĪN+{NņrxBß\ŋ) ´tœđĩÆ'ŽĩíOEšņ ŠYÚéģm3ōŌ(ī횾ž+Å˙ ĩ[ûtųÅģĢ(õÅr ĩ-n}—Cĩ†Y#y$–IŽNOæģ_xîoK{e{lļ÷ļo˛@§‚kģŦ/j:†‘áģĢũ.šæŋct#Ŋyį‡ū$ø›^đÕū­Ŗ}å“8;@æ§Ō>$ëúĪ„¯5ģk Söv Ä$įđŽIņøđEΈuģŗĶĖXגÃüâšoøOŧ[/†ßÄļņéōiÉËF īQžįÖģ­'Űj^_l>_’ddŖ¨ŽiüWâČ´W×MĨ¤Ö-‘bˆüč1‘šëŧ#Ģͯx^ĮR¸P˛Īv ĐVÛd)Į'ķßÄëß^x‹Eûvšy7MöP™9ęļž$ŧŌü1sĢx–Ō;1Z+n,¸ŦÔņ/Š.´â(-­RĮËķEģŦ)דôĢw,ÔuC­xbyĻaēD•¸AÜ}k‰Ņž+øYĐõíŦ`k›=ŌHä|Š€zw&ģ·>.šņ‡MũÔ É!‚ô>âģ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+‘ø˜xTąå\‡Áģģ;_†ˇs(Šo0ÛšĪøykåæĢsáxRĘÍä>mÄėXˇûŖ°Ŧ˙‡:•žŸņÄw—2y‹æ°.ƒ9ųˆŨ-ŪÚĻš<0%7˙wŪxģÁΊ4īę72Å4R**/!Û9ÁB/.~:]Dŗ¤SmũĖ’Ļáˇēoˆ~ žÕŦ­īõŸC vMš]!˙ë×Ŗø}Bø~Ā L¸…xF {֝xÅ(Ļđ‡Ä;Ė‘6ÛĄąļ eąđŦ=enüâí'[Šy/ā>o?yÛüŠ÷éΧxj”ƒ4š–CÜŗrkÎ|Ę~8ø‡§ÜĀöĻüCc'ÆO B¯ˇ “ĪJôMgV[Û-wMŠ6Y-­X—ĪREyīė˙n‹ŖęRmåį`G¨âĢ|2ˆÛ|^ņ<{Üíœ}I¯qĸŧ?ĀÅåņ<ŨU‡åRübÖZøguyQĩéBŗœWOŽÃæŽ4 †Į?ŨŽcC–â?ŲÎshËåHqžiŋmuŲŧ­Ĩ\ÚE Čáđ–9ÍhøOÁ—ø‰5åŪ¯o%ÅāiÚ%#ŋZõĘ+Ā~>D—%đô,xvÚÃØ°­_Š_ ›Á6šŽ—w§ÆŦk‚ÉלuÅt|k‰<3­ÅĀkûo‘Áę}+#öƒkÅ𕏐X@n€˜ÁãŒûfĩ´ũÅZĮ‚!°ŽŸĨÅ Œ0ˆä)\zÔ^ІžëzSę |°Ŧ ” ĮŨ¨ž[¤?ŲŅF÷‘‰?gü<[ãå[ŖĮü Ē+6ßûIŨää%Š˙˙īü~Ņ\x]T• [WkgĮøÖĮūŠęm°Č˛+Ę?Ū<×/?‡ž!øoMYtëčĩ]+’6ųŽĪBĩušŽš˙ ĀÍBä@ qlČņöR:â´ž[Giđ˛Ō]¸2Fō?ŋZæ~švņc nŗ€zrkÚ¨¯ž,ûGLŦŲ_4Ô¯˙ŽžƒƧ+ėĩÁüd[†øs}örüߡûšæ¨xKÖ¯>i‹eĢ[Åo$đĀÆ=jĪ€<&|gŦÚž¤ˇNå¤xÂāGÆ_éX?īÖ×Jņ5ŅCåCw$˜ũx¨~-Ũ Ũ[ÁŗF›d–uuV=>eŽ‹ã)SđÆpÜhöãąČރBÔã˛đ˙‡-vk¨Qųz×Ĩ¨?´Ň|°Gā*”&wũ¤$ŧîŗĶG˙^´ž<ŖŊ†‰äœN.ō„uéڏ‹Ī øi¤%ÂîšIâ>ģksÆP%ŋÁ{˜Đ %’˙*wÁ˜öü:˛~ÎXƒŸzô*Šām(^Ĩ?*đī‚~jøĪċuģí%ōÛŋŪjąãõ¸“ãw‡RĪ"`Ē_ÜĪ?ĻjĮÅčĘø×ÂRsƒtŋOŧ+ŲAdŠZ+ÆËŋÁŌįŗ“Ÿø p˙đ<*†Î'?Öļ>1iręŸ¯Ŗ ÉY€ķúUĪ…Ë ü>ŌüĨ÷xcŽĻŧį@ļ˙h Sė V‰ŧÖN™ c?uÖūņmåÕş‹#s)‘˙Ҟ~™5įĶišáøŋŗjĒúŗAvŅĀ_îô¯kĶį‡ô)gņώ2&]ĨÛ´é\îŖaeâûû{SWTŌÔM;vŌĮũŋđ˙ëÕØõëH|OĻx{Ãíoäíi.R%*ƒÛ­nj>(Ņ´­B Ëčĸē›”Œˇ&ĩՃ(e9duxwÅČáņŽ‹â›hÉfm˛íņeŊ·uÆė’tūdËÜč§đ¯jđ”o&5ĸ./žû2OĶæúÅŧ7´œ yq~\ąņŊäđö7yŋkP¸úÖŋÅųJ|-˜pCų\Ÿ¨ŦoųãāMŠÛĐÅæėŊë đ†‹§kŋ lôéņöY ųŠõ¨t›] JđŊ§h…šE‘%wîØŖāēBŸÕԂi¸÷Žsá8đą|VU˛žqīîkÚę)áKˆ$†@ :• ×Īē•Î…ãÍcÁņ#ˆu>P1Vũ)4û+­Æwū´Rļú„ŠŲ<ė<ū•ë>9Ô4Īøäęâ{UˆD!@+Î Ü_ޝ °iúdą3ĮgÜy随ųæĩ<â +Oøgg¤]•eĩ–RG¨cšÉxļËEûg†uĩiōĻõˇvČ é^đŗW—Tđ’Ã=ēÁ-“›wUé¸uŽâŧgãDģ[Û]éZōÉ •šāĢŠūīĨzŪĨŲi6ĸÚÆŨ „sĩ*åQEQEQEQEQEQEÆøŗÁW~(ķcūŨšĩļ‘v˜cQ´ũk/Ãß ĸĐtÉôņĒÍ=´ČČņ: ­šĄáo†z÷†üûK}}"°‘ÉÚąåņõ§Ûü"6ü÷–ZĄK9Ü<˛e›œõĢž+øu=ū¯k­čWÛj–ãŨr­ėÕ&Ÿá_jz•ĨįŠ5(^;Vß­°ų ząīW|Wā$Öõ(5:ëėZŦ+0]ÁŊ›ÚŗÛÁ~#Öīa$Ö"—Oˆ†6đ&<Â=NkĐ!‰ ‰"Bĸ (…I\ĮŒ<#Šã°Y\!´¸{JÅ ‡ÄQékē463,€˛õĩo_ÛŨɧ46 øÂHã Wši? |GĨøēmq5Ëvšáŗ3:Œō5¯ã^ëúžŸ­iWQAŠZ íaøV…¯„oΉŠGw¨ŠÔõġœŒ` ÆđįÃmWIoĻøƒtä˛É9?J‡Cø_Ēhž&}m|Aži¤Ũ:y\8ÎqžÕęW–\|2Õl|S}Ģh:¤p-đÛ2Ė›ˆĪRŧĶŧSđËR×tĢ=&ßSŠ++p^=ĖÍęzUëĪxžķÃ'A—Xŗ{s–]` •ė:Ôū đnĢáŨ>M&ūúŊ0ĄTŒ&'Žk"ĶĀ~)đŊÅĖ~ÔíŖąžBâ+wŸLWAá?\i7ŌęúÍųŋÕf2c ôQ]dxŠßXšĶJhwPÛ]îyW#æ>#øQâß[^j~!ļií°ŅƒįÖģK]'ÅK Kcu}e$ÄFōÎ6÷ÍpZÁßxw\“SĶuģhdbIQÛĪļkĐÃWúį†/tŸOËL~W‰pv?\ÖŸá_iVŖH´ÖíŗlIž<ĘĢéÖļ/|!}„[Eҝ–)%ŨįĪ2îi7u?^ĩ—áox“Âēē]Ž­hŅ”fˆį'¯z­āŋ‡ž!đ–Ŋwxē­¤ĐŪIžāŽãÎxįŪ§ņÃíZoÂM _Áms,F)„Šž=Ehßø&ú_K Zj—,ZæâDÎíß{Ŗ|9Öô˙]øjãSˇ’ŌE""¨C.NN:ŊƒüU¤iÃNŌ5č>Įŗfۘ‹ēŒsƒš~Ĩđúō'‡,5E‚Ũԋ™=Í)'?ãųĶ´x‡AđčŅėõĢv‰Tĸ„đ^õā‡šī‚u)Xj–×wētCĨz}rū'Ķ|Q}slÚą „J§ÍY"߸į­pŅüև‰WÄgÄq˙iīŪĖ`ųIúzWáËŲÜ\ļšĒCyŠĮŗoÖļ5 >ÛT°šÎî1$ŠVSŪ¸/xŸ@I,´-~´Â˙ģŠxK´j{šę´ EŖéķÃ$īsuu“sp˙zF#Ž?Nøg¨é–Z¸]î6â//į#ēƒīŌĻņÃ;īęV×skžJYļëXŖ‡>}{ôą¯x>įÄ^ }Qŋ]‘pŠ´dtâ đ˙„5‹-ÎĨĢĮ<Öq­6ÅōĮÆ2yæŗ,žjV^.—Äk¯îŧ›‰‘€WĐ~Uˇâ_OVļ×4ÉRÛWĩûŽËō¸ūë{U(<ĒëšåŽ­â˛y~ÄIļ´ļFŦˆįŠŠŧyā[ÁmlšŸŲmā`ë—ģæķU5_kúˇ…Æ…7ˆbŲ# ~XvīV<ákÂQ›+ŊR;­=FŠ´ƒžĻģš+‚Õ< {mâ)5˙ ]Åky2íš)÷oųwĢzƒî`×ÄåŌ]jŦžZųk„‰}°ŧMđĮWņ&ąĄ?ˆųļ—ĖļCúžr>ĩŨhZŽŸĻŦĨđŊ¸Sū´.Ū+VŠâĩ¯jÚÜwv÷#™m.7)…c*áÍeč? õ Ų5Ž‘â9íãc¸ĢĐRÜŊˆˇēa1)˛BG ë\T^ņ‰$–úŖéōV)×>W°õ­_øB Gq<’›Bí÷Ü\0ûÆ´õËGP´XtŨIŦ%ÎLǁŽ?á“á4Ã^]uüIy&¤ŋvFAˇō­mwŽž%ĶmŦõMnfČ]ŧ•Ųæz\ÅįĀĢ[šŪsŽ^ \å›?ʡ|đÂę7W̍=ԓ Œī^ƒ¯Zã~.øZ ĪŲßÁ¨ģjs2Į ĸ žŪöėúMŧ–ēMŦąi0žæŽ×5ãOÁã !,fqIV@äzEAâŋEâ/Zé*ĘŠĄ†~QÖēE€Ãb-ā! Įą8SŽ+ÍßáŽĩ7‰GˆĨņ(ūŌ_•Hƒ ĢRø›áĻŠâ™íeŧņ ļ0ą­?\øoĒxIļĶušˇŒ1R/õ„ƒ[ÚOƒÚ×ÓhzĨņÔ,Ũ<´VnÕÆ1\Ũ¯€ļ‡ÁĶh7 Ÿūē~Ŧäũâ~ĩC@đ߇tŠ4ëztˇ`vŽÁō“Ūŗ4…W~ÖeÔlüC0yäß81Ūs^Er­āč›ĮĢâo1w<­„sŸZÁ°ˇ‰ÚP[Čō„xč}j˙Šŧ3gâÍ m.ķ"7åYzĢv5ĮÛ|)fҞ5-râîÅl0mÚĢî}jž‰đ€i–—\jĪqæBĐAĮËžŧVĒxPĶtôŗŅ5ŲmŖ¤ŖrR=+ĨđہoáŊ!,`bį;¤‘ēģžĻļ¤ƒë^Wâ…ZŋˆuHīnŧJXÃ!’0ũĘí“Ãō]øY´}fä^ģĄW”Ž3éÅrąx+Å §ûbŌɐŋŧôÚ? č.<#ö .ƒĸ]ũí2ÜqŪš? ü0×<%x?˛ü@ĸÖIL,;×ĒŅEQEQEQEQEQEQEQEQEORûwŲ?â\#3įūZtÅXƒÍû<~v<ŨŖ~:nĮ5%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW7cāÍ6ĪÄ:Ķy—“cģË‹č+¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ ģ3­¤­lĒĶ…>Xn…ģWŒ‰ž0Ķŧ{o ęÖv‰œˇŸ—ÚŊēŠ(ĸŠ(ĸŠ(ĸŠ(ĸĄšy"ĩ•áĖ‘T•OS^Kâŋˆū1đ­‚]ßčVĐ$¯åĮ™ˇŨzWŖø_QŧÕŧ;gŠâxÃ˛ŒfļhĸŠ(ŽâĩâŊ ÖKíŌŌk(b/1”áĮŌ›đ§ÅZ‡‹ü/.ĄŠķ–áŖŨŅEQEQEæ:ˇÄ JķYÕŦô vڕŪčwwZ•Åô~UԐĢJŸŨjĐĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļ;Ŧq´ŒpĒ2Oĩgčēí†ŋm%Ɵ)’(ä1–#ŠĶĸŠ(ĸŠ(Ē÷—iörŨ\Č#†5Üė{ ÍÕŽĩĪ}§Ã¯—¨hž_šˇÖŧ÷áīŽ|GŦøî˙BÖD8ļŗåŠĀ`}ë×(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽOĮž*ąđį‡nˎiÛÄDHoĪŽ*Ã-n;Ī؋­@Mw#7>XûWŸøûj|nŅÚáÕcžØį­zĪÅ Ęūk¸Ž`ŽfڗFV6úëåŊļ‚ɯ&™ŨSyv<\4ŋ-$žĮHžš˛ˆáî•>OÃÖģ Z˛×ôäžą”IČííZUSQÔmtĢo.åXáŒe™qÖßŦī&G‡Lžû ĮjūĨáOiū.šú;(eEŗmŽōƒĪjŖ­|D‚ĮQ’ËNą›Qh9¸h~ėCÜĶõo‰:^’-A5ė$);ÔĶõoˆēn™kŅÛÜ^<ą‰|¸%WÔúVūƒŽZx‹H‡Q˛'ʔtnĒ} bx¯ÆÉáë˜lm-ûQ›•ˇŽ=OĨ6ÛĮvËáļÕu+gĩu}†Ëôĩø™Ą˙aj8š5ŪcōYy‘Û­ xŗKņú•œÃÉC‡ĪđšĘOˆÚd÷2­­ĩĖöą6ÆģEũŪ}3Ū­øKÆö>0kŗao2GlÛä1ö¯/øĄ+x›âž‰á¸Ixā+$ĒNyũ?{ŧ)mo1¨TE ŠkÄū'ļđĩŠŨÜÚŨ\!$mˇqæšĢ/ŒŋŌeŋ….NĮØ"Ų—l ž=néž9Ņ5? žē—;4ÎōũTúVD?t†š#=õĩ¤Ž.ĨˆˆÉ=9ŽŋPÕŦ´Í2MFęuKd]åÉí\Fšã[mSÂz€›Jž†ÎâŪEŽy ß/LÖGÁ›ĄŖü0žöXä•Vw}‘.Iį~Ušaņs@ÔëƊë}ą ÉåüĖ}…oh>4ŅüCŖĪŠZĪļŦžgĘPŠČ˙…ŸĻlûOövĄũŸģoیX‹ëŸOzč¯ŧGĻéú(ÕĨœ5Ģ(d)Éaęk‰š9Romīl•—1mi2qōúև‰|ggáŗkĩšŧššŽŪŲ7>ŪíJƒIøĨë­ļ— SĨäČĖŅHģZ-Ŋ˜W[ECus •Ŧˇ7ŦPÄĨŨØā(Å'Äë9ÕŽ­ôF])XĄŋXÁ#ņé[š—‰í-t8ĩ(ažîÎÕû:o#=Î+Į>xĸÃGņˆcēąŧēûuÎŅåÂXž^í§XYéöÂ;+HíŖo›b.:ÕĘŠŠj6ÚVŸ5õ܂8!]ĖĮĩqÃâJ­ĒęSh—‘i,xģlcofĮ\WG¨xŠÚËFTŠîā“û:î8Æs\ΙņgFՍßŲm/ė‘™%ÂrëÅjh>9˛ņ™qga| „82s—֏ øßIņ>Ŗyga ŅOkū´K͜ôĻÜxęŨ/f†ĶNŧŧˇˇs÷0¯ČŽ:|{U3Æ6΋ŠéņM46ŽČ@\`; āžxļkÍk^ÔfŌ?uV=ŖqúWK¯|HŌô=j;QŌoRIdōá•âXûÆļÎmGS šā‡øÜÖ]÷ō2ÃJ–im'û|LVK/ã\ ’}ąŪē x’×Åz :­ĸ$ņ6Ÿá};íwōcqÛcīHŪ‚°åĩžĐęÚDļ6ˇŒ]ĮSĐL˙JŨņŠ,<=iŗ––iÎÛx#ååoaYZo"¸ÔĄ°Ô´û:{õ>wūžõcÄ^2FÔcŌíl§žÔdO0AčžĻŠčŋ­uĮĄ‹9ĄģōL’‰<žqŠíh¨Ž$0ÛË(Bå°QÕ°:WœÛübĶļF•ĨŪŲŨ`’˛€6˙õëVĶâ^›.ĩ—{ey§Īpuö”ĀJčĩí~ÃÃzLēŽŖ6ČķcØ å“â$ŅGåū‹qmĻL@KĻ#„ŽÂŸã¯Ã3\YYOxŌÂJ:/ČšîÆ¸ī„~,¸‡FąĶąŽœ\JÅî‚b0I'5ítQ\V­ãäƒQšĶ4[Ôī­ŋÖĸ8PĩgÂ:ŗņSĪl!{këcļhǚf­ãqeŦ>›aĻĪ,#uÁ‹¤`ô§økĮž$Ö.ôëxdGļYË `žßĄŽ˛Šō‹ū6û.Ÿqáølå )T–åר>žŧW[ā ~ßRŌĄĶíínŖK8|ؐ¨ĨyĪ„u{}'âŋŠ.ŽGO‘,Iāzô­+⛨ëãE’ í/XnHæ-ô­_x’ÃÃ:ÚīœüĮlQ¯-#vVüB[&€ëÚdÚdW 9]ƒ/=3Ž•ÚĮ"MÉFwú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+Į>5øWJ,úķ#›æe@Kp? ÔøYá×Âún˛mQoHŨį–÷ŽGâ-Û>6鲴ĄŖBÃũœšéū8XÃ˙=¨ŽÉÂ,XāŽ*ŋÄkĢ‹oƒÖÆėĻTDs튷 Ļ˛|•oĄ$ĐÉmĩfYWœŽô|Đ5Ī ÅŠŲjŅĒGŋtJzש׆üKŋŊņ'Ä-7ÂQ<‰gæ+LŖøĢ¨øŖ-§†žKelŠŒę°ÄĢÁôâší6OøWŋVō˙͝W9n>féüé<7áŨb˙ÂqDįû:Örfžģ“ũd™ė=;ÆVVŪ𮡨ų‹4ר-­NíÛcĮEôõ¨„ŠāĪ„cV›Qž„D„öČāĪĩnü>žÂ_ "7Ī‹“ Ũ>kđŧ~$ņ:Žšo7—ō˛}­ūė1î×geĄéPxT^ÜŪ5Ûé{™‰=dī\ĮÃoËã/Zžŋbą\HénqĘdōE7Æ4ü%cá:îVmNãŋŨ,3í]Œí­<-đˆi–`,“ÄĒŧ|ÄõÎ=kkᖋ†|nŌ¨ŽGO:RÚŽáÜÖÚŋŒüCã[āŪŨ™RCØãđõ¯kąŧ‡P˛†îܓĘ 8úUšĢ¨Ē6›r$g”ŲĪŌŧ/❇Ŧĩxą§|:đæ­)ŽGŸdå_w Ž=kÔüG˛ü)¸”TŽÃ(zrŠÉøë7ÈA;˙&AíW3đãNŠįâoŠ„¨ i3Ôᚭņ/Eļø}āŖ§hÍ7—Ē^î”ŗsôŽą“XžđŅáđÛ§ŗØŒ&\WƒŒÖ øoÄ6Ÿ ĄĶoĖpjv×Aėãy2ƒ•Q\ū¯ã]Næ+}?Æž–ÕRXĘŨÆŧĢ)ášüĢĨņî°\gĨkü8Ō5=Â1išģĮ$°1Aą÷Ŋ…y‹l-ŧ=ņ"KËYžËĨ]ĒĨëD8<­{ž™ši°-ˆOŗl6t"ŧŋᙈø˙ƅą¸\ŋØXOŠxÃÂˇēŒšŠęš<÷RK”ų˜ešWOđŸ]ŗÔ,ĩ›dˇ–ŌīÎi᎐Ģfãۊąđļ{x`ņ3ųÁ’=JF/ŽØôŦ?ŒōĮ=÷„f‰ÁGēČlu\­v?Q_ᆨd}œõĒŪ°‚„ļĘąŠÚ4‘Ԑk/ādŌĪáÂ˙t]°PĒx.Îm;âį‰_Q*oŪDėG+ž+6 üoÕȀž˜°¸oáfĀāõũFąĐ4Øôũ: ´yڂ´+ÆŧGö?ôBõƒYKȉ<)Áâņ &Öž(øbĶOC47›3'!T7R î5éš…uã§Û,?hŠYe#ø˜¯5ÂüĐėõ߇7Ņj(e[šš79įhéNøÅ¤Yč? m4û1ÛÃrģFiß/ŽėūØ-Ģ$i!ŨÅ^đēø–_†ļVZ]„Íh3\yHÛRü+đūŖĸ蚖‡ĒMo0wîŲģąôŽÃÚÄūÔ|Iāų +˛XŖeœācô¯c‡J°Đü ö2-cĩežN˜ĘüÆŧĪÁ -<)ĢŲhÍ}`ÂLŨŨ‹Œ ÖŋĀ"Oƒ¯—ím€NqY^ˇ|wי†BŸãĻxŠ|V°Ãņķ@ōĐŖ\É)%ŖˇeÜÜûVīÃ}ZßDø_ŖMp‰¤ō—hį$ņ^‹%ˏIgē+8Ô ‚29$ôáē*éĢņ:ūoũŖPž%„ĖīļoR{Õ¯üCæ•yYeîîâĸחÄÚOŽ5-SÂģ/!‘€š€õ KđÛÄÆīĮˇņjzØ5+¨Ôyapny¯iĸŧ‹ãŌ§ü#–`Ë].Xw¯BŌom-m4Ë,lšâĸÔ ōoéq\üs×$•Aû™Aįž*īŒaXū;x~TbŦĐå°; Õo‰—|XĐ,ö,ĮļHâsÃ?ųĐüCđ߈ücáĩ˛Vļæ'ßzWIđö+ģÚÛ_\G=Ä$ÆĪncŒ÷ŽŽŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠķ_ļ÷>aoČË(b¨2q\ī„ĩøuO hū°.׹¸3¨ųvØûÕßxSÄĶüJŗ×í,VâŪŲxķBîõöĢß4ø¯K‡N˛Ķ!@ޞų†nũÅij)đčzŨ‚ŲLŠ3ŋwA÷˛+'EŸÆžĶˆtFŊØ6Ap’Œcļs]gƒ4]CNˇšŊÕæķ5 Æ*į"•Ąņ'Áž"đŨž–ą—ŗua +cˇëG‡üwyc?‰v}Ēęl‘G÷`ĀŦ3Dņ–—ĄEáK[Hā…\ŠÔō žžŋĘĩüUāģ÷đč: …•Ž%vlīWIāÍxoÃzqUƃĖĮ÷Ģâ…ouĢ/TĶâÜiōn3`8ŦÃ^#ņVˆ÷Wļ‹Ė%~ËdŽĀ<î>õĐiúĢuŖ^>ĻŠ­L0ÛÆŲX†?qžđwˆ#Ķ×VcąYÚ[Ģ…~fáGĩ{Ĩ´ J`R×5ã;^-Ht%õ §R„,vûķ^yđ§HņO„n'ŗžđü‚ ɡ´ûĮîūĩØ|Lđ|ž,ĐPZmûuŖ‰ -ę;V=Šüc-‚iŸđŒMā@ž{ˇîĮžjÖšđŨĩGĨKqŋQūĐ%rHķ:‘ôíT¯ôkŪÜXÅjąÁą¤ķ7yÄô¨~iū-đŸ‡.4ģŊ IŒ—…„Ŗ.Äôũk7ÁÚ/<7âÛũJãAÅŠÜn‘„ā˜?Ōģŋˆž Oøwėjâ;˜_́Ī@ÕÍéšīŽ4m>O =ÅĖH#KŸ0yxč =Ē]{ž#—ÃZuŊ´æmRKŅss?AëĀūīlT> kz4Ū¸đĐk‰”FoK.Ā?ŧ? ēđo‰Ŧ|Si¤íŲXĮFh-c#ˆįˇÃ&>ëV“?ė,bŌ‘hæōŌõĨÂãą+Ö´'ŗņ/‡ôƒG5BáŲæšY6„cÜ ä.<âģīŪéZ…ĩÅíĖža›ÍÁŨ×?‡JŨđ%ŧ?§&™ŠYÚËm ’ ōŪˌ~ĩá øŗCņNŠŠ]ÛY˜ĩ9 ČąĘO•’zg¯Z›Ãú ø#Äž#Ô4¯ėä˛zc‹|„3:Œ{WIâ-7ÄßÃųtĆÚ=Fâ?*P[(Ģß›ĸé^0Ķ<ē*ÚX™ãĘI ØpyéÖŖøiáoxCHŧĶĩļōØ´‘Ë›žoĻ+Îfņ Ū›{$Wū–úū9[‘ģ˙6ya[žøĢŠÅ§ę>m*Ü)”Ԟ¤šöôu‘ÔåXdu|˙âr˙IņæĨö†5´‘ˇ@U‰ō—ĐÕ>—ņJMāM/‚žĘŪBįÃ끚õ=uīĩkំŧYáKŲ4ˈa]#ĖiRrīéSéūņ.ņRņ6vĶÁyōlāĒúÕ]CÃ+Öž#é~!ŸNļ‚ G WÎÜvķĪOzčŧwāŠõëĢcM•cÔôößîŽ?ģYSYøĶÅə̨E§éË"ĩÉ2Ō€sųTŪ4đMķjēoˆŧ:ˆoôõØ!æ‘Ŋë“øŅáģëjĮXļÔv(Ų [näž„WąéQË•k˙ëV%õÅOpŌ­ŧ+Ę”V8ö¯#OxŲž"˙ÂXĐiĘÛvŧãĶĪJw<ãøƒNÔEŊ„qéō|ã—äxãĨtŪ/đ„Ū1đŊ¨¸-õkr$ˆĢd#ŲŦ][Nņ‡‹ô$đí֗„UžíåÎåSü"ēmGÁÖīđūo Y<ĩí“ī\‡…ŧâˆíôŊXH!Ō´é<ĐQ÷4¤dübđæŦŪ"ŗÖ­oÂFJGÎíųė+ŲôՕ4Ëe˜“ ‰C늲ę6CüCä:GÃßøWÅW÷š$öMk|ŋNNS'ĐRÛx Åz7Ž&ÕtËĢvŽųT\O!ų“Ÿ›hõ­[/ ø—Iņ>ĨŦÚJ’G<ŖũÛī(~ĩoKđŪŠ¨øáÍ/•ūŗaŲõĮá~ņ7‰tojOânäæō­„lÛØž6×wāī ŨOŦÜøŗZ’ūįåŠęŖí]õQEQEQEQEQEQEQEQEQEQEQEQY^#ŗŧÔ<9ia1†ęXYcuĀx[Å1øCÃÖúVģĨ_[ÜÕ.°4‚FĪ\Žš¨|Wt˙ŖļŅ´]"/ĪV¸ž¸ˆÆą(<ã<“^Ģo‚Ú(G"4 ?N1‚1S­y†n5/^ßÁâ=*âčÜÜ4‹{~h`}{ÖĻŊââ]&}'DĐŽįšäŒ’Áą#Ī$×gá}čĶôÆ1íáTfõ8æļ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+”ƒÁÂoK­ę÷FúE?č‘0Â@ŋO_zęčĸŠ(ĸŠäbđ_ÚŧNúŪŗxo]6°ˆáO_zëzRŅEQEQEQEQEQEQEQEQEQEQEQE‚"یH[Ô¨ÍIEQEQEQEQEQEQEQEQEQEQEQEQE4ĸą¨$zŠPĄF{RŅHFzķH¨Ģ÷T §QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEį~;ø‡ŠxFGōŧ?=ށū“ģåÍixgƯ­x2]~âÛËĄ}‹ÜUo|G‹Æ×7p%Œ–ÍoŽ[Ŗ í&玂DIeDg8PO&§ĸŠ*ĨÕęZMm#1öO­[ĸŠįŧ[â›_ é_j˜o•Ø$1Ëąč+Đū)ŨÜxÆ ërZŨO‚›v܌€}ņ^§QŧņFÁ^TV=` ŽoÆ^(ēđޟöČ´ŠoaU-#Ŗŗĩ€˜õ­;ī‰6š}Š]ÜhÚĒŖ)b  ŪôŦū;ø~u˙FĶõ¤î‰q^‹ĸjÛ:EŊ˙‘$rîōä"´hĸŠ(ĸŠ(ĸšĮjœ āw¯:ŊøÃĻir?ö–‹ĢZFŗĖ– jͯÅ; Û}kŖę˛Û7+"ÁßJÛđ׍´_y‰Ļܓ<\K ŠUĶđ5ŅŅEQEQEQEQEQEĶEoK,‹j2ĖĮRŖŦ¨ŽŒXdĐĶčĸšOø‹Vđ֓öũ7L[Øã§%ąąEGđëÆx×íŠMjļė%(NsŽõ×ŅEQEQEQEW ņâ$~6jÖ/r×99 € W_§]CNļŧU*&d zŒŠæŧqâmcÃVës§č˙nļXÚIßĖÛ°ÕÏMã}}BkTļ1Íå…VŨÚģ:(ĸŠ+ņVˇĒčļŅËĻi'P'%Ālmš˙‡gņÅŪŖ Ö+mö@:6rIé^…EQEQEQEQEQEQEVf¯¯éZ "]Nú+eny垃­RŌņ>ŽxQX|âL{ŖÆcŨôÍOđŪęĮJøUg=ø nr+šŪđžĢá+˜ŽåđīŲ‚Æ7Īä.ßÎŧīÄ´=Gâ>›\´vv!ˇĘGŊ+×,õŨ:˙I¤ öNxÜVø•áī´GĪ&Į}‚fŒˆķū÷JŲÖ|KĻh:zß_JÂŨ†CĸîãÖąSâw†I]Kí­ä3P“ĮĩtÚ^§iŦiņ_YJ$ˇ”eXwĢ•‹Ŧx§GЙRúíVVûą/Ėįđē/Š4­xēXÜfHūônģX~ŧ{⟈´ûßx~t†ÚŌãtŲā.Î#]ۃĸx?_ņ;x§K”\ŨÄîSōƒŒWzĖKƒ“^)ãīč×^5Đ­ĸŋUŽĘįuˁ°ë^ƒâ-VĮXøwĒßŲH'ļkwÚÃŊp˙õŨ3Aø~˛ę—qÛų“1ĪZõ}7U˛Õ­–âÆá&‰š †¨ëŪ*Ō<8€ęJŽÃ)åáK xŖKņfŸpŽĀeŖĪĖŋ…mQL—6b āȝøN#ŋøŗâĻ‚ŧ›xĪņu¯JņÆŽ×I˙ƚ<ŨFũ žŅŸ&?âcZ~đn—á=!,­ RĮ™$` fĢēŋˆ4ŋ[Ŧ—÷) “…@2ĮčKe­éúŽ–ē” öS˙-íĮ×Ō”ëšZéæüßۋEë1q´S_]ĶKmKí°ĩšŒ™U˛*ņFŒú+ęâú1bŊe'ĨOŖëēnŋjntˤž0pHę? ›RÔí4›//fX Œe˜šĪĐŧY¤xŽ9¤ĶŽ qæ]Ĩ}:Ôúwˆ´Vîk[اšž¨zT׋´OŨAkŠ_$7EŒ–­Ĩ`Ęt<͍¯ø÷Ē—Ō|7ĢMq(võë€?ZõM Oĩđī…,ėÛlpÛÛ¨rĮŽœ×‰ü<PøŅĒjv 9ZGwOģŒāgë^Õ˙ †„nžØ_Æe@KĶŽŧÔú‰4ŋÛKqĨÜųņDû‚§Yx‡IÔ.§ļĩžŠIĄûęJ†×ÅZ5íų˛‚ú&ŸqPšûÄuÁī[$€ 'wŽRoˆzZēéÂY$būY•(ĶwL֝īŠtm?P†Ææú4¸—Sŋ=3éQßxÃAĶĩ(ôû­Fš“îĄ4ígÅf‡å%ĖŽķL3Ąwaë´sŠn…âÍ+ÄI œĖ."˙YŠU×đ5ģYēÆģ§h6ĸãQ¸#(ŗ1ôuĒZwŒ4MRH"ĩģYÛjFà OŌ­k^!Ķt u–ūā!vÛj ;ˇĸ¨äÔ?Š´Ínv‚ŨäŽáFã ņ˜ß¸5oWÖôũØOpą)áGņ1öë;Lņ–•Š]‹@ŌÛÜ0ÜąÜFP°õ¨õøoJ՝y¨ŦWAļėe=iĮūMElNĨœX'ļ}3Sjž6đötļ×ڌQĘÃ8Îp=ëj ¸.­Væ ’HYwSE`˙ÂyáĪĩKluÃÆpĖx\ũkcKÕ-5›ŧą”K}*íy?Åßé–Z΋o+I3ˆØ'üŗõÍv ņ‘ĒéPYiˇ"g´@ãŒRë:Ņ´{˙°ģMqtŧÉ´FC÷ÅjčúÛôû…•á‡B>ĸ´ĢÆų˙„[Û÷žĮ&?*ķo„#Ķ4}qĩ䝘*Šc\WĢhÚZ›6åfNĶŽÆŗõŸč: â ÛĪŪã%"Bė> UíÄgˆmMΙtŗ 8luSīYڇ<9Ĩę/a{¨¤7(v”`zûS/~ økN™"ģÔVp †SČ­iõÍ6ÛI]R{¤ŠÍ—rČüdvŦ?ĮúŖz-#¸’)Xá<čĖaū™ŽœŒŽ”ĩ‰ŽøŗHđę¯Ûîq+đÆģžŠ)š‹´­yĖV˛ül0Ę}ŦÉ~"xfßXūƟP]īØЁŸ­XĮ>›SM958ÍĖĩ‚cZē–Ši¤XŊåäĸ8WŠëšČƒĮ:Į–ËÆō8DŽT*ğcU|UŽøBÎâ+ov–24š=Øô"ē?ļZAĻ‹ŋ1#ĩīÜxkÔük¤k:Ŗooį”’Ú@“6Ö¯uoxoHŊ_ÜŽWē3gŊvßtØáåÉPˆmĀ)§øk  ėŖ•|Øö6r+˜ø-męž'X“÷&á“iĀĪJŠ›i/ĮĢ‹senÖË ĪĶúÔ˙ĩÅļŅėt%Ņ-æŸË›Ę ūĪã]fˇĨÚ„ˇŦ1–Y\€9Šåūk2k u(ĩ ĖöŅȊÎ7dīøVGC¯xVW˜Æ÷NĐĢã&5ĪoÖŊwÁūÂ^ƒHŠva$ųÔæļæbHãĒŠ5á îÄ_õŊBüų˛B‰[Ŗq˙ ˇņBō_ üBĐõ <ˆŪāĨUā8Īz‹â=ģøĮŽ֑Ļ•|Ü ų‰ N:ö=7FĶtxÚ=:Î+dc’#\f¯Áá(Đt˙ø^ú5ŠZÆaš/1ãŲÁošŊ3đØZø#[ąĶDQy6ÎZ(ú'ĀüđũĻĨā{‹›čÖ\ŗ$a†B­Gđfi-u¯YÄÍäC;b"rÆ=*ˇƒuÊü@×õM^Ōk§ˇo.XËųkĪŖsĒYü^´Õ´:ú+ €‘Î<–AÉ į?…{âļå ;ŒĶĒŽŖ0ˇĶ.ĨnDÍúWÍß ŧDš:öσíÔŪU´@|ĖĚöŋøn}>)5]T‰ukĪžg?ÃūČöŅęē”F™q}pq(Yx†âKŋ_j:Õĩ›ßj ĐŲBW)xöŽÃMđÄÚ_†--56Ö%Õķ)ų]ÉÎÃíĪJã|ĨŨxãIÖŌ-Ģg’(›ũ_˜zėĩģá¯_ø_G6zԋ5ĒŊԌ9FnËô›đō3ŽiˇšĻŠüJtųåbū ŽHöŖđwS–ŠâM[ŪÂi˙t§…ü*ž¯âãâ_ÜZˆäēĶôĪõ6ą ũĸ\ã'ØVļ—ánâ éīZ;{NdûDvīĖ.~_×U^ĻŠņ‚úM6%KĶí~ĖYFĐHū} fLƒÆŋqßiĻœō29ūĘŊäĀĨ¤é_<ÜZ|sē„I*ÛYņæ)Á]ŧqø×§Ūü8MEĪjĶ[7XA´ûtŽKÆíoáXô¯øfŗŨjlI|â<āœūucâm—†ūÛéö@GtĖŠôsũî~™ŽƒÁžžđ÷€l,lbî}˛\<ƒ}īĮW)Ģ8žøŋoĄéĨamvܘFĶ‚yįßúÕŋŒYø@Ō"ą„AwÂ}Ŗ*ZŊņ3Å7Zo‡4Ŋ6ÎBš†¨ĒĮđŒ ÍYúv‡wĒ&›cmlļ>ąu–Yįų^îQÎyėMPøŠŸđévļŌ—YÕ/ÖRã–7{ijŋ Ļ×gŅī÷ĘhȖīpųŗžĩޝõ øĘ=~?ĩéâŲmŨ—Ÿ,§ëWžčú=îŖyâÍ:úyžë!á“ūY“ÚŊNŧģâuƧĨkÚ.ĩaj/–Đ6ûQÉÁū,W9¤xĪG×ü¤Ü˧>—¨ÂYZ7N$Čč [mZëRøÍ4ķXËq„~TQ'<ņķ`ũjĪ‹ŊŠxßBÕ´]ö!nū\ėęm$uį§ZÎÖĩ—Ô~6YŲŨĮ,é§Æ Úĸõr3ģõ­?ˆ6Úæĩ¨č÷Ú&‹v“XO™ e:Ĩņļ­4žˇΈŌ†֏ÄŨ ÃIøK‹[xãxLl˛įwŽj·tkIū5Õä 5ÕÍĄ’YrN8üLJÁųŽ/~j4Íž9dŽ2Í÷F8æštņ Đôá˙xaü¤CŨĸg#ûŲ¯Sø[q§Ëā[(ôųD‘G¸^Ŋëĩ¯øįkVzKÃm–[ÅÜáyc]ÖĢ{cᯠŨOk1]-™". akøŖáŨGVŧÄח7l^W䡰ŧ'ĒKĻ|uÕt¨0-n‹(ėØŊŪ°øĨ@Ū šîp˛4˛2Ã8Z>(Å~,Š‹hîHEí÷ŠēD áī‰šēŊŠü_dĨœC|ƒëč*§Âšßūo‰`…bŌ§>•oã>†ļōéž)…}œĘ%xa‘×ü÷­kx´ĪxŗK¸Hcxtû_6B`ģãoō5ĖüE× ŸôM Âīam‰ >ķvãŋJĩņ5īĩũ.ČhúôWVōŦĒíߗë^Šášî.<9§ËwGpĐ¯˜ÕMi;ˆãg=fŧĀīâĪĻĄzÆEˇ WūĶIá/Å)|C,Š4Øcm„7;q÷qTž \mjū#Õn˙ys%Æ2ü•\ô¨ ųŅh/˛Û‚^ĮļU:gúU_‹zl7?|5 QĒ<Ō¨rƒüÂĩ>5iÖē_…ô›ĢHR›{´XŨã˙­ZŪ9“SšđV‹`‚{¨dIĖ-˙-p:b¸mGĮ–"Õ4¨õm"]*ūŪåNëĮÕürŽŪ_Ų^ˆÔš¸L69Ú{UŒÄö_tĢKFdKĩUr:íĀâģ-GKĩ? ^ՕOáąĶåŽWá%ŲĶ~ßŨŊ Č՟đĢZeŗÔīo,.¯n.Ž yQ7qéZŪ°Õí~ kM&-žw™TH¸Ŋ1\ī‡tHõŽúēÉ´Į™1Ž7qЎã] >xgWŊąš’KZ} ž6×ųֆ‰wgođÎ=" úå¤ĩÁ•-Ž$b:ƒßšÂ]c_đ˙Á+û}B íŽÕÄÆ˙ëWĸxÂŨūŲBč6ÉhYÎ:’3šã>Æ#¸ņ*¯Ũ[…˙¯j,2@ĪJuQEQEQEQEQEQEÖPĘTô#ŧëNšø{ņFmnk)ĨŌn~ō$/ˇ$uģ-GÆ˛ø˛ĻøZŪí¤•€’åĸ(‘Žį&ŗŧoāmE.´ŸéČ×wļ|čĮŪ‘{ÕO_ëž7đ|ÖöZ5Ũē Ė‰*ív>¯ü=Õĩ-3ĀíĨÜčW°Íi š9“wĨdü1:îƒŦę+} ]ĮüûÄØųP{˙3YĩÖü+ņb_eÜßÚĖ›WČ]ß7Ĩ^Öŧ Šx‡ÁSÜKnaÔ¤¸û\pŽYOeĪŽ)ڏŠîõ CŖŪ6¯$_gxÚ& ™Ũģ§­\°ŅoŧđâM*ÛMžōúæ6Ūa¯įT~M­ø~Ũ4}G@ē„\Î]Žų5ėTÖPęTô#ŧY4̟†_nõdą¸ēŌ/Į&Ũw˜Î{ŠžūÂëâW´íAtë‹m.Ā}û„*dlįĨPø&ąwã &m?AŧšÛO9g ÷ąéųWŽøwV}kFŠōKi­‰VŽUÃ=ĢZŧ3ĮkŠh?´˙ŊœķØF›r›ŠõūĻ´îĩ ˙øC5ģųtÛÁu­Ā#,ę›pģŊ3מÕÃ-^ø)´ëũQŽtÜØō=1ëY /n´ë }¤ŪƚŒįl m=Íj…ģøuņPŋ{9ît‹å Ī {ŒoéW.ĩŊ[Įž Ķ Ņí.ė´Ûi„÷ŠO0áõ¯WĸšīęŲž ÕnpċvQˇŽHÅy¯ÁO‡‡Oĩ!Õ#?h›˜"q÷×ë^×\ߏ4{wÁēŽŸhÛg’3ˇßÚŧëÁž }–ú›¤LÚØŨ™ˆ…SũâĮĩnxļÂ˙Ã˙ .l몚ęūįũaQ“šÍĮã[ŋ ôđ÷ė-d‹Ë“| Žw­ņYõfđdÖz=¤—77GĘ"1ĢÜÖe‡ƒîlū ËĸCËé­X¸K‘X>đūĢ=Ž›Ĩļ›q§ØY6ååZâ^Ø˙fĻđ°šđ6­¯[Ūé—W&{g‚ÁÔôģWwáũö85 CProĩ$ĻxqÂ×āØnŧ'Ŗk6‹a7ö¤ŌÉ#ÎSäEĪRĮ­Iđ;IF­Ž:ŗ›ģ† +œ–ë^ÅEp$ø“%ūcĻjWŅŠc™wcÖŧÛá>¨žŊÔoĩģ ˙ļŨËÃ, G={zšúøvãDŅīg¸ļû)ŊšiŖˇ˙žh~č#ÖģęķŒžÔõ3LšĶā{gqæI}â=ĒÆ‰į‹õI¯.ôų­4åą6. ėzœzV†./> ũ.˙Mŧ¸ą’V–Úh"/ģ=¸éW>xRú5{&´{Ļ?e‚Ož‹īøWŦWņãQ˙„bīOĶtģ›Ų¯!hķá3Į5Įü8¸Öü+áVŌîü;}æĻæČQ†Ī@*/†VZöâmeu &x`žwu…É'šÍđ„:߄|]ŦĮsŖŨŪ\]š0NąåzœdöŦˆ4īi^/Ö`}:č]jŦžTđ§ÉŨ““íŌŊ§Åš(Ö| w§Î smŽ;€˙ÃøCáįĐŧ­pŒˇ7.]÷˜ÞÕCâ7‚¯îõÛ豉/lH/yzT—Ū1Ö|C§3GŅ/ Ŋ˜ä–tØąÔæģŨÆM7F´˛šc<Æ¤=XúÕ⥁x5â7Ú˙Èsø‡OĶæģŌī3æ,+¸Ą''Šë´CUņĻšÛØ\éúE˛ˇkLÄcîúV‰§Ü|3ņF­#ŲÜ\iwīæFđFXŠūíXđŋ‡/ĩīˆw^0ÔŦäĩG—mÃæ#xŠČņ厈5?ˆzVŖc ŪÉoĻHÜ'ßūąņYu˙éVVŊ)Vwbŧtéú֎ĩˆu=ÃOĻiķAyk(2$œmÚŋÅLņ\xģK]+ūÉQfÎŅąķÔ5;ân‹ŦjĶt-2Æ[Š!(ī Æ>_ëVõŸ ŨxķĀÚÍg%•ížBa‚J˙JΏŸÅ:įƒ'đķéÚÉąŠk‰8WÂã ëŸëPü(˛ÖŦôYü5ŦhōÁo"ŋīĪBcīQøuõo†—ˇú\š=Õ턲™!šŨôW[§ßkW÷x†âÂæ!„ĮņHOņ\‡íe õ ږšä*ƒęˆãŠÃÜf€ĒšÂŸANĸŖšŽ"hĻdēĢ ƒNDXĐ"(UQ€juÃn]"EcԅÁ4ō ÷ĨĸŠ)6‚AĀČī^ņOÆúŸ‚ôËI4ËEšk™6oq•KĚũī‰<'gĸiäkęhĢsōÅŪ'ŌģŸhļŪĐítÛXÂĮ ãšîkVŠĘqo-2{í§yiũÅüŠ@Å-æöÂÚú o§ÄB(ä†zôö­?†‹Ĩé~Ķôû{Ëw¸tęŽ ,yüëšĸŠ(ĸŠ(¤ ĪZČÁéHǍĄT@)ÔQEQEQH@=FihĸŠ(Ļ”V`ÅA#Ą#Ĩ:Š)8ih¤ ‚ôĀāPT0Áz)hĸŠ(ĸŠ(ĸŠ(ĸŠáÛÃú—‰õĶqâÖ-:ĘmÖvčÖī=vā``tĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸЧ¨é–ZĩŖZßÛĮ<-ü2*3AŌ´`ßŲÖ[–fEų›ęz֕QER2†R§x5‹˙‡‡<Â˙ؖĪVō&Ļ´đŪ‹at.­tËhgV­QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ_ˉßíRp;ןKņ‡@ƒUM6{{ØŽZM^=š9Įzô(ß|jŨ7iÔQPŨ]Cel÷âŒnf=…pßđļtyREsŧΞ;§\FįÛÔ{×yŠ4K,gr0Č4ú(ĸŠ+ņ/ÄŊ—æĪRy–P3ōĄ"ˇôrĪÄZLZ•ƒ3[Ë÷K VQEVNŋâ-?ÃVKwŠ<‰6ĐcŒšĪáYūņæ…âģš­ô›‡™á]ÎJÅMĒøĶAŅuk}2öũ#Ŋœá"ī[āädtĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĒIā âu/‰Ú.,ãĘš¸‚ŨļMqyÖēÍ7QļÕ´čoŦä[Ė쑇qVčĸŠ(ĸŠ(ĻŗVcŅFMrĝÄ^"ŸD˛y~ÕîY~WĮ\WcEQEQYēöˇgáŨãSŋ“eŧ+“Ž§Đ ­áéū-ŌRĶ™Œ%ļÃknŠ(ĸŠ(ĸŠŖĢęI¤i“ßI ŗ$C%!]Ė~‚š¯ |HŌŧ]Ģ\iļv÷PÜ@›ÜL˜īŠėčĸŖždˇˇ’y5.ĮØW%ā˙ˆēOŒī.í´øæGˇëæŧ=kąĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*¤ēŒ˛kČ#%ÔŦĄTinĄUēKŽiķŪÚÛ@gšx㈠–fĀĸÖöÚö%’ÖxæF Œ >âæHZk‰R(×Ģ9ĀZËYĶu,ũŽö ņ×cæĄģņcpmîĩ+he’@Š_ZĶ#¸Hö+ũÔŨÉŠŽīí,aķŽî"†?ī;`S,u[ M Ų]Å:ŽņļkÆž.éč|sáŠaUŪ`2õėręzuŧ?lēŠĘ263Å ÖtÆĐëŧTąjsÍäÃu ɌėWâ­Wœ|`ÕüŨÚÚNĻw`ŽĒß2ƒYp|=Ō|aá˙/ĘKe–H˜sŪŊûcEŅÖĩx@EGn5Ļg‰b´¨¨z18 ]VÁãyÜ[á˜ļŠā¸†æ1$2,ˆ‰NjZk0U%ˆw5į×^0y~+Yčļš„bKvyĶ#ž´ßŒVwŸ5Ŗ RKFI0 0ÎįVūO?4‘$‘Æ|žŒĀWpŦŽĄ•ƒ)čEAsif3sqCũļÅKŅˁâuu<‚§5%! “TŖÖ4ŲĻ1G}nŌ‚ĸAšŊUnšÎE0\<#îČGō5ä †xŽ8Ô˛ācĻ2k­ņÍÄ>,ĩ×.î]&‡nčÖ@`äWndŠUy8ĀÜØĄŽ!E ķFĒzĀfœ˛#ĻåueõŠ`ēˇ,TOaÔoWXÔíôÍæōiŌ4H؃ŗ`g…đûS›QđĩŨ娚y™Ÿ,@;sÅtâęŨ›jĪo@âđ˟.T|pv°8Ļ‹Ģs/•įÅæsxĪåSUI5+§Éw Čz!qš°ō"!wuTūķ bŨÛēŗ,ņ_ŧCŒ zH’ xŨ]Ou9įŋ|Ršl:f›ixcŧģēAû§…œûvŽîÎîŪęäN’•6ÖÎ*ÕG4Ņ[ÄŌÍ"ĮŒŗ1Ā^ĶU°Ô–ÎōĘõ¸lV7ŽĩtŌŧĒʡ Čļs–į8¯<đ†tß|(˛ŅįžĶO3K FÜî'šõ]Eˇđö‰kĨZäÃn›A=OŊiŅXĪâŊ;ĶfúĩĸÜįW™ķ~U­æ'—æn1ŨĢ.čw7fÖVÕįlYjõÍũĨžĶsq[žîöÆj3Ģéëno` 'Kšš‰ž,‹CđÛĮkząßÜ:¤Aæä×Sĸ]Ĩ֗oū’Ęą¯™†Ééķëz]´ŪLڅŧrįAššž)!.Z299ãÉh đŽ•â WKXÚúL“ļMÛs×ÔũļÔ1SsāpG˜3NVí'–'ˆŋ÷CŒÔÔTrË<˛¸HĐe™ŽBËÄFĸqg¨ÛLؐĩ ũĨÄ­71I"õUpHŠŨÕŗrIĒēî•{pÖöڅŧŗ/TI5[ÄÚ~ĢiiúÛF-eėĪ´ūßiÚ&‡ĸ-žŽŅ%Šî‘Ÿ­iũžĪc8ē€ĒōÄH)m¯m¯›iã”/Ršāž+øēÃ˙bĩžXõ™UQž`7 Æģ=ō 2ÔsēFĸB¯œwĄ5í&Id‰5 vxžú‡ZŊ Ņ\B“C"ɍĘęr§’$œYqø—Dšä[GĒZ´Äí$æ­Á¨YŨLđÁu’'ŪT`H¨/õŨ+L•"žÔ ˇ‘ūęČø&ŽE4W0‰!u’62œƒ^5đŲ"ã‹?Ū¯^ŊÕl4á›Ë¸`íļ*KKÛkčDļŗĮ4gø‘˛+Īž(xēÛM´´Ķmu1 ô×HŦ#|\ŒæģKmWLžŌšOļÛÉ@ŗ>ņ´dwŦ h>ŅŽnæđ˙‘æÍķKåÉģ°]ęWŸq]ŋį ÃâO ÎΌn∴Dq†¯1ørú-į€ĩXõ+Pní7+7~œW¤|9đ&Ÿáí>Oːę7åŨܝ öŽúŧgã7†4ģÍŦE‹ÉĨPÎŌuZĩļŌ<đÜø†Â9ę{Qüdî${ûÔŪđՖˇā–ÕõHŖēŋģ )×,­×ƒÚŗüĒ/‹4-kÃē¸ķ–ÎGØw°Ås ü>uë/élŽc†Wōs!Ûŋļīn•éß ü9­xoC–×X”—2ˆ[;GųūußÕ_L‹XĶ&°äHæ]ĨŖ8"žwđīƒô̟‹ē–‹+Ü5ŧKō¸˜‡'ë^Ĩņ/NLøG¨X[ (ãTÛ'nîæ°ŧ á(5Ÿ†ą]jm!”Û˛@7cÉUéįVžkwgÂZÔ.šhėe#ŋ$*×1āûŊ'ĮúūĢĢx˛æ?.6ZÛŧ…QWúõ­ø”iŸîŧ5a7›ŖËĖváÆp§ŌŊļ¸ŋŠ+­I⛍ô æåąģaÃmīŠō­zËJŗø]o¨"ÁaâJą?ĪÔy÷¯KO˧ü"‡\”ŗÎ-æõb:ÖoÍ-gĀ˙Úúˆ3ę…äi‰`rqũ+›ø$d˙„ˇÄĸQ—ķˆ'ņ5Ä9´ˆŪŽĘōéaŊ›|¨Ōąîô­ßŽļ‚? Új+,ąŨE2ÄŦŽWƒÖã- ߅1ęžmÂŨÛXĢ!IJ‚qÎEKá™/íū‹vvģû<Ž­qŅęūÖ|6Ņi÷ō隨‹ ØyŽA=ōk˛ņŽi}đžĢĪ:Vŗ´%8,qÉõŠūø/MÃ6‹=ÃË5š­+7Üûׇ䎸Û/‡í/.cŗ)“ûŌX) ëZ3ĩŸĀž:Ō`đũ˰ĮŠ)ŽXŲÉq‘Ÿ­_ø™á¨ŧ+áû/iSĪĄ Ē&›Ícægךí5ßÉĸ|-] ŨŊĒ´Yč]ąŠæ|'eĄę~ Kíjęu[ÅiZWoXįôŠ>j ã__čÚģ;›7ō÷îÁ*:s\īÂ-ûbī\ļžē’k {‚‚"į.Aãun|?ŋ›LøŖŽøb)Ũ´čÆøcv'gųÖ/Å i‰ņðCVÔ%&ā–?7Ė+Ø|?áÍ/ÃPŊļ–dÃ82$ū5ĩ^5âŨrãğ´ī–ÛĻFûîy¤Ø5kâlPø×KÖôxí%ŠqŦcãĮ ŽõŖãí7MņÃģ=žë‘eæDäãUƒ~ŌÂēnŊöru˜oķút¯Xĸŧãã‹.ŧ3áa‹´wWm夃øGzÁÔ|+-‡Â[wŅô¸îĩ;ˆ–YeŲēLļ `}k3ÅZūĩĄ|+Đ4kšßQž"9Iá„yūuŖâđÔ?ÛM€JŪņHąûũwSob.ø+ũŠŠ[šÔ-!eY!^Ϟ<1āÛ˙ü,†x_7áŧģs##@ŨŊũiŸü#gĻ[xpH&Ą<Éō—'wcO˙]zž•áKO čW‡DŒĮyqw3–ąĮZķoÚEqá]^?ÛĀ5 ÎÉ'Ū”ņ÷Ĩt˙on5OĪ ä­4QÎđĄcÎĖtŽwĀÚtzWĮ]rĘÜāŽe98¨>'éIcņA]9åļ{éšQÎ ČįŧÕŋŠZ,Ō4ŊgIi`ŋIÕ^_0–“ũī^õëúEÃ^höw2ŧĢ1÷Å]Ē×öPę6Ų\a 8ŪžuÔümŖ|b˛Ņ´vši# ˙>XœãōŽĢâE¤?ŋąĩM/ŗė›lØcûÁū×­^øâKũF-GĶwĸjŦ­3Ąųŧž3JŗņÃÖđIÕt{U´ŧ˛ØRH†ō>÷­?R–ĶƟ_Xģ‰ZxėÚEaÕjO„v1_|0‚ ŦKĖÁ”ũk‰đ?…’÷âfŊĻÍ<­Ĩ[ąŨnĖq ĪĘĩlé7…ž7˙di¨Ņ项hˇpČüjŸÆo iĐęú-Ô05íŪɎ~đŽúįÃv>đ^Ĩ…‘u5Ž@Vå›åßđ“xF˙ÂĪĨM 隞ĮåyĄJînų>ŸZöŸ`x?KĖY p*SÁÅn:‡FF 0kįørĶLøŋŖiÚDdJ¤˛sÉ''ëŠíåđ|Ūņ%įŠ-ĨUĶ-lX˜Crė$úķŪą~ëFĨe¨ë> UšōōfÁ’"ûĐz ŌøaŦ\/‹ĩ­WĶ­ŨyûŖ5Ë) øĨ⚝p­÷9ę7sNšÎō?‹“kĢm&•:•˛p:_ÎŖđ Ÿeøŗ¯iö/"iŪP‘aįjž9›ņ_Ã:T%Đ $Y/Žŋ~ũKåšÍzĩ‡…t; *].ŪÂā™s,@d1Æ3ŠķOƒvą[øˇÅ ÂE9S<ÜxŦ˙é֞øĢ¤jÆÕ~ÁtÛ$\|ĒOØi>Ōĩ¯_ëmbžM˛¤p‘ŅŸŠcī\­×ˆíŧCņŽK]X“Ļi¨Â(HĘŗŽŦGÆŖņf­•ņEÕ<7Ŧ'÷wKEU†{ūuîqžøŅ˙ŧ Ögˆtm?[Ō¤ƒR€M áXô u¯ø/áŊU]R{Ëåh.ķ °éZ_õ9u‰ē…ŲĘØĻvųüĒįÆ.ÛN𝮧c Ásip‚7Œm?Jëūëōx“ÁVķ˙¯Ų˛O÷—ŠęčĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯øí¯iˇZe­ĩęÉw ŲxS’:õ­ũ7Æŋ ųVD´ōYqĘļ+—ø%¯éÚ6Ÿ¨C}?–ėå”凭SŌuûKŋŽ’ę°‡6ŗ ĒÛN qZ&͇„ž+'ˆ/-šM.ãå’]›‚ũk°ÔļŠâw}Ō8€m‰{“\čr ŋˆÚ%Õ°–H,åÄÄF~\Ÿå^ãa}k­é‚âZŪQ€HÆ:đ<'w§üe}Ķ‹+×ČŊŠg'õôR Ž5Eā(SëĮ~9kšuΆ¤Ō"˜ĩüs)ōÕ}ųĢV–v4øJ4Ģæ†ÜåXūĸđw‹4īø ´ReļÔ,ŅŖ0ŋ ĮØ{Õ†ú@đžƒŦx›Y?fKÂė€˙ œã>õđkÅ:nĢë w?—öÉķáŲ=Ģč%`ĘNAę+įÛ]^ĶÃ_5ģŊE–Ū6Bci:Ålø“\AđĸūKû‰úŒŦöą>wŨĮáŠÛđ?‰tĢo…vËqxąŧVæ)7pCc§Öš?ƒw–7ZNĩŖÍrąÜŪ;„ŒũæĪp*?‡ ĨøKZÖŧ?âx`‰„ĻH¤š^}ŗė3]†}Ļjž>ŗÂÖVrY[Škģ¸b_öCzæŊ:ŧĪã]Öŗoāā4–™äÄīŪ Ū¸­n}&÷āøĶ´+c=Į”˛]2!%0AbĮÖ´4‘qâ˙Iĸiī#ÁšĒÃopūĩ¯đ÷ÄöZ/€Mģ}š…Žôkr~rsé\ßÁU`ņŽšoz SŨĖYoVÜk_â˜Sņ7šũįCūđ­ĪŽlú‡€™ĄVam2ĖāáZÁņ/‹ė/ž?K´\=˜IzÄųˇzSŧ'Žíø VÁŨī-“ Ž[–éLžŌü âí7ŅŽ—Xhvųn¯ŒôĢOe~ŋŗũÍŗŦ˛\›Ë\Û3Įū;Z^ ×aēđŋ‡tË ŦŪ&Ķ2F~ęü~ŲŽV]{Nŗũ .onŽ-Ŗ‹Ęķā7Ļj?‰Úî™}ņÃAu°Û7īŠōæī[?uũ/PđDVvw"yå™4žĘ´¯´ØīÖ­^ë÷zü•ī‡|ŲbŗĶŧ¨äėiN3ˇÔ€?Zæ<­X[øōĖ[É?ˆnLĢ"˛’ė}OĩYø7â4ĶlNˆņļ=܏:°ÆÄīŸjÃZõ´õ›û*ÅržTRl$;|ŖĘŽüFÔ-ŋáfxzeW‘-$"á•IôëNøŲ­Øę^ąŗ´“ΐÜ,ŒĒ§å\u¯Fđv§a¨xzÕ,gYD*8•8čkĄĸŧ3Į—‹ĨürŌ¯ ÕrdŸŊÍk|ZŗŸÆŪĶtĨ35ÔžnåûĒØšÄ Ũéöš­gæ:é%uĢGÆ•;Įž,ŗņ/ƒÆ‘Ŗ?Û/ī™ÉAķžIôŠõx`đGÂŅ'f{É­Z0Kn‘¨ø3ĒDž|É"]BYŨ āuŽĀZō[|H×î¯<ä‚éȀ´gjŊΊm_ãUžŠ—ūÍEŲį nÚGZÚøÎŌ¤žÔŧ™$ąˇ¸JTg1š›Qņ;kZ~Ģ­iFamkb!Š@ĨwĘNxüŠēŠxF÷ÃvĪâ{áÕd€;F‰‡Ũję>i÷zoí`ēWLģŧqÉÕPˇĘ?*ė$uŠ'‘¸TRĮč+įxŗOÔ>/éÜschI!°1š÷ Ÿ‹ŧ+:[žû[čY#Šōŋkv_ķÞ#F€ŦåĄ•Ŗ%]{Wmcâøneģ֕ Ũ6 D›ÔqŌ¸_‡~#üFÖā žôVt#9nŸ­F§‰ņG[ŸÄqĪ,…ąiš gĸū•˜5kŊ âv­yökˆ§ŋˇ lŠ„Íĸē_Šą\ÃuáMVhŨᴕá€ÎĶÁ$×AĄø–=_W՛c"Ưi ,cj@vjgö>ˇgØmögvŨƒõÅ,ZVŸË46P$‹ŅÖ0¨5OčúŅRĶmîX ‘"§Ķ´Ģ"Ø[éöÛD?†4 *í2HŌT)"+ŠędT1iöpÆņÅm#ũåU4ļ–6ļ1˜ímã…QāT'FĶMáģ66æā˙ËCÍr0ņ–‹āKË@úz5ÍĶã1 ĪÖšoÆÚ÷ş Gl ōãķŨqƝŸĘŊŠXŖš3¨ŽÕXdŖ¤C °Į§[$rŒHĢžĩ-Ļ•§ØFŅÚŲà 7UDŠį@Ōo.âãOˇ’eûŽÉČĢūT~W•ą|ŧcn8ÅT˛ŅôŨ:G’ÎÆūņ&‡Ņ´É$iÂŲŽK†M ŖiŽI}>Չ9%ĸSGöF~Ão1÷JšÖÎÚĘ3Ŧ„įlkU.ę0?LÕ/ Mü2]ĮĻGiķa& ۞Ū˜ŒSĒ!ęŽ2)-ímí Û‘D?ĸ‹M˛‚s4V¤§ĢĒMiļ0NķÅiK Ãē žĩ1ļ€Æō;íÖ´ˇbY ‰‰ä’ƒš •Ą6ПŦb–[{mūD1Åŧåļ(ŊMExWŠLS~Кb4Ģ"ų*ŦDāņ^áPƈ"|ģT>”÷E‘Jē†SÔ‘U`ŌŦ-§3ÁgržŽ¨ĢLˆ˙yžŖ4Ն$$¤h¤õÂã4ĪąÛg?g‡>ģ)ĩˇ`‚"@PqDöĐ\Âaž$’20U—"›•¤V˙gKhVųæmü¨’ÎÖgW’Ū'uā3 $Tā00yPézyR •ž ĪúąV!†+x–(cXŅz*ŒQĪcitAžÚ)Hîč H!‰cˆÔ ūŧR}š Áŧ˜ō:ƒŠFļäķZŒŸŪ(3ųŌKfœLÖņ@Ārƒ#ņŠ$Š9SdˆŽžŒ2(HŖHÂ$jŠũĐ0)  ‰ ^„¨â–HŌXĖr"ē7Xdr¨P öđÜÆcž$‘Uq‘QÚØZY)ÖņÂP‹ŠŗEV}˜šûHĩ‡Ī˙ž›īΧtY‘Ô2°ÁŊWĩĶŦŦŗö[XaĪ]ˆjÕQEQEQEQEQEQEQEQEQEČx‡áŋ‡|OĒ&Ŗ¨Û9¸UÚZ7+ģëŠč´Ŋ.ĪGĶâąą„EoÂ¨Ģ´QEQEQEQEQEĖxˇÁ:o‹b€ŨnŠæŨˇC:}å56ƒáctd–îũÔ+ÜÎrÄÃĐWCEQEQEQEQEQEQEŸŠhözą‡íh\DK(Ī]Ž4Š5Ž5 Š0íOĸŠ(ĸŠ(ĻHždl™#p##¨¯=oƒ^{įŊ’ãQ{Ļlų­pwĮ­wV›‘ĻÃcČņÂ0VÜĮęjíQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖeE,Ä:“T×XĶ^e…o팭ŅŖ'đĢÔQEW?7ŧ9o{-œúĩŧSÄÛ]]ąƒZ:vĩĻęęįNŊ†ä'Ū16qV§¸†Öšy8”e™ŽŦåņ>„øÛĢYœôũđæ­^jv6Föîę(m€ÍvĀÁ¨¤×t¨ŦŖŊ’ūĩ“îJ_åoƟcĢéúš;ØŪCpŠÃßp_­>ßR˛ģšH-îĸ–X¸tFÉ_­[¨æš+xšYcy,ĮSmî ģˆKo2J‡Ŗ!ČŠ¨ĸŠ(ĸŠĘ›Äz-ŧΠ筚H‡ †eƟJgü%zíŋÛ{ąœyŖ5nÛUĶī%ĩäąڎ Ģ´QESŸT°ĩ.{Č#qü,ã54ˇ0ÁžYQ!qv8¤ĩģˇŊfĩ™&‰ē:6AŠčĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ]ęúuƒˆī/­ār3ļIœTŅ][ĪjˇQL.á"œ‚>´Ë=FĪPF{;˜§U;IŗƒV¨ĸŠ(ĸŠ(ĸŠ(ĸŠ+>÷[Ōôé<ģËø |gk¸ŽĮ"ËȌeHčE>Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+ÄúŅĐ4 ­IQdhWpFīPhׇŞŽ{Č î2ģ{WƒÜčøs㍝ĢH-÷Ãɜõ¯ĨčĻî]ÛC Ū™æEÂ|G𾗨ø^ōCcšv_ßų†N3šōī‚—2h><Ô47bRPWôe5é˙&ķŧ2úb9W¸VvĮ]¨2zžkˆø ĸiˇē^Ŗswc×Ī´<ĢģhĀé^ņÁīã-4Čn¨Yäô¨íü§Øø t°.ⷉŽįįĮ| ą áũiRL¸x‡=8­¯|6ēđ‡ˆ5 NãQkŸ´ä*tÆNr}ëŖņGŠAÔ4{H >Ąsäã?tc$Ôž4đüŪ'đĩŪ•ɡ–P Éî*‡ÃŸÜø7ÃŲ÷—_h™œģ0<a]…QEQ\gŠŧáë­Uģm2šxžF•W [ÍyĀ]KÔĶVšúĘ—Ô!•7mj|fŌ đĩ†Ÿâ }‚é.<ŗä|Ą˛ ä~é~ÖĻņƒ´íJá6Í4@ŋÖē*(¯øëĸXÚŽ™ĒÁŽîâė$Ŧ‡Į^kĐ|Oá‰|žavl` öÖQEQEQ\—‰|OsŖø—@ĶmÖ9ūVY”ũā uÖŅEQEæ_|;ĻŨøJīX’Û7öčĒ’†9ÆzVˇ‚ôķ¨|(°°24^}–Āã¨ČëPü8đūKß>üÜĩÁāŒõú֞ąâyŦŧkĸčVâ6aÚ|õU+ĒĸŠ(ĸ˛%´ŋē#Xâēxb1ôe­uQEQEQEQEQEQEQEQEQEQEW„ükŗņ$VĪs>°ƒLyBÅn‹ˇūúŽËáĻâK}"ÆmGSŠ]<Ā<ģtqĮ5ÃøčŊˇĮ 6H ķâ)õųžo¡ŗĨjz”—pŲä(ewįŗŧaŖërücŌ5’d•ZH_–0;×wâ;Xø"i-uų?´­CLfXĮīG÷qY˙ ˇ{cwníļƸč1Ūēī…(Ŋņ7†¤}FA%ÍŧĻ"ā}ā;×}EQEgë¸ūĀÔ3ĶėīüĢÁžę:œÂišgÛ uë Zí*đŖĨę:†¯ũĄgy7•q ˆ(ŒŸî×aãoÅá_ UĖžpĢn‡ĄvgüöŽdiŪ"´đdž(›ÄWGPXMĪŲō<œuیV„ēî§âŋ‡1kz&ĸlŽĸ‰¤˜*įs÷JÂøu­xŗÆŪ¸f՞ŪhĨ`ˇ[éōãüõ­Ī‡>0ÔĩįÕtmZU:ŒŒ‚E\dtÎ>ĸ¸MWIÖ§øÕkĻÉŽšģkrésåƒåg?(_ķÖŊ'Äwڇ‚ūM,ˇ“_^Æ6‹€Ÿ1$õÅqē‹ŪéŪŌücˇ¨Ä<ØÚâ+—Ũ•fœ~5čZ崞'đ´w:f­=‘)į$đŽXcĨywƒõ_kžÖa:…Ķ=vYTîy˜tA]E¤ž1ÔūĨķŨÜYjöęė  (YõŊkÄŪŋē¸ņÄwÖŦwEÂãđī]Ôņ]ô?ÛîŦĶ[L§ĘˇØŅĢĐ̆øģ/•đÛS gpUũhđŊÕß­&+[Įŗ˜Z#,ąõāVÂ-{X×`×ĸÔu¸’ĖqH@ų{gįĨr ĄęS|jģĶ¤×Ž ęÔēĀČgíÖŊ Æ%šđƒímEÛ]ęķ°†  ąîÄ{VfŋĢáĪ ˙ÂMˆ.ĻŊ…VYĄ‘ÕŖpz¸âĻņĄ{â/‡Ģâ}3SšČÅjd1Į™‡'5Íiˇ‹uO†ÍĢZŪO%ÅŽ4“3äˇŌĩŧaã-gMļđŪ—+\[K¨ĒũĒæ!–SÜ~jîŗĢxÆúE’ëę~¤F䝷2ô˙ŌøÛmpŪ[˙ļĘ-UŅ>Ėŧ$õ&ˇŧ ëVž &ŋ,ÂâŲEē4jG^?ũjäŧŽøŽëânŗáŨGZ’á-ĸuļ(ų†9âœÚĮˆt_ŒZfw­Íue*y¤0°įƒųT˙/5ī 5žˇ§k3Åm$ëÛ(ā{ŠeöĢãí-Pĩ–i-/ˆķ XūX“ÔŸĨ_Oę>7ņ­ŪƒĻß=•ŽžŋéGŌ7 ĸÃÅ7Ūøˆ<+Š^ĩŨŊ¡–Oŧ:đ*õ*+Į˙h Â9ĻnmĒnĀ&Ŧęŋđ’YxūKm^X>Ī–;?,Ø;ũ=ëĻĐŧ[6§đÔxÉp-šO,(¯=ąēÖŪ;é,u§Ō|5áĢ+vC=Â"×Ãx‹P†6*ØÛ awpyæļ>;ßBžą„JĨŪéxĩQøĩ§\ęŸ t›‹lËŠW˜Fz s].…ĸx_Wđ}Ė’ą Ë´œtįŊ?áļn5?ė<ÛX‰Š¤ĨÉķqߚô+†øâ=/OđÅÔŪCį3"ųaÆīŧ+˜øĢimâ‡6÷ön“KlÉL—֗„#ļĐū>áķÛ4§ĖnXâšĪ͡“­ ̘‘Ä Į-v?õ;I>ߘncs"ü¸læ øw¨[EđĒß!híØ0/ĪLVWÁ+ß>ÃVypĮ,z*‡€¯mcøÅâ@fŧ8R[ŒúV§Š.`‡ã‡|Ķŗl',zwĀŽķÅsđ†ŦčĘOŲ$Ús×å5æ? uOėŋƒú•Ú–[s#ˆ|v¨<+q­āÍO]ÕõŊ÷íĩļĸ}īõĒ? 5ét­ŪÚŲQŨû+ĢuÛę+ŊēøĩŖÚøÉ<8`™įgō˯@ŨĢĐhĸŠ+#Ä7VŅčūdņĻap2ÃŽ+Åg›ĨMCZˆČĒ)>æŊũY\eXę+Ę~-øĻæĮPŌ|?k J÷Ō ÜH›ŧąœqī\¯Åk;}"? [­Ô—W?h,ŽųĮøgúWyâŸ[j :ëōŗ!!Î~•Ũ$øīáãæ&ÅUį?Zŋņęá˛4XՕ”ŪŠ ã>q¨xGžļ đY24ĘŊ\n?ķŽ—Nđ·5_ÚËsuq%Ģ[¯˜>ÖÁqŽAæ—LƒFąøqŦ&‹nđiéÂ6gŨæaOĖ?Åø ›šĨŋ"/ÚBŌI˜FŸdãwCÁ­?Šž9ŸMđÄGIAū•p`3ČšGqë\ĪÄ[{;…VŠo$ŧŋē1ŗ;IģŽ¤ã Ž˙Âzõ”ž K4cēĪNS#öåkœø uÚĻŖhsv[¯\e ĨXd‚+į -¯ü/ņ#UđÕ¤/äk/…ØvíV<~„×Ņ66‘XXÁi …Ž vUŠķĪĮÃ{äg™”žO5{áėßņlôķ,ŅļŖ$ē1ۏ߁3DfņŖ7Ÿ(Ī-֋fŠ/Ú.ūY˜FÔĖp>č¨ū5[iÅ ëv˛ ´ø&1É$g–įđŽÅü3á;ß ‹Įy- [ØĩĶGįYˇcNƒāÖ –KO"C;˛ö<úՏ‚ėŋđŽė—+ģsL×7ņÄW÷tī Ã,vR×îēM`øæĶNŌ|}áˆm'i|ŠCÍq$›ōwÔũ+Wâˇqâ?†ÍrāãÔŧŊËŅ”6¯EĶ5fWĐ4ËYca%ąy€ųT˓^sāšRĶ㗈ZíÄe•ļ—ã#5ЍÁwûAéˇLęöĢ•äa°nüyhäđƙ•@{ÕīÔW¤é‰h6đÄá—Č ˙vŧ?ᾎ‘ü@ņ—q<,›$+¸dķū}kĩÖŧ-áí;ĚUÃ­ÍæĢ$Ęą“9. wú ôÚ+Æŋh)ŖūÁĶ!8,nsJęŧe5ŋü*{ÅŽĶdsí\÷…ĩŗ üMJÖ$á‰°‡ĄÉīū{V~ĐËđž÷^Õ.ġ70Iå@ąĄG֗áŧēg…llLjâåæy2y@ĸĄ‡Á>øί¤Í.rŌ1aŋũ+á Ŋ´“ZŌ'ŧkģ{)ÂE19ĪęTW†üQh%øąáqŊX)`ĪOšĩ>;\@|1Ĩĸ8'íjTÔTß´šĩŸ†6sÛnuļ +…î0tVĩg‹{Ã:M?Ÿâ Ō¸/éˇV˙ŧK{,?ĩÅ#Ƥu]Ŋ~•{šģč,N›rĸū[•‰\–|p?ŌŊ’-ŪRoûûFī­>¸/‹^$¸đლkXRI'E™p^:× ŽG§Xü"7ox×Z…ä@€…'“…1ũ+ᗈ&û/‡´;v‰ĸkšp9*sÅzÅĘüCđúxÁwöEs(ŒŧG¸a\GÁgģÕ­ŨøČĶŖû$ũ~oéYŋ4Ķiņ?CÕ¯DŸŲŗ•‰äl ú×s­xkÂ؆}HÉ=˛ÁrwaëX_Ž-ížÅ ē}š6Ē[–åWŌģI ž ŌD%Hąä͊‹ôDņ…īô×ë,giô=ĢÄž&ĢŦøš×EÔ û„ī8R8ß÷TZú*Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+ÄūĶ|YĻ‹IŖVÜĨN šĘđ÷í'ÃˇĢu÷wN‹ˆÅĖ›ÄcũŸJŠ_…ž›WmUāš7Œû˟hnĩ.ĨđĪÃ:ŧŪmõ´Ķ8 Ķļ=ēVŪáí7KŅ˙˛ ƒu™ÎRSŋvzį5ΧÂīE1hâa-¸Ā&`Ÿ–k­ŗ˛ˇ°ļK{X–(`*öĢW9}āO ęw’]^i6ķM'ŪgÍXĶü'ĸi–sZ[XÆ-æ’3Č#Ō ŧđG‡¯äq§FÅT 8 ;bǟ†ŪÛ…Ņ O÷*KŸ‡ūŧˇŠ ‹/2(—j+7zS­üáÛ[)lá° o/ß@Į Vtŋhz,éÖ)oÂí•SÕB‡ļžKØ4áĘļá"šÎjΉ<ŖøĄâ’ūķĸû’ÆÅX~"Ŧ]ø[LžŅ ŌŽ#‘­!UŸŠjļ‘ā}BY×Oŗ1G:”‘ –R^ V´ømákĖļúh^û ’™õÚx¤Ņ>x{@՟R˛ļa;@-ōŠ=p*9>x~o/ˆ^) Úļünųwz×eEQ\UīÂ˙jZ•ÍíâŨJ×]ĐÎÛyĒĐ| đĨÁšĘ ›f+ƒå\2˙Zët]ßBĶ#ąļy^4$î•Ë1ĪŊQņ7„4ŸÛÅĨ fˆæ9á“čk&īᇇo´c§\G;üÁÄí&dR:`Đ~č-ŖGĨÉö†ļ\–SûÃęŪĩkÃô Ũųúc\§ĘWËiI^}¨Õūøs]Ŋ7zŦ“Ę[wÍ)Ā>Ū”ëhWZZéĶĨËÚŠÎÃpԚ7Ãũ AĩģĩŗŠ_ŗŨ&É"w,¸öĪJƒOøeá}7"+'ps„–BĘšô^•'‡>č>ÔdžĶâLų{ä&}0ü5đīöÔē°†á.ämĖņÎËŸŽ V¸øQáģ‹ķzësöœäIį1aøŌj_ <9ĢėûwÛe)÷srØĶŲčvvzéy­Bl"fÜX{×.ŋ t“ =ú[Üm–āˆĪá[ڟ„ôŊOFM%ãxlcʁŠ=8íY:Ã= Kˇš 3uRŒ2¤Ė)ēÃÃēšßéÆî)÷nß1ŊëWüKāmÅp]^¤‰sړDû[•bhˇ^]âĐKbŖ…cÎ}sëU ø}áģ}*}9,so:ė}îYˆôɧZø A´ĐĨŅĸˇu´˜æLHC7ã֝ xÃūģ7:M›[ČFĶûÖ`jmKÆZ“Ž[čח‚;ëŒyq‘×=9Ŧ `ļÖū,Ã$JŽ4Ģ_Ūē˙}ē ī¨ŽoÄ>ĐüSsúĩŧ“4KĩTJĘŋ§Xx+DĶ4™ôģ[wKIÛs§˜jŽ—đëÚ-üwš}ŦJ¸l”āŸqSkūĐŧGx——ļÄ\¯llT°ô8­! iŋ؃H6Ęl‚íōΚēt°M%Ēį÷m3`ũjΟāŊKĶ.4Û[BļSŽ×…œ˛ãÛ=*-3Ā^ŌŖh­ėsâËŒYPŸîƒŌĸŅūø{D–æK;V :”;œĒz…ô¨îžøv{(mbˇ–ÕbC[ĘQ˜wÉkg@đîá­8Yi°ųqį,IË1õ&ĩ¨Ž&÷ág†uFKûČ.%švŨæyė ũ*k˙†žÕũļ ‰Š€ë†ãŋaĸŲiÚJ鐪5ĒŽĐ˛ļū?ædø_ ËršįėĄˇ}“Ė>W\ũÚëžÃl,~Ä!QmŗËōĀãoĨrúgÃOéZ’Ūà Ŧc}ņE$„¤męv4VvŗĸXkúsØę0  np{ZĀĶ~øgLŽxâ´gY“Ëa#–ÂûzU ø CđĨÔ÷:l ŗL6–vΠŽĸŠdˆ$‰ĐđHŦ xjĶÂú{ŲÚ3˛ŧ#3õ$š›]Đ4īiíg¨Ā%‹¨õSę+Møsĸé×1Ė^îįĘmŅĮ<ő 인Bņ5ÂÍĒÚŧĖĢ´+(ĮĐU­Ã:_†m¤‡M…⍚!¤-ŒzgĨgéŸ)ēđīü$ąÁfļLŋf īōĮrŪ¸Ŧ[ŋ‹W—ž•&—oæi׎#e)—Vã'#ĩzėož$ī(5Čø˙ūcĨã@†-öpOOjķO‚ßđ” >V°ŽĶė&éŧũįæü+ą—ÆÚžšâĢŨÃīm –ƒįûB’Ė{íĢžņÅ߈u GHÔāHīėÉ÷ZĸÔ>ųļád¸kuHņÉÔj.ņ…üMĻ[k" Ŧõjb\jčŧyã(<ĄĸžeĖĮdįī1ŽrúûÆ€lŠ*îföįĩséņ/ÄĶx=vkvōHYÎĖ—bz(í[ōøˇWÕ¯ôí;NžŪÂâk1u)r~nV)i#YđDÖQΑJYLA›Ččĩ“cĒDŸ ?ąÄSļ§öcļÛúT˙ |>…áä]^ô­ûžŠOųũkŅë?\;t;͜b&¯4ø6<¨ČġLN>•SÂúŒ'ņŽąuĸZÅcöv+=Ų\É'\n••đīR‚ĮĮū*ÔF–(ÛŽ­Î*Ρášŧ[â]GSđާ%†ĢnBË $8ëV|wâM;WÔ´]v]J[fdĖ€zÔ?C}¯Ä1\1 )SĪ˙ŽģxcÃ^ņÅįØĨ‘ĩ[äiYųUwdũ9ŽSÁ,?áyøˆ!|ŧ{ôĪF§ão†ËANõŠņŲaŌås™ųĮũėæŽüQÕôÍ+Ā–‘jbņĻōŌ(ŗģoZãŧekwĨü"ˇšōá%)åYDĄQG_ŠŽķ@Öá>ˇŌ mįĮŖĮ3F0ËúW3đĢT:'Ã}OQTķLwLvôĪ4ŋ%K‹ŸHäĢ=Ęģ@vÔ?ÖseáÉNīąŦËæ€:tæģ_ĖđŽūXČ)ö>?īšâü.“āŦķîû¸5ĐüH×ád2(??›ģߎwāAÎĨâbĒBũŖúšöē+‘øŸøWzČäĻš $ōühíUšsg PŊsíRü ōĮ‚$TH¸`ĘzƒīXž…Û㧈$ļ_Ü&VF‚N?úôß ¤7´ˆ\ ;#=˙‹åÍ{ Ļ™ca4ŌÚZÅ “Čȸ,}ęåâZëîũĸl(mļĘĄqõ5ßjēđŊŌϞ>6˙øĐÄķ+túœVg‹mFãSņ ´ZĄŗŊ[“ģ÷A™š<ščoüũŸãŊ/_ÔõöšūI|¸ãHīãĄÅzÅâ?#•'Đî|Ō°y…ŽžĩŲ]xJį[đØ´›ÄS5„ĐËąqˇæŋôë}'ÁžąŌî^įO‚é”ĖßÅķsøu¯QņõŊ¯ÂëɋG´ žäŠĄđvD“á…ŽÜ ĄˆíÁø6ûŧSâđI%näK…hXęČ~:ßŲQ˛×,ũIāqúÖÆģ×Ôl4{ĢxėaŧhĨ$p8Īķ¯Bņ$Č>_IÂ˙gœø p>Šh~jF˙>[C+"žËí]Á›KwøooB…Ûz2ä{Ô_ltĚg†u Y gļx*āôü̊ņ‡|GđâÖŌî=Lj:`ē\Į';yųx5īZmË^iļ×.0ŌÆīVĢưÜÜx3VŠÍ™nŲļ<įĀ~ĪåÂw°|åēbųíĀĒ~Ũ/ĮUĄ…ŽÅ>dƒĻ08üę[ų/Ú"Ė3îVˇį…āײŅY>&I¤đÆĻ–ßëšŨÂ}q^Wû>+G§k1ɏ5.0ߐ¨ãŠ{ŸÚJáíōĄ~ĐĀņ÷G˙ZŽK!oÚ)CįŅUk?įrŋôÁ8"ܯîŽ>éÎ?Đũ nĄ_ Ø[<ךĪqŠôīøoMīūŽƒ>ŧu­Jk¸HŲĪE¯đžĢ‹>$ęshļiąÂ›sŒĘüöė(đMõĻ™ņwÄŌ]\m‰"•úuŸÄÔŋ?|!'X™†ūWž<ŪDē6jH2=âČ>‚ē/Éģá5Û#›UŸĨ?Ā:•ĻđīÃë#ąķ‘cPV5Ä_D“~ŌPîí‰x˙€Õߌ“˙ÅGáhĶ’é_éķ ĢņÎÖá×Ã÷Š [C"ī>‡5Üøöâ4øa¨>~G´Ú9õ\Wá{9,ŋgûåšĘyÖŌ˛įĐô­ßƒļļķ|6ĩY#IŗopyŦč~(ņēØZ_3TĩˇVŠhÛ×'åãŌŠx~/x;Į:}ގp—đ^f(§#,ŖĶ={WŖjŪ;đî‰ŦEĨ_ßŦWrtLtôÉí]:ÉēœĢ ƒę)õåŸíŨ˃Ë÷SßķŽCâ”7–> Ō ŋžķĨ’TÄĮđü+ĶŦ5k{¯ Ũią ĩĨŠîl÷+Ōš€DžÔޤŧ`~ƒGá–[⇋”?Ū‘°ģÉĒŪŗ›LøÛ­ĮwšYÕ-ü@ô5Gã=ė7;Ņ­ã}Ī )|tûÂŊîԆ´„Šl^ŸJšŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠāŧiđõü]â ã¨IkĒË?ŧ=A¨äđo‰¯”éú‡ˆ’M$ōŦX‘ĮĄ5­â?ØkūM w‘x1ēŽTŽõ“Ą|9ēĶp÷ēܗsCKf)¸ĩ›Â;¸üFu×ņ-Áž˙žĄqé^“klņéņÛ]Ëö— ĩäq÷ũČŽīáÕåüķøgZm. ƒē[}›—>Ģé[žđ}§†,eHdio'%Ļēqķ3õ‚ŋ ā‹Ä‡^‹ZŊ[ælŗ\éOÔžÁŦkvúŽĄ­_M=ģn‡î€ĩÄén"°Ō ĶŽöjÉ86Ņ…Üdlc§ĨrđÛ|c“s˙ĄŽņÁ;Cõ­Ī‡ž'ņ$ž%ŊđįŠ~Û bEu9 ŧ˙õĢÔ+Å—ÄV"Ö=JâČgæ0œn•ā߆Šāë‡û>­s=ŗäĩģãi$b ‹ádv:ũåū—ĢĪeoxwOo›Û=Ē„vö~#“QŗÔæ‚ÚlyÖę?ÖcÔÕŅđę[MR÷TŌõimoޟ%ĀʅôÅix{ÂnĢ.ĢĒjGQŋ‘<ŋ1Ŗ }íXzĮÃíRË­ø[SM>{Œyčé•cëZ×Đ|sĻũļöķRiõ{¸ö ŋęŊ6JÅŌ>Ũé^+}|x†i.e|Ė<°<ÅūíO⟆Ä^$‡\Z¸ĩš„('Ō“Ä ĻņO”ē–ŊrÉ jˆkGÄŋ­ŧOá‹]&ōōC=ǁÎ9Ü;‘X—? dÔôĶõ]zâíÕ@Åp‘cÚļ|āøFm.öüßÍ4kö\ŒtQYzgÂÉ´ëÉ"ūۑ´wœĪö!į8'Ō|.ēņFĢ Ũ׈fŽ+wßo õö•tzŸ„#×<,t]^厛-ÆŨ¤ĮĘ'ÏŨŲ Sņ™ĸ.0‘Ļ$`?„ŸJé5ßĪáčô-/Puˆ‹Ę‘V=Å×ŦÍĀ:·|=&‘aâ/ŨŧäįųÕ/ ü1Õ|)Š<öŪ!Ė3J$¸ĘæOÆŊ:Šâš§ø#Áš‡„ížÅ>°/lD{RŨ§ëT#đą¤jW’øZKK;É ÉĮģi=JÖī†<oáĢ;Ąí-íÛžéĮĖÎ{×'eđ§QŌüMqŽØøŌæáËK˜~đ=ĢĶãą"ģnp 1õ4ú+ĪŧSđîëVņ]ŋ‰4PY_ƞY.›fįĀWøZM%5icžå‹Ũ\æBzņTô?‡z§†ôÆĶô¯Iģōŧļ“ÔŠ‚~MájķQmYŽūד"ۖõũi5¯‡Wâ#ŽxsSūĘģ“ũxŲšdü*߇ŧ}mĢ˙køƒV}Jõr"]¸Ž0}vôVGˆŧ9§øŸJ“OÔ"•ģŠõÆY|7Ö­-ƞŪ*™´Îŗûģŗ]>ĢāŊ'TđÂč/KTMąœdĄõú×6~ß]hķiš–ŋ-Ô3ē˛pŋíSWüāüĨ]é˙Úī^éēĩÕ˙…uTĶŲĖŅÉõ΍­_x)t+{ŲÅëÍĢŪķ5ķ/;Ŋ‡ Ŧ[/…ķZøž/Í⠋‹ĩYž07/§ĐøĢÁÖž'û4Í3ÚŪÚļčnc2W3Ģü$]Oōĩ=næ{­ÛŧōŖčuđÅĮ…ô÷´ŸV¸Ô?ģ3qą}+¤Ļ˛‡R­Č#ŧå>ÛZkמ™ĢŨ؋†ĖąÅŽGĻi—_,&ņ:ęęÃláEŸäˏVü+sÆąņdvŒĶIkufs ņõZČÔū[ëZrCŠj×W7AÁûCã!GđĐWAmá—Âŗh×ĶŪA(+æIĘ1Ō˛ôO‡_ŲĮ ēÅÅĖ6ĘVÍįŋšĒqü!ąMdjíŽj~?åšuÎ=:Sõŋ…zîĨ íÖ¯|ZŨäa>•ĶŪxfĪSđâčú“ŊÜape“īëõŽ`|7ŧšŽ+ G^žįIÁØÁ`:ÕŋâïiIĨ­ėÖv"?-Ą€˜Uo x%| šĨĖÖj¤,€}x¨5O‡ļz§ˆŽ5ļģžÉR7ŒãËÅMŖø.KMZ-OVÕ&Ôî`R°T(ˆ@;מüMđŽ›ŦøĘĪė<ēÕԋž%<"ŦŪ‚ŊĒÖ#¤1ŠŠüM\‡ü§øÚÚ!q#ÛÜDr“§QX—lõ %íõ-ZōōëCq!˙T÷GJģ§|5ŠÃÃŗiƒVģķ§“|ˇJ~vÆßaŠvƒđÎÛÃv—Úvą}sd1Á=ę?|0ƒÃž"“WˇÕn¤y[2Ģā‰>ĩ­âZë7ĐęO-•ü|yđœ_Cë\æ¯đsLÕü‰%Ô.…ĖdŗÜdovõ5Øx_ÃßđéfĖß\^ÛŧÉÎMnQEQEQEQEQEQEQEQEQEÆøˇÂwzĻĩĻëēeÂ%ũÂĮ7Üu=Gĩ:]_Æą&ĪøGŦ䓠tēų~Ŋ)žđŊížŊwâeãmFtōÕcéz{×gEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV“ám3FžŧŊˇ‰šęîC$“Hw7ĐA[”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERÉ8ŨāÆ]0üqƒÖŧš‹ēŋcđüú!…š]›™ēŽÆŊrŠ(ĸŧĪĮ˙5ĪÜ´‰Ąyē~ā‰pī€ĮđŽ÷DŋmWDŗŋtōÚâ%¨íš5‹÷Ōô{ģ䅧kx™ÄkÕąÚ¸ß‡_ĨņÄ׉&šÖŪAëÚŊŠ(ĸŠ(ĸŠåCc­nčŪ/ņf´Ö ᕂÆãk4ĻláO~•č4QEQ\OüWŦøJÍu !/l‘s;´›vzqŠÔđOˆĨņW…­ĩy­Ä6~@s]QEV7‰ĩkÍE–öĮN’ūd#÷)Ԏæš_‡_eņļŖ¨ÚO§ũŽKESÄžIâŊŠ(ĸŠ(ĸŠ(ĸœkÎ4Š#ZņũΆ˙ŗŨ —?Ũë]Ÿˆuë/ čĶęwĪļ(—€:ąėyÃ|VÕ´ũ_NWŌāˇļÔpaU“sĒž…Ģ֑ƒĸˇ¨Í:Š(ĸ ŧ7 g1´Uk€‡ËW<íšōK?ˆ^.ˇøcá­bÎŲ>Đܘם¸¯bĸŠ(ĸŠ(ĸŠk’ŠŒ°ZōįøŦYxâ×Ãڞ„ļßi“ČdĪËũęõ:(ĸš_jŪ Ņ´ˇžŅlíîRŲæ6ĮĨQøcãĪčßŪÃRG7–}1]ÅS\ŒTeąĀ¯ņ‡Ä˙xVö;{Ŋ*Ō3îŨ•Ŋ‡OŽ´ëiÜa¤Y‡šfŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠā~'xĪJĐ|5{g%â­ôņŽ8Ûį÷öŠ>k6xSN°ûzKz"žæŽâKÆ}\ .ãŸÖŊ#h 3ŦrO4Q˛O,cSūõt–öڝš]ÚJ$†Aō°ĢUäŋåeđMŦC;^čgÂĩô?i:^‰ĻÚ\%ȍ"HŪác&%>í]~ĄŽéē~”5 ™ĮŲpĘĨˇė+;ÂÚī†õ†¸˙„|E„9”ĮÁš]oÆzf‰r-¤ĪpyōĄ]ĮŧUÍ Äēoˆ 2ØÍ’§kŖ 2ŸB*?xŗIđĖhڄä<‡  ÎßAUbņîƒ.•.Ąö­ąÅūą üëøUIū&øVÛN†ū[ō-§ÎÆ“ČęĨY›â†`6Â]Mí ÉéĪLžÕŖŠxKŌ„jēUiØ,Hŋ39>€TZw‹t]SR›NĩŊVŧ‡īÄFT¯Ž<;ĸŪ5ĨūŖ3¯­đœøíKoöáŊąÎĶ´gĻOAVƏŠ2øgŦȎ1ädÎy¨>Ëå|3Ķe‚ĒĄ$ú ’į⟆-.<šn'īÛįˆ[Ę˙žēW]e{o¨ZGuk*Ë ƒ*ëĐÖ¯ã}/Jžû­ÅåâŒŧ6ą—e§Ąĸx‚Ã_ˇ’[Ih›dą8ÚņˇĄ˛ĩ?ˆ:™|Öm,ŗËĆËŦR+{LÕlĩ‹5ģ°¸IĄoâSĶØÕÚdƒ18õS^đĻöĪIņg‹¯¯nR(Ŗ˜/Íߖé^ÅŖx§GמD͝c–HūútaøQŽø›MđúĮöÉ[͓ũ\1ŠwoĸŠĢĄxÛEņ ܖ–“ē]F2ĐL…CMÕŧwáíųėõ+īŗĘŋßSƒô=ęĩ×į YA×7ĪrŽä&&ų…lXøKÔtcĢArÎeÆ>ĩoņÃ×7+žXŅ›jÍ$EQŗtŽĩY]C)Č<‚)I =r+ņ/ÃSM8Ū:Ũ<žRÆŅ‘–Šĩoˆ~Ņ/žÎūüÅ:žÂĻ3ÖŽjž.ŅtHmæÔ/VŽtlĀā­A'Žŧ;œWM¨ĮäČ7<{úV´:ŊŒúYÔĄdĩ ŋzķÅsZąāŊGIJ>’ÖíĒ:’å zāž5x¯MŊ´˛Ō ēÜÉzŋhM¤mģÍ6×Â^'ļĩÕ|ˆ.MEUÆ<ŧ Y~&x~æ¸kem†é!& Ū­GÅZ>—ŖEĢ\ܟąK’FĨķŸĨeZüKđÅ֔ڒßrœĄŨ‘íF§ņ/ÃZVŸi{=Û4JZ'D$LŸâ‡…í„E¯ŅÕXÉe•3Ķs]Õ4uÕ]î–Ņ˜¯™övÅ_đΌtĪ ÛM2˛Â@fxʃŸL×CXŪ!ņ6áĢTšúCēFÛH7<‡ØV~™ã:˙RM>x.ln¤ŖK¤Ųŧ{UmGâo†´Rk 뉡–&ÚKDpĮØ÷§ß|JđΜ°ŊÕÔŠč$ĖG JÕ>(ŌWBĖ—]‘čō ¤ū•gņFšŊŠÚa=Ą›SΛUķĶĻÖū ø{Ã×_gÔŽž' |˛AúY> xr) ī†gÛ´…āč ėkĪüy‰>4xY€ †=ĘGÖŊwRÔŦô‹//ĻXmãgj°øĄ_Ũ, ,Ņ8F–&EoĻkŖšģ‚ÎŲîn%XáAšW/mņCšš Â@Į rņ}ļ#[Éwņ{L†)Ŧ÷zŪøÕĻZZx/Oō‘bhnP+/Ĩ7â.ŋqĨ|&°LÆ[”XŲÔõëV|=¨*|9ŽÂ íĖÖûU„c ÄSž ÚøƒMŗŋĶõĢIāŽ6Ũ“Đö¯T¯%øūXøBÉGFēīĶĨmĪĻ[Züšßh*, Ë ķŠÅø1ĢMĢxęąæũ•›Ÿ—+?āÜĢ >%xød’F ;bŦ|•ĩS^Ôī@’WœĒ†įhĨUŗÔ˙°ū;ŪY‡ÉģMģMŪ´ļ‘]^|wœj^4‹1+tÅSņ€ģøĐtģtakqŲÄ}3ŽŋZŲņჴΠ|#ŧŗļF”Dá•ßīdļiē?ÃÛO|6Ņá’So0Ų+JKp8úUOéO¤ø˙BÔNŠÚÛĸÅä–ĖŒG]Ģß=+;WģCņŋDŊĩŗšÍ§}ë°ÉÔgįĨtėíåđÅĨĖ1Įį›Ĩh?ŸãZZ΋kkđrxãwũ—Í/ŨŸÎj§€ĩéĩ߃÷rwMko$.ŲÎp§Ĩc| Ņm¯ü;yuw–/8¤aų֓ápOø‡â›Hx†"ˍ:ĩ[Áž'McâFšĒ_Z\]?wn‰˙,d˙‡ëZļŠ˙ nKMŌo#ŌîEqæDUwVgÄŊŨū,øz XŖ€Ũ%(1¸wũ3]–­đĖn\kš}ŲŽQfĐÃ\;qšķČüwmĻh-áøzhĘĢFn0sũáū5ę˙ dŗ>ąŠĘén C:úį<û×i^ņ S—ZøˇĸøvBMœ2+´DüŦŨrksãeŧ:o„í5;TXŽmnc "pĀzT^7–ÛZø+.ĩ%¤båíã>fÁģ¨ī]ÂŨ.É< Ŗ^}’š0ŪæģĒ+Äh6“ÉŅ#†.˙ĘŊkècđæš„ä‹hųõųj‡‹ÛëD‹s-É'‚WÎĢiˇ6~=Ōü-fņÅ#*ų—'Ũ Æ?:‹ãuķéļ‹f†+k‰tŒ`0ųZĶņÚu‡ĪĸYxvīÍ1 €cĢęąjV˙nĄÕâ’;ČāØáÎN2+OÃVhø'˛]ũ“Ėŗaį1û™ë”Ķ|¨žęš{5EXåoĩ,xEĀėO_Âē†wĶXü[ĸŒĪRē†=qœ Įø) šĨ†š­ÜŸ3Pē™”Čį'§…Gg ø‹Ā~ņfˇ¨\¤ˇ+ûĸ­žüj“á=úAāÍōh÷wSÜŧ’M0pbIīR|0‡\Ņ|]ĢéˇzeĖuôđ3¯Ęƒ<ËųW°Ķ%8‰Čęâŧāū•ŖãŨ]F-Ļ,¨ßwycÎ=ąúÖŧ6âĶö‰híPE Ûî‘W€Įm\ņõ´–ŋômauĒĒ"û"ŌIĪ@ž˙Ō°u[Į?ô+“g%‰–1ž6Ā,ŋ7<ž+ĩøŊáčuĪÜŨ@ˆ×6l.#uŦ-&ęËĮ>đΘđÄė[͸Ę}ÕOņ8Ļ|eՅ‹č>Œ)YÜŋÁøeŋ€-ôB/4ã•lV4_‡ö~"øyĄÃ$FËr]G.k7Æ1ˆž4xZŨOË ÷ŠwÆ Fâ_xsD/‹9§W‘{?Ė85Ņ|Wĩ††ķM؞-‘Ô`į"¸_ø–īSømá¨%’DĖĢpāõú×§xĢL´á­ė †Č”ã!xúW?ā fãXøKt÷LZH"x‰c×ŧ˙ÂŪ-‡HøzÖ+dY'ēežP™)éÉîkŪ|5—‰jÚTq‹bƒk ׎øw]ŸRøÅ­ß\YOzֈc†$#(7cŊkkļÚūĨņHÖ´ũ{XcQË93ŪŠč7-¨ü{ŧûTž{[ÄR=Ãît˙oĮ xĄ×t[˜Ņ ˛0Fã“ķ WļZm!#§–ŋĘĻĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧˇã–™}¨øNŨŦ­åŸÉ›|‚1ĢëŠ<7ŦžŊĻčz]Ĩ…Č[UWšY \sÅsž+ˇÔĩ_‰V:Ũއ-ĩąB#Á8ô­ŠWˇŠt KM;Dŧķ„ĸ\:bĩnŧ57žÁ§ËjöW–č6,‹ƒ¸Uo xŗYđیē.ĄáËųŽíFŒĘIéƒ]G‚´ũYežÕõvdšõƒ-šlˆ—°ŽÂŧ×âū‹yâ-+NŌėĄfw¸ÜÎB wĒzūĩuááhô;ŋˇŧ_g2˙Ë0:nŨé]†ŧ2Ūđ1˛´ˇk˲›¤Hø,äsŠãžéū‡Šęú–‹4Qj.ÄJH!Tõā›G‚įᧈu$:uÕŨ…ã—‰­ãŨ´úĩāī Ūęž9ŧņ~§i%ŽNÛxĨûÃÜ×-¯xÃMąņeܚķ_ÛęPĘVnŖ?o­løSâ'‚[X2„š[ų˜)šš_Ŋ]_Å+kí_ÁŲiVov÷$“°՟†ķ]'…­l/lgĩžÚ0­æ.íÅp~#Ōĩ3â÷öüÚdúŽŸ°F›Ęzbŗü[o⠏é>*:5×Ų€+~tQŸŧ;g==ĢCâ„°|"ĶcšWŽqr¯†äŽã]æŖ¨j~l΍Mj"RäaŊģĩKeĸÂđĪû,ZËwuq,‚Ũ7eØwöíXŸ îīŧ-á˝7QŅuĨWiƒNŌ; úÕ_†ļúĸüGÖo.´ĢĢ{KŨĖ­$ex>ĩj2÷ᯏoõXė&ģŅĩ.] RÍué]M‡ˆõ_ëé§é÷Öl-žiîÆd˙dõČøŲ5ģŋŠF§oĄŪ=Ϝpī \zŠô-cRģŋđ=íŨĨĖ- ˆŠ\fĢ•đíŊŒ<9u=ÃG„‘mĖģ‡×­mü*Đ.tMų§­ĸšēi!ˇ~ iØīëÉž#øJîiŪ1Ķ-ÚâKfh‰Y”wŊSņ…üŸí4íI˛ēō ë%äōÄȈŖ¨įŠ­_ˆÖ‚øøWCŅnގBОDÕ Ž§đĢß /ĩŧ=iĄęEŨ¤ÖqaĨ•p‡ØWĄV^ģĒËŖéw Œ÷ޤ*–5ã?āņ/Ž“OūÎđÎĄļ%‰(Îītj0č–ö÷žÕRę•Á @ĮW̎‹ŧ[ņFģ¸Đo-´ģY—b˛į?3éŧSá۝â—Œtûi.!`cēŽ5Ë/xõKÄ֗ŋu.ÖÛOšˇŌ-͞k„Ų¸˙tgō¯R¸ĶmåŅ$Ķ]ĐŠûcæ˙ŧTv˙īŽ´ąggáŨ@ęŪ^Ī-ã!ŊKÕ×x[OģĶt x/åinÎ^V'ø˜äŠÚ¯#øĢá^ãÄz?‰tĢvš6L7ƒ$€sX˙Ąņ?Œ´[+˜´ ˆ’Ūee…žûqËčĩO[Õ>fCáËŅ{q‹fɎæĨđÍūąŖü_ũŽ0Uą#ī}*§Ám/UŅmõ[=ZÂ{id›ÎRãåÁíYv–úõ—Åû˙ļ‰w-¤ÃĘRœū•¯ņø—XŊąĩŌt–KK#LÅv:ã2kw]ŅgņĪ€ĘkYl.ņō$ d2ôéë\şŠu{§†%ĐoŽ­_fFHūCčŲ­oxNįÁ_¯!ŽĐŨjˇ*ŌLąŽY˜tü8Ŧŋƒ–ēöosĻjÚ%Ü <Æe˜°zŌøģo­kZ:čēF—-ɓķ)Ā_jãÄrü::Gü#ŗ­×Ų~Ė>pGŨÆęĨā oøC ¤Oáéåž6fR˛.qėsڛđ×Fņ>…ân}KHhĄÔį ]xnH^>´’é-“âeˇˆ›GEļQå2 C6=søæŊh€ĀƒĐņ^1ā&ņw[š7ßgiķ"į#{×´Q^eâ˙^[xÖËÆ:5ģO<<\[ŠÁaĶ#ߚĄŦéZĮÄiąŪiRXé6.%“Î<Č}¯HÕ´˜5Ü鎀Äđ˜ĀĮĩpŧ'7‡ôkŲ¯ xŽ%¸eU‘H!ã¯jŋņ#Á÷zØ˛Ö4ĄģRĶÜ:&qŊs’)`ņOˆõ[4°ŗđũ͍ãqp0‘zŸzĖø§o­_øR-ĘĘęúáö4͍āã×Ūˇžßj?ØiˇÚMÅŖŲBĒ ƒ‡úWâ;_jŸôŨz ܋k!´äŽ[žŊk¤øáK¯YézŨą…“Ŧßg?y‡]ĩŸâģũCĮL~ąŌ¯`wd3ĪԌŋ_´‘Ģi’‹ŲŽRā„.ģáũOÂ9oč–OwmtĨn`‹īŠõˇaŽø‡ÅZ­¨ļĶo4­>ß<—!“Ņ@ŦÃwžø‚ž.Ō,%ŧŠdŲq_{>ĸš¯ˆz/‹|Kya­GŖHĻ6ũŨļė”QÎ[ŪŊk–ĨŠčqËĒéÍcpŸ'–ĮŽZč(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ϟ†RcH‘ĸ}ÄUú SčĸŠ(ĸŠ(¤*PÖĒjĻäiW_cÜųgËĪ­yƒo|? Ũ7ŒÖ­˜;ŪF8ÄöŠüw„ĩ,4JG_%ŦĶîķԑ^§Ŗ[ËiĸŲÛÎÛĨŽ%W>øĢôQ^=ņķSDđõ‚LĸV¸YCr{W ø7TĩÔü3bmįŽGH\+giÅtQHT7P֎”´RZZ(Ļ…UûĒĐS¨ĸŠ(ĸ“­íKH)hĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ“9Į4´QEQERm\įhĪŽ)hĸŠ(ĸŧR_‰:æ‰ņ3RŗÖŋ˛â !…#ÎOđãÍzŦĻtúŊŨąˇŧÔå3ŧgǝđƒøWWEQEQEQE4"†Ü{âEQEQEQEQEQEQEQEQEQEQEQEU­MŊ9šąˇ˜˙ˇ4ļšF`sieo˙ĻhŽŅE¨x[CÕn Åö™oq1Kēäâ§Ō´-3DĶM˛ŠŲ\å„kŒÖQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU“N˛šužKH^QČv@MYéKEQEQEQEQEQEQEQEQEQEQEQEQEG,‹ /+đ¨ĨŽ=p˛|]đÂęqØ$“ŧō8@<˛IÅwŠÛ”0čFiÔQEQEqˇ?´;_;?Û lČ.}+˛ĸŠ(ĸŠ(ĒZĻĢgĸéōß_Ė"ˇŒe˜×3ĻüKĐõfÛLâ n†`3G´IôŽÎšĖK€d×#ŖüIđöšâ'Ņ,įstš2ā1…vQ\~ŊņGĐoeŗežæhW|ÂÜ"_öjŲđ÷ˆôīé‹ĻËæDNzŠô­z(ĸŠ(ĸŠ+’4#âãá¯5ūŨŋgŨã5ÖŅEQEW⯈ēW„.ŧB Ŗō†ķ#)Īl×AĸęöúîmŠÚ†Ü&ô0qWd‘!¤‘‚ĸŒą=…s>ņö‡âNęÃM•Ūk|îĘāžĸēš†ætĩļ’wÉHÔąĀÉĀŽ3GøŠáũk^]/´EvųÚ%Mš5ÜŅLwÆÎs…â¸ø[ÚęĐé˛ÚßCs,ĸ5YbÛÎq]Š|gŖøFÖõIĘyÍļ5Q’Õąc{Ŗcåŗn†dę YĸŠ(ĸ¸Š~&čqxÁ<6|ãrĪå‰ü›Ŋ+ĩĸŠ(¤'jŽ­¨6™ĨM{Ŧˇf5Ü"‡–oĨq^ø­kâ&„4Ģ›k‚ c1ö¯DĸŠ(ĸŗuŨf J“P¸ŽY#ŦKšá\—ü. ÆĘ—RŨ[ČÃ+–ė ­ŊƚoˆīĨĩ˛Šä4k¸ŧ‘ük¤ĸŠ(Ŧ_‹ÃöąO5­ÍĀ‘öâŪ=å}Īĩeø_ĮÚO‹/ŽlôõœKl3 ‘6âēē흉?[ĀĶYA  įœąĀUŽĮÃÚĖ^ ĐlõHâ0øô­J(ĸŠ(ŽGÄ7mōXNƒŠ]Co{ˆä?Á>:ąņŊ¤ķŲÃ4FÚË éž•ÕŅEQEQEQEQEQEQY^!ÕâĐô;ģéeXĖq’ģģˇjČø}ŦŨkŪ†öúA$ōģuūîx¯4øŗĻCmņÃwDą,Ō ”É +Û-īmLqĮö˜ˇí'˜3Ō­Ö|ēæ•ĮŲåÔm’c˙,ĖŖwåWÃPT‚qKTo57O”Gy}o°ČY$âũ§b!Y~Ų†Co#֝s¨ŲYÆ˛\\Å7Ũ,ŨjH. ē€OÉ$Gęr+‹—Ã^ žņ’k&xU ‰ŪŪĩÕŪk:nŸ2Ãy}0ÜG ‘Cëzdk=ũēŦœĄ.>jēŽŽÔ‚Ŧ2Ē÷••Ŗ…¸ģ‚&nÜ ž9c™Äęę{ŠČ§ŅU¯/í4øÄ—w1@‡€Ō6ŅEĨũĨü>mĨĖSGũälŠōZ’KũaĘ%ŧxWãŽĩ°>iēĮ‹4˙[ędĩ˜_ܧ+8úW¤TsIPģĖá#æf<\O‡| áM+Ä÷Ι2Iw1,J&zâģoí!.[¨QķĨÆißlĩķ|ŋ´ÃæwxĪåQj7ĐØYÉ,Ķ$+mŪq“Šņ/†ļž&ĶŧTēĨāIõ ƒI¸n#ŗõ¯OđÆŖü>Ѕ‚Ū*F[{I;ãqŽ’ÚîŪō!-´É,gøäUcŦiĸä[ũžßÎ'hA Î~”æÕtôŨēōī|ãåúŅ­§Ę ŽöŨ€‰YâĨ‚úÖę3$HƒŠWC{kpėÜG#/P­š’iĸˇ…ĨšEHÔe™ŽĒļ篛{!ŽÖūŪgūęH ¨5ũjËCŌn.īnRXØŠfÁ'Ģ•øY­ixYgēŊM<ō: æÛšš„|&Ū0âßTf$b\ķJëåš8"ie‘QdŗU-5­2ūSĨô8ę¨ų5$ڕ•´ŪT÷pÅ&3ĩÜCęv1”w —åAqÍZ0Č9ĸ–ŗîĩŊ2Ęémno †v„nø$TŋÚVB”Ũ‡¸æž/í †Páē0s\/Æmîž\šhĪÎģ_ Žĩˇā™ííŧ ĸ#ÍxĩŒa˜ÕĐĖ`’ŲüÖC .“Æ>ĩËø[Á^đæĨw{Ŗ…7Ũ‰wmčĨt÷WvöPŽĻHcYÛŖŗÔlĩËŲÜÅ:tĘ05âúíŠAûGin¨f\ā>é¯lKģi$ōŌâ&îĢ‚jz+Æž+YŖø˙ÂR"…c2‚@ëķŽĩßøŗÂšŠRŪ=goú;nOŪ"ˇŦ­­ėŦaļĩU[x**ôUg×t¨îÍĢęë8ę…ÆjŨÅÔļíq<É*2]ŽŦø¤[åÛ(åŊvú×EuŽéV3ųZ…ŧ2˙qÜCëšTr$o¨[ĢŋŨS ÉĢęÁ”2Aî)ÔWņÆg‡ü7 ˇĒ—˛DR8‘žp[ĄŠ>ę֗^ŌíNŖÍčˇV•|ÍĖ23ÍpÚ}˛'í|T=Øî­zÍļģĨ^]ĩ­ĩüΧ ŋ"­ÜŨAgĪq2E ŗšĀŗ4˙hzŦæ-JŪYēdÖÍS\)SŧŊķ_?XE~:O+FĪOíü8^ękßĸ‚(ÕĉÆ>UĮÛ̍,­Ú{™R(”dŗœ ĨĨx‡J֙×OŧŽrŸx)éVnu;)â†æę(¤”áÛž”“j–÷+m5äĖÃ+8ՉeŽšYR5,Į ÃÕ|SĨÛøz˙Q‚ōŌÚcąÁæ¸˙‚ÚP@ģ×§Z”Í!oösĀŽåŧMŖ-ųą:ŒāuMÜ×#ņ ėõš!đåĩŒwzĨ‚’´{–îŲŽË@Ō"Đt+=2šoOŠīZuĶÅo’i4YŽg/ˆôVļkŠ[TáŸŦÉŠØÅb/¤ē‰mHȔˇËŠCĢiâÃíÆōkŒųģž_Οc¨YęVââĘæ;ˆOãlŠ/ĩ=2>öæ+xŗō6Ņ\ÅÛZøę]6ę)žŌ|€čsׯéV~ø}4OZČSmÅāČHõéúbģú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+É>2øq@ēÖZūčē•TˇßûąøUŋ„ūˇ‹ÃļŧĶŨ=Ãe• §b˙ĀkŸøÉ$ãÆžž|š= "´>%h6úG‚âÔėÚTÔĢ›€üž™Íhëž4žĶ>[jęqyŧø~$ŋ¸õIâ2ŧŽßŧß×åīZŸ ]:^ø‹G.īokp į8\ã‰âM6ĶIøéĸĨœb5—"„ú×MņģF°šđŒē”Ēî äÉÎ7 ĘŌ<'aqđyõ¤2Ū#"Jų&<1Z!xÛ[ēÕcûE•Ŗí­äågąëOR>øČē5¸隄*Â~UQéŌš¯‰<:_Åíéh ’ņƒÁvlŽŌ/†=ÛȧFšÛ˚Į27ŋ5Āü:đĩŊ÷Ä}wNv—û:ÚG-ü6€ Xm>įMøÅ?„ôËÉ`ĶoJ´‘Ščģw=+[ÆÖ1xĮ~¸ĐÃÛĨÔĢŅ̜8Ü?uŸãÖåŅ´öĶ|ŗ\+]Fî2úöŽ'ĮoĨiø{UđáŽĻž8æ6ãĀŽž†ģīˆēNŠx}KPĩYŽm­ DĖNˆĪO­cü 𾔞°ÖÜ}ŠÃÄņXÖpčŋ´™ŧf8$O3`<ƒÎ+kâŠsŠx÷CđĒĘGYnpp$…3⭅ˇ…4› wFˆZ\ÛΊû¯”2ûâĢüOƒO×~Yx—mÛĘʧæĀ54~ŗ“á,š…ī™-˙،É31Ę2¸ôÅoüÕo5oÛM{#I";"ģ’ŖĨzy‡Æ ÃĒxRãUˇ€ û@Í °uĀ^­‡‰>X=œ!5+5mÂ<į ÷‰öރKąĶ›;—ŌtȘˆ†Gé“RXÚëvŸŒ6ēŲ4dĸÆ:ŸzÆņė2KņĶGˇļr¯qŖ8<€wg…XøŖÃāŲ´MWDimæ7B9q!ųĮŠ˙=ëÚ-d2ÚÃ#}æEcųTÕãŸf#⟄" Hir˙ĀĒĪĮ]:ØxfßS Rí.R1"’ĶWŧoâĻđŋÂÛ)m™Öæę‚Âvō,Ö]˛øn_†eHßS–ØÉæ>aŒį?ZĮŸXÔõ?ƒv˛_ÛÜNmnĐ\Ąá¤‰5yŽx3Ä6vú,cMŊK˜ŲāÛåŦŖw+é_BĀÁĀP85%5ŅdFFV ÷áwÚe–“ûAi0YB!…“sĸũܐÜ֏ĮÍ.Ít=I zn–?4u#ŌŸâ ŲAđ‹í†%ūЊ›íÆë]‡ÂíJãUøĻÜŨ1yv”ÜNrÅvTWüpĐt˜|3>­öEūŅ–T_?<×eā} GŌü?Ļ]ÚÚC ĖöÉšÆcŽkÎdŗ’˙öŠšŽ)LhZ\s¸-_ø‡:GÄĪ ]XŗÉq.ŲŧąˇpĪzâΞÍã=@šYĀēËrŠükžœuĒßītˍĘo ZƚŦĘA†Ų“hüĢÖ|-¨MŠøfÂîáfx†đÝŨëfŠįük­.áBü¸WHˆLœ|ĮĨyīĀMÅĸ_kŗŒÜ_LpĮûŖ˙¯šõ[X´Ņ­Ōkˇ <‹*Œŗ1<`W—jڌž;øĒž ãIĶ@’tSūąŋÚŠŧAoáߋēĻ Ä'€ŦņÆ0k#ĮŦÖ:#ëz”,5KëÕ[UoŊ jÜéŸëN×>ëū$]'TŽUKšŸÍšˇĖƒ°JģĒꗾ/ņũŋƒ-įtĶŦZõĮüĩ*Ęj‹–QZC§h,QÃ%ö#–8øÜ€× >qĸ|9’ËMCö¨lﯪģí¯ąŊĩņO†SÐHš^Ŋûå’\†›×æú×ĐšÚv‹eopË5Ė0Ē<ØåąīZ”WŒëzĪū%˙Â-ī“c–ē qæã¨Ŧo‰ZE´Ū0Ō|-Ĩ'’—%<ØĸŠü3^‰Ŧé2Áaw]KļķO÷d`>éŽ+ĀXņ.™u%üa4>y%“„~¤ z Øø=Š‹Č|Gwb+ģfîĒãœU \\üAø‹ŠŪ崝8í‚÷ ú‘ëXė˙ļū)ižŗ_.ßr<ą ã>ŋ•{Õ¤pÃl–ņ2bBž•bŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠķFāxA1Ė̏œ ‹Āž!ˇ“Á:M…üCQ…)Ãᜊä>)jö7ßtD‚ãͯ‰ļ.vt­˙ŠēūŸ{đüÚŲŨ,“8_JŽĩŸulž1ø*–6ÉyfŠí ŠŨđg‹<5kā›õfĩ´¸<Š"•ė¯q“[ž ššÔ/õA-ÛK…ĩ=ĨĀū*ėëČ>8ęļŗčcFÍ{đë(G˙Ē´mø¯Ĩ%…ÍŽžĄŽ'”Îs€}jÆ=kOŊ×´K;i^V˛˜yā)€kÚt-NĶVŌ ē˛“Ė‡hPØĮ V•Cus Ŧ—3¸HŖ]ĖĮ°¯ĐüAbŸ/uRí…Ę”IY°ŧ~•§ņ{Vļŧņ>€–Ûæ6Wᨄ„Í^øÁâ-3Sø~–v“yĶLҏDS õރAņ^™Ļ|/ŗžgŦ „Ûzãūjö…u6vdšúáž$e?2‘ЎāqÃ˙ëļ:ËĨœmæÛÍ)ÚŦšėjH,>1vԖŌtØÕDØųdlvüëâ‰4Ûŋ‹~šˇ¸G‚Í×͐tS윟jöۏi–ÚöÃ\ƒbFDĢČ5â ŧIĨéŸ|Csw3G ÜŦafCķe‰ūT÷×l?á}ÅŦ‰\éá ųĨ3´Š—âį‰4ŊGÄŪk[Ÿ0Yܘ€~A¸j˙Å{ëEŧ?q™´ek†@@a‘×õĒŋoėumFšŌ-äm>Æá<ÉV=ŖˇOZí5mRo|0Õ¤°ĩg )Pƒ"㎠s Õíõ č^ĩy~Û´čĒrN}¸¨ūeŒ}åÎÜ# p ã“ŪŧķĚõ—Į›+û€cĩļ‡d˛2œt?ūĒ_Œū"Ķ5Ģ]=:äÜ<7dĄáW^ÅáŨN×WĐ­nŦäBP(aę+MØ"31ĀQ’kÂŧqŦÚęŋü9}d“Mme H"l/?JÕøŅ­[j>ŗą˛Mrķ¤Û2~LŋĨ_ņF†/éZaļ”iÖD;ɡå'¯øW´ĸ„EUčŖŧĸÎ _|CÖĩA%ō¯Āx%[>ĢõÍQņ\\øÛ@ņ.Š AdžaU(r(>ũëcâNĨŽÍ iwšCÉc ˛ƒ;09UĪŽSÅ:v‹â-CF_>ļ˛#\Īn§hQÔą¯u vņ#˛¨ū-â^’ßÁ|Du5”ÜŨJMŠōؙA$āUIå›Eø¤uŨf9ZK‹rmPD[đŋã]WÄmWXƒáĪŲÍŧ˛ę7ß&#_¸'8ö¨­|-wađB}6Ō'ûtļåČæÜy?ÖŠ|=°ŧūĖ´Ņė`šĩŗ†2÷’Ę›LÎGÜÁí[Ķn| áHĪbÍ;Ūą…PdČî×2×2øSÆˇZƯjōÜÜÛoļÄNéøw˙´›ë [ŨPˇö…üĻyUÜĪEü̝ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĸ¸ļ‚î†â$–6ꎚŗ4ß čšEܗVlōÉՑqS J™ŗíŧÆ9-匓Sž›c"í{8 úÅ>K{tŲ ÆŊ0Ēj”ūŅn§OĨÚI(9Ņ ŠŌDXĐ*(UQ€éN¨^Ú |ÆÍęČ §ų1˙Ī4˙ži†ÖŨ›-Dú”ąÛA nŠŅŊU¤6ļåˇ"-ë°SŪ(ä9xՈõ¨ÍĨą6ņ×= Š6ܑ"ˇ¨P*­ŪĻ_×VķĐŧ`՘-áļˆEKcĸ¨ĀŠhĒwú]ŽŠ“i ĖŨ• M?IĶô˜|Ģ 8mŖūėiŠ|š}” ų–6sRÁo ´~\ŦiœíQRĶD(莧¨ajėû>?Đāã§î֞m-‰Ümâ'×`Ļĩ•Ŧ‹ĩíĄeô()Ëil‹ĩ`‰WĐ ĻĨŦry‰m ŋ÷–0 AŠhÚnފšŒJ§*%@ØŠíl­l ō-mã†/î"āThē\ Ķí[iČĖKÖŦ-Ĩ˛Ā-ĈGHöŋ•bĩ˙ŸhīØĻ>ÉzZ@>‘­G6“§\Íco!ۈ›ė–ŪBÁäFbQōĄP@ĄėíĨ‡É{xš?î”§¤QĮU:mQMŠÖŪLPE=Ҥ6vĖۍŧ%ēä Í>Hbš#‘ĢÆF ‘ÅT°Ņ´Ũ,ˇØl ˇÜr|´Æj፷RŪ¤SM´ 9‚3õQH–ļņ?™#ôܨЍĻ**dĒ…ÉÉĀëB" ;.NN)¯o ēHcfõeĐm Æ<˜ņūč¤Đ.vÃČÁŽh[[tpéJãø‚ Ķnė­¯Ąōn­ãš>ģd]–ŪŌŪÎ!´ƒøcPĸ‡´ļ‘ËŊŧLįĢĶ$ĶŦĻFI- eoŧ cš’ŪÖ HD6ņ$QŽˆƒύžÍsäĮŸ]ĸƒo90ÆOŽŅOTT\*…€bĄ66/˜Ö°—ÎwÆsõŠä(Īŗ!Ę>éöĻ-Ĩ˛Ėf[x„§Ģ„üęz)`ŒŠa‚˙,“ūų"8ĖHqūČĨōŖ˙ži˙|Бĸ}ÔUú Sč¤ 0Á†š‘¤kĩU}b-3‹ŸĨ8ǐF4`câŖX"‹$HŦz RŅMeWRŦ¨"ĸ–ĘģEŧA} _ŗ[ãDx˙pS’Ŗ$¤h¤õÚ¸ĸH"›lHøéšAÅ9UPaT(ô‰ģvŅģ×ĶŠ?ŪEo¨Í#ÅĒŅ\@ašY#IP¤ˆŦ§øXdT0XYÚąk{Xbfä”@*ÍTm NáÚ$gŽH¤kxduw†6uä1PHŠ † čhĮíBĒ¨Â€>”ĩÃŒŦņŖ2ô%A"¤ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠĖŋņ‘Ĩ¸KíJÚŨĪE’@ XĩÔŦ¯m~Ķku°ĪEn*h.!šˆK‹$gŖ)ČŠhĸŠ(ĸŠ(ĸŠ(ŦMgŚ&sžĨŧŌũÕcZņJ“IJÄáŅÆU‡B*J+:˙]Ō´É–ëø-äa•YÔ-⍠sZĖ`gũhĢļžŠl.,nc¸„œoŒäf­QEQEQY×Úö•ĻL!Ŋŋ‚ ČYiz,§^Ep#8mœVQEV.Ŋâ­Ã+ j×kn&$!#9ÅeGņ7Â2.áŦBûĮZx×Ó[ųéĢ[ųgû¸üęøJt3ĨËŠ RŲŦĸm¯0•OĻjM#Ä:NŧŽÚ]üb?ŋå6íĩŠEQEQXúĮŠ4MHãÕ5-^@J‰Å]Ķõ+=VÉ/,.{wû˛!Č5n¨ĮŦiĶjcėvŸzq¸~zŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸąõOhz,žVŖŠÛÛˍÛ$|ZWjq]ÛH$†U܌;ŠąEŨåŊ…Ŧ—Ws$0F2îį ƒKÕė5ĢOĩi×1ÜCœoC‘šŊEQEQEQEQEQEQEQEW•üMøšt‡Ŗ.§7ĘO]™ūĩ¯āŋYŲčésŦŽē•Āß,—_L×ņ#Nŋđö¯kĻčö{Mmŧ§6ˇ>ĩëē›… ZX†aŒ,{÷­(åŽPLr+ũ͚ ˆŦē†=<ŌŗĒ}æęiKb֌ŒgĨ2ké7"˙ŗ^ĢŊwmÜ3éšuQEãŋôöÖī<5¤Eˎ7,ŖÔ —âg‡tī|#k+KhÁ„ÄĨ‚ŒŸ˜d“W>xLÖžÛÛ\A¤ū`$TįÖĢü2đÄzv—â-RˇYŖŽå†ŲC.88úU/€ö "xŠ_ øNkģY’;ĮuŽŨÉ5Đi2Í>‘i-ÁĖĪŗŸ|sWi:SDąœaÔį۟E1äDûîĢõ8§+RöĻŧąĮî̟SŠPĘNëŠuMlåEcĐš~F3ž=jŊĩ‘‚ĨĖ,O@˛KŨŧō'žo,‡MžÛŗ°ŽŊk?Æ7“Ŗ'Š^ōt&äCmL@Æ}*ߊĸŧÃđ•ęZ…ĖWJéöX°ĒšGz“\yuŸŨø—TÔ.- Žļ1E!]íŲ›Ļĩ4m[YģøOg0I$ŋ¸_(? ūõqšj^i^4ŸÃT×Iqųō;n‰ŋ*Ō†yŧ;ã9ü9ĸŨÍ'› ‚]‹…c÷›ÚŦh“>…ņRÛDŗŋ¸ēY!Ũyæ>āļø}õ_‡đŨ_Ī8ÄemV7*#Üu$Ö×Ã˙Ëâ+SŌ.Ļtēŗv…ĻŒüØč{×=áģÍrËã,ú ίswc,ʲŸ§ZÕņĮŠį›ÆZg„,ŽZŲ';¯&FÃņ÷AėMgø˛X~_i:ļ‹}#ÛÍr ē…ĻķR:ãđĢŌãˡ¤Îō͟lÖEˇÛ|Wņ[Ķõõģ†ÖŲOŲd1ĸ(éĶŽjßÂŊfõ2Ô5ŋƒŗjÚdn×ę‚& ÉĪr+”Õ,ÖĪá¤>#Žōî×XŒ+´r\Ėr3‘šô>|iđŪĖŨÜK×Ģ™!m­‘^MđūÛ_Öîĩũ$j—f G,X>Ī .{t­ĩņg‰<đęTÖ NyÚ+_7æe_īV–­ĨÛčŪ }r fgÖŌ!3Jn7n>›sŒvĻëēŨī‰~/‰í5)ėįŽ€Íß5SÁv^$ņ_€˙´§×.­¤‰[ėû[īcģ~UŌ|0ņ˙Šü%wm{vëy­žƒœz× ŖøZîīã­`šíürAæē ˇO—éūÜü[…ŦžÜ@d’fŒÆ Ŧ~bwu5¯áû 5_†:m¤WrA+Z.Ųb8`qÅy§îuk¯ęžÖõÛâÖāŦ_?á[ūđÖ¯Ēx“P¸“ÄWí§XŨyP‚ß|Ž2­zõrž;ŌdžĐ.nbŋēĩ–ÚtōhcŽõĘü"–÷_ø}yåüí4’´~nķŊ~‡ĩrŪ“Äŗ|GÕ|3ģtÖĘ>yˇQģž‡š×ĩÕu_|\ļĐgÔîoŦ¯#Î.q\˙úĢ×nõ+ŋkē† ßwĖpšĒrø›BwKĢYĸú™EiC4s“Bęņ¸Üާ Š’Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŠæ!=´ą0Ču+ŠņO‡V‰āīęz~ĸĸ¸Üav<0ĪJõ]kÅf‹hĶMpŽØų1cY^ąŊ{+ũRôH.¯Kո؟¸ü̊ø]¯‡õŋ.Ēâ噘™>_Z›Âz}Ήū&j&‘iąf(w$>ĩ[Į7Ûô_ ÚĻ ļa,¨‹ŸLR|Z¸m[ÄŪđŖ*ŧØē,Õī‹ļĸÛBĐ´¤&-4Ί;¨ĮZé´_ÛÅáÛš-`ō´ÛvÅ(įĮzâ~Ũ5ÜŪ"ņmūY÷6×+”UŸ† ũšĢë~$`rÎÂ"ŨĢÁ÷-kâÍn÷wŸ­OtbÜUs÷ž•š§YÉeņĸæûU}­ÁŠGũiÎōøãâ´ né:_ÍįÕũTø¯¨ļ§âÃŅ€Ļa$ƒoáëOøĩc ´đ֎„ÛØģ9‡ 1ëFģãKGŌ,-t]1L’am’$Q×đŦ¯x^ËCņ.“{ዏ+Qž¸O6Ō>Ũ،tūUīQnōSßÚ3õ§Õkį’=>åá•bbŸ\q^ đ§Rņ÷Šnõ][Qe͐š‘$—ŲôŠÆīˆßâēˇŨ&—ϐD˜ųrž‡ë^ĨņÎâķáöŗmh¤Ęm› ;Ô~UÆø_Äw†~ ÃÕč~?ņũŋlíå–Õî$¸bGŽŧÖĮ…\ãĨuēũ§ėeļŒép_]Ë2ˆ €îl“רW ÄbEUÚĄ@Ō¤¯2ø…yĻËâũFÖŖGĶîĸrw/(āü­žÕÎjž˛đ†ˇĻkÕæo>í#kBûƒŠ=Ē÷ÆxP#PÄįņÍV͜ÃBßŗsūŠS÷Íeø×F]+㟭ęŌŽūYžâļ ŒžÜâģÍFßÁ–h-ikwæ80§sHŨ+‚ø¤ļņÃŪ!’-šyhŅÎr"#ˇĐWĄøŸÅ:]ĩģÚ­ĩũüŽĢk wÖ¸‚LxNiÔŽÛ‘æãĸŸ—5×iúķjŋá´ąš2XÚØ0Cō‰1úWuEx÷Į]ScĻkö˜6ŗˆË{7OÔVOÄ_ ]ZxÃÚŊļãi*ŗ¸9~ü{âŊ_ÂļRižļY7 ›)ĮŪsÉũkÉüĢώâũv˙Ä׌ŋeb"ˇwڝOnüVw„|E“ão_AF™• ‰×î~0>•Ô<š‹ŊęīŠĩ´¯Žú}ÔĒvĮī+ÎįšŌøž?á'MGԜOq5Āoįb÷cPügŗk/xzČ|īŌ&îį ]‰õģIūŪIŠŧŲėōûîÆ1­pĨ5Ÿ|ˇšĐIÍÄģå rŠŪÔž$šĐbøO˛Í’ûRš‰VßšÔ÷'Ōē‡ž%fĶí,Ņ}‚×MW™ņÂČx?‡JÂø1ĒYCâOŦˇ1Ģ\\f-Į†ãŌļ~9hSęZô*Ζrn‘Tdí­-:Ũøb ë‹]?ËXFũØČĀéU<[6ođ{Pūˎ[+iŖ&(Xm''Ž=ꆗļV˙ āVš1ļ,Ĩšæ˛~^Zĩާ lŠÍrˍ[æoz‡Aŋ†Ķ㗈&štˆ \îcˇwJ›âŗũĄđŽę[™ŅĨšį1Š#;w|ŧWqđōHäđ.’ҏoôuȧåŋė/<5ã-?Å:jcÍS…ZŊgÁ6-aá;•q<ŠįMžĨۖĪâkĄŦ]Áká=SΕĩ´C0;{W đ"îÚÍ“Æ˛$ėÎ `ëY^ŋ˛“ãOˆ¤IĐ+ĄT$ũîyÅ3ÅļĶ|{ŅeYcؑ€Īž?Šģ¯ü8Ķŧsymww{q•Ā" ‚3šå§ũŸô‡*!Õ¯Gb¯OĐt˜ô-ĶKŠF‘-Ŗ‡~§ĨEQEQEQEQEQEQE­xcIņ{u D‘‡I ŋCYú_€<=Ĩ\-Äv†Yאķ9|l×P€+QđχĒŪ ģŨ>)f­iÚÚ[Ų@°ÛB‘DŧQ€*Ō4äÔ[P[(ã}é ĮņĄô}:MAoŪĘģ^Å>aRŪXÚęų7vņĪs˛E 3J,mVĐÚ xÅģ ÂđEEm¤ØZZ=­Ŋ¤QÛŋŪWå?…>ĪOŗĶá0Ú[EgĒÆ¸ZFŲēŠĘ¸=dTš‹UĐtŨioíRRŋuģÆ§Ķ´Ë=*Ųmė­ŌĮeĸ]*Âkĩē–ŌzHW‘K}ĻŲjQˆīmŖ!d\ІëCĶ/lRĘ{(žŨV=ŧ/ŌĢéŪŅtŠŧû=>›´„e€ôÉ­š)zW'}đßÂڄī4ÚhWvÜŪ[”ūˇ¤hZn…l`Ķ­RÉÉÚ:փ(u*à Œk˜‡áī†!Ôūۚbyû÷€X•ŲzWPĒQ€; Į—ÂÚ$Ú°ÕMˇ7Ŗū[lųãSÉ éRę+¨Ia^)ĘĖWæË˙éü7ˇļ0ÍsúšyZÔ€0+:ķÃúNĄ}íŨ„3\Å÷$uÉ_ĨIŠi6ř´ŋļŽxđ8ČĨļŌl,ôá§ÛÚĖ›vųA~\V^™āGŊ–îĘÁc–N¤’@úzU+Âú>‹w5Յ”pÍ1˲Ž´ũKÃzF¯w ÕõŒSÍ Ę;E?SĐtÍbĮėWÖqË ŒmúÕ[G𖉡Je°˛Xå#ؖl}M?Ä>Ō‰ā_øzėŨiÚz¤Į€îÅĘũ3Ō´õO×ėËRļYā';OcíPh~Ō<;ĮĨŲ¤ņ¸ŽIükbЧ¨éļzĩŠĩžf„°b­ę:SŽ´ûKÛAksn’Ā ‘8éVB¨QĀ ĮŸÂz ÎĄöé´ģg¸ëŧ äŌ?„t5EԛM€ŨŠČ“o5n}K¸I’[LwI”1éšM/BŌôXŲ4ë(­ÃrJ/&´iŦĒęU€*x Ö]ŋ†t;KÃwoĨZEpNL‰káí"ËR—QĩĶāŠō_ŋ*&דëF9h>„V Û†é÷MzŨ–‰ĻiŌ´ļ–PÃ#ue^kĖ~>¸Ž„ā}´7é]۟á}âÚÖņôØZV’ °9ĮJÜš˛ļŧĩk[˜XaŖuČ"˛íxR(ĶÄĮ;ŒķĢZG|=Ąj }ĻØ'U*cŽiú¯‚t gP[ëë’ä8'ëK{ā¯j2Ŧ—zd2•M€0ČĮŌ¨k:ī‡~i,ũšŪWډ ÷ŦŸßŲx–įÃÚT!e[šVčúĒ/#õÅz(DU`SĢ+VđÎĨh—_Ũ ĐU;?ø{O3}“MŠ96>ˌŠmˇ|5i:\A¤Áé÷dQ†C?Ãŋ Ü6ų4ˆKį;ųŨų×I1ÛA1 ąÆĄTz –Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧ˙Äß WWņL>#͝–ĪPLn/õ>øõއÃ~ƒÃŅÎâgšģ¸mĶÜ8åÍoŅEQEQEQEQP]Ānm%€Jņ¯˜Ÿy}ÅpGá&žÚŧZŦšžĨ%ô_vgpZģË8$ﺊgiäEÃJÃŊëŒņ‡Ãhŧgz%ŋÕîŌ9ŠÂíŒúÖĮ…|9{áØ&‚įY›P°"¨XŅŅEQEQEr~;đ=¯ôČmϘÁ4/ē)@ŨÂĢøCĀxnéīŽī_Pž1Ŧk+ŽŅŽĘ;WiEQEQEQEQEQEQEQEQEQEQHH’pzȗÅzyręöhųÆ ĸĩ•ÖD ¤aGzuQEZöūĶNƒĪŧ¸ŽēnsUėĩí'Q˜Ãe¨ÛĪ Û‚kFŠ(¨.¯-Ŧĸķ.gŽūôKowowûyŖ•=QŗSQEQEG%Ä0˙­š4˙y€§#+¨e`Ęzr)ÔQESŌ4.덪Šc€)#š9—1HŽ=UŗRQEQERdœSHŽŽģ‘ƒÜ͍ĸŠ(ĸŠ(ĻĢ́#ŽJuQEQMfTRĖÁTu$đ*Ôl˜áo-Éö•iEíŠl ˜IôķN##‘KEÅŨŊǃq4qālf–˜.0M€uØĀâįÅæy~jyŸŨÜ3ųT”QEQEQEQEQERdœSQĨĖ>Čæ›Ņ\RŅEQEQEQEQEQEQEQYž Õ?ąt+Ŋ@*ŗAeVčMQđ^ģqâO AŠÜ°É#•}=kĄĸŠ)ŦĄÔĢ Š ׀ü_đ֝¤øD瞁!7 ęđkŪlĀ6ātō×ųTôQEVvĩĄØkö&ĪP€K 9ÁėkÃūi°ŲüVÖ­áEmšPg8¯ hĸŠņÍrUņŸÅ†ĐnG™caa<;ûŠŅøUáOxsSÖ?ĩɲ‘˙ŅĸVĘã' íÚŊJŠ(ĸŠĻēĨ‹ęÁnc7awsķcÖŧŖã¯‡ãmz ™âšÕ ĢŦļkĐü|ĸ‡mÍöD$į9âē (ĸŠ+ĘÅĮü,jZEÔî4},…6čÅ|÷īģ…fxGLņ&‘ņ^æÎ )íŧ?#“°Ozöz(¤$Ič+”đw‹eņEÖąÛ$)csä!SãÔ×YEËx¯ÅĮ×úE¤p,ō_ÜyDÁUõĢ4Ņou˙ ]éÚuÉˇē ģ†j—ï ę~đĀĶõKąs?šÎ ą!Aė+ŽĸŠ(ĸŠ(¨/"’{)â‰ĘHņ˛Ŗá8āמ|7đ_‰|7ĒjZîŠö¨æ˙W˜_œũīc^•EE<ĸ y%=KsXū×ÛÄē"ę&gePAõ­Ú(ĸĢ_YèYMgp †eØáN+毋~Ķ|!Žipé ĩĢkã¯ÛxŌßLÔbFŠęÜÎ$˙UĮŌhēĮ‰üCc.ŋe­Āŋ3ĶJņ´0O­hŽĨâM{á{ßÛŨĨŽŖûß8”ė Áü&Ķ|cw§MyĨjļđÛ=áû@‘2ÎxĪ5ô ¨r c’=iõŪg“'•3iŲž™í_7øšĪœ|SŌlĩ Jžfß ų#ôãŊzÖ¯‹4oMv5ˆgÔ-U¤v0đëéŠ‹Āž!Ö|cāoâ(õ&fD•SN}+‰đīŒĢâ?ø;ÄÚL:ĨÔWÖƒėmЎËjë‡Ŋ\øĩ6ļžžëKŧŽŪĪČ˧9ĪMĻŠ|+ĶüI‡ĨÜM¨AũåōD1ĪŠ§ę>7ņ­æ‰Ļ^Ŋ–`ŋŊš!ķ;zڙcâë˙ ü@_ kWĻōÚéAļ¸~C^Ļih¯žhŲ⍕b p˜WĄgÄ÷>K=7҆’ ‰4˛(Q‘Ö¨øÁ‡áׇõ=oQÄē“#Hûz(ūčŦk-sÅ>!đĨīŠŦ|BЛbÄYų*ŽvįŊwž ņĮ< Ą‹{šFĖŖî°8&ŧķÞ*ņ{øīUđÕÎĸn^ U$+€ŖûߑދÂzîŋŠiž&ŗÖŦ,ˇ¤S:í.*Ā%'ÁúĻĶļFŊoĀâĨƒÄŪ%˛øˇmáĢŊJ;‹G_1ÂяJĩņŗö^-Ō|=MooxG™4#æäôĒ’jZ§ƒž#éēSj˛ßØj?.ɎYÖĨøĩĒø¯Ã6cYŌõu†Đ0Oŗˆ9õɨ.uŋ7‚?á*PŠ8ádû7”?xŖī}ęæ‘â/xī@:Ļu› HrZ=ÆGGŌĩ>øĘëÄúMčÔÂ-匯9J Žõ›§øƒRøâ]NËLÔÃJĶ›Ëķaŧ¯õ=Ēį‡ŧOyŠõę"[¨ĸßmuŨũųÉCãZ|J =ädš=ĢĪ ščæņnšáXhēÕÅŊåžĸ?u$qėe?LÖĮíÔ´Võ#Ōϐ'”Ŗæf÷Ž×Áv&ĩH[Vžˇ–Ä@ĸĸB¤qŪģJ+Īū"øōO ĩž•ĻĒļĢ|ác-ČAž¸ŦŊcSņ?­­5}OZūŌą’E[ˆĖAvgēâŦx÷Å> Ōü:ž%ĐŽ-›NØĨ‘Ķ'žâĒĮâo^ø)žjđTōxëšėÚ^ž‚Õƒ!!6םü ōí4ŊOO‘LwPÜęĮōŦ䴟^ø÷q<<‹7Ė>?SPø:ÖO |gÕíîūQs–™žō“ëøÔ_5ëkh°Âņ”ˇ”o”ôÎ}kˇø Z÷á}ËÚ.U2r0:ôŦKZZ|ŨæFŌ5šAyéŠĪđ˜Ô> ę6Pžfp˙(<“ūM\øößđ‰_i×|Õ¸a*1ūuwÄ~‘sá?čúœą4y"čí×hŦ߅z>­x{û¨ætr"LSo'ˇŌ¯Ká="ĶGņ.‘á´szđfi˛ sĮ֝đwPƒOø{*\ʑËk,‚Uc§=ëŸøWĒŲOņ_p6<ÎĖŦÆŊÄ˙´O jé×í!žPČ>č÷ŽĻŌę+ÛHŽamŅJģ”ûTô„€2Nx„dHž›…zÍô6Ö֒Ũ›hä’ŽŪpJņK/‡6Ū)°:˙…ĩšôį™ÚØ>U<úwޝĀ×烸+^Ķĩ"6žōÂeŒp˙.IúķY ux´†:•är¨)pæ<õĪŌŊ{OšK>ŪiF$’5fäUš+ÄüMûAhûÎHƒƒéÁŽĶU×%ŧ°ņlŅí­ +QÔėË ÖOĀšü=@âyū4Ú\žĄ^ĀŦĐE(Iņü ÍtgÁ–率I¯j&ÎkwŠR¸úTū 7†ŧ 4ö/9ĶmšF-/'åëj›ÁŋôoMsœ%ŽX)(Á#Öģ)1ĪJņ˙„„øÁ \‹Ž1ūņ¨|tUž7xm$]Éåä}~njĪĮwC§hQokå#×ĄŽƒâfáMßhŠ-ÖŊĻŪ^\Z^Es’‘I´‘ČÍw^đîã‹[ߡ]OŦȧn÷Ũ•sé\ś+ūŌy*qoĮ×›ņ:L|YđĸŖ Ų'ø~jŌøđč|/§!ę׊Aí]Skķ[kžŌ-ļ476ûĨ8ä×Ņ^ ņ:Ú[‹Úäā‹Fxņ!Ĩu_åˆü;ōÁÃM4kúķŸéX~,ļ¸Ķ~YÚÜ%+áø×W -ŋÁ6]ÃŲĮųU+ˇáęü fáÎ}y¯Oĸŧ¯ãÔģ< sķÜ(­í]h,ŧ+§Eąū×n ˇpĄk‰đ™ŽoÚÛí0ũ*_Û㇆ 0á?Æ˛>%é×gã‹4“4NUc˜5×øãÁ6÷žyõŋ_Iil<Ü:Ž3Ž1Åt_ bĩ‹Āzp˛3r¤Ą˜|ÄfēÚ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+#Ä~°ņ>–Ö„{ĸ' Ž ûV‡~čūœJ“\]2ũÁ3d/ŌŖÕžxsXžûeĐš7ŗŧLr>•ÕiMž§%•ą‘ĸ^ō6ã\öŗđīOÕuC¨Awua; 9ĩmģūĩĩĄxsOđü œdģķ$Žrî}I¨5ßhū"d{ûbeQ$mąņé‘Tî>ø^ęŪ.4Ē8>āf'ĩ‹§Ûi#KŠÜ 0ĨDd’1ø×;kđËÃ6sLņYKŸļUs×ôĢ灴? ĖŌéPIāC!˛ˇāk;Tøg¤ęŗjP\ŨXM'úΞ>Á'Öē=#BąŅl>ĮiœîŨÉlõÍsw? ´§ŋ–ęĘîķN6é"´}ĒÆē-@ąĐ,Í­”d+ŗ9ÜÎ}IīXˇ? ü=uĢI¨4ŖĘÛ¤‰$+ˇŠ_ZŽ/†>ˇ×Wˇĩ’ĨmŲIúW/ņ+OŅŧOĢA§YAös!HÉũÚwŨ^™ŖX /G´ąS‘A3Wę–̧&­§Kg$˛Ä˛ ‰ļ°ükŠļøAĄÚjBū+Ŋ@\‚ “ÎäũkĒÖü7§øƒK[ B2ę l:ÜÆšũ+áŊ•žĄ ŪĄuĒ5ŋú…šlŦAVüUā ČĄwv…Cá>¸Š|)āË ĮåZßŨĪ]ĢíŋJę(ĸŧëQøI§]x†]fĪRžąžvĖË ā8ÎMjkŸt­~Æ++šîE´H#GĀãšõ4É~iōi+ĻŽĄ¨ĮlafųXcƒWü+āÛ/ŲIce<ŌZŋ>T§ æą/>Fš­ÆĄĄj×:KܝŌĮŨcôí[ū𝧇VIDs{1ˎ2ōí] CWĶ›TĶŪŅnæĩ/˙-a8a\v•đŸMŅõ /­u]Inf9•üÁûΝ–ß t‹mwûeuE¯ŗ“#KÉöéFĢđ˛ßYÖSUŧÖ¯ÚâŨwÎGjęlô‹ˆ´Ķ.ĩn¤ueûC( ƒX|3Ōė´ø­´ûÛÛ&EÚō[É´ÉîEmi^°Ō49tĢ}æ‹ÎYÉęIŽ;Nø1ĨØ]–:Ü–f_4Z„ŨÛ5鈋*(¨Āę+ņGÃÍ/Å„Z„ŗÜZŪG€ŗ@Ø4ĶđįKm t¯´Ūw3Hë.RzîõĨđ÷í+ÃQĪ Åߑ2•14ŋ*įŠčjĩÂŊLÔöĘK¸gvÜî%9o­6O…:ډÔZâûí‡ū[ ÎGĩŸÂ­Vš)¯o5¤„æ"ĶįaöŽžmÎëÃߨˇ[§ļ1yDŋŪ#×ë\­ŋÃi-´_ęŲ}ĻGŨî7uÅtúŒ6™áŠ­oV(4ĩ‹Ëuc…ÛĶÃü/đ…ž›ĢjzũŒ •Īî­#nč?‹ņ¯Pĸ¨k`Õôįŗ7[‡ ™!l0ĮŊrú'Ã-'ÃúŠÔlo5›t›ĻȓëĮšĨÔūhúύ59ޝūܧ)7’žÂĸÖūizû[›Ûëæû?ÜgCë]-·ėī|:tKŊķ[4^S?1šõŽÃ ´˙ŪA8žŧŧ[`~ÍÐį‚@õĢúī‚luA5ᚯõWižß†aīëMđၴīŪK|˛Íw Ú×3œļ+ŠĸĢ_Ú ũ>{C#Ä&B…ã8eĪq^qsđCCŋ•džÕ5;—^…åĨtžđ5ˇ…nĨšÛSÔnEÛå\ËšG¸­íWJ´Ö´ŲŦ/cA*á”×!¤ü(Đ´¨Ė"[ŠíūmĘųEĪĩOŖü1Ņ4O;ėŌ]Ÿ1YP4ŧDŽÜtĒļß´ -@_[\_Įqģs8Ÿ–ú×Gâ [xŽÆ;›‹˜ĸŒķäžŨÜt5•Ŗü6Ņt-ĻŊĖ*s”ķ R}qUføQĄÜj?Ú2Ũj&ķ?ë…Á JÖÖü Ąëō[M{ųöāš6Ú˙˜ĒzÃ/ ęVļĐKlëö¸ęįqõɧk ô=vÂÖÆãĪK{U i&ņŲ>éhéĨÍs~öˆ1ŗĪ##ĐúŠŽËᖏĻéķXYŪj0ÛKü q÷~•cÃ4 _ŊŪ™-Đ2$—rą=ĪŊ3^ø{§jڏöŦķéځûĶ[ļ7}E]Ō<i¤Û\qq=åÂí’ōV˘ö=Ģ6×ᖏi­&¯ÅáŊ™\–ö5KTøKĻęúœzÆĢ¨˜Ûr>đJķœjčŧAáxyt{÷‘‘픜ŪĒxkĀ–^ēûWÛnīŽyi%Ķ(ž‹é]e‹â? iž'ą×ņ“°îŽE8d>ĸšģo†q>§ÖąĒ\ęq[ļč —îŠíŸZŅņ_-<\‘Áy}u¤cg…°ĻĢ˙¸ą:ö9Õu?ąāŽÁ(ééԟáo‡đxJë6­ëŲ€vÚČFĀOS]•‡â¯ YxˇD“Lž#rŦ:ĢzցđÚ9 j×W3ų%|f˙dU+ƒö~˛ú´ŪĻ/å¤.šo¯bûáF¨ęŠĒ\ęÚ“ŪÆsŪ`Ę}8­­wÁv> Đ`Ķ/&•ž ŽsûÅaŪšøU—÷ŪUžŗâ›Ëí>2ļŲˇwą=ëŅlŦā°ŗŠŌÚ11.ÔQĐ ąEQEQEQEQEQEQEQEQEQEQEJßHĶí/%ŧ‚Ō(î%ûō*ōÕvŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠĢ}§ÚjV˙gŊˇŽâÁļHš*xãHcXãP¨Ŗ Ŗ ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠBÁz>´´”Ī: Û|ÄŨé¸T”SYÕĖÁ~Ļ”à ‚=E-ĪD %D'Ļæ4,ąšÂČŦ}š¤ĸš[8`qםEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs^8ņ8đ§‡%ŋ4ŦÂ8ƒtÜk”Ņü%?Š­TÔ|K{#Ęģ•mĨōŸ ŦŲĩíSáĪ‹lôĢÛų/ôÛŦķΜú×Uâ^{ũcOđŨ­ÃZÔ2Ë:Ÿ›f:J[߇ļY<Öww°]ƅ–o=Ė9Ī5§ā}VëXđŧœÎŦŅ3{ozŗˆĸ—Å2hi/^c>kĪž3hŌZh’ëöz…ÜW ę¯ĖBíĪa]ŸÃše›ĀÚl“HŌČ҆gc’sÍu4Vˆŧ'Ļø•Pß ˇÆ¤!ŽVL~Uķŧ÷ZĪ…\)0)ŨÉĀĮŊuŋ Ž//<iw}q$ĶLĖŜįŊušŽ§mŖéw…Ü‚8 BîĮĩpVZ¯ˆ9›Âšmܖvö–æ{‰ĄáØ˙tÕÂ}kÄWך­–ŦˇZ[ž!šqķg<Œ÷¯SĸŠ(ĸŠ(ĸŠ(ĸŠĖņ¯… ŪjRãmŧeđ}kÃoõOá{ÚŨ^M}}q˜íã˙Wdí{ךč3]Ī ØÍ~….Ūi”öb9Ĩ^'ņx“@OíĢM~híe”FļÉĀZõO ÜKwá].ây ’ÉnŦÎ{œVÅVeŽģcw­Ūi0ČZęŅUĨāfŧ—âUīŠü?âm7Čņßcŋ¸Ú‘"…ōÆG¯hˇŨöhƒœļÁ“ęqRŅ\ˆÎÄ$BĮĶ‘XÚF­â4øymĄˆÖÚÎŨXŖŠŨ&?Ęģx¯ū˙ Å~é˛u;%QĶ"ēĒk0U,x“_;øįL“Qđ}ÎĄūō×Q‘‰OBŨkĩđ÷Š_TøoclX›ÉØZœr}Ísn§Møīgj‹čGŠ ^ŲĒę0éUÎĄqŸ*Ū2íjķņ˙Šnŧ5/‰´Čôųôؙ‹BA2ų×gĨøŽķÄū M_D†5ģ•~D› nųŽ'DøĨŽ^ëzއw§ÛŽŖn ÆąœŽáԓé[~øŒúžĒ^k1%šĶÜĢēƒĩąéY‘ü@ņū•?ˆ-a°ˇŅâ“í$†‘súV–¯â[o|"Ô5H—‡ˇpņįø€é\Ī€|E­Cā+xt 5.E˛ŗĘîøũ‘]׀DāķO üQ×ĩĪŨhŌi6ąŨ[ĢB#ĩ\đ÷Å K]ņö†ē41ÜÚŨ™O,;cë[žņ†Ģâ]Bö­!m!ĩÄŌ‡Ũ—ĢέuX´:ĖööōLīą:ŗĩŨØüGĪ‹-ü?ĒiæÎâåKDû÷[ž0ņmŸ„4ĨģšV–Y_˂ë#zW7qãhQZßø‡JļˇĶg+$kÚ-ĨŽĢĒé6įI¸uO6Ū]Ås^—ewũ”7p6čĻ@č}XŽgÆ^2ąđ†šŗN|˙›Ë‚yvíøW1uãísÂÂįĖVqZŪ>Đ"“įLúŽõŅøŸÆ–Ú…›ÛĒÜ]ß0KXAåÉīôĒ—ū2ēđÕž™'ˆmíüš%„üą1éPøīĮwūļ‚ūßIÚs¨2N$ÆÜôĒëņQšđĐ×l´–Í|Ŧ_wÛëŠÜąņaÖü5ŊĐŪLTbÛ;Nîâŧ‹Ãzūģmņ3]ģļĐįRš0ĶÍ\Æ3×5ęēį‹WÃö– 4ū×ŋ!c´^>oaëY÷ž5Õŧ5¨éđø’ÎŨ-ī¤ō’h![ŪŠxûĮē˙„;¸´¸%Ōä`Š;?9>ĸĒŪüVž˛—Iē}5Ÿ|â YŋxĮŒ‘Ûˇ­øęøHmü9ĄAē”Éæ3Ę~H‡ŋŊw‹u=;Åpx{ÄiŸu™o< Į?tÖ/ū"ø‡ÁzÔQ\ipI§ÎäC2ļIãSęßõÍ"ÂßYšĐ4yTš—2sßŪÁŦŲË Ļ°Ō´h|ííŲqšá ņΈĩ‹kgIŗ˛D„°I.äÚŌmę}ĢgIø‡Ĩßx2OÎÂ(āĘĖ į ;ZÉ_xžMū(ôhˇÍÎ|ã÷ąĐz×iáũvĶĚ4“n†aœzâĩkņĮŽcđ¨ĩ´ˇ€\ęwŽ#‚Ø=ÍdŨøģÄ~¸ĩĮdöW.Îļydö5CâKáKČėŦQô‰`V{ĸø#>Ôī„—Ū"¸Đ4ëYô¸SHŽ%Á|ŗ~ę´W“|ÁđE¨į?k_åF›âé^˛ÖÂÜiVÖéē2~rÚģë/éמ]xN‚ĪĘķķĀŽnËÆ Ö4š5Í7Kˇ:ZU^B%‘GR;V¤2¯„ßYĐėZūe;~ĖžOĩyïøŠãÅZåčĐÍܗ7J—dAíøV¯ÆÉ=_’̀‰sŊąėFk{Tø—wĄÛÁ¨]čR.‘#Y÷üøėv× XŪèØÁynÛĸ™Ąö5b¨kŗBŋn¸ˇũׇü ×tũ&ĶV˛ųm$ÃnsÅz?‰ŧ_Ŗ]ø_V‚+†.ÖÎČyâšOŲęB|1¨ŠP?Ō‰Čú ô?ø˛ËšrÜ܆’Y$P§Ūv=Ģojz:ÚŨxƒIKK§ ˛#î1įĻīJ“Į>=ēđ¤7đélą‘A3Æ éKŦxãRĶücâMŽãž<¨˛cĘfŦx_Įqëū—Äsڛd„;<`į…ŦUņĮ‰×F>!m&Ō])Ŗ2*E!2(ę7õĢĨOÚAā˜ņ–‰Ŗj]øzÔÛČ7+G)o,īW¤i­¨é—ށ ņ,…GlŠģEQEQEQEQEQEQEPÕĩk=N–úúeŽÆI'¯°¯6’äxúäļĨ¨Ĩ–ŽR— "˙ĩZē†ŊŖčvö:G‡.m…Ė’*m‡íĪ$Ô&åîū.CcŠ.R=Öāô-œ]Æ­Ļiڍ„‘jE$rw¯Jâ~X&œuļ´ ũö†û?ĻĨsŋ ŽGü'ž+”ŽCŗ ũjŠ:Ԛ×Âoļ˜Ö!-ÎŌ¤ö ĮōŽ“OŠ+?ƒ[PíO%žģk+āIđ…J˙—†ĮŊzEp@ˇąĀÚy¯6đ핾ąāmvČ~đ<˛…OSŠā~ Ų^K⛛[Ļfˇąf`§ zˇĒĘëûDÅķ¤Œ`ûW¯øßWĶ´o ß\ꐉ­Œe D}ō{W”i\¯ÂMRū[ )Ŗ‘ŖļQš›Đ5Õ|ŋ€x"ÎÍįO´9wXķķ¸äÖÃøĄ¸øÅârčŠaÍjüiĩM7ĀNēuēB’Ė Â1ÃŪ´?é¯uák+ÅRVÚã/ŅMz'‡ãŠŲ$`ŨÆ=6א|‚åŧsâwˆ´;—#ģnlZęađŽtĢŠ˙˛ĩ›Eļ’S&$.Ų9åĢÎ<kâiž)kąéwļŠ¨)a4’)ÚÜöīPßÜh>>"ģ‰Ž$ˆ0û ãĄŅ_Æ÷ãQņâ&Ÿy–úyp8ėĪÍu:vĩo'‰Ž‰Ļ¤?dļˇß!+‚ˇPŗ[Áf×1 ’2"-ķcéV¨¯Ÿ> FūøĨm¯Û#ũžņHe^„úVGˆWQđ'Š´Ũ~(YžúgũéoåųWēøM};ÂöŪwü|Üfyŋßc“^sáÛh§ũĸõŠßŨĀYqĪ?-Mņ Ŗ˙…Ëá% ķ†É?Ęŗž1‹éū ønØJŨ¤O+xĘÜ9?Ĩuž.đ¯Š.čŨÛ,ÆAķs^‰ãŸi>'K ŨJõíá°‹Ã/—JāüW_Œ^‰6+}œãå?įŠęž8ųđÃįûD{ĄÍSņŧRŸ€ņŦį2ˆaÜč4ëaeđ…b\64ōņÚËø¤|?\ŽŗŋķŦĪ$C㯉J)âdö9ŦŸ%ܟėTΈUŲüÁšGĘsÅuž6đvŠâ-.6Õĩ›XĄ´“Ī%HĮãīY?UáYéqyžfgˆéģå<×sĸhUį†tuš˛Šo"%h‹¯Ũ8ę+Čü7k¨Éņŋ[ˆ\­­ØV(ō&ī—#ßjžžÔ|KĨë:ˆS˞Ũ¨ˆGģžkã”fiü5 Æ×|ū•Ģņ‚8âøS$|žVúŠÍņ,׉đÔڃ–´A&ŅŅ{ÖĪ€´K=oā펙)aÄ$1SČ$× ņÃvøk™Ŗ^<°Į}›†ëķÜūUŨØčŪ&ÔüieĨ§‹yí`ĀŲ W´ŋ ŧ9'…ôũCLmN;Ņũ#ōÉ+ĐëĀügÃ|ŅŪál͈ž˜Ÿu_v˙ÂLą¸]­ũĶQx“΋ā ö&Se9ëœ čž§—đÛG“˜ŗšíh¯$ũ ˙„:Ȓ@c?•ojžD_Ļ$(û3#ūų¯&uH˙gš1ŋË{‘×ūyî˙ö/$kđļÄ m6g8õÅq|åƒÄ‘›u›)Ž™9ĪôŠūĖ–6ž,ŋmĖŠzĖĘÜąųĶg×5Ęøēæ{Ų˙Mšä“+Įw ė|ČŖø Îû'˙eŦO‡Ō[?Á…Ę Å(”'Ū#'?×ķŽ^ßÂ>6Ķ4Čîŧ=Ģ­ö‘${Ō):íūî UņÖˇyŦü+ŅÜĀmR;Ŗ ņ¯mã§ÖŊ!4/ęūƒO‡S˛[‹@ ˆ etÎk čš7ÂģPԖâ´,Bt_õL[åĪ=rZރņAŌ䍎UŅö|üƒō~<ô¯dđ&ŗšá ¸#ōÔ'–SûĨxÅt”QEQEQEQEQEQEWãŋ‡×4š‡v¯%ĩĸ <#}ë”_ŲöÁ]J론Īáé[^ø/¤hĖZž¸žXŽT8Wc¯øfĶ] #;ÛŨÆŠæ.3YÖŋ‰ßQņ åõ›Žß)€SųŠčėtûm:É--b Œįō|%ėĩŽŠq-ŠĪú;ãh'ŊvÕĖxŸÂ×^"pąëWvPėÚŅĀ@ŨXŪøh|)tÛ[ŧ–mŌC!Čj¸ŋã˛7ōé:”öw7˛ų’HĒ8ö€˙b“X]]üA|u9ķ~_đޚëÁmĒøvķFÖ5/"˜ƒ‘ƒų5Īéß fļŌF‘wŽÍqĨ `°lÛųúŌø?á•÷†%žOírØFŽØmâ5c“õ5đˇXđ˙ˆĨÖ-üH[†ÍĀhyqŸZīõũ×Ä:4úmâƒĘFHé^yĨxÆ:EœšM§ˆa])žUĘeÕ}Ģj˙áäĶxNXęfÖĶOōn2įž:f‹āMgAđûiZúų9Âīƒ;W¸¨<đßPđv­%Íž´˛ÛÎû§‰ĸ垇ĩqü#o¨|AąžÆõßSģ‘sā…Q˜×ēÚFŅYÁrÉŠúO‘Yĸp­ĩАĄ¯8Ö~kŪ ĶįĶõ/I-œ­ģËû8ü*ցā]wÃ:uĩ†Ÿâ!öh›,UĪ#5ŲjÚUŽĩĻO§ŪÆ$‚eÚĀׄŧSaĻK¤Yk}€‘<‘“"'§ŊoxGÂV^Ō…ˇĪ#ĶLFFõ56ŊaŽ^˜ŋ˛58Ŧ”ŋ|{‹W Ļ|)Õ4oOŽYxˆ ۃ™KÃōˇáZ7øyĢxÎ;Xeņˇ† Ƒā3ú×0ŸŽŅxņeØ$r6œ:í>xøÁ-÷Ûfš`L…H Õį.đžŠaņbÂūÛRķdžēĢČ ōļ+ßS;w\sNŽOĮ ÅöÖŌ,oirŗGŪ¨ĻxĪÁiâ¨t¨Œˆ‚ÎádmÃ;”vŽžXå[ŽØĒČŠĩ éšķM᎚ĨøēIĢÛ}Žã"Dō‰‘ĶŸj“[øâMgÅÖzüšĩˆšÄ˙Ŗ „ã¯ņs]‹|<_Ą[Ay:ĮŠ[bHŽc\“ü+? xöō8´ŊKXŗM0 ˛Ë>l‹Ü{fŦøÃĀēū‹‡§^AgĨÄŖ÷e2Ų<~ ×Ŗđđúëy&/$ČĐÁ1ŒuĻü<đV­ā¸dąžūŪâĀ’ęĒ…X1Žö¸ˆŪ˙„ßMaš÷–¯ža•ĪŊsēŋÂũsÄ~ÚÖĩ×pöe6Ƥw>§ŪēoxV˙Ãņ\OĢ\C=ôĘą–‰p¨âģ:ãŧ}āxüaglđÍö}BÍ÷Û͎ąŦ¸<1âũ]ã´ņŖl4ØŲK%žwMŽĮĐVīŠ|o¯ÚZy2 [Ëm0\íĮcíXˇ~ ÖŧK{l!Q™ûŽXŽ•ĨáĪ]鞸Đĩ}Iu iʏíØ˜Æ=띱đGŒ|6Ĩh:ŎöKį*~ō,į]Jø"Åü#&…rZãÎĨšNYä?Äk–Ķ|=ņIˇ]×Qŗû ąÜ¸bȝã]׆ô|;Ļ XÜË+ą’y›īHįŠ5ŗ\ˇŒ<‰ŌÚâ)žÍ¨ŲļûyĀč}ĩsÍā=ÄWļ­âÍNŪ{;WŪ–Öč@r:ÍhøįÁ:§‹,ĶNĩÖRËNā0îÜGŋåSxšĮ„í æŽˇ–Q&Ø#íÛ]ÉxãÁ1xÚŪĘÚâāÅų’9qŽƒŌšßø@|K5đåÎąnŪ8RUœPĨv­á,øcūņn‡•åūŋZã đ§Œ4ÍMNžŗ:w)Ōæ"ÕÕxG–~ĐSMļų‰ËK!ęėzšãėūë:VĨ¨Ûéē¤1hڄĻIҐ™°ŠŧYđįWņĄeî:W#iā/ˇ…äđõöŗnlR"$Ã7(céMđŸ€|CŖx[QđíæŖoö9Ŗd…ĐdŽîš­m;Áž…§ÃaŖëÆ;T]Ĩ%MØõÅiMām2įÂG@¸]ņ6]¤Āɐō[ķŽ~Įž7Ō톗iŽ[g ÛdUôô­oĀ'Qđ_ö ŊŪĮyI§nŽwĮëY—ž ņĶN‹eŽÛ6šéŗĖ™šƒĐz×eáÁáŸÛiP1qųœ˙ĻļhĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ŧ+Âzn•ŠÜęH­5íÖiĨų™G÷G ŊEQEQEĒíŦmĩʐ­čk—đ߂ĶHÔŽ5mBíõ Nn<ųúĩĪEôޞŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŽiŖˇ…æ•Âƃ,Į°Ēún§iĢY­Ũ”ĸXXzŠšEWņFoiÚęÚĻ-RÕwKĖ—æđ§_Ô|EáAwĒNfšß‚}šŽîŠ(ĸą|GeĢßiŪ^¨ĨČmŪc&āGĨyįÃ/øWņ†ĢĻkWĸu´pŖ9¯]ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ēŗj]Åi-Äiq7ú¸ÉåĢ–ø“âëĪxm5;ežF˜Gķt\÷­?ëķø›ÂÖzĨÍąˇš`w!ĮĩtQEQPÜŨAgn÷2¤P Ë;œ¨ÚęļIye(–Ũū뎆™mĢX^^Īgosˇ­E9ÛõĢÔQEQEUQ¨Ųļ Ö qģTŪŅķõŽ#âoŽõÅaö rn†r2ÛękŗŌo›QŅ­odŒÄĶDŽČ„÷Š­/m¯ĸ2ZĖ“ bĨį‘ÔW™Ū|F×"øŠ†ĄĶ7YųŠŒvåļ÷|úWĒQEQEqū8ņ°đˇØėíāķõöŲn„đ9'ķŽwJøŦEņ? j‰ ÁdĨ6íb3ųbŊJŠ(ĸŠ(ĸšŸZøŽââáûë+hBūđN…‰5æZWŽŧsãŠ<+įØyŅģ+OåœqíšîŧE?Š´m¯˙´ŦŒDÆ@cĮ˜Ũ€Ŧ Mņ+W0]ßÉighä1Ķį+ũ+ÔhĸŠ*…Žą§ęWW6ÖwQÍ5Ģė™TįaĢôQEĖëîp¤Ēúšō[_‰Ū$ƒĮ֞Õôˆ-ĖĖ7$§ĄëÕÉüCņ\ūđ̍ĩˇŸ6āˆųTúš€|G{⯠AŠßZ}šW$mƒî+ŠŽcÆŌx’ \xq­ÄąeåŒîP;W1đÆZߋŖÔÛW(ßgp¨Qpî+͍ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+Ë~'|BM•Ūegq%Ë.É%Ûō&}é>øĻ9t[4ÛĀpK\2a2kŖņ×NÕbŅtĢoˇęԌˆAĀAęMEĸøŪi5ąĸkļ_`ÔŸ6VOĄ­øŗOđĩŦrŪ–i&m‘Dƒ,ưcø‡%•Ė#^Ō'Ķmn\ą ŖĐ7Ĩ\ø”R‡:Ģ#nV„2zō+ƒđO‰æđwÃ;kĪėŲ.âÜKyg‘ĪÚøSÆÚŸ‰.cßáû‹KGHkˇĸŧûÆî<#|ņļ‡q=Ē&æ¸vĸŌ~(KŽiņŨéš ÍŌĖ…Xžĸēũ Ä~!Ķ>ŲbŲ<†ŒõVô5åŋ 9ø‡â’ØĪžßĖ×uŦxÜZj¯Ĩiz|ēôc/0]´žņŨ§Š..,ZŪKMBܑ-ŧE^ņ?‹´˙ ÁšŨ-Ėíļ xųy céŋ„ēŊļĢésérŨ˙Įš™}=ŋúõĢâ/Yx~hmŒ2ŨŪÍūŽÚ\ûÔ:'Žl5}@éĶ[ÜX_íÜ š$zŠęhĻHū\Lø-´ÔיGņŖL]]*˙Mŧŗ‘ßj´Ģ´cךŪŅ~#éÖŧ4x㞆]ņWAę)ÚĮ`˛ÔÛMĶlgÔī#• sZ~ņU‡ˆíĨ’ß|RĀvÍ ƒ īšÄo‰ú?Û¤ ģx#b­t">X#¯5=ĮÄm=b8î'ļwdTdž:šÎąøŊ jVm5¤7sČh‚8÷9÷úWUá˙éū$ĩiė]ˇFvÉŽÖCčEek^=ąŌõaĨZÚÜęZ]ͨ ÷ôĢŪņm‡ˆdšVHnĄ˙[o(ç֙¯øÂÃA쎞t–æúãũ]ŧ,}ũŠēwŒl¯e¸ˇž­. ]í ŖæĮ¨ĮZōŨG⠖ŠņSMģˇ"ŌÂ&Æa!ŲˇZô{Į~°ŌíŽ5h$k[•ŪĸHwÄU÷ņŽ‹eá85ägI‚(˛!YV_|1jķÁ4ĖļlXÉb~•ŊáĪi>(†GͧÜŅdûmĨ܊Ëģˊ<ĸũMgAņOHģŌŌúŌÎūå.ąC¸ÆžĻē­Yą×tôž°˜I žŸZÁŧøcĨ5…ÖŖ$eʧ¯5 ž/ŌäđôšĘHīo¨Ĩ˜Lzדx{⠜ßumfęÖéc’†H‹0\˙í^‰âh:AƒûRÚvâ&Ã'ˇÖĻņ?Ŧt ŽŠåI ¸Œ˜QÛŋ ŽGá'ŠŦäĶŖąxn…åÜī#ōÁ$ŸŊͧōŽ™|y ˇ‹×G6sGŠČvīxpHúúWA¯x‚ÃÖjž€ĖFYØôVŋãQ‚ĶXĶ.ôąrØˇ’eų_Û#ĄĢŪ*ņ•—„­Ŗšŧë"\Ēúfŗî>$iąÚ ¨,īn  d’Ü#SękŖĐõËéQj|ÂH$ģCZU Ėëkk,ė XÔąsÅ|÷ãØk?|;v“’ŅŧGsö…z.Ąãŋ iB\i7 %ÂöŸŗÃ`šŊsņC@ļļŗ¸c3Cr‡ ōĻjëž0Ķt8mˇ—žâč ŧ„Õ'Įļ÷ēĸéē…•Ærų1,É1éYū!ø¯ĻøgS6Z†›|™}‰.Ī‘ž†‹‹Z-Ŧ‘4–—ĸÎF/<¯ŨgëWuˆún˜$—wŅDĄå–Ũ2ˆŠ­īø‚ÃÄēTzŽ.ø_ķSéZ´Q^ ]YŲüxÖ.$ÄkČėîq´qšíô-wOø‡âÛÎŨgĻ˘­ŗ÷Øz×ŖV‰ĩ¯üPŌ|7­˙fjW賤žXØ˙Cšš‰z%ŗFō­ĘÛ<žZÜ˜Ī”[ũęšâŸéūŅŌõÖ[9 Bą)mßá^[đŖÆļöŌęÜŲ]=ÆĢz[|Q–UÉāfŊꊆæqmk,åYÄh\nj“Ú¸K/‹ē ÖŦšT–÷Đß;m4$’ję|MĐNļē;-â_1ˆÛļjÍÄ "˙Ä'CnEč8*a8SÚŧãÆrEkņûG–Y§Ų՝oŊÅzM§ô ŊQlËĮ,‡™ĒŋĐՏx“Jđöž$Õĸy-ߓˆˇ¨Į¯aSøc^Ķ|CĄÅ¨icmĄĘ¨+ˇöŦ‹ŋˆ6I{so§X]ęe8š[e÷­;MzĪ_đÍÕí›ņåHŦ„ōŒā׌üņMˇ‡ôŨU%ˇ¸ēššë)ol›œŒrqé^ąá_ˆOŠī.,­Rx.íūüŽ×ŧWYEQEQEQEQEQEQEW™|nÛ‚EÂČepšŪđ9ŠÃáö™+”G6Á”œĮæŋ åûŝf{’Æeg ¸ō9˙ëTŸä’?hhˎ*Ë÷}2(ņeÄ×ŋ´{íŪJĒŖ5v_ᅾŨmĄCčsXđŪK?ėūŌ^îi>ÎP’zķĮé\¯ˆĩ-Âz1¸°ŨŖŦ€;“÷ëč_ęVZŽow`@ęQÚĩhŽâū?á[jgā:­đžŌ _†VŌÂ|‘ŗ3zšåžŨÜ>ŊâHE°œž;¸Õŋ…qBŪ;ņ\Ņ1ÂĖsŸ÷AY/Åû‹Yī/H>jË8ÛŨŠžšYž7j˛\…ŌHŠ÷Iǎ˛ÍŦ~а[\1{kaû yc¨Ž—Å˙¤Õ|scâ ĩ5ˇąļdc`ŠíõŽODÕ/¯>3j÷YũļxĮ%ąąFzĶņ6“â­SĮÚFˇ‘ö `’3J§pĪ5ėëŖw\sNĸŧ âÕ¤7ß<7hām‘Q]q÷˛Õčz§‚ôŨ.öīÅ0ų{mfËÂמüÔĩŗjڄcßMqs‰$2 Œ~ŊëŖĐ´[øãYÖní’ĪMŊ…ƒ&üāã­qļž&ņ‚tû/RĐÅîŒîÅgEāŠ9ë^…đöķEÔ>\ũAXČņH9ŒœœW?đMƒû3VÔLjŌ5Ɉ6:Pø{PŧĶū3øŽÖÕ‚hZF aĐūĩ™đŖUÔŽû+ûzĪOfÖâ‘Ø1EÄquÉÜ{ԟõm: }Žî čŽ0ĮĮ°˙=Ģ܁:Zä~'m˙…yŦn]ÃÉ?…c|ĩ…>Á8?}¸ļĨpž×ī´‘ãĢXCí÷Í/D$ž•ĩđ†ûQˇđ„ˇÚT—˛O;ŧ˛ī“šÛđ‡Žé^%Ö¤Õ-R:õĖņDÍģkgšÆøe,-ņÆxÆå—pmŧĢGãEÅĩīøî­$As×Q[ZĮ–>Jˊßņ.ÆH˙f›đ‘aá۟)Ú Ũ–R;ûT?c7~Ф’<;Jģ˛=En|CĶ ˇø3$¨"†=Ą{UŸY[ÃđrPHf´g‘ÄƒÖ°gŊÃAÕAbP\üĢØq^ËEķž•Ļí|~Ô­î†a ĖëŲņĐjāÔöžÕüGâøĩīÁ 1[/ú=ē6âŊhøßĀōë÷ļZŽ*E¨XķáÃ{VNąŖøĢĮvļúV¯a›§Ģ†¸q&æ“Ũ­xVū÷Â0xwBUŠÜ¨‹s€+—_†ū(›ÁŖÃ×Ma$IÂ31ųE]đ7„3éúWEo§ø›VŠ˙SÔ×Éfˇdĩ˛Vé‘ü^õ‘áˆ|Yá=?QŅ—RˆōŦ˜ÁĪĘA­ ørmBÖîŽ`[y¯‹Ęa^‘Œp+Īū ęž—ŖęZŲ5íģ\°eī+qúé]ˇ|!}mâ=cĚ´DēŽU -“Vu¯†5ŋø˛˙SŅl˙MŊmŌA•ŊĢŖŌ­üA¯k°ęZÅ °˛ˇÉ†Û~æfõođŽr˙Âzׄüwq❠Đ_Ax6Íieúg¯J贈‘Ē&¨#–ķT‘šã€p+Ãú_‰ūÉqamĻ OJ’V’'…°éžŠAގA°ÕîõIu}dKÅåCl­Ÿ-Iį>ũ+Îė<;âß øĢ^]7I7ę§\™ˆúõĪĻkcÆūņ÷ô˙év‘ÎÉļIæ2…éŠŨļŌuWáÕ·ŠZ-­ÚÛųí}Áøëšæ|¤ø˛-;OđÕö›ö[;9üÉnwäHä(üi5ŋ øžķâ=ˇ‰âĶ 0Û‰ž2G<ūĩĐxÛÂ7šÔú_ˆl#TÕôü?”Į‡JgëY> ĶŧAņ;6įI}2ÎDˇJĀ–ĮaÆˇ&Ųø§Ä>G˛ŅĂtWšE~ŗ÷Enü5´Õtŋ [éZ­ļ{UÚ­žVG‹<{kã+_h–ßh¸ŒbâŨ[ ūâŠ\č:ĪÄ?éˇÚΓ&›ĨX6ņ Ŧ7Č߇j“âŋ†ŧCâ™të &Ę7ĩ„ĻW||ÃĩOâM;Æ^!đshĻÚG,ĒG3pôüĒ}Jņf“āĐҤ“Į’›heĮ'Ĩe|)đŋŠüwq§ę6ë§ĖÆF™eÜsØW­Ņ\ˇ‰.ü] ü)áû IíŲxķI´Š¯6Ō<ãŊ#ĮW^'û”ōÍŅ‰ļõôãÚēßø{Xņ†ƒöŌmÅÎÁ$sF#|ôæ˛ŧ§ø˙ÂxĶfĶ-ī­U˛ŒnpPwúÖ§‹|~|Gaâũ u8'ˇŨ5qüęøø”Cmu§eZovgØËXß<1âęzZ閑5ļ"ʲ<˜.xâ™ãŊ;ÅŪ)đœZT:2Dō€eo8¸í[ŪŌuI>ļƒĒ[Iãˇ6Á‹n ōãpöŽ#Âūņn›Ļ ÜØF–jķåŊä:ÎĐ=xĢ_4Mj[ =KNžZX§Ī}ŦOlz×Ĩø_íGÂÚaŊ$ܛt2ëŠ×Ž'◆Ĩņ?‚į´ˇŒŊĖn˛FSĪ5Ģü;ķ>Ö=÷Ąca‘üC­w>ĶáÛ< y1*‘īŠō/i^'ŋøŗoŽŲøzymŦ°™ ˜9é“īV~$ÛxÃÆ1ZØŲønhá‚U•¤ķįÛ­tū(_ÔžĮĻÚč¯%íÄ\‘ŗ¨ō¸ÅPđ†uqāK x‡M6öâ6 p|ÍĮ?‡ZĘđõ—ŒžŦÚ5Ž”ē›9h%WĀ\ú×Pš_‰4Íîîh¯uI‰¸C&Ԉ€ŌšĪ‡ņ‡‚í¯­åŌá•ff•H˜}ėt¨4? øŪËâCxŠ}>‚éļJžfãŋĘŠütđļ§s2ëņÜ °†5ŒÄĪÎīaī^“đßícĀJß!IÖ=qÚēē(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŗĩ3ŠnƒûŗĶo.ngU`ņFYzúÕ˙…„ÃÃ6ú5ՍÅĩ͜x62Ąž•čTQEQErÚī‡ŽüEŦ[ÅzÉũ‡Ū‘˙ÚöŽc@ˆQĀEQEbx§V˛ŌtŠoX…xŲTN㎕æŧGĨŲÁy§Čm,÷âGS“jĸŠ(ĸŠ(ĸŧeī°ž"køŌÖI,ĻôŒ^dJ™ãé[šŋ‰üqŖÜ[YÛÁy4ëĩ!‚ßs3ĢWá‡.ü3áĩŊ]“Ë+Lcūā=v´QEQEWņfė[|>Ôo2LžZ$šÅø7â 3á{- i5՛Ę(Gë^ĨEQEQEQEQEQEQEQEQEW!Šx>ã]ņ0ŊÕ¯|Ũ2 %)aŨŊkŽ( ږŠ(ĸŠ(ĸŠ(Ž;Vđ\Ū!ņ Wzļ eĶ-ßt6 ¸R}[ÖēôUaT`NĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļí]Û°3ëJŠhĸŠ(ĸŠ(ĸŠ(ĸŠd‘G2í’5qčÃ5°ŗY‹iqŅ„c5fŠ(ĸŠ(ĸІæŌŪōĖ),gø]r*ŊŽ‘§Y6ëk"9ÎUjõQEQETrEËļHŅĮŖ.i‰imždvņ#˙yPSŅEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy¯Å/ęū{Ōėŧß<îŅ–îzî´KŲuÎōxĖRÍvCØÖ…QEƒâŋZxWHkۑŊØíŠ!ÕÛŌ¸ˆ~)ßYøĻËHÕôøâkĀ­ÆŲ(ĻęõZ(ĸŠ(ĸšä„bŖ$­yÖŊãīxnÆmCPđÎÛ8ŸÖ^qØĶŧ5ņTņe‘ģŌü8í8ÜķÍüR†ĮÄ ĸø‹N}2åņåŗ8d`zs^†Ž˛ t`ĘFAéÔQMwXĐģ°U^I=Š#‘%dƒ# † ĶčĸŠ(Ļî]Ûw Ũqžkø…ãČŧĻÛ]Éf÷M<…Tā Ūđ!Đ,õXâh–å7„~ĢZ”QEQEsž,ņ\ŗÚ¸šš“ʡ:ģ…`h_cžņađÖĨcöMDôû×8Î3ë^ƒEFfˆJ"ķĖ#!7sĨp~9ø‹sāɲúĶÚä(¸Ũ…-é]nĒoB´Ô„~_Ú#ŗŌ´čĸŠĪÖ./ítÉfĶmîé~ä,Ûw~5æū$øŠ¯øJ(ŸXđÂB%?)Y÷ ŨĶŌcsg ėģLˆoĻEOEQEQYēåÆĨm¤Í.“jˇWĢģm Ī­y‰>(ø¯ÂÁ.ĩáØaY˛¨Rm܊č<=â¯kÉexē ŧvግ7;}kĐĢĪ|Kņ>/øŪËÇO’S1PōúnéŠô ÃnãĀÆyĄY]C+SЃNĸŠ(ĸŠ(ĸŠ(ĸŠŖĢK{™<št)5Ú¯îãs€Æŧ’Šū$‹Į6~Ô´¸-ŪIV99<×´ŅEQEQEQEQEQEQEq^!ø øoP{+ß?ÍC†*œgØÔkņGFšŌ;‹kkۅ“œG %GŠô­ÛéZŽ‹.Ģm+41.éoΞØŦ-3⯆õIįŠ)fG…w0‘ Ÿ§ÖĩtOhÚė÷[ĘņËiĖŠ2í zÖEįÄÛ8–Y­4ËëËH›l—¯Ę oč>'°ņŽÚŽžÅŅAĘGjä§øÁĻŲęßŲ—zUüWLvĮÎZ´5‰ēn“s7ļņŽ˜¸'Û֏|@đîöņk“âPŽ…āČæ´5Īé^Ōí/îŖŸėˇ š4ČQīéUcø™ MĻ%üM4‘2î!#,T{úWGŖë6:îŸöŸ8–ÚŗŧCã/ΐŨ4’\Č2DģœĨPO‰öDˇōĘđ´'kÛē"ŸLVĮ‡*øÛHÖ5­ŪÖwhmnŗ>ä p}+Ō4Ôđw‰f_Â#žk$ Ķ€0*Äßt(™ŠũĻKu;Zá!c?ZĶÕ|_ĸhēt7÷ˇŠļĶrŽŖv*¨>!ø`éQę_ÚIöi qĪÕŋakŠŲEyg2Ío*îG^„UĒĖÖuũ7@ĩ•ĘŒpšäąö•¤|Ađæˇ¨}†Ōô‹Œd$¨SwĶ5ÔQ\GÅÄßđËXtŒÖ°žÍ |?UiXLŲą\_Æ/ÄŪ1Ōl´xÅÅė`Ŧ8äc?­{Ƌm%އgm;$PĒš÷ÅfĪã[Ūũ’MN!.íŧrúô­›‹û[[&ŧžtKe]ÆRxÅbGãŋI˛ŽĨŽ"73q×Ĩsŋük§éēĶ’roîâÛk× :֗ÃÍsJŸÃÚv‘ixŗŨ[Ú¯šÎ9­cÅē6…(†öė ˆĪ•ÜĀzāvĢZ~ŊĻęšs_Ų]Į5ēŽæeįoÔVMŸÄ/ ß]=´¤fD›p +KJņ&­™†Ÿ}í Ċ§•Ŧģ߈^°™’{ãĩN֕#,Š}ÛĨoÛjVwšrßÛÜĮ%Ŗ.ņ*ļWä|@Ņîū2Gqũ #Ķí,Ú/3wČ͞kĐסJī?á9đí‚Cms¨Į¨XĪ ltÍtŅMđŦą8xØeXt"š­Gâ‡4ģļļ¸Ŋ&DmŽc]ÁOšĢqâ.ÛGŦ—iö"ŽG5•Ä? ÜĮ<ęą:@€xĪJŌŅ|KĨx$m6čMåļÖ`~†Ēë>2Ņô;Ÿŗ]Ní8ûÉ*=ņŌ­i>%ŌĩɤŠÂåexÔ3Û5¯E⟴R3hZK0ˇ?÷Ízo‚”'‚´uĒ*ŪŽ2ø.ãÄPCq%ŗjĒū\EâųÁö8Ē˙ük§xgÃ×vŌĪ‹éá+j~o›ŒĶ<âÍ øFÎÛûM$¸ĩĩķ.;Š÷9­­3Į~Ö'šAf’2:…<(ŖOņį‡5]J=>ËRIn¤ûą€sL¸ņ÷‡-u•Ōfŋ vŌyaJœnÎ:Õģč—ZŋöT7Ē÷g8@:ãĐŌëž*Ō|>ŅĮ}qûųGîáw;}ĒãŊ4GÕZëFvē•ÊôÅ$ž>đė:<:Ŧ—ĀYÍÂɡ#=Å2Ûâ'†¯,æģ‚øŧödÔúGŽ|=Žę"ĮMÔâā‚vǜ {×GYz׈4ßډõąÂ¯Vcčcé_´=WR[’X.î,ņ”ßôÍ\ņŒ4 =ēę’ŧBoēá Qŧø“á›H’Oˇ Qš&%,zœWAĨjÖ:Պ^éķŦĐ?FZÆÕŅô›wW{™#ą0”ąâ5Į8ŽÁû,|9Ģ[hâkû'Ũži~TO÷k[āZ2ézĄ-ĮÚtŦߎCXŨéž(ĩR$ļ•w8ëÆĪzét[ËokÚmÖŒÛOļW=Æö›ņâ"|9§U Ũ*ũ+wÅqÆ˙ŽEF?cr;â˛~hŅ„n #Iq–b:ŠĢđ-&‹OÕĸywƗTzzÕmÖōããĻŖ6ĻÜ$dBČÛÚ¨ëúJę˙–ÂË[=ģ €œČ#5ęž𝏄4Įąąy7}ėŌu&ˇČĪZņ_‹úm¤#đȂÖÄ×#~ÔÆãš×øšzŪđ&—p5͈Üĸ㌠Ö֋ĨŸ ŌÜ"‘%‘#pŋäמ|9š}ká†ģi¨*Ü%šēÄdÛMøeāĩņ/ÃÍI`˛\3E„ggŌŊÁžo øb×Jyŧį‹9Zč+Čū0iW2ę:>ĢĨomĢdĮ1ûĮ9āwúW1ņVKŋxbâÚÆkIDĘĻvMžgLūĩī–’¤ļéĩՈP88Šë‰ø´žk ‡ c~b¸o„> Ķõ<—ĸq3ĘWrJˏČŅá;ø˙ ÉtĶĻO-ܖ¤î6Ėw9x6=j–ž|G¨|’Úh%ÖSmXå2ĸœŽõĪęž7ĐüGĨÃĨęē\ēUälЎ?yĪĩvmėäø}g{ q<ÛâT™FN=3é]Ž— ށá/ x¯bWœ…Éú×đfiĨâ RŪų"û}šH”.4ø‚Ú[(ÖžXYPr;W]ņsNĶĻøirą$ °:,l a>a=)ڞĢ7†~ Ãyh˙ŧŠÉĩÆZwÂÍ*Ú_‡0ËsL÷ĄžfqŲŽá¤fÕüIáŠO›em;‘ū`̏ŒVgÃĪ XÜ|TņhSė֒ˇ—8ÎīJžņ +öƒ†+ü˜ncj¯œW´ÕMNåŦôģĢ”š(™Āú ņī‚RsXņˇ}ļ[š%-ÉQííOKétÚKRĩôjŗG؜uĻxĶCĶ—ã‡â–ëąđėdųŋZö+>ĪLˇō,­ãˇ‹9ŲĀÍZ¨nm`ŧļ{{˜Rh\aŖuČaô¯ đ&™§Ũü`ņŧļíkm¨Č0¸=ĢŽøģ-¤Ÿ Ĩ6ōD`IP(2Š,ü9fß Ļ3ÛFĶÜYw+“œVO‚u{'āÍâ9’Kq*Æsî@Ē õhm|3<ˇÚ=íåŨÔÎŌLļæLķĶ5cáOöƟã-fÎįOģļĶn K™6…9ôükŲh¯ũĄË˙Â1Ĩ 8 w˙˛×]áß蚏ƒ4Õŧ°ŽF{eŪrrxŽm~˙áĪċ}Ūįí=ÁMļėŧÂā}ą["‚M?@˜ÆĸfžEŨŽvúVīÄs{…´ÛÛ´ĩœņĖÖ˙ķŅ@é\,Ū:đī‰õ­Íŗ—IÕ-ā9-ÜũM6=~īDø oŠ$Ÿé_dTG=‰éVūhö“|9†âæšKŌōĘŌ.IÉŦ„Z‡Ú5øbá<ë;k™ K'ĖwŠĮøiáÛ[‰ū @Ÿd´™„P˛đ>cŌĩ|CvŪøßĨ‹0#†ú5ŽD^úd}jok矃ü}ŠŪ˙b6ŖĻ]ĸ—dMÅ0*…ēŪ‡ŦxŗVģĶckIŽcVkYÔ׎ägįŌ–Šņ/Ú*S“ŖŒeMÁ?Ĩz‡ƒXŋƒt†#Ú§…'Š|G‡,`˜ĸÉ,ķ¤1ÆN7kĖž'ZĒ|Cđ„ĐÁK<™fåkkã]­ĒøîįļŠKčža_›¯­u~Ķ4ë_ é{m-ã’[dŨōX‘ÍyˇÃË8ĪÆ?(‰à @8Á55ÕĨĩ¯íĻÅm poœ(ÆzĶ~2é°Íâ_ Ŧ(ąĪqpēŒķ îcđœ^,ĶĩØĻh͜%€”û×á´ēŋøīĢžĻ7}žäėŊļÕ-OL:ŋĮ4Čž['ˇ-6ŪUIR}y¯Cˇđ§ø"ãÃąž&‚ŧƒœšōī‡ŌxsJņ.ƒŠDžu›Ž2͞?ÂŊcĀū˛Đ|?nbĩŽ;™‡›+íųˇ7=kНøÉ¤Á5ö•Š6˛–“Bãl,I-ĪUQŪ°ū!_=ÎŊá ‘e-ĄķĐ _ Î8í^ƒņ=m.žęo(IZ8°Ū*ՋđŗD°˙…Re–ØÜ¤­!#ëŪŗū _=¯‚5rrÉo3˛ÂĢü™ĩm_Ä:­É-q,ŧîëÖąĩ‹íŋh‹1( "šīƒ_CQEQEQEQEQEQEQEyįÆy|ŋ‡÷ ufëX? u}WHđD6k´qû—ƒžÄZÜđ—…/4uOŨۙĩ+ÂdëÔsŌšÍ;IņeŸÄ›ŸÉä\ĻÍĸEĘôäūUę ŌÛ_đÍŪžKB÷0íāōĻŧËÞņ–—áųü9ö{x­›7ūfŖđÛÂū'đĖļSÃnēsĘ\Č[.Ev>9Ō Õü¨ÛNK2–ė@âšßƒšŅŧޏ–á‹§jÎøĨŖx›ÅF=;MŌķk‡1¸ûTúŊ§‹5Oûáãō˜´ ¨ŊKáKohm*m4đFR<8;ø¤ø]Ąëē–Ŗ­`-ŒĖŌŖŸJá5Yéū ēæ™}&ĒŽÃΎmšNØö­ŋ |PđŦzЉŦnmn.˜)¸¸å‰í“^ŌŦފęrŦ2 :ŧWâx“Äzžžöž¸ōôûÂRÃ÷€ívZ΋7|֗VÍer~âIÕXW9ŋâ+?  ¯‡ŽĨÔÖ#l˛*â?MŲ§[xro|1šÂ;9o¯īT‰ ’Ŋ}Ē/ƒ×Wē-˜Đ5-&ōÚY$iFˆ„úfŊzŠņ?ŠZ&ĩ˙ Ε­­ŦˇÚT…ĄŒ+ƒĪ—ņõŊnįHņZ-ĘiÖRŒC°—íÉ_JôŸ†‹y.‘{¨]Á$mš2Į€† ŒWhí˛6|´gŧ‡â.uŪčö~ԙįũØs sÖ¨|-ņ ˙…<<Ú^­Ąę^gš ĀyÍbüPŅõģ?ˆÖž'˛Ķn%ˇ"'Ũ–äuSé]-ׅuOx+T¸Ŋŗû5íÄĢ5˛H>o”to¯5wÃß-tM W°ŧ­´~S[ŦˇãZ“ÄâKŋG{2ĨõÅúImjƒæ‰3ŸëPëĨގŖ>Ēø^āk'–¸ˇųw7ô¨ū x[T˙…Q§éļŅ<ĶڔiBõĀâ­øjâØŦÚmÕĨ…Ą‰Úu+šČÆ++ÁˇĮáŪą¤j֗+o%ÁšÚer°=?<=>§ãMWÆ÷–Ōà įėˆW ØęqīYßj/ņš?ÍĸjØ2ų!ŪLWĢøÎŌķTđ^Ĩo§3-ÔļįËĮûWšø 5Ë?\xhčw0ęų‹įĖ›W<“ŪĢ|6Ō|Cfm´K6ęÔZŪÉq-Âą¸=õ¨ĄÔ¯üņg]ŧģĶ.îVųpĐĮĮ4ƒåää WšZÜ ģHŽ2 6ÖŠ|ą$ĐŧR ŖŠVÆŧk@ļēøSâ]U.4û›­.øų‘Ml…Ęœœ)ixS×ē˙Ä+ĪęV’ZÄGi ƒp>ņ§˙^°|aĒkÄ ;X‹ÃˇæËK%ų|ˇÍÔWŗé‡öŽ— į‘$jįːa–¯Q^`šĪƒū&k÷-ŖŪ\Ĩō˛ĀđĄ#$ņÍ]ņõļŦŪŗđõž‘{qw#-į,Čš9#?ZܛÄwiđØiŠĸę+zÖÆŲPĀro_ÖĒ|7ąšģđ%߄õ]:ęÖf‰đōφ'ÎĒxKÄWŸ āŸÃēæ›u&ÉH%†2Ūb“]o…eÖ2øŖˆf‚H´ģU„ē•ķXwÕinõ§ņ 5Í[Æz>Ąeáë÷ˇŌ¤Ëŧ?#îūUŅ|I˛Ôŧ[đĐKge4w!ÖSnÃį”ß ęZ—ˆo´Xŋŗnė­4Č6Ėķ)PîXđiú߃~'ęڜ=ÅũĻĸrn{Ö}ũˇ‰Ąø¯eâYtŠbō°ŅÄģŒ}xĢŋ“_Ö|YŖ]Zø~ņ­tŲVV&r7ĶÖŊŽ9Kd”!Vd ĩēŒŽ•āW2ŌŦüQwqâŠ[kPĘČ$ļ_—ËĪĘ+wÁŸüšãG wpß^6 ÍĪ%ũŗ^Č2‚9šđßx.gøŲ§ËlŲ¯GŸ.]˜Üé^âĒBŽ€`SĢÆž+øW\Ŋņn“ŽØZë[Rģ ^ŧôĒ~6ҤS¨ĸŠ)r3@éK֐ tĨĸŠ(ĸ˜ŅŖũäVúŠp Z(ĸŠ(Ļí]ÛļŒúâEƊ6mÍ“ęE2ææ HL×ŦQŽŦĮŧ3ᖩĻZüIņ<—°mžfō›‡ųJ÷€`jZ+Ķŧ1sâFÖõųãžXK-œũȔ÷÷8ŽÂŠ(ĸŠ)p1KEGY{¨ô[׹]×k GĢcŠōījž}"ãūt‚=f9ڞųzņ‚iž, øŽ4ŸŲÁsĒI*ųSY§sË3‚ãOëžņ^ĨÆČ4áyō:ũī^k đTĪâoj*d‘mJ k0댯Vaø×EQEQEQEQEQEQEQEQEVe·ô‹Ë†¸¸Ķ­Ĩ™žķēMO•§ÚʲAgnŖ‘ UĘ(ĸŒŒ”ÕŠ49XÕO¨ú(ĸН=•­Ō‘=ŧRũä‹k[5Ûmo@˙qqV(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*–ŠĨYk6-gšŨˆ%C\ōü3đŠ\E:i$‘°e+؊ë@ĀtĨĸŠ(ĸŠ(ĸŠ(ĸŠĪģŅ4ģũ˙kĶífŪrŪd@æ¤ŗŌ´ũ;?b˛‚ß=|¨Â˙*/tģ IUoŦ⏠ĐJąV!†+xR(cXãA…ET”QEQEQEQEQEQEQEQEQE%ršĮŽŦŦuĻXÃ&ĄŪ9Ûõ=ĒøMo,."֋-œp& ŧ/×ŖĸøËL×ĩ‹Ŋ:ŌkŌ•5ŅQEQEQEQEĮë~>ˇŅ5Y,_JÔ'ōÆZhb,••gņ‡DÔošĘÆÎōâā'5Ļ>#éÜ­žĨۜí÷MĖ[Tū5×E4sĒÄáãq•aЊ’Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ+ņ/ÄM¡Ļ×Q[€ÁA.ą’ŧôæļü?ŽŲø“H‹S°,`—8Ü0kRŠ(ĸŠāõ?ŠÚ“­eŨÁx“ |ŧ˜°8ČõŨ#‰#W^Œ2)ÔQEQEQEQEĘi´ _ÄŌč6w ÷‘îÎW Hęī]]QEfkē퇇4Šu-Jo*Ū<}IíLđ˙ˆ´īiĢĻN%„œgĐÖĩQEČø§Įöē_Ų^4E7yņG”ÄÖ¯†‡ĨwZˇ‹4u‚æā´ÍĪ—ÜGÖŦéšūŦYŊÕ•Ā’$ûĮ¸ŦûOxnös :Ŧ`ÎC6*ŏ‹´-JđÚZę0I8ūÃ4¯âŊ;˙ą>Ŗ Μm-Ū§Õ5ũ/F&ŋŧŽßî–=j¤>3đėÖŋi]ZØEœn/WFģĨ5‰Ŋđ}”Ë]˙-;OÖ´ŨTa{ Æ:ųmš’ûQŗĶ-Ú{ˈáy,įKIņF‹­šM>ū)ÜuU<Ô÷Zî—epmîoāŠaüālž Ō 1‰ud2}ÍŌģéZȒ xØ2‘E>ŠáŽLîNx9ā˙ 7Æā PŌ`ūÕwaĩ“áÕëĖĒeVSīģ"ĒüÔnáGÕ%ØB°´Č;˙ŸJôeŊĩhÕÅÄ[[ĄŪ9ŠhĸMōHˆžŦØ‘\Á8Ė3G'ûŽ Ī ĨHķĶ{HˇVî2ŗÄG¨qJ—0HÛRhŲŊ‚i—Öļ…EÅÄqûĄ›Š|ČĖ~fõ،îĪDˇÖŒŦVę–Ä€âmwow™m2Jž¨r*j(ĸŠOĢiöԈĻŧ…œmfĢBD)ŧ:”ë¸*5ŧĩp \ÂĀú84äž#•ú+N’D‰ ČáTu,p+€øŸw¤ę_uÄHąg1ÅyĢ_ãü7ŌĀ9ʖÍwQYW%ŅmnžË>§mųÆÂüÕۋË{[GēšUHPdšŪģ8ĨŸTąļvIîፗ¨gŠsjVHȍwgåAqÍX.Ą7–zįMa|NŠ9>ë%Ôļ䌊ɸ+ĪË"ŗsëɯDĸ¨^km„Âģč!Œ…wâœu}9bIMėîãš’kû[tWšâ4VčYĒXĻŽdŠę{ŠČ¨¯/í4øŧÛ˘ ûŌ6ŅE–Ąg¨ÃæŲÜĮ<Ū˛)ˇēŽœīnáˇSŪG O´žĩž‹Íĩ¸Ždūō6E2īR˛ąÛö̘áŨĶ{bœ/­°ĢŧüŨÖĸ‹WĶϐ¤W°;’Ēāš"Ö4éåXĸŊ¤c€ÆMAâ]Lšû=ö§mo7÷$|{ëÚTwQZžĄn'˜ją{¨ZiÖíqyq1/%ąUôÍJÖûėSã¨VĨÔ5í+ItKûø-ŨūęČØ&§ļÔ,îähíîb•ÔĘ­’ĢTQEQEQEQEQEQEQExgí orm´ë„ËB R;]ĮÂ&Føu§ ļ>l îë‘Ôõ3J^ŋ´…žŨ Y™ņÃqÍrâūܲÔõ­D-ÅÄō•Ëķĩ}*މvÚ'ÆûÍ +Ĩ9°8įŠĖņŽ…ĻŪ|fĶôûxD *‡—`ۖį5?ÅÍ"-RĐŽ4ļ’3wD6ÖßÄ/iúÃ/ļ$cíq*Č&ĪÎX÷Íl[[Úk˙  šÔaK†KBĘÎ2AÅqŧ!cŠhēíúyę$d[´ß†št7ž4Õ´‹‚f°ĩ‘-ä”sŌ­Ø*čŋͅ†aĩ™~x—…üŠū'ÔæņÆKJA˛ļž6č˙ZŊņ\EáFŅõm*$ļ•' ūPÛš}:ÕŒ–Vš€,uŅKÖ)ûÅāāö5*ø#KOƒōßŨÆŌ_‹#2Îíķ+cŒVĮÁ FķQđ 7s4Ļ)š4$įåé”Ts¨“ũĶ_9x;ˏ‹ZÜ6ŋerŌeöū*õī†Ķkŗ'ööšqyn­ŋČ I÷¨ū#xON˙„y!…‘´ëv0ymˇmp~đļ¯â¯†Nņ]“yŋmļ÷ĀQžN}kGưx‚ÎķÃ:UōËs§Â^:9UfrߍfÜÜ[xGâ~‘‡īXŲŪág„HYAükØ<[á›_éC8q*#™ŠVÅyÂAkįˆ4Ŋ\Ėo-•˛ZC÷+Šđ‡,<;Ą^øąĻ¸•öÉ$G?ģ°ÅbxëGņd7úĮŠ/c–yfe‚)50=ëCĀ:ŧZžŋ¯xFYåšĶ†Mģ1øŠkGŌ´(Įöé—Ía×fi~&xbÃNøuswĻÛGo4p€ûxŪ§Íoü"mß ´ŧöR?Zî(Ž#⧊&đˇƒfšļ%nfo*&‰ī\˙Ãī ØęEíôiuy|¯+Í"åķĪüĢáöĢ˙ G‚õjÎŌ‹Á˜ä¨Î9üęˇÁ/éچs¨ŨĀLļ÷Œ#!ĪojŊņÕĻ]KÃ^I%ūŅō¯ûYĢ<9kŖx kVģŖÕ`hßí!ŽâOoĨixƒÆ—zgÂ[mWæˇ0*#´G_ķéXú5ˇ†.|[PēŠ]^hLĪpí™wõāÕŋ MūŨíEö‰lZDVnåjâžxNãÄū×Q¤/å3EiˇĘŽzŸ­z˙Ã_ę^đœzv§(’u‘˜aŗ´ÕØQ^ã¯]øâmŸƒ•Ū>9•gÛ|ŪüŸĨ]ņv—¨čž:Đ`đ֎°[e|˘šä6;Iâ^oüX°đĢ16Ŗ}Ę<ÆÆpi˙VßĀZž‡­i‹`ķųSFœ,‹Uū7XYMáKM~dž•ãA"Ÿŧ§ąŖVđUŋÂvÕŽ7ļĒ–Ģ(š.wØVĮ‡õ O[ø!įĮ#Ŋ÷ŲŪ=ĀåŽŪ+‚ƒÄžŧđŋöDÖōéZē&ß´ÁfĮsīī]/Ä/ŲŨ|*ŗÔw’{h‘ūF÷ĮzÛømā}<-§jž\Æâæ×SŒjįŧ+dēwĮmNÆÚI¤.-Į 3üë3⏅ôģˆZQ,€ßM™ķ!;š•z.ĨāLđv§mO´FĶ6&bÛÂđk–ø5ĻÃâ‡×öڟ™4vv–ƒĀõëQü!ļ˙Š‹ÅēqššKhĨh“s’Bî#­`ę~ Ō×ãU†Œ?Ų¤‹Ė™ėķŪŊÆ~Ķ­>^EMŒ,2y§ržĩ‘đį[}'āäÚŊËŧĻ’Ašš<œ Ķ~é–~5ĐīuŊzÕ/'ē•Lß6ÅÂ=*ęxĮÄ š‘æąPÆg$„ūîkÃz /ņ›UŅ`štĶŖˆŗ sĶ–¯j0Íā˙zEļ–$[KåÚņîČ9īū}+ĸøÁg­ÜÛiO§aí"œ5ÄE°=[ÔWãģ­7KÖ|5á\V9Í¸Ú¯ĶūŊzŸÄvßđĪVf<›\ũjŸÁČĖ táŒdąũkŊĸŧŗã_‡Ŧ.<'u­˜qĒ, ķˇ=+ÁūļģøK&Ѝ™'ŧ’ŨŪw?š ģi>čÃÆ~šã]–[¨íY­aFū­\øE5—ˆüE 4Ō=œÍä‡l•šÎ°×ôßüPԎŊ*fØŠ$ÎÆ ã8Šíuh•s[ĩ¸o‹áĩ¨mXöĄ™†Äã°>õOŽ‚ĮãĨĨi˛7ö\ą4‰ÎÕú ŸÆ:ū› üGœøžÆ[>h[ļŌĘžŧU˙[hú§‰õ{6ü]é—VĘĸš>NWq\Ī‚´¨­ū8ęöåÖÖŪ&ũÛ6x8.ģ Zhô(tÜÅĒ%x÷ÎMiü}ĐŦŋáXHUo|õC(ęF8¯Ã­oÂŪŧļēōŽŖŲ<ō1;Ÿ§zĨ­ø†=W㎍Ē>tŊ;ī& Y/R;Ôž(Ô­tŸhWūĩtäōîVJĢ@įŠ“Äũŋ‡~#_\x—Mk̏”[ÉŗrÆŊ˙Zģđŗû&jˇÚ-ʛ)"P“ķ!ęF=+Ų(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠÄņW‡mŧO Üéˇ ?x‡ctךx6ë[øtķi͌ŌiĄ‰Žx×pÖ\|FļŧOŗčvwWwOŸ(ĒŠ÷&¯éū2xfōËQm÷7ášfĪŨ'Ū¸ËqđÚ{ũ+T´Ąg-ąĄ`Ã͊ģāĪ^ë?/|_Û %mŅ׏ZÃÖnīæøÅmĢĮĨŪ5•¸ōŲÄ$~ÕgâÍÕūˇŠéXiw’%ŗ‰$a #¯­_ņū¯6ˇđú; }2ûí2"€,zTē&ŧt߆#NšĶ/Öå!ōöœūUđŗZ>đũ햡§ŪFí#><“YŸuFŌ|qĢß\Ø^,’1‰Œ-M›Xy~4CŽ}‚íl×÷{Ú&­ßčŌčū?Ōüe/%Ŗŗė^WŪŖņĖÉņ#QŌtÍ9$Ž9„“ˡ…7ÆY>ąĐ--î&_÷hXĩ.ŗâ‹k„g 7&éíL"?(įv?úõĀVÚ´IãŧŌd ãōúūUėTW1¯øīAđũĶŲę/Á7`!#šđo‡ēõžņBûSœÉÃšSąn+čũ#\ĶõČm>q4hÛXZåž)kļ:oƒõ )į sunËxåģ:Æø#ŠŲ7ƒ ĶÄËö°YŒ}ņ\įÄMNæOŠúnĢÜ<:ĘĀgj7Ž+ÆēpøƒĸęVŦz5ģ€'DųXŽĩí~ŋžÕ4{!užVh ˙žy8¯&ņžƒ{¤|\´“MÜĢŦŽWМ7é^ÍĒč‘ŪxRįF€yhöūRJōo…įEđōęZ‰mííī­æ,¯p¸Ūž ŸÂģ}+ZŌ[_ēē°´ˇ‡Kˇ‹įž ´3zé^sāßévß5ÛųŽãKK‚ËĮŖ+Ũ5ĶiŖÜßB<Ã-"Îî2+ĖžüTÔ|[â;+QŗŽĒˌŖJõē+ÅWWļ^Ôn4čĖ—qÂÆ5'5âõŨ* UšÕÚuɝ‚G'ĖÍé´}i˙ uģ›]5Ąš}EšhJķåā–ūU6ŽiŌ|–ø\'Ų¤O-$ÎAcÛ4ŋĩ̝‰ŪhîU ´“Hŧ„äg?•mü]Đ'ÕFâ9ZâWV ÉŲž´Ī‰^/ˇÖūËaŖŗ\Ęņ+NPŨŽĩ­đgÄV7^´Ņ˜_[FYĐŽ8ĪZõ +Žø—áieŋsžÕ—KđV¯ ĖōEŦÜ]˜ã€{˙:ŋņnōŅu_ ÛČķ5śŖJs´qœÖ¯Åoi÷ŋūÉg#I%ĀR‰°ä€jĢHŧgđ^-?N.×v0Ą+ŗÃ¯õ­_øĢÖžĩƒQōmî­cË Ņ€ųß­\—ÄąÃá-Vū{6ŗ‚äēŲĒĮķ8Ûԁ\¯Ā}fÆÛNŊŌndōĩ ŽLŠŽ>øĮ˙¯ō¯lĸŠđčRøcâŗ‹%‰äŌf4ރ>[cûWŖIãĢ=N[k?Ę.Žga– JÆŊÉ÷Ž/[ĶeđˇÆ‹Ü]2đ$ØáÁũ(ø$=ÖôME™n™&ķŽ#•}IĻ|kŊŗÃ:ģ4—PKŅK@+KÅ>)ŅŽ~ÉiĀ3Mh#Ž-§%€á-hEđFk['q¨ÚŠũÚä0bÜU‹ĢŸęz Åâ,Yë ÜĻ,3ļ>đ#Ži5=QˇøÖōC'ŸdT?ycŨÆ Sŧ5âĢ[ĪxkL´¸6Đ,ˇE:FĒ9˛toØGņĪQ՝,îP$r•8fņrkâŋ krŠL<Ų‚ä' ŒūUŅXęđ•^ëچŸæ=Ų~Ī `âFÁÉ_å\‡ÂOXxsÃWúN¤ÍĄðÆŗĐ ‹ā椑xįÄv÷'ɞęf)u'q$UŸNēĮĢSRc “[áf=:+g\ņ ŦŪņ-ėķ•‹QŪļaķķ¸Gž*‡Ã°ņ™ü9įtÉ"ēŖ'ƒRü1Ö-ŧ!Ą^h:ô‹gug;9ÆõõŸ´Ôx‡Æ÷ ÛŲHXBŌ e;ˇéT<ĒZ]|lÕîãŨä\Ûâ*@lc5KÆ%°Ÿã&ƒ{áŦíŲĻĮ ×­h|cŋē:·˜™BfNcÉW]Ã9ü+âV­mŠÅĄ^iRdØÎ30‹jŗqüą[Zŋ‹eÕžkHŗÉ-ĶēY„–QŌē„åŦž´ŅIĄn…¤ĐŽõéTW–|jņ„šŅZvĶ*ēF;‡ųKAņމÂfn ÜEgä´{OßÛŌŗū ø—LĐü)wm¨ĪäMö†”†'ÂÛëIū#x”ƒûģÉ $czäô¤ŅííūüKÕV„ /P%á¸uʎsũkž˛ņNŽëöö:ŧQĄßsqå|ą¯ąõ¯2ļԝņĻúãÅË)‰CC Ɲ÷qøT+â t‹ˇzĩÍ´%ŨšŖûŲÆŪ? ę$×âoj>%°ûnœŅÆÂg‹rĀÅy8Ļx{KŅ“âĨ߄ƒ/!Åã&|°{­eKĒ/‚ž7ę7Ú¤2-ÔXIU Y÷ˆe“ã.™Ž\ÚO ŽÕX™Ô€WŸ›õާãZž“kŗ\I"Ī„\žõÜø\ŗÕ<;kmmæ -!XåWB¸ {םxŸI|U‹ÅsBķiWëŨSw–اĨuˇ~2ąņŲė|/Ü\É"—›Ęųa^äņXmŽKŒĩ‹Oi˛\če¤īaĮOĨ3Âz>ß×Qđ´,štp0šnB3žkÄ˙ŧUĸüB{SG§Gr#HŪ>$\úū5īIį[Į&1ŊCcę*J(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ļē$‹ĩŅXzšjC_ęâE˙u@Š)r}øŅŋŪ\Ķ•BŒ(z @ @šu„9ĻųQį;?JO".?tœ˛(0Bzćū)^4‘vē+/Ŗ ŠlvđCūĒĶũÕœcF9dR}Å'‘˙–I˙|ŠjÛAĻD‚%õ`€øÔÔUIôÛ+Š“ÚÃ#˙yAĶ,Á˛ˇĮũrZ’ÚŌŪŅ [ÁJy!ĻĪaku"ÉqoŽŖēį›™cm7¤1IŒnDĶo´?S /Ŧ­î6ũß60ØúU{Ÿ čˇvŅÛ\i–ŌCĘ#' \Į‰ž#iž×ė4fŧ ÷0œ ‰nm|Mņ6Ųá"X4¸IßÔyÛō¯AŦŨG@ŌurĄ§ÛÜīH™?K•a ‰˛ŽÎĩaƒߔūLxSÃë÷t{%įŅ-īMä:]Ē\“ģĖXĀ9Š!Đ´Ģ{É.á°ˇK‰@ƒ&hBē¸ĶmCŠÜ­å ƒK.…¤Í!’M:ؙ瓿ŽGQ@!HÕbQ€€pWJĶáY;(eûácwÖ¤‚ÂŌŲˇAkmęˆĢ4QT&Ņ´Ë‹•ššÂŨæ^C´c"¯Āā Ēt˸ûAŗ€ĖN|̓v~´˛iÖrÍįImÉũæ\ԆÚ܌##Ķ`ĨŽbGhPĒjœÚ“<Æi´ëgļíæ1œÕĶ LĄLhUzŧ …4ÛįĨœ 0ū5ŒųÕĒ(¨n- ģˆÅq Kꎚž™c§ĻÛKH`ĪîĐ –æÖ Č ˜Rhœa‘× Õ];DŌôua§X[Ûg‚b@ úšŗ%ŦĪž[h]˙ŧČ Ļ>ɗi´ƒo§–(M:Ę<봁wuÄcš’K[y˜ ‰ČčYÅ:HŖš&ŠD  Ŧ¤pEgéūŅôŖ!˛Ķ­á2gvÔÕĻĶŦ™•¤¯OŨŠ}ÅĨŊä&˜#š#ÕAļÖĐZ@°ÛđDŊUfŅtĮŧûcX[›žžiŒnüč‹GĶ`ŧ7‘XÛĨÉ$ųĒ€6OŊ-ö§j{ ũŒ;9_5b¤}>ĘDT’ŌEU1Œ mŽ•§ŲJŌÚY[Á# 3GR*ŽķCŌõ „×vķH?ĐVÖV!bA1ŗoúSE˛ËoaЄTOĨiîģ^ÆŨ—9Á‰jI,­f„C-´OŒd lšu”ļŋe’Öˇëå”*zYÛGƖņ*(¨AN[xcČ‘FŽx,ĒŠhĒ—:mä‹%ͤ:đHÃųŌeØ(,­öžHō†(VžĄ[üÃ÷cštZu”2,‘Z@ŽŊcŠ/të=F/*öÚ)Ķû˛.i,´Û-63•ŦVčzŦj‹6ĘîE’âÖ)]~ë:äŠ'Ķ,ngŽy­!’Xžã2WéR5Ĩŗ‡ oķ>ūP|ßZKk+[%+ko õ¨ZYŦíŽ3[Å!č $–v˛dļ…Čān@jCLAhĐさP‘GHÕIęBāšI↿&Šx’HÛǏČ5 ž™c§vÛîëå \ÔŌ[Ã*2I2ˇŪzÔkŊ…ŧ†ŪEU-ļ5ÆkĖaĐõoøŽ SZ°û•dÛ …ēČĀõjõ`€RŅEQEQEQEQEQEQEQEQEQEQEQEQEW/â¯hŪ-1I%Ä_rhÎUīøcNđ͙ˇ°žn^G;™š­Ē(ĸ‘”0ÃGĄŖĨ-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQU¯ī­´Û)o.äÁËší\æņ#ÂÚŽ¨ēuž¤˛\7AŽ u”QEV~Ĩ­éē8C¨^Elî™3MŌõũ/ZiF{Ī•÷Ėg RÁŽéw:ƒØC} Ũ§Ūˆ7Ė+Fĸšx­ yĻ‘cY˜āUtÍgNÖbytë¸îk9ÁĢôQEQEQEƒĒxËÃú5Ã[ßjpE2}čËr+SNÔmu[¯lĻÛČ2ŽŊ ZĸŠ(ĸŠ+x¯CmpčŖQ‡û@paŨÎ}+jŠ(ĸŠ(ĸŠ*9§ŠŪši8Đe™ŽKJ×4Ín7“MŧŠåcmŽclā֍“‰t{bM&+øZú?Ŋo˜S/|W é×FÚķUļ‚ppcwÁÍkŖĢ u Ģ ‚;ŠuQEQEQEq§Å é7rÚ\ß8ž&ØĀDØuŽÂÎî+ë8n mŅLĐûžŠČÖüKĨxr8äÕ.–áIīF…âm+đI.—tŗŦg Gj×ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˜ō"}÷UúœRyŅņûÅį§4†âûĶF>Ŧ)VXß;dVĮ\6jŠX‰|Ŗwî—`0*AÎj?´Ûų†?>=ãĒ‰"îGVĒsO¨Ė9š>:üÊ>Ņë,cŋŪī1 {ÃŽÎģŗÅ6;˜&bąM°ęÅsū:×?°|'}yÂÃp‰ûŗßuXđôڏ…´ëĢŠ„—ĀŽį<ķë[/4QŦ•ũæÅ9X2†R=ÅAy ­ÕģÛ^,O ŖkG&0Õāpé6V´\6ļ‘$vã Gåæž…ĸšK Ĩ‡P"I3Í-`x›DŌõŊ2åo­ĸžHá}ģš)Æxô¯6ũŸâ1iÚˇ/Ÿ€sÖēMátZWÄ Ÿ˙hHâFfH} ëšÜņ¯ŠO†l­ qqr‘*1ėO&´uí+ū\ØyĻ/´Å´8í‘\īÏYŨG%Ṗá÷Ņ@öŽāIĀ FG"–Š(ĸŠ(ĸŠBqÖŧ‡ã—‡4Ų|#>ĩ˛}ē93)ę ÁÍuŸ Đ§Ã$`ŨWgMgT]ĖÁGŠ8ϤņKŸ*T|uÚĀâ¤Ļy‰ŋfåŨéžiw Ûr3éMyŖäEĪM͊x!†Aâŧō?…V1üBo}ŽBLžo‘ū×ÖŊŠ)Ą•ŗ‚885C]ÔF•ĄŪ^—D0ÄĖĨúg‘đ˙Xž×|!i¨j2#ÜËš‰Q—<~•ÔQEĐęĖT0$uôŦíI]wBŧĶVˆ\FSzõZæ~|=_[ŨŠŊ72Ü’ģš+Ķ~Ųiž=ŸÅ y+I#ŗˆOE-Ö¸īŽÚEĒÍŖ]ÁGu5ÆĮqÁaī^Īdģlm×Ō%ĨLI 0$vMŪ ãpĪĻh,ģļ–ôÍ ęƒ.ÁGŠ8Ą]w# æEFgˆ6Ķ*ôÜ3O$(É8Ϙ&ŗ‰ãŽœŽŽĮVĮĄÍ$’$H^GTQÔąÅxˇĮ{ 6ãÖ:¤pūĶŗÍŒ ‘éÅz·GáŨ9ktūU§^ã˙hÚ}ęĮqqtĸUŸ/<Ö˙ŠôŊ?\đŨęĪS…Š1Úq^qû>"E jR9›š5ėĘĘÃ*ĀjI$H—tލ=Xâ’9Ŗ”f9ĮĒļjJcʑ ČęƒÕŽ)ĸâģŧØöúî§Ģ+ŒĢ Ķ&š‚ŨwO2F=]€ĨŠX挂ú­ÕŊDΊ+dgŗ>-h÷RxûEWÕ&ŪL<Ĩ!9í^‹7…u_ Ošíä“Ä­$rƒ†t8â°~ ë:…ūƒĢ\jwrĐÎßxôUm Tžø›â=M>ßqi¤Ų‘Ŧ ´šõ5&âŊĮ×~ Ôo%š†T˙FĖšĪęqęšÅũ+E‡[ŧšÎf˛I&ī^?JģņJ×VđūģĻ]éúÍāŠūéQá2|ĢČé]/õy Ôt-*mIôû[ĩ&[…lĶ5— k:oŒ´[;=qõ-&VfŸ›§ŨcÜzWŽÕ fņôũöō$/$0ŗĒ¨É$ ņ=WÅÔ|C6ĩ¨Úęvėė‘—ÛG ôŽßឡwã‡ÛŽæuē;ĄiTāįÔW Ą]øĸĮâ÷†Nŗ5Úė!^NąƒÎīL×P5-sÂŋ4ũ*īP{Ũ>ũ ËQŠß<_sgŦi^ĶĻxnulÉ÷’2qĮÖŗū)hÃÃß .í­$šhåš?7ΐļŪzÆģO†ęSĀB“ŸÜ ęëĮž%^ęSøûEҚ;ąŖÍ8ÂÅCzüÃŌŠCüX°Ķô{É$Ķīl°´ĨđÜķÍwŸūԗPē…cŠ0Đ)ųIé“Z? ŧtÍ/LÕVģ’7ˇmŲž@ô¯HŽ#âF‰y¨hS_Yę÷6g >؛ ũųŽá]Žąã ŧē–ŗxA;*l“įfĮs]5ë^]oÂZ•ĖÆâÎFHŽ|ízũk‹ŌNŊgņrûÃVšÅ됍’GË*ā]VĸxĨáņ–Ĩ} ĘĪe1“æ#ž‡ĶŊIđ~˙R×ŧ1ŦE¨ę7J—&$‘›æQŽÕŖÉĢiŋæđîą­^=šS%ą/Ã8Ít^ĐõMCÆzĢžŊ}&“g HÔIī˜}+7N{Ũ+ã§ö:jˇw6>G™äĖû‚’:~'ĮD2"Žâ×`bē_ˆ~3>đŦ[˙ĮåČXáœuŦ {Gŧđ˙„ŸÄvÚíÃęvč.%C.QũWoĨo]øė… âˆ@Yžß8!d<~†¸'@Ôõ/Kã×ĩÔÕåĖũŲÛČ}*ވ|Uã++ÅZu䑘f v†O‘Uqž?:ÜļÕŋábxæ˙LšŊ–ßIĶWb—gšŲęOáIeŽ|TƒÃÉxķiWČ6“–ĮĻ {`øĘōūÃÂ:Ö–Ĩ¯#„˜ņÉõãZ}Ēj˙îõÛÛËģ]rßqķ$†ōŧũÜ×ĸ|=ÔĻņ—ÃXÖöII yáŊ3šķéú–Ŗņ[Đ?ĩŽžÃCą–*™Ž“D¸ģđ¯ÆSá¸o'ŸNē‡Ė 3ÚØ§øĪ]“^øĄĨø>9dŠŅ>{’­ˇĖ8ÎßĨbükđü:&•§=Ų-ešā'![ąí:°l3×ČQúUö]ĘWÔbžtņĮ‚ėl>)čļbîîHīß|…äË)-Øö¯eÃ–ūđŽŖei4Ō#Dí™\ąÎ=kČūh7ū‹}l÷“[ØĮ)8‰ļŗŋ×ĐWIđģUÔíŧeŽørōîK‹kF&'äž?JŽ]~߯.ô{ëŗ§)<Íĸg¨Éâ _|Q°°ŌŽ^M÷jM™¸#2?J÷r+Å~ŗņņ^4Ę! "œŠ Šņ߄z ž&:Äz•íËéđ\`B$aŊŊĪŌē_ kīá˙‰z¯„L’žœĒdˇYq$döŦ}7TĶ<ņT“]¸J˛ų!ļ’MĒOMÕgÚä~ø­&ƒctĶh÷H<• YQŊŋ*ŠKKcâvŠoâģvūˋw–B¨Ē:b­|,ē›Oņæŋáč.]6æ@ŗˇ>•‰"Ô­ūøÛM>ģwĶîۉK/^ŖŌŊúŪ_>Ú)‡I7æ*Z(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+7^°]OBŧ´q‘$L×áôK×ņmūŸrî,í ,‡ĻsÅ]Đŧ9uÆ ­17Įbžę>éî+Ņū)jzŽ“ā;ˍ/rÎ07¨åVŧĘĪXŗ §Xæ7zÅÂuûĖžĩwĀū*¸ĶūÅmjĘĪ;H€|ËíSÅĸxKÆ3ÜŪIũŸ¨2n”îÚKWMđ~ÚîĶCŧ‚[†¸ĩŽvXģ­zEq˙´§Ö<Ē[F Ę#ķúmæšo–ˇ2ø~mFöF’BŪL[ŋ…Ef|SĶ䞸 ø‘ĸ2,¯ŽækCã&ĨkŦx>ŌÆÆušææt)m“Y?tˍāŪ‘§Ę†Cą— }Ū;×NēÚøŽÚÃDĶŽDˆÖ ö‡§Ë…Īã\§ÂŨ?C°–‹¯Å_E1ÂÍĮËÛ×}“BŋžžĶŧ;ĻÚųŸge–î1Čl}Ü×%đ‹Tļđœē李N–“G7ÜsÆą´˙Û\|z:Ëmq„vã#oņ¯ĸĄš;ˆRXœŧRč:厚žlĶɈÁį§Z_‚НZņ—vvL“đHĪZ‚âÜë_´sY ’ UVšEúzŌxŲãŌū;čW×MļŨâÆöč Ü*ˇÆ=~ÖûÄ~‚Ūux`¸ ō#dGôާĮŸØZūĄĨøVĀī†å\ ­õŽ6ûÁ:—ÃŊkJÔtŊ`ŨA5ĘĮäü&ž€ˆŗD…‡ĖT\÷ŽõĢx7PÔícK pĨs׊ō˙ß[_|7Ô5ŨRđÍrŅžËuųT7ĻŅūy§üךĮD°ĶĐG‹ģš7‚~eQ۟áģ˜ãūĩ$Ŧtx‰öīę>5x}áLl 7?wš_ŠēRØüBđ׉^LZŧ‹Į˛í<Ö¯|oņ‰đ0ŗ‚u’[‰#}ĢÎ=k¯ømyׁtņTvŠW Ā•>õ×Wˆø“^ēŋøĮoĄęWŸcŌĄ9@NŅ'ãYž&Ô4Ûo‹ú,֛#˛…2˙ s]oŠo ņ7‚ėėuB‹u}3ũōFŌvˇåÎ›ŠEĒk^ˇđÍĪŲ-#(Š%ĮžrAī]Ŋ­ŠxsÁßeĶ?z-mņw+Ę~ëĐ_ŲęúˆîžmU%eŠŪCŖm_ŌŠü3ÖeŌĻÖR6ō¯noÕ|—^qžx­ oRĩOÚ Ns2ˆâˆ9ã?5hükžļ1h¨“FdˆĖåWŪ´ž)ꖏđēXŌâ6’HãÚúÕDՒÃāŅD™ĒÆ@`Tã"šÍká·n´fņƒŠ=Ö?7ËĀ=qŽÕ¯ã;‹û˙€Ö÷(í3G—=zõ5Ĩc¯˛éŪ ŌtųɕÕqÎ# ÎkÔëŊÂZ°?ķę˙ĘŧûāMÜø"Xeš5q;IÉĮĘk?áϜķüJņ?ˆ7˛I^5včŲ=PĐuK_øh^íįˆÂÉĩ\°Į@8ũkÚõYŌ-ęVpÉl}ĢÉū]B4íbŨĻO4Ũ– žHĀæ™ņĢOšĶ5ÅvųĐŋ’äË5čū ĶŽ•á‹´ßĖ Äėŧß1üĢĖbÔ4˙øh‰nԘÚÜ.âÜnÛĐTŸ5wžĐmŖLąŨ)pŨÍ;ãf–ú—‡´VŲ^x­Hėäîk¯Ķ4_ _xrŪņöÉlaÃÎHéÜf¨øČxOøq›ijĻĮPo.Ö0ÛW{rMačÃ]ļđ8đœÉgÉEöŗp¤"ˇˇ¯5Ūx#ÃŪđÂi\­ÎIi%S÷‰ūUå^Đėt/‰zž™¯B;’ĪlōđdôŽŌëOđ|>'Ķ-ôí&ģã(}đœų@sēŊ*¸¯ŠšŨūƒā[ģ­9XÎÄF ėŊyŽ•6‘˙ žææęayŦŨ#€§æpŪ€vÅk|×åJŌt›yPÆiŽ×o*ãŸÆŠ|4ÕôûoŠ>&yŽcgså3nųI>ģ§MûB[ŨũĒ3lėķsōîÚxĪÔՏéSh?tĪ0Νt@’_áFĮzgÆ{IÖė-b‚į|pI¸ÉÜĨģ+Ô|%Ŧéúļ‰n,n’&5WÚzWA^)ņ%–×ânO•jŠš~îs]Tzęę0x›VK–:rAåBėß!`J×'đS°´đöĸˇ7QÅ'Ú 0‘ąÆ*ęVmņ“Än"0ÜäDŲû˙J­kĸØxWâîĄũŊjĻßî’Ļ@IĪ^Õ×kørmSO˛đæ™cw{$ĘĪ$kšbAԓÚŊ9s´g­Cz3ap?é“*ņ/Ú­Ŋ÷ˆlnäXŽKĢ1Ā8ÎĪŊii:øƒã.¯ŽEΟ ^JĖŊŠãÖ?ƒ,4ßxë[Ō𾲒üBÕĻņŒ¯æÛ–đK÷WØ §áŨzįIøŽ\l0ÜŨ˛­ŧlŋxúVÆˇo˙wÆË]~ø0ĶīS>`+cœ×yŠxÖŪûVĶltÕĖŗ)’M‚GÜįé^yo¤Øxoã-é×áFŗžâ–Uų7g=k ņžĨá[)l­ô/OžÔ§•&āžMzͰÅŦ@¨\"đ:*j(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŦûÃMŧēģĩ€$×MēVõĢ emĶŨ$'q†M>âŪģw‚xÖHœa”Ž diūĐ´Ī3ėšlųŸ{ Ö§´đ֍b˛‹]:Ū!7ß ŋzĸēđχxĘĶé°3/ņmæĩ-­`ŗ…aˇ‰"z*ŒSTsCÄ/ Ē7RŦqUôÍ.ĪH˛[K’i5-2ĪW˛{KčVX\`ŠŦm3Ā^Ōn{[$C•.ÅąôÍmßi֚•ŖZŨĀ’ÂÃqT4O čž2.Å-˟x¯z¯­x'A×įßY)˜ËD;Xū5Ĩ¤čē~‰kök uŠ>øę~Ļŗõ/øWŧwētRNw‘ÉĒ×ß|1Š]-ÍÆ™•q†^:WImo­ŧpBĄcA…Ŗ§Úęļ2Ų^D%ˇ”mt=Åa\xÃw+=cŋēb›‡ž:ÖÔZUŒ:wö|vŅ­ĻŨžV8ÅrcáO†EËJ°Î¨ÍģÉY˜'ũķ]Œ66ÖöKg(ļęģD`qŠįí~øjÎíî`Ķ•dl÷$ ú”Ũ3áᆴ‹‰'˛ąō¤|ä‡=úŌšđˇœĶ .1+6ō✿޸ƒÂ:?‰ŦãˇÔmƒų_ęœpÉô5Qŧĸ˙c˙f¤,ąnÜ͸îcīRhžđ÷‡¯EŪ™cäOŒnNj¯ˆ>éūĸ5’âÎīZ[i õĢ x[Kđä,–aߗ•ÎįsęM.ģámđĒjļ1ÎWîš2ũ eOđ×Â×6pÚ˧,Y~nr}MO/€t åˇi­L‰m‘;d*ÔV^ŌlĩŽü˙Ä'1G<ĨÕ=1šë*ĩõ•žŖe-ÔbHe]ާ¸ŽcKøiáŊ"áåĩĩp?#9eâ“Cøk h÷7vQ8yà }ÜõĮĨ>†Ūļŋût6’%ÎAķ§4— !ÅĻø‡Ä> X–ÖD_1n:lƒÖŠIđ(-ķ˙ ĘãŖ1ÆOã]ƒfúƇ{zoŖ˛‘BNI#‘÷kšÃē4W­xšeĒܱɔF7ÆĢÃá- aõXėcÉ“ˏøzîėŨÍĻ@÷ˇy…yÍOuám ų‹ŨévĶ61ēDÜqPMāĪ\GoĨĀcˆ‰ˇžjt𾌚_öjYF,üÁ'”Ē•Į€ü9uv.$Ķ×p9Ø„'ŨzÚ¸Ķlîôö°žŪ7´eØb+ōãŌ˛tOh>šk6Åb•ŗķ-ˇØgĨt5‰â÷ŲāũYŗŒZŋō¯0ø=áÍ3Ä- bˇRhä*qé‘^¯ƒĻÛhíĨCj‰fĘUŖg>ϰáWøHH˛.–Ēāä0cšé.ôĢ;ũŪAŠîŧ!áûÛĻšēŌ­æ™ēŧ‹“W­ô‹m=ŦbEŗg1‘‘ÍsVŋ ŧ1ixn#ĩ˜‚ÛŧĻŒcūœW=ņbâĮR“Jđy‰Vâö@c”đ!ĩŋc1F[_ēŪ$žŸJĩđÚßRđį5 ÉŠ6Ąe>`rs°öŊ;Uđū•ŽFŠŠXÃp•.9&•áŨ'DĪö}„01ā˛ŽOãZ• Í´7–Ō[ÜÄ˛Ã Účà ŠČĶü ie͞™eÁ ž´ēG„t- yĻĶ´ø yTuĻ>Ņ ‚AĨڇÎíË4Ķám_û"ĪrĘD }jõæŸi¨[{ģxæ„õGOū­ė"Ëû.×ėĀîycĢv§i*ëag°ŧ#\f¯UGGĶĩx„z…œ7(: W8¤]M]3û5l`XĮ‘ŗåĮŌŠÁá[#Ŧ:=š+Œ0Ži"đ‡‡`犿Î9â`ŅȑĘGŊ_Ô´?Wˇ6ú…¤W1á‘sPi>Ōt5aĻØÃmģīykŒÖĨWŊe[)Ë–Ũ~•â´í?W˙„ŽŪūŪ9Uo7(~ŲĪJöģ+ ]6Ø[Ú@ÄŊ*ļŠ ézŌ¨ÔlĄ¸Û÷KŽHŠtí&ÃI„Åai ēHqšŽ] Jžįí2éöī>sæĻÉáí"]AoßOŽ×¤Ĩ~aSj:UŽ­n`žļŽxũsQiē—¤ [(a÷U晭øwKņ ¯Ųõ+U™=zøÕ ĀžĐ%ķllIŲäųˆŽ’Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽWÄŪĶŧKsëÉ5ĩü÷Wœ2˙õĢ žkSĄŠëŎ’CũĐŸĪÕøkÃ>ĶÍ­˜b\î’G9g>æˇ(ĸŠ(ĸŠ(ŽcÅūŊņ-ēAmŦKaÖIQ0Zį|đÛTđ}ÄKˆ ļ !‘­DX ø×¤ŅEQEQ\ߊ<Ĩø˛8ā’+ˆyŠxN×CõŦđķYōVßūE­×Œ7cë]†|#aáˆå03Ís1ˎœģ~5ĐŅEQEQEQEQEbx“ÃËâ;(í^úęҞMģ[Ø×%Ĩü Ķô+åēĶ5mBČD2pøõ¯HĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠŖŦiÚX_ˇ^Co짘ØÍKe¨Zj0ųÖwÍ÷æŦŅT/u­3N“Ëŧž‚ÆvģāÕ¸fŽâšHÜe]NA%QUnu+6 suLzp Ims Ü"[yVXĪFS‘STKq ČbYŖ2Ēd~-QE%BזĒĀ5Ė “€ Žjz(ĸŠ(ĸŠÍ}{IRūÎ}BÜ^Ÿų`_æüĒKũcNŌö}ēö}į æ63Vã‘%dƒ# †éôQEQETS\Án Ī4qƒŨØ e­í­čcmqÁNŖgŦQEQEQEQEQEQEQMwXÔŗ°UÉĀĄdPČÁ”ô äS¨ĸŠ(ĸšëørŌūK+VŪ)ã8uvÆ*Qã/ –Ú5Ģ,‘Ÿõĸĩ,īmĩ aqi:M ā:ŠąEQYWŪ#Ņ´ÉĖē´’ ­ØjzĒŨXÜĮq}Ų#lƒVĢ"īÄúĶZŨjļÎŋz9$ŠDņVƒ#M^҈ôUĢ]cMžbļˇĐJGdpjõKRÕlt{Sssŧ#øÜāTļw–×öŠsi2M ŒĢĄČ5bŠ(ĻI"CI#E,z ΃Ä:=ÍĘÛA¨ÛÉ3p¨¯É­:(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠJđņž7ø…­Å; ’Õ+t?uO=ŋ ę~xGXđŧWãTí•˙u<šôŠæ,|UößŪč(ˆÉo—ĖSÎ}+…øåĄZ`ŽŦŠVäH°ī]÷#ōü¤ ÅŋŅד]Q^]ņŸÂöwū¸Ö™Ĩ[ģDųJŋ}+GāÚ¸øubY‰ļ3^^]áĪkē_ÄkÍnįPßc#T,rsÚŊFŠ(ĸ™" cd=q_<üFđÜ>ņ–„ē}íįúTáœI!#;…} ĖŸUjJ(ĸŠ(ĸžxņį‚/,~#Øęvš™=õâˆ}åÉöâē~ūĶŌ!ÕßPX”G1ŋü´>Ūõ×ü.Žö?‡ēXŋ$ĖcĪ?ŨūŌģ(ĸŠ(ĸŠįŧUâeđÜ-äyŌ]Ũ%ē&ė}îõŒü5aâ]Qz$ŨLņmģ[Ā~ĪË0Ō5O1‰Û>ŪNkŲčĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽGâ'†ĩ/xoû?KŊû,æ@ŋzqWŧĄŨxwÂöšeå×ÚgˆŌfē (ĸŠ(ŽcÄĐ%Ķõ É´›GĸgiLCvq×5ãô};S×õ†ģ´ŽaD‹œdĩ} gem§Û‹{8A$" MYĻī]Ûw Ū™æ•˜(ËŊ"˛¸Ę°aę :ŧŋâ˙…´ģß ęÚ[ƒ ƒæŠę*īÁXL? lIū'søzrŪ&đfƒŦY^Īw§Ä× 1˜Ÿ z׍ü Ō,īüA­ Ëtž8TsŒ“ūÔ|aĐí4  oEŅėS*$íÜ=ũkŊø{­\ëū Ķõ Á‰ŨpŪøŽĸšø,ø×GŽÉo ĢÆûÃõę+KÂ^O xn×IIZQ9sܓšÜŦojĮDđÕũōH‰4PŗF_Ļę‡ÁšŪŗá-?PŊO˙„u›†ŋŠ/5Đđ˜ÆqŠŗĻk÷ž>đŸĨß +ô;nnzuüëË<Ŗkū2ÕĄ´ÕĖ71Čw8_ŋĪ5ô…œRÁiSJe‘W įøT×­ī.ô[¨l.MĩË'É(Å|ũđ˙Oņ&ąã ]ėõĖ.YŠä˛‚ÂŊ ãH–/‡ą$­Ŋƒ ú‘ÔÕ{|C'ÈõKA­ÚÜ4qâÖē?xĶûWĀŋÛzĐЎŠĖhz‡ˆ<~ˇēœО´…ŠÁk÷€îk_á׍.ĩ{ÛŨSdkģ&($ōĐõčÕÄüYü7ÕA8ų?:ā´‹ŊNømŖPXŽĨP"ļ+’ų˙?ĨzW†,üL–ÉŽ_E%đb5AÄmë\Ÿ†|SâFø™yáŨZâ9Ą…7.ÔÅbüEņ?‹ŧ'âËH­u3-­ÛmûžŪõwÅZ÷‹ü'a§ë—Z€–Ūieļ €˙Zô{ŸEmá&×Y~Aoį=øÎ+Ī´_Ş#đõĮ‰āÕ)fŠĖ'ČTzšŠcã¯ëwšvĄĻ-ƒN°\@8#ī6}+[UņvĢŦøí<3Ŗ]‹O)7\NŖ${`× ņ!5xj=ĢĶkÉ|mņ^÷Ã^4ƒFˇ°ßËæ9ļOjõHœĪj’”ȁ‡ļEr:ˆŽ5ŨNõ¯¯Ũ”OŨ‰}§ø“Áđ“ëö—W×ŦÚmž؀ĀfŠŽē8Ō(Ö8Ô*(Ā §Ķ]Ö4gr¨É&ŧ–/x‹Įž#ŋĶŧ5w…—[’šg>•§áojøĸëÂüņ>Ĩî‚tqüë•Ô~!xĶÞ8‡CŊH.|æÄJ‹Āô5ĢŽøķÅ> Ötá­Įi-•ņĮî”æ:õ¨%YāŽTûŽĄ‡ãRS_vÆÛ÷ąĮÖžsø‡kâáãÖīRŽI%¸ķ-Uåæāšö>ĪX´đ­ÜZŨâŪ\˜Ÿ‰ŗåÛĶä_“ZžļÔ,tģiÜ3Kqˇ?@+šđ/‹uKŸęŪÕåķæŗ9ŽlcxĒW>#Ôŧc㋯i×ŋcŗŗO$gæfô’ÛÄwž ø‡/īdŧ˛ŧ@`–Sķ)čA¯W‘ČĨ¯1ø‹â+ˆ|KĨxz-Kû:+Ĩ2Iqü…I¤^ø‹Mņv›ĨɍުĨLŒDû~n;ĪņGŠõ;¯‰ áXnåĶíŠ&DÉv<ūT˙ øŸZĶ~%ÜøGWēû\^Vø%ۃøÕO‹ZĮˆü/ŦX_iZ›­ŊĶü‚Ęßũz“\Ô`œ×Aāø,ëƒË’ßrĪØ^ĩÍx{Tמ#ÜęÖڜšno)ŠÜB.G÷ŗZŧkwŠkzŸ†ĩYKÛ RQĮ˜ƒŽžĩéĘ|@ņ`đ‡†ežEßrį˅Ú5ĖIgâk /‰˙ļĨ{ŇíjWäÆ3ˇˇaņOšø~Ū&~<¤"Xû‰Uü됹Ôõ­{Â~1Ôĩ{›+xË40Ú¨ÆŅ͝ZÔđ×ęÃ[jŋ<ļėQxÁ”öŦĨÖüCwāÉŧkŦIe Ãmeqž3Z‹ņ.æo„ōx†8‰ŊQåŖ8lãu`\ę^ ļđEŋlĩˉXi-&@šzs]õ˙ŒgO†CÄđDín˛<…&šiĩ?ŲøZMgKņZ”˛B$hv}Ķßn?•nøĪQ×ė|šŪ›|!šŪÜI2˛gyū•sÃ^(˜ü4‡Ä:´åXYqÚ˛|4úĪŽ4yuÉ59ŦÃČÂÖ(z*īzĶü)â-OÆF­ŖËtm5k)L-pƒž ŠäŧŽøßUņvĢá÷Ö­ŽTÎcNq¸ Ûđ˙Š5ŨâkøOZŋ:„sĻøf`—ŽœWŦŅEQÖ1ũ‹{ģ§’ßĘŧ[öļOí zäI’]xüM{ą8=+†ņįm4 ÜŪŲL“Oŧėõ‹oáëįđJxĩkĪíaoö€|ΐņģ}*֙ĢIņጷ q-Ôa•ÚÁÜŋūĒã< 5íoĀzÂÛjSO4ŧ°Ŧwīėš˙=jŪĢâīčūĐôĢÉ^jū_-Ë}äBØÍnøãDO |?žē†ōîRđˆåY$,w~k øO´ü7Ō™Whd-ÆģZ¯}ŸėûŖ'Ęl~Uķ÷Á¨ĩ_íŊoû3Ȍįæ3 įæ5ģņĪQûuĨį‹˙{ĄÄã‹^ŠĮģW]Šé°ęž†ãÃzŦļ6ĐB^#FãĄŽ Áš§ŠoÖŗ..uK{ {Īø•õ4ŠæĢ0fU'œU_Z%ÂøûUõ;‚åŠļäĪs]¯€ôÉ<7āčî.ĩ n`6ë"‡˙–kˇĨs>Õu‰:ļŠ:j76zmŗ”ˇXŽ ûšŌđg‹. ņu˙„5[–ž{s›y›ø×ßŪšm@ûHXČŒü§#ũ“^éEQEQEQEQEQEQEāŸmf‹ÅÚE˙”Í* ö×§xžú(ž]NÄ:Ŋ–=NÚãž isiŪ žŧē\w,ˁQŠĘø`Đ[|FÖōʁ¤mŧũkÜ杸ô›ūšˇō¯øArļ~$ņ-ĖŽ")š°į¯'­ņ?X“Søgk=Ë/›5ĮAĮË]u´‘Eđƒ˛,qŒ÷Ž'ÁöĶjõKh>iØŋČŊ{Ō| Đ­5M×÷VķE#+F’mē hŅū HšsO-ቚY ä¯Ŋzmp_&Døw¨&ḁÆyÅy]Üzžā¯ xĸÚãp˛_š?ö~•î^ņ5§Š4H/m›,Po^áģםčÆ˙õg“ ÍÂûâĸøĀ-߯>V“k‰ažƒ"ˇž,ÜÛÁá+•#‘â2Q­-bm6ëáĒÅ$ģ!š€GĶÎãĐ Ąá-+T´øiu¤Ihé8FX†>öã[?ŧ.ūđÂYKūšÜÉ'Ôיø^ÚM;ãæĒ—lĨËĄcÕi˙u+kˆžˇŠE/ ĘY‡o˜UŒöīī†õ,ļŽEW=”ņū×üLš‰ū^ĘĨ]^Ũv^+š°ˇ’ĶöyhŽņInÎĒŨvž•ĩđ­ĸ? ŅPV'É=ø?Ö°žÉÍn0Ą_íЧár"ũĄu’ī#: {Ĩr> Öŧ§kvņk?dūĐlyfD—ņí]\L4D#åĮLSčĸŠĪÖã’]ú8.а]ŊzWŒūĪŦĐ]øŠÚo–A"–Žy¨ĩxÚ˙ö‹˛6_7–9_e9­n>=荨;aëî)ßcķm´4yŽxĮQ^ģĻ)M*ŅK"%JˇExĪÄFUøˇáĸ]ARœ7ģWĨ]ë÷ęļ˜má!äÜ0I^•į_–4Ņĩ7™k†īYū ™_ã_‰Ü‘YUŊ8ÅQđf•miņ_]ĶõY&ŽIšB…Álæē¯hĶu-"âāĪy~× ~ûs¯=~•ęQ€ą"Œđ s֟^?ņ2ßJ×|k§č:›LļåĄ¸[=3YvžÕ>xŖFhuƒ{cu?”ŅHô4÷ņž.øŊ&œ’Geob ›Fų1Ônė+=u =;ã\ķÛ;J–ļ§#–ÜÁyæĩ~/_.ĨŖøVčėuĘH@<]ÅĢČWádĒŦŦcĀVúUŋÜDŸ"ō™TޜxĪ?všO…ņĩīÁũrŪēiQîX˙UWø3¤ÚęzíŦח6÷×$4QKˇŒu#ķ…uzG‡ŧ/ĸ|GUŗk‰5Yai$s&ā?Ū¯I¯ũ lîåŅ´Ë¨ƒĩŧ34Āô5ÚOĢA/Â×ģYƒ§z÷Û^AĻč›|ÔĻäÉpnŲéŋ Ĩ͝ūXÛNbhV&ŽTsīÎk•ņōÚę_ ī#ĐlDV7[AAōēƒ÷‡ĩv^M'SøWĻÛŨŦ2ZeŖž:s\§Š|O§x{Ām.…ĨĸZO;[ǰĖmŽĶ§ZĪņ3&‹đž ĢģĩšģēqaąAî´­|]gkđōŪÆæÉ'´]:)'ųē†;HøŦû˙…č4´Ö|!ŽÉmĮæŨø8ųąžÕÔ\ęMĢü’įU”G$–ģ]r8ĒvVOŦü’ÖČ~÷ėĖQŽAÎ+Wāõâ‡Ęėۖ“ŒÖÂ{iåņgŠ5v$ZÉpÁI7'šá{ڟˆž-¸y€˜ĘÉĀÆMUŋž3ûGŲ1”HūöŲ¡~+Ü\_|#ŌŽ%FJcgãî×aĻßÚj~ƒE‚á$Ŋ›Má˙f¸Ÿ€¤éĮZĶnØGqØ(į™§[ Kö„ģŧ…ą ¨ß#Ž:Uw¸†Ú2ÂQISģŽ†ŊāFAČĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ˛ĩíĮÄZkŲ_GšpÃǟjåm>Û­ēÚßj—wVˆß$ ÜcŌē=SÃšŽ„šDrIkn˜Ûäœ\Ž™đkGŌĩ$ŊƒPŧ.­¸†?{ë^Žˆ5AŅF9ĨeĨXd‚+Í.~iōëķęVú…Åŧs>ų CÃ}k[Vøaĸk>RŨIsåDĄV%“äwÅ[_‡úRč'HYnšlũūjo øKđ¤sĨ˜¤ã’6GåX:—¸$ÕdŋŌ5K5æ9•anē? øFĪÈÍŧ÷2rķI÷šēãüUđúËŗ~uííĖk´)Š3ō‘YŠđ—KM8ØhßoųæĪ‘ųRč? ĄđÄėt­Vé!|‡‰Ī÷§')5uÕVūø^† e‚jæšđ×Dņώúƒ\I2ˇéMÕžiÍŧ÷“Ũ40¨UMįķ5…ņ×HŅŧgá…yViŨVĖîå[w5…mđĪĮŠiōø†á•]܏Ưü?Õ|Oĸøšü1â'7&D2G5uū*øeâ;Øĩį’Îū>“ÅÁ#ĐÖĢđkLÕ`ĩ2_\ ¨[q¸ĪÎĮë],ū ˛Ŋđ’čĶIsƒļg?0>ĩÍ[|+ŧtŠĪSņ÷z\N-:[~/đ ~*ĩļ´]F{+HcŲåBëYZ'ÂĮŅôŠ´Ô×īc1ōÕm+āúč—RÍaŽŪ"˒ɐ2O~oÁõĶŧE´ēŨËÜîĖ™ū?Q^Ŗ^ņ“Ãú6­ĒC-Ė’k˛:İFŲ{†í%ąđŪk?úØ UsZ´QE%yÎŊđÎ{~ãYđūĒtĢ‹„Ų*Ēe_Ô֏ƒū[xfYīfš{ŊNāaî_ī~7ÂG›ÄK­Ÿ]ũ­z3 ;}ž”x—áM׉n#’ëÄW$GĘ\íoZė<'ĄŪx{E[ ŨIõ ‰Y\`ãŌˇ¨Ž;Ɵt˙Īku,ōÛ^[ŨĪäJdŋtų´Ļ=õā%÷É:ŋÎįŪĒé ôm\XŪ_Æ\ÄM܎ĩRĶāæ•eŦÅŠÁĒ_ŦčáÉŨ÷žĩŗâŸ‡šg‰gŽđË5ĻĄÂÜĀÛXũj|7ĶôKá}sus¨]¨Är\žíƒÛŌģz+‰Öžiž ņ$ÚžĄ,’„E,˙xT:ÃX4­V+ë­JęøÃÄ);ä'Ō ÕžhúŸˆ$ÖRōōÎâNX[°\ĶuŸ„:6Ģ}crŗKļˆDÁ<ÅÎyĢߝ^ž).Ž.‚ÄĒŠŋĘ  p;S/>čˇÖQŲĪy~Đ'E3)Ņü)ŌĄŌßOPÔRėŗtéô­xËÁKsŨÄĐÜ´rãúŠĮÕ~Cq­ĪŠéZĩΙ%Ãn•ačĮŊoøSÁv~Y%Éu{7úÛŠŽ]Ŋž•ĶÕMOL´ÕôųlobYmåtnõį1|Ž)ŧ‘¯ß˙eoĪØˇü¸ĪL×ĸĮĻÚEĻ 9`Akåų~Xm¯?˙…=aĸīiŠŨÛXČ۞Ö7!Oĩwpčzt9ŌĸĩlĘ1ãŒWŸ¯ÁԂgŠ×\ŧ‡MvËZ+qJëõčúŸ†“Bš,ãP)åO­sVŸ´X4éėî.nŽVHŒHd|ųKūÍI¤ü%Ō´ŨãK{™ĻŽwBÎŨpŊŌ¯ĪđâÂF õŨŊ¯ņ[Fß#UŊ_šNą§A§ĖfŽŌ$Ú"‰ļ†õcÃ>°đ­´ļÖNĐI˙,ä}Á~•…¨|/´žúI´ũVûN‚v-=Ŋģáú×Q§øzÃLĐ˙˛mPĮnTĢ~bO|ú×1ađŸAĶ/Í夎i3šķOÍõ¨åøCáų¯ŌøËx.TįĖķNj‡Å?ÏáĢx5Iî âÕ˙xÍØVßÂŨãÞ ļĩš?ŧ™J˙w=ĢĩŽ6…ūēģ–ękyebÎL­É4ŋđĢŧ ri(‡ũ†"–_†˜3IFö,MméžŌô)ôË;TŽÍķē.ÜõŽX|"đØŧķąqäîŨöo0ųyúWOŠxgHÕ´čŦ/,Ŗ’Öš@ĩ›¤ü<đ·ŠĻŖ§i …Î ģcŸlÖṲ̄Ųkz|ļ7đ,ĐH0A>•ĖZ|-đŊž™uc–RäaŨÍL֗†|ŖxIį}*ŒĖ|ą5Ņר|0đö§yqupˇIÛsbRT‹ā÷…mß|Īã’R _ŌūxwKģ[Ąn÷/Ũ3ļü~u§â/ i^'ļ†ßQ‰Ú8yEFÚ+'Eøe xS†ûMYĄ’6ŨˇyÚ Õ×üĸxã}V×Îd]Ģķc—ođÃÃvąˆbļŗųĢ/”Ī‘‘ŌĒËđŖB“Q+%ĘCģŲCŸ/?L×OĢøwNÖôFŌ/!ŨhTŖĒũ+3ÃŌ<)+Íaæ´ŦģwHۈ•K^øqaĢjŸÚVˇ3Ø\°Ä­cx÷­-/ÁZV“§Ü[@Ž^ávË9?;~5Î?Áo ›´ŖŨĮ8;„‹)ȝ@ŗļ[;8­‘™–5 MOEQEQEQEQEQEQEQEQEQEQEQ\Wü ˙ „ŗArmīŦÛ|Û>†šļ´øŦĄmâžČ,kˇÍ,~o|V÷„<ĒXkë~ ž[ŊA“bm*/zîčĸŠ(ĸŠ+ĶüŖiÚÅÆĢžûÉßy’O˜¯Ōē*(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸš{˙i§Ša×īæž#cōëZéĀ  éKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW˙Ųleptonica-1.86.0/prog/lucasta.1.300.tif000066400000000000000000000704301506303110300173270ustar00rootroot00000000000000II*Zp˙˙˙˙˙˙˙˙˙åš5×Q˙˙˙˙-ųb¤w¯+ŪK¨d!‘€AŽ šŅ‘ōų°Ļ™.)Ј:ƒ’˜ŽÉ č)Ô“™`ƒ5‘€ô@ŠƒÂ ß `â-b0žœC64ÂT<=†Y #wôÕü"PéŅvû”ämᚌ>Ëæ ēŦDTˆA<”‰ Ōd´%Ų^dpéé=kēú ’Ũ…MÂŽ’nšĶū•mĒŊV­ĨIá.ļ•*˙ŌÚē_¯ŌU¯Ui%ZOžĩIëŌJŊuu×Wū—ŖuĒÖŊWZZÖ§wJŠ.ĢKæCuU­~ēék_ZúŽŊDėLeČŪ]‘ˏ¤qt—ét’0ũ%^´aúũuôŊ$†„_Õ*Kü ’ÕzUŌę›ĨõUĒÕŲëú^ĢHBKÂ_^–žēŽ˙džN 0ƒA…ˆJŊp̈H}WZũuUņM¤ØŊVĢĪ(rų¯KéuOŽĸ´*ÅCüŸ?đ…ŽĒ‰¨.šÅ JiŦœ*{ŽßŽ­—ét×ôĒēsÉ÷J•¤õ@ÉUÕ}r—øëü‘ø]˙˙ôŧßęĢTuZUk_~?­%õ›Iu¯é}-:]kꝾŋŽĩZ]uÕz_ú^¨i4ęŊZëúŌõ_ZĒ^’öǧ3ŅßéUŌ}}/Ĩô’]-§K­-S[IļĢ_Zú…éut‚ôŠ÷JŽŠ%ĢkUm&Õb‚ØUU´‰ÂA¨PO´•;JÂáS ÃæFR`‘ =„Ą„LtPÁ`ÔA‚ š0p„Cl!‚ä€v(ô.ץ­ŠbĩiŨėWęŦBĩijGøBÖ̘AŽa€™Žh8č×Ëōœū„0„C= (&:iĻd! œ ЈŒDDDDDDDDDDDDDDG˙˙˙˙ų”NT•AYdLe|3ĩfxĖĒŸĻĻšk–#F†Å åģø´Â!ĻÅ AEŒz4;MûÖūõug›žØRPÃĨrp×d¤Û´Â “ĐO5Ã%n›EŨ‚ ŠänÕŲ(Å&ũ‘ĄÍvG­˛7h' šI°ČÜO› ē×úĒŊWũWŌīģ];ģTĢÚę› ‚jŠēj˙Úiĩv­=§]öŊ5i?ųsūļˇīûë֗Ōũûūí=uûëo]ū×ÕīõīwöÖũ×÷kĻĩ˙ū¯˙ü{}i¤¸}˙íŊO¯û˙ž—õū˙I¨ôŊĩKõ¯_ĩĩŦnãõ×úëß˙ī­ĶõõŌ˙‘Gë–üiīâqßū¯é”?ãk˙ũƒ˙Ž?c˙¸ūŊúá/“Ö˙Q_ã˙rZ+“åuÉ:Į6žŋŌ˙žI×˙ėJu˙ÉéīZ_¯ûę˙ũVū(¨ß~˙ũP_õÂEÂ˙˙ũūœ.ŧĮ™öžgŋû™¯~Ūŋ°o˙õ˙×.ŋOũ.ŋ­ŋ˙hĪ„úOĶøO¯õûüĪvˇ3Xw?ëí˙˙ũoëŪęíuūgúzĐ6×JõͧõÕ}Uĩ˙TëĢ?˙˙^õ˙ũŸ˙˛:˙˙ũ×TčvœvŦ0ŠÚh?÷Û̎ŋJģmWIĩēíÕ~Õ÷_ĐŋtũŌģí.ÖÄlŒtÅ1A8ĩß4ÂTÂlZ Šz; 0ÖęÖԌ ĶēAĻb0ƒL-đŌM6ŌMl úĩ Ąl0’a7Øt 4ÂpÉ÷ĒB-ŠBŲ!ÚžęÅ!PŌbŌĻĮl“­alT\i Ø˜{N¤ŌbŖî""!"ČāŽ°Ļs͘"y„"U˜aOAša5,tĖ<0Ĩ ˜ö ĻTîČŪ‘díJpĻ@Oá„ĖA^ƒj˜ĐˆˆˆˆˆˆŽ" ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŅhøéŌęŠ~’đŌKąCà äÂqã˙ȸr@S˛ŗ;×+ԉ˛¯ngtčÎôÎæ2•܈†jŽÂ %Ŗ‚Ũ=U5Oú¸|îąŨ;Ŋ˙Ge)Îá{ ÃÖÖūûĶvŸtŋrŖkĒū5ũ; Į8˙˙ũŦÚ;úëüz_Öē˙˙•_ˇä‚>fŲ™“?%ķæo_*k˙RTÂüpƒ°š „Čä4 ˛æpŽs(#qÆ_R6@ƒ>f >yF@ĪdqH30ŒČĖ* &GYÄFG#Ų"ėųæc@˞.a4ūmhąėN;kEÃM‹N5‹âĶL!áƒ[Đ C‹EŽøĐÂČĮ„Bė Ī`˜@û<&âŅcˇømĻÆM†¤Ŗ[H{RNÃ˛7h¸ĪŅwFļô‘Gi铅4QĄ´mė6ÜN;N.k|Ņa;% ˜˙úŊ}-°Tęõ† ŸiëIūÕđúģN“nė*umØI6 îĶÄ2CŌõl0ÛW~Ú_îõ˙ÕúÖū¯ž’Õŋ×MûwIŊũ}UĶM[M-˙õũx÷ëÕ/­zkūž^7ũ­ũ+ūûi-˙õ˙˙ū–?Ú_ŋ˙ŋ˙ū+_˙_˙Uc¯ëëũņī˙ûėī]×Įûûûû[UíˇX˙˙˙čjĮū˙Ŧ$˙˙ūŋũø˙×÷ņ(qšņK˙˙ĒŅ1˙^Ŋô ũūĖ*åé˙÷ Û˙˙˙Õ"Ą„\cŋû˙““ŅÅûuū"=õũ˙ŠĩOëj÷˙_u˙}0ée×úõ^ŋ^ŋõëúũë˙4_Ú˙ÖĪúZũ{ûáŋß˙˙>÷t˛ë˙B̝ßŋ_îģûūÛĢĢí×īŨUm%ô˙ũúŪf—˙ũp¤ G‡hU§MúßjĒžŋ*ˇ˙u§všî¯ßûé_˙ŪÚöĢ} —Œ&°”RĻÃJĒiÃ[_; :ÅĢ ízŪÕ´=õŊ5×õ¸IlÛí;#{ąZÅ&ÅÂiØNA8P lS鱄-ŠøâЊ0˜AÜ0„< ؤŲĻ)l'q4#†šÚ47Ũ”éØPį~i“~ˎĶU<ÉÅØO(÷VŠ­ĖЍÄhDDDDDEÄ0„0A‚ !hC""-ÖÄF‡ĸįŌĮÎÂî–āZŽôŌ]:A/×õKņVē‹kė%Á‘Đ%a1UPÂFÜU "#˙Ęß š†v.3Ģ-Õr&EDEĖ×öÚÚ SM4ûëūˇÍGcáü>ü%ĩw;÷ßŖEˇa+ ki¤˙ãŽ8_˙¯¯úÉlžD5×ķģÍĐAŸ0šs3c.Đ3å˜Í û/‘„o4D3'ԁĮ‘™’Æs4ˆalŪI’lÂ"2+Œ—ĖĖ&42@…Ķũ›šhq a0ˆļB(aƒ8Dr'a0Lņ …„!›#älːO%Ælˆå‘Čņ! eĖņ˜a32<ƒ# i‘ĖŽPhŠđƒē/Á!*.ÛŌ5¸ÃHΰš-ÚzG‹wpØ´hŨ/×û÷ĐōdVJ}7 Ė=z˙ØØ¯ßoDßŋ¯Ĩ_˙ųĩõõëđGɆSÕ/ĄÉ‰˙đßūۊw›H+å˙¯c“ĶQ˙÷˙đE;?˙úgm-\w˙‚=ęŋ|ęyúY˙˙˙Ííë˙üĪŊÜQ\ĪÃũkƒš/˙ÁŊõ|?o¯īšm˙ũ?ų=ūū˙Õĩ§WK]}Ö˙ĶđE=?˙Ŋöëˇ÷ũ|OKK÷ß3_M'ׯŨwNVÚM…éĩĶ´¯×ũ[I}Žē[û˙CM[WīŽģ_^í[^­ôėCcØĻ*8Ļ!ļļŦTG¯w§w͎đÖEÖ)Š´Ž~ÚTØUŋôĸ ᄐvFđa+TĶLŒ{ĩLPAĻXN)ö( qOō1í1ąAt˜§b8§ā‹úb¸`„pĐah0š 2Ą4ÉÅϧ"žTqkžjxMh0AĻ™‡ā“[ jŸi—v>ˆ ââ""""""ÁˆˆˆˆˆeD0B"8hDDDGˆŽ:ũRÍÖvMRīĐzUKUŽžÚJãÅ ¨k¨ˆ˙ōPÎâ%f+(AĻ&dKr%Ŗ8FFDvåL×Ú~ ĻĒžŸų ŨļŨ7īXv¸pĐ|?vŒįŨß2$^Ļŧ„_ĮūëūŸūĩõū×ë˙û_¯˙TŋÕŌūaĸ:> Rßõû[ƚ"_ˆ4 Á4Î `HˈųÉ‘‡ägäÉffŅt`Žš1h8eÍ:ÛLž:l4ÂKbāŠ´Ž›}}=kßûV˙ o۟ū›ûéß÷Úęë¯ĢēũéÕׯz§ĩŪ—ë~ûô—ũw˙­Ŋõß}˙­×ûũß_koũüU_÷¨āŨü/|7ú˙˙×ļ¸|?¯÷˙¤?˙uë|wZ߯Ōũ¯īûZ퇯uŠŠū/˙k˙i‚(|k˙~N ~ûoĮūØ_úøũ†í°˙¯ßF÷¯Är+¯û×C[Å"ĸÚOrvļũCú÷Ãü%ļ˙ËĶ˙¯æ<Ú^M@!˙˙éƒaŌ[ĄŅPũ/ũ­Úô°Šˆ7›_˙ņU×ūīīÕw3ßÚpæŦķŦē–üĶÔü˙˙˙‚gŖ>ŋš/ũ͡ũūgæ~ŋëu­{÷_vŨ{K˙īĒúũŊ˙õ˙ĒOī×˙˙_­ÖŋéĶę­ßī˙˙ēNũ/ßû÷žžŊtëkí§†’WA˛3Đi_¯Ū—k§h¯_{aVęũ-[KNôŧ– zVŊÚM¤M´+bĩNJŠˆáĢkēUcL h4Û_ԈíS Fļ* áĨč6)b˜ĢM‰ĮŲÜ ĐaS†ļT'dE´ąÚ˛NĩՊĻĸ™'QP@…5"j<Ģ&¸Új0ĶB{a2‡ """8‰QšđŅåXB!Ļ„DXB2Ü! J°… Đˆ0B}B!""""8ˆˆˆŽ#­)“Õô×2KkUîą˙kŠĐ'چÔfˆÄķąâ„ÔSĢ"€A$Dtv7“`¨íGON Ņ Į$.H­§Pų(ÃäéåŽßiˇ;0Øp˙JļļßoöŒō…ŨĮr+ŋnė&­{ îũüFēC˙˙ū˙úUU_ô’ûūLš+ ys@ƒ6lŅ@gˆš‚ ¨2ųō<2äxgģ8.I–dän.I Čü‚‡ ŽeÍP0ƒL Đh]ޤžö’,v†ą¸°˜Aá$.ϚlhĐĐÂwĸĮqiá#ŊkĸáŖ8änIÔ_ÔĐØœv‹ÆŊX0TßAؤnh°¤âáŲ‰áÍnÁ$ki6(ŖÃFŠ.Û$í&įŧÖÚi “ŅwáŌtké7NÚdcÜ2æ ' 'ŽÖët n…NûMiqI=nÅ=?ĩ­Ģ¤ÛM/¯zŪ­Ŧąī^ī´Öūˇëo×ëī“Š:o÷õļ¯'VûŽíĢú¯ēĢiīę˙§kí_ú¯ūŋ¯˙ĩÖáŌĨ˙_zëõÁˇ^ŌÛzÛĒũW¯¯ãK°}ëŌ_˙ÕģûŠũ˙˙_ŋū)ü~F:˙ī˙é?õÛ¯û ˙˙¯Ûũŋ˙ø˙CũÃņÅÆÚQĶņņũĮáz˙q˙˙éŋī˙˙ūH?ļų?Oü˜įuĨōX/WōôqQūmTž—˙õ„UŋÁß˙ųbŸjŧA}7.ĄT# ĩ„>˙ƒģ˙õũ˙M0˙˜@ųĩ˙˙õūoō겇ßë.ŋ}/$`ũŨ™¯˙ē˙ģ˙nŋ˙ųŸ˙‡KíÍ;š/×üŅvf­­Ėû ˙ëēé˙ŪŋĶ}Ōßß×˙Ūŗ?û[ú´ˇuĻ×UíQīöš×˙öëíՄĶí$î¯u_˙m{ÛKûõ[už×ĪũūūØTq+Kû×/ļ’ŪŠ ö&†ƒŒŒŨPkĻÅϚÚDē2éÂL0¨4[Iˆ¤4­[IØa$؎Ø`•°ÂV› |&b˜ØĐiąA4áˆW"@MN樍Ē4í ļ4"ØĻ+Bāˆãdž˜bĸĸЊAČۃb“b¤íN8Ēíǝ ?ˆˆ† šiĻU„ĐfN铉Ņü0ši„$ŒNbĐ4ÔđƒXh4ĶXaaX†„0…•hX@ˆaÄDDDDDDDDD0„DDDA‚lDDDF#ŅÎęôŊũ(a„ŦTQ˙äXŠxnj˛Ė‰ĸĻžvĘú‘#ē=īM;õˇ‡ŅŸĻ†Šô°˙đÖŅŲŽw­Šœ‰äžÖ×iuąqúę=¯˙ūŋé|¤Ī#O#ŗ<‹Ŗējēë•_;,ˆ<Ŗ;x åÆx`‚!ĸ+‘— ņfĖų# gŒÄ0““A4đ3ĖžT@Â9”™ô|‹™Æ2`R9yr'Ã.gpfĖÐc‚fD 𛠁Ž/‹NIÛØAôBńjĐi§ 4, Ņc‡Ũ­„hƋvņD‹†ÛńÂ-Û"ŋ%pė” ãNĐa"pÆ'xvG vų.Ú.LJq_%rvŋu˙ü ¸˙˙ņRzūū^ŋúåéwüÚđ“ŽmĐ˙ЏCüW˙ē[W˙ũ˙Zī_˙đGîŋú[˙××Ķ_ûôŋĒYz˙ë[˙˙˙MųŸīׯųuũ÷æˆãÚī4Tæ‹˙õ˙¯˙õkŋ՟]fē_Û˙¯yŋëöÕ7ūū×ö›ß˙^ŋ~Ŋ;Ÿũoˇ^ô˙ÛöéēũzŠŌ×˙˙Õĩļ˙ũ+_žūa0Ą0ƒAÚՄ“AĻM[ ŦwOV´×TõŊĩĩôí;l頁§aBÂØNÃV! ÂkO‹X‹ŠØô-4!Å.­[ 1MƤPA„qąĻ……bˇĐļ)6(' &ėTđ„[#VFS„ʰļČīL“ ÖˆLPkžkd5IĘmķĸ3A„ĐkޘA ėŠäpS‚#Ļ\DDr5ˆˆˆˆËp˜A„"!„,! &˜B""â""!‚0„DDDGĐâ""") Ĩ™s]#"mNÁēÂWĒÕz^+ŠiwŎ´5ka5 ŦF?üėTgVDãēã+ÛTÎČ;†­{ģ{žŊŦ•aÎë_ƯMū;T¯×ûUJvĨ]%%L†0ŅˆĖĪ2#ŖÆlĪ œå9įHęĶ$a$ĄžĶˆjˆ• Ķ]˜0˜&]‚aą—i%T\4]šˇE}įž‹‡‹†…Ú.*ĄąuY˛“i=6đƒaŨ­Ã,ē´J`č×JÁ‚IŲņĨ÷_m>ûé.ûroļŌNģkÛú˙īü?úī˙ũ_đÅ}käaÅk˙Ķ]uÕĶY ŒŽ‚qû°ßÖīãĒ^šãaÄ­ūßMR°ü1ØņöäÃ&“á˙EG1ãéz.rvPápŸŊÁ˙āßū—ĨûB?ųŸZáŋ[ŗ˙Ĩé~§û}×ûöŊÖ˙ũŗ˙äë'}ÜĪŋ˙WĶ]~Ŋ}[^đÖļ•ŨŨ<0œ5×Jû_‡a/t•pŌb˜ ˜M8ø¸¨Ļ( Âq(pĶ†”S %o˜qM4ģÎ:VN,¨M<[NdcØŨŠAú 0„F‚ÄDE„ÉZÂ3lL&švĸ""8ˆˆˆˆˆ™ø_­.*Ղ˙;)ŧ‹‘YDŲiųSMJļˆeÁVG„äĒY2ĖÃ2")ĄāŅ8ŽĒŠÚ˙A1žiīWŨû^ͰAķ.ü ppäOÃí6ôītiĩyÚÎPœëöFyŊãõ‡ÃJÕęŸú˙ūąÅÖŋ\7߯JĢ˙tž°ë´ūĩūŋ˙ؐ'ž¤6uZWŠAåe*ë”í5ÖČy’r9ŧŽ3Še˙Đ`ƒ'=#FaĖčF„NĪ‘‚?œA:ĸ\Â"-΀iČC‘NĪāĘ æ`ÍĮÍ4Éȝá˜a0ƒÍåļÚ,w„;G¤Œ;A  $0„Đa¨&j ϤäíiĻh4Ͱ˜A aM5Ač4Õ‚ Ņ @ØpŌMÉE揞mč ĐĸĮËz.5Ņ­ģą~˙4iy;hÖØŅwF†›.hÖҝQ(|ÖŪĸSšŖÃŌ顧ŋÕ´›^t›KJÕˇÉC ē˜pËĢN$ŽĩpÉJՍ’N-m,0I\2Ķ‚§Và wTûũ]Ōm$ĩē×ŋÕRŊé˙õũžŌē÷JXę|2æŸvšģú§ø. úĨü?˙˙{Iũī¯vß˙˙˙¯ĢõÕõ÷˙˙a˙zö7˙ũvkõ¯úöđ}%˙ĐëãCû÷ûí/˙÷û_ņÅw˙Kžũ˙ãüÕĮà ūšūŊuƒũcũū‡öéũwQĮ˙˙ßũũ ÷Ž•˙˜ũ|ûë˙†Ūŋŋ°‰ŋ¯˙ͯ6ļ˙ÖY|žŸ“ɑ_Đ]ûŌķū˙WkÚzԈ Ûë^ŋü"¯˙^ũ-gC˙7Ž—îmzYuû˙=~›ūŋŲ÷3Yõ˙úúę āŠ‡ūgũĨöēŋõū]_úĨ¯îĩũŨß÷í×S×ŋ˙ōƒũm¯Ō˙ø§o˙˙õ××˙ûÃVĶŌūūŽ›Ģīמé÷û˙˙īõĻūĪhã9˙¯ĖĶĒkúú˙˙k™ÅE°ÂP ;KŨ-];­ Ōu´Ž×Öī^ęŨZÚ[¤ŊŽžÚÚoŪÄzÚũĄõÚd‡ąHiÅ5ąąLîÂąąąMĨpÂqXMŠAÚÆÅE1AĮ^AąQÚLSâŊŠbh6*8†0A‚ &īŨ„§e8ĻIĶM1Nę›Aî–wĶSējÚbÃM1´É=đ˅^ŦœZˆˆˆˆô&rĀ„X@ÁˆˆâB"@Áh0ˆŒa‹ σ0ƒ „""B"-DDDDhDDEÄDDDF¨ĶŌH7I.wZޏëÛâÄ)ŨH0QŪŧī‚eBˆ˙;OĐgp3Ė C!!Dwƒ(ø§ŠĐČÆ@ČėœvLŽąP̧]öˇjšj™>ømÜ8:{čĪßųžør´ƒģģáõ÷ŪÖíiä§Ŗ:ˇŦī_jž>5˙ĐãáŦz˙¯ūŖŽ˙˙ūš×ëë˙˙õRDj[Ĩ¯é’ëךāš˜$Bpg F8ffĻĸ0Ɉƒ r°ždœŸŗRlS8‰UžfyäGÂa„ ņ‰ĮšČá›Â~#Ŗ6a—3yĐda™™†@ÆG#:ŧ^ŠÅĒ ,&˜BÔ BûT#@ˆė Ėí45´Z,pũB 4;[3Ėa3hZåČņ„Čã˛, ËļᓙvÃ$;E‚ S?"8xh?Ō ŖF• īZ5°ÉCA>ė2įA&ââqŲ´[ˇŅą˛7a’tņmĸŨÅÃ]2Ov’ēzm×d­¤ØeˆNÚà ÷„ ęÕĩ×ÃęîöÚģ¸0]˛oa1ON ũ´ÛŊIŨŌäīoĒŽ×}_§ũ÷ižë¯Õī^ˇũēŋú}}´ß×ßē̤ēũ×Õ_õZWß˙^ũS÷žëū—˙˙ĨÕWŊ֗[õ˙˙×˙×˙ãū˙ęũv—÷˙ŋŪũŧz˙ö˙˙×ûhĮK¯¯ûZ×ßk__˙˙ė_˙ôŋ¯Ú8íkëüJ˙˙ŋũ˙ūßū˙˙_\ˇ_˙˙†?ßß˙öŋm~_ŋūû˙Æŋ&›×˙6¯ü%ú˙õčˇ[ëņQ_ã]Žžqé˙˙øGŋëûYŋŨ„S˙˙˙J˙ūŋÂO›^ū˙˙ú˙Í?ęŋöũuīūg¯ūŋũ}e×˙¯_˙Ņĩ˙÷{ô›ŋUôŊū˙ūŋ˙÷ũw_õ˙Û˙­K¯Ũ/A×öŲ˙õë~•ŋÚû~m_¯Ũm_Û¯îļĢũ×˙˙õ×ņęˇ÷˙úK¸q°ŌAØM==7JÂÚÚw_~ēÚZĻÚvëē§ąöŠē÷ŪˇÛĨŽîŸÚ÷ÚÕĻ4؜v˜bBâ˜â˜ė% ›Å ՊbPö%Ø´âl4“ĐA„M4Ø ƒA„RpŌA„ú¤Ķ ąI§h\ĸi„Ķ^Éē‘^Ķ wLœ8¨¤aÕđ´h×pč×Ģh0§ĖÖÜ4ė”QŦa—Bw§ Ę ]&à ´ŦŪƒ¤Ü čŅF‡5æļāÚēAĐM‡¤˙VÚ˙ûŪ’_vŊ÷x[ŽôĶM¯Ĩvß^˙žęŌˇŊ:N–›ŋZIĢoéz×_ŽŋúĢŋĢŋíúūš˙˙[Ģ[ŋūũÖ÷îŨ_˙˙˙{˙˙Žŧ1ę^õ­ŋõ‚ëūŋ˙‡PúāŪZ˙Wë÷^¯øđÃ_ïĨ|„Ø˙X§]ëö—íWū64ø9/î—˙K˙˙­_øũ(Ûûöûa˙×˙ą˙û|0VîŽ!}}¯˙˙&’_áŦ˜oÛũ&ŌÛK÷_ŅqūNk×m¸Cl8ß fGø˙˙úÍĨ˙K.žôč¨üh¨ĨĮũ˙ĨFî?āāŨ"ĸLŽ‚ûũ~Ųõ˙ZúK’0}TõúũŌũ-Ížc/ƒö ‚+ĩëd˙˙˙˙ūG˙˙´ŧΎũôš°éeĶū…¯ūŋûÛžÚĸķ9/ëđG_˙tmũõoßíī˙īũ˙ąÍ¯uēęũîôîīTü}Õ×K]žˇkkiŲ~ÕUUÖÖĶĩéīĩIĢža¯ęGVí}´¯ĩlįĶ֓ūŋwi}ūœ Á6*)¤8¨ĢN8a+I‹†ļĩ $ÄxMV#€Á8Ž0ƒØĢIĩŽé°¨5M[VĶMˆznm[ 1iļƒû  Ë„‡8ö™(î“8âÖąrļČŪŌļŠbã¨"8ŦTpˆãbĸČŖÂa6'ąLS$8ļ%>Jq a‹Ą†\eXBÉ3 5‰ ᰄOσB-KpƒBBM4h4Ķ'iރM0˜L&N¤ņÄF…ÄDG‹B""""":ĶĮú2:Rܑ¤IdĢŌũëéSUKô´—ļąąąP`AÚÃØ `ŠŖšÔDDųڙŅ|Ī%ãŧËrīĻ…„ÍB‘QdbÄZˆö*KbA6H"@Čv3÷û˙Õ}5ON8>8ppáŅØtgŊŋwé§wwúuۃ˙ŪßķąžĩõžLŽŊb×úôĐ˙ĩã˙˙ü}…˙˙˙Ô_ũ˙ú_úüÃ$ øËÄxņFG3ȏ~D~EŧˆEnL„ūĢ ķ´‹͏Đq ÁHI͑æaeČ fræh0‡˜‰DŧAČæN2rGĖāƒ8)gBEōėņ:.‚gÆ`ˆKtEšI”†hdæH2FŅdú”ã1ŖVFĨ5Fˆ—g?á Ķô 8‡ds ‚dr@ĶL†0ˆ„Čđ‚åČāĐd|&h„æ„3d‰&‚˛.ÁxeČyq`ˆ!Ú!.{Z.ÛM"íĸíōO‹E¸m5ģ[Îū/tŨƋ†‹w=Ņniĸā?¸´g~‹†í=ĸÜx˜~¯ĨģUuƒM†Mé>ĐvYĶ:N’ˆ`ĸUŨ é]:Ŋ8d JˇNpÂJîmĻ’oa;%›˛d}ūŨ%ÖęŸŌˇ¯ÚÕŨĻę­÷Ĩˇô›ĒÕŧ<*ļMënÕ_[ēĩ_‡é_ĨjßŨV˙÷]ŋ˙÷¯öëī×û×ĨũuōĮUö }Ūŋ˙Åo˙öû¯ÃUũƒ¯ũn÷ÖÛzøK˙đß˙ęŨ{uĮ××Qí4ąÚ×ü}m ũ˙öŊŋõ˙ū=ũonÂ˙ī˙ú­Ąo˙ŋ úÅI¨K˙&ætŎūūúNđũũŋ×Ûũ×ôŋ›ÁīŪ¯˙ĄŧÆÁā˙˙„UŊ,"ąã˙‡Ėo˙õ,vū˙ûMõf~˙ų:Ō¯ÍįīÜßũƒįô˛ú‡Î¯×Ŗ7ëŋū“k_Eū˙[ĢĨõē×{öį¯úũ]ũ{|ĪMũü?ô¯ŋģ÷Ą z÷ßžŋëÚO}WéūĢũú_û~ŋ­ūßéW­ūŽ1ȰtŌVŌÛIëēV×­~õĶ[סĻũ ´ĩõÛJëUŽ÷n­ģ˙„@Á§lVÅ0„ÂAà PN6“†–=6)4Âh5bĸPøjÃI 0ƒm+ jƒm-´‚h4Ķ eĪÖÔàa4íD,íŠ{k Îãôí¤>Ž7 4|اˆã‚#¨DrMŠĻ8ˇC‰k"n˛Ē@Áˆh0„4" -•¨Aæ„'öˆ†DC ÉJ ƒ ­ĻPö„B! ĒÛQĄÄDDD[¯. |ˇ$KIaôKúŌIkíR…ū:ÛJЄk D› gn8˙¤ŽôE$A Č%LŦÔKˆ€ ”ú ˜* Č PšĶL āî˙~ėî ôXîCãuŪĐ8;‹Aë! °ųŲ5]ĘuäkIv÷Oĩ§™Oīũéöąú˙õ¯Įú˙_ã˙_m]w˙×}W_ūŋœy ˆųfč¨ĩSÕ(“3yJHˆz„ōä8¤g0ķ4F˙Ī™™äc)ŅžH#Æ Ĩt4, ĪA˜˛æˆE 0œ &™ hA‚x@ō恨Až3˜&\‹˜ đƒ/„  M¤i‘Ī6@ƒ80A„Čäē´kąziÅŽM‘ č4[ŧ&>-ŨÅąhąŪ†1ߤ/yąiĸâÅ˙Ü2PJØtk“ē“ļ‹ļ‹ļa86‹ļ‚mæˇAÁ‚’†“é6ĐpÉdĄĐ}Ō6ÔRļ7îŽÉX•›dí†NJŠ˙_ĢÂpË]6–ŨmÖĢ“ĨÕ:W­ģ×Ooíø` ŋ˙wÛīÚ× Ũ¯åŽ­Ŋm}ôŊnē˙ëÛé˙ß_ô¯“Šŋ˙u]u­ `ôŋņ¯¯ÖØĒéÕuÕ˙û[ú­ū´´Â˙ũŋ˙˙ũëúiī÷˙Ē˙ûôŧ}˙ãîŋĮõ›¯˙¯ũĮ÷\÷ßú×Û˙ 5ũ¯üÚ¤Ûũ~mzRNPëúQåø_õ'eM˙N;á_ôM˙ɇûø#Ûëßũ?“B7ōÃāŠx˙Ũ˙­˙Y~‚;˙Đ_č/žŋõāũũ×˙^g§×™¯õ4_؟ū˙é}įŸ˙—˙K#ũë[ˇ˙M˙{™ŪŽ˙sE§˙„céū­ũ~ŊũķE˙W´ŋŅāW˙ôę•ßk×nß˙zÖõŽ˙¯{˙˙ũļŋķŊģíoąū´›[I_§Û]+=éŪžÚM+ÕŽž‡˙]ꖾ‡ŪØKí,px¤,*yžĶŽû 0Ō Ã´­&ÂQ°Âē|Rjà  ĄŦZ V0ž“i Č0]ˆÂ 4ƒL ØÂiąãÔk>ņ ŠcMb˜Ļ)Ļ)‰Nöļ)Šb›TVIÕĐ%˛N­5‘ž#j!Öa$#rPqđ§„ĶF[ϚØM4 æÍ„&&čC(Bhjƒ\ž&hĶÂ* †EÄDDDq ˆˆâ""""""!ÉņÆtéiôĢéĢa,qA84ƒƒ.EņūdvYëDŽ ” z5˛´2@ĪÅ@ÎČÉXÎŌŗ°É ˇĻŸ§§„Ķí?ŋ~ú,vu(pūāô8~ˇ“ūŒöŸÜםäūŋ_}¯ũĒkŪëã˙Ž>ŋũú˙ū—õ+qũUÎĮDĨdŧ„ˆÕ%C"Y0Œä‡™šœHƒ'2?%ãË1&GDFhÎ$ČūS™Đ‹™8Έã0‘.$圎’œf„|Ė3æo!‘čĶ3Dæ}œŠ‚3Ã.@ƒ„jĄ†Ņ(j829'į ĐxAĄgQPƒCČähZzha8´š L Ķ‹0A`š tÕSĸpŅpæ.(ģÍič:-īôXíbaÚĸĮlŠ;âŅpÃ"ģEà J]ļFîhē..-ąhÖŲũ-môka Ō.Ũ'֜e÷ęø`´^Y4ŸÃ¤¸,iĐ6ÂpfĄxéÚnžēzmĻÕŊ-&Ų+˛VÕ°ė ôė•ē°`ĩmęžĢr‡īĢĨÖûÕģÛ˙RĮīĨíîé[N­ĩîŊwũÖÕĩĨékmjõ˙KzņáôūëūŊúõŪļׯ˙_ßßפĢŋlW_÷é;׎+˙˙û}×˙ëũ}~í<`Æŋ}z˙˙kVũ!ũõаOˆ-á _ß˙úZ˙û˙˙ŋCŠ Ä"‡ûU×é‘õ˙˙˙ũ x‚-íÚ˙ūūĮ˙ūŋ˙ Įũoū}ū=ũq˙]~žéHĮ_K›H›˙üÂõôM˙ŋųĩßá×/Xoü ŋŋūM;˙ī×øáŌË EcIR×īŪ´×˙ú›_˙‚*˙__×ūŋ˙úū成îh’ôÁßĨ§˙˙×ųö×ë˙û§ÔŋŌŋ3˙õt˙˙ŋÕõž?úŊõīúß^„/ūē˙s;ėÍvũ~ŊĨ˙~gÎī´¯ĩnĒūēߎ†ũ¯kvŠīK~ŋ˙Ŋ~ëWUŊ×üގŪŋŨ “īū—¯[­´­´Ŗ´ė&ęŊ+×čR§¤?i=kĨĻëÔ4Ž×¤Ķ´.ímSMnÕozUn‚fžÕŋl%ccŽĸ˜¸´ià XN; §g´'i! 4âŽ˜ĶŠcBؔč&Å1VŠ„Ø š ; Đ64Âą[i’„|m2QdŪÉ;ÚV) ’„§hmG´ģQL+Ķ F=ĒÚkĢڏbŖatĶMC„Daˆ‹CL´éĻ„[ƒDD0ĻDA„""!„B" Á††„C#DDDGŨú¤˙ī¯ĩ[ƒ†rܧ2QüŠgcYŦ‰\BŒÄGF’LŒ"L"ņŒ2’%Y ŠÁĸ0ŽÅĪ„đMÕ¨4Ô& k, õ´īßM+1ž>Ņc˛œ" Qųēē3¸{ *dk0í?×Ŗ]Rmđé/k#{Õ$ÖíÕyPŌŊ&÷˙´i˙¤ŋŲ°‰ö’­%_ĮVŽ7Ūécū8ík¯ū>´žˇõņëGƒ˙ëū—˙ūÕw×uô—ũ}E-ē˙šĐÉȌ"ã0ĶĖ4ō1é HÉz3j™.eHĐ~ž¤™æ#FhYs"ŽFáM|ŽŒĖņ>aqG é„.a¨Aœ"æ三’å¤a.0— ™â#A‚˚_ Čã#–aPz-;Bаƒ‹čĐŅpåÃdœ›ßBqŨEĸŨĒĸŨŤčņĶÂHÖ÷Ũî-‡čJ?i&̉Ũē5âSähĐŅĸč×dQũ]-'w ' + JMŤÛ#† 'ÃĨäqÃ2įH6;pŦ.ƒib“¸aSēŨ;NW§ [kûkĨ]SõĨwN×OôÚ•ŋŪ¯ÕÚé´´úˇĨ§ž¯ŪĒÚ˙Ōûß˙מŊoōuzŽ×¯ŋ¯Ōú_ˇŋáöŋ˙ßģTŋ˙öNŦ1˙žß˙_û[AZc˙˙¤×ū=ÕtÖ?˙ŨSJĶ]÷‘9zk÷õūčH“OĨę×ëˆW˙áaFĮõ˙ŧ÷ī˙˙ûú˙y˙nSŒĖ%ëœq“$ë˙ÖGw#ã¯ö˙eø_×˙˙’vˍ˙Ž:EÄŪž‚÷˙6ŋ6žĢÂ˙'/ņĖ~m]˙đŊĨ˙÷K.‹á˙úá<Íf›×¯ëųĸí˙Î ˙ũR˙_˙Ĩšj{˙ķ˙MW§ƒ˙úUu֟˙˙uÛĖ˙ôÃ~šš˙˙÷¯Rđ$ƒß÷īõ˙ß÷ũö—˙˙úîūšëūëõˇ¯˙ëB=˙]t˙Cŋéa;ÕÕ˙î˙ļ×ģKô“‡ũļĩŋūíŌM6Õ5NĢ´ÛIoÛJ ­¯MŠŠbŠ ƒba8 šqE8y „•8î0šgP]ŠŒ Ø ›i&l520ÃHœü a4بa6šŽ4„;#‹ĩ˙Qa¤ÂlhCifEĢM-+†Ä/bļTéŨãÚßŲ;R­lWCB$„!Ļ~+ ’|Ąá„ÎįÄĐ8†Ŧ™tƒ4!„!„A͆ˆˆhDE„""""!„tâ""""""""""""""#ˆiRĨŠØR˙–õet#ą¨ˇ'ČPĻIÅ+b•%a™n\}<"Įw¯}ę˙d ‡K÷2XŽÄ'ûûDÕwŨ}ĄÄuä§ëQ˙Žžĩ˙÷Րh…D Ö¤RWD$}&}hŠ2B$FIGDhĘ3ir2Ža” TvÛ6aNFŲ›.ō Œ3ÄNYŗ.Ī‘™štL"@g…#‘ƒ>d}.3†\Âaa2äG2äˆ9ƒי¤wö˙†’ŋ]ĶsDĄÂ}›?Ã˙ëÍ÷ļ¯ëTēõF[¯Ķ™ö÷ū÷ˇõī„wÂFOÛ˙ū¯ŋíë×ĶĶŽßé~ēézZKĒéwëv–ˇˇ^’ŨߘZŽ"—ļ“ZûkĢÕëk­ęCŋ_´žĒÚN­…XÛJ­ÅkØVĶWX}Žļà ĩĩcNĶŗ} Đv qjÅ6’ .jôÅ;ÚLzl0—á„ĒŖØ­Š6)‹6**)ŠAą!âŠ4͉ÂíCČßaZbĸ bĒ™'Lt…ą]Zv™1í;A„ĶPĒÚdßĩ;ŠŨ53ÃL“Ŗč҆„O+lJ  Ķ@ķšhĄ´ZXMІšd5ŠÄDDDD0„DBB!„""""-ļ"""""8ˆŽ""#zÕxa*:(Įi%Hét •U~’Ž“ö´—ĢKQ`°dt XĻ!"Ŧ a(s2đˆ˙&ˆėK,‰Ĩ ôd ÂfU˛@ĘĐ´ĶO!`Ōv. w÷˛‘cˇĀø0û‡†¨kvw –ã+>=ÜÎZ:N-2{RļŸ]ņĒūĢüzū×õ_˙ÔIūŋéz˙Ô¤ZúUH“Ee)"ÎÄDŒĨ,ĄĩČšq„Bq29‘ˆšĖDƒTL—ŽD3<¤{1GôÎg @Ęs.Œ3„\Î3C/„ ōæNFd` Âx‹™™ķf<3„œĄđƒ ŠéńøL ú r6Õ55ÔTA…L&nĐŅnŅĄÅ„ĐÕ8°Ēa0‹wŖ?EŽãM´\a;´‹ļ!čģ‡âĐõFziϚ3Ö´‘ z3šĻ°´{ ›IļEq;šâÂFĮ%  Ļ‘­ĸņĶlÚ>] č&Ã$= Ō Ĩģ•Ö“lÃIŨ&é$­zÎ=)hņЄ¸niR<÷ív6pÂ[¯n˜I>Š;OízŊi?û_÷ū˙ÖôŠ*bqéG¤ž°Š¨ô—DĮūëÕíwŊtūŪļēŪûęõÚŊ}ũnm^ŋŌ]RŠ­U$ę^Ģ6ĢUJĒ_M¯_o­˙˙Ō˙p˙˙jŋÕ˙׏õéz¨HkĨ¤ŋÕ%Ž’¨qß˙Æŋīé~˙\zéô+ũ5_˙÷ūÁ?¤’6ŗ˙ĄT–ž+ĒJ7ĄQū˙øĢz×˙üoøß˙˙ū#Bĸ…E%„:T—ŦBĻŪN2˙˙ĪŋKĮũģú^ŧŒá;˙ķkåŸP̤_ĨđˇE;hhzÁŧOũ'c“W˙üŊ2ČøKú˙˙~ũ /Â(pz¯Ĩ ¤‰đŪ˙›Áõ˙K˙ü\ë˙žØ"ĸŋŋúõúôšI*˙]zZéēaŧŅáŊ˙ŌČũ9žį˙ûēæ‹Áųô˙ūˇ§Uûë¯ĨĨĨ­/}vˇĩ}{kW­˙ßû˙uŨuOĶkûŽú˙ëZ_ĨizúĨĨZŨ?gŋõû˙]ÛVÖëúļÖëĩūęÚiÅ^ÚPí{mi×IéŌÕ\#ŋđ—Ô5†°ŠÚpûVŌ4í­+IŌĩMSb * †“iø`”\=°V)6( ÂlRØI.8Ŧ$BG ŠØã Sš 8Ļ*) cÃÅ1ĻŠM’ÅØØ”;ėPdېiˆNץmSûM1*)´ŌBĻSēiŽ9Ũ4i“„í4Õl¨L¨L'h2œĄí5†Ą„""ÁhփL&„DU–čG`ƒ+bĄ†„ Âxˆˆ‹B4#ˆˆˆņT’Ö”›ŌŌ¯IzZécbŽė>“†c˙ÎÂÆJĖ™™]lÎęÚxėĀČŖÚ &wža5OģĢö‹Ūë‹āë_‡áüė—K;ÄÕUôINU-ωVŊ&ĐŪĸˇÚũ…ûX˙õĮņ¤ŋ˙úë˙­}u×U$ŠĮŗ8†gˆÄfyæO„PėĐÎēäFUģRWŠvGDÁœo šX#ˆ†fŒé g™„u#yōĖĖ fĖØË‘á„ ā„0A„C= 0™Â „.`ƒĄ)˛8fņ—Đ3\͘ gš„B§`… Đa4ƒ;uöë#ë˙øø­Ōû˙Œ1}?˙Zū¸×°îëûīü?õˆū˙Éi“‚Š_ûŅoõöīų>_˙Ë× Ŋū—6›åč’ū92iëũt;īôoų2i¯ü˙Í˙úæŌ_öŋßáŸŌķ~×˙÷ūžŋú'I`Ž?üŪ0ŋ˙üŅz˙õŋJ˜oī˙ķ5›_˙3û3_˙ūÚëö˙‡Į˙ôžˇ?ŋú^ũ××ßžæYuūéß×û÷]÷KŌũû˙ūūû_íKĨ_í+˙zí/×K{­[Zz¸I;[Ģžīöū;]ÖüÂßl÷īēۄ› zņúŨ=/zIĒļĢhq é×^Š ÂlvÅ„ÛIal%ÚkiÚęƒM6ÂσŽAÆÆąLpĶOØa$Ķ AŠ6%tö*6*ĢkՊMĨAąL”Xø¸"8ŦTEąIĢAŠÚatÉ=mtÅwmR[]UtĶL+"AÁ„CÃCLúĶL¨SŽš —a—CM2pJ „"ÂaP`„Ŗ ƒDŅBЈ†‹+‘ !  (ˆˆâ"""""#ˆˆˆˆˆˆˆˆˆ¨ˆˆˆˆ˙Ĩķ´Ģ2Rō¸šjš§§˙¤“Å.ôéRÔU'a45Â˙įe|Š´B ‰ÅÁ.0Ãîd3”—搑/4Ē&nŦu[M *vš|J—ķŗŠxŨ‡oÃøiˇÁđ÷ŌŽŋÜí_æyZķ˛žEßãMímģ č0Ŋ˙ÜĄŪ*?ëũũ}×8ųĮ˙ŋëõūŊKUÖšN]Žfv{R ôŗLޞ1”dĐ3ä|ŒYž™™ķ0Ę|ã:ē)ȜÉ8ƒ4 “H2čŽĪ™ķ1˜¸áŧ‹ŋŨpf úAĄeŪp .fÉp‹˜M=2⯠ĻT  Á$˘AåČ&Č=h5BÂhC¤ë‹‡ßžëŖCÂA۟Ŗ;‹MOF†ÆČßôm‰CŅn˙cEģ‰ĮsÃF‡Ŗ[¤\<4‹†îÕŠ;¤Ūõžá‚uxĒ †%;Ũ ᒁ<4°Ųļs¸dŨ´Æ mޜ0AÃ˛NŌmÚˇN(jÛŽ 0’m’… nŋ_ú§{UŊŨ0´›÷ˇ­á~•ĩ§ûŊ%ĩÛīOV×ũuŊzÖû˙ūų:ŋ˙˙ôŪˇÕ˙¯˙ũ{˙Ãũî–Ũ˙˙ņ_ū˙ø˙û÷ę׋Ĩ˙â˙ø÷˙_ûîŋBŨ~Ŧ˙iwë߯UüVŋûZiÕkkŽŊŊ°ŠÕ¯˙Đ÷ũ zė5ōw÷˙Į˙˛cÛ˙ØöÖ>Ōũɋiđ‹Ž‹é:üžšÂ Ũ+ųzÂ'Z“‚­z o˙7 ¸å돛U˙˙é9u„ŋŌũŌø˙ô˛ë6ŋÄ}, ŋKÂYuZŊmw3ŋīũlâë_K.ŋ×˙ū–õū5ŌČø˙Žßë÷ū˙˙ÆzåÖ˙¯ųŸ˙—[_æ~ēõûū_ũ/3÷ēū’u˙ūˇZëë˙ĨŽ§ÆŸ^ßû˙˙ú÷ëëĶ˙VÔĶ/ώ~–ļ‡éÜļžŪëē~_Ō^+VÂiÚWči¯n•ĨhoĨø¤ÂlT7,&ŠÃ Į’°a4Øá„l0’ 8âPôč&ƒŠ668´Û Ķnĸ‚a8¨ãØ ƒkW°¨iĒŪŲ'žÉ=mdnĸ-ŠBMVú´Õ˛OĻĶcTá˜6wW†šdoڞЈ`„DD4"Âi›Ę{ ĻSÄú ¯E>q´ĘĄĘÃēhDqa„0˜@ öqÂ3A„"!„-°ƒA•0Š„˙m-sx;ū–]*˙˙˙˙¯˙aŋũ/_˙ŗÍ%.ŋø>ŋZÚ k‡Ī˙ũ˙×˙ūš§‚)˙‚)õ{õ˙¯˙˙îmޝũ?ŋũĒí˙ë˙ˇū˙ūÚÚŨūßŪŪ¯[ūG˙1ûꞟëļģúÛIuûĻ××C˙úõū]{WTēë×uãm=-nŽëmô÷Æm+O6ÂjÚVšqVĒÚIéļˇël0ŦM§zÚIÃVÕÚKaĮÆa6Ōģ^0ƒ ąŌ A͏˜|Ta;WŠ8¤ÂqH6) Šb˜ĶŠbs¸¨ ›bän™'uėPN+dnĩd‡åŽšv­\§ …L¨Mo0öNĶNUØ]m4ˋ†šŸ"Á4íPf´iĻQЈhYVvBsœCDG !Â`„DŖ`„D0„!qļ""")QĒXZZ_ĢiBà 0Ä)ÚŲG˙ä‘ŧŽ25Įz"Ŋq[–¤EĮ*DKt3ĩ4Aƒ&wdvHÂÎĆŠ˙Ķ×ĩ}߇ôXō0ƒŪŒė8páĢž]8}z}äŖ}­ë¯ũøû_Ž×˙˙Ē˙˙ú˙×˙ũ˙ų/åâ?Éb$<Ÿ:˛‹#<ĸ(D4q%<ˆų:#ō%ŪRYe ˜`Ä3ă3 š˜Dxų—<ÜPg†b6Ėd@ÁÉqœđx  ķ g…#ŒđÍc0FĖÃ>@„Â.Á0A‚B Ž*hŠävą—y˜Â.(L!Đ8†‹w$īM8‹JĐŧAÅĄÚz~‹éĸá â~›ÜCŧ"ŨÅÅĻûĸā?™ÛĻ‹üĐŅqŦ”POM‡ģhˇoIļE‡mŅĸm­Øi¤oFļ–‹ŧčÖÃA¤kaÃLŽh5M‡d J‡†“‡a$Ød‡čØĐAŧ0I7O`’mo~'dŨŪäíĨ†MûĢ`Ái=4ˇÛ¤ĩtŨģŌOí{ [’};Ģ}[M+Ķëk}.ŧ4˙uzũUmÕîˇÅ:_­ˇUëúŊ}õŪûļūÖôīŌīUīOŌV¯ũ/ūÖ ˙úgvũ˙úûõÕ˙O¯õú^5˙ũ¯íukëõúī˙ßĮ]?[ÆF:_Čkôŋ­t˙¤îĢī˙n—ö˙ôüuûÂ˙˙˙ëuŪģØ˙Ķíž<CņŽļ=dAũ?_īū—ˇQ×˙בīīéū>ûũ})1ĘĄÂÂf.EĄūĖ÷Đ˙˙õ¯ŋŊeë˙î_ŋü!ëëđ‰ĮūOHoũ/cĄŌų`|$ņRi?˙˙ėWQ˙˙&;ĮųÅõ˙Ŋidū°ũ~˙éé{ë˙ëß˙_ßôūŋ~Ėũ´ē˙öķ<ũz§4^‚*&ŸųŦŅzßé?ëûēí}wŋĮõëéõųŸÛŋ˙Ŋ¯Đ"ĸļŋŽú˙ûëūí×g˙´›]ļĪ˙ͯ÷Tq}KŪëÕëŌô7ŪŋũÖĶŌĩēũzÕ§J˙zũ]>ļ› %i&ÚZÚÖ­ĒÚēI‘ 0­­0­ŦT5AŦES &.í;mm˜L&íĨà a7ĢT6J!ãlRG8äÜN:´‚ 6)ÃPƒB8­ŠL1)ĶLRČĮņØPļbhGėVÄ šlSĒÅ21úVƒ*aXv ēišŪÅ<ˆ=­…(pPœ4—ĮM;2áN?Ļg°™‡Lå¨5†ļS”p˜B-PÂÄG`„D0B" ˆˆˆˆˆˆˆ0B""" ÂDDDA„"1ņƍGĨIōČĨuô˙ú]%ŽÁ…Úą PaXaDG˙,ĐNYÔd}*Œí í9‘ Úļvĸ ĘAŸĘÛYY3ŅRv8NĶM>ĶO ĻņvõEŽôĶ÷|>w‡é.‹~ÃaüŠ'&FĶ÷ëi,ė9¯ũ¤Ũ,=IO°—~ļ°ŠÚꖸíÖ8øũ}zĮ~ĩT—ūēĒū—VūˇučŒé*ųNdAG™œ# ČŲøSC3fҏöKLŅ™œyį#ō0ĖĖžTÃ0Â!1dãTœn4jfyVĖG#Œ ¸@ō惋AÜXA Á @ΐ4Ķ4!˜$Đ2äƒA‚ Ž2į›gĨË6A4>!­ÚxM4xAŠiŖ@éÅŖC‘N=ŲÚ-Ú.Ü^p؈´{tčĐØˇj°GvÚ46-]Ú5Ũ‘ž ÃhÖé zŖZFˆEƏ#;IĒ ļ“l*mÚt›IŗĖ;%l*m“rܔÃM°a:M˛WiŪ)Ũ'“ˇžŨ;´Ø5é6Ši1ĨúÕu¯kģ^Õ͝ģ^•ûM^í]õWJĩú_Ŋ¯UōĮ¯õĨĨßŊŋÖę˙˙Ú÷˙[÷ēû¯˙¸ũ?ëzē]ék¯_×Ē˙˙˙Ĩz­ūũ/˙×ß׃˙í}*auc×ZK˙__õ_ūûūU¯~Õk˙ūՊ˙øō.ą^]/˙j?Đûë˙˙ƒ#ŋõؔīúĮū*×ũj’ņJ’oĄ¤ēīÉÍzõÉÁC˙˙˙íæ×˙Å}é/ËÕŊ~ōÅë˙ˇ¯ÖcĒô>˙â?Ũ~ŋéo˙ūŋŋø"ŗūmWš*]%ķĐItŋų:˙÷4O_ĩ˙ęŋûĩūfŋû˙īũ/ĒĢz^~ŧÚĶm˙_˙Ũ×Ūũú˙u˙í˙×ŨWŌõWčÂôĩø×¯ŽŸk˙ũ˙˙­=/˙Ūŋļ}~Ÿzö¸WÕ´Pú˙KKG—ŋĨģUŨ[KUׯũôõÕß÷KũÖ„ôâ“M´”%ĨZšuĨavŧnēķ 4Û@ÂÄ6MĐAϚ ÛH Á`›\˜¤ÛIŸH0šqÁ„&ŠBh[I…bŠ€nÅlTn Å1[CLU b21ūÅ1JœnÅ'Ķ[§Zĩኝ%#{Mj˜TĶLBjŠ‚­ILŖĄ &„DZ'2‘ˆa†ˆˆˆa DDDDDDDDB"#„DDDDDF?˙ūd—Ãv*e¸žJĒ ōA’aƒĩbH(‚[КĸßB8A§ŋ#rOÕ;čŧŽ bzh6k¤Å_Ž–ŋ%8~}é*wūĘé>ĒЇ˙}ĮK_]w˙Ō¤ē˙Ō˙ǝŋįkizįĖÎ=ŒŲ¸ôHfqėœŌĸˆ‚gÕÕųfŅVČm2•PĖ"ĖÆg‘1™oÕ'i„ĶM0ša4éPgŲøômĻeG<ņ˘@ʂ#æÁ`ƒÂW ôí8d¯N&Ų°ÂÚ ˛7|kJ*+Ē­.ĸ´ÕR˙õĢ×ôôûŋîļĢNímô›}ĩvܛÖÚvđļŸĨ×ū–ļ—īö–Ŗ-é%ĨK×Zß˙~é/ö˙û˙ūū˙ˇIuĒZ­ké;KĨĨëŌęÚ_ûūžŋŪŌø=ęŊ? Ō]_õ×ūŠ,z×ĨI†ž?CŌę°Įũdo˙¤ũũw⚠íÖëßũ˙œšŅ.+ĨI%ã[uZĨ­mū‡˙ĩÄĄôÚļĮû°ū+¯zũxZ˙_ô•˛Më֒­{ÉŲCĻ˙ų8+ã›NÆŽØDâëé5Éú˙ĩúŋ_I$–ēôÚkúõõM˙ˆĸŖ˙ĐúúXEcA{ú_Cųĩąũ×ô—úĸũ%æØŌ¯čĮŠOOûØ?¯îfžŠr:°ũúŌJČ˙÷ũ~]ëũeÖŋë…u¯Ō0•/ĨđMĪ?ŋ ûûëîõŪęĩk~žß˙ū#tžĩ¤××ĒĨÚWKÖēKŌ­ĶúĪŨZõŲ˙˙õĶ˙Z˙ü˙úīõm-$¸­(­xœzT—XFzëŽģŖûöé?Ķíö×^¸î´;ú¸íĩ×Ķũ;a&×Ú­ĻŌZ×JÖ*)xĻÂ,qQN–AAĻØ-Ģ#ē[ $ÅESĮ +‡ÚWąIØI;ĩÚM?ǚö˜„ĶLTSõUQULVƒA„Ø…X1TÅ4ī˛7L§ĶL Bĸ¤oMŠBâpš„A„"""B Á˜A„!Ą &šiĻ™q`&wAĻT Âa0ļ˜MPƒЃ#C4 Ē SLÚŨķĸ""""""""""""8ˆˆˆŽ"""#B"#˙ū˛Ę‹ÔėZ­ūŸZũzŨéuĐqØĢMĢYWj"#˙ÎՌ™Œ•UPƒ;5"dGc#°™Ųšķ2Z(wŧ&šTîîPdxÁíŠ)÷÷K"ĢÚo õ}Ķ"]4Lmí4vO;˙éôŊDn›Åo˙ĩôŋĨ×ōgø¯˙˙õ_ÕūĻlÚ42AŠÆn$2C(}“Å }%REt¤aÄĢÂ!\4 †œA„ asa”&]‘Œķ/ĸ"°f á˜g™ ÉIfôDāt§|‹ˇo˙˙ĄëëūXŋÃyĩ›˙åŠkÁ˙/ôŋņüŪ˙æŌō\ŋūēūŸūmŪŽ˙÷˙}ŨÕĨkë˙˙úúũ˙}˙ŸÛTsī˙Íé‡ī˙ķDp˙÷×R?ũ˙ũû§ũé×˙WĶŪŋũ?ûŌ˙öÖũ~ŋ˙õ×Ė˙û˙˙öļéiÚļļļŸvˇĨî—Ģuö—¯˙ũZ_˙ÚŊ´ŋW˙ũ×AÚąl[ 'I‹Âm×öļĒŊŦqĒwļ–ŸęÚ@ƒˆĐiÛéļĢwZVļˇÚVļ)’{&íŠb™!úlPAÆØ ƒL ЧĐhEąá0ƒ ąą Ųé4M’|0‡ ˜AÅAąØ@ĶDE„`„Úڒ†Ôw˙œvŋ×§øã˙īmWúß߆ۯ¯˙ƒIs˙¨í¯˙˙IŠ@đƒírž#™f/#?ĸŦyÉk) ŖĘķ1#æn!™;*Č yvH“ü‚˛(‹ö—XŊëNĐiÄ—?ÖAqÉc#Lá0ƒA…/œ"ä…ĀĶM Âka‘ËÉ8F <0…ÃTØaIC˙F†Ņp׈im,Šū-î!Ļ‹zVĮŖ[bŅví\4\>J4Åú,wÚ4QcĩŠVĶOÚû˛oIdĄčŽÚXĐi ÔœPM†J(ģh+ĻŲ(`Ëõ†Mõ†NéZWļ ZNRPāČæŠ6>éšô‘í˙ŋÛúVĶ­7é7Õ6ˇMúÚ[Mũúß×N“}jŨW¤ûīMĶŌH?ëũ5ëõĨ ģ˙ūõÖ˙W­zuUŋ÷ūš4:žŊ{áĄŊ}˙Å~×KŌõēëë˙KÆŋ˙_īŋWųî éPz¯íÁ~Ģū$ZÚ˙ŋ_ûÚ}‘Đ_ßŋũ˙ūXĒÍ/ûׇø˙íĨĮ\oąí}||GøĮ˙˙ũwíĄˇKû1˙é7˙ŋPŒö'|˜á.‰ŋūOLŊzËå˙×˙˙o'Ž‚_˙ßI/˙É .ŋĄôG˙ūŋß˙čß˙ũV<"­Õ]%ũ~ŋ>Ÿ?}i-š/^˙õ˙˙ū¯˙ũ~ÃŊƒĐ28ˇ˙õŦĻēZ?ģKŊũu™¯ũÍúįüĪÕûëī­=ķ?z–ˇĻûû×˙čh?ûKõÛW¯í{?îûũĨöžŪũ×ß ÉZb“0O.­­Ū›iZĢŋļŋŽŋļģiiÚV­Ē§Oõßõ÷ļ•Žƒ4†žÆƒb‚`žj CHœ:ūšØIœFà 6’a4la†b‚ ´­&4ėč7J.)† ƒ\‡ ĶE<ʄ,¸†NמĢĢLjlRČĮLS´ÚØKaĻ)̜qLU& ¸a‘ėS EÄ0B.#<Ė: 2ˆA„ ÂVa2”&ƒD4 íȃŨĻ"RŦ(hDDDDDDDDDDDDIЈˆüi%Ii%¤ŖQ˙üėAAK(ŅŖeŠo2ZŒ•bŽH†YؑšwšviîŪīę‹yØÃ ¯%>ųß-˙‚*H>õķ ¯LüvsũW¤ŸOũXI*°ēŌÜ0ŋî!$ŧTtŧŌŌ_Ō_ÔčģŌŽģŌú‚ †ōâdaæftd)õéT„ōOŌOáŧAéĄxA„ņ eØA™ŗä]”A fŲÃ8ކs†Ĩ8É1—e33fgĖš Á˜p‹™˛Ô§#Ä]„ Ģ3fnÎŦв8ꋆ‹€é„ÁęEŊS‹ ĸ$h4Õ4!σ¸4CA­ŪŒáé§i§ž¨8†¨4Ây‚„âđ’tŸa ģĻŅvŅ­‡EÛNDv‹Š5ŋm8ũ<28h¸{î“lO ØŅމŨéŖe‘Ãƞ-´]š(Á„ˇW¡IUŲ!õΈ4é6ļ'dpŌ ūiĐN ˛éIØX0L›Õē§mŦcWjJU×ęÖôģ×ÖŽĩov¯ē]Úú§ßĩēß˙ëKĻŽHw]?ŨWĒuë÷ÖŊôŋëīôĩūĩfÕ/O˙ë˙~ôëēÕ˙˙éĨŨn…Sƒ˙˙˙ÄE˙ī˙˙Įëö˙û˙ÖŋŽŊ÷ąõĮW×īVá{LŽ/ú˙˙˙qūú˙ûū˙EŋĢũGũøõŠŋūŋ]õŨ/âPãū‡˙ü˜ū´žXž^¯jMÖŌ—äô˙˙ī¯öËĶæ>ŋôģīĶĨāŠ„T=i˙ü%‘˙|Į­ŋûío˙ģīūg~ēīõÁôķEéžš,Íõ]éf‰/sjŋ˙ũ>˙ķo˙ŗ˙„ųžũ~é}>N=°E=ī×_ø­jũU˙˙×öÜĪ˙ē¯ß˙jé7I°õŊ ĩĩOÂŨ.ÚļšôaÁĶú[éŊ~Ž—ûÚéé.ūö—wŠaĨiD; ›ÚZm­īV–—ë¤6ŊđÂM÷kļǘ#ŽÖęÖČ0öÚ_ŽÖŠĻÚI§ŨŒ1\"9lŒxi6**†68 †\ĸ;Ļ*4â“biÅĻÆ…„á‚ ˜)ū4ØÂká0ƒpÂiĻė)ßÂa5^Ä6FęÄ4ÖûčēļĖ8M2ĮÎ=ŽÚzĨVŧxsŗ‡Ŋm7¤ĄŨŊëxa/ŲĘŪג˙ļūæ¯ėUī||oãŋíW˙˙×ÅuūŋŽŋõëȠ˙ös>3âČÁœg‘ŅœÔĸésš­w_Č**Qē˜L âí28Âi‚g Ã%Į¤HfŒē„ō~NĪä¨Ȝ™†0„1 HášY†PGˆÃ3"?šˆ fÁ3 Íŗ.0Až2äƒōÜ\Ņ •­‹Bđ‹v…§¨M ĐqaM 4âz Â"d Ķ‹CôũSAޚqhC†a’zģT“ē.īA°č¸q"ŨŖ>‘Ąˇ4}ō+ŅwĒ‘ģFˇņ*(¸lŠî{īO†%šĐa"âČá¤÷ģēûđ`–Ų7¤Ü* ͆ &Ų!ęØ`[iēl `ŠŌš;~õ¤ÛMī¸`œ;Z˛ĮnŌģ]?ļŋ˙×ëûä펯¯_ĶÕĩ­ũjô 7ßoļŊ÷}ëJ+Ž÷_^-n—]K[˙Ãi]ŋßWúŋ˙÷ÚßĨíÃũ~]?_ûÄ-ūû˙A§_öĩzŋ˙_ÚõÛá{üy˙ĮŨ].˙ôH2;Öŋ_|Xöī¯uū˙˙Đ÷ä&~˙˙ÖŋØž—ūVÅ_ŋūū†ŨGõ˙˙Ū˙ūŪŋ˙˙Ūē¯ëĒל{Žiģũūŋūm-I‰uo˙Á˙˙zŠI˙˙Ž˙ßĨ‘˙ĜđGē^m{ūŋë„U˙ZĖ ú_ũŽš÷˙ũžē˙œy#˙Ĩ—XũW˙û™ī^ũ_aŗoUĖÚU_ßîŊ?ôq+ú¯ÚYŸoí×÷ī˙˙ūž›˙õŊ˙˙Ą õ˙^ļÄ7TĶ^ë˙ížũ/īK6ž¯nžģÖŌÛũë[ĢÂŋúŖÜ~Ú{H Ū‚ 5AļM´0œV•ņēKĄØTíVô“ĩM[HŒJ•ĒĒwŨ&šĶAĒv“žņĻbņ Yvû{qÁwa‚ÅpÕ6 šEؤ!ą ãL&ƄB  6ÂVŦW„ō ĸdnŖn‰ÂDnTXV8]1SēiŠēiÜ4É=…ĩÛ ÎánÅD)PƒR ö¨2âė7 !\.4؈ˆ´  aaЋXB ÂhDCB!…-ÂÄDB#xˆũ§ˆˆˆˆˆˆŽ4:W ’ BTc˙zMé$ŲjŠuĨŌuãŋ¯×maq°”pN˜­°ĩ†Â ƒbdQЕI6ƒQĄ˙ä( ™ŧ˃9š’2<­Ž‰Āk ;TøA0Ęr> Ũ4Ū“‹Nūwŧ…§2žŅĻũ}Ŋ?Ԙšõ˙øøõũ˙˙˙W3#ųHČúęĢëM{'„É3Ä\ôŠVkD˛"O#dšŒé3q2ƒ'Î"†Ē¤ģ#E•do3GFPe™›3daŸ#3#˙¸m„Øi„âFÄpS1LAž ƒ ņČ!ρávA„ÁaBJÁ—#3gšø†A„D#´âĶBøĶl” á˛(âT9ąē…‹OIœ\Ņģ|XEÃbÂ' îæŠˇ˙hĐâæ‡ÚĸŨĸŨĖ÷ŨÚ4zīNĶēÛ'n!DŨ†šFļ!ōâČŖ´Ÿļ NŨ6Éރl•ēvKá„<'I°ÉE[Ã#<4›Ũ'pá“zWOÕē~Ģ_v“éö•ëWa:é;ͭͤšī̇vá„û´˙ĩO_īŋ¯oëę÷ūš:—{Ō_÷^ũ˙ģëĨuß×ī­÷ũvžŪõĶ[w˙¯Ĩęūąû^öŋ^Ŋ%V_ėŒu˙õõŋõíë_Žą\Õú˙˙ûĩõô.ē¯˙ßC˙ņÖžŋũ˙Õö?ã{ë˙ŋ˙ėnąáŠ˙˙ã|Û˙ß]v?ô6*úŌŊĨī˙˙¯ßë˙˙Éé^ũŋũ}ų= ˆ~ų=wÛ˙ū˙đ‰Æ*^”]˙ũM¯ĨđŠžmyĩųĩŋéô–Ģo^Ŧ{__˙­oŦē\ŋ˙˙˙õéƒŨīë˙ũd¯m.ÁÕ=ĖՇ6vŌt¯˙Ū—OÍPé?Ũ_˙sEҚú÷ũ˙ũ˙3Zī˙iŋt­-5ĩ˙××iĩĶ_˙ë]mvÕûīëuũwĨõû÷^ÁīmvŌôė0“jšiϚm¤šéņ^ŋ˙ēn—öëwŨ/kĒiũÚũĄÚũ­ĄßjĢipÅ1\DEąI Č0\&Įļ’b)4؆ÆÅ ͆ ąNL âŖN6Պ ēI„ØÂ  ŠcŠ‹AąQđaI8ģ#æ×÷"v('ēĻÉiÕXĢiŠŽxM&ĶŽûb•9ø‹i’|ãĻIûRĄ×#ū˙ņ_ëx?˙UúœÍ$ŋŊ˙M¯ßļŊõŨÛūÕũõuõūôŪŋû×Gpĩ×ī׎˙m§˙é˙ļŋކÚ˙Ļ"úZMĢa4Õĩģūß˙ĩĶíQ¸ī_tŊwüú™;JĐĨŨ=+ÛJŌl$ÅXJÂÚä08­†ąÅD;JŌl&›kv”v–‡í§VmĶĻ°ŌŽŌM:L+kföÁXá„Øė ØĢIŠ‘ŊŠí2N˜ĻšxØĻ-8 ŦSpö4Âq(vÉ>" “„ЧE&žœ6*$¨)’L›é ¨ĻšØM\CEĻh4­3ĀM2n­ Ë|TÖ˜iÚ +ŒĐŸR  ÔąÖ͆q ÃÂhDDDeĒ‚ (ˆˆˆˆˆaˆi”B,ĢBЈˆ‹ˆˆˆâ""Hb#ˆÄDDFņ^tčē}éúúũ×˙a{IqAÆ8i6¸0X0Cüŗ­ÆNĨ,О%†d­žgcr ‘DV*j™Õ•Am3´‚•ÉŊ`ôöũéŪ§xND ņũ=ˇ˙¸wo Đz[Ađ}ß§vé7ų×úwsąž×ø˙i|pĶۊõ˙×ë˙Ē˙ž—˙¯Uü%KYP‰įÕy+h0žF?PŠŲNe$C‰Ņ‰6tˆyA’W64ĖG‰z6fķf}„ĄđA„0a—؜"9‘¸øS2ŨmĢi7ĒIÛī­ĩëo¯ž?i_[é?úŪ‚nžX˙ŽŠõˇz­nŪũŽžŌ__ú_ëč7ŋoī˙¯ũkëÖ÷úÚ˙øׯūģöÖŋä?ņ_ēEo÷Ũi¯ī¯××ĩ˙˙Áĩ˙Úę×Ō˛/˙ũ÷ö˙˙ã×˙ß˙ŋũ ļ?ãũ­„īīŨ~ŋûŋ˙ŋüO÷˙˙õÉĪh¸õ×ãB‰Ŋŋ˙˙מƒ˙˙ūM!n˙ë˙˙¯÷aÚ˙ËWũƒoõé>ŋūV˙ũyūúīŌ˙˙˙ĖüãK#˙ūúJ]ÁūŊßëÔ?˙_ũĖũŋžŋ˙ë˙ũ˙˙3˙?æŪû¯ŸzũëkŨž˙z˙īûôŊ˙įF˙æßú˙ŨŊ{kßnˇũÚmĨúގũ{ĶÖ÷^ôôĩnžīĶûOuŋOt­[K­×zOSRLÂlC´“NųÚ­´‚qI§a §iŨ§Ēiéļ—v’h8¨k 5m[¨aXab­$í+AÚąVä0PiÅv;áUiĒČ<ÅąI„/cP›HTŠô"â˜Ļ)ŠxĶcC魓|-‰Į´Å]…ĶN×´Ķl“ڍÚBęDÔΚŠ´íS'Ũ;L”\CXBÎ9ŧÖĶA„Ô0BB!‚°Â &¤^-ĐxLá„" A„!„"A„AĄaˆ`„Cˆˆˆˆ†ÄGÄDDDDDDhhÔzT%ۄ’ô’\,*Ã#„jŦPŒ5f¨˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā@)WWQpqq(€% €% leptonica-1.86.0/prog/lucasta.150.jpg000066400000000000000000003124331506303110300171730ustar00rootroot00000000000000˙Ø˙āJFIF––˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā Ģ˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ú(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ‚ęám-žfGpƒ;c\ąú t2ųФ›7v¸ÁZ–Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*´A¸¯áÁ†EHŦŦ2¤ėj7š‚6*ķF¤vfž’$‰ŊYOņ)ČĒöúĖŌCow˛Į÷Ō9úŌŦŗ’I¨âš‚eŨ ŅČšÆQôâ›=åĩļ>Ņq9éæ8\ūtØoėî$7pJĮ@ĮôĢUOH‘4ˆķĩK ļ:āw¤šâ u <ŅÄ Ā.Árj^ÛJá#š…ØôUiŌ\à Y‘ č€Í0ßZ.Ũ×P ßw2jFž%ŒHŌ CŅ‹ ÆŖŠöÖi q\E#’Ēāœ})ŌŨA ĒK4qŗđĄÜßJžĸžx­Ą2Í"GõgløĶ™Õģ0 I'€*¨Y ]ĀKœ.$ŸAV¨Ēíwl’ųOqÉĮČ\ĪN)Ææ'–fŒ>qˇxÎ}1EÅĖ‘n&ŽĮW‘‚øš!š+ˆVXdY#q•u9{ĩ %$5Ü2įN†ęŪve†h¤e°GŒúâšu!ÖîÜsŽe_ņŠ'žhZYåHŖQ’îĀøš-î!ē…f‚T–&Wƒ)úM{ËhÜŖÜDŦ:†p Ū[M'—ÄNøÎÕpOåV(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠņīéú÷Å]6Õ´íâÚŋԚZF—<" “Ķ5ŊđŌÕÚã\ÕmYbҝnGØŦÃîō‚Œ1#øI?ÃÚĒøģJąņÄŨGkXœC__¸^]åX÷ΧņŦŋf›AđF‹˛MVf˜`ŽŨ~gێ„ôüiúÔ:w‡|[āë=.Î+{›‹‰"o)Bî€!Üy*~ĩ[ÅwĶkŪ>´đŸœĐi6ļßoÔŲIbįåBGo_\Đëáš|sĄGŖęVC÷žŌÚPĢ$€åūfüĒĪŤļ—ÃvöbŠæūūå--ËFÔ1Ëôā΃BļÕü]¤.‡`šZø}ĮÛ]”G+åFÔÚ9 ŽrkĶnŽĄ˛ĩ–æâEŽ”ģģZķR—Ä­īU{hô‰%ˇ€0o%Y‚ØčĖ9#ļqÚēo‰wļú5)įļŽâC•:ũãǚ÷渊ü.ōi~Ō|;¤ÍŖe<2ŨęolaØĒ>|ŗX’zs[? ­ęčZÛ §ŋŧ]Ė‘o‘!L4…p įqT5M;Bņ<=ĄYéQÅkd’^ŨÆö†"PpŠCō–$úWeã)4ũĀz„˛YÛŊŊ­šō hÁ@ØÂ>¤Vo†ô‹ü?Šū[(žÛk`f¸•P ã{.îŊk7Áú ~$đ´ž"ņ, s¨ęŠĶ!eɡ‹ø?îāsĮ­u^ ‡S‡ÂVW¸ž{įC$­?ß]Чč0+Īū%ëĢŽ]iú5äFŅ5[x.Ë ¨v¯sęqÚŊnáaû$‹:ЃaŪdĮ9ü+Ė~h:=åļĨâģ>Ö4šŋyŦ‹ HpĨ{„׊#ŦˆŽŒXdr§×•|UŌ˙´ĸšžÆŪ5ģŌ­×P’dAæ3Â)=qĩ\ūUŗ éēˆüA‰ĸĶí÷ĨœN˛*™dųÉ>Ŧ9÷ǚŋ|_Ŧ暊‰t­2áŦŦ-œe ¯ßŽ„öéW||%›ÅvúlKöK=A㴌 mƒrŽĀoĪį\­Ī„täņ?‡<6ÖpÍy3žĢĒÎW%đ~îēX‘jí<áKŪk×QÚ s}zˊD: î?sū ŅtÍwÅū%ךÂŲŦŖšViå.Áåũ÷KwĢV/Œ~!ęâųCčÚˆ ˇ#+$äe‡|tŪļ4M};ÆZÔđŧąif8– PqüŌ2¯LôüÍq2šŌ“â[^MĻ ˜4‹#%ÂEo¸Íq/ËšĀī]—…üiŖë÷zę-ŧw7vŅE%ŧ „…ĀËãžį•vtQE‡â}^÷BŅĨÔlôèy ŧą‰v0@2HāįéYZ‹5={K›QŗŅ­ÄjÖÍöĄûō@$—Œr>Ŗ‹ã=S_ąkģJ*6ā÷€yl6ä7øÕ=Įēļģ6”-tü쯓ÎĩgėëmlŒué^…EQEQEQEQEQERÔ§ģļ˛yl­>×8ÆØ|Ā›šį“\…Ĩx§Nņŋ­\hv{ŠČžSũ´b(ÕpĒ~\ūU­āĪ _ø?ב4ą_jwW2]ÉķŒģcåĮ\TĐüAgã][[Õ-ė]uˆ­ Ë1ˇ Aœžz֟‰4{Šĩm+\Ķ Ž{Ũ<ȞL’l€Ãv#ūu™áģ›Ÿŋ‰õ´Œ^$>E˛6õļOâ9ĀË_N(Ô4FËÅŗkúU¤ufļŗE$žYRŦJ°89ājgƒü7w¤j:ŪĨŠ´R^ę7 )xūčP€`wÂ¨jš7ŠĩOi:ĖZjÚi†_*ŨŽÛ.Ė0˜Šúg…ĩÛ/júŖŨ[˙gj3E32ČŪhŠŅ5ûOjēæ­idF Š4%Œ ápTg'Ō¤ņøˆŲÚZEcũouĖĸ[†WŸg;0€3õé]öžÚĮ‡îtûÅXšęŨĸ!ܲāāāgJæ­4ī>‹káۛkkkXbX'žŠ}ÆH”c˜Č$ũ3Z>)ˇņEŧØü8tøRHŠ<÷28t=>P;šį5Ÿëˇvš u†“l4ģ¨ŽŽë–&RŖĄ>^y$ķ]Š-ŧGŠøV]>Â(¯o!hĻ‘Ž,9%~\ˇôŦ ¯ øĻãÃ:†-WM°ŌâHáģ•gg’XÆ7ųįķ¯EŠ$†$Š5 ˆĄTĀt¨/äģŽĘWą‚9î@ũÜrIąXûœ~UČh:_ŠNĨĢ6ŊeĻĩž¤~w†á™ĸ@›BW‘ųu5á˙†$đ—„āŌį*ĶŦŽîÁŗœąĮ>ˁTāŌõí u=?Fŗ´0^ÜÉsܒãÉ2rۓbqŽĩ§ xwū/ 5†˜‹ut7JĪ3ėķæ<–cƒŒŸ­a鉠ņŨīˆõ]=ÅÜQÛ"GtÄÛD§'O›'žÕÔk­3ŖÍ"˛™.fdœppįôŦĪhWūđĖZMôVáā$ų°Ę_Îf$ŗƒ“UãŌõÍ WÖ%Ņí,Žmõ9…Č3Lc0É´+d;‡ņī[u…ŪĄēFEî åϐČû˛ąÉį°ö¸Í/Þ,˛ü÷Zn™uyĢ\ ‹ĩã@>â‘ŗ¸Ģvņ–›ĸiëkŠZ&Ĩ5û]j˛8Ü$V?ur;o­zQE`xšß]Ŋ°û&%¤&\ŦŌÜ3ĢūÎäŒķÚš˙xkÄŪąÔl4ų´ī˛Hí%ŠHō7Ų‰<ŽœŽĻŦøoÃZ·õ웁qhÖĄdš„;–cæ‘r?ˆöĢđjxw[×u(uÔ.<ČPˆōGļX“ĮĩuÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYÚžąaĸYũĢPœE`‹Á,ėz*É'ĐV Ÿü1 %ô‹)Vcˇ}롨+Œ‚=:ՋoøníYĄÔԁmöŽQ†cÎ229䁎ĩ{Jņ6•ŦÛÜĪguōÛN%FŖã?2°qQéū,Ņ56™mo”ų1™YJ)Aü@°¯¸âĸ_hRŲ]\Å[uÜÆ@ːxdr¤ņ‘Åpž֞īP˛ņ˙‹UŖžâ—N’F`f,J„ ÜņæąŠā-^˙BÖĻŽãM™­$ÚCáĀôŽËGg:-‹HĖÎmã,Ėy'hÉ4íKT˛Ō,žķP¸K{dÆéĸũk1|má–ۍjĪæ‹Î|e?Ŋô÷Žjë_6ß4š^'Bž°šá‘Ũ|T…tükkÄ7ĸėčΧøĻ×MIn•Į*âņ3÷įœûVÍΡĻZ^%•Åė1Ü>17<ôĪĻ}ëđūˇ&™âŋØëzé{kyá[VģtLoMÄ cÔĘģđCA„Wņ/\[O ßļ›ŽKgĒŲ¨“ˡe%˛@Ã=>†ēGņ>§ĒÛßęļĐÜĮË"K ķøÔķx‹H‚æ yuu–p­—0n‡ņíQKâŋĀĶŦē͊4˛P͍1ļqƒéV,uũ'Sģ–ÖĮQˆfHâ3 ÷Š—ū"Ō4ģøl¯õ-î'ŖŽFÁaūAώ‰teŗ‚ėęVßgœ‘‚@CcŽ>ũ*kwJ´1 FÖ/9wĮžP7/¨ö÷¨$ņ^ÔÖŌkK<ë#3ÉõjīYĶŦ-Ō{›Ø"ŠA”fqķQëMŧÖ´Ë (ī.¯ ŠŪ\yr3Œ>yõŦ}[ÆÚV™ĒhöFöĐŽĄšĖ0c Haõ8ē9§ŠÚši8ŖRÎîp¤šķ-ÅŗęēŌjŌxžÂ3í×ōYK"ŒÆØļ{’3œķÚŊûwJû+Ü˙hZ˜O)œJũ߯ĩGqâ=Ō iî5;Xĸēm°;JúM˙„ŖAû?Ÿũącåoō÷ųëŪkYX:†R ‘Gz͓^ŌĸÔFŸ%ũēŨ’Ę.3“Đ}OĨr6ŦŪ7ņ•ũˇp–ŠĻĨĖ$*ffnŸ/O—žx­o‡šö¯āM*˙Q˜Īu4ežB-ķtö­›ũcNŌŪŋŋļĩiŽØ„Ō„Ū}zõņаŽ­d"å—ķ×Ŋ3žĩ-ūŗĻéq$ˇ×°[¤‡dp7}=j)uũ" ĸŠ]RÍdķ#V™Auūđį‘ÁĢ–ˇv÷ÖëqkPzõŠŽ|OŖYŊē˨BĻáCĮÎAS҉õ4Éü_áëkŠígÖ,ãžßlo(3ëV ņ‘s~ļPę6Ō]2īX’@IÎG¯Ķâ- jŸŲ§Qƒí{ļų{ŋ‹ŽÜôÎ;uLJÆū´G[ŗ+ųlĻLoCé[ↂ=§QEQEQEWœ|Oŋ˛˛ŊđãŪyŠäŪũŠ$ Ė„Ļ2¤('$8Ågør÷Ã÷‰âRÂC}ŠÜ;Î 6Œ˛D ėPĒÃ$2EU‹ÃōˇÂH#gՑRŪd’$T2bŖ‚Ā›ŠÉ4mfūŲ[Xę &§eŲ§ž0Â&>„ôĮ_ZnŠ ˙ÂKáŠF¤ŪÃĒG¤-ŖË8h€ÚTųJœž•ĩfąKqŽ–úÔĶZé¯m"ËnP&@ œútÅdZÁ¨ÃāO;i—ĒÚfĸ}Ų›ĖUžm¸ÉŽ• ĐŊ¸Ņ> Û&¨Ŧú•Ā’Õ>Č˙ŧRĒ8ĮoÂģ+ĩ…ᆴ†Ō/ļ_Â#7E‰Õ~ég?)ü+¯ģļŠöÎkYŖ.Ąķ!ąŽÎÜ7Ē„E}§i] vĮZĩâęŽģw˛ēÛjz@7GŽ.!Į—Čã$‘ųėŧ cs†áģÔajw¸šämÁ €=øVÄcë~ķmn'†ÛPÜ­ŨÂG´Œ’qĮZŖ{Ŗ¯‡üpeO>ĪEšĶŒ05ŊŋœBåHÁÁlį5‹ ŨEö}ÖŖjąi‰ ũĒĶĪKĩ-!Xœō°ŸŪö­­ĐÃņ+í:• Ži<8€€…ļšc•úöĒ‘­h­áéĩĢ™íā].[}Â4Âí&āŦ0q”Ú?ā8§%tÃ÷WŌ^=>âÚ9gB^)‰€>RTāqž1R=’čOáiítģÆĩļˇŊŠq–Bí/ēķŌŊ=ĻéækÅácŨ*Ē–íÎÉ5ã1'ÂûĢ6Ķ.ÍĶë&@‚ÍÃų~~ü—ĻÜūuÖę:eŽ™âŊ \ĩ„ä;M5ŅØ<`+°ę8öük›ēĶg“ÂËöĢ+™­nŧOöÛxRr–ž`%ˆ OãRęĸ)/>!Hļ7 om#ŽĪũLHÂ2§oË×v?!^‘áDŪŌHŨ•ĩrCƒžzƒ^[¯Ãyöī0Ōī!-Ŧ[NËģēŧH˙ˇķÎ;-tę'Œ5ŊN{;Ča¸Ņb‰KZČTH7šÛÉä~uŋđĖ•ø¤Û2ȓ[Â#•$ŒĄVëŒīY˙-ãģđŨ•ŗZŊÃɨA€—!‚įĀÅsú‚ZGŽxéžÉ*Á6šZ˙Ŗ9FqåÆs´~U%œwQÜxcU珏ŠÃûė(ˇ2˜fÜH8Î1œ 5´›=?Yđ4Mėļ–ms#IqnK*°;7`p3ĐœV˙ÃQo¯ÄXÃjĶÍIOŨ1ųHČčpj§ŽŒŖÆšK‹KĘā-ĖQ™Cŗ`y[z}Ms6í~đm…Ö™vÍaŠÅįîˇf*̏ˇn€*æ§a}Šiž9‹N‚á|ëøn#O%OŪ g8?\Vĩ…üü^†ū;”ŗŸIŅ\gU’MųĮN8OĨwZū“ģ ßi“¨dš…Ŗįą#ƒõåđūąw¨x~ōúɨÛ5ޠއ –ė ží´˙ßUˇĒYĪe¨xŌ˜&•õ{dM;deƒ,¯–0nÕk{(í|U9žŗ¸ššßÃÉi$âŅÜ<Ã;€8äãÕ "´øyi÷ą\ŲĪ ēŨk"ų{‘‡ĖHõÅXŅô)Ŗ´“DÕ$Õū=`ŨĸC 'ī7,ža^˜ëĪĩU×Ŧ$:WŅ4ĢĶs¨^'ŲĘŲšķPät5wvŪ(kēG‡×JŊeš˛ũŦÆU#Âô ŒƒĮáÅuÔQEQEQEÎęž’ķ]ˇÖŦõļŧ†–6Rsʒ0}Á.› 5ļ¤úíáģÔ ^HD#TLį ŖßԞ•ģEQEgļ“júējr’â4ōâÜŲXÁęTv'š­ (ĸŠ(ĸŠ(ĸŠ(ŽB?ë‹ã×ņ ģ°6Ī´ōo¸D°9Î7sôŽž‚3ERšZ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸš/ bÛCš÷FÕ&ĩŊVDŽ=ˆŅą, Š=ũk+Gņ…ÖĢđÍu$ĩļ´ áGË0ÎX¯NÍhøöōëÂ6ēÎŗĢ<ōOi ›4äŽ0ŖĶŊoĮ¯i2ŲÉyĨhöą¯2ĖĨTúž)öúžu1†ŪūÚYBĢ6ß\Ō >&Єm!Ö,)Ã7ÚúkFŖ¸…&†E’'•Ôä0õĸŊŋŗĶ`ķ¯nĄļ‹8ß3…úšÉÖŋ{ŽŧC§j𤠧Û$/ld Ķ&NÜ÷ôŽÂæúŌĘ-ÍĖ0FÄōH}ÍC&ĩĨÃ?‘.Ąh“lķ64Ęn3ģéīVáš;ˆVXdWÆUĐä0õ˛ĩßYhČ\É’îå @§æ<ˇ=€äÖގ¨Aņ*ķKģÔa}$iËwäTØZM nî0?ZØÔ§ÔÛÄ:JXę:|v'qģ‚^e˜cåŲú֚jVR%íģÛ>YTüŪzûT—vöĄMÄņBíS#…ÉôīM7öƒvn _cfAÃz}}Ētu‘C#SЃ‘T5ˆ¯¤ącc|ļ’Ļ\ģD$xÁ<}k—økĢëž%đôŪŠ ‹7˜‚Ū+p€lŨ’OOÖģĒŦˇ–ĪrÖëqFLAÆáõhKëY'’¸…ĻŒeã /Ôv¤ö‡f. ;Î÷ƒæ>ƒÖš­TՏŽĩÍúí.-- †x„!]å˛ qŠŦšöĸß­´Čĩk&âĘ[…H‘IFR ƒĪ\ū5ÜUQ}i–iƒ*v°ķĐûĶî.íí#sƒžjåWû]ŋœaķâķF2›ÆážœRũĻ´yt~v3åīąôëQ>§aē=í˛ē}åiTúķÅOąĪ ËŦˆÃ*ČŲči'¸†Ū=ķÍIœn‘‚Œū5âuô¸´ë{YĸKBé-ã‘đÂ0A%ąß…>ÕwÏŦÉŖFÚō@—û›p€åJäí?\b˛õ-kP˛øƒŖiK$NŊļ™äVOœ4c9ŨžœĘ´ĩÉus“hrŲk„ķÉáĄū-¸īZmwl›ˇ\DģN.Ŋ=&Ũ‘]K/U ’*J­-íŦ¤ÜB’¸ĘÆōÄ{ Ch°¤Æęœ+™Ö>ĮŊsZާĢYüEŅ´ôšFŌõ&gˆÄ2Ž×œ×L—–ŌM$)q K.Šā˛ũGjĀģņöŽ›ŦCĸ_ŲÛŪÚÉäE<ō›đ¤œz Ä}EjYß$6VąęöxaV‘•Â̜rĘ3Ķ­\7VëlnLņÜe.6ã×=*ĸëÚKĪk j6­-Ņ"YA2cŽ1×ĨiŅEQEQEW%ãzÂĘ8,Ļ/3\A&ČmžL(IŒ`âô­+ûYņSm´iĐÜY"ĀĮt’ĄÎ0>Ŗ§¨gŊ‰~ Øé‹gzķ@bIbd’7„y™ŪÜdßF @Į¨øŌÅm%šBŲZ9<†P؄€ę¸îØĩĨŖÅĻĩđø[Û͆ÆHīČeÃ2.ņũėõĢZ§‡^ŠGMŽĘ)4qcģLcj4'æüū_ÎŊV8ŌÖ8ŅQaUF‚ŧ÷Å/ö‰ÚĄĢʉĄ­¤Č'ú´œ˙{< ŽqŅ[-Ÿ†īuĢHÚÁĩ‹É!iãā@Ęæ59OŪŽęSiwš×‹/oĸŠ7“E…a‰ÆvËą˛ŖŽX^iÖwŽ×ŪēÔo-bԟCĮ5ÜFHÄüVäØĄ¨æĩŌm5_Zę 5ŧ"éd¸š#čČÄ[ēüšûš=…zî‘ĨZhš]ž›cŽÚŨvÆĨ‹`}Mq_ā˛[Ÿ Ū_A [ÅǍžYPXĘ6CÛ8Ŧ™o4}Gâ ĶŨ$ ø|"Į ųË1ۂ:…#ŽŲŦíöĖZü5šg qJ“;Z1ą”+ܐ9ĒēÕŽ™“ņHĸUģ:”bØ*ᔍ‡(1Į!š•Ņø“PŌΊR[ÛĢYĄm Hî'HÂ;Cäg u1X÷žˇŌ4ũ tũBÉnîbyŽo.GŸk;ĒĸĮĸį<7įÖŊáė¯'‚tõx([ŠŨŧûėŨųWĨÚÚ[ØÚĮmk Ckĩ#A€ŖØWâ ą|JŌŽ5ƒö"ØL"3"[ŒŒį'ørÖōh6EmrŌ,Ž0 ÚëŽõƭ勸&ÍZx_ėŪ&0&8ŧōxôJŸ_ƒDxååka#iq´!ČÁ”ŖËū×Ũį¯5&ucoâŸŊĩÔ~tö ųš–FEĀSģ8Íz.‡â‹z˙U˛ĩŽt›LŸČ˜J›ryå}Gš?‰ŸŲŦxU.š—ûM „C†Î{í'JĪšŅbĐ|h–Mqoiĸ6 ŗ’ņ|ČÄŽå¤$Ø<{ [YžÁâ_[ŊÔˇŸfĶŽ×Ėt*ōd œs‚Ā zց¨ÅmŠxVėucw‘•%ÔŋŨŠG=[=ąÚ´­Æ—iĄøÃN[ÛĪz ŅĻŅåŒcĄ$côĢŌiwZŋáb)o§H&gLl!€ÄöČnqT–h?á\Eo4âFŧÅb„Ge/ą‹`Tvé]„4ŨXņ&ŠŽG5ŒÛŽ#šŌŪ Ušßj,vœ|Ų=8¯GĸŠ(ĸŠ(ĸŠ(ĸŠÍ&Đp3PÜ$’ÛKR¤d*Žv’8?…rūđæą§Î—:ū¨ēÔ0x]T”ą%šā}uôĮEq†PÃЌĐcV€Š<´ūâūT n›5+čFE8ĸ‘‚ qNĻ:+Ž×PÃĐŒŌ„PrgéFÅūčü¨Ú§°ǚÕ|-uyâĢų´ũ#U†UE/Á nÁå`A<ö<Öˇ†<>šŠÖ2-šß4’˜áLD›Žv¨=…nĒ„PĒ€éC(ldQH#Pۂ€}@§Ôb$W.¨ĄR&…†4vuE ßy€äũh1#g(§=r:Ķ‚(<ųRĐc Ŗ8§Ķ|´ūęūT†4+´ĸ•ô#ŠvҌcJ8ij?-7Úš9ŖĘNNÅÉ9éßÖšmE×ãÔūҝj0Ū%ģĘmJ. Ūx,01…āzžk­¨¤†9—ląĢŽs†PE8ƌ0ʤÄS€ÅFa‰˜ŗF…RTf@`Dƒū)|¨É'bä÷Å!‚#ƒåĻG íU/JLķÛĖy§š2i¤ûÎzœ¯´HĮ,ŠOŠI r¨YsNØšÎ~”žZuzį§zh°Põ8äĶļA\߉ô;­]Ŧdˇ6ŌĨ´ŒŌYŨƒäÜ07`GQÁĒz…¤˛ņ+ëZiļ$[tˇĶԅl°%œādņĮ­v4QEQEQE’Į î‘ÕĻXāV>­&ē5],iBÄØ´‡íĻv;övŲŽũidÖëPŋŌŦe‰/m WķĒ͜ ‚zfŠø\Ŋņ† žÔŧ‘vŌHŒ"RĒvą\€IôŽ‰ĻŠ97•ÛîŠ` ú ŅA‘FáRf˛´ũrÛRÕ5+^ÂEŽFÜf+ģ鑚ĶWWÎÖ•Ėx÷YÕŧ;á[­_JKG{QžEš rŊ8ÁëÍo[O,údSĻw„>: Åsųf¨xj}j]$ņ 6ĐjØ2[ļSn~^}q[@‚2i ¨8$gĶ4nr9éA`1’ir3ŒķYđjÖ÷ÅŪ™ãqkrIĮĘį>ŋ)­MÃ8ČÍ!`1’9éÍ)8Ĩ¤Čõ °$ŠZLŪ€sA P=+&æmeRŖŋ5­¸ŒŒũiԙ–“#8 œ Đ#"Ã8Ī>”Æ|Ą)†`8ī\ũώ}eáØ/|KmĨ䓈L0>á–}ЃŸpkŖČõCšZeŒŗ(u,ŋxg‘õ¨ŌîŪFUYĸbŲ8ĢQEQEQEåzä×3|Yk]MŦ×Mvl–ø%œ‘ŧúū•›<éGÁ&ëUŠé`ÕĨTš  ōH8žTtĪ| ŌŌÛIŌž#x†fą€]Iq…ˆ Ȇ"^AíÁÍrz}ŕ¯„|1¨ÃyÔä×6ŧ‹ Ūą|Šįîôã§5Ģ,SjŸ‹ĸÕu;;åēe–t-4q Ė<ŒũsOMG×ū$jzmÕį–Ōé–Ėâŗ\É8įįĀį¸É¯dĒļŧ6ƒD˙„Ų4kHãÖ~Õ2Z˜Æ$Š!$×~fēm’xv- ÚOĨ4š€ˆäÆÖö‰Ī'“[åü3Ö˛áKDdã9aÅaéRXÁãû}:;˜äŗšĐ ŨŠ—rČá‡ĖŪø'đŽkJš{¯ h––ØÍqöĢŌļ—ÎBH>a÷X6æŊ+áÕĶ\x*Ä<2D𗅕äߒŽA!ŋˆ{ÖÄ+ >ãÆķĨX¤šíŖ¸+6Æh‚1 yéœ×#4ĐÚøkÄ÷PŪâM7Ziģnî#퐪=>c]Ģ;_ę~4“T—ĘÆ'ŌÛ~Ũ€ÆĮz{—î=Ŧ{ËÍzx…ėËou=­­Ŧ—Čg0Ũ[ĒĮgfVî;œûWKá{)~&xĸá‘bē@`!–‡-žzŸ§5é…žƒ“^5iĨŪx†ŪØĨĖĻöīU•ŽîÕʉlˆ8ŸáÆÜ •´ĢšuOi77‘DÖĐÅĻÜßNÁĄŒ'úÕĀä“ÔúŒT˛ZAwâÛŗ¨Ũ/ᤞlHŅĢ͒7íČÁĀÍCĨj:–ЁĄŧxįĶįͤy ĖÅRy× 2@>ū”畝“cáË{ŨR9ĻMxžĮ!čįq)¸ā•3í[čļö+“Eŧšitx´×¸ļeL!.GēŒcĐV^—spķøûZwŠK˜ŽbžI\¨•Ÿ/w8É^jž?Û|5}Ũ›Č5Ëąĩû3E*åļĢ6rŧr§Ô īžK#x\C-ģA5ŊĖŅ:™|ĐX9'k˙įöŦ_Š6ļ“KᗖsÍĢC u”Ą16wŊ:sÚš}Am­ėž $WŽŠĨ˛IĻĒÜÜ9@ħ?ŪÎē‹‹ČĻņˇ‚ŽáKÜØĪæâNųjFFqÔĩrŅų6šæĄm}*O‰„6ä\åĮįÚzMjx–}ëãéufH-–=83rÆpP{ą9Į_ÂģßÉž ŅLNŒĸĘų@!ƒņėđę^¸2Ļ´HÍŋoîđăĪL\ގohē‡Ä+‘y*›KxĨĩ rĀG)Œ’Ęëģę^ēkß éˇ2J%’KhŲÜåļŒūĩįšŦˇ>;ņŒĶÜcČŌ"d .Ü8WÁ8=AüĒXu–ëáÍä÷›Žn""v2}˙Üŧ3ũâz÷ĒŪ–ûū­"õŌÎęŌyį.mä+6YXūú3Á ĸŊNōŪ+ģ9­įMņH…]sÔņo ŗÚø7AÔ4ųĻ›TmpÛ0i 7•ŊÃG‚~îҟ֎t +­gIJÚßÜįMÕ<ÛX#›pâ vāž„ŸŌĒiwˇ0éžÕmY›YÔīš=Cæ%™Nōá—?ÁôÅ/‡VâįQąMFŽŦ¯ĸž8îíî[÷ČæXĪ!°:ŠĪđܒYøK¡ÚlŌMŠÍŦ5ŧģ¤f-é!ũĐ?­ji ¨jštzŦ—VöÚ´Zŗ$ōË+o*$*aØB¤`~57†ŧ=¤ęīˆŌ¤HŦĩo2(ĸ› F7 t“ĪĐV PØjđŲŧ”ʉâc+|¨e~ Ī Ö˙‹Ĩ„‹lėä{8$û,Öā“ž&Ę#\cë] 7z/ïØĨķ<æUÜ+9i˜rO Ž›RkĨ]=˜äBæ{žĶÖŧ›F›f›ā‰­Ų§qq"꛾ķĮ†ķ|ß`}zU‡zƒĒ^ßßDëŨ†ĩq,) ƒũ_Eūį'ĻzíQEQEQEW¸´ļģPˇ6ņLĒrˆøĶŧ c!F*8úSMŦåÚ˲í,PdOĨGũ™a€>ÅmĶ÷KĮéO’ÆÖ[„žKh^dû˛4`˛ũjhĶėÄ˙hyÛˇyžXŨŸ\ã9ĢuUl-#ē’åmĄ[‰PƒssÔŌZiļV !ŗ´‚ÜČræ(Âî>ø§ÜÚ[^F#šˇŠu!e@Ã>¸5 i:toš,-Uļ•Ę āõ:Pt4ÆŅ› ]Œ0ËäŽüĒÄ0Emà ih0¨‹€°¨n4Ë š[›+i¤Q€ōDŦ@ú‘UÛÃē+† ¤XŨGŲĶôŠ$Ņô،K gû8Ņ)ōĀčŌ6•aq:Ī5•ŧ’ĢnņAãœūōĨūËąūŅūŅûŋÛBėPķ1éģŽ*KĝėįKgXįhØFė2ąÁ#ŋ5åq|:_ŗÅxi-ĩuÚ[UKßŨĢņ™AĪ\¸ĩz…Æ—exŅIwgoq$qĨˆ1LôĨ—N˛Ė“YÛÉ!,ņ)8ôÉŲtŊ>{/˛KclöšČ…ĸ]€ũ:PúF›$QÄö­kĩĄRz8§]éļWÉ]ÚA:Ær‚XÃ>ŲéKs§ŲŪF‘ŨZÁ:FC"É`¤wô¨ãŅô؄ĸ=>ÕD§2m…FķęxæŦÁ VĐŦ0F‘Dƒ ˆ =€¨n´ÛÖGģŗ‚áŖÎÃ,aļįŽ3QJe`tË2‚<…įô§.“§'—ļÂÔy`Ä+ōĶqHtm-ĄĶ­ ’žBã?•I6Ÿes ’{HepĨ<`§¨įĩ>ÖŌÚĘ ´A$„‰Œžŧ mƟgvÁŽ-`™”`# GįPž‰ĨH\ž™fÅÎX˜–>üU›k[{8 Xc†%ûąÆĄT~Ēļ‰Ĩ;ČīĻŲŗHIv0)-žš8Ĩ]KA]:Đūįîåį›fÖîÁš#íb;‘Œfšéėņ&ĨŽŪëvš•ĩŧēeС>C–qœķ]ä’Áe4ļđĻD,‘äj—‡ou KCˇģÕtã§ŪČ™l[vÎHûŽÖĒžŠk¤Ú­Åە¤H—$ŗ0P1õ5~˛õÛÛí?G¸ģĶíašž.c–S*O qPxS\ox[OÕŪ]ÅæÕ˛’1ŸÂļčǚ…ũž—a5íĶ”‚Üä ā}*ŌĀĐÕKŨBÛOkapÅMĖËXːHĄĢ”V&§Ģ_Ykz]ļ‘=ÕŊÛ0žéˇpO­mŅ\ΈüIs jz4OYíĩĨĩiŧŨ­6qō㑁ëZZõũ֗ĸĪycĻËŠ\FËX› ų p}ēūzŨŪ[xäxĖNȐœ•$tü*j(ĸŠk0D,Į “UŦ/­õ;om| xÛdø5nĒß^Á§XO{tû ‚3$Œá@ÉŠĸ‘e‰$\í`gĐÕ{ÍBÚĀÛųėA¸™`9sœĐÕĘ(Ŧ_ëiĄiņĪäų×ΖÖđîÛžG8=‡sė)ŪÔī5m$\ßéĪa?˜čarIųXÜÁÆkbŠ(ĸĢŪ^Cag-ŨËė†%.íŒā œŒŽôĩ…ÄlcŸh'Ÿ­`øWÄ:ü:ÚėãĩžÆõí#—ˍƒë]T“Pˇ‹P‚Å›ũ"twEĮP¸ÉũE[ŽGÅ'ÔtëôĶ4]9oīÍĢŨ´LHų‚€1ܓøbē{i$–Ö)&‹Ę•3Ļs°‘ČĪĩOš(ĸŠ(ĸŠ(ĸŠ+Ī[ˆ¤Ķ™OgēG„ ŊĮņîīœņ^ŸĻ\IwĨÚ\KŗĖ–vØrš#'Ōš_O=§Žŧ%ä^ÜėsËđ‰O—"Ŧe†WĻsŪšmBûT°Ņü[ŠAŦßyšVĒąÚ‡Ÿ*˜÷+Ô|Äs^š‰õ á~%B×øV•ĸwÖĸ”ōÖÉõĒj7öžņõŦzĨā:KŖZKį“,y_$džĩŠu-l<¯d/n ‡N…ä’Îķ˒×*K;Fp߯ę67ŨØ[ÜÄIŽX•Ôˇ\‘\OÄŋ?K´Ķuø./V+;¸Öî'tBĮåRA æ˛ü(595-FÚömBKigÚ×VU‘B‡' ˜~õ †ĩŠ+ÁúŋÛ.'ŧÖ/Œ°ųŦWcČUÎf"§Ņíõ‹^ģ"ž†=+RšUId2…bNHƒž~ígC>¨ú^ˇkĒĻŖiŋFyā)~fŽRœŗŖƒ‘ËkŊđ„V> ĶSM'›kŒ%”¸RPpšč=ĒO\ÜZxNú[Ko?ȍ劌—QÃîį8ĪlæŧãX’ęãÁū ļÕâÔŦn kiŲ¯ Ģąœ'ĘāüĘNx5­¯_FēŌ,¯ī^ =:âIck‡RŦy잨<æĒŧŠâko^Ũ^\ ōEĸÃũœžFųšę=qN›P×uËß5™’tŌ‘Ø;^’Ø{Šûûģ“ŸJôũ.âKŊ*Ōâ]žd°ŖļŪ™ jæcXw2ī<õã=ŗWîŖÕoåņŽƒauyéÉē|É;Y=Æ=ŲÉt>ĩJ]nū?Ũx˛Â{ā÷+ŧqM32B T‘“×vî}Ŋ濎ĢiĨkĨŽįļą],Üۄŋw™fLüųí9gC]ŌoOÃoíÍnöā]Ãb|¯1€W,ĄŽsČ;ē{VˇVM?D˛ÖôÛũDäŨ"^ĸÜŋīa ‡Ī<‘žžÕŗĄÜYčZÖumVt†öMč×× Ë3-FãĮĘEuĘÁÔ2TŒ‚;ŠņˆĻ¸Ķ´Ok6w˙iAâ!Eã™ۜĀ‘Íhk3ۏ¯ö•ô-k7Ę.œ˜ÆIÛĪMĮ§JKš--üwĻę—÷7lø|]8ŽáÁfŖßĶš¯Y Zķũ.Ö‹Ī<kŨ"[”Spø2‰3Ķũž•SJģģm?ÁšŠÍ,š†Ģtņj šĖˆC—g€¤ zS|áßí ģĢÅÕŽ“û/\cˆJX4c‡'ĄĪZõĘ(ĸŠ(ĸŠ(ĸŠŖ¤Øj¨‰g ĘÆÛJļŸQéQA éŗË5ž™g˛˛:B ¸ô'×;ŦÚßh7–ąxsÖoar˛­é‚0’ˇåÆāžĻŽxwÂvÖ> ĶôRn„11]w.ū§BzÖ°Đ4‘Ĩ6–4û°ˇX6 §œō)áÍ´ŅĻļ™jl•ˇˆ<ą´7Ž=}類Ņu#ŧĶ-Ĩ0.Ø˛Ÿu}8ííŌ¤ŧđö,RŨiÖōŧKą ųWĶéRéZ6ĸZ›]2Î+H nōâõĢ6°^ÛŊŊĖ)42 ¯ŠXzk.ÛÂēĨ´ļđé,2íŪ„ ä{ÛĨ(đƊ4ųėŗ û4äc Øä{ņÛԚŪĐ] -¤ÚąˇO."Sî¯\{ŒĶ?á đīØa˛M°ļ†C,q… + ‡ˇžĐõ Ôŧš°Fœ(BT•Ŗ `CšÛUTPĒP0YwžŌ5+øoīlcšęyR99LzsÅC?ƒü?p—)6—ĨԞlęs‰ûÄg“ZÖļŅZ[GoėŠ5 Ģ’p?ŖŠxIÕį†}BÆ+™`æ&dĄõ‡ŪĄ>Đ+¨ÛJˇ)w´šķqĶw­$žĐĨP¯ĻB@AAŅN#ž‡ŠŲDXĐ"(UQ€ĀĄŧĩ‚úŲ­îbYab # ƒƒ‘úNŽŪĨ–TVIqŊ€Ál ūŸoáÍ&Öũ¯!˛&%ˆ#8Rßx¨č¤÷ĮZm§†4[(nĸļĶâŽ;°Dę3‰s×<ķš’×ÃúM˜›ėú|1‰¤W‚§Ēã°öũ#DĶ´+3kĻZĨ´ˇLõüj{ë ]JŅ­o`I bĨŖqH Œū U4đæ‘ÅšéđkõҞä? 9ė;zSO†4BmÉŌíXÛŠX‹F PNHįߚ#𾅠”ViĨZ h¤2Į”W=ĮŊ-˙†´}NužīO†YÉÜ@Ā}ā= k*…;UMCMŗÔáXŽámĘrC)õr*×…4ëhmî´Ģia€2p™ęGŋŋZֆíáHbP¨ŠTv ŽĮą]]kúuíÔ6—ŋhškxÉ ›Yx#žOJę"Ņ4ÅĶĪėIöyŽųÁ%˜÷by-īÖŦXi–zmš†ÎŨbF;›–>¤žIúŌ&—bšoözÚÅö2Ĩ r¤ŖН…´TąžÄiŅ}šu *ātį8öéS/‡ô¤ŅΒ,bûuˇ#+×5ĖęãV7ŌøbĮ@ûæØ"ŨƒōĄcķî˙€įÉÅnx“ÃņëÚé ° fey‰¸ĒîÍč{VÔQ,1$H0ˆĄTzYŸđŽh˙m[ŋėø<ôs mŋÄI;ąÜäžiמŅĩ+–šŊĶm§™ŖōŲäŒWĐūu xSAqgŋJļoą ļŲLųc9ĀöÍmÖ`Đ4…ÔΤ4ëoˇ“qåųúõ¤ˇĐ4ĢKé/­ôûxîdÎé9į¯Ķ=ņ֗Nđū‘¤Í,Úvmk$Ŗ41…ŨõÅiŅEQEQEW/ŦxŽãGņ>•¤ËĨI%ļŖ'•ÚĖ0 WŽĸŠ+?Zŋ›LŅî¯mėĨŊ–Ë­ŧ?~Cč*+-]%ŗĶžō6ŗēž\Ĩ´œ°mģŠņč3ZĩÍ\ø¤ÚøŪĪÏĻ\”ēĨKÜ~ī#$¯é]-W=⯠Y[]Éa5ÔS\$ beYc€Nzō{W@E-gꡡ6Mskb׌ŧ´k"Ą Œ““üĢ#Â>-iąęPisZØĘ˖YP–*ÛHÚzƒ]=`x—ÄŠáĢ{K‰Ŧî."¸¸KrЕųČ H'ĻOjßĒĨķéÚ]Åę[IraBūTl0pO9Ži| EáÛŸė›ąiŽ2$3LFí’†sĐgŌģJ(ĸŠ(ĸŠ(ŽoÄž*‹ÃūŸX†Ņõ {y L ‘AL§¯\1]Ryą$˜#r†Á횒Š*ŽŠy&ŸĻ\]Ãj×OōQ‚–Ž ãĨCáũb/č6Z´ŧQ]F$TŧžÆĩ(ĸŠBB‚OAXŪņ —‰ôļÔ, ōVi!ųēåŒū=ŅŽî /%ĩITĪĢŧcĒĢgũp*uÅÄV–ō\O"Į J]Ũē*’Mc]ø™mĨ>Î)í§šPģÕžöŅČČãÚĒčúîĸÚžŠ¤ęW’IéqÜD.BŦ‚GVÜŖdqÍdÆIđˇÂÕčMė\Û6¯`¯6Ŋ“[>>×lmõÛ¸ėbŌÅâÄ’Ā%x_—Ū—M×õ_ŨøbÆK‰mcģŌÚúękr¤q… 898öŦŲŧSŦOāŨ?Ä}<0Øjmk¨”>&ÍũāņīV|1y­ęŪ"“JŧÖ¯„ÚuÃO>(– ĐŠų{äįũĶ]öģĪĸ]ũžî[IR&tš¨5 [ŨLÍm¨Év&lHōQŖČcëīRŲx›TÂĨÔ÷ĐÆæä¤“ĆÖl+Ę:ŽÆp}*į„|AŠ]xŠ+ Pę0;Ųŗˆ¯#]˛¸*KFę0ÃģfģģČÚk9cI䁙ĮÉĮQFkÆá~_4ē”÷2ŨŖO˛}§hķđN@Ī$÷&ēŠĩíK@×õY.Ūö(t#¨Ũ@ĊÄap>éū”š ūŊtē%Ė’\=žŖjÆîieŒ*ČÉšZ%ÎxįŒtëX:>¯âgđ˙†ĩŽO,ē–¤ör‰U6ˆōā0ãī šĪOjėŧ!¨_Ük$Ōī.žé4Û´Ž d~Ö@Ø8é5RF‘zGČũטøOPŧŅü=ā1ÔŗGŠ“m,GîĒí$ˆĮ_sVš˙[‹Åú‡…ä×/Vyž´ų‚FOsægåį<ũ+Đ­Ž­ÄĮOąÍw "ɏī03ôĢÔVН$ļŅkĢÖ°( ĪÁÆ}Oá\o€Õŧ7ã­{ÃR@-aēUÔm!ÜüŽuŦh'ėßÎÎŪ9­ŌÍY-Ū)˜IžĒ9ÁôúzUĩĐ4ÅĐ˙ą–ŅŸˇo’3‚3žŊsžsVbĶí Ŋžö(..Yå‚įn~™5[Ä1Úč7ŌH˛00˛lėIõ5Ę|:ĐŦÂzD—÷ōÎErD.FjˇB}Ek¯€|<†×m¤‹öW-ž=Tsœō:š/čņÄ!T Ā…§r€°!˜ đHcČõĢ6Ķ´ÛØîmÖmĐÆb…d™bSŒ…ņœĘļC)SČ#šoøWŪdšiĩ˜Ųģ1™0$…đš$ãĻjíŋ„tˆ5EÔÖ Ø‡ėû丑ķ÷H,Aũ?Âú^—"ŊŦ2„HŌŗ$@õؤá ĒžđúAmZJąZĘfæ@#süCæāõüÍZŌü/ĻhúÖĄgëswĖåįw}H$ŒöÍkÍ M Å Ę:•aęZġđŪ™ŖĩXY1’Ú7û4>cLŽUœ.zqY^–oęÖÚũî‹.=ŊŖAļu!÷ģe€Č€sūŅô­kO éV^(ŧņ18ÔŽãĘåÉR8č;tŊEsڇƒtmOUÜ7])]HĄʀĀ=)ŗø'CšÔãÔåŠäßF›ãírīUį€wtæŦ'…ô¤×_Y7Û\Šf21RÁv†ÛœnÛÆjöŠĻZk:lú}ô"[i×kĄ8ČŦ•đV†ˇˇÚo>×w•'ÚdÜ ęsģ’}M>/hŲ\Ų‹WhnfûDŠķ;39Ū 9=Å_Ķô‹=0ĘÖčŪd¤%‘ËģãĻY‰Wœ°ÎŖ÷‰ĶrH?nSY‚Šf 2IíXzŸŠ,t­CKĩž9ßûNAŧŅ&č÷@-Û#šŪĸŠ(ǎ—MgjĶ­´×qû¨@,yĮ‘\îŸãģD_5žŸŠ˛ØČbš?gģp2F3“øfē7Q´ÕôøoėfY­Ļ]Ņȧ‚*ŨQEQEQEV6â=nįPļˇŽâ)Ŧ%N“Į°†##ŖŗU¯nÖĘÎ[—ŽY%ÜR%ÜÄ{õĒÛkšMļĨiŋė÷ Ŋ<ÅÚØĪqZŸŦjčēEÖĨr’ŧ6Č]Ö$ÜÄ{õ5Üwö÷qĢŦsÆ˛(q†Œō;ĩEVMöŋka­éÚL‘\4÷áüĻHÉEÚ2wÕz;˜e–TŽTf„…‘CdĄÆp}8 Ķâ•'‰e‰ÕãpYNA Ô´QEQEQEQEWĢëח_Ŧŧ)gu%’}‘Žî.#UgnpnܜWâmkPņ5ĩ\ŧOĻęëg&Ø×âEÚĮÜ{q^ŋĨÚÉkaOqö™ČËÎcT.}H^+ŒņúNū)đj[ļŲ^úEWĮÜũß-õÆqīY×Ū#×āđ׋u2.´KĪ.ü¤Ė‰…8aŒĪ`)Ū#ņžŠ¤j-ēââ e†ŗĨ¨–Ė0ŽTķĮjôÔu’5t9Vƒę pX.Ĩāō˙k¯–[îįiëRkļ3č×W^8ÕæKŠôģ'K[[hĘĸįŠ$’I?Ų|QĒiwēUĩÃĮvúļŸ-Ė A¨ö˙ēsßĶ۰ׯš˙‡ĩčeŧš Ģ}1ĻŲqgåĘ­üD /`EMĒ­Ė:_­ūŨ÷+¨Cå7•ĩcĖ'h p}ęõ˙ŠõĢox˛Dš‡íēÆÄ˜ÁÄĒUXšÆ~nŖŌ´aÖuifxe Č5×W–øHꗚ‡í´ĪąEģU‘iˇ P3´uüÅ[Ōc›ÃˇöŌ.Œ_dĶŪō[š"\—û I$ÕM/â ÷ˆŸF˛Ž9Ŧæē†ynĻ‚0ƒėÂSëŌ7ˆ|[%׆âŪļ2_ŨËiĶ'™ŊßĮlRoÄëâŊCÃĪŠ[‹¯:ŗo˛Ũ˛]ˆĪQ´¨´ųŗqĻA<§KŊû$vij[íJ‡%ąÁäãĩJš§‹nŧSĢéÖ7VĄļ•đ…*˛rČqčšįØ{Õ[jįYĶūÕ4 Ū§5“Š hŠĢŦƒŠųy?…løGiņ‡qƒ{āįūX­møŸXđÖĄĢöhKĒž…ē}ŗŠįluaü˜Ž–k›{Ģ &’āÛ–BįhČåH'Nĩ…ázâĶÃ~ Ņ-L‘}ļŌIĨž(÷˛ĸ砃’I¸ļßÄēÜ:5š\Û5ŊÜú§ØLōEŒDIÛ.ŪĀsUĨÖ|Q5–ŋq Ũ¤vÚRÜD%h~idEWVÁã~œTŋđ‘ęWږ•ĻG4Й4•ŋž{kpėîp€Ag$ņéYú§Œĩë6ĘkË{Ģ)MĢ VÂeYƒũč*¤ ŒzŸJô.åoôkK¤™dķāG¯BJŽEyV­âīhWÚŊ”ú –M:â)ŽmĐŗoŧũ:ƒ[Îĩâ+? ŲëzÂL×Z”qBĻŨŧ.ûW8öį5Ŗ%˙‰4Īhv…ũ´ąß]\FDpŒ˜Ö2Čzpr9ÅsöS‹Gņá×åũĻę4ũĘeš4_›8ãå\cĨ]‹YÔ4MÂ4W2K6§Ũq´1ŦAļĒã“čOŊ&ą¯xĻßÊp.Ęî Y-Ī…ŌĄvPŦËü'žØŽ‡Ãڞ¤ū+×tkëĄušÃ$2˜Â7Τ‘Į)|_Ŧ]ØŪčzU”o&Ģwäĩ¨&5 XíĪŋŊrú¯‰5ØôŊzŌËQ‘/4}F tšh‘ŒŅČW†ÆFãĶĢĄĐuMU\mÔŒöœô¨á´d°jz„c(š'.™Ūh'åėŧT‘ø#NXĩ¨Ļ¸ģ¸Y˙Ĩ•Æ Æ2¸ĘŖĩđ5ĨžŠĨŖ¨ĩĘZBī"ŅöåíÆ1L‹áö:dQßę!4ŲLÖÃĖSąS÷yę:‘ü ĨÉĢ’\ēęWęL¸Ėr‚0čqFåZ:^„4ëšnįŋēŊģ‘^lûFÔ!@Pëõ5Ą{l÷V¯ \Íl͌K7/=˛ũ+ŸŅ<o ßÜ]Újš“™ŧû„’Ee™ņÕž\ūX̚ŋ‡aÕ/bžŠîâÆú8šsoˇqŽJüĀŽŖ>ÕYŧĻĮk§Ge%͌ÚrˇšˇaæoŧāAÉääT—>ąē“N–[‹Ī;O•§ŠQ/ĖŌ0Ã3qĪU)ži“ØŪYŊî¤`ŧ¸3М|ōdôã?*ģsá+ļģķn¯Œw›~Ķ—å”*ĒāŒqŧãä×BĒ@0+•Ô|ŖęSęRJ×H5"­qráYÔ|¯QíĮJšYÛjöz”w×Â{X|„ĖŠC!;˜9É&Ÿqá+IoŽįŠîîŪ;ŌîŪ9ČÉ㠐0pFkĄETPĒP0ė+ ZÉ=ãŊåÛEyp'¸ˇ,ĨŒ`r2Ę:šl~ˇ†ęsõäv3Ėn%ąV_-œœ“œnžH¤Ú%›ø‰5ŸéŠlm•ģ-ē¨7„íFŖwuoyyjˇŽ$玂@Š+cĩ†~čūT-ŪĸąÛ\4öčŗ Eģ;ÔqĐî=y÷­ÍÃ0hÚĻĄ}Ũ܏~âI’VRĨ€€Ā­KûmNÂ{ȄļĶĄIē05káXmíü—Ô/į"h`ȧÉR6ü¸œq““QCā2ßKĶŦ šî3§öK…yąÔŒėAŦ?éžKéztW˛ŲÄĪ$ōęWQŦč_€†Ü{1Ž*oŲ^j6úļ…¨jŖUŌŪQw ČxÁ^r=knOŲė<‹ģÛk‹ŒÜÅ ķ<ŗü' ‚8ģRKá+F¸ķĄēŊļ” fŠAķŽI9I,I=ZØĶė-ôÍ>ŪÆÕ6Ab8׎Ē7žŌõ ËģĢĢq$ˇvŸc”“Ö,“×­WÖ|%a­éļVËsomfčņ%ģ…Ã&6ž‡Ļ)÷ūĩÔĩ];Ržîđ\iųō6HÉ$ŒrHāÔø'IŽīP›˛_y†HZC劐åGb@ϟißŲ–ļ‚kŊöޞAr%ũėEWhÁĮMŧc÷ĸ˙ÁZvĨc­ŨÕü' '†’AŒ39Æ; ąeáK?Ä:ä3ŨĩåĘ›|ŲW`dcĩ\ÖtK=rÚ8ރĢà –Ŗm¯ŽŒ§ąŦš<¤ĪĻÉc3]:Kqö™¤ķˆy¤ĖG\`céS[xJÂĶÄ/­Į=īÛd@’–œ•‘@Ā ;ã5ĐŅEQEQEVŪ.Ō­üM‡ĨiŌūp| Đ0GĀÉÃcŠģ­k6~ŌgÔõdĩ€ėĒXō@č>ĩnÚâ;ģXŽ!9ŽT‡Č#"§¨|”ķüŪwíۜœc9éŌ˛‡‰´˙øI‡‡Ø\-ûFePАŒŖ!ēĩˇEQY7ž ĶtũjĮI¸œĨíđcoŌwmëĪAZÔQMf2ÄęM:Š(Ļ;Ē)f`Ē:’p)ôQYZÆģ§čvë5ũĮ”­œĨ˜€2N8’{UÛK¨/­!ģļIČ$×Ŗ)Ÿ4Ģ M#įĨŽ'ØuŦũ_ĶŧCi%֙9–(åhX´l„8ę0ĀÕ¤Ü3ŒŒúRÕ[ëû}6ÆâöîQŊē%sü*IĸÂúßS°‚úŌA-ŧč$ĀûĘzĩEQXö~"°Ŋׯ4hLÂöŅ’Ŧ‘2¤āOQô­r4ĀĨŦš5í:/CĄŧøÔ&„Αm< 8'=+RŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯6ņ¯›˙ ;ÁĢlP\0š Î2ËԎũę[ŋjįÃ^)r,š÷C™ģBLs(PßwvAüMOw¯øüEáũ6ÂK‡SĶĖō"$ÄĘ$|Ã#œb˛ĸņŪģũ…m­Ę–&Ũ51§O #fCŋaulüŧāãë^Ĩ^wâ(îåøĩĄ‹Ŗ†aĨÜ#ĻũĢš{dU;ë/á-;ÄVÂŲ-ÅßŲ5xKmųöäq̓ë]o…ī5mH]Ũß\ZKfedĩō!dbĒHÜIcœÕOx´øq´ģH|ąuŠO䤒Šd‰@Ë9“Ž8Ŧ+˙ëPxoRŊļŠÚK6î8 ’@ëŌ9P2~SĪ=zU›¯øŠ-SXĶŌ=;~ŸfˇūfÖ ŠųxĪ\ŊúTâ{Ģ[Áˇ mfmõ˜‹|ņæHIĘŲéÛĨSox‚ÛLÕ5 ˜l7T[)U• Ē–Sģ‚7ZąŦxâö=kYŗĶÄj4˜QĖoČ÷22îØ6ũŪ03Ī&Ĩ—Å:ũĮ‰íôÛ k%‚ëLû|opŽ, °Ī''ÛôŦ=ÄzŽŋá_ _Ų›kdÔ5c–9#/ûÅbG —)õ¯PŗûH´ˆ^4mryĨģāq\‡ˆ5ßXxÛJŅė~Āmĩ4“Ëycbņ’pÃ#žœUH<q{5ž“PĻ­6Ŗ5„’2“y\ŗœœŒ`gŋZ†ãâKÂN™åÄ5QĒ8ČT˜€q“h9ûŊŗ×Ŋgø—Äēļ§á]BŲMēŧ”6rL`u[„w]Ŧ€ž;ƒÉéZŪ%ņĩ÷†îÖĘy,bmE’XdO!ČÚ&0>÷­wĐČ%…$ĘGCšã¯ŧ‹ėoaĨM$pΌÃcy{à ō{ ôčaŠŪ†T‰*"Œ ¸{kŨR_‹Öķ\Ú ;[ņŽįį˛ciõہĻę×°AŲËLJmōíĘœãŒŽŊy­­wÆ×š>Ŗt†ŪßÉĩšˇ„ÆŲ/*H@.8\ЎŨi~ŅŦMņfKd–×ėÖúzžŌ­‘ÉĪ9ûĮgŌģ‡Ũ´íÆėqž™¯4đöĨ­KŒ¯.Ν!ŠîXü˛ŒC4q¯Ë‚y] ûæŽ7‰õĻ“ÂéđéņA­[’Ņ´L|‚#ߑ†.8ĮëPŸk1iSjS[Ųy6ZŸö}Â*ļeũāMčsōõ=ę}WÆzģחK‰hˉäGē|ne}Ū¯5ÛØŨ}˛ÂŪëËxüčÖMŽ0ˑœëYž+ŧÕ´īŨßhËŨ[FĶyS!a"¨ÉQ‚0kОø‡Ēj„vvÍbÆęÎ)í$h˜ $fPé÷ŋ‡wųÅ_¸žúˆšĶZ< q ŧ’FYxg8ÆGSīÅKoãˇŋ#ĩ¸Ô4˙ˇLÍJpĒŽNI<öĢÉã-vøFŊ¤6īŠ\Kk<08etī—Œãõ§j˙kģĶeŠŪ KO˛YîbyD˛ļJÆģOsĪZˇoâ=B÷Äú<ÖRĶ$šO:@ëˇåcžFOL ÎąņƸ4­7Rž†ÉĄšÕŽšé °'įd 'ŽœũkŌĢ…ņ/ˆĩ­Śeŗ\YĮ¤ę;Ņe–L2*d)!†rh‹ÄZŲÕ´mwŗMFúŪKÉfH[dQŽ0ĄKrĞšü*”^6ÕoŽŒöÂŲ<í]ôģČĖeždŨ—Sž§=kwÂÖĨĒŪkö瑁›Nž6Ņŧ(T2í$yæ´|Ou}§ørū÷NhVæÚ™|ä,¤(ÉuÅqÚo‹üMswáģiŖĶÕĩË6¸FToôr 1ČŨķdœbŦGã-RŲÜų6ą\>Ļú}ÄŋXŽõBFIĀųržÃÄēÖąāŨ^æĶėĢĢXO4)û˛R_,õۜŒ~ Qđ‰ĩŋßŲKĄnlãˇY¯ãû.ŌŽŲ0ryʒ}€õ¯IĸŠ(ĸŠ(ĸŠ(ŽWWđqÕ|Sa¯^ę lABˆ…WpÃu9ĒÍđúŨíĩ˜XÔJkžëũ_'8ųxã•X§ö–™~ēÅōΧ[ũžˆČÚ@9^IĀŦų~Ú>ũ–篠ļÂķí b2DģˇgîôĪjíaĸ…Qä22¨ØXúœV­áEÔ|AĩŖ=ĨėVæŲYB’Kp{ž?*åõ›čēLßcˇšin,‰‹)‘+ģc¯vÜr}wÚ>Ÿ“ŖŲéņ %ŧ+ügøÃPø…läķŪÖōĘa=­Ę(cwČ<GjĨ¨xBmkB}7VÖîæy&IžXŅeH!Up@úÔ3øĪŠęWį[ģęĸŌlE<°ã¯&’?ųc@ ­]cD]ļßģO˜coÍĮ?/ ĮÕšŌõ 9õģŋ&úđ^Mû¨ķŋ ņĮ V„ž•u9u Zk;›˜R+ÆH•ŧíŖ°~ëc¸üŠŗx>câíx5‰Ŗ‘lžÄ¨ņ+^Iäœķš¨ŸŖÂÚfŠē´á´ËĄsmr"\Ģp ô?x×YcjÖv0ÛŊġ 2ĘrÎ}OŊp0š9>'xJu­ŽŖŠčî`i*˜ 2:ķé[ ā[{kKCktcÔ­näŊŽíĶvédÎüŽGĘsŒg͚iđ Š´Wrύ/ŽĄöåAŸ8đ~^›qÆ=;÷ŠīüÚŽ‘5ĩūŠ4—RÜEpn…hČ*:ĮãRę}B[§“R“VéČĐ##,čĮ'žÕŊgi”°įʆ52rps秃ÖķQÔ.ėīä˛:œ+øXÃy¨ €TŸēØ$gŸĨ'ü!žNšĨęZ”–ņi°}ša ”ōŽ7zäās]erwžk¯É­ÅŠIž(Ŗž,0o-ˇ&xį¨īTáĶ>>˜uÉĖsß}ŊÜĀ›Œ›÷ū[ģS/ūĨōę(5̘’ūæ;ÆQ’&\s“É^>ījžž 1k6ڄĨÄ{mĸļšP>iÖ6Ü>lüš$įÔW_\ZøâēÕ Z´‰m}4ŗˆ„*Lo"ís¸žxÎ8ã=čˇđšÍjä>Šŗd´îįŽ*ģü8Y4Ģ8뷞L÷ßosåGŸ7vãÛĻpqZŌøSn¯y}cĒ\Ų}ģoÚ㍉ Œn”㌊Ŗk¤]7Ä?í yoãĶėėÅĢĮ3*FãnĀzār[×õØē,ˆČÃ*Ã⚝3Āēf•ũ‹ää'Îō‰QķysIqāī;[ŋÔÆą{—ļ˙f‘cÚ#Ā.xÉüęĨŒa°Õ. ŧĶĄkxnZ4rb?ĀˀĨŊđd—ˇēeČ×om>F™ƍžFČf9‡ ŗ¨x^Yĩ‰5m7S“Nŧž%†å’%J̜Œ2pJcx@fÃR‹Wģė­šÚ%ڍ”ldą#$’ÍgŸ‡CûĶMMrđGkyöčØÅ>nâŲAķ-‘ĐįĢôQTuWOŌbŽ]Fō XäF3… Į īNMJĘ]F]>;¨šō$Io™Tô$zUĘ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ*ļgiÖÖVi Ä{žĩ=QE ĐE:mš$‘sŽ Œū5()hĸŠ(ĸŠ(ĸŠ+Œņ'Ž…¯Ļ˜"´ müđn§1yܑąĪũj;ˇö•Ž—oŦ“Y ŲÜģR%=÷˜šĻ>$ĮyiĸĮj°[ßjf@ÆäŸ.,á‰čO< č<%âUņ&q)R{[‡ˇ—fv1SÃ)ūé×=âyn#øĢá‘gKplîvīl(é’qڙqâŋíM/Ež¸ŅlæŨŦ}‚Eœî0JŽôãØúV…ŸŽMįŠ[GHė‹-ܖī¸ÛĘ‚KOjÆŗņˇĢøûJXĮ ‹iMsåË;+mw@Y—oŪ ~ĩz?ˆ6ō´W‰'L–ûė(ūoīwn+ŋf>îî:ûĶt˙kzÅÆžŪfڂŲO,—TsŋîŽ~Emx§Ãņø–ĘÚÂx!xë$’H2Ņ…îƒûĮĻ{g<Ôzw‡Rßø‚HĄŽib҈˛K #æsũîĮ`+ĨĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+”Öŧ3w¨ë3^ŦÖRÁ%ēÂ-o-üÔKAžŪ•N/MĨÜØ_h÷Gy¨´›í—ŽTÎG‚=9éVu Ũ^KĻę0j(šÅ}ŗÉ1ēŋŪR€đ=9ČÅkčze֝ÆúôŨŨO'˜îb/ ‹“€ŦÍGÂ÷מ2ŗņjQGö8^ 6å˛$îöôŦ¸ūŪG¤Eaũ´„ÃĒ˙i¤†×øˇÚFî™&§OK.Ŗosyum7“z×k'Ų˙|Ÿ9`ŠųáyéQ[:˙ˆtí%á°ģœĨÍôrˆ);ļŠ'žƒņŽSÞŸXø[áË?ė—vĪė2<{°bÃ+‘A­ŧ¨­ö­púņÎĄqÃļ‘ãĀĀÉ?)ôĻ]ü>{:ųöŪۛ¸nŧČmvF d Î{œ×SĸéĪĻiĢo,ū|ÅŪI$ ´338†MsĢá BĮRÕ?ŗu(íôíRãí3¯–L¨įļ6p3ާĻk:ëSÃâdūÖ˛_íÜ Ųß÷`.Ū>nN?Z–ķáíåëĖīŦĸ}ŖK]:P-÷lP1˜Éo—=úՈü#ĢÅ{á™ÛTŗeŅc1ėžheØOŪ88{Ô!đîĩŽĘšŦIŠn,%ŪŖĸœđ¤ōEYO kVšĩžąg¨Ų˙i1iuæ@|ˇPrŦ ‚:sÖ§šđĻĸū ĩÔāÕTbËėw>te×~ōĘA'§=o…o´ĸÖ6זÃKûCL„Á™Đ3n(8ÆsÎ3ÎĨđ·ĩ]YÖnŽīmn ÔŽ ÉÆĘČØIĀ­éúļ›gq¯Ē˙hĖ÷$ry{6Fz/á[tQEQEQEQEQEQEQEQEQEQEQEQEfI¯i1ßũ‚MJÕn˙ቕwôĪJģņ\Ā“A"ÉŒĢĄČaę MTnõ]>Ââ{ĢÛx%œâ$–PŦᨴ—ú>Ēõœ&"Jy¨nzÔÂâÚ+„´IJ”ÜąnļŽāzUšĨ>̧ÚĘa¸žļ†P2RIUN=pM/öޜF~ßk˙—üiëhŌŦKuv8 $?…YĸĢÉwm ɓĒ?ŨFp }zXî`–I#ŽhŪHÎU*}ĮjžŠ(ĸŠ(ĸІyáļˆË<ŠcĢģņ5( ŒŽ•ŗÃS4Šf ģØ “Đ ÷ЍĸĄ¸¸†Öšâhâ‰zŧŒGâiaš;˜RhdI"q•t9zƒRŅEQEUiīmmR{˜bgûĸG [隺UQŗŽņ,äģn\ea2íô{ˇE ķÃm–yR(×Ģģņ4°ËÄK,2$‘°Ęē0 b*Z(ĸŠ(ĸŠ(ĸŠ(ĸŠF8׉A¨ßxvÂöĶZđ÷öׇŽį–uÕlžv˜ōè#׎œWcĄx’ÚÆËÃzF—Ûmom\ZÜy›3匐ŒŽÂ§‡â2héw&Ÿ$wRę §Akæd”› ĪĨs~*ņŽŋĨ鷆ȭΝâmŨs)ä+2•Ũč>"ūØžÔŦ&´{[Í>EIŖ.ÃrGĩe_]i–˙,ÖëJoí°• žäyKË.ß\šˇĄxÆ-vōb´ađŧņÎŗ+ŽÕ `ãŖ|Ũ=Ģ+ⷆāÖ<}u´mfæ)`šØrW=Æ3Åq^"ŋĶnīŧ#âË[ o°Ûy+x|Ąß `ŽŸ.?Q^ƒe§h0ę:¯ŠĻąĩĘbäÆ2Šų˜qĮ;šöûCs%ŧŗ6vēœO5”Ī męŖqÜ1ōŧãš,|qkw&›,ļΆ¨XXÜģŪüËü9‘×đŽs^ŋ´ņį„ĩhtĐŠ.Ē‚Ūņöît]Üz€HČ­Ÿƒõ {ÅÛNĄ4qˆVlībØI8]Åž€WGĄë‹Ŧ­Ū-fļ{YDN˛0l’Ą˛$ķkXņũž‘ŠßZIgq$Z”næRŒH@Rå‡<â­kž3ŗŅŽįĩX$ššÚÔŪ\`ĸ(ŗ€I=ĪaíTī>!iņBe´îcŠÉ/îX¸A -÷}rĮ°öëSMãĢ=ˇYZ\]Åij—wn¤/“ŽáÁęÛFp)ÍãxŸV6šmÅÉkíeG@˛Į8ÉāķßŌĢÂÁļ:F‡Š.•|đëåBa*üáO=đ}КĮø7]ž˛ąšē™đ3(hnwœŠŨđŊÅí·,žúÚh.(Ŧ%uf|(ų‰Rzūtžņ$"Žõá´ēˇˇ nÂâ=ģˆîžĸ˛ž$KĻEá)[YĶ.oôá"’Ū@ŒœŒ žqŌĢÜëڔ>>Ķô‹M2åŦcą20IP‘CNpŧûäÔū8ūÉŨĸŽŗĻ\]Âu„2BāĻ' ¸d?:° úzMbrCŦ˜—'žN09Ģąøåf‘-“J甎2A¤Ŧ¨XFgŨĶnõäÖNŗã[Ģŗá˙ėk+—ZŽpŽ€ƒíđœœgåëĶĄŠogøˆú?öeęZÁf¯!ĘmÛīžs´m#ķâŦÚøæÎææŅŦąé÷ˇ mkxĖģe‘sü=@;N|W!ãmVËÄÚN“˜|Ÿíˆaļžm¤°YpØî ã××|B×/´ Īq§ÚË,Ō–7UōKsדÆ;ÖŠ\x+S—L‘/ÚYÔÂ6ų|Āãõã5ĩ'm×B’ųlĻ)ũœm™‡Ë6qË ŊķTõÜ?ĩŊNĪM‘otö’ŪhŒŖ8_ŧ¸ä9æē? Ī{/‡,ÎĄo$WKĢ $Ī…1#Öš-?YŊņü%öúž“*Ų@Īi3#ŦE#gīwqŸ­;Ā>!ŽĪÃ~ŌĻŗ¸A{k˛ Î ŗĒîaŒäqžŨĢVËĮvˇē­­˛ŲLļˇw2ÚArXs,yČ+Ô Vđ׈u}GÅúė:mâYĮ2CgBmLœāį-‘Ķ=ĢšĸŠ(ĸŠ(ĸŠ(ĸŠB2ŽÃÚ‰bįļ­uŖÃĐÉāķáų˜ųRY›irNWũs“\Ũ¯‚/n×GŗÖßėz=´–ņ4K\nMˆ#åÂįŒži–^ŋ–×BŌĩˇ~ˆĖbš;įųJŽW.į“ČĒįÁž$ļŌ|?§ÚK`bŅ/Dąī•‡ŸŨß/Ęyíšė$ŸZ†ÖĘųõ+%ļŧ‚YvŦl¤í#+ķ.ÆxŠãđžĢĻëĶj6qØ] ë8­îŌlÆĶ8pG?wŽ‚ žđĻąosŽ ŗÜŽškÉ+ų~CĒ.AÎ9Šâđ}摨irém°ÛégL”ÎånA0OŽ*Ĩ„õÛOx_Oxôų'Ņî„Ō3aÔ/_›ôŠáÖntŋZN–Pž˛Í$“3í%B€ŲQéÔz×I [jv>ĒđŦĖAÅ!d‰Up û¤ž;Õj:ƧĨ.Ĩ%ŧÖëvËeqeącŽ\3ß'Ž´mCÄšŌôåļķŽ ‚×UTx=*…Ük–ú”&Ö—OwJŲ‡į JsÆGjģâũ#SÖmôØ´īŗæÚú+Š Ō #líāįôŦI|wsŦާ5Ŋ’jo‹ø%e‘aŒ1‡ųFŪ}}ĢwÅÚ>ĄĒ&•>˜ k‹ äēōær‹ ‚2Į_JƓšåĻŖŠ_XËk4úŊ’[Ũ™¤eō¤PFõāînœt­Û?˙exxzÎPÍ“[¤’t,TŒŸlšį­|}túĻŠä­ž‹k$ŧR× É°606āgךŸÃūģĶŗėîl4͚|›“PU 4Ę3Ž ü§žN{qWuŨ#XŊņž…ĒZCjÖzw™æo˜Ģˇ˜ģNŌ8ëך†˙¡Å×zÍĩĨôWÖé Đ]’ģz0ųNAEaęŅęø§ĘŅôĩŊĻžļrļŸ*@!ÉBc°#?ļú|ž'𠾑¤i˧›Čĸ’ÚöB b Få$āsīZ~"đåæŖŦčÚôVļĶÜŲG$SYË'Ęęāgkc¨#͚‚˙ÃzĸĻ‹sĨŲéÖķY^És%¤lQô+÷€äŒäœsCxw[‹Å]$‘Ëoygmoqpeç–Äž2wÆ đ˙ƒnt›k]&}7MšÚŌbņß1Ũ!]Č!78Îk6oøŽßAĶtk/°ÉoĨęBō&’RĻt F͎÷ÍuŪ.Ņīõī IehĐĮx^)pįä%X1\ãÛŽ+.˙@ņ æĩ j§ėM%„ŗÍ4/;`yƒhU;Np;ņYƒÁž#67qyÖ™ĩƒ¨ŧ 3”Ŧnv‚ąÍ>ßĀúęhž&Ķ$ē˛Ž-Mž[(Ēīˇ ŒpÜŊk¯đõĻŖig/ö›Äg‘ÁÄå’5 ĒĻzwŽrĮÃzíįˆR7ļ×÷S]DâR —Œ"Ŗ pį<ö¨,ŧ-â cáu°+ĸ+ŦŦˇ ™7Gŗ líœÕ!āŸbíue%ŨĨôŗĩÛHûäé…*|ŧĨkéū×ėŧYu š%Ķgŋ7ŌJ˛Ō( Œ¯Ôg9í]ÕQEQEQEV}ä„ŦE­ÜĄÃĀ\ûķ¸Tök vąÅ̤@&Tį§fŠ)Œę˜ÜÁsĶ'o]Ûr3Œã4,hÁYÔ1āzԔQEQEĐęNŽŲ§QHX¤RŅHFF "¨U  :HKm 7zfƒ"YwŲæœ9ÁéI¸FM:Š)žbnÛšwzgšq “€(‘ČĨŦ‰´=>îņ¯@–9ßI-įx÷ãĻí¤gõvÎÎŪÆ´K.@XōI=ÉõĢTQE ŒŽ”´QE4Ŗ$€=čV R=Å( ô9 :šZ(ĸŠ(ĸŠ(ĸŠ+—Öüe…­Ziˇ]ü†ņÄvķÄËw?ÒÃ{Õ;?ˆvڀ˙DŅĩ9\]›7Œ÷$€däoéŽôÅøbu ģ ´­N)­Ž#ļÔ€Ī€§!ē×>ē͟†žjĶøgMÔ"oˇŧ'‘KE30RŲ,F2F=밗łŨėŦ›NēmRâ#/؃&ôEęĖwmĮãT&ø§ĢiF ÉáÕÅŧą…Į˜ îB3F>•ŅčZÄ:ö‹mŠÛÅ,QNģ‚JģYyƯ?ø—ŠØk^ŊŽ+9f{ Øā€ ąKŊ7(9ĪC‚zWEæh°xüĪ4wQjiĨ–33ūäĀŦ2qž ŸJæĻŧģÄ:‹ëŸ ü?¯_¤đ^%ũŗyėģ×q¸ŽĶ÷qĘŊ—q§_ųĐÛ5ŪåTÚņ/ŪeųšĮ§ĩWŧ×ŦÔníė6ɨÉŠu–ÎXĒ2s’@ŦęēnģāÛéƒ\[Ũé7,‰ģkÄĖëvœT×g¤øšĮSÔ§Ķ#Iâģ‚$™Ŗž=…ŖnŒ=ĢvŠ(ĸŠ(ĸŠ(ĸš?ˆŸÅ^[[)D7đN“ÛJN60=,Õ] Á-ĸxÆ÷UY7ÚËoŽ=Ũ& ĩÛāĖŌxgKÖŦŧSâ+ëũ:íĩhX\ Ē… @úæ˛‡ƒõų|+ŽésĮh“Ũę?nˇdœßŧWØrŧtÆ}é÷žÖ]ĩ×į´ˇÔn‚âËíB)lŽÆ8Î:.&Ÿ#‹]Yų'éž*œŪņJ'„+;7Ap˛(¸ĮœlÜ8ãŽq^…¨‰ÛM¸ņ ghČXË푎ĩæē„ÕoĮf­ĒčqÛi% ‹˜ŪxŲ‚™" –Uc÷[Đ×%?ĩŊB?Z8ŠÖÛPxîaũîķŊmF=xÚr}ëVkš¯ŠeŊŧļ†ŪÆįI}=‚Îâ$įwLŽ×ÃŪ"‚ëŠ֖†ßEŨ‘qˊc)ŧqĮĒ9<)­Ūh,°– xdÕo ŨšķˇāųŽÉ×Ū´åŅõ˯hz”‘BÚYÚxĖų1Ŗ UUãœc?eÁā­Diz†äFŸeŠũŗíĄÆ^0åÕBõ ’íÅ3PđĻŋu¤xšČYÚ–Õ¯Öæ6ûOŖoåëō~´x‹Â^ ×n5€ŅÛ47ļ °yņögî “ßĩ\‡Eņž,đūŠyilb°ˇšvN8ķ1Œ s´=ëĒņŊŨį‡u K(ÖK‹ˆ$ û@,1œãļs\•ˇ‡u¸_ÁÅŦ eŅ!dœ} |ėc ņížqÖŠOá_KāÍwKVÂëSԚéŌ~TFpܜuqøÖŊŪĢÛx†]zĘÅf–ûN[9íĖę<—RJļOy9Į5FÖ…{á(­`Žę×I‚T¸”ĘŗËŒ•°äũ+CRŌuƒã;ŨNÚÂ9m_Jû_ŋUmå‹g į…eéÖ­í<m=Œh4YܸH9F_^Mg\x[Åh-îFÍåļ°×§RU9 …į“ŽõŌÚiÚ퇋5̍lŌKKé"ŸĖYTŲŨ˜=Ë`įĻ+NđÆše§ørö]= î‹s>ëHå_ŪÅ.ySœn} %Į‚ĩi´AŌÚ3Šë1ę2ÛI>(ҁ ¸d…ũ}ĢjËOÖ-Ā?§ŖøZķ@đN§ĨÄĸęęc4p á@Œ’#\ž€ŸÎ¨éŪ×m¤đHkTŅaxŽžŧæ=™_^™üjĨĪ„5ˍëuœkwģũ­mž™wga=ĮáV5íYÖ|;~ļŪŠÎ{ûČ%x<ØÄ„#g‘Á'nũjũ•–ļŋäÖ$Ō=>{´.Ķ!1•%˛@9#ĩwtQEQEQEQEQEQEQEVúŅoŦĨĩie‰eRĨámŽ>‡ĩPĐŧ?káÍ,iļ2ܛdâ5–Mæ1čšüę=Ã6žžō[[Ģš>Ų!šTž@ĀČz°ãŠÅZ×t[/h÷V Œöŗ€+`đr0~ĸŸ¤éš-ŠŲŲĢÁ,YØŗ;ŦIękBŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĄžŽaxg$‰ÆÖF =ŠU*€ EQEQEQEQEåū$– #ãp˛]ĸÜÛLķĸH6¨ ᨠėáņ^>sĢ ’––ŦÉ9‘ ´l:ŠR3žGí+ÄvšĨėļ"9íī#e0Ü&Ö(z0ääVoŧO/…ü7%Í´u)ÂņCæ,lHnŨ˙}ߍ,´čmVk{é.ၧû:Á‰Di÷˜Š#Û­-įŽô‹8tŠö]K¨šļ–K8Č_¯ĩgk˙-­ŧ!wĒiŅÜĩÄs}—c@wC.@ÎŨ×ģņ†›§Åmö…ēķၧōdX×ī1^  Ã×åŽīÅ> Õ4ûЌ7w Ŧc•ļI–Xesˇ¯ļj};WŅ4[ŸęmÕfawē†xŨŧ—nc\g#Ļ{VŦ3Ņg´ŧēĘąZH°Ę^Ė= |ÍČ"xŗL{ieĖë$SŨĄo89g^G?JĐĶu;=^ÔÜŲKæFŖ$Š2œAî RģņF—cŽ.;Î/^`vĒ2v0O°æ ƒÆš%ŪõŦķO ėę‚(ąØpįn2îkgNÔ-ĩKom$ķ-æ]Ņļ1‘^wĨ‡ū+ëi$ˇŌ[>;†…KĘąąf.øÉÚ0u×~/Ō,Žtø%–V:ˆexágIsČ€ÆqÍYŌ5ëqgk9Čcs,Ė8 n8#œS5éÚMĶÁw,ŠŅÆ%¤Lë€XÆH?•A¨xĮFŌîäļšž@Ņ32Dː‡ûģØ .}ęÅį‰tÛ ZÛK¸y…ŨĘ…`⠜1Åsúϝĸëūēϧh>ØE˛Į ‰Ëô(ų\cƒúÖŦž7Đašîo$I,Ü%Āky•ž…ŽŪŋJģŠx‡OŌ^¸’G’u/pFŌšAÕ° Ŗ#ŸznâM+_šę-6č\bĸBĒ@ų†AõEgkū+]Ä:>–"™ŪōV2•ß„cōārwõĀÍsúfŠiáīø¸ŨŨ\ũ‘#ˇ•c&Iļ…ąÉQúWY¨øˇIĶ&Yd”͸Eˇ¤&!ŒžéÍfëž3‚Æ}lÅÄņjR†ķ`ˇiTôąÆSîMuāäë^mĨꖾøâčŽgŧ6ĒļōŦŧ˜F vī´dũ+ąžņ&baĨæ„Î‘ÛÆdcęøšօõļĨc å¤Ģ-ŧĘzki6úĩæ˜ņßËDķ$m\üŸŪrŧuéW.|OĻÛ­ŗFŌŨ5ĖFx’Ų ŒcËāväRMâ2;oRWžÚhüŅ$_jy€äԏâ­&å— #ųÄ,UL˜Ø¤€NGôųüMĻZŪËk$ÍēTšEBRoēēr?:sxM]@Ydķ ÂÂ&Ødūîėc?-ˇˆ´ģģÄĩŠā™dßåæ6Âũ⤌=Ež"ŌīŽEŊĩĐiY”eYęQˆÃíšã|IĢÃw⟠MĻj7Šįj"UÖŖ‰Āû­ČÆEzMgjšÅž r^JWÍqHĒYäsü*Ŗ’k>_čphgY–ķmŠÉå<ž[œ`TįŽjíļģĻÜŨ][Gtֈ$™$R…Pôn@ĘđyWŠëqjŸ|öWKo1¸,§r$Č#%Xà ŽĩčrʐDōĘꑠ,ĖĮԚ´ņž‡x[eߖĸšW™ jņޤŽWŪ‹tˇˇžb×1ˆb”{wҟãUÆJûŽčÄú.ĸÖ‰rä같-vëæĻܜ6=ķ\˙‚ĩ4+_kÛéŪŪÛX–ÚyGå ƒ9'“€)žŸwÅÁÅãZ‹Hdō.$såČÄîáčtQEQEQEįúŨ†ĨqņGCÕ#ŅŽ&˛°‚hÚudÁ.ËgŽk'ūMsWđΉlįŗ’ÎâįTû}¨–EĊ!IRq÷Q]‡¤3xuvŅn,]-ŒMyte‘ų*€ėŽy<ՏˆUæąá9m´øL÷)4S,A€.Á Æp sÚΙâKYĩž“II-͜ą$BTG…Øœ Š]¸ČRyõĒÚ~‰âXôŋAqĸ(mā´ĒŗĻv„*\rN~ƒÖ—ūĪMá¯Å&˜ŅÜŪjÉ{oš„ŧaĐã ã8SÖ­øƒOņĢâ{{Å҉´m6XP$ˆ’G+bGÎBãœ.Ŗĸčž&ŠßÁņ]i2G“pŪbŦ‰•O/fOÍÎXąãĩ_ž´ņL7ž*’ĮG5üĐũŽG’<(U _õČJÉšđļģ>‡ŒZdööš]íŊÜ1PÍxAc+†$ädöĢú‡S2ÜÅ ęAnnb3ŧ—E.°Šß:üØ\dÜķ]'ôëũ3Lē†ō[Š#7,ÖÆđ/œPËãžsīŒU/ŲęPø÷BÖítéo­­í§ˇ‘a+šņ´œ‘Įk‘Ķŧ;ĢO éÖzĻŠÛImqw4ĶŲJXŲßr˜Č?2Į#ÛÚŊÁvWú…­m5"Æxˁŧ û7ģļņģÎ;×;ĒéšÅˇŒ5ũJÛK{˜u5,āxŲr$ōŲ'Ō/|Ī C§éķ]ÅĻŪĮ4ÎŦƒ¨ËüDdäƒųÖFģŖjķGãĨƒF¸•ĩdŠ;GVļ0§Ģd äķUĩíNMÅZ|âÆķí Ŗ y+cpT1čBŸ”‚šô9öŽģĀŲ á;Htv•Ąˇ_!ĖņåŪŊwŠäZg‰­o˙á%đæ§ic-Ü6’Lŗ,Ew.ôĀ?1g­a]é:ĮöīŽSEžTÕ-#ˇ´u’1¸ŦeNrÜ ˇ§jĢ>‰âēLCG“ˡŅMš˜ä]' )ŪųĪ—ž:÷í;Oņ-–‰á)ŸH¸•´—dšŅYCû€įvŪIΧjôØYŪic•—9Ú{Œ×œÜiúËk5š‹Eš?ÚvÉohæHÆâą•9ų¸9úScĐĩ KMÕî4ÍBdm!,.-ífH^eO= vĶáë{/˛‹TBė° ėRĀX““ƒĪŋJäî帋▸ļöRŨ4ē$HxĘ’ĪŽ¤`QčžÔü'¨i—ڈ] XɁˇw#å9#>ÕF?ßÚi:}ĖWĖ`ļô:ā$‘I$…Š`G_ëKuá]jY<÷‹P‡REˇX洕L7 ˆšķœpAĮjŌ‡Ãˇ6wēíö{¨[jˇŸhY!Ÿdd0ĢüŒcōÅC/†õ?øIeÔm Ô­nĸ%Vļš%`7:“ō ôäņUlŧ'Ģ™Ŗ6ãQą–æ;…¸‚iÛÂŒõSŧz—HĐnnôÍOšŗÕ!ÔtËy ie;!‡1”,¤Ÿ<`dÕQĻëŲx&Đ跒č}ŽEUä+”į‘ß5ÜXë÷×4ÔtIôŅ­ŧ 47"MÛķÆíÎqôŦīYę7w YéÆîŪ Ņ-ÃĊĶDāĻãĪS\¤úŧū ņ&Œt‹–kģöš%IpŌÎíÜáG>õąĄj:ߊu­ļWV–×z°Žá€ ŋ,}sŽ@éëUaĶõČõ_HÚ ÁG‰íîYY2Æ#žWžkˇņn•6ˇáSLĩ“d÷6ímœsØJāŽ|/yâ ‹Đ^ÃT‡J['ģ¸ n(TˆĶ•$qŌĩcŌĩ=sÄ0_ĩ„öZiŲq€e•Ā•ëYúvŽÚ\ø(>‰t°čņKÉ „î(ķrž˙ĨC˙æš.y1ĶfŠHŧDē˛BYs<[†@Á끜jØŅ"ÕãøĄĒę:5ÔV:ŦIÄŠTØßį‚}9¯BĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸš{XŨxĸMuîn÷ʑŦļÛĮ”ûW#āķ€zŠę(ĸš¸|)i‰nĩ¯ĩ];\ēHöîāĮŊj1ž==yôŽ’ŠÂ›ÃíũŠs¨Øę76SŨ„Tu}ŖáÁĮĨ[Ō´¨ô˜$%–gšC,ŌĘAyāqĐĀíZTQEQEsvū6ū,¸ņÕnšYĐDđO/ËÚŊ3Á=s]%QEQTíl-lšy …Qî$2JũKˇŠ?įrŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ+Íŧ[}&‰ņ/Ã7SŧŽŌīÎ6ūkŽÔųpƒžOã]”$Ōntë›øī#ō-‰ŗ‚Ļ";0# ū +Ō'ŠōDš}“ÆĐ:Ȋz6Â2AõĸŗņĻ…%œv÷næņK[ūåĀp:qŒZšËÅZEũōYÛŨ–BÂ"Ҟ¤ģ~öÆ# biuīé^HdÕ§’æmĢ …ŨA'¯z¯'tl§ģšõĸŠ /™ ŠLŒ‚AއĨI>¯Ĩë?kŅíu)õaķ@Y$EėĀ‘X_5čõOiļ×ڔŗj3FážBCąÉÎĄ zŠÆ´šü1â/|Sw§5Š-ᾕŒŒˆĨp™ô?Öģæ×tģiŌĘ}F1sō'ĖpK61퓑ĮŊqū×bŅ|Mâ›Mc\‘í ē‰-ž×.†cĪa–×g¨kēf˜č——‰HģÔXíXā/šâĒëZ•„ļe:ĢZÉs K ļīķíî§>õđÎöīRđ›y}s%Íā÷K!Ë6€ÍløŠŲ+¯ŋÖôÍ6EKËØĄf°ĮĸôÜ}šâ¯ŖĢ¨e!”Œ‚AŽ<[ $ûZЌúw‰­tøŪėn+}ŠzÆz֜ž%Đâ–X¤Õė’H\G"´ę 1ėyāÕĢíRĮMfŊģ†Ū78V‘Ā }­6×VĶīŽ^ÚÖú æGHä UOBqØÖ?Š Muâ=ÂaÍüQ1Uo›8Ã}ŪzsØVÅTI wt ĀŽ$`ĄīRŅEQEQ^uâģ[‹ĪˆŪģŠÂö{}5¤k‰ŨŠ.åH=>+:m3V{?ų“Fá%‚•e@  ũî¤ ą Økū97'KēV0[nTeQn ųNqŠˇáŋ jZnŊ§Hæ%ŒĪkĻHG܉ūlÅ€˙€Õ? h cĐ,õ 3V[Ũ!ŗžIvÁĘGŪŽ=ëKâØĪƒ _šNŖj{÷ƒŠÃ×<7Ēø‚_ęvöwÅy§Cmmo"íyYãÁüŊëGK{û6 tkč-ŸE[t’XqûÅbH>žƒ=k/DŌ5WŌ<Ĩ}†ęÖãJŧ7wŽŅ €1Ā=ļė`zŸJn§c¨ŋƒ|Yhš=˙¨j=´bKĄe;Ŋ¸S֟Šéz•æŋ=õ—öĨĢ´đ:ZÉjdˇšeT9lŨ°éœŽ•§ms*|DQ¤ę>ĸĒ–„Z9ķqŪ:nĢĢesˆRšMY,otˆmAļĩ.ņēd4lĨI\į9§iēū֚u°Ô.,įŅ–ÎÚ&kÆę~ã‘Âį9ÉĀŖÃšõ߄>čūn…}$ąÜ kˆJĖ!œü܎G#§s]öēå4 A–)dsnáR$,ĖJ¯&ŧÛ֗vößm†‘} –_ĩ—ļu–‰—“ŒrÆŗ!‹TĶ˙ą¯?ą5åĩÖgš[Xām‘‡ F[w9Į=Ēæ¯Ļęöū×twŌnîīfÕ>؏%ÔÆdVÜšŒuü+Ö­ĻÚE(I2ÚęU‡Įcí^M}iy.ƒãƇFŋkJø}™~Ęų•\Æ@áĢF{ "ņ6ŗ6ĨũĒē~¯aPkc!ÂĄ ŒPķžqÖģ¯ Z>Ÿá­:ÎD‘6JûŲ@{1^yĢA-Ä~?Ų¤^´Ú‚Æ–Œ,äĖÛc ĮŪ­2ŗéšüēĨôs[^hą[BvI;¨į<ŠĨkĻjŪÁōĪg=Ė֚}Ė/åÆdŲ+…1Ŗc í“Į×xŌÚō÷Āĩ´0´ˇ“Y´b8ÆK9ĀŽB˙FÔ|A=Ēé°ÜZ-ž…5œžlm2ē€#Æq´œŽŖHŸYŌ ˇˇMY5H4Š­7\'“ ҁˇ;Fü°ÁEkĩû+ūël{~aīb—Å:5Ė:ļĢiĻh3%´š3[Zĩœ?,ŦʼnF=sĐOZˇŖžĨs?†–M*îßʲžÛÍkvWČĒ…˛8É kKmNĮÃ>ŌäŌ/æ¸ŌutšöDļgCą,§6sž+Đn8įôæ ēŌ5Cáëŋ yW Ģ\kiK)ļŒĄüŨũéœņŠÄļ÷öIãÛ_ė›ë‰uCÛ<03#¨CĀcŒ:Ķĩˆ/n¯/%˛ūĶĩvŠÛeŗŲ™`ŧeE!H#(ÁœŒcÚģû\]øŽķC}"ę(íĄY>ÚÃ÷R”~ĄŽ†Š(ĸŠ(ĸŠ(ĸŠ(ĸŠæŧYቚ›ÄVĩ¸ˇ‘š„Á{ ‘É‚6“ž}p*·ĸ.×× Ņ›ŲDŗy1ųhP *ķØuîkrŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŧËâ]æģá‹(ĩM3ÄIöĢč û;Å$jŲÎߗ=ģšŅņĢęÚ‚.ĩ zđŪ[ĸ°gH˜>Xg#gĄíRŪ&ĨoaĸĒøąmŽ'¸ŠIMā7 @ĖhIôŽĩ­1/M“_Û  Bų&Qŋ' Å7[K‰4[Áku%Ŧâ&dš5”ž„\˙‚ü@ĪđûKÕuŨA<éŖ&I¤!wĮ°īô­ų5ũ/#ÍÔíí0î™G˜=šæ‘|A¤=´—IŠÚ40W‘fRĒObs×ÚŽÚŨÛŪÛŦöŗG4MŅҞãQŪj6Z~Īļ]Áoŧá|Ųįéšä|iâ;‹[ũ3JĶ5+kI¯ †K‡uũØTÜŖœ¸ãœtÍoYAŦÉáHĸÔ/R-\Á‰nmÔ2‡õŒĘąūø•õ Y6ЍÛÍĒÉæPĘŦ@rÚ=€ŽŠß[ŌîŠ-žŖi+HJ I”–#¨ķŠ’-RÂ?ĘŊˇ#ũnŲAŲõô¨NŗĻË 0jv[™NÆķ”Ž;õä į`ņĮ‡ŧ-g6ŋĒX_ßÜ]RX,ošđ0Ų'é] ×4ČZŽu;$žDĖŖp#¨įfËQ˛ÔŖi,ŽāšE;YĄ8Đâ˛Ĩ›Pę–NKvYĖCAŒVŦ•čpK"’ ¤ˆĮ^Ĩ[Ž~Iĩã’=VÄi‰lŪu‘ĮždęŲpEhÁĢ顅ŦĻBB™Ib:ãžjã2ĸ–b’Iā á5Ÿ‹ß øŠķBÔ ŠįK2Ũ ËæPIÁėI#>ÕÔézŠ]höōŊĖ-qödyŽáōąPI#ˇ5KÃ÷—6ērëÚÅ…ÔæV_ĩ@Á#a¸íļq[°Mņ‡…ÕĐį § ㊂īT°ą–8Žī-ā’S„Yd [éšlÚŽŸov–“^ÛĮq&6DŌ€Íôŗjļ÷BÖkËxîȉäˆúRËŠØÃx–rŪ@—R ¤- ßAÖŽU;ŊJĘĀÆ// ˇķ͐.ãč3֚5m8Ädû}¯–ao9pĶ9ëOģÔlŦ!Ū]ÁmŅĨ(?ęVPŒˇpF&˙VZ@7ũ=k.oØGâ[]K K4 14|ŧ¨QŽåŗĮŌĩîŽíė­Úâîxā…~ô’0U‰ĒÖúŪ•tÛmõI[g™„™OËũîŊ=ęX5;ĸĢo{o)|• *ą8ëŒ#Ôlfķ|ģËwōš“l ėúķÅ4júk2*ę„É÷™rßNyĻ›ë[Ķ=ĨĻĄڕHÄnŽŅŸ]ĩÍx+ÄrÜé7g\Õmšæ+ų­Ņ¤)eCÅiZ\Ũj’ĪŽYKĻ$)åÚ)Pöė>ķ9ôúÖ´ϟu"Įo}m+˛îUIU‰ Dē•ŒBÖ[Ëxî4€1¸ëS[ÜÁwĪo4sDßuã`Ę~„TôQEQEQEQEã˙ĩģ GOļŌmgiîíīãk‹xáfŽNN;ZŗãųôY|s‰b$žBļömŧ€Ã?ÃĮCSxĢSļÔ^k"ØũĒĮW“RĶŅĐîo鎠XãŪ¯ëZU֕„¯U„VQN÷„ąÃŧ,˛.C˛÷ąŲŌxŅmâÕå‚âæâÖæôÍŗF#W$|ŞįķŦÍgū%ŸnīõfO—I1Z3Œ¨“?2˙ŧxú×7§[}Ž÷Ā0밆š(į7^d[ļ†\Bã°8¯eŸåĩ—ĸ=ĢÅt;YBđ†›i ÁĢŲęs{FUâ„._ØŠzæĻŅô;mcÃ~)ŸMˇuÖãŋģš°Ę˜ŲC¨TqÁãÜÖˇ…­-îõ-ÉžIdļą{{›HmvlRŖ"bIįwN=jhãO“UˇÔ­c[M iíí%uÎčä;ķ͞?\î™-đûÍ5ļa´×™î7ß.2ō°Įå1]Žmî?˛ôŲX/Úôû…ͲŽ7Ã'ɡ§úWq hÖē‘ Ĩ­ēAÆéŽŽy$úōk×§´âƗ*¨-›sĪōĩI ã5āčoluû+™/#žĩKŖZ˜ŽmS‚Č ĐÜ×}á¯ØøĢIūаY’!#FVdØĘÃÔW-¨\دÆ},ƒņ§M ĖŖ’ĨTŸR3øW,v6ūž[x|ĢĮņA–6Xˆe„KÃŽo>œ×ē+Gsaĩâ‘r;†WŽ[Ŋĩ‚|_Ļ&ŠöY¯ˇ0€‚Ē[÷kĶ'vxĐÖÆ›-”-đĶAnē4‘Ũ8C†|! ürÜ1Á÷Ŧ*7o i6ĐŨ6ŖpŦ?‹0Û\øR+i“|’]ð*mĸE.F:q\åīö7ü$^0e‰Ŗi­¸ōŽÃ&ÖhĮŪûƒŠąŖÜ$~ÕuyŋâYƒöuyÆB\‚ĄÔī1øłÃR-…´÷‹e1ĩ™Āžļ2B`yNČØã(Ø˙*؂hŦ|S¤Ū]iQ}ĻMˇŖÎųüĀ8$gpPz^ĒEÚ]ŌJŠČbl†jņŋÅūđ$zR/Ú`¸iīÎÎV ­ŧšūéøTūĐ´ũKÂZíŪ‘˙nZ\^ĩ¨RUI¸.Ą^žüÖŽ”–ē‰ü)K{m2XõDAō¨* $ƒûÛŗÁ÷ŠÔåeoēAú‚Œ’÷Ŗzã;†ŊdëwÔiãGŗˇ¸I.nši6ųqweõ5­¸d ŒžÕĘŨx‹Qĩø§čŪØØŪZÉ:Ę ķN öęksWÕ­t[5ēģ,#iR 2K;ķ5Ą\ŸŒ|AĒxxé“ZCk-­ÍäVŗ woÛãՂČé@ ô4´ŨÃ$dduĨ ĄéIŊOqųĶŠ ­Q•šÖKË…€\Ž–Ú9õČ5{pÎ22+“ņGˆu=XĐ᷆Ö[=Bņ-$ßģĖBrIãÖÖ~ąĒ[čÚdˇ×$ųQ`¸É$€Ī|‘XĶkúŒ?l´3š°ģ´’á$ķLnĻē‚qրr2(9ĮkƒŸ]ņD>7´đį™ĨŸ´ÚŊ×Ú>Ī'ĘãnŨũ}ķ]Đ81ąųĶé7 ã#>™ĨĒō žŅ,ˆ!ķ‡'Ѓ\÷Š5ÍOFÔ4Aj–¯i}}¤ĸ@Û×vNAu9æŠLķ\^­â­]uéôíMKÃdđ Ĩs‚D™?)ÎU'žĩŲ6í§ncŒôÍp§^ņBxę<šV$ŗkŗ:Á!Ā ˇn7uükSÃ~%ŸTÖĩ­ö’÷Kt $$ė‘\eN ņČŽŸzíŨ¸c×5ĖøßZÔ´6ŠĻ‹Y 2 ‘'V;•˜/ƒÎjüwËøÆÖļãFû(a>˙Ūŗ÷qéŠ×ÜyuįĨ(`z@ ŒƒÅ4HŒ ¤ ;pÆsY:Fģi­I~–Ų˙Cškf$Œ3(#ۜVŊQEQEQET3Īŧ4ō$q ,î퀠w'ĩy~ŋö_ĨŽ­§ũ’Ūiī˜—rĘw>mŖ8?vŖ°ņEĻšđe<ÍF;{ČŖŽŪlļ⌲*ëÔŠã>ÄÖ§Ãv¸‡U×-.mŦã‘ŧ™ŧË ˇÛ˛• mÂxÉõ­ņ:Y~kt÷04‘1lm”ƒëšãl,tqâÍĀŪo´šŅL÷ˆ×$ŦԌa›žŧš‚Ę÷í~đUġŽķĻ´° S¸ÄÆ<đ­]ÕĄžÕutÚJōjM¨ÅŸrŦUbJ‰7A‚#ŠĢWš•ŸŽü9ŖĩÔŌCtKM1Ūžœŋ ŽuÖ-_Á>:”ō\4>!û(fXŧĮ$@9¯]đäöˇ:ŧ–ēZÉw,pŦW9$į8Îs\ŋÅačÚ4rģ$oŦÛe8 däįé\Ÿˆu-GJ¸ņ%†Ž^=/,bwG!aÄ 7đƒō䎙ŽÃÃ÷Œĩ xŽ­„ÖÉ*Ų[ĘԈ\nÉ ŪžÕÔëŗ]ZøQžÅw]Įm#¸Î\)#õ¯0đ ¸hü+ĒÛT{Ĩtŋhy%ģ,¤ļõÆŌ3ĪJv‰kĸÛüAkC+MĨŨJ÷l†\Ą™p˛Gœō €TtëT5K[(>!ĩŧŒ—63Į%‚ amŠrƒļX‘Z%ĩrķ_ûkÃk}kkļ’âáâû.b dUįæÎOļ)÷Mu¯ŪøŽWRŽÆ{;f°špBF7<ǧ–ČĪQĀŠm ­ˇŽu]DŦĶß.›göffei$uq’™údvĻxmu ´Ũ[ˇēļ]AŌSv;<ˇNQ‰F\pU‡NØŦØîlåĶ<{qp?´îuA%Û;|ĖFũÛŗĶô¯Sĩņ™{¯Ūh°\‡Ô,Ņdš-§å§=Qų×)ņfÆÎãÖRŨFXŽŖnŠÛˆ Aģž:wĒw1č÷Ū?đũĨģ¨ĶĶMē@ĄĘ‚EÎrFAúâ˛,õ;ëÍ Ão ŸM—Sš†áĻ”…`ŒŪR;rvŸ~¸ģoEsjÚÅŦˇpOw{ HēĀŦ2cÜG8ũ3Zū'֟ÃŪŧÕ#ŗ’ņíÔyō@ūĩÉX_ËĢ|RĶnžĖc#Cßq!ŒÎBG~ŋ•bꗷ/ĻøĮPš.šå– Nü耨Œ ôlķëšMzTŽ_hM,2 2Ūâ$32í”Ŗd Ī÷Ŋ=(6zŋ‰|)ŪHĻ÷Cq;$ÜČB(\ķ×'?QSĪĨÚZxˇ[˛kÉÚ M6îXn”nÎŪŠĒÚĄÕ,ŧ ũĶLŌé2\Ü$ėRaŪÍ×x=Ēú~Ŋ§áOÅ=Ų–æßW€Jōŋ'år?!ŠŋÖĸž(MCʆëOūŲhžŅ ågs&ÉđʤŒc ×ŽņļŊÔSÃÉwowČEÜKķBų@wf<Öׅ´ũ6/‰ū%Ž$ļ4_ŋcķ2ųķøô¯I'åēÅÍĩׯí>!¨ų6Žęe‚`¤äã=ēUßéÚg†ŧ'8˛’âĩØVIÃīyŨ˜ŦvĪĘGĐvŽq5ŌüwĨNc6ą™$ĩŽ'&8ŠÂ *{|ÄcfSIĩ°øMũĒ5)Ĩ’ūÖÆ7G—r—)${ōsė+ĄÔ¯­l~"ŨΡ.‹˙ķĘūSä– Á œĀâšī ^Įoâ-;‰ƒ[ßin“qŨÔ!p7ášĮAYvŅÁgák+Ë[ųņüFÖÂApK$&FRŖŸģŽkfūōëLOØhšŠŨ-Ūã“yr4¯R8ÉúÔú†Ÿo—ĢÉ֜ļRčŽÆÎ҉ũâr’“Æœzœ{Tš[[xÂvipΗú$ŸlRDÄÆîzōi>"ĮTš‚ÚŌ/í ‹ËĐYOÍ (ãBqŠõĒ(ĸŠ(ĸŠ(ĸŠ(¨Ļ†+˜^ŖY"pU‘†CB*ĸčzJ.ÕĶ,•qŒ u˙ ri:tyŲajšëļ%ķéëRÚŲZŲ+­­´0+ļæ POŠÅ:âÚ ¸L70Į4gĒH”ūĢ J#Mŗȁzzt čúiDQ§Úb2Z1䎞ãŽ+Í%ø{öˆîÆĄáˆ¯uk‰$“ûJ+Ī)73­´F8čJô=ĐXŲ&Ŗoo{yonĩĖąfĀÁ9<āķO>Ņ ŦļĮI˛û<Î$’/!vŗ„ŒrkF(bļ"†4Ž$Upz)—VVרŠuo褐˛ ` wö$~5ZVŸƒXĮen–ŒhV0ƒ×#Ĩ~‘§i1´z}•ŊĒ1Ë,1…Ī×z˛âĐtx'–x´ģ8å˜#Ŧ ƒÔŽsR Kˆ!M2ĐÎäۍ§ÛŽ+‘đƍxž(×o5F——BęÖiZ)<°Wor3Åuˇē&—¨ÜÅsy§Û\Múš%Œ1_Ą4ûÍ'Nŋš¯,mŽ%„æ'– Åą=)_Lą“PK÷ŗŽã]Š9ŒQč­6 #Nļŧ’ō xîdÎų’ ŗ×'­1ô=&Frúe›HųNæĪyëPÚhŅ[ëwšŦŒ$šDjB… čžį=Iö­›X/ h.aŽh_īG"†SõĒļ‰ĨÉŗ~›hÁUĖ+Ā:b”hēZÚÉh4ëAm!ËÄ!]Ŧ}Æ1V-,íŦ-–ŪŌŪ(!OģHGā*Y#IQ’E Œ0U†A Ĩ…Ĩ‚´ĩ†Ũ ÉXŖ åQKĨéķ^ĨėļVīuܙĸ×čzŌ]éuôžuŨ…´ōl1ī’%c´õ=š4čšTI‡M´ŒÃū¨Ŧ }8âžÚV$’Jö­$ŋëĄR[ęqÍ Ĩiΰ+XÛ0ƒ â?÷xãđ¨“BŌ#PŠĨŲdž.~ņęzuŠLąK”¸[;q2gl‚1šrrp}É&¯Uė}7ûCûCė6˙l˙žūXßĶ~”C¤i°^5ä6ąŨ6wL¨sžš8Í^ 0Á˛×Ã:Œ.`>–Éūr{+[‹_ŗOmļøĘtp: *Ņ´ÆN´!Ô#~åy ÕLd”+ ¤õĮTđčÛv˙dØíÎqötëëŌ¤ƒHĶ­fy­ė-Ą•Á ņÄĒXš RĻ‘§E‘E§Ú¤rēŦ*R1Í7ûLYc•tëA$da‚¸éƒŽ*htû;{‰n!ĩ†9Ĩ˙Y"F?Ô÷ĢTQEQEQEQERģÔmlŽm-į—lˇr \š‚–? 5vŠå¤æŸĒø‚k}ę÷HĶĨÕ§ˇ›Ékh›i,ŽÕĩŗÄŽčQ™A*OCéRŅ\׌üK?„ôQĒG§ũļ‘R`&ØČ…psÉ­MRōæĪJšîÖŲn&7ˆZO/ r~lÕĪØøĘķQđۃĢÚhWT•RHâ|ũ™ ģr+ąŽb˙Ä×:t­M45žĸ’îÄ܂‹–1ôīŪˇ5 ûm6ÍîŽäōáB6 ę@=ČĢ@斊+˙\Yęm§B/nôėyļåüžv†Æâ1÷Nj_ę˙Ûū°Õ„w”F[%sÛ5ĢEQEVOˆuDēÔmmcš{hÚVåōÁP2yÁįŠ~Ēmh6Ÿ•å}Ž›fsˇpÎ3Ū´čĸŠ(ŦTēŅôŖwgĻ\jSUđ}ė‚~‚ĩQ‹($`‘œzS¨ĸ°|E¯ėPÃlno/e1Áí áK1' .—Šßjž‡P{Z^KakrJíoF8Č…súw‹ĩÍKÅz†ƒ‘b’iŪ[\Ę×lAWįå98õÅw4QEQEQEQEW–OwĢøŸâˆ´_ĩÍk—h­gJņ+ČŨʐHöéY:ĩÆ­vĢž!k‹‹ Ī1ĩ‘ĸTûÍŒį§Ŋ^ŊÕõ}_GđÜļb{ëŖ`d¸ļŠčÛHîU?x§Ŗã=Õ –ÛSÖüw{ĢD•ËNīpČęŅŽÖčx9ÎqÖŊ‚ ˆ¤°Žåˆš!"ŗuÚFy¯ŌÜõęsĪ­u—ŗ^ë^,ēŌæžēļĩ˛Ōcē€ÛĖŅ™elåÉx c:Ö—ŠkšūĢāį›Wž´­ŒĪwOĩ[ËQ—9Ī´č÷ 8Ē:mæŖŽëÚ]jWÖ̍hmusoÅđTŋŨëž+¨øqŠŪkąģž˜Í9i#2ŦŲA>øŗuK›Sâ4Ú$÷7Ö6ÚYēˆE+GžBØÜHëˇĶĨrļōIâaāGRģŧŽæęiĸvŽvL„FÔ…°2{×ŗ(€g€1’kĪ|#*ŋŏā‘öPļʏÄ-}STˇŌ4ųZ;íxė.îĄr 72:dár­PēūÕģ˛ņ†•§ŨŪ ŅdIl%IÜ1ų4Eŗ–čz˙xSu Rú?iˇWû5[˜"mÃbŪBģ.~îH<öVՄšÖ‹ĢjąZ[ ØZÚ9í4ķz^@ÛļąŪÜzõíZÚˇâ=KU’ [ÃOĨ[Gå”ܤĄÛ#Ž?ę¨ĸŠ(ĸŠ(ĸŠ+SđžĢŪ%åŨŠ7*ģ<ØähŲ—ûŦTŒcI?…4+™ážM.ÜÉb%;1ōŠGp= 5|# ­ŦËĻB‘Ā‹nA@NNÎyámPˇĩ‚įM‚H­r!\° cąīë[5XÄa@@1ˇcŌšĶā/ –Cũ‰kōMįŽ?¨įôéR^ø+ڋL×zEŧ3rAn9ëÁātŠ.|)ĄŪLešĶa´"ÜĀwĀîiÉá= 9ŦæM:!%’íļlˇî‡ įŠ€ø#Æ;˜›J…ŖšrōŖU‰9l{ŸJ”x?A[ ›%ĶP[ÜĘ&•72ųÎCgœŽkZŌĘŪÆÎ;Kh–8#]ǃĻ?­fŲx[H͝#ēļļ*ņnōU¤fHw}íŠN>ÂĄ“Á•&GŌĸdž_:UÜØwūņë[VöņÚÛĮKļ8Ô*‚IĀ95˜|5ŖÉ=äæÂ?6ņJÜ0ČŪ3Đ÷ĀÉqMЕŦtøÔØÚá˜y?îķO‹Ã<:‰ŋŽÍVræLnmĪņÎĐŪøÍ`üGļšžŌ´Û{m>æđŽŖō,1ī4`[?‡į] Ļ‘Ļ}‚hÖË÷WŠ é:–gČÆvOŒ•øKC[ ŦŽŸˇ˜"ģ3n $œāztŠfđ֑=•ĩœļ1ĩŊļ|…$ūī#)ÎE á­"M=,žÆĸs"íbXõ`Āį'×4×đž‰%Ŋ­ģé°­Ih¯Ü'ŠūũjāĪîŖ:MžË˛ āƒûÂA<õ÷ëN> đų2ėĢ|ËŠCƒķ ėyæ´´ũ:ĶK˛K;( xøHԜ/Ķ5FßÃ5ލu,Q.KČ'hcÁ`šÚ õ4Eá­"ßTūŅŽÅČbĘrHV=YW8÷ fŖ›Áūœ\ tģw2yŗ$~ģˆĪ&¤—Âú4÷y%„fáãōšL°%1ŧžÔƒÂš"iąiЧÆļ‘?™jHōÛÕNrŋ…#øSDZ‡ĶĐũ•‹Cķ7ĘĮ’Ũy>įš|áå˛žČiq}šáĒŖÚėrFzįšž÷ÃZFĸé%Õ vHÄYÃrál˜{ŌĪá­ę÷í“XF×>_”$É'MŖShúĄ[´eĒ[BĮq ۟`zS5=MÖ6žĩ<`Ǐb­´õ\‚qŌĄģđĻ…xöÍqĻ@æÕBAÁPãĨi]ŲÁ{i%­ÄaāmdÉ…d'‚ŧ6’´Š¤Û,Œ0Π‚ßSžjX|)Ą[iĶX[é–ņZĖūcĮã/ũīcīW,´Ģ->Ņím-–(œ’ār\ž¤“É>æ”i6 Ĩ ,ZÅö” +•ÛéŠf›ĸéÚB2ØZG|n+ÕąĶ$ķZ4QEQEQEW&ž.š_¯†nt†…e…į‚īÎ $E˙g~uÖQEV>ĢŽ˙fjZe˜Ķī.~Ũ)Í7$8˞ÂĨŋÕĨ­ÛÛĮöšícŪöҏ‚2:ôāĩ†ĩČüKáë-b(ēMâ7 •äŽŖéZõÎëū+ĩĐ´KŊU`–ú7)pļÅIŒŽšÉ8üënÖuē´†áTĒƊā šžĄ¸’Hā‘ã‰ĻuRV5 >™ņ(ņę ŲKg-…ÛZËŽ,9væŦÁŦŧū#ģŌNŸt‰o J.Ųq…ŋ…Or*Æ­}&™Ĩ\ŪÅj×-ō•–¯'Û&ŖĐuxõũĮU†&Š;¸VUF9*cZtQEĘjū4ƒLÖ„v7…%Š+‡„gÉisˇŽ§“č+ĢĸŠ(ĸŠ(ĸŠ(ĸŠķ­Uö|lĶ$yR-fÎ;šŦ­7Śēę^ģģÔ [ę7Ep8û;"‚CGŒz}jĖ:į‰uču=[LģH>ÅĒ‹Uļ‘Õ")™˛2I΍ö¨[Ä>$ÔíuÍ[N7>u…ų†CFã 8}Į9#'?LWĻÄÆîÅ&&š r„er;jņ;Ÿx‹CÔŽ-/uBDŌĩ=—ŦBüÖ˛cËoģןŌģē×4øDÄúŊĖĪŠ_lšI’?¸ČX/ ÛqU|<%ƒÄŪ1šŸU眭ɎHĨVB!Ü ØgĐVOƒuWMŌ<ļņÍĻĄ$–ŌÛāl •#žr3ŸzõëˆŪ[i"Žf…ŲH Sę3ÅxĩĢ›„Ū*7•ÅĖŗÍwļ9prP dÉČĪ?JęmõíSDÖ~Ësto-†‚Ú€‡ËQąĐĩp3ŒõW@×üKržÕHšžÛR?éÂ_-aŒ?Ü1sž:wÍzxnŦúü~*ņõΎ"’+Ymfš€ƒēxÕ2cėFsëŒW ßxÎŪ?†søĢJfD´ķ"ˆr¸8ô'ŸĨeZßxŒ0S=ø´šĶcwrąŽá@aąGU#<`Õ}_×Üx6KŨDĪũš žz"=Ęˁ׎sĮ4Ī B=ÆWé­]ˆīŽ„eÄgæFîú(éŠeįŠĩÎØ_ęWÂ(oí5Ë¯ļ™–`Pü­>ÆwI'×5Ōl—ūô˛ęˇI Zt ¨ģvüō2íÆŌqŽ{Ö\^)ÖaŅŗ^<ˇ7#}-.Ų1E¸Œđ1œM?\×õm:ĶÅú|…Ā“H†›[ļ ĪķŽQ¸ÁįÛ85¯¤ęzŊŋŽíô{ģöēˇšŌEãyˆ Į&ėģ@ãžųŽáÎÕ'ĀÎ+ĘmŧUĢIáĢ_ĩÄí%ÎŦ-‡#!@ c;‡>ĩ§āí2â?ø­åÔîĨÜCš$ ‰Iˆa› :vÆ+Ņk„Õ ˙…Í Điw$}Â ēˇžģøĮ$båíí×F[*‚Nd;€Č#ŽÜūOÃúĻŖsáĮąļĐŪX`Ôgĩš{bDFęebpHô5‚ŧŊJĪÅēmöq•ÎĄqįJYaRĒ6’†Ķ#ŪžÚ-Ģ.‰c-ÛĻ…Ļ]Fmby„ˇŗųIį„įp;WŖÃymq,ąC^ü~bē/ßęÖI§E­\É%ž÷3HY€ņ#œÛÆ1×ڛwâ}^ûFŌŽlžîęOėՖé4æ_2)ŠŠÜĘ~úķĐWuáģĪí/ 鷆f•ĨˇBŌ2āŗc‘ëœ×œĮswáÍgĮēŦ—w“ØŦLMĨdc°:.{v¸×zŒ֙¤NæHõ].IĨœ8ߊۜpqĨGđō?ęvNģ{ŽÉsk5´‹5ŧƒī6ō‡ƒšôj(ĸŠ(ĸŠ(ĸŠįįđn‡uĢV{6’ôŠ_1ĻsōžŖÆ=ēU8~xrkkak3GjûāpįËõ Īž*Éđ^‘ũŖ-⠈ÄŌ fˇŽfXdqŒ3 āž>įÂEÕÜ×Šį¸’xŖ™’9˜wtß×ŊmHÂŪË0AÂF2~€VuĮ‡ôģīļI= fžųû¸-ŗîįéQęŪĶĩģģ;›Ī´yļoæAåÎčŊp3Q é#SģŋJ%ģɕDŦą]Ĩ° ˇŒõĒŅøÃņ-’Įo:Ĩ‹īļAu&"oQķWQ\¤Ÿü>öזÆŪqovĖŌDˇæmĖĪžN*Ė>ŌĄÔāÔTŨ5Äy^åØyÜ žG֛aāÍ'Oē†XEÃ%ģ‚ŪIŲĸ…uLāu8ôí[—P-ŨŦ–ėō"ČĨKDåX}čkŸąđ>“§^ŨŪZÉ|—‹ļáÍÛą“Œ äž@¤Ō|ĄčvōÛYGr-&%ļ’áž'Ü0r¤â§ˇđ~™oo$ %ãŖD`C%ĶąŠ3ÕPįåĘĄ‡Āš4Ļ<_kSĻgėƒíOˆāĪLqShé6Ą"Å*ũŋœĸf 7ãyQŸ”ļH¨ đ>m ÁöȌ xäK§ą‚NÜƒĶžŸJ”x7HKÕģŠ;ˆ§[qj­ˎ؇đ€īõ̚cáŊ1tí8HļĘő$žÜõžÕGTđV­Ū-Öĸ/&t‘e ܁"qŅ•CaOŌĩ­´ømė>ÄZY⠃ö‰ …ę nHĒ:w…ôÍ2U{u›‚ąG$îé=B)8^8ãĩS˙„@6`mf6ŒĀų_h(ÁČ€ '3WÂúdš”zƒG1šHVŪ{üʧ+쟘ƒČ&Ŗ‹Áú-ŊŒöqZ¸†yūĐŲ™Ø‰sā’Hlķ‘JūŌfĶ.Ŧ.a’xī5ËÉ+y’‘Œn`rz:qM‡ÂTĖŦbëí°F!GkŠäÂA8#ž+ĄŦü'¤Ã~.’&û@ƒĖo)eūøN›ŠÚ†4Ũ/SšÔmVušš9™šâG}H$Ž;zVåsĶx7FŸP]BH'kÅRĢ?ÚĨŪ õîā{ ģĸÚę&‘ĻŽXÍ ĨÔnAÅ:ßG˛´ŌƙoClŲ[“’wœ“ß9Ŧøŧ Ãmsm¤‚ Ŗēâ3q!ž9lˇ'ÍWąøyá}7V‡TĩŌ’;ČXēIæ9Á#āœw4žđĪöfŊŦë2Aŧڔ ų1Č\aIų‰?Äsž8 ču >ÛU°šÆō!-´ęRD=ÅG—go{qyA'ž4‰ÜwTÎŅødÖ#xÃīksjö÷-Ԟtč×r‘#õÜ~nŊ?*ĩmáÚũī’ŪG¸’/"G–w}ņãH$‚),üŖY¤Š2˛÷?ZÅĩŋÕôvøƒĒi¯ }Q2”–2ūv|žÜzz×CĒx§Rē׎•`īkåiévōGlggwûŠ€šéŧ-Ē^kŗžÔ,ŪŌņԉĄu*U đ{qšæ5ęø‚ęÂhí4ÍJË#ÆŽf%Fz/o\š¤ž-ņö:všŧëRŲ‹Û§†|ĩcō'?(÷' ›sã zÚ˙Rĩššļˇ[k/ļJâ ßf@HīÆ@횷}ã[ų4=ÖŨkZ…°žq{Ú azn$€3ĀÎOJŽOxĨ5 /Mˇ6˛Ũ^Ųģĸ° AP w#sōāqšWņvž–×qŨ‹kkÁn5&P|Ė X—°c'ߊ§â C[đĮ…´]ZHŌ÷Wn/BŽĐGûÆØEz„-B SPP¯B;b¸jū$ąņĻ“ĨéWVĻN)ąĐķF įvyÎzVQņ‡‰¤šžĶļŧĨYĮ$ņCjĶ-ĖėĨļ>čÆ}M[›ÅŪ “Yĩ€ ėt´žh§Œg‘ lôqõŦíSÖtĪ xĪJš`ÔmÄ.˛Ã¸Š–ŨœūžÕtxĢÄ/}>‘7—ЧŲ,×?gĩiÖY[;T`|Ģ€2}ũĒž¯ņS°ōÜDÚi’Î9;‹FxüÖÎå‘Į1qŒúķR^xúęßłÅīdŧŠ’KRb’#ˇs,Íܞ zuq—úöŖwâûíOmO°rĘņ‡23•yč¸=뙓TŊņfŖāmZÚę;cyįíFƒĖ:ÆC÷ÁÕę‘ĐDொˆŖT`ĀWŦx—S—ÄšŽ•§4Ņļ›j’(ŠÛÎ3Ę␠ŒŨO„g=˛8­?j÷z>•nö@,—W°Ú´ÅwÛņíüÍ`Ûę^(ŧÔĩ˜ Ô`:QxZá Ĩo,8#ŒdƒÚŗ‡ˆ<]˙ õüPזžIŌÅʃÜ% éĶyëÖ´oüUŠ]xŒhÖrÜ[›}5/K{_9Ĩ‘žęã ëüę×‹5ÛHô=CPŦmĩeŠh ē“ Ę¯ “Ųˆn=p*öĨĢø‹NūÉĶî58EŨÅŦŗÜK ŌQ?'P[õøģ]ŊŅüm5ŧ/ŦĘ šŒÃ¸gkÐGŨéIuãWOŅ5t‘a¸ŋ´ÕĶL†eL)ߡËíģ§r)ú§‰õ˙ĪugyJ“^[ÚØŨ¸VfķŪût8ëIâ{Oĩŋ‰ Ŋ‘!¸…aŧû Ye‰/ļ3Ė¤Ũ9ÅmxÄmŽh×wwWŠ/•vŅhŧ’ĒÚOCÍuŒ ) pHāúW•ÂYâ‹-ZÔeŋˇ¸KÕŒŖ[ĒųéŊT䎇æí[ū%ÔîuOĨĀĩ‡AļIÃyō.wŅpãŊdèŪë>;ŅõSĢ›KFŅ>ØÉR#Vt š>¸ëųWЇV$Ž •ËxËYŊĶ[Jˇŗ!7ˇ>TŽ0e ųf¤Į8íŌšÔņ~ŽŪˇŧ”Ęķ.Ĩ-¤ōÚĀS„}3ĀÎ;fē돯x|ŨÍrŗĘˇÆXG吠ŠäcŠ­ņ6[¸<ĒMer eˆīų7CÁQéœõŽÄ){ž†+˜n.âÔ<Ŋâ=Ē™ˆã+žĘGÖ§šņļŠĻéāœE=åžĒšuŧĄ0}¸fQÜn;XwēD ËĖĮŠ$÷$’kĖ™müonöZlÖB÷Pķu ip5B7;`g-´šõ=ĢŧēđĩĨƤ÷ÂkˆŒŅ$7Fā,șÚã'ĄīUŽ|¤]oÎķØësŋ•TPœpĨ4øOXíü‹‹¸&Ž7ŠIŌAæLŽA`͎äF1Ú¯ÚxkN˛×?ĩ FYÅĒÚ"îų59ŽŪõOPđ^¨Ũ_Ë$×(—ę>Ņ 0ėhn™ČŗŽ:Sn<§Ũ\YÎ÷[í‘âc¸fdr 8īĶq]:¨E  ÕÎj>MCÅZķjW‘\YŠXbAĀīW<ũ~˜ĨŊđ°¸ÖĻÕ,ĩ;­>{˜Ö+‘R&UÎ>đ8#$dTw>Ķ&y.m„ÖĢi:ÄāyŅŽpNy<ŠĢÃëh ŅbWԕtr~ÉĖgįäįŽ*ūĄáHŽĩ—Õė¯î´ûébĪ%žŌ%AĐŒŽÆĢÜx&ŪQp°j7ĐGs Á2W€ü@ōrInŧÔMā Iw×Ëg5š×r”v9QĀčEvÎjž‡PÕ$Ô ŧ¸ąē–ßėŗÉĶæÅčC‚9Áĩž ĶÃiÚâęŅt•+j2€š9Ɯ’8Žž°/|3osĢļĢmsuey$b)¤ļer˛OQÍUÔ<g¨ƒסâÜ[ĩēۉĸĢ 1ÁRI>§&’?YĚRGQ“û-‹Z—•I\¸?/#~56ŸáM6KAåėY–h-æ2#Alã=€3ž•YüĨIĄËŖ´÷ĸÎG J2€>đ ãĻãšŊ7…íįÔEųžž[‘iö2ĘëĘuūī\ķšã|A AĻ #C‡S¸Ķ4ëH$hīŽbIãÉeÄd0Ā#¨'møõåÔlĻԆ§ĻAåũ’đ[Cčá€ã‘ëQüCŠKŋė‹o´Íc ¤’øB%Ž,.ēG͓‚zbĢøZŪūiīô‡Ö›TŌ$ĩ˙¸­–.F8*ĨF#'Úˇ?á Ķ˙áo 5ÍãiÅDaLƒpAüã§ëīDŪĩ’[kˆ/¯­o`ƒėßk…ÔI$]vļTƒíĮfo isévZl‘3[ŲΓĮš˛ÅÔîÉ'Š$’}sQjž°Õĩ˜uIeē†å kf0I´I9*xéôÁĒļžĶėôí>Æ+Ûâštæ{V2c8ÆF0<{Ôąø'LZ•´ŌÜ܍Fā\Ėō¸Ü%Ã)P0FåI'‚ėnl§†öęöęâfž×+63Ęm 0rzwæĨ—ÂP]EÛ5 û‹ˆåIEÁ+‚ …h¸žœ÷ÍdxÁQę:ēLK=ˎ÷K,÷’ĖÆTpįn3€0¯­v‰—n°Ģ†īĶŽRO‡Z\ē}Ũ‹ßjMŨ×ÚæS2üōäũßPáW/üc}=Ćæę#wÛۈŲGڑFū:ā‘‘Ž´ˇž Ō¯5 ;ĪßBÖĐ a/ĩ Á‚0ĮLéUŧ3á÷ĶŧCŽë–ãR•HåŪ~\åĪaœôĨ­øjĮ]žÆâ姎âÆC$A&ÆRF>âŗ­ŧĨZ0û5Åōlšk¨Āœâ9‘õÜO9ÍléZL:D3,/$<Ļie‚Îį'….šŖZøƒEēŌ¯C}žå6>Â=ÅdZ2iûĩ ķ5Œæá&ŪģžBģrß.>īHžĶD:œS\]Ü&Ŗ(ža+Ž%ÃŽÁ•_Ķ4ė.šō[ģĢÛļO,MrĀ”Lįj€=xÉ­ē(ĸŠ(ĸŠ(ĸŠ+3ZÖėt 9õ EŨ-Ķī2FĪÁAüęŦ>,ҧ›L….Į›ĒFe´B„ į§m+Ģ3(`JõôĨ pĪ\Sd•!Mî@\“îqRUkëëm6ĘkËšV+xTŗģt¨č~"ĶŧGm4ÚtŦâ L2ĢĄFGTƒČ5kPÔmt˯.¤+#tŒĒ\¨úM^§iŦé°j62ųļˇ ž7ÁCWhŦīx{MēkKŨV'VØRL‚[Āã“ô¨nŧyá{ –+fŪ)w*>āHö­ëyãēˇŽx›tr(tlc ō*j(ĸŠĘÕĩũ+AHßTŧKT“;YÁĮr@ĀëŪĄ˛ņV…¨\Cާo$ŗŅ&ė_—= ÛĸŠ(ĸ€zĐ)iĨ-ÍëŋfáģÆyÅ>ŠjzŒN5õĪ™äÂģŸËBėŽ4šV§kŦévú•“—ĩšA$lT‚Aö5zŠ(ĸŠ(ŦË]oOŧÖ/4¨nŪŲ…iâÚFĀ܎zŽĨĄiž+×õ9mn+é"XcŒŖÉ"íEÁ'îôí[âZËU]"î[Fģŧ͚öÖU„„—ī# Üũr*Oëž&× °ŋÔlíSNē˛ķ|ȎeŨ€0O ŒžœV‡‰|G6•ŠhÚMœq›ÍVv‰$”‘ĒŒŗĪ°ČŽ'ƚõūĢ ęē;˜ëLÔ-Ŗ¸p˛egR„ ņî9é^‘ĄéŸŲ–,¯œWS;KpmĒ<‡ĢsĪĨpšƯqqã™ulüą,ļûbRēB1ˇ'Ûøæ™āę^“āŨ6âÚaŠZ˛DĘO˜…vOb XŽYmõXâŠM6kãiöD‰Œč›ŠųĨēuwZô°r2+Í~"_[Zø×Á‚ęEH šâîLŒđˆ1Üäđ+¤Ķl–{‰-Õ.|p4X’Øl–kyGÄĒÄüų=€âējōčz×ņGŧŖ 'a}ŠXÛG-€IĀôŽRˆMqĨ‡‚kK™įÔĘ ĸö€T1wOŧųž_j’įĮW6ķÛÍoēëûB++k–…ŖŠa Îđ'hŨ${Ķ5oëšn“­O ĘúcÄÉ<Öî‘ÜÆüŧđĀäwéSˇ‰™Ž6ÂûRƒâ/ˆîo¯-E…Ŧ*Ę! ųd;€§wŪĪ^šĨŗņÍ÷‘áŨRí`ūĪ׎|ˆ D!ā; lüŲĮ<ĩÚkŋō/ę_õë/ū€kĪüŦęZ~‰āĢRŨŦõ+vAGą7'89ĮĨ]ĩņžĸū Ķín ˇH¯oĻŗ6Ƨˇ`%\¸b@Î0Í>ãÄū _jZ*g%ÜSĀ,ÕãcįC!9cķ Ÿ÷}ęCĮ—‰.˛Ö ŋØōŦoä;=ĶāÚAų@ĪzW}mpˇq\UdŒH Ī5ÁiŪ5Öu„‹VĶėú\š“YR"]cSƒ3>xاZøæōM;H×$fj—˙cHņ‚ĖĒåŗÉĘō1Ū ģņ§ˆŦĮ‰æx´ų-ô9Đ#pfF•7 ëúUŸøųôHÛųB8^¸‰ļÍŋŽ$ GĄüéu?É ę>)–âÚŅĶO´†â‰ É.ũÁUÎyÁĒŧבüHĐnĩG‰Ųt‹™ËƛBįi+ŒžœķV4¯ęŖiWG[ęr6ņ2iwZÕõ­”š]…ÅÔ7M”b#áYAcÔācŸ­\‡Į÷VqyúŒq\BÚl—Ĩ­buē€|ĻbH9ƒĮCUnn/uøî÷Č&â+‰ĀHØL9ÛÉ9ÆG5éĀæ–Š(ĸŠ(ĸŠ(¤##¸Ģ/Ũi†úĪNÕÚ &övšHŊBßx$™āĻEI}ā kƒĒEkqgkĒFîÕNö ´0'q×ֈ< ,/Ą?öåÁm p~åå#nūQ‡6/ũ§ÅíÄÖ7¯,ĸŨ‚)䯿 ÔôôŠãđ\p÷—zŦ“^­Ą˛ˇ™aUōb=xį,{ŸČ Ôđ΂|7ĸÃĨ‹Ųná€m‰ĨEWĶŽ´Īxv-tØÜ,æŪūÂo:Öā(mŒAęę+ķáōßX]Į&Ģ2]ŪÜĨÍÕĘBš‘“@€uö‘ËŦI4ÆiU@i íŪ}qÚ¸ņā)#ŋÕχX•!ŋ’IÄFŪT’(FlįŸ— Ų¤ˇđÅŠđöÍqŠč€Ŧ!­WįRģH<úU„đTđ‰l`Ö%‹G’äÜĩĸÄ7äļâ‚Lä)>ŲëÍv5Ėj>ļÕüe§ë÷Ž%M>Kkrŧ,„äš=øš¨ØÅŠiˇ63îōŽ"hŸiÁà W3iāÉaĐåĶeÕ˜Y›+i#„ Á g–8>ŨĢROÃ˙đí´ō[CöQj˛Æå\`‘Û8ūu˜ūĶæ™:O,ichļ~Z‰#RöäsŽŊ*ĻiūŅdŋžŊž]3OŪđÄąr›Øäœ}öųˆĐÖO‡|?ž&Ō¤Í6™ĸZą‰Ų6^BãûÁrXõÉé•Åj^Õu?XëSkņųš{Hmaû(›øįæäãŒÖūšŖĮ­éëk,†6ŽXįŽ@ í‘2œŧŽ•‡yoiāģ]kÄ_ožâÜ<žvÕ2ȊqŽ@ĀŦß ø:;ĪéÖúīÚ!g[ۛtN~l3g8ö­˙øEcŊåÜw’%­ė‰-ͨŒbFU 2Ũ@ādUŊÃöú4ēœÉ4ĶM¨ÜĩÄŌJFr@F;0+?GđUŽ‘yi?ÚĨ¸BAj˛(Ęy‡-–ęÕĢŽéÛv+j.æĩ+2J%‡S9÷ŠŪŠež{‹Ö:Œ“Įp—qBąųn€…!G‚sžšŠîŧ$5;‹RÔ'¸ŧķŖž;•PžK§Ũ(ŖŒžŊsLÕ<'uŦč—:möģr˙iui$X‘pĢČU^ƒœzÔrx.âMfãTūܘ\Od,Ÿ÷ ƒž=rI¨tĪÉĨXYÛÛëSilmc2@Œ­mß2ô'Ūē=JƒCŅí´ÛrLP.Đ['9'sY3x:Ūo\ę˙l˜Gu囋] Ŧ!yę<ŽõVːZÜiŠ%ô“éÚT†k6Œ-ÎpKu`š8éø×IĒØļĨĨÜŲ-ÃÛųņ˜Ė¨e`ã2ņ xƒTŌí48o ¤Q\Fb”æHÜāpGŪīéÁ¨˙áfB^KĨŽßû>;ŅdËæūũ›!K…ūč'ō¨4‹™ė5ßßivŠ=Ė3ÄË ąU|D äŊkKÃ^1Õd )ãŪģ ūįSŅ-oo,dą¸•7=ŧc>•ĘøûZÖtÛíĪNˇŒĨåühekƒb2Û0āã“úU™.í~.ítøžíôŌ&ũŠ‘)'-Ž} ~ Å> ŊŦbûYVhĸē›bD|å˜Āč8į5ˇáoÁâ]:[ˆĐ$ÖķŊŧč­šCŠįiîPk'Äū5šĐ5 ›x´õ’;K#y$ŗČcY8)ÁģāÕĶâ”ģÔŦtË+eškģ|âWÚŠÁÉ$ū†¸-&öĘßá=•Íö‰ũ—öŖî…ßo–ÍpBcœŽĶPņ…Ũ–ŠŽXCĨĮ+ivix ¸ÛæĄÎGŨ8#iõĒן’ÖÛNÛ[¤×ļ z°Ü\ųeŗüHÃ7åڔkZŊĪėíĄŗ‹ėŖLķđnJũö\’6ā‘‚úôĒKņ*ō; Ëû­e­ŽĄũŸpcšÜÛ÷FҏdNĩŗoãî¯kŦY­›éļĢzÍžb´$aČÁ¨l|h÷w6ík›Sĩ{‹$YķʀÛ$ãå${÷Ēú?æÔ-ô;ĢŊ([[ę×k ÷˛Č7cŒ”í<įđĨđæĨ­^øīÄqÜÃl--äŠÜ•‰LG¸my'w=?Vī‰uøŧ9ažQ–âęá-mĸÎĘį'°îOĩbjž$ž{ibW°´ķ›lŒ#hŨ ܧČÁã×ŋ4¨×ÚfĢ5•´WŌiđĀ“Då‹BœƒžHtzūŗmáíķVŧÜ`ļŒģęŪ€{“\œž>ŧŌbē—YĶ6$ZzŪŖ@fY€X‹7š~)įĮ7ąĩå¯ŲėnobĶÍü~D­å•æF88aúûVFˇã_^xîūßFŽÖėĸ–;–œđ%;HxdĄŽ†ûÄzž‘›g5„"îky$iV0.Á—ĀųˆõNãĖú¤> Õ_Eˇu+‘ŧ͗´vRrŧs÷OqږīĮ×Öđ<šk]:ŪōÎæá-¤Ũ)YšÂācĒķøítáŦ[ę6`jw•û˜ēÍæđ›IŋŠ[Ī\ĒčēŽŸg-ôZyŧī&âä2œŒäc;Š­‹.ít¯ .ŸĄĀ"Ö#TŽ$›b۝…€Æßē˙ëUøŗTģø­Ëik ŊíĨËX\ūõ°š!wFp ČaéŠĶÕücqáØėíoR–ĩiq-ч4r>÷CĪ­uö7-w§[\• ĶD˛m€HÎ+‰ĶümŽ\_jÜhļí}ök𠘐‰ˇqpä×ę*}'Į˨O¤ŗGoö}YŲ Hœ´ą`ĻAūЇŊeø[TšĐŧ!ŠĖ;Ũë70î`BB ¯†|vā~t˙ø§SÔ~Ū^ØÁ2­ĶYNL­Ž$æ2|÷Æ+böúæ×Ä~ˇÔtŊ:k‹Ŗ* …bÍnꅎÂGBĒĩ¯‹õĢŊVëJK+žļÔŗÆÎ˙ęŠķztĀĒ÷Õ ÍôinúmŊø˛h÷=ū`­ 0 éÜ îo^ál&’Íbk€„Æ%$)>äsŠķ¯ ø¯QŌū[ę×ņÁ<××^]ĒŖļ^Ieaķdp=ŗĀŽ›Jņ-ËøļīÃ:šÁöČ­’ę)`,ˆx<pA÷ŽĒŠ(ĸŠ(ĸŠ(ĸ¸Eđ–¸ĩNÛáæŠ égYĩû>t.Q…ŠŨ!ā›ŽĻ´mü¨iˇēŠiwÖĐéú„æâMđ–š&oŧįûôĢv>žŗņĩîŧ5ž Ȓ-Ė'rĒ— ģ¯<ņT´īßč÷—QXjąéw7-rÁíķÄ(9cÖŗãø{{Ļ\øyô‹ûd‹H“ÂÄĖō}ö$=†+ĐÆqĪZæ|aáËÍutŠ´û˜`ē͝ĘyčY F9īTmŧ'ĢZkƒRQĩrēpą $,I9Ü\ßŪ'JÍ´øw§éú!†úÎmCG2$M,,"š'ęŽ2H9į"ēŨLŸMĩœ]KÜO)•ÖŲ|ĩ§úœÖŋā[kYÔ¯ĻŠ ũ‡Øš9aŪaäÆsœķÅ6ÃÁ7úmՎĄ§ _ÅhÖS3ÄJÉvŒđF?×-cāi|)ŠŖ}kĒÛDŒĢ/™8p''¯Jëõŋ__ëĨí…ü6ëŠéâĘāIf\nÃ)ĪŖbĢŪI¤XŲ]Χ_$IhđÜ[“ۜ:œä6úâŽAá Ģ-WOšĩž_* >; ƒŠÜʍģrx'§5•sā Z}+RĶŋĩlÄWēŸöŽãnÄŠŪoŪä| ~uĨ'ƒŽoĩíV÷Sēļ–×S°3AEJ¨Î$žrĮˇĨ[Ņô-[L´ŠÕîŦ;X 0:ÛíÆœį°ęZÆˇø¨[éš ’ęÖ¸ŅîÍÔl-Xo$ˇįãīŌĩ­ü)=ŋŠîõEŋO˛\ÜĨÛÁåüūbĮåģ8Ûß§Zŋâ]?XA›äÜÚÜ%Õ´Ĩw‘FGqØũk,xJîq­Ū\ŨۍOUmZDˆ˜âˆ09'’sŸOJØđ֙qĸhšeÍÄwÖ1Ie2Šžj]Fļņ…y¤Ũî\ÆQŠõ_B>‡°äđæŠĸÍĨëē’\[›qoˇ„ĮŒD’rô}i×Z&¨Ú-ėZ–ĩoƒföé"[T 0]Æã¸ãč*đÜēĮÃhôŋ‹Žˆá*6ĄIRsü<ũjü¨Üjvڋk ąNß(7‘–Œō° œÔV^Ô­´­ Éĩ¸Xh÷BxOŲI ĄJ€~nŧ“ŸSSjžŊ´ņ˛ęGˇ"쟺bBā|ÜđŖõގNˇšÚÂn7’4Z5*ŧp0 8⚊lÃCŌV6 +ëĄ˙ Ũ×ęÍīmĩĩ‹ģ›†ûfĸ°"Ž& āwų˛JsøRöęįQÔ//ā:•Õ—Ø#’8Čĸ䓴ļK}}*(ŧ} —†āMZ=Ú#ŦmÎ%vŒÜpMDŪŊ—A×téĩtvÔî…âHļûDReN1¸å~QúՉO7™ær3ķdũ8Ģw>Ô§ŊŅīļĸIpäÚäJōd6>o”m8šÕ‹ÃvņxÂãÄA›5ĒۘĀ㠓ģ댲mŧw§Ü_A§jK™{pn$ŒÅ™cfÆāžĮĻEv hŠg‚1\ˇÃÉámīVķc„Ąąt‹oQËĢŸ™˛@=8ąĸøb[=zīÄĨÔwZĨÄ+čŖŲq¯e“Éä’k§ĸŠ(ĸŠ(ĸŠ(¤''ĨGŅL ŠD|Ŧ*Z*­ÕõĨŠŖ]ŨCníS,A>ƒ5ZöĪI×tā—°Ú_YgxķēdwôâĨˇšĶãĩÛm=˛Ûƒũ[ŽØÔ}8¤KÛG•b[˜ZG•€’=@ôŠŖ–9—tnŽšÆTäf5<ÁõŪFvįœzâ¤ĸŠ*™Õtõ$5õǐpA™zūub)Ŗ7Å"ēúĢ*JȓFŅáÕU’Ōŧlfvã$ éœqžĩĨæĮæ÷¯˜Fāšį¸ŠhĸŠ(ĸŠ*)fŠŨ4‰yØúŌ ˆK"‰Stƒr Ã,=G­MPĪ71ĻdēĢ ƒŪ¤(č:Š(ŦŊWÃúN¸a:„~I&?5s´žâ­îļĶí‘KĮ€‹š‚Ē€8Ô↠ô4ę(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ŽÛÅW×˙ī4)4ËÕąŠÔ+ŖʒĖG˜Üä)å\˙„ĩ;oŋŒY4ųäąļÕY¤ō`c‚FzôŽãRņdV×ÍeejחZũ˛eW åÄzrˆãZÚ6¯iŽiڕ‹–ˇ¸@čHÁúz­â‹K{Ī ęQÜ’ ļáÔ|§Ĩy„§kO kžf?iļēx”Đ8.OŽ0ķ­ ÚØÛüí:oÚ`6˛}Ē(X#ČĄÛ?7Ž­Oök),xNVĶáōä†čȑ[î.BäĒ995fÂI|?âøĸ[yė<6mãU“Ë2͐ ˆĪŨôÉÆkĸ‹ÆqKmĢ“ĻÜ­Ū”‹$öû’Œģƒ+g`øW)ãOéū(đĸ‰asúW°K)‘øÅ]&Ķnbēû'Û"ļ,…å‹8$s€Gpj=+ĮVąŌŠZŨÃĢ5¤’Ē…vQ’ŧƒúZŖĄøžęiüO{¨YÜÃca;€]Ņ„^Z.Sį$äúsÖĩ,™nĩĨ'Œ–yÚlëyoj/Eˇ˜™’œ°9ÆFESOˆö'I:ŒÖ°Āmâž6e1ļ*ƒĐŪŊš¤ŋņģ?†|Aqoc4Z†”Ĩ&…O–Jä8aÁ9õöĢ1øĩôë_Á¨iˇĸ}LŦėҟŪmÎ[ ßū5Ū?‚ VÕKŧÛĨ]k¨˛›×Üķ ‘RŧSÚÎÖ÷šŖqێŽk âŊŧ ĩƒ•Iüo ŊŊåÅ۟qÂ0$ی&‘ņĩ’w mį’ÂĪTy4ŲÍæ›Ī5ĒJ…ŧĻÎāŽ{Õ9ž"ˆô›ÍI4 Eⴊ9äÉU&'\†<ã¸ę+OLņLúĻģũŸ2ۋt¸kÁ2˛(q•äā×OEQEQEQ\,ū× ņîŖĒŲŦ?eÔ ‚1›kÂåž\sžƒžõ—7„|O6…â› šp—YģiQÍÃb48ëōrp?Zžūž‡_}altûæŧ˛ŠŪęŪâCļ7A€ĘÛNF:Œ ęô0čú5Ŋ‰19ōŖ€’Nƒš‹Ä–ڝæ=Ļ•öQ4čŅŗÜŗ Œd`šį?áÔW_›Ä–_Ú3Ø I#20EnApväņŽÕ™áéŪ—Ã,tŲIˇ’š8Éry#olՍ?Ã:ėūšgŗi6Š’1ķ¨—§Ę?3Umü#¯[øYôķöšV„!dmŽ<ß0Š%x=ŗÍięzŗ}âÛ-^k péķZ’e%•äînõæšÛ/ø–ÛSĐŽüÛ–Ę'†ât™ŲäÜĘYōW’@#oAžĩÛxu•ĐxŖOÖ5¯ Kia$vš„Ē…—~W68ČČÎ+•‹Âž%ĩÔ5é--ė#ļÕlÖ1žO–Â2I+“×q?…]šđÆģwđ˛ yqŪ­ŧvĖí9)ĩ6üŲ žqŌĻžĐ|Cuâ˜uH–ŌŲWI’Ä:ÎYŖ‘°C´ŗ4¯ø–ĮZĐoI˛ė–ÆÚéÖvw|˛3>Jō[iힴÉŧâ#áöĶ'[:—™ö–_3~ÜlëÛ­[ŧđfН_ø¨jQÛÛ[k°Å E1vã鑴pO?…^ŗĐĩ$‰å:.•ku“[ĢĮ&į™ˆĮŪەNøäÖV›á?YĮāČ%ˇ˛hô69–s—ÜĨAQˇļsVäđˇˆbŗņ>Ÿcu˛jwŨ[ŨĢáœ/ĘF>^„dzŠM7ÂÚū›â)5HSNHåĶVÕá1Ã&ė|ÅyÉ –ĮākcÂļ˛xOÁļ~Ŋsg 'ĖY~G%ŽŪXNqЧā4‰õˇŠo6×íŌEh1Äqƒš”ĀŲ‡á[~+°ŊÕ|1¨iÚzÂn.ĄhA™Ędž' ž•Ν†õĩÔ|%u˛ĖŽÅ:™Û-šBeNŪĀgŸĨW—Āú•æâ-wĩ[]BîKØ.‰}ėęęŦ¸ā ¸<œÕĪė Jk;Ļ]#J˛ē{&´SäČ[ąpš :íį5į…õé>éÚŧđEyi䤥f`“ƘČÜW8ôŦuđŋ#ø’ßu•ĨŽĢ+.HlU Fžųé[:§‡ĩÛë}ņ~ĘoôÛÕ¸­3ye{6‡Û×øēwŦŠŧ՗@ÔVÚŧԜŗŲ™NÉ—k(|učA"ĩü;Ĩ>öŲŪÆÚÄŨJȃË6>f5Ž´}CÄ>ŧŌ4á›vĄ ĖåUAĪįĨeÍ k÷!:’}ŠÔ˙cŊ‚2JĖÉ!;ƒˇ+:ÃÁž!˛ÕôKØäąG´ŗ6ˇ æ33’Tŗä¯Íģi횱Ąø&īOņ5ލöZ}¤Ņ#›Ë‹)EĶ2ã^œįÚŊŧÂûÁū"ģŗņt œ‡\™^67 ûĩP?'_—?l\x{X´ÖįÖtøíĨšžĶŌÎâ)&*ąēôpqČäņYņøTŌ”šLđÉäi˛XK3šŖ.ጋ€sߏĨz*Œ3œWâ ëšÆŋy4ZIes§›X„îĀÛ9ÎX(bJŪđnĒi>†ĶV’6ž<"ŦnYQB€ ûšük[S°‡TŌŽė.474N=ˆÅq-ā[šūYčŗĖĒ[ŧw;ä9W‘Bąî6ĩcQđî§ j°Ûiš]…åí¯Ų@Vėzŗ8\œv\VČ6ļūŗŅĩŲm –ęÜÚųB\Ŧ˜\š"ąĶ.ūË'›-Ā„Ü!đ߅ŧ(“ÅuŠÍc-ü™Žcgt”ļ ˇ ņ] ~0ŌZßRšW–Üi¨$ēIã(Ȥe[Á§tÛØ/Lp^‰í [†ļ0æGžë(†ëõŽb_YøáĖúÜÚžŸÜ+›‹h™˝ƒ rŧ€O­uú‡Š4ũ2íŦØ\Lđ@'¸0Ļá}™ĪlāûņP]xįGĩÕOaw$ō[ũĻ/&؜KŠžŋĨlézžŗĻÁa0šÚu܎3ūŠxŸU:'†ī¯–9^Há/ˈš ´ā: õ=+‹đeÕŽŸieĢVæķS´Dû!Ė’(Ũ$ 63ß{§a]-Īt;dĶå-q$Wîb†Há,<ÁœÆ{†āņZúŗi¯éQj6[ü‰ (ŪģH*ÅH#ę cxÛÅ'ÃVVžTS´÷W1BEP\nĪž3ÔšÄŊŧŠĶ➛¨"Ūˆî´‰e’ŽYØ2ûžÄjéĪ‹t§Ōlõ$–dŊ.Ú(Ķ2Čã9P§¸ÁÎzb´4­^ĶXĩyí\‘ˆÃ ¯Ua؊—QÔ-t­>{ëŲ–hŧŽŨ€Ŧ•ņv˜‘Üĩá–Å ˇûSĨʅo' p=øĮ\öŽVˆ'ø¯o<^ۋiå‰ŲcšB°\‘œzSāņ5–ƒám=ꗰŪßRiâiaŪ{đĀ ęo 7Są’Öâ“!™X0gfČÚO­jøŠnåđÎĄoeg-ŨÅÄ G*YHÉ,@ĀÍr:nĢé÷ÕßJ¸yl4æĶîmã.ŧ :Ø ‘Ī>•LøWZąĩĐY4ķtŅëRę—qG"~é[vdŒ‘¸tô5éđGQ…Ž5zíPōzW/ãŨ.˙RĶ4īėûv¸’×Q‚æH€ĖŠNq’k5­ŧ@Ū1Ķu{*Yâ‚Æhܤą†W‘ðû McXøS\ļŅü=w61¸Ķ.ތÖQ\wŽf'r°`22;ú×gá-0éņ_Īũœúxŧ¸ķŧ™f2HN,įq$tŌãoøFûJļ‘cžUVŒą nV ĮŽ1\ļĨá[ĪhˇŅé×Īd Ü]yŦä:¸E!ˆ ōõ>ĸ¯ZÛø‚oØj×9†ČihāĖ…‘÷ÉÁčHĀĮ­PĶôOéūŅm†šM۟Ģ™Ą!2DYÛå9Æ~q× \ŸGÖėĩ}nų,ãëv1Ä|ˇP ™TŽOŨį9éQčŪÕ4h…Ŧ~Ņca¤˙gŊΘ™f$Ø';F1ũ*ˇˆ<¨jšž§uŸåßÍ(:…ŊČŒÆ€.ĢüC öylüúUyuí&åÔí.!f™@ú)Ī=EH5­,ǏÔm6ŗSį. Ŗ¯Zĩ ŅÜB“Bęņ8 ާ!čAĒĶęú}ĩėvSŪAԀ…ä›'ŠáüOâKëßčZ坍Ėv~rŗē‘$æ@ĸ6āž'“‘]ÛC<ÖL“´s´[ZXp ļ9eČ=úf¸ Mrīâ.ģĄÉâ-@ØéŅA"‘nbĀ Ų͝JôK‹˜m-Ū{‰R(eÛGšĒ/â;!zúĨšZ—Ø%i”.īLúûS­õí&îâH-õ+Ie<ĮD™IUĀ;ˆôäsīY:æŗ ˙„õkV =­ŗĖŗ[•bĨT°á8§é#´ļđĻy­jpE5ͤnŌNę…Ø¨$ãņ­‹­VÆĘÕnnnâŽĀG-ÃgĻ= ŽmwJˇ˛ŠömBŨ-Ĩ8ŽVaž•vŖš…&†E’7WCG¨5Æx›SÔtŸøicÔĖZeëL—6ļíÄdvīÚēŸí};û<ßũļÜÚŗ N¸ëõ¨ŋá ŅūŽįS´ŒÛÆe ģĶ>´ļúö‘wpđ[ęV’ʉæ2$ĘJ¯÷ˆĪOzšĮVĶõEvąŧ‚ä!ÃyN—ÚޟĻ…õėŪsmÍ.ãč3×­Buũũ'ū&–č¤ ˙|ŋē$ānįŽ}jXum:åŲ žļ••<ÂPH_^;Wsâk øUÔîõë RčM ŗ’2Ąy#jpy#95{Cŋ—G†yõĪZŨÚŨ{'g]ÛBüų Ūœ ߟÄ:5Ŧâ õK8å1ųģeg÷žžõž,đôNé&ĩbŦŠŦĀÎŧ¯qVSWĶo.žÂ BēØIŽ9Ap=@ŽKÂ:ŅĶbņ×u—{k-U­ĄžōAō¨U gņ5ÔÛøEģģ†ŌßSĩ–âußI ,ëŒäLUûģË{ gšē™!‚1—‘ÎŦ×ņ>‰ ē“TĩŽ'—žI€ØÎzTąxƒHžIŖ‹S´w<ÉUfĸúŸAīQ˙ÂOĄũîÎĢhļčÁG”(Rzž•ÎxĪ^xôë;ŊZPņ_ÛÚí\‚ĩëŸøžÁõyõ Uˇ6í)nāIôü+ШĸŠ(ĸŠ(ĸŠ+ĖŲéŸuyÆ$ļP}”y?ëd,rĀ×žM`^ŦM¤üB&Úi'ŧ¸˙EÄ.|Åã”ã×ŌĩŲŽ ņbj÷3Ûé—z4p[Î-Œ€0:‚TžžøŽĶÁ6M𝝧úNČÃūՏ3fãˇ8cŽÕÉjxĩņΊîįĩ•ÖãKŽÚŨ„LÁäÚrƒ¯"ĢÚØjzU߀­¯ĸžKĢ[Y’æU‰œFY@PĖ=ŋ ­§Û_ž›á­‘uģ-YĻŧr‡ä@\ŗÆ`xõÍg%օ}s&‘qŦÚ@íŽ5ëŊĀJW$Čė{rzWLūŅæø‹.™6š?ŗFŽŨFÂ2C“´0īŒwŽ[YE.¨ņŲ]AäëđNaō]ČDe_468R8VäŌ[ÍâŋM=ĄIī48|¸Õ î¯ōãxœ}i–Ioâ_ůyŦô™Rč´e‚ČBí qŒāÄVn•ėz‡Ž—ĖƒKŗÖޚįtˆÕ‹ynWûŖ={g5s^ĶėÛÂwģŋ‚ë[†u˛ŖįS!Œ¸Ī>šĢž%Ōm-ĩ4ūÄēūĘ7VōO,˛Û­ĻÃ*āũÂp1Ĩvū 3ŸéBæßėōĨēĄŒg€ŧŧō<úמjŅ\ÁŽôûÔgÕõ)Õ´Ņ´“*`ööO_J×ĶÕ!øĢŧŪAŖGnķũ™ļ5Č|ļÎ9Íz%ÍÄvļŌO3Ž5,Äp°æŧÛ@Õ-áøĄâ}Bhîã´ģ†Ü[ÎöŌ“jüĀŊjŽĩĒę~&š[¸ĄēMMÖm Į$ †HW–|’ģˆ?@ ^‡Coj3ÆąõbŽŲА¯2§2.{´gž*Ēhúžŗđ–úëČŲ­ßAp‹ķēG´m˙c˙Š/"ļ¸Ķu]RÖ]FæCĸ=—”- ($|Š´.Y˛OĐUK¸.]4¤mŌãÍ8‰ØÉ!Š÷Ë ])§ō|Ē]ÛŨŽ—§ŲÉm8h˜´sl ¨ė˜:|Zlzˆt;ȞöÛBû%ÄQIs•’W“vįew„ũ+˛đ=ög†Å˛=Ķ[‰å6æåBŋ–X‘ĮaԌöÅbøÉb¸ņ߄|Û{‰`´–ig):&SX€GŪĪl‘´ UÂëËyá„R/‘`Dģ@¯=ęį‡Ŧ$ÕĮŒ´ģ;*ūi&If„§ ˆēc$äņĶ’ézŨ÷Â‹ģ¯˛•Önb‰eWįhb õ9 Į÷bˇ´ĩžņZę–W“܏ė˙"R°yPŽSĮ/ËqØj_‰ļĶÜxD˜-^áĄģ‚VT]Ėdˆžs2^Ãqâ?NlŽ„ÚdKo›GũņÁˇŽHŠ´dŽx;{YĐEĻÍËBŗ"đϤ†ëT<¨ŸĀ(ąkŗ,ú´Í khėÅZ@U”cĻ­›ˇ‡MņuÎĨ}įMŧŅ– ?Ũ6ŨŲųŖÚ r#ŸÂą´­H5OXëļLŅi÷ 113,{ņą€Įb+B{?ëQÃĻL-ĸĐÖĘÜĨŖ˛î˛ĄąĪEAĸ#Ã'€i—°ËiĢx~É 3GŒ1Į÷Ģ{ÃZZęv>,˛Ŋ´ž(u ų›ÂStnŠĄ†G=  ,÷:ŦJ.íŋâ]uĖpŗ.ėû’*ĩņ OŧŧĶô™íQå†ËS‚æę—‰O<¸āãÚą…?‰Ž|i:ÆË§ęE§]ĶFŸ|3Œāgž*Ķĩ}Oá{_IiVėÁ5ĖQ¯ÎņFTĮrUszMvÖÎë@ņ6Ĩnú•ܡēhļÃ[lFqT(%†y8éQk1x3FŸOĶî Ô×>—m!b°°Ũ‘Ž1ĪÖĨÕĄžŪãÆÉu˛ËĢÃĶpŒL€ÆT*úaš#ļsB[Ūč“k+Ž+Í5ŋ™"ÆĘŅ}Į8īšÍÔt˙G'‡íWĪ[ë]Xn.>ĖŌ¨‘‚…€Į c?ZĶÔî/ĩøgUK Ŋ>>ņZūĐ[ŅáJ†GĖĒNzŌĢŪéŒŌA­ØIwbēÜW—m,%C(MĨŅ€qž:äÖ¯ƒî‰ø‰â†k+ģtžōdˇi-ŨUÕTääŒsœôj(ĸŠ(ĸŠ(ĸŠMŖ9ĀĪ­-QEE,~t2G¸Žõ+šzŒŽĸ¸•đEŲŅ_F–]2[WC\ŊĄ7 RI8-īë]ŦŦG ’V5 3×bĻŽJĮ@Õ­|{¨ë’ÍhÖW¤>P-ŊgiéŽrs]m!ĨĸŠ1EQH)hĸŠ(ĸŠ(ŖQE„f–Š+Ÿņ.‘ŠęÉbÚ^ŽútÖˇV!K,Ģ‚6°dw­=2Å4í:DrūXųœ€ ąå˜ãš$ŸÆŽŅEQH@4´QEQEQEQE™&ąlēÜz@cöš iĮpĒū'ôŦ ëē­îŊâ3X–ÕŽŸŅôûËŧe~ž”á<&S• €d a=qXē-椧R—Yŧ͚tVÕ­ÜąöOņVÔwĖÅc•ŽHVĢ4Næ5‘ ¯U 2*Z‡í0ųūGŒų{†ė}+‰ŋņ&ŊwâĢ3BŠŌHėeˇYŌV¤WųœƒŸá_NõÜšÚ¤’rz Äđ寰tÉdņ ļhķÜFÖ­ōyÃÉī[qFō4‰ąĖw+ˆđ§ˆĩŨzh5i’hJäĀC•@NyČ9ŽŲŽ UFiŖ ü!.0ßOZ>ŲmģoÚ"ŨéŧS…Ä-ˇl¨wũÜ0ųž”q rŦO,jí÷U˜~‚ŗ§×­ ņ ļŠYMÄĐŧĮį R d{îãéQčręėˇĪŦMbán_ėæÔœ,=ˇįøĢMo-š/5n"1“áÆ3隒9c’+ÔÎ)ŗ\CšTIÆ]‚Œús@š€ž&Ļ~đé\͖­Š¯Ä ũ*ęæŨôõ˛[¨1VRÎF Ī=+OQ}gûgK]=ėŋŗË1ŊæĮËŗņ­)'ĖōņŦårĒHĪ×Ėx/\Ôĩ&Ö­ĩy`iė5´G<Ŋę ã'žk­ ‘ÁÁŽËUņUÃxŖOŠæÂkũ>hŖŗ–hŒqĘîžpkŗ[…‚Ú{4)+( waKcœf–[ÛX$Ks nA`¯ \zUšÃņ š˛ũ…t‹ģÜ)œ]˙_ÄŪ´ũ˜,ĻęČpĀČ8>†Ŧƒ‘‘T5mV×EĶ./ī%Ž8aFr]‚ƒœ}MrZ߈u2|/Ši—ŠĻŖw ŊÅŽÄ“Ácķv#ŽÖ;ģybicž'sšÕÁrhļģļŧ‹Íĩ¸ŠxķŅ¸aŸÂŦWã}s[Ņ/t˜´‹‹V›Qš[Xíg€ˇŠgÜŽ1]M’Ũ[YgQģ†iT–iR?-@úd˙:’;ÛIm…Ėw0ŧāH˛¤ôëŌĨÄÛöʇËûøaōũ}+–ŧÖ¯›Į:^a{m5•Ä2\\ Œj8=Øū†¤ņ†Ŗ;x^đčšŦ6÷á–8@—ĪÜé[úwÚŋŗ-~Ûˇí~JyÛzoĀŨĮ4ųní ;f¸Š6Ál;€p:žh7Vgˆžaˏģũī§Ŋ/Ú`û?ŸįGämŨænq래Ž2 kT›â\zEŽŖ֘ļur<Ĩ0Įǰëø×uEQEQEQ^]-Ļ‘kņžęYāPËĻŦČŦÖJdęš<žœV6Ŗ&<˙į’x^EÛör\FSß *ėw?Ú~$´:•å™ĶäĐc0Kz7F\œHAČúgŊw>†[ XÁ5ԗf ҭĈTČĄˆVÁ'Œc¸Žō ū&xĨåk@ŒžmĮũáĮŊTđŧ֑\øD˜}žU/‰26P€Žzõ úR“§Ÿ üJQ&ļIäĻŪ7lJ]ĀãéÚuÍŊŸˆt(ôIĄKáéö$Ÿ¨oVÎzķ֟á`Ķ/„îŖÔ-ŖÔVF[¸#ˆ›‰IΘ%9āš#ŌŊ…ŗŽ:׈Â×Qør]āÂ\|B8'÷ÄyƒņŲåįÛŅø>ÛD?Ņ$Ig˙ "-‰ˆŧÅŪc˙g;ēV§Š4O é~+đœqĩēÅq-ÄÅåldČî8+YtĢ_ x’æ˜RęÛ_‰bˆJ„ųáysĮŠã+čnī•’ÅŖŌ™í]Ŧ’,Q´ŽÁQA,Į ŧž_iˇÅQ¨\ę6ÉĻhvGȑÜm’i>ņ_\/Rę~#“ÅPØÜF mY`žiß64RÄļz#>áīYšŦW—>Ôîã†@šĻĒaŌm„*‡ žiã…v\ÖΡá[mKW‚ybŗÔ¯"Äī!ÃFˆN fę{įŪ ļēļąŋņ†ļm§"K{h ]ްm_AárΟĀúUŸ†ļ§Ē5ÃCtöņCoíģ~îTÁ čz=kŌëÃ5-šž‡;jŒ ũūĩåßĘĮ&ÎŲ\€Ÿė‚žęč58Ό_ė–’ÉocĻ=åÄm ¤å@}€QĮøÔˇšO…ĄŊķ˛ėĖ×WÎė’@7*ãû š„­hxüŋkoöf7w÷RI8#oŲ!N#SîĒĻMzUQEQEQEV–ÆÖ{ˆį–Ú'š.c‘_ĄíJļVĒ[x@=@AÍYÚÍŽKx]ĸ˛áS€Ā”ß-'jäõ8ŖĘŒ6틟\Qå l\ŧu E9 úâ˜ļđE+JÆ˛7Ūp õ55Wû%ŋÚžĶöxŧücÍØ7cĶ=iâ•÷ŦhĻāŖ5!† Ôb‡HĀEL@įËLôÎŅM’ÖŪXZ ‰âoŧŒ€ŠúŠFĩˇhÖ6‚"Š0ĒP`aOōbã÷iĀĀųGšÖļėģZŠú§yƒcq´tôĨō“åųåéĮJ<¨ĀaąpŨxëMŠŪ"ÅqÆ:"(~˙*<ƒąr:Séģ@ĮjO) $ĸäõâ*>>Eã§)žL^wå§›ŒoÚ3LĐÖđļwD‡=rŖšr"ĸE  `0Rq*F‰Ȥ€Œâƒ’ŠNs’;Ô”ŌŠŨ@?QG–ŸŨ•(FPFiģ00:qN¤U 0 ė)HČÁéLÆ?åšß4žZmÛ´môĮģFĀĀéJ@a‚2)ģį r0xëDq¤Kļ4T_Eúg–‡9U99v°Q’8į8īj2jŪĶĩŖXåēˇIĸ–PqQč7ēĩíŊËęÚjØĘ—‘"Ę|cîˇļk\FAČĒZžĨ“ĨŨj$ų6Ņ´Ž¸8õfDФ CzŒÔ…€ę@Ĩ¤Ü3ŒŒúQ¸gôÍ-40$€FG^zSņ‘ ' 9§ī\ã#ķĨ,ŠëHX‚F~´ģ€ī֖Ē_jië NÄyĶ,(É,Įą,ĩŊFOßhw0Û X­ę"-¸‚å@lņžJéĒĻĄ-Ô:uĖ–P,÷I413māp í“QhĶj=ŦÚ­´vˇī3CîTo@kBŠ(ĸŠ(ĸŠ(ĸŠ+Í~"égQņƒMŲ˙‰\wnfŨ÷wāĪ×ގPģŗžž‡Hō–čäO0V⠄2“VŧúÎkÍKûQb[Äēģ3<ÛÛĄ`PŽĘäzšĢĒ:Åoấ+Î#ž+8P1kÖāŋ^Ÿąí[V‰äøĪSŗ¸ŋx=1bžPIyĨaŊ¤Į@FíšĀŅ`Qč‹g3Å.Ą{4ÖĀ ŊšîČ˙¯ŌŦ隝ÔŪ[+W{{}CZōäÚĮÖ䑺vxbŸ÷ũéuyaO ë¯iûŊ,_‹}:l˛¨yč-ĮR*_íQ k:ę^\ÜEåiŅÛËĄG8õ"°ËjQi ›Qš–Ūg˜92šS1åÎyå™v/4Ê,ž ņ^ąŠÜÜ Ë‹Ļt´°c†3R2@Ģ:ū…q ø>ķ[Ôu{ģ‰Ĩ˛‰%´f;l¸įûĖŋ÷ÍAkĒßxÄw qįÜ]ŲčĄî2싆]āĪŨP¤d{úÔę~KËųåŧ‘NĨĒI“悐€>ķ(Ú;}kRãV†OŚÅåÄöŗĘF—fņF]āEo tGŠŧw‡íuíW[í>ČŅArMöų 0č9mÃ9ÉɯEŗŧ‚ūÎģiL‚HÜte# ՚­uoosۘã’5a&$€TäŒן[ę’üvEĖ ˆ¨¤89o0œg×Õ¯Įß|#d]R6û[ʈv’6)į2>kŸ:­ØđÔvÎĪbOˇķ’Č#-čCN•%æĄaáø­'™ >%6ĶÉ$ŦLVÛĀ#w$/@}5găSŅtŊOû>ōŦŽn-D°ŲČĮėqŗm‘ƒ``0§NMVņž‘g‡Ą;)\†Ũ( rĀāgŒ`RĮb.üwio¨ę(oų×&‡DšPØŒņĮ=Ē ō5¯ ø įS¸iŨ¯Ä2Ėfa• ũH=xõŽ“N–ĶSø•v‘ą6ķ耛°BųÜ¸"°ŧ)Ŗųū'ēđæĸ.ämęKƒ;M'īĸ|y@œķÔ˙ß"Ŋ+Ä1C6~ŗãËō’[nũkĘíö]øáģ=üŠ5Äĸ).YĶc§׌û×Cá‹ũRÖ×Å6ڞÕ^Kļōŧ>Ö/)‹Į˛õ#Ž Š_Mą´oŗˇ?h˙]˜Įī?ŪõüiŸØúhĶžÃėßcq†ˇō—ËoĒôĢQC$Q"¤hǍĀP:*ZcĸȌŽĄ•HČ"ŗG†ô%`ËŖięGB-úTķimÍĐšŸOĩ–ā ^fĮԌŅ‘ĻÁEak2ņ$k …¨Į5-Ĩ•­„Kh­âė‰ČSŽ- ēË¸†9S í‘C އĄ‡K°ˇĩ’Ú;t‚L—b[>ŖŊ,:mŧ‚Xlíâ'–# v˙wŽŪՍ¯[ęZmĒ\øgN´k§šCt6*ŗÅŸ›ŒˇÔŌøcDm?GēŽö$2_]Mu4M† æ1;Oc€׃K°ļĩ’Ö +xíäÎø’ ŗ×#ĄĻäiļÖc…´voĐ$Jŗ×#ĨOkioen–ö°G)ÂĮ…QôŸ,QĪE*+Æã Ŧ2ô"$ĨÕ1KÉ ũMTmLbKiö¤—a^\Nžõ(ĶėÅÂÜ XĘYcpĪ\´@#ĨR:m”H VÛŖc$abQ‡õp}ëšđ~‹cŦĪĢi°Æ×wīyo&õ `ŖnzƒÅAeŖ_ŸˆZÅũöŒ’é÷Š C3ŧo°ÆŦ7'#9ãú×_6Ÿgq2Í5¤J€ĒģÆ č íU‡ôbaΕeû‘ˆŋpŋ ÎxãŽj{Í*ÃQhÍå•ŊɌå ŅÚ}ŗŌ ŸÃÚ=ŨË\\ivRÎà #ĀŦÄc$ŠQ čëeö!ĻY‹]ūg’!]›ŊqŒf¨ëztöz]í߆ôë­ũĶZĘHR}ČíX^ņ׉ôŋŧļŠŪTš–‘9eųÉŽš°ŧIŽ6‡kla‰gģŧ¸[kx™ļ†vį“ƒ€&¤đŪŠwŦhŪßiŌi÷Y^ŪLåpHĪ pq‘õ­š*)&Ž"äUŪÛWqÆO ÷Ž~ÃÄW7^3Ô|?s§Ŧ"ÖŲ.cfŨæ+1Œ  t´Q\cxÖGŋ´û.—5ƛs|Ö+sÁԐÎT ’{tŽÎœU=3QĩÕŦRöÍËĀå‚ąg Tđ}ÁĢĩ•>ŗ]N;(šîōÁ2öéÁf+šTÆHŠô›Ģ‹í*ÚæîŅėî%Œ4–îŲ1“ØšŊEVEūĨ{kŦéÖPé3ÜÛŨķŽ‘€K|7ų­zĒ÷ĐG ›>.&F‘UH˙ã­Q\ŽŧWāũ'ûV2 Ë4*˛îš1¸,Ā ¤ž´‘øÂk]{KŌu›í¤ÕšŌXf2#*r ƒƒ]}RÔfēˇĶæšĘ(æ¸E,Š+”SRĮå\î›âÍOUđŪ‰ĢYčm9Ôe 4i0Åēd‚ų#‘ÅuôQEL_۝M´ā˙éKœĻIįę \ĸŠ* ‹ˆ­-ĨšÂCv=’kšÕü]&Šx~8,VâĮY™bK7k!avmäcŪēĘ(ĸŠ(ĸŠ(ĸŠ(¯+kk?‹ēĩÅÍÍû,"—åšf쌌¯O—ĨEŖéwWē˙Š…žą~ŋؚ‚ÉoŸvqNOBx¤°Ôuô/ ëqÜM6ĢŠj"+¸÷ą#ÜĨz  zqŠĘÖîŋ´~ęˇúŦíŠũŗä”.~UYT=6ŒūĩŅë“Bž4Õ{šâĩ}Îge]ÁĖ¸<JĖŌo/õEđ^sy/Ų.4É.d•ĨlÍ2”3’sŒķO…ĩ‰ĩ#Ãē…øÔĸKæ2E;@ŗL˛mÆî­°~ubÂ]RmwBŅŧCx˛[ÅarōI¤$’Ŗín2ĘŋŽjįÍ_LŅü×7ē„[-üëįHØ2gÜ×ĸŖŦˆŽŒXčEyīÄ]:+­w%ÅŌyē’ÄŪTėFÆ9t>ũk'PÔ/ŽŸãKų.ŽaŊŅ&XŦÍa…UR¤ŽpÅÉäœį4§jšßī´čõĢũ<ÜéŨYŲ„Sä…Ν+Õ FŽŅÜČę 3Ÿâ8ë^ņ MŽëÄū2^Ũ²ߘŲbœ FĮpŖgŊSšíž=Önmīna‰tĨ …_o#ŸsPÚkúÆĩ?„,%iä‚˙K7w ŪKM ĀÆāF1œ:×cā™õY4I!Ö&Škģk™!ķ@ä¨?.â8ÜÖõõ¨Ŋŗ–ÜÍ4"EĮ™ íuúÕã~IôßxvâßTŊO´xí¤ˆÎv:y’dmõ8Öæ›c­Ũx§ÄQCâ;Ø­tÛč^4•ĖŸ!MΧØô•WBēÕg™-uCÚ|Ū]ÜWĻXޟŧÅį1œĮNq[ ļ´đžw72Ī5ĸO"É1t@Y‡Ę ųrAéÖģæ”Œ‘‘ÔW’xvĘÚÆįÆ¯¯ÅÃßÍo ũĨË ‡ÜyäŊôõžûSŌ~NúÕô3_ËG9rųeŽFzņ×­6æķQŗđîŊvēŊãˤjâŪҌğ,șWĪßáˆįŌĩu+ŊgWņNš§@nYŲÄւ+Ÿ$u'Ė<üã<`ņĮJét[Ĩ–‹eĢ_ڍ^öÜ2ƏŸ9€ųŠúŠčĢŽņ —ž:đІōâ8ŽĨš)ĄŸ.@ą3 ¯Lįŋĩrך•‡oâÖoˇizŒkh1!3°}AŨŒ×삸¨×——j#ŌcœF“°Œ¸Æû§#ŊbļŗĒ§…,üJ“Nu™uŖnđiO5“ĘŲĶ ôÎy¯a^@'ƒ^{ņĢáĨīˉĄ#?õĐV„úœđø—QÔ'¸ŸO˛vˇ’e]–ųL–  dņŪš ę÷0ø“JļēÔgxu Í9’áŸĖēĒHŖ'fwtōĢ>˛žģĶ.ĩ 5ËĮŠĘöú*I ‰bǃ“ØķšŖĨĪ5¯Ã_Mmw4 ÷ĐBūTĨC#;d08i5­buÕu+ø5 íõËkh¤1ˆ†TI\á×ä:ÕũN+‡ņ‡ŠVfũ-`ŌRō(ŌíöŦ§~yā|ŊíRÔŖÔ<u&Ŗ=ÄēŔ˛]ÆŌ°Œ2í^‹ƒĮĪ]ëúĻ›¤ë[ÂO=ķ ךđĒ˜Ë˛yKb>\cœzΏPÔ´ŨSԓWž–[_‹8Y˨‹ÍU*A?7õ­›Xmm>)kˇwwŸģ[!ŦėAi ĨsʂGz]y6ĨĢj7/ãFKˋy´"ĢcJȃ ģ, áˇ\ÔŋiÔīüE¨Ôõ X˙°#ŋhbsļzz:WkāÍBëVđ^zûîn-Qälc,GZÍøŸ“áδLĶEåÛŗæ'Ûģļ¨9äW5̤&ĪÁvw“—TŠ6–G,ČZÄ)>†=*ŽĨâ-kIŅ|Eimwq1ƒ[ŠÆŨ÷I R'æ?R=3]/‡$Õl|iyĨÎd]6[E¸‚+›ą4ČĀ…cԝ§=ÍwtQEQEQE•sáŨ"ķTR¸Ķā–ō0feäĶëKeáũ#MŊšōËNˇ‚æoõ’Æ€3}i-t *Ōũī­ėaŽåÉc äõ#°Īĩ:}HēšYŽ4Ë9d˜#I ą|zäsE΃¤Ũ˜ Ɲk/ŲÆØwD–= ¨¤đž‰-„v-Ļ[ XŸ|q"mŪŖ)÷^Ōo- ˇšÂŠßũJ…ÛåöāŽE>}Išĩ‚Ö}>ÚH-ÎbŖ!öôŦ_ÁÖšTš]•…­­ÜÂKŧ@2}Ô7{ž•ŌC [Á1Œ$jG ŗõ/iŊĖW…„7Cū­ä+ô¤ēđî“}}å͌R\GŒ9qĶ#ŖcļsŠEđ֐šÁÖĘ1¨žˇĮÛ¯Oj×ŦÍ_BĶ5ØbQ´K ų‘î$oPG"ĢÉáM Yå™ôČ ˛ ŽGÁ”t\ú{Q/…tY´ûkąE‚ÔæÜFˆ/÷XĀօļ›h–֐ŦQ'E_ԟSīRÜCÄ €˜ŨJ°ÉÜV"x#ÃIQŽ“Hdķc\ļ˙ŧ9ëīV,ü7Ĩi÷W7ļ†9nA°‘Ī™Ÿ\žOŋju§†ô{|Ëkc"3Âđđ@ŗß֍ÚN‘évqÚŦ„ “œtöäņīZõ‹'…49o.nŸLĻēLøûųëŸČSWÂXmĸ]&Ô%Š&ŗũQ=vúS‚ü8ņÉhöĨ%mō.ŪŊOŠ÷ĢžŌoŪnm<)åŖ+˛ŸŨ$•ö<Öh/Œc?üŠ’xSA–yf}*ÔÉ4b)gŪAŅOˇĩxOAļžÚh4ģhåĩ˙Pʸ1ģéNÃšDZ„—ŠaÜI’Ė2OąĐëÖĢËāŋMlmŸI€ÂdķJ €_ûÜŧuĢOáũ*MR-Iėb7Ņ(E˜į Ÿ\gŒÖĩcŪøkHÔ¯ōîÆ9&woMĀ6;g4Ųŧ-ĸ\^\^MaÜ\'—,„ļ]ēyéíVôÍ*ĪFŗ–-Ôåc HLžĩMygo¨YÍgw Ío2’7 QXŋđ„xwĘĩŒéˆVՋÙ(ŪšĪ_z°žĐâŽō4Ķb z1r 'Í÷9=}úԚW‡tÍIdąˇd–På’F‘ĘŽƒsp=:VŊQEQEQEsú‡ˆš _û#O˛7ڀˆM"yËƄāOŽ; ­oãKYí¯7ÛK ũ¤ëm-›0-æŋÜē`į­_ŗÕŽÛT[ û%ˇ–HšXš9|Å`¤ā`ÃĩA¯xi~žÕlí…ōX– “a~ö ‘ZšečÔtģ[І1q˰œíČÎ)×ĪwĢŊŒÍp>ėrČQOâĮå\įƒ|jž)}J)l^ÆæÂ@˛Fî ŧ§žņ”Ū)ēŧ[}&H-lįh$žY‡ĖG÷T§į]}—¯ęĸčˇ:ŠYÉwöt.ŅFÁIQÔäúiÚĒšŪ…eĒGD—pŦnjrTœŌŦ/ø’/Y=ĖöפM+5´[•BŒĮ#gKÖ!Ô|=kŦ:h'ˇHÃäR3ÉúVe¯4ۍWO°hį…ĩ$g˛yuQœ€@#‘*öš¯Ûh“iŅLŽōßŨ-´*ž§’O°4ÛŨqāŋ{+=:æūx<ŪK"ˆÁč b2N3VtmfĶ]ĶŌö͘ÆY‘•ÆNXv ֕Īk^(MYŌė'°štÔfGp…v#œđFsĐgĨt4QEQEĘGãkIüI‘Ķ¤ŗKn—J Ą’1— ™õŽŽŠ(ĸŠ* ‹ˆ­-Ĩ¸™‚Ev=€&šīxž/^MlšuÕļČ#¸G˜ ˛FüŠČčqÎ;Uŋxū}mUŦ'ŧŠeXYAEūņÉéZļ—+wgʂĢ4k ¨fŦW;â[h:3j‹m5õēMäČm™NÆŨˇœ‘ü\qščˇ(8ÆFqT5[û>ØOo§KzKŦr"•P3Ÿ˜Œũ+ LņŋöĮ‡ŋˇ-4=EŦŠ—RZ ĖŖ9 oíƒWŧ5âqâ{5 ]:î)ĐŧSNPnįĀb}{vŽ‚Š(ĸŠ(ĸŠ(ĸŠ(ĸŠāÂûQšōĩ= Ü1wî ,ō į€*ƒLÕüEmá;ßKŦÉu›%äfŪDÎ ÅS$ ÷ô̈ū ]"[›ŊA.´ûÍIäĘ7™Ęä„Lp ‹Ã7ÚĻ—qā{VÔ[mRÅÄļĖĢą6F ĀČ÷įšô¨/mnžhíî"•ám’Ē8%ĐãĄŦo’ŋü@@ĪúÜ÷ rúëÜ'ĀmÖdB?ēUw~™§I,Ú?‰|’¤WÍ{‚ШklFc d/bk'ÄzΠÚī…š˙FԄëĢ´ Š 6?›œßÍtZš[xĄuŊ1.ŽŊ{h#ûŗ†!€<ÉG¨Æ8ëŽ=kOÁzuŽ…Ą=˛ßũŽVēÜ\ŋĘ%œŸ›oļxü+¤¸„Īm$k+ÄÎĨD‰÷—=ĮŊx”ž0ņ‰q4úĨÜŋŲ:‘RaÛ>l>_Đ×E¯ÃĒ>™āŸ´Ū4—ķjņČf•t{‘Î0֖˙ÆƑĸx˜ÅåՆĨ•Ŧæ5D9`07ŌgSņ&ĻkĒ—WđÃo§‹ģ[ģ•‹Í2.CĻĐ9_ēzwëZ>ąŦÃâŨNŊÔ Ôzž’näV‰WˑvũŌO›žkŖņ~Ą6•á=JöÖx ¸†ŅÉ9ųē ˙O|W1á?۟\i•ėŽgo4"č(5ÃQ€8’23Ålø˙_ģđī…ÚęÅWí3O˛; ˆËļ7§ķŽXÕŧKሯĄ’āMo5Å­ŊÄ˛+Ęža î@Œįj]wYÕėeņ6™i*ļĨĮosąYՀlŖd`ƒˇ=;šŗ§jZ×ü$N›uŠ<ƒRŌâF 0Ę6ō˜ū.‡=+šŌu GÞžX/&¸–ī]’Á7*b"ĶŌXķÔã8­OŪø‹OŅHvÁnxú{šæĩë›å>-đÛjkkĨ Čįf ã*ÁŖf#•8ΝZëŧ k%ˇ‚ô‘%ĖĶ´–ą>e#* (Ā ­ņ<ãáĻŊ˙^¤~ĸšŠŧI¨øFdˇķfÔa˙„}¯ļ>Éc…9éíZÚÆĢ ˙‡,äÔ&”ëļÉ$›T˜%2 `HÁČé\ąYĶāœūuüˇ773,ËĄ~\Ũc9g'“šîômCS‡ĮÚ%åéģ…l"ģFhÕJ31VqĮzę/Ž4드b'ūFŧÛĀjMđ~ŲĸēļX Ŧįc@Kc/ßpūUŽŨøwāvujĒn_ËļÎPŧ…wĮĢzūģĢhíâ *RWšËJ]FŪéŖBĘrC+q‚ ôĢiŦęŅxžÎ&Õ7Aq Ŋé†D]Ģ*…˛qÉ?`EãgGĶ5 ›čõsœfŠÄFŽY7(2#§TųĮĄ­¨õXÅrŪmːKĨŧËszbP— gå ü=ø§x#^ÔnüIuaŠÉĒÂ˙dWK]J4pl3#(—‘^‹EQEQEQ\ĻĨđīÂÚÆŖ6Ą¨é‚âęR ;ĘũŊ9āUí?ÂZ—ĻK§Yi°Ãi3o’1“šŊrNsīWl´‹=?gˆä.Đō;HÁ}71'՝ƒßT´k[´g…ūōĢ•Īâ5™oá ŌÎ+X,ļE c>c,0vœädzS-< X­ĘÛØlKÂt2šYw œīPÃā[ÜÚ\Eg"Ëhģ!o=ÉUã$ôāv̚g…´MšĶ­-ßėw%Œ°Ë+H§wŪûÄã9æĒ[xEļ´’Ø%Ė‘ínIs)w ¨ Û‘ŽüŌÂ'Ļ=­åŧĸyđÛrī3o•p@RĀôÁ9"DšX&…ažf‘"ŒõD Š4 ØéŦ‘Ku;F†8~Ķ1“ÉOîŽztõĄŠiļē­”–w‘ `“SĮ ä{yÍdi§ŪZJ—2­î>Ņ+Üŋ™(.vãˇJÕŌ´ËmMŠÆĖH-áPI#9Qé–$āSĩM2ĶWĶå°ž„Mk0HÉ 0qôĒ…´Ŋ;ÎōáyŒąyÜHd"/ųæ3Ņyá?Jŋ7yī?•䥚f“ˏ9Úš< [tQEQEQE ž!p°4ˆ$e,wĖ@ęqéČŠ¨Ž|xĸøL?á{K˜îLâ9˜/–č8āƒžžŨĢ ĸĢ]ÎöÖ˛Mŧ“˛.DQãs{ ?ZĪđ߈mŧM¤FÖĄŒČņė˜ĀŠÁčOzŲĸŠ(ĸŠ(ĸŗĩMbËHŌîõŠŅėÔ´Ûâŋ€īÍMa{Ŗao{lÅ ¸dŒA*FG­ŅECöˆ~Đ-ĖŠįŪ#Ü7éœzRÅ4SĄhdPJå[##‚*Z(ĸĸ’XãÛŊÕw̏ã'Đ{ÖuŽŋayŽßhđģ›Ë$G™Ja‘ƒĐĶ5iÚrŨČė—— o … åÛ§NŪõŗECTÔí4m>[ûŲ|ģxņ¸ã$’pÉ$ ƒC×ėŧA Ė–~`6ĶĩŧÉ"íd‘zƒųÖĩQ\Æŗã[] P‚ÎķMÔŗs0‚ŪD‰JJį Sģųâ?‹ Z-7ûU’æDb8U‚ŠîĮv?ĘēZ* 'Š)cäEyI¤€X“ßŠžŠk6Õ$įž+Aņ.Ÿâ4ģk8IŒ$ŅŲ\ ãž÷LÕŊFôiú|×f į.ã šØ{õ[ÃÚí§‰tK}VÉe[yķ°Jģ[‚G#đ­Z(ĸŠ(ĸŠ(ĸŠ+Íc´Ÿ/]UD6ļ _ŗŒ,l˙ps׏ŊT߯ēĄđėū-[‚ Rû*iáWcEŧ!ÉÆw÷Î ĐēņF¯w‰õ+•ˇƒBmąÛ4`‰ĘŽæŪO ƒŦøCâ{ ~)eŗ’}::Åæy%ä,1Đgšõ ;„Ōa{LęO .6*†v :U?Ë}má[ûÍ:øŲÜZÂķ‡ĢîÚ¤í ú×7Ŗx“Xˇ¸đ¤Z•ßÚß^ˇvuX•D,0*@÷9Îk/@ÔītŸéqZL‘›Í^x^E ČĘų(¤ĮJšŽ5EđŦ?2K¨ĪŦ*+†hÆėyŒž¸Zuߊ\mcü v÷ÉŽ“ÃÖ×Zw†,áŧļļˇēŠŪÃnqˇ ?Ö¸ĮzĩÎĩŖÅŠŊ¨ˇÔÅÆôTÂÛķŒI’×ĶÚŊB¸{ŨOÄ𰎇m¨[Įi5ƒ]ŠkmÍ ˇ~neØüAšÖĨŌl Í­ĖņO%ÔÉneÛå>Ė"ķÕšį ĒúžĨŽëžķf]:I/ĨVŠkSū˛4|I‚AÁĮ^ĩ­s­ęßÚŪ$°†îÔ m1.íįX2rÛēķķ}Ū>ĩBÎ˙VĐüá{wm/Ÿqkˇé¸s÷†IĪŋJąŠxĮQ)â{û)+oČ#ō0~Đ@Ëî=G\ }MO7ˆ5ĢŋOeew6mŖĻĨ<š2IO<į…t^Ö$ņ„ôÍZxÖ9Ž`ęŊt8ü̚øŽ—įA˛6÷qÅŋļI#hwc*í9ČčGNõÎŖâ›ŪhdÚt’˙g-ōģÛųa¤/ĩÁ=qœÕ{ŸęŖIÖ|B˛Gž“¨}ŦÄ`ųĘŦĒėXōXã”ËßøĻ-WÅ1A¨[m&Ņ/!ßj70e-°ķĶ‚3Ö´´Īęíâ_AxđImŽXŊȉŨ•Cø†÷ŽúŧīâsĖ—ūû:#Îu„§ŠíVüŽM}>¯ĻjҤzũÉ{åǏëūÎ0=Ģ?ū]Vö}ZëOˇžT°ÔœvQڗķ•J‰¸)ä‘ôsI}âOZ_ø¸-ŨąˇŅĄKˆCÛ|Īš ė8?†j NëTÔÛL.1ĀŨÆG‘Uo|Ŗęú­ÅÄâõ ļ[Bˆûb1cî¨ĮJÖđ÷‡í|5§ 9ޤˇ_¸ˇīØ= Ē^<¸ŠßĀúĀ•ˆ2ÚÉj%”€ĩ—āīé÷>Ō/D×O,6"ˇļ ą*…ã äwÍZ4„ĩą‚Ú[Ûscp×ō$ŲxŲŗ¸sÁÍ$´XíîĄ^bi„čÆ^`pKCŽI<槟ÁVWV Owy%ōΗ ~ė Čę0¤qŒHÆ1ÉĒ~%đŧ×~ģąļŧÔ%ŋģ• šI6áĐą9~ĩÖZ@đYA’´j!ęÄ gņŦMÂ0hēŽĨxš…åËj-žæ9ĘfÆ2QŽ8¨l|m§Â-!Ô/†Ÿ3ÃgšBF[=ņ’$€IÅ1<1eĸŲGq>Ą<°éÖîļ˙i+ˆ\[ž8ä×?đßCąÔ<+ Üɨ5×övįŽÜļ)Ná“Æz€}k§˛đ}ޜâ+[Û´ĶÄæálC/–ŨqģnyÆqE§ƒ­lo$kk˸ėžäŨ›WĘķIÉ9Æėgœg¨­BęņG¨ßĮoŠ´$*ëĩ ˜ŪGņß8ÉÅ9|ͤJēÆĸ$Ōĸ1[ŸŨāŠ;†Îx~Íø—@Ãž‡HļÔ%X¯õ&škËČÕሰ,Ū` ¤ôĪ|Tū :ϟâ&Ķ˙´ôŨ^ÂhiŽ,­Ä~K‚† r=yųkŌ(Ē÷VŅŪZMm.|š‘Ŗlƒ\D ôԃL…ĩ=FHôíÉŗ&<ĻûČpŖ¯¯Zī€ĀÅyÆŦĐKņĸÅų­¤IE`GĖÆ_šĪ\ŒņÖēāŊ:´ī°I=ÆžŦ°ÜDAråƒdŲ<ŸzMCÁvē„v$ß^Åug3Ė—HĘdfu*ųČ#}8íNÁļ1jwWĸâ苛5˛’ËŗĘP@ŒädœįŊS˙„ČéVÚ|ēžĸék$rDûĐ0ō˙ՏģŒ/õæ­_ø2Ęū{Ō÷7[ßė7ļņí pWÆF@㊎|#g>Ģ6ĸ—wO-¨ŗ"&]ĸ!ü 8įššáũ hĐé–ŗĪ-ŧųĖ Q鐈ŧ5‰`‚ Ģģ¨a†E”$  3)IČ=¨mü)ŋ‹$ņÔ.åēxšölōĮ8ásך¯qām:ęæā™įKĢ…ēšą]žT˛Œž3‚@$g–įÁ—WúĩĶj7ęuHÄ7(ŽĄv€Ŗåã‚:ÁQjZEęj‡›ĨEäÛå×0Sōķå]UrúĮ‚mĩŊF Û­WSm8¸ˇD•BBāc*6˙<Ō\x&ÖoŽŧšŽĄĸ"ōLą2ÉčÃnãV…mcŊģšŪęęoKsm(I_鑐pFj­īí/_XfŋžŒjęéQ“@Ā+ĮQsākĄĻ3Ū^°ˇkPęĘ °œeöG#›ĄhRÛøĮ[ÖŲ'†;ĩHV$ܧWøAĀúÖöąĻ[ëzEŪ™t‘uDøęETĶŧ3ĻéZˆŊ´‹dĸŅ,Æ:lBHüyũ+‡0\Zk­­ę ­pn.•c'Đ|šųV‹x:Ú]z=Z{ëŠeK3dĐļĪ.Hˆä0۞HĪZOđTu¸´‹TÔ ´(Ége?eƒ´íäā7gÕh>X[ŲiVq暘ƒK›ÎļO1>VĪ—‘Éüéš…ĪĮē߈öMmÚ„RHĘŲɓ^•ÛŅEQEQEQEVVŋŽYxsG›TÔ ‚ÚnōĶsrp8üjü%ÍŧSĻvHĄ×#dTÔUkÛÛ}:Ę[ËšV+xTģģt¨čž"Ķuõš6ŗ5ŦžTČčU‘ąœ}Ģ^Š) ĀÍsđ›hoŠ -Ūč^˛oÍg.ö_\méWôkJÕžĐ4鑞Ų<[ ˇ=Ü XE”ģŖĄ#oŠåņ†ƒˆúÃę1‹Dō'cįHÆAĪb+qd@ęrŦ2¨Ŧ/Ěną¨ßØZ<Ļ깸ŽHY į8ęsŠŲĸŠ* ‰ÖŪŪIŲ]–5,V5,Į€rOĩsvŪ>ŅnõGĶ!P7Ņ…2@le €ô,1Āæļ5sOĐm#ēÔŽÉ*ÂŦA9v8ŠŅČÎ3ĪZuQET3J †IJŗRÄ"äœzæ˛|=â7ÄËxtķ6låōfYĸ1˛ž:`ÖåQEQEQEyëë^'“â5·#ŧŗK_˛}Ē9…ˇĖ€œrÜũjü':íåĻ‹=’ÚĢOŠ6›s‘ųÔįĮOÖŽj:ī‰ė^ĘÆöKKiå[‡i`Q#‡÷ģ9āŒdööĒڏŠŧB˙ l|Ue,QL€=ä^H`Éģk0ĪB56Нkpø?Z×moí.-`*m7ÚäHŖŗĪŠĀúUĢoÄ_đ–&™k= ˇ—J7 ´˛8ĀĮŪį&šž3Ô¯<+áë¸-’í^ā[3ܐuÜØĪ?wžõ7†uŋjúũÜ7Ú6™c,ļ“LŠU¤•q†=pGlT_ũŧ)´žáķb+ÆY›2.0Aį­$ZžĄš{ĸéëaíĩžŊ¸Kcļiî€7g ä’k2ßĮū Õîtŋė‹+9SĶdēŠ)nŽHÎ'8 žNĩčēdˇSi–˛ßB ģx•Ļˆ„r9pž$ņæŠĸjē’ųÉma, ąH…žå$  åÁ=ĮjôTpčt#5æšÃŪEņÎÁėm’yąm’M‹÷Ī|­áÍGOŅ—ÅŪ6Ô&õæ0ŨY Į”Ņ Ū'Žk^/ŪÂKx.ž]9īaŠÄFĘ19Ī'¨ÆpxŦ‹˙Ūë>ņ$šmî ´ŗWķcGVųˇR„åH`ō?Ļũžŗ§ŽáÔk_í+ČY–AáŠ4•ÎKtk6_ęō閗6vļ:ęĮIģ…Ã`ɜCžCÎzûUÛĪøŽĖŲÚ^YZYÜˎ faæF|ŗō Ąų‡=ņYZÖŋĢëÚO‚nėÚßûNō9$I76T°Ę}úVûx‚m3Äē¸Ô-ŦÍŊž”—­qn˜‘š`T’y)ÅAeâŊKĪЅōZ*ëĐģZ„S˜&õVįæwæŗôĪëÍa§j:…­ŲŽ5CĻēBq;ŲD€“ĀČč:ôieXbyîĸ–?A^aãģŲ´í#\š8F™ĒęcŠCæF¤˛Ŗ–Ī$•äcŊAá-.î÷Å^$}Z->æ(uA(Ėl]eŽÖLœã^‹?›äIäí; ũÜöÎ;Wéķj7ß ŧa.Ŗqjâi/ōĐĢVÃOŨābē/ÄWÚ\Ö6:”0‹CŖ›ÄhŪ‚0 ĢgŠÁŒU}ĮWˇˇē+Í2Zę倎Ÿ}§Mėx9čxסךŲ5āøÉâƒc/0ĶíŋךUéė diZ‚h~ņMÍŧpĪĒÛęFmNŪî-҇ ƒ÷{‚yãœWO¯øãûYûËi ėˆĮ²ũŖyįkũĐGĄëX˛ę†•ã__éËnÆÚŌŪâO<lm…#ÁįôރūĢŨSSĶt­)`‚îįMŒŌ\)uP$žšãž<ÖuáÉ4Û{=šŦŌZʒĢ ąƒ¸äW¯ôą?ŽîmôûĸCsc¨ũ†ęá y#EÚYdpxxÍt~×Ä j-´ĨĨ‘ۓą€bįHĮē ķ­Ąøßâŧ}áclä?úÕŠã?ÉĨX—ŗK[‰-n-ÅÄÄ_G ¤FŠīTãŸZŸâĨôKsfļöúteâbBģŸqķeES´ņļŊ.‘§_ˆŲĩƒĻĖĸ73fåų¸čzօĻŋâ{¯jzlVļÅay;€ĘL2 Äōz¨įßŌ¨\øÛY{vŧŗļ€$úŖiVÖō!ŪŒsĶ ņĮz›Qņ?ˆ´mWHĩÕ?ŗí ž´vyDLâ;„MÅ3¸QôÅuē ē¤ÚL3j˙gR€å-ĐĒ #É$šã6H°jéo"é‚%te?>ķ”į‚}ē×M7,ZßN‚ Ûģd°ŸíQų{ y‰$ģ§$äÕŊ[ÂV:ƧŖ4÷1]E[—…Âīš*xūXŽfūīLđmđrÚjŨÚJ`/‡ROĘ"É­ŅāËYü ká™'šŪŲ!Håō †|FH=ééāØãÔĶQ­ųšKOą†%?Õũ6õĪ5Ëx‡FūʋCđõžŦ, $”^jŦ‘‘ōžƒ$ƒĮ­ŨjF}KNšŧ˛Ô--Š47ļpųhĖŲܧ0G­nx›ÃÃÄē_ö|—ĶÚÂX3ų*¤ž#īŒÚĒŪøPŨ\‹Č59í¯dĩû%ÅÂF¤Ī¸#õÁĩ^ßĀŅXkZUöŸ|öĐiļße†ÛĘVS ļO\œuŽž¸[á´z‹ë;5{˜"Õ&K‡O-[lŠ‚§'’švēŨNūĘŌ-ė|æ•ĸ\X`ŗI8ú“\Ķø'S“Åiâ&ņ#›Čā6čŋdM‚2rAõĒņü1˛:Žŗ=ÅũÄÖ:Ģ<“Y•DŒĨKô'}|+¨KĻžŸ}¯<-šˇ€Ã”p71ÉÜĀaß—>PŗÔažŋ2ËyköO=!XØ&s–ĮŪl÷â‘|4RXßGĢŦZ3ŸĩŧĢĢ(RĨaWŋQUĪÃÄ]:ÂÚ Mâ’Ú˙ûFY<•>|ųÎHė9#ÛŌĩu_ ĻĨâ5‘¨Oo4v¯hčŠxØäã?tûŠÆáĮØôŊ2ÚËZ¸ŽãNšÁ<‘+ā(¯ĄëëZqx6?í{‹ë›ųŽ#¸ąÛē(VŒgĶžI?3OđhĩšĶ¤žũîSJ…ĸĶŅĸÄÜĮ?31Ú¨‡R.‘i§Žŋq˛ÖøßÆÆŨ ķwįÛ$ņ]ēŠō‚HC¸cŒg׊älŧmi%šŊ’M&ÂéŽí,Œ`yrHËu $ ŋĄxnãEÕu+Ų5Y.ÆĄ'›"<*¸|#ļŽ’¸/øV둨é‘ë7 mxeÚ<•&%•ˇ8žHž•}<!ÕíoŽug-ėšÄĀ`P¯cp<õ8Ōé^šĶ~ĮhúĖĶi–/žÚÛĘ ÃÚÁËŸAÚēk„–[y|™HY†Ø{ĩÉAā‹ë_^køŽā^ŨÄąJZÚ2ĨWĻ|=°mPŌĄŧ¸õ)ŧûëĸ¤ŗžãŸAÅXŧđƒŪũŠ%ÔŲĸŧŗĮ$ 㠁r™ûŦqœūœTrø M>ˇ'ö­Â^Ę#L"U@÷‘šXü-Ŗé×6:ĄKë;CcįËq$9 ŽF s~ Ōí|=ā]Âņmŧ‹ÉXÍ#I1’Y‡ÜIü맋ÁQBhu ⾒ņīešE_ŪHĘWNFĐOjÎ×<,šUĻ™cqvˇ2j"öK¨1# n,ltQÔŠŽÖâ)eĩ’8g0ĘĘBĘ1SëƒÁŽRĶĀ×6^"Ŋ×aņ ßÛ¯Qc™šʕQ…ĀĮǝđÜMi¨A6ŋ,—÷QŨO3ĸ- Æ+R_ |FšŋöœÁžbēˆF¸ŸĘbĘsü<ž@Ŧų~Äđˆ!Ö/!ˇPūЂ ˆDrnÜzŒ‘’zÖÆĄ˙aßk:Ģ^Ü]=ņHŒ‹ō”\¸˜…yĩ‹jv–0k–šŪ‰4ŒæxŦ§ˇÍˌN6>f>\ÖēMzûHņž§oáÃÂūÃRŽIU†6‡ĒãåĪĢ ôP00+ˆÔ~Øę7zŧ§QŊŠ=RDšh“n‰Ŧ Į:U¨ŧ:ĸjj÷Ë:Ųũ¤dl'q<¯Ry¨āøgiĨé6–ˇ÷‘ĪĨ;5ĨßČd@Ü2ž0AŌ§đŋ‚ĶÂ×ú•ÅžŠuqü†i!•WCÕ˛s]]QEQEQEe^ˤi+öĢĄo wĀo,nvöĀÉ?Jd$ŌŽ.cļK°—?–ĘŦŽN3÷XĐØĻ•‚@ČéNĸ˜ņ¤‹ĩÕYOfGD#EUŒOĸ°.ĢwĖ~[dðãŸÂ´,5}?S2-ÜS4}üÉõE_ĸŠ(ĸŠ(ĒZ–ĢcŖÚ}ĢQēŠÚÜĻI[55ĩĖ7–ŅÜÛȲÃ*‡GCĀô"§ĸŗõ]oMŅ!Ž]Jō+XämˆŌœ}*ø ŒŽ†–Š(ĸŠ(ĒVŽŠ Íaw Ėi!š' ŖŽõvŠÅŊļđõū°ļ—ĐiאˆHąĖˆŌ„¨Ī8ÍmbŠ+. J¸Ö%ŌcŊ‰ĩ”ŗÛįįu8ôæĩ(ĸŠŽ,­V´ x„ßķĐ ŨųĶ––f™bA+ 3…ˆ÷55QEQEQEQEå°\MĢü|¸ļŧŨö}*Į}´M÷w6ܸ÷æēßiÖÚúVšrņG.žŌļæęČclëŒgķŦ[ŪÉkĸjĶCéšÍĪŲáŒæEģ!œāįŒwĒxķÄVzÍäö6A¤^‹iŒ,ĀĖ *B2:æļ—ÄēĮöŽŖĨËob—‘X-ü šŠm$‚­ß#Edi~>×o-´ ntË$ūÛې•˛ŒŊÛũ“ƒĀ歟ˆ3.3Ëgö’ęŋŲQƌ|ˇ—<6zƒŸÂ¨øÛPŌėĩčžÚŌmKE‰.%PY#–&Ęõ ÕŊ'Å÷÷>#°Ōu>Ą`o`he,T e_ sĪjėëÎ~!ÍäxˇÁ.°™j.v&77É֒͜îÃ[ƒÅwū5 vēi…,䘸Á,YŠä ŸŌ§‹âéĐ#Ö%đõÂ[Í2C }ĘZFۆĀČĮŋ´ôo\ëVZēÛØCũĨĻMå<"ãtr\ãÛ­RŅ|wy­XØ]Ļ—qLŗ=Đk¯šŲb8lŧŸj];â_ɧ0‚Ũ`ÕYŌČ ŒÉ¸WĖ\|ĄąÛ8ȤđīõMzúŪ3 4VÍq=Ŧķ¤ĨÄO~ƒå=>ĩŨTRÉåBī´ļÕ-ĩzœvÄč^=—WÕ4ûIėÔc™āRdŒÆpVE c=ˆĒĐ|Fŧ6÷WwZ ŠŌĪQuĖ‹s¸‡,r ŖpÉŸKâ¯Éaâ­2ĘÖĸĶŦˆēiîËŖ(ĮaĪ5Ņø3đ„č{FØa˙Đ\Öu[}GģÕ.Éō-bi_H…rļŪ4ž?ŲŠweošÅœ—6 $8 Ē$‡Ô‚GŊrˇēŽĄĒ| š˙V‚2ĶI¨QË1Ėāô#Œtž+´˙„Ëû:ëRļÕíVcbˇÛĸráŖ$Œ#éÍAkã[‹šbˇH,ÅÕŨ“]ÚĸÜn I08lŪôxCÅúĮ‰ZÆâ} ėöv­0¸Y umģOų#Úģzān> 1šÔ%°°76:uęXÎ˸ČōąÁØ c žĻ§ēņĶE§¨Ãmé]Đĩš•œ‰ eCÆˇãƒQŪøĶUˇÖĩ> *Öhôë5žķÉPņ>ī Ķ§Ŋ3Søˆ–qiŗFļ°Į}b/#ûd…<ÂGĢßZŽg]žøŧvV˙eM(M´Ũ‘—,@R qCÖąĩ=nk‡ē›hÚ5ϜĩÆuŽr>c BęBōI>Ø•u§ÄšĨˇˆ4ũ }2ÛíWvrÎŦ—DĒ´xųOɜŽJįĩ¯ęú§„4ĢŨ>Â(÷RKWčåfƐvœžÃą­‰5K[OĮũ§ŖZÃz4§¸7é&öHԍÉ÷G'š[/Ī:é3ZD–ZË2X°ī ‚TH1¸Ũ*ĨŋÄKĶcõ֏vĢĒfLŅÎ\‡ßŗrŖ#5/ˆŧyq ęčtôû5‰ƒy•ĘŧâC‚bãoz|Ēã=¤€†äœĶQ]Ípˇū.Ö­ŧ_y Ã¤ÚĘąY5ôs™Ø,a†Ū¤ņF“ãŲĩ ´fĶ ozÛIįeՕsķ.1ƒƒŽjū#E,ą]$vÍĨ˨}H—3îŨ´Iˇ ģôæĻ˙„ōhõøŦæ°Dˇ—Rm9C9îÆD˜Æ j’ĩΉHˇK6™nžŲĄiĘÍPĮyR9SĶ=k>/ˆ:Ģéę-¤[ˆÆŦtɔ\ƒŧ&åãžséS_xÃÄpx¯TŅ,ô;kÖ´Š+ˆĘLAxŨļāįøą“éÁ¨įø[˘bˇk +ņe,eĪžį 3¨`øāÔÖž>{¯G¤,v›šņíž‘–x•AÕ# ãĻEwÔQEQEQEW9ĢøV;ũjÛZŗē{=RŨ bdPË"áuî*h4Iæ•ĻÕīõö4kCåÆŠÃ ÆI$Ž2MdXø ;SĻ[K~ķiš\æ{Kc[ģ›<íĪTü<–įLÖ,_\”GĒ]ũĒR-×*r=8mŧxuŠõQ­˙¤Mb,ˆ6Ŗ=~÷\Õ‡÷–Ņh1Ϗ čŦÍo›Q–ČĮ?7Ą4äøxĮOŋ‚ãTķf¸ÔĨ žLĀįĻyc5įeÔ,5Á>¤‚˙YTŠ{„ƒåHÔ`*Žī×4č<¨Eâ­3]m^ĘĶėf/˛ãzq“Ü+´ŽÄ~ÖuíwMÔN¯i zeɞÚ1jĜņ†;ųüt•ŽŖ¨xr{´ÛĮyÕ24DʎqģcgqÅUģđ$˛ÃŠéŨÄē>Šyö˔d&U$ŠeCœaŠõ=2zÔˇ^ÔeÕ5ģ¨u+DMNÍlÄmlĮËEwrpĮô¨ađ=âiļ–“j— ob–^Tö^dNœ>ŌŲ ‚:ĮđĀ÷–Úĩ”ú~Ą[G§Åc8• vXØ0+ƒß4Áā+ÆđæŠĨOĒBĪw}ũĄ‹nT$›Ä„ģ•ČąÅ[—ÂZŸöž™ĒÁŠĀ5 a:Îd„˜ÜLAmŖ9 cšŖoāû YéRîlu!o3Fvļž×˙hôö̃Á÷Īâ+mFæúÚxÆK)á0°iFÜäÜsĐzSl<soũosw Öz#3د–w–ÁT2ãåˇZĢ/€õ7ІššŊ¸cĒI¤6Į–Ū&7tÎyôÅ&ĩđúûVŸ\q̤iĒyNU ÜŅ´x†ĪÜČÎ1šŋĻøKTŗņĻą6ŗđZ}’DksķĄmÄƒģƒžžÕŲ×wá]f_kęvHˇFÉ"kfbŠ’A'\šŠĻøSŗ‹Ãp>Ģm$ą@-ˆiAH'wŋ¤xRûD‘ŦŦ¯m“HûK\*I™6ãlãn{ã85Œß5$mõ¸ÁT:Œ2IgÜsíŸ›ņŌ´—ÁS=õŧˇwļ× įÚŌfļ˙HL>ā‚LũŪĮ=˛*…ßÝBheĩˇ×V+Oí_í8#6š*ûˇcģ‘éŌˇŦü5ykã[ߝJ'K¸Rˇû>6ĸgmŨr}*¤ģĶoĩôŨB(4ŊBāÜĪBL¨í÷ļ>pĮqÅF<!ŋˇžęú˜­ī âI%¸ķĐî,dĪŨü:S| ¯öÍrōöūîëOššŨb.Ŗį$)ä/ ĻkšĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¨¤•!¤‘•Aff8¤Õ{ RÃT‰å°ŧ‚ę4mŦиp§vІyáļˆË<ŠkÕŨ‚øšĄxē6ŗ`ļ÷iwkrÛQ]•–Fž§ŽÕrÚÖ×MŗK{hŖ‚Ú%ÂĸĒĸŸņ\²Á*Krތ?B*b3EQES‡Rą¸ģ’Ö¸$¸ŒeâIeíČíW(ĸŠ­oymwæ}šâ)ŧˇ(ū[†Úè8čjÍQE@×PGp–í4k4€”Œ° Āu wŠę‹jÚrÄĶ5õĒÄŽc.fP̜õöĢ ‚2:RŅEQYļ:Ū•ŠÜĪmc¨[\ĪúØá”1NqÎ:t­*Ŗũ̧˙h˙gũļßí˜ĪŲ÷øÆ~ī^•zŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸ¸]SĮˇZgˆītwŅÉŗ]Dæä:îņׯ.•ãKíZnáŅ•Ŧ^ĐŨ4Šsš ›vōŲ)š'ŽæÔ¯ŊŪ›ö6ůĄŲ!f(§•e jĩáĪžŋ¸´b’›Í†äIŗ Œ0nJˇã\ø_EmR 4ßCũúŦģ /÷ēŒõŦģËee¨^ŪiĄ-mäŽ9÷}ĸWÛĩWŧ2~ĩ[Ä~1Ô-4=r×û=aÕlí<ōŠ>TDĀ€ęØ Œcj/^iļ:&s`­ĢŪÄvG%ČÛąeŲđqŸ§SK-uHtû[;A=ũü“Bmd”O/!÷6œs‘T~¤kmâVHĩš˙vÜÆ8ü+{^ņRhڕĩ‡&šhžbe(¤w ÜôâĢOãhĞM­„“ÜGdˇˇ1Q†@įĢxö¨nŧYcŽDļ6#RIė>Ų*šR3ĐAËuãÚš/ IĻ[ø'ŸÚ:SŨ+^lļ”IˇČ™™°J÷Ęē;]RÕ5˙é×T˛ØZĸĀL€}ÂO|åũ)|=âM'Nđ§‡í´m6d:€u˛ąiā’ŘôķīS\|B† n—M–Oôņ§\Æ%PÖķ– õō*wņÂ[Í­EuĻÉēdÆwLģe2œ! Нzfĩ´sûinÁŗ–Ųíe:ģ+;CeJđG=jļŊâ…ҝíė"˛’îęh$¸ŽLg“ßžRšņŨŧz ôZ}ÍÅϰƑH…rŽÃ!Jž{ž•4Ū6˛ĩŌ/¯n­§‚k+•ĩ{gÆæ•ą°w~ĩƒŖ[Ē|gž›ė‘ÚĪ&‹Īx š”ķœ đ5Öx›^_iBõ­Ūvi’DãævĀ$āāzœV}Œā}YŋÔ`û+i TŧņÁđîĢwo§šÖĪí ŅÜĢFT†ä8ôĮ#­lxF{ųü1`ڌ/ȅg”HdųGÎHõĒ:‡Œ.l|[‡×Ešin!i­æ(W Ųūî3ŪŠŨ|C†+Mî 6yáÔn™Û"‡Š`HØG~TķŌĢÃĒéú§Œ4KËŋ]AĒÉorļ˛Í&6l$2•÷ėqĐÕÍ;Į2ęN‘CĸN&7ŌXÉN›ĸtfolOZåĩôŌŽžxž;-lZ D¤ąī™„‰šÔûæģ=GŰé×7V–Ö­vÚu˛Ü^m/”„1ž­€N=G¨xŪ(Ž­íôËÔ^[íÛ @°v<õ'°ĒVŸō(LZTë%ė˝æ¸UšRģˇîĮĘ<t­˙kđëą]ĸÆ"š˛¸kk˜ˇîÚãžpAČ5Ÿâ?R]> ž˛=á/'–›ō`åŊ¸úÕ{Ī˜×Ã˛Ųéou¸ŧĐĨXŽėGLwĨ>=…4yŽ%ŗdŊQūËž`!§$cĻsŠÍđ°øZ~)3ZĮo?Ų-CˆÎUÍķĮ^*˙ĝ[UŌ|;ŌāV71@ķļ÷:Ž9ĪOjÆ×šæ‰ŪŧūĖCŠIetä-…Æ_'œVÜ~?ļ›Dąŧ[fŽōöņŦŖļ•*’-ũŅ‚sZžņ,^ 7đėHîė'0OIŊsŒ‚­GˇcTõ¯j_Ští-%.´Ėũ§n .[pÛĀįŪŠŋÄwˇļŽcūĶžöKo$ÛR9#Îō_t 㜎)Ÿđ°|ۍĩŠŊķ_ļŸ"™I†'QÅĀ?)ÁĮz‘>!@|5k¨Ŋ™ˇ7§OŽÔ>CNŠÃcîņœãĨC˙ a†â‹%]N=@iņÄ$+˛œ‡`>P:œv­ ø­5ûŊKO–‚˙NGqryˆA ­~•ŌŅEQEQEW%â/Ļģ⍠XķgģųËČķŽįŠMđQŌ|9­évw¯ē„“4s.A„6vôĪoZŰđŋkycuũĢi Á`ÖL"Véwdõ$ŽsZš'‚¤ĶŧAmĒĖļi<4rKjŦr[ģ¯N:ũkŠÕôôÕtkŨ>C„ēá'Ķp#ú×)']ūŲxtŨ)ŧ´1ĖŗœĶ#nÉī‚xúU{ījāׯoįļˇÔ5+˛ŒBYŌ5ää äûQ?ƒõiî4íbāé÷:ĨĻôkyw&U] ‘FĐsŽæ¤šđv¤5+[ŗ{ĩK6—0)o˛AŖhÎGŠëW<áŨgÒjņęWˇ^^=ÚIā۟âŖņW…nēA­ÅvzpÔlՖ՘¤’ųhT€č=MtūĶĩ->ÍÆ§,M3EŽ,‘Ē Q‚@ë‚zwŽ]{•øŗĄ›(â’āiw$$ŽUHÜŊĀ8üĒ›øWĩĶôK}>K'{-IĩK†•ŲCĘŞ̅< Ũ}ēWCĒčšĨጴ=fl-ė#•$Gv Ū`ãb—Mđ ĶŧkĢëŠ 1^ĸâÉų$Æąīĩ?ZŸÁåĮ†uŊ$Üičڞĸ׆@_ #§'*?3Weđ•ä'ēÖ!ąĶo´`.aēb.ƒ”í;G+žÖ Ö.|cx4.;ČėėŌÂo˛Ü%˛ #sDC)ö#€kRËF‡Å‰wg§Å§Ũhw/ Ų\Ÿ2?—ät,3‘čÜķ]vƒ¤ÉĻ%ËË ”2O s¤AQ@8šŦø?SÖ|JuomÍŖØ5 ‚áKy,Į™ Į­géū×m,ŧ6˛ę6m61pĨ]‘—Ë€;Ž2~ĻĨīgĶõîīmĖē°Õ­¤‰äãå`zŽ?ĶŌ<=ŦØøļ÷Zšē°‘/ĸD#Ã)@q´“‚9īWü] Kâ=lā"š;ˆŽ¤Š(Á°qÎ+%ü-Ŧ˙ÂEŖëōÎI,ĸœJ˛ŪS“ˇĐŦë‡wŖJ‚;‹›'Ŋ˛Ô¤Ô-›c4mæYÜã"ēÍK›OûT÷+m×.¤ÃkØãp“É$šį<_öņÁÆŅŖw´IŦ<ąqĶëCü=ōÅ­õŧļíĢC}5ķųČZ ŧ:ׯ^*]CÁēôšu×Û­#žÚéŽŲ`"Ųō¸h9$c9=ÉŦØ>jé/nÚ´R\[ęcQ°sÚ¯Ŋ˜‡û°qč+KX𮩭Co{wui.§itˇ6đ”?g\ ķÎNOŌĩŧ9¤jWw÷瀞…îļļŗ \ķģą9ũ+¤ĸŠ(ĸŠ(ĸŠ(ĸĸšh­â2M*GęÎĀøšXäIŖY#utaĘrãI4đÛĮæM*FŸŪv ?3OV Ą”‚Č#Ŋ:Ŗ’XáMō:ĸúąĀĨGY20e# ƒiU•†T‚:piÔSEOŧĘŋSŠ}QPÍq ¸S4ŅÆ‚Žö ’{ ÷Ą.!’W‰%F‘1ŊWę;TÔQEš!(ˆČ›ĪDÜ3ųU}GMŗÕmÖúšAÚÃĄô#Ö¨éūŌ4ËąwonÆā)U–i^FPz€XœVŨQE`ŨxOIŧ×bÖφSܕn$P`61ĀČÆ oQEVī…´]BōK™­JÜʑá•ã2ũí¤gņ­;]6Ņ-láH`Oēˆ8fŠĢw}i`¨×—PÛĢĒep ŸAšK}FĘíļ[^[ĖāglrĢ~­ŅP\\Ái™q1%į”@Î9ęØĀŽ?Æž ]b÷ÂÖövWēmôžp1ē?Čp¸'¨ëĪzî´m. xj;+§’;xŲ’'pÎO'nzgTDķžŪIBr.r¸ä×[á˙؈4ũ.XåˇoėÕ¸ŽI@ $jb9ãõ&ã{BîĘ/ŗÜC XY\Iŗ•댏lÔū:´ˇžđ>ŗĖ+*­¤’(nĖĒH#ÜËđ>š˙m'GM:õš Yî0žXĘd į9öÅPĶ|K øO¡z…Ĩ†¨lÆĨ$W+&ã”ļžîxâē};ŖW×WöŌCqg5Œ+<Šp -!† ãƒYŸđ°ôā–Žö7ánÔImˆÃc'Ā ČČëĪJåū%k:~ˇáˆ‚ĘiZĘú;tŊmY<ÅÜ į>ŲÆ+ļÔ<[cĻ\][˜n'û +5䐀V9å˛rxādâŠÜüB°ƒZ\v…ÄĪmö¨šYbūōœôúĶô˙ˆFŖ6š!ŽéaԛËļšxņČJg9đÅkx‡Äšo†,÷T•ŖåX”Ē%N•‹ãŋÂWkĻŲ-Ģ8+7ڄģ¸[X‘ĀŨ#Ã-oņ Vņˇ6Š4+n›¸Ü ŽŠ8­vd€2N­r–ž;Ķ.îáDŠå,î'kk{æP!šQ‘ĩNsÔ`ÕEø›ĸėģ’kmB˛¸÷M%ž HqĪLšíUƒ(`rČ5Éx˙Ä×^ĐDöv—M4‰ÉŠ–`9Īsž+ŸÖäŠßâg„õEĶg[ËĢk$*Ģæš  įd÷ĀŽ”xãN“Lļē‚äžęéŦâĩĀfRC)į95ŖĄëĐkkvĢCsg1‚â ˜ÜsÔpA Ķĩín Kkéиķ$@Ānv!@ÉārzšĖŸÆövÚgÚ§ŗēŽSvļKmËJĀgn0zį ĮŦ­ü5u­› ļŽĘäÚŨĀų¸;O|’:ôīøN`3Ímũ“Š}Ž8Eȡ(ģžŸœ|ØĮ ĪĩYXI”lc–ö}N3-´`1@2Xä€éĪzŅĐõģOi‹}hX!fŅÆNO¸"Šj>)†ĮQžÂK‹ší 7""ŖĘŒį䌞ŌĢŨøãNˆÛ-šĩô—†ô˜(HWbN¨â”m-ĻĩŠ{†šĖß´kĩLPŽäõĻ]|DĶ"H䴂âņ ˆÔ$1í '°O$sĀ̎ū2ąŗdÁqtĻĐ^ą‹nDG8  ΊÅwĸĮã˛ˇ‚îCû,LĶH˙šû8# Ī>ŨĒŨˇŒ šk=ļW ē„O-%Ō6Œã¯ĘHägĩQĶū"Ø_Gg3iڄ]^4Ē›Rl‘´á‰äŒd WkTuKK{Ŋ>e¸‚‚ÆÅ|Ô Áįšâ> ØÃÃĢ üˆ–gy‰‘Tn#Ė=˙ųVũ÷‹bS›OĶíūŨ5ŊˇÚŽ<š p0{ąÁĀöĒ7>o4ä˛ĶeŧˇÔlžîÚXäžŅ’ģO9æŗ5˙YxŖÃ:ͧö[J—d sŌĢxoÂ7ēxŌl.´K5ūĖ”í 1GB‹ÕIã>•ÖøēÖū˙Â÷ö:l 5ÍÔ- @Ą˛}=+đļ‡â¯ k) °I4ë‹hŖē‹ía™eE Ŋs؀2)ŗxSÄW>Õ4Ļŗ´ŨjŋlF{Ž6p:Œcņ̚´:Ž?ˆĩ‹ë[(ėįĶ’ÕĻÉizwΞ*†ƒ¨;WĐWTđÖ­bŅÛ˙gÚŨ\2:.ãĀ;z€3Uĩ/x–ßÃúރ§YA<ęoŽwœ)u2ŲŽÍ‘Ö´o´v ß5Ϛ&OŲĸ7ī”}–P…ėõ\ņž”–Ú줸ޯKm/í66Z?örĪįĸ™w`ôŦģ øĻßEđϟ&ˆ7čúÚ%\Ļ2Ũü ôŽÛĮú­æ‹á‰/lmlާŽE"ŗÃ ˙îŪ‚ē+IžkH%’?-Ū5fOî’2GáV*âÛÉ $B¤ŽŲ¯(ąđvēēN‹áIŦvŲéZ—ÚÛQķWląĢŗ(UÎCãž”ē—‡|Iwá˙YŧíbüO.#ĀO—¯=~Sų×§é4šmŗ\[ĩ´ŪZī…˜1CŽ™Äņ֓}ŦøtA§F’ÜÅs ëžĐá3ØÖUŪ›âk¯čēģéļÍ”SjæL|ŖáīXž ×ÖÂŪ{:Ų¯,5i¯ĸŽ-Är“šsŽČÁ>•Ûx_K¸ŗ’úōãNĩ͚íԋhbĄF2ė>ņ?Ĩ7ĮUöĩ Ĩ…Ŧ&KˆĖŅÎÛPÆXŽ1Į­qĮÁū#ˇĶ ‡L˛öCRK‰4É/w-W ;Üâ˜ūņgöˆ´•´ŗ1_ŨyņbpĢķ2ąíž6í÷Îke´ŋˇŠŽõsĨZl›KJ‚ėeXsŊ2k2×ÁÚΟaá{Étد.´ģi,îŦ„āoF9­Ķ9zî<-ĻÉĻé’,ļVÖ-<í7Ų­ųįüMĮ&šũOBÖôījúŽ•hˇŅ뉈Ķ6î ¨nzŽn}Ēƒ5/ ęZeæ—m¨ŠĨ:æ)eķģvņ‘Ķ9Tōx{ZŌ|DšÅļmŠũ§N76ĘËFCd0pG^*–ŗáOsp–ée,3é‚Ū¯åGk'ņaųíéQŸëZĨ…ēkšMĩËÅhÂ"šKnāŸģ ę1ˇ"ļáÕîu”[ԆK7ŅŽ›=ț÷ŦÄdž1ëŸÎ™ĻxoXiü? üĮ‡ãaĢ("éölRåF:æ˛WÂ^(Oéšx°ąķlõíatpãĖ/ģ׿Įá]-Ļĩ­Éņ"įIuĩ}%,„ŋē9xdã‡>į8‚ˇ5ŖĢ=°Jˇ´•¤ ˛™™‚8# s\w‡ŧ;ã ø(hgH3 Gte“ėNvííŸZŠĶÁšî…ûũ?ė—WWšbXŪy’” ę0$^9'Ž*[ęú>ŗá†ŗ’ĘM?Gļkvķ„ŋØ × ¤×<­KwâUŅå´ÚôCÎy؃DęĨHCzįŽkŦđ­ū›á:ĮRXEÕ´+ X˛ŖäÔ\žˇ¤øŋQņvŦCi§¤[ˈÍÛf`ão÷xãëR kˇ:æĄâK„ŗKų,>Ãmf’ļĀ¤äŗž9<žÔ–ņ? $đˉd—ÂŨ­RO8”doâûš“Įĩdę>Öĩ;8RûKĶ.&†Ö;h%ŽáŖ’Ũ”cĖWÆHčvÖęøoYˇņŒˇČmįąŧĶáŗē‘܇]™Ü@Į$æ˛4˙ęđØhēĐĀl´KßĩĮsæķpb‹ˇ)É>Õšā]YŅĨÖŋĩmmãׯx ûųl ¤`tĮZí(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ŧũ_J´ÖôŲtëøŧËi@Ū2AāäGB˛,ŧgm{ Ôچ§zĐ6ø’ęäē#ÛĶ#Ūēz(ĸĒ\ØZ^K—6ņĘđ6ø™ÔĶ#Ū­ŅEQEQEQEQEQEN×Mŗ˛šâ[[hâ’æO6fUÁ‘ŊIĢ”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˙Ųleptonica-1.86.0/prog/lyra.005.jpg000066400000000000000000003120051506303110300165000ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā™Û"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ķ[züÁÜĶn­ŌH‰eŊh‡Čühip“†ô¯7Tô=7k_=Ŧ‡œƒNiÁÎSŨ ’HëPH›âē™ƒæ[ ,ÄîÍ.įc–?J6cäzĶ‚gŊV„j"’}?”JËĀÉĪĩ3Ë}šÅ&ÆĄ4´æ§ģ´sM’bĀ*õN)Llz)Ļ#ąĻ’rĖ;š ļO4ôˇ•ųT5'öuÂ>P>´ųIįcôČã™äŪy\qí[ ođĄzžj…žžmœģI–#Z;°¸dĶ!°8øØšöã!ûģü*2Xu#Ĩ08Î2h ‹!.sž•CP´’hCĘö=ë@›;E5›¯Ę( ˜É§\đĸįŪĨūË*>yšô Z@‘ß­!\ķī֘]˜×6Īl‚ŋĄĒÂLŽ+fáwÛĖ pž}šū•„ņĸÃģ% žšüŠs“ĪZnÜõæŦ$gĒķIč8ŨĮŋ›\a€āzÔĖž[eąšBxېŌ‹ŽĖhrAOZPŋ(‡J@‡8 J!`ĸ€¸Ģ´žip0?JnÆÍ8žiâœIōô&å3 äsNaÖĻã× ‚Y¸ũ)~Ņ `ÛąĮJkŖžųĻyméڝ9H•ĻWCģŠ4ĖN)žS S„Ošz"nØÖ\sFČõŠ<–Į=é†"Į…>”އf'–SŒvĨ*HÆi]\1(ČäbØh$wĄCuäĶüŗ“ÅeĮŠI gŪ§1ËsüŠĮŌ„îØĒ SÃŽ•2°ĪŨ4…2Iį4Ž[ĐÅo^šxeÎ}E(‹Œgß)•ˇQpŗœˇ4đø9ļ)ĨXį<æ”)Ą 5˛d`œTÁLņĪŠ¨V<÷âĻa”ÆG*^…Ş,ã#ą÷Ļ3`ä/ÍŌϊfų°ĢN’°ŽŧņBi¤Ņ ČÄ`Š\37aøĶÍŠU'<ú˙J€y™ĪojjĖ›ĩ¸ōÆ<Į'šFšgĪŊeąĮãBÄXg+M$&Ų $ōz՛p0Ũߚˆ§Ī‚*HÎŌ2h“Đ!{ę8Fp ¨\ į Q–c€¤{Ôe˛ø$Sk•ÍbËN›}M4NK ƒË$’=jPJānY æb<„“’EDz“iÉnŸJkzVBrc ÎGÆbXô§ķĶm&ČÛúS؍Yb­ÉįĩXŠQ‚Ŧ ¨ö)_zrGķđ?Z%¨ÕŅ!tSŠif.Í9Ą9É_ČŌŽ æ ļ(aģŽ}3JebũÅ +ˇi›†x§`ģØķ’i§q ØÅ? (ÛŌ…Ģ#QĪJQ’ ĨŌŌĖ"ŒdąĮJ‚iËąĀ­MI6˜ŲPØÎŠQ˛ģ—4Ŧ‡ũšpáAĻĸ’Îv%yô5u‘†2–ŧ˜ÆF×?đ1I^Éu*%ŒĘ6îĶ‚ißŲķ ĀĀMZXŽc“ūû˙ŗÁũÉŋīâ˙… ‚ŖÅ?ąKˇ%ú{>Å&ķpąĢl s˙]ü)…-ņÄrū.ŋáA^Æ=Š˙ŲėßōÛô4‹Ļl™AÁÎ Z oŽ#l˙ŋŸä´ž\yųcĪՏ˙EÚ°aLR?yôĮANōäĮúØ˙:jƌHōüOøS–(ÉĀ€qūĶqúSæbúŧ;WSū°~`ĶŽqĖ ū_ãMōĐ|ÂØcęÜŌ4jF¸\z3RæcT!ØV;ˆnžãüi71įԁŸ'õj Ą€ũrßãG3°‡` 1ūšJ:˙ËuüÅ#yK˙,—ęCG…?ōĪl˙Ė>¯ГŧĐū4'ƒ ĮÕÆĸ܀rƒõ˙Ė˙>fW‡a~ÎXæ)ŧŋãT˙ąTËNŋí/øÕĀ‘g˜?SK˛ķ=>f˙ 9™?W‡b Ņˆ?ë?ņå˙‘4׌Ž?īĨ˙ŸĘ„ô“7˙MōŖ'# ˙?üMlkІM1ÜäČ3øEҤeÎâ~‹š°ąÅžYŋÔPc‹ŗ?_ī-+°ö}?˛OI?īŠSĨČ;É˙|—ddā—˙žÖ•ĄN9ûí?ƋļÆ+dDtÉ?Ŋ˙ŋf…ĶŸŽŲs˙\ÍHaiď˙}/øŌyQ‘“#ßKū4]‡ą]†ũŠ_îË˙~Í5ŦܜáĮÕ Iå&?Ö?æ?ƛą˙X˙˙W°aŸbn¤°î ‹ÍŽß)Š iƒķˇéū4SĘߗ˙^Åėb4ÚąîŨ= fn0Įō4˙(’?åNåsæŋ×iĸáėQ˛Œß‘¨ūÅ'v#đ5ecnžcãÔĢRž&|3ĩ¨¸{ĘÂŅķ÷˙R)âīŽ?ÚĢ Ál ĨĀ˙eŋ.Pãå˙ođĸâöEs cŸ1žęAgũbū *Ķ} c÷ī˙Fgéį’?Ū Rģ+Ø"›BÄįx?ˆ¨Ė/쎿+G÷ācí{?Ŧ×# ns˙Ŗ˜—B%)€sõĻ 8 ûčUßôģŌ€;oĻ™&8ÍŌû|ôî „JžCž¸˙ž…0Á!î8˙h]2Ė:\˙Ļ™g˙žë˙}ņĨqû• ´ÄŒcīņĄmä-Đcũņū5lM>0'÷Õî3Ÿ4ø§r~¯ˇŲäR~^;|Ãüi¯§D߁}$š ūķ÷…?Ė“‚YI>¤qEÃęé­ĖŅ ØÆÉ3R,2cw•&GąĢË-Âä˙€/øRyķāŒįŌ%˙ WÃĨÔĒŅ;.JIŽųSЁ­äåŽNØ5¨&ŸĄX°ÜŠ_đ¤f‘NԎ6žX˙ Ŧ7†Mne4í#d¤úm5"ĀÃīBįūkGĖší„cåj<ÜÄ_’SæÂÛŠKÉ;GîŸūų4­mģ“鞝flŅø ĶwI˙a}Z=ʋ ŦĄ#ŒũĶQIĮ?ēr}Õö“w?ŸøĶwpŸŠ˙á•´e! ø˙U öÚi~Ī9$úm5l1ĪŨ?Ÿ˙^”ž!šô4ų‰ú˛îTķ†G˙žM<[܃˙ß­ŦĒ~ōšĮûU ™āI˙}ŅĖ%†ķ(› ‚ōŸë°ŅöĨÆ!sī°Õķ27Î˙ž˙úÔß42P?ŪĨĖ?Ģy•šĘč.|Š=ÎĶP›[“ŒÄí˙<ū•ĸŗ¨ë'úg4ŸhĮŨž`?ĪŊĀđūfyĩšÎ<‡úl<~”Y“ ˇ´’åÔä\KųõęFŊ˜cũ*Z9˜}YžĻBÆá˛b"”‡="k}ļRsöšúR‹ų”įí$ũEÃúŦ—S#‘ÉíšF…ŋį™÷­ßˇÍÁûjsØ!ãô¨ÎĨrūú&úĄ˙ .'‡‘ŒŠ‘ĻšmČc”8­ˇJNJۓūáŠFŖ>1˜1éŠ9ŦKÃɘ „ēiģryē¨JĖvĖ}§ Iŗ–´ĩcô\ėŸĒČįŧŋE8éJŅ9V…tcRLå´ÛSø TŒœ.ÛĀRįÕĻsA@îi$ŽŪÕÔ.Ĩ é¤BG°Ļ›ÛnúBôÅ>q}^g2SØr:Tą…xö“Č­§¸ą'ūA˜ėŌ¤šgAϏ>žaĄĘá3F ĄA†4]šäJéēaá´×ĪûŲ§ŅŋįÆUĨĖÆW9€ĨCŠ~¨Ž…[E.sm0>ÔĨ4"rmįĪ֎aĒRG.¨95­§ŠšÚ(×ĢÆ>ĩŽīĩ8­6)g;N0:ōjšĐʞ’4›I™1`û)—1ãÉũúô%ĻŖ"‚ļwĮ_-ŠM†Ļ8w?„F˛;Ķtģųāãˇ˙¯Iũ™q€ -Ÿs˙×ĨkMLžmŽré“TogŠwļŸúdÔĐî<é—Y˙R?ūŊ/ömÖGî D-ĩĮ´˙÷ėŅömG }–āûymE‡r_ėÛĨ?ņęÔg]ų`*ėē™'ˇôĖņKö-LŽm.qíĨaܗû:ė.ī"”é×`Œ[žjgŠvļē˙ŋMKö=KiÍĩČõɨ°&Kũ›yČōĻ^‘Ÿŗ1˙?Z„[ßcˆg˙ŋm@Šũxōg˙a¨ąWkŠ0Ķ.˙įÕ˙/ūŊŲwyļoķøÔēNĢ(?îB÷XäKĪû&s>äįNŧÉ˙Gn?Ī­4é×cū]ŸŸķëQoēUãÍũĶM3Ügīŋå@]“˙g]q˜üū4ãa88ōüū5_íS÷Ûō¤7́Ą}?ũTŲ+ØLú§üûĶ Ŧ dÄ˙‡˙ސj7CŋüséS&Ģz?ååļû5"˛ˇHĻü¨sƒ šúTãTģīpÄv˚UēÎ|ĖũyūtRŗēõIGↅ”šN{ā˙…Y]^⑎ÕAĨū؛<,÷ĀĸáīĖl™dĮĐĶD]z˙‘­!Ŧ\’ąø Ō˙ĺō§ˆŋá@ŽĖņ csūF‘ĸP%lô­íšēųJā#ü)˛sķ[åũ(¸s3=b;Ĩ?08V$˙ŸzŌǎ&Ų>š˙ëR5úąųm”ūtƒ™™žY?ÅíūyĨō×oΧų5ĸ/įėKúšoÛb˙ŸUįØ˙0ģ3ü‘ũõÄĶ–Ũqūąü Ĩ_[ë|a­ë´˙<_ZŊkĮ}ŋũz.fy´ 9‘ úæ—ėÄ‰ôįü*˙Û,OŨp}?­/Ú4ōp-˜Œzũh¸]™âØāĘ~™˙ _˛1œŸOō*÷™§ļ­˙} @Úpél˙ëQpæei/Cœvâip3‚GåZm0ãũöĐ˙…86—œíÚ}‹… æfp´ē Jŗ~ N_‘+āˇ˙×̧û7$‚ß‚š3§ã¤Į^Ÿũzs=…áZi?īŧ˙Z‹Ę˜œdū-˙×­<éũDĶėøŌ“§ä>ãđ˙Чpššb—nâŨĪcJéF˛(ô kT5–0˛ÍœuGūÍH"˛dŽ&Ī÷‹.? ™Gí'Ō~iC] IĄ5Ļaŗō÷"ũsúĐļö¸$^°ö,Ĩ ™Ę×@gįeĘ˙Jt€˙\ū•uĸˇ\{Į§Íū“üū°›˙JW ؄Ë2 Ũ įŪūŠ<™˙Wîßē_đŠ|„cíA˙ĻLqųŠzÃxŊÉ˙ŽXūb€REc$™$¤Yô1'øS<÷ÎLp¤Kū #Âā^Ą@). ėŧOē(c,ᜓ°ŧ-#}¸ŽaôȲ¨ū´å8-slĀö3čh9”†NŠÃü*EžeÚ6ŽäžZŊöie<ÉhGũt˙ëĶ–ÆvŊ=(b“\Jyō‡ũô˙üUD÷Sg˜€˙ļ¯˙ÅV’é÷ ņmûĒÄSN›r§&Å>ģ ;‚hÍį!>Ō7øŅö‰÷|ČĞūcqúÖ‰ĶŽĪØÔĀGõ4g95ēŖ(4\3žŅ0'äqô˙'ÚŽVOŪh‹iÁ…AíŠS͟ŗ‚}œ…4ŗđBIwáBČÃBíīŧ…iŖÁͤœú7˙Zŗ 9ԁéÉū”\.fųÄį0E?û-RÃî˙_đĢ­00É˙|“MÃĀũîÜãEĮĖW c¸9öō”˙ZG–.0ĐĻ?‘Ģk#;¤”ĀWüi<¨ŋįŖū_ūēWšË;ÔgļT˙8I<…˙ž_üjvˇˆļ|åŨü)E”dgĪ\öųü)Ũ ܨ'ŒŒL„dThžđQõ?áVM”y‘9õB?!ˇ •ķ"?ūt 2g?_3Íh1ÛķōŸûú?ĀU˛|ŧ´_„Ē?­'ŲT6Ąú:ĐHDVųooųęϓƇ¯Í׹Sũjąn ßIũ36Ձü˙…ЄÛĮ×sƒø;ėĒGŪ”ŸúįūĨm:U5ģŒz:‰­v”|{@Äž†_ûāŌ˙U#úSY?)a˙ĄU˙ž˙ LCį&uƒ…7ÉdÎŖķ˙ ‘ƒõ !?9v‚ŌIė)ŠÄ&,ËU#ØĶŧ˛8Yv¤ 1ë#æĨ6ōmȐū4LŽ"“>ĄĮøĶņsŽ$ãūēņĨō¤ĮŪR=ņMō¤<áā?ØOßuÉ?CAķŋÚũiÆ'+ˆOû´Ņ˜û‘ūT Ā•˛ĩ¯jÛ!€ŽĄ2§&˛%Æ@÷­x ‡ũÁ[Ŋ"ž˛4"Ž6E.Fâ9%ų57•:Š˙đĒŅ*SŧįÛÖĻÛ™ú×;;І(”ôČ˙|Ōƒ’Gū?HV0pYķõ¤*˜Á’AøĐZC ӕƒkyDđ>Ļ”Á˙Z˙÷Ö)JÄNVF˙ž˙úÔČBˆFGLzšM¨Ã~Šâ(Xį͓?ī˙õŠ|¨šËž;ōOô y8˙ŌėSŅ›đsOC“ûÎØĪøSĘĮˇ_ÍøPōIø9˙ S$ãîÍ/ûįü)Æ%ã3ūí4¹ɓŸd 4qx82ãÚCOWŲâî|cūzDŒâOÍH!9”/ûĘŋã@h'ÚoČ˙ŲqéæqšÔ^ÍéÞ(û6>ėčxöųá?đ/đ¤//Į[ë}¤¤7ē€ä^Ügūē˙õéĻŲŖ˙ž Š\`y›S0ãwģ>{1õfĪõ§}ŗP'ŦmõOķĄ-f#;GáēŸöK3å~§úŅq\iēŊ?ōĘúÛ!ū”ŸiēÍĩš˙ˇT˙ q‚p~î3˙MSZ)—ĸ ˙×E4]Ä7RžļVŦ?ëŽ?Ĩ r2 Ō­~¤8ūĸ“Ë”qäļ}˜éO`¸1ʲŅqĢ ûJž—hü˙Ф7PŒîĶ-ŗėd˙âŠûæÛßuūá˙aiW9ķ1Ôeqũh¸Æ}ŽÕSaú<ƒ˙fĻ4ļŒ?ãÉF=$oęjq(Č%ų÷ũzā7)Í\D’:t„ã´ÄS÷ؒ°˜}n1ũ)žw8%>ŋáIæ)$–O×˙‰Ļ;ŽÍ€b ­Ā×#˙‰¤ß§æ+ ?ëáøŠhx‡ņ ũ˙LŨČĪĶԐ]u& Ļnæ;¯oŪ˙˛ŠPšYÉ^/Đũ* ČŧmCøJf@÷i˙}-Ĩؑc͞ŋé7ŖĶ÷@˙ė¤Ų`ü~Ū_Ü/˙PyŠzĸgũáū4€FzƜöü æ'h´âqöéķūÕē˙ņFobAQ#ëø#€Ÿš!Ą˙—Č€Ÿ–o n)ÅvDŒjj?Ū„Ō+}Üjvā{Æßá@…@9‚A˙} o’„ô{hĮ›HOMJØ˙Û'˙âiĻÕGPĩ#Ķkũ–ĸ0@F>`}KR-Ŋ™n ˙Ŋրš3X‡Á[ģA˙a˙˛Ô_Ųō18žĶëæū¨–ŠÂ°Į|‘D‰œ†ĀöÅēĶÜu–ĐŸúî?Ƥŗ€úĪûB˙ņU] FÁŪø=qŠŒÚ‚ÎÄvāS°]ūÉ0ū \ôâá?øĒcYŨ+dÅ÷§˙f¨…žÃ÷ÛëūM+B14~GühÉŗ¯Ũŗr÷p­8i—Ŧ?ärŨēUr€Œy™ü /Ų˛GÎ?*E\”é—čptËŋo”˙…5­.ŖSēÎáëš[ü)>É( ųËOU‘zLsžĪ@!†+ˆČ- Ē á…nr$įũ“R¯3ÅËo6—íšũۙā2šėŽ\)ûŌė)Âæ.Ī:ž˙į58ŊÕąÍåÆ=<Ö˙xÔ5"ģMĖĮë)?րģ ķé4Ÿ‰˙ëŌ‰2Œũ3ũjQw¸“–÷eųĶÅũčë DöĖĨĄ!‡=ČM=Â*įzt˙žgü*Tģš{{cëūŽŸáHĶ÷û4'ūŨĮ˙ZhD%P íōõ¨ķ9 Ÿž*OļDxm:īå°ūF…ž2l ‹ŒãÔ ĀŗËü7 §ĶÎÅ9n.—ū_Iú\ņĨŲmÃYįšüūϚԨœmĮûŗ7õ ,?íŗƒ:GoO´ũißoē“îĮ!Į^I¨KiíĪŲŽ? ˙ûJ#Ķø>EČĪo8ũ’Ø°“Ũ‘ÄM˙~Ô˙1R ‹„4gwoÜÆ?M•žbĶĀ˙—•üT˙…]ŠąÅÅČ=ŋt§úĐ/FáHųzsū‚í ÃÅ>Ļ&ūUÛäböāÛ˙ƒSƜ`j2BČ˙ŅŠœzƒī[[“čc“ķûÔßļÛäŗZŸĸ0ūĩ–ī…’zîķ?ĀĶ„3+cíög>š˙âiØM2SsōmbĮ¨æĻ%ĄĪú8ú‹•˙â*[  ģ6Ш?ĒŌ}šî@÷ īJƒúŠîJÍbGĪ}EČ8˙Įi›lØü°Čxėųūĸ čA6ļíæĄ˙ŲŠŪTėŲ]>Īđä˙' ž[û5Žså\ķĶūÍOû-’Œĩ)<œÄŖФû5ãN›!ҎøC )ų´Ë€;ōÃ˙eĸårØ>ĪcŸøø™ēcų-Ö ~ME˙vOū&šZ5-ŧŅûy§˙‰Ļ‹…<3ܯĶų‘He†ļPĀOZQi/đÍhGŠhÉĒÂ\.Ņ: tĖ_ũjvwŽnáČįũS˙ņ4Áĸ×Ų. Mš÷ Š–ÆåūîÖĮ\DôŦāąŽLļÎĮŗ#č*THĸ'ėLx<ļ1úŠAŠ,šučb~ɸûXQMû$É÷­œt!ŋøĒaČál‡Ļ'A˙ŗQåÎŖ(Ã蓃ĪāhŖ 2rZŨOˇĨGög=-Î?ū&­ŖęJšHîØ¸™ąúR™5L˙Šžđ#L,ÎĪÖäCÂH9(8Ŧį8õކ8‡}Ģü…uKcÉĨŦ"ėyĶ?û-ĨÎĐ}ũNĸF*Ą ļŸĖԁ8<4Žs8ũ+™ŅLŦ ¤˙Ų˙@ķ•õŒņ5hG:áCĀxĖ]JžŌ§“lAé˜Āū”ef’lgå`{„üM43q z”úU,ĮåĐ î˛×“ĪĘŋãAV!.ÃūYŽ=|ąĪū;J$Î7$`öų@?ú IöŠ û–Ū˙/˙^›æŗ6 [`ûũh P3ˆÁĪ!‡˙cA–0GÉā?úÕ1%Žßôaū~´íŒGg8˙hЅf\Cĸ8ūĻ<õé˙×:ųŖ¤pˇŅúĶ|×VÃZŠįÔĶ üÔÚsŒú/Oüz—~zųu˙ĮĒÁK`X}…üy„:ī Ås2č<:O5sÄq1õ9˙ąö9$ŗ“éģ4ī˛HGÜoĖĐpI?ę`˙žsũi2ė>H‡ü˙×S93÷3îA5ĩ›' ˙ŽfZÃÕb^5'؏đŠl€âԓß÷˜˙Ųj5†EíČöÅíŸë@î4Em¸nķ=?ĖÔŪE‘ĪĪ6}•øĒ€ē€Éžãi˙Xßo ĪŽ( ’­“Ŗ\gęŖúÔf5Ũ¸ŗęXSüæÎôũj]ōãî…>œQp¸Æ…Y˜gšoūĩ*Úëvš?Ō‚$'œķčE43įhŨĮžh¸6ˆ ˙ĻFí‘ūĢUĖ(šÄęí˙Z§V#ø3øPåIæ?›ūšŸņĸāRhˆÆŲSô—ėîyķ üv˙HņJĀíŨôōë.āĪ îÛųU-LÜšK˛æ$ÜÍöÚ­ūą™d Ën1ūņâŠiŗ A#`q‚zûé#‰Y@L…ŊzR•Ķ9įˆ•ũÖd–d]Æ- z­:VæCjwáäfļ™í…nãŋ~õNæŪÜbEb?/jJáO7$™ BËō˛ČëûŨą´đ$üdūTũŅĢe[9ëČ˙<į!Ûđ’™ßĖÆcŲđ}XéHŒŒ6ûŠŌk‚ģ|įĀėd4ŦŦãG,{ƕƝČÁÁáßoŨ˙õčf8#sc×Ë˙ëÔžVܲŖį§1įųԋ+…Ā ŧIū\7+qŒ?üTĸG^’ ėj]ÎãīÄŋđŌ™ųé*7ĶŌ‹‘Š'ÚŲ“o~¤įôĻÉlRqęķŠ$ÜŖũI§‰#ambãŲŋƁļēķw 5+Ķ;–“tAH0/× iD@œ´HąÔÔĢ—W@OûëEÁX„Iå$!ŊPFã˙ŋuc˲ĪÉlÄz˙M6đČp!tˇ?áJå&BĢęâ¤ZQōQyõŠÅŒų]@˙`Ō {XĮČûŋũz.d>MŖŊĮŖk[Z¨ûÍô ?­ZX<Æų&ঢ়< ŨĸŸîõĪéNâm”VŌsûÁīšiM„JīXß0ĢfÜ&BēIĮĄ˙ >Įq"Œ,KõĀūt\.Ę"Õ@˙]&~”hO"G?T5u­¤„‚í9=äi'ũFOĒŗüč¸\Ŗö&R 8R{•§}œŠ$Í8ūī˙Z­›yÉȁĮĐĩ8adCõųŠ.4ĘĢã€Sļ)āÜĄČ8#ŽÖĻiI,Ÿņe˙ Ŏæ“'¸* ¸‹s¨Ä2%q˙m?úô§PÔÛøĨĀíē“zŠ;6ã×Ë˙ëĶv™*U f‚Ž7í7„–(ė}Sũ*6ššSŗ¨īĖ ĨXlFyØŨūņ44›°U˙ž(ʍ{7$Ãn?íŨ3Qũ¤–‚,ŸDÅ[Ž0ÄØaũhrJüĖ͎ŋ:ĩrˇëk>Ē˙ãNķāīe ?ī¸ū´ã'M›†=piG˜z¸ 0ēįAŅ­”}%aüķHZ҇1HlLŋáR¨X~TLpÍō)˙y1@î†:Ųē“Û.¤˙*6[ĪIGā)§f7Ķ&šV˙Ģ_Ė˙…—cŽÍt–œˆđpv)Î3Ž+š$zém0Kc¯ĐWTöGüķ˙ëPmЉ”ķĶæ¤Šy2īĩė=|­Ŗ3B> ˙ņ4ŌņƒËĀËë†ĐS>ĖPį$ãžÖ§aũy>äP;!‘œ¯•l}HŠŖe#-†;īĮķ5†Vaķ¨>›Š>ĖËÉu9˙hd\VHúĒž˙,€˙ėÔĸæ<[9¯īąū5Cf‘ˇņÅ.É@XÉ>Ë@Ŧ´ÆÄmŠáqĐ Iū• ’Bwš_l“ũ+0ZĖÜáxí´SŒ2)ų—Ķn(°Y>aûÎfücĪķZg™bæ9ė áTK˛œy@úõւōgå‡ō-ū4‘wÎļIT˙ĩ æ—íJ¸ 9˙ŋ(?­Rß>~ãé–˙ˇrØöŪ‹ ”žˇ| ŌÆ}wFŋãKæÛ6wÍ û˜ÉĄĒ"yWŦîN?į§OΚn›3ŗ7b\…‘ ĸĶũ6oŨ?ô5*˜r6ŨÂ휕ŽĶ>sÉĪ}Ãü)DŗĀ>Ÿ*ŸéE‚ČŲķ6‚wÆWũÆĒí*ŗcåaÔ‘üęšÍp3ˆĮt§úSūÔøA˙Ž+@œ{ĪĘš˙{˙­R,õY"Ũ˙]‡øUC0`w*g×ËZTÕĪũrŦÄĸËĄOOŪ¯øQ˜É؜t U7<@§öüH.KL?Ū֋.¤Â$›%~?փi*‘ą.?ū P•ˇacOøÔ{áŨąŋíŖ…Ę^HæN^)ąîøŌá 1ę˙^ФöĢĪ‘’{ŦŖ¨Š °’ ‰öũę˙…+ČZ*T|˛6}6đĻo%ÆũĖßîū&ĸKļGæâ\w 2âĻMB6'}Åįāęh€äŠ7-´ž0S˙ą§ĩ´ ‘æCœ{gõĄi`š=Ë`ũiža8>sātĖd˙ZØšDtō‘0yi!<˜â˙ž‡øÔĢvû‚ųęđ3lOõĄ¯$›ˆÃz›ūą J"¤6˛SÃ?û5)´‰cĘ npvƒ˙ÅS Â2ãíQdõũØû-*ŦG$ŧ ~¸˙ŲiŽÂ´.ŋ*ÛɏeoūŊ"Ā„•heR}øS<äBTÅnGģđŠRhÔq‘õË˙úŠy‡(õĩžnįæ˙ėi’ZÅ"ļT0Ą9ū”ī0°[5‘ĩņ˙ŗPLģp,uųdüU+ģ“ĘĖø4ëHo û\1€p?Ĩi,vm|Į>ŲĪūĪHŽá€g”¯´ŋũ•;íãũåēā‰˙^Û!áâõhc[ÛŽ$•Wž˙âĒŊÄpÉ kƒÔ—Ķ5dK.Ҙ§\Ž7>Ĩ)!Ë?ôĪ?ԁ}^ēFriáã%dˆƒÎJˇ9ü)ëbJ‚6ø ˙ ŗ˜ƒw|ŽŖĘ_đ4@ļŨÅIĮú•§vmô+5ĄŒäëéüņR-Š#hDÎ8ĖŖüjeB 0Áë’GõŠwĒ `]Ŋ2ŌņTŽUŦU6m¸ ‰ī‰Wüj#kˇcŒšĐ3ģ„čGĸīæâ`æv=ũ5 iÂJ;Mø-Ę2ؓōaWžŲ˛@§ÕGķZ`‰Đ“* lņûÄüûR‘T,¸ÎæįëKˇåäŒwĘuũjŅBäŦ§ļÕSŸČĶZ eb¸$vØ1˙ĄQq8ĸĒí+÷Q{`Į˙×Ĩ1  Ÿ¸^Rc#r\‚G÷ôųŠųY™™ŪVĪã€h¸šQLméąHöb?•9!Gá‘Aí—jĩŅ#~ņ°¸ëå˙ŠÔÂöQĩT°ęK…˙ŲEŒķm?pŸácÖœ(?ë˙e˙úõoÍųg‡oũtOņ:yŠ2OLsüš•Åc0ŠČĖŗ/|(Û¸$‡ž˙5hIUJ[ŋÅĩIũipBũ?ģéEÂŰÂ9ãū˜fŖã9ļÍŋÖ´ŨmÕˆų铟đ <ļ°+øõéÜv*y$/FÜķ—<~T†I" đv­híaqģ$˙ĻĒ?ЍdĩųŸ°ķAÍc8<ΐ~oCNŖq˜YŽS?δ"ĶVSĩd˙Ķ2ßŌžÚKŠÉįĶ÷X˙ .…bˆ¸¸÷hWņË3ņ1•Ŋļ1qíAųwGôcäi­bü3IŠôf˙ëŅt+Ę0VŲ@'ņBîŽ c ûĢâŌe˙TŒWŲŋÄTÚŨÃ,‹žå‡øPR+E-°#r†õÃč*Gx]žHļ]Šo2žÜÉų†§y3|Ļô û”+Ejŧo•ŗčV•cÎĖP?Ŋ˙Ö Ēg˙ņáũ)ŪZžvĸú ĖZb&û4iĪžFØ?ũjEl%܄ũ1ũjgŸø üéäG‘dĪũtN” kÛŋ'͌Ŋ ˙ëÕF G™ųü*VP_ÍĮûÁŋ•BÖŅ–$Įũsljlã_īī] ´… +’Q\đœz]4 UXö>žÕĶScÍĄŦ™z;‡,@ėMLn—i&M߉ūĩPFC•W؆ĢKæœXŋÎ?•sĒ(c\)?)aôæšĶ(ūŊķÍHVRrvŒú)˙ í˙ā$JE¨ĄqĮ§qũ3PŊÁ °ūū´ō¸†äöíųTd`ŒMÃü(ąĸŠą đ??ūŊ ׌÷n (A9ūõ;ļøũ˛ ôūūõéãhS”‹?õ×˙¯Q€ßķÄĢRᔃä¯íPĊb\f(ĪžøĶHÛbA˙˙*vuļŒv?ãLf<“céĪõ .9wōŖņũŅéR†m¸g¸Æy8ūUXČČ'č?úôf,E#P2fxÔdĢą÷sÅEį qžųõ4™ˆc6ÎĪԜ%‡"ĮžhB°á4G‘)ëũĀiėWë—žZ˙Cį§đÉ.GŖÔfALŌmƘ‹Ę ~đŸĸü¨@ģ¸2cÜU}ĘN|ŲSũiš9g<÷XWeņ!^äđHn?*sLĖđ1ŽsT@QÁ“?UđÄõąø šą°”$­¸úäcķ4íĨrCĮĶą˙ëÕQ3(˙Xƒë˙…vzÜ&ÜÆ?JbĘĖęGī>ßũz”ĖŽ~hŅģrØĒi—aū”õ )īFĪ|ˇô¤ĨĐaaÍĸdöHĐFˁgûj*°ßØÆGĄ/ū4eÎcOŗļS@rĸO-Pā[ž9#ü*@"^ *qî*ĄyįlGŽäįųĶBHFv üh!¤C ŖÜ˙õ͊Ûí-å]ķé?ÖŗÕ%Ã˙|°§– –_ûüô j$ â;‚ĒcúĶö@ÃŨ—§ëPĪŌ6-ī ?ČPÆá„aė4Šå,˙Ŗ3s.Ō=VŸä[ã›ŅĪĸ˙õǏyÂ˙Ŧ™qč™ū´ī7p’|āg0öT ”›ĘļiW=˛§˙‰Ļ˜ā$uØúÕ O62Ģ1î ZO6ã$@ĪĒđĻŦ˜Xo+CĪĒ˙õč:tø#`w ƒúĶÎFÖû8˙€s˙ Ō¤ æD?D?ā)!X>Æ ‘˜Æ?:˙(ļv€ˇz`˙#PĩŌd įũÂĨ[ĨĪÍÉîr1˙QÔ ÎBpļďī(éNûØ…´€fä~UMÁtä æ˙õęC5ąEbŸy3Cåļŧ$†ŠeūëĶü‹°FQžÎWųÕ$ļÉÛ"ŒöÜzūŠ<*8+žÅIãķŖ $Ë-k.H‘ÉÛūßR€“œô*Xī~W—§;}*y¸™ÁT{€O›˙­I …-œ ?P´ķÎzlSŠF–åøyæųé¨ωû=ÔŖčŲuMˆ`“¯–ŲĪ&ōŠļŪCžĀ`ņųR­Ä'ū^W=>x8íۜ.ĪU6Ė}L+C˜Ã$œ~íō\0§-ÅŌd¤Ō(˙xë@ēpųY!᎐1úTąÜÎ˓,dŲÛũ(GũĄtOÍ<Ŧ=<Ã˙פkĶ 'îwgúUĻe*s‡9ķØ*C ÜvZZôī+ŸĮ­0ŗ*ŽŖ0S…Œæ´§P”ŽŲ6?ģéV÷JH" @ėIū´ĻÃt–Œu)ˇúƒIąō” âãũĖcŠHîã\ géũjųŽĐ6ÕĩŗüEĐsßøiĻā´p}Kķú-bšŋmŲUŲíņ§5Û0˙Y)#Œoj”ÛڐK;o,“ôëHVÕ +$ôƒ˙ŗ MG*āŗÃ'˛ˆĢ wåŒ+ôČSüÅGįDíĩ]‘ąÆî?ƙ€_Ė{ˆŲēŊŗųâ€å-‹ËƒöˇU˙d¯ôj•.Ųä#Ėw'ûëŸëTÂzJ„öÎIĪä)é˛c匆õ ũH \ŒŅ7S*‚|Ŗš‰ˆūfšž\ĂmA<ĮšüvÕ3ÕųgŽō ?ú+åB…T=øÉūFr˛û­˛ÎŪCŽš#ŋûĩT­ŗËŌ ĪS1ÔTiį“‚’/a_ŸĘžË2Œ8~ qüÅ0åeĩXOĘWūšÎ?øĒcÍløÛöōŨFŲ˙ULŦœ†ØsҤūt֒B~|?Ũ*i)Ąg1ēŠķCLdĩ^ZāĄí›}ßû-Rä&cŪpzm˙ũ( 6Ōv’§ŽUēū)f8ā Lw.Ä÷(Ģ ˆÄ3\AĀĮīȊĪ[‹…Æ&)íšĮõĄî¤o—įũŗũh°ė[boŨŨZ’đ–?Țœ š˛|Ö#ũ™pįYËw"ÁaŲ¨§5ʰâB}FÃūY ”˜E*K—į‚Ķ)ūbĨYįäFöU?•f’šÜ-÷}TŸäiŪríĪ’cô°įūúĸÅ(–ˇÎ{$¯œįČĶcš(¸Km§9'æ9˙ĮąT^@§–˜€räCSĮqčŌö4Xv5æō€ŸXĪøęŎ 끟Íi핰— 9=1ū…¸”åžŌ˙øí…ĄĢŰ(…ē‘÷Ôä)’ę”j ŸŪîϤɓûŌĖG;ŠãųŌ}ĸeRĄ-ÂįŽŌOķ4NÄą\Ų7$lGO—?û7ĩ<Ŋ”­¸C'Ũƒ?ãUP37(˜˙Ž<ÔĨcŲŗī'ŽP€?J V#xŦķ¸Ž:HJ˙%¨ žžN|ä_lˇ9ąčą¯ŽæëüĒd˙ĢđūŊ4L‘į ÷ÔwŽÆ7`E ō98xŽ_N…fŧ]ßuFėzÖúĖØ#'ޏ×MfyxhÛRō›<ļn$Đ˙úаįĐū"ĄI|ĸ~ŠyŠVeS$g ÂĮZ’?ø§šĮoŨū*šĪĻ˙\Ķ1˙ÅPˇ šÛ‚@ĪîÍ+] cgäŒ?­2ԕˆŲ´ÖÂũĻįūũū.˜SNÁÅÅ×˙Ë!˙ÅĶĖã?ęäá‡õ¤¨#ãÛåoņ iŽâ§ŒfYÉ÷ŒņtĒlW¤“s˙L˙ûeFŌŽFmĶ?F֐ÍŠ˙GB}NúV2&[đ⏸í<}›vQąëøē¨f‰”bŪ?¯Īū4Ķ*ˇKdÎ?øšË~ oõ/˙ØĐDĸŲË`4_÷ņ?øĒQĄˇŌ'˙PŒTún˙ëS>Bšúrh°‹…QT0ažœ?û55ã ŨIĮ|CUÆĖ ˛Šsyj3æž´X˜0āĄ¤Ōsļ2G°'úR( NG|ž­;ËūôŽĀ°}šaË@øíōˇøSÍŗį˜dđ˙ ŒĢy§øĶ FIĮЍ%{Ū`ĢįčÃúS>ĖS—ę)¸Œx&¤GœīU>™Đ,ÎAũ)Sn‹ķq~q|Ņú ÍŌ”Ü^íņŨßŸŌØ¯ˆĮs÷ÅWHE<ÍyŸõį§fnJA%Ágb{ ƐˆÔmãs׌ԉ6ÖâyöÍ 3ļC`Ÿp´ĻVÉ)Į,Qa‹æ;t¸s“Į&”–7Ú2OQžj33d.3é”_đŠC˛āųp|Ũr‰Åˇ>v=¸ŠSQ¸Œ€ŗE÷­3vr<ĢcîėŨ褁ú˙õč°ĮIypĖĮÍNē?úÕ ŧš NOŠŠVh‰?čņŠ˙y˙ƜØr1n‡č\˙ZA¸Ápār‘Ÿ¨ŠÖõđļļ?QQ˜”õõwõ¨„1Iˆ÷úõD´Y7Ĩˆ&ÚÜgœp3PČ✘a\ŽŠ`X7cĘûčéN&Ôr"œ{H?øšAf"?9ō㠎ŲĀĢÜŸzØ1ö8ū•Éhú‹œį?ëĶ˙‰ŠĐā].=% éš:\ĀJg×ũ°?Ĩ1š>sdOü §éQf9NL—Îéq@Q’wÍĮmë@Ƈ‹qŨ÷z’9mč@<ä`ãõ¤cįČįAΓë‚.Ĩŋî˙û*CEÖE@i^yÂdÖŖ–H8{œÛ@ūĻŖcãío(ņTãpë$¤gŒÄZWÉü†”ƒÜƒũ)ë°93 lõ`Ü~”Æˇķ[Ų@˙cʧ†Íą˙1MÁ˙ Ą”˜đÖʤ‰āÉėŅWķZ‹t{ķö˜Įm\gôŠ^ˇæŊˇ8é‚˙ÔTōËؤ;ŽōKŦÁŊ~eũEMö7äųņŨŽ˙UTŠ@p<ŸÄüęQËô[`GŦ‘ŠŖ¨\{DąüŦŅnÆsģwōjfŲŗĩecūîúôĻ ūëˆ÷‘N#Pˆ%É Oû&č]ßm}ÆŌ3Ÿđ¨Iœ)lžIëúS)ņ˙RdĒĩ!‚V9ŗŽ:lj2Aq9ĀvBŊr?:q›q‘N>îjš¨ûˇ ž02 #wĪžį'4'ûAŪ6ĮžAQū4ã(įũx$÷īQ™ËåL’ŸMÍŸŌŸ°ĮĖ0=cúR-4LˇLH9äéR-ä]Û§ yüę?5æ¯=sօī$4gĶ äiī6O 1ÔyƒüiÂKP7|Ũ:núŌīYįė ã•%ŋÆĸs€T,CũĐ­dXŽeÛû‰§B@ā p–0s.ÚÍRH×pG”ęFđšüÅJ°BŸŗ°8$•O_^( "ߟ%„ą¸Ģ lø5 ¸ÜFæ´Ú?é‚…gÄ/"ä…įúŠ• MĄK]~é‹˙B vE†‘AGI_睰-š˙h3ũâīĪäk<¤J@ TžĖ‡˙¯OTŠRŽ#Œsˇ˙­E…d]$îÂGĶĶ÷§úĩ&ØUōöķ¨ĘGū‚j@Ŗp•[׃˙ÖŠ"F”| û1üÍ; Æ/ĄjE‚cōC6G`W˙eQP=ĸ‚2*÷<ãųTA§Āˊ>ŒNZ’ļCHíÛ ßũcEB%ƒ¸PIxôƒ˙ļTFÜŋܙĮûɏęi7]"ų‰Ę=sũ–“Īŧ<˙1=ŗĮé@ųP @\–ŧ‹Ķ8sÉMßZÖO-܌РvŠ‚Žg:ŌM1ķÉØē,Ū`Øsū8¤m AaƒáéĀę¸˙ėĢ{f~îŅßĨNÉæ# fÁTg7.áčąģÃWĖ1ü2˙ŗSbŅü;2_ę(ęXņU՘ū`p3ÔĶđ¤Ž˜õĸė¯ksœ_ø{$ô‘ĐnúĶ›Ãū*Oö5ö?ëOûęē` /={ö +׌zҍŊŖ9ėų{ŋ˛uƒ?úÃūUŌu>Gläs]PÆÜŽ‚™€“÷zi^ÃöŦåG…ôoėíLۚqđv€Ü]Izüĩ×G‚>đö§˜Ém§']‡ĩg| (å5\g U?ČT_đ‰xsvāutŌ0öZí@Bûr ņMH#¸'¸âØ{SđņŦÚ¸ķ˙aN˙„?Ãû‚ųÚÆOũ2?üMv~^†Nqž´ÆĶ°Į4ŽÁÖ}/ūũ‡ü|jü÷ō˙Qŋƒŧ8Ŧ3sĒs˙Nės˙Ž×s´!<ŽĻœcöīNėJŦŽ?h¸7ē‰úZŋūųĨ˙„+Ãāˇēˆn™6Ī˙ÄũkĐ.Ņ€9õ42ŠāđéšWe{[ž|<ŖIķÅĒßĒôĘÛIū!đ>–Í…Õ/WũëgįôŽü(dc‘“Q…û§ pIŖ™‡ĩ}üĨā Õn7ž˙dđĻ7ÃÛMneîsjÆŊ 6ÆpXŗn9ö§Ž;~™Ą65ZHķqđîÍKøI ˙ŊmČũj%đ–ũƒÄąØ#õÍzxŒ zŌ†9äú|Ė^ŲžfŋmŽ6ëš=ņkŸëJ~[–ûr>G{2ķ¯IŒäđqŌ¤Ø2Ō•Ûm#ĖĪÃ{|5´Ũījsüč_‡P`í×a$uÍąĪū…^šŅĮ¸d ĮÅĀSĖŪwnn=†)Š0öŌ<Āü8T°ņ ˜#Œ:˙ŲŠđúX†Oˆ4Ņōđã?­z˛Æ¨rWˇ§jk¤lš*=)9ÛČō”øq}*–MWK|€ŸÔRˇÃ=qyŽæÂB3ŗ0?ĘŊAí!<4a˛:mÎ)ÃM´9 }OG4s´ŪLōsđãÄK•ŲgēËĶķ¨äø}âe E#ŽDĢũMzÁŅ,X6Ņc‚ŖūÅŗÎ>ˁHé´QĖÆĢČōđ˙Äë‚tä`O_5?ÆĻ>ņJœ.œ}LČsú×ĢeŲŦŒ‚% 9c§52é–ã QĀcÁü)sĢČōđ/ŠŠqĨ‚Gũ4Ž˜|âˆ†Ķ¤ČŲį‡ŌŊ–-:3Œ˙}š§6›|둕h{ôÍ.bž°Ī xoöEĀ'ÛúbšūņßųŨ’߈Pzt¯jj§ÎģÜ?éáņŽũū´§LƒŨ9Ī2šj ģáūĻËúŨ3Ė‹@W™¤weoč)ĸÚÔãmÔ%?:ž•z`øUĨŨ˙dŽ|ŋéLo…:zˇËy|˜Æ?sŸåEÆąTģžjé Ēöė}BŒ~´ŸfüVĀ㏝õ¯D†0 k7ŠôûúúÔ?đĢ÷ļW]`§ y–ŸÔŅr–"ŸFyéĩōÎ[Ę÷eԜ ŋņå>ži˙î_ᄑŸ—^´Č?Į_ëBü9ģ5(öųĸ˃EĮíé÷8%oŨ0# VoņĢH/Ũ°Rė¨í'ú×a'ÝD(VŅ”0ūâ¯ūËQ¸Õu}%‡Ly¸ūB‹‚¯KšËÉ(c"Ũ(õbür*¨ų™ÎFyĘŠņÅvŸđ­ĩŒnZt˙ãāķúR'Ãŋ.mŦߎžq'ųŠW)V§Üåo]Ŗô lŋĖbŖ’8×ī1Číäãųęäđ‹—åŽČ2ģ p ÍĒ < â¤OŪhķ7û˛+cō&ÆĢRé$shąewE‹pūFĨōmO>U€ö˟ã['Â:ä@;hWß•˙e4Ááũgōģßg?üE+žŸsQäĸ†ã* Įjq`€ 8āgåmÃF9éÆ*ÕŋĪĩYv‘× qU}O jäzuĮĶ™RTaÖ¤@fČ ˇ=ĒBNîŋZSÉûI@ŧ ¸âžF0:īS$fĄiV-du įå÷ ãlĩHČÎG­7d˙jËT üũęĀ#v îifν<ÂöÍ&2AÉ ģ8öĒ“Ŧë:2Éûތ¸ëVsōō21ߌsJŪ[ļO´=AhĘwđŽåRÜķ´g…[7ÆõĮB)ËņÆ{b§U cšiČÕ09Î;ĶÕww9Į­JüŨ)|Žāžh&ĪLŪ”z ûŒĶ•[yČéëƜā@>ÜØQØæ’hˇÅØÉ##Â=ĒÜ Ą°r>ĩ$q€ŧõâÁhRO+€ĖIl†=E[Ž"Ēw“׎•8\dã&”qš\ŠÛ"a˛2UFG8'¤ÜÎĄ‚I9¨Š°Åž`PĒCzô5¨Đ¸Ę‚pHĨ22 # ŖŸ’^qOޤĶB#;A?7>”ĄSoĘ>÷^) Vā{ĶŖMŖ§aIŒl¨ØÚ§iį Ķ.؉pA*=*áLcˇŌ—Ë$õĸĀ™ 1Ē"õÆOCNcļEĶՉŠŧą‚2(íŨ€ĸÁq rKc=:Qdd¯sĮ¨ÍHW Œqč)›X`)āŽôXP@.9ãڑTŒŠÁ9 qÖ§Œô¤Úd€8Ąk =nE8 #9Į\ŒĶ™F˙Į¯­ åĀÁ#ЀРs‘Ã2})­Č<ô§ē’:’}ēR€F:q@Æí99āw4 €Ũ}M<‡' ÷z͌dĀp0=ęlfŦcģžjT Üg=ię˜P3œwô§#t\Æw”XwęI=šæšĨ]s¸c×­Kˇpo—ķ¤Uŗ‚3ŽqLBķžsĪšÉĪ\qA‡ÍÉĮŊ&T q¤Ān~l!RsŪ¤Ã<í9#Z" H^įÖ¤|ė=r ̏ŒpŖŒã‚5ėËž¸ĨPۇÉëRí-´cūt€į 8Ĩ.ÂzņNdņ­HÃįÉ {Qp#DRNĶԂOôŖgAŒ zûĶÕ0 Š9=ũ*Eqƒūéõ % IÄō:qNqĮLu5!$€6įŒ~TđŒNĻ>ԊDB3‚2#œcôŠ6ėHŪ´ĢÜü)ė­’ŲĪã@ Ē9Čwô¤HÁ œį¯ZxgÛۚ8 Ž”€6œõƜ T›SŽŪ„Ķ3’HÎ3Ę¤ p?ԁ ~įĄĻ†Ü8įŠ,€mĮģŌ.Ô1žĩ6ô(Œ1¤ëŒ(#pÎ{PāœãŽ´ĒU‡€iؑ§•<ž§­Lƒbĸ˜l‚zRąwōX¤ŠÁ˜gԜpXŨ?J…[Į?(?=2ápXЈc‚¨Øô§*gŸoZ ˇ9ldԀaŸJĢŲ qAL(Û×T›@lf‘2xuâ‹!su€Žũų§ž=ū”Џ đ)yäãžÂš!°Û†éAÔņŸN{Ō˙:i ãBāƍ Œšp'š^˜â…vFSˇ¨¤#‚Ĩ<ž 4ƒģqE‚äMļ2;P° ĮüÃŽÕ ÉŦ>fAå&HÛĮŌ”Ã<ĸôôŠ€4E…ĖČüˆŽ>E?…e€L(ā5&0iâĒ(NLƒė–øĮ‘?ŨŸdˇˆc@Xĸ´˛ŲŲã#nĖGō¨ÎîŸđ˙Æ­âŒQʃ™ž ÄdeGÍÜÔęŖÛŽ*Ŧx?Æ^åjœö#Öŗķ:™"`ƒĻy§É…=Cv¨áP¤…9ÉęÔã¸Iš˜{cŠ "ŒTã§_JĄYdVaƜ¨ĮĩJĀéŸīsFÕR@SĐuæ€!tcÚÁŒ)Ë&N7‚H鞕# eÚNOˇžg˜ ÜÚ\”&AÉīÅH‘$…]ÜæĄ‰Ë;ôéV œgčCaIŽOÖĻØAįš6āƒž: q'v1Œ{Ķ*Kddn#Ĩ=FTGtĄXää­< .Iė;R v‡š¤E žäõĻ‚BŒq’FqRY{d}iK>æ*ėūZ‘zō20jElŽ98ϰ’qíH¸íU`6žsH#u”36GĻ)Š8’SÎ6䧍Žī™cŠ”î1Uƒ œū•"¨éƒJ¤یāiFKg?ĨQ"(ä WÆđN=ŗJŨ€ÂōāņšcTŖ sž´ü)Į¯ĩ'¯Ļ)vį`b€Œž@ŖnéÅ; s€M G}h)‘žôrpxéIŽƒ“Ú—nAĪ ŌN~\sųŌS‚Āô ’ąœ žŪūÔ°TnLÔzPø}OZ^0îE68Ü%š<›bqÛĀ`R÷$J2㞂•Đ•Ā<Ÿj]JņĐsHÆęDN9÷ 7ŋåPJãրĒžĮĨ–vĄzđG4í¤1ĮšŒŠz‘íĮJō.Ū9#ęEÂãہOēÜw4€ā8Ŗ‚¤|ÜqŠi*í°ŽR¸ !ąÁĮ'šbDۜžiáq¨įz@뚁b)ė” č§JPÁœ÷Ą›æLúņķuŠ# ŒįđÍ!€PN0?*‘GņO÷ŠāįoéN,„ņč(̟3 žŊ3OlÉČÁ##9ü?Ĩ;Ķå'ŸJUƒ‚zQ`ąįŠ2 ŒœØū_Ō—‚¤æ¤\1ĮáŠhQÉŒú~”øđBúúzRĀ9ÅH‹ˇŒ“Ā w#'k¸āc8éR ãœ}sֆŒųēâ•TĘą$})¤ƒßMŲ’9õÍJę(÷¤]ģēŒã­¸Ô@8ÁÁ4›zō0MNæƒųĶZ<ô4‚â0>ôŠ_ZG_—°)@'¯J,+ŠË•>ģE$jŊķéRnjl~ĩsÔ€Ū” >ƒ™ˆã§ŋւŖqČqäd õ÷§•fn§¯zLW#Á ¨„lœeēԀdã'#ۜ~§šiä(1ڞTā˙:dL\gc'8 OLwãđŠe}¤g<ä fm+šAëžôÕ ´ė=*p)˜~Q“œf˜Ž*ƒžG֜8~Ô ĐRāädūŌé×§4ŖÔPyŧqôĒą!ßĨ'~ )÷ϟSԘsĮ§ZvyĮĩ40Ær֟@Z &Fp:Đ(Ŋ¨ Z¤€(ĸT–ŒU(ˆ %-% g…(.ŋ|ŸlU˜ČQŒäQG;@ ‚)Đ#¯˜Ī(cž:ŋÖ°GY2ŋ¯ĘxíJÅŗƒĪ~)›Ā\3ÚĢ ˛FíÁžœS`^Ũōõ4ŋ{ĐūAsœ†?Z˜€síB­y-í@Rúz “8íšQ´9 ũ(0ŠäNƤQ´  wīQ“ę1Ū•CÔPÛņ€ÅFĶÂáž^3ÔúÕVŨ•%˛Ā;T‘°a¸‚A‘ė +ę2ÖÜüi@HįÍDāū˜ Ļņ÷°:SmšÚqڔd98´âGaMûĖß)ČīځŒ’qĪ=E.ėg֛ÎpOãũ)Ûš#Ŋ‰‘yéԚ x#Ĩ.X61Šy8eā’h( pyę) ąÅ;ƒ¸g~E"ŒšéE„0œ(ĀįŊMĘ1×'4ŌPG?Z“ 1ĀĮ^”X–ÁŪF}^•#pģƐ Č§įĮ¯4Ņ Œ,čFOĨ/Bx‰É#šNƒƒÆ:æV,įđĨ#Ļ1H0€s֝Ÿ”NÂĶ­8~tŅĐŌ˙Ļ„(=>‚—<Ķ8g°§_ZĢ€ŋč8ĨëLBm}hÍâŒg­ 0sŽ´ z\SH—ĩ&){UĄ-%(ĒBœc‚~”´QVš3Iž(ĀŠlg†Äę@Éų€į*\„ËjŧQˆÉ*XüĮŪŦĸ ŗúæą:… BŠĀÉāŒtĨ*†8æ”8`Ī>ԁH´ā€8#ŋzL¸?:h#å pÄāRår<“N#åHÍ'9É=A…Š€Ŋ°0q@ OāsīN¸OöĻ|ĘšëQJ n ¯Ö€#*ĨUČį’)ÛJ¯'?QÖŖFwC‘†°ëNä(Æ4âgœ9Îũŋ)Ī^ŧSÆF \đ8Í)Ë3‚)‰÷v†Į’|đÎ éÉ✠*¯\…ô cÆđS×­<˜=úš`~ÁNqĮ5 †{ c4Ā\Į§áŌ“9|ƒ÷ąĐĐAāū|RĒĒÆĒŖĀÂööü:R¸ e ŨF7fvŽ9ÅHš/=Ojh$ôč Š°4Ö<Š•Ë āįŠt‘+rY*=ÅKĄ%$žüŽĩn"ŋ/ĘxîAëQˆ@d;”œ‘“ÜU¨ÕZ2S8^2GJ]ĀĒ{Ķŋˆ¸ĀéJ2P āœúf† `œG$SInØišEŽ <ķO'æÎ1Ū€ˇį́@Ãržpā‘O‰“i%Xã¯ZLíÛÜCN‹æv=Ĩ Œ1€z⟄ œdëjnŅ‘–$‘ĐŠ]ĀūīoŪâFë鎂‘2nÁįąÅ"€0G÷¸üĒEQŗ>ŊphR՞Ū•W%ˆ#Œ¨úP:gžIį=)Ҟ—eįŽ:u¤&=7g8úRīĪAøĐ03ƒŒŌādŽ2}N(ÛFIĪãSŧö'šhĪLG­)œnÁĪoĨb¨ųį›~bC4ŋÂr{´áé‘íA; ĘOACWæÛøPĘŋ…!9`›OLäôĻHõĘČyĪ֜āa°:Ō –8į¤Ø8įĨ°ęŊēĶX`7ARQúĶ_"„03`qÜö§)ÉëI¸mÉ4)ÚŧI4\cÁÂđE!b[¨¤į֞ĢĪ=Ä!åyëīÖ¤éģp¸īJ~™Ļ‰‰c֑r3–Īô¤$’1ØĶˆë@žš§wĻŸRN2M5yvž=;ĶČëäã­0öí9œŒõīRîÄe°xĮĩ:rsÆ*u;ķ´Ĩ Ÿ1˛6ãsNdB™ŽīLrœ‚@•)ȅQ”Ÿ”œŽ”`ŽĢΧJ…aŽ~`sĪ|Š h”`€Žî•"ŽUzĶJ.ŨķœqHƒn~`<SŠgŒ:dP˜/p=Í&ĮĄ9G$dĶb āz˙œŌ‘ķp;i¤3]š8éš@Oŋ 0pĀô§#m8$õâŖFų# ­<¨2ōĪĻ}) •72€GCĶ4šPFy8*88+‚5*Š9ėGLP&(GĖN9ö§€Xvã=é¸"0Ŗ–īšp$üúb‚Eû­ģ¨Å<āÎ{ÔlpW9oSRAwíôĻCIJ8Áį"žĢŒî=sŠ\’ƒŋNiëÔį֋ ãB’žã!R1×Zb†ÚŲ9ÉüŠųÁP €s֝‰lî-íA?w=iËßšk}Ī›$!ŲĪr0i…Š“ëô§ŠNGOzF#ƒë֘†"ŗ($ŒŅ°’#*}j@@Qƒõ§p9ĸĀØÅRzōsNHīڜ4ũãĪqLWķrxéFėž´˜ų‰ãĨ8`āšbĀäsJāpOŊ !‡N>”ā qŠOJ} õĄzžĩHC¨Î(Ŗ5W„â–ŒQŠŽs@Ļ€SMÆ;Ŋ&i´€N}(斊žTŠÄŒĒ9÷Š6ŒäĶbČÉ œTŠ6 +Žj´#.‡įIĩ¯=Ŋ)å[“øSÔ‘×ąÍ jqÕ&ũ¤đFzĐÎqĀ<ŽhĪ͂ ęF?Jp’p8Ĩc g$Ķ”ŧ†č1ŎŌ€Ÿi;ŽFzöōĒ@ÉÅ ^:žŊ¨l3u”›ŗ´žŸÖ•$Ū™Ü:ōqJT2ėËsôĨ'žŸäPn!†HĪn)pF29ĻhU9öĪS‘0Ŗ×¯Ŋ5ŗœąÆ: tcsäpAAųXq€N Å*¯Īx#Ō€&`@ĮåíM –^ (pūY+ˇ"•Ų“‚OSŠ@(ôĪ4¤(`ÅG'úS!€Ž Ō˛–îs‚>ŧP‰ĀÂņ×­$ƒƒŠ]Ø@r¸ãĖāáŗžzP„ §ŸZ~€1úS–Č]Ø'Ō¤ų•~ņäõéLžŋ(éOۏībŖān{õ sÎOĨ<"Hįm‚Of“š\ŠĄBõéŠ@9”åp;RÎ88Į>”ÆqģqāúšQĮĖF1īŌ€¯~ô›~`21ŠîsØRŽIbTpÜūTĀHā¨ÛÆ<Ôãä äHœÁ㜞åH‡'xĀ?΀A(~|cˇ­;øy$ã”d`:­8aŸxČĮĩ3’3Ķžh`v#+7n<úĶI#å8Č9¤°>gœsRĒŲÉÔa‡Ę[“ëRīË{žüPAųNĐJõÎĪĩ&N Aé’8é֞*@üi Œ}áĪã@ČĪÛ˛{Ž´đFŅōåNŪ œžžôõlI´ƒÎh5PĨˆ ōM8Æj@rĪNN8ІĀÛŪ‹$ļTįHæ‚ģ°X6Đ>`GJE_/*ĒBuÎjTÚđHg8éøP¨8-“Įĩ9B“Œ6“ĪZ­ck¨Ú%ÕŖ—ÉÚB‘Аz\Ô˙v<.ãģžz~4Ĩ~’7t=zT˜>Yc׊ŠķgŽ3éĶĩL…$ë@,ĖqƒëíHæ^zį?­8Æžr=Į|”*¨TāmävŠc#RDnHžsúÔyÉRTîÎIĮZ†s´L”Ā>`€}Î~”€ä.ũŋ/ˇ_ÂŦŖ2($–#ž2OÖ˜ą˜Ü@ĪäũyЇČryΐÉ9枇įnũ9¤^š<ĩ'cČæ‚XÔ$‘ƒõúŌąŽÃŠÍGxâŒb3¸ä“ÔS$i 0ĀüzÔšƒßwĨ5”dqžŸĨ8Îy4c—„ú͐ã8'ĻŽ ˜÷íNS‘Ķ#§Ö„Cŋt˙…8rG'åĐŖ ČöåUP1““ŽõFmˆ ™JķĀ ĶŽhlöĀīR¸qIŗ9Æ8ĸš8,W`ã§ž~T8ĨÁĀ={PPœr)ØbĘãĻ\TG#Ĩ5F;ķ@'žGãM ŠĮˇĨ7,1ÆxŖ°ôÅ/Žx$ŌgûŅ‚ElōF(ŠÍ> ZbaøĐæŒg­1Î{b—”ĻŠRŌ)ڝР3žiiĩ/j¤Ši4ęm)€§…Ļ•ÉÍģ—~4ģsSĢØEWÜīŠz§–Š~õí\Œũ=jĖ<ã*ržâŗ:Čüļ IĀö4І …Z`G"šĘ3ր ‚úÔŊ ČĮ\S”äĒĮš a‰e ĐovŽy´Ĩú{(.§(¤ÁŪKŌ€]ŊŗųĶĸP‚ˇĨC2€E(n\Đų‡ {bœ¨T*ŠĀīABÅG•< ģAįž´s× RŠ%2Įh÷§Ž08ÅGĩ—û¤u4 ŠPqŒöÍ)`ĮOzŗ÷HĮ~i\(*ĀØ#4î_ļ3ß4/qĮ#Ķw€Ãujxr t¤, ˇ'“HpPß˜§0 Ä `Đą—;RoÂĻe€N§!,1Ī‚”“Ā>;PKÛAävNTķJqœ˛ázOāŽĮژ Fė ׌Ž”¸#”€hPW‘€WJ#Ā!žöE9cn9äf”$cŒEÃåĀãŸjÄ›Î1Æ1Hš(yÉíúSŒŽ1Ææ=:PcŒqŸĨ<)ÉüTk)ž}ŋĪáR–@-īŒP1ŒO”ĀÍƒ€;ĶÆā¤ąžūų40IĀČõ¤FáF΃Ž(â8Ŗ%c‰V0ĮŒũtO4Ī1‚ė piŠ&õÆyü¸  $íq=ëBČ rNXdTHá‰ČĀ' éūx§‡Ü„āãĮŋz˜ā¨8žiAb0ŖčVĄ ˛ nc8ôŠ—nVųJVs„|¨\.7dãĐ/Jp,w8ĀĮ¸`Î1žŸŠc˜’:d`Rģ~cĪZ?‡i8ĮNi@ ũåÎF$ ĒlqK´Ã×֘̏dŸÂŸĀNF(õ Žϐ0Ø8į­47lņŽsN;?›€ŨO!M;Ŗ ÷8ũ)Hųŗ“Ķš ‚JÄP íĮo­ ČčxúĐ íŨלŖŒt>”™AÍHŋtÖŖV`0Ũ}ŠųäwúФdÅ ŒņA'‘œ~™Ãô4šÎO4Ä&Ōc¯^”¤ādæ‚p2zw¤ I¯4^AqA9ã§áAn:â•NE1‚õč;ҜféƒŪ†ęy8\Ø¸Î?ZN§´ÅōĪläv¤)…%r}ŠKļėč9æœ s€P!0H^?Ĩ8ˆÔÚ`/ČÚIö§>L]9ž´(T*úRO<ûĶ2˛üģ†rií–#}†Ü) N%y=iŽÅ]™•Ŋ=E #Œgž8âml˜ o͒3“Ž3MČnš4åĀÜ1‘ëŠkP3ü )ŨŒg4đÄR9䚌°$ãŽŲ§“¸}āĨĩØL‚§ōÉúԙ9pO'ĐģØc-֜89ŨŸaŌ€$ųG=}éĘ@äÔņLRX’§?Ō”•$ žũhį`­(pIäu¨ÁåqŽüRāv89æ€$SœķۊAĮ­WsĪÅNŦ Ŧ=3Jã)'¨9 )U-ŅIéŸJb˛†ĀŪ•š9ÉúQpŠ‚q­ )\Rm$ņžLôĨB(ŠĪz9˛§'ąĄÖ0Š6y÷Ĩ?1?/ĄĮ֕Q‰bO Å4"ī|‚ūx§*d`ƒĐtčiBœļqų~éÁcœ?Īã@'÷į<ĐŌ/a߂iW×pôŖĘųHÁĐčģãŽ´ôûÜAīŽŨjŧe—pƒëĐTČęeH‡^˙J–1Čš!Iā(튕TÁãˇ5$.pBĶņŠ02qĪԐ…Œ9āˇđį4ņ’¸īHå œņŪ›ŋfK 8"€% =ëé@1žšĪ­29ā2;š“8nŊč%†pü“÷}xŠŠĢ$Š$ XŽsšHČ=9ëA-1Äâ/n)ĘØSéQ̇LķøäTČ8éģëLOBU9:Qž‡¯áMBœ`­<`“ƒŠŖ6/9č0h 7@īMpZpûĮ“@†(m¤ž*­‰´žrĶË1•‹3A’BŒƒ=ųĢŠŒ/Ĩ)ÁĀfÁäôĨ`Œ ŌäŽ1Å(v¤î4Ŋsëڗ šn6ą÷4ÄīÛ큟jqíGLĐp@Ą 'ŠnOįJTëõ¤ächφ‡Đ éNĒ%…Š ;č4sÆ);Ō÷ĶĐ'ļ Ļîļž´ķĪƌ:™ Į4¸ųĒ0Ä}šŠ”FĖ1KŠa“ Ļâ#ÆnoĘ ė¤ŽÅhA&ø ŽüŽÕa]qœzŠT Âä(čŦŽÂW cc€hČUî öôĨnx“‡ųx Đíq EÚIČ`yÎhf Øn:Ķ‚āg‘ūzP‡k1ÆzwīNā^Ô )/OJplŽ•*ĒČ$ŽôįQ‘œ~t€aŒ;OBHŽ[[ÔnôxOmn÷;­˜Ô Üyãé]IcÉÎɨŒņĖ÷ōˇ–#%rOõĄšQœbîÕÎ1ŧoqWm.Eāc÷˜ô øõ”üÚaëûĪūÆģ| drāįéŌĸŪß2œŒūŋôĻkí¨îās>ŧēįˆ"¤‘,vîÎē’GaÅuĖ1Į~2;VtZtgT[đ6¸‰Ą(Ę0FC˙Ö­4ˆ('héžŖëA•W+ĮaŊšĮ¯8Ĩ!ĶøĪĩ?€ß.}~´ŒįõŠƒ’H?MôۀŖîķŌ…9nÁÍä)ã¯ZC+AĀî(‘đ9Ў+7QÕm´ĢIĨyc)1ŖĨĨ?DԎ­c ÉF~â{ķœåúĶ)ÂIst4”c‘œŽ3ɧ+.SÉNœûО\„ņʐ9–;§ŌK\<ĐöずėôÍF=WOŠę3…‘w r3’#ƒÍsíĸÜém?L‰nn!Ų°÷ulG@ĢáëôíÎÚáq*)ÜščKr?.™úúŠ÷*˛¤éŪ™¸ƒũ&0Įœ`ņŽ´ŠŽąļ8&ģ:zŸNôÎ;éĄ+eA>Ŗ’i 䏡ę)ĨœĮ´’:û˙œSU˜J3ÉÆHÍLz|­ āP#āeđsœúŌm¸+ĮûGšS•]Äqī֘Äo˜‘ž9äSâûÁ‹aē{Ô-÷Į9ÎiˇW°XŲ5ÅÃl†Ũ`´… ”I°‚8^03ߊ”uW’äå×ô4s…ęFG\Ķ×Ģ`÷zT>fr§•Νzr0ŨĀ zãĨQËrF’3ÛŌ–=§…aĮ­ekæOøGĩ'ļr'[Yv2œÛN0}sŠÂĐ"ņ Z‡ö„öIj°‘åBížCÁËoäū×ÚŠ-}NŊІ HÎq\äē†žnodģki%ššYŒeAlíĮŨ?­tN É,G<’Åyôē>“6§wq¨jąŗß÷ p̰gĄĪ?•C:°ĢzŪ…ãCet–é0ÕņŊ"1˛œô<áŋ:×ccz/mRa‘$yr 2‘ëÅdXļ§ÆŸdû?)åXn#¯\“Úĩė.āģĩIā}ĐČ R>ŧv¤´cÄ8I'ÛĖž„ˆ‰a€LõĻšĪaŽyĪJ‹&qIĩ‹+āÉĢZœ–%]ęŖcķ¤n~’*=ä/ riɡĖĀūT!õ&Ü‚8R; …9ÁųOãYSkgÖ-lœĘŤQōŽ9ĮųėEküŽāœžŖōū”ŽSMZäo°8ų— z˙œV_‰lĨÔŧ==­ēæW)ōäzũ+U˜?ŧz3ūzP¸UĀnE \!7 ]x˙ X1Xõ xé$ úņœĶ€ĩģ^-58mÐíúp˙ ô2w1āão\S˂Įnã˙ęŠqGjÆÕŨœįƒt‹­&Úō+ü™Úl\•8įp'ŽIŽWČ<¤7ĒÛ\ÁrÚČ%ōĸ“#ķĢ[PœzcđĻ•Žjŗ”åynJĒ@ĮN§CĒ͞OSI°‘××­>5à xČ˙?b2ķĪčA¨ŒaIäōj–D!sĪE@į|Ũ¸ČϞ2H÷&§k†Î1īÖĒƒØ2yĢ$wĪN€ô D‘í(G§<•rŒ÷Į5QÅ<õŠVV-ŒĪJ–2ÚŠ¨Ļ´œzžAâ‘\˛‡ 9Éæœ\?Á'úP1ĮXÎOËÖŖČč7Žr8ũácÁÆBã­p 2}ũ)tXāį‚q‘ĪŊø#i'vzį1›€ĀųIÁ&X3.3Ÿ—œv¤Yvn!r1’G"§Üī}ũ* āąÜŖ8#5(Ę iØCQ‘Ŗ8S…<Š4íŲíž1ÜS-ßr36҆+ĄŠ‹eÉë@ē‘yŦ­ō€}Nzŗ…āg$ôõ5Ā1ԂxæžĒ2˜āëŪ€jäĪ2+„f°ÚĻå  =ŽPƒúS,N8Æ0G4ČH\:ŧ`d Rø$’šdd=Š);ŗķ}i“aᲈ}zqR/éÔÔCnjœš0#pÎi’ĮŽGQJĀđAëHšúĐTį ã4Č֊hcĨ/>Ôc­îí͟­-ĶŖę)OJJEč2)eHõ§gېÍ ^€sԌôøŖ?/"—ԐŽrz͍ĸĒ(AKIKZ!Qšv@xė`ˇ;ਊąíqŽĩI…#vIŠ–3¸?×5ÎÁėÅJŒ¯=2ií–ŒœŠc"ļÜíų}Šãįī\Đy@ā䌞)(21éŌžÃ9íB´‡įúP *3ÛĶĨæĪ§zzŠÚHä÷ĻįŽ™õ4ŧm$‚p8éYÚŀÔôÉŦÃgBôĢė„gŒŠ>ĩ÷+k–g¨2ĖÁ@âÚk—sxcM)´ÂĄ]”8ÎúS_ÁúCŠ?eebp‘ēū&ąŽüUĢę:é.Đ/ÄeÛņė)!ņ7ˆl?{ŠiÎđ 9ˆĻ=9āœv îöx„ššėû\čô- t{ĢÆ…ŋs1O-I%”zū9­ĶægŊ*Ž™¨A¨Y%Ô ˜ŨsЂĄĪ~šÅ\0p2(8Ē99{ێ]ÁAäœ ‘Q;˛(#ŋ÷ēԅĀĀûĨšŌÛJddd°Āčy ‚+ģå˛ļ’ęUeHÔąĮSôŠíîąŖ.pT|§ĒņŪŗu¨¤žĶeļ…rėģĀņč+-tFļÎdEQ˟he'é‚?J ŠÂZŊN˜J1${Sã}ä …{úWgo}¯^ l%ē˛Ķ“#\;į°$ãč:Wqah-âōˇ´Ąx.íŊÔ÷˙=)ĄÕ¤Šõģ.™— ‚pr@¤…÷9ëĐsķëC3d`¨,0yíK“;KŠ9$đŽ{PĖÁ´dîäRîU\nŦm#^Ō<@$m:įĪhÛįāŠĪ8 qZûBĀœiؐwnhfWqęp3Ō‚?zŪûŌ˛3('<ŠEGWcžŗđŸÚŪŪáŖûT„–-#˜ú‘ōŽs×§ã]=œÛYCeĘÆĄyëĮ?įÖš“ĻjK§Ũ[.™a"ĘîåŨūfbÄį…Ā<Œ~ĶZ@ŅÛA€ī… žIœœōjQÕ^܋•–LGÍfÜ@Uā(TÃ`õúûVŠõoO´hÚxŧ}¤ˇ9Ø?ŨĪ ūY¨|q¨\Áu&ŖŠ%ÔĨԘ‚6íˇ” Ž;~G85vŌį̝.éÂōZéĄßŅ€īūr–rø™ukqÚeƒųv88Ũœž {WX›@Ū7täv>¨EâšZ|†á÷zԎĮ‡ŌŖi~n‡‘÷i\ū듁ÉČÎSÅ73Ĩ”Åvļ^tÁvl'ŽGĨs{&ZĪƝd˜nNALî<ņLöę;[í>ĪQT†ę"ŠÜ ’9ü>ĩ]ü-Ą¸Ķ`Čė9ü D–§Ą‡¯J1JJä~ ŽŌ-2XŦ¤iDs’G#ælTįîôÆ+Ĩ*Ûp <œV^‡¤AĸÁ$vĒæ9d/´āííĮíj)\qœôĻļ9ëÉJmĸMØFŨœx<ŽxŨ)’ĮšTcŒö§EÃšëAéK9Į Éǜ@88įŊ[“æ@WûĮƒU ‘ģîā÷ĻzĀc°âŦ†Æp0qUŲ’&§LĀnx Ces6 õĒŋje*Y˜ˇb*Äą78äã9Ǟ/͒FqÍ .ÃvJŋŒäķC\ˇœąÎNzUHN@Ãpâ™s{ ŋÍ<É-ˇ.øĪ°÷⧨Ķ4c“÷ÎWjxĨM¤ĘÔ{UbĘQ °9Æ=ĮŽjTå°Āwčh-4Įw NzåiŠX)&C× ¤BYđë’zė§.dtúRoAÛQŦK…}r´ņpbW n8Ę˙õę쏓ĪLĢŠj6š]ĢMrØĪ ‡Ģ68üô§ZÅt–LaØm`#Ĩ9āˁį8ĀŽOÂū1ÄåØĖMn›„ĒûÕūl {qĪ>†ēŌŦžôéķSjÎĖžŖĶĪe#1ķלū=*Æ\•ÆĀG?^*ŧggßÎę¯sĢØZ_Åc-ä1]M÷"w°ÉŽũ8ųĨ¨™ĸí>ŅœœŠEyŽCƛŊ…bXaÁČ?įüûU9u [yš;™V#>įų@P@'? âŅQÉ&Ņš8įšHŪOœČŠǚääņ™ŒŧŅiWYBä”ļ•A$Ēu$œsކēĩ`b Ą;zĶz!h ¸8L„w9ĢĪšw)Š`Ŧ^ĄĒS–Æ2`â™qfyú Wš‰Ā8Î3TãFPŲbۜô¨ff`nô4ų‰öhА1Ė>ϧAJĆVų€`ÜôĢļ$$˛*ÎŒtĪԚ‘3§bų84 F8”~5fAŪ—ˇ4œ÷˜Éäņ éN>2ēŋŗéTŽį…fįԁū4}Vˇ72ĩģ›Zŧv—•¤*Âį  žôR@úZßS‘ˇ+#CĶϰącu1’æi<؟Œ{ķūXÎ Ž>”# ­9h!9!qx'=(Ü[ /|ãŊ"ŠÜf'æ¸hÍĮˆ/öŗ ÚÚǃ´PHĘāŒōqô9<Ÿa^uco{‘v…â$1\õÁČūTü@ ŒéFįE*ҤļÔå/uõĩ°™-ôÍJáĖUxāõā čô°ßŲöŒŌc[Š;G={ãųĶįŽ)ã–)†čĻR…qÔ)Ö°$(!‰@E@ôéEŦLį+%fbx“ÄđøtZ$ĐÍ4÷,R8â\“Ī<įԁøÖ–ĢĒ/D}DÚMrTēFŖv;žqøā×=ây-­|QĸÜŪʑÁiou33Œ€pĒ;œ°ĀëœcšĖŌ|]}ŠŪÎ÷Ņŧ:-đ’;2Ād6Xãw>ĒGŊhĸs_S{Âz6Ŗbך5ĒYĢšY#…%¸88ãĻ1_n:mĖĘ7¯Ĩp_ ­ĐxM¤;Į™tį'ũÕī Ø7>P3ž˙įĨ¸!XaˆqŽ9īK.đ2ŦžįŊ/GĘNzdu§HB ÚĮŌ ´ėÎ|Qrļ’E&ĻŪ'}˙g!ã~Šƒ‚ŊIä×io$“[Dė>fQĀíNKxCŸAĐԛŋw’ •ãœŌąŅZĸ”RJĮ!â%ž¸ņ}­­†ĩwiq-ŽZ4ļÄĒåÛ,ė:ī[úŊíĩŊÂŪęqßÜyų2¤B"ŖbáJŽžŖØ×#ã8´fņ-ģęö÷[%Š2íĘĒîČŲŒ`˜×Eā¸4ˆô™dŅqg<ÅĮ˜Ŧí ģ†Jüžüįč4kŨ9ŦŌÕį¸ˇĐ¯§ŽXã¸HÅ#•P.Kq×xŽgAļņ$zÕ¸ÖZw…O-…Č*9W  ŗ€zôãÔÖ˙‰‘?áģ2In¨¨ĨŒÉæG€FrŋÅôīŌ°ô8G¸š…u ËĢøOxü¸“•†ÎĐ0G ĮqÅ áS¯ ރ<‘íÛÚ¸V? ØęE=¤—×lîōy[‡$įiųģ īá.aˈŠ!_™G 1ëČëõīXˇĩ]+Ģwß4ã|Ōā,{믺}ŽĖ<•8šŋĀåm„uÅĒŲÍdĖ1ŊŲ°æGį]敧ĮĨéđZG#˛ ÆrI'>Ŋk3Ä֖w=ġĄY∲I€a͟søÖŽšZ]2ÆYĘŧžB>æä†ŲÉü–hKRņéĻ´F’˛„ˆĒ­žŠgu¨ÜØC2ŊÍļ<Ôåé\O‹tũzī[I´ž•cˇáhn„1¤›Û;˛@r@Û5ŋáģBæëS›QŅ“Nr顐męÎ8cųc5§-•Îļ:f*8ž™¨Ô.æ=ŊĒRĨ^3ž>•Eõ++k‡ˇ7Q-ŠfRÀ;š›ĢJOŨ-¸F~y¤R‚ d€Fp8Ŧ›NÕ%t˛¸I]y +'Ųū~u§Å7 ˙Ŋž*n9EÅę‡` 3œŒ÷!ãŽŋŌĄ’hŖĪ™* Î2N1Rˇ1áW×<Õ=[37RÔĘKxŖļk‰į}‘Ä„$’zBęđMröÖÁÍŌōRXUN3ķ1^ÁæĒkļĖö3醚†FmōōĒĨHįƒßœ4Ÿĩė“.Ŗb%uUbA褑ü>æĄÜí§J›ŠmĢ.‹5õ“5ŸŠE•ã*pN:ũE]’,r?*ĘđΟ}aĻIĸČķ´ī#2$|ŪŲ9=ĢiÕ¸ĮsŽŠ­Œj¨Š5…ē€zúOŒ&„ņĪPixÃ`ãš4.ũĘw‚ŊiØĖYšO-ÄLž`fâqģļqY6CPû!ūŅû1•s˙åļcˇ_Æšˇ×e– jtž@ØĀėáqŒ¨lbĻĩŧ+lÖÚeÉdŧF’c!ûZ€į8=:œ§ŊMΊáųisÜÕW”60{æ­ÆÍŧ`°õÅRęāãĻŠ­ÁĮ# ü'ŽÕG"3|­“߇8¨g!¸ãx^W?įŌ§`’G%¸¨f“8㞝jXČ1€BŒ``ū{חøûQ’ëXû*1EˆŦyrĀ3õųGQ÷y8¯RÁ\61ĮĨy'GŲ÷ņ ūÊÚĩM+SÖaŊ1¤ÃålhQRá‰-ũÕÁĪßĨy}â[E4}ô˛ŲĄĖH@œ‚w`zî<đ1îáČöęÖĐNļʒķd“iŲō1ÜNvá@9į$ŒVžÍXžf{ŊžŠš|‚ÜK´Ę"yn$m˛Ā0Æ00 9q´vČn<āɯ‚=é”ÄØG ŒŖž”r¨?•sģĩŖāˆô›8ašĶŽ­ÔĪ|˛yķʈĪÍŨyĀë͊ÍĐ~ë­o-ŦhFåŠFØG\d`}Ž:㯊„zš]mūģšugŖčč •âēP(AYÛFáĪV>ŲŽÖ{ë&ÍdģžHYĸņĀÉö¯"ņ%Œēn­ Åos.š°Û›f¸„žcuĪŪ+ĐƒčwsÁ¨‡âøúÎĪ^ŋ•bķ y—tr *Ēΰs€Hā |—Z úžÉcĢiúĻæ°ŋļēHņģɕ_o׎—!}r!^Uâm*/ K&ĩĻyvš’Äķ-¸ÛņŗC'8$ŠrGC“Î=HƒäˇN+6ŠM= APXō1ÔÕieČÕĀÁÎ9ĨWi”ب¤`'(΃ōÉŠ*Â[Ē|´ Į—ãŋõ­ `Då°2@ĒVęwnË}Ü ­^ƒ&lg9<͉3ظG98õ§ƒ‘ŌĄ`OĖņOAŽz ´Îv‡ŋl˛C⠈‘äg҆ Î<ņDŌkS|5YSŊĨkų:6›ũ™§ÅldļĐ2~ĒûŽ@Ī\Õ].ˇ°Ž).Ë¨ ĘF7sW8īøSļ†5rmœį‹ØĻŸ`ŧaĩK5ä˙Ķt˙ čÁČČŽCĮ˛íˇđúFũrÍx8ĪĖOôŽ´B%ģĄāœķŠQL$Œœbũi§bl:“ŊU° ZJ)Ļ#Įļ’52CˇƒĪáQFŧ†ãVv‡_ēzæą;Ú…¤Q‚1ĶéA†:ôĨōÎNGԀQ™ã֓iV(–<ņJĨ€x1V$œ{ûĐĻĶ‘Î{:SƒĮ_zh<í+ŒŽ´ôaŽņÛրŒ€A#͚dÎąÆŌHÁUA%‰Æ*mĮЃŸZæü[ ˇvļöP=Ôë˙tOęü(4§yr•.›$VW+͍Û)/<œwã5OÃ2LúēĘAxƒDpŲûŒT/ķšv¯y{žMHĨšķ‘KĄY‚’qĪįŋN†…Ģ9*.Vҁ&ãWĖKĢÚI#$Äbpíۑ؎ĩŲĄ&×+ģŽžžžõÅZøˇT¸×“IƒMˇģhŋãæk{–d‹=y*}=Áį8ëŲ ˇzt˙?ūĒŌHĘ,Íņ.­.imtƒ(n•$\grā’åXĮâžbâÚėnÔsúũk¨¸ąŠčDgA'—*ČĄ‰aĐūĩ*ˆhã!@ŽōÅemNĘu)(Ĩ8ŨœlŪ?´˛ÚĘg ĮšŖn}đkļ•žp#ƒ×ũEQŊŌ­¯­Ú ­ÔFÃ`Á„{毊ųHĀO#<ķũE=HĢ*m.EcŸņ/„­ŧMqk%ÄĖŠjX˜Æ2âM¯xbĪZвČęĄLR"ãĘaĶ ‘Û ō8&ļäC–eoīpÖĨvíĪ#Ĩ_3G=•ÎsÃZx{AN35Ȍ–c Ôôž?Ū$ĪJ›ø~č+ßšˆäīž=ŋ MßPą:MŊ7q‚ täS%˙TŲ|ÕŊ?Ôá8Į§˙ĒŖš-áy%ĀŽ0Y˜ôrsųTļhž¨ā|ہ<ĮŦę6Ŗ ."%,vmÃ ×ŗ^€y 8įĪÚ˛ā°Đ5 5¸ˇ˛ĩdá‘Ō §Žzã=ŋJŌ‹vÎ@đ ;ū=ĒQž"q”U™Įx¸Y]x‚/n.>Įkköώ[}ņgvÜŋLcŒ“Œƒŗá‰æšÚõfši;ļ\K‹bíV  ōķĮCĪ W+ã˜`mv)o´Ģ-BCGmw¤ōœą *ämɏaÖøgM‹NŌaŗK"ėe’ŸÎ ĮŒonIĀį}ĢvŊĶ‘nhjqę6ÚLĖŠ2íášãŪĒéZY^ŊÜڅÅėÅ<¤yŠ¨9ĀÚ$ņ’y8Ļë˛éöōĪܲŧcʇīX;qœūj-ÄOĒÜĪé×ļÆŨČŧA>íØĀ~ī_Z”´mKnÛÎr?ĪÃ6˜ķ^\\xgZŽ4f-,;œöÁČãŠė/%™4ëŠ"Ā•afSŒå€8â˛ü5öS Ų›0ũđ^ĨņķnįŽ˙‡áP÷:čIͧ)¯#™[Qy9mÄPÍ ą9ˇŽL1e8č@üņ“ÚģāC(UeĮ 8=ąČ˙?•r¯‡tØtŨBöęŨ‘ÅĀ‘ø%ŽÎ:w^Ūĩ×Bė- WÎā€3Č8įŸÎ…šĻ*Qœ‹9mwÅ/Ŗë2[,„In’,SĘbgfvk⌠ãę÷…õyõH/Œ—PŨ¤7[h TĸąŽ ŸjˇĢÍ Y˙ĻjbÉ%Æß2áTģ(ä/=zįõ[Þ•ŠÚŨĪŖÚ$ĸāĮšb‰ˆįĀõŋ ‘Ū’vbjįΎ –ķĖn“1`CƒĮPx';#ŽA'Ž•ģĸøĒúÉt”{Ģ‘mlØu‰~MžnŌX¤ƒĮ\zšę> ØéČËq:éˇō?͕,d*qę9^O3ŽŪ}z}ꔋSŒĪænŽ&Mˆsß3`)=GáߊëMIjbô=—Kņ΋ĒA$ĢwģE‚Ââ@§sÉõĮ§&ŗuŠfˆmBßK€ĀĮ Ør~îáž@į§zō),>ËjZE%å$#÷ūī8⃸‚8Ģ^ÔŖđÎŽˇWZz_[°ÚVXÁĮēЎ~ĩ.’ÜĨ6wüPŊܧû)!C+;¸āõ s×'Yž(›˜ZôĢYbcģc#u?ËųWGĻøīÁ—ę Ŧ6Ŧč“ÛcĶĢGNųĢ<j­‡ļē‘FvÃũÃØôöäŽĩ $öznyĩ߉4KŨÅŧ9äČĪËÃu‚ô?1TŽu]™^-2î\í$Īv’NHÎĖöėr}3šąĢjâ­aZËOˇŗ†0v*ĸ†=ˇ33ëĶ=ęãxúÎ8ž8’Eˇņˇ$ zdĪãĀĀ'Uʡ3ÔĖ›XĶäĶ^Ö=.8dv ^;ŠĘČ`F9éÛ§\uĖļš‰gÅČũŲm˛Ē’ŊRŧŒĖôÉŽ‚_\ZFKf[†LüĨŽŪü¤g†=sƒÎ\åđŨü2Č>á×8Tđ}sŒž^*“Bŗ;xĸĀí°–ö+xĘČ­t¤ŠĘáFIQͰûŲíŠö;¤ŸE(‘7$÷:ū_Ξg›CŊ‡p–Ņ­ŅPšČäprO~yãŋĄë_PĐæS¤^]Ú¨'xVÚ¤ŨIÁ=:ätã–Ęt¯ŗ4SļįŅúŽ›ev’yČȅ0åX ¨įąīĪĨyŽŊkĒę c&ŒOŌôŲ†ãQDCƒÁRŲ;xÉ<ކĒi?¯.á]?\ŪoÜŊÚ댌ôÛß75VĘĪÅ7ÖÚĒÜ[̤bÂAuF2ã~pxéN*\^Ŗr‹Øŗ§čˇŪ%ŋŠķQģŠöÚwIn¤Ž´Īˇ-ÍuíøW'ãâÁ<8Ŗkļ ûrßá[:ÎĒēLqČáLIgā ƒÕaõĻöģbäė‰SW˛}UôŔ›´@ė›N=9Æ*đĪ~UÍhzÜڎ˛ö÷–1E0€JŽ¸Ē’>Fã†čq]7L Í;ę]ZnœšZE Ĩ­Sšˆ ZJ) <‹;cÉŽ*ÁÎsŽšö¨šQĶS&A‘íŽĩ‘Ö…cˇãĨ9!‡Lu˜ø%xxf–5bĖTœ7|RB#h$ž1Jģ‚cö\˜§—ŠãÔ1ÎsĐú Prs‚;˙]9>dbHĮԘŧœƒØžO=YŒ*Ō¨GĖ įiī@–ãGĶmQū cĨW“CŅüœ 2ÛĻ2Ē3Å3e<+wą/‡ĨY4xŽ~įœĪ(C‚@gb9ú‹]Ķī5;Cm§]‹7vY†w*Üwüž´hZciv1ÛO9w>ŒĮ?wč1LÖ¯ĩ+ hΝd÷ķ4Ą<ŧí;y$îíŒc4ãšËU§&ÖÆ]…u .Ō }7T-ã™$‘V 8 ’ ‚H$qŸ|t8rĻā2ÜõĮëúWˆ|LˇöČ|2đE$Ē!œHyį 8ú“]Ē’¸íß§NĪįU&Ėâ†Mu Ē<÷2ĮkËHĮĒvÎ›Šŗ ;¸äuäŽpG=Fy?ZÍņ”…Æ™a3í‚Y™Ÿ ‚vĄ˙ÍÕtHt0š– K¨đ‹Yƒ†ųpG\ÃŊdÎčQƒ‡ŧõ{zîģnĨZ7šfũÜLā–ÉįÎ+\°˛¯ÍčHéī\M¯‡a˛V×į{‹ĸ➂p¤N¸ü?•vã1W>¸˙?JĨŠ•xB %šČxĮZÕ`[]7EŒÉ}xXŖ°D\Ğ;Žžĩ͝â_GĒ-đL;Ûų­&áč‡?@~•ĐøĖęzu喯ĨۋŸŗŦ\[„Îč܎˜įĒŽ€ūYŽpüLŧÔb6zn‹'Û¤ųF_xNŨ03×č+xĻ–‡zž‡ĸjiŦč֚Šå<ôË(líaÁīČ>˙­ięØPO|ōk Ãētēne§ąËꕏBėrܞO=ë^>ŽžûßŌŗ‘hœ7ī čÔ{Ŧĸ(’WØÛQ¸ q;TŠBȋ‚Ŗ3QŪ\ ;I§`?t­&ŌH5ø•ŽZĪÃú“JˇÍ-ž–ę€4VŠIqčü…ãžšŽģy¤ä0pxíø×0.ĩ›'ˇēģ級 ]XUB˜ƒ>Sߒ+§S”ČĮ~˙į𤎌J›ŗ•ŦqåˇÚŧ['Ų ąšå-P,ōÅ* ‘‚PČāã¨ë]† –ĪJ[y ŠŲãy—…ĀËąęI'9ˇĐtŽ{RŌ#ģņnĸnĩšŦãŽHÅ­ōÄáB€wĄįą Ž9ŽÃV–z-˛Y]5Íģ†xæs’á™›$ãžŋĨk-Ž5šWÅ^öLéÚZą(ZV—ÉÚšįį ãō5KÂko¨_ϧuö›‚Rpëü}jíČÁéĪ^õ7ŒÅ‰ĶmĶPžXa7*~O/„vųŸ)gāqUŧicę §]I=ē˜‘L‰ cķ'Ū'xÉ<äsž´ūČēŠ€W ČÁõŽ2÷ÂZ••ã]čWžG˜ÛŒ ä`ûgƒßŽŲØ#… ‚Ãĩ<íØ¤œ`uëšÉĢ:NëŠÅÁáÍföx¤×oüČUØ"9É2Į¯5ڗųF s×ņÔDŽéÅ+ 1\—žũt$:ÕåSâIzö­ā+Xē{íë•ŝŲ#ƜƒĶĐzšáŨ>ûOˇšQ– ¤’å¤I!@›ã€ž¯nMr> ×õĢ]Q[ Ĩ+fŲm$•ItÜdgU8#wNŸ-oøÃč+]\\Ę÷™žt*wîäÉĀö­|§>—ĐęÜa9ī\Íôwú>Šw}e§‹Û{•Q$hpčËĀĮŧgЏŨlî$đÛF=Īã\N‰âMUŲÕĨ•œÉ,qÁ t“$āĄR:āäWnPã’@Œô—­i&sÅY†Kž§€ , a›øÅrž&ģ{kũ0ÜŪOii™G‡#$Ú8į§Ōŗ'‹5›Û̎ļŌm°‘?ÜËqÎONšÖMęvĶÃsFíčz pŒ`Ļk Sņö^¸lįŅYEh.¤šIBąä¨TR9åņę—Â÷2]xz'yÚ` ĸĘũ]C ü1W5-LÖĖÚ61\ųg)æŒíÎ3ĪáÚĒ6ęsUƒ„œYĖi~-ÖgÕ´ÕÔ4ëXėuUy-692ÆĄwqß tŠīĸųTãp dĮōŦá­ k1ęËhėKļØQ´€į‚z ،¯ pžŖš%n‚Öį w-”šÎ§ũŖĸŪę2yžZÉ%Õ(Ā?/RØđŦË'‡˙v&Xĸ•ŅŖį œ…?LÔZˇ‰ī-ĩė-’ØÜã†#1#r‚]‡÷Fp>•wAÕî5[;¯ĩ,!á¸hƒÁŽ0$úšįŽfˇ=Ē^ËUø–™°rTäŽxëMēŧŽĘŌ[ŠY?ŧ#BėGđ9Ē:ļĄqesf°Y5Ė3?—#Ŧ€ŗĐ•=GŠĪžzUõÍ2MA‘u#mwgœÅ#’NsÃ1ČÉûķgsy›tJO8'’;įéüęŧĖÃ=ūn´°ÜGwcĖ |™:d`āāĐĐËķūŲĨp&‰öĸ¨äSYž!ÖŖĐ´ų.Ú&g*PAcĶŋ<āwūĩψpŦŠ2ŨŽSÅ%ū×m,æŨė †Wx$3„^üqN*ė%ąå׹ë:ćS՞wWŒ‡ŽH p}ÎrqXw6¯nÂŨßēāãŪš=q^ģŠé>rmWJŋëŒŌ—8R7 p:¨éœW+â k‹ˆî,ôⲰJ61đPČ9īīŽqŽ˜Î&-6pa$ōēČ^FGŒgŠĐ6wZ3Ŧ`ímĨà ¯'ŋ­.ŖĨMkå]É “’Ā0°čōŽĶáļ—mĒEĒŲNę­åĢĮĶ!XÎ1ß­[’JäĨ­?ĩļwˇg,J“÷zŒķųõ<×}Ąx_KÔ-üՙ#e Ĩw“סCĮąäģ×Ĩ´đũö…fļŌi:UĖÛĻ–ŌJ32šädŒ`˙S•4ē4ž![{Û[}"ŨāܒÛŒÆęF>ú¨õpâŗsæŌ%ōÛsĩŅ|§éŌG2¨VM¤9'9įˇ׃ŒĩŒEˌYÃ;“šˆČ-ĶĶČéž+°Ķg6rjĐŪÚ┕IgAԆĪļ0sƒķp:ĩ/ˆBÉsicq˜ āzÖũČo°MåČ!}ļN0ŧuįŌĄģČkDIH\ŊyühšN 큑ŠÅđŦĶKgr.vŧë)W˜*<…På둃ž8Ú9ÆkiË~Ta‘äJĖ˙?Ö´Ąä`Ī=)rš==i ڀ€1Í;؉;ĸÁųž^ÕËËāĢyeßQŊQ$í8Tp1$ņ‘ĮZęŨČŽ Å0xĻMMÍŧĶ)™qöP7¨Ā§Í×&‰lkƒSsåŒųNÃGąM´0E+Ëķ]ÎI'Ôâ¯ŗ`d)<×?áxmt§[vãķœ:á˛9üģãč+ĄëUa_ø[œŸŽLŧ2"\š× Č۞6žLÖÖ¯Ē[iPE%ÔnŅÉ LĒnÚpNHôâŗôņÆ`OԐoš*F{gņĨgPĀ0}( ŋį=ŠĖŊzdœ ö‸îN)X‚AÃ`đi P\‘Į.L6sÉ c—†äcÔԜíÎėí@ų‰]Ŗnr2ĨeęZ톟$qŨÜynãp]ĨŽ? @ĸÛ˛4œ ŒŲ}}i¨ÜXt4Ũã2š+qÉ}=Ígꪚčˇ.҆å[a#ķÄĸÛZ9ÜĨY[oë˙ęŦí_W‡HŠ–‰žŅ*‰ īlOLŽ0kF9RhVhŨZ'ŠįüŠæŧ[kq|Ö1EöĨ€]ƒ$ļļHÁF]Āö°ĪļjâLŽt <00ķ#ÜÁTąyĮAžŊęË:õ#÷⸑āĮRŗš]cQšŽ)|É#ŧŸxÆÖÆ80$sčMvĒD0ŨŽqØûPГfˆtņąĖĸâ/æ|܁ĶōŦ”øvVRWU‘'hōųíĪŪŽĒ{ûKââ8Ë}Ōė3Å^ŨœĄr?¯˙[õ¨ąÕ EXE%ąÁÜxBōÅíî“PšøĮqhv0ČÜ=ĪJîãbŖšÎ8éĨekNûy˛7!nAÁFgņÆ?ZÔ\‘׿ĸ­VĨHŽa$‚ēĐ"‹Uũ;vÉ4ŽR(ɑ‚¨<“ÚĒ÷ĐįØU Ŗ⌠1=LķQG"Nˆņ°uęPx^Ÿ­tú¤ļ–ēUÜר^Õ f™sš0r1ÜTņŲÛ,Í2ÁĖWc>9ĮĨ2ōÖ›wˇž-ņH!čĘF 'QTŸ28K COƒVĶÚ÷Á0iö×3*ŲŨ"DíŋĒî|šë׹¯Dā+š=øÎqö ˛°ÔíŽMöŖyörLÜOŊ"=°1ĮuޏJXGˇų˙š4ö1ŠŅ‘ÉoouŠhã•{Æé¸î)†ŌnÖím1ˆÂ)Aøb˛üCâ)4Ktxėž}ŲPü…O÷Ž:×= ī‰ĩi€ @äô6w(ÛØVˆôXõ+Fa2ŨÆŋ"‰ž@ÆqœWA´ĸÎ0^´¨Šˇrƒ¸ĨfTĩ<ž+û.y ëļС–€eņ&đq‚à ęsŒZˇSŨé“é6ļŌZ‰0ÎŌ†•ŠĨ2pIČät,OĄŽŸVđƗĒBęb3‚YāUVbG úō^øŦ[ŋ ÛXĩĄ[Œ^Ēģ „7ŋzd`mŒžOÖĩRLĘÍQÚŨøoÂ76­ ++ŗĢ„FáOŋĶ#;OnO›[Īq ji6—¨~ú;fƒæN{tÁį÷Į5čwŪÖntČ­Ōņ/,#iˇmëÎ>ņĮcŒŒÕ-;áėÆî{ų9ļē• :ôúÉÆ}ųŌ2ŠZ‰ĻŲ{Gņ´ū$EĶZm3(€ķ#—×*W×!ÉãÔW5ĸI¨øĘŌÚt^yŗ[Fë‘ģ–ÃķģgQĪNsšī¯F‘áË\Åg„¤ ‚'Ž7tīĪJō۟jŗëŌj3ŧRnÚŽ#ųŽ3ƒš™ũqD`}™čZ/ÃûŦŊÚ]Ísmnå0ø¤SĪƒņČ>ÕŨMcaqhÖW+äüÁ›’zį__JŠĐ˙fx~šA¸DžcŗsœsۓĪõ÷¯(×ü]{g­Ési'– Æųyēv$ŸĻ=†I9HˇdŒi aæZFĘ ļ?ģׯųôŽtGŧō$=AČürxį¯>•īí¤éū"Ņô˜å…âĢ"dôÎ\įž1מõį>$đSŲĘdĶҁv8Gę9*ÃˇAƒ“ëé[BĸŲ‘(YŨxËÂÚÍĐ´ÕŧåÔ8ØžqX匃ė}?ëēG‡ŧ9 7oecnɗÉ´ēúáØ“Œgô¯›†ëyLWÆIʞ~§˛šeÍũ§Ú¤ŽYäHūyî¨{`ņ€ņר)Ùî5+t=z÷⎍Ą=ĩ’KrąÆH@ōŲ˛ôį¯ONĩĪčļw>1×n|č\Z,‹-ÜŌw€8EīĀ˙tvųAâ]¤j°‡--Ė€ė@OęzáE}Ŗiz6›•šEÉ,~ķ“œ–÷˙#Ļ+9¨ĮbĸÛ2ä—XDs-‘iŖ|Úĩ‘BǘÆ×Ãpåē@†Æ0ÅŌhšåįöâ3[ĘDk{FÆ ĀW)Î1—‚FHæēŨKWĩŌĐĩÃ6vîÚŖwũ€Î9$y5ÁęŪ8ĩ}Y#M'΂g )™đ$B`ŠāˇlįŽO0MąËC°Ķõķ(Iīĩĩ•ĪüzæbduŽ029Ā'ũļŽĻHėĻiĨM­ŊWĢqĶų׌é_hđg ĐZiÚ’í‚æL2Æ ¸SˇĻxĪJõYī˙‡ŽÚŌh¯Ã"Š€pÍ´įäuõööĨ(Yč;Ũø:Ō m>å-íåļ‰Ž ŦrDTé†*Þ哜+§Ž=˛[šįü!M)Ą†HdōĻd“ĘPŨĮg‘ĄFIųT’D™ÔįSԖKĩ°™<ŌígŊ+Ā9Í8 ŽsMĢ™\Ŋ8Ģ›ŸÅ›HāĶî$Ÿí o•—īsĐ`ķôރ¤„ŒāÖ Z6‹&Ąw{Ŧķ&đū\¤ų,sŧ¨†<æ‡sZ*ÛššąĨęęv1^BŦŠ 8 0F?Žjč`}+;CŠÉ4˜Obm6™ÎO'=yëëZ(Ũ)ėe4šŽÅPđĐ-ˇū& įnyMŽ*OÍy0}’K”-'?gƒÍc‘œĪįŌĄņ:îÕ<0ä(ôžjŌÕŽ/í GĶėEä…đcķqƒÜôíTö-*+ZūđNwÂ÷z‹xŽ[{‰u†Ks1‘ė÷vp9éší̟Ķ5-nįWŪéÎÛĘ-ŋÍķ2ŲĀĀīÅoÖˆli‰Öw˛ZtiūBŠZJhs yŨ‹č)ƒ†ÛąĀ`~ŧՔŊ1ŠÎŽ@@sīVíËsœˇĻk#­Ā$¯LRÃ$•#ˇ'rōWž˜ÍJ7`1čhO˜ŸŸ*@§–É9sŽžÕĖĀŽÚvâہãĨ %Æ\āˇĘ1Š% 6;Lķ6ÜIÉâ‰1$^Ūæ€,+ȇAĮãX$2xŨ^X”íŗ)ųô÷­‚y‡īc<Œƒí\ĻģĄjz–°. œÛ"Šŋy œLŌ7ÃÚîîÄēĩŊÅÎŊgå__[E9HŠ1 …W<Ų­{ņ ŅnĄī “'?.rOן¹á4äL¯”~WyŸņōūÔw~ņ,VSJÚŠšŒLbi¸8Æ9ëAĐĄ ŽY­×E;t+æō"_›Œ|Ŗųæŗõ­qôíRĘôŲ¯ÂI#0^5P3€zõë‘ũ֘ģ4ûh|˛ DŠGN@+Åqk—maŖˆŖYÕÚâčąSt` 3ƒŒV]Î Žōl]ÅÖzÆą%…ŊėR!>kŧjUNJąÁČ˙õwčŨ\BŽŖ¯<}{W)ŖXęē%杧ÛivÖúXIZy`›Î.ûpĨ‰U9Ī×ô×ôč8'īdQ+t#[jb^Y[Oâ O6%&Ū$]Į€Û—ß­RŊŌĨ›ÄqF5;ØĄ™Gg<*0;€ww§ëú 毊@đ]ŊŦqÂCH¤äœƒŒ?ČŦßøA/<å”kŗpû˙fŗÔôiēi&åĶkÅĨ€—KšhˇĖ.QԂŨÎ3č+yOŽ1×=z×<3¨é7Ö3Ĩä×q ‘Ŋ0A\į ‚Oų5Ū*’ÁãŒfšķ0Žĸ”yes˜ņŽtF‚Fyn1ūĻ–ž1\nĻž*ņ]Åö —ŖÅ—Éį2åsĪA÷°;€q]­á ģhxƒC0Íwŋ/mrĒÛųĮČíƚf§âģ}_Á:ļ7ÛŪEŽ{I2p§Ž¸ÉëČņ[¤–ĮŊõ7<ÛxKJ ķn…\@FGķ˙õW@YS,ĪĶŠ=Edxn&ÂúZœŠ°įŸöAŽjâ}RjĢc§ļĻUQLFøFą†\įË>žŋ…EŽÆ´Gs' $÷Öŗĩ[élė$š­ *‹ŋ… Ė}sU|5}¨ßiĒú”&đCDˡqéžzÖ¯kv–Ö2}Ž’!Z0™Ũ’ãPÍŠ|KK™PMĢé—öbûQŠî—ōŲ<°Ŧ§nwQü¸Ž„J|—îpk™ŅĶÃPęë ąŪ!a&cr@ ͌×Lˆū[ÆIŽ úÔÄÛŦŌĩŒAeáką=û[é“!v2Ī*̐Ę9É?JŪļ†;{TŠŅaEÄj˜.00?ÃŌŧ›TŅcŽūæh<8öļqŧĻa($‚Un^Ä|Ę1õ¯[ļ]–ČĒ6á8SíZÉhr&p>>–Æ+Í=oŒĄ% ŅÍåü„ƍ‡qÁÎ=nø:8’ķŪZ™¤1É åFH¯AÛāįĨn•\̎/íÔ ’"ˇŒų+o&C´c“ÉoĜũhoK ߋvą™ocīK ŊúsÛĩqúæģáéPĀ×Į…G€m*O˜úgķÍtž#áŅnG’e2ĒÂ[‹œp}yĒÚNmci>ŪŪāãvߜ¯âyééĮ&ŗk[ôai_É\ÁĐîüK=Ėoŗũ€3vß603†8-˙WlũõęOŌ°Ž5ģë ZÖĘ{ōŽ$’‰ŗžqČĮ¸âˇōÛv>_^9Į4Ekb1ĩ&Ŧy~Ģ­ëúVĄqgsâBfˆ´K,‘$…e2Û†ãŠô ܍ÉnœÉp Ėb åļŒ“;û~UƝ†ü*mnšÎsmæ†K û.qœ‚3ƒŒ‘ČÅušZÁkĻZAm ’Ų!DÔįr€?–+YZÚj헃ļvœįœqí\ŠŌSġws^ęųQLŅ$2ĒĻÖ#,0y<ë Áˇ§Ĩsמąžž’íd玖Q‰ŧģC}Efîvaį7} Ī ų–Ú†Ŗ§}ąŽííĖ~[ģnar ĪL ÜÔŽ†›§Ü_H…Ŗ‚&•ļõ!FHæ¨izuމj-ôø÷lŧŽÛ‹sŠ]v ît čnn ˇ†[wF–Oē€Œdō?˜Ļ—s*ķŒĨx‘ØëŨXÚ]ÜlnN"ŽFįœë3ßõ­MĄ”‚Øē’îīČiöĖÆVI$Č|ä€ėOŌ´ôW˛:4 §—6­’†@s’Į9gŽkœ>ņ–ŠãNÛHīnI#qŨĪËękĨĶ-'ŗŅ!ˇƒĖ‹ķmxŒ9EÉC•Î;{RŲÂs“‚OĨIE‚sąūŅíž+•ÕŧG*]%Ļ›ŧ4‡UĖsŸî¨8sš°jŲ[Џš4ˇ‹“Œ`…NN=Ž uI/$–Y™ŖČūZ3É îĪˌ>aĮ`áe"ŨßÛ]cēˇÖĩČnŸ? g´aļ°ÁuO^‡ĨIâKëhmuaĻĀQŽg‚ĀŒĘĮ 7 āqƒTî5…Ėŗĩâ[DŸŊĮÎ6Žw/Ú3ĶžN9¨oĩ(ÛĖŽX"XwīYã’€õųC@G9rųsĶ4‹¸F“´™0ūí×7͎}á\ŒŖā‹+Ģcz׹Æ#ōØš[ˆICĀ=Č檌gš­†{ŨgE˛ņĩÄŌ]}Š5o &ûEŗ×æ>DÃˇ…?Z];ũ_^ŊŠŽ]đȲí$Ī'ļ Í6Ũ‡E.uĖŽˆôÚëÉąˇˇ™TDÎd”m$‚˙gœ}+ĨŌŗ,ī´›ûŨ֗6“ܤ|ųLĨÕ Ž ĮĩiŌ‰5šyŊØØZ ĐÄZJZ)°­T”$9áģuĮ~ŸÖŠ˙hŲ}Š-Öx˞)!U†N Û¯cÍYĪú$Ÿ) ˇ#ŸÃŸĘĨb')ģÉXāu+Äw7×īPģģԘŗĮœR)į*n{ž@¯C\ˆÃz}N=˙_ŌŧĘĶG1 *ōßÃúĨžŠöˆkÃ0%ōĘ$.7’ŽīÆkĶŠĸāƒ§įüâĩŸCš:ŗņĢɯą¸Ö’ëĘHėƒyerq¸ŽPõä߃]„÷.f äˇ{ĸ,ĶHÅËIę@8Gl}1ŧC&Ąũŋpl¯ã‰-ėŖžHäŽfU؟šĀĪB>ņđkkˆËáí9žįÎoŗ†.°lō'ôĮ(–ŽĂāé{pĪ%´‘ĖP1ÕO#úū—‹´›¸DŸiŽ 9ß§iSžqØæ´õ‹É,4{›ØŅXĮT0Č'Ī‘ķšēn­k¨}Ĩ-Ÿy…ÆöꤕƒßŊVņŗjš%̈́sĮ“ÆUKô9Ę­éz5ž“}•D­¸ĢØ>ÜT÷7đZÁ$ŗˇ• ŗ8ĀÖĒ&åoÜØã´Īę6~&ˇÕfÕ ŧ^YĨ˙Gōœ–MšdãÔcžäšî3’F~_¯ãüę ;UĶõUwĶī š ÷ÄR ųē]YvŒœŖœsMˇ'ŠV9mOK×.5ĩšŌŪ(G͘)ä6vô'ŋéY˙Øž-ŠK‡Kû5’\y›;œcēãĻ+ˇ)i2:÷=)Ã>I$ÔōqÅJ)+"ļ‡đhļQÜĢ,ÉĢ9ÁüĪų§…ŨƒÛԘü"íb9ĪJá.î:{šæ<âKīÚMsq¤Ŋ¸ Ã#ɸH 9Æ@Ķ#š9oc›nID’{{ōz08!Y°1ʐx;Ö>G+Đô\¨B¸Āã¯oË˙ÕŌĐžŲ?ÎĨkr2Ëč=?Ÿ§øGrĨí&¯ĖP…Į=Ģ;ęSZoâ‹É5=V+7#ėđbIųûÅđBįh Î˛"‘ĄH–$YghüÉy-œĐm9 g§ĮU'‡Žõ;Ÿ;ėÍiqšdw …-W#ƒšG|sÁ<¸ô­G”^ČÚFÕhÁ%ēäaw3}O'k^k+#>^Ļ4_"‚ ¯8ķ@;TãwNA<āęxĪcBĩˇžK;yRíĄMąĩ¤;ŨqU˛BŠîŲéÖē KPûlÖđjWfÖ ‡+¤g%ņÉ:đqĀÚĖ 5mA V8 ģU"p;t#éSĖŌ“fF§\éŧļŌ-Ÿ ÷ÎŪcsŨB‘øn?^*ÆĨiĒŪ7žŌéˆTāH$î˛×<~c­mėD‰öĢJäsīéūÉīėíV%¸’i2Џ„9ÆyÁööĪQSĪv>SšūĖņ…Uoā¸sƒĩÃDAĀ8ęØéß õF]6ú$?ÚįRķ$%šm?dąÛåÚ_?Eük§ÔuŨ/H]×ĶC€,ŧdc¯ĩsĶüAđãg ķÁ͍č:ôíšj÷ĩ… Zø;EÖŧģ†Õ/nŌ"âU^œ~2\ƒÍfxgDXĸģY%ärB$‰=7>îÜryä’ĩmŽé:ļ¯ö‹‰#s„šŠ9bN#Į!†OB xÅÛ ã\–3r-¯LŞ0Ÿč÷2Î2wîFsÁÆFs^ōē`ėt6ąmėĶZĒÉ5°_5dȐŖæ9ôŦNyu ÚŸkß#1*D‹ģi‘ÉAĀĪ5m–ãNû^ˇ¨K\$ Š"DjXŒO$“ŽxīëU!°}BØYęZt‰ao ˛ųŽÃíI‚r9Ā\zōOˆØŖ[ÂbĨÉu $w—3Ũ ŨX4ŒTķÛnŪ˜âšTëÚĪ‰Ū 6ũŦŌušFØĖ đ@āÃŠíëŌ¯Zéj÷vZĨŒfąē’͏-*’ŦÂ@{0ų†KšG§x„KiĢÅu_kÃ ŦҰōÄÄ)ĪßGûŽĩHE÷ą’æQ´K`™d%'Üō2žFUFÜäžHÉāgŽGEļ}wâ;\Ŧ"˛‘æ˜˛ōŽŖbŲĮ'käeZÕVđ¤áøČPL)5ÚĢÅūÎÖÁ$Ž0Āã¸%žŋ[Ÿj§-ĀŌ|‚XÉŅåÜė쟟Ž:gņKKŠúŗáÅÔ§–ęŅÄ7Œ˜$¯îå |쇍ĪQĶ$sĐķ7•åĸžŸypã!VX ČÀˆô`6˙ušĮNŨųšyĨŽŅ7’@Ŗg?đĩ ‹5ēÍm*ŧGęÁÁ°}úÖjmn_*fG‚ô_ėEnņ4O!2:ˇ-ČĪlí œwŦø”Ŗøvđmhļ›y$¤($‚pBk^.RÔđk#[o7LŊĩ†ép‰ŅĢ€¤ã,N}…Jwcz"Į‡c‚?ÛŦ6ÍmVĖ/'™´î9Ãdägü01šo5›NŸZÁđÜOo Ä$]˛<’3lÉΘŨĪ9ĮQØÖ䄎ܞ~RMËbĶ ČŨNU8ÍFŊxɧîČāôīTö2hSÆ9kūßĨÂ]›YÅ°ĖšŒ|}ûZŌ(#ëī\/öīü#÷•ĨŪ3,Ķ;#¤`‰AÉųŗĮOō(oCzœÛqŨv˜,SL‹û=ÖK`¤Ŗ+oĪ'ŋ~k›Ķū#øFđŲÚZ^âiš8cˇ6î ŗĒŋwd=8­o [MeáČEĖ^CüŌĀû ą c=˙&ˆ|G ‹]3ė÷–ââąYFŖˆāŖĐņĮCéTŒĒ$ĻŌÔOIåë^ÂąQ~™8˙G˜v˙gŠVîQm …‰žîMĘŗBŧn<ņ“Æ3īNņ ’iøoËËnÔ# #ėķTúöą&”öåDąw–Pƒå=ĪøŌ{jUûH´ŽĖ˙ ÛOĻßËcũ–öđŦ!Ä¤3ĘŲūō’1׎ߍuĀįĨrš‰åÕĩŋŗöžxT;™ā6ąķ˙ęŽ¯šPō _?´÷՘´R֗ŠĖQE&ŒBÄ(síWmŠ#dųw¨b` ~ĩ5Ēlvį5™Ö‹œ„-Ī?ĘϏwíQǍ”Œ…ԛą<š`O%GLĶ‘ %@ũ &rNĐ=8¨Ãü ŗ•Č˙ëĶÂääąĻIä%Žyā­H U8nqŪĸ¸Š˜ŠÜEҁĘČ­.ÖGĖ`9āļ9öŦy5øĶ\:RYŨM6WĖōÆQrĪĶž´šmЊA%¤ąÚŪOl’Gƒ20=ƒgŦ­{P×ôŨ>TšĘš ˇví´(cŽTäįį8Īį]ƒlĪ#'$c āzū4顉ĐĮ,Hņļ2Ŧ2 4oųų¨Ą*ä+ԃÁõŽ{^ņOö>ĨoeŸ5䲥–EG QĢ˜õāsōÖķ*˜áNršÆsĶ5ƒĢøONÕõī.ŒæTO/jLUYrIāsŪŽ6ž§<›e}Äšîŗ+¤+oĨ}Ÿ0$ä flŒ¸^ģ9ĀíųāuNĒč:ä~uÍčŪĶ´RKí?΍Ė^K#Kæ.܃žyŒuŽ— ‹†ĶĩĩôZjqēŨ†šuât˃ ¤rÅW!ĪøUTŅ|^æj[ųĨvœķÆsũÚîŠđĀļ=ŗM~"HĪnj,vGá$Ž6ÖË_ĩÖ4ÆÕ¯Ō{c+mD9įcãĐ×dëæ#‘žyĮgÛĨG°¤“¸Î:S–\ŗ3co áM+3*ĩ]F›V<V}Q×õGÕõëģYmį1ÚÅąģĄū,žŖĻsÎ+sDņõ…Ļ‹c÷ŌŪߐ#h‚’IÜ@$‘Ī=Muá&[™į}2ÎI&“Ėf’ äŸĢtü(ŸÂš++ĨŲ!ÉŠ}k)Gc™EŖle•6`099˙?į‰yā­2õîŽdYž×rÁžXįe €0p ‚8ęl+…ŒüÛ@Į?ʲ"ņ–’ˇ“[ÜĖöûJlY6¤ŖtaœŽšŠMô)ØÖą°Oŗˇ´‡%"@ƒwR01ø~WXĶfŋŠ5ˇ˜E$s¤ĄŨwÁôõ­XŨf„K†VŠįĨ`øŦÄļöŌOu-°[…(đ.ãŧ+múãąūĸ™ŊÜՈtß Ícqw ‘D]ļEnå¸<įéú}+včųvR’˛9ÛĘĮ÷ēt^G?bč7ēÅäÄ_Yē@ĒDsȆ&sīIīœûVėš*ĀuĀįž)"ņn~ņæzT76ˇöwÃŦ[ÚĢG ĩyې<ÉOŨœ•1ī^—I NŸįųvŽ=\_Iõ;ÉuHüä0gōXl–xÆãМâģ­ãprz˙?ĮÛÚ´š9VŒâ|S5ļ­4חš†›Đ$2ÜĀĒé',B•Á!€$ƒÆ2yގI†Â*Ö=6U{DŒ$L§p`8ÎqĪ×ë\_ˆĩ * OUš]kĢëX‡úCڙŖ)eÉūÉúâēŨ f¸Ņ,Ĩ!Uå´FũØÂŠ+“ééCØKqēíÕĩĻ‘/ö€-m&#}ĢĐķí\=ĄđäwëquĢÜŨ¤DyQKž€õÎ?•Ųxžy!´Š8bŽi&¸Ž8ÄĢšCuɁĨŠĘÚH‚ŨŲYÍ2™–Áã°ôŦžįŖJĸĨJúëØÆ}NĮ\ņœąjo$qHmÖŨ€Čî,HÍuW,VĶĩēn˜+×wVÁĮë\Ŧ°6‘â{/2ÎČ[K!X¤ˇƒcôÆ2û]+°EÉËõÎO˙*qŅ‘‹ŗQåØōįŅŽ‹oŠiúĩôŪ&b›s#™Z^2…;(ÉāuÆ9¯bŽÅÜĄO 9į’öz5•âŪËoeį勆UXđb;ō1[ “Ķ$úąĢnįPŽ~q†õČ4ĪŨīÜX+0ŗ8Š-ø(Č˙=Ģ›ÆZ<‘yŗ+¤ĘĘP’í‘ĮŋãRŨaJsøQÔĒ$sÛüņX~)ŅdŋĶ‘íŖŠåā™f6ŽØIđÚ}ųČ'ŒŽjŪ‘ĒAĢÛũĻ×pPûX0Á$Ÿ__Z§â+Dģ̓ɍļ—rŦ:¸FĀã‰g8Ļĩ"iÅ´Ėß č7Pø‚ãV—IˇŌ#0yÎ÷6A.JŊ¸īÉöŽŦ‚zĒō;Ž•ÎøsNĩ}Eõ O\ꨑ4$I:ĘŖ%Ođ€ųZč$ĢŅ ŠîBØwÚ!’O O˜⁁8õĀįF÷U˛ŌR9/'ōĐą\¨fëøq\Ž­ŠÚZøRŠōĘy„G 8ÆqÁ’G~ՙ§ Ž‹yk‘wēhßĖ™˛@ęT‘Đp{zVw=ā“JOcÔãu–%‘*FUŊA˙>•į—ú'‰õŊnæöōŌÖęÎ -,§¸hĸPŦBŗ(9#ž[ŋā;ģBŗ ÉÚDkœp3ū ŗ3 ¤g=ÕŗUXáœUėsūšņ šÎŠŗ A,?gHTų`m;€bãœgŽ?*ęéŨŗQ.Aū.{ŌË(ļ´–VXÔšŠĀÍ);•N.ęĮeyr!đĖē…Ä›ˇJ—<IÎ nAë˙ŪŨĻkxÂ"ĖULŠÚ¸vņnĻ#fWŌŖeQ!_7våc¨S÷†~ĩÚ[ÜũĒÖÂmǰЌūT-ÎĖLe­,sž-Ņ­ĩ),Žîlįž†Ī~č!”Ŗ Û~uÁ#n1žūØŦ-KÕ×°;Uō-§tpßÛî’,q‡Vô#Ž{täÖæK‰Rą0°Y@”33e?ˆ)†î:Ž+…Ôĩ*ō# ęzŽœ“:Ŧúlˆ"i8RQ™s×%ļ’Íjļ<÷n‡ĸíÂãœ`~?ZˆĮ´XôÍKĀ$§8äž1ųc¯=8Ŧ}WZŠ$QřÁ]¨ęßŧR@%Œļ2^ž¸ĻX“Sˇ[?ļĢE“vÆÉĻ“éןĨcڙng…đRėvÁx‰ øņîCVf^î+-öØéāLņĄĘ™O)ëŊpGLp0qu{ŨJ]fŲHŧm>7%Ō Ėpy<ā ØĀΝԙ,ŠãWŽ9-ö—ŽxÁ*áđrrįŒ×ŸĘš„ ģȑļÆû^™R^;ר\Ų>¯xˆöĒąē6äš/šĶn@8éž˙Ŧŋ\›OáãfŅMŧÖķĮäĘā$đrĮ sŽÕč>ÔŦ›Áđiíw˜|ĪŨų˜<ą=Ž{įŸJu"­t4ŨėTĶŅmāžm=•ŅŲQHĀ!ŖÜ8#āķœuäšÅ×5fQŊˇ3ęQ(1Ŋļáˇ$´ŠTp0p§ ˆ~éčžMIŖQ=Ķ1gW'z&äLúaNt­ŊN{[Y†§įĖâ >ÎņĀĸMŘŦ,pÄsĪCŽŠZtÔÔŅ#‚ßDˇŽÚtž¸ŦŠĒģby Īā9ÉĮ&´ŦŲeBÁGŪ#¯ĨQĶîįM‚hZũËnL÷Á˙ë ģ§hw60zuôŠļ-p TŠN"ĸ`ŲāĶ‘ÁÉ N8#ŌŠėfŅ'#œR˛†\úÔd‘É˙+šDŅÆ-´ë™Ļ•ŲbžRáqšĪf‹¤T(׎tėŒ1ĪíÖ¸Í;áŨļ˜ÖwIŠŨ˨ÆŅũĸęlIö…B§f!å+Č’q]D—Û4Ą}m`b2,DዠüžŨ1\Hņ…öĩu¤}'Ä:dÍqĖ&˛˙GtfÁb§ŒꗑšvgIŽ;.¯á ƒåūŅpyė-įíŪ§Öu&ÚkX5TOŪ9ōŒ‰šTޤúuũjŽžĖšß†É_ˇČNŅž~Í6*ÆģcŠß=ŧz|öđÆw,¯$aČcoëÅ&Ũ)(ķŽgbõŽŸĨĮ0ŧą‚Ũ\ŠQ$ `Š žžāVsūđŊž…,“Eq4’J¤8f‘ČQĮjßâEksû˛ēî(Ĩ4”ŗ Í‚–; ãhčqĀĢ1ŗm#ĄĪJŖVÆÜuÍ^Ą'ŠĖë'ŨĪ *\äãúdÔA°FzØR•ŪzcŊJ˛r}ģŠpåÁ/€´Í ˇNiY0cƒš•Ū¤1#< FRÉÉ⟝áQ)ee# Ĩ<1lu ۃB0…F>PŊGCī\­öŗeŖø’åŽ$`d‡ŋãŌēgųHˆČÜOjįnl,/üGuöĢUœ,1õ$rŨ1ÔcášWæØhņƋȒ\ާĘ5ĪŽėMģ›Ff¸GCƒžŋĨi čŒŋō@ <l¯5^īÁÚd–’%ŊĒC1ģ}̀}ōzS*/ }™Ō`ģXzÛ•rŪ!š×Ž5aĻx|ÛÂë ÜMs0ānbƒũĶ]KdáŠÜā÷īũ?ZĀÖŧ:ڝĘßÚß\i×Ȟ_Îäëĩ‡~IĒ‹ąÉ'Ž„~Ô5¨¯îtŊl[´ņD“$Đt6GāASéôŽ‘†ų‡Ũ^NėÖ.ƒáčô–ži/'Ŋŧœ)šâvÉl€=ô­…`ISœ|‰=AmЃâļ$VņZ™į•w*ô gŋrj/ÅđßAqöØūÄĐ ŌĢšāzôāį§k:•ž¯%Íę?ī­ü¸¤ÚA$įŋué\ΚĢh:Åũ‹ŧ’Ŧq†7”C8ČÚ=zį“Pz0Ŗ FÎ?3bĪWŸ^ņ5ĢÛE?ö}ŽæiN•#>Ũ?ŸáØîÆâY¸ã‘Öš-3Ėęf”А9a" ā\×RĮål‚=øĄ3Ÿ5ĨŽã“ŧԜô§3Ą0įĐõŽTļ×üU­][Ø_;M´”ÂeV!ņķpÎ3ŽxĒÖēoˆ|%m%Æĸ/ôĻ™"—{áĸÁC`įĻ{Ķ“ģ99ĩ=!”4%xRG_JåæđBj3>§¨\ŨC洑[´…bŒHädŒä}+ĸFfR01ŒōJĪoé0ębĘ[ûquטO§ėy¤Žļ)ØÕļˇ[Kx …qhäUu}@ØŲ™ģĪ3ąÄƒ–8=ųĮķZ Ę↏ ķū5KQ˛–ōō. ámҏPÞAÆ ũj–iM.mL Ŋrú{H´å‚æĶQ™Â¨ÎAY˛8JÛÕLÉ ę)s-´$-´.ā’xSQØYĪÚO}u÷; ĸ*áPqœ ’N@ÉŠuXŖŸFŊˇ”ŦQKŠŌ ’{qŪ”w4ŽãkDáô]R{û¯–îÍ% Žúƒ\,_.€Âä“î@íë^rFq–#=Myí…Ŋ”ķéq7ˆoÖéŧšRÎy•˛8;pĒ2~§‘^…õ€:Ÿ§ø˙úĢIŅ!QöG*3÷”žšĢXĸUDLzWœxKĩž×¯ŽÅŊ° ŌįPŲ$ÅQHR:F„{ž+Đ,$F€Ŧi…ˇŒgŠĮOéI FwŠ!šm=gŗįĩ•.nxãëĶž1Ū˛lŧuĻÍ­eãrė%IīĪŋŌˇĩyī Kėč#šY'XȑIH<œtíÍcߨÜĸKs¨éÚ;…iYĪ`;”9ôŦúž… AFHĪąÕ&ņ7ˆíäŠ7M>ĖÜŨĪ#'ļkŽÔ.VÆÂ{ˇĖ#HĘ?‹5áfMF_*×G[{ÁV–7Ÿ§jŪÔÕtë“z@ļōÛĪ 6cœūNJ2Å;IFÖHķ=WƧZ˛ˇ˛ēŗĶ’f•nQæ¸WŠ4ę¤ā’[ī¸=ëÖã#9Čî3ĪëÎŦuj:„hđ¤s.)žÉQ%`xēį5čˎøãŪŽĻڐ"šĀļbSz…'o­yō^_jdĨ֟¨&–9‚ÚÎß+ ũæã#§ķâŊŠ$eŨ‚ '= xšÕv¸(Ãå`zŽßZÉŲt+{$ôšáËß´ÚĘĢj-R š$‡n@¯=rOëøÅâm.ķR‹N––׋Ī™$w_ęđÆ[ƒÜŽĮšÜO-€’6ˇ ô#ˇá\ߌ.'´†ÂKk›ØdķØ´€Mæ-Ž Ž3ßĻxę4‚ėaV\Ōlo‡´FĪÄ×wW}´ļĒĨlŸ(ō$ ØũEulr2x<ČŦ? j ģĩv×tØ­d1˛ŽåÉ#ˇSŪˇ$ˆ ėČ Øtõ?ʉnBØQ d*8€;*!2#E Ũ‚Ŧ­Đ‚9šícÅÆÂđiööÉs’ch Ž1ëú}kX|MâXĻĩŧ1DÛdˇRæöÉî;ū›’;c†¨ŌœšHôI(q‚1œ1ūĨsšW‹RîÖÖ[ËYm$Ŋr-"ōÚ_11•$ĸš÷í“Úē"Н8ätéô?ʸko†–Č–ÛĩídKíŨ ÆÅÉ;Fߗ5pĩĩ9&š‘Ķxg[ŧÖaŋvą[ËgvÖÅRBāČ$>jܙĄ—i˙R#%ō8ێsøf°<+áÖđũ•Üm–äMtĶ &lšĘ¨ä÷éÖļīeû5…ÔÆ(ŽbŸŪŽũjen…AjŽs3ßø& `Â-=÷.EÜxĮP28îHŽ–Ūmí"‚ˆŖETRßÂ}zz×#&°RâሌŗÂ Čxõās뎕ױ*šĪ=ņ۟ķūqRˇ:q)¨¤ĖĪ Ų]_M¨A-ŎĄ'?hˇ—Ā•?) ˙õëžģŧפ͠ļģ‡Kžšˇš‹76Öˇ“påâ*r ČʑAĮzíī­Íîuj’4 *2 S;‘Ãk‚œ5ĄˇŗÕ´{ŊFöŌXĨЙüܟœoIąÔd:EœLôI…ŗlP2I?tcšūĻšÉ7šŋ!‰­tÕf3d†=ÁČgpäúÖÅöŖ Ŧž[œž™e\›oR2Íp÷"I Ų‘oį[aågÆÛ†HÁ\3=@Rˆ$TĄļuLt˙´:í¸š´ēš9]ØÂƒ“Ŗ “׎l4†1€„éžzĶĘĘģW#i8+īīų Ĩ̉NŸũ,ås5¤ˇ$ @ĮŒ„Ÿ¯9Ilˇ<_Tđ>ĢĄąņčF1÷šö⏠krÛ^ϟzĘÖŽ…f#Ƀqōá°zŽE_ņ6§ŦÚ;G{;ÉüŖy›€'Љ8ā÷ãÖ˛¯öõą‰UedîÎ3×8$,cœ×Wx‡ŖĐú!Dm‹+!ENĶ•#ûpAöē׊Üĩ·./ôۅy …ØÂIĘíƜ‘ČÎëŨ‡&ŊŽÜ˛ÁmŽX(Vmŋt€9÷8ā×9¨øz×ġzŊ„™†åZ;¸nŖH…1אD|đŽzrQ~ņŦ•Ö†UŖGâ/[ũšXĖvVqÛ4mÉW#äGĘŖ‰¯3’ŅŖ[1"+ũŪB€`œ’IQžx9<ō:Ģ[KáíŨՎ­b'˛ē[ËÎ%8d=2?ā'Ļ}ą^ÔøŽåŪŅ~ΤĀYāÆB 9õįøsÉå…mgäfõ3tí^;=NŌúâ/1mœH‰ũã¸;€$ä“’{įĄíŪj?4íJÃė÷Ú Hüđ†ĮˇCŒō:\Ĩž•eį éŅÂĩ~ķÁéĪnzįU JÁä$[&Á#’h^0tũ}ŗTâ¤öÚDî~ÖmnĄˇ’k˛m”B oe íüė›s“õĮ=ōèkfšž"Ķg2ZßCy‡–ōBįnXK˙gŪŧķDņ$ēžš…œHëüq:đãܞ‡ r9zÄŪ.Ņü]faŗyĸģa˙î ĘG s‚ĘÁXu$)ŗJw[!ÆŨNĸãTŌ|)¤AŽ-,ņäÃhĪØœ “Æy5E.Ōé–öāú ĘČÆ@Û|§$ąÜq•įģˇnÜsšČ˙„ŋLģUūÕ´_Y°ÚŅ!9ۜ–2GŨ“œâļŧ Ėd˛]Fc3ÜoH€ "„TĪŽÂÜķķ ķ\ÖęmšŊ ŲÚÛŲCsjŽĻâÉČeŪp>b¤ũīRFzsŌļŦw hø?wœŠĒŦθS´Šā՝>bö¨Y‰ā`ã­Ja=‹!^ƒN@vô´å=r8§gržÕFM“ŽqØ~5ČĮ„íîĻ•oâIŠ2×`y9ûÛģ]{ā.IĀĮJåtčü%¨]=…Ĩĩœ’Ą ¯–py䏛ŋzMŗĸ‹˛mßätēLv°éöņØāÚŦ`DA$ėrzՙ9á¸įН#Á¤iRJą‘omr¨9ÚŖ`÷u<2îŒ2ŒŽŖÜR¸Éˇį Ķ4ÆÜ‚ŊM:-ĖKÔ§ļh¸Š¯ÃŒää õĨ8ŽĮqķÁÍOåFaŽšŠp¸ÜŽi !’512‘‘úôŽ~MÍ5azגÁ*ĸŠũų°qЎŸá]2Ąe$ā7^™ČŽbÖÆÆOj“L‰$Ņ4eüØĘõüņô ÖŒnžįAŅ€ãôgųĶæ9f(%äS–PFGÖš oē^^/C_2f%LËŅ}vŸĪæ=*øEމk§ÛŊíŗy¯ĪČËüC×8Ī_ū°.ÍrŪŖĩö;ŌK)Î6ŠÜTwŦ OÅZV~tũBėÁ/”’#ēV HꠎŨë|üģp ¯\qéüĢ&ę+̜ÉmĶm Lˆ íŒöäÕG}N9.] O ęßښ掰jR_YÁå” ģƒnäž@ŽŠAĪLsîqĪôĒzf—ca<ĶY[EU\Åō‡Ûœd}YĒøÃ›i$õQŌ›jú lQģŌíoībšō•aWUG@AÜG<÷ųZaĐ4ŧ i–˜c€<¤É­vF9õëQM"Å‘¤H•y.Į\ÔÜŨT¨•“3ƃdēĨÕ´1[}Ĉûâĩļ 6ÖÎqČééXļšõŊŪšũŸhË2Ŧ^cJ•āŽ1øį5ļ<• :Ž}hë Uu•CĪõ!â ę÷—]‹j:môÆc˙ŦIHä ã§b=ęY|Gâ›čĸŊĶ?ŗ4¤™d—ÎF.ÖČPƒĮ bŊČ ųÎ0hŌTˇ=rkNo#VCgËc–$’xë׎0k„ģĐšÁ­gvEdHBÁŗøc‘øöŽÉXCdļ28¯#ņ­&sDĮēđƅ{$Í.› ˛]ī+Žæ¨ōmAvņ$QąÚ ¨īŒãĻņÍžŸsŠG{–ļŗųpˆŅØÉĮ9 mGSëõŽÄ8’$eAQōį§×¯ķŠŗEw{kĻD÷7SĒDŸ{'ŋo¯Ō¸ĸ×ū5ēÚ ÛéPžN@˟äOōúžŸZŅĸÖãŠåÛr‡`,0F?Z…t Ū <ĩRFVg^s€:Ôŗļ„ŠÂŪeč –œ–ļ0˛ÂHeŠ1žBķõüúÔ:öšúļ‡}aŪ\“DQ gh8īĮLõŦ Ōdņ5’ØßÉ$ģ$Ęų†U)ncüŋũ}&§¨Į¤i’ßL G ûFHÁĀ˙ "Ėqåzõ984ß摨éڕ••›Fíp˛ M‡+°gå<Ōģč—jŠAŽx˙õםęž2Ķĩ-cC:&Š8ŪĮņ*:¤‘1į9zŊëĐ#.d~ŸJŌz˜GF2ę%ģļ–ʉQŖÜy ‘Ž•Ë‡öNˆ˛ŪŨģ%€īÆ:fēüķqøž”ŒĘƒ¯ųæĸÆÔëΚ÷YĄiØÚsZ‰üÔgi‚6Œ:ûVG‰u‹Í#PŌŖˇYä†rī2ÃleĒíĀPÎ3Úē‹wŽdōÎ2€ÆšŸënĨI}hŽáĨ–9VcbŒãxļ@Ûß>ÕQZ™T““æe¯øĄĩģËģaĻŨZ}c ].×mÛģcũžŊķÚē&s—˜Čü+žđžŧ5É.ĖFÎę/z3+Ž !Čį§cČüĀč$ÂĢîįđ˙ëR{‚ĩŦČŽ!Šę×ËdŽd?y$üzįīü0Eœ‹¤É%ģHrĐo>[‚y띤ũ{Vžĩ îŠqĨGmpL#/+.gžš­8ūō‚ āįÖĻɛ)ΓH~îOŸ^;Ķ㔞:{Tlč€ČųÚŖq?įé\uˇŒ5‘}KÃ“ÆˇI›$ˇ"F”‘ĐãîœŲ=ŗTĸŲ—2MÎvļ3… ū&’įĪ6ŗũœ8ÆD{°qúÖ…&ÔŽ4ۉĩ[ˆåžKŠ”’+‹q‘ûŧ¯‚=ë[U™āҝgBH­ŨÁé‚snĩ2ESw’9Č´ R §ŠūŨõ Žd™Ŗ!ú …}Ä×~]ē|üĢ—mØæ˙ëqū{×umĨŲ-Ĩæ™ĢÍsĒ<ŠĄVpæRHÎáۏå]ځÜ`dāJ•šÕŠŊ•ŲVüČtËĄ fYLLLjå 10ûŋ^ÕČiš‘ôëC{¨éW„G)°ŊS"Ę„näõänÎ3+ ņ?Ų@ž;ģš-FTK„Č1žFĶĮ=qÜqÜV ÔõļiÖhˇ3?ÚûKaāä•o3ÕxÁ øšĩąÂ÷:KŲ„Ww¯$ .Čļ ŋ,p3Žxã‘Ô}kyŖŸûKY„ąŲe.¸Į .qƒķ~§'&´õŨŨęΨŌ°Æ*üŲ˧Œc’Hî>ĩĄŨC;éVé,’4qĪ’ČŸ›ĸœ°ldŽģPļgX’‚ģ™H#Ôō¯øš…åGv+aČÔã$ÜqØ š8Ôl\ž1ˇ!FpsƒõŠh"C<ķyPƙvbG^IéīYę6Î+ĮÍ-ŊŖ´aü¤*ˆaTŠ`IāøëT<â8—Oš‘žåß0‰|Į-ÆH$—.3Į\{ô2kú.ŗt֖7‘Ë5ÄE$qæ/Ė€'#\wŠ|9i¤ÂڔÉy…ÂÉ(9€pŖdņž9Á čVk•™ˇ­ĪA’e{Sō+îÉ.AĪOQÜĢÁWkû›xD*÷†ŲĐǍ ÜāõũkŒŊņūĢö( ˆFÅ|­­–2Í÷sŽŧäqĪOjô ioĨøz+YP—Gŗ¯Pۈ#=}i4âŦÚėŅĩ”~H$ĒČļ <‚}¸Įō­Ûæ fã~Ü œļß˙WôŽ:+´_Gl¤öņÜ6÷ųsępãéŒV—ˆ|IŖŲ<öwwhŌ2áŖVÎÎ29õæĸQģV)=×TEĢM—vwĀpįķÍnxK{虔\nčäeQŠ–ŸLĻÖš›ŋŗĪĢJ֒y’ŧ‡ËĀÎHõũ?Êđ–‡z—z‚^JĐŃ1/™‡÷zŋœŸOĀuNĘ&q՝o‰dģ]ŌÛ}ÂŒ<ĸŪBŽQ6îĮ(įŠČã Åđąņ‡Ōîtŗ’ūYĄCåžP•!˜}ߛ8Îy´Ũ#Á đôĸ]?Qĩ;ąšYČSŽ~n9ã5nwBQ×S‰ņ‡•æ*`Ēc#ø‡~øÜÁyéÅslĪlđȍ*Ãķ)ƒŒ˙…tsMĢę÷ņ “=ˆGžYSæ8¸‡ŋ­Zņ• čvZŊ­ŧËg1)ænä`žøã?0Ī:v­#-“%ŽĮeá˙é~ûOˆLO¨YĘą1ni[9F@=vöîcZZ‡!›Ãq_é8’kÕĩ˙ILl$nÎ3ƒÆ{€;בxVÆŌû_Ķ-Ž$vLĒņ*/#<œúw8įôįÜ×ÁēMÎŧšĢFæ]ÂS°Øė2rAĪ9Á<öúÖ5#—ŲÔh‹¨CdŠŠ<2Ü)#ˁJy8<œãN¸­-4ąĒxĘäŸCІōöŽÜãŽOaĶúÔēq?fännš5΍eąd§ũ*T9\îj ˜rœíäÔĒĀüi™Čd¨]LdŠÅpúg‚õk8-åPļ†xōĘÛ#vGŪīÖģšQœ€0yéŠátĪĪcV×Žē´Ž­ķØeØ~éĮŽ=?2ē8iVå’Ĩcĩŗ†Hôčâšq+„ íŲÎaiū Ņ4ûûkĢqpÂÛæˇ†[—xŖāŒĒÔöīWšņ/…§Œ†ĩkëg=vnsÛ8ëÔvŽCŌuŸĩhÖˇžĶŦ-´|ėē‚ãy“1˛āļN}9É5ĸJÚ˛ē“šsÄDÂoāô<1–čôįˆHū´˙ZËqwa2Kûtķ IJģ°6–Īļ:ŸSXåņ߇Á_Ū%Ŋ܀úqũ?Š­ëšũކ!3G,)ڊ‰œ˙Nô¤´ÔĒJĸå՘ž´žÛWÔŲ´ŲtûwT+ ļážrTú{vū]ČëÛÚš_ ëZŽ­{rn`[ųhđ !ˆ=Mu#ĨLXÎokī­tAϊ\â´9–ō)iãĀ8éŪ¤ķŧ”.Ë´{ĶcO˜ÛéS2ĮˇЎ•™Ô(dš0vጃŽ*x›p1Æ1Mˇ jôÚ1íJZh؜&Ü÷4Š''’ .æ?wœņÆhØŦwe{<"ä¯9ÉĻ!  r8Š;'lôæĸ” I'<ƒŪĻō…yæ€7z`nĮĖø‹Â‘k†æ+Ļļ“`W!rGļGŌ烜~ŸĨqøßėwˇļˇp4 Ã$mBŖÎ‹›áãQģĶÜŲŅt-3$›†˙[#™Ŋqč:÷Ēēĩ†ĢĒËĸ5´:y`$t”ŗēį§ŨãBk1ū YĄ%l. ÆrXĨ:GueoklĐĪ,čŦ_• N u<Ņtkė+ķ:’Wgi( ø`p Áõũ}ģלkvėž%ÔįĶtŠ\I$+ö¤bbWr.îyeEz"nYd2ž€ä`SdFâÁõ­šØā•Ûf„īuK‰oĄÕ­žÛĘdXŖgģFNņ÷Éî{.;IØØįˇų}jÂŽÉëŊ)7—séęG&Ĩģ…Ŧsū&ÔuÛSėK YŋfįË'š$ā}HŦ'ĐŽu+ÛTÕ5ƒtˇ ėĸŨō€Œg=sĀí]ôÁdcÆk"ëÃļČĶD˛YÜcũmŗlo|öæĻĮuDc]Ÿržáû-/ZķŦä ˜ ´däˇĖ>~N{vâˇä“ĘMØ,sĐZå´ũ?Pļņt¯wr×Q‹m‘ΰ/Û€=tŌ.I ÃđĒHĮß5ÛšOHņŽŽ—gcû‰š q’=9÷ũ* W\ŗŌZŌįũüōQųŽN2Aįūõ‰Žĩ{ŋ/ÃQŗē†yēoÄI˙YØā‚GaŪĻŗŅlô]FÕĩģkëN[؄WĻFxßæÃ‡ÜôÁÆq¯*9y™éãq>PH?Nĩæ:始Dw okz-–idWhÅĮ›šW–/Žā úd}ĪAķÅHY7ã#+ūĩBvWD6“ˇĢ!įų>ÜūuWUŊōžÍæ[Å0’\)‘€Bąã?ÅÆš­HbsÍUš†ÚøŦw,Ģ ×pÎÎЍ‘Ŋi&ŅBĮR‚īSFŽÖĖåՔД@Ã'ƒÁoYē[m"ōcjn@&/w˜:mÆsŸJĢĶ­u‰-môԆãČ.$E]Ŧ™Œđzã¨íW5;a}§Īlf–*íFpÉĶĨ(čV#Y]œZõÆĄâ})"ąÔlíŲ%ŽęÕcBÂ6*Uš į=úvŽŪB<ŧ“Žs‚Hū];û×=cáƒg¨[܍gTŸËÉ1Ī8(ŲRŊ0 tc1ÎzķųV’hį‰įšÍĮˆ-ŸR‹IŌ[ÉrōI;D0*œāļNpÛžR1Œt5č@ąč;Ķ§?¯aĶŪ›,ööŅy“Α ns€;rj^ K´—px˙"‡ Ks+_ˇŲIŅü¯0ąßŧüØãĪÃÜ[K4Ņ kPŧYd˜‰ÔĒžJŸē}?ôK̘lĄ{›É’8Tä“ÚĒ[jZVĩĮo$w*ßĀ<}ÖõŦ™ŨBŦĄ†ūe - HŌĩ+) &9öŋ–2O˜p;œôąīZšÖĻ4{Ãn&XđnÆI u<OZįáD^/ļ‡MvVüÕF;ËĶëĮjču-.Û[ąkÅg‚_ŧĒØ8 đ§$%œ:˙:į¤đ…­ˇ—=„æÚHŸÍ $k"ä.0 ļjÖĮN4›~ЛÃ÷¯ÚÉvc0(ĸā#=ģöĪJĐšŅ­îŖEģ‰.Q[pY”8wĮ­Gĸ-üqÜHFŗŧ́… ŧ`Ëŋ8ëY~#Õ54Ôíôģ ml䞘Ou¸ŽTw<įéšqŊĖĢ$¤ŌFŨĩ…Ŋ´ōÍo q<Ä<¯aL‡'’@į¯Z°ÉËnvôāž˙axGXŊÕ-.RøÛK=ĨË@Ķ[åɅS‘ĪŊnąä’T>´ú™ö8™"ņk:›éÅoU6ŨĮåČę=ę ļņŒVDLbÜšxw“‘Œ`úûWgo¤YÁŠIŠ!u¸•vÉĩÎÖĮsīW†Ķƒœ; ”Žéb–‰+č6ęsi-ģ c(í¸įL×1Ãí"()&Ô ånœāÆztNÕÖ˛‚Ifãžx§Ē•ã9Č=ϤŌ8ŨĨ&˝hąøK9hDÎņ†9*Ŧsˇ>ßį­ięWÚiōÍŗ\Č%ęŲ8§Š!téÅTÖī$ŗŌ'š…âB›AwBÁA` p ?…&î](ˇ%c™V7i=¯„aˇ˜žL‡kūŋũn•ģĒ}ĸmâ Ū ĻŧĻnܑĮaš¤<_ĨĖ-íã˜ŨÜŗ*1˛ĢgŠ91žžĩžc]ģŖ<¸ķíôí֔]™ļ!MĨucĘæņ.ģ¯é‘Ȏ pO.}—iÎ ž=Û@#’;5uzWÚ,Ęy¯õ >ņ7G=Ā bʗË0ŽxÁõ<Uîŧ'$ږŲ>ÆÖŖy*2\ÄĮ  xéĀŠŌ‚đŲ^CĨ]]‰h‹ÛHāp¸Ü§€ ‚1ÔgŽ2tm=Ž1÷ ›GiWš!˛9$1’Ŋ(vÎ3Öątķ4ŖFyųĻîdęxWGpyU=ė?C]0ŗŽŪâîá™.så‰PĀ<šk>•˛–ŒÛÛŪĮ,6ŖŒ0ÚĒ­‘ô<Ō:iūEĨ۞™$ôÆ}ņXõ„z§—os0 Ūď•ČbO$õĪ^ĩ´6ųžcM‚Tm sœ~~Ŋꆭh×vë$3¤wQČļšÎ6ą$g0xëI4†ÕÎ iÖŌiˇĪ—˜’T, c% e†ŽŋfÎúžŽ,ôYŖgpčŲË' N;r2zúzõwzV¯öčÚ6ŽŪ5 ŊÃĖĨPį`ÆGôôė jéíiŠ5œĒגBdŒHT†RÁs’ĄN3Đ=5æîCGyá¸ôÛĸŌîŽ"¸‰V•A}Fp98#ņü{ ŸŪ2é"îčÆÍŧ:cpČ,rõÉ=ŊąÖēk-^ķUņ+YjVÚŨI Â%‡îqa‘׊ŖÃ7VĪ­j×7Wan.& nx"“΍ōÅ>kc3žģ¸ÕĨŊ¸žę/ŗģ,ŗ;`ąÆ1’~đ¯ŋ­lCũ…¯Íu%ž€.cŗũÛHí›Ęb"ŒtU@Û{1Ą‡\ %™‘ņΞ}>Ú÷6ī4ĒŽ,Į>ŲēO ĮŠj ‰%žHîfrŒ§ĄéžG§9#Ŋejœzļœ}ÂFĪ—*ÅšJā6@ ãĀũj(”ÃƒĘ’ ^´ĐĮjĢgƒĪJŠ92ށ÷l<ķČ4\,YW#$ĖŅæ1`ŊôīTĄ˜™_r€Ã§­ZI6.Ėp~īšúP˜š&V‘_樚Î[;c0.f“Í‘ˆÉrܞjķ6đ˛1‚ÉāŸĮ‘\֙ch篧uäų—_idW~ˆ^ŪúzSē6Ŗ{;3Yôë %%•ŧ§ĸ–ˆ1ˇ4—Z^žūK HŅĸ‘eB̰ä};uĢję=XĮõ¨Žī`“Íl,’,c‚rÄāF„)Tér–ŋ­`é3jmœ!*Hf ×ųü+OŠ”•y§Pzn„ņŒqĮŽ}+¯–Ú č^ ؒXÉcWŒ0Īä)˛Ijd•]b+ˊqō÷īĀ洍­ą‹Z™šˆ­ŧCmq=ēŗĮ1…%løį|ŊJĶlĮB{}=iš}ž˜ņK-‚CåO)‘Ú”g<0qØtūĩmclœ}ŅíIØVdFa… pŠáŅ ķĒ"€I-Œ~5Í_č']Ö.æŧģ–8#"(’>Į`$ôõ$~5F-ãU™āÔo'hŦrģXfBI`ps•”cĘĻįjÃÂה´[”,’ąt*xį#üûՖVd دé\žĻļ…ŦÉk ŌKk<&TÁR¤ pqŪēgüŸ1úSŊĖ*B0v‹ē"ŗĶíė•ĸ‚Ū8ŖnJƀ æŸqkopa71C*Į&ô íaЏCīīOŠBzœöÆiī(g 0N1NėËtBĀĸAÆ1Ķŋ<āį­p-y¨Écm§IeŦŽĒ—*æá÷y †‰|˙Ģ+ü8ãđÉô/21•YŊ&Ÿą%ebŸ0Ī^´'mD•ÆÁ)Ųš”ãž ĪŋĪâ_ėöKfģŊžÔ†bwž9ät­ˇEČėpxÍfjzHŋ¸‚FŧžŲbGVō[k08īéōŠ–tPiNōzôŨ {ÔŋKëģĸņV™ÕūS‚1Æ{SüHô+Ÿø™6œpÚ°~L0>ßNŖúéē:]ĘÍ ŨĖĄâXȝƒíĶ Ui’=6rl ūĐ[ ļ<Á#īôĸ;ŽŧųĨtîq>ēÕ5O[IqĢŨ]Y@˛˛ēC˛)FāĨˆÎzzúú3|Ē@=:\pžšS×Ĩ™ôÍ3N’xĖ ÅĐo”å¸^p8üĢēh°VĀęįvĢ›9ârĶk:ޞZjcģ0ŦJŦîĘáAا nõ†xÍtļ%ŧ6Öņ,vņF9Ú–=ũk‡ƒ÷ÂÎAĸČŌjÃĀd÷Á˜Ú9ģ¸Ī~‡Đ6šÉŸ˙•VЧ9âÅ´k{5ÔĨ1Ú}Ŗį ĘØ{×/}˙éx†—~ÖK#î1!&23Œuęük¯×PM¨éļßŲéxÎō2¤¯„Fî7ōĒSŸÚŪ}ŽâÚŅeČ>ÉëĮ]ŧã=}ŋ,™ęŌ—$īō"Đ$Đ ŧŠĶJA<’+¸l–Čš¯ Āâ´ŧIĒͤhßmá–DVyU™UY‚“…98ÍKmáË+]R ÛX#…ŖVSķĀīčŌxšŪ )VëQ|1ʒ ÉLRÎî ~UPąĮ‰’“æūf^%Đ5é­mĒ]ÍqĩĐEd„á ,á‡<+¸ …Éį9õīY–vZmÔVWĒ-îd„Žæ5cˇilÜv߆¨ÚÄĸã…ÆTŧŽx”¯n…Ĩ¤×2t‰B ķ€ 8ĻØŪËyaÍn`wü˛AÚNGĩ.ŗ m&õR-ŌĩŧŠˆŊX•č|Ö—†~Ũ`“Zë:ĩžõÁģeHíŽ1ŽECgM:p”3ļ§InŊv6GSƒž{ūĩ‡âŨOG´–ŪÛXĶ^ų|™XßgU#sŸ@7 ĶĐôļŌ´Ømžo4Ącšz0,H÷Ī>Ŋ:Íņ=—‡o¯aîÆkxYģ´jĒHs Čd÷=iÅ늍T”šLˇákÛkí>Ao§}‚Ū)JEA#ˇtœô=x=ëi‘FqØúÖƒ­ôXt۔Đ]ŋÚxmø ÜžįŸ­o´{K#æĄÅ7š1ĶcKb5[›ģ¸KĮ#Åodnũâ~ŧU{GÖlM†ĄyŠ™ äņĢÚČŖ[¸ĪŽ2ūUÔMáũ.æčŨËgÎ0wr~éŌhšlēŒwķZ†ēF ˛oaŽüp:Ôęĩ-­ę.št[ØÅŌږˇaįīÚ#!HŨœ€1×9Ž>_6ƒqo š•–ē™ąäOîvŒĢøõÎ9ŽÛR°…Œörįƚ&‰Ęã8`GQõǚ/†ôŊ°ą‚'o˜o`=OSZĢ$yōģz:N ēž›⎚܏æ)“cŽ9†x'ĩĩ”z†™= qō§{&ā`yĮ,c.̓ÜZMFÎæęÆX-nžÉ3` ļ†Į9<Q‘øÖl֞“Z_\iíkį’æQ#“ #đũ*ØeũŌ0:ŸÖšü?.›w×vRßÎב{į*‘Á98Á8ÉÅuĨX°ÃuĀČ<įëúÔ­Mą i­Ęņ\CrÄÅ*9ŽSm;°ÃĶĩaŸ ['ˆZâc2ŽÄ„°ōÔíÛ×ĶņUĩĢWˇąžKsûûĩd“GM“…Æ~Nür^0qĮ4+û›ŸIluÖŧ†( yZ˜æ\˛ä?Ę:qÎ2w´­ŠË{}Ëläōx#ĻÜ^MŪyŒp€Æ, eė7?ėņœcšéĐÚi°i–˙gŽ0P|Ø ėž˜īŒô<ôîtæIa‚Îō[A ×jņŦ!s™1ßiÜ@ “Ÿŧ}ĒpiÖvąÛÚ-ģ›Pį< ƒ´X“×-œõ?ŪHƒŧģHŒ˙ė˙?Ō¨^XLˇâŨTæ"’~E$ä¯=:q¸Î*chĮŋ˛°˛‰.-íb[ˆåO,ˆÆy`3ėyčx+wV&ë×Tš– sĮĩex–čiú)œų¤¸!]2]{ŽŨ†[ŋ=jĻŠâ:_ Ë$sÚI)1 K7 Ú?Jģ7a\ōxŦ§“T†Ō( —L2€į 1ČĀįąé^ĮĨæž0HŅK=Ė ˜ãÚÉUESBŠ8Ī~s^[áY|oĨĸČ,›#$ņĘį<ƒˇ{‹§­ŦPœÉ,€4á†vËš‹ôį9Ü:zV•ļą0ŪæĻŠ$6Vŗ]ÜHë `ģ°'ŒrH÷Įį͊ņË˙\øšŨtës$z2_›-3ąÜŲîܒGą88ĮoãûŲnūÍáģ"­u¨ŋī€sŒŽ™ÂôôŦ3Ãˇ—zĩ¤vđmŗ´ŧTŧŊģ–)Yų’㎀u"ĻėnʕÛ9}OðhZMĸŨBQšfKäGۜu ƒĀî{ņUWZŋĶä3GtŌÄaXZT“īœāäņƒôÍv˙´šä°ĩxwČm¤’YSn¤ž Æpx8ūúį­yIIIŨšhÜäßĻ}kH>dD´gĻEŠËâ ,Moiu4+;oĀŌû:c€9ûÃĻ+*m7Q×5øl´ų|ĀīŊ$Œ"lg“­ō‘Œeēú ÛøGct¨M$Ą!eThORŨŸņÁp}0;ęSŲ[M-ĩÄ0ŖŪŌHĄ™ûíéĪãPäã+"’ŧn`xWÂē'†/Â^ęŌę×Ģ$22‡_] ōNAųģ㞕c^õŊnŪÄ:Ug„&7ģc¨¨=Oļ–[[Äũ´pIt×RČDK+ ¤rvˇm¸99#'ß5Úh^(ĩĶŧS5žŖpō0TąŠča¸1.Äį!KļG>”įĩ¸”–Äúũ†ĻĪ(ĩŊ–NÁVPūJ#’W›Toęģ$œcšėFŖ.ö°yÚwäã*9ž™Ī$hMĨØ]N—SŲÚŧĘŖdĪf¨ķëÜōsŪ°5FŲĢi t|še‘SƊFeŗ•rîƒ)ŽāņŽrnæ–ąÜƒ#\Įą—hŨ•Î7q˙×Î+BÁaĮôõīY˛c÷H#wLöĩoMܰ†\…%˛žų¨EHŊČ$ãŒį­H[({gĻE3{r@öĨ$”Ī­3=ÅųznČ4‰6  :ā Õ ‹Ølídš•ˆŠ [!sŪĒĪâ{8´ķtÎÁsÄĒˆœüÅI?ZZ\ĩNrØÔž {Č˜’h G"† ƒ‘Á÷ü*ôÍ6;ąv–6É:g,jA냎3SĩÔ1@˛Ë"ĸģĒ‚ėb¨í’Hg’EP„˛x€éæÚ1Ų„é7œŒ\îÃ(LîĘķĶ$P¯mˇr9&ŨãĢU0>ČôŲą.î´‘qŽšų:ÔÚÆĻkSCÔ­ģ ›K  Gp?T#qņËĸÆJ1pIã>aāzûūâ‹g“W‡ėÚmÜ÷‚bž k<åŽ0ĻE9^ڗA^ĸŗŗîoézĻ“wusJŌ\‘ŋĖ`@8ŽÎ?/J؁áØuØbqŦΧø6˜rz‘éÛņ5ŧ=¨‹2¯~wy_Ėu”Z#hÅ! ž”Ôŧ)ÜYKÄĨy­\ŠAÔbr8_öĒ‚eWŒŽ3ЎnŲ`ä|„qYØëEô ’§'åį4ôp’?Ų¨VOŪØČ'#¨d#$cŅą˙ęĸĀK$Â,’šĪaUđĒė6…-ķ1íL†4†F*3šfcĶŽ3ĀéÚĻ;€%įŦ;’’œŽ9QĒO^s×)Uƒ„äôᚈ˜ĮPWœtÍ;ÉŪTÆÆÁ$õ¯?šŅnuMWQžÖüĀ‹1BîĄA=8ī]áU3×=‰ëĮJžŌĩ Jîf¸ļ{[‰Ė…/‚{qøcڃŖ7ėõ9čŧ~ĘÎúŠ 1ĪÍĪëH|={Ļ_i×ß5Ä_k‹rāā|Ü“ĶükŊōTD ~nƒ€9ėMŠ @ۆ?ĨCXʏI‘Šî,TgōN=+ĪaÕ´ęZĖ:͛C5ÍĒŦ˛BXOBƒŽFŧæģ–ĖHTåË0yâŠ6ŗĻųŒ­¨Zy‘ļ ´‹•#Ž}ęáŖ9$îcü;ˇ{}îoŗŊĩŊÕãÍmŒoSéĮáî+°ln?1RÂú×R„Íi2M;&ārUÃ–į¨šMŨ$Ž6īÃz–ĄĒ^Ũ&Ĩ%’4˜E ~”|˙+qŸéP˙Â#Ŧ ’OøHw6Xŗ¸ÜqĮoŌģS|aÁč;Ķ$Œ• íëųâĻĮWÖę%drÚ›§kŌĨõã܏ŗII,Ŗ,#Úˇĩtĩc + FeÚ'ƒÛŊK´œ*€ŪĮ~u$‰’‹ ąéĀ˙iX­WR\Ėķ[=Kâ ͕ŧŅéVķ$‰‘#°BãūqŌĩ4KĪÜxŽÖ=bÄZڔ“&$Üāc''?Jíá@N:ķK$?įØõĢrō2HĄcōT m#ąõĪnkŒ‡YšwŌŦëSm^ãûdMnB–ËüģBãpÎģ­‡äu§2Ģ€ŧ{ÔÜvŧBĨš õÆįŽiŒČKe‰ }ΝáRk—9ôÍdjúeũíē­ĩ䖲 œ âBzt9…Kō4Ļ“vz‚KĩÕ&īâ–. ƒgÍ=ū…ųRx”]&âk &ĄCˆP;íÜ7SÁ;sÅSĐė&Ķäš3f#•–2Ķ#–Y[-¸ä§įéRxēá-ô¯=Ė!î#U{V ęKä€n}iĀŧE”ŦŠzFŦږž •åÅ͜vÍį mö"É•Æ E%ˆÜOnŸ‡NŌmÉ$…ˇĩqž•&ԚeģÕŽ#– <‡ģ™9UBķ×ČOŊvĨĪ›‘ÁÎGõĢ–į:<ã0ɨCģí"žYQEĄķÔ™Č \ļī§Í€xë^Š\„]Ā.9íÅpˇ ŨŲÉ…šŌäj(^ãėČęãÍÁbÜ0ÎIÎÔ×v'ũ)ČJú˜^!mMu=:}.ÜO2‰Gθ@8'#ļk"CâŲo ŧūÎļÛ†Ø )åēŸŋžÃŊvØއž¨ Ŗy>¸éY¸pÅ8ĨîĻsz=ŪŊ6ŧÃUO*!(ą‚S%‡pO<õoÅUÆģekŧ°Fb¸YYæ‹ĖP°û§†ëĐÖڀí<Tu›}RãMtŌ.míîúĢMáČāûāũ)ĮC*ĩ9ŨícHđΊŖßY–×–[HžLZ­ŋ’š}Ũ6Ÿī8ØĢģ1mĜŧWáŨ/S‡Ä–2x„j7āĘŅĘZÕWg`>éõč*,0sŒį‘Í9ZæJäw7ioO3.ÕVv>€ “IÜ71 b‘dŒķ•nßį4ÍH Ķn7Š’5…üÄ–]¤? × Ĩåãyšs§gĘŌ˜ÕžĒx {sĶÖĄ´uRŖíēá}Āšáz}ęæõÍ*ĮVÕb‚]^îŪŗ•6֓Ŧm*į99‘ĮĨli‰{ö@—īLŌ`œc­s^'đÖĄ¯jbK8m °Gē{q,¨rIŲČ#‚ķÅ\79Ļ­ĨîmøwFmÎâ1w-ĮÚ'3ŗĖ~|˛¨ÁüŊģÖĖ’0ÎåÍfčēLú=‚ZÍ{qzQŋÖÎr—׌“úV”™äŒŒ 懸Öčã"ˇņ‘iä‚å&•Š$ęģą“ũåÎ>žÔEmãí-=īg&ØNĨÄEAÆyŨ´gÍtz^ącŠŗÅnėīų°ŒŖƒęFnõĒq¸0,sÔ)āVv;^&KG5‡= ā3ięé“ģz…ęAÆj†§uqiĻÜÜÚŲ›Šã]É œoĮ$géšōëĪëÚô—Vžąo ÆÖŽíļÅY†q°îį$sōįéÖŽ1r8¤íĐö0Á¸•n„bŗ|M}&Ÿ§Å2Üŧ§EiR0ĖĒsœĮøu늃Ð}ŸÂúLp2”û$D0nʃžyį“Đuč*íũĶÛTXüÉ&ŸË $ŸLQ%mͨü[\įôī]ËQ–ķæŲŦ-„įœą;#ŒđęNrHČÎ8˙8ŦĨÖ&–ūÎ8V7ļ–GŒˆęáÔāĐmÆ}khį`=^õ+s\NëK#Y‰ĶÖĖéí¨,í-´w’”' ÁŠ`‘œũ2{ ŗĨę7wwū•%ÂĖKŦ‘°$€Uęqœ?CYž"fŖ-…ˇŸlڌŒ˙e2(.T’zƒŒÆå ƒĄ~…ēuŠŽ¯qaû¨#ŒĨąbÎz‰ pyųiĐä[ œœōN1Ö°ŧC­ÅĸY$‘åpą&ėpO^ÊڑđÆĶ׀zöŽâ+ˇ‘lž‘ÅX ;WķĮįSvT‘ŅHöšö˜'ßČ+Č!€ĮU<ІÂí–wŗģDŽõÄ6‰ o_Pp8ėwB|“ÂēĖZ&ĩęŌpr`ũô8íí÷ŋā8÷¯HŸÄ~ÖÆ!zæVÍŧˆ2cs•‘Į8#ƒžāÕĘ hB•Ί%TÂąŨÁ<ņßĶĶŌ‰%@q*Ģ PĄƒg§ũ*Í“éÛ#Õc`U€QāFücqlü§8'ŠĀ$æ¯Nã…{v1ŒzxûŨ:ņÖŗ°Á\™Ķ˜˛œg‚A Î=sĮŌ’yDÄОÁ<Ũ¤Ø<Œ~ŊēS~ŅåG¸"ô—<ãķ×ßÔuĮ÷i‰‡1– ܗÃîŪ{åˆČí×=ąëFŖšrO.[xwĸ?å' ‘Īd÷öĀxžŪÎ-{Ÿ˛iŋ#í !!›’VÎ3ß­wWE|šRЉåÎz‘ũ9ã9ė+Žņ$É– Ę™÷gËËUâ1ŒœƒÆGáZSzܙlgø+ÃöˇvcRœ"IpûcQĀTŪĒp:įžyÜ+°¸ē¸:ĖĐÂ&w•Ū4wÆÜŧã€s‘ŸnJƒŦ cmŒ ˰pîÎ;P6Ŧũ6/ˌœįdÔļ#đÆ—Š4WմڄøķgÚBąv6njp ĮŠÉÉ$îÆŦˇ0uûˆŧckå3K@@PzįĨM¤ø6ĮMÔZûËŲ*NĪĄā)`úōONœ~:*ˆŽGs§m͔rŦl  !_¨ČÎõõĩ‡?ˆ,"ˇˆ™ˆŠG.Ę@Err¸ ƒœ°Î7ŒƒÁĨÔļÚ|m¸—Ef(3ŒõāvÎ1’3X1L5?iW‡–ØAÁ +ļ%`ØmÍŅO—'އ9.ŦŲą%ƒŦQT‘ÍY°bÖĒÍĮĒĘÃÉr2¤`˙ŸķīV-ĶmĒ„*p;ÔĄ´L…;˜|ŪŊĒD;įtãŠĸ‰†xĘt̊R`28#‚F?Jbą[V˛’˙Kšļ…Õd’2€ąã$wŽr_ęΝũ¸†IQb“6ˆ BŪ‚ē̎–IĨ‚/:UŒ”Œ0Ž85žšŦęâÚōņ4TegÚŅÜ–aŒœ“ĮĨKg^Ú¸ĩŦŽŸÄÖęūš†M-ĩ€Lal‘ļ™rę#îÔžĀņšæü¤6›â+ŠŽ4¨töh\"EoĒ^?”ĘÆGi<ˇcßÂYb\ō{œu4žf]° ŒqZ'îœ.÷1üæ>>ž!ĢĨÆx'92žqž;T^!ņC藩 ZųĀÆdbŌĒā d€zõ§ÛˇüWz‹œím¨#ßĖŸÚ—Uo AW6bāFBũ ãåĪ`xĨ"č(Šûņēė;Âū ¸Õįģļš†šÛnæ†@ĘAÎ:}=Ž:a\߆“E{‹Û0Ēė# Â’žƒņę:×E‘Œ HĪĸĒ>Uaøæ‚pišĀ ˇ#ŠĢ˜Xvy¤ĀôŖwŋĩiÜB23īW!pÉ÷Hüj‚ō„WÁž*ęĄČŒûŒæ‘Ō‰aœ1f\ô×֟ĨXîpŸ—ŽœķøĶUOåã§ã' ‘é@ÉšÎF>Ϛė@%‚đx4ŨĄO$d~TĢʓžA  ʸ Č÷Ļy€Ę@ĀëL•dķä=ąHIV›ĨXĀeb ~Q‘Ķ5ÅꚎšqqoĨŘíØ)˜÷lˇ­vˆāÆs´z‚Sí\lž.ŗ°žęÖâ]ĸžNcEüĮûåHŪ„[ģQģDú6ŗĒ.Ģũ“ĢÂąÜ*–WÆ7`dį3ČÅu¨ÄīPĄ@¸(üWĨiCzđÎfXdF-ŽzúV‹bÔn­m´ķ0i&PæT\2ŨiÜē´%'Ė•ŽÛU 3ƒœƒŌą.ŧ)ĄOq$ŗivÎŌĖärIîMi G”FTđ@Ĩpž+ģĶîŽÄWú–n¤…-å‘÷ôŸŪ3r{}ŅĀĘ⎠ŗŠMXî4Í*ĪK­ė`[™MÉäõÆOĩ^ ´Š¨år^Ms^ *Ú*˜.žéZY7ÎĘĖmä–9Į×Ōēp„z{Ōz ā‡zÜNĶŽčg!ąÁĪåQËs 0“,#^w6ękœÔ|e¤ÚČV-÷Rw”{n?Ķ576…“Ō(čÛˇxõÁÅHÁAÆyÆk™đļŠw¨Ūj uC{ BÃ^AĪ`OjŌņNŠ. \ßAå™á¨“;rH§×ķĒZ“R›ĻėÉæÔėôЋsuēŋŨķW?ĢpÜ%Ė{—k{‚ŧj=WÃ×ĻķQÖôNęiæb’Ģ0H×øW†P#]ß=ÛCŖ(sō;I7Vũā ĢĪ@§ßôĢ•;+™)ŽåŖTĪĐfŧņŧiĒßk0Ų¤é&‰Z+­Æi=ž\™ééÍz6BŽ:cŌ¨jEļĸa7Q‰|™<Ø÷Cg<J„ŌÜĻģ’`ŅĢ<˜ĮäcuükZÖ¤Ķ& 0ā웆*| â9āž•š…H3¨÷īYŽĨĨô)%ŗšhŲĖ‘¨bˆ1ŸöŊ8ŠgEŪZ̐čšÄš¯ÚĻ–æ,ž\*9@sÕąËéīLņŒŠē#ƒpš0Ūl>po˜|ģ:œûU­6īĪ珌[˜Ú-„9ČŦŌxČéĐûÖ‹Ė–ēoÚĄÕĸĶĨŽPVG@Áˆm#×=Jp'ŊįĨ†xZōōøHˇZvklIŅvP~čVÔw§Ķ+p8ã'Ĩq~ģŊŊÔæšįQģšˇā(–.7$đÉаûÃ%GZí@ ĀäŽ \ˇ9ÖĮžĨĖ×ڞ•i.ŊĶÅv$˛xwlČp˛´œvĮ9¯BFSʐ?ÃéÛüöæ¸O0Úh3JŪvœ÷`Ú[€ ‘Ŧ#Ž(Žī“]ė``ļNėd“Ķŋ9˙=(#3UÔį˛Ŋ´ˇļĩk™'f™ „x÷ĒÚ׈“HhĸHžâęQ•‰AīŽyįĩ.š ×ö‘Ųß­žĸ›Ūã*Ępũ=J¯ øuíĩ 5 Rágŧ+´lTėO Įp+6ŲčF”åĐŋĄëĮRšh.mŌō,ŠONĮųęiž(ÖŽ4}-$ˇ{X¤’Q›tÍå&A9;yíÆ›§YßZįQŋŽ$vEŠ/.MÃNOsīZ†$—a–(¤1ļåŪ>éé‘čyĮãN>g=u/tå<5⛝KÄÄ÷Öw1Ī ģCn„y „cæ<A'ŸŌģl‘“–ų‡õIe°}A!y­Ūö4-ŗ*$U=ņԁųUļ‘Ņ#ŊTŦ؊Đx;ybŖœ`œ Ģ>Ĩeo°És +œīĮ§ŊU×VitkĨ…Xŋ—Ņ>ņõđČŽX[ [Ų‹x^äÛ€Xņæ*ļN[œāマ+9hvPĄŠķv=6ŗ†L#!ƒšmŧ¤äÖv‹˙ KōöЉ@žƒéūxŦ_x{WÕoĸžĪP˛Ŗ.ũĮ5’M̚6“;ô¨ŧ-áû¨­üéžážid$n•„lä`‡n0šÁŌõŌo..ŒŌ@&1Xđ@$0œá—TtĪSžŪ)đÎĩ§ēËĒÃn­€Rwēd`7RÔŽŖŠâ´ÍCKŌaVB7.Ö7 GåĮhÄØĮ"€LpēžžÔ™qĮëFâA?€Ļ)ų=  dŒĘPdƒĪA#‘éZ—[ŨBašž6hØĪāzÖ>—¤E§^ŨÍjØK‚§ËÚ0›sĶņ$Öęîtäd{`SZõy\ŊץÃˤxŽŌæđč7ö­gví7—t‡1;rJ‘ęũ]IÚĐŧ5‰ckÄ×ÄÉįíÃa›yÛ$ū_ZŨD &íŋŠ šËĄNĢs{rĄ€t,NxīÅHŲ žÉäT;ĘmaŒbž&䞙#šüŧ\{˙úë]4×֑jF@ʧ…*‚q–#§AÎkkĖ1—SŒc#¯ųôŦZŌĀܙîī^$b&Q1‰x$įƒĪŪŠ{áôžåŊ3L´ĶÚg´ ¸, –>ܒ}jkÛ -E’+ŎQ‰HĄ”0ƒõĒú5”6°Čö÷/ôI = †›y*Í~ČÅ#`ÛhÆGÍÛõČë\õΈ,´s˛ÃRšå‡ü°|Lŋ@Ă?3SøžßLŧÔí—Pŧû8HNåüĮšãjƚ|5§œÚOf¯€7™”š˙7OÓÔôéÅ(ĻĶ~EíVēÕawšĶįˇ#nûŦę3ÍTņ%ņĶnô‰fŧ{[ļ¤JŧˆV˙d­;=BÎúIVŌa1ˆ.ãy#ŠãđĒzö­§Ø,Vú•´—\îSAį´g•ĢŠG_ŠÖą§ŪXj>;yôéŖēŒY•Ö5!:íÃã'#'=v2€ (Æq\§†ĩíūú];Gĩ¤qųŽŅÂ"\ôÁŸnĻē’YXŠlŒ dt§-ĖŅ åíŊ”-=ÉŲB–Æ@ÉĮõĒÄZJ#ÍũŖoÉÛ -ęp5zæŪ+ČĖSÄ$BĀ•#ƒŽyüĒšŅ4ĻMŋŲÖx?.V0§ÛÜväT›ĶöV÷¯rõŧąÜ[Į"8Úā$dyūĒäFĨŦÅâ`iö‰¨yoōžûg”žZŸ–3Á䟛ŋJęíãŠ4†0|”B“Đë×Ōš{¯ĮŖęwVÚÂF‘,ģ"’ŪDrF7|č aõÅTWc =NŸFēģēŅí§ŋˆCs$aĨŒŠO==…\ܨĄ‰ÚžEisåē\Âáá•‘ÆFAŽŋ_jtČ ECH8÷¤Rø‘Í[øēâK¸ čĶĮa4Š‹rsОO§ŽēXgīc8ÚãķøW‡5É,Ŗ‚Mu|ĩÚ잰ŽxūU§ĨčÚĩŽŽˇ—šĄģQ Ū¸*I~gmHQ”ofXņF‰>ĩ§y6ō[ŦņēOœnBĘrš›¯ę÷šeũÅäUί~pķČGm™ᝧ$uę{Ļ;ˇ‡ŋĨ_š˜ËԑT¤ŅÂŌ hŪ!ŨŋjÉp:ÕMP›Ną2C´˛Lą ‘‚ŽOrOjžŒ3ƒÚŗ™qvTH÷6e|ŧ¸H#É#œŽā[ŅÆÄŠHuõĢ„LŌŦhŽîÍ´e›n:žh,2Į§Lz÷Šč5šGP´KŸ‰YŖ$E*€~„öĒw6W7öÆ)dļÜsļQƜgûÜČãMi^\AWšT2g žœž•Ék˙tũ"á­-‘Ž'ą*.qīĪsĐ wÍRMė&ŌÜ~§ooá­i!–sĩvøĖÎIĀéģ’FqÎõķtžMJcÍÂ;y™YãŒ`įŋ ō{ékŪ9OZ‹oą-¸IwFÆPĀđ@ĀūuÉĮq{Ļæ,+ΘHūŧwüSŅģkšŒ™č—^Ž=,ÜĨŧŽCzˇ==GZķšá’ĘėČ`FCs•#͌đ1üģô âWØÂYęvˊ1‡UĪÔûާ=ņšÔŧŅ­|C¤Mwk!++y‰å˛ļđqĀā‚ĀīžÔŖ'īdևE{ÎœŅ†všā€ ?đgéũNEuū ´—UŅËJáÆL†$჌‘aĐWwbúN˛aËģ,…~ë/™ëŽüįuāw¯QøUyēlļā“$lwĐdį#œw=:ũETūĸ`›zœĪ‹ėÂįČyQ2—ÚrŲ9=x?^OáĪhē}ÎŽ×iģÎ!Mîą`ČŊ N[ŒÆŊâ]‰#šhIˆˇ,6ņށīŦ}kĐômCQ—Ęĩ2ĄšũŲØp ú‘Đãũ“DeîęZ’AĨĨާT|¯–dũÂX°,ātųzdúVŽŠĻÃqso‡Ė×ŗZĮū—vŦ69`¨88 rFä×e§ü4ĶíŖ]Ĩ8BcžĶĖôÄSOĄøWT-Õå‘įŠ/˜Žę dcĮhRBŦ 61ķœã āŽų‹­øƒGÖ´Ņ>l2’ †âŸ\‚ŊqŒņŠĖĐ5Ũ'Úņ͝ėlÖ7bŅß"&ô v¯Ëž‡ ãvÖÁËfWđˇ„oõũR GQ ĶaeŲæŒ´ •@n  šb#Ķ5Ûk@’ã[šČĖlEeŽÆ”1=ĘN}0sĪn˛I"WŒîFĪPè#Ú˛u8PÛJ'V6Îw3*’cõsˇ<œw'§ZÁÔr‘Ē‘Â\ÉĨĪpųŖxVr u'Ļ1×čĪMĒ`đŌÉ7ôûŒå,ŽØ8˜ņģŒuܸČqFĢhÖÅŲĨiGŽŧ:rK+9uyīƒTŧ/r,-5]NE‘ĘĒ@ŗ#ā(ĪĖ7u Ŋ2GĮŽŪĖėl.MĮu?,2Ãöui 8‰x{ƒžõ­°O ˛ŠæDXÆ7ā(!Į9Æx ķ’@kŽđŊä°čwúĶ=ģ\ŪJ-Œģ>Ub  ܂Nā|A9ރAŧMGč}æ*ļ8…”¤Ãæ“ķa”ķ‚Ė3Æ+9#HŊNŲĻ&xûŧã¯Ö´P<āg9ũ+$–h×ÉÜžũūĩ¨™(ŧõņYuZ6p#ŸĘĨU@ģ@ÚPJŦwÎâ3Ž”§rũæ$ã"‚w3|c ˇ~ēŠŪ'šGۄrÄū™Ŧ¤đžĄqd“EâN?1CˆĻfžJœ8íZØÖîu m8ËĻÅ÷[‘B°$rpsŽígXxĒî}Yt÷ŌĪ™ˇ÷žTÂ_/œdũsė*[ÔęĻęĒ^å­ōũM­{LŊÕ´“cgĒK§ģ燏…w9Œu r6“ëÚĢxgC¸Đ û'ÚŦ͔q…‚ kS$–bÎå‰éÔtõ9Ŧß다iļ—2jWÍō­ŧhÍ9ØĀ&_åQ’ -ÆĶ<Ģ]ęsĻŖ­ÚęWąíyRØ+$ ÛļŠtYžSž¸­UųN´Ų$ká€ōŌ HÁú ūÍVuŊ3UÔ$Q§ęâĘ2`" O¯&ĢhŅĢx¯Äķ(Ëyļņ1;ąnŸđ:]sMÕī¯BÚNb‚DUwY˜˛ÛWĄ$`gˇ526ĸ­=Ōõ/økMŊĶŦĨŠúņîfiKų!|‚¯N‡[¤å ë\˙†,¯,lįŽņ›-;4Jōژü odã‘Å$ĖëģÔzܐ™ÎiXãé§ĄįéÍ&â1Î ̜ö$öĨüę2˙/ĹâÂĮ‰[<^iÛĪ0&´#U9e9Ž;bŗ­lÕgķ āÎ~ĩ¨Œ‘*cvΖ5HW;yÎ:*Âm`wWšˆŒã4G펏éŠĻÄX+ĩđOi›@b7 Oī“Č=*UĀ*N3y˙ ãu\ģŊ‘ĩ î/tá3bÚĘ@„EĪRON„Ö‹S•ŲluÖ÷][‹›Y’hß;]pôã͐*!p͙KsœČŽwžQđ՘°‰ÖŨ@ĸgĮīƒ€+zMÄķ@“@†Í¨YÁ2C=Ô1š(yIü*YŽėÚ@į'éë\\^ƒVģŧŧŋžãsÎč‚2Đ äuíøTfÕä’M Öá…Ŧ¸' ´€@āōG5;ž¯§6۝5†ŽˇzŨŧQnKb ¸oŊkFūū->ÂKŠäXmã™ØĀúž•“ĸiÖ:To¨fyKrNrĐpzVŽŠkĨe-¤ãt3Ŗ#l<€xãßŊ4ûœĩTTŊ͉ĩmT€×0 äüŌĮúõ¨ėõ‹BōK{{¸d™qHÜŽŨëĪõ? økÃŅ /­â¸„ ŒŨ´s;m'kŸR õéZžˇĐ<é¯ü?į"ykąHí9ĪVĪčOáZ¸Ŗcšee‘w0ĮĄëJsš¸ŌĸČČ#=1RíËnŨ€GŨŦŲhI ōØ`¯ŠôŽkYÛk}öŸ%íģÆąÆR ū[däm?PũuŌ w*qÁ^@‰ã)Œ}ũ*^ÆÔĨĘībŸ‡aō •žĘöŅË6øācū­p1ۜœvÍVņ _DöbÁ.dÅʙ܀JmsߌgäVēČ6dא2kŸņJÜÜ-’A&Ņ%ĘĢ'ÚžĪŧ`pį“Ž$ÕEjEYsIąŪ¸Ôå–s¨Į:Č!Œm‘Ŗ#~X6Ā„€0Ķ×Ŋm\ĢÉ„i*pcėÆšī ÚMiq|ˇ“E-āH„ގm4‡īcp lđ1ëÉŽ–į洔D`Ä~îpyĒ{™-ŽB›Y}[NKš/ÍĒ1 'ąT›’Ųãœ×ĄD6ˆÆāO c8?į5įÚ ŲéÚõ†ŸeŽĨŌJĖō[Û@6##%ƒ3´p+ĐĐpŧįŽN@'đéô§ [3žÕ×H¸ÕŒwöWOäŽÜFîdãîķTä˛đŦ´ÖRBģIĖąLŖķ#Ščnäļŗ¯%eB0ôādŸŠ?r&KjAÉ“ rÄ|ŌœôÔâĪJ„š•õIž‹IQq6ŽėĐąQ*˛ļĐ@=Ī~rkVâúÂŌéōh"i72°MĀp[{h-mã†ÔyQĻU1˙×Ŧŋ‡íŽ,×\xesø™Õ~č<yåMT:Ķį—2I×<˙ŨX,–3@ļË*MnNā å䃂}ž•Ô‚Ē@<ņˇ˙­Åqž__jwrčÖȝ J’Hą”\3”ŠĮ? 'Šë¤“E6 QŌĒ[™ĸ=RîKM6I­cV¸,ĒÛ ’q’}_šëWZķŲ´p%ĀRíxŽ|˜˙$į=x1[ˇV1_ؘ. 4o‚ÉœqúU3āũTŦ€b6ŽF3éĪŊCŊÎĘ5(ÅZkSZĮjéļų‘ĨũØũã7/Į_^zķXWöZFŒ÷úņĶūÕpX<Ō* 00¤¨=09ü+ Š&‚2Á3ŽßNĩÁjG†ŸTŊˇ“Ä—pÍw+´ļŅŪ*ŽæãvãđëZAurē;ģ+Čī,mîá'ƚ5‘8ÁÁįôŠōģäņœUlė’ŌÖTgt†1'Ÿē1×đĨž=›Ä%’"Ë´:uSíI=lK<đ[ –âeŠ0Aß#ˇl†$ ŽĮĩTēŋ´Ķ§Hî.そIU’Mœ zœw¨hڛ’~集ĻĢk}üî‘ŗ—ŽfÎKŊ0ryâĨņ*é‰bƒTšHÎĖ3Hû6HœîČĮŒäx âŽZjļ„ō[ÛŪ$˛ÉŲķ?ŪĮŊføŖCˇÖ›OûT sŧėķA¸åÔŠ#pßđį‚A ¯*ûۘšfŋrķ4ÍMԕÆļŋ“dƒ‚>I‡ĮUš­CŠIŠŨĪwĄÁĨ$‘ŽDmŧōe‹;2vé××5Pø2ÚÎ-t7TĩčĄHŽzđās˙|ž9$šŲđŨŽ“em(ŌĸžŨļ[yĨrbp9X§‘ĪpAäb­ÚÚksJQœp§§^”؇ĘËÎAíÍNH=‡Öĸp0ÛW¨íY_Bėr_îcƒÂ͉&Ûæ8UP9onŖõĪN•ã. į÷G%TÉĪaųķŽŸŽ+Öž%éĻōÂÎå› ÅY˙{SČ9Æk“‡JH!I_Î/#áŨ˘b6ã#$ž8ā}kĻ›IÍ]œ\‹ %Éw–ųA'œvõéųŠŨ†e’$ĶĄAu,‰•tBNßšĮP1ƒŽØô­íåģ{ˆlØ’Q[zFsĶv:`Žyāįņč?˛†aļž\3Ü(Û)Œ;#fã'SĄ=:%%Є>Õ4ģŊ=dŽú%IŖ 3ąH$“…ČÉ N~•gCÖĩm1e†ŲwÂį~×ĮČÎx>Ų?JéŪ]#\ņ}¤Ÿ˛ÚÄYä,ŽIéŽĮ1ÎxĀĢöŪ#đĩá–ßėūS !Aāœđ2F2r1ųņš›ŨYĄ¤‘Äk÷PɨÉt—ō\\u2*lPߔ–Üvã…Æ;sÛ§4&ĮPw#QBÜ$qļqŧduÁķž˜ī‘Ģž‡.ĨW÷.mĀŨ+‹ŗ7ãxŒcą=pq\ÎŦtVa‘iva™nĨëŒđĒzzŸÂ‹)hÁģáŗ\ŌĄēĶŪ ‘`Ėw c’:ûú}xȝshvQ‘äc??’œŗs×“ĶŽ? ņ7TÖ<8ĖÚuëEŋīFFõú•!šëÎ3îkĒąø$P%Íũ”×7)Âąu+ģØ÷õ>øëœŠIlZ’zŗēģ“Vփưũ‚^$~˙Ž™ãŸOĶ,hvvqÃl›¤•÷Ž0¤õČôÉ^NFr2Mp7ū<ņŠq/ŲäkhŨzFā:u<ûdV=Ū°—¯pē…ōģãĖ‘%`Ī\Ųî{ÕF‹ĻŽ{t^ģŽŌT›ėR+ļã $ÎwÁĪ ēôĘø‡Ã°éf9æ°oŗēŸ´,/˜ÂŽ&GĘāÃžœä×1§üCņ6Ÿ"Fo…€[„zuČÃu÷ú÷Į[cņbÍŲmõ{\y܃×*yūg\ây&ŠŧZá-Nį@žÃZĪî'$ØČįs‡ˇ$`zAíŽî}JĘŪâHŽ/-Ņ•wėyUH¸ė2?q^$m/ÅZ4—UürM%ŒĮ‘$nžĢÁ€FHęļtZM_DąÔb´Š[é“)$F ‡9ėŧŽü} ÉucOĄ[\Ŋđíú´-4AdÁŦÁBō~qƒ’ŲRĄą×åöŽ.æ8uK˛ĮZø~Q$… y{×ä1ēOסZëĩËK 6îÂKŲ..ŠÍæˆĀŒnXČF`’7įœ[1YÚÉz/HũそŽÅ_āã8=zúSRåBjėM?MŠãCk{Ņä3Æ~āÄY6ņ¸dœāuãč§čZ/öV û'•ĸPH#üÁč>R6ãÅ_™Âm {vĒú5îŸs¨Ūy´Šũ˙7RŖ˙AŦÛfš&n‡WŪ“Ō¯ų .āã''§ZÎVJí ČĢĪč׎;įÜTŠ4Dč;ĩ3Ėx=…gÆÂ6ų† čëÚ­Ŧƒ*˛ ‚ éŌ¨HŖ­Ú_]iæ •¤e &J•^øĮËę++Lđũ֑Ggylb/ēV˛ČÞûŽHúcúģŗMØŧĻēōÚ`JZ$|œ‘ëíYvĩ}ŠęZ|7bxîŧ×ÜŠą6 99ÁĪÖŗ{ÔéÔt´zԉōä›Ę+ÜŽā|§dÜ:Ž úU#YŅõ{ģĩĶ/-Že„'žĐĀX¯Ė8#†8j‹_đî›â}7ėzŦ-$jÛĐĢ•(ûqœ‚=z*¯†ôVđü-dˇŋhŗ‰l­ Ģ"¨9Ë(ŗ“ôúæĩVąįŊÉ´RŠŽx•†h&OŋŲá˙ëҍx–=>öh^HWiU ėT¨*îAgô¨<7tŗŪø†Q˙ABŖ=r°DŊųę i^kvœžmķĮœ0K˙˛9526ĸ“•œn7ÂZŒúŽšķMwöœLę˛ JƒÆGëøŠč šŨ‘ëXzЧc%ÍĩĄˇŒĘÞ~ņĮŽk¤€¸RFzā÷β÷Ū–%bYw)ëI¸œsõĀϟģĀĮĩ(' qÍ3+ ĖTzĶ÷{ū•d‚84… sšbąåąÂBĀ{qŠ˜8'ˇAK°ų`{šv^œcĩh‹š™†AÅJ‹…S2ŌâŸĩŽŪzԁŽĀŨÎiģ—?Ĩ9caČĀ=øéLUĪņ‚r@?<’§đ Ŗ(L˙účØĘŨŖœU‰āãŽų4˜n{įŌ¸ąĸęÕÍÍÜړZĮĪ!AÎvÛĐqúídFäŒgĶųJāš}žōßNc•žRWÄˇņsÜŦ=ũë[æH4kũjVąģŧ1Eb‚7p?Ö7Pqž~]Ŋjî•ĨÜčœVĢuö›;€F6íØáIõôž,üg Č|”,āËGééVėˇ×Zą]VŽ=ėU•‡'ËoCõĻk8ÉĢ]XëÆDAŸīcÎsYVū)Ō§ÖMKŒÜnd åļŌÃ9‘Ž i”$|Äį9ONk–˙„gR1ÄËŽÉ ŽâYŌ5ļI7 ŒüŨūuqÔķZÔęâš7VÚ'žzŌ…Āã¯â˛<;ĨOĻiąÃrË-Ā.du<]›=ŊGjŲn.N@ĪZ‘ŽčãáÔ'ŧšuY­K‡d ci9ĪŒĶ‡„5foíųÁc–n~cĶ'æėŽĒ¨.WĖ…‹Š$nÆ2AÁũiĖAëģ9÷℮u<][ŲĶ.tëũMn'’pâ-“¸??ņŸLâ´|AmwŖ\Ãe0ŽåĶjI’1øÖ‚€ã§ĄîiĖį{'ãĻzSŊŒjÔueĖĪ>˛đEŨŠ$‹ũ‘ytWį{ĕžŋÆF{gĩtÕņēėņę0ÅöU…DFŨ‰ˆäõÁĪnĢŠÂ7,@#ŠrcĄãNm˜¤=UŠ0pAëO`š;¸ČôφrN ¡O¤, čGŊA@v–#=Mq>-mSߨÖĄĢ‹Kų!{mĘąĢ3$€;diÆqŽšīRö:°ÍŠŪ×*øi-ßL•ĸ1#yĮ+…”ŖĄnŸÖ›âxä{*ÚŪŪéŽwE$pŦ aC1†'?ĄĢÚ4Æč\ŗÅ/å[˓;ŽŅΝAÔÖo‰í­.u-0]ÂĶÆ¯#´^_˜Žsķg8 ?J¨â/ÎîŦMá­tg¸‰ĩ(ībŠ%!ėE.A8'%‹1ÉäāŸĻõĘG$Ĩåį=†=;ũ+đÁŅCŪdXËl]crûHŠŨĩ”ĀáŊ;q[Z‰t˅ĩU{%ŧ•nŒøāŠĀĒ{˜-ŽFģŅåņƒéV†Í呚hcŧĘo”í;œvĀÆMwîID#8įž˙qúˇšõŗxaŒŗ,ļ>Iˇ`xl˜ü ņŸJėa}Ęģ“čLQ KąÉøƒJ›RŋyooRßM@RĮ#=øČĸĮUˇŠ4ļĩÕ´äXÆZؐ~{ęÅîŸĩ¯Käö{PǰŠâGa¸ž==ü+ĸJĻ#f#`%mßÎŗ=%R *3ü‰t‹{čæŊ–ņƒdVR™ Ŋ†N=*ÎŖâ m&qö¨ /”ō—P¸EB3ԂI%@ōGGÃNöö7“Ldû,æcœã#üI­Í?MŋŲ%í¤7'b†XÃm=Į͊¨ØäÄ]ČŠ kpj—WĶŪÖá#¤…ÜČŲ(r?ƒĶ5Ŋæ|Ĩˆ-ƒ’W1íšÅĶgҝ{žŨ¸WēhōAn@ËzõãëZŲ ã*)ŊĖ2ŧMpļ–öˇ s5ēyÂ7xūö zĒÕY|ycbŪ)ä‘qŗxÂļ=Ī#ō­]GNÉ‹“ Ã"ĖŦFádg¯­]¸ˇˇēˆÁpŠņ°Á^ß_ĐzÔÛSŽ3¤ ”–¤É+É•ÚŖčzg=˙Ǐ››66ˇēkęZĶg¸•Zi9™Y˜ļŌšÚdđIãģD"3ĀŗÔtíū5ÂjZ…äšæŨõ´ķĨy`HäE˜[;ļ_hŲãq'o>•q9$Ķz†)ĀÚWøNî¸īךE-°“€sۊrí›y`üũ˙úŪõKYē{möxŸl‰ +ØãŽ´™Q3Hš†˜‚šëŽ}čU.ãĘO4 E||Ø güôŽ$–‘ŸG,wxY›ĖɃ‚Å”–ãĄ^€s[^1Ûęw6VúŠŊˇōDˆŪ`rŒ dĨfŲÚđŌ„LĶÖ5É4—ˇ†ŌĘkûێc‚<.Bš‹äÄU#ÄÚļ“ ÔÁí<É<“ØVYÁ^zķéū5O[đŨļŗqk4÷7væŲ]Wėō˜ËۜŸø8öŦ{‡V‘MkÔֆ$-ōōÃÎīj`rxŨŒŒuö§ŗ|ëō¯~Ō€G&4ņĮŊKØŸĢivúĩĢÚ]dŖŸŊŨčÃЃõ¯<ŊģÔ4U­. ļkhÜÉŊ­Ã…BĮk gæ9ĀÎy=3^ƒĒŪũšŲJŦ„›Ī˞äû >Āלj:ī–˛[ZG´’y’Ī&[Í ŒîãŽĮ8ᐠkȓLŗ}}q/Ú~Ųr-ü،‹ÂšĀz> u\‘GáĖÎÚ׈ VFŗļcå™ŲJîO+Ž™Į=Æ~ĩË[éˇū&žgŽ5xwaT ĢlāđsôĮŋ>†æîĘŪ]FåĸXĶ‹˜ūc I8Ã~8öųtvDŖÍõ-:ãBWĩ¸'Ī]ĀŲ ģ@ĘãÔqĮ=jønŨL÷7QÛÛž[ ŲëŒôíČüĢjŪîĪ[ņtKâ)’ÚS|A°`Œ3ĀāžũJî~Īá •Ų čøŦ2"8ūĒsiXoŠĖKđÎ AļŋF 2w{cķ?‡ŊV—áĩâŨ$gæXHr wúūuÕ]YiīnņZk1ŸŨÉuæ!úäîũjöĒe&ˇŊ¸‰æˆ•`Üsč~ŸNGĨgí&‘\¨įeđopŦ,ĖSÍf#ŖyĮãŪ%øz.-9žTd™O$Ž\gééŪŊ "Vl9]Äcõ¤K˜ŲÖ Ī*TõŖÚHŽXžikāfDī '#‰~^qœúō;õĮB@Ë˙„.î/›ku*cōČšÔãĄ÷ÆyÉâŊf]FÖÜūōe)$Øq\Ū­ŦŲ\†xæąl‚1"7qž}>ĩ¤jH™F'™2ņmF‘ĸ?Ū*T1*OB2zz{cœg"îĄvŒ*ü­Ī—‘õÁįŽ:įĶŗ•>ÂŋŊĩ´t/‘ōœá€<X“Ģߗk _ŪŇ1ÃsŽ9'ļ:˙õų­Tû‘ĘfÚË-„Ö÷ÆZH%Yˇ¨8O?NÎūÁá9Ō_Ä “wK:°é‰ã¸Qųח\h7žoØĀûEō&ų`ˆōĮAžÜdņÛô^)¸ĐüqĒŦVÍqhRsɑU×äœ.ĩ5’ĐqvÜéü_# ģ„hKYmĸG•AÄYgũãmėŖ?LƒÚŖø}pWHŸIœâãM•Ŗ|6p’û†;cëmbâÃRĐ^öĘé]š3F~ņ|˜ĮvĀ#c€+ĀĶŊīˆ5› G–c†6nĸGUÆâ{ļ9<žŊsX¯„ĢûÚ>¯i=ĐI­0×Qp§pÆ}˜qüģÔÚĖ,ķGæŖ\¤KįĻtcœîĮBNIīÔņZ3\ô"­  ō=k;čimIŗ–Uįkđ­P E€>îqXģĖrBâ7v­`[Ë*X„nĘ0''ŠŠ8%p=˛yĻÅŧ•Ęž ņd¸4BĻŠĒØh‘‰oeŖž…,IÆz{Ģˆôųõ(--ŸíLģÁ‰rqœˇtīMÖ´;FōÎKyã`ÜÍæ&đĀËßĨgé>ģŌnÖQŠ#Û+3Ip*$dŽO$ņRÖˇ:â¨û;ˇŠÕ¸;{gžF3éP VܧB;Ô­4xŨƒĪn˙JŽāÆUÃTgФr^fš-aä —ÕŽŸīl ß"´īŧ3Ļß]ũŠ•ĸģVMËtČ<‚˛|,ĖÚ,ümß}vŲĮŦīYēÍūŊĄ*ØĨ؈0Œ´.í`ŨČ9āŅ#l4g){ŽĮk¤YK§Ų˜g•&“{ą‘Wh9bzcųV€r0ErūšAĄ[†yÛåb ü9ų$vĪãĮsÖļȤgšëP‰ŠĖîËŪgËJ,IéUP'ŸĨNÆ)™8“7LŌ†TsŸ§J‰Ž)“ĘyŪņ´øÍÉ'“ øzÔKæîu`JTŽõw †ÚŊAOōœ÷¨Uˇ“Œœ×ĩ;qƒÆh¸Éy!Ž3ŽqH§ä]šę) í?/<ԀîĮQ@ :q×§5 V#’ëMäuŗiuw§Ë­ßŲg’=‰2);y?–GĩKĖãĢȟšą+ÜAclŌÜËQõ/+ĮâxŦ7ÄÖzļĢwgi#L°í>jįĐį'ņŽīÂZ­ĨÄskV—ZļfMĶ[Ü `YJãqųAį#¨Ž§Ã—ūûeâhļ˛ÄqŦ›”¨8Î8<äg‘ĪķĶ•$evÎÜ. pHéŪ¤É|ĮÛ5r6Gb9Šqʑו™H]탌õãÚšŊqô¨oŽėÚęí“cBė'œtëšéYx$ŒÂą/Ŧ5 5nėŽáZ%L˜üÆČ$÷#jdtaÚSÕØ~ŠÚsÛ4Út"‘ËÔNĢÅOo%Ξo­,Ĩ´]ÎŅÜŨX‘ģ“†>šĪnEtF-‚ÜįYž[†”ƒŊR՘ėexbÁcÔŌæŪÅ´ûwˇ!ÖK¯4NÄŠ OæäãīWc€G9ĮkđÜZ3ęņŨZę5ėqh.$}Ã8$ís•éÛ#Üņ]ŽrƒiāsĪjRÜkc•×ašßY[Ũ.îŨnŨU^ÖWQįcĄ×ĩT“SņU܍é‹nÄķ‚=HbqRę:Ž‘â‰å쉺,”uE%1‘ũ*tņž–Øm× …Æ C¯įYŖĶ´’VÍ#K:f”#™ŧɝüÉķ–8īøw¨đĪ­døœę‚î4¸õ°ÛŧÁm‚íg@F@ūī^}ĢHŊt8kķs>mË~ПEš¸G‚ĪĘōbDšØ2qģ%Ԓįõ=ētƒ .0:gœW!āŲ/ĄĢYÜI~‰‘oœ<Ŗpl䏧ëîk˛>Ö91Ԝīs™šŨûŲÁ… Wy$’\íQ‚rqĶĻ?Įŧ×ī<š¯­ZØYC/—(Ûį`@%y÷ëí]<ūJˇ¨Ū~U?ٜ{ô¨Ĩ]< q7ŲJŽ›x'˛įéPÎēSŠœoæZDË1Į#œG×Ĩq¯‡ŧ5Ĩ‰ž˙Ä…š˜šōÖäTļâm$ŒöŽé† €§ŽGC\ĻŖāxūŅsŖMöké•Ä‚TĮ nHÃdƒĶ‘ųUÄåžŦėČÚ ‡ŽUģ´†úÎ{y1HĨN:˙*œ1ōŅX|ð\ŸŌ3ÆŌ7vĨ‚n.æD~ĐČ\Ų+į{sĶ9ÁvĮÃö:TŌËgB$A&âWƒœķ“úÕũįŨíR1Éî:`T>ÆūŪ¤“M‘¨ ôųGĩXŽFA95U_’Hz*pāĩšæƒ4‰Ö኱%=†+W°´ž×'Õ¤˙CŽc›ÄąĮcũ+]'–PĢĪÆšŊF{Ŋ#\“PlˇVķÛ" !Œdg+CÅK:0׿v5tTŅĸ†DŅūĖFādōH,Ą<ū5¨š._$\Ī…aqu¨_ÉbÖQ\Ȇ8¤HĀ98÷ëÛ­tčˆX°aƒÆsīB&ē´ÚŊĮa™@ŨԑÅ@䯤îĀųņV`’Hõ ˙p€ģx^1בM˜õ+ŗ ĒIHč8ÅCcŒcÅ,€•ätÍ29ĶË\ÅĐgãÍIâ’$rž`äŗí$įļ6ãū\ŗŽër‰žyÜšŽ9 …C÷‡˙^ģxb˙Ä>#AåØŠ.‚T.2;ƒĶ'$VօዠßĘ*ˇnfx€ÁĮFîOzŨIEYɒxoD‹CąĘÆG#.íÆy8ãˇJÜqŋ–'v;ˇ 0š,įĄ¤ķ }ŊąœŸLÖmęim ËĪ iú™-< VL–V€'ƒÕzv gĩe/ÃĢH)Rä”ūĻSų×a€ Įw§=kX՚&ĐK0rû’iXŽIãęÃc¨8ĄJWŠF ī‚ü7¤€÷—ČVgRyí—5—¯†,¤’æÛX Ûp˜ĩ•‘NáÔ^Ÿâ5õ2ĮJ‰^öÜ\ŨĘęōä1č¤ō]Ī<œ ƒ/ƒÂVÖŅCSŽ)Ž“1‚Ibru 8ātNm5!ŽÆrøĒãí%!Ölî9Q‡‹¯*ęr;rÆĢ^øŸQK?2Sk,HAŨG#+œ“„üŧgĩĶGŠūÃûBO5´õ Åâža'D 6Œž7ũ0xčė/. ˇŽ$­ÎĖ…yÚ˜–P|qN*-†ļ-§ŠĖŖ{CšâÎŲvũᎄsū{VŽƒ§¯ˆĩck,ĻĘ6S$@Ąo3 #sü]?>y´agoto™v´č歟5ķÔ0N9:㨭BÚ÷HĐāÔbÔL1ĩÆ"TŖ•ÃĮ§ŠčH9ö­­dBzžcā}"Ņœ%ēDī•Lķ€súÖĖÚ|pŲũžŌmÕ ē¤jrŦ\cĄŽcMø“ŖšH¯VōŲļ‚Ō<<ęHIœŒŽõ‡âī\ꗖvú ŅYĘūX™CGžLŽA8Ũ€qß'ŠįJm›9$ˆo%Ôô­cSūČTiĩ–g‰đŗÆA,SÕzŽũųįŗák;+Í ­rđjĐĖŌ\ …$ŽBsœáÆĄÔU#PŌõ}_ĘŋÕkkųûSRg—oáÚ\zƒ×"´wÁ7Œô‹9ËĢųęÍŒæ šĮđī-ƒĐŒ}MJöą1ąf_ ĘË$pGam<빎!…ƒ°į8^‹œķƒ[.‘kĸŲ}šØ6 ķÛī;Ŧ}˙.ÕŦFÜ|~4Ō7T 8Ŧš›V4QI܎I íŨœūun,°=ōOZ‡åln#ŠŠ„EãÉ`)=†‰ƒ~ūū•ŽA1’Ctë-Vō Ē8­C6TîUQĮ^ô\C€F3íÍ8ąVÎy=j$•CP:ã9æœÁdlļ ĮĨCĄ­ęzš]Zéúg’ŗ\,Œd“¤aBöîyëƒTôëŊb×RNÕ¤†s˙•MŦ"TĀîb=Ē@FOŖP*Ō° 9_ƁČiĄ¤ĮŨ4šų$Ž)Ūn8ŨjāW'œšëH8ÆĮ| ģ§đŸjŪČT|ØČąuŲ#[ũ*åFÛĨŧHÃd°õúĶjÆĘŧ+~ī–ÆėFīŊČĪSš‰äIâŦ!Ūšl uˇūĒpL†#PpŊėQ$*zvíOŒü§§ÜԒĮ†ÎNGŒeqųĶæ82ƒ´`‘Ī֔Éĩˇ6GlžÔŨŅ‚J=MEwmíģEp‚HX`Ą gÜSlŨ™aXT)ĮŸo”°úķÔW7Ą[7PÔl„ōË ž^ėđķũkĄW&.‹ŸLs֒eT‡#°ė ci8n=Ģ;û*Å5 /Å´j˜2Mŧ‘Đ*Ķį 1žyĻ ‚ŖĻzĶD UãwõŠÁãŽx˙"ĸÚ€¸Č=ÅHA<įëHtaFĪ8n•ĪęvŪĸëÆÛiЇo9”ĸŧĄ}ũÆˇØ§ Čī\~Ĩ,°ë÷MeöĮē ™HâŨāđyā{úįŠ™8vÜ´ˇĖŪĐėäŗĩ‘nA_Ūą ĨöĻxūcë]ėúÅĩÍ´V$ &ķ;T’ŧ€Áž}3[:s_Kh ô G ŸnŊĪjĄâ Ã¯ÂąĪu•J? iQKĐÄņÉ‹ Û!į=iúŧš–+m>EŽiōĪ,#U‘īČ˙ëuĒqI­i:…§ÚnãŊŗšqB(Į§lõ˙#žmĢtã>]%ō:”ųK/äz<ˇRsœœS€ Æ{­<€,=9éUdrs dp(D'?6IόÔįšõŦŋO$:=Įû%ŦAķģ˜.xúŌeAsÉDŧuK7÷vâbp#. “Qé×:Œŗ\ ûhãE“•`w/Š˙?•sđøIōą#Ī,¸ûåņÎyĀĮˇëW|6Öæ˙LûCOŖ'–ėyŽBūįĐOSąĶ‡+äÕŖ RĢ#ŽúUā/E#< ÷ĒŖ‡Îâ3ÁæŦĻ<|ÜĐr&Z‰˜Éģ‘Čb‡ ķ†CôëMˆŗš'=Į§˙ޚĖĀg<8Ī˙^ĶļĢq Â䌞œô§,¤ų” {¯áH0 ƒÔ÷Ĩ2dxĻœe_lÕK÷ !ëČū1ržîzõ¨.ÕŪ!ō‚AŨHElîųIP 0D6œsėi Ŧ¸;xīÅ7Ī }ŌA<ƒę!O#ą5‘Ų#ĩ;ĪbĀęOQH푎€iØHlqv šVˇDNrŲî)RMۈŠëC,F3QČĻ>ƒĸ„Ší’8ĖųüUĻŨyemíZá^ŦXƒŸ}Ęqė}+ŠWŒžũ)é(ų@Ī?­ ƒW8‹åē˙„§Kē’Ũ¤Uģ’6rQ˜2‚F?šą‰ô^ÕŅëVsŨZ¸‚9%Ũ‘4q°ļߘäŽ8ĮžkTŦ^q›ĘLcvÜqéB0€ÜŧPؒ3´Û!đíĻ{1Ku†D2ÁëÅr‰áHu+A5ü°C *@¸PĻ"6Ž@\ä‚?ˆũtō(p¤ąärzSV é+Å›¯˜Ņ‚ŲĮ^•<öcqšå˛x{JmJûL7ˆÚnƌČíēLŽd ×, Æ7s]”ž˛ŋû4kh ũôJXۏ•TõR9aĶĻ0rFâéZ|w˙kގ 2¤– 6 īę^jņ C¨ ŠÖŽS} QHå.ô=BíÂˤčŌlDÅŨp: á}9?‡\VŠt3˜.îml[ȗ) ǐ0 =C"Œp8R0k yõŨN ¯l/a†5—ũŧÔSŒ’Gņr.FsUoSņ{‹ˇ‡!%—$†*YG!w€zĶSb˛ķĀē6Ą0ŧ^ŌF“QŽ8ہøw­]#A˛Ņä{ˆÚIndĀ3JAlvQŽƒŽkÂ6BŠĨzu=Î:ũ? @ë¸)=š˙ëTš6ZŠCĨ,§¨īžj-ęFI9ĪĨK!VC§Z¨ Ąl“×#-TÚN@įŠąFA°ƒ‚2ĩšŌeöŖdų to°Œ6W§z\֌y×ņápgƒZNŪ™;‡ Ö%¨˙JŪH;@ÁĪAZÂuCŽrųæ"˜õ8ëœb“xNx“’?:T āä^´ÖŦŒTpŖ8Īzh^F.ĻÚ˙ö¸ūÍō ¯’YÆíĮĄ^s‚*ž—eĒ&ˇ%ūĻļŧ(bØ?0?ÅĪoåU5Ÿ6ŸŠÜēCäÂģ-œ`;œļw('ĻãV´mz `ː–-ĐĪ‚ž€ō:´ēŗö‘§ĸ7Ú@Pā~ĩ‘âIÚ ęr.˛đFKĻ´MŖŌąŧZ]|/r‹÷ĨhâëÔ<ЏũjŅÄŲˇmnļ֐ÛĮō¤Q*(ŨŠŊoūŦGãPË`sĶŸ×üúU¸Ô„SŽztĨ!Äq$7‘šCĮ ã§j;ČŨči:.wqíPĘŋ„dũ1B“’{H 2sמ”Õ%¸_lõ D’sˇįõ ƒīC:%ΓQ…Žšč[å=qé˙×§ā>ŪÕ9;#sNVl’Bāã}­ ¯°É`:Tås„'wZž}ĪsĐTl™aéī@-Ī?ļļņ$‹4–wJmÖWXħ%°Äq‘Rųž1Aå‹+g8?Ä==ˆŽŅ­Đ÷ĪÃŸ§§­GÖ/ŖŠ9¯Ë}-ö u–+‚c%T{WF6¨$´ŲmÁbØÃK(äšPš>ų§kԗ4Ž•‰1ÔüØ=ę&Āsœ{SđČG˓¸síMÚšÆĶŒZ Į:gæëO^sMPBî ÆIé@‘¸ī@ĮŨōqÜVEÕôöWĶ$zUÄ ¨o6ŨG>ŨzŠ×9^¤Ø×;ŠkßbÔ&‰ÄxM…QÃ/ĢnĪĶžĮFR´QŠĨ_Ëm$“ZŊžÉ lĮĪõo,į5—áíBmBĘg’U“ʝ‘]TŽå`ãß9­!Ė€üÁˆ÷Ą2*Į–M~ƒŽŧävŦO‹–ĐĻ[VœOž=†Ëgzö鏯ĩĀ@2'ĨQÕė_PͤĩI’&fB &ņÃr228õĒ[˜ŗG}b_Jú“K[` ˛Gˆ$|ÁˇÍĮ9ŒúWQ´ā¯ãÛņí\ū…ቴZæúkÆē’UXÔļāW'–föü…tL|‚;mĒ•„Ž7_ÕīîīfŌtØĨÂ&•ąÛķĢKXhV ĢmtX夘ÚŋÎ~¸Æ==?SŠuĒiZ\˛'‚fų„c>ā:ȗÅßis—ĻËrŲÆâ–Oę+#Ō‚•HōÆ&Ŧu[I˜ÔxįŽŧÖ¸ ĮČëéXžš[í!Ϗ ˛4ÎX"<öūš5ē ØëTŽ:ÉFn+ ŌØÁPvįZUPŲQ‘œŠ6ã éNāÜdÕēŽũ§4,—ŗÛ4JËûŖÉɯ§šžŋK‹Wū֚æ(îCĮ së×𮛑Õpp8ŨĖ BûT´ãˆœU n”Ę}=éNNARŊ Ÿ•åŋŲĄ]Im¨N8$fĄ‰§ryĒ÷ö ¨ØĪi>ī)Æ#Џ|Õĸ͑ōsÜV~ŠŦCŖ@ˇB’8LŠÎ3øûP\9¯î˜káßĀŪD:Ķ5¨ÆKŸŸĪųÖū—¤Ã¤Z”RŌLįtŗ0åÛ×ŋŋ~ũęü&š' Ū>AũĶd~ĢúVˇą˛ÛĮˆ’O,1ū.Î1ĮZާ]Onãī+L‡'#úÔžpTäú#a†<{U…T)’šīÍ9PCš™Š¯=Č=ĒÁ‘7($ƒ÷ąQÆš† ^iUAÁ ōާŦ÷Ī$ōzņHd“ĮŒT˜D8RĮžÚaōŲ°0W¸PŲ rŖÚŖ$8Æ9Ī­,…]ŪöíJŽ02r1ÅŲ_9Ü9äüšĻĒV†zÔĖQ˛HÉÉČĻ R™U?Ŋ@v`)ÎĶ× Ĩda&Đã¨ãõ:ĸ†\.r:‘ÍHP*Ŗđ3L#BrÜãwŪ–HCnŨĀ$æĻ@~f ÔŲϟšĐž#úĐM Ãl+íÅ"Âp7 T­„–$mî3úwȰ%Ũ“ĶƒúԇpHŽÔų˛äā€õ Ŗ'å88Ã/ôО§ Ü: Sã9 ‡'ŽqŽô0L¨ŅąvÍē”å==銀Öņāu9ĢL%$|ƒ“œâ¤ ”ÆĐc˙×ŌĻÃ)o›6ĒTđ nsųSĨƒĖB$ĩi‚yÍYM¤@Á>§ŽÔé3”1펕HE$ļMüC€8ĀĮŲ-Ã;Ā˙jŽļW%‰'‘Uäi~m¨$r1B [xʒ"n˜ëGØã$+ÄųpxŠÄ„¨¨ĪJ“w*uëE†Rm>FĪ-Į˜āķQ$ŽŖ<÷­VÉMØ=3ÁĻ…fÜÜõ&˜Œ_ėīœķ ĪüûŅ–ĘÛMÄä=WƒúVĶ# žBžjCp3Žŧä{Pb8p[ČĪ_ÂŦĢ2Įn)ÅPGPxĻO#žx¤Ã…‰ žÂše+–,€i‚2€$ŸON E—Ũ‚ sÅ ú2EŽ–I5> °\3ā`gÔŌĮ+#ȑ wÁfUÁcīNRNI81OŠ3€3×Ĩ- ævĩĮdļnkÄĶŗĶQmJŅ_5Oô5Д}ĀŠÄņ"šŅ" ímJ20yÂŖˇåōĶDŗĄL—,Œ qVÖUāņÎ*¸~0000(g*8  –ƉÚQ…%ąĪįLfô?^õ Čä¨FR:Ti Į!—qyå.ÜO^)åĩb#éžŊŠ ā;TF@H_N”/1ž  CˆČëœÔD9$‚ŋ÷Í.æãˇZašÃۜdúâœÃíH †&•˛XũáüēÕĸÁûĮRz A˜íčģHš§Ą ûxũFj5,F Š“8=; Ą3×Ķ5–r.âTŽž´ā_?(įŪØ…“¯gĻDGųēžjÊ/¤z”Á’äc†'nM;ŠÄ@œüŦ2:R†*r[œsƒRĀFĨ0đ1Āīõ V7N>ī­.āU˛:zŽj5“’0zŌoBO,qր%Âgœc¸¨Ė0<Æcp>}œūtârĮƒHc•üh)6‚(a„7”ЁÎ[h'ÔĶŽŽ7cœã4˜pŖ¯Ĩ į8ô ¸Œw@ įžcŒĶ°ĀQŒúŅå¨-„^ ĻC€§ž=O­•ÉÁ§ųEųr:đãNō9ąĖŪøFŌæíîí¤ō.YË30.OS´đzŸÎĄ†ÛXŅŽ.'6Q]Å.Å"Õļ Āų{ūÕōãå?ˆæœQœ §ļ)XéŽ&v垨ĮĐ/ŸSĶÃĸ¯ī*…ہž3ל{÷­P chQĶ=iÂ!„g9Ž´đ lnāgŸJ j>i9"%VĒĪs@lဠ÷ę;RĀ7zúŌî;r¤į¸Î3NäØV ¤d`äsL;NĖ9<õũiÛˇœ‚G 4Ÿx‘ōúŸō(¸XTÚHų=ąÖ•H˛ŧsÍ"``ß8Č᝭‚õāâXE(Äe{ f›5´f14I"Ģn]ūĻĨ sģÔôŠ#,[뿁ĻÖÅŌtįQžĘŲ^bSΎzšÎÂÚÅ-bĢŋ˜Ę3Œž§§J°Ŗåė? ˜ĒPTФ_<ÚŗljÄWqĪSĀŠFÖ@ä9Á$S#@¸Ā' Š‚†RėôÅ&ĕ‡Æ I ĮaֈĶRŖ9ŠĄ‰A‡ pņõ§1U Ŗ?įš@FČ, 8õĸd¯ī^†Ļ‘€'åƒĪŖÜI9ũ(†ŧxSĶ=§a8éÁ¤yp„d;Å(.G+Æ8#‘@Æ˛“ÉÜ1Î)1Îė¸8ūHC8įéŠ~ÆX}hąōå93‘RäoUÛĪ÷ēŌl §Ŋ*¨ ’hč˛W$3ØSd#ä€H*CÂcۊOáÎ=Į ˇĘĘI#>õdzg“Á5jE`häb˜-ŋxįžxĸã!įƒķ`ŽãH¯—8\€*‘âRģU€8Å"Ä œAÁ=鋨āępŸģ?Â{SË1Ã3͓FܨV|yĘ¤Āžĩ4Kœ`°÷Í# ŠÛ×=œ#'ąô¤2RØ@īŽejņĪ6ĩĄ˜āy"ŽæIĨ/â'P[ęXt­ ÄĮČ4ŽØL8ëBbbąÆ8ķúŌÞįŊE’GZ”…eį4ī.séHWī.{ņŽ•'˂q×eIęxČŠe ÛĀų6:ĐØŽJ÷§g§Āã~r9äĐī^¤ú́âŖb\JÅc)p~đÅÛĶqõ5hĀ’]š÷Ąƒœ Ãˇ8ĢL€2H‚3ĮJC#düŲ§<{FæsĶĩ7å BŗqÛĀMä°sëJ%;‰#ņLÜqØ9čM=:œ’O4쐌†#°N[=če˙žh,w…ĀÍ ˛đ3õ¨÷.íģ‰?Ō—Ë$‚°íšjFs‚ÜS¸ŨÉ3Í/ŪéĪšT*’ˆ>™ &~cÉĮæ˜Ŧ”Ÿõl<Ō I&7ĪqRmbÁˇ cĻ)ģCm'ŋŨ ,5‚t.rhhûāĨĄ†&3ĀéRų|p ûf€"É q“ūÖ)Tîsė3M(.Tä |šČĨTĪđžO÷¨Ä`dnnyĻ’Á†žVąûģ‡~iQļäíaéČ cK6>ę’=ąMvQ€CŒÂ¤ķ$ÚqÉ=ņM%Ęņˇځ˛ŽÆ=4.[úT¤1"ŽGCŒū´eK6T=)ˆb¨įœãœâĸîÉ=ģŌ°S‚đÅ!@ĒXį>”„éHIŨÆsF'h ÎE!ī° v!îäg­)•s’¤cœ†ĻĒJīûŌ…Áįi÷éHDžtlFr7q÷zũi|ĐÆHú įÁČ\væĐ2é@I0™v2ėíœäŸĖęCđ8uęO  Q´§ļŠąæžxįŪ€NÍĐúÔ Xõ`ÜĶ”‚ŧĄ'<ž´ œ;1ķpy öČ tT'f~îŌ“<6Üp 0'ÉC xĻ€Ä˙#"Ą!‡I$ ôĮ4ƒy'$×ühp¤vQĪLĶX9B@^sŠ‹s‚O˜šĪøR™_˛õ=09  Ã0ä ķŲŠŪcã=1ęĩæ*7c¯9RĢg9Qž˙ũjbuž<ÅãÔĶ„ÛUz{ŽC°á€ĮlĶ|ęĖ2Gû"Xž˛đJ¨ü?ÎaŧdŽšŦÔxĪ>ÔüäepØ÷éHfģ†)ƒŒZÁÆpyÎėVj0;‰î1SyĢŨ˜ûf•€ļeÜĀ€A=éDŠG<ãESYˇ6ļGļq@‘׆lįļ1E€ļd 8{Rŗ9RsõĒžo3~xŠCŒN;Đãnė‡Ĩ/Ęô'§ŖĘ€HŪ'˜¤“ŋ8õ  ÆŌzãpdSž^FG'ŽzUe'$Ŧ€û)G™ŋ“ׯJ,øŋ\õŠ7*ą$ ÕBĖ[ “Į8¤WÀūĸ•†hVFāúŒ~Ėķū5WÍČĀn} !\Š@Z HĮ=ũ)ઐÁÕTƒÆŪõ\KŨXéŒĶŒĪn1EĀ—(#ß„ §ī ˜ëQ‰Ác´ cŋ˙ޜԜ†ˇ8 9 ŗ^ôO ųâąm ŧˇÔīg–ũį‚rž\.€qŲOCų ÔYōä^¸ÁÎh¸á ƒŸĘ§ÜģNīä* ”n$‘‘č3@¸a›čiÜe™pzÔEƒƒŒā…æÉÉëéūMD¯¸äŠÆ1œQq\Žŧžj"Ār¸ü)Ĩ‰_—yĮ@ žbŒĢō;Ō¸XÎØÛøŠ‘P ģ˜žŨ3@‰Nr3Ëvü)ęÄmeŒ°ŨÎ( #…HÜO9<āŒT¨"-ƒž;úÕxįu$­J$fËÎC'ڝFßΔ Ø8Ŋ*ļé‡ Ē3ߊ“{íĮÔS¸€6ŠÜښPG\{ÔE¸lŪøĨ-šHTũi\ €zĶZE Š9988ܓô¸ČŸ^h‰:ãĄ ņÅ)$IëČŌ9Î1éšQķuÅbpŠoˑĮj,IÎ:õÅ `7~Ō0 įžzHŅ\œāúôâŖROœT‘ŽrøÃ7Ū9Ļ2O-y œ` pŽ@ÛúS™ ų>ũqG˜}GįHuH9įđÅ)ĮŊ5{SŊiÜV‰œw4ƑW#8"ŪŖ_žiÜM î‚ävPîũ)ũqúTĮ ĸáaģĀ“ōũidrÎp$õ8Ļ?ņ})ÍŌ?Ĩ;ŠÃF 8ãŸÎœ-ĐäûŌC÷š•ūđĸā80)r?‰… ښŨiÜ,?*Î0˙0´Đ>öĐ}ųë@û…ū:aĘ87ŽXûwôĨ ŒgۘŸwņ§ˇŨZW < ČĪĐҐ#&ô_÷ķ¤§ãEÅaI=åŽ)ĄĀpĮ5)ûĻĢÉũ)Ü.wgœzЉFâšvzH:SŸ§ãEÂÂqŅ}ZBpI9$­8t¤OŋEÂÃA`AŨlSrĮlcĩ'đ/ã@§qØvInĒ=9Ļ6s÷ģ÷Ķ[­=žčúŌ¸Xi<ā`“ëI*y / Ŗ‘†ĄūøĨū3ôĸâHn~S’“Ū›´°ÚB‘î)˙ÃøĐßuhL,&FGô”§'÷Ŗøŋ AÔũ(¸ė/<ūŊ)š\`ôūtË?Ƒ~í‰2¸Ā÷íįûŲú‚j/áZ_â?J.;%v}ÅįÛ›P mZũU ÷GŌ‹ŠĀT)<ŸCL •l1ũiŖŠúS×ũ_ãEÂāsŒ9 uāPTã!€čGjwđ­ ÷…&ƐŌÎlņ†Å7Ėl` >Ÿũzs}ꍾõ+ŽÃōvW úyXĪ-T?ÂŋZ;}iÜ,8"uN1ÜRǁŧqīA˙^ŨĨ¸>´\njW9íƒBFŖî{RE÷ŋ ˜ôĸā5CmāŽ?ŨĨ Ųį*qÔt¤_ģ@ëJáaFWĐČãõ§nĀÉLũ[4ŋÃO꨸XDÃ!$ūD͈A${šQ÷ŸéCt\,˜ ƒ×­7$ã$Ž=)ņũډžųĸã°āÅAÃ0Ũ)Æ\/' údđĨëĪŌĨ°°žhČĪJrȃŋ•-4Ŧ\,+’Ėdp6ŠBsČLsĶm*ôo­*tĸáb2`rOÔR2– O~Õ8§§éEÂÅb]¤ūž¸ĻsŒÔ‹ūąiëĐũi]Æ œåEH 6 úäŌËū§ņ¨Ŗ˙WøŌ „ >ŧŅ„S¸eĻsMOŧ*įđŠÅlnS´Žyč)YFbNáČɤŧ?ŪŠ[īūÄ[ ûHûĨŽëKåĒ!E^ģAééږž~†ĨtĐ#UE$lŽšéKĀÃāš¤GÖ§_ēhC/Ū ‘žQOĮ9Üüvǰ˙­üķwŧŸQHdcåÜrN­"#y`ōwzã"ž:“ūY­Ф|§ įĨ9›ŽĮjię~´åûĮé@ė ¤ įwĨ"ĄčĀæžŊ ũe* ĮSÁīOVÑĐcŠ?…ž´ƒīšåˆ~•R{ Yæi$ļįĢg­\n•Yžņ ,˙Ųleptonica-1.86.0/prog/lyra.036.jpg000066400000000000000000003575611506303110300165240ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀÉ"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ķÃ…1¤L‚ÄcéU™˜ō¤`Jāļ;×)čšģ€+üŠ2Ģžj¸fÛ´œįOŨԀOĩ.V5%bO<)uÆi¯pŖæĮ sQfįõ¨2wrw1ëO”^Ņô-yĀšÆzS~Đ7Œ2‚K)üęFãŒķԚ‚d:Œ°Ō+œ F÷ž”ą‚ØāJh –é۞ôŌ[ MÚâŦ€É÷>˜§yƒ%•N3UÕ\­(rNOˇJ§ŲaåŪ6úTqšR8čhYˆ x‘\Ģáē–ÆGĨŖæÔļŒqœúqNWÛÁõâĒ4ė°dgŽĩ¸ēÜT{6hꤋMtĄNÜgæ 7Dã#¯ĨDŲÜ@Q—ī֚Îğ”p*Ô›ĒŲinTŖāZ…äv`wsP!ųúwé73ąäŧzSåBįlV|Ŗã'ō4cbëŪ™ƒĐô§¯Ũ§b.?Ím™Ąį4É+ķōcŒƞIu'$éڕų™cĪt8tīIˊ2pØ'ŒÕRNpIÍ/ĖsŽ4r öŒģ&Ûĩ! Ŗ‘P#ȀÅHįÜT#äp{ŽN)ņųŨÔ˙+XŽ{– 퐂{f‘ī2 SéP¸VV5į$š\Įģš˜` vĨĘģ™÷'ĮË_”g§éD7ûŽ%œÔj•gBÖĄ Đî `ķŠ9PœälđņnQÅA-ÄqņÉ=0UŽiAÆāÌ %ÜQrģ3ÉÉÍG&ēš:žéj;ŋœ€ëV<Đ9qŒįõ’‡s*î?Ä*Y&ō÷+|ÄuÎ)ē}…šjh×v ‚(7H;÷ģVY™Žr2PŖ­JŗØ‚){2ŊЍ$FCČ9šĨpßwŸZĖkĸPœį֝Ęî§iÁO qRé˛ÕTôFŸËŒƒŸLSÚø9õÁŦée–UqŽã•đŋŧ,\äƒBĻ'U†e(ČP9ퟭP… W~ĀÁŠ|ð;ũ߯“…ŠSē.î9<į8¨Ļ‘HÁāÔ¤*Hëß'4ĀęĀ€WĖā{ j æ‰|ĀĀ‘Žzi,dļöĒŽîŖq\cĨFdcÆü¨˙8ĒP1ö…Ĩœcq~üŠ_´ŒpI˙>• ¨f˜ÎŖųqÎA¨íT ÔfŠĘœ‚Ųõ‡ˇô§¤ĢģķšÎY†G ~įĩHīШĀlIKq¨]y”N2xæŖ3ŖiÁĪéÆ@Cœcœđ¨ŲŽė+qÉSĮ9ôŠQ÷pß1`qū~´Ã*îÃÆ{jģ0ŨÕ[$ôÉ˙ SYÁw!;ölf­D‡2ę…tų äúÔlnƒ‚1“Uƒm‚ËõŠ ÛÜŸcO–Âį-+•lƒÅ?*W­g ‡!ŗ€s€:SÄĀ&͏däbĨĀjĒ/ gŽ™ŖËÜÜOôĒ 0ĀNĖį“ÖĨ[°‹ūŦãړƒ¨‹MĘr8äuÍE:ōŋ> AĒŦˇí’1Į4Đí‚9>õJ¨ĨQ"Åš,˛žŖ×ëZ1N’ŽTõę=+ŗ(ã֑%hdFØaØô?ZÖ(ÆM=N‹žxÅH9ÅS˛ģŽî<ķķzš€WpéíM™‰‚)q‚)Á~\:iÎ(°ãđ§ãĸôĻŠéëO ķRE‘ŖPV°õ[Ą5ɊŒ}ōŊĪĩkΌčÛ>ņR=¸ŽirÍŖcŠ<ŋ…&TUÉ—Y˛@ëIä)8āJh“i{Ķ’L“ķÖmČč\ŖŌÉĀāƒČ?…(p­5_æČ`ę1QŠz!Yqč)8Ú3JYK‚åëQ<ĮĖÁ^qM&ÉmDC#Š:UŖ­pB‚ĀOQڕËMXx›įĀA΍Ĩ˛ŖŸjĒķ’FßΜˇÁ\âĢ•’Ĩ’ÉlŒÜ'^ôŸgˆœqÅBėãƕf rwzûŅĘÅx’ų1D;ģԈâÆâœŽÂŖY‰^F:āT›Æ2ž”šc\ŦrG¤ūė “ė¨Ü.3õĻFꥲ S%ŸœFyúRÔĢD{څS‚PJ˜k°#§ŊH.ŲW•ČīL’HŨN:öĩ5tL”G[^)•RsˇG¨­kĨŨãĀP@ˇAÍs Ŧ[ņĢvwrBáYÎß~•ŖMėĖ_+ŌĮE ´Îū]ž äRËGÜÆ0y隩¤_Cė]™ĸ'æPÜĨhCĄN×M=­ØžT7ĖqŽ9čxüĒ=Ŗ[ƒ¤šĐŦsõĸļ.ėæŽāˆ¤URÁAEWĩ2öLãV9p#ũęi†^?ÚÍvVūģ—^Üķū¸˙\O߃¤GŦĮüj}ĸ;}“<ũ’~K>qīK— 2 ~&ģŖā}M['J%} Į΅đFĸrŽGũĩ'úĐęGŠ>Æ]üĀİ=i§$đŸNkž_ęQŠ˙‰:ßŪlâ¤˙„CTP?âK HŌöŠl?a'Ôķ×F8ķېÄJįĐg­zđļŠ÷Nn;įhĨ˙„OSˇöMļOAíë֏lŨžvĘȧ2BϘËÛķ^’<'Ē:üúU˛ƒÕˇŸÖšŪՇÜĶmąĐ|íū4{QûÜķqŗėZ“É`PkŌŖđŽļĄągnŖĄ۟֝ƒõ׍ļļCœKr?:~Ü_Wķ<Ãcr= +Bā’JņĪZôŅđ˙V@uh§¯ ų?^h˙„Ye9ŠČ¯ĄvŖÛ ęũĪ.dųz‚ŧcž´žQ @õ¯Q>Ö0ŽÄǜ€Y°)ãĀúēS˜wu O?Ĩ?nJÃųžUå’ĢÎ3ČëH#l}áú×Ģ˙ÂŦH@0é[@OøTkā]fŨvFšr)=oę):ãúģîyc#•H8āū5ę‹ā­sĖߡNĮO¸˜|Ŧāļ<ķüCúQíĮõgŅž\ä•ČΏ¤ ŒœŽžĩęqø3\ũU Lōw°(đn˛¤–dŸYŦđūg”ŲĮ­v˙ëŌŊkū}UŋÖCfsũįjŠO_íŦô˙\ī#úQõ€úšå$n¤ÁīĪã^š€o ´˛\ö$‘ü¨o‡×DÖV9įøČū”Ö >Žy Gžæ”)1Ÿ­zÉøwx’6Ë;Î|ÆԘŪŋaŸ°X ž’7˙GˇĢųžXĮŨæ“ŧdgõęKā=WR+ÃĸFâˆṵ̈ų’Ė)āÍŌ“ŽÃĖōÖc‘ŽŖƒMē‘šõÃāmPĩ,JÔî˙cø#XWâ ,ŽG ķúQíĐū­~§’̏ÍzøoĢ ž1ÚcūUüŠŦ™öÜ.ŊŦCęōîpĸ¤j8 åX0¯AO‡ē‘c˙ÔOûy?áJ>_19°ˆŸ{Ļ˙âiĒąÃËšįeš'=ũč˙€“^ŋ oX YDO§Ú?øí$ŋ ocûļ{ņ×mĀ˙ ~Ú$ũ^]Ī;ÄqgĩJa•%ĢģO‡:‰˙˜gSŪī˙­VÃ[ōZĘÜ{ŗ˙ÄŅíūŦĪ7el䃟Ĩ9PĮđ¯K 59û, ?ëé¸˙Į)áVĸN|ģ`:˙ĮĶņũ˛Ģžį™āŽĄąīJAĀĩémđ§P$&Üįūž[˙ˆĻ?Ã=B,ƒa¨ã‹Ŗūx‡ÕåÜķdi-å`ÃĨnØßGt…qĩĮUôŽ´ü3ŋ-˙ Øvú{ođ§Åđļümhí­âpįéŋø“š~Ú đŌîsĒØŸlxņ]Wü+­YNsĮ¤í˙ÄT2xY‹F¯žģ.3ÍE/k}^]Îl ‚züRƒ´ttKā}`)?gŒëūáā]]°v(ãœÎ?øš=ŦEõyw9ˇa×<úg­PžŗŠî=ĘvČŋt“úWd|Ŧn˙–|uÄŨ˙īšGøwŦ˛äĪõ˙ũ5V!õwÜōō$Y62ĀņŠ‘K¨ÉVüĢŅᎭ9Rá‡@'˙ėiÂŊ[ #š›˙ą¤ęĸ–÷<đČÄũĶ‘íAfûß0?JôSđŗSSËÃ˙Ī?øíđĢĩBŨ?ëĢņ4Ŋ¤GėeÜķęwņxÅ>F;‡ĩzü*AŽ|ËûüßüM=~^€šˆ׿?üMŌ;Ķ•Ŧy˛H ‘zœĸČšF¯B? î$ŨÅĮûGü)‡á]ę7É4,ŋíHGôŖÚDQĻĪ=)´ũ}č †# õ¯@o…÷ęw„¯´Ø˙Ųjœ˙õhŸbD_ŒåeR?\QídŅĮā÷ēQĩ '85Ô§€5ŒŒÛ0˙¯øĶĮÃ}fFb.}d”‘N ãšSޏŠÁxl×Z>k}–1˙m:ū”‰đĶZ,ŽN3'_ԟ:bPhåI1&€O^MuMđã[āˆ”‚q•—§æ)˙đ­uޤB8ū)úÕ<ČŽVqûIį9#Ԙ›IUĪá]Šü9ÖAéĸ_ūĩáîŽŋƒžĶõŠķ!8œ^Ö'iSģԃ @į$}Ev'ĀZ‘|Ĩ‰î‹¯Ũ[ÛåÄĮ"F\iã“ūšyĪãDšˆÕ04ÅĪ÷ŒÉŰ]ĪHhĀQķ|žĒԌģTdķîNkͰ|FΜšé“:āūĨ}ÄÃhėJ?Ƌ‡°_ĖzH‹*åĮŠ4å@cėGÖŧËûÄ˅ûļy˙\ŋãAĐԜ~Š[Âū!,¤$õ- ņÚØĮšče##%”w5.OŠŽ|1Ŧ… Ånä❸ŲQ7„ĩáĮûää38üĐPÆ=Îëb†+žŖŽôíús^~žņ‘ŋÉcŒníũ6Ōŋ…|B§SÅK@Ŗ¨+·ŧhÄfW#ĐŪŋøĶ‡ã4bkĻ?û=+ėWtzp‹ čqĮjk.:€Np yĒiž5Ø $ātí'ü~žēw07ųŦA$?oûųJäû4z'ČNztŠļ”ĮĨy°ĶüaąT,ˁÚūŲOOŒØīÍÎ@éöŸūŲM0tmՏĩS {ԅ@ā~ëΗãFĮü|īrøå?ûƆ ˙h`dƒpü~!ą@Ŋ—™čL‹ÜāÜsQ’ƒœāƒŽø¯>:7ŒĪĖ.‰ę>Ņ'øŌļƒã, ÍĖįŧ”Ž5Ew=•œĮëQ1Lœžúם.ƒã -yœãū>äÖĨ˙„sÆåoĐ˙OniƒĨn§ /…ÉöĨc ‚?¨5įĮÞ20ÔS$tš§Æ†ÔcûĶėŧŅŪ#Úy ôRSŒmΝĀ ÆMĶXˇ\zVĨmƂ@ŸÚãûŪc`ĶVcæBĘāāŒũicÜ3é^|šOŒ¤Y5ÃæļHõśÕNĄ˙zv˙ M˛}Ņč‚HÕąĮ^ônMØ'¯ÖŧķûŇjvų˙ŽîiFƒãËiÂ=Œō…ŗķGĄbؤi#a‘ōļzuâŧûū˙§ Ģ[&}g“ü*/ėnÚuWŒ‡ûCãšve~¨ôs$* dķž´‚Dų¸ĮæĪáīņ5‰‰ôēzqĐŧZ8]N 2~ĐĮĶëL~Å÷GĸīŽúĨFnŊyôz'‹LoŋU1ë;…*øwÅĖ ŽŗnĀ÷ķ[Ō{/4z˛ &›æĮ‚1ęk‚xĀĖV?ŧŋ”h/Ubu[v0ķ˙ŽŅdÆũQÜŦę¤üËŗ°î?ƟįĻĖîČÁŘfmRÁ į˙‰¨ßÃ~.#VŒ?ŸJ,ƒØžčôš‰ˆ9"”]G¸Ãķæŧí<1âíb5õv'ųSŸÃ~( HՓ‘Įī›?ʋ ö/ē=Žc;cøš„ŨBĢÁÂ˙Â5âLsĢÆß?øQ˙ÆžBƒŦÆAę|öĄX—GÍĐē‡ IĻî!ŸŸõŽ ŧ1¯UäxôĐ˙ÂÚÖÃæk‘į#ŠcÆ9īڞ‚ö^glncËr3ÍKö¸J‚\ vÍprxcY ¨Öaɡ?:„xCYÆžŠ\+qF…*+šč_j„‰'Ō –å7IĮŊpژÎī1ÁPÆ “Ãēđȏ]Œŋ`faÅ Ō]Ü=Ę(ÆZoÛâ9éÚ¸AáĪHš:Ü;‡o9¸ŠWÃē䁖Mb*NM=ŌkŠÜ>Ą*Ã>ôÕÔ" >eãšâ›Áú™8˙„që—˙iđnĨųܓũŨßãJČ=Ÿ™Ü5ü$pĘ3H×đíûĀ­pņøBüœ7ˆĻÛq?Ν˙mé˙ÂArO`UŋøĒ4gũã˛]N¸fsO:…š†ūÕÁÍá+ûtiŗpčŖ$ßãZ–ŸõáY˙ļÜî\áwŸëNČ=Ÿ™Ō}ĻĀŋN´÷H&‰°ĒĮ¸Æ+ž_‡zŸ k,āōÍū5,~Ömß)­žœŌĐ;2 cJ‰á}̐9ÜF/ŌŧƒS€Zë/dsČô5ëZ„šÖ”Ž5cžßē.Ē=kËŧPSûpēžõu ‘īšŌ“ģą”ĶFiP Í‹'–ĸĩą=ģAēšDA˛,qÔũkŦƒPŋ*W0*’sˆ°}ģ×Ļ_ÛÂZ)ķĶ+ ĀúVˆņD ũđƒÉ˙EsŌ°kRĶąÖBëj'î˜÷&0i~ßqÎæEã€bš5ņ 2`Xß2à Y:˙ß5au¸6 đ_Đf˙âjZ1Đh]ũī0mô?šˇWAp×2ļ{”_ū&˛WWˇčĐ^āô˙C—ú- Õ­våāÔ9ĪüšMĮū;Eƒ™›I}9ÜL§ˇøRų˛0ænIĪ@Ĩa ZÍ9ō¯ųéū…?˙N]rÔDWų˙¯)ŋøšVÍ˙2N›ø€?œ÷ų,˜'<…N+5Û}Äėŋ˙ĀŋøŠ”kÖęĒLwĮžM”Øøí&‡Ėk-ÍĘŠ"mŪĨ”ANûTĖ yƒžØáY?Ûp?ēŧāã‹IsųmŖûfÆ!ŋfôû§˙eĄ æ5 ķ˛\~ išE%ōzgvéTãÕ"“(°^ëķZČŖķ TË™|ŋ.äœg˜ØĖņCBšl<ØųĪüĶ•å˙žBj“_LFŸv[ûŖf~ŋ{üj3ŠÜ“Æ‘~Ūų‡˙ŽQf/´SŧË!•ž^1ž*P÷’cč?Âŗ[Tē ė]CŽĖ8˙Ņ”ŅŦ]qüzĐņ˙‘)Xw5Iœō$99ČéüŠŋŊũáĮBk8kWYųt=@ûîƒú2˜úÅöF4 ũŋõŌŸü‰E…sO`|čŧĶĻ'SĮjĖŊësũƒ¨˙ßČ?øå;ûfėāP˙žāã˙"Q`šy^āg2zsJ&— `HõŦöÕîÉt-Cūû€˙íJûRôš˙‰Ŗ×Ÿžū9NÁsHÍ9RwdāöĻkœc ‚=šu;ŧčZ†=7Á˙Į(ūĐģÜ1Ąj˙ˇ˙ĸš ..)$ { O2bÃ,zķ€9ũ+;ûFņ~_ė-Cũø?øí*ęwY˙&Ą˙}Á˙Įhŗ ĸô’ΎņŸöA¤8^$ũū•DęWX˙&Ŗ‘˙M ˙㔇Rē+Ή¨įũø?øå 0š¤˛L:šĪĐR‡¸ ŨēāUžēãUá=Æø¸˙ĮéÂúä6?ŗ.3Œōņā~;¨°\´LŽø2Ÿ¨Ŗ1ÍĘųōb˜×ˇ9 4ųąũâéũ Ąû^Ąü:pÜzo@üųĸÁt\Û)'÷Éüi­ Ũ¸†Æ*ŗ]ęxi°û˙¤˙/–œ.ĩsĻÂĢëöūƚ ’rx@=FzŌ _1Æâä¯LšO´_}ãcĶÎ˙ėiņËv~ũ¤jHČũîGįŽ)…ÄhŸŊųŌŧŌ›› Ėŋb>ĮÍ\gßŌ‹ÉČSÎsJBŒߙĒÍqxGÉhšô3`~x¨$ēÕÃļVģOvģ#ôh°›.áĘ[¯­&ÖŸ3?ī¤nu’6ũ‚Ë#¯úc˙ņĒ šĐØŲ˙_˙ƨ°î^ŦxųÉĪRi€(R\įūĩLË­m˙“Ÿøü~?ōFĪŦ†æÎĮŌíĪūŌ§`šĻv8bj]ãoÎGĄĒF]_wüzŲā÷ûKņēI¨ƒūŽØ×˙˛Š,"Ę~éÁÚÜ˙ŗRīéĪŊQ/|NvیwËsúRI-ųO•­Į¯ ­to봃LÉŨĐū•D˙h¸ųfļSÛ÷G˙ŠĻĢę Äų–øôō۟üz‹¤šÜ2Ÿ§7s˙Į˙Mõî?ƞež8Ėp{üĮü(°/“pÄdzŌÁV+úËgÔ– mzeKcõŠ.§Ë ­‚ã1ū*‹ ‹UĘüĮ=sMaÉGįYÉ&ŠŗũuŠõÉŋøĒ|m~ †kw>ĘSüh°H9*?3I€Ę€jŋ™z!`öÎNjŗHą+5¨˙tOūÍNĀh¸ųGëŠ@ Á˙>ĩžFĢÚęĐ}`c˙ŗŌ0ÖBņyfũz1ĪūD§aŽė‘…ĪALËpQŒôūUCÁ<ŨŲāĶĢņĘnŨXđolņ˙^˙Į)X 0ĮøG=Į­?°Č8šŦ°šĒ˙ËŨ§^ŋgoū.œ?ĩÜÚsĶũņ˙Ņ`4ÆŌā ĨWīmũfmÖ‚o,öô#ė­˙Į( Ŧų¯,Ŋˆĩoū9NČ>F˜’ į5]ÁŒ1ŽEgËkĢČ›Ë<âMŸũHęÜĢ_ەôû!û=AĄwsn?* ¸`?!TÛTo‡=ŋŅŋû*hƒS 3¨F~–ø˙Ų¨˛ĄšķĶôėŨĀJĪjؚų>oH#õ Ú_vßry˙T¸ĸČ BÜįqN(§ ÉĪn˜Ē ŪņžųÆ{,kåCZŨŖp¸ôH˙øšv@_)–āŽ*E…ƒd`ū@Ú\ã#UģΞÅ˙ÄSÖĘá[-Ģ^;Ŧ_üE+ -˜°šÁüi†į;sČëPkŽ ÔŽ[>X˙øŠ Ŧä†mFëƒÕBņ4ė„HÖšfųGëM†Ü)ÜW¯#ÚĢIisœĻĢv>Ģ˙Qũžį<ę—9靱ņYí‚$O™†ëÔԐ ¨ė~ĩž–7 ÚÛ pqôQA̓››Į‚ŪsĀ⓰&_1Dθē€iN#MØÎx=ģõ5’ē 2Ũ‘Žŋk“˙ŠŠãļ†ĘõcI&),Lå%äÁ Ŋ7ŽŊ¨@\2ųŠØ‘ÜdcđÍnxm ØÉ *HBāt^¸ĪԟĶŌšŗ*‡Rc<äƒÖēO ¸’Ö^<܂~€Đ×ãjo—ōõ9뚓9_¯4‡9ĀúTØf}õŒsÄČp}2:×Ξ=ĶĶOņ$ļéŋÃøķũkéIÆä?7jđ?‹$~(„žŖÉüąZRŌ@ö85Ā#ŸĨ?Θ ČÆG4Vä$} ’¤^•gËXđĒ0Š) úôЊo$ŽS[Žį'Ú¤`Îr3éH‘`sõŠ6ė;ķÛĨņ*G9ęsRĸOJwA˙ o)1ŒeÚyÛíQ€K ŽŧTģ~n§9æ›ĩWœš@3`C‚~”ƒk¨S€ôŠ>ķ})ž[c§#Š.šÉ'9Ī­Hå9<ÔeprĮ ä—¯|Đ‘Ā ˙!ųRŠx=I4ŠŊŽîqųRÛēgœ@¤Bqķ`†é‘Aų‰éԐĮ<Фƒü#¯4ĶĪAúŌĸü¸Æ}iÁWŽžôÕ#ÉéÎMr2iPb<˛úâ›ģ8Ȥ íĐ(Å8ąØĶ3ŒâŒ’@švPGCēíĪ|âŖ#$÷āį­PJä u4~2:vę)Šp~ņ5 ÅũŊŧeåž4P9gpëYâÍõš­’ãõëĪĶųXŽķŽŋ­įĨs‡Į^UPڜ]3€ ëôĢkâĀ-ĒÚEœæJpzŅĘÂč×féH[(séëUĄÔ,ī!Û]E:âGķĮįRī Ė1E˜]]ҝSŠbdņÎå8ČČd×Má[…’ ČÃdÅ8O‘Æšp˛]¤lQŒŠé<'´ÛŨŽs‹Ãî-&4t ĀûŲãŦc“Đõ¤äqZ>ös뚔1’`G’Đ1^ ņxøHâÆpbÍ{Ė„8Į5á?~_ÂŲ˙–@ŸĖ֔ū {|¨į ĮJ)‘•+žzŅ]-sNÛņų‡˙Z§ Ų—Ž{ĶciĀëOUmśÛ=+Œč ü)­ČÎî1ÅHYČۀ­4 ã'qÆ2iˆ[aÃsOlš#=Í @ ~ū9%x4˜ ČFÎG>ôģÆÂ2iqĀƜôÄ\7\×ķ§ŽX’NF2(ô枸\ÔJ@ĀÉSj6ŒŠ”0#úSOO_Ɛ`ŪÆ€§ Žžõ&Iôô6œŒsī@ +ԒIôĨ(ĮS“īuôūO_ÃĀ6ļwv§c#q<¯ëYچ¯kĻOs,ĖŌŖ2´Q—9ۜ}áĪO~™“OÔâÔŦūĶ ČŠĖÉļA´åXŠv<vv¸Ž]ۜÔEÔg¯Đ võŲ’Ž_ņF™ ŠS/žTí…H,OôĄ&öiløų†qÛŋōŦm_ÅzVŽ Ü\ĢMŒˆ"ųœúp9÷ĮÖŧÃXņÖ§Ēŗˆä6ÖøĪ—`ˇN¯×<ôÎ YÛnU‹Œ€yŋ_qüø­ãCš§cŋÔū#ę ,vVÉjĄF ĢžCž„€cëž:æš›Ÿj÷đîšÕn<Đ1°H#ė:*ã=?ĮgG ˜Ÿv@÷‡Œˇ #šĪ æ˜QQ?vá@ŨĩņÎG¯NŊģ›eM#7&˖÷0ŧû¤ų$brüžįœõôįמ3'Ú­aU”€?)ĀcG˛Ķš5”˛DĘĖ#‘1čÃĐô™#đüÉU}Ëe~ķ|Ŗō?O×ÖĢ—ą7fŊ–sˆ¤ „üĮĖ÷=ūcÛšú #6‘Č1ö™ĪŽG=Ŋøã=OR9%‘Æ$tp0§žŠ^?úåŠå#’EAå"tÜpOV$āķí’Ávií ĩÃų—O´ĻÎv1ĐqĶķ8#<ãVÛ_Õ´ŲBĮŠÜ˛… !qæqĮ@rįˇQČŽq$jD āī†Hī´gØzš~^4TųríĨ} ĖG<|ĀįéĶ—(îwv?oŖ/ŦRoīŧ Ņۃœ“‘Ü}+ŽŌŧ]ĨjŒ‘-Į•pHÄ2ŦsĶĄíĀ&ŧqnI3[–#ƒ°å9Á ¤a–) $DnÜēŠÂōŲšâĄĶLĨ6Ą…Ķp# ÜžjԜާŸzņ=Æ:Ž”<Š ]B€‚V%—`†ä€ÄgŠôÅ~ˇ{Yņ t/Ã.=qÛÜf°•6#4ΈžsĮZ 6ãŸĘĸY¯=IÅ*:ąÉ$Öe<6HīM9ČÍ?¯l O™Aã4Ń#ƒšc H=EO÷RĨFøg ŽŸ­ ?9Īz~ Ú)š'9^O"ƒČ4ÁÆ? Ö^ĀsR|ģ†i˛uČ P1€É d1D‹“•=)ÎĖsŒPUĀa@ +Í ęp¸ķ“‚qրâzP"%ld gÔT¸Ã‚sųR‚xÍ.Ėāį§nh)@SœāinKdvÍHĀîäį͊ Į ĀĪ?Jn8Î85#ĻGĻ)›—§ NĀųO#´÷ÚqQŽ=1ŒķMųX.0AīĐĶ™A œ Ō•%˛prsŠ_ŊķŠ`7Ë%˛câŦĢŽ1ę(ā`’ 8ŗր#8'?Θõ`s“Ū§täsô¤ÚQBN ՁČĮĩ*ĢmĮÍÍ#(*28Į~ĸ”Žp}0ęĘ{ūT™qԞ1šV>@FOČ B‘ķ`ž˜4ÅR#<ãž)Ę6đ õéJÃ<îũ(AČÃj”0 œžÔĖ9#‘ŒS×iČõë@!Xō9ô¤EP~Uë֞c,ŋ)#ß4 ŨHãŊ1bœw¤Ø2yíŌ¤ØrËÜã’1ڀ"čzcņ¤<žxĮŊJbˏΚ@Ā{š…ąÁČqœgō§€F~QíJXäí@„U‘ČŨ“ęx§@ädũjVLžæ‡B tīLŠœd`÷Æ)ęĢĮMƕHf€´ģWØ_ęj‘,Ÿ``@ĮŽ1[žR–ˇ€íæãŒzlZÂDlą ōíÖļŧ*›FĻšäŨöíû´Ā• GCŅ‚ãŽig8Šsä?ãQ’Į§Ō¤ĸ솉jđ˙‹ƒ:Ü Ÿųb?›WēLr0W#ú׆ü[Īö´ū˜æÕtū4>Œķt|-ĀHã4WaĮĖ}`‘ˇ#֜ČÅ9HSŽŅë\q$Ō˙QNĪP?@ ÎO=&ĀQōãß"€=sC)qÃņM 1Œœc$úRĪ Į֔€z¯Ϛ~W+ŸĻ{ԛXÛŋĀ›==Ŋč'k‚_jtv°Ā\Ã&ö.ÛW>ūôæÆGŠ@Ÿ­?8é×éM-ÉéԜŦ889¤ĀAķČâš A^)ũų$M=rH#ڋyÅ9BzR¨^DW''žŸį4_Uąĩžĩ/|ÎĐŗ(‚“ÉŽ1ĮĄÁęPŌŽl­mŪÚ(ŪØDžiIÛ/ĩ˛w“Ôį¯<ŠĖņW‹4í&Ę[w+sq*”[uÁ#Į°9ßļkĮäÕ¯¤´xæf…*Í÷€č <āvŸ~6…7%ŠœĻ“ĐôO|DÃIkĸl. rã!{ üžŊ+Î..Lŗ´ŗK,˛ŋ21|—qÎBÃÁŌŖ˛F>PC0¸õ˙õÔë`]ÎöKdŗ1ØsÜĐc?—~ƒĸ1QF2nE!rÁÃ''9Œî`ņëڛ¸÷Œō27(9ãˇ9ĪĐũ+Ti20TDw‘ûÅ<õ*0FI˯;hÆ)6 ¤.āŽ„|‚1Á˙žŊt.Va2¸UcĮ8Ā““Īų÷회FJ` ܑĮųįķ­åĶ߂Ōå‰8;Ŗlōķ˙jĻm"G~^=•:wúø{`œÁĘsĸ-ĮįxĀī–ŋ_ëBĀĶ8Uķ$n™=†?_åë]ĶĻRÍ>ø¸—‘Go@û]ēąô;Ŗ—OÉÂL’ž…LŒŲ8=€úūRW0ŦaųM fG+Ī 1éØū==éiÚA9įÛˇæ^ÕŅ.šb_1‘´āĮÅžíĪsÛøqۊ˛YģŸ”dœ ŸöÛåū&äŲéķSæ ûĘ*HĨŖ$æ^Ä}:˙…M•Ap ä€Ų$`ãŸ@>™ã­\KFy÷ǐ’ö$ũŅÔõį‘õĻ?z’°S†U žRÁž™öĪ&‹Ü,6)ҟcĄÂėĮMÄ )'”uÍĘxTŒ)l’Bœt8ėĪ8ęxö‹ėLX>0sœ`1ôSÜķūsQüđāJ6”gan8 ~‡ĻGāÆ\‰ĻEōđdŒá9:ą ĀČČÎ:~ŒÕˆ@ķVâÖ_&`ß$’2qíČ'ž™8፤ë¸:œå‰fcģ#9õ䓜į=¸ŠŧÅĐ˛4k´ˇŒãÔ`ŽŲįI GĻøsƒē¤žÕûĄnTaN@ĀaÛ¨įîõéŒ×u †čŒg#Ōŧ ˛Iĩ¤0d€[hÁëŸ^ä÷ üŪÕĶhÚũń/Ĩę7„ŲĘ k( =¸ ŒƒžpzúqŽ+ ĶVĐÖ2ąë€myĪ9Ĩ9#9ë\•Ŋž¤ÚÔ %ÅĖÖHÛÖS2ėÆÂ6‘ԝĮ?u1í!IëX4‘ĸwÜŗŠĀãˇ4ģ3×49Å!†vœÅJ„r3ŸL AŽ˜ĨÆ*@&€IÉã4âpA#ۚOÍNČ$åxÅ!ŗ´ Rä{ rį$(❴ãå$dzPavåO4ÅFe^õ#į<{õĻcÉíëš3O=Šč0@ ųԐr;”ĒĮ uī@˛ Ł9īMuØÔĖš‚i­â9ÍA’ÃģSU\㚕Ŗ8ÛQ‘Ž9éÅÆ9č¨Ę9>ĩ‰¯G¯ĨŨ­ÆRŦhâxĨ“j¸ĘđŋíqÁ< ŸZŽÃÅ05ÂÚjpÉĨß7 ŽŸöîˇnõ\ŊPŽáĶyōĒNsˇŠjäRc!Eu'%˜q€p)ØũŲfžIĀĀ8Į4âšLí<Ō¸Žåd:RÛ›P3€2jMŋ)`¸§cåäū”Ķ Ųl{w?­;œ}īŌŒd/úÔD°ķôĻnA&ĸeĀÎ{ՆRäķJT€yŽ0*…ų°¤úöÅY)XŽ={~uЍÎF:Šëšbā€äûS”œtĨdrx'ڑ€8üi*Ÿ\“éNÛšÁÅ@­ĩŗR‡ ‡§4d+€§æÆqF ų8ŖwĘ8#Ž?ĪŊ4•Tˇĩ RPdžM6DNŪžõ&Ö;Æ=1šÆwØ´ĀŽÉj{qŽ€“Ī4¤)ÆS@î;‰HŒSœ(įhĨŸËŌ€„rØéÖĻōČ^}iĢ“œã§­=ļí˙kր#ēíč{ŅŅGĘ3šR1QNNAī‘Ö‹€Ņ‘}{Sņ‚29§*íŌrĀŠéEĀåV•#Üķ÷O_J_—ŽúĶ™|ŋ˜ŊN5Ją'h†2C†$Š9žc]'üLėÁ•Yāz—åųVīĘ;}{VMúí Yų6ɞÜü´ÄÂ4o‰Ũâ‡9ôĨPxČČĮPi‰¸#Œdš~1„+øšPN #ā{ŠSÛĩFÁ˛"€yÁ­.GĄįßÖ0rAô ēáH'ÛéKRÔÃd†’öR;į’3O˛Ô­oėÖîÖex› 8鑜ŌąÄˇnŨękmŌHBm2(ũāP Œ˜į9$qĐ9)ų™rßO,Đ¯˜Š,,f_”H¸árxĪļ>Ē}‘XČ쉁ˆ'É`0Hę#üđsÉĨļĐåē…c/7’™Ø3ū côĮaŸĄļ,|=ĻšŨrđ™é“ny$üOŽ{Œ“‘ĸW0¤6Ōîx&h‚Ž[•Ā?F9ĪAīĮsWcxĄũāyânWrī˙{ƒéúāįŦDˇRé Š’ŦJ:ũpõôéĮĻ%˙„qUÕL8`˜8î ΍üyî2eĖv9 'rķmfã™-={…č}ņŽ8â8Å´r—leŽ2mß ôįœ˙ß-]Ŧ~‚7bҍ$€§oCū-˛>•l7‘ÆÎ1ČNãŋ?įvŽpå8ԗIōš¸ˆ6Ҏũ{wô?ˆ=yĨá™€i€RAŨ!ĪûƒÛ×°ūíuĪáđČWnPũ܎1Øv€CĶĻŒŪŠfVĮ”m<`8XōPė …8ËcŖˇ$tĘė:VŠbąĪ$‚d*\6đNNŪō1ųrjĘŧA@Ęa¨˜62@Číõö"kÍ'ĻGToõžf ¯$aНL†?8ųHÆ9Ē9’ÖCûĸuĀįęFŋ—aTėÅsŋđoŠ…Ŧņi7N%ˇc˛Ú`ŲŲØ!'ąíéœqÍzDr)¨Čí_>FđÃpé2…bÍķš[ž0ztÎyäzu_RđO‰Æ ŖLģĩÜ@ˆúÕŸø{ãˇŽyÃĒ4„ŽéKcĩ.īŌ™$ƒŽ:ĶŽāž•ÎlLqžæ[žĻŦ˜\™ô§†ÁLR„€Ø H99ŠHA`đáŠ`3yĪįôĨ$œriÁ>cŒš8< @!9äō§ĩ0šqz{n>ÜRcå;°=cG‘]Į+÷yéR)@ÆqŌ“åqOUmƒiûÔФąb‹ũMJ€9Į4˜ˆÉ ķųŌmÆFzÔ¸^?§JcŖ† $Ú¸l g“ŒįųĶ@7†R?)ÁįŊ(Bî Žĩ3Ŗ‘ĶįQlbŸ;wę0Sj€Į9ëųVfĄëÛw’ŠëĮB_đ­tÜŲĒʁÛibåÉô?ũjhUڊāc ĢžBŌjG~Ō8~íj _”‘ÁÆjī†põC ËsŽ?vŊûĐ#y‘KtÔR€ØÅ?ŒZŒŽÂÄqē¤d!,>nƒŋzņΌ\ÍmĮđo_ņ¯g‘Iˇ>‚ŧoã;ėĪ…?ÎǟÄcČķE.â;Š+¸äšõŠ"‚H=NMH€nöĮZ’0OSëA`…ũ+Îgp‡+•Ī'ĨH?ŠĸÁ” å‹t Ž1øÔ­Đ€xÆ ʒy‚5$“Œ{vÚŧ}3KŗOc@ |™įŪ”˛¸Ę’Ct"‡+×đǎQYĀd¸‘#‰sš›å\īÜP—A–›<Ā˙JœwˇøWkŋÖ LDl6ß9p¯Sųā¯üU­_îiõ)•XcŠĢ(ĪP1É­ŖFLÉÔHöũC[°ĶíÚ[˨áQ×-Īāyūˇņ)Ų…žĢ$fwšč;tĪ_ÂŧŨžæDâRÎ9!XąrsīųUˆíZ`_%SĄ=ry$}p­ūMkInC¨Ø—:…Åô†kĢ’ZM­#ļI#Ļ1×#9ĮjŽ5۟(%ƒr@sØāž˜ûĸ´I;KHØČ,8ų‹)Pßú˙ß5uc‰ĨXĀyų™OPqķKÎ=+MÄ[š›„ōĘûÔ" %†yQÕxúđOlÔŋa˙‰ĩĩŖģŖ9É$Ģà gļŪũuŗŦČfCķ’8Ë`Œnęšôæ›ac4ū"‚Öãiō~HʂBÃŒGÔtĨĖ=^2×K6.ۀȤ“Ī\7ãÂggd—ÁäēH‚ŒÅå ,‘ŸēėzzqMÖm€ÕÚ#&ʀ—ÅųHčAëßĨt—8b°Ã†2Zžã¸brG͐}rs7÷GmB+û˜ÆČ­.ĮĘ˛Æ‚ ~˜R@öĮÕŠm}ĒĢŗ$` Čsō‹–ã¯9íĪ_ĮL‰§+(k’xNßūŦúŒ—ϟfUŽĩĸ•"6’68īō„ŨĪ*›øâf‹OĶ/.¤éû¨N$gÔŊŊj]Į ‘i÷ *ũģ|œq˜‡§=^ŸŸ§Íj4ÕQŠXTāę›ą“œpųQ‡Ä$ŊÛI‚%#;摛ô$sķ/AÜROkâigKģ8ÃHUvF¤Œ0OâCаüézĐēŠĒ¤Ĩä’ÖFp9‘6€īŧúvīøS’ëWPÍqeÄ÷Û3×ĸ¸Uė;žĩŪ(Š~oíå*‹”aĮ$÷Tzøæœ.üC ‹ū…o4$ūų ;$?.īīÄP”WĐ€ī¨÷<ŽŧįŊz—…î´Ėړ)–ûpsÍŋÉāČ9íûÞ ÆĨ;j#;¸'Ėr§G9ĒãƒėiĨ÷F ’N´Õāu"°5'bOŽ>´™W$ƒŽ”ÄU'§4đy8ųģ”6áô¤dã€IõÍ`OwÆqĮ˜TôūtL Rą${÷¤Î1’;f˜ĘŦb9â’×sq=­å­áHãhæ!’62å[’yÎzgUô#ŠĒØĪCלŌđ[ž”Äš9KŦr(Û[iÎĄĨ/Œ|§š†P¸ädcԁĀČČĪ{R€qéJB… éí@VsœM.NGQīJ>xĪ­ YHčŪÄP,Ho•yöūž”ŒÍ‘‚k›ŗŋŋ}iã’ââM˛bkwļˆ­ŧ++`rœąČ;Ž:ņЙvĒîeūđéW`¸å$rĜz ÄÕtÃu*Ī.Ļ֋ īŒCd…rÅÃn8'ˇzŗuŽé–D‹›ûhÎ ÚŌ¨?Īüņë\§‰ŧ]Ĩ.âÆō9¯lܘâ13Ŗn°8āœ ¨Å‘&ŽÂÚŨ-ŦbˇŒæŖT\ķĪ~ŋįĨq%û/‡,âK„ˇŧˇ2bŪÚeRÁqœCeGb@>æŠËņ!-láˇĶ-$“bˆÄ“`mĀĀ8į#ŠöŽ&öūûWŋ[Ëš ÄØaĐģA8#ä`ņî;V‘Ú <āuÅdÖĻ‹a289üéäg')X c<į"˜ė@äv'ŠI‡åĪԚ FA'ØĶ•ķĪAP1ry<اĢq–_jVpÁžcŒãŒTƒ•뚆0 ņŒcÔˀx+@ (ģžC“ŒšyLØJE\‚Hé´˙J{ųG¯aHCXaąžØĮ­6@@ãŽ1ô§í#i4ÖĪb0:ņ֚™Fvž*ĨÖM՛nwaŒöØIūU¤Ë¸S´ ËÕKyúzÆvÉįž†F|Š1õĢ@Ël§Ę85cÂîûD`‚.šČĮ&4˙ëUd åí g°íœÔūv[M€ˇ@/ũúühΏ'Ž” QI´ã“Lû¤ ėqúԌ$įĐ ņ¯ŒŠKZœö=>š¯a•‰ãß°>ČOpĪëWOâŗ<hĸ—¯AÅÚrØúåTš]¤éëO8Íy§pĖל͏ xĨĘāāĶŗōtë@āį=M4š8sĄY=Ŋ˜ˇˇŠp„Án¸ ŒķîĖyÎ Čā×iM¯ĩv˛’Ō9<œWqÆOãõS]4 –Ļ“šF`ņĘ#  ķ•ÛĪ œŒ\SÁi<ČĻ%$rFxSŒcō~÷ū=W-ĸķ&ûKĮ— „c™ä9Ī9+žÜžkZØĪē?$l T`cnŨņxĘr88ëÚļnÆv3bĶĸ6ČË*įƒÁ=,ŦNÛ5vwvũÜR0@Ęfb6ŽŪAdd9Á$ƒZPé1[(k¸“(۝X–ĀRü#÷kČįĶ­ÔL°MĀÁļM§îÜîQ1ڟy‰Áb:`˛ãŽ´Čt֔‡¸ģeØĨG’Ą~Aĩ˜ƒŽûÁö›‘Dr-´PHgûÕĻļ0AĻÆúĩôņFOßiH^>\mĪ^nÜ`qRKg¯xŽkY/Œ6ĐÆvÆW;ūmŖ$sĪ˧īŊ;[?éëfˇwl÷WÆYÚN~b„ž§=û“ŒqMËKF?ö…ĒŽĪXK}!7ØøōÍÉ8>ĩ3xOUÔ&˙‰ŊėH†C˜í#UAŒ€3÷ĪPzuŽļK4ŠÖãdav+ŸÖ^1ôâ¯Ę‰€yķ— û8Ōŗį{"šNb×ÃēdzzJ–Qka)yyV(Į žœúWCj#Üp-#—ūē>?™ĻÆZ"tÛOüpqúĶ­ZāŽŸž`qÛį–“o¨ZÅ{p|ė°ĮîûsÎČŋƤ–&o$‚v‰˜`˙=Đ˙JeŽÖYŽG@A?õĘ/˙]Y•ŧˇ‡~ņ›뉖Ļå D˙O”írDy?í9ūĩ^kˆm`yåe7ŠęĢ_§ķĢ+´ģg …Ė˙ãX×ö‰{¤¤WCĖå[!ˆ ˆ7ä`Ov&Ė™€ö_c\Îž5 ךu1 8Bx(œķƒ€TdĮ$t­orėmh?|ûσT’ F1šÆ>^ŧ“Î=p1Öģ› NßQļŌų‘1Ā;J“ø0ß×ŧ6!’?9p Ļ"`Ā€2C6A8ä`rôÍkiڎąáÕ"Î|Â0^ÆT`mįû§ē~Vņ’JškAŠ4{bJĨšāÍVƒT˛—;n"Į˜SÆwg~šãŠāėū&AÄzĨ”–ĖģC:Č õG9ã“Áô8›OM˙Wpj°K‚â#n‘ĘNíØ%†ã†ãdsÖŗömnW5ĪDWSœŠwĻË"—1+1@$wĪøʨ_"_é×Â]ĢĩÅÜŅg•#@2]ŽZkQ2u‘A=:ãĩsúŊ1Í/›sŒųÍü˙Īl×+â/ĩĖMi ķÉY'#ėŧƒĪLū\×3oĻ„Š<ˉNō;ąāŸģ׹ŽŨšĪCZFY.F•˙ĩũZvKôHĪËą{įo8īÛŋ< õÄ{KUE¸–ây%Sˇ÷ÎYNAį8ÁŪí‚kŠm2ËBˇinŽ&hZCÎːO$Ŋ=†r ûVũ„đ!sũÔO^ĒqØžßÆ{VœÉŠæ‹áén"2Į",Š>îI'Ûë÷ŋŽ„R&9Ĩ/úWüōeų\cwų^GĶé]ĨĢAĒjWÖKĻîxĢ3Ž‘œõ*ŧzœāäփønŌŪ[‰Ņ%"r7ÆũĪ ‘ØŒū~Ļ—´°ėyĐĶWėōâ Sožƒ¸qʐ8Îķ›–Ú ōƒ,ŌGkn_ū>.ĐėxĘŠ=Áv=jŅÕ5˜l§Šx ķޤBđeKBp­´žYąŽ:gŪĒ fkíF+]j͑ۈåˆBĖî:ņÁāôī]Eĩä>ĩŠY ē†Âæ2ŪTЏÄۀ ƒŒAäsøW'Ŧ[­â΀")*ŦČP0č¤w8uŠöĻĩŦwžŧķdˆ1,æ&I?Ü#hįššëœä68ȝ7đíĘ6Ŗ<Í+%Â>áŨZ2N2ōŽÚmwKĩšk{BŪCm‘Â’ ##=zVrZšEč[vėOqڑ¤<đZežĄin'ļ‘%ˆąÔä=y§¸8tŠ(j°#Ÿ\Ōä¤ ŸŌ“!_•ԀyÆqžOĩ1Į;C~”üŧ“ķcŠA’¤įz÷ UĮsÉäT ^xéQ 'ŠâžŖųô¤ˆ~Qž!Ô]ZGc’¨Sķ 1ķßÅČ zę­lmmíÚ;{h‘w¸*‰€@b:~5Ékw—7^-ŠÆUef) mg+uK’<ÍFEĮúÃÎŌG֌G˛\AĨĒH3jŨPzĻh°2Kt–Ys%†§šœãũ,.>g=DŸį•ŦR8¸Žđ˛węrvg sT$ūÃiá;<>Į?qąÄ‡¸ƒôĢTvņMö94­ŋ1ĸ ;Ģâ‹Ak'—"،cmVLõ2žÕN;Û)Bom)Ņđ-Ä``|ŧõ­/3nžQo—ÉŌåÇšˆ<ŌE!ŽīRQ´œ-˛  ėɚ4ŠwvÖoæ:Å`ĸ&Īú4eˆÂ a×zõüë.{YôØ'´ˇ‘îƒÄȊör)_\0S’YúŸ§Đ\-ڋˆü­V`čġ™ērüĒ'ō§*f[ČJË~a×kŸCT›‰ĻÉޟ‹Ģ+´ƨ­%ŗä(QĐãŽwœäc'Š{cʄĮykļUÔé’:x‡ˇ?(ĢņKl¨Ģ Õŗ´n>IuW^cžIüĒI#Gļ˜› G•e2LFŒGČĪ?SEØŦbÜh(đ m„a@ų2O$$õöė8ųyŸđņ‹a6ōA$°ĪSīéÛ#Œ°Y6viP!'˙fIĪīš^{ūfĒû*=ŧ¯iüÎ#´“oŨ-ŽJį#¨õ暐š9[].úĪiw8œœ…™Br1íëúNĪâ+f3KŽ\Â9*’NOB}p?ԃ]‘ûMōØę0/œØeVQ߀ø“•*kTéĒŗ¨ˇƒÉLžcBŖžã1‘œãŋj=§q¤y×ü$^(ˇ\Gys2€HcSč{í™SÄ~6ųˇJÅÚÁíׯq÷}ä{ץ\iÖņF ЃĐQÍÁfsâ˙'-ö5QßÉo@}}~ŸCˆ˙á>×aųĻû6s÷DŒg#ƒūy˙gwT–€Éh¸' š ÷'?ęGs‘֝ö'‹@˜ãĖÉéĶ{Čz 9ŖØ591ņVr ‹\•Č3Á9R7dē>ŗÉãhôãŽ+zŌČgÍō¨ŋģ8'Æá’¤ûŽjš—blŲËhūXb ",˜n;I#œÁ<ídgŠÖMŲõne‰c¸„’ØGNāŽŲėy' ģY`ēD0ģÜ÷Č ä÷鎠Ķ%ˇÔmÚ5´û3Äąít˜°-Čä6 á#§á>­Ŗ WEm1ĻeųVVŲqŒ7=øúԚ>œl4Č ;hûĒrĒŲā9ĪŠ4\,AoŗŨË4)Ο! ‘Œ …í×ō2zU‹¯.Ū f–DHãË+  įœņU-<9ގwœ\æ,}×įÛšæĒøč˛xVė$ģ|‘ß āĐŅŧ‚Į=Ë[øŽ×SēFH$v§1.ŌŽ~mĄ_Ļę‘íaŧ׿m^Ų­bæ1¸ūņF=XäžXäũNk¨´‰m­n§×ž Ŧš ĒčáTcnIĀ öāqšæ5‹}wûF‰mT•œžq#?1ãXäcĄôÍl™5&ÔãģfŧŠI‘KÆR5Čۊ[afÁĀ,̀f 8ĒŠ¨j2_DÍ#)ĻH•S€p†ûĀ1ˇ<x¤wÎŊ™PFā"âˆKäŠá°8<* -Î7˜Š¤u+Üiúda­áÉ ’‚ĖōcŋG ‘ÉãĄę ęnnÆŋ§,ą¤w*…$€0)ļ#īwöŖ€1ŠpÆņôÍ"rų=+€éœœõŠį¸üi™Ũ¸ōįŊ.ÖÆqšQČĀĻŧ¸}Ųäpiā Ū–FQ“ú`|ņâŊÖŪ!Ô<“ä‡%X1ŽĻz~Ŧ~•m¨ų71Dqė—õô5“ 2ÍU2Ę̍ŠPËĶ2nü˛Oæ+a™:3a(\œöÜŲįđ5Î÷5"¸'ĩ‡æq:)‡~Ŋéoˆ’9”$Éí”9Ž]mäš^ánAG8I>báF×`y HČã#wĨš,a–E*[Éc“Į%cĮę XÔ˛Äy€}ŌØg?ßįöQoņÕÚ5įØļÄÆ)ˍĘY—xį$`˙zŊąō€ؒzæzWĻŖøūôMg-ęÉdŽ5VeÆ=0qĪĩiĄ2ÜßĶŌiRŲŋļn0ĀĢå|ĩ˙cÜÕĆāKƒ¨3‚P$kë÷@õäÕ3c4pyÚ1,c~î6Ü ĮŽū˙¨¨ūËĨyÁ›FÚw+`YƒĶÉ=ĪņƤ öļ皝›ũ˛ōŧÉl͑ąg”ë¸u3§ēKujʨęHˇeā#Žî{ž*´kŖĨ¸‘tû•ä %”Ģü°_j¯?ö|ĐĖvj!FōrˇŽ’ß™ hšökÕߘ­œ– ĘĘ3‰ķü'˙OÂú6Ǐa§Ye<}ąŗ÷É˙ž~įŊbÜ[éǤ­äčw¸"KŲ—8íęū~Ļĩ-îôHĨ5´B]˛dŧŪrûDúΐ!måâ!´ë|”ŨĖäœOU÷­5 Ž‰: wÅSËcŌq–Įųk{ģ'–=ž#Úvc)48F1÷zpīš%šŠÉ¤ē“Äŗ,JAŨ˜Ië'ûÛķ4_ ZÚ i# äŠ(HŽß†ōÁîūäՇ’Ô} ŽŽĐŒHĒ ÆvŠā+søzŠįFę¸Õī¤ĩx¤*°/—$sĢ |ŸyąĀôÆsÆMĩļŠŌZ—ō$Pf¤´cË2î89Â}ā;U( šĮypöÄ&cÔ‰ŖJŖũpČųO=ũuY ‹XĸƒĢy6œ­ÖŪ##Ž1éų×3秆Ö%—S´‚bÛqp†MŰ˙ N(Ī8ëÆk˛ Ā{ĢVTS‚°0ČōĮO˜äcœl¸ë™m8Sut˜eĖŨ×rōwŌ¸YŌÚ;›¨†ą*+Å™ã ^B•›?Jī¤7ūg1Û.ŊŲsĘ{oZį5 .ū÷OŠ{K;f– ŋ(•÷HĻ%ų 8<gÔw§a=Naîí 4CSvBŠ[-&4"ôûÜ/kN/ũ°ī[Ė“į;FåRO•aéúU īoĮžmãhÉ4…¤CüYĪ|÷ĮûŊ3U%šˆ0Â[•Rb…ĸ¤kģm€ ÔÃy„|ĐNp<ÁꞃĨ Ђō;ĨŽBēnĸīķĄ° –9˙Yė{TPß4Ã6…ĩX1ųîŒŲáGųúÕĮ‘'ąI>Õu1äæ-§î?÷—Ū–Uíiæk˛Æ@pK4Cø”÷OĮđĻ•f°ĩ#ĮcewîfĶ˓÷HčôÖēšÕWlRHÅÜâŌÄŽf'įē÷ĢâöÅâ$“%ŗēXs˯ äTr<ĘĐꖌČ@ŲVäųšûŦ?ŧi_PhÍ—fdÛ¯F>lļ‰G2OßĘŽ<ŗ;–-.ōŽM8¸ë…Ņ %vœjr?>_LOūĩm ¸Kˇ@FŅ€Iķ!ô>€˙úǏ­æijxfvëåŽGúŧwĻĩŦšoÚQ‚:#ĘH%,Č| ]ŨøņĢznˇ$qˆĩ+r’¸€ŋxTüĀg§ŋa™Ģ¤kĻM%Ũ…¨_0eš@€4˙txãŪ°S[ĶôÍ&ŧągšĖ‚?,Gl8 ÷åčėu隮Na^ĮŠ ‰Uw;mĖ„˙Z“zNü~?ã^Ohšmz¯Ÿ5ԙÜĻcœî8ž>ĩbĶOĐÍĒČÖ7$˜qo+QųÎ=vŸÂ§ŽcĶ^X€AįŒc%°=xĪ_Y&7_Ƈ7Ž+‡›CŅfØ#‚HŖ,>öžŖxã-=ú“QŽ•ĨÛ\k´EũÛb…‰ō~āė?_Ļæ; ĩMyš­˜ `’1üęŦšĪ‡ˆĀÖėWūÛCĪá\˛ĪĨGglÛDž Ã÷d8õ8­X^ØÎíŖhŲxÕNTƒĩsü$qG*AsGûÃĨ6.Ąm!#? üô5xƒEPTHō0qhįÛ˛úņYĮį44 „~ Œ;ŦzfŠ&ōVUãļXtÔ§_c ˛h—ŖpŪyC#8ūųöρz$ˆũ’Ø2´c ;pßėZŒMtÖšû8†L‘HÆAÆIOÉˆīÃl]|î(A™=}}iŠâ=RlĒh bO'-xŖ מū”é.gIˇ.íYnƒž<FÜ}˙zĄĢĮĨÅ#ŨZÜCš2lgcķĀ'°ũ=9ĒĩÉ5­õ-FâöÚ"‚ÚÕüšwą 6:¨ERŋņÔSé–7°Ė× bŠpTt`ã†ČôŽÃÚ•îŖ¯&Ŗtŗ‹Sæ40ĸ–#=쌚´š‹iŽŠ}`ĻĶi˕´dŠÚ@dÚģ¸ ‚rM!s´Ö#ž}xĄ¸KyŒ$ŒJí ŽAöĮõúĐŌ.äˇĶŅ/Ĩž{™>bRuč߯ņڏÄIst&ŊššÜî;Ā†į1Ļá…Ā ԟlbŨËi0ŲĩĶYũ¤Åa$ō;ļū@wR>œf—(\–öÍîĨ=ÕÅĖnĖ莾^Õ$F[†8Æ>čãĶCÅp}ˇÃw–đʞpA"*°É`A_ˌ âW_ŌÔȰŲÁlƒ&Âw6ŪN:oq’Ŗ=+v8tíbęŌīûJÍå´Ø˜uVi6ļāûŗžAéĐˆd;X.$vÚæŖ$W23Ûˇ‘ÅĀY@0xႝĮĢ æVîæ fbĢe$ˆq‡)ōÁ,ĒÎ6;/āŨy5­ŪÔ!{`¯,Íi•'|l>xr=ųsč= 3MŅmõ[åĩhJG;.ėåŒGqÁ›$d8ĮCÍĸKsčöēÜjtʼnɸ‰†Į\įvtí†ã¸V6Vk7Sˇ°ÛŖĪvÁ,sæ¨8ÆIô"ĢÚéz¤ļזĄĨ‘ŖWfˇ…™VA¸ō8*āœ‘¸dāäŒ`ÅknfˇKķoēŸąˆœķ 0Iá‰#ƒéÃ@Í=kR:ĨřļļyĨ ˜ ä–Ę–1°)<°x­Čl5û3Ąo •ŖÆP[G‚áOLpāāņžŲôĄIrAüčŲš08Š‘znë€)\GĶôŠ#ČųHPĩ3#4Ą°:æ“ėWw~EFܞGĘ:ķJxqƒ‘‚sHĀdāHę(ę=ēũiģr¸ }i‘īS´ģ9į“RcŽÆ„YH ę=Ēĩų [@P?GķĢĨ*ãToų§vu`=ųĘŠaIۜdöÅ[Ōvų÷D67:’ öūUHÃ#å5gLĘęW…+ą9÷č)’ÍgbƒÁæ“=?ZvĀ3r)›A]ØĮ=(ãxÅywŔQĻDÌ7SÚŊU~`F1ĪĨyŸÅøņĄÄĀ<üã§ü)ĮâCGФy\˙Z)č¸^ĸŠëš™õ¸Fc(AČĮZhl /ëO^1ĮÎŧã AÆ3Í9Ā<œņB€Ŗ9§žŠxö c°G\b˜Ø įö§ė8Ũ¸į5)Į:ô4á~=Ŗ×ĩ't8c‘Ÿá#ŋãųú’4ž’DŖ–A÷Ž0ĪđŦīˆd˙nß(ûĄx,Ŋđ:ņŸ_Ī=2kcáũšüĶÂŖ(xVã>õ×'îÖŧũ Ã_jÎĝאŽ}ļõũ+eļ>ÕdĘą‰p=77_ĘąôEWžÔĘŠĪÛĐGR˙Õ[D+琏Pa!ČëķˇoĮõŦ^æ¨]čéȸ| ptOõĒ——Zŗ;H¯22ĄXË…AÉ sŽHö̀Ģ"[ŗH^>°ˇ˙_ķĒZļ“ī™;JčņĀëō’3ōĄéĐôĮ ņîŠŋpąŽBũÅ;HvãŒũņ\’ú_ŽŽ$IãË”‘Ķp\aØ‘Ø^‚0äŠ#ąü@öúŠÆž˛Ķfhī/R ‘”Û$„((OŋN}ũj”Ŧ&ŒûHu8fŠ%ŧ´Œ(TėĖvãÉķĶÜ~žŧX°û{I2ĀAØF"aÎØ@ęĮÚ§WŽ[đČęčŌnR§;žk~x˙8ÁĨĶ‚€d¨AöÛ57?:”6ō?—nL0Ød„úĄqs~î‚Äē¤ŒŅ‹ÃŧŦÉÛåįŠ­‹ßžÎdHmáĮ÷Šķ;SŽâīRš¸ēŊŠęYŲbŠ5bd,1ƒÎ>_¯ĨTUõ:ųĻŋi7ŊĨ°ÃIŌá¸!f˙`=xŌŽ[ŗ &ŅXųΎLî!ŸÔNõ€÷6ōÛŋ—v2pņOcĒ˙´?_ÂėsÛ#a¯Kķ?ę×s‘Õ:˙ž(KAĸÍ­ÔąI]2âEōĀÚ­@Ä\ōÞ?Ozå|O5䗖đEĻCķ0/ ãA‰æ'æõíô­Ąyd˛FĮÄėLrđŖ1˙ąė!XŪ"XŽ­ˇÅŦ[ŪÍ#FŗK–pxƒÁ^8čÄĖ ČžŲŦç6ŒË 6č(BîŒí]Nâ9ĪCÁļ=ˇ3=´ú(kKĻs ‘Ú ‘2Á”›åNA ļpG<Šŗ+Üyw6ēôfxļCpąČ#Fu˛ũŨĀQĪ^?ĸšiĨi"ŠŨޤ.ĖŌ”1īgä’1ŠÉ^Ĩ‡NÛ“Ø­´uí¨˛‘%I §!pa€ŠĮ”sĐd×IĨÍdž2ÚÉ+%ŗ‘/؊ąÚÉÆGcßōŽ`ZŊēĻ•¤ßZŊɑDÍÍŖ6>ã PxüĮƒ]Õĩ­Åļ• pęP* p74e›î’IųĮ=ķĮZ‰4R8§ÖüšŪđĮysoæĖsĖǃ#pPF;u­MYŗž5ˆ›ér‡’+‰ü¸ų8ÉĪĸņŒōqÛ5¤Ú˚›ÜBĶpr˙4ʍķ ė2ã=1Áį”ŨBú]MbōÁ6ė¯ļ@e9,ŊŒtč8ėˇŅ ÉņEޜ"[ˆį’ŪiP7ĖŽKœ(ÆžŌÜ÷ĀŽœõĩŦŪq‹ûR•I\†ÉģŽß^¸ū,SŽ$šēœ<ÎŌHB‚Jîe8č8öc8éÅOū—&Ķo26įf}@å9•wDĐn-­žØmí%‘ĐH¯$Ė…NĀ'ę@­ŗsĒHŦ†ÆÄ0˜øûn?zG_/ÔcéQ)\´ŒØ.mNžTxŒcĘČC$<ĩã…ÉôüÖŽ­ũŸĖWÄP>×aĩž#æzžƒ4–×ēĒØ3 2YŨöĻĪúĩ=ãôūf­Gs¨´Ž’X،—Lq‚ßôĪųéžŖ!ŠāE Š-VÍŽĶˇ÷`ämAŲ…,Ÿkx ĻŖeŸ;;Z“ûÎŋë=EJŗŨĩˇąļÜ2̉ˇųgŸāŖõĻÂŽndYôäā‘”ôwõĮų\ ŪM˙öi?l˛eHNZˇf1Ÿ3БZH—1ȍ$ÖĖsÕc+ԁũãŠÉōãkyû9ōˆČXøũÚķ×ßõŠžŪŅ€Ç÷ķķķŊŪ‹˜œ +ŧĶ÷܃Ÿ3>*ŧ“^\Úî–Ož>ĻvA=öĒ‹kh͓á\˙{ežĪéŋ5^mN—ŸøG‘\GĪÉū{7rUŧ–eßĻØŅĘgn” }zUWŌ–hũ#NĪÚ[9`rLãŽS×51ŠÍ% ’č0ø āëއžÕ$1Aå”{[° ŒTaæœU[@¸ĪėĢ1*Ō,Âģ`lUé‰8ûŖĩ)ˇ@.TéĖO›šV6Aü Ķæ*ŖęzeÔžEŧĶ9A–U–F ė“=Ž*I ŒwÎûMwgŖÜrG–9Ú}ûRW@2;$ēic›LÔ"ŒĀkŧdī?Ũ—¯ĄŽkXĐôíé$wē'Îĸ'c!ĖgŒŒœžŧdķÖēk[ĢHoæ;ĩ(øRL‘Îp 9įp vëĮZÎŲũŠpđ6Ģ%”QFŒ7í,āíč01,s遊¨É’҇§ØËqûøäb9m¯n܂OBŅōJģ &mŅ B…ŠČūYP t€3‚ÜzúķZZ}Ž“ ģ4ž#06öMžt@`9ÆA_Ĩ?KŠĶėAÅMž4ušÂŠ(ŋÁũĐ9ü{ōܐ$2em+Ŧ:ŧ{šXŲü×ü˛œ–ā|ĩ#jPī€ÅĢéäüģˀvá\ķ‡Īę=*Ū›n÷ rÉŦ.V}Š•C¸¸}Üwfũ)lôũJæÜyzĨ¨ČņöŒÄíĖy$8ė3øÔŨŒ™5åȟÛ[) Á'ābN¸'ņ§’vššL]XJžsÚs“Āíîj[{ VūK˜ūÕLaÔ?ؘhō>sšŸø-Ŏ ēˆ„­„ž{1‰e´l1ĐöLÎš°<öT1[ØIū¨͡äĶĘâáI¤hōdFIy‰ãsųįīR\iZ™Čtũ)Á‘i™‰;xÆ<ŽüUk]2åí`¸ÃÚTčņÆā 8ÚO9ŒzŠ–×I€E‰4Ģ"&o“’[œ”īÂ§¸ŒÄ¤ ĄbV9BtŒ>aëYė×VÉáhĸ/@"¸ŒäîŪŦ:úûTōCzf!ô9Ņw9;.IęwéړLžFn]†“Ē3qļäŠx˙YKé{ĖŠ“Ÿ'Ú2[ã=*ēß$ĐŊøž6$Ŧ2ÎÛsģŽ V˛í:n¸’qĶ¨p9ûÊc6g r§Rȑ0sdäqŪ¸ũkHŽãRžé…ë+e0žGĘ6‚Ĩ:d}yÎ8Ínϧ4†;=Tē´{‘ŽOĘqÎw?\bĸ¸Õ-ÃĻ˙ĩÆ|öm­sOL3ķŌ¯Š,­áČ>Ī“5ÆĄ ”#tV‡Į f?§ųæĨՐ]xzÆeģŧ¸’Ô$Â-ö¸#äĀŒúgŪ¤ĶnfēԜŲļĻŅÎŧ–īˇv3ÎHä‚}Îhŗk“in˛^ę `=Ũ:SnlšÛU’F‚õdXËģBÕ€‰˜äāƒČë+,}ŽÖáÃOË ¤J‘^ÜRƒ´Œi„ąŲЃœĐĀi_”'Žô‡ T‡*BƒÉįĨ!@NGP:zĐ(Æ0G¯Ö•Û?xôô¨ōp8=ųĨRA?…JėIldņųUō?rO™x÷=ŋZ¸JäãųĒ“ėŠ7 Æ>™`×­4č ¯įŪŦŲ+ š<˛.{t'üj.āqVlö­ŅÎė”ūŖüiˆĶÁ ŸįL›*fUīHįjœô€#SËcÔ˙*흋kŸ FsĪÚöZŊ†ã­yįŅ-áb_‚$B?ÕGtTw<{ö| )™ĮWv‡3nį×ųÎ2Ŗ¯jzá8ęOÆāŖ´å€Híž+ËąØ<Œ“‘O|ídd÷÷5Ĩđn!ŽbĮpä˙…`Ņqؒ2ŪM™É8(>ŖĘ4˛š6—ŠäBĮöÎ?Z†ÖFhmŖUSūŲ5)lZĪĀ, bp8˙WK(ŋ#xûÜpd˙Š$PŨÚÃÄ먏°zĄ‚8Á`ƒ¸ģ§_š:"ˆyH3÷v€Opũ–„´§čąéwyQŊÚ@B-‰!# 8ÉĮtéW´ņū­a•P{mƒŠŗ,.VL“™˙ˇū•—ō"~Á# ŸúįøʘËļ+o.îNé0OCōË˙Äפ —ÔĩŨ;Ohć~댐c•ĮC–Čí]ĩŪFDRß<Ÿ.xé=pž#Gŗņ›Í$4w8E2‚T0U ņÎ2Ūõ¤; GIm-õŨ°–)íY|€ųL9>hÉųēō1īZp6 .JÆöĀ+ˇËaüRõųšäō+“ŠÂÉĸeK xĘĄûÚD§ŽŊ8ÁüŊ*cŧWŗˇVƑ.G2{ņ͇û45`šĶFˇĀ@<ÛbC`‡AęjļmF0ÛlĒ…‘‡dĮđņßōŦšIˇE;Át™—wúz:|’Âëy ķpéwo•øũi!ģ/ŧ/;ßE%ŠÛZ&%ũĘšhƒ¸ÚN6pAČcІox„ĮS^Úʂo"É#ˇ›ŊØ Š‡>Õ§æZ ˆČˇ|ĮäĶgQÉŽ0{fŦ™­KûģT'?f¸É‰?ÃíC“DØŠĸč×VÄ~Áis?’Šgšģf“n]€Ī—ę? WáŽōãI„MĨiŌ…p\į÷cc<ķúS!šŪF„wKō(mļ×#<6zųSUíĢūõŠڍBvŽâķqTBf°~1¸ķōŽ>÷ëE’M ˇ.s÷€į$ ŖĻUŊOôŦķ& ŗ\5ŊÅÛ7*sP-Î;RBÂ{ąhĖ5EA$Œ<ë'Î7žŋ8Ī˙ĢŌ™Ļ_ē[Úļ—.íåÉīžŋŧį?LķTí/u(­” .°r~㜃ÎãÜRéú­ĖVq ×NIÛo!Īũqūĩ6 —mu4Žķõž@7€ ÃÆ_Ú ĩŋŌ%´tŸPĐä˙H”픥Îd>ūœū4Û=fHíđd“äÎ`“$ī=?wīúSôíNeˇl´ģŧÖ?ņîį‚Įŋ—NĀPą]ŽnŲŋ°6ŗ‚@˜Æ÷ŖHoū*„Gsl^īVš—jčÁÖXæZ1ĩs“ģ8ųzjŖes47g"čļR ępsž8~ycH.ĄK]FHėíÔmĶ‚FG8={cĩPãmAÖK`žL ¸6åŠ<î'ž;sČûŊjÔX–i6Éö[‰ äė1šČ##Ž~vĀ#qā~ĩœæ˜ÔgąˇŋšŨË>  q[Ä3ĘI'žIā‚@"¨čšĩΓ2AwrY$m9—Ëųĸrģˆ^ÃīöúõŠu[ؒæų,ŪÉmĻQ°ÛDšsķÔ¨ žH9ZĢh„iîĸUŠk•˜H1ÄjžköÛô8íÁ˛ÔF^Ŋ}ž@%Ž7‘Œ¤8Č%Aaī€vŽãiĮZî|Ŗ;KYæ–NHā€O_äGN6ˇ­p+žÖ K­ō#Išúq–nNwuĪZõ3G]1aōī.4o’ÍšI8Éä:tĻŌVUŲ¤ABp9Įū•yáĢ Ģãxh.w‚B†AĶ oĮߊØc…ãŪ‘ f<œÖhÖÄ–VÖQ4pĮ€Į.I,ĖqŒ’I$đ:“ū2@ã¨ų§}ÕcëØĐ¸c´õô¤Û 8#åéĶÚ€ĀŽpr) ‚ĮRíÉÍ?8U8ö§†ÁĀÁÍ7hۓœŽ´>ÜĻ23í@?+ƒĮ4ßQĀāį==hÂō MŠ1ķtíHPÉ8ųz~4â™9 {Rmũč%GŨÅ1Đ´NŠÁ#īzRĸėT<*@pˇJ  ķŸB(Ē ’HÎj–¨BÛÄH-ū‘š‘GõĢā |­ŸjĪՎ,ŖĀûDĶÍJh ŌyĪzžÔ/Û@īå9ëîŋũoʑQA °<â’ĢĢÂ3Ö'Ī>ëL yÚM‡`cšŠ9AS“†jw E@Fk1Zā.öÛܓíIģŽh3.ĶŽ•į˙d² g2)S×ší¤”œ+´ķŽõå˙.gQD‡00ųąëUvŠŠ< õ\ŅMų‰čÔWiĖŲõĐÜxtš‘šJË´|ŖĨ5-šķޞE@HQœ÷Í<’ #)¨H9ÉÍ( œ)ōß/OŌ ‘¸fōІ9㊁ÎŒg=¨ÂŧO+ÛxĻöÂHĖi-ɐ~ķrsž‡¯ZÛą_ø•!c–IØŗģ9%Jd€O89įŊCņ6ÔÁâ++؎Æu~˜*x9üJ’.m>Õ",KoVŸg ‘ķgžޝ˛Œ憟yötA-¨Ū؉cUåąßéŽkZĐXŦJ"Ųį—Ã9ÁÚOąĮ?cÃqp€ F_œG ŧQGp;į5,MkpĘ`åđWä+ģæÎxņØąöŦÚ7ŖĶ5?g¸š9A$irĮ#ëūMLtË´I˛ņēH…e ŠDSš—#øüMfZ,ŅmŽŪčĒ‚˛H÷}áĮLxęŲ­$ÔgļHŪH‰Œ/X›x$œv<˙ĀCzTąĻ[gš Ĩā*ãÔüËĀĮ=nÔםÕĢĄ–5åä|Û¯aRÚŪ¤ŦĨd ãälŠŪ}~ī Žĸ­ųQJ xÃĸ㠁"†úu5#3Kn¸%Žâ<Ë_OøéRØGåØ"‚@T^{}ÁN˜™„{ãōČ`7†ßßîļJŒ“ÆEDcģĩļōš#:2`œã‚pü Ā¯ l÷ō 8äž}ŪqXž$Ņ×W°™×+tŒÎŲōÁųFNî3ũkŋō˜ČûMĮ2íM>Oīã={×'pšņŦ—æ>>ČęÎĀdŸ™F߯aZBDČÆ’ŦZâ ’ÆEC’‰ŋÆ~ņC˙Öã†'[[)bķŅLMšÔĮģ’Ž~^sÁ8ÍTdʔžī U×2ŒrˇšéԓíQZÜŨé“gģH>ūG#.C(îČfč ļî‰GxgŠLmÔT–‘ ^N;öĨ‚éPCēđōT•ŊšéT”_¸;n5gRÜŌØŧ}@ĪJŒiÄ`cũ˛Åđ įkzņXŗDMÖ<Ī3PšG*2?Ā>CŸūĩNu]WU8'”´ Îzf#Q@/ōUSY c6§bõį=jÜ-rŌŅęKë™ ÄŪ‡ÛôĻ&gO025-mže$}€ŦŸôĮˇôŠd”mˆž­Ŧqķs`08lō ĢD\´QŸôŖŖ-p¸ūīūOĩE#ÍJŦ¨Œ–kŌ¤ ŦxÚŋOΐũ ‰&aĒkgĘĩ€äíôĮ§–kĄ|ÚŽ˛lŽÅ­P23œÃøäãˇ­C{2EąĩÄŖn(_Tq‚OSÜķŒ}h=ü,Íu=Õ§”›ŠÅũą)bwdNî`äō3€Ž ƒÄˇW––†ļjf9eT<ļ‘Afnv gBO°Ą§ŖO<-į=×ÛŖhrTíļb˛QĮTāķ큑K4W†B{s7ü{âúiēîÃĢnęLō éĀ$Oor§Hōâ}“.%‹gŠƒÉY€īæ/ĸÚÄÅ­ķM 8ÂPB¨ņ‚8į?LņJ÷ÄF|Ī-sŒî!ŧŗĪ9<ŸJã4Z äŲnUq‘ēäãĻ9ʒ°{]eŽw|¯›dE~hø.AÉ9ė ôãô5“Vܸ‰ũĸ÷,bļË#‚0v‘×’0^qŠ›û>ūi ¤ˇDY$p3œ`gŸLzÖĖņZ Š(Ѝŋ¯Š÷ŽGZđÖ§ŠŨ5ĩÂÅÉūÕ*ƒû°…Lj@$ģ=úŠ•a›iĄÛÄ[‹›™đ3ķI¤~î üsT´ķĨß^4VŅęQË4FV2ųņ)hū, ō:WBą•„)`Ä(ŽÕZÃMˇ°}ņ™™ļ„_2F}‹ũÕÉ8įϰŦWˇĐėã‹bũŖ Ķũ*^Ÿ÷ÕsŽ.W[}Öɘ)VYîhü¸öŒ’?‹œđ¤Ÿ\WnpS'đŦ{¯ Ų\\ËrītŗģŦŠëpãË`ĄA8Χ¯Ō…!Øt>ą‰H pO'ū>d#$ķģÜĐžĶļ•ōgÚsÖâLŒ˙ĀĢ`d(#œ{ԃÎG“lv1SÃZTE˜C($c?h“?ú#øWIyCų^‡í2g§ûßįšÛmģƒc"6ī›°â•ØXĮ˙„sJĀ&ŨČ đķ;ȚcøkG0ˆūČĢœå]”Ž1Ôô­…ÆÂx'ÆhņÎ)Š0hįŋąô4,ŲíåbiÜŋā3“Č˙8Ģ‘čzr¸+ ^ŸŧcũkS‡O‹[–KÍîc(›îã]ŖnpFßŪÎ~'oEžĩÔ!•­.VæÜ"J­œ āú‘œU2D]ÅV@@$lLã?‘ŦíSÃÚeŒ÷qÚæDų÷Iy2¨Nâ ížÆēLqÉÅAyf/mL-4ąå”–‰ļœŨ€{r)'¨ėrÚ.g}Ķͤ}–Øá`Ss#ģrrÄģž0<íR_x.u‰MĖÛŧЏVö—ëƒ[ÖXĶ|Ԏyž99 #ä!ÎNßL÷ĩŖ´0#šĄËPąäRZ*fŗÔ4{Q#‚ÂFŒā€2NîžŧđyéÅJl4ˋ¯:Fe rĸļ`“Ž w=¸=9¯LŧĶíīíŧ‹¸VH†ė}GĨpš§„ĩ 5š[×Hp2ãˇnO|֊WDBŌ˜ÅÂũâÖņ°VôųvāõüēbĒ-ŧw­:Ec§N‘¨!âˇhCdvɒp6ž@đ+Uļ–ã+ÜÚÛЇRŧƒĶ’zžĀã=,ÄŅĮįE-ˎ6“/4…ļ„'Xdã$tũqŠģMykhŌŦĘ-ĻpJũ¨2÷É>b’3Āä gŽiŅZjOÖöŅĪå"e˜2°'žw ķøõëÆ'ļž…Z(ĶÎv—įrdXWĻT1'ˇ=HŌØėûEš,3oų$‰Bą~TÔF3ČŨÔfP׉ôÖą¸KČÂy šLm€‚qžäīŒzë?OüVV̰–L(‘ģæŨĪ|äõÕĢ‹čËī#"9ŗ¤ęDķcr8û™bOãÁį•Hmô[TÔl´Ŗ‘ĪœŗyŠãƒÎŅî@úã­^č”tzMŒ]ęļKĩŦ‘Å?”Ā•ķxlz}Åúsør-m92‘1=¸,ĘĖ5āddŗtƌÉ#°5Õ$ßÚZT–Z]ÜbîFat&VI0 •PsĮäŒs’Nkmn4Īĩé'N7–kŦŖ6dbÛ˛¸’:8ų}ņR†*hs-ÆŖž.‹Z+E2ĖÁŠ@î8#ŽHĪjģŦ[Ei :uŦAZ 3ĩΔúįĐVŽukË)"ļąKPŅÛΚ‘J‘Æ7ĪŽ=3Ír—ōĖVá‰ÎÂäųq,7žIv˙ íƒá$–īÄōÜ4éŗdƒ7°üĢŗ×-53Š,VūMŅF‰öyŅāĖ[vãÁÚ@\ߨæ77! ŽILr8ÂŗįķĮį^œ¤ öÆ?įŊMG¨âŽPŌ-Ž-ô˜bģR.]”žüe‰ˇ85wx\ †¤fę!y0ÉČ>Æ˛lÕ USč~´›G™œsRįŽiüĀúŌÛķį€ĒąĮ4đî”ŨŠ“Œj>2ZÜyĪŌ•ÁP tJLqˇŒ{Ņ"‚=Ō€Á@1“ž†(Į=Ič{QøņíÅ ž´!’pŖ?# œįqŠF`¸ãXœįøT!ą×ĻėTļ¸kœ¸pƒīȤˇjäĀĪVVpGĘx)9Œm;zbĢČzž é‘Nš™,˛[LęX•ÎGŽ=+Ī~"Ÿ6É[Đ҈˜˙ #€2î:ÖđšĩŒĨˇģáuų ČUÛČ ŸáĪÔgņĢ2..# Hú>Wc’@˙ž}=̟Alēƒ‘$k c'îÜėxéƒ×>ŋKqĨåœ@oI“nā‡Ī<œcœė>é´IļļķÛíšÚa$ySåąč  įąč2OvĢöˇ‘šˆÉ˜œ›$8l p õ9=Fk ĶPJî/JëōČrN:.ząÆ3Žœ+R/"x rÆ0Ąv@ŸÃ'ļŪMCV5‚Úܒg…H$ŨČ=B˛ōNOJ•!ÎÃirÃo,}ųŨķŨŸil-#­î™JûÂä}ĐIČ=j™ĩ ¨Jû=ûyÜĢŋŸEkzsķT2Ž[šöúÚØˇ”’“|ÃĮžá“ūy­&¯â_ėäCāŧÁŨÎ:)`y‚=Īį¨ú­¨ŨÜmx؟-Ÿæ ú‰9éŌ¸_ Ë"EĒÎ&Ų=Ę?ĖÄæ3•=ų#ņ̌tg^×֒\ÎĢp%´ >I‘Á ąÎ9ëVMžō­lؔ>îQļTûŸáŽ=ĢGx&ŗû;‘3’ŌŖ*€Į<“×ģvúÖÔ6öŗHJE’ö¨P{āŌĘöĶ%Ēڜ."I máčˆ8ęq°žF8ĒPčlö——-Š=ŨėĀ4ŗŦJÔV"5RŽ{įšę…štw—*3ędÁ>į5R÷K12_HŽŨØE`sƒŗ#­ Wˆá—Jņžļ‹æEĘĘ_*dķßZéāēŋ*ÎĖEyK¤Ŧ@āqČ‘Īä5;Rđô:ĩ‹ZɨoWn ˇFč@_ī\Ž›eökįđÖŖĻÛ^Ūpm.%Į1ÄAČĪ8?-DՎæWž|îžÍH‘sûŗ˙=?ßIĩ ’V/ŽiQc ãæny—ÚǤN YáđõŒ뤅l˛Ÿ3¸HČú€xĢ‘ÜŨ(Fkd…ˆ\k+(lķ´zŌļŖ+ÃĢbŪ/øži/ˆÁ )ÎĶųiôRÖuŖl&1ęī2IÉY@Å#ÃgŒ}~ĩ ĪŠthAX°wiōöB;ÆzūxĒ“j ™ãŧŋą@íÎđąîȏža §uųÆGO!KdNŌŅ‹ Ę3ÍH—ßÛ6ûT…Đ…‹Ė´…įƒ‚{ûUëm:ėNļēŧ{XŦąÅ†bĨ°A+ķc~rœd1W᷎7ęzĖŽ É%”L˜×Sm-# mĻgĀ—PbĖYƒĒĢnįûÉÉę3ۜJÔWi-ŧ.ĪöÉ-ą‡utĀR1Į#úuĮÉčõHŦžŨîKØgĀ"]žIČH;ū~„VƗw8™c˛ÕŖúMįœs‚>]üŽOÔ {Нɰh”[”xuļ'ÖėŒîčäËrĪ2ÜĘ˔iËޤ÷$ōqyįŠŋ…4W!WJ˛;vŗÆHv+Œ`‚œz“ŒŅ$˜Ķf‚ų°I4“ÛØ*ãpߨ9'å^ŋ'ųɤ¸“Iy Í.‰āĖVEęÜrT˙‘U ļŋļōŌŪ-/Íû…"ĩ%W…$0Éų{ |—šÅ­ĖItláķ>P"đ@ā“žŊ?ĀÔŲâEo§EŠįÃû†ŪVĖ>čí&:˙#R5Ô[Cȟ2đ°iī–Ėg§_jē4Ŋb{˜ÜjÍk ÁĸR{pš^9ųö槃Bû$R!ģē›$ w”)ĀÆP)ãĀõĪz.nfĮûōfŧŧÔĸ*ÅĮúA?1xĀíŸAާŦŲ[ųņrڙWˆpsÁ§9Îy ų°@ĀôgÆx¤VĘāŸĀwĻnqõ *ûĀdw .:ŸJnīœm?8Ų }€E]žũxĨnsĶp=i1ĀņĮ}Ōx?\Ё˜Ú…ŽĻo Ɵ{n Žŧé€}ÃT3•=;uŠt‰Ėö¯4öĘw—ĻTî`Č#¯O¯šũFM×Ä7)žÎgÚ$ģˆ2*6Ū>¸F1ōž3ëšØŅíMœˇJú‹ŪĪ3,í#(\ģGŨĀÆ°­:kČĨž` öÍL™ ūMByŒāäĶã<:žj ĒA9§ėPx |š8ÎxϐXā7S@ç=ąIœu'šĨļ|ÜŌøõ§p9]a—S¸šĸAuolUI%ČNĐÄF6õŽëÜV]īÃØ§]Ö7ō[ŽJŖ€ę2@vÎ ú×gs¤X\ÜũĻkHžr†2ėƒ,§øIî=HÜĒĻxĮN=*ųÚØV<ĸ÷ÁŪ!˛më7I´ĸ„“œ{îįõŦ;‡Ô´Į ue4I*Ņ‚ŗtÎy čE{žÜQ3ŠįŲúöĢæL–Ŧi[ČēČ“N‘lõ(2Z_ Ė8܄ôČƒ×Žß}ŽG=•ÆĨslņ]ÄŨÂČT<ŧūJÎ É=k•'RŌį‰åIíg-š|Ī”’`xî Žæēš­Ķ_Ō|Čŋw%Ū&‹v^t^1ŸPO$Œšm D6 }Ģ\[Ey¤[Ā— Z;Ëq´ÆqŒõéŽ9=đkūQmfņ–(ÅT Ęŋ*㊃۞~ˇ[Äž› éi ŠvíD’ŪŽ§åcĪr×ŋyt¯\Í:Ũjņŧ )ļIXôPŊsŸ^O^™!m¨ŽĶĀ:zŲiŅ#Ļ؊y˛`pKž?Ší@įļ>•ĪčZ–œŠ"úŌKģĻĪ— ąōä(îQÃÔ×AžüâšæîÍb´ Š'<úŌ–ûüĶāŲŒ€*#’{}*7(’1ÉĮŊ498aԚW=@"ž8tãĨ9¸īÍ"Č āt¤ųO^ÔÕģ#œLDŠåŗØöÍ‹`š¤,dŽIõĨRRE!r|ŠDl{sšypČÉÆ3ŠŠy}kaĩÕ.Á*–,Į°či 2<@ēĸj67zTpË4I(’›h‘Ė€{”`ûÔ^1ą’ám5&ŌīČ9†ä`÷[ŖVļ¤/”ZOf‰'”ų™\í,˜ …$c9#‚GNÔˇ6ē­ĸÁul“@üėuŋãî?:ĩk]YŖm :°nWĀÆ˜üéĮ=ņ\֕á…ŅõĨ¸ŗ–cdatōd˛ÆÅ“îƒĶ8>Ŋt˜Âß8¨˛)ĮŽ:ÖnŦÁŦsž<ÄĀŪ¸Ģų!ēÕMwY9$đAČ˙yj1Ën<įÖŦ[)k•‘´ō~Ŗü*'wSĪ=Ēh™”l Ä;~4ĀŅ ô^dbÄ Øâ­ŲŽ1ŸJM B84d\Úņͨ]VÚzō+ԞnOqĮĩpŸ­ŧ¯ Nüąé‘Dt‘Hđ‡?6qמ´P{|ØãԊí2gØ 6ŒîüéėC Ši ’G9§‚ãđ¯4éšvsĶ֜ŧ’;Hã qOĮįž´Iã8ÁĨā šjq†0h`WŽũ*mŖšˆÅ*ĢĄČe` ú‚0jā]Ē9¤LëøQ{ŽVđW˜Āé÷2@#!âˇbYö۞œũzũ+1ü?ŦŲE$mh— Ģš|šVaëœ7áÍzQUc‚8›Œ:ĶĩZ¨Cäšŧwp¤ĐHEFEnáˇǰ¸ĪĨ.š“5¤‘LrÆį‰G@+ÆŅxāuÅzŦļŅĪYcIōC¨9ÅbŨx^Ö@~ĖæÆeä€#<ŽĒU;’ārvz¤öķmš%†6ČėbFzëôŽ•fŊ… f " I÷U†T`ōĮœp}8įĖi—E=ėIlėāˇĘ]Õņėp?AN+@.ß§Ã ģx‹ ” r@Ļ[héßŋĐDŗŪÚA(š)ãRÄ*ˇĪ} ôõõŽzK$Ôæ)$âßh 4{ŅļŠJäŧûkcH°ÚK5õÔ+Ŋ˲[*¨ü8õ4¤•†…šŋ"&KW•„LíČü*iĩq ,SBIęÄqī‘ēϞkymņĻcP6ŧŠĪĶvĪJˇ ē+î*Ač&\~MPQž5ģ fž@œß§Ę1YēÔ:nŋ ;uŽņˆåYCÆß§8­üFX—ŗÛÎ˙ Ŧ`€Vãë(?‡ŅpÜå´7 `Ô.ąĖđ겕‘†9ÆđysĮĘ=kfk} KĄ Ã=ÕV[]-Í÷L€îN0?VŲäų|­2FéÁ(úüŪũĒÚ<Ûy;ųÎ-ŋĖŌ‡lļũáOA!\R¸ėsÚχ}<’Á(ą2'—'–ĖŪhí¸ tėTƒ×žÕ{KŌ¯VÂīîŨYI8[ƒ§ĖFãۜ‚*÷ÚA‰ŠÉņÁÚZ_ĐbĄ’úŲek™z0PĒžāķųS¸‹iÖÖŲt‹kõcøžMs7^.-ÍĨÕÔą$Ņep Čœn*0Āێ{Vģę Ķ´1Ä „Ã2ēúƒĮōϟí)Ÿv|¤ g9##qĪ¤*Ã˕b 'Ũ gûŖ9CTI˛ŒˆmĸI $m…}—Œgךž=>1“+É2d‘ąT#Ķ ú ˇ$L¨¨¨@Ûĩ8úöî2EŒĖ] ­ŧmÎĀr3ŒĀ*Km&ĪM‰–ŪLđØå'OLđŧ׊ŧķĒDØUÛÁʞŋRxč=1UdēŠŨwĪ" MĀm¤q؏ģÆOlņƒ‚ácžŌôŨK}­Ė÷Wōų`ˇ™vļrĀ ļx ׹Η—‹Ha‡ĪrĄp9Uīč:qüĪŗŪK¨LD)åڀA”  ų';AíīČ#<wîdM:Ô4JwŽ%ßžO9úûž9e,W*ß%ZâîC5Á\ŠÆ p§ëЌüĩŽË,ˇ T´Č $`ũÅÎã8=oĖfŽ Ļ‘Ë‚Cžq´“åō}ōNN Ī'ņ5Ķh:˛oĩĪķLĀmĀgéøūģæļBŗdÚ6ˆš]˛ŗ(7 ÷ÛĶÛŸũoJĨ•yuĢÍq :ÜJ IfkŊ ;¤ū'5=ĻmbĘŅĢÉ(]ĸIXŗč9ŽéZÜu=ņI€@äQŠĪ™•ĘŽWJąÔíî-^}+L†”°†MĪ”mäįŠŽœķÆ;SŠppÄbĒ§;šĮ5-ÜiXnĐGĐŋ7éû¸ÆFiHį‘Hd_w9é@8Š6¯N´¤|ŧv ĘŒ BaĄ,ß'#“銙˜ß4ĪŊԓøĶHČ4ä/žiĒxäqUí¯ãš ĒŦ’F~xäYyãCƒƒĐ㌎ixīÍWģ…ĻXå@ĻX\ēo8 ƒČö'žÕ$d“ĨN1ƒõ˙8ŠšÆ äõŨP\}–.įŌ\4åS+†kUš ‘éÉô­,j˙nÍÍÕĩՖߒPĨeļ@Čį׏ĨXÖn †ĐĢ9.­ä}ŽŠ™Ī,žœsūEfčvš?ÛÖmūQ^Ū9ķČî÷=*út€>Ū@ûŧbœx õ*ā’{Š@2["Ā8ČŦũTãLģËvČ…i„œsŪŠjŠ>Á*įœHéīT€š0 ĶôâĻ‚0×äāá€'­GĖsÛĩIÅĖ G=ø4ĀĐ*\30äādô ( uĀŠæˆ8#Ļiq“ÆëLEG›hû¤c=1\ĄøWRPŧ¤{—đÁ?Ļ*ėŽ3OLW;ãuTđ~ŽvōаĘõôĪĶލqGĖŦzQQ6sۊí1oSė2FK.1ëN\Œ¯öÅD3ˇ’=ĒXæäšķNĸBãRĀg¯ng4†1XŽr&ĨS€I4ÖĀ 69ƒ¸­#$C‰–ą˛ËæÜ7úĐHæčüöÃõĪĐô­KhYÕ|ĩ‘‚0# €xOoįĪ5 ˙č„L‹Ô™á[OAô÷>¸ĢņęŦ¨|Āz‚ĘcČ9Îc§s×5MtļQ¤2HŌ921ōĮš˙0ĮdČĨ_Ķ´ųtôbō‹¨ōAoĶ5”š˛œJŒ<Ŗ†žP?8=€­]2{e7Š ĘíãÎ=ųīYĩbŽ[xuIŖßo¨Ŧ@ųl€Ëh¤„°‹lúģČN˖Aø.úžŌRęĶ™dōĪ#šūų&ϊîwp ˜Fq˸l˙Āãūĩ7°Ņ…îJˆgROGR6~Ÿ=!…âšú Ŋ74ō˙ņu4—I ÷īģ°ķ"˙Ų€Ĩ[ëyˇą?õŌ"ČQoQå› ô.íŸÄšYlxÛį<.Ãįh!ë˙ų՘ጁ‹āďēŌÆ?¤w`KKôĮîĻ‘šöÚ´ÖĶŖ.ŦÂáō¸ßĀ~OéOKKk{‚ŪT’1v–úŒK$BdU1#ŽŪlDãęXĶVb0#Än2{Đ˙|î?֐ŦaB b ō<¨ŋũ`:…æŒ>Zī8ÎöSėņųŠŠâá3 ķ8u•‡āpÄč&ŗäÕ-LĢnķe—É„—;HūęíĪ_îš`i-™C#ЍÁ rŠ“˙}~u]ÆĀŧŠ’sŖ<ėęÄûVC\]ĪÔ• O ‘žãnG^VĨ6SÜļëģ–vu;c@ʇøz}ō9íĩiØA-ëItŅÚ¯sŽĮ;Sˇ-Į}ŧ.3“ŒÔMf'‘ ÔŪy ƒT¯Lčzg8č~S Ą"‰UPD:ėNréĶ“ƒŽ8äöŦëŊMâV‚4I$æP2Ī1ÛÜpšˆßÜ,‰pHwię8Î q×ÛÛåÁšvžė<¯æa°ŪtųG¯ëÛ=M+ŧ€įq–gn:n<ôQŒ˜ĪN?ŲŸIžŪÆōayo}%ĘH8ã´wØa€Á8=;cŊ]‰7t-b+w• ;ŒqKō€ 4Íß.3I“׸4Ās0Ú0{T‰r ô§–Čęj>wäôÍ1 ¸<õĨ'Hč=:Ņ“ëÆ 0šlįØĐ"Lį=jQČ8$R+ÚJŒŌ˛ô\dc֐Āp6GBą§žÔĐŪ„´šÃ¨ĐĀrzŌr;S€Čā~t'8āĨ!Į­8â4Ŗ‘ÁâÆ 5(ĩy>ËŠ .Ą’Öā#‚8Ã/nyīĮĪĄFm,.&šļ6“K+K:‰ŧÅÉã*Gl`ã뚇VŌė ē¸ž¸Ķ>׿˛ļøâ ,D(háģgåų'ÖŦx^ō}OMZÍÄ^züÅ0={g€xĪ^øĢ{ˇ6>Zr0FsíNCĀāfœa';A<âžvâĄ2„ÁÆAü)ÃŽLRw¸céKŒ i€€Ž>”?ņšQ€Ę)€|ryÄ.Iė#Ŋ@lņÍ!až‚.sžhÜßúS‡­8Ī÷Ї 2DYTĢU†=ÅRĩŌ­ŦĨyĄ3<Ŧ6îšg“jį8]Äāgž=Ĩ_$.9æšy'\Dx99ū”Ô+œöЏĮQŠ0ŧœôĻ@÷Į"1ĀÍ9šų†}čŠl`ŽŲ¤1›H?ŽiÛHĀã‚rpr)HÛÉ KžJ2ŠäSž^ŋįüôĄŽîôĀ9ĮĖōsœã"Ÿ‘ÛœSW¸į§(ųr{Šj(lžũ…)Cī‘B.Oއ#4ĮuH‰,ōzuĮŌš˜ôkũSQ[Ë­J+r0lGĪ´@27ęķŌ´Æ/5KģFœ j˛|ʉ´Bž,_'ĀÎi֚DÆd‚ųî–`ę ļšĪ ‘ōĮOģŽũĒŌЖw}$Œ‘Í ÉÛÎsHåžGzPä0 u5úĻŗcŖEŨÎc.ÛPĒ31 gĸäôĒ%ĩÆšgŠipÚ͈Ë=Äl8_á$ä ķۑĶņ ×P[[Kef—3,¸Ÿ`PAŽsĶņĒ6zŤzÅŧÖ{+ģ™ É Ņív“¸0ųXđFsšĩą'`‡(IĮLĐ$ÎB‘ŸjŦfÂãđĶ— `fŗ(° ÆN1ž¤VnŦåt˓×Įžã*ÃĘA cĐÖ~Žût›Įebféč R`Í`ûQˆÆ1RĀģîbWÉa’}ˆ<~4uEDų¤j)pĮŊÚs=ĪŽņ‘€ĩM`“MU'úԀŒ„ƒ^iØ9G##õ§`îáN{S6cŸ~•&îÎH¤0|šƒ’)ĶpãڞĮįČäw§íãy DĨXŽE86XzS6áˇpŨFsH§=x9 Dœ ôĄ€ČÆzvĻđ[Ķ­/^į@€ŒÔbķ›ŸJwqĶŊXG4­*į\ã§4¸Į8>ôĐŧãĩ7Ģ`)Ļäqž9VúÄŊ´öS##đŧāœāĮŊ+ÔüK4VöQ<ÖÜÄdË!ˆ/ŋ$€W$uĮ^*-{mFÖņMƒC— —˛4…•[s`:āsĐVŠnÆr‰ÁDmįXÃ,‘Œ‡UÉU΁éũīp}ęũŊŧ?ë㸔€wģ2G~]ŽN+ĄÔŧ¨Īe!„†-ąōÐzwā÷īÍrŌY\éW†+ˆŠČą–N0‡žĄ˛AõööĒæLž[1Åw:–‹QSšž_0oOĄûĩ-„ēŊΚŗA:‘ķĸ•\ņÎ6î'éTZy^B)D…7ŗ8Y€Įs¸ŽØ!jyu8D1I3ųQ°âI āûŸJMåé5PŪ(‚×*y™Đ=‹/ˇįZÛ2*—–‹˜Đã¯ûGŌą-oŖ7žd nĶNåFOoZŗ%ė’ĖĘūj)"??û†֕‚åÆ×dvU[kĨN›ÉP§ß!ÁĒÖú­÷ÚNæĩ”ÆÛæCøĖ§ķü(.\KåÜ8c×ÍuĮN€ËR}ĸDl2š Ėøų†ƒ:•ÅȒŨ-­ŸÔGęOÁVõŠĪPšB.ī§ųŗ¸@c}”ãķb+Éw•8Ũ¸Į\ķæŸ~ÕRīQļiĮú¸˜ã-"Ŧy˙žƒøCö $rĻHN7BžŖn[?÷ČĢÁhÆ8õ‘,1׆ÉĮ^Š*´šíē"™î ex@įo§§ËY˙Û),jļđOpŗ&Å~G=đ=ží‰ŗl¸ąf/"°'i.@8 “ķ0ëčŖJĨs}mm¤E.q…`wzg”Üüŧõę@§19ĮōâŖcĀäúuĻ ÃAį­!<팟JpäPzƒŽ)‰¯Í)˙WČ?&9į¯cO ėįš* vĨÆOąŒõĨP};ķ“H€@ãJ' ĀäņBeˆ+Â÷ôå ĀäwÅ6OŒNpsųŌá€ô!U\z Lđ~”n n␠ qīĮãšMÜū”€ĮÔtŨHĪ-Ū›ĒK ­ÜLÂÄNęáG‡Ž..4ōˇ"Ũn!‘Ŗ‘ ä&‘‘Ž9úÖąx1į"Ą‚ÚŪĖ0ļ‚8•œģPšcԜu>õWĐV'n˜ëHŦĮ9úR3Mįö¤1ųÆ>Ô b0ÜoJi]Ŗ#ņÍKŨãŊ"¯{ĐN9Û֓i q×40`Gp)€Æ:é@˜^(ÛČ{Đ7d€i¤M3ŗO6YH8ëL,AíŒĐdÆ sŌ•Ô“‘L8 ûúS.pqŽž´ĨÎxÍséMnŖjFČ=ņM$1=H žį'šq'úĐ17A9ôÅ ČīˇÚ†ˆÉ4ŧĮp}hqˇŋjn[œŒâœÉ¤-‚x ČoâČČā NÃ$ņÎ*CÎШ5žG­<åđz=i„ íæëR Ī$āR!ģĐ}ũü–¤gq4G;ä…Cį¸Îãø\旯‹č>Ô5svĖ7X˛…*ĨąˇŸ›w8ĪŨ'ˇ9ŽšÛvā<’SÍqw˛éW,ņZjÖōyŒánGĪo&~gAA<žāŸbkHĩb^įhq´qŽ”îŦAZHŗ´ 팟ōMHÅC8ÍC(†Xâ‘LR*ē8*U†AúŠAqmU\Ā_aŠK‹›xd…e8iœ¤~í‚’š{1?‡QøRÔeÜ~`8Ą0I#¯Ĩ0üģ›5 `ŧwāP1V2ÜU m6čZƒēŒ,G=~SZAžBIÆ+?_Úú 86Ōgūų4Öâ/€NsĮTĄöÜÛ€w=x5bP ƒ•Āö§ÆdK‹|ā3ŊPFw1ŗ¨įšc7$ôĮ­H‡|9éŸéM’AãžTa OqŌš|;vŖ˜›'ž3]+—ĮŪčp1\¯Œ˜ķžØ˜dcKĒ>r8Éĸ˜į-ͧĩŪsŊΰՆ3‚)PääôĻ#61ך–Fá^iÖ?¯4€rvw§dŽ0šôÍ5ÎAãԐzãķ¤hËŽŲHčTôüép2@ę( ÁõĐ0ÆŅĢ+M$‡$†pŖß(žĢ”÷ÍH¸,VœŒã@Ē ķĪ֐dâĨ*QąŌ›˜ĮŠ Áį‚)0XgŧUÖŠcr9ĸú ÃH8į>ĩ^H#š"“"HÃ#€ĀqVyĻqÖš‡??…lG˜ödۗāķ/nŨ{v"˛fđõüLZˇ ŧGÂ÷=ëļ#…yéķ4MŽy¤–‹ô’ęĐ+`’^0ģFryį#­5ôčĻš##Û3Š^ ô–EÚT¨näõR]*Ęe;­ÕH92§ķĪãT¤K‰ÅŊŦA!H­Ĩ@üĘęŖ§^[Û­_z“st (ũߞ¸'ąā˙ZéæđŨŒ˜ĖĐí˙žo˙Åf _Y¨ĪÚŽˆĮCŗ¯¯Ũ§Ėƒ”Â’Ú;ŸšHî‰cōą˜z˙ŊôĻ,VÖŌ´Âķë@gØéœSXBžcĐãĨK°`œq֚Æ{ P Ī<ũOžb0l7#ļ( g šv:ŠbNqĶ’{ԁžxĀ‘p œúPs‘ÉÎ<āgŽM0r2qĶ"œI#¯zAVęzPÜn`­ gÎd?(ōúîŨÎ}1ô杀ÃÔnÁ Ž*<‚;vŠJ`ũīŌĸ\pG|õ ã‘ž¸¨ŒĢ¸ĻÜ2x5<˜‚3ÁĻĀȹɠ1څʖã€;ĶĐãŒSųQŽ1íJ09 [#žjUBįĨ3p<â”0#ŠÍ 8ã­ ÄgíMÎŦ~l⁠ĮGQMËd‚´ā&ŨŖžôŨÜdMŲ#|ĢÅ5#õ nyĮ4Ū6Ž0HɧęFĨ7x(p; `)î=xό†8b¤ dũi˜N:Pq‘Î9 ãÅr1Û֔3Ō€ŨĮ¨Ā4cŒsíJߜŌļŌ3@Ȉũ ŖŠíøŌ„Ú Ļũ'Ū€‡ĩ#ci89 įŌ“9õč(] ¨4Æ_•†pz3ØūâäúĐUÃ\Û\ŖŨ$ Hx€ų“ŨSĪQéųU ŨOJ¸ļ†ĩģyUm÷fɸœ“ĐcãœVŊ[ÍT—Oĩ•ítëW s4M‰$|n§¨#'׊°Ū‡Jˇk­?"HĶ É[€ŨbzˇŖ}xωt)•\ôôœĀåNyīBŽr:äRŸ›Œv¨e#Äļ0jXÛÍ4‘šd‰ö˛ļÆÆÖ˛Ž,|A¤^äņƒkb:„Zæ´níŦītW¤”+M‚Xö÷'o*}3]Jä¸=1Žĩ‡hž ¸ŧ‡íéeĒĖ!vvāãĀ<÷­ōíS&RKSÖ¨kŸōŋÛ×ėōcë´Õōęz€ÕMPŌŽđ|—zđi-ÆX^W#Ļ?3RŒyąŧîüūu-ˆã9‘ū~ĩ(MĖ‹‚>`iˆŌ,prĮ8<jŒŒ˛€¤c§Ø6¸yëMeûgˆđXŸ”šį<^'‡īģâl~ē&i>¸9=ex’ūŋĮģd{Ot4|˛äîę(§•,sÅŪ™ƒZŸ_n°^Ø5,8Á9ãĩ5’Āž2jU.§jķN nx4씍œŧ¤õ ¤=Í ŗ)žų…qœöŠ8$ŒôôĄ—‘Á Оĸž:F=ipp3N •Č=ķ@ `KœŒņÆ)0zã¯ā$įō¤ā‘ë@ ŠāķJ{'đώn2hË qÅĮ-€Ũ9Ą[ ûRl'%sƒÖŸ´õé@ Á$d‘ÎjLā‘žÔĪ/Īĩ&O˜r(Iæš[å4­Æ9¨‹ VĪôn€p:téQģõ<ūT€*ŽxųÍ4ÆGNsHĆ ä÷Ē—ZŊŦO$ķG ĀiÚšK߉Z,&O˛ų÷Ĩ&ūQõ'{ŒŠĨÉrHėŲšŋz@ä˙8âŧ˛÷âvŖ1oąi–ĘT|ÂYˇ•ü>_ōk"īĮ~!v+Ĩm<‘ Üā{sĮ8ŅR‘.hö @RIäž(ÆTüĀ㎠x,úūĩ:°—Q™‹`[đĄ{tPįíę3[ír%h8']3ôĮ_O`Oāũ€ŊĄô v#ĄŠģÁ'Ļ1Ÿzųéž'ũĐ1ĘÚ<„g'Ķ–äg§§éW`ē6HZŽ!įĖžmŒqŽB.I'˙fĐŌö!Î{Ī™‡Už¤`˙ZqÚW'Œ÷¯´ņĩc ųÃŽH&čüŽŲ ō†ۜ“ŒŒāEnZüBžåēĶ⛁ķ@á]†$'=ŽrH Žø—ELôlŽĪļi˛p: æl|e¤j,ą‹ŋ&V' 7˒8Ā=āMt°'į¨ë‘Y¸´Rw,ŧņŪ†`@Ú:͆īĮņ§mīëHdœ`Ķwy=M +ōķĪĨ9×y´ EÉ\œõĨB\Ÿ˜ t¤Ē2Jnõ/´€3H ŽN3I!Āõ´.úԄ Žq@ ,ŖæšĪ…āž´ūA$€ŊFāã šFmŊ;ņIŖr)Ė„“‘Ži„ĪNi€šį"œÜœž•qĪcؚ\r}8ĻHõlā/zr°'y¤M /LĐrHīÆ(@%ē­ÁäãŠCŧ)U¡<ã Üw¤BÛBąRqÉĐÄC9ČĮĶۃ‚:f”cŠÍēūƒ–Č#­7#=4ŦĀ‚3ša tÉ $íĮ§"›Î=éqÉ8=E5ŗĀ ģ9ÉĨä`d`ô  Œ‘D{AŸLĐÎzĐ9"‘ןĨ7h#ĶƒŌ€ ĮŋJzøíĮCLŨ°Ž\zŌ†¸éH'16Gļ Z8‡ëUīūkiI ~ėūPˇtɉ@ūčü*Ō°2)É$2˙:ĢnCÚÂã Î=>ĩ`)ųvãīŽOãO¨Q“œtÁįđĸ0KÓHmĀ#L‘ˆË$ņŒU O'Í\›˛ŖĶG\‰F‹}–Û‹wãũ“WԂKuŨÁǚáDŧ\}č›ôÆ)>€“°š;¸9ĸ† šČīEw$bŪ§Ø€1NIíR ū”Œŧ #ŽqIĶלu ÷ˆų íķÁ¤*OÔRė‰?‡€rœŽ€sŠR§o\ĶNŪǗ99?OzAВF‚¤­;áL$č@éH@Ŗœ“Æ;PqƒM#J2 CœŠ_áį9Ļäđ?Ĩ)$ŽûS„ã'žœRoãf‘‰=‡RËĐĐ–ĪLū5dļ23Û&¤r84Âs“øv  —Z…ĩŒÜÜÅšvĮæ:Žæô<ŸĨ9›’I=9ÎúÕÅøī_ļŅĩ >á.ˆŧŨąĄDŪSuÎŪzŽ„Wžëž8ŋÔa’ĶÎû=¨_,EeŽ1÷˜}끌Ž2khŌoS7;§­ø×HŅg0M;KuÚŪÜūŲė;qœķ^Ģ|IÕ¯|ØôøÖŌ5á~g+Ķ!Ž;‘ü>œæ¸‰%I^N‰ŽĻp1ôüÎ:Љ]ÕŒļIەîqĪŋūŽ„Vņ¤‘››eģ‹ģŠËO4¯+3|˛ģ3Č:õaĶĄ5 ˇ ]IŪY!Ņ€įßį8õ9īИßs8PŠ3 ˇCœgī9ūž„˜ŅdUEƒæ¸Y6އƒœ/r9>Ŋr+D‘$?<ĒĶä6 ˆ'‘ų:ŠBāōa+ĮPš9#žŪžäūtHށ_oîäĮÎņuęr¸9õíØ6?–A ÆN1ŽNsų}x횠š0”Ž#FgÁĮúŦzqúū§Ž9k"9dųFYžLô#ôÛôŨך…ãŨËļKįŖî'đĪŠũ~´$'po, dŽ@üũČ?—Ŋ¤ņË@v dÅr8å‰Éü~•#K L˛Į+DŲÜ 9f“Ôcîū?VųՀ•‚œ`ŒŽĮß¯_ņ¤X÷*‰ äã;îđīéÎ1ʲ š‰sp<Ám(Č\™3ĩō:ŨCĮ°@ÄépVVŽ5aæĄ{+đš$Œ;0ã€Č΍Ŧ†žIP(‘ļƒŧ&rÁÆ``z˙*S#†ÉhʎNãÆÜŸ”úŒŽƒÛړCL×kĩ–"w4†â§ŠĀ ˇîōĀmžæļôĪęz@ ¤lÁĄ˜åÎOû„gˇĘ89ã’]A˜0”´˛(ûå‰,F[ŋŠã4䙒0~ŒŠų”}îŊĀÁįŪĨÅ1ÜöŊÆ6:…Ā‚áZÎäüĄ% n9Æ៧ēerĘF26õ¯žā¸Ú'9Œ`ôĐÉŠy ۊ@N9 b(sÆsM$/šéNe$ qM(sÉĀ ×˙¯N –é@P Ŗō ‘°įš(f8ĪŌ™ĐÃĨ(Éį“HA'‘ž(Ĩŗ•:ŌäqŒdR’íéL,‘|q@žũ)8¨˛ÛĐģAų˛2HôĨŪžū”1%Síë\­ųŌĩ ˈūÕwm.|Šfˇ2"HzmvÆŌ{w=ŗĐWN *G­a]éK!ģŠÎę(Ōčš)Hŋ6A nR īÎ'ŠÉqF”wöĪpm…´Š˙,Ė€ŋOLįĄģÕŊß(Č'ž;×-5‘ŌSK‰ģO¨nš^™fW'ŽŨxĀŽ˜uĪCéCVPÕĻģ[1%›ÆŒ|É&xUé÷AįņÍbĪq¨›ë.ŦâÆĖĐŊÎ7ļ1Ę1\ädāŒtí[šŪĻ4ÛœÚÍrd‘bXâ$ˇAĪáXVZe†Ŗp˛A=õ˛ÛβͧģíTpr2§8É#îœÕQkØø†Ęöãė줂čũاC0ÆxŨŒņé[ Ü.ÍEäŖaļŽW•$gįڤ܎•qŽÉ؜r3UîEĨÄģLgˇˇz°~øV#8č*´ÛžÍ(^NõĄ5Ž>ÍåŒ~Uj˜œå‡GL>f™g'  ûmĪõĢčJœ…öíL Q´/ĻqMĀ9)= 9´`‚xĪ8ëÅ4…BĖ ā͏‹‚ų žFqÚŗu’˙Ø÷#<ųlO¸­. dvëøÖfˇ˙ šÉųdc>ԀųMÃŒc4RLvĖãōz+Ņ[īsėb}GJUĮ׊#&¨8Ī ¯,ė“Œdg#Ŋ _Ū$įāņNÎÕ'9y XmãŠvNyÅFY9ɧÜt¤|šūtĄŽ&™š'ˇŊ0ÉÔ2:āĐFsց _žƒšœžĀR3ĶņĻG~qNĀ=Ž[#?JV$9Īļi ېHĪ=ø4Ŧ!ÍÃuīF2Ų^j‘cVbxĮSÚ¸ß|B˛ĐCÚÚģŋųŒ–6ŖAÎ? Ĩ-›Hę5MZËG˛{Ģû…‚%îO?†:ūåē˙Å+ÛŠžÛCˇ0ŠáftÜīœ}ŅĐsĮ|×ŦkúåĶ]ŨŨŧōē0œéČôęŊrsUl`{‹ĖŦlņŽ eˆXđšĪhéÛĩuBŠKS)TžƒīĨž[„–yÚæ{ŊåsĪ<“ßåēĒ&˜nf%TāėĪōČõ­ŠíŒ÷ōJ6™LĖĄWf0 ũ@wįĶalūĪ:†/fėXœŖũî8äņČÁį?zĩ3ą¨J–âHŽNHŨˇ“Įlđŋ†OĄÃĸXî]„GüĨqÛ¯=úÜlH-JHÛÜbX2ˇ9åHĪLö{äԅ,ŅĶ{ÚÜ+€C#Žßxw÷Įlã;ŠsXv0’ŲŌLŧFyļ†ã¨#¯‡>˜/[a+ Y­˜gĖPžą8īŸ×žŽÚ 9"ÔWáA‘XŧØ“Üg ËŲ„oŸ´Ė‡Ę^Ëņ‘—ŒäŽ@Įĸå9#ž–ÕŒŠ`ęsĮ—qĪ^y<žūŊyčpŅ;]íPįšW8Us‘ČÅiænXĖ*ŖęíŲ˟Ž9ŽŸyfŗ„Ęb•ĸÂōs֕fäeu Ž0#¨éīüé4ęôŸ\h7&[8Œ‘ąd+6c~،Ģ}ŪHã'=B×°húŊĻą`ŗÚ6GF Ã!ôaØūžõā0´ĒHĀ—'' ķ€@ëŽxÜ= qœîh:ÕŪ“ŠGuhˇ2ģ ˛@0Á×#+ĮBOr=pqŠM4iØ÷u3ĮZLÉ bŗôŊRßVĶâ쎐˜äqŒāûŠžˌä{×VĐŨ;‹€ÆŖŠ´Ž¸\uÍĐĶn<ƒ€iU>^áHňÆxÍ5Whë‘QáAäūB¤ÛåúĶh}č0?HCcŒwĻžFåN')€;f¨‘°¯Z~īNëB}ĶÁëŠ\dĐĐ0\ēNE ŒRäĀ?‰Ŗqõ&€“žAæ…äâ—$…Īĩ;€ĮLØ>´ÃÔc=1JO$~´ĪOņĸà ļÔ-îĨēŽ.^ŪO-Á#¯?NjÁ<‘€:öŽWQđ]­ÖŖ6Šmwwe#ųžtŽ@zĀ÷ëÍgÁŦøŖI,nŦĶVŗLļØY€SŒ•' Û§­_*{vw{KIÎh_˜‘ˇŦ[‡^ąk¸c’4˜ÂČ0N=;u­PÜãõÅgk8Ęāįĩ*äœãšMŪüŌŠ$ôéLÉ,Ã=*AĶé§!N:æ’=ĘX’s@€~´‡øOZR{qÍõã9Ļ š9Å1 ÷ę\Į¨Á9ĮˇĨFKlâœÄ(ëÍuæ˜HÆI îËtĨô8Ļdį¨Į€Ųā Ō'ž=iI8æ™ŋ’8Ō‘ģä`t ’ŋ1ÆjMĀŠôĨô䃞´›€N¤g­0“¸i›žlĪĨ9øã ÷įž™ Ā9į9Ϝ ŽĶƒÎsK•ÆgāŠāät‎T|Äsž1@ÁSŒpi8 đ4åÍ ¤sĮŊsZ…„‰<Ĩ4ËMJ˜šRÁ'‰›Đž^2TŽœņŽ›yRxÁíŪšë*úÔ]\éwđ“ēVCmšæn¸gŨČ'=¸ÍTmÔF†ĨiöÛå)ķĸeš5}õä ķĮcõĢč (āG8úsKí ˇ.ëÛ֗;ˆČw›¸ŅGVÜÚtģ-MËđLhÁIÉįēūq\õĩũžĄĢZNÕ#p˛ÁqFxžüũ܏nĩ{-…ƒĪ hu+ˆ÷98'' k ĩ9nu;Ÿ5ËJ 5Ô!^K*ēåIé܍­„Ū§XĢ„úŌÆ3֓r[¸ õŠGļõŦØÆ’Ũ įš¨į'ėōpyŠHīœúÔr˙ǧ4ã¸tWA͊d/ŲŖü>QZŪhš3++C øM}ëCĘōOqY÷öī$n áJãž…#å9đŗ¸ôcüč§\ô‰2?Œ˙:+Ŋ3°÷īR)Û ­F¤Î;âœzq^qŌ)ų##ڜŧ €E5r įō§zķĪjBJŽQĶŠ—ĸãŪ‘Ķ%w;b˜Ō'Y]ŧ×dnˆØ*ŸN˙™5*€8#Ū•€Q“Mf嘀'$Ž” ŠĮ“ži€¯R09ŽgTøáŊ5_ĖÔō‘ĀĨÉúŸ­r÷ŸĄXérŗ0ųiĮ¨ÎŊhŠÉ’æ‘éoĩGĖÅajū-Ņ´%oĩ^ĢLD1~ņŗ‚p@āt=qŌŧ{Vņ–ŊŦČÂ[÷Ž&˙–V䯏=G\ļzŒąƒ“ŠÂi*á9č7g#8 F9čs÷€=ų­cCš›¨v ø•ĒęĨíôÜØZ–e;¤Áõ#…ė=ŽĩÆė,ęˆ•‡Ė$žlžįéߑô°Ėë´GŒ Ģŧgƒœpzô#>ÄķÁĢËĨė'‘* Á$ ØyySĮ==9Ų%lĄˇĖ…xsœŠîņČĮ>ĢWtPRŪYĸ-¸d†Bpp ^>bŧž3ÜuŠīŦR+A´"s¸Ē`)鍭žq–įkL…“HžBģ”Y\š"UāЁž"†ôZ•Ŗĩē$Fîč˛r@\’s…¯ĘH!¸=Ēxtíë 1Úūg ‘´üÛI !\ō=ūī wžSyĘŗŸšMÜŖqËʡŋāÕË{å†alH§-lX)ã€Qđ~O$g×"[{ °hÄK!EU`8mšÎršQž‡š8û˃sOŌRTh7´,$$ˆāō—oEėAĶiY-n–)‹gvfČ%/˙ÁČĪį‘Ķ×^ĐßLŋ%”ĄB‚šŧŪ ŒtįžÜ˙EfÛ ļĐRÖ5 mąķ0F8O§_^۟“Meß+[*ƒĐäaßPžŦOžîpIŅ>ŠŗoŲí1ܰŗĀĪBņ}OÔĘ×ZÂĢ„L pąė:åĮŠũ{į{•aâÕåØ1 Œî“#<“–BzķŸĄūîÖE` ’PÃĸˆ3ĮL cãûŊ€‹{¯Í+åąÂõÚļ3č$9û¸íßÜՔ¸×1¸A)Ũ‚>Í!QĮĢH3ßۏȆ\é҇ōÛtäˇ 9Č;ÁÎIũ{åĒ´ēJŨ~íDrĮũŌšQø• Ÿđp߇PÔbĩŦȧæ[sŗhé’ąšü88?ö”m”šŌåķũŅĩöûōĮaĐRģCą‚ēo#@û•V];&}8VįHųOŅēÕ[2x ōc•㍈r‡k.#īm'ĶŠö$œWYƙ$‰ ųŠü(zđŊ@ėzTÆÖ9Ū xrJšÆĀG*öæ—0š8I-nŌ%/mÄ*Ûa]ĨF:## ø“ŽãŊW¸í‹<3yÎ„ũíũ ēNÚŨÍekÁ_';Ųēe‰=1ˇ×IĒ’iŠw¨7å^9pFÜąö>õ\âå8Yt¤(Ŗ ¯°1ŽOUÚĒw¸œžƒkqY“é%I ’81’q’@>ŖŒāåøæŊ ô"ww T‡!øvP'ŋŨ^ĩ›5”ÖČŦë–ÍŅՀ\gŸŊsĪS€ĢSŽ k7gH\6áV9 ,ĀĀ`;ō'nĩAíT… Î1˅,2GŽrŸJî'‚ ä18F“#|DũÁ×''^:žÆąîôŊ°ĮûĩŠ\šđH9ā†$|ÛEh¤EŽccaUÕÛ铎߈Éëū5b$ä*H¸Ë.qŽüøīםg¸ŗ–„lˤšĮšĨXG$ŒËĶXFčŋ*m9ßôĮąˇĻMÜxOÄRh—Ÿ; ĶåĮ˜ˆĀ㌆ũ}ČäŽG¯[OÄI4lŽŽ)VČ#×é_8GpĒŦ ąā^ũ;c õ¯Dđ?ŠEĨÂi—.ÂÖRDüųoŨséũ}sšįĢJęčŌ2čz˜*[Š\‚Āã­B›X‚^ŋ•?!JÖšM‡`ô8Å0¨ņO9\ņß֓Ŧ8ČĻ0wõã”ĮL“ĶŠ“åŨĪĨFā–bFāp2NiÁ~P=¨Ú20x .öĀrŽsžô’š`>”åU×­0@48ÉöĻ.7ĸˇ“ÎhÁūTņŖę)‡ŋJs=ąQ‘Ū€ Ž@į rAĮĻjr§’*?aÔvĻ€į|Ũ]¯¯o˛On­°Ú*åā†'œŒđ@įŒÕë +KHd–Õ|¸Ün(íLz)ûŊ9šŲ Ķ?á'ē[=[ėÚ´„ĩōUņĘ<0 1‘ƒĪLtē5ĩėVŋņ1š9n š-Âũ㏧šúžĩODOR=â Šu mæI"7!Čȍ28īœÖļū:TQĒĮ‚~bqß§ōŠrˆ¨(3úR¯vhÜ>c@ gœŽ¸ ?ë9$æ—h;OzÛÎp=i¤† †ã§Ā[>ԁ‚ã=ûPFyâĄÜžvŌĀHFBÉ´°Nz/4ŪĒ09įŋJhrx4™Á$u÷ 8éēĢK$qDĪ)Ēâä IŠX䃞}`kę×ÚaČÛ:t™uéM+°lUņŊÃ,w*€KåcûØf|Uû FŌũœE&]@,Ž6°ĪO”ķĶŋJņČu-Ä7Ëmq6a0Å1@ '…\Œāƒ9Į95ŗáßÜ´Fâî\ÜY:+I’KÄįrG8 IõUĪ įGOKĨŠęûWĄühc…ΎĨ@ō*3ÉíßņôrØ9˜į5‹ēvžNãŒŒĶˆÚ€pMFš€ŖĄīN2“ېĮ ã"ĸŲÂķ“Rg2ipGå@ ¸  ÍiĄtžuķYE‘™ÃŲĪœÎ°Ŧ#Õ-n ō/­otŲHē)Üm(0xí€8íZū$ãF—ĸčī@‘–æÜ0Đ@ۜäŽÕ§hēkŨÁ5Ū‘ũzŦŽŠíŽF˙įœ^Ģ[÷:Ĩ<ß8¨2cnâ9Į§ëSpxäĐ0IéČĨ$ƒúT2„çlÔr†s‘Š‘‰/׌įÃr0`PˇQĐO‡´Æ#­´\ĀEhČ ÂŸ˜ƒŠËđņ·tÃÜÚŁ˙¨#j„mĄ(Æ)ŠŦŋ)Ëw÷ÍH>P 9¤€?ŲǏûĮ1ũ*)"ÎâH9äqŌĨÆ×• Ŧ͜1RÁ(ŪÆÂúu%~Y~´TڙjˇŠTßŋū„hޤô‡ÕŧЃšz6@Ų¤–'8ųģԈ2Ŗ×ÄÍDūŽ™Í81= 8đ ;Ķ@pN:PûrE6BĨsíůˇo­DālÎytâ“ĻĄ¨Û閯uq"¤QŽKaÛü˙Jņ_øúë]yl-_ėöŽT†”d‘úbĻøâ9õ-pévĶŗ@y˜ã’qۜgë~-ĄÚ`ĘK0'8ëŒ×]:i-L%&ŨˆĶtĀžvœŒ[¨ė8ÁēÕØmŸd†5,07ŽFCâã…Î0ØęĘr*ÕŽž¨˜‘Ö7ÜÄŗXNxõ6Č<IįĨ__ŗĀąŦ­*ÅsĀąČ-ƒÃ)h׎ įŊkr,fÛé/$_h˛3€OĘŽ†îpX÷•z-6 bgE ËĩÕ rAq¸H*8#N:ÕĶ$ŦˆcˇhVLnys÷H-ˇ‘“Í´ûuâ–2[ÉYĻs#†/!äHÉä7FüŦ*\‡bĸâ@bˆ$Ëķ¤ĮšĐ“šN9b>ō÷qVáĩģžû<"Ų• gePģŽ0¤xu8$ŠŪŗŌöD#ōY #bĻKn<¨.CcŖķtŠĶ{›H Đ5čG2ļØĄcæ/^¨¸n‡nč*\ƑÉęž-ĨIq4Ōđ7ˆV2ˆ )`0I fNÄy§ÍĨÄlæųD2BæC&îĨĶõ#=}p{Wa¨[ÍĒŲÜYG§…3¯ĘnŽŋ(ÆüņĐŠ¨ĨĶ|?HæfŠK\—É[zwĶëQĪ}Ęļ§ VˇáS•œü¤q÷dNGĶ—7>‘¤™‘$¸ 3 ]žp@Üŋ?ãĪLŒt¤Ņŧ)vķīRĸŌQ’ŲqŽÜ u?ƒ{ŋw/‡t‹“{{tŽÕŲ°O$ļOuÉÍJ}„ĸhZÚÛBî7NĢĀ÷äœĀĮ`;˙tUį6ļ–$ްD¤üōƒÎzåļŽƒ§n?ē+—];YÕĨ ņ*ܸDÍ,˜ĘŒXŽŦcSZ¸’K™Ž.åHÜ &•‰*˛‘Ī“ĮŌŗmuŲvoxvÛ.ĸōIŲąįŪ'oo^ätâ ĩņ–™8-kaĒĘĀ’dũ Ø>Ŗ5˛|;eÅö[8cqÕįÖ:Äz„q­ũ­ĢÉ4hŲĪ–J'âx#$sĮ5{PŌ-´?íVŌOm;Į€ą9`äĢzā•LĐā¯a\ë'ˇ:}š•5ˆ‘IfûC+“ĪŨyč*å/S†ŒŲÜē$lawPDL0Ž9_ēœÉ?/#ž ÁĒ—Z<ck|/P9Väô#=Ɇ>c=?P°Ķu-$ĘXœ “†ģŒvÉúVžšą/5´Ō]Dã÷°Č2HG Āės꧝Ic"‰Z3å>hÕzģĪ'Ī<ôį“QF1ĩ]”ŒæN܃€TúōßįšôKKoĄ[ˆClEȑ[$`“ŒķČÆ0AÁik:įÂŅOķÆĄCĩ}2Ŗhįž2A#īvĢöšN‹Á>6ûYM7Qßļ˜…ßčŦF8íÁöĪ ã$~ŸOZų÷UŌŋ˛ØIæ@!ĮíŒįĄČ'nN=Åkč>?Öė-bŠîhχrāJĨĨ+‘’Xž€w9?Ĩe:\ÚĸŖ;hĪoāƒžõîÎI¨m5 k´O*â7Čá˛CÁ5`“ŒįôŽ{[C[mÜf™†bGˇ4āØęi…ŲIšĻļåGTĀ­“ƒøSyĀۜõ Œ{zô ;ÂūTå$÷įŊ"›ŽG­ ĪåFHäŽ0ha’NqMÉČÁã€9R?Œį‘š~FŪŧũ)Œ<`úöÅ@ëÍFĀ`ŒđzâŸČ ÍDÅB1=qք<.tUŋžĶüëgy$ķ%ƒpܯ€‘Ķ'ÔgKEšâk{ˆĨ÷8 )ļî%s‚{`ũyŽ^ęė]]Ũĩö„ÍĻŊĮ•æ+î:œoÚ>`8ãiĪN9į§ŌāHt¤ŠŌæIP+yrĘŪa“××ĀŽÕrؓDörqé֗8¨Æ)FvÄĮP1Í'õú‚„ÜNxį"—wĄ<ŒSŸ‘‘ž(E‚OŠëL=ũ8恀@ž”˛m‘@Æ2rĐ e†¨„hX Ā8įüäSËmÃ銎[”0Á'9)Ĩpš)Æėô¨§¸H2˛ĸäĖxÉÆךƏņ>”—Qĩ×ī+Lš€įôŽKÄ~7Ņ.4æ^\ģĢ+ÄöņÆã•'wgsšĩÉr;Ņq„ē°*OQõäŸC\§ĩĢM/MŽf*×hû­Ķ<š †Čî¸8?^ÕÅÉãíPiŠG8ųĻē”īf$åˆa@?^ŪõÍ<×7Wjģä—sīwÉÃzz}x:ⴍ+jɓšŌÜøîsi4ÚlP]°$Íæ &A‚āḠOôĒz&"ŌîŧÅ1%ÉFwU ÅŊōrŖÔį<ŅĄøf{ØcēÔÕĸˇ|2ÆĢûŲ‰äP?žsĶæĶZ™ŸTˇLBâÕČråęĒßÅĮ įŋUÂÁƒ´ ŪÔeƒx§0eB@˜ĒvŒO­H'œÍ2Sō0*rFsN†FįHÜôôώeč*G‡4ĪkXŋôZyČũ+;AÜ<;§dcŅč"´Ôdd‡4úˆŲMÃČ˙ëTqĖ&%×;FW§ĄŠÁāŒ­CŸ”vëúš œˇQUŪF劘:ŒsUޘÅŋŪÂäI.ë‘˙Äöüg8¸gūhĻës×oĪ­ÃŸüxŅ]Jö3{ŸWFÎx9éS‚ŖŸN•)îr{ŸÂ¤näŒ×7$\mP3ۜ˜Čüę4É r0O=ąR1Ā^´€k°`ŽJįŧY|,~CßCøô?—ŌŽ ė™;#É-ķ¨É+|ûœššëœķ‘מš÷āšžÁáŋēv‰Ē0A…#?wŽôį4ĪØGvŦœîŗm=2y`yũ8ģ,&ĸc•Ųļ6Ò˛A^¸<œ}v6Žtē’IöЌfâŽÜ‡æ›g’xfÁpÎOvŪÁ]•×qa& Ļ7ā–Œ̓‚C}Z‘\ŪÁo¸í-9Áfn7o`8ī ‚3“[ļú<ōä]ĘŗhÃ2d+pK7“žœTJEŖ‚Ū9U^?2BšKxIb'nw‚qģƒŽkRÆÖæeXĸˇ0€2ofAʏ”Ä+Ոé[ļÖ66vŽËä[Ú1$œ…R înC`ä|à ÕΈtkFŽ1rˇlH €ĘätĮUüŠÖmÜĢ mĄŖ!ûQ’åˇŅË.ä?đ}ūe=jüvpØĮ$PŽØË‚Ā^sÔ #ˇuÍcIâ;÷ ÖÚq€.vͨÉåė9ĘōĀ|Þ:úS`‹XÖ¸Ôã†Âėŗ‡+ģ‰ ŨœZ›>ŖšŅÉwcb —¤*ā&7`dāÁ˙ž įäņŋŊoė­(^0.f!!ŧģ›ŽĢļ^Ķ­Ô\K ēÔ3ËråŲ› Aô…i­˛ DT O `Nü…'dœúxz÷Vh¤Õ/wÛä7Øí˙u ƒ“ƒķzgëëZšnŸkcc,6đĸQÂŽũĘķüŋ:ҌâÚŲ `Ž1ˆÛķį‘…Š ™†DO'§îJ—!¤$°ūõ\ŽŅæãĻ2|ØéŠ ZNˍÛŋ”¸ūUbBâčĢ Žāp ‘Ī_”Sd]ˇąļÅ`œņ 8âläő>QÎ>QHdíKtfčļōg#$pŋ Ĩ{ŖXß\Ŧ—ŦŒŖÛĪĖĻc€pFG^G'Ö¯ŪĒ› – ˙Ģn{Œ­W9Y0Xnķ¯{Ķģ™Ŧ6˛‰öÆĒq€BÄØƒÅrzåØÔoĖķųU F́Æs‘“īĪQ]6ˇ#}’Î0üŲЏĮ˜”Ÿsø×?-‡ÚeC4ŽƐ ÎÆVĀ|ta×õŦ_S6spÃo cĻD¸>§ >†BŖ‚mm%ßÚNø"†9v mpėN1Üõ­=JōƒĄ-ųˇG–×xãæã“[ēbCcĨĸÉĒŎXÄō)Á(ũätõõ­\Ŧ$ˆílaŠ)ZŲvļÚėēŽDØ#8ü3Į5˛ÆęId–øĮtQˏŪ/@œã§ÍGöf¸ŠuyėŽPũ҃$s7?xŒžŊ=*YôŲ  °ĖÁkyšz;*ÛŽkõ*Å+‡‰mi>ĮįûÆ&ļ yoԝÍ×߯jA¸É3‹ ˙ŖŨų× ŸcÛ ÷ЧŽhėa1C¨¯î÷+Ŧë.ĖDŲâB{téTî 0ŨåÚS$šĮÍÁcœĻõĪļ{S¸¯ĄŽ9ps6rd¸ąmå0 ŒøæĄGÃ"Ewlķ|š vņãéÜč:S¯%Š;ŧ›ģo=[×r[¯Uū[ĶŌώKÜ,Ëö‰Á¯”ĐēœčÄ)=ûŅÔ I í“ĩėp\˞$ŅČ#e‘BŽ€`îĀĮCģĄĮZč­ÍŊí°žÛ99 O\÷ ;ģr~+ ÷6¨´čfB?uhČFSģĻęŠsp4§ūвōĸŊ•›Īˇ{ÂDã$cį!ĄŽiZėÅȗ:÷ŲC TRŌH ü¨Ŗ‘Áîsœ Žvî9ZņL#YĄ†#LúöįŒņО‡žĶH°]_^ÕYáXåfˆwc lž<ĒŽ¸9Ēeē׿iÄhU$ž[˛ßRŖ¨āuVĘ\¨†ĩ24mJo ëÆķėûŌŗc|¸<ääƒĪ9éëȝjŅ|Ea¯ÚųöR’WlN1$dö#úô=‰ŽSŅŖy<ՈßšH@§cALã=…<ĨƑ}ĄKՕÃÅ Č TŸīŲŠķםšÅKQ˜Õâ{ĀbqŒĶ[Ojō+ânĄ§ Vŗ71Œƒ,cõõįé]Ž—ãU?%؅ÆIÔĻ č3ПĄŦ]6‹SGF Č$wÎ)A ­ĮŌ›ö…Č`ĘØô4+†‘Qb‡+|ŨĮ8§ĄÁīL œíķHŽœįC@î OlŌ`äcŌ›šNvqëJåÁ恎å$g֘ŧ‚-ß4ĻNŖĶ¤9‚9Îl˙‘@ ß8ũ)¤‚§ ZyaÜū>•Á8įԁÄSIsĒŪÅ#ÃögÁso°ĢĢíų\ą<†\vÃÎA­ģ (tÛ1ojDĨ˜ÅÉÉį’I=OSTĩOZjS}ĨZ[[Å]‹ql|z68aėF:ãĢÖ&æ+8ŌúD{”YĐpø$öČÁÅSjÂ[—ČįŽ)€€Ãāđr(ķ>RN6Z”.[Ļ}˙Ī­HĮmų•¸9ũ)Ëß TF@7ŽŲĒwZŊ•ŒfK›ˆĄAüR6ŅM\M—ÜüĨŋĨsZ÷Œôí ´RJešío ŗîO¨īžzcšæu˙ˆFđ=žˆ­ĩžCrĮi9č?tķÁlt>•Íiūšō>äŗyØi ¸‚ āˇ$įƒÁÅk}Y] īkúŽølQ-#bDb–nĖĨ|c ÷éÍ`ĪmĒęERyî1É#ŗƒÜā|¤úđ{ƒ]ŧĩĒGö™Ąˆ0Øŋh*ģ›ĸŸŊôäaˆ…]¸k[k‰4ø"yî`_1UĪđž§8”# ŽwkNkl+r‡Dˇw+ĸ}ļÖ ?zČĒQJŗ áAcāe=zāeßge ŌŧO1ÎtQøÜIehãp'=9ÎXSį ŠéÆÜ° #eXō 1ˇMģq–TÁųOĩt_†&ŗ“í[ēD#ÜĨb=‡Q–įŠ<ÆęŠ}Š5ÍŧRI4D wÎ-ÀŊōBž˜Ú? Ņžĩ¸Ķ§ļ¸Ņ'š/4\üš*sĮ¯luÆKu?Ø W&Úō{vg`Jūđ3æôįˇG=ķG‡î kįSŒC#î–=ĖŽĀÁ‰<˙= ŦŦĮs^ÛLĶuKQ ŽĄrņ ęcOņqžOüĢ•×lŒŌ ­į[b)xyc'÷oדÆÂØīÆ+¤Ôôëï û{§ĩbëČ1ŗ\āõÎ[žyãÖŠßAux-ž{Ëi>ĶÚ3ĀÛˇ\ŽpŨa‘õÅzƒ"đŗŦzƒ# îŗü˛oųžáį=åᜐEz)Į$‘í^AĄß}›Qˇ-ļ)%AČÜŲRBû€Ëõé^ģ 7 r1ĮBÎiOBĸÉrŦ3ÉéžÕ VîOJœŽ{įØR7•‘dL:É ŸLqH@pHÉɧíÎzP´­ķ(äôõëAž)Æ0:PyįHŖįęh<žM9{qMGÔä:TäpSŠj U;F2riOįš@D܀@ČĪ4ŦĮn §GNsCTį°ë@ Ũšˆ õ§(ƒ×=Ē8Ņ€,Ä9ÎGÅ+n\” ģ#?Jq?ėņQČH^1×4ârÄ}qM1Ģ’åyīīMn-(*čö DA!Z ´#ĸŠilN•ožĄĀ˙õUØÔ€vļAöĻ÷g*Ȝ˙œTH¸, t8ëĪ˙ZĨ€~ė dõĻ„ä}Ī­1;•b°AįÔũjŽ äÚ°īˇUæD æĒj (l0é@ŅōÖ´q­ŪđGī߯ûƊ]mTk—Á‡>{ö˙hŅ]‹c7šõžÎ7÷ũzdČOÅE#íSRÆANsøŠķÍÉb87AA;ŗĪĨDn)û°8jc ãô¯øŸo{¨x• ˇäX-ՂķՋzáOĪŲ$;š Î{WüO¸“M×ō8ãËDĢķ !€9‘oԏJڏÄEO„æü{ؚ4Ūc‰™Tž0Ũ¸Į#ū5Ö\h7MŦĪŒ6ōA‹wšÅ6š^™˙5āY<˨Wĸ”Ģ?0R¤œysŽū•č–$Žģx˛6Ze†B=9čĸ´Š&¤DŅ…‡ĩmō´íh#D#2ģÍ"€ 8S÷[ÖĩcđŨÛKÍfé—Ė\u°ܟēŊķĮzڟJ„m‡aĩ?ZVēXŅß(JĮˇØėĩ“›erØÅ˙„{L2E4ĐyōHW{K#8bT“ÔãĶŽžĩa­âKc,ewT\d˜Np=0GJäôī^暎Ú~Õ 1yÍhĘY¸‡0[8ƒÁ*ļeûTâQ3\HŦ쎒-Đb/_ž;psšvĖęÚmΊ,tÉŨZĘ ^{°W öãáģáÉm>ĀæØ­ŌöYbB b<§žw(ŽNŊH¯|K|u D’Eō‘KU‰fO<÷Ž‹ÃöÁôW\iˇ3š”o%ļažņũGÕÎ:ŠŲŦ¨F…ģ(äõâ1ΧŪĪãVmŨUČ`8ÉëęÎö_ŌšG°"bŅčÚFī3’M™ÁŒrD}ōOâjWK¤C/Ø!‰UũŨäƒ8YxAęk%–ät2Ė‘$¨Ûd€}Ŗų5:PŊĐlā#.ŪÅB¯ø~ĩĪMjåŲ ’|ˇbRũų? ?Ä=zT—:oŲcŠ6R@?Ķō:¨dôĄÄW:6‡3īd,Ÿķ˙‰^T?e*ũyįōΟįXŌ\^hã˛ÕdDļ3!'Ģō*ûaĩvkŊZ6d ūîįĘˆ}ŠrØw6e\ÜŠ2d NīęÔŗlkfĀRģXũė˙ VĘm÷U“įųŗhO&E=ŖõŠP—ė ViŒžYÂÉa&s´Œg“BFņ¯ ~@ô`5‹n‰A –Ú1œã÷iX Š]‡mڝ¤a˜ã}œƒ8wõķšeŽŽąKąĩ,í#åR~UëķœS°îmO.ûąŽ ÆzlOņ§ČŠƒį÷ąãÖcŠČkų$˛—ėÆĘSåį+s×äSĐéÂ¤{ģ÷pßb˛`YH+tܟ0‘˙,ûXu+ęĢō[Z1;$ļĘdჟbdĮ+]AĻA™í¤aÆ%Ŗûā~tšîŖ°¸û6ČJ.BI-å…8*ĮõŦCuuģ[ŦN[ŧ U€áƒHŨzm8ČīÅkŗ7kÕš&¸´šÚËį”.:,NãÔ{•Õ[Ũ‚ÆšŒhPaf-‚$Ī;ĮŽ?âdģ’IVO˛Ü2D§ÉI ™‰>ŲßiZŒs i|‰đč0gvšn}ž(’hjà Åâ–D’ÂäĶwSûĶīĪŨ˛ˆŊ7Øūu ÂėK$b=BÛåb7ŧoģũqã%ģŽūõfHô(´Ä–Ęc#?*˜ˆö¨.ŋ˛dIs{HL„(ē?ôÛ†úPĶ5ŧšęöVįeĻā+”Qüꘂ6q%ɲqŒˇ›`ņ°ālĮod\n€Ũ~Ôīø`ļ;Ņ-ąvT[ۘ9°į§÷”͏XæZKYŖYŦLiÎËų"#äĮEgË2ÄW2>wËÄrw<|ã'Ŋh­¤ĐÆŽu ‰•œ:Fų3Ô(¨ī,ęÕA07Í6<ÛpāÄtČįŠÔ,aĪe,Ōŧ–đ\[ŨE#ȡ E†<Î2Œr*›}ŖIŋ•æˇ¸ž2ėæę;V1Ú>`ØÛĘdm'¯Åjŧ˛HįÉĶÉS!!-v˙Ī|`îã§§§§:WZt˛Ë…Š"Ēۙ#Ũķ÷Æjų‰ąE/&žĩ3ØisMrvKž2CvįԏŠÍQŊ¸‚)!ûN•|ŗĖÛ#<î9ĀęF9Æ@į$؃A˛\‹SĶĖŅßKŧp‹‚HÁęO9ũ9ŖŠ_ęv:í”zˆ¸ē[fųĒĢž d.aŗ´€x<œ Ik ÷VöŗÎmĘq1ųŒ?evÚ¸6ä/˛€20{*â^ØéĨZC$Åŋ$_¯÷pz{åŊģeģĢBÎ_jš]/’ļîÂ~|Ŋbá[Ą sŸLŒõ5˜í^ēˇķfQ4Åbˆß6ÜavõsqČ­š&Į#nˇr2éÚߕ+ČIJ tëŒįúãFkÅpî6ڜíŒ4ĖĘęą9Ī?ũlØXĸMâ¨P4rŧZpŠw°-ōœgšäŸĻ}yM#JŽįEąvŠ%lH įš˙XéIÔîD懍üGn„øîÖū‡čß§ž&‡âŠ“gjęŖ$Ÿ?úąüĄŽŦXAŠˆ°#eUÆ0G2{Čz ą‹.ĶlH`€ŋ.1čūÃō‚“œ{•œxø…â€v}‚Ëq=<ļ˙âŋΎ4áņÅ qöN¸˙Vāč^ãķŖ=šč1C–ã;r1čFHü:uõ4ųt¸O “ ķ•V?ÉHî3Kš‡fq_đąüOŗhąŗ.GģsŸü{ßõŲCņ ÄĨcfŌė˃î)ÉįØOæ vOĸÚĖąÜ!Ä/×ß(Î}NQ´vųcCrxĪĖX~_ē4sC°ŦÎKū˙mû2Ķėlīķņ߯šŧwâŨۚÂÕÆACō˙ãßį§^+ļ]õ‚BøÉÎI͈†úÂĒKáũ=ļy–ˇ Ð3)gŋËū8æ„áØvg&ŸH•™øÛ‘ļŪz`ô˙'.đė&™ĪËã¯F}‚Ô¯LĒ1įÛæëČüņ׊…ŧUâ‹Ļ+ową‰áVŨFsč_đëŽŖĻN:ØtkHĀFˇV:Oo¸ŸøņëųŸSRÃĨŲo`‰dTų–TŒûŠęyéīG:mÚO–*„KŽi†>%†@X%´jc|íĀËäŽ:×Mm%Ė~˛û"K,ōØAyc挘ÜaÅ`ŲE–ŊĻÆŗŽiÛ&cŽ:|ØÚÃ=9Į89č+­ÄWr Âŗ^ÜĀ#e_˜Bœ(Īœ`žzú`¸ēD–ŨbĮq˛/"ûH<ŗJęØ$ãÎp­Ë{ØŦõg’F}ĶZųŅ(fÂFģWŧ6žGŊs3kēlĸĘĘé„*PŠhĘ9PAmšČ\˙8ČįŠvlFæˇöģhĩÔÖÅ k|Š,Мåz‚AÎ3Fq^ëW‘â—L†("03JąÛ†L*…t#8##Ī^•=ä—ˇē žĄv›U G‘ŧ|ŧ79į ÚTŸ˜đ0§áĄg‚đĄ“mģ-Ģ3dPÎ2xūxĪē ,†sír֚´Â=ãÉq<*pĒĒXräõ=ë×ô‰â›O‡ėîv‚<ÁüąųũqãúÜ3ŲŪ(•#ûDk帐ÁųŠäô$ŠëŽØã­tžņ´g,‡āF ĪĖ;ûÜûß$œnŽÜôŨÚëëLûœ}*5r]FTŽ2Aę=?­=œ)ŨƒĮ5Îj) į8§nËr{S¯ō=zfƒÆp>´ ;ēSļž”Ääp <`/ŨÍ ØÆâúr€=(*6į&›œ¨!yö 'iāSQ‘×§™į8#ڜąČ=:æ€"#$ŠBV G_J Č'Ōžøæ€"Î^ô.HÆãŒöīC€ŦFyÍ&L@ë@6rqĪJúĻ ō);ˇŠF`C`ŒcĻ)­Ā§Ļ6ë!ŽĄŲ[đcŸ×ŠÕA€@ĮåY:QŲcÎ3æËŽz0āūĩ¯B{õĻĀՋX R…]Ü|[P(É# ?ĨA¨Ļff ëØâĄšPņ¸Ũž0AmŖÆâjžÂĢNW'Ļ8¤Á+xˆņ 0úC˙čFЎâ(ÕŧE¨?h~ßí+Ž2V!ÅÜú‘Ī˜H8Š”ĩČSšqžsSBrŊpk„Øqo™@G4šÜIÚp{ĶŨÆ})ę~nNEXnčF+Čū/..÷ l˛Üg8ũ#އ>Ŋ… žp:ōŋ‹IŲž^df éōÁúw"ĩŖņ™ÕøN/Ālĸč3ŖT Á ’Jõ_cߏZôä2˙Âc0ČhŪܲļyų (ūú5垇v¯lĨrLŠ 8éīë^´Ņ*øÍŗ•p_ŪõëJģ‘OcJërMĀXžŊŽč…gkR2é:‹C!„í=ÁŨ!ĪéZW-—^Đ5ZĖ×!ŖjjâBß(äķ'éÍaÍÃx4¸ŌŖHZu™efDjžY7ž@û§#ŽĩŊ­á´¸kˆ­Į™ˇw…ÛvÕ\ķytūUĘhv‚{$SÄņ(,Bē0Üđ lQP#Œž6§ĢyéíīQb‚[GA nžŠÛōŽ›ģ/ũ3öÅY6~köGkCīœg:r;ōjĨëÜŗš>IĶ;åŸŪķ$Õt‚vL'…,Ņž~˛FK‘€~”XfšØųwMž¨ĘÄrˇĮƒŊŽ9“ßųúĶf>Ts(˛ÔØĒŗgí`…ųō žūŸĘŠÅö–•Ũô$Œ9Xįn0_ŅÎ* ĻŽ5˜;T;•đ"y™~ėcŒūOĩlF­Ī˜cĒG‰€#ûO˜ tŌąu{ėÖowÚ¤—&ÜÆĖqēAŽz˙?N)H,Tĩ×´Ģ;‰îāļU™›Ļ‚‘ü{ščŧ7}tē%Šy6ŒĸÃ%ÉÜqę ņųÖ5ÄŌJIKÛx“æČšŅœųŪŦ>Ÿˆôå ĢĢAĸĘInv¨Ī.}Îx_Ō‡f`—ĻĖ֓ąnN'VéšĒĢÛîS5ĢęûîŅŸÁrqévŽĖĢŖé, ž8'īIŒ|xĨJÚž.ØfÄĨ@â'`ŋōĶĶž:}=jl€č_Tđūô–{‹EnČę‡ųUG<1p55ĀF +*]Î0&“>Ill˜Ŧ鹇 ąŦ…Dą|ālWŒíųÛdŸAųQËŖ5Ŗņ/‡eG ­EŒ†˙XAü*t×|?[ûb.yÁ¸%s Ã*5æĸĨYT g¯•ūĮųâ§ Č 5õ˙#,Œž‘ûŅËßđ˜xyŖ›SšÂŖ?N¸Â˙œUyŧIáۅQæNî1ĩ’ÆLõÂ{Šm´í%ÔMî#™-–O@=j›“$…%ēąĮËūļØ÷zŋųÁĨd;š1ø‹Jķ$zŽ6äk(§û>ãķĻŪxŽÁnĶ5UyÜ-vÎI8Ē0ÃĨ‹xIJé Ĩ—)G§ĢT7ÉiûġĩĶš‡Č@ūšāĀj(E¸|Snd ‹Ē+*•ĀBŽšã~?…ģv5`kß ßŖŨ¯ĪĀ}sˇ×Ö˛RÖîk‡cmVc÷/$\ķ/÷WÜ˙“ÄíbchŽÉ•™×{!ÉķWĻqëMĨĐ.h^”Ũ‡;ŠĀŋEäíĮö…Dž(Õ6] ŒŽrŖø7öĩQ˛ûRÁnVŪôîXØíš#Œ,GĢĩQÔ5&Ōm ’Ū] `ĄPųGvbĀ‚zãŸJģ°\Ūēņ.¯ki=ÔúL#\ļ.ōz‘ũĪök§°šûM…ŊË(O60åI'i#=q^¨ø‡RÖĐŖ\\%¸,JsœõŨ´ õô¯S´ÔįƒL…žÖę‹’ÍĻLF6Œrũ(œ9EtwWļöˆyŌ Ũ6 tãĪįY÷:Ŋĩ˛‰ 厰XÉõTŽ1Öš;}BōōinĻŊķ ô9•†=Ų8ȸį-ŪŠ\ĪcgĨyÁŖÍ8m€Š ÃĄ$–$×ŠJ#l×ģÔ4—† {(íb‘AxbŽb` #;rzujåö˜&´Fk#(ŲŊméü˙.ÜMļąy¨īę=+(%˛ÛLuI.ÖhF7If€ËÁ#ix÷œF=)Ϙ‹÷rM¤a¤QjŌi”HSą“Gī`ˇB@ĻŲAnomo,ėoîšÜĨŊē¤^Z*äüîØËŲ €@$Ö^ë)ĩ D‹^uŠ4|Čã•"É#;UûgŪļŽõø-RėuyŽnļ>ėؓü[ēzõĮzAxįH†ûN]R Tė ˛lįrœí#ō}ĢÎ`ē–ÂųdFXŲpFĪ—?§LĀûÃíwZLvIsgu`ēÁ§hí’ØĮR1œā“ë‘[[đŒÛí< ĖK-˛ōAĪĖ=ēz¨ģhÉ}ίBņŊŊų0\ūæ`Ŗ.Ã÷lĮ=ûŒķīVŧRڋؤētqH‹ēI&ĖŽ8î285Ãx>Ų-Eō_+A${šo”ŽŖ<āĪ÷#4kRŨ-äēXžžÚĖ*Ŗ[Åæų GöÉŌ§•6W3ąÔøwÄVú†‘$év—p 8ˆm@ŨƒŽ9Ãzž:×imp&…_ŗ.ė‘Ž¯/Ķ­+x­"°š-<ļe.ËæÉüēôč0: ķ]’x‚V™‘­ĸ¯M“d•ÁįĻãωC]¤tņÉĶŌ¤ßĪ^•“aĢŲŪ?•Ę_û„áŊđ'ëŌĩ1÷¸ü;ÖMXŅ;‰¸•íJ­´¨#ņĻŧĘsŠFĪ@?Z@?pÉ`ŧûĶÃ(ŌŖÆ3ÁÎ1MUu˙Y‚…9°8įŽiNXtëÅ/öúRôÎ1šDFIcŽi¤rõŠļ ō2vã5į8ëš6ô=yõ¨[ ¸â§;#oJd¨Aô#‘MÍĐų͘ĪúDÞؔņøq[08`ØČ8Ŧ} °lŠÜĪųų­ū­•Ü9ĻĀØŗĪ“ *“Ŗ`ŽqIl§ÉįŪžŲ7S֘ ÚĄĪ\bĒ^ä@ĮˇÕ—%IlÎ85Ä~b„'$Žã Rz‚>]ņ2ėņ>Ϥœ‹—=Í?ŒŒPxÃUF\Ÿ´ŋˇņ+Ļ)Øg͞)ÁÉā KmūXG†œ6xŠ"ķøĶüĩãŠ>ϏĘũwg8§!c‚[ {RíČ9ŗR<ô d%G œŒt¯"øŠv‚čÅōāöÛ×ëū'ß>Ï~+Æž.ÛŽŌáFc•†ėŽ„/Aøcķ=yÆ´~3:Ÿ ā+{˜ĸfōļ͐Ž@Ãũ;œW¤¤RIâI! 6ÅĖqČß0#ôS\ŸÃ{G'/åc!;°Ë‚č:¯>ߗo`í&¯;•û˜­¤×1’Øäė.4øü3{#Äú;ũȝoŊB•’TãŋŽģMĶėdŠ'ŽōHŗšˇ[ÛÆī&?€ņĶô÷Ž[Jĩēš°ŋŌVKMßl„›‰$”¯3É<Ōēí7LŊ–āšßK• vƒĐė(š$°ĪOÖĒ[ nMōĀŋņ<šUŨ¸bXÔ÷Tzũéŗ (IΞFâ_›Æ^ņđpã°?‘¤MxmâŨŖØ<Ļ0p-ãlöīéRËÂÅŖđĒ€?ģä¨wũŽßÖ ģ)PöÚÜ |ÕÁyB~së'N*cmИp5¸ˆf&8sŸŨĪ~hc{ĩq Įe]Ãí@l˒ũ)—ķČžŽ įLGĮjÎēŅė^B_D‘q’&šĮŪná~Ÿ—šĒĮKĐãØãAšæ3ŸÜĖğƒķ/L˙1@Ž|AåūčØmûAÆųķįt (īüëšĶâ×.luŌ]>ä§Ī" & €IURN;ƒĮ­hˆė-Î-tAÍzFŖ#Í?Ūœ}xĒw6nEwf5hHžš–f)$7H9öëUŸ]ŨY-Ë<0\AFČ҈A@ÅH*Ųē¨'oÖĢMöË÷—I[[‰/&™Ô´7@)ō”ečT0N;cŨ%֏2Jú“ßËr-A•ä˜(’MÃú•áyÉÆ\`,÷ö0]]ĮĸÉ*IŊÎ2ɋ„ îĪŸsÎ*ÄiŪžąâ˜<í&eŽØyĻÖIƒÄWîŒ\îĪņwéÍI¯ié¨1uĐÖâ Ēø#‘„_`jĻ™ykĨÚIö a–I <›m&* ŊŒųÍj¯gÔbĮ‰°¤¨ l‚‘ čŲĪ˙žŊĒ/ŠVĐÄM.Ú'.vd3)+oi XÆWj <äääõÉb§Ô5-9!tŗŌ/Ąž@c3F€m °˙G ž i]]\ZÛ\4ž%GtËíÄ7Ũž˜<œū•ĮIy-Ô˛\OzŗO1 '8'Œãîācn镉–ģ‰č.ëÅeąŽ2O.ŌąaŽšųēúäā bûICVåe ø<6rséœnŲ'5$ž4e…-‘zųƒoAްĮž¤Ɩ“§jŒ÷¤öĖ"ˆš{úāúäpO'šˇjIĄ¤iözŦŦ.o5H“j.8Û{pßx…ĮaúôāŽßFŌôÛU/Ŧ^ŦEÔâ{ļA, 8ʎŧž;RĀobŧˆ>™Äšˍ@ë'#/Ÿ_Ō‘<ãŪˇ9t;Á…0x#ŸËŊc'sDG#Ķ vŪ'ˇųb;TēHÕã-î?JŠ;mM¯ˆ<âG ŸõÜgŸC˙}UØ ™ŦvĪĸÂÆNcœŗ ô\zzÕ{˜l¤:üĮÉÛ˜ķûĪOÃˇj„‡sZHuX׍AgņŒ‘Œā{Ô/˙ ڍ´ãķ IáŗŸĘągĶôYnĖĐuW ØË,ƒŽģØuÍ>Ū×IŽhZ=ōßįnHLôl6.FšÔs2Lšk(–5Â#Ģā}ĮæiāK €IŖ[\BÜĒķ’¸ę}˙ZÍŧm%. JîŲKƒ„`{Ŝāŋ•S°šŌŧøâĢgk9Á"<đŠĪņ™ŠnˇÃn#đÄ Yz‰bBĀ)ôôÍ[yĻ>Ty‹—G8ܝ1õSĶnmŲc‹UÔے$#!ØgœÕ̃+:ˆĩ“F_õ–Äã˜ÎI'  ­ÛÆOÔ¤Į–s ˛ÃĮáTæŋVmļĖL „Ž8›Žæ÷ũŊKģHâCâ¸;?wåF1ÂņÉ˙84ÉoųĢũŋg1ē´kž%ū¸öŖ@$šā"Ũžö CrvœËĶžGæj°Öôëk–ķ5ې šT1ÆF7?ûūŊ˙)æ—To1`šŌŲrÃ.͌.xõųæ*•Ĩŋˆī5K˜ŋ´­â(D…"pTn'ōŸSųĶI.ϝouâŪ˙fFmÉ<™=1ëúĶä²ÔôôÉlŖFre˙oŽOę)ڎ—Ģ[`72\‰ŸfÜCÉŽ>į ëÖąĩ3Pˇš16‹jĢ<žP–U‰ūfŨĶ9įƒíNČFôWLÎGØ.If9ŨĀæSĮ_NūÔéŦĄ’í˜i:{.[pĮI9û˜˙#đ͛EēH_ÎĩSæäb 7 }î€H1÷ēãĩa5¤ob×GGšcåoŪ`”&H$üÅũĮnÃÔŌå¸\ėžÉyzZ 3ÜH“<ņJcōI>Á{Éä¸w?ũ4Į˙¨×;™FËdļęC8g•××Ņ[ûßĨTšũdŨ#ŪG{&rĨšâ.ûŗG \ęĖjā0ļÔT™Ŗũ žņúHG§éO´ēE†'ļ•;:sȋŋ¯ë\ŽŸĒ6FKÛÖÊÜ;‚÷=‰üGĨh‹ģ¤ĸI(ځƒ‰“h °r\Žrŋ Ŗ‚čŪHŨ.ĩ \bԜƒū™ŸZ‡Lš2¤RŊūĸÅ8kqōÄįŸųãל­^B(†¤ņȉŧ6ëfS ųÎjKmjōØĮ—m;°;QMšÎ{̟îČw4ų@éåÔĄ‚ŨMJ.˜ũę…<)ôĮĨeKŠGq<Œēžģ.eŧÃūzz7ę?Ķkz E¸°%3ōF6äl'ûâĄϰŽĪötŲ€ÖRI˜t÷ũ}Ŧ ØâYUžG°› IũÖG,˙íZlļë„Ãidpû§h?ŧ_@kIlˆo,w X&ŌTÜIČpįÖŠOlj$Â0­°n/$$ ^š_öMŦŠÉŽ6Äŋfĸ‚RéĀlG¨^;~ŋާŖ=íėw/nō¸@ ‰K2€‰ĐärāãØTvZÔPŧrÜh–°Ŗ;äE*>OP=?SV^Ōŧå+ 8cšëĖ\ü­×å ôĄ&˜vš_ØíoeH&—æuCˏīuŨũÜ7Ļw–žu։/§ę‚6ļPM@é—Čü+ƒ›QĶ#ą‘lÛSI^523øDo˜ņÃzví^‹Ŗ-ŠčÖĘē„™Kt.<üã :ƒĐsßMč$qÚ^\lļ„]ųĒŪ[*¤AQזBļŪÄ×>€Ö•ēÉáû nĖ÷r\m?~ÂGEČî}€íĘįƒÛߍģŨu}OMÖ6LËĖŦ#‘§$/sČį“U—â;x6ė2Ā[¨ČeëüPŒuõ=ž´^ã2u´:ČČą"î”IdĮĘÆ=ŽÄgŨĐTļW—OyŠM¤FÎé+ÄŅÂũĐsœũÉč6Žt­b"3ØÎ-QŖH¤AŠ´‘Į>¸íÖēģUl 2ĪhŽ4ƒėė0Į’2$ëŸOSCbG9ĒjöņGo§.Š÷SžØä†qˆÁģ1ĪST´:ŪŲ-fšļŗŲōŦKöįI#‡ Ô˙L įĩ4ȝ5 NâúAo'šæ8–QäÄp1×ۜwŊcëļpjž_Ų4ĄöŠ<Ø]ßxFûė[+Čž; Į…ŽĀŅmĩëžX-BbČxļŋšF'=†áÆ2~€fąî!Ôuhd’æĪQˇž ‹bōĒdž?Ä\’xā äœÔqX[>ãNžÅmfĘnNdwąīéĶĄoĸßÚĩ¸ĶŽĸWfXĨŗšDp¤”0ä9šË˛B(YxYüŨē„÷–“ÍX!"\99Áž@Ģú„M›m&Ŋĸ*mĸžŌ]ąĒ‚B€XđŖŸ\æąĸļĩžå#‘¯ ĶņL˛× 9uqœg<‚NŊĢŦĶ“IƒOÚ-N5—|”™ŗ¸ž9ãķ464rĸ{˸íĄHšÖÆÜ˜%‘I\ę~L~uMõDĶ`–(mlĤí’I!.Ŋ˛Äß§ļ7uģû 7OŽËO¸ŊGV/s#ŽĖįĻåÎN[đĪC€xæ\ʈ˛—8$sŖ8Éã#üöëqWՓ&uū ŌāÖĨŋķv‡uEČá”āB›ÛĩWņ)û/ˆ/Wí:…ŧ*UUãBT cīō*÷†´¯XĖtëhÉe*ķŨHŋpĀ鑃ôĪ8ŽĢQqá](VÎ]B)¤cpĶH9$wŽqĶ…Eí"­ĄÃXYßŪ$mŦá&8Œŧ’*†î 1ĪlŠŅ˙„Wů$ļ$†ˇ‘ˇŗ=ĀdnŲëģŋĨ;Ãē3AĻj-r‘Gö–ũÕ¸“sįhČÎ>fL} ¯S%KtķX< `ÉõīéS:l5Î7Gøson!’ööi]HmąD$tÉ$“úW|Ģļ0NZ‰}ņžÕ(c°XĘMîZIl3 œ§Ö=j=Āã9ãŌ‘ĨĀBw´†I¸î ƒ×ŠsąĪ:Ō`a[¸ŠSÆyëÅ  ŽsL9v8>õ(;ÆO$c­#ąôځÎv3ژÜw4âļx§Œœ@DvČ8õĸLpGĄ§ģĮ úS°ŗĮzkp34§Ob§ž™˛š­xĀČëÍcčƒuƒ¨ų}2įūÚ=lCÕēô=ÄkZą…=ÉĮįDä¤yq Ĩ´ÉˆĮŠįņ4÷Î8ĻXĪŋ5€ã– TĮšāķÍ1ÆU¸éFĀ|ˇãĸŋđ›jģēųįĨž>F9Õ°˜vqaEvGbw>Ĩ @#ĄM‡į‡# ĄęIüēr+ĸˇĶ-MãFŌNpr6ÜH?Ž_FöŠ#Ķí™ “>FúCúF}}ë.eĐģ´b:zČĶę‡Ę\ˆŅBũÅô^:šĸךKLŲ×õeQ–URA#t™čž„øWKc¤ÛIļdŧËÄŦvŨĘ܏ũ¯öéSG§F—’(–ë…÷—R6Feã–>‚š’ŽtjšöuũSŽĖ=דō˙œU”ŧ‚bĶX¸+ží$p8aíë[ˇ–ŧ .gP$Œg!‡/¨'œÔIc4 mÕ.‘6ÄqōŠî‡Ö‹ hĮÜĪ0Î灃+6DmųŖūņ>۟­6ÕĻ’X ×bF8dŒvˆ÷×đÕ¸ŅÔK–öGų×ĸ‡?~.û?Ú¨-t7¸‹p‰ŗ%ä‚>x‡ļßįEĐX͆õD°îÔtų6€?{2˙v1É čOjŽyVrLoáÂĮ2J?ęũ†z:ЃÃļĸ$u‚Įæ1õĩNâ,˙3ųÔg ]a–ŒŦkjrAōķ€g¯lįņâ“B*Z%ËF§Éđû´ƒø?ĪâjÜąÉRģŲ۟žģ SōšĀ,Ũ9ūŸW.‰Š\ōūĘcĀŧ‰?wû˛q÷{âĻ iî%ûRĮ4‹‚ȝ(*;ĒäŽ˙™Ĩ XŠoo=äͧö=܂7!]ėųŗŊI;øų\{ũjĒØ<ÚĨĘÂ?<€u"H0‚sœĘŦ[xkNiīcM<4qJŠķ]HÄ`-œdūĩŸŖCŨĮŲôëvTv@Eԇ{ãø[<?zŽ€>įK‚Î{-Ú#ÛnŸŸ-ÚRvũŠõÎqTu´‰fŗUˇÖâ˙HUB#Æß”|ŪžÕĨucq$ÚtqE$Ī8ōî$ä)húuū]憺ĻÍ ą&ķY˜5Ōn Á9?)ÚČ>Xa>ņė\|ÕĄ{ishĮGĩ‘ŒŒ…bLĐī$úvüë–ū?˜Ņt”cj0 rĒcqôæ§žˆ™ížÕ.˜2į!/$Qū­šÉaųūX ĩ B5{%ūÃPĨ\ÍČ]ø*3ō“ŒgõöĻÜčp§‘ŋÃŅdžā‹ÉŽG@žõFāi_ÚvĀGc&U÷cRŪ­ĘrI'ęÍÚÂąFÖúUŖ…‘1_@ä’Āʞũũé[U°Ķí­ė Z\đˇÚP|.¯ sĮnõvéa}>mļ:ÔlUņšˆ^ũw•™ĢÃp‰d>É2mē@Ũ[žĮڜŧō9Ģ÷öÚŖYMæEĒ((rŸo‹Ü“Ö†"ļĩ ūĘmĢâ'Hž_,?ĪåWn0isīžÖ#ĖOōÜÎŖwŽĩOYąšM!äyõœ€œIzŦŋx2}jíÔw0č×#~ļßģsķÎ:ŧŽ)bæëOk9#‹X c÷ļÆAĀéí˙ęĒú}č’X>Ņ}-ú5ģF"ōß`!rŋ ;øĪ¯Cí™u OPKFĩ*’ZK`p8ÉŨŌ˛ĄÕnŽeAĨ*ypų{î#Ž-€āß7žyëęhĩĐloy°Lđiir‹"´g`Ū ų+¸ĮÆG<ÕĢØãĩŌdˇ–ëėņ¨1Ë:Û:ɂI$88PONøŦÆÕsŖ›Q¨ZĩŅâžWRC|Øãæėq’99čiPšM0Ī%ĨĨėĨK–Xņŧ2rqü=€ēâyGs^F7Z}ēÃ~c†'ØÛÆĀĖUšŒ qĮ:˛ßĨˉ /rU\ķų/į\œš­­ŊētÔ2Ģ)$Fl’2ŧã8qœÖÕŠėMjÉo-¸ŨŨ›( ¸=>”œ@g‚O˛Ë9"a@­ÕN #=ûW5¨Ī=Õôe%s$ët‚$Üc•‘žPH’0:cÜWCņ;h"ūnŌŨĘU 8 ĄˇŽzņÔāT7ZÆŠ¨E|-­ĸž`’Ŗ Š\ƒ•*Ĩ˛OĻ=­E§q6tvúTäiW9YPÉ7“'ĪĐ0䓒'Œü¸W>ēšĐĩg1ą(sæÆ„ļ@ūƒ†ŌX]Ũj*aŖĻ^“û§įäįžWĮĘHÕjķUĐĩŌ–ú‘XÚcy>ępŨ8äoZIôaĄ‰qeöĩ‡WĮnaž žNŒĘ>\÷‰c“čžõcJ¸‡Mē{¯:qo4BM…YŖ^O o—'Ž1MŊHmôŗoĸGhGČ~g I#Ž@Q’ääĀâ+’ĪG’Â[—,.Œw ?"Šfp=TĒøĶÜgÅ72ËxpĘėX°`nÁÆ}ąˇę§ÖļŧŖ}Ēãíŗ.ƒy 3ŒŸÛĄHĮb´r:vī§=č(\“OŒ†“ž´Ō„Ž)čģXn8ô #aø‹_ęÃ{ہĪUŠ“âZŗ|@Õ $ķ_úæ´W\^„ĩŠõ t gß5 éPÜāžĩ 9ęJā5‡LŅ´M Čę iČËgđ  0zņī^_ņG7ZmžĸwBY‰9ÁûŖķūué į#×EPÖlmĩ-6âÎåCC"œƒųŽjĸėÄŅįūŧ7šDî‰*‰Ņŗķc °ŒņŒg#듁€*;8d‚V<— œāŸlnöįŠéYūvĶnîtéĀŨlū[Ē3ķc‚zq€IéŒqßFĪũfˇš’IHT°ŒsČä~#zÕ÷3FíäOÖ<˛sŧ)œüĀq“Ôįĩh 8„­sÉ ŊORsĶ'Xq%…Ë+Æc”ĸ‚@Ęđāô€wëW-žHæ"įF¯ƒ<íôā’9íPÆi5õÕĢâx%”c™ ųļŸuęäį=…Xļŧ†æØfBX.Dx=s“Œd}JīT„čé/ČĘĘĀ‚[9;IõĻ*f†)ØÄŦQˇœõīĶĻH>Õ6nhŌí@’øm –ÃĄ^•U6vŊĩĶđĘBJŠ+ō†ŽvŒäžĻ˜ąOæ+Į>HF&]ʼn˜ãč Ĩ–ōâÆâ6&§ ŸaÃΐĮI#B%2 Œ0y?(ûį¯nŖŽ*ydĢĀųŊ}2œũ1YōëV௝"ƌJ1Īnút5 ę›+ˆ¤a{†*ĻTÆ@ÎN2î~h°™}Y|ŨĄHũâ’ô‘†j! ÜŦ­ü0œŽāŊ2Ũn<Đé/œ7–HWĀbGÉ'ÛĨCmp†rŦ‡(–čČčTƒģŽ3ĪáĮZ‹r”u…Û‘A÷ ĮųTW3 `ē –7ˇü˛Īķ4õBēqEåV<)^ëåņüÍC" ĶŽŨrG—ĀÆú¯ūĩ43ų`ėfâäeĮüˇ¯ÎXūī†,>ŋ8˛ų“oP>Đx<‹Î*û6í:,°Ë2“ø¸Ąî$5ȊŲŲˇmPėOâÆĄšR‰pÄdˆũų?ŧ˙ŗ2ų‘˛.6˛‚ŪĻKĘÎĨ‰§ų1ū´†D‡É¸2vb~ƒCDyķ&‚\“ūĪī$Ļ]ą‰ddÆ6ŋ^ƒ‰+ŠÖ|`đkN–°Ë$É?˜:ÎIaŒqßĶ“Tĸ尛￯ŧČgxËGi8ųå˜ūčcū÷?JĀÕ`—zN‰—ržįtƒ€˙–¯!úFjžģ{yi. –q(1ē*ąŨŒ+ƒÉÆ:ĻkMbImĘVSåąĀÛ°ûŖGšÎ@’CÚ´W[õ0¤¤"Į”˜Á`pBŒ!?'ŨQĩˆîqÉŽ‹ÃķîŅo-ĘŧfU]rŲ ä’09į$zŦöČęų,Č@;—fqœ’Ũįp —ŸųåTâ2XÜ3Œ+1”( ¨#ÆâA‚9<åöšj„™č6j%ŋ-° Žr ä|ķsQ@Ŧîwt éá†—KēK‡–t'iØCɑÁéõŠ-žb¤2Pāũ"ÍbhRŌÎÕŗžėqīōÁū5mĶeømĘK’œûy§úū•Rxãˇ`š(b\˙^üūfįrÅšû옟ûf˙ã@†ÎÍ(;ŠŦЅĀ÷‹ü $ TDŲ%J“¸•;ƒÕÃF„îhšÁūTŲÔU$°‚Į9ÎĐ8íŽå@ šuÔMž7)į¯ß‹˙‰ĒKö‰Ąh#iv ō2V2߇lŸj¸RKí˞4VÃøãČ-Č<rĮnNr1Æt t‡ąãQĮˀ°ã×ßī`8éd¸‹VŽÆpZ2ŽŠ#%ēǞķ˙lĮ>Ļ™6ÄÔ$Ž%^öÖE„ĀIˀxÉāu䚗ÅV¤]ĨÄJ‹´‡L€@ÁŨ‚=8':ķX77īsOÄą?˜ģ¸*W§ĸäx#§¯5ĸW%öwڕBjz”ąŗå}ģŠî@b:wéfŌs†Õ5A&Ü}Š‚ņĐģ€\U2ō÷WHžŪĄH–DgU9Û3ĀPpŨA:q]•¯‡­Ŗˆ5ÃKu1M†Y›'oĻĨKvcJį1Ÿj&‘låŧGl°XŽdųÎ9;‘›>œĐqUl|3ö‹—•­uXÜŋ,n°Iú|­ųŠî4Í2įN„B׍u ¸‘J`˛9ú~4čôk kŠ'ļˆE3î,éÆKœŽ‡ņéKœ9N2ķÃ3Á{IŽ5ŋ˜sû§$žā8ę@āĶu/ūáfŧ×.ĖJęčûYöú’HgžŽŌ˙HļÔ䍎ŧÆōÉ!ŒšæáēˇEÍœv’BžBUm Ž˜Å50å8uĶc´Ÿí/ĒIsĻ” Īn#pŽ$0 ō‚;är9ę2­`’¤3-ÍĀŅ™<ĢÛ ÂÄdne*GO\įßÛX[ZCäÛÆ#\…ã ĀũüŠ`Ķím–c‰]ː‹Œąęhöƒå8ģm+NŸJûMåė(VLR~öŨ›°}qŽũ)aĐôÉ´É/loŽį…Æ#upHl÷OÉādņĮ5ØZéVÖo+ڐŦ¯ŊŒqØtŖDļ‚ü^[ĸÃ#3™WæŸqĪĖ}‰Ī×Į œâå9+ÃZMÄM=ÔŗdíwWGã'ø{dvŗiš:k&ē¸[Ļ *rn 88į'ĐļŠ‘kÚÂ8^C™ÂĄĖ¸] dƒéųIą6Ÿo,ĒŌCAÔI–Oæi9ŽĮ$Ú7‡­õ¨ážkˆī@GH7Nėã$ƒßž)ēž—Ļé÷Ļáī˜ŧ„‡-…ÂōNNpzg×Ĩu“é֓˜ŒĐŦÆ#ōoPH9~ ĀzV?Ûô­Rálĩ qĘr°]Žģ|¤đãčHŖ™ą4RÔ<;¤Cuo-Ė÷y$¤yf![É qŊIŠ5}Æ+a;ũž`’ Xb”n$°9ĮC‚rGĢ>cwa”ČīGrnrXpG_Ą#éWā‹ÉˇŽ&‘¤*1æI‚Oä)s0ąÅŪč^k[›‹‹Ī*gV‡29‚““×nyāU‹ī éöRN–rÜ`d)™žqëôüū•ÖI SDTYá€#ōĨڊ 1‘ĮŖ™”ķ+­?AžĶšäXßE í,bŽ"¸É\ī?+G<÷^ Á=ŧ÷V—ŅOl ‰,fšÃzûā`“ÛÕ k"í?ˆ UÔtÕÔôų­Ļ Į˜€dĄ˙=jšÄâySY$˜Šégķ3ķ[´ŽĒ¯ôÚ1×' c[ö6°0`’ŪŽ9˙‡ũp{ßĮ&ēˇđŤÚ_Ų/˜ÎÃvŲ€Ę Č:vé\÷‡ĩmÚHD—ÖA‹ePy9\{žä’zņĸšh–Ŧ_ūÍš…‘ãÔĩ ŲÎŅ9!ŽČR#|ĒÜũ*ė°îÆc+>Õ§0GcÉ $GåR2~b3ĪĪöz×É,,rîÅ]Š$g§ŽY,G5ĨŽc|¸R ŗ-WĻBį=xā(áŊŗKQå‚ÕāGPN \éŌ0 åpŧv#Ļ8Į Ŋ–Xē¤sĢXūČČėK($đØ$ôįkQu TŦeĖųĻC1ūOŊíLšŽ-J&‰ĄF˜Ęņ’ĄŖ)ųˆ<Žr:š/Üg%âXköR,ĘĖ‘‚ģŒļ8bO¤zÖ^Ŋ%ļĄ~/,žfkĨRöĪ YWh9į#< ūēĩí.|éŒĐ3†ö8D‘H_2,üŦxû¤äļN2iSė­žīHĶ4˖ī´` cË U`O÷rxĒæbąĩŖÆÖSCu(Ggļäīįä?1râRrOZæonĶ_׃ąy4Ö¸1ĸHJ~đĄūégĪ$gŌē2˙MÖlZÎâ.͖FožĀ˙Œƒļx÷ÃÔ¯Ŧīní-l"ÚM´îkl‚Ōpą€9bŨ€9ÔĻÁ—,,cšŪõ/íîŖ•îBŖō7Ē1ō m ~ī'žÂžģz’˜å†Úhü›rû%ˆ‡™QręT?ZŖ:^\^Ey ˇĖ¸Üŋ.įMŖŽ%ĪārGŋJŽīS"ĮímzĪ=ÄĮk°V1Ãe]Ā`}âĮŽĮښZ G?Š!E‘D8i"`…Ü1“ũáĪņ^ͧÂ-í ƒ"OŠŧŸÂvņĪŦĘī´`¤XB.ãÆz|§'=Įėį’pxúRĒúEo"ŧŒ{Rt]Ŋ˙ĨFxŦ Ę1āą>¸˙?Zvđc šãƒšp1ØŅœ‘œPr6žŸSM|61ŒäįŠĸ–ú LaÎX‚N1×b‚ÎpiYˆ ö§•ÉäįŒŅˇœ‘ũhVbFMYÎTqP(š<ũ*t=8¤1X°`qۚUï=ĪZS–O šTĀSĀõ g ũzh?0ĀÍ8ũ}*6āt‚˜ÍŧcsēšįŽr^)Ü(8uūt2zС;HWōeߍ˙j›ōķN?§įZņ|ŦAę}k7G#›Ûö™'ŋÎúõĻš=xÎ1MˆŌ´$C“Œg}sRÉëۓUėH1:gÕišcÔU "lƒL•^œõ§ƒ–9ęOä)‚sŌ†#æ‰ęīņ S`0?uĶūš­7ÄæeņūŖĮQū‹Z+tôGŌ;ŊAĮ"œ“ÖĢ” ԟy‰Æ+Đ{ÆzŌ;zŠBIbČČÁõQˇ’4ĻąŨ“Éâ’_˜m>ĒLešĻ”;rzįô¤Äq^(đԂäkZTgí‘cˉ@ÄŠĪlrÃ'ôŦ9es~5ˊŗ)$ícnī #8åNbGĻJŖöąot kšŌáFɆėár§>Ŗ<ņīĪzŅKš-\äŪ—mÜŽCĩ‰EąžRsŽŖ ÍNˇ2´LVD›¨   ũq“ÛЧËĸęvwQˆPKMŦ`u §>‡đ9ĮŠĒKvĒō[Ü#,€ã^×éžTöč95Z Ö4Ræ+ŨĸfsÕGĖĨ¸ëŲlôf y-Bũ–äĮ+œŽĐ0œeGĢqœVtA& <āëЀØb0N=Aų‰<â¯G4ÖŲ;|ÅĪ éÃ~=1¤Ä[7—VÎĻh†Ā2ÆĄÃœtR[ųŠ­īí§cļ` nųUąˇ?—?…A äHÍ…FmíķpsĪļI=Yš'ECíÎŪ7`˙ŗīøT2‘ƒâ[¯7PŌtå,k5˜.ŌÛOn;:ÕKŋ:÷Ä7r5ÃŊœMäŦNHP@ˇ'YŗôéUĩäŽÃĚ]Ãkxä K9s¸†öõŧzRAs?Ûĩ&ŠŅÅu1fŪ7|ĖÛpׯ@M]ˆšģģ€)fb’TũėŪŪĀUö˜^Ŧ`Û$Šė"ŠĪ]ĮnŌ9äsY°O•Š|AÃʙÁ˙{§åZ6ōFS¨'āœĪ=@íúÔ˛÷Ķ™lŪ ie]q‰cķ6¸āƒžÃšéQŧWĻ'…-‹!;A°@ōČį~߯ÕĩšƒV#¨\1j›{,{¤›ĘÉÉÂãęPRLfų ™$„ ŧÂŌ)QÅĀnŊ:cŊ_[›ckÅ$ra‘A<îZÔYá›!dˆŸv^” ŧĄ•ãŽU` =hl Ød‰Ą`[iņ8?û0¤iDõBģ”ŸB­åW–ÎÎ5)´iœvŽ1éô¨ßKĶƌŲ[žxũy§p0¯¯#‘ŪÕ&_9ÖE˜$’%\ãķĒzˇ‡×[ž‹+‰UG—Îč%䆯pÅzÔ×`PcCŲxĀü*)u{8JŦ˛ŽōpOļqIM­ĢîaZøN;iŨ“dČŪ¨ pŦHÁāŨļ)ڗ†ĄxL–ŒÂį$–b?yę§ŽĮQŒZ‡Pšš;-,FÕũäß*ûĶ~Áspŋé7L2R3Ôsž2;SsęÂŨ*Fe`¸’9âmŽœŠíÔg@“•vŸ*X<̀ŒrČotwÆįhâm ÎęCŖãå•]ˇŖ9Čį§#Ú°nŧ7ym y8ģBpw <ä1ÚĮŠäã8ãJi’ác—°Öėm/Z"ÆĒę˛0U īœ€ō=1÷ŗĀP:H5gˇh݆FeZ?˜šsĮn3͚æßÃd/sCoŪG$Dą-3$ÎIn§ƒÖˇi‘˜üģ•…äcpš;{„Lž8ęÜúS•„ŽZ‹TŒÜGjĄˇĢGģj’?åŽNzvʤ—Rėω™Š„lcķačŽIĒ¤¤ō-3ãįYŗõÉĀéN——Ūrũ™"FQ˛Iĸ\ãÔ “øœzŠ6Ŗ­ÚÛ<ĄRYdʍˆîØÎAßĩOžucyT-%I>ŧˇ¯QĮˇ8ÉÄ֚jA°ļį™Hcd‘’@Į§ ũ7Säm§8É$p6ūX'Đ:Ēũ€“{ąÚŋ) ķ€GcüãÖ •Â#8Œ•ÎíĮq푎zžšč~đéTŽu]“lĩU’\đtüÆ2OĖ@)ÂúâŪÜ´îŪ~ųeo›'`8ížN;Ļ*”;‰˛ÎĨ­[Ü/Ųā€Ęįåfä0ÆSƒƒĪŪ"ŗ´o Ũęo5ÅĪ—lVōŗ‰0qĀ=yīųu`7tí/æČāĄå܏žNŧūžãlQ„  8ŸáMÎÚ QžŦŠĻéIĻŲCi 2,yÁ ’NIũkH.ž;n@ĪlĐNW§"ąģ4ŖfäŋDĀo'ôÍL¸ĮR>Ŗ…Ԝ@ĮZLîb29iÛFã5BÁ4´čņķÆÅ(;ˆ8 .ã­0nĪ=K´ŪĄ+‡ų‰4ÖAÁÉíL\ąÁÁ5)P1œsīLûšįĩ!‰€>lgÜUKģ;køZ¨#š"~äŠ ũqëVæ–{gšyR(ngfęI¨ã•'e‰Õâuy BB)Ą3ŒƒûRÖ[ÔŌËĸÉŕ۴“ŗ$F@?)Ũję,§k­: Ú:(Hm¤Œ‘‘ÁŽ^˙QĩÕ/VæÔj:{ÂÍԖÛ1H A8§ä÷&ģ;A ģ ŒzbŠIĸlyԞ Ö­ü÷†XϏm.Y‡=uõõü3Žėĩ‹ļæĖ˜‘|ÖÆÜ;3Ū¤ŒŸ˜ũ+Õ1yüĒē˜ē:uČŗØ.ĖmånÁÆ}ŗŠĩUõ‰åKŽÉ%Á +3ä` f'Xc7”yOÍĪļsÚĩtŋ Ļ—u]¸ŧŋF/ÆHCœÁ1Äũ)6¯Ė;~ Đäĩ†ÍfÃĶNIų¸;H=1ōū(Õčã/Vv—böč¯8O´‘†#€ē|z÷9V÷æ†Íß_ę’x˙@Sū(ųcĮ×ۉÉXĪū:(­–ÅŗčĐœp9 =P}iŖjc>æž˛)9ĩĘP.AĪJĮûõíOÁ cĶX9Æ)ūÄP3ž:RsŒôéŌ¸ã94iæŖõRAJ™ēcÂ˜įŠ…€ š,}9÷ǎ:}ĩâlšÜ62W e3×ię?^ ķ€@Įjf×äį†(ģ Ĩį‡fļc%›Æ8 q"ûīŽ0íTbģK(¸3ü,įhSĪ^˜÷'Ž85Ú6ōācŒrjĩæ•m|UäVYAdC†P@ÉížÆ­HN&ŗ‚â×2IÁĪ+ĮrÆc€3É59´¸AēļhßæÄČŦ¤`tÁn}ĀúÕvą›Jd Éå’Ǟā”ÉşģÛ<ā÷ŠN§*ÂåŧépĘŨ–ã‘É÷<ãsE…{ŸŠÖu6—yec•wI“ģ9Æ1†é‘ëVtö‰žiF!q>ä$ã¤qß‰?—Ŋiø†4žŅ成2>lg dtã××ĨsēmâŨiŦŗ(v]Ą” ˜ØYX‚¯–;tĀ­4ą›Ü댍ŲŪĻA'îāĩgž—d|ˇ6ņ ŗ‚Á@c͌ŒvĸˇŠe’&†yxrȒŲëĀÛÛÜÔųœ‡‹Ę ĖŠ<œg h¸mÂČĢ×@€\ČũķķTŌÛ\lc܊Äg düU?™Ē7K¤ķŖFІ#~G§÷íV­õhZ6ē0z ‰PįJÅ …ofRĄ•#îŽũvIũ*Ā´ŋ/˜:ŧNã§ĄjŽ5˜a>[\Į‚~ņ•ú3úUč¯`qōÜÅ';J‘˙ĄRļŖšEs ?žŧžVëšQĖÔļöQ:īkŠæ|eƒ8`?){n–+˜ŗœ…˙ĐÅF5X-ĸũõÔPŽ€4ƒ?ú§`šb-*Áį3ų;¤fF$ĀņúUˆmíb,m …đ|  ūc–ēĩģÆ'YüÅc€"‹}P•Dē­Ææoŗ\|ܘĀŋ;côŠåcšžėƒ î ļv‚y?ÖĄ{¨Ã'<žâ°3øuũ;Ö(›P–ō’;x˛AįúãË:4÷;âžúI6ČwD˛,*Fr~TÉØü=EE+Ä 3ŋƒÎ9į'Ļ}sôjˆK3†į’A ä äå¸8qci"˛įÕCʐ[3dĒägƒģ“×;˜äƒÁĪZát]žå` ÄI;”ņ€IÎsÛIŽHaYRMuˆđ‰jI,[‚ägŒz`u?Ũ=ē8BeR×Ģ}ŪP'I$Ž9Μ 0Ē4˛9‚Õ‘Æâvãw#ĸ€Ž€NãVĸKc.‹ÁļŪ$ķ¤aP îĪß NqÁ<9"ö‰ĸÉ},’É#m$™Ļã,OđŠúø åšv$˛5˛ČûH&âážķ{^zũ;WioÛ[$P‘ ޏ÷úúžüúŅ)XnK*‘„DÂ((¤*HÎGĨ"†Ë öéJɅ<ūF˛4H#j“žâœWh rj5B ~ $įŽ(ŖxĀÛQ¸9Į52 #'"šņė8=éЧ‘KiJa˛sÍ7ļiĄ({9?HFŌzE5A ~ŪŲæœzQ–ųšlR{TlŒ3Û&¨=3īQŽ sšyāŽžã4ÒxÅCq^ZI‰šĩ…=ãh÷ķØŋŲ›æ’KdŪ…ŋžP|Āúœ­t›03Č?ZŒ!'î“Ûõü)Ļ åo¤{ũ6ęojvín2. IË*AVä’āmiļ¯i§Û[4ĸGŠ0 ¨ÆF1Ķ$ãęIâ°%_ kWs4ũĒ6*ŌÛIäĪ‘‚F}r0 äU›H5[•līSS´BSËēų$8áĀÁ9é•üjŪ¨ƒĸ ÁÉ9īíIˇp`nlTŠ6ƒß<õĨ9 rz☠$c–'ÚŖ` › :dTĖSv3ų ļnÉ÷ ą ŊĀ2y¯9ņŧÍo%ŨȖ['‘Ą†Ū rrĪ´Š$€G^2:æŊĻėųWœęšچēl2¤7ē|™BÜā“ž2ģpŧŦ>šSą15-Åŧ25X,̈́‘Æ3&íÁœ¨ œž9ヌqšˇđö)ĻIåŖ\æ%3}×zB@ ú7Œ5h­ôRæ8íŅ@Rķ/͎ÜrŨûbģß éY‹ _,r°æRz¸ö$ˇ=ō=‰ŌrIX„ÍWĐ´ö,RB?ģīœõČRYŽÎŪŪ\1¨oŊ…q÷ĮSīVŋn”ÃÁĀnĩ…ŲĒBí%˜ãÔ ĮõĨWÉ'ƒÎ8 FOŪÆ9ž~”Üđ{­*œgŸĘp3éLã’IqMh뜚~āGj(88ãJP@v¨ËäöŠÌž3H ‹3´S•‹c=j<{ŒÔ€7'#´ s8čŲôύ$ ¤Ž{b›–ÚrAž* ģČŦ­š{–Ų ĀČ_sŒā{š3+ƒŠæfr‹8ōÆ!dšlí$@Ī͏QĶĨg;GJ‡LŒęßÚ÷˜æ>dĢÂBTAÎ2ëÉ䎕ĩķq3čj¤B*iĖC^Žpˇ Ž8č+J2ĪķÎĖĶÆ$ŧE#jÜ1ÁíõũkGîʤcšũi_͟yvÎAÁü9˙ žã b¨éŠLā/äOøÕãÉž†¨L@Æ@4Œ0ŧ}*Lüę pŋPÎ_Ũ}čŖ?Ĩ|ZS˙ ÜĮf˙•ŅŠgŅaĸ¤>įۚÜįŽ(Vār;×!CÃÄŌ“æĀ TčM)idzšVa€3H8'Š)\šPÃ'4 ā÷¨\uÆOրX"8ūTæ+ÚsŒôâ“xē{SˆĘOaۚÁr@#9 ˇ–=GzPI<ķKĩ>”Ē6IĀ4Ŧ ŽA?SY×Z,#ycÜQ†SčđŽON•ĸÅyÎy§.Ìãã“LG sey§Č~R#Éã†BO†xčGN•Ę<Фëm lî[z íĮÎO@:û•ëîāƒųV&ˇáģZČÄų‚N KÁBAö÷Æ3ZÂ}?a} ĐŧFHČŨĪĪÃŒnĮ'éīíWeČ@Ûˇ`ÃĄļņúšácYāÔe‚ãˎÔ-ØyĮ8V`§gœāxāgĩo&ŦņÜ-ĩŌĀ0ÜrĀārp9>1VãØ”Í†&Iv2ē(%Fō@=ÁÛĮNÄķQ%æ ߸bv˛‰0ĶnâESˇÕ­ī! æŊ7œŸEųĘ;¸5wĖ s "ČģpĀHõŒ˙ß&ĄĄÜĩ˜Ü”ÄŅąĮīc'ŋ̰Ĩ\6ŋŲ#n0JB‡ų)Ŧ¸fk]:v’2XáĀØ9˙gųÕŌßjŠÕļŦË wįŸ÷[ųԍ-Ŧaec1œb$~h(M:Î)L‚B&÷d˙ ’yD´qDWVŊi‹-¨pĘĶ?Äo2?ô3JåX˜[+îQ*ɑŌB­Ī×i5QŦN¤Û˜ÃĪ)eëôUĢwaûÆl‘ÄwH˙ĮÅ.&\4eÂôųËJOãŧŌaaķ9Ú$’4hÁā´{Júœģ{qLķ$‘GīYÔ ŖĄ-ĪžĀëUVXav0ƒcōÁ>ŋ2)ũj6*#pX3PĘIÉíĩ˜‘×°aBB&Ūžbå ¸?&|vČ=āGéN 3 ˇąq9<cå?U˙Tot‘ŗßšJī@¤ļ1ԁ‚G>Ŧ*Ôc–6Š‘¤ WUîtŒwô4ŌÛJa 3Ā䑂ŲĀão ĒˇÄnJHä|Ęs´uęŊH?{vZŠî9.C}Ēv„l’NTAˇN:coŖS †ŪÕDp¨Œ!ÚXœ‘œāÕO#ŽĄaÅUŠÎo¯f{5°åB—Ë‘Ũp 0Æ;ƒR"­°8 ˇ wdœķÉū.įŠëœ•$,7Wv°ÆŌą Äqˇ9 į‘Ü rFëš˙lÔnL­$‘/Ģä3F āqžŽJ–ĩܒܭq4˛*īTFˆŊ8#Žî‡Ę $‘W4ģyøf ŌÉÔãԞ„ņĮĶ<´Ũ.ŪIļ[[.ÔÜ܅NO~Ŧzū¸ãi]˛ÚFs’\õsܞßūŦt¤Ũļ)+’[Ā–ęc…@Ī'Žĩ(î‘øRüĒ 'đĪzMŒˇjÎ÷-!ņ†bNĖ‚‡Ú2q˙ëĨŽTĀÆqœt46ŌGķ gĄ“éO#wōώŨ āįŠz•ÛĪNŧRę@Úr}h$öÎ "”ČāŸzV~™ ôĻ€c.{Ž”Ũ„ũ>´æe-õéK¸}11Â2ĢīõĻ0 ä Œ˙Zi`Ās@†€8 >cJTg<zBĀ`Š$Š…›É8=¨1Ú¸až*<†$søSYŽ:åHo'Â€üXĀúĶ( ’Oæ“+ŠktųXSŠ/¨ŦqvˇšNĢ—{ŖIŒ˛;ZO`Hči6mž>”čĀN´­Œ ō)€ÃÂäėix ķëšā—ZL€2Hü¨qpy#9ÅDx^yÅNŒđ8ĮJ°OBF(1Á8íTn´ģkˇFš ΃åpJ˛Žœ0äqÅ]įœS$ š™ũf9‘g™wnÛ5Ē.~ŒÆ´ļ…8`cü˙ž´ö?.6ũiyÎ(ģd621JaVfč>ĩ38֛¸įĻ=Š!Œ ŽGįŠaëĮ_N•!aŒįš3ŸË­0#ōÆz`S#ž8īV?ÆŖbyƒHūRš;zMV˛!*Āį§đĄ@UƒīHzū´€2÷Īz‘ƒ×¨Ļ"ÄMHFõÅ#pØ#ˇji;qūsMw|đĻsģ‚ëL ä1šž0* Äxéōƒš@JrEHv¨FIúÔš9ÁčF(ŒĖŠöÁ4 í9ÃīÅšģÕ;ûS=œ°—($ã#Œ~GúŠkq3"ÆÚņLÆČė^LŅ–d!HÚŋuķÁ'ļ}ëĻåņōŸJäl\Câ’.āŽ9å? Fn É$đãĮ†GØ Í>`įqdļN:įĢš Ûi ôŒ~u§ ö˛ĸ/ÚŽîH&Ā9õūYŠĩ‡r5ŋ™—wØŽō:‘3 ū ‘L}UQHž)úü¨ÆŨíŌ¯†ŒåZŨķ‘™%qøō*u[XÆŲ'–÷q"†üŠ]LūLŽ–ŌÛĒa|ĨēŠe=)‰æ¤ÎPĸũĄaEvČėČ*EÃn¸1Û]/UhŖō˜מ*œ—đüķf0ƒš&eIĸĪ÷X¯  ĖVī5ČķIU’Cž<œp00ŋFQߚŗæĒĘU°pĨY|āåGH•›%Û<Ōų)$Î ĘʈOøūZoú}ÔqāÅ •P c&_Ö>€Č۟QÍ.ĨÚY ŋ1*ø\Œî$uSßæ^ĸ¨Īr÷AüÜwåcQ҇¸9ûƒHēbKûë‰}ž–Q°žšAއŽ2=š­;(ĻģUû$dÆN|Ü`Cģš2;§t&˘ėŠKö›ļi.˛Ŗ˛’Fv¨ī͟`O#nÃI–÷2Hd‚'Ž…°qÆz;ôqʃZ–~Ž7NVY3šW‹éĮC×đãÅk4M‚’~ĩ.E¨•a´KxļCōā`wĮŋōŠX6Â'Ĩ;Ž›{b‚,OCeX„¨U ä{ z€T|ÍųФ’}Š6žŲÎi‰wpIČõĨ-Î;ĶT+í֑ˇgČ恎8Į^ĸ”.zÔ#ĄéÍ;,=(PęzôĻČŨš>õšåšéôĨÉ$zP!ķō“š]ė[# š\0įŒúĐĮЧp°opq“Į$Ō‡ c~´ŌķšNwtMÅÎŌ>”ÂAĮ8úPFŅ’2iĀsŪ€1Œ“ƒõφ^™¤p9Îiasë@–ÆrNzc1nĀŠ ņ“Ž} 5›íHYüKz-î“UĐgŠ<ŧEâhPydá°xėAĩjčl#Đ­KĪ´ĢF Üü°ęOĘ0yā’k! SËwwĢÜ @+ŗyŽ s¯ĖFÔ'āõäŋĨŪÅĒéPŨ* ’ €yäŧöČ  ņZIŨhB/ų™8ā u¤zR(Aõ=ŗÅ/ÉÎzŠĖąŲ^#"ŒdđzZ‹ sĪSK´n ĐËę8.āGŊ1wz“éArIaœwæ˜XVUāsÁĨ)“ÃT*ęNėâ¤I6ŽŸ ƒĪĶŊ+āā 7)äžŨĒ6įåzP!šīgØĶ•3’NOji xäRîā‘ŽGQ@`6ô¨¸Ī&”ąÂHÁÍ0°įېM4¨nrAéH$= 'ĩ<1ôö ,3h`8?•*€ÉÉôŖ$ ‘éAV1ŸJhM ûûPPôŌįolš7`üۈö ˛`Ã9ĻrÜ`ÂĻ' ™íHrĐ0}č’i¤!HįŒqŪĨ%@ÛßŊ4ˇ– œ`{æ€"°#6õ=+GNŊkŨ*Úí(–0åîۑœgŒĶ•ØiaZûUĮAví”u§.Ā1Ÿ˙UféeZ˙WÚ0ėt˙ŽQ˙…_•› ŨđΏĄî•ŖļT)ĮįZ‡Ķ9ÁŦ=1‹Ū˛įúÖÆFæ#9ëB$ƒíQ9#šČž[õ5§Ī'˜ēŸ<ü_ÜŪ:~ŧ[ įęhŠž.˛¯Ī|Û!ũZŠŪ-Ø­ Á>ߕ41uų¸ĮcŪĸÛČĮæiÁ‹ įĨr”LÎzbĸ,x zT{€cę}iđõ÷ ĢîÎs … Nktõ¨đۏæëNÚ+øR O%‡jqŠ ÆN Å*[-i\āŽÁČæ§áÉč)ƒŒäāņA8Æ9 v$'æŽrŧSŠĻ7`āÔĘvô%zsŠvõv'ŪD9[ üí̓šyČ9ŪN;g­G“Ôœú Sž~1ƒøP1˜b„‘ĐũiĘ2rIút¨÷1_ūĩ)/œ bub§ëH[€Kwæ˜w’ž˜Ļpp=út D…— Ī?•)⁓´ķˇ5 7㞆š%;đNh:û@ŗģ”ĘˆÖ÷Ā’.=zŽũk™›Â—˜ã6ąßFŒXÉáˆõ ũ;í˛KdĮĩ8†n3‘Œ`Œâ­M’â™įO§Ã˛iSĻȝHߎ¸ ’Rà E,nœ?ķĖČyü2åŠīŽXÜ‚yĪ5UôÛF×ļ‡ž ķŸ9‡"m⒠Äo¯G,ŧg#–oZĩijb†5w¸įõjܓAĶä <ôķúÔxSL”å•ņÔ¨n3ôéC˜rí§Y­ßÚ „ÅH :ų*xüi|ĢhÍȂ.N$h×ΌŸqÃ ßˇĐ4ø‘#ĄÚGũķŠ4ûD`~ÍüL ŸĖŌį‰Î %Ė‘Ã“lÚŪZÞęØĘŌ­A¤ß\÷#,˙;8Vg\pHdv<č„m 1Ž:SU Čũ)s”ËĩĐ-Ŗ—ÍšFš‘€.e9€ÆėzãŠÖ@ (CĐcŠbä–;‡&•# đZ•ØėHksĶúŌÃdf†H¤ Ôw m Nx¸Ŗx yĪŅŠ‡<Š ųS@@>]ŖÛxL={Іę)ĻR:bM“‚E ą31†ö¨Û,O§ozl˛>>QÅD|Ī5Žķŗ…ĮJÄŪf ]¤}(ÜOJ‡ĖbãIšÁëŠÉÁ<ū´âĮ ãÜÔp “×Ūž2;ÄЍ¸¯§"™ķN:ԃÁÁéFđ§ø‰=hTļŪ@Å;†'Œ{R…É9ŌI\Š`)^y4Ãģ#Ĩ&ãߚ jRÄä``tÅd rÃ'ĩw9‰Ũ‚°+ōą 3čzƒî*tË5ļˇ ąK1,ۋ1%‰'šÉ5nWDÛRØp?M$`ãZŒ“ū4ģļ‘éPPā:€iK ¸gĄĻ’I4 N1Ū€$VíĮjyč@éUÔį°įŊ)cĐ“@„šGx^4•ĸf §Öˆƒ"€Î͌e›Š§üøÁ¤YH Ž”&ūi ķ.qÜf™H$g­„‘Ö˜Ė7gŸzir;d{RķÔĀÔg† š.—r3ŌĀ°´ŌØnzuĻX… āëR,ƒj’i¸9Å4Ģdc€;Đ"TeNOŊ9ŠŽ ‚IB#§§zz€PH>ôíÛ[r=éÂAɈáO9äŌāŽ{“Å;øŊū´ WķČ#ôĻ ÁĀ hœ‘ZaÆ9>âĸS‚~ö=iY°@^§Ö˜8+yéŠiĀcš…Ÿ<{ôĻųØĀa´ûŽ´˜2•#Š§#Ā``tÅDŌā zTĒ3ÉíÎq@Ž9ķëJĀļ~a¸ôâĸn™<{æŦŦĮŋ=)öBËĮN⚱Ģ&Ūy$ĶÎČsČÍDčAÜ3ˇŌ‹†Ī'ü$RŲ5Ęŧ3Ącˀ0Ŗî |Ã'žzą­]>ÕŦôû{v!ĖqĒ•āvŦ˜’æ_I1– hFÅwdŒíc•ė8œžFâģ =G<üęĨĐH¯Ĩ‚š†ŽU@˙JPīÔuváH#' ūŸãT4™ķ̜‚MÚņÛũTuvâPŧũėrĪáIîŊ ģŋŲ~ũjÚ!ļzÅҤß<ä8Š­b~\ķԘ¸7z‰Æ}ņNgûÕ^G?xƒØSSį¨ņ˯?-ēžæŠƒâÃ#øælåH‚0F3Û?֊ėŠVč/0į*ۏŠĘäs׎ĩ‹Ū e äîũ(:–NM¯Đ5įXÛSl:ƒŨ1Rōän#ÜVŸP+‡{1žå ü1š™Š6ÜYĸŽŸšoū.‹Ų´e,OO—Ļ)|Õ 9'ˇZÂ˙‰ÎâMí‰āfįņķ(X?~ōĮđ´n?ō%+ ģ7÷ü˜=3éJĮŒįŒuÍa(Õp ē˛Įũz7ųžĢŦŸų}ŗÁ˙§F˙ã”ôAŠŠægnļúhvĘ÷ëĶ5™ŗVå~×iŧ÷û+ô˙ŋ”"ęËÖæĶ=?ãŨŋøåAФĀũåôĒû—ąƒY„jmĮÛlĀJÛū=9 ÕũĨlĘ…­Ø˙ėô] *čN$ũiÁ˜ÔņŪŗdŠüdũĒØélßür.§ą‡Û-ąŽĻÔ˙ņtˇKī20yĻ9?x7æŗŧ­IʡZpŠÔø|ôũšĒŒũ˛ĪÖŲŋøåÔ´]ą’sô4åaˇ“ĪLf¨2j ôÛ ;Ŗ7˙¤Uۓ{dOũ{7˙ 5/–ë€zô¤,IĐU ēŠ87ļYė>ĖÃ˙jSTjäז^ÄZˇ˙¤šFųsÔ V-ōā{äfŗ jøæūĖõû+ņĘO#P<›ËCëūŽßü]4ÅŠ¨˛:Ļ3ČëȤŪxįk-–ũ[‹ģ@§ˇŲØ˙íJrÅ|IÍåŽ{~áŋøē.ƒSIÎ3Ī9Ļn>€gžjˆ[˙ãŊĩ'ūŊ›ųy”āˇj?ãî×?õėøē4á,y Đ>đįŽAÅQ)y˙?–á}šĪ×īRˇs{°û7ķų¨Đ5/’á¸ä~?áNaÎ8ĪįYĢöĀü^ ˙p3øĶŨ.s˙Cå9_Ũ֖€_ŨĪn™āR#œr;ĩGËē`Ûz Š_Ķüšw‘&9Ŋ—žø\˙*4īžŲې>´ķ)RO\÷ŦĶm9Û˙;‘ėņ5˛¸ūBטŅņh‹J Č4ŌäØĪĨg‹IļÚĨÉŪ)ô OąMœ Rįoa˛.ņĘŧŦÜŸÄRîÁų†? Ė]>ā1'Tē ö)ū9Otûŋä)t>‰˙FfiýÅ7L(9ô5DÚL:•Īũķ˙@ą˜āZčz„‹˙ˆĸč,ËYŪ¸ÛƒšAF= Ē›+€r5[ąĪ÷b˙â)ŋŲķdÄÖīÜė‡Ÿür‹Ą;—ĶŠ˙§ >PüMnø܋˙ˆĻš 2ūX‚ôSLäqˇķj°œ kŪsūÄ?üE)°W#UģüRū7EĐY—yR0>”y„ĪĶĩg‹ ņ6ŧĪũs‡˙Ņö ˛ÅĩĢĖĀ)ų‹ĄY—ˇį}E"ą\“ŸĘа?âmvqë?ün˜ldRsĒŪß˙ņē.‚ĖĐdŒ“‘NVëÜVY°—ļŗw˙~á˙ãt Šņ­^ūä_üEĖÕbY@Ta†#Ÿ—9EŦf˙ ÅįĻ6Ã˙Æé­a>OüN/?īˆøŨĨægÎ2=¸ÅŸhĮ<ペĸlf8˙‰Ŋßũņ˙ YĖFßíKœ˙š˙MXVe÷8nY‰=ŠÕ0lį æ¨›ŒŒęsžßęã˙âiËaqķÄĘ}¸čc˙‰Ŗ@ŗ/+sÄ¯Z~õ'#ŋjÍ]>pAūԜÛʏŸüvé×*ĮŊČ ōããéōŅ jjpÃ9ã9Í7=˛3īT†ŸpP§öÍā?ŪT‹˙ˆĻ2äá†ŗz1ūÄ?üEϊˇ$sØpmØĪZË]6čœlßās°˙ņ*ėļī˙ī˜øŨ™­“×ĶKœ`Öŗŋŗ.öũĩzā˙ņēoö]Ō˙Ėfø˙Āa˙â(Đ,Í6!†WˇZˆą<ņŠ tëƒ˙1[Ķ˙‹˙ˆĻeĪÎ5Ģā}Ö/ū"bų$6r1JNâ9õŦĪė대5Ģ˙Ęū7J4Û­„füũVū7EjiķÔvâ›ųãŊQ:]É˙˜Åč$rū"ŖūÎģČ?Û7ĀôûņēzĻ–ōøûŌ?#āvĒ#Nēn?ļ/Á÷XøŨŲwĪöÅīĶd?ünRōĪ—É`N1Onvž>•›ũ2 k^ęÉôJiĶŽ ãUģĪo’>?ņĘvAЧË‚yâŖgpr9Į÷Ŧīėë°Į:Åāė‘ņŸ`šÁ Ē]ˇĻV/č”Y Rūâ[=éH_æų—é“ÅgũŠäBGö•Č9ëˆķ˙ T`ŧn¯wרHŗ˙ QdšNJđÚy9Šd’œ¨éž8Åg˙gÜFä˙iŨāņ‚‘ã˙A¨Ĩĩŧ@Yu+‚{‘˙ņ4ė…vio aŊIü*T•ŠwÆ3Ö°+¸öŗjŗc=i×ōŠŌÖđĮT¸éĐ"éEît(ŔĢ.ā?ģéNVQ¸œžŊ?Ĩb,7ĸi\gÔĸ…W›ûBČÔžläŖņĨo0šŅîÚŨOæ(2g•lˇé\Ü'Y“_Ïöíû*V‡WbAÔāëČû)˙âŠĨæ+˛ãéžlˇKs ÎûËG3(ČĮđį§pkAåųYṕÔōßĨa‹}L¨Qƒũĸ–Øįļ2ƆąēwÕnAā7•@ÍMWP,i OĢFģ˙ŋQéWî'DęH#¨=ë7NļûČ­<ŗŧ’IJį;BôP;(Š.eCsÚK†Ü{ôžâ:-Aēå“ių€įņ­å‘ĸ`‡kdgéXÚ ­d €CĮzĶ’NÁ¸=ũ)\v&iF9įŽĩZY°0ÅC4Ŗ?JĄ5ĮƒĐöĻĩGŠ|K’9ŧuz\*ąŒįũESņ¸/ž—+ÉN¯ĶäWZZnfÛ=tj›kp1Ž)ÃW”ŋ*FEsá[°sũŖvíŖT_đŠŪöŊģ'ŪSū5Áʎ˝JęŽî0=x§Q€8>ĩʧ…¯Ãƒöģ­ŊĮ˜Ƥo ^7æëõÔ˙+ šÔ.­7\äjOíyN2­Įjå—Ã3˙Ī{¯Âf˙xđÔ¤œÍv?íŗ.T:ČõpO*Ų÷ÅKũ°„t#Ûüšãŋá˜ˇü|\˙ßÖ˙_øF§cūēīõÔ˙¨.vU~_ūēSǝRá\xđÅŪp..~ži˙gü#7GŋšëûĶū4ų\í?ĩ223œuæĢ ū>ONG5Å˙Â-qœ‹›¯ûøƃá[ .ŽŗŸīŸņŖ‘ŲT0#“øŠFÕA<ĀĢŽ_ \g›‹ŗ˙møÔƒÂĖG&éûßũz\ˆĄõ5Áéx;†OëM:ĸįˇOīņŽUŧ"ûŲ>=YéßđˆšÆÜū/G(GöŠōš=ˇņ§-úíÁ ˙}ņŽ_ū)XÉ˙ÔƒÂĒ0 R~š9BčéūŪ T˙Ā…n@ŋëŽŲŽm|,€dE(÷$P|-‘¯Ÿ÷ĮøŅĘ;Ŗ¤ąŗŧĢ wۓ۟rßđ‹?ūūõéÃÃ.ß÷đ˙ĄĄÔ č†~u'ę(mF pdAõ5Ë7…¨r3ūŲ¨[ÂN:LÃūƎPš×J>úƚuXIÆSëšäáŸ\°˙šü%r:]{oj9P\ë›U‹įÍ4ëíķõÆ7„/sr˙„ĻŖ>žä™?īķSäBæ;/í8ōH—¯lƒR^<ķ įĩpëáâãæA˙mXŌ^æáĪũ´4r æ;¯í„ūø?J˛ŧ|ęâãđmČÁ3Č ˙φ¤> Ėī˙}š\ˆ.v'Yæ\ũiXđÆ?āũjãá ˜õ¸˙lĶÁŗū¸˙ßmG" ˆÕ@ʙŖ#ũīūĩIũĒ€$Cø×<>?ãáŋīļ§/ƒ.\ˇâíO‘ÎËûYp@‘1éš?ĩ€}ú× <sÕn˙ĀڑŧzÃū>ũü4r!]3¯ūÖ$ņ"îiFŦĀįtg?í ãO‚ī‡"äū5Áڐũ%˙īëQȂčí́÷âü 4ęĮũƒ˙Ž4ø7T'‹–Įũvoņ¤˙„+T'ū>åIOøŅȂįgũąĐe?§\daÁZᏂĩ^ĸöoûúƑ|ǃķ^ÍΤÄQȅĖw#XđęHŖûX0 0ÍqÁzŠįuä {ĖĮúԋāûÜôÉp;ųū4ųįiũĻ ' f‘ĩ!Œnë\€đ…Ņ5äįūÚņ x5ˇ|Ķ;ƒũé ū´šs­ūĐU8Ū9õ4DÕqõŽOū´Îwqéēā„#¯īQĘGQũĻ™<¨ãû•u!ŗ ÄŠæ‚bی/×4ƒÁœm,Hô,häŅĶ˙ilūŖS {gđ˙æ‚ĸÂâiá €ēãG ]:ę “÷1ū4h tũGø×0|nG+ú͇ƒ`ãڎ@ē:1}ׁųņ¤ūŅĮ@˙ņŽwūøÁ3ø˙?ánvÜĖŖÚCū4rŅŌjĀë‘MmSo#Ļ;šį„Ļīwq˙MME˙|Į;onīķ>PšĶ˙iīÛˇøŠ´ę¸˙W&žšQ˙“Ÿ5õŠ×Âs¨ų¯'?öÕŋƎPæ:q¨&0p}ɧ @g5Ë˙Â'3c7r=doņ§˙Â/0˙—Ųąč$oņĨĘšĶ HczbęQž9üs\đđĢ‘´^Üč%oņĨÂEļÜ`ųęßãG(\č…úđ'žOĨ4ߊČÉ>Ũëžo ņ´ßܯŌcHPæF×Ûrš#ûJnÕŗ‚qéÍaŸEˇúđÛcM> ū‚7ŋ÷ũŋƎPlÚ+Øaô4 ĩĮŪnŊÍbÆ9…éúÎÔ'ƒPguũáĪŦÍO”WFŅģƜ?B*3z™žnßūĄYcÁҌys_9ŋƙ'ƒca…ŋŧSę'oņŖW5ūÖƒûëĨWšEeÁŽk+ūP c¨]“ØųĮ?Λ'‚pÄ­õ÷=Ōüiō šĢЛB öāSĖʘ">3ŽÎ:ĀoÉÕu+õ>žyŠÁw Ÿōŧë˙=øŅĘÆķ\HWN{S É#qÜ÷ŦcāË 8Ö/īáãõ¨ÛÁ×Ũ?ļ.ÛiČÜAŖ”.n,ä–'éN3˛/˜c=zu?Îącđøm^ë>ŧTĮÂĻWX¸ę?—(\Ņ2\ŽD_  €4É2ķåŋ^ÅÆŗÃZŠ`S\œĀ˙JūŨqy]nFĮfE杀ÖifSģĘb? ŠŽņKq~ j@™Ø8ôÖwö/ˆTįûEĶtũzoöo‰QŽÛ˜HCū4[ĖŪŌxlí’`BŽN>ņîM9ĩ2mtwŽėž(WĪ™nGēņĨ+âh픎`{€Gõ¤“ÚKt0X75—uzˆ ,Ç­sæįÄŽZŌ'>ˆŦGUׁ*4’süBNŸĨ\S¸™Čjí=îĩ}q64Ėâ3Į”SL>i/, Ō1%ļúäŅ]ičccčÔĶÁ ūtŖN\ghØˇ­ W<0įÚšlivP;fœ,°ĢâÍEîĖņ`3÷Mb\.? ŌōVƒŸJ,‚ėÍ€›NgŠP*{ųƟaqu!CHwd3Î@ƒŠŽŪ/Ķ>Íįą™#+ŋĖdlÆsĶéų×tô‚ @ÍGäGŧ@+4fF˕#< V4Ã°Ų‹ŖoFŒėŒ#ŪŅG=Âįš#FŠœHrgŠ,%]Čō°Ę‚DoœœÛЊŽéWcŽáänqåÆí1“ͧ"¸íCNŊĶí­ÚâH¤I”‹  0Ŗ†sČ>œUßk,‘N ŧšB 䓇°ëéGŗ‹Z3;ßøK´–”Åæļáü%pzãĨ:Očđ˛ČęØä8¯7GTo´|ŪhVË)nHÎ'9Î{֋˜.Žcaßŗ;Į˜yĀČČ9ärĮĨ/fƒ™ŅņV” n‘”œpF=3éžÔéÄ+īuŒž ƒøįįŦ\™dDŽ5—RHÃváÎqŒüšíOrŗk24yTü¯%˃Œ@ž{Îf‡ĖÎö/é’ÄōG:Ŗ'å}úqN_ieļyۛ8ųG\ôūGōŽîxėbŠ?"Ѝ›÷܄R 8˜/\āœ÷ĻDđ[JVÜؐ$Ë(žuß+|ųßà tũhöh\Ėî›Åš:¸O9ˇŸā Î{ņLOčæO,ΑœŖ×ßÛô5ĮC"É>TDŗF7Jîe!OĻá!ÁœzTpLō\—€Áæ(Ę;G.í˜ųHũáūķíĪB(öh9™ÜIâŨišQÆ}HĮAĪZÅÚ2•S;n1åœįÆ?θ)u“2ĒīÆ Gģ°qŨŗũŅ×Ԝ. —!˜\ŧā‰ë„B8#81“Æz‘GŗAĖÎėøˇG4“2“Œ§ôõ§˙ÂSĨ( Ķ`€Šæ¸ ›ä˜#ÎdeÜ&ípę<žq“ĮÔŊqĪķŖ”ftÖ$)å8ėjĩā•?AZҰJāįĄæšIUČ<ĶQ ˛¸ĩíĩ?īĒCo…­NēĀÁõÅ40 “žøÆ)ōĄ]‘yr;ÉáE)é•8§ÅwāQd#h8ûŖ>”O ¯ÖŊ†GęE+îØHÁ=iØ.Gäuųi:~tåg9;Đėę@ĨĘ#ōšéڔB$T‡ n'ĩeŨ_ĩŗĮ[Mq,š!bĮz;Ņ`š  Ķæ€ d~•„5—FũíœņœãÆN}8sRnÅüIu‘Ø[Hߨ…scėû‡?…0ÚãœĖ!ļ†ËŪ8Čĩ›˙Ąu”p—dįĄļč@QĘ4|ƒˇ8Ÿ\͌-´ņųŠĮ“[X€&Ú\/ķ˙aUO‰ŒYi -NŌ|ČAП7­Ŗæ:$Ôy*8ŦøI’F"sŋ…_>Oˇī)WÄJ2܍ŊūŅúĸæ7ŧĨķQ˜ōŊëüOd)ˇ”’2–.Ÿ÷ŨC'‹ !JÛJwpĄeˆäû|ôr‡9´đƒ’A&›å€/įX âČŲ“|ŋxų‘q˙ÔM☠ų~Í"ķÉ2F{ãûÔrœé„lôĢ#€1ĪZ䋪]Ų‚VŲ€Fô'ˇŪúÔëã"0ąé× û‚ā´côîīBˆšÎ¤F}˙*Q'9ŽY†§>(°OŸ+Æ$˜ŲąÎ;Ū— sžFŠƒ ķYxŽÆx|Øî§÷˜ôÉĢQkV3ąTšČė’üŠX/r%ŊiĻ&Áæö¸ÉÚsčiÂxČãžũh°îEå0čE'–Õ+\&r1īŽj7ē@,Ę8äâ‹Æų^Ôđ;Tbé\˛¨RAõíNK”Á$J,ÆOj_,įļ>•:ÜãŒf‚ĮJ,!1œqŠhFę{ÕĄŒt¤ŲČĮj,+,d“JbnØúTädķ֕TžF(°$ūß$ŽÂŽÉÆČė(°ŧ“Š_$äqÅOÕrzĐN6АģR2xhvŅם…r‹ÚƒÔUIlCē1õ­vāt¨›ĐâšBģ9˙ØjFya;Čí8ÍÔ6čh§¨Î¯ĘĪąĨķéVĪlŌāÕ%ąœsFĖƒSíĮjB 5 Ua°ŒM 9c×ķŠŠĐĶf`ąąôŌˆņvŸŧ€Ca,ˇWcĘiá‘ÃE9-€ĨG'ž [đ¤w2Z\jw>|Aķ Eį‡MĒOĖÎ •o´ûQ}ahą'™5â ūX ár1Ķø{V€†o5nĸˇÂÉų™ƒ¨Ú@]Ĩsܑ—cŒ“D\NēõĒH–%ēārŦŽ0*‰-ë†qiuæ}ĸā I˙XŲįņŽ9Ŋ"à jΌ~ņ‡Įhũyõ­˛Ÿé–Æ8PŦĘ$#–‰wT9üw¯GĩVūÎļūZ–įšūš¨™Q%OõŧŠģ‚T(᨜Tpƅ˛853Ģd*zäVeŠĒĀT}sšGÛŧZ’=Î,3ôÅE´o9eÉ>´#´î-@ ĩ˛~´é8Č4Ø×vî™ö M‘Ėá–:f—#fzSäL7Ū=i¯ōˇšc  y4Ŧšã Å*.XūKnØX{v ųghÅWwœŽ=jwõČôÁ眜 ŽA…3JŖ1Œįxį‰ˆSˇë–éG)ü ŽÔn"' üŨķŌŖi#x˙w #Õy°|CĢĩ„˙gš›$,^ņ‘ŲUŽ@Čāt98ÉYéz –•l É%Ņ! ēE܌ÍĀÃíã=@I\Mžš™āņčzĶ\ífādŽ9ŦÃ×z~Šö•Ö¯n-L;ŊËîÃg;¸ĀöéŸzÜ`7g‚:sE€Y›qĶŊs÷D˙ÂOaōŪwātųŖ?™­š÷>pG €Ėá-b,Iį“˙­B‹ĒŪj bķK§e ĀüMNúRĖ 0@ģ´ ~U_LģYmžw˛Î͟ĮŽ´“Č3õ`*˜„:L ųķ?áV´Č(Ž ͡v8z{æĢ$W~Pv’>‘Št¸ÜJvËs͏íIė2Æŋ”ˇŗ ōŠšQyûŦĨs–Ō"krÉ,e•!>Aßō““¸sęīšßņ™>­§Å åēN%,zã‘Æ=BÃÆ;y6´Ķ&˙´NįįaØg S@ĖŨ9D–BY4š#’G‘ÕVß7ˆ\tÍ8ÛÜHœįī¯ČÎđՆÕãėŅÃk#0„.L‰č: ķĪvŲŽ‘ˆŠ6ØYr>š]ˆÄ›hŌ&@8RUĮ벀JŧXr§ø]˛ŧuûŧVÛGsåöDąį‰T׊mÎĨqdŠö‹9AKÃĶŽqM1ØÄ—N ūĖ‘wĄōëōûU_ą0PĸŕÁ$0FI錟ū¸Ģڙ:ÄqŸĩIg"ļw€nœO~ũęnV3]D  ˛#n8Θlb@ú}ē‚F&„>8î}{šĨ'†–yĨÔ-öm “Üį4ô*î÷K†éåĩCûMŧ´lŊ‰’Ŋ:`æˇu?ąŪÅ5¯ÚīVķ.ōššŒįhÉū.Ÿ•dÅaƒČ˛MĻɆ Ģ’Y;@ÉŽON{URb(meV›g0’7”įráN1ĶŽ(ę"ŋ ÜØČL‡Ė´p|ĢËv =ôĪNŊjÎŦ÷Ú>Ča瞰Ę˙1#ŽėÆ*捎ŪFZ+‰7–RČļûĀđÎ˙7ûXâŦΤÁ~ĻëC¸w,Ûv,„Į'}žĒr~éę8äsOÔA|G{o(ųá z° |íÍvVëŠjÉ=ļŽžAså”+1Ў{t¯>Öė¯,nJŨĮ$s6íņ2}ˆČ?Q^§áԁ|7cˇ û•ā„Š&•´܎ßJŊ’ŨLú”ģĪŪF *š{ŽHUŋŌ’]Øā'Ą'9Æ+F6 ÁU•Đs€OÄk,ĢNqî~VÅdYR:?Ãöx’¤°,V4 Ž@ãŖ éĸB$8É_JÄžrž'Ō –ĸlޏÚ@˙Įkr&Y[ŠL }Ęr2qĪ59qĪAUáCČ#­X ĀŌ)ącžM8Š ŒqŠvėæ“€nŪr(Ú)Ôwé@ )“ŠaˆxŠO­¨ą„y#4ĸ0=ęrƒņ¤*prØ W# (¤ÁĪ_zxäqŠPsMŒ‚Oˇ­5—#šŠļüŊ4ŽiØ …9û´TÄ ũÚ)XĮiĮĨYĢ;sړo=(ą<ä­!JŸė)Ļ‹ HŦĘ0HŦ~ę=7Kžîb6ĸá7ĀĀÉ­Â9ĀŦ n››¸mcŸKû4 ‰áŧBí ī´nņę*VåŠ{á­1îõkHĻŽđ“í‰/‘°ĘC|Ë´g‘ÎO^õąã[¨™ĄĶŨŖË1–IQ>QŒd䑏Ĩvú}ĻåąŠÕ”ÆŖn?„ã§Ķô¨ŋŗõ#u#‹čD”O#æSœ’NyųTŧĪ#:s8ösÔZÚø}kæx‹]ÕÛ8-ƒ‘Á8 ũ}6Îšéw$RL$E’ĪÎã§\žŋOJęüjļŋ n.îŧËã$¯ÎÎÛAüąMč-N:ûW7Ë?•0šē™žŨSī;1å§áW`˛7:Ŋ–Ÿ3Įq{)ĖËžq÷—nA'œžn9Ŧ3yöMzÂōVs ’Ģ’ŒßxqœĨlĮ¨Ųü}j]šBÉŨ[DĖdgšPy98ĪûĮŸ¯ĩ`ŨĪ=ŨÔíųÖËä۔ ¸ÚqŪãæ võõ[ceė­ė” ž0_k•™œ(Á%•Náî0:öĢ××:}ŦZŪOĖĢŌān?—ͧé\­­üpÉ0†#4ĖiZF•s÷p0sôG6ŗ ŪŖ—;1Uhü†Ā@yôä˙J9EsV[‰ôÆ˙Kĩėå7 €ã¸?1\ õA``ÍlžTŦ ¤Ņ;qÎzņž„}=*yt‹k¨Õ‚< eŖØÄ4@¯D=¸:ÄĶã†-*ŲÖÃf[fíÅøęXõíÆyžÂf{Įļ÷.đ:ŲšŖø€ÆYp ˆĮ=kv‘ŒeTÂ[˜äd Č œ`pzžšĢסQup#įWˇ€Ë8ā3gĐ ü˙…1o8Z9žTAœČōņßķĮz¤&F'’ÖČCF6FPĘzíę3Øvã)lÔ˙oęReeG$FsĖ ÔíVâÃĒ‹ûaisnßk\)„O×#ŽiļkŲę7—LßŧģmĪ*ŽârÁŋ Rš"¸äõöĸ0…Ieįߚ`2QæüŦGáM%D{1€;ĶäSæep=N(pÂ2{šĖX­Ž‹s,ĸe†8‹3@Û\}9ëÅyŨ͌í§Īi}1jî„QÃ#ƒ*Ąį sĪjôæßÃw’<ĒŠ°+yƒŽ[ü­üĢĖmžŌmRÆŪ8ėÜËpŋ8XX…<ũė+ØééW ‰g°CōÃŽBãDäŽ2zՕ‰|¸ Z…W YsÎ9¨Rvf6wäæąjR>•—æßĩåÄsOsˇ?ģ˛Ã=˙J9BįC,š|ˆęō ÁŒ:Ļ?1ëYvséFôĮ ˆ™Į˜ņČČ8#ž[둌U%ˇßŸ1ī$‘#,˜Æsß ÍÛÛŧãËÄČåŖPį9É<⊠ŊÍģkxŽ–÷ŗ\BŦ3˛HŲXüX#"ˇ-–ŅY!ų$ĘŖ;ąČõW(úMš1žRyĒķ|šĀ9Æ {~U^Âåbŋķ„ÁĨļH<ķûĖj¸^ƎŠyáËmZāܛ›‡'k¨ųq`đzŊ:ÕK›"äæÜ˜­Ä|‘>÷|ķĶģĄĒØÅ唘ŪLĒ´šĀįŽAĪ×ŪŖ´€ŊĖ‚8•€S•'8#=­4’"\EŦŅ+H§<ųfrA9üzŸKƒPžpmO–ƒ*îŲe#ûŦ;˙ēáZ–Úŗģ]ę8ōί&ՏŋÎŨā#Ÿ]´ēާwkqčÖĶ|ęȡF-‹ö(Ī>§¯^i^ãąw^ģŌm4Ķˆ.ØÆ6D9“w÷”į(>¤˙J›ÃNŸØļ‚+VXL`¨-¸ã§ŋé^cŦA<7}§į˜s.Næ$õ$÷¯NđÃĖú†b(‰Bâ^¸™ūtä´wfãųŠ cŽ™*ŽV¸ˇ"ägĐė#úÔū^ÅÜū'8(}ĸXeeŪ gԚĘÅĩļEšđũÆņƒv>Ό?ZߑyxČ Aáøķ\׈#_ė}0q íąëÛpÖēf@‘Ē QÅ6ø™d ÁëR5 [ą„eÉ•e˛zF3PĘCC(8§į#Šˆ/ŽsNÁÆ4†;péĐŌdæ” ģõ&—Ō€h+מ”§Žæ—h ö Ėqڎ 4â0( )ˆ€ŌcëOĮ’)qÁĻ!ƒĄûĀsÍLŠ1Í4€1@Æ(Ĩ$fŠîˆÍ!ę)ØÂã Ķ3ŪĨ¤aÅ&‡rƒÛņŽÆ6Ņ]ø‚ÚI­î¤†v;Ą˛†EË7w”đ~SÆ:s]éŠ&ŧ›VU×5ۗ›MD—íB°Ė{ļ™<âŪXãļŌxÆ)$\_S§đūk§[Û\=ŗÛŨE]aH•÷ļHmš91ŠÃŅŽ5KŨZßĪÕn’!1žUÛ>×b €?č3šë|IušhŲ¤?(†NOËĐ+zú\‡4Ŋ0ŪyˇÚ|“읕ĩƒy1$ hĀûŖ’OzŌå§scƚ¸ąĶĪž 7ũäĪä'qQ¸rGĨIáH`{ûVŠh.f;Ø^É(DP@ōË~lįˇĄč*ŸˆĶT“R†ÛMĶn^Ö1„@Ä㨖0 #ŠčėtŸ Ā÷÷ >Īi杚SŽI9?ĖŌÎÉâģĄĒ}›ė‘yr Žgi“q'ķËnz˙ã[õܐh3—Y¸*Ųˇ˛ä⑯2 āã­UŅG…îĩ'{ >ī Cĩ‘…Čoâ¨>ų÷íXū6Ō´ØīíeDĶĄŧš‘Ļ’k˕ˆ6háҎ@Č­;j;•ŧ#§%ĨũöĨ ēė†AVW'?+ėROĘ0@Ü9ëŒŊ[]šÕ¯MŨˇ•âlŦlĘ%‚Č`œgŒ×YāhāƒA”e#–âY. BTpW;7.Đ͎Ļ?:䯕5]byĄØßi¸xāi› !V Bŗ[žOB7xæšZÖč‘Ųxr˕i'Aq#ų2ŞrBđÍüÉë\˙īZÃÁ×1)ųîJÂ;äšäÃuiéęsEt÷֋ėClÃHf%FO˛<]öŸˆ|9¤õ vn]züМqß<ÔũĄÛCY͚+ũ'G[”‰,íR0DNüež\Œįh5Yĸ˜øZgšpŌ]ßģ,ßßH”FŖ˙ĨIŠ\é×ZÖĢupÅd‰œíYũÁ„ęrĀí ëQŨÚĘĪĻčņÉr[XĄ; #Íü­Ig#Ģ\É>›q*N˛L#x€pØeēcå#=xúWąjēxĶž% R ŧ0‚ʧ€I8ü ¯)žĩ’)­š…Â[\‰%Āo#}zcŒãįŠîáh]¤[/|1)…— äĖ$ČéŒ`QQ6•…gŠĘKŊŨŽÉmą¸î ‚0 ŸË5›ŪčãîũĸŨ3´ĢüņķŸ”ũFHü°yŽŽKŸę—O>—Ē-„…˛Öš‚ųXįŗcę6ŗI ūú7 ­ČãUrJÖū"J _DÁy0Ü/•“čŲ>ŊÃĨhß_<*ŗÁ[Æu˙HW0ŗŖ‚ `px'¨ī‘œåŌm&…¤”Eķ¸äp=ŋJzčQÚÆâÎk‹g^ €>ƒ°ĨŖŲnīÄWWą´såGōwmÎđĒ1ō€~ŧ÷̚F˜c€}–æEˆ˙­IÕ×{s“ĩŽ2NOŋŋ——~-‰ļÔÕԟ™&…žIęFzŒÔFßYi•EÜŗŨä¯ãͧjVė;ŗ¤—MŗōH[ĪĶ$/_Ļ3TāˇOš)&ŊŽWÆ×V„{`ĻAĄŦҧjėĨ>ÛmąyÂÛĻOOosūM”åFØŋ7Ŋ=ĀÜãpúQģČāvĀŦ Šį֕”ļ*eÎAcĮķĻ1!ņĪ 7mĮaۈÔüŋ6Gzü#ƒÖ•VO/'åĻ3G„ˇ‘Tmw÷ŠY|ĀŨĄ@ÍDČÅÉÚH4o/ˆĮ§Zz0ā‚ųâ™/ĘŧŽ­ŽFi’ĘW×ļZuĢI}:Go“§=ŋũyĒ–ˇĻVk˛ÜÆÄTė‡*jmoGƒZĶÎyĨ‰ DvāŽŦ+/ ÃoĢ[ŨÅĢÜĖöÃ\Ŧ…˛0AlnĮļiĨ žį]ˇjaxĀæ˜ėBpN Ā#ŸŌĻūlcÉīH\9Š ™ā1Xۓ\ܘŠëÄ—˅vā˙Ķ<ķų×aˆđA#ZāõĄļÛÄĻ2e†!ˇžR0GëUÁėWĶáŒXÛ$‚ÕąAéW8ŽWˀ2<šimՖ‚ŦĄÂ€G–T…$s¸āķēÛü)˛DK0ĢŧE p˜b´´õmbąÁ9ū3Yš(‡&!˙lŠæĩ´ŋœ~đFĄS9úą˙ L Ū!’XÚËËgSš‰*øå>õcpoZö+‰™- ‡l›œX‚Ų ÷ĩ<_y „ļpû"Ūã uųk2ÚÃĪąŸPŠ!,2ÄLé!#îįߌ~"šØ],ÄÖvî•Ú029EĪéO[iC3)Û´  d~&ŗĸ‰ÚÁ€”„|ܒ3ŸLšˇöfˆY›åP@PŖˇ°Ē4ZxYČįŽJ˙2[(JGšP–ûĘ?öojŽ‘|‘Iž\ą °=*W„y“:QŗîæFõĮ­G$00|\Gɉtę?āUR;h7,­t„“€U”˙ZļTą‡tķr3Č3úÖuķÉ2ÖG đ ąīŽšühÃZĀYŒw'į8ÁΎ’Yf(ĀĨ ~UFeu€I7mŒ‘‚2Ũ{ƒĶúՉ4ōÖöŪKÂ.ϘĮļl(`2 Žŋâ)Ø.YūÍŗ`€Hõ„ú{ I-ĄdTy?x삁ōįŒ Žm"y§Ž5I šËīےŊÎũ:ō*ŖAÎÎ1Ëc 9ϐ)ėmÖō5…c,Š’ĨsˇŠÉJØŧ`c‰Yŧ (ãq#ŒöŽ\f1ą…8§QøUĻēŋŠä:N&s*‰ déŽÛGåI šO]¸Ö’ō95+eŨ ˛¯îAŒ}iˇú‹ęRŨKåąžMß*îÚęąä8ôފ×ÄRÃō\†HĘåž0tį*ߏøUÉ4ëûIVĖA ˇAšAûšéĶ#đ9Ĩp<ŗSĘĸmrĞ@údפø=Uŧ;cĐ>Ķ’c=˛:ƒ^y­é÷ēMävˇąílî\ũ×7 ī<+˙„vØåŋåĄÄjįŦDˇ:UKBsŲ_üiĨ’8ÚPCme?yúū4Ī)K Ōāg‚'#ŸÄU{ô+f랟7‚?~āį8Ŧžå‡‰ļÉ"ČŋģxŸî˙vE9ŽžķĄVë‘ÔW­Jn<|áX+@]IÁÁžá]užZÖ܎r€ƒëIėčQƒājØ€`r¤fŠ[ghĘåvķęMh/WhĮJ–R'$Š`Ķ×ouŠ6Œ{ŌBGZ˛*bŧü´ŅÁ¤ úTÛvŒ¸Ļđh)ŦšZ”ō3J9 cž”¸'éRč@§…ëŒf˜Ô`ã4˜!Č=Ē]­ŋ8üi]@$šb+”抛"Šė;ŌŌŌVü§8Sz ͍íRŌėˆ24É8! ‘םë†Ņŧ uk,RjHšˆ9–EM=ráã$ã đ8ŽŖÄÉĸ>œ‡]ļŠx€"ŧ&B\āĒ2I$ãŠM/_Ō'ōėmfXĨB#ÍFҜ)R2š‘ž¸¨hŅ6‘Îxæ }7N˛‹Č´e/,‘ˆXARŽČ˃Į|›Â‘ĩ‡…ĨšŌâKŠfœG”†Āí>^ÍĘĢōöÎO֙âË˕Öâhâ˜ÛÛ@ÛØyę>c“ķ"ŅGzŨ´’M/J‰f[TÄ9Ī9w䑖îIīSäWCĶŚ•ÖĨ ¯öÆyÉ?pŌMģâ&Ģ|Føô4ŽpÍķ,Šíîp“;“Æ9ĪOŧĨy„ŦÚ'‰uƐ)žŋō“?Ċ}zcūTEt0"6ڌZ„™n.ŽV5VVæ2Ācz“íÖĨÖ..uģÛÉŧĢtÉû‚ˇ 1¸uێ‡ķSØ^J5&æHŌKKy –PŽO ­Íõ8ŌŧMĶēŧ’U=Ya9'—Æ2=˛k^¤\Šw Ã7Äéqp¯4°Čv˛6â 9ĮĘ@8üģdČX,RW@Š"‡oS鞟Šį#ĩMieĨ)[yɌîLQĻ”qÎF}xæ­N–‘Ũyw—¤ČĒ7HÜp0["RC“Û<Ņ}DeIΨ’°( ql“÷xĮ~ÕjAoäGßŪyl‚-ŋ7§ûŨN)'ļĶĸ!I“n1o͂00$푊tpĀŠæ4ŗAD…ÅŋFÄHoŊ€EO<‘ÃhĄĸS‡ųOŋĩ,KpŽ–ų.ŋëáũ}°j¯äåL›Ã´2(-ÕX0ęx¨Ė܏´Ë¨$ĐŗČm$$n3´g°æĻĀjÃ’66*â2é9%TŽädr9œT1âHģ–B†0w2ŅŽÜ§ÔUĄ˛s dÕŌ8Jyh ‚däûėĀፑŠĻĐęļÆŪ­Ä C¸æ‚9Á ûŧŽž´ė3^tK%2ē•v\åqŽ{{ևœÅˇ¸ÜĘÁc Ž™úgšŽjM:ė:ÉíĄōŸ(ōŖĮ—0Olõ4ˇmÍûîžÔĸü˛›åË?÷ÉŒöړB:I@Ķ ŖōŲN –į×ڛa%Š@é‚Í‚>ĩžak„køÅĘĸĄ+(NC€xĪQLˇˇ‰ŠžÜįh3øéJÃ-Ėé4€mÄŒņŌ°ÚˇōÁ}äm%Ŗ˜…‡ā|ķ×#V[[eķ)‘›\ŧ“ųjËÕ4]KQƒd”-׆îŋ*gņĩRyO •‚ĘβÜE\ō~n\ū§Ģ›¸§Ŋ@ōŲ¤|ķdb@ tęi–ĮXŊņ&Œuh×Î]J[ėĀPN>ÂĢÃnnĨU97FĻ"ÚĂGĢ}ķôĄ‚=+@´’ŌŌ8Xaˇ†/Érô*ÚuųÆN02j8˛HãtŦ>¸;§éRĄA#y›ēcĨbŨŲĸ- äcŊCäÆ~|’biJ‚Ĩ†HĮLRFŦ<Ÿ¨#€Å×üEm Ág¸šiKĄ73cŠôĮ={U]Å1ęZ‹Ø\é×z}ŲO1é1æ(8;Or8ãŠ×žŅāÔ/mn¤ķÖš1†ŽI”|y<> ¸°]5fKwÚËŌûŠÜûg5ÕÚjvúĩŒ7–ō*CŸ˜c¸#¨?ākĪZōÛˋ֎B%\°{k{” 9ĮĘwžFO§Ą[éM§Ii,p^oķ^?*XVU冨÷íã=y\ĸŦMË:¸’´Õ”ŗŲŧظ…KАceAũk6ëJđmÍ´˛é18ŋ‰7gO”ų‘{āœuÆĨoøÍĄk[)[ČXOĩZÚo/œg’~_å\æŸy$>"5ÖĸĐ;íŪŪ9—=š2N:tĄ-įMá;ëíCÃŌßJ˛Üm*ō!RpĮ|uކ4– ęHŦũ.îÖ÷Oße AbĄ=„žÄdtīZI#Dį,7Æ{ԌĄ¨ÍŒF{‡ōã'ÉāWy"ĪĻø‚A‰KØĀ9Ī#ôúWGâ{Æ[xāe*fe ÃzûņøW+;ėŌuŠsũĻ?*sÅR]ļŒyQ•H˜āBãëVs"Â91ũØĨ¨`ˆyq ˇĘŊâúĶ÷D¤ņŠ=Ėdb“)‘ÕNôœcž[™ĖĮ{6Ŗy ÔÅËŽŲ8ČÉäā`Û5H´‹H¯ –™Ä&22¸ÆsčĪZØD>Zš’CpĪoŊĶõĒđ:ÚÅ íy¸G`Û×qÎHõ˙õzTGQkÁæĀī27œđ}xúūĀēēDDĄį`éžC¯~ĩ^WĶaųan&<™˙ GæiFœ×áMô›N3) ö\Ö¯1-bũŅB‚c§Ž\ef!˙ŗŒ 8?žįU.Ė <ļQˆē–cg¨Ín>;Å}Ėāņ„B?įŌ°õ3joiŖÚŏļOōéL ņĨ ‚Ō@“A Ÿ;Ä\6܌Ī;ˆĪņÅNē5äÚmh¤ûŒ>rœĄ8é‘ę;J×ķDÖøˆeY ‘ā õÎ}úTöŲâi ņĮ"ÄĢČúķBlExtÍM'ķĨž?˜œ¨Ëeyāį¯ĨĨKŠÛŧövČĶ&ŨP “ąõÉ…YûuŧÄ{IĮ1M¸ĻEE.ĩ— Ae*Éu'Aũ×'¯§4‡,öš”77ˇUĀŧd(ų}jXmî'vŪ‚dĻūšĪ:sü̎ĩ‹T%Ĩ-ī8GÄE]xo\õëíYˇ:T÷į76ą[Ë#+,b@6ŽwŨsČĪâiķ Į%3}Ŗd™ŠGB6• ’<ΧŌ/%ˇžÄjī‰#\üÃtčG­u-áëunחĶ.ÚB0`;-mYéē^Ă8Ôcæ`1C’Ø,cjē\^&Đeļu y `”Ŋ‘‡Ō˛ŧ&Ū^lJē;Šöwöú×SĨ°]MBã­Âm6‡Ā“T!ž$ģŊˇˆåNā¨í$įÛÔŌģĩ€{1ƒ°FU9æPM?hœ7`5yũ*F]đņæį?ÜãHb?f—;‰Ú城֐ĖyB7ƒ5ƒåÁ*¨aË Ŋ×G¤˛Kĸiī°éߊŖwbŸŲē’ăhˇlg¯úēąá­ŋđŒi˜aÍēŌ“ØįAiķ×2W'Eh>sŒīY–ę#ž3—ëŽx´dsˇ -îjK+šIT++/¸Í[F‘ŅŒŠĢŲH=jŽÛĸƒ°ŽŧõĢ1TŋšĀŽÔ…rPFA–ČãÖŖ lddôōjQŒš'ãõ¤nAā ž9ģp84Âŧ‘ô  Í/į9?JAœž8ÅÄ Ī&‚ƒ;‰įÍ;QŽ´ĐÃnŌFîŧS€z“Hã“ķ‘šy89¨‰V%AéÍąņدįE1ˆCŠ)Ø,vÔ(ŽĻŽA) )ϰČ"ŗ’bkú/öÚ[Â÷sEr %Ž5Á“á‚ŧķ‘éF—áë-()‰<Ã>K:‚Ņ!ÚŦ8úķÉÉ5ÄøĻUŊņ]ãC8ŜK  gŗūē0x>†ģ›K?ÃpYØĖ’ÜÅ …’āœ1îX‚HüÎ=ë6uHķ‰.ĄÔŧTgÂFšôDŽ!¨ÎĐt,Aā˙ü+ļņØ!Đ[Ë+k§ !Íe@›đ ~īņΎgnâŲō;su÷¤ōTí-ëĪ5ÍøāK+i°,WVvšÜ3ĘŠ0Q“Ür:Rwi<kæŨŨÎ]fû/î!™$å€?*œžz~6|CgĒ\k %ĩ”ō"E˛)`ō7',ÍÎ…?(Šŧ35ļ•g(šļŧĩgrōÜŪ’Īŋ3 P8ĒĚ´ÚúÚÆđl{i„hŪ,›~ė“‚pę1ƒHzÜÕ¸ĶŽm<=ŨF=5íâķgh‘|˛pw}āvŽr}k‘đ…´z‡‰mŽ]°ŅÆg–•yž5 €2s¸`ō+ēņL†\ÉgÄz0pĮī§‚F s:mϧŅ’Öĩ•™RiØåWŒn*3ŒƒŌŸA'ĄsÆ×ŌE%…´1ËæI#Iæ,{öėÁäyrâāciž´ēŊą{ŲešŠF¸;÷"ƒ2¨ũŌŊ{k{TŅtŊNTköraVĘyĖ‹ĩ€Îáœ@įĩMaĨÚhēiˇąˆˆAi6ûĖNO'ßđŠ[›M MKJv[ˆ’áŖķC”-ĀRW ĪWián×@ƒGžËHģļ†FuoˇH„ąÎ ÂõæēÛ_^ëļÚsøvâÕ&vK‚¨'!yĪAßŊ[ņ. tåĩŽ{&’y ´ÍąGp'đ’eŠ_tpŖÁW^gœú.›æuÔĨty–%•-Į\W?á/_kú˜†îËN@ļåŨĄ÷Ā!Uۂ9įĸīpMvĄá­Bį™ü.ęFNbÕ¸Á❠ĒōxWTŊ†8ŸCÔ<ˆøTúû ô¯Iņ Ũ厊iĻéš\wrŦÍ4­˛8Āõ OŌ´ôZûH‚æîÁŦæ;ƒB[8ÁÆGN^”ųŨ‡Ąä’øVņmŒhzŲAžęœœžŠ)‰á‰MˇŲ“D×ļ ĸX‡\{{ ôS¯kėĶčŪû]ŽHIåģXŧÜeF Į“Š‘ŧAđšÖWOhåYDRÛM0BŽc܎ .f+.§Ÿ7‡gŽÄZŽ‹âN@ÛåļsM‹DžŪŨ­Æâ//`ÛĄĀ#é×ŊsuØV(`T)$wE}ŲČČd}k+Ä>,}#XžÍ,aqjûžđDĖH<#ž”s=‡eĐâ,ôŠė‘Ú -ką'6‹ÆI'8õĻÚé×vrK<6:â™X“ū„¤tĀčĀôūuęÖ/´{ķ ¨ōĀ%ōCäŠ+œúf°ŦšųSƒøWŦø‡T‹CH&š;šc™Ę&0û03““MĶĩx5Ј/ãHŅĄ’ šĀÎN§Îí{ ČņÉX-û\Ëzr0’ZČ÷ÉĢhŅMzŗ‹í(!ęÜ8Ī)õ¯LŧņE•Œ˛ÛΗ˛m,6Ī$h{‚Āc×ÅK¨%–Šá™îė¯íüŖ2]ė ÜāgƒÛ§Î Xķ°&AėŽtĶŠéWpĮŨ?0ã=úöÎ*]2ŪîoÛÜOc0‰D,S#'ȧÁã<~"ŦÎķ4ˆåđÍíēÅŊŽĖŧp]T’>¸Åtö^ Ņîlí§}:ØČŅŠgŒ”ã¨Srî5´É“û6$Ÿ“saŗ‚yūĻ´íŽ#‘rāqUmô„ˇbŒ"FŖ ߯ĈƒhÚIęEbËC¤ †čAũ)‘"‡ r°Šwm+ō’JfA‘ĮĶ“@ŦËl @ã5I ČĪZâ¯üo.Ž_[ų?mŽ+-cˇ…ËÆ6‚y’F8ú×Y§jąęÖ s ¤ņ#ŽVá|ļR=E; 䨀¸UrM,ĘGR9"œ¸Y €šÅ?jIū°Œ $ev1ĀâŖ;LĄŠ€;äÔär˜ÛŌĄōc'„$“É4î0|øęFNGZ°ęJ€ˆ*3c8„Åbŗ ÎÄgž3šd‘€ŒĮæãæuĢž[(ę÷ ØíŨŖm¤Œã­4û!Õĩ TKšFĨl÷‹)eˇģą>ã7qũāk´Ņŧ3c%A0Ka™c%”å1Į`¸Čí¤‚ŋL,sˇžefÖd í•fb:ũ=MoC9ގ† ËˌäƒÛ9#šļæI!Wū#ü*)Žííí7hŲ9P$đ3n=é^âą_ėÉ>Õ:ųˇOÆKgØvŦķŠ]ÛM¤M(•ČįžzTķ UļE†IÕθ#ĻOōĻĒâōO&=ģ8ÂąŨPyõ4Đ ąéÖSę—XmâeI;HĒä}N1ôŽKÂNú¤×úƒLČŌÜaĩO_ŠŦ¯øĄĩ¨ūĮ˜,b8DnĮŸ§jÔđ ¤W{ą¸J2:œmúž[+“{ŗ°[lGķ2œs“sų†gŠÎŌ{‡ ´!9Ø?Ƨ{¨<Ļ}ųãĻõZ‹sJŽ‚(@ĀÚY”įđ(n“,šŽ…,˛csĀ\|Ø1Žũ;RxEĖūĶŗ–H@ĪįĮč*]Ę8bx`Ęāäį<1ÅQđC G”e*Ė7p~cIė4ޞ%ŒČŽė˃Ÿ”kF& e?)㑃T­p”ŖH[¯ĢT+:aąũڂО#2ŒNcUęsNļˇti ŽN0ŨÍFmË+3˜09éVb€Į'˜d‘ū\rr(&Á姘”ÜTÕåqžÔÅ*Ā‘šl's’ž†‘D… đ3ŠiA€~j˜(‚G=h@[¸$E´–Į~Ô¤ ܞGj—`$‚=č g&˜ˆB¸į8§8āŒãã­Hé„Īn¤R€š uÅVq áËíLvŠÉåĢMpb‡E؜dŽ9  Ļž&l’sôĸ¯ hĪ>Xĸ•Ø\ë3E6–ģ¯ŠĮqi “Æ­%2šæŧ7ÚŊܐ]Ų<ŗŨŋ”ĢunXü؇ĻēÄēÔlŧ4n ›Ģ–pQ”›Ÿ”œgäTČ€U#ū<`˙ŽCúÖ¨˙Z~‰üÍ`Ų´™§ę:ÄÎ%šņ2ĸÎHĢÎxJÃņTŠ6ŊfcønGŠyOŲīĩ$ŒD&†b<˛OˤŽ;ƒš˙Čŗ¨˙×s˙ ÔšY÷‰Š­žŅ¯ĪxĶÃ(ˇˇÂÂŌÄqԜ+{×gĨ4v>‡# žįPWpųrsŒ äu¯ų M˙˙ĐVēMSūAú×ũr“˙EQ'ĸŽk×76¯m`etĶĻŪ͆ŒÆ:dHJvÆÚéæđåĩŪ™ke˰ؤ‚B°š"nøcœIĪZņSū?-ëœŋú×Ģ\ȕ§×$˙Ņt7¨ŌėjhZ Ņ-gƒíĶ\y’G™÷Sązv¯?׿¸ēņuõēm;"Ĩ˛Čû'\–ÄŠ9ūø×¨iŋō ˇ˙q­y“ĮĻĩ˙aĪũĒ)ĮqæŦĸÛ×ƑĸGn@C÷@۝>øwÍîĄ ãXŌØ¨0O–RĮ‚rĮû*k˛ņ‡üŠ÷_î=sŋ?ä7¨×ĒčTŖŗË^0ļšķPŗû)$[E!ŪeM €:­–ü;šŋám{;(ŽEåЂ@īöI‚ÄœđĒqÔņŠķČŅû’čfŊ+ÁŋōO,?ëØ:Mû¨bËSŧ˛×/—O$Gē•Q”‚~GÎsܯÖē Ģ[‹ß[ŲŨ[Ã{+ČŅČŌ.X“Ôá@öÆ+˝ŋÖÚŋ7ū†ÕoÆŋņīáĮ˙CĒ›ØW:īčZͧˆ'šÖtČwIoąîŌ@|ÑÃ*€yįņŪģ¸nIā`(qKk˙˙Ā­8to­LĨv4ÉO ΧZČĸĒāÉē/l}ZgĀ–äúž*wû¯õFī¤Ø&R×ŧAaáøK녍›îĻFįįĻĄŅpūlŌŖĢ7‚y§ĮĶđ¤›îŸ­;‰ģyjŖŠ9Öļt2ŌZôã1ž?úš=Sî÷Åw_p×4ūTœŠZZũÅÔÖŅC+Gæ#“´g<¯øÕ5žēšw˛3d‰KģuÜrĢū#˙Ÿũp“˙eŦ¸ãöûũÄ˙ŅMTŦЛ5íu+‹ģ$H6–l“ž¸ëøzTķęà ŒyEŠį‡5ƒŖ˙Įę˙×1˙ĄĩliŸņ÷søŌ˛ Œ‹P›kŗ`‡oš'°æŦKs"‘¨† aI ėyŦk?ų ˙ÛsZšīúŲ˙ā4l*ÜHm•ädFV?.Đr ÕDžâVgÂːŋģ@ĮųöŠŖ˙Ô_õĘĒÃĶņ“ųĐ- ÉapŒĄ“ĖqgQž*i势Ø#MIÛ<œ÷īXZwü†Ĩ˙pÖl?ōūģ?ō .t­i˛6-v¨ė˜'õĒ—Đ]A ŧąNŦŽĀnįā֜˙ņũoôŠ˙ĮŧõöŸúĻ„ĘĀÍŒ§xŪH÷Ž`ņŽŧõŠįˇŽ‡9'.n㘠KŠ˙ރũČŋH~ėīÉ˙ĸMˆQô‰įŅ-COl Čn.Ēr ũ=jž§öĩđŧz™œ\O?úö8gŨü(ŧøu¨ūCZ÷ũxŸũÖŋ‰?äŸ?ũŗ§}@ķĻŨČ-ĶŠk¸øxKÁvčŒx2ĮéõÄ\˙ĮŸũ˛5Ü|9ëūú*ŅŊ KS¸Įɐޝ?üU7÷Á˜ütÆãũh~ŋ@~䕍Í,MĻ–[̌Æ[’n õî}ÍPđRƒŖČá˛âUč0į ­ũl˙õÕ˙Ēž ˙mĮũ}Í˙Ą/ u:E„oVf8'&´Ō$HČ^īīXĶŽO¨­ØŋÔ¯áQq”e†_,ˆØî S ¸ŽõĘc5#õz’ŋŸōĸā2%ØÍ´’:āR‰vņ‚OCMũ|ŋJQ÷EMÆYAšz`͆0Ī\QŪ˙€Ō­;ˆc ĮŠB`ŒúTm×đ§ŽÔ&˜g§Ŋ"€īI'Ũ?JE˙WNâŊ ĪéHČ&íīH>čúŌŋúĻúŅp¸ÄĀAš)Ģ÷E\.˙Ųleptonica-1.86.0/prog/lyra.5.na000066400000000000000000000336531506303110300161670ustar00rootroot00000000000000 Numa Version 1 Number of numbers = 721 [0] = 3.000000 [1] = 0.000000 [2] = 0.000000 [3] = 0.000000 [4] = 0.000000 [5] = 0.000000 [6] = 0.000000 [7] = 0.000000 [8] = 0.000000 [9] = 0.000000 [10] = 0.000000 [11] = 0.000000 [12] = 0.000000 [13] = 0.000000 [14] = 0.000000 [15] = 0.000000 [16] = 0.000000 [17] = 0.000000 [18] = 0.000000 [19] = 0.000000 [20] = 0.000000 [21] = 0.000000 [22] = 0.000000 [23] = 0.000000 [24] = 0.000000 [25] = 0.000000 [26] = 0.000000 [27] = 0.000000 [28] = 1.000000 [29] = 0.000000 [30] = 6.000000 [31] = 5.000000 [32] = 0.000000 [33] = 0.000000 [34] = 0.000000 [35] = 0.000000 [36] = 0.000000 [37] = 0.000000 [38] = 0.000000 [39] = 0.000000 [40] = 0.000000 [41] = 0.000000 [42] = 0.000000 [43] = 0.000000 [44] = 0.000000 [45] = 0.000000 [46] = 0.000000 [47] = 0.000000 [48] = 0.000000 [49] = 0.000000 [50] = 0.000000 [51] = 0.000000 [52] = 0.000000 [53] = 0.000000 [54] = 0.000000 [55] = 0.000000 [56] = 0.000000 [57] = 0.000000 [58] = 0.000000 [59] = 0.000000 [60] = 0.000000 [61] = 0.000000 [62] = 0.000000 [63] = 0.000000 [64] = 0.000000 [65] = 0.000000 [66] = 0.000000 [67] = 0.000000 [68] = 0.000000 [69] = 0.000000 [70] = 0.000000 [71] = 0.000000 [72] = 0.000000 [73] = 0.000000 [74] = 0.000000 [75] = 0.000000 [76] = 0.000000 [77] = 0.000000 [78] = 0.000000 [79] = 0.000000 [80] = 0.000000 [81] = 0.000000 [82] = 0.000000 [83] = 0.000000 [84] = 0.000000 [85] = 0.000000 [86] = 0.000000 [87] = 0.000000 [88] = 0.000000 [89] = 0.000000 [90] = 0.000000 [91] = 0.000000 [92] = 0.000000 [93] = 0.000000 [94] = 0.000000 [95] = 0.000000 [96] = 0.000000 [97] = 0.000000 [98] = 0.000000 [99] = 0.000000 [100] = 0.000000 [101] = 0.000000 [102] = 1.000000 [103] = 0.000000 [104] = 0.000000 [105] = 0.000000 [106] = 0.000000 [107] = 0.000000 [108] = 0.000000 [109] = 0.000000 [110] = 0.000000 [111] = 0.000000 [112] = 1.000000 [113] = 0.000000 [114] = 0.000000 [115] = 0.000000 [116] = 0.000000 [117] = 0.000000 [118] = 0.000000 [119] = 0.000000 [120] = 0.000000 [121] = 0.000000 [122] = 0.000000 [123] = 0.000000 [124] = 0.000000 [125] = 0.000000 [126] = 0.000000 [127] = 0.000000 [128] = 0.000000 [129] = 0.000000 [130] = 0.000000 [131] = 0.000000 [132] = 0.000000 [133] = 0.000000 [134] = 0.000000 [135] = 0.000000 [136] = 0.000000 [137] = 0.000000 [138] = 0.000000 [139] = 0.000000 [140] = 0.000000 [141] = 0.000000 [142] = 0.000000 [143] = 0.000000 [144] = 0.000000 [145] = 0.000000 [146] = 0.000000 [147] = 0.000000 [148] = 0.000000 [149] = 0.000000 [150] = 0.000000 [151] = 0.000000 [152] = 0.000000 [153] = 0.000000 [154] = 0.000000 [155] = 0.000000 [156] = 0.000000 [157] = 0.000000 [158] = 0.000000 [159] = 0.000000 [160] = 0.000000 [161] = 0.000000 [162] = 0.000000 [163] = 0.000000 [164] = 0.000000 [165] = 0.000000 [166] = 0.000000 [167] = 7.000000 [168] = 27.000000 [169] = 39.000000 [170] = 75.000000 [171] = 95.000000 [172] = 113.000000 [173] = 109.000000 [174] = 111.000000 [175] = 103.000000 [176] = 103.000000 [177] = 111.000000 [178] = 107.000000 [179] = 83.000000 [180] = 79.000000 [181] = 85.000000 [182] = 93.000000 [183] = 77.000000 [184] = 68.000000 [185] = 76.000000 [186] = 80.000000 [187] = 80.000000 [188] = 89.000000 [189] = 101.000000 [190] = 127.000000 [191] = 135.000000 [192] = 107.000000 [193] = 120.000000 [194] = 112.000000 [195] = 124.000000 [196] = 113.000000 [197] = 107.000000 [198] = 91.000000 [199] = 78.000000 [200] = 74.000000 [201] = 77.000000 [202] = 87.000000 [203] = 85.000000 [204] = 93.000000 [205] = 92.000000 [206] = 98.000000 [207] = 102.000000 [208] = 82.000000 [209] = 103.000000 [210] = 91.000000 [211] = 99.000000 [212] = 103.000000 [213] = 101.000000 [214] = 109.000000 [215] = 89.000000 [216] = 79.000000 [217] = 97.000000 [218] = 99.000000 [219] = 95.000000 [220] = 91.000000 [221] = 97.000000 [222] = 87.000000 [223] = 97.000000 [224] = 85.000000 [225] = 109.000000 [226] = 103.000000 [227] = 107.000000 [228] = 97.000000 [229] = 89.000000 [230] = 87.000000 [231] = 95.000000 [232] = 101.000000 [233] = 97.000000 [234] = 79.000000 [235] = 85.000000 [236] = 109.000000 [237] = 93.000000 [238] = 97.000000 [239] = 87.000000 [240] = 87.000000 [241] = 103.000000 [242] = 97.000000 [243] = 93.000000 [244] = 107.000000 [245] = 111.000000 [246] = 107.000000 [247] = 131.000000 [248] = 115.000000 [249] = 117.000000 [250] = 105.000000 [251] = 81.000000 [252] = 93.000000 [253] = 103.000000 [254] = 89.000000 [255] = 75.000000 [256] = 91.000000 [257] = 99.000000 [258] = 99.000000 [259] = 133.000000 [260] = 127.000000 [261] = 107.000000 [262] = 119.000000 [263] = 101.000000 [264] = 107.000000 [265] = 101.000000 [266] = 89.000000 [267] = 97.000000 [268] = 91.000000 [269] = 97.000000 [270] = 101.000000 [271] = 107.000000 [272] = 101.000000 [273] = 97.000000 [274] = 99.000000 [275] = 97.000000 [276] = 99.000000 [277] = 105.000000 [278] = 103.000000 [279] = 103.000000 [280] = 87.000000 [281] = 89.000000 [282] = 103.000000 [283] = 87.000000 [284] = 97.000000 [285] = 103.000000 [286] = 105.000000 [287] = 107.000000 [288] = 117.000000 [289] = 121.000000 [290] = 91.000000 [291] = 111.000000 [292] = 100.000000 [293] = 102.000000 [294] = 83.000000 [295] = 95.000000 [296] = 85.000000 [297] = 95.000000 [298] = 109.000000 [299] = 115.000000 [300] = 113.000000 [301] = 103.000000 [302] = 119.000000 [303] = 111.000000 [304] = 103.000000 [305] = 107.000000 [306] = 93.000000 [307] = 102.000000 [308] = 104.000000 [309] = 100.000000 [310] = 82.000000 [311] = 85.000000 [312] = 108.000000 [313] = 120.000000 [314] = 99.000000 [315] = 111.000000 [316] = 99.000000 [317] = 103.000000 [318] = 111.000000 [319] = 101.000000 [320] = 113.000000 [321] = 107.000000 [322] = 99.000000 [323] = 105.000000 [324] = 85.000000 [325] = 89.000000 [326] = 95.000000 [327] = 81.000000 [328] = 101.000000 [329] = 105.000000 [330] = 113.000000 [331] = 95.000000 [332] = 93.000000 [333] = 109.000000 [334] = 121.000000 [335] = 109.000000 [336] = 115.000000 [337] = 113.000000 [338] = 114.000000 [339] = 118.000000 [340] = 103.000000 [341] = 114.000000 [342] = 105.000000 [343] = 107.000000 [344] = 103.000000 [345] = 101.000000 [346] = 97.000000 [347] = 91.000000 [348] = 93.000000 [349] = 95.000000 [350] = 105.000000 [351] = 107.000000 [352] = 101.000000 [353] = 119.000000 [354] = 111.000000 [355] = 95.000000 [356] = 113.000000 [357] = 97.000000 [358] = 119.000000 [359] = 99.000000 [360] = 111.000000 [361] = 97.000000 [362] = 77.000000 [363] = 93.000000 [364] = 97.000000 [365] = 91.000000 [366] = 95.000000 [367] = 95.000000 [368] = 103.000000 [369] = 99.000000 [370] = 93.000000 [371] = 99.000000 [372] = 99.000000 [373] = 97.000000 [374] = 95.000000 [375] = 85.000000 [376] = 95.000000 [377] = 105.000000 [378] = 99.000000 [379] = 105.000000 [380] = 93.000000 [381] = 107.000000 [382] = 103.000000 [383] = 95.000000 [384] = 91.000000 [385] = 95.000000 [386] = 109.000000 [387] = 105.000000 [388] = 91.000000 [389] = 103.000000 [390] = 93.000000 [391] = 95.000000 [392] = 95.000000 [393] = 99.000000 [394] = 105.000000 [395] = 107.000000 [396] = 111.000000 [397] = 101.000000 [398] = 101.000000 [399] = 93.000000 [400] = 99.000000 [401] = 103.000000 [402] = 111.000000 [403] = 101.000000 [404] = 97.000000 [405] = 95.000000 [406] = 95.000000 [407] = 113.000000 [408] = 101.000000 [409] = 115.000000 [410] = 103.000000 [411] = 85.000000 [412] = 93.000000 [413] = 85.000000 [414] = 93.000000 [415] = 95.000000 [416] = 97.000000 [417] = 91.000000 [418] = 87.000000 [419] = 75.000000 [420] = 93.000000 [421] = 83.000000 [422] = 83.000000 [423] = 85.000000 [424] = 97.000000 [425] = 101.000000 [426] = 107.000000 [427] = 113.000000 [428] = 109.000000 [429] = 99.000000 [430] = 103.000000 [431] = 99.000000 [432] = 107.000000 [433] = 91.000000 [434] = 101.000000 [435] = 91.000000 [436] = 111.000000 [437] = 113.000000 [438] = 81.000000 [439] = 87.000000 [440] = 91.000000 [441] = 93.000000 [442] = 97.000000 [443] = 105.000000 [444] = 105.000000 [445] = 89.000000 [446] = 87.000000 [447] = 93.000000 [448] = 97.000000 [449] = 83.000000 [450] = 85.000000 [451] = 67.000000 [452] = 81.000000 [453] = 103.000000 [454] = 99.000000 [455] = 71.000000 [456] = 77.000000 [457] = 83.000000 [458] = 85.000000 [459] = 79.000000 [460] = 89.000000 [461] = 101.000000 [462] = 83.000000 [463] = 87.000000 [464] = 81.000000 [465] = 81.000000 [466] = 73.000000 [467] = 73.000000 [468] = 79.000000 [469] = 77.000000 [470] = 75.000000 [471] = 95.000000 [472] = 101.000000 [473] = 103.000000 [474] = 97.000000 [475] = 95.000000 [476] = 99.000000 [477] = 93.000000 [478] = 95.000000 [479] = 103.000000 [480] = 101.000000 [481] = 101.000000 [482] = 107.000000 [483] = 81.000000 [484] = 91.000000 [485] = 103.000000 [486] = 91.000000 [487] = 79.000000 [488] = 77.000000 [489] = 97.000000 [490] = 91.000000 [491] = 85.000000 [492] = 91.000000 [493] = 71.000000 [494] = 85.000000 [495] = 71.000000 [496] = 83.000000 [497] = 93.000000 [498] = 85.000000 [499] = 89.000000 [500] = 87.000000 [501] = 109.000000 [502] = 89.000000 [503] = 75.000000 [504] = 89.000000 [505] = 75.000000 [506] = 87.000000 [507] = 93.000000 [508] = 87.000000 [509] = 81.000000 [510] = 91.000000 [511] = 91.000000 [512] = 91.000000 [513] = 89.000000 [514] = 101.000000 [515] = 105.000000 [516] = 111.000000 [517] = 99.000000 [518] = 93.000000 [519] = 105.000000 [520] = 103.000000 [521] = 101.000000 [522] = 87.000000 [523] = 93.000000 [524] = 89.000000 [525] = 91.000000 [526] = 79.000000 [527] = 59.000000 [528] = 13.000000 [529] = 9.000000 [530] = 7.000000 [531] = 5.000000 [532] = 5.000000 [533] = 1.000000 [534] = 0.000000 [535] = 0.000000 [536] = 0.000000 [537] = 0.000000 [538] = 0.000000 [539] = 0.000000 [540] = 0.000000 [541] = 0.000000 [542] = 0.000000 [543] = 0.000000 [544] = 0.000000 [545] = 0.000000 [546] = 0.000000 [547] = 0.000000 [548] = 0.000000 [549] = 0.000000 [550] = 0.000000 [551] = 1.000000 [552] = 0.000000 [553] = 0.000000 [554] = 0.000000 [555] = 0.000000 [556] = 0.000000 [557] = 0.000000 [558] = 0.000000 [559] = 0.000000 [560] = 0.000000 [561] = 0.000000 [562] = 0.000000 [563] = 0.000000 [564] = 0.000000 [565] = 0.000000 [566] = 0.000000 [567] = 0.000000 [568] = 0.000000 [569] = 0.000000 [570] = 0.000000 [571] = 0.000000 [572] = 0.000000 [573] = 0.000000 [574] = 0.000000 [575] = 0.000000 [576] = 0.000000 [577] = 0.000000 [578] = 0.000000 [579] = 0.000000 [580] = 0.000000 [581] = 0.000000 [582] = 0.000000 [583] = 0.000000 [584] = 0.000000 [585] = 0.000000 [586] = 0.000000 [587] = 0.000000 [588] = 0.000000 [589] = 0.000000 [590] = 0.000000 [591] = 0.000000 [592] = 0.000000 [593] = 0.000000 [594] = 0.000000 [595] = 5.000000 [596] = 17.000000 [597] = 7.000000 [598] = 7.000000 [599] = 0.000000 [600] = 0.000000 [601] = 0.000000 [602] = 0.000000 [603] = 0.000000 [604] = 0.000000 [605] = 0.000000 [606] = 0.000000 [607] = 0.000000 [608] = 0.000000 [609] = 0.000000 [610] = 0.000000 [611] = 0.000000 [612] = 0.000000 [613] = 0.000000 [614] = 1.000000 [615] = 5.000000 [616] = 43.000000 [617] = 87.000000 [618] = 87.000000 [619] = 83.000000 [620] = 95.000000 [621] = 93.000000 [622] = 91.000000 [623] = 101.000000 [624] = 87.000000 [625] = 89.000000 [626] = 87.000000 [627] = 91.000000 [628] = 86.000000 [629] = 81.000000 [630] = 71.000000 [631] = 87.000000 [632] = 77.000000 [633] = 91.000000 [634] = 87.000000 [635] = 79.000000 [636] = 79.000000 [637] = 89.000000 [638] = 93.000000 [639] = 87.000000 [640] = 89.000000 [641] = 101.000000 [642] = 95.000000 [643] = 99.000000 [644] = 83.000000 [645] = 83.000000 [646] = 71.000000 [647] = 71.000000 [648] = 81.000000 [649] = 84.000000 [650] = 98.000000 [651] = 101.000000 [652] = 81.000000 [653] = 83.000000 [654] = 90.000000 [655] = 91.000000 [656] = 80.000000 [657] = 85.000000 [658] = 91.000000 [659] = 79.000000 [660] = 99.000000 [661] = 83.000000 [662] = 81.000000 [663] = 102.000000 [664] = 105.000000 [665] = 89.000000 [666] = 86.000000 [667] = 84.000000 [668] = 78.000000 [669] = 86.000000 [670] = 101.000000 [671] = 90.000000 [672] = 82.000000 [673] = 91.000000 [674] = 93.000000 [675] = 93.000000 [676] = 95.000000 [677] = 95.000000 [678] = 97.000000 [679] = 89.000000 [680] = 90.000000 [681] = 90.000000 [682] = 104.000000 [683] = 90.000000 [684] = 83.000000 [685] = 84.000000 [686] = 96.000000 [687] = 86.000000 [688] = 86.000000 [689] = 74.000000 [690] = 76.000000 [691] = 86.000000 [692] = 86.000000 [693] = 87.000000 [694] = 100.000000 [695] = 90.000000 [696] = 84.000000 [697] = 92.000000 [698] = 90.000000 [699] = 83.000000 [700] = 79.000000 [701] = 79.000000 [702] = 71.000000 [703] = 81.000000 [704] = 79.000000 [705] = 89.000000 [706] = 85.000000 [707] = 83.000000 [708] = 95.000000 [709] = 87.000000 [710] = 73.000000 [711] = 74.000000 [712] = 72.000000 [713] = 67.000000 [714] = 74.000000 [715] = 80.000000 [716] = 78.000000 [717] = 80.000000 [718] = 82.000000 [719] = 0.000000 [720] = 0.000000 leptonica-1.86.0/prog/makefile.static000066400000000000000000001265531506303110300175250ustar00rootroot00000000000000#/*====================================================================* # - Copyright (C) 2001 Leptonica. 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. # - # - 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 ANY # - 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. # *====================================================================*/ # makefile (for linux) # # For a nodebug version: make # For a debug version: make DEBUG=yes # For a shared library version: make SHARED=yes # With nonstandard library directories: # make EXTRALIBS="-L" # With nonstandard header directories # make EXTRAINCLUDES="-I" # # To remove all executables: make clean # # ======================================================================== # IMPORTANT: This Makefile is set up to link with liblept.a and liblept.so # that were built using using src/makefile (i.e., with 'make' in src). # If instead you built the library with configure/make/makeinstall, # you must do this here: # # (1) Change LIB_NODEBUG_DIR: # LIB_NODEBUG_DIR = /usr/local/lib [or wherever you installed # liblept.a] # (2) Edit ALL_LIBS to include the imaging libraries on your system, # as found in config_auto.h. For example, if you have the # jpeg, png, tiff and gif libraries, set # ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lgif -lz -lm # ======================================================================== # # To link and run programs using shared (dynamic linked) libraries, # you must do one of the following two things: # # (a) make sure your LD_LIBRARY_PATH variable points to the # directory in which the *.so files are placed; e.g. # export LD_LIBRARY_PATH=../lib/shared:$LD_LIBRARY_PATH # or # (b) have the *.so files (or links to them) in this directory # # On cygwin, remove -fPIC from CC. I believe that these files -- # convertfilestops.c, jbcorrelation.c, jbrankhaus.c, maketile.c, # and htmlviewer.c -- which use posix directory functions, will # now work properly. # # See below for enabling gif read/write. # Libraries are built into a binary tree with its root in the # parent directory ROOT_DIR = .. LIB_NODEBUG_DIR = $(ROOT_DIR)/lib/nodebug LIB_DEBUG_DIR = $(ROOT_DIR)/lib/debug LIB_SHARED_DIR = $(ROOT_DIR)/lib/shared # Include files are found within the same tree IMAGELIB_INCL = $(ROOT_DIR)/src CC = gcc -std=c99 -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO #CC = gcc -std=c89 -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO #CC = gcc -std=gnu99 -D_POSIX_C_SOURCE=200809L -DANSI -fPIC #CC = gcc -std=gnu89 -DANSI -fPIC #CC = gcc -std=gnu89 -Werror -DANSI -fPIC #CC = g++ -Werror -fPIC ifdef SHARED LIB_DIR = $(LIB_SHARED_DIR) OPTIMIZE = -O2 else ifdef DEBUG LIB_DIR = $(LIB_DEBUG_DIR) OPTIMIZE = -g else LIB_DIR = $(LIB_NODEBUG_DIR) OPTIMIZE = -O2 endif endif OPTIONS = INCLUDES = -I$(IMAGELIB_INCL) -I/usr/X11R6/include $(EXTRAINCLUDES) #INCLUDES = -I$(IMAGELIB_INCL) -I/usr/X11R6/include -I/usr/local/include $(EXTRAINCLUDES) CFLAGS = $(OPTIMIZE) $(OPTIONS) # Use -D_STANDARD_C to stub out the non-posix GNU functions fmemopen() # and open_memstream() CPPFLAGS = $(INCLUDES) LDFLAGS += -L$(LIB_DIR) -L/usr/X11R6/lib -L/usr/lib $(EXTRALIBS) #LDFLAGS += -L$(LIB_DIR) -L/usr/X11R6/lib -L/usr/local/lib -L/usr/lib $(EXTRALIBS) ifdef SHARED LEPTLIB = $(LIB_DIR)/liblept.so else LEPTLIB = $(LIB_DIR)/liblept.a endif # To enable webp read/write: # (1) In src/environ.h: #define HAVE_LIBWEBP # (2) Install libwebp # (3) Include -lwebp in ALL_LIBS # To enable webpanim read/write: # (1) In src/environ.h: #define HAVE_LIBWEBP_ANIM # (2) Install libwebp with # ./configure --enable-everything (to get mux/demux libs) # Modify makefile.unix to add -fPIC: # CFLAGS = -O3 -DNDEBUG $(EXTRA_FLAGS) -fPIC # (3) Include -lwebpmux in ALL_LIBS # To enable gif read/write: # (1) In src/environ.h: #define HAVE_LIBGIF # (2) Install libgif # (3) Include -lgif in ALL_LIBS # Be sure LD_LIBRARY_PATH includes the appropriate library directories, such # as /usr/local/include, in which libwebp.so and/or libgif.so are installed # Use or modify an appropriate line below for ALL_LIBS: ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lz -lm #ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lwebp -lz -lm #ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lwebp -lwebpmux -lz -lm #ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lwebp -lopenjp2 -lz -lm #ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lwebp -lopenjp2 -lgif -lz -lm #ALL_LIBS = $(LEPTLIB) -ltiff -ljpeg -lpng -lwebp -lwebpmux -lopenjp2 -lgif -lz -lm #ALL_LIBS = $(LEPTLIB) -lm #no external linked imaging libraries ######################################################################### SRC = adaptmap_reg.c adaptnorm_reg.c affine_reg.c \ alltests_reg.c alphaops_reg.c alphaxform_reg.c \ baseline_reg.c bilateral1_reg.c bilateral2_reg.c \ bilinear_reg.c binarize_reg.c \ binmorph1_reg.c binmorph2_reg.c binmorph3_reg.c \ binmorph4_reg.c binmorph5_reg.c binmorph6_reg.c \ blackwhite_reg.c blend1_reg.c blend2_reg.c \ blend3_reg.c blend4_reg.c blend5_reg.c \ boxa1_reg.c boxa2_reg.c boxa3_reg.c boxa4_reg.c \ bytea_reg.c ccbord_reg.c ccthin1_reg.c ccthin2_reg.c \ checkerboard_reg.c circle_reg.c \ cmapquant_reg.c colorcontent_reg.c \ colorfill_reg.c coloring_reg.c colorize_reg.c \ colormask_reg.c colormorph_reg.c colorquant_reg.c \ colorseg_reg.c colorspace_reg.c \ compare_reg.c compfilter_reg.c \ conncomp_reg.c conversion_reg.c convolve_reg.c \ crop_reg.c dewarp_reg.c distance_reg.c \ dither_reg.c dna_reg.c \ dwamorph1_reg.c dwamorph2_reg.c \ edge_reg.c encoding_reg.c enhance_reg.c equal_reg.c \ expand_reg.c extrema_reg.c falsecolor_reg.c \ fhmtauto_reg.c files_reg.c \ findcorners_reg.c findpattern1_reg.c findpattern2_reg.c \ flipdetect_reg.c fmorphauto_reg.c \ fpix1_reg.c fpix2_reg.c \ genfonts_reg.c gifio_reg.c \ grayfill_reg.c graymorph1_reg.c \ graymorph2_reg.c grayquant_reg.c \ hardlight_reg.c hash_reg.c heap_reg.c \ insert_reg.c ioformats_reg.c \ iomisc_reg.c italic_reg.c \ jbclass_reg.c jp2kio_reg.c jpegio_reg.c kernel_reg.c \ label_reg.c lineremoval_reg.c locminmax_reg.c \ logicops_reg.c lowaccess_reg.c lowsat_reg.c \ maze_reg.c morphseq_reg.c mtiff_reg.c \ multitype_reg.c nearline_reg.c newspaper_reg.c \ numa1_reg.c numa2_reg.c numa3_reg.c \ overlap_reg.c pageseg_reg.c paint_reg.c paintmask_reg.c \ partition_reg.c pdfio1_reg.c pdfio2_reg.c pdfseg_reg.c \ pixa1_reg.c pixa2_reg.c \ pixadisp_reg.c pixalloc_reg.c \ pixcomp_reg.c pixmem_reg.c \ pixserial_reg.c pixtile_reg.c \ pngio_reg.c pnmio_reg.c \ projection_reg.c projective_reg.c \ psio_reg.c psioseg_reg.c \ pta_reg.c ptra1_reg.c ptra2_reg.c quadtree_reg.c \ rankbin_reg.c rankhisto_reg.c rank_reg.c \ rasteropip_reg.c rasterop_reg.c rectangle_reg.c \ rotate1_reg.c rotate2_reg.c rotateorth_reg.c \ scale_reg.c seedspread_reg.c selio_reg.c \ shear1_reg.c shear2_reg.c skew_reg.c \ smallpix_reg.c smoothedge_reg.c \ speckle_reg.c splitcomp_reg.c \ string_reg.c subpixel_reg.c \ texturefill_reg.c threshnorm_reg.c \ translate_reg.c warper_reg.c \ watershed_reg.c webpanimio_reg.c webpio_reg.c \ wordboxes_reg.c writetext_reg.c xformbox_reg.c \ adaptmap_dark.c arabic_lines.c arithtest.c \ autogentest1.c autogentest2.c barcodetest.c \ binarizefiles.c binarize_set.c bincompare.c \ blendcmaptest.c buffertest.c \ ccbordtest.c cctest1.c \ cleanpdf.c colorsegtest.c comparepages.c \ comparepixa.c comparetest.c \ compresspdf.c contrasttest.c \ convertfilestopdf.c convertfilestops.c \ convertformat.c \ convertsegfilestopdf.c convertsegfilestops.c \ converttogray.c converttopdf.c converttops.c \ cornertest.c corrupttest.c \ croppdf.c croptext.c deskew_it.c \ dewarprules.c dewarptest1.c dewarptest2.c \ dewarptest3.c dewarptest4.c dewarptest5.c \ digitprep1.c displayboxa.c displayboxes_on_pixa.c \ displaypix.c displaypixa.c dwalineargen.c \ fcombautogen.c fhmtautogen.c \ fileinfo.c findbinding.c find_colorregions.c \ findpattern1.c findpattern2.c findpattern3.c \ fmorphautogen.c \ fpixcontours.c gammatest.c \ graphicstest.c graymorphtest.c \ hashtest.c histoduptest.c histotest.c \ htmlviewer.c imagetops.c \ jbcorrelation.c jbrankhaus.c jbwords.c \ lightcolortest.c listtest.c \ livre_adapt.c livre_hmt.c livre_makefigs.c livre_orient.c \ livre_pageseg.c livre_seedgen.c livre_tophat.c \ maketile.c maptest.c messagetest.c \ misctest1.c misctest2.c \ modifyhuesat.c morphtest1.c \ numaranktest.c otsutest1.c otsutest2.c \ pagesegtest1.c pagesegtest2.c \ partifytest.c partitiontest.c percolatetest.c \ pixaatest.c pixafileinfo.c plottest.c \ printimage.c printsplitimage.c printtiff.c \ rasteroptest.c rbtreetest.c \ recog_bootnum1.c recog_bootnum2.c recog_bootnum3.c \ recogsort.c recogtest1.c recogtest2.c recogtest3.c \ recogtest4.c recogtest5.c recogtest6.c recogtest7.c \ reducetest.c removecmap.c \ renderfonts.c replacebytes.c \ rotatefastalt.c rotate_it.c \ rotateorthtest1.c rotatetest1.c \ runlengthtest.c scaleandtile.c scaleimages.c \ scale_it.c scaletest1.c scaletest2.c \ seedfilltest.c settest.c sharptest.c \ sheartest.c showedges.c \ skewtest.c sorttest.c \ splitimage2pdf.c splitpdf.c \ sudokutest.c textorient.c \ tiffpdftest.c trctest.c \ underlinetest.c warpertest.c wordsinorder.c \ writemtiff.c xtractprotos.c yuvtest.c # Remove the .o files from these on clean SRC2 = autogen.137.c dwalinear.3.c dwalinearlow.3.c ###################################################################### all: $(SRC:%.c=%) # Jan 2018 (even smaller set of nine utility programs) #debian: convertfilestopdf convertfilestops convertformat \ # convertsegfilestopdf convertsegfilestops \ # converttopdf converttops fileinfo xtractprotos # Jan 2014 (minimal set of utility programs) #debian: convertfilestopdf convertfilestops convertformat \ # convertsegfilestopdf convertsegfilestops \ # converttopdf converttops fileinfo \ # printimage printsplitimage printtiff \ # splitimage2pdf xtractprotos # Jan 2014 (could have been in Jan 2014 debian, but left off) # grayfill_reg histotest_reg sudokutest watershedtest # Jan 2012 #debian: binarize_reg binmorph2_reg ccthin2_reg colorquant_reg \ # colorseg_reg convolve_reg dewarp_reg \ # dwamorph1_reg dwamorph2_reg \ # distance_reg enhance_reg ioformats_reg \ # maze_reg paintmask_reg \ # rotate1_reg rotate2_reg scale_reg \ # seedspread_reg splitcomp_reg threshnorm_reg \ # warper_reg convertfilestopdf convertfilestops \ # convertjpegfilestopdf converttops dewarptest1 \ # fcombautogen fhmtautogen fileinfo \ # fmorphautogen pdfiotest \ # printimage printsplitimage splitimage2pdf \ # sudokutest watershedtest xtractprotos # Jan 2011 #debian: binarize_reg cctest1 ccthin1_reg \ # colormorphtest colorquant_reg colorspacetest \ # comparetest convertfilestopdf convertfilestops \ # convertformat converttops dewarp_reg \ # distance_reg dithertest fileinfo \ # flipdetect_reg fmorphauto_reg gammatest \ # grayfill_reg graymorph1_reg grayquant_reg \ # hardlight_reg ioformats_reg jbcorrelation \ # kernel_reg lineremoval maze_reg \ # pagesegtest1 paint_reg paintmask_reg \ # printimage printsplitimage printtiff \ # rank_reg ranktest scale_reg \ # skewtest splitcomp_reg warper_reg \ # watershedtest xtractprotos ###################################################################### adaptmap_reg: adaptmap_reg.o $(LEPTLIB) $(CC) -o adaptmap_reg adaptmap_reg.o $(ALL_LIBS) $(EXTRALIBS) adaptnorm_reg: adaptnorm_reg.o $(LEPTLIB) $(CC) -o adaptnorm_reg adaptnorm_reg.o $(ALL_LIBS) $(EXTRALIBS) affine_reg: affine_reg.o $(LEPTLIB) $(CC) -o affine_reg affine_reg.o $(ALL_LIBS) $(EXTRALIBS) alltests_reg: alltests_reg.o $(LEPTLIB) $(CC) -o alltests_reg alltests_reg.o $(ALL_LIBS) $(EXTRALIBS) alphaops_reg: alphaops_reg.o $(LEPTLIB) $(CC) -o alphaops_reg alphaops_reg.o $(ALL_LIBS) $(EXTRALIBS) alphaxform_reg: alphaxform_reg.o $(LEPTLIB) $(CC) -o alphaxform_reg alphaxform_reg.o $(ALL_LIBS) $(EXTRALIBS) baseline_reg: baseline_reg.o $(LEPTLIB) $(CC) -o baseline_reg baseline_reg.o $(ALL_LIBS) $(EXTRALIBS) bilateral1_reg: bilateral1_reg.o $(LEPTLIB) $(CC) -o bilateral1_reg bilateral1_reg.o $(ALL_LIBS) $(EXTRALIBS) bilateral2_reg: bilateral2_reg.o $(LEPTLIB) $(CC) -o bilateral2_reg bilateral2_reg.o $(ALL_LIBS) $(EXTRALIBS) bilinear_reg: bilinear_reg.o $(LEPTLIB) $(CC) -o bilinear_reg bilinear_reg.o $(ALL_LIBS) $(EXTRALIBS) binarize_reg: binarize_reg.o $(LEPTLIB) $(CC) -o binarize_reg binarize_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph1_reg: binmorph1_reg.o $(LEPTLIB) $(CC) -o binmorph1_reg binmorph1_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph2_reg: binmorph2_reg.o $(LEPTLIB) $(CC) -o binmorph2_reg binmorph2_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph3_reg: binmorph3_reg.o $(LEPTLIB) $(CC) -o binmorph3_reg binmorph3_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph4_reg: binmorph4_reg.o $(LEPTLIB) $(CC) -o binmorph4_reg binmorph4_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph5_reg: binmorph5_reg.o $(LEPTLIB) $(CC) -o binmorph5_reg binmorph5_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph6_reg: binmorph6_reg.o $(LEPTLIB) $(CC) -o binmorph6_reg binmorph6_reg.o $(ALL_LIBS) $(EXTRALIBS) blackwhite_reg: blackwhite_reg.o $(LEPTLIB) $(CC) -o blackwhite_reg blackwhite_reg.o $(ALL_LIBS) $(EXTRALIBS) blend1_reg: blend1_reg.o $(LEPTLIB) $(CC) -o blend1_reg blend1_reg.o $(ALL_LIBS) $(EXTRALIBS) blend2_reg: blend2_reg.o $(LEPTLIB) $(CC) -o blend2_reg blend2_reg.o $(ALL_LIBS) $(EXTRALIBS) blend3_reg: blend3_reg.o $(LEPTLIB) $(CC) -o blend3_reg blend3_reg.o $(ALL_LIBS) $(EXTRALIBS) blend4_reg: blend4_reg.o $(LEPTLIB) $(CC) -o blend4_reg blend4_reg.o $(ALL_LIBS) $(EXTRALIBS) blend5_reg: blend5_reg.o $(LEPTLIB) $(CC) -o blend5_reg blend5_reg.o $(ALL_LIBS) $(EXTRALIBS) boxa1_reg: boxa1_reg.o $(LEPTLIB) $(CC) -o boxa1_reg boxa1_reg.o $(ALL_LIBS) $(EXTRALIBS) boxa2_reg: boxa2_reg.o $(LEPTLIB) $(CC) -o boxa2_reg boxa2_reg.o $(ALL_LIBS) $(EXTRALIBS) boxa3_reg: boxa3_reg.o $(LEPTLIB) $(CC) -o boxa3_reg boxa3_reg.o $(ALL_LIBS) $(EXTRALIBS) boxa4_reg: boxa4_reg.o $(LEPTLIB) $(CC) -o boxa4_reg boxa4_reg.o $(ALL_LIBS) $(EXTRALIBS) bytea_reg: bytea_reg.o $(LEPTLIB) $(CC) -o bytea_reg bytea_reg.o $(ALL_LIBS) $(EXTRALIBS) ccbord_reg: ccbord_reg.o $(LEPTLIB) $(CC) -o ccbord_reg ccbord_reg.o $(ALL_LIBS) $(EXTRALIBS) ccthin1_reg: ccthin1_reg.o $(LEPTLIB) $(CC) -o ccthin1_reg ccthin1_reg.o $(ALL_LIBS) $(EXTRALIBS) ccthin2_reg: ccthin2_reg.o $(LEPTLIB) $(CC) -o ccthin2_reg ccthin2_reg.o $(ALL_LIBS) $(EXTRALIBS) checkerboard_reg: checkerboard_reg.o $(LEPTLIB) $(CC) -o checkerboard_reg checkerboard_reg.o $(ALL_LIBS) $(EXTRALIBS) circle_reg: circle_reg.o $(LEPTLIB) $(CC) -o circle_reg circle_reg.o $(ALL_LIBS) $(EXTRALIBS) cmapquant_reg: cmapquant_reg.o $(LEPTLIB) $(CC) -o cmapquant_reg cmapquant_reg.o $(ALL_LIBS) $(EXTRALIBS) colorcontent_reg: colorcontent_reg.o $(LEPTLIB) $(CC) -o colorcontent_reg colorcontent_reg.o $(ALL_LIBS) $(EXTRALIBS) colorfill_reg: colorfill_reg.o $(LEPTLIB) $(CC) -o colorfill_reg colorfill_reg.o $(ALL_LIBS) $(EXTRALIBS) coloring_reg: coloring_reg.o $(LEPTLIB) $(CC) -o coloring_reg coloring_reg.o $(ALL_LIBS) $(EXTRALIBS) colorize_reg: colorize_reg.o $(LEPTLIB) $(CC) -o colorize_reg colorize_reg.o $(ALL_LIBS) $(EXTRALIBS) colormask_reg: colormask_reg.o $(LEPTLIB) $(CC) -o colormask_reg colormask_reg.o $(ALL_LIBS) $(EXTRALIBS) colormorph_reg: colormorph_reg.o $(LEPTLIB) $(CC) -o colormorph_reg colormorph_reg.o $(ALL_LIBS) $(EXTRALIBS) colorquant_reg: colorquant_reg.o $(LEPTLIB) $(CC) -o colorquant_reg colorquant_reg.o $(ALL_LIBS) $(EXTRALIBS) colorseg_reg: colorseg_reg.o $(LEPTLIB) $(CC) -o colorseg_reg colorseg_reg.o $(ALL_LIBS) $(EXTRALIBS) colorspace_reg: colorspace_reg.o $(LEPTLIB) $(CC) -o colorspace_reg colorspace_reg.o $(ALL_LIBS) $(EXTRALIBS) compare_reg: compare_reg.o $(LEPTLIB) $(CC) -o compare_reg compare_reg.o $(ALL_LIBS) $(EXTRALIBS) compfilter_reg: compfilter_reg.o $(LEPTLIB) $(CC) -o compfilter_reg compfilter_reg.o $(ALL_LIBS) $(EXTRALIBS) conncomp_reg: conncomp_reg.o $(LEPTLIB) $(CC) -o conncomp_reg conncomp_reg.o $(ALL_LIBS) $(EXTRALIBS) conversion_reg: conversion_reg.o $(LEPTLIB) $(CC) -o conversion_reg conversion_reg.o $(ALL_LIBS) $(EXTRALIBS) convolve_reg: convolve_reg.o $(LEPTLIB) $(CC) -o convolve_reg convolve_reg.o $(ALL_LIBS) $(EXTRALIBS) crop_reg: crop_reg.o $(LEPTLIB) $(CC) -o crop_reg crop_reg.o $(ALL_LIBS) $(EXTRALIBS) dewarp_reg: dewarp_reg.o $(LEPTLIB) $(CC) -o dewarp_reg dewarp_reg.o $(ALL_LIBS) $(EXTRALIBS) distance_reg: distance_reg.o $(LEPTLIB) $(CC) -o distance_reg distance_reg.o $(ALL_LIBS) $(EXTRALIBS) dither_reg: dither_reg.o $(LEPTLIB) $(CC) -o dither_reg dither_reg.o $(ALL_LIBS) $(EXTRALIBS) dna_reg: dna_reg.o $(LEPTLIB) $(CC) -o dna_reg dna_reg.o $(ALL_LIBS) $(EXTRALIBS) dwamorph1_reg: dwamorph1_reg.o dwalinear.3.o dwalinearlow.3.o $(LEPTLIB) $(CC) -o dwamorph1_reg dwamorph1_reg.o dwalinear.3.o dwalinearlow.3.o $(ALL_LIBS) $(EXTRALIBS) dwamorph2_reg: dwamorph2_reg.o dwalinear.3.o dwalinearlow.3.o $(LEPTLIB) $(CC) -o dwamorph2_reg dwamorph2_reg.o dwalinear.3.o dwalinearlow.3.o $(ALL_LIBS) $(EXTRALIBS) edge_reg: edge_reg.o $(LEPTLIB) $(CC) -o edge_reg edge_reg.o $(ALL_LIBS) $(EXTRALIBS) encoding_reg: encoding_reg.o $(LEPTLIB) $(CC) -o encoding_reg encoding_reg.o $(ALL_LIBS) $(EXTRALIBS) enhance_reg: enhance_reg.o $(LEPTLIB) $(CC) -o enhance_reg enhance_reg.o $(ALL_LIBS) $(EXTRALIBS) equal_reg: equal_reg.o $(LEPTLIB) $(CC) -o equal_reg equal_reg.o $(ALL_LIBS) $(EXTRALIBS) expand_reg: expand_reg.o $(LEPTLIB) $(CC) -o expand_reg expand_reg.o $(ALL_LIBS) $(EXTRALIBS) extrema_reg: extrema_reg.o $(LEPTLIB) $(CC) -o extrema_reg extrema_reg.o $(ALL_LIBS) $(EXTRALIBS) falsecolor_reg: falsecolor_reg.o $(LEPTLIB) $(CC) -o falsecolor_reg falsecolor_reg.o $(ALL_LIBS) $(EXTRALIBS) fhmtauto_reg: fhmtauto_reg.o $(LEPTLIB) $(CC) -o fhmtauto_reg fhmtauto_reg.o $(ALL_LIBS) $(EXTRALIBS) files_reg: files_reg.o $(LEPTLIB) $(CC) -o files_reg files_reg.o $(ALL_LIBS) $(EXTRALIBS) findcorners_reg: findcorners_reg.o $(LEPTLIB) $(CC) -o findcorners_reg findcorners_reg.o $(ALL_LIBS) $(EXTRALIBS) findpattern1_reg: findpattern1_reg.o $(LEPTLIB) $(CC) -o findpattern1_reg findpattern1_reg.o $(ALL_LIBS) $(EXTRALIBS) findpattern2_reg: findpattern2_reg.o $(LEPTLIB) $(CC) -o findpattern2_reg findpattern2_reg.o $(ALL_LIBS) $(EXTRALIBS) flipdetect_reg: flipdetect_reg.o $(LEPTLIB) $(CC) -o flipdetect_reg flipdetect_reg.o $(ALL_LIBS) $(EXTRALIBS) fmorphauto_reg: fmorphauto_reg.o $(LEPTLIB) $(CC) -o fmorphauto_reg fmorphauto_reg.o $(ALL_LIBS) $(EXTRALIBS) fpix1_reg: fpix1_reg.o $(LEPTLIB) $(CC) -o fpix1_reg fpix1_reg.o $(ALL_LIBS) $(EXTRALIBS) fpix2_reg: fpix2_reg.o $(LEPTLIB) $(CC) -o fpix2_reg fpix2_reg.o $(ALL_LIBS) $(EXTRALIBS) genfonts_reg: genfonts_reg.o $(LEPTLIB) $(CC) -o genfonts_reg genfonts_reg.o $(ALL_LIBS) $(EXTRALIBS) gifio_reg: gifio_reg.o $(LEPTLIB) $(CC) -o gifio_reg gifio_reg.o $(ALL_LIBS) $(EXTRALIBS) grayfill_reg: grayfill_reg.o $(LEPTLIB) $(CC) -o grayfill_reg grayfill_reg.o $(ALL_LIBS) $(EXTRALIBS) graymorph1_reg: graymorph1_reg.o $(LEPTLIB) $(CC) -o graymorph1_reg graymorph1_reg.o $(ALL_LIBS) $(EXTRALIBS) graymorph2_reg: graymorph2_reg.o $(LEPTLIB) $(CC) -o graymorph2_reg graymorph2_reg.o $(ALL_LIBS) $(EXTRALIBS) grayquant_reg: grayquant_reg.o $(LEPTLIB) $(CC) -o grayquant_reg grayquant_reg.o $(ALL_LIBS) $(EXTRALIBS) hardlight_reg: hardlight_reg.o $(LEPTLIB) $(CC) -o hardlight_reg hardlight_reg.o $(ALL_LIBS) $(EXTRALIBS) hash_reg: hash_reg.o $(LEPTLIB) $(CC) -o hash_reg hash_reg.o $(ALL_LIBS) $(EXTRALIBS) heap_reg: heap_reg.o $(LEPTLIB) $(CC) -o heap_reg heap_reg.o $(ALL_LIBS) $(EXTRALIBS) insert_reg: insert_reg.o $(LEPTLIB) $(CC) -o insert_reg insert_reg.o $(ALL_LIBS) $(EXTRALIBS) ioformats_reg: ioformats_reg.o $(LEPTLIB) $(CC) -o ioformats_reg ioformats_reg.o $(ALL_LIBS) $(EXTRALIBS) iomisc_reg: iomisc_reg.o $(LEPTLIB) $(CC) -o iomisc_reg iomisc_reg.o $(ALL_LIBS) $(EXTRALIBS) italic_reg: italic_reg.o $(LEPTLIB) $(CC) -o italic_reg italic_reg.o $(ALL_LIBS) $(EXTRALIBS) jbclass_reg: jbclass_reg.o $(LEPTLIB) $(CC) -o jbclass_reg jbclass_reg.o $(ALL_LIBS) $(EXTRALIBS) jp2kio_reg: jp2kio_reg.o $(LEPTLIB) $(CC) -o jp2kio_reg jp2kio_reg.o $(ALL_LIBS) $(EXTRALIBS) jpegio_reg: jpegio_reg.o $(LEPTLIB) $(CC) -o jpegio_reg jpegio_reg.o $(ALL_LIBS) $(EXTRALIBS) kernel_reg: kernel_reg.o $(LEPTLIB) $(CC) -o kernel_reg kernel_reg.o $(ALL_LIBS) $(EXTRALIBS) label_reg: label_reg.o $(LEPTLIB) $(CC) -o label_reg label_reg.o $(ALL_LIBS) $(EXTRALIBS) lineremoval_reg: lineremoval_reg.o $(LEPTLIB) $(CC) -o lineremoval_reg lineremoval_reg.o $(ALL_LIBS) $(EXTRALIBS) locminmax_reg: locminmax_reg.o $(LEPTLIB) $(CC) -o locminmax_reg locminmax_reg.o $(ALL_LIBS) $(EXTRALIBS) logicops_reg: logicops_reg.o $(LEPTLIB) $(CC) -o logicops_reg logicops_reg.o $(ALL_LIBS) $(EXTRALIBS) lowsat_reg: lowsat_reg.o $(LEPTLIB) $(CC) -o lowsat_reg lowsat_reg.o $(ALL_LIBS) $(EXTRALIBS) lowaccess_reg: lowaccess_reg.o $(LEPTLIB) $(CC) -o lowaccess_reg lowaccess_reg.o $(ALL_LIBS) $(EXTRALIBS) maze_reg: maze_reg.o $(LEPTLIB) $(CC) -o maze_reg maze_reg.o $(ALL_LIBS) $(EXTRALIBS) morphseq_reg: morphseq_reg.o $(LEPTLIB) $(CC) -o morphseq_reg morphseq_reg.o $(ALL_LIBS) $(EXTRALIBS) mtiff_reg: mtiff_reg.o $(LEPTLIB) $(CC) -o mtiff_reg mtiff_reg.o $(ALL_LIBS) $(EXTRALIBS) multitype_reg: multitype_reg.o $(LEPTLIB) $(CC) -o multitype_reg multitype_reg.o $(ALL_LIBS) $(EXTRALIBS) nearline_reg: nearline_reg.o $(LEPTLIB) $(CC) -o nearline_reg nearline_reg.o $(ALL_LIBS) $(EXTRALIBS) newspaper_reg: newspaper_reg.o $(LEPTLIB) $(CC) -o newspaper_reg newspaper_reg.o $(ALL_LIBS) $(EXTRALIBS) numa1_reg: numa1_reg.o $(LEPTLIB) $(CC) -o numa1_reg numa1_reg.o $(ALL_LIBS) $(EXTRALIBS) numa2_reg: numa2_reg.o $(LEPTLIB) $(CC) -o numa2_reg numa2_reg.o $(ALL_LIBS) $(EXTRALIBS) numa3_reg: numa3_reg.o $(LEPTLIB) $(CC) -o numa3_reg numa3_reg.o $(ALL_LIBS) $(EXTRALIBS) overlap_reg: overlap_reg.o $(LEPTLIB) $(CC) -o overlap_reg overlap_reg.o $(ALL_LIBS) $(EXTRALIBS) pageseg_reg: pageseg_reg.o $(LEPTLIB) $(CC) -o pageseg_reg pageseg_reg.o $(ALL_LIBS) $(EXTRALIBS) paint_reg: paint_reg.o $(LEPTLIB) $(CC) -o paint_reg paint_reg.o $(ALL_LIBS) $(EXTRALIBS) paintmask_reg: paintmask_reg.o $(LEPTLIB) $(CC) -o paintmask_reg paintmask_reg.o $(ALL_LIBS) $(EXTRALIBS) partition_reg: partition_reg.o $(LEPTLIB) $(CC) -o partition_reg partition_reg.o $(ALL_LIBS) $(EXTRALIBS) pdfio1_reg: pdfio1_reg.o $(LEPTLIB) $(CC) -o pdfio1_reg pdfio1_reg.o $(ALL_LIBS) $(EXTRALIBS) pdfio2_reg: pdfio2_reg.o $(LEPTLIB) $(CC) -o pdfio2_reg pdfio2_reg.o $(ALL_LIBS) $(EXTRALIBS) pdfseg_reg: pdfseg_reg.o $(LEPTLIB) $(CC) -o pdfseg_reg pdfseg_reg.o $(ALL_LIBS) $(EXTRALIBS) pixa1_reg: pixa1_reg.o $(LEPTLIB) $(CC) -o pixa1_reg pixa1_reg.o $(ALL_LIBS) $(EXTRALIBS) pixa2_reg: pixa2_reg.o $(LEPTLIB) $(CC) -o pixa2_reg pixa2_reg.o $(ALL_LIBS) $(EXTRALIBS) pixadisp_reg: pixadisp_reg.o $(LEPTLIB) $(CC) -o pixadisp_reg pixadisp_reg.o $(ALL_LIBS) $(EXTRALIBS) pixalloc_reg: pixalloc_reg.o $(LEPTLIB) $(CC) -o pixalloc_reg pixalloc_reg.o $(ALL_LIBS) $(EXTRALIBS) pixcomp_reg: pixcomp_reg.o $(LEPTLIB) $(CC) -o pixcomp_reg pixcomp_reg.o $(ALL_LIBS) $(EXTRALIBS) pixmem_reg: pixmem_reg.o $(LEPTLIB) $(CC) -o pixmem_reg pixmem_reg.o $(ALL_LIBS) $(EXTRALIBS) pixserial_reg: pixserial_reg.o $(LEPTLIB) $(CC) -o pixserial_reg pixserial_reg.o $(ALL_LIBS) $(EXTRALIBS) pixtile_reg: pixtile_reg.o $(LEPTLIB) $(CC) -o pixtile_reg pixtile_reg.o $(ALL_LIBS) $(EXTRALIBS) pngio_reg: pngio_reg.o $(LEPTLIB) $(CC) -o pngio_reg pngio_reg.o $(ALL_LIBS) $(EXTRALIBS) pnmio_reg: pnmio_reg.o $(LEPTLIB) $(CC) -o pnmio_reg pnmio_reg.o $(ALL_LIBS) $(EXTRALIBS) projection_reg: projection_reg.o $(LEPTLIB) $(CC) -o projection_reg projection_reg.o $(ALL_LIBS) $(EXTRALIBS) projective_reg: projective_reg.o $(LEPTLIB) $(CC) -o projective_reg projective_reg.o $(ALL_LIBS) $(EXTRALIBS) psio_reg: psio_reg.o $(LEPTLIB) $(CC) -o psio_reg psio_reg.o $(ALL_LIBS) $(EXTRALIBS) psioseg_reg: psioseg_reg.o $(LEPTLIB) $(CC) -o psioseg_reg psioseg_reg.o $(ALL_LIBS) $(EXTRALIBS) pta_reg: pta_reg.o $(LEPTLIB) $(CC) -o pta_reg pta_reg.o $(ALL_LIBS) $(EXTRALIBS) ptra1_reg: ptra1_reg.o $(LEPTLIB) $(CC) -o ptra1_reg ptra1_reg.o $(ALL_LIBS) $(EXTRALIBS) ptra2_reg: ptra2_reg.o $(LEPTLIB) $(CC) -o ptra2_reg ptra2_reg.o $(ALL_LIBS) $(EXTRALIBS) quadtree_reg: quadtree_reg.o $(LEPTLIB) $(CC) -o quadtree_reg quadtree_reg.o $(ALL_LIBS) $(EXTRALIBS) rank_reg: rank_reg.o $(LEPTLIB) $(CC) -o rank_reg rank_reg.o $(ALL_LIBS) $(EXTRALIBS) rankbin_reg: rankbin_reg.o $(LEPTLIB) $(CC) -o rankbin_reg rankbin_reg.o $(ALL_LIBS) $(EXTRALIBS) rankhisto_reg: rankhisto_reg.o $(LEPTLIB) $(CC) -o rankhisto_reg rankhisto_reg.o $(ALL_LIBS) $(EXTRALIBS) rasterop_reg: rasterop_reg.o $(LEPTLIB) $(CC) -o rasterop_reg rasterop_reg.o $(ALL_LIBS) $(EXTRALIBS) rasteropip_reg: rasteropip_reg.o $(LEPTLIB) $(CC) -o rasteropip_reg rasteropip_reg.o $(ALL_LIBS) $(EXTRALIBS) rectangle_reg: rectangle_reg.o $(LEPTLIB) $(CC) -o rectangle_reg rectangle_reg.o $(ALL_LIBS) $(EXTRALIBS) rotate1_reg: rotate1_reg.o $(LEPTLIB) $(CC) -o rotate1_reg rotate1_reg.o $(ALL_LIBS) $(EXTRALIBS) rotate2_reg: rotate2_reg.o $(LEPTLIB) $(CC) -o rotate2_reg rotate2_reg.o $(ALL_LIBS) $(EXTRALIBS) rotateorth_reg: rotateorth_reg.o $(LEPTLIB) $(CC) -o rotateorth_reg rotateorth_reg.o $(ALL_LIBS) $(EXTRALIBS) scale_reg: scale_reg.o $(LEPTLIB) $(CC) -o scale_reg scale_reg.o $(ALL_LIBS) $(EXTRALIBS) seedspread_reg: seedspread_reg.o $(LEPTLIB) $(CC) -o seedspread_reg seedspread_reg.o $(ALL_LIBS) $(EXTRALIBS) selio_reg: selio_reg.o $(LEPTLIB) $(CC) -o selio_reg selio_reg.o $(ALL_LIBS) $(EXTRALIBS) shear1_reg: shear1_reg.o $(LEPTLIB) $(CC) -o shear1_reg shear1_reg.o $(ALL_LIBS) $(EXTRALIBS) shear2_reg: shear2_reg.o $(LEPTLIB) $(CC) -o shear2_reg shear2_reg.o $(ALL_LIBS) $(EXTRALIBS) skew_reg: skew_reg.o $(LEPTLIB) $(CC) -o skew_reg skew_reg.o $(ALL_LIBS) $(EXTRALIBS) smallpix_reg: smallpix_reg.o $(LEPTLIB) $(CC) -o smallpix_reg smallpix_reg.o $(ALL_LIBS) $(EXTRALIBS) smoothedge_reg: smoothedge_reg.o $(LEPTLIB) $(CC) -o smoothedge_reg smoothedge_reg.o $(ALL_LIBS) $(EXTRALIBS) speckle_reg: speckle_reg.o $(LEPTLIB) $(CC) -o speckle_reg speckle_reg.o $(ALL_LIBS) $(EXTRALIBS) splitcomp_reg: splitcomp_reg.o $(LEPTLIB) $(CC) -o splitcomp_reg splitcomp_reg.o $(ALL_LIBS) $(EXTRALIBS) string_reg: string_reg.o $(LEPTLIB) $(CC) -o string_reg string_reg.o $(ALL_LIBS) $(EXTRALIBS) subpixel_reg: subpixel_reg.o $(LEPTLIB) $(CC) -o subpixel_reg subpixel_reg.o $(ALL_LIBS) $(EXTRALIBS) texturefill_reg: texturefill_reg.o $(LEPTLIB) $(CC) -o texturefill_reg texturefill_reg.o $(ALL_LIBS) $(EXTRALIBS) threshnorm_reg: threshnorm_reg.o $(LEPTLIB) $(CC) -o threshnorm_reg threshnorm_reg.o $(ALL_LIBS) $(EXTRALIBS) translate_reg: translate_reg.o $(LEPTLIB) $(CC) -o translate_reg translate_reg.o $(ALL_LIBS) $(EXTRALIBS) warper_reg: warper_reg.o $(LEPTLIB) $(CC) -o warper_reg warper_reg.o $(ALL_LIBS) $(EXTRALIBS) watershed_reg: watershed_reg.o $(LEPTLIB) $(CC) -o watershed_reg watershed_reg.o $(ALL_LIBS) $(EXTRALIBS) webpanimio_reg: webpanimio_reg.o $(LEPTLIB) $(CC) -o webpanimio_reg webpanimio_reg.o $(ALL_LIBS) $(EXTRALIBS) webpio_reg: webpio_reg.o $(LEPTLIB) $(CC) -o webpio_reg webpio_reg.o $(ALL_LIBS) $(EXTRALIBS) wordboxes_reg: wordboxes_reg.o $(LEPTLIB) $(CC) -o wordboxes_reg wordboxes_reg.o $(ALL_LIBS) $(EXTRALIBS) writetext_reg: writetext_reg.o $(LEPTLIB) $(CC) -o writetext_reg writetext_reg.o $(ALL_LIBS) $(EXTRALIBS) xformbox_reg: xformbox_reg.o $(LEPTLIB) $(CC) -o xformbox_reg xformbox_reg.o $(ALL_LIBS) $(EXTRALIBS) adaptmap_dark: adaptmap_dark.o $(LEPTLIB) $(CC) -o adaptmap_dark adaptmap_dark.o $(ALL_LIBS) $(EXTRALIBS) arabic_lines: arabic_lines.o $(LEPTLIB) $(CC) -o arabic_lines arabic_lines.o $(ALL_LIBS) $(EXTRALIBS) arithtest: arithtest.o $(LEPTLIB) $(CC) -o arithtest arithtest.o $(ALL_LIBS) $(EXTRALIBS) autogentest1: autogentest1.o $(LEPTLIB) $(CC) -o autogentest1 autogentest1.o $(ALL_LIBS) $(EXTRALIBS) autogentest2: autogentest2.o autogen.137.o $(LEPTLIB) $(CC) -o autogentest2 autogentest2.o autogen.137.o $(ALL_LIBS) $(EXTRALIBS) barcodetest: barcodetest.o $(LEPTLIB) $(CC) -o barcodetest barcodetest.o $(ALL_LIBS) $(EXTRALIBS) binarizefiles: binarizefiles.o $(LEPTLIB) $(CC) -o binarizefiles binarizefiles.o $(ALL_LIBS) $(EXTRALIBS) binarize_set: binarize_set.o $(LEPTLIB) $(CC) -o binarize_set binarize_set.o $(ALL_LIBS) $(EXTRALIBS) bincompare: bincompare.o $(LEPTLIB) $(CC) -o bincompare bincompare.o $(ALL_LIBS) $(EXTRALIBS) blendcmaptest: blendcmaptest.o $(LEPTLIB) $(CC) -o blendcmaptest blendcmaptest.o $(ALL_LIBS) $(EXTRALIBS) buffertest: buffertest.o $(LEPTLIB) $(CC) -o buffertest buffertest.o $(ALL_LIBS) $(EXTRALIBS) ccbordtest: ccbordtest.o $(LEPTLIB) $(CC) -o ccbordtest ccbordtest.o $(ALL_LIBS) $(EXTRALIBS) cctest1: cctest1.o $(LEPTLIB) $(CC) -o cctest1 cctest1.o $(ALL_LIBS) $(EXTRALIBS) cleanpdf: cleanpdf.o $(LEPTLIB) $(CC) -o cleanpdf cleanpdf.o $(ALL_LIBS) $(EXTRALIBS) colorsegtest: colorsegtest.o $(LEPTLIB) $(CC) -o colorsegtest colorsegtest.o $(ALL_LIBS) $(EXTRALIBS) comparepages: comparepages.o $(LEPTLIB) $(CC) -o comparepages comparepages.o $(ALL_LIBS) $(EXTRALIBS) comparepixa: comparepixa.o $(LEPTLIB) $(CC) -o comparepixa comparepixa.o $(ALL_LIBS) $(EXTRALIBS) comparetest: comparetest.o $(LEPTLIB) $(CC) -o comparetest comparetest.o $(ALL_LIBS) $(EXTRALIBS) compresspdf: compresspdf.o $(LEPTLIB) $(CC) -o compresspdf compresspdf.o $(ALL_LIBS) $(EXTRALIBS) contrasttest: contrasttest.o $(LEPTLIB) $(CC) -o contrasttest contrasttest.o $(ALL_LIBS) $(EXTRALIBS) convertfilestopdf: convertfilestopdf.o $(LEPTLIB) $(CC) -o convertfilestopdf convertfilestopdf.o $(ALL_LIBS) $(EXTRALIBS) convertfilestops: convertfilestops.o $(LEPTLIB) $(CC) -o convertfilestops convertfilestops.o $(ALL_LIBS) $(EXTRALIBS) convertformat: convertformat.o $(LEPTLIB) $(CC) -o convertformat convertformat.o $(ALL_LIBS) $(EXTRALIBS) convertsegfilestopdf: convertsegfilestopdf.o $(LEPTLIB) $(CC) -o convertsegfilestopdf convertsegfilestopdf.o $(ALL_LIBS) $(EXTRALIBS) convertsegfilestops: convertsegfilestops.o $(LEPTLIB) $(CC) -o convertsegfilestops convertsegfilestops.o $(ALL_LIBS) $(EXTRALIBS) converttogray: converttogray.o $(LEPTLIB) $(CC) -o converttogray converttogray.o $(ALL_LIBS) $(EXTRALIBS) converttopdf: converttopdf.o $(LEPTLIB) $(CC) -o converttopdf converttopdf.o $(ALL_LIBS) $(EXTRALIBS) converttops: converttops.o $(LEPTLIB) $(CC) -o converttops converttops.o $(ALL_LIBS) $(EXTRALIBS) cornertest: cornertest.o $(LEPTLIB) $(CC) -o cornertest cornertest.o $(ALL_LIBS) $(EXTRALIBS) corrupttest: corrupttest.o $(LEPTLIB) $(CC) -o corrupttest corrupttest.o $(ALL_LIBS) $(EXTRALIBS) croppdf: croppdf.o $(LEPTLIB) $(CC) -o croppdf croppdf.o $(ALL_LIBS) $(EXTRALIBS) croptext: croptext.o $(LEPTLIB) $(CC) -o croptext croptext.o $(ALL_LIBS) $(EXTRALIBS) deskew_it: deskew_it.o $(LEPTLIB) $(CC) -o deskew_it deskew_it.o $(ALL_LIBS) $(EXTRALIBS) dewarprules: dewarprules.o $(LEPTLIB) $(CC) -o dewarprules dewarprules.o $(ALL_LIBS) $(EXTRALIBS) dewarptest1: dewarptest1.o $(LEPTLIB) $(CC) -o dewarptest1 dewarptest1.o $(ALL_LIBS) $(EXTRALIBS) dewarptest2: dewarptest2.o $(LEPTLIB) $(CC) -o dewarptest2 dewarptest2.o $(ALL_LIBS) $(EXTRALIBS) dewarptest3: dewarptest3.o $(LEPTLIB) $(CC) -o dewarptest3 dewarptest3.o $(ALL_LIBS) $(EXTRALIBS) dewarptest4: dewarptest4.o $(LEPTLIB) $(CC) -o dewarptest4 dewarptest4.o $(ALL_LIBS) $(EXTRALIBS) dewarptest5: dewarptest5.o $(LEPTLIB) $(CC) -o dewarptest5 dewarptest5.o $(ALL_LIBS) $(EXTRALIBS) digitprep1: digitprep1.o $(LEPTLIB) $(CC) -o digitprep1 digitprep1.o $(ALL_LIBS) $(EXTRALIBS) displayboxa: displayboxa.o $(LEPTLIB) $(CC) -o displayboxa displayboxa.o $(ALL_LIBS) $(EXTRALIBS) displayboxes_on_pixa: displayboxes_on_pixa.o $(LEPTLIB) $(CC) -o displayboxes_on_pixa displayboxes_on_pixa.o $(ALL_LIBS) $(EXTRALIBS) displaypix: displaypix.o $(LEPTLIB) $(CC) -o displaypix displaypix.o $(ALL_LIBS) $(EXTRALIBS) displaypixa: displaypixa.o $(LEPTLIB) $(CC) -o displaypixa displaypixa.o $(ALL_LIBS) $(EXTRALIBS) dwalineargen: dwalineargen.o $(LEPTLIB) $(CC) -o dwalineargen dwalineargen.o $(ALL_LIBS) $(EXTRALIBS) fhmtautogen: fhmtautogen.o $(LEPTLIB) $(CC) -o fhmtautogen fhmtautogen.o $(ALL_LIBS) $(EXTRALIBS) fileinfo: fileinfo.o $(LEPTLIB) $(CC) -o fileinfo fileinfo.o $(ALL_LIBS) $(EXTRALIBS) findbinding: findbinding.o $(LEPTLIB) $(CC) -o findbinding findbinding.o $(ALL_LIBS) $(EXTRALIBS) find_colorregions: find_colorregions.o $(LEPTLIB) $(CC) -o find_colorregions find_colorregions.o $(ALL_LIBS) $(EXTRALIBS) findpattern1: findpattern1.o $(LEPTLIB) $(CC) -o findpattern1 findpattern1.o $(ALL_LIBS) $(EXTRALIBS) findpattern2: findpattern2.o $(LEPTLIB) $(CC) -o findpattern2 findpattern2.o $(ALL_LIBS) $(EXTRALIBS) findpattern3: findpattern3.o $(LEPTLIB) $(CC) -o findpattern3 findpattern3.o $(ALL_LIBS) $(EXTRALIBS) fcombautogen: fcombautogen.o $(LEPTLIB) $(CC) -o fcombautogen fcombautogen.o $(ALL_LIBS) $(EXTRALIBS) fmorphautogen: fmorphautogen.o $(LEPTLIB) $(CC) -o fmorphautogen fmorphautogen.o $(ALL_LIBS) $(EXTRALIBS) fpixcontours: fpixcontours.o $(LEPTLIB) $(CC) -o fpixcontours fpixcontours.o $(ALL_LIBS) $(EXTRALIBS) gammatest: gammatest.o $(LEPTLIB) $(CC) -o gammatest gammatest.o $(ALL_LIBS) $(EXTRALIBS) graphicstest: graphicstest.o $(LEPTLIB) $(CC) -o graphicstest graphicstest.o $(ALL_LIBS) $(EXTRALIBS) graymorphtest: graymorphtest.o $(LEPTLIB) $(CC) -o graymorphtest graymorphtest.o $(ALL_LIBS) $(EXTRALIBS) hashtest: hashtest.o $(LEPTLIB) $(CC) -o hashtest hashtest.o $(ALL_LIBS) $(EXTRALIBS) histoduptest: histoduptest.o $(LEPTLIB) $(CC) -o histoduptest histoduptest.o $(ALL_LIBS) $(EXTRALIBS) histotest: histotest.o $(LEPTLIB) $(CC) -o histotest histotest.o $(ALL_LIBS) $(EXTRALIBS) htmlviewer: htmlviewer.o $(LEPTLIB) $(CC) -o htmlviewer htmlviewer.o $(ALL_LIBS) $(EXTRALIBS) imagetops: imagetops.o $(LEPTLIB) $(CC) -o imagetops imagetops.o $(ALL_LIBS) $(EXTRALIBS) jbcorrelation: jbcorrelation.o $(LEPTLIB) $(CC) -o jbcorrelation jbcorrelation.o $(ALL_LIBS) $(EXTRALIBS) jbrankhaus: jbrankhaus.o $(LEPTLIB) $(CC) -o jbrankhaus jbrankhaus.o $(ALL_LIBS) $(EXTRALIBS) jbwords: jbwords.o $(LEPTLIB) $(CC) -o jbwords jbwords.o $(ALL_LIBS) $(EXTRALIBS) lightcolortest: lightcolortest.o $(LEPTLIB) $(CC) -o lightcolortest lightcolortest.o $(ALL_LIBS) $(EXTRALIBS) listtest: listtest.o $(LEPTLIB) $(CC) -o listtest listtest.o $(ALL_LIBS) $(EXTRALIBS) livre_adapt: livre_adapt.o $(LEPTLIB) $(CC) -o livre_adapt livre_adapt.o $(ALL_LIBS) $(EXTRALIBS) livre_hmt: livre_hmt.o $(LEPTLIB) $(CC) -o livre_hmt livre_hmt.o $(ALL_LIBS) $(EXTRALIBS) livre_makefigs: livre_makefigs.o $(LEPTLIB) $(CC) -o livre_makefigs livre_makefigs.o $(ALL_LIBS) $(EXTRALIBS) livre_orient: livre_orient.o $(LEPTLIB) $(CC) -o livre_orient livre_orient.o $(ALL_LIBS) $(EXTRALIBS) livre_pageseg: livre_pageseg.o $(LEPTLIB) $(CC) -o livre_pageseg livre_pageseg.o $(ALL_LIBS) $(EXTRALIBS) livre_seedgen: livre_seedgen.o $(LEPTLIB) $(CC) -o livre_seedgen livre_seedgen.o $(ALL_LIBS) $(EXTRALIBS) livre_tophat: livre_tophat.o $(LEPTLIB) $(CC) -o livre_tophat livre_tophat.o $(ALL_LIBS) $(EXTRALIBS) maketile: maketile.o $(LEPTLIB) $(CC) -o maketile maketile.o $(ALL_LIBS) $(EXTRALIBS) maptest: maptest.o $(LEPTLIB) $(CC) -o maptest maptest.o $(ALL_LIBS) $(EXTRALIBS) messagetest: messagetest.o $(LEPTLIB) $(CC) -o messagetest messagetest.o $(ALL_LIBS) $(EXTRALIBS) misctest1: misctest1.o $(LEPTLIB) $(CC) -o misctest1 misctest1.o $(ALL_LIBS) $(EXTRALIBS) misctest2: misctest2.o $(LEPTLIB) $(CC) -o misctest2 misctest2.o $(ALL_LIBS) $(EXTRALIBS) modifyhuesat: modifyhuesat.o $(LEPTLIB) $(CC) -o modifyhuesat modifyhuesat.o $(ALL_LIBS) $(EXTRALIBS) morphtest1: morphtest1.o $(LEPTLIB) $(CC) -o morphtest1 morphtest1.o $(ALL_LIBS) $(EXTRALIBS) numaranktest: numaranktest.o $(LEPTLIB) $(CC) -o numaranktest numaranktest.o $(ALL_LIBS) $(EXTRALIBS) otsutest1: otsutest1.o $(LEPTLIB) $(CC) -o otsutest1 otsutest1.o $(ALL_LIBS) $(EXTRALIBS) otsutest2: otsutest2.o $(LEPTLIB) $(CC) -o otsutest2 otsutest2.o $(ALL_LIBS) $(EXTRALIBS) pagesegtest1: pagesegtest1.o $(LEPTLIB) $(CC) -o pagesegtest1 pagesegtest1.o $(ALL_LIBS) $(EXTRALIBS) pagesegtest2: pagesegtest2.o $(LEPTLIB) $(CC) -o pagesegtest2 pagesegtest2.o $(ALL_LIBS) $(EXTRALIBS) partifytest: partifytest.o $(LEPTLIB) $(CC) -o partifytest partifytest.o $(ALL_LIBS) $(EXTRALIBS) partitiontest: partitiontest.o $(LEPTLIB) $(CC) -o partitiontest partitiontest.o $(ALL_LIBS) $(EXTRALIBS) percolatetest: percolatetest.o $(LEPTLIB) $(CC) -o percolatetest percolatetest.o $(ALL_LIBS) $(EXTRALIBS) pixaatest: pixaatest.o $(LEPTLIB) $(CC) -o pixaatest pixaatest.o $(ALL_LIBS) $(EXTRALIBS) pixafileinfo: pixafileinfo.o $(LEPTLIB) $(CC) -o pixafileinfo pixafileinfo.o $(ALL_LIBS) $(EXTRALIBS) plottest: plottest.o $(LEPTLIB) $(CC) -o plottest plottest.o $(ALL_LIBS) $(EXTRALIBS) printimage: printimage.o $(LEPTLIB) $(CC) -o printimage printimage.o $(ALL_LIBS) $(EXTRALIBS) printsplitimage: printsplitimage.o $(LEPTLIB) $(CC) -o printsplitimage printsplitimage.o $(ALL_LIBS) $(EXTRALIBS) printtiff: printtiff.o $(LEPTLIB) $(CC) -o printtiff printtiff.o $(ALL_LIBS) $(EXTRALIBS) rasteroptest: rasteroptest.o $(LEPTLIB) $(CC) -o rasteroptest rasteroptest.o $(ALL_LIBS) $(EXTRALIBS) rbtreetest: rbtreetest.o $(LEPTLIB) $(CC) -o rbtreetest rbtreetest.o $(ALL_LIBS) $(EXTRALIBS) recog_bootnum1: recog_bootnum1.o $(LEPTLIB) $(CC) -o recog_bootnum1 recog_bootnum1.o $(ALL_LIBS) $(EXTRALIBS) recog_bootnum2: recog_bootnum2.o $(LEPTLIB) $(CC) -o recog_bootnum2 recog_bootnum2.o $(ALL_LIBS) $(EXTRALIBS) recog_bootnum3: recog_bootnum3.o $(LEPTLIB) $(CC) -o recog_bootnum3 recog_bootnum3.o $(ALL_LIBS) $(EXTRALIBS) recogsort: recogsort.o $(LEPTLIB) $(CC) -o recogsort recogsort.o $(ALL_LIBS) $(EXTRALIBS) recogtest1: recogtest1.o $(LEPTLIB) $(CC) -o recogtest1 recogtest1.o $(ALL_LIBS) $(EXTRALIBS) recogtest2: recogtest2.o $(LEPTLIB) $(CC) -o recogtest2 recogtest2.o $(ALL_LIBS) $(EXTRALIBS) recogtest3: recogtest3.o $(LEPTLIB) $(CC) -o recogtest3 recogtest3.o $(ALL_LIBS) $(EXTRALIBS) recogtest4: recogtest4.o $(LEPTLIB) $(CC) -o recogtest4 recogtest4.o $(ALL_LIBS) $(EXTRALIBS) recogtest5: recogtest5.o $(LEPTLIB) $(CC) -o recogtest5 recogtest5.o $(ALL_LIBS) $(EXTRALIBS) recogtest6: recogtest6.o $(LEPTLIB) $(CC) -o recogtest6 recogtest6.o $(ALL_LIBS) $(EXTRALIBS) recogtest7: recogtest7.o $(LEPTLIB) $(CC) -o recogtest7 recogtest7.o $(ALL_LIBS) $(EXTRALIBS) reducetest: reducetest.o $(LEPTLIB) $(CC) -o reducetest reducetest.o $(ALL_LIBS) $(EXTRALIBS) removecmap: removecmap.o $(LEPTLIB) $(CC) -o removecmap removecmap.o $(ALL_LIBS) $(EXTRALIBS) renderfonts: renderfonts.o $(LEPTLIB) $(CC) -o renderfonts renderfonts.o $(ALL_LIBS) $(EXTRALIBS) replacebytes: replacebytes.o $(LEPTLIB) $(CC) -o replacebytes replacebytes.o $(ALL_LIBS) $(EXTRALIBS) rotatefastalt: rotatefastalt.o $(LEPTLIB) $(CC) -o rotatefastalt rotatefastalt.o $(ALL_LIBS) $(EXTRALIBS) rotate_it: rotate_it.o $(LEPTLIB) $(CC) -o rotate_it rotate_it.o $(ALL_LIBS) $(EXTRALIBS) rotateorthtest1: rotateorthtest1.o $(LEPTLIB) $(CC) -o rotateorthtest1 rotateorthtest1.o $(ALL_LIBS) $(EXTRALIBS) rotatetest1: rotatetest1.o $(LEPTLIB) $(CC) -o rotatetest1 rotatetest1.o $(ALL_LIBS) $(EXTRALIBS) runlengthtest: runlengthtest.o $(LEPTLIB) $(CC) -o runlengthtest runlengthtest.o $(ALL_LIBS) $(EXTRALIBS) scaleandtile: scaleandtile.o $(LEPTLIB) $(CC) -o scaleandtile scaleandtile.o $(ALL_LIBS) $(EXTRALIBS) scaleimages: scaleimages.o $(LEPTLIB) $(CC) -o scaleimages scaleimages.o $(ALL_LIBS) $(EXTRALIBS) scale_it: scale_it.o $(LEPTLIB) $(CC) -o scale_it scale_it.o $(ALL_LIBS) $(EXTRALIBS) scaletest1: scaletest1.o $(LEPTLIB) $(CC) -o scaletest1 scaletest1.o $(ALL_LIBS) $(EXTRALIBS) scaletest2: scaletest2.o $(LEPTLIB) $(CC) -o scaletest2 scaletest2.o $(ALL_LIBS) $(EXTRALIBS) seedfilltest: seedfilltest.o $(LEPTLIB) $(CC) -o seedfilltest seedfilltest.o $(ALL_LIBS) $(EXTRALIBS) settest: settest.o $(LEPTLIB) $(CC) -o settest settest.o $(ALL_LIBS) $(EXTRALIBS) sharptest: sharptest.o $(LEPTLIB) $(CC) -o sharptest sharptest.o $(ALL_LIBS) $(EXTRALIBS) sheartest: sheartest.o $(LEPTLIB) $(CC) -o sheartest sheartest.o $(ALL_LIBS) $(EXTRALIBS) showedges: showedges.o $(LEPTLIB) $(CC) -o showedges showedges.o $(ALL_LIBS) $(EXTRALIBS) skewtest: skewtest.o $(LEPTLIB) $(CC) -o skewtest skewtest.o $(ALL_LIBS) $(EXTRALIBS) sorttest: sorttest.o $(LEPTLIB) $(CC) -o sorttest sorttest.o $(ALL_LIBS) $(EXTRALIBS) splitimage2pdf: splitimage2pdf.o $(LEPTLIB) $(CC) -o splitimage2pdf splitimage2pdf.o $(ALL_LIBS) $(EXTRALIBS) splitpdf: splitpdf.o $(LEPTLIB) $(CC) -o splitpdf splitpdf.o $(ALL_LIBS) $(EXTRALIBS) sudokutest: sudokutest.o $(LEPTLIB) $(CC) -o sudokutest sudokutest.o $(ALL_LIBS) $(EXTRALIBS) textorient: textorient.o $(LEPTLIB) $(CC) -o textorient textorient.o $(ALL_LIBS) $(EXTRALIBS) tiffpdftest: tiffpdftest.o $(LEPTLIB) $(CC) -o tiffpdftest tiffpdftest.o $(ALL_LIBS) $(EXTRALIBS) trctest: trctest.o $(LEPTLIB) $(CC) -o trctest trctest.o $(ALL_LIBS) $(EXTRALIBS) underlinetest: underlinetest.o $(LEPTLIB) $(CC) -o underlinetest underlinetest.o $(ALL_LIBS) $(EXTRALIBS) warpertest: warpertest.o $(LEPTLIB) $(CC) -o warpertest warpertest.o $(ALL_LIBS) $(EXTRALIBS) wordsinorder: wordsinorder.o $(LEPTLIB) $(CC) -o wordsinorder wordsinorder.o $(ALL_LIBS) $(EXTRALIBS) writemtiff: writemtiff.o $(LEPTLIB) $(CC) -o writemtiff writemtiff.o $(ALL_LIBS) $(EXTRALIBS) xtractprotos: xtractprotos.o $(LEPTLIB) $(CC) -o xtractprotos xtractprotos.o $(ALL_LIBS) cp xtractprotos ../src yuvtest: yuvtest.o $(LEPTLIB) $(CC) -o yuvtest yuvtest.o $(ALL_LIBS) $(EXTRALIBS) ########################################################### clean: -@ for file in $(SRC:%.c=%) ; do \ rm -f $$file; \ done ; -@ for file in $(SRC:%.c=%.o) ; do \ rm -f $$file; \ done ; -@ for file in $(SRC2:%.c=%.o) ; do \ rm -f $$file; \ done ; ########################################################### install: mkdir -p $(DESTDIR)/usr/bin/leptonica -@ for file in $(SRC:%.c=%) ; do \ install $$file $(DESTDIR)/usr/bin/leptonica; \ done ; ########################################################### depend: $(BIN)/makedepend -DNO_PROTOS $(CPPFLAGS) $(SRC) dependprotos: $(BIN)/makedepend $(CPPFLAGS) $(SRC) # DO NOT DELETE THIS LINE -- make depend depends on it. leptonica-1.86.0/prog/maketile.c000066400000000000000000000100511506303110300164570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * maketile.c * * Generates a single image tiling of all images of a specific depth * in a directory. The tiled images are scaled by a specified * isotropic scale factor. One can also specify the approximate width * of the output image file, and the background color that is between * the tiled images. * * Input: dirin: directory that has image files * depth (use 32 for RGB) * scale factor * width (approx. width of output tiled image) * background (0 for white, 1 for black) * fileout: output tiled image file * * Note: this program is Unix only; it will not compile under cygwin. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *fileout, *fname, *fullname; l_int32 depth, width, background, i, nfiles; l_float32 scale; SARRAY *safiles; PIX *pix, *pixt, *pixd; PIXA *pixa; if (argc != 7) return ERROR_INT( "Syntax: maketile dirin depth scale width background fileout", __func__, 1); dirin = argv[1]; depth = atoi(argv[2]); scale = atof(argv[3]); width = atoi(argv[4]); background = atoi(argv[5]); fileout = argv[6]; setLeptDebugOK(1); /* capture the filenames in the input directory; ignore directories */ if ((safiles = getFilenamesInDirectory(dirin)) == NULL) return ERROR_INT("safiles not made", __func__, 1); /* capture images with the requisite depth */ nfiles = sarrayGetCount(safiles); pixa = pixaCreate(nfiles); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); fullname = genPathname(dirin, fname); pix = pixRead(fullname); lept_free(fullname); if (!pix) continue; if (pixGetDepth(pix) != depth) { pixDestroy(&pix); continue; } if (pixGetHeight(pix) > 5000) { lept_stderr("%s too tall\n", fname); continue; } pixt = pixScale(pix, scale, scale); pixaAddPix(pixa, pixt, L_INSERT); pixDestroy(&pix); /* lept_stderr("%d..", i); */ } lept_stderr("\n"); /* tile them */ pixd = pixaDisplayTiled(pixa, width, background, 15); if (depth < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/prog/map.057.jpg000066400000000000000000001277621506303110300163330ustar00rootroot00000000000000˙Ø˙āJFIF,,˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā*Q"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?÷¸Õ/ŌžzSb˙TŋJqéIl Z(ĸ˜Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@(ÅR°Q@ E-ŦIKE%´Q`ŠZ(° ERĸŠ(ĸŠ(ĸŠ(ĸŠ\Qa‰ER°QE€(ĸŠ,EQ` (ĸ•€))hÅ)hĸ‹QEXŠ(ĸĀQE%´R° E-Xĸ–Š,QKI@QH8Aô§SWîĨ:ļ[(ĸŠ`QEQEQEQEQEQEQEQEQEQEQEQEQHH$ ( Š( Š( Š( Š(¤EPEPEPŠ1EXŠ( Š( ĨĸŠ@QE%´”QE€(ĸŠ(Ĩĸ€J(ĸ¸ŖXĸ—b‹”QE!…%-!Ĩ (ĸ¤-ĨēQEQEQEQEsúæĨ%­ūŸS˜yˇ7=0aAāãædũh`oŅ\ĒxĸũR9.4”„}ŒŪL ÆL)Æų~ņų¸˙f•üJÖnąMi)XaW¸“~J~īvx<áGL“ĶŠWĒĸš)üSsĘŋd€}œĘĶ~øˇÉj͎:îu_ΜŪ(ûhŲ¤Ž6ō%‘åŧńČÜ‚'ŽOJ.WEbé:ĖēĩĖĶڛOŗíÜ@pLjä8ÆáT,|JŌKk [\;N!%—(eûNU\Ÿl~.āu4W3­ëwVˇŲŲÅû…”°’Y6¨ F8˜ûSėüQíÍ´YNĶJ8^DhY€bz`…-ôĮr+ ::+šÔĩŠā×ŌĖ!0ĸ'ʘ-4’ œŽäŸJ…ü_‚YŖ°¸‘ §••— p3×%1Ô.WErßđ˜ÚÄŌųöwŦaōNĶ–VEÚ9ęZ@> Õ‹=åė‹Ļ^#ßN}AU¤ku{¸ā‹‘#˛"*‚ÜrÍëĩ"xĸÚg #ž1ŗũ["–wi h Ԕols‘Š.KH@=k›‹Åö]Ĩ˛ÃtdgØ@B1”Å‚sũå=; ֭֕ ĩŲļÚī" ’@€b$'›$qÁüĨNŠįG‹4ī1QÖxÃ*¸gPÆW`įž#cĪ=8æšŪ.Ķ”˛˜ŽžTÜÄÆēķpNzíũh¸%ÍIâˆq$Kmqč" ËIĒpܜ°āTâŊ84â34ĸXËF™ Ėû=w9ĸ膊ÉÔuTą6Ļ@TKš˜2d…T,{đxĨ°×-u+9î­Äģ!Æāë´ōĮ_f\ Z+–ĶŧMöˆâųeŖ…PīÁ* Î ĀĪlUØÜzŅp7(Ž~/iS-Ģ$Ō˙ĨōCB°l`ã2G?_CZZ~ŖŠmįڗ1g™ î÷ę(ēõQLŠ( Š( Š( Š(¤EPERĸŠ(ĸŠ)€QE€(ĸŠJZJÁŋņ-†ŗgĨȓIqtû–šT8$9ã;[C@ôV&ŽÛjšžŖc71Ëg°Čeh`ŀ+܏”ķųVŨQE0 ))i”QE (ĸ“QE (éEĨ°‚Š( Š( Š( šëÉc}AÚo Ũ]H¨aķÄpČz€YÁÚ}ކŠįeÔÂd—ÃWî&O.@ŅÂw§<Ÿ‘ÉãÜÖlPAöۋ‡đö§(Y$Š2œ|­ķüĀc•ÚQE€åK"]O„¯0ĘĘßčĐō‡ß Ĩ7vgĖ á[ņ捯ū‰Üƒ†ô~ēĒ(°×öšĮrŋ؈[ĸLāY˙Ŧ$`įž8Ļ%æ— ŒĻ¨!Ä‰‹ųX.Ā~ģxúWQE—mSM{ŗtÚĻg,Čl9¨?‘#ņĻZ]iSG-ž‰¨BɉJØČ0Ŗ8Įlž}ëĢĸ•€ã’ęÁši/lĩ[‰Ĩ”J_û:TÚUv¸gŋņZ˛/ôqF4­AQÂeF›0Oē>īAŽ•ÔQE€ä'¸Đ.7yšNĸNĶîÉ}ų/w9뚷ŗĨÛĖōÅcĒ,’*Ŗ7öuÁ$.p>īlŸÎēJ)ĮO7‡n$™æĶu9 Ûˇ†ąē#,0Ä ¸Ž29ŠĶRĐPB>Ũ*S23éˇ,|Â,IL“‚FMuTR°tw~ļ–)cļÔãhÃ(+gv2ˇ~^FI<ôŠâÕtôĨ­Ŋņ˛y>Si÷,6cÉLšę¨ĸĀr^øyO—¨ģ @ŌZ];n\íäŽp2p:gžĩ RxV8Õ+õÚ# MŊÖåØNÜšÜ:íh§`8Øî|3Š$qÜÆbtu"Ūā`¨!‡§ĖÜwÉ&§ŸRđíÍÔĶË,ûî!ō%Lʲ ÎÚoÎēĒ)X48{…đ}ÜF噁VF%f]ŧœvJtíá ¤e’ęo›~â  ļđĪđ ~Ûâ“Ō‹ÉIŠxZ\Ģ^œĩÂÜ1Á.¸'>QĮĩWI|%Ø—Tql\ˇ•Ŋ°sÎŪ?_zíp=(ĀôXKPÕ|-Ģ:ÉqĒ'IË#(*ø :˛*O@[ģ[-ZÕ>Úėfif9@Ë´•ę0+ŗÚžƒō¤ÚŋŨ•ĪĩY49ŌHėõģ$ŽY’,ŗŒ+*B6ō¤sëVxB[§ē“_€LęáŠ]*¨ŪЇˇ 1]Į–‡Ē/åKå§÷ōĸĀqĪsáOˇčuûX%û0ļ]Ė`ļ㠐FãĶņÍ[Ķĩŋ é–ÆŪ-zÅÁv‘šK”Éf%‰ãr{ é|¨˙¸ŋ•TÜ_ʋ’<[áÆéŽéŋøŸãK˙ g‡č;Ļ˙āRių1ųfŸ÷Č ÛÂzÃũō)šÎ°tÜ˙ײ…kyņĪD˙ž…/÷×ķŦøD<7˙@7˙“ü(˙„CØĮö˙€Éū¯æĮũõüčķ8ŪŋcÂáŧįû O˙Āu˙ oü!ž ė;éŠĶszy:7¯÷‡įXƒÁžĖÛ!J|áãŸø”Zū Š@mo_Q\žŖāÍ;RÕ ÔŲî"ž;…¸o*wQ!U*āpzęjßü!žĪü‚ LëNđø9lcčÍū4=–‘Ļŗ{¨ŦÎŌ]Įl‡ĸ„Ũ‚>ģkV$^Ņ ™&ŠÁD!•ˇ7~5ˇ@Q@Q@ ERĸŠ)1‰E- (éEV (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸQ@QHŠ(ĻEPEPER)hĸ€ (ĸ€ ))h¤Ĩĸ€Š(ŠQE%&ŅFhŖ@Š(­DQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸQ@ EPŅE”QE (ĸ…%-%Cüh¤ĸĸŠ+bBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(¤EPEPERĸŠ(ĸŠ)€QE€(ĸŠ(ĸŠ)(Ĩ Š)(ĸŠ)QE ))i* E-†:Š(­É (ĸ€ (ĸ€ (ĸ€ ä'´šķÆē„j°´?cĩÜ%VĮúÉ7í đÛqĪûĩ××1Ŧx–ëKÖŦtåŌüã}+Enæãnâąī$§ˇÔPŒĪöËQ¨I’ûf|ŗ7ÚĀūŪ_ŨĪĒ֕såęú}ŨŌ=Ĩ›Û^FždŒP°œmåŊWq_cÅjiž1͝¯/,î™,níexÚ)¤`¨ŽĖLÜũ ZÔŧO§Øxr÷[IÍĩĒa䑏—Øō?:qš§Û ŋXíüøã]2Ũæ•üË|ĘÛ¤Uū&žŊ+VÖî7ņFĒZæ#Û­ü­Ķ>ō Q˙̍-ס\ÖĻ‘âûkäqząØĖ.>Α<ęåÛhn1̓œqÍkAĢé÷Wg‚ö eÛģËWãôú2ūc֞ŒW2õrOˆtš-›|ŅLÄk3˛°oMšäįĐVŨ”­=”2™Ŗ˜ēæF0­îOP˙„›CķĨûVĪˈ•‘<ŅšH8Ásž1Mēņ•mŒ5 g‘c2,Buđģ°2qĶčsŌ€6˛9öĨŦˆ5í:Hcy/-âvˆLcy—*ĨwsƒŽœũ9§Gâ XÚHõ[7U!K,ę@$nõôįéNājŅTįŋŗĩxŌ{¨ĸi>āwˇAÆ~ŖķŦk/i×Ņęˇ#|VZkēKtäl% ŒņÄJč–Šįl|]Ĩj´–Ί Ž#i@˜H 9É#"´ÛU°[K›Ĩģ†Hm•šVÃldį\ ôV‹â‹ jʤoŗųãtQÎę×Ü'Žŋ‘ôĢÛú1ZĮŋÚĶ>ž”îEu]=ãyRúŲŖB¸•HRzsÅ*ę62Oöxī iųũؐ㞙Í]ĸ°Ŧ|Ke¨ÜɲČéŌA$ÃiXŪ<î ÎWĄÁ#šŋũ§a…?lˇÃ‚TųĢķcŽ9íJč ÔV]Žĩisį~đDąÎĐ+(ÃwžG4ŅŽéŌiˇˇö÷ ūÔļŪ0øcYŅ^÷pÔd¸4Gƒ›“Ķ<ã>ÕÕŅJĀp|=škÄē“Tp{6;-ČâÃæã;ŋ V†‡āÅŅŧ=wĨ‹¨ä’x ¸¸ōˆb¸`ģc’vÅuôQ`8~4BĐiäBļ{ȋ›pÁvķĀm܏¯­1~ųz6‘b—P ,|ī2Qo;z: ķÛ~{ô¯Aĸ˜iÃ)Ꭰē’ˆÚž[*ŋ“FCaųƒĮOzčt Eĸj×÷§ėōyūP‡lDBF’N=kĒĸ€<ûQøqũĢqur×QŲ]\C43MjĨMĀģæ.pvņõöЇÃõ’E¸šīmĮö‰ŧ>ZüĄoĪf“]ŨŦœŋÊäÕ¤ŧ’ö !–îâgˇ`áJKŗēwƒØæˇ4 ÉeĄjÚ\ķÆcŊšáÕãB Ŧ¤žsÜnĮá]UĀá%đnĄsāĄ Íql$‡O61JĄ°Ā•ųØvá=zÖtß ¯d’P—đ[ÄķŨHžPl šŒô#?zf(Å+ <ÂãáĩíÄĸVēŗ ™ „ƒąsl!ãÔn5Ūčļ2éÚ%…”Ō+ËooLËҊ¨ũ+JŠ`"Œ(´Q@Q@QHŠ(ĻERĸŠ(¤į4´PiLžg˜qMc1 ‘ߏzˇEąL´ĢœnÁ$ôĄŒ…˛uGĩ\ĸ€ąKĖ‘ŽĶ“Œg"¤//͂q늜( N9=éh¸XĒĪ2“ÔņœcĨ.į{y3ÉÉ­R*… P*y˛ō>ÜRī“gŠííV¨ĸábĢI.G^ŖYcÂl™ąČ^ø÷ĮJˇ#´ĻŗĨŪŊ¤6†Cä—ČāĶįõŦq*nMSsœ’¸Û RŪãMu7p¤Ë(>ÔKā¤žnpGÖŽiÜ&šžYfo™™œ‚2sŒŽ7Vˇļ™l‘ ŽĪ!Âô(õœūĨÎĮ—AĘ.ŖŲíslLėųQCž¯˙üiBÍ&?ëĢ<įž(į­z^Î=Ž^iw!.W9ir?éĢ˙Qžšŧi`‚Én$•›sbᔟ˜g­_œn‡Uhf¯ %˙šW6+÷te(­MhĘNi\-^Ú“ĖgĀ.Uޤ,}‡8JfĄ%ĶÚĮ=ĩåÂr¤bwÃ{ķī[ĨÔĄaĶķXvq‹†ą€œÄ‰˜äch>ŨOá^f)Bn§DuՃRŠ‹ÜĨŠßŪ(ZŪōhĻ‘aįšÛœ ŲÎ<ž:VΜŋh°ŽO>ė“‘¸ÜšÎ3œō+;ĖūÍŧ”nåvĒņąķ¨ÆPIT°ø…ÖxŖ¸ą•"—&Y˛}ÁüœVxšŗ•ĨŋŸč:J×Rf°…˙]u˙ū4yOŸõ×X˙¯‡˙°*9õ¯?ÛÔîΏgŋ”ø˙]s˙ū4ž[ƒūēã˙üjlõŖ9ĄWŠÜ9"D#Ë[ûū˙ãFŲį­ĮũūoņŠ{qI“ŠXĢüĖ|¨ä~úãūūšn%?ōķp>’”RæŸÖj˙3TBMÁéssĮûtŖí?éw?÷ß˙ZĨcŊ?ŦÕūa{8˙¤įū>îīĄūfëņ÷r?āCü*cZLŠ_XĢÜ=œHŗwŸøũ¸ü×ü)Áî˙įōã˙˙ }}f¯ķ$FųˇyĀģŸōOū&6đøû›ūųOū&Ū“ųQõĒŋĖ>D7ÍŧĪü~Ī˙|§˙Iį^Ÿų}ŸūųOū&¤&ŅõēßĖ.DFfŊ é˙ī”˙âi<ûėq}>܏˙‰ŠAíIøŅõēßĖÎ$ÚUÅġ1M3JPŠeķœôŌĩûÖ>“˙! Ī÷#˙ŲĢ_­{Xy9R‹g<ŌR°´ĸ’–ĩ$(¤Ĩ aIKIHš ,bmĸ–Š@>Š(­É (ĸ€ (ĸ€ (ĸ€z×,xžį'“<ŸúޤõŽTãí˙×yô3[ĐøŒ1 Ô˙*hõœĻŌ4„.v˛ëŒąĒÅnpciJ4ĘNJņ7b@<zJæõZû[I‚Â`†á<į‹“´GS~^=ČÅjxkDą¸ÔÖīQ¸(A‚;Iív `@$Ôgõ5Ökn•tt˙2iüĪ „fP2Įˇ=ŗūŅõŦeQģŽ†ņĻ–¨âėu amÖÖŪ…O’8n&‹zļX¯ŪČÉāc“øõ&ŸĻjēˆ$ aoÅģ œŋ ˛yČĪĻ1ĶÚŊNUHžËöHíÖ4Y$<(bxú‚ _F’4;csÉĮLŌælĨž‡œßč–ÁĨ æĪ-Žé§q!X˜āāc8GņŽ:ԐjW†úvŪ˛¨1"ÅūąAÚ͜į9éę3õŽĘH Ņéö‘˜Ė„ČîûC9<ボU éâļē[û‹Ū[Rb‘ŅųE` Ī\{sīDfÖÂpžä1H“D˛FŲV¤qŪ ō![ã=”MŒČŒŪĒ:úįÖŦs]PwW9¤Ŧė"âƒÔŌd ¸sŌ›$o xĨĮˇJ29įn;šVŖ “œ sžŨiĨHpą ƐÜKåÃ$¤Kcč)ēuŦąĖ÷3G$Ō"/îÆ¯$q“Üžiįqƒë\Ö¯m&™rš•ŧŽąĻÆü) ŅXŸ^ƒ°ôŽ }*•!hŊ:›áåËSŦœí(ĀŨ )÷Á\3Rūu G-ö“ ĪÁv”&ü„lt$u‘IÜsŸvU4lyâ=úVYeXē~Ęúĸņ0j\ŨÉ˙ N)3F*õQ˛caĒ6(n'kļ?"ƒCמIüGOzĩ+˙ük;J2[ŗY)vHÔė.0=qČįëô¯;2sö>îŨNŒ:\ڝ–€TŠR=AŦy-&ĩģ$%Š~âcÔcę:~ĩąmLžãĨVÔÁSm1û‰(ŨíWų‘^.ĨĒ(=ĨŖ;ĒÆđŋTOip.ĸ$ĄGBUÔö8ĪõŠøãŽ•CJâ;…','|Ÿ^ãôĀü*˙Ō°¯ ’ŠčÍ`ųĸ› gˇZ(÷ŖŊdXN(qI@1ÁĻģ*ŒūTâØRRCqŌšÔ–ėH͌ĩÚž¨įųԌĪ#ĸH‡&X ˇ““žÔ†öF=ÍW'é@ō4r æeՑI4î1ŒÖxÅ<ĖÄĐÔ¸v)HŊۊ¯§n0IīS+îąĩ-X¤î)¤ë֔ôžūô†į­.3Í據–íGZJī@ÉtŽoī~‘ĐÖŊdiņû{˙ūFĩëč°ßĄÉSâaE(­ˆŠLŅ@ŠZJL¤ëJzRTą…™4RZ(ĸˇ$(ĸŠ(ĸŠ(ĸŠJå‰î?ëŧŸúŽŽš9 ķįã>NŸīšÚ‡Äa_áõ¤úūT;fŽGĐWYÆ'$žhã͚:į4ķP)ØĒˇÚŊ–&ŪJÛR1ÎrņĒēÍÔ°ĪcĻ!ūŅe"ÜŨøëĶ5gEŅî´­Eu=@Ã/!vVķĸb9@r:~GĨe:œģ›zŗ#Wļ×ĩh~Íũ5ŧĖSs*Hsü;€' xägģ¤xZŅM¤ÍÖŗF˛+|ÎÄáŽz€8į<Öī5ã0…ŧ˜Į™ˇænLđŋ5j(’Xa@ĀŽfܝŲŅĨĄR =!%s0eØ7Ž‹éīגzĶ­ôøĄi[sÉŊBüį8QŅ~œÕĸ2N=hĮ ķŽôŦUŒ˜Ræ ŗ2¤a1!8táųäbŦ}˛|Ŋą€ĩĐF›'ųuā͈ķ5pT˙Ј‰;ũâ0?ņŌ*ļ^ū”Ëhĩ´PƒĢŒúŸZį5`ēäˇ6Q`142JŽFw`đG\z}zwŪžáą¸•1Ŋ#f^;T "ˇTŒåāúû×3éE(î˄yŽR}QĶ-#û6Ąq%ŧōî2ŊúŽ„ū=ĢSLē7vBc*H3…e`wSŽ‡Ú´nĻšT[Z™™ģŗ…Qõīų ĖļđÔVåŽ ōÆ}æQš ôūŊe…Į¸ģÕw&­o„ģאš‡÷ö’,W-æ#`,ĄqĪŖĶëS ‚x¯j•XU4‡ĸâėÅ™Ĩl„‘šg$į”įÖ´$TBĖĀM:CÎŪÔä#Ī÷šĒĶL° f ĐWŠ' -ĨĢã¸æ‘ÔH ē†SÆāĶ`ffMŦ’)ÃŖ ˙ë{ÕĄ˛?ŊÉúRMI] ϊ/áí.C˙ÅV6dœsÁö§YéúD7Å4ƒ!d•˜g8įņ5mĨbŖn1ôĻ$zÔ*pNéĪ&ŦŲJÃP+i\ΓÍd`L.zĢĐgĄüęÄz•œŠŌ`ûÅPēļ‹Qy`0H˛ÂC ’Ģ Îpëœ`úzWCd-î-#™"#eų—ąéŌ¸+bĒaRS\Ëšŧ(ĒģhSî]ĘęĀô æ¨=Ü:vŊkö¯4ũĸ'Ž=‘îįįĄ­KŨ%fUkG“yŠL‘¨ägGC‘žĩVHnāÃ\[%؍‹,ˆáī´÷ÁíPą”qTŨ9>[•ėgJ\É\؆Xî-ŌXŽcuĘđGči—ũĸÎhēoBąíYÖwTđĮo*Im3ˇĘG(pIÁĪö#ŊkäFkÅ­JT*Xî„ÕHÜġ’Pđ]ÁŸ:Ŧbí(+'ų0m{­ę^¤íéJN3Ú –f^;ÖšmØWœ+mÛUŲ‰lãŌššÆMįëZ%c6îķHԜ’Gz=‰Ļ‰lŽzS@ũ)OCŠP08éLäzƒI‚;âƒĶŠ3øĶаY2IĢ ‚ŧÕÁ=ŠáŽ2ŧ{TJ%ÅØšíGrĢāwÅHxâ˛hŅ19Ĩî3Iڃõ¤0ÍžE'\Rįž”€—Gæö˙ũä˙ĐkbąôøüÔ?ßOũĩķ_G†ū}9|LSIKڊؐĸŠ )ĻŌĐi1ˆi1EŠc(ĸŠ@IEVä…Q@Q@Q@ \›ޏĪO>Oũ ×Y^a¨øļ;ëÛXė.îfŽéЄL –cõÆüĢZ-&Û1ޛއE‘ÔzTo$hę¯"Ģ7 åž•ËÜëēʧ[D ÚŪT›ŽPįaՎ8íz]/ÃŪ Õ­íu(ŋ~˛F˛38 Ôļ ÎsÆ=:čubļ9Õ)u:Yî"C;†dąôu?JēÖõmhŲč‹$&4_´¨‚LJÁ ŋŸ đF=ĢŗĶtHt÷7J÷DŌ9õ9áz(íÅ^yí ˜¯üĩnXF…˜ûe:­č!Jۜ˙‡ü3>—}qŠj7‹qs `ŽW48;sœ1Įļc"îágįėņķ?ÆHÁoĻ×éHŌGy #ų°fuŒäŸü{ƒéZųV{ęka1ķt¤Į>ôŖŌf‰œ}1@ †îî v¸š•"…1šÛ€;dÖ[x†ÆîŪé ˜¤ë2ŦƒiTĐąĄˇ/R88‡ĩ^Æy¯.Qqvf—žÄs“Ã$rŽQ—šÉļ÷Ék::͘`H?ŧžžū†ļsšĢ{cô{_!”îÁåXt?ž+¯‹xyy3*ԕEæGĶüj­ÅĶ[Üğg’E:p}ú*’ŨŨՖeTb´ü¤ûRO––Ųi”õė>cüĢčęÕJ“ŠŌįŸûüŦn"•„D:>܅u* õíUŽÂæÖXĄYU$%mģr¤úÕĢŲEâ/“ŧ°Č‘Hr7HĪįŠĢw{ ĖŽ7&FNN8ÍBĢÄQ~ŅXÖpös\ēŠęâKۉUX&Ķķ|ˆ įŋ퍠/.>Ég*4…KzǁéęyŠĶNāžĄhĪܡpíØŸåWd°ļ–6ŒÄ€4~Q*0vúdvŽ:˜ętW˛¤´]McBS|Ķ2lĨ’>&žy.&öP >€Ō¤œj↡g?<Ž‚ŽüÖŦŲčöļOÄŌ“ėPÎHÆ1ĶĨhņéԞ̙KhlTpËy3Zĩ…čû+J­8E.A}äļ 9ôüũĢzÉ­ēBļ2K7RIÉ?(cŠ ÉŽ ĩåR*2čo¨ģĸĐ`GŖ2aļžšÅWĸƒ‘õÍs¨šķ }:#¨-❎GF=2}đMJšYąīHŽĀŽ:Iīlí™L÷FÄānp3ÅSmčõgে6Ņ4Ąî6ŒŸĪ§ãQÚ|ú•Ä™ÂÄĢ^Iū_‘ŦĶĒG¨]›”VŽÚ(KG+õŠÄ|Øė>^ũsW4Ņ!gš2‘ĩHÁ :gߒôöx+u“9īz×ėh^ÚGc5Ŧ™ʅpzÔęĄT(û `Rô5 JÚyzŊļŌÔIŸåČaÁÅ@Nzū´’~´•ĨŒ›¸ūE/ņĐ}qIšbâū´„zb—×ô ãŧĶON´Ŋé#×đĻ€LđOJSĪ#éIߚ\ã¯_j1Ÿ§Ŋ)=ķI×ŋ4q“‘ßĩ Œx;NīĘĻI—o'Ǥõ#ōĨÆO@*nËLŧ9ĪĸŠ s†87ÚÍÃŽyÍC‰JDÜã­Ļ,¨ŲíŠ~xāæĻĖwš.‹˙š‡Žô˙ĐElV>‹ŸĩęõŅô[ô8oáGĐä–ėZJ1K[’ö RR÷ aHisIH’–’ĄŒ? )sE0EVąQ@Q@Q@jäm4Ŋ7mw2K ŗĘQ–0˛ĮûÆųw÷\3Éæēî՛ϑöCÛ÷Ōķ˙mš&D‹gpDjc#à ä€į­H00Įô§w'ŪŨ-ŖÚš,NįvÆXžæ Cįęo*ōĄŒ0鸜‘ø`UĖ“ÜjK{€™UAnI­.qĮ=iātįښsģŽ*†.sښΏđŒņŪĢMŠY[ČŠ-ÔHíœ)nN:āU uqt¸ĩĸd†’HƟøaúôū‚Wv@ÚHÉtƒYœjS[ŒMĒÄų /PX3Χj°ËŒĢ hČåXd~U$6,h8cP N]-ĩØ9D‘ذåˆÉéŒöūuҤ"rŨÎFž‰;Ég"ģXŸËGnŦČä~Ŗž?úõOL°]7OŠŅ$ivg.øÉ$äž*ځœ˙:įvšÔļÔĄĒ^Ėõ"c˙ 5F1ƒQHEÖ§,…r">\g°8äũrHü>ĩ Č\gž+ÁĮMJŽšjŅ9Ģģ;˜ŧC4Âå⡸AåēüĄd ͟qÚļ`Ŋ Â;ąMĐsōŋПåMÖ%UĶ&LŠ–E)Æį#€?ŒŅ*H’>aÔŪē°Ô#‹¤ĶŅĮŠĪRn”¯Ņš¯JBv’Äā{Öt~t9:˜ķ’vûØ{`ÔwSļĀn$,āEãqė=Oč=k—VRŗÛŋBũŧ,lQų÷R¸H]÷~Į­,‡Čģ†ë;€ũÖŌ9ųˆ~”}–âí™åy-•GîÕnĪŠíøsPEö‰uQcpØŋ~$Āhc§LĪĐz×|ą4=ŒŠ^ö_yÎŠĪNےĸ°žKi§X6苐28÷ÁĪéRéŠķ\Ũ`0,oU?˚ŌtGûęÜf—Œ^uLt§ERļŨNˆŅJnBŧRŌņŧŌúņ\W7tĮZ\s֛Î8Ĩäķš?‡×Š\ķøRŒžA¤éĮãŠNŊúöīMŸoĨ1 ÔJĘÕ|?iĒČ$˜•}ģIÃЂ?– jįŠ?CīU 8ģ jåŅXؘžŲ F0USŸĪ'§jä`(P:dR†8Č&•N1éNĨIÍZO`QŠØˇŌĒ0įŸZ—ÎŗÎƒp=G"ąZni-v ?–) Í;ņŒū$qß2ābĒé“d8ĮŽ(ôīSMąHP T”ĶV ¤ü>”g ¤ú´Ä#¯ĨâúÔ°¸C‚8=č~@–ŖDO´œ=iƒ¯ZŋéĪZŠ"”“ŒāķRĨ}Ęq°ÎqJzžE4gš¤ü3õĒ$RrzP3č(Û4ԘÎN;RöŠ(­É (ĸ€ (ĸ€ (ĸ€Yšf~ÄëŦŋú1ĢLÖ=•Ävú[M4Š‘‰dË7~ņĒ‘/ŸLū´ŽËƒ¸ācŠâĄ˛ŧˇÔlâŧ´“Í‚U܎ÃÆĢMW犤ąŦąÃÜr761øāĪŪ™$šYM‡#w÷°zū=ŗŸō(ôĮJ9ĪJk@,ĢM+đKz åĻÕ/u˜cŲ–6˛"ģĀĘĮ9ĀÁĀīīW5kų&žû(cí,[œ‘ ~DûUķƒŪ´…5-YJ–ŅĮ6āųPĮ'?"“UōôŨÜÁmbn q†‘† xoNGŋZˇu'“m$‹ĘĨ‡×ĐiļqØØÅ håŽ9fĮ$û֓|ŠČΜyŪĻ=—†É”Üj—&âFUũÂäD„sÂ÷ü}+ ÆĶĐS›šnyë\íˇšĐĸ–ŸZPp8¤Ũč1ËųlSĀ;sĶ=Š Čåŧģå>a;=īø˙<ÔžÜUkf3¸w-,˜ŨÆ6ãøqÛūĩ`ŸzųĘíJŦšîuGdQÔņūŠÜoY€^=AĪéšÎß$æ'X$yųQĒ‘…Ģ78āŽÕ­yjnU °IPîG# §Ōŗc2š]Å>×nā1č×đ ˙œWĢ—Õ~ÆP‹÷ˇG.">úobhgķr¤m‘U4YF{;Č32āĄ<áíøƒš†ŪÂŌú€ß܄á‰iۀ=8Î=ę坔ąJĶ\MæJA\(žÃüj18ØÔĸāô—õp§EÆw[9īQĩ´m{ŪO™2 b Īũō*^ūŪ¸Ĩ"ŧ{`O_J>´u8č(<“Š=x␌“üŠx?…ųĄ‡°!'ž)ØāĶ^ŋJ\ã×đĨÎAâšzŪ–€ŽzSš>ÜĶHÍ0ūM'JQŌ›Î= š÷ā N™÷dPÄ/ëJ”qœûRsHzŌqNP`b— UQ#y$‚)ČÄ`ÔršsN.îjO°ŠĻp~OJ€žÃĩTH–âŸS×ĻņųS¨úUCŌqž(<FAĪZb’”<ķíS‚’ ?Tų gׁRŅJDæßqų[ĸxĖm†į542–m§Œ*VPānŠģNĖĢ&´)cœŌ“č)ōÅ偎žõcüĒÉĩƒĄéM“ĪáJqž;úR§…ū˜Ҏ9ũ)qęM4|•åÜÂĢgovd“keD‡K‹I5Ë-.č9K‡ø<āĖ‘î*ĸ–ˇ3¨Ū–: Ԇ8Ę´‹ ûŋ”ąĮ@G@2?ˇ ÁHÔã9$’I>¤žĻˆĸŽDQGœHÎ4ÂÁŸJkąH™‚– ´u4ā 1ŽMPŽFÚe¸G“ ĘYŒ€õžAūU7QÔqLÔŖxž”Ä9Īj;÷“‘@9ę?:W8ÉâšyČ4īË4Ūũ*iIĮ~iˇŌ÷ã­I<Îzš´}NJŦžjč`W#ŊDˇ."8Ū ž†Ē:ė$UÂ@ąT]ˇČ[éFã˜f—¸Å4ûPsųU™‡Öšŋ.)Î1‘ĐãĨÛցš^ä^‘˙=‡ū€ĩ´=ëA@­|98œč [5îĐū} e¸QE&kQRf€Œņ@éA¤Ā))M&jĐ`zŅIE'(¤)kd@QEĀ(ĸŠ(ĸŠNÕÄxKˇēÖnuYS|1Š#ģ!NI'ŋ6?ũuÜW5áttš]V’âV| dî#ųM=I’š˛{Ōcëš\f‘› IĢN]VÆŪâH'šH¤<ÆŖoŽOV&§â­öWØe..ŖhÂ1RŅɸô 8éÜņQ“SԟP  ‘œd—ÛîOäLz8ĒáMÉ]˜ĘĒNČŠgz׊Zâę;‹Ā1/—““ōāz|S,bĩļŠAm(Û,Îād}âN@üAãë\喝늴YĢųŠĖeląûŲ;ŗū÷Jš“Ŋ¸ēĒ$@€ōc Ø(0N{•a˙5ĒvŅ#)jË7W7ē=ũ•ÂŪˆ¤žXVÉ⤁Ÿnžæģxõ I"YVæ"Œ°zW*o´čŦ!¸yá6ų žF}Ŋø5A|U O0Ũ2äŪ€8îGCYTpOY%3jnV˛M¤šÖ™ĢęĘė dąū#ķŠEũŖÄō-ĖN‘ŦUã§ųrÖöŦMsfŅËŧ͡æÆ:yü O-­ŧĪæKLųûåF:=ÕâÃÚŲŲŖUīÚõ6۝dƒ'ņ6;Ûņįڒ4X" Úŗ´Š#‚Ú;F-æ)aš‡ß9$œôįŽ+O¯ZųŧUJ’›Œú”ŌĩĐšČZBARŲ"—ß×ÚšMô據 ÆM&xį­0¨Ā<ûҁŠLᜠ2qĮ€ôÆAŖœ` Ņß8Ŗ§&€Œ¨zqKž´g°¤dįœRöÅ/BrsÅ&z͏…ČĀî)¸ĮĻ +tīIÉ<öĄŅÁÍÎ1ŌĒęWRZiĶĪbIUqcī1āˊĮ‹\ž{Y$0D˛*‚¨ĀŒår3é’T}séTĸÚ¸#¤ÉāŽ+_¸iŅL ĘHč„'׃¸cā÷Šėu››šíŅ­B$‘‚íĪČāe”ūc­nŪė⓷Ž{ûrë6Í$1ĮÛÜëß#ŽŊxĻĮâ+–{tkx×ÍĖ„ ŽO$ŖSéO•ŅŽ(įhįÎYx’{…‡Ė´™eØI$lR¤ŠoŠĀĸ\“–‚ËÉŋœ `Ägß ĶԊn°Žt}ĀŖ<öŦ}+Všŋ¸1Ëi䀁ÉÉ>ƒPÁ‡ā=k_ŸJ–­Ŗ¤į¸ tÅ{RpNj@\dāWV^ŖšŠd“8\vÍ!'ž”ŧœŋJĮ5b8Ęg"‡ %ršųO ƒšn9é×ĨK1úf’8Ų×"šØMka‚Œsš˜Ûļ3‘‘ĐSV vĸčvd|Šĩú ZŒ[䌜ŒÔę€j†ĶØ¨Ļ†*ļÆ zôĒ„õČĢ㚆Hw€Ępi)H́ßŊ)bžņ˛ņ×Ū™|sVFÄęčā— w5\õ#ĐõÅ/_đ¤yÍîjhG-|}gúVŋãXž$ũģ?ķÜč [X¯z‡đãčb÷ ;æŒQZˆ)>´´‡Ö€RRū4R`ϚZ*ÄÅ´PÃĨƒĨ-l‰ (ĸ˜Q@Q@ Xš¨ļŌ×k3yŦԜö'ĩm×-Ŗ"éÖĐŲÉqYČÜįc#ĐūUQMģ"fŌWfņ…âMA-,žÎŋ܃Äûď—ß$Į=ŠbÔī"M’›#‰[ A÷¨úõë V{ĮÔ.{Ļ$.æÜQ}Ŋ>‚¯’MÚÆ.ĒĩŅ*4‹°"ÎåQ" §Ķ#°įđÁxĶ÷ˆaV*Ęą`’ AŸŠúTŌCæ\C)•ÔE“ąN71’G=3SE( eĶfߑ…ŌFiĐ4ævf‰‹8!˜Črx¯ā+šņĨsheĐėlüË+nF‘˛ä÷×Öēw^ˇĐí՜o™ķåÆ3ޤžÂŗŧ/­Ž­u~^8a•prÃä÷ĮÍ^¤e/eZLی'ûWÅV¤—ļļļ6wfŌ4Ūę!vrN7N=ë3͍ fPĀãēWyãųíĸąˇ­R[§bÎ2Š1ģ ¯9Ž×Ī.Yʰ}Äšë˙Ö¯ J0ĒĶ—D{x*ŽT¯k]ŗNĮW“Oŧ[‹;„R`ûŪŊAkvâûS):¯’ąĖWr Ø×'ū\…|=ĢŽÃm!/ )’Qޏ9›‘ÜW§/…íĐyi3ˆ°ĀĮŽ0ØÎ=:ûčÖ­(C’2iâŖ5xę^ūĮ´ @/,‚67ŪĮsū=kD⥴‡ė֑@\ŋ–Š›VĀÆj_^+)ÎRŨÜįQKaÉŘäRØŌĪâ¤a€s€)1Ø{Ōį×?ZB3ۊLäwõŖ´gq@éÜĐģf“Œ’(Å&q@ EįĨãҌũsRcŊ'ņâœ}˙•!@Ļ ?ALîzSN);ĶCį Spž´™Æ~´\pp9Ŗ‘ŪŽšŖ§Í0Œ8¤ü:SēŸjNšũ(C=9¤*1̓Kü9͆!1Œú{PzjQĐķԚAæ€Ŋ(cČâ”Ōoƀĩ!9#žŨi~Ÿ•(ÎöŠ•ËDŧ9úÔŒŅČ՝ēgķĻ*ī$qœSzI$7&H’ļđI$zTĢ/ΆâĢí ņRÉéŠCM“ņÅÚ2N*8ŸrzŠyPG5-j€ÃÍTq°‘J3 f‰Ķ#w8īT´%ęŠûŗŌÛ4cūēAëÍQ—‡ē_gū~?öD­ŖÍbø{îŪįū~?öD­Ŧ ÷¨>†pĐi+P 9Ĩ&PE-)1‰IKIÚĨ€dúQK“ëE ą(éKH)keą!ESĸŠ(ĸŠ(Ŋ̃ĩķȃ`_ŗˆūn™'×ų~gÚģÎÕÁÚÎĘ=ŅN8%°VÔm­Îz÷˛-p 𠌁Î9ëJp 1ži3õëGãÅ&9Á4Ā\ķÅ'z3ŐÃëGō ķÉ t÷ī@~´sžŋZ)yüh§žhįž8§éM'œ}iˆqä;)ŧާtu¤Ā@03AéīGûPHÎ(¸ÅVÚĀžji&ĖY†Ēøķ@bWéIĄ§aĘÅXcŒUĩ`Ã"ŠgÂĨČlíJHqv,⑆āsŠ_­„f#օvđ0}j_^”Œ4]ŠČ—ARĢz ˙—ũ‘+b˛´Aļ˙×ĮūČĩ­ŪžŽ‡đŖčr=“ĩV¤†8Ŗ4Q@—­%Z‘…%-%KQFh  ‡JZAĐRÖč€ĸŠ(ĸŠ(ĸŠ(JČŌšŌ,ō?咟ŌĩĪJÎŅšŅlr:ĀŸĘ‹Ø–ŽÉŗŒ ÂÖôé'ŧļŧŠÜÎĐĢ( Ā0ŨėpöúWFđ§aÍDÍķgĨ5+2\nŦÎ1mĨššešiŦŨxŽ<Œ°î{ƒúâŗŧAāÛmNĮu¸TžNVW92˛Įüâģۈ ēŒĮ:+¯¸čk6M6xšˇ¸Ŋ’aü˜sųƒ\ē5Ē>hĘëą­ F›ēÜđ‹Ë[:ōKˆ„sFpːzŒõÆĢåœ’áZ~!†ū×Z¸MIqxNæ ä0==ĮøVj ß|“^4“‹iĢô4!Y€•GŨ9Î;wŠŌ7}‚8e.ü.P€VítۋÅJĮÁš,>•Ķ(ÜsXÔŦŖeÔ¤ŽløXl4į´š‘Réä.CxO~Ÿ­vCžĸŧÜîb ž§WCŖk—ę os!‘e)Ú2­×ˇlgōЧ]KGšÃˆ Ķr[7pé֗øšÆ)8Įĩthq‰ģ”(āG×­RdgĨ(īëMČÉõ¤Î~”gŊĪj;ĶØŒP;ÖÉ9ëF;{v ã=isÜRƒŽŪÔgߊvlúSˆu惜Ōã>”´;_Ĩ/áIĀ?J^ū˜ĸĀ4?J1Ԏ´˜āžôĀ_|įpįŠ0SŠBN{Đ!A{PØāž´”œâ˜ Ž™Í.(ôÆiqū4XčÎ2(n9¤Ü9ېCŠ:ņĨëčAäR~Ô x sĐsIØŌîzSOĨ õÅAou Ō—÷¨b¤ã¸851'?­ņ֌b“=08 (~t™č1KH3ޏĸĀāôÍ;¯4˜ātŖŠíHb““ųP9üh9÷ õæ†Ĩ•HķK#ˆŠĻ:mÕËÅ ‚Ä…PORxõŠPģV+ŸAæp˛Ō(b=qQK'r0ƒƒ0_¯õéSÛč֑ĮûčÖyzŗČ3ÎIājņT)´¨)ĶãęÃ-ē÷؃Ŧúh,;ļÎs?ūČĩ¯YZ1[Įu1Ē'ŸÂ¨ĀûĢZžÕŨōEGą/V%( ŠJ Ž¨¤ Žôs@¤1i´Ļ“Ŋ@E˜ĸ€'- č)kdHQEĀ(ĸŠ(ĸŠC÷OŌ¨hÃū$ļ'ū˜'ō}žéúV~’qŖX˙×ēč"Ļ@\g yÍBėįœĶÉûÔnØâ„KcH#4Ō=)Ų5ÍŨŊŦ{Ž&H—ÕÛw˛å7˛}CėSŦā‚ÄĒÌ׊5ΟÍ,ykģpā .3ĶÔņ]FĄ*ŪęWW8;^Vd÷ĀũŦéīâļš(¤Ü § Į¸ÔWĮâ1•i8kĢû ĨJũ‰Â* XÔp0íNQš>~ĩJßQļĢ#>ÖRā‘ÁQŽZdēĩŽå"CĖbP˙?āk—ŲÉģ$mÍæ†āI@+[ÃVÁĩ“&åTG†ęKz}1úÖ_E$ĻÃy¸ĪNŨ?Ą­mém5hĨ—8u1duˆÁũ1øÕQ\ŗWĐÆŊŨ'Ęw$ã¯AGlRc=q@Åz’(Æ:QĶéIŽi 9 'izŽŧĶsƒKŒ÷ĸĀ)”ŸSMë֗§''š,ãæëŌ”ŽüR{Đy4€š ~(ææ”p*†&9¤'Šr) 敀? C֌œôP[ž}zQ`G¯zN9Åbgš`{ņ@Î~ŸĨŽ(§`ČÆF)8>Ô ķĶĨ!Ī>žô„.}iõäâĒŪ^‹UP¤•ūęĖöBIn.GīØ"˙Ī(ĪęzŸŌšëâŠPøžŊēšFœ§°ˇ×y9ļŠVHŖÁwŒāąÉųsøsŠ‹ėęSËÜæ2FPą*qĶ5 €*ŽtŒR‘^ |uJ“r‹˛ėu”bŦÉtŲ<§k2Œį€ŧqøųUøåŽ@|šö§iÎíõŦI­šIÖTšH™TŠ(G ã×Ü ¯ũ“n'ŽUÜĄrYAáĪŠ÷Žú9”#N*wlĘT“hčĈĖę^Ŗ#"ŗ/æķä6kƒÜĘG×îÕKc=´ˇ$ÚîۚYI}Ãļ9ė*H"ōĄT'-˜úžįķĒÅæTíMę˙iŅ|Úė>ÎY,Æ͏9%OÎ?Áũ+R ˜nT˜Û8ę¤`ƒôŦŅHĘĘÂHŸd pŨąõĪ…ĖĨBĻŨ˝õ‰°zôäRŠĒ֗ĢtĨYvJƒįLįãÔUŧ­{ą”dŽĩG+VŅ8uÍôį‘Kųô¤Æy­1ëßëJqš擯^ô†ā 8ãŽhĀœr)ˆNƒŪ’Ę/´^}Ĩ€ōâ,ˆvČŊą‚?:Žæâ+hZYH Ŗšę}šĢšd o§Cƒ ‚pzŒœāúžy=ëŋMJ|ĪĄGebįqëGĩ/ĩōĒ÷ĶsÛ}˜ÄŌíJČÃûÆč: gĨ5tË<°ã#ÜxjŲČlņNf|ŧš=¤ģ˙Ā,{EiŦĸ@ü lõĮø “qi†+˜7#‘č}ŠË÷pÕÕč6p]čQ-Ė *,ŽČĮĖz~ĩtĸæī}WS*Õ5{\ˇĄ]IwŖÅ,Ĩ™ōAf,āūUĨÎ(āÆ˙^ģĪ)ģąOáMúũizį>´˜ëĪŊ×ĨĀū”Ŋķũ)Á4î}(œŸĘ—¯4;Qpsū ¨æņĶô„đ=i ^rM&M(<õ¤ČČ>ôĀZ\sMÆ9ĨäöĻvīIĀĮĨ#ˇJã•4ģ‘Fip;QÎ1L?ŽM!*ŠY° u>”§€8ëU¯ kĢ  M¤B ¸Čįך@W—[ĶâyšVã8@XúrNŊę nŽ.†Ņ›xÉčÎF}AãđĒVW;”Å0Š9ÛåƒÎŽ{ÕŅÉí^+1ĢwŽSŽ#ģԅmaI<ʼnD7wüę^ŸZ{âā¯&S”äît$–ÁŽ=é~h4zš@8Ĩ<”ķš õ')1š0qÉ ú bҜ‘HhíہŒtŨ‡F)"ũ×E^˛ŧķķÃdëÔŒ=GųâĒ c rHaʰāƒę+ŋ •Ęõ‰JJjërVÖ LŪd@“Ėb1žJĶŠ’}M L-Ė”đ¤)+ųôĒĐCäBēŗˇV=ɧíÆ8öŽŠf’÷”WŖō!aŅ ÄP“J$\ûÉ$ûކŦRD‡3ÛŋËÃ2`ƒîsŠaíIßôŽZ9…ZmëSIQŒ‹ōŪÚŘķÆĢˇp%ĀČĒ6š°û07āBØŨģ.;“Q$.âą $įĨ8Ē5ÅĄuIœŖc ƒ“ŽžŲĪá^…,ĮÚօ4Ŧ›ŗų˜:ąmŗGOX¯o§ãܨĘŪ>šeöŧŽŧTÎJ1m‚ÔΊ!,Q;Ī$Įˇ$뎕=6$XŖ § wõ§ŽkäjԔåy;úžŒRKAŖ“ßōĨį‘šZCÖ˛(3ƒG~´u¤Įå@==hĮåG”āšC͚ R~”§­4!šö§gŽ”uīIL PG4ŧ~€Ōã<ŌwãĨ PŒqA•'n”sĮŧž}iƒD>d„ÜŊćåî#ŋOjŲFķyö4Ėņ8;]A^æéNŖ#īŖšĘ“DÂ'ųŲYX…ëžšįԓøÖŧ8UYŗ´uŒŅ7ÕY]åšákĸđŸ^€N>C‚Ũųíø įŗŧ)Ē“ģ‡Cßđĸœų%w÷Z›œlHęxĨ^:“\+kz  ū”ß&0Ą@-õâēÛ=VĘõÂA:4˜ ˇĄįúúúW|*)|'™R”Ąņæ€sī@į”rĩQ˜R曜bŽüôĻ!O4˜äŒū´šöŖŽp) O¯§4›'Ģ2ōûĪVˇļ.>×~T(= ÎĨHĶ4žƒIˇd?Pŧ’"Úųm;ģwD^äãōüj¨Ôod_‘8Ũ™HʞxĀĪãÍÆą.}Ī9$ûžôĩâÕÍ*9?fŦŋ­N¸áãmI—V iíĨBŖįa‚ŠëœV—ĘyņŦväJĨ)ēˇš†+Y^8\–eUČSųøŽŒ.gÎÚ¨ŒęPļą:^síM.Vã<úVLš…ÄļâÅ9Æéq܃ũ­U*b0cā‚ĘpH=A5Ķ[1ĨMĨ{ßąŖ)q]ÛO)Ž+ˆŨĀǏ8,Š’## e<à Ö'“°ŖÂÆ7@BãŽ?AI1ēēt˛*Fw+DJœãúsųÔSˍĘ-ËGØn„“˛$ŋ´ŠÔÅ%¸1Ē~^™?/Nƒĩ8¸2ovitg9ĮĶŌ¤ÍxøÚÔëTæĻŦŽšqqVaۊ=¨ېô85ȍ°ŖëIŒæŒđ9★<ķE/ R·ÔRRņF1ڋŒN™¤Āõ§{{SiˆZ(ę(ã €gˇĨ/cšAŸÆœäĐŌ@'öĨĪĶ”Ō8īMnííĩ ¨cš+hBHĄ•ž^Įžx­ MâģŽ{›„” $'—€Ôs隱ĸ9m&ūédü˜éWÍ~ƒĘ°ŒjÅjėõ<šĩę6âØ™ô¤ĪNĮ4 ōxëHzđ0+Ų0ļ‚õ>ôƒ9ä~4/^øĨéŒP"mgŸķŨ˙iuŦŨū=Ļ˙Žō:ĶéY=ÍÂQE (ĸŽ”„RRŌTą‰IKM5,įԊOƊB-‚–tĩēØAESĸŠ(ĸŠ(ŋÔIūéūUƒĨ¤—z}›\ŠHV4+ĮÍōŽ[Ÿ^‚ˇæ˙Q'û§ųVf˜qĨZ×˙ĐE;]-Ë俐ąÛƒQ đxĄ˜õŠqbšSPĶ,ĩ‰ŽíÖ_(åwöö÷ú†=JŠé.“OˇIPä2F 7ū-1ŸĘ ČK å\!íũã~Ô nÁâyrU +mF<ŗmQĶŽxÅOŗ‹zĄķÉh™Åø˛‹ÄnQ6¤‘+œ ägôΗ{ a­ØäčNJęĖ~ÖÁĨ ˇ#ÆxõƉĐåWē•Ųk­'@iqG íXŒLRb—Î(Ī4€N)hΝZA֘ŌcŒcŠĨôôĸdÔ'1[’I0/°õ?ËŊo‡ÃÔÄTPĻŽŲ3œ`ŽËÚ5ÔQy–ŽÅ]Ļ&0AÁÁéë[$k6×C†Öi&žWFĘnlü­B8éŌŋHĀSĢN„iÕJëM<Ģ‹“qxŖœPxúRtâģ Å=8ŖĮ­ŲæŠXŅŋãÎC˙M¤˙ЍhįŠÎŅãÍû:Oũ ։æŗ{šhĸŠ@(úĐS{ĶéϤcM74ãMŠ`úQIš(Đ ƒ Ĩ¤^‚–ļ[QE0 (ĸ€ (ĸ€!¸˙iÜ?ĘŗtĐ?˛íũ1OũVĪüyÍūáūUĘxP)GbōĢŧiĩv†PŖæ<’3ôöĸö&[ęh##¤`â“85i’dEá.)LąÂÉ&A“zũhąˆŧčĐH$ڒnAøķÖĩķ€zR@yįŒtŨ. htø"`Ėūs c…vnú>ĮÖ¸íļqĪ9xåŒHžYr>VäņøWIâyį—ġq2˜đUw˙ŗŒsߚËļå¸[;h^w۝ĢČ=I=;ōkåņŗlCŠ[hŦ{XeQMéÖãaœKiģšG$ã4 ČQüĩa#īœv8ÍtÚ'‡SK $˞K“ą+=‡Š÷˙ëį7Äz; ŋˇÂD@ŪUAØŨ3Œp=y­e“Î4]Y?;[S%˜ÂU8­ `6~n•˛?ÕįÕ¸Š`@• Q“†Z–7Œ  îkÆqku¯c͏āŠHfå¨lÉÆqQFë! y‰ n$Žŧ ° ēœ ļŗ™÷)pJm}[Ē*MÚlNŦ#ņ4DÎą)§rMIĨÔ¨gŠŌy"éŊW#>ÊüĒÚč׈!žV´EGYd샜9āétëû‰äōĻXŸ*I’`€ä`dõëúWjËęÆ.UŽ*˜č^ÔŨÆørÍítâŌ‚­;6‚ŧ×V¸Í ÉéNÉįښI+mš;ąi¤ņNëͤ=Ĩ4 vŗ5Q(xĻ(ZŪ ĖÛO*}qė3ĶÖĩ=O­Cu¸´–ÜļˆS#ļF**ĶU āú•gs,܊oáCZ^ÚۙHĨUå‘# ãۓĐRĢ@ĘAVw¯•¯†ŠAÚKsЌã=†ž¸Ŗū4¤´™ôŦF¤ŨÅ)éIJ/ãIĮĨ(úæƒ×­üÍ!Éã9Å(öŖéBōi€`f“Ŋ8ƒĶĩuÅ&3žy¤Ĩ4ž´ÄzŠúĐ8¤ãÔzæƒĶ4Ÿ†sNį N”{ŌGķĨÁĻ!@qøQŒœâŒb”B3Ž?ZųsŠ\â“?•G4FXŠĢmÎ?/J×ĐįfYíäØ<­ģT( Gˇ¸5›Î3Šj<°Ėˇ˛ Æ á‡pĮĩzų>?ęĩ×3÷^æŠ^Ō:nu\ô&ƒĐúÔWK}hŗÆ1’ARyRüę|duâŋCŒ”•ŅäY§f'_ūĩ&Aã=)Ũ)J`'CŸjāķ­&3ÜS‡§4 ŸF˙'˙ŽŌčf´zdVv‹˙M˙]Ĩ˙ĐÍik7š ”QE!ĸŽôq@ÄĻ‘N'ÔąŒ4Ķ֞xĻcš–10(ĨĪŊ„\^‚–‘z ZŨlHQEĀ(ĸŠ(ĸНtqg7û‡ųVE¨–ÂÚîÎr$(yPU°ŖŽy­}ōĮũsoåUl@NļEBÄ 8 ‰'rĸŽ'ۑq<'Ąb2Ÿ÷×§×;ĮÃn)ʼn1Č5Qtûa…ØJg>^öŲ˙|į+ĸœ/¸ÕŊĩcĩ.`,O@㚛ķéRĪoŅlx•“*Eeģ>˜ÄË#Ŋ˜\î+“1ԎŖ¯8ãŊ\dc(ØĖ×_O:•¤3iŠy0aŧ˜ ųqœķŸ¨¨ÖŪ뛛x"bŖjŽŪ`vīúS•wJķ:âI $÷ÆNúŒSÎëۊč…ŨIîsNŦšåč)<š­}x–­q"ģ…ã2MN3’ ŸLŠŲ­42Vž§Ē^>¯ t‹ Ą —9ë͟JÁ ĻęIŊūÆîĒĀv%Æsę1‘Íu¨ĩˇÕZ;eŽé€l€Äū‡ÛÜViŲ/îķšÉ@7AéÖž:ĩZ°Å¸ĪŪˇ–įŅS„%‡RŅÚØiÖÚd>]ŦAw}öîĮÜ˙N•hļ[¯n•Ę}ˇÄÉdÂĻ 9õ,2;ķÍZūĶÖäŗ™–ĪrÁ–9"#jˇA¸‘ëūs_GOJÎĘÉwV¤ĶēR¸ëH'ƒGzSԐ Š`5°“Đ ÖŦŅČĘɃvcb¤dqΧōÅnM4Vņ4ŗH¨Š2YŽ`ĮeoĒÜExŠå[•„0Û#xãŽ=ēÖu2ųãWŗßØjēŖī1^Y啠´sķĘãäüO°§Ikußų˙ŪI0¤ũĄüëSĘÄĒŽWĻ`Ž9úõ°Ü9…§G’ĸæ“Ũ˙‘ÉSRS授ĖqsosNc*X+"ĄĘäāsžyĮj‡Ō™ĢN°éėī1äį#œwĮ_¤āĨ|Ī`há+ERVM† ´ęÁš‰ļŒ p ŒŠųķ´oŒT Äā´ø°XƒéP°{ßĩGkpˆņ   røīÁĀéÛÖē°xJ¸ĒžÎšģ"¤ãNōz77épí ępØĀŖ6˜¸ōzqëųĶĸI&ŧĩŨr&‰Qãc€Ŗš÷mÃŽxĩmlR&ŽŲėŧÉ\˛Ŧ@Įķ×ĩT0=–¯q#ĸ, Tc sÆ9éøZû ^W .R„’[õ×wō<ēx‡R˛MŲŠiīŠpéMlæžģšČ¤Ĩ4ōĻHCKzCÆ;ĐīKŽ2)7QũhĘ2āzĶÚ.›ZŒ­š[pȤMY‘ØvĻŒæŦī É`*ŗÎYNAϘĨ„Ž•,qœäÕY.bö%úíPIü…Nw(â(âNÅÎ[Aū5rƒ°Ąk– ’0§#Ĩ(´.Ažyú+ōū´Ķ`̑ԯ§–į'לÔEEu.JëcCÃą4zsLāfw2g'$vĪĄĮzVŋk'Ãļ×ÚÜ>æ{RųˆšęCc˛?k‘ŽĩúŽJXh4­ĸ< ŠŠą¤ĶIĮ4§Š1Åu/P 'J=p?\“@4R~ÄÜËiô3Z5ĸ˙Į‹sŸßK˙ĄĩiqYtRšJJ)i  aM4ī­!úTąŒ5ÍHj&æĨšŋäQLō›ÖŠb5GJZEč)kU°‚Š(ĻEPEPMC:ä˙Ķ&ūU ?e„ŅōŠuųÜ˙×&ūUŸwvÖĐÉōÜĻtL8ĮcúúTɗdhŽ cĸ†öÚá3¨ĮŽ~aėGPj¤:„פ‹kPŸ(lÎøČ=ۜŽŋ•MĘæ4$š8#i%uDYŽsrĪ%đ/$ĩ˙€6o`Gåžõ&¯pÁmÍÄ “Å0‘YƒÆCc¨ëéQöëÍmJ ęÎjķiŲ2`SöéRŲ¤+Ī֙ÄÄûÅy§8Pp¤ŠĘÖîî-,Tڂf’UQœ åŗÁėn¸ŦØ5ëč#˙IŗžYS´DW(-Ž9ŨúzĐåaĨtj\čvWW_h•_qûáūŋäUøã"ĸ(EA…U{VTœī¨Ė’ÄR€8 䓃Žx+Tíu˸ŖÛqk$Ž>ü€aymƒoŒŒûQtã'$ĩ{–į9EEŊŅö#=jĮ7ŸnÜ!RŒv†ü}šüéļW weÃFc2(m‡¨ĪåV==ŠÔ§ąå–Ė˜ˇtY‚d¸‹z}Ē{Š“ķŦŲšjœįĻīöM^ŠUš%•U†~žÕķXŧ$°ōîžĮŖJĸ¨‰Cí#ķŖq1HW֕sœņ\Zz:ķF֎G5#^*)åX iĸķĮSRœíÍeߍ×Đ,ÁÄhwDAųYųāũA[PĨí*(÷"räČ­ŦŖŒy˛ k‡ųŨby8ôĮĩ^‚4Ž%U\0 véõ§D ČĪõtá+E\¤äîĮy‘ļâŦ6yĢ)īŽnÚĐÁ䯿=͓¸ŽŊ:`ä~éä¸ĩēš;eŠŸ šâb,AL´[„$°¤Q–܁[$g’?žw;ÍŪŸ% Zië§O+Ģ3ŋ…S|ĶZX¯7Û¤ž'1@Í@l‘ÁÆxü?OzŋœŌ ;×Äbņ•qRSĢŦģžŊ*Q¤­ƒœãŠŦ×$ŗG EŲx$đ ûŸđÍY=jŧKp:ūôč+XSļė҈3Ÿô™Iû‰ō¯ãÜĶ…™ŸF͋EÛå┏š“ĮOl tâŸøĶ,Žb´‰’vHöĖcR[‹r?kéøfQx‰)om>ũO;0ŋŗVî^Y§ļ](‘1ūļ5éõÔ~•[SÔl„+lŲžK”>\H ßĮ¨č=ëI]\|ŦņŽ2éb¸ņšųiåŊ˛™`䕙ˆÃg˛đ>§¯"žģ0¯ė0͍ĩ˛<Ė=?iQDØĶl¤°Ķã‚Gg+ęs`}XĀ8Š 'Œ‘ōpĘzŠô5Qî €åČ<ųj[ų ü˛NS›“ZŸHâĸ’DâŽqíUšåÜm†$ôgRĒ=ÎhŠáNĨ$čk}ôĨėžäܰ}éŖëK×Ĩ}*@:ķEĻsFĶ×ĩJáڅÜĮåĪįUįf’ęu}Áf ķÆ0įúU”Ķ­“9…Xž¤Ž:ļ”V “l†kcqq`ÄU—ŽâāûsCéąF>D(="bŸČԅ,-.<빥l<Į;Or éÁüĢŨ^<ׯQ§V‹."Ø9ë˙zŪå?…Ų ¨Ŗb qŠy9%‰$ūuĩrÜjqÉ0žå|ė#ķ2ķōäၒA˙t{Ֆ–í.DotáMÁRDŠ•@Aęsøzš˜I7ņ!ÂIIeeũŠrČۅ¤G‘ÆöūīĶ×ōõ¨"ķKg—qĀr §×qíôÍtzU—Ø,ŧ§`Ō3v 'ˇč? õrLŽU+*ĩc՘bą 1åƒÔ瑤qŦhĄQF€ĨR3p8Ģų4ÖPĘAkî֛KW2ĪŌŽ§å$zRŽ:ķŪŦ ^Ŗ“ĻqHO8  Z'üƒÛūģË˙Ŗ´{Ön‰˙ ķžž|ßú1ĢKˇ5‘ĸØ)sIE (Ŗ€ R)Ԟĩ#ÕT¤Tl*XÆfŠ0}EÄ_^”´‹ĐRÖĢbBŠ(ĻEPEP=HgMē˙ŽMüĢ‘€Ũ)“ũ%’ # 1ŨĶŠ'>ũũ+ŽÔŽ4ģŖ˙L›ųWíyį@°¤F˜ĖyĨ8ŠncVMZÆĨž§ņCöéx핍ÔÜ@'œô<z}+^ĘĐÛ yŧˊŽĮ Æx°äוõÅĐąĩy{‹ŧĸ  ās’O?ūēŅ“NÕôí8Â͏y%t$uØ#=ŗøVU ”Ŧ)Ôn7fîĨ^iėļîĨōx$qŸ|b°c˜H !•Ôíta‚§ĐÕH.Û¨ŧˇkIČų‰ŒÆsę˙¯šmąĩ¸žkĢ•Ô]eU.Q•Û؅õî;sZCÜ]ҜíQéšĸy ŒyŠßIŊ†,3­Ōã"6MŒG×Ļ}°? Š=Bíö%šˇP9yÆæĩö‘ļæN”¯kĻ}é2ĩ#đė 3u<ķ?ŗ”Qø.?Zsx{NHđļØoųčŦwū}i{xęō2}ņĮzo8ãĨY›Dš âŪø€Gd`{`ņúƒYŅ]FBFō§žxd' Œv­Ŗ8ËDdâãš8ëÔr)q‘ÅOzp*‰¸ÁĮFëí?› ް—T`Į¸āäzÆ¯cž)G¤V5čF´$iNŖ„š‘VĶY`“÷ғċ×ņsø~UŖŖfÄsObØ5}•0ÄŦ×đp~ŊĒ4 ŲōØĒ„ÜËĖ÷(ÂáĪ <ާ9Æ)= æ°moä´dŽPĪoĐPcõĒØ× Ü Á>ŪyØŊk u"TåfLŒzUM@Fl'2+ēĒ!ycž=ęhäIQ]YO!Í>H÷BëÁČËŪ2Š•5yĮōęv`kû)5-™Ēi§­Dˇq›‘nûŖœŠ`Ž9 pqëS`æŋ=ŠJtåË5gæ{ŠJJčJ­w+ŸîˇééVņÍVQ‹ŲŊ iüڝ=˜Ų1 ÷…RēĶ-ī ‹€ŌDäŒąÚHã8üŋ*ŧFMgÉ~ÆøZ[Ŧeņģ.ØŨŽ c¸ãķ­hÎĒmĶv~ZhDã¸øôĪ!ŗe!ĩ 7–>œŽŲãŽ*K]ĘŌãíÄLØ#Ėv,F}3ŌĻKØNVSä:õIûZ/.ūËb÷€į€Ŗ<HŸNkIâqU ŠJnŨ¯ßķ*4iEķ%¨ų- •ÃÉ-ŒsĐũ}i@tĩd^ëípąÂøĮ™‚rpƒęzũ9ôĒđ“7Ųåœ[gb§ĘæbØāø¨Žŧ–Á:‘Øč{bŖš%ž=Ÿb:ƒØŠĘã´Û(Š– ŧKÆv†ôéƒÖšēķ˛ Úūņ ķQU$íÂį~aMaj­R#™VaIv-ČÜį$äũjĮCīT"i'ˇ7p;/˜ģ•8!ĀčNGĢą¸’$‘yVĸŦ5¸ĐôPįˇĮEŲ°Ē)S!‡ëP@Ÿi™Ž_æPHˆc€=ZÉ.¯cX܆ŌĖŨ]ũĸãå‘Áް?™úVģ€]ũąí 289Ī^ Rœ[ÛÎSšĨLa ųõįĩN–i‰<ÜÎd!˜ČnjÖv–˛Û G˛*Ūč0^ŨKrķ8y@R0Ú8ũũôi°ā!œ™ËŖ‰ Œģp1éōŠC’āZZK:„Á‘Ĥ…ņ×9âĩōÉĀŠ•jÅ$¤%ž†ž„Ü5Ë\žī—¨ĀÚpũM-Ŋ¤PJ÷‰,ŌÍ1*Čbųœ“‘…ę8Įātz^œēœĸîę,ÚĒâ$‘F$ĪVÁíĶo,âš78Ĥ2`g™¯ĸÁeĢŌSĢ+_ĨēUq1„­t-mĻÚÂęĮĢĶ bŦæ™É!![‘O"žļ䍏=ęQPMså6Đ2ØĒZåvĖĀqžj>†žYæmÛr}…FĀŠų¸#Ö´D ž9ëG§šš1ŨĐ ™íƒxøĮcJã°Í‹˙]Ĩ˙ŅZ5ŸŖ˙Į‹cū{K˙Ŗ´9ŦËAE‚€E ZCJOjCRÆ4Ôl*CԘÂĨŒđ4Rîĸ˜‹ĢĐRŌ/AKZ­‰ (ĸ˜Q@Q@ĩS*īūš7ōŽEÚDļĖiž@ŋ('žÕÖjä ķ?ķÅŋ•q÷Āą˛y‚5]ÎQ7 pxúÖô]“g=uvũ'Wēķ^ŪØ)žwßĩđ@Î@ĪB8CųWs8Úá4w–˙S„\oˇxą*‘ 䎙ķŌÂ×vTփŦˆh„{|ļŒ|ę}ûį¸<Đú­Ÿ”›fHv#*’ Î:ūōŦķ Š)đ&ō%mŦŲų͜c“ĶĶ´Ét8mĶdWS€Ęé( Wy$íÎyĮĐWČ›Iüŋāž—;JƌZ­–ØˇÜŪ“*FîžŋīĖSS€ÎˇPOļm'nū3ëU_Ãb;ˆ^ãÎļ–%Ė(B`×}Gä)–žĩ7V𤲉ÄĀ0FĐĻ1Î_C] ãY(üG=zœÔd䎍Ģ?éץ˙2į-‘ˇ8Î~ŧUõŧˇyĖ)*™UļqģųÖAđŧ[˜¤š•€@8€3ƒĮS’O×éW­t¸íīšķ{´ĖĨXôœįŖ§Ōž’<öÔųŠrß@Ր\[%Š?,î‘Ø›úT"Ōá\€ÕķYōÅԟˇĨ>XĨˇž§~ ŲMrI]—lŦŖŗB‘ä’rX÷ĢDātĻŽšs͍¯…Š9T“œŨÛ=˜Ĩd<}(+:įR{[†‡ėūb€„°|}æÚŧc×ųUKŸEm4Čm¤afLŠÎy ŠųīĄW5Ylƒš+ss ëMb1ŒÖ<ž"…&X ,]‚ÚĀ‚<ᨠŸ­1uøĘDō[4՚ŨŧlōHĨ7ciĮQŒūYüęšhheŠwuËF…”PáĪ8非ŊŊj–Ĩ™€QԞÕkBdžōę@ÁöĒ…aČį#>š–+ŅĘŠNŊxĶŋēc^\ręsøzā6ždę"–ûNŨØ'ˇ=3Ÿz°ú42rĶMŸ5f#†]¸úđ¸üMnëÅ<7Hģd’MŽryOø ΚE†"ÎyūXúzĶ1Ŗ[ ‰öjWžĢæÉŖ(ÎÄZ|Vg”X™-¸ú <ŸŠ4éĩŦæK4#ÆādįÕIÆEZžĪO†Ķsģ]ä3´DeO] žĶą5nÚŌ;õļš%ĩŧH|ĩčĪž¤õĮosĪãéár:ęĸĢRvjĪMîsĪšRĐׂ_:ådh÷¨mŦ0F{y'ĩSūĪØTĮupŒ1ŨģwšÜéKkpĖŗG3)xk?@ÜŸÖžŗÉœ%ąÚšdŸZ ŽF*ÍĘÉ8ą‚Pŗ0ËíäÆžžĮ°˙ëS;Ũ[Å ŠIãYČV` ü*C€qž{TKgÄŅųJQžöáß\õĒ6vö Ėa÷‰Ŗ\–-€Įo§õŽŧĸœŖ ĮJˆŲÛ=ĘÜ´(f^ŽEz_ęÔzOđ1úãėbC§_É$/4Ŧ~jšRų QŽŋNøŽ“Œt¤č9ëMËų˜!v×<æŊė –.4ög%J’›ŧˆ/­–ōŲĸŨĩŽ ļ>é diē{O<“Ü:•RS(@$g§ŋNÜí\#ɉ‚6*@|gj+'>Îcōä„(ėG¨Ģž”ęÆŦ—ŧē‰NJ<Šč2ĘävēǘŲāp ž}˛@*öQ:raŠM:îP$8Sœœ‡Ÿ\Ķ]îŦA•ŪK˜ų ‘߀;fˇ$ŋÜUyė-n¤ß4*Ī‚ =ĮĄõt53KũįUúšaš'ko#ĸĄÉ˙<Žö0E#ķ8Pĸf 3Āā”čŦĸĩQötD|ä°P7}}jQËËģ¸ƒcįđũjÃĄCƒšzŠ˙i]ŋ2˛z‚§ĮĨA1j0DØōÕL¸ĪŪ €?,įōĢ+ƒ ü)U€Ü2:Õ8ŦmÚC4°”;lķ›vĀdžĀšÉqīW­ą ģîGĻÅ!ĨMĄĸ™Ō hēo#$ŸSķųÖĩžžŅĮÅ#BåG˜¤ģ’=zō(Đí M>’%˛Ōc—9<ū=kDũã\˛Üꂲ)ĩ›0%ާ2cå`ØũÁüsJ˛^Fxc˙y_ūqųšˇÍ'oƑePod˙žP/ļ]ŋ ­/“r™Ųx[×Í@–*Á늧:‰¯á†E –Í´Ž‚ŖôÉüéXD öš.Õ ēÜČxÛ1ŒtÆy=^?Ąg4k”ŧ”ˇũ4”ū#SĮq(Ž4UAĐ(Āō{Ō°×vIˇ–1*O)ōWOŠ8čOåV,&iė!’A‰ áÆ1†ÔUz§j ™­ˆī#ÁčQŽÜķøĐ2č<`ķéJ9Ļ ļ:fĻÁrLöŽ~÷MŊKß2ËÉ{y i#‘ˆ*ĮœƒĪŌļš#9ÉôŖ'§nõQn; IKFsxš9š „Tp¯¸ų qĮžŋ­hJåܲŸ”Ôg9ëX×ÃS¯JŠčq›‹ēg)™wkiĊpBÆÄgØãą¸tW†ލã+• a¸žŨˆ ‡åÎp§•ũüĢäs\žJjĨ6ŪŋqŨCę>V.h'qč)O×8ŠôŊ5/m–æķ†f đ`1‘ÜņŪŧÜĻ2§,tļæĩjĒjė›DGg¸œŖ,rX`ļ3Ī͚×üi…@ S†GWčX\ßË…Û‡x7,HâĻcЎ§[Íæ)\*™Wk)ūČúįųUĻKdä}ŗG0X‚Ų<É99ĢˈÄä}j•Ė䈠ˇ[NJų˜û€rgņĨÛ¨Ė{ŖaÁdrĨž¤MŒlvņ Ę]~ōƒĘũjŊė3C$‰$>dqī.¤nžOĐՖŌm5SqžI9lõÉîĄŦßėģ]-pņ$–Ī.Ic†RėÉîš#ŠOP5ė%’{(Ĩ”|Ė%JägƒƒĶ#õ3($ļOJp#ĩ p‡Ō„2Ļ‘˙#ūēI˙Ąĩ_öĒGüƒ×ũ÷˙ĐÍ^4†ļ \P  )hįu¤šZJZC ŌŽi´ĩ,ųh¤ŨEˆ‘>čĨ=(^‚ƒŌļ[ ‹ESĸŠ(ĸŠ(†Ģ \iw1&7¤W-öMHqö%#ĐJ+ĩt!SĐÔ_d^>fĒ„Üv"PRÜãūĮŠdfÄcĶÍŸeÔąƒ§œûHĩŲ T ŖėËũãZ{v/c‹û>Ŗ˙@ų?īâ˙gÔOüÃä˙ŋ‹ū5Ų›D';7ė‹ũãGˇd:8õ‡P˙ |Ÿ÷Ú˙8Į¨`ėųqčÆē˙ą¯÷c_ī^Ų‡ąGåßuūΘãũ¤˙dĐßĩŧŠēuĀvR΃ú×d-@9ü¨û ūųÍ?lÅėQ…§Ū]}˜G.•40"Zˇö™įÎÍ?øĒŌ6ŠˆūT}Ž*Ī™¨ŗ7í2įÎl}S˙ŠĻĩĖŖĨ”˙šņUŠö_öĪåGŲxûį?J9Y™fâNŋcŸķOū* Y'kã3ÚNSlc)ߒ~÷°üĢoėƒ?|ãéA´˙oôĨtfgڟ?ņį?î˙7ímŸøô¸ü—ükSėyū1ųR}ˆ˙ôĨpåfgÛ$˙ŸKŒēŋãP\œ‡6—K*ũÉ ¯ëúVߨ˙Úũ) ‘'īņEÂĖÂĩšģ ˙i†rŸĀ ŨO$Ž=8Ģ?kĪüģÜߊö#Ų˙JOąįp¤;30Ũ¨ëų˙ŽfŪ.1äĪ˙~i}‰ŗ÷…coīŠBŗ(-ė}<ĢûōßáAŊ‹ūyĪúâßáZeqücō¤û+įī ZŽÆÛc'\˙÷áŋ—íąc”ŸūüŋøUņj˙Ū†Ųúî•+ÆÚáĀ;&˙ŋ/ūÆŧˆ„ŸõÁ˙´ūĘã¸4Ÿe“šZjⱞš‚GŅgöÅ˙š×ŅģîeŸú`˙áZf|õĶjüŽ)Ũ…ŒßˇCģ7ũøđŖíЎvĖ?íƒ˙…hGö¤ûúŠwŒ˙ļΒ˙ߗ˙ ÎōėŽ§î g&_”˜\q´NœWAö99å:O˛KÜ­ FJŌÕ ]ls§éŪy|ΑūĨU‚˙/Ō´–îŨUr¨‘Ō´M”„đ@4‚ĘP†Ļ*4ÛpŠWė6ä÷( č3÷ˆúĄ˙ úÛcū´ œ¸åĻũŽ^Ÿ/įZ]fPûuˇüõ;ƒ@žĩ˙žÃŸcZÎCØcëKöY;Šl,Ę?m´?ōŲZ>ÛhúôüM_6Ō qīGŲ¤ūčüęuŒ ŪÉ.|į’)⑀eo˜§Čį§1ß5f94ø%fŠXP°ípqĮAÖĩ~Í&z kZČNBÎšŅ‰ĸž´'æ/ûėUøī,Ŗ`ē„˙ĀÅ!´—ŽZU`c\ŠĻĐŅ•<\ģĪÛKr@¸ dõ8Î?JĪb-%f‹U‚Up3¸m¸Ī@¸ũēwŽ›i˙žcķ¤)žąH9í*ū9îš{ģË_."DNŨĎX‚O¸­m˙iØˇ–˙÷đTÛOüķģOxÁüi1ĸí+˙/ßÁLšķOš&F쀆#Ėki˙žcķ¤ÚsÄCķĄ\f [w=b܁‡ †` ģ°>ĸ­> ņĮŋíö2Œ !xīƒēĩœ˙ĒOüōúŅ ŦVŅ~•ã‹g=Xօ25ÛbŸšCBŠNôQ@ÅĨ¤4RzĐ %-&1zŅŪ“ĨԀŋ…šĸ˜‡¯ANíMOē)ŨĢXė&QE0 (ĸ€ (ĸQHŠ(ĻERĸŠ)€QEQEQE€(¤ĸ€ )i(ĸŠ(ĸ“4š¤1( đ);PE%/zOz(ŖĨ&(Ŗĩ%ŅEJ)(ĨÅ äŌô >Ô >´Á$¯ ÎįN8ö g (QGzC@IŗŠ7VlŽjjJbŗČl{ĪŨĒj)Ü,FˆnpĮšb“j€Ø#¯ŊL(âX‰–@ß!ãéWÍØÛˆ$ôæ¤ĸ€"Q"ÆGVĪZLOžĢSĨˆq>:Špd’1ĀīRQé@ū˙Š1pĘAĀúŸ=Š{Qp°ƒ8ëKIíEĨĸô bŠĨ/^hĨĻŌÔą‹@ô¤ŖĨH E7Š)ˆ~č§ bũŅOŦvQE1Q@QHŠ(¤E%-QEQE0 (ĸ€ (ĸRPŌRŌPE @QE%´Ūô Z;QE6ŠSM ¤9ĸŠ9¤Ĩ¤ ’Š(ĸŽôJ(¤ÍŠi( Š3EÅ ÉÎh¤ éGJ)Z@-%/lRtĻŠ)( ĸ’@-Q@ĸ’€ŅE)i( —č§vϝANíZĮa0ĸŠ)€QEQE€(¤ĸ EPEPEPESĸŠ)”´Q@”PERQE%-%f€°!ÖäļibŽÖŪÔK;?]ĖØ@ŲoŌ˛Ŧ´Sm~č§ĶWîĶĢU°0ĸŠ)ˆ(ĸŠJ(4TQE (ĸƒĀ4Ärú‡‡'Ô5ҍ‹ĨSD   ÄägîeačPU?øGu%š…ÕXX4åĪúŌ¤ÆyįnGëž+¨}FŅ$hŪâ%u8 ¸Č4jYųy‡ūû.QęÂÆ xbîPĩ9Fãnášr¤Īm€~-ëWô}&ãM‘ÚâëÎĖ1ÄŖž6ŒÉīĮåīZÚvGĨĖ?÷ØĄoíYÕâ&f88É4)Fú‹”SrēhÉô5@:ŠnO÷M>†€IIŸcF}-›Ŋ&īöOå@ĸŠ (&Š@™íERE/jnhÍPÎ);uĸ“Ĩ/n´”~=¨â“4ŒNĶŽ¸â€ŒU\IŸâ폭KåSœįĐĶ!¤¨eķ7|šéÆ?Zjų›ÆÛī@\ąQI8öš—ĩQē˙[ͰĄ+°nțíhzOĩ%SyéGĩW*#™—>փĨLŋ8 ę+0ք{ŧĩéŌ”•ŠNä”ŧSFīoΓ-éRPę)šoAųÔR3‰aЉčĒęė#ÎIŠUØ $hĖB‚Ojgžž´’–ō›ŽŪĩOvô ¨Ģ—>О´}ĄëTĪŠ ãŪ‚š Š*šÆjOĨSˇæL{UējÁŪ—Ŋi)Z)3Kš`Ŗ4™Ĩë@—4ÚZ@)¤ĸŒ@Ŗ4†€jF&ĄĸÂŠwq>čĨ=)îŠSŌĩ[ ‹ES ŅA¤ĀJ(ĸ¤Š)(RIū­ž”ędŸęÛéLF $ųˇ_1˙\Ũū•c'xūužˇÖđÜܤŽC ›ø ūB¤•§üõ?÷Ã…|Õz‘ö’ģęÎØĮŨEÎOņk“ž!Ÿųkū„*ąÔíü´?÷Ã… ŋļšx#ŽBYĨL ¤ĸ…Hēą×Ē ¯u’Kâkh5Ét׍„‘ y{÷ë´3ęG­[oigq‘üĒXđxIãĻüę9<=a=äˇoämÅÐ~îÜ}⊧/…´ČcA˛BAČ-!b>]§¯°ž—S‰š#\°ķ0ķĸ|ʃ9ä°1ĮQ×֚úũ‡öeÎĄ Ū|Vëšü°sĶ#ķČĒiá /…uĘĘRۍŧ{m•Z‡ÃÖX\Y§›äΊķķ…?A@ ¸ņ&ŸmcqpōĢKoy FËdH÷Ë~F§:ū–˛ėkčnÚTˇ9įüä}*¤ŪͧIĀWi…”ŒoÎđ=ŽãJžąB#Ü*А¨ũŨáÁëüF@°5í<Ę"K”fųwāK§Ũc¯˙í­0Ė‘}ž1ÛjŽņ’x?āKųZĪOiˆŦģŽX‚ę\ažfnxõvüé˙đ‹Øyë1yˊTî.2v˜ČĪôÉáī@Ę>QK@ûŖRRf—ĩ%-4ŅEšãĨ7Ĩ8t4ĶAŖš¤ ŌP(ü(ĸŠJ(SX§qÅ/JLÕl>GP3ÖĻ@B¤įš  &EA1—9íŠD-ŧdšüéØW,UŋõÜzUÚŖvĀKĐôĸ;Š[dsí@8į֓¯4˜5Ą“ękN#ûĨúV+ĸIsķĸ° ÆF{ÖŦvĐyKû˜útTH¨“{ŅĀīQũšųãũō*9mĄØH†<˙ē*J,dzŌ~5I`Œ7ú”ÆxųGJC  …3ūč§`š,rn‘íŌĨÎkFŗŠũ-XDŗHŒę›FJŽ2ņáųւ[@P)˙tPГ%˜ūéąéTN} X’Ö,ūå:v û,Ũ'åPŨ"4ũZ\ŸCGŲ ÎDkųP--˙ᚊ.Y-ˇĪJˇÖŗb"Ŋ‹Ë]š œw­!īN÷3{‹Fi(Ļ!qGJCK@ƒŌ–’Š3Í-6—4€^´”QېĀûŌuĨ¤Ī#>ÔRqE1XēŋtSé‹÷E>ĩ[ (ĸ˜‚Š(¤QE#Š;Ņ@6OõMôĨĻËūŠž”Āãߛ˯úėԙ;Ē­ÎŖkõÚHėLŲ÷öÕŦŗŸ5ŋīÛ…~eާQâfŌ{ŋĖöé[‘zĮŪo˙×dūuAu{>žcûfßáSXę6˛ęņĮ#iWŖ˙J0Tę,L.žë§˜Ģ^†ņÖL“^˜áCoe(Šy^]¤|ĒĖ@Į@wæŠ^xŗJ2ņ4„*’G”ßí{˛kR]ĘY'•âæq‰€rN1ķ.pxãšĘéķ8Íģɀn•Øāg$ķÔ×éŠ3ÃeČŧMĻ32J€˛FKÄĀl`Œgæ:]~8<9ũą$-š+XįŠˆøoJx”[äq. ¯Āžŋė¯åZ ĻYĮoo ÅûģrLjX sžŊOZ-¨Ņ ēõ "˜DŨņļFN@=sÅ[˛ŋļŋG{i7„mōAĀ8ᨊĪ_ éH‘ ˇmąTũã 0`ĪLǜ{UÍ;I´Ōcxí#dW`ĖŲ˛@ :“Øʖ hRQAéLbē)iîŠSHŅA “4RPNŠm*ŠCփœP{ŌPQKM íIš^h ¤ÅĢ oâÆyĻ,tĨééUâ2dnÎ{ĶĐļŌNIɤ"NÜRT23†ųsô¤X•ËĮë@Õ ŽgëÚ¯šĪģȘķڜwąZCŸ˙U./z=ûՐFŋņōr?€:׏ũRũ+ĨŲô?™­ˆĪî×éS"ĸ?ŊĶ×­C#ȁūEHËÅFü˛¯įQ¤Œdo ¨ŽŽ–Ū)g‘ļ¤jY “NÁsĪāĨíMî wjÖ;÷Š(ĻIKIRĀ) Đ0Í­Ôcې6A˜›éNæ™7úĻ>ÔĀō­U‚kW¤÷™Ē $ąĢZšˇöÅņō$qį6 Ž{ÕD3Jģ´Āzė¯ŽÄ͟ļ›KĢüĪĸĨ%ČŊ Y‚°ōųĄĄĻ5Û'<Ÿ4ZÍũâ.ĶŲ˙Žf´4›ûvĖŧR¨2ŧ„‡ŊjSUaĨĩ_1W’öRˇfu˙đíKëY!Ä6˛gUrXyAķ1žqŒĶ—ÄúbĒ„ŪIJ  `Î<ž€÷ö5n}NšyžkefœæPIÃc$gĮ×Đ´¨×bŒ€r'ƒ¸6Gâü+ėl|éVOi%CrĀĄpÂûŖo9ôų—ķŠ/É/˜#ÆX)ÚzŽ~†¯ž•FĶOļĶÃũ–-‚F,Ę #$äāĮ$œ ´ŌaöãļiŒx ZEä ZBŌ}iŨŠ´ _ʛK×Ĩ%-¨hĻ›Ji3@ÄĸƒIšZCG>”P ĐMC)1۟jj—Ū2ĮoĶ­1\ąšNôĀs+ĀqL‘ŸŽ´Ŧ2ZJĢžLŒ“ĶŸ­JYˇÆ=G4XW%Ŧë°L߅hĪē˙^~”â \¯ZRzö4´ŪI÷Ģˆsū’äDcÄÖĖ|FŋJĮûa˙t3[˙Ģ_Ĩ)CŠxÍ7œUw•ÜqƒūŊHîZãŌ˛uā˛YGdŖæŊ™ >ęN_˙VĢŅ;ŗāž;{Ö.ŗoĢÜjÖrØ"†pĶJ fĀƝr=N>nô‚įŸ|{ĮönŠķdūBļž jĸûÁMf͙,fh˙ā-ķæGáZzt­jÕãÕūŅypũnĨīO÷q`1T| ā[ßë÷žMŌŨiWq 1ų]Oø'‘C ž)ũË}*#5võ-ôŦãsN×&L“>ĸ“#ĻsŽ)GRHĸ¸øúdîˇô­/Jʀ˙§GëąŋĨjæ“)撖…Qƒ@Q@.i(ÅQF(Î*XĐҚJJ‘‰EG“EU€ŌO¸)â™ÜņZGa0ĸŠ)ˆ))iĻĨ€v¤ŖĨ%ŖŊ&h¤ŗQĖtßJu2SûĻĻž]#}žåÁ8>GüĶßŦc<Õ C_ĩļÕī-dŗžpŖxŸZ…ÃükOB×Ŧoĩë;kmûžN2ž€šTZö‘ë¯ÜMoáË^‡FšÕüō_ÉÄļöSųRsĄ™ŊŪĄ˙„ÆĶ˜Ęs¸”cĖ˙E7é[ĶiVŗK+ŊŦԌ;2¸cúÕeđöœ˜Æ›jqœ~ėqœįųŸĖ×Ņčxv!›Äļv’î"šŽMĨļėņ¸ö>ŠOĨF|]Ļ…fß6Đģˇcœį8Æ%^zuô̟Ø6F}¸t#*T ãųŸÎ–=O™ „Š… üHü…+yĄ‚HÖEcĩ†E?#?xŅ,qĒ"…UpŠ)\deŋÚ4ƒ–=đ:âĨ¤= Đ})zR/Ũ§Ĩ 4RwĸˆhéA ō:PQš3G Ļ’)۴߀HxĨ¤&€ĸ’—4™ ƒÅA+HíĪĩ"ģîä’3Æ{Ņ`š9Å’dlˇĐS$vĀĀ ķ@\–ŽÜÕ_2SŽqīéSmč3ÁÄIšĪšĪžÜV‡JĨ?3éB)+•čiĀƤĮ uæĒårä™`™žF TdũN+RIaI#Ã#(!Č"˛o-ã¸,›‚¨I2§UˇÔU›’ >ÚlŸĘHÕS2.p™ XĐÚ>_֔¯û­WûEĪüų?ũöŋãPĩíØb>ÆøÎ1ŊƑ%âsõĻHņĮ<Ÿ*(Ëx¨ũ˛îFÛö9qëšÆŖē{™­Ū#c WNíŒúȧĘĀ{_Û0ˇpüØ <ÁÎzU‘Ũ‰üëÍŧE¨hŪkOí(õķUÖ ›åā>yīĮĶĩJ>6xoûš‡ũų_ū*•íŖФY‚’Ä‘ŽyĒäžÕÄÉņŗÃFUaÔ2}a_ū*Ē˙ÂâđÉ<Ĩđ˙ļ#˙Ф¤&™Ū;Ŧi—`Ŗ 'i‚öØu¸‹ŠįēןŨüXđŊŨš‰ō ęŲōGđ°>žÕ|eāį;ÖŖÎĪųb:'ŨīųúĐØXõëgGŧ‰‘ƒ)ˆ äōÖ¨Ŧ# jbfdhYÁn§qđë[ŨēSc[ ‘E%Š ķKIK@ ĨÍ&x BҊJ) Z(RÍ79Í;Ĩ7<Ԍ‹4S|Īj)ˆÕ‹î wjlpSģVąØOqhĸŠ`ĶJiϤhC֒ŠLķHŠ3E0u¤aEŊhā^&ËxŖTápųüë, Tąēģ={ÂõÆŊsm§™"–vta"Œ‚sÜÖpđ/ˆËnm5ŗ˙]SükÄ̇¨į&ĸív{tĢSTŌrKCžPf#§zčŧøÃNPwˇ?đĨ—Á^$?wKoûúŸã[>đĻącâ +ĢģŠ8™‹šu8ųHė}éSÃÔS‹qvš5jĶtÚLę'ņ=ÅĻŊskw'$zúĢ~Fģƒ”ßz;B=ÂԘô˛0VԌîčŊyįõ?ĪĢ“‹áŋ‚îl–ęßHBŽ2Ŧdd~& ˙…ká2?äŋ÷õ˙Æģ”šŌ8ÄqÉ ĸŒ)MÍļ?×E˙} \ĀĶ8/øV^ëũ’?īėŸüU)øaáÔŪόҸŌ?JLŅž))€´fŅH¤4f‚hĨ¤Ŗ4w¤úPzҊCGáJi()(<ņšN”Pi?S@%4PAA q@u PEŅ@RP⒗ĩ&=čéEÆ€ (4PKMĨÍҚ(æ€ÔQڊ&Š^”™¤öĸ’ŠLaÍ!ŖŠëHj@ÆßEEš*Ŧ]Ü%2?ē)õqØOp ŅAĻÄ5Š™§š¸5#āŌQš(´”ShŖ””f“¨ĨĪĨö  ôĸ€}())M&hÍ&y ũqIšZZLŌĐړļhŖ4sEjJSIš(Ĩ¤Ĩ ĸŽ´PEh Š)rhgĐŌRņŠ ¤ĨŌĨ¤Ĩ¤Æ!¤õŖ=číR3˜Ü(¨ķEPŽö?¸)ũŠ‘ũÁOíZGbXRZCC†šiZÔŒa˜ô4N´´i(ژĸ“ņô Îi3“ōđ)㙞x•/į­'Œ į­ SÉ8 ..ßz1Į&”r)§\inç­āqNĀĮËH>” ąž8Ļž´ÜüŲëŽÆlg9¤ ūtĮ#c€sÅ €­GL҃Œņ֐ļG˜ Øր^ôŊŽi3Î1H“Œž´/°æ—#<Ԑ{P0Îy8Ŗ€3IŒŽhāĐN:PI$RŌ‚āôõ rHÍūF”8Ŗŋ4āzŅģ'‘ųQ‘ž4c'§å@\EbĪ֌į9ëC.QFõ w9Á ‚ŧP:hīí@ û {Ķđ)2 ô¤æ‰œg94øÁ\qÅ0åˆõÃmæ“cŊ9Î(Æ{PI%šÉÍ&ry4™āQ,n>_JR8ë@û¸8&p9 Ü)'N 0( s´‚ !āryĨ' `t¤ ã=č€h`‘ĮZB0ŧšR:Rz^qĀįېGÍ֜ īŌ“ž´ĀB@Î)Ũ:ôŖœtĻ ų˛yÅ œæšĖyԇå8Ü)€Ā0)>SÜRžÁ旎N9¤Į$ŌHĀãŪ¤Œši đO œĶHüjBxĀ=)‡ķĻc¯4ŌÜüŊĒCî:Ôl0Ũ1Å O¯Ö°8§:–Î{PTœĐlyĮëQG Ô§v0i§‘ĮTl0*FāĶIÍ0"'4‡8č)íÉĻąíHšŖ#1^sL8ÍBA¨ĘķV Gļ€!ÛNTÍ?m=V“'ĩ=R¤T§ėįĨfËDb.hĢ(ŖT$t cK‘ĶŊ/Ę}ŠÄ•Ôs†ŅŒŌ ¨č1NŨëøQÆE ’2i͚lîĨļ9 CAÃr)@ÉéMaĩˆœ“å@Œ/4Đ œuúS‰ĀĮSīHIĪĨæŽ9ĻņÜķHWŒZ\ 2{sG$gŋzÅ'šŲ‚(ÉÚr &03L‘3“AnāSļŊŠ Ũ†#´hƒŠ\sHGŅ÷Šé÷Šĸž¸'­&ņL)ĀÔ4Zd™ĸ™š*,]΄Š*=i„ õÍ;iĪSŸJQĶ‘[˜ā‘֝´)„e¸õ$6 #p:UkÛ¸ŦmüéËÜlRĮ'ØU~b úVfžAŗˆmãíīM-I“˛šëö`ā­Ā ų`ÜĶÆŋiũ˞OüņjÆžŨäüŽG~sNļ•ž/˜ąe8;ē×K ˇ8Ö&IØ×ūÜŗų.īÃ…(×lĀû—?ôÅĢ8ŒHĶT◱E}aö4Ρiˇ…¸ĪũpođĻ˙nZ˙\߇˙ Ī9ša=AÎiû‹ÛČŌŨĄ' q˙~ü)Fˇkƒ•¸˙ŋūšI1ôĨ#Å/b…íŲĨũˇf6Üq˙Lü)šhŽ÷åŋÂŗŊjVUãæü(ö(=ģėhnËĻۃĮüđođ¤՟@'ĪũpđŦŌÎ84€a†zŅėP{vibΞĪ˙~ü(:՘ūņí˙…gchæĀŊŠnËßÛv‡ œû˜ü)§Ä6*p|ā{~á˙¨œôíUîG C`n´§MF.ESĒå$ƒâ ?€­?ūŋøSˆ4õ˙–“~0?øV œąä|P@Á'iÎŧ§‹•ĪUáŖc}|A`ĘŦ\0Î|‡˙ qņŸŨæĮũpđŽj6P†.wÆ*A’ųę=),\–ā°Š­Î€x‹O rōäĶ˙ |zūžĀá§88$@ũ*įr*Üíœ=*å˛40|ã Įq†ģ0˛•mZĐãĸŌŅ;ŗ\ë–Gŧä×ģ˙…/ö՞F ˙÷á˙Âŗ3žØâŒāc<öŲėQÉíßcKûbȒģĻ˙ŋūĢŦ؁÷Ļ˙ŋū”r3ĮZpČũŠîŲö5?ļŦ‚Œŗ˙\ü)?ļėˆ ŗ˙\ü+&yŌÁs‚N$ūĖŗĄ1œ×#Qėž°j˙lY/G›žŪC˙…'öՎGÍ7ũøđŦđ§¨ÆE*8ÉÅ/bŠUßcGûjË?znŸķÁ˙ƒŦŲmûŌߗ˙ Ī H<Γ$¨#ųŅėP{vhfËn—ūü?øQũĩbĘę<‡˙ ĪëPÎęĘȝķCGąL^ŨŖ\ë–_ߛú`˙áHÚõ‚žY˙Ž/ū€ņ˓‚ādöëųÔđĮˇũceČ{Qėę?Ŧ>ÆÚë–8åå#ˇî_ü)ŅëÚ~ė›õÁ˙²A9ëžÔôëĪjNŠÖ$l˙néįøå?öÅ˙˜úå<™˙Žū˜0sŽô„u◰] úË4?ļėOņKœĪ˙ \ąÚōq×÷/ū›Œ0ëŌĒŪ3Į—•AëœįŸéT¨ų’ņ-t6Ρ`GߔŸúā˙áJ5Ë `ŧŸŒ/ū“ÅâVúŠxbr:Đč¤ ûGZ°$’Oûō˙áBë–wī%ãÖ˙âk/Ôt gŋzŸb?Ŧ>ÆŖk– gĖ~ŋķÅ˙‘ĩģŪIh_ü+0qœĶą•3OØų‡Öc@kļ$ũų@éĖ/ūã­Øô?ôÉ˙Âŗ@Ü3ĪZ=ŠŦ>ƑÖė0¤J˙÷åĪô§mXxĮūØŋøVfėņIœ’´{0x‡ØŌ:͇?ŧqúd˙üM/ö͉āK'ũųđŦŧƒœU{4‘å1i%E Š%âZÖÆáÖ´øúÎÃą?øRwO8ũëßĻ˙ į.$Ŧ…ļ‘ž=ęčČĀÉ8õĻč.ãX–úŋۚy'÷Ŧ1˙L›ü)\ąā‰›ūũˇøVf9$ąÉéF õĨėPū°ûMŦØ“3ß÷mūƒXĶøÄ͏xÛü+;9āSNėõĄŅAõ†h ^ĀņįoŨˇøR˙lØVéĪîÛü+7-‘ĪJBlŌö>aíßc@kZvq៯6˙ ąaŽ'8˙Žmūœr[­T¸y”Ÿ(šxÅ5BũDņ +ØÖ:Ũƒ7úüûlođŖûbÃyā}Uŋ°Ŗŧß1ÚqķdtúUžŊé: ġОu{¯÷É˙ kjö8Οų)˙ ĸKãŒIĮ^i{1ũaö/^Ëķ†?Ũ?áLūÕ˛'‰Á˙€šĨËsĪįL}ûOĖAöŖØ úÃė^m^Äu¸ėšĢe’>ĐŖđ?áXe`Fã€9u5b%“vōx#îĶö(!ž†ŠÕ,Č˙^?#QVÉå¸˙žMQ%›“Müi{$?lûÆŠfO¯ũōßáH5[2ÖūHßáT1ƒPÎŌMœrsÅ5Eë´j6ŠhIÄÏöM*j–cūZįū°Īģæ$zÕ´G<ŸZ%FŨAbcdjÖķԏø…;ûZČËoüt˙…d Ž ~U l{}){WÖcfFÖvÛ ˇĐŅYöd›”99ôV2Ļ“6§RęėīWŗŽiŦ ķɤRØÍ;Í ւÆ>rÍ(Ũōˇæ(cĀÁ 74|ŲĘÖnļqgFOžŸÎĩ@M™ÍdëY6‘íį÷éüęŖš3øY™ Y‘—*zŒT葙6‚v1Ž•;~.'nŋ2îüĢĩkîLsē.ū”¤įę(ŽMƒ§?Ĩ \ĐN}j…üWNëöv|‘Œ+ƒž§­8̰rą{vŪš§ŽzUko5`UŸīŒõ9や#$˜ėž âŗ5¨ŽVĐMj?zCpAÆ 8‘Z{—i`WŽ0JFU–7ŒōŦ6ˇĢÚŗ6nęč§ĻÅ< šŧÉ%w6âОũęu^°îcƒŲģ{Ö.“ĨKĨ-Ņ—hË'–w;‘Õ›ķãÖˇ$ÄnøŽ5Ŗv–Œ˜kķ$´-Â"ā|øČF ­<Ž;wÅfۆšpAˆî8îy­Æ{˜INTī#ÃÅB1¨ÔGŧ f“ ņBįiŽņĄųˆü:×IÍpęŨ(ß´öëëŠg™# ƛGĢ… Îį%›ßĨ=…{™î–ąNģĨ,ہE”XoA &ĸyŠ0Tų‰ė;}iC™xŒá{ˇ¨öĒw’Ob7Ä#ōˇÄ‚Xū´Ō𠨎g!ämĪú ˜į€^Ņî× ¨ųÎŅØUØŠMÃ•Č=úSa÷€5&Or=Ššã9¤08 i¤ÍƒGĀL‚@"ëF02iz'¯LSGŨ##¨Ā=i nĶŪMC“3ãøüéį2‰œķŌžŖn qÚ)7JRrN}i§Ûĩ&=+ÎqøS2väwëNËR@Æ3w;sÁīMgæœFOAÅÁÔÉ"–Ē4WžIäũiOĪ>H^M)É9Æ(7uĻąÅKŌŖ|*JD}OŊ#7jR{Ķƒ@x=ę$ųŪB:*Vá g 5 Ē ˙&˜žâ° ĐŊiXķH¸~)ĀSÍ:ŦŋÖņE%™Ä”W=MÎē_ ßíŨÍ)dž)œSNG$uôŦ΁A r1íMęÜjw8Î3GŪĪj/zÖ^ļĨŦĸņį'ķ­P„äņšË×lâČāLŸÎĒ?" 2˜‚IĮåM:ņJÃæãíIŠ5Üy¤q ’:Ÿ]ÃéRzc=*9F&G<ōÔĒ9ëĪJ¸‘ĶĘļėđ¨g`ŒäTvo,đož?-ŗ€ĩgoĘ3×4ƒŽįô°ē”îŌë͌ĀĪŽã úgṏ~cĪ5RūŪIŲDRíNp*–Ū&†Ü+6æųū´ŨšP–äÍɤ89ãôŖ¤#ŽMADS9‰ĒbBŒ~~Õ^˙LˇÔā_´ I@âHĪŨ?Zŗ4iqnŅ#=8ÅQĶ&Æwo‰ą†#Ĩ-Ũ‹„ĨtQŽūķFeƒP -Šá.č=ëaŠŨZnˇ™v7ŨqČ4ų#†h™$PčŨWŽk!´9ŦĨi4˧„Ÿųdü§Ō‹X蓧[W¤ŋ2uĩapą¸Vl–b2?ũfŸonė…l1āpŲĒZ{9ûNɓŒĸ†+VÚúŪņ7A2É߃ĪåYēPjĖSXZD1iōØJŲĀZcųˆČ#tĨąßSJđzš6ąˆ­—7Vã÷§ųŖvÕųÛ°?:…!c+y­ŧ0ČP:|÷VÖP—¸‘"ŗW´ĸĸŦ)Ôzn?l˛ƒ¸ė_E?.ԅw:“XįZšģãL˛2Ā–A…ŠĸOxÅõ;Į”uō“…úQ~Æë ŖüWo"K­~Ų_Ę´s0?v1ŸÖĩa,𤎛†J“Č>• Đ[ ŽŪ|ŊęfcØ{RÔΤĄ´Ū9Ā#  ښ§Čą…ĐqKČ?‡ZBÜrGįUĒ2˛(ßZ@î˛Ėņƙ$rÕĕ$ˆ†q´qŠvŨÕô<ŠČLSoAZ§&—ķ ļī§ZMã­HĮnīHūŨi ķĶ­;=(æāāg­4ÜRļTíėhęp;Tˆ 8Ļ(ŨœāS”|Ūô —ĒœŽ”× wâ‘ōÃ8 gqLČŨ’ P=Џî(G-ž” zĶz¨Å9A'šHdymllcÁô5cœsÖŖ‘ŠË؎}Ēįb AKHŧ3g {ÕX›–Qäãžîj?)äe3p!ƝarĮæcÁ'úSÔôįĨ 'Ô^BĮji Ø$gę3Í ŒœŠSŒįĩ+ƒEo2h¤ķg¸aéˇnYU‘SÎAÍC-ēM°œü¸úÔK>ɖŪÖŨ™°íĐ/zĢ&‰M­ËŒ3÷Oŧ͐dgž!ëÁâ¤ŊƅÉ<ņJŨ:ĐĖHíJFFqŠ'’x¤#8Í9ąŠaāwâ€Î@’j9ŗԍŨĪ÷h•Ęd.LŒ>P{{ĶaEŒ,z“ہ ‘Nô§ĒžĻō8Í!Œn´ōŌ‘Đ‘A<Ŗķ ƒŌOJv§š~īãڏaH ĀE(Ô¤dãԘžæģ‘æ 2īŒ€ėd}icVÆiÄārFxč*žWd8Ā9C@–äü•Ī­"ŒšIdHcË7' õ>”Ô”É ģ!ˆû§¨ hx “ĶŠNN8¤ƒÚŒąÔŦĮĩ7Š'Č43mŊ03ĩ&• .™ōķ’8ĪĐT,|­B)ĘíŽA†8$ŒûũkJōšļxI#v>ī^+$8{-Žra9 8$tÎ{÷ŠęR-\M1ķ>bĄGŨ^§y˙ ˇebTf,BōMQŪ%ˇIÅ>pŨI–ÎgÜŅČā$`įŋ^é\°›UœY×Ršt#8Ģˆ„#{Ö]ցg;™!V™Įæ*đ˜ļDHOšāQå3æ3˙ ņ]–9aVpøYŒn5}4í|j¯_žYļ×`ŧs 7؟û’ ô5p^[E+Ąmģ>÷ËũjĩčĶŽÔĮņĀũiÃ*9äŌžß=T“š^H#ģšxĪ~i’7b1Î(ƒđ9ī@ÜO=;QŒÆ—Ž´XcNĐ0zŌīT$`u¨¤—Ë8ęįĸŠĖO˜į8ė)č!yŽ>ėGŸBh’^$—‘ĪZ°søĶA4\,5$.WˇôĨPNqÅDębs"/īS6prqH„ƒŽiG'āR …Áõ āœ(¤1Ė=¸ÅE4M*mŲ =WŠ˙ ”ā{Ō;ô4ĶŽTŠæ!BÛŧŒäûՒNIã¨ō‘Tn§iņ1ÔĶ8Įâiŋ Z-D’;Ō`äsjrĘÅ0ėAĖ{Ič1įŽ0j9_ĘRO_Js°Ž=íŒbĸD,CČ>oOJÅEa’Įs‘ÉôúS‚įõ N)›ąÖÆą˛éCœEgPĖGĨ7‘ƒÖž yæšsh3Ī ¤p0SN⛃ÎiĨV2W†ā­§–€sŽM4ķƒĩ?SRm9 Š5´€@.͎ø§įŠ ÆŖŠĮ4{P!SLįŠv ŌAԁH)§˜'´ĪE-Ÿ3ûQ\ķz”—ēzųq€) Û×éK¸c¯4  Ô9#ß4ī”į“LRGɧF}č 3“Yšî Œ|˙ËdĮįZXÉ*{Vf¸1eãũrcõĒŽčÎ 2큜įéHĮÍ O™ŒŌcāƒ]Įœ=Î*';gŒö'iūŸ­J;FsM”G^äp}(E;œȋÁTąQßûúÕwÔŽ&…Ū%‰9Ā@Ä™>œÖĸ"‡ĀĪĩc¤)Ą4SĒŧsļĐÄŒō9ëŒÔ5grųŽ•Í[VfˇB]dãīŽüÔÃŋŋĨgi’Ĩ{Iex\‚?Ĩi¸áAâ¨BđzF9Å‚äãęj&¸ũX.Î8ņ W$oʨˆmm¤.o?V5`¤ŽzûWŅ;ū4ņ…"0ĖSz™’I,îXa<1äãéV4ûd[päĖʼnnüš{ZyJY]Žß\sKbpĘIĀc‚{÷ūĩÃJœã^R—S˛¤ã**1,‘Į¯œ.8Ī­( Ž€v¤#æ$WqČģ˙ŗ wv‘ŨËzúļĨY[H“oĘŧ}˙Ī˙ŧ@Í8œ“Į>ĸ›”ē Ev*ŊŧhŽč¤;œķíUVĩ’VTŦۆ_歙ˇČđ„,n,JĮíí^v6ŧá(Ę,ôpT)ÍJ.Ŗ¤Ã*ĘÍč;PČā†CĐüĀqÅg­ÜŠíSÅvČ Î Ž>øū´PĮ)ģOFN#8k‹Ŗ*9ÁŖ$v eȤ°QOqíSvč-Ž ¯#ž*ÔƒäĄ5eÎÅ%›åīTYŒŽ[}Ģ›US¤Îœ>z‹°…_į@áp>”9Œ^õķĢ]ôŗŗ#‘VNÃ#Ą=AúŌí;r$—=OÎjN6“šfãģâĒ3’ĸÉpŒ÷@ˇųV=i§8ëšvŌۏ Q‚¤ ''{–)h„ļvĩē6ëëW#žãv *x"Šĩ°)>u‘¤M™#Žq^… cŽ“Øķņ8;ûŅÜĶ …sšI†‘xb{Ւņn]˕ačpkRŪ@ņ)WÜÁ'¯å^ Dk}l4¨Úä ãŽ @ė[4HöÍöōÄ`pNqŽk Ā—'¸¤e${͇~õÎąÅ–ũ:ĐrÁôŽ2=ŠÁíHTŌ°Į†'å5RūšUų€9dÎ7J˛ ôČĮ¨Ļ“€I4Ͱ­}ĘVČļŽōMåB%ĀXTđ1ũjãmÚX° Ö –Ųn.VČ*6ãUHîŧû‘n aœ}=jŦ¤Eųw/)2¸‘†}ÁũjlƒĀëMúڑ~čö¨fŽ„ži{œĐsž˜ĻąäĶ€CÁëÅ4ãR  ¯Đx¤#JAÆhę÷ c;žxĻJDhHëĶņ4üö÷¨˛d˜ˇđ¨ũhą ˆ÷§g=(ÃzFáN;TŒbįqÍū´ŦáAéqAHŒŠŌ™&}ĒR3Ķ퍘ƒœE ¸Ã÷zbĢĖ…ä{g&§ßōķĪ5lĘĮ͊qGŋLŌ6J{}ÁÆ*> ]A'<-*ŠB1Ԑ &$úQԚĮhÉ<})˂š9ũ*b‹V?ëņE7MuûK.ãŸĐŅ\“—ŧwRIÄô€[Ž{RŽš4Ũ­‚}isŽŨkQ†M7wĐŌ€p~o÷O  ¤‘Yšų&ĘųlŋÖ´ÉP:VnšÍŒXōŨ?TV¨Î[3%†ķOJhL9$“šp#jîgœ&ŪJ$JøųIâ›æ Ø==¨° A˛ic'ų—ŪŠjņ!c0 ÉüĒKBŨ$‰w†”7$wŠfŽYã*ī°‚¯ˇ45qEŠksr¨îųą›š”É#‘0ŋŪođĒ–éaˇyci ųG$€~ĩ 2qĪNô ŒBŦšv/õ➘Ú@@Čę8.zQp8ÎԚŲ ņJIšpM ‘IˇŽ8ĩH#‚ <õ¤H,9ÁÅ!¨ŋĨ9‡œéLayÆj î G2ÄõįĩOž˚ĢyëƒČĮë˙ëŦĢÉÆ›qÜքę%-ŠÎƒvåm­Ž§#@įâ„9ôúRāŽßJųŲԔ•›>‚ã…j" VÉĐÜäŽGJ~ õĄA؃ųÔŪölŅé¨Åym‡™ÆČ"´’Q,I Ī?ĨTļĩŠXCą,JāŠéžõbŨ$ōd•äœ˙Ÿå^öœáˇŖ< ]HN~âą ĐbÄ;ü d €ëÁ –âU’}2qéūOčj6Æ9Č>ĸ¸1ę\÷[Ž^̓ĩBô`G ’ÄúŠČ4Đŋ?#ņ¯9ūĸ#8?ĨŒ.āGĻiÅH<H~`{zSŋÚ×PIVU;XcØ˙:Eܧnyūu ÃėÎ.WČŊŦ†eyī‘Ūž‹a'­„a¸ôäuÍ 9įjPwtīŪ€Ŗv +i¨ũHÉ8ĪúĶŧ˛~pėŒz•<šÎ:vĻ4Å8Č$œJ¨s6šw&ĸS…åІę70HĸæefFÕšUk›k›{Fšę[ˆŅTЖ÷íÎqĪĨ]f‰C %`{áwôĢŽo-"˛D2„ąų˜qųWĩ†ŒãņŗÆÅN›IĶ‘<‚æ%hT—Ā§ĐՃ_™Îæõ=Ōą-ūĶĻë+må4Ė΃­oĀįĨv#‰Ž¤apr $Ķšr}ixâ€yũ)€›‰SN8æ”Ą}šëNĪáHby`/ZO”sÅ8…Ŗ¸Ķŋ)9tæ“oÍĪ#ĩuįšP~\z āņĢ&āõ÷¨Ņļ8GčxCũ*MÜ â†Ee!†UēЉ}Į´“øb€yȨÆ7ōå=xGõö5`0íųScNãv‚Í ņΎŊ8’H`ŸÖĢË311!ÚŨ … æo1Ę)!Aų˜åMž60˛Ââ7ĮP:ûõéę‚4ōÕqíNėGSCzŠ×ÜΡߧ@ææV’IQdÕø&Ib‡r7 ŠG…$7Ž´ĄDh4WŒ mĻ…aØúR2ãŌ—y$ ŧĐįå'*JžšĨlm¤ôÁúĐŨz@ ”×8#žWŒŠi'4 ŠGŲ#Šā{“Im@ŊxäŌŦ› ü‰ĀúĶöä’Ĩ 8ƒÎ@¤įŌ“ t<ĩ 5—ČÎi;g÷‹ĸ6ĻIĄgŠBBšŨčx§fČWu¸œ ĶG<xgéPŨ[´ŪW ˜É8?•S m•BŦ¤[9įĩKвûazôqÚĄ„mŒÉnj­íÔÖĐFĄ|×qķ’;qũHŠōųUļ•:cĨ““€FsMå¤ŪŽ>R§'ŽzĐrĮdh\ú-&ŌՆĸr "u9Õ9ʐÛŊ1ŽiW¯LTŨ=PõDąÉäʒÜj—Ė‘—îąéM Í5WoV|žõĘįvąĨa{wāĪ_J*=<´€>î9W$éžmĪB”ãĘ´;āp=…7wÆ)Ē{b”6ON+ppzP āŽ:Ō)äJsģ' ‡Ô Vnĩ˙Hr?×!ĮįZ[˛0xŦyöØFpI§Ŋ\5iĪáfnq×ŽÔÆxŅr͌pOĨ@đŧ…¤ÆÕm§ôõ¤KS¸ŗŽįŠÉæģ둿Ũ’y¯)ÄqåGGođ¤0o#ĖrŨņœV‚i¤Ôâ•ÂÆeĖ1ß–-§;S|QüĒü8ōöƜuę;eä>u›.ÆJ’ģšöĩ^ĘBŅĮ#­€Œ¤coaÁĄvK—T"ģČŪ{âžÁāķéMĀÚ}˙:ãŠÂŽ}iFrGJ 4s´jC dc>ôîž})qĀæ“¯Aī@Į8 GaĮ4ĐÛHãķĨ' šVÜ:}ix€i‡…āöĨã¨ü)Øķ̓ëPĪJŸ.^yīSîų~‡ĨF3“ØZM&ŦƛZŖ<‡n0sŽ´7ĨMuĩ6ģnã§zˆ´įŪŧ ]eSM™ôjŪÖ õę86GAŒ`ĶTüØÆiĢ܊pÆ$W-•Î•Ļˆ–ÍļLŅÁĖ€ŽŊyëˈ㠁™”tŊjšbYYqšNyÍ+ĖK ņF„āo9ÅzØlRTš[Ôņą8VĒ]+ĸ§”'Ød1ūéįúÔĄ‹ .öū• ŧn—uˆí€Šc}üžF?*ÃęYuGNCu¤‡Ģ ņųQ -ČS6ũĶÆ}iæO—Ō¸CĐēL6uĮqëL<3N@ãpsFîŨzŅ×Pĩžĸ8,S‘ŽA¨mKFĪ Î§ØÕœõgŠĄp^LĒ>W]Ĩ€ÉR:~ĶŧŦDŽ^'ĮõĨf šZˊTˇ”+—À Ũ¸gÔ~UĄŨ¤ė)É8Ģ ŒĶØTŒv¨î#XdõP)­33”„wĮžąÎŅ’Ãī7SI{­IëŖØdq‰wãpUĮķâ¯Xö˛(}üÜ:œU7áᝁž}ŋCŠ|ŒK[ŪS`ŨÂŊ,<äŋxŪįˆĻŸîÖČ×VÉÎyõÆ3JTséMÕ‚°čÜķOv+Õ]Ī*Íh3ņÅ)lq“Ÿ\SInjķíŸZb Ų4ÚrQŧsL •Čõ  H NJa@9ŖrįĪZ¨zĐ쁜ҁž^´œėëB/ g€@$đz Qķ~ŠŦ4ĄˆÅ6HCĄ Ōy 9…öHK!û¯ĐÔĐwsÍ2VUk †ā/÷Н1?!Ō>ĒŪžÔØã(„uūņõ5 A­wbęO-×`˙ ĩT‘Ķڀ@qœį&›ŒƒŠ ;˛)2Ųõ cÉØËÍ 99¤ †āõĨŽ‚ ä>zR;d`zĶÎ;k*šk.F{ûPT¸Ŗw ¤ãđ °Ā¨&}‘œu<ëRģ„ŒČÄ$žÂĒE*Ü0™[(§ Į~˙áøPˆĄcĮqJÚ0x§c8¤ŨØsHc x¤Ú@æ”uīHNNi °Į0ÃØĪz­%ˆBÛīzÕâsƒU§¸†UwÃ?ŨÍ;ØVš^GšÖŨˌIÎ{REtÎv•įw8ÉãüôĢ[•Č}žb¸løÔ’ÜBáKZeЎžŸZĘ­iEZ1šP‚{˛“•#‘ƐG@?ĪéL–æjlō Ģ™´ 0…ø#zÕ5ˇ1LíÁ§ĩMē‰ķ+QrėĘĮNķĖÆ}*[{[ZPbÁf,ÜÔmŅ>w1Ī'õ 3H]ĸJu)'6(M§th4fæ9Xį ĖGĒhįĢ)8-ÔU:ėJ^-˛ü‡aĮJē𤑔ûšîĸŧØÖöqž‡lŠûeÍc4œPž)ĪŠSäúŪ‘#vVe…ëë]ęq”TÎ>F‹v™ũčĨ°ųnAäwĸŗžįe„îšČÅ< ĩ vÅæŌ4¸˜ WĶŊŸJAÎM7ēĐ!Äį§"ŗ5ĐÂĘ2üļJŌƒŽ+7]'ė1Žæuū´ãē& 2ŗķ­!ڗ=}é3‚+Đg˜ąÉ¤'9X„T>uČŒŠ“¯ ÷Ô˛O\‚9Į¤9 ōŽ}̝ŠÎÜYîŅÁĶäN[ŽIŽTß˙ysAÕ [Čō'1ļ\ŸÄúSwĮå<öÍR¸šXÜĮl‰%ԟ.Ņ‚ģ•,]XŊXVÁŌ–ŠX°×ŗHđŽXŦĐĒ:é‘WmŽ]ˇG#p2 +3O´kX€–EvÆ €9ĪZÂŪbR–8š×‰›­ĘŪ†U°ĐT›KSOž@â”wÎM40aģ<‡Ö™ĸeÜšÆqƒ^Ëĩô<‚;¨ŒŽ0įŋÍŌĢdqæ!\ô'‘Zđp>´Ée…ccũąÅaˆĄ ĢŪ7Ą^Tž…6m¤˙’)ÉĘfq…”'qÆŌ:T@áŊxxŠ“ĩĪsYWÖ–SØZG„`r 9Žåô4ĐŊ‰ãÎŦĩęo~¤Mlb›•Ž95ĄÃËČÆpŖŠ<ōjà  R™ SĮ"A'ú×BĒÜ9Æ3Ŗ5Pžėޘ^ŊũŠ0ØĀ fœĀíĮOZLqŒV }”lĩĐųēsŽĻÛ‡Ōƒķ7ĖsFÅį>Ô0I sN?pn´ŽqĀ•1ĨŲû´œôQũhĩõģ˛ĩ‘ŠėōÎr1Ęû­Pgû2+ XĀĮį ú×Hyß! ũG úT&$vks$mƒ3ČĪQøÖПCC[ġQĀų:z\–ëĪŊC‘Ęģ#aĮđú{b§*Ĩe+&Ņ´vĩÆm<‘’;ĶãK˜Į¸ÎÜcˇZŠk¤‰pKÔnjœQku—HDXŋĘq[áîæŽa]Ū›š´ (āūĩ.1Å1!CmQŽGLzT&&sE÷{Ž•NŧŠN#ņ dI"ē=Ŋ įę(’=įr˛c­6)ˆũÜĢĩ‡ä~” .ۓŧjLíÎy  ‚ éČįĻi pa€HĄÁÚ1ی`ri P2w`擕>´dūt™Ú}h ‘]Ɠۘ˜gyÆ;­QŗYķo‡ī98ã<Āū&´÷“3žáƒá!r™-— V-B6 $ũŲ' Ÿâ럧5hē‡#wÍ×ojĘûUĢIž5VRFGs‘íėMO6™w;›Ø †mäp=‡>ųúÖ3­-KŒ%'d\fgrˆŒė?…zÔ~h#Ԍäzb§ŗšû,f9­üĩ 0ãíįžIņVˆ˛ŊÉĀb Æ;ô5ÂķĻÕ´;>§x§s-‰æR§nėŸ…V¸ˇIKi#ō ^ē•.$C2ĸ d÷ąP`į y˙?ã]´ÜĒBōG$­ Y´ûļâyjv„S“Á<œœu§JōÛ ”î8l‚?Î*õ•´QÛŠ +eūl铟ĀÕģĪ9ÍŗH$*vôęzg?yüõŊ¯*ŲVĨėīmJÖ×Ņä÷+ŽjڔR{ƒP¤ +<ŽƒvJƒíš’(#‰v u¯ScŊ¸¤ŽV†Mę0Tļ(Ü%[õĮ>ČÔ´Ĩ &㊠ŋhČPŲßiĢPŨC+ŽA=ˆÅfáŲ€U$ž‚”Še2)B§85É[ JWîtBŧâYŊb×@QōûÔö›?žGZŽōX%‰Y\Œu$,Ęîå@î g9QåkbŽŖRũÍĄXo”Ž~`N C*Īx›pQ‚qE*|Ę*æÍĢčvŨœbČųŗžÔ`0ã1[ FÜpE&īQŠvA=ũ(8)€Ū7g°ŦÍtąFOü÷OįZ…ōÃŪ˛u܋(ÉĮúôĀüéĮtDßēĖÍŧ OlŌg IéڌŽƒŋ<×q拟›Ū‘ÔœRœg“IÔtī@1ëš-ž´ƒ­/ “Í0(ÜÛĖūcą: uąĻÚC,ĸ9p#\“‚zū x8Į“t$IĪâ+aá9ķŊ͖"¤aȞ‚O/’Ô žHÎ T¸—ĖeÚ59=sRLJį#–ū‚Ēų„JrDjÜ2¯é\u13•^HėuC GÚ4NXeyÉĮSHISͧqLŽD–B¨āŽŧđiėrÁüx¯&Ŧ:3×Ŗ8Ę)ÄÍ [R‘|×SšdaĮQČŠ4„ˆX)TaČr,rzÔWÛö7“vÖOĖ@÷Š4ŨĐJö3 ˌ¤ŸÖŽ_†qøũâîūGËéO*ßåīI´ Ō•FAč~ϰMŲ3ĄĢęF ívMÜđäU‹>[ÂY‹ŠÎOÕŽ8#9õ¤‘7mb9ÁÆ+ĢŠ•)ëĒ91XTV‚ÔŊ$ĸË7ëŪĒHâ}åāô¨ÎXüō;Ųąų͆ņ×>ž•ž+Κ`g†ÁFÜõaĩˆ˜° ŨŠøĀæąãiëK’G?yîNzļv¨¨ĢĨaWéԘT–ö4āpyĪą¤cÁÁįĐR*īKŌ ŒZ@Ëŋ‘ĶĻi€’0yü)āāŒôę)Úۇ‘Z'Ęēā“•+‚­[`į=ęŊÄ×ĖQ†9@˙8ĸŌāÍ,Wpāžŧ÷ĪĨS\˘„Ūː“Ķ VČÉ߅îOaM‘–?™‰Éč1֓cNš›î‘ŽŸ-õ-Ŋ}Ņ7´ã÷c ŸžÔäEˆaAįŠĪZzœqFܓCi 1Kp#pÜ2HāŌǐŋ×4)ääūzMŽ;_FG41ģdĸđ~ōđEDŅÜ*“Ģ)éŊrGåVˆ,zö¤JŒō)ŠvģÃ…æbÄäœāÔĄ{ōyõæ‰;tčiËĐqCzÜžTĩöāŗü¤c žjü,Í4˜,WœzÕEo•˛Āž*{Lƒø_ƒœ×Ŗ—ÔJ\Ŧķ3:z)$ŦX!ˇppiĀ‘Ãcu¤#œguĄąŽrkؙįĨ_LėV Š=jF@x¨<Ėŋâ}* 5ŧųūĐ۔ŒŒv˙ëcm+hfŽžĨĸÄwhā÷ɤüAü(y5€ŧuõĨã>Ԍ23G8Å0øzķQ3 ƒ‚?t?SIĖ¯å¯ üMũ)Û`;PNŦ~ˁ´sÜҜvĨÎĀ1œ?=…ČcIÁ'<p9=O'Ĩ#.x¤HČÉéL(Ŧ¸a‘ÛÚĨ%qŠŒį b°ÅķaÎ~túō)ÁèÚŲĸ”e[¯ZkDŦېėqÜt?Z•ÚH'ÆÎ09úT~kļa°öl|ĻĨ ã<Š\in"Ŗ‘°œuąÆņD×W-||˜#ËēAĪšö˙ëĶŽ-–ÄIsĶq1Uf`NqŪĸ†ŗK#-•ڏlT,ŌK6šY?ē9ú}+w„÷’û+¯s/Ŧ>[udaJ"FI,8éíIŋv~ĩ,‹"Čģ–H[ŠÕ]š’Iä“ɯBOázr´hBˆÃæ@ÕNIĄ7I`Jäž:Üūuhž™÷ĒbŲšä˛ą(_w–Ģ’xĢnĘâĩô-d)?ʙˇ“Ī>ĩWeāˇ|8ŪPs“ŒķøĶD÷‘Í ՆҏôÉ>ŸĨ%mŅVąz(ËÃpĢķŽ*‡zŽ×XDBļ~đę;‰Ū)#Œ.íĜœÖ1‹Œ›čʔ“ŠD‡$ü§t4ĄK6æb[Ą&ĸiļģ)J°ß4ä• ˛——ĩkdõądØÁÎ?J8aĶ‘Q›ˆÃæ/Í͚sIˇ?0Ō`ŽjX$ Ģoũá¨ĸ Ķ˜=ÖWû+†Ĩ9shĪB”—.¨īØcœŌāÅ€QÅã9Ģ(FãœPHô4€œ÷ Ōã9āķ@Åā Ę׆m"ã?ž_ëZ¸@@ÍfkØûcˇž•pø‘øYŽF SØŌƒœqëNOCHzã¨5Úy‚đyÁ#Ū‚GĐ;Ôlü¨ãˇZQ—\Mäö§÷‍n‰án‡°"Ļ'ˇzd‹ž2Ŋ )]§aĢ_]ŒÔ“tYžãĐĐņŖ•,¸+Č4’!†į,§kđp8$ЏÎ~˜æžn¤*FŖē>’œŠējĪŨWԞŦzšxô'ĩD×1FģdrŦzϟˇ‘ČĮˇ5œš›÷)ōZÔօ{ī";Gy÷2¯?/_ üę+HdšāÜäšŧč`€ĘF=ĒŲĢ‘ÔđĮŨ˛? Ž*Ŗ5b'ÚiÆÜuÍ!*‡g>ÕNŌi–á­n4€e˙õúՋŠbˇˆË)ĀsęIåjVfœÉn8žācņéJp@ ˙Ÿ­gÃd/Íx$,ėJĮŧ€ĢØ?Ī4ŋŲ6ža&ÚŨŪØūu\ąŲŗ>iĩĸ%›Qˇ…ön2HzGÜÕj cÍĩšąĐÆOōÍY‚ÚFØaXÁę@äÔŲÚp×sGĸĨēܤ—ŌHvÚÛI!Į%ÆĀŋ\ŌĒ e­įîüÜ~4ûÉ.!´žK`Za׎[¤JdšSSŨÉ!_ĩÜNJĒû}=\R°œ]ėŲ°nîŖ†îMįjH‡*[ļGQV— Ķ8ôĪ5SV˙sck)Î;‚=?´lŠ>zŠ–Ž´*ģ‹b“Œ`õ=([ąíK˜îzĶY”į >ĩ­‡Ųŋj‘U‚r`?ōОƒŪĻ>lüV?SÁj˜DŠĄBŒw˙ëĶŋ.ä4›š"ōėÛŲŋ×éOUõĪÔThRņ”`H9č~•& ÁĪ^Ô;ėTuVbœįíŠQĶņŖ8<z‚œˇ=šŠAB`}ęR0š'šGåˆRzĐû•æ(bO$qI´–<ûĐJŽ8āĄįŸaEí°úč ׯ4Ũā?cæ+SöSqŖ'^ęŨ§ˆÆ ęĢ ä` @Fîų­îŅ“W)C$vļÆFv–n€_AVōí“Ō™,0Ęę^ ĖŧĢœ¯/‚{‹‘ƒōă¯õÍ=ÉՏɘ’#SƒüGû´ŌD_+įféëéKlN$õoZ^Ĩ7}‡*„\ëJŊxŖ.:S†(§'ˇz g43ØãëM—‚3či w`E5ƒõŖ‘ØšnĀíëLW˜ķJ€N)IøÅ!Ā=;gšCģũ)Ž”pBœķHŧriˆR ŒAėj# Ä-€€ō KČÆÉ¤ë“œqÍƞΎ÷D‘ˆO\ÔĘ:(ė:úÔ{V|š@WP{Ryo-cũ“Č4Ũ‰WĩËpj)•@ék>î[č§I‚n‰„6Ṵ́H%…YŠį€{õĀĄÆĘāĻž„oQĮÂüĢŒãŽŸĪ­Y[_ܙggŠ02ǏĶ%HaÁ#ÉßašRûpĪS\õc)i?ČÖŒo}{đŒ~ėČŲÉ?p{՟ąÉ‘-āfŒ’9>ø˙ Ŧ^(ōˇHįžĪ‚? šÖÚ+‹5u ‚°2}8Ž\EGËŊ’üNŠ1×U{“ÜÛ\JbmŅۆņŸ\Õ&FŽB’¨W^NŪˇ ųsĪ>ĩŠ/Pe‰uÁ ôÅsāņ2rä{bhÅG™Ũ€o,HôZĩijÖÖĖō­ŲGnĩFp L­Ņ¸Ī§oëZ)3GĻĢ:ŗUxëéšëÆJJ*ĖįÃ%­ĖĐO–žã&œtāũiÁEčjnsØcÖēĄđ$`÷š’2{`g­Dņ¤Œ7ĮĘō RJʀsƒœŒœf’yüéÄŠ‹‘†$qS9ō´˜ãĢ‘yq“¸ĒõŨQ-ŧe¤œIëRēųĨ”ĻäQ“Î*KH­GČī"JĮ§%pŠ“v* =(ĶsšäŒ“OûKŊˇ1Ž;ÖēXâë$—1= T’?*SāŨúVÄFŖåFޜĄĢ/YXÛÅ(š. äŅNĶdrĖŦûąĐ+Šjp“W= m8čwĀÁ O¸ËsŠUSø•ÖEƖã4Ą¸Æi͌ôæ›ģühƒ¯JË×1×t5ĒG=G—Ž ØÅę&_ëU‰/…˜äįŽŸ…*įo?…;nO^he9Čč+ŋsĖŖŒˇzāŅ—9ⓜuĄ€dČéKŒœŽZFPØįš^ԀRÉ8¤#8ₙB*GeFöP=Í'n ĩĐdņ%ÄLŒxĮ\ôŦ°°9Ú8d8faÆŽMqÆV7äđHíUJ%¨ÃŠķą¸˜ĮŨŽŦôpxw/z[vå Á* ƒžsPŊЌ‰-äd+ŅOCV‹d{JpN3^3œž˛gĩƚžÅq%Éā‡ūÚRyŌĄËÛHulƒŠŗ…öüčoēxö]_aYô+ÍoÔjĮ;ĮÜtlë‚*°HōGæŪÉ,HÛÂ2ŒäzœsR¨ō`äšéũĶV?Ũ*ģ¸Ģ"yS͍å$Đ1ƒ¨ã$Sņ¸rŧYˇ}Y}.ÄR1) rsÎ}ięǧ"‘Ô‘ÉíOČzƒĮpxæ¨j÷7pXŗĀņEŠ2O!˙V uš=Ēū pyRĀŅLŠčãiĻ=éÆInM´˛0|/rķŲ´r´×ŗ$“H>EĪ!sÜã´Z&ͤAŊģŪD9Ú{ūęßoK-6(íĄU§ aGĸ¯¯ÆŦCuēCkÛĨ‰TģŸ|ķīĶ•lÛ~ņ›Šĩī¨č¯c¸@bbûŋ„G×ԜļäĘ$”†eč@­V›O æâĐųwÎIâOPÔņ¨2`]A4ũâ2Ÿ÷×˙Z“ī‚îūņ.HÍ!˜€8Ą~eÎėƒČ4y÷Ŧ-ĢFŠÛÃî KpąˇŪÆsëRSæãĩFcf nūß?áTļÔęĮ§|Žž´lÜpxϝ)’§pėxŠôëG ī}€āŒuÅ#œsIü} §Į"“i1ėÄØIëBį‘šįŽô‡paƒĮJžŒvčĀ’Ŧ 9Nô (Č×´Šû_? Om>Ċ1ĐãØR uīšG-žOŪāQĻėš[qqÉ^r§KíĒÂa€Æņƚ‹…> R2†CīŸå]T13¤ôØãÄáŖ[V"ĀonôĮ<ķéUėÎlŖČårŧúа9ž‚2ŧS>zQ哈¸H-äP­æą Ę ƒOōí՗ũ Ø`ûĖæšjNWŧQ´#T¤ÍKÅēˇ4ąąõSÅT珀ŨŽ™Æ M†Ų/%dkY-ü°!‡?ĨCq§D—†ÂĮN~ŧW-¯kvtÖģō.Øįí(Gz(˛#í(ü¨ŽšÉs ųO@S‚}č%€Āũ)xŠ1ÁÉÁĸƃK1íJzđx§0>n”Θū§hĪ<Öf飯#Ÿß/õ­LŒņÉŦŊx•´‡ĐÎŋÖĒ& 2ēļh9aBā9äSˆ=ģuŽũ0ŒôÆ(ۆ¨4ėĪ˜=sԐŋJ2ūt2;į­&CWœpyĻģ\Ũ˜ĨhæMŖŗ)ŨúT2Ę'˜/€8$ÔķĮŒģŸŪ#ŠPHŒ7#—ūī#ë\8ĨY§Ę´;pŠ2į`Ãcô2‡\0Îꐐzū)ĒÃ< đūh÷ĶMhC)˜˜ËĐûSÎCŪ’hÛpq÷—Ÿ¯ĩ<2˛ĢÁæ›ļáŗ†đ9Æ=hVĀÆ9"”ÍĀ4 ` įŠ^ŖˇFC"+ÆQ‡u=Ŋ*1öŋlpāŗ>Ģ'ƒ¸síIœŽœU)%}V„vō<ņŸ3å6iÄ´jr ¯¨Ôe ø$.=jk°!3îi´“%I%æ;ˌÁÆĮ^ŋįŠ„jVĖė™' uÉÅT†ŨYR9åŽ>zƒüÅL–$*ĒE (āËūÅW$z™ŪMjYŽî9[ČåŨô¤gTO›?­eŧl’ŨÖ…9`tīÚ¤ŠņQÛí9,Hųą¸sIRĒŌw'_Ū˛ČŨÜ˙›hzUuŧ…æ’%|˛N:Tä–_ë]Ŧä‹VĮ< P„¨$ūĒĶÅ ÉöĸÖ¤–ŠŌY‹ bû1œœc¯ãL´ŧ.¤Ë’‰Ņ‰ã¯O­]QUîŦÖíŗ”=ˆũj“MY’âītZĮ˜į<ĶTąÎzc¯Ĩ‰H‘” íJ;ŊEIJũJĻ|\2,LȧųáMY;HëÆ2­VģąŠå’’ž08ČĒP ëmš­Áųķžß†(Ž1õĻõút¨^ęģû6üLvĐ>Ŋ˙ ”ũ8¤Õp:Ž)›ŽüŠßw¨į‚Ėp4°ÉX€v\žjô|ĶíʈĄę9ųąôíU4øÚkôšHdōÎ@ Ŋ=ënâám­åžbJ É¯3‹•6ĄM˜\2—Ŋ!Á(Ō$ ĐRasīQÛ]Įy›ųNzãąĮcO#đ3í^,“nōÜôՖˆIYŌÚģ°2ûՄ-îĪŲFÂûw .}ë}IõÅ#@­đø™QŊŒëQMĖ)ĸ– $Ē<SsüĢ"ō&ĩqq đ§%8Ŋ믖ž'Æw˙Ua0Ęüܟēr=?Ĩ{\ĒŨHķ1xu ˆb™n"‹ƒˇ$Uû;kwˇILjŌwb2AôŦäĩŽf\åā?*zŗ#–ŽGFöéųVøšNŦmc<<ÔŧŽm4I ¨?AšĪŧ’;WQ}ŨH ĀŽj´¯<˜ķ'vƒåĨA*„„’ÃK/iŪŖšŅSžÂ°%ŨųŒŅmlœŽ Nē¤Ņmk‹sąGÎĘsLT€NĄĀ'ž†ē冤ôą‚­4÷$—VļhXF_ynR VvUc°,'?­X8ƝBņÆNZ58čiŌÕÔVâYMŪCî m•*1Sķ` æĄbIāũyĨGœ‘ÉéĩąüĒ6‹‘#¨Il˙:¨Räę)Ī› šäķíÍYĶ‘ZFcĖŧn'ŠĸˆĘ\nã"œé•'UFûŲ^´ĢŌs‡,JĨ8ÅŨ›ŒIāÁ9ŦvËįæāg#ŪŖß0#2œrWĨ.éDC˙Åráđ’ĨvÍ+WU-dkiÖí262z (°šš}ĸEĮš+’j§3šÛIÑŗ÷íK“ŗc=Í`šS¨#5ÜHŪØëŠ] gŒAĀ9g­;!”ņÍAãŠĖ×?ãŌž“¯õ­=ÜãŊeë„ũŠ>™ķ—qŨ5îŗ0ũs(ķÍī`6ķ]­žb ģy4p9¤äbŽŦ[§­!ÜBg„ÆY€nAĩGOÛĪpŨđƒųV§lŠ'éYڌ,Œ.P’Ü @Ģ‹ž†sMjPŲ 3ŸZNU’1*;iDŅ#nÉ#š›– ĪŌĻÎö*éĢ™˛ Hȸ'<MPKcŒjiŠ‹‡qé×ę>‘Į<×ÎbŖjŽĮĶaĻŨ(ļ)ų×§Jތ!b§î1üMÎ~÷zc e!‡Í- ­Ņ Ēqžųâ–A„A9¨Ŗ•˜278˙ëÔÁŽA_ČĐÕĩ–¸#›qŸĨ õŖ œŽÔŒ 7Ū¤î$‘Į/Ū O\÷üę$ˇ‰°ÜÄw‘‹cķĢ|¸ā`õÅE,‚ÜÕņŽ8ü*œŅyw"xã/"‚ĒĢĀĪŠ÷˙ëĶRžƒ§ˇmŒiômAonnm'ĩˆŨ ˛īRåF1ÁĪąaļąKl6b@š?Ŏõ$2‡VFtyüá:r•NĒ;õį7%gĐ^ÍEëš ‘ųą21 0Ā+ÉüŠHä•e1LW$RŖƒøzԎʤá†ãÔ3PÜŦ›’x”ˇ–2įųü(Wk]zžbÄŠčREEq‘ųTŲÛ+>ØU|Áĩđ0?*–HÖEÉVŽ9æžÃęA¤›‹˛ė‘‘*ĘB<ļûX¨bŲđ9Ģ0ŪË^b“Eœy‘)Ɵ]šįđĢ2ÛEpŸŧŒ Į<ŠĻt͸6ō#;Ĩ]ԕ™“„ĸíš4SG÷āÊ9!OJĩˇ<“ŸN*ĸéŅTČ1'?:§ņ¨Ŗšęġœ|ë|āČ:¯šū´šRÕ§%ē4FFyĻ†í‚ 4Ud67!ŗÆ=j/āšf#iÆXŒN•=‹įŒl—RãÜzИF ž´ĀIÎ1OÚ7nĪSĮŊļå­^ĸļr1Ķč)ŊpGn)øëžxééL/Á\tčjUŪÅģĩd†ą!ߨɎSXÕdŧ•V˙EGÚŨ~j߆ üE{ö[v)iĖŌŽūÂĸžŅŖ´›û>+yNé:ŽŠŧ’së[B+wš–"N•;­dˍæK„ÛØŖīv­)¤i^ŸheÎ ō;lÖiĶž\[Å3ĸũîˎÄÖΈÍ<âlƌǏĮ˜T-TŅķŗŒ¤›{šwúy˙ˆ†s.N ĢV×é6#a‰q‚Ŗ’j-JK¤P`û˜%ˆëЉa‹P…dĘČ1¸ˇ}}N’Zž~ĒZŠ=r?(Á'¯Ō¨ÃvcÅppęq;vĢû¸ã"ŗi›Ļ˜ĐA?ĨûQƒĐžhÛķuŠqŒsÅ7€p0hŸZ~ÜrĻqa…ĮŊ!=¸öŠŪŧb˜CnÁBëOķ=ģĨ|o đĀāÕQuu§ČEĘI*0ÆCg§ķé[ ې¨lÅ'°îAĘ\Ãæ¨`š!ˇ cTĢk%ĶF˜ ļH=vŽôF̉¸…v'cīë˙Ö­{y<åûICãnG!{W7:jŅGNŒj=Iø Ā U Jt K x‰Į͞0}ąŸÂ´Ũî)J+€+qœW…ĖīvzÖV˛9č­c¸•§˛ēt8ÂÆ[ ėr{ƒøšŗiyt'[{¸WĖ‘Üäē3Æ –MØ´¯c‘ēsĮB;}iÖpŨ#Ę÷,_wƊpÅi&š#•ܡ‚Ādv¤ žœRIuog–eSЌķT¤Õ#Éōãv?Ū‘:pĄRzÆ"hGv^ĀS“ųž•‡u—w"žCËô˙9§Ës"ļˍ= q–ũqQ k—mÂ) ÷æ8߅ĸčOšr8ņUhĄ˜§_zaB9§áˆÉv搐F3ø×ŦÕŅÁŗą^i#‡†nqœzōWkģw‘`@9> cŠŗ5ēJņ’[å<`ÔÚ@˛6Ô9\sū{V‹”‰^ãNĄų‰é´Ži忐f2ƒ§Ƥm@0)íÎ2q֕û™Žeŋ+ģk|¤1Ôv&Û˛Āî ¸}¸­SÁÉüЇŒQÎ>S0Ų\˛ƒįøëS,-ĄŒÉŊĪvĢgžj6\´œ›‰E,¤P?y€ ‘fär3Ō­ö§.FO4œ˜rĸ­DnÄļOLžĩ8Å Ęš$€>ŧŌŠČ¨Ŧī}‡k,Ô¤4SŦĪúJqEsÍjvS^éŨˇRriÃ;Aí@aˇsڗ<¤ÜnFpOä•č=)_’?Ĩ!_ALš 2:âą|H’}‚ŲYe^Č=kk\Ö?ˆØ˙fG˙]WúÔMĩĸã'fbAvūnˀ Ÿēę8üjŲëŒķY’1h‰*JžŸ^Õi%{xÂŪH į×Ļ *‘|ũlfdšå  íÍ8ŽxÎ=Ǐŧ›j:ƒîqš“͉¤Ø ŽHŨÍv)Eėîq8ĩēFƒCĸēq• ĶÁųˆ#ņ¤Ã*¯a3(ÜÛé÷ P6FąoÆ´Ø„ĢsŽÕKS€É ē;Ŧ‹ÆUrX~5œ­-ēīWƒ¸rj䓉ŧ]ˆaĩvÜĶŠ >č'¯ŊVQ‰ €PŋįŊkÆĀÆ*ĨÂ"f@U[ûĨ† Ž E Ķ´C]{KÔŲÉî?jVäœãÚĸûLfCų\ö#Î¤ķb¸>ökÁœ'=ČTUx˛7O˜ĒwĪûCŌ•\82‘õ§cs:ÔDdhØį ūJå]^蘝9ü1JÄnĀČ=Š(\ŗ7’ĪZˆŦ“79Hũ;°÷ĨËÜMĢYî+Hí.#ô,zņ§ŦJŠq–õcÖ¤~@úSrYÆN1MģęoV)FyĀ O,nĪjy㑁H~€:dRHĻîŨž?^ØÆ(K¸ščĀŽ3žĻ°ŗįHOi‹dO[võfk°°KXwÉ+rĮ ŸJē’‰Yŧˇ”āûëRŨøĪ5=ÕŌÛÚģ3&pvîčÍÚąlt)åģūÕÔį-tĮ;SîĒāĩkĖ›÷ŽY._tŋŠkåĒÆFŋ.ėtôâ´Ŗa"+FC!Î{zâŠ,/Ãėh؃†17Ũ>øīŠĖ˛…ŊŨ噸O+ĸpšenĮŊKWŊē”’IđN(‘ŽHĮĨdØ]Û¨0–)ƒŸŪ1Éãô­|ū#PũÛ3Dú \œäûbšÁsr1š7áĀíô¨n÷}–fBáI|EOmLëkoôfŸÎ’8™°B‚q§ŽÕ,ÖĶNPņĮŸ7dZĢ"]ũŗėz•-Ü˙{ T"úæēŊ*]ÔZÉ ¤ō4Ž8‘ŋŪô¨jÚÄëöžĘõ7č\ŗĩ‡KĩŽÆŅ~`0=ũIФŗ†[f‚AšHÉ>§Ô*’B†‘œdļzûj™ˆ#v1ØæŗmœNožOV`IeũŽ×ˇŗ7›Đ ;`ãwâOJ­wĻ6 `6¸†wdGnQAn1Ščä0ˆöĖÉą˜õ?~*4ûx'yŅ™&s#ą%˛sΎOĘŽ3kRĐÉPÛvČ70á˙úõM…­œÆá˗bpSÎĀéVnį{‹ų'ļŋẟO`ĻËuk$7(Î>ĶzíükÜĨ‹ũÕúž^# éÔålI–…`äGvü)ÖęąGå | ãuhŨŪYXÁ>@’CĖVČ ą'žĒŒ×#Ī3Ī[ät`F0)ŅÆ:ŽÍXŠ”͏˙¨č9ęj–vœÂ-e!Ss0+Ÿa\cķ`Epé¸[š@9cÆ~‚ˇöôíŦˆörė uĮĨ Ī “R%Ŋזdō0~fįō¨w Āã#‚¯éŒVîNN͙Lįë\¸ÔĨEÜß íṔã§uô€ėuÔ7Ę@۟^ÜWÍtší]-K*CČĮŧ“ƒœ~UB]F9U–ßvæÜT¨\÷æĢŨČn.œ|ŪR° ‡Ą=ę%,›!›<öܚõ°ø*|ŠĨSÎ̊›“Œ i&&HŖ\ ŒzûÕøl!‹,˙Ŋī0ūU%ŖÛÆęį 1ƒøÕŊrzÖŦ\œœbôō7ŖB)^KQĄBp*6b›˜qž?ĪJ—#œ‚3ÅdŪÛŪ]Ü1"D‡ä&N§ß…sËWĄĩYrFŅE'V‘đŌøÔæƒĀĮŌĩėŦü˜YdŽ=ėIb9ČôĒW–KnĻx‰ōĮßCØ{W­OeKąæO $šĘŨ˛z*‚ˆËwfĪ4éUĘ)Ŗ<ņŠVĄs„nN2;đõŽÅ5~^§5›WŲUFN3éHˆŗÎ‘– Ŋ[ü*ŨŒ;æyn Ā´Ë8,LĐģ`§ úW5LTTš/fo iL–M6 ė@uôēVdĘŅHŅ‘ķ)ĮÖ´ žGąģ}ŪzšĖvŪå˜üĖsYa^v›ē/ėųU†d‘īLlãĻi˙A“MnS×8Žķ•!‰ÍŧFT8RqģčiĮO¸ŽXšęTv˙Ž×‘Z\Âä؜Á#ņ[qO Ë"ķĐúũ+ĪÄ׊Mčô:čŌ„–ĻzŲŨČÛQˇąķ¨4ß-á&7ū3ëZ˛¸HØųЇĄbz~u“¸š$ąb\õŦđĩg6ŨŦНNI"ŋĩ¨?Z*m4)¸!‡8ĸ´ŠQŠXԌ)ܞŊ ņƒÁ¤ į8ëKČíZ CŒqž)Ã?xô¤oA֐drh(9ÉŦ?—ĻŖ•ÜPvúđk_%¸bąüLQtØÔ¸[„$cØĶŠm“6šNxÛJŲÂ2ĢŲî÷¨Đ2–“†ĘŽęˇįZ÷\dFOA¨$Žņäžúô8úÕÕÃ'ᡅSŒ×>¤Oõ*ː9æ˛āéÚš1Ş)F 2įÖ´ÎåĘļTū•Zö" >×čŊëɏĩŖ+l{2ö5cw¨Û֏S’ŪæFŨŸ´™Į­l}ēįĖĪŅs\Üą-ũŋ™ĮÚ"œsŠŋc1š/´:ā`zvüųŽŋí Æ)5ŠĀ˛øÎM§Ą°˛ WzļáČāū”“N!6?ŨīT i“Ø““ƒĐĐīõ=jŪfšvÔK,|ûčI-Û°)ŗh'īoį•BqŠĪžIĨd“$jÛ7XũĨ9cō۞ :ã­:Õaí^Įet)MŌ[ŒB•^įqNb7uœ*Ų.u~Ļ/ŨiŊ›ûŸ3C4uRŊyĪ_ÂĸĶõ<æÖ@DÉÁlũZĐŗgļI• •q‚žÄ}j ,!ûWÚ'–P0 įõ¨æ×•›ęâ[Æ ŠĨw#JâÍX1 vô_aÜÕÔ}ÃR¸Œ RÛ<¨WŲî۟–*PIģ2'ĸąhŽĀ1ĀcŌžĀŋ?8Ģœ`ãĻ*0 -Žj[oSEĒģ#Į’§Ë_—<ũ*Û×GKke2ŨKÄh;z}åŌÚD1ķČį ęÍZžЛMGÕ.đ÷Κ*O=9čjÕ–Ļ‘q§ûÖ_Ņtx´;6šožîLdæ$˙ǎĖđę"mK Ž1sÎ{19ü1øÖÕŦŸjatTŦxÄhÑõ,ņŦ‘āŽŸwÔsœ~+kJũÎ*˛u¤å#:6šKbörŦņĻ@Đ–xĮãéWâ™'ˆH„nFk ZļqÚũŽ?ôXX3€ØätÜ}3ūEKŖŪūíc¸“ĖÛļĀúޏĪQ[rŪ70Z;t­é÷3H—6ŽZhÛ;OĖqķę9#žj”ZĖē€m.7ĪŪÉĐF˜õ=XÖŪĨ|m-Ub_2âfŲ ÷›×đŦÆđŧZƒŋeäēi”ũãŸĐu§šu:)ĮŲ¯j͆…„b•8ę6ú}MfxƒNtTŒ3)ķÔ TV#Ķđ4ÆFãTkéVÉbÄíÂí,?ÃéLģģ€ŽYÔYéPȲ<ĶĸN~P§"Ž ÅĻļ8ĒōÎ÷Z—­Ŧl´˜<Ųŧ¤ ÷ōíū}¨š]?]ąšÚæ&{e!˜6T{{Іúh¯îžČŗ":2āîûĮ¸†*ŨŧöĶĖĢD~éčIúvĄr¸6Ū ”ã%´9íF+A_û)ŧË€„‚Į<ž{ŸéQÚøšæÆUļŧF3į õĮŽ? ėH‘#mŠ7␠ĀÍd˙Â?áĨŊ0Ë3íZÆĩ6­%Ą.”ĶŅęFšŊĖÃ͉Ëa¸0BŲC=ÄŗIO¸˙tm |šŽĐ^x{2ĮžhFæpšÁā@01Z֖qŪ[%íĖ͜!‰ųxė*ŠbiĶwQ"Ĩ“Vr*0s4qČęŧî ÅIp†9*ėķ9Lt?äVŌ„Bĸ…AŒÅcßJ^ņ“wȈâyūĸē(âåZǞ2ЇTŠęĖyMâ]ųŌ7™å‚FqøįŸj•/ō1ōséíõ⎰'8P9ôÆ*‘ŗKŪŅ7PŽũÅ{]O5Ļž…Â씀ąN‚vĩ–FoŖØÁį¯įY{nŦÉŪbN['=ļŖ ›CŽ9Áīî?ZÎĨ8Ųė\*8ģ—ŪææPC>Õ?ÃĮëšUšģTHūĐģc;~l}j1†c§9Ŗ Û¸}+†¤—/)ŗĢ6īq =NãëSŲŪ%´;%Žw(ŨŧķU˙ˆœLcˇkaN9ú­UjQŠFę8K˜ŨŽe’(äŒådu§2I5“Ĩ$(‹-žOĒü)ļG™‰" üÄ>vũx¯ x:‘“I¤14ÚÕęiîãĨ4œķž”¨ęņS• HAc¯JãŲØéŊõîQÕY˜s´u5…s=õˈXŲ°§>õģ† 2ÜûSHîNkĸeO^[™T§ĪesęŌqs…•¤ēæŦęĨŽDL¸fĪ~1šž}Ķú"`}O_éPjCĄęĄÆWÔöŽēxŠN¤yŽYĐP§+ °,Øčú ´G#ĩÚX$cœ3ä~BŦzúņôŦqnÕ¤Ņļ~éWPĒ]ČĄÎ˃´3YFFŠæ( ’>ķāĨn^ôÉ2<~5›v:ČĪå¨č@$tía$ũš}Ī/ŊöXHŧų„@žäŸAMŊCf¤ŗ9‰žá=G֒Ūfˆ,āä˙ŽâĩYbēˇÚ@dqĐ×.&ŦéÔæčoBœ-ÔåZt¸¸Cö}ÅI<ūq"Ķ€! ¤đį=>ĩiíŖĶäY"ˇ.UOŪ$w¨öŨ$ĖJۜ¸Û€AėkžŊuWX›QĻéߘ§|čEVūĪ_0Č$eÁĪoiÎ m^yÍ&“ŨĨ%ÔÄŋ´[KŖuP˛ āg˙ÕNĩ°!š(ĘŖ€ÍŽIôãÚļ8į’U ¸äU*8==cS NŖģFĐÄÔĻ­f÷‡nôĄžō{r@Ģōøܠ˙ZHĸX”Ē  õ÷Ž%–Fûčv<ÎRšÔĪi|šcf-°7,Ŗ4ũĘŌ<‹ŗķ ´Öpʆ\öCŽjŦ°;ČËÃwņ8_ĮŊQRöpØ6ĶÚŊČåĄ āž95 ŖČíėQōĻsøšœÛ´'Íqģ'īį?Ĩ Ļ@Z8Ũ”dWÃ֋túĒĩ ĩQč+azŒ2ū•2[3ÆÎ6~čĪæj&Ç 8ėŋáVl1äŋäŽŪ•ļ ‡ŧÕXcqá2ˇ–ŪT˛¤žc/ZĘĸ0ËŧÜŲH#+ŽHâĩ4BÅTžNZpZôŪ“Ųt1•Ŗ­Ę@˙gY•KäÃą&¤[ƒēfÜ:íéøRIsŖōß!ä¨"ĢÉŦbuH-ˏ;Y‹ÂĨĶÃĮqSiûą, T‰&!LRũ’^ĸE8éF…˙}ːėÜ`ōF7B­åHËõlČ˙Jã•|,ĨËĘwēˆĮ››UĐą–Sĩ׿éŒÕ[æxíÜÆq#|¨Aî}*vūko˛IēÜDų6ō6ãĀdÉĒŊÚͯ–ËÂp`y zq\øŒ4`ũĮĄĩ T§IV0Ŧpų¸pB“ƝZ 85VË-PM ŖĄäĄĢ;€ÁĪë\+ąŨ%d#) “Ķڜ8aڔÃۘ„ŠÁžÔēüĮ؏­&Ūr:Ō”ķßĸü'ųÕ'Ļ€›é°˜@{ Â}:/í[›ō›™XoŒ¨*ęÁįĶ“øÖęäŧãŽ+6éq~ČqąÕ7į¸É˙ q|ŽČÎĒ]LšĩëŠīá6!ZF) .^Rĩ‡^=kĻå9ĒŅéökxoÚ5¸#ũf9#ųsSŖäséU6Ĩ°á[V.ũŊTcÚĄģļK”ÁŪ6°e+ÔZ™'‘ĀĨ.xãÚŗNÚĸšODR˛iŖ’[YXˇ•‚ŦĮ’§§ę*iîŖ´ˇ2HpžžĻĒÍ"C¨ųŽÛQ`%Éī–ÎŽhÚ\š”ãUž‰Ė+˙đ×ũŖW>’eRŠKš{|?Ŗ<’ _Pž?ęc=#_ZčŖÅĶ‚y…O?xûÕ)n䚲¤Ž=~‡Ō­Åk2¨+vČũ‚€P{c¯ëQ-ugZΤôZ§X“lĪ/”Ę~ö~÷áŪĢŽ¯o2° )eęM¨âŦCkļF’R&”˙/O`;Sî΄‚ėxaÆ JqęKR(J—7¨cdXaŧb?LdVv̤$vžeē3ĄÜWĢqŒcØzZÚY f8¤fā0^ ôúÕK¯3Pi­ ‘ĸ‹d™zƒčžã?­_=‰J/s#MÔÎąĒE3ĸĮ°*Ĩz<‡ŒĻ1õÍtĮœcÕ}=?Ĩq3hfċyŽĨƒ'lW#[‘ĶpĮĘkj .ū 뚜ˇ,;‘°?9ØŪŗ—ȍÁžÕÚÁų‚)~Ķq>cüņ?ƝęBČÁíVå¤r6¯šük)Ĩ–my>ČŊˆDōĮ˜’?kĄ‚ÚeŲ ’z“EImcŽŠzØĄ6’eŽķOÃ8ΝĨEĻËŠG}­Ęf8Ŗ¤Ī Û=zV×ĖIt ŽAîG5 OcŖ—Ė@ÁF8␓ĮĻiNXã9ĨĮJ› sH0 cĻ)Xdu˜N8íE€_cČíX3![ŠG_Ū¯5ģœôŸáYZĩ´¸iá Tđû{cœ˙JėĀTPĢŠË‹ƒ”43dŊ‘ ‡Čg9ā(<朋‰Ø†G隹†ÛNq20–á7‹oaúÕ<L˛ãã9ãŌŊzUeVnû#͝%N*Û˛@CaHæĄ’ĘŪg,cĨHRX°d‰”0⁑OV ™ÁĮn+ĻSøY“‡ķ"œ‘Ŋĩ‚ĮnXüß1$/95ŊâĒys3ųƒœ7QĮCū{ŠŅ΂}Ē7Ž92]TįŽ•ĸ’羅ž„v÷0ÜîØ[å?w˙¯ZV6ļĶZ iO俍ĸ$hA *X.eĩ ˆ‹"XÛH'úW2œęS~ĪsŖ(Â^ų –Ņą"đzîŋ9maFmą( Ô†Ŗ‚ū)NŲĘ8ū#ÁüjČd'åuoĄČ¯ j´t•ĪRĘJé áT(^:SIËt4ū‡ĶđĻ“ĪŪ˙ëÖ*öÔŲy aīQõįđĒ÷×ŋc’1´7š*ƒÉ~0?ŸåQiÛ$ĖĒŽĒNŌ{ô˙?Z´Ž&Ņ, ōuď§OéPjJ Ēŗgp‘qõÎ*ėhĸ5Uįjōö¨nĄ´ėķíUˆ¨§QÉ”\`ĸĖ{ōMãäpcõĒ19ĪĄüĢSQLKŊ‰ŲŠÎa‚Ī­{X)^’<œL}öU˛}Ņl$–Õf9f„amÎvãúÕÂÖ}ĨL˙ž•wĖY0åO"ē*AMje 8ė_†ín7aÕZĻÚ7˛RVŠu‘GOŧ=EkFC*¸?)į>Õãb¨{'îėztjķ­@ĸî TęG5^ųŲ` 1‚Ø$ĶíîæI€B뚯|čė#GÉ$uŦŠR’¨“.ĨDāM‹‘íEjL끓֊ôk$äeAžSšÂ“×§Ž āœZLûcŪ‚7.1ĀĒ,zæ“1ß4ūŒÁ=k1’Gž•˛cœ!đęÃĨEį¤ĘC ŖŽ\˙õŽ xÕáV^÷)ėPŠM.HËĐ­Ļß-ĖB7#ĪP7mî}ĒܓGYÕ[Žâą'‰…Ķ-ģ Ãg !íŠĩe ܖūeÅ´qË.üī›đĮR“ƒM­Î¨URÛRiÍĩÕŦņR͞¯åúÖrÄâ(îá!Z0UČlsÆ[ß=? ŗ6ŸĀÍ3leāŦcjādãĻöImũĘĒÔg“ë]°Ŗ:ŅZlqJ´hÍߊNÆâ+Č6ēĢĖJƒØ~žõ!SfāŽMŗ@ŒyôöŦɡYŪ™a&7ca8<õĮn+jŪīΉ])pq‘‚+Žĩ7NV;éOÚFčH&†f$ÉĮĖ1ĪÖ¤žžãšŽkq$‰"ü’/*ęy}ĻÚO9d ÉB¸8öŦ¯mKŅjËXÜģą’(z:‰ŽíãáåU'žŖ?€īQ›Øų™ŖšD*įG“út-8Î3ĮZĄŠmōWįČ Aü˙@júmdX0=äU{¨üČʅË)ÜŖÔŽŋ§5Š.Í4‡Û1Fd9rš?ĶôÅHTŠČũ*É‘J'bƒžāzĻ)ÂâI†Ûtƒƒ#pŖč{Ņ=îĤšS,Ģny5Ú›Ų› É=BŅÜÂO?ĖĀÉV\ ¸˙ëĶ,á>%¸ íĶb#ĖqÖFūíNŠųSÕŨĢ!šEü$ˎ—‹bõž‡ķŽÕ˜ņm˅›"Ö}˜X¯î–Õ í‚8°~Pŧî?÷×ãZņÆąD¸ō[ÔûÕTvg#Ēę{Ģd,q$J>éšy‘ ŒŧŦĒĢķ37aL’Hâ„Ë#my$Õha’ųÄ×JVwGīčZąwd-4D˙Úžt´ē yS°sQËu{2ūîÛČQÉ7gØZJ1ÆŪ>=éĮūĩ/[je}‰îČkÖĀ|ˆ„€žũzÔąÄ,m™# uZ´~oŊ͎­<}lŒųQÅÍąYP?_ëZl$턆0ÎŨÅfér˙hęW—ˈĘ$Kšqģ$ƒÜsúUGcĸ”Ÿ6Äē´s‰íoāC+[1-ęĘÏzAâ=3'͕íÛū›ÆSõ”‡>i Ãû1OÎq€k3Q3ɤā俜į#Ļi¸ķրgƒžÆ œyĖ–āā_ØU‚ę‘îc€'°¨`RTĘĘCHsƒØv֚’Úz žÎŪč‘aŦ+PĮĻÆŒ¯+<˜9ãüĒöJįwzoÍUĩ˛‘.”$îĐŦzmãéY…ēÃ2ĘU@ū÷\ū•ĒF1““PŨ[}Ļ" ĀîR{Ē:‰‹MNęcí=1Čë@ĮqŠqŪĢđÆ‡‘_M)+ŖÃĩ´ôöĻeŠđŒĀœ+Č8ņNą€€{sŠąŠ Q™L ͕Úv•Į^ßxW6+*6˛7ĄETnåO6#÷ØÔ˙M²1ī`ū†Ļ‰ĩ :*XÄĄQT Ē1×=ú~´Ey§]a&‰`UĀÉĪĄëé\ŸÚ é$t<û,drÜ@ĖņģUÉlÖ´71\&čˆ=ö‘ČŦßŗ°O2ķã 2•á€=3UŒĄ$›••ƒdŠŖ4ęŌŖˆ‡4tb§RĨijkŨI ΊÄļđä“éÆk6K{9Ųcˇ“‰Y Q‚¤ äĸ´$‚;ûtgB*;ŽúÆ˛$Ņíqũžā¨€K/$đ:ŒvåÅYŲŗŊęŽX:]Ė ”œd/Ũ\¨b8úäžiÖ&ü´Âí1Ú#<{úTRZj‘o Ō4—æ ŧ¨9'ņ5Ģ’÷46ļ3ūĩÉ8üxŠļ•ëLä‚Egnå”ĖfH—ĸ|ĖjĄ'=E^Ô!ØŪ~8n*ŖĘį5īá9}Ÿēxø‹ûGr6@ÛrĮ¨ëTÅË('bĒ)ÁË`ūU{¯8ÉǎvŪr|€n÷ī]iĻ`öĐyäu#ƒWŦnE喧¯qX°ÎéˆæÂœācĨZØe€5Ž"‚ĢSJ5\5.Á3ųNę¤˙ Jš$’1ųŌvŽ)ņ.ųI8Ífĸ Ž^ŗ‘gJ?ésņĪJ+J(Ņ[r¨Ņ^kĢÎÛ=8RåV:…eãŊ8–=Iú œ(§ã@LúWuĖėB3´ņÍ)8= YUĮŊ!$‘EÔŦIīõŦŊŲ­ø˙–ëün¨ČZĘņ˛[ËĀ˙ĐZĒŪDN6‹1āķ֎ā yyãšBxéÖŊËmØĪ )Ŗ9ČāzSÁÆ:R<ʃ'§aŪ–āô#’0ņ:°;H᚝ ĸUÚŖøŊ*cēSķŠŲ{Ÿ­J(Įjwą;‘y>§Šîj¤€iĀ4|Æįkooģô­ävíHÁOUü ŠW6˛M(ueeĮFā~x¨%ŠkxW`Fį(āVļ1ĶĻ)[ ŽZÆtaSâW6YÁZ,ÆŪäÚĄ\ņÎsOd&x„nōpŨ­0‘Šc0:V|Å.ŧØ!ÄR2ü­œ3véÚšūŖÉJÖ:~ģ9C’Z—$&:ä‚{t§AÁÅč <Õ}:XĖmŗŸ,]•^œV†xāWeĩšÅ{hD‘Āüi '¯ĩL:F&`zŽ”õ ņ~8¨Ž IŖe G\UŧŸJ b€FqĶ h‚ũį÷ųÎj¸-ĖLv ’Ø­“ģĸĢ^ēÆ]‡ÍĪĘˎ>ĩjŦ­#j‰Po” K åī<€ģ‰˜üëE–9âÎŨĘyÁõĒĸúÖf˜¤JÕ¨.|Րž#D |ÜtĸŠŽTMIķžfRžÕĄ‡†WV#!Ī˙Z›BIex bŦŪĩÂÆĻ …[0#ߎÕã°ä‚üdûכ˜Æ0iÛsÕËĨ9§wĸ ۗpīŌ›ˇx*Āx Ԋ@cŸ^}éX€xüĢɋ=[[DWKxââ8ŅėKß)ô'Ū4ĐĨ'Y=ÁÅ[R§ØāŪO•ąŊPāū”Ib\cí3mô3WÁUĪš¤ˇ§^zSnú¤O%ėėa]XÃĨã\a`7ŖsŸ^ĩŦĨW ŖjŽ›xâĒߎ°äyN>¤â‰šk̤Ķ,sæˇß“F)ģ]6:TĶ“ļÄf9uËņahJÂ?×ÍØ ę“§Ú[¤QÚÁc͎­ZĶė-t}æÁ.ˇŨŧ:Ÿ­d•dvI žõĶnéÅSŋ´ûB‡BUû§ûŪÆģp˜ˇNIKc†öŠņÜÃgãéR[[Áv 3*0˜gjŸOķØS\[lčŅ‘žOΐHŽĀÅ! ŋuĮëՌ+Bɞm)ē3ԕl/­P‹{ƒ/9Úxāūĩ…ÂÅyjžc‰cųsČũ}{VŠjSĄh–AęœūŊ[Ž[{ØØ¯7+(ČįŊxu¨Uĸũäz”ę§Âõ0bĩļšŦ.§æ1‚pXāķĮ\gô­ÎGgę)‹ah—‰x…•r:sV›Šƒ›û'BŠ{•˜0ĖxĒÖŽ™/]Îyö ģ4‚4vČyö˙õÔp§— 'L(Wą-]ØH'ÜĶ –Æ*Ā ŒRpG'‘EĮĘU*ŲéM*ô$[XŗÎ{ã§Ōœą…_”mÉį=éÅ{Ũ(¸[¸6īõ (==)ppr>”Ķ‘÷jF(ĮJ(#ŠC“ØæŒ– zP¨ĀĪj¨ë´riģxëĀëF0R 8Ũ5™fË/ÚaBîOĖš8úâ´ų-ÁéHû‰H fMĖbæ?ĩ*ČG˜ģnIãžõzÎę;¤x*9\įØģ2‰–íƒ<Ÿjž X­L†4UŪŎ;“R—p'=ļŽyô¤ūķ֗œtǁ†y◃ƒÎ3ېŽũM(' œāsKŗ==i0IŠ'Õeu,ŒŽ?Ų9ĸĀ6Xūa$,€rOņJŠHãšEŪYJį€zqVwuāT2)ßæĄÃޤ˙֍ôÚØŦöo ē6į+rBxäTl ‘‘ÆIëWŅŖ¸‰”ŽPzЧ$aK"čĮœũ3\ú1œS›˛G~ŧĄ&’ģcOFãzĶ—š4ČĶĘ‚rzŌÛĮæMxn×´^‡ĐEÍÆŌŅ“üŠ×ŒĶX–'‘ŠcŠęsƒ@úôŦ;ÛT„y–.ģ‹özÔ'íLÃ8ŊIų‰ü8Ўāž3U/nŧ”DT2ÜJp‘œš¤AÉīĄSP’Y%ŠÖ&Y/n"Ē \ä“ī]Ž‹¤ÃĸÚ6é7JãtŌ‘Ôú}+'DЖÖųe¸2í´Ŧz+Âū5ĐĒũą˛r`ūûĮôŦjMlļ&ĨE Â'™–ĩ÷.BC㈚žÚei˜4’>öÚ0lĀQsng€Ą8#Xv ŒRÚJ÷ˆō HA ž„pE$ī;>bĮß^1ŒoJĄ ‰ŽldRņˇīcB26‘ȍ>BÔ%ą/ļtÁÜnę*žĢ9Ķöj2!’(—Ë`‡n*Ą.ƒ§$õCė4h´Ûöž9]ŽÅBrzcŸ ĩ•ŗ‘œž•^csŠ"ƒˇ(ŲúŠš4Ú8õëNMŊė) -'ZQ“Ū”‚Ŋ…HČŲGNi6¨$ãŒvõĨÎXæĄē™m,帓;#RįhÉĀíWtUä‘B}nŌ9üˆŌk™PáÖÜûžĒ]" aŗfvO4+ŒįŽG銋Eˇ–-=Œ‘˜Ä’ŧ‘ĻyŽFqÖŦ^jú’.WØŊũ˙ŠģôFĩ%.HĸëuÎ) ĀÆi§/NƐ)Î1“RÎq$‰dR /ˇįÛôŦ™ĄŌÖ&;Íšh1ķ)Ÿ¨ĻMnuMræŪâYŧ‹xĶbG!@Kœ‘ĪjÔĩ˛ˇą„CkÔw\œž¤žõģ´aËsœęs-‘ôo•XĢG•˙ž™ëõŦ} ŧ‰FÉ?C)ķn–á_™øü…8ʞQ˛•Žr>”–ČƌėNųæˇĩ+ĨĢīĸ,``žį€)6g‚Ã4ĖŒRvƒ×­MîUŦJŠcž¸úRH cŽri6œäã”õM ô¨%š8ž5–URįjîã'#üQR ä f˛īí.d§‡c‘E 9SœäÆz~BšzIÉČ€Ķ\sØú×1ģwlqw q‚~`Uļƒ†>‡kVÛYŗš*<ī-đČ6“øū Õ8=Âčš5ē\ÂđËķ# õĒĶi¨öą¤LâčOņ}jČÎâIɍ6YV"JˆXāzJ¨TŠîŗ:§%y#K;đ%OÔUí1TÉ;3ō¨oÃ8˙>ĩ^ūÛɘ:œ‰%}īúĶ4ËËx^á%”&9cÃ1ŌŊĒŗu°Ūg™I*uėö6Č!īīÚĄ“;9ė)QŌáAŠEuéō°4”†ÁÁį^ „“ÕēščĖMfŪëí>|6âW;Mģ•%¸üjÖ5–{xĮ<Ĩ:sĪ\ä~ĩļĘ^p¸˙V„ãžIŠ'*¨L‡ $“ĮhŸC=7š•ũŊ|RĄ,8Į@yëôĢņŪ[IJŗŠEPäƒĐ_JĄwŸx„đ$ØųdÜ?—Ō˛Ļą‹Čš WrŽ.ŨÎ0:v­éaĨRVąJę ÷:XĻŽâ1$NI<ôÁŠ\sÖ¸åk­- Ęûc3ã$üŲü?•tÚ}ÔZ–Ÿ ä ÍĢšK ¤ũGjšÔ%IߥTęÆĸ°ë‹ˆ­”X€ĮĢ^]ųQĄ…wŗįkv8Š5L–rn8ĮB{Ր,åhĖ˅ ą8éÎm‡ŖNq摅jĩ#+Dš.¨¨‘—y'cøETģxŪōB„ę=j´Ē‚%#xų¸Í*ĄØ0¸ĐWĨKNš'ëJjŌĀRnÍ.ŪÄSH!@UË´~5Đ؊Ô7€@Í9Į2Č:¯jdöķŲMn@Gˆ%¸úū˜+ų~bds×9ČĒûKÆFî6gG ‚D`:āôĸ˛tĮáJ öõĸ¸ž­ČėByÕŲčšSÅHšb¨#šv8âēÄ+p3K…'ޔ޴āj!ˇJČņ#ųv6ė2~2ëÁ­sƒĮqY:øcˇ÷¸Pī–Ē‡ÄˆŠđŗŸkQ?Í Øį‚:˙:+uŠFaČ56@8§:MzW<ŽUq…x…9G<‘ڍšīƒJy¤1¤äō? SĶĨ# RN(Ū@悤ō8ĨrH(ėyÕëŌ”õãŠvŅģ)ÆOZĀƊ1ĐŌ€AäĐzPXvh#Jp9 qÉĮ„ r)iĖš\į­F3õŸ8SGš÷§0ä‘IׯZĢw ē‡` m`ØnŒG­S˛¸n$Ú˛‘ĩļŒgįq׊­`6ŸZĢsf—C Ũōšę;ū5¤dļdJ=Q:¸‘AFܧĄŠw€qÉǐ-Ŋ“ųOpÍ!ĮßlíN€UĐ9ô>†ĨŽÃE+ŠÕŌUVŪĮ˛ä­E4ąÜˆäˆíČÉĪQZéÖĢÜÚ$ßŧ ‰@ëŽÕhšÁÅS’Œ”™Lƒ¸œ’ ?xí֚Q†ĀíŸzrįĻĨ|Õz3Ĩ+HúzáZŅbéĪĶUƒĀæ¤#fp2qš†ęx­`iä? ũOĨfôFé7đ‘ŪŨ%¤cĪŅUząô­/h˛DįSŋ\Ū8ʧhÖ°´KˆfÖûQO—¤ z!õ"짜NV8sķ3Žv/ÎĻrå\¨š•ĄéÁęPĶĐËhčŧ+}Ąûą x˙>ĩŦ8P¨ãONUˆŪEˇnÉČĮ^ ëZ.ÎîrÁ[Ôhû¤ūŸįëT¤I­įyí×rŋ2DN2ŧ=ë@)÷nT¸ãŌŽĩ՜ų¸ļŌ4Éo"ŽnLŸ3K€ûÛÔöcŠKâ翁oį#ÃæÎ™„ŸŧUētÉgĩO,vëux_w˜ōĒ* Ü_ä_ŧZ,ĨšÔmŽõXæŒB ÛćhVø9É•ĐŌčT+ķĢK~äĮQ‹MÕN‚Õ#BĢĩ#Lfî;`I5­Ôs]Mmķōã22ųõĒp_JöĪu}j q9v ÁčÜtīT ° ŊåöéŽ ĘCķg,:œŸaSĨޝgô×ķ:àg ž•GLÔõ™”ĸŠG)ÃîVĮu=Į?δ?įŊefˇ9åf5FIíÖĒęjJģ^3ä?oöM]ÎqŒŠĢ¨Úĩ۟=ē>Į‘pϘBĘiąēiΗhØë ~ĢęZTwí™"XČd˜€p§$¤ŌîžX^bÍl|ˇ@r:pGĩ^Jã>œĶmÅÜucī´Îí÷ÚHHįCpŒN>l°īw?•m[ÜAqx_i#ƒČ#­:x"¸‰ã‘FņŌŗáĶbŌĖ÷P+Č2V%äį¯ã“ũ ē–LlŅ ¯¤jÚJK[M„šP3ˇõæĩˇCĢB8#¸öŽoLÖeËŠå¤|ŠžÃ}{ÕÍh„—v‹.a‚U<ėaō­d›ŽģŖîNËfk—Ævãš7cŽŊjA ŒûŠŽ_ŨĄsü=?°ÜŲĢ÷rÁöĨ´YOŸ1Č:ūĩX[ŅåŖ`Č3†tũ:ÖLú}áWyQŽųw1‹–<`~C>æ¨Å(´hã˜Ë ,Bļō3ę8뎙¯FZuJZžsÄN›mĮC­mĀž:ryĨ+ÍsIō1x'šf Iģ!~šŠRîö›|ūoŠØ üŠŧļ§Ų’cY„zŖĄRFxRœņéÅ`ũĒiyRí…•7ĖtۛˇŨš¤ōĘ–Õ”ąņ{#Ą;šā{Ō8ūĸŗl5$wû4Ō†œFŊėx­B‹Á¸ĒŌ•)rŗ˛SŌ!dY7ĢÆĨX`ä‡9ŠĒ5¤ã| §å+Ķņ­\=čÚ!EB“čSKŠĘ_hh ö•ēÖ<^Cōã>ôŠ"]ūü•s Ũ…'n ?Î´î ‹ZI"fȒĨvķ&8?…>m&ÛhŖ„¯Bŧ zW~Ŋ:ZIUéNŽąza1 `bqMc– ŽābŦ=ĩÄ'Ûũäų…@ĪĖ?­{TęS’÷2TæŸŧ†•Æe[ÕNéHĄTæ2ČIäŠÁ5&8ėj9dŽË2‚<šŽHnÉNk`Šęč4Ĩnš$qĮĨ#š$y˛<™č7g?€¤‰ P"ž3›ëRZŧpŪn¯PĞ?XՄa%ŗHJS|­č5mŽėĪMØ*ØNÜŧ‹ücR]^IU-÷…áXŋZ¯5ÍÍĶTpåclįęk‰VÄKtéPĄĩd7V÷¸•Ãgi=r=E-Ŋ÷ŲmÄ^L‚K0#üúR\C$ d0—k6æ;ēö ã9 žsŒúĢxEV¤”ŨĖ\)Ū(Ԗ{;ģ`ĻPUē‚pZ‚[Ë8`đę>RĒ7fŠ:)8eŖ5 )`D}Â`Y˙gÆ?kC_­Éôšq€¸āÃŌ›$ ¤ōjE!úfĢ\Köxd%w+āÜsÚģ6އ/RCŧüĄIc÷qTážāČ­<¨0y ķSGvĨQ˛aaČ˙ÖŠ~ØéÛ.cS’Ę~ŧW=~y/pڊŠ~ņKhį2ÛėB3•'æü=j VÔ°š# ^ĀĮ‘Ÿs[V×V—čUv—U†3ôŠŲ Š"ĖQyl ōyęS–¨ôya8čeé{EĀ@#Ž(ŠmZ o„ļĖ6į+Ԋô9ų•Ė!#ŅTķÉëN^™ŗæĐԄŠŗaÜÍ)\ô¤\R–Š6öīXŪ ėÖā— F­ŲV?ˆ—6ÖĮ$¤/O÷ZĒ"§ÂˌäqúŌŽZhČÉÁ9 :~učžHĢ×$ŅÆ~Ļ—^ŋ•g“Hų=:Rc=hÉ í@lįŊzjpŠf‚äŠw%˛;Ķ;`ô9 [4¤c­!Î)šÎi3‘Ķšĩ*Ž~”Ūs@Čë@-N$ô¨ŽŨŊŠ Ō”Žãžip0<ĐņĶ֓ž(<žôĨŗøq@ x4 GįJŧ6xÅ&A$ ­sdŗļõr’§qÁúKIf§Ėšy –ĘŦxÎ>•JúÁ.‘™Dãî?qVôdĩmQn)E⿟’OĩcY^,)k-õcõ­‚@wëJQh!.b bŪr īĮŪöĒj,ČeäƒÔVļŨĮņJūŲeƒ~–3”cÚšņŖZ HęÃVt*'ģHBÆŌˇÜU$œņ\…ö¤ˇWqÉ6á?$`g>æē’VKim\ûH ô9ôŽYĸ(~Ë0Ûq(ÜúWÎÅrŨIVuĘ WønÆ2Ė8Ļ*MĻβÆIūø'ī æŧˍ:CŊCĢú7_đõ­H%(t%îxÍa8Øđ5RģŨzę?j•ä´$š¸Ūc’vŽŌē;8æ†Ņá÷Ęyb{Ú¸ī X4—ķ]I‚Ēr˜öŽäôÉã<âŽĢ$bˇ;pŧŌnr<šÉÔG™BIcwĖvyč}˙× qĐÖVˇjŗCžSHŅ6@Rzw854­ÍŠŊkōčB_d Āŗg›üë^hVxÚ7`ŸCÆéX~fß.樍Bw(ÎBž0Q`Fā+fÚé.Såm˛)Ã#pTũ)Nņ‘5Z• ¸–ōŨoT´åĸa÷ãīcûßĘĒGq&œ“OĒ<˛5ԅcĩTŨ´.z{c“Z—ŲHŌå0 ƒčx?Ļi/,­¯ãXįˆRJäëČ ô4ÛLëŖVŪėļ(jUĶ­ÚĘDX•wÅüŠÄũÖã°5¯F xâŪĪąBīn§¯ãT–Îæ;ĩu¸ōl`dp pÆ>on‚ŸĨjĐj–áâ8p ēžŪƒ=3ŒR“š­K¸$ļEđĮ:zĶsšIŨĐūŊ; 8Pã8¨Lį2´ĩ/Ējnøyʸí´(ÚSZ€qXŠpâfÁÜyF;“ˇ ō9õäū•ˇ“°c­TÍĢĢI>čnHéNÆG4„dSģ})#g_ip]’åvˡj°=9ĪNkœÔ|;¯ŲõibķžĘQ+"’@:íÖģ6āÔ7P-ÕŦļîHIŠĮ\đ­iÔq~ĻU)Š"Du–%t# 8ĀÆj)?}rˆ1˛<3zØV5ާ=m>ōimŖų$Cūĩ3€Tz˙…_‚úŅ#îcV<ŋ˜vũ ĸtÜ[ęDj)¯C@ƒĪo§ZįOļģSæĮš‚íWÆĨŠâ)”¤ņųV@ŧ’ ÚQ•üˆĒpž‡8íߥ­Y'¸Õæ‘X.v€˜Æj9ŖKˆŠJ Ļ0=žžõôl<éŲÉęx•ę)|+B&Hn#-!*H`ÕŨ0B“…*)˛ČfGc y BÎ@-œUfēKqÚ#v‘šb?ƒ9č{tޜEmĖ(ÕönōG^ ŒIˆ#HeņĪøSūĶ 8A,eĪEÜ2kœ‚úKĢ]†áŠ0ÆÖÁb>ŊiÖ6Nu(žŨ‚y`îĘäÆŧiåŌ„[¨ö=Xc5Qώ:6äķĶÖą5ģø-ŖyŽDmnÁJDÄ3šįļ:k]¤™)„ȸÆä=ũqéY:–•kĢO$Â9#,ĖŦ8bWŠķéZúžŒ9%$§ˇRõŒÖŽ Ŋŗ Æ™yČŨČ$ûÕŧesŽŊbxbĘ[:HŽMŲoŪ€z_ÃUŊOQ’Éíâ‚:Y‰ örI84§y¤jéÅĪ–‘|pGZŒÁLQ“ŽĨEEev/Ŧ ģE*˛ `§ĩYãāT§%ŗ2”.í%Ē)žfßōÁA#ĩC5”Ûų ūô…9äžGsė hŸ§N*ŗļn”0Š[ß'ņĢUjw1•*}Œ›wAåĖŽˆ[ Ūžƒ4É Ģ FP€í õ9ã­ljĐIqhC&6 TœdVFáņ• Xw<Š÷px—RoSÉÄŅösŅhjGĨĢ ÷@–'„W­¸†5^9=sR >R†lsHĒGНĩz’mIžĨ:P‚ŅĪw‘sƒÁAŦ6  7+`Ÿzē"1Í4įŋÖ´ÃâeBö؊ØxÕ9ĮÎH*C‚QQąäsZ×ļM3™c#ĖãëYN6Jö…{1P¨—sĖĢBTØ`ķßŪ ¸…g‡Ë9=GjČŋŪ'?ŨæÃ Įßi­g8­ŲšRčŒÕŌ‘_—8\cJ’-:3ZyÛD™ ‘œŸOjš¸1Ā9>ƒ­@ōnUČŠzwŦĻĶ‹q4RÕ&FŪ?x]4rg?.x'ĐúUU˛¸Ę=Ķ0<×IŖ8SÄ­Āfīøv¤ž‡*%,~Q÷kˍjŠvŦw:q”oM•tíĸTQĐŒQSiđŗKænųGlQ]SĢė*TĨĘwÄzO )ʏéNBGРǤĩųšœëžiĪŋրGjČņ Å­¨˙§…ūMZāĮņ ÚØųøú UCâDTøY #§JwUĀĻę,t×ĸyÎ1ÆisŒ´Œ1ĪzMÜvĄ xĪ\Ss€OJMØ=zŌę4Xc‹‚ŖŠ7cĩ7?/Ĩ&H äŽH§nĀĪJ~zĐIČ=x  ĪZ@@< Ō+më‚)››q#H ū.ÔgŒŠh`#˙×K“šsúP˙ į­ ?JVäļ( Æũ(Î1“NÛĪžôĄTz uⓅäžŊ¨HI2\“œņĶōĨEom՜ 7ņ [c|&QNûˆFy=)’"°ų”gCNAJ[$ôĀŽĩ빛4Ëo"G›qb~nč{âŸsģ‰bē´KĨqãō ”¯ûũIA8XsĶ$ņųUŋųi“üĒܝŒŠŪ-¸˛,1°ˇB ¸ĀĮˇjĨbڅåŠ-˜ Ü%°éõ5¤Ė­ōõĻzTKo–eģŠÆjSFĒrRžäžĒ ==ķX“ŪŨGŽA ēFé31|ļbŒ~&ĩfŠ&+6ė|ؐvzbǤAŪYmIWĘ+žŊ{UGEqFĸSŧŅ=Қ+ghd”sĩ‰úã5Ījđ€nîĘGUŠbIãú×Bnb2‹ËÆ ‘ŸĨsž—ÍũŊŦЂէY6ŗgpŊš­v`%Iķ•éûI%{.§Ce+Kcž2GôŠFwc#šĪŅtįŌôxŦäe܅‰ÁČbp=ŠÚĩä–ZkÜEĪ–ËŧÉ*XúfšjYÍØë§  ]ĪcÔRqÍbiēÔ÷—fÕíB:ŗ3œũÄĀ*~§5˛HÉīė*\ZŅ•R›„šXÆãŽ9¨Ũ×k ËčzUkMRÖúG† e°TÃÔU˛žųįhŗŽÄN-|H‰R8ūâĒē1Aäõ4,ˆĖBČŦGP¤K÷ŗČⓓ{˛yRčAqk *ä„pEC…ŦHUbw&­7Ę@Č$öόzķG´¨•Ž/g¨Ë“L”>ØŪ#tÉ9ë˙2b‰X҉ĘĩpqŒūĩZî$š ¸SÛkHb%9.}LåAF/”¯§6Ų vÆsE6Â6†õâ đ2 īEoQ§+¤n •ÎüŽ)B‘Í!z͞@虊8ÉīīGĶĨ(äķøSzP cøˆkkųøú VÎFܚÆņ Ö×ķōŋú UÃâDTøYŽŲČ=Šģž:T˜įpy × %sŠa\õāTž§œgŽ”§>í)^¸§Ž[Š;°1@ 9ã"ƒœĶ‰Ŗ9>ôŒ‚\{S†Aäæģh#֕HÉ<Đ1¸ ŒúSyČΤ-īIŧs‘@üÅŊĒE“íMw|SË Ŗĩ4sė{Ō|ÁŗÉģ†īÃdŽƒ"€đ8&Ë xĨô d7×­G‚HÁ╁ëÁ§1‘Į4 gœĐ}3“JGL \œ`‘AÆāz}hŖ%A#’y§‘× LØ&•€1ŒØĒāyō)9ōW×ŊÆf1Ģ~ė}â;ũ*ĀaŒmĩPˇ!¸Ėˆ ę~éĢ4n‘¸ÉĪŊkîÃGãYÅ6M*š8ŨĀöö¯/1§îФz™UWŧĮxFsmĒÃ2 {‚6}+;WđíÆ’Í=¨yl%q–éę+[Á­ˇûR~[Øã¯é]Ae0=ëĔÚgĩ‹ŒeRŌÔÂĐtģ8"Žō „ĨĶīg€Oõ­ÍĨ˛¤pG Ö-Ū™qa9ŊŌcrs-ŗp’Ģē~ąo¨nAē+ˆ˙Ö@ã‡úz—kŖb’÷vsaekˇ-žĒK:1vÆĨSĩÖ­õ[:J$‚YäHāđ韭jjPjv2YÜo0Ė0Â9 ņõãÚš8<249´ødi­$Ėŋ3œ‡PN<ßņWMA-w0•Ķō;%Šî5–ŪE’&k)ČëÚ§ņŽ•ĮÃq/‡ĻWío$j1ĮĻ=ņŽ?ÕŌŲjP_Ģ<•ČÁüŠJ6ÛbĶė\üÍÖĄ/f˛ĢāÂáˇtr??Ō´w(æšÄI•* ‘†¸ôŦīaÉ)+7^t—IL'BE‰ m9ëמ;æē!€ ļGŠ=sīéXëļ× NŅŠc~Ą‡e>ū†Ž=å¤×îŧ§đ­\Ԓš•8É6ĮûPvĩÄ`ŽŧôŦũS‹­6vÃDˇ1ׁûÖÂFąĮåĒ(Lch‰qūŨŗˇwÛlOöŪ0ũIĸčuáīĪŠ°‘Œp)Į!r)ģ—ĻO$fœzÎæVÔfŌqĪ>´€mįŠzÃ=ŋj7ōí֟0Ŧ4‚T`Ô!|˰|¸šcę}?•K,ŪZ3ã‘ōęOJX"1ĮŽŦycęi§mIjîČČÔ?Ņ5̰2fŨlčF~\z­^ŗÔ­uËo/˜ÉÃ"¨jĪŋV´Œc÷0ÍpAčH]Ŗ˙BŠ4ˆĩi|Ãåŋ €JātÍtĘ)ĶMœņ“U\VÆšC=OįQØ‚ķŠCäĮđĨÜšÎyŽ[3­ØŒ/Ūe9-ۜ3厠ãÍ(e,xíš7'oΓo¨$–Â8Ã/ ôĻb6ˇ< {6īęiTƒØPƒÔiG#Ži6H={T†Læ“p9 r8Í3n3´‚ 5°‘ģ0;@ĪšvzŽztĨÎ2?:/Žĸô3´šŌMp%ã<˛ôËõĢ 9ąnm§´¸žx Ēgx*ĀĄ.‘ŠŊÂH“˛‡!™€-íÅuÔÃŪ<đg4+(˒F NrF>ĩB-An/e…] pî:÷­%pPãv­cę֑Fĸę1„ä Ԓ:{Öt"¤ųdiY¸Žh—ŽÁōŒcĢŊ}qš‘”œ‚b*ĨĩßÛd‹xãÉeč?^bŖŒķ“YԄĄ.VT$Ļš‘ ÅyÁ+>˙J[„&""”pĮ­i6õ¤-‚qD'(ę‡:q’ŗ)›MąˆãšU#AĪķĪ׎⍪`2õĢEÔPiĄúúbšlRÖö*áÖrÉl€eà ūX¤ķ2Y^ UGv\‚?:ŗŊBœzSw(<*šģƒģwžĻ.Ÿaa§HŌC# ŽÁšB퐭7’PCĄŒîã5$‡9ĪCØķQ8‰Ô#*0ˆ¤Ũõ*RœäîcéēTÖz„ķJŅ”qĀO˜į?§Ōĩ šc‚G=ņMž;mŠÎ-åHĐÆĘŧ¸8ūŠo™Ũ„ęJLĖ–Ę_íøŽ|š [%[€ßJÖUé8ÄŌ.=9üé nHa3ĶTJI–æåkĸ^ũj–Ŗiöˆr ųĢ÷HŠÚ9ˇŗ;ŖšGG™ Ÿ*ķˇeL=×tLõVdZe ‡÷ĸVpˌ7&Š’Æ)"ŒaķÛJāŅ[ķ7­ÉŠQVąÛā(āƒ'­) Ž+Ų9‡ÜĶN2Iâ—¯'›ķ×4` ÄņÅŊŠ˙§…˙ĐZļķ“ÍdxŒŗÚ×Ā˙ĐZĒ"§ÂĖvāõĻÎqúŌį gŋzH˙ ôQäˆPIƒŽ”d⿃&:E¸Ē¤žô89ȤWžŧŠ]àb¨ĮԆΠĻŦƒ8Á4oŨģÛĨ n ‘ÁíKŗ$cJq} qLߜ‹ˇ¨=s@RzŌ‡'ĩ Z ĀņŠÉ9ävŖwÍČâĀôë@ xP¤Û“’($€OJ7ã&€ ¸Ī&•{ķši|Æ ĨÜ@᝭ ^āņ@ÎŌ8§d`ãšją¸ @q“N*OA‘M$õ4ģøäP€9įÚŖ—2?–‡ø›˛ŠlŌ”ų—n€ö÷§ÆĢ€}sÜĶDî*"ƸQ•)ę¤åŽ9¤ß’sÔĐ8n´\ Úw§—z˛<ŗÛ*Ÿ~Oõ­V8Î:öĒ$ĮsĮņŒū]kdėvåöúÄnci:ĨūC™žw%Ļ‘ßīéZ—^/’îÜ[iöŌ­ãņ&õĮ–>ĩĀ9ų~šÎįOIBČ7đŦz“ŠņœĄÎ•Ú>ŠXĒnŖŒã¯BŦqkĪæCĒČōĸO™IüjõŒ’k—rÚ^ĩÕ ]ņ\ÃԏëL`›Ęárq×đ§x^ÜÜë—7#mT@ŠO99$ÖrƒäįeÆēĒ䚎)ĢoĒKg"YëFũ#š÷rzdö<ÕΞ›ø%y™C"/8UägņõŖRH. Ž  ŧŦ|ŌG8`Øhi’É5—›s¤FJ­Žīrz˜SR‹gŸ9FrIhû…Ū(B_Ųæ 6—BOŋĩRģŌ.,§kģ X˙,ãÉf=‡Ķü hEwkŦiŗ}š@ÁŠ8ÁúįĨZ´¸k›U}ģXŦčĀāí‘Y&āėÆÕ´+éW­¨Zų†6B7ü@íO[Ÿ"îFdUûĒÁr¸ė[-´´c“Úœd<ũoëEÄ㠒ÃÄ-€2° ō=>ĩŒ˛aā˜––‚ŧ;]=Áŗˆqō ¸ô#‚)ģ„zÆdČIĄIõRz˙ßU›Vz&\G?ũjĪÕmęŌd$Ņ~ö7?ÂÃú•ĸ.23Ō˜ĀēR`@'ąĒNÆ´åi"­Āģą‚č)dbMŖč+Ķ^‘į–+˜pgûĢ‚Šš#ƒ×8íSØ\Ë€māˆŊÕ¨ōŒcŽsÁúcšÍĆD‡Uĩ‚>r6ˇ8ëę8ÜU§mĖņP¨Ņ$ڎŖĄ=Ôuŗ"ŽÜgË䃚sœôíŪ´m5ËkŒ4›ánwRä<~ŗ.4ëËcƟ)™D›ŋvpJúõô¨Ú8¯ôšī.aKyclŠ>fŨ¤§ Ī­hŌjčÉHévų÷ wc9ėXôĢJ\qœV‡­gĩ2Ÿ=Øå”!áōxĪ÷p>ĩšŊxއâ˛wæ˛.-%vsúž^gcĩ‹`O%Āô­!'ky^7ŪIß 7āzVL×o=ķŒ †ō`f8 €œķÕēqØWQlžE˛Fr̆Ž{×Um ĸrŅ÷ĻäKåāžôĸ,r4Ī4ÔāûLW&ļ;4ąēJ#'’zq@|Ķ™˜یgš–ŪÃŌÃv]„•9Å ÛŗČÎ;Ō+°û˟zz Ķ ĄNã“I´ƒā}E*Ʌäaēõ¤/Ī@yĸėZFIé×­5ĸ$›˙3œc­$Ŗš 4TOõŦRÉĘxPy˛Hąä `˙õëYäcŒƒ­Užß-”Ûŗã(3ƒ3ĮŊ]9ĘC:”ã5Ē'†āˇHŖÎÔīYúÍšk@á 0l‚Hā˙ŸÆŦG‘ŒĘĄŊƒSÉ:*ŗ NsÛâæ§Ė…% C–晞ËSxĨ%’Uų]ēü p}ų­â™ĀČĀ9Ŧ™4Ų.š9Z\D˖Āį$į?­Nˇ/níËåHų&#čĮÖļÄITjw׊–.šå{ö¸÷Ēiv’\yXa¸Žy8ŠĐíÎįųPŦɨŪÜHĄ`X”n~V”ļĻŗnú ã’1íMōČĪøTōHH70ūī÷ąō3īUĩ›Ëˆ-Z}âāeFė č}ģSŒv@ęE+—e!ģ0 ×'ĩF¤Id!”ōî=kK‹éÉI°Tãƒ‚ÃĄā\UËkKtŌ$bCģņ#úUΟ*Õ™Âŗ“ŅnÆĄS摸UķīT.¤ŋļdŨȤđIúf¯E0K•ŪĖ2îXÎĨ-–î>•š‹Úår9-ėÎvęâ{Õ04G*r6)$z™u)–-$ šëî lĒN ûT+ I1™cĪņzVī­Ęd¨M;ķņ.ĸ„Ü‚Ŧ “å9ÅN—ÆH×ȂI$ÆJā¨_ÆŽ==č^sĮõÉRĒžčŪœve1s=ĀTŽ&‰˙åŖēpŸOZ‘-æyŸ8t^ƒnãVũ3FGjÉČŲCģ08ڊI(­ŠëŊĩ)@Á9¤āŽ8Å;oÍ{gwâšI?J\~y¤Î  l+Ä_-ĩŠĪüŧũĢcš=ĢÄCũ͌æāč U‰SáfI^ؤb•ķØ ]Ā•čŖČœ7CH ô÷§OZFĪjô¤äúQ’įéJIĪÄ&;‘íNTĪJ@N) ļA ƒH:įĶ­&1Æ0 )mƘ]ąžÔ ~îÜt4„häņ“š3ŽqūĀpOz<žsúĐŨX‘í@l/F¤žF?­/QœsMV#'­)~õ ž^ũiFr2wbš ˙õĶÁ bįƒAãhČČ9į4ė$Ž”cĻj7qūķvZ$F nԑ,dp7ööú Šą˛îf9fęixœ õč)ĮžJË玖ĨģCæV ;gcrϤîE¸/mîeu‰Ëm–ÆÉ `÷éVvÜvīXͧŸt^Đų7ČĀ›ŋ•_´žY‚ÆÃd„ŒÁÆGķĨuąM;\ĩPŨÆÅC"npÃúÔšî*ĩäæ4–ĪLŌ¨—#æØtųš“‰L^4`Ąˇär÷§0Ydi‘~RpŖŽāTbuĩa‚—Ā)ü'4ëą l4a€21žŋÎŧÅNĸÕKÛNTĒĢé¸ÔqįínUēŧ ˙\Ôū+Ä×ļ뒒Ä$Æ:I)Sq„*€ĢLTz‚ĮÅNŗ–ņũí\X›F^ÍtǴMŌ”žōÔŅÔdģš˜ÃōŽ@‹Ôûô­ëHDąĮ‚FzU…#‘äE*Īį֝š¸äÆĻ#š VąÅJ‹„ÜÛģfmîŠ%š7–R[ā8‘9 ūđéU4Í]ŦޤĶõxÅ´ŌHĪõrgŽns[üķÍVž°ļÔ­ĩÔ~ddũúՂwŅnWÜēHÎzŒžŖŊ"€3†Īš†ŌīôŒ§¸Ô,”ķJVHĮąŨôĢÚnĄ,Ņ7Ų%K˜ĶūYĘÅeOcšZÕ$ÍĐCŠMYP:Đ°?7ãŌ’ãũ'Rļ0ŪQ2š†0ãũ*r­,W@01Ÿ&XûŠbũqSi„ô;GåĮįRõ2OĄ`ŒŽŧúúĐsz{•c‘Įõ¤ČĮ^Čū´Ų¯‘—O‰ĨhĮØy„w%ŽßŌĢjÚŽ›$WōōĘ>NAú՝(™5JãĻf ņ€?ŠĨÔ´[{ĢgōcT™ŽíØęsTŪĄŒMÚËĄáDlĨÎ:Äzūš-Ŧ7ŗ:NNĮ'ĩ'~…$j\Í—•ČĪ/Ū'ĐVvŸaqûŨÍ#•xĀŧ›ļōZŽ×QŒũ™oÔ¤ĀÉĀ“’=Ål•ÁsëFâh~BŒķŽ”uZn20éǧ=ņLCø~ž´Š2H4˜8¤ųƒpp(ÜííJ01H6 Í!,§ĩ1Ž´ŒBFĖO’})¸Î{}j ž{Ģu‰N@ū÷Ŋ4‰cãÜK&qü#úԟtûQÛŋZRŧž;PƐ1ãŠC‚¸lcJvĐ:ž”˜ ‚zR›wÁ"ÍkÜNČĮķíúUuk[īŸ;.Æ‚J庁ķÚļˆį9æŗ¯ėvŌÛ˛Ã –ÆxīúQa§Đmž¤Eדs…;p§œąrO­I¨Lî° Tm8ČĒiwĖd]!'‡Ą'ß5"ÄûgÚ œF02øVUŦāųļ5Ŗ'‰Ą$…ŖšF*<ÜįÔgĶōÅ)‰Ö#awäžËŠŠaˇiQH} 9Éc’p{T7-ž2p‘ŽGˇŌ¸dŨ8§/ĸ;bŊŦœdôD—Zƒ]Į%œ0i#>c;á•ĮlwŦ¸¯¤_Ų%âü‘ŋšÅ8 :Á+jˆ†9rĖ_Ŗ ūUĩ”Wū(ˇļ™r‘Ûŗ^œ~ž•ÍŠåŒõŪڞ†]ySm=ÛÁâ°ė4{ģ Iš9‡ŲäÁbzävĮåÍoaBäsŒ×”ŌOAŨŊƌņĪZp`I♌ãŒSö€AäúĐîojĖŋŅĄŧ›Ī…¤ĩģNVhēū#ĄZžáP+1 ¤ã'ŒeÔÆ$C+<ŽēfŽkjTfârچĨya2Ã{38 \A÷$_VÂAĒևTÔŦíĻÛöo$n1#†ųw–Ũ‘Õztį&ģ{%$3<’ãÍf íƒĐJšđõî›y%ƃâ¸äŪኲ| O^8އøčzg<ÖdÖiŠßČŗĸíØ(Af$’z㞔BiKRf›ZnĘZ-Ũގ{$ŋhķc˛sã ;ã¸÷ޘ|Ɇ?r˛$šuØQ•tmĘHëĶŋĄéZs\‹û‚ÖeûTŧLJ†Ũų[bc)I4´f8y$œ^č×l9ĻíĪq\ĚÕũŧč’DV$r0Æā9'Ÿę*ô>$ĶæSķ•l¨dn î8įˇ_įX¨>†ęhŲÁ =éLnÔ)s ĈÛÎæęz`SNŌy$qčjYCŠŦ ĩÜΐB€ŸSüÅLN0{žõŠũĀ gx/Ÿ\ō?LSč'Ģ,‘˜ÔnI8å=épF}ņÅ#<ŽƒÖÆ•'zPP}h\ž Ž)ŧúĶBr}ņM““ÁĨAāĶ ÷īM2úA‚Į49ė;S īŠvÁô¨Î6•l{JŲíÆiœbŒûí9+ÛÄ Cštaū5•{-Š:Įu‘†|ĸGČzr5ģ=äp.îlüĒŊIúU/ėīļ\ũĻåLdˆÕš?Zé…iĨĢĐįtŖ'dg2°™!ķa,r3æŊĒũ„jҞĖ-ZmŠČĄ>Õ šDīQ­ČUBs€FyÍV˙„z_5įĸ.l2 aĻũų4ā¯t¨ęüŠ ÆF4VE…¤ņĖŽ ō€ęwc?…ŧhF*ĘAŌ–­ŒsģŠwJL(ÁÅzf"ô941÷4Ŗī|ŨŠ™É @ ÁükĀzš†ŪĨĩ\$aû¸Ãd ūĻ­8”ã>´đqÉûÔ ÉÕthīRG22m šŸáĪ| ž=ëJ1ƈ횕B–?ÄG§=}és€RzšH.)8ô€€y4ķp?•"ã sš`+cvGz äR•äc֔æ€ū×=ûZVR3Pģąo.,îîŪÔŌ&āÃÍb€üƒīûû ›fŌ@ĮˇĨ5@U OcäLiwoJyëĪJN´ž´Ō2Iũ(gPA ĐŌx怊oŧqëKŒŠ<擖œ{P4FbæČ7§ûœūuŸ$ÛäyüЏUĮLV‹|¤ąė3YđÃæJ åŠŪį}+›Í(¨GŠĶ…qNR—AZYŲaT`HÉ!sœœâŧŽęd]‘€J…=ûAģs#ŒĒåXŽ#ƒŠXŪw‰âŪL€-ĮŽ˙gËI´äöØröĒîÖîE6áuą1…ÚŖ< u4hˇŒnū=p§=9ũzŒF]Ošw’0:˙õĒo ˛¯‰5'úŨŠSũŅ^f2jrnĮš—S”(IߥŲ6҆ƒŪšHRéJWqÁ፠ÎG˙Ēŧ¸“æ&xī“Ō›-Ėvđ——8 É>ƒŪžA-ŒõFå ×ĐÛî"4kŒg$}ßëT)h6;y/ĨK‹íĨpvCˇ!sëžõf X&ßJŦ9’ĐvŠļŲī“œTŠ˜äœĐ T€ā˙:Ģws$R¤JŠ—sK#aTg§šĢ qĪOz†ęî`0Č~VúÆĒžŖ¨›Ž‡<đZyĸԎkRģaœ.IR=88öŠūÁŠécū%ķģnöˇ ʏö[üjžtËŗæ.s˜,ĘyíÜU­&úXî_N¸ÖDc0ã'oŋÖĶM;­ŒhWå÷%ŠZÖM"ûRĖmk{$Á"…9Į\cĩkŒM9|ņÛ׊īúqPjÖ6ē„\Ņ+18ē>Į¨õŦČŖÕ4|Ek*j0§&`&ãß­+s­ šbÛQ/ĘžW‰a1<ø8îvAũM;Uqpc°ÜeRŌ1•A鞇=+-oíŪ#dˇ‹Ë˜AåĸŨ|‡ŽXã×ĩZû¯wsq5üpĒF@€Br&EƒĶæÅ_#†Ŧ1RģQFô(!†8pJ¯ˇ9÷Š•”‚@äV>u~ĶĨ´đ* 6Xņ´ ãĶ$¯Z\Įpģ”[%Cu*üzÖWwd-4-š-“׃ŪĢŨZ‹¨Ô!Û$grdeyã‘Üc5.Ōqš§ĒÃ{%˛ĮfÅ›æ|ũÕ${“Ō—*lrÚÅ &í­.EŒŠÉ „ˆÕŋ囎J}1’+yOģ3ĪŠäî.ĄĄKĨ P˛m ā#A?Κ˙Ú&ÖEĶeŊ/€6¤é*ŽpÉâ´åR՘Fr†–ĐéšâŌâCjå]‡dj’%†*€*ŒüŖˇsú׊k‰ $Œ§,ŦÅāž‡×/Zû\ĒŦÄI€g§Oq“õ­§× Öīk< Š,Ę;į#ņ˙ëĶfēŠ8ã3Ģ ü•ÆqėkŪÂáåė9ŖË­^*§<Ōŧi"ęOb+:m M¸f—ėâ9K‰ Äœ‚OãËŌĸĶõ…LmæHĢŅĶ“ôÅkŠ;blôĖ„>ŊMyRÁ׌ų"EbŠ8'#7PŅ>É Oosĩ—înāŽÜ{ã#ņĢĢ]2,AĘc Üw?ūdžk†ž}ķ.õ |Į…?ÃęjUąē0ŗ$AeđĮč;ū•ßO Jõˇ8jb'Qūëb´ēÄē…åo•SĪā+ZĪRF Ëŗj°éô#ĩeA¤Üûs$Jˆ_{nbår+n}1.ŽBûŧ÷ąYW–üĨáã^ÜĖššTžsLfHįō§:ū:ûR×'¯”ÄsŠ‹*zæ‰ŸĘ‰˜įģ‰ü晊4lL sÜ}E5ÄŨˆn¯­Ŧøv%ˆČP9Ē-ŠM-Ę­ēG;P$uÍU%Ļ>t€by Ījˇ§ÂŽLĒęÄ/ˇũzõ>ŌZŗÎöŌĢS’%˜m d<´‡Ģŋ‚i\9Ļí}âkĘg Ŧļ7~´g#&Ŋ (Æ*Z)1F1KۚiÃ5“F‰Ž^ĸŠrõĸē)i]ÖĮ^ž1J8äŌōsÍ '=3^ŲĘ&â3ĮZŲĨ$SrJ)äõéXž ˙{0Oį˙djŲ$kÄdy6cūž3˙Ž5\>$EO…™C–ĪI jC‚ŧãđ¯AŖČ€=1M R˛äuĻ㞴ãÛđsژ õĨIĮĨŊ)¤ōp3Ne=;PWķŒĐ{JJŒ֗įې žÔ¤ã֐Gæ¸SޏõŖn >´GšíUînVŪ%lov;R1Ácé\(Éģôæ WuÛģW=7õĸÖĖÁ#K$Œķ:…,Ũ‡ öæŖ†Å¤‘gŧ&I‡Ũ\ác>Ã×ÜÕņķdL”ĩ삪ƒÍ*w&™ž9 drhÔģŽnŧŌíįîõ¸õ4ŒŖŒšaAɓĮNMe ÍÕë+ė‘dTģ.<ūfĩũŊpNqžÆ˛aÚB-äŠD¸•ĘīnUØ÷ĪĐ~•iģ˜Î*â+ßŨ\1Ċ€ĸČĪÁ=Čō`mš ėâĻŒŸ0–Øes“Žk^8UP c¯Ŋį ëZûKlJŖŨęc °ōę˛]8ȧ`¤sQ}›WĶxŗo­ĮüąœáĀöjŪ+ŸCīë@_VâĨÔosĸ2p\ģŖ*-zÎč}žå^Ōv]­Ãn{pz‚įAW‘gˇ¸pU8Mß{Œ Ōĩ.lm¯Ŗ)sJ§û˟ËŌ˛ÛEģ°`ÚMáXĮüģÜ|Éô¨ĻœYR„gŗ/éą\ÁjZęGy¤bHr§įšģæ2āpHčk5ļĩaĢe-™ĀũčŖ?ˆíÅkÛË ÜK,,ˆFTĄÍLŖÔ‡ČŽtëKÂ|č#bÄōqŒûÖCxvkyėî˜>Đ@ÆĶ‘ŸLJčŠåA#Ÿ­!ųy'ŽœķK˜—™ûÕû˜/-Ķr “Îhöļ˙@GQ×?ZášÚ)â‰6ĸd8_aÜ{é]P×=úVnŽ!ŽĪíRG×l…€ã }=ĢJuœ$ŽaZ‚šžĖÍĩŧž8¤ā… zgĄ_ķړ>X$Îzą=M>y [ЖŽdÄāĄŋđ>˜ĸdš, -ĻLô3üĢŨÃÔ ũøčĪ*Ŧ*ĨijFÛ\ …8ä;Ô3[Ŧō‡Üę˂ 䌑ũ:™v…Ë‚€÷`GķĒcRŧ˜[i>Ķ9œ#Č8ÚOŠģ'^\ÜÆ*“––XÜ[ģ<ŽFĐqВNiöÖwˇáR%ūú(ÉĻ™iĻĘ&‚ŲŖˆE÷˜߁×<úŲ¸ž-KhĮœ˜œā ŽøúŸÂ¸*æqĩĸĩ:)ā%!–Īii}4€&â°÷öɁ­x/"˜1ŽE;aį¯ųéT#M*˙kFМFzãđĸ=Ųü‰bb Sæmzœũ}sŪŧŠĶUĨyŪįŖʒ´mbúķxäÛ=xũ*BJŽîŖëLŗŖ.ŲËąlûvũ*pŖ W4–§TvšcÜ}iņĐc'ĘNj7]ˡ õŖ`ÔA‚NqøTnÁAĀīÁŠ0ĒN*(Ū XĒHŽAčŦ>´Ōo[ ˆX“Q1Ī_^ĸĨeŨĶĄ?…G2íŒā߯Ĩ;_@zjdë7D´6js$Ž3´ôņĸÚßíāŗm„g/SÛ$Õ{MײŪ_ Û ĒƒœĮž3ųÖŧ ĻŪ=ĒU ŒyÅtIōÆĮ-4äÛ1Žė)KD „0ÚĒrVŽŲÂđ[üĀ ‰o­^lԘH$“É4į‰œé¨ąÆ„c.dB͎šOŠAϐ uŽs]H‰R=ÅĨ ô¤Ž)°CŗOŖí@'5›F¨>÷ĩ!æŠŌšĐØûˇn(ųą‘ōŋC@$õ¯häŒđ:Ҏhã“CpFi¤Üæ€dšÄņĖžŸh˙ŲļÔp{šÄņ - š‘˙/ŋÜj¸|HŠŸ 2I ãԃJGĖīۚAčEz‡<BAÚ}évãÖ“o¤õ4ŋÂ4ŨÛ¸eģö dfšXĨQ֓fŪsĮĨ;îô4™ xâŒĶ€ĀÎ3@Xņč)Fs¸ņH 1éJ¸"€ÄŌņ€zæ“ätĻ’#› įéBÔĨÕîāv÷¨Ņōī÷û{Sc 1°Āū?ĖÔÄežc’$PĀč8ģšÉÅ!7LƒH>l\qŌ€\į8éH}i§ u§ €æ€@ĀRpOR)F@éÁ4‡=zvŠÚÖ ž8ö¤$Đ1{fBœŒdfŒņBĆ(‹,z`UYY㚠™™_aSšą<"á$ŒsíøÕ0ōĖ&1°$¨üĢ:ĶTāäËŖzŠ"Bä\ÄĐˆÉ÷Í2ä1ŊnÎOĘ č?ɤYp0<ŸĮĨ:ižIĘĻÄČų›=ŊMpáäũŸŋĨŨÎüBŠŠîėĮ$C Ą[* ū>õc“ŊžŖwĨ4…áUBäÜUUPHaļ]ƒ<§Ž;Ôž}¤ŠĢ[?—4*2Îåî qbãykÔõ˛éFTŨ+ÜīšÉ<~E0ÚÄņJBģ?ŲÉ9ū•=…Đŋ°‚éF¨žÕ +G­ÄĀgΉ”įũžGķ5åģĮC:‘qv} šČ'4ōũšúҜœŽ=)pp ë×ŠĢŽÃ=:ԑĪ9¤“ĶĢÔņôĮ­ ‚ĐQÃp)NKsÅU’ė‰d"':Ÿē}­YŒ¤ąŦŠŲVڇ†šzSŸ^*…ÄųYƒØG”ØÎæ­\ČʞZ}ų>UĮëOHÄH}ÕÖšØ—ĢąE/žÛ÷wp”ÛĀ•ä?_Oƛ.ĸ$8ļ†iÔ™‘xü Ā?­¨Ũ@>Äf€Lā끊”„īąRč%F>aR‹—WJŽäjŽĮP[ؖAĩ Á7vúšĖŸO]Bé5c,ĖmŨŅaFڒFx9’ˇ.˜—’=ÜrÎģÔgqŒ{€ ŅZÂMš§vŅן˙U>3‚r1ŸCXzŒ÷–&Ę'ž7nāã>ŨĪŌŦZkVw{ŗ.åČ/Į°#ōÍ&‡p×g)`ĐÆ–å„QŠ{ūĢ7†­­ãŒŲM5¤Čķ"oŧ}JôА ũu¤āÁd¸_yŸĖ ~u­Õ˛š$üÃÚ¯™ŖĒRpŠŠ0…Öš§'ĩđƒū˛ĩņëˇŊZĩ×´ûļ(˛æĪúІÖũ{Öĸ†q“Æ?J§}a§ÜÄĪ{ NdŗWči^/Ąā÷VëP[höüĨņģælž§ŠÄŠ;fU•Á[mųķY98={ ÷Ŧģ-æöúV˛ģuļ‹C1.ŒŲ8r˙Ũ:Õæ–â=OM*ŧ/lw/å×ĐSpļ‘f*›žŠčj-Ŧöō+((˙š'ÉĒļņÚ\h.æ#sųsTĩ]vÆ}&AkrŽŌ|ģs†ŋš%”ĄŨí#Ļ21Pīžĩ_g.[eŦÃGÔŽ­Œ×7JâGy¤,!$pŖ#§ūúĢZŊäĻ“bc#ZšķĶÚšQĢÎņ4Sl–69mÒqŽĩ>ŦKŠe ū°mS¸ü‡×¯¯5jqž¤:Ņ’˛Ņ^•q ú]ąˇFŽ6…'•Ž~¸Šî­aēFIcŧ-Œ7B:ū&š+ŧŅofĶ­\\ÂŖĪb¸9Üy CŌēM.ōæé\OFc;x'““žžØ§V.ëŠŊ)Ū6*ÍáØ%qäĖņÜ?ĪzĨqcŠXÛ!“ĖōÆÕPČáú×P8ž ũ*ŊĘüĐÆ2rųbžÕ“šsކv“q~ĀÁwՉV ‚ĪĩjŽšėE)‡Ė:ķÍ įŒ õĨ'ŠIY!ŦÃ8qA<xĨ$:÷ϜÜOjI÷Ä|KÔŽlMĄ~Ņ˙˛5\>$EO…™%ąü4dė?•(ī“Ÿ­'^ä '‘ëŠPøÍ&ߛ4ŋÅĀĀ÷ī@8$ ã8âŒūGĄõĨã9"€¸=E#6M;8ëC2äŠ`ûŨM;=‡ZQŒzŌ{ž( G4Ŗ“ļĻNqJ9Ĩļ ĄÎo›ũP<{šVwT÷cī0īíRāųpaéO`ÜCĪúŅËŊ)ŧnëŕ9cŒv§5@¸Pž§4ŽR]Frp=ÍSÔU˛E“ûéQ í×?ĐÕšŽb†–A…Q–ãĩSˇĻuēš/ŧR2xON=qJäŊv.Į–j¨cĩUĶ—[@ÅOĐō͚¸XScˇTM™ËBwƒßūŋ•RAąl +“‚3Č?Ęąĩk xlįēË(„€ŧĮŽžũ+d8ôãŦÍ@ĨūĢk§¯1ÆDĶ}ŨņNJÔڔĨgąWÚDú]ŠķdΘ•Į? Ā­åAĪ\S—…`~lsUnįtŠ4‹‰%}ĢĮAÔū”›sfu'Ģdí †ŪYe}¨ –oJåæÔ§ÖČ[eŲfO.ũ1œdūbļîŦ–K)DĶË3m8ÉÚ U;k8õ:ŨNUb,Œã*zCWõ9Ē9ĩdUÄ0OĨĒMė˛LWøņžjļŊ$7WŪYš’lĄŲ‚0XĐõãõ­ÛkX-b"8đY$ōIĮZ‚įH°ŧœĖđ;‘ŊzĐį+ŖJq’…¯Šæ^$ZôƨĨŖÂŗFŲ*Ũ'¯ĩf9잊9#š/¸qƒ"ģ}cÁˇ77&{[Ĩ‘ÜäĢåO\õŽZm'S´š(u Ww°Č>ų­yŽŽJŽiûÅuÕŨ[ė;oæŌ¯[ßÁ;˛ bC~uFcw8÷ŖÚ¯'І+uēXŖ1ĢüŲ, ~>ĩązØĪÜ{žĄ2[]ۘä älX÷d\7c<ŽÄöŽ”ŽũũkËŦlcŽo*=BâŲ îVSŊQņÁÁŽŗJžņØÃpņZßom­ąķü¨”TÕĶ;0˛H3䑞 ɒíĀā"c>į¯ãŌ˛G‰b‰ļßŲŨZą;r镈ĢēnŠcyI ÄmŊ‹mÜ3ĮŌŗå’:e v/āŋ=3H’qÍÃ)ÆŋĨ4“@ĀŗQäHåĀC¸ō*0^ŖīN>§š¨nYš3kķ7ė)ė Ø…¯Ą.Éyˆ?v5ÉĻn_”ĩō×<N?AV•BŽÕ\)K)cJw]ˆI÷1#Õd}OČe‹ ÛXŖnÉŠøģŧuŨē8@ā{¯øVUū›wķ–O3s†r‰ˇeléq$vIˆŲüΊ>ĻēĒĒj Įsš”Ē9¸Īb`qžiŽš#“üĒaŒãŊFO\ö5ʛ:ļ+ÛÚ[ØĀbļ‚8#-¸Ŧk€MSąŌ,4ɧ–ĘNÁ¤Ã ­`ŨŠģz‘Ú´æ‘-"=i„RÜ\Åm™!ėÕÕVk…Dˇ}ŒpX‘Å\)ÎJé*‘N×,•'=Ģį@7> ƒTiÆČŖ1˜öōsŸņ­÷9EG’@ÜzRR’Øz3‡ĀsÅĒ‹ˆ¯#ë/š##‘ÎxŽåF1Í4RŽ´ĒNSՔ•‰ĐķE1sēŠtօ6w[ąĀĻr3ȧ>”Ē9¯TįHëŠnŸcN?Γ8☌ֈūX,šëq˙˛5múôŦ_‚b˛ÉČķ˙öFĢ‡ÄŒęü Ęu=i¤;d~4ĮZô$@rJĢxˇ2 [y–"s—Æ[đĢMŒį"—' õĻ˜šē3´ûk˜ Ļcļ, fMŲo^z}+@Õ û)o LHÁŸČzԑŪB…a ėW ģôÍ[WZĻZÜpiJn94™Ā=A÷õ$‚ú՛LŅy U#'8§ėEcęŗÜ"Ēų´Qc-Ü֍ŧ˛KyË'îƒÉĮŋĨ_-•ÉRģą(ÜšgōĐãûÍéD“G÷Ī#œņRFĄũsHbĩcĶԜJ¨_›’qJq:JB9číR19ü¸¤ōIÍ?vš0  `œpsJdČ<{QÁä89$t wĻ’1ĀčięFxíLÆZ‹9ĪsšV%8“ØQÆpsU/bi0†Ÿ1PāŸL~´=\ûą“FNâ;Ö\WRMdŅd‰Á*îH<\qõĻZŪĮ–;†0a˛‰3ä¨Āā“Bac_p¯4øa[ˆæ–ãũJ)āgv}p; Ô@ŠĮg~*ũ´ßgŌž|n;˛Ā`×.6¤ŠÃMÍđņŒ§iũŨŠ]Į•lK•˜6:}(ŗ–â/7í?$‚w9ä÷'>Ÿã[Iu;„,<‹hōKČ÷ū•ZX㔕ķLąíųˇ&=ąEÎIF[“V ÷[Ŧī’ū&•7ƒœcõ…WÔØÛX a‹ÍŠ?Ŋ“ŸJ­smsi#}›Í0m%˜0ų{äÔöúŦEV Œ’ŋ$sũkyjœY—,”’9åÔõ÷ōôí9âlŦœcˇü9áy G–â@ŌHwK1“íôŽŽÃOˇû2I"ų…Đ6Ö ķĀ­4e@Pz đëbŠĶn4Ö§´”ęĨ}#ØjÆ ƒ%víųšČĮzÉžĐ-ŽYį…V+–]ĨņÆŪ21Û ­Ę ŗ``g$āT_kˇ6"§ Ū+Îæ’w6qVąGO‚îÚ_.Y]ĄŽ0 79™ÅCtfū؂ęR ŋ›åĮ“÷8 ūĐUiį*áuXp æ'%Øä¯&ŖlļÖČŨ–FŪ7ņ€ķæˇĨĪnŦᜤã¯C{vsÍ7•  &#Œģ*‚ĖO`:šÍŅ!ibŸP|÷nY}}ßņŖZ¸3ÁŸƒÍģ,•9ÂõcųÖĩŖōâ‰R0¨Ú{ oDlš…7æ8`øīU%\ęûķ-ʃëÅîI_mĒ+ǜ4Žp ûzÔ"iäŊŒĪ—䤅Îrŧ‚~†ˆÅŖ–RVĐš+Go$ŨųŊMfh;ÚČšRß c!FÜū8¨5ÖšhąHÍ#$ƒÁbč;ŸĨXÜŧ°ÛØĢChĖZâ@¨ę(QmŠUYĒ~čöĨ"Ą(Fy­`ÍŠk–ˇâ)­ŦžĘQvHŽ~w=WÛĻ´ ÕŖ%â¸Å´ę~äŽGbCDĄ+i¨ÕHŊô-˙ O=sYž%šX´—Q€ōĢ‘ųš’MbßvÔg¸*9ōPŋōŽSÄÚ´ŗŨÆŋf•bˆcæ9>ÔŖ uĐÎŊh¨hbKoÁA^Tä`āæ ´ĩ‚ÚIBHŦ[.~ī^ŸJDō‚6ųJz’y?JY-ÔĸĒ˜éˇ¨üiŪÚ6yˇvМ°RNA Ύå]ׇ!ú’˛ōcĪĢsũkĪíV[ŲcąPÆâfØ3Üw?€éū|66ĢŊ† ŋAUĘųlŽœ%“æzXKÉV9e`D$ƒ\Λ§č¯ŖÂ÷ŠO&\‘ĀĮ#Û'‰õ;™ô—‚ōDė"ųžņ$Ôļą%ĩēĀ˜ÂŒzūučĐĀNQ÷ŨŽš™ŗ§ûž¤‡Bō!iėĩ[¨ĸÆî[zā{~U ´úĶĻčŽ-n”VQąēČ:UåĩÔĘXo 6áØË„ Œmö뚑âŒCä\GsĖāžs“Œz~BĸŽ ¤.Ōē Y„f—5‹Ûđ1K­"`GxX8ČëŌ„ņ.œĮ´°ÔŧūUĶŊ‹grAžžÔnāú㊠A#Œõ¯TĀhÎ4á÷Š94 ƒ@ qŽĩ‰âDvYéöŽßî5mžIĪjÃņ|Ģ.åã?øãUCâDTøY’r@Á÷ĻļN1N$ŒÛ€r+Ņ<‚2ŧāúö§dŒvAĮ4 sŠn >†ĸkTO2Xãˡ, đO͎֧fĮZ¸ãú͏š)—{XŧûéU÷Wĸû{ššŪán"ßąSĀÜ0iĪ m*Ę҆‘~îzéUŧŲB™n]a‡?"g§ÖĢFMÚe°Ŗ‚@8ũ+>ō+ŗtZ3Äū}ĄõxM‹Í:ˇ Ī4FĨŋx˙}†>ƒŌ„ÚÜ$ŽW‚XīČ%œrä¸r1ĮVbÖĐŖB …ļ{Ô"ëėVę—7lŦr^OáڛWvV/Hüx¤E*yĨ vŠč:Ķ›8'ĩABm;ŋ 0qÅ!w)2yéë@\lCĮzV~Ŋ>qڐœĒœ‘Hb*œœf”zâĀEqԘƒÆ{U{ß3ėįË;yˆÎėuãōūu>võ¤-éŸÎ“o~á;’Į¸öíųS˜ÄņyWĒĮkמžŖ§įVî´Øn$m+.:ƒ€~ŋĒ^lĶ2ZŨŽr삐Ė>ū´šėZ-ÚĮqi*FŌyą>Fįn>ۘ­-- Š9bšxļ8ûŽyëTālėLLĖÁrs×?Aų~Uftˇ˛ļƒÍĖŌ¸ÎcrŖŽ3ūq\Ø´œTSJWRæD“Ėndb ¯ ābĒ^Íå@ÎėS¨úÔą’ qĪ'¯ZÎßũĄxĒFP|Á[‚1üëŖJ0Œ+MˇrŨ‹M*,O4Jå~PË÷¸î{U]A.Ų­å˛Ž&ėMædíø™qÜqVe“b’ä,P6Üį=;uĢÚ ‘HåxUˎ˙äbšņSqŒ¤ŸČքy¤ĸË0]=´$–ŽB  đęÃs˙Ö§ļĢ`Ģ–›ÎQšÆ*calۏ’˛ŋUYáąX&K™Ü§–wŖÎyQ힕ķ-9;õ=ÅxĢ!'¸IŖW‘‘-pYC ¸`ztüéÆî`“ļö†æÜŊ8ëŽôŨ!íî#Žp’+2-n$ÜU1‘€z?JØsæPŲÜ×üķCēvŽĩ1ô6‘žÖō°1™w) ´cč?δMĖk¨-™#Ė+ģŽ>ĩŸĸ8ËÆAÔú­a2x‡3 åI¸[éöōÛH,ä1ÜšVüĀzéßZˇnomâ”ÜH­/ĘŽģ ŨĮOĮ5:z]ØÃ$MåOČld†>ßĖ}i’iwą#Ŧwk$Dr˛r;`÷­ĒĶ„æũīŧå„ęB*ņ/iw†ö $ĘਧpČũ3J6ÃŦõš0ĄēüĘ~īãŸŌĒÚ3 2I•ã‚Mä1“î’1ÛéĮĨaO4ņĢCŌ$WRŊs’ÃōS\’ĻĶąē¨šæ:‹hÕ/.– ܯmÄgųVŧĩ-‰I9=+Ã÷¯{¯,L’9Ī||§õR? ģĒŨ5–›$‘­l$cûĖĮųÔŲÜۜyÚ]Ę0Z­ūŗuî–öx\ ū.?O´ūËs>k…1ŧąĻ7}N•&Ÿj,Ŧa€דũãԟĚļģc‚yâŠČu­)iĐQÕ8 ØqĮáTĩi 5ŨĘĒerIā ­B’G׌V.ŗ*Ī{ofãl!‹JÍĶ{zã#ķŠWfR|¨u¨]öŽáz^w'–$}Ū`+JÆō-BÜËÚĄļō0Aw;ĨŽņŊÅÃnØx`Ū>ŸmZÛhÄycˇ5Ŧ ŖLŠ6å Ëũ<]1”6&DeˆįYē‘īT­tû…ž4ģÛ4JĀ8ãn9<į$ŸÂĩÁ$AĮ ĶqĮ|üĢ%&–†í'š‰Ēļ’ëqAÍE h–7š\w0y’™?1ėqũ+§–ÛãB¨ĀÃ8>ÕՇލ;5vk4§ļqúÍŖ.Ŗe ’ėš˜ ÎÕ=Ÿlõ5}î4Ģmöíŗ*2)'ŸLöíų՝5žÕŽjW'æTÛ’sžįúVŖÁL(I$¨äœUÔÅNR÷™ŨW ÅF|Ö‘–O0ŽãHF^:lė#¸˛ŖHęHY:í˙ŸåOŠÆŪ ‰gŽ"€“ž;uĒ“čėîō¤ōÜ8büõĮ9íÆk'^Rvæv1ö\ĒüŠą%Ņcu¤žYā“͝­I jQJĢ1ˇ’<ōÅžaTšÃQ´I ›Ԝ`7¯¯l`~4IuŠÛy˛ŧKŸ”.Ū‡ˇO`Oâ*œĨ(ÚâVRŊ™ĩ"‰!häÁÎAĻ*„@ĒģPtQÚ˛ãÖØĖČÖØ#ŒîāāOëŌŽY^­ōHŅĢ|‡n{ü~uÎá%Ģ:#R-Ų•ČĀb‘”wįëN`{psÖŖaFN{ÔĻV‚'#<ķY:j—ģÕ&˙§š=đjô*3‚G"˛´UŨdō‘6iëķ?•\[I›Bꜝ͈r€ûU í:+ԍcUæÍ^Îĩ&7.qŪĒ2’wLÂWiĻsąh–ÚŠ´CũíČ9öāUˇĐ´×'6ǤõÚH­C}iŽN>ĩ¤ëÎnėŠiĶVLČ>ĶI8…Ô{HÆĸڃōËrŖĐJkTĻz^1RęKš~ŌF!ĐŖvōííĻĨCoáÔ.Įü ĩÍ(Ō§ÚČ|ėĄk¤Ío:Éöųœáj+Q=h­!6Đ9Á$ĶG4á–ãĨ3i…9¯PæqŲķ@ųŽ;Ņ‚2  s“ĀŦOŒEfq˙-˙öF­Ŗ‘ŽkÄ@ųVYÆ<ūī†Ģ‡ÄŒęü ĮlŗdŒ{ReNzzq\ŽA¨Ų8"ŊÉ•~`OĨ4(Æ)qđ <ļß^”ƒ:RKõÁ§…Ā bät^ōŪ9UžĶÜŽž˜Š ”;‰Āîj5_´6ãÄjxŪĒØ†ŪÂ[Æ̀ĄŽQ1úՍģ†(+éToĻt™#ižĪ)&Näú(ÜMØēvã~ĩZ{î7gåV9Ë~=Š–,Đŗ9v@ÄFĖ0YÎjæŌ1üŠė=Ѕ*¨1ל$œtŖ7#š]ĩ$&Ĩ(T3@īĀôĻāį `BîE pØ^”›A'֗Î8Ļ +Ī­Ī äŌŧČËšč8ÛDsĻækmRVˇË,Hvc;€8<œôįõĢw“Įq§Á{â7įāú{ō1[#šQšĖGzÁhVĪQšŌG)o9܄tVČĮø~UtgËR믤ƒHŌM:ˇ¸’Ņ æCûĐ3‚G'õ?eËq6‘5´v°ČĐŒi…-æ6āČûŧå_ļŽîm%*cl…`zøöíZĄBöĮL wõĸ¯ģ'gŖ:hb%5īĸœē­”7‚ĘâHÖãj’§ '§$c<möœ%˛ŧ[FHæēåŨ˜üāāuíĀâĸŊŅ-ī70\’Ä•gÛ´=…fę}§Ë§ÛŲŦž]´ckb˛ŋ ‘Ķš¨‚MĢiEĨČĘPMwĻøjā“iŽF–YrJ„\3îHŊĩbQI„raYĶä>æŗc‘¤§ÛBĶ*7™3ĩ:đ§=AÁ­ėˆĻĶÜî‰îd4øŸlrÆŌĩ¯5)hqˇ?dŖËßRH?˛åŒßBĐȌ ‡GŌžî÷Ņæ8"xûĶôn:ų×/ya-ŒĶ4pŦŒ€%š›œāũŪ2?Ö¯ĀķÆG”Â;ƒ€Ją$ˇ đG§Z–šÖælКE›čZž ōĖŌÁ3$Ÿ(ȀœđuĢMsĨ­ĸ¤¨ĐY.ö!¸ķtė9üjĸkĻ×X–;Ûi5ļ˙;a Ä7ëĪ͚ŋŖé›UšēļˆÜ\7œä Ęį ü)ÛíHŪ4 įCZ •IQČ놏ÂĻYáŗųÖlļéŨĄTXÔ; ¨ Ÿ—€ZŅ N1Q+Æ}^ūãɲw‹™OË˙´ĪéXööqƒāËs<Ļf‘ųŠãôÛÅOĒČEÅŦ!Œ–sŸē>ī?÷ŅüĒŧŒqj’ Ŗėˆ‚5•˛@āãôüETõ3“ģąnÂŖîWēÜβ÷œî>ŊĢc8ô¨#+/ĖŽAÎF;ķƒīRp@lwŠ”œžĻŠ†ˆvUįŋ)ōqíY—÷3[ÜĢ‚L fāHĖpO¯æ)ÖZĸ^É,r+0$8Æū RåĐ|Öv4FÕ9ĪԜÛx9íųÕ8¯íf˜ÃędGhöw,ŋ{¸ČĢ$–į#o¯Ĩ.VЏÎ;Ÿ­TŋĶė&ļ–Y`FdBGcúUÂ2=ņTæ ut-¸Ļ֔žū‚œufsĩĩ$Ķ-cļ°†øU@3Ü÷ĪëRÜȰĀōŒäũ JAíÚąüI#CĸÉ0ß3,Kõ'˙×N>ôiĮT†øj/FYHîĻ?OŌĩ÷‡¸¨ ˇöąBŖ/ÂĨØF8$Ō–˛I^LE;ŗŠR ’;Ō‚qĶŽh9åÅ&J"žhĄ‚I$"–*;×ô¨!Õ-. &’î $gWāfW\ āRķvÅ.8ÉëIŒcŒ× y"+@ëšĪSŪ†\tüiÛ@\Jb˜ˇjPŲ>§ŌŒņøÔ36âbNßyŊ)Ąˆ˙é/ąOȧæ>žÕ0áBđ{SQBŽĀ0j]ĀļœŅrRî9rAô Ā‚Ŗņ¤VÁ§č}(I”.c¸–éUE‡yF÷öéŌĻK¸Rtļi•§čĘ?ÆŦŖ€=ÅRm>Ų'k„‘ķ…ĪCTŦ÷!Ũl[Nô °$ņYö:›]]4f,{CīZ 6ŒôúÔ¸´R’bu û͈#8ØĀüę/OHÃ6âIåÉ==Ē}>ßėú|n"`cĻ:Ն9ūĒŋ"•Yrr˜’ĨՉ–ä*;îvbĢ’ā‘€~žž‚Ģ›+šŖ†X WO&Ãĩ@ ØË{bē=Ŗ 8ô¨ZŌÜOÆ5&Jž>îzū|Õ'Ü˕Ŋ[_‡Éū˞RMēŋīž‘īū~•×BAĮôŦKKoí5žŧb›÷p1ū^˙‰ūkph–2 D˜Öē8ë…ãžŧS–ļF•}ÆŖåø—u{āąÉnļæRp¤ŠčĮ§NxëøUj ›éd'–’d“9?íYŌC^ŽÛ,ü6Y˜ôã“āWoĘx#4“]L99õ1ĨĐVīNžŪKŠ›ÍBĀn8ãžOëSZXZ\čĐÚ°o-6ŦœōĖ }zU‰,ŋd¸dÛŅe%•zū?­Omoä[¤xįo$s–õĄËK&Tcgĸ1Ž}gæ=Ŧûœ‚Cš9 x'ߌTڔ÷öđÚà 1+æĘ8‡ĄîFG ­Ŗ:˙JhS×ߑSĪ}ËjÚ#2-nÎ}ĐĘÛK0]ŽŧsČĮųīW•`æX‘ ¨ŲĶįü* Ęåüƈ,™-ŊpåVRŽ!@ŖÔs&ށ'ÔÄo<&⠂ėIÎæØ@8ÜAõãĶšĒQIŠéˇ˛Ít˛´W“níÂMØĀü8ŋZé.Ĩöėį‚ûžŸājŽŸs{<{%Á°ÎÍ´ŸNƒĶŋŊk¸Ũ™ÉĨ+ƒZļ8ûDm,våNI‘ųū55ÄSOxb*ßŊûĀächÅAui4ĒWû=<Ņ“Ŧ˜]ß§AT<>ˇ6ww–—1Â"2ˆí古›@zV))žs¤-„דXzĄ:ū—kÕUŒĖ=…mã8>§ôŦ< ŋę˜áU…דŠT▧e?Šũī0nÆĩPÔϏ†ų”īžÖ# ÉôäūUqãĮ$psúÕ+›—í\έ0 ~Px†”,ŲÍSšKBĄŋŧĩvIí˜Ä¨á×'Ą5l_Āļˆķ0Œēä)äûU!Ļjpą×@īÚš~ĀqüęÅ֐ŗŪI2ÉåŖŽ(įwc[Z“—ŧô9ÔĒÛDWūؘe֨Κ#úV°”˜Ãm`ĐcÖŗ“H_84’É"/đž˙Zŗwj×6Í r4ažRGP=Ŋ)×t•?™tUd›™ļŅO#Kæ8gˆĻQ¸Åfļ‹äŠk{–F(.NÎhˇļÕ,DœÄß$õĨ{û¨G-ļXđ3ÜVj-;' IÆ×’ąMįHeÃ:F<ĩŽšúÖĩĨ´0Û,Á~fŒ~įšÍR]FÂîC,q’ĨįŽÔ—÷bä,VėV>˛c+ŲpEv7*ŅĢX担?ŪˇvføļūSkä[ĘUKĸ1ÁÜk ļ¸IíՑÕö¨ T÷Į5ËęQy’XZÅYį&=9?Žž Uĩ‹ËP=IƒOFj)ęoBĨJ‹™õ!ŋ´7heō× œŽėÖzÅ.ōm¯#Ū Ęŗc ;˙/ĘļNÖãgŠÄš;˛ą1"ŋ–¤NxöéÁŽJrŌĖucÔh[įËĘČFHMÜ‘n54@Ū6oĮŸjĒ–Ö˛7É|Ņ*8LôÜ߅iZƐG"ųåÎūNîžÕszSWcíæ•â 4aöĨHM \“Įãš\cŒW$š:Ō˛yĨ^8Ĩ"” ›–õ^hĒņLŌÜė@6!åōĸēi§as&wdāã­0ōx§cŋ­ >Į­zį0ĖäŌô=)Č'´/Ũį­7’1ŽũŠījCpiŧ“ŌœŒpOZBK˜ gĄ>ÔđŊyéQŽâqIķäĐ€rOlR€bšŦy•Žxį  ōM(`úŌ2€ģŊ¨”Å rOĪ_Ĩ1›8āāS€Āé@ ōĘĀū&€Æ9 …Î; h°ųp U('˜™Ëbxú՗mĒIRÃ8u?įŠŽŌÁī3å2íČÜäã¯âk:“Œ#y=ĸå.TŽĘîú Ō%CfęÉ0n\ŒavØ9¤6ģ)’7G…Håįķ/ cé] z-Ēm$HįÜãŸ\Tv)8šēŠ 3Ž\^;׏Rĩ '*kSЧFŦlĒ1Úf­æ+w‰•ūâ˛ō­×=ēž•¤ŗÂōįŋā3Z‡œqĐȅEūŊ$¸ŨšųiÎAs÷ˆü0)EĢÜęŖyŸCBÚŗ‚8"HÔ(öÅPÖ­ã¸Ķ¤ķ`IOwÆ)$|Øö?…kã‘MeįÛŌŽmLäšĩ}Np\Z,QRdbØY~ë‚Fã‘í3Šŋ§ë\”‰æ_´t œo¸Ī­^šĘŪč6r‘Ķ=kXđė~X–)I\Ÿē2ÁëųĶ÷YŸ+‰ŅîoŊžGų5‘|eļŨŌq,r)āę}:qSßZ]yņK~îŨTÆI‘ŗė}—¯Š¨áÖāŒRĄRŖdûú莎čRWVēę€Nö,ŧȜ~ĩ~Ūú+­Â'!€É 1ÅVŽÆÚäŗÃ1U?yc vŸÄqô¨-ėn4ëĶ4ĖdÃ"ũĐŊ˙Öŧ ‰ģY™F5 ÖˇFĀ‘ŽĐž´æ 7cŊ5dÆRŦ2­G;­´3ļ9$Eq%vŽ–ųncę’-ũÄ6ˆĘéɐŠ9\gŸĀgķ­62‘ŧåYVbŅpũɲIæž‘”…3ąØÄcj÷$ø"ĩ.##ėē|RŌAķ6~`Ē?L×]V šNJZÉĖk]Ou+%ŖĒĸēVL†>‚Ŗky ´-$ˆĪö•”íxp+R8RŌFô˙?Öǐ.uQƒ¸ÜĘFūÃđ?\W:îtōÛVM4žT.îpgŽŪõƒ¤]çhSj—ŗây^i$Áā€xúU˙Čmô;ķŋî×ܞ?Æ­ZØ$60Z ,aX׎k[ĨexŌvęf Js(xã’Eē™ve~U ķčzՙuEƒäÄŠ–'-“Č ’:s¤sjįlMũĪöOôĢiöŌn2ÛÆĖqÉņ͚‹Ææ);“W˛yR5œomĀdc;qŸįV–@pĘŲ÷JįBĩ¸‡bŧ¨Üā—$ į?έZZ-¤P'"%Ú­)r´4äŨÉā $úS3ōŽOŌ¤ įĶ4ŽšĮĩN…jA"’Ā“ßŠÍē{´’ęT„?Ëļ.rŠ?kƒšcc' Šq•ē(9u9Įģž-s`ŽÃj( =ķĪ֟zĸ+ĀĘŽãéē­ë˛¨˛ō•Āwaø€yúU-FíeexY]'>ŦzëO ĪΤļ<üG/+…ĖÔˇ‰,mō ōK¸öÆ?­uÎĐӀqXļc]i +Ÿŗû¸ÆæéúUŊOSŠŅāˇ+#ÍrÅbX—$žƒŪąÆÔö•tGm:n•(ĻQĨÜ1F‹•Ų īn0wcŸĖTÖRCŠFí%ĸÆF:Œ˙úÅWŸûR(ĄXmÎ6q“ƒĪ5vÖâSĶ^Œ‰ÁŒdįŪšĩzD–˛&ŸjĖ„ÂĄÁvŦ{´‰næuŅ\ yĪĨNu;ͤ‘ķ€{ÃéRXéĨČš›€˙>͌“ękē9QNUŽ9Ę5ZTĐá#`ũŽq98~bˆĨŒ2ļ9Æ?Ō‹Ø%‘ە9eÎŌÃØÖLëŊŅ2[…øųžfüĨq5ļtsJ6°sQË:ÁŒ†g<ë5n#SļŪædĸÃM[Ļ$ŌOŠcaÚ§Ų[[šĒ—Z#VĘ‹s8ÁsŖĩļ{Ä*œŽž¸ĸ´†ÅY#ļ'įõ§cŒ()Í#šõÎq1ŠqÆÅ4įsŽ(6ĪŊaø•7ÁfĄļ“qÁ˙€5m•8āäÖ/ˆî,Éōņ˙˛5]?‰Õø€š„~sFĀ‚ŧ5YīΨ$ĩYÜ6ā§9n94Ī=!u‰ØåÉäôAŽé^“Øņ“krV˜F…AD [÷˛œö?ÃI喔ČęTōüÍMˇoëJöĐ­Æ“ôŖ-øzĐP{ņF;v"Æ’ØŖ’œK Ō‘š@Î"ˇ$zQŧ0ä~4ģGįéK°l€BGSÔĐgŒ CœŽx§cšF¸í\ØŠ'wŠ­ûڛ°ŽYt€|Íëڜ‘ÅŌËmy1¸ŽøéQÛ\Á2˛G:ĘņģiįëV>Pwķu9Ŗ&™îFŌIˆNqģœņ×­SÕHō‘PŸ\Ž?œÕâŖãYšĀimLH…H”× š„¯°įĸ,ŲĒy„jĻSģĮn•mOUn퍰—ÍDĻ\ã§j’ a¸RŅJ’qō¸8üĒ›¸FňōFqTu;‡ˇˆynf?&áōŸb{UčĮĘQíX7­įøŠ4 JDĄˆS‘ĮÍČúâ(s2*˕šö É$l­zˇiZ‚B€Ãp?BÕŗĨęĘĐmģ–%ną•¸Éįž‡pü+!VŌįS7÷‰+´3lĪ}ŅëÎ2=Ģn}6ÃPF ō2üŸē?wæÎ1Ķ×ķ­'gm4&›ZëŠĻŒNpˀrAÍs;N“¯K&ɰĘø‡§ķũ*WĶĩ-9š[Y˛ÄėįŋcōĢ msŠéė×Ru`# Ûķ9ĮáYŪß nėŌšģ0iō΀6ØË.ļjļ‚#‹Fˇdl™šÍÜŗs˙Öü+&6žûL—L;LЏŒ“Ø?túzgØÖ…žŗcmîZI Ņ7đüÆ:PãĨ‘Ķ'AŗT“ŸÂØsXš~ģéēįc8ßøgđ>Æļ‘ŌOž6 #åį§õŦÜlõ2M=‡āãĩbxšüÚi-1É,ōãnÄ-´2Į…mä~īs\ øŌæß[Å=˜Ķ­›f& >v̓ÚļĨ7°{HÁûڝ=†´’čļ’•’KüœˇwĮSøUæ[KŠĻ€Ēa×ē†ųŒūuËX]JęIôĀ6éŌíQf^ŖœœgŸ­]Ņí§ēÖ§ģw ČZDV;˜WŒš÷Ē”,Í#:u|ËlŖ‘a-™ģԓÖŦ´ bqˇĢzŸéXZnĢz××i¨Ŧp›™F žAŸŊĶļi˛kö÷v6÷SZŨ%ŠqœĻAqČę #ōŦŊœ–Ą:n:"h ōŪíĩ‘āĩeÉEä/ĄÉéŸJmũÅĶXp’ĒËåHdČ'8*r:FMjZEäÄUŠŗš,qÆr}=‡ōǝhʓ5ÅȎ ÅßaæNxÉí€Nĩ¤d¯ŠËRœâŊJģ['šŖ-0ÄŖ’ÎH'Ķ€GˇCZ–ļ‰n ˛†˜˙Ŧ‘ē’zÕ^ÜęĢ ÉÁv>`l’GŪį¯δ.¤bRŌ‰d'ē.9'ߡáQ9sJáJ<ą ›‰ ŋfˇ\ÎTäˇđ wŠ-á[xV$Æ?Ŋę{ŸįEŊŦVëļ%Æy$œ–÷9Š6œžsSuąĩĩÔÃÖŋŌum.ÅxS/œãŲsũkl),y?bY˙ĨøŽōcĘÚÄą@IÉ­Ö7ššôFŗŌ*%{ÔÚËO—9úw¨’đ˙eĮqˇsԏŠ­HŖpĮŠįķŦ¨s6cnŨØVö*9ĨBŗ–Ļ稴.Ĩ‚L]¨ OË$`ãčÆĻYŌbZ7F^Å[<ԇõIt÷ˆąˇšx‘‰;UŒūU^ėˇŋĻĨŧā{R3§ŠŦZkV˙JPņ‘ūĩņõ֐ęVhJųģ€ä”RĀ~TœJS]IÃaA"Ŗc¸įTĮęĨ4ĸâĄč[F§k5Íâ¤Q‚ xË}Ūĩ+ßCk+jU–Ū\Å9å늑ąˇ9zöĒFų䕒Î>Ū¤žŅøqÍ?yčŠ/Ž ŽôU8n.ZáVe‚,˙ũÍ˙ÖĸēiÆČžkųá{搎E8€qŌ”/=x¯T挊L§āžÔÂyĻpG5â%ų,Īo;˙djÛ<öŦ_7îŦÁōß§üĒáņ#:ŋ2púʨʂëwŠ;Iîh$™Ųĸp~G×°[ß|œ6xÁČ>õ餖§vô#3Ël7MãŠũÚģ‘ō°'‘‘š$Ã) 3UgœĀėō*pTg4nYØ) sž”„69æŖŽhįRS!b*l…#ž)= ZĢ‘¨'­8 qKœd“žx œĶ4ē.=čųˆÁ¨ÉāqJí" `@ŅģĄ›ļŖ8é×ĩ0Ny47Ė= !õę)FI"€9ëBûŠ Ÿ^iÁëøĐžĮĶ2ÅąJ\c‘Å)9äPnqڗ ÁëLÜsÁúĶ™˛hÁ 4ãĀƒM8<Đŧ:˜n6r@ÆsŠPsČ=)=9'4€†[XfŪŌ"îÆ7ã*‚yÖp‡…Úh¸ô<ã“ÛŠĶ˜R‡ĀƒƒYOowaûČ@‘3ÂvPxéß˙ŽjZķ/ÃwĀ*ŽĨ‡Ë‚p}‘ņĢp]5”ŋꋉŨA˙*ŔÚ\¨i@ˇœ098+^ÍÖÉÕĻŽiŠt`ÃĮįYWJTÚjæ”ÛSVv$V}Bt"U–>/ņ)įķK ‡Ë[Æzyƒ$JŨŽ8áWōĐ.ã¸û“˙ëŦ]VÖkažÜ7’ü9”úW›‡¯NrösV]ēô%ķĮV.‘t ė–âN  õ§ŊnņķgŠ#š;kŗÜDÃcecķr8>Ļ´Ĩŧ›Uq¨"5`]‰Á>ŲŦņ¸Uí/‹Âb=Ë=͇;-€,}1P[ËNßzC‘žÃ°Ĩša'—8VÆrq;~$˙:UšˆÜIn&S,x}FkĖiÅéĻÄ]>ÛÎi„+æžI<ķ뎔’ØE) ´¤Šrū•eXŽsÅ8ŋ\*mršS)ÚŧņNmĻs#^7î@ęįP]X&ŧž8`ae`įĶŽĮ~[hn@ķ—^Œ8 }kVļÔoÖ];ĨXž,ÍtxuBzzgŽĩTÛæ˛2¨’^đšF™õĢŊČ<ēãąī_Ō¤}*îĘÖāYJIlTᛎŸSŽĩSÁúĩŋö_Ė哓#÷qúųęÔ¤‰”`ëÍW<āÚč ”d¯ŗ1ŦõœģĮt¯'ņžö­¸ŠUũ܊ŲČČ?§ųöĸîŪ ­ÜL@*3æmgŋōŦX4ø…ŧSA)ķ2Z?0…ÜFy˙8|°ŠŦt"ķĻŌz†­Y\‹¸ĘŦdå˜ qÉöãųÖˇ#ß_ĩä- Ē[¨dY8ĪQÉãžü×AĄsn<ģ‹wzeŽ}ĪZ¯{miwÔ ´ųãßģT ã¯éMA­ŅtęŪOŗŨ3–‰ĖsÆå–‡ ÁÉūgķ­oí KE+ŠųqoX÷#ĐcĐô5ČÍvąÂ,ĻcĀ”ųÆ7`˙õĢWBšŌfģڌ+=Ŗ8h÷ É4œy~$rÆNpčvrjÉpĨw´PÉÁeF.GˇüëšēđäVÚ9ĶŦ5˜ūĘ÷)7Ų¯0™!˛Wv3ÉėEwÃĻȤ¤09 …đŦ¯höW1ĸÆæA:‘_ ¸'R…YEų\YĀŋ‡õ›CGŊd,¸šÉō’>éŽĘĒ"ŸgâJ)ÅÂđȎd%e•FØÜ „äŠíÄĘ÷F!s:Ļ3fį#*qŽ;ūUļv—ōnžŗŗ–äFQeb#r¤ō°<jßÛŠi8’āžÆ|:ĐNįͧŠ=ĄĘyA„ŠÎTƒÜƒ×ÔĒXęĐÅĒąÂV@ą8ųqĶūĩq—>ĶmgŠæÂ)áš)^Úä~ėŦk€šč~z’k= [ˇŠ;”Ŗû@Û-Í´›™Ã9‘¤8äŖ>´œ!?…بԔÎÎķO¸Õõø.â˜FІ'4j3õ=qīW/,‹Cˇ.¨7ČZRÜôßŋáXŪÖ%ƒÃˆķĖZęv23¸Üę§î w;qųÖē6Ŗ4 åBą[3e„Ÿëō<įđŦ}ë2ęÖu"¯Ŋ‡Aih!‰íŅ/-˜‘&@f÷ õëüĢN×ė‹•ļQ_ŧ6m5JÁmôčæ _ĖSŅĀVäđū&§ļ¸ˇÕ^⠏ü~NßQôéU(ßc(O•%Ôžš'‚zũj6bˆX’Œš§+4ûD¯`’¨cú`šÉÖuįˇŌŽ’HäsŗjʈQyãøš¨Œ5š´jkf[đÚ4–^MÔ¯'áœåZ—wQŲÛKs;mŠ5ŪÍč;ũjŽ‘=ĸXÛZÃĩ!žTlHHácųåÚ­ĢĻâU ã‚8=Å4ÕÉEãŽ*›ō2ä’Фn/gė$Œvg˙×íPƒxžT.cČ&V å§Ô֑d#ÃšcČĄs€úФģ 0nKSŸĐėq§`žXKË!9ž2AöŠŦÅņķĀēŒFŗļÖ†b3ÜTÚ?ą­ÆFyaĪĢ”l‹*ķ .1ßąúõũ)š]´UziÔz‘Éc›1`ĮÎWvn§æŸn••>—¨ŧF(ŽvĢN$#ãúæĨÔõšŦ5M˜ j"†9ŪsĪ§Úë2 oocũį˜Ë˛.2wۚRZšËÔS]JVÍŦ(ŧŒŌ);ÆAÛĶ×ڝ-ÖąĖģ@v@=ĮL~5rkûK­> Đ$G…BĒ =Ŋú~ĩFãP3ÅjÉ1w••xMĸ,ņœzņUtõhį•:‘VąjÃW]Rm r: JÄā+wĢMh­ķŨ?šAčN}*ŦcĻ\Ĩ„2M .ˉ÷ŊrjŊũÔ °ģš?0ņ ž§Ļk/ŠZ")EkŠŨŪʰĄ¸Ž3/qÚÔū• ļ×%<§‘!‡ûąsúÔPÍoĻ46R”I o,F˙^ŽĩIJ %[ĸžôĒ=l‹…’vŪá9Œ`úžĻŠ”u(̤ũŨF÷;,dvŖã<Ō ŨqĮŊH¯dáĐ{ĶqßŊ 2sFĻ`ŽEaø”<Y…mŋŋÁ=ūãVđQŪą|Cž?įŋūČÕPW’3Ģđ3#XĀUÆÆ)NXޝƒúĐkŅęy:!ģ2™¤ĨH#*zŌīÚ9éKÁiĻÅĄ›-šļ“΍IœÂŦA:ÜąÁFjÃu9į#Ą6ŅŖ4‘üŽŪ)Ūû“k2M¸ČíA^ i‰3Ų įĻ{ũ*MØ•Џ*ôÍ;sÍ'đûĐ3œzŅaŨ ązį­Đxčiæ î .Ÿz\ŽsÁĻ…Û€zĐAÉĪz,á{ūÜį/Ō•°Nęn9Ít)ĖyĨ.ėŸ ۗhë@ –öĮ4¸{gŠER;Ō•ÍqOŒRĄR:ŠhųXwĪãÜ`f€LPGR( tŖiÎrGĐpqO ädœĶ3Ā9éJŦMF֐ŧË1BĘã>¸Šæ`^:ҰAãß=(+´ãŊųæ€ÔˇĨÉn3n ™ Éf×5ŨËķŦ"UõUāūæąWZžĶŪTŧÉT,J‘zãiôãŋŊičˇđĻ JëšfhÉéķ?ŸåO‘Æ7Dš§$™KPŅ­,ŽDŅ")Ū‘š@íô\RgUŌ¤h%ŋF?€ôũjĖM&¸æXÔ­šRˆėxP~ķSé[‡@yȧøÔ)>ĨF7ģ2ŦuÔcthX:ŽXWßĶĨC.›g\BΠŠËĀã§į­[_˛Nn­á‘VIl…:“éY—v:”S Ą˜4KåŠDî)ÉĀõⴍĶĐRŠhŊciyo#G+ŠļEÛ‘œŸō Cf<›ģģ9Û!.>đ9ãōĢē|ķÜXĮ$čČ-ˇĻ¯˙Z˛ī ’M-Ęä cnŊr_ĨmBõ$âôFZ§i-lpˇđ­ÛK$‘ —Îiaʐi؁Q&}¨{0āú×]âKxîô#=ŧŧ—ĖuAŋŽĩȍ-¯e¤‡ AƒĶü*f­ģ&šrX-˙­Ķôø¯ĸ†{mCt›2āÁ=:zsŒūuĶŦi寤\ Č$wú×)má[‹ eXî?z6˙ĒP§€I>ĀgŠŋöûŨ3NššģØ 6O\wĮaüg%„Ú2˛ŗ/Ühöķdĸ´d䂧šīŽ•V ?ė“Ŋŧd\\í~UĢvĢPę‰pōÃbe‡ĖûĀ€H~ĩbÆ8–Æ7Œcz†b7}hģKPk] Ris8GlŦƒƒcøįŠĮŊĶåļŌæ[wšvË´Ž›ēĘēōF0Ā~U‹¯Č&ˆBd\&&“w@ đ?IO]…:}Ž?ÂúN­Ąę ¨j[Ž-nØŲØdœcŒWyôR°‰ÃÅ!ĀÛ( Ÿ§cVäxörģ8R€{mŦU¸ˆ3Ã$,öM‘ģ‘ōļH;NsŽ;ôúR“•FØãMŖyf.#û¨$LX{ô>ĮŦ›‹XģėšŪäíVUŒ°ž1øVŠHö’,29h\â9đ˙˛Ĩ^ų‡åÁî)ÂŦ–‚•(ËS™[‹Ë9ŨŖŨ1 ŊŒˆAĮO”nŠwąũ›m,aL—#rļ 2x=ĮĐÍnˇXČŅē•×ļF=둹ŠKŸ„]‰5‚.Į#îH9ã€qüëϜŖS[jM8:RmģŖŖŸGˇūčŦáOÔcĄ÷Ēļ×RYÄ žö ŅąP.͌ņÎyú֍•čģĩe.­sË  ôĪĶ5‰ö]^ÚÚHČieŪ H¤0#æ$āķũŅY4֌+Ö+r=_û=ŗÛ;ÂĸXۘdÜĀp1Ž:įđ­K=[Lh"Ž)ĸE/Œg­dĩîß%¤e™2YƒÜ0zíüę lŦôũr;MΤÄeŠ@AQüL¸=¸ũi8Ž •ĩG]ņLĄĸ‘dLƒō°#‘G—e`‹šAãîjįdŧ6š¸ˇ“ <ä†Ųˇ9'ˇ8ŠôVįPšHfÚJŽA“XĘéčZ¯ī(˛Kũ.Ō;dˇ‚#O:å’0FHĮĻ0k>ãà ßË‘į† ‚øŨ¸ķߚ܍–ķPiCŠ•č_ŸÖ­ēįy֔g$oĶN騿_I[ËšgļÔZōŸÜ°ÚŅĢ 8ĮŠŠf´ÔâÕϏY6ۈŲQŧ}Ҏ#=kjKxfæXQ¸ÁÜ ÕuĶ­PwIũČämĘŋAV§#XâĒy33KŊž!4sI-Ķev…ĪŨ\ô÷ÍK¨ęŅZXO<Ö×(ŠŒNcĪoj×äE č8ÅRԛn™tÜm7ĶĨ%Ģš›nSG5Ŗ ßFK›S×78Ī=2kQEÜúDė[‹Œë•$x=5MYÚéë¸yĸ´ČŨŒįˇ$fĩÆŖn0ĖōĮbÆv~~•R•™œõ›Lƚæę)¤Chŗ`†RČIČāsõ­i­ŧVQŦļéå° åžŠO'‚:äĐú­ĸeƒ4Ēŧŗ"äõĒĢĒ\Ũ.l,ZE'GųGלî(ԔZ÷´,\AimhĄã G(ĢÆéŠÃˇ6ФhČBŦžj¯%‰˙ ÔK ˙CßÜH“ĨI¨¤kc(ōÉųvåG#Ū6š’–¤ÎĨNVâĖ™n›QēŽæÉeV*˛l<ũ{T‡Fƒí‹w}~Í6āėšURG ĸÚkŲ H ÚQ@ãĮãVbŌ7ļnfy8č3ū5ÕU(îėeFĩVī÷ztZ…ÂÎ'+ō!pr3ŸzK­%.îc—Í*#ÆUøĸH"Xã\(č3NĮĩyŌž‡ĨÕ:ąé€Aĸ‘x<ŅZŌÖ&RÕęvûĐâi1ÜŌ‚3ô¯lâ`ũî´ gŠjõ4¸ęiˆV=Ģ_†yŪÆ;uFc9áØ¨ûßļ¸ ûÖuî öœüöoũЧgrd“Vf9Ņõ#ŅÛcūģū&Ŗ:^¤Ŗˆí›ūÛū&ēĻcņÖĸ9DĪ<ûVĘŦˇš‹ÃÁ­Žkû3R8\ûÎøšCĻj¸ŠÔ˙Ûs˙Ä×J1œíÁĨãp8ŖÛHKĮ3ũ—Šäâ+oÆc˙ÄĐtŊO ųvŲĮüö?üMtøÛ’(a‘ĶŠ=´‡õzg,úNĻãæˇĩĀīįŸū&›“ĢÆŖ1Ú8?~sûæē†*‹šˆ :“Đ}iVD’0ČÁ”ôÚx?•ÚBXjiÜį•Ўü˛ĩĪũv?üMؚ˜ˆm‰Įüö?üMt…ŽFcâm!ũ^Žkû+UcūĒØgū›Ÿū&iZ°įĘļĮũw?üMtĘ9=E.éC­!}^Ži´ŨHJ[gĶÎ?üM#išĒĻ|›R?ëą˙âkĨ žOįFpphöŌ‡ƒčsLÔÉ˙Um˙˙J4ŊW?ę-q˙]Ī˙]9^2zPäŅíd%†‚9‘Ļj[ ōmšā~ü˙ņ4‡IՏÜÛqë9˙âk§ā/šŲnO4{iw+ØCąÍgj…r-íŋīų˙âjļŲãžH.#DtžWÜ0sė=+­Ā ÉÎjX:ÅÁķÎ>?­)ՔĨfcZŒcĸļ2UŗīN'ŠÅŲ<ĶŊ.@5Ōq†î!cœ֏Āâ`ķŸÂ€…;žÔģ@<) Ĩ+Zū+™í„p0RĮ Į< õéøÕKMRb™ÜėĀķ “¸2}:Î´ÆHĪ8ęi¯Rrƒ*Cp1’3¯Z,ÖÔt-i2Íķ‚Ŧ ōĀsTm¯.m¯îoZÚA1õũ:ûÕMB¸îÍņpȈÁAũŪ{ãŋũ*į‡uũžæXYNõ9áˇc¯õįãéÅÁĪŠŲ…›SIlt0jvˇ(ΒėāđããÅa Šķˆŧâāuã9ĮåúÕËŨ2ŲīÅ(ŠBŸx°Ú2rŋ™5…"Ūé—Kgr ‘<›”ˇ'aėüEreÜĒN7ÜߤÔd•ėvOuPyĄ€ =qU´Ë™nVidÜrįģ8ŦfSå)čAÚĮ8Ī ü9ŽŽÖtžŌ9#]ąœ qšÃB4búļÍ0õĨQĢčLŦr1U§ŊHŲÄA¤u`Ŗ€=Ījby—á™ä1AŊ”$}[ŸÂ­xMšƒ`ō˜a”w¯=4vÚæö•ĖÚD—č!™Dy4eCvā“Ī^ŋZŖĒhÂ-îeErŌ3$tfíÔôõ5c]ŌfN–KkĸĢa#RpWx=*€žē—YŠÚîIŪÖ0Ũ9' āqœ`úëĸī’čį’÷‰ĸÕ.ôË`öÂĩHōŅŽõĪ qú] ĻšmxŪYÂIœôÎ9ÜVEŌBĒ/ôۖķĸÍ áˇĄ=ÁöĢļ¤ë<ö2ĮæŽåcŖđ ׁĪÖĄYļƒdŅŽ"Y ¤Ä‡FĖ'#<đEBo¯m]UÔ*KSōŸģëĀüÍZ°×mŽ{yĨ1\ZÉåĘŽ¸ÉĮ{õ­)6ÜŲ›üiŨ­)¤f\jqĪŖ‰ĪîZáļ*ąęsƒ×ŸjĐkhžĶė b26€;{ÖnĄĻÛ_YĻÆÚ Æ ô<{sĘ™ ŋŲ:Hē}ō‰JÉ+$gŽķMŊ.ŒÜ’~öÂYÎ-.$Šp6ŗmcŽAíĮŊbjŠúVˇqŗ"Wz€>ā'> ~uûvA/`ˇgˇL¤˜ÆâØÎB÷Ā­=RÂËSļ7ކO."éĩˆ:ĮĐV•jÆrOĢÜxUtéķhöÚéuh`’o#fé%rØûŋLՇŌm¤0ęų‘d tôŽFņ,ē=ŖC Y!z†<¯¨ĩÜØë—ʍčYĀų[ƒČĪôŦ2z <­ĩr&{HĨ…#ibpFäá†}G~ƒšĐļŨäF meUĘúp8Ĩ2ȇĩ*ļŅÁĪ֎{Ģ3U|,eļÉ' É]ÛÅĒŲj7`Ŋ—ßT9MŧōG8ĢŪ&Ŋ1}Ž×kŧs\*Í员ĶûÍč+ZíÚHDMoĒO°ū´+­I~ķ1 ۟Ž[ų:” ą¤ĄãŽ2š#§ ÆjäšMĨĖ(Ņ\ē…Üëķdpz3Šŗ6™i),bÚvŋÜãīu5FëA–D šųäÜrãš\=Ē”ĩēeY>q ŧĢŪldä n2{ķž˜â™f.ö8I¸XܐŦ˛T ÷#9Š]u‹9`Ž%Y ā;m 8ãđM`×WĖŅEöyRTœŦ™ÎAôéÆ×l­—GēŲR@€r}:SU#'ąĨ3įO˜§ĒŧkodØYa?(n23ëŠŧu8|–ˆYFÕØze€9ú ķXÚî›#ęöYËåæĀŖīdˇĘĩ Ķ띪‚v¤\1*ŲÃĪåŌ‰Anŋ}Ļ4ũ’Öö8Ž™žGll_ ã+N9ĸ‘ˆøÆvļj+›(giYŗēHüŊā=?:ŠËNOWîFÕ_›Đ‘YYZŨJ_q¸^z Ö^Ąu"H–ÖüĘzŒvÅ ÖÎęmɏR“TĻšct×0Ÿ-˜`‡Áöފ8iŠsIõkÅÆŅe=|ģû•U 6&åw¤x'U}>ŨmíWsˇĖÍũãVG"š1ķgUhĄ¤æ”ņ@Æy¤'ŌšėtŪãԌâŠjõĸēé|$Ksą'ÆøRch”ö>ĩí!Áô˜#¯JPŧҜÔĀb¨_.otâįŗčļĢû˛GĨRŊaöí?˙\ßú-¨ˇˆĩŌ<=~ŠŊ Aä?Zá|ĄŋŠ<25}OTԍõĶ9ErČ#įhĀ`×ĸę6Qj:uŝĀũĖņ˜ÛčF+ˆŅŧ5⯠i˛iZeæ›-Ļö0Ésŧøūĩŧ´kĨpĨBd¯™¯:ŽŽŦĶ=Šqƒ¤ųY› ĄļÉĶ"zpAíIqŠ\@Í;JÆŦY2)< †ŨĐļÔˇ“ô5ČøŽaĩŠLļėtƒE¸7 6Į¯jöĢS„éûI#ÍŖ)sōĻt~ņAē‡Oĩ•ĸf6âK›—}ŠŽÄ•AęÄs] Œ°@O5ä÷ēͤÚXéXr)YˆÉˇĖí‘Á Ķ‘RÚëú֓}ZyDƒ?c˜üŋ1 įÎcí^J ZÁžŧ*5šÜxŽDÖŨÛ1ųžkŽĖûd~•…uoå\%Ėh°´ĢHãä*ú_jį/ŧНåĶ4E0AÚ[ }÷¤Ö$I"‚8ž=˛8`ëĶ<¯$~UžÛ›7{Ų‘ÅĻ›ëW™ßũaÂg9aœ3{8úTĶX˛ŒÃo#y| (Ąš#–įũŦūuģE[xŲC Ënã¯Ĩ=š8ҚGT Ææ žŋ\TĻÖå%ddj‘ŗÔ"d%‘qËryöSø‘V,õ›;ĻHŖb˛6?vãĒšÕß\E2‡ˇ¨Pš<`ķĐō? |iqÜo…âYv–ûø>™ĮéWemP^Æŗ*‘ŒgŽŖŽÔ',zį4ØŲZ0üÃ#ĩ9IãÁõŦöĐ̘~#O´ "ĒŪ|ã!šųGZŧĀiėŋ{ėOÁ¤'ˇüü*Ŧ‹öŋā.VŌÜķčĖxūFĩˆ,@##¸íZIčĸ\Õ —Ė_ŨÜFà Ņēō:Šį5ÉÛOq§j—v—–VÂŨ¤2ÁŊÁi§Öˇ~Å!•û;s*ˆŧ?ŠjZö•ėW‹*唏ŧ ¸?R ˇVsN7׊`i6‘Fč>BUVČã'ŋš"­ˇĶ­nÛô=I'žrs\œöŪlĪo;ŊļߝQˇĘöü˙Jŋws¨IiktĒÉ9`ˆ8ųNHÆ{āZj=ØŊĻ–ļĻŦą™âk‹Õ"ūįÔûW3Šé"}i VąØîį¸~ ^GøV‘× åÁ…mŨā†Cæ:w˛• û°ÍZ:Քč†D á€Ûˇ;sГAúU{ĐØŽU3)< ķ$*FĪ9<ŽĩĄ`Ö÷—B)Lėæį6(ČųNÜÆ*ôŅØ\›Ė‰\ōfBuĮãŌ—NËBėę…ŅÚ,…ÆBņSíeŗ-SI• ÕŦmŌå/.(Ļ(HįqۜËųVŸÚ —îʝŪėzUI4kG•cä ˛qUŋáZ]ŽÄČ7‡nŅS.WÔÖ7] RC €pÃßé\˙ˆgk9áˇËķQ^Së¸p+bđ˜ė„I…g+œp3ÜU ^%ŠÎŌ_´ÄĄŌēõ6¤¯Q öTĶoëcäEG“9`sßۚŠyo$7%æĀĘŅđ÷üęÖŧėq¸$â@YG|Ž?ZĄ4÷OķI# Ŗoļ{×fSrč3-\{–le[k†ÜG/G'īd K{¨@4농˕>A“š¸qžqYđ*I"¤ĶHŠH @ā˙ĀŠˇē–gQaPVÆđxlúâļÄÆ—´NZ3:Ŗ.č‰gj`”=Ĩ#I xÁ‘rĮ ƒš‚īIō¤BPƒ…“žoJež›3Į2šã’¤W§ŠErœŽ<˛w64ëøxŗg+2Ŗp8#“Z!đ:z×.,@ŋ[•—isĩ‰cz-áŒM„ ÷×9''ĩxXÚ*õ=l%G(z$‚x<úRŠÄ‡IģŠ`æáÎ3–<ŠØyœļrqØW❪;#&ÕŲ2ŅUáēI_jaęWWE(ûĸm3šÁÆ3@Č>´ŖšA¯lã’AŌ Č§c‘Íį=¨pjč˙‰†ž˙–­˙ 5^ČīY÷ßņ˙§œã÷Í˙ĸڀ/1Øš'ëô¨‹äô9súVoŒĶÂĢ#2°ĩrŦŦAČÕåš$ˇ^øQô9/ņ c¨;3”#ļíÜw8Ēą/CŲwĀ ō2GÖšCã8-ë›kĀ,¯ÎLFs–íƒŌŧōĪûDŲif!y˙ Õ[íߟ/?ÅÛn)uŽžÁ⠑NõälFåyÉĸž„ģŗÖnõí:Ō;ÂŌ‰^Ę/6XcGn;ŸđĢ–Wp_XAw(“ t6ļĪNÕä÷öYk~3Eˇš9Ļ´SdP?Ėvdí#žiö‹'öĻ‹ũŋö¯ė†Ō&w…YąÎqü]zûRhjįŽ\āp1íū?į5˙ ˇü%@0L.~Īöøvôëõ¯1ņɔÜÛZ[ŪEöm:?ŗKtŌ?"Žz“ž•ĩáŲ$ŧņö›u'™!:"+Hčy|ķ’GZ|ĸlôąĶŒNp)XØgߏzķ?Ø=įŽuTš;—ļ9d°_4tÆ;ÖN•m}§Ÿj1Û_5đÎ.ūūį;Cú{Q`ģ=ˆmfÆ9î1Í)+´`ƒūījņ}âá|EĄ^,ZĮ3ÍÔb9 \įc7Sé€*…Š›ŋÚ­‚\ÉŽ˙k˛€ÍˆķĪ'žÔXgģ 9īÍ;*ŧ>´ĐN[Ŋ~c’ ÔRĮ9ĪĨ40'č( sˇĩ)@Aãš@/{ĶņĀé×â§ M¤ô4 PPˇNĩÍę':ÍÁķÎ?ũšēLķ\Ö GöÅČ˙b?ëZŅøŒ1 pxĨÆIāR…^~´ =ëĩžp?*3īÁĒšĄ€ãŠŅ“œö*ŧ͏Á÷ĄxĻ1ĒyĨ$7Jr)Fzw3RN>QšÍŧŗC”K‰F žŽ*ķáæXúķ52éI |œVuäãM´kB*UY‘m=æ›*íg%NAÉ*{ŸÄäūUŠĒëi{ ^Į•KĨˆģBOe#vCßō¨08<0Āī֒(íÚG{ˆUŲ€•ÜáŌŧXJ”•_‰u=JØyŅģ‚÷J~×ŦuhIƒr9|+‚@ŸÆ¯[ĻŖaŧŦ‰ˇpĄ ZÛÚ[ÅēâD XųkŒrxüjĻĄ9û2ē˜ÎHãxūĩęÕiQĩú} 5U8ŖŸĩ‡SĶ”\ŲČn?:ī!ŸjŋÜzÔ-§Üd`Ė“…O˜tÁãôNËŗPF %°} §OeÉÛ,HĮˇŠųžuŗ>‹ęô¤îô*KđÚ$†K›+īßŨl3Č Czæ+3ė^!đũõ‰ŽÖx§yĄ÷F¨ŠĩKãŒ%Ōˇ-WTĶ1ö Ã,CŦWéZöž.ƒw“ŠA%¤§į”?8Õ¨ˇ÷‡,Ÿģ14_ˆ7 ¤ęv…á sBēFŪcÜĨtē´ÖķXŲ]ũĻæÛ÷‰ ØĄdqŒ˛0l`c9úTvŪĐĻ– ģ(cTŽaqˆ[ävŒAž*ôO”÷2Ot÷M$Žņ‰†VØų@ôTJTītŽnYĮFh<ƒĀĮZUÚ§åNĮ˙¯\øĶ¯ŦB˜.ÆŨ§œōHÉÁöūT“j×8át4Īĩ¤Ũ–PXãļ8SIFīB\ŦO}gi¨ßEoÖ9„—€OsŌļK}ŪųčzfĒØ}ÛŦV’#"¨rįžA>æ¤ē”ZÁ$ōV%'ƒíډģŲ Ú’I’=’ qũ׍Šč–—0ÃÄÛטĪO›ž>„ÕÛ=V›4šAå3J3G¯×œÂ­ŧjęRNŒ1é횔Ú*I= ĮŌiˇŅ\1™eÜĘŊ”€zXö>ļŧŌ,ļL¤Á–ہĶĻī]rƒŧcķÍc}ž;_¨ŒMŗ…ā1q‘ųÕ)_ChF3ƒ‹õ(Ãá봕BßLЃš]ŒˆĀsŒG$÷íXņŒŖļ‘ëM€UBɌwČ?ĘŊaeäōy5˜–q\jwŸiZEŲ°‘Ÿ“~š§ Ĩņ#–pŊš<įJÕôEĒŨÎé¯­ÔˇFˤÛV&8‹ĀūĩŦÃ-‘ëÖ°ôKĢK]: bød€LėÃOz͎Ŋļē`Ę >Ŋ:Ņ8JúĸęUƒ–Œ˛@ä‘ũÚŠö'‰ŋŅ'ō˙–lģ”Z¸F ō:ĶNI=ë;´+äļŊ ĩŽâŽ@ƒ˙¯\žŠwsĨkv6Ņ@íjīū‘w•ØFĶÔzûWc<ŅÁ Ë'GĻsū¨Žw]ĩ–įGaķ$ģ™CČāŽƒ=û\V°kvŒĒ%{#j;k7‚3p´ ¸žzƒõĨBÚE‘aJā•cĮˡ§N†šx.5Ŋ/l"ČÃvī#Ÿ'(ÎFAųsƒĘäg֝mâ‹Čåē–ę%Ø Œ€A@_Œ€0žšŖŲÎZĻ5%ÕŌhVãĘŲ!9˛˛ũėéĶ‘úÔúxÍŗ>sæHī‘îM`ÍâčŤĖö˛Å˜ƒ¸å1ĪĻ7/×"´ėõíííãŽíT#Ee “Įl{ÎĨÂkr”ĸŲĄ<ņÚÛŧ’‘ŗv^=NÎY6G1fÉ ōEY¸.-äŽUĘ8ÚF{V5î“ikēíTŦōÔ/§oåúš¸F-YîEIM;Äģ3Ė͏;P•ˆz…ŋ ĢĢ•2i˒ÚĐôô˙JŠ=/Ė´K‹YČŨWœ‚éĮķ÷ŦũB×RˇģĶÁ˜8ķŽpBū´ã}­˛Rģ‰vķR…ĸ)ųäE-ˇ×ĶĄ¨$žÂxe‰Bd—jdgq~”’]]ĀL#ķÜUÂäį=Īz|R9šfŗŒ|…Á…ã¨üjâ”]‘ÄäîC2ųsI/ʲø‘üë{ !@ĮjÄļ€ŨÎķfIŠÛÆŪkzF/{k&´F5ü~]ë6>W’3ÍU>˜­ģ˜šx,€HāŸZÁ–9ĀR 2Ŧãë]x ęTũŸc›EŠķtį2ōPäzŨ†O:“8ČÉŽdI*Ī3”b;SŲŨߛh‚Āvo9#ԌĮĪ$<nIYyÍ#(*C ĀõŊS°šžæYĐųhšü*ņë^‹‹Ôöc$ŅIe%ļ„7ŪcœúzQO˜/ö¨#ûߞ(ŽÚZÄŨB6Øī—Ĩ F);ēqJËŌŊsËō8äŌdãÅ/|R怌jŽĄƒy§ Ëf˙Đ´1ģŋZ§z€^XõÍ˙ 5cukõM*æÆWtŽâ32ÆA¨t­6-HĩĶāgxíãōÕߖ#ßÖ´ ”Āĩ ž)^™ ˇaNzöŽoP%ĩ‹€Üá#ūĩĶžAk™Ôŋä3>?šZڏÄaˆøHÎr)Ã'$ŠEįŠK@ŽÃÎ’8 äG´§•Ŋ&î2zŌr@=Š2Ā`ĶōĨ ņLÉÆh‘‚+1ãéWĨFĮ͓ËįjōxëBą!UË}ãɨn‹—Uėzõ̇#¯'ØU eS#Ø ôŽ|dšĸΜ9Ģ#&ĪU3ęÛ˛"§ &üįŽŽx­-Ûyëן˙]`ŨøjXÚ|'XŨ™ĀŒöĮ#ņŦų.uË2‘Č@y$'ûÉÎ.ONI&ž}RGîŗč'QĶZD˛"ČIˇ îã5Bų v¨Ŧ§/’ģpĀ~uB ~ÔÛ\ÍrAh#ķDQ/.8ŸŠčÂϊ[\èDAŒ€pŲÁ}kŌ¨Õ:ˇŊĪ2•ZüÖ˛7Lq¨n c4˙3pŊVŽY Â9ĶieܸlįĨYU I<âŧw–ģžĖ_N ›ËxÍ:Hc‘JHĄÔõdSŨ‚¨€~´ß5 (]Uąžŧž´kĐĨ.^Ĩ5Ķ´žfu-Ŧšû¨rŋ•]ˇņ>ŖhJęvžz)˙]ęE12Ød8?6Ö§`Hgž´›ž{U-ēüIaņ¤ˇ_C"3 ;UÛûğČU››…Õ"–ŒŌC힁‚:qõô÷SXWmĨÖæx‚ŋ÷ÔāũkHĩs*˙eŪ\<(Įv[j°äž§ŠŽˆF'ji¨=O@ˇkK+ õ;xå’6Bå#\ļÕ$āũj{XŪūē”:Ã*nŽŨ—gœˇĄöŦ[ÛZĸ[ßŲKdPFäŲŅ[_[^Įæ[ÜĮ*ŸîļMa+ÜÍĐŠ§#6_ÛŠßlŪ^ØÄh¤’ @õëPůaĩT^Nėđ2<×DĀ#9< VZßÜώ5­ÂB–ėĢöb¤–cßv))7Ą›ZĻhƒ…ãuf^8:晎 JOĶŦjS˜,™ĸ`˛ 8Î lsųÖ,ZÄrk—F9+rÖŅ u ĮķĀüh„z›Qi6Πá‡ËëTíÖe^› \~˙Ik{kqæd ´āķíŸåüĢ7Zē{)¤šS+Û˛Gģ `AũéÖĸÆdmŽ€ŦíJäXŒ‹û˛|ˇĮ ĶõÅT˛ņ 2‡cĘ%›Ë8ÎåÎ3Ôæ´Y Ô- Ž] €čĮŽ„u÷#õ­qb•¤Œ‹Š4̟ėûÖo,ŸŨĘzcú~+dYÛ5ú^˜WĪD(˛ĄIÉë×5RîžFĩšEYņæG"œŒnÜ㊇Mŧōį6WˑGFįk{g¨q‚GǃÍ>t[ģFT•ÆC\äΚĶĩÄūM¤ĒAķ%6ė;fĨˇˇ°”“ũė÷ŦĨ¤ll•ö#ŗ”Mrë”qūĐ˙‚öĐ]a‚G!Ā92¸Čëéȧ8ú˜sÂN 78ߟôŠdēļŽso$ʒc~Ō{gÎŗËVĩ™Ījļz\–Ŧ׋o:°Âœ¨$cŒŽ@ĐRGˇšŨYVPˆķ ‘ø|Š+^úhgŽØ,‰&ë„8ČlŒķū}Š—:\234{QÚ3ĀČÆz}­õ"Öšo!›†äßđ¤b +؎™Í`.šūpܲË2”v*Xm 1øŒū4ˇO¨ipŧō܈ía!™GŠĮ~*šSw¸'ύžÁ.,ėáō#ßEĖ`āŠöõt¤¸‘gÕ4šcûŋŧqôÛ˙×Ģļ*NļÁũԜžŨsøÖŊX|OŦÃdVŅĘUũA(qúĶK™ŗJ-Æ[čt¨üzŒuŦÛa˙ë‹~Aˆ´`wõĢ/}h‹¸ÜEėMU†æ3Š~æ@ÉqqČę8ŦuZŖ'fĖ­.įĘžŲ"ÉķüŖŽįŸčkz¨e åČŦqëīQ\X¤Ō™QŠIŗ8Î8ūfąî­Ļą(įkåU”`‚EzTņ-;ŲØãNĻ5kŖ}š ž f_ÚÉ%יŦų[÷Ģv%¤°Ÿ%ąžzâĨn˜=zŽ+šTfíē:ÜcZ 3œÔt‡UyRuPygųæ™kö¸~E˜GÉÁsĪJØÕNÛČČČ;VcC#Y™‹¨S÷Tujô¨â=Ĩ&Ē3†ĨgRđ-ƚ‚f}ņ‘‘ŌĢ™õXÂ(ęI+BÂe’Ô'FŒ"­Ŋrk˜ų$ĶGĄsÅJ,Éĩ¸–įRļw ŸĒāôUš˛5{AŽxü(ޚzÆčëWI#Đ):ž”uĨ8î3^ĄæŽ`ĩ0Rƒ× Ž*•é˙LĶ˙ëŗü†Õ ņToWũ2ßųjßúP˛HsQî9ÎxŠ8¨Ücå„!ws֚۴ŌĨ@=čäõĻ+ŽRHëÍ+rŋJAĀ8¤9ÎE1\Īņ`ûŅ“œ:hÁę(ÎO|P2@{RÎ)¸8<â—=Č ˙ 2vŒSXžÜZ2Å}MĘ Îzb“Œ oĖ'ō¤IÍI’_zqe#ŖļN8 rp­ $/Ķ .pM #‘’7-ūP€Žk—Ô÷&ŗ9 •Ø™ĮQ×ĩtĻM§s\ŨûíyÉė‰ÖˇŖņ˜b5^=Ŧƒn!sQ˜ˇa•Š1ęËũE0ģĄÄŖåGđí]ŒķSîO‚? FŽ3ųPŽ3× Ž1C Ŧx⋠@: âŊj]œKģæČė:R  b:RF…#ųÎy8õĻng)*rßZ1ÔÕ֕"RōßžTyÅÜą#œî=ęME×ˍLŠŦOŸŊ튆<°ĘCzŋ•y،š§dz9}$ęs68‘¸ƒŸÎŠŨŦE\\ccŦ@ôĮøT×s‹yfq÷WŽį5ZŪÃ#ĪšÜ\ŒíĪčkÄŖQĶ—4ObŊ5WŨFRØÛ‰ĨNˇųî įĸđüĢj7ˇŒˆ\š<¸fĀsíéSƊjFĒ3Đ qBdõ§Z´Ēŋx)aĄI4ˇ .U$Ą–"CĨOøtĨF‘'XĻ—z˛–VÆŋ\ĶŽ!hå1 ˇF@~đ¨æ˜<0Ũ'Î¨āœŽ@čsúūU)Ŋ.íw¸\ÂÆA&S`R šû˜ęGÖ¨FˆRå„pdũ§=sVlāxē¸o0œ…OáL~?ZŌ ˜}:Õķ(hfŠķģô1dŠ„+=ŧ™ų‹ÁíÉZĩh×QN-ό´J§g€Lõ.¨āiS *ŒČBëÚ˛ã×Ųc)2p¸ W%ßéŪŠ78ØR‚„ĩeë’ŌÜGfNØŲ|ÉzÛõ|€ąÆŠģUzĀTVvŠŠdvķ%“–|u˙õJ°J*Ÿ—’sÚŗ“Ņ$iÍŠŸrĸęî bTiôņÍFÚU˛Éž ÖnÍ `œ{wĸĘu+6 A+#aqÎTp?\ÔÍl. Ü\.Ā y@:œúš}NŠT”ZW¸ļúîˇa3[îKā‹š˛6ŊO˙ ŊÍÔŋk3Y4ÁƒĄ {0äwĒ:ī –iNfw;ɇOŌŦ]¸aØđTŗā=8÷ĨîŪÉWŲÉÚQ4 žÔŧŅÜGp­ũÆķ1žÎ_ÆĢéwöÂâæĪQļď#ƝĶ!°IėzŌŗ#Ķmä;áķ-ŽcáüĻ+øjŠōÛS•c/:]ˆˆ+æ 8Æî¸5QQ؈ĐĻâÔduú}Ņv´žC"áÆđ>\ŸĪąü ĒRA}ŧ$I3(ķ°ŊG>=ę7ÄēdōĩΟ=ģJT—_œd }:é-u­2ømyöØ[ Û¨ŦĨuĐ劅ĩ2-mf’Ųę6‚8_`ˇēŽLą8ÉSÜ`į­]“DsĄ7t?Ä'Ŋ3Wĩ%ÅĒ\“"žgž~™ĢČģĐcÛŌŗu]Ėã‡*–Ôn”]˜‚Ä6î9Įžƒ&¨ēOp‹g4“4ŖæVęÉķw<×s´gĻâ‘Ō=ÃrúŒÖŠŊ÷&Tg3áģÛË[IŦõd uŦ­*žC˙´ŪœcڝĄŨÛÜęZ…Ņ–0e˜G8ʨ÷ú֖ŗoj-'ģpŅʑ’$Š“ĮCŠÎŅôš%ž.§ ëŊ•ą"å˛NC~){­šÃšœ‘¸nŖB‘rz@?NžôدĄ¸WhåRąąôôīÚšš!k{Ų|Û÷Hã`māE$`|ĀãÔū•Kû-˙tˇw ~fæVŨ–ĮŸF<ŌPOЃŠ.ĮOyâ;+Yndi-$i¸ {Ôęzmô)p- ĸE Ŧa5GOŌmMŌJî—`ŠŪMāŒĮ§;Ģm´Í5†æ˛ˇ=šŒR—ģ°×4ĩ!]VŌ&G+c8 Ē@õÆyŠĩm€ōũ¤RŸĖV.ĩáHoîUá†ĄŲąļ§įŒtč*Ķ&Œ8Ŗrŗr9Úvđ =häM\mÉ=†q ôUd$a”ô=ˆŦkÍ:g˜ÜN6´ˆyļAúg­Q‡EģÔnc—íwŋf*à ¯šHåXŒ6>Ļ­H5ģyØ˛?˜Bmú ƒĪ=čååzÛŨįԕâšBļęŽÜ˜’{ņĀ"ŦËm{•ŊĢ§Ú’A#“øAūŧW)ĻíxnââoFf´•¸VuŽ:œsĀ?ė-¯åxŧû]6B3˜ĻROĶŽIÃĖIĢY”ę°yO2Čķ"š€o˜'­Euyuug"_B˛"ąˆáøAöų‡äkĨĩŧ†úÜÉA2’)ô"ĨÉŒ`~Ui˛ãmŒ u.¯Đ[íĘR— €1Įđūuw>â+g+2´šBÁÎáŸŅEvŲbU¸ˇ(˛(ÁR>V‡ō•sŠģxž5û1ˇ•aÎßV ōN€V´äŽÚ4†‰ļ_} ÜJ͐&X°ãœÖuūžlęV@Ũ›læānRAāûzVåö— ôģŲåFéō>ŽJûKŋ‚YĸŠ9™y+‚NáūĩeĖÎišElv1N˛ZĮ+€ sžÃĒw6÷PˆŌEge/Î:W?§jŌ¤Kkw“ ‹‚OEj`@ШŠW Ž2:ŽŖđĒĸĸ¤œ™Š)Á¨Ą ūІÎŨ"\/ņüŲ'ąΟúŠK RD0r]ĪO Ŧ˛ŅA+DĶžæS•įߟ¯ >i!Uʘˆā=˛zæģ1TŌ|ĪfeBrŲ ĘÂąĩc&õũę¤kʁÉüjŨ”0É#Ī6đÁÉüyŦûâ—˛āc5͆…ꤍąũŪĸŲIļę'S¸9įŪļ”ƒųÖ5†>Ø•ÂĄāüĢ_9SĖ?‰di‚ø5*ĖâuiŽĄ*(ÄÚןán**¨üîg~ŊxéŌ¤ ĮZo—W¨yĄ€b“ļZp@sœU îo´îzĘĀ˙ß W™ąĀĒ™7úqĮüļoũ¨X¸ģ‚Î6y8ÁŗUâ-ŸųĀ;ōj§Œ ą ˙­˙BŽ~IŒtĮË_*rĩŒęMÅØô'ņ6ŸˇÂsî‘|GŖļHÔ!ãą$JķĖž„“L-×<xü+%Ž•ö2öŒõ˜ÜIšŦ6ŠÅ?vãXé¨ÁĨxbŌîā9…a‰NÁ“ÎҜ}MNšÕƒĖā\ÄQJ\pŲÆ=øü+Ќš•ėlŲĄœ’1A#F^ĘV—)˛#ĩä,ƒœc뚝¯íŲ Ä ¨Üs"ũßīuéū5@Yvõö¤$aTSS´’âd§•"c0qˇ‘€s×*iãPą(öËríCæ˜ûsĪjå°˙-.đ;úÖ|ZĨĨÅûZÅ*>#0ÁųŠā{ņPͯY[jąéō—G—!d#äÜ6ņžßxP5I_L曑ÎzÖī‰mŦlíîLUÔĄyWŅ•@NĐ:ũsYsCNtí0'Ė7ΧŊk”ÁČÅA¨nƒN™á?ŧT$qĐú×ÎK9Ôot΍Ŗ‡„i¨[c>KČu8­ä%[€§ŗ:ūFļT/\Ž˜ÆkžĐ⍷–Kå|Į?í`įõa[4^w”\o=‡ųúÖ-ÍdT%}[%r Į…ˇ!ȧ…] ŖŪ— Ē;ą=+3ewąJøHlØDŒÎJā)įŦØõ­C2†„HÅƝ*HčzŨc—;sĀĮŌĒęņMi+2oeV (ägŠĢ‹OršŖËŠ™csl#–kYŅQæmąš!Ī=‰ëZQ ™@‘^ĪŨAķ˙gúVdPÚ@ĮÖ\ōĒãAėߙ­ƒk(‘bšæSŠ{‘Ģ{AXĨ&ĶkqõĒw:^œ` ˇ—´ÜLÕ§‚v;ۄíŧāÄSRĘ@”tĀŪ:”Ō&÷ŅŖIydÁâ¸V@~aƒ´Zĩ-Âjx¸‰Ë¤„GÜā“ÔŸČ֓Úä/<˛Lí}++;sĢ <Ž ēáČ=ŋĪ­hŸ6č)Š'~†Äeĩ¨d|Æ8ä˙.•Ĩ3%ˇ”™Ũ)ϝZ‘Iŗ,ŽÍũĮ$§ĐûS/Ąc#åne<#äjģ4ĻĶž„ŋdû‚/‘‘Bũ@íSAlSt“miäœt˙?ÖĨŨžW<ŸĘšrŨņšM˛^îåyĸÄĐ 2ĄãpôĻĩßĖĄxˇ}ĐŨ ü*ĐT'= šdđŦŅ…Cĩ•ƒŽô] öÖ"´[×d™æŗŽŦôÂûg#ã9VÚGåW<™äâIū@?åš'ęsO[xãMĒŖn1ŽšúĶģ]JS’ęQX/"…†§ ˆ¸ä8PÎ}žkSN‰í,Ö9Ĩ2¸Î_ëéV”įĸņQXŽTĘ\w‰`Ÿo=Čáˆ9úsS\@'„ÆĀíë‘Õ}ÅLŦLcĩēõôŖšėv˛9msMēÕ"KC(ŽhVGFÜWĖbģWuęr+ ņu9ØĖéįĖR+k 6ÁÔņʏĀ×{qoĘmlĢ•uûĘ}ųé\­åæ§|Ž‘[MöîęãĻđ¸e`=1øšŪœŪÆ2Š(]ũš/$¸ŸN0]™„$3cĖ9Ü1ŲūúĢēCĩΝí{ui+ŗ3š8bŪÎ:tÍ_å¨1ĪnX# zˇĘKüwõ¨Ķ\WXíįļķ$`€# sˇĄíœR•ž–RܝŽoŦH{•K˜3Ė‘š=Ę÷ü+.ę%ŋÔ/n-\1…"h\?‹?ūĒŌ˛aqË`^%V*a”ü§ŒņĪk&ßt:ÎĨ4`™ūä¤.x#ŋĨL+5ų$lĻŖ‰ZPđą’Čvū}?Z”¸’ņžxČe9ōÍgXjÖÛ$†mҏsļ2¤=?<ÕMfãNļŗ™Ž!6Մwwlįđ¤ÕŪ†^ŅXž :Ö˙O‡|x*8aÁČū™­ 6ŽĐOąRkL(ĩąšWåeo,°¤kļDÜŠé‚Čãõ5<Ŧĸļ)ęÖp˙iĖ\áå]‘į āäҧéNĐ2,Ā´dí$tU¯VÚúQVCgVƒŲôĸ來˛Mhz ŒŸzyRÎ+ŌßÃÚAįû&×õÄ…'öŒÆ—j¯’ŧ~•ÔZzŗ?eæ2ŪÅo4ČōÖ7TÚĀ~bŗŽüg5ÄķÛģۛĩŅP:ᆠzs]2*ĸ€€ GaKžNjôcîĢ#kđđ” âXîdŊY‘Jį,yôcAđ…˜…%•dF ¯´dĒŧú”q]oĨ7# ûzS xgËĶ/ ‚viŽcÚŲ|Æ|õsM˙„V&—Ė7R™¸;WįÃãîãŒq]'hã"ŽØĸė,cCáĢK{Ë+ȚUšŌ?- IäûķÖĨ}Ģ˙nHŽ0„dm§ķĘö­elįƒį@!Ns@Yļūˇ‚+HË´ŅY‡,ĒnGS‘ÔV…ĨģÃ5Ē1f}¸bz€?Ě´X08éõ¤pIõĸáa¸,['ž)6žŖŽiå˛0ŋ^iAĮ Œį4JGŌžYzSC ķ@Š'8ŽwQ'ûfãˇÉõމ˜q\õûŦN:üŠũkJ?†#ā++Œšw9Ō• žôģnyčqžžÔėq‘HɎžônųG͚@1ÎÄ,NúšEAåí` =ˆīFDŗįUūu.îzUm ē•Ū6… +á{†äUcp˛>é§eŨéõŠîdÉĘzõ5 Š Š“Î{Šōs VžĘ'­—áoûŲn/ éQM›‘1Â0*qčĪéDØĩ *žÅqk9åēÔco3uĩĢËŒã>Õä%guąëĘmXį4]ZëNžå$ą2Č|˛ÎÜäõ­&×­ŠĘ^+ˆS“šGŽrzv¨îl%°/QäiF‚=Č ”9ä:÷ÍL÷ÖŌŽ],F$‡†8ãŽ8ôŌ䛨įåVŗ-[Nę|Ëiî0 d7ŨũjüwņĘč’+$™Š÷ŦôŠėäŽ˙FHåČoč}x¨äÔoŒĻKŨ<…Æ$1pÃßrÆ~AyÃTîuČĘÃrõ‹´ˇ<đyŦ]7SĶaŽY>ÜĨO8|ƒøUÆ×ôÆ#mäy'ĸķXJœ¯h›ÂĸŨĸKčî6Û+J<°Ŗ€ĻjņQå’H'8Ŧûû˜ÎžgķPI1ŲËvĢÃ$Åé”*ôsŒúûŌq|žđArɤKČØ*ęĀ÷SNbrBŽŪ‡ŠcŲ[¸Ë˙y8"Ŗk!Î&˜?đ’įúT%ŅŖsĩŌōŦFF#n'ØV}Œ>m›J͉f“ĖSˇ;~”—“Ésk É4›ŨkQ"UÂíáxāUŋunZ´aęT—íD1C*ŸŧąúVV¤"ōÅæC7œœm$ščr: āúŠæqÄ˙*ļ`:ÔĸD#īnAgv˛– ÄŠÃ(Ģdˇ*F8éԊÖ9’á™ö‰`!K¯”ƒ‚Æļ-§ŠxÁR ÆJƒČ˙RŅčK÷dĐđž`ۏΕ"ØŨqúĶC€{ķUīüßąÉäî,Hhä ķúdūvÔļĄW’H?J]Ümێõ‡¨Öéå\A Āę[,¸úæ´ŖŋˆÛ,Á\}€c’sŠ9”“Đ.ˇykđĶ6Áíž˙•N֐¤(Ŧ‘F0yĒ×S>Ԇ{=yŸÖŽČÆ;RwŨ„\[ģ"Vģx‚/Oē3ųÔBÅc”˜ §_ēĮöâŸ,ņD I&ž6ōM7íACæ9P„,›ŋˆ i2œĸļ#HîđÎV9C1=vœTÂuŒ(h&ú&Gæ*x™„*”`“ßې0 HÆ*nۃI%Š™Î@ÃãĒ˛ķÆ —H˛›ūX(˙ixüĒÄđŦÛ_ũ\‹Ę˛įQ& ˜åų=Æ÷Ļ›čW´’Ņ2§ö\҆[{ûˆTŒX°?… ¯kbö°O °Čۛ)ƒÛŋáZ^bą%H9ô9Ĩ!v€Niķ;]ŽSR÷¤“iâ[ËKhá¸ŌŨÄcŖ|“WbņŽšqį‹‹|˙~3ŠĻĮk zSdŒJ :ƒ“ĐŒŌj=‡j;¸ũÆäæ•9ũŨô$ö ØŖRģcö5ļ¸@$›k˛8û¸'߸sĻY9ųāLŸl‚MŨOîĨš.ãc .HĸeB”ļmÚöØüΞģ.B‘dũâ2:đi%Ôėî\Á+,čNÂUšĮU?Ęši Ŋ‚[hãŋ—”?8Į˙ŦÔÛęĖe†{vn„yaCsœ;įŊkEés)á%ē‘ßŲÜE{h“ Ęnãs֔ĎāŦkģ;WžBū$ˇÔ$ŧYAVSʈ€ŖƯ¯Š'‘Š_Y^æ Ž8÷āsÎ*].ĖËØUļĮgå$yØĒ3ÉwŽZî+‰Ž -Ŗg/yĩ°;øÎīŠ–iæ7ŨG&âŅ’3ÅTĩņš–×Ųšōå–vašHųxiAJ7šĒŖQS“ą[PŠiæx °f`­ķ …L7ž{vŦķmnŌīK7ˆÍ•F#ëߑ]„:ƐĀGí°ą`?X–N>Iá~{:œÕ:lŽ/ĒĘגfMŽšŌY![.ü’ nhÆzzՃ¤Äe+ߨČüĢH:CŠôÁRž§õŦĨR^…*Z†Ŋ­&…öu´­ŪÕäBWæg3X)­­úچŽ(¤e>wšÜFCm“]vŋáØuģ›d˜ ļ}Åvä8Îp*É> T’ųĸģP× 2Œ}ÅVÜWƒĪ5ĶĶqJ[™Ę ēÄdųˇƒXŒ‡ŒcŪŦhŅĻ™bDWļú‚Ŗ ņ}  ãčj´ž“ír¤×qā™vîČÃ1Īo¨Ģ3xBû•I ÆČ“Ž>éįˇ5mÁŽ[“ô6SU͚SßKo(ęŦGŨéæūĮžĒķ)8 „gô¸õĐīĩ îŪ(’5ŽyI‘Ž ā1ŪŠĪĻͧYG,čĄY¸Ve°¸ČĀŠT õORųĒ.‡fáõȊ@ņ(ŌÉ’ÃØdŅTôy"KŨ26,%û 3×֊֜[*2˛=ŒĐŌãœĶHâŌģNĮ=O‘Åäô zPBė˙ÄÃO>’9˙Į¯ā䚡x?Ķė ũc˙č˜ ÖWĖŗg@vąö¨?ŗíš;ūū7øÔúšĘځĮúBtükįÄÖvˇR[ÉÖôlGÅy¸ÉMI(ŗĢ MÔŊ•ËĮNĩbr˛˙ßį˙Žm.ÍmĨ`„ƒæŋ\}k?ūÛ?sw×ūyTköú‰’ĸ¸ÜŅļ &rŠÕēģ7žQWjÆö›ˇû6Õ¤$“d““ŌĻÚĪ5‡wzúv‹c2œ Ä­Čč@Ī­S>1D!žÆxŖ)¸î IhãÔI^ä_ē1îuäŅŽ ÄĢ<%ã°ē8Ø š‰äöÅA/‹"û#Mog4‡Ę,¤•°@äu'ĄĒ‚įJT2i<ąœ`ŽõĪGâTY RÃ+ŖžTlųʎ Éå{zŌ°–k+•tO5‘Šp›U'?í!\čĘē \.9ZæÛWš‚ŪÆrb÷3Æë•RĘĨû“Ž0*FņMē#J`˜ÛĒ’ŽHPÄc¯CԊ7c ŒqĐRáp3ĀÅsĶøĻÚ)\}žf‰ *‘ŽŽ8įî}ęŦ^)hî/{y J‡jV<įüδĝ؁‘Ķ4t8ĮZÓÄ8Rwŗœ#ĘĐDr÷SŒqĶ$ŸjÜÎėÅ!8¤Ø7”m+žiq’=Š€†1׎zøgW¸>‹ō5Ņ ãÚšŊAÖ'ô)ō5Ĩ/ˆÆģ÷€čA¤+¸š— 85ÚĪ<\ ¸9æšä"=°=M+qQ ß1=“Žzf„ē‰žÃãM‘ÎOR}iŗ6Ô [ũiÄĒŠ%ļ¨į>•JI ¯¸ë\øĒʔgNļšˆ›S‘žy§:œž€œĐp ëPŪL"ļ`xŪBƒųô÷ū¸¯šģ“æ>š)F>īBŒâMN_ŗBv[§ĖŌgãĻ+V8ãB„ĀĒ Ū P…0zãúU–F=:ũi2b­ī>¤Cē"Q\t#éTot˜n‹™¤„q,}žŖéĮâk[i<Ŗšgr$œÕ)4S6į4ÚUŨ”bKQėÄ{ØņžXôî+VÎČŽ™^6b7ģ71ė=*û[$ĨXtppAĻl•įžéēœÄEr왞øsO¸*â"ūÉëõ¨åđĩ‹B@ĘēŽp3ųVŧwi÷yVčAâŸķ3 Ũ迚ę[Q{œĖzEĨ…ÔbqrąôUnBˇ×¸­ËkÃŗūyČwíę*üųŠåšëĀaÎ*ŠĘĐ_¤.Ą”îtä? >ũi9šŊw.•=ŋx2ˇ<9ãxų—ôéVŌx]CFáķŨNpj]ĖOLUItËyĘĒŅÉ×|GiÍKiŊM}ĮĢÜĪŊĖZ͔ĒÜšl§`OqZč͝€+Å%–¯]L'‰ōąŗ >õē\ĢcœtúUĪeb&´K ĐģŨĐúzĶō?Ÿ­4–#¯CÛŊ*'Ë΍]ĖŦŦgŨ"ú9ĪČ<šO\u ūtĶmöhÔ ^eꃄTjŗ[9 ÉįÕaÆ@Ž6cøœ ˇ´ gvÅfEvōj7$h~DUųŗę¨ŠæiGĖR5<BK}3€W°”ļ\E5kŊ‹|’́Uoce_:?õąō¤sĮuŖdDfeIņ3g?ĖP×J™uIsÃaáS*r‡KíEĖ™  ‰‚<šže rCwĻŨÚÅ4LžTlH8,ƒ­S–_&é%…\(%¤„.JžäVŒP\Åē˜õôü*¤šŗLq¨ũ Ÿdąš1ˆ"bGĖÁ•1ô{‡iõ՗ öČö¨2s¸Ž˜÷И€ģ‰#ëC“šqĢ.æiŅāOõRÜ)īļB(“'ÜÔ¯vCWŲžL‚sëMųXFGzJL¯i$STԕ~MZįū“HfÖcûš‘?ī¨&­á@;ģúÔep:̉Ôoĸ0¯oĩ[[‘q$ņJŅļ@dîãúVŒ:ū°ņnQlĀu\EPÖĮŪ9ÆŸĪ­XXJĸMúÍ xjˇgI‹Ōö,˙njã­Ĩģ{ƒU›Qŋ YlcÁ9h÷e[đėiņʲ&ā#īÔSЌņš„ŌčWģ.„ēĖ÷ū#k›ˆ|ĸąíTĪUíĶŅļŽ†ŠęDÖĮ,ĶR=p‘øĶ‚äSHË PxÍuœAŒRįŧã4Öģ… âˆšE‰l§ķ™öDXlj0ÅIÎpTõöĒėjĩ…›L’›X ąå‘ļGŽ8īšI´Û) ĢŲĀę§€ŅƒŽßŌąGŠ#đyR<‚C|ĒųdšUĪ ôЇˆĶOĶŪdiž[UŲHųW Á#<ˇN´‡s^kK[ˆ„s[Ã"HW@@>ŧĐm-DĻcm˜P!,dCĮ5&ŗ#inŠĐ€nWqČķüÍV´ņR_X´ûœŧ›~Á%˛}6šh6ŖĩĩXÂ-ŧJq´(z~§ķ5Ķ´õAØ­önŨˇĘg˙ÕߨV9ņ;¤–îmJÃ4k#!`JĄY0=Χ¸Š‡ˆüÁ"-¤‰ Fv"E!UT6x<ä0â“bš­-¤2´Rēq —U‚py#ņ5d˙ęs\Øņ ŸÉ†äMŌ ķXDŠ­ #“]0¸^;Ķqžô0ČÆ(íJFO& ĩx­sē'Wœ÷?•t{9õŽwPÕüĢZ+Ū9ņī”zԌ÷Ąq€ <9Wk<õ°É"ԞÔĶ6DväįŊ/?Ē:Šī•Dāį#=qQ9ōE˛ŠAԚKŠŗŗd.ЍÜ÷Ļ&UNŌxįŊw ÄqØR“€:œ×ÍWÄĘŗÔúl>hîģé×ǜŠē„ŪX+äDÁˇ÷Ÿˇå֞šģg21Ģ•ØŧnĮ'Ō§1¨P¨qĀéí\čŨûÚŊ†Á9• ‰S‡R1ƒ˙׊†ölíUYˇ 7#Ŧkķdũđķo ßʛCWŲŨ'¯ZBÁFFsīKxĪ4c ĢcĨ+€žinƒŸåM wzŽæ¤P¨ÕíųĶXŨ=¨O¨õŨ ™#s—P}ˆĻˆŠœÃ!dSÆHįNŽ94îM–Ä"á—‰Ņxr SŋUKˆ.ƒ€ŠpqČ'<ųšĶQ°ØöŦ­N(äm›J„ _â|€ášjĖSRĩîjô9ŒzĶËsŌ˜>Ѓ8Y@î8& ēÔíŦã-!ćĸ ¤Ŗwd_2ûĘķ[{tlĘŌŖ­l*ü€xžæŗ4ĢbĖo9]ßÂ+TIį˙¯W.Ãz.V8z€Ĩ4åēŒ}(ÚG$đ§gå÷ô¨ˇbtŨ"– Ō$Ix3yhsĶ=ęÍŧQÛ°F0Ŗß¯ŊR’GŧžHã^-å #öéĐ~uwiāƒßĩ\’Z3I¤’CˆPs“î*Ŋō+ŲĘĄIÂĢjW“ZÜĀąœ œū#úf›qĒZËm2Uļž\pHė?:J/ĄŒĨŖEģˆ&l˜ÜŽĨAz?Ķa(7Õ!všrĮk¨ī‘íڐ“éMTbūÕ)Ȩ̈šo˜ã;ˆ9éŒđ)îÎ)ápNi†Uc…Æ:œQ&æî8ŽX頀*c§õ¨ŽeEŒŗņžNOĨ ´ÖRÁ§.}rhĀ Õ Î/ŦHįįq˙ŽģÎqTîķöûß;˙č€dzĻBZî<}Ą?­gĪ6°'"ÖŅĸ Zc’?*ŅÕq‹^įí ũiXpMy˜í$Žœ<í} s6ē›K/ûúßáJSt˜]Al‘ųls„ž‡ąąÃ¨îũ^‡Ú¸á/yhtNĨâՑZK˜ltg¸]Ņė‰Hb:Ŗ8ö$œķiwcyŦä[•ĀRËûĀzāæ•Ŧ†Ŗ Ãnō2Š3šz‚0ßŌ¨˙Â/ndŪnĻ9`Ķpŋ>píĮ>˜¯ ‹Ņcš|ÜiPƐ™­c‹#]Ę üGF[ͯ%ą•lĖii™Š•_Ÿî{ä“Hž´U!æšOÆĨą•O”Ā튋ū8wĢ šˇFq (¤(É8ÄōŠĘci#9#ß9Ģ‹­ĘC)HfTÃDø‘'†aF“OˇbLÆ=Ō>(PāG| ŨŽ‚Š4T@1@Õú€Š 6Ē.ŪîŸ4ČŦ ˆī†Ū(ØžķąÉéŸĘĨ”ō;͎8 $1€@Qˇîô‡Ķ“ųÔigyqCGĪʨ9ëüĒucž‚”ļN6Œf€+-…˛LĶ-ŧ+#rX = 58RĶ­! ģZRO9 bsÎ=h"‚Øãšql|ŊčĀm'šæoFu›¯pŸĘēl2zšæo>]bëčŸĘĩŖņWøļq֛#mˆ‘ÉčrM8įąD¤ŧģ˛6§ë]ŊO5’ĸÆÜäã­U”y’61ōŒ ļHÁ בė&c“™ĀÆīĨpfiŲu=<ļ’ŠQšt,”íãŽ)’‚ĒYˆÜMLČnųǎ ‹u¸‡3Đ7Í|˙ĄîÍģl:Æ!öū\ŸsÜūu`° ¤Ëv Ž”â8ÆZM„säDųN0wQŠe˛ˇŲ!gË7–3Oŧeû3ƒî6 zž= GŠĮNÔÕíaĢŪ×#™Ė´¸Ũ´d(š­įúCC3Fƒ”ÎGN{Ž?:žĘ|ČƒĮQU&Ķā‘FĢĀ p)ÅĮФ9v,˛“÷OjĨ;ž†Ą´C?g9bŧÎsS;˛)>ˉ$Ž0ŗ;ĶÉbĨ?×pę5d\r9Ĩq-‡"|„g5Jū4+Ä0ōyaÁQŽqë×ôĢc!ēįĶŗ@˛ÆČāípAühēžĄ+X˛XHmŋÖÎāí 9oCíQZiķ\L×ZŠĢHWåÛTl7Xkéo"‚ŽõÆyü+ĨAöÆkFÜĸ\_ēV[d\fL~#ņ÷3Æŋ2ĄN)á7(e?Z “õŠręĖmmVä pޏθ<‘p0ÄqŸ^)ΈĖrĄ‡Ą–ÃŦ´d~"ž@÷“Ô­-„ßii-įXŖ—™2sžßĨI§Čīd|ĮŪĘĖģS‚yŠĮÚ1ķF$ū SĶĨŠ.m_å‘dŨ†›‘N×V6öœŅi­‹žJČĨZ5pF0FsYˇ:mŧĶ`C)Ë>UúûÖģąØv0NGjΞGšļ]™Eo™ÛģQæ9ĻîŅN-28íŪ;ØwŗųŒßy‰ÉĮĩ<]ßĸųR!یoáúVÔq…ļ:PĀ.yČôëĮĨ7%°*]Šđŧn` ĻyOZ°p=슪5Ģ*îļÁČCÆ>‡ĩW‡YFfŽheWCĩ¸Ī#­O#esÛI3BbŦŠõvū´íĀšEãĒį‘Ågi:š‚FFsŨŒ‘×ŌŠ˜î%3ÍI…š#'ž•Ŗ†„ĒËx›ę€€ ’}sKĩTœõ5…ŖufÉņŨqž~Ļĩ–â?!%•–2ã8f¨qļæĒkvXrHÂķL+Áķč{ĶÕģŒ@LÄrvzT/q;MąFÖÆB¨ÜOŋ^)% œú ˇpų­펭´įéRũĸ&ČG\ŽäâŗnĐLÍģväP>˙•ũŒ§x`sŗƒšĶ– ÁT“čK%ëĖÆ(:‚øÆ8˙<ÕIb,|Ų#’@AĀ^ŒHĮ­[WWܰGœË0~\úąū•r+eSæ>CÁ=‡Ō›šŽ‰$§Ŧ™F [‡ĖōâŒÂ5\ķīšuôsE§Í'žÄ„?}F1ø ĐØƒŽÃ Ē:Š-hKēŽךÎíŗĻ5Ŧ2 Ō XĄ‘ n¨Ŗ$đxæĨ9ēcƒÖĨōCŠY#°"ĢIiåŠōex΄˙Nͤm6ē §TC.p)$‚â5..]ČÚøÁũ*’ßÉučmŽ:gv ]ķ[FKwčFUd;”ûŠĪĶuĻvŠå6HĒãŖn9ü*æn•ŸāŽĨģVmŨĶÚ_ĀĶ[4‚EØ +¸L÷ãšŌ:ŽV'R+tYkãÃy|ą#G÷†IëDzŒ3N¨ äŽFG'’1Â‘ūÉ+3™žö"üų¨”A¸•ŗ™vôewĪ÷ŊÍ JÛ9Â×ę^Ëm!†3ÔgĄĒ˛Äb}ĐŽIå×Ļ}ū´†č¨ ĐJŧHŠĐĄ1pzŌLĘčŽ)â“*¯‡é´đAúSŠöÉĪqDĮ*ęFAéųŽņM ’û¯ũ 1ŪˊõAļr>ō|¨čŒŅņÆņųUÉîâō' ŒĪ_ūŊgi8[‰ã\ĮQëZ+ōŽōhŌuÜ=0i–˜Ę4¨Ēw0tĻÚåm“#œTô)ŊMŊoÛĪ;h¨ô5?m,Üqôĸ´ŠĐÂĻᝁœŌ PG4ŊAĮZôĀŨ֎‡ƒIˇMįĩ)]ĀâŠŨ¯ú}€''{˙莎@âŠ^ĮũˆŪũ2-Ta-OspŸČԃķHéKŠũÛR>zĐÕ'ĶY¤./n—'8ūUæfŪFôogbæáŽŖŸJeÉe”ငū†Ē1üžŨ˙ßĪūĩbcŠCö™ßÜHƒÁö¯>?5|ÖØní´ũ"ŽĻXâHnŠf ‹{¸xdY"|meÁü˙ž†ŗ/ôįÔŧ;¤s´.|—§‘ĩ•˛=øŦø4-Rk7H‚ë+ äŗmx°=ũkčáđŖ…ŪįK#Ē#9ÜAÉĮøQ‰p‘ÍŨ¨uoc\¨đî¯å–ā0 +Fׇ!H,[ˇ'8é]-…ŗYéöĐČ۞8•Žä Uc$4îŧæšN}qJW@Åv{曜Ž:ҌŒSļĪ4ĀFf…u†\įփ@č)āÃņ÷¤ gāœķHWœĐeGzV#ĮZ{FF)›00M'Lšį¯ˆ:ÅÎxČCúWFSĻ9ŽoQ‰›QģÚHmŠĀVÔ~# GĀA3C€2ÜBĮå¨_ÖĢyR9g@Ü8Ā<įm"hūķÜs‚+šô<Äî$ÄŸũŌxĒ2Á ŸY# 01šŗ9ŪB!é÷ČííML ÚΕáæu“jč{Ų]9EJ}ĖäļģŗĪŲä|Š?Ą§E ŒŅN†đH8?CW¤ûÜŒķQĖ‘ËķĐ:(ÉSé^eî{é¯x†Ø„’hЌ#üĢč˙_5d‚Éĩ€'Úŗm´û‹uķāŸ÷Žōä$Ž=ŠT[A˛ę&†LādeIúöĄ.ÄÆŪé2(–đž>Hrš=ÕÆ+ۜUx"?fC¸Ų<99ëS…Á,ZĨ“kzˆyO—đ‹•$0Æ)ŲQĐæŽ ÉĄĄąÎGOjnāĀãŠU ü]éÛUzœOA[ĸ#\í f‚SœcųĶØí\ū›8PFqÍúąŲ\íéJĪōœöĨ*  rĒúƒŦ2`s ōÔ´x+\¸Fí%Ôįėäž*k¤Æ ĮĨtä™ã8íXßcŅâ&Áļ>ĨOøf´~ŲvFæAĀųHĪFéĪųÕÔWfwI´ÉUÁėsBîÜp8#ŠĻÃ4L¨ë’qØÔ¤Œמ1SĒ õBŽ(cŽ@ëY“ũ˛)%’ A”áH]ŪĀuā}ęžÂįígËōŽ’~đÅ>T‘§˛´orÎãœsƒŌŠ\7‘~n$0JĄŽ€‚y?˜­<.:€J§Oi2"rW89ÁÍ}‚īR-F(Re;AlFÆIč?:–Ũ%ˇ‚8‘”¨Aō•ÁzÕîmn!Œ4Û$­Ÿ•Ŋũ=ŠŅjqa•ŽžtëšwĖU™{'ģ"ų•ą—ŽDŒš¤ŠHäR‹Į>õ ” ģ…>đ#ĩ9Ū-ÚåB:m-‘Ī.7Ņ•ėęlŝŲ#S˓—"˜Öp°EeÉPüāĩg%…ûÚÆņŨäoēũĶÚĨ]Bú8ĻŗW ×Ę=ū•vūReMėŅbH|¤1Į$ž*ŧÚ,‰_' ¸â¤ˇÖ­V4I7Ã!ęĢĢ,SŒ¤¨ßCRîØ•mŒĻ´¸ų™1Û÷AÚ˙–zU{]hÚėĩĘ3îO(éôŽ„&•úk3ĄĐØĸrĮ­‡ĸŲtLg)ˇ;E´-c)ŊO^$g‚=)qš0zŠī<đŽi8ęi@õ  (=ÅPŧ'ûCO8į{˙č¯ }*ÖĨ`=˙ô@ ԗpļ˙¯…ūF” ;ŌęKƒi×z˙#Hn-ņŸ>/œqúח˜|hčŖŗ‘’zT7GũSÛaūF”ŨÚôûL÷đTw76ŌÚĖŠq1ŽÕpz\TīĖV&´b,­Č<ųkü…L éÛúÕëņ¤ø}nđŒbOļ¸…äķëLŗņ”Ö–Īq$pM?܌ļwr@9ĮBGŋZú$ũÔpŊĻyéĮāPĀéYv~"ąŸxšXâ`I$ü r>ĩ0Ö´ÖXąyī 2G9Į9ž¸Ļ+ĸđ$öŖ%MQ˛Õíīu­­™dŽ(Õ˃ܰĮč?:Ōw_ԁ­Hƒš\āôŠJŒŌ€⋁Ž{äŌ€JôĩXŧW°Š}˰˜_m+v"F`Ąˆ9=}éÄn ûúÔÄäyôύ<_99šÉɟKōÅGk o˜†čŸŗĘ2PõíĮjˇå‚OīUoÎŖ{Šíō.Ą!{ÉĘ˙õĒûÉļĶ"=M2æPҤiˇ.ĀÔ~5pß]Š•ouŒĩ.˜X2ö(sŸÂ§ÜĮįYˇÖ‘ExFˇ`ĒÉÆãôcö¤o s‘ō°˙'ŨōėĨx'}Ë!¸­e­Gõ´˙ “Ë|r˛|§đĪZ˛ŦK{{õŦėĐ8ĩšŽĮžÔ‡9ÎîĩL$’Ä~PŖ“M÷'ЀA9éÍU5ÆŠG”€yŒsÚ´7(V,x˙?ΨiĘŌ,—8æwÜŋNÔ.æđ\ąr!nWĘhîe͆ĮR§¨˙>•“5Ŗ%öbö7yqíÆÃ‚Mtr¨ÚKāMdģÃ,FŲĮî‘Ã$8Ãä{3E°¸#đĒP7›ŠŨ?'nÔõū´ČõU\,ĐMÕsLĶî‘Ōyˆ`V āôāJi;t‹eí€rÄæ˜ûvü´ c”gĖzįüiä¨P qYÛą•Ķ+Ÿ˜üĮëPHąÁ€Ģš%ŗĮŌĸbcõÕ`+ŅąëëLē8ļ˜ü?‘Ž7ĖŽhía”ēMŧ3 dې8ÉRgņŠ˙Â1c”ÚĶŦi´ybO”…%”}<~ĨhØmō?å’ķøTāį85ôQÖ(âvędĮáÍ>(&öˍ˛Ũ†1øņQ˙Â3cŋy{†v!¤c'2r7qĪ V×nÜúĐF21øæ­‘COŌ­ôéâyX”XÆöûĒ œšŋß"py<Ōņčh…#ži?\ŒsFGN˙ʐpyŖƒų͇'‘M8VÍ(āšw4ÜįņĄŽM%Ī4wĨ šį¯p5{’ØūUО„W=~?âir{å•mCI˜b>ēĘÃVĢÆYÔ qéŪ­gUF¸ž+,Î)ŌM—•ÍĒŽ+aBá†áųPĀ!ČĪĻ=(9u^ŊiÄJĖßuFXķĮēĩ!ē¸k{9%íöĒtWn¯pŪAw8ÜIĨ;Qģí|¤ ė†B>Ÿi@Ļ+xÔĻ(v5{#)§)ؐ­Š…“.×ęÃą4Kqs*á[xÂŊ[Ũōá˛MF1ģŽĨ%.č?•ŒKXĖj­ž%€$šEĩŠܑ€}jL2žŸ^j;‰6ī3tEÎ=M=ĘåMŨ•ÂųúžW”ļÚ?äUĖįž3UôûsĒoČwųß>õa‡¨ÅMŦŪŅD3ZCp6ˊãÜsUÚÆ[pM­Ë…îIķ/įÚ¯:îé÷ŠDxS’rŽLfיžnäŌadQ˙-bųÔՋiĸšæ)•nyĪŌ§!ã8úÕiė-į%ŧŧ0įrpiŨ=ËrƒŨX5+mäŠũäÎ{zū•eJGDûĒŽfŊ…äsĮ,S,ŪX;VSƒĪŋ­Mđ‡)wo$íWķÜtСu(j]Į™WåHÁæŗŽ,¤ˇC%˛ŗ…ųŧ˛r?*ž’Į(SŖnjbšTÆr‰ĪV’–˛ĐĮā K Dä…ŨŒeŋÎ)`Báã•68Ų†÷íZ>D%ƒ˛ƒƒÁô5͸egŒ*žã8 õ­\ԕŒ9GT9nTHÉ.bqÁ zũJ°XmR1õÍg>Ŗļ!Ņų„ā‘ŸÄKĢÖˇu(ßōÉÛųz*‹7š\ëŠx8<Á4g$Œ*ĩÃse`ŸéMķZã ŊbŽe)Í-…ŊuŠÕÎTgúņüĒ8­–HŠļō>÷Bž˜ĻVmņD€G÷^FlãØUåaĮ#ØŅtˆŒnõ"´rŅ“`ášęjĨģŗKq0RĪ$›UG÷@˙ąxÆŪ).cU8Œ†RqŸJf¸EîŲBG´d`äōZîl¤ÔHą 8c–9?BNqH™2ČÜvƒSīĀÉ#’)FJÍߚÎ÷ģ'Ed…ĮŪāsJĒXqŠ]ĘŧÍ(Čl€*lĘh^?ZRp>S’=Š9įĨI…æ§Ķ@[]˜š‚éGØæĪ@¤ôöâ­1ųzUîCJb…NĶ!ųû"I¤ĩ$1NÎũ yQøS`iîf#zŽq¸v4Ļ:ąØ˙N”Ųcy#ũâ̐r8aøPŧÉŊ´ąaclãŸ\F 늤ßkU>IČí \ųæ– æ’2LKŊOĖžgõŸ)/™3"’CĐ)8ÅVĶbŲa =[,GÔĶ/Đą˜ģ¤`§ãĪŊ>$¸† ŦNJĘpGMģjhæÜ5D˛*š!‘qîW–Ō6PJ šĪĨXŠd‘ŸQŽ”K–ŲĨvļ"Ë{d…JŦãčßãUŪŪMĮũ!Āëȝ°I#éÅV”œį>”&÷QZØĒÂāŽ$FëŒ~ĩ–ņ]GrŌ¤ą;r=Æ2yíZR@ĄÛ-¸“Ā#ĨEĖrų •ö§^#]tŖMjŲÉRĨHģEhĖÉmŽĖŽâ5"E\3?*A=>ĩ èĢhœ!8 ˇ3ģ€@čâŖsž˜ĀV2ĢĖõ:áxED€NBŅJ¤ö+ŸåLkˆ˙ˆI˙~ÚŦ|§1îiĨŽĶÉĪjoRs÷Āúä:FžĻGŊO’8/¨ēŊI­æÄ8-L@(ßÔķÉĮQ]ŧ*önEl"žFyÅiÖwgtöĘÝĪ'?ä ÷cđŖîaĮâlM"Km!ąT‰qÎ ķ’qŅ ŠÅvÎā%ĩÃ,ŧDø9ųxä˙ļ+^]6Îe!íĄe'%YĪ_ęIüh{ 9d–°°ô1ƒūzĘŠXMvŪ GŽöí’O!{#8Ü7ué֋[ĀĪæÚĖĄ3ģ ¤n ŋĪ÷qĪNkZ; HāhVÚ%ˆŒÂúU{M¸‰ĐÚB…ã1–D‚‘‚”ôĻtž&ˊ-ä ­ļHŽ29Nr Ĩˇ×EöŠk 1É’YÁ†R…”ŒjԋN˛…BĮk<Œ ~”A§ŲÚžč-aŒį9TæŲhœuõ¤$Í(ëīIŽ( ‰æ â7͚]Ŗõ¤Ā9ë@dĩ†ĨÚ§Š Ž9 50jįīHmZįė˙*ߨ1šįŽō5[Ŧŗü…kGâ0¯đfrĀ ;Kĸ™ĩ6m}ÍHë™PĐ>´Đ¸ëÖ¸sIˇ5ˇ,Ļ•7&4ĪĨG4Kq#†éŌĻ*Tg õĻģœœäšōîŌĐôÛqÕzŠ^ Ø$2Jœg’qūzÖâré‘W—c÷ģqü˙Šuy`eûŗH<Ōē1ĮéüëJ8WˌíUĀČĢzÅ nŨĐnmøZSRlQĀãØ^Ŗo úŒpŋ^j…Ë4÷0[`”H˙AZ rN@īøU _ÍŧqĖĮåö^ÕQJ×..bél“ކ—lûQÁ(ĪŌ€§Š?…Kd-zmp; mäiŗ:BËæ{“UšîIäÛjĄąÔõ?•4ŦK•‹¤ay4+Ž1Ч âģ4sb9WP­ˆĀbŦy†īæį  ÆĪœŒ*M¨§Ļ)ęr¤ž{Pîļ-'ÜŖ&—l˙ŧĮ'÷ãmϘÉylqÉ:ô+/ķ{Ë9<ņFÜĢ>:;QsUQ¤e›ũƒPK?{_ĖUČdŽa˜äGãŒŸĘž%‹~ÂWq+ßRæŌÕCË"ö‚K!ÚJŋ"/ =KĒ‘ōįžG& k(CnDØO]œgę:ÎąkÖˇY|˙,å\ņėsÍ\7ōĀŋŋˇ`;ŧGp&‡"}”e~MH›L øWG@ɜOŌžtËVL ÷ÎqĘ¤‚ö N@KįõĢŠ$ošëšMžĻn”`ĩęRĶXĖAˇŦmōąāÕėéųUM>28+Œ`…#žOô"މ6į€i Nö?0[۟ųk Ü=TsW€U;›­gî3jÍĐŦã¯sūEhí$œĶ“ąŦė’Ô¯tÄÂBÔŖœgųS4kžG85!f“š[j/”ŖžqīK€zbŖË?néę0š$ņƒH7$ämâĸ/JĘîiãš'ĨO‘ (9FæĖÜĘĶ+áļƒ°`zĶH¸´ŪĨ ‡ž W—+qž†Cõã\[ÜÂō,28‰Jō-œnĢ5–ŲÁ9-ŒīCVę‡*ŅܘРĮ'šrŠč2ÜŗÛDĖFōy§€ĀÉį ĨЅæ‚Ģ`|Ųãō5„-¯l#-änË0žūužÃŽpsMIUãŠ#&šæÔįĨ–ęáŖ†_•|ÅÁĮ\úÕŖŠ<f&EËãËŸĮŠ–î=ēĨĻ0Ų‹.8$ĩĄ$QJތ€îÎkG$Ši¨ĢÁw5äˇB@JŖL`įžę•îŲ3FQ{˛üÕxîÎBôĀĻ:áyІB.˧+˙Ŗ;˜HĮ9âš {éΕĄÆ.˜ĪsqēB,TH#ĩum.|‡ōÁ?wnEg&—¤ææ->;ŸŸnÕ¤$’´ŒåÍrÛŽÕ'œāšå/ĩ‚Ū û ą„v¨[æW##=ąÁí]Iw(*-”Åä˙ žĐdē[âˁî]yMŖķ§IÅ=BĨæ”I4íZæ}> ›¸•RQūĩOž2;T—ēŦˆģvĖæTŒ„?Ū=sRØÛžŸĻÅi$&TŽ0›”†ŨøVVĢgæŅā‘#0LŦņc¨>ŸZ¸¨94Eįnxg¸ŦíGX‹MuûD3˜Û"GšwvkIÁ䃜ôúV^­e-ęZGRŠp˛>OđŒÔBÜÖf˛Õ]m§[¨VTĄģ:āĶ.§ŠÖ&šW ˜ÔŎŌqĪŊfkqKs¤ÍHZBŋ*¯$ВæmDt:…Ĩé"Úe“ÔcķKƒŠĮ!ū"ø'éIĸ‰#RöŊÁTÕ5"Ŗ°ã>cgEærG÷qE;Dœj*ᱝGŠëƒ­/'éIɧrŧW p ÁⓀ)ÜSHÍ&ផJįūBVũ§˙Đjņ*…Ø˙‰•€˛üv1š‘É´ŧã˙Aj”Š }†j-LaėķÚāč-S8-ÚåXŽ\q^^?ãFôvb)Ā˙<Ô7|YÜqŌ6ūUÎø^ĶÄqjW¯Ŧ\ąˇ‘÷ÂĄÍÛđā é/ú ø˙žoĶčk‘Į–HŌújSÔoäŌôŽ" XyIķ‚@Ü@Îį­2×Ä0›4’ę9b¸ #X˜áˆČŽr9Įjžb†M>8#äœm#ĪŕĮ™æ‚œJΒ;€Ús͊÷Ō|¨ãoR)uëBŅˌø) 8į§ŋįD~ ͧŠGvfÚDŲoqĮN>ԟcŌŌ‰š%‰õe Hī‚ Ļ ;LĀ‘Hŗ÷¤‘ČĀíSŒdWωlŽ[Cc#+Ŗ\Ų€ Å ģąéÍ_ŸU´ˇ¸H&r˛ ’< ‘ĀĪjŽ|;ĻolDĀcŒîíÎ3ŒãŒÔĶiVw7biĄËŒd![2:{Ķ6MfÕ-mŽ@‘ĸ¸"°Bã;šū:ÔqøK–=é;0ų¸ļp ztÎ­›+V†w‹t0ãb“ĀĀĮãÅA‰a&8âm›>g'å`  d_đÚ-ĀW,‘2–Pü (<|Œ}iōx‚ĖF|š bŦŒ6ãîãŽĩ,šE”Ä´î,ģIÜz`äåI`‹2ˆŲŒŠUŲÜąpH<’}@Ą ‘rÚkˆ`ļq#´ĒŒJ˛Œ܂G#*kXŒô'G—em7šąČ\0+ēBBã8Āôųiî÷4ŨI´ķ֜[9“vŅ@Ä9Ī]5KĄĪU˙ĐkŖÜÍsˇo˙K¯øō­¨|Fūœų]Ž88?)ÁBĀgŌĨ™sŽz¯…F|ąjáĖéģŠŖ§,Ģx¸ ´‘ŽO VģŽ*ĘH,îE\bG@síU¯´*Ũt9öÜ+É[ž¤öš[yû%Á*|ÖųĮ~€*灂qĶŠŦ‘‰-æ;žräîô ņüĒS}pG,„&å+:ū5lPzdƒŽ:c4Æ%鏯z¯š\ˆmËšû̏~´ŌڏEGû[G_nMHܖčnĸÎФ q$í´zŪ­Į ĸÔ`/Žfá/Vė^­öčŧŗ…ŨŋŽq[ŨOnŠÎEė˙ZŌqi+)ÛŨf‚¨CœuīPÜŨÃnŸ9$ã'jäūUģ¸šRFȧŠ?ãÚ¤ĩ˛X›Ė—sČô˙ëÔī˛!ļ‚[š ˇ1íôVëWŖcR@p*@ˤzv¤bä6$ņI”’Z˛åžå,Š“Č>āŌÛŨÆđĻæUĀÚsĶ=š¨ež– ļ ÄG„ :c'ׂ*~-/ėī‘Ž›IöúæŽĖ§IĮXĸđ„`ķšŽYaˇ}¯ \Œōpj§Ønļ*GtŅācßK•Üd#ˇRXĶ56îĖųÛŲ}FÔņį¯<ÎĻ…Ã.Tįøwj!ad¨Č!NF>ī?™¨N‘1°Ã*€$Lœzf„[”–ŒŠ{Y<÷’ŪH¤‘F#ŠĒ×ŌO”ŠpëĩŒ:įƒl:´”FSėō•1ã )a ڔ)*ųŪTe˜÷nƒ…i ĢęE*iĘč€ÛZŦi ›Č`ģąÅG×ŪŦA Ę2ŧ× ää6sČ˜íO’Ā)m‘ P˙ 0ė uĩŧ"ã#p•Ø’$ãŽ˙Zč‡,åcžˇ4/Qô%6ļ퀯5“=9Ē×dĒ [—tvÜ+@ ¤ģĸĢäŠĪOjˏŽâ)`ÚJ<•9'$sĄŦęŅtĻâΜ-mNņzŽĩkøŪw)ÃĖ9 í'S.Ŗ•$ˇûkĮįLŽõÖ2| 1-ŽüqøŠŗ{ûĢ)Xr0ĪJĖë˛ŋŧĩ§ ’).•Ë:ŽƒųUĖIÅ6ŪßėÖņÆy*ä÷ÅHsg9õ5 ës9ĩĖė@ąšF,0§oãūMJgŽqL€“n¯÷ŗ’xõ§™[œûâ“ßS(Žâãv6(ĪzC–$ũjMģ@Á§Bx₷Ônˌ¯\Tâ5¸h ŠÁ||šôŠT6áŽÕVįMŽ}äĘęÃ3ëDmԙyĀÜšNF3ÁéU.Ũv­žíŌIžīį'Aė.cÃnüõČmŖ˙ZJC†TērÆ=¸č̊+X­zš3ŲOĩ)í“Aāô Œā×yĀ!éKڝÅĪATîūͰōüv¯ Rē'ûJÃũį˙Đhē‡ßŗČ÷ã˙Aj“o?…2üÖõÜč-SÆkËĮüHڏQ›0„véQŨ¨6w˙Ë6ííSg9öāCīQŨqe>rNÆūF¸a~dlö*^iŋÚ:DP‡ G–žnSŽpGpk ûÂW-žHĨ†I¸¤îu'<ō^Ĩuâ=5'˜á8'đīUŖÖm$.ŌBČ2É4eŒ¯NÕôvGKŠ’ž GP^ėy„0R‘`!!ūčĪË÷ĮåWt´ûϏ2ĄgWÂF…Tn Ķ“ũÚŲ‚Hį&‰žGPËęGķˇiåqū÷LzúQpŌÚėäĐchIáyZqŧt^„Æ@#šs /Qųõ ĮLŌ`˜Ļ6"Gw`A$žß_֍‡qÁ_ĪĨ?€:Đ1ØĶJ2xÉčĪĨ9U”ãn(Û¨¤*2:R•jc#P@äfŊŊ¨d;}é0p9 ŒW=vûRį>Ģ˙ Ščp{ƒ\õęíK :|Ÿú­¨ÛœÃđ2ŧŠæ63Į9ô¨ÔF‘ÁĪ\˙X ƒė+#QÔ!†i- ũˇĘ.‘ãƒØ}¨ÆĐöŅ^õŦg„Ä{ÚE]KRÛŠÅēxc;Æ1¸ã?ˆĮ\TßÛˇq2F$Ë!8ĀÉÆGåX‡ËĩVŽį ’o?3ž~POaõëZ––‘ũ Ŋ˛ĸų!“nüˆÎ6įŽx­y5(ĶKš,õiÖŠ-$ˇ {Áz’ĮlCq‚~žŪõŖg§$`K1ķĨeų ė*Ŋ’oĨÛō“”¸^éZaXđ3úW$ŽšqĶŪļ-ĘŖŽ˜õĒz” ¤K€@Ú9U×M§'¯­&ˌc>øĸå•Í]ÜtĐŖŸšuēIQģqį$āÕXí/l‰Éŋ9 GLöëVôâĘŲ0ļ˛zUŨŒŋ7'å6¤üĮ8%!Ē#pOŋz~ŪAĪæi͝¤ãŠ@ ¨ČÅFŦMwÃgšnm¸zĶ™l“Īĩ4!Põ§¸^Ãd€8Û"nR#•ËŽ-íđ1ģ{gŒūEC˜Lr?šFÄsŸ¯ĨgÅh“js}ĸ}…PüŪ§“^\lŲîĶ”›ŧUÍY.b"OŪĖyŦ3ųšŠââx­Ëš¨m<ÃÖO3÷€’=šŠˇmb1œķÅgžšŅļÛrnjzF?*”XŪąĪÚÕG°ĻJ“[–ZAô9ôÅ"üęŨzņP 8ģbk‚ãũßčj9,æG$Ĩ9#æįō§e{ܗBT^HĮœ(>ĩ9bSåQÅP´I^åÜm˜ōQ—ũGZœË,L‘ t.­? %¸Ą- ŒŸ60qNF2Ięivƒ†}ŊčųäByĨļĨ2ŒI˛[>S.Į˙dpi°Ä–äw cdŸZĩm‰ĻŽvœŒûÔrĢYÂŌFCÆ;HÉ_qZAũ“(ÂÎéis,ņKp€ōŗcĄ-ËųrĮ.Ö*+9ÁÅgiūeŧk"ČËģ<ŸĨlBņĘĄĐäwS×˙­DãĘËU9Ÿ,ˇ˛īRPŽŪš^†šėŊv‚;ŠjĸÛĘbpd9ģ}*F‹*{šÍŖDŨŦ؟*#į÷)uR]>ՆMēõĻč3ƒTo]ícķ6īÉÆųúĶMėRr–Æq°ƒ?+ΟîČj,Ü’úãņ ˙Jž]B ‡į Fâū ˙H“Ã"ŠšaĐđŪüUŨĸųĒnĘmڟ–üsĐšŽ…p éøĐ9…đĢļËy$˛ÁZNpxÆ>˜oÎē%S°åO{"”Ž8 c6š]žŧĶ€õĨ Dl=;ԘÍ! q‚kģČÔîŊʏĐWJT+žē†â]RėÁoæ(eÉķ˙õ­iI)jcZ.Q˛+ā3TL ĖžR—RU؁“øÖĸÚęķä1ëį-14ëāģ^ŲrOS*ŌÆOŨN:ęF—Ŋī™ZĮ}j‹qfÎ1ŽsŽ? Ĩ.qk k}î6’BÉąŽšį'Ļē}7Q…›e%˜ˇ;zûSšĶRûÂןyWšņœjš7cڏŗå՜•ĻŠ2j’Dd1˜EÁ/ÕĪ=‡?ĨtˇpßFdļ“zįĩ#čWĶ]4“YŠB­ß.Tž¤Tö:%Ũœ^\VĀ ä–•I4NŒšŊ… ąOF)O”*iŊ}MYû X‘lôÕhû ūrm㴋P¨Tėií`ˇf]ŪaŊ‚āĄŗ`~Uwæq‚:QsĨj0ŧmg‚GËûÕāŠ–;Ia@m@`oŪ/øĶtgmhJ+R5ÆqĮj ž˜öéR?PĪüz˙äEĨ:vĄ×ėy˙ļĢū4*3ėdęÁu+HŒøûŖéH€Ã5Z[=G§Ø€õŅƚlußņęŋŒĢIPŠØĨVа Ō3‘øÔĮOŋČ?fO1h6wāäYûú´{ ‰u`ēáĘį8ĄP7ąįĨJ,u˙.Š>ŗ _ėûķÖØ¤ƒühö3ėRŠŦ„ą/ŋZkuū"Ŧ đû!?öŅƅąÔz}ˆ‘×ũbŅėjtBuĄk#6āų—vņ¤ĘÃéĀūuw…Á#$dzVĻ.e™ízā/ī§įVEörmúüę­7F}gZVei$ĘēŖôĒRØZF‚åŖ GķČé[dŧ‹úī_ņĒ÷~Ą,~\vDĢ0Ũ™Ļzuĸ4*˜ē°ftÚtŽŌ:”Ūã ãqĶ5AŽ#{•/÷ĖaÉ'ã9öēÖ7øŗaô‘Ɛé÷ÛãqhIį.ŊãTéTĩŦC•=ŅPS=8*ŽKHæ9š4p=Tf­}–ütąnŊ|ÅĄmuÜØŋ=üÅãõŠT*īcUZ)čĖų4ø­ã2¤’DČ xüEAį\Į+2\$ÃnߝĮå[/ew$Lfß7}ÆĸeÉbßdz¨‘pZ¸ĶšÜ"îÆbę{i~O›=ēTđę–r1tB0ß/ųíWdĶŽdØ˙a| Æw¯CøÕ]á_?Oggrr]N9÷>Õ^Âú´Ÿŧ[C"IQ†ėnã< V‘#%^@Ĩ~÷ĩDŪgR„Ņ휤Ē0:aĐo•›ÉYųí#+cõŠö!í#Ņ’´‘#Ō)ĮSœí¤iPî“>ÕTčúĐmd&B1ūąT÷÷÷§ÃĻŪŪf›pšã‰PŒzriũ]­ČuˇCYev ĄĪĖ?J‘™ŒSŠŨÆIčÕ:iWPĐX¸aĪß_ņĢgtéąŦœ@ËĮëS:RēåDBJ×lĄ5ą0ĘŦPļûãЊ°aPÜiē“Å$kg+‚>]Ėš۟Ĩ\û=ī– ĶåȝËĮOjŸc>ÅûXw*[nq#å˜ō}6ųØ&ädŠSÅZŠŪú8Õ[O›=Îå˙‚ęĘūxļ-œĀRrWĻ~´*5:ŖJS…õdfÕ|ĨÁ@,?­En‘ÂX0)!<†ôú֟ŲîŽOØĨ?đ%֚m¯ÃéŌ•ô%Oõ§ËQĢ4g'MžkęUš(Ų@ 0#ŒÕ6†â˙F”Ēᔓ‘øUÃi¨ÆįĘą›Ę'”,§ōæ¤{kßᰛī/øĐéOĸV/ŽĻY7[rc‡#ũŋūĩS˜ÜąÁ†6<žú~&ĩÚ×Pf%´ųČ˙yÆĸ{=@ :ÍƏe>Å{H§tÎrK{UKlđüĨsۜ˙‰¨Ä0+ān û<ã×é[˛i÷䟸—NWĶå˙Š.“tßķũBW$īąRÄy•C¤€í`~œÔG!°=ÁĢ Ŗ^Ō'B;Ŗ*ŸĐÔ aŦÂBžŸ<ĢĐ6T0úķÍÆWŅûh§Ģ#`Kú n;†ĢOeŠ)ÉĶnžWüi>è(ĶįĮüühtĻēœvLŽ)Ŧ2qVZŌøl.?õ¨Ú+~kĄ˙lô¤Ą.ÃįrŗŠ‘XšÜh‘Ã?Y”Tš,%ĘēãĻå#?Ŧą…IjzĐāĸ‘M8×iĪa¸Å74ōÃÍę(„**ŌíM?ũé?ô¸d*•ËŠYĀ˙—˙^4^<¨=¨ vĀ˜Ļ‚8įĩ;#Qq1ģG ĨÁíŌ”Ž(ÛS{BKS¨öa˛ŲR#ļsŸĨhã°öŽz˙_‹HÖ§ŠK ‰CFŒÚܹ䷏Ĩ+††˙$gփĀ÷Žsū;Q˙0Ŋ_8člڕ|ejz階ūĩs|xūtüW<<_k×û3U˙Ā6Ĩ_[Đ3Vülڏ@Đč `=)?*Ā>0ˇčÚfĢíū†ÔÅņĢä.Ēļlpi†įGÎ0)A9œ×;˙ mŋũõQ˙noM>1´Séö7Ŗq“žŊ$y-lĻ1)°sžy̚~ŖũĄ#Ąˆ&H§9ʒGtãĶšuĢŅø§N‚FhôŨEÛ,E“ ßZVîIŅßĨ¯°‡‹Ŧ˙įËSö˙C~i?á/°–0ëiŠí# ‹FæAŊ€ŧšį‡‹ėķ˙ZĄõæôīøL-s˙˜öoFŊA3|­*ŽšŦâû?ųōÔ˙đ Í7ū ,ãėz˜úŲŊtdzVfŖŠ}‚îĖ;’\ōüķYßđ™XĖÖڀQԛGĻÉâ]6r&|Ī*^ÉŽĶØŒŠ­‚÷&O•ZаHßŧØqŒqÉįĨoœŽá\Œ^"ŌÕÎĶ.à \Š[éžŧ¸ōĢđ˜Xn˙]D˙ۛ˙…-ÂÉŠz/8ÅsËã ãĶQ˙Ā7˙ wü%Ö?ķ፟ûsđ¤î7x­ ĮŠüëOéɡuŊúd€Z8ū”i˙ķí¨ŸûtziĐmžhaĮJĀ>/Ķú}ŸQūŧßü)§Ævp`ÔGÖÍ˙ho9e‰Ũvî\¸ā~5†ŧcۜ|a¤÷Ÿø ˙áFÛ Øu ¨=kŸ˙„ËJ$á/8ôĩđĨ1Ķ?š{úõđĄc>´Ö€|k¤˙v÷˙$˙ kx×Hôģé˙>˛…47X t¨%ųbgØX¨ČŊaŸčŲeÍØ#¯ú,œ~•ņΊAŨ`ŽŅ_ü)“tZŸZŽ; k‘m+yņ™vđ6¨9?—įY˙đ”CĶėrœĮį/ĖŖt\üß§JĨqâ :`Į1*¸ZÖL €8Ē0x›ÂÍi][2Îá^@-_‡ÆN8éĪJ5 Ŗļ2 ##ŒS:vŽoū˙ã™î2?éÖOđϟˆ?ōŪāįė˛ņ4jGDãw8éL'ąŽwūũ‰U¸œ‘ŒŗI‘Ÿø 0øë@8&æaĮ{yôŖQĻtR§ŸåQ~é5…˙ ·Øķzߌ.?Ĩ8xĶí˙1_÷Ŗaũ*lRą°A äÕIîĸ‚X#ļé›b`qœwĒGÅŪ?wVĩ?W?áQO¯x~ãË'UĩŨnCįƒŒZ,;“]ęöÖlË8u*:•Ā?BzĶāÔmn§XМ˛îoËĶ8Íb]Ũč*/öĒK$ģQĀē Ę­[]øvŌE–RÛ*0œ˙ëĨnā™Đ$`tú⊆ÆūŌø3ZÜÅ:¯Ū1°oåEEŦišßŊÂF2MSŸV‰8Ü?:į5+ŠÔHšûېį÷ÍZ‰‡&šqŧTÛz8¯.ˇ%ŽfnĩrŪâby‘¨ŌcÔŊM’įuõ™ô-üŋúÕĘYÍ!į5ĸ˛9ŧ´ųV˙ĐMgM5ôvĐ d$.āšôÉĮõ Z崏pŦ’I#2Ē…į#<~„ūVT[‹7ŠQē7YOqĪø Il­ã‚Y=¯ŧ>āH;€ÚåÅ4Adx–ÅŲ‚Ŧ§jo8QĮÔgÔÕÁĒÅöĪŗėqûß+yÛģëŌ˛ŋ˛ė–Ü€)hÆâ üšëšŊeiœĶ•f‘FđYÉŽpN:S°‚[\Īäí)“ËTĀÉ?7ôSJž ˛xĖ 9 ,Ž1„fč $z]œq4‹ĖûێG'ßÜūt‡N´Iáa™A8bŖ Ÿ\Rc,AŦYËeárI€ŦÊĮ?×ōĨū׹ĀoĩRÕOÛoxū5˙ĐEZÉĒ亂ëŧŸâOũP"Ö1ĨŌwü)Z€ wŖoz^Ôå įŌ¸Áâ˜I dzŅ֑y§ž(€ãŠLķO^i­Á AÎGjČĩŧY5™”@ĒX,-„ĮQčwVē|Ėō4Øâgy5G,&†wli˜æ•ÉÂûǟĐRö‚ãvƒšQĀ÷Ĩ^ϜßwđρšŽĄ%‹Û„ōKJáBģ‘‘œVMļ´bŽg[X–Bī$‹ģ‚@į-í]'‘ ͙bG(2Ĩ—$öŖĘˆ,dFƒ-’6ŒgŽqL]EŒ÷ SÛŠôŪôŠđxëKƒ€}é{SGŨj`djz´ö7æ/)3`OVl7x~ĩZĮV’7ŠÉc‡Ę–,ĢœōžÃÖņ¸%T’É8Š6"ž €mãĻsšBBã‘ĪLĐ<qN qū{PzPØÆí÷üéÚ>ņú u!íô4‡Ģ_L†ōÜðĸ(,‚7sôŸĘŦXęÍyv#ØlŦA wpå{ž*ųŽ9į{Á”x˙ë “ËHŨYUąÔ{P!Jƒœ€?:đqüéOL˙ž´‹÷M{Õ{Û§ļkp¨Ŧ%”FÄļ6įĄŧՎ‡i$ŽF~†‹¨ękö¤…â‰Äs€„ɍ­†lt_›ôŠôínKەC Ēŗ2Ÿ›æ įŨ=k xdĀ6­ blˆÔäzQpiܑnãZ`ë֒6,ŠI䊐t ž{ÕY.^;ømĘe$Gbų錏éV[ԚbIH"°éČėAÍ`Ũę…n|ߞ̴VHßpŽ[ˇ$mhYjböâXü ˆšd!ˇn#‘Ž:gņĢ#O˛ fŌœ3ˇîĮ$ ƒĶÔԋQ,HŽĮ%•@'ëLWŽŖ(ĀaÅPüųRGō­8+Žį šŪ2ī–ÉįÄR™mr(^[öĩ%üĩķĀ“îāļƒ×ĄÍkŲ]›´rčĒņžÆÚہ8ƒô"­}Š×j˙ŖĮōådsüÍ6(b‚‘F¨€ôQLVÔk@¨Ž1͚™ēTMÂæžŊÂÄ.IĮf¨%Ķ5Ũ寐‹ä…*ĖÜ0!ēņĮ"´H Į'ŒÕY!ŠI˜ŧjÅYpHįĄŖP9Xĩßŗ\5ԖA陙ƒ–aÚģxqŪĩôÛķ~’‡‰c18RˇÖŽÉioą$ō#.Ÿ* íÔØā†ÖA$Qîû¨¸´ !v.ãōŽ=qMhb=cC˙§7JPڛQ­mXá­Ą?XÅf˘/žË&›ąRÁŧ„ ã­l•qĮ Vũ´QęžzIĩX‡<Lgî3-ŖŅų'ūĪ^#`"û8ų‡]˙AŠĐ˛ļŅo–:ÜŦÖã :d{pj/°[8bŅ’Cl{pr:ô­ :Úo.i´€< ô¤Øím ´R ‚8•ēˆĐ.**ÆšGj*9˙Ųleptonica-1.86.0/prog/maptest.c000066400000000000000000000314101506303110300163430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * maptest.c * * Tests map function for RGB (uint32) keys and count (int32) values. * The underlying rbtree takes 64 bit keys and values, so it also works * transparently with 32 bit keys and values. * * We take a colormapped image and use the map to accumulate a * histogram of the colors, using the 32-bit rgb value as the key. * The value is the number of pixels with that color that we have seen. * * Also: * * test the forward and backward iterators on the map * * build an inverse colormap table using a map. * * test RGB histogram and counting functions in pix4.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static L_AMAP *BuildMapHistogram(PIX *pix, l_int32 factor, l_int32 print); static void DisplayMapHistogram(L_AMAP *m, PIXCMAP *cmap, const char *rootname); static void DisplayMapRGBHistogram(L_AMAP *m, const char *rootname); static void TestMapIterator1(L_AMAP *m, l_int32 print); static void TestMapIterator2(L_AMAP *m, l_int32 print); static void TestMapIterator3(L_AMAP *m, l_int32 print); static void TestMapIterator4(L_AMAP *m, l_int32 print); static void TestMapIterator5(L_AMAP *m, l_int32 print); l_int32 main(int argc, char **argv) { l_int32 i, n, w, h, ncolors; l_uint32 val32; L_AMAP *m; NUMA *na; PIX *pix; PIXCMAP *cmap; RB_TYPE key, value; RB_TYPE *pval; setLeptDebugOK(1); lept_mkdir("lept/map"); pix = pixRead("weasel8.240c.png"); pixGetDimensions(pix, &w, &h, NULL); lept_stderr("Image area in pixels: %d\n", w * h); cmap = pixGetColormap(pix); /* Build the histogram, stored in a map. Then compute * and display the histogram as the number of pixels vs * the colormap index */ m = BuildMapHistogram(pix, 1, FALSE); TestMapIterator1(m, FALSE); TestMapIterator2(m, FALSE); DisplayMapHistogram(m, cmap, "/tmp/lept/map/map1"); l_amapDestroy(&m); /* Ditto, but just with a few pixels */ m = BuildMapHistogram(pix, 14, TRUE); DisplayMapHistogram(m, cmap, "/tmp/lept/map/map2"); l_amapDestroy(&m); /* Do in-order tranversals, using the iterators */ m = BuildMapHistogram(pix, 7, FALSE); TestMapIterator1(m, TRUE); TestMapIterator2(m, TRUE); l_amapDestroy(&m); /* Do in-order tranversals, with iterators and destroying the map */ m = BuildMapHistogram(pix, 7, FALSE); TestMapIterator3(m, TRUE); lept_free(m); m = BuildMapHistogram(pix, 7, FALSE); TestMapIterator4(m, TRUE); lept_free(m); /* Do in-order tranversals, with iterators and reversing the map */ m = BuildMapHistogram(pix, 7, FALSE); TestMapIterator5(m, TRUE); l_amapDestroy(&m); /* Build a histogram the old-fashioned way */ na = pixGetCmapHistogram(pix, 1); numaWrite("/tmp/lept/map/map2.na", na); gplotSimple1(na, GPLOT_PNG, "/tmp/lept/map/map3", NULL); numaDestroy(&na); /* Build a separate map from (rgb) --> colormap index ... */ m = l_amapCreate(L_UINT_TYPE); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor32(cmap, i, &val32); key.utype = val32; value.itype = i; l_amapInsert(m, key, value); } /* ... and test the map */ for (i = 0; i < n; i++) { pixcmapGetColor32(cmap, i, &val32); key.utype = val32; pval = l_amapFind(m, key); if (pval && (i != pval->itype)) lept_stderr("i = %d != val = %llx\n", i, pval->itype); } l_amapDestroy(&m); pixDestroy(&pix); /* Build and display a real RGB histogram */ pix = pixRead("wyom.jpg"); m = pixGetColorAmapHistogram(pix, 1); DisplayMapRGBHistogram(m, "/tmp/lept/map/map4"); pixNumColors(pix, 1, &ncolors); lept_stderr(" Using pixNumColors: %d\n", ncolors); pixCountRGBColors(pix, 1, &ncolors); lept_stderr(" Using pixCountRGBColors: %d\n", ncolors); l_amapDestroy(&m); pixDestroy(&pix); return 0; } static L_AMAP * BuildMapHistogram(PIX *pix, l_int32 factor, l_int32 print) { l_int32 i, j, w, h, wpl, val; l_uint32 val32; l_uint32 *data, *line; L_AMAP *m; PIXCMAP *cmap; RB_TYPE key, value; RB_TYPE *pval; lept_stderr("\n --------------- Begin building map --------------\n"); m = l_amapCreate(L_UINT_TYPE); data = pixGetData(pix); wpl = pixGetWpl(pix); cmap = pixGetColormap(pix); pixGetDimensions(pix, &w, &h, NULL); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); pixcmapGetColor32(cmap, val, &val32); key.utype = val32; pval = l_amapFind(m, key); if (!pval) value.itype = 1; else value.itype = 1 + pval->itype; if (print) lept_stderr("key = %llx, val = %lld\n", key.utype, value.itype); l_amapInsert(m, key, value); } } lept_stderr("Size: %d\n", l_amapSize(m)); if (print) l_rbtreePrint(stderr, m); lept_stderr(" ----------- End Building map -----------------\n"); return m; } static void DisplayMapHistogram(L_AMAP *m, PIXCMAP *cmap, const char *rootname) { char buf[128]; l_int32 i, n, ival; l_uint32 val32; NUMA *na; RB_TYPE key; RB_TYPE *pval; n = pixcmapGetCount(cmap); na = numaCreate(n); for (i = 0; i < n; i++) { pixcmapGetColor32(cmap, i, &val32); key.utype = val32; pval = l_amapFind(m, key); if (pval) { ival = pval->itype; numaAddNumber(na, ival); } } gplotSimple1(na, GPLOT_PNG, rootname, NULL); snprintf(buf, sizeof(buf), "%s.png", rootname); l_fileDisplay(buf, 700, 0, 1.0); numaDestroy(&na); return; } static void DisplayMapRGBHistogram(L_AMAP *m, const char *rootname) { char buf[128]; l_int32 ncolors, npix, ival, maxn, maxn2; l_uint32 maxcolor; L_AMAP_NODE *n; NUMA *na; lept_stderr("\n --------------- Display RGB histogram ------------\n"); na = numaCreate(0); ncolors = npix = 0; maxn = 0; maxcolor = 0; n = l_amapGetFirst(m); while (n) { ncolors++; ival = n->value.itype; if (ival > maxn) { maxn = ival; maxcolor = n->key.utype; } numaAddNumber(na, ival); npix += ival; n = l_amapGetNext(n); } lept_stderr(" Num colors = %d, Num pixels = %d\n", ncolors, npix); lept_stderr(" Color %x has count %d\n", maxcolor, maxn); maxn2 = amapGetCountForColor(m, maxcolor); if (maxn != maxn2) lept_stderr(" Error: maxn2 = %d; not equal to %d\n", maxn, maxn2); gplotSimple1(na, GPLOT_PNG, rootname, NULL); snprintf(buf, sizeof(buf), "%s.png", rootname); l_fileDisplay(buf, 1400, 0, 1.0); numaDestroy(&na); return; } static void TestMapIterator1(L_AMAP *m, l_int32 print) /* forward iterator; fixed tree */ { l_int32 count, npix, ival; l_uint32 ukey; L_AMAP_NODE *n; n = l_amapGetFirst(m); count = 0; npix = 0; lept_stderr("\n ---------- Begin forward iter listing -----------\n"); while (n) { count++; ukey = n->key.utype; ival = n->value.itype; npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); n = l_amapGetNext(n); } lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); lept_stderr(" ------------ End forward iter listing -----------\n"); return; } static void TestMapIterator2(L_AMAP *m, l_int32 print) /* reverse iterator; fixed tree */ { l_int32 count, npix, ival; l_uint32 ukey; L_AMAP_NODE *n; n = l_amapGetLast(m); count = 0; npix = 0; lept_stderr("\n ---------- Begin reverse iter listing -----------\n"); while (n) { count++; ukey = n->key.utype; ival = n->value.itype; npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); n = l_amapGetPrev(n); } lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); lept_stderr(" ------------ End reverse iter listing -----------\n"); return; } static void TestMapIterator3(L_AMAP *m, l_int32 print) /* forward iterator; delete the tree */ { l_int32 count, npix, ival; l_uint32 ukey; L_AMAP_NODE *n, *nn; n = l_amapGetFirst(m); count = 0; npix = 0; lept_stderr("\n ------ Begin forward iter; delete tree ---------\n"); while (n) { nn = l_amapGetNext(n); count++; ukey = n->key.utype; ival = n->value.itype; npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); l_amapDelete(m, n->key); n = nn; } lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); lept_stderr(" ------ End forward iter; delete tree ---------\n"); return; } static void TestMapIterator4(L_AMAP *m, l_int32 print) /* reverse iterator; delete the tree */ { l_int32 count, npix, ival; l_uint32 ukey; L_AMAP_NODE *n, *np; n = l_amapGetLast(m); count = 0; npix = 0; lept_stderr("\n ------- Begin reverse iter; delete tree --------\n"); while (n) { np = l_amapGetPrev(n); count++; ukey = n->key.utype; ival = n->value.itype; npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); l_amapDelete(m, n->key); n = np; } lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); lept_stderr(" ------- End reverse iter; delete tree --------\n"); return; } static void TestMapIterator5(L_AMAP *m, l_int32 print) /* reverse iterator; rebuild the tree */ { l_int32 count, npix, ival; l_uint32 ukey; L_AMAP *m2; L_AMAP_NODE *n, *np; m2 = l_amapCreate(L_UINT_TYPE); n = l_amapGetLast(m); count = npix = 0; lept_stderr("\n ------- Begin reverse iter; rebuild tree --------\n"); while (n) { np = l_amapGetPrev(n); count++; ukey = n->key.utype; ival = n->value.itype; l_amapInsert(m2, n->key, n->value); npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); l_amapDelete(m, n->key); n = np; } m->root = m2->root; lept_free(m2); lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); count = npix = 0; n = l_amapGetLast(m); while (n) { np = l_amapGetPrev(n); count++; ukey = n->key.utype; ival = n->value.itype; npix += ival; if (print) lept_stderr("key = %x, val = %d\n", ukey, ival); n = np; } lept_stderr("Count from iterator: %d\n", count); lept_stderr("Number of pixels: %d\n", npix); lept_stderr(" ------- End reverse iter; rebuild tree --------\n"); return; } leptonica-1.86.0/prog/marge.jpg000066400000000000000000001005061506303110300163220ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙°@"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ō— Ēü˛ääU+ˆļ9Č#­=ĪĄ’ p:R°ÛLdyëVߌæŠÃÄëZ¸ūâ™$l6ŽG;…UTō1휕YÛ#¨ŋĸ8M2SØË‚}2ĻŽÁqûÄŨņ‘‘ž¸Ŧũ7éS¨8>r÷ö5ąĻڅ¸Wf 1ĩŊëŌĄogŠ–œÚšQ¤ŗ]ÛÜ!-uĘã+”ÕŖ Ē]˙=[ŲÁ2ŧ‘¨ 2sËgŖbšMtmÖ¯A˙žŸŌ¸q-Ū?3Ļ™–™ ÍoËô°õžĢ˜?Â+‚ŋCˇԅĮî‰úUƒ†cô¨¤Āˇ~{TĒīü?Ō˛[ĪsGÃØûyJęLké\EŽĨ“7Ú% ŗ8Ļž5ŌÛī;/ÔW]){§ ˆčLąÉ@síQŊ…ģš$?…e'‹4§ép?°ž"ͤ\Į˙} Ķ˜Č™ôk<Û§åUßÃZcōmĀúSŽądĮ‰ĐįŅ…Lē…ģ–U#ëG7˜Oá1ķˆŲ~UßÁļœ<ƒņÍtKu tuüę6UyKųœzEƒgx—G‹GHŪ K†8!Ē„ÁMœ09ރĮŌœ’äÖ‹˙Ûcõ¤öÜĪn œĐũh^ĸ ‘rx§ōô§sAÆ  E⟰n¤Lm§įšbč1Ԙ3t¨ģŅph™"cëųTâ CƒRÅv‘Â̰f’KōĘ 4\CDnNsKåžH'ĨWkĐ3ķcéQ}šww9ë@ÔyŠ:ĄúÕúŠšw,nĒ™äUP 0!ēsMõK.Úk‹D¤”ŊŠĪáë6ō°}‰Ŧ;ZÁl‘ŧl ¨VŒ~0°rJįĻj\™ĸå <+h͐]OąĒŌxTõw(üëI§a5›>íÄ÷ĐĨÎ;#Ÿo]§ÜŸp÷öEügåPÕÖ-Ũģt‘}éÂX›047Điyœ†ÍB ĀĮÜV5āš…÷ÉŽãÜWĸËĩíÁ5Îxą?(ûç֒Qč†Ķĩîq77ÍÁ<āÔ1Š@čFE^֎ÛÅ˙pU+qšˆ5Š‹ÜëôMfÚ R’ļÖŨžke5{9:LŋpöŠŧOBÊ펇g,k˜ņĮjɤiÉÅÕģŸ–U?ŖnāÖ{øb؜Ŗēũ*'đôéūĒíÅķ+R/Göf@Ípė1ČŽĘķDÔ&„Ä×ÖšKĢGļ¸hdáÅ\Lį}Ęo÷¨Šî­^ŪMŦ3‘j ĸžúSjxĮË@Ųd#ÖēûÅĒ W-hâ}+Šĩ?ģ„Đn63g §§Ũ§ŪĪz@¸Œ{ Õ3&ĩåW R 89āĶÁVe tŖ=&4Y†C-¸,¸æ¯Ævj˜˙E#ŅĢAWîũ* GM;cH™ŋé™?Ĩykœ‰sšôËĻÆ…)˙Ļ_ŌŧɇîÜũk•nĪBŸÂŒ6o˜ŌnĻ“Í6ēNJ—}Cš\Ō°ŽtDá7•!IÆ}ęŧŠËÁ5z[‰]Jģ -Ν­W’æS÷Ž~ĸCBœ|LŋZ֖ÎuŒ?”ÛXnĢ+vdSއĩm6Ŗv‘ÖgÚŖzJzÛ@Đ˒7‰SĮZŦāƒČ5~k™œ>æ'Ūã­SyžF~´ĩ_E$i—dvt5vÖf‚MĀg8$t¨<7‡ˇē !éžõ˛3ÂĨFOŨô5éáÚöf2•¤^áؒ´m;ƒvsĪōŽĨFš|ũˇ¯ū‚+dŨÛ\΍åHˇž5•â’Ŋv:ä'ū‚+“rŋSĻ“ģ1|ÕŊ?gCŽĒ+,Æ+~›tėכ_dvĐząŽŸčÎqü=Šā| îŌČ?ŅßũÚ#˙¸:ũ+ėͧšgIˇ†ōøC4jéēÕС†t–˙—8ŋ*įô™ãĩÔVIœ"t$ņŪēÅÕŦĨÔGčÂģ)I(œUū#8øGG#ū=TSOƒ´ŖČ‹J×…›/˙ßBž/-I“ķ­yŒ đmƒ2* |j9Yfēqq?ëWķĻ<ņq‡SøŌēĮÜxj;|u"äãüķXšüwēĮ˛åŲxë]ŽĻ<ī,Ą†ĪZåü~ČĐÚá#ČŌĐOc'mVÎv¸,ÍĘåŗUEÃ=ŧp‘Â*]&ÖėąU‡Ū¤û$oօę)dīMÍ{' šCĐæ•ēRTĐ/Ũ§ 5>í<iˆkž*ŧŽTUļAļĒĘŋ-L<Ųs‚iŽŦ†<ŌŠ+œ(<ÕWa%šôĻ(ų‡ÖƒH8 â€$¸ŧÅGV&"@˛c㊈/ĖÎM6Æļ×Âú‹FŦ#á†@Í#xWUQ˙ėqč(™Ÿz7КŅ} R­¤Ÿ•@úuâ}ëyüĐd+s2}ŲX~52jw‘–âAôjŒŲÜ/X\~†AÕōĨd#B=PĨÃū&§ūØģԊÛÍ.TœķXåv5gOéŠÅ¨wdšĐ¸¸¯AЍ˛*ōû¤"cÁ¨>”Årä~Té'÷H8Žž/ĸLJ‰Ž=+ÁôŖ.)6Žö?ŲˇŪWQVãņ%„Ŗ‰ü+ÍņÍ(ČõĨȊįg§ŽĢi/IV¸nHåԟiæëY!ÜtcųŌ‡mĀži¨ØNWGuœ3[!’%cޤUy49Oú §ÚŦéÎZŌ<õÛWTfÄŒ|' ŒĮ&>ĸ̟ N€„‘ZēĀŊ8§„ĨĖ;Œ>ŧįkCk$"4aČëŠÚ\Ķnf[xˇ˛äfŽ`å1¯xķŌ›Áˆ}*ėōGqläGü9Î* ēô­!+Ŗ)Ģ1ƒ¨ĒŌöÕųHĢ8æĸrEü@pįšlHž×ū=Ødįw5¨‰•_ĨfÛāÆė3÷š­(Ī čj 5¯<91=ĸ5æũaoĄ¯AÕo…æ˙wÁBģ€SĐ×3Ũôžslŧšn+­MÚIYH=*ģčfڙ>Õ˛šg+§#šÅŌļ‰g‘OM.Ī=3zĢĸ,ȤVûÅxĒŽ+`Đ1/U=öŦŲŲN҃ž”\-ĄLŧ}kNAōûšË=GÖĩ\å<⨖Tub ÅT~ĩĸ|ļSÃĨP”įëR3sÃKē+Đ{*ž>ĩĐ!I›Ë;ąš‡Ūô?Jįü3ūŽũsɌczØ2E¸5éa•āsÍ{æŒBÔ×ȍUs†äVŠƒÂCsž…PûäWOjc¸…eBĸVų7ī¯ĩbxŪÉėüFņ9äÁgę?úÕ͋čuRÜį`˙[ÍoÂ3nžëXp&é@ūuĐ@?ŅÔJķ+ü'uˆk/ú3?„ŌĮ‘gЌ*0ˇĐĶĸ˙S ąXGŠŦ÷BE`š•ĘÚČÅQČƒÍhŸ‡ö}ŽfWŌČŦG8Æ}Ģš žŖķŽÚ? Į]jŽ4ü?ˇ+y0?Zzø!ųoeüsū5×î_QK‘ëZčac> œ}ÛéПņϟ^ōę3qūŅŽË#ÔQ‘ëJ˰XķũSGŊŌāķßQ—nq’æšëËI/T3ŨØ&åšĮå]˙Œ“vŠvŒáׁõŽ&8dûEĢ…!60'Ō•:DČ'k}¸ü¤įĨE*ysēœTzw¤īՋą‹É?ŪĨ!ÄĢ ëMŠ|ŖƒLŠĮŸ…ĄæƒĐR¨āĐĢōĶ‚ķ֕GĘi9Ļ!Yp8¨ļ‚jSģy>´ ”ØrhÆ)\cšhÉĒ$ ÍQ´Ōs@¸Å˛sLŒūõ2xČŠ"A°Ÿ”j”ëĐüÂĖŠlįÚļc Gjķŋ[ęZhīŧ°‡j‚3[ĸÃ]Œå/ŅąęŖü+6™ĸgPȄ}Đj6ĩēćđŽsgˆŖ˙–°ŋáAšņ`nŠ÷ŌÔĢ›ĪĻŲŋŪˇŒ˙ĀEW“C͟­Ē~U‘ũ­Ž/ béš?á ÔĐâM1ū ŸđŖŪ x‹Eąĩ°3E† q—ˆųrB6°85ÖęšĖ—ö† lĻ\sŒ×-Ќĸ„ŠEäîQš2ąJđÉĪđ֟†Ŧ`žža:î šÅRēd‚9U†1ƒŸZš ^Ž—pō:‡W\`iŊˆCĒo iŌm!Yw Õy|jÜ$… ŗŠ-ÎŌ`•0ņ5“}íËõŸ4}ĶOcîÍųŠ…ü0VÍtƒ]°c9GÔՔÕ,Üq2ŸÄSįb´N"_ ^FšÚMgÜh×VÉŊŅ‚ƒ×é2]A$LĢ"ķīYČJ”nĩ5;‰ÅØBRŌ<ŽÕv5Å2ŲĐã>ĸ§Œ ;‡ã SąM¤ŠB@ǚĸ“yÎ sW”bĢjmļØsŅŊi"Šą4Į*>`*°˙TˇZŸi“N|pHjû˜ö­iėaW ÍšaP´eī āt5iWŸj–8˛ÄûU˛QĒ ˜ūõjBUC‘)žy5víãĩfË,kŧxZL{Wj2ÉîkēņÃOøWgūē?­s=™čSøQĩy¸ûTh…oO SV!#ǞÔÄŽß?ŨĨ$fj@Ŧ&rßvĢÛŽõWõĢzŌ˙ÄŊˆ¨l“ũ?ŨĢû&M{ČF-„ŒHvbŖĨgĪŲ‘‰ ķšžBpESs×­ofs][bŗ ÔĀ1íYMŪĩ”îļŨHL‹`‘ßöĒ€3ŽÕfQÉĒŪĻÚģáAēKŅßĘūĩ´Æ%•×Ę;ąÁÜ?Âąŧƒ{t§ŧ?Ö´Ą%œąlšôđšÄÂKßeûY§†0<¨mÃųU/É˙8É!‹Z¯~œšß†FĩŗWcæ–qÂÖ‹WfŖjŊjŧ~-XcuIÛŠŅKâ1m2fP1œ×C*ĄOŊ`ØŨ ĮСZī Ė2GĨfv­ įšęmäÆŌĢĮjĖo—Žô&7_bûŠhSÔTíÆĶMXœōʝй_aČ ZrÆhMĘ9SųTĒxÆ9úQ ŦƔãŸJ„ÆTæŦå˜đ*)cxČČëéEĐrŊĘ7÷)p*ËGŊ÷rĀ­>d5JORŽ=i6ֈŗųwmân¸ûĸŽdZÃIõ*Ú.d~3ōŸåTđs[ąÄ‹mppâąwļúÔĶšZn›ŗ;ŋ`Ø1,ģ™c-™7dæ¸ĪØÚÜŲ3ΐäナéŋ°m¤ÉŽypÆĸ[Ž7ąŖæ'­Ô÷–ū!NÛɔ˙ŧÆ˛įą¸ĩ¸*ē„Ŧ1ÜŌ°6tā§ĩ! }+ÜN›™­vˇxaI ÄîÅ-AH”ĸ™­ÃĶ';FvÕ+ßģĖjŠ`&FGbTŒQÎQį)bžÛę=<ĢßBŦ î_GŗxŧŊƒns€*¯ü#–‚A$)#§ĩ‰Ÿ#-^G *qdQĘÖĒiRĄ™#< Ī–YH §ÛĨ2MORˇ!VÜH uSQÍ},h?‡ė\ķD|7gŽ7 ĸ|Cz­ƒd˙įđ§/‰eŨi'éNōŅ3øbß9Y\W9¨Ā-ĨšßÍcˇĻGõ­˙øJÛËų įuØnŽ&œn\ôsš¨ßŠ.Ũ íå´Pø8ãŠÕʃū5ƒŖŋŲôũÎ5ŖöĸĘ0:ĐÚBI˛ú•#­Hg,¤ņS#1ÁЇ8”ĸˈ3Í2âŨ&o›$zTú|-q2Ąnji­ČcƒYēŅ[šF“{.Ą4ætãšÍÛ[P‘nČzV2ŽŽŦ=HÍhsWƒ‹WœE^ˇ%fÆÄ’šéŌ´ĸ“´‘œGĖ@CR"!u‚*ŦŦX(į­LĒF•œûŠŠ<}ĄķĮēz‰Ē’А8ô¨-WŨŠõ˛Ëi [)Įj>Éâ3§ĩž"wÃ"cŽTŠŠ$2n ´î# z×mŦEŠ$3jÉ÷U”*‚Cc?—?•rW (_5œoŒ•é]ÎN[2)SČÅoØiWWZls”ļÍšįĻ.ĩ‰0}Ŗ$Šé´Htšt9Zęicē^cÚ Û§^ĩMŲ‘u§ÜÂĖ3ōõŦé# ŽœŒÖåāļĖW;žĩ2¨Î$túRM°ąąá ŽŠ*ž ã×Ĩkéņ‡–LöŦŋ)mm€n<–­ũ*3öŲĻA¯Ođŗ |lŲĩaŗąģĄ ŠĘņéG›H™"ōÃŲ€~\g Īá[ļǰ[ĒŽYÜ͟ZÄņŧ×3)g`BDęŧtôŦ1Ė֓÷‘ĖéĢū›n9×Cw–āuuÍaikēö/—'"ēRÆqŒŠķĢ/Ũ´ŸīžPo÷i–įũ 8Ã0ũiį"SƒÆ1ŠKeÄĶ{:ä‰Ķ2+•R’ãĻĶX%ČābˇîđŠ)˙`×"×ČXœbˇ§#)MCr˙™ôĻų™ëT~ؔ}­3Z{6Oˇ‰wyĨ/ÅQûZúŅöÄĮj9ŊŧK…Īų4o5DŪŌ™öėvr1ûhšæ”1‘úÖoöūīëGÛĪ Ŗ‘‡ˇsKĩ!cYÆ˙ũÖˇ˙ŗG#oåōƍíč*€ž˙gõŖíÃû´r0öŅî_ŪŨĀŖ¨Ēnô_֏ˇp>^´ų{h÷/nøhÜUĒ"øvˇ ôĨČÃÛGšw)ŸģúP6úU/ˇĐQöŅž”ųX{h—KđTJnETû`ôŖíĢG+kå˛GLõëLōbūčüĒŋÛĨlZ9XH=Í kÉŦÔŦp*ô~!ÔŖKŒ~°~Ø´}­1ڗ%ÃÚCcĄ>&ÔĪY˙AUdÕī%}ī.OĐVOړ}Š >V.jfēë7Hr~UtøĒõâDacĄįõŽkí)ë@šLõŖ•“zgDĩ„5{ės;~5Û'É;š5҆ŒŠ&™Ž"*­Ŧt10ŨœŠŅŠL(î;סŗ/FŠ×Vē^7Ęē\ÎuEŖ¯l‘ƒOFÉŽEuģĄÜ~Tīí˟AųTķŲ3´ņđųĮ8 \m–<øûķO›Ä7–†ÚE]„c4ÛõéšÁĢ#˛ Į6N>nĩßH*H?ãÚSÜŊGsœRļõSQũœ›4Cˇė¸Į!EMĢ…ū΄ŽäTJģaîƒU}â5ĩMAĩ_.×QIËĒūķz§đ?Zæ'ĩĩ^Á<ÔOĘįNLŒÖę-u8ų—b”El+dWUá­jÚÃF{iíŧŌŌVÚŌ>ŋįšä$­ m€ÅW-՘^ښWז.XEnW9Î@Ŧ)Z,œ)•b~ύÉIFÁ{›Ū |x„mãtNŊuzk ÕäSÖ¸ß¸_Aœōqôޚܞë2Ā EzX=™Œž?‘×ZĢī,Ĩvž‚šÃN‘pAķę+sNäķdÜe d×3â”eŗąįd’ž¸Ŧąir?‘Ĩ/‰Ū—fŠFrÃų×eâ]ždÆāEpÚVčīáeęWYĢąiķœŽkέ­&vCøˆÍl‰öĻÛįÉĮũ5j\ū÷æčE6<ˇĮiMq@ėžÃnÆŖQ…yËîÜßZôk°L’c8*Oé\ ƒ0÷ŽĒN,GBļ(ÃÕ (Į5ŅsžÅb¯éIĩŊ*ë3\,WÚøéM*ū•^Õi\,UÚŲéKąũ*q֞)Ü,U(ãĩ&ÖôĢLĸáb¸GÆq@GኞŖå4†‹…†Ánķ0 n‚ˇeđ^˛ąų‹i+ŠÛä¯áRøN!.ą#… ã#¸­i^_]ŦėÂy~byŨŠ.-¤đČQ҃ŒŪĄØųčkĩ}A/ĶÉÕ#2ô pŖ÷‰éŸī¯įX÷ē4Hx$Ŗ•z0ū†‹…Œ2é@GôĢn…zŠjŒQpą\Æū”Ũ­W_îÔ4\ ū”oJ˛´EÂÅr­éFÖŠĪZ: .;Z“kzUŽŧҊ¯†ĨÚÕ0ĶąČ Er­K†ĮCVHæžåÉé@Ęa[ŠéGĖjÉœâ”í@Š„5=[#šPĀĨķįŊzēqž‚“ڀ)îz]ō{ÕĖ ō.zRL4žôģ¤÷ĢĀ2)Ž)î“Ūōú՜ a™/­(’Z~(ŠAv –Z_6\öĨŒs@îûŽ)ôĨķ$”ĢMjE]÷NÔyįŌŖÅĸČ9™j KŊléÃ÷éëXļŖ šÛĶŋÖŠqYT:)lmF˜°fėãÄė‹įĚb&OûčTgÅh9 úÔCÁļ }÷#č*xü'`œ‚įōŽ›3B'ņ}€?Ä ˆøĘĐtŽCøVˆđƟŸ¸˙‰ŠSÚp?ęIúŅfÖ§âˆī,Ĩ… “.02+—•搂¨Ā÷8¯O}OGEĘrhšĶôÛR ÚFwtĄÄw<ĸHĨ¸‘ũā0*I {i<ІĢ_ÄđEiâd Eœ/JoˆTļĻŦ  š–R2ŧŊä Ո´ķ āķSZ[Lī´ #Öē;-%ȐNk7+Æ79čtšQÚN=+LXHČĮŠčâĶÖ?ŊR˜cU+ŒûÖNw5ŒR9¨bbâ?(ŗg ­¸Ą”Gą[ŒĻŌĸ“O.ųV žĩb ‹[¸Iķw8$“é˙ęĨ­ĮQ]X‘aAfmävsôĀǎ0”]Ŧ€Æ~é9Č÷§qLėRH™ÆIێy÷?­^´‘.˛†ny0ĪBŊtœšŖ˜Ŋ´‘PJ>xÛĄ9úŽ‡ĶjĒ,É€ÜÆĖŒ§aĪSĐ˙*î”|šW-$mÃ+uSę=˙ĮˇPļšL ķ0d8fQ팏Ī?•"ŒÍ0´Â7OŊü\cœOëúWqfPšô•Ŧv˙ē\™RĢ×ķ­É*U[Ō“4a†7'#¯J|B„…īTa˜įw…2;Ļ”dcĪ_lÖm&YĮˇvÁŌ¨_O qí`<â¯3…‰‡<į8ëŌšŨ^rK+29üēSQ'˜uĖöh›Ļ…´ õĖjÚüP –Đ"žŌ=qš‹QžâDx—A'ŽNGéųū\ߒėI㎕|¤ķ1ŗ3Ë&ųs°į'Ĩ[ŗˇ;˛Ũ=EF-å,¸ČĪÔV•Ŧg8)ĪCíøU Åø,c 88`sJ°öqí 'Ą§ÛJą!wÁ ûT÷[$ˇ` ,Œ>V8Æ}ņLLåÉ_Ã'*aß [ÉGûFˇn“Čē†"ĘÅXdąëƒ×5•ŦÛIã–] ã¸ô¤WsN)‡#o–˛ ckwĒ““IfqsøPîtē–Ŧ—AČŗ‰7zvŦ+ģÃ.?v‹îŽĩjnVŗfSŪŽT629 8xīu|‹Č$Áûœ ķåâE>õŨëg6öĖ0 ˆtú ėÂneSã‰5“M=č ĒÉÎ?­XÖLŸØw1Jw:Ē’AŪOHf×?õ›_QĪ5nõü=1—™ DœúfļÅ/qšCtqėl)Č8­+ũö§5—žũjöžßé+ŸC^4ūwCâF˜ŧˆÛmÔã8Ɲķ¤Īī9æšĮ¯ƒÕũk’SØ˛ÄÉīé[ēdņ›É`01Öšš¤>y=8ôĒŅčZÅđ2[]ŧpĀ߀+ކį#á;>s"ūtĶyl2¯į\Šø?VqûÍBOûøjhü9˙YxÍõc]Zœv:VÔėÔü×?aÖôännâãũĄXĢāhGߝãS§‚Ŧ@ÛōĨ¨ė\ŸÄ_˜„]ÆpÜá…Wģņ“1\܃´įŒšmĮ„ôÛ{w#x8ŽbSk…6Ŧm™/ëžhģŽŊpšĻ¸—Ā´`*į•rōÜ_ęGʀ‰uo-IÚ˛9íšî4ûŌ™ŨëYÍŲB7dödp(ĀúVˆ‰ÔķSÅ*€GˆëVRܜdæšŪ§B)˜‘“øR´[W‘ŸJēĐŽyÎā{Ķ%'ž=*FcČøÜõœbˇ7KæHĘ čÃ"ēI-”|Ûü+ę-×kĩA\ũ4ŦReģ]ŪyØÅx’#•#׎Ԏ“LŠB(x#Žũ3éëYņėbŅr zVÔ2ŗÄŦr¤Œū5Øļ8Ūãö‚Â7ų~OS†#Ķßü6ųē'Œ¯đūąūtéd_(ØĮ^:ÕRi–e%”3rrq†Į íßđöŠĨØáķ–b9î:ŸįR@ä¸ÚØ$ōN™ü*Žōč?)Ž}˙LRÄßēûãv'ЁĪëNÁrĶؘLį'€il‰Uz3ƒč9ūUĸ~Á'4ĮœÄŠĮ‚Ã}h°&_I„&éŋųúĶdÃ&SœŽÜ˙õǘ(bNT¯CíR,ĮĪXĪ#oÍîHĪ˙[đ¤]ƖZ5+Ōüļ{‘ëU-ôAæĢ(6Ē9ü}+Ŧeį'˙õéÆŨZBĒ0VÆ1øūTÉÜi),§n Ž0Ģü>ŸįÚĢ>žņĸŦ‘m˙iy˙¯Ā÷ŽßČHĪČÉé“UäŌŌu+&~nqČōĒBšÉÁh\•ŽxᓐąŋųéšI’âŌŨ•âŨžyŠąŠébÎW‘'‚$F$IԞ{œdd÷¨,ĩԘ[<‰zg)Ô7 ?Ĩs"Œˇ/2Ŗ˜ņ“ĮōÍSņl\[ĘŦJíĮˇ™ŦϏqdÛYX™#“¨$~F˛üTĪöXÔļãę˜ŌšÄš=)ZZĸD4R7ZЧöĻϟž) )M HzĐ1 Ĩ“ĩ*ôĨ‹Ō”PԚAA¤1ËCuĄzPI&ˆhQÉĨ"•zP5š<ūĩfIj Uh­7Rɍ*ģą˛—,[&7‘âĻ؇ņVN ĢöhËë5Mü^´Ķ¨ĮŠĖÅŖ‘ ÛĖé"?!¨ÜãŽiđpžÔĮ|ķųV†Ii–į"ĨqQBqp”†kŋŨV•T琑‚§ôĢ rĩVš‚1Ÿ­&Ø Į/ŸzîuCģL˛|uŒ!\4€ãšî.°Ū°oöōŽŦ/ÄeSxŽĐūmø+SSU:}ØĀ\Dā{ŒfšÛ)¤„Œí=°jęĘō[܆bs Ž~†ēņۃ—‘ĸzœāāvéW4훍ĮŽj‘ÁU‹‹”Ī­x˛^ë;ĸũãdņ'N†˜˙ņū1Ũ)äƒ įŠŽF"ų1ũÂ+ŠÕ?„ža™šôŽÃĮv™îå\ä„ų§=—úTvˇZŌ¯•§Æ­rYāū×Eęq×øNø)r=ZãEˇ‰æ5ÄQįŅM(ĐĩųHķ5BŖũšéģ8ėuæDÄ?:i¸„u‘:æÂ÷­ūˇR˜į¯ÎiĪá ÛšŧM+°6īŽíÚŌDķ“$z×sœųl`y# ˙õÖėžŠ(ZO<–Ž+;MŌūҎy;ŊW­Kv)+˛-/E[›ŗ9Î –΍ŽÚÚŅBŒgІĪK[uū"´ã€cëXJMVC㈨Á<¨îŠ8ÃcęiF ÁâĻÚ]Ŗ-Îr)­ ę2E^QÅ5¸ƒE…r‹¯–Ŋj´IfķG8ôâŦĪ/˜ÅAö4F|ž¯LbŽ+QIé ī,*āx5¸ō› @$r3Q4,Ÿ!ŲŽŌ)˙ë{Õ)$ŪpŦ¤¨ū ?*Ņŗ4‰$¸'vÖįĮ?Ī­#ÜUī#áˆĘzķėzuæ h%Uf(Ä åsČ÷ĪãUa›mŌÆÛ€cŽ;Ŗųãņ$ŦŌÁīĮ°č>”ļķŗ6W,\c§įü*„’32ĻyQ€GâŽXš_ßĨī}i%âę"=k’+SĒ[˜8ŽŖmoxcæŗ—øëŸß!čqV4]ôčž$ˇ–RİgŊ/ˆä­đļ8ϜöŽiĩŨU˙Ô钟BÜSīÄs7‰=ÉÎ+ĻįÕîĀëMgë\¸_ąÄėÕ¸-/™€žāŸu¤åaĨsVfWRšëQŲØŦx,ˇ÷‡čmŲ3Ÿ­^Š6‘ŠĘNæŅV$HĀã­Ląãĸū¤ŽEYHĀÆ:*› ˛‡w~T­b1Á­EôĨ)Æ)ØW2ÚD$ƒš¯:ēƒģ¯4dIŦ[Ļ&M§$â“*SybJˇŠæķd¯-ô5+āĮČ wíP1ÛPĪ9;ąZE&A3BƒĪ`?™Ē×1ŨFĒ| ÅųøUĨ˜`•=¸ÍI¨+Üé3Ŧ`<˛éĪ_éWc;™S^Mh‘}ŽĘEĘû‘‚ûõĪåOš(ŽŅg…ŅšÆS<˙…IĒmÔôĢKëQŧ:ŒãąÆükŪęâŲ?ŠUwhÉeHČûÍųķJo–It4Ĩi+ę‰eyF×;¸č1Āũ ÍjŲĒžˇ8ίLÕ+ŲH­ŽT.$ˆž}8­Úš˜C×>ãHĘä7÷Ž:2ĒŽ˙ĪųU7‘ÚPĮ<ãˇ=õŠ'&irXP@8Î8ü*аfB%áąü#ŋÆŽ1 2Ãí¸ĪŽã?įØTˆģIa’ž‚¤žģU"،ŽßtķÛü÷Š’Ú9ŦQšô}ą§ UC˜É}ÌgŒg5 ĢØÚ4äãĪЉ]Øü­ŗžs“ŸĮéZ–ŌíL|Äžzķ‘OmKM1ŽĨģ :"*|Ėį×ô5]`™#ũ㠑 côúĐāÖä)§ąŠéĪR;p1úšĐˇŧÜų$)íŽ˙į­`Č9uõ<ίZČčʅ2O$į‡sfeY>b2\÷ŦkŨ:7Qĩ@€Ål G#­#!=Gč(Ū/*&WS¸ô&ŗu›}2\ß=?kĒhw ôü*­å x^&ÉČíŪ“Ô¨čx|ĘRFĀã=}j-§ž+k\´kKé#l†°+äįÖ¯rą Rž ÉŊ;ĩ3øŠųāP4%!öŖŽi( 'z(áŌ”w¤ĸŽ§Ĩ ĨjE Ŋ)(^”{ĐŽ”ęAKڂ‘<=Ö´Ąļ’hˇ&0:Öl]ē4į#ģVrv5Jņŗ*Gg"‘ˇzÖĨĨŗAná†3PĮË/Ö´ßũIâ”¤ĖŖriĀg#ø+Î.‰ûCã׊ô‹Ÿųgū™×›]˙ĮÃāUĶūV '^‘ä}*B—.N#ũ+L9ĮaIŊŊk7^]Ž•„‡Veĩ•Ķ? EŌåĪ8¨\ã­ ÉŠöŗ-aŠĸēéĮÍųTƒIËķ „‚z “'4ŋ6Ī.¤û–¨Ķ]×Nĩī¸ū5:ŦQĮå…ų}ę>WŊQĪSÍ.æŠ] AŒ…™ã§ŌĸiaU ČãQ5å˛pe+6 Łė*ĻĄ÷ô!Ē6Õ-ÔđK}* F)ĸ؈AČ95q„“ŊŒęU‡+W5ŗķDŸëĄ#û>B’:¨ĸVĮ–qŅ…BÜobw9’<÷•ģá5G[€ĘuŦ"q"sųUŨ WMy„Ē[L ڟÄsUøNßh 0q\Ŋߍ#€í[9Ÿ>‹UŎwļ;ŊÅt\ã:Š[šúĶĸPHČ#Ū˛ėįšëæm9čkrŨ^=Ģ93XĢ$aģįđëSĸ‘Đp;u§$gļ*USœ‘‚*l;Ž…FsÚ­"āv¨ÕAäõ§ķØĶ:`qÚ¤ĘõéP#n>õ0\ŒĐ{—Qbˆ„ŽIū]kZõqEQ2MÔ/dT’& Ψ\–@Ð;dúŠÕšŒzũk6î5U$ ž§hĖļŨœ+A銺izņmRrŲį#ƒUČ+”' ķUß(Ö ‘’¯Æxô˙ĸM[{YíŸL05ŗœÉkp\˙yHû¤ū" ž’ęĘ#!Ō`G”J˛î#Ž8Ú3Fx¤„|Μךŗ¨ī¸ŒÛXTgŋo¯?ĘŠ6KŠš‰2ėļ‰Āō×nąĀ8÷â—OšIchCNāu?ãÍUģ =ĶÂŖ ‡,ŨI=*Ü6"$ßÎK3ž”ŽU‹ Iɏ\“ƒÆ={įđ5­u-ŊĢ,n Ĩ0­Ü uũ:U¨ŗqTn@oŠôíøVmûČ×1ē Üŧ'œâĨ}Qļ‡Éŧ‚€ĨÜFĀųąíQĀēe‹¤Ķj0ÜI“ĩ mÍø*’Iũ(°ōV ÕUöž3œm#×§ājW[‡0@wį¸Ā?į×ëMÉ7{j8šÆ. čN×Sj¯ÕÜ~DŒA Xuų›nįđŧš¯w{æ6 ô¨' /YNåHQį˛:Tˇ}Á+lMjHų‹(RsƒÍl@ €6Ō# Ž+ܐsĐfĮ§NÕĐ[$l„`áxį*F_ˇ0AĨZ)Ž@ČõÍAÔĀ•uAe%GOQƒ@Æ*ŧ æĄ–5ÛÉ={œU“*ŽžÕ ØãÜÔ˛“8hë$fá#-Žāã5æķ#G!RģGĨ{ž¯bˇVn2cŽGõ¯6Ôt„yJ•#<Ķ‹W8Ķ֖­ŪØIh܌¯­TīVg°ßâ§vϟŊNŠ;ŌQÜĶzĐ÷ĸ’ŽôĀxĨiĸ”´†8sRīAįšE P:Q@”ņH /Z '‹Ē×E`öq˙zščē­tzp͒ŊXĖŅlL‘Žr;UĮ?ē9¤UÔŗcėíÍMîÉHąrGöN{l¯7ž˙—úWĸNâKí°×ž_Œ\õÅkL™üJ×ĸķ"Ô ŠZ)æAųW/–=ÉĨÍĐRTV[ÅžˆčZĩÂĸmz1÷b'ĩöyđškBę~aНe&Ą¨úķŸģBÚÍËtĀĒ":pŒU(Et%Ö¨ú“û§˙–‡đĻg~˛7įHŖüS˛DsIîÆmc÷˜šUQéKۜ(Ę8§ŊMQOn¤R:%oŨFG÷E“ąyčE23›xšūK9ĖYöŽN§ĄĐĩ#bEĀîk_–Đ\ŪÜ,čČĪÖąĨl˛ßZŅđîĄŸ¨Ėķœ#ükZzHæŠđŗŗ{ESļüĢ:xc ĩUGļ)%ņ›‚d'Ô)Ēą_Åq7Ũ`;fˇ“ĐåŠÔĐĩˆđUOĩĢ6ĘĩSļ•ā7ä+J!¸ģüĢ#VMŒĢ­Z\cÖĢ…yĮājH˙ŪãĐĶ$˜{ NsLÉĪ,}y¤1ËôŠ@ãŠĻ“ߊzŸZi å[ÔĖ'¨Āß&ˇĨlLFF>•“”€ŋ;j.ƒ.)ĶJxđœIõ¸‡įđæ šČõSō˙tÕX›œ•Ä#d_ÄU)×1áČô'Ķ\iÎäė ÄöSū’l$Žá„7Äâ€2íæōˆÃîā“Ķü*Ygv¨ãß§ųũhŊO!ÕČჴ>ĩŨƅĨ•Ņb*rXāg¨ũjĄbˆÚĀnž§Š$˙‰ĢĘĸF,)QĀÆH럧zĻ/aeŠHeVFęëÛ¯qS ˜T)ƒœįœųņßôĸÁrwRȇ*w€;}ŗëMŧf_ģŒ€8üŋúƤ•ĩ•,ÍļPFáÔ°øõūuŽąÆs '¯ŠôˁȯõįĀ‘Īųõ§Ŧ° 1Ā!ƒ/øŽGë[&ÁcLąfÉc°ĒSYŽ÷ ˇvxOēOūĒVʒ ą$‘Œ?úÕRMķ1—iî9^žãqã*6/  œė)"´”¸f^{đ?ÉŠiv[ ˙{ĨtVÁ•UX)> c5F d—PہĢF0­Œr:yũi ļ‘ž0 ôöŠâaõéÍG Æ öÕ2.ÖĪ=Gģ“‚)BŠ6–n8§sHŖ:î a`ûHúW ŠÚĒĖÅXc<JīŽˆhœdĮzâĩōå|ŋSĀÅ"Ņ…-ĒJĨ]AšSH’Ô™bųŖ?Ĩv†=Ãđ¨ÚT†ô”šĪ6,Tō({VöĩŖ2fâ”îjįöķƒÖĩM4`ĶD€ŠĨØ DPķŠ2õĻ"o+= 4ÆÂ9<æž=čĀ uФ;Iô wĨ4ŅÁëJO% Ī NÔŖ9 cûŅڎô™ ĸĖG•­Ô¸û.’$Ą'…,+bč„Ņcčr3ŠĘJí­ˆãņ įæR+J˙ĩÁ!Á ãO-]Nš7YĶåœâ‘œesnv˙‰?ėWŸjëķūÍzČÆ†W?ÁŠā5&îŠt÷ ¯p˛°FŨ$QĻ: E9§Ä9"­™ĄåFÎ:Õ+žX}*ë“Jë ¤‚EJp¤ƒ@Ģ$QNíMiԀJpæ›K@ËĒ2žæÁ#ۚG4ÕĨ?z¤´nÛ°6ąŽ3ˇ­:n`'ÛĨEg͚LԏĖFšžįrÖ$ėw,~žĩ>•†Ôļžį­S´žõ%ĸŊ1=ĢHîa=ŽĸQ ŒeŌ›jdĨg=ĸ1I ÷­‹AbjÛš‚VÔÔ切dôÍiÂČG;ÖŠĀĀU˜ŲWÔR°Ų¤ŠģAÁŁUR}ŖžU;uĪŌ™%ÔĮ˙ŦTčäâĢÂI˙ļ@ϐŽéOŒMĀíOQ…ä˙ZiR>OÂŗŒef$€\“Z!‰āvīT'R%Ī?1P¨ ~ÖnOāsQBY“v>QÔįV Æ÷ųŋģŠĢŠ5ģK÷Ĩr?ŪŦ Ũ.y'%# ŠÉ'8׀sŽŧs]S\Cä¨˙?áŌ°uKk›Ų•åå>îė|ąƒ××č?#I‰uũ´ĸ6YUÁÔûäsĶéTmŌÚ@ĐŨÄŗDx äšAãōükĸÔ,-ĸfĶNØÎWå ŒŽzįąíø×:-îįh!<†l=Ė›ø›JŋžØHæÁŖ>¨zô¨"YoŽY7“Ņŗœ÷ä“ÍuZ­‚]éČ­3ŠF$rīKĻÚYč Ŗ˙ŽČ>iÉČĪAĮd–4Í0[%ŋڋ3Bŋ bržņÁĮoĨj1‘Á’0ņ‚8zgúUU–Ūf8Īņ c˙×J°Ŗ:™Yyz‡Oōi Ŋ#Jû–TŨōāŒg‡ãI(Aw`(Ũ´ũÚßΠXōÁ ōÛ;IÁÉ=qÔ ã8\uĩ”O1&e*>c÷”ô9/×ԁÅ&Æi&›o*‡!ˇã;ņõÃ?*pą‰rwĒ‘ÛøbŽ[[(ÛæB€2ą$ú’ į§n+KėÅŖĀ×Ķ˙­HFØÜ„.IĀ rOáDp•ę?JÖ}=O *Ũ‘YEn@úzRc*DƒO\U„@@ę>Ŋ*ĘBŖžž ôŠļ(?*V€:t¤‘p?Ž*G*?úÕ œĄÁÜŊE+ 6žøčk˜Ô`2ŗĩĶH3œō=kō \•&ĻÅ­sɒ&ÚŲÛڐĻ}ëBt•#‘Tˇâ¨z"n’)BQ\nŋĄŊ”ĻæĖG“í]Âcq#šeÄ+sFã(ÃSŒŦ'čyJĘĘÄį­?y—åĀõĨŽhįMēã&6åMfŽA[§usĻ…U 1A4SqžôÄKM;„R3Nģļ{RĄ˜} @šQØ43–nXŸ­!ˆŽ;žjL‚:ÔEA¤eaČ4Xi؛ĩ9*¸.;TŠÄuŦR‘1ĮjNôĐĀ÷§´‹Nå˜~ø­mK#H‡ũÚɈ|õĢĒ|ēTzVoâFŸeœđë]U ŽrĢ÷‡ÖēËtÁ€îUC8Ō|Ú'øk†ÕŖ?kUŨÜ8#Cú-qąct§žŅSOr§ü2PqOŒüæĒ,ÅNU¨N÷Ęō+FŒ‘! /\ĢuĖ`ŠļÖĸ\–lzUYí&Œy_Zw(úŌ€qRÅÃļ+HXÂҧŸZĸL€y§gfm>HųQUˆ*phRĶE8Rõ&œO H”ģ:͘qH´kŲ6l×ęjfaåž}jĩ6„z˜ōšį’Ôí‡Â‡ŖŗG׊ôéBę1œHĒ‘ˇú22#õ§Ú’ˇhĮŪŽ;˜OcjyĶƒÉ­ËÁî’kššsöŌG¯ē=4î8äĶļĻw÷Mø+Į…YH•GøĶ-Bä’jØ zVfĘûčš5*’§qV#Œ1éŌ’e°â\’EYQâüj”2aHŦ''$S°ŽXįšã×*ĄĮëPíÎJœ &Oô  GaøT;"ųʆ=—?ÎĨnQëP\€NIĻ ŽYfÁc´z/Tâ1Đd˙Z‚ŨKUSÉęiˆ6…Āašģ ū´ÉĄĢ+Œ`ãųoįVxųG_ZQĪN(M`ËÆĨąŨ‡aôīaXķiŦ’—#'ÔûõŽÛˇ$Õ+‹_3ŋ•“Ė9BˇĮųëPŨY†c¸oÛĪN ãĨoÜZcdô¨EļQˇ($ŒîYŗŒŋPOåôpCˇ#?¨âX`îÉ?)?ĘŦ&Đ6?^Øí@ČÛ8ädSv)öö5+¸?äĶœÁū´&âŸ)uÅMģ#ŪĄ,­‘Å1ÂūĒ“āgĩNø)é隮A;—ļi2‘(–īüëáķ!ʏÆļ.ÛlEzJæ¯/c‰Î\{f‘HVÛŨ#Uå†6įmgÜköМ3€k*ۏ¸XŸaCW)Ļ$S‘PMq@’@Zå§ņĶqMgO5ĖęZIđ¸:˙‡õöŠå*åŨ~ōÖöEFcōzV0K5&šāîVĒmosjr •üęũŦ­&U—æęĪ™‘‚ŋKv-S“čfÛŪ+˛§§#аö\ ā{ŠdöŅJÁ‚„õÅInņÂʄœųŖ™ė%šŸ>•,y*7j¤culk§Ÿ›5Ŧ w4`š\ÅŦ<žæĢĄÔōyĢ÷î„&Õ S Ņr\9]‹ļ'0÷éV×jĨe÷XUĩûÄ•„÷:!đB<ŽŊÔn\n*y"¤EĀjcēÄzUŖÛŨ^I4fdw9õŽãKuĄĀ…yķNîļá āvŽįDWû,lî Į@0kVŽtô:ˆ&GAíŠŊßÉŦ¸Ž9įŌ´ŖrŠ@ŲwrF1Üö×@FqM‰prĮ$ÔäįŽÔÉ)pĖ@ëOķY\@`Ą#Ž• Ņåc8 E¤š\ dŸZ“r’2ŨyæŠ[|ũx;ŠČ sØSVlÅ…מžĩX<†NIúUKqĮį@ †í Uø÷`dÂŗĀ '|V„L0*„[ˆ)ęjÚÁ”ÍSŒķ‘ĐUøeR¸'&ũ“ĮZCjwƒZq¨8éSųKéNÁsKqĘÕvŌ˙ē¸âē7N0) i‚1O”W9ŸėÍšČ8§ %Ít=*ĢĀūSJÁrŠØŠāŽ)ÆŲ 5u$7ƒšmŧ…ëNÁs:XĀąĮCB5>øëĪZ¸đpsĐU,ÆÁ”GB*l;äŠ ķLp#ĖũķÚŧķQBŌ˛ģŗ(ééÉŽß]”˜aį×Ū¸+ÉIr&AŸQÅC6‚š—&ž„ílmīĄÜ×Ō û*8ųä?Æ­žÕ;Ŗ“ĶĄĒ’ÎšË§ô4ŽkȄ1¨č°īL(‹ÚĄ’ņWŠĒŌ_ĐP“c÷Q<ĄwTu¨á›ŊD\žõI2ãĐļeQŪŖ3úUbOĄ§ŨŊŠō™ēŖĖė{ÔlūŦjõŧ6ę„Ë’Ū•+ËÖĢ”‡Q˛‹J)Œä֙ŗ†A1ô¨ÛMų~Rh"í–4›íÉö9Û17=Ŋë:îÜÛ\ŧgąâög‚PĮ§JĩĒŠs øá×­-™KUfP“æ!ŊE"uĨoõkMQÍ1"Շü~m˙jĩüBx…}ąôáEŠ­e—ĐÆÄāŽjƍ÷ƒ î•GŊuö̞Ö1ÜÃ캊Ōö%ˆåXfˇŸ˛ĻŪĩ5JĻĩF•ČΘOĩqšËt‡Úģgv—†î+×Ķlņíųj)=l\ūfBvƧێ”ūė˙Q\ōœ[ļc^üWD‰ ”Ž™6ķŨɨŨ)ÁŒ…8ĪZ rĘ@¨:ŌHŠŪVKž2*ĶČIÉ&Š&>Ō§ĩ\ Ŋņš—Qš‰¸t>õ`¨ųUgę§ŪîXŪ€8'šŗcƒp›€ač{ÖÄ–Š Ģ;$`°ÂķúĶQ¸å>Wc•ŧ\ÆĄĒŦ*íØũŅĒŽÆL1¤ŒjüDÖgælúUŦŲÍV´ûøöĢË÷ŲWØÖrÜpzЌH?Úū”™;ˆāņĐĐęËŊ¸*qČõ¨Õƒą…ĮVôĢHÆLXļ 8bzWQĸ3–ÃĘ[ŲF+“ŖŽl¨.3ÔņZúvĄ,SXČÉč isDļÆĪš­x€P:gÚš-7\Šā…-‡î+Ĩŗ•h%šIŸūŊJ˜Ļ*Žĩ/ #Ĩ+'Ęi$ĶÎO„#=ÆÍ:ôŠÃ2pZ‰`ÁĪņu¨Xŗ/=GëT!Į;đ:žõ,eCŽNjßĖāđGŖ­`䯊Ķæ÷.Į#åöÍUi3Ԝ×]ā˙6MÖ¯ũĶTO„îámˁ”^j”Ŗa>fÎsyéšÎ‘‰‘I9æŽ „xˌwŠ)u'qUĨĀ´˛ßĀŖ—đŦųĩ(đB‚O­!Î1Ũ5•ÅŗEOÎN7UíFPĄD`Ü×)c~ZEb0Ē3š†}Bęy‰ōxâŽÎÄJĩ;ÜŅŋ˜Ę„`ŒVn~Zt¯,!“æ™ēįĸû}jHŽ%›įÂŽ8PjZdēĒ[XŸŪ3ā\ū¸ūĩ; fÉë“V,`FmĶli!|ŧniō„Žy-ĪČÃæā}séYŊÆĨĄJÚ_*ãy9A÷Ô˙ô¤ģwšvD@#V!BŽ1VŖ…DŗyąĒ(ˆļd‚9üĢ*iÚY 'h' íVŒ¤ÉR=¨ėÜ`āԚ–ŌÖ[ŲkˇĶ°ĢVĢÃN å‰WĮNŸĨvē‡YÔIĩr˙í7<˙ŸJR‰IŗžŠŌXa›s7Lį,I=ą].…Š,’y|åxįųÕ MíD`OJͲŧ’ŪũŠT$î>ŋZp•ÄĪQˇ˜095l?•ai“‡‹p9õ=Ģ^9į5ŖDWƒŠzœZ„8ÎãNŪJ@H@$“Te—v8ôĢEũ{ÕY˛I'ˇjb#fØÁ€Ú§RŽģ‰ĒäåvŒf’)Ö<,˜Îh^Ũãéc!r:Tpē0Č<{U’pŧķLDļ8#š˛ƒÉ¨Y>]ˏž„‚€.FÄsV-dķU>´đJŽE6c¸ã¯¤ÍdÅ#dVĐ⌚wF#Čm2ôŦøeųŋ˛'MP‰‘Bži’0ZŠ[•ČÁįÆ$Šcé@ƒœņM(JŽzRĄw WqÛĨ0"äô¨ĻmĀôŖí)¨Ēí>ū3Jã pÜô5;|Ä5O,…N3ĮaYw—žÕ-Œ¯w2…åąī\íäŽíÔíĪQČ5júũXpxn3īXÍrČÜä~•…IA3cëųæā¸ũhyŽJí'Ō“Ė  ãņŽvl Á/­ ˆOU>ôũņœú}hCEŨˇŪr˛#;NOĨWžÆ'ųYŽ}+AA<ĒãôŌ¸'4×: ´ŠqģúVPđ¤‚bë(ö +ŽđĪsC —ëÔiž…97kŗ>š9ÆßĨeOĸŪDōĢĀß{¨æŊh,x4Ī$l Ų4&ҞÄM+5ŠÂņĘ”‚3ÔU%â6ãŊ{=֋eu“-ē3Œ•æŗ&đ^›6q\ŽSŒŪ5UŦÎ:Ņs›‘æ O"ģKyjL2’GcXw~Ôíciß*%NqZ)řF =Q–Š2§ŪĨ´}šį†Čũ)˛C2Zųž[ąÆi–-ĖlũKPTô#›sCIÆ*K‘™ØŽæŖ @’4w Tāæ´Kî9c“ęk.O•ŅĒÃL1’hh¨4›šhČĸ˜ĶūUIŽGEæĸw•ŊŠr”ęĨąu§ûÜŌîxzÕ¸ķš‘.$LzU(Ŗ'VLÛÔcThö.Z ’yRnÆx­Kđ Ŧ.+>;pėÛË(<.MØÍ;={æ…¨ÍÜŌëŪĩ­c‰‘OŲUļņ’HŦų1΀["Š 7SŪ yæú˜km4ĨwE0-҇côÅ#ŲH%Ų3ēú3/ĘßžĶĘŲųaã\6K*äū}GJæåûGœVAũŪŧНČwę$EÃ>XpEU“nī—8ŽŽM:ōöäû 0žf0IëĪ­,žŧÜ‘>”ų—QY˜ö7?gt!C ōC[îKąōŖRĀ)~ĪÁÁv‰ĨÉq[vš%ĩ´žj“šŊRę$Rƒgm¯ī.ōžGĪš“4q‘:õë°[Xã ĸõb˜ņb-ģ”3œc5œĒ\Ō0ą‹–,âŒH›†îNqWV(npžPiKcßŊĒģ¤Ī{$2PŨ¤đjX`hįuDaÉ#ĪųņYߊ]:@¸ž9QßljGôĨÛŖŖížJ‚Ž’ÎÍ×9'zĩRØIg8ÎzTķĩ°rßs—ƒNRË|ž0 ãuvŅ-ŋ ŗcŸcLû‚ŦŖw ÆãLK-ĨjŊúd‚’wÜ35°Ã"Į¸3áôŽîUŠmˆŠy>ĩÕk7{ˆ(šĘõ'­qĶÛÉ,†F8\öŦ ŋ‡ĩ8æ‹ėë ߎŌēËw $בX]5Ú28ë^—c{öQ˞Ž„îdՍ¤—<ԈÜķTŌE*ôŠN拸[ŸĨWį$Rn$cĨ2IPäâ€)Ī6ÂNqQ ¤āŽĩKRÔ­ŖLˆûÃ5ƒ>ģá >ô\,vqjOLcéZļׂeŒšķ˜ŧF€c‰5v/EÚSôZiƒ‹=!%]›sÍ7åluøäd\Žœs[ŅŪ¤Š>aŸJdš‘žáœÕ€~Q‘šÎŽAØņV–lŌi “SŦ…šĒF@­:9Āhĸ’`Ôūfü5g,ÛØcŒÕØđöĻ€âdኴōĨQ† ^ÕwāČŒqš{ЂMŠĩJkČKayÍV›.[aĮz’ÖPaFW­0(*wĻ v “OžQŧ’x¨ÜËĮ^*XČŽ§.ŒQČŦ-Bđ7d‘Ō­^ŪWp'ŽŪßūĒį.¤ķ%=U—9SYɗDŅ6æ ųI;8>”Á€uއš‘Ë2 įuĻ™1ģĄ<0˛fˆB2¤#đ¤ØO'Šx'yžM;kˇ-ŠÎƗ!(@0~‚Ļ"q‚äqNŽŲ€+Ī=éŪY*7œ`ņJÚ9%€ c9ôĨVAÁŨŽâĨō™Nßŧ <ÚųqnWÜR°\…‚ŠG?Δ¨+†œĶÂô#5"c(Į]Ô ËĖxäœgŽÔ…r}*d`Ģ€NG41n ܚb+ía”ŪšeŲ‘°āôĢE]ĐNN}i’.T¤2)Xw!fF]Ā Š‚H€ÁÉ ÁĮz°Bųgpü]Hí–ƒšÉŊŅŖ¸ŗû)ųcßŧ€95Ãëú|zfĄ …HBÁäW§¸]ƒœ1=ëZNgkE™Ā=E\$Ķ&I3ÍīcÛ;|ŒUSW¯Čk•8ÆWĨQ5ĐdÆĖ?vĨV9'šŗ9ũÕVĒFsÜAÅJŗyæĸĸ™&¤+ Âôįã`§ĄŦČäh˜2šš Ã¨Ílĩæûž5āá~Q‚j] š’yۂ ôlö?S]JčŠdLÁ÷xE…•qt(Ŗo5íGmÛĀĪ^˜úVŌ= 6q×W/lb‡;žaŖ­k[XLBŧT(`Šaƒ†=ģæēa ›”*rGsĮ˙Z†ŗL]ËĀ'ĄÅ'WBÕ>ædzBÅgåÉ!yvƒž@Ģē|6Vå,Ŧrķ“ëW%.Â4FҁÆ{úԐÆįå XôéSÎW)SÉŨ ÜĀz`tŠ8 œŌŽÉU îS‚oÎŖōPB!9ö¤ÚØäI“ˆöíxE瞒ŪŦ%ƒĻĐ^ ŠtĮ…ÚÕ˙oŠNH,f•t郁L–ÜÜ>åÚ¯ÔÕ§ ;‡ œœ÷ĨhF<ĩP@=}EG0ėfChŒrešē“Ú¯ÁdˆÅäų˜xíVLQ)}ƒæ M‹ ŽŲ$÷Ąģˆˇob$Œ3a*Ā_-p ÎĒ„ÚŒĄvÆTĄė:S ãĩ窐GcSaŗBGû4Į’ĮõŠĘRTģœ šîė˜F <~u‘$ˆĖl…úJ¸ÆäI”n•w/#§ĩzoÛYĮûÂÅņ•P2MyÅļ¨đŒŲ8āzUI/^fåÎMaĘvˇž7¸l(#§“Xw> ŧēÜ$Î}ë~?Š4œŌÔzKļ<’ÄũjŗČÄį<j=áēšsŽ{P ™d,xâ9švSĪ_­CcEyoI1#wLö5 äĖŦXn+Čũ?Ĩ+ĮŊŒō2Ūž”ø QH8ÉųŋĪŌŗeĄäų‹Ķܡ āTÂ(×vũ܌ŠE>^åd…"€˛Ē3ˆĪņNVyÎ?E ‘†úŽÔõĖ„Ā8éŒT2Ā1A$wÅ.Ā'ÚxõČéR•tœpqŪ€ŽœƒëRP„*Š,psÁëL(ĖƒđzRēyŦwcņڗɏj€y‘‚w ¯=M&0Æ}ęO$…ûÃŪ—vmzR  ›ōë•#Ÿ­&<¨9H"§Úģ 'ŪsQnbrsĪͰ p„gĮ5†įĩjßę1Ak$͖`°ėsÅyŨö 5 OÎÚN+HÄWļĨ;Š7ܓžœT/D€‰>´­ĘZ˛)ĪĘVŠî:PU-Œå¸QKŒœSĖ.9Å2HčĨ*GQI@@ŽĄ§ŲÂŪTâYË€ĀÔËot ĪuąPŖ5Ė H툅>XÛ¨8Éúš‹û1wŽā㚎>UÔęŋ™ÕEuim4ĸnÂŗŒņŽjaåķ%™ žJŽ•ÉG Fwøõf!۔*YXcį@@Į§ĨĸŋcϊK{ŠpA`t~EYŠÖŪÖ34’æNÛ1\ˆf…G”Ää0zp5*ųŽģžVyqŸŌŽTgKũ¨v"wÕŌmímŽÚĎ\rk‹†Õ¤´ƒ8īģ})Đæ'&;†‡Ķ ũAŖ‘g_f´ĸiÉŪ@ŠŽÚŪâO6â\§Ą8š?:`ß)<Ŋ?ūŊË,˛1p8Æų4(YXMší=Ŗe…Rp0ER{øĸ‰Õ˜¯R9ĒT’p(ôŠã´ppŖŒd‚qĪãO”\ÞŌÛČŪ2OŠtˇ S1˛ĒŠåOz>ȸ‘¸Ž„tüiąĮ‘—99āRå ķÂ•'1B<‘Į„U‘ÁęÃ;~•a"P>d#ĩ9QS­RŠ ˛J ģąŨĮZĪ'i•h R0HœqģįëŒ}j‘61oŦ–ÅXíčIŽ7VŧŊ§zīŽ ¸`âšģũ90îų čGjię"•'5cƒZˇļØûĒxõĒŌF8Ú}kTČdAÉÅ.˙›4ö”r*&R;SđĀ’M&ėĶ0FÍīŪ€'Œ3žE9˜ķ‚jl˙Zy'~´†"ļO&Ĩ 9ĒųÁ*VaÅ1 #ņŠ[|į>õ95$D ~”ĢäŸÖŽZܘˇ:Vtg ŒņíR#ķÆ3͊‚Íø.äÁI:ũÖŽ›Hņ) įž2+Š`¤x÷­\äH#­h,™ėú}ÅĩÜ`Į8~zw¤ÖÁ‡Ęz ķ_Ũģ¸ÃæŊÎvš!—Á¸ĒRš›Š2YJRNšÉ§Ų^\ę‘.FW“é‚úÕ6­hŗĀC0.Ÿ0į­\Ņb‚TĮÎyÎj„WƒÃ0ĨĶ\†u™ŽXƒ×>ÕĩoĻ,häŽæ–KČŖ.ᚷ Āu;zĐ+IlAYwpĸ|¤ô­Ų2;VEėđ mÍÎ9įŊ&R8Élą!Ęō įŒTiāoûšüĒëŌČ2A'ŒŠH!\Ÿ^ՓeD˜ąfÂôĪzŨ8(ĎįpRVHČ'$ĶvFÄ ¤ āāõ¤Q\ZŖĻíØ|ãcŠrÅ,,"9ÉZ č2 :’sÅ/Ėë¸đ= &4ĘāŗˇĖüöųiÂ&ķJ``ķšą*ėÍŋ†“Ûbõ^ž˙J›r‹jāíõŠ0ų<+wŠ$ÅŒģĐÔ;–b‘Ü÷¤1Ąšû¤€{žĩbÄ>œTŗ(B$íüj"í ĀĸÁqĀ‚ß3G_zRNÔ9Ęɨ÷ĮKdŒt¨üÆ)–m¨xįųĶH.:VɁķØĻ}ĄZ7…āæŗnu {5iD!<ņ\ž¯ã+tyæHx*ÔX=Žž}F3@§ŒžĩĘëž+. 6ŦŧdÅr“ë—2$“9ĪâĒģ–É=ęÔIR] ˛k’ÚÉlŌ“ÄZÍV ƒÜÔÁ …›ĩCÚ¨–Û-\€Á%sP¯ĄŠŖK6ÔæĢ÷†ČŽNœ0Š.ÖT fŠKrōymƒšŸ õŗTúT‰w$gąôÄ^ōãj­ô4蝠~%âqöu‡|rĮ  PšˇŒČã­0F­• ė\r>†§VXˆ§–vvÜįŦ,mr 7íî^ŨŠD€ŠF€^:˛áf‰@_œp°ÄŒ>eų‡R ĄĖSŠ3Ρ<{U›k}Ė76I<ÚŦâ*X Z§rŒ¸d“߆Ÿ-…ĖXH‚Čã9ôĮ4å‰K‡+ĪlvǰŨ27#9Zš9—f@$˙*O*‚pŖ§įQlT<qÕOzhr$Ī<ū•0û…¸ÁM1¤@Éͧ…Ī^žõ އ ÜUŪcrĀÜԕ`ÆØōpqKŧaX/֘A“ņž´;ļÏáíHdƒ{Ąí@MĀ•ÆsQĻ\gíRĒ.IÎí@ĀÃ~”ЄɂsĮOJW¸ŠTCÁ-@š dsÍSšĩ30|ۚŌ#†9Ī'ŠnĐAęOlq@Žv}ĐsØö¨ŖŅŖŒ– čk¨ƒž™=ģĶ äí<úuϘš99ü=­š` ׄbüķLĀķiÂ×Xx éQūädƒÔÕ&O+9Hŧ7j™, xČÕk¯ DË#Áōœ– í]‰QũŪŊ3Hm“hY6ļ}8§t'yeΟ%´ŽŒÅVōÎG×ĨŨčđ\ˇŨ9?•s÷ūhÉō¨ær;~oĨ!n­hÜéWP´mƒßDÚLiCUt`g"œĨ6îœhĘz{Sm_jûú{Ō,˜¨ˆ Gjnō3Sb‹ŠŲÚ@æ´í.€u:ÖD1ŗ8#ŒV”|Ō•Ž{ŌcGc¤_CīÜũzëí|Dĸ#˛ZķË=&é@;NĐzŠßŗĩž=ģŽsíSĖÖĀŌ7ä—™d‘Œfœ­ŗîŧˆ{¨løUuŽ@qÛ52…ǜōØĸėV,Ã$™$ČOÖ´"Ô'‰N•N_h8lTė7æCÆ1ŌØX°/îÖ<‰˜ƒę*¨Ô´’’O=zR P[8”6ØXaPėT>rsĀÅ7Éd㠟ÎĨxy'Œdzū4Ē…‡īAÁÍHÆŨHn}})ĸ V?Â}*ÄJĘø%pŨ3Qfo”ļîN ĄQķ7Å0/ĘÍ!€j8æWS¸r:*@TŠËčÅK(TRęHUޏâ‘r ƒŒūYĻ™‹­ƒÆGAL`ŸČëJÃ#›$Ÿ”ũqUK„pNpzgëS;‡‡cHYäÖ¨yņ™Č9 ~ϟ(&_y‹ļŌ9ĸŗ#¨ŽzÕy¯<˜ŲäFâR>ĩÍ_xĸŅd+îā/FrqĀĒåS–Čč'ŋ Ǎcë\ž§âßõ‘Äš cĨa]ęWWŌn,ĘŊ• #y#’(ē:ã…i^E KR¸ŧšv‘ˆÜrTtUW2}*ÕŽ6ĄxŅÂ3ƒÉĢwúC錁Û,ã5­ÖĮŸ$ܙGn¤=ŠįĨ0×°Ļ rMĀBËPÅøíA¤2îšĀČŅ0ČuĮãU¤M’•ô4°’ŖÆĻŊ_ôˇaĐķH} ûķæĄíWeŒēd•—”Î*‘“Ü„IO(i¸4ÄŊ…%-{¸Y‚Ÿ,nīŽ)Ų`üŽ+!ĩH•˜c8 5V]ˇ“äķ;cš›΂;–A•=FyëVcš]ŋ0÷ŽNOD'”g€šocéū}ę°ņ4+!SŖĐ愀ėžëiÂļG­UžPąīÎí\„Ū*Ā*°†€sPÜxĄä„F°:äœĶ°ŽĸN/=Qy>Ū´<ŪCF¤ÉÅyšę“¤âQŒƒŪē=?Äi7ü|0Á㞠+ ėT–„’Ā’pAíOšdwÆÆ{Öež§m2NŠ=jŅ–+’pÛvœŠ¤Đ‹ÂEUÛĶŊL0ėrNNk!'a'͒GJē˛ą`G;ŋ:–‹Lš‡ •č8§õYĮĖO­F…ļä}ā:Tˆ[ppjXĮƄšĮíR1Üģ8ÜŊéˆ ÎHËwöRI$í>Ã4Xž‡mI°ū†ĸ'+‘é@pWã<“@\ >Ũˆ¨ˆ]쇏¨›ž3S“œq@ `ČĨ˛=ąQķeē˜,ˆûNF@î1ķĩpŖu¤1ĨYĀäœT2"‚­Ā?J#}Ü)ųēy…ßûqր+’­Œäš{ĮĀķR™]ˆô§””m,8 ben Į­;ėčë–ĮģÍO,yä€íLTÁĘŠú担ˆ&°YAT ƒ×pŦŲ4FÜ#•t) ÁÎ9ĨaģīāNâå9y4&b ļ>•RO ÆxPsž„×bč (ĒĒ{`õ¨üĸzuĸâå8Š<1’ ƒ“úĶíü4Ž ”#žEvßgm€gšX­ÕIéĀëEÂÆžj¸>HéšŅƒN†3ą!#¸5wcŠ˙ ÍZŠ2ėŦ24ŦWKp€)Lc¨Š–Æ@;Ģ`Œ’Ä8ãƒ@äĀ vÍ0! 66SžšÍ6MˆĀ õôĢĨ˜\ķNīÉCÁč Eųiƒ¸ƒÔgŠTã,Ā‘éŪĨōYUŋv7GšFŒŒg û@8íKhß<įyĢ`Į$UFå9Į\Õ4Íō¸#īwoöF í^ũ(¸XvCIœ¯ËÖĸÚ_æ8>ĩ2˛(O÷N}О6Ö. ąĮOjc›•ÁīÚĄp n#qÁ=ŠÄbCČíD¸Ã –>ƒŌ‹O(¯ØV<į°ŠÎ1 dQւ *–`<ØÔ )yqģĄÉаËfPG=F8ÅG"Ãfs’į æĸû`\ŦcåbŌ°u/YŲŖ‰įE`2rO°I\,Í9%ŠĖNÎrk–ÖõČk^+žūsŽč`Æ6į'ߚÍĩĩyČcĪ­S˛ZŽ<­ØÖ¸ņŖG+(F;Wg8ĒQÄOZģöe†ßĻj4\ôŦî{XzQŒnÅ ¤’ŲžĮ$Ũ€§Ú¯ŨFcĐ\ã¨ŖšŽ"VŠą›á3ļæåąžE*sö¨‡ĩKá4n]ŽîĩOȒß/–á”/Q[_ß<>VĖpIĢĘہŒbž8V“Öâ*ÁĶL\äž)Ũōi(9¤6„x5Á-898ÅUÜIĢŽ›’'˜ HeÂH‘ØBã­Kh"’Ô+}kKQuM!cĮĖĀ`ÕŦŨ`SƒČÍЗ°bɒ œL}HĐąäv­KfŒî‘ž‚¯ß6ČUGqš\Ãözœdņ˜/ņwĻÍKts;TCŠ­ Úŗąąjķ_ưđŪ#ĪųkŸ×5Z&‚ė €ËÍ[Š@×0ĻíáalõëK:„ģC„PÃĸE„Pš@˛˜ĸ-åį#wSõĻ­¤†Ĩ¸*%IĮŊ]ŽB€c§qHԜTŠFÁķjĐĸdšžĶšä`T.KÍ+›{4U’ÔíŦTŠ­XH1ŒĶfˇW(ĸäēWWEHīå†-‘’ėį<ÖÆâ U‚Ü9rOŪ'šÅšÔ $T ōƒLÉĻž§ĸÃuĖ­ŖžŖu^IŠã^c ˰ļcv_Ĩt6ž Fˆ-ÆwôXč6’“čry2:íÜxuo”VËGĀ•­4˜Œ8`Êá10y=ę)[$–$č)ŅĒcvá€9<Đ1äė]Û˛Obģ. $~ x•q埨9ÅH?!įŽ)C’ŲĀĮJaM̐7.zâŦ ĸ=™ü…" Áe$Į§JB+Žv““ŒzŌžqßĩJÄą8lvĮĩ* Č#¨Îi „ģ4„ėįĨI ä–98õéNÉ`BŽyÆâ1a#sˇ*?ŸôíL+ŽüœõÍL<–]ø Ѝ2\pքVîËŊW*8ų{Đ +n~•e#„äöīD@˛•lexõ&˜áãÃĢ ø§rlK,@.@€•N¨ÚO-а“îUH§)+@= b3jš\ ˇ==*db Uƒ‘Į4ŦĖį czS‘b_)q×4~|.Hę*-Œņ’Į-Û'{ԞCųåc‚déĮĩ:ņ^;ŽĒsĮĨU ōHۆ1ŒãĄĢžfčy÷¨B’JŦ€ņžhVfƒ PrG­ ĨÛūY¨ų)Ŧ|ÉT))‚7v8ôĻÉŊ°÷m^Tņۘ$ō~E$īā“ÛņôĒíÍš‚…<;ÔrI´ T.zŸj­q?–Aį¨<Ö6§ŽŲŲÁûŲJæ'œūė#VYJ<Æ&6ëĪ"˛u]vĮN…Cē°ÁĀČÉÍrz¯ŒÅÕÁKLH1¸ŽĶ˙¯\UũõÅö d™ËĶKQėŽÎĶ[ņBäé2ÄsķąÁävÅrŸc–ë–$įœži.ʸéSÁĢŦk°ĮĶŌĸN]ŽHZŌēQŒîëWl#1†ŽxĄuKiĘ}ęh§‰ĪĘāÖR”šÔKdâÉîú?b´gąČĒ Wtö rš¤Ę‰oR}÷Vđ၌֘ŲöcŽÃĨfŲÅöŊi‹ ĒVģÄN Ŧ§ŅŪėδ--Î  ŋ¨žŌ‹á5Ÿbá.ŊhŪÃæų…ëOaĮVq÷'3ąĪzOj}Įú÷Į­D:ÖČÂ[—ā8”8#­^ēbĪŒģpØ ŠÎŒüĀօõÂʨĒîHį¨ĀĻI^ô–`ĸįĨIĘ/ŌĸēaKžr:S 9‰yŠfԞ¤ŋ5ēSЧ5'@ļį‚=ę҉üĄ!!8ŨīTā8f¤vžĖ% 2™īC^ƒ×I-qĘÛsš{ŠĮ†Ņg/Ģbē¸ešĘP‘X–ĮĘÔūė‚ƒ;^Ve;ũ>K ŠHŧ•AˆŽĶ^ˇKš<ĐۂņôŽZîČĀ7ēzSFRƒJäÚfŠ5™ ĪB+ŦĶõ´¸n žŲë\ đjxæhØ$b™ žŠi)-ûĻažkf ČĒ@-‘ūMyž—╏Śę­5t?#@̐Į.<œÕļō™°Ē<˛8ÛÔŖ\cqTņRĒąRĄwÎåúTC+āô튐ĒČĘáą÷ģU8î öU„.`lđĮ¯Ŋ ĄŠä1ׯŊ4<A' §I„°;Iã8üj8žķer@8Îi,…p´ĻVČ;8ã¯JA´—#u)ÆW č2rųũ1IÃ(ÚAÎyæžnë•?Jíí*‹Āäũ}Uhæß„ÉR~\đqVáŒä|ÎØëĮ"Ŧ$jcķ;Į=ęCųeņ†Î?Ō…vVō—#äĶgZ2Ÿ~ūõ;ĄcęGŽ?láDGå ØÁbzõ¤ Į¸*įpõîkBÕ¤‹åäsøV{ÂÆ@ĀĮsŪ´cw\ĮÃķéÆi!˛Ä1pYÉ9ār*Ävņģ´ržHāäĮš¨âRN H-ĀŠ%vu%Įŗ.˙=? Ą-Ģ$€ŒôŠbc’K(ī* g܈<7ļ)° ĀÁ#¯ZfBÁÉp:SİĨÔr3TŒäOõ¨Éi]å ã¯įÍ2D 1ƜŽxĒį$9“¨' ب.T–VF,ŨH52:y;ˇečJ­=ŌÆF œö ,;‘#;‰ÜOÍÔc˙­IËų6r2ŧâĒ\9eGv*IÁœŒg#éX7ū(ąļXL÷Å!ä;™qž:~4ŌĨy›o˜âs§šÉÕĩë[<ųģPā}öÉ÷8ëé\FŖņÄĨt´#'į’Cãž1ÛÖšĢĢû­Bfšš”ģ4ö‹gUŠxâ3jņØFævĮÎũ¯ë„Ô¯o¯§ķ/$gcÜÕĢX ŗ ŸZcŽ ÕCW`Ģ]Ņ!ˆÂÍ+“€­SšĘŋpqÃv­-˜W*š”ĸ€ĩ=¸;Áš¨j.ĶéIš#[ÃH$iĨ'æ-ŠŊtAKŖīŽ+#M•ė/šŦz֝ÃfŌc×-XOâ5§nFQą‹|‡ũM\ŧß ,§ĄiĘ .)uŸõD÷ÍUîÂãĻ9™šį4Ę|ƒį,9ĻĩšĖ÷-FxŦŅ†ĶˇĒ ãœžųŦxūīãZö§Ėŗ`Ņî %ČÛøPK*Ęwۏ\uĻ[ŸŨãŪĸ.ÁJäãŌ …ÎN(f”Ũ¤Z„ūU$Orq/!?ŨZŅ˙„kUōƒÉpp<ÆëųT›:‘]LˆąæZŽûy0gŽÕ)šŪgWÆõ84˙:A|ō ´XJĒHײÔN™+J¤sÁõŦšu{ˇ•€Í*¸œåCsNû1Î `Ķ%ĘRwH֓Y¸˜Z‚qÉŦš§–PC°QéV=eo΁jŠry>ôފäŠ-ĖåCKƒVß !\ QÍ3pļ…|āņSÃy=ģã=G­1Ąmδ‹ Í D^IĀÍ26;_j}vÂTÃíĀÆz×y"Ƅ–ÃÜâščæ tģķ‡˜A qūEvŅĻåų@(Ī?D1D\*Č>¸’j@ ‰nFāpĮ…FbP2ŖSĶōŠĶ.]Oolũ*@o¸\¤ž§Ĩ&ęj‘X¯#8äpELs` ęßw'šTų‹2nõ#ĩ0ÆĖs‚r{Õļ%$?!d1īūzĶsšļđ3ƒÍ&4WTÁųŽCUƒ6°*F3Ži$ÎũĘG?Ĩ((#'­ Š ˇ;ą†&„;NFJņüęo$6XgŒiĐÚop20zĐ0ę éԏCVK.Ö!sü€§ãØxįšūTŨ›ÎÁŋ…>U’8v c Ļ[¯–{ +7PM!“Ébō;“œŌZۀáÜ.Ķķ ÜqKqŊR2U‚FqÅ8(r…ōˡę9§ÔCŽTdnīŒ vÉ<˜ķĩ”r¸ëë@V€ÎŦ¤ņøķŠtq4îÆNBö)ØCüÅČÁ'$qŽŋSچ#"pƒpËgŒÔGdjÁđY˜nŒbĸ’A•ö¯n3LÄ\ˇšÃa<‘ĀúT`,ū^āšÆ}GĨUg).ÎFŪ¤ŽÖŖ{“ÎcäŸl˙õÅ4…rô÷1%šˆ¯+͞/nbXÚK—H$?3œg¸˙>õZ˙_†Ņ$–VĮup=…ynŋâ;­Zå”;GE'ųúÕX=NÄŪ>”3ZY”bŖjˇ+é‘Úŧéåy\ŗ’riÁIëN Šd7qĐÄNŠ­HmABŽųĒq‚Ē>ĩiŽ Ą€qÚ˛ŪĮĨB1ŒbAšŌÎĘIgd“Æk/]ŋQēĖ „NõŦĀ™b8ô§`/ËCiIŗĢXa”â i t™ øQģ)ĨŠ…ŗNÄšX#y› ^ˇĶÔ`ĘyôŠôå4āUô nĻô3ģû5ˇ’aˆcĒôé# Ēļ` ĨĮĨMvH,k);ŗXFĮŠļëų TZą|s{'Ö̊Ųlc/‰‹Ū‚pϊîͧ h4ņHhpéZZJæb}fޕ̤đ\ûT˛ŅŽök=ˇ˜~ōˇ OįE$@ᑰsWíđ-Tg¯5‡p¯op× ÷Žk7ĢąĸŌ754āRR č=j]ˇBÜņžĩ›u|ĀácšģŠšHä]$™œîĪ"…j Jö9āÄ1ĄĻ‘†¤=M=>l/~ÕšĖYXd‚¤iāļŨš8ô¯@“BYŽÁ¸÷zæą.<= RÉdœÔķ!´ŅĖmb ÁĀīQã2.A#<ZmoąĨŒŠ *ĩš3ŊŖ`āãŠwŽėuēˇckb"šže ÷P'õ=į‹í„-Ĩŗŗâ”ôŽ@Ŗ/QI´‘œ~4ÜŲēŖŲíæÜ4Žgb[ŽæŦ$QŖō¨$0ĀīVcæ<žõÅ$ė4¯*'pjחšÂä=rME"ĢcåmŨ:b‚¤ĐåäR•ëÅÃpčĪęŖ$Ēį˜L€ĮŠįEiÁķԚĪ­lYi3ęyQ‚íĀįúÖä^ t†)&•NH,ƒƒ×ˇáEŅ„žĻZŠqeĐÚ;$ŧé]‹áChŌ5ôjØÁBAõĮ˙^ē¨#Ų‚"V.3ôĢ!d0˜Ãm\į­+’õo Aō–4„7ʇ§q-åu=r8ĄĄÂ,œūĪJ|rķ‘•8<ÔÜh´cxųŪ8î9ūUJP€;”°Šq4ÖM‡'Š$ķ×ë@˛ūėCC§üķDĖ9Î?•I¸Ũ‚‰§´,Ģ‚0FxÍ3?7=XķšTGšQå‚AëSÚDŸ8t€ū,ĶŧŌĢˆÔ‚NHZ@1-¤Cķũėã9Ģ8€’2ÄīpiŅÆFépÃ8 úÔÆ!Ü Fy4ė›ūQƌr}ĒKh™%cƒĐž)°Ą,‘qËš§–=ŦĒ xãŽhB#šBBаg#ĩC´ųAŠŲÎ3R:I$Ļ&VpXc‘øRąËgoNŖ9č(˛ÂîfųR*Pl ö [ąYlb“jƒķ0‰n‰ā/°¨3Sr”;–ZvōļE=rl¤Ē\€9&Ļ–ŲĄ@ĖFOj`I"eH"ĨœĘĀ3Œ˜#_O˙V• ,9 #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define NPATHS 6 static const l_int32 x0[NPATHS] = {42, 73, 73, 42, 324, 471}; static const l_int32 y0[NPATHS] = {117, 319, 319, 117, 170, 201}; static const l_int32 x1[NPATHS] = {419, 419, 233, 326, 418, 128}; static const l_int32 y1[NPATHS] = {383, 383, 112, 168, 371, 341}; int main(int argc, char **argv) { l_int32 i, w, h; PIX *pixm, *pixg, *pixt, *pixd; PIXA *pixa; PIXAA *paa; PTA *pta; PTAA *ptaa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; paa = pixaaCreate(2); /* ---------------- Shortest path in binary maze ---------------- */ /* Generate the maze */ pixa = pixaCreate(0); pixm = generateBinaryMaze(200, 200, 20, 20, 0.65, 0.25); pixd = pixExpandBinaryReplicate(pixm, 3, 3); pixaAddPix(pixa, pixd, L_INSERT); /* Find the shortest path between two points */ pta = pixSearchBinaryMaze(pixm, 20, 20, 170, 170, NULL); pixt = pixDisplayPta(NULL, pixm, pta); pixd = pixScaleBySampling(pixt, 3., 3.); pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ ptaDestroy(&pta); pixDestroy(&pixt); pixDestroy(&pixm); /* ---------------- Shortest path in gray maze ---------------- */ pixg = pixRead("test8.jpg"); pixGetDimensions(pixg, &w, &h, NULL); ptaa = ptaaCreate(NPATHS); for (i = 0; i < NPATHS; i++) { if (x0[i] >= w || x1[i] >= w || y0[i] >= h || y1[i] >= h) { lept_stderr("path %d extends beyond image; skipping\n", i); continue; } pta = pixSearchGrayMaze(pixg, x0[i], y0[i], x1[i], y1[i], NULL); ptaaAddPta(ptaa, pta, L_INSERT); } pixt = pixDisplayPtaa(pixg, ptaa); pixd = pixScaleBySampling(pixt, 2., 2.); pixa = pixaCreate(0); pixaAddPix(pixa, pixd, L_INSERT); pixaaAddPixa(paa, pixa, L_INSERT); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ ptaaDestroy(&ptaa); pixDestroy(&pixg); pixDestroy(&pixt); /* Bundle it all up */ pixd = pixaaDisplayByPixa(paa, 3, 1.0, 20, 40, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaaDestroy(&paa); return regTestCleanup(rp); } leptonica-1.86.0/prog/messagetest.c000066400000000000000000000165321506303110300172220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* Test the message severity system. */ /* There are three parts: * o The first part demonstrates the message severity functionality. * o The second part demonstrates a combination of message severity control * and redirect of output to stderr (in this case to dev null). * o The third part shows that the naked fprintf() is not affected by the * callback handler, and the default handler is restored with NULL input. * * Notes on the message severity functionality * -------------------------------------------- * * The program prints info, warning, and error messages at the initial * run-time severity, which defaults to L_SEVERITY_INFO. Then it resets the * severity to the value specified by an environment variable (or failing * that, specified by one of 7 severity control variables) and prints three * more info, warning, and error messages. * * Which messages actually print depend on the compile-time definitions of the * MINIMUM_SEVERITY and DEFAULT_SEVERITY identifiers and the run-time * definition of the LEPT_MSG_SEVERITY environment variable. For example: * * These commands... --> ...print these messages * ============================== ==================================== * $ make * * $ ./print --> info, warn, error, info, warn, error * $ LEPT_MSG_SEVERITY=0 ./print --> info, warn, error, info, warn, error * $ LEPT_MSG_SEVERITY=5 ./print --> info, warn, error, error * $ LEPT_MSG_SEVERITY=6 ./print --> info, warn, error * * * $ make clean ; make DEFINES='-D DEFAULT_SEVERITY=L_SEVERITY_WARNING' * * $ ./print --> warn, error, warn, error * $ LEPT_MSG_SEVERITY=0 ./print --> warn, error, info, warn, error * $ LEPT_MSG_SEVERITY=5 ./print --> warn, error, error * $ LEPT_MSG_SEVERITY=6 ./print --> warn, error * * * $ make clean ; make DEFINES='-D MINIMUM_SEVERITY=L_SEVERITY_WARNING' * * $ ./print --> warn, error, warn, error * $ LEPT_MSG_SEVERITY=0 ./print --> warn, error, warn, error * $ LEPT_MSG_SEVERITY=5 ./print --> warn, error, error * $ LEPT_MSG_SEVERITY=6 ./print --> warn, error * * * $ make clean ; make DEFINES='-D NO_CONSOLE_IO' * * $ ./print --> (no messages) * $ LEPT_MSG_SEVERITY=0 ./print --> (no messages) * $ LEPT_MSG_SEVERITY=5 ./print --> (no messages) * $ LEPT_MSG_SEVERITY=6 ./print --> (no messages) * * Note that in the first and second cases, code is generated to print all six * messages, while in the third and fourth cases, code is not generated to * print info or all messages, respectively. This allows the run-time overhead * and code space of the print statements to be removed from the library, if * desired. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void TestMessageControl(l_int32 severity); void TestStderrRedirect(); /* dev null callback for stderr redirect */ static void send_to_devnull(const char *msg) {} int main () { /* Part 1: all output to stderr */ lept_stderr("\nSeverity tests\n"); TestMessageControl(L_SEVERITY_EXTERNAL); TestMessageControl(L_SEVERITY_INFO); TestMessageControl(L_SEVERITY_WARNING); TestMessageControl(L_SEVERITY_ERROR); TestMessageControl(L_SEVERITY_NONE); /* Part 2: test combination of severity and redirect */ lept_stderr("\nRedirect Tests\n\n"); setMsgSeverity(L_SEVERITY_INFO); TestStderrRedirect(); setMsgSeverity(L_SEVERITY_WARNING); TestStderrRedirect(); setMsgSeverity(L_SEVERITY_ERROR); TestStderrRedirect(); setMsgSeverity(L_SEVERITY_NONE); TestStderrRedirect(); /* Part 3: test of naked fprintf and output with callback handler. * All lines should print except for line 4. */ lept_stderr("1. text\n"); lept_stderr("2. text\n"); leptSetStderrHandler(send_to_devnull); lept_stderr("3. text\n"); lept_stderr("4. text\n"); leptSetStderrHandler(NULL); lept_stderr("5. text\n"); lept_stderr("6. text\n"); return 0; } void TestMessageControl(l_int32 severity) { l_int32 orig_severity; setMsgSeverity(DEFAULT_SEVERITY); fputc ('\n', stderr); /* Print a set of messages with the default setting */ L_INFO ("First message\n", "messagetest"); L_WARNING ("First message\n", "messagetest"); L_ERROR ("First message\n", "messagetest"); /* Set the run-time severity to the value specified by the LEPT_MSG_SEVERITY environment variable. If the variable is not defined, set the run-time severity to the input value */ orig_severity = setMsgSeverity(severity); /* Print messages allowed by the new severity setting */ L_INFO ("Second message\n", "messagetest"); L_WARNING ("Second message\n", "messagetest"); L_ERROR ("Second message\n", "messagetest"); } void TestStderrRedirect() { PIX *pix1; /* Output to stderr works */ L_INFO("test output 1 to stderr\n", "messagetest"); L_WARNING("test output 1 to stderr\n", "messagetest"); L_ERROR("test output 1 to stderr\n", "messagetest"); pix1 = pixRead("doesn't_exist"); /* There is no "test output 2" */ leptSetStderrHandler(send_to_devnull); L_INFO("test output 2 to stderr\n", "messagetest"); L_WARNING("test output 2 to stderr\n", "messagetest"); L_ERROR("test output 2 to stderr\n", "messagetest"); pix1 = pixRead("doesn't_exist"); leptSetStderrHandler(NULL); /* Output is restored to stderr */ L_INFO("test output 3 to stderr\n", "messagetest"); L_WARNING("test output 3 to stderr\n", "messagetest"); L_ERROR("test output 3 to stderr\n", "messagetest"); pix1 = pixRead("doesn't_exist"); lept_stderr("---------------------------------\n"); } leptonica-1.86.0/prog/minisblack.tif000066400000000000000000000013521506303110300173440ustar00rootroot00000000000000II*,&špØn.ŒDa‘Â'å:ĮY¸˙)ŅÁj<ā˜_1Äp× ĄĮ— ÃÅ.ŖU]uŊA*Zŋū‚ēū—H%ĒׄpKTŋ ũ}%­RūŊ%­jēZĒ ÖŠÖĩ ē]xA~°•/…×ÂūžļĢ(2.ÄĖáņN‰LOϏhzLĄu& ‹ œPÎû׊ÁiK‡ĩŦ&žžšņH‚SQIĨI*Â_ú…„^ĩZŌJŠuĨJ¸KJē¤ĢZ]kŌč*Õ$ĩë ž’úZ¯ũRJ‚ÕUę*Ģę’íSÕ5MpŒä0 AC‘ÄŖZ‚ ÂƞŸ5¯”2ēá׊Ár'\ĀU ‘°š¯]SúņHzHxZ¤=z^ŋ„’Šą8_Ú­$ĩŊ(JĄkZŽ’õū–ĐIa}}/¯×T’¯K×Ō^]t—˙ūŊ.8U\šĨë[\*5ŗ¨.]‘tT ŠŒžŊDu!k@ņŦ‚„V? rt&ę9:a|ĐKɎOC:8zK¨ÕWގ¨ĒZŋũ!kúZA-UxAV j—Âūž’­RũzJĩĒŌÕP]j—úÕh.–ŧ ž°•/ ¯ úõĩR8!™E1„@ˆ AĒ! r ؑŽ×†‡ŌdpÖRä2#†}÷ޤįJr-V_^šņH†%E%ũ*IT%˙P°‚K­VŠ%TĩĨJ°–•j’­Rë].‚Ǥ–ē¯I}*¯ú¤•UWĒU_¨ZKÚ§­5Mq#įPĐ …â Ē" A„zyų3Ž„ä.¤į të2*EŸU×Tū¸¤=$<*¤=tŊ~JĨĶ ûUI-D.”%PĢZ­%ëúXJ‚K ×ŌõúÕ$ĢĨëŌ^Zé/˙õéu…UÚõĢ\*A‹!Šd4a0ƒ3 ‚heÁb:Č(9 Ąō]Á2cä­ šČšŠ'Đvāšz U¤—Ú vĩaBXĨBaB¨JŊBĨ ]RKJŋ__I%K_Áëæ=tŊ:ւ×úސKũūƒ¯K˙…iÃõú˙ĘŅ„ÔGi‚ ŧÆ ÕĪĶ[[^ŖŠ:=Î>K¨]h8ÔĮÉZü/ǤũpĢĐđOĒëH{ hR QK ũuZ­Uz_פŌKPĄ}Ĩ^’_ú¯U˙éWK×ü*˙ũ/_éBū× (N\@d––ÖŪ(,,leptonica-1.86.0/prog/misctest1.c000066400000000000000000000374151506303110300166150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * misctest1.c * * Combine two grayscale images using a mask * * Combine two binary images using a mask * * Do a restricted seedfill * * Colorize a grayscale image * * Convert color to gray * * Extract text lines * * Plot box side locations and dimension of a boxa * * Extract and display rank sized components * * Extract parts of an image using a boxa * * Display pixaa in row major order by component pixa. * * Test zlib compression in png * * Show sampled scaling with and without source indexing shift * * Display differences in images with pixDisplayDiff() * * Demonstrate read of cmap+alpha png, and I/O of rgba pnm, bmp, webp */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define SHOW 0 static const size_t zlibsize[5] = {1047868, 215039, 195778, 189709, 180987}; int main(int argc, char **argv) { l_int32 w, h, bx, by, bw, bh, i, j, same; size_t size; BOX *box1, *box2; BOXA *boxa1, *boxa2, *boxae, *boxao; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pixg, *pixb, *pixd, *pixc; PIX *pixm, *pixm2, *pixd2, *pixs2; PIXA *pixa1, *pixa2; PIXAA *paa; PIXCMAP *cmap, *cmapg; setLeptDebugOK(1); lept_mkdir("lept/misc"); paa = pixaaCreate(0); /* Combine two grayscale images using a mask */ lept_stderr("Combine two grayscale images using a mask\n"); pixa1 = pixaCreate(0); pixd = pixRead("feyn.tif"); pixs = pixRead("rabi.png"); pixm = pixRead("pageseg2-seed.png"); pixd2 = pixScaleToGray2(pixd); pixs2 = pixScaleToGray2(pixs); pixaAddPix(pixa1, pixd2, L_COPY); pixaAddPix(pixa1, pixs2, L_INSERT); pixaAddPix(pixa1, pixm, L_COPY); pixCombineMaskedGeneral(pixd2, pixs2, pixm, 100, 100); pixaAddPix(pixa1, pixd2, L_INSERT); pixDisplayWithTitle(pixd2, 100, 100, NULL, SHOW); pixaaAddPixa(paa, pixa1, L_INSERT); /* Combine two binary images using a mask */ lept_stderr("Combine two binary images using a mask\n"); pixa1 = pixaCreate(0); pixm2 = pixExpandBinaryReplicate(pixm, 2, 2); pix1 = pixCopy(NULL, pixd); pixCombineMaskedGeneral(pixd, pixs, pixm2, 200, 200); pixaAddPix(pixa1, pixd, L_COPY); pixDisplayWithTitle(pixd, 700, 100, NULL, SHOW); pixCombineMasked(pix1, pixs, pixm2); pixaAddPix(pixa1, pix1, L_INSERT); pixaaAddPixa(paa, pixa1, L_INSERT); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixm); pixDestroy(&pixm2); /* Do a restricted seedfill */ lept_stderr("Do a restricted seedfill\n"); pixa1 = pixaCreate(0); pixs = pixRead("pageseg2-seed.png"); pixm = pixRead("pageseg2-mask.png"); pixd = pixSeedfillBinaryRestricted(NULL, pixs, pixm, 8, 50, 175); pixaAddPix(pixa1, pixs, L_INSERT); pixaAddPix(pixa1, pixm, L_INSERT); pixaAddPix(pixa1, pixd, L_INSERT); pixaaAddPixa(paa, pixa1, L_INSERT); pix1 = pixaaDisplayByPixa(paa, 10, 0.5, 40, 40, 2); pixWrite("/tmp/lept/misc/mos1.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 100); pixaaDestroy(&paa); pixDestroy(&pix1); /* Colorize a grayscale image */ lept_stderr("Colorize a grayscale image\n"); paa = pixaaCreate(0); pixa1 = pixaCreate(0); pixs = pixRead("lucasta.150.jpg"); pixGetDimensions(pixs, &w, &h, NULL); pixb = pixThresholdToBinary(pixs, 128); boxa1 = pixConnComp(pixb, &pixa2, 8); pixaAddPix(pixa1, pixs, L_COPY); cmap = pixcmapGrayToColor(0x6f90c0); pixSetColormap(pixs, cmap); pixaAddPix(pixa1, pixs, L_COPY); pixc = pixaDisplayRandomCmap(pixa2, w, h); pixcmapResetColor(pixGetColormap(pixc), 0, 255, 255, 255); pixaAddPix(pixa1, pixc, L_INSERT); pixaaAddPixa(paa, pixa1, L_INSERT); pixDestroy(&pixs); pixDestroy(&pixb); boxaDestroy(&boxa1); pixaDestroy(&pixa2); /* Convert color to gray */ lept_stderr("Convert color to gray\n"); pixa1 = pixaCreate(0); pixs = pixRead("weasel4.16c.png"); pixaAddPix(pixa1, pixs, L_INSERT); pixc = pixConvertTo32(pixs); pix1 = pixConvertRGBToGray(pixc, 3., 7., 5.); /* bad weights */ pixaAddPix(pixa1, pix1, L_INSERT); pix2 = pixConvertRGBToGrayFast(pixc); pixaAddPix(pixa1, pix2, L_INSERT); pixg = pixCopy(NULL, pixs); cmap = pixGetColormap(pixs); cmapg = pixcmapColorToGray(cmap, 4., 6., 3.); pixSetColormap(pixg, cmapg); pixaAddPix(pixa1, pixg, L_INSERT); pixaaAddPixa(paa, pixa1, L_INSERT); pixDestroy(&pixc); pix1 = pixaaDisplayByPixa(paa, 10, 1.0, 20, 20, 0); pixWrite("/tmp/lept/misc/mos2.png", pix1, IFF_PNG); pixDisplay(pix1, 400, 100); pixaaDestroy(&paa); pixDestroy(&pix1); /* Extract text lines */ lept_stderr("Extract text lines\n"); pix1 = pixRead("feyn.tif"); pixa1 = pixExtractTextlines(pix1, 150, 150, 0, 0, 5, 5, NULL); boxa1 = pixaGetBoxa(pixa1, L_CLONE); boxaWrite("/tmp/lept/misc/lines1.ba", boxa1); pix2 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix2), 0, 255, 255, 255); pixDisplay(pix2, 400, 0); pixWrite("/tmp/lept/misc/lines1.png", pix2, IFF_PNG); boxaDestroy(&boxa1); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); pix1 = pixRead("arabic.png"); pixa1 = pixExtractTextlines(pix1, 150, 150, 0, 0, 5, 5, NULL); pix2 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix2), 0, 255, 255, 255); pixDisplay(pix2, 400, 400); pixWrite("/tmp/lept/misc/lines2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); pix1 = pixRead("arabic2.png"); pixa1 = pixExtractTextlines(pix1, 150, 150, 0, 0, 5, 5, NULL); pix2 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix2), 0, 255, 255, 255); pixDisplay(pix2, 400, 800); pixWrite("/tmp/lept/misc/lines3.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); /* Plot box side locations and dimensions of a boxa */ lept_stderr("Plot box side locations and dimensions of a boxa\n"); pixa1 = pixaCreate(0); boxa1 = boxaRead("boxa2.ba"); boxaSplitEvenOdd(boxa1, 0, &boxae, &boxao); boxaPlotSides(boxae, "1-sides-even", NULL, NULL, NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSides(boxao, "1-sides-odd", NULL, NULL, NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSizes(boxae, "1-sizes-even", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSizes(boxao, "1-sizes-odd", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaDestroy(&boxae); boxaDestroy(&boxao); boxaDestroy(&boxa1); boxa1 = boxaRead("boxa3.ba"); boxaSplitEvenOdd(boxa1, 0, &boxae, &boxao); boxaPlotSides(boxae, "2-sides-even", NULL, NULL, NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSides(boxao, "2-sides-odd", NULL, NULL, NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSizes(boxae, "2-sizes-even", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaPlotSizes(boxao, "2-sizes-odd", NULL, NULL, &pix1); pixaAddPix(pixa1, pix1, L_INSERT); boxaDestroy(&boxae); boxaDestroy(&boxao); boxaDestroy(&boxa1); pix1 = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 30, 2); pixWrite("/tmp/lept/misc/boxaplots.png", pix1, IFF_PNG); pixDisplay(pix1, 800, 0); pixDestroy(&pix1); pixaDestroy(&pixa1); /* Extract and display rank sized components */ lept_stderr("Extract and display rank sized components\n"); pixs = pixRead("rabi-tiny.png"); pixa1 = pixaCreate(0); for (i = 1; i <= 5; i++) { pixaAddPix(pixa1, pixs, L_COPY); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixSetAll(pixd); for (j = 0; j < 6; j++) { pix1 = pixSelectComponentBySize(pixs, j, i, 8, &box1); pix2 = pixConvertTo32(pix1); boxGetGeometry(box1, &bx, &by, &bw, &bh); pixRasterop(pixd, bx, by, bw, bh, PIX_SRC, pix2, 0, 0); box2 = boxAdjustSides(NULL, box1, -2, 2, -2, 2); pixRenderBoxArb(pixd, box2, 2, 255, 0, 0); pixaAddPix(pixa1, pixd, L_COPY); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box1); boxDestroy(&box2); } pixDestroy(&pixd); } pix3 = pixaDisplayTiledAndScaled(pixa1, 32, 300, 7, 0, 30, 2); pixWrite("/tmp/lept/misc/comps.png", pix3, IFF_PNG); pixDisplay(pix3, 600, 300); pixaDestroy(&pixa1); pixDestroy(&pixs); pixDestroy(&pix3); /* Extract parts of an image using a boxa */ lept_stderr("Extract parts of an image using a boxa\n"); pix1 = pixRead("feyn-fract.tif"); boxa1 = pixConnCompBB(pix1, 4); boxa2 = boxaSelectBySize(boxa1, 0, 28, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL), pix2 = pixCopyWithBoxa(pix1, boxa2, L_SET_WHITE); pixWrite("/tmp/lept/misc/tallcomps.png", pix2, IFF_PNG); pixDisplay(pix2, 600, 600); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* Display pixaa in row major order by component pixa. */ lept_stderr("Display pixaa in row major order by component pixa\n"); pix1 = pixRead("char.tif"); paa = pixaaCreate(100); for (i = 0; i < 50; i++) { pixa1 = pixaCreate(100); for (j = 0; j < 125 - 2 * i; j++) pixaAddPix(pixa1, pix1, L_COPY); pixaaAddPixa(paa, pixa1, L_INSERT); } pix2 = pixaaDisplayByPixa(paa, 50, 1.0, 10, 5, 0); pixWrite("/tmp/lept/misc/display.png", pix2, IFF_PNG); pixDisplay(pix2, 100, 100); pixaaDestroy(&paa); pixDestroy(&pix1); pixDestroy(&pix2); /* Test the set and clear block functions in cmapped pix */ lept_stderr("Test the set and clear block functions in cmapped pix\n"); lept_stderr("******************************************************\n"); lept_stderr("* Testing error checking: ignore two reported errors *\n"); pix1 = pixRead("weasel4.11c.png"); pixa1 = pixaCreate(0); pix2 = pixCopy(NULL, pix1); pixClearAll(pix2); pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetAll(pix2); /* error */ pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetAllArbitrary(pix2, 4); pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetAllArbitrary(pix2, 11); /* warning */ pixaAddPix(pixa1, pix2, L_INSERT); box1 = boxCreate(20, 20, 30, 30); pix2 = pixCopy(NULL, pix1); pixClearInRect(pix2, box1); pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetInRect(pix2, box1); /* error */ pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetInRectArbitrary(pix2, box1, 4); pixaAddPix(pixa1, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); pixSetInRectArbitrary(pix2, box1, 12); /* warning */ pixaAddPix(pixa1, pix2, L_INSERT); lept_stderr("******************************************************\n"); pix3 = pixaDisplayTiledInColumns(pixa1, 10, 1.0, 15, 2); pixWrite("/tmp/lept/misc/setting.png", pix3, IFF_PNG); pixDisplay(pix3, 500, 100); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa1); /* Test zlib compression in png */ /* Note that delta may be nonzero with some libraries */ pixs = pixRead("feyn.tif"); for (i = 0; i < 5; i++) { pixSetZlibCompression(pixs, 2 * i); pixWrite("/tmp/lept/misc/zlibtest.png", pixs, IFF_PNG); size = nbytesInFile("/tmp/lept/misc/zlibtest.png"); lept_stderr("zlib level = %d, file size = %lu, delta = %lu\n", 2 * i, (unsigned long)size, (unsigned long)(size - zlibsize[i])); } pixDestroy(&pixs); /* Show sampled scaling with and without source indexing shift */ pixs = pixCreate(3, 3, 4); cmap = pixcmapCreateRandom(4, 0, 0); for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) pixSetPixel(pixs, j, i, 3 * i + j); pixSetColormap(pixs, cmap); pix1 = pixScaleBySampling(pixs, 100, 100); pix2 = pixScaleBySamplingWithShift(pixs, 100, 100, 0.0, 0.0); pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa1, 2, 1.0, 30, 2); pixWrite("/tmp/lept/misc/sampletest.png", pix3, IFF_PNG); pixDisplay(pix3, 1000, 100); pixDestroy(&pixs); pixDestroy(&pix3); pixaDestroy(&pixa1); /* Display differences in images with pixDisplayDiff() */ pix1 = pixRead("feyn-fract.tif"); pix2 = pixTranslate(NULL, pix1, 20, 0, L_BRING_IN_WHITE); pix3 = pixDisplayDiff(pix1, pix2, 1, 1, 0xff000000); pixWrite("/tmp/lept/misc/diff-1bit.png", pix3, IFF_PNG); pixDisplay(pix3, 100, 1000); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixRead("test-rgb.png"); pix2 = pixExpandReplicate(pix1, 4); pix3 = pixTranslate(NULL, pix2, 1, 0, L_BRING_IN_WHITE); pix4 = pixDisplayDiff(pix2, pix3, 1, 10, 0xff000000); pixWrite("/tmp/lept/misc/diff-32bit.png", pix4, IFF_PNG); pixDisplay(pix4, 400, 1000); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Demonstrate read of cmap+alpha png; I/O of rgba pnm, bmp, webp */ pix1 = pixRead("elephant-cmap-alpha.png"); /* has colormap */ pixDisplay(pix1, 1300, 800); pixWrite("/tmp/lept/misc/e.pnm", pix1, IFF_PNM); pixWrite("/tmp/lept/misc/e.bmp", pix1, IFF_BMP); #if HAVE_LIBWEBP pixWrite("/tmp/lept/misc/e.webp", pix1, IFF_WEBP); #endif /* HAVE_LIBWEBP */ pix2 = pixRead("/tmp/lept/misc/e.pnm"); pixEqual(pix1, pix2, &same); lept_stderr("png vs pnm same? (yes): %d\n", same); pixDestroy(&pix2); pix2 = pixRead("/tmp/lept/misc/e.bmp"); pixEqual(pix1, pix2, &same); lept_stderr("png vs bmp same? (yes): %d\n", same); pixDestroy(&pix2); #if HAVE_LIBWEBP pix2 = pixRead("/tmp/lept/misc/e.webp"); pixDisplay(pix2, 1440, 800); /* interesting change in rgb layer */ pixEqual(pix1, pix2, &same); lept_stderr("png vs webp same? (no): %d\n", same); pixDestroy(&pix2); #endif /* HAVE_LIBWEBP */ pixDestroy(&pix1); return 0; } leptonica-1.86.0/prog/misctest2.c000066400000000000000000000136361506303110300166150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * misctest2.c * * Page cropping with light filtering * * Page cropping with removal of fg on left and right sides * * Demonstrate image cleaning function * * Demonstrat page cropping for 2-column, where one column is * Kanji, and removing lots of junk on left and right sides. * * Demonstrate page cropping with edgeclean = -2, for a situation * where a bad oversized mediabox confuses the pdftoppm renderer, * which embeds the page image in a larger black image. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char buf[256]; PIX *pix1, *pix2, *pix3; PIXA *pixa1; setLeptDebugOK(1); lept_mkdir("lept/misc"); /* Page cropping with light filtering */ pix1 = pixRead("tel_3.tif"); pix2 = pixCropImage(pix1, 30, 30, 4, 25, 25, 1.15, 0, "/tmp/lept/misc/crop_tel3.pdf", NULL); pixDestroy(&pix1); pixDestroy(&pix2); /* Page cropping with removal of fg on left and right sides */ pix1 = pixRead("boismort.1.tif"); pix2 = pixCropImage(pix1, 50, 50, -1, 70, 70, 1.1, 0, "/tmp/lept/misc/crop_bois1.pdf", NULL); pixDestroy(&pix1); pixDestroy(&pix2); /* Page cropping with removal of fg on left and right sides */ pix1 = pixRead("boismort.15.tif"); pix2 = pixCropImage(pix1, 50, 50, -1, 70, 70, 1.1, 0, "/tmp/lept/misc/crop_bois15.pdf", NULL); pixDestroy(&pix1); pixDestroy(&pix2); /* Page cropping for 2 columns with junk on left and right sides, * This is the 2-column introductory material from Bruggen's * transcription of Bach's Cello Suites 1-3. The right column * is kanji, which is relatively weak for coalescing into * connected blocks. So it is necessary to include a * horizontal close/open of size 3, and in the algorithm, the * vertical close/open needs to be at least 70 at 4x reduction. */ lept_mkdir("lept/2_column"); lept_cp("2_column_crop_input.pdf", "lept/2_column", "input.pdf", NULL); snprintf(buf, sizeof(buf), "croppdf /tmp/lept/2_column 50 50 -1 70 70 1.12 0" " none /tmp/lept/misc/2_column_crop_result.pdf"); lept_stderr("Writing /tmp/lept/misc/2_column_crop_result.pdf\n"); callSystemDebug(buf); /* Page cropping for oversize media box that causes the renderer * to embed the page in a larger black image. So we need to * extract the actual page. This is now done with croppdf, using * edgeclean = -2. The bad scan was encoded with jbig2. It looks * OK when rendering with evince, but pdftoppm is tripped up by the * mediabox. See the rendered images at the end of this file. */ lept_mkdir("lept/bad_mediabox"); lept_cp("bad_mediabox_input.pdf", "lept/bad_mediabox", "input.pdf", NULL); snprintf(buf, sizeof(buf), "croppdf /tmp/lept/bad_mediabox 50 50 -2 80 80 1.12 0" " none /tmp/lept/misc/bad_mediabox_crop_result.pdf"); lept_stderr("Writing /tmp/lept/misc/bad_mediabox_crop_result.pdf\n"); callSystemDebug(buf); /* Page cleaning */ pixa1 = pixaCreate(3); pix1 = pixRead("tel_3.tif"); pix2 = pixRotate(pix1, 0.02, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pix3 = pixCleanImage(pix2, 1, 0, 1, 0); pixaAddPix(pixa1, pix3, L_INSERT); pixDisplay(pix3, 800, 800); pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixRead("w91frag.jpg"); pixaAddPix(pixa1, pixScale(pix1, 2.5, 2.5), L_INSERT); pix2 = pixRotate(pix1, 0.02, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pix3 = pixCleanImage(pix2, 1, 0, 1, 0); pixaAddPix(pixa1, pixScale(pix3, 2.5, 2.5), L_INSERT); pixDisplay(pix3, 1200, 800); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); lept_stderr("Writing /tmp/lept/misc/pageclean.pdf\n"); pixaConvertToPdf(pixa1, 0, 1.0, L_DEFAULT_ENCODE, 50, NULL, "/tmp/lept/misc/pageclean.pdf"); pixaDestroy(&pixa1); /* Input images to bad mediabox example pages; delayed from * above to give system a chance to generate them. */ snprintf(buf, sizeof(buf), "displaypix /tmp/lept/renderpdf/input-1.ppm"); callSystemDebug(buf); snprintf(buf, sizeof(buf), "displaypix /tmp/lept/renderpdf/input-2.ppm"); callSystemDebug(buf); return 0; } leptonica-1.86.0/prog/modifyhuesat.c000066400000000000000000000071241506303110300173740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * modifyhuesat.c * * modifyhuesat filein nhue dhue nsat dsat fileout * * where nhue and nsat are odd * * This gives a rectangle of nhue x nsat output images, * where the center image is not modified. * * Example: modifyhuesat test24.jpg 5 0.2 5 0.2 /tmp/junkout.jpg */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 i, j, w, d, nhue, nsat, tilewidth; l_float32 scale, dhue, dsat, delhue, delsat; PIX *pixs, *pixt1, *pixt2, *pixd; PIXA *pixa; if (argc != 7) return ERROR_INT( " Syntax: modifyhuesat filein nhue dhue nsat dsat fileout", __func__, 1); filein = argv[1]; nhue = atoi(argv[2]); dhue = atof(argv[3]); nsat = atoi(argv[4]); dsat = atof(argv[5]); fileout = argv[6]; if (nhue % 2 == 0) { nhue++; lept_stderr("nhue must be odd; raised to %d\n", nhue); } if (nsat % 2 == 0) { nsat++; lept_stderr("nsat must be odd; raised to %d\n", nsat); } setLeptDebugOK(1); if ((pixt1 = pixRead(filein)) == NULL) return ERROR_INT("pixt1 not read", __func__, 1); pixGetDimensions(pixt1, &w, NULL, NULL); scale = 250.0 / (l_float32)w; pixt2 = pixScale(pixt1, scale, scale); pixs = pixConvertTo32(pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); pixGetDimensions(pixs, &w, NULL, &d); pixa = pixaCreate(nhue * nsat); for (i = 0; i < nsat; i++) { delsat = (i - nsat / 2.0) * dsat; pixt1 = pixModifySaturation(NULL, pixs, delsat); for (j = 0; j < nhue; j++) { delhue = (j - nhue / 2.0) * dhue; pixt2 = pixModifyHue(NULL, pixt1, delhue); pixaAddPix(pixa, pixt2, L_INSERT); } pixDestroy(&pixt1); } tilewidth = L_MIN(w, 1500 / nsat); pixd = pixaDisplayTiledAndScaled(pixa, d, tilewidth, nsat, 0, 25, 3); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/morphseq_reg.c000066400000000000000000000112641506303110300173660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * morphseq_reg.c * * Simple regression test for binary morph sequence (interpreter), * showing display mode and rejection of invalid sequence components. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define SEQUENCE1 "O1.3 + C3.1 + R22 + D2.2 + X4" #define SEQUENCE2 "O2.13 + C5.23 + R22 + X4" #define SEQUENCE3 "e3.3 + d3.3 + tw5.5" #define SEQUENCE4 "O3.3 + C3.3" #define SEQUENCE5 "O5.5 + C5.5" #define BAD_SEQUENCE "O1.+D8 + E2.4 + e.4 + r25 + R + R.5 + X + x5 + y7.3" #define DISPLAY_SEPARATION 0 /* use 250 to get images displayed */ int main(int argc, char **argv) { PIX *pixs, *pixg, *pixc, *pixd; if (argc != 1) return ERROR_INT(" Syntax: morphseq_reg", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept"); pixs = pixRead("feyn.tif"); /* 1 bpp */ pixd = pixMorphSequence(pixs, SEQUENCE1, -1); pixDestroy(&pixd); pixd = pixMorphSequence(pixs, SEQUENCE1, DISPLAY_SEPARATION); pixWrite("/tmp/lept/morphseq1.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixMorphCompSequence(pixs, SEQUENCE2, -2); pixDestroy(&pixd); pixd = pixMorphCompSequence(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/lept/morphseq2.png", pixd, IFF_PNG); pixDestroy(&pixd); lept_stderr("\n ------------------ Error messages -----------------\n"); lept_stderr(" ------------ DWA v23 Sel doesn't exist -----------\n"); lept_stderr(" ---------------------------------------------------\n"); pixd = pixMorphSequenceDwa(pixs, SEQUENCE2, -3); pixDestroy(&pixd); pixd = pixMorphSequenceDwa(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/lept/morphseq3.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixMorphCompSequenceDwa(pixs, SEQUENCE2, -4); pixDestroy(&pixd); pixd = pixMorphCompSequenceDwa(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/lept/morphseq4.png", pixd, IFF_PNG); pixDestroy(&pixd); /* 8 bpp */ pixg = pixScaleToGray(pixs, 0.25); pixd = pixGrayMorphSequence(pixg, SEQUENCE3, -5, 150); pixDestroy(&pixd); pixd = pixGrayMorphSequence(pixg, SEQUENCE3, DISPLAY_SEPARATION, 150); pixWrite("/tmp/lept/morphseq5.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixGrayMorphSequence(pixg, SEQUENCE4, -6, 300); pixWrite("/tmp/lept/morphseq6.png", pixd, IFF_PNG); pixDestroy(&pixd); /* 32 bpp */ pixc = pixRead("wyom.jpg"); pixd = pixColorMorphSequence(pixc, SEQUENCE5, -7, 150); pixDestroy(&pixd); pixd = pixColorMorphSequence(pixc, SEQUENCE5, DISPLAY_SEPARATION, 450); pixWrite("/tmp/lept/morphseq7.png", pixd, IFF_PNG); pixDestroy(&pixc); pixDestroy(&pixd); /* Syntax error handling */ lept_stderr("\n ----------------- Error messages ------------------\n"); lept_stderr(" ---------------- Invalid sequence -----------------\n"); lept_stderr(" ---------------------------------------------------\n"); pixd = pixMorphSequence(pixs, BAD_SEQUENCE, 50); /* fails; returns null */ pixd = pixGrayMorphSequence(pixg, BAD_SEQUENCE, 50, 0); /* this fails */ pixDestroy(&pixg); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/morphtemplate1.txt000066400000000000000000000202031506303110300202230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * --- * PIX *pixMorphDwa_*() --- * PIX *pixFMorphopGen_*() */ #include #include "allheaders.h" --- This file is: morphtemplate1.txt --- --- We need to include these prototypes: --- PIX *pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- PIX *pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- l_int32 fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * \brief pixMorphDwa_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a border, calls the appropriate
 *          pixFMorphopGen_*(), and removes the border.
 *          See the notes for that function.
 *      (2) The size of the border depends on the operation
 *          and the boundary conditions.
 * 
*/ PIX * --- pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixMorpDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); --- pixt2 = pixFMorphopGen_*(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * \brief pixFMorphopGen_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa operation, and the Sels must be limited in
 *          size to not more than 31 pixels about the origin.
 *      (2) A border of appropriate size (32 pixels, or 64 pixels
 *          for safe closing with asymmetric b.c.) must be added before
 *          this function is called.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 *      (4) The closing operation is safe; no pixels can be removed
 *          near the boundary.
 * 
*/ PIX * --- pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFMorphopGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index + 1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index + 1); } pixDestroy(&pixt); } return pixd; } leptonica-1.86.0/prog/morphtemplate2.txt000066400000000000000000000072201506303110300202300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: --- * l_int32 fmorphopgen_low_*() * * Static Low-level: --- * void fdilate_*_*() --- * void ferode_*_*() */ #include "allheaders.h" --- This file is: morphtemplate2.txt --- --- insert static protos here ... /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! --- * fmorphopgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fdilate* and ferode* routines ... } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fdilate_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ... pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.86.0/prog/morphtest1.c000066400000000000000000000112231506303110300167740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * morphtest1.c * * - Timing test for rasterop-based morphological operations * - Example repository of binary morph operations */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NTIMES 100 #define IMAGE_SIZE 8. /* megapixels */ #define SEL_SIZE 9 #define BASIC_OPS 1. /* 1 for erosion/dilation; 2 for open/close */ #define CPU_SPEED 866. /* MHz: set it for the machine you're using */ int main(int argc, char **argv) { l_int32 i, index; l_float32 cputime, epo; char *filein, *fileout; PIX *pixs, *pixd; SEL *sel; SELA *sela; if (argc != 3) return ERROR_INT(" Syntax: morphtest1 filein fileout", __func__, 1); filein = argv[1]; fileout = argv[2]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); sela = selaAddBasic(NULL); /* ------------------------ Timing -------------------------------*/ #if 1 selaFindSelByName(sela, "sel_9h", &index, &sel); selWriteStream(stderr, sel); pixd = pixCreateTemplate(pixs); startTimer(); for (i = 0; i < NTIMES; i++) { pixDilate(pixd, pixs, sel); /* if ((i % 10) == 0) lept_stderr("%d iters\n", i); */ } cputime = stopTimer(); /* Get the elementary pixel operations/sec */ epo = BASIC_OPS * SEL_SIZE * NTIMES * IMAGE_SIZE /(cputime * CPU_SPEED); lept_stderr("Time: %7.3f sec\n", cputime); lept_stderr("Speed: %7.3f epo/cycle\n", epo); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); #endif /* ------------------ Example operation from repository --------------*/ #if 1 /* Select a structuring element */ selaFindSelByName(sela, "sel_50h", &index, &sel); selWriteStream(stderr, sel); /* Do these operations. See below for other ops * that can be substituted here. */ pixd = pixOpen(NULL, pixs, sel); pixXor(pixd, pixd, pixs); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); #endif pixDestroy(&pixs); return 0; } /* ==================================================================== */ /* -------------------------------------------------------------------- * * Repository for selecting various operations * * that might be used * * -------------------------------------------------------------------- */ #if 0 pixd = pixCreateTemplate(pixs); pixd = pixDilate(NULL, pixs, sel); pixd = pixErode(NULL, pixs, sel); pixd = pixOpen(NULL, pixs, sel); pixd = pixClose(NULL, pixs, sel); pixDilate(pixd, pixs, sel); pixErode(pixd, pixs, sel); pixOpen(pixd, pixs, sel); pixClose(pixd, pixs, sel); pixAnd(pixd, pixd, pixs); pixOr(pixd, pixd, pixs); pixXor(pixd, pixd, pixs); pixSubtract(pixd, pixd, pixs); pixInvert(pixd, pixs); pixd = pixAnd(NULL, pixd, pixs); pixd = pixOr(NULL, pixd, pixs); pixd = pixXor(NULL, pixd, pixs); pixd = pixSubtract(NULL, pixd, pixs); pixd = pixInvert(NULL, pixs); pixInvert(pixs, pixs); #endif /* 0 */ leptonica-1.86.0/prog/mtiff_reg.c000066400000000000000000000353261506303110300166420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * mtiff_reg.c * * Tests tiff I/O for: * * - multipage tiff read/write * - writing special tiff tags to file [not tested here] */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include static const char *weasel_rev = "/tmp/lept/tiff/weasel_rev.tif"; static const char *weasel_rev_rev = "/tmp/lept/tiff/weasel_rev_rev.tif"; static const char *weasel_orig = "/tmp/lept/tiff/weasel_orig.tif"; int main(int argc, char **argv) { l_uint8 *data; char *fname, *filename; const char *str; char buf[512]; l_int32 i, n, npages, equal, success; size_t offset, size; FILE *fp; PIX *pix1, *pix2; PIXA *pixa, *pixa1, *pixa2, *pixa3; SARRAY *sa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "mtiff_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/tiff"); /* ---------------------- Test multipage I/O -----------------------*/ /* This puts every image file in the directory with a string * match to "weasel8" into a multipage tiff file. * Images with 1 bpp are coded as g4; the others as zip. * It then reads back into a pix and displays. */ writeMultipageTiff(".", "weasel8.", "/tmp/lept/tiff/weasel8.tif"); regTestCheckFile(rp, "/tmp/lept/tiff/weasel8.tif"); /* 0 */ pixa = pixaReadMultipageTiff("/tmp/lept/tiff/weasel8.tif"); pix1 = pixaDisplayTiledInRows(pixa, 1, 1200, 0.5, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); pix1 = pixaDisplayTiledInRows(pixa, 8, 1200, 0.8, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 0, 200, NULL, rp->display); pixDestroy(&pix1); pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.2, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 0, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); /* This uses the offset method for linearizing overhead of * reading from a multi-image tiff file. */ offset = 0; n = 0; pixa = pixaCreate(8); do { pix1 = pixReadFromMultipageTiff("/tmp/lept/tiff/weasel8.tif", &offset); if (!pix1) continue; pixaAddPix(pixa, pix1, L_INSERT); if (rp->display) lept_stderr("offset = %ld\n", (unsigned long)offset); n++; } while (offset != 0); if (rp->display) lept_stderr("Num images = %d\n", n); pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.2, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 0, 600, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); /* This uses the offset method for linearizing overhead of * reading from a multi-image tiff file in memory. */ offset = 0; n = 0; pixa = pixaCreate(8); data = l_binaryRead("/tmp/lept/tiff/weasel8.tif", &size); do { pix1 = pixReadMemFromMultipageTiff(data, size, &offset); if (!pix1) continue; pixaAddPix(pixa, pix1, L_INSERT); if (rp->display) lept_stderr("offset = %ld\n", (unsigned long)offset); n++; } while (offset != 0); if (rp->display) lept_stderr("Num images = %d\n", n); pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.2, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 0, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(data); regTestCompareFiles(rp, 3, 4); /* 6 */ regTestCompareFiles(rp, 3, 5); /* 7 */ /* This makes a 1000 image tiff file and gives timing * for writing and reading. Reading uses both the offset method * for returning individual pix and atomic pixaReadMultipageTiff() * method for returning a pixa of all the images. Reading time * is linear in the number of images, but the writing time is * quadratic, and the actual wall clock time is significantly * more than the printed value. */ pix1 = pixRead("char.tif"); startTimer(); pixWriteTiff("/tmp/lept/tiff/junkm.tif", pix1, IFF_TIFF_G4, "w"); for (i = 1; i < 1000; i++) { pixWriteTiff("/tmp/lept/tiff/junkm.tif", pix1, IFF_TIFF_G4, "a"); } regTestCheckFile(rp, "/tmp/lept/tiff/junkm.tif"); /* 8 */ pixDestroy(&pix1); if (rp->display) { lept_stderr("\n1000 image file: /tmp/lept/tiff/junkm.tif\n"); lept_stderr("Time to write 1000 images: %7.3f sec\n", stopTimer()); } startTimer(); offset = 0; n = 0; do { pix1 = pixReadFromMultipageTiff("/tmp/lept/tiff/junkm.tif", &offset); if (!pix1) continue; if (rp->display && (n % 100 == 0)) lept_stderr("offset = %ld\n", (unsigned long)offset); pixDestroy(&pix1); n++; } while (offset != 0); regTestCompareValues(rp, 1000, n, 0); /* 9 */ if (rp->display) lept_stderr("Time to read %d images: %6.3f sec\n", n, stopTimer()); startTimer(); pixa = pixaReadMultipageTiff("/tmp/lept/tiff/junkm.tif"); lept_stderr("Time to read %d images and return a pixa: %6.3f sec\n", pixaGetCount(pixa), stopTimer()); pix1 = pixaDisplayTiledInRows(pixa, 8, 1500, 0.8, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDestroy(&pix1); pixaDestroy(&pixa); /* This does the following sequence of operations: * (1) makes pixa1 and writes a multipage tiff file from it * (2) reads that file into memory * (3) generates pixa2 from the data in memory * (4) tiff compresses pixa2 back to memory * (5) generates pixa3 by uncompressing the memory data * (6) compares pixa3 with pixa1 */ pix1 = pixRead("weasel8.240c.png"); /* (1) */ pixa1 = pixaCreate(10); for (i = 0; i < 10; i++) pixaAddPix(pixa1, pix1, L_COPY); pixDestroy(&pix1); pixaWriteMultipageTiff("/tmp/lept/tiff/junkm2.tif", pixa1); regTestCheckFile(rp, "/tmp/lept/tiff/junkm2.tif"); /* 11 */ data = l_binaryRead("/tmp/lept/tiff/junkm2.tif", &size); /* (2) */ pixa2 = pixaCreate(10); /* (3) */ offset = 0; n = 0; do { pix1 = pixReadMemFromMultipageTiff(data, size, &offset); pixaAddPix(pixa2, pix1, L_INSERT); n++; } while (offset != 0); regTestCompareValues(rp, 10, n, 0); /* 12 */ if (rp->display) lept_stderr("\nRead %d images\n", n); lept_free(data); pixaWriteMemMultipageTiff(&data, &size, pixa2); /* (4) */ pixa3 = pixaReadMemMultipageTiff(data, size); /* (5) */ pix1 = pixaDisplayTiledInRows(pixa3, 8, 1500, 0.8, 0, 15, 4); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixDestroy(&pix1); n = pixaGetCount(pixa3); if (rp->display) lept_stderr("Write/read %d images\n", n); success = TRUE; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); pix2 = pixaGetPix(pixa3, i, L_CLONE); pixEqual(pix1, pix2, &equal); if (!equal) success = FALSE; pixDestroy(&pix1); pixDestroy(&pix2); } regTestCompareValues(rp, TRUE, success, 0); /* 14 */ pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); lept_free(data); /* ------------------ Test single-to-multipage I/O -------------------*/ /* Read the files and generate a multipage tiff file of G4 images. * Then convert that to a G4 compressed and ascii85 encoded PS file. */ sa = getSortedPathnamesInDirectory(".", "weasel4.", 0, 4); if (rp->display) sarrayWriteStderr(sa); sarraySort(sa, sa, L_SORT_INCREASING); if (rp->display) sarrayWriteStderr(sa); npages = sarrayGetCount(sa); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); filename = genPathname(".", fname); pix1 = pixRead(filename); if (!pix1) continue; pix2 = pixConvertTo1(pix1, 128); if (i == 0) pixWriteTiff("/tmp/lept/tiff/weasel4", pix2, IFF_TIFF_G4, "w+"); else pixWriteTiff("/tmp/lept/tiff/weasel4", pix2, IFF_TIFF_G4, "a"); pixDestroy(&pix1); pixDestroy(&pix2); lept_free(filename); } regTestCheckFile(rp, "/tmp/lept/tiff/junkm2.tif"); /* 15 */ /* Write it out as a PS file */ lept_stderr("Writing to: /tmp/lept/tiff/weasel4.ps\n"); convertTiffMultipageToPS("/tmp/lept/tiff/weasel4", "/tmp/lept/tiff/weasel4.ps", 0.95); regTestCheckFile(rp, "/tmp/lept/tiff/weasel4.ps"); /* 16 */ /* Write it out as a pdf file */ lept_stderr("Writing to: /tmp/lept/tiff/weasel4.pdf\n"); l_pdfSetDateAndVersion(FALSE); convertTiffMultipageToPdf("/tmp/lept/tiff/weasel4", "/tmp/lept/tiff/weasel4.pdf"); regTestCheckFile(rp, "/tmp/lept/tiff/weasel4.pdf"); /* 17 */ sarrayDestroy(&sa); /* ------------------ Test multipage I/O -------------------*/ /* Read count of pages in tiff multipage file */ writeMultipageTiff(".", "weasel2", weasel_orig); regTestCheckFile(rp, weasel_orig); /* 18 */ fp = lept_fopen(weasel_orig, "rb"); success = fileFormatIsTiff(fp); regTestCompareValues(rp, TRUE, success, 0); /* 19 */ if (success) { tiffGetCount(fp, &npages); regTestCompareValues(rp, 5, npages, 0); /* 20 */ lept_stderr(" Tiff: %d page\n", npages); } lept_fclose(fp); /* Split into separate page files */ for (i = 0; i < npages + 1; i++) { /* read one beyond to catch error */ pix1 = pixReadTiff(weasel_orig, i); if (!pix1) continue; snprintf(buf, sizeof(buf), "/tmp/lept/tiff/%03d.tif", i); pixWrite(buf, pix1, IFF_TIFF_ZIP); pixDestroy(&pix1); } /* Read separate page files and write reversed file */ for (i = npages - 1; i >= 0; i--) { snprintf(buf, sizeof(buf), "/tmp/lept/tiff/%03d.tif", i); pix1 = pixRead(buf); if (!pix1) continue; if (i == npages - 1) pixWriteTiff(weasel_rev, pix1, IFF_TIFF_ZIP, "w+"); else pixWriteTiff(weasel_rev, pix1, IFF_TIFF_ZIP, "a"); pixDestroy(&pix1); } regTestCheckFile(rp, weasel_rev); /* 21 */ /* Read reversed file and reverse again */ pixa = pixaCreate(npages); for (i = 0; i < npages; i++) { pix1 = pixReadTiff(weasel_rev, i); pixaAddPix(pixa, pix1, L_INSERT); } for (i = npages - 1; i >= 0; i--) { pix1 = pixaGetPix(pixa, i, L_CLONE); if (i == npages - 1) pixWriteTiff(weasel_rev_rev, pix1, IFF_TIFF_ZIP, "w+"); else pixWriteTiff(weasel_rev_rev, pix1, IFF_TIFF_ZIP, "a"); pixDestroy(&pix1); } regTestCheckFile(rp, weasel_rev_rev); /* 22 */ regTestCompareFiles(rp, 18, 22); /* 23 */ pixaDestroy(&pixa); #if 1 /* ----- test adding custom public tags to a tiff header ----- */ { size_t length; NUMA *naflags, *nasizes; SARRAY *savals, *satypes; pix1 = pixRead("feyn.tif"); naflags = numaCreate(10); savals = sarrayCreate(10); satypes = sarrayCreate(10); nasizes = numaCreate(10); /* numaAddNumber(naflags, TIFFTAG_XMLPACKET); */ /* XMP: 700 */ numaAddNumber(naflags, 700); str = "This is a Fake XMP packet\nGuess what ...?"; length = strlen(str); sarrayAddString(savals, str, L_COPY); sarrayAddString(satypes, "char*", L_COPY); numaAddNumber(nasizes, length); /* get it all */ numaAddNumber(naflags, 269); /* DOCUMENTNAME */ sarrayAddString(savals, "One silly title", L_COPY); sarrayAddString(satypes, "const char*", L_COPY); numaAddNumber(naflags, 270); /* IMAGEDESCRIPTION */ sarrayAddString(savals, "One page of text", L_COPY); sarrayAddString(satypes, "const char*", L_COPY); /* the max sample is used by rendering programs * to scale the dynamic range */ numaAddNumber(naflags, 281); /* MAXSAMPLEVALUE */ sarrayAddString(savals, "4", L_COPY); sarrayAddString(satypes, "l_uint16", L_COPY); /* note that date is required to be a 20 byte string */ numaAddNumber(naflags, 306); /* DATETIME */ sarrayAddString(savals, "2004:10:11 09:35:15", L_COPY); sarrayAddString(satypes, "const char*", L_COPY); /* note that page number requires 2 l_uint16 input */ numaAddNumber(naflags, 297); /* PAGENUMBER */ sarrayAddString(savals, "1-412", L_COPY); sarrayAddString(satypes, "l_uint16-l_uint16", L_COPY); pixWriteTiffCustom("/tmp/lept/tiff/tags.tif", pix1, IFF_TIFF_G4, "w", naflags, savals, satypes, nasizes); fprintTiffInfo(stderr, "/tmp/lept/tiff/tags.tif"); lept_stderr("num flags = %d\n", numaGetCount(naflags)); lept_stderr("num sizes = %d\n", numaGetCount(nasizes)); lept_stderr("num vals = %d\n", sarrayGetCount(savals)); lept_stderr("num types = %d\n", sarrayGetCount(satypes)); numaDestroy(&naflags); numaDestroy(&nasizes); sarrayDestroy(&savals); sarrayDestroy(&satypes); pixDestroy(&pix1); } #endif return regTestCleanup(rp); } leptonica-1.86.0/prog/multitype_reg.c000066400000000000000000000376301506303110300175710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * multitype_reg.c * * Tests various functions against a set of the different image types. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *fnames[10] = {"feyn-fract.tif", "speckle2.png", "weasel2.4g.png", "speckle4.png", "weasel4.16c.png", "dreyfus8.png", "weasel8.240c.png", "test8.jpg", "marge.jpg", "test-gray-alpha.png"}; /* Affine uses the first 3 pt pairs; projective & bilinear use all 4 */ static const l_int32 xs[] = {300, 1200, 225, 750}; static const l_int32 xd[] = {330, 1225, 250, 870}; static const l_int32 ys[] = {1250, 1120, 250, 200}; static const l_int32 yd[] = {1150, 1200, 250, 290}; enum { PROJECTIVE = 1, BILINEAR = 2 }; static l_float32 *Generate3PtTransformVector(); static l_float32 *Generate4PtTransformVector(l_int32 type); #define DO_ALL 1 int main(int argc, char **argv) { l_int32 w, h, x, y, i, n; l_float32 *vc; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixas, *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixas = pixaCreate(11); for (i = 0; i < 10; i++) { /* this preserves any alpha */ pix1 = pixRead(fnames[i]); pix2 = pixScaleBySamplingToSize(pix1, 250, 150); pixaAddPix(pixas, pix2, L_INSERT); pixDestroy(&pix1); } /* Add a transparent grid over the rgb image */ pix1 = pixaGetPix(pixas, 8, L_COPY); pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixCreate(w, h, 1); for (i = 0; i < 5; i++) { y = h * (i + 1) / 6; pixRenderLine(pix2, 0, y, w, y, 3, L_SET_PIXELS); } for (i = 0; i < 7; i++) { x = w * (i + 1) / 8; pixRenderLine(pix2, x, 0, x, h, 3, L_SET_PIXELS); } pix3 = pixConvertTo8(pix2, 0); /* 1 --> 0 ==> transparent */ pixSetRGBComponent(pix1, pix3, L_ALPHA_CHANNEL); pixaAddPix(pixas, pix1, L_INSERT); n = pixaGetCount(pixas); pixDestroy(&pix2); pixDestroy(&pix3); #if DO_ALL /* Display with and without removing alpha with white bg */ pix1 = pixaDisplayTiledInRows(pixas, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRemoveAlpha(pix1); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 200, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Setting to gray */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pixSetAllGray(pix1, 170); pix2 = pixRemoveAlpha(pix1); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 400, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* General scaling */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixScaleToSize(pix1, 350, 650); pix3 = pixScaleToSize(pix2, 200, 200); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Scaling by sampling */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixScaleBySamplingToSize(pix1, 350, 650); pix3 = pixScaleBySamplingToSize(pix2, 200, 200); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 800, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 1000, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix1, 0, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 3-shear; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix1, 200, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 3-shear; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix1, 400, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 2-shear about the center */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixRotate2Shear(pix1, w / 2, h / 2, 0.25, L_BRING_IN_WHITE); pix3 = pixRotate2Shear(pix2, w / 2, h / 2, -0.35, L_BRING_IN_WHITE); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix1, 600, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by sampling; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix1, 800, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by sampling; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix1, 1000, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping at corner */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotateAMCorner(pix1, 0.25, L_BRING_IN_WHITE); pix3 = pixRotateAMCorner(pix2, -0.35, L_BRING_IN_WHITE); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 0, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Affine transform by interpolation */ pixa = pixaCreate(n); vc = Generate3PtTransformVector(); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixAffine(pix1, vc, L_BRING_IN_WHITE); /* pix2 = pixAffineSampled(pix1, vc, L_BRING_IN_WHITE); */ pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixDisplayWithTitle(pix1, 200, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Projective transform by sampling */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(PROJECTIVE); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixProjectiveSampled(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */ pixDisplayWithTitle(pix1, 400, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Projective transform by interpolation */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(PROJECTIVE); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixProjective(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 15 */ pixDisplayWithTitle(pix1, 600, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Bilinear transform by interpolation */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(BILINEAR); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixBilinear(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 16 */ pixDisplayWithTitle(pix1, 800, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif pixaDestroy(&pixas); return regTestCleanup(rp); } static l_float32 * Generate3PtTransformVector() { l_int32 i; l_float32 *vc; PTA *ptas, *ptad; ptas = ptaCreate(3); ptad = ptaCreate(3); for (i = 0; i < 3; i++) { ptaAddPt(ptas, xs[i], ys[i]); ptaAddPt(ptad, xd[i], yd[i]); } getAffineXformCoeffs(ptad, ptas, &vc); ptaDestroy(&ptas); ptaDestroy(&ptad); return vc; } static l_float32 * Generate4PtTransformVector(l_int32 type) { l_int32 i; l_float32 *vc; PTA *ptas, *ptad; ptas = ptaCreate(4); ptad = ptaCreate(4); for (i = 0; i < 4; i++) { ptaAddPt(ptas, xs[i], ys[i]); ptaAddPt(ptad, xd[i], yd[i]); } if (type == PROJECTIVE) getProjectiveXformCoeffs(ptad, ptas, &vc); else /* BILINEAR */ getBilinearXformCoeffs(ptad, ptas, &vc); ptaDestroy(&ptas); ptaDestroy(&ptad); return vc; } leptonica-1.86.0/prog/nearline_reg.c000066400000000000000000000171231506303110300173250ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * nearline_reg.c * * Regression test for finding min or max values (and averages) * near a specified line. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 ret, i, n, similar, x1, y1, val1, val2, val3, val4; l_float32 minave, minave2, maxave, fract; NUMA *na1, *na2, *na3, *na4, *na5, *na6; NUMAA *naa; PIX *pixs, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "nearline_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); pix1 = pixScaleToGray6(pixs); pixDisplayWithTitle(pix1, 100, 600, NULL, rp->display); /* Find averages of min and max along about 120 horizontal lines */ lept_stderr("******************************************************\n"); lept_stderr("* Testing error checking: ignore 12 error messages *\n"); na1 = numaCreate(0); na3 = numaCreate(0); for (y1 = 40; y1 < 575; y1 += 5) { ret = pixMinMaxNearLine(pix1, 20, y1, 400, y1, 5, L_SCAN_BOTH, NULL, NULL, &minave, &maxave); if (!ret) { numaAddNumber(na1, (l_int32)minave); numaAddNumber(na3, (l_int32)maxave); if (rp->display) lept_stderr("y = %d: minave = %d, maxave = %d\n", y1, (l_int32)minave, (l_int32)maxave); } } /* Find averages along about 120 vertical lines. We've rotated * the image by 90 degrees, so the results should be nearly * identical to the first set. Also generate a single-sided * scan (L_SCAN_NEGATIVE) for comparison with the double-sided scans. */ pix2 = pixRotateOrth(pix1, 3); pixDisplayWithTitle(pix2, 600, 600, NULL, rp->display); na2 = numaCreate(0); na4 = numaCreate(0); na5 = numaCreate(0); for (x1 = 40; x1 < 575; x1 += 5) { ret = pixMinMaxNearLine(pix2, x1, 20, x1, 400, 5, L_SCAN_BOTH, NULL, NULL, &minave, &maxave); pixMinMaxNearLine(pix2, x1, 20, x1, 400, 5, L_SCAN_NEGATIVE, NULL, NULL, &minave2, NULL); if (!ret) { numaAddNumber(na2, (l_int32)minave); numaAddNumber(na4, (l_int32)maxave); numaAddNumber(na5, (l_int32)minave2); if (rp->display) lept_stderr("x = %d: minave = %d, minave2 = %d, maxave = %d\n", x1, (l_int32)minave, (l_int32)minave2, (l_int32)maxave); } } lept_stderr("******************************************************\n"); numaSimilar(na1, na2, 3.0, &similar); /* should be TRUE */ regTestCompareValues(rp, similar, 1, 0); /* 0 */ numaSimilar(na3, na4, 1.0, &similar); /* should be TRUE */ regTestCompareValues(rp, similar, 1, 0); /* 1 */ numaWrite("/tmp/lept/regout/na1.na", na1); numaWrite("/tmp/lept/regout/na2.na", na2); numaWrite("/tmp/lept/regout/na3.na", na3); numaWrite("/tmp/lept/regout/na4.na", na4); numaWrite("/tmp/lept/regout/na5.na", na5); regTestCheckFile(rp, "/tmp/lept/regout/na1.na"); /* 2 */ regTestCheckFile(rp, "/tmp/lept/regout/na2.na"); /* 3 */ regTestCheckFile(rp, "/tmp/lept/regout/na3.na"); /* 4 */ regTestCheckFile(rp, "/tmp/lept/regout/na4.na"); /* 5 */ regTestCheckFile(rp, "/tmp/lept/regout/na5.na"); /* 6 */ /* Plot the average minimums for the 3 cases */ naa = numaaCreate(3); numaaAddNuma(naa, na1, L_INSERT); /* portrait, double-sided */ numaaAddNuma(naa, na2, L_INSERT); /* landscape, double-sided */ numaaAddNuma(naa, na5, L_INSERT); /* landscape, single-sided */ gplotSimpleN(naa, GPLOT_PNG, "/tmp/lept/regout/nearline", "Average minimums along lines"); pix3 = pixRead("/tmp/lept/regout/nearline.png"); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix3, 100, 100, NULL, rp->display); if (rp->display) { n = numaGetCount(na3); for (i = 0; i < n; i++) { numaGetIValue(na1, i, &val1); numaGetIValue(na2, i, &val2); numaGetIValue(na3, i, &val3); numaGetIValue(na4, i, &val4); lept_stderr("val1 = %d, val2 = %d, diff = %d; " "val3 = %d, val4 = %d, diff = %d\n", val1, val2, L_ABS(val1 - val2), val3, val4, L_ABS(val3 - val4)); } } numaaDestroy(&naa); numaDestroy(&na3); numaDestroy(&na4); /* Plot minima along a single line, with different distances */ pixMinMaxNearLine(pix1, 20, 200, 400, 200, 2, L_SCAN_BOTH, &na1, NULL, NULL, NULL); pixMinMaxNearLine(pix1, 20, 200, 400, 200, 5, L_SCAN_BOTH, &na2, NULL, NULL, NULL); pixMinMaxNearLine(pix1, 20, 200, 400, 200, 15, L_SCAN_BOTH, &na3, NULL, NULL, NULL); numaWrite("/tmp/lept/regout/na6.na", na1); regTestCheckFile(rp, "/tmp/lept/regout/na6.na"); /* 8 */ n = numaGetCount(na1); fract = 100.0 / n; na4 = numaTransform(na1, 0.0, fract); na5 = numaTransform(na2, 0.0, fract); na6 = numaTransform(na3, 0.0, fract); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); na1 = numaUniformSampling(na4, 100); na2 = numaUniformSampling(na5, 100); na3 = numaUniformSampling(na6, 100); naa = numaaCreate(3); numaaAddNuma(naa, na1, L_INSERT); numaaAddNuma(naa, na2, L_INSERT); numaaAddNuma(naa, na3, L_INSERT); gplotSimpleN(naa, GPLOT_PNG, "/tmp/lept/regout/nearline2", "Min along line"); pix4 = pixRead("/tmp/lept/regout/nearline2.png"); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix4, 800, 100, NULL, rp->display); numaaDestroy(&naa); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/newspaper_reg.c000066400000000000000000000151421506303110300175330ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * newspaper_seg.c * * Segmenting newspaper articles using morphology. * * Most of the work is done at 4x reduction (approx. 75 ppi), * which makes it very fast. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 w, h; BOXA *boxa; PIX *pixs, *pixt, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9, *pix10, *pix11; PIXA *pixa1, *pixa2; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("scots-frag.tif"); pixa1 = pixaCreate(12); pixt = pixScaleToGray4(pixs); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ /* Rank reduce 2x */ pix1 = pixReduceRankBinary2(pixs, 2, NULL); pixt = pixScale(pix1, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); /* Open out the vertical lines */ pix2 = pixMorphSequence(pix1, "o1.50", 0); pixt = pixScale(pix2, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 1 */ pixDisplayWithTitle(pixt, 0, 0, "open vertical lines", rp->display); /* Seedfill back to get those lines in their entirety */ pix3 = pixSeedfillBinary(NULL, pix2, pix1, 8); pixt = pixScale(pix3, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 2 */ pixDisplayWithTitle(pixt, 300, 0, "seedfill vertical", rp->display); /* Remove the vertical lines (and some of the images) */ pixXor(pix2, pix1, pix3); pixt = pixScale(pix2, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 3 */ pixDisplayWithTitle(pixt, 600, 0, "remove vertical lines", rp->display); /* Open out the horizontal lines */ pix4 = pixMorphSequence(pix2, "o50.1", 0); pixt = pixScale(pix4, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); /* Seedfill back to get those lines in their entirety */ pix5 = pixSeedfillBinary(NULL, pix4, pix2, 8); pixt = pixScale(pix5, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 4 */ pixDisplayWithTitle(pixt, 900, 0, "seedfill horizontal", rp->display); /* Remove the horizontal lines */ pixXor(pix4, pix2, pix5); pixt = pixScale(pix4, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 5 */ pixDisplayWithTitle(pixt, 1200, 0, "remove horiz lines", rp->display); /* Invert and identify vertical gutters between text columns */ pix6 = pixReduceRankBinaryCascade(pix4, 1, 1, 0, 0); pixInvert(pix6, pix6); pixt = pixScale(pix6, 2.0, 2.0); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 6 */ pixDisplayWithTitle(pixt, 1500, 0, NULL, rp->display); pix7 = pixMorphSequence(pix6, "o1.50", 0); pixt = pixScale(pix7, 2.0, 2.0); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 7 */ pixDisplayWithTitle(pixt, 0, 300, "vertical gutters", rp->display); pix8 = pixExpandBinaryPower2(pix7, 4); /* gutter mask */ regTestWritePixAndCheck(rp, pix8, IFF_TIFF_G4); /* 8 */ /* Solidify text blocks */ pix9 = pixMorphSequence(pix4, "c50.1 + c1.10", 0); pixSubtract(pix9, pix9, pix8); /* preserve gutter */ pix10 = pixMorphSequence(pix9, "d3.3", 0); pixt = pixScale(pix10, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 9 */ pixDisplayWithTitle(pixt, 300, 300, "solidify text", rp->display); /* Show stuff under this mask */ pixGetDimensions(pix10, &w, &h, NULL); boxa = pixConnComp(pix10, &pixa2, 8); pix11 = pixaDisplayRandomCmap(pixa2, w, h); pixPaintThroughMask(pix11, pix4, 0, 0, 0); pixt = pixScale(pix11, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 10 */ pixDisplayWithTitle(pixt, 600, 300, "stuff under mask1", rp->display); boxaDestroy(&boxa); pixaDestroy(&pixa2); /* Paint the background white */ cmap = pixGetColormap(pix11); pixcmapResetColor(cmap, 0, 255, 255, 255); regTestWritePixAndCheck(rp, pix11, IFF_PNG); /* 11 */ pixt = pixScale(pix11, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 12 */ pixDisplayWithTitle(pixt, 900, 300, "stuff under mask2", rp->display); pixaConvertToPdf(pixa1, 75, 1.0, 0, 0, "Segmentation: newspaper_reg", "/tmp/lept/regout/newspaper.pdf"); L_INFO("Output pdf: /tmp/lept/regout/newspaper.pdf\n", rp->testname); pixaDestroy(&pixa1); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); return regTestCleanup(rp); } leptonica-1.86.0/prog/notes-rgba.png000066400000000000000000000037301506303110300172750ustar00rootroot00000000000000‰PNG  IHDR22?ˆąsBIT|dˆIDAThåšKŒGĮ˙Uũœ™î×žŧ¯ØŦ7+'ŠĐpÆą@”)`ɉ@â$¸€Ā d‰ މS\Œ…%HœCđ!pIĀ‹H‚Ávâõîėk^;3;¯ž~TWq˜k×Ūy÷ú˙ËôTU˙ī×]UĶ_k€˙‘^RĒŧĒĒĘ<8Ā8Ģ2æžy˜‰É˛|J–ÕįÁ—šUÎYGŋžAž˜}ōũd|â˜sT*UžŲž7mYVfø”։…Ĩ‹ēšÄ9GŠTäk[wĻ´õŖũB k: Ģņ •iĸ”B×ÃÔ':úõ "„€ĸʈ„Ŗß0?p†}HĶT˜FĸŖ_ß @ķ*E CĪž1hrŊJY–a#ڈ1ÖÖo !TUA">vŪ4Gŋ:p–}ø…B!Œ&§Î‡B‘4f –ÂáKL]Ņu}v˜8ŊˆŒDČX|îMEŅĪ=Ü?˜†›[¸ĄiŅcÃÆę&*QDŖ1LŽũ­ĸ(Kûú HŲwl˜ÆÜxrō:c¸TÛų5?›ëEBt$:šˆNßđÅ֘v-ÛļëüÖΐ$I0č‰dlú7džGœs¸Ž[' ~Ë_QÄĸIÕ'~Ų7Đą,+•Îo,0Ÿ}@y°øM#öm 4€srĨ’ÚƝ/â  ŖiFĖäiOƒN-dŗŠ•[ˇožÄ˜—!PUM ŠŌįŖ@sZ dŗŠ•ĩ­;/ `(%ĐUĘT}q`=ĒleÖ~Hi3Ėî§2dĖļ*‹•\!}†R&„´°kJéĢvŖū МbÜacvR:}Í÷ũËÍoŧ@ä éßBāû>|ā“bvTŠŧũ!@ĀšĨ¸ Ûĩ˙Í9‡c7ūéēĩÛAÄė$‡ąußį°íú cėo@@ ĒDžĮPoÔ~Dŧn’A ×qQŗĒ×Zm=ƒ.ÚöDâĪ;ļ}ˇXŪ|gČ{’2žn4ęĸfm_nĩÉ5“1S}Ži„0ÂÅ-M Éģ‹ų‘ÁDRŋ^Ž/ ‘›3“§øAŦǘíû‚œ­Ô W||ˆ4‰›{ō{ņ‰‰“ēA%“s\€ÁqˆĄŸ¤ÛųâÚåG:ģ(8=wtá‚9>zF–­œÉApŽæBöô ;ž/U˛ßŲר:MLũlņéĨ_ÄįŽ€Jv63ph?ĢPŗk7jëŽ_ˆšŠ…ŗĮžzæztjLåĖG!ĩ Ÿą^Neë[wN=ÜØybfö3?I›ī1d—W`WĒ ´˙Ŋ`fjūâXrōįĩZ éüʋ–UũķŪ1ŒąécķŠĪQ;l¯n€ŲíųÂ#ĸ ĒęˊĒEjų"2w—†h…$„‚R UÕŌĸ/<bIÄg~žˇŊ\.üŨgî?¨Ôų‚Bā8lģÜ՝БÚüô5Æ<ë BČnP—Wę;¯įŠīöŌzŧOÆÆ/˜füäž.wã?Ÿžđ/JéCS‡<đŗvĘšˇĘĩbW?Šu˜ģ‘Û.ũN‘P!’$SJu!¸ęsî{ž—Ú)—ŪÉ7ŋģ]Øx¯SĀ3y*6ÎėŨ:UE!ŅĪŲŽõ!۝& 4ÜLŽú]!›T–!d„ ŽúœųŽãJÅüõ|!ûĶR%ķë^.ÚāÛDÍL-\ŧÄ9ß×.„@šRY[]ŋu€´o ĪZí´w†B`æÜėÔâ ŖA{ˆŽã펡&‘,K0čR"6ķã ũ ¤™ŧeYČ2oøžWŪWÛGĸ¯hû,5ˆíŽ4+Q‚ėVęíûkˇ_áÜßm'Đu=Öĸß ŌīP×@ęõĘ_76W_#„  „DLisø ģ*뤝8ŽõG€@@€\Û?6ČļŪkÕö¤å c?Vˇ^[œÃqlĢn—Žu?Ŗw=V(˛đ˜ģQ@OÅG¯:Ūļ'ŽuÕzņjĐŽƒhšŪŽD…¤ę'ĢĩŌFíŊ´o›—]Y<ūė7â_ ›‘gĢųbÂs\N r\EˆīŠ,SååÍŌũķčX<ĻžAâņņg—Ž%N—5åtĖupD‡SŲręΗgeđtÛĢ_mvzū/cĮį& ˇœ‚U,÷QkĐ'ˆ$iĪizh˛QŽ œÎÃĩCÔöÁĒ?ˆˆg;Čßo–Н „đšĪķļ‡Ką7õu9]ßũČą­Z/ĩŊį18nũ€ė°Iöĸ~įEv}såUßg>Ĩô@˜DĩVŪĘæS_ &Íî’ēŲ/—ŲwĢ•âG’¤ÎR*OKRķUįžĪQŠîXÅRîj&ŋō-tøLĐļfŸTũB0!¸Ÿņ¸÷.€jÉũ_ęŋ Ļ:\øĘIENDŽB`‚leptonica-1.86.0/prog/numa1_reg.c000066400000000000000000000330241506303110300165470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * numa1_reg.c * * Tests: * * histograms * * interpolation * * integration/differentiation */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, n, binsize, binstart, nbins; l_float32 pi, val, angle, xval, yval, x0, y0, startval, fbinsize; l_float32 minval, maxval, meanval, median, variance, rankval, rank, rmsdev; GPLOT *gplot; NUMA *na, *nahisto, *nax, *nay, *nasx, *nasy; NUMA *nadx, *nady, *nafx, *nafy; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pixd; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "numa1_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/numa1"); /* -------------------------------------------------------------------* * Histograms * * -------------------------------------------------------------------*/ pi = 3.1415926535; na = numaCreate(5000); for (i = 0; i < 500000; i++) { angle = 0.02293 * i * pi; val = (l_float32)(999. * sin(angle)); numaAddNumber(na, val); } nahisto = numaMakeHistogramClipped(na, 6, 2000); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, 1, nbins); pix1 = gplotGeneralPix2(nax, nahisto, GPLOT_LINES, "/tmp/lept/numa1/histo1", "example histo 1", "i", "histo[i]"); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogram(na, 1000, &binsize, &binstart); nbins = numaGetCount(nahisto); nax = numaMakeSequence(binstart, binsize, nbins); lept_stderr(" binsize = %d, binstart = %d\n", binsize, binstart); pix2 = gplotGeneralPix2(nax, nahisto, GPLOT_LINES, "/tmp/lept/numa1/histo2", "example histo 2", "i", "histo[i]"); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogram(na, 1000, &binsize, NULL); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, binsize, nbins); lept_stderr(" binsize = %d, binstart = %d\n", binsize, 0); pix3 = gplotGeneralPix2(nax, nahisto, GPLOT_LINES, "/tmp/lept/numa1/histo3", "example histo 3", "i", "histo[i]"); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogramAuto(na, 1000); nbins = numaGetCount(nahisto); numaGetParameters(nahisto, &startval, &fbinsize); nax = numaMakeSequence(startval, fbinsize, nbins); lept_stderr(" binsize = %7.4f, binstart = %8.3f\n", fbinsize, startval); pix4 = gplotGeneralPix2(nax, nahisto, GPLOT_LINES, "/tmp/lept/numa1/histo4", "example histo 4", "i", "histo[i]"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 3 */ pixa = pixaCreate(4); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 0, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa); numaDestroy(&nax); numaDestroy(&nahisto); numaGetStatsUsingHistogram(na, 2000, &minval, &maxval, &meanval, &variance, &median, 0.80, &rankval, &nahisto); rmsdev = sqrt((l_float64)variance); numaHistogramGetRankFromVal(nahisto, rankval, &rank); regTestCompareValues(rp, -999.00, minval, 0.1); /* 4 */ regTestCompareValues(rp, 999.00, maxval, 0.1); /* 5 */ regTestCompareValues(rp, 0.055, meanval, 0.001); /* 6 */ regTestCompareValues(rp, 0.30, median, 0.005); /* 7 */ regTestCompareValues(rp, 706.41, rmsdev, 0.1); /* 8 */ regTestCompareValues(rp, 808.15, rankval, 0.1); /* 9 */ regTestCompareValues(rp, 0.800, rank, 0.01); /* 10 */ if (rp->display) { lept_stderr("Sin histogram: \n" " min val = %7.3f -- should be -999.00\n" " max val = %7.3f -- should be 999.00\n" " mean val = %7.3f -- should be 0.055\n" " median = %7.3f -- should be 0.30\n" " rmsdev = %7.3f -- should be 706.41\n" " rank val = %7.3f -- should be 808.152\n" " rank = %7.3f -- should be 0.800\n", minval, maxval, meanval, median, rmsdev, rankval, rank); } numaDestroy(&nahisto); numaDestroy(&na); /* -------------------------------------------------------------------* * Interpolation * * -------------------------------------------------------------------*/ /* Test numaInterpolateEqxInterval() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); nasy = numaGetPartialSums(na); pix1 = gplotGeneralPix1(nasy, GPLOT_LINES, "/tmp/lept/numa1/int1", "partial sums", NULL, NULL); pix2 = gplotGeneralPix1(na, GPLOT_LINES, "/tmp/lept/numa1/int2", "simple test", NULL, NULL); numaInterpolateEqxInterval(0.0, 1.0, na, L_LINEAR_INTERP, 0.0, 255.0, 15, &nax, &nay); pix3 = gplotGeneralPix2(nax, nay, GPLOT_LINES, "/tmp/lept/numa1/int3", "test interpolation", "pix val", "num pix"); numaDestroy(&na); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); /* Test numaInterpolateArbxInterval() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); nasy = numaGetPartialSums(na); numaInsertNumber(nasy, 0, 0.0); nasx = numaMakeSequence(0.0, 1.0, 257); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, 10.0, 250.0, 23, &nax, &nay); pix4 = gplotGeneralPix2(nax, nay, GPLOT_LINES, "/tmp/lept/numa1/int4", "arbx interpolation", "pix val", "cum num pix"); numaDestroy(&na); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); /* Test numaInterpolateArbxVal() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); nasy = numaGetPartialSums(na); numaInsertNumber(nasy, 0, 0.0); nasx = numaMakeSequence(0.0, 1.0, 257); nax = numaMakeSequence(15.0, (250.0 - 15.0) / 23.0, 24); n = numaGetCount(nax); nay = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(nax, i, &xval); numaInterpolateArbxVal(nasx, nasy, L_QUADRATIC_INTERP, xval, &yval); numaAddNumber(nay, yval); } pix5 = gplotGeneralPix2(nax, nay, GPLOT_LINES, "/tmp/lept/numa1/int5", "arbx interpolation", "pix val", "cum num pix"); numaDestroy(&na); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); /* Test interpolation */ nasx = numaRead("testangle.na"); nasy = numaRead("testscore.na"); gplot = gplotCreate("/tmp/lept/numa1/int6", GPLOT_PNG, "arbx interpolation", "angle", "score"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -2.00, 0.0, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "linear"); numaDestroy(&nax); numaDestroy(&nay); numaInterpolateArbxInterval(nasx, nasy, L_QUADRATIC_INTERP, -2.00, 0.0, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "quadratic"); numaDestroy(&nax); numaDestroy(&nay); pix6 = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); gplot = gplotCreate("/tmp/lept/numa1/int7", GPLOT_PNG, "arbx interpolation", "angle", "score"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -1.2, -0.8, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "quadratic"); pix7 = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); numaFitMax(nay, &yval, nax, &xval); if (rp->display) lept_stderr("max = %f at loc = %f\n", yval, xval); pixa = pixaCreate(7); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 12 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 13 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 14 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 15 */ regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 16 */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 17 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); pixaAddPix(pixa, pix6, L_INSERT); pixaAddPix(pixa, pix7, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 300, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); /* -------------------------------------------------------------------* * Integration and differentiation * * -------------------------------------------------------------------*/ /* Test integration and differentiation */ nasx = numaRead("testangle.na"); nasy = numaRead("testscore.na"); /* ---------- Plot the derivative ---------- */ numaDifferentiateInterval(nasx, nasy, -2.0, 0.0, 50, &nadx, &nady); pix1 = gplotGeneralPix2(nadx, nady, GPLOT_LINES, "/tmp/lept/numa1/diff1", "derivative", "angle", "slope"); /* ---------- Plot the original function ----------- */ /* and the integral of the derivative; the two */ /* should be approximately the same. */ gplot = gplotCreate("/tmp/lept/numa1/diff2", GPLOT_PNG, "integ-diff", "angle", "val"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -2.00, 0.0, 50, &nafx, &nafy); gplotAddPlot(gplot, nafx, nafy, GPLOT_LINES, "function"); n = numaGetCount(nadx); numaGetFValue(nafx, 0, &x0); numaGetFValue(nafy, 0, &y0); nay = numaCreate(n); /* (Note: this tests robustness of the integrator: we go from * i = 0, and choose to have only 1 point in the interpolation * there, which is too small and causes the function to bomb out.) */ lept_stderr("******************************************************\n"); lept_stderr("* Testing error checking: ignore 'npts < 2' error *\n"); for (i = 0; i < n; i++) { numaGetFValue(nadx, i, &xval); numaIntegrateInterval(nadx, nady, x0, xval, 2 * i + 1, &yval); numaAddNumber(nay, y0 + yval); } lept_stderr("******************************************************\n"); gplotAddPlot(gplot, nafx, nay, GPLOT_LINES, "anti-derivative"); pix2 = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); pixa = pixaCreate(2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 19 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 600, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nafx); numaDestroy(&nafy); numaDestroy(&nadx); numaDestroy(&nady); numaDestroy(&nay); return regTestCleanup(rp); } leptonica-1.86.0/prog/numa2_reg.c000066400000000000000000000515321506303110300165540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * numa_reg2.c * * Tests: * * numa windowed stats * * numa extraction from pix on a line * * pixel averages and variances */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define DO_ALL 0 /* Tiny helper */ void SaveColorSquare(PIXA *pixa, l_uint32 rgbval); int main(int argc, char **argv) { l_int32 i, j; l_int32 w, h, bw, bh, wpls, rval, gval, bval, same; l_uint32 pixel, avergb; l_uint32 *lines, *datas; l_float32 sum1, sum2, ave1, ave2, ave3, ave4, diff1, diff2; l_float32 var1, var2, var3; BOX *box1, *box2, *box3; NUMA *na, *na1, *na2, *na3, *na4; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pixg, *pixd; PIXA *pixa1; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", __func__); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/numa2"); /* -------------------------------------------------------------------* * Numa-windowed stats * * -------------------------------------------------------------------*/ na = numaRead("lyra.5.na"); numaWindowedStats(na, 5, &na1, &na2, &na3, &na4); gplotSimple1(na, GPLOT_PNG, "/tmp/lept/numa2/lyra1", "Original"); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/numa2/lyra2", "Mean"); gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/numa2/lyra3", "Mean Square"); gplotSimple1(na3, GPLOT_PNG, "/tmp/lept/numa2/lyra4", "Variance"); gplotSimple1(na4, GPLOT_PNG, "/tmp/lept/numa2/lyra5", "RMS Difference"); pix1 = pixRead("/tmp/lept/numa2/lyra1.png"); pix2 = pixRead("/tmp/lept/numa2/lyra2.png"); pix3 = pixRead("/tmp/lept/numa2/lyra3.png"); pix4 = pixRead("/tmp/lept/numa2/lyra4.png"); pix5 = pixRead("/tmp/lept/numa2/lyra5.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 4 */ pixa1 = pixaCreate(5); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix4, L_INSERT); pixaAddPix(pixa1, pix5, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 0, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa1); numaDestroy(&na); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); /* -------------------------------------------------------------------* * Extraction on a line * * -------------------------------------------------------------------*/ /* First, make a pretty image */ w = h = 200; pixs = pixCreate(w, h, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 200; i++) { lines = datas + i * wpls; for (j = 0; j < 200; j++) { rval = (l_int32)((255. * j) / w + (255. * i) / h); gval = (l_int32)((255. * 2 * j) / w + (255. * 2 * i) / h) % 255; bval = (l_int32)((255. * 4 * j) / w + (255. * 4 * i) / h) % 255; composeRGBPixel(rval, gval, bval, &pixel); lines[j] = pixel; } } pixg = pixConvertTo8(pixs, 0); /* and a grayscale version */ regTestWritePixAndCheck(rp, pixg, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixg, 0, 300, NULL, rp->display); na1 = pixExtractOnLine(pixg, 20, 20, 180, 20, 1); na2 = pixExtractOnLine(pixg, 40, 30, 40, 170, 1); na3 = pixExtractOnLine(pixg, 20, 170, 180, 30, 1); na4 = pixExtractOnLine(pixg, 20, 190, 180, 10, 1); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/numa2/ext1", "Horizontal"); gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/numa2/ext2", "Vertical"); gplotSimple1(na3, GPLOT_PNG, "/tmp/lept/numa2/ext3", "Slightly more horizontal than vertical"); gplotSimple1(na4, GPLOT_PNG, "/tmp/lept/numa2/ext4", "Slightly more vertical than horizontal"); pix1 = pixRead("/tmp/lept/numa2/ext1.png"); pix2 = pixRead("/tmp/lept/numa2/ext2.png"); pix3 = pixRead("/tmp/lept/numa2/ext3.png"); pix4 = pixRead("/tmp/lept/numa2/ext4.png"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 7 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 8 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 9 */ pixa1 = pixaCreate(4); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix4, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 300, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa1); pixDestroy(&pixg); pixDestroy(&pixs); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); /* -------------------------------------------------------------------* * Row and column pixel sums * * -------------------------------------------------------------------*/ /* Sum by columns in two halves (left and right) */ pixs = pixRead("test8.jpg"); pixGetDimensions(pixs, &w, &h, NULL); box1 = boxCreate(0, 0, w / 2, h); box2 = boxCreate(w / 2, 0, w - 2 / 2, h); na1 = pixAverageByColumn(pixs, box1, L_BLACK_IS_MAX); na2 = pixAverageByColumn(pixs, box2, L_BLACK_IS_MAX); numaJoin(na1, na2, 0, -1); na3 = pixAverageByColumn(pixs, NULL, L_BLACK_IS_MAX); numaSimilar(na1, na3, 0.0, &same); /* for columns */ regTestCompareValues(rp, 1, same, 0); /* 10 */ pix1 = pixConvertTo32(pixs); pixRenderPlotFromNumaGen(&pix1, na3, L_HORIZONTAL_LINE, 3, h / 2, 80, 1, 0xff000000); pixRenderPlotFromNuma(&pix1, na3, L_PLOT_AT_BOT, 3, 80, 0xff000000); boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); /* Sum by rows in two halves (top and bottom) */ box1 = boxCreate(0, 0, w, h / 2); box2 = boxCreate(0, h / 2, w, h - h / 2); na1 = pixAverageByRow(pixs, box1, L_WHITE_IS_MAX); na2 = pixAverageByRow(pixs, box2, L_WHITE_IS_MAX); numaJoin(na1, na2, 0, -1); na3 = pixAverageByRow(pixs, NULL, L_WHITE_IS_MAX); numaSimilar(na1, na3, 0.0, &same); /* for rows */ regTestCompareValues(rp, 1, same, 0); /* 11 */ pixRenderPlotFromNumaGen(&pix1, na3, L_VERTICAL_LINE, 3, w / 2, 80, 1, 0x00ff0000); pixRenderPlotFromNuma(&pix1, na3, L_PLOT_AT_RIGHT, 3, 80, 0x00ff0000); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 0, 600, NULL, rp->display); pixDestroy(&pix1); boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); /* Average left by rows; right by columns; compare totals */ box1 = boxCreate(0, 0, w / 2, h); box2 = boxCreate(w / 2, 0, w - 2 / 2, h); na1 = pixAverageByRow(pixs, box1, L_WHITE_IS_MAX); na2 = pixAverageByColumn(pixs, box2, L_WHITE_IS_MAX); numaGetSum(na1, &sum1); /* sum of averages of left box */ numaGetSum(na2, &sum2); /* sum of averages of right box */ ave1 = sum1 / h; ave2 = 2.0 * sum2 / w; ave3 = 0.5 * (ave1 + ave2); /* average over both halves */ regTestCompareValues(rp, 189.59, ave1, 0.01); /* 13 */ regTestCompareValues(rp, 207.89, ave2, 0.01); /* 14 */ if (rp->display) { lept_stderr("ave1 = %8.4f\n", sum1 / h); lept_stderr("ave2 = %8.4f\n", 2.0 * sum2 / w); } pixAverageInRect(pixs, NULL, NULL, 0, 255, 1, &ave4); /* entire image */ diff1 = ave4 - ave3; diff2 = w * h * ave4 - (0.5 * w * sum1 + h * sum2); regTestCompareValues(rp, 0.0, diff1, 0.001); /* 15 */ regTestCompareValues(rp, 10.0, diff2, 10.0); /* 16 */ /* Variance left and right halves. Variance doesn't average * in a simple way, unlike pixel sums. */ pixVarianceInRect(pixs, box1, &var1); /* entire image */ pixVarianceInRect(pixs, box2, &var2); /* entire image */ pixVarianceInRect(pixs, NULL, &var3); /* entire image */ regTestCompareValues(rp, 82.06, 0.5 * (var1 + var2), 0.01); /* 17 */ regTestCompareValues(rp, 82.66, var3, 0.01); /* 18 */ boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); /* -------------------------------------------------------------------* * Row and column variances * * -------------------------------------------------------------------*/ /* Display variance by rows and columns */ box1 = boxCreate(415, 0, 130, 425); boxGetGeometry(box1, NULL, NULL, &bw, &bh); na1 = pixVarianceByRow(pixs, box1); na2 = pixVarianceByColumn(pixs, box1); pix1 = pixConvertTo32(pixs); pix2 = pixCopy(NULL, pix1); pixRenderPlotFromNumaGen(&pix1, na1, L_VERTICAL_LINE, 3, 415, 100, 1, 0xff000000); pixRenderPlotFromNumaGen(&pix1, na2, L_HORIZONTAL_LINE, 3, bh / 2, 100, 1, 0x00ff0000); pixRenderPlotFromNuma(&pix2, na1, L_PLOT_AT_LEFT, 3, 60, 0x00ff0000); pixRenderPlotFromNuma(&pix2, na1, L_PLOT_AT_MID_VERT, 3, 60, 0x0000ff00); pixRenderPlotFromNuma(&pix2, na1, L_PLOT_AT_RIGHT, 3, 60, 0xff000000); pixRenderPlotFromNuma(&pix2, na2, L_PLOT_AT_TOP, 3, 60, 0x0000ff00); pixRenderPlotFromNuma(&pix2, na2, L_PLOT_AT_MID_HORIZ, 3, 60, 0xff000000); pixRenderPlotFromNuma(&pix2, na2, L_PLOT_AT_BOT, 3, 60, 0x00ff0000); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 19 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 20 */ pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 400, 600, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa1); boxDestroy(&box1); numaDestroy(&na1); numaDestroy(&na2); pixDestroy(&pixs); /* Again on a different image */ pix1 = pixRead("boxedpage.jpg"); pix2 = pixConvertTo8(pix1, 0); pixGetDimensions(pix2, &w, &h, NULL); na1 = pixVarianceByRow(pix2, NULL); pix3 = pixConvertTo32(pix1); pixRenderPlotFromNumaGen(&pix3, na1, L_VERTICAL_LINE, 3, 0, 70, 1, 0xff000000); na2 = pixVarianceByColumn(pix2, NULL); pixRenderPlotFromNumaGen(&pix3, na2, L_HORIZONTAL_LINE, 3, bh - 1, 70, 1, 0x00ff0000); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 21 */ numaDestroy(&na1); numaDestroy(&na2); /* Again, with an erosion */ pix4 = pixErodeGray(pix2, 3, 21); na1 = pixVarianceByRow(pix4, NULL); pix5 = pixConvertTo32(pix1); pixRenderPlotFromNumaGen(&pix5, na1, L_VERTICAL_LINE, 3, 30, 70, 1, 0xff000000); na2 = pixVarianceByColumn(pix4, NULL); pixRenderPlotFromNumaGen(&pix5, na2, L_HORIZONTAL_LINE, 3, bh - 1, 70, 1, 0x00ff0000); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 22 */ pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix5, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 800, 600, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix4); numaDestroy(&na1); numaDestroy(&na2); /* -------------------------------------------------------------------* * Windowed variance along a line * * -------------------------------------------------------------------*/ pix1 = pixRead("boxedpage.jpg"); pix2 = pixConvertTo8(pix1, 0); pixGetDimensions(pix2, &w, &h, NULL); pix3 = pixCopy(NULL, pix1); /* Plot along horizontal line */ pixWindowedVarianceOnLine(pix2, L_HORIZONTAL_LINE, h / 2 - 30, 0, w, 5, &na1); pixRenderPlotFromNumaGen(&pix1, na1, L_HORIZONTAL_LINE, 3, h / 2 - 30, 80, 1, 0xff000000); pixRenderPlotFromNuma(&pix3, na1, L_PLOT_AT_TOP, 3, 60, 0x00ff0000); pixRenderPlotFromNuma(&pix3, na1, L_PLOT_AT_BOT, 3, 60, 0x0000ff00); /* Plot along vertical line */ pixWindowedVarianceOnLine(pix2, L_VERTICAL_LINE, 0.78 * w, 0, h, 5, &na2); pixRenderPlotFromNumaGen(&pix1, na2, L_VERTICAL_LINE, 3, 0.78 * w, 60, 1, 0x00ff0000); pixRenderPlotFromNuma(&pix3, na2, L_PLOT_AT_LEFT, 3, 60, 0xff000000); pixRenderPlotFromNuma(&pix3, na2, L_PLOT_AT_RIGHT, 3, 60, 0x00ff0000); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 23 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 24 */ pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix3, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 1200, 600, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa1); pixDestroy(&pix2); numaDestroy(&na1); numaDestroy(&na2); /* -------------------------------------------------------------------* * Test pixel average function for gray * * -------------------------------------------------------------------*/ pix1 = pixRead("lyra.005.jpg"); pix2 = pixConvertRGBToLuminance(pix1); box1 = boxCreate(20, 150, 700, 515); pix3 = pixClipRectangle(pix2, box1, NULL); /* No mask, no box, different subsampling */ pixAverageInRect(pix3, NULL, NULL, 0, 255, 1, &ave1); /* no mask */ regTestCompareValues(rp, 176.97, ave1, 0.1); /* 25 */ if (rp->display) lept_stderr("ave1 = %6.2f\n", ave1); pixAverageInRect(pix3, NULL, NULL, 0, 255, 2, &ave2); /* no mask */ regTestCompareValues(rp, ave1, ave2, 0.1); /* 26 */ if (rp->display) lept_stderr("ave2 = %6.2f\n", ave2); /* Mask allows bg, no box */ pix4 = pixThresholdToBinary(pix3, 80); /* use light pixels */ pixAverageInRect(pix3, pix4, NULL, 0, 255, 1, &ave1); /* mask bg */ regTestCompareValues(rp, 187.58, ave1, 0.1); /* 27 */ if (rp->display) lept_stderr("ave = %6.2f\n", ave1); /* Mask allows fg, no box */ pixInvert(pix4, pix4); /* use dark pixels */ pixAverageInRect(pix3, pix4, NULL, 0, 255, 1, &ave1); /* mask fg */ regTestCompareValues(rp, 46.37, ave1, 0.1); /* 28 */ if (rp->display) lept_stderr("ave = %6.2f\n", ave1); /* Mask allows fg, no box, restricted range with samples */ pixAverageInRect(pix3, pix4, NULL, 50, 60, 1, &ave1); /* mask fg */ regTestCompareValues(rp, 55.18, ave1, 0.1); /* 29 */ if (rp->display) lept_stderr("ave = %6.2f\n", ave1); /* Mask allows fg, no box, restricted range without samples */ pixAverageInRect(pix3, pix4, NULL, 100, 255, 1, &ave1); regTestCompareValues(rp, 0.0, ave1, 0.0); /* 30 */ /* mask fg */ if (rp->display) lept_stderr("ave = %6.2f\n", ave1); /* No mask, use box */ box2 = boxCreate(100, 100, 200, 150); pixAverageInRect(pix3, NULL, box2, 0, 255, 1, &ave1); /* no mask */ regTestCompareValues(rp, 165.63, ave1, 0.1); /* 31 */ if (rp->display) lept_stderr("ave1 = %6.2f\n", ave1); /* No mask, pix cropped to box */ pixInvert(pix4, pix4); /* use light pixels */ pix5 = pixClipRectangle(pix3, box2, NULL); pixAverageInRect(pix5, NULL, NULL, 0, 255, 1, &ave2); /* no mask */ regTestCompareValues(rp, ave1, ave2, 0.1); /* 32 */ if (rp->display) lept_stderr("ave2 = %6.2f\n", ave2); /* Mask allows bg, use box */ pixAverageInRect(pix3, pix4, box2, 0, 255, 1, &ave1); /* mask bg */ regTestCompareValues(rp, 175.65, ave1, 0.1); /* 33 */ if (rp->display) lept_stderr("ave1 = %6.2f\n", ave1); /* Cropped mask allows bg, pix cropped to box */ pix6 = pixThresholdToBinary(pix5, 80); /* use light pixels */ pixAverageInRect(pix5, pix6, NULL, 0, 255, 1, &ave2); regTestCompareValues(rp, ave1, ave2, 0.1); /* 34 */ if (rp->display) lept_stderr("ave2 = %6.2f\n", ave2); /* Mask allows bg, use box, restricted range */ pixAverageInRect(pix3, pix4, box2, 100, 125, 1, &ave1); regTestCompareValues(rp, 112.20, ave1, 0.1); /* 35 */ if (rp->display) lept_stderr("ave = %6.2f\n", ave1); /* Cropped mask allows bg, pix cropped to box, restricted range */ pixAverageInRect(pix5, pix6, NULL, 100, 125, 1, &ave2); regTestCompareValues(rp, ave1, ave2, 0.1); /* 36 */ if (rp->display) lept_stderr("ave = %6.2f\n", ave2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); boxDestroy(&box1); boxDestroy(&box2); /* -------------------------------------------------------------------* * Test pixel average function for color * * -------------------------------------------------------------------*/ pix1 = pixRead("lyra.005.jpg"); box1 = boxCreate(20, 150, 700, 515); pix2 = pixClipRectangle(pix1, box1, NULL); pixa1 = pixaCreate(0); /* No mask, no box, different subsampling */ pixAverageInRectRGB(pix2, NULL, NULL, 1, &avergb); regTestCompareValues(rp, 0xc7b09000, avergb, 0); /* 37 */ SaveColorSquare(pixa1, avergb); pixAverageInRectRGB(pix2, NULL, NULL, 10, &avergb); regTestCompareValues(rp, 0xc7af8f00, avergb, 0); /* 38 */ SaveColorSquare(pixa1, avergb); /* Mask allows bg, no box */ pix3 = pixConvertTo1(pix2, 128); /* use light pixels */ pixAverageInRectRGB(pix2, pix3, NULL, 1, &avergb); regTestCompareValues(rp, 0xd5bf9d00, avergb, 0); /* 39 */ SaveColorSquare(pixa1, avergb); /* Mask allows fg, no box */ pixInvert(pix3, pix3); /* use dark pixels */ pixAverageInRectRGB(pix2, pix3, NULL, 1, &avergb); regTestCompareValues(rp, 0x5c3b2800, avergb, 0); /* 40 */ SaveColorSquare(pixa1, avergb); /* Mask allows bg, box at lower left */ pixInvert(pix3, pix3); /* use light pixels */ box2 = boxCreate(20, 400, 100, 100); pixAverageInRectRGB(pix2, pix3, box2, 1, &avergb); regTestCompareValues(rp, 0xbba48500, avergb, 0); /* 41 */ SaveColorSquare(pixa1, avergb); /* Mask allows bg, box at upper right */ box3 = boxCreate(600, 20, 100, 100); pixAverageInRectRGB(pix2, pix3, box3, 1, &avergb); regTestCompareValues(rp, 0xfdfddd00, avergb, 0); /* 42 */ SaveColorSquare(pixa1, avergb); if (rp->display) { pix4 = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 20, 2); pixDisplay(pix4, 0, 800); pixDestroy(&pix4); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); pixaDestroy(&pixa1); return regTestCleanup(rp);; } void SaveColorSquare(PIXA *pixa, l_uint32 rgbval) { PIX *pixc = pixMakeColorSquare(rgbval, 0, 1, L_ADD_BELOW, 0xff000000); pixaAddPix(pixa, pixc, L_INSERT); } leptonica-1.86.0/prog/numa3_reg.c000066400000000000000000000220221506303110300165450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * numa3_reg.c * * Tests: * * rank extraction * * numa-morphology * * find threshold from numa * * insertion in sorted array */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char buf1[64], buf2[64]; l_int32 i, hw, thresh, same, ival; l_float32 val, maxval, rank; BOX *box1; NUMA *na, *nax, *nay, *nap, *nasy, *na1, *na2, *na3, *na4; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pixd; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "numa3_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/numa3"); /* -------------------------------------------------------------------* * Rank extraction * * -------------------------------------------------------------------*/ /* Rank extraction with interpolation */ pixs = pixRead("test8.jpg"); nasy= pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); numaMakeRankFromHistogram(0.0, 1.0, nasy, 350, &nax, &nay); pix1 = gplotGeneralPix2(nax, nay, GPLOT_LINES, "/tmp/lept/numa3/rank1", "test rank extractor", "pix val", "rank val"); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); /* Rank extraction, point by point */ pixs = pixRead("test8.jpg"); nap = numaCreate(200); pixGetRankValueMasked(pixs, NULL, 0, 0, 2, 0.0, &val, &na); for (i = 0; i < 101; i++) { rank = 0.01 * i; numaHistogramGetValFromRank(na, rank, &val); numaAddNumber(nap, val); } pix2 = gplotGeneralPix1(nap, GPLOT_LINES, "/tmp/lept/numa3/rank2", "rank value", NULL, NULL); pixa = pixaCreate(2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); if (rp->display) { pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 900, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa); numaDestroy(&na); numaDestroy(&nap); pixDestroy(&pixs); /* -------------------------------------------------------------------* * Numa-morphology * * -------------------------------------------------------------------*/ na = numaRead("lyra.5.na"); pix1 = gplotGeneralPix1(na, GPLOT_LINES, "/tmp/lept/numa3/lyra1", "Original", NULL, NULL); na1 = numaErode(na, 21); pix2 = gplotGeneralPix1(na1, GPLOT_LINES, "/tmp/lept/numa3/lyra2", "Erosion", NULL, NULL); na2 = numaDilate(na, 21); pix3 = gplotGeneralPix1(na2, GPLOT_LINES, "/tmp/lept/numa3/lyra3", "Dilation", NULL, NULL); na3 = numaOpen(na, 21); pix4 = gplotGeneralPix1(na3, GPLOT_LINES, "/tmp/lept/numa3/lyra4", "Opening", NULL, NULL); na4 = numaClose(na, 21); pix5 = gplotGeneralPix1(na4, GPLOT_LINES, "/tmp/lept/numa3/lyra5", "Closing", NULL, NULL); pixa = pixaCreate(2); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 4 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 5 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 6 */ if (rp->display) { pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 1200, 0, NULL, 1); pixDestroy(&pixd); } pixaDestroy(&pixa); numaDestroy(&na); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); pixaDestroy(&pixa); /* -------------------------------------------------------------------* * Find threshold from numa * * -------------------------------------------------------------------*/ na1 = numaRead("two-peak-histo.na"); na4 = numaCreate(0); pixa = pixaCreate(0); for (hw = 2; hw < 21; hw += 2) { na2 = numaWindowedMean(na1, hw); /* smoothing */ numaGetMax(na2, &maxval, NULL); na3 = numaTransform(na2, 0.0, 1.0 / maxval); numaFindLocForThreshold(na3, 0, &thresh, NULL); numaAddNumber(na4, thresh); snprintf(buf1, sizeof(buf1), "/tmp/lept/numa3/histoplot-%d", hw); snprintf(buf2, sizeof(buf2), "halfwidth = %d, skip = 20, thresh = %d", hw, thresh); pix1 = gplotGeneralPix1(na3, GPLOT_LINES, buf1, buf2, NULL, NULL); if (hw == 4 || hw == 20) regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7, 8 */ pixaAddPix(pixa, pix1, L_INSERT); numaDestroy(&na2); numaDestroy(&na3); } numaWrite("/tmp/lept/numa3/threshvals.na", na4); regTestCheckFile(rp, "/tmp/lept/numa3/threshvals.na"); /* 9 */ L_INFO("writing /tmp/lept/numa3/histoplots.pdf\n", "numa3_reg"); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, "Effect of smoothing on threshold value", "/tmp/lept/numa3/histoplots.pdf"); numaDestroy(&na1); numaDestroy(&na4); pixaDestroy(&pixa); pixs = pixRead("lyra.005.jpg"); box1 = boxCreate(0, 173, 350, 580); pix1 = pixClipRectangle(pixs, box1, 0); pix2 = pixRotateOrth(pix1, 1); pix3 = pixConvertTo8(pix2, 0); pixThresholdByHisto(pix3, 1, 0, 0, &ival, &pix4, &na1, &pix5); pixa = pixaCreate(4); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); pixd = pixaDisplayTiledInColumns(pixa, 1,1.0, 25, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 10 */ pixDisplayWithTitle(pixd, 0, 500, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pixd); boxDestroy(&box1); numaDestroy(&na1); pixaDestroy(&pixa); /* -------------------------------------------------------------------* * Insertion in a sorted array * * -------------------------------------------------------------------*/ na1 = numaCreate(0); srand(5); numaAddNumber(na1, 27); numaAddNumber(na1, 13); for (i = 0; i < 70; i++) { genRandomIntOnInterval(0, 200, 0, &ival); numaAddSorted(na1, ival); } if (rp->display) numaWriteStderr(na1); na2 = numaSort(NULL, na1, L_SORT_INCREASING); numaReverse(na2, na2); numaSimilar(na1, na2, 0.0, &same); regTestCompareValues(rp, 1, same, 0.0); /* 11 */ numaDestroy(&na1); numaDestroy(&na2); na1 = numaCreate(0); srand(6); numaAddNumber(na1, 13); numaAddNumber(na1, 27); for (i = 0; i < 70; i++) { genRandomIntOnInterval(0, 200, 0, &ival); numaAddSorted(na1, ival); } if (rp->display) numaWriteStderr(na1); na2 = numaSort(NULL, na1, L_SORT_DECREASING); numaReverse(na2, na2); numaSimilar(na1, na2, 0.0, &same); regTestCompareValues(rp, 1, same, 0.0); /* 12 */ numaDestroy(&na1); numaDestroy(&na2); return regTestCleanup(rp); } leptonica-1.86.0/prog/numaranktest.c000066400000000000000000000063721506303110300174130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * numaranktest.c * * Test on 8 bpp grayscale (e.g., w91frag.jpg) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 BIN_SIZE = 1; int main(int argc, char **argv) { char *filein; l_int32 i, j, w, h, d, sampling; l_float32 rank, rval; l_uint32 val; NUMA *na, *nah, *nar, *nav; PIX *pix; if (argc != 3) return ERROR_INT(" Syntax: numaranktest filein sampling", __func__, 1); filein = argv[1]; sampling = atoi(argv[2]); setLeptDebugOK(1); lept_mkdir("lept/numa"); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 8) return ERROR_INT("d != 8 bpp", __func__, 1); na = numaCreate(0); for (i = 0; i < h; i += sampling) { for (j = 0; j < w; j += sampling) { pixGetPixel(pix, j, i, &val); numaAddNumber(na, val); } } nah = numaMakeHistogramClipped(na, BIN_SIZE, 255); nar = numaCreate(0); for (rval = 0.0; rval < 256.0; rval += 2.56) { numaHistogramGetRankFromVal(nah, rval, &rank); numaAddNumber(nar, rank); } gplotSimple1(nar, GPLOT_PNG, "/tmp/lept/numa/rank", "rank vs val"); l_fileDisplay("/tmp/lept/numa/rank.png", 0, 0, 1.0); nav = numaCreate(0); for (rank = 0.0; rank <= 1.0; rank += 0.01) { numaHistogramGetValFromRank(nah, rank, &rval); numaAddNumber(nav, rval); } gplotSimple1(nav, GPLOT_PNG, "/tmp/lept/numa/val", "val vs rank"); l_fileDisplay("/tmp/lept/numa/val.png", 750, 0, 1.0); pixDestroy(&pix); numaDestroy(&na); numaDestroy(&nah); numaDestroy(&nar); numaDestroy(&nav); return 0; } leptonica-1.86.0/prog/one-asterisk.png000066400000000000000000000003171506303110300176360ustar00rootroot00000000000000‰PNG  IHDRiĘĘk cHRMz&€„ú€ču0ę`:˜pœēQ<bKGDŨФcaNv€ \Ž3Љ@IDAT×cø˙˙ nâF(füĮđˆŸ3ö1``BÂl øū0ÔAą˙b9†50lĮ€aū˙ ú8“8ošĶIENDŽB`‚leptonica-1.86.0/prog/ortiz-02.tif000066400000000000000000001640441506303110300166260ustar00rootroot00000000000000II*ūö ä  × ū%()124,,׿HčGPL Ghostscript 9.502020:02:06 17:26:23 8Uf˙öƒ „ŋ\+á˙¨a~ØH*_ûáØa~H(@ˆ˙˙‡ˆ_P@ˇŋÄ€áT……g–ĐEÖ?â€áR.‚ū$|?‚„ âņÁ Į2Ė( ^˙‡đ@ŧ/ˆe˜_˙à §%ū>$Gđ˙†ŗ4ģ.ģ.FâA™eŅO–äŲ,DD|š ‘P˙˙˙˙˙ÄAĖ"â"IsCŽ(!pÎŌd–ŒBÄ „##Ԅ:!‚€ļ\6Ã*ÁÁ˙˙˙ũ"!Hn‹AĄ$>E ‡¸0Ã-āÃ+ĨP@įbB‘㨤xpJ˙˙˙˙ū[͡ “†0Å6ĨŸl(\5@°åim†!˙˙˙˙„<2߅A8Ynˇ„eø\/ ¯ãī_˙˙˙˙äŸ øk 6 ¤`†Đc‡ī Ĩŋ-ܡo—F_…˙˙˙˙˙Ë9.8ūün wár†TąI @úaJ@B\ƒ3bA€BL§TVđĩAÄC˙˙˙˙˙˙˙œ F‹xF‚¸?@AÁ‚3ƒ!ˆ˜ aĐ0ƒÁC@’ƒ E‚#Ōß ´´`Ąđ‰;<X!`‰pxA"\D¨ \ĖȎA 8`ˆæ"Tĸ>%áĸé ‰ˆ7^á˙˙˙˙˙˙˙˙˙˙˙ށQ#†L„i‚ˆˆA|6 a„l(|27ˆđ9}wđą= ¨Mžč> Pa„0Ŧ2@CÅVēPzOąa ;§đŋ˙˙˙˙˙˙˙˙˙ū Å50ĐO‚ ë×B¸\._¨dnĨŋāˆö8aa>!,-ā鄂ˇ ‡?ü&&5búŽia˙˙˙˙˙˙˙˙˙đ–[ų1ņ3™^ú …AŨa‡{† ˆį åŋë˙ŽDyéC” ‰\AŽĄ4¸āŅøë ˙˙˙˙˙˙˙˙˙…ü!Įž"8q ÔAƒÁ‘(Rc‡ī–‘ A‡ü:mđT<Š9 9ŸāƒÜ“ÃÁ‹ˆ× Š|/˙˙˙˙˙˙˙˙˙„E0EZÒ "+‚$˙%ȸāöŊ$˙˙ū|>ƒ"ãaj 8`đbŌl8á˙˙˙˙˙˙đŋÃöīü Kā(27íúåĨĸÒ|?ė,=„žčƒƒ˙…-ĢÂ˙˙˙˙˙˙˙˙Į ü8}úÃđ‚Øy᯴–ī!-¸dė2úü† “ŊðũBC˙˙˙˙˙˙˙˙ü“áxrī‡ŽKŋxda…a[č"ˆß˙ŋ ˙Â°ë ¸[ĢUxZ_Ã0áÇäߖ‘Ã˙˙˙˙˙˙˙˙˙˙…ū Âīh(aa„ĄZđƒ˙ĮūŊxa ‚˙¸Xh.aáĐAĐL9œ0—Ã÷߸Våž[Ŧ$Á˙˙˙˙˙˙˙˙˙˙Ã˙ÂXeģ°•„Ŧ$ąŽnÁn (aü\xeKáB$˙∿ KpEØ ļ!°ÍŠČ=„Č=đČ'h#•ÃÔåáæwØ ‚™Õpą˙˙˙˙˙˙˙˙˙˙˙üŗ Ã#b ‹‡ $ė0‹‡Lq† ļ ĸT  J \CI‚.Á/–úÂ@úƒ Ø0„„@bBPBˆ&Dy80 “ÃP@Äö5PpŽŽ@‚ D Á‚ÆÚ†Tž˙˙˙˙˙˙˙˙˙ ÖqÉÆ ƒbÜ h¨zÄÔ(§ %.ÔA$8"<Š>ŧ1%„`ĘsITÉf "!°LÎŅ†‚`Š@0p B a˙˙˙˙˙ņÁ2pÂ!Ũ Š|; ˙ü:A……a„T˙Ļ(`Đ+Ã˙ļA ´˙Ä1Af_…˙­CBūáü>Ãø\/‡üB⁇Pˆ_aT/øôŧ(tøV=B˙CŲ—_ø‡FSÂ˙kâĖŋ Xđē‡ûĄÁáT.áü? ‚ūĐPâ eøZP˙ˆQ ō… öyLxa~Sf¨ē*dEŒėE‚AJd-ĸÎāô Ž wˆ˙˙‰Ŧ.ˁ'`ī%–`ŦËđŦ‹đH6Pæ…J¸t˙˙˙ūœžrbvÃŧš—N‚ 1Ļũqđøa˙˙˙°k¯‡áÃĐ"č'Å 3VAaN‹Ã ‚˙˙˙˙äų9Ä5 <Ád(ä^!žwÁˆ5’ÔĶ!62õ:s 9P)/͐.sā„Ė@ˆa?":ĨH#`fÃAá'‚‚0ᄠÍ)ōp‘ąA<0Ļ ?˙˙˙˙˙˙˙˙˙ö|"X4\ÃöE‚ā™ķR%pdēęčq‚!am4_8ļ%C-Ū@ƒđ~é“õŽ.(%xl˛S.Ÿ0d^ <3Ė$`É\0AÁžS…˙˙˙˙˙˙˙˙˙˙˙ú˙…ī\—?¯†ƒ‡á}‚˙˙˙˙˙˙˙˙˙˙đīÃ˙Ŧ —ÃÃ⁨x_>¸}C Ĩáá~Ü.ūC˙„A~Ą„õņ ˙˙˙˙˙˙˙˙˙˙Âųbŧ0á~‘ĸ×× ¯ÃũáđúüCávŗ@,%Ĩø^ ‡đû˙áa{ųnų2ž˙˙˙˙˙˙˙˙˙˙˙ŧ($-íũ˜ø ž‚´áp°ŋP‚ õņŧ=† (~ИBeÃÁ„”/ :˙ Ü/é˙˙˙˙˙˙˙˙˙˙đĻ+a) ‘l&ˆ8Ē$zˆA@đÄA…NÂđü0×AØ  „–¤ `⁈ ‰8"ķ&Bˆ0F´Ī d[Ē-Ø Á@Á@Đ`›l0<%˙˙˙˙˙˙˙˙ū" n’ö^"#ˆˆˆˆˆŗ‚ēA:â+ˆģ˙ęØZ]*Bváx$˙˙/ÄCŗ%™Q˙ü1`˛é‚ĘihQ|?â( ¤æ?Ž€āē.A˙ł —A…ūā•ŋ‚H ‚˙ˆ°YÁt!đ‘‘āĄšG ÷{õÄËāž@p^Áí‚ a~⁠ļÁ˙-X˜eĐA“  ƒB"IsYZ`LB˙ųjđ‡‚„DRš—¤(& Đ_˙đīáÎÆíPØt q˙ūč=3Ęh/ál* ˙ü.D2M‘T3 Ęq rÎĸnģ>ukAJCA…œđB@sZ8ÁLDâh/˙˙˙˙˙˙Â@‰@`ˆđDîx@˜"!ƒÄ/'ÁÖĄūøđĄŋ¨ü=Ą‡ ‚˙˙˙˙˙˙˙„ ‚č ÂA~…ßõëû ‚ČŽŖÆ!č!Ä/Ŋ…íj(/˙˙˙˙˙đĶ¯Â uūÄ/„Ą0Üĩdø-`ƒõÁ „‚˙˙˙˙˙đė6„@ˆŲáÁCüčF j"å ‚ ×à ø \%| \,/Ã˙˙˙˙˙˙ôõPĄ(l8^‚áđ^‚߇ÃÁ÷đŋÂXA`ŧ!˙˙˙˙˙ü8mŗZÎļj‚0Îļž¸}~~¸`ÃÁCö÷øvõ8zđ”/˙˙˙˙˙˙˙…nXAa{/‡đūAū=°°Õ†‚á‚_øXtŸá‡ū˙˙˙˙˙˙ūᆠ› XH Ø>)ˆ6ˆx`‘#ĀÁ„œ`ž Z( ÛbƒˆI†!D¨˜âxAƒ6%CbA#„geÑėP_˙˙˙˙˙ūˆgA⚠ Á Đh p˜@nj™Č[lS@á„ĸ!”å)Ęp@Ęxˆ0L0B!Ļ(@˃T⃠‚„‚ ˙˙˙˙˙øˆˆˆˆˆƒ DDDF Ą¸A/öA ‚ƒB‚˙-• ˜J[$ô_ōŲ3ą s* AÃh.‚˙Ä72žõũĘbį`‚ę_î⁠U‚ ū‚Aqs)áUCûˆU2ô‚˙v‚Ē?âĖŊ ŋÉšM ėjĐA˙Áœ,1u ˙˙Ē?“ÆqĢaÁQ3p ™ˆ¨ ŋ˙˙ū 4($A.(0PTAôháÚ*4&q˙˙˙˙ °Âƒx¨^Nö@a ‚ ˙ÕT,< ē ˙˙˙˙đ´ Ą †ĄãÔ-/…Pž‚ ˙˙˙ū á øH+ŋŌ…˙PA˙˙˙ū üĒ""+ĒéU…)†ëŌbĢ!˙˙˙ƒ„.ĄIQƒ \DDDDGøf^QĮĘZ .Wˆ  ˆ€.+ ˙倚U‚đŋôW ô|ĐÁ˙ņ âpš— _ū2Ų8Bë`Ą‰f‰‘d&z ˙ø^†G#lŽ.Œ]-˙˙˙˙˙˙˙˙˙˙˙˙īøA‡„Bˆ¯5Ø&ŋã~ĸ8ˆš ‚šˆvSĨ2Q€åŅpA|P_p¨~2zú-Ãū‚"ŽáđDn‚j¸ B%9nArN˙˙˙˙˙˙˙˙˙˙˙˙ëūˆG á„91Ãĩāëđ‡‚Dn ÉāúÄ!Jsg ÜS°AŽĮ˙įiDzŽqÂūb‚(ęc?ĸ7Âč @†z -ŧDDL9 9 A4ũ˙˙˙˙˙˙˙˙˙˙˙˙đūáp¤AÎ=ÎʇÃü4…ĶüN=Bü28°ų†ÆF¸™˙\Đ'Î$Įˆ ēč!øq„ö’Ɏ7ū ųá!Į•AÚįPT#ƒøH/˙˙˙˙˙˙˙˙˙˙˙˙…x×#t ˙„Lrc؜uŋâ ņ_É2 ã„!Bī‘°\ŧG GĐA‡S€åĐs˃I€<3 r8+‘Āšp$.‹ĸčē.‹ĸņČøLâ1‘ō>oŒŪGČų!ĖDpåÁšt\5ČųeĀđ`†G0Y. æĖŽ. fȸ†ÄlČæƒ0đ˙ˆŪÄP"#Ŋ¯%G G x…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đŦDDDDDDDDDDHQÄDDDDDDDDDKr˜â$q€Ā!˜™ŒŽds7ĖDr.Ëŗ$8ĖdpÆyœF¸Â8‹ĸčĶ?žEŅĻy&fftc#ä}LR—Rã. y—¤Č0d„9Yf †2=!XS›ŠA‰¸ãž œŦ!4"l™zä ibqČŖGGyŌ%qOˆ•2–e$wLÕ#P`‹‘.Ž#lR8dDp4 qHâ›3FĐ_˙˙˙˙˙˙˙˙˙˙˙˙˙˙ Ãúà ""#ˆˆÉ ģ$đą§˙Ãpøøˆ8ˆˆâ7(‰$͗𐪒PLaqĪį+Ž9ā§)ĘÃS”˛ƒÔö‚  `¨ ˆŠŋíB҇։qÃ' ŋū… ávö"É8¯Ä_‡rœ§¨ˆ_˙˙˙˙˙˙˙˙˙˙˙˙˙ũ°îŠü-øCÃáÖßûáūôą8 ˙ˆ‰N[ņS/H./"ūx#Â˙91Á}ü=x]DníxSÚ˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ‚˙„™ú!J„ũš‡†!üĨŋáx_÷´Hs¤† !)Ö˙Ž‚ °ÃZ‡¤¸z˙ũˆ„0߸˙PĄūô˜ļ#"bŋÍÜN ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙„ę/;ŋ¤QßÚPžĨšnŋrūúŦ.DpˆØō_#äsü!˙‚ :†F#ŒF¸2æĖŽ()ƒ#0ˑˆų#æĸ.Ž"FiâéSė Š|‘ÅĘÄ{0ŗ–?‘âėģ1‘ķ‚>Gᛠ`fŠD`…02āČoČ3GŒØl0ft\3 Ņ‚A‘âā…â>GČų˜28l.G2>G‹ŧôGĖ#ÁËŖŅĖFˆģø_ĩPøÂ"Ž×ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū´„DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHÜDDDDDDDDDDH51ō<`Bōf™„c#‹f.2äGČų#ä|˜f4GxF>ÚĖŅB850FđĪÂû—Y l`ČEƌHVå9nS•CųĮ8į‚ ú”åá\LsŽqÎ9°‡ŸƒS•â¸öx.B †Ũ ZYiˇ„rœŠ ˛Ę V`Ą#HN…PáŸĪįqÎ9č_ÉAX ㈈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†eé˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„ƒá$H|1hCDD '"qkūFå8 B2X&ũaÄDDD\CD5(˛6ČÛ)y#æĖō fHd¸†‚‘ō9˛ņ9txR9ŸöGŠB4Žą(ˆSÃãÁûÂÂ͇$<,Būq#r—ÃNCŽ˙͏ˆÂî1""ÄEÄx~§A˙˙˙˙˙˙˙˙˙˙˙˙˙čvø" ÂACū “Âž”ä8äū!Âü?×Âđ‚&?áxà åAĘV‚’¸=‚!ßīŋÁaūą!GÃÂøX_ëé Įü?Sô˙˙˙˙˙˙˙˙˙˙˙˙˙˙â!ĩü7 ‘G-BøY‰ūvœ3H᠎×Ęȃ‡‡¯˙Á?üqK ‚Ū8¨{ū˙…YØØGČæGČâ‘ō8ģÂȨf˙ŋđŽ/ ĘDQäh? ÁáQ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úõ…ë˙˙_‚"qÄL˙ܓāä{áC0Ģøx| ĸ_ü=īøpÍæō>‡‘ãF2>Gޞ„b8ĄČæG ŸŒg‘Œ˜EŅtPˆDPĒųI˜EŅtc#ęPžÍ3y1˜eҘr>yf ŽEŅwgŗyä]ÅĐSD]œE æt]Čņ‚/ô",Āl.Ļ28Ēu‹ŖŲSŒšō9špØG G4F´HÍtqDšū$!ôđ„/ÉÜ"O˙B‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰9œN8ˆˆˆˆˆ0äą"9n(˙ŲŅGÃūŌBSÍrÎ"ņķ0×!ŗËÁ—ĄĄ¨Z ™nD9öVMYėžĪg üS”å9XS”åA.&9Į<ãqÉ9 îC,sŽg)Čܔäpx)ĘrœĐ^å9PqÎ9ėö~+áNPBÜÜo8įķŽEĄ\s˜!ŧ㟍Qø¤Äõ(¨ŠYĢ Bŗš‡8ærÜ! F…9Ph<CŽqĖåqøŠ•…9NaĪÅAĮ3”änJĖâFå8"8ģ.‹Äp4"áĘëM‚ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙nĐq„0„DDDDDDDDY΄DAĄqÄGâ<ˆ9Ÿą Yå0„€ÄDˆ ‰ 9nAģ˜rIÍĮŗÁXTËÂāŠ9Į"9!Ī‚āÔ&9ŗŽLsq;8į‚ƒ^B Jr@ĪäĮ&R`#'•Ė´tˇøApáŽōddq/؉VCNDųHqɎqÄL9œÃœsŽ"Ŋˆˆ´"""#ÂÄYŠ ŗ‡Åū‚A˙˙˙˙˙˙˙˙˙˙˙˙ø|;męŸā‚ú|ƒŅtC<sČR#ÅŅtJ|Ĉˆˆ“ãˆĶŽą aø$aávaá(‡  lŠ9ĮÁ‘ō>#ÅҌŪGÂčHŖŽD‘$1@T‰tō#áø`ã¨_$(/˙˙˙˙˙˙˙˙˙˙˙˙˙ÃáģōHpī˙ˆâ"""#ʀPG‹ĸãA§)Ė9Ÿ!Ô8‰œÃÔĮđAŋô C ÃA?Ä/ęL|‚î[˜s9naų ˛=É""$:Ų ˇ4Hkćü1Ȑž0đA˙˙˙˙˙˙˙˙˙˙˙ƒ`ÃÂ_˛c¯î&|DDG’ąHáøœsŽAņ! ˆ1EÎA|)! ?áIŽqÎ:đEI=đc0ÂЅũA>eiH„Ęˆ™ÍŊHŽ$ĮœÃ“†WH”)ĘpEĀ‚ aū"!$å?ōčʈ_˙˙˙˙˙˙˙˙˙˙˙˙ÔDDDDDƒ<ˆˆˆË†‘v]EŅp\¸„pËB""g)ËrC‰…Wˆ B%8”ä‡ @ˆ_¤#4ü}ųÎ9 aČ|)Ė9 ¨8įĄNVšã’ÂC@į†H)@áČqČļ{&9œ§āĐNČŖœr(æZ$å9nS•ÆĐ§*‡üjœāˇ5›‰Ánh)ĘsANS˜sA¸Øk8įķŽqÎ&{&9 Š91Î9Į3”åAĮ=Ŗž rœÃœrcŖœq ŧÄDDDDAœN91ÄDD§8äQČ1gDC#†Hâ‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙å•B†Š%Ŗ„Ib7ˆb"%9N[ÄDDDDDDDDDDDDDDDDG˛XNËbāĘ^#ƒpÁÄxC.ŠHšĖŽ VG2B/âėäGČâ‘âėÖ2ėĐ͘P@‡ŋ ÂūT#ĀAp\üH@l/Ø1!#–I9!ĖPL3JL$ÁÄ?‚ ˙˙˙˙˙˙˙˙ūÕôų¨.”å9N?2 ŧOæ­Cđø@‡ĐŊw ņ"Ž&DGæKyđPNąÂđƒˆGá•*á˙˙˙˙˙˙ø}(o#+‘!GŽgZ‰P$ų#‰û đƒÆĘLŪŪ2 ÄN8‰ ÆåˇÎ3 ĸbB/˙˙˙˙˙úĐžČ/…'ņ A°üač c!à ü/ !0įp˙ Öl Ca|VZ ˙˙˙˙˙˙Dn1!˛ü„™FĘëBŽCrdā-.„C1ÉŽ&#ŋŽ$[† ž— A˙˙˙˙˙đŧŽXdrūI9n1ĮÜ?$?Ęä Ķü2 ō>G.˙˙˙˙ÂīKŽfŽō4x PđA~!Ą‰ ?đ‰@lü_˙˙˙˙‚Ë}Kød>0Œ¨_+XEeāx˙˙˙˙ƒ.E{Ãaˆ ž0˙đ‚ ˙˙˙ëõ„v4°ú ßī rēÆG˙˙˙…ü,s* A~đđû˙˙˙˙ū(/ÂÕa™-Á˙˙˙‡ģÃđø ŋ ürēÆ_˙˙˙‡ü,s*$˙áū?˙˙ĖūĢū:‡ģÂĐ"čP_˙˙ũÂõ‡´ūŋŪ/˙˙˙ÎĶŲ•Gđŋ~ĄkĒÃÁ: ˙˙˙˙†vDš‘wxX…÷ w ēÃķ* A˙˙˙ü5øa÷…‚<Ô'øZđņ /˙˙˙˙¯ÃÎˊ˙‡2ĸ¸o…guk ‚ ˙˙˙˙™ü/à ,ÃŪ–˙ÃCÂ0‰Ž2°ã‡˙˙˙˙„VЅj°˛ēŨ…ë„tŖŠr ōP.ü?˙˙˙˙˙ūáÉ<"PŪHx'Áa­˙Ãęé{8"7ŒA W…ø_˙˙˙˙˙ŧ>ø}0đˆŖõ‡‚8ũëz0 —ō88 d2Ȁā„ã‘6)ü|˙˙˙˙˙îr ã+D§jŖ .Dƒ:ˆĸh[ÂĐ"čAë\đ¤q<|3ˏB˛ÄJF]EŲ4Ŧ=Á˙˙˙˙˙˙˙û„đâá~%:¨ˆ¤[†¤Š?øú‡Ŧ ‰ŽqęRš-Ëv'¸AGņ˙˙˙˙˙˙˙ÂC‚ˆđĄG* ¨Ũax Cî),Ûš%NJî*ë—ŋ$9œ%) áū/˙˙˙˙˙˙ūˆˇ$9Įi$\OJmæĸ7!īÚx DsøŠÔ¤œ˙éB |8 ŋ˙˙˙˙˙˙ū‚@RPŧ/#pÆHˆáB› |Ž)9v\B>G GÁ悜ÙĘrܧ%Ē„M’˜Hژ Ķ)Ęr äĐĶ*eÁ°´æážÉh)Ȑ\rZîGCA;$ä‚NS˜sŽIʃŽg!Į8įŗŽqĪg‚đ§)ʃņPqĪLĐTʃÁCeAčaŖm˞ŗVYAЁ,Ė ĸeA°¨8ä°Ãœrc‘G3—4A´rdĮ0â""""" ˆˆˆˆ‰ÄDDDF˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙|‡â""#Bâ"8ˆˆƒˆˆlD4"""""""â"""8ˆˆŽ=$×b"""""â9(R„#Ä@ˌˆŠÆ#įT@ã .Kæķâ(ŠB$€Čt„Į[52‰]c aū°mđŋ_˙˙^!ß"ŽÂ$áÆĮˆˆÃdž"#ÅI8q8á0…ØÂ˙˙˙˙˙˙˙˙˙˙˙˙˙øPšŪ‡˙đŋ˙īę&~†apŌô+Đ CŠ*ŠˆeJ”°¨ øo˙ C˙ūŪø †K’É’|Jp ¸P¸ ‡†~ FJë\˙˙˙˙˙˙˙˙˙˙˙˙ û[˙_˙úĒæ2$čxBgQ)Â)C‚á°\!ĀxÖÛĄKõø_˙ú˙>8Áw#|Â]Ķ1A!Į1 ",G\Ld|Â.‹ŖˆēC$ ‰>ízáCˆī˙˙˙˙˙˙˙˙˙ Ē9x Č9ā§)ʃШ!`ä;’ˆä ŽAĮ$â'āĘ9œĐFä3 ˜ä2ܐäĮ&9;'an[˜r,L. 9 ˇ0į˜į‚°Đh.9 1ÅÁ §0äāŧ)ČeŽ"""""""""aÄDDDDD"ēT()’´H𒀑‹IxĄ‰Žđ)Rˆ\I"% Á-ŠĐ`D8ˆˆ‡„DZĄÄF„EĄ ë8”gâM">LA1Éę[’˛NAlG#r đš•0䠐䜍ĘrÜÓâŽ9ā¨4 Cøa#Æ_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū‡áC ü.‚‡ŪŋĮ{øA(\qb1""QÚ¤u‰œRB4",!oqqĖåįÁ"*M…ôē…ü„uȑôŋ‡āíR˙_đ„0ô˙˙˙˙˙˙˙˙˙˙˙˙˙ß˙á‡øˇŽ-˙0Upø_õūžž?ũāŊøPČÖuü0‰Ž Đá<_‡ũárœ§áu˙˙˙˙˙˙˙˙˙˙˙˙˙Žx/‚!oI¸¯…ųZGƒåT‹‡ÎWŊxXō7ë0×á_׈ā‚ëú ŧ ärV  vp;īáč!)˙˙˙ø]˙˙˙˙˙˙˙˙˙˙˙˙öLk Ÿ„ÂäŸ˙YVDxšÂåB.ČņpăwQ¯đ‚°É ˇ˙ëūE åuŒč.ŗ„]R@…0EŅt\ ˜f8Dš8ĖGpØG g"8SūN ‡#ā„D˜ä0änCš$ā ‘ȸd|‘Â‘Āƒx0` ‚Ņ€Í#™#š#įđC(Fž¸ō¤) üP_Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""$27cœr(âaĖâ"""$Į3’D㈈‰Į3‰1ÄDDDDDDDDƒ\k‚̐G280GĖYˆ˜GŗÆD¨Ü”gō#į‘t]EҌŪyČų#ætc#æŪGÍtqˆų‹Ŗ#äxēG]Î2čē.ŒGD]F3y„fŒg‘š1žˆú˜‹Ų8.ˁsd]ˆæ‹ĸėē. Lā„p ēDp°AyŧĐK Ą¨Lš u“4Š z…dHTG$ä‡"ŽJ A'0䜧0äĮ<æâܧ#r¸õĪg*eqė늛eDnAˆ.ÁEAÎh<…9PK âvqɎqČh㞠r šqcˆˆˆˆˆˆˆˆˆáī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆaĩđĄ†ņ"""""""""""$AČQÄH8ãäđC-ČDUw˙˙˙˙˙˙˙˙˙đÃa‡ @†˙Gj€ą ūCŽ&q+ō& n7èH~Ø2OJõĨĮ#‘t]"8Bâg0įHm q; }øA”á˙˙˙˙˙˙˙˙āÛ‚ûlIG&|?؈! D˜|ėČē.˒áaø1C7žeŅ‚Ėd|Ž)€0\—EÃPÂS€xe—f‚eŲ‘ō?Eu,‘ĖÃ*2>G‹ŖŲ¸ē.‹Ä|#`Á#†Ā4o#ƒYt^0‹ĸčē.#™„„G˙!•C hy•‡7¨N˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDDDDDDDDDDDDDDDDDDDDDDDDDDDDD‚ˈUrœI9OČÃ#†Yr#ÅČŅLî,­d§#į‘t\eŌä]Čų9yMhšÅˁú…–ä3šNTs؜¨=œsŽqÎ9øÕŠr‚…'8™õ/SŲøĸaNS•2¨z…9Ãw |äĮ!܆w! ”G&9 ŽS”å9n[–å9‡8į‚ ãž Đ§)Ęrܧ*ÅqĮ<hú•‍$ŖŽ%á!Čw. ŽBŽ@đĖDˇrq ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū„DGQˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŽ$đˆˆ’Ė†`„Ī!@…Ášv\92 ĪÎD‡Â‚āœä6AÍa(.09œ§!Î9ČlŗL­Ģ Bƒlי ŋ÷ÃXD .]—l“ ˆw)ĘqœDaˆˆˆˆČGmÃ|˙˙˙˙˙˙ü?_yĐ9#äq œrcˆˆÛ‘e ŒčŽ„¸_ ŨÂâFâ"qĮ ŠÅ9R[ÄDŠ9Ęu ô˙˙˙˙˙˙ÃúĐ8АlrCq˜ˆđAcōŦ@˙ņ C””@ÂāĖ9‡Â/˙˙˙˙ü?îä72pRéq' Øeu¤AW˙äæÁ%p Ī `‡˙˙˙ũ˙ú É Jâá!ø ŋ$˙ür¸'ž˙˙˙˙üߌ QA ×|0p@‡˙˙˙\0H.ę¸^+øK˙†˙˙˙˙ûžî!ņŽ@Į×PĄ‚ā‚˙˙˙÷ĮŋņÂC˙ŽĄ”á˙˙˙ü(X˙ûøne8˙˙˙˙Q~Ģá'˙˙ũÂ÷ Hūëáx ŋ˙˙×˙á‚îázū>˙˙˙˙†¸\?ßū‚˙˙˙Â÷ü/‡úøo…˙˙ũ˙x_ë†8 ŋ˙˙Pũ_Â+­EĐIßúķ Jˆe8_˙˙ë÷øÂ+Ĩ!˙đķ" ŋ˙˙ßë˙ ×īøB#˙˙¸^ŋ†WXŒ‚ ˙ ƒ˙˙˙¨~˙‡a!ŋÕ†S…˙˙˙ë}ũŋŊuÂ>!˙˙˙ūū Bû¯ÄˆK˙˙õúŋ„a_^žˆ`Ÿ˙˙ũīüŽą‘đ’ ŋWđ„C?˙˙…^ž]i`‚¸wŧŽžøA!˙˙˙Ô)˛Üh5Ęá‰đÃ*G7Ëpa–`3,w P ŋ˙˙˙ÂĒ–áæGĢŽeK]C„’ Ëä  åx^#‰Ŧ ‘’0_˙˙˙˙pŋ–î ōJ˂a‡dä ™ĐÄ0ƒÃĸ7z•ĖÍ e G=ūWX0 ŋ˙˙˙˙ūOš]h.HäœBÁ…! ¨0ĄxJ,ŒŠÁ?đÍ)‚˙˙˙˙˙ááC†āˆ›Ē >$9Į˙ Ã)ÂũBÕÁƒĖ‰” đ„e¸Ŋū  ˙˙˙˙˙˙ÂŦ8N†ÁoĨë„DĨ Ph2ë&•d1QÅ \ĘÂĩ=‘Öz‚ÜDHd`ærQ+ĨX ŋ˙˙˙˙˙˙˙˙˙˙ū_Ãëâ"0ÄyąČ% ¯qŒDJḁFJP‹ (ŧ0đ„0á¸\ŧ˙ ˙ë˙Lސ_˙˙˙˙˙˙˙˙Â]¸JũČXa|0°k|2ēՏ …˙ėÉ:ųČ'ųHU2:,+‡‘8 ë…$/˙˙˙˙˙˙˙˙˙÷ú–ūˆ Du„%<• ÃÁGokøÃƒ÷à PáŒxk… Ä+Š˙øzÂí Š˙˙˙˙˙˙˙ũøAa8CL}TŠ8 ‰ ‡ëúÁ†õ 𠂨S@@S’ÃŅpn^#ÅŌΊG"čŊŸČųČų†b.‹Ŗ#™0!BîÍ2>GČų…ĸ.!˛8ĖŅt\.°r8¤xĀĻ"9›#8ŽF2>G"āĘr< qq—`R80`@ŋ }˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũÁSˆˆˆˆˆ< ĒČÜĐS”åAr#Āærœ‚q&9îbS@…ÄS‘ĖŽ0EÂEÁ ĸėÆGČāäxŧG‚áa•" ČlÂ&Ŧ‡-"m!‚Š81Č>ÂȎFZ]ejtåœįã "ŽD!CRQ-ęCŦ™8‰{ 6§1Q‚ĖAdŗŲĮ=žĪęx*DDDDDDDDDDDDDDDDDF#ø ŋ˙˙˙˙˙˙˙˙˙˙˙ūLrPé>˙&; SˆˆÅKŒØ‚!Īž­>÷ÄDEÄNņ^;Jˆf@ŲŒ”Ŗ´—ˆáü) úø!š_à đ†IA´…ũxt‚ī~"dt/˙˙˙˙˙˙˙˙˙˙ü$XxA_pü…‡đá/PDAä¤(ūŋŋ kũpĘë^!ÆTD€õ×⁑/á`žDBƒ a¸ų ­ŦūŊÖū˙˙˙˙˙˙˙˙˙˙˙øXx ŋđŧPh"gÉĒø D!kcņūü œ"#đ˙Â)Ā‚˙đ‚ ÃÜ!á˙ †"*h/믎 ¯zá•Ö2>?˙˙˙˙˙˙˙˙˙˙˙đ°–­ ĄdB˙ႠZ˜/Â˙ĒÄ/˙ @‡ÃH^O Rá‚8˜”Ā02é .ËŖ\ē/˜Eâ>GČæo'Čų‡ü(q…B.ds#ä|ō.„§EŅĻGČų„ƒ7˜E،ķ1˜f‘Á(gtc6ds#äxÁ˜.2äG28`ģ/ÅS03Ė OdšfŦŸđ‚zõø@a A˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ለˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†HČä^#įTr:ĸčÆGĪįĸ>OžEŅuäˆßŲ#0Œd<˜Čų0‹ĸčĄFhÆaĖ#ˆē.‹Ŗt]fp\¸/ōa‘0†Ā2=ˆ&9!zü^ėÄ3á!ČX#rÜÐmƒŽ@đĘr„rXJ7r$åA˛g8äėÎS˜sŽqĪd<Ę8ÂNHHÛÃTOifĄ!SVbåņ´+ r ãžÉŲėH°C\sŽCˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÂ $?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø~jô:’ˆˆšBБhNÂBɂ„""P„DDDC D1øƄDDCˆ0‰D"v)Xē1‘ō>o<Œd|ŸČųŧō8‹ŖL†fˆģ=QtqœG#`äųŧō.‹ŖLŪGĖ##įōGÉĨƒ¤„A Pƒ žÂßÂåĮ“Â";˙@ŋ‚ņ-‹ˆĸ8ˆˆˆˆˆˆˆˆÉ?+ŦĸčČøK˙˙˙˙˙˙˙˙˙˙˙ũ‡ DplÂ8‘sļŋđ˙††ū ßūĒ-a„,Ņá ĢđąÃ˙øP߄?â ëĨđŽ– ˙˙˙˙˙˙˙˙˙˙˙øŒ(XAo‡ũ~/‡$å<"(æuXXRoÁ>d9đ–ˆƒáÁ‡ Æ ˙˙üD(Ãԁq] ?H(… 8„ŋ˙˙˙˙˙˙˙˙˙˙áu†v:8‚˙¯…ü.ü)ä#ígi@ĀžŦ( BaˆˆˆˆˆÛqC™Č$!Č#đĖEÃ9q”"čē8ŒfũŽ‚ ÎЋČ$ ?˙˙˙˙˙˙˙ü8’rāįđJø@ŅĮ8įã‘xŧ5œsÁH/ $ÁžėÎS”ä2āˇ0ä\‰ÁPLsŽNĖåšܐįã’rđ¸8įãœsŽx/ rœĘƒŲ.&9œDDDDDDDDI"""#č0äÃ%ˆŸ'1ab""4"#‰Ú¤hDĩ‹™ˆ\w‘ŽūĄÄD8ˆˆˆˆˆˆˆˆˆˆĐ‰* rFIsVG‹„/ €n\2Aœ‘ķA—Eâ9‘Å#æĖŽdxÆn.‹ĸFa8a'˙˙˙˙˙˙˙˙˙˙˙˙˙øPƒö‚Kŧ0øx|< °ūvāÜšmˆ‰Ŧ!)ĖĒfáPE8Z 6ü&‚_˙đšŲ *ņDB_˙˙˙˙˙˙˙ūá‡ņø_…˙ėp÷† Ęë( Â…w„ˆ•‡A|8PøU‡ÎÆūļÃf‘Ø˙˙˙˙˙˙˙˙Æ 6 0Öá ų Ãđī #ŪdjŸHAđŲ -pž@ŧ/×ū+ˆK˙˙˙˙˙˙ū(1ŽA‚ųs9n$(x\/×Â+­d|@‚ņeĀđÔ.šÃXĀ ĄĻG ĸč¸!Ä`Ŧņf.Œdē.ˇ-ž? –‡˙˙˙˙˙˙˙ūá˜9Ā­ÄDDƒ+’˜â$Á]ÉCc,ˆän"""""""""1™A¤-#qŲĄ ™ °Bg-Č÷†6đÁFŪJxDL#˛ŧ˜EŅÄz1šPĐG‘ō9eãy0Ž2ēÔd|%˙˙˙˙˙˙˙˙˙˙ü&ęÇ*AŠđīņ*ã#,DDDDXađÂÇøK+A™ë NH† ˙˙˙˙˙ūßį|øX\?â! @ƒū°ųŪĨđđø_Ęë(ēà ˙˙˙˙˙øu…đĸņ†! °˛ '؇…øđE8H ˙˙˙˙˙ūu˙ ņđžaoū‡ë ŋ˙˙˙˙˙Doé °üûÆ„‚Ãã ,y+„EAÃõ⊈ ƒ˙˙˙˙ü/ aäÃ*9{ >(! ė%ŽDr*æ PG(z† dBA˙˙˙˙ũž$‡! sv˜.^#ÅāCÜ a„ŋ† NS˜qJrÜDF/ˆ`‡˙˙˙˙˙*Ã9!ņL9 ›GōēĘ/đ`ŧȤ5dQÄH}ˆ‡˙—˙˙˙˙ãY’fDƒ‡üa!~ķ$ "CVÅá|,2œ/˙˙˙˙ Ĩ~‹„?ㄇöŽx0C=˙˙˙˙Xˆ]|ˆ?ØPáū3)ā˙˙˙đ˙á„A~°Ą|$(/˙˙˙ ‡ü™N Ãõ†0A˙˙˙ đT øp˙ˆH˙˙‡ázĘéKđĄÃŪ—˙˙˙‡ đ@„/ ūR § ˙˙˙‡øzÂA —ė8pˇˆ˙ūdIđĢúĘëFe<…/x>_˙˙˙áázB^…‡XP@„/˙˙ü?˙‚Øpũø†˙˙ü* =y‘𗇇Âßŋ˙˙đ°ŋ^ ö8{ÂGÁ /˙˙˙‡AB…Ŧ>đŋīÄB˙˙˙˙ü##āÃđ˙„ˆū_˙˙˙ õ†`‡Ã…đÂ@‚˙˙˙á~đņ áu† C˙˙˙ü>ņČø_˙ŦŽ´b_˙˙ū/e<%ü,8wŽ_˙˙˙ų1VWZ÷˙æE'ø‚˙˙˙ü,%īÁ/˙ îŧG˙˙˙ūŋæHÁ˙‡ũ­á˙˙˙‡‡Ęénç ‚<—+­fHČ˙˙˙˙˙øpžžđÂ˙āˆŖÃ´Ņ!߈K˙˙˙˙âC †@1`JB8Lā˄.2č¸!Ä^0Œgķē.Œg¨xC!’8ˆˆŪGČųŒdpæ K`Éî""""""""""""""""""?#á˙æJq"ā‹ĩ”TŖ#Vd0Č)™ ™,WR¸Č”@™(ĘŧūCĪFã‘ō>GČų„]—ĀCá ā`Žb#†Yp…ČĀ„p¤s6.‚‚89#ŠGČų„c0‹ŖaEŅŅŒ&Âü"„ƒ‡đ‚ Paâ""""""#ƒBÄDcĖ„ŋ˙˙˙˙˙˙đ”3ô†,. ĩ†Á<0ŋm‡;Ņøađī ÷_^${˙˙˙˙˙˙ū û…]>Gå¸ ŧ' pŧīđƃ/Ç÷ ēųs°‰ėPŽJŋ?˙˙˙˙˙˙˙ū€ņÃ~…Ä ūˆ…X@úÂüd‡+Đ~ûÖ.ędŒ%˙˙˙˙˙˙˙ü‡†cŗ€["8rčÁ„2|ķē.Üc#ä|Žo5˜"ë:ÄqHų#ä|C7˜F.‹ĸņ#æŒō1e،‘ō>GÍäs1Ė#ˆÆG28‡qИËĸņ‹ŖŲ#äpR!†He—. —Gų˜aOæķšō9›ōGÍë¯õīˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˛āLx‘đŋūdæŦ‡ĄTbŠ ¤m™“âA“ƒAiĪÅqā­" 9XS•‚\V‚œ§7Äėöx*9ėün)Ęr°Ŧ+ ãÁXVåL§)Ęrœ§)Ęrœ¨<ŗŽr â*ƒA’Č!)—™!Ä´„ÁIĐŠ•3yā§* 9Px/ rœĐSÕr$ä3¸ xgáĨn@đ7” 9‡< œŨ°A Ą’€ũ…›7ŋØ|DDqˆˆŒ!ߐ¤Æ8ˆˆˆˆˆˆÎ:Ĩ8šØņ ÎŌB"""""õC˙˙˙˙˙˙˙˙˙˙¸7áõ)Øaü0Ąü"(øp÷č"NS‡ ia_ÂGŧ<%ņ#áÄ-„ŧ. @‡ũúÂā‚ëčĮū¨ A…˙˙˙˙˙˙˙˙˙˙˙˙ — pø^!úƒöPĘK;+āƒÂü!ö đ—¯÷%đĄ°÷ Ū°ø@˜0ĖS‡Z_\؈…˙˙˙˙˙˙˙˙˙˙øū† BÂ˙¯ôᥑ€â?īëácŠ’0@ƒ“ˇč,%ū÷Âá{(IĸCđđĢä Ãņà ˙˙˙˙˙˙˙˙˙˙Æ`5K‚Š’8*ĸã’r܈9Į!G!‡.'’‚2>GČä]sy#æō?šĸŸ#đĪ"FaČų ō>GĪ#ˆâ:#4Rfō>o#ę`ėÆaEƒČ֋ĸč¸` Čä\ē.‹āŽG …â9˜är ˜#LŲ›Âš#øŧb0ĄŪP˙…™æu•Öa wâ"""""""""""""""""""""""""""""""""""AĮ­‚""""#@„/˙˙ķ ’+#Ø2ÆĖ¤m™“ Ķ!čA(8dĶ”å9/&rcœrcœsÁXS’đWķŽx.9sÁNA üS”åqĮ8įãœsŽ~*9Į8įÎaĪVV…ĖŦ0ÂNZACn œ“‘6Hq&*`ÎŦžĨj~. ęCqČQɎg)Ër$8äĮ"Ž$ đ@đÚr!’Ŗ‘`§)Ęãņ|n?ü õđ‚ßÃōQaˆ‡„""""0„DDDDDDDDDDDDDDq頃øØ…ˆqŲxˆˆˆˆˆęXI[˜0ŽĀĄrēĘÂ˙˙˙˙˙˙˙˙˙˙õ/JĄø]ôFđŧ7ÃĒ…‡ ¯„=&8÷áø—FGÂP…xAB‡Â|8_á‚‚#ÔC!˙ę8…˙˙˙˙˙˙˙˙˙˙ņđ@‚˜›˙Ƈ˙xr{K4 <>ˆqũkÂÜAę”î ü ézü,/ČŖÂ„Ŗü)Œ0‘đõ+Ŧ @ƒ ˙˙˙˙˙˙˙˙˙˙˙đAEá…û„‡Âî!pūđ°âÄ-˙|âÂ_@ģá°_ ¯ đē|>Á5˙øˆ…˙˙˙˙˙˙˙˙˙ū#™)â#Áp<2ˁášuœˆųˆāäpØ^#æxŲã_†v%˜Ž¨öNdxēĪ`Ļō>b7Į˜GÄ]f0ĻŒÂ.Ž"čäGĖ"čē/"=ČņpÎ\eŲq—\6ō85YŒįŒ˜ˆųūĖd|‘ō>yEČ)ĸ8Ž#äq k˙ \Č< ÂÄDDHøaūm ĐEŪĄ#"Á‚ZhöOfqŧ› āg8ĘŽĖō.!.3Œē0ftc#™#Į‚‘㑆c1ō>l‹ÄpåŲt^#ä|Â.‹Ŗ$"čē.Œ„]G@`‹=¨î"ž;2ŽąšD¤Č)4]  æ2>`äp<2‹ĸč¸9x‘Ã4‘ō9g˙Xa‡Do’rž$‚/Pˆqâ""2cŒDDDDDDDDDDDDDEäaĮ…DDDDDI¤Bãąâvˆˆ>"˙˙˙˙˙˙˙˙˙đAo„32B:ü*›D‡uá˙øđ˙0Ąt ÃaQs?˙ „B†œtÂÃīÃÃ˙˙˙˙˙˙˙˙˙˙˙đūÃâ*Â"ûáAĮę‡^ŋū.§uŠ^ÁD㯎nˆƒ…î+ ‘ xøK˙˙˙˙˙˙˙˙˙ž<Ä ū!bŋ˙ōœ Bß×Ä/ĪŗąŅB9uˆųđŅ&?đŧ“áuø4Îé‘úō@BáČå˙ŋ ŋ˙˙˙˙˙˙˙˙˙˙˙ÃĄ„##(.\eâ8dÉpË#ƒÄ]Fē.ˆÁō9‘ķXfÁžČų'ōá‚8h#ƒAxŽ D|Ž ælÁNČņv]"89fōÄ% Č ¨ V9Į% Á1Éa ɎqÎŦ†É8‰´9 ãĐ9CŽEƒ[–ä § p9 œå9NDã’r 䜂˜įãœsAœˆ98.9â""""""""""""""""""""""#†˙˙˙˙˙˙˙˙˙˙˙˙˙øy—Ž""&Eâ eVaƒˆŒ!fŲ’hŠŒ¸Ë†Âą,fō|’#1ķ ‚‰dDGeŦŽk>/…ŋÂũŦDŽ hˆˆˆ‹„,w_ ˙˙˙˙˙…^ƒÃøpč ¤3íe80G‹ĸã˙à ŋ…đđĄ`”Ž´áИ7.ũÁ˙˙˙˙˙ï|,/ŪĪ´–$n?āďŽÃØ‚Rħ _sІ#÷˙˙˙˙ũÃß˙đäœL8Æë¸\…đ´Ɓq.Āž!…˙˙˙˙˙Ø_  CFÅ>d=z_áÁC‘G>Ë~cČ˙˙˙˙˙ūdT>¤ … „#Ž8aCOŅV[••đĄ˙˙˙˙˙x\§ åŲrŌ!†Âčē.$?÷đABáķĀÜŧG,+8¸Bá˛>ĩ˙˙˙˙˙˙‡ÂÄÐî"8q0â[‚!pĒŽ˙c‚$3Ĩ⁠œ!Ų[•Éq˙˙˙˙ø B$>û&Ôķ-2>ø‘7]/ąŋ¨‘ü0ŋ˙˙˙ÃČgØLƒėŦ(^¸K¨Y`aImOø@„˙˙đž# x~R đáoá ŋ˙˙áÔGČāä|‘ķG Ëĸã.0Dp¤xĐĖ‚čē.‹˛č¸Bč¸ËÄ|ÍæĖō.ËŖŧÜ]F ˜Eâ<]F"č¸`ŽGŽfãÁ #ˆšĖđg.!ŗ0˄=ŸČųŧžD›ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ė"tˆˆ‡ˆˆˆˆūDDDDDDDDDDDaˆˆˆˆˆˆ‡…‚ đ›40Ü/˙˙Ö˙˙˙˙˙˙ôĄ†=ÎęĄ˙Âūá…˙öü=˙˙õ ˙˙˙˙˙˙÷¸V.˙øzđA~BŸpÜ>˙đû?„ŋ˙˙˙˙˙ú°â“Â˙˙áx B"ŗ8aN))9‚0š ØlD c#†Yr#™ŧ‘Ä9Ė%$a|čŠÄ]ųŧ‘ō>n1‘ō|Čų7žŒ##ä|‘ō<]EãÆG‘ō>GČņt`Čų#įžlR>aG‹ĸᰏ‘âčģ.ËÄq €ZĐx#sx+ rœ¨<åAüđS”åqœŠ”åtÍČūB×ÖeĻ‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‹%2Đ)€Į/Rä(™eÉ$&,s™PāÎsŽl)ĘA˜r-’r ä˜æ‚pAˇ)ĘrC™Č.åš9œ§.Ŗ“ã’rœ¨8įđ^ŗŲøŠ”än^ ãžÎ9V…a[,1aÖĖš™Bå ­IÁN^ėĐqÎ9;8įãœsŽqÎ9Į!܆@4Ž@đĖ‹2@Č5šPCLrcŸĨr\â˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĖŽ ˛Nú æ đņÄG""""".""""."""""""#Ž.!ÄDDDDDDDDČÄ'ĸB"#Xˆ A„JpĐ?`ĐA ŒÛN˙˙ávđ@ƒ ˙˙˙˙˙˙˙ú}‡ĐųÔ ˙ ,-|%_˙đà o˙Ž"!˙˙˙˙˙˙„: ē…„ …ũʁ EøaøY\—0Œ‚i‘Î?A ’ Cđ˙∰'đ‚‡ã†˙˙˙˙˙˙˙˙Į5˙A˙˙ X"#ūxp¨2¤ᅆA`ķŲ%EēSĒ8Ą3MķžČų.ŗ#ä|Yŧō)ō‘ˆųä{0‹ĸčâ$gķzÂávĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡āüDDDDDDDDDDDDDDDDDDDDDDKq`rNCŽCc‘šãœsüĀ0G €Ė.FŽf¤¸ËŒšÁŦē. #Ž€.GĐā‚˙ōāS”äN+ 98#Ą#•…špqĪô+ AåaPqÎ9ėŸÎ9œ§-ÉqÉÁnD‡rr#‘ Öä ÁCĖrČ/ã’rāüG…áNSš r œæŗŽ{8įŗŲėöx0į™Aā§.eÖ\ÉPŦ)ÉqĪanW Đ 3ųā§+B ãœrcžÎ8”å9|qĖåšÂC‘G<Š9s9!Č08ˆˆˆˆˆˆˆˆˆˆˆ‹+’˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûø^„E„""„DDq5Gj"ˆˆˆˆˆˆˆqw„""""""""""'ƒ"""" !ČōW"ã;‰ƒ2 ŽĀģÆÂké¸_˙áaa-…Ļ9 ˙˙˙˙˙˙˙û„. …˙RãŽP‰?‡år[ (3Ø&rÍ To Ã˙ąA \JuûC˙˙˙˙˙˙˙ˆ‚Pn˙ú.J†ÚN‚…ĻWYBGũÂ\īPxO…˙Âõĸ7,8t0@ƒ ˙˙˙˙˙˙˙ú#5ü?û‡đI‰OÂla(ũ…†u_ūĻ™Κ1š#ĸ ā‚Šái=˙˙˙˙˙˙˙˙ņ†`ä Ž Ŗ“!§!§-Ęrœ§)Ër\S r,M™0]˜ÂEŅpÄ2>G"ņ0‹ĸč¸Ëĸčē.Ž"čē1‘ķ#ŠG2<]EŅt^7EҌ‘ō>GČų#™#ä|‘ô€ ŽEŅpZ÷ä š,šn^ĄnHr#—…šNS–ä‡8äG!āĀâ"$2CPr AnFæ‚Cš ÁPAĮ6å9NVCŲĢ,™NT!¸ãž ƒųāŽ!ÜŦ%LÐ.äH-Ė9')ČNCÁ‡8â""""""""""""""""""""""""""""""""""(%‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙æÚD[<ŧw¨`ė@s˛qģIâ""""""#´""""""""f„DNōl'’”v†T“…đ‚†z$?Dē‡Ļx_O2˙˙˙˙˙˙ÕXpŅŅ!ÎSŖ#æš.dqHņuApAxˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÉ‡K˙ōn'™ G˛3‘˜F2Ũj2TŒ§š"_?•qtqČųäc#ä|‘ķyüūo0‹Ŗ¸ÆyGƒ4F™äq‚0Œf×#ä|Ūn*c.Fˆē1˜›0D|ŲÃ0d|Äb#ÅÂEŅČų Ŗ4i‘üē0˛ĖÔî"""""""""""""""""""""!&ˆˆˆˆˆˆˆˆˆˆ‡˙˙‰R:„Eˆ ^GáƒPē§†˙˙ė„$(TJWūØ!˙˙đaü%đâG¡‡Áˆ@ĻDA…˙˙āøPÄ ÁˆJÚh,!˙˙ĮÄcÁáá/˙á…Įę‚˙´M3Žĸ)á…˙H —`„/íč*] ‚_û°CđA EÖ ø‡ũđAq ‚_ ¤‚ŗŽ/ûá…‚ÁŲĮŒ÷†ūvD₠E.…ū0H7=ūũ ŒčtÁtKü+4ŧ‚1˙â"‚€ā.!˙ņ đ—ø—JP@ą Žôü$ÁaPEЈ2!@‚EĶA/ũÄB‰‘ Aü€āÚdB /üvqÔ.?‡Aá&0ŋī kō>$ā˙jÃņ28_ûC 4üO`ƒ 0°—ū‚ PŲĮ˙H,8b?Ȅ] 4˙m0ÃA~">dt q`ŋ´ ´Î: ˙ˆ‡™˙üp¸ BĐH#.˜ Â˙ÄD$€ā.Œˆ„?ū$ā˙č ”E‚ž@p X Aú0ŋüYĮPĨÖ?㠌p“_č"é "Á|€ā‘ü"é_ø‹8ę@p ‡đƒg€:0ŋų ÖÎ:Č.ʡĮü딤 2…„‚1Áhe*D}‚ /˙Ņyle ö¤^"Áũ Ū2Ę5‘ķ ā•DHS™4I:ƒpÂ˙ü2C¡•ÁAD ƒkäÄ]Âg˙˙Oøž‚ (}áŗŽŋ˙û_áca„‘Ŧ?†$˙˙ BōĐYŨųpaAŽh*iđ`‡˙˙Ŋ-ÁËH`/ø B(rĐŦ –a „ũœu˙˙áK@Ār9i`4~‚ANŌõ- rÍ3\ |!A˙úa4CãøfA ”/ ^C2aü&˙˙é"8@Á,į  íPJär“ä80ü0„%˙˙˙Š2āFíÍ .ĐK˙˙˙˙˙˙˙˙˙˙˙˙˙}~@đ!đü)đ<…íō<ņ"#ƒV…yHāøđOBāÃá „/ĮŦä7“•đS”änT œ§-ËrÜÙĖ8[C@bCXü>Hq ×& 8D4ˆŽLsņXTâĻS”å˧)Ęs ˙ vŋ œpA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õkxAŒ÷"" Јˆâ"#ęD ĀâAŖĩ‰ųæ]<ˑ.‹‚ņ Ā.G]"!ÄEÄDCëøAëøl,$â"""""""""""""""""""""""""# !…˙ōCČ ŧ)9‰i™PBÁ|tå„/ŠrcČG hTʂ`Ļ&`gVbd*=˜!“.[‘Á'!°rNC 4‡!Ŧ9‡+ ‚9 ‘GæZ @‡ŗ•H‰Ô;2Ū"ãN$ŧ$ņˆ“% šE2ŗ0™”R2&ÅȤĨÎ# ÚãũhAȔJĸ5Ą p\•Â" Â!Q\xé*Á˙˙˙˙˙˙˙˙˙˙˙˙˙ę_ÃÄõų‚ ÛËPßžœPdXĪPt@Ų€f‡°†b˙˙ü'_­… &0ž }Âõņ…×Jœ?ü }†l5¸uáū¯ā°ŋ‡„ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũu¯†˙ĩ õ áÂ"?Đ~!›Šī đŋÂ˙ āŋđú!ŋđŋ˙Öáëãá3g‰.…Ã˙_ā°ĻXú¸Wg˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øKū˙Âü?P˛L$/ÃŽßx~˙đ°˙aäo ˙ę‚ / ŋáGČä`4åÁtCUĘáCˆŲÂ"AAÄFG˛S„]F‘ķ#ÅŅtc#™Čų„]‹ĸã.Œ菑ō>GČæa “á͆Q0 ˑ. †A€Îr#Å.ŒØ&Aį‘ˆâ.Gō9‹¨`ĻAÂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆ<Į xŽaÄDDDDDDDDDDDDDDD…DDH+ÁĮc‰1Č8â""""""""""""""""""""""""""""""1?,P¨0!12 Î,$Ģ ˆ FÍO$ƐÐŖžcÎ91Î9cŗ%ÄAÉanCŽCAR rÜÐØsÁx\rPqĪg đT r°§*e9NWsI9Ō ˛ !†O–\ÚJÂ@ށƒá‚Tf ”°`Õ å‚åCAƒ´^2‘L|Āe°’r€…Č}ŒÂļqÁ˙˙˙˙˙˙˙…ŋˆ8J& Á]ĘrœÂüiÄa^Éáč Â×ėã"#‰ŧq;Y H~|;5Mq Įë˙˙˙˙˙˙Ä4.™<ČH6áw !BábÁCøX\5ˁ!‡x~ÃĖĒH A˙˙˙˙˙Đa X0‚Įl0[ûC ô †A8Īáa›zšX\-c˙˙˙˙˙樄81KŪÃX~‚ČՅÂūˆ˙˙˙Đ0YŪ…Ã“Œ'‡™j‹ A{xAøk ļŋ˙˙˙ūÂᨠŊđũÁ˙˙˙ūü%Ë Aáü.-˙˙ũü,aŧ,ʤ‚˙Ãõ†í ˙˙˙ëá /ĐA/ÂQA˙˙×Â×p@„_øp¸~˙˙˙˙ÂøX°_ׇęeRA ˙˙˙ũáÂáøū7öx ˙˙˙ßá,-úŦ?ņ˙˙˙÷xPøy•Iõ^ Ú˙˙˙ü=áč —÷á¯c…˙˙˙õ…đ¨Ę¤‚ŊáÂáŪ?˙˙õ¯đ¨K AxPŪ‚×˙˙˙ëõ ŋŧ(|/˙˙˙Xpljt/ī ¸X M˙˙ūŋ* ŋŧ8|ŒÛÂņ˙˙˙˙áa!š˜n%Đ ŋŦ/ËnIÁk˙˙˙ũáü…“đTš@K ŋđ‰ĩG ˇ5°Ä㉈ḏ˙˙˙˙Š-Pɰāŧ"ē¤\ĸ>ĖĩEĐ žEVä\Lˇ 8erËšģ ļŋ˙˙˙˙ÂÂG8E¸Ų‘ÁV\H2ˏ j Á ę|ˇDpÖĘéâā­å@A˙˙˙˙˙ü:ųIB åž™3˛Ķ; dphŦ‘ ŧpŋ-ķЈ8h†3‰ >öbˆä#‰ņ°āáŖœrk‹™TA˙˙˙˙˙˙˙˙ōš ›8äĻ\(QEüH>ÍDH7ˆĐ\1 .Ŧ%Į…‹Ž”q PėƒmÔ'!Ļ9Õi9ĩ0ûė" g!Š#;åĐ ŋ˙˙˙˙˙˙˙đč/×ä šJ€Qć(!˛ Ōl6p¸‰9TZũ^°Ah‚ ū@Ŧr`Čx1đųÁC’‘0ķ*˙˙˙˙˙˙˙ūôM#"büArÂĮɎCQĮ0§ų; °æ…pŧē ČX4đTDĖܯP¸G@Ô#…‡áß%Āķņk˙˙˙˙˙˙˙ü?d Ķbü†ČÉ4\0G!t Ų'#€Ģ2Š ŋ]PË#†XZ|ČDuĖ2čē/G‘Äkeâ8Sqr#†šp<ŒdpT#ƒ1†c0F]EÄ0‹Ŗ[.‹Ä|‘ō>G"čÆGČųKĘ|—F3Ë< ˆ(Ŋöuˆ… A4΃QŲR…â/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â"""""""""""""""""""""""""""""""""""$AÎ;#Ä!ō†[<œ‡‚¸äH$嚇 Ú9'!Ž91Î9Į$änC$\ƒ\'rãđqɎN ‚,˛NTĘANS•…PãœsA8*ŗSmįT5œŦ˛äø§)ËÂ88äG0įüVnæ˛#”ä‡3’ãœsŲĮ8įãœr h)Í1‚œˇ*9ė˜3A ã’‚(䜧0䜨<å9‡%…áPLsŽEƒq‡!–â"E ã`r|S”äŦ†‡‚ČŊp@˜/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūedüžÖĸ!ŒD4Lˆˆ„v )Ô""PČÜ"""""""""""9ßĐÉIŽ/ˆ¸ˆˆˆˆˆˆ°„DDDAŅq""""#""#B""'€ō3EÖ"""â"/la|=‘7uođĄ@΍ú ;ˆŒīŽ’%˙˙˙˙˙˙˙˙˙˙ôj & ?„ÃXTšŋ„RŸ…øPūÂķ~ž‚ū¨0ਆAÁu§á†K‚恋‡ áđ‚ Q€Xáö#˙˙˙˙˙˙˙˙˙˙…„J’XYN)Ø ĢDĸpŠŠŦĐŽö,:_… ~‚đķP*pˆ ˜™j‹ A~ĐIȸzÎĘCö ‚ °Ūv;†‹ 8å$C8`°Ęęž×˙˙˙˙˙˙˙˙˙˙˙˙øv8L0œ$N 0A§]{ũ0ƒŌ‡á9.pŋڅå%čˆ8pąA~œ:Đ_Đx_Ûá“ä|”čÍF"á ĸčāĖEŅÁ˜LdpÁpUYˆē.”¸j'ČæG|ŧGČų„]">GČņv]V]EҌ˜EŅtc#ä8‹ĸčÆ×ūƒ§øÂ‚?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„"""""$‡ųt/$ä3šņČ1Î9Į8ä ā†w!ÉŽCš.9…A!ܧ!āˇ!˜âAl‡ ĀärPBÁpJeЋQāĐTʃŽi˜ Š•Įá›vBhD"•YIÎ\š›ŠA\{<ĄNT ÉANS‘ Úe9pCš LrG!˛ r˛p@ÉÁNAģ’˜ä‚PIČ`rdĮ8äĮ$æ‚ā–ŽHrpS’‚Č܍ČlG ã+ƒÁ=Ę…īĩ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙вFj¨.k" Ѓ!‚"!Ähę Ž ‘CˆĢ2%œ‰B""#ˆˆˆˆˆ.!Pb#B""â!Ø!ÄDDDY†Đ‡B âj„4!–ልˆˆ0„AĄ Ɉ2c„uHa|P_+…öKAāƒÂN,>Ÿ{L'ápOo˙< ˙…”đ@‡˙˙˙˙˙˙˙˙˙˙˙˙˙ũ+ށB ÂHŋ­~A¯øDG ųkÃü˙ŋ ō÷„Ąâ<-n ‚‡ îúÃ0°ļž‡Ã¯˙˙ŽÁ…˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü‰ "(ã›8f´ˆ%˜ŸŠ -Á,œúđ¸A„ ŠÎ§ …1a_ :žäoÃũ•Bá,ą ŧxUâąņ @áC˙P‡ u‚Âëĩ( xhūtč/Đ áđĢō÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„š ?øAkáp˙ÃÕū œ ēđ°—_ø' ~ Â˙Ä/õáuÂëūŧŠg‘C.ŠŒŽdpš€k/ø[#0#ƒÃ0‹ĸčã1‘ō>AėÜ]gķW¯Ã ×⟠/đ÷ũ™j˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øˆfÔ Ėá &\ ĖiāåĀđ×°^C-Ƹä2YČ Ž"""C$āŧ)Č5ÁsŽqĪšXS•†ĐqÎŦÂä ‚ †U12ĩ&9ė…ŗ9Xh!0Ŧ)ʂPx-Ęrœ§+ dˆÅšÄˆd† ĸƒŲĮÎFæÎC’‚ $2āÍä(ä ņÅ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á˜4 †t(‚DœUĘ.tЏ“ŠH‰D8Џ“ŠH‰2/+ø/DDDCB"""„'Ŗ¤$:‡"Q qPx͡C!ŒÉ 0‰Š)„C0ŸAü ũ}øÃ˙ מrãčŪ ũ*^Ŧ`ŋ‚^… đ–˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙A'īép°ŋđđéü<øa ø@ˇá/tF˙âÃLŅü2Ĩ­úƒØ~ŋÃÃđ¯…õx„ē!Á}ŸĐä”˙Ô _øKA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áy,ƒûü˛ ÃÂ˙ũü?‡#y*üĀȏ iBšĩŲŌJX‘^AáBÍŋđʖ°—l? ü/ü?å ”&B€ü(_ (!Âū2Ŧ(pC  ‘€ųNąđž˙˙˙˙˙˙˙˙˙˙˙˙˙˙øPõŋ ׯō0˙‡øA-‘G p°ŋüA`ŋ ˙˙Â˙˙ÉÃ+].R|ŠÂ!GÂū—ãÁh ĩ¯Ãų]kĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū!ÄDDDDC#áš\fpÁŽDpĻt]—EŅugt]Sâ=‘õ1˜Gtc a— lBņ9ō>G 2āM"ā¸B""$58I#ƒ!p/\‘] †""""""""""""""""""""""C$$sŽ@đ$‚øđaÎ9āŠ–œđKĪÅA>.9¸ÎTgŗAsŽEœå9Nh%aNS”å9‡!¯ŪqČdw!ąČd`â"#öŋ˙˙˙˙˙˙˙˙˙˙˙˙ü"dÆA¨Ys ´˛fVbfHef&edȡQj Ģ13 <×)&Ŋ""â""â"!ÄDDDqq  "аÁÔ9 0w¤UCĐ#sŦRDĒ)"'b‚ûÂûũđ˙č?ˆ2pPU‡áp‚ /õ˙AĩÃ˙˙˙˙˙˙˙˙˙˙˙˙˙ū\?ūđīų ‹_Ãđ˙č ápA‚ đŋ‡—@‚áđ˙Âū¸x~ü† &E0o˙`ŋ ƒ"ėD4ę/ øĩ˙˙˙˙˙˙˙˙˙˙˙˙ū6Ũ˙ũū‡^fˆ"îpe ˙pģ D ø0A™@L%†ķ*’ ė0ÉE˙øa ô#GūĮÅđŋã˙˙˙˙˙˙˙˙˙˙ølh%˙ÖgTŅĖ/ë6EÁW˙˙ޏAūbû6‚ų 9$~"""?Ép<7˙á aū˙˙˙˙˙˙˙˙˙ž"=qD28j<¸6!u ™p<Œ#Čá°ŧGÔĀ8ËÄs<Š—ÃADžLfŽĖEŅr0Â.2äGČņv\ˆām˛8*„2č¸l#ĀđÜĀe—ÁLē8”Á‘‘Á@ Čāxk (b>"""""""""""""""""""""""C$܄‚9'. åšr  pâ"""""""#„d@‚˙˙˙˙ų1bcFArŌ… ÉBF °…9N\ĘÂC‘§)Č.¤‡'Bœ‚đh"ŽLsAĮ!ˆ3˜sŽE˛S*‡NV2ۈ0”DD3*˜,Ō6†(#Ã.A—2C!„ū×Ãį\"c“f ,$¸ˆˆˆ‰@mD‰ŒDDDDDD4"">˙ ˙ø ŋ˙˙˙˙˙˙˙˙˙üĐ2Ų1Î8Œ"jĖLĘÃųîDV?Pü?ŽūŦ1⁸á N áÃūCČ`ŠīđŋĨČÚ.‚æ?˙˙˙˙˙˙˙˙˙Ŗä*sqOˆˆ\9”HāQđđûæ°Xáč A~âCBĄãœx”āÔxŲ@ŧ/ōƒ¨ų­ĐøX˙˙˙˙˙˙˙đ˛ +Če-ÆĻ¤?¯ÂâBŒę\ nc˙Č1¸ pá•Čk/Ãđų aͧcũ/˙˙˙˙˙˙˙Á>BîbC:!BČH5ŋÂÃē x=œŋÄG˙'ŊF¨S•CœūbeL ōRVü‚ d+‰¨UĖĒF?˙˙˙˙˙˙˙˙üNŌā‚"""<†Ī<…–¤ Čc  !“D&9ÅfÃ)ũ/‡ĖĩFŖ‘$ˇW"pb$@aŠFOÂp„ĢOÄ˙˙˙˙˙ūJ'PTÆŨOFļCZĪK‰@eėĀA‘Čē.Ÿ˜đ¸A# Phëˆâ!d”ĩ:āb( A˙˙˙˙ûH"ŧ ė ųØåLH*žÃ?Č*î|xoC–|Į˙˙˙˙ø0AūAŖbÕäyôÁ‚ k ĀįÚÍôAVĪėFÁ˙˙˙˙ãĶȲ¯ō  øü?‰6ŧ‡“á‰t/˙˙˙ūņ||&ŋ×đũ˙˙˙áuîũÖŧK A˙˙øÁká˙A˙˙˙jžX‚ áéßà B_˙˙˙˙æU$…Ūŋ A˙˙đúWđƒÂ_˙đø˙˙˙ūëđŗÂûü?˙˙˙_×˙á÷˙Ė˙˙˙Ūŋ˙…Ö˙ã˙˙úÃõūcŋúü?˙˙˙˙ …˙üĮ˙˙˙˙˙ũpúü?˙˙ü/ü ÃĖwũ˙…˙˙˙ü úūxødŲ\˙ ,Į˙˙˙ų6Đ˙ũ*åš 0G ˙‡ˆ˙˙˙ū[’Ā€žB‹˙1ß-ÅŲpdū@†ã„(/˙˙˙ōÜl üƒcs˙AáHú$\Īū˙˙˙ũa‘<"Č5‘û<7r"åôđN$Á?⠁ū?˙˙˙˙A@¯ų|A˜đ„Įá,ƒ–BūDaVÄr.!ČāF@–M†?2N@‚˙˙˙˙˙˙ÖNL—ü/^C(s8ˆ‡\ļMŦ3ū#Â˙ ¸Šä.%-Õ ģüĮ˙˙˙˙˙ūˆā?ūAą ¤ō‹ˆ–áOĮ xp˙]ƒÅōNCUtKyáŽc˙˙˙˙˙ũaáđĄ~$íq §#)1õĸ85ôø_˙Ę Å˙Č̜ƒŽ-ũ‚˙˙˙˙˙˙ÖxæķAĮÞų3ĶČaʑ îA–3â^x_ŦDž0 Q^KŖ›Ä”’ˆhH5•5Â2N˙˙˙˙˙˙ūAđũųĐ5÷„$€ŅČfŽy)‰´?Ø/ ŪO‘ūĘĻj3Č莈ÆO‘ķyō+Y0ŒfÄr H™€ÁĪ#ˆžGt]!įō>z2žƒ‹ĸčē5Ŗ"0 ¤r.Dp5béOdxŧGČü3ČŧGČâR<Ü]ۙ7“įT@‘ŅĖAMä|Â.Œd} Î9Į8ä0åš!ÉaPqĪA°¨:r įãšgüS•ĮO%âčē/"čĮg">a¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDDDDDDDDDDDDDDDDDDDDDDDDDDD‚ß ÎS–åAāDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGæ?'AÍB|KŠr܆x"ŽIČ܁āXänSqÎ9;8äĮ&9;8įâ äĮ8ÂpaÎ9>"g+ ‚vqĖå9()Č܁āP90Ęr ™ČG ŨËsIĘr –æ–âČhHVσ—!ŖY„!™YÁ}’™IŗĐ¨ ւ9;=ž rClAœ ãœÔ!š0öpgį4ĘrœÃ’ƒŽsœ‚ܧ)Ęr ŸŗÁ{¨Ž!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūŒ'""!ÄDDD8ˆˆ°BC1 ˆâ>EAČäŋܘä Ãáb Јˆˆ†Hsá~ÂđŖė苪‘‚?æķË SĢ5Ĩ°ĢÖ!ņ!ƒD ˙đR8õøŪC4q— €s€ˇ">aEŅq—Eâ>G‹ĸč¸i b80…DDDDDDDDDDDDDD28d†iđĐGŅ€Č ¯1˙˙˙˙˙˙˙úÄDDDDDDDDDHd†Ķãj˛ 4r đk8į‚ĩ?å9POĖæØ^æƒN rœ§*9ā¸8įđTÍā§*Áā„‚pHr#–ä‡ ÄˆũæPC’˜Ŧû"˜‡ &`Ûs¤(ŦÜE2 A3 cB„Ą‚\ Ž"""!ÄEÄD8ˆˆˆŽ"#B!Ä\NąŲ6RD’ â6#Æh¨ˆ‘’ˆ˜ˆ¤ACœˆŠFv&ÉzÁ˙˙˙˙˙˙˙˙˙˙˙˙˙ę0ᯈāáŽTgŠqA Â ˙ūÂû˙đŋ‰ ĄĢŋãá‚OxP˙p°āĒøL&[˙˙Öü?äāŠ-UXY˙˙˙˙˙˙˙˙˙˙˙˙˙ūt_ :ÂõꈃÂ-øu˙˙áō_ü$D40°ŋpp°ŋ„0ĖbA‹æĄč+…¨_đ¸\žČ˙č/˙˙˙˙˙˙˙˙˙˙˙˙˙øauÁ‡…˙ Åá* §čŪŊ˙-ü?ákūÁ~đÃxkđø]ˆ\>E(Pá īđūŽĄ?Â˙áD˙˙˙˙˙˙˙˙˙˙˙˙ūü xPŋ°Ąá5á…ŋDA˙áT? ōáx~O¯] EĐ ŧ29‚ļu2>GĪ pB>G3b˜eŅvD ¸CˁsA˜@ˆmĀf#bŗ#ƒA{=Eâ>Gĸ#æķųäB"!y ōGŽ"čē.‚˜GEĘ€Bá¤]#""""""C><2ĸp$3¸„pÁt]Eā™xEԜ å՞Ė"ë8Ž%9Gr†7›ČáÁ3¸â.Ą‘âčē.!„]Ėds#† Ė GČâEŲÄ]—Eãfa—Kš2čÄĻ‚›‹ŗt`ĖFt]Â1YŒ‘Ä\+_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūņ`āîB9NWļqČ…9NSđC1ČeŽ""""""""""""""""""""""""""""""""""""""""""""#ąÍĄČhÔ§(!u•2œ¨8įŗŽ{$ä<ä Š•‚āäA´,TĀE-ĸiĘĄ¸Đx*9œ§)Ërœ¨8įÎS–æãœsŽqÎ9'0į…ÎS”å9NVĮđ_sŽN ‡ŗŲ>+B į&4MA\ug.CŲ3œÃe˜‚á Qqa(̈H†„Šˆė›)ÒHƒˆÜAÄ#"FJ"b"FAcĩqHÎՇ%Ūd_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙īÂÄqüGDDDDDDDDDDDDDDD\EÄD\D8ˆ‡„"°Ą\0ƒŪÁRũo¯ũáx}ũ‚¯@›Ãxč^.0ø^VāŋaGũĸ7”_Ãá˙ø_Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ˛Ŧ.ø\,/ūÖ2=Hx\ÂÂáęŋ˜ü=Åžô”8x{đĄáų  <„ŊÂO˙˙Ã˙đĢ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ xY?áī øxAWQÁ:Ô=BČ…b~û˙ūđPŋÅađŋ‡ŋUAp]Žā !ü% <§ũP_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡_ü ĄáÂø\(_đ‘!øX%ę! ü7,/ī˙ũ}˙_˙ øfđ§‘t\ ČāäqdpØĨÁ¤¸j—Á¨Ž J^LŊeÂķ`\¸.\3—t`‹Ŗ4qx" ˙ú_ô°ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū""""Hq†cō A8 aČjÁ €ką"A‡#rđ[—2APr nCIÉAäš8ÜsÁPl*dŽLšEĖ`"Œ*mА]9 ä+!Á“ *‡˛cžÎ9ė㒃ŽqÉÔqÎ9Į8ä["9 ô<đCIȁx ×; sŽN܁S”å9PqÉÁ‡8äā¨8įã‘ĐS˜s9r+AD‚C“ŗŽC-Č9 ž?œrp^0˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙›HrxĐČ´dxë`‰ØčD !Č!A„ĸ ÃAˆˆˆ‹ ũ/ÂЈˆˆˆ´9Š„TD ˆ‡"""",ÛW1pcū˙ÖA‚…˙ūđC†\ đŧ/Á{Ė˙˙˙˙˙˙˙˙˙˙˙ü7üÍáCęO" ëđøílPõKÂŅđ×ęhđg•_îpÕB„ÁaŖ´C†‡  āÎ8 Ą¤l ˆáá Á~‚ã˙˙˙˙˙˙˙˙˙˙˙˙˙ũ°aá¸.vHZ‘.axXXX^â0‡5‡ĄC*ÂÂ)åņ"f „yá†<$PaŒ: )˙Ç_ö´+„¸!Xt<î ę˙˙˙˙˙˙˙˙˙˙˙˙ƒ`Û ‚ˆ_…‡HPĄ,…úŦ-P\ ‚ p–?ƒ)^ ŧ(øA"¨öfŽ"čģ8Ŧ¸„r.F"ņ‹ĸčē.!2ˆâ ĻČų6fō|ÂĐ|„x.ĩ…Âģä1˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDDDE—ˆāx9pČPB"""""""""""""""""""CNÄDH,9N"0ú^""E‚ܐäsAŦáŸSyėđTʙHå%ŸŠ™Px+ ãÔx4#ˆ#˜sĀ“Ãˆ<Ä˙˙˙˙˙˙˙˙ūĻ(0Ųöd@‰ ræ&,NXˆˆŪ"#ˆˆˆˆˆˆ¸ˆŧd8.uf!Žô2¨ ‘pįhˌXæ?ü(x~Ŗát ƁkÅ˙˙˙˙˙˙ßĶ^<)ĩ8ᆭÖļD(ķG ŌĐ‚ ^ `ŋ Rŗ˛[PXa‚Œ Ø%—˙˙˙˙˙˙˙|6(PÃđ¤S™#†ĩ•Ō–eđD(铨H3•…ēã2Š žF ŊD1fχÄ(á„8ac˙˙˙˙˙ųü? YԐ˙ȏ.cÖ'ááy'-Ė9s9‡3ãˆ2đ Oã˙˙˙˙˙˙˙÷Į„â"""aĖâ#öPŌųZđđĄōhËá•ØfØ]™ģũ˙˙˙˙˙˙ų&(‰N„čqũ‚Ū˙”áHâÂ+…g‡\G˙˙˙ū¸A| !pÄ2ēÔ|5ŧ/™U_¤ Ā4âA‚üX/˙˙˙ķšĢP B‰áå¸ĄxzĖ“¤i؅ ąūč$?˙˙˙ƒ\†j—ŋ°ĘrŗQä6%z û˙˙˙īČ`Ķ˙Š ü–į˙Á˙˙˙ƇzË AoáøUG˙˙ë˙ōē¤0ŋÂøXpÁ0_˙˙÷đūb‚×˙á„eT?˙˙˙ ˙ëøS*ļ ˙˙ū–áW § ŧ8_øH%˙˙˙÷ÄHūŋø^eV?˙˙ūáŽNV_/īė˙˙ū°á|/Ÿ‡đ×˙˙ĩ˙…ųŒ-<(_ÂH ˙˙˙ü8ø`‡ø˙˙ôŧ/ æIŌ |(ū?˙˙ĶÅđŋ1õáü?˙˙˙ũá ņü8_ķ˙˙ūŧ?˙÷Âū˙˙˙ũpđŧ?Įŋ?ūc˙˙˙ׇđŋûÂū„_˙˙úÅ˙BÁ‡…„ųÄ‚˙˙˙߇†ļ°ĄátNV˙˙øpđ°˙`žvŽ2AøPđŧ$‚˙˙˙đŋøp°ü0C˙…+ °‘…˙˙˙˙ü(ZP°_ī†á^d1 ŋ˙˙˙ũ K<,=B÷Ës\ÂÉ@Œ##‰™ vÖ%×˙˙˙˙˙÷ƒ†8Ge-Á`ģđđ_ x,0Z]˙˙˙˙ūŊéÂ-Å2|ŸÍä|‘ķyE9ō>GČų‹ĸčģ/㑈Â.‹ŖŲüūo) ]a~ÄC#á¤GÂĀštpB>GĖ"āšŒÂo_DēķŲĸΨčˑ„^0 ˜ `„DDHDÆ`. EŅp@Ļō>G‹ĸâČē.ÉÉt]Y>yČų#ä}yfˆē1›Čųĸ.Ą˙ÎŌvc<Œd|F2?…2Ģ1CÄDDDDDDDDDDDDDDDDDDDDDDDDDDDD†@`rVLrÖ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŽ°˙øYh1ΠŪe2PS”ä&G0äĮ3•ÄG!°įØSŌrܨ&9 h.9āƒ+—0ä2䠓1„‚98 ŦåÁ˜äH öLsAsŽzåLĸeP†øY™ˇ # 2 ‘R‰)â%ƒ%€A EŅtq"‘EҚ4ŽŒ‘›Ė"čÄqČųŗ0‹ŒÁ‘ō9Âā°`¸2—ĖfĖę‹ĸ"Ã Đˆˆˆˆˆˆˆˆˆ¸ˆ¸ˆšŌĐŗ”DIįâ""""Ļ°Ã‡ëŦ0áŦDGčDDDFˆˆh­Å*#†TĒF/˙˙˙˙˙˙˙˙˙đú˙ßáIđDAōO\/ pī…ŋė”?đŒ/Ž_ÁA0‡]˙Z…ádģđß˙ķ*âë˙˙˙˙˙˙˙˙˙˙˙˙ß_‡‡˙ +ũa…á/˙゠ūŋáu %˙#oūUD˙˙ûG˙˙˙˙˙˙˙˙˙˙÷r ØMBúÂŌī "a•ũ…đ‘…÷k ĸpËčZûōB ~áü9N_ō-˙úđA˙˙˙˙˙˙˙˙˙˙ŲpÎ]eȎ)#…#…#ƒr.EŅpäx¸2ä|3y7žEƧŒÂ/ō>GČúf0‹˛čē1˜EŅt\B<]*Ÿō""o !įüđ4œŒFōčn=™Ęâ™P{<å9rc›L$91Īgãjdä6ãœsÁūK œ‰28'<nä⎠\sÁxFå9‡8äÁ’ƒŽqÍĮÚÉffŪDDDíT3‘(’ĮFDĸ%›#‚šI(ŅHčȐl) ‡’ÄG293Ņ.Œŗ06d„]fhâä>ßáGøEs8Ž ŋe"*ä ’˙‰˙˙˙˙˙˙˙˙ę@ČŨpáŠūša{˙ä6ÄH`â‚üHw6ÂBÂëË}Ccõ /Čf%ÕQXrœ§,oŲ•XH˙˙˙˙˙˙˙˙áųûôˇåē@Ä.ō6j@☈Ī_ Â^A6 á>VD„[‹8<7ō$šŽ? _˙˙˙˙˙˙ 8KČŧGĮęÇ'ÄAà x˙ †”ņĀÎ\áH7Ô ČlםŦŅ;¯<‹æUČ/˙˙˙˙˙˙˙üА‰o…AŖō šœĘŖ ‹ƒ'ƒ^ü%ÄGŽ$đĖ‘˜ âP‹ŖÕ¨ BG˙˙˙˙˙˙ëūAÂáH|p„† ‰ôđáÖ"C4r[¯ Œ寸ˆK˙˙˙˙áx‹Čjđ!…”€`ȀËü!#øČ7ƒė8DT2N?Á˙˙˙˙ų ŗ<2VČ OÄ2ŗüaeK2_™W„ˆ˙˙˙˙đŋ‡GđÂ?^á# ˙˙ü™ŧ/ũ‚ Ą‚?˙˙ãū2ŗõ…˙„ˆ˙˙˙ūVø_ÅøˆÆŋōĒd|˙˙˙˙ŋ üD0°ĩXpŋ2˙˙đũøƒ8āŋđŋÁ /˙˙˙Ö/ņū˙…ď‘˙˙˙ü/‡‡ĐH.áÂü$?˙˙ūŧ?ķ …Ū…ÎÕ Á`‚˙˙˙ü>°áaáá!˙áq ˙˙˙Ū<>e^#ü.°áaa˙˙˙?đ˙ đÂü(X|P_˙˙Âü?ˆX °˙á~"?˙˙…ōŪgÂæC3 ‡ņáū,_˙˙ü/áBÃá!0ĩDžÄÂ˙˙˙īáaķ!˜Hđ˙ _Ä˙˙„ũü2œŦ†áø\$Á˙˙á~‡Ä!á˙˙2ŗ˙˙ü,íDWËxeģŧ¯–@ ž#øaaŨ,/ü>"?˙˙˙áúũđŋæC2>Gđ¸]ú˙…ņ˙˙˙˙ø|>ŋÃŽ@‡˙á_ ‚Y˙˙˙˙„ëë˙ „ˆū ˙õÃâ#˙˙˙ü.˙ī…ˆd -Ërœ‚ØjA1Î91ūGČūDū,ËáļTf⅂n’â#ˆ¸ˆˆˆˆˆˆˆˆˆˆˆŽ"."DDD|G˙˙˙˙˙áB ˙Pĩŧ?ôd#|5až/øfA?Ŧ*˙†V˙˙˙˙˙Â@áŊ?ũđø„ˆ˙ûá˙°˙õÂā˙˙˙˙˙ü8R đáŋũ˙Ė,(w 0ŋ ¯ŋ‡_Ä$G˙˙˙˙˙˙øx˙Â;-Īæō>o<‹Æ(3Ņt^#™0‹Œē.!‹ĸāfeÃ,ŽŽdr.D|Žå…|>ˆˆ‰ €\qų#˙˙üƒĮđA¨sŽ$Æ9Į  sŽIÉx4åAāš•B.֌\‚Ę0Ì:r ä‚āÎ^Á?8gã{&9îA†Ôh‚“–材Ŗ“‚ ‹ˆaaÉę4" ËÁ=•¸ĄM#Įâ"""$Ä-ˆq-ÖlČF?˙˙˙˙˙ AL¸w¯đĶÂá”åg aūĩ˙ ˙´G˙˙˙˙˙˙˙ūđ—ø}˙FŊÂäāøPŧėlO s´æ˙˙˙˙˙˙ė8JÂÃāƒ2J PפHpü8_8x„ˆū8Cø"-´ü%ā‡˙X"\ü!˙˙˙˙˙˙˙ū ÂÉ*1‘ķyäc7EŅ€åÆ] Čų9pØGė¸e‘ō8l.Ėd|Žf͙äi›ō2!0Ŋ/ŦÂŦD†@-AøF—`ˑ6‹ĸᎃ#‡.ĀnG`nˆđÁ˙˙˙˙ī""C$\Ž%…šrĘr7)ÉqĪgƒqPqĪįĄNTæ /dĒsLÖqÍĮķat6å9 YĮ3šÍÄ ūqÍ šÉnHr ãhrâ@đAøH|™‚EdG.KD1˛‚a“ō{5>Õ™ĄIÉ\DDDDDDDDG¨b""""0„DDDDY€%b”˛y>euŠÄÂ˙˙˙˙˙˙˙øIA< đąÂ‚ˆáø\Èa"?á„XAø Ą|>á!áQ!÷ ŦG˙˙˙˙˙˙˙ô‚ WŠ pÃõK„=ŧHųđ ¸X(/žæØĸpūNBÁ˙˙˙˙˙˙ũa„*2ømŖÉ@N¸XZŠđ†‚> ƒ‡ÂøAīøxXb ėD˙˙˙˙˙˙ûÃ0ĖGĀ„ˆ‚˜äG27fa ‚ ÂĘŋ=ŸÎ¨Íg‘ō9‘ō84`0Ļ#‚˜p…Ų€æA#Æ"ņ#ˆ]gr#æ¤Á˜EÄ0!#äq ‹/đƒ0 %â8h#–c#…6fō*Œ–.Œ„h*ÄDDDDDDDDDDDDDDDD†HlƒØˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ^˙˙æ ™9 Š•ÄœŽ8Ņ1Î9ėã“ŗŽx4ã‘G<„#đA r Få9PDrƒš ŽAPrČā˜ä2Lrž 9%Ä<Íœ§+ sqÉÁ‡?ž ƒÁS(Д‡0šo;Iëe!D@ō3ņÆE­ˆē#q ÎĶÄB:"āÜÆlR80G^0‹‘‹ĸã/˛8…ČŽdr/ĖŽ)1˜‰Ī#÷ÄDDDDDDDDDDDDDDDM!„WČqÄDDDDDDD|!ˆÁˆŽ ˆˆˆˆˆˆˆˆˆˆˆˆ™Đ_˙˙˙˙˙Ãđ‚Ņ+† áŲģeÃáxJŋà¯áLŠA"DڀĄâ$˙˙˙˙˙áĨ6˙āČ4—ÂĖ„h+Ã˙„Ŧ?üÉH(pü%˙˙˙˙˙¯đ°–S ŋ…02ZŠŒęŽFō>n1‘ō>G#™0Dp4réLt]æČē/Čē.Í ‘Ė‘ĖÄGČų"0ˆē8ŽˆĶ#™„qŽ"čDN"čē.‹ģ8ˇ#æŦŪG‹ĸMJb.ĄøKÄDDDDDDDDDDDHdG<ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ#˙˙ᕡQȁŠĖ9ˆ9' Ū 9NCŽqÎ9Į6✭ÔRåf\ ƒÎŦį8æƒĐĐ\`sVÉÔ}”å9NS”A› ÜqČ=grƒ;Ôd#ATD› Ex„DDDDDDDG’€„DDDDDDDDDDGđ—˙˙ōrfãXx%ÄHū$Ct˜\ؐĖ!˙˙ū_Ŧ2°ėP3úÁ ŧX/˙˙; „áBųŒ!Ē tŋ Ŧ˙˙øuÜ8 ģ‘ģÂØ‚č!˙ü? C_˜Q]Įą ˙˙÷„Ŋ#Xæ˙ûīÄ$Gü! *G˙ÄGĖ./˙ 0\P_æB0—ĮüHųā˙„¸æB3Â˙ã ,gbaЙÂD~${üs @pž!"?˙‚#ķ ˙ÂDˆæB3 xH˙õˆüÂ˙˙ã˙˜_˙ņ p@‡˙0¸„ˆ˙ūŽķ ūŋã˙˜_˙ü~aø×0˙øHxæB3 øK˙ďũū¸ß0ŋ×īūaW˙Ũ=ž Īūø‘˙˙A|ķ ˙˙Ė/˙ |ÄÂæB0—ūĸGę(/ÜČFøūš…|$G˙õAöx+?øKˆ‘˙ķ! ˙âĪØ A•Ÿũ‚â˙™ƒ+1 ‚$ ũ‚ ŦÄ%ūü‘˙˙à  ‡ũœsô1 Ŧü#"đKˆų10ų<‘ųØ^uD§ m‚A˙‚faČ ā'ÄFĄH 5@ˆd##˙˙ōŸ'Ė´,‘-… ”°ĘÁq „‡léD;w ‡˙ūPČqČhl$!w:ævq͐˛qbC5ąŠa‡ã˙˙ā‚Fļ w ģ\Ћ˛āôŒđ@žLq ]ŽJĮ˙˙ôĩA‡‚> +)Ãh L‚1‘˙˙˙ü,Đōh>ÁĮáIH Âņ˙˙øĨyTj‡Čø ĸ0ÔíL(r°pÎĈė´`‡˙˙ü1vZšËP:ØĐ@O•ÎƁ¯…A„˙˙ū§`Ãh<2ČB„˜(\ÎÉpƒ;Āh#†W–B€Ĩ狆vœ2ÎɆP|2ŗ˙˙˙újM‘ÁH,"Č<#Ÿ+ÐîaØTJ¸Ö‚ŗÃ,š$%¸øAĘ !P)‚;ðBG˙˙˙˙˙đAEŧ†Ōv, øa…8…AD!¯C1Ė‘ÎŨæ#™¸ °`ŽEÂøBä(úķ"ë˙˙˙˙˙˙üí eBä3•xQĸȃÃG$9øˆõDn8P[$$ā°ōDžÄA8”æ!܃\žŽ¤…R¨AÄ!˙˙˙˙˙˙˙ˆTMīūAÄDB‰åüáÔÆ`æ6-‚Y!‡ŋČGČwcîAĨōü,„˙ ˙˙˙˙˙˙ō)@Aë %ŧÉ1š"āxh#Ši×;už > AáÄaŋōŪhˆGaY!F ĀjÅ#äqM‚‚80G0 `ĖGnGÁ"#0N"ã=ķ ā0D|Žg™‹0‹ĸäGČāÁ€…Ņt^#† EĀÁpų‘xÂ˙˙˙˙˙˙˙˙˙˙˙˙˙đĻ`LÃL3¨…Ņā`ކr9ƒ1Á‚<]—"8D"’(ˆáĖ `ˆņˆ—ĖGP'ˆˆˆˆˆˆˆˆˆˆˆˆˆ–Ĩš‡8ær$˛(ä †Ŗ’ã’r$l…œŲáxW į=Dø§*ehW2~u¤=˜G‚8ō2)‘Ã@!ˆˆˆ‰ b#ˆ’ņŒĸ7“‰j qTŒÔa•2 ¨&4x.˛œäĮ9Î9ø‚üpĪæ™bG+(Ģ‚?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙B"0ƒ™Åj*ķqn""â!æØDDqˆˆˆˆÖ"A@įÎe!ū߈„LvAÔ!qÂæˇ‡…OÁG8áøâ"Ay”“˙BđĄ˙ađ‘˙˙˙˙˙˙˙˙˙˙˙ Ã×p@„ûÄ4/ūkáPB;­h-ú……ķPčpĄ~v0—äoÖ x_LãŸŋ˙˙˙˙˙˙˙˙˙õá}á•Ķ•Hƒ…°gbÃÖPĖĮø&đđ‡ķ ĖKĢĘΊô°OŠÔ\¸=ŸŠ™h*„‰ŪA€ŅÔB85ŗ(2Cđƒ×ŽûŖ h%˙˙˙˙˙˙˙˙˙˙˙˙ø|0°öĄÂc „EĄ:-C†\Čqéx_Ö<0\¸˙õlūž0^•syĖ"čĐHdps ŖÄ] ˆ@2›ČųDQÄDDDDf ęc6dqHâ˜d ҌŪa#ĪdxÄc#ä|Žf đĻÅ#™įŸÍ™ÉZ&hÆGēA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đą cœsŽËĸāÖG2|ØA2Ėŧg#/eÁ ŗ` hmc‘˙ ļĮ$ärÐŖŲã™ĘsP¸8ærˆ&œ§*d¸åːĘĖLÉËH&ÄEÄEÄrŽ+1ˆXs .JŧHvė„G\Ž)"<ŒŅPdņ&‰s5F#ÆF0ŧÄjŽ3€h6Žfˆá°¸„s<ŽEÁ dpåâ>GŽEĀ‚žÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūe>đËFC ‚IP‚ęfDŽ1‡„DDDFˆˆ˙o xAíú  ĶۈˆˆÂÄ?‡D\DCˆˆˆqĐF?„ÉÚ ˙ áCū–M9ãŋ…øUnÁxa‡˙ Ø ĘĪ˙˙˙˙˙˙˙˙˙˙˙˙ūžsBĢ˙ ü"’dŖÃáūIÜԍ˙đĮ†ũÖ!/„BûmÁęû …đū&°i_áų.'4R öøW˙õæ@á˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø^T‚× ˜€˙Ŧaü/Ö`vĄpĄzą׎Xá×ī?õ‚߆¯ūáõ đuø‚ÁR Ž߅pŋ‚Y˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨z –†ŋú…ũŲÄc$%=˜F2>GÔÆa—L¸ˆeŽËƒY6 ŗGČâHŽAˇ!´LFtpˆųŧŪ§˛>1)ŧÂŗ‘0mđŋ…‡ëA><•ŗˆēĪæˆ âA鑙„`Č⟌fķ â/f E;0dpÁ€`!fN!Ļ\ €Ú žÄK¯˙˙˙˙˙˙˙˙˙ū"""""""""""""""""C$6 „r QÎ9Į?‚°ž8įö12əY5¨2C(2Cé r°§)Ɇ‚ &Z rܧ!°r%†‚âW)āÃ*D ÍŠĪ…9NaČŖ‘`§)Ę⃎g Č9 9' ģ’✂ː.9Ęr ãŸĪgÎWŗŽqÉÁe`Ŗ ¤‡ÂåQˇfID"#CB";đŋ‡„IÂa čDA„h\Ŧ‡;+2DBâ%ˆ‹Ef$ąÚ˚-ÆÁ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūˆˆˆ‘°\E‚ūŸ˙õáÖž„=%ęIׅø_î9N!øH&…T‡ōO_ūáŋŪūû Ž?ĻA~˙”ņA˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ĐáIÛ÷Öđ˙ęÂõø”õŽ ƒ¯ %đÃpžĪA„Œ/ ¤pnpš…ž°˙ų'˙ȁ>„č˛næVī‚× ?ˆ ‚_˙˙˙˙˙˙˙˙˙˙˙˙˙˙¸@°øë˙úū Ūŧ/:ƒü{õí ˜ˆ#˜Ļ4WUÄ~—Ŋ_ûÂõëkXXKÚú_¨a|— ėHAN‚2.‹ĸë˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú 0Å˙˙đü/ųŌ#áMär0h3Čģ0jaEŅł ŽÎ_ U?_áB ÉAIÔûÚ |. ´ķČÆŸ*[Sˆē.Å#ˆ\K‡#‡.äp&\t#0Žƒ(S ÆGČų9t`‹Äp`3`ē.‹Æšpi­?˙˙˙˙˙˙˙˙˙˙˙˙˙ūˆˆˆˆˆˆˆˆˆˆˆˆˆˆ<œƒ+H ü^‚āŠ5dÔĸ‚ GÄė—üA@įˆA ĄČkšnAģ–â""""""""""#†&>ŧöNÉÁ ˇ)Ęr ĐAl Ñ ƒPä1Ä;‘ ÜWsDÂĢ.ŗœ‹9NT r¸ú”åAüãžÎ9üęÍģ5D„RDf0„hCÂ~ÂDD̜h¤ŠH”ĮHČ´9YˆĐR84@+"¨ė+), ĘĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡„Y9&šĒhIŽ"".""""""""">°´Ņ!í…ÔĄ‚"?[ŋë Hhß#č @‡áûák˙…üđđôB>#ÔkÕxPÂäí_„"]˙˙˙˙˙˙˙˙˙˙˙đôB8Lõü`ĐqD{ŋū,„Ųiø;ˁá.† =á/áq†Sĸ’ AH€œ"œ(HJą#ÖīÖšrCA˙˙˙˙˙˙˙˙˙˙ø~đŊ Ŋr–>/Ái^Ģ q`„đĄļq^ųY P^/ĸđ–¤ßõ_ˆ C˙˙˙˙˙˙˙˙˙ūÁƒ 0Â˙ đ‡‚!Į×i? žá_1ŠëŌ$Fˆ#LŅšŅ‚3EŅx‘øf9t]Œ¸/!!”;.ˆ^29‘Å0ŽF28`¸‡™ŒÂ%Hâ=›Íį‘Œæt]˜Čä]Ė"č¸c6dqHųSA1˜ƒ˜EŲv]ĪÆF2]"čÆGČų7“Æ:Ø!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü!Ø<Ā`ŽŦ¸æ Žâ . s /‡Á%ōmÆî d]E×˙˙˙˙†ãˆą_…ķ"čē.ŋ˙˙˙ c ˙X˙˙ø‚?˙˙ázü!.¸Ãū˙˙˙ öÅ˙¯Áë˙˙õŋŲčáBôō?˙˙˙ũ…ü2ŗÃ˙â˙˙˙ Đ2‡ÂØ_gũ˙˙ū_ũ˙ęb$˙˙ūpņ2.‹Ąü?ōē–,ũ˙˙đ˙_™H"녅ØÄ˙˙Íđú âqxI˙ųL%˙˙˙ÃAn ^0ü?.ŋ˙˙‡õųLü/AE×˙˙˙ ÃņkÇ˙šFGC˙˙˙ũár>.ŧ(_>8ŗ÷˙˙øpú‡æ™ ‹¯ũáDDG˙˙… ¨AĘä¨É:.ĢÃĮgī˙ūđ°ŋŠēđđü Ĩu\!˙˙áan"]xpēÂĪß˙ũCÃátupŋÂÄG˙˙„D‹ ÃWUˆ#‡ü(č"ë˙˙˙„žL\Ių XˆøaL–ī_ Ž9‡+Šf@Ņt]˙˙˙úÂL, ˙ÂÅö¯Fū_˙ņ˙˙˙ūI‡áßáø|Č.‹ĒÃđøTüß…öŋ˙˙˙˙~p°ŠåŦ<:ÂÂ˙C žA…nđđÃáđ‘…˙˙˙˙ūáūWá×ápē%ūøPÃßđŋÄ˙˙˙ũaBÃæC3Ģ3EŅt]eҌš ģ0Â%â@¤ps ¸.f"9@ØĀg/0ŒdpåÃ,ŽdqMä Ét`‰_‡üČ&GüDá‡$9Šr°Ã™Ęrܧ$9 Û=žäų#ä|‘ȸ4—hĀęĐH"ë˙˙˙˙˙˙˙øˆˆˆˆˆˆˆˆˆˆ‰°drĮ đCqĪ9ĄĮ AĐCdrPDAb¤œ°˛i$¸Cl¨Æ sņDĄNS•3G'09ä3ÖqČhĮ<‡æ#æHj4§*‡ŗÁ ÃžÍ…9‡"9Xk8įöx)ʂ'ŗ9Xh)Ęœ§)ʃŽsžD†Úڛ|†„IxDF!øaøq)GČų„]ĸ"'Čųū!Ē‚áÂ+”1ČG")ĄāĻq.‹ĸėŧG ĸ?_ B…Ô ^Ŋ‡˙ÃÃ[‡Š… pŊûˇAa¨/2_˙˙˙˙˙˙˙˙˙˙˙˙˙ü(z#ˆ8}ū&a0ƒ˙˙Ē…äAôŽäAÂK„āƒëúÁuAaxøP ĄÃũyEôŧĀ˙T ģđĸü!… e׎X— ":‡‰t]˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū88]~d“ĩ |1U‡Ū˙ pũVqX-~¯]W ¸@5ü5á÷a.đŋSL˜U~Aáa‘ÃDHe"""@đ8‚#’c#ÅÃ9qųR>lČæ÷ī˙̇ ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū!„$#˛ėÆGČâę`)#Ę`Čæo#ųâ.%˜‹‡$fˆĖˆų#ä|ŪG2>GČųaĻGXjÂ.ŧDDDDDDDDDDDDDDDDDD†H9 ¨)Ȑ^G* q¨{'Bĩ'fƒŽqÉA8!Ė9ø”YdË&aĸ{Âö¤`Ī!˛a‰2ÃņNTsŲāį‚¨'Š!Î9'!ĘƒŽqĖåšĀģ<ã Č˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ūb a¨] Š– Ŧ/CYė˜įį=’ãųāŽ= âcœr$ãŲĮ<åAėãœsĒŲ)‹JN`#ÄCB âDD8ˆ¸ģ……Al8qâ!Ąr’$â’&"N"q6Ŋ›žââ0„D4"""""""""ß ˛ä8ė¸gpž<>_¯ëđá ˙˙˙˙˙˙˙˙˙˙˙û~ĢáđŋÄDpõá_ ŋßūū?w]‡ÂÃ˙ŧ8uø0^ĢׯåŅu˙˙˙˙˙˙˙˙˙˙ūØxh/|7đÂü/áXUĮ÷˙xXĩđÃd˛_˙‡đĄĐ÷ũõ‡‚?˙˙˙˙˙˙˙˙˙ûƒI_ÃéBÉq‡9 ô%ÆŗŸ/¨A˙˛īKČ˙Ã#D L‰2ˆø˙æq@‚ÄDsy„kF4CmČj¸ˆ‰ €Ō3špŌ=eãųüßę“ Īü-?˙˙˙˙˙˙˙˙˙˙˙˙`0]ЏĖ3‘ČņÄ]Īä|ž(Eãē.ŒGŗqxŽ$`ČāņĻ9Į…ĖdÄDDDDDDDDDDDDHƒ8ä †f<2čŋ6ÂÉĐšAH+Žrg8g ™Čw)˂N@đŨČeŽ"$AÄaĮ˙˙˙˙˙˙ų…ːĄ Ô-ÉqČr šnAŽ…9py ˜ĐĀF):A ÖņˆŽ"""$Î)"S“Hā¤GŽšŠå;+ŗ% öŐÚxQ͉‡ÉĢ12ÔaáŌ…öąâ?˙˙˙˙˙˙˙˙Ą…*ˆám/(az7‘ãD´<7zūbëŗhW|0Ž€Ņę˜_ ŋ0Úĸ‘˜ô ˙˙˙˙˙˙˙˙}N!$fĀŖÂÄD(|T ų„]˜ÉsŒF Tx~?‡eã Ę|‘ÃO†h ü,0Ą…5āŪ$Ĩ#.ŒÄÅ˙˙˙˙˙˙˙úÄD1g§úÃ0{hMb,,ÉB@´áy:2œČįČšQü °ˆNS•?[_xpŋ˙˙ũaC2V‹ĸë˙¯í˙˙˙ŋb;ūŒ•ĸë˙˙đ’ūŊėüø_B‚.ŋ˙˙ ü7ė!õë1˙˙˙˙ū("ęø_`˙˙˙ü?ŦĮ˙ø ŋ˙ü-|/°@„ēũpõŦ%˙˙ø{ŋŪÅ ü/ @„ē˙˙˙ūøKúÂüP_˙ū̇ø Cûüē.ŋ˙˙Â˙ ņkŨæJŌ ˙˙ū¯‡ū?˙üĮ˙˙˙ ņAz×ü&~˙˙ø-ÂFSņ…ŋ‡–ã“ą/˙˙×ųnp.GEÁøY\Ŧ˙˙˙˙õæ@o†W) ”\'B^÷k Č \)‘”…ÜėH˙˙˙˙DL÷ĶÎĻÁ;@E˙¯ÂC˙D{ųw˙˙˙˙˙„čė\ËPËÃô&˙ޝ…Ŧē Ø @Įæ?˙˙˙˙˙áßęRp‡k!l?IÖ? ë‚#p⓮đ‚y˙˙˙˙˙ôGšßJ| D#î; ˙ęīáĸCŽ !ĐZ<…ü˙˙˙˙˙zÔˇ$ØÂŽ Ĩ‚ŦŊũwÁ<‘Í!ČŖë!ŠvAFN*â?˙˙˙˙˙ūOĢ đAÄ8œuÉDæJŅõūvš#äb.‹ĸ„^%ŅŅEđĄD-õ—•_A_˙˙˙˙˙˙˙˙˙ōî¤Íō0@`ކąq— ˛8ψē.ËÄ|Ū~HôaEČō:D|Ã.ĪF2>Gģ.Čåā‰Ņŗ°ÕaG›ÁˇÄ|DDHA āŧ‚ š+!G ]Č$ ƒŲnA qƒSüĮ˙˙˙˙˙ÍBœŽ9>#‚Ŧä y˜šS*sė!Ē4()Ęr° "äRN_ âRÝr!—#TTÂCH”Ä7›ÉŒŅ—GĖâc7 Čä`æŒÃ8 Äl)ŽÇPĀķ1Ž@ū?Čb2€AüDGā‰-A Á / """"4!đÅTPØßĖ˙˙˙˙˙˙˙˙˙øÂđÃúÆáá˙á8V‚ĨÅüôōá…(@¤oö ˙\$:ˆp^?˙˙˙˙˙˙˙˙˙˙Ė ‡¯™  ™ä ÕāĒÔ ŋëÃ;( „,á˙2‚áë7Ąáöŗ 1ĄÁ˛Īĩæ?˙˙˙˙˙˙˙˙˙˙ūáx đĐAđÂū‚ Ár(áf°Ä|.ĄaŦĢւ.žÅF Đ¯æüė“DAú!ņ^ŠÉG… ÃŊXˆ˙˙˙˙˙˙˙˙˙˙ūa#zdžØĶ0†™pd#†ą#†H) ŽChsŽqĖäņėđHNlĪ"ėē(F3ČÎ#戨Ī#ŠáXRLÆGĀ ”d­üDDDDDDD†@G)ȁ@ærøđS”ä d‚œŦ/09‚pCÁXBa!Č đ""""""""""""""""""@đʃķÂH/˙˙˙˙˙˙˙˙š ã9NT{&9 aČh‚‚¸äŽ>ë ¸Y=IbtĸäRCЇŲdNƒ/ˆˆ‹Ž"â!Č`Á"rb LčâN)"Sŧ˜#„c#äqL™¤hŒ^<peÃ9x˜EŅt]Čæo0Ž3‘čŅžŒ lÉō>`ˆų‹‘ ŒĀ†3yä`ĖBø`‡â"!Ĥf"€Cšƒ3ðĩ ËŠ Âƒ…„Ls;…‡Ũ„•đÄDDDCˆˆˆˆˆˆˆ‡\DCˆˆ‹Ŧ‚â"!íq1˙˙˙˙˙˙˙˙˙˙˙˙ū^ĸ…×áuęĄZöęë„/ ĐZķ%i]|}Bü4 R7Ą !S¯āģ˙†8~?ø˙˙˙˙˙˙˙˙˙˙˙˙˙đP¤$?…"ÎŌ ūUkQŪĨÉĢķ@WÃŅp˙ø^ßæ?ȏ˙“…c†ãÁôS°AÔ.ąŽ_ /æ%]č/˙˙˙˙˙˙˙˙˙˙˙˙˙Ōü$„>?¨aV>' á˙ü<ū„~MđÃáZ†8Az^đūõ˙á˙ėÉB1˙˙˙˙˙˙˙˙˙˙˙˙ø_Œ%Â;YČáHųR>GČų¸ē8eƈeÁnS—ĶyÁ )ÎFüäGŧGČāŽG 0D#Íäxē1ÍáB˜˛ā`ā„ph‰w-Čf8ˆˆˆČá°¸„p.ĻC(s;.…ÃSē1Qéy3â.ŠLÅ ˙̓‘× åĀķ­„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆZÎ"]˙ aČ-‚¸äG$9°§)ȐS˜sŽLsŽr fr<*9ėöqĪ‚¸˜dɜĐAĪ9N\˛™NTsÁ*å(™Zž/BcœsŽg-ĘrœĒ °DrAf ÉD8d ĘÉĢ2ƒ$13+&`ĀEębeˆ+ į'Åq1Īgô/ 9NGĮ‚äŦüSg†@5Á qČd ČH'gڟ2V9ƒL†Âeš|mƒ-!5ÍbzÃ$8Aà DDF„DDDD\DDDGà ' …ūuĄĄ"".""""%.;2ˆ”J"-˜CŽĄ&~˙˙˙˙˙˙˙˙˙˙˙˙ū0ŧ7üƒá~áw‡˙¯A˙˙˙˙˙˙˙˙˙˙˙˙ū°˙ö~ÂPũ…¨pŋ˙ 5÷އûŋ,: ļ˙ũBá…đNũBáWÂá~|Ž;¤å8x~číMR‰˙˙˙˙˙˙˙˙˙˙˙˙˙á…ßņ…įdˆâ1d|›Čųær#‘t]ĖҌÂ:æđæŠūr7‘ō>GÍYü‘ō>GČâåҌ˜@§$Î#LžKe҃#ŠađĖG ˆˆˆ‰đ!›đB3‘S>Aˆ\2Ī/˙͙ˆŽd|Ā Y’´‚.¸b""$ Å<Āf‘Ā–p:‚`ˆæGĖ2ņÍäpĘ `6ãĸ†]eŲx!!č"5ĮÄDƒ;ˆˆˆˆˆˆ‰0(‚NHsŽBŽqÉ9 ¸8ä‚āƒŽ{(ä1‡cËDDDDDDDDDDDDDâ9#Ū|Į˙˙˙˙˙˙˙đ¤ÕÄČkŽ$‡&9 9A’Čl‚9;4`ËK&$BH”Į&JeƒĄaˆˆ¸‹ˆ†2 B™ĐEs˛DD˛¯4GDDFDyuˆųÜd`DđáˆfZ$čDDDׇō [šZ6"""FÕø˙˙˙˙˙˙˙ aäpõa¯æHRCĢ ר‡!Ēl+2¨ëĖxx\¨ŒÂė¸4ĐP‚¤¸|?ü0™ŲVAw$lĨ2?A˙˙˙˙˙˙˙ū°š„GáŦ""§…ņ EŲøŖc)‘H˙à .žB † áüáG DC‰˙˙˙˙˙ø_"ŽAĄÄƒCu?Rƒá|æJŌēđЁ."AskÔ) Ē‚ųŸ˙$#˙˙˙˙˙đĐo ¨uõ §Áđãđˇ†S•? ˛(sa¨XR cˆ\.h4…AėáœsŽ{&9ė“đõ‹?˙˙˙˙˙˙˙á‘ŧˆlĢi‰ô""""""/ų’D‚đâąÅNˆ×!Nq6ŋ„‡˙˙˙˙…épŽÆÁ¯BCÉÂøe9Sá_;RöBŽAČhđ‰7‡ņgī˙˙˙˙ áËuųÚØøŖ‚ ˆá°ē¯ķ$‰c°ļ0@ļ‡ˆ‰Įx_ #˙˙˙˙†!c†Chq!‡˙‰uáähĖ•ėũ˙˙˙‡ aeT°žN;āküq˙˙˙ķ´đø—TãAr¸Z Ÿŋ˙ūÂ˙ņĮ˙Âķ˙˙đžáåpĩ ŧ?¯Ÿŋ˙˙ũøH|/Ãâa˙ëđš7>#÷˙†˙˙ë ëÂF˙ė8qA˙ī … ?,8}aÂ@˙˙ūüDøPƒÔ,›_˙˙Çđō¸Z u˙ŋÃ)Á˙˙ī P‚á/ÇđüYû˙˙¯˙æI đĄápņ˙˙õ‡¸aá uX\&~˙˙˙ ø_a˙ ?—_˙˙ü ˇ…ÂLũđú…ᔏ˙˙ø{‡á# …×â#˙˙˙đá…˙Gø~ä{˙˙ū ŧ?gį‡˙2W˙˙¯ áÃ)Ɵ Ã+¨apH˙˙˙ü2m;ėČOĘõņúáérŧ#ŗ žd¯7˙˙˙˙đŽÖŅ\ÔÂ÷™%Wá”áxy’¨4æJĄ¯ŗ÷˙˙˙üHDePf‘ÃÂ˙2„&F ŗ ­Öd Ü!˙˙˙†W4GrāI‚ŪR0ķĘŧí!$8Uŧ2P>XD4Æ,$‚˙˙˙˙˙áē‘šV¸@ƒx}ōV@0Cá†&H!~ ?P Ą‘à 5ē˙˙˙˙áH#‰ “ąüėŒš Í"„fD|Ž)BFaÉō>RDášFĖŽdp3 LũČ5Y ƒŽK r äĮ"ÁrcœsŽqÍ㜉•†‡s2@AhÁ›s˛€¤a•ÂĐH!˙˙˙˙˙˙˙˙øˆˆˆˆˆˆˆˆˆˆˆkrÃ4Č x(‚œ”ĀäG-Ęr<7åšrŽCXrÂCž#’—r9šCŽđĸ$˜†ƒŸŠrĐS˜sų?$æČ)ČeŲ'*9üãœs9NS—rā‹qĻS•‚œ§)Ė9Į"ŽqÉ9°T]ˆČ‰0G`Q#垐ˆˆˆˆˆˆˆˆ‰+Œ„án[˜r#”ä¤')đƒ™+Đ_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙'ėDDDDDDDDDDDDD爈ˆˆˆˆŒ‹â!" )nVÄq~B""BVЈpÄ0Cô0fh‘'C Íg÷Kˇ¯äÉŖ˛(Epŧ$a˙˙˙˙˙˙ūÂ"ė éaČ)¨Čƒø °Ër`Đ`!āÍøA ûáãøxa¨Œ†°æÖA“,—,ŒŽ´ Ĉ ˙ ">9יĮ˙˙˙˙˙˙˙˙īyübšØaáp‡ôĘę€AØč¸ ĘúĮ §*|$ ¸RÔ<'_x ĘāĖ„d|đg0Ī„‚D˙˙˙˙˙˙˙āđԚž°Ŋ. 0ôŧÂ.Œg™pČbáŽG0ƒØˆøĖŪn8Œd|Ÿ*-G"5ĸčâ1qÄ]fˆŧaæt\ A ā„0`ØgšŠH“c â%Q‘<ß˙˙˙˙˙˙˙˙˙˙˙ÄDDDDDDDDDDDDH C‰ €\r†U<šN@đTÎ$2C_ AŦãŖŸeE(¤N›RäL*‡ŗA°§%d>hx ÕfsqÎ98)ʃÁPL‚ ūOɎe!‚ ČÔDŖŋD$Ásĩ€įefHÄ2Ū"v((DävRŠ#/0„DNŌ đ°_„™û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡Xb"# DDMâ""#ˆÂ ŠŊÂÁ ‚Á†!Bú˙đ¸X‚?aa3"(ķø"&XPÂ.ƒáū,:Į?ék”ãY°(v‚.ŋ˙˙˙˙˙˙˙˙˙˙˙üô4ƒ™ëđø~P_đAÁDta…á’’Âū8XÃčYûĮt1;Px_„"ɎpåĀ(áKØPÎËH9PPŋøVĄđŗ"z ˙˙˙˙˙˙˙˙˙˙˙˙‘‘Xb áÂú‡PŽĘƒä`Xa°°A›0ŊPPĄCÃ?)øA‚b‡Ézp¸'ÂūáwK§(}1Ī#‘°É°‘…˙˙˙˙˙˙˙˙˙˙Ö44 ¸Â!ë\?z¨U„qZ™ĸˆŽAK†H!vpø„ˆūá˜/“1• G†o0‹ĸëS— €mRāĒG#ą ˛áƒØ`.‘t]g˛>GĖ%6!p5Rāx5‚eĘˁāĐ\0!ŦGĄŸ2Ž: Á‡*"ČŅā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ!¯â"""@đ(r↧7#|đž†TšUdh$9 |)Č n[š˜gŗŲ1Ėä‡&rA2C$0‘†ËãqĮ=ž 9)•2œˇ-ȃœsŲĮ8į‚ô)ʙƒ8į‚œ¤ Ž?œaāį‚ĩ0ĄT>čm °°ŽÔs˛Ŗ!a3â‘â@¤s#3Č։Ļâ"įn>—‡á$˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū4$VqC‡§ø~"""""""#ˆâ"""""8á ô!ôqU‡  ŋ肨Ŧė6/‘œ7 N8pˇî;Ã,'†/‚ÂYN,Ø…™Ųû˙˙˙˙˙˙˙˙˙˙˙˙ü"9V*… ĄB‡ũ}C‚āĄAx ü ZĮáÃđ@‡XHD2€ŋ 0ũj?W¸P¯›dš=…ÂÍē„,(auū!•?˙˙˙˙˙˙˙˙˙˙ũā‚=Ÿ0— ˛œ<>É?šÚˇÔ8|/…‚ķ°qŅĒū,ȞĪŪ–>ĮPƒ ū>^(tņĖF """#Ã)Â˙˙˙˙˙˙˙˙˙˙ë^î†0°\8Pžžáa~-L@m—Eà ņŪi‚ŒÂŖ´™á„8fõ<SĀR<ƒ#ŠGČáa›#ËĨGͅ#†@3˜EŅÆS† )âN*â’"U u˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ†Ŧ…íZáwūdO!ܧ"g! †HA‹=› ƒÁ—r\h/ 9āĸ Á!ɎqĪ ÖLs\s9("CcoķŽqÎ9Į3”æĄ C1Č3Žg#‚ CR† œÁ2 °ŗmHÛ%&0SЧ-Ė9'!—1AėūqÉ9!Î9'"l0įâœÖqͅjqĪÅ9\qŖÁ[a.­/Ãų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęmĢ.FĻDrČhDD\D\Daˆ¸ˆ¸ˆˆc5”ˆ¸Da~ˆˆˆ0„DDDDDDDDDDD…'¯đĘr§{…ސáėdDŧ8wü9qū)„ŋ ÂC˙˙˙˙˙˙˙˙˙ũ*“N˜A˙…Ą ]?áW…˙P¸ŊđáâGöúá(aü=Žá~„ūđĄu…‚$˙˙˙˙˙˙˙˙˙ëĮŲÁ…ü=AęÃø|?ëķ€cÃ)ÂęuĩĄ†áBrHGTŽáđƒ˙ ÎôČú ›Čú˜‘‘ÎC$nâ#ˆ^ņ˙˙˙˙˙˙˙˙˙˙˙˙ûqę ŋ”áņ*c˙˙‡”š˜´GĖȞ?|5 |„€ËÎÄĀÁpĮ Ä$Қ$d|ÄG#Ä]‹Ŗ\Ė @S|\0l4üō„pˆų>y2>GÍđÄíelģ.‹ŖŒē.ˆ@ „s#Įb€Ö\ É!xe9S˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũF`4Ä82āv ´"""""$ŅBׂn1ÂCäĮ Kã!ÍfĐÔ.91ĪPĐl5 r ô/Q°ĸԜËFPQ™pqĪæĄ>+„¸Ė9q! PC@äG)ĘN~+`A Ăļ>G˙˙˙˙˙˙˙˙˙˙˙˙˙ūĐGjŲŨHȰ Ō%GfˆˆˆˆˆˆŽ"!DDGDDDDD~AHr"O ZzI˙đõĶ5‚xH˙˙˙˙˙ ØČá˙…č‚AĮ0”¸fx˜P둴ˆP z˙ü8~ĖLÄ†ÁūdO ˙˙˙˙˙˙˙˙|Y 1Îp 8ø˙î§@Ō.#†Ī !…ųœ!> œ(xxPŊ‰n#ņ.‹¯˙˙˙˙˙ üɰü,8æDüŠr#āÃ˙úĒ xŠœ0C˙˙˙˙ūøá|(^Č2mK¨}ŠÃ … xpũ1ŗíG2'„ˆ˙˙˙˙˙˙Ū2ô8˙ü‡Ø]qIY=Ŗ … ņÄHų˙˙˙˙/ą|>=ŦŽ PÛČ]ĒpđĩBC˙˙˙ԊÂbû‰… ˙ø Yu˙˙˙ģÃ×ÂB0úÂũDÂ˙˙đĢÃõs"xKīîø‰˙˙đ˙ ŽdOa‡ž!•?˙˙˙ú‚ĪÛđá{„˙˙íxPŨTDÃ_빑=˙˙˙ü-đÁ .ŧ=p‘…˙˙˙˙øũ߅ž˙˙ūŋ\$aC˙ū!"?˙˙øW^āïÃ˙0ŋ˙˙÷÷ņ wũ|!#˙˙˙ęŧ/ô+˙^!/˙˙˙˙uøwæDâë˙˙đŋÂü#˙˙ņ˙˙ūæF˙ đ’ ˙˙đ˙õãÂ˙õ˙˙…ø—E×Wū°@ą˙˙˙Õ~đÃûÃë ˙˙˙˙ˉá(_áwˆ‘˙˙˙˙ęŗ# ë^ü$?˙ūßĢ„&-ëõ™ÂD˙˙˙üĘĒ߈˙-Ö-au‰…˙˙˙×יÂ^˙ūü˙˙ú¯û¯1~˙ëÄ _˙˙ũûūdO?Ūú+ĢĢ_Éd`ŽHkט_˙˙˙˙˙“eDc0ˁˆáˆKõ[™Hå¸ØdĄ9r5E}bāĪ‚$˙˙˙˙˙ŗˆē"ˆŽZŠHģ. s#är.Ė Äs#ˆ{7‘â„qĪ]æ™Ė"č¸Áš#įŖHDD™Ū‚ņ!ÄDDDDDDp6‚åĀŲėD~„ŋ˙˙ųpAD HŽA§0â@Ї‚āãœįãœrH+bhŽb2„ršeāĸœNŨˆ‰ØŧBŲopЈˆˆ˙ÃŲäqĪß˙˙˙˙đ}ŋ÷x A…ügΝī wƒÖ!/˙˙˙˙˙A:y\(­oõø~˙°ģ××ŋ•¨Ņ ‘—Eւ>G˙˙˙˙˙˙˙áà aŋ̝ĘâY ÁW†˙ˆŊ0÷ˇõˈxŽĐGˊ…5gķ`x/ˆ C˙˙˙˙˙˙ūxˇdW֔•æō>GĖšBāˇH›Ī˜Ø‰[ČÃÁ?⠈ām2ā\Ā˜ ¤|Ždx͇†> ˙˙˙˙ `Í"C ƒŽLr,sņNQ✨8ՙt…NeÔåi ƒÂAüڐô"%™rYØ,BŲDˆĄŽÄgĸ9ĖÕĪ‘ŽĘĄaˆˆˆŽ˙ˆKÂH/˙˙˙˙˙˙˙˙øAMž~"""""#Ü=oáx„žFŸ˙P¯Ŧ(/‚$˙˙˙˙˙˙AmáoŖ˛Ûŧ=~‚ūˆ:ŧ=CÎĘ˙— €i:#ß ˙˙˙˙˙˙¤ÕĐ/Ŧ…îŊ)\Ŧ)°[’>GøB?Ƅ ē_đVˇ2ŽæJā<ŗ#…˙˙˙˙˙˙đēė'Öv:)ō>o7æš#æ^#är0)rã.‹ˆ`0ƒaō8râ ĪD|ˆņtq €f13xf’Üė0 ŽG0¸KČ5ŽAEœr(ėĀ…ã#įŖē.ŒØmŲph#™9ėŸČų F™ŧÜi)%Í^UÆ3dc#ä|Ā.\Ã4Ž€ĖGČųã°ÄCø‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰Á\rā” ™ œ3ųŌ q"냤,Ōŧ(ščRčøPâ‚ķ"ęaΜ§*ex/ ã™ÉY đJ â,A‹žĪ˛B[ĄĶ”åjLaāÜT…ņ ãœrc“á­qĖæ‚嚇<2đÜ,Æ ąbCÄDE„/¸ˆ…°ü3"xK˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūˆˆˆˆˆˆˆ‹ˆˆq˛āÁŲ(8ˆˆˆ„:[ÃŅ’ÍaácđKÜ _X.ŋ!đÄÂ˙˙˙˙˙˙ĐWajŋ’)œ/Â˙ČÆø@ŠÃđ‘ū+˙&2<]— €ĘüH˙˙˙˙˙˙˙˙Ĩ•ÂÅš¤j?×Ĩ+•<Ā-†iŗ#™0‹ĸč÷â‚ø@Ŧ&ĄČG āžˇ2 Ā Ã.‹Æ2 Gˆö`@ĻF0—˙˙˙˙˙˙˙ū/ņųŧÃ.‹ĸč¸Bčē3EҚ.Œdų#…03{<Œȏ˜EŅãŗŲ—EÄ0‹˛áČæG˛<\f28|đsŒŽF ÉĖ…Â""8•,Â.Ž'˛āA#įˆ‘â6ŗˇäqHāį‘qž n.ĒGŽ##4F )ŧ‘‘ō>GøM„ ō>ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČ-Į 1*v&˙˙˙˙˙˙˙˙˙˙˙ņ xš ­ r¸ãšaNS”ŊŦd…‰TƒŒ8æÃY×?ú2ÂDÍįqĪfƒÁ‘š!ČŖ’sA⇂‡‚$G DĐa#‰Š 2eĘÃANC,sŽqͅ9*‚Ër‚a §(Æ šˆČļÄDī˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ$˛""""" 1;T1ë@—ØahL/Áŧ­áø‡Ė€°—˙˙˙˙˙úXpĢ˙ ŋŽ?„Ŧ?īōHUįVi˜EŅxĀEÁrč.a˙˙˙˙˙˙ūo… žˆĀ}W-EėØ-ƒHq |4C×ũŽ d|‘ĀđÕ6fr.FÂ4Geąxޏ⁠˙˙˙˙˙˙˙˙ü.åwŒYB/ō>G3ĐĖF¯$ƒy„xŒFAԏæčÉtqhē0fÁ—.ÆGČāx,Pq$ĄË‚ž‚ų?wL¤EŅDž#ä<˜eŅā¤p=‘×EŅtSäÆŒëŗŒ¸†ąpV. `äs#ȈK˙˙˙˙˙˙˙˙˙øˆˆˆˆˆˆˆˆˆˆˆˆˆˆ<2܁á¨ä‡6BpaĪfƒ9NVƒx"A‡  r9 8‘Đ‚ōœ¨%sŽqĪäô0䜨$äÂ8?üöqÎ9Č*Ip@‡˛Č A ĖƒAčVЈ4[ C$ÁĘA"åâ"""""""xķē˙˙˙˙˙ūÄDDDDˇœKƒ¨4åAĮ1šÅ9 ŠĨŦBC!â"""""" žÂË(š˙ų 8<"#đÁ~abeWx„ŋ˙ķą ~ą&āa—‚3˛ĄæPĄpAs ˙˙Áđĩ–Uĸ6uö1 ,q˙˙-|Ž8A ŋ˙˙¯␘_˙ĩ‚Y™„¸†<Ã˛LÍJ˜‰f ˙üF@r˜˜_æ@XJ"$ČS2Đ\0Cū0ĸ!# ōˆ@Âæū!-?ŪaCˆHÂ˙ =ūäcų‘Œ\D21đĘr§˙k‚?ų…Ä%ūô˙`ƒ*x„ŋĖ’!Ķ8įũ˙Į˙æ—ø Cķ ˙—ķ @húˆKü\!ĘĐEŅu˙ãB#Ė€ŗ ˙•A Š˙|x‘˙Ô ʛˆKõd%/0ŋņq UG˙0Ž!/Ô!¸˜_æ@XKˆ‘˙ķ!¤‚á!˙?Á Š˙Qd‘˙øBS†d„ˆ˙˙DpĖ€˛?˙ˆeO2ĮøYÃƟķ ,%„‚Č #†&9!´Rād˙ņDy‘„c˙vHü€°Œƒņņe˛0‹4gæ˙Á Ų_á(–r2'‘Ŧ—Gb1Ä˙$ˆNé‘%™f€ĐD$Qč @ŋ˙čĄÄF@m–įxˆ_™d˙üDDîo7ŸÎ¨ây'ğ7žGėū'bY‘„?˙˙˙˙˙˙䕥xœB"kDŒDDŪ""oųŧÂ4ÄDDIÍ 8įĄĻ1#hDŒÄŠĄ;ˆeO˙âvŸ2Æ@J´9˙ А)Â_ †&?2§„ŋ)Ė/đ•>&8 CâG⁠†&?AB^$~ø‘ø Cᔁđ˙ø€leptonica-1.86.0/prog/ortiz-03.tif000066400000000000000000002053171506303110300166260ustar00rootroot00000000000000II*ūö ä  × ū%()124,,‚ HĘ GPL Ghostscript 9.502020:02:06 17:26:23˙˙ :4?‚/cųn?gBË~!|ŅÜ?č ŋûeÖ?‚/VīĐūaû.ŋ ƒŲuûŽĐ"ëP˙-˙Ķí˙č/ņāž1˙‡á˙Í?đũŠøEÖ?XDĮ˙ pČ÷ũC˙ÅŲĮ˙ô?đE×ô–ČŌ‚.Ŗárëøķū+ũæ DđĮū.‡˙øũđ^¸?Ŧ/ƒĖ?øáøė,?-XÖ›a˙ū8ßĖ:Į˙˙ ōëũũ…‡ū˙„Lu˙ü=Bü3ü!æuøa‘øBūL|=˙ÃßĖ:ĮđDõ…đđDø˙4ųTĄÁ˙đD0ēåæ˙Â\èa<ãô˙S¤RÅŋāáīü€°ãīūû˙‡āˆ˙ųRS Gˆ_ႂ#ņāˆū?…‡˙ø_ü?đ_˙Á˙īŪŋ˙…ū˙øFŽ?ķ?ød~˙Á˙ūW1Įų_ˆđbÂŊ˙įWPp•˙đ‰/õ$*9mÎŋ˙ü% Ía˜Uä Ž "Nī˙˙ø^ĘĐC‰N}Œ$$šŅhe˙˙øIa„rŸ—Ķ‰N\k˙˙đūEŠ#ŠÉI>˙ũ N!páG ŗÄ `Ļg­˙˙ü("N0A„O`ŒR¸p&JÃav@’įeA€A˙˙úō 0DFQ…ĐŌNB9NS‘˛+*C'‘ėėB’W+PĄP`Ȏ$Ōb@ˆ`ƒ2 2âœv5˙˙˙ø%#ˆbˇpDppĂ2|Dã‘d‚l‹.dĒ0ôJpÂ!G{S#s —œsň@™_A˙˙˙˙˙üÕpQćr7 ŅæØˆAŖÜDC$9Į% ÁDPŽ[‚‘ŧƒ Äɇ$帐û’qņ!aß˙˙˙˙˙đž†&$ˇ"…ŲQ[2)t„´ØēęLs:D‡dK8×âҍ4ÃÂw6ËAŠDv$/v“B%GČų¸Á‘ķfGŒd|¤Gĸčŧn8ŠBšG%<ėĩ" ĸčˆ‡’„Kį‘šD"#üA#yPY'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ō¤ä8â""""""""""""""""""""""""""""Cc#ĪbFâg ķ.Ëĸā…ŲpÛ0åÂXŗŲ#ƒQ€["á¤\&G O›Íäxē.ˆ„]"Cˆd|“Į äųÁŽā N'ŋ'9*Į3‘ Ēa.'ÅqĮ?Á ü$n$°† ä ä2Sirƒ‰‡šDDČá–\ á°ģ.d|Ž åâ8 ŽÖG €×"""#3EÁrčē.2ėē/ŒEȏ‘đC=‘Čŧb? |Ã/œJŠ>Du_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃAˆn„CˆˆƒB& `q$Eæm„'°†„h‰(R>Fe^K< eÃ0¸g.D|ĀËŖ‘†]tq—eÆ]eãē.Œds6dp<Ždpk0ĖȞyCaĸ˜EÁ#ƒ/Čē/Å?‘ō8f‘ȸ-"8ÅÆ]\eÁšpnDDDDHÜDDDDDDáģ‚ ˁšÄhG˛9_ëųčcßb#Îačâ0B""""8ˆˆˆĀ0""<ˆōhb"2Ū ÄPˆ`„H0Ág#â‘Ä Üjå9PNĪg‚¸ã› ƒŽ{"@ˆ–â""aɎAMČc‚$ÄDDD†˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü'Â×Rܐũ'†n)ÄDŠ8˜pØo E¸ C)A¤˜p “˜üCB#ˆˆˆˆˆ‘ ŠDĻ8™„]"]‘´i@į# ô\ˆâžEÑČâ.FxEãē0 ē˙øa##jŸô(zaŊˆ‰ŒŽ Ą,Y'.0„DD1Î9Į’o#˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŧ(DĘQW‚pũÉYHGˆ Ŗ&Á¨Č˙‚! ƒ#G$8A⁐ī\îÁ­Įb#˙­P~EãâŊ Č¨$gPør Čų#6Ė ä;Ē#B‚>MB‰oåÂoĐo‚ ب8(h?˙˙˙˙˙˙˙˙˙˙˙˙˙˙wū""‰OâˇÁ.:¸O…äœ!Ë*‚qAî+Įų*W‡E×"'É‘˙ Ô8‰ Į›p1GT]IÆČ"8ŠO$"čē1Ž"čöaĪ#Ņt2¯#ÁxA‡ ōQ.ˆķŨDA„$mćĸCänRNS…Đaû úDcl¤ "9NĻPBgđ—˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‰œá–â"""""""""""""""$G)Č9Į&;0EŅt`Sqt\pČųä^@ËÄ|2čģ8˲čå Ž¸Bā…Ņpæ^#ÅãaLD|ķ/üâ3D EҤ`CÁÁ‹.† ‚™ ‘Ã^ĖdxÄEæō3@™Å“ßģÜ:$;ˆáņ\?'㞂n)Ęœ¨<Ėå9\NÎ9Į"ŽqÎ9Į8âJ‚”jCXr3nä09œDDDDDDDDDDDDDDDȈ@„PB"""""""%¸‚"Ls8ˆˆˆˆˆˆˆˆ.ä2Į xú{#™7’ŒÂ.Œd|‘ō>G3 ā—jz3EŅtĻ,Ķ1ĪšŅˆBČŖ…ä˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôˆÂâ"""|ÆaB¸!)\deãF^#ä|–da‘$UŧH=˜Ę" †‚ņ Ī…6Eâ8R>G3ȸ†#G289ąHņp†.ĖBčē. —Á`¸6†y2$Š@sųŧ‚qär:ä|ؚ"čē.‹ĸėāj—Á‚8ĨÆ\ÁPÜ\ōeÁ š Čųøē0"W Ū°øņŊÄEŽ5„DxÖ0R7 D8†„GfĐ!—ƒ">G ãD"#ąą0ņ â"#DLȓ3f™æqEØeaNS•2°—žÎ9áãÉ Ž"C`įDDDDDD5!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙à đփX\>†^…áŧ?ˆŽ!ĸņ p‡‹ˆˆ‹ˆ‰ÜŲO‘ķy0Ž"D@™Ņšd†qŗ "9ŒÆ|0]—p\šâč¸r9‘Ã(Ž…Áŗ#ūü. ų!õÂ_˙˙ĐÂ"Ž8+ Pūˆˆˆ‹ĐÃbŒˆņbD8B#fDĸPī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…‡…ŪŦŠ:&Îđŋœ|“‚ā¤#…‡ü&ŧ„‡˜ëī˙ûa`¨pĄč ¯_ßáķ'‰Į§…ė!hp‰¨N(„°ß—@ūFå> üGˆˆˆËƒî_ė/Ã#u"Ž+ ­|?üŸGYŅČ5C-ÄDHŽC`â@숈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ÄD†“ˆˆ‹.™Œŧb#æüÍɈf3GČų#ŸŸ3ËĸbˆQ õ˙˙˙˙˙˙˙˙˙˙˙˙ãNJ!îHq#*,H–…aB&YnS•ÄQČX ‘âčáEŅėŅ"ņ8ŒƒĀ†29“æt`‹ĸčŧaÆš8Ž2\ČflBâäpĐG r#ˆ]G‹Æ‘Å#äx¸†¸Á#y#Š`9†]͙"#æō9žGXéķ.‹Ŗ#æČäG‘Å0 ā¤GÃ4¸†‚á–a—ƒ1ČæĻ3 áĪ<Ž#ŧ—đĄ'†HqŽE‡wœp„D\DD1Ä0šâ"ÄFą AA3ˆšB,Ā@˜"";(ˆHĨÄ8“…„"""!ÄDF‹""!Ą'ō0Éti“‘ė›"踆ėŪGŒ#æÄ.Ž<`pG `„DDDDDDw˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á×âIÄÎ7äŖÄ¤â˙Hs8 pÃŧ†‡pņ„"D4,!įgŠtwlЊ‚3GĻEŒĢČų5¤xB8ކŠę‚Á‡" ü5áôFø ˙áCÁ"î˙‡˙ũí!ątÆ„8ˆâOPs (ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūũaä6#r˙ŦįÄÃá~˙%đŋ‡ļž˙×P¯ÔKø]ī’ˆäd¨Sõx!Ⱏ‡å—":5ú…*¯…/Ÿ ?˙ ‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ã#š¯›ČņȎd|‰œL8ãŖQuûøy¯đáū  OA{‡wŋÃÃü>Ht1Ž?‡÷‡"9nHq!āãœrî"C’r â$5—ÃŅÁ‘Ėķy„i،ŪG2>ō8L"čģ1‘đ§„#á34fˆ@ˆqđĄ)ė’ Ÿ?ūPŒ\‘ŒGĪ,øSaˈGøgU¨\BfpŸ…wĸ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ 0â"DqDDDD„qC‰ œ"""ˁ¨6‘ÃfCį˜F2>aˆūP#ŅČĖŪGÉN„{ĸVŋü/fŅ3PŸ’ÂĻjA1ÄL‚S•2°ŧ*‚7* aN[Ės—rŖÖ†Ķ‰ \N8‰ ÔāN8‚"""""""""@đ°AĄÉANaÎ9 ãš DÆGÄ]ē°Ļō>a—eÆ]‚—AMæĖÁÅ#ÅŪŧ.˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áčDDę‚".""!ĄâRDg&$Šˆ”™Q& šƒ) -$ĘÔڙÁœ¨$åPžĨ9PdåAø§*æ™P~+ r|\Ęr°†!G!ąĘÖhČC‰)•S âN0ŽD|Ÿ3Ėē.Čų7‘ÁĖŲcˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆdxÆGŒEÃr.˗xasž#×Ũc÷˙õ"DD40„DDDDDDEÄDD‡ÂņB%G‹Â"OĻk"]F#4gō>GĖ"čÆaŒP‰s#ŠGĖē.F"8rčšä\B8\2DˆˆˆˆĒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûâtËŋ°ŋPŧ8|0=ø~˙ķDp"q>ˆˆˆˆˆˆˆˆelh‘DC1AH2B‹“eAPNÉŲN9,-ÉAsÁXaßđÃ`ÊظO˙á… .Ô!ëÂ\¯đB8ĮüwÄ(‡‡ˆÂbqâ,ˆ‰Õß˙˙˙˙˙˙˙˙˙˙˙˙˙ûaŧ †¯īđøPÁ2!+…ßAū]ˆāAp.G¤“‘ŋ¨Ká|Ö °ßøv ęC˙øs d;ŖPÄ1A˙$™Čņqˆ˙Âaü˜|‚9 ¯˙˙˙˙˙˙˙˙˙˙˙˙˙dSˆYrđøZ…áDn0UŊ|Kr70äĮ!Gˆ !v\&G_<Dy‚ ˆâë}Č K Y 8_$<‡äŒ)H˛3Íįė՘ĄŸđBCø‚’sú…Âʅ"8ˆˆ“Î@ä 4Ë{ Ã.‘âHrNCŽ0gIˆ]˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đŦ†@`rŖˆˆ™ČÜp3G ķŊ˜ˆųb8jeȎdxŧ.`<Œf#Ã:#Ų0âė¸+EŅtpB8eĀđܸ†š¨Bá*)×Aâ"$‡DÙēÄ‚$Į8÷øy°Ŧ* œ‹gŗqĮ=šg‚œ§)ĘãœđS”än$Į0â&N9ÄDDDDDDDāpâ"""""""&D#˜q†häĮ=ž rܧ)ʸô*9Į?åaNaÎ9Į%G"qÎ9 ÎV>DüR(ä(æqN"2P×˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDAÄDDDDDDDDîapå."fJb)ŒGōŸĪįƒlŧG æUsHÂ!tpB>G3ÄG#ҁ ˆo#æ#ē.Ž3„^#ÆhÁ˜">G GČâeÁrá‚8)áMŒÂ=‘ãÄP2äG"^$>O‘ã8“sGÉp Ž` ds#†@3‘ĀĖâ‘Ä9ķÅqÎ9 ĄČ8ær ôãđæJa•|?xB‚iqpDqDDXŒC‰ …áÂÔA`!õ„$2–âg0ቍŒŽ)ˆÂ.ŒŅt]FqˆÂ4ČæGČųŧÂ.‹ĸņ€É29‘à 4‹aī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũs%°"ŋÆ9¨"'p°@:ûcØæ 92á˜A‚¸ų„tdHæeB3А0DB.ˌ¸!€×4ē0d|˜ ĘūWąl?äē3áˏ ĀŦ' ¸ÜN9œ§ų#æÁpd ˆáˆ™ČPLŠ0Đ6„DDJG˙˙˙˙˙˙˙˙˙˙˙N@ü`Âūl5ˆá–œäŌpƒ)Ō –Ē"$n‚ÄD‚9n‚ äAÄÉ ĻÕŠĀBá‚8Ūō / A3ޏ )P2á°GˆC`Ö\9ärN"$5 ­Ŧp„㉠Ņų4×.Ÿ˙˙˙˙˙˙˙˙˙ęļČw"AHáî[Ž"CE BŗČGä — x‰ĖåHސîaɎ8‘D}w čÄÈ0ŧDÐ˙­c„$s9îk9ëU÷˙˙˙˙oÄHžˆø_˙†Ašĩė7õ˙˙ūģ9°=W۟ŋ˙˙ū×˙ë˙×ß˙˙īũ×Zü/}˙˙ũ¯‡¯˙á¯˙˙ßūĒ˙¸~ī˙˙˙× õ˙ÃøR?˙˙˙˙~ũ˙˙˙áŋî˙˙˙˙\/×˙úŋ˙˙˙ ÷˙Çęŋ˙ū¸_÷{áø_¯˙˙ /…;Ž÷ ūė€ĻB×õ˙˙˙_āˆ2ûīá` Dzë¯˙˙˙ĩđįoJvCīŊÄD–Ĩ"¯¯˙˙˙ēūAwÄ!8äMû÷ųß#Šv*ˆ™×˙˙˙˙ũ~"-Ų* _¯_ĐC˙˙˙˙ûŋá"đƒũë"—‡“ĩ$8ā˛ÜB˙˙˙˙˙ŧ/øĮ6ÄJ"zîŸđ‚!GXPFÎŅn˙˙˙˙˙ú„Lpü)ÛĐĖF$â„"Cûú™ ņ Ā“3Y äQÂD#ūŋ˙˙˙˙ū‚ūŒÂA1:@„ã‘W!!# á_‘‚~Š8`ÉYö*Læ":ö"B<ˆEÆW%ø˙˙˙˙˙˙˙îŧ? …¸‡ÁĄIÁ°dĮ&95ĘHhIJy]Luë„ü!øDQ×ÃF# Üs8ZĘåHõ×˙˙˙˙˙˙˙zPķ$@ §/‰ĮxPũ…â"°‰9oCī×÷pōšF+đ˛cœsŽšøZũ˙˙˙˙˙˙˙_⃊ôDÛäĮ…‡B#äÎÉhĖ’9UaG8ūálĀ…ŅzCĖ" "čgdÖv%‚";„ˆķĩ…•ÄŠoЂɧáp°A‚,Ģ#s!×˙˙˙˙˙˙˙˙˙˙˙˙ÄDDDDDDD28 ƒ.Dpr8.ĖĀ4—“ä`2Î Ā¤|ÄuFh¸g:3ä]—f28PSŧ <Ü]EŲq—F 12>G3 šĖ‘ō>b<ŽŋÂÉq×Â&>°„T}Ãr^~+‰9PJgô0䜸8į✩•„K8䜎 fcˆ.9Æ9 ‘G Āâ"""DDDDDDDDDDDDDDDDDDFG,ō.Ī"œD#„GŸƒá†SĮųy @„? (.ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙đ”ˆhqwŸ2ō9L‡؈ÆyEҌÂ1›ŒEŅtq#b‘ō>y"<\ŒFŅ.3 !Ā< ČâgÁ—EĀđT#ÅĀđj$GCˆˆˆˆˆˆˆˆ–ė¸EÁ¤ŧ`B89 —Á€ˆŦc s9xS”åAœ§7› AN\Šr°¨8įņ#är1eÕpũū1EáéDDDDDDDb1b1q4 CŠ:;BÄH&RÁąŒ›ŒFhô]—n0ŽlĐqĪgô*e&Ah1ƒĐš”AÎ{9ĪQœŽ8į˛% 9q ~â"#‰ n8j…“‰ˆˆˆˆˆˆˆˆˆˆˆˆˆī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ģ˙~éÂâ /Ä"pÄDDDFŖĄîظˆˆˆˆŒŌ%dĩ”æHˆ„q=š2čē1ˆų0‹ĸčē.‹ĸņ.2âČäx)d|žäxÆGĖDr1˜f#™ECáaIėŠ˙:…üŸ‚ė+r#äQũT=BC ēŸÎŨHƒâ= 8\(Q- Dz°īøH/áf„xcBqđŋ˙˙˙˙˙˙˙˙˙˙˙˙ÂÄDDDÉ ˇ)Ęr$—Eȏ#ˆ\eÄBŽA¨sÁNSãmHb å@f‘†x%I™ŖŅÄxŽFâņ8ĖfŒ‹ˆGÍä|&qC7G`BčÍ#‡"%‰~+Ítb3EĐSzœaÉō>GČų0ÔöaEŅt]Ŗģ‡Ã_߄ĸ;ŋ!¨91ČdˆâC4q8ˆ„ˆÜâ""IĖ8ˆˆˆˆˆ‘¸ˆˆˆˆˆˆˆˆˆˆˆœqČāx) €n NÜŽžEҌ˜Eã N#ˆÁF ‘ō=žyŧ)ĢÎŅ“˙Aá’Bë˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃËN{ˆ¤x ŠÆŦų3ȑ ĸ9c@PG"ā\‘ĖĀ4œEĀ‚>Gv]3 Ír#‘p<9pnHeŽ@đÎ9 IÄã™Čn[ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆb Yā§$9Į3SH`y.G 28‡TŽdpr>l‹ŗĢ03ņŽ'y(fķy¸‘× ŠA…„EQˆˆ”āÁ cœ‘ƒV[Œp„B"."ÂŦTEDT0rž h–ądQÆv=˜„ėb.ÕF‘ŒŖC!Įŗfydųķ%ŅėÂ=“äfO‘Ȑh!ļ\!pÉBāĘ\eŲpÉW˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øn‚ ô'0˜zˆ^ņ† đôFņ1B6#ˆˆŽ"0„DDDC‚4F3 â.fˆē(G#QŸęņbã.Ėt]ˆä`Čä\B80G"čāËŖ#ÅØg#ē8ŒfĖķ.!ŽDqLM=D;<;ëVŋ>ę¯ 8| „§˙à DDD.‚ˆˆˆˆ†&" Јˆâ""44 Â$B ˇ$,a#/˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙ČÜ(RPĢ’Ī‚˙ę<"cKÕp ááXCû…;(#ßwA°Æ L}L¤;ÂË(ōEȎš=‹ŋp‚„Ô,8PÖ悝ũ˙˙˙˙˙˙˙˙˙˙˙˙ū‚.ŧ:¨P˙qÁD/˙ŽũÔ)”ūü.‹rŸÃøJĖ g@\ēC#L”ė‰{đĄ!ÂøPĄB–ŋX~Ąâ ģŌ…)ü.˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃÄD…DDDFGÃ(ēD…‡rܡ Čų —Ãĸ>ƒ†o4PÉüöo0‚"<Ō'Čæ7‘âņ¸ÆGČæGF<)ˆD{#ä„c?ŲOķy!B"ˆé˙Q ™RÃîŋč>q]WnâCQČ9åšnFäČgr âC]ȃ’qâge҈¸f §˛G Ô9Ÿˆ D6#ˆˆqJe:""Ĩá(+ E✧)Ė9āŦ*‡öqĖäAČaĘrC‘0§"$12ˆ4sx)ĘrđŠ”å9N[•ØVå9 ‰dX"YĮ8äėKq3ãgrg!Į†=Ãaáq ‡áȘjIĐÒqũaKq/aˆˆˆˆˆˆˆƒC„DA‰œˆˆˆâ"""""'á'ÄDDÎ!™˜sŽ1)@˙˙˙˙˙˙˙˙˙˙˙úpßø ŗßÉG;/˛w˙<Ącú„%ÁŌÔ1ŋ' ŽĒà qQ"Žz‚ø‰ĄČŖœ|HbäšĀŋ‡Ä?øPČ}į¤IŽ;˙˙˙˙˙˙˙˙˙˙‡ m†Ė­B‘ ,‘ō>G †cˆŽAÄ…ƒ#ĸ.đ¸ū&Oh~[‰ >ŋ â"@đR‚ @jHÍĮD‰NCÜō:ęSæŠ"""A쉸’qėM"‰NĘW“įō37“ä|Ūy#ĐLöaxøÔ+J$Aã˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ã‰N[ˆˆˆˆŖØâ ‹æG " ¸ˆˆˆˆˆˆˆˆˆ<49‡$åšN[–æ˛NS”äAÎ9 91Č09œŠ•:‘ĘxAČÜ!$æ%Ü,‡Đx-Čܕ r°Ŧ.L’ŗœüS•ĮķÁ Ô$9ø§)ʸđTsŽx)Ęr —§-ËrāŠ9Į'"S‘ÁAÄH/Ąä‡œƒ+”帓Hƒ‰PցAw 㓘äQɏ#‘v`#†‚8¤x¸„pË. ĨĮ‚”™9žGvc7EҚ.gû1‘ō>yFˆē/ķ0Œd|‘ō9ĀBäG‹†`$@ŠqBSŖLęĢ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙7"""""â""""""""""8ˆˆˆ‰8e—dŽ"AĻFEĐ"ÜDã“ãȸD#5ĸ”ˆÛ$XÍYÕ8ön=žGŗDqGtb0)0‹ˆG3fiyŗ?›¸` ÃÁ¤¸d#Â ÕB""""""""""""""""""""""".ž7‡; ōʃŽ~CČúJq•0k#ÅÃ;ˆøˆˆˆˆˆˆˆˆˆˆˆâ"""EbW•öo6DpPGČā\ŧG29˜EŅqų#ä|Ž!pɲ8d‚Šp< ?˙˙˙˙˙˙˙˙˙˙˙ü/áYĮŦœ!Čāy“LĀ6ˆˆˆˆˆˆq4F^uGeŒ™ŖZ$gz;ĻBŨ˙ÃB|;âlō9‘ȸ+ ?ˆa Œ!ë˙˙˙˙˙˙ŋ¸q&8 B"(ė¯^ÕŋüĢÄPR(â$5¤5Ä? Ģ˙˙˙˙˙´áüHäšNJEŧ/Vwč/°â„Â˙_˙˙˙˙ĸ á˙!š9œĨķøaWđŧxaB ˇ2ã_…˙˙˙˙˙đąÄG‡ŋáūũ¯˙˙˙ūŨÄ8ü-P%˙_˙˙˙á„_˙ü¯đŸ˙˙˙āË6ūũũ˙˙ôƒđ˙ũ…áo˙˙ü=˙õÂ×ũ_˙˙˙ü+¯ëđ˙˙˙˙đŋŋú ˙˙ūŋđ—˙áX˙˙ũ~|-˙Õ˙˙Ķ˙wũĒ˙˙˙ß˙áīū„u˙˙øZ˙ Ū>×û¨˙˙Ķ×øxŋ­˙˙ü.ŋú˙ū˙˙˙ũ˙ ˇõ¯ŋ˙˙ū˙đõéīë˙˙ūø~ü=|)Åa/˙˙ūßņ ˙¯…á˙˙õ¨pŒˆ#Ę˙˙É‘u˙˙˙˙!ČbGa˙dØ­?ņqČäļŗ˙˙˙˙ú;B-Äf×Č`q(ā"89åA|,Šĸ Ą­ÂÎÅĄDDD‡Ų6e÷˙˙˙˙đđAa”W2˙;ã—Ær㓘äGōsČ ü&k˛¸(9R9‘É˙;5Éē. ËÄy†&h¸k‚)ü$Ay'…˙˙˙˙˙˙˙ũB!uerĄæN8ĘKä(â&˜äQÄh‡á™Ęq8æqņ ŅįÚÖå¸h@ak΋%&GČāCLĢôAĨĆ6 ‡˙˙˙˙˙˙ūč’r{ķą@# a–G28)Č#‚.]E°PžvZlƒ‰‡!G$ä2öŖēüŠ;„$6@'øpŽę\¸NDÎHq ‘‘¸”â‚f´`ú;ˆ‚$AČw‡Į˙˙˙˙˙˙˙˙˙ũĄØžĩÃ+`\¸.I师TĢÁ!û;Đ6"9˛v$‡cœqųuúÆEŗĢáPYs#r៉ X?"C`˙;qQnS”ä‡Â!`.?˙˙˙˙˙˙˙˙˙ä”PÁDs#…2öá U#‡.…$d2äČ ™†y|@áĮ„ŠĐ`Ž ˛sëü.TÃūv —ÎÖB˙!°r#ˆ”ä3ŊŧLpŽĄ¯’āW‡%Ė. ‘Vf`|ē˙˙˙˙˙˙˙˙˙ūÂgEųÚ28¤x¸k‚ü98ˆ‘ÁĪūZ‰pÛ/ė2é끂ņR8*Hhw5„u͘X<ŊšOÎʲ–ŊÎü3 ĸčģ.‹ƒ|Н…9'!ėđb˙á‘ō8*—. Ņ.‹ƒEPB"BŽAüũˆ‰‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆËr Ôp@„D! c=Ųė…‡pdqNĒHsŽqÍQČå9‡8įãœr#•‚7-Čāņ1‘âņ)0\ "83Ā‚āÖ`B<]ČÖGČâ@ƒ?‘ķČēC;”âæa5Ž3ˆüf ˜į|“–擐nâeW˙dD‡qDDDDDDDDDDDDDDDHä6g#ˆˆˆˆˆˆˆˆ‹. â#6 fhē/#y.‹Ŗ„b=œ—\H-9Qĸ~Īxˆ|ö#ÜDDäĮ8įd|Ž Lå8Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙đĨ¨'⁜aõ AjEšr” ¨}MQā 2t7œ‚^L‚đŦ+ røÎS”æĐäb1”č“FŒŽÂ.‹Æv]"<\6Ė@2Ä.ˇ#† ĸã. —EÃ$0GpČ"8ƒAeĀđgB"ˁŒÜ\gĸã/F#ˆÆn0)„ôąĮ†""E„8Pˆˆ†Bl8ˆˆˆˆˆ˛tH^;Œâb$ŒîŲq—e!›Čų!œÎDIŽg ŽA§ÆãœrN_ ‘ÜsŽCaÄDLäDDDDDDD˙˙˙˙˙˙˙˙˙˙˙˙˙Ãūīáv\4á1áÃ+y ÂÄL8ˆ’b"!ˆgiy<Ģ3H‡˜ æd"$đšĸŒ„gXÁžˆņtxŽ#ŽGČ<Ūl‹ÆxÂ.Œds6ŧG‹ĸã.FÃ،ūOÍtpŋúĐXx]{KcDd¤G)õ"ĐY xqāėDo6fķų՜FhЈ†TŧĀ„s?eÆ`‹„. ˁƒqĖ"čöG͙äc#æ‚0)†c#är1‘ō<]—#ē.‹ĸėšƒGĀdĪú‡É _‘„#Wôĸī*‡˙ˆˆˆˆh\Gq'„1ˆƒB,Á ĄˆˆˆˆˆhDFDDDDXC‰!QŒ¨‰TSß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„ū ¸^ŋ„91Û!jõˆÜ§˙đ¯˙˙ūÔ-đÂ˙ū!ĸ0–Z¤ íņS(÷.ˆ„DááBî…˙ÖáŖ÷ø~đë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úá°ū ‚úŌ"­c‚a~˙ážå?É8éBá~=aü/ čw„EøTDzŊŊ‡ÂŋõŅ!aáø}ag@D2œ'áđ°ŗ¨OĩÂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂŗÍbĖžƒ#…#† ¤„]—EŅwœEp‚ÍæˆĄF  †{#æy@Šq ŒĐf"čÄq‰ō‹ÔĨ,$Fk͇äš5ŖąL?ų¸X˙ū˙˛y B÷ūÁ_Ŧ8|8ˆˆˆˆˆˆˆˆˆˆˆ‰ 8ˆˆØâDqeÃ$K†Â8S ĸāA—ƒ#ƒ„EG” šNĄpĄ~ôĐ˙˙ÁŊ¸Pŋ˙˙˙˙˙˙˙˙˙˙˙˙ČeŽ@‡œ†“[ w °8Õq påšrĆ Â.†D3yÎåĘ)„^0‚žČų.ŗ} G'ķEšApņ3ŖE’.ˆ}l?æ ÄÆs(ƒA 3 !Lä„ ‹š'@įâ6ˆ„wl¨ˆFB3Žz*×6e@.ižfhđ…ŲėÂ1‘ãŲG͙ŧÃ.‹ĸčšō>GČųČųBčÆGē.2āš€.\ r84 h"˄.Q!G˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…¤{’ĐCa ˛OÄ_wÄ>4(ˇâ"""!ņaˆˆŽ"",!Ј‹BˆœĩYsŽ{<ã™ĘƒÁ–å9NTÉ7Cˆˆˆ˙ppÖĄCáCÖ¸z¯ũq„Ü-Œ5B"ÂWž‰Ē#l¨‰æ€š΁‚B42@ˑ4ˆy Č3%Ų 0fŒ ¸ĖdxöGöG29˜eŅt]‹ŖŒÆh‹ŖŧŸ#äs7›ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡XDûÛÂéC‡õw_ ŋđøzáqø~‰Ē 8CĮđØC"'ᥥ‡áu%xKđų5°”/øZũ?.‘G3ßøPĢÂđĄál(K¨\.‰L~˙ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡ū†õ˙"¸{Ģ…_ņ…ÃÂÂ)ÂČŖ™äDÎÄ/ßPĐ4>ˆA‚ŋŧ/Ģiü.AW[îģ‡Žü/ čˇÄP ”p†Zr8’āĘT2rpŠpĄAB…)ŌĶôũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ’iÉŗÁx~NƒšF¸Œė+Â)2´ŒÖk^á×úŌáu đ‡ GШÄcD‡‡üäQâĻ öĻĩū""""$3Gķ`T1‘Ė‚—Eâ>aÔā dxē.Ëš ˁ Ā2 †įō<]Ė#ˆ‘›đ™tqF"ņqæhē5Ŧ͘ž¸ ēB;‚ĸ1Aü6"(úq˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đÂ!ä‡ bA‘ÃÂe،‘Ä.‹ˆGÁØæã™Č‡= O(G[°‡yäc4EҌß jÃā”Š8 Cđŋ Á“ŗPŸ’ĐÖN„•ž‚$6a‡8ær°§* 9()Ërœ§*9NJ qÎ91Ėå9n[•Į8ær´)Ęœ¨4ÉYĮ8į‚œŽ'¨?ÔÃ9¸ÎW ƒÁS)ÍdĮ!đ¸ ^åÁ 9’ãœsA'"qĪ|x+ r8<sÁåaNV…A?9L§*†ƒŽ{8įƒyā„âpAŦr C<܈9($惉™ÄL8ˆˆˆˆˆˆˆ‰q"ޏ †āĐcÁãŗ#äq ‡!‘Ã4Ė,øT_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü-a‡" îHs:qˆˆˆˆˆˆˆˆˆˆˆˆ DDDDDDrĸ§Čæ""q„DŌâ""""""$LBäTĻ1šŗHęDr4 Õ暌‘ã]"8d2ᰎ!ĻG\#†@7.eũÃáyˆ‡jû™† …XC„0Љ@."""Â)ķVa2>hĪA q—f$ø†p#AŦÎT9PqÎ9üöqĪįđWsÁnS”å9 đh9$5Į#’ˆä6CAÎ9Į$å9Ā BAģ‡_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ũõ0°ˇ^$‡$˙ũ}tB?ŦDDD8°Ä1`â"""""""""""Ј†cÎ' 0""""u‚Ą™ĸ!”#x˙†ß!lĘ!áÖų #XD˛Ã …×T.‡"8AŠÜDG˙˙˙˙˙˙˙˙˙˙˙˙˙ Ø`ŨAt…ĸ81¸zž¨B%ÂČŖÃ C`°ˆQė(AáIxC_øaƒ$<,!‘ķ¨pũB†hŽ …ø§cøØ ÁB…ĮÁÂ8A‚au˙˙˙˙˙˙˙˙˙˙˙˙ÃØÅ! ģ‰ "F°°¯ˆ`}—Dī… ŗX„sĄĒėeâČ;B˜ Á"7ßüÄo#Ȃîƒ#™R9‘âč!$<ÆŪ`CšyčØc8‹ŗB3Dƒ:ĮķfCČʲ“*ōH.âg0äĻ$‡nŋ~=FG¸G  ˆey1ÉÁPz´HFi !Gâ E æ Ã„aø3ˆˆ‚.‚Áp[ 285„@đ+rä¯*˟?‘ãˆē8ËŲŗ0ŖD]EÄ#Æ0Ī GČņtqEâ9‚dU}HGK˙˙˙˙˙˙˙˙˙˙˙˙øfƒsÅL ‚×…aD‚EÍBcœrc’œ§)Ęr°S–ä8į˛(æ‚™pAüØHr(äX0䜐ᓉrsŽqÎ9;8ærœ§0įÎk<h‚¸†Į!‰d<rÜH#hœ‚ˆ cî[˜sŽIÉLrNS˜sŽLsŽ~$9œ”åAĮ4sÁnV˛rPIĖ9Į:q8â‚ Ž$Į Žv\2čâ1›ČņŒÜ]D ˆwŸĪ#Ų>O‘˙ÃÄC‰IEÁTDCCˆˆˆˆˆˆˆˆ‰Öaˆˆˆˆˆˆˆˆˆ˛!‰t ‡q"‰n1%á`„DDDDÄDIa’rTgō<`Čų7‘ãˆē.‹Ä|ŽEãfGČá–]PÍ#†Hh#á?˙˙˙˙˙˙˙˙˙˙˙áÄJ|‘ÁGŦ9„’q!ĮČ68G-ųØHrcáPˆˆˆˆˆˆˆˆ‰$ąrT+ķŽq͆ ¨8į‚°ÖLûŠįÔÜC\rrœˇ$9āŽ8æÂ°§*A8)Ęr N9 ã™Í9Nh)Ërœ§0äXŋâ ĖåFá|2>l#ÄÄDx„ xÄDDDDDGDb„DDDDDHļv*C˙˙˙˙˙˙˙˙ÃØˆ3…‡„„DÎ B'7xđÁVÉŋå^ac Šųq!¨*@ŧIs0#ŠPØ@ÁxaD,/˙˙˙˙˙˙˙…BČ7rˆđâA´s’GrŅkxá0°Ŧ ø'ČG$8ƒ.ē… ŲģĮm…Š đÔ0˙˙˙˙˙˙˙˙Aų aĪŊ4$AÄ}oˆ˙Âņü‰ąA$đ ÁCøA˙˙˙˙ųø3ÄNĘ Ž™x8em|0ü8cÄøh#–&ˆā-cÃ˙˙˙˙˙ JdļbD¯˙aŠđ-Ė‘xĀ×ú˙˙˙˙úAČčDÔ+ ŋáÃ6!áž˙˙ū ÂđžQÂđ˙˙˙˙ÃÃ…Âø…†˙˙ū‚đŧ?˙˙˙˙‡‡˙ _˙˙˙˙áápŧ>˙˙˙_ ūÃ˙ ˙˙ü/ ×†ūÂ˙˙˙ũ ú ˙ ˙˙˙ŋøđúø˙˙ü/đŋá÷á˙˙˙‡Â¯ũB˙˙˙˙īû˙đø~˙˙˙ .…˙ë˙˙˙đ‚ûūūŋ‡˙˙˙˙á÷ø˙˙˙¯˙øZđŋ˙˙ūü?˙æD? ˙˙˙Öü†$˙Ü%āˆāÁđ˙˙˙˙Ô?ˆĮd¸_ėŽfÃüqČaĉ°Ŧ0ŋ˙˙ūŊւxgaTDÑG FÅ8{öW 5„v.ˆËŲ?˙˙˙Ņ\ŗCüî¸āG‹šĩ Ē9Į3ūŋ•Å@‚8_ĘĖ#æÄAGd$|˙˙˙˙˙ūâ˙"YđĄˆŠÁDG ˛ãáŠëĘæšĄ3”âä āŅÃ˙˙˙˙˙û‰ž›ÄHqȎĸAā§*ekĘęŋüíPųč˙三 Į*x‰!Ã#Å=Ŧ ŋ˙˙˙˙˙úԇĄNŋâ@ˆ#sÄH1~á˙;û’ ˙Y—0á ›Čų€…éo˙˙˙˙˙˙˙˙ÎĀ‚|"č¸.^„vfŪAt!Á­GķĀxo ž¸ADL8á‚"õ–]— åÁŖŦ`ađƒ˙˙˙˙˙˙úac„†d&˛Sį€đ˜SŦGŋûäxģ.FČöz6 Ä.Ášn‹‘‹Ŗ†]ˆäxÉō>aEŅt^#ä|ŽF2|ę‹ĸčē.‹ĸėÁ‘Å#‚Ą#‘t] ö] æaœ¸ËŒÆ`B8ĻķŧyDŒžEŅtf‰|Ÿ<‹ĸņŧ…0Œd|Â.‹ĸčē.‹ŖˆĄČų#ĮŒđÎ2ėģƒ8ˇ'Œčŧ`CÉ^GÍæČō1’×0Œfᥞ$r‰čŽfÂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ëq7ŽAˆ9ã“ÎG†Ÿ…9S+B¨g*†ƒŽx0_ˆjī…x)˙ ?“āÔän@đ.ä5!”9 ˇ)ÍšNaÉÁXh* ŽIĘrq8į㒃ŽLsŽh8ä0ä‡ ĀįƒA A9 ‡QÉ9ä 1Ė䠔rŖÍã‘G`™t`("ž`ˆâ)€."z(#Ȉž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü"œ!`@‰ Čæ""""""""!Ą!â""'k#hDXB""!‰ˆ Ƥ‡6ÁJÃAU”äŽsžÎ9āDDDDDDD†@ÁCų-IŽxš#Œē1ŸÍįø}áÁf› FŦ`“†p‚ÄD`„DNÆČŽdä{#ƙ9EŅtHĖ#ąHųĖ31œG ‡0DpÁq AQÉĖŽFšpÉp[ ¯˙˙˙˙˙˙˙˙˙˙˙˙×PÃM.ˇĶĨ¸ÄDDDDDDG„##r°¤q乕QqB3ˆätgƒ#ƒ‘âčÆG3ÁČų)#™8Ëĸņŧ˜eŅt^#ÅŅt]EŅt`ĖGĖ"áČᐠÂáÁ˙áD~=ā„oÅņЈˆˆâ"""""""""""Á"vM”ģ˙˙˙˙˙˙˙˙ũũų8ČQ两ĐwųÚD(ų`ÍE–ëũ…ũu˙§pĄ `™Z­sŧ0I >‰Ą„S–Ŋ˙‡Â Ã˙˙˙˙˙˙˙˙˙˙ūđk@¤˙žųp‚$üa O˙øXa᝔H‡˙Ī@—PÁē/ķâ/ôčŪaEŅt]F"čē.‹ˆG28¤xöhĪd|žEŅtc#Åâ>f‹ĸéŽSĖ2äb!ŠGČø)á—EāLĀb9˛t"‘âHŒdŗ#Æ<ë‘õ%,áDdPi…Äã¤%>”1Iī˙ááÎÅAÔO˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""""""""""""""""""""""""""""HsŽgˆˆ‰4rr;. †t{#æˇaBë˙˙“â@˙ō `˛8ˆ[Č ƒ‘G!Ŧ8Ę0â"2á¤\fO=‘ã&r0ŒYėÃ.˛9ˆāæ0‹ ššá’œŸB Â˙˙˙˙˙˙˙˙˙˙˙ũfŦ„Ą g0šBåmH@9r áA ,IÍÅH‚āÁ `Äû.sÄęŠp¤€Á9fKÄ0o'ô^#™˛.g‘ŒÂ1‘ķy„i˜EŲÄfŒ]eĀđf#‘pÎ\ A¨Ždp¤pPG2>GČāĐ\2ČāÁ7g0¸p¤s#ˆc#æÅ<‹˛čē.ĄūP“Q5Gąâ LĶũĻ8Ļ\+„ ˆŖ†"""""""4""$ ) $EÂF™ŗ#äųäc#į™Ŧ!š1Čųŧœ“‘ėĀ.ĨÑō9#. — '.!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?„uj?§Š? PžģDnÜGČų0Ž"ņ8Ž#1œF2>aŒfˆē.N"čÆGĪ LÆGČņ‚.”Äc#ä|&]EŅt^#ÅÆ\‚‘ÁÄ\.!‹ĸņ0˜Œ#Ųĸ.ŒŅĻš„ ;ˆF™#Įt]F3„Eâ8…Ņp™Čø!‚ Jšĩá(DQÃŦ/ņCū ‚ /Ã- ˜#— D3Pž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū"""""""""""""""""""""""""""""""""""""""""""""A qN"""""""""ADDDDQ —ȸ`Ō#™ÕJjųč>ĩōō7Jô.¨BŽ€žČm9H!’9!Î9Į8ær äž)ÄH¸"DDDˆ8ˆˆˆ‹.☠ĩÆy›.ËÆ+=gŧ‘đC0‚9wáōR Rųĸ ˆQÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũäĖ$ą/•yØģ) ÄDDų’“7”™ P!̓æK2>l)=čd€\ĐČ8č ÕŒŅė‘ČöGĪ#a—EČÃ:"čē.2ã.‹ĸčē33ˆÍÍæė  ŗœĀd#†H\2‚á¨GČņv`ō>b'3y„PˆeA@įˆäJa …’ĩ…Ŧ ID\>8ØeÆ6#$âÄaWđ‡ЈÂÄDDDDqä€ÁŌ*PgT\Cy#æt`‰üŽ#Áƒ‘ŧŽ!xŽF#` ˂™€i.Åà áEÁ !ƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŧ4ũ…ü.oëŠ9Į˙‰ãâ!‚Јˆˆ‘‘d$H ¨H vHÉĖÃ8 — ÂáĒ]—ų˛8ÎD|ŽF3ŧa"ņ02áĒp Âįh×đôū ĄxAxoPÖ B: ˙č_X-A" ÷â"Ė "ކ„D4""e—12 č$Œ‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Kđŋßĸ{8ÍrËũoāĢ‚˙ā‚":[đ°ēhUŪ† ˙%ákâ‘×˙ ›z>buū 7ÎŊČqė5ü0Ŋx~à ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū¸"{yׇôø|8… ÂzûĒÂ˙ĖŖča A?ųōÜŋႅ ųđsÆGČų†z1›‹Ŗtc#ųŒ"<)Ęrœ§)Ęr đS”œđWÍ9Į?žŖq ^CŒYŧœČūHŒ/;JãŽģ žSū{ë…˙û pH0†AÃņ)Ö:ū'AG3á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ‹‚P6‚ČųR9„Ė0‚Š€åĐ#ŽĖ G<Í~ž‚!ßEQB Ą˙…čb+ī@„ˆ9AČcÉ w ˛äĮ!–8Ôr ܡ%ÅŧĶ1𠈎3 ŒŅt]ČņŅâŌ‡„Âë áB˙˙˙˙˙˙˙˙˙˙˙˙äöšz o&")“"L•#ĩ0å,ʔJ‘B0dˆ¨ˆ8„"]Œ—‰r9EȎEÆ\!ÆqŒ#Ä^0‹Ä|Ã0dqM†H3ÄDeÃ$3 Ŗ8)äz.‹ÄqL#ŧÂ1 Ī$Œ"č)ŒŽ%œEŅxåē.ƒžYüŖÜ?ô,‡qðøü1ö„OÁÄD8ˆˆˆˆˆŽ åC$â|Št`ČælS#™„b.‹ĸčã9âāšp…Ņq`ļĨĀđ,. `×˙˙˙˙˙˙˙˙˙˙˙˙˙ëÚŧ-IG˙á°eČūˇÄ8ˆâ"DDq¤"'b.)΃Ę$dųÕr\!r6F‚ā°G"äG ˛ã.ËŖ\.2ã. †@Ų°?`˙ö…"9ƒ­~ü.xˆˆąŒ… ƒ0Hˆƒ2‰  —2 ČZ/‘ŒÃ/ķĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũŠú˙×ņ!ÃĢü>.đaBC‡ũuâ"""˙„(† ¯;2O˙Âų‡…HaŊBá^4 ?ZŋđđÃ˙˙˙˙˙˙˙˙˙˙˙˙˙ÐØ@pž‡ū)õˆ™Ä†[˙Ã~ ĸ7‹$œ! {Ģü,/å^uDB$gōb=EҌ‡›ˆ$r™ūÎÖŌ O hšã‰ +÷§ÂĐw=ÄÄ1P—˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆ"āxĄˆ‹.đ)†iDA ȉG"ã…ÎT…ƒŽË‰˜g˛<¤BÖ@ŧ}F+‡ũà xŌrN$2á!„"Hs9ˆ’ˆän""""""""""Ŋ"9NS‘äЂ xmŽl˜‹ĸęš=›Ž"čÄc#äq ĸčŧn1‘ō>o…ŋō"˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķ.hC@æ0„T#Š‘&v&Œ‡ŠĄžD.:āAO˜ 0ÂcĐ9¸—r-œr(äā§0įãœsŽNÉAāˇ"IČd!ÄDDDDDDDDDDDDDDDæä2ā§+'ėŅČų#äqM§E”+ŗƒ| Ŧ2ŨÃft^#äsô0ņärƒÆ$Į!˛Bˆ†DDDDDDA‚MY‰™Y°ˆ8(˜ä,ˆˆˆˆˆˆˆˆˆˆÁ“*ž‚ x1G$9ā?˙˙˙˙˙˙˙˙˙˙Ūo0c< }úĂ9 '-Į#Œˆ+˙) 82 ÁC>ʋ(:sP§(šÃ2 ƒņA ãųĮ"A> ŅŠ§!ļä\Òr7. øˆˆˆŒ=a–ä‰×ûāBġߑ&\.RNS–äÄH0<\DDDDDDDHÖɆ`†P„GX苪LŪažĪ2ėē/ĖÜ˙˙˙˙˙˙˙˙˙˙˙˙˙Ëq ?ør•Hjē ]zgņŒ%ˇ4F28yĖpÄDq†ã Đæ ˙Č#”åq4å8ČGČá´\¸üĖęAã&r(÷†ô„D“å † äQÆ8_˙˙˙˙˙˙˙˙˙˙ūAB_ū_!įŦ‰Ô5K Cø‰ŅđDpĐy æp ˙d€mƒ"#Āɇŋ ÆÍøŸ rāÜīÁŽš 9ä‡Hw7)ĘäS„]A"89Ž $ųN˂a˙˙˙˙˙˙˙˙ũaH›?øQ!G Ā⁠ė`lø“Dƒ[•^$nHq$_đČņ€AĮ3ŽaĮČH&š¯Ī"ᰎåŅv^ 8R9čcŸÄF$@2Â˙˙˙˙˙˙˙˙˙ūˆ‰1ČŖōžˆ‰'0â#; ˙, 0BEŠ9įfĄ¨\°˙Á•8Bo?‘ãL‡}T5˙hDDDDDDDDDDDDDDDDDDDHd!Œ ^&Ä]EŅŗEŅvc0ËÄ|‘ō9ˆų0d8ÆGÎĢ÷˙˙˙˙˙˙˙˙˙˙údĮ8įÎSorœ§"qČ*qÉ9h2š°ØâBŽ$ÄDDDDDDDDDDDDDāã™ĘœÞ sANSŗŅŒŪGČųä]EŅÄ]—ˆūo#‘r#‘ŒˆŪD˙˙p„D\DDIL"FŅŨ˛ĻFŲ›$ O‘ķČē.‹Ä☌D|ŪGĖ"čöGČų4ČųŧôaČy<G˛9’čĄg˜C‘üūlČqˆš‹Æã\ŧGÃ1‘ō9˜EŅt\ˆų7‘ãˆē8Ž#Ųŧō8ŒGtq˜Čų„]ˆų„c0Ž#ˆâ=˜g˜#¸4Á ŧ!ɎLq x6g!Į  r š„i›Ô‰gTJķ°Ĩ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õĸ_QqÄA„"""u„DDDDDDDDDDDDDDGŦLB$ē;´DŒŌ>GŖX\5K‚Øe—ŧĀfgŖņNŠ„gÍū ÔDDD…DÆJ#°$i˜Œ¸āBã.ËÄ|EŅv]Čņˆ¸†xˆæG‹ĸáČáHāæĖ4C˙˙˙˙˙˙˙˙˙˙˙˙˙ ߝ“ø\52Z[…DDDDDDDDDDDDDC)PĀgŪ… §)ĘÃJŗqPx)aT$åjs’ƒÁX^8äQÎ9đēŦ5ÔÜĮLDDFˆˆˆŒˆˆˆ‹˙˙˙˙˙˙ßšŲ…ÃõÔ?a÷ôĩãÂōB}˙¨o ˙˙˙˙˙ūIĖM†Ë˛ähĖČâžgrčŧa—#y†gfĩ”#Z†jĪæÄ]AHųäqEŅĻGÍæâčē.‹ĸņˆūGČųĒ.ĘLŸÉƒ ü)/Š3ŦhŒfˆã1›Íä|ū0‹ŖŽHF3xU ÂŊa鈈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ÁŠČqČcψâ.‹Îpˆųæz.‹ĸčô]"cøuŧ/˙˙˙˙˙˙˙–æöAĪ&sÁN[”æ‹‚œ§* 9ŦÎS‘šPIʃŽLsAĮ8æÃANG˜į‚ƒŽ"""""""""$¨"ŽqÎ9ėã™ĘƒŽx+ ÖaãyŧÂ.ŒGt]7Gí‰p¯_¸ˆ0BøˆˆžB" â"""""""""C„í<‹Ŗ4fŽ#LfŦŅ3ˆ›Čâ‘ō8 …à 2ˆˆˆˆˆˆˆˆˆˆˆˆ‰ pqÎ9Į8äsŽEˆæ‚œČG0专”åšîVåRfH¤ƒŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷‡P˜úáÄDDDFâ""""""""""""""w‘HȖAįTRe#8¸dr. äpm#ā¤\ Áˆâ‘ÃA60Ī7‘ōxē_[_đ¸oâ"""Ė5"QWQš0F‚ņĖ0)Čų0#ƒYpČ \ ráļ\?˙˙˙˙˙˙˙˙˙ü]|/îÄDDDDDDI—ÉĖ­‘gDHĖD|Ār9‘ō>GČņŒEŅt^0‹ĸčŧGČų#ÅŅt`S/ŧBžūÉ|â8;ˆˆˆˆˆˆˆˆˆˆˆˆˆ‰DœFdĄ˙˙˙˙˙˙˙Ō /áahA•č.ŋúˆQũēBë_ Aŧ¯˙ ūá˙˙˙˙˙˙õž÷‡Ü$pD{˙×ø]Ėr˛`ē.ŒŅt\!v\NDxē.‹ĸāštc#ä|‘ō9‘ķ„]EŲxŽEÉLF ‘ķÆz#™#įXØ…Ņˆ)€PGČáËÄx¸ĐdqHāÚGĀܸBčÆGČų#ƒAŒÜHĖ2äGķy˛8Ž2ėē.ËŖÂ‘ĖŽds#ÅÑÄL ąČ9îB9Å9øđaͅ FfŒgã„{#ä|ūGÁOæ÷8ŒF2>GŒŅđūøU˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūâ""""""""""""""""""""""""""""""""""""""""""" 숈ˆˆ‰!ÄDDDDDD…DDDHkšŧåĘr ã› ƒÁP{?æ4G\ū2PēßÔž8Â&ėŊŠÆ Ÿžĸ(äā§7œsŲ8,ƒņPIĘĄ1Î9ā§)ÉqĖåAėüTĪdü˜į‚°¨7 g‚œŧ"Aƒ8įô+GĮ‹CY(8ä2ܐäQȰB99œÃœrc‘ ‹9xaĪÖqĪd°9\h<ŠÃYĪ9NB9n$ Ž'DDDDDDDƒw…‚cžÉŽ{'“š r ÎSš sLyčÁ‘ķČē8˛#ZÉë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü- xˆˆˆˆŽ"""",!DDDDDDDDDDDDDB"""""8ˆiÄDDDDDDDíÃ".ˆˆœÎą9Äq”ų‘ōxčđ+"""""""""""""""DƒÁ îS–ä‡8įãš9 “”å9‡3‘8ärܡ$9œ¨'dĮ8į–åA "FzáCŪ˙˙‚A";qą4R@„˛ÅAčS•ĮŗĐК ĄÎ{&RzŠ ††ÁɎE…DDDDDDDDDDDDDDDDHqÄG˙˙˙˙˙˙˙˙˙˙ūô áņX œP†"""#ˆŒ!ēʸˆo?˜. ‘#är1‘ō>GČų#ä|‘ō>G GÁA€g…Ē ˙ „\„BáÂ""""""""""'tģ$šû˙˙˙˙˙˙˙û ˙ų— žôևú¸ Cöú˙Ã˙ÂR7,%Á¤75¯˙˙˙˙˙˙ū”ę+įdú% á>vaP@ą‡†äĩ=Ôaø<Ž@đTDē.Ëĸč¸7.0b@¸är"#†HeÍ1Į&9')Éx!¤á‘ō< —áŽ\K!p0`ŽJT#Z$g‘Ä])˙A"„qF™ä#¯Åaapŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų!ČaĘp@„DDDDDDDHdƒ‰N"""""""C,qpS˜sĐĨ9ÁŸÄ#8ŅÉđŧ?AGū‰Ū2JŠ|— čē13dryEâ>G͙0Ž"äy"čē1"ā†3˜\eÄ0 …Ã9t^#äxš#t\3ŲĪætb1˜ŒFČâ.āh DpČrč¸!ŒÂ=›3ē.Ėd|‘âčē/âņ#™¸ôqÂ(O‚Âá˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áĄqxˆˆˆˆ‹ˆˆ‹"@B""""""""""""""1DDDAÄAÄDDDDDDė ÎôˆžKĸ_<Ž#4fˆ€<Á‰!ÄDDDDDDDDDDDD0ĨĀÁt]EҌņČų.˲čē8Ėd|‘ĖôHÂ0e:4Ô§Ī.Â!ŪĄ‚‡ Bøˆˆˆ‰Øˆ—™͊Hˆä`ˑ9r#ä|ާ˙˙˙˙˙˙˙˙ĸ ãˆ˙Kˆáaü(â""Áˆ“.Žšŗ)l”fŒ¸6 ō8¤pj#™FÄ\/ņĮ"?„‚‰Nœ/ÍÄDw!â%FyK˙˙˙˙˙˙ûáqõÆžxPąŋ\ˆ>E(_ÂÃÂÂÃ×˙˙˙˙˙˙â (検›#"žEđÇũ˙ yŽC@á› 2á‚9FÄSq1›Ž#4c7EÆnˆ3.Ėd|Ã.Ėf$„]\ĖŅxޏĪdIr>o#æĻ"„c03qĘ fķČã1˜æ#â=ž">a—ŗˆÆ. dp ē8‹ˆG"ņŧÜ`‹Ŗˆ§°§—Ģ–áĨ‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ąCˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‚""""""@đ\q xĐŪuqāŌĢ ĘĻŖ†)ĀđĐy n]EÂ@Ô#‘v\eÃ|›"ņ  Ģ ŪG]ĪįķÆGĪ#Ų1E҃7‘ķÆGČų$Ģ˙˙˙˙˙˙˙˙˙˙˙Á”AĖŽõ(AJ‡nån¨ˆ‰™ Æ´kG#y„fĖfķČē(EŅtqG˛>#įķæO‘Ėķ.ĸJpB8…Ņt]F Ņfhâ1˜Gŗų?’t]tHÍÆ@k+ŦqDDDÉUQ†""""""""""""Bķyŧ˜GŖˆã.Œd|ō8‹ĸčÆGÍt{#äxē.Ž"ã.‹‘.‹ĸã.2āØ\ €Ėq„˙˙˙˙˙˙˙˙˙˙øBAŠøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ’c1މj(D"$EŅėūGĖF„GÆl˛á’Ą‡á†""""#Ŧĸ“#2c#2 E‚ˆÃ.˙˙˙˙˙û'K‡xˆˆˆˆˆˆņ!—č(˙˙đađ‚ĄÃđúDnSá˙û~Ā‘¸đĸ ŋ˙ᰘ_Ä0_˙垟ņ˙Æ˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙üļÁ>?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;\˙˙˙ũ}˙˙˙õŋ˙˙˙ūžõäkôīõ_īë˙ßĩ˙ūļūˇūŋ˙īëúß×û˙˙–ČZÆ_ëõ˙y\ē˙ōš¨‡Ëá4%˙č”B$ũ1°˜bôl ˛ˆ‹*ß˙˙ŽĻ@Ę2‡A‘Ĩ#€ß4 ˙˙˙ ’eāBC1Ļ ¸„•Đ!nA…Á$ ÎÁA€Ų‡D‡•Ã28e–āAÚ+šĮ˙˙˙˙˙Ō‚ ūÔØ!eŅ^k"@.cá†!"Tq ĨˆeAC} AæK`Û˙˙˙˙đD‹8 üĐHq3„V„D0Ą„"DYSa=`ĐRcēøÄ`ˆB€rå*#ÁÆĄP˙˙˙˙˙ūC*vcŅîH HÍ0D)@5ŗAĮĄC Aģ`‚2āšAE˙˙˙˙ņÄ#ąaŌÄb‘på’Į@ĨKRŌ)’|ŊáŅU˜Q8ņ "lc˙˙˙˙Ü&a2 ę4DX"­‘[¸ „#ą4] Á;Q"Ü2V¸DÁ`•B#”¸Y& C;o˙˙˙˙˙å5"[ƒKr!s3RČ.ō> ‘ō8€ĄGĸÜÃÂ2# PA‚^áŽ3P’q B  ąQ8ᒘ!% ĸĸDQØ&Ë˙˙˙˙˙˙„@‹’ą— Ë%qĖ(ŽLrO 4 ĘqÄ\ƒŽg#V¸.HŒÁ 0a 1äØ>WI.˛O4DY0Čņ6. áĄ*T‡ ˛ȃ¨Œ!™P…@hB Ȅ^:†ņq’°Í˙˙˙˙˙˙˙˙üÉH ë’Y73IuŪRƒ8BņÔd.•Œŧʄ u ށ ˆō\¸AnE " ÎʡS ŗ€^!Ŧ ‚TˆƒÂ ‰U1bH¸0dœˆ¨S‘"ާ_˙˙˙˙˙˙˙˙é(`K€°Lh‚ CjP× C[áŒX„0Į Ā9…Ę @ˆŖƒ;0-ĘÐĄ&á‘T"* DíH…„B˙˙˙˙˙˙˙˙˙‘DŠĀŗČäh¨Å zCŗŲ’’‘I~ōp´˛vŖ#ĮđHJ|"71–ä|Đ Á˜¸‘Āƒˆ¸k˜ˆņxŽEÄ#™¤Ä]ÍäpĐGČåf™†\˜Ī ôqGžGxō1žGŗ āĖd|‘ãGār9Ȟb:Į‘Č)ŧ˜˙Œ$Fđ—ĸ@c Ö¤Į11˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ųĀ숈ˆˆˆˆ˜q # \莱O‡ „?„„aBp‰Aā¨8įđBA,)ʃŽl!MæÂ ÎUd ¨= gĄS)ĘAzŸ—< š† Ŧ%Å9S+rcœsņpCAL*9ėˆäÁs9N[•ÄĮ8įŗņ Ŧ)ÍķņH*\Ŧ0įļkEŅFaFlē.ŒEÄ1ȸg.˃A—EÆ]—#ŧaeҌŽfps A˜â0 ųņMä<ō.d|ŪGčƒĘ‰z$/ ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ô"" Áb" Č."""8 „ DDE„""…ĸ""""""""""""8ˆÃÃB" ģDDDDķ.ÄīH‚D<Ūy—EŲtc0ŽFķ â1ĖD|Ž. ĻØĨÃpĻĖÜc#ä|‘å8‹ŖŲ8Mär.‹‡#Š`!āü/‚Ŧrc†đž‡ØˆˆˆˆŽ""$ˆÔe# LŠætc#ä|Ž)äc#į‘t]gH› †™€‡â/‹‡0Dp`Žf€j˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũŌá÷ …ČQčZ#‡ôB?¯„ô"""zĄ@\Dc„B‘.eï"Žg’’ X_ŋ‚D¸pũ|2ģũPŋ„ üÂK…áĄ˙ŋÜ(ūĄ~÷?˙˙˙˙˙˙˙˙˙˙˙˙ÆD/¯ â˜P0ūĮ$8Aõú˜ŗ„îũAeq¯†A q —r8YĀÁķ¤\5 ‚‚8Ļp…ÚœEÆ^0‹˛čÆnŗˆÍˆū~%ãē‘Ūf‰JLÂPą“Nˆƒ°ũ˙Âøz…úܚ•˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū""""""""""""""""""""BŽ""@숃.‹†pLÁŽŽ(D5܂9S* ë‘˙zū Ž/ø[đˆ*š ”䜆@+š‡  r &9Į"ŽIÉIČG-ČG$98)Ër °JČ;4 Á]Č7r7 Ŗœr㈈ˆˆˆˆˆˆˆÍ—’äG2>G$ˆÂ8…ČŽ fƒHÂÉ4c<˛yEŅ×ø_õ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙†ed(‘ŒŒf`;83"&"§ŖlD–Ļ"$d°čƒ ’vVŒ†d&…VX!y‰ Á‘ōIÜ1xˆˆˆĐˆˆˆˆeŜ‚”¨Ÿž†âøöLs9n[–å9‡8äĮ8äQČŖ™Ęrœ‰9nFåÁ($äAÎ9*""""""""""""""""?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ô¯ŋ­|(_÷ 8wB=`ž#đ„q8DD4" ä&Q/QœaF†n1›"MF3b‘ō>a™ŗ‘7‘Āƒƒ0/Ã\¸jĀđŅđĄ?õÂ˙p¸|…ĢČQá_…ø]đˇđÄDG ˆˆ°Áņ5B93ˇdn ¤åL¸8(˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙!GÔ?ė2ŨK‡äĮ Đʂõ ×˙ ‡Đąq„ŋAwûÕ ük„!øFhŌū`L„Súũ| ž˙×˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯…˙ŋ†Ÿ˙ !ļ˙ōėā~˙áė‹­}ī˙‚ôAũj{°™Ą›‹ĸ!…?˜EŅėߟČų#įiōWžæĩ Â3‚ØhŅ@ˆô/âCĐúøgŖG˙đų ‚Šīë\/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""""""""""""""""""/""""AUåĀš.‹ĸîE‚܈9(3— ē/F2>GÍæŽ…>"+ƒ˙â$8˙áŋ ĐTČX!ËrœÃš 9NaÉ9NaĖåa.$9ā”69n@ÄsAĮ<Š9Į? ”r AxC`äœDā¨8ˆˆˆˆˆˆˆˆˆˆ‰ÂCiä|‘ÁHÂuHT”ūŋ?˙‹úÄG…DDDČ$Bĸ´†æ°äpĻ‘ÃP¸!‚0āk— Œ¸ ČĮ˙˙˙˙˙˙˙˙˙˙˙„ūą_˙ÂÂūJ=’áNû#‚¸Ÿ1ĄĖdCP ˜3'&ddrøÎaĖåAĮ=™ĘÂ7)Ęr ãœr nAģVq0â"2¸×ũ]Þ" ‡˙ü(k „ņ'̓W&‘đÈxb""""" ˆ‰  É4x5ˆŅŸČų0EŅÄqĖ#ˆĀi‘ĖūGŽ2čņ‘Å#‚§˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙č)| čŦ Q4˙ … üąXiÄÔ=ŽOĄB Ul|DDDDDCˆŒ!%'× ¸7dT‹†y9'!ÄGáÃøX_˙ūšØXŋ~j3~™\Ã}Ę˙˙˙˙˙˙˙˙˙˙˙˙˙˙īõôFgƒV"F㠔ŸŽ—‡˙ˇ˙2āŅ&~LīLŽ~jĮ˙ū{Íšpi+\H2š„iæ¯%˙ß áßŨķ˛ÔA¨q$9rc䎄M& ¸r8P™p؂D@˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø´" “ˆˆˆ‹.‘€S#†i‚#æō9Fē1‘âņ‚˜Čņt^6).ēSģ8Dr.Œ€A‘×Á ¸4æō8uAžEŅĻO)"(jc#į‘ˆöoÍĮŖÆnAĮ&8ˆŽAĄßÃÅ ˆä‡Û3FģüDDÐČ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰Á– v]‰†[äQų‚DD…žWŋ˙˙˙˙˙˙äāĒãPÜS’ H6ÁJeP‡q2‚PC6…L§*f‚ đS”äH)ʂD…LŦ*9ā¸>ĨP–ķ†y Ķ(!ŦИsŲœŠ•2œ•žÉAĮ8įĐg+Ž9øŦ)ʂ\{8ႏ”ĘƒÔ{'Qœ¨4 ä2EDDH4"""@Ž˜ˆáHâ‘ō9A3gGtc#ä|ŪbA‘ĖåÄ#‘rŗLÎ*ø„…œ~ūߌ ČmA[$6Ŧņ)ÁÄD(ˆˆˆƒˆˆˆĐˆhDDEĄaˆŽ"""!Ąâ#ˆŽ$]H…BT"“#æˆÍČņЏÅÁŦŽ äq ĸāx‘ō8­NG289‚˙˙˙˙˙˙˙˙˙˙˙˙˙á‡ģä2ėÛb.p˙˙đĸ""""@ĖDH–a™äHŌ8`¸‡ˆØ9Œ GČų#äpk.‹˛äo0‹ĸčē.‹‚āfˆņpŌĘrœˇ)ÍÆūg)ʙ\"C;”á/˙˙˙˙˙˙˙˙˙˙˙˙˙˙°a†ádK>ÔČ8Œ)}‚‡…˙Áq:ƒnjp/ˆˆˆˆˆˆˆˆ”ä\ …›ü0Ų(¤"vĩ˜F3y€×#™ å@g đŋ×Ȩ>d•Ÿ aDęf§˙˙˙˙˙˙˙˙˙˙Û†!\K įPÁR<¨x~0Ž.& ą0äĮ!‡‡EøA†1•ęÜøR8ūC ßęPŠx¸e‡‰1Ć}ŒŒŠô˙˙˙˙˙˙˙ü3Ēa—]EŅt]—eÂeÁrč¸4ō90 eŲt^#‘t]Ļ\0G0†i€Ō(Ä#ä|‘›Œd|ŽF™7Qã#įŖy„q‹Ä|ŪaEŅxŪ a2>G‘ĖÃ.‹‚ Gdpų‘ÎĖdpØ]C$%"ˆē˛Fo#æ"BS@.\ŧGds7šFū$ØG$8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŖ„ˆƒˆˆˆˆˆˆˆˆˆˆ“DDDDáĢÅÄūaÍä|ˆâ˜F ˜eŅČŅy Û6Åų\k˙˙˙˙˙˙˙˙“&°uÄĂĪŠT8įāɆ~)9ėú•…*BÄĻA0—™Ė8ˆT…ÄãņH)Ęrœ”0ä‡"ŽCš AČ*&r ÜDDDDDDDDDānäƒÁoqæ™2ˆųBėē.Î š2U_đâ ŊÄDDDDDDøf‘Ā‚āÖG 8ņqa B<\CDEC\ē:"Ŗ7ŸÍ#ö`ˆæGÁá’—P ¸0!Â6Fk˙˙˙˙˙˙˙˙˙˙ūC>ÃÄL8ˆ¯:äph‰*Éfo<‰äc0ŒŅtqŅĀČgXņØ3ē/ˆāj˙ØDb2t*ŖĖÂč¸gŅIn"""""%kq´Š"$ŽšVfķ¸Ėd|ŽfœGŽD|‘Ė˜#ē.ĪEŅt]˜Čų1ˆņqņt\2˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ápd|Dü]\8‘G#u!×čˆâ""""""""""""""""'c"ˇ#^#ÄF%8mp@„ašJĘT…˙˙˙˙å@ EÃÉúâC5Ŋ7˙ û žä¸}knž˙˙˙˙˙áņ\!­ė†Ž)¸HX_× !Žä‡! q aü…nQá˙˙˙˙Ãōmņä\  –8đĄb Ę@ū˙˙˙˙iq*÷ár¸×˙Éą˜øj˙˙˙đ,›ĢČų0 ˙ Ž5ü,DF˙˙˙ū Apđž5„<,5˙˙ŧ>\K˙ü?˙˙đ˙˙˙˙˙˙…Č. ˙áÃ˙á˙˙īøxeq¯ãø\˙˙˙+˙Į˙˙˙•Æŋū˙˙øPŋaū\K˙˙Ø~AßÃ˙”ë˙˙˙˙ü/áņ¯˙…˙˙ũ˙ü<"¸—ōl•˙áa˙˙đ°@ūų\kų6UŽü,˙˙ū?X\>¸DŸĄ˙Ž%˙˙˙úÃáCōūup¸pŋ˙˙Đ|xAû ‚äĸˆ?ø˙˙˙æ,— úā…ūp<?Ęã_˙˙˙°˙đ…˙˛Z ŽQ×˙˙˙˙ė<8ü0hC•ŋŽ%ũøđJáa˙˙˙ūą Oō¸×…“m ~ ˙˙˙ũr%âáü,Æę˛, ī„Â"Žü0Ŋk2&Aá˙˙˙č=uđ‰D.ÃaaáaKra–^#ÅÃäÆôH ˙˙˙˙ũûÂīÄ^„“FāS*ĀŽtFōÜ‹ˆR3Zü2Vh=Ž ŗ Ã/…˙˙˙˙˙˙OŸāâ#ƒ­ !Įgbc˙…‡Ŋ~`›#‚<Ž˙˙˙˙˙xP¸/Ä/ä˛DpÁĄÁ˛S ÃÑ1L–ĘŊõ‚ĐqÂO‡˙˙˙˙˙ëĐTÂspųÜĶÂ2áQ}BĶ…xXpPXoŽ<ŌōŦÃĮyø˙˙˙˙˙˙áŖ†ƒ˙-Ëũ x' D)=ņh“ Ļ^‚pĢ ´"DG#‚8Ϗr9Eâ>Gķų„]ĖYü˜GŒ‘ķy4F3ŗ#ä|Ždr/ō8Ļ#ˆ^#…0Œd|ŽF#Ž~4‰j(Y„]Ļ#æˆâ4Čų„]O˜eĮ Č•ø Æ+;pH˜~”Q2˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū"$2Fâ""""""""""""""""""""""""""""""""""",¸dØ Ėˆ‘ķX2>G"ėã.`Ž"Ÿ1káb“‡ 8w‘G8äĮ8įÎGG)Ęrœ†Xäā§ $ āV90,DˆæDDFDDDDDHƒŗˆē.ŒG˜ˆņÄ]EŅq—EÃ9Ä]—H#ƒ.ŽËÄsN‹Ôuė:Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õ™ ЈšÃ$͘ČY’ˆŠD mÖV§Ų%6ÍjĘV…Á‰—ĄZŠph9Î9ÎaČw)ÄOdœ†Áĉ‚""""""""""""BŽ"""C-Ęr !Č BŽIÂ.3yŧōHŪFŗqŒɌŒĘ—Ž%ūC]Ãĸ""x‹Ž"""" å1™ŖŲŧķ.‹ĸėāĖĄ/ĖŽdqHųŒ`#äp`\LQŗ#‚ØČāļĮ˙˙˙˙˙˙˙˙˙˙˙xxAū„ãá¸Â‘Gˆˆˆ°Är[cšŅP Ŗ°HF†GČųĪ#ˆš"ėē9ō<]GŒÜ]žČųˆÂ.‹„/͆Q€É Pˆwd”Yīü!ÂXhCâ‚ã ÄDDEÄDDDDDDDAŒIš%ˆDRdų€\ÍEŅv`Íä|Ã4Čų#ä|Қfvq˙˙˙˙˙˙˙˙˙˙˙˙˙Ž$  s˙!Gõ"gÔ ‡$ø.Ą˙˙˙˙˙˙˙˙žaæō?šFt)>GĖ"čÆo7‘đ„§f™ķ0‹ÆãŲ!öCī<Š#wPōKŦŽ]ÔiûÚúŲļĄIâ´&Ww:ÄDDDDDDDDDDDDDDDDDDDDDDDã€Čâ×"9H‘ÁÉÍ8ķņÄKƙĸ1“ä?ū¸PŖ›p¸ˆQ˙˙˙˙˙˙˙˙˙ūC$G"ŽAĮ8ær$ä6E‚^qÉ9!ÉÁNFä‚Ŧ3 ąÄDDDDDDDDDDH9PNÎ9œįéäc#ä|J{7žEҜ~.‹Ŗ0‹ĸčÆGÍä{<Î%‡ úAūbd Ąƒ0! mHÁ„"."" ŅNˆDŒˇ5ĖD<Ÿ2VŠƒ'ŠÔFŲŅhÍeŅÄ]—EãëEãČöaĖ9EŅt\9‚'PP]ƒSy†f‹ŖŲŧĸčÄc<‚"3EÕz˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ā]x~0ōBSĐ˙B""""".""„D\Š!Åâ>aE҈â.G‘Áų€%q—Œ"älŒČô ˜Ī#Ų„{ āžâøpņ×LDDDE„ ¨ˆŧR2MF#4^0ˑˆÂ1žEŅÄr0D„Pfš.‹ĸčã:äp(#ƒYpg#†H‘âáˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯°_ú ‡…Ãŧˆ\DDE„""".""""âULƒ29•ĻFŲQ›ĪįŖDxĘŧ”ņäc0ĖÃp+0 %ßÂ!`=Q{2ø/ßũ˙!áßũ ņ„""4$°0/˙˙˙˙˙˙˙˙˙˙˙˙å^Gø…ūv ŋ˙ÖSB˙Kü/ßá_Ã÷‡Ŧ,% ĢđŅz˙pĄ˙˙˙˙˙˙˙˙˙˙đĖ#1fhĶ#ø"žIĸ„Ļ3ŧyĖ#æ`Čų1‘ō<]EҌÃ/Ä.‹„ŗS¸Ë„1 Â.†š„\ˆįü§EŅh¨ČļhŽ#‘ä{#æxÜ]#ŗ#ä|ĒäÆCÉZķŠ'Ô7ŨĐ^߯¯ÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF`q!ˇ„AÉÁPLsŽg#ã9NaĖåšnCœrÍq AĮ<†‚õÖLÖ a˙÷™•?˙˙˙˙˙˙˙˙˙˙˙˙ōnAlDDDDDDDDDDDDDDDdpUC.†ãĸ@‹ÁI NE\fĄžGŗqÄP!øöGĖ#ŲĸÎĮ]ÂÖäČL†„柑Nn'dYsÁP}„Ē9!¤¨LāÁ‘NqĖ\ØWŒ9'#rP[š ƒŽx)ʂNV‚œŦ+ ƒŽzYnS•ĮķęQA1Rˆ8įō~DĄ‰Á î^ŽHs9r7)ÍšnVå9ŧ—Í9T2 sŲĮ<ãœr,ä 8ˆˆˆˆˆˆˆˆˆˆˆˆˆ‡ž#ˆÄc0Œŧūyķ6f‹ĸë8Ž#o7Ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū°Ą&!ወd2Ü­¸B"""""""""""""""8ˆâ#’!q„DDDDDDDDDXB0BT,2YžF28Ļķy†c5f\Œ(˜ČæGĖ â.ŒgõøH"8<\{>Č JŒ>ŋņqPÉ6M"Ė‡š#ˆ>OšG6ĸāxi‘Ál˙˙˙˙˙˙˙˙˙˙īčŽ ‚đYj"áø/ûOŽ",!5”ĻFâ-”Œ—Ƀ'#ĸ%Ŗ:į€ÁƒŽŧ0ψEepĩ…Z õ™Éá˙ö."Äa˙˙˙˙˙˙˙˙˙°¨;ū?„ņ_â!áŽŋ˙÷øXpȋ6 ĄzXÁ|,ėčâ.@ĪL/ūŋ‡˙˙˙˙˙˙˙˙˙Ŧ`Šq܂ŗHœáÖän[–ä#˜sŽqĖå9NVä‡ ŽEȏ‘à\šâņ<ŠOŸÍæœo0Ėgō>G‹ĸčē.ŒEŅt\!vb.ËĸņĖ2⃑#æFjRB.ūVCPŽq!Ęũ“4ŋøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰Á܂9‡äb#ŠG‹Ĩ)ŅėŸČËČĸ.ŒÄ‡ Ģú*€ŸÂ˙˙˙˙˙˙˙˙˙yG†Ąs%Q$įsžÉ*„¨NɎ{8ær°Ŧ%frČĩr,åAœŦ!ā§*91Î9āÜS—9üãœsAø¨"Gq¸)Î#@U.„|§¤ČŨČ.ž{0‹ŖüQ/õŪ÷ÄD4""""""DDDDDDDDDD8ˆ0„9Ú¸í/#2v’8Œd0r|ūGČâF Ųgp ¸`ޏ„q „.‹Œ¸-ƒApČDpÁpČ2á‚8¤qO âÉ %Ņtc#ä|Â1EãyŖy0Œf# 'Í †‘Q˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á÷ęá 1B""#ˆˆˆˆ‰Šŗ%†Aä|ķ8F㌏F"čē/EŅt^0Dx¸.\6Ã$4Čāh(D ¨3ĪGt]ä|Ė%ŋ ‡˙õˆ‹ˆˆˆˆˆˆ‹JđĐG#.h¸-hâ(įōĸ#æ‚0"‘Āđ7. …Āđh˙˙˙˙˙˙˙˙ũ|<4× ˙ä!NDDę ‚,ˆĐ”¸§2S‘ãL‘#ĸ<ŒŪ`0G €Vø0l?đKúČmˉŪĻGČāЄ‚(pņĘCČAˇYļåĒ˙˙˙˙˙˙˙˙ûaƒãü/a˛ <•Ų-WÅH4ÁöU˙†>\-ĮųĻT”ŒęA­ÁÃG,ˆ9œŊ­ō˙˙˙˙˙˙˙üÅ…D C)Ž#"„vŗŅĪųG˛Ž43qš9ķ‘‘ō>?‘ãˆöGĖ#HâøB"%o6 \;Î9Õ#øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒÔĀ™ˆ˜e؜o0”íķøš#Ûᨉ(Â˙˙˙˙˙˙æ/dÉaR9YNWAP8įĄ —…aZ…AĮ?œsÁ.42Vg+lDDDDDDHäG)ËrœŠš ÃqNS•†âāöx-Ęr¸đĐAĄäŧK¨\!m˙pЈˆˆˆ‹ˆˆˆˆˆˆˆˆˆ‰Ø–wŽIQ E&hĘ(Ž#ȏ›Čųĸ1˜EҌō1ˆųĸ.Œü՟Éō<]EŅpÁ.FØ Ũ˜ ĸ9‘Ä/ķyˆÄo7eŅėÂ.‹ĸčÄ\B>G"āŪBŽE˜äQČ(B"^˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙îˆââ"""""""""""""'ƒ@GbSņ|x*į‚ĻP‚¸ãž…‹•´)ĘÃY8/ ærˆäį= rœâ"""""""""""$08ˆˆŖ„\/ū$5M˙˙˙đōŪ¨¯ Ô91Îlđ‚ø‹ō „˙˙˙Ö đg‚{áS\E˙˙Ũģ}p~ŋ˙˙ũāĮđŋX3÷˙˙˙|ažƒū˙ūŦ/ũG”ŪlĖAI–b0Œ8‹¯û 7ō(îôö•ˆˆ‰!ˆƒ!ĩBADNZ sn8įÎh+ŗŽh8æÂœŦ(‚vzsЧ)ĘĄ°Ž!ˆ Õ aÄDDDDDDDDG˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú…Aįk7Üuú#uˆƒ†""""""""""""""!Íc.2ĸ)âQšÉķyüŪGʈŅF29˜#`xiÃhĶ4 ¯č+Âuų^ûœ!w 0ˆŽWˆQÄDDDNĀĖFaW˙˙˙˙˙˙˙˙ųÕ<7רdZ*Ë×;ĸ!FBŽĒ‚ĄÂUDA˙ūÆ!CÁq’°IÂ%Áī¨el,˛Üx@˛¯#æAW[„1˙˙˙˙˙˙˙˙˙đų×Í3É3Š”ņ¸9Ŗ1˜EŲt]—EâČZ¯L'Xŋ&9'H<;˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĸã7‚€Ö8ˆÔDDDDDDDDDDDDDDF\ 3ČšķÆo#ÁMä|‘ķy0Ž+č)’tˆƒ‡Öņ'ë儕y2()3Y͚†ŗĐĐn5’r9ŦåĖr)q A˛¸œs9sA܆“ s9N"""""""""""AY͇gă#Æ3ÆNEҌ]Ž)N)ÆzĖ+(_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đĩІņĄ% DY'Bҍ)á\%ÁÎʈÍų&2DCĪ‘­dT9C.Dh#Dh eÃ9pk#äs#äpČB8ApØG#ˆã8ŠÔfŠ%8)˙‡°A88xNĶ -ˆˆˆhD2â°āâĖˆ’ˆķ5ÄE č fšÃҌgq—F3¸ģ/Eãˏ†Ä\6ĖfĀÔ'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃāŽĘNÃģ †’!;ßPˆŖ…øáD\ƒÄDDDDDDF!ƒ× PČŖ=‘ķĖä|Ė"čÁGŽ0‹ĸčē/EŅt]ČāAĻo7‘ōŋá~˙Ã˙ÉÜîÂü Ō#w_“ŋ×ÚÃā—×˙˙˙˙˙˙˙˙˙˙˙˙ķPƒ:Ŗˆē1‘ķÉÄg#žEŅã7˜EŅÁ—\ˆæG GGŒd|EÁ¤¸2‚Čᚧ#"č¤Ė(ū Ė"č‘Ã7‘ã6]<‹Ŗ„C>f0Ëĸč‡ĸņž-k!k˜(RĀ—Â pŋÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDHãŲĮ?LŅ×ŋújēuäöō ,?˙˙˙˙˙˙˙ 6„¸‚9!caT0‘°ĸ`ÎAEĪg‚ ū~.9Į ĮĮ‚¸Đx-ʃŽqĪįį!øö{ Fä1ÖWɐWrœŧ ĪB Ŗ’r< ģ˜rNS–å9NB@ˆˆˆ‰9 1Ä3A†l44Œ‘ō>GŅEŅ/›Ī#€Aŧ‘û9ķ}ûáéu˛ĸā¤ŋU˙ û×üp˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûČų.ĨĀđܸdsđĻ(čūyF2?œä|Â.žˇ„úøy°ÖNÉų;<â8 E AāŪqΐŦ-ÍgŗÁNUŗRj…*S‰LĶ(š2‚ĀÉęaĪBÜĒÍd°§/ ra›ÅA1‡Cq)˜‚¸˜Ã§0æÂœ§)Ęœˇ)Ė9ü˜įâ ãœs†qÎ9ā´åap"$‡‘0Nšä]Eâ>§˛>GÍæŒ‘‘ā§ú …˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū! †ÃŒ!„DDDDDFÃOQßq„"8ˆâ!ĄGDDDF„D—JFEsD^#ä|ÄiÄ{0‹ĸņ#äxÆGČņpi.€Ŧ\2C‘Ī0Ft`)@ģpØxHWPŋá|?DAĔdDDlAĄ( sŽqÎ9€ŒR{62͜sŽqÍĮâøüS•Įœįô0¨TĖ91ÉÁnk8ä‡q!+–å8ˆˆˆ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū\=ō˙ uøx؉ ąâ#B"#ˆˆ‡(ˆŽ"|#äÄRŖˇˆ”"IsāäUÂáģ~?ēŊ÷|ƒü, öˆ˜ä>k˙ō0‰ 3áE˙˙˙˙˙˙˙˙˙˙˙úØz ú˙˙_ ))ˆ™Įa3ßõ•b‘ō8fč†ßBøD(ú‡mƒᅑGėĪ… Ū AAü?„— ˛ļ¤qxŗŠC4|DHálĄß˙˙˙˙˙˙˙˙˙˙˙čDDDD28-…S˛#ˆ\1"9n3ŅÄ]EŌÍs##Åâ>GŧG G¸fĸã.F"`dW#äđ¤€Á4¸4THgHj#]Y ü†[˙øY!ČŖ‘G8äĮ4r܃Kˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆdpm͈\—EÃ,ĀBėöaEĐ6Dž@ĸÎ<„ 䅕|y&ˁp#ų8_˙˙˙˙˙˙˙˙˙˙˙üˆˆ†„I\A3ųŪĻvŸ0‹ŖŲ†xCŲ"#ä|Ųš/eâ>hŽ#Æo#Äŧq’ųœGŒŽEĀđÔ/âāl Yâ$s'ä„iįüâ1æŦ2ĩ x.8XŗŽqĘäĮÂÃĮ_ÈÂaƒˆˆ†„F„Da‹‰øDDĖåámĨl™sy?<sŽh4sŽqČŧS”å9XTƒqČ8ˆĶDDDDDDD$D29˜"<]g\Ūˆb3ŅxÂ.Œfō>GČų#äs†aŖx‘âčͲī ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūÆ—ų.ˆÄ8â""" â""" Č*œÁIA ãž rœĐS•‚#šÉAAŲpĖ.!œ¸f@,…ˇáŧßįŽ $;˙k’ĸ)ĀđĐPŽĻCÉâņ#ä|ų3yü˜F3˜`™œHC ˙˙˙˙˙˙˙˙˙˙˙´ŸŽDƒ„!L ×øR$i*YĖȇ ˆˆČ „Kĸé ng`¨ędÆy4â@ į—ĻI¯áš"ā`¸jČŖ˜š‹ū‹/8‰ĸ.‹†šž`9°fĮ 8ËĸčēšU…˙˙˙˙˙˙˙˙˙˙ũ"|`ģ.¸ hHlyģ.ę#b$ŒĐ |>G3ÖGß DDC‡Á>¸‰ĮĆXįŗ}…BA‡øâ?0ŋ˙˙˙˙˙˙đˇđĒ$4“؉•ąî$䊸A‘ūĄč/W Î9 ›Ã7Ą Ū?…ęC`ä øĨœDƒPž˙˙˙˙˙˙˙ÂáøU"OÄ-Ô?Ćą„AĮ8䜭 G˙÷‚ ŗĐ!ÃäXJų Jdō @„Œ)H‹—˙˙˙˙˙˙˙‡˙äNdäG!C*€xō #×"-díW!Ą?…ļ–ĒKR°§*D#ŋGDf ŪO‘ō84aØæ+lōü˙˙˙˙˙˙ü*„qÄI0Ėâ# Ä‚āHs+‹Ŗx4øx1AęB9ÃRW !–ūAw!Į DDĶ<‹ā˙˙˙˙˙˙ūCq xhķyä;а„H8âG¯˙˙˙˙ü.Dēd7ĻC5¸DdO0…ėD҆~†ä0nSÃqHĖŽ ¸˙˙ũEPq?˜Œ7…~!Dęu˙˙ÃīW>`Náęģ˙˙đ‚ŧ=Ģ õ˙˙Ŧ/aaø˙áöü.°ũ˙Ãģ ü=x_˙˙ ˙Ø^넃˙˙ׅÃü'ũ…˙˙ė5ũ ¯đĄ˙áõ‡ė?đŋ˙˙˙ôđØ˙ááđß^ūģ˙˙ęđŋÖ˙˙ÂØ_ü*ŋđŋ˙đđĐpŊáBũ˙˙ÂÃ˙A{ŋ‡˙ūWá°°¯&æ‹đ˙øu“p°ØÃáaI¸<đe‘Â…đĄ˙˙‡†É°Z$˙ ‡åu.‰°Ä{0¸4Ác힚‚˙˙˙˙ D^"aÄÐ`q3˙‡Ų\¨(Bqēˆ–˙Į ˙˙˙ôaÃāÉ˙‡Y'0û†hä|É8|/˙˙˙đƒqD†Į1Ád€Ųøl/K†C`䠚Iä„ĪÂô˙˙˙øy_RÉqá&S˛čē.ßßĘį?3 ĸ9‘ÁOÉļŸ…˙˙˙˙…dš;,@ƒ„ ņūGČņÆ^#‹ĐxB@đÚr Ž"B9@đhr ærCŗ‘ȸ„s0‹Ŗ#ä|‘Ä.Î2čã/âčöo?¤kGDEĐd6@đÎ?M‡ ĀB$Q(X_˙˙˙˙˙˙˙˙˙˙˙á†C\r„H#]Á ÜHlHƒ?s""""""""""""""$¸2äG‹‡#‚‚<\ˆá°<ÂE8fđGo:ŒÖ‰ĸ3EFK3'ōܗ02ņ#†Ļ6"8ˆ–äHÜÐ+†Äˆâ"""""""""""""AĮ Āįã™ĘƒŽ{˜G‘Ä]žŒd|Â8‹ĸėē1DžAs˛\ŪTæG ôO×˙˙˙˙˙˙˙˙˙˙˙-Ȑ@ŧDˇc™ÍdœŠ”å9‡,âqÁA‡<2¸ã™ĘƒÁ‡3”åš Į‚œ§)Ęr Ķ,ƒŒ8į‚œ¨<åqčWe9Px)ʃ§)šNS‘,“đAYĘr š!Î9æã“˜æ‚cœsÁnHrāãœrz˜sŽ}KĄüį'g‹dėÎS–åšp"""""""""""""$;”å9ģ<åÁĮ3”åpŽķŧ‘ķy„B"FDō¯:ĸG…čY:Díh0t †„DO†Cˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‹ˆˆˆˆˆˆ†^ˆGÄq2ZF‘3F2>HG…#æ †Hi¨ˆˆˆˆˆˆˆˆˆˆˆj“–å9 †x ãĘ˜ä čaÎ˙˙˙˙˙˙˙˙˙˙ô6fÁ ‚ė$!×ÄDDDI%G#?žE>GČĖ—gÄr>g‘Ô4 †‚88D|Ø`ē.‹˛āšt^#ÅŅp Ž‚………` íAħP]*đž…â""""""""ؘ“R9YZAPd‡ŗL†! sŲĮ'AĮ3”æãœrcžܐäāŧ)ĘÂ܇‚ČŪ˙˙˙˙˙˙˙˙˙˙˙˙˙ø}vš“)đOA˙Áû("""""""""""""""$œī ŧĀtpƃß˙‚!6 ^°˙˙˙˙˙˙ü.BžÂü`PđxUđĨ@ƒtSúA:Č;<Ÿ f ‘\˜y‚7ŒDjŧ?øPK`‡˙˙˙˙˙˙˙˙˙â"$AĘâ""""(Ž(PŽ;HY„]Đa‘™ DW#æˆâ:ä|‘ķâ.Š|ÂA‡ T/oĐ4 0Ūb$2C¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰î[•ÆrœÍ9G-ĘrÜÑG"ŲsP”lČ6ÍOŊač@°l$˙˙˙˙˙˙˙˙‡7žČ„K>¤x_Ė98$9,!—ÄR ä¸Š9Į8äėÎS—rPIÎS˜r §)ʃŽqÎ8‘ ˇ$980į‚7*9n\`q Ŧä†w ģ”äAĖäē’#ˆéQO•§Ãƒ ƒÃ‡(†BRĸ"#:ƒV@ĄÁˆ‹ˆĐˆˆ`„DDDDDAĄhFFá\ĘyH#žFqĢ?Ė§F†i‰vIĸėĄ‘ 3— † ‘‘‘ĀĖ Œ¸ËƒA ¸ķ("xÍcŸÎ¨â)#ĸ;đŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûP Áę!bv6Ėá6"#ˆqqDDJŌ%ĸãLŽGČāĐ]œ ÁČų.‹†H)„""""CIÄDDH*@ÜsŽE…ÎaÎ9Į<æÎTˈxqÂç˙ü ÂĢ ëę1ˆˆƒ‰"‹&´h+g‰Į"ŽDrœ‡ã“˜įã’rœÃ“ŗŽ~4åánaÉ9NS‰,)Ęrœ§+ ƒÁnTˆˆˆˆˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ… }ÂÁkøaÃÂū"vx]""""""B"""""""â""""v2%Ä#ĮŗDr6fˆĶ#Į#y„{7žF3ČÍĪ#Ų#挏‘ō>G3¸d8WüĢ‚$ú˙蕝X_áü¨ū3°š‚Œˆûˆb""""""""""""""Vŗ´"(Œf?˙˙˙˙˙˙˙˙˙˙˙Ĩ‚šNCĖ Dîģø[Á¤GąqHxQp°Âá”ĸužüaāŽŌđĮ†ü?‚"?„ōö˙˙˙˙˙˙˙˙˙øXA ĻBnSˆ‘ūŒõá“đe9Pŋãt>~eÔúØŠÖb""""""""Ay€U6)#æ.‹‘).š”ä8äŒē$dų ŒXS… ˆŖ­V¸uČہ… ˙˙˙˙˙˙˙˙˙˙˙ü ˆƒ8â""""""""""""""""$' \ræČģ0Eãy7Īæō>GČøSĖē.‹Į˃3ĒÂâ? 2 Ž@đŖ‰ÃC3 !Č"IÄDDDDDDDDDDDFx.Áĸčö|Ė#a3ÄG2>GČ☈ņv]EÆ`‹ĸėē.Ę냞%ŸČĖ’ĒÁķÃ˙˙˙˙˙˙˙˙˙˙˙˙ķYčRWž΄uŒ#Æ)âČR28”ƒV"L­d|‚ä%h„gFIL˜3æG3@Á :GˆŒŒŲÖ;G‚`ČáHāÖ^<‹ˆG …ĀÔ4$ “´3>GÍį‘B=›ÉķyÚB4Íį‘Œ›Čųäi›Čæ(áqnAž÷ø ´"!.đĄaÂ".."8ˆâ"FŅėŌ5¨Ét]˛ņá°¸!pÎ\HāĻp €¸_˙˙˙˙˙˙˙˙˙˙˙øaÅ‚áq/……úü<,mpČ|+$bišåG‹ŲŒ‘ĖĀÁČC!Á— Œ¸Bäl9t^#Į\›ČųČų„iМGÍÆ3y„qu—EŅt G‹Œ¸†‚Í (N×4G^ —E×đēââ"""""""""""""@¸â"""""""""""""""""""""""""Aq˜eÆ^4EŅėūK0˙w&Ū!˙˙˙˙˙Â&°s’HNÎsų ZB8éÎ9'!¤LäøÖg-ÉIʃŽg5œrg'Qõ7âœÖN rœ§4^°D‚‹ x*9!Čr ,O‰qÄDDDDD28 ČælÂ8Šė“ä["Ģ%jĒÄ8qa † ˌEšâ",!ĮąA—bIA€A q`˛cFÔį<œ§"Yœˇ!Į6œˇ)ËrPS‘¸ˆˆˆˆˆŒŽƒi€Áx)čÅgŖŲŗ7‘ō9˜Gã õ(Fhâ(F¸8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙č.B š`ĪĐŋ„*Fö<1dņČÄl9vqG‹ŒĀ¤pĐGX— Ā_˙† Đ1fú`‡É… ÄDę„DDMQNgf™Ģ#äxŧG3šÍÅŅr0‹ĸčģ/ō>G#yČų!؁1‹‘°3eÂÁ€ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ߨBCd :øDG…§ņ‡DDDDDDDDDG*"ž;ŒĖâ>|ČĖō3‰üō.Ž"ã1 €Õ\: §*0ž*‡øÃīˆˆˆ‹8ŅåT/˙˙˙˙˙˙˙˙Âđą Œ¸!rßĢ/ ø]Xâ8x^Sƒę Aáû ‘‡˙á÷P…˙˙˙˙˙˙˙ō83…‡ž ŖųæuŒfQ‚GČņxÂ.‹˛čē.‹Ä|‘ō>GČųÁO"äG‹ĸō Ž3ˇķųķ%čX‡ģđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ā;ˆˆˆ‘$â@điDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDH2Eã“28TAŽ Yā§5G}”§Ô/ɎEã‘l‡rܧ!øĘã8G! ”S~+c”*L °˛bFrS'5Gŗ†{8į‚œ§)ĘĄüã9T?“â´+ ūp3T>ë0dÃ3’đ^äAĖåš!ĖäČlã’rܧ)Éh8įĐg)ĘrœDDDDDDHkģ.¸Į™{ŗˆÆOžGŗTSæt]ķ4/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""" DD†XčDGīâ"""""""#""'ˆDGq!fBŅO‘ķÁ‚>G¸Ė\r8`Ž!r#™˛=›230Ž ĄáâCB<|? Ãņ…“ÜÎ^ģ0G‹ˆG#™0Ëĸėē.Ft]EŅt]—ˆųR<`ŒĖˆÂ/EĀÔB˙˙˙˙˙˙˙˙˙˙˙˙˙ū…ŊB… ‚ …‡áˆˆˆˆˆˆˆˆˆˆˆˆˆhDDDNĖ3[$š!”™¸‘‘ķŅ„]EŅ##æ‚1˜ˆņčÆG‹Ŗˆē.ˈl2 | ņ ū † /ÂđÂÖ"8ˆˆˆˆˆˆˆˆˆˆ‰4DĐÃ˙˙˙˙˙˙ō &hĀl ˆ9Ƹv ´û¨c…ÂČG)ÉaŅ#ä|‘âᴐÆD>Wͅøũø˙˙˙˙˙˙˙后‚ņ… WX˙˙ÕBÂüD†ĶÃ"AĮp嚎:á~øx˙˙˙˙˙Ā㈜rO Ž˙õp°ŋQáü'˙˙˙˙˙< @ū8ũ~.A`sŽqÉ/Ŗ˙ Ũ.˙˙˙˙ų ī덇ō7)‹q˙~˙˙˙×÷éũáx|/‡˙˙ø~8nø]Aa˙˙˙‡Øáp˙„°˙˙áŧ/đ°Ö˙õø…˙˙˙ū ü/Ã˙˙ü?…˙øa˙Ö ŧ7øxk ˙˙˙đž ¸a˙˙ūX_áw‡˙˙˙Ŧ/ ‡ß˙˙Ŧ?ü7ø] ˙˙ü<(P˙˙ ˙˙ü/Ã˙Ãx_˙˙áūđēÂ˙˙˙ūčá¯Âø_˙˙¯Ã đļ˙×á|0¯˙˙˙č<.al/Ã˙ūđ˙ á‡Ö˙ūŽĻ˙˙Ö[§‚á˙ũ}oō4x˙áđŋ˙˙ŋŋ˙‡úúápŋ˙˙¯Ŋá˙Ū˙…˙˙˙Øæ¨“’˛t)ĘrÜŠ‘Á')Íg ¨8įƒY°¨<Î9¨x+ rC’rœˇ-ĘsLs9xSŽW‚c‘Ŗœrrņ#ƒiĸ.ŒãdižeҌÂ*hÁ•ã.ŒŅxŪa‹Ŗƒ.ŒG˛>GÍæ">GÍ#y<ČD{?r|Â*ŸP—đøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ<ā†Pį…˜äQČŖ<'đ[•‰4[ū˙˙˙˙˙ūjČ7™ĩ)ĘÂļ0ڛȾi”åh\rœqĖä8äN=™Ër đk8įãAPqÎ9 98*9NT r ã’Ą¨x.9Į8į‚9•ƒŽl"q ƒXâ"""""""C20‹Äq ÆŽg‘{ü?’øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ8ˆˆˆƒB"""e8æãŲäc%hč")ėĀSæl0]—eÃ0¸d‚™2Tģ.2ėē.‹ĸäGČų#™Čâˆä]Eȏ‘Å0‹‘Čø Čų ČļD‘×S~T˛ežFJž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áĨ؈Ž"""iˆŗlåoCLŧ!ė”ËrŽ""""""""""""""""""$ Ū#ƒų¨qÉPüTr°ŽeŅ뇑ķē=aŋ_ĐøˆˆhD‰)Čy Ž3ˆē1›Čų†`ˆYČņv^1ō<\Œ"äGČņƒ#är0)‹„. Ú˙˙˙˙˙˙˙˙˙˙˙Û Ãūለˆˆˆˆˆˆˆˆˆˆƒˆ‰Øč¨3Vuˆ8â.ŒŅxÄn.6ft]EҌôh‹ĸčē0gĸ8¤|EŲ€Č0× ŲoY˙ Gĸ""""""""""""!ÄL” ŋ˙˙˙˙đl6A¸ŋŒ0ũJ0Ņ\­B¸_ø_˙˙˙˙â„ŦæäâĮ%Zä#”äAČŖ™ČG*$sŽh ˜fČų3Čâ:GTi É Š–įqBĖ•\>8‰ """""""""""""""$܁āÚ9ƒđ~+Ž9'5ÎąŧÂ.Ž3#æø2ņü‘ãb#ä|‘ō>a8f">GĖ"ņ†c#äyN"FO™iœFĩ ˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŧDDDDDDDDDDDDDDDDDDDDDDDDDDHkŽLs9!ȰDˆå9aˆ?ąÍ)đĨ_†˛ CœrNCPrNSđaĖå9’‚C’‚NT rāô#S)ĘØŲÖ ųĘ §%fƒqĮ$æŗŽq·8į“˜sŽN rœĐTsÁ‡<…9ŽqĪį 㟊r¸üSšÎ9ėüjˆ‹%aNU9Îzˆ°aČb29ã™ÉLr(ä(䜧-Ęœ§-ȃœrsŽqÄDDDDDH PHs9!Ã0 ÅŲÁ3÷ø_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙æŦˆpĸDDDDDDDDDDa""""""""""""""""""""# DDDD‡¸DDDDDDDDD”åb<3Âeȏ›Žd|ŽŽG0×#ų€å ē0EGĖ#Ų#™0Ëĸã.‹Ä|˜˜E؈â/ČājĄ˙˙˙˙˙˙˙˙˙˙˙ ė" Ęæ[¸oÃĄfߔP&$a‡1rp^á‡8įœ…AĮ?åAėūN ĄĮ8g‚ šeÁāƒw)Ęrœē œ‚îS‡‡ūŅëč$}â8Q p˙˙˙˙˙A…đ–§b¯ūWÂ0@˜ áh'Á?˙„˙˙˙˙õĪf"9I BD°Ė#ĸ1ÍæōD'Íš0d|Ždxģ/ČŧGČæG‹Æ"<`‹˛ėē.‹˛á˜]" ܈91Č8äËÄpk.‹ÆŪo#Į#â4Íä|Â3Fhē=žDB1‘ķ¸ē8d|ŪG#„] G2>GČæ6fȤqO‘Ũĸë ~ˆƒøTžv(đŧDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDû•ÄĮ8æ"aŋ‚˙˙˙˙ų°¨=DPĪæĄ?'ēAR ‚ûŦÄ ãAĮ=’‚I ˇ:B”Ė嚇<r$ËrŽ@¸į…‚C‘`§)ÉA›Œ91Î9 9ĮîHyv]— † ęˆT"+ü(pƒŦFŒ QDuˆˆˆ†„DDDDD§ÄO1•ąc˜aāÜS–åqā§4æ†Î=ŸĪAĮ8į‚VDrAq܆ ä2‡?Uō))8įãķĸ5Ŗ8.à ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ Ph~,1ļÄDDDDOƒˆˆˆˆ‰šbV§į&9ø†'9nHs9‡"ŽLrn"""""""C\vƒ+<āÒr^r .pgķŲĮ8įƒYāŽ đą˙ëŒ1•Ψôf dp¤s#ˆ\!r#ÅŲt]eâ<]—EŅt]xØ`āCxm‘Ã,¸‚ ˙˙˙˙˙˙˙˙˙˙ŋ… †÷Ņáá•!ˆDDF„ö%%Á Â#ä|Â.Œd|ؤxē3F ˜Fa—Œ#o#ä|¸€§‘ã^00!Æ]ŗL¨ŗ˛2ą2$Žš…ū4|(,>"""""""""""""""""""""""""""""""CLsAâr#挏‘ķ`äqLFt]aGȏ›Čų#äxƧtqF3Ŋ“5š¸'˙–ß!˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˛ņČä\!p Â.‹†Ē—Œŋ;5ŠxĶ ˆ­pXjĄü†Į-Č9NTsŽqÎ9Į'AÎ9 aĖå9sAœĐA†&9ä8ä<ɎLr @ņŽCQČ2𔿔ã’rœŦ-Ęrāã“ÎS•ãœsŽx)ĘâpS•‚°Ē†ŗŽ{&91Î9 9Į3ŌÂä‡!š9äœ‡ã!Ęrœ†"Ž""""""""$ ܍Č`r‹‚ ™`xGHŸ0ˆ¯™ (A˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ў„×2HŸ0ĄɡNˆ’;VĄ Š9ĮB"""΍ gŪ…•„p~-ĘrCž rœ§)Ęr°ÜHq†ŧ Ž[‘ÁĮ?f§dåLŦ*…øX¨@°â5Ž"""""""#˛ˆ‘žFhē8ËÆō8¤|Ã.Fķy#ÅҌŪa™0‹ŖhD|Ü\ˆņxĀ‚ ˙˙˙˙˙˙˙˙˙˙˙ī‡ŧ%ƒĩŪ„DDDDDDDDDDDDFÄDNâ* §e&KĮ‘t]f#8ôG"čē1˜æķų<ŒŅˆē.Œ3xČáÂ˙õ ˙öāĸ"8ˆˆhDDDDDDDDʸ?˙˙˙˙˙ū? AāțS†˙Á!ĒØX`áŸĄ˙˙˙˙YÄqG˛9›2?Ō=˜GŗfGČų„]Čų„]ČųŧŸ#ä|2<]™ĸėē/ō<`‹ĸäGģ/Œ‘ō8¤qHų„ \ .†™8`än.‹ĸčÆlČų›ÉNhΚøÆaF3Čâ=Œ#ä|‘ķĖšâčŧ`ˆņtc#Æ2>a™Ģ)8F´t_•ÖŌŧ>""""""""""""""""""""""""""""""""""""""""""""""""""""!‘Ã(ޏBāx`ÁeŲÅāČ}”ÁŦ/˙˙˙˙Áƒ9‘ė˜įķœđS”¨~+B¸ã˛BøéÍįãœsÁXTĘsh%3{?“ƒ'0æŦ¨2sa\{<r ã›`s8ˆˆˆ‰ÁÉ9nCŽJ ‘5e"#p0gc`Į#|ˆˆˆˆ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™Ė…ŖČā‡T^#ŠGČâ‘ȸBč¸G¸Ëp3 #G2>G EŲxŽEÁœđs#†@Ž:‚œÖ~+Å›8˙˙˙˙˙˙˙˙˙˙āáâ"""""" ŅÕ¤DŒ‚áČä]—`m„C!š‡!ˆ"ŽBŲ ‡Â ˜äøĄSØAÄDDDJ˜`”#ŧŽE؈đ\ˆų. ˲ņ#äqHņt]œGxņãxÂ.ŒfūlČāk‡˙˙˙˙˙˙˙˙˙û…ØDLˆˆˆˆˆˆˆˆˆˆ‹ˆˆˆˆ‰  „^#‘tr7eãy¸Äc#æv]äxã0ds0Ž#Ų#‡.2á’> ‚‰Ų€gĄ!Č<•ĸFu3ˆĸ<2踆t`Čų#˙˙˙˙˙˙˙ų‘&xpŊ,IÁK IÎÂRÜ*?“ö˙˙đßøAÔ/ÖÂ˙˙ņ_Á‘˛,"ēÆ˙õŲãáa>#ˆ˙đĸ?ūøca}øa|8PáC…à áÂøa|8_ ._à áÂøaà áÂū/† /‡ á…đā áC…đÂøpž\0ž(pž\0ž(pž_à áÂøa|8_ /‡ @tĪˆ_ /‡ á…đä@°ŖæK9ŧ4 ͅ üŧrpË=Wžá?˙Åa/ūZ Ę˙˙…„Xa"Z …˙ü(ŗ6]„BŽā’/ģ–€ Ė˙˙‚øäŧŠA~Z€˙ųƒ†˛Ü0á-Žž“˙˙Ã_ ,áX`Ęr)Âŧ˛™œRωš1–⁠Â/ķ$ü/˙˙˙˙˙ˆˆ‹E•(<ÆH`\ƒŽ"""Ķ2?đøA0AÆdĢé‡˙˙ōŧ%_DAčōÜÙËrĪ2 ˝ Ą,ĒA‚ã%Ä1˜f4ä|Ad­ â""0L_˙˙˙˙˙ū$>ĸ"ÁГÎ —A<"xŨ₆ ƒ„K‘€y1¨(drÜ"EĄnDd+u˙˙˙˙˙˙™-ˆˆâ ! ,1"`Ā"#ŗ¨€… GČøŒĘp„…3°%ÖdTč7^Hq"|Dc†!Ģŋ˙˙˙˙Đ.¯…CXfBāĀ' ģ‚+–€øa-‚„vLž AĮ˙˙˙˙˙"@!¯ÂōfŤAāƒáōC Ur5é4“:&jE$ōpsš‚˙˙˙˙˙˙˙˙˙˙ČDDDDDDDDDDDDDDDHĮ!–äŽi•)æĩ#ÔępūNĖåA ņ.!—‰ŧã™ÍgœsŽLsŽqÎ98+9XT 9\LLå‡*fŪ¤åQEF Ķ*˛đÅePÂDę&`Č+BďC$$9Į%㞠ÂVN 9Į8įå99ø¨&98* ųDDDDDEĄfAWŸÁ ĢÎʐ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„"!ÜDÆá˙ˆâ’ qŒŲt^#™ŗ0Œd|Čáˁ 4ĀđT. ÅãČyNG‘Ž ķųŨ0ŧ<wøÃA„ˆÜ§kâ"8ˆˆ‰ß‘Ȓ3™üžf ›"ņ#™#æÂ.ŒfÁ ķē1‘â觪҈đ` G0X˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Pˆ8áh:øáj#~ÄqƒDDDDDDĐÄDDC{r¤R3F2<^#ä|Ã1‘ō>GČų0‹Ä|ō.ËĸčÆaEŅt]F"čŧGČä]28s€e. ĨĀā> !ī~‚ũøA~ėG{áhDDDDDDDDDDDDDDDDDĖB< Ę+LÛsÂ˙˙˙˙˙˙˙˙˙˙ü8Âũ‡~Ą°‰˜"ŽgE@ū ‡üpI„CĮũđ˙ …^ô##đáC˙ AŖÃd]û˙˙˙˙˙˙˙˙˙˙<‹ĸ‰#ųŧŪGčŸ#Æ#Ųĸ1˜Gt{7‘ķöb0‹Æâņ.‹ĸčšÃ$3x9vc7‘âčē.fō>GŒ„]@Ļ4ˆÂ9eâ>GĖD|‘ō<\ˆųäĨŅvc0‚äô5$ՑöhŒd|Ã:D|…„ƒ"Ģ…å_":õYŠ 8¨!D8õë… ˛8eœ# ē.”Î#ætcRčâ8(B„,Õîֆ9+#-'đ˙˙˙˙˙˙˙˙˙؃ņPAÃ8įį'g<Rƒī ŲĘ?sņ‡?…LŽ'ŠT"'4‡U8)Č/ˆœAė‘G8į‚å9 AN\rph)Č/œ‚œ§0䜧)ÉAnAw›ˆˆˆˆˆˆˆˆˆŖ¸!ƒ0D|ߚYŧ›ČÖjyäq*%…™„@ÃđČĒÂÂÄP!ÄDDDDDDG)Čū4â""P:B,!ƒ+C…nĸ¸Ô=ž ƒÁ•žēĘƒųr3ˆˆˆˆˆˆˆˆˆnâ"2č÷’č—Č/”ЁâA?˙˙˙˙˙˙˙˙˙˙˙˙ūPü0šā‚ aa㄄aˆˆØâb "Č fh‹ŖˆÆGČņt]EÃ|ŽfÔ ÉL#ˆĶŖĐÎą’ëÃõ vĩa…ÂAč?ßø"#ŋለˆˆˆ‰PÉĄŸČ31ķqŒ˜eŅr#ä|Äa3ų#ä|ķ.‹Œē.‹ŖxÃ8Ėd|Ž…Ņp4 @ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü)ū@…Č×ߨ_˙‚‰OŨ÷ÄDDDDDDqqąĉW#„G‘ō>GČųˆ‘ķÆ`fÆa˜Čųä`1‘âā`‡ø¸l#āŸ $Ü/øQ"­ûÁG˙ûûøˆˆˆˆˆˆˆˆˆˆĐˆ†abRt‚"˙˙˙˙˙˙˙˙˙˙øP×PĮÂ.%‡˙Ö[ĒČFš'Ž;‡…†ƒ.&°ŧ/Íđžĸ@ˆ1Ī˙%íÃū>y.}īÂ×ü…?˙˙˙˙˙˙˙˙˙˙˙ūę”ų#įĸ>a‹ŖˆŧGČņt]ČæGČņxŽd}G €Î\ ˜ ™ Á#Ėŧn3f1‘ã„i˜æˆœŽ Â1EŅ€ÁŒ‘ķy0‹¤Ž ¤Æl(Sy‰ĪGŖ; hŒfB=’'Psč,|ėšj*ĄŅ(+ W‰ú|DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD‡qšqŅ!æ´R~ˆqû¸XCķ+đˆ¸˙˙˙˙˙˙˙“ ‰d6PüS’{?R ĄĮ>ܧ)ĘAT< ƒŲĮ<åšpOĪÅ9NWđS•rœŽ4sņ\sœäÁ‘A“*˛Ļk'fsyøÜFä<ņˆn$ãŽCQČm∈ˆØ9 ŽaČ8ä;–ķƒ0!ÄuÍuîž!?ī˙Đ'…ū‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆāâ"""8 Đ ÄĢ6{&JˆĢĪ#tH‹ĸčÁ›‘ã#æōGĖ>Ø@špČ`ū°ŋÂáŠÉ†xŌ|uÅpá qDnĘ\LÃTŖ4^<b>l͑#0FŒöj3y‚0‹˛á’EÁX¸d ˙˙˙˙˙˙˙˙˙˙˙˙īØDđߝé›Čá°>#˙ūŌdG!ˇ Ūe„"!Äqa”†Le::äų$#Ų„c4GÄc6G˛>G3 Ā5åÁrá¤`Ė2āČG­ԖAÃäēˆ’č,Gīë"(A‚ ÄDIDIv q؈ˆˆˆˆƒˆ‡fˆ¤3ų ŲP ‘¸?˙˙˙˙˙˙˙˙˙˙˙ T°XAō îŊ"% y7G ÁzČ8įQÅpãŒ,jÂÈYŗn/đĻķĪ#L‚ÄĩrB*2>a—F™ˆ‡‘ō>:Ŗˆē.Ėg‘ŒÂ8‹ĸčē.ËĸčŧGĪ,Ņ.D°ōŖĐ8˙­ĮŧÎ""= wī%˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øQ Šn@ņG8äH˜ÃAˆŌ#ęn.ˆGÍtc#įķČē„˙’ĨDč!ØüŦo^đXXqČāx3 ČųŧŪGĪæzC‚XŸŒū‡Ž×å–˙˙˙˙˙˙˙˙ų3‘`ŧ"qrG)ĘrĮ!CˆˆˆˆˆˆŒŽ eÁ,§Īå^aEė§34]?øWúÅ>hn'ĖDDÕjˆ&A+20ˆDHĪä|‹dų#æˆÄqĘDP‹ĸŠȚ3lŽÁĸäGČņv\ˆų#ƒ‘ČŧG2>G‹ĸčē/EãŧaGt`‹ĸäO‘ķņ#"ėē13lȏ‘ĖŽ)ŊOæˆē1˜F Ž#Ųä^%?áü9Õx_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷üDGˆˆˆˆˆˆˆˆˆˆhDDDDDDDDDDDDDEÄDD4"#,TÛA1Î91ĪÁœĐ_â đSG)ČG!™"""""""""$y4‘Á¯1áM،Ÿ‹ÆĖ 8mÃč>ä2ŋԈˆˆˆâ""$›"ėí>wˆ¸ĖEҁOį™ 0GÍ9€4Đŋ˙˙˙˙˙˙˙đ°ÃK*a…`qcīÜDDDC"ŗ!(2´ŠxÁ‘ķē1‘ō>o0Œfō>GČæ`fš2â Ãrāx*~Øaā‚đüAÖâE!b""""""",`„NąN3æJL‹,0˙˙˙˙˙˙˙ü8@ÃŧxĖFČ6?üG8XJBjČqÛ˙"8ˆ˙Ú ę/ ˙˙˙˙˙˙˙ŲC#æ`#† ŒšEŅr#ÅÆ{>f#æã Ī#tbGŅ"āx`ë˜Eå)3y<Œd|Ūh‰|…†hÄ,/… ˙˙˙˙˙˙˙˙˙˙˙ """"""""$×@ˆˆˆˆˆˆ‰ĮrFG3Æh‹ĸFGÍįķy?›höCȟ’P.ˇ‡äĮ$\ü] ŽCHr$ Âܧ.92 sy¸åf.T– ¯įpĪB‚Pq„ÁŸeĨLŠ”åqė㞠9NTsŲ1Î9Į<q0ál3M°0l)„gŒ˜ÚāpĄ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øB ÃDDFˆˆˆˆˆˆˆˆˆŸ|')äV;ĪpŒ"ėäx  …ŅpSÍYäq)W›Â ŧ0ŧ9Yt"tŦDE†'nƌ–fŦÂ3Œ3ˆâ/f"čšâņŧ‘ō>afņĪä|Â.‹ĸņä`ČqB.‹ĸāļEà 3˙˙˙˙˙˙˙˙˙˙˙˙ūņ ĒâCŽh8įøˆˆƒˆˆˆˆˆˆˆˆ‡ψ^GÍ#qŒō/2>GĪäxÎ03Ņt{7ŽČáĻG GsŽG3Ē8e_üDDˆĐˆˆˆˆ´"""!ˆ×r ¸d|‘đ@‡ _˙˙˙˙˙áhŽoÁ˙ąäDDDz ákĘë„p?ôD͘q ˙˙˙˙ü?ÄJp(˙äY 8pģōÜ´2ū龜<€Š€g ˙˙˙˙øPëōŨ)—EīņˆŒŽ)#å$yŸáa/;t§Ô†hâ"CGĈˆņr˙˙˙˙˙øa)‘WūICeÄYpÁ ƒ¨CÂō*Ž^w$8ˆđŋ˙˙˙û Ž’ā\v]—tM‘‘ō9‘Āđ$ø{…˙4ņpÛą!æĀđŌ˙˙˙˙øXcū"+\š|8`Č͌ŋ  ~MČČāW˙˙˙ü,î$5ÜŦ2åâuGŗČĀe|8_ăK™pHˆšÂ˙˙ü?äA%Í# °ŋÃ!0& Į˙˙ūâ#á˙A˙ü?ũø_Ö˙ũũáv˙˙˙˙ôׅ˙˙˙ŋÂü?Â˙˙ū‚áīø˙˙ũøzÂÂ˙˙īÂ˙áÃ+­ĐûÃ˙˙đŋü/õ ˙˙˙×}aîM”?ü/˙˙䨄ßų6á˙AÃ˙˙ūîö/ÄãĮú˙˙˙‡„>áÂËušá÷…˙˙ũbFáQ¯Üˇ3Xb_˙˙˙áa­˙đH„~øXH/˙˙ũKy‹$āŖ„R/†û‘#ZAø˙˙˙ũAä#… 'đõđņZ#™Yx_˙˙˙÷°Ą~æFĄ˙Ô)\D GČ­f™"ØS! ø˙˙˙˙ũĐq!Ü\DI ô Ö?_ áJāȸrX`ÉĐĨCšpüėÂ*Čá˙˙˙˙˙˙ÖK!ˆXla ; b\0¯ØKáÂül†Æčá˙˙˙đë_˙">ƒA˙{īđÁ!˙ ˙˙˙˙˙ŌpͰūÖ˛\gjÃaå•+Gb™#Åíã˙ū0ą!Ŧ9Į8â""!ÄDDDDC#á”\ e @ģ”@ƒ<ˈa#‘ä=žJn.ŒfŽds02äy™Ŗ#4Jw ˆG ¨[~˙˙˙˙˙˙˙˙˙˙˙˙؈j†ČŽ"""Hq"""""""$CmËrœÃî[•‚'‚œĐaÁ”#4kIBũâ""$8â"""""""AĨÃ0‹Ĩ1EҌôaĖFâņ„EQsĒ&p\˙˙˙˙˙ü<˜ä2☿‚P@đmr–qĖåP›r ãœsŽl1É §)ĘŦĒ…Áüã›BVi’VNÎ ƒ Čܲl=9\Aā—Āærg0įãœrcœsÁNaÉŲ;!ĸĪCPˇ)Ęrĩ=“âk?L!Ž$9.4 8 x2@ˆˆˆˆˆˆˆˆˆ‰1äpT#™†b.Ėd|Eãē.†z.Œd|ŪCŠ|•y?…ĐD› d DDq†"""4""4",!pã!$"'HDA‘¸B""""8†ˆˆˆˆˆˆˆC “AC0d°¤Z]eqĮ!ˆ%""""""""""""$ NÍ2œ§4åLŧ*9ėĶ+ B ãœrDގA˙˙˙˙˙˙˙˙˙˙˙˙˙ūáwũ)Qˆ‚&•Į„+ˆá Éd‡8äĶ•NP‚ĩ>Ĩ9pm 3›Č(a'ęŋ¯ä”A;Ô@ˆŖôHƒāŦMÃøB1ÄDĢ3˛H™dųŗ?EҌÄaŗÁ°É pŋ˙˙˙˙˙˙˙˙˙˙˙Úą ü/đX&“‡?f qČĻ„EĨÃ˙ÄDDDDDčŽĘb|ƒĪæĻSĸ%›ÉäēAk‡˙¤q^›oÁވƒü8ˆˆˆˆŒ7˙˙˙˙˙˙˙˙đŪ{#ärĪÅÃŅĄÁČņt^1EŅt]˜ČųŧŪGČņxžŒ"Dš•đ¯Â!G§"?ÛôDnöP„.JE-ɰá…b""""""""""""""CŽ3ƒ påȎ ÃŅw˜ŽEŅt]Šã†a˜ GÂG™t\"˜Ž”(ŗˆˆ"“#ōįŗĮ2Bū˛Z‚ ~đ ž/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čDDDDDDDDDDDDDDDHŖˆˆˆˆˆˆˆˆˆhpeƃ#ňáËĸčÁ!ÜyĀ…Ä#Æ1Žđč—ÃÔ; f ÎF擐Zr įĐIÉg)Ė9Į"ŽqĖän[’ãLrc‰' xrÚä#Ž@ķ$8ˆˆˆˆˆ‘G P9ĮD|‘ķGČų‹ŗŒŧ`9ČæG"âô2<\9tpC‡’Pž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čˇ)ĘŦ‚ Åadƒí9S( ãDËQŠxDCB"" !ˆžÉj$Ā‚ŦĘÄSĮI“J$2pDæEYTĪ#‘Ō7r.…ĀĐ qČeLs9pC[ã! Ãœs–z<(\D Xˆˆ„!„ :ũđčX\5Á pøąB"!ƒ^b7’ĻKŖŒĐF Ā+ ‘ĀĐ Íäs0Ds1‹ŖˆÆaĸčÆyĸčŧGČä`R8¤|ĀËÆŽp_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙î’áa/áŌđUÂp¸_…â#ˆž"JMœXđTĘrĻV§ƒV„ 0Î0āÉr ņ(¸u °—ĐV˙ŋ ¨tx~é!鈆„k#hėĢ:ŖąŅŅEҚ4Čų.ÎiĖĀ63xf‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŪBÚđ°ßÕûŧŌÃV`ˆˆˆˆˆ‹ˆˆ¤0_…įež †Ž(ŋ˙—ąĘ0Ü.Â$āĒLĶĐBqÃây\§˙˙˙˙˙˙˙˙˙˙˙ôƒâŠ J$™ŦãūžžÁø!ū?Âē˜Ė"ā¸A‘ĖŽ.H3ŧGČųCv\2AŽ sD\Cē˙…‘U‘?)šN°ūD¸ei{ đ‚Ën.´˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūÄDDDDDDDDDDDDDDDDDDDD3ÖG ŗ#äs#æxF2? ŪŨ˜Œ"čŧGŽ#—Aü4$°‡ČeA@äāˇ*9œ§+ r°”†ô+‰ųČ$9ø§*9ƒqÉÁ îFäČ8ä;˜r8䜎-ËrC™Č܇ãœsŽIČā˜ä¸ä2eĘq“į‘tb3DB1…<Ž#8Žša"<\5 Ŗ8‹˛āÜÆG †Ô Âõ„°wņ Ēysáė=Z¯ xoüDDDDDDDJ€ė'<Š"%fH#ē.‹ŖˆÆGČų?‘ķē.Œd|ō=ĖFˆĐSļ ¨/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ˙Ũøq.âĸ…pˇL/¯×ød‡Ã <.""""""""""""jÎÂĖ—EŲq "č¸Ë‘„PŽ#4^?“ÄÆęQâ!Ÿá˙Ä/ø_áá~>!ąA˙˙˙˙˙˙˙˙˙Ũúâ!T0û‡ápīđ¯˙ŧ4;õūd¤ŋū•,” á_¯ ß÷đ÷˙˙˙˙˙˙˙˙˙īô#ŽĨ•”r$"čã8Î"čÆGČų„cƒ#Åâ8-‚Ņŧ˜EŅt]fhē.‹ŒÄ\!x˜EĀ€L¸„s0‹ŗCG289C#‡D6$5\„‚NG˛æŒšĩ3GŒō8‹Ŗĸ1æˆē:įŖ˙ã_ŋ•ŋÃЈˆˆˆˆˆˆˆˆˆˆ‰ gsANS”â"""""""""""""""""""""""""""""$CËÄpsČē.Ž#ˆč3ČŧoÎÁ?˙šHxA˙˙˙˙˙˙˙ 2t#ƒP˜į˛-ž…Áüû.p˛‹œsAüô.‡ãœsÁ|{'öx*˛¨H´ēЈ‰"88ˆAœeҌų `DxäG‹ŒšŽ)Ė"ņąHųŽD|Â.F">a2>GČâ‘Ėō.‹ĸä|Ī™„p‹¨*DCÔá3Čē1˜Y>GŽFo#æķČē.Œft]Gt^7 ü7  Ã!„8ˆˆˆˆˆˆˆˆˆˆ‹˛ ŽS•INfˆˆŒ!aˆˆˆ8ˆ¸ˆˆaˆˆ8ˆ• rVČŦr!™ŧŪuGŒ‘ķČÆa#ˆņ‘ķȸs`mÃ~(@ύöyæˆöaG"$fŠ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áV˙~"JÃà ?°XŒ!Đâ"JbĻŽ#1F2>n.Ž"čÆb#‘xxÃ.†ƒm ˜|=á~,äGû… áPũDDDDDDDCB""Eb–d†IL‰Do<‰0Ž"čÆGČų€Îc0ËÄ|ŽdqL"āļ˙˙˙˙˙˙˙˙˙˙˙˙ü+Ã{ū"E*† ¯÷Ą^LƒČ’*™7͑B.Œd|ķ1‘ō>GČų†^#äxĐČáHų0‹Ž!†3 4Ž>ĩ!`G.øj ē…ëø_â""""""""""".˙˙˙˙˙˙˙ūÁƒ`Ü[‰Ŧĩ)ķaŖ ĸBAĘC åH‹„Į Ąaà X3Ę)NËrŽˆˆˆų.ČB#ˆ—Čņ#Sģ ÂāžIS”Kų§!H9ˆk"HĀ4gu­|˙˙˙˙˙˙˙˙˙˙˙ūĸ"2āj „pg.ËŖ§#‡. ˜‹ˆ`0G3ör#†šp\¸pæB.‹˛ėĄF3â(EÖcŗŠ$4“…å:/Á´/ ŋĐPŦDDDDDDDDDDDDDDDDDDHeŽC.›Čņá ‘ˆĐ\# l#ƒQ<aū8˙˙˙˙˙˙ĸĐdq—ÃXŽ…à (SyNĘx§ŠĘÁ"|›Č;?‡2„dĮ!G8įŗŲėœåAœ†w!–9ÉANh*9Į?čS”AøĐR Åa‡5BœŽ0‚°ÜVS•Į ŪHƒĢ2s˜>đ§4…9‡'L¨=ŸĪg㟊rˆ6Ä8­ ÔđS•ĄxPŠÅ‰ęU0Œt^0Œd|ŪGΨē12>G#Šb#ƒ9Ȏds6ds#ā„pČ ČáhDDDHr=N9ė㟌œ#ˆë‘ķVJí˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ú""!ÄDDDDDDDDDDDDDDYöDDqdˇ‘øˆˆˆˆˆˆ†ˆ‰¨DDŠÄ€,#ä|—#]EŅqųŧÄa—ų€6‚āx)ĶĮW‹ˆy l(‰Øčāfl‚ŖqAT9q>-A üTķŽzåaŦö{8įđJ q…˙˙˙˙˙˙˙˙˙úדØß¨C5¸Ēaˆˆâ"""""'bņėĐB8¤s#…03G hA{%âîņ Ēy Å7 øˆˆˆ‰Ų^F˛9‘âė¸r8.¸Ëˇ˙˙˙˙˙˙˙âū#†[t ^""""/ôŋø˙ ŋ˙˙˙°Ÿ˙ (cđÇ˙ã/˙˙˙…ü8zá ŋ ÜBü'˙˙˙ÃÂÔ?Ãé|(ax_˙˙Ãė KÏ ‡ ÂđĐ_˙˙ûŸãč:á|/˙˙Û˙ ž?đ‡˙˙¯ü/ú ˙˙ëá{˙Ãđ˙˙˙ū ˙ø?˙˙˙…ī˙A˙ë_øß˙†˙˙ŋũÂ_đŸ˙˙ ˙á­åpL˙˙˙}˙ā‚˙˙˙˙˙Ã˙˙×ū/˙ī˙˙˙ú ūd‘~?˙˙üá{đŋ ŋ˙˙¯2ņ?ßüpëÔ?˙˙˙Ą Á˙;2‚đ÷˙˙˙đ„Š9š‡˙<’Ÿā‚˙˙˙˙&‰S û˙†‚đ˙˙˙A?ÁÎÉđRuę˙˙˙DIú"šFTŋÂÁlaá˙˙˙ũ| D{ā˙ųnQú’ú˙˙˙×´üė0Bá€Ė% Ã< ËØ@žø†ņ 3\Gŋ˙˙˙ũõüî°`˛fΉØ Cá; ál>žœN€¸DøL¸uA˙˙˙˙ūøWÁ$nC9¸­×„žBĀz×čJr7 Üܸa˙˙˙˙˙~ƒ}s#ápYŒ|&!‘ȸ„p.^#ä~ ŋũđÛŪ†‚Òq ‰1°˙˙˙˙˙˙ü͝˙"AüA!M‰Ãėã(^b’NqĪⓞŖ§6ÍN9ÕOBæV#%¨ē! ‘.ˆ–C˙ū!…ÉЄq!‡ˇŦđ_˙˙˙˙˙˙˙˙˙˙˙đB,¸Hˆˆ†G28jāApÁ8†ų#‡. |Ž)ŧĀËĸėē.]—g#†]F"čâ.!#ž`6r85øds6F%Ėf§šd|Ņ<ōÉ|ß⠃ äĮ ˙ÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDáļ9,5“ŗŲ ØQNqÎ9Į=š Į û5>ĶÉu’˜ÆGČāÖ\đŋ˙˙˙˙˙˙˙˙ND˛|KÎ9ĀĄČƒ‘G!ܸ<s9naĪ ¨8įƒANjgÔŦ)Ęr°ž=ž aNT r đQ2Äå…9@g âĮ™Y/3‘ņ8)ËA—!Į öN šPl)Ęrœ§+Œæöl)ĘãŽqĪA2 üh.ANHsÁP?æ‚đ§0į…“‘!ܑČe""""""""""xÁ˜ˆú, Î%<Íäxē1˜ErŋĐ^„|Hļ"ÄDDDDDDDDGDDqDDDDDDDDzÄDDDG > `Á)Č3:ĸMæ#HŪo$"čÆG …à 4 €Ė#āP\hDDD† §4<7™Bā㞠âvz AD‡üV›)ė˙˙˙˙˙˙˙˙˙˙˙˙˙˙×Bô5Ũ>0á!â"""""$‘˜ŒŅȏ›Čųä^0‹Ŗˆŧb11‘ō<^#ä|Žfvf\!x‘Á‚>G#‘r0FÔBŋ Œ ˛NûęûŌ ÂņŠo#ä|˜F2>GČūb9G˛>aˆæb#™‹ĸčŧGėölŽLfė˙ ôCĖ*#3ų9‘ķD]F2?…',‰Nž íA…pĄđšŖƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€Át^#„a f"č¸o#æx—ˆˇ&čpū_hpü7…ä3š x4ŽC@¸äā†|! ÎCUȃˆˆˆˆˆ‰â""$Ŧ-Čܨ8įƒu4‚Žē! 3EĘĀ1ĢA˙˙˙˙˙˙˙˙˙ü˛á¤fƒ‚R8`ĨĮuÂv ‘°í[(DDlR>G28†d`gŒÄb#ä|Ūo0‹ĸņ¸ĖeŅ#'"DDƒHŽd|ĀBņ)ĀdQp3˛âO˜EÆc0‹ŖŽ~=͐"§4Š|ĸ'PĀwĮĐ$"Hp_~!ÄDDO1a„CˆlDM!s)"5XĶ0Čų#äpsDižFq‚#°H͈^4EҚ3gã#Į˛>GČúŲO’éB˙˙˙˙˙˙˙˙˙˙˙˙˙˙ëë-˙Ŧ0ĩß|1„"#ˆˆ‰RÉņf€æ"<\ ‘ĖÂ.Gĸ>lR<\7Ī "čē.ŒdpåŅ‚8DqL¨ °ŧėƒ8. %ÅėČ ¯¯‡ Qīˆ™†AÄDqDxˆˆš! 2´ŒŅDOŸ3ē/F3Ņ„\ČņxđˆH+˙˙˙˙˙˙˙˙˙˙˙˙˙ûDH§ $ëEžą×Š‘˙ ‚ úaÂBÆ"#DDDA„"'S*ōY’襎gÅ7Î0‹ĸâŒ2äa…\.:–’!}lW!°rfKáiQV)Ū…ĐRĄpüDDDT8ˆˆˆē ˙˙˙˙˙˙˙˙˙˙˙˙Âõ”øX SZ˛Kô  ē„„PŸŲ€ä¸ &˙"Á)P,8PĨá]ßĮÄ&Îrč¸sy€ČĖ#€?#†ČP828`ģ.2čē.‹† ¸#‘pČ R9˜Gŗy0Ėd|ŦÆyxō.ŽD|žG˛<¤|ŪG3y„]ˆÃ.‹ĸņЉtƒXJkPA?æË#tK‚p× ˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūņ Ô9ˆˆˆˆˆˆqĈ9ˆ<dq ĸäGŒDž ¨8 Ą]ˆ ˆŖ‡ |‰ ލ/-ÉA7œ‚đBŽAĒ rܔ AÉ9&91ČfŽAĢd(zöIČ A˜rN@¸æ‚ CHs9N[˜rv-ÄDDDDDHƒˆ´2>GĖFś2>o#æq˜Čų#ä|Žd}#äqHú^#Æ"ã1‘ĖŽ øD)y(ˇņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õĄÜF΀@‹ˆˆqFh§2|ÔbS†Nū+yØÜLEPˆ„@Ā Ŗ4PĘC)"¯0ĖŲt\ pÔ. °DDDDDDDHaĘsA‡8äX ‘ō9˜EŅr0‹Ĩ1›‘ķÉOä|˜æėŸČųH‰î„  áŽ0‚ö7В¸¸mˆ„+%ˇ8™ĸ(" Aë…ÁCžĢÄցoOëЈ!ˆ†(Bj26@â(FŅSGR4̓Ap[AŋR,ƒX ˇ ÂCģķ° "Awt]?ü0‚¤x_Ŧ!â%Đ{˜$”Šs#ä|‘ķē.‹ĮˆÁō>GŽ"čē.‹Ŗ‘ŧ›ÍY†txŅ"čē0f_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Âč/Ų5~ōi>ĄÎË`„ÄE—˙„ ‚¯ũai™–˙đÄDDDDDDDDEÄDpĸ""# ĒŦ/˙…ô/0âENWa>…°AÛ˙ā°­˙‹Âq˙˙˙˙˙˙˙˙˙˙˙˙÷áBúÍ0˙Š­a"% ‰ō|ĢČÎą „q녅,#KũäíCÔ‡ūĒBqGP0cŗč\Caˌē.‹Ŗä|Œ#tc#äxŧG#R8…Ņv\ˆä`Ė"čÆo#˜C†bČEᐎē˙Ô8 hī@OüË2<´č/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ü1!ļâ"""""""""""""""""""@đPãDH4<Ž „,ÆGŗĨz”,9Wæ7 ÂŋđácAIĖ9Į"ÁpD‚ÉAnaĖåšX\ Â\TG&9?'AĮ=›†ãžÉņ Đ^㟊Ą1R¨sœs9NTrø…öN 9ā§)Č`rrNDĐg$9ā¨<åá¸Ŧ)Ęrœ¨6†đk<Î9čaÎ9āĐh)ʰ§)ːV2Dr7"LsŽEƒa™ÄŅ%>‚û°˙ú‡¯cˆd2Į!”9¸į8į‹ã3¯=6{ diHĀ—âāŌ\6ËÄp<5‹˜9‚1‚ŋ˙˙˙˙˙˙˙˙˙˙˙-†á˙ß ëDAˆš#Žų>7‹\˜2¨Íæ,ÛVPZ‰. œqČä6‡ ]ÄGÃà ‡‚ úAC°Č D{…øõũ¨øˆ82CÄ%&2 üV… ĨCÔ@ŠĘ<ãĐ_˙˙˙˙˙˙˙˙˙˙˙˙đļÃˇūčˆ˙ę˙˙… \(ˆˆˆhDAĮ 0o¯ęC§¯Y\”!˙˙˙ƒátB=„Ą˙˙˙˙˙˙˙˙˙đö1 üŸŲ@œëÂ;[Y\ĄŒVLŅ­ČN.˂Ÿ˙˙ũ?‘ZC­„ˆˆˆˆ†o7‘ĖÃSp6„@đhq`‹‘ūD2é1o¯˛č‘˙Šę@Ƹa8˙˙˙˙˙˙˙˙˙˙à DDhHƒ™Ę‚p""""""ˇ#‡ƒ#r唟Ė#Ž"Áúķĩ…ÄTa…Aæ0Œ!4†¨ô@ŧB%ØHīDv•2 ō>FeY𞎐ã҈Á›‹ŒŧG‹˛á#Œ˜.#Šb0‹Ä|ˆų#ær?‘ķČŧaä|‘ķĀx`¸-…0‹ÄpbËÄr.‹" x+Ų ”9ztjÅ Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø_Ŧ#LŪG"!Ž"""!ÄDDDDDDDDDDDDDDDDDDDH,t CĖäGŒEÆ`‹‚ąr6Ghk—ų.Dp<3+ /đÁäé î""Д†!˜¤ĀfÔä x0A; Đä‡<šPqÉ9rœĘsg0į㈈ˆĐ_˙˙˙˙˙˙˙˙˙ü đü„ xE@0÷ĸ$?ō^$ §‹DDDDDDDī ŪDķa œ0ŒÃ$4†ƒ ėrAUÂđåÖS”ëåŅpĖ’rœxâ!„"v5čÄc7‘ķVDķTD0ŋ˙˙˙˙˙˙˙˙ūáČ1;4Čāx/t]J ͆ÂP¤ͯ æ"šœ3`PLˆ¸,u”ā~ ŊOĢ<)#†"=à Aaa‚‘¸EŅp< 5ÃÜ2* ƒj Ė!"8 +Ž?˙˙˙˙˙đ÷(ˆÎÅҌ˜„ Ž&8Rc9Į8â#s#į€ņ\p°°ÄD ã™ĘpB"?ˆžG`b"$2‡ˆ’ā°ē ˙˙˙˙øaÁ Čˇ' C pˆQÆv)€kņü;‚°Ü!ŒOä0wÂ˙˙˙˙Œ„¸rn@‘ĘsA)č, ˛ ŖhÔ(i\SC˙˙ü<ėŒ{Y„uM‚ ´æCŠ>˙˙˙ü1đ˙ ÂđA˙đđá¯ß…ü?˙đŋWÁ‡ūģ˙˙ū}…á~‡˙˙đúØ_÷}˙˙ū\~˙ ˙˙ }ü$Ģ˙˙ûøX^}˙˙˙ŋCü/Ø_˙˙õôđ˙˙˙ûø ŋ…^Ÿ˙˙˙ė?÷đA˙˙‡ú¯a˙˙ ˙₇˙é˙˙˙˙˙đA˙˙˙oÂ˙Ã˙˙Ã˙Á˙˙˙ôA˙Âė_˙ũøī˙Â˙˙đŋô‡˙˙ø_đ¸^•vA˙øj‚øî\Ž7đA˙˙Ã0Œds#Æ2>GÍæŦÂ4Čų0‹Ŗ4{0Œds?‘ķÆGĖ"čŧ`eÆ]ŒŽÉ ƒÎDs#‘t^0ŒF#×7žFhÍĪæˆē1‘ķy#æ#1‘ķ#ÅŲq—#‚菄p¤s6)!D‹Lä[<—Ą…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ.91ČnB9 qČešN@ž'p„ˆã;|’¯˙˙˙˙ũ" 2 †@W"BŽqĪ9NTÍĮãŸÍĮô+ ƒ9S5žĪÅ9NS”V āÜä́‡!܆H/†“’˛‚°â"""DDDDƒC†GޤxšŒ"„`Éâ…Xųu—6"""""""""""""""""²Mņ3ų⠐Š‚.Ž#™.Ė#™ŗ#ä|ŽEÁ ˛âȸG2>G29‘âņ#ā˛G@ܸBāxmĖä]˜Ž"“$DË%k˙˙˙˙˙˙˙˙˙˙˙˙˙ۅsKQBâ""B ňˆˆˆˆˆˆˆ“ŠpBFo#äpåÑō9‘ĖŽdxē.Dp6†™ ˛ã.‹ĸã.#áœaú‡‘Ä+aDDG&Y#Ælâ.Š#Ėˆ{0¸.\áŽ]˜#Hņr#äq EĀš2CÃ$Á˙˙˙˙˙˙˙˙˙˙õáōß[ˆ}|1"""$5gTb3äÁ’\ö`2@°~­ĻƒĖ•˜AB„DAøˆˆâ"'dŅÔĪDs=e҈öh‹ŖŲQ­ A˙˙˙˙˙˙˙ū‡eĐaāŪdl<…C“Ų\ė •ąęB띊ĸQDTgTÃ'ŗ°hPq äGH; X˙˙˙˙˙˙ŖœsŽqČj9s""""A sŽqÎ9ė”3‘0ËĸčÄ]EŅtx9vĻ#4{#ÅŅt]—eŲv]—ˆņË4ĄháR@ˆGáĢ&Į°ABq `H8ˆˆ‰ 8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰Á@⠎ÂāA6xAŒŸáđ˙˙˙˙ü<Úô!Æ/Ãq+"9N5“đGãœįđS’ãœsÁNn5Ÿ‹.LsAāˆANaɎx$98$9Į ãŖˆˆˆˆˆˆîBA1Ėä‡1r'ŠK<”ˇƒáđŽ!qqDDf.C+ aŒĖ9Į8į㓘æƒA 4“’ƒE‚ į˛aÉ‡ ˇ8ˆˆˆˆ<A rPFäH)ÍņœÃ™Čƒ†G"äG29‘ĖŽdxŧG‹ÄqJDvųĸ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ°ŧ äHØøˆˆˆˆˆˆˆqî™fŖ%ŅSEŅ#?›ČæT"ņ¤b7˜F#8‘âėā„qO"čâ0gÄ8ˈb#á āAq—eĀڋƒräG‹‘0fÆqF3d^͏›Ī"ŒŅAķ Ą­…_ÇD!ĮÄDDqbˆˆˆ‰Xސˆ‰Eâ`â#hÆ|Čų?›2>hŽä\f3bÁœ¸`‘ĀÔ6Į˙˙˙˙˙˙˙˙˙˙ÂyôŅ.  b ˙Pĸ(ĸ"""""""2÷3†x+ ÃT8į9øŽ"9…ņ „AXAK€\/‚ÃŌ„DDDDDNĀâ„q—›ČáËÄ|Â.Œv]G„.Ft]F#?Fa Ŗ Ô˙˙˙˙˙˙˙˙˙˙˙˙˙č j’/Į‡ōcžC„,DDDDDDDDDDDDDD1ũ #A%Á’×h: ˙˙˙˙˙˙Ã1đąe?˙ņ…ūȸHZ â3a´\!v]v\æ# Æx0lC Ž r80G Füē.2âō8"ėÁ"ņ)6qķŲÍÆœķ3eŅyM#ágüūhŒŅr#Æ ŪaF3qtc0ŒEŲz… ÍĮī0&a,˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""""""""""""""""""""""""""""""""""""""$œƒx3–擘rvEã“Â(#ĩL§Tˆ‘Aay ŅČQĖå9!Člrœ†H܆XįÎJ ƒŽLr ŽaÎ91ÉÁNFåAĮ=“ŗÁNaÉ9nB9‡%„AĖå §5ž r%ž ƒŽx0įÎS”å9NaÎ9ėã’Ã}IqX""""""$7!ˆ)Č{3•‚C™Ė9āĐA0§"Lr,sŽNæt\eŅÄ)ŗĩh"O ‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂːˆšŒEœ°1!ÄDDDDDDDGq%yNŠÔÍQŲlB"_)ŅtPŽąš yü‡š˛‘™Œã$ŧĀBāx5ĀĐ3dAĖå9r-žĸv{8įŗų¸öh=žÎļ(8ü(CŋXˆÂ‡ˆˆŽ""">"vŒœÉfGĪäāļˆāh ‘ˆÁ‘ķČâ=˜X ŋ˙˙˙˙˙˙˙đú 7÷ūĩŽ"&^ŽÕÄI™ŗL”į„#ŠG0,zPAB+Ĩ?ũx}øøQ ãD^0‹ĸčŧGČų#ä|‘ķy˛8ŒfķČäG‹ĸá ‘BčĀ\ ˙˙˙˙˙˙˙˙˙˙˙˙Ū BÖū˙ø$"""""""!ÄDDDDDNĪÁ Ą<,/ī‡ëũÄ&/˙˙˙˙˙‡ũ~¸PĄ=áÖzHŅÖeČâ.‹Ŗr7‘ķ.Ė#ä|Œ"čÆo7‘Āšq "ėÆGČų.DxšÃ,Ā™ÕGÉ\aōÆz0Ž%=‘øfȏ‘ō|ŽF#ĸ1PĘZČēŋænZ‚ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü&„DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD‚ĖĐ9œ”Ld|Įfģ/ĖŽEÃ9r#‘t\O˛Ü\MÃŗAā§)Ė9ā§ @äā¨"9!Čw x09H<ÃE˛܎ ä‡ Öåšä(ä3G$åÁĮ%đJ ƒņ.)ĘsAČŽ[ĀæsAŽä‡î\ ™N\sÁ ¸8įög)ÉApN ¸đTĪQ Ø\\ßŅ?‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áTDDDDE„""""""" â""",!„"""@ØšŪˆÖÍl”GŒķ„c0ÎĻygŗän.Œf#ō8šBčģ8‹ŖŒŽü]e؜GŒfˆÆo5fãŲ?Ëáŋc †""""0„DDDDD¨f]ˇ‘TkˆųāØ`Œ2āJ#x.l)â#™#ä|‘đĄ˙˙˙˙˙˙˙ũá_û‡Ū"".'uGâF~:į‘/˜F ü{7žG\ō1QtfĘ|É8rāh ˆ/áūáBáuâ""""""""#Bâ$ŒÕ™ŖŅã#ä|Â4Ė ē.2čŧ`B>a €Ō˙˙˙˙˙˙˙˙ū¸l?áèxOõ‰”-đ„īč(Cá¯ŧ0˙˙˙˙ú!āÒrܧ.9āĐS—“ˆÁ‹ĸņ¸Ä]E҈ÍF‘ō9‘Å#Š`9üđˌŧCs ‚åŲÄ\eŲŒEČō1Ã7 Ė2čĮ”‘Rëɚ…˙í‡ĸ"""""""""""""""""@‡ˆˆ‰N""""""$5üƒDs9nWLŅtqÍæâčÆz#ųėŽF2`eÄ#ˆ\5ņr<Īč/˙˙˙˙˙˙˙˙˙˙˙Ļe’ˆ&VđÛYB""""za’h–ĪŗBrĐ2lˆŽÂ™!ąDp6™„\ˆų9r#ÅŲtb.ËŗŒÍŒ!XccGVÅɋLđTb""""""@đĐ91Čx$äƒ?2¸ã˜ƒęVpA˙˙˙˙˙˙˙ëũCņÄDJų&B‘ĐeĀĐ00ü?ūĄ]”ųÚR:#Z=Œ#ŧЌG‘Æf‹Œ¸s āŽ/˙˙˙˙˙˙˙đŧ/Oõb"""""-ˆ–˜ÃëđÆáŪ!Á˙˙˙…ßúëø~÷Ū˙˙Âŋ˙ū(uŪ —ø˙˙˙…ÅG ū_ᅅ^?˙˙ü ЅđA‡ađŖ˙˙˙á|_áaü˙˙ú ā‚˙Ū8˙˙˙ū/ZĐ|˙ûŪÂ₇õ¯˙đģ÷ā‚úŋã˙˙úū/˙ã˙˙ûׂ úߏ˙˙ũx ŋ¸L>?˙˙­Â˙‡ô˙˙û 'ãŋ„đŋ˙õũ‡Đ^ĩÂã˙˙Ūõā‚˙„ü˙˙Pׂ û…ņ˙˙ëPáđA{Ü(\˙˙_Á˙ü˙˙Ãø ŊxOĮ˙˙ŊÃAđAzü.?˙÷ęđAj÷ Į˙˙õ ¯ã˙˙߄ü/økĐ_˙˙^ĮŪø|_˙˙årFĻUaÂã˙Ķ ā‚˙˙˙¯˙˙ûáü˙˙ũ\/‚ ˙¯˙˙˙ũ˙ū>ŋ¯Á˙˙˙™˧ž‰âĢīņōcœsŲˆ!–ä ŅÎ9ä$Ŗ’y ĸáĀäĖä hrđ^ã‘3•…AĮ=› ´*‡đVķL§G˛>aFhÎwü_˙˙˙˙˙˙˙˙˙˙˙˙˙ņnA†Xâ""""""@đî"Ž ÔG Ļ˜P‹Ŗ#äxã1EҌø¤|ŸGĨ“ä„qŠøˆ‰ÁCˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ÁĮ$DŅFhÆz#ä|Ų›Čy.‰R˙˙˙˙úËrnärŠ9Į3’MfƒÁNB9‡'âÁ')Čd†ÜˆˆˆˆˆˆŒĀ4ãŧŽd|ŪGŒ>d|ÄGĪ#äPŽ#B.Īx ¯š›ŒFléŦ‘lJ|„DDDDDīé %:Áļ5:#L­2ž*#ą¸¨ĪFâā†q.ŒˆŽdxē.Œd|˜eҌ˜Gt]F"čŧo#™†\Cd]Föb0‹Æō>G3h2ᒠ%Ä1\š"ą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙údūOˆŽ""#[ˆâ8ŠB"#B""""""""""""""ąS$38Â8‹ĸņˆŽEã‚9Eâ>G2>aČųŗ#ÅŅt]EŅr0!—eÆ`9â/ō8†¸!r#¨,‚ ā‚:W++û¸ˆˆˆˆˆˆˆˆˆˆˆˆˆ0„DDDDEÎËä†]EҌ=‘Å#ä|‘ō8‡t]—ˆų‹„8ËŖÍÅŲt\2CpÖ˙˙˙˙˙˙˙˙˙˙˙õáū˙ČŽ""""""""""""""'cH¤Œd|ĀĖQ°¤r. —qgŒWíŋa˙øUÄDDDDDq˙˙˙˙˙ƒÃū˙^ū/ü,¯NʏSąŋ; =ųų6;Į˙˙˙˙˙˙ėē/ eÔ71˜^{<ĖF Ž)ŧŽ)0‹ĸã0Ē`2\đ!xŽF ô…ãž܍Č#Îä#–ä‡"ŽLpČųČų#†‚8i„3`.ˆ]æ`ČņÆtQĻu‰ō|ÄOĖ"FaŒ#Lūa3~Cņ…ø ŧDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDāĄĘsA\x ÜHČų0Ž#ŽaLČč;˙˙˙˙ũf ƒų Aä3áņČ ĪNR ãŲÆŒRr r¨d‡,™X\ĘHr˛1H"S’‚ ˆæ˜į‚œ¨=’sJ9œ§0äĮ&9å9PEŗŽ{<嚠ÓãY$įŗŲĮ"A>-ËÂøƒBA'!¤ä$¨3šÎœĄ#Ž~*†AH+cg[á^Á…˜bkb""""8ˆ""""""""!ÄDDDDDDqЈˆˆˆšBWt]Œŧ‡ž#ųPĪGt` ĄŦG§ƒE˛?•č´˙˙˙˙˙˙˙˙˙ᕠA÷˙ˆŽ"â""U –gĸ>b#æãˆâ.FŒ‘ČÆaEŅxŗq H7. `ŽGĀĀú˙ûŋÄDDDDDDDDDDNÅL•ŖLŽdqGޏBäaˆų¸ģ.ËŗaŽS#† ‚ąA˙˙˙˙˙˙˙˙˙˙ūŋč/ú¯Ab"""&hDDDDDDDDė‰ˆĄ2ˆâ‘Å#…#Šh‹‘ČælÆ÷˙šÚ™}ŲÚˇđņAˆˆˆˆˆŽ/˙˙˙˙˙ë@•( Đ@Ę×ė.ņüŲ’DVKîTgōPŖčĒ.Ŧî°Āe%˙ ‚ ˙˙˙˙˙˙˙ėÆGČų#ÅāS„]ĖFĖŪdq ˛ņ†pˆųČų#掁HáŽ]äp.\eĮ!†¸äĸ` Ųp,#äq ‘ˆŸŖÁ ‡#ȏždЏâ1Čų<Æz0Žš!B…đXÖ"""""""""""""""""""""""""""EDDDDDD‡C#†i6‘ķČē1’ ”,˙˙˙˙ü)  ĢĜ‚ŗĪĮ3”åL§*9Į?œø¨?œįƒA ¨'ÅVF‚¸ô( į9ÉLÜU94åšŦ㞠Ä 9‡!˜änB9+ CˆˆˆˆˆˆČá ËŖFÄH]‹Ŗ¸â0*“į‘ŒžEãÍGŒí?XØs$ŠÂ"""""""""""Јˆ‡؈ˆšƒ" btFqPŠŽÄ"€Á1ŸĖG™Œ‘Å6 ų7‘ãŒÄo0ĖŅp…Ņt]#ē.! qˆ/ ˆR!Q”čÆb=Œg–˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ ˙ˆcˆˆˆ‰ ."""""""""jˆÄ`Ī™1ķ.‹Æt`Ė#ˆņŪ`Cē1EŅtc#äs#‡.Œ(h+ā•ŊT žđPņDDDDDDDDDDDŠ"‰)4u3ņã#är9ō>GĖ"ņ†q G"ņČāäpÉ‚8˙˙˙˙˙˙˙˙˙˙ū ‡v%鞎8ˆˆˆˆˆˆˆˆÎ&pÎŦūq†ãŲ H%7 nS]ČŪ*āQØ&v”_„Ob?Âôˆˆˆˆ‡„".?˙˙˙˙˙ė  ‚ą]|/…4ŗŋ゠áŖ!_!ü?|˙˙˙˙˙Péë"¨ė4'ō(ędæb#ä|ôGČųŧ‘ķPŽNfŽ#L§EŅ{„@–i…?Q'DŽ+ø_ˆŌr ãˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰——˛8¸4—‚<`‹L¸…ČŽ1™„‚4Ė#4]dÆo0Ž,ėGāž?˙˙˙˙˙˙˙˙˙ !!’ @ÍqÄDDDDDDDDDDDDH7pČāxe{0ÎÄŅ#5`Ž<‡B-Á‚`‚á—2œŦ+ âph)ÍAÎBÁ|x5 rĻS•Šø¨8g@Gjâ\0vWŧJĸ:"Č‘X’ņTEȎdxņ˜eŅp…Ųp†‘âņ¸ē.ŽF">n.‹ĸčē.‹ŖĀ7. ˁ¨˛ĄÉŽ~"TĘ•`Ķ6đ3~?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü*‚ĄŊpĄˆb"""""#'°3ԏäæLD*ķB#æÄc0EŅxؤs#°B9EÄ#™0‹†Ë0Eȏ‘ō8Ļ#äx¸GŽËĸņ„xCˆĖ8 °Â AE†>üDxb""##Ā„DDČR4ĘˆÕ“™ŧō1‘ķČöG‹Äs4F"č¸˜˙˙˙˙˙˙˙˙ü ū °đááa,DGÄDí+=# ö`#‡.!Ž/ęü‡án.!„#DDI)ÆLgķŊPc˙˙˙˙˙˙˙Âū?ë đG$ŧ Ä8ˆˆā‚Ãüx^ōœ1×°ņ˙˙˙˙˙ȟ@XīD@‘DŖ:ĸM<ŒĖ"čâŗÕČy#æōx¤Í\"ŧūUä­°‚a Ãx ¯pÁ1„"$Č,šä‡&91É;.‚‘‹Ųæ\0GŒŅÄ{#^ _ß˙˙˙˙˙˙˙õ5 ÜDDH#ˆˆˆˆˆˆˆˆˆ‹.Ž —FqGfK„8 ļIĸčöGÍv]Čņvq¸ÆhŒĄįe¨äuGŅŗ*#5fėūuGŗųäpb6eÃhŽEÁ ĸäG˛á˜\—ˁ´Œáē!Ž9œ†Î- ¤ĸ›‹Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙äe$DDDDDDDDDDH3‰1’„TÄ7"āA€…ÁTEĀÁv\ €Ž\B>G"čē0fv^#ä|ŪG3yä]eâ>l‹ĸčÆG‹Ŗ#ÅŅv`†ČøSb( °pˆâ"#Yå‡ (‚c’Â܂ø@ûG Đ9Į$å9N[š 9Į8įÎaČX4ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒ˙˙˙˙˙˙˙ƒŅ!ɏÚ? ŨhĨ!͑vxŒŲpÉPA`øˆAC ˆˆˆ‰–¨ŠŖˆÍ˙˙æD‚Âø,DDPnŒ!˙đũ†+`ŧū ,´Y›đADˇ)ą „Aū?‚ å 0q˙ôG X@Ąū"–(T˙ ‚ú@‚†1öDfčAG :7‚ #‚ 8 Ŗ‚ 8 Ŗ…AxÁã  Ŗ‚ 8 Ŗ‚ @toAGpAGđÁã :&ū1Œ^0AxÁüpA ŋ–G‡Ä_Æ/゠øÁüpAMbâ0A_Æ/å5Ž> ‚ū0A_Æ/å/à 8 Ŗ‚ øÁãō§‡Ä_Æ/ ŋŽ/ãņÁ| Įø€˙ø€leptonica-1.86.0/prog/ortiz-04.tif000066400000000000000000002034131506303110300166220ustar00rootroot00000000000000II*ūö ä  × ū%()124,,žHGPL Ghostscript 9.502020:02:06 17:26:23˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū@p’÷ŽZ†ĒÃûĮ˙˙˙˙˙˙˙˙+ŋ _˜|!˙Eŋđ—A…õū‚˙øBD}+ŋ˙÷˙˙˙˙˙˙˙˙˙˙ōš{Ęãˆx-‹‰L/ūn¸lž!K4ŽŠ8?˙Ä-“a!–ëp!R¸â j‹7¸dؘ8BIÁȈŋ˙˙ėÍÃ@û-ʼnN0@á•’,Ã2.A‚&Á‘ō8ĻYAƒP¤s˙˙˙˙ņ ŧhbM§ @„N80@Â#pĸü8E˜ĩIĖ;2Ė‹b ŽĖÐį6 ”ŽK˙˙˙˙ų\Õæ$˜á„ œr.ÍHģĐ& ˆā¤nSĪŅÂ"ŽqÎ<ėÉGjCÅG8b!0öLqv ĘqČ ÁÚČPA˙˙˙˙˙ī^ ĘröäGaz!$>ÉXĨT(B[„‹H(˜įvQ“æō>GĪ"čâ1že„]Eâ<\Œs2 !ˆLF†ƒ#äxĘŽāŠ]ލ"c⁠y 8S<­g‘Čúf2aČų—Eà 5ŋ˙˙˙˙˙˙˙˙˙˙ÄC R7Á‘ ė(GĖ#ŲąB$á‘ÅA‘ÁA.†šxŽ‚Č! xĩüUPŠ8‰IÄc#xwÂÑ BaÃ!tW?R,2Ė3Œ#0ŽR#ãˆˆˆˆ B!!@„H*ŽLsÁnS•ƒ™Ęq9+=“Üb ÁNUg~$8“.Q2ôB"1JÄ-tFáņQĮˆƒ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ĩ , h×F#ˆöaF##ˆ`)#†Yv\5KāPG#ėŽ)„\Œ#ŅÄ^#ƒ8„|DDD1â Á„8Œ!bqãØa  ŋŸÁE"!ĒN[ų’Ŧl\›â$fˆęfxō.ĖŅt\2C\Ž…Á Ž!tq##æĖÜ\ˆųŗ"ŦÖDqDG!hp@…pâõ#p@†o„!B“V$Į„.EãáB˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü!NMšŖ‘ˆ˜F Ād‚™)ᗉ菑ō>G3qÄp9U„DDDDFaŖâɎ x(“I\2C¨p¤œP â!g\ė¯<hē1EŲvSætˆG ŽäQÂÔŽ• Á‹ĮŖBˆˆˆŒˇ)ß ápQ&8rN.¯Š~dB üB…ħ tigaEŅt]f2>o7eâ8d ‰'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üVæBŲ €Û#ä|›ÍæãŲUŠ$;"­ „" qRÉų4ŋČܧ˙“„fŒāĻhÄfŽ"ë3`Ž8f×hD! x)8‘šN—††BãĒ1‘ō3<Œ0\2r8rčē.‹ŖŒb""#| „ãū$2B(črpŧ>õ„"tĻ"āf ƒ)qņq—EŲė‘ō>GÍæĖŌ0ŒEҚ*  œ‹ˆ"!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūEVdTÄGŽ! Ūo?ˆˆˆįi\aG8á,>Äã„')čÅU„J4šfķÎ#æpÉS0$.Œ7‘ĖÂ0d¤p¤8¤1<"""""""„aˆAy d™q ä|ō.ˆEáŽ#HIÔ$)ūƒķ8ĖŅxŒŽF — ŗaĖ8ËĸᯠŽ Á0]FčŒg™Ļ>ej Ļ€ ÄÎ8HđP—˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ØD4Aˆ"A!Î9Į=žĪđR ƒĢ4u"Í /ĒħÄ%„FĶžėÆaˆņx"ܧ ŽG‹„.!#†B]Ëq\ʙ$†.V"!Ąüa…C… !3šs>Š,*[DDDDD~;;Ã}ȏ“Jpˆ_!G™ŖŒŪa‹ĸä§ Â/ō9GČæG pr86‚-ÄHQÄã™Ëƒ9NHsŽg)ËsApLsÁnS‘áN[”åš(åAę= ĐÆ›đŋ°PøÎę( B98˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙B/øDQĖü\´‰Z!B:æķx @…—G"<^B3‘Ä.\3—ÁŦ¸ Æ\Œ"ņ„\ˆâˆųR>GÕĄ"ÂDDDE„VĄģ§ ˙ D‡_"ށ8…~_$‰‡ƒÎÆķyĸ=‘ā§đBČų„]EŅt\8B""  B"""%8ˆ‘š”åAœˇ)ĘrVqĪgđVsÁ-KQDD_øpü%køá -A_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū~""qBäĩF2>l‹ĸč¸d‚áČä\eŅt^0‹ŗ„Jrœ§-Ęrœ§)ÉPŽ?žĖ^ÃDDDX_đ_úá˙˙‡ŋ˛c™Á$æ˜Â"ŽgöG8dpÍö j Ėä‡ė8‹Ōc‰NCŽC-ÄDDDāĻæÎk3”å9Ph8įĐLrc9n[ĄDDDDDDDXB".Ãá/˙ūp°ƒ’č>c4Ą˜FžOČųŧŪG3ŧ‰qŽ""""?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙­ÖÁô"‰ō"áEŅȏžˆņtz.ŠЈæiō9ˆˆˆˆŒA †ē˙ÉÚöūų/#„c#đfHæaF2>Gá‘ķģ#‘pÉ ĸ8k— "ã/ō>GČņt]/Ã#‘*Eē1˜EŅtc#æ1‘ʼn‡ Ŗ“ãŖ‘ ãœsAœˇ)Ęrö4˜P‚^C¯ūƒÂá˙ Īųša˜€ ¸7B""""!!Ļä‡6ãœsÁ §)ÍAėIŽg/ s‰ ‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü)čÁÎ(F28…à L3äpæ1ņÁ""ÄGpᡄE!ƒÜšPģ˙ū$ŋ:2ņąLFÂ.ĸ""""CIČH'dPɨ-!ĻRs,„""â""1Ģâ"""%9ŽCfÁČDˆˆÄ$J,Ģ(™ōBÁzęŧ—ķųčĮ˜‹Äq ŒäGģ†G Ŗ˜\ˆá’…Ášpäq ‘Œd|ŒŠC+Q2BĮ|a¸„:¸˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á‰Čgq4åaNTsÁ\q# Jt/Rä[#áør á ãaCøE>o0‹ E;4ėÎ<‹ˆG GB᜸ˆČĮ%I`HDœÁ|8Âá˙&> „ÍAčS˜xˆˆˆˆˆeÆ8„˛!qŠ$ ī⁒rœ­d$D|ūa3<‹ĘgF3â=‘ÁČāäp¤pČ‚8R>G]ˆä\eâ>G3y„]—EŅ›1‘ĖūGĖ"ņŧ‘ķy?›23'ŠC$BÉ?|ЇÂÃøzĄ3åĀ\?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đĸ"Å>‰qÃ‚å‰ !đø(@Ž8ŒöGČųSHē.Œ.ĐdpČŽĖ"ã.‹ĸã.‹ĸėē0ŧ`‰ĖĢ„A˜œDDhDFˆˆˆˆŒ!WŦ§Ė „‚9O ˙˙>č/Dã…_&91Ō-ä„]œGu”$rC‰naÄDDDDDDD“<‚9âg!˜åqœ§0į‚É —XB" Ј‰¤#˙ÇņŪxPB"G‹ŖGČæG͘ŒL91ČŖœt"",˜ãy Įô˙÷đáôN8Hƒw0äĮ8ü?‡… *ü§ČqėÄŠ?8Ž"误GČņŒ‘đ¤r/Ãŋ“pør(øz˜Čų02áāÁŧŽ¸Ë„)ˁˇ‘G@„Î9ŠŅüÂ.‘ãĸīŗĀÎ^"aĖæÎ""gūOÂķ‘ŧŲC0Œ#ÅŌâ/Ė‘× #˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙B‡Ä KQxØdráČä]ˆų„\ˆų#™ætyˆą-˙ņ@„§ âIČ4Đ?ߐ`ŗ ˆ B$9\6HÜDDDL<äG28\Œ ˆŽQDDDDDDāŖŠr ¸@Æô+? hį{1üĀdr8…â9‘ķÄJÆ^#Â"""#É+ü2r qÉ8ˆųn&…Š8"᜸Ė`ų'!–¯ œä6B$G€€BBŽ%š qČŖˆˆ™ÄH(á”ä#ˆĀä"Á ąČ5ņėØ_ŠãœāÂ[$ŲQ0B ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūķD`9t^#™͆™20ē.ˆÚ)áxxv_į}‘đB"%9nDã’œIŽ"$naÃ#‚ÍaâS˜r(ácCŽ#ˆē.ŒG)°ÁxŽō9$! q)ʂnS”æMĮÜŪqČ´5BHq"EĒ) Ģ„EÄDWáâ""""Žpsyˆ‘ã.Dy”"!B#…k…Ô“‚˙!ÅÃ8!)ÁJp¸˜sŽ$QÄLâqĖåŧŪG3fƒ0˲čēqį"B[ČāĻ\0‡q8äœKrœ§-Ä㈐G.˛ČqɎŒ‚ˆˆˆq’p@„Î,¸ˆ>ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üƒc r#”âJ˛ äZ §qÄEt ‡áĄ˙4pšärsˆā„pr<\‹ÄpWDDHܡ’|âŽEą8∉n[’H$jĖ9œˇ)ÄÙÄ!†[”å9NSˆdrÂɎ$Į0⠎EŅÄ]Bõ_÷0dLC˜!p؜~—xÜčĄ4fŗy„p‡/ĖĀˑ3B„""""$ ÜDw#rܧ#–å9 qÎ8‰NAx8įđV13‰1ÄKŦ­N`!5™zCŲĮ9įd!)Ė8HÐbž"C@âqÉ8HDk˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũĐCq \C˙¸× ŗˆÖ‹ æâė¸g.Dp<ˆt"@đŌ“‘"9NRsAĮ ĀâB$AĐD(â"[˜q$â[Ą*Ŧ¸Äa’°×—YYHr#˜xb"'|Š9āDDäœ~˙…õČxIôø_xYš.‹ĸčöyč„ËŖ„DDDDDH N^ âWg‚ļŦēħ)ÄÎ"A+58ˆ’q3ˆĘŌ. ŠĘ8‹ČāxbqɎEÁ Š|Ž eČœqú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũjˆâ Ą)ōc‚˙ō_#āƒ7#`2hŸ#įVJ …ŖŠˆˆˆ‹ÄD§ Ķ]EéĆČ7DÍ!ˆ’‰Į Āä Į:Šā‚î‚'!ņ$9´*ŗqÄDŠ>‘)œhŗˆâ.Ž Ļ3ē1‘å#ä|‘âáŗ{ ˆXđ˙=‘T{0Œd|‘ō>GŽ!r#äx¸GĖÁŒd„fČÜFŒEü<8‘3 DČw!–\Ŧbu,fIŽLq&91ĖäŲ3Ž""$ĮņČųLsŽBŽ3ˆöG‹¨dfa28dƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øjÔ,>Ąx|ūo#™q3”äˆ(*"5ëˆXQœÃ‰œÃ™ËqH7 <ˁ """PBĻk6  ""EÎ"""qÄDDDD†@.ä㓃g5™Ęė'NįŖ|3ŧGŒh;#†@#Ƹ„|Ž)ø—1„=…üŠz’ų„`5 ƒdƒœsø#L‘ō<DÜs9OÎҟĪ"""C@äœDKsIĖ9åš!ȎS‰œä3G&9ANTÂô(ŦÉ ’"DDC˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Pd|Ž.HGĖ3„qžČųŧŪoeá߯āČæ`eĀ‚8ráŒD֋ĸč¸Gņx‘Å“ŗ§܈8ˆŒík4EŲ‚†G Áp\ÆD¨8į‚°¨3”$qĪŠNS”å9\M8ˆˆˆœsŽ"SˆE e—B"ãŽk ŋˆˆÛœÉBœãœruâ°ĒÉ DDDDB˙‡øˆ’ã‰'Ɉ‰ĐŧG s?EŅuа ē.#ˆ\ÃP‘’tfŠt"""""""#˛ Ŗî"&"Žg0č"&žŽ \.0ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙.9ā BæH8ˆŸ1Įa Ã#~ŋü“‘šNS˜p@„N9Į@„N<ŦĸĻgTfŒŅ/‘ķz˜Čų°æ¨ŽƒI/Ã$.Ė O”čDDG ¤‚$8âqņ8⁠œHJ|Ō.ˁpûĄü?Œ6CßøNtQ0â""qÄIŽqġÍÆhäo0ģŠ98)ĘrČÜDDDDDDH+ŽS‰œDÎC1Ęs~+Ž9Į8įâ äãYčVĐeŖˇˆ‘`5ČôDKrCĸ8w: B  n[…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õ‡ˇ…˙Čw˙đĪčDD!0â""ˆˆˆ‰ÁV“+°‚&D†$§âuf€@„A=NA änaɎ"%¸¸l?˙ÅãYևäB(GŗĒSĸ>o#†H`¸.\ '!ܧ#Â[.ixĐ9 B¤JSą âH r툐`p@„DD/˙˙˙˙˙˙˙˙˙˙˙˙é°Ü0Ą/„„DHCÁ„ĨB1ŠŧÂ/ €Z#™.…âä2 Ŧˆž%hŅÜÂ"[i™Xŧ0Ø>ƒ˛#˜rro. fé‚#ėޏ 29¸Ō#ÅĀš‹Äs#Š"ƒ „\ĸČąōCœq8‰91‚˙˙˙˙˙˙˙˙˙˙˙ūØ8t|2B!G&8dđˆš|.H˛ņ. …† ‡(‡4F3@‰!sD\8D(°\‡DÔ=@Ė‚8‹čN9'$91ÄE˙˙˙˙˙˙˙˙ ŋ•y#ā„D‡!EÂ|Hbf`.!#“!ŦßųŧĐ ˛ė¸‘\CČ F`5œ…d¨1Ÿ˙˙˙˙˙˙˙ŋ)ķēÁ "!HŖˆ‘;S$(ãAz!Į ŅēđôF¸tl Čāäp׉œ†Ųx› …Ņxr#ÅŅpkbDr đVĖ˙˙˙˙˙˙˙đļT Ċ8‰ ĄČŖâS’!"â"E“ˆˆ˜q áMÉ8y˛ß Aņ3’ˆä6€æFˆāl#ā„ĪäAȎ"$4siüG˙˙˙˙˙˙Ģ^FæDHOEŅpĀ@šwQ3‰ W,ظ}đôÉ9OÂ"9@1\fG —āÜs› ×˙˙˙˙˙÷Ä|)˜™‡8ä;’†!$"ãä2āŖe€˙˙†[˜sކŧŽDs#ƒs#ŠG1A éī˙˙˙˙˙˙¸H,DMä|Øl.2āąC p´â"g-ÄÉNaČa¸aÃ˙˙˙˙ø{„Ž"[ˆˆĮē§ ú bKsgæĮ˙˙˙˙á<)‚"$#ËæĘ˙đÖÁDDŧ*lU…ß˙˙˙v2~Lt#áë…ä9¸Ė0ŋ˙˙‡Ą_ŋīõ˙˙…ŋ…˙øw˙˙‡˙¯ü/˙˙˙‡ß ü.ŋ˙đ˙˙˙˙˙áUaBøw~˙˙˙ī¯÷˙˙úÂëûÃú˙˙ßûžĢ ˙˙˙á˙Ũá˙˙ĒÃ˙ģũ˙úÃûû˙˙˙úŦ ˙Ũ… -˙˙īëá˙˙˙ ˙˙˙˙ũáU˙˙˙Ãŋųngŋ˙ˁbN<ŽF">G‘Čē.ˌģ.‹ĸāA ˙˙˙˙˙ú‘#đåŊjæˆē1‘ķČē.ŠˆŌ3EãyČæGČâĀĸ""""?Ž)_Tc?›Ī#¸ņČđ)€h. N\ Ã.Ėâ9‘ĖŲ›Č⛏g‘tb$D˙˙˙˙˙˙˙˙˙÷¸ArŽš›Čų>GČæx92Ė8’ƒ[<0å9rc™Ė9Į8į˛XaĪBS•2—×đƒ†›Z3Fhë“āŧl‹Œ¸ eŲqâ‘ĀđÕ#…#…#‡.D|ŽŧGČņv^#戈ˆˆŒ!_˙˙˙˙˙˙˙˙˙TüūvFGĖDp[‰qvNĖh}•EûČߓ`q<{0ftr0FpØG""Lr `ĄČgq4 2 rĻVô:æŠ˙˙˙˙˙˙˙ :™fķHŪGÍš=›"čē/ō9eÃpÉrđ&^0ŒŲŒŽ34P‹ŖˆŧV‘/”ņڃû•#LãŲ$"ėē4‹ŗ’ …Á „.‹Ä|Žftc=ķ öG‹ŖˆäyG\ŒĖ!˙˙˙˙˙˙˙˙˙˙˙Ö2l7‘ķqČō8‹Ä|ō.‹ĸčâ=‘ķú Ž!pÉ „r.!/âčŧyEŅt]F2]„DDDDE†"""""&Āhē^õŽK‘ķā„|‘ķČÆyGŒØl.!¨GÄJ1.eų(D 2>GĖ2ā`¸ ˙˙˙˙˙˙˙˙úà hím"äl‹˛čŧG‹†HBá˜]˜Čų/F™%B"?’2G28†‚8¤p=Ã$ēžOįD\92AL¸„|‹ĸņÍæņqÕčŽ"čöGČųĖ2äa°j#ÅÃH¸Ëĸņ¸ē1Gč‘Ė#L՛ČĢ˙˙˙˙˙˙˙˙˙˙˙˙˙rčöaEåqÄDD†@/…aS4 Š-†;ė—g#‚Ø+—B.ΠDŌ$øˆˆˆ‰Įd(äQÎ9Į<…9NTr~{<3 3|)’´VQˆâ(EŅtqOš#ˆģ.\ˆų0Œdr8fđ(#‚ŠpZ.\ŒFt{#åB8ˆŽ"1˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūˆi9PHHæåÃČyøâ.‹ĸčē.‹ĸčē8‹ĸėŧlĖD|‘ō8…Ä#‚Ø#āÔ\e҈Ķ4Œ#Š"""")Č8í{2H‡6„`ČņÄ]F™„{#æ#aËĸņ9qāäpČrņ.!œ¸sqxŸ7°B",Lü1_˙˙˙˙˙˙˙˙˙ūy‘duÍä|‘ō2<\eŅtb.2ã.‚B""@đw \sŽg0ä[8ႏūqĖåLŦøæGŲi¤(<~°ád¯0ŒG˛>GČųæf‹ĸņ.‹ĸ도pÉÂėē.‹Œ¸ËÆÆ]F<‹ŖŲäJ“>ĀЏī˙˙˙˙˙˙˙˙˙˙˙īŠ6Čy<F3y#ä|‘ō>o#ä|ۃ0Ëĸá’dq ŒšEȏ‘ĖŪaČæGČųˆ‘ōP„DDDDC"""(äØb0EŲé +šfķöG"ņŧŽd|Â/] .G#äxã.ËŖDPˆņxˆˆˆˆˆˆˆˆ[ æAhŧb#ä|‘Ė˜Gq—t\ˆņp\šÁ¨Ž…˙˙˙˙˙˙˙˙˙˙˙˙˙˙Š2Ž‘BčÁ‘ķa’Gä`R>GČä]ˆˆˆÄGŗ¯ ĻGĪä|›ĖD|Â8‹ĸčģ8˲āܸ`Ž YøEF7Ė0`šĀôG|‘Čē.‹Ŗ„]GŗČDB">9\b?˜EŲxŪo#Åã#æxEŲq—Fđf. dp<2‹Œēo7Yx‘ō8-†‘Čāä|ž8Č"""""""#˙˙˙˙˙˙˙˙˙˙Čr Ą\{:æ¸AHy>Fd|ķyŧ˜F ØR>G0Y1EŅvr;ÄD\Wĸô*‘á–娑˜EҌŪn8‹Ŗ>o=F3ČņEŲp4eŅp†q5b""?˙˙˙˙˙˙˙˙ū2c e9\uÆLŗ$".Ž"čÆxä|‘Ä=ˆņp[ĸ8…ŅvfŒd|ŽˆÍŖˆÆyEŅČ<¤BgŠønb#Í8Ä{7ō>GČäxŒ@.š^1ō>lÄDDqŊ˙˙˙˙˙˙ū¤Ø’1›ĖDs0‹Äs#™R9 Āđ7.ކ™p.GČųˆŲŸČų.„Dq ™"¸DB#5ü"%ēÄz/âņ.DxŧG €BäGÃ4¸.]—f"čē.‹ĸčÆGĖ#ˆˆˆˆ‡âEŌ*tz1›Čä]Čų#Æ28rč¸r9eÃ9pZ˙˙˙˙˙˙˙˙˙˙˙˙˙ū8YØD@âHˆē8‹āĒ\eĀđW#Ņt]—EŲÄ]ˆų„]B"""""#ųŅŅGŗČē8‹ĸčĶ#ä|‘ō>`ˆæG"âÃ$0ĩÉNuˆųˆÜ{ qœ Bá Ãa—f žEҌę‰YˆˆˆˆˆˆŽ+¤G\ō1˜äxÆz<‹ĸņ#ä|EŅt]ˆņr#ČDDDDDDDDDDHnS‘8į“‘šNS”å9‡"Žx4 AŌ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üÂ8lÎ#†@ĖĀ.]Čų0‹Į‘ĻaøˆaˆˆˆáCĸ7y1f2<]ް[‚á ‘„c1ąŧDDD†˜įØT gÎk3•ķųĮ<悰§5 ãˇIM•Ŗ4c4A34]eČÁ°T#æxō8ŒŅėŪ""#˙˙˙˙˙˙˙˙˙˙˙úÉÁ‡8ä-Ãš 7 įtČĖôa@X0Ø8ˆˆŠøB!âÆn)”čŠĮ#ČÄba—">GČæ GČᒠDpĐG#ˆÆGÎą„DCˆbWIŸČ*#8E؈Á˜ˆų—úAÜČąˆŒČų.‹ĸėģ1eĀōB""""qÄHŖ`rƒSš EãžÎ96úmNő%ČņxÂ.‹Ŗˆādŋ˙˙˙˙˙˙˙˙˙˙øáJŒŪG"ė¸ eĀđ8/×^0Œfķyŧ‘ķDSđ„DD|ŽŠ•ĸčč‰œeȎ) Áš‚.ī ė9>jČļa#0F$Čų#ÅŅėÄo4E҈öGÍtf‹ĸņķķ˛ÄTdÄcC2>GĪ#ąĐˆˆâ"""CIȃœsŽg)ÍÆĐx+ ƒ9Ph7 ƒŽ{;q)7!fEQ×7ŸĖ#v^7 ŒØ)ãÂ<3Čė^˙˙˙˙˙˙˙˙˙˙˙˙ų>+ At'Äfāœ‰aMY>GČų1Ž"ėē.‹ĸčôqˆâ0Ė7ž#ĄD""#ūūÖ[šåB!yˆž"<]°Ô/ÃA„^#ä|Eâ9˜EŅt]Čųˆ‘ō>~.dų!U˙˙˙˙˙˙˙˙˙˙˙áģķ"Äc#ä|‘ķē. —°r8*—eŅx›ŽDŗ oá“}QÄiå;(Eâ9°X;7ˆˆˆˆÛ˙˙˙˙˙˙ 6 ‡Rß\ūJ"Eãƒ;* Ņ!Ã}ˆr ¸e:…˙˙˙˙ū{5ä#äAÎ8šāˆ‹Ø @…‰n&åŊËpQ”â[›e1˙˙˙˙˙˙ÂB&… 2;00ƒ†,p?ūHâ™N‰1 ė¸8"cžE((™˙˙˙˙˙˙˙$æ$ÎĐH‘ÄÁ4[‚#äôN?ˆ*e:.Ę ŊüDKØaPxáĸ ᄠ eé Įĸ´RjÉ8@„4˙˙˙˙˙˙˙WšÃ4ę@<īˆ’‹$8…ĖfJtā‰gÃųĢ’‰L|ˇL#~váÁ>!"Üd<‡š B,ē.Dp¤r.Ž)†\.˙˙˙˙˙˙˙˙˙˙˙˙ø‚ˆ C! ƒ#är%Ėė(DX•ä‡ %=‚“†AD.PP˛Ÿ)ŅÄc0ĨšNaæ‘tc#ä|đČâ‘ō>G4Hyp<6ÁKč2 |C)Ĉĸœ +ņ)Į-ÄĄŸ2<Ŗ7.Œp††G‹‰Į p⁠ŦƒŽCc˜r q‡<åšNj˙˙˙˙˙˙˙˙˙˙˙˙á?æŲrOxOâŽŨD#Œē.ā°\á’3qqœˆæT ¸†ĸ.ÎĄĐwüA"7˛c™ágTKäų‘™’s1EŅpnb.ä ÜDG!–ä6$2Į3‰œˇ žä5&9Ė98-Ę-!‘ƒ†ˆņ†ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũu’„EtB:7‘ō?›2>ĨŅp[ 3‚9">GŧGČųą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙û<Q < 9=§ž?*B8OøüP'˙ :ä|Ÿ#ä|˜eâ9˜eãU0 `NGČáHų0F#ų¤LR ņ4ŧDā]ÍÁ1Ėå9!ɎEã“IŲā§+cÃÄ3KáčEūĩ„Iᅛō!<õžČų.2áâ"""""""$2Č<Î9Į8į1YÃ2Hˆ‹GP‰8Â˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōPDãŒ9ÉaRKę!yž'¤‡O“DPŗŧKĸņ1—G"&DDDDDDDHdC’rܗ› äÃ9ÉĢ& N „DG|0¯æHˆhBá‚x-!#ˆē0d|Â0fƒqŅ„c0‚eŲq—ĈˆˆˆˆˆČA‡”ʰŊ“Fáøpūu_˙˙˙˙˙˙˙˙˙˙˙˙˙˙ė-ųR%8AÁ#Ÿåq™ø§Í™„ˆqæ6ˆᒠ¤pĐG#Ņt\eÄ4EҌØR9Œtz1˜F ¨dmȈÃ˙_ã…˙\ĨG‘v^0ƒÁ äœTGŗĒ:įT]Gtc0!ČæGŧG3¸ „DDHä 9naÉ9‡<sŽ{8įđS•ÄøÚ–L!" ÁŒ“ŒCB";°ņ…ūü;üā ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õ’P׸A8„'\Ÿ0xĄ‚g&c0ĪdpÉ r. %Á ‘#ŠG"äO›ŒF2‘ m—üU˙ÃøA……÷ˆ¯īŅ)ČāYG´Hyš.P9DHw xmŽLrrr#—…9‡3’P(§ń" â""÷~āĢáDžáũI4]xGt^#™1ĖĀ„|/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üvDŦē8ŒfĖ‘ȸČDc0‹Ä|Â.ˑˆÄG‹ĸāyÃP8bX“XuũzÕBøë‡ųŽžHG°Ļķâ1‚8āˁˆˆˆˆˆˆˆūSĐŗŒģ1˜!Ër§ÁPEŌ Ö8ĖØâFLÚà Hpĩ…īaá÷ri îųįU˜å: Â1‘ō>aEŲ€[‚á —˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áė,DDDDDDD§ Ōä S‰>50Â0„>Fæ^´wC ˙×ŋŠ&g‘G´ˆŽ Ø*—å҃7˜EäSÄV Xäš܍Čgq$9Į3•q7å9PqĪxž28Ŗ#|>Ū <“EŅuË…ô8O×đágDc1EŅu˜‘Ä0 `P]šČę‰DR18ˆØá˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ir< Ež âq$EÃ"""؈ˆhN;b!ĀūˆƒÉ‘FŒ-aû%ų!Â5ĸéI#č3ų#æę6v\6DDDDDDDDHC‘8Ķ0įƒy0gƒ$,(ÕXd/™{儈Ž2f›~ä*ŧŒSÈ@ČŖ‚!^•Ŧâ8Ģ'ČųĖx†G0C4]™˛!† DG‚ÂâB<Ŋk˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú‚Á6)!h/ĸCųŠ⤠G#}#—Eã öaC0ŒČæa9ä8â"""""C4r nJ rđÓ˜äH3˜sŽqĪpg0įđTĐzCŽtäˆ, ˆņø^9 Ž28…ŅÅũ…ö ‚#ŲP0@ūDuÖ LtOš"ë/Íä|ÂRäa`…— ÂᑗÅ#ŠG EŅr0ËÄr.#ÆqŧЊŧŅB[hDDAĄÄq äo˙ƒā n" ŅŠĶ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø_Â@Á‚âÂŗˆ§Ī+4㐠sŽqȎaÄ㈈ˆˆˆˆˆ‘3ˆ<5ˆ9')Ęq-ʃŽufN&q """{< ‹!F1˙õ Åų 1ÄH#ۃü"$t6˙5¨g‘tqEŅt^#ŠG€B"""""$žMįü`3 (B""":C‚$2ā¨=X÷Âä<å%sā 8yä0ƒPâD˜äŠ8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đúÃÂ$"8ŧGŒd|$Į!Ļ8ˆˆˆˆˆ‰ÃčT‚ Ær¸üC:\H0ĀÂÖ"C;‚#† ‚Heš qÎ9ũ.˙î$ ĸpÄã™ÂžEdqMüČR8d ÂĄ=šŒŽd|‹ĸčšķ.2ņČâ‘ō9EŲt^#†@,EŲÄfČģ:3„DDY'0ëÂūōc`qCcˆˆ‹.ĢÃ˙Á܈8"äG‡=Â"8ˆuĄ"9n/Ŗ™ČÜÐqÃ#ä|‡&97˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūÔ˜8ˆˆˆˆˆˆˆˆˆˆˆHâqėÎT‹'ˇÔū"Aø"9–änFøãˆdp"ü/ ä‡Lâ&rqZÍ2>a8Ė#4]Q0įˆâ"""""CBH8惎x)Ęrܧ4É9NS”å9ŧü^‚œ¨3”åL¤ØXˆˆČCšž51BÁˆđŋ >¸ ŧ-I|œˆá”GŽ,D…ģ #4]EÁ„ƒr‘ü‡ŸÍÅâ8Ą B$naĄq Ž"""""CIÄN8 BS–ä‡8äG-Ė91ÍāŦ)ȃ!ËHiĄÄDDDD?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡Vrܡ-ËrœæsPÖ8įŗĐŦ*˛ {$ũáöán “1ũĨEAĻAr9œˇ \p@„d?ĸ 5 ĄpC8ްŽģ$5!Ŗ‹r ä;›Šrœ§)Ęr ã†o0ŒEÁXDDD0„X‘§A.ōʃZüž=ļ „Db18…_õÂÉî˜_ęSÅ҈öĘrđLæ‚̆G9n&s"" ˆāÖ\ áˑ29t]´ "–âg)Æ"""""I¨1r‘{ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŒaŖëŊ{ūŊCįâéNš„^0ŒAHä\6ˆá’Ž).ČāŽG ‚åÆ\M2 ÉAVb$K#†šp^E¨DG•HŽG#č?Ŧ Â"ŽgÉ8äAū¸ay(ÅŅtb0yŧō/EĐ"œ‡ãœsŽ""""""$ aɎDrÜÞÍđS•ÎTqČQČuá"Đ­HŽ$G0âDF0¤8ä8ˆÁVø0G Â:$3G Đ䇭˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũĒ#rō„q-ķûÂÍų§GČūq‹‘„]EŅxŽd|‘ķŧ™‚.ƒ9p<Čä\eŅt^#äqMä|›E ‘ˆˆˆˆˆˆˆƒ&9D`Q‰ˆ’qÉ ›§i@Ū$QÁâD#ˆĮ=ˆ‚$QũéÛ¨¨đÍä|‘ķf`B>GĖDDDDDDDDDDDDķSE˛s9Nh.fŗÁT7mˆˆˆˆ‹ŒHޏ.qEŅԐqÄH#G)Ęrĩō ÜFÎsŽqņŧq^#ä|Â. „Îaī[˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī… <ˆ8G`ĒE(Vęc#ÅŲr#ä}ˆˆˆˆˆ“†Čdx6s9Px5ž¤CĪį᥆?#q!ĮÄ3y„"&a9C„"#!ŽåáIq !pØb#ˆ\jqeŅt]—ÃN˙âˆ!HÍGRņT3G €'.Ė\ģ.‹ŗ#™NÎÜÄDDGÃūą#p@‡!­gÔp ŽX2 Dã’päĮ3˜sŽg.ēäÁ›ÉÎ#Įv^#™¸ģ.Ž!pÉ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü?áÕĖH#ƒi.‹ÆķI‘GB"8ˆ˙ūaG˛9›Œ@Š{™‘ķ`ÚG eÃČ09Į8įāA˜qÜx”pBØVuDŒŒfķ ˆˆ"ë0‹ĸņ„]EÁšq— Ô#…#ŠG28¤|Ž!t\3 ŖtfĖãyü“į‘œGÍæĪÃ#†H4eÆ]EŅqų#æB$DJ ?ũˆŽ"#ÄHȸ4— åāÉUDK~uD g=”čöo=ō9F"čģ1‘ō8R8-‚É#äxÆGĖ ē/â"""ČŖ™ĘsqÆG˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙îDƒg.9āÖqÍãœæãŽi•2œ­š„ˆŒ?ũ…ōN'‰.EÆ]—"8§¨Eâ>`#ŠG^#ÅÃ,ūG29‘õ6d|"C‘"9Nh-ȃ“‚œŦ$9Į<åAÃ= r€Š’¨ˆˆÁM!|˛ aŧ8ˆˆˆˆˆˆˆˆđĄ˙üI$QĖæDæNœ¸G] xiBÁnFåÉR""""(‡L8Ã˙˙˙˙˙˙˙˙˙˙˙ū8|0Č-˙Õ ‘G9ˆŒō8‹˛ņR8.!°Ž….Dpd:äpË.Fâņ7ÄDv"'Š9'˙‡o˙"NA¸oč9KP3˙“ÅŅpÁ2@ Žd|"8Ļō>O˜F´Sįfĸ‘âāA2ˆæ"â"#–ô˙˙˙˙˙˙˙˙˙˙˙˙Þ/‰naÉ9 ēŽTyä]f2>aEŅx‘ãŲ6!ˆģ.ŧG €Bđ! xW!Ž9Į7rœÖE‚œ§4sŽ{3•…Pö<–DD“–åíĨ¸ˆŽÁ~Ø`ūņ@„†ÁŲp\Ä\¸Ëĸá’äp`ŽEÁrāÜšEŅtqžÄDDA„""#B""—B8q4˙˙˙˙˙˙˙˙˙ÂáØ=/%üéō>GKŖˆšâáĒ]—pÎ\Čāx4‘ÁČųČâEҌF2>GĖ"äaEãē.‹ŖĐd‡3ˆ‰naЈˆŽ2ͲŽ[–Į„Á†p‚;JČ.ŗâ €l#†i0\ ‘ČäIŽg-Čāđcœr|TĖ2"""""",!¸j—ˆá• ŸkPĸ?˙˙˙˙˙˙˙˙˙ūÃtJr-‘ÁA2”¸5‘ōo4AOfŽ a˜Gų†c#æ]˜Ė3˜đ§uŖŗ7EĀи„xē.Ëŗ‚#æ#ē$g‘Ļ""""#_˙˙˙˙˙˙đŧˇ%ˆG2>`ŗÁČāfČų#‘q—eŅxÄGĖF#ē.d|Ÿ$B""""""7á¸aĢF™6!ŒŪyEÄ0ËĸāfF˜ ä|ŪjÎÅrŠˆˆˆˆˆˆˆˆ˙˙˙˙˙˙˙Âɲ–OėŪGĪäs0/ō>Gp3SŒÃ1‘ķČ­b""#‡ ¯HūSÄ8ĄĖFķ â1‘ķČæG28d†™Bá ˛äGĖ3ti‘ã0Īd|žF#Ų›Čųڜ""";˙˙˙˙˙˙˙˙˙˙˙˙Â; Ė#ŲŧQxÃ1‘ãv]"9‘Ė"8™2AP‘Ä.‹Ŗ8Īd|Â.‹Ŗ#æâčēõđ‰ąZ"čē=8˜ˆņŒÂ.‹Č3ē1‘ȸ-Ã‘Ė˜"<]EÆ]EŅt]FhÆVá&É*˙˙˙˙˙˙˙˙˙˙ūnQEҚ8hģ1AG°m.2ã.Ųž„DDDDDDDaų_HâčÆG›‹ĸčÍČų„]F"čē.2āšq ÖīÂ+Š#HÄ]EŲv\eÃ$4‹‚åÆ\eŅq—föGÍį‘tiˆˆŽˇ-Y(ŒfttEŅt]F3ų„\"ˆō.ŒF ÄG‹s0‹†@3˙˙˙˙˙˙˙˙˙˙˙˙˙ ėŌ/Ā‚á’dx¸ĖŒŽd|ÄGČų0‹ĸb""Јˆˆų\ņtS™ Dr0F#°.^0Ž ᓑĀđZ#‘x˜ˆæb1ˆņv`ŧ"ZŽHl#Åâb&#ˆē8ËŖaEŅtqˆų#ä|‘ȸdƒ9R9Eâ>GČæG‹ŖŲ°¤xŧKĸAķy¸öOˆˆ†„GÆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙… ŗÅ‘tHÎą>y¤Ėfˆē0!Ā[ 29‘Ãt^<G˛-ˆˆˆˆˆÄXˆˆˆ…ŋđ† ›#)š.gķäGĖ"čŧG0S’…Āđ`Žd|Ÿ;ňˆˆˆ†Hr(đã˙˙˙˙˙˙˙˙˙ ØEr\ŖŲNŽ"ė¸-†Âäo*B‘Čģ:B"G!n&Y7˜\ dē.ŒfŽ)øÄ{÷˙˙˙˙˙˙˙˙˙üDDDH"ÁN\rcž 9 “”æ‚Ü„rđ˛Qâ""""#ˆR¸ĖĨĸŸ0Œˆ¸`Ž)R858Ž Ä|ŅĢ7ˆˆˆ¯RĄIĪÆ‚Ō^8AĘŪ!™ĸ.Œg‘ėÂ1˜ˆų#ÅŅxˆų.lÂ.!˜3D]F™2b""?˙˙˙˙˙˙˙˙˙˙üž¤%9ˆ ›fâT3!0Œ#äx¸ËĸāfG28s‘ķy3EҌ¤B"""#˙k<æ•ĶÄ<ŪaĪ3ˆģ$d|Â1šFp\¸d†Ņ‹˛čŧGČųCr0ËÆxŪb#ä|ō3F3DtGŖĸ)ņ ÆĘī˙˙˙˙˙˙˙˙˙˙˙˙˙ûá…â"0‰^JŅB3EŅB8‹ĸčē.‹ÆōaG˛|DDDDDDDDDDDD|îŊkŠÂ&ÉŲtQyÕF3qÄ]A—fl ft]žÍÆ3˛pˆˆˆˆˆˆŪ5˙˙˙˙˙˙˙ūŽ+šDI#ˆē/Áo. 'ėŪyŖ˛¸–?‘ķyŧՑō>GĖGķčŪGČņtq—°ŸéŖ hĄŲÄ]EÃ$5 øDDD/•­¤r4GŒŪlĖ#üÄl#†HŸ˙˙˙˙˙˙˙ī„‘™!F ‘ō>GČâ‘ķē00!”o0Ž#ąĶCår"3Fã3gxÂ.Œ6d|ūaEĀĖHá‚čön:Fr˜E興ˆˆˆˆ‰ĀŨĘrœŪ~)A¤&’ččŠĻ~. a°¸dÁÍĮ!˙˙˙˙˙˙˙â"$AÉ9NS•‚œˇ* åLĮ?ænk W.‹ŖˆÆo#ä|Ã.Dxŧo#ÅŅv]EÂGōá’Čâ‘Ä.Ėt]˜Čæ`f3aLĘvw^"-^C4ršDsÁę9RČĖō/F"ņ …#ä|Ždp¤pĐG°i#‘v]Gx‘ķČâ1ŸÄDDDDC)N)˙˙˙˙˙˙˙˙˙˙ķ"#“d˛1eŅt]™ƒ#rāfČäc1G"Uâ"""""#õ‡ Ž*dų7EŅph#ÅÁl2˲č¸`Ü]3â1ĮxÂ8hÆKĸM†„DD˙˙˙˙˙˙˙˙˙đ°ŽÆ‘ŅEŅėÂ8Œft]ˆæo#Į"9‘ō>`0GÁr8dp šĖŽGČų.Ëŗ8Âī‚E¸ŽvMÍæ‘äiÉüÄc#™Sļˑ/âņĖˆķ=†ceˇŋ˙˙˙˙˙˙˙˙čnŸ7ŠN‹ĸA‘ãļåҚ.ĖŅ×ü#"TuÍæō>h‹ŖL‘ŒG…#æ"8Ļ"9\eÁád‹ĸ_#挞8Œ2CXÁ#DDB帞JÖ'DTŅ­ŖLEŅtqEã ¤pÉ˙˙˙˙˙˙˙˙˙đ"fŒgō>G2<^#ä|ŪGČų°j#†H…ŅÄc0‹ŖÚxDCåq\ō3DŒüu)…9xSš €ōᐠÅà )pBņ0!1‘Ë CŒ¸d†Ųr7‘âčģ42]ˆˆásąŧŽEȎ!pÉ™ €Õ‡q)ËsqɎqĪ9XT†˙˙˙˙˙˙˙ũb"@đÚsqĖæđS”äH.9Į?x+ ],0äØ+#ä0)€3™‰ÁŦüQ˛~…‚œŧ#rܧ*s5 AJl7Ęĸ%ŦŌ.‹ĸ„{#ŠG#Ų. `VGČųˆ‘Ė2|ūyGsȈ‹˙˙˙˙˙˙˙˙˙˙ūÓd•ŌŅ—#ŲŧŪGĖ"čē.Œds GĖ"čÄ^#æˆē.‹‚ØEŲĄĖ#4b=›Čųŧę„DDDDDuÂō¸Ė—‚˜‹ĸčē.Ž3‘#ä|Ž!â/ķA2H¸„p.]—EÆ]Į#ņ‹Ŗär&3DBņЈˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙đŽÆōB8Î"čē.‹Į‚"8-‚äpU.ÎD|”#؈ˆˆˆˆˆˆˆˆŪ˙&÷šŗVGÉÁ‚8l†G €8#…#ā¨\ Eâ8’fË˙˙˙˙˙áäŲ=âčĀĨÁŽ!r#†špČfÅ0d„D!á-pĄÕ3ŦGČāx+Āņ„"$BŽ&Š9œ§* åšFß˙˙˙˙˙˙Ã2¯0Ž3Ž`2X"9Œ"á ŗ‘ō8‡š:˜ˆˆˆˆ÷ŋČÖ`2C\žF2>a—‰ Æo7ˆˆˆˆˆˆÂë˙˙˙˙˙áÄH nB9n\˃Á ŠšĖæķAĮ;sPÃ˙…!ܧ!āĐS”åAĮ:r Æę=˙˙˙˙˙ōl‚Pĩ˙ÃŪŋ˙øö …Ž˙ü0ø{ūē˙˙˙ęŨŪŦ?˙ø_ւáúŊ‡˙˙…ũū Ō˙˙˙‡˙…ß˙˙Ã˙…˙…˙˙‡ëáá}˙˙˙ũ‡÷˙˙ü,=Wááo˙˙˙ęß˙zÂ˙˙ūžÃõ˙˙ū˙˙WÂ˙˙īēáúVđŋ˙ü/Ŧ?÷˙˙˙õŧ/÷Ç˙˙˙˙ÃųŲ‘B˙˙˙ë#ŠrœŠ÷ČqÄD28_˙˙˙Â×$ä3ņĮ<„aī†[ˆ‰8­™á˙˙ÕÖv&†ĮG0ƒáū¯;Ŧ1%b%šÜFŋ˙˙˙ßYŲÁ ŽN …Āŋ ũå/#ƒ‘ĖŽE܂9ZŸŠr°o˙˙˙˙˙×äÂb$Db#ÅĀ‚bááwšŒrâÁĸDræƒFDM3×˙˙˙˙ü?Ô!!Į8‘&8đS”á|(Ëpj°ČÜD†Â1NHq › 8_˙˙˙˙Н™ŧ!)Ė9 ­MÄH6XDØfx‡ī+ņ DƒÆ)–ã|›EŅpÎ^#”/˙˙˙˙˙̐"ĪHÁ"?ä09ÅaĄ:3˂¯–åQ f‘ĀŋúŽ"C3*â7Â$€¤A÷‹?W+…#ˆŠŠ` eÃ\Øc˙˙˙˙˙˙˙đ„ÑG Öä‡9Īē 1É8˜r(õčcÜA˜a1īĨfŖ7‘ō<] „\0G á‘¸‰ Ž%8‹.ĖäFã`Đ\6ü<:ņo7ŗZ1žF#ŧ‘ķŧÂ8‹ĸņ†ˆ.â""$QÎ8”â$ņ1Ėä‡ ˙˙˙˙˙˙˙˙˙˙˙˙˙2'ĆXâ""HŽHq!Ģ .a;.‹Ŗ¸ē.D|˜EØ!!åšĘsyüãœs•šĄ!Ž0!aá^Ąkq!G"9r(äŸ"  '!–9°ĒrlP‹ĸđSLŪGĖ,Žfō8\2A”¸l#är.‹ŒŧG3#ä|҉ķ¨Ī!!Ėåaĩ˙˙˙˙˙˙˙˙˙˙˙˙˙ü:ÎĖâ<`4IWDDÎ"[˜s>$Į@„‚â&5hėQ#Z.FĄ‘Å0Î ¸™ph#ƒžūGÎąžb",ˆˆˆˆˆˆd8ä4yĶĖrî?–Æ"8(#™@؉čÂ8‹ƒ`!Ċ8˜4#ā„f3Â&r0 `¸dšr=â„r7q‰ˆIŽ/ę$p@‡˙˙˙˙˙˙˙˙˙˙˙ūÎɆš#‚‰ –qÎGh’âB""""¸ ŋGT\(˙˙˙˙˙˙˙˙˙˙˙ÂÉšŒÁ™#…#ˆ]p…Æ\¸,—ˆâ‘Ėˆ‰î"("#ˆ‰ÉA°Đo$P"!Fķˆˆˆˆ‰Ä#‡ oęąLr‡“iŠG29 €Y#‘xŽĀ„Jrđ¨=ŸÍė†ČŽ"DĐ8Ž8^—Ũâ"A@ä°Í/˙˙˙˙˙˙˙˙˙˙Ęây ÚG"ā…ŅxŽ)„]˜‰œˆ8Í™Ä†ÁÄÎF可Ņ—Ūđ˙™^FF´tF3Ã0G‚č¸ +HĒd|Ã.!´GŒ#Ų„{7“æķDHghDDD1!§Å&9ĮQԆx'üËQ¸_ᓑ€§Ã$ČáĻGČų#ÅÑō>GČų#†_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˜EŅÄiĖ# ÁC˛1š"„{<Œb"!Ą–äčYXŒ3ËæGÇ'ķDq ČųR>oˑČá‚äGĸ8-ƒiv\Œ34f`Ō]˜ÄDA™Y:ž""""@đ/üđR Ns œē‰ YœŖN@ã`zëäG™)"d|ÂSÍæugŒÜb1˜eÁlˌĀR<]Œ#Ų(D¯'‰ˆˆƒ žā¨xP˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä6ŦĄĨ_ä{Dwå".2ė¸ģ‡–čd.#į‘tr0d|žEŲt^0¸r>G  4ˆāx5t`Čä]">GĖ#ƒ=›ČųŧŽfã„qFhē3GŽDDDDDd”BÅæNHsŽÆūāĸŧZ\ú…šŅԏáĻ\ÃXŽdxē.Â.FĄHæLD â""ÁˆˆˆˆˆŒ&,<(˙˙˙˙˙˙˙˙˙˙ö!4ūĢ˙lBāA€É@BHrC0änDâܗåq„c,˙_Ŧ0Đ:ũĘTCÍōXĖdx¸„#‘vc<Î"č§ H AȖ""""ū‰ÂÔ>đĄ˙˙˙˙˙˙˙˙˙˙˙ū­„īÎČĪ"ęÍ"ņ.‹‚Øi‘ō<]#ŧŪGČų!EŲ×$.ÄDDQ!đĄŽx~?˙˙õ“EIĘz,œų'P"(đ¤gD"čÆy&qF4‰GĖ"āfeÃ,‘ÁˆADDˆ8ˆ‰ÁHsŽCáNS•ÂĢ* ųä­×Pžŧ ÃQō70á Â"Žđņœ`‘Âă\ˆˆˆˆˆˆˆˆČK'n^Į(,™’"Ŧć˙˙˙˙˙˙˙˙˙˙˙˙˙ÉîS”ä#—†âåT{ö°ŧ?ŧëéŒ."¤oŒFâčņšFō8¤p.ƒ#ƒpČ IaČŖŖž ÃA.,ƒAę4Ę*I×đüŊHZ\DkÂZŨ÷ ëÎßŖČē8‹ĸėĮ˜eØ @†G Ü¸-Ž‘Čē.DpÁxŽGŗÆG‹„3G˛>y’3M° „DXB""7a˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đõËuü7ēL0õõgÄtYÖŗ„ pŒH7.‹†@g7‘âčē1EŅtc#ä|ØB⠄F(DhcáÕ%Đ ?ëØüƒážGŗõf3qt^#ā™r#áĒ‘š‡ x,9NS‘ C‘ÁāŦ0įØaĪ&â°ĐTsŲĘĘ2r#ÄDDDDD4.ˆû^ī_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đƒąŊyØksŧˆDĒaEāĻ\2F\3 †šR>G‹Œģ.Œx‘ō>a2Ą’lDMŽ ŒD‹$ņT3J!Ôī   „/đĒúĪvfŽ#C#ä|Ã.3Āļ #är"" ČäfŽąŦ„üPAÄ,"OØ ÁKyá OúÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡˙„U3DHÍėō=›Ė#ˆ¸g — S#‘⤀ÁˆÔFŲ„DlÅ`ŋ… âSđhJ§0đCŽ”ęËŖ5›ÍŠG‹ŗŲŋ…Ē+XÍäēS2#äpÉ ŖˆÁ˜ˆų4f0y'ȃūŽžĄüˆ\Ę}* ,Æ",Š:…™Eô]‹Ŗˆē="<]ˆâ„""GB""!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü"ĸ=˜A3 Œād‚ŠˆÂ.Ž"„]˜„DEĮa\;ôH˙.1žÖr7ŸŌÄã„w<ÜiåŲ¤r#āŽ<Ķ<ŒEâ9˜EŅt\!pÉr8R8(ōq Č9Ã* Á()9ļŽVģ_tD}dJåėGņ­Ø”čDėŒÄ1@Ļšq—B8-Yp0`Š|ŲD#™ BäuF˙˙˙˙˙˙˙˙˙˙˙˙˙˙帐<ČjšÜIA rŠÍ%j‚'Ą_}BÚøJPĪFÄ.¸d‚á’fˆē4Čø†„#ę§g˛9‘ō>aF2<]Ė"čē.ŒČdp[’8¤pr9‘Ė‘ō9›Ė"čâ.Ž"FocDDDDqū&. đI¨p”üčŦë؃#ä|˛á’EÃT¸Bã=‘âčĖä|Â=‘ō>G͙#æ#ģ8Œdų:ŖYˆˆˆˆˆˆŒ!ú#2?Ä e:…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū‚PũÉj tˇ0ø„ƒ#ŠGČđDĮĐ"""""B8Č7.9Į&9'%9NS”åaN\sųĮ8į‰×4„x.‚Éqâ0˙WŅŪ#ĸ P3y?‘üģ.Œd|Ž) Â8dr8ráČāÁCˆŧo&"†k„DE„"""â"#ß(pĒL|E ˙˙˙˙˙˙˙˙˙˙˙˙ūÁÂ$ŅØÄqĪæîÎD|‘Ė‘ō>G‹†HjĸĘЧ*hŠøˇ#5B„øk˙ aep>ЅGĪ#Ų„ÆGÍæđG(}*;KōA„ŗ0Œ7. \Ž!€Át^0Κ#AËŗ@ĸ"u xd‡3š˙­|ĘŦūo'Ė#Ä]Čä]EŅ{<ōėēB8ˆˆˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūg?Œds#™#ÅŅt]‹Ŗ0‹ĸčÆG ƒIq"""""@ürČ#G5 ãœé *$Įˆˆˆ†*čˆĻ!w˙{Ž—æĩšgĸ9Ī#Ä]ˆä\ˆä]— €xˆ’pļf ‘ ÍËrVjĘŽ„DDp†g0¤žA… _õæE1Äq"8EÃs#äp Á‘Āƒ5˙˙˙˙˙˙˙˙˙˙˙üDHdD–å9NS•ĮN9Ĩ@–äGA0ĐvĻęħ•šO;Ą‘ô˙ !#ųˆÜ^0‹ĸč¸-ƒ9€k.F#6qÄD27BņōcœsaNS—2¸ö{&9Į&Į>Õq-áP CÁ‚{’q@™yˆ‚ô#:æ÷ÎD|ūG˛áƒˆáHáĻG°Đ\Œ"!ų!įbB˜b""" BSä‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øy{ņ‰)ÁÃÄ ãŦJpGwˆë<ÆyfâčÆNd|˜x-É""""""""C  :éalCGÃLŧG28 †3ų0ˈGŒáÖ ņc0Žü/˙˙˙˙˙˙˙˙˙úb‹ŖŲ#Æ#ˆÄf‹Ŗˆē.ŽF">G‹ĸāxjÁƒČĀ5čÁPˆˆˆ°ŗ´"č¸ä0ä08ˆū ™œ-ŲN)Ėã’™NW ! VĻEIg9 'AÃG˙˙˙˙˙ę"C 3įŗŽqÎʰaÁ ĄĩC‰‡3Îã ÎÎL&ČeqÉAĮ8įÎS•‚ í"ŲW˜ņr#™BņTCŽ$(â$#˜qã˙˙˙˙˙˙˙Јˆˆˆˆ’ ŽG‹„!3ˆŲ0Ėå9N"$Qß „i­‚"" ¤:s †ÁÅ˙ü†v˜Yä‡8æp@„…ãØåšE „f`ßÁÉ ˆˆ‘ÝT†ČfÁNSÉq˙˙˙ƒˆkŪ '-ÄD‚ü~ōŋ"á$ö\D„r7)ČqŅ…˙˙ø™”†ÍŠnä08ˆˆÆÛ4 D[Î˙˙ÁÄʈ‘‘Āâ"%8ˆ_âfÄ˙˙˙˙˙˙˙˙˙˙˙–…žZŋņ˙˙˙˙˙˙˙˙˙˙˙˙˙ō•˙ô,ģ˛#‰r ææŋøâA͕P˜r ÆÂßĘᙠˆ2EC1ĘæqÁ lŠx"$‡3˙˙ôHz.$$Īr8…Û”ų — XAŧ97Ëh§$AÄx’Ŗ˙˙ņũ-ĨĖ3— ŧ• ¸y\>°¤Ūō85–ÖŒ¸ˆņp_‡˙˙˙člB(ŒDØi xē.\e´āܸBāĻ~ZÚ .M´3a´^#†$n"C\gŋ˙˙˙+§aįåēY›˛äG ĸ8rÍ*ĸATsņĒ4^Ŧ0øc-ÂĖ‚¸.\B<\ˆ,qČQɗ˜ Åŋ˙˙˙˙üŽz_B  â"A˛–ƒņ=„'PÎ\3ūØP‰Ã‰naƔ 2ˆßr7+ Ô28._˙˙˙˙˙˙ Ao"ŽCQ‰āÎ|‰ĀÄIøaëc ægbË‚C-ø,3x…ŲÉÉ\{ĸ˜Čų.Ėg—˙˙˙˙˙˙øˆb Aw/ ˜G…0 ¤z%>Ķ+ŠĮ÷a0Œdx¸€ĨŅp<ī$^`3HæG @b[8PesR“+=DDGČųŧŪGČų/ō9˜EŲt^#ÅĀ‘ˆˆˆ‹˙˙˙˙˙˙˙˙õ„hEÁrã. …ÁVWÖ1æÆb.29pŌ1‘Álē.‹Ä|ŽŽ ĖŽG‹ŖaGČūG#ˆē.Œâ>GĖFš.åpxX‰â#„dj‹ŲÚ3Di‘ōB43a‘Ã$ ĸá ‘6dpm&!đˆ3%!˙˙˙˙˙˙˙ĶAĂļæ>‚MÁ3yŧôyEãHÂ.GÆxCqeŌ`Æx6ââ$"TÄDDø`ë%žš A’  ĘåĶ#Ƹë0h#AˆÄhˆDvH∈&:- w˙˙˙˙˙˙˙˙ú„D|ÄƒZpųĨd‡ÆSŖ‘7Œ#ä|‘ĖŽ)Čāäp[ Q€.aF##æˆģ4ŽO‘™č§F Ē!„Ė?˙_‚ s˛š$30ĨyÉō>o?žEŅČŪGČų#™„]F˜BCš‘¸ˆˆˆˆˆˆˆ< qÎ9‚Ü•ž œ¨=ŸŠãŽr 9öj}šMFÂãQū ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü¯qt PîAw*°Į$h"„{#æˆÄ]Ė"čŧGĖ#Œģ0ds#á#†H*—˛9Eã73ŅüŲcđ‰ā‚""""""<>e_yøß2Jđē—ŠĮ3”åD‘ō8e— d#ŠG …Ņvqˆņt]Čųäit"""0Ą\!‰Ž°æA‰&–¨_Ņß˙˙˙˙˙˙˙˙˙˙˙˙˙ĨėėÂ9ĖŽF"ėĀrâȸd‚™—3ˆë‰Ô†>wāD7ŋžHs: ^uĪųˆÍEä„`‹´DG yė˜EÄ#ÅĀÁpČb80G"ėäG‹ĸčē.ލR3+Pˆˆĩû!ß áfS8ˆJjėÍ͙ä{4eŅt]EŅt]˜ĀËÄp<""""o˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūCčPŽO”ņBᐃ¸„r.Œftqe،Ģ1ˆˆ‹ƒ|ėŽūExo†í>“‘ŧž9B4ĖĀˁÁ2A˜Ž)‚#”ä §#sqÎ9ĖåA.9Î9>)gh`¸l#ŠG2GČņš)ãąB""4<(KhŲPŸ ę,ÆRÂ8 †@Rāx‘ķy#ä|‘ō9F#HČfLA„!‘ēaˆˆˆ‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū‘AÉ9ƒ9NTĘrĻTËNqĪÅbĒ0 ?‡•KØV°FCflÍä|Ä#Į"9f#ÅÁĸ0\ āx)Ä.!5Ģ<‹„fȁDDDDC¸Cáå“.aˆˆˆˆˆŲ•ƒWÃôtŽ|=L"ėšĀĖ‹„.ËŖ2 ĄMA Ģ1E„9ÔR9HŽuŽ ß˙˙˙˙˙˙˙˙˙˙˙áv:˙Ępˇ˜@„#Hģ1qāļ ÅÁT†Ūyd€įB#Â")ÁĄ k­ų/ō#¯†ü-ĸ ū tMĻaŖ„yF##āƒ#äqHä\92@āÆGČāä|ŒFė‡FhčdĀQŦ2CÁaú!ŌrX G úu˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øZū[Āį§… 5Ĩ3A]Œfō>GČų6 "—pÎ\2Ch‘Å#‘x‘âäa˜Œf܌GĘŧ—„DDDDDDAGÃöE!áü¨@ˆp0~∃ûũč.$@å_žGt`Ė$0fâå Ž ō>DDˆâ""""""$ Ž[”ä‡&9Į=œr#’ãžĪgį8ႏåČa`1xōĄ}Ô?+‡'ŋfaŖĐ".:Ô!§˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃXp´vŠ‚› ĸá’ ƒYŽ2čŧGÍX‹DDDDDDD|0°‰?áUüŠ=㊒đL†GČáHāxkzŠŗLŪGŽāČ\!p<#rā…Ųt\ÁˆäH œ""#˙Ąá…ÆT„.áaá…)å%ú?ĖķŅøÆo‚#æō>G#r#á ‡Cœq˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũÜ"(Š$5K˛ņ#äxē0)¸čŗ-Ã×ߐãų :Â×HŸėĶ?ŠüŽ)‹˛čĀeÁldq ƒA/ČyŽ ē8Ėf#ē.ŒfėęŒGŅÂPČáæ ˜EŅėŽfķŧGĖ3L›Čų„f#†ÂđB˙.đ‡Į¸Ė%3F#LŪl@„DDDDDDH āÄ]ĘrVx*BÁ:…Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ąČQĪ9P{8æ™NS•đV…ČÔuáqü„×üˆë„FŅÖ)ķyøĶ0Œŧ‘Čâ1ŠpÁ29p< ŗ‚čŧC2‘‘FH2 DDD"#õ…o /ŗŲ1ČĸĻˆˆˆˆˆˆō˜ü¨KĶwđūtCĪ.ŽHĀđj1› Ō8kYŅ ĖdaˆˆīęxDGÖŋ˙˙˙˙˙˙˙˙˙˙˙˙˙áņB!¤¸*ŧéåĐ:5fō>b#™Čį‘ÃDDDDāÔ9œ§!‘¸š9;'‡8įĐ%ĄŅ&šŠĮÖ°‰9N"„†G`U~¨-ČĢđˆŖūƒįiķĒ=‘Å#äyG"äG28\2AŽdp`Ā!čē8ds'Ét]EŅA”'äBNū÷Ąd°‰|ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙𸠤;ęB9BÖ ūŅEŅt\!t]v]EÂeÆ]—"<\2A¤¸g0GČų.6dņ b""""""â“ęJ8‚ŋ˙„E C‘8ņ÷pŅqōÜôFyÄ]AP9'‘Ã$ ‚åŅxÄb#ÅŅt]ĪætqEŲė؟Ė1$B" .Ą)÷+ō OÂ˙ (™āą"Žq×˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øk…ŒBŊš ä ŽIČHeÃ."""$H0äœÃ“ˆå9()ʃÁXn)æ ˛Čđü?„:…0AÃ˙¨Š~uEŅ›.¸ËˆG GÁR¨^H蕑Ŗ.DpɋŒŧaEã Ä]fē.‹Æ Ȓ(b"""""""ģōã˙Ü=áa‘¨e^lÂf3Ņ#™˛.H†cˆˆˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÕčˆˆgrœÃœr,å9nHrvAÍĄÕˆˆˆˆ8ˆÔ!Ŧ*Âũēëà ¯#?$yä`ĪFķöG‹ĸė"güSĖØe]ˆâEҌGt`)SD]ŒfˆÖᨈ‰Á¤sŽqČQÎ9Į8æƒņŦđk9ĪŦDDF„NŦd‡Â˙ū˙y_„šŅtÂ.4""""""""""$5‚Ōjš‡1sŽNqÉËADq˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ x8į‚œįƒn<SqĪÅtC×˙˙˙'Ψ‘äDGÍš$dq ĸņŠ€É ˛āŌ\eÁ°Ā4ŒŅŒ—gH•Â""É8Ō܄ƒÁˆį ŒˆˆˆŽ=pƒ÷ø˙5Ŗ4`.c#ˆ\ˆų€…ĀĖˆæad3)ŒãBge CŒG Ä&˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡›XQOŽČH.=(šEk0Î šČČų#ŠG"ņČá›!›Å'8S0™€ĸ0¨B‚ †!đĐ0Oø@Õˇā† =|í+<Œd|‘ō×čy¯öÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũXJEœ;rHÁž)üEŅt\B<]">G28\Ã4ūaF2<]#ČÁĸņ¤FB""""""5ˆëL;ÁŲ lú!šw\ āõ úŽĻ|R9ˆųR9‘ÃarDAÉ8ˆˆˆˆˆ‰ ŽCDđS”åA;8惎zÉ'8œDDEÄ8ˆ¨ûũaC B#ü/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũl;Â6`Čų#ÅÃ$ ˛ėŧaŒ#ˆÖdx¨„DDDDGĮ˙×^(dGķ´™XĘŧ‡žF2>GČņt^#™#‡.ˍã“ãYīŋÃáč™d„tEȎŦ\0G2>G åŅq "čē(F3y8ŽDøˆˆˆˆŠéx_ßap¤Ķäŧo7ؚ1ŸĖ#ˆē.FHų)ŧ‘ô Žᐠdp/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú߅?˜ƒQ.܎¸ËˆaEŅviō>GÄDY´B‡‚ ëë=ũŅ›ĖGT^4F™ŧÂ.ËÁh‰ˆ¸G<¸-† ƒsäs1 "áĖ8\ÆG–""""$ˇ0äG0įŗŽqĪAėĐh8į Ü^¨bˆˆˆ‚L …zũö:$„\fDDDDDDDDDH îC‘G3”æÎaČŖœsŽg5žÎs‰´P8‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đņ .aĖå9h%9‡?š9°§!˛CäŸ_ ˙•¤EI3Čē.gãL‘ķČšđ„DDDD†@`r܆ÁČ09,. P›ˆ—2°”CM‹¸ˆ‡ÁŠCaqŒ/ŠŦ™ŖŲ r8iäp3įČíT.Ä8‡-Ė?˙˙˙˙˙˙˙˙˙Ö0žŽ5… ÖFxL¸ËÄp3 RäGģ:D2 Q1&81¸\xMáÃ×ûŖĮ‚2ÍIšFķņt]r8dƒYpBčô]ČųčŪaGŒ3GĒ;3EÂ/¯˙˙˙˙˙˙˙˙˙˙˙˙áÕÇô`ŽÍÄ.‰ EҁHų#‡/ō<]v]EŅt\92AHŽ)‹Œšãæˆâ8ŠŒÕˆˆˆˆâ#÷ņ<_žžÛá8RH‰.w‚ĘíˆŧG"āĐG‹‘LØ9xÂ.‹Æ#<‹ĸ觑ėÂ=“āâ"8ˆˆ˙ôpú˙˙˙˙˙˙˙˙˙˙˙˙˙ö Á†J!%Ą†āe‘Å#‚ØRč¸BčŧGÉöo%؈ˆˆˆˆaˆ ú…c…ßûnē­d !qĄeÃ!Å1ã†^#ĮÄ{#æ× ņđ׿žAũ˙˙˙˙˙˙˙˙˙˙˙N0x„áH<˜2>o#äqLáŦG‹ƒA Är.Œd|‡‘ķDSäfOqđ‚ô" ŽûĘu!ėãĖ^B"""AiĘrā“˜sŽg$\"F"""""°†ēų Į¯˙˙˙˙˙˙˙˙čDDDDIA‡<Į8įŗŽ{3”å9¸Ŧ*hR Úž8a|_!‡,š}KãĢ=š‡Ôā„DDDDDDDDC áö¸‚+˙˙˙˙˙Ū#Œm(à˙ČæƒŽ~đ¯'Ï ĀærĻcņ8 B?˙˙˙˙˙í0 †@ÄI}/ ôÔ0Gl„ "÷˙˙˙ūå$]I}‰n$ĪČG ÕŪCÜėWˆ‰ Äō0˙˙˙˙[ĐCüƒ;‹ÄĄúîŋ#˙˙˙…pˆŖũū@ũĘrܧ)Ęœ¨OÃŦN?äÎa˛—3˙˙˙˙Oøˆđ÷†‚¯ŧ/˙˙×ß˙ė õ˙˙˙pÅCū”/ø_˙ũ¸0^īüa˙˙˙ĒÃëø_˙ûÂßõÃׇ˙˙Ŧ-ø[uÕ˙˙úß×ë˙˙˙ۙ kīũ_×˙˙ũŋßøÃ˙˙˙˙˙K˙˙˙u…ŋ×˙˙˙÷úūŋ˙ū˙°˙ûÂ˙˙˙ÕáÜĨ7˙˙˙¨A˙_}˙˙ũIPà ūūMęđAŒ?˙˙˙Įˆí˙܁$7˙˙˙X^–ä1ēČ׏ŪÆ5˙˙˙_ČØBä ˙V0ˆw˙˙ũ~đ¤QĮ•‡ĩū 2Nȁ!˙˙îE⍗ ‚[ĄĘv^#ˆr#‘t\ˆåøiúÍŗ#„g`žė×:ĸ!ų'ÉâčŧG €R˙˙˙˙˙˙ū_}Š"H‘žGėō8‹Ų„{#ä|ō.ŒE㠏›¤Į3ČāÖ]°k.ŒxŽ_A˙œD:#ŲŧĻc0Œ`ˆwG U.A#ŠGČæGČņv]Čųˆ˜Gt]Íä|Ņfķy"˙˙˙˙˙˙˙˙˙˙˙ü'䨓#ä„@õ8Īds<aG1œF†o#æČ˜LÜvņđ×d§‘ō=‘Āđi7 Y.΁ G jÎĐIc .""†#˙˙˙˙˙˙‘ŋ&ÆK!ÆlĐ9pÁ °˜Ųe Ä1dnYn!ĄxTųh­g‘ ņčØ`ģ. %Ã$6ˆæGŽ¸Ë‘#‘ŒŽEãæo0ŽšV˛*ŠˆD\V‚8AJD_˙˙˙˙˙˙˙˙˙˙˙ÃáįhF3Ėē0Eâ<]EҁL8flĖtq˜Čųŧ‘ō>CŽˆÆ"""""""ĸ<7˛T–!Į’âūA&ÁYä^7eÁrņSģ.‹†YB8dåȎ.‹ŗ4]Eãē1š"ņķ7˜B"""""!Š"pdL_˜ŦB)ÁķLō˙˙˙˙˙˙˙˙˙˙˙˙˙ū–é3 ŧ`B<\2ČāļˆųČär>dxē.Ž#Pˆˆˆˆˆˆâ(„ë-J”/äQŲßĸč3ˆē3F3ŧn¯ČiŲ‚Qžŧ§EhĪ"FyF2>G3Čē.F"8‚™†z4ˆFgÉ éƒˆˆb#Ž>3ž 4D-Á˙˙˙˙˙˙˙˙˙˙üš¸q› #¸āÎ)‚0‚ Ž `Ôb.‹Ä|‘ō8eˆäc7˜ŒD|ŅEŅėY1q̞6vđArŪvj „­A!BđƒųÚLí&T#¸ŧo#™ŧ˜t\×EŅq—F"čÄi›ÍæÄiäxâ*2Qˆˆˆˆˆˆˆˆ‹đˇÖ ÁÆĮ°a|ą/˙˙˙˙˙˙˙˙˙˙˙˙˙˙īáņš/Ž#ˆē.ËŖä]Ļc7‘ķē.‹Äpr8d‚™ph0‹Ŗ¸ē1˜įTb8Š|ŅˆˆˆˆˆŒ!? ˙ĖD82 __"ÜĪ7žF29žFq0Œf#.‹˛áąˆˆˆˆˆˆˆˆˆˆ,rœĀä[' Ž9ãéfn§õų’˙_"DBŒ8U˙˙˙˙˙˙˙˙˙˙˙˙˙˙Š\1eãČāļˆáHâ‘Å#æō>#ÅŅ ä]ƒDDÎõßú‡ßąSj~)Ė9āĸ$„qEĐDGGpf28ráŠáE|y—\B9"8eȸd!‹Äq ‘øĶ˙D#˙á>ī3FhĶ#áM0A›Čų=e،ˆâ‘Ãar†G €$˙˙˙˙˙˙˙˙˙˙˙˙˙˙xnJ#ņpär.\2\¸„xšō8¤|Žft]Ī#ĸŧ‰™#ÅßōCŒ„^|@ĻĀÍĄ Ė9Œ!€ČŧZs‡ųä]ˆˆ<3G FĀäWcЈü¤ō˲āf28)—Ņ ‡#ĖĖ!IbAsŦ4?˙˙˙˙˙˙˙˙ūąŽJƒÃ’“”åAœŦ)Ė9Į<…aT:ØĄĮĘų"D]fē.¤|l"Y' Ž""$ á‡4Éa‡8ærœ§+ ‚H%QÆ„Č1XF´iB"! ä(įãœsŲ ëÛü‹ĸč—Ė#ҌÃ1 e.†™Čâ‘ã˜G@\3C)!͈ÂÜaé‚#|.á˙˙˙˙˙˙˙˙˙˙˙˙ĖL!Ŧ›f#ŧGĪ"đ)#äqHāļÅĀøÁÂ1ō‘ ĶČæ"Ī^øv°‚asĄ‘Ę ¨_‡2GŒŌ7ŸČņtz1‘ķy#ær02á‚9 Z.ĖGŗÆaF™4EčŠÄHČĖ—„DD^"CEœs¨Ø[ĐPĢÃĄrŌ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Æė՛ÍĮ"|˜EŅār>G‹˛ņ‹‘Áä]—EŅt]Æ3ôP‹ŖLÂ.ˆFø‰ ž:X_*˙ä8đˆ¨WØP˛ÜŠŌ%҈ÆGČų0‹Ŗ˜d""""""""@đĐä ŽC(s9!É9NHrpS•ėöqĪŧB""""""""qk V8Ž;Ō‡ĸW×˙˙˙˙˙˙˙˙˙˙˙˙˙ áĸ%˛¸.#Ų„c#ä|‹Äp[ \ˆâ‘Ė˜EŅčÍ3ŒˆqƜáUpžBÕ˛B4ä;ÍÁ2ėÁ›Čú Ã8‹ĸčÅeÑÄ.„#°$u͙ĸ.Œd|ôGĖ#^#†HkŠŗņī$š#âׄqe:9F>ŧŪ:æō>GÍĐĖ „DDDDDDDDDD0ŋ˙˙˙˙˙˙˙˙˙˙˙˙렛:™‹ˆG Ë.#ä|q˛Mšˆ¸2Â(EҚ.Ŧâ.ŒGt{6fxŽ )ÁņŒŽEŲt]"(â""DDDDDDH1Č3A@ä ĐE“šÂ â""$'.9‡8ä Ëdž<‹ĸčÆGČø#8 „DDDDDDDDDDDDDLä2攑1pâ#˙˙˙˙˙˙˙˙ü¸ä69’‚œĐT ūjÛ9nkŲĻGĖ#æĀštpÃ4ŽEÃhĀ!Æ\6˄vŽ#ˆÄ]—†ĖKĸFLdų„hE›HŒƒ@üę˙˙˙˙˙˙˙˙ūÃÄEŦrl: Hŧa˜Ė"čŧa@™t]EŅv^#äq ĸāļ Ãa#äxē.ŪaĘr¯íqĮKũĂAåtņ'Ė3ŧÄo#ä|Â.Ėd|ÄGČâ‘Ã$ 0‹ĸņ#æ">GĖ#Är#įķyĢ4EŅĪDO. Gpŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū>CÃȒ=‘ōGŒdxŧaF#HÆGČųä]įō<"""""""""#Œ?…ČĘ?Ô:č.‚"ņMŗ7EŅtc0Œf#y„qEŅt^#Åâ>GČᘠ×#†™‹Œē.‹ĸäaČųŧÄGČųˆŅLŨO ēäu"?…šŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂÂÁĘâyˆō.Ėd<ŽF#čŽ ŽG28…Ņqņƒ#ætc#æ#ŧGÄDDDDDDDų ˇ,ŋĘLŒG Gh‹ĸč)ŧF  eâ9‘âčŧåš °ū°įbšä]‹ŖŒ‘ĖžeŅ‚0. šx ņ2|DDDDDDD{‡Â… ģ˜q!؉š8Ž SˆŧxŒD|EŅt\2Cg˙˙˙˙˙˙˙˙˙˙˙˙˙đƒ æ‘Bâō9‘Čģ.˛G¸!t^#‘q—F!DnĄ#‹ S ¸C‚/ķ`x.ƒ#üDDDDDDDD†@<§$9Į%†Š9s8XQ†[ã‘G<æŗŽMuzÎËV@ãŲĸ9ĀĖ6ˆāxj˜fhĸ<ˆ”‘1ˆ†„D_˙˙˙˙˙˙˙Ö@đÎ9'#sl0įög4åLŠ™š/-Ëäųü&z0aš9ˆđ0`9†{'#ƘŒ ˛"#†ą eCqī(FaØrcž 9 Ą?'ąpŧėmČų1Ė#t]G˛80G1áHųŒd|ūyĆu‰œ"""""âT°Ōõ Žš1˙˙˙˙˙˙˙˙˙˙˙˙ ˆwņËp¤kFq„{<ŒG˛>lCS ŧG°Ö/ķĖ"čŧaDr.‹Ä„q2¸eV.W‡É ¸bA@ü2›‡ī ?™ŗ4r7EŅÄ]EŅt]ˆņt]—ˆæ`ÁŦē.ËÆķfb4EŅčä|‰4"""""""Âņ5†Ā–ˆˆņ˙˙˙˙˙˙˙˙˙˙˙˙‡Ã“æŒd|Ÿ#æō>GŒ0!˛0 ``ŽGŪG3<‰ˆDDDDDzÎÄFoĖ#0k#‚ŋAa†Ãĩ-ŌķÆaÍæāØ\5â"""""""@đ+r˜ær70æ‚|h*9ę3•ąĖnĩ|Gâ#˙˙˙˙˙˙˙˙˙˙„Ø`č ŠôΨģ1Čų‹„0 ` ē.ē/ō9EҌˆˆˆˆˆŽãü‚Č,LŽÂŧ0ÃÛHė¯?‘âčÆaŒ2čē.Dq †H#…#ƒ‘Å<‹Æō9›Ė#؈ˆˆˆ§‘I9S–^]'˙˙˙˙˙˙˙˙˙˙˙ áĢ‚ âäGē.˂\2lŽEÃaR8`ŧoˆˆˆđģX‰9æh¸lė(ˆˆˆˆˆ>rœ§)Čܡ%gÎJ ™kü„ãä2⚁œ‚>˙˙˙˙˙˙đäĮ$å9!Î9Į4Ęr܏ŽlCâDs äĮ&^o6ˆgäÃ83nG…āžŽ&ˆš"+˙˙˙˙øXã˙!ČÜÈ⠁Ãáņ"> Ą˙˙˙ÃÂü-‰NB:hr ŠĄaBđķ+ r8Č; ĄeŒ ˌđAÂ2äID"(F´]3y„]Ž#„ƒ<ˆDDDDDDDû–ä#‰r áÁ3ą°á‘.rJ€‹ŧėšBađGfb`œ“˜uP=†Vō\9 Ã,Ž) ĸė’0Aa˙˙˙˙˙˙˙˙˙˙ §„pCÂĻ€HˇZ"ˆ…u!G•gķČčįƒ,Ž Î\!qāĒ`6Á”ˆėxœpB#-á…ádŖ÷ŅŲ™`‰Ž\BxCŦˆ(’qƒšąĖäŦãœį}’ŸzǃXB!) “˙˙˙˙˙˙˙˙˙ū čĖ?áČŖœvаם¨ŗŅäc#‡.EĀÁpĖ.Kā¨G2o#ä|"ā…Č' .Aw!Lr qP~–åėåŧDE„#ˆB đDr ;,A!ÆK˜K˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü>ŋPôv˛"ŪyfˆãBŽ#™4 Y.\.‹Ŗ4\0C F@ؒ!Äz „:ׄ‡H qu‡ÂįfĄ`ˇŲ1ÁœŅE#æō8ÁmÁA‹Ŗˆģ aHņØ´""áúáEü.HyŲ)pÂ"3˛aHįˆ< ŗˆ/˙˙˙˙˙˙˙˙˙˙˙˙˙˙á{D|ákŸĖ#â#‡B""""$ šNC1Č69PCU0œ°#lĐvˆŨ°ƒđę&hõÄ AŽ ōĐgđ§ˆÍä}G¸Y+Ė#Ú 0BÃ$7.ËÆÂ‘Čˆ%ĖD27ŒŠ>ž‚An/ĄÄ)€áNԁxD6fņ7‘ķČē1›Čų1žG\Äb7‘ō>G3 ÆG3Æ` ‘à ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī 9˜ AœrœLšICđ‡Á\ˆôFŖPæđA×ŅXōVG\‘ķâ:ä|ށ!#†HŸĖ.‹Œ¸!p…ˇ7˜äy ąÄH{!G$å9Px+ p„F‚"ްWÉ:¤8.ū‘nC ë•z#p‰ĄĀÁĀܸ*˜ @ƒy¤RįXDX"„ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄDDđHr Ŧ0äQÎ9Į?’ÂāÜr "CÄDD^yH¤Ađ]ĐđUÔ(p`†D f°`Ž ¤pT6aF2>GÍæâ\ʄEAʐ;ÁPÔBđ‰qę'Ď{?žÜ! !Áˆ¸ĄČĀĄ “U {ÍĮ">GĖY†^0D|ŽpČāx6Ã$R9GxŲ‘ãˆō1D(%hTDDDqDnĶ„˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øhCâ!¯ĨY`akūvkįo’t]EŅxÂ1‘ø3y#ÅŲv\ÃÃ9Œ‘ō>G G n0GėÂ:2Fa Ņ„DDCˆˆ‹d#đ†ōNaŨpZü/đ_ÂõÂ" ,—^K#4cLöGČų„]r1Ãĸâ"""""""$r Ŗ’rœ§4‚ܨ'Á)”åqėčIŅ88ˆˆbJ¸ˆâ8…‚"Ž8R= „(Š–āši˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙î‚û õ“ņz#2>GČūGĖ2čēLĀ…Ņq‚ŧs9!ÉVS•2ŌH""‚մF÷§ö ƒUÖ‡­ūĄėĀRBúÎôČųĒ8Ž#8….Œd|Ž ÁČāļģ8ŒdažE>v"qî;…á ˙D‡”āŸ!Į  îNËĨ8Œd|/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Âą ķ4ĻžpCöaŅŒÂ†G G €0p2Čá–\ä|ų“ˆ"0„uú…ÔđTžÂE#ˆ á ‰aL,¸d?č)ėÂRčē1‘ō>G28…ÁhˆˆˆˆĶ‚zåj>ĨFL1ˆ˙ÃˇūÍkÖlīųGČÃ.‹‘„q—EÂ!Ņ8ĘDHQÄDá r ˜įđS•Ąs)G˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙1ō9‘ō9Ą#œ‚9‡8į¨đ\Ą|ú_˙Įļ1øYTF2>GĖDs#äs#ä|Āsd\!p[sy€Ô6EŲŽ>d<Ū|ĘHaˆŽ? DDDá↠ü_ĪB¸ÄâÎWŧ?øOŋÂ˙Ō!ūOžŒJ`ČæG‹! x9‡$ä3š!Ɏx%ÅAė‡ãųČ,A\{8įéÂ\Cˆ‡¸o˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øD6°¸8႐d‘ë…öëÂį‘Ņ ÍQÅÆG‹ĸčē/f"č¤påÁŽË‚!¸ä¸ÎDŸƒ9NS–åaŦözŽAZ‚Āĸ""n‹ˆˆ‹īõ¯Ã#r°¨?!¯{_đ_ų4Pde˜Ė#4]‚)Ųt`3Hā !!ĒäāÙÉYā¨3”å9\OR Á $ˆøˆˆˆˆˆŊ/X/ģ„˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üĘ?\/žLĮŦ”åiF ‘čF#ŠG°„pj$#Œē.ĖfãŲ¤K‚ˆuÉ ‰B.""#ˆŽãÂÂũ/\5øPAũ-WÍg‘š.‹ŦØĻŲp[ŗŧG3͘Īä|Ūz qĢ!™1Ž";K Åx/ų’ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Á=…|”Ŗ[ œ0Ė0˞GČũ—eŅt]EƄDDDDDD†Ŗ”än]9Į7õ0…A0„DD8ãwęψĖ5K‰Âī§…˙’hē=F3yŧÄb#™#äs0ËĨ1ˆų.ALØ,eŅt\9ƒˆ¤?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙änS”ō9ĪāĖ`7#Z#dT#؈ˆˆü0ŋū. đáõ˙^ĢÉöGĖFˆē1žeȏ]—°+#†Ãb.ķ8‹ĸč×ƙéÄYœF?ˆˆˆËŗŲĮ8f0ĐB",!…˙¯Î ĀD܁‡æ˙Í_Šŗĸ8Ŧ‘‘ō>b0f#fGČæãČāļ ‘Á‚>`eãē.‹ĸčÆo#™!’ųŧŪ~3G„8‹ˆŽ#• l˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōđ¨!ø"#ëÁáđ˙û3ˆģDų‘ú4ŒD|Ĉˆˆˆˆˆˆˆˆˆˆ<‡$åÁ(?Ų@B-ˆˆˆøˆâ+ũ’đcô&c[ō <9r$ŋĐäk;ÅĄ!´91ÄI""""$2ä‡$æDŗņNS•ō[J  ÷ū+˙˙˙˙˙˙˙˙˙˙˙˙˙ C­Í†B"ƒÂÚ˛?ŸČļFF#ŠG°`ē.Œdpr8(0‡. &¸”2& â'ŒDDCKđ×]pˆËÕ˙ÁķX6áaäøLĀ-šˆ¸sē8â# gV$É7Ú*Ãûá÷Ã!°r 1đ'˙˙˙˙˙˙˙˙˙˙˙˙˙ ¤ŦĶäa‚įoŒÁ Ā Ž‚Č"†¨ä šNS–ä ¸8႐VBz•ą¸ˆŒŒ*5ƒ ÄHlz陆føOŋņ&9˜3”õ ķ`xČᰚf ą‚쉎+ ÔęΞ°…Y ^pƒ$9;įXē0 ŋáá¯ū⁂5ƒ9°Ą˙˙˙˙˙˙˙˙˙˙˙˙ęāčqœŒHjō>G ĸã.˄.30D0PGa|ž¤‡!#öĨ?~ƒ÷ÖŧĀ)ŠÆ\ ¯á{Ø9Hâ$2QÉA|blAĄhEČņxū"ƒŽg)ÍCđS˜{ Â.™˙šgōČų#æš1ķē1Á—A13qt„DDDG˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙öp>bČø#1‘ÅD†Ģ‰‡ xjŽI ­‰ŲįÄDá&9ĮüāîS”#ˆ4‰øÍŒ š!ķZÍRGÍš.‹ŖL›Čų#‘t]R8† "ã. Ļō|ūG …Āđ¤V‡ˆˆˆˆˆdÔKq2Yä,C1Ę ą„a\^@ŦsŽ}Á1ČŖ‰âC "o:ĸčĶ‘šîALq˜Ė"đDv\2AŦŽdr.Fō<]EŅt]3yâ7›Čy!˜Š|ō$ŲcC‘"!ã‰Ĩ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øYh%dčjŠŸŒpeÃ\Ž ÄadKĖd|ŽK Č6Vš.#”â""""""$ĪærœĒ‹ŲP‰Oa‹ˆŽuČæGÂH,%ũ6đËP'FC/‰œDep\˜Øb‘pŲ ´äːh‰œˇ!”†ąīÄDr ƒžĪēB˙˙˙˙˙˙˙˙˙˙øvĶ C0Žá°Ž\ƒŒ›Áī$¨ˆEâ9ō1˜`ČāÔG6\HæLFšlˆģĖäžÐ<!а8ÄAO~NŖPDYtpˆāļ GZɌF#ƒ.Š2¸FqĖ/Ã4 Ū!܁áŊyû˙˙˙˙˙˙˙˙˙˙ūáߐ<67y>b4V]y!! Cˆ‰ îT gĄDË]>dįāČāáīüÂ×BA˛—ČMŦá‡Ũë x˜SŖ°¤J3ČŧaEŅt\ˆá’æt]Čų B"#ƒ99SĄã`Ч~AąDē.Œ˙˙˙˙˙˙˙˙˙˙˙đ¸aƒ$< ¤09˛`„Mįō9‘ãˆĀdÁ‹Ŗ!‹ĸčŧo7‘ō‘ ģ/ˆˆâ"kGŒH#<;š '‰#á.Č8įážĸ(â#…‘đE9N #đŖ’‹ĸčē.‹ĸčâ1Ŗĸ.ŠLDDDDDD; °m‰r IČe­ä3GÃ}L§f,¸4˙˙˙˙˙˙˙˙˙˙Ã"""$58ær°¨%Į㟊rœ§)Ęr ÎS•ķÁP97ü†Ņ˛{åo2Ü~EĮ’28*Ā‚á€đ˛ˇ$9;?AÍõČe› Q=—ĮŠ&؈ˆA˙˙˙˙áK'â#Č9°-ĘŗÁ[–éÃ7sĸ0hƒKSVt><‡ÚTˇQ‘ÃGž qHæGĸC^I_˙˙˙˙…wã‰đ~"#dŗŲ×ü-5ųnP/!G"d4×˙˙˙ü<¤˙-ËV„HhƒÁNRáX|Ģ˙h6O˙˙ūŸūˆ76W„Ã˙d9°Ÿ˙˙đøX_ō)°ŋ AÃ˙˙˙ū… đáp÷˙ ˙˙ü,0@—öáo†‚˙˙øAė5ü/øõđ˙˙˙†¯Ã˙"Kū˙˙đøīõî—Â˙˙…ü6T2ņ€æÃ—\#˜L¸#†H6‘ĀđBy3Ņā†l)pCäxē.‹ÆÃžŽD|Â.Ėd|ō8dųüķ$\cJwīŋ ėK ã8Â/ˆų0] BāxÃŅt]æâ„gÄDDdĮˆˆˆˆˆˆÔ˜âƒ"#”đBC_˙˙˙˙˙˙˙˙˙ųnļˆ$]˜Â8˛9āÁŽqSĖÆo#䑘ˆˆˆˆˆ!âDœ8Îå9N× ™Ø^CÍ"|Ä~/ō>o0‹ŖĖâ‘Ál4eČŪGĖ"čē.3ČÆ5d„]E҈ĄecØõ%sĘØs4"u˙˙˙˙˙˙˙˙˙˙˙˙˙÷,æ¸˙f‘ȏEâ8¤p`EÁl5 ŗ‘†]Čäc0Œ:B"""""""""#H„"s"ˆšIŸČą,.MˆG\ŪaČų#äq ˜(.\föaŖēá9‘PąÜÄBÁLI˙˙˙˙˙˙˙˙Ê]&GČųŧ›Čų3ˆų0˄.Dp<ˆá ˲čģ0ĄžÍ!lFáW #Įb<0ԌĪ#`B>GÁœsÁPqĪƒqČQÉĮšÚÚ3G">GČų#Å،Ždr. H\!ȗb""#‘¸Ŗŧ\0ä<†Fd|¨F™øÆaYŒō.‹¨2>GÂfČų€Č Ī˙˙˙˙˙˙˙˙˙˙˙˙RŒEŅt]F ކ„"$2ä,8§6É0°‰Ž3ŽDøDDuEҌË Ļ˜"žĀ)Ám‘Á šâčšv„\Ād‘qæo0‹Ŗ7žF™ä{xyŲ^aČā ŽDDDDDDDDHã‘G!‡)ČqĪ9NV ÞÎ9’GDD˙˙˙˙˙˙˙˙˙˙ū"$ Ø8äā§+‰ŲĮ?å9dέˆˆˆˆˆų6ôDŗ‘š"čÆb#™#äpÁt —EĀĖ2Œ!”DāAØhÂ Ā‘BŅ+?/Įô7œ‚´+b"+ËTz< åŲĀ3 är.Œ^#æ9Jgdķ׈ha˙˙˙˙˙˙˙˙˙ü! —ÄDDG&ËŠˆŽ!p[ Báf‘ō>n4"ėDDYô>˙Ē×xA†|ōšš:įō8*ĀĖ5ČæG̓˜GDSäfjČ\"#ÄCíOŧ„˙˙˙˙˙˙˙˙ú„ŋ;2ED{0Œƒāļfƒy.‹ŖˆÍā9ÄDDDl&8"ë^!ôÉš#ä=›#†@2à B>GČæn.‹ĸ葓™ŧdˆ‰â""#rc…đ”8­_˙˙˙˙˙˙˙˙˙˙ûū[‘Ã$ ᠎.‹Æ#Á°ęh§ÄDDDaˆ÷":Ƹx^œˆGtz.Ž"䏛#æŽ)JëÃs%qˆģ.Ëĸ᜸dšpn]—Œ#ÅŅx‘ķ#ä|Â/">b0‹ŖŅ‰ˆˆ˛(ņÃ!Įč}×ä0qüŪo=‹Æb ˜‹‘€0ĨÃ!˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙îˆ""Tg†\2CHŧG"ņ0‹ĸčŧb#äs#äqIēB"""""""""1â5ŅŒ#؈Â1"õ˜Áy#˜Rčē/âå‘׈ä\2C,ޏ—}.‹¸ˆ‰ €Î9Į!G3—†ŗÁEĪ!¯r¨‹ĸ“>vi‘ȸ„påŅpĖ. `ŽG"ã.ËÄxē1eãˆÄGČų„^1Ė ĖAI ĮÕ˙˙˙˙˙˙˙˙˙˙˙˙˙lDHdS–æ㓂œÖ{8(ˆb"8eaNS‚ɰŒ˜Č.G‚žG˛|î"""""$2ä69(#rā§)Ęr ‹AāŠ”å9S*9Č* øB ˆ8ˆˆˆˆˆâ#ęAHrcœrNh*Åz,¸ˆŽW(F2B%âˆō/ķ҈†™q˜Ī™üôaĻH\DDDDDDDDCЊß˙˙˙˙˙˙˙˙˙˙Üڐ§B""":Â; QÄq0Ö.ι菑ĖÁGaĀЈˆÖ—‚ũü0†HsŽuȓb˛#ä|Ža°.F`S(Eã–ˇîđ\* ¯˙˙˙˙˙˙˙˙˙PÂŦD\Čē"Œā-†Ņv^#‘tc?‘ō3'ÄDDDF”/ņ?ŽãŠ6ZG˛s#˜)Ä^#™#ˆ\ˆáHâ‘Ál!0d|ÄGĖ2čē=2¯"؈ˆˆˆ™v˙Åa'˙˙˙˙˙˙˙˙˙˙˙ëōŪŅtq—"9‘‘‘ÁA2A˜Ž)0fō<]F™üžŒ"Fo<„DDDG_ápY#$#ˆŧyŒv^?‘ķģ8‹ĸāA/P‚ČIä|\2@Áp0\3—EŅȎEŅČŲ‘ķæGÍįķDDDDDDD{pū šŅė‰#ˆÍGŲˆų0Ŧā!pČĪ˙˙˙˙˙˙˙˙˙˙˙˙ž‚E`ČųĖ’äG €l.ē.2čē8˲čē.Ėd|›ÉtĖoNšZŗLŸ<ËŖŧ‘ō>a2>aˆ)""""""""FâC sŽLrNS”ũe> ˆQÄDDHNS˜rpU9ėãŸÎsČū˛ĩEŲp4 S‘F{8įÜ}KJ6Ũ˙˙˙˙˙˙˙˙˙ą‚“–å9NaÍđTsˇ5äØ&SŖ„`Čy#Æ Ã.`Ž\!vu#ĸ0g‘ĻSŖąDDE˙Č9ėÎSš ķŒ>˝uŽd4Ė2ņÍĮ€Đ#‡1‘ķÍDŒ¨gblB!ÄGë˙˙˙˙˙˙˙˙ūŅ$åL9ä)Rl äGĪ"ņ‹†H7.$`gDaų2ÉxDDGü5ßĻЋ•ŌķQž€ÁpÁ. `p\2Čų)6d<ūn y!ųÕ(\DGú ŋ˙˙˙˙˙˙˙˙ŪYØŒę‹ŖÆo#™ˆ‘ķ¸Ä`Bėģ.ØG28äpåŅčņ‘âčÄP‹Ŗ4u1Âū˙¨$MÄ™ČŠŒ‹ĸčē.‹ĸâÁl‘ÁŦ¸CŒâ1‘ķfCĪįōB)ņCøpŖŅW˙˙˙˙˙˙˙˙˙˙ũ<"lkDp[ SGŒd|žF#ˆē.ŠĻyŅˆRB"#ŋâ"^jėÄ]Eâ>GČņʡ¤W[¸d†‘tq˜#.ŽFâčē=’Ō0Œg‘xDDDDDDDF˙’„R‘Æc1ˆųĸ/ä|‘ĖŽdqAKĸč¸˙˙˙˙˙˙˙˙˙˙˙˙áSįb#æa ‘—EȏČæo#ä|Â.ËŖqEŅėŪz%؈ˆˆˆˆˆˆˆú…É|ŪaE>b'3y0‚œEŅv]—Œ"á  — • x)šNôĨāĖŅvDDáš9Į8䜎)Ęrœ§* RsČGĸBrW•XäGÍ`B8]—€ĐG‰T5˙˙˙˙˙˙˙˙˙ūÄDDāĘ9œÃž r¸ĐqĪẌ4Ę\Ŗ“b”HČ:į•˜á˜eÆĻ¸d‚8daqáO™ˆų2B;0„C!Įmߐ<49NS˜s؜—œį6Ģ•Æ˛@Ėd<‘ķGų)€[r8R8h4Flâ$f⩕ G‘ƒz×˙˙˙˙˙˙˙˙˙ü“•„‡?œÍĀųÜFqŒ 3‚>u"+’ˆDDDGâ@Čb>ā„DG-ÆķP¤pØ\ ÁAĀ\ã.‹Ŗ0‹‘R>KŖˆ§É\Dá ėC˙˙˙˙˙˙˙˙ÜėM#ˆāĖft]2døˆˆˆˆˆˆˆīâWÖ0÷˙˙˙˙˙˙˙˙˙˙˙úyn-f29‘Čē.¸g. aˑ‹Æ">GČų„]eҌō=˜D¯„: >ĻFYøĄČâ‘Ã$ „.2踄s#ä|Â8ŽFŦÂ3„DDDDDDDaīe¸ (˙˙˙˙˙˙˙éÎÅō|Ü\2CHšō<]eãÆaEŅã$34DĄépĘGų‹ĸ„{#†HeČģ9Gėō.„""""""?ø˙˙˙˙˙˙ģ”åÁ Đr HuĘũ˙šØį‚œĒüãœŲ_߯˙˙˙ú™Gëŋ¯C˙˙÷ŧ/ípáß˙˙§ Ŋß_ _˙ū÷‡ë}˙˙˙ė/úđũ˙˙÷áÖ?_˙ūĄû˙˙˙÷˙˙˙˙˙áB÷ëÃ˙˙˙õëá÷˙˙߄ß˙˙˙˙¯ę‡ >¸˙øNwü/˙˙˙‡ęŋũ˙˙ū˙˙Õ˙˙ū_ W˙˙˙ÃĢŊ|/á˙Ū ú¨ká˙˙ø÷…˙˙˙ū÷ū_˙˙øAß˙]˙øp‚˙ø{åŧį˙˙üŽ3õ_ü‹ä¸[˙˙˙˙ũÄA—2ÜPĩ+ĨĪüDÃ.>A~>ôđ×_˙˙˙ū"aÁ˜2? CŽ$ĄJ—ßÄD‚Ėä¤L8Ã”âG9øĸõ˙˙˙˙˙˙Ė”ų‡Eˆ˜r8‹oũk™ pS’㈙ɇ!ÄÎ zõß˙˙˙˙˙÷˧’šqâ"HȍŽ"# ûÂÂú)ōšˆ$å?åņ'†×ˉW‡˙˙˙˙˙üíhČųÎãŒDN^BĄ5‘°Ö¯ÄöLGH˜ˆų‚Î"도s#†‚8†#‘pÁ6|ė´āDƒ0įR Ä3yĮ3”ũüĄGŗy0fp[Čāx_˙˙˙˙˙˙˙üí85— åâ8kÄHrŗÃ¨4‰ íIj;ôi‘ķ¤xÁ‘ȸ-†ŅpČČāx0`ČâŸĖ?Č09'ÜD†Č=1(^ 9YĸÜQgp0\C¤\‚āšpÉrčšō8Ļō>aČæy4„D˙˙˙˙˙˙˙˙˙˙ˆ‰ žL‚ß'â# W%Eb)hqB?˙˙˙˙˙˙˙˙˙˙˙˙ņ!ąPx˛SÃđ„I<ŅEÖo7‘âņ9pÁ#ÅÁl 0 æo0‹Ŗ„c0GŖ‘‘†"""""""? Bđä4müP^W!ä|ō1‘ō>o7‘ã‘#‘Äb.‹‚ØmeŅr#äq ĸėÆGČų#æãĸ9E&Ož„DDDE„"'U Xn˙˙˙˙˙˙˙˙˙˙˙˙˙_ád0 ZGE¤Čųĸ8‰ĻyEãy„qF2>b0‹Ä|‘ȸBāļG‹Ŗ‹ŗ‘ķDuÄDDDDDDEÄDqá?ߒŨX~RB=įTq—"ņŧ eØ Čāļ Ī™ŗ<D$J✌.ÄD4"""Ju‡2ቯ˙˙˙˙˙˙˙˙˙˙ø)!ųÕĖG"č¸dĸ>GŽf­ˆøŊZАx´K‚‚8 _%žK挸d9 ôGĖ#Z;ˆx~˜o™-¨DĶr„z.Šp3 ¯˙˙˙˙˙˙˙˙ķČŧaž3ĸāxkœ#ņO3ÄDa\7Â;)eē0)#† ˜m‘‘›3fD‘š.h…Ū"""$Į?Ĩ~,!˙˙ąÎ뎚üÂ.Œ`Ļhē.D|ŽEȎc. —EŅt]F"Ÿ0fŦ—F˜ˆâ"?˙˙˙˙˙˙˙˙˙˙˙˙ xfCLrBcađøY‘‡Ņ–fˆÆy##įō>GĖ"čâ0ft]EŅt]f‚<\3— Ál3‘ō8rčģ.ŒftqF3fAä|žįōĄ˛k”˙!ĩ‚NS–æØHx3ėŋ‡™]…7šŖNĪg‘t]˜ČâĀ‚‘q Ša™ŧÄa2>z!ĮD"""""0„DD\<,/˙˙˙˙˙˙˙˙˙˙˙˙˙ōuāÄDDGūí&9Ė"čâ0AL˜m˜aEÄ#är.‹˛čöb0Ëŗ¸ÆGÉՑ\B""""# xxk GAž/‡˙Fō$Œi—GĪĮĖ)ÆfŒd„baˆˆˆˆˆˆˆŽ? /˙˙˙˙˙˙˙˙˙ŋL5á|(~l2Áp<0\2 ¸!‚!PˆˆÃxgdˇ?…đž˙ü,ŪO‘ĖŽdq ˆG j#ānc<ŒŲŒŠÄÕūü#°,Ņa˙˙˙˙˙˙˙˙˙˙ø;˙ážEҌÄGÁ`Ãavr> ĮÄh¤ pAÂķ ,՛ķL˜Eâ=‘Ácđæ3ŧGáĖG PG#C;T („w÷á}Ã;*<†)6l/˙˙˙˙˙˙˙˙˙˙é’2>yŠäc#æt]—eŲq— €Ö.‹‘¤j2‘ "V| ˆŖęôÂ;¯#äų„qLq›ČæG eȎą! PDrCœs9pqÎ9 ãž g‚œ­ NupøˆˆˆˆˆˆˆˆŌÂë ž ĀdĖ0‡TB> 2 ĘØ^ę×3ē.ŒEԜF#Œģ.‹ŗ„DDDDDDHc‘`įœƒŽqÎ9 Üqͅš\qĪgVx5G}šˆB""""""?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üƒ[•)ƒųļūxC Æ `ŸôvZ2B(F´HČųŧūGÍä|Â.‹Ä|˜#ģ.‹´Œ‚#Įo#†‚GČâ0Ė#‘ŒŪGĖ"ņˆ˜EŅtc#äxč‰P.""""1DDDDGė|?˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø4 áÏáC… …AáI9‡ŠŧŪÍď0‹‘Âf29‘ÁlHâ">G28rāšxb.Ž#äqEŅP`Ãux_ã˙EYđáøQ„Nē”"čöaEÁlSGŒEŅt^Ž"""""0´/U˙˙˙˙˙˙˙˙˙˙ü?ķ˛ü%2G ʄvŽ"'āļFc. ”ä@ķĢÅzá…ūwX#$á¸æk4G°æÃ$ EÁ ŒŪo<‹ŗˆčŽ"āAüœÔ"D]„é ŋ/s^GHŽ)°¤p<˙˙˙˙˙˙˙˙˙˙˙˙ũ!„  :0$G‹ĸã.3°Đb;ŌĄ~„wV˙ÂōhËŖˆöo#™ŧūhFō8¤p<2‹āpáC%Æ\¤#ˆˆYrChÃ{=œsÁ‡=šŗ-‚qøp‚Ŋåģ…úĸbėô]Īäs#š Ž`N]‡˙˙˙˙˙˙˙˙˙˙˙˙ōĸ `2r8 Ė"œ0""""GČâ˜0l#†#ˆÆa͑ˆ3A|DDƒ_ĶEã…đëÁlã‚D#ÁėŽF"ĻyČųˆŪz7˜E҈ÄpCČē.ŒEÁ ĸō!ȐHsŽIʂPqɎx* å9+8äĮ<Šā¨?ŸŠÔÉ9ėãŸtˆë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü‡rã=ųĮ&9ÂB=ã‡Â ˜ "Ä" B9Õ•#ŲüŪu#ÄxĪ#G$AŦq x9 îHsŽqÎ9Į<ŽS”æéÍÅAāÖpͅ „""Á‰H)ōc‰ YTN9"ŗUAp„.m‰øPā Ŗ:ŦŪGĪæüŪ`!€4Ž)°åŲĻG3ē4É™ąVԃ°`Á˙˙˙˙˙˙˙˙˙˙˙˙üP † †20ˆƒÂ\?’ë%ŅtKæĀ.pÁœ¸CÁäxRĄGƒ$"čī!1aÂÂøA´ƒØ&qÖ Pß NG Ã.‹ƒrāļ ‰ˆˆ8ˆˆŽ‰ü0gaÃ˙˙˙˙˙˙˙˙˙ūÂÄF’ŸSŲČāf"AŸĪä`¤rž=˛uü ‚ ãÃM!G×6!pÉS.‹ĸčē.!‚4DŒŲ‘™øė°⠁†ĄUčÜ#z˙˙˙˙˙˙˙˙˙˙úAŠ/F3€ČR>G29‘ō>GĖ"čē.Œ„]f2PŽˆöb!æ“B""ÂĮjĐ_ČQ˙4HÉ Ķ#™3d]—#b˜ ‘üÔAz0F3 &p† Ž Åãyŧō1˜D ˆˆˆˆÂÄDD~Ą‚Ē Xb Фo$#aˆų0d|‘Ė^#ƒq ‚Ø,eÃ‘Č¸1âˆ/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄDDHËrœ§)ÍaS/ AAQođŊ˜o Eō ‘ķyÍĮÁ æ#2>a—°7#‘pi.žˆų#ÅŅėŅ#4Tøˆ‡Č3šæög+Ž9 ãž ANWƒČá_‡ã|"lž1GŖĸ.‹ĸčâSˆš"āܸ-ƒQ‹ĸčē1‘ÁĪæŒÜižGŗqš#h0B"""""$ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“ÜÁˆˆˆˆˆ‹Ã˙X)ØžU#<‹ĸ„fEÂEČÃ.‹ĸņ#Åâ8R>G°`¤s#‡.ËÄr.Î#7˜Į/š!Čō"""""&JH/ø_Âx$E˛>b#æˆŧ`ˆāf…ŅÄ]g™ˆÁ˜Gtc#ÅĐ`„DDDDDDD%e¸L?˙˙˙˙˙˙˙˙˙ū-Í3´@Š ’ųG͑Ä]GŗĶ% ĀÂ@B0‡á„ƒķą\ŒÍ †HmĖĀĖâŽqâôÃö!˙˙˙˙åB=Q›=‘ō>`2A¤ö"#ĸgĻ!‘ČŧGČųü¯×Čᐠ¤pÁŒ—CŽGČâČqɎ"" Đ3ųņ˙˙˙˙˙ H5š …lˆäĖeÃB"aÄHQūBņL‚ō!@BDaˆ˙˙˙ˆjDƒ\¸eĖ9Į$˙yxÄG͈\ˆâ‘Ā &$C. ÅÁ?˙˙˙āâ" Ž@ŧ ¸6 q ° "AŽF‘Ą˙ūWL…“×‚=ŽC\q&ƒ 8‰‡!ŖÍē„a˙đņ'˛‚ƒSã _aD 0ŋķŽ{4ŽIƈ‰O-1ŅÄ\ DMhš~#øPđ¸xPū .×ŧáC˙‡đ¸|. ‡…ápđĄÂ‡ …ápø\<(pĄ˙˙…? … ‡…8Pđ¸apū<.<.øRk>0Ĩufl.đTHv@BŠaxAËBQ¸)n˙õ" nfŊB…ų‰øBAÍÕ Î˙ūŧžŸ7Ĩq&9 Ž$‡ âg* ˛VaB‚vžvX‹‚ņÜQ97€å–…‚˙˙˙ĐÁ”˙;WĖŽq ģæACŽH­Ųt.Æv€×/ĘLä  /F`Į…˙˙˙˙ÄĒv9"N#ʸÍÅ&Ëa–v:.ēD‡3†|ˇ’A‚-Đä;АŲ4$ BāØU9 ‡Âˆ„D?˙˙˙˙˙ø÷%xB"8Ø9:¤ža—™6 L‚eÜPA…Ú¨hI9œqt]F1hžØX&d-C’R‚‡˙˙˙˙˙ü0†!D†”/Ķ†Į(đƒI‚!W!°ƒH^:ĸččŽ"„]Ė#1¤4œš¨GpĪ!ČƒŒ9n P¤AäŦ\ Ĩ"yüŪG2<^#ę\2X?˙˙˙˙˙˙˙ë @ærœ¤AŠ“‚°D‚ø! ‚ŒD#Č.UsĒ(F‚žF3ē8ŽA˜ Û.†TŽcš(+’H~$Œđāîmžƒ#X‹ŗ°¸‚‘p8 Ā‚D]"ņ+‚˙˙˙˙˙˙˙é…qÎáž2ô Ërhĸ]B%ŅÂ#ƒQ°< †H`ŽG6ÄG#ä|ķ1‘™Ģ7ÖI*Å ˆˆŽ"#đ“ ˙˙˙˙˙˙˙˙˙ü,61ņf„üŽd|ôaEČŪa—EŅĀ…â>G¸Bāļ äp(#æs4Fhâ$?ždK„",!18B6߅ ĄÃJIō„éŲË<‹Ŗ#ˆqEŅv] @˲ėšō>GGą‘Ø"āšp…Ā‚>G‹†rčÆhF#ų#æˆĄΨÁÉÁA €„DD`ˆđÃA¨"đĄ×ŋ"$E˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü¯yŧ‘è<‚ŦɃ‚[â$F´qF"č¸G‹™—r0ˑą GÄc4EŅ#<¨DJ!„XB"""!ņĐ!Âāĸáö$Éy1¤žˆĒä ¤áaŦ#‘ä]Ė"ė¸dƒ!räaG#ä|ü]F đΚ†""""""(ŪÃđÜ&ôK”,ėŋ°đ@ūKį”#4Ū,ɃîfŒŅxØdåâ8d "än.ŒxÜqEãy đĄÃÃūÅn[›p6AĄ\#Xc ú#y č. Œķ8‹Æ\Œ˜2‘ÃapV.3ˆņFļU ÄDpø|†Č!ܧ%šPg* Ąj"Ė !„‡|.ãC ŧ/}r @§ĖĀ„xĀ…Ņt„‡DDDDDHãÍ‚ üX‚°‚úäģ6Ļ 9„""/ûV˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūM"ũ$FâȂגt=øpž3dkEŲv]ˆá‚äG¸.\ Ád‘âčņĘvtqIã†\ãzü4 ƒájŋ‘ ‘6 P'ŧ3nj&ë)#'Īę{0˲á‹84€<4Ã$ ‡#ŠG"ėÆb0D|Â3EŅt]ˆų„`Ė#8Ÿ#ˆĀ¤ ˆˆh}z‘ēxAüü)n ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áøWüm˜!?QAĖ%4Čų7›Čų‚#ƒhB"""""""@ö9 œŗÁ+=œįōg2šÁ ˆ°„DDDDDD4!…îˆPáø^ % ĄÂ‡ø ųn!BSŅy ŪFf#‚#Åâ8 Á@!!s9naÎ9Į8䜕“₃ÄDDD8a˙˙j/pF/_æŲņÇx˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øT‚_ÂįgeŅv‚/Čø! ČâS¯¸Pũif' >*Ėz’ŧd›.‘yŗ04ˁá”˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙õŒ‰~O‘ô—ĸIÄDāÐÛrœ¨4ƒh’žF"čē8œDD!ƒ'đŋ úČMû|5Ō÷ßĒūŅdĄėĖ2Čų2˂Ø0ÜŌ.!šČáHņtc)#Ւ`¸ˆÂ ˇĸ7ˆˆ `‡Ã:Ūū^Ã_h//Í,ˆ”â.ĖF%8â"""""""@đR‚–Cá!ĸeˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆ‰ÁČeLsŲ f‚ Ų?p„A R2\/đŧ"u˙\-JŒÂĸ$28e""""""C$G&9ėØ]dŦ‹røú”åN˄/ø]ÚråAĮ9AĮ'gĒAÂ*; ‚ß^ #‘‚"…øuáĮDËáŲ§įœEŅtb.ŽŽ¸dƒa€ĐGČāæČĐRpÁȃČųˆō+@â#°„DDyX|.Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙& ˆˆãá0‡ÁB˙™$!"7Ç˙_‘™ėö`eâ8įˆē1‘ķqЌ"^)"N Ö""ˆßņ ]Ɵ‡×áBõuŧ°0ü"˙ *æ–o7fpŌB"""C rä 9đl*eL¨<ã ˆŠ¸đūáaŲĄĐC˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂXɇ Bú 1 ‡ĸ7›0„‚ŋ""""$aĖåA1ÎANTËA+:ŗœŸ‰™Ŗŗ‡Dq˙ëáÚüGÂŦ8pÂPŗ¨@¸ļ¸kđ‘Սæķyü‘Å#†HŗG¸g/ō>n<0dO?žD ˆˆˆÔ!ãAxCīÂûߊ~q)Ø0dáß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Âāˆô<Ŋ‡Åf28…Āœģ.´`ˆælÍæō8h7‘ō<^#ä|›q3 ‘œOdr/ˆ† ˆ÷ú×˙ ø]Į‹Šš›ÉuæhÆo#ÁBú …„E fd=pÄ/GŒôo#įˆūGČņt`‰0 DDODDED1ˆXHGÃč/‚đ˛g_đ˙‡Ô"…æ3ŅRÍä|Äo#æķ@<3HāP˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡„ŧÎĖHH8â"""@đf˜äĮ%ŸžČ~'´‘qxA(xaeĮ­.!Ŧ!KđŠ#at/'ÍY$#„]EŲtq3/ȸ5ágĸ?įđh.‚Ą#är.ËŖ4QF/pˆŒ,?ũ–‚ōī÷ũ ,’ōc™đū"""""""""$2@ŋ¨a"#ˆFq‚˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ yŽgqÎ9āŦ+ r ˜æ™X`Î žÉøc-ø}`˜(jC  @‡˙„,ë“ų €Ō#‡.¨qFˆöOQĘxÆJŅÄ0â<>C4rܧ#rܨ< Ü30 DDDFØũûá~HpBX.Ä/č™G*ž#‘—EÅ0 !!8‰$…ː‘iQögÄG…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“ Áˆ‰øa°ŋ˙˙á IEĨđ"äa#ˇeĀ‚8-Yp…Ã|Äb#ä|Ž ķĢ:2@¤påĀâē ‡Â áøO[˙ ¨L ‚2<\h„r—ā„! ÜÐ͇r DA‡=™Ë."F)`˃!50‚׃<ģ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙đĐH‡šJˆƒ†Á~ˇ đ‡žČų.‹Á3\¸-‚ÁpBã.D|‘Ä1Čų„PŒĖE:3æķĖDDDDC HO"AĖ…k z.GÃ8„?|0æt]3y#Į˛DxeÁlĖfxE҃#äs0ŒŅt\ŠD{7‘ō*ÄDDDDaŽ#ČqɎA^ rŸČ,A“č%_ Öå §-˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„ \(_…!͞č¸-†ą„c0‹ĸčÆGĖFã„GČų>o0F#Āšˆˆˆˆˆ°„Dâ"#ŅZƒ0‹ƒx…oĄ—!sy„]G Ąaa|:-ü/4Čæ`2”ŽåÃ|ÁEŅtq‹‘=‹‘ŧūhÄDDDDDDA„‚Ãā‚끏õd ázˆ]ĶTš× ˆĶ7Ÿ‹ĸčē/r#‚‘Ba˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū0Õ6ፏ‘Ã$)4×Ü]#q­234Eēaˆ‹ˆ‹G‹a}P|°‡HhŖ0āԂÍD"(GŒķ.Ž2áļ\pČāļ ……˜ Z xiEđk8į‚ āĪį^ÄDaęāĄ‚ûņZÉ8áɌ ∑p4eŅŦ˙˙˙˙˙˙˙˙˙˙áÄD‚¨ä šÎ9ā§-j(DDDF?ũiœÄ=B dŗb æp† LDph.!2A˜Ā`ÄGČų˛.ĖGŦ„‰ĩáHŽS”änJTÔIí |?ũüpž˜ČČÍÄq |Ørč¸Ëĸᒠō4)eŅØhDDD]„W5 Ú ˙˙˙˙˙˙˙˙˙˙˙˙Í­Í!ũ-›Ž?Ã˙å:ČXĖ„`0`#˜7.ĖGŗyĸ5ĸņ'2@bB+•æŽ0øx….ƒAü"gÎÉäüį‘v\ˆņq—JG‹ˆĄÄDDHd äQɎNÎ91ͅáäȐHsAœŦ(•ˆˆŒ&@ ĶøO ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷Đ`Ą‚0ĸIĘ ŸÎˆē8‹ŖˌšÁl ˜EŅt]ˆņÄc1čŠ"襄DDDDDDDy ­†‡„l;Pe:Š’ūuEâ9Šü˜Flē.‹ĸã.Â!Ļ9'!dq †H—]29˜F2b7‘ō>GŽD|ō0gXŪo#DKæˆDDDEŪ˙AøáIīO‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙øA˙"X áI÷îc0!# dp[2ā…ĀÁqâF2>b0‹Æ­ÆfŒÖ7ˆˆˆˆˆâ"UááxstŧÜ,0¸/› ĄQü)€Č 2āxk—ŒŽfķŧGČų#™ŧÂ1›Œftb3F#ˆĶ0cVԐÂī˙ū°¸Yü‘ōG͘˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ Ē9'!Ęr œsÁXV…WhDDAÄ}{“°ûuķ´x#ŽË‘.aŦ\ ˛čē43˛ÄDDDDDDCay § aĘs}bÅâ"48Uá~„-aQ4D‰B>ŒĢČų?˜F3Čē.˜Eâ8¤xē.¸d‚Á†H3Hؚ#Ä]Č.@ŲOˆ†˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũà ߸„đ÷‡øxZ“öØ ‚,Ÿ#æķl ÁœØR>y¯DZL^ˆü>eč8]îЂ;-üĄFhÁ›Í *ÃPã.eV5Â"? ė4a”ŪG"ėŧG‹ĸėē.‹ŒšÁ ¸dPkŽhdpÂăŽ$ ܕž g¨šˆˆ3 !ģaúĩás´™Ÿ3qvb8‹ĸčŠ`Čų‘rc™ÄDDDDDDDDDDDDDDā]Č+A 9â˙˙˙˙˙˙˙˙˙˙˙˙÷ˆ8ˆZr ÜDƒ"ˆˆī…~\ŪaEãē0˂ØĀ Ž)0!Äb.Œg‘Äf‹Ŗ˛1ˆ‹‡ÄŠ8‰8äČ]œ`aC˙‡;œīÖLg‘ĻG‹Æ#ņvƒ0ˑ‚#™†]. N\ĖD8ôQ"č•Å9šąqPŋ˙˙˙˙˙˙˙˙˙˙˙˙ņ n95MAwÄP|Ž] uŠp‰j OF™ÕœČâEÆĻĖ ņŲ0åD*"#âx|˜dL!œ!a!xVr ÎW=…ãō+EҌŽŒÄc ĀĄČā\äo<Œ×Ãß ˙˙˙˙˙˙˙˙˙˙˙ü ęūAģ/čA Bŧ>W!+(äKŒĀ`¸e‘ĀĖ6Īˆ›Ė3ĄÄhˆ†B":…¯ÖFåĀ0ĩņ!™Ųp/יW˜EҌ˜eŅp3 cˆ¸Ė„vtEˆˆˆˆˆˆ¸đĄ|>Ã˙˙˙˙˙˙˙˙˙˙ë… P8{ųøĐČø!Ɏg*†ČR‘žeĀĐ4f"čÆ:ĸb""đú‡ÃÅīđ¯˙G)ÁhGÂ.‹‚Ø4eĀÁpn`3J¤C„DDũáj˙˙˙˙˙˙˙˙˙đû‡ëåšNF!‘ō9E؈ų#äx¸xˆČ ąČc ƒAĮ= ˇŋXAŪv˙“Ģ#ä|ôG#tb0)ŒpČ Õx[4ÔŅF,ÁÄĮ0H09 a‡8įüS•…–¸OÄ)ÜŅŨy!ĘO‘ķqŠ"?‘ķyˆÄG0Rė¸Ë„.b…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙7‘đ‚ Ųƒ#ā„DDDDDHÎ0†ĮB""5L?…‡&2>aÍæâčÁ Á‘Å# …Ã9t]Ė#.‹Æ">|ÍäxÆagķų1|DDDDDˆä AĮ8įãžÉņZ’.@ąĘã‹đߋ™)ėŸ4ÅŅt^#ÅŲt]Eâ9°B8…ÁTŽåȏ•qOˆDDDDDDDDDT?˙˙˙˙˙˙˙˙˙˙˙ü™xjÄ̐ˆˆâ ‚ļŪz„[Ú4ÍāĻ‘tq—G">Gģ.‹ĸņ#™BäG ‘ āĻq—EŲŅŒ†Íh§„F1ÂûõUxYãœs9[ĢxųKÎÍsy#į™pØG@PG6NÎ91Î9øŠ-kr°?Ü?˙˙˙˙˙˙˙˙˙˙‡ī˙!Į4",ûWf3 o7›ÍÅÄ#äx¸Ë¤G"čÄc#äs#äxē/ãėüKáÄDDb$1x^ owᰄFčŽ]ŖLëķų4EŅvc0D|Áˆâ‘âᐠÄpČGäc#är.‹ĸčē8ŽGķöFą Ļã†J˙˙˙˙˙˙˙˙˙˙˙˙˙ū]aÆ˛Ĩ’Ņų#æâčâ/F2>a0 Ž E؇1X¸\=‡oĖ…‘O‘âŖ!æđψē8‹Ŗ&\ ÁrFF¨FüD†áB˙˙˙˙˙áƒ<Ėĸ8e؈‡Ët#!¨^"$q3’‰…Lːŧ8‡˙˙˙đČ Ž(DF÷ áy ąÉŽLr~IĘrœ¨¨}Ã˙˙˙˙ķYÎrņČ`rNFä‡"A'0įŗöŋđˇˆķ+žÁŸĐ0‹¤p÷¸]˙˙˙˙ëâ""":˙a‡ä 7!¨9Ņ÷¯Â ˙˙˙ūTą!ÜūÛĮīę˙˙˙°ŋëøūá˙˙ú]œØu°ŋãzđ°ŋ˙˙ÃØK˙PÁŊáBÂ˙˙˙ø Ē–6‡*īõ˙˙ø2͊;ü ž?ß˙˙ū´áÃŋ~0ŋ˙˙WÃč ž˙˙īÜ? ?Ž]˙˙ęôxO˙°øpÃ˙˙÷^„˙˙˙˙× áÂģū…˙˙áūƒú¯ ¸˙ūīa|0°ĢÔ? ˙˙áŨo~W˙ /˙˙ŨpÂ^W _˙ūúÜ8aÃëz„A_˙˙˙†˙ßųVK ?˙˙¯…č:„ēĐađDnÆ˙˙ü?ßÂ&8áÕũÂ:Y)đŋ˙˙÷\ ‘\ĸ‡`ˆ’[ 0ũøp@öqČw,¨8A˙˙ü ŋ‡„ņ `°ū¨–d„|( ˆ„˙˙˙øwh^@’ :0’č‹áø^ 5 ‡˙˙˙ū­|(AL´¤Qđ¤ÂČÜ O Ū@ƒ,¨_ 8"|&|0ņ@ˆŖĖ“Ŗ‡˙˙˙˙˙…DLËrąk#đÔÉ(´HwE áĸé äGČų#Æ2>ap†đÛ Á?ã‘T>xBqõ Ցķņt]"ņ#Į˜ˆæa28Ã$6ƒ˙˙˙˙˙˙˙˙˙āƒDŸđäå::#‘ˆō3EŅtc0Œft^0#6d} ¸!p…Ųp3ē.ËÆ|ÁĖD|‘ķų4FhĄ• °ŧ”"ÂCø@„3ųĢ7Íä|Â3#ē1@™€[Â8`¸r>Gq—F ō=‘ȐF 3FB †]b"""""#‹ ˙˙˙˙˙˙˙˙˙˙˙˙áĻŪ¤8ķēį†WTPČqÄ{#åB/ķqt]ŒFĖŪb0D|ŽG2>G X.p Ō<\9y=ˆˆˆÂ ˆáb!Ž=HĐuTB$.@Ŧ#˛Ŧ˜Íƒ#äph. a°¸ ‡…#æā§A—!ÄFĐa„˙˙˙˙˙˙˙˙à ‹ hĘķVĨ‰GE8!- gí8‹ˆG ‘Há’¤|Ž!pÎr;‰!G !.9ċPÃ>„Cŧ Á‡&8Iņ:ĸQ›3yŗ6†3ĀfĀ9üŸ4FhĐˌĄÂĄ†ŧ?-ÂDAÂ"á˙˙˙˙˙˙˙˙˙˙˙˙ūEx(B*ž‚"<āCH¸.!˜\ ŖĪlDGáZp‚&8/ú ¸}%Ą0¤#¸EF`  –\BāH^0ËŖzZC._(K*  ‰9‡ãÂë4P”§F™#įÄ/ã”0ŋ˙˙˙˙˙˙˙˙˙˙˙˙ßâdc?›f€[ Â8e—åŅÄqG#äĸ0Č&""/Ŧ3#žNe8pˆ‚øaIōž4VqEČŲČų.Œa#´GÃ@ÃŖą´xČųæ]Á¨ŽÜÄ`É A΀šŦDDBĐŦ0ˆ" ˆáQŸÉō@Ņt{Čy„fŽG™Æ`Čâ‘ō>GĖFxĀd† !…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…OæxÂ.ˆHg.!ŠŒ‰ÄHĮAሃ˙â‚pŒŦ .fķüÂ3äp4 rá‚>G0‹Čöb<ÎD<ō$pâË҆˜ä°ˇ$9āÜsL­L ‚áĨ „ *C"o  ķĩ>DvcŖË'3HÂ.Œd|EÁrėē.`ŌlĖo0Ėĸ3ˆ[!"%ˆÂA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū"COÉÁreĘPyvŧ…NB> !âĐ"kŠBÎ"ã†yEŅv]Äp=ķļ ō•fA„DaĐ^‰gđĨ“/‰¤""0]|šË&HtS‚IŽ,ōŖ'Ęŧ‘ķfl9qâ˜@ÁüÄo qĸ8 ’DxeÃ$5K†sŒ“f3yüŲ  øDL“˙øP‚üÜÛ.Uæ뇕xR%ķx, Y°öwĻaG#Á‘ã2A‚85žĘŗ* ÄD4Ņía™L—‚‡\„p¤ËÃՔųG °pÃ×äW?˜Eã ē8 ¸‡âA’É ‰DP#ä|#Ž‹ŽäžĩĒrt2ŽŋAa?VS戗Ā Ã\ē8Î#„K2b ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙؃#˜.lĖ@kGėÄC2+‡~"#_ Đ{ā—km÷…Âü9.2>yž3ÆaF Â.`Ž]EŅâ8‹Ŗˆē5ŖŦJ‹"#áb""$5!`ˇ7˜šÄŠJ}ë…~ūęžaŋ•ū°ž„],H(DDDDDDHc“˛NaÉA,)Ė9 đjBRĄļR„DDdQÁ-p˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˛X!˛…qĮ'!?AtD팝_^°Ü$#å… Ā4D28Œģ.‹ŒÎ0Œâ]ĀˆĐˆˆˆˆ…ˆÅ/…Ü0ąojö\aßūûx^TŖčŧG#f…â9‘ÁAā‡ÄfŽî…ō_˙˙˙˙˙˙˙˙˙˙˙˙Ô-¯tRAU‰‡ ūN˙ޞFGĖ#ĐfķļG0ˑ‚0!„]3 "Fo03qΚ Æ.b"7Č‘Ã†C`ãxa‡|"8A2 Ќ—ˆō ŽGEŠÁ\ÆGĖ2čē=›2DAÄ^aˆâÂxå8˙aö5&œ ŋ˙˙˙˙˙˙˙˙˙˙˙áV°ū4C\9˛€U#ƒ[ŅH$4r °NĄHÉaC…ä|Āgë;Đ.ė¨ôJāÛÖLdzˆH—eÁ”â3#ˆē42ĄžČÔJ!a÷æĀŧ>D’Hžæ!ĘDiĐĪä„])Ä\!t]—EĀ˙˙˙˙˙˙˙˙˙˙˙˙˙˙đü(AŨIR&hÄ] Ã$)#ŠGŒã?đܸ@‘#Š"=˙Į𹠏É@1įiQĸ1Œd~˲ė¸.ˇ0!°(_˙1‘Ã$ Ė#Ų<Ž"!Ī15‚Ā‹ Ž8Џŋũ˙îAĮŦ¨Ņæ^7‘ÁČņŒÁGl ËŗˆĀ‘Ā‚ã1‘ĖÂ$fŅ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áãDDHd~%Be÷’— X‰oūë!ßøJ# žČøSLޤp[Ķa˜3ĖFķy†\öo á“ áErh0ŦHîT rœŦ)ĘĄĮ1%d l8’5ƒ@á|(}8e¸ūFpeÃ$HáHųŒ„]—eÆ\9„b3F3y#挏‘ķų„@ōąâ"""""#â˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙D*sÉ_ 9Ø4`‡#†´7áÂėĄŠ€ ¸4—"8da29‚0 ÁXâ°ū_sŽK sLš ‚ „ØE‰ @1J}|,Š#Ņt] pB$< œ¸9Ī ĨBkn|?˙˙˙˙˙˙˙˙˙˙‡ÄCßŲqP™Čt$ƒËt`˛"0Ã$Čā\ā`Ž ĸņ„]—EŅÄ`gˆ‚3L‘Ŗ#qä[•CáBģ ‡…;FiAÎæÎ"""$2ŽCšn[šĪgĄ/$!428eˆˆˆŒ°œrĄĄ CîCIēĖ˙˙˙˙˙˙˙˙˙èl7đŽÉ3Čö†`2Ašp<6 r8…ÃHšEŅÄc6f"*„DD_ĘC>ŸŒ™>Č[9´øaxlaÔ&24 `ĘGŅˆņpBđ0@ŦÂAˆˆŽŽkH#q3Îãį6 Â˙˙˙˙˙˙˙˙˙žzė)2Ŗˆâ$F,ÆGČᐠEÂlŽ"čâ1‘ķy0ĖŅ€< `xø@dp?ō'ņXūX0|$Vķâ1‘ō>G¸dąüūo7š#ˆŌ5E>""""""EĀS“X¯DHČ+AĨ¯Đ_˙˙˙˙˙˙˙˙˙˙…Ī@.D|š…†"DĻUæx8QL¸įRņ„AļūûpS˜sAĮ9Î9œ§)ĘsYĀĘÂļz•ĶŽ@‡)Í!“… ¨eÂČeHŗá˙˙˙˙˙˙˙˙ü:%B åĖš¨L!ˆ‰9%äC/zü2 ÉRP°„[Ö$ ö&‹ĸî)đ­ˆÁ›ų‡'%¸Xa˙˙˙˙˙˙˙xr ㈆Gŧ*d]‰*xáØQ"8ˆüaČaČs™Ę˙˙˙˙˙áß@ÜqÅÄPž°øaWRēR.Īdp<ĄW"8č.˙˙˙˙ܨˆ‰N‹ĸāN\ū$ ŧ>P~"H3ų€dA‡ÉpeŦ(˙˙˙ü.ĸ$ģ.ØP˛*WáBžÄaŽAĮá˙˙˙ĢŦ,­‡øA}Âūvö˙˙˙𷇎 +‡A,/á˙˙˙Z ‡‡‡Ø…ū˙˙î@‡˙áB¨đ˙Ã˙˙˙õp‚ûÂė5˙˙Ãē˙áû˙ ˙˙ë øø_˙˙˙ / Ô(pŋ˙ø~áÂûÂü.˙ü*ÃúÅ˙Øpŋ˙˙đĄ˙‡Ŧ?ü/˙˙đĄx_ˇ˙?˙˙ø|(Pĩ đ¸˙˙õđáīū(_˙˙á~ū?đ˙˙úđŧ.áCō‡˙˙ūü/D9°đĄë~@¸ænĨÂ˙˙˙ŋüH;qw ŋ ČgrĢ‚ƒ§‡˙˙˙á˙ABāÄ,(];ˆŽaŪ$vd´Ž#ˆ¸g.ÂĐp˙˙˙˙˙öđĄdJA‘Ác–‚ cŠ2,ÃP´°á‡ NFõ†a+A"<ÉX4—Ãa1˙˙˙˙˙ûÂÂō 䃉‡!øŪ3*€đĶ0ëá˙ņ‘B ã’rČ ü/˙˙˙˙÷˙ü‡˜ō‘ÄL8 BCJ9Į:á×ÂđŧGAˆŲC 8įGiōËÆ\ކh_˙˙˙˙˙ū2C˜™ų ĀäI#…#˜đŧ,ȃœ{ˁ”ęÉR8¤pČ"8‡˛>aÂá’c01ČųĖETÃ˙˙˙˙˙˙˙˙õÃČÁCų!DN9žEŠ|Ždxē.‹†¸5ÄDDDDDH`sŽqÍ‹g“”å9‡%ƒÁ CŽ{<Bz•!ˇ Ąįü‚Æh)†HÜDDDDDDHÎ[‘Á1ÉÁNSš ƒņNh+Ž9œŧ)ÉyČq ˆˆˆˆˆˆˆˆá˙˙˙˙˙˙˙˙˙éXz-Á™͊GČâ‘ō8`Ā…Á°¸-YR<]Eãy„]˜ÉvIą„DDDDDDA‘¸‰Č9OđģøC)ŅC.ĖEà 5Hᒠ§t]—f2>Sħ'ƒDDF†Ēâ$5ÆlÉTÇ˙˙˙˙˙˙˙ûōŪ"ZŽšĸ/Ár8dƒ!pætc#æt\fdO›2DuŠr:˛Mîū@đŨËá°Ąk„TŅØHã429›Â< b—ȸr>GČų0‹Ä|ôasų'ΨDDDAĄDq „rWūų]PÃØa˙˙˙˙˙˙˙˙˙˙˙˙ɞۧ€Ë8Q!’aNC9)r_S˙\†‘<*°Ąę[‰ŖŲ¸ÆGČä\ÃPĀ]—"B1š#ˆĶ#ä|‘ŦŦB0ü-˙ųJR¸vKæGEŅíLĀđpŋ˙˙˙˙˙˙˙˙˙˙˙ۙæōc4EŅĻxˆæ`“ĩˆˆˆˆˆôÃ˙÷Le“š°°Ž‹Íäx¸‡ĖŸ#™„\2nŗĩTqŒ‘ō>a28dŅÄ]˜Žš¸•åJÂŋ˙ôR"ņ:ؚ8ĖG#yʁ….ƒ.A˙˙˙˙˙˙˙˙˙˙˙˙ķZ(D"1‘ō>G29 €W.!†"# DČՏ%Æ%ŸY،ūyYā4sČųČæG3ŅüÂ8ŠÂčDDDDHYāƒw)t”’@ƒá cNËŗ€†l¸e‘Ā‚ā`Æ`"ččËŖŽlŒŲvK™üųˆˆˆˆˆËw‡˙˙˙˙˙˙˙˙˙ūä1YԏOôÉÅ#…6 ķ ¸d‚™.\B>GĖ3‘øÍ‘ÁōVÄD`„qÕp„6Ŧ.˜–…Č‹$‡0Ü?Lâ)3Df `X\6ĀšŠAÎqΨ^…iÄ8ũ}T?˙˙˙˙˙˙˙˙˙˙úŌ'ŌC!j ™e^FFhĄ(Lē.#‚Ø0\Ė3aˌ¸ĖŅÆ{!Įˆˆb2(ėG˙°ļØÂĘM‡Ŧ+ä; ”ę#ˆ]Eâ8-†Ų G25˜EPå$ˆ8ˆŽ"Cuīŋމ!œ/˙˙˙˙˙˙˙˙˙˙˙˙‡ģCXBAsEŅxŽ.‹‚ŲËÄr:äxđ0>(͈q˙}~ēÃÜ?Aĸ7VŋÜ%ğ‚ ėQGŖŦr#‘L"āļˈ`eŅÄc;5ÎąŽŒD8Œ!QL Âã^D §RȀ˙õÄ.䐏ec*ķyüÂ9Á´?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙öЄ`ލ3EŅčŧG Ķ#ÅŲ†33¸‚Æ"#Ē‚aŖ˙ŋ: @á^߲_ yōS˛á€LĀ€„DDFTA)RYĮ?‘¸ˆˆ<3,öLLé "@B"""'aI÷ !PaĄ?đœ(o­čŧb0‹ŗØ)Ād0Dp"""""""$2qĮ!G<å9æJ ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ļŗĖ`Ž88ˆ‰é4ĄŒ.ø* ˙ đU1‘ō>`93B xm9î@¸äG$9îS˜s9.)ʙPh8ÜãQ†DDDHd ö Žš‰ÍAÎŧ! ‡)ėĒYBōčĀh#‚Ą2D1ˆâ‘ķy.‹Är8#™Čä^#Į#ã* øRpÁė0B"!ÄDDDCá˙˙˙˙˙˙˙˙˙˙˙˙˙ä §!°s9nXEŅÜāŋė s0ØG3€GŠ8‰8ˆˆˆˆjŠ9rŧTČ`sŽr ÃYøÖ{8DDDDDD4"#‡ ˇ­āĸ˙rĘr܄È‹Œ$đ ‚ųŅH3A—HDDDD˜â@đ\rŽSš'"†A}0Ž€¸â#ˆˆũt˙„Ąá˙˙˙˙˙˙˙˙˙˙˙˙ęjȇ…CY ´cŽ%’ŒÜc#‘x "čšà ČāVGČä\e؃#äx¸Bėē.ĪfķdD#Ų%‚! îûôúˆ#%w…đaRa äĮ‚d?†#ĩläa™ÆĖ3ŸÍŠ`<‰Yˆˆˆˆˆ´"ÄDdAãĸ úéV ûĘxÜ/.;$Âa˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éqląą—F29˜PŽ\DDD§-ČdƒDčk4Ë.x- B0‡Â‚ĮqpĄÁnČ;ëCޝPĄß˙ƚ.‹˜9t`ŒČ‹DW Ļ!Äh_ø^ P¤‡¨¨!ũÚūv[hŧGĖr9EĀķ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙á^ųO„B4‹ˆG°Û7„8ˆ÷üAõ*ÂķÂŽÂüQėÁÅ6AIR>a€É .5 ō.dn.Ԏ  Ā„|ôGĖ3Z~¯ę˜×„Š>¯Ã]ķfHF<ã.DpĐa ŗ—Áˆˆˆˆˆˆ…˙˙˙˙˙˙˙˙˙˙˙˙˙˙š&˛FG2>†Į0ä0â"""@đTr¸ãœ°å‘}đÖY T‡ đ‚S@4rá Ŗƒ8ŒdduÉ;aÜDDDDHy´1ˁĶú¨_áá0‚Ņå"""@đƒ<܁ᲰC!G%B´Éː— ˙˙˙˙˙˙˙˙˙ō ļDNa˛“™S‹ W.ģŪ˛ąį„#ƒ„!‘Áaˆ‰š8$9´*9Į=ŠŽŨ"8ŖĮ$ûØS„8Ŧ;¨x^Ģ[:#‘ ÁTÁgŗųæRB"", ˆQↃŋŪ˙˙˙˙˙˙˙˙˙ũ(oÔØ Ŧē4Čų˛čŧG g.#ä|ŽĀk˜Í…4Fa˜E.cB4ĩČŖØ/Ŧ8pˇ ŋŋÎÖ˛F˛5H3yČų#äxÍ‹‘#rá’Ļ3Čē$Õŗ"S:€Äa  ×apÂIPÃ áø…˙˙˙˙˙˙˙˙˙˙˙˙˙õ aCųĨįOČļn"t]Fl3 D|ŽeY“IlDqņC‰œu~Ø(\!á^dh°ž/ÂYĘŧÂ.‹ĸã. `Ö\ē.‹ŖŲSŦHDŒė×& D2G˙ Č( A5ô žœ‹ŖC6EŅqä\#†@l˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ū‘%،Ād†äp値xšâčē.ŒdxÄ]Ī@ĸ""DFƒw+?ū A°ũ8Ūa—EyąBG Eâ8„DDDDHdŗXáš#ŅėŽfÅB""@đÔrœ¨8įķŽ~+SŒ>ąDDDDDDEáȃˆĮ˙áÉX6CÃõ3F"čÆGČųˆ‘ķqv]Eҁ ŗˌ¸š€ÁŒ3y#į‘C$fˆ™Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Î# GŽ‚ŅšEŅÄ{†âC4pa 8åT‘ĸ=ä|˜ˆæ¸„qB!8ä;ÎänaɎx!°rcœsaxS”åA'*į9õ+ —5…¸ˆˆ‰„ü‘@B">Ãä3¸ˆ\€ŋ ’ņčē.Ž"FHEŅx „r. aša—EŲt]čŪCĪâ".""#ˆˆq˙˙˙˙˙˙˙˙˙˙˙ū@đR‚Ĩ¯ÃņH2<^6dxē1‘ō>G”Ā….Dx¤|Žd|ŲĀ…Ņtb ‚""Kˆ?:ĶƒŽqĪgđTSņ;DB8‹‡āÜq! ŽAw \rNaÎ9 ˜į”ĘâvqÉęW@B#ˆ‹4†äW /˙˙˙˙˙˙˙˙˙˙˙ÜĶ2Øp°A~d/’‘ō9‘ČáF2>GČņŒ‘ō9˜GĀÜŧG €l.‘ō<\ä|˜EŅtxĪ™.ÍÂ""""""/ĄÔŗ‰œpWáûüWöy,Ų‘ĖŪGČņL2ņ/âč¸Ë‘ âž#ÅÃHŌ3EŅvĖJ1 Ć/ApbC ‚^˙˙˙˙˙˙˙˙˙˙˙˙Æ *hē1Čų‹‘ČāAv\B8Œē.`Čų#ÅŅt]Čų#æĻGÍYķ$¨‹7DG‡ōHQÉ͏1!—*߇Yš‡ŅN‹‡#æ—. `At^#ä|Ã1Œ"čē.‹ĸčöaĮąä09s8EÃÃ#"īûˆ‹ķ!PV x_˙˙˙˙˙˙˙˙˙˙˙˙˙$\ČāxiĀđm8F"9˜Œ"ėÁQt]ÍXˆˆˆˆˆˆˆˆc#ÅĐŋü† ä‡&=L.ü?„P‹ŖtqFhē."Å?ž'DDxˆ°S•ņ!ÜFæKWá˙˙˙˙˙˙˙˙¸d„g3 ¸d28 ‚"?üDYxūŖĮūĸ""@đqĔ‰Yˆ1äO #29˜Ãņ3rë)č?Ã˙˙˙˙˙˙÷ xĮ ãœs9TDDapņ 9wԈ93™=…ø^OR• I<%ūM">`4¸ÂÄCˆđlü?˙˙˙˙˙˙Ô!†|˄ū"uūDƒD™Oē|6áĘãūv%‘Ëx)Ęr ƒî"$H9Į ˙˙˙˙˙˙¯c¯áâ8ˆr>`3—*#đģņ!•ĩOø‰ 3mGČāx‘Ã$5Ëĸč¸Î#„E҈äKĮqˆˆ˙˙˙˙˙˙˙˙á˙)ŅIžf˜1Ø,‘ō<\Cqv]F"„^*°ˆˆˆˆØáŽ9o\­"”‹ĸėäG#f d|Â.ŒFhâ9ä<ŪNb""""0ķ"[ ˙˙˙˙˙˙˙¸pæBČ(“EŅxđpĻlˆâ#HāÁ„]3 Æaœ‘˧g\ŪOˆˆˆˆˆč.˙ŽW5qāf p¤q fō>j2'‘™ŧCšb""""."91>Ãŋ˙˙˙˙˙˙đšoZÉã7ģ0†H.ŽG›Éf""!ÄGXdĶ<Ģđå~#LôGĖ"ã.2āx4DD‡˛T2 °ĸŖ$ˆˆ_}r”ŽšEMEŅw Ō#‡. ˙˙˙˙˙˙˙˙˙ëįeH§Î¨ÍČņÄ]‹ĸāļ „pË4Ė! ˙ė3 ˛>jŗ#äx¸dÖøRS‘™„c1Ã$3M™†h ažĪÆhöKĄđû„v7Ÿ<ôaF3y#Š`Cb‘ĖĀ.]—0Õ#ƑˆÎ˙˙˙˙˙˙˙˙˙˙˙˙’XŪa—`™p< á´c0ŠOÄDDËUũ)ž†o#ÅÃĄ DåqĀʃ”‘wŖ †"""@đ!É&Đ{8įãyä/pƒđļišŽ‘NŽFĀ[‹‚äaČų#rėĀ`ÆaEŅtPŽĪĶë˙˙˙˙˙˙˙˙˙˙˙đˆ Į&91Č?å7\9ķP§™ ĻpËDDDDāÛÁ')Í ÖpĪgŗ%œ€B{Ap˃ŽE‚€Haáŧsē‘tiŸČņčš0$#ĮŒÜqƒaˆˆ¸¸Jß˙˙˙˙˙˙˙ü$"saD%°ÉŦĸŸ:ŖLÂ8‚š#‘ˆ)ŒŽ `np!qœŒF™Â1G#qėô"#ÃÕAøW3aüËķyF™„{Lŧ†¸â"""""$2ŦrT&`éĘĄŌIˆˆ°„DDGáápA˙˙˙˙˙˙˙ū†xsyĸ8ŒÖc?•ã=F28‡6!xՑaˆų.Fl)ÄnGČæG j6DŒƒÉãĩhDDB”?zÉ*"čâȖuG"30‹ŖŲ:ĸčē3ŒD|‘ō>GČä\eŅp[ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ė,1( k#™.Ž Ў>įaDá„øGŒō1‘ķĀSxD68ˆˆˆˆˆˆˆˆˆˆˆ‰ €+‚9üöKc>ˆ<\¸<Î\ËsYĮ"L­ —5AZ–꥔#ˆē.Œāh 3”ėä-ˆƒá˙˙˙˙˙˙˙˙˙˙à xeYĮ&9œÃœs9PqĪöqĪdĮ:ā‰Â^vî#„*0™Ä]Eâ>n.‹ĸčÁ˜EŅt]Ž$†]Ā„s#†H2HfĄ™DŖĮ‡…Â$åA1Č=œr gãqŠžT}gu#ˆö…ä<Ų‘ķĀXˆˆˆˆˆˆˆˆˆˆˆˆˆˆ<+/‚¸õ0Ojī…˙˙˙˙˙˙˙˙˙˙†„CC؈…ƒŗ4§a}žÍįüĶHGŒŒĮD$Ģ č/p‚ÍDĩôPŒŒfŦŪh”Ž"čē8ŒfpBčē. aËĸ(Žũ‘¸DFü ‚˙˙˙˙˙˙˙˙˙˙˙ IFZâ0ČZ1›3ŧG"ā…Ņp<Há’Fq0b?ũopđ˜ ]\z%hÆGåÃmˆˆˆˆ<œËƒŽ{2 Q l^÷äģ^—2HˆDc#ä|ÄGΈ^#äs ˙˙˙˙˙˙˙˙˙˙ū…‘› G0n^0‹ŗ ÄDF×Z\! /$ˆâ3EҚ:"čÍ‹†āxmū–@ŅY €rāx\á°¸e‘ĖÜ^#äxâ$°ˆŊHŨęā‘Ú\]Čųü˜ŒDxē8Fō9‘ķ ēS†Gē.F˙˙˙˙˙˙˙˙˙˙˙˙øv „ā°ä08”åarܡ+ ž ȰDDDD0đ…ūįbv' ĢΤGČæn.‹Æ‘Ã4Ž…Ņp Ž) Ã,‘ō9›"äGČņ…œ@‚=‘ķ)Â7˜EŅv]‹˛čģ/ĖÄ`„DDDpD§{¯ÎËRžÉŒĖG‘Ä]E؃#ÁTÃ.‚ųBņ.2_˙˙˙˙˙˙˙˙˙˙˙˙˙˙øˆˆ×㞃š9Į%-œsÁBā„DDDDDGPĄēüÆaYÄ^#™/ķÆG‹Ä|Â.Œx#`¸Ë„.ADDDDDDDH.ä\!¨9 ŽS]ËrCœrPqɎg0į9-Š„"""!ōøãœsņŦ㞠r¸üYˆˆˆˆPT<(Dš$ČÂ.¸ŠÄfŽ ¸ÄDDDDDDpŋ˙˙˙˙˙˙˙ô"""":ŨëŅĒ.2čã8‹ŖBã.‹‡#ƒÃ#˜fã#ÅŲq˜‹Ŗ×#å`Çà Öˇx˜EŅtc#ä|Œdpmˆˆˆˆˆˆˆ‰ €h‚Ęrœ§* aėœ…Aœ§* AėüT`ˆˆˆˆ†…˙˙˙˙˙˙˙˙˙˙˙öŌú@ŽÂķŗ#Åâ9‘âčšâėšÁlˑ„]eŅqņp\͈ˆ8ˆˆˆˆˆŠŸ…qæD"Q‘ķģ8Ėa3æx! Ė9 ˜įĐh4âđĒĘãlœDDDFCŊØ,?˙˙˙˙˙˙˙˙àÂĸˇ‘ķy‹ŖG28ƒA7F18BM†âFĄ|HŦb.‹ŖŲ„]Ī"čšÁÂ!œƒq"Î985œs›‚ÖDˆË§˙˙˙˙˙˙˙ âč¸ĖF ŽEŅt\2HŽfã#‡(B""#ü/DDDDHܧ-Ė9Į<ķŗ°˛Č?˙˙˙á!…˙ /‡ ‚ņ…đá|0A{‡ øpž_ÁáP^ᇠ‚÷8 ¯†ƒÂá‚ Ü€ę ø…8TŒ/‡…ĐQ˙Ā@˙ø€leptonica-1.86.0/prog/ortiz-05.tif000066400000000000000000002072651506303110300166340ustar00rootroot00000000000000II*ūö ä  × ū%()124,,a  HŠGPL Ghostscript 9.502020:02:06 17:26:23˙ū@tS0 „É8"ëūLw˛īú ærŖA‚_Â@ˆū-˙K :6Uũa!˙ ŨÁ/á"Ąá‚˙ ü0Ž?ūĐ"ë ˙ēã˙á — #˙_°IÃÚĐG˙ū‰Qūh$Sŋøë5˙‘ŋ2=˙AK`ŸđČųÁ —ū˙Ô%Á„ÂA%~ü0ƒÂE?ū\$S˙ãđA#˙čæ˙´T|ĐG€ą„ˆ˙ü$;Ęü?øfū˙Į…G˙õčB_Ø ú —˙˙˙ė0´)Â˙vˆū ųi™8 ƒ…ŅO˙Æ?ũüđAz)˙˙ /đ"ë ˙ü$S˙á…ãųđ_Ã#Ÿ…ú ē]Į_ØH§á…ū!fĪę?)˙đü _č#đ@‡ ãËrŸ˙Cė"?˙–ÁāžS˙á ūø2ëú< ˙Į™ĘūôØ@žS˙áōÕäz ŋōÁ‡†GČü"OÃ˙åMP‚GëÏ˙Â&¸Ā‘OÃ ˙!W $SōN G˙⁠† ė$S˙ö‡ƒ.ŋô‚ė Â˙đAĐPĖ_äŊø@ˆü Áa _˙ $Gá‚Ã˙ƒ)rđą…G˙áŪ!üŲāŠpŋᄊpŋØap"÷ü0‚˙đ’Ã#ßÂ@‹Ũ…üu‚?ôS…‡øApeīā‚ôS˙ø…†a,€’RĐ"÷ū1h ũ.ąÃū/…ü8xPŋ‡ áīƒ.ŋ+‡“ĐAi‚ ŗšTē˙˙Lŗ‚r<\;ŧ"vg „. '˙˙ū&8†xˆāÁWZ.=–p„\9pr9p_˙˙á/ hEžĀ%€GAaôh  mÁđE×˙˙ū] â‚á; |G˛pīDMˆ8ŋ˙ūaÎ8CAŒ `đJ"Á…  oVÃ˙˙ņÉÃA0áÃ @Ü#˙˙Lđ kADD1´ÃŗīOū3ĩAJãŠY HŦ˛§A—\´‚‚`ƒ*AA‚ ˙˙åz°ƒŠ>Hx("#ĶHwđU-֌ˇhÉ ą"c‰Į ÉNEšNCČA5RbĻ\°fō'$9Į„' E×˙˙˙˙˙˙úÚÄZc‰CGô aDƄ§8äT„#”âEh[üAo˛sŽqÍ '“Ė’` ¤2˜āĐŽ"Ęé<˙˙˙˙˙˙ķ#<‘Âū[–‚âv*dpâd‚)ģBÁ†"b“ŽIĖ9!˛ šk‘ˆBdmĖās%‚ˆáCę)q @„§„BÃD ˆâɆA˙˙˙˙˙˙˙đ„.„v(A:ˆäĮN<"NH|'Š‘ŧ"c™Ã… . (pr&ÂÁCŽ„ED§9Z!Ą$8 C„˙˙˙˙˙ūCšB^Û%'ŽÕŖŠrHFå9N¸Š:dá“–īˆ‡‚äR˜y!߈ à ¸ÂÄD&LsŽ“öņ“["HHEIĘrž[˙˙˙˙˙˙˙˙äāŽGŲČų„]œE҃7ŒEãâ.‹ĸϊš1ņĻ|Sy¸Ąã=ŸÉB$gz#5‡ ‹ƒG`™„KāŠtHEãy0ŒhEō=/Á!(ˆäœÃ­.ē ŽCˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆ!´9ČqȰYs<Ņ38Œ"„pĖ9GŗyŧŸĖ#ˆÍIÍáM揓Åãf †#ä|2>aČņė˜F3ņšÃ”,:ÅADx˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũËsYĮ8įđG(į‚œŠ›‹rāã†aeÆ]—iĀØ pR#‚Ø,˜’āãœvpeÆfŽ"čâ8fėÂ:"čē.Īd|ō1˜G#Á˜R7Ÿ‹ĸč͗EäFáIŽŦDDOÆlDGhDDD”fŦ§eŅr7‘ō>xލͤDD†xSĒ(gS1ÎÄĸčē<Ћ˛čŧG29eҌŪo0ŒŅŒÂ.Ž34]Ė#ˆē.‹˛č¸Ëĸä`áeãxn`Bã.Í Ÿ#ä„]">AÅ Š"ė„ŒD|ŽdqŠLAĮ8äāÞĪd4$q8đB""""""""""""""" ‰ ǁHrNU9×1˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨aiDb,D3Iāã‡ÄDQ!Î8b"""""""!!=‘3)âĨ‘3#ÅŲŪBKÂ#ˆˆˆî."0„D1ˆˆˆQ%Ží3„`‹ĸčöo# ĢČæGEȏ‘ō8d†špÉũ|"s ˇ…ÂaĮ 1 a„BŽ㈆„Daˆ¸‰’äGČ❋ÅB p3PڕBusP˜dœž%„8ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙áWrN#Oá˙ÃŦ0đÔ<>IÆ¯ÃÆ"+ˆâ0„D"NȖo?ž|uøawõķ˛į"đ˛s „û C˙č.ß D_˙˙˙˙˙˙˙˙˙˙˙ÐŖĻļöwPD&uų&I ›Ü?ųáđA˙…-ËzáxXW !}oFá˛cˆ_‚pB*×ųn? ōC‚ ü0„!ž—˙˙˙˙˙˙˙˙˙˙˙˙†Ë„.˰E8d|ŽŽ "œH{7rœ¨3”åšX\s9Xk?åAč"°îŦ>ˆ8{‡„ųNŽ.Ađ‡˙Á•°î"""&qp<á’āx#‘pÔ#†Yv]Eâ<]päq †Â8h#ŠGČâ›#Ņ/Á¸Ęt§˛c!ä|ŅJHÍāψâ.Ėfō>0Œ0‹ĸčēqÃ#ä|ŽEŲxÂ.‹ĸčē.…Ã#8Däb$fūEVF˙$épŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙RC‰˜ ~änChr܆̉ Ž[G!ÉEN8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ """!‘ĀđP])6Œ.Ëĸėd|Į‰ÉThŽˆëš#O$,0à L8Oūƒ"äjΤb4 æĻGČņŌ?‘ķy¸älĪÅҌÂ8‹ŗ#ä|Žd|Á‘Üg˛>aˆáËÄpØbJqHė FDÄ/â%æn1’"(™!Ū°ˆÃ?ˆˆˆˆ¸´""#DDFDDCB"vâ„c#æt]Gŗų7˜GŒÂ.F"9˜E҈ē$EŅt]#¸„p3 Čᐜ~×ÂŌø!hI|.„!Ⴏ°áâĸ!†0ÄDDDXCˆˆˆˆ°„H™“.ĘÄq2|Ō)ҌÂ1š#ÆKÆķâ3GC8fp Â.Æ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ū b#į•ķyŧšF#͈ų‹ĸņ#™#‘t\8R9ËÆ"yEŅt]G¸døG‚ĸ`R8¤s#ÅÆ\@@ˆųČģBA´v\ˆņ ōDà ˙¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęA‡‚äp@„ÑG3–â""""[ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‘¸"á“Āđ0G €l0  Đᛋˆ`Cô ϊƒŗŽxX^¸2ļ0aD—gá0„I|˜F3y„z(G">GČņÆQķŧ`Œ"čÆn.ŒGtH‹˛čÆO‹Ŗ„a d|˜Ās öG š8 äpåĀđåĀÔˆšSI9nC,r ÂÜĐS”å8š(DDDHŽC‘`‡!Ž828)ĀđĶ. Ņ ~žˆųĸ.Ą“äūCÉtkO‚_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÁëänÄZÄDDDDD\DDDDDDDDDDD2ܧB"#‰āáÄŦÂkgeYˆ¤G˛dfŖ4f´qž2<]—EŅėō.Fō89‹ĸņS ē1‘ō80o0ŒŅt`fōČųW3ˆ!đˆˆ‹kD$SŖüÜkeãÄy G2<]â1‘ō>GČųˆŪGĖ„\ˆų„]fē1‘ȸá’ለˆˆ‰!Č}B.ąô‡$ũBė“ũĮF„DDE„""""" ˆˆúãb"""""!‚ÄDDDF„D”^#äxē.Dr/Na#q\J„ā¸3•…šNS–å9NWƒŽqĪAĮ8įđVėį8įöOŠÂ¸IL¨=œrcØä 8ŽĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ę´Gæ÷W¯ ø[É.Î9ģÂß(PéÂņ)ÄD˜ã"""""""""""DG ˆšŒD Î¨Î#æÄ.‹˛ã.Ëŧ/đĢ÷Y=Cū¸_Q[úA˜ įÄyūHâ"""/˙˙˙˙˙˙˙˙˙˙˙˙˙úÂ˙ųn˙üpû“L‘ķTHqĮū~!aDū˙øa˙â!?ûAÂÖf‰PfpĄ5$9ĮLå9o§„B?ÂĘŗĀpē@‹¯˙˙˙˙˙˙˙˙˙˙˙˙ų8a‡pČáÁâÁG30Œd|ŅF2>aF2><fi›ÍæxŸČų¸ē1‘ō>GČųär7˜F"ėÄPËÁ#ų!DĨ"*™ĸ$xŸ0Œ˜q#k)ҌôCâ'!D Čų$zã˙&9 8EÁ!­žâ"""""""""""""""""""""""""$œÃˆˆˆˆˆˆˆˆ0ä#Čá´¤€T#…#Åš‡<äĖ9Ļ""""""""AŦrøJ 9øŦ* đ‰w˜Îą’œŌôĒ'Î  ‡&?ôē˙˙˙˙˙˙˙˙˙˙˙˙˙ú— ”ōS%įÎTár#”â'˜G Č979‡3GŽg7 ˛â"""""""C@â@đĐ9^Lȟ#įō|Â/3Lō3GŔčē ’0‚3EŅt]ĪHDDpŸ„‡ÄDEÄEŸx^§j3ŲĘO˛e–$`#œ‹Š‡8ærœĒ9\{?æƒqĪgã‰NaÎ9ė㟌9sĀ™Ęr đGčaÃ0Ž"āxrā`ŧGČâˆāĐ\ ƒ#įˆŲų1ĖäSäųÕųGÄc<äaP5œeÄ#™ŧÂ1˜FqĸÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü?mÂĮņčDDDDDDDDDDDDDDDDq$Ų-t^#‚ÁĻw،!ÁˆĘ‘t"FŅ%l„ލ‘˜F3ã3eŲt{0‹Ŗü§FqÖGŲ‘âAĮ›q,ē.˲čŧG3ƒ¸Ëĸá‚80G Gē.‹Äx¸CHâČáĪ ĄĄ3–ōâd‚7ĪGTc#åc'ÉķyŧžDŒŪo<fķųä] ĖD|đy—ˆæG2>G‘× âč¸7.dpĐG G#‚F´JãZĖ×ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü‚ŗ˜r9 Ŗ’r NHrN""""&qG ´""""Fâ"""""""""&D!-ÄDDDDDD†—Ž ĀÁpäpË.Ī q„gDŒ”čÆCÉN7ŸĪįķĒÍY)ŅŽ?Âđ@ŋ1B*&‹Ŗĸ.‹Æķqčâ.dxÆ~.Œd|Â.‹‘†pŧ`B8(0ކ\āp`ˆŲpn\eÁšr#†YpÁ)‚0ŒČųˆ‘ã‘R8d"á‚8d‚Ápi.!Bčē.!#™#Æ ŽfÅ#‘t^0Dr/F2GĖ"īēņC’q@‡°ūDD}.ŋ˙˙˙˙ōŋ’‡q ŽTĘÅ˙ō <7âg0âHr §ū ˙˙˙˙˙‡^"$X)ĘnO˙ƒũ¸a_ËnW˙Á˙˙˙˙˙B9mÉ?û˙đ`‡˙Đ"ë˙˙˙˙a.z:Ä|拪ŒäGČų0‹ĸčÄ]D ËĸMŅIpɌī[D"wĮÖüĩ…ãÂ$î"Ŋ]˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄDƒc‰Į8–ø˜q"ŽqÄD‚ŗ•„3šQ7˜ˆų#…<ËĸčÁd|Ūa3Á‘ķē.ÂdŒ)!‚ÉЇīæÔŠ’âEʃŲ?=“‹B ÜqÍtėđS‰')͇AsŽLq h ŽDœ[‡! ."Hq$9œH`r CŖœrNS‘ §)Čā“˜s#‡Lē.DpW“–ķ Ä^#ˆpCčÂRB:æķWču˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áEÜDE DDDDDDDDNȎGz"(–ÄÄb` "ˆ—Ęŗ5,ÎõÎŦĐĪį™v\eØ!"Yœ§)˃9NS•…AāŦ+ dõ#r\S—ƒŽ{<åA8+ rœŦ$9ĮqX]eq'4âC(r aŦäD‡w)ÄDDDDDHk¸ˆˆˆˆˆˆˆˆøu…háã¯ņˆū.DE‰oA%GĖ.F@Ė"ņ#är.‹ŒÁ‘ķ/âņ0ËŖŲ‹˛íGráÁŌœ†Xķ‘R9‘Ä=š3Aú ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄDlDDDDDDDAĄ@\ Ŋ"9ˇCųœĸejx/SAø§)ʙj A!ĸŖ?Ÿ YHŠE9DKQ&‹ÄxŧG"ė 3Œ‘ĖŽ)ŧŪo7˜EŅpäxÆGČÂ8‹Ŗ‘/ķųČų¤hŽDæT2_!ČÂ.‹(‚ĪŊ=,v´˛K‘ķŌ^1¸ˆˆáđ‰9‡ “)&8XÃÄDDGaˆ‰čDDEŒDFÄDDDCĐâ"DGch„ŠvKæâ„kg\Ō)Ņtpä„]ÍFG3.„r.âeĀüeŅt]Œ#äs7‘ã˛0f9p\šあ8^0†Ļ‚.ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙âš!Đ|!’Ô\8tüGhWôĄdx[ČBņqąˆˆÂ ˆ‹ D\DDD4&¨XB$āåY›Ī#ŽuF2˙ŧ/CųJđõØ/īŋ˙oO\;Ãß ˆˆŽ¯˙˙˙˙˙˙˙˙˙˙˙˙ë‘!õ /"8¤@ƒ†Pr*˙‘šO˙đĄkúūB9!Ä2>G˙˙Žp¨*ēúY­sƆĨ@& ņiQūƒĸĘ˙ÄDHax[XaŖ¸wˆ˙˙˙˙˙˙˙˙˙˙˙˙˙ūčėĩpDOdõ(›#n!Ç ‹\¯ĐA_˙ųãŖ’pEÁ ĸöđ˙ū*\ēņŠv\‚9 ˛āŊ—E՘ i˜‹ŖˆÆĸOųėŪa‹ EB†n4̓y†qEÔa3 šŒD|‘ō>GČņtĻ.‹Är9)„\B9‘˜FqH,­äUv uá}mcˆˆˆūŋų' ŗīO˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņāĻâ$‡ ã™ÄDDDDDDDDDDDDDI"""qÄDDDDDDDDDDDI8ˆˆˆˆĀđ„DDáąÆ`Tã1˜F3Čēŗ8ō1‘ķĖ÷Ė9'$8Ö†ųB…˙é]yŦ“ã‚%ņā‰B¨N  ÎFå9 qČŖˆˆ‰œD†HqČQÁ! Ŗˆˆˆˆˆˆˆˆˆ°b&r7Y€Í0frÎ3\f  œä|Â1›ÍÅ>Gd|‘ķȑy†]f ‘#ûœ">o†z0Iŗ~@‘§Ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙âÁHqˆˆq°Œ‘aĪÅ&HŽfėø…Ņtc#‘ČÂ/ķ¨.fŽ#Œ¸g8‹ĸėē4c0ΈöGĪ"Ÿ7gDfŽ#C!æˆÄ]Æ^=qNdˆŅGãL†Fhē3"8R8¤p ¸Î"čÆGŽ"čŧG‹ŖaGÆ^6)ŧ˜F2>o7˜F#ō8Œdq ĸá ˛ėÁ›Čųŧ“Å‘Ã$2ˁ‚āHDD†w7ãõCēäoÄ @†"""’ˆ8ˆŒ“Æ„DD\DqxˆˆˆˆˆCˆˆˆˆŒ! !CB""""#ÄôEŖˇŒŅŒŌ1Čų0Œd|žE҈ŧa#!0æs'+† ƒŽ8âC rƒîJ rœ§%9N[˜rcœsŽC@ä;’Jržē.ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á'đÚÕ&}„&|wŋø(É9Nâ""""""""Á‹ĸčē.…š‡."$N%yķqq ÄãĄ5F´u„¨Ė3ŧ0ŖáÂ"Áŧ:˙p„t† ~ŋ ߸Žģ‘3ˆˆˆĄ:Ü1ņ)Ė8™Ü1ÅÃt ˙˙˙˙˙˙˙˙˙˙˙˙˙ Bûŧ?Čw „ũ|!…¯P ĄČlsYáđ¯â#˙¸"ë‡Ø~ŋäQĮÁūøaÔ'îI˙q!‡‹Ž¤P]aĖ/X~?˙˙˙˙˙˙˙˙˙˙˙˙˙Ķģ_øcâ3_Öá¯Įų. „x¸ËÄx˜qP”p„‡Oßđ_eà  ĻÃP¸g.ĨÁ`Ž)=Â:ä|u9ķĸ.GDIgō>GÍæ"?qF"Ÿ qÖœ#ÄHIžÉķ \‹g‘ Đ[]Hŧ^AŦŽ,‡q!y¸&ANS¨\.˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â""E Hâ"""""""[ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ!Čgr#Œ¸.]ĸ†hâAģ‘šS(ĸfr#ætĒuĪæˆĶ7äĖ!p×BS–å9 2…ČQÎ91ć¯û|†Čƒ)Č+8‰ ˇ xiŽC$œ‡"E†[Úˆä#‘š!ČQĖär7"qħ— °D¨ËĸčÆo7ČqÄDˇš.fŦÄa‹ĸčē1‘ōGĖ"čöGÍæķäfŒfr0‹ĸņ.‹ĸņ.‹ĸėâ.Ž Á‘8Œā`Ās¸r82äp`ŽG2<\0GČų‹ĸņ„b.‹‡#™. %Ņp…Æ]"<]˜Ė8]—eŅv\3—Â8‚ÉpÉÂ>G G Ü:]‡ĐãX‹FˆˆhDDDDDDDDDDCB""""#ˆĐˆ‹ˆ„„DDDDDDDDGÄDD\MˆˆŗŽEHqĖädąaRXV°ŪdĮãšš\LsŲĮ?2đ¨< §+ ƒ9/8ær…O PHܡ)Čd(ärP"$œÃÂĩ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃÛ ‡ûĐŋūˆ0Ô.ËÄpŅ ŽŽdsÄDDDDDDDDF„DDDDDDˆEÃHÉB)ĖDÖ#†iW(íIč,,0Øwô ×Ĩŗ@Ö#äpֈ‰ €09T (Yu˙˙˙˙˙˙˙˙˙°Ū‚¨…˙#wáíâCaɎg!ž™,3ˇ đŧ0Oƒ°Ú ]aīÂ!Ü •.8ˆ‰˛Á&9 ?22;"/Cũ.ŋ˙˙˙˙˙˙˙˙đįĖ `ŨŠüŪb#ƂķČöSĸFyƑ>b<‹ĸG$8PÂįjŅ+ų ‘5ŧærÜ!!G!ĸ rļ⁠Į3Gđĸ>"""""""""""""#. Ė `9Čä{#Š2>GĖrčģDnA§)ʰ¨9Īäœ+1EŅt\šÃ0r#–äšnG†âP\ÎS‰‡"9}:"čÆn8”â.ˆ“IŽq"ܡ7œTD ōī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆˆˆˆˆ’DDDāĄÄDDDDDHG8ƒB""""&q†´‚7)ČČ9ÍĮŗŲĸz1˜EŲt\ˆņŒŒˆŒE҈äaeŲt\C9ķyŽÄ#ŽHYeB=‘ō9ų%ĘuAĮËĄĮ?ž" Rs9Ír ŸÎ9ā¨8įâœÁ› rœ¨=ƒ› rœÃœsÁNWr ü^…Aā„r:{8äQČļEöh x-CQē‘š!Ɏx4…áNS•Į‚œ¨8į㟋ãA°Š•ã‘xÜT ÁsŽg0įÎS–å8‘,ã‘G"Ž"HsŽ"@‘Čd"""""""""""""""""""""28 $pČ c˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ą!˜ˆˆˆˆˆˆˆˆˆˆƒDDDDD\DX! !öfaRœˇ-ÉBËHˆˆˆˆˆˆˆˆ•…#âYU“(ë‘ō8 åĀÁp5 G €Ų¯ũzŒĖ" Jq3ōšHe(ˆ‰Ųk„IŖ.ŠDtGR$菟ČųčŪHGŒ›ÍįˆüxÍÆq*ō>aF3#ƒ‘tc<Ėft]2Faĸčē4Čų†]ŒFâčē.ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…‡ŪŲāgĘā‘|DDDDDDDDEȈˆˆˆˆdo#Í ˆˆˆˆˆˆˆˆˆDõøP9ãŦOüXˆ‘Ų{˙˙˙˙˙˙kų嚇8â#ĘæW\Š9œ†wÖ˙*ąū‚"$3G8į‘8˙#rÜwH/˙˙˙˙˙ü÷ø‰ ōU­āÄ}ŗīO‹˙/#;ųÚĐh#—@˙˙˙˙ūđpš×īæC†z˙ôCŲÁ‡˛Kë_2đK+—‡˙˙˙˙Âëbņ˙2@˙A)!ĖæH” ßĖĢë˙˙˙˙øvą8įãîū7f>…c˙ÆVÃ˙˙˙ūJ$œ/ëÂ@—Ę@…Ŋa ŽûûVÃ˙˙˙øQ-ƀŠ˙đ@‡īzũT?˙˙˙&Á‰ī]†VÆaĮûđĻ?˙˙˙×ũ˙˙?˙˙˙ūĮ˙ëÃ˙˙˙˙÷ւ˙˙aY÷§˙˙˙úū˙˙ô˙˙…ūáw˙ú‡X˙˙ūŋîŒX_÷Đelg˙˙†˙—_ ũwŗl?˙˙˙˙BpáūüŽ˙˙˙úúīŪúŖ˙˙ū…ר×Ģö˙˙ØAé‡ßAKŽúīg۟˙˙‡ßßAĮ‡¯¯ ^˙˙ūũöī˙ ĪŊ?˙˙ ˙ŌēáCũ_m˙˙ũ} Čų#˙ ŋũDE—ōú‡˙˙˙ø|ŽPŗ#¯dœAÃGÜ.+ \{B$QČ(Ļ}é˙˙˙˙ W}D˜ærĮ%#…V¸Yƒ•ųČā }ÄDpįeeø_˙˙˙˙ÃÂy’ž|—ĮöC-Č.ã;N!pĪøũ[§‚d.;Gp\¸r<^#ŠGČå ω 2ˆrâāGf?˙˙˙˙˙˙˙¨xd|ėTHášGxTAw0įŗ†Lq Ž&Ar8eÅ$G0įŨ/ī¤$.ŌĐ8ĘŒ7] æ`2Šˆđe‘ÁKŦ _˙˙˙˙˙˙ŲVë"9n$58ũad@”Á÷:™X]Ëq}Ų:%DAɎ$ˇ ‰_ ™U‘ķĄF\A=HqɎ"A[Z˙˙˙˙˙˙˙˙ḉœÃ™Č#”hC*Î`~3' Jˆ˜q„"CQË îŸÃõC‰%˛#–vč„yÚX)\ž ‘ƒMȆÕ ŋ˙˙˙˙˙˙˙đ‚đ˛āa™`%DITX–ČÃ; ÃA ųŽ#ƒ0bBAĮ$LH˙.¸Ã恠ŽEŅt^÷ ‚Äā„&r“™ĘpÂE-ū!—8D;˜9ė˜ ō8(î„˙˙˙˙˙˙˙˙˙˙ūŦ§ßÍh¸r88_DnUŒ"c´A H&Öâ{0 sč— @˜ˇ—Âáú’ŨP‚š"čēP§ŒŠŧ‘ãˆē1‘ōB1§Čųĸ) ‘ŖˆôqĖ%=‘ķų„fŒg‘Čū#ä|)„]F29EۉāØ{##LÄyr]„IĮķŗ\!‚"8o@†h<ˆEËʸĀeA‘Á´ŽāĮÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū""""""""""""""""""""""""" Јˆˆˆ‰G0âA¨saNS]ȃ‘G"9 Į ģ‰Nˁ᠎dpĻķųā‡D">R"$aJĀh0Ėd|‘Ã7Č~SÆ$G"ĮēAaɎ"$ š‡ Ž""""""ˑ6‘×f"ā…Āšķ¨h‹ƒÆ"x9R#æđ†hD¯"ąG›"čÁ‘Å#…?"xA  ?„øp˙Pāĸ.ģ‡äG ąÄ gDHdCˆˆˆ‰˜q7 ÎËĸä“‚3/ĖÂ.‹Œ¸m‘ņ.3äpË8ˆē.ÁÜ肒š†0F58ŽF">Â.Œd|‘𤄧ĸ*‹­%gŪ…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ƀ•FKQ r레æh;ŽÄD[4ˆ<Â:™NŒŅtr0gˇŸĘt]ŽFĖØRps˛ņš3 äU’lg™ŅeÁ ŗv\0l6™0FŒ‘ō>GĖD|‘ķa# ¸l#ƒAHųų2r8Cs€ĻG ø\,C(A|lGÄDDaIC’râãĐâ Æ#!BâS™Vb&€AŧŲ3Ų’sųĮ<å9NHäĮ3Ų9‡8äQČŖ’rœœq!¯2܁á s9ÁHr9 ˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĨTüˆû ūĄÁ?ÁEßûCB""""ˆ†!q!™„k*3ą‚ĸ*â ÉēôđŧĄ˙˙…xKúëü7ūq ?â;ˆqÜD"NÄCb"."ã$áĒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ņû‚áäh°˙•˛_īŌ_…‚áÁ ôDã†ũ~.„_ŽĻWä#„üū)Y–~”0Ŗūžˆ<8B9 ?ũ˙‡xWÂÜ/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ßņHˇá˙FÄ˙ü„uÖ1?-@„K‹ČŖ…OũrœN?Z¨d…”čöuTU|ŅG!žÜō8‚įDĢá4¤^ûņû…˙‡æ°áb@‡ū,/]ãû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…Â!GAĸ cˆ$rDD†Wˆ‘B@‡!–9rp_&3ŧ`Ŧã1‘ķ y"č)#æˆē nS‘#ä|˙dƒ_¸yĢ„Đh aö˙‡$!ČQÁwcēÈ B$Į Ž91ă0â"C1ÄDDDDDDDDDDDDDDDDDDDDYq G"ņ°Ļ ˛čģ/&c#ÅÄ ˆŪH\„U2]ū'{?‚8ü§ŋ…_…PŒ˙˙˙˙˙˙˙˙˙˙˙˙˙“ķÁĊVZ .qÎ9øÖKŽã'4‚ÜLåÁėڛ gōԘįã‘G8ær7*QÉ9NGâčqĪÂ&rĻVĮķŽ{'Bĩ>ĨA qø§+ r¸đQDĄ…ņÎ$ ä ‰2VK ™t&9'+#•2ܡ x,8ˆˆˆˆˆˆˆˆˆˆˆˆˆĖrœDDdpË.eÁ †HGĐft\ã8ĪacøũˆˆhC-ÂÄXŒDDQt""""" ЈŒˆ:ÄD8‚""";ˆˆˆˆâ"#’qPʃ*"Ž"‘+ˆfU™!#ČÖÎ2„`ÍŽŽ!r#‘v^#äs#揑ķŧG‹†ųČņq˜Í†Yr0į‘p[‚ôD†@gÛ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øHŪüŠ:aA<"O9u.ÃßũoˆQqâ"""",!dˆHĀ ‘žF$—<ŽÃqœF‚‘ČˆF ‡›ČæuFlč>G2|ÜqE҈§Ė"čņG\Â. \Ė#€Ī ááB!‡u_Ä= ‡Ģ|-oŊX\?ð˛N‡Äb†1ÄqpĄˆC Daˆ‰&ėˆ~ąŪ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü.¤ą Ãā‘!ɏ •%xdi˙ĢÖ˙/õÆÖĸ}B…ēP‹¯ūöáa™,G…9'°‡Õ_ūŋ øW†B(ėD(øzČÜl.¯đČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū– žFá ápĸ‡ŨԂjõ˙đü$ k”žCũT'  ôņAbČڂëô(ŅŖV~ƒ!…¯ š1Ž)áđ‡ˆÂ˙ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä(áÃ#ŅeÃPŽ eŲĈ0D 9‰ˆ‘âčē0dqHų4ČāVG29‘à "$ž\ˆá ĀÎ#]EŲÄ]Ė ēSˆåG‘ėÂ.Œdxē.‹ ˆ7Ã<‚fhē.Œv{#āYŒ)ŧ˜GLöŊ„,=˙˙„ ‚"Ž˙Ģ#ˆˆ<4‡(âIÄa2? Â8‹ĸčē z#ä|‘ō>G3 ņ˜ˆņxŪGČō˜īøMBŽt9áîˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûɜ‹9ĻKR°­ Nr r܂â 0ŸžÎ9 ƝP8’Ôŧ)ÍA;"Žg)Ė98 @įöOŠr ãž rœ„ƒa ĐFâIČāãœsŽx ŅgŗA°Ęr0â"""""""""""""""#0Fš€đČāpr#ˆ\¸4—ˆâ˜#y#…#˜).4$(įČG‘Ę$â{#ūGÉķQå *2>ĨĄEâ8Œaa žüF„E†!ÄDqb"""""8ˆˆ‰â$",ō9{.˛ĀŠãō'Íä|ŲQtr4Fh§ķČ͝›=‘ķy0ËŖa ‡ˆŽEĀšBã.ČāÖ`2CrāJ hd˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ÷äŸė”ŋˆČGb"lČbŸŽĪää]GŖŒöl͑r#æpĖ.Ė z0ËÄpr9eŲq—#\Žds#ä|‘ō9‘ÃÃ9ŒŽdp[?¸z âaū<Ģ:õ1Ôü˜įDÈ BSņЇQˆŒ qcˆE¸ˆˆˆˆ†­’2^"ą„fĘ#EŲĻaœFhÁG"9‘ōD˙ŽČ܍Ė8 BaÚü/#(#™R8Â"Ž"AÁÁ¨"#ˆ˛á°Žds#ˆ`) Čá€C4Čųä8Ëŗ‘ŧŸäsđü/ˆˆŠÃÃ˙˙˙˙˙˙˙˙˙˙˙ūIČÜŧ*Ŗ’ƒÁ9NJ   û‘š‡"9N[”ä㓘äG Ö9Į?3Gr Ž"$ĮœDDDƒ#”â""""""Á * ĻÄψÆb7˜F#1ŸĖ#„]EҌÄG#GÉķqˆâ:įųyO•Œ—^˙Áˆƒˆˆˆ‰. „Ž“Ø¨ˆˆ’ÎAq#ņB Ôūq3Žr“ĐĐW˛paÉa.+ fĄø§-Ęr ˜äĮ6å9NaĪgÎS•ÂčqÎ8ÚÔŦ)ʃŽBŽ$MD„qĮ!C‰‡!G"ŽqČaÄDDDDDDDDDDDDDDDDDDD‚Īgą Ļ91Čōá¨G G‹‘#áa˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø|Ņힰ,ĘŪ‘ChLķ:OɎŠ€0]ФDķĀ,g˛>aמåÃdD…H.ä5Į ã<4ܐä܆XäQČŽIĖ8ˆˆˆˆˆˆáņh<>v¨ ĻĖUdr¸ébB8´v$Š@ģ:ƒiAqHāČ\.DqH”3IYåĄÕIÔjČlĄ ÜS•Į3˜sÁŠ 91Î9 ˜įØ[˜sŽg)Ė9 9'$9˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūđą$"čŧĖ‘žPŊ,û@ˆ°Ķ<""!†# S–æ""""""""â""""z„]xpÄD2 Q‡¸‹ ¤91Î9#‰¨1&œ0ų \3Á˜Ąc˙˙˙˙˙˙˙×*ˌâ÷Sĩ°<7.Vv)ČQ‡ŗÁ Aáa 8ŽF˙ī‚ 8DGÃūeyā8Æ@ŧ1:ĸáŠÃä0â?¯˙˙˙˙˙˙õÃ܃xÂW04ČįH†ÁƂ ĄŸđ¤G áī āˆPüČ[<.B9‡q „`ūH$“ÂÎ?˙˙˙˙˙˙ũaÉ?dŠ8œ~*%8鈈N8đūˆg’e×âķ! ØGņš §/˛@~?˙˙˙˙ūDu™ WŅ] Ė‘BáŒaS•!__ B2 üJ#N]đÄD>G˙˙˙˙÷č Œ’Ņr ؚK) °ēîū[čdp̈́0øc˙˙˙ī†=čMAáÂđ`ĩąá…™˙˙˙ëŒ.´ ß‡ûđ_˙˙˙ß [ĖPü?ž ƒČ1>đŋ˙˙˙ü2<\C ģ.ÎFŒ˜ˆų„]œGˆÆa—G#ģ.‹Ŗˆō9EҌŒĪÆ3ÆGÉȤų#ä|Žfō>b#™ˆÂ.‹Ä|‘ãŒē.Œdr.ē.‹ŗ‘„`˛”Š|d e:)ķDey!f™Ū"ˆ‡@ˆŖ°˙ w‹á˙ˆˆˆ"ās. Đ›Œd|‘üž.Ž#4uFhÆn3DDo5fī ß˙˙˙˙˙˙˙˙˙ņ rqCˆˆˆˆˆˆˆˆˆˆˆ‰ø#rāã9xA¨8įŗ@gƒaŒŅŒ˜Eãyäb.ËŖ1ĖFˆē1F"ėē.Ž §†^7‘ĖūGGŗ{¯Á^b6yčP‚‰˜hæ ؜§0æsAPzãyčG2´*‡ãYėäå9T9A\qĪÄĒ'įâ öHƒŽr ¸ú’ķĐŦ5›ŒAĮ99\Eâ įãœr\Eã“ŗŲœ¨8䜧0įöN  ƒŽg#ƒA(8į㛠r7)ĘsqĪ9‡8įŗÁPh<ŗAœ¸3”ä‡&9$DDDDDDDDDDDDDDDDDDDDDDDDeȎdp¤| Čų0FxŽds#Ša—G˛<^#ÅŅt]œt]—E⁘Čäq'‰xâã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üe͈Ž""""""à ˆˆˆˆˆˆˆ6"""""""""""" ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰X28RSŖLŲŖŲäfŽDų„]ÍÅ؈Ą#pCČÍČājŽ `Ųë aŸ0Ąá}Įâ""""""""q*Î¨‰Fąâ™i”ˆëžF™üÃ4Čų„]Gt]‘6 ĨÃHĀ ÅĀđ͝˙˙˙˙˙˙˙˙˙˙ûÂļ˜~‚û „Iß ˆB"""""""&ˆ’2%sēŅOž‘ņĘČEø~Âga¯ž/ēõÔ1Á†!Gŋ˙˙˙˙˙˙˙û‡á†?+‰ &Sč? †ázú!čŪŽÖU˙‚x~á„D~Ɏí(_ á#ØO˙˙˙˙˙˙˙˙đ„EŅÄ`Íų4GŒŸ#į‘tc?˜DB9  Ÿ"ŲUághHėŠŖē–Kįchö‹įbëxdrņõŠ˙ ĐqČwpÉá ‡!˛&špáN¯)ŅtHĘtHÉĶ2>GĪæō>z7‘úâĄBEāČĪ}×˙˙˙˙˙˙˙˙˙˙˙ü†PäC$ášâ""""""""""""""$™ BÁpŒŲã>)7Ã4”Ķ7›Í"2=’ČÜc7‹¯7˜IžÉōž% ørÂÂ^L5)L¨ÉZ1’č֌ŅÃ#ãņpLƒ5Ūbį98(\Ó9ü䂍9Ķ›ŠƒÁ+"Ws(7åLŽ[8ä¸đS–æ‹Å9NT˂P{<đaĪÆŗŽn6å9P{8ærœ§* Á §$9āĐFä‡< ĐAw"@숈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ<69‡<Æy¤]Gĩ HŧaÍä|žŒ#ˆŧz12>GO\˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đšSB""4 1xB2cÄq㈈ˆ‹6!ŦDFI؈ˆˆ`„DDDDDDDDDDDDDDDDDr@.K™)2`É ē1‘ō<]Čņčē.‹ĸėÆaˆņt{7žEŅtb/ķy$ĻG#ˆĀs´G ĐG\ C6ū .ũũ Į~8?ĄÉl5øˆˆˆˆˆˆˆˆˆˆˆˆˆˆq rWH§ŠZĘŧƒ0`™ˆ6}JĄÁOŠ(+ˆŖŧ[Č 7 xn˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņĨžøq˙ÂđpŋŦ|8b‚„Dqŗ˛ÄqˆųÁ•ÄāŦ •–LĒ}Cß Á~öˆGå$ ØP°áBĮqâY{Ž˙˙˙˙˙˙˙˙˙˙îAxvČÜÃ˙ üBČ@„v˛X”/\Š9ŸÃāŧ(T!Žø×Į_ Á(ˇ˙Ü(ŽIÁk ˙˙˙˙˙˙˙˙˙˙ūKô~1ŸÉō3Č4ČĖęŧ YĢúĒˆđ‡˙Zü Đî_¨‘DDDDD†Ûˆ‰q— ˛9EŅĀh —ˆāÁ0EÚ`2p† )EšĸFÕįTqˆžAúÁpŋPĒ^˙˙˙˙˙˙˙˙˙˙˙˙î"""""""$n"""""""""B8†GҞ.d|›Žds7˜F3ÆGÍæš/Œ#ˆÄ^17‘ã‘ŧŽgŖqvc#ä|“õüˆ˙ŋ6†9TĄ˛ô6ĨAāÜU9 Øh*eAėãžĪ9nS”A;3”äŧ” Â˛ŌZsņ¨U ‹°Ûsh^¤-&ĻĐÂf™X\ËÁ#ĄĮ8įŗŽqĪgöqɎqĪgŗAā§*‡‚œÚ•…š9:å9NSšđˇ%2AeĖ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ÃHr&áXĖŅĻį\ūhŒŅœlÉâ3Dˆ=+Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū8Јˆˆˆˆˆˆˆˆ‡‹ˆˆqäã$8cˆãB"""""""""",“ŒDDGŦÉIšƒ"xĄG#yüō/c=ķų„`Čņtb0 ō>aŽEh¸ DDDDDDD†¸˙đ¯ áÃß„;ø…_ DDDFˆˆˆˆŽ""’™23TDŗyŧÂ4ČųüūLf‚1›Ī#ˆē4Ęt{0‹ŖˆÍŪG áŽ\2Á`—˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úUīČŖ˙ëúáwčˆ8Fd2Naü/ ˆˆˆˆˆˆ‰Øŗ%×5df7‘ÁƒČͲŽˆŧa  á.|/ũo–æ”ČXđ‡ĄĒ(atD""!Äh8ˆ’˙˙˙˙˙˙˙˙˙˙˙ ÷ápÂ˙ČqÂĒĄ“ĻŋÂß„'f@ˆŪëāgtÂë 2 ëÃ˙q˙ ģų :…"ū}ÄÃÃ˙˙˙˙˙˙˙˙˙˙˙ūt´uaáB¨Y%X[āŋū$âQ\.ÅTB¯üDü2á! ŠÂ@đQg€Čāxi—æG ˛áÂ!܆w x+Ž3°öGÂDŠĸ$f‹2FKĸ„KQƒ ŋøL/á˙˙˙˙˙˙˙˙˙˙˙˙!ĮđĖ#ˆPd~ÕĘE ÉĄĪæōGͤFhL#4IŖ8üc#ņ C Ž z˙ķ@` ‡īëÄDDDDDDDDDDDã#áš\20ŽáHáŗ —ÂBŽCLq‘Å#…#ÅŲp…Ãa)#rã.\Á fĖžTx9.'Ī#O?žFj¸^˙˙˙˙˙˙˙˙˙˙˙˙˙ū"@ņ\H(â"Dq#‰ Ž""""""""""""""$ä ˇ#ƒÄŧŸ03yëđžIËrœ§-ČqÎ9œ¨3—rœ§)Ė9œĄ9PqĖåAœˇ.ŽS˜sŽ{%†ÎS’ã™Ė91ȎFæŗAāä 9NHrpC;_qÎ9 Ž@Ä†Ī'Â@đQ@Öäħ!ČIĖ8˜rNHrcœrrœˆ9܁qČ N[ČC‰Ãw xŽAw%į¨į?“ûD”#\v_ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŽ'F"'F"$Î!!â!Ą*Q™`j#ä|‚™äc<dxē.‹ĸčŧG‹ĸã.‹ĸčŧaF2>GČäqŒD|Ūb1EŅČĀC‘ō8—eÄ#äp6ŠYƒHŪG3y_ø}Ęâuđƒ ^â8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆfH§Íxftf‹ĸčÁ˜GŖŒ‘›ĪFČäo7˜EŅt]ˆųŧŽdp4€ŋ˙˙˙˙˙˙˙˙˙˙˙˙áuŦ. FÍyNˆrāÄDDDDDDDD4"""""&EŒėtr#æB.ŠˆÄ{7Â.3‚×eÂĪūÃûâ¤&įŗĀ\ŧGČâ‘ÄÂЈˆˆˆˆˆˆ2„!‘"‹C˙˙˙˙˙˙˙˙˙AöOdb"#üs@…ČŽD"˙ú˙ÂDÎaĖø@÷˜\/˙˙˙˙˙˙ūÂû \DD†ÁÉü˜ôuÁrģ īÂ˙˙˙˙˙˙‚°Ŧū@žÅCÂ!d?øü‰ü-‘lû †ÅXK˙˙˙˙˙Ęt\Ŋ".úÄaԄ4˙Í ‚đ˛€Bââå_š{Čo˙˙˙˙˙ø‰NHzĐâaÄū0ŋČŖ‘G3ˆ§‘$â;đę˙˙˙˙˙ÄÎ" bP Âõ‰7Ų Mŋī˙˙˙ōÛFAžęđ˙ī ûQM„đĢ ˙˙øelR!øë×ápŋ˙˙íGūáßûúë˙˙éßūŋ¯¸aŋ˙˙Õ~(]?đ­ë˙˙˙ŋđ˙ëë ˙˙ö¯˙ úđģ†˙˙úđœ?Â÷Ãđę˙˙ŋŽ .ˇūáŋ˙˙˙‡X]ëđŽo˙˙ũî:A}z‡ p—˙˙ÖŋĐwŊ˙Ļ˙˙­~ %ë˙_˙˙û˙Ø^Ũ˙ŋ˙˙˙_‡PÃëÂđ¸W˙˙÷á˙PŋÂūï˙˙­ÃÂîoũ(_˙˙õáÞŋ…áS˙˙úđđ—„Ãí˙˙˙~L ũT,7Ô/˙˙ūŠøŋü/„äOz˙˙˙ëÃūöĻE40Ÿ|/ëVk˙˙˙ípđ˙˙ Ēø_ūĄŋ˙˙˙ü/˙đ˙ŋ˙|,/˙˙˙Ũ˜ē=‘‚‹ĸã/Žh‹Įō>AÆ#ŒÂ.Ž#ˆēĨLĸää’U ņ â""&‘Ûĸ%‹™>Jd,ȜIĸĪ"!‰ÅW& Šd–1ŒŲ dr.Œdp¤|GxÄo#įō>GĪ"čē8‹ĸėē.f#æy#ȸ#˜6°X˛á͉gȐŽ‹/Š­˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đF‚ ŖņCˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¸’đfÔŠx* ãŸÉÁXW ƒ9Dsņˆ)ʙU•ÄÃ6‚DDDDDDG{ 0Á˙™ _ ˆˆˆŽ""""""0„DĘŦœÍČūGČųŧ‘ķģ1‘ķäi“æãL’ŒÂ$d|Ų“† Ƙd†`˙˙˙˙˙˙˙˙˙˙˙˙Ģ[ŋüoáÄDDDDDDDDDDDDCˆŅhâ=‘ō>lÍŒÂ8Ž#aG õ˙˙_…ûâ""",*˙˙˙˙˙ūė0ëũü=|.ß!ér*°ŋ žũB†˙˙˙˙˙ú‹āŒ#„`!t]Čqä|Ūa—ŠlČæGĖ#臛Čņuäų>'<ë‘ķyˆ‘ÍJ|Ūaftc1QėŅF#tc#ä|ŪGĪäxfttDžnĘti‘ķDg;$DB5Å:đëÜ8^â"""""""""""""""""""""""""""""""""""""""!‘ÃLŽdpPGĖ ē42$"DgvÂ1šØūŋ˙˙˙˙˙˙—Đ@‡ ”%ܧ%dq Žf‘ķy‰L#Lō/‰]pÂzĄd-¸DAÄíhŠ|ę‰U#´#Æd1Œ›Čų?›Íį‘Œ›Œd|Äaf2>GČņt]ˆų.Ž"čÁ›Čų‹ŒšĀØ …ÁLŽfƒ#Į+$vEĐ|?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũá„īDDö""#Ž"""""""""""""""0„D\ʤc=ãˆÆGČæ`Œ#ˆöGĖ"čÆG͙.Dxē. `Č\Á˜Ž Dp/ęĮŋ†¸áüDDDDXB""""""Jâ6É.BҤ^)Ņt]Čų„b.‹Ŗ‘0ĖFqČų#äs0Î##ä|‘ķē1‘âčāÎ ē8Dq Æt\LH5˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đė)n+đĄ­ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĐ(ėÍEŅėĸčē.‹‘„qF ŪGČņvb3uę|/ åYņŽƒūîÄDDDDDDDD\/˙˙˙˙˙˙ô /ßō\{ ū°¸oę? axDH„Iåo˙ŋ¯˙˙˙˙˙˙˙î##äaČūBŅÅī™ Ŧ‚. ,ëîאkDDDds#á•!–嚐n䇑Ãh¸Ë‘R8 „E—ÃA‹ÄppA‘ō9‘ķŗ#æķâ.Ž"ņčÂ/r7#äx¸ËÄxšÞŅ!ūPĄŖø}˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDDDDDDDDDDDDDDDDDDDDDDDDLâC(q x)AE“đFå9!Î9Į=kĄĮ$äˆ+Ģf2|Ņ•]oųiŠĘ &0ú•…qėūr r¸ūJ‡ŗŽqČ8äėã™ĘÂø’ rœĒƒYĮ=ž ƒŽx-Í9XS•…9Pg)Ë üS˜sÁNS•2G8į9ėöh?ž Š\{0‚‹še?Įs’NtåAĮ>Ĩ9\'CY?%Ąn[ŽaÉ9rærĘsqÎ9sŽIȃœrcœs9rÜL9Į!°rcqČ5BŽC-Ė91ČX+ÄHˆ¯äõ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ô!ÄDDDDb"""""#ˆˆˆˆˆˆˆˆŽ""",!ЈˆˆãЈˆˆˆˆˆˆˆˆˆˆą0ņ&31჎GČų.fˆĶ#Å҈äGŽ#Hē9ō>G2>G G2aEã7›Čų#æķš ~’˙øq'#0°‰Ņ"\oŅDDDDDDDDDDDDDE“"[G˙˙˙˙˙˙˙˙`Ã$Ģæ_‰īZ…‰Į÷C„ƒhp…Ã/øC†…Ä.¯AP"xõ˙˙˙˙˙˙øZ:ŒÅE‘$fĄuđ˙Á_‡ ĄkÃÄD†4×“”å9P.!—pÔ#™âÂáŽa" cG pĶ0‹Ä|‘ČšĖ# ¸CÆG‹ĸņ1‘Ä.ˌ¸„qHņq‚˜q „uĪū§bųŌ„™ƒ*‡ų9“ˆ\Œ"āA)€Î\eÄ#ŠGF"čē.‹ĸä`9‚#™ČáHāl ĸ8‘‘ÃÄ#‘r ŽEÁ¤ŧG ‹Ũv&ĸ ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙īDAÎ=ãÄDDDDDF1ÄFGŅ“Æâ""""""""""D™DĩĪ'Ɍëâčē.‹ŗŲ#äfb0ŒŅt\ˆá‚āfᐠäp.„rŽSŽ@Å8dé­PB0„`¸@• ‡ø\q„Bâ7ÄP‹ŖÄ`Čų0‹ĸčŧGČų¸ē.‹ŖŧÂ.‹ĸėē.‹ĸėē/ō8¤s#ĀĖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙äQɏč,pŋ\DDDDDDDDDDDDDDDDOįŖąS;Œō.ŒfĖˆų#ætpä|‘ķöaEŅq˜2>GĖ"ņ„` ‘GUëR7 ũ‹aÄDDDDDDDDDDDDDD"ƒ_˙˙˙˙˙ürNS년>ô¸ƒūäG "ˆáz ˙ë_˙˙˙˙˙üčˆR8ĸõæ¨_ũũøˆˆ‹.ˆsšG‚ ŽDs#Åâ<\Œ0EĐ"ž\2Á ‡ Đ9ÁQČāîG4Apg-ÉEŗŽBÁÜ28xgō>G3„]œˆų!įķČĄEҤ{'ÍäxņQ#ķģŋú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙öC 8â"BŽDqÉ$DDDDDDDDDDDDDDDDDDDDD†w"IĖ9ā§4å9ŦđT ™PqĪBĻh4ã™ĘƒŽIĘsg-aĒ8gâŧČÉp˛ AČQČ8įĐBŽh:ŗŽgWG3–äAɎ$Į ærPVåaxV㓂Ckr7#sqČ8ä Üx ŽåŅp\¸.\3Dpp<āz#‚‚8ƒPD$åÁĮ8įœåáPqĖåq1Î9œ‰naÎ9œ§$9;8æsB0ŽG‘ŠŠĸ žd,ē˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙û.ÄDDDDDDDDDDDDDDDDDDDH’5Â"$W#!Œĩä|žgŽdpÁp…Ã9qņp ŽeŅt]`5ˆæGČųŗ7žŒ"čöaF0fķ#˜Sb/Æ#ŧŸ#ÅŅĨđĄfÃâ""wč됰ÁEÄ#† ƒIq—">G"ņ/Å#‘t]—GČá°¸#Åà 6Áˆˆˆˆˆˆˆˆˆˆˆˆˆ˙˙˙˙˙˙˙˙áÂÄFG‘ 0wŽ@Ņɸ6äxģ. á´pđxˆˆˆ‰×#3Ē3EŅ DŒß˙˙˙˙™æÄü(DQÎ>Ä&?˙ø`ƒ…øĖ9Ú ˙˙Ä|üC<á‡đžŧ>ūˇõŋ¯ū˙×˙˙˙˙˙˙˙˙˙…‡˙˙ á˙…–¨‹üx˙˙˙ü/‡…ūMĪ˙ˆü/‡…ūø_ á˙˙ÂÃ˙˙…ū˙˙đ°Âđ°Ã˙˙˙ ‡á0ū0ƒđ…‡ū_˙˙Âø˙˙ūáC˙˙˙˙ū˙˙˙˙˙+ŽđH{ ūb €¸”<ČtZS‹dÕ˙‰f™‚ȓ"SLLƒÃ˙˙4g„ËN äq „âCrĶ87. ˙˙ûųi '0įá…"#˙˙+šŧÁŦrNaČeAT…ąQ6b$s˙˙ü Â^~ ãP˛ĸ˙ņŽLÊo8ē˙˙÷!đŸŠgw˙ūW9 Ë5$GČä\ÅČÂ.ËŊ- aú…ˆˆˆˆöØ,d€ĘDn˙˙ü)ōÉAĮ!G‡ÎʂĒˆ`yN2Đ_|ȓ!‹a‘FAAX“.75#%„„‚ƒuO˙˙˙ā‡ō(ä0ãôB;DpÎĄ€ˆĖ”„]ÂÁ%č)Z((‰NAwîã @  —˙˙˙˙˙÷Ņo˜đA†@Ä~w1dG¯DœÃÁŽōlP˛\°B"(ėˇĶ˜9ŧîÃĄ)ŅÚp˛7Ɏe;ÉqŽë˙˙˙˙˙˙˙ų I| ÁPĖ„ōJ‰|˙‘Ŧž8Žˆī3°ˆ(ūÜBâS…Š#q@ƒ-ÖDÎÜgv0‡đB"$G$91ÄDD#ėŽ Vb#ƒ‘Ã4Â/ã]˜Čūy2>a—F2>§ŒŸBę­ˆH„vã„á“ z—ŽËD˙˙˙˙˙˙˙˙˙˙˙˙ xĮ ]ÄÐÐkŠ8‰ Øâ ˆˆˆˆˆˆˆˆˆˆˆˆ‰n[ĖQŧōSy1˜F54ÂyˆÖGÍæōB"YŲ"‘¸Á ÕÉ;…ˆ/‘G Ņ DqŲ€R#…6 ĻĀü¸r<\!xŽd|Â.!‚#™9xŽ82čē.0gō>aČų¸ē.Œd|ĀBčāĖd|Â1˜F3 â/NS”拚n\ÉAĮ8į…‚ ãŧ@ˆ"J8䠘äāÉA嚈! #Í‹""""""$œDDDDHgÃBŽn=œrcœsÁNB9‡ Ÿ#ņFō>yEãĄœ‚fhF™č›29ĄôvWY_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÔIgx °\ƒ"""&pˆˆŗ§ˆˆˆˆˆŒ!ˆˆˆˆ‹ÄDDC4!ĸXë“Ab$ˆĘx„F#1 ­”âčÁGq ҰÖ#†Q ‘ĖŽ….M´ūGÍæáũōO¤!Ņ”īė.? "tĸ!1§ ‹0€¤¸B!EÍEŅėĢķ×FhÆaĸ@§ō>6#‘ã€x+‘ĀņK†H,˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûĨP ¸†ƒFõÔ!h>đ"""(Xˆˆˆˆˆˆ3ÄD1’āÁ/¤¸uD¨)Ų‰o%Ņt{0ĖŅtufČæ`2ø|,Šš –‚‘ ˙ŊÖ ž´ Ä( ûOˆqKƒˆ×˙˙˙˙˙˙˙˙˙˙˙ëÉŅË+2›Â">9s: ~ų(|ˆå:‚ŅPö‡ȃá`ˆqėápáÂÄ(OX øÂHG˙ↄr`yqķ}“"2ļjT#ąė!ÕG P ‡…˙˙˙˙˙˙˙˙˙˙˙˙ũĘO†ø/[7××∃¨_žũ‚Œ’‰h˛pP*-ĘpDT™ĮĐ/†C1åĀĖRâĖŽd|‘Ä/ō>G#†Yv\1 ČäĂaNChr-Čä`S ¸r>G ‡ģ4ĪæˆŧRŸ%Ô#ĸ]yXAÁ ū7⠃˜J”‰˛bĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙X‰ÉČdäGCˆˆˆˆˆˆˆˆˆˆˆˆŒ¸d‘€r9‘ō>GÍä|&`ČųO4>FéRāˆQÃänR#§Dn× °ģ„Lq x)"C@är n@â·!´å9+3•(ä4Į"Žg#q'‚DDDDDDDDE—Á`¸Bã.Īgâė1Æz0ŗ (ō.ŗyĸ4šD~3DĄnKūƒaaĸēģ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ʰ¤U™ĸČq-‰[%b!$LĀ‘q<„"HʀâæGe$@ķĢ ‘‹Ŗ€šė¨ˆŅ˜D Í"čē3Œ2ž.˂Ė€<2ˁ´3—,Ü{?›ÁO0Täz ä¸ Âūņ ŗüq’ŠÃĄ¸B"#ˆ”B QHČ:#4q˜ÍÅã*2>xCē1‘ÁČâČöGĖ3€ Ė ˜EĀ‚8,’āx9 ÃÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú×ūģ˙WÂûÃ~˙°ņDhD&"'pЈŽD ŧ$€¤s ã¤U™ŗWÎ9ü–Į‚¸ü]eqü•ÆķÁ ķ)ņøĸ¨T r 丁ūØ_˙õ‚Ō˙˙… ĩøa°A×QqÃąÄDCˆˆ°ÄCˆˆ27Bâ"  \—ĤŠL‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūŋ_“ļ‚īákÂX`ĖT˙˙ũš‡Â°Â đ¸ü-'ˆ_‚ļ*đ‡‡Â¨o˙🨎  – Ô< —˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū\…(aÁ™Ę…˙ŨÔ/˙ßåedā˙ČTœ<„'†ĖK‘ÍF3xA˜E،˜”ßGââȸgU„Ãü!Â!G§Øø‡ĐÁ‘đŽ9Ã8xS•sPž8įĶ* Lŧ0į˛S#r ĐIČ3øˆˆˆˆˆˆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÃÂD=Ō„+˙†äŖ ¸Â!ß˙b"g \râ"4""DCˆˆhÄ& ‰™!‘6ft]Œ"čÄq˜d|ūa"GĖF“ĮS:ŗ<ĪF™7g >‘ŧ?õü.Ŋ˙¤"+á˙ š‡<{üŪ˙ÄDDF„DE„"""0„qÄD\‰dm”™†Eƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü Vü0ģ˙ŽŋÚáGđŋ,rF=~!Ė —đŋ˙ņqū܈+_đ‚„áü"(áTpˇ˙Tŗ†ËĨúŦ(˙áa˙õÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ bSĒė*G‘/F•Vw;JDē†uKøbgDIpU CDÁ›H,‚Š dpÍûŧ?ūũ…ū""""""""" ÁČāYˆ‹0Fˆô]0§ķČëÃ0ŽˆâDn""#&9‚Mæ`!~đĄø_Â˙ī_˙˙˙˙˙˙˙˙˙˙˙˙˙ųîC \ä(äĮāæä¸ˆˆˆˆˆˆˆ‰Ë˜"ėģ.0§ėM28f‘Á^˛|=a˙a‘ĖÂ.2čŧ `Čų#ÅŅt^ŗ¤zũđūáūŦū™°¨'ä_< œĐS•˛H. †‚ ô*b"$H&9 ŅČŖœrÉA@ä5܁á•dĄÄDDƒCˆˆˆˆ‰'ĄÄH0;0‡„Î"čÍ5aMäx÷5 ô„DGaŒÖžũx\/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…†8aˆˆŽ"""Čf !co8ŅĖIZ$4a˜hüPC~.f Ŧ-Ęrø˜ÃŲė ÃP§+ P¤‚œˇ* ŽqĖ ÖqĪ9Nk4sŽ{$ä‡8įã™Ęr ˜ær đT 91Č5šãÃ‰ÃLqŽ"CLpĖzōã.Ž34ō“ĪGX>-AģŠqÄ`†ˆŽ"""8ˆˆˆÁˆˆˆˆˆˆˆˆÁˆˆˆˆˆˆ‰80G ĸāĒJ"@7. ˆ‘t^1EŅx‘ČÆG“æãŒÆGķ.3ˌ¸Ë´Hā˙˙˙˙˙˙˙˙˙˙˙˙˙øaßņ ūS蹲„YZv"BA')(ˆĐˆƒB Ņ.ŒâL/™üĀ fhē1‘ō>`Œ2ņ #ÁM\Há’(P¸W—-ČeŽLuõ °˙ņÂãōnCŽEŪė|>0‡Ą$ˆ‘EHĄ!"čh8į㞠røđaĖåšpx‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷| ÂūDrœ†$āņô# Âú˛ëøs ˜PÂ[5ĸâ@„†Ŗ v˛čēĄ‡Ão (‰‡0â°ŋ x8ã nm’ ḐÁėē8y&ˇˆˆˆâ$#‘;˙˙˙˙˙˙˙˙˙˙˙˙û <0‘TFhī<"Ká(…ōC‰ÃÈČgqg„C4pŒfņČ#<‰ÂņxŽÄph.Ņŗ„b#™ŒŅp0\2X! Žá34]˜‘ķŅNĖgĸ>GĖE:Í3y0‹ĸčéâ#âS‚.ü1#ƒ#ō ‘ƒwĐærŽDÉá<4 ”pĄ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ļ8ˆˆˆˆˆÖDDDDDDDDD‚î""""3†28 Ļt]Eâ>a˜Čņtg¤c4F3ÆAä|"#ˆ q"qUâ Ī#(R!ąÄL9ħÄHã’!ž Iųė‚ äœˇG"á0áy02¸Đs’ƒA¸Đh'‚qĪgŗAœ¸3•ÄÃ?žĪ˛v]˜ ƒA5ˆä\Čāx!#är1EŅvc?‘âņ1`G `ĻÃ`B">aEŅÅ Ūˆˆä09C ”ėā4d|!#29¸e‘Á >˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ†"""""""""""'˛ĸÄFˆFb""""""$O4D ĖÎæÎˆē(EãČē.‹ÆĖ‘Ä8‹Ä|Žfķē0 "čē83ų՗ˆųäqFhˆDĸ8gŖá“‘ȸˆdr Î""""$n2čēA›ČāPG d"@„ ÄdŒŪy‚ˆ\8|pâ"5Јˆˆˆˆˆˆˆˆ2Nˆˆˆˆˆˆˆˆ‰ Žã+?‘Ñ`āÔo#Šx3šÃ ËÄ|ŽEĀđ8. ÅÃp<HáA˙˙˙˙˙˙˙˙đ¸˙čxˆˆd üÔ…ȐÜEŅtiÂ+‰Ų<Ūo7.ˆ@ˆæG"áČā{ūĐ_°ˆwđDps"P0EĀÁ LîŧDDbAYČmĐú•AŌ™PLsÁ‡<Â+/˙˙˙˙˙˙˙˙üĢ+ę>0ˆ8ä[&rOHlƒR CqÎ>Č5Ž$ a¸ŒáĻäAâ""0˙ÃÃ˙\EĻ] â"ÄDĐĄDƒŽAĮ!öNSš˙˙˙˙˙˙˙ …xX˜q!Ę|āĄĘœ§ †ŽHÄDM  x^&áxt ėöqÎ8Đ8ŒĮ†$Ģ…‡˙˙˙˙˙˙ūBq–‚āąlfđ_2 E|H˙ˆd|ÅØâúšQ"jĖŖ˙˙˙˙˙˙øxˆ3|>ħ ˛ņÚpd„$X?đú…0āˆāäsú+ędpĘ;ΆT9Ô¸_˙˙˙˙˙´ ģ˜q‘ VX‰Ô8‘†aãCđÂAqq-ČGø†đĘé˙˙˙˙ąŗŽ"Sˆw˙‰83ęá˙˙˙ƒ(ÛYn¨!pUøņ '\˜÷Â˙˙˙˙ÄMBWø\>6‡˙˙Âô˙ ˙˙˙ū…đŋīđ˙˙úæE—‡ūū‚Â˙˙˙_ ‡‡÷ßø^˙˙ü{ øĐx~˙˙˙áxØ_Â˙˙ëô†Â…á˙˙ø}‡…ô×Â˙˙īįa†ž8x˙˙˙…ū˙đŒ‹Į˙˙…áCāŸ\8pē#p˙˙˙aåšĄEŪ†žšn Á /ÂK ˙˙ü,ˇ( Œ¸f áüËÎB<īŧ?ED†ÁĂ9ܯāœdĐ&˙˙˙üˇ ŗšĀÚÃ∪‡ đü đ‰PŽũ ¤Hs?˙˙˙˙øE,Bšpĸ%R4Âįk&ar*ˆ‹ÂđÁ%Ŋ'R°đÎÆÜIŽ Đ3dš˙˙˙˙ũôÃY×ė,N9Į ‘0§-č‡ãÉqLƒ?~d¸0Ką$€šˆ˙˙˙ūÃ+<¤,.h/"øk‰l¯Â‘Ë%Á/„ˆß]˙˙˙˙˙†HxAÖW.LŅuŸÁHŖüŽ‘XP‚ Gä;ü†V„!KĀšnPɂ;Ėĸø˙˙˙˙˙˙úW\$áđë |k@“0’CÂō&$Jpøĸ,­‰ås‚‚?‚"āžųđPŦB˙˙˙˙˙˙˙ũģ —ēæ `’‚áBȎHqePԅA ēDyr$ ቞ ¤(Ⴀ,+ :$<ˆŨČßæJabSŠ@Ød`Ą†„XB!Ą!Áf „ ƒ#äᕇ˙˙˙˙˙˙˙˙×áÄãĐ, ŖŒ8tÁ‰+„˜y‡%CޤrOa0á„Aä@‘}øXCú pA‘€ĀĐ‰ÕˆYß°f¨1$ĄƒÎ9,+Ž? ˙˙˙˙˙˙˙˙đáü˜ō.ÎĘĒáHQ䚐ŖĘ Ą„ˆqøX_øƒ@ƒ ‚åâ#‡Â̊"AÎÅŗl &¤IÅDN)%™́|ƒänDE_÷ BĨ˙˙˙˙˙˙˙˙˙˙ôԈā‚&;^B‚ķ#ÄpÖ#†2œ!ÚČĄ% N2 Ę[Ņ˜z˙Ō/ """AĄĘ NC7FËÆō>G"á‚9eŅt]˜Ž3ah3qt]EŅ€åÃ,˜EҌŪxÂ.Œ`ˆrœˆäFŅ›2(AMåiāeĐpAŠ‚rb`č8>#dā/ūD Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ C!8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ĮDDDDDDHÜDDeà A!Ëq!—…qėC!႞„]ōđë\*Ž!úŽa,Öŧ+ÉŲĮ< ž%ÄĮ! 2pHq5Í˛ CĐ9 9r‚‡"APq)ȸˆ‰N""""@ŧä Č.⁠.2ņĢ#™øéT(XA‘Ŋ.A˙|0Ö>˙˙˙˙˙˙˙˙˙˙˙˙˙˙õÄG†!”DDÍdG‹Æ‘.†3Vb0ČDtDˆĄGŒ›‹‘„\ˆųÍ">G ‡#ĀĘ#ÅȎPā.åÁ ˛á †Ø Åâ9˜29Hf"á Ŗ°r8l.‹‡‚ lĪ,čžŦ‘’΍^ø_pãÔF"GqÄDr6 ”ņŽ).+a‚[Žæ ÔjŒF¸—E §tÄD˛>yŗÁÎ‚á ‘R9›Čų4ˆņxŽb0† †Hj—° ¸e„ EŲqō‹s.Ž.{#™¸Į‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙߆[,ũaˆAˇcĸ7kˆ†VÆ!DnˆŽ"B#$ėH `†â`Čy#æÃaėÄG2pd/Ã#†Âņ#ä|.2čē.‹ …øK ãČ2‚˙‚PFRJ@–åSãņ‡ĩøˆša0`dQâ ˆ‹6ˆDJ|Ã=•fDˆ‰3œGĪ#8‘Ė՛"ņĀšq⛋ĸäGŒd|ŽF2<]ޏe‘ÁH?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ŧ,,4XŒrÜüŌȅå@Ģ‚+Ã;53°=Cč„xPĐ_‡Į ‹Œ&ˆˆˆ†„C,H!Ј‰ŖË(ū|hˇx˙ËɁÂëčëÁ0@đ°A „$B> ā¸%¨UÃ[ē‡×…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙|1ī!Į !Õ~î-o !˙ž@ƒä8ás`XMŽ[‚ø\D|õ˙á á˜EҌEÖz#™† G‘âčē.F$ä{0‚)„^#ÅŲzĖŅtfŒd|ŲÄ]Čâp…Ųt]f#a‹ŦžĖD|ŽEŅ€.ƒ#ŠGē/ Čų.‹ĸčē.GÁˁˆŖ˛āÖG BŽ ÍáPGEFŅψGķ+Qĸœ0‚Ąđ‰˜É˜0ŽŋĢŧ/á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…8â""$G!´8͈¸g3F2>GūD(úÇø_ëák˙ÃäÎsõ•Š2“ˆä`E•\āfP] Ų.'ō#•„‡<å9å9NaÎ91Î9!ܧ%Ás9PLsÁNTĖåA.3ãœq$å9 A\x Ö8‰ ŅÄDDDDHŖ‰'Dp<B“Į? ūG8Fš™Ŗđœ9î˛B˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙auB#Œ!f,!DF„4"'ÁqPhˆʃ!ÄC0Æ|)ä^#ä|Â.‹Ŗ°Ä^#æ# ē.‹† G#†Âāmƒ.P$xSĸ hŒŅšÍÅĮ%Öëžž?†¤Ÿ Ãã%Q„DDDDCIܡGHؚŖ°Â.‹Ŗ]EҌÄaĖFt\Œ"ņˆÂ.Ž Ā4Žƒs¸@˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đCz ˙p\kŌ ‡ÁŽā‚Zˆâ ! ˆˆ†DD\DDX Ę.MFyņ1*"+#y„^#ÅŅx˜fē0EŅÄ\ˆųŧŪGŒŅÆc#ä„c#æĖƒČæjÍæˆĀ0GŒ G ’ čˆ>aëú^ ¸^B˙Ž ŋÚÂđÆ!‡ ˆˆˆŽ"".""4""!ÄDDC'ĸĄ“™0Œd|ؘEŅt`Čų#æc0‹˛ėē.!†˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ô ƒZ“)˙߅“„MGŠ…ģá‹ØŅŦ_āŋøpĄūųP;ä4ž8â"!ÄDDAÄDDXawK iJvc!õ Hŧ… ō_ÃÂ÷ūŧS…ôHp_ü/UÖ@e…Ž?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņ`¤pČƒ#†°R8kŲpäp<@‡™ÆĖŽEŅt]—F5ĸGáϧō{:ØA ú‡˙Ô&˙ ī‡rFGČų#’o_Ŧ.„IŽCLq "C@į㈉ÄDDDDD‚8ˆˆˆˆˆj`A . ž§ŒÃcÔ8~áø~8páo“œ "á ‚åé %ØaķFc#äpÆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙b"""""""""А<4Dy ƒĻyEÖHDŒŸ7’č?˙˙Ãû.‹‘ )P<,¤Xay €Yraļ8ˆˆˆˆˆˆˆˆČáƒĐ\9‹ˆn.FR80G‹ÁO#5å:øGKøˆ BC-ČžDƒCĪĄ‹áŸÂf28k—ø˙˙˙˙˙˙˙˙˙˙˙äQĪÄK!ŖÎ9ėđKŠƒA¨z‚œŧ0ä¸ÎT˄ §*B ã›ā㟌9 sAxaÎ9Į'‚œĸ9üđS”åAāŧ+‰ų¸™Î9Ã:r šnU å Ž6ĖItfĘHÁbA“æ‘ŗ?’3\o<Í Ø0G#Ņr#Åâ>G¸„pr|Ž)ČņŒ˜EÆb.Ëĸčģ0dr.ē.‹Äs#‡.ÄG`m—ĀŦĀ,Ä.Fgŗ˙g€đP^Âķb"Âq Ž""" ˆˆâ"""""""8â"Ɏ"!ˆŒ,q‚D8´â8ˆhXB",MŅ`„DDDDDDĐÄĨÄ*ːĘC<‹ŗÆa˜˜eâ9‚.ˌÆG‹Äxē8¸†r8¤p,/@„ƒw‚œ¸q!‚ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úĐDQɎ?˙ãú‡…’˙áė~ˆ¸ˆˆhDAĄP†Ė`™ƒ“ŗ—.eaXHsŽx$9( ¤94惎&q ãœsŽqĖåA ãœq Ļ9â# ú 7æ;īķ ×ŧ?MŽ ¸đÂûÃ\"29‘ō>GČų.Ëĸā@X^."",! qÎs)Í"CŦ g8‰w-Ęr“š9Į8į㞠į¸˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũú†ˆ3}t×ÉúúđáŌ‡_ õû‰!ÄDDDD|3 ūHsŽps ‚ÁÚ|Ā3Œe„DDDpŋ ŪI#ãɎ Čü…ũáđđ¯ūžĐdq X㉠ü‰āŌ$Į‰. ˛ FSŗ€`Ŋ‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙‡Ŧ ˙!Ü~wNDLœöL|†§(Bí˙˙÷ŧ?ˆä;ų AĮĨ™#ƒ (Ī ˆˆ‰N"" ¸)‘ČŧG ‚(tc#™‹ H!üōcĪ…#–z#ä|ÚJBYA~A˙ë¯ $5\‚đ„Hš!Í*1ÎAnB8nü/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üá–ä6(!8ˆˆˆˆˆˆˆˆˆˆØá‘ĀđĨÂfPŪG ĨFF ų Į!–8|НČĮ:āÄDˇá낁ÄDāÚäH.æ‚Ø4Ž""""""„q%8ŒGŽpeȏˆđ)2‚"¤(lĄšÖ<‰‡á8\ ĸ(B…˙˙˙˙˙˙˙˙˙ú,€ƒ5 ™ ČeNŖ9pA@g ˜3ŽzüŸ Hq‡Ô­ ƒŽ~*ea.4…aXAŦq*‡ŗ"' ĘC=“(,ląR|W‰ÁP{8g‚V&r ÎaÎ9(%…9NVÎ9?8į‚œŽ4Ęrœ¸&9ėŸå9Nk%CAœÃ‘ “ˆˆˆˆˆˆˆˆ‰ÄDDD`äG xŽAw ĪÁāž= B@ķK .á‡oŠ\Įâ"""""â"%8…EîCPrn@¸ņ !ŪąÄDEÄDDAÄDDDDDDDq yR2@.\4‰<\9ĖFō>aEŅ€m#āŌG#Œē0 „p5’<]—`˙˙˙˙˙˙˙˙˙˙˙˙˙ūė<,XäG0˙Ä֊ē/SÁ‡ ģŽĖūžhhâ1‘ķÄHFdHĀšp…Ā–_˙˙˙˙˙˙˙˙÷‰BáÍAbA@â @™pkäq"A¨,“‰ ŧ6Ă(î2¯ ˆäČ2ÎFō>GČų#ÅŅq—"9‘ȸr9‘×@0ŧƒČ(2ŊY¸ŧGČá˛AÄHl¤—â" öI"Br9ˆˆÖŒb""",ˆˆ‰ØŪjÉōc4EFy"čô`)° ģ.ģ.Œ1‘‘ȸ7.ģ.ˌ¸!tc0˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷Ã4–b"'ãL1!š91Ätc#ä|ÕáÕ{ČQĪ,‰Ô qpžBĮDDDy.ˁxC4´ îdG¯˙˙˙˙¯-Ā€đj#ƒå".Ge(a đĘU ¸Aųn[ķ`x7ÄĐ3FØŠ˜NÃ˙˙˙ũr(øP„Ip<ōĨ‘Áņô8y61‘ã€`¸|OÅī_˙˙˙ú_†"S†V#ė0ˇÂAB&č¸K?˙˙îū‡đŊ˙˙ũū˙‡ú˙˙ë UÂß}Ã˙˙\/×˙ž˙˙x¸v°ĩU˙˙˙ ŧ?Ü?˙˙ūēá…˙˙ĩá/‡šøo˙˙ū¤l|/pžÔ?˙ũ:°‹rĢ;ŅNámađđƒ œ¤/P˙˙˙ôü?äAɎ!Â21nø\.#áę˙˙ūÔ"Y_šAÂ˙ é[‡?˙˙˙˙ëōšk…Âõ÷ü ūÃũ˙˙˙ž ü(aŋXZ΋Îԑ&Šxö>Pė?÷‡˙˙˙˙˙ü¸l c†G €8#‘pBá–G‹Œ¸DpÉ#y°s ēAŸČų0‹ÁLfˆŧaÍŒÂ3f3ē.‹Ŗ‘.‹ˆaĪD|ņķČņ›8‹¤0ŗyķZ…DŲËņ@„DDDDDDDDDDDDDDDDDDDDDDDDDH5Aråš+'9Pd…PđVÅ9Nh.'Ęüō;-üˇKÂ˙˙˙˙˙˙˙˙û ×G xm8‘ DDDDDDDDDDDDD29’â2<`Œd|Ė#†c#äqLFō>hŽ#Ų8‹Ŗ8žEŅČŪ`eŲt]F0™ÄžTY4$"4Ęŧ¤F‘Ô:åJ(gDJ#LŖHֈÚ!y>GxÕ3ų8…ãfGČņxČų1ķŧyĪ#ŲNĖȐ3¸ē/ōB1ŒëČÆ?‘ã„c6gĸ8k—`nG¸„|Üc?˜F2AM3qÆfĖgTiá˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øˆâq‡ˆˆˆˆˆÂˆˆˆˆî!Ą„"vg†!ä|ž3F™=š#ŲŧŪO‘ķ1GļG°Õ#Åà ?°HB  0ø~"""""""|ÄLŗ ˆÍDŒŅĪG‘ 9Ģ!ä|f28`ģ.‹‚åŅt`2LŽ˙˙˙˙˙˙˙˙˙˙˙ųŨdV†Eē€\;„tO ž-%ለˆˆˆˆˆˆ•2Éĸ=˜EҌ æ™äPŠtHŒŅtqF2>GČų¸öGĖD|ôa‡ėgd"7â°¸cũÃa>´ˆŪ"""#B""""""""".˙˙˙˙˙˙ûá „/xa~zá¨wã‚PëŠĶÃņÂá0ū°ĻUl˙˙˙˙˙˙üâÉ>GɈâ.‚!Ė"ââčŘ#ȐäĮ Ū jÍįTqˆĸĖŅJD#ŋDK;ŒŽH22$fō>hŒŅt]Gt{$#Ųäc#ä~)Ė"čâ8fšNĄnŠ :2 DJC8XˆˆˆˆˆˆˆˆŽ"""""""""""""""""""""""""!ÄDD3`¸r9˜f#™ˆÂ=F3ē1‘ķČēAžEŅČ GÍæ‘#Æ2>w¯ˆ@œ,?˙˙˙˙˙˙˙˙˙ū]eY ¸"Ų8%d ãŅÄeA œ ŦãœsŽqɎx!žŽS‘Á'-Ė9Į'9N\Ęrœ¨!ÜŦ)Í9NS”ä‡8įŗŲĘrÜŦ+ re9æķŽIĘrœ¸!ŠG"Lr  đC$6ÜDDDDDDDDDDDDDDDDfŦĀËŖ#™0Ž#ˆŧGČæGŒIEŅė‘ĖŪGÍį‘Œ‘ō>aČų‹ĸäGĪ.‚ÖÉpâ8ˆ†ˆ‹ˆˆˆ˛(čDCB"""""""",! ŒáŒb""I‚ˆ†Îį–å\k&d‡9°ŊL‚đ¨<œô+ ƒÁ ȜqÉŲ…đˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ĀÄå9PqÎ9øÚ”åC1‘Ėđ†t]—EŅx‘Ėō8Ëĸņ0‹ŖŲČų„]Ä^#ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū PŖÔ'„Ls8a b/ˆˆ°„DBv§(§FhÆ™1žF3×#¸ËÆpÉ‚8dYÃX0ēUŨBß Ã ×Â˙Ã\DDDDE„""v`0wĸ%LdGÍæō>GĪä|ŪaFqü‘ķĒ.‹Ŗ„ap‡˛9‘Ál ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø|"#Ŋ-Íy'"Žq_øtCäAđÖĄ}Ãđž5ˆˆˆˆˆˆˆˆˆˆąˆ"œG">o0Œd|‘ķĶ#æÄc7‘ōGÍÆ3ͲĢä aCôƒ ÃđŊIĮņˆá (aDF1! Vb"""R#ˆÆb7ŸĪ"„fĘxņ’€§‚ÃA €Ë Đ9ˇ4rpW r ãŸÆãžÎ9Į'˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū …ü?áč|$Dˆ"(ų'ÂqÄDîaɚ*3§"_;/‘Čā ĀdsļAúČŪÃũaũøT`„ÃõÁxˆƒˆˆ†`Â2d œjĖ"FGÍæˆÆU™ÛŖŒ¸`ŽEÁsÁ°Á…˙˙˙˙˙˙˙˙˙˙˙˙˙˙ž°˙đÃû >˙"Ž˜XUÃĄ)˙ˆˆˆˆˆlDDD7ūNûū_˙˛(ęD[…k‡X˙˙˙˙˙˙˙˙˙ęĢt¸DŋÂĘŪFyB˙‡đKQ ¤žĢ˙÷… „DDDDDeҁHāÁ5,å‘ã‘„{#ä|ūGž]—Žâ.Œh3šã1‘ō""#‹Dq40B"" Ņ!'<—E҈‘›ÉxI4u29˜G„p9°`Ã8Î#21 G ‡PË.ē1eĀÚ c0”Á‘ō>GĖ"čÁ˜#0Ž#/EŅx‘ō9F"čÆyFqģ â6ŠRđŊá˙ßÂņÄFˆˆˆˆˆˆ¸ˆˆˆˆ‰ZÎąÕ˜ČÖRDr0f „.ÎDs#† (¤`ÎSŽ[”ä8äĮ8įã’rœÃœsŽh8äH˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙ |}xX숈ˆ‰­ˆa; ´r7˜DB)ķy(e„EŅÄ]Ė#HĐĖ Æl2E#‚Ø*á†ÁØK0#û˙¨ø„E""""â"""""DĸR‘ØÄ`Ã*f‚‰”L¨<åÁž˙˙˙˙˙˙˙˙˙ÃĐ67X…â¸%îW'.‡øŒ!*q6°ÁƒÂ_áBüd‘zđ˙ ˙˙˙˙˙˙˙`Žü/ÁGŪøw‡ØaŒ*ö´ƒä";0˛+…ë¨_…˙˙˙˙˙˙˙.!4 ކƒaˆņt\3 †ā°\ DCˆˆ‰ ƒū˙˙÷[à ęū˙ü?ëá˙õ…˙˙˙˙ ×ø˙ūü/ī†đŋ˙˙¯˙˙X˙˙ū‚˙áo˙˙ ×ø~Â˙˙‡˙Ŧ?˙Â˙˙˙á|/ø|?˙˙^‚ũø{˙˙ū ü?˙˙Ã넃˙Ãá˙×ŋ ߯‡˙˙īü/˙˙˙˙ū ?_Đ_˙đŊø|?¯ė/˙øđ¸a{ūŋ˙Ã˙‡°Ąü?˙˙øN‚‡˙ X˙Â˙øPũx\?˙áÃá~˙Ã˙˙˙ø_Ŧ”á˙˙˙īč/“gü-‡˙˙üō LėÉáč(~ü.<ޞ‚á˙˙˙Âįj™’´ Zb>JF&@ŽÂōƒˆŖ†GČâåŅv]]Eã.Ž2âĖ‘Čģ.ĖãÆGČų#æō>adq Æv`ŒEŲt]ŒÄ\f"čē.‹ÄqHņv\0G‹ĸāx…ÁsfŒfĖōÎ"č"(ōQb]H„yë+ĒæEBW˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD šNTG! rî[ŽSË•ŽdUŽƒÃæĄPqȰB ÜsųčeƒÁZLĨJ(ƒĨÁõ)čh,‚rpBA7)Čl‚CÔ‚ȃ’rsŽ{8ä(äĮ'‚VCc–ä 8ˆˆ B""""’8…â>G2>a"čē.‹ĸä`eŅtfËŖL(PNÂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ˆÂaˆˆˆˆˆˆzĄ#D""""""jÄė6tÉ4qxœCä|ŽŽ ƒ0Dr.7‘ÃA Ŋ—3°›Í‘tq—">GĖ#GÍä|Â4Ī#ˆöGČņƒ0‹Ŗt]—@ŠyŒŲšaG#qČRĸSõ Č@p°˙˙˙˙˙˙˙˙˙˙6¤?Ģ`Á0˛ÆËN{7Yā­ syĮ=ž ƒŲÃ8į Ž8į‚ ô+22fšŗÁJf‚ Ķ(ƒĐ˛ Đž C<7r7!ČÜ†Č Ũ˃ŽqÎ9Đâ""""""""""""C¸ˆFQׂÜĐV⠜HfFfķŅČų#į‘ȏ‘ųpĄ Ƃû I[„ĄÄDG|8ˆâ#â""2ȝV"%l§F3æNFlĀ0GĀAœŽz1e"y>uEŅėŪGŽFōxĶ<Œf#ų¸â.ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂĪŧ-Ŧpà …ÃÖ.ˆGˆˆä€`īDc0"čāl!äų#æâčē.3Gų‹Æ ŗ€6†ĀüG˙ø_ đˇŦ~""&ЈНš¨‡ŸŒŅtq”G‘ČŪC2<ŒĖ"—eäxĖI˙˙˙˙˙˙˙˙˙˙˙˙ü?•eÔđß˙áađI]čˆ;ÄqhDD–^Đa bŋá°öUÔ= ā˜_„5ņ˙˙˙˙˙˙˙˙ū!)Á˙ü-_˙Éí,‹˛z˙ā¨/月áLŦaGx…„0 ö‚x^‹Ø×ë…ŅŲRŋ˙˙˙˙˙˙˙˙˙üÃ.ˑ„]f. B ÆGqHņHâeã.¸4—HA“x˛ā`)°§Pæš.Š|¨Gt@ķyÕ%=‘ød=HR3DŒō ]ĸFo<dxågŧ‘ER*jĩ"ęŊ˙Ááįd /e§<>""""""""""""""""""""""""""""""""""""ˑ€…Ņr#ætgy0ŒŅÄ].žúC ŋ˙˙˙˙˙˙˙ōx x6Á1ÉÁ‡'AČŖœsņG*9Į<åanT⠘įãœrcš åA;'Æ˛PKSŽ{'ŗÁ ‚†ģi‚ N ™nAĸČQĖänA`â""""""""@‡! c.2ėëŸÍYDŒđ‚tüÆ !cf+ˆˆˆˆˆq †ˆˆˆŽ.DˆĐĨĮggH—GaŖ4EáMQC4Č„ųŽĄ…ĀØ ˆ3Ņäc#æˆëŲÄRdų'Ī#ŅėŪ 'đ˙˙˙˙˙˙˙˙˙˙˙˙˙ūtū0ˇáÃŦDh0…ÄDėė‘ŧę‡8įŗx*ĖÑG!G&9œDDDDDDDDDDP_([˙đŊö~„ÄDDEÄDD’Å>iĀrJd8čĖҌ˜EŅxŪa"8ĻĖÄG"ėáē.‹ŗr0ËÄs0 pĶ#†@6ˆá­˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¨I‚/}ūD8˙č˙UQ´ˆˆˆˆˆˆˆ‹ˆˆĶDDŽ`ÍDc#ä|›Ítb.‹ĸņæqĖ"áœŌ/Œ#‚$RN@Ër§úá(^!x[A B?č"xbáÄDDDDDDDAĄá˙˙˙˙˙˙˙˙˙˙ åQ8ßü:ú…ņTĩ !õÆáApŋĐ,‰áI^GČ‰ÖSˆĄŒ#Ūo7’ëáqAä‡ ī¯´FáÁu‡˙˙˙˙˙˙˙˙˙˙˙˙˙â"""""""""""""!‘ĀđĻ Ž)ˆĀ`ŽEÆ]EÃ|˜Œ8‹Är.‹˛ėÆGŒdx! Äa—eŅt]Ŧâ1ķÂ)ũúŠ˙“Ū`°¸D @ä2A‘ÄDDDDDDDDDDDDDDDDDDDHŖkpd|ō/GŗzžĖ#‘üÜc1PÅÂ:/ø\Ā˙˙˙˙˙˙˙˙ü3'03Ųĩ&Ē}›S+1Y”Ė IŦ3†tå9Pp2‚ˆÜąq7‚ŠŠNL,Ūr Ÿ2¨qĪd>ĜäQČw-Ęrܡ"LrrČŠ9 ˇ""$5Įž@ƒ#ä|Ã0d|ü]ĪFķâ1›ČųĒ„z$F2>Ļk%¨ëũ…ãę""""üG â"""""-‰Ŗ ™ĸM‘tfŽšŖ(#đ95`ްn ˙˙˙˙˙˙˙˙ūך5’°ŖØø0„H™”ļRķy„] txĘÆl2°fˆģ=‘ââĀĐ? ĶáQ<(WÃūąŋĄCˆqÅÄDėŧEb„r*ą/”č똍‘Ļu1‘ō>GĪ#äp<?˙˙˙˙˙˙˙˙˙˙˙˙‡˙"AøáĨ˙AëøpŦ8_ÎÆķvĸ8ˆˆhDDDD¤ˆy‚ás˛k ¤ž`3‡ Â˙…}BöOŊzēáF˙˙˙˙˙˙˙˙˙˙…‡Üč = ‘u øx×pĐx0xä8ũ‡ á‡$#ŅĄ‘ãÄP!¸Í#aˑ†`Ž#{?‘ãa#Ų.ŒWŸÍšž#‡.ÄyÍį‘trÔŅŅ‡Â %×ŪE ķŧ Ûū5Ãø_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙DDDDDDDDDDDDDDDHŽ"""""""!‘ÃQ`™t] ÂėāĖ:ˆo7"ņ„`Œvc#ÅŲtc#ä|ŽEŅtqÍÆ29˜EŲt]˜ GČņėÄyEŅt]žÉ ˆ"á× ™đË.¯]Ô([đČqeà $#đÍæâäyĖ#ū#Æ"äat]æ¸ø5—ŽDûë‡A˙˙˙˙˙˙˙˙˙˙ü"cfã́ ŖÆG#ÁĪxČä]—Eâ>o#æt]\ˆņƒ#‘v]Gtp6ŒFˆē8‹ĸčē/ä|Žft{?‘™ŧ‹ŖŲŸÉâ褊H’äˆÂ!#Čöy„fĖr#†‚>GČāÁ#™ĄȸËĸᰎ ¤pÁt`Œ.‚‚8‚æ&`6#¸„|‘ķ <N##Æ2>GĖ#”ˇ5÷ á|GgÕ"",†nō""""""""#ˆˆˆ‹DDDCLë$9iƒ?ž…a\qČ?äpC 6Dqî0B!‘ĀšŒŌÍæŒŪj͙ŧŽ˜GĸčÆo iætb ˙˙˙˙˙˙˙˙˙˙˙˙˙đƒãh$Cfôߌ†w š]ˆˆˆˆ9")fUäh SFq˜29CEÆ\ Ád8aa{!ŒÔ>$ Žåū!<(ä”Ņĸ$‘Ü;Ā`ŽG2Ö]pČņt`#āĮÅNČ)¸ō¸°s aš?˙˙˙˙ ŅgŲ" ‘PÚ+x™ …ՎS•*C h+¨Gk˙˙˙˙Âėō ´\T=˙đã‡AB¯‡˙˙˙˙ģ;F.C áúĄ˙˙˙ Ũ˙áh%‡˙˙˙ Â˙‡ ˙˙˙ũa˙đøP˙˙˙ūū˙˙˙…øK˙Â˙˙˙ū˙……č/˙˙˙ņŦ<8O˙ũđũwÃû ø˙ü.č/ôÂ˙˙˙õá ŋ ø_˙öá˙đø\?˙˙ †°ĄÃūü/˙˙‡ÂXÂáŧ'˙˙˙„°×øPū‚˙˙˙Įū ˙ū…˙áx_˙˙ø˙˙˙˙˙ÕįáBå¸Ũ“Pŋ˙˙ ŋđē~˙˙á˙˙˙×˙…Đ_đáø}‡˙˙˙˙ ū˙˙˙˙˙žGČņt^#ä|›Œd|ŪGĖ"čâ.ŒEŅxÃ.˲ėģ. dpÁ‚.‹‘2°Ā5‘ĖņĖņagŅDųˆŽKŖ4TeB.2>yē=žEҌÂ/EŅÄ^#äxģ0dqHøSy#ሟ#ä|ūh‹ŖØ_˙Xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ ˆsŽg!n/ĖŽfˆē4ČņŒūo?FfŒyXˉ?˙˙˙˙˙˙˙˙äčVoYNTÍg.HæAŦĶ* „AȘS˜rvq͆Ⱙ•Øo?å9 ¸3—…L¸3”åAõ+ á.* ãžČžLrpaÎ9ėØB9¸‡đ""""""""""$ Į$åL¨& Îcž rˆ4e9EæŦ?••īŒ—ÄDDDDDDDDDDDDDDDDDDDXB"""""" ­Ŧ$q"ÅĘ(8g9üūpɨ)˙IĪįō(į‚CšdDDDDDDDYp< ApVĖãČē=‘ķų‰tTd á˙˙˙˙˙˙˙˙˙˙˙ø\8xˆˆˆˆŽ.""""vSŦ¨Eâ>z6!ˆâ.ŒfÄ^6dų=˜Â#äxÁP)Āšp<5‚¯?‡ÂˆˆˆˆˆˆŽ""""J3ŊcĻo0Ė‚9˜#ē1‘ō>G G3„]F2>ažČų†c#æķē.‹ŖčœĪFŅ#{# *˙˙˙˙˙˙˙˙˙˙˙˙˙đÂMœ•Ö­|DDDDDDDŸ"""""""""â,!%sTiG#aHâ‘Å#ˆ`‹†á7„Ą˙°ŋˆQņqąHĢΘ_˙˙˙˙õä9Ãhō…°˙˙_ †"ČđĐJgrPW ĄāÜ[’ƒYāŽš\OŠr ˜æƒņDSÁT?ŸŠrœ¨8į‚œ§*e9NTyŌ„BAŋ;0ŋø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŧDDDDDDDDDDDDDDDDDDDDDDD28i‘à â‘âčÆG‹Œ¸C7 üc#æ#ČÄ`Ė#0Žš„z8Ī|ˆDK7đ˙â"""""""""""""""$ ,Î\Î9S•† Įš˛B$fŒŪuGƒ˙‡˙˙˙˙˙˙ū""""""""""@đ×âH0ä÷…PãĻRL*ÂōdL0äH=  đTAEEåhQ)÷$`ã“=žŖaT=œsŲėūdå9‡<å9xVåAāˇ+ sqS0惎x)Ęr¸”sŲÎ98+Ž9ėüTĖ9Į8႐cž üVÄPĪL˛SAüô)ĘãŽqɎ""""28. ˁx¸2Á@L¸`Ž!ČŪGÎÅrS˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū° x1DDDDDDDDDDDDDCˆˆˆˆĻ"""""""""Qâ"""$<īHė¯:Ŗz#ä|Ūl‰ŒÂ1‘ķÆGČų1h.]e،ķ0EŅtc#™BäGĖ) "ã0d|'ãAq #ˆˆƒˆˆˆˆˆ‰ų.„f2čâa˜Čņx‘ō>|BčÆGÍä|Â1ŒŅčÆGČų7‘ōGĖ##ä|ō/F2>GČų0ft]Gčģ1fĖÄGČđ"žP‹Ä|Ž!xÂ.2@¨ˆ;*køpŗ*"åë x08ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆk<Āg.Ds0‹Ä|Ūo#ä|Â$ftb.‹ŖĄŸĪ"ęæŦ§GA˙˙˙˙˙˙˙˙˙˙ɤ#PAü–qÎ9Į8į㞠sLrc’sIČ܍Ė9œ˛ūs“ŗÁŧI9X\ÄK8䜨<sņNG„‡3–æ‚7)ČG!ÄDDDDDDDDDDDZ‡‚/ä' rœŦ)ĘPqcœ"QĻyBŖĒDxČĸÃú"fĸ"""""#DDDDDDC""""""Áˆ°B"WVGoX‘“™HȤCÍÆhÍ ">Gār8AJ$†(qɎIÍäāĒ rD,pŋ˙˙˙˙˙˙˙˙˙˙,(CÃȏˆˆŒ!R ‘š"FGÉō>|ÉöGČäqĸŸ<Ž#¸Ä\  `¸„pË.†Ąp×ũŠ‚öĩDDGâ""",ę ØQÅHÜŊ ™nTË“œsŽqÎ9Į'g‚PSš ÂāĐqĪ1į@đTDD/˙˙˙˙˙˙˙˙˙˙˙ō\YF…ÁöŖ‡ô Ј„1DĄ˜fdvjfĖŪG ‚ąpÎ\3—EȎdpÁpYũ™|CÃ+Ŧų{ × 4B"""""B‘¤˙˙˙˙˙ķ ū$˙aUl¸ƒ /! .Aģ—æG¸Ë‚åȏ‘Å0Dxöƒ<ŗ4HŠOūĄÄŋ˙˙˙˙˙˙˙˙ÄDDDDDDDƒwČá˂æä0Œd|ÄGĖ ģ1…0‹Ŗˆē.fr7ėūHEŅ/’’û‡‡R#Ū¸ŧ Đâ3Đc#ä|ŽF2>G{0ŗVGÉĶ<ŒŅš=‘ãLō8ŧīW!3r¸_˙˙˙˙˙˙˙˙ū‚ ĪgãT2ĄėãžÁQČŪFds:ĸA‘ũŠ˙“ķŽbÅAėū=“ŗ†g),üVåaPsBˆ<CĨ”\ÅČbJ…o mYPi˜sņNV§ōdOxR (!S1Î9Į8įNC`ä 7!ĖEŅpBˆō:ä„c*ķVyÉxĸŖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„""""‚Ņ/ˆ0ÄDDF¨â""#+ff2Ņ\g*ePöOĪÅa‡8ä°§ ģ^ÁœDDDDDDDDBūA-Ãņ‡ˆˆˆˆˆˆˆˆ˛D…-‹Â¸‘Ą\{8æ‚Pg+`rND˛rå9XG‚˙˙˙˙˙˙˙˙˙ū˙X> ?đÃqÄDDDDDę™Ô#Ŋ#Dvųø‘šŗŅ„c?‘ķē1˜#.Ž#Ņvc#äqAü?ÂPø˙`ķ1ˆâ"""""""""" á˙˙˙˙ø\-GūÃĄ+ĐZĘš#r‘,ę‰IžŒ‘ã8ō.Ītr#ä|ŸÍæĖÂ.Štc#æķâ.‹‘.‹Ŗ‰N,Gu#$ņę‡2¯Ë| āV˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũÄDDDDDDDDDDDDDDDDDDDDDDDHŖdrcqČQįpl.¸r|ūR"čĶč2 ąqáäC.‹ĸᰎ!t\ˆų‚#ä|˜EŲt\ˆā\¸HŽ€V™Æc0‚g"<]E،Ė"ņ„r1@Ča!F€ŧ/˙˙˙˙˙˙˙˙˙˙˙ ‘áB"""$š$ŅØ8Čo+y>JŅ3GDKå;=‘âāš€Ę#Į ŽEŅpÁČá‚ņŗ<‹„. —t] RäGPÍ0)0^#™4AUÎ"Ŗ#åGČņš1˜Gŗ5ŖÆ0Œf›0‘ČÆ`2ˁ‚āj ÁČ7rŒÃø,DDDDDDDDDDDNÉr8V2|ÄhŒdæCĖFˆčgķA˜Í"s7˜G˛>a d˙˙˙˙˙˙˙˙8^ ĸh B""""" Јˆˆ‰%ĘDiĪĮ">y”™ä]Ė"ņ1#†^#ä|Žd|+Á?Ö[…"č¸iG""""""""""""!˙˙đmBđ”DD}đũ/˙ū?ØH7áv!R ˙ü?AGø0AÂ˙˙xûÖ˙â>1 …ú-Ëč.‚ÄCŋ†Đ^0ē 8T¸pPp¨/]|0\]|0\]|0\ î‚ņ…ĐQ Ŋƒ…AxÂč+ႠŨã  Ŗ…A{ú ø`‚÷ î ƒ  Ŗ…AxÂč+á‚āÂč(áP^áÁAā¸0ē ø`¸<* Æ/pā áP^@HVpáō¸ņDYˇ  ƒ –bĐa˙îf„Tŗp0\ü"wJ–`āŠ„åœQ—ÁČâ˙ūĩŸ$‡Ü•ŋš13–ä6øõB˙˙˙ņë ! š @BlAXWÄÎÎáG˙˙ø†]˜ ˆAyŸŧÍLŗ ŋ˙˙ũĐ\š•X†ˆŌ5Į.†G—Á€ˆjaLŌß˙˙ƒ/+ŠQ†Ģičd#‰ q&nĄC,B+‚ˆ˜Qp‚ ģ™š?˙˙Ō@’Œ9ˇ @äq!˜(D;Â!‡ Ž\,„ƈĐ9 ŒÂ˙˙˙bHsü|sRŋ$Ęâ äpåēē[”äĒųÚL,PG€ų˙˙˙˙áe8I6U_ƒ&ÁX"w!°āаSpAHŖ†WČeŽKŋOįa–îGb$"Bī!‚IËrÔ‚ž˙˙˙˙˙üČČDpĐX’“ˆØH˙ •Ōę'!”8‰ ”‰Ņ">O‚™z¸H‚>"C;Õ*Kę"cƒ@Ė8‰ĘtODYÄc7ƒ˙˙˙˙˙˙ũ|dHH˜rr#Ø˙;5Â$õ„ ÄGi˜‚˙üIŽ#§đN%<íd]h„" Ū@đ0>DDHeŗŽ˙˙˙˙˙˙˙Â,ȕL5 Éų 8!˙åhh ”""äG3øÖĪp‡Æ^6gThgXųžF2>HeŲv]‚.‹ĸā\ØrâĪsˆē=eâB1˜">z7‘âäyGŒŲÃ9ˆē.ϰ¸\¸.˜EÆ^0Fr H@Ũ]?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙â4!̸‚G„Gâ8Đ⠈ˆ‹ˆˆˆqÄ8ˆĐˆˆhD T! B"â"Âaˆh‰1`$@ÐÁ‚RVf¨ē0gT]—#fG2>GČâ‘ō>o#æō8ĻâčŧG<Ā`ÆlS o#ä|ؘEŅq—Eȏ3`ģ8‹ĸņ†]EÆqú ä`c‚ô!á~áØ* ę° ˆG‡â8‹ˆˆƒDDA„Dž"QҚâs)ŅC"€ Ė9ŗ0'Ī3‘¸ē.‹ŖŒÆb6fŒÂ.Ėdr0dpÁp4ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úépOå@˙ši2ĄŦ/đ ŋ~ęūŖøãˆkp„qÄDD8ˆ2ŒRL ´äČ!0†C‚¸đ¯„Bߙ_ @˙Ž.‡…°B?¨˙äđŊ“ˆ!á˙AĤ1 Ĩ ßA˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙…žh/÷āįđū? ¸_&Ŧ?øVûÃāƒđđŊ ~#¨×ė=x_˙â \?ëׅ˙õø/ƒ# /ßá{°ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūú Cøķy„b.‘ÂũTŠ:˙’˙ü/˙˙ūe!!˙ūĩH/ÁKā΄DDDDE— €H†G0K.$2>o#äxÄŦŪ¤!ä|ÂÃđš„Ãa˙ôü>{Į˙˙˙˙˙˙˙˙˙˙˙˙˙ˆä‡%5܁îCÚq!°pds#rā܆2> PĖŌ VŅ|'Ãũ~/&ČlŦ †2„âTˆfDO0D l¤2`%âP¤ˆRD ‘DA ūGČų!˜‹Ŗŧųš#ˆē8E$<fķ öG#Čų°sy#†‚<`ĀĐBā¸B Ž!‘§ ؄lSp_áSŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūē cáG „ƒÃ‹˙"8,Јˆâ"0„E…ˆˆĐƒˆ‰ ÄMP’æU™IqHg‘ˆē/ō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü!hDDDdp<.†št\2C9pi8)„]—™Ŗ?‘™$GãLÂ8Ž2! Hwđŋˆ‰"8[ü>1—!K‡đ÷_ Ģ†hä\ä5‡cĐ8qġ ŽÄyJ`ĖfˆšDC“ķŽpɆ Āä;áHp|?āą„Iõ /kã˙˙˙˙˙˙˙˙˙˙˙˙ûČr!Ēâ"""""""""$‡  r#Œ,Oøƒ9‰Ä`Íü1 ŋ % ĩú~ÁäøŦ˛|KÉL§*98+‰qø§+āĐS”æđT ‚pW ƒų3›g‚ų3C)Ņ Éĸ(qä|Ä6E Î:Œâ.2A›įÂ1‘ÃaȐ‹˛ā`á܏ˆų‹Ŗ`f‘âã.‹ĸčÄ^0‹ĸņ‹‘„]˜Čų„c#är/ō8†j͈^7‚aÁ\ŽEãē.Ė#9p‡ЁPÚēĪ.š˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņxOˆˆˆhDD8ˆˆˆŽ"#ˆ‡Dęb"6#‹B!ń"""Č0œ1Ј™Â""""""#ˆˆˆŸ28 ‘âĘ†R>H’á¨a‹ĸčē.‹†@6Å# n"""""""""$8ä<ƒ8fF29˜GÄb8Īfō9˜E҈ē.ŒEŅtb1‘ō8¤s#ä|‹ĸņ€BęÔ?0õØx_õáp ₠H¤ŠH?ž,˜įĄNT A¸Kxˆˆ‹ xf„*eč""%OÉ9nA(qÎ9 ŅČ8ærCœrNA‡…Î@đqÄDDDDDDDDDDDDDDDDDDF/˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙†Ã×øwũ˙˛)ȉˆē1˜EŌtb‡ČZ ˆˆ0…œ‰ąv1˜†|*t ‹ž…§'АuÁ°ÁáázūŋÆ,‚î4"""";ˆaÃB,¸l#ärÕ2Ū†J1 â'Fd3"ŲŖ8" ˙˙˙˙˙˙˙˙˙˙˙˙˙ū6ŨB¤Aü/Á‘˙ü"#ÃÄB¨‘G2~Č*"#Ȁõ4˜Aa\zĮíƒ2°˙q˙䇡˙#›ųå ã!ÆÎR 'ÎäŧȆ ¯Aߍá˙˙˙˙˙˙˙˙˙˙˙˙÷Ⴢ,9WÃ˙ˆƒÃüP\‹!Ļ8‘ŧŧyĄ&8ÄFFKä|Øke¸WAHĖŽt­â""$K!ąÆG ,.Œd|‘7 Øær7!G ĸ9Î L¸d!qĄ!‡7 Մ8Rˇ!˛f¤znG­ã˙˙˙˙˙˙˙˙˙˙˙üG!G8į‚ ãœs9nC“‚ÜÐP98!§$9 ŸåšNaÍ(â""""""""""@¸â"C rCP9¸"Ž~)ĘÖ{""Fĸ:—똠™aAČ(DDDbuĮÄDCˆˆ‰§0BđāŖŠ‚uŖm(ƒČ QNRƒ9XPBļTz r đHrVC1ĆDDDDDáš98)ŲpË0 œEŅpÎ\ˆâ‘ō8R>GČņv]EȎ äi•yÜ,Ņrø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū°Ã†#ÁČၐ<œF8pƒ"R>GČų4ÁÎЋĸčŧG‹ĸņ‹Äs#‡.ŧG\ CXŽ!pØaŒąL"éo$›Ī"čäasųŧŸČņėÂ/eŅx‘ķē.‹Ŗ‘#är1‘ŎđŗjaÎ9ė†PäáÂ& 8ã’p¸Hˆ?ˆˆˆGQLˆˆˆˆˆ“â"IsF@Āđ0` 29‘ĀÔ6ß˙˙˙˙˙˙˙˙ü8DG( Žō¯D2Į†Ä1ū=0äNg)ĘxŽD rž"L˛‰4x0B# g%ĖŌ?ĪY2h¸t~ Ų?Ö0‹áŧ‚aZŸ‰Ø/bAĸ"'Q1¨)ā㇈Ŗž ØåoĘJ@ã˙˙˙˙˙˙˙˙˙žT,2 0qÎĮ=2$å9N"0„‚80ŒáFr#†n!îN$3šPqųØÄ] Ą’{ĶĮÁđˆ^aˆˆ’VqȈã<xb"-‚)ȏ(bƒAˆ‰Įâ$@z Ö‚ ˜Ū?˙˙˙˙˙˙˙ūžÃXpQ $œ†Ģ”æ’|‚¨â$QÉ )đÆ!í‚ę‚°A؎$3ņ3ˆ…´•ŖĀ°ũ CŪ˙˙˙˙˙˙ë…pȐ@đkpäėđƒ›Īƒ@2C†āÁuī …á¸cUVАĘB€đŲŽvčāiwųq°A˙˙˙˙˙áCŠÚđQ!ˆ+Ž9øˇē0™4Ī>J|‘Ã5ą ÷^‚Gb‘ˆō8‹†Ôæp„¸@B#`T8ˆøõZ ˙˙˙˙˙˙}„‚5˛čē0)ˆˆÎÁQtq˙’žņø1B"# x5ņ "ĪŽ5‚ ˙˙˙\%Đ@đŪį_]øOŒƒ"āšđÖ/˙˙ü¯W!ĨŸûŨūAx8äVæŊúĐ_˙˙˙âЊęåŧ~/ázÁ˙˙˙­˙×ëë˙˙ŋ…ûßđ˙á˙˙×ü=`‚ŋî÷˙˙˙×  ŋū˙ũ|/Ö+˙ū?˙úįdī˙„ˇ˙˙ø|,/ú į}C˙˙˙đžũā‚Ã…˙õ˙˙˙đĄđ˙Âãøø|_˙˙đá!˙…ü,/×ã˙˙ü?ī‚ Če™~˙˙˙…˙‚ øp]/ī˙˙øPĨÄŪ?Ö*æ+ü/˙˙˙ü/Č1 ‚ÄúÃã…ŽÁ~đ¸ ŋ˙˙˙‡Ų =B";ū„üaŖ‡†˙˙˙˙A˙ãô9 äIdĶ#áJ>Ã‘ o!GAÁ}Hƒđ¸ ŋ˙˙˙˙˙˙˙…ūĮühCōÜĐČüˇKūü._†R$Ŋ Æų;Â!ü˙˙˙˙˙˙á0Čņtc0‹ šäb8‹Ŗ.Đd|Â.Ėd|Âgt]Œ#G$"""BŽA@a˜  Ļ¸s.‹‘‹ŖHų„]—ˆæb#Æ#ŠGŒ\!Mä|Žg‘ŒÂ8Œgō>G2ĸuđˆ&Á˙˙˙˙˙˙˙˙˙˙˙˙˙ō‚‡ x)JX)ËANS•œ师ˆˆˆˆˆˆˆˆˆˆˆÖŗŽNAw \r(äsqɎCˁƒ4q×ÖĄq=Ëq ŧ•˙Ø!ĒaC(+S ÄĢ1ˆˆˆŗ03Ų€ˆ\ŊMM ‚r7+ rCœsÁXS˜sŽLsŽqÎ9 †Č< rœŠ”æŗŽx*‡ĄNV§ĄaĄĮ"9 A\BÁâ"""""""$Į ÞØD/œsŽx4Lds6g–O‘ķōÜwāĄ¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øJRœaáâüv$<"NˆˆˆˆˆˆˆˆƒB"""""".-cG%ː ’â8DqHų0Eȏ‘ĖEÃpË.#čŽa˜^0Ėd„qQ™Ŗą×%Á‚ Ô2Ī…õ…U BãôFīÂÔDDDDE’rõD8§Š]A°æ3ĀjĀđ ˆG œC-Ër°Ŧ)A͘š\pŋ˙˙˙˙˙˙˙˙˙˙˙˙˙ü/ ˜¸x} ī 8)8„!×îhp”baa%â’5gXŅ3y¸ē.Œgˆ‘ã„]GqĖ"čŧlĪ#ŅÄ]"<\æōG ÂáĒ\ A˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ãø‰yr#™<ŋđ°ŪáaėÕ`°ŧ ¤•téÂ_íBüœlDDDFˆ‡!=…3‚}B"F""Ád|Â.˯đđĻÃŌ“Ø…Âf'ųŒAˆqō ˆX/îŸ×Â!G er„?˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÂtƒČk¸Āâ""š3žĪ‚áBáB:¤ēų <‚ƒÆ‰+Ô˛~Ģ˙Ąņ Ä^"2Ct]G\ūG#؊t]bâ.ČæG#äpĻx‘Ė ĖFt]EԘ‚œ `$XHō8‹ŖZ.‹Ŗˆâ4ČäPŒŅÅpē… ˆK „ŋ÷˙„_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙čHQČ9!É9į Ž"""(Ž ¨\  Ž ÂäG.‹ŗá˜`™ŒeŅt ˆųW„ëx_Õ˙">‚ b"$8â"@Ô äQÄDDDDDDDDDDDHŽ""E29gōθLĶžB(ųĢûŠ…‚ ˙˙˙˙˙˙˙˙D2āˆāČc0ËĸčÄ`ˆāxĻ28…ŲÄ`Ė"čÆGČâ#t\9#‡.ØįŒŪGČáåÁLŽĀVÉ|96J`h†|œbņäxĪ#4{'î‡ũ˜€¤6(ViÄDCƒ"#ˆˆˆ8ˆŗ˜QÁņ;+‰˜!Ô0HÍÁ™!’ÂDČ1aPx-9čCęAx= ÔãœsÁs)Ęr<.lrCž ÂŦâ"""""""""$5܆Xä(ær7#rœÃ‘G8äQČaÃ#™R8…ĐRxīLėĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú Č)¸ƒaĪV†đž2C…P !_¯ąqƒqÄEÄG‰­’l“ˆĖôn1‘ķų„\eâ9‘Āü¸Ë„1‘ō<\ŒŅ2T¸….2čē.Ëĸčģ …ÂDĆÁÄDXׅÖ î˙ÂĨ˙øâ"" Äb"䡑\§E(ņō>G …Æ] ō8f‘Ã\¸Ë‚Øŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙Âu—AÃ)ČÜPúû÷ –å]Z!ĮÁk­†!b-BˆŅš˛K…#æÅ:˛č gHŽF˙qA›ÁŊīü*†XßŌÂĩŽY;ũ˙ËAį“Œ8XˆˆˆˆĐpA˙˙˙˙˙˙˙˙˙˙˙˙­W‰.”‡ ßūtøtáZ˙_ČBâC…˙˙÷ųؘ,H(=T?˙vũ¨{ũę˙ƒ Ä˙ī˙˙˙˙˙˙˙˙˙˙˙˙ī\0äˆö|Ī‘t^&;)ōPÎ"āĘgō>GČņ‡@Ė$æ´i…?¯dĶ5d|ūyĐaō…}WĶ×ŋŨdir0†˜˙ø_ ŧDDDDDDDDDDDDD†w-ÉC∈ˆˆˆˆˆˆˆˆˆˆˆË†áĖfō@ķ!Ô÷įU˜Gf.p‰p˙ū˙˙˙˙˙˙˙˙ũ.9Ã0r 㛠ANS”å9NS–å9‡8æsLsŽqĪ9N^å9n\Ęr ö{9ĪÅqø¨8ærܧ/Ž9œ§)ƃˆ“K™N_ œ§)ĘÂāöm ÁĮ8â"""""$ÎaȎT'E—eÃ,ށ‚8ύ¤Čø"žD"W˙áa ŗ B[ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆą!˛"""4"4"Fgi"•Œ‹Å$hq1ŅtH‰UŠ4F ¤e â0f€Áp< ČāĒ\Ã4Ž.ˈG2=„B1Ä.‹ÄxÁ‘ō8rė¸Ë„.‹˛čē0FbF?7‘˜xc˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü<8~‘.Lä7áqŧG°a‡Ąâ,ÄË&Y2Đ"CÁ‡3”å9XA …DDDDDDDDDDDDDDDHqČh‰†\Ęsx0äā§)Ęsq‡'l( ŋ ģ 9VŒ-ᯠŽņ"¤%8 A¤]—`#‘q Æ2>`ŧG 28`ē.FĖ3˙˙˙˙˙˙˙˙˙˙˙˙ü%pÃë#˜2vÃŌú„î˙!`yOigķPÂDÅJ?“Š9Č{4Ė9āâ`CŪ˙‹ ʃÁ '…¸Pė?đīŽž–@đr6LĀŸČž#â""""w: ŋ˙˙˙˙˙˙˙˙˙˙ūÚX†"jŒfĀz~­˙Ŧ={ō Ŗœsų2åžĨjqĪ9Oņ‡…ü5 8„v:4ČĖŪ@ŅĻb7‘ķĶ1ˆų†c<Ëĸčâ.Ž38‹ĸčÎ#æķâ%ä@ČaČlãœxe'8đš1˙-ÂörI>A­$đĘŌŽ~áBđŖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đĸ"""""""""""""""""""""8ˆ<3 §ãΆgp<5ËŖ‘ŧŽdxēÎWüDG"ANJ’|‘ÁSá„/th‹ŠjGđŋ†?˙˙˙ėĀF˛{ )} <GČáˑ°Ë. EĀĖ Ëá‚ņ#™.ˇ#ˆ]"æã’sh3‘šNaÉa ŧ4i”åkG0E<„‚›Čō Â.ËÄ|/"‡Š’ÁŌ9x+q)"Ģ•ŧ̈‘šF$ đ¯b!wøˆˆˆˆˆˆˆˆˆoH^,¸„|Žf#ä|ūaA1ąN"#‰4RdŧDĸB.ŒŅÄfŒâ9› ?˙˙˙˙˙˙˙˙˙˙‡R\?ëõÄ2>GŽAđˆQČaÄDDDFĖå9[Sü1…‚ ęø^Cf:Č`qÄH)Å˙˙˙˙˙˙á* áøâ@ņ!Člz…ãđë‹Čw)Ė9Į8áüh‹ĸ„tEҌŪbyî[’Š9 ŅɎ8]ÄÎB9oØJ/˙˙˙˙˙˙˙˙˙˙úôB ĸ DDDDydˆˆÃ-ÉAæDˇŒ?‡đŧzČAŧDDGß˙˙˙˙˙ o\„r ŌyÜÔ@ááü1‡˙bFäo.D~IĘ{ÄgThaC Ã_˙˙˙˙˙÷ëĸDEœF8!=‘Áˆr ‚ Hq‡ÃûÂÃąDp¨ˆ @Ÿ$`_ņ˙˙˙˙˙ ą˙Čq ŽVž@‚øb9›0†}‰î#˙˙˙˙˙ԍ ĸuĮ’`x1Ãņ…Į+ØC%Ė ˙˙˙áĘú‚Ŧ!$ŋ˙Ŧ)]".‹ŖŖ;85‡‡Ã˙˙˙ áÄDę;Âá PŖá˙˙ øx~?đ¨/˙˙߯˙ {˙˙˙˙ū(_‡ž˙˙đ˙ đŖ˙ø ŋ˙˙˙‡‡˙ÃápĮ˙˙ŋAđ‚Ŋ˙˙˙ø_˙Į˙øPA˙ūú‡đã×pžˇSŋ˙ü?˙ã˙˙˙˙…˙˙‡˙ü˙˙ׇ₅÷á˙˙˙˙˙˙ü˙˙˙đAC˙ü˜˙˙˙đždŗyn´KĮ˙Aވ7sANTbXPĮ˙˙˙˙;?‡ÄDH1´øpŊpŦ.AąČ4A‡4K˙˙˙˙ūÂy°Ãû @—Æ#l"öd4a|ˆä 9 ˛˙˙˙˙˙Ū2‹„ƒÂcņc‘ŋë „"ķ!҃!†oɧ+ qÂĮ˙˙˙˙ū2 G‹„d¨'ĸõ8g§‡‚ |Š<2į Π¸DüA‘ō>% j¯˙˙˙˙˙˙AnZā‡ņ'=DXŋŽŋUÂ"?‡’ŋ<(ėOß_˙˙˙˙˙ô+CōX!‚{r á˙ūW,Ü.v*$&i%Ë+¤ôFâ$GŦ,˙˙˙˙ü?îM¨°Z4K‚+„DāGø Ąs‘JÎFŌSH¸„|ŒĖ"Ÿ'Œgķē4Ī"ņ#äxÄ{#äxŧo#ä|‘âčē/FĖEŅv{7ŸČų0fōaEŅtHČųŧŪlŒEâ<]—GtxČäTDŋƂč1d@xvÂũøXđČƒhâ""""""""""""""""""""""2ä n:åŅėŸä0‹Ŗ1ČųˆÂ3DK øDĐ\*úááā‚˙˙˙˙˙˙˙˙˙˙˙ˆˆˆˆˆˆˆˆˆˆˆˆdp,. ÅŲq”är?čdŖ ō5ęßŨB˙åšNS•đAx8įœŽCœrPqÎ9 ‡ ĸ4yÎNÎ4åq° …9U–PbäZˆZ‘ ˜äœĘr ãx)ĘrC‘ öNÎ9œÃ™ĘrœĐcš åš(0įœrPqÎ9Į<‚8'nV2œŦ0æÂœ§0į˛cŸãœsÁ\~*‡đV‚“›Ž9Į3•ƒA>+ ANaÉ9NF䠔ˆˆˆ‰â"C-Ųp'.ËÆÂ‘âč¸Ë‡#äqsŖ:ĮŊ\Ķ: đą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úKÄDDDDDDDqÄDDDCˆˆŒĀqCˆˆˆ°Ž‘äPŽĮGd˜Ī#æqf29‹ĸäGČų„]f#Œ‘˜EÁ °3 ™#ŠaGŗē=‘ķy0ŠtPŒŅt`Ė"ėÆGÍĮŒÄGÍäxšEÜ<_ ŽžIBˆŽDDD4"""""""$HČ`Á(ލĶud fŒād‚ãđž–žWÂØ_á0ƒ„„~!ļâ!# h‚ą˙˙˙˙˙˙˙˙˙ū˙…ū/ßč7Pü!ßž0ŋëy]MBÃõ˙˙Ȓĸ‚ĸCČ<ÂÂ\?‡˙˙˙˙˙˙˙˙˙öq^Sæō>G YčöSÆō>o1ō>n.F ˆāĻ`9t]Ņt`ČųŖ(F7ė)äqō„z ’ü3Čē8Íhē9Čų?Äųˆ‘ķy#ætq—ä|ŪGÍæō>aôŠt]Čz‡;Q‡Ã‡“’2`üB"ä¸˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°B"""@đn<Ā!Æ]eã ē yČų1rĸ <.û K…đŋ˙˙˙˙˙˙˙˙˙0äœˇ xŖ“œ…ÁėãœsÁNn*fAph<2 đ]<ÆÃA\x*aNTS•ŸĄS0į¨ã“‚<4ėĐBŲĮ8ä ãž sx ŌåáBChđg%dėÎQNqŖô¤Rđšė-˙˜4Čl*ˆˆˆˆˆˆˆqDD4""#C@Ų‘rĻF™Íä|Ü]ČņtqFhĶ šĸ=˜f`¸ƒYv\hĖ;1ˆņt]Vb/âėģîTįƒáã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęâû"ÃCŽ"""""""$Ē$3ĸ$âŒd†`)9Œ‘âčÆo#ä|ŽfÂ.ˌŧG (#āĨ'oáH#˙ ˜ĖĖ/øâ""""""."Нë“ä¤Čy!žˆĀØ]˜hGŌ8rāxkÃ$˙˙˙˙˙˙˙˙˙ü%ˆž Äqü˜Mqdh .fˆŠįōyče:$ ` ū¤Gž[–Đđōå:j°ŊōQ¸T š­Ö""" ÂpA˙˙˙˙˙˙˙˙˙øY>šĄAx\DÃÆ…_…ÃĻũūøWfhîŧō1žEŅt^7š#ˆē.‹Ŗ„\ˆų7EҜGĖFķš">G‹˛ņČæ|ĖFō>GČųä]EŅt\—Ä]F"čŧG‹Ĩ1äxē1EŅČōĘė)9˜Q&<í<PøApĄđŋ‚ z˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD†Ŗ”åš ąĖåšå9‡$ä‡8įÎaÎ9Į öJŽaÎ9āÙËrž]˜Ūo7žG-x R{*!A‡ü|†@hrÄDDDDDDDDDDDDDDDDHPCEœsŽx…$dxĶ7˜YžGDc0.Ã|`ĢÁđđA˙˙˙˙˙˙˙˙˙ōÜŠ’‚čOČ´)Ė9œ‡‚°”ã“ãŖ fķŽdΜ§0įķŲĮ<sŽqĪ9 Ŧ* aRk8į˛iĘ ‹įōX^…9PAČ@‡ ŨÉ$2āĐk8ær¸‡rœ§*DDDDDDDDD2>G͑r0D|Žá”lŒ˜#ēÉō8U5ĸéį–a™?ˆ÷¸\/ô;øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ8ˆˆˆˆ‹‰ˆˆˆŽˆ9LTT…9Nh4.RƒÔn9ÍN2 Åx/dāĐS”ä‡8įŗŽ""""""""""""#D…‡rÜÙËrœ”L"ņš 6d|ŽYȎq ŽYčŒü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ū7äT"ÄDDDDqĄÄDDDË@r2* ķ(Œ#‘#ä|Ždr/ĖŽG˛>GĖ#˛. —P3‚ ö=0áæō>b#áøCˆˆˆˆˆˆˆˆˆ’#Š•ŒĒäÁ“*™).Fœ¸2—">G¸-g˙˙˙˙˙˙˙˙˙á†ÉeC|DD†Įüâ"Â0 —g@įķ‚B/ȸdXü\ORŖ‰ĖŨV5đ˙āļIâp„D¨ĖĢ/˙˙˙˙˙˙˙üūÁš; Îû=gfŸ!ąÄ†QąđƒÂ˙áaŦ@ÃlČæa—ˆųČâEâ9‚œ"?…A‘Ä…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙B""".""""""""""""""""0„DDDDDDDDDDDDDDDDDDEĈD"H“FIãHÃ.ÎDxē.‹ŖŲ1‘ķÄhfÂ.‹ĸäGČáĨȎĀ€‚ü=DDDDDDDDDDXB"Â)čŽf´fŒŧų.Ds#†Ąp<0\!p<ˆ@ŋ˙˙˙˙˙˙đø|N8ÄDDDNô…äšXS”‚´CēĶī†˙˙˙­.7Ūûw-Ô˙˙˙ū˜z¨aáS¸˙˙ë÷ߖę}ïÔ0ŋ˙˙ Ô*\ũî[Š˙˙ūĄŪÖŧ0ŽŽõ˙ũuúܡSīžÃß /˙˙˙…jĨqD?_üA˙˙ūM…;ë~š6Ķ<Cõ˙˙ádØpi.!Ŋ~,<ˇ$¯s ēŋ˙˙˙ōÜŠ—rá=B߄Ŧ,ˇQRāŋø˙˙˙đų!Čaîƒß§Á\!$âALz’ąpëû˙˙˙˙ė.%9ž(ŊȨ?oëŽWPĻq"y1„QäŅ!Ø×…đA˙˙˙˙Ž`0fŒÄGČæn0dpr8¤p¤q „.DxāËŖ‚âāy‘Ī7˜28lDAČ8䰐äāäÆ2ˆÚ yäP‹Æ‘.‰NŒ„ũpÛ¯xˆˆˆˆˆˆˆˆˆ‰ ˇ"$8äqDDDD„q"A8fē=›Īä|ūT#ĸ1÷ôŽ?˙˙˙˙˙˙ ĸ""@ķqȁC;”å9 E“‘Á9ŌäK&Šā‚ō a­2…‚ˆâJ)ŽCcÎä# rNDA q8’DDDDDHâ$äAÎ9'*0\ˆáĖd|‘âã/ˆņv\eȏEŅtc#äs#äs#äs#æÆr#ÅŠä…ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙'Q ƒ¨+uœXûáI@`ˆƒB"" ã™Đ’äĄŒŠD]¤{<Ž"čÄ]Ė#0BāxeĀ‚č¸6Ëĸã.Ā+.F˜F#ŲčEŅB.Ž1EŅt`Sē.ŽFtr7žä|+Ņh|ÄDF@˙ÕØHEˆâ"""""""""Så"1#Ųŧķ.Œf€sq  l#†H0 /˙˙˙˙˙˙˙áá&Đ9q0ÎŌr}ÁËp d#ä|qąwˆˆGHŸ#æķŅ„qEŅtc<ŽD|ō.‹Ŗˆē/æxÂ1žD|Â.‹ŗˆĀ-ū˜aō´1Lė¸P‡ČģO!Ęŧˇ@`Ž""""""""""""""""4'cHÎ?ž#ņčäy#@ĐHEȎ)<Ī?˙˙˙˙˙˙˙˙˙đ¤=,)'#㇄˜k›aP¤`…žš—ÄDDDDDDEÔ^Ö#áŖÂ ų Ždd û_˙˙˙˙˙˙ø}ļFE=pЇ"Ž—‚+ŅÁĐh­ĮæÃb‰I›3VGČâ˜#yä\Cqx‘ō8)r#Æ29‘ȸDˆ‘pV.DpPG GČųˆ‘ō9@¤ph. ˜28¤pØ] „r.˂Épk#‚Ąā,#Šag‚ EÁ Dn.h ČȖĸ„tG# Ä#™Ũ`Gø ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙áDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDˆ9Į Ž9 G!Č#”⏑ō<^#äq ĸč¸`؆hę ~Ą/&Aƒ9 …š‡8äĮ3–åáNA0 † ÎQĄIs†9“5 ƒjn&¨D™¨šŗaz…A¸Đg+Ž9ā§ bdxBq=M9NC;’œ sŽBŲā§#ryČųä]EҁFČÆGČų¸â8ˆKÜ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÁĄ ĸ""1$„83ÁO^<NpÕIAŸÉužAOđ^%e ŽËA܈ü–a× / @˛GČā\¸G2829 B8¤pr9ˆÃA˜EÃ,¨ÕAøPDD|˙˙˙˙˙˙˙˙áD†@69 ąĪB šܐ䠃‘ ƒŽIČ.ä#G Đ8ˆˆˆˆˆˆˆˆˆˆÄ3‘Čģ0)4ž<8 ßRŨOōiÕ Šb†ōcQ`ƒ.%ÖcĖ9õ,ƒ§-!¸į<‚°—Ė ĐOĖä<Îä 99å9 îAw7 xw$9œŽg°ĪųüžEŅtqG#Fz.‹ĸņ„c#æĖ˜æœah"øa˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙AÄ' øk_ qqqͰ"€É†n3•а¨&9,+ÄQÍÄ6a.AO2„{#Å!EŅč§Éķâ0f/šŗyˆ˜EŌ㇅Đ á}ūƒ‡Ø‡ÄDDDDE„vŽ4G@ ôGŒds4E،‘ōB.Œf`Ė#„a˜28Æ[Š˙˙˙˙˙˙˙˙˙˙˙˙ÂĐA…á áSūÄXB"""""""4's4v,F"q ŗ´dj=‘âčÄ`ČâGt^0‹ĸâō>GÍÅŅė‘âč¸`Žf">GŽd|ŲEŲt^#Š`2AŦ0ž p’Ę€ū†G‡h#´‡úŧ_@œDDDDDDDDDDDDDDqÂdĸæ™XB9sL‚s›#˙˙˙˙˙˙˙˙˙˙˙ü ‰™c„.L B÷D8áuĒÁpP°’ =b""""¸ ŧ3ŠBÁca V8Væ€]CáB `—˙˙˙˙˙˙˙˙˙˜ËŗŒÆGē=EŅt]‹¤0‹ĸâō8Ļō>GÆGš åŅp$.‹Œ¸g.äpֈ†GƒÄc7ALŲË%yNJ">R„Sä|tV˙ņŠļ— Ax…Ëxøˆˆˆˆˆˆˆˆˆˆˆ“D!Ė8ˆˆ‰n"""""!‘ÁA:!Gƒã.ƒAÁ_˙>—Q@‚˙˙˙˙˙˙˙˙<4܆“ˆ”ä8â"CPq ㈈ˆˆ‰ÁJČw!ˇ!Î9 Đg4ŽS”æūn?Íqˆ–yĸá„á2åßøˆˆ‰œDDDDDDDDDDHā0ˆkÁĮ!æaÎ9āÜS•2€†]!žF3ÍČņČÂ3EŅČÂ1‘ō>uEŅtė%˙˙˙˙˙˙˙˙˙˙ō< Aø§$ Ę:ræC”“PVĮMAPN dčn/AāŦ+Č€ĪB ¨=“ đRƒŽsŸR…ĘƒņIqœŽ3’ŗŽqĪ Ų8%Į  qbÜÃ˛čē.ĖĐLöD•4>m„4€é°RC… !„"4""10䃎Cˆˆˆˆ´"""""!Ø&m’JTz#į‘t]F´]e>CČųŖ(gŗē4h*âč¸.\9ˑ˙˙˙˙˙˙˙˙˙˙˙˙˙ÇAC ˙¸ˆ.áaŽĸ""""â"""$Ž:Gtgķ¸GĖ7‘<š"čē1‘ō>GČųČų7ŸŽFxÁķG@Öū G#p†##äxÆaˆæGČų0‹ĸņ0Ėd|›‘ō>GČų#™8‹ŖxÂ/d…ëĶ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ DDDDDDDAÄDDDDDDDDDDFGąŲ æâ8 ¤pČ. ×˛āƒá˙ ū„DH$v/Í#ŦHˆyčôGĖ"ņ#ŠGČáO"ėĀS<Œdq ĸčöaœEŅvq—Gā5RŨS˙˙˙˙˙˙˙˙˙˙˙˙ųÃDž}¨Øˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‹ä|Ÿ"čâ8Fƒ$#20ŒŅˆŧaG">lĘr>Gv\2@ƒ 0ŋČä\ˇ0äĢä…īū"""""""""!Ä4"eîŲË˙˙˙˙˙˙˙‰˜2ᙈ\wŦ.=ŅnŠ˙“H# ~ˇ_Q†˙˙˙˙đ¸Ã_ũËxøp¤69 ąČQõ}ũá:ŒˇT˙˙˙˙˙øAâ#ē˙Ŧ5xa|dãĨ?˙ũ˙˙˙˙Č+˜p†ĮŋĒā„˙ŋ˙˙˙˙hƒAüÛ˙ī°—† ´¤WÕx_އ˙˙˙üC‡đŊ‚ ÂĮÃô ˙˙˙đÂXãßb†úƨˇT˙˙˙ūûà ¯ęÂ_˙˙à ũĐ˙ū°A˙˙7ũá žúÄ?˙˙×÷‚ Ã˙đ—˙˙đŋüu˙ø ŋ˙ū˙¯Â]C˙X˙˙û…ūōŨS ˙õ†˙˙ũ÷øūŋōŨS˙˙˙øO / /áŦ˙ũ˙åē§ßūđÂ˙˙˙˙Ŧ|?˙-Õ?˙˙áūđÂø_ü˙ūüˇTūúà ˙˙ø_÷„ĩ‡ëņ˙˙ī ßYnŠ…×˙Ä?˙ū˙÷–ęŸÃø…˙˙ü%ũ`˙á!˙˙ ūžĐPÚūūÂ_˙˙õ˙˙ŽķŽ[âũ|./˙˙˙ņ+HČÖ qü)ҐLĢÎŌ–WTPĄuáBPŦDDDDáĒ9Į&9ČeŧÂ8‹ĸņ#ÅÆ`Ž3 G GĖFˆŧGČųŽ.!R>GČä\eãA0\eÃaŽ ͑p…ŅpäpØf‰˙‡ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙ôˆi8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆË†@.`0b#Ę]ČâŸĖFŒÂ8‹Ŗ1šds#įķâ‘ķŌ˙Ay|{8âG…q8-ÉJ sB؜§0įÎk'gđTB¸đRŅėËF9AS/ ‚ˆƒ“DDDDDDDDDDDDāÛÎ<Ō7˜æŦė:ø|%˙˙˙˙˙˙˙˙˙˙˙˙˙áŧD2P„DDhOÂ""""""""""'a<…ŗŗôRō>#äfUåYŸÍOš˛lŽ"ėģ.Ž`!p6ƒ90`Sē.FxŽEŅr#ä|ĀBņ€äpÁpBčĀR8h0ĨēĻ˙˙˙˙˙˙˙˙˙˙˙˙˙ü5 øk†""" â""""""%)"8Fâėđ &hޏBäG\99t\. dpåĀĐD;é†xĄ–āKŋÄDr“B"""BŖųTGD^5f„HEŅ ¤pÉ ˛áÁ˙˙˙˙˙˙˙ւÂ|_㈈ˆ¸ˆ’äfHDžJ p—äCÃPĄáx]â"7ˆ_˙˙˙˙ī8[x~˙ø A…đíd"+QÄ{$"$P3ĖÍÉtD°˙ „°Â˙˙˙˙˙˙˙˙đĶžÔ(žF2B.‹ÆĖæ ‘čfpÁ Ã,Ā/!đƒE<†Čw)ĘÂ'ņÎq3ņ-JsqÉAü3q ŗ13Ã:æķDãËĸ”2>CÉķŅŧŽ}|>;B""""""""$QÄDDDDDDDDDDDDDDDDDDDDD†@f9§ķVRxLėFD–F×åē§˙˙˙˙üƒ+‰ Aœŧ)ÍfsY ÃqĪÅ9XWsņNR qzãžܗ’ƒLŠ‘(S”‚œŦ0ႏœåÁœ§#r ög*eaPNÎsqā§*A,/ŸŠãAāÞĪÅVQiph?žܧ*91‡Vj@ʃaNaĪdøˇ%Č/"""Cšā‡r7"A@ä(ærœ¨&9 rܡ$9 h Žd†‚’Wá… ÍŠŠIHÍÄØˆˆˆˆˆˆˆˆˆâ""#B""""""""""" ÂŦ@™Ų$RF"ã.‹Ŗ‹‘#Æ2<\!t]‹ĸäGČá‚ālr8s„|)øön5Ŗ„iŸĘŧÄaEŅDyG#Dc>dq0—˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūPg žáúˆˆˆˆˆˆˆˆˆˆƒˆĖŌ4F†|CxkÁL¸¸ī‡†øŽ"'bĖíIų!Gŗē8#Ų!cˆÍE Á›ą‚ ˙˙˙˙˙˙˙˙˙ęôvIB…ø\DDDDDDDG+yÄJŖÂĄ/ū đĄüGà ˙˙˙˙˙ô˜X D yŲhbįe‚aĮpeÃH¸Ѓ#ä|ō.d|Žd|ÁÃ#GČäf‹Ŗ͙<Ëĸņ#ä|Ų‘Ė‘ķFqEâ83ŲĘDkPō!x a˙ōŨS˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūĸ$3DDDDDDDDDDDDDDDDDDDDDC0!‡šd|՞F3y›…Ãø\0ŧHATrDDDDDD|—"8 „s< ĖŅZ…;Y^ ˙˙˙˙Ü´„ZÆ‚PaÉas%ÆÔ!ˆ3—\ÔŠš Bˆ& ڞ ƒŽx)ʃÁNSã°[”æūN ÂV~$9 99 9Į!܉¸Čn"""",¸˛áœ¸4EČÁȸCŒģ.‹ĐĖ…—Œ€…Árá Œŧiš43FB"ŠåBņ׈ˆˆ°„HD"""7B""""""#ˆˆˆhDDD–Œ¸ÎÆō 0@ōiÆL2ėã.ËĸņR8¤xŧa—ŽEÑķ Āh#( Y Q#æķD^0‹ĸčē.‰"$3؈F"čÍŒ#tc#ætq0˜)nŠ…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ã|,CÆ*"8‹ˆˆˆˆˆˆˆÉ8#ŗ\Š‚äžuFdaƒr#,Ä0– +üDGÃXƄDDDNąŽÉQ\Ō=G\ō=F™äPŒŅėķ.ŒŅtqČų€Á€e. b–ęŸ˙˙˙˙˙˙˙˙˙˙áŧ-ĸ[("m,p´B>TDDDDDDDDDDH)ļ@ō8Ļãˆē(ÄqEŅxŽfˆÆn.Î"ėÆaĖ#ˆÂ8GĖØPÂ֖^\‡!ŨxBâ""""""""""""8p_˙˙˙˙˙Âā‚á˙‡—a˙ņÁ2”íōVˆ&REB ‡äGŦ¯čpŋ‡ËuO˙˙˙˙˙˙˙÷=„ĖfHü7˜#oĖGŒÜ\5Q ĄÄD†¸ä3G n9Ŗ9\~*'‘ÆpŗĒ$F3Ņ#Šo'ČņĻGō(‰B"ˆĶ QŧūOž™å˜ČqŒūGÍ{āŋü.!mˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ """"""""""""""""$3G—ÁöG28ψ§ČĒČy(Dĩ˙‚˙˙˙˙˙ūC 49Č8įƒPærr,rc™ĘrCž rœƒx&9("9!ČlrČL+Ž9qnHsŽg5˛čē/Čē.‚eãy1‘ķy#äxÁeÄ0‹ŖŅq—EÆ^#™ˆ9œCˆđøaCRæT9‡4 g‚øđTĘÂ$A°§(„"'‘šGČä]eãĖÆo#…#ä|Â/Čâ.‹ÄxÁ‹°LÂ>GČäH‹˛čē.Š">a#4Hķē.ŽŊxK˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü&â""""#  ˆQÃD\DCˆˆˆˆˆˆˆˆˆˆˆ‰ D* ķŅÕá¨\ CapÉ ƒ (@¸pĐ˙DNĪyčęGtqEĸ1F3Hūas4iD F Üc6ftc#äs0\ €A˙˙˙˙˙˙˙˙˙˙˙…ë˙Ä(ˆˆˆˆˆˆŒˆˆˆˆˆˆˆ‰ŽÂĸĻÎĸ›#C#ˆb.‹ĸņæz.D|‘ķy¸ÆGÍä|‰ãŲ„HÍ#žĄ ß"ŋáÆ"""""""""""""˙˙˙˙˙áx÷đĄŌ ū[Ēaotē˙Ép˙׈˙˙˙˙ķÄ^#ĮŗyŧgŗŅä]^#ä|‘ō>`‘ƒ#ä|Ž aĒa•ŠN¨ã„IŒ¤Y*D)<Ņ\ō$~vR°á|%ė8RŨSÔDDDDDDDDDDDDD†BräAČŖˆˆˆˆˆˆˆˆ‰÷—s°¸6 o0‹ĸė đ¨xAt8…˙˙˙˙˙˙˙Čw Ö8ˆ‰Pmq xĮ"ŽAÎ9āÚ&Ä.Ž Äq˜Ítc7˜F"ã1‘ãGƒ‚¸% Ãā‚āČpx)ʂ9 ‚Ä† ÞŲČü^6fƒ82™ÆtkFhā`Ūy˜Īįƒ#ˆ\ 28drėšō8)Á ¸„pØ\0G#v]"8…؀ς8R8(#´4ČáL#ˆčhĄDQˆ‘“æču…˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä ÎZˆˆˆˆˆˆˆˆ•‚%™Úxē8ĐŌ.‹ĸá ĸâÄ.!ˆŽEã#ä|‘â도r0fŦ¨Gų’ĄĪFŖ âđĸ"'cĮnŽ"DqF3ČÆa3āg8ŒÆpeŲqņt\!x‘ČŧG28`ā!ŒĀĖ Gâ.! AdˇTŋ˙˙˙˙˙˙˙˙˙á눈ˆˆˆˆ8ˆˆˆˆˆˆ8ŗÉÎĘËĄČ(ƒqäQÍ Ė‚œháļ9Čmš Ŧ)ÂoúgÚˆˆˆ‰nI˙˙æJ`ü-‚B™%Ⴀ@ƒ˙ū}cbø^˙ĩЅrĐÍ;?˙üX Ä/ł˙ËAH8…ĢE¸ A˙ņ¨YōĨĸKP@ƒ˙ü%qBË!ž˙ÂB!ā‚,ĩaÆÁQ˜_Ã)” K*ŧ/ˆd”ŋ à ņRÂø†1 ‚axJ8 Ą ž!RüB‚ Ä( AņRÂø†@yK âå,/ˆd”°ž!R˙ !Č–™Ų¯ą äE a‚@Ã˙ዲāū[‚ ‹Ž,Iuá•€„Â1cž @ƒ ‚…Á Bā!p@ƒ¸ Aˆ\ Ä.cRÂáņRÂūä”°¸|B‚Aä”°¸|B _°Aˆ\ đž!RÂú ä”°ŋâå,/ø‡ <Ĩ…˙Č)aÎÔB đ¤g˙âP@‡Č–&(˙Ž@tđ AüPAX/đÄ.@x- ­x… <_ĩ€đ\^2Áwƒ ø‚ AāđdsACü(X€ Ăįâ Gü@leptonica-1.86.0/prog/otsutest1.c000066400000000000000000000130411506303110300166410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * otsutest1.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const l_int32 NTests = 5; static const l_int32 gaussmean1[5] = {20, 40, 60, 80, 60}; static const l_int32 gaussstdev1[5] = {10, 20, 20, 20, 30}; static const l_int32 gaussmean2[5] = {220, 200, 140, 180, 150}; static const l_float32 gaussfract1[5] = {0.2f, 0.3f, 0.1f, 0.5f, 0.3f}; static char buf[256]; static l_int32 GenerateSplitPlot(l_int32 i); static NUMA *MakeGaussian(l_int32 mean, l_int32 stdev, l_float32 fract); int main(int argc, char **argv) { l_int32 i; PIX *pix; PIXA *pixa; setLeptDebugOK(1); lept_mkdir("lept/otsu"); for (i = 0; i < NTests; i++) GenerateSplitPlot(i); /* Read the results back in ... */ pixa = pixaCreate(0); for (i = 0; i < NTests; i++) { snprintf(buf, sizeof(buf), "/tmp/lept/otsu/plot.%d.png", i); pix = pixRead(buf); pixaAddPix(pixa, pix, L_INSERT); snprintf(buf, sizeof(buf), "/tmp/lept/otsu/plots.%d.png", i); pix = pixRead(buf); pixaAddPix(pixa, pix, L_INSERT); } /* ... and save into a tiled pix */ pix = pixaDisplayTiledInColumns(pixa, 2, 1.0, 25, 0); pixWrite("/tmp/lept/otsu/plot.png", pix, IFF_PNG); pixDisplay(pix, 100, 100); pixaDestroy(&pixa); pixDestroy(&pix); return 0; } static l_int32 GenerateSplitPlot(l_int32 i) { char title[256]; l_int32 split; l_float32 ave1, ave2, num1, num2, maxnum, maxscore; GPLOT *gplot; NUMA *na1, *na2, *nascore, *nax, *nay; /* Generate a fake histogram composed of 2 gaussians */ na1 = MakeGaussian(gaussmean1[i], gaussstdev1[i], gaussfract1[i]); na2 = MakeGaussian(gaussmean2[i], gaussstdev1[i], 1.0 - gaussfract1[i]); numaArithOp(na1, na1, na2, L_ARITH_ADD); /* Otsu splitting */ numaSplitDistribution(na1, 0.08, &split, &ave1, &ave2, &num1, &num2, &nascore); lept_stderr("split = %d, ave1 = %6.1f, ave2 = %6.1f\n", split, ave1, ave2); lept_stderr("num1 = %8.0f, num2 = %8.0f\n", num1, num2); /* Prepare for plotting a vertical line at the split point */ nax = numaMakeConstant(split, 2); numaGetMax(na1, &maxnum, NULL); nay = numaMakeConstant(0, 2); numaReplaceNumber(nay, 1, (l_int32)(0.5 * maxnum)); /* Plot the input histogram with the split location */ snprintf(buf, sizeof(buf), "/tmp/lept/otsu/plot.%d", i); snprintf(title, sizeof(title), "Plot %d", i); gplot = gplotCreate(buf, GPLOT_PNG, "Histogram: mixture of 2 gaussians", "Grayscale value", "Number of pixels"); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, title); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na1); numaDestroy(&na2); /* Plot the score function */ snprintf(buf, sizeof(buf), "/tmp/lept/otsu/plots.%d", i); snprintf(title, sizeof(title), "Plot %d", i); gplot = gplotCreate(buf, GPLOT_PNG, "Otsu score function for splitting", "Grayscale value", "Score"); gplotAddPlot(gplot, NULL, nascore, GPLOT_LINES, title); numaGetMax(nascore, &maxscore, NULL); numaReplaceNumber(nay, 1, maxscore); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); numaDestroy(&nascore); return 0; } static NUMA * MakeGaussian(l_int32 mean, l_int32 stdev, l_float32 fract) { l_int32 i, total; l_float32 norm, val; NUMA *na; na = numaMakeConstant(0.0, 256); norm = fract / ((l_float32)stdev * sqrt(2 * 3.14159)); total = 0; for (i = 0; i < 256; i++) { val = norm * 1000000. * exp(-(l_float32)((i - mean) * (i - mean)) / (l_float32)(2 * stdev * stdev)); total += (l_int32)val; numaSetValue(na, i, val); } lept_stderr("Total = %d\n", total); return na; } leptonica-1.86.0/prog/otsutest2.c000066400000000000000000000120531506303110300166440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * otsutest2.c * * This demonstrates the usefulness of the modified version of Otsu * for thresholding an image that doesn't have a well-defined * background color. * * Standard Otsu binarization is done with scorefract = 0.0, which * returns the threshold at the maximum value of the score. However. * this value is up on the shoulder of the background, and its * use causes some of the dark background to be binarized as foreground. * * Using the modified Otsu with scorefract = 0.1 returns a threshold * at the lowest value of this histogram such that the score * is at least 0.9 times the maximum value of the score. This allows * the threshold to be taken in the histogram minimum between * the fg and bg peaks, producing a much cleaner binarization. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char textstr[256]; l_int32 i, thresh, fgval, bgval; l_float32 scorefract; L_BMF *bmf; PIX *pixs, *pixb, *pixg, *pixp, *pix1, *pix2, *pix3; PIXA *pixa1, *pixad; setLeptDebugOK(1); lept_mkdir("lept/otsu"); pixs = pixRead("1555.007.jpg"); pixg = pixConvertTo8(pixs, 0); bmf = bmfCreate(NULL, 8); pixad = pixaCreate(0); for (i = 0; i < 3; i++) { pixa1 = pixaCreate(2); scorefract = 0.1 * i; /* Get a 1 bpp version; use a single tile */ pixOtsuAdaptiveThreshold(pixg, 2000, 2000, 0, 0, scorefract, NULL, &pixb); pixaAddPix(pixa1, pixg, L_COPY); pixaAddPix(pixa1, pixb, L_INSERT); /* Show the histogram of gray values and the split location */ pixSplitDistributionFgBg(pixg, scorefract, 1, &thresh, &fgval, &bgval, &pixp); lept_stderr("thresh = %d, fgval = %d, bgval = %d\n", thresh, fgval, bgval); pixaAddPix(pixa1, pixp, L_INSERT); /* Join these together and add some text */ pix1 = pixaDisplayTiledInColumns(pixa1, 3, 1.0, 20, 2); snprintf(textstr, sizeof(textstr), "Scorefract = %3.1f ........... Thresh = %d", scorefract, thresh); pix2 = pixAddSingleTextblock(pix1, bmf, textstr, 0x00ff0000, L_ADD_BELOW, NULL); /* Save and display the result */ pixaAddPix(pixad, pix2, L_INSERT); snprintf(textstr, sizeof(textstr), "/tmp/lept/otsu/%03d.png", i); pixWrite(textstr, pix2, IFF_PNG); pixDisplay(pix2, 100, 100); pixDestroy(&pix1); pixaDestroy(&pixa1); } /* Use a smaller tile for Otsu */ for (i = 0; i < 2; i++) { scorefract = 0.1 * i; pixOtsuAdaptiveThreshold(pixg, 300, 300, 0, 0, scorefract, NULL, &pixb); pix1 = pixAddBlackOrWhiteBorder(pixb, 2, 2, 2, 2, L_GET_BLACK_VAL); pix2 = pixScale(pix1, 0.5, 0.5); snprintf(textstr, sizeof(textstr), "Scorefract = %3.1f", scorefract); pix3 = pixAddSingleTextblock(pix2, bmf, textstr, 1, L_ADD_BELOW, NULL); pixaAddPix(pixad, pix3, L_INSERT); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); } lept_stderr("Writing to: /tmp/lept/otsu/result1.pdf\n"); pixaConvertToPdf(pixad, 75, 1.0, 0, 0, "Otsu thresholding", "/tmp/lept/otsu/result1.pdf"); bmfDestroy(&bmf); pixDestroy(&pixs); pixDestroy(&pixg); pixaDestroy(&pixad); return 0; } leptonica-1.86.0/prog/overlap_reg.c000066400000000000000000000233751506303110300172060ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * overlap_reg.c * * Tests functions that combine boxes that overlap into * their bounding regions. * * Also tests the overlap and separation distance between boxes. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Determines maximum size of randomly-generated boxes. Note the * rapid change in results as the maximum box dimension approaches * the critical size of 28. */ static const l_float32 maxsize[] = {5.0, 10.0, 15.0, 20.0, 25.0, 26.0, 27.0}; /* Alternative implementation; just for fun */ BOXA *boxaCombineOverlapsAlt(BOXA *boxas); int main(int argc, char **argv) { l_int32 i, j, n, k, x, y, w, h, result, hovl, hsep, vovl, vsep; l_uint8 *data; size_t nbytes; BOX *box1, *box2; BOXA *boxa1, *boxa2, *boxa3, *boxa4; FILE *fp; PIX *pix1, *pix2, *pix3; PIXA *pixa1; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* -------------------------------------------------------- */ /* Show the result as a kind of percolation problem */ /* -------------------------------------------------------- */ for (k = 0; k < 7; k++) { srand(45617); pixa1 = pixaCreate(2); boxa1 = boxaCreate(0); for (i = 0; i < 500; i++) { x = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); y = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); w = (l_int32) (1.0 + maxsize[k] * (l_float64)rand() / (l_float64)RAND_MAX); h = (l_int32) (1.0 + maxsize[k] * (l_float64)rand() / (l_float64)RAND_MAX); box1 = boxCreate(x, y, w, h); boxaAddBox(boxa1, box1, L_INSERT); } pix1 = pixCreate(660, 660, 1); pixRenderBoxa(pix1, boxa1, 2, L_SET_PIXELS); pixaAddPix(pixa1, pix1, L_INSERT); boxa2 = boxaCombineOverlaps(boxa1, NULL); pix2 = pixCreate(660, 660, 1); pixRenderBoxa(pix2, boxa2, 2, L_SET_PIXELS); pixaAddPix(pixa1, pix2, L_INSERT); pix3 = pixaDisplayTiledInRows(pixa1, 1, 1500, 1.0, 0, 50, 2); pixDisplayWithTitle(pix3, 100, 100 + 100 * k, NULL, rp->display); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 0 - 6 */ lept_stderr("Test %d, maxsize = %d: n_init = %d, n_final = %d\n", k + 1, (l_int32)maxsize[k] + 1, boxaGetCount(boxa1), boxaGetCount(boxa2)); pixDestroy(&pix3); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixaDestroy(&pixa1); } /* -------------------------------------------------------- */ /* Show for one case, with debugging, and compare with an */ /* an alternative version. */ /* -------------------------------------------------------- */ boxa1 = boxaCreate(0); pixa1 = pixaCreate(10); n = 80; for (i = 0; i < n; i++) { x = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); y = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); w = (l_int32) (10 + 48 * (l_float64)rand() / (l_float64)RAND_MAX); h = (l_int32) (10 + 53 * (l_float64)rand() / (l_float64)RAND_MAX); box1 = boxCreate(x, y, w, h); boxaAddBox(boxa1, box1, L_INSERT); } boxa2 = boxaCombineOverlaps(boxa1, pixa1); boxaContainedInBoxa(boxa2, boxa1, &result); /* 7 */ regTestCompareValues(rp, 1, result, 0); pix1 = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 50, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); pixaDestroy(&pixa1); pixDestroy(&pix1); /* Show the boxa from both functions are identical */ boxa3 = boxaCombineOverlapsAlt(boxa1); boxaContainedInBoxa(boxa3, boxa2, &result); regTestCompareValues(rp, 1, result, 0); /* 9 */ boxaContainedInBoxa(boxa2, boxa3, &result); regTestCompareValues(rp, 1, result, 0); /* 10 */ boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); /* --------------------------------------------------------- */ /* Show for two boxa that are greedily munching each other */ /* --------------------------------------------------------- */ boxa1 = boxaCreate(0); boxa2 = boxaCreate(0); n = 80; for (i = 0; i < n; i++) { x = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); y = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); w = (l_int32) (10 + 55 * (l_float64)rand() / (l_float64)RAND_MAX); h = (l_int32) (10 + 55 * (l_float64)rand() / (l_float64)RAND_MAX); box1 = boxCreate(x, y, w, h); if (i < n / 2) boxaAddBox(boxa1, box1, L_INSERT); else boxaAddBox(boxa2, box1, L_INSERT); } pixa1 = pixaCreate(0); boxaCombineOverlapsInPair(boxa1, boxa2, &boxa3, &boxa4, pixa1); pix1 = pixaDisplayTiledInRows(pixa1, 32, 1500, 1.0, 0, 50, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix1, 1200, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); /* --------------------------------------------------------- */ /* Test the overlap and separation distance functions */ /* --------------------------------------------------------- */ box1 = boxCreate(0, 0, 1, 1); lept_mkdir("lept/overlap"); fp = lept_fopen("/tmp/lept/overlap/result.dat", "wb"); for (i = 0; i < 3; i++) { /* 9 1x1 boxes on a 3x3 square */ for (j = 0; j < 3; j++) { box2 = boxCreate(i, j, 1, 1); boxOverlapDistance(box1, box2, &hovl, &vovl); boxSeparationDistance(box1, box2, &hsep, &vsep); fprintf(fp, "(%d,%d): ovl = (%d,%d); sep = (%d,%d)\n", i, j, hovl, vovl, hsep, vsep); boxDestroy(&box2); } } lept_fclose(fp); data = l_binaryRead("/tmp/lept/overlap/result.dat", &nbytes); regTestWriteDataAndCheck(rp, data, nbytes, "dat"); /* 12 */ lept_free(data); boxDestroy(&box1); return regTestCleanup(rp); } /* -------------------------------------------------------------------- * * Alternative (less elegant) implementation of boxaCombineOverlaps() * * -------------------------------------------------------------------- */ BOXA * boxaCombineOverlapsAlt(BOXA *boxas) { l_int32 i, j, n1, n2, inter, interfound, niters; BOX *box1, *box2, *box3; BOXA *boxa1, *boxa2; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); boxa1 = boxaCopy(boxas, L_COPY); n1 = boxaGetCount(boxa1); niters = 0; while (1) { /* loop until no change from previous iteration */ niters++; boxa2 = boxaCreate(n1); for (i = 0; i < n1; i++) { box1 = boxaGetBox(boxa1, i, L_COPY); if (i == 0) { boxaAddBox(boxa2, box1, L_INSERT); continue; } n2 = boxaGetCount(boxa2); /* Now test box1 against all boxes already put in boxa2. * If it is found to intersect with an existing box, * replace that box by the union of the two boxes, * and break to the outer loop. If no overlap is * found, add box1 to boxa2. */ interfound = FALSE; for (j = 0; j < n2; j++) { box2 = boxaGetBox(boxa2, j, L_CLONE); boxIntersects(box1, box2, &inter); if (inter == 1) { box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxa2, j, box3); boxDestroy(&box1); boxDestroy(&box2); interfound = TRUE; break; } boxDestroy(&box2); } if (interfound == FALSE) boxaAddBox(boxa2, box1, L_INSERT); } n2 = boxaGetCount(boxa2); if (n2 == n1) /* we're done */ break; n1 = n2; boxaDestroy(&boxa1); boxa1 = boxa2; } boxaDestroy(&boxa1); return boxa2; } leptonica-1.86.0/prog/pageseg1.tif000066400000000000000000004043621506303110300167340ustar00rootroot00000000000000II*4ūh ¤|Žą†`ä09܂9ÎS•3Yė VˆŖâ""""CŲ €Ürr9!Č7˛C”99*ÅÂDDD†@,š'3’ĄČäsá@ ˛C 4Įã'DDHŽ"$2rCĖr9Üš”šų‡!Ļ>CYĮÄDDHdãü@ŧäW8ävVr đVÚ΀ŪC“qė†HlX!ãœr lr”9 ‡&9C“—š ãœr(攂‡5Ęƒš ä+‘ŽC0r ä‚AXsš‡)Î9’ĘVPĄC—eqC‘*ČqĖ91ÉS”9‡ x9Į \r°9 LDDí"#ĸ„y‘ķ4GFÄÎærc”ä C]ÄDHrc‰ˆ„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆĐˆˆˆˆˆˆˆˆˆˆâ""""""VEō9Å# 7ˆˆ[aĮ;/F#¤G¨3‘Īˆˆ‘tGŖl q @œŽ*""wĖŽ346ĸ"I„#lášGĩ/‘Ņ˃‘à Hčē#äs0Čād8ˆˆ’Œē#åŅEŅėŽ…ÆG#˛P„DčŅ$3`Ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōĻĶ˙˙˙¯÷¯˙˙üގâ8s…Ņ´aķˆŽh”äaËĸ>\ČųĖŽ†a#äpĨķŲtqp„DDDDDDDDDDDDDD‚Ø+&Tpūd(ŽôDgķ,åČŦoLųšŲŦS‚“ÄtT2A ĸ/PC ęšĻ……A“0Ø åŧßG~ŠōNGč—_Ü4kŅml Ôî ’™NĖ’eGeȎ! ÍĖ‘ĀĖŋ˙éîaúßūˇ¤ūúūūõé^­Õ7^͝‡[a:ũŌm^ŨĮOM‡A7ČãĨúMˇÄDDDDėŅÔGGīøũũ}+¨ũŽŖ‘įŋŽļŋ[wĒöĩo§īéūž´ŸēëKŊ“ûđœpÉķũ’Ī˙˙˙nkÅ~ƒĶ˙ø¯ī÷ú˙ŋëužĢÚŋū¯]Sõû÷ũ~ŋE¤˙üq˯…äĖ'˙õÁ˙[˙ëüBūū+ׯũ _˙cO×_÷˙ũĒđŒū7˙ø_˙­ųu˙ ˙áwÔ/ŋˆ^žøŠ˙¯˙˙ëü%÷˙č×˙˙ôŋ_đ‹˙…ūXū ĸj_Ûü/đ×íß˙ģWč'˙˙ü%˙ũß˙Ûū_˙„\_đ‰Į˙›ú˙‡žc˙†û˙˙ūŋŋõū—˙ûûŋú_˙ ŋôĒ ˙­ŋ ū?äũ˙Ū×ũ}­˙÷˙˙ũ˙ú_˙„ŋúëöŌ˙ü7ú öŋÃIŗ§ūū՚~Ģ˙]ûõũ×ukå ũ˙ŋ˙û_×ŌûûÛũíĢk˙k[i}ŪŲ˙uoûí}ÕsŨ˙kũ×ë˙_ëîO¯˙f‹÷(_áôĩüwŦS %¯Únņũ¯ ˇZ¯iÚßuč=ëm/Ūŋ˙u˙÷´ŋūõû_ŦōzūšvĶ–í6/Ļ“V!ĻÅ[iEŨąq [K^ËĻŌ¸0Kû˙°ˇˇ_kĒÃ]ė.Ŋ„_}ŋKɲ™’‘B 4Ú $a› ļh9Å´ƒbšM6Ŋ6ÂI§qļ”žÚKĢŲ6•ÜAŨėTCģ#ūÅZjÆŋ˙kéü›ƒĀgL‰ˆˆ2÷ ØL¸†'UIÁNĶV…û Šv“L Øa$A§"¤Ø¤Ķ‘ĻŠ´éÆļĶí­;ĶM+KˆwÁĐ šĀ0tįPn"""""""""""" Đa0ŋ BOļM&^L$īa2W ´ƒV™ …„M4Øk›Ļpƒ5OM2@48ϰĶ6 XˆˆˆˆˆˆˆˆˆˆˆƒL! !ÂaK„UˆT›% xA§÷h†xÍž>ˆÉˌd3A”3Ŧ¤ ^˙÷ǝ­ū×˙˙˙¯OLxM4 ‰@ĖØLh0ƒdCą’'‹™á ėš Ō0Qå&lŽ?Ĩķ˙Įü†˙ß˙íš‹T]¸ļƒH؇EÄ"p‹ļĐL"oE„Âwa | „Âv­:VŒ?Kë†ŋ˙˙˙˙’ļ§’ļÕ+ö“Âm‘]îÂFƂy=š„]ļ ŅwŋˆÂô"šA:Ę؜2Ī‘†lˆdCxÎ<¨d2!ĮVHĪúĒņ˙õũy ūC4rō–õ ¤ēíRo¤[iŌēŪ‚dšĢlŒzWRWIļGöK퇮U-UQęEŽÕBia&ķÆmš fEÆC B€ĩ”â˙ú˙˙ŋâõo÷tžę¯÷§§ũ+]§Ōēo§úvúiũWš¸iT$îĄÂ Â.īá a¸DáééZ„MÜXDŨĒ,A?ūŋĨ×˙ņ]¯Ž?jžõ­ÖũĻŸŽ­zßk =ë̤xÕčīGz\z ĐTáô–•h&ŨUXĐM˛8 ›EÜ ƒę‹ŋ˙ũ˙˙ū¯¯˙_üWûĐ˙ŨŋõõâŠ}(­%’Eix¯KJ´ļ%F!i=:^éRZM˙Û÷ŋß˙éÕ_ēīũ_Âõ˙Ģõîžßûú]ZĨé4––Ē—ëĨԑÕ֕ú_Ĩ˙˙˙īŋîģ¯˙×˙˙Áj^ŋīų` ÷˙ū´Šu]%Ib—UÕ}WUKÖŊŠūˇ˙ũũ˙¨MÎ=ũŋ˙˙Ņqõūŋ˙ą˙;˙üđM xŌÕ$Ŋ.̤—].•­zÛ¤´Ģ˙˙ūŋ˙úßīû×÷˙á˙˙úūOû˙ũRéU„’õUUÁ.’õô•k_KKK˙Ŋõ˙¯tÅzßÅ]ŋ˙ī˙ū—û˙˙ŖOčÔÕhBÕ*ëЅŽŊUõß˙_˙˙˙ũûcũß˙ęûũ/ŋũũ˙K˙˙ņŌn—ĩęJĨ^ŊpN—KŌTžĢO¯K˙õŨē˙˙ģĻŊlŅ{ŋ§ũų?ú]˙ũ‘‹˙˙ô´ŋá~ĩ^CHBú¯éjŠ&ŌĨZK˙˙˙í˙W˙vûKßuõîŌ˙īķOÕ_˙_KúzIU/ĨKIj}.—Kûz˙˙˙]u˙ūÚ¯Ø0—´ôÚÃ[¯ĩØaXkûû oõKŊ/ūß}%˙ú˙_æĒŠ/˙¯_Õū˙˙ŋū@‚÷uOcUÛXļAļŊą ‘`U„vÚ b¯ģNÖõŋúŌë/ö——Ngę_õ.ē0¨%Žéz^’Ö§“뎗˙ũë˙˙"õ Ķ °h6˜ĻDaƒ_Ļ4Õm+iƒObą•Sžímt’ôĩ°’]Yõj´Ģ̟āō?Ö¤]--+õ#ųŌ˙õŋ˙ŋūZûkö dn ŠTŲZ ÂM; RmRi˛(ôĶišiĻ›ĻŧRkņLWabPâ–) %=$ĸēŌ¤´žĐ­/Kū˙˙˙ö"""*"%""&`‚ ˛„0„0A„Ķ „Âiĸ ũĢM>¤ÂĒĄUE4×A Šēl%Ō{iXA6•ĨސĨtš˜/˙ëņ˙ŊˆˆˆˆˆˆˆˆhDDEą$bĐh0M Âi„MBiĒahtÄ.‚{Ä(ĻĐ@á„ēĮ_§˙úøˆˆˆˆˆˆˆŠAąZ`&ĄÂi…Xb˙ī˙˙úč8ˆŒŗuũ}~˙ųny]_˙˙˙˙úß×˙÷˙˙ũŋ_ūū˙˙ũ6Ú_˙˙˙˙ØCa%˙˙úīūâÄ+˙˙ũ˙ūZâŠũ}˙¨ß߯˙˙˙˙žˆ/=?˙˙˙˙ŋ¯rn1¯īë˙üÉC>ˊ"+&SÄ^ŋk˙_ūž ¸((A‚ ˆ‚T č3ĄqŪÔÍFv+í˙÷˙˙ü h5L Âad-„A„ې gq“sÖõ[˙Ŋ¯á÷tXævēhŧĸíĸíęmaĻᓠ†JÄ4’°‡ÅȂ%bž=☭īßŋАĶĩ¸ģ¤î‹†¨ŲĢI´› Ą&Ōm Øa4͝‚ ží§˙ũW˙ŋúŨZm[ÛÛôÚN‹ĪO´ĶAĻĮģ˙U˙õ˙ëŊ>/ēZ[¯Ũ9 ƒ­Ö°Ŋ ũ?ßõ˙×˙ūēWŪßŨp›]oë­PNũëĒ˙ö̎ūņ§Fúē˙­˙ĶÖ¤ ¤ĶžŸī¯ē˙ŧĶ(#0dXŠš#ĸ:>‰ČĄff¤ėę×QŌéũ_Į_ū–Ģ'ôēĢU˙˙ŨuāĄ ˜Aœ!`˜&˜C0†ĮÖŊ÷äži?ŋt ĐŋWIWIR]$­5õŋŋUū¨¸hZ.Pl!ĸoL"o}-/˙ÂūŨ&zßx]učV­5ŋúû×~éŲé;O[n‚tkpŸIt¸¨ĢĶūéXHģ}t|™Ã>FĐÍÅ3gŲ ´ŽĻ:2ˆæHŒf™üéy­ë]$’´×˙˙ÂûŨ&ØMū˙˛Q§I´Ŋ, ÷ũ‘ß˙ØI7úĒŽP˜EģO øNÁ0P˜!‚a0ˆŠé  8AŅÆ¤!›9„Ē~žŋ‚÷˙§Ûn˙q]'W :­pí7ˇž–•ûáÕ6'ˆ}&ÃÚ5Ũ$hl$[ˇT\tŅo\"ĮaZ„č*aBp ˆˆ†UeAEû˛c5ũĨŊWJúûj—ũ~ļŋˇ˙ŖŊ|+ÕŪá/H%´[Ē ÃĒOA: ö OEŨÔ"q“`@Ā0B"""">­ø­ĒŠõƖÃĨÍE˙ūŨZ֓˙QQ §‰P—v’_J´¸• };éi>ú3Õ'ޏ˙„ß ŋūÚU†˙_øØŌ˙ÕjĢčR˙­$•.ąATWô’ĨTąUĨČŨ%˙ü-§…ũ¯é4˙“˙ģ×ūũ}jŊ¤[ĨKIitĒÅGI-i.ēĄ ūū8žEĮ˙įzQ ôMû×øh2n’˙úZõĒũPZŌTŠ%­wé.ŋ^’ũũķŽÕ˙ūØI?îŋüƒcĨ˙¯IRUĒéa'IB]—ĢÕ*IIkŌIŋkévŦk˙ūô˙_úTŊ˙¯¯Õ~„/ˆJ…Rém¯礒úT°H‚†×úõØĒKīnō1zD¸M˙˙õTŋÛŽĢõëJ * ‚]/ŊPI*˙­q ûũ?˙fŸß¤ īŊÕ%˙ô—ŌU­ĨÁrĶĒęŸä´˙ũt‚ Ô(rˆ"7˙=këöē˙Ō“Ž›­/˙I$ŋõ]i}i×Ĩ¯×VôĄ*ũWĒɛ {ĨéęíZīÃIĩŊPß?jûkūŠ$OíÖŨ}.’ÕEu¯^–éĒI-­u[n•n!Õ1› Å0ĐvŠ.}¤›tÚZ_é$‡nŋõYuĨNĩ™û™Ŧē֒ķ˙ū•~įOZéĻà ]ėˆ=ũcj6"—†WiZMŌĒi ‚IAÚJÚJžĢ] ĒŌ­uĪũŠuäëĖũKŦŋ—^]ZZųĸĻ›“OaU;#„ƒa4 *â°Å1AŠAۘ$[°ŌļŌõB°•iT0I¨a$*K´qĮHWJļĐôõVÂčV" ˆ;0„C „ ˨2ÆÁhCė ÂaWčAU!ö´°ÂTÅlBĻ*ĸŠi5MXĻ%:ŠĒŠa„l0JYK—cˆˆˆˆqâ""""""[ LjM!PaSM0ļšv˜„ƒ6U4´ÅWÄ)7¨™j2*Ē—P „,""A„Âjšh0M0¨0ĄStXížĸ"""""""0‰wi,"ņ ….‚J’lG¤õT5uIʖ*ĒëJŋ]:ëõ§HBĒ^<˜dŒô™øÎ9Æy &iœJē3à „S ‚Ļa 2ä4ųœg™NÍŗĄ—Ék:éMÃĶĻ= ‰¸úa4ĶL&a  ŋ œ:† Ũ_A:N œę‹ļŌĢ‹„‰Āh¸ëT›‰ßUƕ-*¨¤Â3Ւ¸IĐT—åēYœú]Ké-z#ĸ´*%FžĩŌß4ˍɔv7ˆĪ;õõũWJĄ~—ĒŌŌę’[IöĒ*`Ĩē´SÄfFD2ék^—­%ĨZ]iV—ę•…Iéû]L”Ã… 0@ĶNŲuX^žē„’ÖĢŌ˙KéXöš§wÆ(Dá„\4ôІwWëŌJĢĨˆUúÕWëé* ŦD„]ÆÜ,&Ōm=w֒˙¯A/Ĩé/K_ÅXõLÉI~Tu(zļ“hŨiZ—„˛ģ×õIt¤ˆĨÕ-V´’XIé|Ĩõâé{tã8s˜¯ÕVŊi-RÖĩékėB“XM?W_ÛŽžŊ0‰:Œ¸g6NįOõĒũuÕuëëZ¤ŠūÎąŅļkŠ$õ]5_õÅ˙vƒMĻ'a†ļēIQ…—YuŠuÎ:/æk^ēKUKY´¤W5a0D% ŽL Í$Á‡âøP)D\ΊCž.E˜!˜¨3L2FlČf@‚”3¨R­ 2DjvŸ¯ŪŖĶTÉŌ­ ™:Y;m[K¯]uJ—K\.¤}}-,×ëš$‚‹€Â°BÂ&áĐ\"c†´Aũ‚4ė  5>Á à !H3AIĘH|Μ`Čc˙Ԕį\”/éīŨđŨ[ a.) B¸¨¨ĻŌl!Zē_KĨŠƒĩI‘]¤ėˆ=>ls°H Úĸíĸīk6$]ļĸíĻm‹„N!4[†‹€é4\p‰ŽEģ4¸Pš~‚$Ø"$ȘK А‹BĮņúĻŌŌūēŠ‰‡UM¤—ĨaqPÛ ˜N“l á’Čd+x}&Ã$é(I6ÉeéöéŌm‘ÃI¤„î‚t„ė7AŅpŅ­áÃĄaßûá4kÍp˜DĮ˙Wŋė&!STÕUS …_ēĨAEUÅ UíÖÕĐĨ˙Ŋ×ĩn).î“m>):ē[ĨīIjúMĨͤ˙†JÚM˙x_tģŖcAÃ&7˙ŋ˙†0BĐa0…Ļ „ L*aWQ Ļ‚3ļ ˇKõ¤¯í˙ŌkßéúWÕûöëŨ'J˙¯öë :N¯étßū•Ú0üŅDFYpB6 ĨČûūõßûū+ūŌ¯ŋÚņkô-zaWŌnõŋū[ŋmUĢ˙öÕ˙ķNŸ¯].´4Gûúõ˙úÜ*úB¯ĨŌ¯Ä/¯ØĮ˙6Ԇ;Æ˙ÕūļĢÎí˙J¯ëû˙kېWí ĩ˙°ūKOáyÁ+žđõ˙ũŒ>ÃŋCW~8ûúãÁ.YUo˙˙˙¯ī¸ũ$c˙ĩá~Ąyz˙Ørõ,[˙,^í7Ãaũūûkņ_K˙o˙û}Û¤ŋđ‚}ođß˙á˙Û¯˙\2o œ^›oånš.ÉũūO0ŗâb•´žë¯˙ûŌb_é%˙ûûũ/˙öī˙üRö˙žéīnē&?O\0—ūŋ˙ūė%˙IëÃŋļ—˙øo˙˙ëÛo˙˙é?_}ūÂL1 ßī­´ŋôŅë˙õûkī{˙¯ß÷‡ģ˙ßĨđá˙ë˙ŅØ¯Ŋ¨ˆũ×ë˙īZ˙é_øŗEũ™˙äéĩũŧŸÉ˙ūÉ֒Uaļūī˙Õ˙öņûĨ˙ˇ_Úéëūf´˙¯Û[Vū×[°ŊúD•=¤Ú_ūēÖ§ˇ7‡ü?˙÷ĩû[_´­´“ėļ— “×Ō[ vÚZžøi°Ám=ŠĩØa&í÷ļļ¤cí}ĩ´‚J˙÷ļŊ䎟ü‘íđƒL0ÂI§›a$Ķcm$áú§CƒVŌNí&.)‹éˆr$ ˆv]:WQLWM§ņT’E~ļĩ_ũ}¯^˙lB´é6)›LBMļFôĻŦŽIąIŦSL&“ mšcaĨíTqj›I„ KuÔCēūđģwú[ÜDDeĀ!E„ !Ã4"'\0ši aMN¤' i’´ĶA‘Ž1 )ĻŠ‘G Ķh Âb“´Ą¤í6L'Ŧ0ǚŌh0]ĩâ"(ȈˆˆˆˆˆˆˆˆˆˆˆaA„L&+ôNH(IąQLŽ &)4A„ÂL Ũ4)ÃAôœDDDDDDDDHxaa!„īO´?ŋ¯ę솕XĒmSaD-SHėēØ&v]’ļd;÷Ô&(RŊÖ.īúvA2ēĶĶ´Ü/ -UT's˙ßÛëīųÚP…ōC"qhÖ̈́'Ķ(&˜aęŋø!Ũŋa ą~ĢßčŸđÛ —Ņ>†'ͰՕô\´Í3HĖ3B:fŲķ:šd„Q›gVšļj˙Ōumöƒ ƒ´‚mēmx(A‚j0Pƒ ‚  „B!2 ¨#c<ōã$ ’P) d<Ų"ČR‚'#< ˛ļ“§ūęúMÛļŸBĐŅvЋEØl š7" Qi˙-ÃÂi„BM55 „ai?uúOöųO›#„N) Ž„F‘Ļm-{#‹¤á‘Áé6ÂŲ𹠍Ú>:iĢIŊÚ6Qxа‹†t\7thxEØa:î˙Ō{Á0˜M0ˆ'ŗá€PP˜ ėę3œgÅ'§‹ŒŌ.g'ĐSHÁ fc$´dí$Ü&ĶáØMŦ.[męO7¤û¤ÃdvGtiĻŪ’} ÷ē0ųĮ¤úÚ;ž"ŅąŖ[ģráBŅcˇŨ°‹€Ņ‚iĒ`…Ļ §ÆŽŊoé÷á:ūĩ­ũã[M?Ĩ¤ū¯Ķl–5ŊŋÍ?÷˛XGu×ۄdW ƒiǧH=č¸hØŅ­á“™­ĸīú_wß˙˙÷˙ß^Õę­oÕ]*ŊvŸũ˙Z˙oi§Ũ&éa6—oëîČíē ´´›dvô›Iũûū•˙˙ņö–õ|wM˙ņŪ‡÷Ŋ$ûk˙ēõūõ×Ķ˙õŋL'dįí¯iõŌ˙˙˙˙ûwë˙˙¯ŪŋÕŊŋJ÷Û˙i?ņKõžŨ{ąŪ–ņ[¯īû˙×˙˙üÂĩ__DĶŋūXߓÖIÎožž˙ūžßņ_Kø÷ēžøáĮú˙ū˙ëîŋ_ĒéŋúKĐ_\ØOŊŋ—ü5ëˇūđŋõÚáoú´ŋŌũĨßūÚ˙ļŒ;ū˙n˙˙ˇ¯ũ×CÛũ˙ŋm[úLz_Ėé‡üēƒ“Ģōz~ŋ˙˙ėWīÅößūßŧWûĶŨė~ī˙ąū“ē Z_Ž÷„[ÛßĻëú˙÷ūõ˙ û˙zđß˙ū÷õ¨ëū?ū˙ ļA-ûFA8a˙ˇ˙˙˙ß˙ôa?äûĩ¯î÷_˙ˇûÎ~ųÕw_˙ëÅW_ˇŊF–ßöŋĢ˙[ikŨ˙ÚUũ×o¯öh¯ë'^—ÚŪŪš#ũëë’#ĨūP¸§đú^ß÷ß×ëĩmnũ?íZũūĪnõ÷anėūí…ßŌ÷ß_oÛKמ¯Fkû_ĨßüĄÉ˙ōđŌ°Ú_ôŲÕdC.ŊŠÚO´ļ3ũ6—ėmĻÅpa.ëĻÉ^ÖēM˙īũĒú˙ÚĶú›ßûSļŋˇŋŠ ą„i°ÂQIŨÛi´Ķ­ļŠĩkjšjÔnĶ­­Ģa%íė*Ģ~à [˙jˆZ4Ō˙m%Ļŋ}.Â_ia+\+aiØbA4ÂmŌiĩÕ¨bmE!*vĐvŌ 1 )ƒ–ÂčT„à ›i+­ÛāâUŠß°­ŽĮtÅ{lpĐy{+fϏ`„A‚ †Õƒ4Âd B[Pƒ“M7  1  Âa"Ŋ†ČŖĐÂíǧbí+I:ŋM8:cã”b""""""#/jÁ‹‘ 0A„@ÂhSiĻļ^šmoLņQ 0Ša&4×IņcąMDXL#3„0ƒ4Õ4A’pēũfę<.ē_†—Ō_bģT¸A°–$—°ÂAąUÄm‚â q yj’Ø' šd‚2Č%šThié…&Æ)Å; rųÂS˛qŅ<„û_¸t‚Ú`™ā„´IPSÚš,9júV•„îŨ"]Xa5¨C°ĩÆÄ?¤‚í]4:%õõsąO-ÁSxIņ"~íz<ž'×ĒÚKŽŠ?ƒūP´ēߖ§ĸtŸ8ũtī§Öŋ]'˙–™œ0A” ž.HN(D(;g\Ųž2A#qdƒH†Č+O˙õKõŌz߂„Âh0TôÖ  „&0Â Ä gQž0AŸ3ƃJÜģ$ã҇šŖ6“äU÷_qĮÄËFļ…°Aļ Úš-áÂ..5ëAˇ|;@ÂoÍaĮ4flh„™r4"žH#ĄZyļ–Q‘dGà ‘å†G á7[†Gx ›d}6“i;´‹ļîÂö‘pûKh¸Ž ē›°BÅß Â@đƒÄ2x Áš„(6&V­°Uúá4ęÛ%6˙úH>õ%z`’o˙§˙  ÃŌčÎŅp÷‹ŅpÁ 'ĸc´g{ ˙ûUzˇĶu´=?âßWũ8é7ēXdž“øpÉãŌÃ%oH7O°R(ũüÖôiëúę¯×֚ímWn’ˇīMû}ũ ūûęŨ:ņ¤ęëPƒĒØdž“ûĢč.×û˙Ūü~ĸ+˙õĨī]}}~õã÷ÛõĐ÷˙é—_ûĶ ũ~°Û˙ū˙í~Æ˙õũŊ0¯ũ>ũ/ū:]?ûũ ū]aęŋ˙īŋė?˙˙‡&F1_ü~/Wk˙˙ī˙¸ˇt˙˙˙i|?˙īÛú _át°­×ŋ˙ų˙ũ-ˇ÷˙˙˙Û˙ũūË/˙pŧ™LÕ˙ë˙K Åk˙˙ą^Û˙˙íū8˙ā‹Z-ÛwélŸ˙˙ūū×w˙˙˙đß˙ëáŋĐ]˙ĨūTŨ˙oũũ+īÉ˙ÉÕa˙˙ûöŧ6ß˙ĩīú_ũĨ˙Xn˙á-{¯ÛKÛ[ČÍęë˙˙ü=˙úøo˙¯ôžđģrcũđi~ëĨzö[ kîŨZū~ÛIZû|Õ˙íūKīöi¯ūßųBü=_ö5ä]_ūÅ-ąÅßëa;Ŋ?˙üôà ũûk˙íWí¯Yôøna› 4鴓A Ķ´ęí…I ÚL\kv]6•ĩ÷I†ÂZũļŋv–Ŋûa°—jŸßíĢļƒ‚ U0šl ˜MĻEu1 „Ú|m¤žšv–Å-ϰm¤ŸŌĢŸ­Ĩ 'ą]§ûqa†`š &]EâaiˆA6‚ á„0šh7ba ƒ ĶjÁ§†DD;͈wIÜDDqi„ !ƒh0B&x2a>Å]†™+ ô ˆLŠ: °‚ ‘GÅ'tą`ƒÁaƒ 8al&kũˆˆˆˆˆˆF[bëڏåĒ‘ŒŠŲŪĄ Ķ;5;ȋ38ˆ˜ˆČÉW;*É ˙ ÁŖ XL)߃tʖ˜'\0ļčŅ÷[°ģa4ԗ]ßftí˛TēīQÅÃn¸zÚ}û˙¸ØōÔS5˙˙^w˙˙⟠ÎķR6gŲ ÉÜy"‘Ÿ˙§¯ũpL& „&&A™˜ ōRJ"Iâãōq” ŦŽd2ôYAæo!Š3VGD§Ų+]:l!iŖ;F7hÖÂ„Ņ¸LŊPh0ƒˆač3fxCi‚"Pˇ  ‘ŒûįHÁArö¸dp'ēAŊę܄ķ[ģĒ.ߤyFē-ŨĸíûJ‹ĸ⋏„MØCDĮi… žá`…‚˙nM¤á’ƒŪ¯Ã>“í:M˛;pÂ]¤č ö—ė ƒzOOĒ ĩA6mPęĶõõ÷CĢ_^•ĨONÂâ’ņîO?îûé:ŧtØdoIŌpá’ĘXdŽČĮ.?V÷Õ}.ŋ˙õŊíû[Û˙]+ëũ[a i[´ŪŨ6Đ˙˙ãüG¯CßWų+pÂÖ×ũ ×WąŌõũ}÷ú¯õô˙˙ú 5´=ą_ø˙š9÷čc˙ˇëõüÕüū]Oûü8V–áŠÂũ‡ŋúū“¤˙ŨNģ¸˙O_˙`‹Ü!đžüēëˇũüŗŽ˙õ1ßũú_÷k˙î‚vá˙øx˙˙ŨÃT˙ŋéėW×øK ū“ßøoē˙ôMĘ˙ØKŲ:ûKüa˙[ßI˙ī˙đBx˙øīūŋ“¯ũ|Ŋū¸o˙ū¯|7˙ßë˙ôŋÛ_ĩ˙ęĖô oũŗEë˙y:īû4ܟ˙ŋ˙ßöžØJÖŊ[TūŋũÛ^ĩ˙m}Mīˇö•ĨúOuũ_^!{azaXŠFÚū”0™žĄ‚ZVŸ¯ l5ũŌÛ[_ûuüũMv›I§ąjšPÕ´iĄQwąÚLZkė|Cē[KŠbŊUÕ+]:i„Âi†“ †% 4ÕĢļ)=ČŖâšbĸĶAĻŌmCI6Ō ´Ōięœ4—øˆˆƒ"Lax0ļƒ0 d-AŒĖ0A„ÉYqŋ + Œp˜¤bĄ†˜Aš œR Âĸ""3Ąˆˆˆˆˆˆˆˆˆˆˆƒ!‚ˆˆÉŽˆŊ\D\FĩRČQ˙[ p1Kęâ%Š<ˇÁ×ˆė#2ÕŒˆ_ VdMÆŒŅ’WF‡ęØTgi… ėP0uE9öƒ‡'tēwė&nTÎôŽôŠœgņ‘-VŊũ§ÚwwH*/Tė0¨Šį‘A2ƒ.dY˛1˙QuÂĶŋūÔ&EüÉ˙˙%›’”Œˆ:ÛŊ;N‹Ëļc°ĩũĶĩĶĨz˝ņqĩīMŋũë]jģÔė“˙§;KYHžšzPDB.‰Ų^Pf§‘c:#‘ĒČÔhŠ|ƒKœ_˙¨˙Ēįogi?W]u32ˆ`ša ÂA„ Č6  BDgÅD%Á(— D-“ÂT‚!fzhœh`Čdš_ëúõëū@× Dā7 „,"î‹pÂ.č¸`…ĸↂOŒ"á…Oļ×ûAĻĄ0ƒ‡÷DžlĪЎ™ˆœÂ#S"#M==|ËQo\/¯j~ÚN‚t&Ų)dX;IŊØeÍĶqa“ĨđÉĪz6X(´llļ& „ *a!< ÍA‚  X3ANIÅ3#9dr!Œ‘›2a Ę@¤čč“$÷"¨Û"Oš‘û_¨a=:MĶûMĨ´Ât›dĸ“ōYWd˛īģ‡v¤wW׍´]°…„[ēEŽŅpĐ´ŅŖ„„LwiÜC0BÁ8aA0PƒM†'Čá ”0˜"!†ˆC‘č4Dųr:‘F ÔgS:Åß˙\u˙oļ65úĒßÖŠūŋ˙ôŋũ˙˙Â^ŋŋŊ7Ž/­Cī֋ũŋ õø/˙ū áŋßũt—ë_ļĮø˙ū>ß˙é˙˙ū—ŋ˙Žũ/úo˙˙¸_°˙đKđ‹˙˙„Xú ˙īÛōĶ˙åŠ\0ģû˙×˙˙˛~ôĩī)×í˙ú˙ęŋØoõõ×ūūûAˇúá.˙Â?˙ūNī×ũ˙˙ũáö`ēË˙ōۇŊŋi˙ũvNŋ˙˙ûßõú÷˙KũÃūô–Įú_˙ū‚é˙˙ū˙˙ m†qŊ/ßëÚ÷­íĢy÷īÚ÷ēöũ˙ë=ŋ˙˙ūūå r„ŋáŊ˙W×˙˙× Ÿ˙×K˙˙éa°Ú ÛIŋ×˙Ķa~ĐpÁ+M8jģwëu°Ō˙]˙˙_˙ûû^Ö¯÷í+ë¯ë˙ŋŋÃoßZ˙šBŋûôļÛV˜¯˙īļąkąąL_õbõÛUО?ŦCī†UīēŋĩŌÛ¯ôģKĩŋķß˙vŋú˙ūŨŽ/ë¯ûöŋūO˙‡K ŋ˙„ 1 ‘G ĶiĻļEzi´ƒM6ĐI†ŖNŲ}Úl~ŸßĻÄ6E[ŽēíÖÃØa-ûn›ôßûO_mÖÕŋún—Õŋö×KĖ͟Nē2viū˙dęė&˜/ “„Đdœ´ÕÛ#p•; T6šL&¤„Šč Â0ƒŠtlôļÚ]îˇ"⍇¯tŲ6”0œ]0wĮŨÜ4öm­Õ­×ēû +[žŌëÕÕīIĩtĩûXˆˆˆˆˆ‡Áˆ†DDC+@˜M0˜L Õa0ƒb‚ §ĻEzvœ4Ŗl$ÆÛÚ§õ`Ø´Øâ0ąv•„­+‘0Sa—×bžÂˇß§Ōē[öÂ\DDDDF„ ĶX`°Â„M5iĻÅ4Å% šė2P•;ØI´Čß™ņQL4“Ļ˜ØĢMĢJ!ÚV“ä‚›[lû„DDDDDDDDDF„E„B Ádõ>…&§„Ô* Ä$Ú &EĶj)‘GØ[Y}´ÚIƚuKb 4 `„0„C Lp˜MAÆÄ&M†ƒm&˜aR_DDDEĸ °B ~‘"˙ĩ-“!ūĢ˙ëWđÁm&ƒØ¨Ļ˜A°ĸ.(Ž[„d­‰Ú^v“;RPĄBdFgĻ šŲl;īčŅIu 4ÁNËŗ%<‹(l=:Ĩ‡SPT ėŦ!H2œŠrúĩI0ˇww;Õ0˜LČ(RœRēSĐ))ŲC(geûę>wRũßp´aŖXhÖŨ Bø;ūÁ¯āāû°˜Z¤ éÛ¤KᄠÃŨ×˙¯˙â!Ņc{[[m$v¨ áÃËz/ļõũ$ĩz§Žŋ&ZOĐl–ãāƒÉ:…$ Ô2( tåuĶ6ĐeFm’3Djfˇ“JŅOzĨūļ­ĢzĒO˙đB„PˆbmaĻ‚`˜A Â„ Á !„Í0E„É”Fč3 á)4ķĨč?˙ŊRoķ %OEÃEŨkhØÃ$\QvĐØ Ą pčˇatg á\đ˜!a0ƒ:ŠHč2$)¨Šr*ŦĸYŸũ­ú˙˙§ •ô¤ôŌM¤ÛH&Ōm‘ÛiÃ#‹ē=:AÚ¤Ŗcƒ´]´kaxA„Lv7jEŽÂ į  ‚čã>dæ`ˆAm­¯äÄ`ŽÔSĻa“ŽqÚ0ķ¨Î‘ƒ@ÉSŒë›3Æu#ĻbQ˙õĐoÛIÕ¯WŌt›i÷§ūŌt›oJŌÜ0'I¸NnŖeÚ6tlh¸ŠBp‡õøB, Á īá °ˆrÂa 0!ÂũJä°flōĖÔÍFS˛XÉy;îŊ~ˇß××õú_ŽÚ ŸŋJéëIŌt'WIŌm]]&ëwkdWi5ƒ˙֚/HÖûKFĮÁ#XhØĐ‹EģC &wAkĪš*hA‚!ü– 2†hcũã§Ôi˙÷ø5_ļ5kūúŌ_×í/ûØJÚ°÷„õX7Oū+#ĘM†Ié7Ŋa&Ų,Ō¸IļGdyAŲ˙÷IoH6áė#e;EŨÜ&ļŋëú­úß˙úņÖ(~‡øÅĶĒ}?ēŋ¯V“úģžø˙Ļ­-Ą_ĩ÷ĢtĄnĶ_ĶMëÅũ¯‘ŋtmîčØŲėŪ]~ęX—˙˙īäęōXŸ˙ũ%ãHEW‹i}{öë­}ŋŋëö˙ßęŨũęëŌÚ˛O˙ūoŌu˙m„ßõ˙û˙ūžž~X,eų{õ…üBū˙˙÷ī˙˙īĮÚZūˇ¯×ë†ũû{Ž•ú]?O˙moū˙ū˙ū˙ũWų“ÂüÅŋ˙ÛK÷ûú˙¯˙ß˙ßÛö÷ų>Ø˙ØÃ ˙Ú˙ũˆ_˙˙˙˙˙˙ūqü"âõī˙˙ī¯ūúú/wē˙ßûũë ŋÃúáÆ­z˙~öˇ¯ë˙ū˙Oūöîūđ‚ūŌÛ_nŽŌūë§īŋ˙¯u˙÷¯ūģKŽ›ūÛ×^ūO8_úėz5lĶūÉ͝˙ūPžÉÔîî˙(^ųBūëũÅ}„Š˙ÛKĢßŨ˙âŋū×ũ}˙˙öūļęŋĄú­­ékk˙ûjßĒ^iŲĸũtŦŅ6ˇŲ:×ũvėWėWõ×Z˙˙û×ŋÚßî]~ûÃë˙˙ļm4Øiuļ–—ūļļ—v’†ØjëíĨöˇDëūÍßdëįOækø+ŋ˙õŋŊŽ˙Ú˙ībŸüoũîī˙ö—§ ôÚWu÷ũĻÛVZģ C |0žØJ„Û[W_žÂúOIčáI'§ú˙­É˙˙Õ;˙rīõü7ūúûū˜JÚcļ›IXM­Û"ķö.8†Å-ąLzą]ÆÅwl0“ %ĢĢi*§jh××ím&×˙í-÷ũé×û]Ûõ˙÷˛u˙”/ėPM„Âm Å Ļ!Âth0›#tĶ  ļĶ&›H5i­‹bĸĸá ãa„ŅF–B†ëų[$4‰¯ëŊĩá¯]ĨúŨzŨtßŪžHE"Ō3O­¯ļŋŅ1Áa.ĻA„ 4 ÁÕ0šh;LaIÁ0ŊĻ“A°•0Ķ[[Û -ļWŌv˛)†’ļ­¤Úūé+›ÛŌų„ˆ!ī† Ŋ¯ĨøM_úˇ´ŸÖŌ˙ˆŠ2"""""""""""""""3Fáa27°M27°ØŽĶtĶN͈VØI´›I4Ķa¤]+iZĮ ´—ØĨ Ã ¸Kûĩl'¯°aaŦ4Øa/ž“ˆˆƒ ÁŦ aa`ÂvņjžÕ„áˆLBbk†!Xhpƒb“A´Ûƒ „HÄ ƒB“Tîę/JŌb˜Ø¸ĶX;^""""(čˆtcÄDf¤EĄ!ˆ0B 3B Âeeš°Â÷ / ˜A„Å2(ö*´ō ö­?zJô“¤FDDDF„DD\L&0ĸ ‘Ä0˜ ÂĢ *ØI}|wÃB""#ˆˆˆø¯KÔí"K_ÛVKK(Cô— °ĸ† ƒ i•Á$¸Õ´Å1PÁ$:X† „Âb¨x3ī@@Á0숈`˜IÄV2mĒ–á` ; VvIņQ‹æ‘•jĒ ā   Ē ũûõÔ˛*,ž'Đī†ƒ‡ēgjlƌŽ;*™ØĶ3õžâHWûO§ā˜AĻe'kũ+k˙ĐđUûúūždh…ũúûŽ?ūž¸´é¨;_9”ų-X_×ÔŽ˛ŽŌŧ|Dčąø Á4#„Љq”’!˛>,äZÂT’æ ęIĖÔō„u‰TF™/”ëP™ß_ánáĮ ˙„íē  0† ‚hFÆA“°ƒ3ą ‚e>FjĄS˙ũĸųģĸī¨e¨MR67{EŪŅĄ°HĐŅq ‹€Ü:5Â.BŅo$ĸœ0@ĖČØÍ ƒD ‰Ä%¨3—äRdR€ČÃ=“ öORC lŒDEaNļCfģUü•ŌŋĻž0ûî­īI<ÚAÚI´Ō ˇzznDxA; ŅpÜ8!hąČN-øL´hĸĮ`ša†°Aš†pÂfNĐg~ƒ0A”29žŒKĘ#u".fƒ: č3 Îƒ&2Flķj3Ē6fŖĩ5/ÂöũjŸíŌĻ˙IáīKW ¤ßޏa7NômŨ‘i á–scT›AĐŅą…NkjÂŨBÕt‹pô-ØB ˜A…TDĮ  ‚‚a<&`ša‡™s!& •ŠHŒ¨˛“!™͙¨ˆlöa_z˙˙ßÕß˙´Ŋ[­Õ˙}÷Wô¯ØAŌ„—¤á’t•+†JÚļȎäXa&úw‘nÂ}„oFēMöœZ6BEÃAҞ‹†•C‹F†°‰ŽÜ-#C˜ė Â&„ÂaƒBĐÕ˙míWūēt?Uūū÷]wTß×ĩŋŨũͤė'a=63ũ„÷§IŊ&Ōm’„É\8dŽ•†F>ƒūč&÷9'i6PAÃ,đÁ$č Ühģ¨FČBÂ' Ļ˙ŋ÷ũžģũøũ/ûõŨWúŋŋū˙ŽŽ›Û^ĢëûęŸIũƟ§WhRŋ]_øO6“´õx?ŋ†JÚNû†Gtõ˙ūë˙ĩ˙˙y1,–]˙°Â˙ŨõˇcĄö#ž¯ģû{˙ū–ˇÚĩÕu]UũxũīŨ6¯úŋͤáũ§Ļī˙˙ë˙­o˙ũpBžŋļũũ˙ž˜°Â÷īī˙˙īßņŠ˙úŽ†× bī¯tūŸ÷×_ûÕĢŊ˙˙Û¯ö҇˙˙˙÷ž˙a?öŋ˙}ōĶá‚Ũ~ŋũ~ßīĒ˙ø…nĄ˙ņúí‹_רīŨŊēíūöŌ˙˙ū˙˙ 0“˙ŊūŦ?Û¸×Ú˙˙˙ž—ü°ú˙–Ŗaūåˆõü1 ëđũwU˙˙ ū*=/īû˙ß÷K˙ŋ˙ÛĻ˙mŨû×˙˙}{áũū‚-íĢëëå—û`ŋü?ßē˙˙2īŋ˙ūOųB˙ ĒũîŋūÅ˙ Ĩ˙_ûõ˙Ģ˙ Ÿ˙ūÂ[o˙˙ũ†‹ū˙ĩ˙ˇŪ—ũ5Û~•ũ¯ö—ŸßøĢũöođÚ˙û¯ũ˙_öž˙˙ ˇÃ}_ßí„˙°˙ŪŌ˙Ĩ¯ūûú˙î—kúīū˙ū#VWû'Y>˙ūŋ˙ŋûŋëĨũßßømļ˙˙˙Ãiû˙ķŊˇM…DŸē{JĶí>˜a-°“v­Õũkö­6—ö•žÚû¯īõÕ×úũûu˙ūNģ'ŌÃŲ:˙Ų?ųBũëûđßžÚĮM4ÛJ.§°oMĨąv”r%Šƒ=ՋžÂû ũZÖŋÚ˙¯ÚZ˙_û[ĨæŠ×ęž××Ė÷Ôú}˙ëÛ_ÉĐmũūøĻĄšlS"ēl&˜AôėS"‚nÅ4ĶLRl4¤AŨĢĶN=ĩbīJ:˛üWujģ×ZM¯z˙ *úŨûimĨ~ö–˙õkū˙˙˙¯ƒ ĻŽƒ …ĩĶ  ÂaA&ČÜ …AĻE$Ø„Ķ !27ϘaSiHƒĩXvŦmwąÛ[ it°ãîÛjÛKb˜ĩ˙Øø0–ė0ˇëęØKØa%ûhÍß÷öūę×d1aF!`ƒ$‰‚a†^ōÄ&˜PĶn*A†doM6)ˆPÂA†Aīv°ømĨoí{ēMŠˆv“kwé1¯}—õŧ'öŸ˙uĩIÄDDDGaŽNme!4׆E1 i’°•-騄Ŧ&G 4ė&˜M¤ÚdWØZ´M4á„ĒÂm*qI×ībÖÕU´š˙B(Čb""""#,arĀXa†0˜A„4îᅆTÄ ÂŠģPÄ ÂNÚMĻ*Ųá0ƒtŌi°Â[]-'ņÄDDDDDDDDDDC9h!„Ķ Ŋ‘¸%ˆWaŠkÚĨõЈˆqÁ—Ē^ž!P!l%zIC bŧËQĨfQEJŠ%a&ž1;Wl(ˆ-Ícŗ5´Č#;ögt…RÉ˙iß-ŌdFv(‰°ę–îé‚i‚fIF!l”˛ašŲgnDͰŽÉåZÄ?ĒØ(PĄt)ØlĨĮj +ŽEˇ|;îßčņPļ¯ë“<ėWqŨ î>ŽīŖCúz˙ųŲ"ŧqw­Šn"3lך3T*#­ŠŅkĒūŊūV׊Œˇ5gØA„›390A‚œ`‚ gÄĖãA2g…adĖķ ęi”™¯Ž˙×úė‹w§¤Ü&Ê6“ė7Ē ÃpĶHĐÂNš‹Eģh4ĐBÂEÛF‚#l!i‚0ƒ33„‚"LÎ  Bˆšĸˆŗ4ÂH"œĐHä_˜2B50E@„0 ŋķ´ŸîÂÕ§dŦ7Ą÷Dē ČŽī×ÕˇŦ_č6ÂAuh ƒė m§˙ũ _¸ ŸÅ'­ĮåģŒž0d‚Ér3#ėĐĘ3†hƒ"FlČfU••l”äģ5GXÕŪļßęžÚOé?ŋÂ&8`„40ƒM0ƒÔ&`˜L  œâ8G˜A‚ `‚OÂ4‹3Ė>lĪ Š33æũ~ŋīô˙AT]ŅĄ´ĐEÃBHpĄa  ‡l!ŖCˇavaS ‚‚ŦX(A„ ;k˜3ĒÎĻF™­•¤kˆĻš¤ú¯˙û ŽÚ ŌõM´ô‚m‘c ´˜a‚H7oĢ ƒpŽ"wwĒ6m´\4,2æ|ļž`ža Á „ āĐyqt# Č0D8ģ(¨g\Ã46gˆč^feˆņŅA’ˇ˙O˙ũ§_ŋIŲ;VĒė&Õ×Ō}Ã% &×JŌm’ÄėŽŪ.Já’Â;tØd¯¯ŨFÂ5´hĸė0…„ÂapŨâ "Įa0BB "âÂai„üaS@Ī ÁB Dá,3~gk¯tˇŽņzIŋKIūëĄôĩ}Úa; ÷Ūž˜N“ĶûúÉ[¤ÚN‚vGbhhØĐA°Á0šî‚m5FĮ4=m FŋĸŨ„4k…EÃ^áŋũ ž˙Ž.ôEßŋÃ# Ož¯÷éęĒ˙ßī̝^žŨ´aõ[˙ēļĶ ÷§Ē“Æ“{¤Û#ļĐIÕĒĻŲ‘ŪŸI'Ō}'dX˙ƒ'_Õˆ_]]c­/ø}_ÜWû^Įâ˙Įíiũ-zę´­oëWQKiŲ4m&™4všu}i°ÉÚđ}ÚzũëŠī ˙&åkŠu[ũųd˙ūĄ˙˙aû˙ü;§˙ĢVÅoõ÷ũĶM›ß~ĢžÁ$ž†ßîŧ†Ča:¨Eŋū…´ģu˙K˙÷ ũ˙ģ]˙ōęûnŊqŪ˙ƕ˙Įq˙˙ĩ˙cĄ‘Đ^Įúđ×ëĩßã/˙ŋŽŋ˙˙đ‹Š˙˙û˙KžĶk˙,L?÷Ģ˙ęßŋâŨ¸(ŧW}¯ü5Éķū—˙zũ˙˙÷ū‚˙˙˙o˙˙n8˙é‡ßōÄŋüąËŋ÷X_¸rz“ĒÃÁß˙đß˙ûö+ļ;ũģ˙ú Ũõ˙øo˙oŦ6õ˙ˇ˙˙õĨu˙„X˙Ø}má?ģÕwēöûéųBō…×ūPŋëĶ­û˙ëß˙˙nŸ˙ ˙˙˙áĩ˙Ļ×'ô›ũ‡„˙˙˙ŋ_˙ÛWĩ§˙ĩë~˙ėŅdë˙×ĪaŋūÉ×įĐw¯ęÛë˙˙ÛmúũŠŌ˙oíŊ/W­ũī˙˙íö•6ˇM×ÚNŊÖēö­Ģ×ßū˙ūŋī˙ŪPƒßũŊáģūúëü7ø}/û˙˙öûM† đÂ[ęģaoŨ[_VÖVŋ]_˙ũĨú~˙ö¤w¯\ũŋ¯ōUW÷ļPŠŊ~¯_[˙īÄ4ՋŠĻ+ÛA|Sh+狨aÆŨ}Ú¯uĒ~Á…˙vŋÖŌ˙ũĩŋ˙{˙į˙ŗéû\ĶūīZû×ũvEš ĻēMĻTĶi†M°”„§ĶM¤ˇÚ]ũúĻÅ]ȃ´ļŋÛ {kũ„žģøg'ŗ×[i.ĢëĨ˙úˇŋģ¯ö^ČÜ Âh0“íC1H0Å5 6G Ļa0ƒŠ0œ0M0ƒAĻĐM6Ą­kÕ×ÛĨÚjÆgėUŽôˆPí§˙đÂ˙ëÛũo˙ķ7Pe‚A‚ ˆa0ƒ4LĄÁ; lžŸak ˆO Ķ4چ­„“MZ ¤œ>Ú´š´“m(>-oēļ+ēâė5† ŽÃ[ žô""""""#-¸kUL0ĸƒ“MÂbm&Ŧ(Ļĸ“b˜iŊ„͆’´v’lˆ>ՊbÕC\ECOUøˆˆˆ0B ˆ†0B #\Pš /dí~Å 8 ƒk  Ã Ephb a0ƒzXˆˆˆŒŗ#Mˆˆˆˆƒ$„!‚a•fB" $ ˆŸŋ&úk鈈ˆˆˆˆƒĐ¯Ē˙¨ĨĢėĄ%h'ÃJ7ąC † #Ëzã˛ŧˆE/"™)ęv †!ĢM4ÎŌŲÜãąRáQnŅn¯¨P™_ĖŨ ƒ  ˙Ú40ƒSĩFF3ŊY(fGÍ$ĘāJ֓¤ęĶTĶí#>… Š‚ 2š¨8&v†UŲTJr°ĸˇØ8”!ĩD.­$ôÛ˙Ŧ ‚‚Ļ ™÷ĩS´yņÚiŨŪ É[wu¯ÛUu×ZQw\6î˙oÔ/˙úžŪūĶŧˇvCGVuŽļŊŌJEŊu˙ķĩ%’ņˈC)ö`‚î×"ō!—B(3LĐGdt3‘ Ž†‚đ‹äO?™G$\<Á’ Bd7˙„ôûëûĪl(CF†ŸíĨ‚ĐTh‚‚`…„Â,v Ēh8xL Đa‡đΠ§ ’ĸčáŒČŒFf™ŽGHŒĘu˙Ē™)ô˙ZžČƒ°“hØ˙bĩ “ņĒ5ĩAÃĻ‚46ĸŅ­ÂEŤaÛĩA M4*a…ķ0@ĖØ@Ę' >h)>aŸ yâ?Ys42&g\ˆi<ܙPČÉ˙ú÷ °ƒÖ•īÖ–2XK,ŽÚM˛1ëĐH;%pÂI°`‚7M;M4Œė!hˇB.BÂ. …ŅnÁ ƒûÖâgØ Í4Aœ aÄ3ėņÃ8Áfa2qSüĐSž3ã$K83233<ƒĖFg’,õ˙Z_÷ž˙oÕ6Ķ~ĐīģußM˙ūīĶžm¤ƒ/í Ŋ-EįI´‘vŅĄīÛŌ5´[†­;ļ𨡠! )õ„ũ†ô  „2]Ÿ`ƒ*š Cã8Fq‚ß ĒŌ čØũ(ŧhģn"ҭŞyh¸{īëcFwūÃéũãÅ}ēCüWCoí:˙÷÷Vģ_Ũ˙÷Ēoę’ē~…éŋŨmĢ_Ō˙ŌmuôģŊ’„•û‡ •ĩt›A{†JČō“˛8áÃ#†“VüÂÖE“¯đ˙ū\Á`ŋÔ/ĶÂ˙kŨGĮū×øĄūŌûQ÷ĩē¨íū×ŋ˙īÅ~ßõū’ũ4;é_N—ę˙MZŨ7ģOÂÃ˙ņĨoũŋ˙Hp‹úËø\/,cZĩZ×üB¯]x­zîģŨ_˙ū“}m}!Ž×ĨÛ~•ëõͤŨoÖõĩũ=<7ׯĐwũŋ˙đ‚o˙\pEÆū÷ęjōĀ˙…—¯Â÷Éx_^ūŋ˙ļ˙˙°ęBĸ*ëô+žü¯øiãßũ{÷¤ēūÛ˙ôģôŋŌ­/ízZk˙ø"ã˙øEū÷­õ˙˙˙˙÷É× |žœ.“×˙˙îŖ˙¯˙ßūúí˙ˇ˙íéußĨé~õíĖ>ŋ˙K˙O ũ}´Ŋĩ]˙˙˙˙aŋ‚-īUØ^XĮũōĀ˙˙ŋü_˙åsD˙Ų:Ę^˙ŸA˙˙(_ûPŋ_ūãcęû˙ôŋŊũ/m/÷¨˙˙˙˙ü7^—i~qŊŌ˙˙ūõ˙¯˙ŋí­Ž—§úŋ¯ÕŽ—û¯õéu“õQLé˙ĨėWąũ;˙˙_÷ûmV‚˙ô}˙˙˙˙˙˙ũũ˙ĩ´´ž˛‡˙ëúÚ]­íZ˙˙Ûi>õdëÉ˙˙üO(_˙ ú÷˙˙˙˙đÛ^ģëËwnŋ_˙õ˙˙˙ļ–õž!1éZé÷ŨôÚ˙ôÚ_ßßV´ûÚí×˙ũ­÷ëķë'[ô÷k˙˙û׸0Ŋ-ĢSôŋĘW˙ß˙ūÅm/ˇi0“izpw÷ëklC˛>ŧU—Õl'eûTاĒĢ v˙ūŌl/úęÚ˙ö}u˙õ¯˙œN?߄¯ũļÕ˙ōûī˙üĄü,PA„ÂaĻ‚ ˜ ƒĶpœ4“M4âšOb­ÚŠ[ˆqLCęö=Š˙°žÁ‚à 7öŠ ė%ĩĨL0­×ūë˙iz÷Ũm˙ûzû×iūŲĸ÷_˙Fn4XAžÂؤĶNá4›% ÂtĶH4ŲZ‘]OTĶVŌkÜAĒą ŠbÄ>AüU÷ģˇÚũC ˇˇKßúo oĩÛa„šív×ööŌ°ĒŋÚ_ū”DDDDDDDDFMPa0B!„B!„Âh0šgpEĐaPĩ°‚  ƒ4ÂlŠ:AĻíRqwKP ¨0ŌTāí; 1ÁĻÚëtŧCĻ*!ÄqZˇVÅiõ $Ú˙ ßøuÄDDDDDDDD@ʨ/ö^Âh21Á&Čāˇm†“pÅaĻ!^ŌiąR(ö“bi°ÂA›"jƒR ôáĩVØIi4ՋmX¨‡ząJļGíVAÛÅb""""""""#40eÁ‚ e'"B 0ƒX@ÂL Ä+M…Jdni ƒļ°ƒbA´ƒMĶĶ"“NÚNã[NéiCCˆˆˆˆˆˆˆˆâ †DLÖ Âak “„AĻ$Ķ °Ŧ&ĐA§mŌŌĄĄFŧ~•/ĸEí$’T•ĒpÁH ČPÉšl‘”åU§¤…!ZŅOđÁ(0L&TÅDE„ÂaDA‚Œˇ2Œí:‚Ļ × ‡,ãl‚˛ dÎ,Ši…F…&ƌČÔĘANŌŖHĒįiҐ„IŽvŗm¤öS ¤,‚ 1ūÕÚŖEmpŸ^ē} ôš=~˛”¯|l]¤Ÿ›gF@Ҥtdf™QyĢ5˙jžErl?ëâ@Ö<  Œ0Ÿ`ƒ@Î@ˆ”-Ã'œķũt×˙UńÁ ĻļQpBĶEžË DBSgFSįMû]W˙_ŖcdG="Ã`Ŧ ›´lt‚xÂxŒ Ái̓62qM#8)ņ’„ ĐdŒÄƒĖ2A&R2IY‰.uˆËĩũ|•Ŋà „Ú[O‡§ –vŌéĻ‘ą¸p‹ĸá‚iĻ„-: …L Á ¸†ƒ†kа‹€Ņ­Ļ‹EÃ^üa4Âka0P˜L a 0ƒÁ(ĐRxœTBLŠrܖ„d¨N)"0ûú§_í×õJßīá’s@A„\2N —OI6ČĮԎ4õ"ģw´ƒtčÖäG"=ûTt"ŽŅ¯mÚ6A–‚ņ„4-4hŖZ pÂ.Ūm(ĐÁQŖ„Lv0šĶCū?˙ô5īIũ+úšûĄŌŨ/JÚ„ë{?˛PTã§QIØL'í’Ë×=Ų´›I´ŸJÃ#,˛m't›¯]'IÕ&Ã.BҰ4k`ɜŧ {˙×˙˙îŊ˙÷˙ū—k^õûūßĐĩ­˙Tß´Ũũk°´ŋ_Ûhj¯ĩmŌu}&÷Ü:_ØdvŌŌzĻßōĖ~j˙¯ōõ÷[ú˙ãÔRŊ{ŋÕ7öĶ˙îŋ­īęŨzOOēZU×ßūģÛūÂÕÖõvMž˙˙˙û¯ūü/]˙Šõ˙é77ņ_ēéãøãWûŌô˙öŸ˙ņëúëę˙˙˙Ö˙ũ˙ōË˙Á~^ŋW˙ ˙˙í×ëī˙ú˙˙üuę"¸Ŧ1ąī|Põë˙÷ũ˙ūWKO_øEŋü"ãŨ-õ‚˙ūĮÖUđŋküž]E×ôŸūMĘsĪø]m‡°ņ ëû˙ŋūũ×īĮ_ü Ŋ}÷w˙ū˙ũēü#Gúõ˙õī˙Ąđ¸,8}á“÷úÉ˙ō…×]~Oßu˙i?úũ˙˙øK˙˙ÛŋÂ_ŋ˙˙ŋ˙˙øEĮ¸†ÛØxEŋú×úÚ_Ú˙wûi{˙”-Ōųc˙ˇūÖŋ˙åģÃé~Ú_ß÷¯˙˙øAz[ 7ˇ„˙ŋúl/đÂ_ī_jڟŋũũnÁī˙_˙õéŊ}/ã˙û˙˙ŋëŌŨŧ7Ĩ˙˙õb—ØûĩĩøĢAĻ֗ļĢ˙ũĢzßékß÷_Ũ>ī˙˙{'^å Ęŋũ”/í},6߯ûúė4ĢM6“Vm+ļ˜ũžÖŌ˙ũiÛm˙ũ}moîžĖ×˙īë¯Ø[]~ŋõÉ×ūīŸAŊ˛u“ũū!4iĻÂA§„“ ´Öî“a6*Â˙ÚŨ<0•ŽŨo÷ēN´ØS×ú_Ú_iZWú˙ļ•ûk˙ŸNs~ßũ[_úāƒ(DˆCĻ2´ °Â œj˜iEĶũ;bNÅî’r,xļ ŖôŽ\iëÃ_~íƒՆa…{Û¯øa+žÂZęļ˙˙ûÚļ–ëÄDDDDDDDv!27M27 0ƒdn!„´Ōl0’nš}à § (l%i5­§ĶN™ûŧTSŽ’ßą°Â{ 'ļŋkŦ0“ īô Âa0™­4āĶLˇ]°ƒ#$ÃēöJĶQ ‘ÂâÅÚĻČá&ŊÂl$m4Ō ƒ ĶM6˜Ķj-8ƒ´Ž—ŠÄėTvÚIņ52(É"!„Fhi„NđĐaIÁ&…Ļšl&E$Údq6G *) 'dWĻ›MØaƒĨRö„"8ˆˆˆˆˆˆˆˆšˆ0ƒÂ@Â!1M0Ēöa ÃúéDDDDDDDDDDeĻ—ĨëT?÷™ m+I¯ڈ&ĘQŸ&ÉÁ@)ÜvvÜd’!˙ÔíXTÎđŲ™–ŒŠg~‰ú%dēx`°ęŠ‚gni™+Џ‚å\-•ÃÉûí2GmŖĮ\'`š‚ š0A‚ ŠĮ~3ĩFOëwQq§õwûáB,vŒ=4Ķ2 ĩŋ{´>wi÷¤éŌ}:­˙Ķ˙Q ˙wIŌv’|8~[Ē 8˙ūv3ü|qZú§æã[FI˙á}|ėb;IäË×Qņ„ü`ƒÛ50ƒ63 Ę# üC)"0yV3Оso* —Œīũ}UW×ũņiÖ&˜L!a4Â&ė ôÂ!é&vi„;0ƒ(yņO[$yļkõôũūŧčØÕ¸ÄîŅ­Ē„^8MĮŖCF°ÂĸíĄøEÛXLj‚ h 'Š"ėĐgQ eXČyŗ:…$ŅNgP¤  ŒI‘ŦŒÂgL‰÷įOš×ū{u°˜AŌl2NƒÕŽČíč&÷t› Ž‘`Ov‘ą† ¨´ŅoL Á<"c† „‚f€ęhÍ„΂ Á$C 0DJę¤%Á(„Rd\'„°…‚dg3—ĮĄ ˜djÁ™ÅŲ™ķf}ųĢ5­ôéjŨ5ũ—ģOĢĢ=7 ã[a4?ĒM°˜)´kh ú5æÆ(AĐ´lĒapnjá„[†ĐEģEĀhÖéEÃ~-ŖEoģŧ& ˜& aq…L `Š‚eCķ60@Ę3œRqIs8Fq‚'Š_8g  ûëũz}Žëû_W{˙Ģ}éoá:MŽ2Q Ú^ļUŨ‘Å'} č ė$m ÚNÂH:A°ËJ.dQÚM¤đƒ¸pdčN†ļ†ąĸíƒ'ÃEÛBĶ ā†aô[´Ņø(L!­„õúīņo¨´ŋĄ˙˙"īĻū.ŸhW_øN–í=nÉĄ6—ĨĨ{×U ŌoŌmwę’l21áŲējƒ#“a‘Øž?˛#´ltáAÛĸōáŅp˙˙kõø…˙ũoäį˙ŨU˙ũ[I˙îŸĻÕũ}ũ÷ĮÅ[øOOē^˙ūÂiÖФÜ*l?†té{íĨû#ļ-ôwūY@˙Eˆęųi˙˙N˙ë˙ã_ãĄØ[Z˙Ĩõ é Mßj˙ëwũ˙ęß×ß^ô˙ÖŊēévūÖé?Ģëũ?˙Â.?Ķū˙x"ß˙ˇ˙˙_ū+ū˙˙_Ãîŋ˙ąŽĮū?˙ú}˙ũo÷ü~Ÿ¯ëžŋ:/öž_öŨø ŋūŌ˙ôX—ų“đ_˙˙äę˙Ãá˙ūė5a˙˙û^ˇ˙ûĮ Xc?ũŽÂßÖ˙˙K˙†˙č%˙˙˙˙˙á˙˙˙áíė?˙^ą ˙æOū˙˙˙ũ¸jß˙˙ØZ÷OūPŸüéėW˙Ĩ˙ė˙ß÷xAë˙˙ūŪß˙û{˙ūŋ˙˙ķ' šiÃ˙˙æo ūäéoö×ėĶ˙û'S ē_˙˙W˙ŋ˙é˙˙˙øo ß˙íá‡˙˙ˇ_ŋ˙ūÛ‡˙˙¯û]˙×íUJÕ.˙˙˙˙˛…˙ú˙˙˙ŨŨøoo˙ß ī˙ė˙˙öo ˙˙˙øaRĩöKļ—ū­Ē[ׯ˙û×ũ¯ũ“Ģ']{ũ˙˙{á˙ūđö˙˙á}˙˙ûmī˙˙Ũ{bwkà ú…А¤mWģ_ũĢ_ũ&˙ĩ´ŋŋ˙˙ģī§Ũë˙Ŗ‰ļÍ21?ũ“¯ų„ģĨ˙úŲ: ‡°ß˙ūôa7TĶTÚMZ‹Mcjm/âēû×ü0ēzļl/}mĒûkíŸWŲôųôöhž˙÷[}+û ū—ß˙ûöa9´Éķ˙÷ũ“Ēw°­4Âi´š 4Čۚ $Ô4ƒL Ųzi„„Úm%‘rŦSƒŊŠĖ,'}ßė;î6‹`Á[[ûŨîēĩ˙öŌ˙˙¯˙ûJŨ{K˙˙Xˆˆˆˆƒ"Âa†Q‚pS„O†w ¤ĶÂiėP@ôĶiŠM:¨âė]ĒĮîĮÆÚVŦ¤ÚWeūÛ[ØĢ¨`Üč‚+{k˙úļû{_īû[[ DDDDEņ ,0ŽÚdQÂMÂiĻG ›IÚni°˜NÔB†—k $ؤհ•¤ÕĢļŌiϜ5WIWģĩØîĩbŽ› ūà ØMФô""$„ ˆƒ0˜A„Đƒ8TĐdĩ  ÂiĻj)¨„„&›ĸšˆR+„0ƒaM4ÛAąIσ ϚiÕŦ:ĢØ´ĶMŽ-ëâ"""""""""""$IhD#S˜aˆaPálã„ÚpÁ]­ĻÛ !Eĸ¤W 4Âlˆ=‘GL/¨ˆˆˆˆˆˆŠ1؈ˆˆˆˆƒud8#ŦPB}ĐgtÁlÚEwŌH8ˆˆˆˆˆŽ"8`’×b•W°šĩāÁ4ȃŽ#¸a'caˇŒˇÆ[į ™ P )’Ã$Ŗ;ŌĄļ(P™ tˇ‰D@ãŧčžC°ƒčŅ ,Õ3š˛¸LŒeAגųÚVv,ŽAģ§ģOū0ŠĻ IBĘC3A „3,ė¯mɏ;ZŽÂøĐũB„g˙Ũo^ũĄÚi­ß}°áõŌpĐa5ˇ[ũ~ņ“ąÖ.ĸ>}ŨÚŪžē˙Ēūv)įx‰RŌŽ'æO˜"|ÁÆHĖ4wy ÂpČ”öJŲF­Õ]oIõmĩ°íL! ÁBˇ‚ÂeÅ8afa<Ø ”ė¸ÁD#‘ÁÉų‚âpR0`ä!Ė钐Ž?_ũBé?ũmÁÂEÛBF8-ŊíĻM]†đÂEÃZuTč0Bú8xL" ˜&)b’ŸŒã(Í3HDædæjĸts5iē¨]˙ml?dXr$4›dcĻģĐNÁ;é6úI;"Â66 Út^5Ø$la“/F†aĒ.ÃXEģ  ‚‚„ÁP8`™›L @;.2šFlˆƒ8Gã2:ŗ2!”VNEí´•ū;úõëúwūž‡¯~ŸnŠ÷_dæ­§íéÚĻŲ0{߄úũ:Wšˇ˙ēVÃ% ˇ˙˙øo“˜^ŋ~ ūũ߯ë~?ô˙ö<_˙ũW~ú[īĻ˙^Õë×ûÕúĩoB_û˜zũ ˙ũũcĄŪŌ˙ ōęú¯W˙.¯˙„Ōö×ū‡ŋīĩĮûüzŠ˙÷ũ~×WĶë†ŋŨ.ŸÆūŋßûũëaû_˙ú˙Âū¯˙|O˙ú_ÚkU^Ŋzûv—˙ŋņôŋûj+Rššũ˙˙ßŨw˙iíŖëû˙Û^˙ˇ˙¯û‚×˙ųuũî‘:˛f8]û˙ī˙Ņʅģ˙…öūŋ˙ģũĶüąÚ_˙ēŋrŨßû /ü ģ˙˙oúû_īũVēđ¯ūūĢũü˛z˙t˜ _˙V—¯e ëÃ˙ŪÅEk÷ׂ8íŠúôŋ˙ü7ũûiūŪ—û„\W˙߯ī˙˙˙EĮßũ{˙ģk´ĶÚ_ä˙ŊÕo˙äüžŸõ˙ũž˙ØŽ˙øĮé?õũĄ˙˙ũßūÖ_n­u×õŪÂ_õí™÷ûim{mū“¤o__ë˙‡ō…˙˙ūīŪŠ}ûû?˙ŋ˙˙÷Köēn•¤Ú[ī z§_´ŋkôŨ{z^°Õ.˙ž˙˙Ī'Û_ųĀžŲ§ũWũ.īúô×˙˙å ˙ūŋÃI‹ē´+‘tnÅH“Ŋ¤ģ|CŊŠlē§×íēÔ,R!QmŨ?˙ĶKũ-/_ßŗEˇ˙˙uŋõ__ļ­˙íkøŠ|qQA öŠ­†’a6ļŠÔoM¤ļÛi,mHcž–ļ‡ū¯đÂ˙§w°Ōū°Ŋžú×ŋĻžīũo˙Ú˙;„Ô ƒ[ ]Ļē R Ÿ"ēM0ĶTáˆH0ƒAą„ $Ķi†!!ÅßÚ§ÚȰ)q’˙ÅkŊE[Ĩ &­„ûK˙ū×Ն“k¯ūšCˆˆÉÔ]‚`ƒ" ˆ‡ &ŸDtÂiÅ j'ÚģkŲė ˜A Âh4Âv–Ō 4͏í6ģNŠĨĢV.âĶm$ÚĢ‘bļ_tŦüS‹úė-Ũņ§ &dœ˙ÜBi„šiĻÛA0›A0š{´›Q ´ƒb“Ũ7NØĻQ Ķh1ZiģLA÷K¤ÄDDDDDCCB"3 !=†‹D0š *dŦ' ,5ˆ­iĐbIĻĐa2+¤Aĩ˛7û揊EˆˆˆËn@A‚ !Á˛ ˆ‹°™¸ã§ú Ō|DDDDDCTúŌŌ˙c _JšqVŌĻ› Šę" &c¸Ôd‚q–ålˇRʅ; 2ž"ŅØ;¨Uĩ šŒˆgAÇ˙ ‚‚eŸ î#ĩųT^ôîúāˆqĖŗ)BœE#&QO}J⸋¸ppáU0PU"áĪ„OڐŦ­˙îˇ";ŋ†ƒ_UßU˙ĐAßĐ@ۇØL/¯ú˙úO¯!‚wÃNíJæBž31į ņ™Æ 3"@Éķ ⤘ÉHŒ<`Čft0ƒ'3Ŗķ™ß"jŋũ?ū“øÕÂĶ ¨A„*i„Â&&a ‚pSÆAŠh!;.2xĖDBqĐFr/‘<Œųh’õ×W˙†šFĮļ0Á#CEÅ (ģ m BŅc´htEÆ-Ü"≎BâÁQoÁB 5AŠJ`ŒĐSAIpæƒķAIķâõĶë˙ô­õ˛8zAé°ū–“lŽÛ#ŠIļ lh'ļĒOT†_QvŅąĸœ44l„L{¸Mė(Aú‚„ 4š'26gG‘ļ™"5Zû˙ßĻ˙iô­'’û¤é6×NēNékÉߤ­&Ã%y+a÷Ãi:¸ŌAŌtw5´͔^?ģhs]Ãaũ֟õˇ„[˙„?˙ÃÚëēWßäęš ÉĶ˙˙˙ŲĻŋŨ{ø"Ą˙˙ė&8Ļ+Ãßū˙˙÷˙˙ûƒ˙ū‚ đÛ~ũ˙ßč/ũē˙Ãôũoë[k×˙ëíi}îžs~×4_īũ#OĨœNäëÉ×÷īŪ–Ŋ˙˙˙ėN˙˙õũ°ßÚē2?˙„ŋ÷K˙oŋÛ¯âŋŧ0•¯ëŨ˙p×_˙ūÖÂ˙ˇ[é9Eūˇkļĩų?įo˙î˙˙ūŸ˙îŌü6ø¯o˙JëüNØŽ˙ ˙ī˙ūՊnģ˙‹ÕX¨a6ËŽŌûíŠbŋív֝5kmC Ø[ûK÷ėŅ?û}™ũ˙ß˙Ū˙û’Dū÷Wũ“­ōtŋë“đ_û˙ņOīŪ7l$ša;M[NíĻ!ƛ +NéƒiÖôÛIm š-Ž!ēą Ø¯Û }×a[¯ũ´›_˙ÕļŸũû3˙ķéíū_û_mõŊ?üƒA˙ēëĘa1Ašh6Fá&˜MĻG ‚aŠ §´ÂA„ 6( Øá÷´ČƒáĶ­÷ÛkkÚl0Ŋũ§ Ũ×ëjÃKĩí÷´ŋÛ]m/ũ'I-Ōõũow]ö׃SÂ""B"!„„B"'Í „ †Wíl&ĸšA†‚iĻŌ§iA´Ú ˆvÅÅ6–œ‹m;cbšĢƒOa„w×ēëļž˙ŠíŽ]u`Á$Boû{žîŋŽÂW¯@Ј`˜E`„$i´ƒ8Ϛ TŠč ÚiŠAí'ŽĶēąwÔi­Ĩ UƒŨ=Sļ“ę!އ!‰í/ÖČũ„Û ģuŋs ‘#\DDDD0ƒ= Ņ4L Â`°É8  {Uė•„ÂäŖ† ĻJ Ø¨„ué„ 0ƒim2+Đh0“M„a$wLql_a$éXãĨԈˆˆˆˆˆˆˆˆˆˆˆˆˆ2…Aˆ™Ä͋Tâ܆SĻS”€BÁ „ÂĒpÂŧ1 SbĄ2+„Á4 ƒpƒaWÕ!ÄDDDDDDDg¤DDĢÃA‚˰•‚`ˇ ÖŌ9%I(8ˆˆĐˆˆŽ$†*—âĒŊa…E¨œ[I(`šá‚F@ňÂb’Ķ ĸ š(Ž[™dS%tdĖ;TŒÉ[;HUö !… …ŗą<ė‡A’ĀŅ8čĪ UBĻLˆÚ3Žūøj†wIõŦ!‚ĻwNʃŲU”ņ&ÎÖr5™{–⋆ÎôTđĐw -‹é°aS uũĩÛ3üwzAv‚'–KúĒ0îŋëëŽRō¯ņ§ÆƒmÃĐpîzúļļëũ¯Ģ}5Ų\QcļëRŨƁšĐōLŗČĄæ#čgWš;:GX§Ķõũ~ˇĘ\Žv:Ũ?ČĪĄ„ĐaÂ@͌& ‚a‡ °„D˜36ƒąD'‘g'f‚XH™æ‚aș fƒ(FĄ~÷\S˙õî‹ļ1ÂF†t\\:„-áî‹ŖE0‡›°T0šh˜ė&4LLėqåȆ3FzOÍŗŖ˛+ Į[__˙Ķt)IŌîČqá‘Å'ôm'FĘ îZļt6„E ›‹FĘ5ŅvÃ$él!ĸĮ!‚ (@Đh„†aÎÁžaiˆOweȐ3 Đdb6d2lĢgC#š^Q3ąŒ†efȧž^ŋ_í'KöNĐzzazZēV([JÃ#¸%„˛•˛;i:N“m 6č ŨËļĒ‹N›p…‚ĸc°BÛB ėŲ‚ …Ã5 Ė6Ė îl& ™°A„Íbž0ƒƒö3HÁE¨Šä\'rã4dãĖ™@ĖĖ—3ĄĒæŲŅ•™H˛ŋjëīô/VģëˇC°õmĄĒ÷k_zo]’€—‘Iŋa0R(đw‘ AžĸņŖca.‹‡a4ki#[ãFÆ´\°›Nz,v°‹ļZ4Zw‹ xL0ƒAœ0ƒh„†`ƒ)Æ`SŒ3ž0D?‘(Lp˙Q_ûû¯`ļ*ž÷¯oëŪõÚ„KũáßöaÕļJaÉ]+VéäqIĻ‹ ܇€’kDĸ“lŽN íŊMpÁ ž’ļDv“´ÕZĸņÅĄs[a:44\j4é§EÃjpÂēú˙ę˙ņÜ~Ū—×´ģĨØ÷ŋũ>ßëZ÷ģ^•¸ˇM¤ÚMîĐnаÂm+déÆĐLœöĶũ5Ŋ ›Ōl2Oí„ÚM˙%põÉ]‘Å]ÚI´† Ev‹ļíi6͆N7Pŧ–‹˙˙ŋ醗†ū˙Åí|BĶ^ÚOũ§_ūôŨ{×õîÃŨ_øŽžŸé§Ŋ}'ĄŪģ÷ĒwK§a7öŠ:ŋ éˇëî&Ã$øEŋ„ŋ˙˙üÉÜēû˙‚˙°÷ÂØ…˙ũëũúŧ7õĢ˙§†÷íŽę•ŋŽŊŌūÖŋė[žŊ^ŧ?Ŋ-×ÕĨöžëĶt0‚ū˙˙öŌÕX‡ī˙˜˙öáü/÷˙õ˙ëíúßūũū„#ū+ũņņxĢ]úīĐ˙ĩß Ž•_¯í˙ē×é}˙ūĩÚ]6Ũû˙ū‚ö˙-B-ßßúú,W˙Ûáŋß˙ßo´ŋnNŋøWũ%ë ė;ëO˙Å](˙î†˙ū—˙ũáŠü?ä"ŋ˙Ō˙ÃĨĐAWũu˙˙˙ļ˙˙˙Aø˙‡_˜ á?÷å×E× {nŠmö |ž%¯ÖÕA[Kß˙‚*?ū˙ K(Aˇ(_×ú_Ū˙ĨÚ_õ÷ß˙ûũû˙ÚˇˇŽ˙ü ­}ĩ˙Ņößú˙„[ŨaËô˙˙Ûk˙ú8mLokö×˙˙ūFmē×uúû˙ŋ˙˙!¯ũąOËû˙¤÷ũ„ēÛtaë¯ūŌ ę˙ũĶP‹ŽŋõûJöũ~ĩŌĩû_×o˙U˙ˇ×ú¯˙˙ō…˙˙ßũZ˙°Ŋ'ü7÷Ĩ˙˙zOáũēßoũ-ŋ˙öæIwUūÂāŠ€Á]iÚzÚĸ $ØJöŌîũë˙ūÔķé˙ō‹ŋ˙úĻ×˙ÛKŋÛß˙˜ŗũ{˙ú˙ąVPˇ(_ømŠ˙õ ë˙˙Q¤í÷ũˆ68¨ļ-‹Oų fEuŲ†•—í.ũ†Õ´ßiv4īéē˙ûH§ŊũŋõŊ˙Aŋę÷ßŪžŋö×ĩŌ[ÍīOũšõÅX#˙˛…ëĮ˙dQÖĶMHƒĐa…ļ„&ĄĢIąÅE0ÂAļą mŽõm$؃û ĢĢjīŨ…_˙tžŊëKũ;ũ×ß˙íkũ/Kŋ˙¯ú˙ö´›˙m^Ģkŋ°šadœ"Ž ~éÚŠi8TĐb“A„ÂEtƒMŽ(1A"¸‡qĐL4ĸäTäX{iEëmŌÃKÛIēŋä*†–“i'gŋÛKõũ¨av_˙Ú˙a…ū¯íu˙Jž×Ũ.""""""3dC8!0 ˆ†aĐa4Đg ÉĀ' i–÷dWąLS"Ŧ&j6ĶM8i\0Šö­ĨšiÁÃJŌēāí$Ķm-b¯ąR, ؆ŊÖ֟úØMØ`“ †­ZîēDŒDDDDDDDAÄDDCŗ¸L Âa4Âi¯a0™‚NÂaŠ8„šaˆLSIũÅE)7†M6)lŠôĐi´ÖĐAé§ _MSi4á„ĸ1QDwąOÄ=[^ēT""""!t Áˆƒ%!†0˜B ˛Lpƒ a+pÂTÚi5Aė&jŲ$Ö*šMi4â"ŊÚj“MĒvDéļ’UfØDCÂ4ÄDD!c„ÂaS27 ¤Õ„Õ0ǐlBAÔ$’I""8ˆˆˆˆˆ0B!‚ %`†Á‚PĢņĮ"ŋPÂŗOԃĮårzń¸C† ĩÂDCQĘæfw ОļĖž; ”ņI‘O‘3+FgT(P Ą0‚ 0ƒLīˇá4[†‰Ž-Ú-Ú4l*“q#¸ww´tm ÃH0ë îƒ;gpezã8ĨÅpOûē6VÕŌŌuwzŅÔTĘé"2ûįi ēnŽ›ĢÄq˙_°P_˙¤ëĨŽŋ¨i„āáú˙úã÷ˇŪÚäŪĨB/ģNī˙^•ũ_ũÄ]ųq“ŠN.`‰™æD3R6gŒ†DŒÃ>H<ÁĖ§—û­{$2#4õÎÅ?Ë ’ūšiń‚a   a4Âh<&3æuZũՂ!đ3H`ƒ4y¤N2qIĻŠ§úū-m6‹wIĸŨĸî„hģa 7‹EÛZ˙˙蛆M0¸(M0@ÉâæpCHÁ",3FxÍ3.DifļtdfžuKúūJé{Čâ‚{dWh'IÃ#‚-´›tllŋ"ģKdAëŨkŽ œÂt"×T\4l„C4ÁBa0ƒM0P˜LŲ&gØA„ Ņ„ Â!|ˆs9c GáŸČfCFːY3ė†eáž2čz”!¤NŗŖ"Q›!˛9¨Ô¯õíü&ŌoaI´¸Mil”%o„ûl ØM˙ĨpÉaÃáĐMĨĸî¨ģÄZ.ۇCFģ‡BÂpÁA‚°ž!a’āá0ƒ0˜L Á¸A‚`S† . &&g…8A& Ō.dqOȐ2‚)D<Á”#fC3ĢLĄ_›Žą ´˙õ˙ˇ˙´ęÛC_Oík˙˙öĶOīûí21é6ČėŽé7ūíēzMČ;‚  ĮÚ.Û Qvh¸čZ44"Ņąĸíú5ēi Ą F‚&‚Âh¸„- Ō4S ‡A0L  LL Á0‚`‚`ƒûKcč}q¤õûö\Mũ~ũ˙úßÕģŌσW´Ķ¤Ūᓄ¯á’Čd­¤Ødn“lŒtÉ^ŸtlŽ)7˛8"ÛIļG[i7_¤vŊ‘]¤ė‹h¤Û";­'FƄ”'T^4khÖÂ.Ú…ĸĮa†ĐT\b͇˙ē˙˙ĮŽ?!û˙ûK˙ņØū5×˙ãõĶtŪŪ5Tí :ÛēģMūĶZOM:Úŋ­ŋAØNŦ „ßl'nˇJÃ$ūƒÖ“¤é6Čá˛+´ml.ÚAí"ū ./_˙zū á˙˙ņ ˙ü=é¯īoęĮ˙zÚõëßũēé§úkßŋIû_zũĢu_č]]-+KĻÚv¤ôīM×%m'aøDŪÃü˙˙åü/ī˙ū˙åÔīÄ/éˇ˙ZŋũûŠú_× ČâW¤Û_÷Ŋuū˙ũՊŨ]jūēŊ=:ZúZŊ?uũˇũ÷˙˙„N>ũ{īá˙ĻX_˙øŋöē¯ú˙~ŋņOū!vĶ˙ßņũÕ¸˙čPč5˙đîšJúéĩ^ū–˙˙˙ë÷Đ_Ŋ÷õÖ_˙Ûoá˙­˙o˙˙Â˙ø_ų:ŋæâø_^ôŋ˙ÂũÔ4ˇKüV˙ãQ´-ū–˙ūú˙ũu˙÷Ģī˙˙đŨŽ_Ũ˙°˙˙ßŋëĪũü/ü+˙BE˙˙û˙ ūÜēí˙.ĸ$ūˇ¯˙ūģũ“÷ud˙˙ûe ú˙˙}ũ/˙öØ­/˙o˙ũûÂO˙áūŋđ‚÷Muü#_ÛVëú~˙čŊu/_ōęŅŸķ‰ū˙[K_˙ĩũWKô´ĩ˙ūÉҌ; Ō˙õđß˙ßÛ_ú_˙ žū×īŌ˙îw×÷_„ēŪ›žë˙˙˙˙õīūģûa/Û[˙nģKũ~ŧútŋ˙˙ũwF€ŋũ×÷ŋõéũ˙Ōũĩõ˙û˙ŋ}Ö?دŌ˙Ã~ëŪ×˙˙˙˙˙°ˇüWĨÚwîģaoīō_I´wˇMׯ˙ļ—¤?˙uų ŋëĶë÷_˙õõ˙Û˙˙ß˙Á˙(\cūŨŨ˙ŋCM8‡i'ŋ 'bôĶ´–)‘^›k Ō}6Ō×^Âkëņßúūqû¯ŋõũ~ë˙˙ú˙ų§ûŌ˙Ķ×ķũ.÷ Ķļģ]šy>äéë˙SëSŋīnšlŠø¤Âl ƒŠa4iĻÅTšr ô͊†–ÚA†m$؇i§iÛWRxiū›iZ÷éõukéŨ¯ˇ_ûi/Ú˙ēĶ_kũ¯ûë×tÚßk˙kf}ē˙Y:ŌĶAĻĨˇ &Ąƒ$ák†Âi=Ļ“ļbŠŠb‚ČŨĶA„Đ`›QPkĶũēˆiôÅÚęŨm‘ũĩôâī´Ŋ°ƒ˙÷Ŧ/Ũč˙_jöK}°ļ•…ūŌuí'úm~""""#-ŋ †0A‚ [ „gt}ØLĄÖƒdQÄ0ƒ;b™zKŠƒ 0Á$â“m$ūāĶ ­ŦZiĻ›Ziļ“í[IŽī‰!•ļ ×}(Ģö)Šb­/öX0–à u† """""""#nÂeĮÜ0˜P[Čā(Q1IēlBM4ŲÚļ!-˛1éĒvŌiĻÅH¯0ƒbļiĻÃM4äAé§ÃV“¤é§m+OV)Š‘`SúSĸ""" ˆ”ˆ!“)1ÂX!DC0˜B  &0šv¨0ļœ0škà ­S];M„Âĩ¨ Ōnj˜LPM0ƒNšÚv+M>Ą'ÄqÄDDDDDDDDDDDDDDEÅ;A”h0ƒ0ŋ°Â 0˜LÁ0ƒ ×Ĩëđ„:B"""""""I `„xÚ Ŋu§a$ŋK â‡ÕNÔIXL/`ÂHqa ͊¨Ļ› ¨ˆ`Ē#–æŨ  Ė”F@ō´ˆ'NÂŲ•c*¤™Ú¤@Õõúé•fTŲ1q’ņJ#ąÖÖÁS°šgteŊc1×ŨÄĨĄv˙ôh|đíSL)ŨØ ĩ\ãâĐzĩĢUhŅõL }uņĮÃUí5ģAÃØD°>ŋ˙B*#i4×Ē7U×˙ÎÄŋ(ܘō!i7-Ü@ˆUzņ Åá‰ĖŒ pÎ"A“L2D ¤rƒ'Ą`Eaĩ5f.Z$†FėŠŽÕW&4Ö×TÎÃŌnšaÂęa{NÔ ĐaSB 0A‚`ƒ s8xA‚˛638 ÎF‘‚$ w.¯õ×_×UčØ2jËē66 Z "â‹ģaÃ'é¤kaė!drp˜EÃE¸a M„/AĸcŨÁT´AÖ ›`ˆ“™ŠE2åĖ&GÍ ‘“Ŗ÷• 5O\.ļ´Ũ]é´ļƒŊSi?ĶÖč Ũ­&Ō{FƂ ŽxAÜ6‡Ú.B0žÂAĄ`ƒ ƒ"Á™˜Le g#ÃÁD&‹?˜g'Œ Ž„T2ĖŖq™Õ÷Ōk{Žé˙zē[Ąũ'KĻû§ĻõuũĄē}‚ “š)=-=7a‚ íŌN:Ōm i¤khŧģpMRhĐŖeŖC+'æČBŅĄám„‹v‹ģ Ãôh"c_ļ EŽÁBaOapBäy„ fĖáa0ƒ¯×ž†ŋöļ1î•m_ūˇŋ­?ÕWí ÷îé<–il4'ū­†Iū—NŨ$Ũ?´ü‹ '­Ōa˛8¤Ũ?ģI6ģpAēvIēÂN™; ´ũ ڍmáĸŨ†Ą!ĸė9ŽØl!„ũâžŌ˙÷Ø}¨Įč_˙ß˙ũû÷M˙ĐīĢĐö“īūģŋtÂt›dév¤ôũ“´“o˙„Ÿ§Vę + úᤛ Ž*č č īR#Ōm'ŨæĮü˙–5˙ēš:Žž–ū÷ë˙˙ŋ´ŊM×ŋÔ1ęúöŊŌ]/÷öÕ_Jû˙_Įúõ˙V÷ßnŋäæöu +īà ´Ÿßd­%˙›˙u˙÷V ēŽX——Ž÷å˙ūõņ L={oŋ~øĒß˙kņđ÷ô/ûOŪ:ūę×U¯îĢũ÷IÛJŸģhU˙ ģöë÷ûĻũ˙˙˙˙˙ę˙ Ãūŧ/°˙ ŋŋ^Ģõą÷˙ß䲄å w˙›AŋėClŽ ¤ÚiĻEuUAá6šŠa6Š ´ĮϚk v/ēöūģ_˙īXa°­ũß{asMÛ_l%ũŊÃ[ūŌûn’mu˙˙ô­+T›÷÷˙XaM˜LĄÂ œ (M`Ķ jÃL(M1  Ļ"ސiσ´Ķ†ˇ§ÚM„ļ îīÛAq Š`×bĸãmŨ(ĨöŌ^ }˙†í=† iöŋ °Â_ļ–Ģëal$­õumkÚQDDDdÁ‚#97 Á.°BiĐŽƒ6Féøbĸ‚D8a$ØĶv´ÚiîCI¤í&Ōö+NE†–ÅqEL\‰z[‰…}‘öKa„ūBĐS^ŽŋkąëÄDDf;a4 ¨Fføa­„Ō|R 0“d­4ę-4ČŖ§t)̊bi´Má…6‚ ‘^í4Ķƒ;i4ãa„q x>•á¤ÃJԈjÕzIÄDD5ˆˆˆˆˆˆ`˜@ÁA‚tā„0’„ `ŽŒ0„!„Ęė)CˆXal&0ƒ$á4KØa&›Aˆ$äXH0ƒļ*)І‘^uKúņ–Ɇ¤DC˜1 &ƒ(åŦ0ƒ_A…ÔRČ(/Ž•tq˜ņfÅ)wa%TŊŌûŒõÕRûI§Bƒĸnãôŋ°H4aE*pÂPÂ\DL†“TŦT|C Ģa1 ˆ†a0‚"d'qnFv¤d+$úaš}ë–T‹¤ī–P„vÉĖėVĩģē… M–Ų[:‡(ääm–ã㈈…c˜CD3ŗ •\8wíĻ‰Ã ÷ßvO×Äú‚ÉÍ×˙÷nˇß Ķ'F™ŗ f 0˜A„ aõ†}Ļ „âæ 'ū˙Vīv• M;žá‡A áQpė˛k›3QåUë]ĮÕģ˛#‰âÕá6 ą ģß§Á0˜ ō! O$ tÔ<č3¨¤<Ų‘DlČȐda‘FB"|î‘‘žL˛#5 ˇß‡`šmt[ŌÃ%ē¸tž´ôÂ~š ôL°B pA‚ ”!|C dAPa2´!¤`‡ÖØöz˙Oˇz^“´5ũíG]ôlhŧtkhÖŅpô]æÆšj‹€ŅpTMÚsC¸hhˇĸā0BŅoū÷O˙ĒØīí}ŋb0›IŊ^ŸT›VŠôk†GEéŌk„Er#´&äAÚAéä í^˙§ãēŊGģß§ŌÕŋ_a$úˇđžvI údgÛ0ƒ¨î“̆Ĩél?¯ˇôÃO˙aė?ƒ^ĩ¯Ö˙˙iÚīi§ęŋÚëúu{K žęŧÉŪ˙÷ˇņzĮĶm_íôÚ˙˙m.ë÷_Åmø˙a˙ô|?K˙˙õÅõū…lņ^ׅ†ūÛ˙öđßË/ûŨ#Ë+ø_˙ßÂ˙aÂõō1Ęo¯ĩø˙ á×˙˙žģÁ˙˙˙ û /îë‚?ũ5ō„Û~ûo˙~ŊÕū˙ûíp‹öŖūq˙ö×ûOژÃévhŧöÎo÷ßūØKũ˙˙ąZ ũÃa'˙/ī÷×ëöŋû¯˙šõîPŋ¯mŠ÷˙Ŋ¯ØZ_Ģi­ūHŨëúíĨ{ipÂ]ßŪkŲĸũėK+'˙Uũ~Ąkūŋõ˙˙ô˛$;øúzØ˙ū¯í,Ŗuo×Té}_žŒ#˙ˇ˙ē_˙ßúMSM… a…A°‚iŨ' °ēvŊ}„•ĩîŋôģĨ˙÷Uû[ū˙ũ+A4iĩ„iœRqZėRĻÅ6ĢÅHt Û[^īÛX=5˙3w~ŨëîŋtĄ"w ˆˆ0ސ`„0„Lá3ƒĻ›W´Ú Ū ¤í&!ũ¤Ĩ ôl_Ųú•‹Tí; Ü8kÚá%ˆˆˆ‹Ú´v˜ ƒ6´˜b´ÂqI†*ûM5´Žīb؆šąiĻÁ„ĢЈ0Bá„[†œ0­„ÉZŪ´ŲtíŠŲ(J›Čۚlˆ8$AÅ ¨‡cÄDDFM,¸ˆˆˆˆpÂfŲ¨&ˆ4,ĄÎ8AŠā2‚I ô‚$mˆˆˆˆˆ‡Ō¯ãĨĩ֗ ŌėŸŖÁ‚P­&Å „›PeČV Dy6 ÎÖŖ°ų6ŦeTd,ƒåš:šļę+đ7;I˜­"2;5˛PG톇ÁAA4ÁMŌ"šu„Đ;ˇTÛ&‹%KĒ…Ņ•ŌĖÖdY‚fVđ@S"ˆīĸž!HėW%~ŋŧc[Đw>“ë¯a0L 4ū˙¯ŋīģ[ī‡ Â˙|ˇ$Ģû˙÷˙qÚiÇ˙‚8öëã˙˙ī´Ķ]?0gB˜v¤‚LĄYՍW’ĩ˙åtŋĘO˙ÄI<ŠĄuOÂažh&L Áō|—@Čc(‹ŗA(ĖЌÅ<ōtNˆ4mšŸūžŋ_ĒŽø´[ēač¸tė!a‡øTÂa0T ķ`š }öpŒ0†VˆčķlčyC)ķ?9‘Ĩ…õÎËGßú­y´Ûé;¤éŋT#Fļm í5̇hŅ@Á x ĖØL ƒ4fp ÉÅCų‚ę4âxJf‚XL‚3ž ō3žfA5f;ŗ(h2Ŗ$Ų|'ŅYŊU öéŋmÁŌl2x×㠎Čí¤ØtŠ&Ã#ŠMŊ^îȰÂAҞ‹‡&áč¸a Ež,(! ŪĶ]ļXAĻXA„ ÁAÄ< pͰ@Â| ĶėĐPDTōã' SHÁÅ8GÅ: œ\—"ŒÛ:<—Fˆã$2ĸRĒQ~ĩû˙Ōzëö?˛Ņizm/Xũ„õú änĐAŊ&ŌIíSH8dč^†›ŧaĒ' Ũčˇmzt˜EÃģhhˇ§á 1h4Á §A„Ņcŧ Á0ƒ`Ą0˜@ΰˆ–BpflÁ"ĸüĐHš°„Â#xũá‚(~ß˙ßŋûV­˙[OģũĢĢĨpƒ×ødo§’¸pČãģ¤áĻG}Ų‘Û„toĢI<+ҞÂĐM×"ĐAīĒm'´l„]ŊáNÚ60‚ŖcBŅo ´h…Ež“^LEŋ˙íâŋûĩō_ū?ãõŋ˙Į¯V˙hméöƒÕɗNûTé6Ézo|Ro’ž•ĶḬ̃ƒ¤ūšûÉE+ĻŲ,ŋ ´¯ŊvEˆAšÚN¨ ė5‡lxŧ0H'˙ûāŋū Ŋũ_Ũdé˙Kĩ W˙˙_^:ŋ˙Oũ~ŋôúß˙uúÅm¯7ļ–ÕžŽ—˙°žœ8a>á˙IÃ%w,‡­˙čąMá ˙ōÆz“Oû÷úũēIŧzą÷Ūūę¯˙CÕŋ°×˙kę/ú˙øú¯īuŪõ~ūŊSÛžúôū×˙k˙cœü"ãõ˙ß_Ŋ˙Ã˙đŧ?û‡˙˙˙ūö+×Įô+˙Éĸ*çŽ?uIÔzÚO˙ü{ūëūūŪWĢ˙t˙á/ĮûÛ¯û\ũ†ŋø.Ã˙áę˙_ÕÉp/ũ†ũęë}ÂŨŪŋ×x§ŠũßcĮ˙ŋØđ×÷ē_˙×˙_aúũ˙oûô[ö˙ö˙ûUú„?ũ…˙“Ģá}zđ°ũĐēũ˙‚X__ø|?īëøqa~å ß˙ũ/Ο߱Wûé÷†ī˙/o˙ ˙˙˙˙ᰋ˙øEĮ˙đ‹{_ē_„[đ‹˙ûaķW¯ŋØq˙]×û_˙˙ŗO˜s‡(KÛ˙_ˇ˙éxoū›˙÷˙m'˙˙/ũ¯A8oīû˙K ˙ũŊŊ}tŋoü4ŋ˙­×÷ô†×ķNŋ˙˙֗ˇ˙ˇŋ˙˙úûa/˙û¯ũ¯Ko˙Ũo Ōū˙ÛÛ˙~˙oũ…ß_oũū×[ {i~­íä—{4ũ˙ķD˙6ƒ÷_˙÷õáë˙×öđ×džú{ø˙īK˙ü7ˇˇū×íõV)7ˆv]^—ÃOÂūÁ‚\…8ū +öĢÚũĨ÷_û˙ÖūŋZ˙š{ˇ˙÷īûøúģū¨“ūĶՓ¤ŋ¯˙Ãá˙˙ü< Ķļ“vãPÃIn!ρ‘ÂĒ|RČcÖŦU\_ļƒŊ°žëßßūģīũ˙í¯úŋ˙ؚû˙ŋõ8ŸĢ[K˙×ĒVũ˙Î&ķČ?”/˙ķč=šmöF頃bi˛(č ÂA Â  ƒļi´áÚkQ_uØ'}zŨ_ŨkŨà mÔ4Íõi÷í…Ŋ†s×īīÕũĩĩúēaĨŨë÷˙oíöŋ÷ũŧDC7a0šgpƒ é„Ķ×á…ģ MĒVFé4Ã"Ž5i4Û ą aĒwëi+i]ņ ?bļÂLvąl5ĩЇĮ 'Ģaö×J*%îÚØ[_ūî˙ûŽÂ_˙˙Fã`”XB"‚bƒIĻ„˛+ˆqI„Â!CH lPAĻ›Ļšt›ÃK;jĶj/ļ4ĶbÕĢLR­:LTCV!ûa?ú[ÛTģÕ{úˆ68ˆ“L0B!„s –öõ†ė”ÕCVĶ#tÅ27ˇĻĶĢ ‘Ŋ4ØA‘_Ä*iƒØĻ™xOM8Õ4á­ÚĮIŦöÁÚę¨DDDDDeĘAž°B!„,Åaœ a†\ļše˜A„OM0ƒ Ļ­’Ši†E ƒM8„Šh4ƒM ƒ>*Ǐˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ`ƒD0„O&Q š0ša5ĩõMJ-ŠŨÉb"""""""""#† G؄—iŽ*N"8吗–âQYŽÄĢ;ˆ§°PLfš333i’2'…Uô *aBáABĨå-\8p˜]˙Ô ¤fC3$"dËs_-Īuh8|;ŋaLŽ aR0ƒ2'lî‘ŲˆĪ;Ž7Ĩāããģŋ°íxTa÷‚„ 0Aë÷ķž÷ ėŌ'ũ~Œ;˙ŋūž;Né“Ö ŸI˙ã˙˙íû•ÕŦIšh}õyoŅ™ōs:ŅåFm †D„bīȲ'˙×ũČų'먐˙$*\ŅĻ`Ą „0Ą „Đyąy13Gæ‘@Ĩ‚$Å'Œ )&Y8Ƀ$d†uúúúūĢÂ5°¨¸h4MØC ĸŨ‚ĶO‚iĻÁB *`Ą0Ą Âσ@ÁĘY ί(ˆ×úęĒē¯éõo§FĘĶ"Ņą¤ßĩMņúĸņĄhØâŅwEŨ†°‰ÃĶ›Âa0†œ``ƒ4dâ•c'‹‘ ŗA” |ŗB$fãķéwZÍ֝œIÚ§éđÉ:\t›WaÛW “­öđČė–0ū&Ã#†ģ#Ŋ:N‚l2+áa—3c„ØEÃFļ7Ļ´Â„ĶL! ĶMB°ƒô á&DŽķ<ÁxC$Å…N@Ĩ(Säp‰âã$fč)Ķ.hD)ČĄš D™œē†x'Ą Ī0ĘՐo7ˆƒČ…¯ĄũŽ´ŋĮŊ‡°ˇiũĢIëÛa6­ęÚęÚN­ čj‹ļpĐ´]ŅĸwiŅvÂĸáénĐB/°„lCMā…‚ƒ=PaSP…„ÁPa ˜( e '„ R†2 ˆyš`ÍCœŠœ›sZkė}Ŋúî›ú˙Ōnŋ§]]'§ūēuęū&Ã%„ą‡Ié°ČⓤŪÛ´“oMXWvnčØô^0Á0Z5ēwšhØÕ‚L‚íĄ†*.Úų ĐTMÃ\Z !„đž‹ ÂÛC[øØ_ē†ũ˙˙ŨĢú˙ŋ˙×ôšõ}ēß­&á=:MûĒM˛PˇŠũ“Â<~ŧŽMĩRwIÕü28˛;i6ČßT‚l5LŠ:§ ŽáØZ îҝsC], Á“ Ø×…á˙Zˆ_ę˙˙÷ņK×]Đ×k^ŋUÚõ˙×˙ëčq˙ĻŋIØO˙M÷ŋ°ƒm:ģCęōi-:Ü'Ũč:M†JōVŌl2VÂOƒé>­˛7đŧ9z˙–_í¯˙˙ū˙¯ü/øŽ-uĮ˙Œ}üuÚĨ÷˙˙Ķ^“ē÷ūîŨ_ũũÖŋûĶĶī Ļũ˙I\vūŋ›úų˙˙¯á:˙ũü//U…Ä*ëū’õę)Ŋoܗ?úûÅúâėé×ūžŊ˙ąūŽēuŊ˙û~ŋĨáŋ˙A~ŨW˙˙ūW˙˙áđ´ ōuåšĮ=.—…ŋž0˙÷õũ˙ę˙×ŪŊoņ_oõî?CūĮ_é{ũĨ÷Ž˙˙īú_˙˙„ŋŧ"ãĸß˙˙ˆëōÄuũŊ˙˙˙õū^Ũ˙˙˙āŋū˙˙˙ŋĨáīŋ×ö2Ą˙ũū—÷ß˙_ú]„˙˙ũøEÅ˙Ø{˙û˙ū”?÷ū˙˙ˇû˙üąžX°ëŋū}>O˙äũ}W˙˙˙˙˙˙ééz_˙˙˙ĨM×í˙ũ˙¯˙øoú_˙˙Â_°˙˙Ũ-V˙˙ęö“ļŋ[ß˙˙õéūÚ_ũ“¯K´ģßū˙ũ/Jëo˙ëũ˙˙ļ˙˙ëīũû˙û˙û˙Úûļŋö•¯u}˙ë÷û}˙˙Úßų:˙˛u˙“Ģ˙´Ž?Ã˙ũ¯ßßūí˙˙˙˙ĨøîŋīŨŋ˙a2:ģXĻøí;ß×U˙Ûõ˙´Ũ6˙UÛW_´ŋõ˙ŋ4ũüŸũüŅ?˙ũ˙˙ūPƒ˙õī_˙†˙˙Ō˙ü?u͈ÖéãTØQ׈¤ũ5ûmŧCU†› =/m;ŠaŨĢa}Ŋĩ˙m[_Ŋ´ŊĢ_}-ū×ë×ĩ$‰˙¯˙ũ?ŋ˙˙dëė~hŸūƒdW„Âa&›R đš˜Ah4Đaa64n†8ÛI5‹ƒj!ØN*Âvq_ė0J_wam~ŋ8õģŋŨ[=ûkūÚ[ëúÚ_Ũ˙˙ŊëöŋØoūË& š ”øa đa^ĒiĻÂîG Âl&b“A˛(÷i…Ū!ąÖŸÅ1]°ÂlT[ˇZzĻŽ˙Ž?tŽī† _iëi=wē÷á~ūû_ęÂ^ë˙íĨÄDDDDDDDpaˆˆˆ”B!„ ¸8Á „Ķ „' ‘Âa2(éĻ“PƒMôĶcĢĻI6ŌĐĻØi­ÛKÚ\ŦU¤ÅÚWM­˛(7ul‹–!˙[—öëõcÖ %˙_^ą˜MIÁiÚa„IĻČŖ„dpšb“ŠĐUIÚ´´Ø¤ϟ dAÔTS ƒ PN“‘Ϝ5N4Û & š]ä\}ļŊ,DDDDDD `„A‚ÁB !adęBĶLA4ĐaS Ú ĄÄ ÂaBĻĩl+i6Ļ›iÅ&›Ō 6@Â|4l0AÔDDDDDDDDDDDDDFXÂk…‚A‚U A…í-°ĸ‚aˆ\˛PMĄÖŋđž_ē đƒÄe’œ›Yœ0A‚t&3¨Îƒ;"ėíOá˜L  Đ`˜RX3"Jé§scEãD⋷ᅝŠLŠ3˛ļMÚŧŽ%¨ė]†ęßÂa¤Øh;[]…Ėĩ]& ĻvĒ䨭~ôéŌŌm^›úh0ģü‡aS ×­Ōz}ĩŋ\¨˙kŅ÷wŽŋ]kî“~ŋãîč==§ˇˆã×_­­ū‘Eé8šØ’[û>ÍFSÄōæ čČhåéW}¯Nĩũké9[ûɲ…+š4A‚ Ņ„ÁƒĶL ãÕ]~ũ4—"dųƒĘŗ:˛5öēú뎰…Ļ7a >- !zI~ūŊ„˜AáB0“°@ÉØO* ë>ĩúu×\ˆ8ĐAĩFË#v“{é˙l/Z-øBđ˜Eš ‰ŽÁxA‚NÁ'eÉ"@¤šã3#0ķā™–D ‘ˇ”3Tu”W]a„ Ÿ=°ÉE+éü2xØa0Ÿ˙ũ$܎(&ų?›4Aψb!)ŪĄ M0ƒÍŠ`ƒ!0A‚ e ¤ėšQ&)>`‰ä ø™J*~<3ĖĐe ¤ņƒ!‡!"ėøĘ†E†\ŒŲĄ3:/šdFkK¯KqÛáģa4ūŋ˙ēm&đÁ7Ĩk=8d¯ŖcEŨQxĐŅŗL'Dá„=„Ō.ŪÂNh`ž‹vh4B˜! O˜í;[4ÁBj šh0ƒ j0š0A„ Ō@„ė¸Ę4Œ|RŦRq“ÅȐ>ūŨ*ûũaž˙˙ôžŸúokVéô´ĄI°Čâ–îŌ6ú ‚§á#cIīH6‹ļt]ŋEÛMXHŧ„ģlŸZjh„^4,"wCFļthĄ´čˇ "á„\0Š…-´ÂhąáB`„0ƒû¯Į^Âũ†uÔŋ˙ūë°_}U}_ũŊ§Ū›ˇūŦ2wë[ŌßvGŌt›H6Čã­˛,CŌOŽ“áŪ’oÃ#ˇ Ũ&Ōt›~N“t‰‡Įv‹Æ¨ÖĶdænkĸáĻ‹ŋ˙˙ÄÛßũīč|ûˇĒíé[OĶÚJøáūJņiŋé×Jéĩ­„Ûõ×ģé?ĩŽÉM^é6ÉÚn’nĩl0L—Y´› ŽÚM†Gé'A6ČąĻ˙ū‹~÷û˙_˙ú˙ŋã˙׹ŋî´ˇúMnŸ¯j×Ú÷Ũ[ũ´–û§§¯ŋņuŨ].žØON͝ ŋ{ &Ķ˙ī˙ĸŨüî÷û˙ßÛå§īĸu˙×8˙ŨöÚ˙ŠÅGŠj1ĶŋūÂč}øëõŪ;ëėŸ~Ŋׯ˙_Ö÷¯˙÷øAWîû˙ī_×˙÷ū˙ĸu:Öūūŋđ^Ąī¯¯úūŋŠ˙kŠ˙ë vę<{˙ûøˇöÆÆ=ß-˙˙˙^—˙úëׯß˙í×ë˙˙ŽÃŊUûÂōëđ^X÷˙ß_ęXˇ˙—[“Ģ蛙ÂTŋûWú_‡ņ ˙ŋr…˙ų/īũ=}îß˙Ĩ‚)ėWūūÚīžÛ§_Ū8ŪßáĨ˙…ũ˙ˇīŋA˙_ØuÚЏo˙˙ĸëũˇ.žāEūévˇéú÷ûî’˙ŲB˙ŧĄBúņŨˆ]׆í˙ū‚īoôũ˙h¸ŋëč/öŌŌũ˙oŪŋ˙˙˙öŧ"ß˙˙×˙˙ú~×ũú÷_õmf¯˙>ŋöߊ“érĮvũ/o˙K˙Kŋû/×\7ö—˙˙˙ūođ‚õūŨl4ŋŋīH÷^‘öôÚOíĒö—úZ ļ÷ūÍ9Ģ˙”øx§×Ļ˙ß×ŋũŌ˙˙_^+˙}÷Ŋ˙ūŋīöÛŋK¯ĒÚŦSd¸ƒî’ #3IēMēŌ´ˇKá…ôĩaĒzë[ŌŪŋwîŊŊ}ģ4Ė ũuŨŊ}ú˙~“ļiûŲ>—ū­“æmĘŲBˇ˙ö˙wđØoôąč4Ķa„oAĢĻŦECĄ„kē°é´¤\uĢv”3ÈR GjŠęØTû_ú§ũũvŨ-ís5w^Úî—ē^ē_éßÚVöÚm[3í/˙¯É˙܈Aō…˙ĶM0Ä$ØL-9$a…ĸ˜­Š lSąA4A8 †đĶm}…ˆRöëīŪëîívᄯëĩ††aļžŲ"˙ûŽí†¯Ķi_í¯köŋa+_˙§_ĩüÍ=Ŋ¯¯ÄDB&ˆa†p0ƒ ÂpÂa˜A…{WJÂl&Å !OvØI5ēkm$í†ČŖˆklvļ’ÅąQ]*°ÂQv—eĶjļ*Ë­Øė.ĢĻ*öJI´ŋÖëí%ũūÂZZņ„DDDDIĐ˰BQÎķø0„T0›6)4VĶƒ8tÄ8mZQ ÛiĻ*ĶbpÂIÆÚIÄ6ŖOĻ!§lwWŌ´ÆÅ6—}¤Úûö_ĩēcŌm~â!"D" Âą &a„Ępš Âõi‘Á1û *ÉBi ×†#u›LBA˛8AĻ‚m0¤WIĻÂ0ÔPiPšb‚ 4⛠&›JąŨZU (ƒ}/⌈ˆˆˆˆˆˆˆˆˆÉė¨ˆ0A‚ IŽC‡ˆa4Âaƒ0š ˜Đ&0˜@Î:pĐaĶ“M¨h6Ta…ČáqKZIčDF„DDDDDDDDDDDe¨" !„LaK&O…ë˙ˆˆˆâ"ņāÁ$Ō˙Å0Îŋ +˙† …ÄC šŦ{A§´G-ĘØq(ŽÄČėŅTgÕ4ĐgkF ĻdĩFxPĒ w„Nˆų"(Š#š÷zIÃģįc‡$ž –ú‘ė‚äØI ĢM>͇ á„´õ Ļ-É 2†QŠĮeąâ$Æ8”ĩã´Â pîT*aTĶǝ÷økäû¸z_ëëøūd…ˆģîîī×_˙ũ|ˇ:ķšĄĮĻĨšŦ`Ę(Ėã ųƒ<ĪÅfˆ3æPdÂdš9dS'ũ˙\îŠ}rOÄaSL(PšØ(AÃÁ4Âa4CŒaG#„} Í‰’aĪÆbˆN(D'‘œđXŲ:!)Ė˙¯ĒúëĐ´\0¨Z-Ãj•Û(B4ka‡A EĮØCEÃÔš,~`Š„ &pa§Y#üÜk‰tCI߯Žŧ2VŌpí Út…†GH{ ›XB ô› ŋnŠ7„^Vĸî‚p˙qCFËn‹‡¸'äTRâ< Á'aŠ ‰œŽ€ÉÆQ31’#HA•ŗ:…)˜Abr:æŲ¨Éĸ7”gFSŧŲ“:ħ'Z吅¯Ũ“´“nĄ×ôÂtž›ØA˙Ü2Qūœ:N“i?Mŋî‚yģ×ÚiâĶa?5 „0ƒZiŸ0B„AŲāáXDa„ C3æp@Á& f(yCD%¤ ˛/bH!ĸ>KŖlę؊"B8ÍFuŊ>ßC÷é?ĶWzŋWû[ëŊŋū“˛BWõá?ŋ´ÕHŪQvÚiá‚Fļ¨ģjŒ0—EÅ\iQvĶF†XEÛa[´kĸâØl+ĸā0†˜.˜ėO„# á‚a0LĐ „ 5ûKč}{[˙cŪī_}O˙Ûëuū“ĶÆ˙ü&ŌÃ% 'zIēIļF?vE‡´ÂvG é6“°´˜l‹ 'i-…A°“¤îķķe &Ųņõ ŗ„ „čŲEÛiĻ‚pĒ!hˇ"}~!tēūū+¯Šëö--Øū×ģũŊWļãW~úí ė-GnĨū;$tė'V ’Žú]:OëzļÂiÃáūÃ#ô“¤ŪÖȝIŪnXdW¤úü/Ë˙íū¸^ŧ/ü1 ęt?'Oīkē­/Ē˙í{ū÷Ŋ]˙´=ęÚõúOĶôīŋí jēMũ0ƒøzð›I„Ōü"c˙×_ũ†ŋáÂ˙°Â°ųĢÃ˙đ˙ßü|oQ|tŌ×ūąģõz˙kėŽ‚ú˙iëuW˙]t—īi}ž)tū? ūëŋũŋü"ã߄\Û¸ˇŽß¯×Öũ}{k_ŠûëŦ?Ģũņ Äiņû˙ū×Úũ6Û˙cĨ˙ŋáŋ˙ømß}/K˙l%ˇû˙˙ũ5ų„e‹ja”XČ/Ã˙đ­ŋ˙ø]˜_ū‰šC…˙˙âoõô×ī˙ßø_ø÷˙Û×ôŊ/K˙ ÖÛÃû~ŋíõ_öĢøDßí˙ø+īû\"Įđ‡ëúÖ˙˙ú˙úö—˙ūŸėŸŽÍ?üŪ˙_ŋ_ŋ Ĩŋ”,7˙˙~Œ;[īŪŋĐ_°˙ũ˙ũë'˙ŋ˙˙˙¸îŋnßöŪ—ö—ûũ´Ÿ˙˙{­zú^ŋķÉüâ ÷{ũ˙˙ėW˙}é~˙Â[×°ŌŌû˙˙z˙ũ/ŋ˙M}‡¯í˙õûZė%˙û˙ßß˙ũŋÛúYßķE˙ûūPģ'ß([é~˙úÃī˙Ĩīũ˙˙ú^õ˙hĪŽ›ëöŌ˙a~)íŠŗ ūûKũ;m{Om׎K'vīØ_ŋޟīū­|Ÿ˙ßūô°Ūŋđŋō…˙ųBī˙ũ/ũŽ>ÃëûÕ8†šoĢÆšßĶtžąDiÄ;†ƒģ¨ģėÜwaX¯˙ÉîžÂö“ßÚ˙ī˙ŋŋ|Ûö¯˙ļģ×˙˙ĩ{Õ5íõúĐi˛+Âh6A6š  Â āՊAĻ›Ô„ĻČƒÕmaÚÆŌŨĨũúŪ›ūÃKl%V¸i]¯g¯ũĶŋŪę´ĩ[ĩžī]Û˙˙ūÕ˙>ƒé¯Ņ›×ûM{^Mkņ4Ч#„Đjl, ØAČáE4ŌcdQíOOîÚiV5cØÜžÅvŋĢמĶ%îÕ×ŅeuØa+MžÕ†ļ×˙ûū˙Ļžũ/ü—|DDDDDDDDDD0L Â`„XL! œæM›0ˇ„Ķ^0ƒ0ƒ?ĶM„;Q´œCUŊ5ObØî îWrŗˆr& a§âU‘ûJ×õ˛ęÂjĶvÚOũׯč„Ņņ""#OûĶIØiÂĻ4›"Ž“MŠNôÚ¸a-6)4í"i¨ÚdAí1M¤ļ4ĶŽ!Ûąn•?ú¨[Md1OĄ"" ƒCL ˜AϚ &¨4ĶÉZ SXajÚ°šh4p™pš„ÂĻ! Âh0š 7dp‚{LWI„ᄐq„ĶMŋŽ"""""""""R!EÛ!†N˜aDDE„Õ=27ÂiũŠZž÷éPŅD"""""*""""""3{é$ž’$oÅ-%KIãk]$øa"n¨*aRRļ ĸĄ„Ķ , ÁDrÜąâ>w7B!ž giœ 5†š,ŠąŨփ ˜A„ĒW(dĒ%™nŽÄ"ÎgekXkîĶULĪš°ƒLŦ4Œ‰ÄŊņ~Š?ĄĒ3ģ §k˙iÕŨéČtžƒ˙ņqiúkkūY}epi&Íĸ8‹MKqÅ(/8gˆĪ0ÍÅĖäN2“æĖ^D™Ž:k“Ĩaw_ÎË1'Äī; ũā¨F ƒ ‚a0ƒķdpBQĒk…Ėĩ÷_uĶ ƒhØü8t#ģhģhZ-߇t[‘0˜íI˛XĪ23ĄYSˆÔKRéö ŪŋĒ­_{ũAČqéil‹o÷IázĻa0ƒ Ģ3F`ž#„hČâ”DqHb’"恒b„ —#ĄŽ%2A”ņ9 4 Šd6j3[ōb!Ærë–ú¯˛P'M>ÛNŧL%mÚ "í…EÃL(!sD;„,°ƒvwqa ™‡" Ė0ƒ3@ĄMvˆ^0†‡˛~[ŗ ažáqœ`‰9>2dŒÁ’ƒ: Šdč†d4q„Ę ?īũëũ]Ž“°ž’ ‡A:7=Ō}ĶMC,™xŲ%aZ.ŽŦ$ĶEģFģ é°ÚEĀh¸h¸ĐP„E…á8&X*a0ƒCĐa`š ‚ „á„´ļ?Õxĩü_˙ØŊUēWāė–=ü2Y –Rm‘ŋĻŨŠ+ ›zŲÛ B}ØI>Û.A6N ŋĸ‹x{ÖÚ°Se„Â;k…h*.ÚÂEÛXŦ92?úB üš?ēöĒūŌûNŋ´Ũ7NĐëĩĶû˛I,'ŌŲ#ÛW÷Nļ­ĶáÁ“„Âa>øvK!ÚKK‘Ȏá6“‡`&ŲI6 ˙ë蝜r‡ ˙÷ŊZ‘GØ˙úū“wúũ{ũŌøö;§§_|kžë­ũé°ÂAÕũđé6Â}'¸EŇ˙ūcū„Gū˙´ŋÆ?Ûũ˙ē˙ë‹ūŊŽûÃzÚŨz×^˙_Ū¯MĶu{˙õũô˙˙'˙m/õú‘Žŋ‡˙ē˙ēũĨ˙ū°ûÛ÷ß˙÷í/ąīũ{é˙Wj–ß˙ö’˙¯Ũ{ŽũĸÅ~ß˙ī˙×Ɍ˙ō~ ’­ė7 ũú˙ī˙˙Ãũ÷Ūë×× ˙˙¤˙áŠöë˙ũ‡˙˙˙^Õo˙CP˜{t]o÷˙Û__m_˙ļ˙˙Õw˙õr˙(_ôß˙÷û˙˙ũ˙˙˙ˇ°é˙˙×Õw¯a˙ú÷ū˙÷üâ˙í%ũĩßŅęÔSū˙†˙˙ū÷ū˙˙ģomÛũ˙ßÛũö˙˙Ãßũ˙]ū×Ūũ~ŌÖí]OO¯å ÷˙÷˙˙O˙˙ÃxpŅ.Ÿzëõ˙ī˙Û˙÷Ø˙ũ{ Ú~ŦU…ø×mSē‡ŨviÚūAīũ}×˙û˙ũÖøvũ÷ßū“ėWū˙îƒ˙˙˙b¤šl]§Ķũ¯‹ĮĩZzí+Kũ˙ô}éŋ˙û4ß4Üoúz˙÷˙˙mēë¯ôŋ˙"žH Âr đƒA„R ôĶh ÂDÛa+{]°ŋīië×_kŲë˙ė˙m¤}?æ[¯ˇ˙ū×ū}×ũčâÛ˙´ÔWm0ŋ 0šM6“MĻÄ'ÛĨj)Um&]-[[˛éŌîö)Wû`Âė0UīĶĩģímĶ_õû§õ×[˙ûŽ"""""""&˜ˆa ƒ4Ķm4§k (iZJÆÃIa­ĩvšw ŠâޤK}ÃI˛>ÚMĶh?˙ßģîûĢĢ̝ītŋuâ(ÄE酴Ōa4ØĻG *(1H:bokJˇĢt›PÂMCJ˜¨ÛI°”iϚkw_§"?m+[VÖ×`öŌîEĀŌ먈ƒ ˆ•l0 ĨŽ˜á0˜&ƒ ÚσOuí5l&*ĸēĻ)ˆA‘G Ķ4 0ƒÂ &M¨0“ĸĄ¤xAąI­1^ēqF'T""eY†0@ ! pkaEǃQ[JÂM7atŌ V"""4"""2āĩ`„DIDF텯\qÅ õī2„Âõ÷ˆayf ‹ã, Ō˙Ä Â]ŨĒA§͈äØŧaÅ.+˜äÚ P TĀš‘ (Lí\L2'•ZŸž˜]2¸;/‰ä<ŧ%pÉSúy—ƒu2 2VÎõĖ‚FCæ‘JŒ„dĩk͆đôĶôö …°PLÉ.2ĩũm;ˆžĐdΧũ|*‚‚ũ˙˙Lpîûļ‡ōŨPŸŽˇĮOÄŠ,}öŸôãŽ?ú˙XūđŸ˜"@ķP¤ų˛8Dų‚!‘1Fa—ˆņŸ“ĸtNŽG\ˆkœ~+ŠųØ_ß˙ž, ôÁ0˜L°@ÁBa0ša=AA0Aš3aP)Ŗ4VÍC4>NZx]?˙ëÚ5ôkhFš/CEÛI8OāĄ EÄ!aáūL&ƒÉŅ@Čyˆ„DųļH5$225樖Žõ˙˙|•éŊ&Ã#˛;l‹›­ģÖŽé7ĸņĒOĶs]Tkö`Ą0L Đ4 fŒ Ę6gÎ.g#8ÁÅAČ d’h# —†U‡4 ŽČ/(ĄČņüĪ4Ė ˆķC2ŒÛȅ˜3Ą‘œj˙ôęßė*vk˛sė”ņ‡„ūÉcKIŊ-'KtŸT]°† í"á„-í4L}ļX(B â6, Âv&a?…/_Ģũ$õúxAÂŦŸõÎâPũĄb¸a- ‹Ią ė+„um‰ a&ˆˆŽY@•3%<ėĶĻ v.i™zē…Á2ĩŧ™ÚøPRZË6lŦF@j[އAÜ0–ÁI– ”āŪ™d5üvÚkĶWŠ‘„žûBĐ}Ã%Oü‚Õ–rD>ô$Ķ6ÍLÔd "Fb(2š‘¸ĐÉxÎ ¨‰Ž˙õ+ŋ§ūA‚„ÁÁ4ÂĻ a4Âh É6N "/“Â:ÉánNdd ĐFygŲÔōSí~ūũė ‹ļ´\4LpÂŅ7h›‘,h¸„,&!6Ü*…P˜&ƒŊx˜2Ü0ƒ<؇™Ŗ0ˆ†„´-äílßĒëãj› Šô O!z6‚uIļDqjt]ˇ††‹†…°•Ļ‚„N °‰ŽDZa Đ< dâä É$Dâ”F Ÿ,†iNÁ¤˙ɰ§×a6Ŋ6 á’~ß8^Âd˛é?†HxdcĐM†Jė&ÚĻE‚,8OÂôtkaz‹O4Aîƒ ĻMÕ`SŒĖCHĀ͌ S6\31JąIÆiA0—‘TÍ‹ƒĖ ‘sė؟ŽŒęüƒ3ĸ7š3Ŗ!˛īĶÖžŨ ]5CģM?ŊCCô˙jÂa:Ū‚+|%mč×`´kz.EÜ*68žĢ˜ė´ÂaS A„)¤ÁBiņa? ‚„Á0‡“ ‚a0„ i¯˙I¯k­˙Ĩ¯īWúioú~ģũ.Ÿ×§Iˇ’ļ“}§“lŽ;´Ō6Į5´-‚EãIŅ­ĸúØÕ `­ĻЈ´Â-ØEĮL"í„0‹†‹Ŗ^׊ū1īĨiøëũŽ?ņūˇ]oéuĢúēO´éz_ ÕØMûé6Čė–0–,é>é8d~áÃ%–¤qIאH#=ĐAŌôŪ“a§×…ũo˙đŋđë˙ūõüV+˙kKĩ×˙ĩõŋĩŨ…Ŋ6ÕôßīCé[×ÂtžŦ2pĄ5}ĶÆ­†IõÖ¯H‚˙,Oûŋ‚˙ˇ˙ËOũēü/˙ŠüĮĄīĶīô•íúŪ+{×îßWÚž=:Zú] Nŋė"ãū×ß~7˙°×ūĢé×Ü/ûāžģë˙˙ˇûū‡˙ÍĻÕ¯øë­ûëöëkėY0đ‚ũ÷´´ūß˙˙ßøEÆ˙č/Ëü°,ēŸ˙ö—˙˙÷¯_˙KßúōtרÅÃũ~Ūŋ¨b´ŋöÛ˙ŋūŊB ˙mQq˙_÷˙û˙ū]w÷aËĢōÆ˙üˇ*ÂMë÷Wúaũī˙…˙ø˙˙cūģū)˙×ũĨūŽĒŋūŋŨ;iũâ1ōõ˙ū‹N˙˙f‰É×[iLž—ūfŸ˙Ę˙úōŨū ũ˙ûiwīŨ?˙˙†õŋ˙ũz¯üoū˙īĩuũ˙ūŗE˙kū×˙ˇú6Ũw˙Ūãļ+˙nw¯˙˙ė;Ũ}{ūt?O˙˙ÃuõöÂÚŨn’}˙÷V×Û_˙˙ßú˙lĶ÷Ęäü˙Ĩ˙ūâŊ˙õ~ßŋ˙Ûd~!¯Å*ŨԂëû§đÂ_í¯õũu8Ŋ[]-$t˙øß˙˛u˙žPˇ˛úû˙¯Sŋđߎí6š†M†°ĶaÚÚv­EϜUō&?žOä:ÛVûIũ„•[UÛ¯?ĩ]kũ¤F'ĩ÷K_ęÍW˙¯ö—fžPŒaûLŽi´ÔPMˆVr8Ai„âšdAé„ÃI č+ώ͆šiÁÄ8h6)<ž<,$‘ÖëĒ{ļŋēūßģkÔ5ūûpģõ{i?ūß /žøaD0‚eŽA…™áϘ g™”C Ļ{J­C¤ &ČŨá ĶOļ7ãöĻ8‘û´—ũŌûŠ˙Jø­â—_áĨßkà kŊpÂV— øˆˆ¤#9 DDDDDDMHD0…DD0ƒDé‚ 4 +dp˜L&č Ķa+M„ؤĶÚ¨i*{K˛-級ēkžEwą¯ūÅ0Đ{i[Å]WÄDDFcØMN´øj˜Z†ũ;h0ƒi*) ƒÚA Ķ¤Ķa&ƒ5L&Ôi°ÕiĢ[úĨI8ˆˆ†„DDfâ‡b""4 '…A…í4ÂÚ /ÚÕ¤Õ4vĐdQÂ6! ÃMEô’Õ!0„CC#Ŧũ„‹p9mRKjDĨąHv•uĩXUV&…A†0† HF%-4LUDL‰ĻÄ0QË2Ĩ&ëhĶY7%$ˉšĖ§Š~ļ0A‚ 2ŦgAAĻ7h¸ "c†1ÃA™0Ėgcŗ°8´ŧ'EŽgz ´AŅą÷aAL–3ĩ–WņN$ˌD#"fGyɰh–"6ątŠŅąíĨuĶĢl Âajžx((&Ēiš‘/ĨēAŌēm[[JôĐpéčŽŪëǝũ{Ž•­īūîĐAáÃAŌÃÕ}q×ÛŪ{ē)_¸ÂrLJoÚyolˆÍ"#R¤6§E¯ãÕ¯˙[ē¯ŒÚIÔíe‰Zę3F ͂ œ xL͟eȐ)I#„Hĸ0Ī’˜2@Ę3núßŌ˙lȁũ/¨¤ęŋ¯Â-ȑT[°…čĐ𞉸x(T!„đšh0ĄBđ˜L&Æŋ_­ų(AÛjŋ“sS__õēAãIģ š§`‘xØ(OĒ.1‹ļ†‹vÁÔZ.Ú¤ŋ÷Nē{ĘPH`Čf@Œ‡›yŪi tęŋëęƒ$õpÉ_ŨŌm×ÁÃ#ļ“LŽČōoA;C%m‘ļŋß˙ĸaxA„@Âa›ņ”ã<ÁA™ŒŅ‘ĖđÉâäPD¨eÛ>2ÉķfQŸ3Or!æÚg“æ Ņž2A H<†y‡˜yĢ5#‰sy¯"¨ÖÎĢÕĶ˙˙ˇí>ÂiŽ› Ĩo§]‚ ļõ˙ū›ÛÕt]ڍĸá„=ĻĢ áÂ-Ø!i„CDØBÁSMT Á0ƒL(*Ķ „Đ`ƒÁ„g…<`ˆy‘Á4Bd `•l"3†ˆŨ>õ]}Ž“ũ]׍}m~ÃO˙˙×O_ēx)´ ´›dAŪûM#e‚FͤŨŖ]m4[°‹ļšË¸EÛēœ…°APŧ:-Ú5ØHģEˋič&ž-0…ĸáĸß_ ßûK˙ūëÕ§īõ†ß˙÷ûēI˙„›IļĢöúm‘Ž’pÉ]!IēIéŲ.Âkoá Ž-;"ÅŨŪė$›Ō ;ہ–rņ¨eŌm4›A߈_īß÷˙~?Å}°o˙˙˙y‡¯īúôõíî’^ŧ!îôᓝ„ˇ ÜRôõnîÂI÷éúäķ%oŽ› “ŽJÚM†K?åšŦaßÁa˙‚¯˙˙}~ė?ūŋâŌē~Į¯Ö˙ÖūõMßŪÖęöŸZūŋú˙ŋÖõn›ĻßÕčtí_î ž°‰ŋû˙˜˙û˙ũ%đ_˜v˙˙ūŊÔVčûĶŌ ũ¤ũõûĶūˇ˙˙kcĶûūö—Wī¯ŋß×A†ú ˙Ũ˙ũ§ŋz˙đ‹÷‚ß˙ūß­u¯ˇ˙Šū¯īû˙ĄÃûŌöũũ]ũâ÷kądWØ­/ö˙Đ[˙ /˙˙ û˙Õī„ĶÆ‡ü°;˙¤ß.Ŧēá~ū× Qŋ˙˙õz˙ūöŋkúø…ļÚŌ˙ߎŋą ûŽ˙¯÷kī÷KŌ÷ ‰Åŋ˙ūũ/Ŧ"Įû}ī@ŋ¤˜ķ*û˙ßå§˙ŋūŋúäĸV JčßOū˙ëŋđŋ˙(_Ĩų.ˇõö˙úÚ­†˙˙÷_û ũŊûҝúH×˙úūßũ˙í˙˙ׄ[ØčüÍ?×˙čÂ_ũ×˙ûÕnŸ×í%ÚŪļ˙˙ûĻ?ôŋnël(_ÛÂô˙_˙û}˙˙ēūũ˙„ļ˙¯¯Ūûkęŋ¯íĨÚ_¯˙Ķú]^˙†Ōá˙ŋũŽŋŌü7ŽÄ*˙Jąi˙˙˙ ˙õ×Ũw˙ß ļëō›Oķ ũëSĩ˙¤˙ü0ŋÚúé7žmî–Ģ?œMŋš?ûßû˙—ëIa…w˙˙á÷¯ëö?Ĩ˙˙?ƒN!Úlv”‹aĨCôÖCŪ­¤›d{V!ŪŪ‘Æ“~•Ŋ=7VŊ/ĩũ¤é~Õ6g˙ūÛú6ŋÚ âß_ûũ“Ŗ‰˙ßŋëërŌĪ ßô"ŧ&E4ÅlŠđƒ4Đvšh6IÔPNíSˆ¨a'I´ģJÕŌbÚßũ­×ûÚíŸũ}Ļë_ūŊ˛ë˙Ž­…ßēîēë˙īŋ¯ˇKŨ0Ą;M¨0˜M5ŊĻĄˆVĶIĻČá&˜aD&)ŠļI†a¤ČŖļˆwŲŊŠuõkb›8ięqzō*~Ēĩm+¯×íaĨ}ēîēęũĨūÚZß׿øiD;_Ĩ˙ˆ† „P˜B!‚†UR v_h10ģdėœ]Ũ„ĐajŌjŦ(&ĸ Ä$b˜Ļ!aÄ ƒÂ 6ĸ™ņ_ĩT!DDDDDf興ˆˆƒDDDB" #Ē`‚0˜L'h0RĮL&…ûJŌ•"F"""*""#ˆˆ§â˜3TÖšØQRĩŨa„Â,ĀAr…XŒ×Pf˛Š Äv+[ …\C&ʲAÄ^97՝Û)ã6F3ąB;Q…°˜Pƒ;NEuU˙æ~œ8|;¤î™7gdG`â¸Â2Ļ‚A‚iĻĩD'h4 Ј6ɈĖČlčČhå“˙UOÕo¤Úļ'N“u%ztŽK!úvAļEŠM† ‘aŖcFļ‚jˇEÛ`‘­Ą„^5Fž a °‚a 0„&4 2BIŲ‚8F‘q“ÅŲņČ dĒ&A!„čR <<ĐR|Ų”ŗ$Ў„IŒ ČA”„C"Fm”DH7—Áš"AŅŗ!žU˛#4Κ.K šįKŌOô=?N“¯Vúė; ´Ÿa:N“kžô‚é,21ײ;i8eõ6.ØBÂ,v‹vôhhˇaá„,&°CNÂgÁÂgŽĐa0„=;, DsDÃA Âa0Pƒ4ÁU430M0Aāƒ40@Í A„3ņ›8Ļ‘‚D&¤'ƒļļ¯žˇÖˇMSú^Ŋ}˙ÚN“Ũ:[zMÂi˙JÃ%vM˛+ˇAÕáÃ#†Á$Ú ´n'}áŖ@vžŠĒ7h ķcģhם† ˜2í„]´]´9ŽÁ&Á6‚ ‹°Đ´\= °š`…„Lx!a4Á đ‰÷QŠ×˙ÆŖ˙üŋZkkîˇ˙ī]vū“tßM°ƒ˛P’[§Õ´'d° ܎ÛÕÉe’ˇģH&äXzė–i×­+A?ONm‘ÛIÚváIļEwO¤Û"8™čØ„ AãFˇ˛eË  Ãë…ũ˙ë˙ëúŋã.éÕ Đ÷ŋąũ˙WÛh{Ũ.ŋ˙ēkiäézׯbŽÂũęÁ$ŪŪļ•Õ´ûíŊ6ÂuØL ÚXa\2XKM†JÛéeu1ßE—˙˙, ˙ú.žŋú˙Ũkâáũ_˙ú˙ž“JÛũ7Ē{éĶŪúož˜˙ũí+×ūúŊ?mWŊi;TëÂVÂvë¸˙˙_˙˙ß÷/Bõí¯ËĢ.¸_o×ũo‡øŽ?˙Ô~‡÷ņĶãûm{q­í*cŋëīõīĒuŋ˙û„Nß\ ŋ˙î˙ū˙˙˙ŪÂ-ūÃũ˙ßÖJ 8h˜įr‡ZāĢ˙˙ ŽžöÎ$ŋ ŧ1 ëž+_÷¯ī­ø…Įū?Žž?õá>û¯˙˙˙ú˙ūŋũē˙/Ûû˙úŪˇB#Ŋ˙ũųuyuö|ą/…öÂŨK1đēūÃ˙ú˙ ‚˙^Ŋ˙˙ÚŊŠĘ˙˙Ũ˙˙˙ũöē_é~ß˙˙ūÃõÂ.ū˙ũÕ˙߯øEŋá„[õ˙\W‡ŋ˙ūcđ‹üÉ˙ū‹¯˙×ÛUū˙ō'_÷îPŊëüNÁũŠũ/Ã˙×ũūũ/˙˙ŋü7ˇéøKöÂ[ú]˙†õ˙÷đ‚| ŋí˙˙Ũ{Z_î—ö•¯õũ¯˙Ũí¯īdéėįû˙˙nūŌī˙×ëũŊŠ˙A~A;ŋĨīûú˙éz_˙˙˙˙īá­­÷WíĢa/îû´žëé°ļ•ĢUj­¯˙oíĨũ×öNƒå ëũ˙˙Ão˙áŋ…ū—˙‡ßū˙Ōôŋ÷˙û˙˙ģÖ˧VČ˙qQßjÚ{ļŋpŌ°­Ûí…n×ŋ˙˙÷]-ÔÚv×īÛ4W_õßßŋõZ^Ĩa:\°Ų?{û“˙īßīZ^ŋ_˙ßû”/ū—Ķļœl4ŖMZkMv/¤Ķz[ãb˜‡ŧV_Š[ûũë÷˙ĩˇŌũWW˙ēķE}ûí6hĩīß}PN¯K÷Ú^qū˙ļ˙ũėĶ_˙×ũĩūÂdn-Ļ!Ri´ĐA„ÂaĐA´šlR 4ØMUSQ´ą 4õ˛ūÚũ˜WZK %ė0ŋÚ°a+¯˙a…öĪ~˙aoû×îÖZūÃI˙ē˙[ß˙īū×Û˙ĩ˙÷øa0™Ļ „ Âe  (&ƒėŒp[ öi¨i ÂŨĒiȝA§Å' %ãl%~ÅZÅvŲbnĢ~—Ŧzžõâēė'ŨúČy†nģ u÷ÚöŋĨö×öŌûŋØiŊ_Ąaaa Ļ ‚jS…A6*MĻ*! چ“I§´Ã Z ãMîÚNí%i¨av-~˜‡ÅZņíĨÁō$r-ØuŦC¸†ŊĮ{ &ĢÅ}—M—Û_¨ˆĐˆˆˆˆ‹A‚ îƒ;ØA…VˆA…jĶ#„LBM5…l%V­bĄ‹Q 9é§ )}´„r ꘤ÂI ĻD„Û í‘Ļ暴ǯļ›IĻĮ0‚uԈˆˆˆÉė Á4Daa†  ÂĻĢi¯ŠaSaĻ­„Đa—Š­Ļ 6)SiÂlč0ƒM„ƒM„ƒ4I§PƒõŦDDdײä Ôˆˆˆˆˆˆˆˆ‰F"&X Âa82ė&Q(E Đa_+™ YëŌX8ˆˆˆˆˆˆˆļŊ ÷Kbĩ˙¨kUúi UÚ°ÂQ kqQNĐl(ƒ@ÁDG-ƑŨ΢ ĘÁ’FJâž;ÉJ¨Taڂ‚Ļ EHí`î ūēĒ–â}õ§§‚’A kGbŒŌ*q6Ē ĸŒ—2(Ž™æMė ;Jŋ‹ûOēĶIĒ„ÂiĻ&!… ‚¯ërã´P°áĒŨüA¤MáôhkŋūÕĘßí[ˆpû ƒ˛h‡Úũ}?×ĘäÖÚ§å¸R ×]>úĩĩÍŗĢ"ąÕYĒķŽD~ŊëĒ÷ūW3í}đ˙ĐįjHes!˜ãÂ`•l Á`† 2 dB$Xy@Đ<Á”F™‚!‘*y†uzâ3)ĢŊ/§•W˙ߡ]5Åĸā0…ĻDĮá0˜Pž~ Ļ„ ôBx33 ’â2ã(™Ō"úo­ŪĒĢūŪ?­Úy´ƒr#æļ‹ļ‚ †Lææ‹Į6QąčģlXT-í1iŽBŅpÂT 2’<\ĖÆP) e†`gŲ9 ÔÁ ēFy)Í3\S ējŋ÷ūŠŪę¤á„Ú ēm&+I´+Ō ō;‡dX¤'‘^Ã.eÛT›š˛ĐEÛX!a4[°˜!ęvé„ĩd ‚ afq dä™‘œh831IãpŠ^`# ø˛'‘GĀÂ!.\‰ûf‚Č3ųˆĐ‰ŗ.Úš.!4hĻ‹†ŅpđT\4.é×kēˇē^?ū¯c鯧õũ>ļīCžûĐÚ_¤Ú[k[L é:Né]z‹Öí%˛XK!’¸dž“ēM ŋ’ļ“~ðēVŽî“l‹{ )FƂoIØ- ܈ũë×ú˙˙ūŋ_ĩü?ãÚũzo[Ŋ/}+Ú}úŪĢõŨ'īßĮIē§ičjũ÷ø^ūÜ~õ ™;I6ÂkWÛôĩÃ$ũēJØOú˙ųz—Vë×ú×˙^öë¯ņ˙×úŽÆ/ĩŽĢDWzĨĻžļ÷k}Ž÷ˇĢzÚ_î—ė?ũî‡~›­/}´ēún›ēk˙˙Õī˙ûßūõå§ōë…˙ûßáÖôēņˇJ˙Æžĸ+ßWĮ×O_Įü_†äŋ´Ģ×õëßbĢO_ëŋš‡×˙˙ū˙˙˙ß{˙ĸŨ˙˙ú&ĸĶĢå‰ūE°ZØO˙ũ{~ŋ˙ūŋõáē|Vûę˙ô.xâŋëŨ(ūëûūûīŋ˙ëm Ū˙øAū˙ė>Ũæ+|ĸuVđ]†ÚMōĶ˙õôOOú, ˇžũ_õēŋÁÅ˙`Šú˙ûõ˙ąM˙ûĨ_˙ûí˙Z˙ŸõūŒũŋa˙˙ī×˙ûõ‚&÷¯˙ú—Xrôáūí{ūÚä˙ī_öNŊo˙„×û(Z_ßõūßÚ[ũŧÔūûøA>ô›˙˙ū˙˙ßÚ×˙ˇú.?ī÷ūŋI´¯ĢúÖ×ē˙ôbÂŋŊ“¯Õ˙˙Ü;{˙ĐoßúŌđÛo˙˙˙˙õ5§ôļŌ˙˙đßá˙ūĢí~Xa[ģŌm[Ī; o_ū‘ī­…ö×˙×uŌ[4Î&ō…öO˙”*Kūúõ÷ßŋ˙{˙mūũ-Š˙˙ížôŋ˙ŋÛuėS &­ĶĨ lWk˙|ˆ@w^Ú_ %Ú~ßß˙īkM7˙jęūˇ~ßáÚš:˙ũ.Áōu˙dęęßũÁ{˙ūPƒī˙ßúpšļM6šbí´˜i1Ûí¤ČąM~A˙k|keö+°šė4õÖÃJŪÂWá+öÖĒ˙ŗ4é÷ûīÚ÷õßęÚ˙ë÷^—Cö—íú˜OdęÍŋ˙ÚĢL1IĻĶ ‚6)Šal ƒbŠš 4îí$Ķa'Ōl_ĮeĶiZWL~Á„ŋ†“˙턯ėō×Ú$.ízívëmm/û ZšV§ŸÚ¯˙ūÚ[ļļžžÚ^zˆˆ†D a2A„8 ÃXa5ëk|RĻM¨H9Ō &Âc††Ú´šÚŠ‘mŦV­ėlZlqy ũûßĨzŲuĮ˜V_ö6ÂIÚ_ÚČRīm/ÛN[á„Ŧ%ßޜDDDD8ˆˆˆˆÍ…DĢÄA‚†B ˀT¨ ›Q°‚ ύ&›MĶĩAĶĻĶiÚMZLZk %m(ÚĻ8Õ6˜ŽKN؃ƒí´¯X†Å_Ä—öŌ×ŌB„DDDC ˇta‚ &á„׆zøa0ļ¤qX…ÅSI„ĐqH0Ä'ašh Ķa5Åar,+0ƒb‚i ÚjÂL&‚Š6ÂVŌKHGaˆå<A‚c„jAĻa „f‰đ ĻU„ĐjƒU~Vš†F8L( Đa[#„Ōą 4ú^¸ĐˆĐˆˆˆˆˆˆˆˆˆŒĮˆˆˆƒ$„j@Á† „Đƒ"¨a*×IÄDDDFŖ ZZØŦ/­XYd) $ Á'ÜPÅAXQiÔD›rŽ[™ĮâāĒē–…\ˆáđpM3$‘‹ žFgj3°ōŠöĩÕ2ÜHÁAAAANĘeVã‡ũUB¨Pž iÚw8zø‘Ŧí:wßpû˙ÔĒåa{˙-Ísf|ÉC<Ī$ ˛ ČfHF#FHZø_÷ķą›™đš &aB '„& ˜ ĶĨ ˙__Ą-Ú.!B..Â..CEŽĶ,…'͙ ėŖrōë×īũu˛;#ļ‚múM¤úM¤Ū‚ á0˜L!Dc4Bp0DS™Ã8*"yCņ9Ļ{'āÍ“"„q“äLĘxĒĨ ō(ŽõˆČëyŧëŋ(d[5Y zëaSĨ̇§ß¯Ã$úm¤]°†pĄ ¤Â,rÆ7jƒPĄ0ša0…‚ û30C0C0‡Å3#ėĖR€āœö‹šƒ3ađ‚h!áO `†lSâžá”ņv|\œˆLĶ0H—"AfQ›dÉëĩí×Ĩū“ũ â–4Ÿļ ÚAøM†#e0Á*$]´]°›Nm0˜L"ā=͛ҭžm !a|Z.. „= Ŧ&‹z.Ōtā… đƒÁSĩL Á a0ƒ_Úi¯ÚĢ­vá:¸pÉ]Ōn˜A’¯[aéŲi&ŌpČáŊ$ō(îéÛŌ>8AéÚ¤&Ųz äoIēIˇa#cH:O°‘­´øEãŅĄ…BØ(´[šĄhģh¸lø˙Qž"ēŊĨôëēÕé[îÂ~Ÿá=×l m’Ë%;n)6–Ŗ^Ânž~Ž>ëN“Õá“oL“éŊ áÃ#‹R8h éÃ#ŽÚ oüžÂęÚ_ūˇ[ú˙˙ÛÕˇēßúv›jŸ]Ŧ~ĢÖŋ˙ī­×úKļ“Šž•ŧ'á?i<'õđ@˙ĐĶøEŽü/-”˙ü{í.‡ũĩīiûëmÚĶÛ÷_¯N׍7ũ×Ģū—ũU˙×úNŊUĸá˙īđ‚¸ø_K˙¯Ä/˙úX…÷מë|ō{mlWëņXŽúkĢčīĮõ¨kI˙úú Ŋ/Â-˙˙ķVü/,˙Ūņ õ˙k^Ãé†˙ÕŋÂzū Ķu÷˙ë˙ˆ\}˙˙ëú_„˙˙ēá˙ũ°Œ˙lÚ ž˙ž‹×Þđī‡ž 7Rõáy†ų`_ÚtL™=x_>'ėk{uö—ŋ˙÷XA˙ūđŋöëöÛĻđ‹˙„\[ü"ã¨EÆ÷˙˙ûZ…áõí˙úßŲĸ¯Í5÷'Ōū˙ûcë˙˙é/ŲE˙˙áŊCt—˙ZXoôŸKí.ûK˙˙¯ü ŋÅļŋļ׆ŋÚG¯÷ŋũ…­˙÷īĨū—¯_ĶûlmŠ_˙ĨˇŽ’ˇûĨËÛũ˙_˙~—ø/ø0“ %¯a+^T˙ī˙˛tVžÉ×õú˙ēũkŪ÷xvƒĨũū–˙v?¤Ŋø˙îû×ŋë|B,ŊˆvÅD;bĸąWŽŋ˙j–Ÿļŋ˙zú˙ũo_īŋ˙ßįõ¤´Ų:ŋöō„Öõä˙ĩû”+'^Ŋ“Ŧ ža4ØTi‘^iĶŽ×īŋÛ _­Ú÷ßŊkí_ë؟{yĸ˙˙ˇūū×Oöė/õˇ˙īk¯ūē_´Ú Œp­ĻšPĶ%&Okąģ˛ę4AũļT ˙îÖ×û ÚũˇM0ÂēfޚžĶö×í~ëíė+}¯l4ší{ ëa+KŋaĨĨÄDDDDD0BB ytšm&ĢL5ˆlt°iǞ-´˜‡vė]Ĩi-ĨÅ0aoøh5[ ‚)ŨiqtÅC;=¸ũŋbŊs öV ė,UĒÄEØM^ČŖ„š 6˜Z ‘žƒAéĻ1LŠ<&qQIąM4ĮiUĨią­Äv”0ЎĶZm°6Ōūî/â˜Ģâ äEÕHDDˆ°…a•i„L&a0ˇĻ`˜M=lž(P°Đ°šb¸ĻGĶa ĶdqŽ!ŠöƒL&G ĐmR ˆAÂ ĻmPL&ČŖÚjęĸ"Œˆˆˆˆˆˆˆˆˆ¨ŒDö@ g Fŧ0˜B Ë „få¸BL% 3X ÂhOá…Đk -U…Øa´Ķ ­i$õT#ˆˆˆŽ"8ˆˆˆ¤""""""""#úúØuI/]U’…a…+”´ēĄk‚^däS.uŽļ’PÂaZm+UeÂÕ­ 騈ˆ††Gå6ĻËz” ÍBÅ2T0™ÚŖ3ŒŲØãŖ; „Âā ž'ģ}ũ=¤lŖeŨÃé<ĻŨ(ÂxM‘d@–@Đž8×WIÕuū¸ãJŽŋ×õ_õ–Í3ŦFI•ŽBI”’Í#ŽjõūSK0 Áö4 0D:´ h ÂdD`‚"P‰I˛8A˜dNh$r(2H"͚fqƒ!D,ČĐg&ÜÔ!iĻŨēJm¤\7ˇ`†š5Ņnū0…ĸĮađPĄŌaW[0Ō6ˆč"#ĻGxŖcdWlMƒ-#]Ļ —0›ŅvéÂAˇpá—Ô^4ĐAŅvæĮá44kƒ‹ļ f ŽCPį§)œtÂm-„’o „Ō}[éÃ% '^˙‡I°Čĩü4+j𒠆Fō¸Šb""@Ė ŽC]s˜)5īßMę˙ët5{­˙˙ ũ÷§áum ž97.#ĸĶL%ũ_ŋĢúûžŋ¯Í:!ŗZ/—ĖīÃû ¯Ĩō4d2$F †gDn>EPe@Ƀ$"C$ Ī("6d˙íÍÂ`•Ȩ™°„”yŪŖ!â™BĮņiļÕZÂ0P˜D?0˜A Â  Á4O0 ÁB M?¨„X d1„ĖžHĪ Ė f:ƒpš Ÿ“ũ/Ŗ[EÛBŅŦ0†‹†tlĒ.Ú.ß5´]ÃBīęƒĐaī=;T †w!|…Ÿ ē‚E9d"Q „Bæ}à IŌl2;jî‚m'ŨŌl28i>Ž‚¸AÕļGꈖÃĸ•ļ°_!îÂßŌl2¸M"&6ŨŨÂ!ŋ Õ;bĶL&˜ ük˙ã¸z]bĮ˙ŌŨ5zÕ:õZ[ĢjŨõúmĒa-Č`~ûh&íRDHhˆŖ¤DvÛuÂûûųpī˙ …˙ũ'–ãâūõúĩ„›Z˙ú˙õõĒx ũō*ßtch2iŊŨ´EËĸŋīZ-;a˙x\#?˙˙§ ^ŠU…˙ĩĻŋëīû~ÚŨoŊ=mĸOZß§d šˇ!‡ ģˇÔ; Ÿīûũ†ÚÛøEß/˙úÎ-Đ?ᄠū;}4ŋ˙˙¯ūģ­{÷Ĩëo­Č ęÁ0Ÿ÷×˙öŌöÃoõĨé˙¯ũûÄĩžÔL=˙õũßëU}ĩāߎ5í4˙~—ũ|VØv÷ũ/_û˙ũāŋ˙mĒ@Žŋ˙˙ú˙ëčv–”Akûü6žļ˙Ø^Pœ=ëévNŋ˙ũX_ŪģbXânŋ˙ū˙˙˙ØĻ4 ô:õ¯áŽ­vhŸôjú˜Û1Ŋu_˙¯˙˙“OÂ!#˙÷NŌ˙˙˙m*˙˙Ēŋ˙˙ƒņínŊ.[īŨz¯{i^Ũyû˙´ū“˙ũô Å?˙˙÷Rg_žļ¤2˙īˇû $ëŦKazŊ6Ö÷ũ80¯ēúüKûŽÚŌÚë˙ũŦ1_˙ō­r;ä=™˙釮ÆÚKČ?b¯´ļ븇q Š‘aÚZŨ˙ú×ŋ]öö—‚k˙˙\5ûÛ˙Öz×ũŋ%Ãg ŠA§h6Ą„­ ƒb“ ȃ ‘^֛ $O˙ī]m˙ŪÛ]a,­_˙ûü˙K]´ûû˙ŋøi…ŨĢQLVK°šØTa(bÛļŋ˙ĩ˛ũŊúUA˙˙Ö×ë˙ī‡˙^ŋoüDFl(xˆˆˆˆˆˆˆˆˆ‡ŧ~ŨqlOõ†}í´÷¯_ëīčŠ ”˙ģTŲ×_õ˙ íúBs؇ÂmĨÃb•bØ­Ŋ¨‰O_í­l'˙ũ”a0ũõ˙į?ú]5ĐlRvŌi°Ũ;kX›A*ņęÚZ!„ė/ē}í„ÚjÁ7Û'ģû_L?dLŋHp „Ã&ĶIÛm&ŸL6I;¸iĢi' b‚ĩA‚úà í…|˙ßNÃíŋa$„~M2 ´W´ö BM0›h[°é;ˆvģMEņ;ÖÕ7Øgīƒ‡ˆ0B Đ0B,…‚U‚dĮ.iσ!ė„ļÂ{ $á†ĻÚ›O†Kj˙^"ŌV?b¸ˆˆˆˆˆˆ0@°`„Eđ îa;m{IĻÂĻ™ î)Ļ•4Ķ´á­ūÂâ8":`…Á‘Ķ Žšh4øaU0­{Ub“ x2ÚY¨ˆĻ"&mˌŠ4L ÂM~íl/ˆęT"""kƒ9TC¸&ƒ ūčXˆ™DNĄ˙Õ\Dà kũŠaĨũ…įeNņ”ėŠ’Äv%v …čƒ5„Ô“rf^ /aīëÄKrødņîáÁøũĮr(ŧ›,Ÿũũ|Ë5˙˙úŋķŊOũ~YRŋ~Ÿ¯ÉŊŠ…"B„ ė°ũ|æ\ΌĖgŲü ŗB!…)Å@Īfņ’3C"ŦŠ3yŠŠ,f¸čō^%!ŽąÕa?é jƒ;%/O U;PP†aQcŧ NÁBÎŖ<`ƒ <"%’˛^Xá„Á„›Bîöžv$߄4]ļĒ/(ÖҞ‚Á*.Ú.F°Đ°‰ÆĸŨĸãŖEÃa Z.Bžîúvŋęô›zN“¤ôôČĮ¤dvŌi]‘] é&ĐM¤Ūwí4›wW-—îūw=ė‹~žhiģõŌĩ×Ú U´õ ÚzېN—˙îÉc –Rl2N°Cīū}NĖ_ÅjīZ_Ķßâ¯^˙ ÕíVÕû÷öž›ĻčtLuīßWÕ?áRö—ņ¯c×~Ŋī[tÕ}˙¯čsë˙M/AWø.ˇ˙_a˙ũâŸĨ˙â?ˇŋúë×ÃM.úûRĶû×K—¯ŋ_üũĩõá˙ūū“¯&Ã˛1Ĩ^"ģ&ŋũí×˙°ūŸß˜˙ûĨ|.Ã˙˙˙ųnd‡˛By[5„΃Ép†f¸Ēû_ŋ÷ūž˙ēAW˙ūqÛũ˙ũuá†FÂDsaPeÐÁsąQM ē…ú˙ĩ˙öë˙l$—ūé?Ĩí˙_õ˙ °žƒPŸq "Bd.üBœZ ‰Ã#ĸ.:ŠN؊k á¯éŠ˙đßŋėR_ßéxoõ˙žŋĸ.6A¤D†Šû…Ŋ5Ŋ ?Č0q "ø0_­oŲ?{ūŋ0ā’˙ßîŧ?˙ß˙ü7ĸôŌA´AĮ„BX{°Ņ m×ípƒŧ ü}ŊûÛKÍIūëĐC˙õi9:_5§˙˙˙˙Č~¤īI7!:‚÷á4î菭nˆˇŅD#ŋ÷¯žÕĩMīnŊnũŊ߆ŋīŽēMĨ÷ūö'ĩí'ÛųՅîĄŲ ĸé …ĸmØ$ƒ}Ģ[iąPĐzNa^ŋ!FWí:ēl%kßk×]˙˙Ū—]/ëßũßÕôšģ &ü&›h.Øēcž5m$̓ˆv›öԊbž.Ōĩmyq¯úūˇ^÷Ķũ˙ô˙}ë¸Nõ~ƒ6+6L&*aŠM;dW„ĶiĻ)ŠtvdAÜTS $›Vŋ­u˙˙ë†˙Ãôē}]aˆeØ a.0ŒĐ`ˆh5l&ŧ2N Ã4ĶIÅ5T„>üAõãĐ˙×ū †/ūŋâ""""""3""""" !un/äØÔÛ¯˙÷˙a˙ Pkúߤãíŋ_˙ú˙˙áú°|~˙ę찟…˙m/äsđ":˙×ö˙ŋŋī˙PÍ`‡„BĮū?áûi~ßáŋĢ_û xAoû˙˙ą]í˙|…˙ö+úZ˙O!Gũ~ü7ûī˙ ~ŋũu¯Â!ŸīøoúúđÂA ˙û{ũė?ôC‡ęsüÂũwüSO¨_Ķi÷[3áŋĶũ0˙Ú˙ˆøƒÕî­[ ˙ īûũ‡Û$/úúˇvàØH1+õnwáoÍ˙aėNÂ˙Ū4ßbaĨM;D2ûÄ;ãûđœ0_ĖM×öė;A„ė$ĶT/âKN,%b“V6×û!đ‰i„ČW" ÃAã„-nėU&Ēk鰂ō$Î茭LėRᕃD&rˆ`ƒĖ ˆAZt[ėƒŽA4´ĶI đÅxA‚™’aFâ°EŅ)×/šI‰r4Dxˆ\DDhDDDDƒ Ķ2à “9p0šaƒ ØA‚ôg„×F‚„$ĩ†`)áTh3Ķëž""kČĪÍPazNĐ}û ļ Ö„_&å%J‘ xˆˆ‰ú[ģ̇dų„méĒtšžšH‹­$ņüJÚ|ãŽáēmŪģŨ}ôë˙­ú“ÚMíë¯~ŌZAuũÖēû¤ÛzÕúøÛTĩũ}u˙žë×ŋ †IŌô××˙I÷ÖũĻ!BŠđˆZH<Nˑ dœaŸ RsÆp‘ Æ ŠA Qėš ũŊ/˜õj°ŋ ‚kń„ĶF†‹?o  ÁBawĻ˙Ķęaé}7rn %ƒ†Dhá“9xĐØ+FƆm'A÷vOĐDíÆ‹ļ š€ĸŅnũnõ]ēõø‰,^Õ0Ã#É^Ŧ21ŌON“{ģ†á6+h&é…#Š Ŋ}úŽ×éž?Ĩ´5 Õá ZzM˙ēˇN¯ôÚMéo§˙˙˙Õę˙Ŋ|ZũëĢúŠû˜zŽézW˙īéĐę6Õ÷ūŋßë°ĩî•˙Ģ˙÷˙õ‡˙ęˇëčp_īUŊ˙˙ūX–XĀûûß˙˙ęNǎęŊ¯ØO˙˙é}˙×˙˙üąEņQ^éz˙˙ûö˙ī˙˙˙ŪˇŽ˙ë˙˙ūë˙ŋī˙˙k]įF˙˙ûö˙¯˙˙īÚŽŊo˙ūPŧŸ8ž˙ŋz÷¯_([Ĩ_ū“˙ú˙ĩÛÕßī˙˙˙ŋ÷×kūŋē˙ļ—a/´ŊuēûKũ°ģio[ūŨũ6ŌŨ5ƒļ %tõØ[.ļ×Ûūøim¤Õ}zW˙´“‘oąÜUí¤ą;m$Ķm+‘nŦiļ–úęŋü aŠ ĐA Ú6ĸ˜ ƒdWNbią ôĐl ˜bēPƒh  &tŧ2´Õ¨A„ ‚a2‡A„îØIí[ §Ģ{NũŽ""""""""""""" Á 0„DDDM}Ęåyņ¨A gk/īĒi–â7ī’@‰ĒaīÁ>ÎôS+ˆdŠ•dXŊø j žW%Ϛgeď ¸ zyØY…M0¯đžĄ<& ˆ>ËĩĶŋŌk„×ÁžŠūÂŽēĒzjƒ˙IęīĶõüŗ‰ŨSÕUUUBkéõôõÂzz˙í=%ÁU?˙ĘøŊ*éŠ\¨jĒļ—”Œ&eėȈƒŒŽ~ēŽ ¯ëū*Ļ [U×+‰JĒŽŋûw¨õõĸ¸iië¯ôϜ9n=ÕR\.Ģ÷øä­tÂu×ęĨuŲJēëũâHBw4T—ôAŋ}pĒŋKūēĒ˙…ĒČ(ÎWN ´ē¯ūēĒá­Âũđ—¯ĸ Ŋ]UqŌ %XZ„•QxO^@˛q“ŠxÎ@É@¤ņƒ:*@ĖÆfgŌ0gBĖ#ĸ6dŒÁ ÔėŖ!ŗĒ6ĐdƒO6΅Ō^Ą%™ . •uÁQ¯„Â`Ą;Â}‚„Â, a0ƒ aķP@Á4 4 „ũ/„–ŒƒUKú¯õIŅą¸tkh쯋ē;‹ļáâÂ.Ũĸí„0†‹†­EÛBŨ âŅc‡ŌTē (A…¨JēÖž/éēl2VĐOŋˇnČīO%”›‘ȃ´ƒ û¤Üˆö]m—B7h åqUč%Ŧ%Âii.ē_úžÕęëÂÕũ×kjŌëĻÃ6A´ŋäØa7Ķđƒ¤åqŗ>ĖĨéV“^˙ôŋ}ū–ūūŽĩũ:ŋĢ×Oˇŋõuë}}…_ÂČAũ.D5‡¤’ū—˙ccņuũmŽ˙éĒo÷ÛIėũúõú /áT*úA-R]m‡ô!}xx…˙ĮÖû˙‡úŋ른d­ô‚Æ´Ífœ]*×_ü;ųj_ö˙ë˙ũŋû˙˙ŽŋŌÕÂ@´¨%ëõ^ÃaúA˙ûÂ-˙˙˙īđ˙˙˙ųk–éũ%!Gé$–¨†fŸ ̝ßļßá˙°đ‚˙˙ß˙Û˙˙ß˙ūŋ×ZkZAjŋ_Û ûiáôģūû˙ûÃ˙÷˙˙ę’úõMúI~žŧ;Ĩ˙†õë˙úëü7ũ×ú˙˙ôŠ%Tŋ„Ģú¤ŋųô7‡û'_÷iú˙īŨ¯˙÷¯ī˙UzUI*p]uũkūûūŋū¯úæ‹īũ|âßū˙ōu˙øūŊŅ_ŌôŊ_ß˙iíūöŽŋa}ūēnˇū˙˙öÂ˙֑ ?ĒíUKI_˙WM„ØîOė ė"‡æ„á„×b­m+]]oītĩˇJū_ūžŋëúũW˙¸k|[\CUcą¨â]ĻūÚZV•ĨzļGûIy6Gũ_đĸ•:Ē„•ĨÕ%ë¤Fu„âĸ™ė+dQŌ Ši‘ÂdW 0›&lTTS $ƒŒ Øi&›L0”a0›_ûĨŽé+}uõ^~CÁ„ & ÖÂjA’pŠCa0š Aš 4A… aE+ ÃŽÚb˜Wl/˙!Gü*éaëÖĢú~""" ЈˆˆˆˆˆˆˆŒ´åČ !`—_ŅØ ũzęMޜ/×Ķ˙ÄB ?ļÁ'\/Uē§ŽŊkôŊė/ļĨđI5JÃׄŊVĢéx‹ûöà }+ĒZĨ_Ĩúņö˛}C„Š:öÁuIWø˙˛V/YŦũ$%×lūŋé§ė‹zG@é_^ũXé~—é û &šOo RNĢuŌ_ú˙ ÚŠØÆGøt–˙_ė4ÉzČ4 ė€Å^–•UCÕ-$ŋö˜D&¤%7R0!ÔR 4) m¤¤¨ÍgTאUi}ūÖͰŠÚ &ŠŪˆ]HC°ŸNŠYPÉh֕~ŋ°ÕvŌUĩ ›}ĒkĶ^6@h5mâyQWũģ× ęáĨęí%A0ž˜(.ƒ¤ˆĀ~ŧɝ,ėmũ=n“đ´ŊU5ØA­SM†(%A?5üAĻ •S%ÚŖ"#ąßa˙ĒôēŋZŽãęl(Ipšá:_ ļŒė-á24œ_ļŠ%úĒü=u[¤´ÖĶP’„éBëá˙wũĻŋjž4—TÛZÖöēUm$—^—˙i¤ëv˜YnN'\7Ō^ē…Ōn´•+ kĢjŊ/Ē_¸•$8ä ģ{@Ą>ÚĒĒô’Ĩˇ­*ģUĒl0ēĒzŽŋĒędüHü:ęŠ*ŽĒÚęŠâ´Ēę’áR×˙]Õ=ŌWûr Z×Ē J—UõIoU¯H.ŋ­ęŊęīÃÂzUaŌ ŧUd3UĩĨ¤›Tĩ …ZU]R_"¨×’čë#RÉedœKÄjČÚU]˙I“kĒŌ …Ž‚Tƒz¤zÂĢjĄuŌ_ŧ¤DĄnļ`š ™ŗā⁄BŲ3ƒ'a„ōšœ3ãsAQ ÆA‚dƒ%dŧô?ƒË–‘#$".Kä¸8zŌIAé%Z…ĨRTaŌT4ŗĢÕdxtCgk֕Uka„,(L*.Âč¸mE¸a  5›ŧ ÁPa;TĐ`šz ē5øMēūē×Ē„’D\ÕcÁú mI%_DßūDv‚ø˜q<:}gęM˛ūAšvla(ŲxM˛EãϚV ;TŅĸÁ|&ëĒú]jŠj ˇ¤Ēy*J’Y(0đ†AxČ0:Š _ ’_a=Xda:žUøzvt¯ “¤›ÕÜ:M†JŪû[ĩ%mđŌM´WSÕę’IRĒJ’Ō$UuT•5Õ|‰ēIh' –´‚}ĢVčawßéoëuĶô?÷˙Oītũ>•¤ŪŌá_õKĒũ*T’L:U¨Céj‚a¸H*…õéBU˙K¯ßņõ۟Öú[ßô›¯×ëŊ˙EäĻé*­V–’KĒJ礕*J’JÔĖ&Ē•*T%˙÷öą_Hī÷øú_˙ļú˙CŌū­úT’×^ĩÆ­ë…]%Ĩ ļ’iUkKĨF…K˙˙¸_P¯¯˙ū+ûü=?ūŌ¯§ׯ_]UiUUĩÕUUu đ–´ĩÕBĒ!O_˙ôđŋ@‹Ģ˙˙0Č/¯íŪ—û÷.šņŋžĒZ¯Õj•]%Z^4’^ēŽ’KÁi4ŋ¯˙Â.>A˙˙¨EĮ˙áŊ˙ö•}˙×].õZIR¤žŠ-RZīĨõôēH-W˙ŋđ‚ũ$Ÿ{÷˙ôŋ˙ Ú0õ˙c˙_õÖĒŋZĒũuĨ׎ +itŊ.]/ûîŋëũ/˙īûtīû ęë˙OëūŋĒ×_ĒôžēĨI$†ĩëZę•Ujŋ˙õ¯é/īZ˙ęŋßáãc˙iükúūŠ*­zI*Šé-$’¯ëēKę–)RéR˙˙õūŠ÷˙˛u˙˙ģ_˙VO÷ūž)R¯õUä3]*ļǧ¤ŠRƒW˙ô—éiŪž˙õ3_}×Ŋ}¯˙מOĩūū—˙˙I*\,uI%§ĄĒĻ“üôĩIRÃé-Wũĩúõô–í÷õĩöÂO¯ļŋŊõļŋūC’¤5U¤ĩU]}uK¤C5ëũ*_ }i/ëÚWÚØUõˆvGÖŌíŌģl'{Ĩ÷ŊwôœJ˙č!ũ/ø×I%DāŠ ĢŌĒHƒMēõ­i/¯U=zĢi&šÛí4>;l%{ %MŽ!ÁŨĨ­ŽüīąPwū—i,*AuI/„*ĩÕuĨĒ]-%ĒkTŠ" ūlRh4lá{#Ã˜L1 i°‚ ‘ēp›h8aÕôAáĶēū–ô’T“uւԂTC4rKUU –A|^ŋŌĸ 9ëŦ%¯ˆƒ""Áˆ†0„0B!„"$l Ķ ”<0§°Âö°Âa7Ōã×ZUIV•ŌJÖŠ%A Ō…Ĩ֗ĨUôŧDDDDDDDDDDDDDDbר^ĩĨ × ĒZZJ礰ŋZT•%ĻŊRTũĨöJ5U¨ôŖJĩĨĒŌ]-%×H —a:I%ū' ? ę .•%´’†)(õZˆ ēúëV’Ģ^ŠGâ$‹ČuĨi&ŠpÍA˛ž“ęá- IT!.:׏ŠŠ‹L&— ĸúK…­Ô>Â꒤‚_J˙ŧƒ0éЍęĒĶ꒐#^Š&’ ¤}iéŽC"zÕk ÂČ(ŊĒ…I$—U˙Čj:ĒĒpĘUZ]ŦTXBÕW°•¨IR xm8I%CĨûH|DX^5ūĶ!—ER†¤Ôƒw Ú:ŽAC.:ĒŌ“Q˙ũĒǐPä6ā*ĻējĒĒ›áUW kĒϚĒĒĻĒǐVŊ:UújĄUiUUUBúę™ČcĨÛ B…PŠĒĻēaWUL†cĩIĶR ƒĻē¯2# (ī"¸ŨØMU4¨UÔ Ô(ItÂ~ǚĻCjƒxU ŊANցsPs@†ŸJđÂÃ Ē… ]Âiá0ǘU … ŌęL*… ˇŲ ü0Âm5V#?A‚a4Âa0šaBa5L ÂaBjšiĩ¨M0ĒǚáU~땆‰Ė0Đh5N“đ`ƒ „ &a˜TíB &ǏL.ĒĄ4Âa4…MB¯ič6“NûņA‚ j@ÁBaU0˜&–˜MPĄS[MBķ"xû¤Ûo‰ņâ"@Á „Õ5 „&AŨC™ā(MpŠ…˙ļ­ũ.ž„A—˛đ Â!Aą„Âa0˜M4ÂVĄBõūŊĩ_ÚCB%XÄÃ00ƒ „Âa0°Č[ „Âõũ+oĨũmˆ†Qa•S  Â „ä d3##ė–æÚ”,„2(ÉÜ}~ũëûAˆâ"/ „A™°L Ídla0š!/„ÁO Á0…ž?]õ%ؘ„@…”  SälgãˆN"‘Cų…š6æĩĐøCFļ†Ž!tEŽÚt[°„é¯îúFˆDŨ„ ŨÂĻA„?_ȰÖäHÃwdXl ƒoH&Ũũ*}5đđm(ŧn6Nf°ŅyYËÆŊ*đĶ̆ ũ„îKzÛdĄ=kíø:ZēN•Ķ~Ũ'Iôœ27•Ô ņ“ßū¯ëŋ˙öíRÚėũ}{÷ZN¯đ¯ŪŊ+h|'ŌöžŋũõWĢ_X¯öūĮÕúJũũm}Ļ—Ŧ/ņ_ūŊxū=ę Û­.ÚZ˙øëęë¤kũ¯đ_˙ŋäĮMĒ"qû|–ŋ[øb˙ë˙×ÛԐ˙¯˙˙Đõ.ž•Zžëļ×õųz÷I/_á˙˙īûūĸĸļEÅöūŋŋûé ŋ˙˙Ũ/ußßl%û˙ũ˙ŋk!'˙á/˙ëū;îŊkÃpļ˙˙û˙Ū—¯˙˙˙ūPšr…ąíĶžŋ˙˙×ųz˙˙˙÷˙kë×ũg““Ģ'_˙āŠŊv—Ōú˙˙¯öÕáĨžÚUû¯jÚõ˙Ã[û÷_˙}¯öŊ˙ %VöŌvģõ†ļ“kkû„Ž÷Ž+˙¯}ėCžČũėVÅ+VØKū˜a6*7ĻĶ^ãm>ŌŪ˙öžM9zĢiÕ4ƒĶ`Á&´áĨĶ ´ĸũƒi6Õ?ëéᒄšiĩ &ƒ ;Iá0Ä- œS#{AØĻE ĶØM‚›˙ˆ°L! ˆ†ˆ0„!Ą*؈™ļA„A„Â`ƒ8ę „ ›‚dŨ3.R¯Ĩâ""8ˆˆˆˆˆˆˆˆˆ!'õŽ×Đŋī-ôÂA¯úúú˙˙öü}×ô˙¯˙˙ÎôŽÕ3ŧšØ…^ ˜/5ƒrė&I ͐VvϘ_˙BÕU0L}÷ĒūĄIąĸ:#Dm"aFŅ´hŠáŠV‡îĶũ÷|DDDDE2 2p‡œgëÎÉâ@—äđŸ<4C‡&åHŅ0ŖhÚ6ŖhŅŅĸ6T hZ 3žŋTū×ãî"""""""0ÛNCÆ2b!™‚˛F }Wõŋųeĸ4GDCGD‰E´GÁĶ ’ŽęĢjŸúūļŸōÜĩÄhŖDCGDh‰b4FŅĸ‘!Ģmm$í˙|­Ī#ˆĖÍl†Iš# ú($ÉĖčyūãŽG R|ҞV.vjf¸×(ˆˆˆˆˆî—ŧz† īā™› Ą‚Ļƒ3a@Á4ÁBpaĶīĶ/>gp“Î p ņ ÉšR4FŅĸ!ä4hŖhÚ6 #hÚ6¯ũļõ{Üwôka ¸„0‹v´lm#ģt‹pŅwžē¨]WOė&…ŠočDDDDDDDDcí/÷_ÕļEv}Ú!klļ$¤ųh)˙ĸá˙ģĸpöĒMú&ņ+—Dą#ĸ!ŖhÚ6t­ˇrŨŋũ°,2qÜ0ƒū(=éô›­ĸĐ,!Ō¯%›pÖīTūé6ČąIËu$EŅĸ60´mDÂ:,DDDFŋõJß÷˙Ož)[MūĐ˙ú¸ĸŨ‚~ŋvLŽũ%é8ˆˆˆˆˆˆ´}kŋė5ŧ‡:‹÷ĩú]~õū˙ĒZ6‹‡ú}~÷]vęžŋ&ÆHÚ4DÂ4FŅĸ6 FŅ´mFŅĸ!ä"ŖbÚUouü!a5ë˙ĐûüWCô´ƒ˙ĐîĢo‹ũĨúrÜ)ˆˆˆˆˆˆˆˆŠņ_jļĩϟø_ūŧ/ázõŌ˙ũŌíâ 뉐ĸ4Dą#hŅŅĸ6ĩ˙×äoDŸūc˙ųuđ‹ø//_OO_äę÷ÚRuô‚˙–å¨Ú4GDCFˆÚ6ĸCFˆÚ6Ŗĸ!ŖE›XˆˆˆŠuzĮkŪėŽ4˙á˙˙„ú.?ø¯˙īøßŧ/øˆˆˆˆˆˆˆˆˆˆ­_˛<7W[´˙× ŋ˙ôŋĐ_ú˙˙ގö4I˙äŨŅĸ&ĸ6´hˆhÚ6ŖhÚ6´fŽˆÚ6‚#ԉmvíöž×_īū’úÂ˙ū7˙˙¯¤ŸüDDDDDDDDDDic~›CūœB˙Ĩ˙öPŊ/žžīú˙fwûŲ›ŪūY Q0´hˆhŅF‹kĩŦ=˙áz˙˙õ˙˙÷'˙˙í¯ûW]/íŠnZŖhÚ6Ŗh†ŽˆŅFˆ†ŽˆŅ0ŦDDDE?‘ÖĐ˙ ˙˙ūÚ]ëö–ĻũnŌžū×}ÄDDDDDDDDDėm{ígįO˙_û_m{ köŧ0­ØNūŦR§ŪÅ-C ö™7#ĸ!ŖDmFŅ´mD<ÍFˆÚ6ŖhĪ!ŖDm ŋõöŸ˙Dâˇņz°ĐvĮuGV]-ąd}Ša§y:øAσi4 &Õ ø‹N,ް„DDDDDDDDDDGž›]¯§˙Tŋöwĩa&8ĶO¨öÖĖ××jūéĨ{A¸•ÔŅŖhÚ6 ĸ:+Átš÷Ļ˙õú}’„šlˆ8AŠ‘Âi4Ų&˜L.Ō”˜0BÂČ4Â`ˆëzhŽļŽˆ‰#hÚ6ŖDCGDmGDCFˆÚ4FŅĸ!ĸ1B"""""ÅëuŊŅš}˙=ŽL!`„C [„L   „ fĒĮ ­Ŧ„#L•–IÂ2&„DDDDDDDDDDx é5VŠ­§éöģAøˆŽ""""!Úuâ)ˆ‰\QFˆÚ4D4mFŅ´mFŅ´mæ´mFŅ´mFŅĸ!ŖhÚ6šI†—ÚVšhiÄZ¤Âmz“mŅˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˛Ô&*šŠûM8˙H4ÅršqL FŅ´hŖhÚ!ŖhÚ6ŖhÚ3ĖŅ´mFŅ´m0šÂj˜TÕ;Lƒ[˙QĸlŖDmFŅ´fŽˆÚ6Žˆ˜FÖtB"""""""""""""k! ”üG¨ˆˆˆˆˆˆˆˆ‰Ø"4FŅĸ!´h„E˙íu4hŽˆ†´mFŅ´m#„mFˆÚ6ŖhĪ0Ŗy„mFŅ´mxˆˆĨéú-ČGDmF3h‰#ĸŧ øˆˆ¸ˆ™ #hÚ60ŖhÚ6ŖhÚ6ŖŒÂ7˜FŅ´mFŅ´c0´mFŅĩøķ.‰°ē1˜ĖDy™Ė您Q‚´*…*ʲŦĢ*ʲƒ+B¨U•B…â"""""""""""""""#ü˜d#>d› ƒˆ\Fdj+¤IĻ„DE¨ˆˆˆˆˆˆˆˆÔŖDm"aFŅ´mFyš6ŖhÚû… …PLLB_; "a#hŅ#„mFŅ´mFŅ´g˜FŅ´mFŅ´mFyš6¯üqúūŋŽW Ȇ`åLžL!;å˙}Ņ7ûâ„DE ÚZ4FŅžfŖhÚ6ŖhÚ3Ė#hÚ6ŖhÚ6ŖhÆmæ´mFŅ´mFĸ6ŖhŅ $Đŋ‡pÂzh8wtAŦrĮ,rĮEōa#hÚ6‰„hŖhÚ&â"""""""""""""""""") É žvĒÎ#!,”ešņsUš‰^¤„DXˆˆˆˆˆˆ"6ŖhÚ6ŖhÚ1˜FŅ´mFŅ´mF34mFŅ´mAšd¨ŧÁ0RfÆ E_õ˙ÔQAŲ,D4hŖDm"aFŅ´mFy„mFŅ´mFŅĸ1™ŖhÚ6ŖhÚ6ģÄqÄDDDDDDDDp‰;Uõđ†Ąęžš]‡ĸ c–>Xņ„L#DmFŅ #i:m_Ņ}w”î’áLĮšdãNw!r€Ą2­™ĮLEˆ†e4hŖhÚ6Ŗ„mFŅ´mFŅ´mĖfy„mFŅ´mFŅ´mĖ#hÚ6ŗhÚ6ŧGO*NÂÃo¤îü*x&ļƒC><* ã< ‚"H™PAŦrĮ,r æs;/ˆč0´h„DDDDDDDDDDDDDDDDDDDDFÕãúYÚ¯•~‚rJ˛M}SÕ;ûĐzØP…Ļ1Hb"""wČŅÄhŖDCĖ#hÚ6ŖhÚ1›F3„mFŅ´mF34mFŅĩNžJ,˯ßũ]uüģĸáü›§a'ŨQ8ōâŌÚh A 0čFŅĸ60ŅŅ´mFŅ´mæ´mFÖmfŅĸ0ŖhŅfÖ8ˆˆâ"""""""""?믝Ôí×^uúN“īMIŨ§wŌoIØ'ƒ‘‰ŨĖąũE§ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ’hI4Lf´mFŅ´SŖkK"ÂϜ…Ô˜YKoÂ×]u×˙^ęę˙ŋˇĢîM=lD0Ä1;Š#hŅŅĸ6ŖhÚ6Œf3ŒŧaFŅ´mFҌĪ0ŖhÚ6Ŗk6ŒķÚ6ŗhÚĄ°˜A ā ‹" OÂv&qø‘˜2F`Ž„tĖ4AB§›3ĄÖHˆ6™!Éã^Fâ]–žr5Ũ ˙¯K۟˙ϟļC0y…0äAŲ|ÍXˆˆˆˆˆę…ˆˆˆˆˆˆˆˆˆˆˆˆˆÖ÷ö˜BM0ŸÛa4(A…L a4Đa°˜A℥7h(L0DE`ÉØDd °ƒú_˙û­ôûõĄÅ‹ˆ‰ÚA‚0ėÆCGDmFŅ´c6ŒķÚ6ŖhÚ6ŖhÚ1˜FŅ´mFŅ´c3FŅ´m_ĸNaW}Ļūœ0]°†Á"ŨĸîÁEĸŨ¤8h[„4\4kĸá„-ņh>Ŋ_˙ūš°Ÿ_ DxŨãÚ4D4hŖhÚ6Ŗ0ŖhÚ6ŖhÚ3FŅĩ­E˙ø¸ˆˆˆˆˆˆˆˆˆˆˆˆŠ^‚všŅ7č”9qa~ÃŪDw"CI°í ƒ¤íHâ‚o„Û"Ŋ—:M¤é7! AŲg#|×+¤G/ōęí˙Ĩū˙˙üŸF_ˆˆˆˆˆˆˆˆˆˆˆˆ0DpÎ"""jFˆ˜FˆÚ6ŖhÍFŅ´mFŅžfĒõnĒJé6ČŽE†‚oiũ6ũ„ 'IŲ3ûKá:MęÛ ŧ2q˙ö ÕøM¤Ø&2xÅ˙ûK÷ú˙˙ū„1aą+ŅFŅ´mFŅ FŅ´mFŅ´c˛;#‚FŅ´mF3„o0Ŗy„mfÖmF35›^8ˆˆˆˆˆĨõũ=Ģ §ûöĩĶÕ֓ĶõĶĶøūūĶuôéa ˙ûë˙˙˙ųĸÛŲ|†ŽˆŅcŽ"""""/ DDDDDDDDDDDDD”¯˙ũ­-1˙ ūũĢüü0ēßõ]~ŋöĄ‘Gaßdëë˙ũ/Į˙ąˆ†"""V LÎaæhÚ4FŅ´mFŅ´mF3Ú6ŖhÚ6ŒfŅ´c0ŖhÚ6ŖhÆhŗhÚ6’¯˙ũļ˙Ûū÷˙×ũ˙ņėW˙Ž8AÃ÷ė'č/ũUŋĩ˙ō}KæŅ´CFˆÚ6ŖhÚ6ˆy„mFŅ´mFÖmcŽ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ_ûüŒą?đ˙h7˙ũú'e#˙&9Į:ēŋøXkëū´Ü”/ki|žŸīžˇõū™¤aÆ"""""""""""A‹4´c1™ŖhÚ6ŖDCĖŅ´mFŅža$­ūûˇū˙ĩûũ˙B?˙‚°Á˙–¸§ĄíĻÚKĸ~ËĢ´û^î˙í! QD4hŖhÚ6Ŗh‡˜FŅ´mFŅĩ—åŽXāˆņ„mFҌÚ6Œf´o0ŦÚûLē˙ÄDDDDRz˙˙˙nŊ§ū˙˙˙ö˙ü"âØEĮ˙˙ŨĮiČ/ 8´âíĩNND}Ļ›eĸ4Y4CŽ8ˆˆˆˆˆĐÄF""""""""!b""TŌ_˙˙÷AŋčƒM˙_˙˙˙˙émĨ˙˙ö6“MĶAÄ; ļ’lq &šxŒb"$iˆ ‹ČÂ/˜Ėf´mFŅ´mFŅ´c0Ŗz—‹æŅ´c0ŖhÚ6ŖhÚÍ´‘›û˙ėŅ}xÃV˙¯Ũ{˙o˙Ĩ†Ō˙¯ú˙L/žˇØ…mwjÂHÂ6ˆhŅFŅ´mFŅ´g˜FˆÚ6ŗhĮ›_øĐøˆŽ""4…¸ˆˆˆˆˆˆˆA‚MĨĨ˙„ūŨNoøa˙ZūPŋû˙\:_˙}˙Ã$áŠ'‘LA˜Š ’´ĶA Ōb"""""""""" GBˆ‰B6 ‚ύŖhÚ6ŖhĪ0æ´mFҌÍFŠ;ÛĶžØiZö’o~7˙û˙kîNŽëūŗé˙ßũŗOū"( q ˆˆaôhŖDCĖ#hÚ6ŖhÚ6ˆy„mFŅ´mWdvGdvGŗÚ6Ŗ´mĖ#hÚ6ŋĶĮÄDDDDDDE'I´¸ĩŠ[V˙ƒû­tĩēûIĩū×:îŋ˙o˙ú_ũÄL†#Eâ"""""""""1GDDDDDDDXb$ē&ĸ6Њb‚Ķ{Nímoī´úēuí†îūH0ÂŨ{}¯Úûw /UÕDlNęFˆÚ4FˆÆÎXäAĖđÁĖf3Ú7˜FŅ´mÍŖhÆc1åķŒÂ6Ŗk6ŖhÚ6ŋi¯„†›ĸŋl$ÅÚÚļ’Č–)‹ƒŊŠa„köGøģė&GJ°Â ËëąZūI˜FŅ´mŖhÚ6ŖhÚ6Ŗ„mf×ũDEū"#Cˆˆˆˆca˛XPįôĶ%i ĶUņR ø¨„Å Úi§M6˜ĻĐI§l;J#ģcŠ´Ú˙ਈˆˆˆˆˆˆˆˆˆˆĻ A˜Fˆ „KŖ4mFŅ´mQ6ŖhÚ6Ŗ„mFŅ´mF34mˆˆƒ"!„A‚ųÜ Ķ(áPa+0ƒ$ā˜K°ƒÅ&› ÉBŠdqM6EĶjëđ›0ŖhÚ4FŅ´c0Ŗy„mFŅ´mF3Ú7˜FŅĩkŠĩ›Y´m/č~""""""""">"#-9kˆ>ĖÂ$A„ ! ƒkđÂ&ÉŅ ^"""""""""""#ˆˆˆˆˆ‹‚A%ŅFˆÚ3Ė#hÚ6ŖhŅˆˆˆˆŒBO°B4$U!ŖDmFŅ´mÁŅ|Æc0æ´mF3´c1Į˜Ė/ÍŦhDDDč'ě ĨŅ´hˆhÚÍŖk6¯ņüE1ųuž8ˆˆˆˆˆˆˆˆŽmFŅ´mF34o0ŖzDxÂ6ŖhÚ1˜Ė#hÚ6ŖhĮ˙;‹ Ž;0ŖhÚ6ŖhÚ1˜FŅŧÂ6ŖhÚ6Ŗ„mĖ#hÚŋ˙˙ô(DDDDDDG×úaAY*ː´hˆj$"AˆˆˆˆˆˆˆˆˆˆˆˆˆĐˆˆˆˆ„ˆ@ƒ‘ķ4o0ŖhÚ6ŖhÆaFŅ´m_ßü& ""(DQ:"6ŖhÚ6ŖhÆfæ´mFŅ´mÁŅ|Æc1˜Ė#hÚ6Œjm*æC㈈ˆˆ Â˙А’6´ ąĖæs9œÎg0üÚ6”ÂĮüGÄDlDDDDDDS(GE˙÷üDEdtÕUŌb"""""$ttI˜FŅ´c6ŖŒÆc1˜I—Ė#hÚ6Œf3ŪafŅĩ”ĩâ+ÄCē Žņ„Awjc0ŖhÚ6ŖhÆaĖf´mFŅ´mĖ#}˜F×ū˙C؈ˆˆˆˆˆˆ&@Œī#˛QøAũːŽˆÚ6ˆz[ŋî"""""""""""""Aˆˆ@„Ž„ „ē! —Ėf3Ú6ŖhÆmĖ#y„mFŅĸ ˜M?Xˆˆ¤‚"! @ē6ŒōaFŅ´mFҌÆaĖ#hÚ6ŒfҌÆcĸūc1˜Ė.Ė%ū„GÄDDDDD}Sņūd#hŅ%yĩ˙ûĐøâ.""8ˆˆ‹b"""""0ĖЂMHÚ6ŖhŅFˆ;ē_ĘxÁ"4!.3°<Û!–DåQą:4@‚:6ŖhÚ63f´mĖf3ŒÆc1„qæmYš6ŋņŨäßåš§Áŗ†pŗ†gz™°]œ3Ė!š h"žc1˜Ėfŧ#ŧÆaFŅ´mFҌÚ1˜Ė#k6ŗhÚīŋųāÏ÷wÅúB„DDDDD_č|‹3˛ di•ĶįcŪĶĩ al'Ú (MNĘQŅ%ņŦDDDDDDDDDDDDDD"­‚DB&ŧ^aAy1˜Ė#hÚ6ŖhÆc0æ´mFŅĩų/~Fv0ŋč¸čģú'tMéĸŨˆŠ BGFˆÚ‚‚0ŖhÆCĖ#hÚ6ŖhÚ1˜Ė#y„mFҌÚ6Œf3Č7tšˆˆˆˆąĄÄDDDDDDWUũŨ'{RēßŲcē¸p–28¤Ũģ¤ōīšÚĸ6ŖhÚD§f›Kø¸ˆˆˆ‹ˆˆˆˆˆˆˆÅˆŠ B]‘ō6ŖhÚ6Ŗ>AæEé˜Č&BĨ÷ĶĐtûM;ŋžũ={ôé{B""…ˆˆˆhDMHŅ$tmFŅ´c0Ŗy„mFҌ‚#Æ3ų´a_ū"ÚxA˜ã0TAæ| ķ ø¨3ŲvpS8Á?õuõ_Û]?Zĩ˙öŽv°‚EķŒÚ1˜FŅž‹æ3Ú6m)´c1˜_˙ß˙ŧETCOM;MSZiĄ`„C˙2Gåŧ÷˙Øę/ø×ĢĄÃOņDDDDDDDDDD B"""!tBîČņ„mFŅ´mĖ#y„mFÕŽ‰8ãD‡ļÚ ,E˙¯ũ}īØũ^؊ ‚Â6ŖhÚ1ĸ‡fŅ´mFŅ´c0ŖhÚ6ŖhÆc1˜Ė#jĖ#hÆmĖf8.õˆÄDDDDDFJģzAä-´vJ:&âN!’r#ūžĒ?ëÛūŋŨz†vRˆy]o_ÖēņDDDDDDDDDbņc!æ´mFŅ´méõŠ'ņĶNÉšŌ~ƒAÄĮũ}_˙ė?˙˙äęb1b ˆˆˆØˆ’čÚ!.ˆyš6ŖhÚ6Œf3ŒÂ6ŖhÜwyĩ˙â"Ŧ_ļö“ūÔ{NÉ^HpŠü‡(8Ī š SĻ\dˆÁ# É‚@ĘAAŠ$ķfxÎŖ5‘0ÍÖeFL"F`Đ;0gR˙û˙÷ë~ØE8"<_Ėf3ŒÆcShÆaFŅĩú˜ÍŦÂ˙˙˙cj,DDDFŊ{Cūļ,zėŽnū¨:¤ƒ,&0šxO ˜(L&aPƒ3â Á0TĶP˜A˙ũž˙ī˙lė•!ĶîđꩂAˆ‹ "Ą˜Ė#hÚ6Œf3ŪaFĶĩ˙-˙ßéŽŋFĘ>7tkz64â&Ím 70ɘ/(ĐЋEÛEÛZ60‹ļh*(´[ŋ˙žA÷3ŋÍ:˙ÉđâØ „  Gv!‚f´mFŅ´mĖ#yŒÂ6ŖhÆc6Œf3˜Y´mĖf?Aˆˆˆˆˆˆō }ÛäŠ˙Ģ˙˙IŌŪ’|$Û#ļ,:N,ën–M†K e Ú Ųét¯Ü2V钊9]C3Œ?ũĒaû_í;÷íL įbČčČū˙ēĐĻ_6Œf´mFŅ´mČk˙Ч˙ä a˙˙Ž­ëŋļĶuN•ĩôŪ“īUuk´;ĶŊ=z žÁAB ņũoOû -ÛiU­§amÄXŠD B!†"8f”#ĸ6ŖhÚ1˜FķÚ6ŖhÆc1˜Ė#hŪaQ}q˙ņũũúũ˙˙ŌūéoKŪĒū›Õ˙í÷W§ũ{^Ÿ}'Đ˙wØNôØĢÖ*í6öW’ E:ŗ LEųŸŗ8">mF3ÚÍŖk×ūŋ÷qūĩĻ@„ „DGĩúŋīđß˙˙Ąŋ˙ú˙ևO÷ŽÕ¤˙úxÆFíøM0œpŌM¤Âi´œ\Cb“ĮĒôĢiDDDDDDDDDDDD!# AAAA b.ŧÚ1˜Ėfĸđ]'Õ?û'Ãũ˙õöŋž˙˙Ĩz˙õŽ!qz˙˙ ˙ûxĨŽî–Ú¨ĄH Œ @„ @ƒ AS1˜FŅ´mFŅ´c0æ3Ú6ŖŒÆc0÷ūĢØˆˆˆˆö­ôØOõė&˙Éŋ˙åƒÔą˙åˆ×oüąOđģu˙čĩÄõŋFá4-M4í4ĶG`HŅ]ũõŦ¨DDDDDDDDDDDDDD$Ų|Æc0ŖhÚ6Ŗ i…÷´×O[Mŋ˙˙_ī˙û˙ú˙ˇú˙˙˙ÄDDD! œ‚p`Ĩ„E!`0A A!%Ņĸ!ŖhÚ6Ŗ´mĖ#yŒÂ6ŖhÆc1˜Ėf3_ŊÄDDDFŅ7cÛK‹N"-U´´×īÛ¯ú˙ú˙û×˙/ĩ˙ūŊøˆˆˆ‰ÚĒ6¤ Ļa.ųKķkĮ÷ĮÆŧEÄDDqL!#ŖhÚ!ŖDm(ϐlU2 bô'ļ̧˙˙õ˙˙ī˙ĨīO˙˙üFéĄ(DDDDDD „ „ „ „ށ:6ŖhÚ1‚ ?ÔÚÍŦEĻĐiĒ´) ba4˙ø¯˙ū˙ëŋũפž?˙o¯đ@˜ „˜FķŒÆPaÂ0Ŗy„mFŅ´mF3ŒÆaY´ĢŲŽī˙ėDDDE„BB )&E‚%­Ē˙žÉĶŲ:īëüŸũ×~ÉÕ˙VN­{'O˙ųBũûŋõĒ_"c1˜Ė#hÚ6Œi¯Ž4>">ÆĶM&ÚV’v_ “cjôÛIö!Å?ĻĮī˙>c1„w3™Ņ„™‘ãŒÂ7˜FŅ´mF4Ј´wĒũWūęÎ8b""#ė&ĐAąQ& †“6ƒm0‚ ĶbƒA"Ŋ­iŌiÂ˙“p4T/˙B1ˆą„D0Áˆˆˆ@„DB   æ3ŒÂ6ŖhÆc0¯k !ԁ‚“ˆ`„C0„2āaRƒÂvš *_a^_įb Ę2—°Á!a#XáÂ;ŗhÚ6ŖhÆc1˜ĶA—ËÆ´o0”ÆcĖw]ˆˆˆˆˆˆˆˆĐˆˆˆˆˆˆˆŽ""")ĻŊA5;$Fˆ†´Qī÷kīü\F""ÄDDDDp fҌÚ1˜Ė#hÚ6¯Õ4ĶęĒ""# Ž„B"8Ј‚  ApËæ3ŒÆaÍŖh‡I—™ÅąßãB"#ũ ß}ˉ Žä$|ĮĢ,zfÎaŅ|Æcŗ Ŋ‹C÷øÚj"„A‚Ōî2,oū#LcÄDDDX†!! ‚@„#ģAGá¸åŽg‘ķ˜Y´mÍŖÚ;ŋ&ĘBũÄDQNÂAœÃ„‚#°Žā"ņ„mÍŖhÆcaÚ¯ė|Pˆˆˆˆˆ/Ũ2TFˆ†´mnēûƟĩ˙¸ÄPˆŠB(DĄŅ„c6Œf3„mFŅ´m~ŋņ†$ DrB"@„BDA@„!# Šy/Ė$aæ4į‚Ë™ĖöaËąŪââ"""? ë’äH`É;IåuÚ6‚;ÛĒĩˈ=Ljc1ßŨÆÕqTÕ!ˆ‹#Ą#ŖhÚ6ŸÄ0ē xŒãbÂf„~&B悓Šf)ĸ$ ЈčėĨb<~ÅčEˆˆˆ‹!‚B@‚A †A`rŨ#9œÎg0ķ˜_Š´cNí4í0˜O Ļ4,DP@‚Gs;FĖ#hÚ6Ŗ´c1ĮķAĮ˙õÄDb"""#äŨĸnújÂ'wĸnŅcõ\î´hˆyš6ŖiG~ŠĮ_ūûŠˆą!§@ƒ ˆ8f3hÆc1˜FķÚ6¯ú Ō ģíĢoI>¯AŅqŅvŅq„P@ˆč AŠDBDA@„!#ôGŒ`Žā‹é˜íũwÄDDDD¨,ŪE¯ëÖīĸYĻũ/õ÷u÷;%F|ÃĢäAËąÖmÔÆcģž*Š:jĒ""„!#ŖhÚ6 ƒˆ3ė B!Ėäƒ#[$’ ũ4¯õˇ[Õ?Ožî“Ž<|DEˆˆˆˆˆĐ „B˜ „B!îAeĖ9 ã™åû˙Ö ņ„ CM| L üíFFŗ kĢUŨ­jíû[Km&=5´!0A— ÂaFҌÆc1˜Ė#hÚ6ŒeX0™°Đg€Ā d♅@39É B4?˙÷õí̈ˆˆ‹"!„B!B ˇ`ŒäW”9 ąËˆ8Eá#æ4ĶU>cĖf;´Ųu\ąËąËąō9nŋ˙˙¯ĐĩZaa˜ã!„A˜đƒü(šūáGkx#š—ÍĨ1˜ėĮiÚvŧąüÃ˙Šg‹õ_˙_MEƄDDDˆ„DD B!„D „t°ĢϚš˙épßß°4mFŅĩ 4"#H’ Â@A0A„! ‚ ‚aB ÂAGp@™yČ åŽXä"GËÅã Lf3Ũæ51˜Ėf3 ƒ‰p'tHv‰GvÕ¯ëîøom!0$|BGĖ A ‚HųŒÆcîAC˜tŖP—ÛąÕĒ˙ëßk˙qM5îâ"""""!„du˛nDŒ Å}D¸h•ôNīų2KŊ~XÎÆ"fŖhÚ6¤ų‡,rĮ˙˙˙üGŽüFĶBáhB Á„B! AÃA ‚AAA:6ŖŒÆc0ŖhÚ1Ķĸ ô™äÂ֞G2X˜ĻA1Ē_˙ŋ˙ŦŖ´""""քD0„DB ‚!!a0‚ @ƒ0‚0ä6Į A$|ŧ،ŧ^‘õ1æ3ÚröaËs˙˙˙úņãūŸ§Jiüė´īVw["LÉ*;ŋõm{~ŽĖđAA#šcg™}Lf?ĩ´õ™ë˙ĮīÕW˙ũ5!„B!A‚D B!„„‰¯Z÷Ū™'ņ~ˆgÜáB¨_÷fŸˇ˙žįaĸ6ŖhÚĖ/â6…ÄzĻ„DZPB@‚ @ƒ! ‚ ‚ ‚  a „#ŽC–9œÎgIÚiĒjcĖwzŠ0Ŗ! ŋZūõ_­aƒw}?ōŨéôézn""""! ˆ5‘đA 0 A$|Æc1‚ ˜t‹ąÚŖ9A÷˙ú˙˙ÄĻGéĻĄdBū˛TûÚōđŊ“›ww Ûm-z  Ŋ̆wDtFˆÍĖ#hÚ6“æą˙˙_˙ąĄЈ„B! „P B!!¨aA ‚A ‚A 0Ŗy„c1˜Ėf´mFŅĩ_×ī_ė| ūLŸÃmøß[MļJé´Ŋm[Äą[‚!A@‚ ‚ ‚!‚38HÎď˜ËÉÚiޚ÷}§˙ũõž8ˆˆ¯÷˙_ũūŨy•YY3ũĻÅ!MĶi'uØÚ6ŖDc1‚B;ļA@åOT˙ûOų Wîôûõ˙ĶI"@„ B!„B"!A‚0‚$tmõ ˙˙˙Ú|˜ūũŋÕ=xMô˜a Ã$á…s´‹ķkÅ÷ˆ†"#ˆˆˆ@„BÜE@0„ ÁB ‚@‚0A A HĪ´īTËũß˙˜û]åŋũk×WÍ?;Ôˇŋ×_øaB Bb¸ĻAˆˆ„X!d9‡!ļ<Æc1˜Á^/˜Ėf51ë Ö9c‘˙˙˙˙\h:jąģOĩ˙aÚõöŊm§áˇ‘tkÍĒëÄE„!„!g ŖēŅ´g˜GŒÂÍŖj͐AŌËõ];ŋūėDX@‚ BA ‚`ƒ @„ ‚#ŽBÁ ‚A 1˜Ėf3Æc1˜Ėf3„mV˜]ĩõ[ zŊÚ~ļ•iö|Cœ#âäâ°A‚ É0¤â8gŒŌ0G2xÁĸ'‘Ėü2FlĘAåĖč3C!# @„ ΁ä5Į0ęėÆcM4ĶŋũfÕūîčDPA„B!Aˆ‘ŅŅV˙õúũ˙˙˙˙˙ˇūūo˙˙ÖøD ƒC“Fä Š•eYF ĄVU•˙ŋũ OĒϚjšpa‚Aa ‚AAa Á1IŠŽīU1˜Ėva^¤īÚëū¯˙˙˙˙ü ģ˙ û˙˙ĐR h‡ D4ÍAĒl4„DDDDDD"œC ˆ@ƒI‚ B @ „  ‚m4Á:˜rc‚#˙¯ëÄD:“OÚũĩģ˙ģ˙˙ū˙KŽ˙K˙ūŊ÷%†Ãđ^ĘŌ4FŅžaFŅ´mÍŖs>aÁôÖgö„E˙ŋၠGA¤ DtŽ‚AŽ;/‚HųŒÆaFŅ´c6Œf7kOØZ\S˙ųBûīŋ˙˙˙¯˙˙×ū‚Ŧ6L„zøˆˆˆûˆúŃA „0A @ƒŨ‚ !(rŖ„$ĶM5ÅqôÕŋ˙ũÄDEĻŧu˛uŲ§ē_{īūNŋüĄ~—úú_ēW˙÷ũ‘m˛%ļœųōND2ČHˆFŅ´B!‘ķ AH Fy‰diũ÷~ņ!œrĮ˙_˙îņA@„ BBBB  #hGô­ZõŋĢ[īéĩ˙í˙o˙ę˙˙ūéíÕôī –÷hĖČ6ĸaF×ë˙ŋÁøˆˆŠĄĐPŠÂAŠ@‚AA@‚  f]éĒŠŽėÂō§‘ô›Km/­[ _vÚÚVžÛi÷õ÷ë×ũ_ÃáũŪžŊÄDDDDD A‚0A„AD"ƒ–9œ+„˜&›3Ї!œs9œÎ¯õ˙˙áЈˆˆˆˆ‚a?ÂQŧVÚZQļmĻé1éö°`ēŨ§í¤žĻÖÂú˙Ūûī˙ßü‹fPŖhÆc0æ4ėŋwķ#8ˆ×ūø‹ Ą:@ˆėP @ˆč$ ‚ $Ëæ3„mĖ#ŒÆc1á}MSíŦ4šēi‹Oâ—dXŲîžÄ“iEČĢÕíknŋūsú˙ßÄDDzĻžģ¸Šˆ„  AÄ „ ŒíŒí2ōÂÆ •Į˙Bâ";øA4í &˜Ē‘]& †h:‘_H6)4äWąLS"Ŋ¯ëØß÷ŪũoųĪ"¨ÚaAA! Á0L¸ G}úë˙_ūîéB!!!  ;ødc–\! `‚–8A„É “€A‚ ĶîÂéĻ4Ą…{TA„‚¯nĩÛßֈO2ã3 8ū­TmD"6ģ0–˙_ûâč XH!‚  ‚@‚ A Á2‚ĶÕUTĮvaFĶŋˆˆˆâ"""""""""""""")ĻëØk˙ø„Á ˙ˆˆˆˆˆ„ N! ! & šh$g3˜rŖ™÷w˙¯ũÁÔb""""?úiļ–á˙ūmԖfŅFŅ´mĖf5ļĖusXų‡"™Ė9ng3˜zÄDEPâđ@ƒČč Dt Ą !Ņ|Æc1˜Ė#ŒÆc1ų”īÅØ…áŖ;īøäáōqīĩņū̍Œ!dqĄ‚aArĮ xmŽeāM4æs;Q… •<ĩũVâ"7køƒ ˇũŽR~8Â!$UA @ƒB A‚3–8HÎËČÎaĖåŽ/Ō˙úë˙wh B!„B!‚A „BGFŅĸ ܂Lˆr„f hL‚G'ŠēDŅúęß÷ôí:_ú›GDg˜^Ŋ÷ž˙čq‚AA 0„ A ÂaÕŨÚĒ˙yĩ„qM„áĸø†„0— Ėōœ@@ĪÄs.'ßnŋ˙jëßņ& Žab‚)Ø Â‚ ĀäÎg3™÷˙_˙ô""""""#ũŽ4ĶB,".v˜!¯oŋëÚ ˙ųFyŒÂ4FŅ´mF4ÁÂMÚM¤ŨæT~„DB! AGA„ @’ÆaĖf3ŒÆc0Œf3ŒÂvŸD ;DcÚM5âĶ_;‡C˙äGˆ^?‘g‘B""#ĄZhPE: ‚FāČ9œÎ“M5™ŨBĩW¯ǝqwJJ:#>‰Ũ.(€š°$ÜH1A˙ūœ˙éÄ „ē!3ÚBPå¸@Žā0‚BPé7õ˙˙õ÷tB"ˆ@„ „ „ „B@‚:6Žújëôŋd.&A/]4ÉŊ˙šđéëĨ’?D‡_ũnJ’æ‹B?ū)Јˆ„AAA0„ A@‚\ÆcŗĒŋ˙˙žõ$>­<ĐÛIöõŲ+ŋ˙úũw9 Ÿ˙ŋ9ˆˆˆ‚Ä4„`‚ Č(äAĖ˙˙˙˙qŌ¯ŦUŊčWPĮũ‡šŽŋŌ˙úÚLŠf3Ú6ŖhÚ6ŽAĮ,s=^ų‡,Á  A ‚( A ‚/ 0Œf3ŒÆc1˜F3´cģ˙|ŌĢ˙yc‚ī˙¯Žēé˙âŖB"""ˆ ›Ap„B ˆ ÜÐ<5Į ƒ–9ŸIw\.—jˇčhDD] ÷õc’Ŧ=Æ}ĩ„a˙ž¯KK ¯}˙z@‚čÚ1›F3Ė Jwmŗ9cū"#vâę)B„ pŠA ‚@„˜A‚čBGĖf3Ú6Ŗ˙ÂÕ7R!Š’ĶߒŦėS+¯t¯iZVÕ0žŸú‘5ûzúŧu8æpLÆg š`‚L¸ Ÿß˙ãB"×ū‰:}ŋ˙ ‰Ã~ ˜)Kdš™ ÄÃÚi&š‚„X,EÃM4ôÔDB!Hč „ B Ä0‚A‡,pÁČ åŽXåŽAœ˙˙˙¨ˆˆˆˆˆ@„ũõlzûV“īë… ĒkØaSB„†ÚšĄūīų–9c–?īéâ""" Á A ‚ A A„,Æc0Œf3ŒÆcŗÆmF9uëži‡Â˙„Ÿ ø|;ŋ•ÅožĄV–šB!!ˆ‹BB@‚@đnæąËąČÎa˙÷ũ_UB""""""Ķ^Ģģa3{i¯ģi.y?í;ģMz ÅdpH@Aœ{MTbHžc1˜ĖaČ(ąËĸĮ,}#9‡ņüDD2:29!„1@‚A 1˜Ė#hÚ6Œf3ŒÂ6Ē{ŋ´ęŌˇ†ŋVôÃųXĒw“ŦEøˆˆˆŽ×â"(D|FÄEŒ „B! x6Žg3™ÜđËČÎgŖ;F˙ūâ""=&šIĄnÅ]Ą§ėDwúëéíq„ ‚Â4FŌ  r+„ Œæ#Á‡,rĮ`Œ9 ãūg0ãUôŠ÷úLD B!ˆˆ‚$tmFŅĸkT)5ĻĸDpĐēģ_]ß˙˙Ëūßī!!0A„ @‚ ‚ ‹˜īShÚ1˜î˙6ˇkdWO´Ô…LnÜWŽžøˆˆˆą ‚ DsGB LH09ÅąËąČ5˙˙ëę„DDDDDDDDD0„ Rä,."Ų’…A‘mW§›gS#Fjf´PŽ3Š’¤C4A3Ąķ0ÍLÔ˙7LˆEK"%—dØi#hÚ1›F3#šaũmi‘â;™ß ŽÂ† A¤0Œf3ŒÂ6ŖhÆc1˜Ė#y„""tpA„"[2v^Ą|a0ˆCÁ0˜"„0˜(L ÁPxA„ ô2`R āƒ> fŒ&y“ŠhÁô""""(DD6)ˆdtDĄČŖ<5Į3™Ėæú3™õĨ0ä ˇ^#XˆˆˆˆˆÉ‹EģEÛF‚%‹€mR3ļ .Úc†‹‡ņa0‰Ã-0‰ŽÂ ­…EĮäØĩ#hÚ6¤A@äW3™ÛHÎg0år9|ąÄDDhn‡q !‘Ņ´BB]Ė#hŪaFŅ´mRû Gia'Ã#;´n’oKdq’A>ÁHŨ ƒÂôl M¯ēĶūĖ/˙‹Ž+ˆˆˆ<\Ö9œ$gHÎG€Ųpr8f;ģ˙î˙Äl/đ'Ûāƒ´Ú°NŠ>“†NÖí=6“}ü'JÕ°É:JŌpÉ:“AŌ|ā¤åÎȄDDE‰C°Á A—aÐÍ‚ČåŽXä3,rĮõ˙˙ūÎለˆˆˆˆˆŽ WßĶô˙ëũãôŨ:_ũ=?Đīí Ū÷ėAōœd(Ā75ĸņŒƒdhŖhÚ6Ŗ#Ŋ™Ė;ũzū""""!„B!‚ @ƒ ˜g‚‚Ëæ3ŒÆc0ŖhÚ1˜Ėf3„mZ˙ē ZU˙öęÁ;Ķ# ´Ō˙˙ũ?Kj˙c¤o„AĄd€ Ėß ĀÁĖˆˆˆĄ!‘Ø!ã˜rĮ3–9 aČ3Žgŗ=˜{ĖũęŨÜF„DDDDE:˙¨Įŋ˙øˆņ_øĮ˙QãĄø}č$›ôœŒ|4û@î Ĩ#hÚ7ĸXåŽXåŽg3¤įƒĖä6Į,r9–ēB""""#ˆŦC  BGFĐA tmÍŖŒÂ6ŖhÆ­{÷"ށw˙{JIÂäŦ,/ú‚˙Đ_ũŊ‡Ĩû Z8mãi°É8mY-_īņÄ]h^¨DDE"@đmsg3™Ėæs9œ ŒætÜ#…0ä}Ũëú˙â!Ļ˙,ZÚ˙ĢđCÂ"Į_ōÁ˙Ή…Ņ1¯Ãī%˙Ķ!l‹i0Ũ—M´Éģe8‚"S‚J‚"Įh$Cls9 ÁČ8åŽĻˇ0ęŸŋūŊvœDDDDDDDG˙ŅŖ˙ˇÚ_á˙øEĮũ;¸˙áŊ‡Š?Z{[ȗ uļō&=Ų(FŅ´c6Œklƒ–9cŋū."."!@ƒA ‚‚a @„a„! îDwÂ6Œf3ŒÆaĖ#ŒÆc1˜Ė#ŋ+_ūvŌūŌ~˙K˙Ō˙ũ/˙aáž?ZÖû{~ßUˆˆˆˆĄAJrC–8 Lŧ^.Äpf^ģ˙āˆūšŗžĒŊÅņ „Ų‹˙ŌØ¯Ø¨˙Ō˙ôŋņŌ÷ŋ}ô]?]˙Ōūũ˙lŠŖy„mŅ,rĮ3–9c™Ėæs9‡\ÐÛ0åŽXä Ž#wæqGOÄDR„ Õ ‹h¨Ä  ‚@„‚!:6$|Æc0ŖhÆmK§˙˙ øMY:ėŸ×˙´ŋũ/˙ áģĮŨÜÃ÷ŋū˙ÉR˙ˆ¸ŽČ÷ÂA „w-ÎæpI‚ Œęaæ0Gzs˙~¯ūģˆú˙öN•gųĘ:˙×ūŲ§˙öNŋ˛tŲ§įĶį÷ŋ֘Ž+íũī˙ˆˆ„3Ž"F!(p‚`ƒaČ29œÎg0ä4‡Ļŧîũ×üh}EĶ!„DA=ˋ_ūØ_ ~ŊŽÚ]¯ū—˙Ø_õŌûyc˙i°˙¯ī˙ō.ŖhÆc1ŽČ8æs?fŌ3ũ˜qčDDCĶ ‚! A‚"  A—a N !î(‡Ļ^/F3ŒÆc1Ų„Ļ3˜ĖzB/÷­Ĩđ˙MĻŌxa/Oū×˙ÛIWaĢ /ūũŋü=õúŋoõB""""‚„œr #–9žHā@õXĶåŋūŋųcˆ.8Úh]ū†…ÄDDrQŋåûãbƒŅ¯ āv*ČûÄ5Uب`žŲuņL0ŧBî—­ļũ+ŌūåŽ˙˙%9žc0æ4@‡0åŽg,s9œÃ“Læs9‡3ŪĨŽAŦrÜGiÅ;ĶQ„PLE:BA A! H‘đA 0Œfōų´c×ø¤ÕĢ´í;Ē Ŧˆ>îĶj!ņĻ›Q›´ŠßvĒŪNģĖ;‡ëßī¯úB5ÕkÄDEĮ#Ā‚(@!Ėæs;ŅœÎ”ÆcMČkžū˙˙ۜD“všûJƒ &G ´ĶMˇiĻ6&˜M6™ĐA´šm2(éĶAŠ Å}¯Uvę!~ûk˙!"BŠBD“„܊åŽg —‚3˜rĮ!œs9œƒXæ}ōĮũiÜ_˙õ´Ę!V€„B!!"$Ā`đ§ĸáΊf5:æĖœČ6u|0„A‚`˜J"3DA‚ 0BÁˆˆa ĸ}„E)‚ A‚ "E&‡ˇ /ęßK­iū‰R6Ŗk6•YLæs?NX˙˙â"""‚+„ ƒ0ÄJv ŠBB „#ÃLÂ1˜Ėvc1Ų„ĒĻ3ŒÆB!Ļ„ š.>…ŠxOœ†‚$B""""""""""†Åvú[û˙čDDDEˆˆˆˆˆŠDHNaČ8á&ΘzGĻs˜wë3­bבGŽīô""""#jšƒBԓÂOõiZm6ŊŽŨˇ˙ŋü"ŖŒÂ6č–9c‘\Îg3™ĖæąÔÙËÎ@đ ÅDDDFˆąƒĄÄB‚ ‚‚4aĖf3Œŧc0ŒfÔIŽ&;“ô׋OõÔD0ŋ}}˙äRX˙Ķėo‡QDq ‚€Žā29„A,s9œÎg ĖæsXėÆÜY‘Ų ËũūŌûôÕb,‹a4‚ S!ė‚īDí"QDŖ˛ÄĐŊuĮÕŋoZĶ˙â!‚!ĄÄ BÜ #BqË ŒäW0ärcÎ=™úÄq÷éÄGTDAĐAD BB""!!!!>ciä—NÉ:oŽAėSŊ;ũ„Ą„ģŌg0üˆ?˙}/ĘÎa.m*˛:™×}ņ˙ņĄ„Aˆ@‚AG‚ƒP÷LÂSc1˜ĖfĒŠÚ´ģWĒ}ęHu^ģûÅ}5WŽŨ~˙üDDDPˆˆˆ`„DB „H Ž[˜rĮHʇō åŽg3˜ķÁ‡:ßŨץĄŠĐĸA~ģ]nŨĻ? ēŦšė?ˇuû˙ä•#ŒÆcDs9‡,sA‡3æs9œĪįrĮ3Ž"8ˆˆˆˆĄаP  „B!A$aHųŒÆc/Ė#ĩū˙ø…˙–8‡á„ Ō§ûÛëĒ}-qĢcB.#ˆˆ‹ˆˆ„ˆ ng"g3™Ėæy1˜ËÉÎ÷šc™úú¯MVãȈō>˙څũŌŋöĢwûļ­ûôū!!!B(r „ ËÅāŽær æp@™xŧ^#āävG eˆ‹¯úšĻÄ[L  B Á B!:„„‚A!$¯„ũč/÷Éü.ß_oVģëÖVQĩū¯S?ûzâũˆ„ L Aī !. ‚A#ģ/‚m÷kļšß§÷žö×0ŧîŦėĒ%âQ•ÃÎéņ3B"!„ÂВTm˙˛Į÷ũõÄDPA 0A eđGrĮeû/˜Ėhîæ7ėĮ~ĢŠ´-8ˆ8í0™ƒ0mCMˆf ÁøNÁAL‹šd›^""""")‘Ä#…B ‚ „@đjąËƒŽXåŽg xfClzŦî"æ^†õõIRŽ,DDDDDbMÚ G áÚņ}¯¯Ļ¸Tų6XF3ŒĮ —2<]ĸĮZ,rĮķŅcqȃâ""!""h"Ŧ4 … AA B‘| “/F3ŒÆc/Ė#hڄëMZwģkī‡ûš6H\qĒŽ#‹#†Æ‚ X8 …H9Ė:šÜz,zzú,qûīSB"4Čļš &ž@Āä0>™ â[ä{ÖîĶĐO„Hč „ „"œ A‘Ųx#9‡dv^#˛;3‘3<rcâ:ę›ŅC°ŠeĖ A‚‘ĐAAA 6Ŗ ‚ Âe¸dpFœeĀMl&¯ņōVąČhōlŽõZßė?ĮÄDC#X!AÁ ;T;1˜į{Uöcŋ×Uš{$@â""4 " /ũ}=øˆˆˆ Ádp0ƒw C<ĖæsCHrĮ˛ ƒ˜rßôĖ=ü$8Ą~""""":Nĸ#˙¯é5ɰ"4F3ŒĮG™—ĖDvG‹ČÎgÛ0ūX㈈ŅCˆŠA„ŽÁVTî‚8á4aā&"ņ„c1›F3ŒÆaF×˙ūžĒÎÄ#hŅĖf9ÎËÄvGdw3ųŸS9‡,ņÄ\DR Lw‰#GpDxÂ1˜Ėf3ŒÆaFĶLzá’ļ–+†IŌMŊI×I×ĻJ)6+jÂŌ ¤á˙Ļđ÷TŨ?˛;pf‚ûÁ5;5FˆDīB""""!‡ Ę9 ĄŲpB8iäaķŋ˙ū+ũņĒÄDC_ôęô†ŸŨ^›ũ÷¸]5ĨŦ-__wUuũ§ &h}UlDB! ã°LŽ‚ AHđEÎg"@đ rĮRĮ!˜>XåøˆåŽéĐEŠ Đ@„ B!č$!„A!!!.‡ūēŪõģK˙§ŋĒ÷ũo÷˙ŽīúvZ ØwåŋōdŒf3žfúvGúĖ?¸ˆˆˆˆŠB ‚ft™‚0čŨęĶ/Ü*ģģ0ĨUS°ŋ^ŋßëC^Į÷ûø˙ą˙îėž›~h8v„DDDZiˆŠ ‚DDDāŌ9œÎAŦrĮ,räDĖëęaĮĮ­-(ĶÆ4""""RŸŠ˙ĢûÚZ˙Ãõŋ˙ũŧBûŽÃ˙ŌãN'jŅžc‚d;™ĖæąËt•Læs9œĪŽ""""„B*Á ˘@ƒb …">! ŽáđA 6ŒfŧÆaFŌčd*;#5ŋ˙˙ū]]ŋ˙ū]oááå‰?ÜØŸoûÎ΍´m)ĩūąņzë‚ã˜rnXķ§ôœú˙˙ņĒÄmSü"ßūŋī˙ŽÃũūūēØxEŋÛJ›˙Ŋ'_øˆˆˆˆ@„ B„ĄÁ Ä G 4 ˁāÖGdvGdvG Â;.ŋ ī÷Đ":LŽ‚aD&!lB""BB{k¤×Đ_˙ūÚ˙û˙×ŋˇ„˙°˙˙˙’ g™ ˆÛ*ˆŋįsFˆÆmĖ#hÚĶDķ>õu‰qA@‚`ƒ0č&Ÿvš›S1Ļc0ŖiTĮ´îīéī˙×˙†ū˙m.Øimé}ˇ˙˙\ Œ ĪFx@Čļ†H|\ŅŒA¸ˆˆ‹LFôÄDDE@đkÖ9ÄNåŽArĮĒũWé1‘ĶÕˆˆˆâíz˙ë˙ûī˙ėWą[õûĨ‡ū‡īúhFš vKŠiĒyÂ,"XTg˛ !w Ž  Gƒ9‡,rĮ"šLëxŊˆŒ B 29GA;ĸč#ģ  ‚čÆaĖf´m;Ĩũ˙Ū×}“¯%ĐoŪždę×øō„ßęĢū‘8iĸp÷EôHv=U2 FŅ´šĩ¯˙õQņˆ,9‡ C‹1ŲÎ?ĨúŋĩUĮüsĩK˙˙ëŌ÷õžßí}OčÉįĶ˙ījDo˙O_ ŲȝVŨŌiÚIš8ĸoûDâ""""!‚A Á AC0s8  ŽČāxg#˛;#˛<\3āx(c‹Ž6¨8ˆąA‚.Šŗ5Ģ˙˙o×~ģÛW_ŋ¯KĩKˇ×úuß˙˙ôė*zw÷~›IŌovDDē6ŖŒÆaĖjRũ\–?û#ŅČāxi;kv\R9‚; Ftc„^/ĖpŦÆaFŅLjgÍ#1 ä: ”›BĀũ§ö×tũ§†Ŋ{¯ČÆ­„¯˙_xi}§iw˙öšzŋWé.ē÷a:N".8ˆģWž„E‘ôÂAqƒhö@đG3ģôLĢ+WŠáDDDE0˜TÎ ņ§ax)¸ā8D"‡ ”*„ZüCö.×m{bØâō$[KYQcDŽëbd¨ĢĻ/ūŋŌūžöīíĢ˙ģø„3ŲPxA!Ø ÁŒ9c–9ÎĐHÎ{,r ä ã™Ė?†GHDRjhBƒŽ;0’aĖf´o0ŖitĶŊmÂaN͒~ȝA„Ú†M†i7a5 &lPA§iÔ4í$î4÷´¸aē˙ģûû mkô?¯ČDmF×˙˙ÄDąË}ũ\DDEaČ#ÅÎäJœ­û#ÖŌ˙˙Œ¸wHœ:Ņo´.×õöŠm‘¸Q ……dn  ČÜ(Ļ­…Ûh6§ ‘Âh&á…ČÜ(Ž˙á˙†é/˙ët""(!„Pˆˆ „ ‚ `ƒ@‚† åŽg x5ũ=÷ ˜$›Ļ1DBb"""“†GIˇky'ĸQy7L/EĮÄDDeĀ!`„DDę„QŽ ÁL;HC „ƒe¸Iļ•ü/˙íõēō| ō F3L#yTA,rĮ"g3˙˙äAĖ8ˆ‹!„(Ũ—`ƒ#°–Û`‘ŒÆc‚/˜ĖfŒÆc1ĒĶžíŽôüä.Yéڒ†ûū")1H‘ˆˆˆŽ!ÚMũũûm˙ô=nŨŽ8ĐīĐE:B""0DDá¨=B!îDM8aËąĖæs8I—ˆėŽČėŽ˛89RķvGLXB"  AA@‚>c1˜Fķ kĒoĢ­­ũ˙¯†?¯øƒ˙¯˙Ô?ũûIŖj˙õöqĊæ}¯˙éq)Č;w nųrcūĩŅ_Š_~ÚÃņ ˙×ũ˙Ĩibë˙›Ũ§§ėĶ˙Ą!ˆ@„ B Đ@‚ „0BB!#8i$‘ËąËûčYiĄĐ¨ƒ0ÄD „3§%§ũ´¯ÁRëŋëa˙ -„ąädz=˙×zŊCöˇáŅVT‰3i§0å¸]ōĮŧĪų‡-õ"¸ˆˆˆAÎŅė$$ČėÂAĖv‡—Œ#˜˙˙ŋ_ûKūūب¯ĻƒMá5î×NöŊÕĩ_Zw|ZSMpî""!‘ĀĀB@đlān9c¯™Č5Ž+‚#‹ņëGxˆ˙Ķ~ŋė{~› ¤úöŠÄ;U´ĸũÛJÅzz ‚ „&| „¨„ ˜@‚g`™qKŒŧ ĖærĮ3Ї-Ė9c=Ž"!ŌĘE˃‚AĐ …c„S„"<$|Æc1˜õû§ øDŽū­kíúa‚ ŋáƒL1Q i°”[IϚl0Ž˙æ÷˙÷§ū„DD†@lķ´Žä2ÜÑK,u]hą÷õõVgøuë˙˙Ãøˆúö˜­Ļ“Zv" ÂB @˜@„ ‚aAÜP@„ aDr‚:‹¸ˆˆļ‚)Å L @„BA.˙rO]@ŋÎaŋí4Õ %dœ#ríl Ķ kȄmĖf>ÕCύÕS–9c¯÷TXåŽ"GvG ÑÅ.)—ŽÁ6§pDy0FčĮĻĻ5áĨ~ÚM'ņ¯ßWũŋņ f¨!EôDTziDPŒ,DDE‚AHH ŽAœr ƒ<5‡ņqĄĄĮ”b!ÔDEŠīŋûˆŊtA °Ŋ˙ņÄhĸ)4‹ A@‚|ƌ9c„%9œŠ9c–8U0æs:™Ō3˜r äG,u8˛:ĸœR"Ž‘pˊGĮDxŧaBAãŒÆci0žÅ<8ĩB̓‹L'iUøöŋxãˆøŊcj""!ĶVaČiAUU,z&?X­u˛:Ąjü5Q-ÅĻ›v‡ķ$ąC0đB A„qĐ@‚A Į@ ŧ„‚î ™œâg3˜rcį…]1X$‚H@ ŽËá!$}„'ējš •ĻŸúķ"–EYdV"ː?Á‚‘Úâ˙õĢšÜąũëüDD$ƒĄÂ ‚ Žæ†¸äQɎEąŲWJ´ŽwéĒâ80J !:™ÃDîÉ ¯ … ôŃˆˆ0Čč$(ˆŠB! AAA<s9cÖxÎû.˙W␊UH$ę"ÄPˆãˆŠ@â?îFŋψ˜ufŒÆc˜rĮŒ$ËÅâ;/ĻÖŧĪæ|ƒ[¯‡á@…1$8‘Ž JÂ#Æ#Á‡"9ÜÎešĐNáú,ŠÁ;L!ĻwT.î„{ēÄDDDDC#āV0‚f„wIĻĢČfD´–ĩčbЕ9JąmüX3âņdbEP ‚Æ!‚P@‚0A„Œ9œŠæs9œÎaËsfraËą˙{3˜~ôĶú ’8č&,BH0A C šų،îú˛N”-ÁŠ$ÂÍ­˙ŋûģâ8ž""Â! H Aa B&AC4r9cG"Ž[¤’B¯ĩ˜wũ1^Ģ˙Đ6Ûķ$™YÁ¸Ašâ"""! A#°‚#†`!B ˰„ ŒæâAąČŖ‚#ęĢ –=9‡!Ž?‹^8ˆÕ b‚‚)Ų ĒĢÕü6Øy\Q`ēa$mĖ#hŪa*˜é_fs9ŨvG‹ž?b"#wđ Q!§‚dp„pB8g#ˆ‚DWGšUvÔÆÂh0Ŋ!¯g*ŽÃlDDhDF#ˆˆˆˆˆ†GävGdvG‹Â!A 0GrĮ@Œé4Ø˙¯ŨkÄE‚ōc0D”E͉ČĐh%Q rã(IȑdL„ƒm•hŅFĐ „˜Ėf;„Ö9naËąËąĖæąËˇ˛Į,~Čę?_ö/hiŠã„†‚Ŋ˜Åp…„T0ƒ/Ķ0PU‹OL"nũ?ž8xNô›‘-æ×˙˙čDEDDC0‚  #Ž(BGÂ;‰ąČŖ–9uČƒÖŖŋ  '&0ŧxeĖZ5´ã´kq ›Ã'Oß˙}ŌŊą@„ BB Î9‡0æp‚‚œąČŽ‚0äÎg3ģūé_öaÄDEÜ28 S GpĖ#$ŒĒƯÃ%t­‘t­‘Ûä¯N H|•´žOīüÃ˙uūŋ•hŪc1˜īU\3Xärī~—¨ˆŠB( N!†GI‚!Ё z‚8 LŽÁ28„vGŠ$ë™éϘ&ûN“m“m? Õúuē}ũ­iŋ˙ėmö"""".í1 "‚ËąĐFt›`[MfqĄIŽ65cĄA˙û^õūˇÕ=ū=müˆ3ANŦ ĘА3Ė"^su}ˆÚ6ŖhÆc1˜Á ‚AEAœ‚XäAËŠæąËˇ3˜r ˙¨§čA† §1Ã#ˆ]‚ ¸¨ A ŧˆ íĒūēoû˙ãūĐũĨũ-ŋ i› A D#—Bρ™‰û˙˙˙ũmLæDDDDDFÄD0‚„Gy1Úl†`ä ŽXäq-ĘõÕiÖ1ũ˙ë˙˙˙Å ˙TĶM=0A§kęīâ""!@„ B ! Ōæ‚9‡"#š‡"aÚz˙ÆÄD\E„!!@‚;†wŦd}˙Õũ_˙™?Ū]|âļū‹Š'Ņ7EûŅpī–?ūõ*ķ<ÆcŊS\Æcųœ–?–?}Xˆˆˆt˜ BĮ ƒ“‘G ‘ĖĖR"ē´ļCŋ_ū˙ŋ˙˙˙ˇü-ŋúM‘Å0TīNŌäQčœR~?čDDDZiˆŠD$‚ x5CXvŒ>ö"#Ž:UXą 2M§˙˙˙˙˙á/äÆoęû†džęûjđŸm_˙ hŅFҌÆc‘ķ„mÂ@‚g ƒ–9œąĖęg"¤gÅČ—¸¨$eŲ/H¯…rČŗ"Û4Œ˛$ÆFXdvDī˙˙˙ī˙øOëŋūŋßîž)ūŋ˙ˆYĩ˙˙ûĶÔDEÄG DpČ2á)|ÆāāƒÖXâXõø§XšE›gn3HütĄÄ0ˆ€Ÿ˙ß˙˙ęũ}ŋÃē†0ĮĻŠūĮ˙@„ B!„0„D!B!Č åŽ.Čė C!˜?˙žDD$"!ąAp‹ČZÅĻĄ0˜A„°éŲÁOL¸Í—ûuũöO˙ä˙Ĩũwö÷˙ļ×Ä+ū‰4c1˜Ėwvšk˜Ėwû;™˙~‡GŌ A3ÁÁ"šz"šr æˇuˇÉÁŅ'$:Ėv蛋OúM¸žūë_ĩ˙ôŋV˙×ÕXü?ûØwũ…žEØˆˆÕ‹ˆˆˆˆÄDDDDav’§¯0éP‹‹)*Ōv¤AČŪ™o—}Ũ…Ô‡†G'ũ˙˙ĩū­/ŋÉī~Úßõl7ú Ãũü¤FˆÚ!‘ķŒBGĖf´mF3GrĮ,s9c™ĖæąËąËąŌČs˛:§H‚Ō!#Šá" äWeÅKd‡%v>˜A§xŨÕßŪG§wū›KÛKīØ0JũXĨôūŋcũĩa˙áoßĢͯ˙ūŋߨˆˆˆˆˆˆˆˆ@ƒ.—Ėf3c8ęXäqĒ\Š8™ĮûūûbÅ>č¸ĶNô˙ö“¤œ‹Ž•Yéą]ÚUĢĶU˙‡¯bƒ†ûø[˙ŦˆėDDB!@„ B ‚DB! ÎA,rĮ,r+–9œÎaˆh叏ũûxˆ„„„DĄá‡ÕH/=ĩũâŨ˙]÷ŋÅ1IģƒAŌ 6‚aÅ4šEzhīßúķOŌÃ~×öAŖŒÆcģ´íu1،Âŋ˜˙q ‚  `ƒa˛8iÁ Š\]"š}ūũ ŋ_-ÃūŋŨX˙ Âļa{^Âđ {MZŊīÍXnŊĐøĪáÖĶŊ, øļ–â"""""â""" ÄDDDzĄwÚ„DDU×%¯˙îūå˙˜ØxUzÛßĻŋéūūŲŖhÚ6Œf3ŒÆ!#åâņ|Ú1˜Ėf9‡"šc™Ė9ng0åŽ@ÜrĮb(0BALr(äW  @ätĮŌ˙ûíŨ/˙ĐaûĩUųī´ŌîÂÛ_iw˙˙ũč{¸ÕDDDDDY}4įTu"Žŧ"Q¯ü7ÅĮ˙ô6ūäŨĨ§WąšÄ^šŊn""!@„ ‚ AØBÂA „FsDąËÎXäœÃŽqÅÄDDD…6ģ ~˙ž˙õ˙é ø¨¤ĶŽ*“AÚA4a„“˛1FҌĮwjĢ˙ki¯˙qA‚A‘Āņâ—Ž!B8„qâÃ-ļŊ}0Ũŋ~ūŋ¤>ƒ^ÂĻŊV!&؈ˆˆˆˆ„RLP @ƒ ""*ųœDDDDB‚ôŊ—Īšu˙Mˇū2ŧx0˜B(ž@Âdc—˛P‚ ļ‰tmFŅ´c1˜Ėf;X"<—ύÎXäAĖæąË! (r†¸äW"šČŖŅˇ 0…ßęéĨMzīŽĻīOâ)B"""!‚Į÷w˙ÚũˆˆˆŠLŋjˁāŽ={ˆƒíbÖ)ߏvûBũÄD „!A 0`ˆķbĮ A‘3˜r9cGņmD†Rmé§iÚuiE¯õRÜtc6–īŋ˙˙â=!㆜Ð<|Š:DAȃđČHƄˇNŌvžĮøøa!  ЁH! A (v28‘Ã4ŽČāäxŽ!—‹Åà ž8ˆˆˆŅ'!ČA„Ébdv™iŨÚh0šąEžf´mF3¯~^JÕˇd3Ž@ËsvEˆ:–9lÎČõV!bS<;‘G"DŠäW"ސFŒDDA˜€„0„E–5i‘špŋ´"".īõí1N›ą!Aħ‚„  @˜AGsk0âE‚Čô"8‹IÄDhDGûEšŅž!‚B@@ˆķ AÂG™‡!œs9u,sAĮ,~ÎųŸũÚšŽČ#ēzb"Aw"¸íWû#oBŽmf?ũã˙úb>"#é#čSM Â(t B"@‚Šq`‚‚î@đP9ꈃ‘"° žW\DDDB! Îé!A†wa㠁w4 p &ŒčL!ļՋ×ã™ÄDDGķ°@‡ÂfRĖČi•˜‰ŗą(ÜėČS¯ĻaFķ UôĐ"=ÚČ08ĩũô#ń„S†āāƒ‘G"Er äW"ēi}T*……'#`Ą4ų¨Œ!gv)|Dh\EÄSÚb‚ł<A%8„B!  ŧÎ@}­Ŧî""",0ĢÁ„ ī†Ķĩ$JV$,ŒÉ΁ tEQ´!#ā‚>c3ž ;#Š ŽęŲ‡w ŽaĖô҇ÄD]TÈdt1D"E†qȃØ&žÜ;‡—„˛Õ~VˆŪ Ļęž?ūī¯Ą\2:j"‚ J$|#;D}r úŅ˙įb¨…Žē§ōPEr uĻpƒá…†ôÄB!@„ A‚ !î!l3ÃB Œ;ĸŠ?ũâ"""(ũ5ūˇđ°ÉŽëWÚOAdk0ĢÕ5ū[Ķ^ŲĮ~ũC Až9c‘\Š9r äW"ŋ˙õ˙˙ínÚû‡÷ÔDDDEÂ"„7˜b  "  ŒæĪ/Ŗų‡~wНũoë÷n¯ūíl‰#hÆc1˜Ė`‚lÂFąāŽčžŒī҇§ ĖëŨž¨ B!e@đĐ9r+‘\Š9rđƒ˙ h‰% øã˙ũ%ßÕu˙˙}¨ûĻ›e"(Xa@ ‚;¤Ë×eâāx%FŊ~Ÿ” šEÆH†“Ņ—0DTf Đpyr:C`ķ^b3#'Œ"4Œ ģ[į=ŠTßîׁ@„ B ÁBA)&!qØČ7t_w"A‘čĪ[˜wņŋ\DDBîŊ|'‚˜DĮĸĮ *„Â.N,'„CÁBa0˜(L(Pˆ;wĮZĢa‰ ŒŅÆPũ}2˜FûÕ?_æíÎøū´-Úėta@‚ x äQȃ‘"Ez˙5žÂ64tt4lĶl5ļNŪŽô-l,ZĄh×+Ėņ{†eÁp‡˙ˆˆˆˆˆ°í‹ #Ž!BBŽXåŽXæs9œ A @ƒ#Â$w`‚FÄDDBaßöŠ>+{¤éXdo[_Iˇ’ļ•ę܍ûI8vGl;#ēŊœ#3ū­,44ôÛ[$Ņ´mĖf3ŒŧcweÂ;ģD~ȃ–9cĩ‘˙úĢ˙Ō@„ BN@đÎ9ČŽEˆōöūœi_ ŌēŌv†›ß§ái7Ķpƒ{'kˇkÚoa4ĐA“—ãö&íĖ>Xõ˙ßĒ–?zcv",Ž‚!‚@‚Gp qČ,Ž“´ŲÅzëU˙˙ŋ¯Õëûū¯ßCũ}~îŒė/÷˜w{!‡Ķ\Ãĩëą„B!0„ ‚ds Šp !r#™ÜÐqĖæs:™öŋoņ騈„„AG…ü‘čqúކÂ^?ãūŸÚũ˙ũ ‚ ĸī˙IŪ™p}'Û^g”™„oŊS_ũ{˙˙ˆ‹ãB-†GMPáŠ(q`‚ˆ(äW"ŽDˆŽA@˙įô˙睸„˙õÖ˙Ä/˙ûר˙ovĶīûߎ""""!qÄPĻA! 0Žá Ž˘Fp‘Ũ‡A —/&G#˛8äpֈˆˆŠˆŠû_,gåÔŋ– hą?Ë˙ø_˙ũW˙ÚVõ֗Ģjéi6T#hÚ1˜Ėf3Žî˲8ĨũS_öXõõB˙úˆˆ<ČŽEr+‘\‚Ōeâųß˙˙˙á˙˙÷ßÂ-˙˙÷ȃēüŠôī ˆ/˙üWãîīõ×ģC‘CˆˆŠ"Pá‚ A†AqČ Ö9ÃX~ĒĢ´Ö#^×˙÷ūO˙˙˙„˙÷OQ†/īŸ_ū?ė&"‚ @„ A„ „#ŽGáÁÚdpr<\ Į¯|DDDE‚A!c0‚^×˙˙ú_ī¯ú_˙°ÂÚËÄ+ũÕC‚˙éū†Uæ>õO˙ę/]ˆˆdt!„V$ÁČc‘\Š9ČŖ‘ Ą˙öžÂûúŋ˙÷˙_˙K˙ö!t‚˙Îh¸yė<“˙˙kÄDDDB!!$(0B #šÁŦx‘ķš0ä3ŽX又ˆˆŠ„Al„^?“ūŽOũ“ŽÉŌũ“¯ėŸŪē˙˙ų‡ ŋ":ūŌ­ĸė§iē ˙Ķ߲ FҌÆc1˜īĩ̐Aķ/!Č9‡&9œÃ§öę""$!ȃ‘\Š9ŌjLĻ 8…aÉ(„(_ö×ûIŊĩõ¤ũtģõõ˙ũ!ŌĐ_ņZzū—˙ÍOZ.qÅÜkޘ爈ˆ ‚Gv$ ‚ A˜v܂AÜÈãB"#A(M‰ BV S1„C=¸Bš´ž­nė%°ÖūÂ_ÃR1ī]˙úąØKūŠZŪ˙÷û{ôā‚:A$tB@‚@ƒA ;ãqËrXäs9 Č:ĢÕu˙ãÉ 1Š8AŅQÆięšėWjÅ6Š°ŽaE_Å}¯ũ…˙ų9K§ŊÕ[ŽéWû×ë[îë÷ū?â""",Ž! AƒA‰Į!’=×´„ƒl&N ãi ˆšvŊ4é;*c $ÚbaØ5Vĸ›JŌģbĒęœAĩfš_[VĶģX‹VĶÖũ{!!0„ ‚ Đ Aˆ@„†ČgąČŽXåšÜÎgeāM|ÆĢ0ä ä|DD^é^Ķ!˛$4›j’ĶK„A¸N0Ķ"ŽAdoi… ĐmSÅ &ČۃA Â ö•ũÂa ÃJĐqa4ĶV­;#´mÕūŽAR=ˆˆÖ= üXϐˆÉ ‘"šȝۛúnƒk{¤õøˆ0C-Á! ! Âa ‚ƒ0ƒ0ŊĻžšĒz† ũjĶâ280ƒ´!éĻDDDDBA‚ Ž‚(vGáÆŋūÖũ]uõÔ0Ąq# ‚‚‚A „ ‚ r čBa@‚ÐqˆØåŽXáL9r(ę˙Žë­ˆˆ‰!ÅÃß˙cūŸ˙ք0š6.ŗiU˙ŽwGæw[ņĄmb0à €fŠ9r öE{ˇũtŨxž˙a%"""!„B! Â0A B!8ä5‡,rĮ#ØE㝗äQČÎĻDDE_ūŋú¯üUrl1˜Ėf4íSOîîaęŒ>¤Įh^ûIq!’‡ C‘\Š9ãØö‚˙û_Mĸēâ#TÕ=VĶHRCDX A„ ‚A0äG  s9œÃ‰¨Eˇ˙˙Įč0Á%Éą4m„‚A ‚‚A0čîÄCI—/Îä3Š?ũ~;؈‘ŽAræõ˙˙ˆü›_¯˙ī˙„B A†$ˆ@„†@ŽDˆ:ø Į~—÷æa˙aq@„ B!`‚a îG„1ks=iĖsfDDB7_˙ũ .wčĖf3ŽĶ´Ķä;í}Ūēīę1!ã‘\Š9ČŽA@ä3,uAÚû˙]äOøķPsÂP ܧR”ė‚ˆrŠĒϏēbČč"°D0Ž8a‚a Œar ä3G"aÄKq&8–8ˆü?˙}{_ũpƒ‡wa4!•hÚaA „B@‚‚g â6Ž9s=X"?˙eÁd!$FN—߯Ŋöš‘ÃaģM[AG‘ ˙˙˙˙ëtÂD0Á„Hdäsˆ­ŋũ×īūd-”ņ‘R"Hí:;-_aƒr$6DËM6ŌG…„B Á AŽ8a‚ Gt%Vg3‚#ũH7ˆ>gDp<3Û#züˆī§¯Ŋ§ōŦ2Ģ‚˜&BĶ%l§`™Ŧ!8ø}-Ãtĩm œƒĖf3ŽîîÖAÚŨÖŋ0ö)ĐûˆˆČqȃ‘]—Áöũ:ģ}6¯ŋÁ¯j˛ÃaB…īéS{[ęâ#UUMVC‹Ļ“h"†Ž‚ B ŽÁ ‚&G˛â— €$.)qHâäīoõ}~éõ_ ”Pė ÂíĒŪö˙}9V ‚‚‚A „BA™vGŽÁ2ØŨÜíGŋŦã˙ˆˆ„‚#ÚN“iwi6•­˙ô í{´f6œ;Ŋ~ˇīūõȅ~Ÿ˙ü}˙ÅhD G0!$f ņŊUi7PÂIļ„'§V××ܔ,S"Ģ ×†Į÷Ʌí$¯ķū“ˆˆˆˆ@„ B ÂBE8„$G„$­]=.:ę.!—ĄĢa&>)´Ą¤Ū˙wéëí˙tŊŋÕ߇îAæ3ŒÆcģOæsD›˙ō§ZI œqAË—pk#†r=Å1 ¤Ã Š S *§ûޟūßîĢŨ/Ûņ˙čDhjŠĻ°ŠPâ6‚Aí E"(Ba8érŨĸę6E„ES0˜M0˜M*˙}}u÷ūé|ú­_‰& ‚č „B!‚B 4ˊ^ŌaˇM289‘Á ņ˙ę=Đdp!f‰<@Âaa™ÄfĻŧëųŸ›d Ų)'ˆ×éûēŲoEÚ[øû–;×˙˙ūīÚiˆˆ† Îáˆ@ƒ Āe‘Ä#†M-ȎАqô"""#ū¤D%–á‚}„Á:flû5Á@ČÁ Ø `†åÆP??Šh.`˛q’ų hë˙ü?ˆˆ‚!@„ BAF‘ØGpADrä‡Ũ°D}5WcB"A˙ŅpÁ-0†‹ŒaBNEÃZ&ū,'Ø*-Ú-Ü^ƒ t_ŋ˙ũôJŗŒĮwvš÷Ëëķį0øéˆĮB!"(ær‚ĩI&đËâ ôlôō7k}¤Ø`’m‘h'`´lÕč&īFˇ6]Qą† íīNĮ“Ŗpˆˆ M č!ĶA0@ƒ ޞ G€Œhㄈ5ŽXäū„Pūž8ė éXdĸ“Đpė–4´Ÿö:NԞ4ŊÃîŧ•ŧ%¤íé]˙Ķ×°„ŒVU•eYP‘đA †ØHÎ#Ā[I§ ƒ™īúņÔD29„ŅÁ3ĸōöüv›ÛĄžˇiÕ´ŋ¯§ßßû§éĩôļņ˙üˆúđû_˙ūīūÅTDD0„TG€ˆŽ@øqVˆ˙ĄU×ęž5ûĩŌú˙­˙oôßéw˙÷Žŋ˙hDD!„@„ A„ Áa FpîAqČ;™ČŽaČ39cîaÁõ@^aü4B&A1žÁ ņÔ?ū›QĮ¯˙ûŋĐũŌC˙Žģûģ´B#ŒĮwÚzŪĖ?˙øô",ŽX˛:Єƒ#†H…ôĻąËąË‚‡˙ú$ Ößūšø/˙˙đÄ.˙÷˙ús“’+ßÄDDD B @„ AD0B@…!ÃD;gÎČâÁ"GĐKž­;T„PB!Ač/ú.ŧ?ū/ÂũËûa—¯tĨÕ>Ģiu¯ŊäB7˜FŅ´mÔĮŪŗšėÃí5A˙˙˙4 „ @ƒA#9î3ĒL"¨ ^˛5Éü"ã˙ė?÷_¸ú÷ū–Ãˇ˙˙¯˙Õl*ūīîīûéņĶM!‚A$gp‚^ūģūœ0ƒ LėÉ‹Ũ/ūđßú·č'ûë˙ÛAūÆ˙÷­-+ {øA tB!‚A A Â0ė@BŽäĖ9Ō˙ņA0A‚H08A Aä­:X ÁúWūøo˙Wõī˙K „Ÿ˙ëĮíĨÖēęí˙˙ßßKū˙ŦEá8  *A Čá’äp.š÷×ũV‚ ›ĻB_ÕK˙Ę˙õ÷×_˙ū_˙öß…÷ÄDDDB   ‚ðAG0A$‡ ã´Čâ&ŋ0ö,Ž„Fˆ@„ A„A}Ũ´ˇú˙ĩÍ˙ôŨš-W˙û'ZYäé}vN¯Ģ'_6 †Ą4Ũ†Ĩ^aFŅ´c1¯ë0˙˙÷Ú|cLžc1„‘ÃĒÕSWęņw]ũĩí˙évÂ÷ũ÷öēûūģkû¯Ô1T’ ĶvЎ"/û6č(@¨4 Ž8ˆ‚0ÄLÃĸ>î Čãŋę"5ŧoũûOŋ´¯˙×nKĶöīöÂXKžūģ ŪđÂß Å ˆ”^iĒÜ1A%Ņ´!#æ3 „ fvGm$ËÕė‚9õüX@ƒBÎg  „"ųŽßŋ˙¸‡pjŦWuvˇJ›"ę!ß ōúÜjK|^— 6ĸ˛˙`ŋ˙­ßū6¯â,XA! ”&ŋ ƒ˙ęēąûR0OôÜ'Ļ' $ĶN)4ÚŨ4ĢQWi6ÃTÚbö˜øˆˆˆ„BB  œ AG‚ v^ĶWé ˆA! A AA øLŪm˜"q“‘R"CÅ™ŪœŽm]†“ŠUN“ÃM2P•YpšM0ÂAÅ28LBA†˜TMrl]Ė#hŪa*¯ęŒ;ũ_ä{ͤ4öc‘G[}/­°˙Ј°ˆ%†Bķ0Ą„D׈0A„!„" ”b#.ˆ†ˆƒ,!Â>Ø&ƒC ÆA0\DDDDwŨ C@‚ &"‚ ˜t_#¸ô=b"’ÆūÖIéĒ 0˜TõņÄDDDDDG“eÚ6Œf3ŒÆEæ0‘#9‡§ō9œ‚ũū¸@E A„ ^/’"ų‡ũ+hâ[ډ!ÚŽ‰˙˙˙[Ŋ{ũ|DXEAOÚo˙¯Ļë´ÕŽE};ė ÜŧˡĐøˆˆˆ@„ „ A‚ ! qØa$AÂFƒŊ28K_â‚a„AAa.ųc‰oŗ3„ôÉ=Ūĩ˙ūM‹Ŗy„mĖ%U˙V˙_ëbČéčcFs9Ÿ3ũzđßī°÷ũ1mX§ôßū"#B"8ցÁpŠņ‚ Ž‚#8@„qŅ|œ†@f#â(%¨@Њëë‡Ķ§ˇËÅö?ōlĄFĐ „˜Ėf0A‚@‚L¸"eæA0ņŌä˙ūÔHdá‚3ÂA ˜#Â/ÃũVßūÛ˙[ĶåX‡ĐC´‚˙M=|nßú!8b ġUŋ˙Ŧ?īŪĢuŌų>ü øBÂN\Ų œđĸ"!@„ „ „ #¸@‚aØ Ë‚‡AGv™!_ŠE"  ‚ADO’7Øũ´›y ĨŋˆŖĶí`ÂS$f3…zĻŋ˙ûˇĶūÄPĐÂFs:™Ėūĩ_{_ßxÛkũŋč tK ‚vŅēhDF…Ä\h X@Š6‚*„Pâ& 1„wEđFÄDDZ’;ūÖ}Ļ˙Ŋŋé:ļĶ´ČŽÔ6ĶFU#hÚ‘đA 1‚HøA iŖÆõLŽŗ´aČAũúŧA%[™Îæs8 „§I&_1ßĸc˙5 ˙;ūiá˙¤é7}SĨo_īõ_õû´ŖLD0Šˆ@ƒ@‚¯˙ëīÂ_Zmށaé´ôķ˙IÖ˙î›ŧDD!„BBA !@‚$gpÄCEđŽčBņ˛8"ץÁA@ƒA ‚ ¤Â~›ë˛ôŌđ˙ũ'ßõŨ#!„m^ŋ˙Ėæ{GūĢúŦSDÃPs9Ÿūũ (Ŋ¤øģ@ĶžŅ'*īķ/gkWíõôŽņœG"â,„R/ŖĖ$@đXjŊ4đ„F4-øa4"× Ĩßāˆ]…ʰcīö~í¤"""Iæ2ņxŧ^/ų §US:ؐČŅÂA ‚Îá 2ōeâü+i6- xϐŠđDQÃä)?ũnęv¨b""""""""uËÅō8g1d|ĀĨÅ#˛8„vG‹˛;#Åâņxŧ^/Ä#ˆGdvG¸!p<W]{M4ĶB,ã„Lg™ČAĻC¸AÕ4ČbDæŨ’ĮūŨWûē1em9VXį„"""""""""F1$đ\5ƒ0L"œ_IˇĻ˙÷ui%ąA1uhDGŌlūŲh÷Ö*÷DžēKôÚû¯˙EŽëúĻô°KÖ˙Ã˙â˜īÚö-úēū˙÷äG×5ähĘ3á”fĖ ë6Îz.Ī‘ d2ĖžF™H†Œ3æFFqG˙ęŠŋvļøL4&iÚaS0˜AÄ?Ķ0‚j3æ0A§˙÷ßčAXL/ˇ !ĸŸpėCF†‹ļođ†mÂ‹ļ…§“rG˙˙më °°—„:V?]Ũ éIÂO%oH8H6“ĩļȰ'Š„ œkŨŌwũp¤ß™´v˙wûŌî—Z_MĶģUĩ˙ŧ'vOąW´“#Ž2Qtbƒ°ž’dûAéŦ5a‚Lˆ;tڑēja6ÂL4Ø´í{í~+_´^õīīÄCßíœvŋÕ=;ÛĶUL†īLá?ĩr8IĻÅ!5H0Âa8aZjƒb§#„  î÷¯‚úâš×úũ`w_×cĢ_bęĐxAö×i¯A„4ČCA‚ˆˆˆ0SÁ0„D>“i/_đŋą˙AkøūÃ˙Š˙ąĘ 5ĨÆß~"""""‘#j*Ō~!˙ëo˙Į¯'Ŗ˙ûK÷Ø`ģŋ˙úų7Uaˆ_-ÂŌ ū´N=˙ԂßÛūŸbKOZ˙aū?ëHC ųSq,ÎŅ‹…7Ä2ą×íévŧ˜˙áí˙û˙˙ļŋ˙˙i$#ĶL-œD, ĖÁ`Á 70!8 îqÉ+"Ž{6ɑF˙ũzaú˙ļ˙ũū˙öŅ7˙}}vŋ…UŠđƒāîĶD„@‰Č1ÄÁ4!„Ÿī_Ķ˙ē˙Í˙ š˙ᴝ4˙ŋž!˙´:#æĶ 튑GPāî 5MWOė&ŠūŊ„˙Ž^u÷“ūéZŦ˙ä‡ū×våŊ'[i‘!˛#Ũ¤vƒ!Ü28híÆ"öͰ„0ƒ ˙Ļ?m_ûũ°ŋiæ'ôúūL}ƒÄL͊M+¤ßˇŸ6Ú§i„ȏd á‘Â7Aí$8“€Ōģ[ˆîâXīNÕoļ_­˙īϘOÛŊŋüjŸŠOVô{˙éēĐ<‰ĩziAà ĄŨ&„ZhZЎZ§k|Di-Ą¯ũuoī{Õ˙~7Û]‘GNÂdpši~-!ņÚiĄ&ô!ą„ĶM†˛ AĮ *q +_ęPŊ-nģîŋ˙ßvfPMÂdíšaMH%‘GM0ĄWTÂÚî⩄Ģd2‡šČĀ„v\SųČģ7Ļ‹9öb6!äh)œ`ˆWz˙Îoö˙ūq~ž""""C„F2Ă„D  a&aa2 „ĶNĐk˙Ą „"Đi…$ p“!¨&˜!i„k~ũx}˙ĻúÛC&¸B"'Ė2đØaC!kFž‹G§&?ЈĐi„ĶH{^ü~ņęÖđĮĖ…"hĘāŦ¯H2 ËļvšDā‚ˆĸp98mZũzßųŽ­ūvZāPPS*š ‡ŌXūXäy}.ŊLŅI’r+Ōl0U˙Į-ûõŅëÔ5Ŧ0ƒVė Đ!§{iĻH{%ߊ}.HrX÷§a­˙˙Ø{“ũĻh8zD§ VÆžŸ^ßīÕüĐ6ûũWaˇô‚w÷ũÚHEXę˙߯˙ģ ēoöēΜäkIĘĸîÃ˙õ˙aũúŋŋũûPēl‡ ŋõéRtúŪ˙ōgíԙ×˙]ƒ˙äG[‡ŪEԋ§lGÎõ/Ŋ[U]~ß˙īąûúũÛ§ūĢÜ7ޞ,l9Ųō(GfĸīA˙§ũ:÷o˙õ˙o˙ßŦ‘ūûS˙ū’´ÎBBÁ MFtG@`œ0H t ŦÄw‚˙ ų tQ˜"@¤0䘤ņvf2@¨Ą7GB$äHĖNDŒÄfd¤ŒÁ x}/˙ëP˙˙˙kŽģœžÃä‹ũėúBú á i Á QZõ õôė´Õ0T ī;TĄ ƒÂ`Ą0Ļ h_5aŋ˙ĩŪŸAûĢúßúÅwˇ˙öŽR í7ŋ§DwVíÃAęvqåöž­éŖ[FČEÛCšÚM°HÖŪ‚.ĸŨĄl449ō‹ļ†8•øž˙ūÚ}ZĻëß[Ũ,/Zīžŋã{váŨäā‰2%‘; îÛa2xm]¸NÁ~ū›ĻGm&Õé°ČĮ¤é7I7­6ô‚+é6ęé;#ŧ Ō  _uuëϚnØ[Õĩû]ĩŋ]tˇēÂ_éož/NûáÕöEĀäK}+ļŠ×ũcWÚt'Ka Wū÷¤ß÷ž“˛gūÕ­Ŗ[ Öû „;ˆ–8h:īÕ6Ōßt…´ĩßõ˙ ˇÖ˙ŋŽŪŪîȡé]ëŋ~î›úöŋũ-ëũ.÷[÷ON“ĸíøâ“NŖØpÕ6ÂI§j›{u“ ÷H0^õ_˙÷¯÷Ŋ÷÷õ÷qäAĘzņŽŖĄ†ž7T?‘ũąkõ÷H7ęĩdWAĻž)6)5b‚ ƒ à Š!„xab,&‚Ģëë¯ÍũëˇW˙ßģŋōhūë˙ˆ_ŋø÷ū…˙ēĢŊBT(A„ÂE´ÂiϜ5†(1 $ŧRšlC 4gH$Ęé˜Į}áũŋ›šŨt˙öžXĪ˯×,'˜ŠÔ´ûDëü´öÂúö*üeØ! ÅĄ4  !0Bq ęulPDpE‚n'§ī¨Ã_˙ß[ė~Ŋu¯ūü"ß̝õũpÂ,ũ÷ņ%Å# Žˆhž8 Ļđē}˙ûīÔ}v gĮ‘ą•šĩ˙˙ū_é{˙ûa˙ė?#ÄDDM ŪŖÂ$ī×Vũ÷í~ødœ$Âa›gĶ:‚ø Ė ûöĢ˙˙ôŋ˙^đÚ_ôÚ˙ąūGŸÂ~8á˙üzü5‹CÂi„ĶĶ´īi÷ŋŋûKÛköûü6—ũˇ˙÷ǧ×ũ´X˙¯â—mŲ md;ŋ“qwĸNúđa}“ĒŌr…}“¯'ūō„öNģ÷ėŸŨ}ŋúo­?éūŨ7˙õ,wļûOŧ&A"ßNĶøß­ũ¯ëÚ_VžģfĨfŸ_YBoūđßõOŋŊãũÖõŋáSíēMoģTđƒūŨļĩՄ›ØimގimŽØ[Kž×Vŋõ+Âw˙ļŠü‰ų{˙đ–ö˙kņM>:õõá‚WjĮiÅlUŽÃjKm&ÁuØ`–ß…öī˙˙ÖOuîč˙"×÷šcčBîˆÜmm+ÕzlRÚM1m-D"āĒb¤U‚QW˛. ģJ!¯íîžÚ˙Cī¸oëKDHč{n–á~Ģq ixMĐAÅBi ´ČŽŠ„í4Ä&“Nœ'jȝMÂ÷ŽįbĘ:¯ũ|§Ã§õ˙Ūuá}$FŖ…ëaT Đdœi Âa4ÂkaP0ƒ V˜Wš{PČŨ_kō–`™Ø!›2°×sųĮßé˙šĘßŌ×(ˇ8ĩÉņÖÖŧ-¯ˆˆËgRi=UMS˒™-Ä.dW]īš^øŽōũũ×í'ūīv‰GëôIėwđDqą^ũuU§˙jÚ˙Žôúū¸¯.oMÚđ‚ũ/“z ĒņÂí>čˇOžĒĶ_ö’ūˇK}kĢŽ—¯úū–Nŋ˙ņîIîģ‡wŪŊVØa{]n•ízÂĒũÚnĶi¯ũ„ū×ë¯y*ņ}ÅëÂhZÅ&ļ˜%jŠĄ !CĩUm0š_ *z¤š!&Ōõ¯˙ūŋæI[‹MZÚM0„pÖÂ’ĒÅûh“ˆ°šĒĮ~„[ú^ĩ_×úiŽę)a  „-&˜„ÄDUÚIÕč>F z.3@¤â'—#1Of#AI2'š ŽKĨ4ëņÁ /Er UA;!\ në❊:â­ü0]°Š qi‚™qKŸ„ËŒ&ƒ†`…įŅæ\KĶ6ĪA˛#éâ""$ˆˆˆ’2œ!pĀ´Ae€žĢņęš}Ą§áŸĄĶCPš‚," †a`0IU‡ “"œ‹ĮãA*d@@ eáŠBÖFŨDáÉņG+DŪ‰zDâ‰ģõí‰ĩMSCBи´ĶÁ ƒ´k“-ũöLr;¤ŌNԔRxMŊS¤˙.Č;Ã8¤ŸŪN(“í‡&>BMU5JĢũmuĶ}=IJ‰ØĨęũ)!Ķ´áéŌ|8dqJ7"ARd0ôœ0R7hœ9Ŗŧ¸Ē…¯×NŽŋ]íjŌO˙ôūë×ô˙ᅾĶĶUN“Ģģ"ÅzÉ@žv ‰ļ}Ĩ˙ãâ5Bë?C˙éÕŊëŪŊ§JHtëõ×ģ°ēhm+Đed!8Íh2I‘Ârq˜GÁÁŸ_ũ˙Ú˙ë˙˙˙Úúø˙ëĩļŸO¯­4ghH?0…Čēē zëōŒá|Š9Į__Žą˙ū ŋíwûÅÃģĶkđĐjŌpÃŅ'† ú˙˙Ŋ ōôč‘˙¯ûH/˙õę­÷­Ļ×K´Éūo'ØAäĻÜŽUtNŋūŊ˙ŋī˙¯øZõ÷˙“¨5¯Ķ;5gv#âédO;5ÎËĨž îx.Đ_û˙Zz˙˙˙ąH“˙ūŌ˙oöũ5: Ė+ge¯ũ?ũē˙§ũ/ģ÷&?°NÍ>‚8˙ é˙´‚˙ũûoö+đĒĄ4ĘÛ*fd¯oÕW˙}öđ˙ūīīĩÕ>Âk÷ßīõ]ûũ†˙ÍK˙…ÎÕ—$˙ĢUOúũû˙ŽēēZęØTMÛ &‰ė/ûĸc´˙Ņ2ĪũɏášEĐá "qwzĨÕzĖ´MĒ0õ5"ˆÕ)Køã~˙â.á§|qà $ÜKpŌģm>ūĐŋ_D,ÉÁ;.˙ũ^‰Ô×l-˙ÉėHë1wpÛŊoų) eķ†p#Hšžé´Ban `ĸ v 2xš `ˆZg&#ö=‚“˛äC ÖĶ#ƒ „ĄĻÅTTRabĶD$V Ķžāũ4­Ģkōõí+Ķ_ˇÅąwkÂ.avØP†›i/„-4\:ĶL ÁP~1Ã_īŅc†0ŋĩv+MĨ§BÛC[†šņŠé*h‚ü.â¯TĶDj?ûž?M„nhpîĄQąõXeõm&ÃÄî'z5ã`ƒ&pƒqél5tx´^Jø)û"ēvšyk‘L-Ģ이Ķb-6ė&G¸‹B – 3åé/ī뎯áÁ’zWzˇ†J ŋØL ÚM†Oé0Ã$ũxģ%-0ˆŗÛ ,!:Âf&XB!„BB{6L›•2 „uģ˙˛z}īĮjˆ„°¸ Î3ŅđįÂįĮ‘ÆfGHÆlĪ8ÍQ/˙õĨīĐû¯íūÕtûú]–o[k§A8Eģ͋ÄDDDDDDD2Ã&Oí4eÁ($&:WŲ : 4ØNÂhXM (]8°ƒ8@˜A˜Î0@Á I‘xĐI9š|Läõ-ãČ?ëW¯ú[zĻ˙ë÷Ķëũę+a×ūŊ7Aö¸ˆˆˆˆŠ.m #Ą‰AœMī˛ ŋÕpĻ´Ķ ƒNЋ< ¤  Ø`*9ņņ__ŽÕCk˙‹˙ī…†ü4ŋ÷ĢđĒēAĄHĶģ†Nxd¯'tJ‰;Ņ'v‰"Đė(M4,!jž øZ˙ô¯īņ ˙_ôüˆߊúõū‚ÖŊÖŦ“÷ü2@Pét× änéŲ D}D ‡‡pôIŨÉ ‰ô.đĢ˙ōĘ´‡ōËúų“˙_“'āŋãū—ƒ0;KŽŋĒë}Ōõēd°&¤É9|'äoÃØ Û!é2 Žäî‚odœˆ˙Ņ˙õŋŅŖ˙˙ßû~q˙ T ģ\X`ŋūŌū—ģĮ]tõ¯Në\ ė'kdđ'Š8:ZļŽĶøKŋ˙ؤc˙ }ú˙˙áõK˙n*íD(Ģ˙Ä˙_]Ú^ŸĻëđÎ:øH˙~ˇę7§öž´ŋ˙īßôŸũŋ˙ü‡ßH/¸Ãû Ļŋü/˙ņô ŋü~ˆ^‚Ķ÷O°—Ļ?˙Ōß˙Ũéŋõë˙÷˙ß×× Ũ0Ė8 Á0›Kũ_ä(§ üáv]ņ û˙ßöiߝاKũ“¤ŋû'_÷_mú_ŋĨˇčDCõĸO¯˙Ēĩ˙ÂՅ˙ü/÷˙˙u˙ūôßļŋ˙¯ūŋWJ—ûˇ|íPgo™(_ũß˙ĸcģŅ8˙Ø^=÷ü/˙ũv­…mØa-°•ß~ØKũëî× k­Ļ¸ynų šgj@@A™ˆN3‘°PS†ą>GDhCŠú]˙“ĒŌ˙Ņ!˙ĸQäĪƒy‘PE į$+e9y™ø@Đa4 ÁfÁ4Ķ ‚ah&@ Â0@Á4Bp0†SŒĀ§ äááKL ÂéÄDDDDDD! !d,)8!Ú ŅpLp‘'ĸOŪíĒ,ÅĄ…M M#„pĖ.a„ƒMāƒŦ"âc°B‘v„,"í…Đ‹ˇhX`‘ŽtkŖ] "á„Ņ­ĐDĮh¸´Ķ@›QĻĶA F°Ęúũq¤Ũ?îÂĻAŪ“ļíÅ<¸¤ÚÚ&="<ˇČƒĶNЌ&¨ ›AäÁ+ė‹öGdX ƒ˛8ÖęŨ=: ē}[  áûû G /I„›‘ņ?9OkģN“í|› ôîė–dqŌ÷äoAIØV‰ÃDžÉ9õDž‰Ŋ“xOŌéÃ% ė; ÖÃí0Ÿļ›ŌW][JÃū•ĶŋAęĨndŗOX)8΋ąM-töũu˙ī ĻíÕ§„ë$=‘ŊßŪGēdĮĩ ‘Ŋ˛‚C“Ė&é–äīčŋõē˙ûę.ŸŋīŪ_˙u÷߯nŌĻÖŨ Ą čB˙ÃĨ˙úũlXoũĢ´éĩT˙īôŨI:ŨÕĢ÷ŽŋI˙ÚŪˇëûŋûņ†+Ķ]z§íëūģíŊEÛ ØAW^ņ ÚN`ö鄏ŧ_ļ;cuÅĩ˙NšīĮíSĨßøĄø¯âŋúíûQĮã¯ē˙¯û]'F#aÛÂõë˙+müW߸Ä/üE×ĐØ÷čía õü0VØjū¯ĩ˙ęˇKzz׊$?ũ‡…ī˙¯ pūCÁ˙L=ŋ ŋõ×ÃŪŖūdü/ákū]l"ĮÃoüEëßKū`züĀMu뚃œ ĐO˙z'÷˙cmŋĄûīä:ü‡#û}õë~qû¸˙˙đ Ã˙F˙ũßÛ˙Điz 4ØKÁ€åÁ ‘€CaNĄNĄMįj‚ĨũáôŸīdAûü„ģm˙ííû…˙¯öēČR×A{Ō ˙˙Ãh-†ü%˙ļŒ=û˙Û­FDžÕĐ.ļši hYĀC…A” N)%_īžÃ}ã˙øl7˙†đßŦœ˙ûâģß}}tŋū˙¸vßôžīęë˙N˙%ūĶm.Âi§Ŧ"+ũ0ƒO%``Ā!€CŨĩßUé×˙Ŧ‡/‡ęĖÄÃíû¤ūũ÷ØūûŌ˙_˙ĘíÖØŊ/˙Fîˇü°ö›}‚#ö°š $všŅÛ÷÷…_ģ{O˙ÕRסWų1ëŸÛÍáīSK__üŅ7ŗOėŅY?_ßũ˙ēū}:į˜MŨdë˙'ßk˙˛uMÕtëëÚēTī´ĶM$Ϥ ˆônam;ÄZÃO¨ˆîĶ´īģBûËžÖÖíũūMÚĨ÷úũĻov¤Į¯ëiĶ˙˙Ú_ÛũŊģĢk_ß~×ūĒŨ­ņ_õozÃúū“ũaŌmų("ÅĻ"^Đdp"iÅÄ_Ą÷Ϛņ,zõwëØJаļ˛n×äŨ…ˇöÖ¸jØJû[ũöũũũVģöÂW×ß°ÖžžŸˇ˙˙īūŊ;^ŊđˇüÍžÔUĻG"Ą„IÃí,'i‘ÁâīM>.âĸ"/‰ž„\W\0—ąLjŨ„Õ;†k÷Å{d~ęÁ;î›Øû ŲuÚ Ú\Âî)&õĩ¯˙^ö—ô˙ͤÛžõ˛7NÂßiĻ*!1ZiĻGąĄa ĶtâĄÛ§´ÕÁÄ=V5M5V“N;V!ßjØJ–!ÆÔlií-ÚMĨöh¯ŊåHLčÕ­íÕū¯îú˙ÜDC' „˲VLLŠ970™Õ;ĶL.<‰ ´ÚM(–ũ28'ĩA=‘Â8i˛8 Đi Đl$͍Š(…Ä& ‘]4Đa5A:L&ŌiÅ!VÚ˙ŧ&x0Įëūžļŋũ¯ņ“r Ąđ"ƒ ! E8’ €™§M0M2!SU†ᄠ! Âaˆa4""!„"Dđ`˜Dė‘4,&š ËZ1ÂaA„A•Bc„O°Á&˙zi¯ßúOãŠOxīîs|DDDDDC=G-Na0˜T,*ÄDDDDDDDDDDDDDqX¨}f~‰ÃŅ7öĢū?]ßĒŽ"""8ũA´ßö˙dG¤ûõ˙kũ×÷ëø†ŋėjė'§õ˙ãūgw뭅üC˙vļ­~åģK˙ŋÛøãL›˜ņ˙Ōũ?ų˜'_ąūŸ÷ũįßú˙ũ˙z˙øpžŋM}íHŗ˙ĩø×„ü/ū˙û[˙ŋ" /î‰G˙˙!Ž˙˙˙‘bV…˙×˙íz{˙}oīēdĘéâž˙áŌûũ¯×˙íw˙}JüAS&—˙ûö×˙]˙§÷˙ÎH˜û]A3ĩfw6M˙}~ūŸ´ģ˙ë˙ÅißßPĄϝŸh;ëÂīũļ¸õăNîĶũųoSč4ƛ´Ö†­öģ×úéiįk91¸™ĄwmüČo;+Õ^ĶĐ~ Øjšiļ’nŸÚĒęē~īöˆĮƒ8į !dQĶA…ĩꛚjØA'ĒiĻ F‡ŽbUÕ˙ü"s|DC āDŨ¤íh§ØĨšiĄ Âƒˆ3AIJˆđ¤äšd#!„˙ũ4›â""""!›X „ĶĶĐTĶĶD08´Â ƒ6aOA4͗ Ô8ũ|ėgz$›â"""2p ė*iņi…LL°ƒÂ }œ35 ô"82 B,Ë’'ËÕ4Ōo œ0˜)|¸hœQ7ĸqa1kē õĶL&ƒĻpPƒ´ÁaB×˙­ü'IŊ’ŠNļėĪ;ė-&īDŪ'~íĸCŋ†šzúŖÕ[˙Ŋė—&ëĒd(ũ-Úzm‘a¤úAēwj“A6õĸNôN2ßäk"ųŖ˛YÍFkak3Fķ6CG#ŦSŨ'ũĐū“ ˙%ÉŊßtļšũ-[wäWßR7á‘Å'Iü3†p°ƒ4 =Â3a8>ÁB`‚„ `ƒ4ŋ˙ņa„ží*_ûuĩûTßŦ'ß ũ=vū Û0ž‹pÖÂ-ȜXá„/đ†‹ļ´[‘8ąÚeÂû˙ũt!~„/û¯â¯Š÷uM6ŨSJî¯cé>üÖØ ‚]A;"ģ _NȝA:Á2ã8˙´HIüÁũžÁz÷˙˙’Ÿū˙}Ã% &ę›VŌ„“l'÷ “×h>Â_B ņœ\ˆË˙õ_ø_Đ˙˙ÕVŸM/w_ ūÃũßhR}nŊŌzč{j×Ļà ’™sÍA´Kä0Ę*ĨŪėWĸwü"1˙¯ø_öãßē§ ëߨ˙¯ēļžŋūũ?Ē‹'„ww_đ™nëëÉöŊ/øOßõč“öū+ž>Â˙ˇ÷ü|ũ ūņÕ7ēíYę ėB!s¯ßj‚ėũ)1˙˙č'ô÷~$ãũ7íũ.—ī˙ūũVŋüģ"Á!ȐĶa4‰Îę%ũ~Õ…˙ûë۟˙Z˙jë÷°ßÃūZOĄ~‹¯íŽū[ ]˙^–›ÚéõVŌÛ#ũ°Õo]ûUÕ{^EuŨu_øa˙˙õ˙øEĮÛKU˙˙íë¤>öĄ8b¤1™Į—ėĮĻĶN˙ũ{MZuÖĩūķûũķQļŋũh/îļŋáúßĶü4bpĶj!ŧ8â-ˆ‹âÛJâ!ėLúëDŨĶŨ¯ëū˙ūč'Š˙Kö*˙öûõ˙æExâM{í=\Cļ)0…´ØZ{I×´#M†…ū˙ˇUļūŨkûZ˙üqôūֈŧÂ$á0Š„ûČ0ä0?kēbž˜Ļ)ĻÂ% 6-/ûdũuŧú˛uūēūŦŸ˙ß˙žĻc3͙Ã'˜¯Q äiÂdņšrv˜BɌL&G ĻNĶ\Vąų&ģîęū´ĩũ´ŋô¯˙ßî’~0ƒ, Ķ6gš"y—QdAŲáLķŒŲšČŽˆ[(dŖÔTDDDDDE›Ė,4"AĒ &E –ī¯avé[NÂ_ļ—¯ö<˙đ˙ëûT-;A…DnŗMi‚…‘Æ`gƒ0AЁæc'š#âšfĖŅÖ""#ƒ"&g÷ØUbģKš1_˜MĨmĒjˆ$Å'˙ŋĶ 0˙ •“‡ĸpŨæéĒi¯qĄh5M°ƒA—4€\"U4’ûJ!Û˛-ĩ^ í8Øa%ˆ ¯õÎ!üRˇīģ"Á)6î¯A§EŨe¸$]ųoëŅ7ĸcĶUDĮwÁ—~)‘\ ›  Ä$Aė šm! ŲPh6ÚŨođĒūŊ… §ßwëomĪŪ[äGĢTčģčœ4™N‹{M‹ōà „!„ !Á„"ÂXP„pÂtõĩ˙ũũ{Nˇ÷VŪ—{ĨÉr{}éÃAę•ŌŊ'I“é$H¤õ^"""ŽDDDQˆb0Ÿ˙_ėB˙ŋØžąv+õí×û˙Q^’tŪėé=i „ßî-/ úßŪŠ,=ká‹zŋü1CâšôžģhÉG ÕVąJ?ČŽ×č˙öwÉ}oˇŨ/û~Ŗũõ J¨ÎÍLZûI5HD0˙ŋäDc˙˙Ŋ:ĄaōzWaēkũ´Ã‚˙˙m3SA” û;V2A!ûVŌ˙hž~Ÿ˙˙†˙˙mÅ?ërzdČ˙ü5 „;ÆA§ņQ_Û īĨ¯˙^õaŋ_n5ö)ī÷ö×TLvĄ4Âiû ¯íĢkŽ—ûuåĐnDš0ß`ž˙h?kúûhœ^Ō úrp˙ Áu˙ôŗläríû[iĻ´Ãúų#ČŽŋĻĖīPGŨxoDčģi6î‰Ũ&˙ö›ki Ëˆši§x^ÕĩĐļëa§ö‹öõū0gīÚhÖcĻé_ztŽŋϜZÚa4"ĶŊ+ [ą3û†ûéÚūBÔÛ ēkŋ~úõÕũ:ģ˙đëüEĻ›AĢUPę"“M;ëĩN⸙ØD‡‚)ö—w‘ĸÕZu¯˙ė§(sŽ0ƒ02āĄĪÜÄ×Lƒ¯ 1[ĩöšp÷ihC†‰ēA‘Á… ĩUOA‚  ūEP?8dtu#LÛ$˙â"""""!ĻLÕ˛ba27MPaTŽoQU÷ŌŋlR t‡Ķö‚fpŠ%y?ˆˆˆˆˆˆa 0ƒDiÚg0ƒL&MqH“ļĢNŦtĶ ģų^™_ŅW™ëņtš aa.°„ $&ÃÁ21Ú.č›ô[Ņ'ē$=y>,–l!ņS+šĻ ŊCˆˆˆŠˇŊ:Ũ~›dX úA˙i­t×ë_Âbŋ×öĩ˙˙ &šÃ}9\\ũĒžĢ_ Ēééīģk÷Ļ§uđdqũ;ëí‹/Ž ucíø´v°ą;%Bwk~Åōā’û_đü?î•u]û X!¯a¯ûíûŋkĒåp5ō獨_ū—áõ߇įzõU××å;%YˆØ+˜0 DA ‡2"fâ˙_+ ÃAu˙ŋ ûĸ:D Ŗ‘!Š:7&g i’,–dn5åĢRb5A<Û:ũAB¯d‰0…3 p…§ `đC´CĩūÍ5]ë˙Ō úmø  ‚ "Á„Âdr6GÚ a „B38 ÁfĶIäÉϘ!.=9ĐD9?Ļ’Šė:]īɎķČ?§é"áŖ[ Ņŗ‚†ÂhąØCtkxPP˜DŨ„-4\: Z4FcM?Ŋ<‘`čņ4Áh'AÛH' ´čŒzĻéi*Õŋũõ­ŋúzMĨģ"ÃđÁ>ė‹{„6ȰŲsūÄîĐ&Õ)8`–DzN˙4l yrâēßÚŨ:NĩAՂa2cA°í„Ūļ ‹íí{ĩŪ­ŗíŊ~Ú}đÉÂö_m>“xvŸ°É:Iēŧ0›V ŌmâĘī­÷m%Ũ'õßzsįL„˛-“r&]ļĄ„‚- Dv—ÄjŨš4›úOלw^˜õ˙BũS¯W˙Âtļ‡ŋũ˙õŲsa?_˙u§Ģ߸wũúßd[vėUļ&* (iąpÂMĨ˙m_Ģŋėūũ¯˙k_ūŋzŊ>J5ŋūÖoŨ$÷I×OīKuũļđĶ dAÂpÔS­EEEõ¨Ģß˙ņū+ūŖÆ?ú˙ĮÂt›äFm—"qå SÃ}âŽ^Ÿo˙éûī߃,ĩa ĻJfš Õ~ö­ĐXÃõ˙˙ ˙Ž ūīũ~ŋ"ÂvG#†ę.ļ;_bD÷æ÷ļŋ7˙xˆˆˆˆf. h0ž˜õ 7û˙ôZwáéå—˙ëüËĪŊ?MöĢęÖÃĄžA›28ρoKöĮ_īéŒ"á°ßļ˙˙ëÂ.?ö¸"ã˙˙ņų!čéŨŠ&īÖŽ UØ4"ÂēúŒ?ĮīöēK ũ7ī˙ū‚˙ũR˙ÛĨ˙K^á‘ŪˇwĻĄãtXûūŅ7ĸoģ­X?^¯đ×Ĩŋáŋ˙Ûü/˙ģĨ˙ą_ßōÅwkI×ŌmoÛ­žg{™ Ōã‡ĮÔąßė&,6ĩ‡˙˙(_×˙ú_ü/ō…˙úÕ§˙×í[o]]dÜ ûēĨŋá-˙¯8Ÿŧō˙í˙û4û'_˙8—í}īBžēŋˇ™‚SnÛģZ^‰Ž=ŋŠĻ?¯×_õūŌ˙˙Û÷_˙_í˙¯˙üˆ=>ÃúûtŋOíũoûÚÛ¯ßöŋļˇŨ¯ũ„–J×ũoØiī˙äÄģĒáŦ*ļ!Úko˙ūĸ•öõ"Æ/øĨÜŋk~ÅqVv] Š%˙Š˙'˙öūŋīxmę/ ëī"=ųūūĶŧ=4͆ēlˆ=4Ķi4â´Õ4é]‹cM4áÆšm~Ú_ë˙ūœæ‹zg0ÕēäŒē˙éÃûû˙L”&)=bI°Ą ĶMĢV™$ĐiĻA°¤WXM4Ûi5jČ˙Ú˙õ÷˙í+íūũ7DŖūÕyžûßÄC0Šˆša„ Â4B!„&ˆˆaa  Â„"OƟ˙Í?^ŗKÅ$›šũ>†đŋ˙ÜũĪ)Ūū"""""""(äDZL&×û†ŸvžĢ­Ūūú,{¯˙ž)†üS[˙W}¯ŽØJôíXiv´ÚWíé^ļŌ_ˇÕ}zīŋęvt"]=bŽÂЊ\+v÷ßŪˇÚũĢúŽŪū¸B Ž,FšĄ§tÚ¯ ŽJÂkéĶØ_×ŊūKûVČ.䄚 Ķ à TÂhpÖ"Ջë ÕáwMũŠâ, gôA„Ô'ę!1V…E6ƒŨ„Đ`…ļŋĩÄDDDDYP0˜AĄ>Õq BâßÃÄHēA˛vL' ĻDc#ŗ€Ķ Üxp׏˙¯˙Ë9`ŋË90éÖÎū%Ÿ–ã#8ˇƒ0ŽÃ'P  §xÉYō;č…Ŗ˛ʰ„ã2Đŗ"Í=„,¸SĀŽe&=UB¨&BÍJFdI„Âh0īū´Â¯I§´× Ēøv™>aô˙'dQī#vJČČS8ÎąKFĄô.îû˙ĒÖ{ ÚéƒR>!`‰¨&Š•‚L§3vœgם×>jÍ[ģîîī&ëŨHßĻŽËę$I—ūõ ŦÍĐk[ô…đOŋÖũÎnââŨŋ×ô×Uûõ^¸}¯_]{"Ŗ]ío¤ōS~ŖíŌūŊĒ•Í}/ĨīšÜ=4ōá?ū2qNA›3Ė äd@"?— Ģ—2‚%:”jē}˙ęŸúĒëíôŋŊsĩKĐžpáŨûí4ĶAÚfáC‹A„!„Îã!‡<ā%)×6g œ˛œģ.Č5_íä3R5ƆHͲAų Čdu<Ķ#f'G#ætd4rNwdFf¸‰Éšã8ęÉļ_oĨæ÷ˇ_ũEߨ*Ņīļ-;žĶ‹M5T.0B!„p‚ !ĪˆˆŸgŗ†GĖ9ÔDôƒƒ›LaBh„A„0S„la  Ķ&4 sŖ3H0@Ę#6  g ÁaB |1Ōõb‘ČœŽˆųĐ]ßà ÚA6\Ã˛QDĄģĸo˛8Œˆ=:uLtĶu[ ¸BÂĻ~ÚAčąØBŅp}QĄĸíŖ\+‡Fŧ …„Âaа…„-Ã[„4Â,vá'áÅ ĐfÂÁxĐl"ž18U4Fbš#ŒĄų#˙ö֝ö¤qIˇtš‘Ä0˜)Ņ8ž‰Ũģ DŸ¤›i¯ĻŠõ恨$oIŲÚO¤“u¤áŨŌpĐdp'Š6Yv%ĶT›äGlš‘`Om‘]†3l¸‡ú°īBĶA„-4"ÂaL@Á4͂āƒÂ„ūBxCŅ‚'"ƒ#¯)ĪŪˇũ„õ˙UīMĶõŊ2 v™r#öøRâÉĮDãĸQp‰Eļ/ŋŊ' ”-ØA˙ $ęÚģ˙đšom„ė2Y –5l8iöN“l û„$ đīŽØV…ĸn-8ĩB4Õ=4üØĒ,"ķo80ƒū–˙õo÷Ļ̧TÛ¤­iöi봒odĸ˙h'dw§IļŊôŋē˙x¯ôŋ÷özúwn›KxOôß˙ˆ8á?{ö J(ģ ^)DŅ †\4N21Čâ‰Ā´Hwē$?õB×Â柎˙˙_˙˙QēíoõO\UŽ“žÔS´ûũ_Ĩ}kO×c Sk˙ėz˙ũzßūĢúú Œ{×aßŋē´ŪÉŊš;];†&IČâ“á“ā˜4dī.(ˇ˙K^ŋ˙ī÷ūŋŨw_ŋˆTöž×ëĢߡĄÚ+đä‡QŠ˙đ˙Đŋéžū¯˙ô?ö…ū˙ß_$9<˙%‰öK:ģīNīˇé?¤Ž”†"“[˙ oîŊ˙ôŋę$üŦūŋzēûŽŽĢēĒŦ/Ũ7AkũŋúũŨ_˙˙ūēí߆úxøÚé ę´ŋÖéÚ˙+t™!ÂWÃéoė{ŋ˙ûũâß˙­ay"˙ØĮ˙î˛ëĖž‡ûy‹×ūüē˙˙÷˙ōë˙ļŧ=ō#ßõņ˙ŋúŋŌ˙|Uĩ˙û_—÷˙ū÷د˙˙{Öë×n˙¯ūūüOííč×˙Û˙˙_Žúđŋ˙˙\<ŠīÜ7ü‹Š¤‡Azđ‡˙õˆ__ĢŠūũEß]ūŊ~õĩß˙ĸqŋŪī˙ûž+īKđßvīü7˙˙1ûß˙˙˙ũ¯5īūį‘|ø!á^Lg ×÷āŋŋ°×î›˙ũ×˙ëŌ˙ģ3ˇ˙ûKŋüŋî˙ßũ/ÛÛŌ˙đßũ˙Më˙ø˙ũëØ}ŋt-˙ũú˙õë˙§˙†ŋ#ąÂö¯ĩ×uĩDˆöŧˇĢ\˜˙׏ģ3ŊwŋŋĒ­Ģ(_˙‡Û˛uīū˙ųBũ~Ŋ˙˙īũ+ūû~+˙kpŸũŋ˙øDŖ˙ėtßč!O´Ŧ'kÚéČ~ß­Úöē$?˙ī]|Äū[˙ŋõėkųäû÷ūy?ûŽũ7˙u˙û“¯ũ×ߡę×ø\Ō^ŦĶôŋ˙ú÷ūߨÛûÂŨ°”\ZmĨœ‰AĢš´.4īĶ Éģ†īūMßūßūÚ[këûũ¯˙Ž˙öēëõĨ¯˙öŋũ×ũŋO7žĪį–Ŋ­Ē_§üą˙ī^—¯ö&? ßßĐcí6)´8a7؆N͈ļâŖĩŋaۜ0ž—íC ØK˙ŋm†Öūû˙á„ŋī^ž¯īû ˙ĮîģôHwA4Âazļiz­˙ß˙î—&둎ü#4ûÉōP|'öštũr8ŋM4ã´"č'hE°Õ?ØĻČûÄ;ūÛbĸ ö.û#÷ėWv]/uĢi/ļGûØĢģ#ū×ĩNĶP[[NÖ/‹cˆļŌ°ēˇ{¯ĒũëŨŋč™^[ļ2p}IĢ ‘G'‡!`&šÜ0¨0™ ¯ä#ĢCģV( ūš¤ŨS†M‡R ö+‘v”všm|kvVļšqϚŌŦø0’hDpŌ˙´ÕąQq ąvŠĄ}­ė>Ōģŧūöí$„DDE'b!‚ éÃ$8A„"Aža[ Âa4Õ4Ȱš¯vL$ŲĶN)7i„ėŠ8[L(Ļ‚a4ÚL&Ō 'ĸƒ‚i§IĻa„ƒMĢ#÷DÅtÅęÛWÜEÛi&˜L6BŪäĮjĢ!‡ĻÄR̈ˆˆ‰ėÍ0LÂA‹0‡Ä4A„,DŌ4$čpÁ !ˆ†‹B2Į LpƒDCDA„"QĢ„ų.HŌ:đšjÚdGA„ĶNûǃŠM &"N/EŅ2UDGDDZAŊņΐ!a2VOPLž¤0äôÂwÚŪ)ī¸…zڝ§˙ õņ áČC‚œb ! ! §AĻEpЊKū„UûˆˆˆˆˆĸæOˆa5_×Đ~)ĻĢËp—Ú˙ő6­_kõ^ÔF¸¤ōlŗĒøfŊ„4)â‹|ŧ]ĒÂ2)2ZfĻ25Zâ? Ē0šŨŗēĸš˙k• ‹ {%a q"(úĒáSOĮšƒ9°ĀC> ÂGp(@Ëäj:ŖZ;÷“˙uÖÚŠî ÂŨ„2„ ‘Đ‚q}HJhĖ0P28gpî‚iŨ˙ûm ÛDxŅ-A",mā˙Pƒ´Đ0Č ^„Y˙ Sįi2I•äo-ņŨ‘!´“˛$4›H;L$u†;m8m$Ga´Û§įz?˙ŧ‹ TÁAHPSAJqLd†ĐAÄ'īĨĶki}(}ęDļÔ'I ôˆɏŲí ¤Q˙“nëMmS} Ņ˙īPū“Ķč$´Ûöî›ŌļžÚ’‚$S 6Ö āĖÄ'@…ÉÂY9”<Ã*5_ۃ‡ ÂDî4ļaæ/ũ{ui>•?~Ûũ+~ŪÖíÜ Âi…O A„!ŸŒÄ8eÆf) R30G¤d$ô×MÚúič ûOŠUũZũ˙I^īīKN¯ūŊv÷DŪ‰Ņ!ŪžÂk`Ą0…φ0g˜D$đȁ‘v\Ž ĻˆÜpelUü”,JK˙áŌMŅ0˛`ŋ˙ëjú^ŋģktŋßũ˙ĶIĐMĸwDáč“ÚDž‹wōn4ô-S4A‘Å8a°ƒ, Ę@į möēëúč']ûu<¯ĶĐ˙íj“Ũ˙uũũõē÷ûTÆŨi7ÂpËäŪō7zL‚ã´\B%ļŅoDŨĄĻĄ *iÖ̝˙ŋ¯tĸŽĒēIZCĨŠßíĨ­?Ū8ß~ēTęûzŋûĶēM:ˇN^īēO' ēk“!žī4ôũpŋúNģĒĐß*ôŋíößĩ_ī×ĩ%?2pŸņZ_ũjÕoÉÖŊBw՚)jÉšŨ ÉYŌißueŋæÍĮVtFãé2Zd4my†toå WŖŽ¤8§ßĮö–ũéĖí~*aÜą˙¯÷Ūdp`/ī˙×ĩÃô˜ôôīû];[O}V“'¯´úÕ/NH3„á0š`š\SÆ0L „Aûbĸ‰ÄŦĖäĮ!fB—j!83H'~ū+˙™ûõžëŧĐ×ųcô0ˇûûzåÂb ß˙Į˙đĮQikzϟē´ũėoÖöŪ-„0´ĶHģa ĸŅü<&á„MÃũ:A‚^†—ģÍ×÷­ėw××ŋ÷čąũ7ÉӋ×˙ū¸,?÷˙˙oÄ/˙Įđ˙ĻŨŲs#v‚ T–Čƒ´ž G‚ ?aŌ/ē ŽL¸M†L› ‚FĮ„GÖD†ú÷īŋĩß˙ᎊēØęMČî“Ú˙˙ū­˙üš×đŪ‚ûi~õû{˙ü ęÛ%?°AŌ~ŸũŊ&ü2Ot›{]Ŋ,2O¸`¤â~vŊ{ëßũŠ­í}Úëbŋ˙÷Ņ8ˇ˙˙˙íöû˙äÅ~Ã×Kū´­Ą÷_úú´ŋaûũMīĨûФÚĸŨ˙nļ¯˙[úß˙zĢūēux_ũ~CŸém¯˙˙ūßĸCū+˙˙¯Û˙÷ūëũwûũŊ+ú˙ŌũS¤Ōo˙ļû×"ø÷ŌŽŋũ˙÷ŋčš}˙ˆõ†?ŋĶ˙đßh&ũ˙×ö˙_˙K˙Qē˙øŋ û˙Ģ÷ĮĮÖę˙˙ŠŨĶ{zī÷˙ūú¸/]Žq~š„ųcû_˙4IW˙,|›˙Ã˙˙ßíĐ_˙zđß˙˙N—×ŋ˙˙ö˙ū÷˙¯˙û÷]tCķDĮɎÔ&éúēũ§ų|:ēīû~旨cô/˙˙ßú˙˜kŋ˙˙ú.Ē.š E¯˙oûĢíˇ7˙Ēßm/ß_Â$ũųŨ¤ÚMĄęÛO°ļ˙köĢúĒi*jĩū—i÷—Ÿūŋ˙õFßúûw˙˙ˇ_˙ūģö˙:{ntXo}˙÷äĄû ŋÛb˜Ļ6„ذœEϚmĄĢ@ié§h_ÃĩŊī_íô6ūiž˙ˇūč$˙˙ū˙˙˙ŋø_ū˙ļ•§Ūš^ũ{[úīÁûĨ˙ģ[z- ˆiŧiĻąqlTFŸ§m¤›Úp~~ŋ˙ßKŊu÷ķZw˙˙ßīũĨˇíŨ6–ÛkŪöŋö“Öúūõ¯ĸQ Đd-S[v ûiĶ´Øļ­6“´ãNø´MßÕ˙ß˙û˙ŪŠŊ˙˙ôÛ˙„LÔ%ę›n“avÛ +īĨ{[Õ¯ôŨî}KōĮĒ҈e2Ȇ†IÁ %âĻS‘h˜F› „Õ4ČeŊ§ôĶVļCŋНWīéŌũĒ_˙ō}éū˙ûīÉ˙'˙A?Đ ƒ`Õ; ¤Å&› $šičBĶíé´­íp˜LÛ0.ˇĶˆŽ""""CÄC2pˆ˛P|B ”4Đh5°Ÿk˙ŋû˙Ķū˙ímolÔē˙{Im}B_é0ÆŽÅ4šąI„-Ō5 › % $›Ēh5OM5ˆžíU!Q ! 'Ã'´^“˙_ĩõŨ˙i>ijØW[ūŌę×´ģ']%Ѓ0ƒA„ *pĶÛP“MöÂLiēЋMPˆwĨB>"#ũļžÛI{0ģ {iļ]jĮ %†“i7XOˇĨx­Žíuū É*pA‚ ˆ°M8áˆA…ĩĒĩũĢ Āõ¯×‹‘]í­ņėCî8Öé†`ŽÕ† ZLZpmĨĶL‹ [KĨøˆˆˆˆ†hDC(2Ašdß )ĸl*_ ÂlŠ:¤ÂlR ÚjEza0ĶI„Ã Š¨„Ä&JD›ąAí8iÄDDC Ϛ “.W:5˙a0šŦ0Ŋ­„ÖᓀšvaĪAŠa0VĶ đÔ&×ĒņaSHWˆˆˆˆˆŠˆˆˆˆˆˆˆˆˆˆˆˆˆ‹IÅüh ÂMŋĶ_ˆ˛P‚|ŗ‹ÂÂôƒ՛ųg&I™Vpų‘@ĸ"?Á0§h3†TŲÚ†dXŒú_ÂáB¨A `ˆ/#Pō*'ųk˙L&OØ\‘ŗM3ŗVd´Fˆū{<ąß´JĸCŋ }pžvThE‚ Ârä !Č ĸČ`RFōg]ÅÜ4‰IŅá?īÕōD¨HhĒkžJqAęĐN¯ũÃŌ'鐎B„Á:ĩë˙­6ēNLŊ?īCBĶÉÁ šhų´õmH܊ë?š ™˜Ėķ¤æĒoûĻ)ŊĶē˙æŋû͇§Ũũ^ œB 3¸A ab Ī3“ĖO49"Õ¤ë¯ũĶׯũíëëaVĄô.ĶģMŸ„ÂÎ0ƒ8ûGÅ)3f™ėÅ•Ã\—?]˙˙OŽ—z$\Z“ēÕôLz$;ôĶ ˜Oo™˛8Љ„•ŲW;)ÎÆ‹„ ÍĮq›˜ŠŸ¤Ž%4›$â5mm~oß[ũë~Š&IČâÂĻØRPõtmßĸoDā-~’w!ęŊ?BÂi„Cģ0)ÂA›4Â!Į@r Ž„Rq˙{NŊ­¤ˇWūŸIļĢz×Ûô›I“u¤Č.ôŊļßĻžÜŗ•}~ŽŠŌ&;ôÕSĶL ė Ķ˙Qũ•˙tÉīMû'vBE†‹¸2ņj‘;xa"áĸŪ‹‹h›ôHz,úēĒøūßũ-õö*× -ôŋūšöKôĩéø)›ûĢîÂiŌŋI˛8I:OË{¤ÜÜ&ŌÚĮŨü?¯˙öúC~õ×ûũ}>ĩ˙¨^ž¯°ĢĶęžŊ’ûņēģē]:˙ĮļĢ~—ˇËĶû˙Ã÷˙øôĢÖ˙~ēŋ×pīÚ_ũô?ÛĒzõļˇújŊöŋ古[ũ/o˙˙k}“Gũ˙˙ŋöÕv—Ū.üBųÁ˙ū!u[ū!Œ1ũĒvģuøĻ:ŋKÛī˙×î˙ūŋÂ_{˙ũôĮämųĶFyųĒ:Ų>C_ÂøA¯ũao˙íŋĮÄ,1ä?ī˙‡˙õŨpß˙ß˙V¯_˙Å+ Ɂ Ø Álé› ÁÁ=˙ ˙˙& Ŋōnw+úø-ō,ō#ÚĨë¯9‡ėĖ_ē×Ãzë˙ū—]ī˙ŋú.TŅoŦ°… Ņ­ķG-§ũ˙˙­Ĩīô"Û˙VßŪ.õõE÷˙Îoi˙jiũɏÂZß­ŌŋĶqp[´Ņ˛“é=Ã0)åũ/vŸ˙Ņ8Įém˙áÃūŸ×ŌÖû´žúû÷Õ'ė&ūũÜ*_˙˙Ž+ĢÖČí†K)_~ôÕ gúüW˙ŌŪ˙Ķm˙ôļŋģ_’>‰ôīâ*ĶÁvļ§÷{ .ģiĨŽ–§ĨN­}?÷ßūîģ Úm'_öļ¨/ôŊ_ūÍ>ēëüŸ †ūõŦ?÷œļ­WUBáøMcmb-Vö%ÃKâXâŦíŌzh{i÷ĒęÕŲĪëûŊ˙ßÔGzUú˙˙ëŽīßļ˜sVúš˜ēYßņ_E˙˙â¤AÕÃØĢBîŠĩAĻĶQkÚĸŌa„MéZÅöŋí/÷‹aŋ‡˙a{ûö_˙˙ ŊŊ÷ēøuũZ­ˇ]% “ĻSMwLRĶV¤Â}6Ŧ0I†“ėW…ø}÷ôģēņ¯´V­/´ûëaVÕ?ũ-éÕ-TD EĻ™!ĘÔ+‹äa4Ķ[_Ķ˜Ļ==Ļŧ/ˇú,ŋ‡˙ūÂqh4Ü âŨ&œE÷ØB%ŽûŽĩ­át”DDDDD†hC4ɧB. Đa4˙Č{^oö}~qvß^žÅę›H{hH7pęQqMi‚žŧ0Ģ‚ˆˆˆˆ‹@Âd ĘË Â xA~ßŋč-Czu˙dnA *vƒ B<4×"E€ĸŖ rp͊ĩGŌa͊Ä}/ÃhČëí¯ļŪ—ü0ƒ8ĄBO†‹ ĒĻM8dQ×ÖöŠĒ˙øzo˙KÃz0ũˆˆˆˆ‰B) ÉčE„ÉŽPčDUœsúiĒwtŊ/Î&×˙˛uûũ¯üDDDDDDDDD´PO˙ßoú×ķÉØĻ+˙_ŨWÖļũ\ķ¯ë×á?õŊt˜Ģ Ūģ_úø†ŠÚIÜ0”4ž ûJë˙ĩėŠôqĻˆQL&G Ø­ëī°˜Lî@õ,u0˜TČ ëôšg&!p§Įâ"""#ŒŊƒM4Ģõėˇ žg˛­¨á4ĶäB¨!h5JÎÄĖčgvÉ]ūƒĻŸ:‚ Ėß! įÃ4Ø.Kä|š—DxŨ­T*ǧūĸ-ũ Ÿĸ1ŲNāЈˆa|5‡:ƒYÚ#;–úww˙˙„<4Ō%Í Ô ę×Â"ŽááJ܃<| ĐR‚†¯DR&Xģģģ§ū>ŠXoI“a\:d#ĐA°ØnBģ ÃėiĻ­ëĢį]÷Ķ^Ũ%Õ~ôáä\mšMȐŨȟPØa<Šíļ‘˙4–ũ0ƒúĢ~¯ëžŪé7ˇîĶȐöBAK"Ä ƒ{H ûtá>3<Äb0aHĶ'?ë˙â=ēĢ˙Mŋöũomŋw§ætī‡IļNęļ¨4Á‹D1„œ4Á8Â&˙Ļ™ĘT<ß×÷Uūß´ŋö7û_ûúÚúŋŪ?A§qi¨D\% Á"q˜ŲĪĐq &x(@ČHƒČ˜§ Ž3LøŋûJ›ûŪŗ‰öķ_ūq˙û¯z{~‹ŠNÂEĀļEéĸßčáŨßņpÕ\fČ!yN`…‚a3ƒ<û¯øę˙Ģ˙ޝ˙û\mßžš¤Æí$ÉCíuԘ|ąúĄkĨ˙ŨĶ–8áņ×˙čXęģ˙˙ĶīAĻ˙}÷맍ú¯;, ‘ĸ ‚i„û]{ &߯}-덊' üąß6¤˙˙×mÕ6´úU˙Ĩu_ũQÖÕēŋĩčÎÖŅ˙ũŋ´¯˙Šíd4ņ˙¯ˇÛ\Ŋåé˙ūJg=˙××ũc˙ûIzöëöēNô“•ęģ_îˇë˙×˙Éēu˙öö÷˙˙ūč[nŋļîˇ÷Žßë÷ú÷ú÷wÚv°Ō™˛u˙öũŠ˙úÛKęĢŽ˙˙caĩVß˙ûw˙Ú˙˙ßßk&ū×˙*‰XXãaO˙°ņō#ú‘_÷Å{KũH˙˙wü˙˙ãn;úbŋūL}vÚūÅí˙úęšÚVĩ¯wúģŋī˙ō,D'ëĶ˙íīš7ėÎ˙ū[Éāíúú˙üW_˙Å?Öžēí˙ōFÚë÷uŊūkīŋ÷đÛÕZoë˙˙ižõ܈?˙“×~×˙_ãįz ëëŽ?ûKíĩ÷=˙ŨHƒúöÖūŋ˙ü6ûj÷ißöĄũuĒßũ×tH} ŋjÁ~šôō­ ëiæŲŅ”š5ÔŠdnOŋ˙/Ûâē[_ˇŋŅí˙˙õš´xž#ŋ°G§vÚ{Wˇ´ú÷÷÷Vœš7øOŋôđƒC@đƒ3œ`žķ˜ĨvˆK—@ɁšEĖđÉÄD&r)Í‚¸ëuûTõ¯Xŋˇū*•W˙˙¯ĻõR;Z „ĶˆˆĩvŌ°žŌ¯Ĩūš!{îÚúšĨéÚ l"oj4é­ ¯›†_ƒ0U4Lw…¸ ´[‡FJ…˙Õ´¯VŨW^Ōũ¯Zŋī˙Ûöˇw EUϜˆ;A‘×%ĻÖ-ŽĐiÅĢzmĨĻÔKzrŨÕ'ūzt°R7hØÚĻ’mρ—@›P˝6PŅą ƒlŸRnÂ82ä°Ė që]ë--ëmkŌ^ûútŋK}ëaS#€ŠöŸx­ˆ_Ą ØĨb›]1kÚēzM­ĶđƒĶvëúôØdrxŌŌ°ČĮ˙¸t› •éŊĒÎ?ûi6ûđ‚[ioú¯˙˙Žū÷B!„ & „"0¤QÉ( …M4ĶOím7ė…w{ĩëI?ĢõŽ÷ŽßĢ´=:ēģB“˙ĶĶ­ûNøAļ“ $Ķi! 7K‡ë…°CÛNéĩûKփ'oRjԃĀA­„ÕaĒ˙ũú˙ŋéŽëJ˙ûĒĨē˙ë¯ŪŋēaˆMEat)›iÜ&Ō !ƜZ‚VÕëīÄDDZæLQŽ*kū1U˙Cŋ×ßũ G¯ÕŋWßPëč•„UNí5†*ŪŪ;A‘Á„)Œ&ƒ ¤›ÃIDiņĮ ˙īiz˙˙¯ŋ˙ßŨ}lA„EYˆˆ†Ķ# a42tô„WąIŊ„ŠęĸĨǝ֋/_ųboP‹˙ōĀüÅūŋūŪŋņNÉ$8Baa„á¨¤ŽˆĐé/ü"ã˙î´[Ĩ˙˙~‹˙˙õ˙ žü!S…Á˜RƒÚŧ ŋ˙įw ģ˙˙˙/˙˙Ķ˙¨ˆ1UĨíz[˙íĨîŋ˙˙i~˙ßŪŋö˜UUᅂ;˛…˙ũĮIq÷˙÷éõē0ú˙‹ ĻĢÆĒÕ{˙sOk˙û'Y:ėõī÷MĨũĄ5öK˙ûÚkũëũĩĩõ˙úãúb>Ģ .­­ũ…ûVģ_ûVÂ[a+ū×Û]­kרV)ˆpa"?bšâŨ.ËĨ☎; Ųuˇ]Ũ.×˙ĐĻļ6“6ļ™ô› ›Ļ֛LCŽÛ &Ą°”6ŋ˙…i‘Ä27Ō{ ­Ē ŠN“L4A‘Âh&Ä$Ķb‚}üJ`„!aˆˆŽ Á B,ah4ĶA„"!§ūū"#B""""/Jš˙ÄPa4éúBžŧ›^ĸ?Â˙˙_à øōl¨)@†bš |5 "ūđƒŊ0ˆ/ĄĶŽw! ‰Y•.VA‹hĶöč Ũ“r{MØCđBû'“:Č30Ę#†ráœÖ3 Íœ „2$2uũŌ’ļÛA dŨPdcĩDqi„‰=ĒVÃ˛8gÂ!Ž Â Ņ#e_õIļúwéíīI†ƒ[#wģ,rC‘dX˛#Â Ú ›°ƒŋũę÷īivĒŠ'ôöÕļ˜XwhãŽÛM6‰XnōS–áDW#C*-ũ_îõŊĶéoū÷z[×ēOOĶ%ēđLĒ š‚š dĻwĐ `Čh‡sVPä ĐRāUWēÍãijĢÚJû§ëûŋN­˙kwŋ°hđÚuFvŒ˙iĄÁ‰ m †¸d5õ8ä>ŋģõuę÷ÂIz_§ũyŊđEEXĢŠ{ũÃ'á̰˜ZM$˙všawüãžÖ+UHbąô˙ŧvĩQŨ˙î˙|7´ôšŋ´[ˆ_˙ģ´X˙ߍâžĢo×ŋÕ&ĩú˙ČöÎÂ#°kČčqAŊ+˙ųŪ–—ˇõSû_úšŨünģßûmä0 “FzZømS[Õ?ŧˆ:dܡ#r4Õ5Uą˙ą{Z_~’3ŧ*ė˙ëÎ;  „€l:š 5΁ĒD\6ˆL.ŋjŊ¤ž¨žpB""""J‘&Ž—~ŋũÍ ũ˙ņS˙×˙ØûMBh2€m!†÷Ußí>Ÿt""?ŋŧŒ~œ”5žķÁ{[¤Ÿõß_īúëĨ„ķlëvPČhؐȐÉ”#Œķ:™!h2×Hë&tČÚ ŅŠ#ė†d3dގû]Öôõü}ī˙Ũ˙ũwČxûõŋ˙„ÁÜa0˜ Á0œŗ „A‚a;0ˆUŖ.ĪhÁˆ°ˆX!ü3FfĶ˙õßsũûĩņč{ōO‘˙ä_ûŗ­§ūĸÂ&;ôXė!s]˜EÃBá]†īA5L!h¸aPhŅV÷¸aB5Ôwũoīočœ^IŨĩ÷û¸}ëá?â""jŒâ8Âiö Fî~ĐAšv“{ ‘`JÍ;#‹I6`mgÆ Rn4žœ2g,éīI˙û÷_Ž?=í˙ĸī#ˎÜßæî˙ôˇ&á:Mƒû% a5¤ÛAžŸôžˇ “¯dąîļÖ­‡ œ}ņû[kžŋĨnQíˇÚ ƒ{h ßøĒŽÛŽŊû˙OßöĶ~Đõļ—^­÷Kn•´>Ķ˙˙Ö;ĶÕ´•ĶúW°ģŋĨũ÷ŋŽ“”v—íÖ˙ú¯Úī˙ü0ŋūë˙˙ûĶ÷Ø×NlBOB“C´Ø`ŠŨĢžÆëúëkĶkēû˙Įč~+˙Įú_t‡Ąãü1_Åz‡ûu &ĶA&˜bi†6“°›Ļ›Ļ˜*‚°Á[[#m%ūžŧ/˙!/˙uū‚ũ˙…­ŋˆ™°Á45׆áĻ“]Ą : Šb˜¤Ø¤ŨwôLN”´ü"Į˙ķ'˙ËO–žØh_…ø Јˆˆˆƒ/‰¸@Čę §írĮA„AĨ $ß˙˙đ‚˙˙û}´ĩė"ßíū¯{5—‚@Ĩ āÎ G̈́'Ŧ9(2v""""" ĘđLtx0‚ ' *˙˙Đ_ūŋ˙ū_°Ņxũ/Ãö˙ŌĄÁÁxh4ˆˆˆˆˆŪŋé~—˙ˇ˙[˙I~ĸƒđ—X~2܌{ ‘l‹ŅĶH“Úm6Õoī˙¯˙å ˙ë[Ōũéŋ˙oĨNí4ÚM: ÚD}doVFíÃDa‘Ų˙ŗOIŗO˙ßíuû'÷'īüōŋ˙“§]a˙úw§ī§oB$ŒĪQÄ í$˙û]+úū×í/îļ›K´Ģ˙õ_Ü˙ū˙˙Ķõ}īné† ‚`˜Lė%Č ~ÚXJÂZÚ˙í…÷í[ĩģŋŊ&×˙ēAú˙ͧĩû}_×ī –0P *ęA(‰°˙Ų^)BLUĨkdՊųģI]ŠĖ&)l/˙ŪÃ;ģ׎?¨˙V×]w÷áõ@•[ĨLŽĸ!dS$7â“M¤!qN›ƒMI„é†NšŽ–!Ļļ’h;AÅĻ¤ß˙_îøé/ˇíƒ˛ž’§Ķę˜L͝$AqÚ"ąŽÕĻŌTÉBA´šxa'm1 íPiȝMšalŽM8¯ņéÎ=°úžõ˙qĐKēījĄVĶĶO !gØāĨĀ!Áa`˜BČDD0L!FüWkôŪąKĨ8īÔĖSȎÍŋIf#{ī,uzŦˇ˙ˆŽ"""""-/ũēũ‡üÃí-ŋ ІƒõDß]˙Đĸ(ūŅ8tâ˙Ēž?˙Ŋ¸­Š@úôCŋÔÁ‰rËŗC4<š•tĐtĢ]ßŌAËpîK˛C÷ũŋ‘ģK­ÕÆ`?ÃKũtĶ‹A„û‹ÄQ3šv\ČæS“™,'fLƒtų§‹¯Ã^ũ!§ūũ~öío{ ; äWũîŌÚŪ’aA´Á Nė ̈́ ™ÁPfÆ|VõíŠ!™†HÉŪO˛xœ~?ũŖ‹¯Î Ūū…ûÉsĻÚøA¯į0÷T\=íî)>ĶĶĒMU0&åü&šf„a0ƒ ¯˙t÷ũ0ũ×ßáŋūƒŸ[i}UKzO ‹ē'DĮž‰ŊŅqMà ˇĨûJŠĒč5Mt˙øũzīū‹Į$õ}ŋâņĶzCOė*ĻŲbÅÁ8͞o´ŠļęŠqiŊ.×tLtĖīUT[ô˙ú_ÚŨ+d˙Ķđ÷ū×ī˙Š÷’p¨¯û§˙x_ÂŌx&ôŽ;oiY!ęú'Žøũu ¯ë~ÚwĢīútŸŨ~×Ū°†īũ§_åØWKmW ¯ļ›íZOaí:CĶ}9PūžžÚļ*ŌÛ iwˇžˆŖ´‚$īôHāģũķËķ××˙¨Į_ōČëū„7ęāĢõŊuúa„iá6ĸ“b¤ôŨ7°“kWĢžļŽ­?ĩŗw˙īūr{ûķÚ˙æŖEÃۖü˜î]?ûé:°Õ&I&h;MÁ b‚M„ØKõ}á¯Ã[ v—ũ˙kO_Ú~ūēŋŋyīī÷Â˙ÄŖ$flōa @Ė8D1´L&ē}á M5 W'ąIĻÅ1VũÚk¤ģÚ^ļ—Ũwä3ūÂ0ûOķvņ(wa?øˆˆˆˆˆˆˆˆ‰PEāa4Âk &Š7MĻ—i¤â“^Ø­6ļÕ8ļ==ScÜö•ĨŲáĒöĢ{Ú¯™gqåYI‹—ĩá„Ōm'iĻÕÛM1IŊlUŌtšLiÆÅ^Å^‹vņ-Ř~vđPLČŠĻ˜OˆŠB""H„Õ5L/kk ×m&Ō~¤)ĨMĶcŠj˙v— Ŧđúˆˆˆˆˆ¨˛´0`ƒM Ļé Ԋ:kØXal&ŋ ĐpīēĩËBØčDDDCB#D!< ũSīUĩōši4""#˙įeˆŠŦEGŌ˙ĒæHūÕúŽŋŧīAÕ]W§įWšâšŪ@ŲŅÉŦĶ:éĒ•Ŧ‰÷Ë@ŋéø ōv0A„0A‚a0@ 0GA“q!ˆO f‘ RC"%ķ¨R5—|3ŸĄÁ đĻE Á Ī† vĶôXī-;F¸EÃZ,vvŨ5ˆaXMđ¸(E¸a E¸ndĒ?kĻąHü2p†ą”ƒ1HˌÉP2@ēę(‚ AÉ ĪĄČ4Ų ˆŦ„™´¯ú7ȎĐA´ž›i­–ƒc 4^N˜`• ŪA°ÉȔ3ĮÃÂh21ÂMAmCđM0A„ –Îģ&ëUĩ´Ķ°ƒ'Đh?N=đ“¤é;% 'WŌē’Îá’ĘN“‡ÁŌl2y§ŅvÛ8Gãi„ovh"Y“ÂyDL 6A°ÉÚ PŠ i‚Č§-7Ļ‘8Úŧ+BC*6ŠļßúWíöē[Cß~ũZ[MÕīũ=6ˇ¤Û¸(OøiˇJŠáaˆ íí´Ü-Q,hžS čķŧūŊ×ÕeÁ Ánœ2á„K*ˆÉĀé¯č5¯kĩTúuŊÕė[ũˇĻ÷ŒŒ˙‹ļŊ†šéģĢÛ uJ)šŋ¨D]g`ōÚs‡uöũŋĻXëjƒáéīmÁ˙’F?x˙ Wøûî˙˙¯Wđá”&îģqÃMÛßik^“ƒá3bBy.#‚?#8gčŒFŲã7ûuÛW8~“ˇqí'÷ĻũĒëųy5ŋũ]‡ūūŋ˙& Oë†?pûÃi:ĢM÷ƒ ”&Ą; ‚hz ˆi§˙Ãû]6ŋéĨũ˙ųb-p_ÕčąOĖ+ū˙˙ũoęžÃm5Ø>žg|ÎÅh›ęņ¯A*'šžŦ$öŋm{ŋôØcŲģIFõ[ú˙_˙ҝ˙˙ė?˙ī˙õúš[_mvö´ŋ˙U­‚W“|Τ\$ô\}úēØsû^øãî×ũ¯û˙ü%÷ũ˙ˇ˙˙ûë×÷× õė?o}/ŋôAčMûmcNØ/õm“rOm.Øđé_ú-ÛT‹ū˙˙ũ/ūŧ7˙˙˙úūN˜™Åa‡ß‡öö´žÕ/†—ũ~Ķ}tí4ī˙†÷ųĮė?ޏ[ø`žÉūĒÉÕ÷å üĄûá˙˙z˙˙ûNøøö6´ž0‘ÔO†—ũÖę]ū+ÚÛCīd ëÃ|ęÖũ|¯ũöÍk_kũ“¯ē>›ū˙˙K˙øÕaö×}ëˆúŋD[˙‚)úņũũø{ū¸°ū÷Į˙ûkÚļû ļŠūŋÚôëŋî—Ũ+˙˙Ũķp}ü7ģë$éü ×}Z}ɏáYģ˙ßë1iūúŋC-Ūˇü0Kę ´Øi' '[aĨ~ØK^Žŋēö×˙˙ėéÕÚ[áõn‰ÆØatŽ;ãûXz÷×ŋo7zëEã1ũˍvÅ-¤ÆÅÅlTC˛?—īcēmoėíĒĢÖŨz˙]7~ēX}×dzŌ øƒb“iVpØėŽi/o×ę¯ûWO™ÛmÍĪŊ/A„Ũ8ØNĐAԈ=ŠiŠMjÂV‚´“6Ō´Ø0’×ûé…L-Uà œ0’ŅãWŧÖúH)ûûiZ´Ø´ëb“M{ÚáĒ߯ĢwöģvgĢĢvž6l&ƒ$āƒXa0šh5σaE*)6‚lRvÄ$ÛJÂ÷ÂîlRaƒ“tĶtũ´‚ 5ÛH0ļļžÃL&Ŋ6ĸœ'ˇ %m!ŨĨzĻÛ *Wl<ņjÁˆˆˆ†0„A…-­ˆa37 ¨ŊũSIÂMˆA7 ‚ P$>äĐDDFMâ!œpšiĨ…V×Å'ǍB-ļ)8؈^ˆŽ""!„ČŖÖô"!™Â3‹íí>÷{I ÛKIÄDF„DĪ}“Xė“…~îŊņ & ņq*1 č °Å~ ˆˆˆ•3!]„Áˆ”o„#>Õ ĶQ…õÄ=DGaWøØBÁ?ßM; L ã‰n¸˙üˇ=–ųŲ†vE{)nC†#l‚˛)â¯"Ö‘›5'Ë@oļNĻĄBa0S%ú&ôxm4ũÃģģûéë ƒĢ´Ķ$ßr¯}ÃģũŠAĩiéß˙§˙ģEŋŗēŅU÷;¯Æō˙üzúyÚļrĄ,ÄĢU_÷Iw˙œ3˜§0g‡"'r% Ÿ#ĖŨ!>xķÕۚ‘˛3~ĢnŋŽ?^ĶJÂë|4ÕM8z@ͅ3ä!rS%äxK‰āpĪĐí}vŋŽß˙ ĸŨËz-čˇÛĸĮÛZ,vĄ]ũ<&š|4M4Đ~20D†d*BÂ}fĄ“Ši<ŠsA/bN) f‘†|h‰äSš r?2BGHčh2ƒ$#q™ŗ$NŠ3fxŧV‡^Ōȝđ÷V†yvūôL,wĸĮP´L|ąÚJ‹ĩIĻÂa´ƒ@ũ[EŽŅo nô[°…Ü4Â&8a4ÂEģ ž˜  ē4A„Â`˜&>ÁB &WËÂũaŽÁ?c.&û]+ų8|^†É=&ŸA:O-蛤ēj[Ņpá^ČŖØč č'T°H&Ķ ĩl#em m‚A6†Đil2@UF†Á#;9­„-:Ą ~Yd šj?útŋßū¯ų8ĶēØãčZOüvNĶté;īJᒾÃĻŌpÉB§Ĩl2NRl;zM´A°ęØdqû ,%áž3„i›˙ü:ëoūĨ„˙õč™Čˇ–ũxĮpŌõũŧÍ;ĐoŌĶũ˙ú}†ļŊ WũT˙I?ėœûMī4áw˙ęŋÛ˙ŋ÷ī~—ęŋũÛnZ<°–ûÂ#dŽŲĢ˙ÆĮąwēđßĶO˙ĶzßkŪ—O͝˙O¸C#/ųņ˜n}w†û˙3_˙ûoūŨ/ë ‡˙ģʇ„ē~­ˇ}í/íĮ!âŊĨMī kŲq:ũą“ũoÅ˙keđØOÔŪ˙¯iũĨÖžzqüÚ&đÛßũōcķ™Ā‡‹lä™ã˙†Ãīŋ†Õ_˙Ōø{˙ŋÉB~ģw,pŌXģuāõaĨĢ~ˇ]¯ao¯ėܖņ¨g¯Īö—ˇ ƒvļ?„ū.Ø{ ûrõōë‚ī¯Mōë˚Á~˙ž ßĐũ;‘Šî?Š‹Ō‹×ŠãúĩÂjé˛c´Ŋ°žģÅĩŌ~Ŧ;ÛÂ.?‡ū°‹~Ú_ÚU¤8EŋÛé_˙Úm<&“ĒBâÚmŠn)ZV•4iĮkuDSi{ū×û ~Hv ė=ū˙Ū‚˙~˙/Øxŋ˙˙ۃ šĶL' &ˇiϚiŌ …6˜¨Ú]Ķküœv\=įú2-ˇ†ôŋČEú_}üWú_‡×Ø/˙â""""""B@Ę đ0ša4ÂĢea2ĶL)Úi‡úwßP˙õ†Ã{ë÷Û÷úû¯ßíëøo:¯Įū""""#-â Áƒ(0ƒ*`˜MWū=~äö•Õˇ|?˙ũ“§']“ũ|SÖöOųBë÷×÷_ū8ˆˆˆŽ÷˜˙õK¯ķ4æ÷Χ˙ûĻÖ×m-}¯§ëĩ˙Ī'×˙˙ū›ļķEĨv§ŋIŊ˙žõūÖÖŌín×{ĢĻ×´ŋû}/úúũ„mÅxUŋû°ŋé­×ų…iũŨ1Lią[kí¯PÁ-†´˙õūë˙Åm UOHŨa.#õģ¯NŌŽ.ø6JšēdXwŊ+ąR-Šâ­¤ƒ8.šnēūš† ‰Žâ´!]z ' %N:doAĻÔSMÚĻG éŠAī´lŠôpÔ!„h;Ģ_äš‘Ņ ŒČĐ˅' kdtJĐa!ͤĶ$ëë( ÜAĻL§-Jƒ0„L&VÂMĻA…mWq šĻ6øB „4 ! đ‡ˆø!q ŠKˆlR€Á e[ p&GČčÂ"\H č¸RņÍϤŨ5á2ĻˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆąL4ūĄԓ†Ã?OĶ[Â`„DY°0AˆCĘ “Œ!c‘x¨;š ŗ.‚×āÁ27 ?ĸî‰ķh0™;rPŅ+a„Ō%ĶJdnŌN­5†ƒMv6‰b.Čāf ĻÁŠô„0Ck÷VëŨ m&öAéåۚ ÔˇsA8-Ķ%˛ģÁģˆ‰“Äœx9€äp„pČ\ėĀ/¨ˆ_ˇ ũ÷§}.Š[÷§}ÚtN)˛wdí†'Ņ2“ü›(ûu×´tƒūũkĒũ{ĶŨđ߸Øúûŋũęë˙ļž×ÅGŦl6ģtßúöŋëžūŖđĮū+üúē÷īÄ0žģÁ.;úŊŋžˆã˙[û˙=†ģņ˙ųĄFÃũk{ôØsßü{ū˙§ˇķŽæ“\qŪß˙…ú‡˙˙đßîē×íĨūüvõų1ū—áŠ9Ûū+M/Ã{˙ú˙íč›ô˙­˙ô[Šäį—ˆ6‡úōqøšūŌ×oī×üˆßö´Ÿ¯Úëūöīßúõíū¯˙õū$F÷˙Ķ^BŲ_™ ŗ QÛÅk+ûVŌÛŌm_˙mōuīī˙o7˙_ īʐm[J×mRl%i0˙ĩPŋ]Ų{üĶõoKŦ_ī~ž2Ü`(6ņQL0’l4)†ƒI4ᭅM7â5ģU‡ÕéZás;Ãē/‰÷σ˛~…Đ4Å'˜QLRiÅ4ͤŪĶ[ ÚKĻ `’§Ģ ÎŌ•ĩ¸‹^D rÜ]†0Š„ a¯jŖtŲp“MⓈ¤) …Z¯ŧ6w_Éņoˆˆˆˆˆƒ.…[‚do™s]UpHDWßîžÚûŧDDDDDD¨ÃÉĀ& ģ¯[WŨkøˆˆˆúÖŋj?ōc0Y@ĖÆxĪFá i$ ƒŌ0D€š×0Î QšfĖŖ4Fˆd ŖfƒĖ ˇ4"x¸ÉÅ4Œ4B.=Ŧ‹Žŧ ü&š`…čˇa ‚&8`˜&Ķ…Á4ĐxL û0…ĸĮaņÖZS31éčØÚx‹Fˇ°H&í4uBÕ EĀ0¨X`ĸæ‡čÖĶ Ú ZųSieš Œ;ų“oL–å&Ų,ęė–iŧ2NĒÆJîČ⓸dnęFí&÷Iä[û#⁒ÔęHĘ:%Ä820R_"‘GTÛXa>¯tĶZ[WûVŋCũ;´ŨB øN“úVĶ~ĐüC}ĩÖŧ0š §d$HmĩĶ}[ũŋßĨ_ûˇĶīĶôë˙ĩ×_ĸá }“‡m(iZõÖķ°ŗŋßW×ø˙ii˙Úú˙˙˙‹ø÷ų+¤Û^ƒjÔŧÔĪwÛúû˙ũē÷_Å~ŋŋūŸ˙˙¯ŠúĶ~ÁŋõÚ6Šu´í–fŋ˙˙Ŧēũúū˙˙˙ä°Ĩ~NĢ‚ųđ?˙{Õŋü&ĮÖöįŒž9˙kīũ„\uū‚-˙ū˙˙ÁĩØEģūžŋúö:~Õ¯v×;ŧ&`3§˙û×˙Ō ˙ė ŋ˙ë˙ūŋAWūŖ˙_ađķX§ČĖQNˆ\Ũ0×öũ4×˙í˙^˙ôŋ˙a¯˙ßũŋkč/ígwßꁄ߆pĖ ‡Cƒ5ņšŒĐ‰ČœSS'3R5]ŦÃŨ÷˙ö+˙ôŋŋë˙ö+˙ūŊĮėž’žŪÂ…NĢTú ęšĸÃ0Ą(ļ3`ö:ŲpN1˙÷˙ßõûūŋ˙Â˙üĄk~•˙ĐDßøĒö\Ņ—mę­Ū!<$XôXíU4ô× ũÃĶZßÖûūäëíŋ˙˙Ņ„ŋũúNO˙˙č/ôˇ†˙WJäŸōOyø[á÷–ô[¤N¸hˇËz&:k–÷ü/đĢ×ē¯íĩ¯ŋ˙˙¯˙ĩÖŌŌ˙ũ-|$Âá˙ũëŪžē~Æģá6“¤˙NŨ$Ūû˙Ëg÷^—ë /öˇļŋk¯úūØK(a~×ŋŌ˙&ž˙¯˙˙¯ęãĩÖ6+¤á‹ę˙ē-˙ŨúXm_ģb•Y8†ŧ4׈}¯Ŧ‡WöĖ/ 1V”C¸?×ũy ˙÷˙¯˙Û{ũũŽîˇũ×˙6ū§ &“TÚģŠzią„lŠ;Ní5¸4ĶN4ĶiU $á7˙˙Īũ?û˙˙˙ëaė7¯ũŊ÷‹ū×â“bši°“MĻVĄ‘ާM&˜L&ƒO Ļ&› ƒQR8VÂOõū­á;×ŋ˙˙ŋukū“q˙ŽéŽÅ|ˇA‚HDMˆa DDD0L!eL&Á `ƒL"tĘpƒDi-ÁB!5[[ūøVķŸīz_­˙wíĸâNØîī–öÚ˙AŧiĻ˙B8ˆˆˆŖ""""#ˆ‹h4؆ūŌģ[Tīí[ū˙ģŗL:ڇ­,~•‚<_õŨ‘~Õz¤öČŖäPôͰ˜,VšĻĮiwq˙ɏTøģéēÕĩ´íéēņ 0„ÁIx‹ ëύGZh4ė1H^ÅϚ{ÅDiļnĸâ/wXąÖ× …Ã1 Ŗä4ękahEÃN¨2u ŠŠn+bŗĩ$G‹÷ä,[Kâ"""""@ Éš!ĶN 3BjÚiĻCĻœė´2 ŗ†_)×õ`ū"""""2Įˆ2ƒ&œŽ0ļƒ,p@ÄDHd`äI’sˇîžÅ'Đ@؈ˆĐˆ•ÄŅ!˜Čņs.Ą˜¸A´$ë¸)—‹Į$3+&ƨ|5 ˆž>(ųŲtJ˛<ÕAĄ –3‘øė‘H0TŸö°˜TĐ1%$FGļŋínꩅ ‰ŧÉ8Íh”\vŸtXūđĩŖÍ…øų „ōĻ‘c§mŋIÁ‚ũz„ņH}ūŸ~kpSƒ>ČėÁšgČņY.dr7ų“´˙ũF›á0Ą‹ §t…Ļlüˆ r đ‹dE†ƒ33<žB8f×KįbēŊxåģô‚’ké§n°Ŋ‚ †hA—?!Ī#˛q?×ė“““Č`wÍiéū‘1ėģë´ÁCîEßĻC__ũ6G4›dá;ØūûûQī˛֋ąHˇl'ũ=}oŊW[Ŋ|5ÛTŋ`“ûdüœ~’’Ķŋĸom HŲž2@Éķf‘‚‚!õbåȐ):ĩiĨ[V!Eßō*{kÅė¯ŪJ2!˙žĸ÷˙WdŽdRt„iĐjĶŨ4ĶžEiϟm¤ˇßÅûjĄ2w×ËĢëî×Ōúá?‚a$9öƒ …íęÂi´;¤Ø¤ÚAęœZqvŋũ?ūĄ˙úū?đB"""."""P„3Ą2OĻÖû ö7Ũ˙õ¯ü ŋ~˙_ū"""""!‚šĖ䇰“˙˙˙ôŋ˙ųu˙¤"""#ŋ˙ŋē_ũ˙ë_˙(_ßįU˙˙üˇ#AŌežĶ<Ėōŋĩ{úõûŽŋ˙éã…LŽ&3˙ÚūëęŋēŲE˙˙tgzá0ĢūÚKŨÖĒÚé7ZzKíŖšĮŗ´*[ĸß4(–>XôŊn*öE‚ŽŌ¸dpņĨi/ûf‹ëXTė'Ũ:솤ߧjŌiŌlPL!ȃ☤ũŽŠ˙ĶMU^ļ]ą‡Ļša­ZL4ƒÃ „AĨl&Ÿa/øģS:xũzeŸėDA‚ ZjÆŋņ"5˙ųgm§‹h6ī𾋾ˇûoúˆĩ dYäB=˜ÎFˆÚ%Đ[] ß˙fȸ­û !të‚`„C$$Ã8Î ™ÁÅ04CO“×{iŨĢaüaĩũ4ÕmĶ á5[bâÖ.˙˙hÎŅoŅo¤XīEŽŲ<ējėXdAÄąĮũŲ8' ’rOŽūŖ˙ė:-ūÕ´Õ˙ĒÕ~“Õ‚CwäßN"" ĄÁ(pŋī[×_ąũĶŽ""?˙˙—Oü´ųd×˙÷˙÷¯ÖŋūMÍ Čâ—eã˙õ¯á}u˙­ŗŽ""$2Iu/õ˙í~ŽėåŲëũ|L´ČŽ~1â9ȏ‘ĀĖ?ũ˙°Ņcĩâ"×°—§ģy¸DDDDČ Ŧū^?‘Á ‚æđfūŋ÷qLZqVÅlzÚĻ"""#įjˆž_#ĸ>L™Éâb*Œ™äO;‘LėČüDDFײKWiÛųØ l 0PŠ‚ Ķ_°šä;„Âļ“b7 ŋOë˙Đa4Ëųa5ōG¸wpûø~"""#îņöœ0šĘāG˙ɏß‹b:˙ÅõßųŪ§¯ßû˙?˙×˙§“ĸ@Â!&E<¸ōŒ \št IŒ#Ĩ›”ŒDæuD„lΈŖ6ΤF†HŒ ?ÍA '.‹ĮEéęŒīEŽâđM:a0¨0P@đƒD&Pa ‚i‚…0ˆ:€Â„ÔČ´ŋ!Nh>sčSHˇß¤á–pƒwĒMĄhÖŅyEÛ ‹€âč!ĸá…aB.Eå !Oŋƒ#0Ëú¤úōWÃîÉ]&ŌŌôv-&Ü28nēk°É[WDႄ ˙~œ{˙MīŌ ÷§đęܕŧ2PŊÚw ęÂút¸Mń?˙ß÷Mū;Žŋ}=?CīWÂūē÷]‘^‹‰PŋüŸėvŋûkŽēõēoëũũôŋa6‚uëõ‡ŧWūū+īûCūŋâŋīÖŽŊoäZĪ%?îÃÁwûųĢáßÁđ_ņ_­/á2p5 ŽNŽEâ+G"š*Eâ Ė…Â „[+>ūÃÂ-˙ė?_ą˙˙…˙÷Â&?ü/¯üˍčÃsŖxFāīæFÁ M0˜N,‹ddS^gˆäH!G"9/ oŦ[Đ_øo˙/_ü"ã˙÷H/üúžģÛč7÷Âč7T˜'.aĸäČH´a´l60ëéč27!ܔ\#@Ųío„ŋö˙ôŊ˙Õ/˙ÛTū8ú˙{¯¤?ÚM˙Ũ$ũ„oŌnĒūī—'ę¨Ãr,ë aŋ˙Ã~ßĨ˙ûĨ˙û’ūô˙ë˙¯õûø×MĐę“˙zúŊ÷ĐnDƒ˜¯ ,čƒz_^˙”+ë˙­R˙ū˙éīĢũ}ëú˙n“/č{ūīÛ¯ÂMSɲËņÔâõķ4˙jŪŋu˙ū˙Ŗ ˙¯ßūŋāŽ?_ũŪŋ~Ũq_#ßîöú#~ +!‰ũoīë÷ûK˙u×õŋ˙ÛU×÷úL%ō€ũ‘ßũû`úö­Uá˙˙ô8ǘŋ^Ž×_Ŋ=Š´í{Žžī˙Ķ´ūī_ņâĸŋû˙û“ˆ|̰zŋWūßūõ¤äú&ų+ū™ámYÄ;I5´ĩv-ˆ{~•—IÆĢ¯rCģb˙˙…üĀhīũM†wāÃ˙”ãV˙˙Ûũ:t𾰅CJ¤WąI í š „Ôˆ?l$ÃJ4Øvž¨5ļEza6˜úo ×0Ų?ūë˙č7 đo[ȡ6 §6zéŋë˙­'šÄFuB>ÁɄÂh0ŧ1OA É8L&°Ä&)¤äp‚vš Sm„׆IÁCî×úü„ö/ũzy€ü7ëƒt‚ ”ô˙ë˙ˇäyÄģ˛ä]ۄÔRÄDDDDDDDG ÂaˆˆŠ6J)Ģ ;˙Û_Úlˆ?ú˙ĢņėuĻģ_ŋƒõëąM4ˇHC‹ Ķb˙{Ûõü/kÖAßĻ蛮­ū×ÅėüoéļđėØá›ŸGË]ÄMa_˙a/ûKtĩģ^ÂW\Ám{˙ūŋīN•´´´ ‚ÕD@o­éˆR€ũب; C [imĢ zv××ҁŊõ˙mˇ†l$Xí{ëQˆˆƒ3Ž͆'˜…(B؄ÅU6ĖÅgˆ#žô˙„¯Ũ†ģ˙mæĄĶŪM•!ÄDDDDDC#ƒ„D4Äđ B˙îÅJ/ļĮ˙äė¸÷ąRŨ""""""C"būŨõé/}ˆL*ÄFßĐu^^Å={0_ŗīƒrlzũˆũ†˙ÛDĮv§$Œ˙˙ą&í^„qjĢßü\.Jâ’[Ō2ŋˆŠQŧŒ}„.5ø2'‡ÑG!ŪŦ&kL&ēōĪ‹ˆˆˆ™)Äqāļ Á"Ŧ.DqˆDDj•6M„Č'ÄL“ŗc<GÁ­PˆČ ąČŽW–š™r)áBvW5¸ˆFi—°ĐvpË.)x×čŅ O´"d§ˆâ‘ÁĖ GdpeB"A¤ žûíSâ"""'e(†d}?Ũ&…‘7ÄGˁø”§÷úĒú0ü†‚khCVŖŽNĘrš?Žžéé„ ‰č!´A zˆb 9ڀ_üĘ´ē_ŋė‰Č ØAĐČk+Šfƒä y Fu"FlĪĐe‚D@‡‚D ĄD´<2= ÃLÆĒ%â¤ÂŅ‡›d1”™<>ą˙öˇ d€l$i 5Ž€æŲ‘ōčēđĄ„Á ‚a0ƒ „ĶP…‚…0ˆ?4Ņc† ‚ ÁôPĶ#x a4 4Á0…æßú¯žÕ„DD™ Ú dä% 7IÁ Ұ4]ŅĄÅĒ5´0ËĐŅąŖ\! ƒĄa6‘pCi "Ũ„4lhh×TâAĒČg2ųČäʂNBŽO˙˙ۃ(Ō6Ã\äDGtn?ŽČ°õŌl ›d°JĮM†JŪČí†Ié6Žm‘Øžá‚&˙FÆH ÛŽ+táÃ%| ū"""""$Z#ÅŅ|֍Wŋéöǃ$a@m° HaŸa?é{ĶēŊ>Đzoa2gđŠē§ œ'­ūŲ;_N¯Ķr7hˇyœ\wfr ˇ ­¯˙ũzŋëíëK¯Ģ­×¯ÚõēT¯KĮŋŋ~ ›Á CœDDDH]Õ=ë~īĩâ‡ü_˙ĨūÕ˙īŊ_ßU×b˙N“öņTG#¸Ž­¯zũņU˙¯÷˙ņ_úŋĐøņ_a˙ũá’ļzˆˆˆˆ‰ãæG2;5#ÅÃæškü–3ķ û˙…˙_m}pŋúôüDDDDDGü"ß×˙zũīā‹˙ũK–2˜˙aĒ˙_˙A˙˙ûŨh/˙û˙Đ_ļīü˜åŊ˙ú_ß_ūà a/ūßtŋŌü7×đ„~˙ú˙˙˙úLW_ūŧz_†˙˙˙õĨŲ:ĘöNŋzߜe÷­Ģ([”-/ß]{˙úūÚÚ˙¯˙Ū•˙û¯¯ū}˙ũ˙ũö“ia/í-é;˙û­í.]˙ęŸ˙ĨôŌė&ĮûŨ—_ÚRøkūÚôà l0Ŋ­ũöiëũ´–!´Öēk„“m(;bŸo_‹‚“ˆ}Ã[Uû_˙ƒdW´Â0˜M„ƒM¤)Ģ Č¯AĻa6( Úki6Eza8 œ4õa„Ŋ.0Ĩa0ƒ0ƒ(X!›‚“ᄯ†Âˇa0ƒ ØMPg"ƒšqKūeč„QŅMĨ´–ē¸ˆa ᄾébQ‘ø ûÄdĮ ė%B5X¯v×L ÃĶa;F˜ˆôá˙˙˙˙üŽ”E44蓴đƒËĮ§IëīÆŦ€ŌÔT\Åå70æō|ØsViĮœÍ ‘šf™#(¯ö~4ĖĮ§˙˙˙ŌuŋŌ~ģ×°ƒ=v˙ŋFwū3˙8ŧ~æ˙§šG×üũëûĖīÆ˙}Ŋ=eķôĖö˙ä+҇Č{é_!âx_÷æé?ĸnũ˙ūķŽ˙WßũīVũ+øAßĨĨÍ=!{kÉT˙1˙o¯ĒkUŗËjÚõĖ#˙3sō~ö?Ę/]˙vģ a„ŋũ÷û]ū˙¯[˙ĢÅEĸû×īÚËî˙¯~čiyÁ~h?ũ7˙ûÕ_Úļģ¯˙Úė &˙īßđÂīŧŠ9܂`kà oūh~|Gųšúä>Å%{ÅļĮą[ĸų߇đß˙Û˙ũ­ũöDĩŊ;­­`ßkzĻļši§h0…ĄÂGģīŧÆüDDDDDDDDUá‚M¤ęŋ­ŽŌoâĶ ãēâ &E{L|A‚Õq×˙˙˙˙˙˙ūF‘°ÎG Á‚8m‘Ņ#˛äGˆų2Čųr3EŅŅ‚.ČčÅđ„DDDDDDDDDD‚ØlĄËƒw(rnIČđ§;”9 ×&9C•gîqʙI ąāLˆˆˆˆˆ‰ œr ÎTgĄMĸŖ˛ā%ƒDDDHdĮ"9c‘ ¸#rŖ˜rüöPæō‡)Ęk ”ˆčŽˆčŽ kˆˆˆˆˆˆˆČˇ!¤åBŽqËâ¸îS”9Ú\""v¯>3‘vG ŲˆāAB86‘ĀđĐ`ˆčŽŽˆč‘Ä#áš v@đÚDDDDD†H9C•Bš DDDDDDDDDIR.ÆŅtC”9œ§'…Žn* ãŽl. ™Ę x4Žqņ!ČĮ%đvAÄDDDDDDDDDDNĶŖhōęh)Μ§(sqĘ✆qČ98ˆˆ[ BņđŠ*ttˆâ—Eō:0ˆč—DtaŅ‘Å#†i0fÃ‘ĖŽfa— °O—Ÿå˙jĀXø<5üžūO €§†?ĀSÃāŠáđÔđxjø<5üžūO €§†?ĀSÃāŠáđÔđxjø<5üžūO €§†?ĀSÃāq!3:U\dø<5\<0˙<1ü7]¨. üžūO pũėŪķDüäۜ1ŋd,(hĢ$ žĒĪíā˙%`s^4īĐ×@ŋpūÃC?00€ņ%ÒU˜] 02ų%ŗ‹‚Š qj‹K˛Ë^k`y™Ā&Ģxâ膁>/åâ_åņÂįūKÍüš€g7^dÉįÆe ō,ZŠ:Ž=^úüyĮ͐§âOŋxvã•øš#tZˆįŅRū"›‰œ"Cžßøe˜%õWc^Dk!āüAcQŠŋˆx‘āãû—“U­9ķęøˇ扸&ãøG?•ą_…OŲÕWk¯ĘTÄTŽwqåâė˛8úQ$ŖÛlö•Ā €w –A^y|,nX_ |¨XĨQˆg¯ū.Ŋ’ÅásQąëčVķOõĩ%Ģ%°¤'‰2XGÁ'?R:ĀĖÂÜk€^Åâ`WÔÂ~WĮ˙JācøCfc˙­āŧŽV˙Æ>˙Ę' C0\-ce:Ø ô$0ēbüsĪņ đF×Ņ ‹Åŗųˀ­›P `JC‘ģš`*“™Jf˜h ”žXˇ€/&°Ģ ‹žOņ¨ |’H xԉRÉ [øuđĩĀ3 š~°Āg1‹°ür`”qČŋp&˛U›IûŒŋ—~ˆÜ×^F"Ąķ Ŗ*€Ī˜p†EĖčWÉgú\9jŽ9jÆÄĩF\<•}‘‹ũŌuS&a˜c™„P&ņJ(Ü}nMaë& x-En ĒKuĖ…ĐŒAų=ųB …ũȚĒUxI3åŠĩJ÷b鲁H?0ūO ”!ŧP Šŋ‹ÁäŋČ?' ¨üZæÖ}sû?Ā˙3Ālā“ŸŧĪFUÍ˙)Xåg‹ÁíîŸpŠ­šŅ†Nąsjš?Ā˙CĀ”ļō3úŋ˜yųĀÎĻ˙ ÎŅws3MøJ`6xĻđøyĀ‘„úf q‘ĀģKŪū/Û ~đˆ6ú`€˙ÔŗDũ20?0zJįQĨČۖqX@Î6ƒŽGÃLšž‚DôķÛtŪs„āßëXnˇÉÎt]Ąg :Ã5ŋ?á&ų8 júĄ^*Pd=.č˙ū~)…˙ũĀO,Õũæ< Ę¤ŽŽĸ; L.øūZ0?g~‹\BhāûūB€%ƒeAۏ¯ō€œ_&°øV\k ˙8øYwą 4Đ~V æn lû¸ W,Ä]ņ…˘Īg—ĖDÖO¯fú.–õÎ\}ĪápQÉųüæĒž_ p™é‚ËrĮįõÕÆā2 ŗ* —¯L‚Ëę WE¸\āūԁÜÆ î˙û_›åî“ Ēūŋøŧt Ė¯õ>üƒ§/ū&ų&ŅeuW˜ā—Ū$˙5Ā‹M/¸Wė“üŖË&˙ĀĄģøë€:/ø×Ĩų…u*s™ĀôŋxŠÉLōvéĀŋ˙˙ĮĄ^ę]Ė.^ú)Ž.=Ã%—lx‰Āėōņāš€—™^>°åõŋŦ?Ød¨ĒŽéŸœ|—ņ…ßöüĄļ˙ 9Vsj ~*Đė›? ¸=#°ō‡ß‡S܌™ƒ¯įš™Š> ū〄zÛb›‚L˙ÃøĀ¤ų“]7p~Ϝá$f!üåĶ›MaĘLk„đą@ w°”@lĐĀØF] l$LËŗËĐôÜĀēô˜ŅFLFĄxôŗØ „Ķ ‡ú ˆi!ÎÕ!$иqNžn`4˜I`-wÍdܰh›Ûh"°ēĄũõƒ^`(!`ã×%ŒŽĄÆÁŦtp"PO äú˜[ĀĘ ,%Œö‡S×Åųų€‘‘Ũj€tĻÆ€ø~\XĀH†Á ūT/­@:S,™Ėņ‰Ücx:piš˜Œ=؁~ æj‡N`sō&œâŨ ͂˜d` ŋ^É=âė„đZt<Ã!#ÚŨ“ ,`ԛ#•m İœđŦ@4[´?0”@|^k"ū8 ~2šá4 x?Q9/0Æ] —äqųnÔž[¤85?X°Đ@ņf č[@v:ãāá$YĶqāu ˜H q¨€üé$`ü‘ĀĮ ŽŊęIũ> ×Ęx&đĘĘy“#˜›ĀZ~Ō.äkgJŸčęŒõ37đFž6?0^öËCđošh–D+“ü§îVȆđ 9ĮŖFN`|8°ę '°É–)ā ađz¨0eję8ķXĮyßök m`Ö j{ũĀä( ļ‚O–žxM1Ü4{Ú ŧŋįc0—Ī­˜0¤i‡uũČĮōPĒŽūˁe L`*‡‡Nl ŸËŦV YĀŨĨ⠂ûēXĩ€ę“ PN:5ØüqPÍģåâ6°Ļ2‹Õ㓁Uō^÷Ä`I*ŦŒ<Œ d TÁĖ;@Jgš#e%ų@ „Č–ƒĀėk€ņT``™š‡8x/ëų•Gm 1ËPeˇ:ĀãŌA>L@z)‚_›9ŗˆ…hČX@ژ ĐĖ āã18 äGŲYī@s`Y-'Į•̧†õëĒ=v:PW_Ģ_]@Ī <*ÃzH z*ú ôOR‰ŋ}“œhŨ$Õ!ĀĐ ŒÎ d- ž1ņöŦŒZ@ĒXüø„Úx’ĩ ėŖ´ņ'#LōO†•ņ)y^§}LŒC|00ŠN#8ģ`Žŗ0]`Ŧ€ņ 0>7Đo€ž*¸¨đ[ĀÜČnĀØ8Äšs3žĒR@9KŠä}@īS€eH!o¯†€Ņ}Yė<Č>¨ēŖ4@ØG%OaØO”ôíĒÃ€{n†ƒ€Ė¨¤v“3OˆÁ> û2`` öɁ˛ÍN=‹í Ė^0& |pA/ցd n ]‰ūÁĀB×ûj`Ļ€ŧŒž(kXĶ^ ĒŖVĀNCÎIu3]`e=•›éęf&“œđĖ1X6@hhPųA L_āęšø™ĀBSĒu/P7…1YĒ›3+K},đžˆĄl€ĒĐÄ@Ŋ8œg¯Îė‹Á)Ėöâ…,¸>Đ3€ņ8°Ķgá(`2XåąåįZõ›9 p<3Ŧ/ízô{ņĮ=Ȍ=ˇ€úæ ;đū [@io0ũĘŒZĀ_ ÛĀčc~AĀÄRŸP'0R@ÕVr Đ=‹ĢNF9N19,ēĀŦĒE(Í[?XROj8)9~ 6{}œ¸vCč9Ô™uÕŠBëé8 Žåw#XŲ@UĶÕ„ä=ÎĪäÁ0–@ŪË åø9€ö] ô€ø ¯´ēƟtŪ$ÜĘü ÔÜt€Ą<"%ØĐŸ0L}ųĪžz&ĀRîĨ2´r×- 5\ãė@<8û›S¯ĸ(6[[ƒ3߁K Ė0iéKĻäØVö\gôI#Įzp›=.žėąŸô#úŨãįęt°ÖÁޤܕĮCj%`ëÎû'6ĮĒ?l­ųĮ•į Āąp°–KI\00žl`ĄŽëKęŖ Œ°If. ˜œ|šP`*“ŧÜî6ÁÕ̏×ö{GķŲ`r°TĨ5˛ZŽõąá…ŨRwė]|ķ†Ā­Ŗ~f㓙ųD‹0nōæQ,ļP9A*ģ‡\>ŗvžé8`L1¸Ēr›ĒÃÄs\ ˆŽ•h`ŽløË~ö},Г@Oí<Ą˜ÔõFĄĻLØļÛŗOŽpÛdˇ, 8VŽb ĶYÔ5oŌ_ĨÚč4 “Ā{G~ĐFēhN/„\uˇĨcŠ‘ģÔí5 NfãQ`(Ąq1’XK+z7?b°NĀÄĘC§3øß×õäą ,iĢė\މ@OU=‘§{qÉcE(oúôLĀŋ0+W™Ä TŨņõķ`(QŠ€éĮß$đŅ {€ęīPļĆtŒō ĘčŪ71˜†ĶĄĘũŨ|PžbūėS€A ´Éš€æ5čK`ä=@ųŋJ ? HĩFHēg#@ø€p((Õđ‘k LṒ0'ĶLjGšļ”5@L ęĖĀ–€QEũÖķs¯FĨæMlĒ Ŧ$P^‘.XåThj7Tm hô<ęZ‘@8rO—€ õČ#'ZPė0-z ˜6@Ö×E`zVāVo&"`°ļqĨ€ŧØŽ˛ļ€Ų pÍåĪw‘lĪL,`ÄUũG°rŲ0Dđö÷ ŋūžxŠ ž< ˜ôķ^ Ļ1÷*ņd?GY?PļÎÆũžˆģ¤¯ö ģ ĀĘ,ÜĀTI[MûĶ€XųC§ÚĀ€zLvSލŋŖ1ś@ėAŠäú`._އ jX€ąnâÔĀ|X6°Hš9AR-#Ŗ˜÷==­$—ĸā4X4š'đƆMĸ8™ ßÔRŠ–û{Ŧ'æ˜0Q@ˆ‰3ķƒXž—ĩšq Ø<‹‡€;¨J pÕĸ>„āËĶ) 3€x”•…a°ēŽˇÆ§¨+ė9¸9Õ0ĩ+Ņ50æ‰ŲŌ@}„Ļ Œ{€ž ¤ŅömÜ+6^(PVNgŦ[˯€ųP†_|jšŅē;˜ôeåQ‚•5Ú=Āģ`L›AÕ[VQâ{÷e9™Ū uķ ×ǍęÖÆĮ*:Č |Šx}@Y͐ 4CLJfāú( ßŒ0Å­ä™ļ€F†u1ČÍŧSâ@Yũôc˘NŠ&^Ũl÷Py> W@x͕R@h|(Ā-Fë(PÖ°&=@_”ēX ũ׿C5› LĻKfŦõ(i€Å[1ŧņe>+]Ma- nLTĀĸ(sZE¨î⧁ė ČxJ‚_ÆãĶ€^/đĒäMDú6PÅāÎ€÷ ˜#p=ôM`<L™3O­uŦ1îĻÔW. 9į(P5&Æ#˜˛Ë‘n`ÕÛÅsļsēį”yŽZ9$3cĀp(û×rų#Ō |Uũęs ¨ęâ›­OÕay5 K`d!.:@Y&Î:3UHāŽâēˆxķĸ[ËŅ՗¨üwk`*Ĩd °ŌgÚ Üâŗí—ømēO•86?ö6 čÛ@]ŗāÖôÁĸČ_s旌8׸Ąu!Æw$ú͡“€ą† čĩ€‰öTp:|U#°ņ€V,ŪH ,ŋß˙+ļ´×IĀXŨŋc@ŪyŨZwʍ|†¨-ūMœ@¨fsƒđÆFtQMR]›™V”›‘ĪõÁŒáōTÜc GÉ$ ęM‡x/á•ŌSŖđb¤5uÔi(Sėh˜"01ß5€¯¯T}Öū ŨĀlHí$ 0’@ėÂ'é-$ėÕŪpG@¨C‚"˕OâYUí$XÄke^Ėw$3*7S˛v‘Tž&ķ%TęüĄŪĒENĘĖ{€šŦL ÜÁ­n)j’Į“DŠÄ—XŨÕņCÔĨ%m ¸ŸB5ˆęLŅĄ˜9bĐFD’¸Ŗ÷å!@Ũ&h°•YP@&÷Ü Æ°ą„Pōl"ĢŪTA~¸æTŪûĮƒĄĒޞ|]&Š X õ ÷5“CŠ&ē†wmiEbˇü‹€˜%ÕE` î z%ŊVīeÜ ,Ā”1•_WŨRĐs{ MySkŖËö¸W‘b̓;ęœ]75;Ų>udų§ņnžnË!`ÚÕa50YŨī:Ā‚5}ųˇƒĀŒÉĩ\šžG‡ëy§O%zJČīŸé…øčVÃ@Õw+@ĢߌWĘëÔŦ*ŪÚŖŠî8Åãī‰^ŅĀũƒ€ĒCcĸ˛7ĒÂŒœĀĸj7ãáqŸVâʅŒŒ,ĸ‡ŠTøYxÛĀĐn'! ?Ė+¨Hx+ėWpiˆ_–˛ÄųKEųĘŦĀŧéŗĨËŖvKĶPĮ ˜ãËö\ ÎU+IseŦˆ6“3ĘX˛Ûę, K:ģ•šë˛5õåođž÷đ°}įSĒ,Œi°ė‚į†cĀ­BaÕjÂĻßŌÛlŌAîĘJš@U4;Q)/°fV‡Ÿ˛ų\Sb­ģVā•áˆÁ^`!Fĩ>)fMĀöĩžŅŗÆņ4xŠP&L5åsđ˙!PŧLģ@ĖÆ—ęŋQˇ¸‡F RsNģĨIb Ū̘Í}(ĒÔd3›ėœ1ØÔ-™SÕå8¤˜€)F^Ÿ=‰iäōûkō÷:ØŌŽ2UîU•¨-`Ît]œ1€‰ų˛OˆG<ˆ%99ũĨ3Ą˛æū å|M=@Ōđn@Ŧ b}c¸†Ä"9]ĖLÕI'šŌ‹2Ä×˙ãđņJß!Gķnže'9Y§ėƒ_ħm"7f@Ģš#Đ÷@ËS€\^ūeAûŠņŊnį2 TII7ŧßđTā1AĢ~ \<đđniī?HĪ‘Ú1Č€s šYŋ"FĸņmēļĀ+îŧY*ú”áģōqÆúsH§‚0‹>1é1VFŽm ŲöÔVės€ô,Æ#ån`­jZ} Č>x/ūíģMUpl<čĘĪBØ?n Ž`ˆ‹Ī&|)œ7É%1…îūĮĖ͆œŋ‹1,t 1˜}cđ]ņĻá.1„ŠŲ^ü)7I]ˇâ¨ …Č:Ā:ⲑ>›ĨCņÎz›'÷[ØļžáöđCVz×î‹Ë–ãĀEŦŗ´Tll€T¨Ā,2•ƒ4LkÆ17ECÃ4JĄŖĘ5^.)Ô|Ė([í—P1s#ūĩf2SŒ›ǜĀiĒ>:­ē8ŌĘaP8Āy”ų~ŋāĩø×ŽIŖ˙ Lz5vŠ›—J'™@¨ŪæĒ!H™›Á”˛Á“€šļēQ› 9€ÆKpîúĐ ŊĀlX#pv g´’v{39 +¯YéOō`r:0sëc€éAĀn5°ôŒú›´ 2ƒAz-Ž:/‡*qGDÔŌŨg&îāʼn@Ī,ŗ6đ:Č|Î"÷¯$PVZ×\ŒPžēჁ‰† āė``vzŨOĻĶ€Ūd`pįæm`åˆÁÜį)ũŒ€Œ„ĻĻūdĻ4× ßÎ,0œ T!9Øląãë[ųģꎨ=Ĩ (žÅpc@Ŗ˙ßL.•.C VėŗFĢē+ʰr™ęš]÷Mr$PWķoŲ¸YÚ@)6ŗüi…@hßÂQˆ“EĖ Ę7‡f¤Í““€­tđL@l–SM÷.āģŧkZŒQ a?ąîM"7́¸MŠūđMāÖ†Ŗ@ãY<šÎ ŌđŖu(C<¤Č Œmā@2Ŗ"íJũ5dä{*!<+Đū{hf›é M—W TQčŠGČnA2ĶÍ5 kpāQˇMõWČ0—ŸPų­Q`hƒ´4Ę$Z@9Üûƒ4å‚ L_Ņ’n`čú(aŠ MmšP–ę, ‡L‚<ũ ×č67åtŋ TEw B÷ī€>ŗhÍ=ū]ĻHyâĮVˇbũJî‚}b"‘ŊKËiĀæĸ^ōfž6yÖ!$]āG…60¨›gk†#]ž¸7€ō"ŖØÆkÛ@lpĪ/XK ah´”G@=‹€õ׉žäúV‹ôIŋø—>›á.×ÅÛ6;žÅZO’ŋô-b› é!Rb#WxqŒ5ã?ÜĀyķ ú"ā?F—FđēÉk|ķ YLuŊŽ Ud_LŒq.gUͧ ,>Xwŧ,{OßßEYŲ+ÄW¸?xxŒ>Ŧ9@C\ƒÃ@‘n€ŲYQn`­ú­´~1H `˜{ŠÚ¸Šå¯=k4 Ųk=ŨĒæXūd oÍöÉ y5ĸJäÖØt.û`nSNO(^Ō u|z BV<5€5k_ûA3›õ>?øūÖ…ßø.€õŅéā@u˙îL8ĶÖĒ­°ôŗ¨”…Ė*rcQäīō˙:)qÄã+eoJ¨˛Mu}ß ¯ņÍ_×qFyãÂîíajŦéZlÄ ĖQQ_$H+Ū'ŧx1úƒĢ”ÔIE@hî|Ę\Ā;>ä<ĐĀÜnĐļ=Íđ ÜŊO–;Ρ֮ֆđ–bøŨLŲĪŨĀöDū/“ōoŋ5@˜ŖX_%j’$ÖX†bã u§|u¯āCÜRŸÄtČBXö÷Â3 ”cœ@ÆŽ<pÕĒë_Lā‹9ĻIÅĩ{ÁÄšēO{ŧĻJŽ9ĩtCwí]–¤˜ŧÎĄ-ŧ­U4DÅģQÍēđä2Oq6 ŦßÕňģžč›3B&xŸ‡Ž~+Ī+`ŦdŚBčC§Ę]pwu•˛rĖdt4ņk tkå›īŧÔĀĘ $L­ˆĶZkXŽ˙Ē˙RĀX$p•X‡ŧZ@Ũ ÄßÜÁޝX$ŊĀY 87€úI’u`qdoX_7Ā%oF€W,ŧ|˜9h- ˇSũéE2Áĸ>`dĢĀ,˜† ëĒZč˛ãkB°Síw?Ä}Ō‰ ĸAî ”˜Ā?4@Ɯ@‘"Đ3Y]ŒÕõzKũÉ{€wÜF]`ŪtBo€â#TwĩĮ `ʂĮē=v/ŋl ø!€ņOô ˆe†)áû>`˙]ĸ…’Ŗ_ëgŽÎĒf4ĻtđQ&1É80TKpÉKĸƒE‰#ČÖ<ģ^܈‹ęč>æņ ’Ōų7ĖÅ<‹_E*ī=c$ō|!˛IĄōŌHiˆ'R 3"7Āŋ9x⃭ =ēĄ ´ü`ÅÄÉązsK`e´ė~9Đ Ŧ̰i8Õ!ŌSËu€ÔOæ@ úô°nWōK`ŠW21ƒji€Æ¯ÜŲ­Ą°mũīvzéí{~Ņ2ctt|8° uŖā ŽŌ’ˍ˜¨­ŗž 빀Ч!`áÖa§X§ÃPĨæUrG˙áPãâÚŌ”ĶĨúģj:Ļjā#ŧė+`š¯iÂ+аˆž„E´žg}@xģ€oũ@ ( @‰Ŋđߖ¯X9€0ĮČZËé/Cčņ¯¤ȧų8Đč_îŪŨ0ä+j‘iāâB€cēé PÜm q[ŪĒú@āëËËģ–ŋ}I†¸ÄÉ ˛^PâąJ"‘Ũōģ@<ķæĸT`ņOW+šiũg,nÍĶPËā‰ŌÁĸpn­'ņ°œ@ēDŧ<„Į|ÍpD{čÃw™(ŠÎā4lĄ^U×CųēŨ ã2Ė0ōm&ĢúM BSđ:ŦLO2ŗ}-`ŪÍÍdrCQ´dĖŠ¯ å„([žTã8vT@Zz(¤!‚™÷ Õ) Ŗ‹×ëĐJ­oF€ŪҡsnR¸p÷KcL¯Žl ô_gĄUtŨúS€ĐēOĀ…÷ xũw#YÅM‚Ā‚:‘Ļ HT=Ā%Ís|ŨŠĀ ÉĖ@åáÖ „Nʉ†“€ķI@ŽéÆ}eĀ€"[$öp0>÷5Ū%˙đQāčžI˜3xÛf&0›âîl ôŦ›Äœ”),Ô@ÖXMČ aîĻ8ĄĐĻr>/ã”Æk ė€×p§xĪš ĖŊ;+HÚ$qŽ gĄ B,ĢdD2CĪu^ÄͲT•}1Eēéī ųšOķaBũÃÂĒōŪË(ī†T`d IDAThœö—ŅEĸ/W7Pv‰É"ŊáoŪ Fv+­wė…504@čŽZãXyˁÛŦ ä ŧ‡ßšlŦōŗ“é@ { 4n^(÷W›ã5ā.`Ķ€ĄVfkÚõũ24%šÜÔÄuŗCװ؁,˙ũ° CS[Ũ6Ŋ˛ ÜlqõëĪrf•į- :ōvģMēwąFÍūŒŽ÷h}!ā˛4†1˙礋¨l>Õr xÕƒœėčŖé@Ú¨hé6™ Û@ĢØīŠAĘģį pßžļ€Īđęē ÄßßÜ@53 lnāi@6 |o7‡k5íK˜Ŧîmā_æv“€›1ā”Đ—NāŽȝ¯—- 9‡A÷IÂdĩ¸øĐĸLjšĨHj¨‚Â*ŌĮGqSÜÂŗ8 ąËšPo`#ą…ČŨČ U/¯ąÚ*)ÄÆ —5qâōmįÖfB“ē“2<W“ČČn)ūW…žŦۊ¯Ôįˆš“ã…Ėa”fĄÉ ˆŸÕmąšÍ:īaKČ2ÕK<Č(ŨōÕ<8sĄŽEdŋ8ÖĻ@FFĢVŽēŒUûŦFÖF@?CābFĀY,¨æ“†\¯ 0{kŋYĀĻęu‹‘.w:;čmųæįF,Ėúv  Č˛4ŒüŦhÜ4ĸkhNī7ŒØ1؟í  'OuÕũˇCxĨ°ŲĸüiĨ&Q@ʆCÛãˇžk†-GØÔ0@ĻB̟}(‚æ3芮î힖- ußā†2wW¤O&Ž›D]† Sیą›ā@ öŠ‚Îüę‘ ÕUx'“™‚ÉB“Üļ-ؐĻP8§Đ‘ĖØ@ąO‘˛ĢĖÚÃeēĀBÔ+4Xhé ÷žE ˙ČKŦ<’oÃĄēÚaĄŦÁ H[/9´œŊĀÜB#Õ°8`"sŧŖÜ¸;Î'TÚ/w€x+W"."¨˙m1î—gã]uf†ÁōÁÍ>xßvmXŲWz ¸‡A‡z _m€MxNāú °;ĩB¨ôņ͎ 0|ŗë\[Ķ€QįdđGĶ)4fÛEāŊ l˛[Ÿ„ųA[@OwųöæúbŪę[øÚÔíGj+č!7،ŋšįIĩŋ}) Y›ÎfķÕĒ7~XĀ&ãŊT[A÷)õuļJc\—AM…÷ß4° āz0˜”[o€tc\G4Ōū…gßđRôė‰Õ,ār˜b •{ķXā°>čŋķķæC¨æO&ŸÆ€ ũ~÷ÂwûܯĮ€ĸH”áęȩɆ†Ŧ§ė`ÁR4°C°IB=9UÅ+5ō‘ĩĖØ5vD ÂŗŠ<…WÂûR$‘oĀīR_ŋîvüqU.b9†oßéük]„‰ƒ ˇƒ”ßĶĪéˇ&õ÷¨]”A ôķhc؜…k2a~ÉšĖâ\ÛCÁú&qĻęã¸Ŋ^8j†cbĨ¸Čä…˜2ŊėPyPSÖԓD¸ų&csĖhĐĒŊbŽķ8 ¨?Ž€Th ”§Ü­ję?( Ęf°*˜&°Û;Ąũ8ĻP9kH ËÉšÂ`ä˛ ˜‚€é00ëŨ)!˙>0< čęŪŅlGŽ švšRo°`9Œ€q/°ũN8īŠŲSŪ$žĻX°˛dÆM"ŒÆĀˆģÜëFĮĶ^7ĀfĒuƒ‹‚F¤/bƒo°f6Pö]ĪĀnåöāÃŽ` ]ĖĄ€ˇ`ÔP@!5ļ:aī7˙Eä€ŋáëœ8AÁ*1Qĸ8‡sūʄ:sĪ’1 n“ØoËFVöšÄĨxZ9ü:€ÎÛ8w|f˛É[oLôuŸ#x8ļ,]'˙`đ‘ T+ĩ°ŨO­ÄŠ"`ˇÔäŨ]ß]rļ2ÉĶAe’‹æN ëiŦžÅk ¨ūęŗ)%ŊÚK¤=—öŸ™čJgƀƎą%ĻŠĘømŸÛĀUķ!ŪngęėįS€ûæˆÍB+¯n .MŦ’†Š›@ÕģnŸë6.\¯ŸÔI5[m´čNeœŲļĘØmāæ`æĘwŨ7q?°ũē¤–âˆåuÄËč.ƒž¸<”¯Fá&1ĐĪĮŨ›Ā2Œx§LáF­:0ėKMßŪ€+˰8b?#üÕSwŖ%ąŗlRP?[ŸēŋōūtڑÎÔ8[īßív’ČüU†ũk0Ö Ą į÷‚úvĸ€ q ^G÷? „abØš§Ų øc>ė¤3åp0Đ2y5ŗ7v †ąC˙D|Ũ~_X¯ņŲĀl:0ĮĨ=ŽįļĶ™š^÷FøŸÕķČ=œČi?0nA['õ~›ú}ũ@ĢJ⃁ũétˇOˇ\!<™¤^ĨY¸ØČļbÎŖgظ2›{ ÂdŖptĪ%õŅ!`ˇė‚S—O)ÕÉvĖ=ëÃprŒ%Đ<‰ Õ ˜ c2 Ņk™/qDÝ\GH•6{zՅ.0Fn`MŠėĢ ø°Æ…S€žŦHų(`øšûYŦC>¨öᙠ´N H ; Č ~ŌĩžuņøĒueļĒ>ĐĀ+9ˆ€+ Ė™fĄķ&i‡žt­R‰^køÅ‡iČõ¤ļÖø˛"–ž Íd&NYXˆ¤ ú8ݰ%Ŋ^ Ÿ…p˛Žađę Q SÆī¯8Õz‰— ˜îę¨á˜ž.Đ˙11Áí6)g1Lī9ø(ļÆS€ō…kŪ2eŒŋą3æRŸvâū~4@ãÕ!`ˇŌäxāđäę°ŋũíÁĀnĩ“ÜÄ t F…ėšÕÄuĢ@ß>ô—Ôšda*0ĒŦ•9×ü0pR˜ēņ0qmųŠĀlp¯ˇT]ķ'qZ“¸ĀƜÖ)Į ˙-UƒbS–CōæúĖņ As†ĨÏŲ+¤ĒģI0`cDLŗwŋÚ¨¸„ß_5°h€´ē-XF˛1îaÕt`ŲƓ€(9ÜK ĮŗŊČÉíķ6ģ5Ã>Čû%yŦÖöÉ`ÍĢ=ü-CōqĀ:ŽžMúōJČXļíĖđK•ôÕDÖÕ,pšņDx^$%)ĸž[0`/ Dq*Č ˛:öcųĨ”㍓‰Ā5 íôøW Ë㨘ÂvTŪ Ō5åĐî•QЁQ“ú#BL¯Î8œÔš…”51XŗXEaåbnŨÛhāœ}k¯¨) 'ÎĸIü$ Z°€ԓÕm lUÂ(¯ė›2.ā¤%ŖĀĐ^p8;(B˛S[yjíŋrđuyÖ §*<\sÁT——6p8ˇÅpVŗ¸%`3@'iĄsŲ 06€‹ä@Î;1¨C7_ČEbnŲq@v0Đī_:7‰Š+f ›$. ŧNdÃÆpl1 – ȘUĻëwįũ{ÉŽqœĨĒv‘,†Ô€¸gzžšĨH˙:˜›Ā¨îÚ‡ˇ’Ũ$ü˙U"Žp•8†-å)LÜ÷ĖķyR"0‘ĀšwYr˜WZ„ÜLx—Î!7:ēœRhÄāēŨņčš l.ĖÁ…ø(ŦšWzzåC8ŪsžĀ˙H žáļ{ŋõ&’S€ŧY“b°É „aŲ6°5?ņ]˛I§¸šŨpsHno1kˆŲ{ĪmāИpl(lÚíâGŖpß Ũē õŠ1ļė˙u€ĨB~b)ūÆė¤</•ß´ŒlpŦHÁt+@PËSÂZ+Ųĩ$=؄ûPĀĢøÆwĒeŽúUuNhƒˇ ‘}ōāj‚­ķŒwōåĶ€ŧČû€˛­ÆÆŦî`ž(Ŧ¯`pw$P#'0į&p7 \ \ρ70ŅĀ1kŊĖ0ŖØžūÉ“ -ũ5ŸsîoV8a6×Ŧn‚:Š’wŧŋ{žÄ´Œb0ƒŠ>ÜĪ9‹rh{Ĩ(a!ÕJ=Đë㎌ø’˛; TIŽŦ8ĮYc!đņ˙ĄĀ4¨åņ!í œĘ|˜` ‰† Í|X Č āBG u n50>čiā˜[mÅķíę0`ĀJ÷ÃĀk ÖŊ d>ˆXß0ālAŗ*NfüĨo`ĸ€iȨ*Äį^Á ”I6‚€Ŋų¨ŗÛÃuˆĸŧJU7€ž†ŋÔütí3liācđÆ&Š6އų8H.Õîũ†Ėœ.Ņ+zžŊ´R‹Q‡ũ_åāķ˙UųOˇĪĩ÷ÂÆ%,¸.Ž‹§Å߲6ŧŒJŗÃߒĢDd_ m˛ wæŦĢE˛Žųz{ÍTãÅbę…˙˙bu/P_ƒŽP´o{ĒJŨ87ļ6ZdėBžzššš,:huÂ‚ @\â8`g_cí$î—G€ęËLR‘<=Å=Į<8žNŗ§ju āÚŪɗi!ęt<{N1ÔļpųąÚ‡ t‹Ęéã—ŧ=e•Y°žĖ%đ'žĐ#Ņļjgpv˛Tūņ€Š l 4Ë­–ân€ų9€L€FŌ4`†@Ōt— éßføüüÎ`*ÎŖh˙oøTđWĐxÉZ’&ɆĩQĸ¯īĒčv›‰‡w0ƒVŨ=}å)*0•ŋH`;ˇÕi'Á×Yá€ÃCĄ‚ÕĘ˙“ŪÜ4@Ū„u†n%0ˇ€‘ ĒįöĀXdL`‰ĀėÕn!04€Ū¤ëîŒ2éņkØFsu%%¤WŧãéˇŊœŗošzXOļˇĻxŋš'%–1ĘWF|†2IŒwqw‚Ÿ_i`y pz Ęw,Štpv“äXĶōíÚg,ā•LsX6iÎ(„˛ˆl4JŽúé2[ē[ũFŠQ^uĮ…%‡öiŲ­c€í u§Ŧ‡WãU(0kīd¨ūxܯ^Pr×W†ŦF˙:āÄ0 ˜Mļ V~Ũ÷§ķŖƒđĄ^ŖõĩæĩÖŽēƒ"špę:98”Pį“€Ģ^`Š€jāĐ`;ĄnW˜@ėäßūꝝ˜ĀPļŒŒŪÁŪ Íû';1hĖ.×NāĪ 5˙ÂQĀvEû0ãX”yāʅ9—b\úf7‚å†B8äu5ąū[!‡áúč˙'0Áôw˜”!ø(ā/ØBäī)¯ÎąC~ęšĒ6Ā"˜âÁEA–_0ŗ#Į=lo4„mĄ˛YNēQŅĖĘKuĨ(`†{füļm€°>R 5ī'ˇn ֎H ”“&7˜đ'4īmĻã°ũDŗW4aHAĀ(…øz°ƒáęx Ėq)Ŋ315vSÎ%đ6%Uœ÷oĶねFe˜Éå÷°œh`†@QÄëÃÚCāSŠ7 Τ%Ȅv™ėëG-žÅ3˜™@‘‚ 0ÅŲe|•Ė”ĖĎ’jĐŠTZq P×~ėģĀB”$!A†ĄKū6§ú÷a-Y‹$ZĄ)L¤Ķ°Ü–æÃÕo,SaB §á @=ĻŌ™Ė;ėV? o5 øŪÎpØNŽB!<0ˇl€<]OŽ7:h`X70ž Ķ€â"ˇ€áŊf˜pGv ŗßëÁĪz&0VŖĪ*zxŲ@¸øjģŽŊÕįqŗšŌ >Ŧ<}5⤠ˇÆv/+Ņéc,)˛ØĶÉļēŠįn€đ ŅëcĪ=ë:ž Üæ=Āßv—K7›Pģņ ,Uú.3˙&0›ƒšũ’ O–Lû€Ûęē@5Â,?XđÚâŗũÕ Ė]Ļ @™Ų`m`ęUŠér)ō ŨnEVNJDĮ¤Øėړ@¨šÛ°k—"›ą€:Í\”šbęģ25[ĪēHKēėü ôˊEv^/zˆíFĨ\ĢšPÄV7 ¸=šôVā*ŸËáEr-Ĩi-îŧ]h€Ūģ ”Đ7ã€yXI`ĄĖ.Ž‚ŽęœŪĩ0`@\ˆ)p†@Ūžäô!Ŋõ%°˜-ÔÄ]G3juÂ|nÃĀ•ˇk€›ũ> yP'3+{€GG¸k`ˇ›!‹Y2Ė\@fkIā“œÖwK77›#°v!Ä]`sĪāų G]Ŋ€BČN-8I €´Zīaž‰I¸4=Ųôīb7É(’’Ž}ˆÄ˜Š%ü§Ä¸ĄĢ\H`8 HũÜ ڃO70l JÅ1‡ö$‘ĸxĪ…ˆÍģ ÚEîd[ĮķšØVTÅGÆ?¸°ÚĩW^_‰¤Ų+3|(J\.éöĮÁ@s)^Fŧƒö¤Î}aC?î]īŠ™„är%S´Ũ›ÔcTŽ:C 8­›2—ĪDßx4-3ĨŅ˙åĀ’€û´.]@3C|0>HŊ0|MÜtŋ1ĶÛrú€‰ũįT —ã uĘ4y<ŨŠâüĀdÚh 0ĖaŲ @ šq\F FyĢ•BĪ‘Ą™A{c.âēÄmą[>éR„qŦį¸ip2ë¨sUZ‚šĨwcp‰HŨšŪ5ŋĮHíMe4mĀ‹.Õ~š˜:øĻhŠ47›Kāō8 ßËÕÕ­Ō{đÕ Ü´–ÆžŒųí6iŋŅ.åī8éjSP¯âŊ¸Āîų2ûöÂwĪ|ķZ!&öŠKâdŦį ÖŅ/—0=ÃA@¸ž_%éßSŊŪ);ŊĐc\Ē0Å!0c^Ė7z>ž‰UĐŠ'ø…ąôNęŗS)`ŅzÃĖp =‘šƒŋũZ MËŽb0ŽÅŪa륆øŠFĒcg4˜ŗ#› ÄEøū.Q“Rģ€PNķœ7@Օ0BöhîËÁ˜īø` /TŗDÔœķ'q„'ȧ•Œ9‘%ĩ€žžæxãÆĶ€‰ôā’‘×Í p%ް:¸“Āė`HĪĮI‡ŲÕ bœ“ŧ˜štŠķ1 á€&‚|*…øŨ@}#° Bˆ‡Ėæ5Ģ)u#e8ĩĖŌ¸)|dŽ#•Ü@ÆĖd†€ ;Ÿ0' 6C^Eš.Éô˙!NœŦ*ĸĘ"¨Ą•íÖl‘dÅ"Qé`ŠžLvĀÄ ‰į×,đßdāķÖ&. #Čņ.ĐaĨ6žUkcë-3Œ•Ü āۖ—­ZöÅ`?0û  Ņ‹įmģEāû§ĮŠu&û`‰ŗÄQ; ,#rÂß{ŧÛ=û``™ŧ—0šbÉö…‰eî2mīURFzJ{CūĄĀąR“ž0“Āæ.0˛¨_šÆœį’cGo=\lpú’ YĘ0`]ôåfx{ Y^z…š~UĀ[ŋÕĻíåĪŽ†Šg4 T/™@ÕËö­„ČÛđ͝üŒØŧ24Đ÷o‡ gĶvŌqza1qųlvāŨš)7đŸ›ĀDŸŗ*,Ëā6…Ž!¸"‹ą=Ļ 3^F!îī Zˆ¯`0/Ė‘ČįFOYđ"2 âŽ)TĐdÃ@å€RdIĀāé>gŗÄęLŲBcjíÃ=ũƒú}Њâ{?"7X°0ĮrößcŒRŠāę[DŖB3ōpƒÅ­ 8ڜųŲ ”Sā vLĄz`Ž8o÷` ŠjVemf ˛C‚3ëN Ô1g„˛/øŽĀyœK âxŖ1 Bl-`o b+„Ž~aŖ9Ė‹ ĀėJsKĻ,üĀÄÎ- ‹ĻLËe}ʇš0Éo5Y¸KRzmø”ĩŠ˜A:(€0ŗ#ƒ^ dm`0i˛âöEíŐk` <Į ļŋ0ÄΖ,"œO)Ū¸¤i5Æ­Ī`÷:/a>‘0¸]MÉԃŠĖŊôB„¨€ g{ĀQaá÷\yĮ1&ƒ0#`a%āF Š÷ƒbŽAsySåGsyŅ-(BœgAœ`Ɣbˆë āT€2Ī4œßj‰/Ÿ !´:î—=yå‘ü`ķøÚy§ģ§o |ēŦ™ŋūí +Vöu<¨K‡€‘ų™,~ãoëuē+ŦX1›!xĶV$CŨĶø4š|0Œ- H¯ßÖëuö2l…V„ĖĻąæX[éãpĄéd`>LLā=kŲiđ õ\¯’č‰cŸU8éĪvC†įæPppW5l>->ëužĐ˝6ë›@ĖG|RĀG–=Ā<ĸL÷Č–ßQ%K9y š­x/°p]1Ā:¯d p'΀Â|3ĢVÖ<ĸ9ؘ_û|UĖ$pčal\j¸đēØaIĀčC• zÖŲIX…niũžŠ1øÚîlāŌŌ$qlg‡žu­ŧųrųq>g°ė}’zŒ!f49Ķ"*nĸœ]Į9ķīčÁMĨ˜ •….§!ôŪŽ†Ŧ7ü(1•÷Ŧ¸č‚]—šbü&OāŊŪˇ€ĖknÕ€ÜWX—l°E6„Z=ņƒâô‡ß+ÜÕUm >wĨ_ā.‡õQ4pȑMōV-l“j¸5 ňŲTQčö*ÕbØ˛`ĐbÜņ]Ļ€Ņ! ,xųĪ(paįjØW¸RĀ€Ø‹ l:0^#PS Ÿ˛2vĪ#0čú`LwąHŠ“'‘RĨôŦÚß§āž´€"ûhĄâNq°}@†ũžZ”:$ € Bā”<Ãŧ{ĪMbáxŦŠ6ÃB÷ŧÕ],`B Ė'=žE[Qĸ 0~€žĢŊ@\ŋųēÆSĀßcá¸s˛r IDAT‹Ū0Ō@ēŦ°ĸB2Ķ˙(ņ%đŽ×â s|Āá÷ L˜”4Ži+`Xû0cKP\EĨtCíÖíR”IE.ķđ*¤ŪîõŪ#`\ŠŋûSj d˙đúEÜ(,Z¯k6Ä0m2āõ Ķ5ØyØ*ß ßÓĀöoÜÔ|ų×ō,@ŲÁm˜öÃøžƒŧÂĩ1Ŋ×vÁŊœ0!õaĀŦ(.^'ÃEš^cĀ Sz0iūԟ)âîĻŊĀ€0V#nTĪ\[CĒ>´!Ņũ@XŖ“!đŊ÷ÚjMŊ¸ĩȡ{BH’B đ ĀH|î8ī9T)qīŊ(`íĢ­ t[ųĪ]ûĒ?!„ŪÆˆ1¸|# õ,1ģFI`ĐŦŊ –PQa~Ž;SSúo­~<Čʅ§ū„ŠŠd:)w ˍė­~ką_m… cŗo (’m ėMõ´;_îŽē´Īŧƒ^Ņâ8 hOû€ęäĪåĄ˜âų V-ėŽ`…rŧ=‚ūt&ŌW§lšJ}ZHÅéŋŋũÎi• MH";:‡:]O΋+!~ƒ9Knšę"pĖį  Øål!ĘZ0<€°`" AĪ{€Í<$”Ļ)ö úé[Ŧ d ؟˙ Ö}ņ6a é‚-Åž"O]ˉʠ!ËcFh W…Ŋ a¤9¨Ÿhˇ°ŠúHąg/oōˇņ‹ŽW9¸‹sO–ęJ3E-fâ¤w€} aL,āŊœVŦ üš' OĐsČĀ^ÅŒ˜@?SĀ(ũĀžtÆFPM­°ávČ`@Ëjŗ‚¸ÜMŠâ,45rX&ÕėIgŒnŨ z Ha¸˛™„ŽIũĀ,nũ~`LĀŪÛØÂ";ü­ …H}ū0ŧ–Ā›v0ĸj˜ ˜Oæc@ˆDčKˇ‡ĪôÅM‚+(X@Ö–L Ö˛Xø辍m`øŽ@\ÎėļL4P¤Hœą §cÁü–Øü%WZÍhĻiœg“GŸ—˛Í0P=3ėšãøë˛Øxžâ•4{57É÷ßŋë=t‡H˙P<+Ō(…9npâ žŊRô„@Xƒ'ņŒx‰,>b˛āąĀņ+Ü$=¤¤„ß•=ĀáP›Í+›ö }->ÜĀ€ģŋë‹ÁĘēĨaā~_Az5Ą \Orã¡Zxúš¤čŒÂĀŧģ=‘ŗUSzWŅ‘@3l:ËĻŽØ9v‰ü>Ŗn#œÜÁąx@Ø9v~ ˆĶß#0ūt 3ĪYO˜xkķNļŋĄ9ņ鎞ÛGrUŋ8č+ĨŠķ˜Ã‹50†÷[Lbāõ”ē9÷_ĄŌåéfĸ'U¯.Š 8V˜b >†Šŋ-ķIĀ ûx WĀ~‡ŦüĒ˜[ĀĒP< xûŅ@ę6m`QĐ+û’LnŸĄ˙gŗåDāFã¸ē†žb_ŋÛ)ĄWÛ@ŽXõYyyšØw Š<ôā(ÛĀ}‡”$ ęPäq l[F4˙IÄEr"€í”Đ㭎ôaÆö÷Éc@ˆC'0…>)LŸ–ōŜ5Ē?x´Ĩ‡ŲæĻķpZãH6 ÁLØN }¸~Ü@Ö$I°ä›%>?iJ˙ቍ` ^¤ôp&Ĩ2væ'ƒs`Ą¯Î=Ŧ>øSÅ!€ÖEĨ!]māÎl.Ģ_įm YĮ,͍ „—īåüęš#Œƒƒ€Lsjá[„ hŪ˛ąVr*7¯÷"‰jˇË! › \@œéOYlîc¨āP@ãæ c>ü)ŋ uô´ØQ_ø†Q5@FĀH‚ä]ĖÂg 5xČ<2‰ŽSúCį—v˙Á9L‰Ž“\ʞxx σ@Ŧ!ú.“ņŖ€vË"–ĢA]õ8Ëæē˛øRxkõŨĒŃāMNē–@­` mõ#Ā:Š}Q'nyĮ×|'=Šxߋ/ø~+z…XFFâCĢËVį2GĘ`>q ˜C BøSéā‰ŦzOA qrv >m 5îŧš@`j+ŋÖé LxØŪįîyĮë6wŪ, . ÖP( ,’ĨĐLĢ&ú;c žØ;čÕÜi^ øŽ’ÚNĄö%@Š 7ÎØđ^Æ ę-éIƀ˛Ûd!RL7đ/š!›Ú­&Dúˇ§qā_9tÄÁ¨, e­Ŗ"€Æʐīß@ú6E$ Čķ™Zj`Ô\Ä]SΞFßUQp&&ÛëS ÄV}ș ˜œÄõĘ ĖsV§į.pˇĒ]ĀHcÚ+…Gbđqô&!`åÖŊ@g 6pĢûÚĀ;~ˇy‡rSÉß^Ÿ vûŖĀ åĢøVЉBĄžÖ)ĄĪRÄow1ķxk ƒ5—ĢwFō ‡6Ū‚ĸR,J' ~tÎ&iÚ̐CÅéV(ÅĨvÂA`°ĩĘ*/0!`$rfĩÜ0ÆüeXĮ%ēĒR#ĨŠ+áĶqŊxđÃ\¯ ¸˛ SI™üŋ&Î'´ŋOc;3Ųéč0`Ą€N¸ŦĐŪúmãŪËŧŗŗũ‰œ8ÆûĄœą.0"āO”d§kæ;ŌAYēg­f¨Ųú„Ā{„3mT[@ąån“Næ"2dޤÎ+ønÕĖŨČΊžÄæ3¤įVn wÅ Cā_¸_pow˛1 čOŠ[5ÃöÎ0‚Š HC°HZ;Įģ$¸1<ÖMāaF—¸" H’&Uķ>#ˆ>:÷čŦ|ũK–Rm÷÷”B=F"€Ø#pP<ķĄôßŲĮtŅ,50ļXÄ čnĢ•5_a ˆaĪëÔ­zaåëä§(ĶÆ|šĘ",EĀno<9ģ@š8Ŧ`ū^ck¯ēœwŧŗ†ß” +Öé†>`)€æ :T—\Û@}ĖpxDÎT í#Ÿ ô 蚁jĀÕų€ƒÁ‘Ž Øƒä_LÜ@u§$ØLž˛Ģ°hôS,R1DU‡Šâ˜ŖT§€ĪČ āßPÕ$€ņ €f–?Ŗ’ŋš›cŨÅf#ܚ Ē.@uŌėŠŒDž0wfkô8Íöb ÄUq’‰Ā7ˆßŦ^pĒķ˜´vĻ€¸.4, c„­dFŖ“€U5äN “ĪbŸŋ ÍQ惨ūHāÆœcíšL°wŒēĀ_,|Îđ_č‚Ũų<Ė&dˇD)Ŋš‰4Ÿ‡itˇįe]Âøl˜Ŧ f`Hz•5&Y)‹íÕ^Íĸ}X߈ĖBRĮT2›ÁōQ ,žÉä¨lčRt@¨PƒQ"ũ1Ø dõ_8€ FWĮ’äaĶ÷z áŧˇŧ V) —c×ķŖ"n€M`Ükčž9|ÍącčķÚüîցšŧWĀ™ (ļŠëšŧ›D.oî7Š §ģ€>‘¸āčČ–a/PÄĪ=öXúKžk 4°Ęå*4úî-čŒPGŖ1`r0°˛‘ž8ØÛˇŗGúõ0)`…ŗĖ Ë@+ŧˆˆŗ8f ę ´bP†úOX‰›$ôÔũŒ–% °^œ Lú€%3›c›Ną0‘÷ę:4g´ęq(^_0ëôšōxŌŊĸÄđŌĘķgˇDū­†~x> hāüöŨúŧČU f­Ũ™ĪEZ= lI&æqITwčÜÅ*•:| Ø^¨üü@ųĄũįãÉĀZ¨Čûn’€᠜×ģzŽrņ'UĨ…˜õåē[(ûŧ4ŗ{\Ēq;jî|r+OÍŧčw˜M•)VŠĩ< Pĸ9˜ĒŽĸģ˛8:wŠÚúqđē $Ķ,(úzpІÄŊ+⯏÷­ŋœ%ÂΝ°–78;0r[ uĀŗĐ_o‡&ađsņ*ĄÛ|=ã/¯#@‘}|âĩŲ’ČŦ2ۗqĢJ†­ŽQ›_‹Ŗ’-‚’0+“@žŗēÂ)m˜‡‘Jf>,%pæũĻā,ėÃ^`åŸ „wˆ…ĘđįHƒß˛šc0˛š<ė&Á2c’Ãô.2}# į¨Y˜,[@Z— ;Ųl5¨į„Ã?Āˇ-ˇ&0.ą’UNÆĘaŅ Žd6…yâ•ë+Qæ ኈJČ4 „\ĮœæY>* 4|ę‰Ahŗh€0$<ųÂ`ŲąęÉŅNBA<ö#üåĐü`§6ŪŅw‹Íƒ_‰5˛—€â΀>Ž˙pęyŖŪZūŖÁ80sKŠЏfŪXŽ#y¨úmāÛĒbWXņœa-|ž,†?Øé\ī†ŋn  OSGgp†9Œøęp†2I;Ą^ Ä`Ļ÷ßķ•(ŅŨÃģp†!Ķš•ĸŦ |Ėdq;Ĩüb•Gƒ‚×\—ô[kēÉ@ėõŦzį5ī¸c4ūĀßĒ‚>`kēÉĀŌĐ˙Pt“Ķ‘w‘(›¨n×XyopeŨä~(đũ>ŠŊÍú€đIp!2à ēO:€ŋOŽ ˇŲd ŋÂlĶ0e×ā”ÑŽ–|ÅE°€p>K ę[ žÁŨ˛(„ãŨ~§Yų‚īŋ‹i™…—sĖÍTWŒÚDôŧŧĶhÔ‘¤Q#\Ī­į?æ”b0ƕŊĖSüŋ–ˇŽ]WĖ_ĨŤĖB3Đu-M%Ŧøōž‹'.ļ@ujÎC•Tg]€0ÁĻĐåēŦņ2B ŪkãĨ:šVŸlŠŦˆŠĒ5˛kU÷!2ĸ^aOŊë‹TqņāÕdāĩGŠWÔNá˜sė…Ô}ÔĨ4ŋoąî¸”—i@'{x;ø-ˇ…†ŽžG˜@Æ(Į&P$‡ƒĀđpāo ø @Ö l–É6Í%öÜj3fŲÜü€9ÅŪŋŊ( 8eØb'Gmu{č =¤AÚIˆ]V< „EˇOãíŐf đxõ’ˇŧ]įĩx4šŠ?ā-œáŧđwŖĀ‚]áŦ3ØŖ”ēÃa÷jāQÉßŅÉļƒ"¨Ōc<ɞr øš_ķûŨ.ŗøŽW7WŪ› ŪÄßEꊂŋ{Ŗ˜Æw€ßšØ$„N`7äđ> įŅ/U­îƒąLž˜á\牏nßG€Lü1H}X“”k2ōąY–üczŋié…ÛŲ­Ŋj.jUŖ@ÕĨėˀ2Øû6JŦ0QŒ +ŪĖ4rw°3]—ũõĻü–ą~qødÄæJÄáT kíŽXS‰ĸøĻžˆLģĀí‡ečbxųH`ę=?*`įYŒ?áĀöŪüÖĄ0‚,ÄĪ]ķŧŽã-´Ž ė´“č7{úŗVēę† ø÷D`nÕāĢCĄla/đÛAĀ…,Žr|1.`p:Đo€ÎĻ08k€28L ü2zˆķ ₏‡i>ļgq1€((ēĀč0›dˆ]E H?(Žú;U(˛ƒ ¤%†8ŸI`đcĘČDyJā’¸ ą†!ĸĩ#ķąkP™ÆC@#Ā‹˛ÛØ“äš2I>ĖȔķ$b7Id=ö2Ŧ“€Ü4Â!ųAtÎŌī5ųę`§•åS€ŲĀÚŸDÆnĪ |āö$vx€¯ŗÛķÛĶ.č ō.Ļeķb‘ÉŧžâY˜ŗŲ¤Ũšwąąžåé@đ”˜CJfƃ•PĮōEņKŗBĶh:kûâ–*?ŒÅ§ßü;.’“œXjTĖ˙=˜X@ė‘XŧJ&‹ō¨Q— |.^–Ņæ%æWė:†)T‹ 9jž*¸Lĸ_Ę:ÄÅx ”Sˆō ßuēf |ČaÂ8Xhzi.¨CîȤL˜Yđŗ$O ęö‘1v-GčĐZĒŲQ<}sÃ^ú€+ôÚ@ë,?LsëįL2xÔPĨ{PM¨ŖfŦÄEūĒāûÎe]n„m  -<8íAŽ.`ĢĸĪ‚ôŠßŠb’Y&Mâ>­†Håh™ž´ qÜ §nĮ‘ŦôCŽf„A^´đŽę8H“îęAG vįrĖá\fm`Áŗ.0pœb„öâŽ5ŒģĀ€;Člā qeUâ-āϤÕ!iEëÕl*°TĀ—k% gza吒™˜É›ÄŖ^vâĄ@@Hf$ËĻ-āÖ8Å4æ‡:‰"hđ&ŒË,¨9ĩ%Q¸„+ūQą3ĈÅO ]Ąœ-čķ€a8¤4Ÿr%…xĖī^§49ãË6P”ø l7–œázXŗ`ä˙…Ë´Pž 4އEēŒäđšYĀĒÔ_Bž&€Ë"ŠŠR,œK@v$0U@ėũ´čķĐĪé‡ėFtdųŨĀ]vģ9BfŪ^؁…čåS€áąĀ×ÉĀĸ a)ėė5Xĩ€l¤ëd kŨË ˜Ž–ę"\šĀŅbį_4ŤXŌĸŒ60€i˙ ž>˜‰´ĒĸdæQŪ$Ķ€ą@™y- Ķ Ú¤-m` ũ –Ir/ ø=‡Ū0˙âãx‹;ôf[ȉč åĸ'IÉõœQ•GI]g´ž‡Nß yŋ„^š^;™99GŨŸŨjrĖģžG!´{ĩ2 Ÿ|û.?XĀæ÷ĖĘQtšėpB™dų_ŒēģŠîĶ뤙WŽSÆ÷ú¤fÜ)†r0ėĩ–‡sw §ä”ĩW@ŪF‡ˇ§Šá2 v#S¯#pOĀå‰Ā•Ö, U™â` ‹k˜A—ą€ņ80í6…žÉĀ•&õM¸9˜Y@XŊ‚âÜä"Eãą(g#=Ņ˙â•^ĖČ#`uƒ=+`Öė K"o´nGü„˛SîcŲĸ ÔÂ„Ķ+ąû…§eCĄGē}í€PøÂiĒs T3Ž1¨Š%`wî pcĩ4­Dąnj u 6~¸Ãn;rō­ĐËũ,)hzĘ5š•<p!ą€ĩųgŊ~o€E(.Cōķˇc°ČÚ@ī@ QŗĀ?N@"ذ^ČiÛb:ĩ˛LBĀâT ;"Ž/3€bo/؝åm!°ĻīKĀ.ÆOq“Ė0ŸÔ# Ô_Bķへģ€!<ęJ˙ą€Öŗ`5§ÅĨ uGé‚ txKŠķWčÜ܉hĀ€ŗÎĒ7¸Ö@E7ũâ§Üą!ëy›Lœœ§"/īŦTķ?,Ī |hkzĀÁŲugļ:e’đŽåī~îŒ@žÂLOĪcØL§”I&‡C§ ˙ĪWƇÔsc IDAT ^Ō0aņēQžČŽnxe‘ũQĩŨ P +h¯1f TCđŊ¸ĶÚŲ.u ˙āë$`ųŪVGuÍ%ía:°ĸš `Ο6°_žōˇgņV)’ę`õŊ¸ēŠácũR\/ AkíOÁËāM‚QÔÎąÕ'‚NäP9š›šŠrøÆČ@ŋ“¤åBGâ“ÁƒŌ@TL!Ō3ŧЉ:5ŦvåĀWkVĻ,Ɓ0ržd´jeR3Oö3ĄŸĖqž ņ 4°™.›^â] oÕQPŽŲt ,'a HņU˛@Y YËymąRē —~)ˆ;ŠÚÁJô§ŦŒx9Ͱđĩ$āS&•Î5ŠLĪ&Đ_5‡Qā* ~ Üe¸ę.Dü5@Ē]į?ОčĄ@ü Āj>šPw€ąqŠ]Āä$ dˆÃ9ķI@qōf,ėV FÃu `ÄSËÖL¤  yu}8ĐG ã.îÂkŊĀ-äÛé l{ĐD0Ą(BNR2ƒ:†Kģz´Ô0.žë!ÅPågzĘøĢ̘ŒtŦŝlSĢ–“yđ$úˇÄŦ—Hc"ę™6 Ŧ`ōh°‹˛R}~w›'ô$yĻÜĖmÉĢ ˛B ŋ^%IÂĀbâ2;ËC%o-ā*˛˛üĨŗQaR~°Y(iopTĸ—ræî[ķEĘgÛËoÜL&€›6°:ØŦšĶÍßVhNÂbđ\Y~ŨķŠs‚Oh'ĀŲš€ÁnįfWÉW“éĀš„Ö ŋ™ĪÖíT`…~* acA“"ŧŅlĪræąü ?žđ{ŲÅ šËû}2p 5îK¨6škb÷+‘ĸîPõ.’>8îԊ€{õEF€+ĒbëëY•žē€tãëČÎ\üypģZâ< ą°nū{w“Ü*ŗ$ ¸ ؁Ø-ļʼnWmpxāĄvpĩ‘ūúāđ@Cíā‡ē‡9ÔW™Yů%[œžĒ¸÷ŧļ„Äc$ ë/k'öđĨ‰Ž6`Ɲ| øNi |Ūä™Ü˙ǰÄ>ûāA$oÖÎA¤…ĪßE*vkņŧ{˜hŪÖë$Šž ‘™BųĮ[XsZųf1SŽAAņnᙀĪÜϜ`/D1&3Ŧ^aûŠ×ēZ~.Ē:C‘Ƙ&`^Á Ôˆ/3ÛO?!˙Ž3 >Ō—‡_•sŗáUL:€ĸ9]ƒi ŧĮíŽ }bR€äaJ^ dPžz,0" OĀä(P4€3¨ĸĩvHIĘK`3`å Ü=$ôUüv 8¸@ācŒ:€qÄzŋ{Ęw2x8#€ļˆ0FĢˆ'(ŊŒ06P{Á4Į€Ô‹[6JŒbŋ+Ŧ~¤°C;1BKęČ`Ų3˜¤“¤ČŊ`^K|ĸÆĐõXų€îúsÔöm`Š@ŨÁVžītčéËL˜Ö#jyS…ĄxĪy‡ Ķ'f/Ŋ˙|ŗ<Ą§)ËäŨëãŨBã`DmŽx¯Õ-ęx#`]5ûIēÖė(ŨŠ´ ‘UG\GÄÖ;%ęĀÕä/#Fŋl?ÜQi2Qƒ@| ØŊ1´ũvķģ)ũ‘Ž! =  ĸ0°ō° āę  5Ԝ#Đģ7.tHāSŠBWˆ¯NŦ€vÕēíkāG (ëđáb5vå3ßGÕÖŪpĢø €ô–ܐuqv‹-ÖąR,ZGpŸŊ@O-pņe SúĐę:Į?b”¯ŧÁßŊ°yčž„– <$žķŅē ˆßA6ę;Yßh՝čp°ViJņļA槄Anî Ļ(0kËĄŅV7 ä@÷iø+vXëđŲŦÃĨ{ŧ?;K˜˙ /‹0ĸ†!r^Â 2ųŌ8¸š%î9ž [ŧ,lŒë œÅ‰ŠY( ĢōËéa*Øí$ Ŋ›ę¨E­ÄCŋø0l†"œ˛ú!?ŧ8/Ģuōš‚Ša|LMQ’īįe­pk÷ŧéB+ˇŒā,Ėü%/51@Āëq™JAƒk,’ĻiøļúD üdÉÚbîÄ4oHĐŸY9~ŪĪm&+6īÅüW¤™a%0Ō°Æ Հ.foîÚt ˜i #0“€öWšhQëģ”V@ûI—-  @ė Ä6é¸Ę/ ­x :€|¸ŌTrŅ ŒJ ‡M÷G€‡į`P}Ä `ĩsˆĢä6ģL d@üˆékTãā ā@ĒæŲkZÆ—âø ˜Ō7° ÄŨLí ¨[; Sãāäŋ]ĀM˜X¯ģ§ŦÖą | NR&ä%°@`Z#ÄîęíZeĐí–˙ēœĩ€ĸvĄļŪRJæÍđę,ß"\øōAČVįÄ\]f0Q|WŒDeęsĄeLí/ƒ•bĻ[ ė cĮxĻ€å@ŊđyķB Ķ;+ Ø˛Ļ6Úí°Đúĸ?ėȂĀמÍ;* }@Ūvõz|X¸—b4Ō,kP'áS{ęÚv ĐŪmZ@,qsĖ•2R/°ŨŨ0 lMŖĒ hŊé+_^Ė´Y†F43y :‹áÛŧ†0rYՂōö™)Ôī„߃õŸō, é{a|C8ėĶĖŲĻŌ0ä.ġšŧŽwžzF ă„7zŲĻj‹éŽ `V:€ėĶÜ­j (<ŦĶ0Ō@w5hR ü›9YųļKŦ™î…1øŸ,'U[E€;`°: øøUāV–SH;ķ|I`GOeÄŅ߸n ŽĶà ī8WĀŧøŌ8‹â5Í((ŌŖØh:ĩģé‚’Ņč’Ŧ\Ũ^:]ÆõÃíØ‰ŠN’…xvņN“# 7# ŽÎHÉ—™›‘u¯ÜNĒŪŽî<ĄŌĐĒZ…´3ÕFhaG ¸Žcbæų,đČ`Á[ųé!°`ôטĀĨ0VĀbP R Žœ_˖rÆ=Č āT­¨Ũ~`ǁŲ€†,ë˛6“)CåĢt…,4ô9 …ēŨĀ`˛=۝Āâ‚@§ ˁitAŅb ÷<Ü(`†C˙ĐĄ¤Ŋ@§ârˆ-[0ĒFj¸ĘЉƌŦŒú€p'Ų§žÜßˁD ˜Į7ŨG0aÁ=%Âkž•AOîĸf s;¤˙¤‹Ģ#Û ôš@īëĀŽŽ¨“€Næ%ՁAæ]0ä_ė+ß ąĪ́?Siۜ&ž§Q2lRīø.1Ū,#^5žÍLgÔ?äøŒKoŽ×ūGQ/¤š}‰ëé&‡žÖ†ÆI’˜ĀM ,ŋî0T˙}/8Ļõ`Z՟P֐h¸ĢŽ„Đ8ĀÃ{ŅZŨvWmlãąĀÂįŖąĀÕéĀ] Äo•Ā;*Ķ‚Ž%\ÖĒ .ŒNķ3ĸÂI1DƑ\ÔF x"ųō6=Ŗä¯<Ė]ų̓~„ÔQ Oíŗ8›_Ũ‚–́hsYwšÃ¤ ~A÷aōĶŧw C•ŖLĪĸHÄqŖ8eČĢSeiëEMĶ*ÄĐ÷ƐÚ;Ë āĩM ¯…[ Ķ9`öŖéCB¸_Đ8=e(W¯CĻ<¨§Œ}JŌAÖ!- ūM^?P”i ÂtBŌčÕĢÃg%PÖ'›Āp Ļ 8&°Ü¸‘ ¸č1–;Ou ĖÚ éōtY ôL 7:ļԝ‰ÜCˇŒėĢÃą@˜ŽT@zė[@1˜úėųûĄ ”^—>báĒØmŗĄ#˜ˆ˜G_žtqØbČ}/˜Ņø2|ސG€ØŠĐ d™Āb,Ģ…s¸ėá¸ĘĐÅA厀LÆp+:‹gMā^ŖXž˜ˆŖiĄ ÆÕĩ0}™ņ#ã,n™¨wĮ–ŠX`%ÃŪiŧP‡ĄZōĘ´ĸ9MsyöŅęBā(,Ŋ,,0=ųEUb–Ęë`ˆ“›°âJšũtqXk›Ū§Ųē˜ßA(jĒøāüqÎĀ5ēËö__ˇŽqĢģ°z$íŨøš@#)Õ 5jûū9ķįÛŠ0ęaM4€#ËÅ— n MĀȃŋˆA# zÛëHmŊ×/‡P}JĢd§R-ÜãbŲBw¤Đ>᎞BU7‘ū€é´ÎƒÆGœęüƒ\W@$‹ä.Œ^yQ%§X¨ŽMuÜÃĸt `†3sŗ€U7‘Ô˛€zfâ5—AåîëJ`NĀ÷˜°ãm 5ØôšūáĖŠæ`tiPäƒ@L0ŽĻpîŠv`Ũã_”uˆT ËÁŗ Ąō°Š—Â\G<ĀaÎĄQÖāƒÔ 2ķ,@="‡úW hqTŒ83H|U¨÷i#X(lîւV&žĸލ$ĻHA\$ ÁM6ĐÍĨpXđĪĄ ‹€sĐ4Ĩ”YÛ6Ëą7É\5ÃČÄĄö†Äj\fDkpY,č"0a8F€ Ŗ™PŦV*Ã&˜-! xQŨL&ĮNIĻuP@üsšĀÜū& 'āŋJā _Š@ˆļpF„üÔI–kÖ€ņi@~:|.NŌĪz€ŖžU_“a hau„ q h5‹#ž§Š 32˛> ÷*āĸdęĐÉSW‹Eš8ĒôēŋƒũĀ Ô´0RÎĘ0—ž„!÷2œXčT5(¨ĄŽÃg°œßZ'U­Dž2đoˆrú.3ĐYķKPųč/ Äd…ŗĖôōAt™!\Ļ|>ˇˇU{"E`Î|¯u„ˆŗ,áĸšÁ(6† öķĶ+Ąn…j'wã_Ø"Ŗ€ %ģâŽŧ|ē‰.āBũ”úĄ|OWđģ<úg‹7PY}t hãĸ#ū] ëõƒĀžŌĪęĪ­{6ŖąâÍ'zZ§Û;ĢW_>TĀŽž“nā`S0ˆ¨;&Ņ7€›>`Ô|koØ„&Ņ!˙ĐhŅīšcÔÚįŅriāŠûâģĒ.šUĩĪg‘Á=ųDœ—ã˛é%Á@r: œwĢv‰DÆn~ ˆ]Û%P7ąėé%PgZĒņ–opKĀ=q‡ŸåĒ%Šjãņ‹Š,+Z~ԁŅ8ā ūœžÜŌŦĐÍđĐæÕÆ&0škaŒ[šĩ‡s%MāËįŸ~`^žmVl—Öi”ņ…ŗ’ĩö8c0Ięf/‡0 €2‚]D/EđīæđŧdQ¯4YīŋĄģ%wÔ-6q1rĸ™ÆȄ.NĀû„#á1ļOT%Ę6‡a׉§:rBĘŽ?ÁãöˆQBtq5įCVģ s8VDf‚‚ŪĨĐĸ#1 ܨJÄ*8ņI!L å/Ž€8DόjpņHˆá,ųĄÁËU@6ō}%hAz0jŖfQ6k6 aŊČ ¤ņĐS@n- O@Oaå´FŗŨM×Hŗ!Œž' ÄÕ­Ã.  tÛĀŧø/ ÃA`ú%`4(+P^< t…–)ĐúÎ0§Ž° éģH] %0éē5 cG€đL=ü õĄ ‡{;%0¨!‘[Ŋ•ę,ÆÚeĩY¨ÎbŽĀ´6BūįFĨ ÆdÄ ã>3į÷P Wp! ĩ4aõ1ĐiTđ:čš×AKŗō,vʉ­ë×päsø-å:?øPĻ‘G0Mv‚GÁæE…$˜ĸŨƒ†Ô=Ū`\ųA=嚸Īr‘ĘM sQÃG#Ģ‘j°¤}V ŖŠŖŠDęŋC@ûPĨĩ”ˆ,U¨dƃÍa2ĩō4¨Ë`tu ŅÃ#^ÚĀĒÔû¨ĀÁ^Š X%[îHģÜ„æ†õâúîZGC¯xõOíhŠÁ*ä?LČ{€õJļîĮķŒúZ?Äg‚9Ú°'„†Å.5üM™žbH}u˛nËí1'NFŦ[5#i‰ˇZ@žĀ÷VW)˜ã9°÷9ōļŪf´a \+ …ōõ€€^¸SËÜ,5‚Ķĸ ¨†õūYHO¯āŸ;ȸįAoÎAz8f§ ĩawŖčøž”GËĻĮ€i¸éÚM DëpAs_¸ë2+Ŧ ¸" Ģ÷r˙Å9ĀØyNgAßË ,(ÁaZƒ yįĄā96æũn—3ė'IėÄY ÎŖœ-îäM|ũ, zĀö߯ˇô SĢBdÁå71Ä´LC¸ĨâF„d˞z4ķRÔįÕa.&ėÁz:ø˜ą‡e9Ô5ÁČh¤[ ‡ŖŠ5Ɓjx¸O/Æ*–Ę…ķĢ+ îã뜯ËFWĩëĒõ !Dša,$-`JҊ%jąō€>Q”AUÆK TąÜG'Â:™ Veׁe–§ l ėQ@5‚ōH L‰Ā§jų7iČ€Đ(@ģ ´…(ĄÜ~C°8 LH!Ū •Ž:C@˙`Pę%4™SŖ6P ąŌV‰d@¯ A°%Đ5 0xĩgSö ô”P(Ž&™EÅ–@¯&ú,.‹ÂQjųe€™ô%ēĢƒ|Ž@fus*0efŒT:7ėYæē?Hš^똊4ےÜ–ˇŒ@uäxåd?/ĢĒ2ô—™įŧ-pągĘ<×Ájž›šŦĢԑi¤žƒū3ã:Hĩ˛EëBm͑G:˛7‡ī7R’}ą:ĄklPU%D ¸ü+zŅŁ4ąØô´€õ€ĩ贁™w Œj§Ąv~õßū}žÕOŌūéüņīž˜č^ 60ł•ŋc,[Dŋåë=Ôę$Ģ°Ķ &.öÖâ §{ÉØ^ÉK ū 3GõČ&”Ұđč[īž)  qsבēŌ7g N.ŒRNk3[¸; s“Aäü‰{Ö'onQģÔI!’ތX˙h ôĒw‰k—^ ¸ÕĪ(āĄ p/ßuięF?0ĢeXīÐŧ  Ü5€œ>ĖåĒÔņI@ķ2ŗ1NˆI%0ņš@ožrđƒGŋ ܈ŧƝÄZ"#ČgK@ēÉâ4eb+`Œ3rđîė<Ŋ O~ Õę2´‘|Ĩ•Âč‹eėڐåMúū4ØF͠ဠt‘Ėl5Ä뾔ĀuŦ˛Ä˜œĢ—Čz ŋƒ¨nķ˛)ÍU]VfĘF nAãfāø) Š@HQČL/,ęļ€fõ&fŋpč։@WVXuÅĀÁ č"Đ­€0i Ķ äĐĨŗXã> v(EŪķĻ~ô×I 8īĘ/ÆE€jhT† Ė”@ø~/đ­f wTIDAT@ŪĖZ@¯čÄĐj‡?bų… ƒ~ ĨރĐßķYW#€žķ@˜‚RÕ;Gu‡Ą L æ1¨—1C Ķ@U °ä‚Šŗ6žÅd¤ÕÄôq`˙Y\…ęŗ;–@]9Ē€x’Ā‚i }û|eĄá•õ ŗ" čŪëŋÜļÎûVv õūĄ É[–Ā”†ėÍėÜH‡éU¤ _T]ÁĐ*`ōÖ+VÜ3 ôđAūËųœyžp6 ā]ûNb˲ī^ŅŪX‚¤â¸pl*ÔéQËĸÂ- ąēR’BņôŖ€‡`Õ^ū 6yö-ũz2°ģŒF§Æƒ“€ĮK°;Į›ōˇoŗ°ŧĩ[”/täTą‡;M QˁŪAõđssģzš°Zuë¨āįīĢ ņh ‚ææõ§Į•˙ āŽØ{Qøā˙ÂRƒQ9¯>˜peM(Cfčc|ųŖĀœŨŅå/ŅaŽų3c‚103Č?WjųÉRļÛēõp‹Ē\Đ´‰ž. Rč.pŖLŪëūd‘Å˙Áq×Oœ*PAÔ>”ōJmS6°ZĶāČöo*m u &›EĶîķŋČŽĖÂ^`F@ €ė‚ĀÁ)­Â;RTfą zPYØ œÆŽęëáVĒéébåĖX šą÷„Ęü¡ŗŗāí1)k2nȜũÉū‹ßĩ÷`gsų{Û×Ôĩޤŧt‡_(z0_w™5ĐĀÜmŪʀëÂĀK túÉ$€­ˆēŦ_ėŌ)Ûi &ĶTš&,įuĨV™^āyĒ@enoĀķÉ€0éęs]TĀ,z™ÔĖ0ä‡ÂRQ‡)Æfö„€ >bҜäL f™‚ š^05 Ę0[⍴”Úų§Ė `Ū&ײĄėoöA,ĻäÔ˛€mP_ŲĖQŖ,wéT€ŸōƒÎm]ˌVōvŧķ¸Gōpîŗ<úȊcī}‘â™@=…ŧĩЧPĀÂÎa&ëáCķkŊ#@áä8nūĢĀV}ō‹ĀŽá$‘ĀĮđ¤}^ ØQÚĀB •m•ŧ|ßĸöxJY\šEO$DŽqdxp¨Nō`Ŋ|đíĨܐh}ØÕØ}đĻËmM`@ûŠ+˛Hā āęQhāũˇˇë m Ėī ČŖũõ…ēu`A@ëõ[>nÅ^Ö׃ˇÂŋ›ÃĶÁŒc­ÁKĶųą#3gc܋cÕ'B#ÅhďĘËĖU€ĩ|3Šü/Ą¨iAøú-@ãųČÚ@ˇäđeMĀ ^fę@ãu]G°@`„C# V@pķōρŸWŠÕājŗAāĮW€É 0Ä~’H~Äa¨?âߘH Ŧ×8‚B}ũ†j5b"@ļČÔX˛ _ÔÎâÍfsu ŧō<‡õRá…Ųŋ¸Ŧ€Ų•€Ēü.7üŊzûSŪIÜõúĒĀ—Á€ĩĢü0p8ĸū `5˛° 8œnÜo7āÉĀÕųI@8IԚ1ę­R?ʋ`9!āŽ€:åĖÛ\xNčOHQčō`š–—įĀ‹…Ŋįš~B˛ėKĢ×uĶNā.6°z÷âyŸ)`Ú<’ß ŒŨå}†‰ƒÄ˙+‚:0 ŧÕ­Äö*@ė†p˜Ė‚Š—L 6›5|+eũŊ 4öüˇ:ü–´Öä# Õ´‰ŨŽŽ}įuĐēVĘę@€ģīžp;oëw |Yîöņ3@:Ž@ßÚđ€“åž÷ŸWz%01€ŗ,ë­Š:˛} °õ§Ŧ Lõ…zրŧŦŪų'€LPBųēĐgžĢ€‹ ȝ¤Zŧúō:(7€ôÚĄŪŠ{ņ4€ē¨v‘0鄀ž\]Xíŧō îîĖ#¸J'Œ¨.3<úāđ¤ø§Ęā/ÔŅrũŊĀ÷Ķå (‚ßxĢ‹w<ōR6Žæ1JT˛‡J­ŗ39L(Ōī–™2×ÁŖĀƒ 8ú#æpÁŋD4ƒģʗg^u&æeĀ<ˆ$r¯Ŧæā$˛Ju&ŪJ‡üqā&ĶF)†*Ė$đ1ĮJ“ŒÆĻŒM`W Ėŧ 9ŗŌĀ÷Ų>—w^8‚m}đ´ząKҌ ĄLčģh]ČęĀ×'Xëü0Šīđ2@^P- "e&AUgú2Đų.ā#žx9 ŋÄIĸ&ŧ 0Á7U•äšG°čŽ5ĻôÁnÜX>É}ך°įNr2CĘ8ßŨ¤™fwŪãׁe}ųë@ÖēÕĨĸZ<\į~›P ĪKÍD~ļ€:?ÂĀ­IĪWÆ-`W™{“V•ĻÆZ^7`?u?Māį%€—ŠUų¸.đ-w÷&đđķG0wúBūØæ|8¸ŧ”|Sį™ĢQBČOĢ{ėų Ö2M˜īܧĒ“„ök}ø ũ°Ųdņ‹DĖėŦxđ{€°Ps äĶZđięĀįé36‘˜m$#! ĻXã>íe:@Øpá׊•uøđ◙jķ͝ƒŒķ;ö¨ uvy ûe`ŗ¨Uë/ ŦZūÛõ0Ŋ4P•Ÿ–ī{pD!bÖz<ÂĮĶæÃ^õWļ€9i jQXOX.ÛšŖ'ŪN~ĪIō`{xžõgq Ü4€›‰á$ų€vŖå{ËŦFØWĀâGãö7ßIŌLc‹/l¸âÂBzēÆ÷ƒ œFKX–”ÃA*Ė>å#ū^āg ”˙‘Ā]Œ†§Äū"āSz ŋÔYœĀk7đõDāw_f˜āĻ8Ŧv^ čĀ‚.ŠīlųiĀīŊĘjgč@..wÍ] ´ļŲ|B×ÁOņ•`Ŋnč‹Č…ĩÍ#û0 ÛŌ[Ũ€ã€]ĩ;uāję@15`qgėí÷Āp’äđžĐ §Ō›I3ä.ޞõ“ožÖ qāäāŠ@|Ķčs}Øļļ˙ -3›ŠÃq aíôחՏ ūˆ/Ķ|:đg/ÔD3°^›Ã+ä˙ō —wãthXʏáQX>ļÄkzjw?Ėz€ŠĘ÷8¤ôüĀ3úđŒØģ$ˇ.­9] 'Lē0= oāãĒĸSĒ7` +.˙@7Äh`ĸ7Œ-ÂäĄ)ÅÃ^Ėāņį'y˙ôąI¯ŨOBÍ÷uĮžÛ‘Ŗææ|šˇĶyĮ;Ē'/u×vž$]÷—đ4āŗšxn°Î⥁Ū? ”gņÖ\06b€ũkäü,đ]֋ššK <ãBũe`×YŒ@ĮØŲ5ŊGĐ\.›$0´#°đ‡¸§WŲÉT€Øæ`ü‡@|'ūW'0“˙vSy§>ų2ÝÁ^ŋŒŲ- ä'­_¸PЁ÷üõ Ũ .”u’āû$€‡ CˆIÛ§|Ũ&™ģ2Č˜đé]—Đœg­ ązEĢĐ$Ų‚ũz›v;Bū ČÎf:\‰fŠÎb<Ž>ē#nđøumČĸn Ķķ{Sē_ž“\Ĩƒ:ŋ,ԀeŊø(Đî^8šųû€<ķr@” ˇørĻģ ĖŽ LC/ķ!Û›ČœU•M¯ēŽļúI.„‹tōšÖ€oį“#9%u”†ąŅ@Ŗôu…] 4€)ŦįXn&üA°ģOQáŧČoˆ ũzVīIō3Å<‚œyø XœÁdíÚtkķĀ.Čē€vr%`†!ŋ‹ĀBaŌd€&Įßv.ô¯¤ŗ˜åĶâ%Ã&“2ː a“‹ĀŦ‘JãŠ@š2˛…¸‡0.3ųĖz=g~ņ…8į´\˜°ˆVĸ`ĘP:! č(×ē ĐũčÂAyŸЛ8đ]LˆY‹€’f%íušĀ=đ)讛0ЉŖ) ”÷XŪMz›ß~˜aD–ČĘ}oˆ[z/ōčCÕOe(ã<äļTE(ãū)ažU,ä˙v@¤Đ.yŨhÆŧÕmčԁũ“ Žœ˙•ĀtēĀ$š0Q@F@ČŗX§qĄ „˜@ŧĖČŗx:@jŋƒ–jč‹bų?gB@ēĨ´Ú%'ônĀ  gâĀv™pōÕÎđ˙:0unĀķ€]sˇTqŌĶt”ŋØ[Ļō߀7ā xŪ€7ā xū=@Ģėן0Pĩ ܀ÁĒģËũZ'I˜ģLÉÉŗøę@*fĨ žZWm€M <›Õ6šĐé×FÆėŌÕIĀŽįģËĒúŅē ˆ#Ū§ ´Ō á2ÃpíS̐@ã,ūI•ŦZģÎ8‹ŨōĶ-~ĨÆuĨeŊ‡Ę\Ø"ģ›{,Čĸ(÷Īīj¯¯Æk€ĩË{ûŨzúŦÃ*` °X{!āåūŋæ xk0XŦ]ŽtëéˇÂŪWc€5ĀÚéoWŒˇŪ}Ģę8 ŦÖÎ ü¤œ °XŦ=îŧą ŦÆŽø§ŦÖkÚļˇßdú8 ŦÖ^ x—xu0XŦÖk€5Ā` °XŦÖk€5ĀÚ'ā"āÕQĀ` °XŦÖk€5Ā` °XŦÖk€5Ā` °ö5ëđöéškŖ€1Ā`íôĀ™k€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5ĀāaęÁ˙•čpõÉ­)Ā` °vjāc˙SųĢ—O3€1Ā`íäĀËØĖíĶTĮĀ` °vrā'Ū°XŦ]>ŧ ØŦļŽķÖk€ą›žG…€€1Ā`íđąi@@@Ā×ŪķūxāCۀ€€€/ ŧīüņĀGÆ_ø•đGXü'|đe§˙^˙*đĄOž2đôŋ1 ā_>ö@@@Ā—Ūūāáƒ÷Īåök€ĩĶo =*î×` °X;=đ†đáëgŌū?ŦÖNŧ.|øø™˛ß€1Ā`íôĀĪęͧĄ>ŦÆk€ĩĶߎÆÉģįpŽ Æk€ĩĶWŦÖk˙(pņ/ēKSkW€ûÔÚā>ĩv¸O­]îSkW€ûÔÚā>ĩv¸O­]îSkW€ûÔÚā>ĩv¸O­]îSkW€ûÔÚā>ĩv¸O­]îSkW€ûÔÚā>ĩv¸O­]îSkW€ûÔÚā>ĩv¸O­]øëp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmæų-Ā` °XŦÖk˙&đũßë9ëß°ˇ–Ž[KG€‡­Ĩ#ĀÃÖŌāakéđ°ĩtxØZ:ΞgߎƒŗīĮÁŲ÷€ãāė{Āqpö=ā88ûpœ}8ΞgߎƒŗīĮÁŲ÷€ãāė{Āqpö=ā88ûpœ}8ΞgߎƒŗīĮÁŲ÷/<ķoøipö=ā88ûpœ}vāáp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmfũp›YŋÜfÖ/ˇ™õKĀmfúāCĪ {Ķ€ÃŪôā°7}8ėM{Ķ€ÃŪôā°7}8ėM{Ķ€ÃŪôā°7}8ėM{Ķ€ÃŪôā°7}8ėM{Ķ€ÃŪôā°7}8ėM{Ķ€ÃŪôā°7}8ėMœøŨÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °X| Ë¯nũđ[)×ŦÖk€5Ā` °XŦÖkĪŪũōú `ũ `ũ `ũ `ũ `ũ `ũ `ũ `ũ `ũ `ũ `ũĖĪNē¯˙z˙ĖöÃ%Ų_Ŧ_Ŧ_Ŧ_Ŧ_Ŧ_Ŧ_ūÛĀ÷īMo9_x÷Áįw˙|_xšÜũ āĪ>đđŸ>õ/ÔĮ_<đö āŸnŋxVāįąËõÜx}ëãW2đŋŸžxøČđöķ÷JüyĀÃ3@@@Āŋ3Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk€5Ā` °XŦÖk§ūÁGjx˙īŨŽIENDŽB`‚leptonica-1.86.0/prog/pageseg2.tif000066400000000000000000007714601506303110300167430ustar00rootroot00000000000000II*rōūMQÄGhė†H å\ĀЈ‰ Āä$s9PP嚤DDD†IGeF94å…V""$2VãœsÁIĸšP+DDHd˜ä?Ņå6ÕČwdpÉ‚8d‚á‘‘Ä#ĸčÚ!ĸŗŪGËĸ<`!tG":!˛āåĖžGˆŽ‹äqHāÜÂ#‚įōųÆ^0‰xČĨŅ|՚˛ŒáˆčG‘Ųs#†‘p.GÄ0‚äpË0‰sÁq  qČālܸ+`ĨPGĄą¤s#åŅeÃ4Ž` –G28ODDDHĒ#ĸ8l#€¨eDDH Ô›Ø $›œR8 ŦN苪Ų ´GhjÄD’ĸųä]Ņt`B8d™  I˛34GDx¸üDDŠ"č֊|ŽˆųäXäpBPøˆˆˆˆˆ‰\—.ˆč‘ō8CdDDJâŅŧŽ‹į]2"#ųĀ <Žˆã. $tmFŗˆË6ŧî™|Â#įDGČčē'd|â1ŸeōŅØ˛âXaÚ˜ˆ`„C"%āÂÁ‚A„ `ˆär(ä09ÐŌƒqÉņādČo xp9Xå‚rC”8A Cœr‡(p‚ÂHQĘrsĀAdW0ã”9!ČQĖ9ČjA`r Į(â"@ę ŽPå"YC‰1ÂG‚E|ã˜sŽ.M Ë,Š8 „p‚Äã”9!ĘrrC‘&9NBXäQČG0į ˛§(rC’ƒ‚Āå!C’ƒHä‡ ƒžˇÄ§(r‡Ė9Į(qC„#ĸ=Ūũp%ŽLŽ/ƒ(p‚ÜąĘ#å]ų7(p‚‚ŽPę/‚ (|ąÜ „G$8Aā‚ĘJ§&9N"%Hr‡Ė8 ‡(rC”9ãâXåPā‚ÉPåŽa˙øA„ሑ`^"ČęB8AFPøAA~& ą‚ âPĮÄF‚ r‡âX „\ĄĘ ąÁ>Xœp‚÷Ä ą(s8A}„úĄâÄKđB"qĖ8âø ģ˙ø‰1öâXåD'ÄąÄaâ !Ac‰NXˆA|b9NXá0‚Į ˛ŸĮņ‚ķŽ#åŲC…ÄAø‚ Į‚ĮđsU„8æ °‚‚Âqà +ūYNPåB8AeˆAXCC•p°‚ņ„ >ø”8AF0‹ĄņķŽWD °‚aˆAbqĘÄã”9C„ˆ‰!ĘĄũ‘Đ\`ˆøADá"#ˆA Oĩ™Â  ņė ˇħ,Dpĸ"Pä2˛Îæ˛ļeü_8卉C„!„PåŽTpADđ_áz(p‚ƒĮ/ÄXYCŽ9‡>_ˆ‰C–9Câ!ߋ/åB$Qōœ ąqô]B ÄDąđ>%ŽPå9C„ƒâ"@đ8ŸĮĄÄD ĸ aEāˆč ¸đe[„ Âøũ1ØBPær‡‚ !. Ds8Ab!•#ö#ä‡(ņ(rœĄĘ „ „ °‚ "ŽPāAâPâ"8AcüTG(|ĄĮ8å!(áČøAD\o…ú”8âPáˆÂ ąČˇŠâHS„"%ŽPā‚ņėĄÂ‚  ‚°‚ qá #„ˆˆė!,s9CŽ9NX’r‡Â Į(r­ /ãå9C„ø–9Cœp‚øŒ ¸AvC”ëCAöHŖˆøAe%E˛‡‚ŗBá"%8Ab"XáˆâS„# ņ8øˆ„aČQÂ#—Ø!$9C„‰C”8 °”8AeB8”9NPãūS„?ĮÄGÎ8Ab#‚ „"1ũAYC„ˆâ%8„`xœp‚°q,r‡(p‚[ųCœr‡âqĖ>9NBâ!â%ŽÕã,"+˜|D ą|O°˛‡„#„‚|DĄÎ:üDąĘp‚Ä|§(p‚ÜC”9Cœpˆč!8áø–8AA„ ˆQĘ,!~!„"9Į(qƒ/Ä}DJ§!Ė8A7•PūPáŪʥ„„På8ˆAbxũÄKĄÂ đ‚ū@Ēƒ”8Aˆ•}â0Ââ#–8 ‡(p‚øA|^8å4GĘsW‰!Ë.,!(p‚‡8åVK‚‡‚üã”8AÂaâ ĨÁđCĊ9C‚ ĮdsąĘ)Â\}áŽPåD ˛žĪLD °ĸ"8ņoˆ‰c”9Ÿâ/–8AbÂüDĈ‹å(‹ ;‰‡8á‹”9!ėÅq É'ō‡Ō/‚ŧq‡,rœ„qČaʙˇQC‘ .%0”)´;˜pAˆ–8A;”9V^Â(rĮ(qBAbXå^#„ ÄDĄÂqÄąÁqĘ „N9C”8ˆ„%ŽPāƒ# ‡!ņ8ācĐA „På ĘŲŲC‚ Į(p‚ņr‡) â""">XáĐ ¸„ˆš9C‰!đ@¸‚Įđ@ą(rĮ&8? °|ĄÎ>?‰Į!)ņ˙,r‡\Iá#~8áŽXˆ‡!ŽĄ ū8åÎ8Axˆ”9C„"?ņĄÁ0D‡,pˆč \N8 ą„Pá…°‚ÄŒp‚°‚˙Ä  đ‚ō‡8Aaėaˆ‰c„#”8@„DĄÂ Į (qq\1ĄņÎ8AXAx‰c„ÄvG/(rĮ÷Ų‡,}„PøAx‹ (w‚ąáã”8ˆ”9Į(qÄMqâ'/ņģū!PįĄĘ0å,D…$"Páâ"Xå%Hpž-r¯ øūqĖ8‡(ÄDã„,~XŽ9Wđ‚čö1e_’%ˆAA”8A„YĮ!ŽTŲCČī`‚‹đPAb"Hr‡8áŌ DKĄÎ>$W,aŌ-„KĄÄp‚ŒD ŗŽPá=„LsŽPå"%Ž ŋB%qĘD Ą„Âņdt”å|üp „=„Ž!9Į,r‡āŽ8Aaâ9c”8Acû#ĸ:#DQņqĮ‹Dr‡ &b=ø4B ‚ÄDąĖá#ūÄDD\ĄÂ# ‚„>?âCøA`‰æĄĮÎ8AųCˆAb"qĘ~ˆöPá#˙ˆœp‚Ä ˛‡8å˜pAb>På8ˆaËã„">‚ $œ „rĮ/ų!ĘĄÎ9‡"ŽS‚ˆ¸”8Ac„G(|B  Äã–9C¤X’ĄÁePūXAb,q(1!Ō!˙!Aeâq 8ū";#ĸ:#ĸ8'8åˆA`ˆ˛č§ČÄs>ˆæ]˜e҃#˛>\˙xĀB8§3ėĸ.fyŒž1›3 ˛8Čâ‘ãR qœyDt\ÎdxŽĐÍ#Š`eĀÔ åCŽ!e9Cö:”8@œA„På8Ab%^#AxˆAd‡(qĘ „DB Ę|q)ĘĄÜrœ „B ŽX‘ŽPã°ŋPī‚ ÄHXĊáŽ"OG!$â""""""""$ČN"""""""""""""#á”8Aáø@˛‡!q(pAxˆœr‡q áĐ@ž& ŧ ŧ ą,r‡/ÄąĘ,DB ) Į,ã„"MÄA8åˆAxŽPá ąœĄĘ>Hqđ‚Ę㠂ˆAbPų‡,qä ÁXrĻ9`i9†˜ä3ÁC“rC“˛°Ã–äÜá9ZĸQ'9A”įąË9NF9č{*ʇ+9ģ//‘čâ9ĮņC„áĘûķŽCū#ØAxˆŲC”?ˆ˜p‚Æą| ąŽŽŽ‚Â B ,DDx0‚ÄrĮ(tQAyĮņâPãÃÂrÜÆŪÎÛB"""""""""""!æp‚Į8á8‰C”9Į,B\ĄĘ°‚†Qũ…(ī(p‚KņķŽCė,ĄÂ KĄÁĥʧ.Är‡,x2‡(sŽBPčAbXáxųÄr‡/ķŽaņ!(sŽ9NV!_Wž%Ž^"PæqÄ b ųCž!„ī™Ę B"8ųĮ!8á#„8„aqĄÂJqQˆøAb" â8‹§,ĄÁâ_„Pā‚ū/DĄņÆĘ œDe#â#šđ9‡(0ˆčŽ‚0ā‚ÜDąĘ§‚ŋ ‰Į(s9CøA^#–8Ax‰CˆxYĮ,DN8Ag „a8An9!ō‡,|GŋĘ ŧG rn^XˆÂ(r(˙„IPâ$Qđˆå ŦCø…âqĘp‚ØEW‹,{ųOˆåÆ"!”9Į!!ÂDD ŧGņÜqCâXųĮ,FˆâqøBXâq !ĮūPå‰!Ęr‡!Į÷0īđ‡Ęp‚ĮãÁōCˆá ˆøADąĘB"8AXA–9C’q+!Ą"Pä‡,|,qË X8Ab!–8ˆA`‚ÄDÜr‡Į(rŸ˙ųĮÄã„”8A¯ã”8Abã…áa#á•$Lûō‡‚‚üÎX‰Cå8Aå9Cˆ„S„„qĉˆ„^9‡!$8A’ĢÅō‡8åC‰p‚ÄW˙aU,!ĮĘŋ/ėu.C„ŋß‘ĐBPaDYR:#ĸ8^8âPįĄÂG‡,DåSˆ‚ø‘G„$‡DT „HAĘp‚, ĄđX ^"8AePã‰C„G_â#”;  ˜AE‘Ņđ‡øzGņaxA qePūSđ@šC¯‰Į(rœ „| ‡J „ ą.1‡!ÄDK§!ĘĄĮ>Cīœp‚ÄD ļGDz#„øˆ„/û(r‡qá„ 1B¨(qG ‚āą!Ä ļ1r‡(°ĸâYCŽ!ePū]ÂAe"XåŽB#ˆ‘\ °ÂĘ ąÂ IXˆˆA^#”9Į(qd{’”x0ĐSƒ'Ž ›#Äp98͊xeÂ( ā…Ä.„#†r8,‘à ;ˆå8A ą‚#ÁvPá âX CHĮ!(& †„r‡GÂ)Ę ąÁđ‚)ĘĄÁĄp‚á 7 ü „qü_ĘãĐA‰NBâ8AˆåŽB!!”?ˆ‰Į/DB G8åBŽPņī0â#„xAvCŒČ.#Œ B8ËĸčÄGGd|‘‘ÂÁr>G~¯Âũ¯„ōœ ą+(s"9P]$Q (r‡ã §r‡(teå"X\Gae8@œPeB8AXQÄD§0â#”9ĮĮ(qķŽPá!Â á ¯q!$åâ!ø¸å‚ûT¯õûīTžâ!¸‰cøB,,ąĘx0b"˙(„ã„Pሄ"HņņŊčæ9Į(qœĄĘDáˆƒ„ˆAgĄÂD\ĄÂ (r‡aå9C„ !(p‚Äp‚ßëũ{õûũ5]åSˆ‰C–8Ab0eŽ‚ ŽPáÁ0øŽ>*Į/8å‰Į(rŦĄÄGÎ9C„ŲC”8@œ{ B9C„9Ė8@ąĮ,p‚‚,$8QĮŒDŠåūPá""åPâB9œDW˙ęB˙_ûžDÄDĄĘr‡,q,t\_ Äo'!‡) ØA WņÄ!,r‡(xADr‡, ‚øāaĄËrĮĄsX C‚”?yC„Â$8AaĘwđ‚Ä „§0ሄq÷&åPč,š ¤A˙üŠūÕŽÍxˆá”8„8åPáq…œp‚ÜYÂ*8@ŧAđAnaÁâ8Al,Gđ‚‚, …œp‚ÆĘˆ„8â"Ą”ã‰C„„â"Pá…!ąÂ ÄAž#‚.™ÁČgŅ482''ôB ‰ßč2¨Â#¸–8A_Ø ŧFĘ<T ŦqĐd üWyC„Páá"åq ĮĘÄsŽaĘą(r‡/‘â=đä‡c”8Ad(īˆ“ °ˆâPø–8A~9Nb#œr‡ōĮ,fFy>aĐU˜2‡!ØsŽPäŦŅīōũ?˙BÁú‚ĘĮ˛ q)Ę(ƒá CáaAė „x~"1ŸŪCø–8AX„°ŠĄĘŧDCa*""YC„÷„Ž^%āø”9‡)Ä „  Į.ƒ§(r‡HŽQb"ũH>ë˙úūr/ß°‚ņĢÄ9c„ĸ%/ádxCÄ8A~Pæp‚°ŧađĨ8~0‚ĘÁø=˜r‡!‡,r‡Äp‚p‚đ‚ü)CČâāđ‚+(p‚a"!ø„PåŽC”9C”8¯ü_ĮøBáųIDrœĄÂ …„"Īž<_#ŋīAQePå„å C‰!Ęr‡,¨,G°‚üD›„"Pá‚ Į&ÄW„B * aÄ_@‚đųĮ;ââ/ âzÛë˙ëũßÃ,}„Pá|På8AbCüQ!(Ät8Áa ØFB|ĄĘ ąB "!…a6]ãã ąūĮ,r‡!B đAūûīû#‡đąŽ=”8Ap‚ˆ„Pá…Æ#‚ (ƒā‚Š„qáĘ ąÅ…•c¯ÂĮħ(…˛:# ^B, ą8áB …‚ !X>Dã”9ÜãîPá ‚įΈ„‡Ŧ ‚â"X ą8å"(ú‹üFö­—~ũÜAūÂPˆžPá؍ąx QČīŋˆô!ØP@ž‚ AˆA`‚Ä … Æ„  ņ$8 ¸Xá/ˆAgĸ'ĄÁÅ$QÜva„ ¸ĄÁ‘áx@„rĮ(r‡÷9C”8‰Cœr‡*đ„§^Ũ?¸ãXīŪƒ˙ËØEŽPá|G(r‡ŒĮ(r‡ū„‹ß„>#}‰C™Â ō‡G "!^8žXáˆå8AxŽPøŽYCøˆAgp‚ūąō‡Ž‚"8R=a”8QË ¯ØPÂ/ČĮČ=‘GoíHŖ˙cŠ˙ø ą8áÄEÄ ¯ĮĄˆœr  †ĸ!>0ˆč"‡áīÁ„ʧáq…,x°‚ÜG(rŦ ą8âXœp‚ņPbâ"Pã”åPá!.4.GÂCā‚ÄDĄĘ ĩ„(īUö͝ÚÛöõû….ÂåŽQb9C”8P‚ĮĘp‚ Ž‹ Š)ĘGEĐEÂ˙^ąa2‡/ „ˆAaĄĄĘ„˛‡(p‚Áâ,Žˆá”8AaGD|Ž‚ČG/ĮÁ!'ÁQ!,}„;å@">p‘ō8ČáHųeĀđlũõíîīÚí=y¤|Ž2>\!ˆč¸ČųHáĨŪ0@ą„Påđņaū+ņÛ,#ŽPåAD Ŧ(ö<"‡(Į,":(†áū8”åApũ˜r‡"qĘq~ÂâBPå,DIC„â"PåŽGßÁ„Pá„9Į(p‚ÂPB""/î˙í>×ŋĩ^„DDDDH4GŒ+˙dt\ ŋ Ą‹- ˆņa8AGˆ”=øųC„ZAY…đ@ž‚ ß(r‡ Ŋ„',XADã”9NPá#â9C”á @†N]øAXō>Š _ˆŒYC„ˆåUŒŽ!„GAtÖí´aS};A§Î’ˆAaqÆ8ņaa dq|y!ķŽPåÖûB ņĐņË ģ a8Axˆˆû# ‚Ø\Dr‡(sŽPāyC„øâXá‘‚Äk/Å  ‚ė|G)Ę":X‰C„ˆAgĄÁĐ ĸ?O† „  „MPčOĄA•2œŦ:ÉNG‚œđg?ž0§"ĖĒÎfGgߕ"ĸŠJÂĻT PĢ-Ë‚ː`r‚Č5ÁĮ!đ…ėrã“â‡;ž ĄH: ÂĨpˆd„ãØA| ¸A  „!ƒ,ĄĘŋ(pAxúb#ųC•„†[(r‡/žˆœr‡(pAcõ(“^#Ū#á”?ˆAa ‚/ā‚ÄG(ņS„8„b"9ŖÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDt@đUĘã˜r‡&悴(‚Į)@‡ė!ˆDtGA}莋 °¸ãe@AoáØ8_č Ŗ|§Gô\~#ĄÎ9C‚øåŽV#Ž%9C„øœp˜ˆ‰C„ˆˆAPøAeâ&§.e>ųCœrŖØArŸō‡!)ņ‡3„>ČčŽ`ĸ9‘ȏ G2>n#Æķ™ˆsø2r(ႇ(rsŽg(r 9øđPåŽw3”8”9cž ÖDqHE^? ŊÄ ˇĘ\ ‚ˆę„‹ÄA”8qâ„r:#ŋųĮ(ŧaŲ‚âaė …üc.‰„"Xā‚Är‡Dx2‡!|r‡„(p‚cøA /ŽŦ ģ!‚ĘāˆÄDDDDDDDD~0„DC•ŠCœr‡5„C• a b"""" ņ„Uđ‚¸ŠąÅâ0˜X\aāAr‡8â9Į,C(ėŽ‚øACœp‚ŋ…„  ĘX˜p‚œ †„B ü§-„D ŧã„GDuũ)C• $bkEՄĮ„` [ˆÁ„ˆŽ$0áč Ŗ•đļGDtG|vąN\#ÃņĮ(rœAâBūPáåąĘŋA9C‚ãA<ŋīõMA—Ė"}štēUŒDã„G@Ą9c”č ĸ!ņ aÄ ¸@Ÿ„øöZ(‰C”9C„8–8Aņƒ.ģ0å^4Įx‚ „TXAp‚âS”:â"%8DuöB‘ĐA~?úL „ ļnM›B"ÂˆÄ ‚‹!üđPđ@‡ãÆ"/â=„x‡Ę^"%9C„qņüņ1„aƒáœqË „aYC„ +Į„]ōœĄĘ(Acüށcū +–ÅC"ĻgC Y ‰C.Ą&S#Đܔƒ\† åŽPåáam °„VĄ9c”8":.PáĐA !”8\_ÂˆŠ„âS„GQđA}‰ 8A8\|J<ŽŧxŒqã,`‚Ä{-|b<ĩŞFHÁ3H‘„ƒ@ ŸQ0‚2 mĨ‰!G+üaˆx‹ ąƒ_°‚ėq ö\C-Ė8\Cį\~„\ĄĘG(r‡, á!đ°a˛‡„&0ī„üvE×îĐz§§ĻOŠã„G@‚¸VGE ˆč‹äęČņ†QÆüąĘXŅAĘ&-`„V4X ąQ ĐũˆA`ãáđAe‚ޏŖ”9V#~_ˆ„Q0‚đü8P‚!ĮĐA<1úú'īŅxĖÚ/˜t_fæ‹ˇÁ>($^3ÉDKĸŒŽ„d1Á  ‚á„Gr‡a ŒB !ļ?Ša˛=đ‚ÄD ¸?×ãá”áä6]ö%U„"^ÂņĮ8ã•Ø†ŠĄÂø>!Ū!Čę, žīĐAŋĻĒŌm ÚAŋ"1‚)Á $fÆE°ˆč!ĮėG”8ˆAXX_÷‚ ˛ ": >ÄDKĄü? 8AEˆøœwƸx>%ŽP㊠ĄĐADã”8AC ļ+|B ÂFPå8AÂâ˛=˙ŌoÔt›éŋ¯Ąe9\“Í!>‚ ‚ ã„GAaʂ‡!/°‚N9! Áv1‡Ūđˆč"c”æB!âø„!‡ˆ ^BC8”â!ƒ ĸnPđŠxŒ ē\^" ąqžYPāéũ×ũim}„ ÄØ‚)Šü °‚ °°@Ŗáœr‡+,Fʈ„ĸČišCƒ ĸø ¸á8APá!áĘ,JsĀAl,ã”8KÄlĄĘ „IˆA`p‚‚°ÂˆAFĐCeT ÅĮ*Â#áxANdtGAqŖôŊˇũ}ą÷ftq"nôP„†‚.Âø‹aņÂøų!ÂP‚ \qĘąča‚ „!‹å^8A?°‚ė!+(p‚ÈáũHp‚ #”9Cœr‡Ž‚ ƒ„">(!Ę`‚ü0b,,XAD ĸ!üŽ‚ã.]E"ëí˙÷˙˙č* (Gö'Šä"=”:.!ˆAaû/÷á ŠC„ˆŽņ‚ ņA9qāâ/_Ņ„xøAxŽ%8AYCī”?øöE ‡Į!a”8@Ÿŋ[˜pAxû! oāøCžg,~ŋKÛ˙ũ$ģqB‚'đSZg+bĸXáaD":/„˙ˆAãųC‚#¤âEB#§‡qcÃöQâÂEā/°‚ėŽ‚ō‡, Oˆ„xŽÂ Ę (q* Ä N"ááâ?Čę˙Â(p‚ņ ŧzŋūÃ_ÛÛÁ.Čø—Ĩ’>‚PŽˆ „CĄ˜q‚ņ8áˆŋČīawÄ` ņ Â#¨8”áŪ ¸ \ސëã˜p‚Œq)  â#ˆˆ–:ה8 ą‡(p‚ņã(pAb=„b9C”8Axˆ@ŋūūŊ‡Ú]ĨëÂHE#ZˆD „bHrŸ…”8!cŲC”8 K„aGĘ":ˆ°ŠĄņCáņ/ŧhĄĘ ‚â#”>G!ÄDąĘ㏖9C‰c”9NXÃû $#„""Q.øCō‡+ąü§,qŌ˙$†ÚíĨa/Áåk+!!3Ëá&ˆú”9Cœp‚đļPåQøŒ AA‚ GŧXAxŋ.>Pā‚ņ‡._8åx”üBÄG3„Ž8ã’ąąÄD …ĘĄÂ vGˆâ„Er‡!a‚ö…‚Œōĸ9r‡ÄB ];¯˙^’ũ„0ĩ!Ŗ4‚1Ŗû+.&0О‡Ąė": ˆAb=„÷ˆAxĮŽ/„ !ĘĄōC„" "(pˆøA‚$QĖáˆ˛DãØDx/(r‡R‡"ŽXáĪB"Aw„‰å đ˜ADã”<*,rœ†(r‡…”;âqÂ# „ ´\Dl ˛œ|ąÄ  Â C”8A¨ŋįĄĘr @âYNB6> ąČđE8AD!|ĄÂ^Žs#âGAŅdfp‚ŋ‚ ˆAAãÃĮ@°ˆë‰r‡ķ;ˆADˆ.9C‚ ÄrĮØAcsŽPãcˆÅâ0‰VXŽPū Ąá„BVDĄĘ_ePå­¤# ~-Öc#ĸ:RtyJĄÂ~„_œ ¸ į „BŧDN8‰c„„á”8 ą!”øž' °‚ÄE ˆœr‡‡ņ”8ŽU”9CåXˆˆA`tÂᄎkŒGâ,ŠáЌJ§,B Ä!øˆå E…„ņ‚đ‚Į!qĘ „q)Â\D ŖđâSŒ™Ę „Do‚˛‡(q!Į…á">_F/ÁøũŌ"sáØDtl!đŧ9Į(pAÁ C–9ĄĘqÄ ąĨPė!(rŖ‚Ãđŧ °`ãx¨åSˆ„øÁåˆAÄĄĪž9V^/&m?Š—Íĸ… A{áĘĄÎ>#ØAa~!'!ņ+ Pâ$PáĐ ŖáĐAPø„áâ.På„ ,?â8–8Dt Î8AoĮ(„XAc/‚°‚ĮG˙d~B#ā•ČgE…áŽ%_âņXŽPã”>!ĆX˙Š„YCâųC”á㈄,,ĄÂ )ÂJDHŖøß⠂áPׅô^"å^˙ (DHøK.ˆųt1!,pAxˆåL,|AXœr‡(pA„„qō Į) ũqB ũūĘĄĘÄDåˆœrCåŽ%8At#˜q8á(ø ą ‚ÆC„Bû–AH+ĪŗW(xaˆ‰C–9Oˆâ,^G ‡ņˆŋ‚(œp‚ƒã,r‡,G"ŽB!˛c„ŽC4r‡‹#‹!"Pā‚ōCø[ˆ„G_čáĻ_.…GAt"Î9I ؐG(pˆė!Į _„/ø–9C„XA(]Ásq øEŽPå9Câ9c„?(s9C‰CŽHr‡ĘĄĘr‡(pA#”8 ˛‡ė^>Pá %PáDtc ,":[üB (¸a)&GÆ,|Ģ ‚ÄJĮ(sŽPãâ""Pį(ŒŽä‡Ô~. üDDX‰Į ₠á%ˆ ŧDGˆŽ^ū]â]„.ã„˙B5éBc–;„0A‡ 刔>>\9c„0ŠDDD`‚Čč(į¨(wʧ.ÄŽXųĮ(r‡!GP‚,Xŋˆˆ„”8.Pį ą/Ä` |#h ĩ‰WÁn"] ĄÁæœÂ°‡ˆAx Ŗ„\bPâ8Æ,DJqĖ?„”8Al šNPø”8ˆˆ–8AbA(p‚ÄD „B ŧGƒđa3D ˛‡ Ŗ‹Â.'ÖÔŅŽyņgp|7ĸ‡(p‚ŧAÂN9C”> šc…!Į BQˆ˙؈œr‡$9c”9c‘GcˆŽXå%PčēG)ÂŖ.„)C”8/¸„øøA{Ž‚ ûPˆø›IPˆ†Ađƒaââ_ã‘GãÁ „.ņq‚ƒÄB•C”9Į "B/áad{DJ":â„G\>Æ41˙‹™Ŧ „â qAąėĄĘ ‚ã„Pâ#įĄø>X_`ˆęPá"! î øŅ‡(sĮ‰Į(r‡]á{ņÁC  ‚âVÔž$uڑúˆ„?ņ<ø”åXøũŽ%8Abâ!XAu0ā‚ķåã˜sŽPåÂĘ^$W(pž& ‚â!8EŅ/A0‚°¸e×Ⱅ()C”9C„GDr‹č ¸Äx˙DAÅņ,r‡ōŽ/B#…Âq #œsPåŽXáØAb#„QžA~%ŽPâÂ˙ƒ,DĄØáÂ˙ˆæãŽ%,!?GDtQ3„ˆAFXØA ‚ "<Ä ‡ƒ†!4PáxAb^Pâ#‰ā ąÂ#¨ˆÄeˆP‚Ë!ŒQœ(";…Â?ĐAÂ>ÍXˆ ‹¨Aa6Dã…ÆA”;ã”=(pAaøn"5„ # ‚ )ČA‚B# AđxAx…HŽPåAĢđ‚ø Ŋ„E ‚⎠ōC„å.Q(ŽG)ãû:HL"čC„yc /ĮÄp‚ÆüG!…”9C„ ‡ČøAGĘp‚ÅÄĄÄFĘaeXū$‡$8aŸŽPåČī‰N'G@‚áãˆŋČčē(œp‚á?t›‚BšGĄ!¨–9C‚.‚(qđAqb/–8Ab'Ä ąŸÆÄG°¸‘GVP㈙ĘsB"øAS”9C‰C„Á1ĮÁâE/ŋ‚Ę^7Â(p‚ƒ/|Jr‡B 1ŽPå Ø_) ¨ Hg–G_ŧã#åЌ øåPü„ Ä_Ęp‚á"5Čč.˙ÄA”8 ^E0į8â%XAAåPā‚á˙|/ !>C”8. ˙˙ˆ1r:°GtA6W•*‚Ž‚đ?„„"a ÜDJ ŦĄĘÁžQĮ(sŽPųC”8ˆ°ŧ\ °‚ÄDH áĐ!,Ąņ‚ 0ŸÄh ģ!Á ŖøAr¯|§Žˆä߯°„.°Ę‰.!ØAxã„b?–8A8s^?ŲC„GDwĄÂ Đāx„#åSũ˜uÄ ˛‡¨xA{#ĸ<ņ °‚‚ūQ|Ąüq) ,ļ‡ĄAYĖ–8.>!!û¨ˆųCá!ˆˆA{¸ˆ„XŽ*Pį ąÄp‚ûâ…đ†1(ˆ„ÆØAxĮEđDt ;„FĶüžábČé.C(…Ä ……ųC‚#‘‘ŌĮdx„">aÁ?•x":ØAe8A`‚qŽPáˆa‰Į(r‡1b‡Î9C„G#¤9C„ė ĸS„b á8ā‚˙ Ž•ÄDmk‚#ᜠ°AbÂ8ႉ‡+(ábC”9C•B/„„ąøEīˆâ!ų ;ÄG,B"EĄĘ ģĮÄÔ8 ŧGŋw.>ŋĐŌžh„1Æņ ˆęQa”8 ą(刄/ĘĄÁar¯,G(sŽ!ˆ‰8>qĘĄÎ8A B4qĘl ģÄp‚ā Ųxœr‡(t’ņ) Đ_ Đ1xA B>‚(xEXQ‚ %X@Ÿ‚üwCžB ņņħ/ œB GAaDI?„/q˙„Bˆ ‡âÄ,Gđ‚Ab"$œD „ ‡‚Ęŋü¨ųC„āĘ˙ŠĄÂČiD&6T"]„_‚ árĮ(~ČAÁÄh”8@†>]Œ0‚ņ0ˆī‰Į„' ‡!Ĩ(pAbĸ,Ģ ,r‡!#Œ1øez%På…Ž‚(p‚Ęp‚!$8Ar:#¤0üa9C„˙ˆ—A ‹„1Ž%ŅńB=cĮ+üã”8 CGĄÁđ¯PáqņĮ(r­Ä ˛‡„PīŒ žŖˆ„G@Ŋ…ˆáČčđģüĄÁ„8CE~Å&Ax šx"‡)Ė8A*ā!ōŸdqB(rœĄášC•XA"YC„â8@ĄøáĐADņį ¯áeâ"qĘÖ7AN€ąĄÁ|Gˆ~ø!Čč ‚‡Žž‘Äfœâ_ˆü| ¸]„l ŧB ‡(p@¸ÄN9PŊXAc•~#ŪPä(åw„B üĮaˆ”9Cˆ„0‚ÂōŦ"<ˆHħ/a”9WČ⏎ ¸ÂEūˆú„ˆ™Ŗha˛:#Č °p‚߯ü ^#ŪåPá0‚ŋg X‰!ʎDãë‰+ätĄĘp‚ō-„…\ĄÂ",ĄĘ":ĄČŧDąĘđ@ŧr‡(xA„ˆæ…‰NPáĐ!q.GAŽₑÖsö"18ŲC”:â#”9ĮŽ‚ ĩņˆâ„\ÃÄ.ĘĄÁB §ŽZãöPå[ˆAaėŽˆč/ņøAC˜~ 9 „㈔;øAx‰‡)ņpĄDDDG ū;Hē U\ÔáҌ ž/œĄÂŽPå0~ ˛‡*ņ‚Į˛‡,DĄÎ9C ą qø8A]ø”åpâø„°‚îXøŽ,ããAFYC”8Ab%ŽŽ” ĸ"##¯ĶcÂ0†ƒĮ…÷Ž&§†Į(p‡ƒÂ(~ÁIåE}„9WЎq ņ0ƒüx„Y (ĮĮ/! r‡(øaœp‚KˆâXåXˆ0ŧ ŖųЈ‰œ^0°„ ŧ^<ķã„ü0‚ácr‡ „Páo(}„Yâ"GA9Cž;áü ĸâ!Æ0Šã„ŽXA8ˆ°‚ņc ­Ä§+s_ˆŋâmA:ĢAPå8ˆ‰\Čč(‡ÁˆŦp‚ƒ#ÁAø| ›ĘĄÄ ‡Œ":KĄĘĄÂkė/""ĄÁ )ČŖ„"%ANPū_ˆAO(˜rœ °ŖEŽPáB"C,u÷ąoˆAe9C”8D|Ž‚ˆ0ˆčŽ‚-Ęņ&9N"!ČøAq)ĘG!â:„DtGrw/eû ‡ČégŽĸ6XöPåv9NCã  ņ…Ë$;ū] šXå\b8âPáŅ]ƸšC•|!p‚ˆAq‡)Ę(æ|DGA˜A` "ãÁåÂâ1ØEP˙Žøœr‡¯ūGP‚8An#á°ŧ":D3a•y!Á×č ŗLhĄ ‚ˆAa8AXAc‰c„…„ /”9C‚ -őÂ\qį‘!† ŧG(q—#CŽ^#øß ąÆ.""g!/ "%Ž(b âS„ߙâ&kÁ%Į‡PëŋāÂã QĘsA>/(rœyF‚ ‘ĐEØF€AbS„ °áXˆˆīÂ!°Ąâg0įĄÂB!ßÂ(rŖÄÎX@œF]˧R:>„ˆ^1 …_P‚˛‡(qr‡/ââ!eq(qņņPˆé":#ĸ;r‡!Ę°‚Î8”>ÂÂAFßņĸ Ąü|H9WāÂđ/Ę/ôB#Š C3„ĮÄĄÁG˛‡(pŖŽPáüa„m”9Į(q”qÂВ ĸ1ãēJĄÎ<Ža(p‚áxaxA~?Œ!"F,/Ę|DŠ9C”8AgĄÂ ŅĮ'ņ@ŋō Į(pAc‹CÆ#ŲC•ÁŌ#樠‚Ęp‚ b$M×dzXáĐP‚Žg.ÆĖ9VBS„ $[/a$9Câø@Ą”<"‡Ę(å8A„PįņÄoķŽPãöQĀåpˆ„ēđ‚ 1‘ßũ˜Áč0AxåqʀD| ¸AyC‹„"]„„|J XApE×^Â$8[ÄB Î8ŽŖ°ŠB ŋˆA9CœrœDBØåSâVLwÁūPáØA`ä ã#šŽ1Čč!(~AXAGû$8A A˜F‰X„„œp‚ą‚‚áâ0‚˙p‡.”r:.ˆč ‚ˆÆ…(p@ą‹.Xå8Ac”9ģÅûaˆŽ|ņCˆ8…ąņŽ?AJĩ(r‡+âĨPá8AA„ŋ„ ąĐņqō¯†Pāˆå NPá!„ ‰N^"PāąP‚(rn8AbDŠá2=ĄË „Xq(sS„"XQÍeĻ%ŅŽhq…ÄB”á0°‡Čč ¯”9NPá0„ °‚°‚Ä ¸Aq8áPáˆ@Ÿ.ŧJp‚á9CŖ„GDwÎ8Ab@ÁÃĪ@âXžPbBøœr‡(qÄãų´ūˆč!B7 ˆ<Dt‹ ‡ũņ†!ņħ,|AņÆAS”8A$‡*øOĮ°ąPå‹ ü|ąĘqC°‡*ņ„BPá"Xå/,D ŧ!Ä ˛œ ą×ÔYNžã˜p‚ā‡8åPáb#•xˆŽP莂‚‹, ‚ˆķĘS‘G+ |TĄĘp‚Á‘ĐCü Ŋ”8L!† aÂĮÉ „$nPå¨Ap‚⁄„˛‡(pAb#ˆ‰Į(r‡§Äq,Ąäuøa"Dtahã„… cœpž".S„Jã”8AâPü,_\×ÁÄĄĪĐ÷å8ø/X¸˙({.GDtXAyO’ĄĐ!ĘwÄJw‘Đ!1ØXAYC‚â\8 ˛‡!(ũŧDãÄp‚Â|På] /å^XAtX ^!„G ‹!A(ņīá‚ , ąØô\~=„"8A˛:ĄĖ8A_œr‡!/Ęp‚,ãî%Xˆ”8 Ŋ…œp‚ņaf °˙EÕ%,p8áü ŧ|Jp‚ql ŖaGŽ"%Pū>PáÁ~På_„œq!Áņl ´Aø Qˆ ÂâHpQÄ_ㄈr‡)áE ¯Žĸ"0ÂqÜ! ô{ ĢS^"X\|Ap‚Â(pDuät‡ |ã„ü ‡D °?ÂYC„8Aev"%,..YOâ%ŽPáPã˜p‚á cå%XA BPå]‰NXŽ ‚ã(q&X>%Uč Â#Ą‹L ‚Ęí„AâšC‚ Á"œ Ŗņ‡(p‚ąޏ„PøŠ˙ á~G{0á>‚ ÄFĘĄĘXŽPá…ÅĘĄĘ „D":Gr‡(pĸ$‡*÷ÄĄĘ „q/—ˆ˙Øb'\FPxË ‚ÜaD0Š^""_Â0‚ņ‚á c„ Aeħ&b„øAxA˙ĐÁ”9C…‚ÄFđ_$9CîHr‡‚×EPåqÂa|Jp‚ÄL9Į(qčÕį‘ė>(„ ˆŒ=1ąĘ°‚N9CƒöPåPāb$ å#šÂâ6XA.Ž"!Čč,{(p‡‰‡ På"qĘ":ˆ?ea Ę/0¸ī î9NPáb$ũƒ#ž„b*‘ËÂ#°ŠąÂ Ä>kÁĮ(rĮÄã”8„G@„JㄠĮ åYãĮ(ÆGD| šĮ(p‚ávPå ‹ĄÂ ÄGĘ Cãåâ /Á„ņS”8ŋ čN*(q(pPˆøBQŽ!pˆáfB"Pဂ‚<|ŧÄB AĘoŧaa‚ ‚ß ņ„ÁĮ!ĮņÅB a{øŽXḈAgŒDŠ8":üAqÂJ °b.!øųNPá$8Acįp‚+PūaÂâ"Pį …„2ëđƐCŽB8‚ Ðá,Gb"PęC 8áå^8Åâ;ø”9C„ !,r‡!Ââ>"PåYCˆœp‚ ,D|ã”9CŽ!°‡Â C„á"âXá1Ōũ":ˆie8AcŽS„á' ° "C™Â A +Ÿ,)Ę ¸LŽ‚Î9Câ"#øAB"^Ax˙Ab"#S”9¯ „ĄÄYvˆ–8 Kˆå8Ab&ã„!‘×âŒO(AXAcá%8Ab"^",Ž‚ƒ-Į^#‰œĄ˙Ę ąÄąÂ ÂGŽP∸ADK „wätG@žé1KA{ŒYC„ A8AeŽPå"ö"PåXåâ!”?ˆ‰q(r‡(rąÂ8‰Į!,p‚Įq<||G8ø ŋąņ,p‚‚Äv_õEú#Ąˆė, ‚ˆšC‚ ČÁøAƒ„c‹˜|G˛Į,s’ XŽqĘĄÂ Į) DĄĮ8Ae’":D Ą„‰c„âøø‰Į(qʧ!\øm™á ¯ ¸ QˆˆAaâ8‰Ÿr‡Č`p@„B 3„!ˆAAc¸A~#„â%Ž6Pâ;# „ĄņS„ˆ–9C”>#”8 ^B%ŽPābHrœ ŧDÎŦXˆˆA^,Ž‚(r,|N>qü ą‡8åN"%‰Į,X„á°‡$:â"Xär‡(|Šæ B$p‚ËDJąĘĮ(pĸ?ePå>#˜p‚čbĘĄÂ.ĮôGVa"C•aˆ”8\H9CˆˆA~"'Cáâ%Žaōp‚ĄĘpáœ|B 8ų!ĘXâHqĖåU„åPሎXˆAvDB (p‚ÂDD§Ž‚ "#yõņâĘ ¸AvaâA,N9‡ÄDä#ų9C–9NB'ĄÉ#’ŧDĄÎ9C„„å8ˆAGˆ‹0‚ÄB ;ˆˆ„¸Ag „ˆ8AaqüDKĄÄrĮ*ņĈ”9‡q(rœĄęW­ĸ:¨ˆņž‚ę"g(r qˆžPáâqķŽōĮ!ĸĮ(p‚ÄN9œG3”8"8R"%S”>6"!ŽXåAEōCũPሄ"8DtWN†>ĸ§>"/ HKGA‚Ę":# C–8A Ããf§ b%ŽPå8Aã°‡(q…”9œ ˇ,pĸE㈎MÁ$8AAŽãåBL#–9C ‚âūq Â|ĄÂ 1Ęp‚ábųCˆ„œp‚Ĩ.ˆÂ "%9C™ÄDB ąÉž#•e^Xæ-1°ËáĻąãĄĘ,IBaö„Pāĸ=ˆ‹”9Câ6X Xã‚øˆÆQXƒ˜sŽ[ˆøA$A q"ĘąüㄠčąĘã”9CŽ%Pîö^;# ĩ!•—-3§îGH §‘(…‹!œr9C”åB"Hr‡"XáG‡,HŖˆâHp„#‰Į(pc„8ˆ¨A 8å"åPáŽXá؋ˆAXAb#œ|XB8A_ˆá×>˛mˆ˜Ęá2B'GchÂ>d|ŧGÎČŌ8ޤGd|Ū}‘ŅpĀ"[*FgrøŠá›Aā >‚)ÉPå$‡) ķŽaÄKĢņ,r‡ Iä‡.ÂXø ą ĄâPáJąÜA ÅÂDIPā‚ÄGÁÄDĄĘ(Aˆ–8A0„\KĄĘ`Ę#–8Aą;##¯‘0e)Āôw0($ HD‰ĩ"""ЋB""0A•P<ŠX2•`Ĩ¸„>!Ø[”8 C‰!Ęqq‚ÄDąĖáƒ÷‰!Ęp‚J  Ę „KĄÂX ąČîĸâHp‚Ŧ ŽQ‚†""EĄÄ ŧG,p‚(r‡"$‡ÄL>Pã‰Į(pˆč ĸ!' ŧR_Ū@ņėwßá xrU]œSˆāĸc”8Œ0‚$9NXâ"9NPá"8AAã‰Į4‰C„#ÄwĮ+!ŽPá8@˜b"9Į(r‡á9c”å8AvP優 §.CˆAâB 3„â!`sŽBâ'¨ ĮB%ŽPá8ˆøAcŪ"?Âė † (qCž0‚؈8„”<"C•x@‡–ęHō.ŋČ ŦũĶÁƒũ @‡+”9ĮŽ‚ņq(pˆčŽ‚žDtGÂō‡.‚G0á‰c‘GĄÁ "! !"$QÂGʧ0ėXAa!ž /ÄĄÎ9C„8„"X„!""YCŽ$‡8á0ŧ$ˆč„""BPá ø„D ˜WūĢôœ–‚ߊ,„ˆ‰NAøAxˆA0˛‡ÄDĄņ,sˆŽ'ĄĘDD§!!ÄJ^"C”8 ŧGÁč ¸”áã˛=ō(åYC„ˆ ąC˜p‚ņ+Äaâ8ž ÉS„ú„ƒVuūīđƒ‡ũŅCŒ(2ģ(p‚E‘ŅŽ9NS„$QÂDDDK§(q8æ ˇ ˛‡ėD§,_ķˆã„!#‹(â&r‡)ÂA?”áˆAYCÂĮ*øCŲC„#yCˆŽ–áZB?îūõ8w^ūÂ|r9Oˆå[ˆŖ„Ž#ā‚Â# ‚ˆ”åŦDJㄘwË „ŠåPę"8 ŧGEŅ’ŽU3Čųt]Ččē!|ē˙×ôī¯*Ô ĸĄ Į(r¯ÄąÁG! "8å¸ãøáˆŽPäĄĘ „D ™ˆAb"CˆqØB"Pæ,ĪãXø@Ÿ,§+Å ‚ ÄKĄÂâ.W#œp‚ĐPĖAã‘áđ29D0AĮbĮü?ˇô?膍ĄŒ ‚Ęp¸8”á”á"Cå%ŽÄl ¯AÄ „DΉ >"%Xáx–8‰Į,r‡(p‚Į‹…Au„â]„; Äã”8Ab"a `‚ėŽˆéøŽË’(qĄĪa4(Âgį”)õđīīH&ßđËåЊ„B„ą Į8æp‚ØYC”å!ÂD|Ģ(qĮ,|J ąĮ!œpĨˆˆŽXâ#”>ąÂâ"!”â"^Xá‚ ËĄÄE.ąÛŖšC„†Î8'o?į‘š˙zkúwĨĐŲN8Ą,ĄÂEĮ ˆúĮË+,DąĘ§!œq! ąĘĮ,HŖ„a! ‚q. q8æė|§(p‚ņ| ąËĄņĢp‚Ô7&ʀB.Ŧ㏠q8æE3Ā@˜¨A ~˙׸zōÂeP莈č!(#‰!ĘÃôB‰Į3â"Hrœ ąÄ ąŠ9CˆAYC‚˙ŽPô!J-8OŽÂ !wÄp@ŖÄ °Ac˜p‚ˆAž5ĨŲt8˛ąßeČ+- ‚*Ú÷ŨĶë„8„äQĮņė ¸`b!…! ‚ ŧĄÁņ ŧDr‡ â”:”8D|ŽŽÉâÁđw{ ̰JA%Ëâ?ī˙Nõđ’ŽŽ ‡|׈”8 ž#„„â%aÎ>%8Ab"!%U‰ â!""ĨPâ#„!”>8‚.‚ÄÂr‡ „#˙Ž%8Aˆ’ā†ŠD*Đlē"úΊPDt!¯ß¯éŨp„a„G|Ģ+ "!„•e!õĆXâXøč ¸–9 ”8 ŧDIâ!(qĘ ŋĘ žXá|B °‚đ‚Į0į „bĘĄÂ#áAw#ī^Vŋ!6˜,DÚĒß]cÄ °‚ŒEō‡(p‚ĮÎ8AD(ƒā‚ÄGųCœp‚Į,r‡/ņ˙!ō‡QØX°˛‡ņņņ|ĄÄDJã„GA1•Øŗ°¤GG}Ž_ˆė¯A‚đ BF/ßÛŨ]ëÂ#¤„qüC–8(ˆˆ„ˆ†×,q"Ž^"9c„9c„ˆ‰Į ËÄ?‰C”8AxöPæ ą,r‡,G$>"HsŽPሉC„ƒ )Љč6'’C@•‘û.Ą ŒxAĐH‡‰~õ˙NˆŲC”8A^%S“B,éCžx*ō(ሉc”9,FĘ‘ĐX˜sŽPá”>6PåS`p‚Ä|ã”9œ{BޏŽ>"á' ą,p‚Ÿ!3”8HqdtGDw °‚ˆ‚#‘ŅuŧP‹)Ņ›˙¯ëŽëŲŧ#qŽ>S„!‰C¨žPá°‚Á‰C‚ ‹(r‡(q8ˆ„ ÄrĮąq „."CŽ"'Üp‚üD „DwŽYCœq‡(p‚đ@„DąĘ^!ÂĘDp¸ˆAˆėÉefšũŒĄÁ 9ģˆūÖū˙Ēáąh °‚(|q.ÄWÄG ˇAqŽ\8A c–8ŽXábå’ …Aō‡8åPá’ą!$9!đ‚Á8ŽaņDã™ņ8ሉ!ʰ‚Ęr‡(p‚ áÄiGÍņ‚)ây)ŤB.÷}ūūÜ †dX‹˜üD Ąâä‡(rĄÄI8A㏕Ãå8‰!ÔEĖ8 ‡‚‡ ˆˆœp‚ėJŠ9c”8’ÐŖ”9V>ˆå8Aa8Ae>!„#Ų‡(rœ „B œ ŗŽaĮ!ĄaŌÂ[+„ĘX˙÷˙Ōņ —ė0ˆčŽW5đŠPā| ‚Ęr‡(w‚ąŲPa‰C’ĄÁQ"$‡!„'ĄĘ%ˆ’ °‚)ÄN8‹ ąŽPåX„8‰C„8œp‚ „DB 0ãf ‚â9NXDtĸ#A"8ŽPēß­é'wøHpą =„GHqÁâ>PåX“„<æ #”8ãe$QĘJâ"Pę"9!ÄG)ņr(å9C”8A‘G°ą/Į8â"X ąåˆá8‰C”ለ´N„KĄ0‚G˙˙­×Øą,ㄠ‡đĸ"YĮŧJp‚ņĀåČ鄉ĮÄIā‚ĐįqrC„„’¨8ˆæDX_ã”å)ŽPå"%Pā‚Ę ‡Į(sŽPã¸Ao‰Į(rœ!8 ‚fVNĘã†G_ģ[Ö¯ŌÔį,GŒxD‡,GÄG*ĘÛ(|Hƒ˜ˇP)c„Pá´Pä‡(r‡ÂN9C‰c•b$W(p@„GfB"Č莂ÄDMx¸ŽPxŽS„ˆˆÁøČč¯ČqŖytQÁđ‚iū÷Ģõ´1°Arč,&^'ĄĘÄã”įĮ*qĐßÁA‘đ‚å9C…„+øœp‚ˆ"Ÿ‡8ü ą!(p‚Ę,qnPåC!"PåX˛:#ƒvG@„AĘĄÂ Ĉ8â!(!Âp|ã”#”9C„‰Į Aˆę !”8„"" â#ˆˆˆˆžUˆâ#Ų‡3„ã˛:# ŧ ‡0å8Acå‚ Ģ 9¯ßßüƒ$÷ü": ƒâ8”ሏg ¸A{†¸ˆˆ’‚Hr‡+,Jâ^.8AxˆøP‚Ä ŖÄ~ ˆˆ“¤‡ō ˇūĶ[Ã}vt_,"č*Ęŧ ŧã”9Wˆņ0‚ųN8ˆAˆ„’ÎXė!(r¯øAyN ųCž1ęÉŅ‚CüĐ ī_ÖÃë¤0‚ĮÆL ŦĄÂîCü–8A ŽÄDå–9C”?å8A âg(|ĄÅ„!ƒ‰C„xˆ”8!áÄąÁdt'A2’/áĩOé˙r:0ââĨ@Ѕņ,§ÄDBz+†ŗËûũ˙Nû}ta šwŽPáq1ÁQ‡Ä! ´9‡,r(å9C„PįÜr‡!¤9‡ƒĮ(p‚ÄrœĄĘQ$8Ab#”9C Ą(r‡…ŠQã–8DwØA š8Šuũī_é×˙!ü ĸ9C„B(pˆäGDtŒ"‡*Ę":.%Pä0åPå9CĀä08Aa9cĮņ~"!%ŽPåqĘ„DĄĘr‡ã„ˆųN^%qĘ(ˆ„”áĐ,B ‚ C”áâ\DR˙îŸ ÷˙Č#•b>qņÁøXø•qâ/Ž>XA>\„œr‡ĘĮ‚˛ #Æ.Z„‹”8Ab#„„a9C”øAP@žå_ˆ”8AxerčMHēūú˙¤îŪ–ĸ.g(„ "aĘG(p˜ŽXAÁķŽūA(TÄø‰NPxŖ”8AŽ%9C”>$QÁ8žPāx‰c”8DpĀ/°‚üĄÁĐADq ÄD_,p‚ĮÂĮë˙~–ß˙b0‚ ŅC•ذŒ8AXDzPá|q(ĄR‡ą(øAcåv>"\Pâr‡ĮÁŽ#eaÁDN9C”9Į(tą¯|G –9C‚ áņ.„—Ba~ûú˙_3A<%Į, „ „D Q„G.%@ˆåŽPøˆˆį ŦC(œ(rœƒ‚# ądp@„ĄÎ>$ĄąŽ(ÆC”8 Kâ"XL ąÄĄÂū%k÷‡) Ą„Šå ˙¯ôŪũt!< …ÄÎ^>PåŽBÂÎ8AYĮĸvPåXA„A0ä ą ¸Ž"PøˆA`‚Æü§ĸC°ˆ°Pā{Ãū#Á”8 ąđĄ0„QaxAb"%!Dt×÷ĩ˙_úë#”AJņˆú^‡ށĮÄD ļG" ĸ"HrŸ,ĄŲ|/q,l ‡(r‡„X^Ąœp‚ˆAq‡ˆq!(p°B%ŽĄ8åPáãeTŠĩūŧ”õ˙õō:‰W„^ø”đ‰Ž ĸ=ˆ2‡apcePär‡R‡Î9C‰á#Ž"8åPâ#ø‚8 ŋ‚‹Æ ‡-ņ,Xˆœr‡(q‘ČŽÂņN8B#ßü5nŌ§˙îAq a„`Šr‡(„8AAō:(’/‚HQĘq|Ö6Pä08Ac‰' \r‡!G!Ä$Xˆ˛:#ĸ:#…„… 8 Xˆ’ŒG) Î8A`a•Õ¯˙@ß˙ũvŽūĘ ¯Ä\B|ÎXˆį†qÄG ŧ9CøD|"ÄG‚ƒĄčDã”8 ^"I ŪQ(p˜AA’ĄÂ# ˛‡) |K ąahz˙aéë{ëė ‚Œ]ž#ŲCˆ“r‡!~Ė8Ay BA.QHŖå[H(ĄüąÅ‘ŅÜDDĄÎ9C„Gl ąGDxēDr¯ō‡,D^ŋéĒû˙íQÎ8AYÜ(ųC”ሑG(uÄB ņÂDDlĄĮŽ9CöY Sä(áŽ*Xˆ‰pŖ‰Cœr‡,DB ņ9C‚"'Ęp‚á œĄņœĄĘ(ˆerĨ߯O˙ŌņEņ| ŖĮŸA §+ 1”9V&2Č`p‚ą//Æ\DĄÄD ŧĄĮ,rĄņ!8á1dx…á!ĘĄÜD ŧ|r‡ å9C”8@¨FC”9CĄūžƒOęŋëâ#žDĄĘ ąq@„ „Y åPęXqŧ ¯‚ĘņˆžXVQB;#ĸ:2š’˙ú˙˙æĩ%a‹á8‡&>!ÄqxŖø8įĄĘ…Î!â!qÄ ™øˆåBqÄĄÄDąÂ.."^"!‚ øBXā‚a9C‚„ fQâÂAĮ˙xOt˙ũt†PãÂ|ąÂ !G0áŋõMĻõūĄXA`Ž</„Süxô!2‡ á$rœ"80G G,~ ÄDN8AN`„‡ „r‡/ ‘C¤ŧQ(sŽPáãČQĘŧ_(xĄ„ ‚åu¤F´?õõūŋúü LqPˆč ĸ'ī˙„B ˛‡Ž‚ ’ÜqÄDĮ Į+ąĮ$8‰s"!#Ž^9Į(rœĄÃˆ‘ĀˆAƒEQâ2¸„"1ũ.Ķ˙˙×O'ØÂø„e"]„?0‚Čh ĄÅ”9Į, ą(rC䇜ĄÂHa )ԇ}‘ŅŅtÁ !ÂûB~"BSŅs‘Ņae9P‡úKßß˙Ĩä~Â(p‚°‚ÅGčBq(p‚öf!p/„Ä|DąĘ§!§,q‡<dxŽˆø\.đˆč‰ĮPˆųR: ņ‘ʆ0‘ūŊV×õ¯Øčˆå@Ap‚ˆœrŸ!)„"C‰Cœq+$9C„"$‡(q‚Ę€‚Č0áAā!˙)ÂDE‘҇!)Ú!Ė8AxˆA2:# ļGA˙ *Ũŋöë×ʰ‚ňaŌßˆær  Ŧ ąåXĘ˨!–9C‚ˆˆAÄDvGDtˆ‰C•aqÁC‚ˆ„Œ^V8”áˆãØ^m~ ŽūŋĒ˙­Ô  ūQ ‚Ã{`˛Ŧ ŧq) AB,|DLá%8ˆåqÂDㄉ ×ÄDä,s""XåS„‘ŅņĘĄĘr‡ˆčáž'( ē…üWō Ŗūŋ¯¨~G†Wņa#”8@ž ė „ _ø X–;ˆ”9NQx‘GņĘrcŽw8A"@ĀåPá‹ūq Æ[ ‹‰!ĘŧN8Abø„Ađ‡Â ˙¯ĩŊ?õŠčēâS”8A„„,Dū#xŧX„ˆ‘G8ã•aˆA~C@å1ŽS„$AĮ8å$‡,p‚ņđ@—ĮØYC‚ÅׂÁ?ār9`  ŽŠį_íW˙ũkąqˆxø‚!G0á=”8FĐ@ųNXk(sŽ"PåS„D!C”8DtG@„Ģ+(qĮ0á$(áâE§, ‡Œ^Â/üD8 ŊPņaã‰C„",.Aq% }}_˙˙FŅtĨĐE†#ˆˆˆ|Ą×l(‰áî#”9C„GA”9ČAņ˜Dt\r‡ Üp‚ĘB8åPá„EJĄÁâ>|°¸ü"p‚ŧD{, ąË€A}l×ߡ¯éWb8ŽGDtĘĄĘ{0äq ˛‡‰c”8ˆˆˆˆˆá"XˆŽ^"]„g(p‚‚‚8åPõˆøAE†øAb'Į(rœ ŖGAaĐAđ‚×úũ~ę›Â˙ds𹇥0ፔ9V—ˆ—â"""@ĀåP㚇Å˙3‰!ĘrĮ/Ÿ°‚Ä,Dp‚û(žã”9C„ˆ˙ø‡¨ūõ˙KÕeƂ A–8A_„ 8&Čá"$‡(q8ᨏšC”8At""Pခø…ÄD ąĸ! ×ōœ ąŒĄÂŸ__N˙öēü!(čAŲCøÁĘ‚ĘsAHr‡ H9ĢÄD„a8AP9C„ÂŽWã”9Į(r‡!G„S˜pĸ"đüDJr‡D{†W_ë×äĮ˙‚_lvAl ´Xå8㈜p‚ŧvXå"Xä‡$9C„‰NPâ7…ˆ„•”9Į,|Kc,ĄĘp‚č †ĘĄÂˆ„h×˙õņ׆ZX^8„ˆ Xˆ¸\DJ ą!)ÄD  ĘDá|Kr‡,p‚īĮĪ 9CņXĐAaA ˇūûūŋ^ˆ‰C‚øAeFHr‡3”8">,ÎC‰ ŅĘ…DDKĄĘĄüs8Ad0øˆ–8Ab#å8AbDIXa9C…(|hô_ëūÖ˙밊ÎXaŒ#”8AbDĄĘņ‚Î8Ab9C”8AbqÍbA ´9CˆˆöXˆųc”8 ^$‡)ņR‡"PøˆAâÂÎ8Ab"PãøK÷Ķë×ņŒA~,,GœqÄŽŧD§(sĀâAq˙ށŖ”>B9C”9CŖˆˆˆ–9C”å qʰ‚Į(r‡a.%ŽPå8DtG(P‚ņĮ(pAp˜AequūŊwã~Ŋ?„‹å^!šCå8AbøQ<ĄĘDvGDp@˛‡ÄD§(p‚‡!G$98ˆˆå8Ap‚‰C”åPøŽS°„”bãC ō‡"8 Ŗcū x2Ēãū¯l÷ pEŽ/(|qĮė"‡$8DtC’¨ņ"B‘GqĘqŽaÄDā`r‡!ßürœ ąĘDPā„B /_Š˙ ūú˙á B`ņ§(p‚ō‡-ō‡ā‚ÄĄņĄÁábqĘĄÁőŅ!$8‰c”9Į Āå@đq 1$8Ax‹áâ!äQËœs8ApB":(ˆ_áČ6?ßëí‚#áfp‚°ĸ"qüDD_Qˆ„„"8AAâ"%X„"Xá"qĘÄ#Ž6aÁˆåPáđĘĄ˙‚ōœ °”9C‚#á ‰Į(pŒ¸k]o˙WÛ ‚=ÄÄ,ŽdpB>[Œ"‡(r‡/ˏÎPø‰p‚Ä‚Pâ%ã‰c”9OáH\Bâ0‹ ĸQ2C‚ (pA{ūqÂâ9C”8Ab1˙Û˙ūžˆéø „"<QÂqÄq‡ˆˆAxŽ,D „ã”8ˆâXˆAe""BŽg Ž)ĸX „GąĄÂ ÄDÎ˙Ãũ×kúž„öą ‚â!”8’ŒĄĘr‡‘ÜN9C”8ˆ–9Cœ|D ŦD…,q+”á""$QĘŠ9cmŽÂ *ņ‡,p‚ČQĘĄØArí ˆîa Äã˜p‚ -Ãūģ˙¯ēBTâ%ŽP⁐Ŗ”8őĐXâHr¯ŽaĘ „r8‰C–9C™ĘĄÉC4s"Xáa$5„K XAb…ûÄGÂ#Ʌ… ˆA`‚}ûßzúúî‡b'(r‡/˛‡Ä ˛‡J/ĄÎ8A šp"9œĄĘ(r‡nX‰Į!ĄÄBwC”8âSâ8”8Axã‰â; á„Så88 ŧ";#¯Ô>Ŋ]ßá]Qu„Pá?)ĘDAâ8ŽPåˆė|"(åXâX‰q,pQ$8‰ 9 PåŽ#”>$3lhB„ Äã”9C„‰r‡(q(sÆŒ ą°‚ÄDB ˙ŋÚ˙úî~0]•"XåņVPá‹#Š8Ae8Ab"/œĄÄá0DAÉ‘˙3”9CøAd‡$9pˆá”8qÆĮ›ø’ŧ?ūÁ”9C¸ŲC”9NX˙ÃũŽ˙á~oL, Ŧ Ŗ8åPø„ ēĮ/ž""HwAx‘G(qėF r‡üqđA”9NBYāĄá‚°‚čAJ| °‚ąŋ„ ˆˆ„G_ī~ĢĒúŊ1kø‡0ãŽ"ĄÄEBåŽ %ŽPåXãŽå"[ĀâEDD „ Ą„"9NYĮ!ĘXÂß(p‚čD ŦĄĘQ,A,!ˆÂ^ü(sĀAũúĩ˙đēiŒe ‡) !Â.C „aĘㄈ°‡Į(sŽXâBŽa ĄÄ…HQĘĄđ‚á–8Ao•aˆŽX ‡l ŧDrœĄÄPAa>'":.Čč+ė!_īŨĨ˙❠Žá…ž q‡8â"%9C ņáG(p‚ņÄDG≇ÆņÁø Ŗœr‡(q‚°‚ë0į †„åP˙ø ‡õ밂ät(Â(r‡]ĩöļßúøc Ï”8AyĄÂ ÄB )ÂDĄË „DG!Ŧ9Į,r‡ČfŽ, BYCˆâ"XˆœsPáЍ„Ą")â8؎XAxŒC![ĩĮ˙ęļŋûŖ%TC…ë ĸ#ˆ‹#Äp°‚Ęp‚s,rœÃ˜p‚C„ˆä‡ņ!|B (qĮ ,GdxŽŖŊ˜pDtPã”9C…ÄF ":#¤8":͈A(ü?Ã_˙r Ŗē¯‡(ƄĄÎ8Ad ‚Ę EÄ^#âV#–9ĮņüISâ"' ŖØA„‹„‘(ØADĄÎ8Dt‹•ˆ<ŋûí/U×ũŸQ‚Ęp‚PÂâ#åŽ""Pā‚ÄJ ˛š‡*ÄBDÔ9ĮÄB )ÂB ürĮ(pA{ ¯Kĸ:(p‚õ¸Âˆ‰C”?# ¸0‚á ?īđ¯ß˙Ą ,DB ĄÄYC”9Į/C”9c”8ˆ„;ˆA8Al ‚Ęr‡8åŽ"â#ˆœp‚ŧG,FGAÅ|HŖ„ÔĄÂÜ*(spüb.PåeĮՆ ŊíooČč!_ ,r‡ąāž%ŽPåá ņĮ \åCœp‚Á(qp‚Î>"!øŋđE¸8aac„Pāŧ)”8(â įŋÍßđ`—ūû”åPáĐAz,!+| ˛‡ņ8áŪ, ¸AAär‡ĘG8⠁."%ŽU„"%0‚ãCÄB#á,p‚Â.Â,.¯øoōP˙kňīÄąĘr‡Â㈠ŧGĮ,q$8–8iĄÎ8ˆ–9C”áŽ%q ĄÁxDAʰVGq;‚ ā‚ !ÅB 1ü6ž;ÕŊX0‚°Œ ‡Ž/’§Ęrœ ˇÄ¸ŧDJH ø‘Ž>"PäG(r‡| °‚X‚ÁŒa„|ĢÄJĄÁá|N8Dt]G÷wũ˙žúÆ) (p‚ęISâPáĐAG)Ę „‚8A ĄėȔå!‚8ā‚| ģ(|p‚Ø\CŽ‹ ŠĄÂ ŧE…ū>ÂÄ9õûõ­˙˙š’ĨüDJr‡(p‚ņN9C‹•öPå7Žq ŽPå"gÄDąĘD† ƒ”9Câ9VCŒ_¸„”åPî"ŧ ģņxŽPįÂz#žū˙¯˙ŪđņGDtGAÄFĘ °‚ņĄÜÄ Ä ^B8”åPū$‡)ÂđČ.9C”8ä2Į(|DBJr‡!Č`rœ ¸Aw(sŽˆî0‚ãđBU„b#ÁøŒĸ=ûßúûīœĄĘ ‡ÄĄÎ8@ąüãŅĮ!QĘㄸ‰Į,.>B#’"8hˆ‰ĄÂ B 0‚ØA ˙Ž‚(rœ °P?0å?‰ā";ã…˙m÷ęûč0¸ŽS… ‰C„ˆŽ.PᏈA C‚ˆƒũ‰c”8A CŽH| ŗŖĐ8ˆåYCđ@ŧp‡œĄÂqÅĖ?ˆŠ#Ņ(p‚á ö ąāđâQ‚  ˙˙o˙ßR:PADĄÁŒ*8å#‰CœĮ ¸‰Ÿ‚(r‡8áˆÁ„qÄq8âBŽ$2¯,p‚ÅÄr‡ÂX¸AaˆA ”9CŒAwˆ”8 K† ˛‡(„'  øOŗ°ĩ˙ß­vŋeûh ˜Ū &–8AH ‡(~ ņ‚ËD ŗˆŽXáĐ!(rĮ(q8åB$QĘ"č!8åXá„âPåQ„°˛‡ņō‡-,HŽPáĐ^á„#„ÂGr‡ā†˙ûū?ūûëdĮ8áxˆŽYCˆæ~ 0‚(rœ ŧIUâ9c„"!#‚DHB$‡(rĮ(q‡(p‚ņŲ#ĸ>GLŽˆč-„#īˆÁũøax ŋ (åXÁ0ˆé˙û˙ŋûč;„b"Pį ‡#”8¸ˆ”9W¸”8ƒˆAb"XåY‡‚Ęw"ŽC;„Ž#eˆâZˆ‰C„8åPā‚ÄDąÂ#ÜDp‚đĄb>Páđ‡(r‡/'ˆƒ0‹¨˙ŋŋĩimūĐ asĀA„YC•ø”9C”჎*(á”?œr‡(rœ ąŽgG)Ė9‡ĸ^S„ˆ’ņ(p¸‹į‚‡(q‚Î9C„ˆ Š …ĘĄÂ ėDB )ÂvˆAp„å‚ /˙˙˙ßöB ŋ%cûâYC„ˆ–åCŽQ~""Xå9C™ĘIC@áˆ˛8¤pĮüå!âS„ÂĘ%Ž, „Gŧ¨_xŲC˜p]đ‚Á"ŲĮ"^8ø„#•‘ŅˆčŽ‚ā C ʰ‚ÅÄG„ųC‚˙˙žJ—˙ũŨņƒ+ ‰C”9Į.B Ė?ˆ‹”9C”>'ħ,"č ĸ9‡.„0‚C”áˆæ|DN8Ab"HpAbDĘĄá(Ą&GDtGDwƒ/őŅ~‚ ÜĄÁō8H\G(eØQ_˙Uō&>ēßzŠC„Dr‡,q8æXå8ˆ Xˆ÷ˆ\GĘ(AŽS„B%ŽPâ,ģ# ąĮ(p‚‚ŒD ģ(p‚Äl ą8Dtq/Äb˙ÄsXAl ĸXácBJ°PpX˙ßëC>ÁÚõīúâųCœ|Dr‡(p‚\ ŧƒ„‰‡) Âāâ/ųĮ %Pላ#ĸ:#¸‘G8āˆā“X‰cĘDĄüD …‘ŅĐ!ėĄĘDJ|XųW ã•|/ÆPáe8AaĐ ĸ!PáC˙ø ˙oūû ū"BS˜pA">.6PåXˆŽPáGąCė!Į(|DIC‰c”9Cá8–9CėŽˆčŽÂB"$œ ˇÄã”9C„Ab ‚ü ‡Ä ¸ Q(âá!aŽ#yC„8DuUßAßëˇŋ‘öž%8Aa"BqĘ „(p8ˆ‰ĮÄJãįDr‡,DĄËȈAx„Pâ9CœÄĄË!8ā‚ņ‚ėĄĘ B#áGp‚ØAAÄŽ!qR‡Aņ)û(ÛÍäu˙øMz˙īŠN8\DĄÂ Ë Ŧ „qq ‡,B ĘĄČhĄÁ"8AbBqĘąĘDK N"%ŽPį ąã„!”8 °‚Ô „G(p‚ņĘĄÂ(ŽPá„|XFÎ,ĄĐADDĄÁîC?¯éûŨwŋP‚°‚Ar‡ÄąīÜB (rp‚(sŽPá ‚.üDDĄË ą‚ƒĮŗPâ"a 8äŽV"'ĄĘq#”9Į,DDãÄb … ‡(pCĄ‚) "Hp‚‚âEĄÄJ§,DDąĘāˆč„Ü Ŗå_ƒ ‘ĐL<(pAcöPåÄ]HëõëOkēūīFĄĘpˆëĄÂ (|GÍxãœsZø•b"BPå>YN"EĄņ"ŽC’ĄÎ8A`e""B8Ab"Hp‚ ŪCô/ °ą,Xĸ;ū.%Å|!(pE×˙_ĶOív˙¯{ˆáåũwĶ˙^ū¸°ÅA”9C‚ ]ĘĄņ9C”9 9C”8 ŧKĄĘĄÄHļ,DIaÜYÁčŽˆčŽ ‘ň–8AxˆáGŧų2;# \ŽųĮ(ą!§.ˆADcˆā‚ÄF\Zôū˜kû}°ˆč"‡|§,Db ėI¸„ØQāDDąĪŠ8‰c”>""XåPãâHsåA ø‰‡Aá†Pá0‚ë°ž"PeN"å@ š‚ƒ!(0ĘåjäuøK­°—ũņđ@¸ÄKĄŲ!ʨ! e9C”8 ^1”8’ąA‡|ĄÎ9b „9C„ˆö0ņĢø^!Œ/5đ„PEPā‚Oå8Ac’Ãāå‡˙‚ûĻģąí÷Ô ŧDJĄÂq˛‡Ž‚ ÂĪ‚ˆøDwô„Ž""0C”>"På9Cb1"ŽPä4Pė!$9C„Áà ‰‡öB(ė/‚œp‚}Ô~5ûß˙zN"'¨øAYC„G@Dq(uũ”9C…Är‡$9  ‚ˆœrJĄÂ "C8âqĘĄĮ‚ÄHŖÂÎ9C”>$QÄr‡(sŽB"'ĄØFąÂaЉC‚  ˆxAB ņhŽ‚5‚#ĸôW˙õŋŽ˙æĢNBQˆöPåĄ"Uņü ĸPáa'ĄÁđ„D§.ŸĘĄÄH ū>%˛:# ‡!ʲ‡/‚ÁÁËáoáŲC„GDtQ‚ė.>ˆAAīūũôĶííŨpp‚ 1 qĘ °‚ĮÄp‚°‚)Ę„|J|Gƒ(ŦGĄō‡ ˆå8Av.,Y]Bäu˙ũŋ˙ė8A\Fœ">ņĘp‚‘Đ"œÃ‚!û(r‡ÄD›„6LsŽ#‹¨(Į,DDq,0ላâųC„‹˛=ÄBeû0ˆøAq0‚Šņ(r‡(p‚;Ąãõú¯ĩŋÕa‡‚Â(ˆA2<#;„ƒĄû "Yc˜qħ(p8Žø‰c”>"Xä‡(qĘp‚‹ĄĖáĐ!°‚ÆQĘr‡- ‚đAx‰‡)ūíw×÷ŨøEYN^9œ ą(x0‚YN[.â>!' °‚ ˆ”9Cœr‡!ÁˆÂ Č莈å,s"DrCĐ?œr‡(p"På/ŗDp‚ŠāŠp‚øÄDJã„!Â#˙õí~šũŋb#ˆ…ŽXáp(ÄRƒ(q‡,Xˆâq Äq‚ŒDJp‚Č7ŋ%bHp‚‡ņ‚‡/Ë;,Ąö‚ „U”9Wˆœpa+‘×˙˙û˙FD˜DĮPáÄãሔ8Av#q”8‰c”8\DKû,ã”9CâXá!$9C‰!ĘDįÄN9C„Ž"q Į(v]Đ ĸ,Ž‚ŋØAD§ˆAx"œ §—.>×öž×ß!|N8L „q<â& …DJã”9N80„ĄËū#ˆá„ˆˆœr‡8â$#„î@¸åøAe;˜p‚ ”;ė,ĄÁã÷áøųĮ.GErk˙ĩöī÷ˇü „ ŧ\(šøA|¨("‡(rĮ ˆ”>XAAg,DB ņnPä4/$>AJJ‚#ˆAe8âBƒ°‚ˆÄGŽ]âᄎ1˙_˙ĩŋô8Æ˛‡(ŒDN8AZ÷˙˙˙žĐ °YC”åPâB>"áC~Qââ'Ãū_ q ą$9NPå8AሐŖ”8ˆ ž\ąĖø°…ŋ#„\Yˆ’Âî˙ũjšÛîq‡ˆâYCöpˇ&ÂĄđ‚ āņC”9C„âXለâPãÍ§(qĮ(r ĮqūÂp‚Á \Cđxˆœr‡(|DDD °‚AE#¯¯ûúūīa!JDB Ę‘ĐBX ąA Ô?ũøÂĮ(rPøˆ„ž (qœ†qņC”8Ab!… ‚÷x°‚ô0‹Äu˙ÖžA‘]öģūÔ"œĄĘ ‚‰!Áˆ ¸üĄÄ „”9Cū9‡!Œ ĸC4r‡$9ĮœÃˆųNPâ Čá#•b"## °‚ũ-ūŊß}úvAlĄÂDMe8AcŲQ¸å"%XáÂÄ|ąĘ(}„& ąņNB$QČgr‡(qĮÄD ˛‡‚Ŧ ¸/ ŋũ}ôūũ÷čG/cĮ(vQ̊0በ>B"%S„8œ|pAa"%‰ AÂ"Hr‡-ņ,r‡)ōœI8œr‡(p‚Â# AF,F(¯˙ūˇõ˙ė(ˆåq NXáŖˆ„Á”><C”>"æp‚‰pW#ĸ莈čŧG":0‚ī˙ũũk}ētQãY! …‰c”9ãĮ(pA ŽS8AcS”8A8‡P‚0å>B$AÄDĄĘp‚ °ˆč ž\!*ô‚D†w0ä‡$9ā ŧEį–QķPå>^ãõÕ5ûĩŋzÂG „#‰Wˆ|§,§‚Ęp‚ ŖÄL8Q‚ąĘĄĮq$9Cœr‡ËĄÁˆå"$Į8äQĘã”8DtŽPáp‚‡Đ!ĄÖGXAx‹Ž2žĢũ}õõ÷ŋō‡ (‰cáßãŖŽPå?ˆ’ņÉB$2Į(qĘ.$5ˆ”8Aˆâ"$AÂD ŧqS…+,(‰Į(p‚ ŒQ(ˆ”8Ac]~×~×Ņ|qePáåũXå8Aį(p‚Ä,_Gq$9O–9ÄB  áĀįrœĄĘDs>"C@å]“„ˆ‰CœpĄÄL8 ąCÁ•ÕŖËû_ûÖ×÷w‡÷‰œ ąGAYÜĄÜE‘Ņ8‰‡) >Pâ%Pįđ‚Ęq‡0įĄĘąÂa"X‰r‡DL9Į(p‚$9N"'€\Db 8á!—á/”8ß˙]zīĩžúʧ,F! ‚âXā,Sˆ”8 ^!œq§/ /°ŋņ‚Âq‚ƒ(pˆā„tGŽ3Žˆā’‡,G,r‡*DĄËĄĘ":ƒƒ‰Į*$w(p¸ŽPņˆr‡(˛rģ×˙Ú˙kŋ¯ˆ‰Cœr‡ŧ‰NXŒ"‡+Är¯$9PS„ˆˆ„ū"%S”>"BSãåŽaņƒG@„K¨+,A„!‚ ƒÃaČ÷'ĄÂDx"‡_ r>˙Ö˙ûĩũ+ÄB œ ģÄ ŦĄÂ „KĄÁÂÔ9ĄÂ DG(qĄ!ÁŒC”8ˆœr‡áËĄÂ A”8ãšČ`rĸGKbB8. -Œ8á1*+Ģīđŋkŋköĸ#äQÎ8\G0áЎö/œĄĘBD ŧB )ʆ(p‚öGDtG ō:# @‰œÃãŲ ƒ„ˆ…(wÆø\ ‚|Ú )Ę „B …„GA N\ā‚Oäu}uĩ_MwˇÚA9CœsB' ¯ b' ¯§GˆčbYC–9Cˆˆ\GėÈለœr‡ ‚ ˇ(r‡^ˆÃ8áüXDt”8Ab8A`*(ˆ•„EBACQø_ęõĩßß\G,§Â\J ģ!*ņŊ,DJÄsŽPå99Cœqœp‚ņ,DąĘ „GĘ(r ĮŽ6aÄYŠĮ, ‡A`‚Ä\lĄĘ":]”?„!ßé^Úíöˇß̉c„xøAaâ!žĨŽ, „sŽPâ"Xá<ŽĢ…û^ôÂīoâ.˙ŅcŒAä‡8ųC”8âC ŗ¸ˆ’ĄÂ +(q8An,/8AÄcÂá "JôĐaoũDIâ# ą”áÂ0įDHŒG‚ņĄĮ„%ŽU„đü ‡c(p@ą>Q Į.[(?‘Ö?ä|0ŋÁ„­īätˆ+ŽPå!(sŽPâ"qĖ:(ˆ™Ę ģ, „ „IA¸â!”9 ˆ„ä(á9C”?‚ Ä8ŽQ aev"#ˆˆÃÄv?"čÆqĸ:%™tp!.ĸ9ˆ0„DAÔ‘™Mġ#r‡$9C–9Câ( ‚KĄĘBDJ§(pˆ¸Ab"qÂDąüD „DN8APä4ŽČ÷++ų9VLá9_EČëd+!i ÖA[Į(p‚ÄDå9C‰CâBPā‚ÄsŽPáb%ŽPá%9c”8ø‰Į(r Xå$‡(r‡(p‚Ä „DB r‡)Ę ¯ Ø9NX¸ą¨âYƒ>œĄĘ§ņĖ9Į(rŸXøA ‰œĄÂ „8‰C”>"YĮAy!Ę ˛L9Į(|DlĄĖ8A‰Į(rĮÄHQōC”9Cˆœr‡(p‚ÄDDĄĘ§‚ÄDáį„W |x\D ŧ °ˆ„[#Äy„ŽĄÂ8ˆ”áØūq "š‡ ,†Ę N#”9C„#œr‡‚ÄYŅņ,r‡‡(q˛‡(qp‚Ęp‚ÆĘÚ×üJ ĸĮwˆˆ J.!ˆˆAeXAAeŽPáDĄĘÄGĮq Ââ"8ˆˆAX‰Dã˜|DDã˜p‚ÄąĘã…ČÜĄĘĮ(~,Dã„GEz!4_î_XųN'ĄÄJ8åS„ ãÁˆˆAe>"YN9C¨ˆ‰Į!Ę¸(|Dåá"P䇈å9‡ N9C„1‡(ÆąĘ%üDu(x‘G,ĄÄĄÉˆâPøÂ(s8ˆ„”9ĮÄq(â¸q,§!œq „B Cœs"!d§ †C”9c„ˆsŽ!uš×ûG|r‡CˆˆAYCâøQ$8@œB!ĄÎ9C‰!ĘDr‡ņĘĄÄN9C”9NXä‡(r‡rC”9CjĄĘŧGC‚0áqĘΈˆ)C„Â$9C„#‚"#ŽXåPä4PūXå@ˆ(qĮp‚ą‹ˆ„ˆ˛;#Ō‡ŽPå99c”9P< šā „B áÄÄ?ĘãŖE˙ Ô8 B$W!‚ąœĄĘ„ "%ŽXŖ˛=,DŠå"X‚ ÉS„ˆAĖã”8ūaÂD(âqĘĄÂ $8A`Aâ!ōC‚âē”8ˆ„ī÷,D¸8õ„‰‡(sŽ?÷đ„ã”?â"9cŽEEđ‚dtG¯’ĄÄąĘDAâ"Ná Ŧq$8 B;# ‡Äb…,DąĘ‰äNŋŌėÄGH …‘Đ^Pį ą‚‹!Ü{(p@‡ė†Ģ„!"X p‚ũ„>8Ëà‚ˆ–9N9C‚ˆŲC”8AbWˆ‰c˜pˆčŽ‚!ƒˆœr‡*AÄī,īĄ(u,DDã˜p‚ā†đ‚ņa"AŦpx‰ ‰qņʁ”8„ˆ•~EĄÄDBJ#„BHr‡(|qƒĐCåF0‰Z ‰ĩ˙lÃŽ.Pøœr‡(| „G8åC‹˜xBPįĄÄ\JąĮ!"På‰! Â#‹r‡(p‚ō-”8‹”9NPâ"Čņ (a!ĐB˨A , „§,E‘ĐU¯á„ ˆAaãˆAx‰C„"Č莂ņ Ō8 ą(q(q(rĮqĘp‚œÃøAccÁ”$W,DB Č.9P"%, „B (pAˆAA„"‡ ÆQ,Ąņ ,ĄÂ â#“ĄŽA¤E] m‚!e"#CPā(âHpAxŠ”8Ab!Č莈ė"Č`}‰!ÁdxŽY…”9Į(rB"S”9Cˆ‰c”8AŽ%ŽXá""Xå#‰C–8Ac‰c‚ˆâ_ˆåv"!.„NĖ+äLM`ĘTąŪæV€ō âCI(ā \ }ÔlĄÂ#áb"qĘ ą8ågĄÄã”8Acø‚DGds.ˆč~"%ŽPãœqąĖ8ˆ‰‡,rĮ(|B  DAœ|J °@ŧDŽÁ„O’W>I˙ųÂ*<.˃AČ’AöˆDG,r‡YāąŠp‚ÔD{!!ĄÄÒ ‡$á""Hq‚$8Aa"C5Ęq,p‚üJ€‚ÄE‘ŅŅz"%^B#Ī":#…Dtˆ š^+˙ä x/Ŋ8< ÂüąĘ ŦDĄÂ  ÄB ĄÄGp‚§(r‡!‹ ?e!Į(r‡,qCø‰‡8â!øöPôX–8 ^"%9C„G "På_# ‚ėÂ#ĸ;r‡)Ė8@„XA W#¯ž Â@đÎ 0ƒū^9C„ņ,s‰c”:(¸A„…Ĉ;(–8ˆâHu,ĄĘrĮ8åL!!š9Câ8Ax„ û(p‚ÄĄĘr‡!ApBÆ>9C‚Ž6Pāˆë0„’Ĩ˙ü8aƒ‡ aė†w!ĮáÜB ŧBJ|DAįĄÄDGĖá„g(XŽ9‡+‡)Ęp‚ņĄĘq,DJĄĘ ēN:#áB œp‚ņ(p‚ Öŋ˙ ƒÂh>¤qÉPá#á”>4%^BC,r‡âEąĘ…pˆˆ”8Ab$‡(r!ÂBFĘp‚ÄlĄĘDD Ŧ ŧDą×(p‚ŒD§ņaqw˙÷ÆAۃAö!8øáŽ>VPâ#å8‹#†r>GDt‰!˙8æ‚Pá=“§!KĄÎ8ˆ’":(ˆ–8@ŧ\ĄÂ ÝÂ^ Âá„TpPær‡]#áYP…č(įaK¯¸i§UđA”á"Wb"Pxˆ’ĄÂ. d ˛‡(q8A^8áå.,ž"Hr‡)ÄDI8°‡ÄK! ĸŽ( …ŲC„AEđ‚đ‚ABfKW„=ß  ŊŖTb"kƈƒ„N9C”9Qâ0e"B8—8@„DąĘĄÄDJãŽPø”9 ˆ‰c”8 B"C(r‡8õ“ÉXႉ‡#ˆˆAv8”8A`‚YŅ4ˆˆAd‡!GË"8b9‡) $9C”>#”9C„wʀ‚, ŋĮ*1¤2ŊĸčŦ¤ŋŨ÷i§z¯ņ8åq Î9C”8ˆ˜‘ŅØ_”9NPå@Â 8æ,ĄÂD\ ŋŽXŽBS„"XãĀä0>B#”åPøŽSâ' ŋ â, ŋ°‚áfp‚°âqŅ\Õ%—Jŋ˙ģM;˙¨AAøâWˆœr‡(sŽB"S„ãâ]ˆ”åPãØˆAe^9!Á>0ō‡ÄĄÎ9CሉĮ0áâBŽX‰NPá Į(rœ ąÁ8ˆ…Ę8Á„ˆė_‚ƒĐˆä˙_pí8jĢˆŽXŽ/Î9C”8ˆøAb;˜pxŽaÁâ8‰C„ˆAbqá „Į)ÂGœ ąGˆčä‡üDKĄÄ\K":G(~I¸A?å8Ap†GA&h÷đí4íÕxrC„ˆ’ã„#„ˆˆ ŧD …ˆä4á""YĮņDJ†På#˜p‚Â"$2ĮAâ>PøœrãÉ,Ąņ‡"%qĘ ‚ˆ„„"#„L’Ķ(Ĩ_ŋĩ[U_”?‘,q(sŽXAbNĘ|ąĘ§!°‚ $9Cˆ‰‡8æDąĘ†8å8ˆP‚†hâ$‡B Är¯|G$9C„„G,q,r‡Ä0‚el×\Žēû´Ķŋū!gq&ˆ„YP „^.!Ј‰!ņ%a"$AÄDD…ĄÄ†PįĄáXAbXåXåŽXˆ’ ą*Ę(sŽPå8A‰C”9Į!Ęŧ\̈Š_îû´ĶŊWÁô$‡ B"aÁĩ ÄDąČhĄÄ ŦĄĘIPø‰!Ę ‡ N"BŽA‡ B"Er‡KqĮ+ķ^"g(|G(pAuK˙÷§wĒöQœĄÆ(„"9CˆA”9NPå$QĘq"ŽB#”>#n9 "DĄĮ(p@„DHƒ”8’Ȕ9Į0î! …ķÁC‚ˆ„ đ‚Äã”8Q„Ž_˙îõŋ˙ˆ„^%ŽB9Į-ÄKĄÎ>!°„ąÂ ‚ČQĘĄÄDä‡"Ž"%ŽXä09N"Hq+„ˆ„qƄX‡ĘąÂqŽ_ÂĘr‡(|Y•ĮDĩQûûM?Uë’ÄD „DĄĘr‡!ĄĘ|DN9C`p‚Į(|GÎ9C”8âHr ƒ„‰!ą‚"Ž$QÎ9Cˆ’Ąņ(qĢņ‚Ę ŧXÂG%Ž"@KūũŨŨú÷Ęp‚Œ8AbHrœ ēåB"$‡!Â|å"""9Į+(|Hļ"Hr‡(q ƒ”8A #ÅÃT‘ĐB"Hr‡(|DÎPų!ĘĄÂ …˛:#ĸ;â8”āˆčŽ‚! Pá°Œ8 š^¤&¤)×ŊVõúؒ$‚G* ĄGAaˆ™ĘĄĖ8ˆAe!ˆ‰!Î8A^"!d3Ž$QÄDˆ8ŽPâ$naČaĘq,r‡Gˆđ!‚ÂqĮ/ħÜDB (xAG ?JŋīŨ§{¯ņ(sXŽPáÁ‰nXˆŲ‡âČčŽ[!(p‚ĄㄈAb$‡!(âDĄÄå8’ĄĮ$9CâBŽ!‚ņ!GKds#áb!a„ˆšņ‚†PሄXAaá8!˙÷÷­Žŧ"ęB>XŽČ莈ņp„|Žˆčˆ”?ųC˜|G(r‡8â"Xåâ$‡(p‚ÄIPáŅ 9C„‹#Áb‚(r‡8åPፈ„>g-Ä\ĄĘąÂ# ‚‰c”8 \ Ŗ‰C‚ „DxļGD|¯ !¯˙ۚ{˙(r‡!Į/C„",,ĄË|ã„"BXAx‰!Ę ą!‚Äp‚ėDN8Ab&ąŌ,p@ŋ!G((sŽ*!G(3ˆ„‡ c(pAb#ÁˆAn#”9C„Q¸•G˙}÷wĒõņ8á”â"PåqĘĄÄY#Ņ(sÄb"qđ‚|ã˜p‚Fņ(r‡(qōĮ!8åŽXãœp‚Äqņ8æ ‡8å/( ÎPå(žPį ĸCė, ‡Ėኑ–Ã)4Ķ˙˙jŋũĄĮ(pA.Hpĸ"%„‰C”8AD dtGp‚Î8Ab#”9c„C4rĮ‰ˆ‰!ÂqÄGÄDDDXAå8ˆšC”:.>X@¨q ąÁŒ ¯Ä  ņ]d)BÂ˙˙Ŋ?˙åPå>#‚ (q„PåŽgĮ,p˜‰C„ŽWˆ„ãŽ"XåXā‚C‘G!ã„qČ`|IHr‡ ƒ¸‰c„$Q Ä| †ÄDB 8á#†] ‚ˆŽS„"qĘĄÖdĨš…Ĩĩ˙ĶûĶŋ^ĸ>Xˆ„b"CHs¸Aˆ–8Aˆ˜sŽ"YN!ˆ‰‡,ĄÄoĘąĖ8ˆA‘G!ÄDã„#„b%^#„ Äp‚ŧJr‡(pA!؈øŠī˙˙§Ūŋp8A‰'ÄHŖ˜xNYNBBHr‡""E§!!š>$‡! p‚$å#â%Žg(| ą$9C‰!Ė>Pâ%ŽWˆ”9‡"'ÎB.%qÂG, ^#”áYÚÂ#ĸ‘%¯˙îõ˙č1Đå8‰c”8ˆ‚ž"PęSâHrĮ(åT‰7‚ÄrĮ(r‡8â$‡(qC”á#„Pá"D‚‡$>>qĘĄÄG(p‚‚Į(rœ …ĮÄIAq‡)  ^—˙ūī˙ĐA C„$naņ$9Wˆ‰Į,G8å"Hr¯,rĮŖ”8 B$G/ČŖˆŽB"XA"Hr‡ „ „ąÂ $9ĮÄB 8æCˆ”>6PåPሉC… øœs24C˙īŊSŋé¸P‚ŦĄÄr‡)ņ˛‡(qĐį ąC”8Ab%S”8Aˆ–9NPâ#„’ĄÎ8ä‡(q!)ÄB ‚ĘDIS„ŽxņdtGĸHr‡QØB&p‚„]…!ČËĘÚ.Ŧ‡%_˙ä‡(w|‚•˙ĩŽPåŽĐåXˆœsX„„8–8Aˆ„Ž!åq q$9CAʧ/ĮÄrC„"Iņ"Žaņ"šCŽ$‡!Äã”8Ap‚âXå9C‚"'¨‹”:(„"$‡!(q!(ņˆA |DN9Cœ|IPę!d8ęB&qĮ) (r+â%PሸAaŽS„"9‡,GdtGˆøBPaČč=šũ(_ūũū@Ÿ´ÁSwAč?q8åPø–8Ab8A`‚ÄJã”9CâJđ‚Î9C”8ƒˆAg(rĮ$9CŽ!fĄÁ"%4/’H á""Pá”õ–8Ab"Hu|LåPøA%ŽV"C9…Âŗą¤5Z¤˙˙ ŪÜ7L†°;ĸîqĘĸ …@ø~ƒ"BSâ$ C‹į ŧsœqĮ+Ë%,DĄÂ ÄąĘĢ!!Är‡,p‚Č ㈈’DD ™øœs^åXá”8âPëˆā‚‡"PáaĐCÃ(pA1˙¤ŋ˙oŊ:°Ŋ‚zéō‡) ,pˆâ…ŠXˆAF"B"& Ŧ ą|N8Ab,Žˆč,AĐáq‡ ¸ X‰c”9N"E§ Āå%ŽXሏ‚B#¸Ž",Žp‚‡8á. ‚ņEq 1Dë )…˙˙Ũ^ ˇđô¸A#‰c”8æ ą(cDĄĘq‚īĆX눠ÄDX@„qĖ>"MÄHŖâHp‚ņOˆāb$‡á""qÂJDB ŋ$9œ ĩ_ņû÷úē`Ŋi÷ę#ˆ‘\ ąÄå"Ččˆ’r‡Į(  qq$;åSˆŽ#–9C„H4ŽPá9NPá"9C”8‰œ ąsŽ á%>!"%"8”á ą†uuëäu˙ˇé?ˇáđũˆˆĘÖĘã8Ę@¨”áDąÉaüGÄIXâ""PįĄÅÄK$åACˆ‰Į(rŦĄĮ!(q ĘĄÄã˜p™8Ab#"ˆČIY”*Ē˙īũéՂ˙}üDDL b„Ŋ(t„DDDE…xˆ–ųCˆA”įĢÉØ Ą„˛8ŧc)s>CÅÕ-/˙ī˙P_áéû+ę"]d|Ž!§hDq ‚DuXiiī˙īÁŽ=øa"ō‘ķæ˜B$(â"éG#ĨU¯˙īVŦ˙pƒqÄL9Į(äŽHr p9đˇ}qĘ,/˙˙¯R5/˙BQ(rėHw J@đˁá¯ÃvõĢë˙ũŋß`ˇīÜÉe ãįąÄD‡G Ví˜r YQ ŅØŒČ >ׅ]_˙˙¯ûķ Tm ˆˆâ‘ãÁ‰rCÃ(yđ>ąĖ9 –-v•„'BŠū˙ū×ûŊ3"ĢÄ!dtGŽ  ą˛>Î9CЉNīĊ*Ü.ĩ˙˙ũ~Û~d)RCLs‰p"%Žwq¸†A­Æl$vM2–ŪĄ×HĮ˙ŋ˙~ūū`ˇy”9CˆŽSĶ,ޤ  qmâ*ē˙˙˙_˙‡Ų’D$B#čBmˆžDp<ˁėĖ0GŅŅ ("‡‡(r ŽXė0Ō§ëBŋ˙˙˙ņˆ‘faeà 5BâSœqŲ‹ƒr8‰ę砈ë˙ßũUú÷}"1ʰ„AHãyVS”9 €Üq ÜqU…m‰Oa鉪ąöŠTa˙˙˙í°üČ,b"QlĢRƒw!Ļ>"Á‹~vBfĒõ tŋ˙×_á߄HQp‚C‰nTa%9Č9 ãĢbA‹´GÃWŠū]*Z8˙¯úë˙]Ãķ"¤˜Q¸ĖŅ#ĸ8ĀĀ1(r EqeÄ0#(vČ`sޏ[—@ÚGeH[v‡â—ūŸ˙õĢīÂh „ĄĘã”9 F\ņÍ¨  qâS¸6ãŽÚNu7z˙õõŋōƒļûS„LA[c§‹#āĐGÃr8¤q‘a›)Č7E؄S„Gaĸč0Đ]~‰:˙ßúöŋÇá"qåÚ—ĸ:ŅĮ܁`ä+ˆL§eȎ Čû‚+!C‡0äc„CĶãŊBØĒÎ:Ąüõ˙õîü)ė"q C,XDܐãÄ\ƒhāÆ,¸ \C1""ė4æĶ—ÅüßUŨr:÷˙¯úØl>‚)áŪPå Ė#ŲÄc”8‰ÄHhPYQ Éħ;ņm•@ŠÖdK Įˤ|_˙ôĩ˙ûŋ"""# Œ¸…Î$(įÐŖŽAĄÄÒ\ē8ä‡mEļxBõ‰Ō; NÂmŪ¸Ž?~ēũi+ûBM˜å‚];â@úÅą §aÃ'a*Hr+áĘąÜ">‰ŽØ„‘ ČéxÂSŽa˙˙_˙^Ø~d(ŠˆIž ģ”;‰ ąČŖÆĐ0h$ņwĮŽÄD">B_"0–fœO­uBĢ˙뤗ë°īąDŽibÄøeÁ — 285Láš8†!&ppŲpM0a1 %‚gfšŅâĘW´gũŋ …üč Ú]ˇËŠn#ŦE˜peÔĄÄr‡wĘ‚™CģļH~ęd}*QĄ7‰Å×Ŋxtŋũ…Ō˙ÂöÃã2RDÚ#Ą¨ˆ0lYC=ŽXáŒE[—Ø“KG­Ēe)„&}bfeOôŊ)üyā+Â÷ÖnüʲGˆAÁlē.ĸ4ˆā`„TB ˆƒBPáÆ¨$>B.AGh㆙~ ˜Jø˜ŲXPøciÕĩ˙ãŠūâļüČāæŖ B”,4ĨŠ[IUd‘lĢDN!Õ˙HÍūģúÛoÂēØAF]+ÂcÜH8ō:bäc“÷HĄÅ†$GŸčaˆd~N0ė: ‚Ą3Cå×Įח˙ũõļūD !…”9qNŦž,DIÛ(#ƒ†Hv^A Š89qKí UĻuJ‘Ų"6!ŅN×ßīũuļÃč <3$‡d|X†ĄÃ ɎSŒ1 T_§¸bíß°ö’pˆéa$'qЇĨkTŸ˙õŋÖÛ}ÂA$ÍŖaŦGÁ† Ę…N;.˜‰ļ60ÄĄÉˆû!"{#…#;¸ßH$ĻDžæ"t>Ŋø˙UũVÛö#a™ƒq—]ŲÜî$;â 7Â0qƒ#ąCMĪŽž–ŸCä}?_¯ÕÖíøŅ„GųœOpeƒa•ÅM\ęAÜAÁdĮg ĄÜ2<]ȰHpeŌ!–;ØsA1Â0ēÊH,íU"$m,W˙˙ëūļÛčȲP‚Ί$8Dq0Œ"ú*ډ„-˜åŽ/B‡ˇ¤‚(q†(dqĪkđEÎėĮŠ ’5ĸ”‡#Hú Ąá˙¯#¯ęŋēÛoÂ(ˆA ÂB@Ähl BG“ąBBŽ4‚(pˆøoSØėÄ^#ƒ C.Ж8Đ"樰ĸCFI &„މt"yę#īT}/˙áÖÛî<‚KåŅt 䏗Bo>‚!:•bxI„,6N; $؈`øEŧ„uv”>’„Bl†„ÍęãŠtŠú¯ęíéEކ‚%ĐĘĄ°Ã  ãLF`ÜЅ ČHZÃ#B&ĪLmČūmfŦ{­;Ą¯ü/î°Ûũ% Du‹`ÁÔ?GpÁ‡ÉæhŋŽƒDuOIčˇpŅĮĄĒЙ Ē{ĒׯũVŋ vö˰!QŠtŠŗčA‘a—Č遆ļ”8Ų99ĮĘÚr‡ÆÄ0Šz,r‡Į„PųcŠmé*áP¨™Ą7Šũbŋú‚˙…ļđŠD^Ę1ü$č †‹ ‰Cˆ†7 †ßFŌm†ELĄČƒ‰P\}ø.­á‘ä F´'‘…G‘~ˇŨ/˙ ū mü"øHÐ]á!Ė8GSĢ n"Sä4åÁ°vī ģ(qaPá%„SÆ—]đˆü+C%Ō„Œ”ˆgÚ­ęŋũÛđAB™ŦĄĘt”g‘t8BGČø4 Ã ‚+ ˆ1Į¸nĄ!ﯤĮ@Šp†đbÅZPûÎē] ÄN†ŗ zĄ˙úŋ˙P) 4đDčØ 2‡. \â郔9Č#Áƒl7C܏Âã˛:#xō?nCŌ´ēT™P’;B$Â'Xīī˙¯¯öÛíRiOáÁBPĄa!|ēvS„GϘÃ&:†ÃiÃ lPn‚3ļ!ĩa&”Ž‚uw3ēZ;BŋŌ¯#¯ëīũA(@žl˜åqʂ°rāÄEÁ†=ĻÁđŠsHr‡a°ŪAqÁˆH}ņUWÕb5ŸKN’;-ÎՎ“ú_ųWÕ˙^Û}Š„„"_PBÂa EPeŅV`Îås øĄ`ÁļÚôÛÔ,8<ĄÃčN1 ŌüĄû¸¨"ļ¤qrŸÚÕūŋûÜ>Ņ ”áŅ€rėŽˆú8åF’¨`Ž™ģa†Áː"ŦĄČá°Ũ„B)ãÄ0ákÅÆæÖëØé]b%Ņ„:ūüęī˙wĐĐ@ÔDˆ:@„Rʂ‡(sœĢnUNļ҇AqbÁ‘ØhŨ†Ô6GÂ(sņC†Dt]b.Pî]ĩ´¸pĸĩSŖ$#˛‰Pŋé/û×˙í†ú !ËŽÄ!%dtGă.ŽˆŽ17ļGA¸A2čŧЇqŽ‹ĸ:„]P ‹ņb! 7ė6$9xøGw_´BãÃX¨â!1„œëë_˙WīŨ‡~ĐAtö&(D"˛éœq,¨ (0ØcB  đ8IŒPlā@wQ EUņˇŌG˜ ƒI!e_K֏¯˙ ëųÍ%‚#§H—ADqh‘¤CVPāÄEφ,`őņAÁčrÎU‡Š:Üai Úm øŦ B(/üī_ßČ2ė#~‚ ! „M¤O"ā€ÍČē¨ "čČũ‹H8a; ã„C‚I‚Đ"Ÿ§§ģҚ]i/˙ ˙īpūG*g‚´* ­žD|Ž2č_ÄüT]2čf„ ]Ä#rÂ\]ĢxŨ¨āŠxAaNˆŽ.ģtŌ˙õ”€­{ˇÚH"g„)ĸ‹įКb2­‰BGBL5#ᤇ@Ø`Ņ>0lĐ"Hà Pũ†GÖčē´’+׏õ˙Ū˙îū—ˤ„AI,ē=0ČûĐÚAüŸÁ“uaųt!‡ĶzĩJ‘Ø÷]üû÷ģî‚ā\Á˜0B!¨ˆö62 ÖÆ ž ežAņ7Ģmc &jĮZ˙ŧ)QßûíˇâDhœĘÃĄ )Ęãw*e< Ģ(tGfi˛:eM‹ ‡\E0rž°ÆđÂōđ¤Ę˛Ž ÔŽZ˙ū˙ĸ C÷IčDDD0˛č(“V#h0bÄ9ė"‡AŗßUˇTąUI¨˜‡ŖąDv$Ž!˙HŅ×˙<0}oī˙ĄÄDHømƒ>ƒ$€âĖAē˛čUžŪĶ­[U7PHFĨÉÖ=q˙Ū@đĒ›nŋ÷„§Geˆē@ÄēÄ6vؑĐ:*ÎäX°ËöÜ#¤ļ÷á)Nˆí*­ôë˙ųÍkûô"" 9:”;ÅÁŒ1xUĢŨ1÷ŠŽąéD~‚K˙äļE˙˙ ģœßŗ!ĸ6ÍhÉ:oˆčŽ„[{,v6ÁBqÕŊU¨Ĩæ˙v•#˛”sõi(ū˙ûÖß{~ †GB"‚e“ö!ÜE”8A Ž˜`éųt­që5!A[ĩK˙öõŋûx~ĐD܌pY‘J#Ąg,Žƒ GmāŠ zæž• ‚ŦPDt—÷˙¯ūûüČ@ĸ"8vėB0āÍ0ŠōŽÛM…kÅ,t’JÎÄ#°ĩ„Į qū߯}÷öe¨§HĢBŽƒ 4y ø‹w\ĄŨ¸*ŌUA#´ ‘ŧę‡M ŋ˙ÛûŨøzÔČú(aN‡Čķŗ¸B]"Įdt"GCô>Ŋ*K¤")­{„’˙˙¯}÷úBˆÁ‰1ˆ;š#¸2ˇķ{ /_Hî´{R&~&i*_û˙jŪíđÖú‰ŧ„2ä"ÆÄÂE6ˆNõĨT†„\E%˙˙zV’ü5ĩ莂>Ĩ8A^S҈-šÔ6N˜c´ÉS Ē\húIq.‚¯ũũÛí{<L4 Ōí""ÁBAÉķ¸@Åx`ĪĄŨĐ"øč$FCՉu ˙˙vļŋÁŦ0ž%F„”Ü&¤4Gmˆvl* sÁ.Ŧ ž“ĶJbqJ—˙÷ĩa‚íđad2õövą¸ËæĐh TGBÆ$č6:BfŊGē¤,$„Dk˙˙ļ”Čj>AŠũ@„ā`L"<–" 2ķ*e@b=ƒøaę"P‘ØZ;V‰R5¤’#¯ûũÁ‚˙ĮŅÚ ˜ADXLˇB §vĸæŦZ÷oH•hėKēI!˙ūņMm˙ļBˆđ „ ĸvM$ Æ&ˆŽSĨKęŗ?­q’˙˙o˙OâF@‚#J(į\!¸#ČÂę=uA!ŌŖDHIģûũīˇ˙™XB;Ŗä"!œx°Ī§Ë¤8zZĶI"f’;YE"Uë˙ģU˙÷ ĄJEpLa@â]WŒģ}ŗLRšB!Ô/û˙ũũi ‚˛ĨDtmPMČø‚j•ˇĮú; B4ī˙ŪÖũ}Đ @‰oR—ā˜ļuC~Ō $¯˙î×˙ņ„L@GŌö1+ŠķS”sųIʇíŦ.U•ĸ#2ä}v]_÷û§īëĒ!´GŅ•č%„Ž!qu Š„§bXˆØ ąë˙ī]õí„!8„DâĄŦ6sĄĒ›FžN’˙íīŋÖĄAžG"čoĒčj„öŋŋí{õôOáb_9˜X"žyâ)–!2…‚˙ūû]˙áÅŅn+ˆˆé Å ‚_Q0‚˙ö×ũWh$k-Õ E)8A%ķxĢAĘUG`hGPáßúk˙ÚAšDIŠ!ŖĻGÄōqĄ2Zå˙ūŨöú­B¤jÆÍĄ+†„A&xŠDHĸHíSD-˙÷jžūŊ‚ENį‘:Kū˙{¯×ØAhˇD ¤Ę9["vT„†‚Aô˙ũĒÛúôA$ŗ0„ÍÄ „ŒË¤‰šÅ˙ļĶ_×´BPBPˆĖD‘…4T"kG`ˆRAßöŸ~ĢPĸ""mB8’Ėq8‰ĐG˙ũé§žĢmDˎJD a!ŗŗLúĄ˙ŋÛ˙õŌDč „Ö‚DŽ„ē.ŒŅ )z˙m5ˇ×é$¸™â8ˆ‰E˙˙všūĢô’Îũ B8„žDDčs!e˙ÚkžĢĄH „˜B""%’#°DĻU!ë˙ÛOũWgb‰AGBM†",’4…Į˙˙MoÕh":I  \ŒČm !r>"Bú'Fl;KzIqĨHŖ`RŠJŲa@…HŅ˙ØMmõ]i'‘ÄPb_4ÄJÚ;JC˙mĻŋh5؈HK ‚ČčHøŠŧē"čîŌCŋ˙Úaw†ĄxHBDE8ˆë˙ė0ƒ[ė ×geZŽ] B'jҌė ˙ūí5øi¯H$&DĒÚD"‚˙ŋá„īaւ†‹Ŗøŗ¯˙˙Øa0đ -4’+—FEˆ ‹¤…}U˙ũ°Â -á„^’ėb:(B:B_8Šš*œ_÷ü0ƒ |0…´’B"sDLŅ„%‹"Y˙öÁ‚ j a};Ņ Eˆ‰äHÄĻ˙ƒ÷0]„ĄúFhO.ž""" 0B"FƒTîÃ[Ē<ėÕü´ ‚-ÂÁ íŅęf‰¸*(F•\ä'c˙- ō‚ncŠ#4ŽˆDō1ÄNԁÄUq6"qđ‚ĝcņvÂGķĩ4MGEŌB‘ŪĢëCŽ8ˆ“ŦúąĐA Œ‰üNÁƒ(BTG26ˆD"ŠGėė Ą…‰Ķ6¨E!Åé.w›ú˛:eyH…ūŌB$Fh‰°J,‡ˆˆ‘¤NˆDWF3 ¯ "´…"l#Q6†‰|ē"hâL{úB‘đˆNI$'‘Ė›Á"$MôĮ˙GbŠD2œ#i"1 œ"‚ŧÚ _Ÿ_uI˛|D ˜B 2¤Ŗ˜œWũŖĩîŧō8…!ˆūB9 ŅHŠįV%ŅuõŦR4%Ņ7‘Ņt_e}1ÅIЕņ(e9TûHī’čK¨†""qbBg’:HÍëlWœK˙HHÚ Gō1$f••e !HÉMaúÄ'‘×õēĐA Ė›ĸu[DčÚHVˆˆ—A†4:(üDR#Ŗxœĸ莎gĐųä!G¸ÚXą#Ĩ„—÷;„s‰Ķņ q"äxŽ…Â(zQ˙üė‘b¤#@Š ­a&yÄz#ĸčq5"¸jÂÎë#ķŽ(ũôŽæˆÄĄ&q.‡6„2œ!QPãxáÄĶ˙¤"Q‰6H”Â#¤!ÕęGĮ.„S:"„Įƒ¨(‘õúĻ'bČI„(!+‘ AQ§fˆčPœZl ‹Ĩ.“˙F@ˆI„#(p™ø¤Kĸ=b&ô)T ÄDōg_˙hHĖĪl„lŽ‚ â*ū¨(›J"æžC4 GũÔ…"F&ŋ ĄÕ(­iP ‚HĄÅ?˙ąˆ—Ō6ˆøŠ—WDvGąÂB™|adu SŗQ7˙ˆ ‘N¨DCP‚ƒAŅÄGL!éYQIAöƒ(u4ÃJGH$¨Âa!&]Â!åe"t› !ųØ1H †DĄČXĖ€Ä"h֍AMHŒDmTqŖŊQۄ;Ts-ba üX^":„w KŖž]—GDyBËö‘Ņ|“ €D0`Āi0 0sāŌ\ d0sP`§ å89ĀPu—ƒ`á üAÆQ¨ĪƒPbCAøƒ 66xāƒ†@š0íįĨIËĸ|$g¤ąލHqÛČčÆPˆčūž’N›Įõ„ yÛ¸A¸YY ¤BøOā˙ŪÜ tÕéæFÄ" ˆė焐Á!ō:#é TĄŌc]F] Ą.„RķÉĪ/žĄ>iiëŊ};á˙úŽģ…û‡æCŖč+ ˆŠ‚gp‚$|C)ƖB„Ĩĸ‹+8ĮõŽz[áá}>¯õ÷ ŨĒúÃĶhē'E"A0‚bTÄQē.“ îqkĒ}ū¸Xzzúûõ˙×û\ėˉĪ#6"M‹v˄#ŧä]Ņä‘õ<‚‚‹ã_ũû×í×Ķ˙M5ī^ˇ_īĄ ķéR6gt]dQÂBAŅP‘ô‚!!Iá„]A?õø§­÷¯§}˙˙÷z˙}‰V’č›A0šŒ&‚0ˆúA(Ō3Yšđ‚á]˙××í{ũ˙ũ}zõõöŒˆœFhqá ã™ŌC#×A!6„tC„.–Ärčūˇ~ē˙ūŸß˙˙úũŪĸPˆčē/Q ĸ>OœÄgYhXŗĀˆ@ĪesRčBM¨ŠŪƒ ˙Ž˙éēßzũß~ŠŊ˙˙˙ļ""]„œBGB'–Lš\ąŅæ9NP菨 Ļyĸ åŽ2Ÿ ÂÄÍäē ÄyŦ†!rFų Gũ\Č<˙^=ŪŋČaú™! ˛øK.™NĄGІ!8î"“ī7¤,§Aˆ’X‹ .,ü˙č;vũé…ÂÛŅ?|'ü?úŪ‚Ąí|ƒū›đ @‚ȏŽ!#X(•ĄŲ#Ŗ$—B‚=Š|JŒB‘ Œ":/ä}":ū Ģ įA÷4÷R@bA4°Z_ē!€Âpn˙}_ī|!äcßqIGGáKé2…ÅDXBÕ)B‚QRC`á¤ŌjCĮĮžëŲôԃĮ˙ôž˙˙üCū—˙ᐉ™Œ!HI°Ō ĄÄHƒâ%aPqÃÍę#Č.8ė-)t""˙˙˙ĐŊm˙Ĩû˙ūŊ˙˙˙øŖÔaĪÅĖN8„‹ˆI!ĨAAPAAo:¤ūīõ×˙ë˙˙ũŋúô˙Ŗ"ŸADO#FSáęA#… ´&XQey]˙÷˙­ī_Ũ˙gÔ÷÷¯˙¨’ŧ Ŧ0ŒŅ„§(pÆä…ƒ”8´ôh¨iHúŠdtG0@‡&Pûwõ|ƒ{^÷õ ĸ?˙ņ§Ã˙ų˙f^…%@ÁO¤6HDŠ8Æ("‡ŲbŌQ˛:a,ō>ŋđáúČQëúīëKëīūˆqīdpF˙ëä(ū¸Du¨™ Fį—AdčĄ dxÆGM!—2ųt”htŒöWč!Âößū˙˙é/ũ߄žŋīã˙ívÄúSų| „ē…G]i„ˆACSÅ5(tU‡bĶ„9t#ûØmņKūl˙ão˙ø¯õö˙­Åi„ˆėēpƒ „Ž˜B18†˜‹ ‚h L\ÎĪ Šua ĶaeŅ|ōû÷Ú˙˙ÕWõ˙Į}˙ūđÂ`àŒ8! Fđ“GÍ ´dŸ ƒPåēG„ˆŽÄÆ´ČŖč!S˛ëŌr:KūoĒ˙˙˙˙úßo˙éëĄH*hō@ā¨ ЈIĄđ‡†!„'AĶ*  +ÄRú_}o˙˙´ŋ˙Z­îß˙ũ.=LV”MĄy|æy "­ŅĘY!ቜpDvА‘B‡a EL¨„/ũ°ßK˙˙õ˙ũû˙˙Ķš•hB 6Œa:3B!L&{(éSˆČž&Ņ!BaüPˆ „HĮ CØ›ËŖë‰|vGÂhVē˙ļß ŋ˙ūŋ˙…ũûūˇ]‰ø(§›A}ALĢ8á5I†WŖ4žGÅÆSŽŦ ĸŧ$B*ūī‚ Å?÷ģõß˙˙ ˙ųōr¯D{ũ˙OJĻ\‹ĄS†GQL!#æS!…A'Ŗ+Čä&Hē# A,Ė#hĄ Qa!؂)đ ˆû aËŖčēTYVQ[oû˙žŋ÷˙˙ŋümũ˙B)ĪŠ1Î8Œ Ģ6ļQĘđŽĖŗL`’Ą–ĄâQÅúøCĻ2čFŌIœ˙áÛí~A˙˙ޜ†÷÷šĶëōų×ūd ›2:ĄÂCôtÆZB! ‚;[DQÂD$ÎPč!dt'㠌(d~ęû#ĸ>›)Ķ(â„ē˙í‡˙čw¯ßū˙ëÛũž˙ūīĩ0‹ŖĶ!Ä!McėMÆ3~‘Ų(Čęgá(v[7Ž"ÅDĄÛbÄXú…ą˙‡z¸ŋs0E×īŋ˙˙ãÛū?Ą‹#ĨJGĐ"œ$ˆęšT ŦCŲP!ÂŽ$pę,%„ ž ‚“ƒČčģ0‰čđFūP‡‘Ũ_ũ˙˙ī˙˙¯qßúūú˙ũųÅLĄŌ ˆ˛‡"c6‹ĸú銄t3ą…ˆ”8ŠE8‹ ‚P ‚œŽhD f ‘ĒÜ{Âp‚eyP—Ą_ų:s¯ō;_ŋo Č`w˙~ûë˙š‹ēöũ~ "ž!ô‚?˛éDæ]iBM°’Dæ]Ղ Ã*Χa ´0DÂ;ÕH-8Tb)RPđ‚Ķ#éŌÆGā˙÷ß˙ũ}Ĩūßë×~×˙í_ōīŽ‡.‚D'AãDn‚Ša4’UI„Æx‘ČÃb"VĨãčĶ„8A™ĸ…Ũ\UŦO ™C˙đՆžßöŊ“¨ũŧŅCöúūËŖ˙đũ}ŗEæŠ˙ÄSĖ ä|#ĸ9Ĩ;Æ --ØPĨÛ 8 ĨP eB.”„((‘ķąˆ$p¤…”ûƒQl`˜ÂÄ":˙Á…ƒ_ī/mvŗ˙ŽÍŋŌ߸í?xacø`˛ũW˜Dx^ĨiJt&ĒĨIDD °„N9Pb"’1Ņ!ːĸDGŌ#Ŗ+;¤Xú˙ņH~˙ĮĮ_{Įû˙ëņ_Įŋmú@‚…BĻ:A ! ${'DËDeŅtXx!°qĻƒ(â„DŒC8â]qeŨSZ˙{í˙ßũ˙ú˙ß}ßÖžT!á}ÄĀāŽ„° ܘå- !Á— „ė ĄÄ˜ō1ŖxS˛T‚H¯‹.‹„Ģmû˙÷ûNõūūÖû~ũ˙_úß|0›Īĸ>}Ât!…—"čDu< • ’„Deōļ !sÚÉ B Œ"čæ6“ņŗŦ\[ē ">_ūĢŪ˙Ūž÷ú˙ũ×ūˇzũö’ŖA9qŅt a3ā”ā‡T”R&€|2čēAĮ#p‚V"ČAČ*¸C ‚¤ %zŖqņxžvGD÷˙ëíīū˙ˇõČ8˙÷÷Ŋ{ĶA (Ä!BS¤"†KG1+@xB菅PÅ2:SLēˆIXŌVv¨ĸV”=á3 >qÂR˙ú¯š˙ęõ÷ŋ×˙ū|Ū̎ų÷ŋbMĘūS ‚Hyķ Pá4å, á :.ƒHNôæpˆč&]ü#āA4]JxŅ]Ļ‚,p‚Á…U„P˙ú÷¯Úw¯}ũöû˙KũĻļŋûžå8B$q`†"čÄĮ XDtG1+y‘Ã<3ĻJÃ4‘Æ ŠzÄEˆ‘Ö$tB8ŦvXA28Čđ4ąH [.ŋ]%÷ˇío_{û]oũ˙é5á˙đ“œHģ‰Œ"Ąx áEm({ `t,œqq„Ž:DœĄÂqáˆŦhGâ.?ũ~ĮŪÖđŊ÷ößû~økßtŊŊ´Ž!v(Ž’#č2ë#ōŒœBÎLqD|Žƒ;ˆ“rššœrƒ‰Į Z?Ä!Ī#q…ņ8öwHÎŌĄÄâa˙Ŋ Âúõ (x/ŧ7á­˙Úëü0šíô?}$rįÉˆļxbyR‰XDp<Ž‚Ģl§0emņ !($Ž“1ŖŽ‚‘Ķŗ¸‘Gņĸ‡Gâ"?ø0A…îōtÎ=„ ĸa2C”9•›ėˇ]2‡0į{(rœ¯+du‘ĀA„FbB!Z4Ę|ēeaNV…kaJ{AǘsŽg œwO3÷q7—Aa¨Aę$4f‚ĄÉ@РćˆAžÂDvGQƁ%åŌ(p„ B*,Xđ‚ Ž8„ä(ä?)Å"ĸˆˆˆˆƒ Áˆˆˆˆˆˆˆˆ0B"B"""""HxDDDDDW2 ¤š B#)ÂAŌ%(¸*P‘1Ä C#¤ˆčŽ„Dō"Ą „#¤ĮFŌÄKáNh#<Â"1Ĩ„G×â"""#âŠ4c3Žî!iÂ8đ‚ę'ƒĀ!e,ˆI8SZ \ÐÖ ”N* ŌŗÉFC1áA c‚ū‚EŽÉ K„z!<0č%B8ÅМGҤ âÜB‘ÍĒHŽĖ!ŋ"]‚¨Đˆˆūęd^A4’@Û Â˛„Y…Ė °‘ô$˜!ŖčQ¤bCiŌi„\ „ãŅ$4Hs?ûph#čEAé^„ Ú#ˆ4‘NĄŒâGĄŨâʨĢbG"<^1čąÂ ƒ¸Šœŧ¯ˆ„‚bĸBA¨rĐĐĸ įq&:6’`‚BLņQ„ŖiA":YCĒÄíK˜s[Պ ŋŌ!HAI2v)ŌŒa17“ Ä!ĄJ+Q4B4"đŸî4BŽ#ūĸ]‰YÅ$}\ Ą##Ą¨LPHö ŲÕ‘üŪuÄÚ ĒĶËæˆŽ¸ŽEGūÔ&Šr‡Fđ EĐB: 2 čRFN˜">o ‘ōčL‚BŠ8"?9ˆ"ĄœT4G‚ZÄĄÄĄČ2˙T XˆH „Cĸ˛ŌŧHmĮÂb“ AĐH† c":04‚(rĮDLfp1A3Ņ ‚¸Âņ™ĘB Ą˙üQĮ8üK L’ B´T_AŠ s„-D|žØˆEW„"'5ŗIÁ:B9t$|FâHq‚ į#Ö˃a Ō]BHrNK…ŽMÅ(ˆ…#ĄA"_ D|Hč":@ˆäĄŪy—D~KˆA Ĩ0ŋ°‚Kĸ:Š‘ņ.ˆh"Į Pƒ=aÎ9N!č!6Ą“áŗĻÅ'‘u°ŒRã‹/°ÂGŌP#*” „ĄČGƸá˙# Žâ&5„°ĸu—ČÚ ŒŽ‚ЉÄLj–TDōDgˆ„!+,{äuĐ]!Hi‰ŅÂ˙nG@Š.!„^r›DpĐĐ­h]Ō6‹ @–ÚB> C”8D|ēLžGÂ%1A:7„Â#Ą7„ƒ8ā„Đŋ¨ X…yŽ‘ÂĄ%úMüE`!Š@ĐLŽw؄?3BCŒVÕ .‚R bņ"ŽfDĮ,tHH6Ž’#É #Ą ä-A 0äĮA 8"é">G_áŅ—â4ĸ*×ÄT%¨ ĸ! A á/—ō°‚#ä|!$?Œ!Q1Â\n‚PB&Õ”öB' ‚˙E‘Ō¤!(ƒm‚u… \“Ár‡‰ü— pÍä~Đ Jn"”9‡ 8 BaÄG] BTl¨™Mb*đrĮ‘īé ņ1D5ˆ†aâÃ0ˆøh1Ŧ(„GÂ!Š(tá §Âœq $S„‘Pä‡!š8Ē/ؤ8HE (r(āŦkûÍDyL"qEĐBˆáHéD<(ŠŪ‚0HC ˜x’DTâ)GJ|Ét{4L#! TüãÄN˙!#éJĖ!#ĸęaÄ":Nw†91Â>“°ŠŊŅ QĸĮˆˆB4"Ąá¤"ąR‡ č#k˙fNGՈÄA¤šb§ÖÕ }A1†Q/›ÄYP!B˛8ČāšpSA=FÄČ #ŽLqcÍ ÕŠÚÚ D"‡Š DŽBŽErc‹„Š û Z:`ŠÆ#ÚAGXŠaA'…ŠœsX&’A Dų–¨Â!yC¤E!'”.úfˆĪ:ŖDEQđ„„GEŅ Ž#čŲ“ävutmÂ‘Āø¸ĨŅp%Ds. dGeȎ!ĸ„i!JsA}ˆŽÅGēA *ŦJÄ(„0A ?b‚J¸+#y ĖúēÄfB *øˆˆˆˆˆˆˆˆˆˆˆˆˆŽÅ0A(JBC@äQĘt) p?@ŠA”8Čųt–  Š9NqqŧŖ–C•‡ķ"šę)ÎåaĮ8äcpų–ˆŽ…GA !)Č8ęw(¤ÃÁHø"Į(w„D1‚A -: Â#¤A¤qCˆ$ԊBmĄ!1qq ˆĮŧ}™¤DDDDDDDDDDDDDDDDDDD^ŒĻ‚`EÕHÜ%)A„ųô3ž ˛ ĄÄ,ĄÉŽSˆ°EŒLfđ‚¨bÆ)`‚˙ÕĖh":Јđ3tBÁ BœLáË´qÖ&0 —@ļ" ¤œr ˆAFT$ē8ŽÂō%#Žˆ4‰—˙ˆA(D$°øŽ“Ü : …UhŸ:§jaņ<2>ĪbDH7†â…•hNidč&GCŒĢm2;˙Չ Ô# ‚A #gAqaˆĻÅqp…H%#ĸû‚"¸ŖŽEuHâq2Bp‚$ĐPø÷ú…IBh1a („œBS‰ aŌBmh(ƒŅN ]XáZG$Ž!ŦBT …n.ŋ°Š LēZ BačĄĘHbČÜDĄävU¤‰t'tmPä „Hƒ„ĐÄbqDÉŌÆ&ō*L¨8į‘$~•&q˙÷4A%EŽqØLl%˛1Ëΰ† ‚ʼn7+ÅAšP‹ ‚D â‚åD‚Bv–¸¨“ ˙T‚‚ˆbqåÖĄÎ:b†T8Ņ ĄÁ(  ’8é„„Ãáđ „Aū„â"Xˆ…1ƒËxŋũL‡TŒ8„!`ˆä""vŲąÅœ‹ŖčØ.#dplA48A &AĘ†‡!Ē8ZBl#MY"Ą+¯÷ÄHĻ’)Ę=¯.Ą!čQ„‰8É*… Ô9‡Â:BŒĄČĮ‡a  ‚7¤ĸ'jŠGĐ!aã˙ė!›PA"ė"œ TXī¤ąČ*.‚T"œÎ‡#ĄËŦ$!‰ ÁĆháĐWEō%ü‡ša& ēˆD|žG_õhí*0‘Į—˜A!$ ”$$!‘ķcŠÃĄ0Š"­‘ŌBˆBXG‡D(ސ":J‰ #>’Cē˙•ĖŲ‘4d/‘ŅDļË Ú;ĖŽˆ„qĸŒėģö„Cņ†„‚ÚA—FĐ-eō:0ˆņ„B9‘ķŠÆwPĨTĄFˆœE •eA BJ˜BûÃMvŽÅÖõ™Ŧ›ÂeÄ?Ŗ¸"ú=´koīĨíÂA†BU• ‰ÁEĄkDF$1‚„B1Qŗ4B$tGCË ˛È´^$~Â`¨ ™tmKD|WûõY2Mo†ŸÂ¤ŲÚOŦ7ģ Š°‚m+Ũ÷ūÂ&9CÄhŲ ąIQáĐ@Ŧށá!PFĄâ8üŸq7„‹ÄEHĮ‚M!"„ lvBAa9×øúŋãũ?Õ>"ˇtIņ\zė ‚ÄąÍla  ), †—It@—ÚX&aČ9s¸.Čā…ÁI!@á#Ąlt …!á˙Ŋ+ŽŊ.FĨū¯ë ũ˙ĢÄ":9‰#ČøH CcRÄPŠÍ Ž„<§D|ę’‚ŽöqĂãĐDuF0‚ÃvÂ#č":ö å˙õ˙˙îŋ˙ëkõ¯GehŠ‘BXí5 XD|$~ §IŦE —AsŽQ<ˆ1| ž"E ąYļmœDõŌøˆH2ēqŋûĨmuŌ]Ŋ~ˇ×áû}ūĢ,|":S4(Ŧ):På-D|§ÉŅô|Ŗ¤LEÎ 2;#†Ņ Ä8č"œ Q"aP‰Ä‰„e×ũú˙é~õ˙ÛÚŋ÷÷ǍA Otš— âÉ$Qä‚,L ÁcTSÆf—E::ĄáDäPāˆđZ 5ˆycŖčRÅ’ŗ%n׆R3DL6Buœ NŽDPŠ ĄÂ!<‘Î9\l2&Å6DFGFf_8Î4‘OM¤F"čä:B=„ķ™!˙œÎŒĸ†P#Dt2_9Ķ:™ËĄëķ|üؚ ͛e Ī,1A@´#Ą!Pƒ#…/ŅŧbPåŽ+<„â,OâB](H ĐÃÚA2:i""¨MHíIk|!á3æpŽ!u@‹ĮŒÁ„š&š /0ƒÁ4Ņ„ggŒ&˜F°Đ´Đ~ąaa1_ž,&i‚a!r „ŽCC‚aGˆƒA„Ī ÁĐō  ĪŗA„h ;ˇ_Đ"=kÚ-ۘEŋé(ˆ…eЂAÜ?—E,t"]ˆ"‡a ‚ˆ¨AK¨ŗˆá[î$p¤Üä#Čēc I"—OũpáŅōéiŨ: ĮŖÃA8tÂ6l:8ėsM‡á„OAÃŖÃa¯ čđŅŖctw†YÄã´{Đh ØtŅđ0čôPl;„gģ„aÚLqĩéÄ Ø‚mŅá 37´ Ę…šaS Šs@]ˆ˜T<2ĮŒA$”áhDqQC„@˙D܍ŌŌHü‚]]-/ū›Ũé˙ [ĘzOąZMē)ûŖÕ&ßēˇ~îīņA˙bĸ›„ÚMē ˇ Ū‰YJõWbpM§ģĶaØ ŪĖ÷ŸĢ}ļ)ĩūD āįÄ2;UvVÄDē‰9Ä"tSŖēče)ŅáĸC”8Ą(XiB ĨĄ'Ä"Ąƒ)#§˙[V¯ë×ßĻÖõū$Ō¸Ē˙ŋëWīđõ÷}?×ÖčãŌŊßŠúŌÅē×˙ŌëIˇôBâ#‚Ŗ!G6TÍ ‚âō8@Áä4¨P¸!M„‚#æ%>¨kō:qéûĨĢÅw˙\Sņ×ũ~ūŋ×ũíZ]}{Ũ:ˇũ4ũôũ?°ŌoĻ˙ÕŊ×Ũ#-@Ã!‰ä,fōų„$ųˆāxjˆ‘$„B#…Uĩ˜rąÄŠ Yŧ*b#°‚‚aHé‡˙ÛūūO]ãZž>+_Ž×÷ˇ[c˙ßë÷ßĐ¯÷˙k†ÂMŖ˙˙ŋtŌ„m$J‘#ÁRƚ”<ž$3#ā„…bPŖK SAūXâ&„p‹Ėq°‹¤X#Ž‘ĮNļë˙˙nëBū˜?ôū°Ōū+˙¯ŋ°ŋ˙øc^Ŋw^+˙ūŨ1_īũ×ūĻF¨åĸc¤A‰ĸ *„)|úqBF#Ļ„Hƒ‰œrp†åXč!.‚ Á 91ĐDn¨ˆ›Čĸã|Pß˙˙Áûƒ đĮū1Ö¯oäJŌ×õūÁ˙ ¯ázúߜvŌ_˙˙ĒšÚZBHp†3‹G‰N‚l`’A &WYP$‘Â!ŖĘČčô„˜ä â! ⌠Â#ĸ¯Œb"8‰Ũ $]—„ƒÄÚ˛>]g–×˙ũƒmvŖØÕuû‚,˙Xo˙ ŪŋūÖÃëøđ_˙ü:_˙˙ø!!Į(Ęr‡„8Ē.‹æˆÆ!1HG¤2‡B%ĐDQâG’$"39C‚Á\YC‚ œIKˆ09 ģ,t"¨ŖØ@„%>*Ԏ†'˙˙ õōęAŋæŽRËŽĄ˙˙†˙é'˙˙\7üąŦēž˙m"ÛA˙ú˙įjaœÆË ‚%Z–:„.qJHrœ(D|Ü`‚Ƹã„"6’H%Âdt„,T„¤‚3@’DD B ‚ÄVĐ˙˙āÛ­ūFūŸ˙ ŋö×!ŋûū˙˙Áŋūŋ/˙ô“õúë˙˙ŌB9V’„#â!4]ōąȎš\A ‰N"Hp§!!¤W †Ŧh'°6[#ätĄāŋâÂ˙ũsh7ß(A˙õ˙ôŋūŗi˙<Ŋ˙˙8ƒŋ¯˙ėWôN’ŋŋë˙ėėĄ‚ ”9NˆeŽaÂ4„EF'ĀâŒ!ˆ’r8\q!G @č(š#AÂPá HąĘĒaœŠ:A1ŦY^T‹KƒõūßŋíķË˙÷P˙ū>Û˙ëöˇ¯Î/Ū˙_ôŋ˙GúJH˙ēíŊ>į`Y&qÉēaXšŅuŒN8AfâF(㠊LâeŽx xl2<_. ‘ÃPŽ28Äh ‡ —‚â`# ™ČāЅ1 Šđ‘tB§DM#Ų§(rŦîBūŨ_ûOäëŋũŗEאÖh˛uŋŠuūũŋ˙oë˙˙Û˙“Ēõ.ŋũ/¤—KK˙­+˙ŠQ@ÔPåĶ@Žá4˜‚)æŅÄjCŽ8ėE—BĮ0ä܅“ꐐ'îCˆåōņ՟Eø„†D|"‡\DAĐ"C ’B‘´P„le؈††_˙^jÚ˙Ĩúôē ĩm{]úí/m-nģÛ¯˙ŧåûkvfŋ˙˙Ö¨Cī×ßíŌ]NÂB"œ¨R`d‡i IŽLxˆAX˛ !ƒ§)ØAĪ!jãĀåXāˆô8âq ÁÅ#æÄDΤ„F…PLÎ! 片!¤9ĮÄÜpņ¤JagDeRÅā‹§ūÚZ;ĩÖļÕ´ŽŌaĒė4•ęøa&Ki6†ļļëkwkĻØ_Ũ~×í$×[Kl/î×UՑ˜}Gt•¤ēiÚIíĒŊ\ēXVPá$$~PãvĄD0ƐH§Dt"&yt0„6GF$(xč ŗŽPé Ž8HJ)ĐAfҜ%ä $J‰(ˆļLq8莋Ža …#čDō8‚ üLķĖ×ļ“h8a/a„[Ø ÁĢA„;‚†)ŠJt˜AĻĐpŌ „ØŦ6H Ķ °Â ÂlPA„އđĐaŠa0ƒ‰ĮI„i„r<%T;Š0ƒM0Å&lB…IšCŖ ˇĄPdtN”Q;,sސÄDÍB"!AXCÆ"#H#0ΐÄĮJ”L"Ļwĸ"@āŦĄĘĄ. }DDAö[ۈøøbšųV!;Aˆ[ ĸ°™‡B îƒZ  S„ ĶŽ˜LĒ8T&lEŦŠ`Äj;ûNÔ¨šŽšÃ ö˙öÛ[ ˆå†ŗˆa†øˆĐˆHÆJąŪ#EŅ1Š0ė"C”9G/a„Ę#x!D|ŧ°A™Ęäx-$Â@âā‚ˆT‚(q!G!KąAŦ ‰4B,îîŋâ""""""""""""""""#ˆâ"""""""""""""""6 Ž"""=)Аˆ‘˜­¨AbPሄ"}c#ĸķŽ‹ä ŠH&,"ƒ3”áeĐJPđÂ<„TCB%đX‰Į&á%„Žü#ʔN#"´a "ĸĖ8ũaFáû;ŠDt„](˛‡N38A —Æ(AJ…Ž1BjFh T #k*†GA"!!(h 2œ$kHt푎{tBÄē ’Ž8‡ÄĄ˙Ë/~“â´&Ķ)Ņä#BB1HGˆ8ˆ‘Ä6"N‹ĸų>KĨ4aËá2čO3ÄCâ!8„$5įЌ g)cˆ2ôBEDWĐˆACķdphūšôûáDR"\ ˤx‡I”ųtGԇŅ~qÅ …Dt3čہ‰ô*†XBŠGB"ss0ˆ„m—A"ėúJÂ"œDDq!GH ´'DeR-ĸëSŲĮ&˙ũv—įq„…8ĄFt8°‚<ē.‚,BXA ÄÂa ‚)æxLē.‚ ĄB$:2ĩŽ„Ą„‚Đs $‹Ē˜z xĮ#§&8A ÖŌBIĸ:.„DBt.Xå˙ŽØH|K APˆđ„˜č2† „[DEBaGÃ<§(tB${Tˤ@„FĘ4)‚ĄÂ(p’-Š6 ¤pBáąŅ'â<üqČpĄ™ÄD˙ė<1K“D!•* !†’ Žŗˆ „ŅQ|ē!œt‘G$8AXí !à„SÕ$w˜ē š˛ āĪaH âD BAĮ(qQ8áQ|HôGŅIá9q˙ ,›™NßGEāŠžA:Æ1ČKøˆ‚ nB8AŽč"q"XęG `Št"0‚ÂAFqÂHj"҇ „ˆI¤‚Si!(Dëb  ū8ę"Cą;„‚#ā‚‹#ŖyÄ&Ä#ŗiKé B0•”sGįĄėEr‡cŨ„ĐHÎŅä1Dƒ‡#¤'ã†ë7EN4ĮÉ˙ųŨâIŖˆÆ3Ž"’F"NT°‚ølX%T ē„"/;b „`ˆ â›B!‘Û čúA7‚ąF!1ŠEÕ ‡‰C˙˙AôGA 1Âä‡GÄV5ÄâaAB°Ļ˛CŅP!„HsÄDâ"ŲįúHKĄ. Į,…BŽqŇ@ Éņ$čęŒ$ˆ.Šá_˙ĸh‚ 5!đ‹‚ąĐGÃ)Ķ• ŖĸA=‚ˆÉ8‚ „tGG‚ÁBDø‚Ná ˆáHāĘG Gįâ‚Ņî‡ ¨"(âqđDūYLō:$š"Ü(ŠA"”nÖSޘŗČ"‡H : B\ ÜÄqД8—EŅŽ|Q„Aø“ČŒ1É÷G­FC‘Ž;gR?€Ų‘r;ã2×8g É!, ĐfŪ™ P„˜ÁHäG@ ‚ âĘä|$B$|Ķ0„ŒB0ĄŨ …¤ô]’ 9ú]čŒq„@āq ^ D‹er„ãŠSMŨ˙ˇˇ{BŽ÷m;ˇŒ;FŊ$c]kAJ ą;„š}žZ'F0‘uG:„V‘š„]‰Ņ%!¨AĄ.UkCŠ‚#Ņ‚ Ô$_/‘á2,]B —Ú˙‡Û˛ĪÇÇéh+ü!Ą,EÚ˛:.ąT1iHH„m ÄL(Uät""!Ԏ†„B #cČ–"$‡´!…ĐŽˆĖ/įd,í ß­ōŋß!iŌÕ_ąĩĄA0Šc„#ú(p‚c†„ „(ņA g˛"„IĨ…nPâ!ˆRn$6āa‚DĮ$ãHDM˜øČėBGūÂņņßü_˙÷%1!!„PđIB"a r‡„ Qˆ˜ÄŸ¤qŌD4Cˆ‰:ITąĄ„’.‚ đS”9‡)„yŌYt‘GLŽÔNņ˙˙˙úÚÚé(Î ļ9… ųÄjB&hĄ$!ôGGđRč!#2… ZœqsŽPäG!@ŸŽqĖ8‹&WÄDDĶB ŋĒū˙˙ë㏈†‚aą:*Ĩą!‰lDēHBĄg*HhFPäc„âA¨p‚ ! 8AXĢ#Äpp‚hÚ'Ė‹R SąR:˙˙Ģë˙÷˙ #â+‚Y­ĸ?Đ&GPˆúi ŒžŠ•…„"‡DsA–aÎ=‹“qŽyÜ29D|!˙U˙<¯_¯_^ÎÅĐAhP„bHŌ3B&ˆ6Fb@Ž9ņ… „DėBH09qŅ*ˆA c‘Ž.qĘ†ŽĄ#Ą+*whĪūK"CLꉓ=„ČgœD"Ųģ1fˆœ˙>db"ņžt#^NzyŧęȪȆFãų=yˆq‰-“°™ddtiĸ3…˛t#90=uÅŖ C‚#á$‹áLБŅô>‹Č$i›I ’„‚LŨĘ ¯G H—…Ũ™/X+˙0A„Cø3Æm—#f`‚^NBķÁ|ÂG P˛Â ÎOÄ&|Á2`ĐaãíĄč…ČA„AåČ";>F ‹Á0ƒ)`f\ü0ž„ ķ6d!„Ÿ3g!I‚#ŗ3A„ôgŊ4ŽßE‹4c­2uG+.Ŗ B ÂB"\Aė$R.‚FAĸ?DpŖCŅČ*!‘Ž%Hz#ĸ:Ō=(r1Đ¯ô|hØØ Ķ餰Ë9ąķŽÃ SaÃÄĢjčØõFĀÃĻÚ;´6ę“xežŒ;FļoF ƒaŅĮi1ŖÛh4FĘ5ētkmĢ­č Ûi†MŌ6áčÖ- Ų¤ ēQ˛AŊą(¸"HŠt]  ˆčL ^ÂÅ ]Â3—á !pEÄE „SåŅA#Æ•åÂHÎHrĮ(p‚ aá"é!Ą.’#ĻSŠ>žfŊol0UaŅĮ¸nV4Ĩēi+†Õéˇzot¯ Ķŧ§ąOAÖÛG¤ßQ6“ĨÄ ę,z†ÃÕ?Ĩi6 $ŅĮaĻõà åB­ąM¤é{ēIĢzėQaˆˆōCÄWˆŠPåBDpœēË ¸ˆa‘Æ…‘Đˆ"ŖˆƒŽHr c—ƒftŽÕD`Ä(6cŋ_¤Šúž—ßãíîūĶ˙ŋJÆˇ¯L;Iúęū´›I{ģëK¯zÕ/ŌžŊŪßęúŌt›ũ%¯q8ˆč ˛Tšĸé 6ƒĮ"æ"§(pŌTXAA‘ōęBwŅŖ¸A3ĒjXá0…CF b! ‘!ö2čēH§*t]Ō˙Jãũ÷ŌzũûúoÕeŊx§§ûĨ˙ûúŽŊ/ŊkIUļëãj¯îžūŸû˙×ĶâħCc„ލ"ĮR­CFrœ ŦGZ (”8(LĒ*č$GHã”9ĮŽ‚1…“ˆ!ÉBT‚$XƂĮ[ˆ´¸˙öŋč_î¯ą˙˙W ũ¨û­ĐūõĨ¯[^;ūĩū˙ĒMĐöĩ÷ĩ÷˙úõ}ŒûUÁ9|Ž‚Cc ÃJ“Œˇ ‚!A8Ō—@Šˆ¸ †8 Ú8F2:Y 8„ē‚„„IŽœÕĘ‚™„Ē&‹˙CÚ˙Wú˙°ëū˙Ō¯˙˙ũ¯ŋÛ×ūĢ˙÷Įއ˙WûØWđ’;ė2Ē &a¨N…ĐD| ¨#tm‘Ō™ây)ˆõ$‡(uC,â“B.XãN…k˙ˆZ˛ék÷˙õ‘E˙˙u˙čņãāŸĒGĢõÛĢ.—ü/āĩĢ_ū1øAfkŖ„&ĩ„qÁá0¨6,ãœpA°Š(„N ND|rč LDh‚ÄPŊ‘Ã9IŽC@āˆâ¸†y2%ėŽŌŸ%Đ˙Á?ˆ˙ôŋũ‡˙˙˙˙˙˙˙„Xëę7K˙˙XüđDĮūŋ˙]‰3VGôÄâH‹Ą×‚-B"’8åÚ čHސ09'ŌĖä â$‡C™ÄA ĨÂ8ĸ$^ˆ!ĐK˙/—_˙˙đn—ũ˙–-ūX§°=6”˛—ļŋūŨKĢøFŋč/û˙ųbÜČN†•"ųš#â'ˆˆ¤mÂP’Ræc  „DˆÂ)Ân‘C‰ ã“q B†XâB8”8A DĮ#r‡ qJ•JD]ü&?ô˙ᆗ˙ƒw˙ŋī˙ũ?ũ~ö˙^ŋÖŋtŋ ˙˙ķ Ōeā‘ãlÚ!ˆJʄLŦˆĄIœI#Ž>GÎUˆ"ĄPë‘ÄRĄŌĮ#Hƒ„0ÂB4g‚‡Ž‹ĸJ¸„#J™:˙Ĩ˙üBß÷8ƒõũõū˙˙ßé/ŋ_ūŋ¯P—÷_ŋ¯īî!:Rč eÖ%8„”"!Ąe(K` @>mBžÄ$û ("$RZ`Œ#F,Z-ÆŠ2‡N"dĄb‚.°ÄŽ)Ė8YuĖ×ëá˙č#@X"žžļ˙ūģöŋũž^ī˙Ŗ§Å1˙ŪÅ_¯_Ō˙˙˙Žd|šx‰ĸ@áĐæ˜A„‰Ô,RĢ#˜B…BDtBØ ‚ Œ%Äö(‘Î!ĐFc¨œwo‹åņôDí‚)ų„ßŨˇ_˙ëūؚ<ˇ¯˙Û4]˙“ŦŅ}eũ~ģÛsOēõ.ŊŗŠŗ īnŋŗ=Í„’Ōdt"ؗGÄ}ˆˆō‡@Ŗ†BqĐŋŦã‚#¤FđĶ)ĖõĨq˜rä ãIĘT] ÄyV"GD< ‘ŒDŅíu]\Ī˙[úūû­m/Ô&žŋļ—k˙ļ­¯éūŲž×ūf.˙¯˙ûU÷]/ÛJÕÔĘô',dtJĶ„Ę #4ĸ8ÖÂB IŪ+ˆ@ĒB1Â#ĄA&X":GN:aÅqIZDŒBm""GF×˙m-öŌ_VD(a']nŌĩmßWl5Ķm-SMé6ŌÛKļŌl%­Ąō.­v­U†éĻŌģ[´?°ējÚ8öéSVÂL0ž”Ļ< …$ˆö‚1—@Ē`ŠD‘ā‚§Ą „‘ĩ0ÍA(AňĨ#˜BAĻÜY–‚A GØĻ%:bŖA„NAFÃH Ķ Ã B#á(á EÅ „Ø…„ † 0ƒ`ÂHÆiąLP ĶbS ˆ“ ˆŊ0š Šl%ąA„G’ ħ„MŠbS ÅCbļ 6(1^[îw(AÄ „ÍB¤"/ %HpA$q‚r‡ ¸éE$qŅtC‘ N ‚AœuØÄŅs$č$i‘d"&N/i­ Â˙mĻ!T<̆ƒ ˜L Ķ@Ęã„ ÁĶ8čCÅamPvƒ Ēa5L6š}öbškاaW´Âiσ hDÍĐA 9ˆˆ‚ŖXa uw‚P@„ÎL~]ED":pĐŦ›¨A hI;ŖØˆˆĨfБ˙āÁˆˆˆĻ"""8ˆˆˆˆˆˆˆˆˆŽ""""#ˆˆˆˆˆŽ"""""""";‚ "?‰DtŖ‚p§WdtŌ¤˛‡ƒ°­ ‹l[@¸‰r1ÅDDĄĘsŽ’@„ČĩFBDxA3WøŖáwöv°‚Dqčū]*ôf8D}{cBÆ,Q‚EŌbB’Ģ ƒ”äØL6GFĨžD|Iúą§ũ'úI„V(+Hâ0‹Ŗ˛‘Δ A°V~)ĐF€°EXT‡! qB-!8į99ņãRt!a uē˜_˙˙üc,$îiL)O.‚D"íAŌŠ e9æ„"‡<tD DĮ"Xé ĸÁ ĮD|-PžG‘’´"„b.GÜGũõõöÂ#ĸ>tH!(Ē.”GH Ŗ„‘ô_a## •'Čč$'ŽA/$čD ĨŽB†‚&úC@ą!ŲAšö]9>ššöŌO°žâ"%Z.‚Dt¤„™č$ÂÂ.Eü$ā‚´‚„PāēÄ!„T C„ Š€Ą3€^R88Ŧ‘ô†„H„vd°âJŗč*‹—IØ áŠĨphS6QT)— ,$áЅØĐ‡ ÄKŖœÃ‘GPŖDB"Â#áŠ8„GQ"¸T‰Ũ‚—V"&Ö](A b7˙20ë2RŸĘõĄA4L›FŅ V^{Hā†i“ĸ’#ā‘A!Ü"o?„—ÁBé c™ÁdpB:#´"{(|^qbq(¸ŖŽËÃĮ„xŠŊ•a›ĶÅXÂKØÃQ&á㤊q Hšâ;#„_ûūâūKÚi¯ÜˇÕFƒ8âÎ8’¨ĄÂĄ.„ŅF1 Ą‹@ŠP™į#‰nđ’ãš8A(æí$„âWPÚ‚õ˙˙ņ˙-íņ:eŦŽįÚB!#‰VŠB8đ˜ƒGDčDē8ˆûáCû „ÂŖ 0¤\ÄvГ˙×ũ'_ņ#ǐŧÄ”9.!Į8āŽaŖh$"AAI ~Ŧ搄 .g4 Al-Ž8ŽÂ†‚ ŖŽwCųšõ˙˙[õüpE%*Ũ†ܤB"D‘Ņ â%Ō†„Ž<">— Ŧ$ŽPô(q0æt$tjĸ­`áš pĘõ×ūu×(B!‚ģAŌĖ<ž"9´!(§Fõ„6"!EÛC.°Š$Ē:p‚†GŌĄPŠ‘ō8ĐūfŊr^\‹æŦîÚy”ĻwH‚˛vFėĸ!Ä*>Œū‰n¤U”gŅßĸUgDhŽĻPi‘$r!–Љt")ЋA!ÄNbœPEyO!9‚8áhĶ.ĨÃAcXEqÔDÔø@„+„‚5ĸ:}‚vPá‚˙Â!ō`Á>fØD.Lķ6 dĖÂ3Æ`‚!ō`‚"'Č đĻŲ.ޞ0aD{0AGœxA„8fĖŲ„A„ ¨”ķ0a#á°NË ã6Ęŗ>EĐ ĐeĖØÍŒš›3fƒlÂ4\Â!Ô0ƒOÄP’ š!ĮeüßĘāĐŦb'áÄZ/ŖŽāŧēÁęč&GApŽ"š=‚¤aĮÄEĸúeĪĩĻĐmiēhö5ˇAĻŒ:0ė+FŖåĐ"<ą†MPbÜ:8í7Ŗģ ŪØįą¸m0ƒGÁčöhö7hĐŨ=Əƒmëm0B6=ĶFŖ[H82ÆĒö[ŦėĄĘŠemÂ@ˆé¨Th…×LkŋP ‡‹´ČâÅ'ŋ!¤ôq˙Ã2Ģ{‡Ed3JļčãÂN“aŅîumˆOƒ¤î‚m&ßi îč ÚV“qOMé}6waœŌ–ú}'Š~3"t›tqáŌmYcŨ Đpčđø”ũŊŅî‚‚nŊ‰XŌú–=˜sYpĸ:#č"‚Gĸ:.…2ĮAĸ}#xŸÍZTđˆčēÚĨÂ†8A ‘ôņÄv"ßĻÖáßNéui\SõĶ}_Å7ŪõīęŊ:WŌzßŋ{ŠžˇŽ“ņN“Ŋo´•4īMÅ:OWėSjûžęŪ™nļ‚,$JÜ=†GP‚PHiÁငN*ö*Š~ĸ*P„YC֌ÚĖ9Į!8˜O&8_˙˙WúÛV÷˙zŌßöŽ´•+Ģ_U÷ß§˙ŌxŽ˙žãīú˙ī~ŽŊÅE¤ĸKA†yX„‚B…$%(¤GŤ„$š…ĸčēBÂŅÜ ŧE,ūvã˙īīÕĐúũk××cũÚkc]¯ŋúíkwūģc÷ĩZ]5ßŪŨW_^Ŋë}P¤Ž9C‚aA!.‘Į(zFôˆéa₆Õ$PÁį°ē{%Ž%`G JW*Eē.ˆé˙úĮ¯ũnŋë˙Ø~¯}_^Ķ_õúáÕŋ4 ž,?ûÆĄúŨ~?×ÜU˙fB¨B)ĐŒÃ—B„‘ŅtLŌŸFĸB"1j@…Ūčm,„DÚ˙ú˙ū÷ũũg—Û˙Į*Oû˙˙y´˙ŖĀ"īžQžyįŒázūŒ8K÷˙oGŋĩ'EÖ}Ņ%EŅ„Ü.b")Ņ´  ƒ#áD`‚‹;•(å4冂DzĄ+Š/ūyz_į—Ö˙ŋ˙˙íĶOoũŲĸ_'^hˇJŪũ!íŋ˙ūūŨ!Ļ)}!ķ ¯Û¯ēÜDBB%I‚BI" čDE-%C„S–>!"Sؤ„O"¸RčÂúūĨ×é~؟š/Ũ-6˙ŋ˙ĸŠ˙ÜūëíŽßũ˙÷G­lĪī×ÜĶûûßũW_t¯˙tģ+§Gjh†„ †•ĸčŪ8*š‘„SŖ ē0‚ˆe#GŅĮA´ĄœŠ@˛:ūŨ^Ú­ūž“këuúIöžé?v’~ÚˇWļģa-ē´—ä´zˇē]í×ÚJö´ŋĄK}ÚV•Ž­úB'-BDâvi‰FĸhŒb1đ‰YÎHxí&ĸtŽ#4"Ņõū4ͰŒ<'q„L Ãa„‚h4Û qĻv’ &ÚUđÔ&a6!1„ ˆ[nļĄ0ƒ Čy†–ÃV áĨL&a$v”‡Ŗp˜A„ä8ДđƒA„l4ĄĢh6!z—DĸčÚ< Šˇ N’4ŠđBËø„ˆAļ]Í1#Ĩ@ˆų„0„q+¤LĢĩĻÅ5a6žØĻ*ü1^ųVą[O*/Úa;†ļļ!J ö*8bTCƒÅ5ÛšpEÆÃ˙Øt×O†*UˆMĻļÁ !JÄBC ŦÚ„Í YuˆEĄ‚ .qÂZ„‚%ÄGĒEŊ ™[T)Ö"]ŽĄų‡Ia!°Â`¸ĸ:ū$ ˛.dfCe:) f0Yŧ†F†qœÍŗ‘ø†D„s#Dhfâé^é6IŒøzīō`Ė#ŒÛ!™ Īd| ÅQÉLœ™aɝĪ2°îWMįC(G‘9æ"ŒöGÂ!N#ĢÍä2(3ƒfĖųœ ˆUŧ–UęmĨ čDŸ6„Hē‚QˇŒ:^īōÚyÁ ĪGˆėņ„"ā4x4< Â=‡¨AØA„GÆ „ #āz /ŌžęÚ5ˇ‚#ō‡č÷° EL!hÎŅāax Āâđƒ@‹ā˜A„gxAāšxA Eė Â=´Â'D'’}!ŖÄVˆëã¸IŌo„“tŌNéižęąNžëpÛA:ÜS}Į¤ęøÕĨ{_é}=:N•ûëũēNīÅVŨzWVīQN¸„éēŋ{ē^×I ō*^ÅqĸĪPėYV¤Rfk™¯í+ŌWoJú˙ŌNŽīŠ­úīiŌoÚ_o_˙˙ĩŊI=ŌxĢúĢJâŊ÷ī§Ū›ģ۟ũģKlM14…$ČņŽ"Ą¤oA?˙IŋŌī¯Žģßũ¯ŪĒß˙Ģë˙_}-˙ˇŽ´ŋ˙~éÛëtŊ¤Ž¯Ū­+ú˙ŋŌßčíS#ŖčžN’•ėÃđ¨˜ō8AŖčē>ą˙úßKëž-v*ÕĐ˙^íũ…úū˟kö;jßū­X¯úõũ˙Ē˙[]˙ųŲR#˜A2<AŲ|$_.Œ# hˆÅU‘Å# b.„Ž#Į˙õíē[ĄX<|W˙ŦW÷ãīŋŠúø?×ņƒ¯û]{×ī˙˙`˙õÛŖÂé‹R& 1¤št_+Â(SOĄDCHH˙ū˙ ˙ƒü/Uáu ZüŅëūnØ?Ø>˙G_ūúā°üzũ„ˆų •BA8Aá Œ—EŅ‘tAŖ*‰KU!)ŲvÂIĖ!A˙‹¯^đÃüo˙Á˙[˙ũ˙˙ öž˙˙a˙ˇë˙˙OõčĪ ?ū›¯sēô N’ 6‚A*$‘ŨLԏˆ‰„EP„ĩ˃~„˙˙–˙nĨÕAaŋĐ_ū‚ũ˙ø˙˙î6ŋč˙Ļ˙šĩ,ŗ÷üą>,7˙ËĮÎč‹áBc) ‚! LE•$‚Rœ$Ą ”ž"0ˆüĄÄ…íˆK˙ũ7~žX?á˙áö_ēä˙ũž+P˙đo¯×˙˙Õô°oõũ{D †MĐI$aĐJqÂ@‚‚T B‚' ˆųŒˇ KąĐAō;AëûéŋŌĪ Ûú˙ú˙˙ũe ūŋé÷$Đo˙û! ˙íĶ˙õÖy{úYä˙Î'ŠķˇHâ‚HL&’HaĨ„‚ap‚& ƒĸ( ‚ãŒ":/˙ÁīzÛ~)˙ˇūŋūŊ×0ŋÛõēo˙ŋ[õŋ÷[ŋã˙ßû˙ūģŋíü.Pá$Ü …$‚BAA0…H%+ $g!)ÎĒÉ@‰CœpÉ8ˆAũŌũ˙É׊uųĸ˙0ŋũK˙ũíīû¯_ũf÷Niļg˙‚*ŋī^ßfˆōũ&×ėŅ~Ĩ˙´}Íå*ģy‡Ah ”ā‚8á8¨ ’pĒ $œĄÁ,ŽˆøŒ§°La]G˙íĨÛ¤ĶiŨ6ŋj—˙}~šû§ii]:ëĨžŸuÕĨuûjšMĨŽūŲ˙uNŌm?÷_ׇ˙ÚØVĩ&„ „ š&Ē Jp‚ pd}A Gt‰Cˆ ­;Dxē!T Ž8R‡Š—Dëö´›¯m.ÂöáĢ .đ‡iŨŪípŒ8ĨNŅĮļĒĄŌm$îÕ{žú#ęI†´Õ†oŌ[­mĩļŌž´aö̰ÂKv…ZÚPÂ0áą°Ō÷qŌA9NA ‚DĄÄB’$w!‡ Šs(p‚AB(p‚B[—^†ØŅ´"čēąAŠb‚ ŠÃX”ęŽÂLPM6'xL Đa4ؕƒMŠÂ 6*a„‚<&("@`„ ƒƒø"ãØĻ(1A0D<Å ˆđH1Az0œB EÅb6(&lPA„âT`ˆâÁÛAŠkĸˆė&!°‚p‚įp‚ŽqÄã„AE$0á!)ÂPTJĐJ'!]—0…ÂĻ‚ųšÃL Âa4 ΃4 Ä a†B""M†4" ( Áˆa""!§Ë aˆƒC˜B4āÁ4 õĐ0š„M4LĄĘ˜ ÂjŦ0ƒC0CÚ°JA„JzA&œtAZĐI#‚!I!¤&( A Į;Á ¤xĘ$C-RAņÔq„DDDDDDGōV‚A H ‘‡!M ‚„B! ‚A(I šP‚(p‚ÂPXI ˆú $’/“qĐ W"Ž3âĄ0ŋ˙ú@‚ˆ„ŠA"‚ ‰Į&Œč!&ŠH ¨$Š ’A'B) ¨ ˜! „Q-Ѕ%[X„&ĩCũ/ũČĒA#aÂF($c„ĨH ‚œ ˜BC …&”á"L!SŽB“T „§!‘ņEē‚4ë˙KŌû ! ‚Š $Hp–L!ԐĐF š $LĄŌT’I#¸IaéBBˆų7.„5\ĄÄ§* Q ¯Kōa%: XA§HB „)bB"SФ"SŠÊ‚B .A”8K 2ēÂɏ Ä<Bū:tƒđ„ã ‚PA"&œp‚T”ã„”áwA“gH$č ‚Ž‚ H MÎ8O C˜p‹ų‘„­ Ŗ ” ë­ãč1AøEŽ&á"‚!!I( ‚H§J‚DãŠH ‚8áAL!‚‚„BÂeBCĸ莄Í!H$‚@ˆč&Byōađ‚ „Ą)p‚ㄉĮ!8č!8č$‰Ü$A „BB!Â;¤ŠĒLSBS„ ÄXˆ2c„’ -ŒÂ(t#Ė×öã„ĒB’B „9Ü „B  ‚‚!Ž Â!HDã„H% ‚H ŽôBS ‚DÃĸ>WFEĘ„ĄĘpˆø#Ž*CĮú „PB‘ĮŽQA Į§  „ㄤ"B$Į#$"qÂH$œt¤‚K8┏‰…Æ"h„’ ų œp‚‚8á) Œ8œp‚6%8A!ŽqËã¤F8A Į!Ah ˜B!(!8á"’JÚDuęB#\Íń"w p‚I!8á*qÂTwAa(,îÂA"qÂqHR3„”įDㄤ"qÂ!“ŖpÜã…ÜYüIū9eŗ°Dd­xEw ¤aĐBqÂEA „ šA$L‰Ü „B ‘ÆG ´œp7”įąÂ „"Lp‚‚GDߒķE¸ žq3Y^Ė›qŽÅH×ge$~$â2Ŋ#ģ3ˇ~(ŽS¤w&’‘‡! ‚ŽHÜqA‰‡AŒ:BwKaAĐ „p‚ÎįtŒ8LĄÂD⠘´ÄB\Ήšūā{x?ÚG•īÍ ‚H$Š48âL!&8A0‡!҇ Įz!œp‚ㄒAGp’ $‚ ‚h$A ę”B!ū•ûīū‚Ŋķ먉Į!‚hPJqÂsŽ‘‡!ÄN8j‚ ‚đ‚TãˆA„p‚8á5H,0‡aqŌPEâleŦ›Ã*Đ"PÃ6ŋõ•Įú3D)u˙ų’RrˇäĄ5ô]NáÂŽB’H!P‚”$qÄ ™) ‚Ė8‚ „#A#Ž' „BD㄂A ‚dw&‚ZHiŌĢ ĨKe^ž\ņü|DVąü}¤ŌT „R8é „PH!8á*aÎ8„‰Į‚‡Aœp‚Î8HL9ĮŽHPAœsŽ!Мp‚dvœpA #ĸ¸4< ‘~#Ķ`8Dt?Õ¯×ũ¯ĩ\0‚a Nč!8á)p‚C„ˆ­qÄ$)â!"%8A4A ‚E„"qÅg!KH ĸ‚„ČčDBąŲīÄYMķņ˙˙2.Ž(3§õú!Ž!„%8°I˜p‚8įD ˜BLq&8A„Ž9‡0á(!ŖŽ"‘ĮŽ&#Ž( ‚’Ž!… „eŅ6DbqÔB#¨Ą#ĄūēŽŊ!ÁŲĄ/ū 8éŽqÅqÁÄ ˜BS„’3œr1ÂDã¤qË$Čæ¤9Į!!CˆœtŒ8 ŽķŽ"B!4A Ft@œ:< $r/ā‘ōt]õ_ė4|ÂUpŠá¤"Ą"B‘C“% …$”á"w á""B‘āN8H¨(fE$ė!8į$B!"( LB#å|B‚#đģGÄcãĖÖF˛)8‹j@Œ™˛C YFn te: q(Îļƒ'h2C˙g,3ˇ˛qUjîÛjIŗēJT2ȂD@2`P‚BPæRd|!‚8é ĮA Į$B"$t„ËA"C´aŌ‚¨îqÔã‰7 8Ab#ާ$"Ļv'˙â60ƒ7Tla“'ųCŅĮŖãÕĶØÃ%ôlhÖÁ–vŒ;H65pËØ• p‚a‚dq„"‚ŽB%8Aœp‚8įPBAÂN9R „IžB!"C ‚A"’1Ķ.ˆūx1ũ&ÃA„•ē8đĶ 'l$āĖxZm‰VĐN’ĶaŌnVZmŨĨmëb›Iĩw¤ŸIē}YŸ„¯”öšIŨÚ}Ũ&ŨÚVŋoÕ°ÄĢnn›aKA]D ÚļĶž‡0á,!AŽ9ĮHØq!P‚!ޏA¨‰1Î8”8A ‚ „%9Į#!‚c ‚mô.## ˆH‘‹úũ+Ŋmé\WWķ[iŠt­+ŠaŪ˙ĨéuzOŋęßzXôúíéZģ­ąOOßũi[OëA5~ģ˙ IŽ$‡ŽBB„‚IŽB)tœt„§AŒ9Į"ŽqĐD‡!ÂDÉĮ!QJ‚H!8é$B¨!aē CCũ&õ̇õˇNŋëũęŊ}_˙ī˙ĩ˙ûzņ_[íūúOVˇ×_éu}˙Ž•˙˙á:$'Nå8„‚N8AœtŠ˜qa„ˆĐˆAœp‘Į“ŒpRœ „PB(%8é Į!A">Џ3ˆ":?Û×Į˙÷ņĢĒúÛé˙ũņ˙˙ûzŋūņ˙õÜ~˙ŋŌÛ_oëJũëk˙ĩItąÎ8â!"Lt„Š8Ä˜á$AÄ „DãØâLqI 0á"qAˆå8JÎ:@ɰĒ/‹CŠĮ&á gÔuúīmVũo­˙Vŋū˙[¯úĩõ`úŋ˙t—ÛŽ ×î+ëõũÚīņ˙ÂH ™T"B!$AÄãœqAŽqÅF:„ˆĮ!C‰HîqÂIŽ!„ „JsŽBqÂR#㍄'ņK‡õ‘ ÚÚĻĩ×ÕÚúõø¯˙˙ßū˙ūëú"Žę˙õØ7õ˙æŋ˙ŋ^˙B‚(āŋá ’LŧGÂc¤aĖ8AA0„á'$‚œp‚8įŠ8ˆ ‚D㄄˜âPét¨A¤aĮ;ˆ‚ ņH1A>Å$Œâãzúúũú˙˙­˙¯ė0˙˙KŠūŋöŽ×˙†˙˙ũ˙ūˇ˙ ‚(p‚ ’Ft… ‚8â§p‚!AQÜã˜sB‘Į!Ž"aÂIŽqÄRŖšĮސ¤B‚!‚‚œĄĐTB‘ĮĄ†5#Č#hž]Wå§ōëļˇüąO˙˙˙ËĢ˙Ūž˙öŌåÕm/ÛŦ7ũ˙û}Ĩ¯_˙ōc/üN’ABDPBqÂR0á$BA Aįp‚8á ‚‚!ŽC(p‚A Į!œ „N8HN9‡ŽB !!’@áB{m LĐ˙m_ë˙˙˙˙˙˙˙˙čŋ]ē˙˙×÷˙˙÷˙úûkôŋđ‚bCㄌ8AAˆA”8A Į8â0BqÂDĄŌ# „˜é$Ccˆœp‚I' „RŽAh!8âLt”áōl(Ŧ"Ũ‚¤Â8™KĨ˙×ļŋ˙Nŋī˙×˙Ĩū˙š ß˙ÅoM­˙YÄ ßĨëû|˙ē˙ū—ž_Ą8į$B)Ž:F „N:H!"šĮ3„“E„'$' …N:B( ‚0å8˛đB°… AŠdtM• ’+h!0á0Št?Ū?÷¯÷÷Öĩ˙Â(˙˙₎Â)õuŖ”˙ߨõëß˙_˙Ī/ķË××Î,0‚ĄÂ‚DîPé‰;ĒR8åŽ"‚!8įŒqŽ"qÎ=‚N9=ŅĮŽqĖ9â˛ĒŒtĮMˆŸĮų:{4\W˙íŌūhēūũuru߯ëˇ˙˙ëš:âĩūßtŋ¯˙ú_Û¯ÜŅYĸ˙ķ ˙†A Į $B''p‚8į …„!"&G äp(#ƒ— ‡8á#„“$aŌ8éˆHTã„“(zĸ‡AФaÁCĩ§ZwKÛ3_˙ļ­÷˙ÁûĢKūûÕúN—_ÚîÚíw÷ûĨôŊmī˙ˇíĢ­ĒøUoõˆ„ Œ9Üã¤! ‚A Į0âB‘‡A Į!G!&9܁‰Į8ôqÂB „"ÂŽB! A¤BLp q‚;ĸ:zņÄî)„3‹m-´“Ģ­;UļŌŋ´›I{´› [jØ^ĐM…ģW@ˆöÚÚL5n­nBÛJéāˆõ÷i[i'ŪĒ&û¤Ÿî•¯i6“ĨÛĄV’v¨E$œp‚ŽqĐBqÂDDN9ĮH „N8„ˆ‰Į8äc¤"Âĸ1Î>) ’0á"–aÂJvGdyŌÆ%Ÿæqåö6˜ í¨A„Ã…°l0’ ĐaŠl$ƒ0œ"<ŽPb‚"ž*M6JAÅCV)†•MƒØ ėT0ė$m ƒ †ŌBˆi¤&ÃH   ´˜ ›ĮL&ĨąIąHãÉB( ‚Î8AqÎ9 9⑜ „N8H„ „ãœs҇8ärĮ8â"qÄBD㈄ˆˆA4‘N"ˈš…PPŠ—_am;†!{^„ĶN Bi ÁÖ„TĶ œuąA…A„ B„">ÔĢš VС†ģ ({Ķ*4§ļ!4š!čÄ&Å5Ŋ1MaĻiÚi„ŅVšB) Į'H゠„*B–w8âqÄPBB'ãŽB#A"$p‚8ä(á$ĮnBLp‚cŖŠA$ĮŖŽw—MDQĘvšAÃøˆŽ"""""""#ˆˆˆŽ""""""""<¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‚ŽB-&) ‚DPXA 7!‚aAœsŅâ' „ …#¤aÂDã‰ĮHIŽBMPA":&ĮB_<§q#ԝנDp‰qÄ ˜BqØYĮˆHI,ŽįR0á"qÄ$$ĮŽ'㈘sŽ)‰C˜t„PB‚!&A „Đ •ˆgr&ÃPˆęųõ¯û”´˛‡!ŽN% ‡AŽBLp¤)sŽ' …B!"B'Dá$AŌ!„ĄĖ8 Ž8‰CŠ">MĢîXöPæņÁˆˆ—_ÎÆ¯˙Nrœz)Ä ˜LŽÂAqƄ˜â‚ŽB‘cœq8įq ã‰1ČQČ7 „PA%‚H“„‰C‰1Ä㤑‡;œtŒ8A8:x Z‹ qĄ˙uú]Ŧa$"' „tŠ!„ƒ„„¤Ą"B$Į# „ĄŌ ¸Aœsš!ÄR8á$‡H ˜B!(! 2mLwŅNŽiœ_ô•[KĒEB‚,sŽM$%8¤qÂH ㄅĖŠ#ƒp„D§HŒp‚ãŠFDã¤aĖ8œt„Įˆ´ xI{ã@Ã!đq ‚aYcDc„‰Ü§HÜp‚œ †ąČAÂDPIp‚$9á)$$ĮHBA!Ņ!ĐJqÃ&ÔGŅ„BCĨAQtB=öŠĮhCĐH%t‚BPâB(!H „N8A !Č7"Ls!"Päc‰ Į!$8œsސHD˜éBqÄJ ’ †] J!Ņ1„Ÿū"*1¤ ‚RAŽ$Į Ž"'$'p‚Ž"qěœq8á$Įc„“îF8AAˆ“ŒpŅĮ&8­‰Į,$)QÃ*ΈĮ_ôMqœp‚cĨGq8įPH! `p‚ B"qÂE" ˆœt˛œsŽ'N8ˆAœsŽ’T$(Ž…‚# Ž:œJ Š CũЈA 7AŽސŠ ˜BMÔH$' „Iw$8AÂIŽ)BPåŽqÎ8A q!CˆA C ’6B§ļSËĨĢ=‰T\uEPA!"Pá"PæN8A ‚ŒsŽaÄDį „›ˆ”8“D „ „ĄÄ˜ô,!Ž#IŽ'ã‰1Ō‚8į18„&ˆdu¤˙˜p‘Üî"qŌ  A  ˜B%9 ƒ„q8įD‚BŽ'!8į!Ž"qÂIŽ $F8¤qÄ ˜B§ŗAC‰c…b9õōÜUĸ3+ˆ,˛" …RAŽB‘Į!GAB8č!!0č$ˆĮ A C„‰HIŽ"S„ˆ”įÎLrĮ‡!ސ”č!!&‚t„GÉ´$‚¨aáHøÉ6dgu‘2WĘā‘ÚC4”$qÂD š$á""$ įN8A BqÂDĄÂDㄐAÄN98 „ãœt´LŽ!!Ž‚ŽqÅ!&8°„C-Ԑ—ĄA%!d|ę‰*ūá°{áŅž” š&ˆ‰ĮH$aÎ9œá"‘á$Ž8A„¤Xá"DJ„ „JîaÂA"""9‡8âqÄ „Jp‚œã…8įCx\*s˜ķ´é߯;YšéNÔÔ ‚R&‰9Į0á#C¤qÄㄈˆAŠBB9ĮŽaĶ&8AĐA GtŽ9äc¤"qě„œtA Į8æ0‚DîqÎæãÆČčÂQĨ˙ĩū˙û¯„‚A„¤BqÄPA' …#BaČĮ!!˜9‡ŽB"" „'H8á""*qŌ0é“ „ãœt„ˆ„…#BB( ‚‚D"?&Š҈ „ÚĨ8ž?ãž?ž„VA, ™#ĸ9*BŠBqÂDįqŽ"qÎäcœr1ČĮ „ˆ;F㠄DIŽ0á") Įc ’8á"Cˆ „ã¤nļŒĐ!ļÄZABM˙Õ~‡GR! !ŗŽ(!‡!G‡!Žw!HJp‚8é C„ˆˆI!&9 8ĐAœq!HBIއHØp‚ÄĘ0˜rŦ:4žŸ˙¯¨A!ŌH!‡3¤B"œp‚ á'㊠„㈓N8HˆœsŽF8HŒp‚‚’ŽaÂN9Į tF!H „PDc„GÜD"‡)Á3LNˆųô?¯ũWÕJA"Cˆa C˜q8į …„")$Tp‚ „Jqœ „E$C„‰Į „R!!„ㄈœp‚Ąh…%`‚ЧäĨšå:5ŦĒæh”ä/"qüîŊHĻF¤ÎīÎų&DĸĨ&PŅ1Ė8„‰Į‡LqHN8ˆ“N8‹B!ŅįqÄH08ˆ‰Į!"F9Į!G&ˆ‰Į‚$8AŠ#åēĒÂhĮė š0‚dta|¨3ŒŲŸ#c>DæaBų“˛đ“”/0Ę'"ū\Čd3ėÛ <āĖŗ6aGa0@Á^0˙ļ" \›„G™ƒ3ã0)ō* ¸Hs„#˛\8g  d§ĖÜK‡<(A“@ĖÂD.›VS¤"PėŽČōą8á"D„R Í „˜â' „BBHq&åED „DãÄ „BIŽ"Lq&8ƒ ˆ„Ļ8ävŌHîĶŨĪįžoMÅč4|hų†nÖÂ5ļ ƍmÂp鄁‹ŲIŒ6štaØF‡áĶ7đl ƒ ÕMko Åĩ„l{Ú=´kxAē5´kaÚ5Ç œĪ–'ã‰1ÄD˜âqÄN9‡# „PB‰Cˆ‰1ÂN9ĮA ‡&Gd|¸B8e‘ō8BāÚGGŅáĶÚAĨJ,5UđáŅâ $­'c…aŅĮ¤ú=ĩo}Ōm&ŪVh:MĢ|'`ÎiKm¤Ëčã´Û‚ Ķîm.û†ŧ§i6Đa$ØpÁ$ĶA­÷IŌl:8ōŖPÚ Ōm+wi'ĄÂDãįp‚‚c¤%8AœsŽ$Į8ä(âSœq(s8AqÎ8AAˆ‰C˜q&ė!8âLsŽF8A BS„ŒC*ĪÃHO !.žņAž’}é[tŊâģ÷ĻęęîÕŌ´¯Kīq[K¯âĩøĻ+~¯]oęöˇé;ũ[Ļ˙ûUĢIũ„‚J „KsŽ'tŒ8A „ „IF8A¤‚C¤'˜á"L!"'R q(sB‰nB'IqČĮ)ĐBqŅt+‰u͜ÂÃ˙[­^ũÅa}÷\1ī˙˙ņë˙¯á]I ´‡ß]|l~ĢëՃ¤qé0ųĮ;ĒH$ˆŅ 9ĮI#ŽaÄD˜č ‚8âqĐBqÅ!HDDIšĮ#ƒ „A$QŌˆœt[‹` ô "‡<Æ!DL!õŋÛLkúÚüéŪŋžđ_¯¯ö˙Ûîû`ü/˙ŋ…QĩĮø4S„B „""(!&8¤MH$'ãËãŠA!$ĮH „§!c„ˆAÎč!8á$ÜB „"qÄã˜p‚ŽqÄ „1Ė!¤xŅŧķhâ˙i!Á×ė?aüqû *?Ŋ Em*Ī˙˙ö˙õĻ ļŧāŧė0^Î9‡HƒŽ$Į# ™aˆœp‚ ㈒E"ĮH „PA!!&8äp‚‡0á9ܧ#㈎L!c†!#h †”- )¸ãūû.ˇū߄h†ËĐē¸aɆNĸŨ˙áū_˙~û×õ,OļŨ]˙–7ü"ãËūÚ …!8įJN:F$9ĮŽB§Ä‰1ń*qÄNäqŽ'"ŽCœsaÄDE' „N9Į!ƒŽqČĮJ[‰!4ÂꋨAō:„GFhH"œ_ö´ ßā߄ƒUāíUļ’ m, ŋ˙˙˙ũĩ¯ũ˙ũh/¯čÔhãœp‚(q8á"qÄãœq(t’AˆH㑎( ‚ g8á$‡8øŠ $98¤&R!’!8â"qÂBHp‚dp/8é$Hęđ‚œ1ē‚ą˙ũ`˙āßĨƒ˙ø7žßėR\Vŋ˙˙ƒ˙˙ū ę—_ëéoūæˆA)YNAœp‰Į‚DDN8„’#„CDîB!)DN9‡‡!I$„˜ã’ØsŽXâ%aÄãœqÎįąÂRŽ8ĸ:Ė͏\ÚjŲtE×˙uΊŋō|?ǟO×ųßö˙GpKŖ@-/Û^žÔōo<¯ũēŋ<‹áÛĨUÕßôŋŊpA[q  N8„ ’# „IšįŒq)ÄN8Aœr8 „ã„“ÉC‰D§HDDGHD$Pé„N8Ž$Į!!8á5V„ō A F2>m ˙˙o‚)˙ßúˇ÷Ûm˙é iå×˙˙Û˙[|oŨüu˜VßõëŨæ‹īŊ$‚ ‚IŽ’FDIŽ' „N8 ˆQÂE!8â""qÎ8ˆ‰Į!G8äcƒ‘ŽB"&h㑎!$ĮSŽF8A‡¨ B~# ‚° ĄÁ.qÂ˙Mšwûiw_āŠwWšĸsOíŦŅf‹oũTēü/˙˙¯OëéVhž¯kU}rtūē—Ngļgļ­¯]tЉĮ $A Į `sŽF:„‰Į!&éŽB§BD æ„ „HîAŽB)ˆA„„DN8AœsčDž;3Á:Q!ŖĒ'_ũí--tŋü&ļēMĢikjÚļŋü6Đä]|~Ú÷ú8û[JũéÛ__ô5ŅĮ°ÂÚ_Ąļ“¤éhãín°„ã„“%¤B,ŽsސˆAˆœp‚A“DĄÎâBBųĮ!œqŽB8AœsŽXįȓㄈˆ"øŠ“Ž ,GëkA´¯Œ7…†’jčÊ´­&°ÂI í(i0ÂK &˜NC‹ŅĮČ$ÁļŪaØFpôĶAÚÆ”l"é ƒaŽÃ &ÅC vŽé;Xm¤ÚIĻØFà 0Ōa‚Ll .‚R0â( ‚8įI"‘‡8æÉĮ!!H$C`âLt„ãœq8æŒq(â'Ã˛87N8HBI Į8ä3Ž"AĮ8äc¤B‚ž[ŖĒޏ$á8™NU”`ĨÄü ÂiņPˆâ´Å pDvM¸"âŖĀĻ!1IŦq†)Š4Ļ­°mÅ5ėW§{šN6¸¨lU1Iŧqģ[lS„ ŠiŠb˜ĻˇÅr‡!‚‚a Į8â!"„’„ĄĖ8’„qŽBC@␓ã‰Į!GÂDĄĐB)p‚cŖŠœqŽqÄㄊEž°TĄGä˜b8T’ˆˆƒA„L!bˆaƒ!„ Áˆa0B"# 0ƒX†ˆˆâ" !Č0°`„0N !aaPa4!„Ę 0„XMa0„0„CㄈĮ‡0郤B$Į!!HDhîB$Į8â'…H â"‘âB’A$Į‚‡0á"$Į8á4L,(Cw„ŗõ„ ˛:øˆˆˆˆˆˆŠ5"!ŒTDq …$Œ8A Į8įt’!HR!ÄN:Dc‰1Îâ‚Î9á!&8’N8A 1ŌŽB‘‡ ю"¤F8ˆ!''XEđðâ"?'H;đ’TB!"! ‚)ÂDBIŽ"A8âL!&8]ÂIŽB'Dt„RŽBLq&9 8AA 1Æ[‡„ Šp‚ĩ '¯˙úA$B"‚Ž8Ŗœq&8œq8âB' „N8ĖŒq(r1ÄDIŽ' „N:BqÂR0â‘Į#㴂ˆ"Ō Hé%ķ‹1˙ũp…„'ãÂF …"DDˆ8Aœt„ã„‘(rrq!&9 98„‰Į&98”8¤"'sށĒEP]…ČũQ!~Ō´bBÁ9Į ‚’0âLq&8’„DD „˜ä(â'ÉĮ8įsŽF8¤BB"B!"nj’A(#Ã#ô“b'К×à $à *hĄÎæ&ˆA0„BBLq"A sŽF8HŒp‚c„`r9ø’IŽBސ‰1ČfŽ"'N9Ü „˜á9"1ČAČĮÄIô‰ŌIÂočÂ>„~ `BĄ AA 1ÅN:Øp‚cˆAœp‚(q‚ ㈄„‘c„“Iš9ĮÎ8ˆ‰Į!"BLq‡0â8äcˇÁ9N‚BŌ…<ž#Š „㈊BŠDœãˆˆHŒsŽ"'BIŽA¸â'DD „N91Č.8A0„ „E!A‚#Åu”C_ˆā‚ˆ#ę’Uū"$Į#Äœp‚A ĮŽB'IšĮ„“юqÄ ‡0áäc‰Į&9cŖˆ‹.”†E BqԈãũrqHp‚&ä âqĘ䇇#˜qŽqĘäN8ˆAœsŽ"$Į „N8Aˆ“p‚cĘéHÂt›=ˆœŅ‡Đ#rEņ*kú; ˆĮ A0„› ˆĮ!!(qÄR! ƒŖ„ˆœtˆAÄDNį„…Œq‰8AqĐB$‡ ŽZŒi ˆŌA‰Į $ZSyto6˛ę>BqÂD˜æÄP@ĸqĮ8ã“ąÂE9ŅČĮ8åŽAĮ!Ž‘ĮˆĮ&8`r1Î8‰1ÄBE"$‡8á$ˆ˜BN’)Ō@Ž:DaĐHDDg[‹YØÄ_&ęrŽB$‡„s¸ˆAˆˆA0AŖŽ' „DD㈉Į8â$Į8âAÄ …"1Î8œsF:FØsqŌ8âqÄãŧÍb&ĐAP›dU_22 A˜Ė";2#[ȡd`É$Bȗp‚h „IސœsŽ$‡!#tDcˆœsŽBLp‚$9â"qÄN8Aœsސ”8A2;B)ŠGÐĀá"Hr!erÜߊfŅbĻ8N#ëŅ‡hØ5°˙‡{ačhųĮ;˜qŽaĘâ!)„$‘âqÄBDƒƒ‰p‚0á)ą(s‚c´aÎ9qŽGŠÄ‘ĐžB:N/ą@ŗ4GD„u_­ßÕß~­„D$qČAËB“H â"Pä â!)n>B8‰ –9‡!!Ž"….… ‚Žqŝ‚„1R:”b"•M‰C‘Ž'î$‡ Ö8œp‚!Aƒn8ˆ‰Į;ˆ‰1ÂD‡ŽBLq! rDãą>’Œ!AGĩ!‚(Ba ´+˙úZˆãū.?¤DcŖˆAŽqØBqÎâqÄDDD› qcˆA ˆ–ä äcŖˆ”:Dœ „˜á!(q!HZ •hŪ"m ‘Đ‘ķ 1Ҝ&āQ¯ß†’TūօįIBLq8áÂHN98ĖIŽ!#sŽaÅgH „ĄÂIŽB"‘‡)Å ‚c‘ŽŠå(B_ƌ$„HōDt] ˆę"œ%8‡õ¨˙ūkØs1“—ú‚8â'D˜á"qÎ8œq&8A 1Č8á"$ĮŽLŽa‰îB(!!&ˆĮH …A´qSŽ!#ŽbƜT‘ ˜&Ōal#xš"}WW÷”ü4; 6‚á!%F8œsސœp„„‰Į âqÎ8’Œq"'ã‰Į!"‚ÄN8A Į!!˜8H„DDãēHMĸøÂ/ˆ"Ž2Lv?ūĩõúh6éx[YŨ%8âŅá!"Lp‚‡0â‘8œt„ã¤aÄHf"qÂDã‰Į‡ á""qÎésŽ$ĮŽq˃Ž,sČ$: ‚!/°DtĄĸčĄPEŌ 91Ƀ tgH˙”ų;#ĸĐfŧû šķĢ5äYL‰ŖFs:ŗŅHFˆœķqŖ>}Y"=Īj¯Ę†Jco9’Íĸ,d7 ffD‘Ē4AHfC#ÆpĖČŠ …BMħ!ސA¤'î!&8AŠG ‚@âLq$8A A"ˆ‰ĮŽB"Pá,Ž(ˆųü ą.’hē#ĄHA)´˛ĸ"Ē"”âÂŽH…rvO áĸØAØL¸ÍŒƒ`Ķ3Æ0AĒGA F îN!"qĖ9Į,qÅ ‚8æ ‚‘!Ė8A‘ Üq A„œq äc„ˆœqHîHy\ cĻ'HÚĪ‘.eÔ!Q†ü Ÿ—S˙˙ūĨ×˙—\7.ŋû¯˙áŊŸ˙oū]˙' éI‡ü7ōÆ5˙˙  ‚ äœã˜s!!8A Î8AŠĮHN8A D‡ސœsŽ‘äŽ$Į!G qËH4ŽF8œq!"'DãČAÄE)\Gú.ƒ*ŅäBŖB4§TD|đ‚útĩ˙ū˙˙ōũ#ËûK˙ō÷˙ûâŋëũƒZŪ ˙Öŋž6ąŖ‚„˜éaÂŽ"qÄãœq‚HąÎ;E!8â)ˆA„‰n$Įcˆ“N9܁Œ¯ZˆĄ…!!…DčDPCō­ũ/âuũ~˙‡˙ÉJ ž—üB˙üÚ~ŋūŊ÷û˙K¤{wēÍ7ū­û×į°č ™3‘ÂЄJ"B$‡8ésŽXøAœr98ˆ“„rsŽ"AsŽ' „ˆ8‰#DD‚!ˆˆE§tĸhŗ‰„]Y´f˙ŋ˙hÎûūų>ųåīÛūŋŖ‹˙ūßīõ˙˙Ō˙TÎméwūūņÅvŋí ’FюB‚ŽB)äc„“qT„D šŽw#Dr9Į Đ9ã˜p‚I ‚ƒ„‰p‚ Šõ"B>Ąh$]EõH^ÅKĢRę¯ÛįĒ]`ŠŠBÃ˙ũŋ˙ū˙É֗úļ—˙~“Ößß˙ũĨū§oŽí×­ŋÛ^õfkN÷¤ã„¤PäĮ‚8᠂A: „ˆ9'!HãČ8‰Į!&9!Č`q(r1Į `tŒ8ˆˆ“IŽaÄH8á$3‚GÄ$] áeЊADHč Ŧij%û˙˙ķEūé~ę؟ŪÚ^æ~H¯mu_˙˙īĶģõëëlĪ˙˙^ë¤ŗEŽßūæ~˙ēÜĄũ„B#bLq‡ŖŽ$s!МqAh!ĸ8Hƒ¸‹#šĮ&GČᐉ㐠sF9㈊ㄈˆĘâˆ#ēŌĄ $h…ąE:ũĨŽęļ­Ŧ?īūöŌ[õŊ´•m&ŌT–ūEi/Ēéiëē8ôĶK}ĩû´ŋCuÔ+a];Ö^Ú]+i0Ōpŧ5ˆ ˆĮcˆAœt„ã„%ˆˆŌ㑎(!&8‰‡!HIŽ$t„ã‰C¤CXr;+ē0‚P‚Bc>Å(G‘tˆ˛BŪÅ„aÅ1L0”‡Ē„Ām a0› +@áĨa6( wi0Á$㠄A˛Aa˜AÂ#´°ƒBÃ6Ō‡i„“Ķa„‚h4áô‚ &ħPŌAÆÅZ;†аA„á‚M8 m¤ĮŌBqÂN8˜sŽBLŽÂÄ „‚BŽBB! ‚ŽqĐá$ĮC‰1ăŽB‰c˜rr ˆ.‹Ą´´T2čÂ(Dt"<)ķéBmå@ĒMˆNĶÃĢPÅ/†'‹ žģkjUĻ+Ž°Ä&¨M1Yäc­ØĒMA1Aą ˙ {O*{1TíOŧ1]Xb˜AĒžHq&‰Į‚‡&GdpU#‚ ‚&8ĖDIŽ$Į8į#$Į ī˛:ŦBB#‰;¤AnaZHđ˛ëâ Јˆ0Mâ"" Áˆˆˆˆ¸ˆˆˆŽ"""8ˆˆˆˆˆˆˆâ"""""""" ÁˆˆˆŠ‚eÆGÂ8郑ŽB:BqÎäq‚ ƒ„“ã‰1ÄãqĆ`âAČ7Dâ) ‰ÁÂX؉ƒĪb§( DtˆÆãB?ÄB.o#øąŽ"c‰ĮŽ"Pá#ŽF8`p‚aAœqc‰Į!!GCƒ„ˆˆœr8`tĸfŒhŧޞčÚÅYX¨DtĄ"y}õ¤ū 1Ų‘Á„aÂBJq$:N8AAÂsŽ'!„‚#,ŒsŽA p‚8â,ī‘ôvĨę1AŅ<ĸčE ‚‚hFœFyŌs–—üã„#¸A t„H08ˆ‰Į!ސˆ„‚HhR8âC@ä(âqÂDâ$‡ 䇤"]ŠB)ˆųä-„˙ꕥ8㄄ã„ „ãÄR0âA!;‰Į Üq$8AAˆAœrrp‚KBš! ėŽ­"ëˆēaWØizMĨđ‚Ž:œq8æD˜äcœr1ÄH09#Ž‚&8qÎ8ˆ‰r œ|D „C#T)t&ŦpHÚ!!0“r“rŸl%„…ƒ°Ôã˜r ˆ „$$Į @âL!H„D›ˆœp‚ ' ˜B@Ŧr9q8įD „Hvt8•hĮ B (D „Q!ŌœË¤ÁˆL`ÄĒA$,ŽČāáŽ$Ũ#ŽF8įq&8‰1 „'… „ „DãqČ7†&8”9ã„‰ÜĄÄ†hä âÉĸ'Íĸčr菏æA’† ąÂ øˆ¸ A 1đ‚ âqÄIŽ"qÂFPBA°sŽB"-ˆ:X‰C q$8“…$HtœDHjSĩ¤NB"0‡B,č„ÚHŽļRå_¤œtŒ9Į$8œp‚‚‚8įr Ŗˆœp‚cˆ‰ ˆˆq ã¤wbŋˆ›Ë E<ÍX‰ĸ qe:„XCũ‰Į $&‰98“ ‚cˆqÂIŽ"A°r8A0„ãœr1Ė8qČ"PęD#ĒĄ$$…,$8˙°‚D˜įiF8“I"AĮ8á$E#ŽF9 9ãmDãˆ¤'Dƒ‹ (ŒMô4$B6‚ˆˆžY!īBHqƒ„ˆˆ“R!”9Įq(sB""AqƁÄD „Šä ä Į8⏃GiĖ9WQ8‹ųļa$)|ŽB;B#įjądÂ,´J‚D‡!&9ĮēD ä2‡œîB")t„ˆ8œr Ŗ‰ ƒˆˆŠAН—ÕŽh!š Œ į:5âHI_Dˇƒ%ȕ]JÁ3ą†wėė0nd›$ĐA¤'$(!&8“…$“ „˜á"qÂB$AŌ8âHsŽA r ĮŽ@đVî;ƍĨ ‚ÄRQH÷‘ŅÄGÂK¤‡āāáç‡|)Á‘õĶ Œp‚8įDN8Aˆœq Ø8œq9Į#DG!°s"$܁@â!2PŽÕ@‹Ŧh „DÚŠ$´‚BՈ˙ßw÷Úvl;A8A4aČQČAØBLrqHÐn8lD˜æE#ŽCHrB98\t„284„$Į ãhX¤f‹ ‚2:ÄHϐA‰t_.„PB˙˙Ø_ĩžÖK! “Dî!" Ú8“ã¤B"qŌc¤$Į!¤8œr Į‚8į†qÂIŽÍĸPHA„¨„äčDh†„æGFk˙øīŽûę(N8A Œp‘‡cˆ”įN9‡ @âLq&98“DȜq Ø8œqŖ‰C˜p‚ Āä â"B'b""a ´Ã8‘PQ8‰ėq˙˙¯ũú&âA28ŅĮA Į 1ČĮ ! F8“Dƒœté „H „˜âHrr Į$<ĸ$ĸčė|‚BF8Dé,Ú:áʙ\TÄL“¨˙˙û{û A28ÂA ĮŽÂ0á' „J!8įŒr ĮŽHîC(qHDJr ä áČāĐˆ„‰p‚ŽIÎ8ą–‚Fđ˜P„#h(ˆˆˆŠA"q¯˙ë˙ūŠJp‚8âqÄ „E,D㈔á)p‚ âqÂDhD‚$4"$DIqČĮ!!Ž:%*! E AD_! ‚H„jTcÅ˙˙į—ž^¤§@ÂŽ0á#ŽF9ĮAˆ’IŽ"BDÄIŽATq$9ĮI$rr1Đá"qÂ#æĐ„EŌ(2‡ADt’Dt!R=„™MÅü™>Kŗ^l"0æ´_42„{4yVFŒäC?'2qsÄhdƒÉs7d2C ARŽŌĸ!ņ#á%ҚÉD]ôņŋßĨÅ?ĩīúÛũ%¯˙Ķūũv?ÕũéúWŋ˙.ũZ]5ŋüģũ¯ÕzŠ&ĐA „ã˜q"&ã‰Į Įc˜sAĮnqÄã„ „D㉐n8ˆ„ˆA‰¤B) 1ČQÄYØÖ]‰R- p°Š(•TBQˆ„ˆ˙úūÕ×ũqë_ņOũ_ûŋÕÖ `˙˙õÆĩū­ũ˙īƒú÷ū‡¯B'!!Ž(q(r1ÂPBqÄãœp‚ˆĮ!Ž'юB"CPqH„H8â%B'DDRސˆB†Ža‹‹# @ŗ 4Äæ"}} ß ęũnŧ˙Œ.¨_ūƒ Ã˙{ö˙˙ļīūž=‡˙į×ū‡ t„˜â „$"qÄ ˜B8ŠĮ;ˆˆ“$qČ(äcƒŖ‰C‰1Ō‡ âBPâ5;#4Ļã„]üĄė‘døŠŽŽ!2#üzQĶú;ĩū°Œ˙¯Á1˙_øF{`‹{oĨûë˙öū—ž˙Ēa˙~ŋ𐄁%aÂIŽ)gJîLŽ)&G‹„FãĀätYĮ#JDI"C0r1ÅIސ“T㐃Ą;ķ<‚ˆœâ"g(p‚s0ˆčÚ4g‰äR’_“NųĢÚ˙_øA}˙.°šo—§ūj˙áᰂÁŋKë­˙˙oĮūjáŋü~^Ÿņ”: ’!Î:GsB""LqÎ8“DPB9Į#$qČĮ!!$8‰ n8ˆ‰Į ƒƒ‰Įmš”:nšvDúDtÖq }¯÷Ļé××Â_ßŌ]7ë˙ûégV‚ÁŊ´ŋöëīúũ´ŋ˙#˙õ_ā‚b¨HE ‚8恤HŒq V8H„ „R㈜rq #‘Ž"AČĮ&8A 1ŌHã´Ō@‘!ę!bHrX!]ŠB9t;+u~é}úŪô÷×īú^Ûŋũ˙¨K<ŸČ4Šû˙Í ßņ ×üŸ ˙˙wûĄ)ÂPB[ ”㈐ƒœt„DH08‰Į8âqÄ …„"Hq&8œtŗŽBAĮ8â'E Ô&.B‹Ĩn$ē$YTB'2:ˌ˙õcŠú}ũĩ˙˙ß˙Ĩˇ^īÂß˙]}ŋáV­˙û×ëģį•|㠄ㄐB"L!‡0æÜr1Ä㈉1Ō0âqÄDB „"qÄDa Ž: Ađ„ „Dî´,Ģ„„¨—J?ooc§m/ëëüj]mļ˙˙ũx"Ÿų…Uũ1ˇßˇ_ũ}}ö˙˙ŲĸÍŋfi9Įcœq8į†qÂD㈈A F"rĮ!I ‚n‘ „8¤$4;J‚‚)Ă”+6…!,6'“™Ŗ%•üŅy§×_ëj]{ŽÚęŋš+_[3_ļ–šßĒ]wũ­g˙m-oūõũŗ˙{×ëēļˇŪūAMp‚ ㄈ‘’Ž!Ņ8ˆœq†ÁŌ$9‡œā°9Ũ ¨¤AqĘqGP‚‚d_R`ąļĻŌ÷Ū“mt=6ĶÛKCØm…t'Ûa~Đít8ur‡NÚęôÚZ^˛0ǧîŊ¤Ú^Ēļ“i:Z°ÂPHB4"qÎâ'îIÎ8„„IŽB%$Į n8ˆ”:BqÄH Ür1Â^v­ ĸ\ĀA ‘õ ; q:!<†š/°ŌĻH ęļŌAļŽáļžiÚ;°œ0­„gA4iZh4à ƒ „ &%:†‚bSāˆđP›a>ģ lB4jÚPŌL ͐åL Đl0@í+Pƒ ‚lqQ„ ƐBqŌ0áČųŌ”9‡ C „ãÂG…„)Ž"„’ãœrÐ(ƒ@âDŒp‚b ‚Ŧ1ŌÆB ‚b"f…!ûėT7Úb“b¸„׆+Ã˜Ļ›ØAŠī؄ũ1 Ļ „Õ!0DtØ0Dt5AŠ ĶĶ˜ŠVŋaČ ë|1 e@ Å}a„kvĘq ‚ką‚E!8á#IŽB"$Į!G8ä2Ŧp‚c¤aÄt‚H)Ž'㑎aČĮ8ãÎ9õPáa# †A EŽVGD•D| „ē#Ŗâ.˛¸īāÁ2„ĸ Á0„DDDDDDDDDDDDDDDE GqÄDDDD0B" ÁˆˆH#¸A¤’ŒqsBB'q“r1Î8ˆœr‚°á9ĮHRR ƒˆŠB"B"qş\B# ˆĮIŽ7‚ Ä ĸs'D,rę ¤Ąˆ7ņE¨"é  ‘C¤"qÂR!ŽB‚8äc AÂcŽ$AČĮ8âAČ8ä â"!$Įc‘ŽAĮ8į$ ˆN1A2cˆâ"q ‚‰! Ė „DZ˙Wé'„°­IÂDãŖ„‰Į0á"qÂD˜âqÄN8Î8œsŽ!"qČDãœqŽ$AČ6ŽBŽB"$‡!"(Â#Č4B@¸ôĄxŽ$vAĸĻžv7­y};tA%: „$F8A„¤B‘‡$8œq tœq BqÄĄČ4$‡ Āâ"$Į ƒ‰rĮ!tB$‡,sšN!5XŅ#8Ą­J‚žkBvd¯§V•éZ¨I ’ĐA"qÎ:H!‚8á$Į8é”8AA„#…#˛8#ŒÃaHá–GÁ ŽÄ|ÂÃ.B'îaįij(TQđ‹ĸ9‘Å=Ĩ›C‚"a8˙ÕŌõu¤‚#$Hãâ"' „˜é‰Į„ĄŌ!&9ÃâLsŽEãˆA‰!ČĮ! r Į Đ9N98ˆœq8â")xT‚1ʈA!Ø#¸‰P2:Ą4ˆiA!ŗčžCˆ˙H2CĒŌ`Á 1Ž‚B ‘Ã.qÄJsŽF:F ‡8âqÂE"1ÄDBRH ˜B$3GŽBA°q Āâ"B‘8ˆAĐŖ‚Z"%ŧ"‡Dq ›Ō!C7ŸB}}Š,Ąv bQ‡!FŽá"w(rĮ!œq‚i„"‘‡œ „Š9 9âLq8äq! q!˜įŒqc‰AČ8äc„‚#įŅØhŽĻŧxEÁ1Č#ø„('>’Šr‡ BLÄqMp ‚FÄJŒp‚cˆA TaÎ8ˆ”: „˜âHp‚œR8åŽA¸ä â$N99 9ĮA\q `sŽaÄDRb"‚GąŲ¤‡ ÉŊ–8F2t]hqAIˆ†Œ!čÂūA„EŽqÂh$qÄÉNB)Ė9ĮHDDƒˆHR!‡0į%„“ã‰1ăPâLqHDH ä éŽB"CPq]#Õ›PĐjBEt(#is˜HÚ8„ōH!@‹¤“#HGũ‘Ņ AÂ!!A !ÄBDJrr1Î8“JÉ1ÄDR‚!C‰9 ã‰1ăœp‚Üãn8ˆœqŖœq8č$v] @“aG(rĮ 7”ė/ LtšEÕHēLTr>$jYšūėPH%8éŽ!#$Į!c„„’#DIŽ'ãá)q&9DDDãœq $Į0âC@ä â'JŒp‚ÁP’°‚^Fû¤<`Ą„ãeÁ$GŪËĄĮúHÄH$‚N8“㈔9á"""qÂIŽA¸âB“#ēIqŽA¸ė! ĀâLqƒˆ’ŒsŽB'DãÂhI"ŽšJ‚„•‰tkB!ŗ „L…WĘŽWKDb2[ČųЏöD†VˆÚ8‹ĸ.ŽÂČÚ2DVåAŌA ‚ ™‘đ…#aÄ „IBC8á"qĘä(âLqŽqČĮ‚dpĄ„`q Ø9Î>AĮˆ8ˆA’㑎$‡!&8ÆBE"‚”=aBa šÄDšcđƒ%dwĄ¨ėrAņFé‘#Â.| EëB͎jlʙ0ØU…0¤“°…$‡&ˆHE ‚cˆ”įIŽaÂR0â‘á$ĮC„ˆ¤‘cœp‘‡8æŒsŽ"AÄ ˜BqŌ8äc‰Į Üq BaČ8ŠBHq&8A´MÂD"čzH% "SBkÉŅė(Ã':HÉQ}Øw°ø8pøoA41‡°‚ n/a‚i7b‚‚Ž‚$á"qÄãœtĨœq‚Cˆˆ„‰Į!Î9 9Į!–8SD$B'BH08‘8äc„ˆ“$BXâ"$|ĄĐXY'@†"‘‡‹Ą8‚Đi2đ#\AÜžénųO“/}'A;č&ŨÚĐ`šl ‘'!&8HDBRHŒp‚)Î9㈐Đ9á,¸‰Į0â' „†˜äc„ˆœp‚c‰!Î9‡Ž$‡! 'IŽ!ČāÚ_X C‚I{ĄĪaBĮ5F¤0„xI(_˙ĩížv)ŌMĢíSŋŋ^SķŽ‚,tœpœrsސˆ‰7!A cŖ q8â'īD‡c‰!RsŽF8”âLq&ä á"!"AĮ8č!8ûŠ<…lQYJ›H#ēQ#ĸęPô"‡A:˙î>?ģ˙ē^*˙úBû&œp‚(p‚dq¤’0įŒtét„˜éŽBLq(q&:B%"AÄˆ9 QČe$ "'$ ˆĮ!9ܐâB'î'ghN—Fh8#ށ@„R#ųt*¨#čC—EđŽ(b'—Ô}úûKß_÷Ō𩠩B't‚sŽ"qÄDIŽF9Į#!„ã‰Į8â'H09ãŠD3GH „˜ä(įDN:„BDDĄÄDIŽ—Ņ!á!)(ˆHŽ‚ ‚0„S AX­)tGPBfŒ‹˙˙ĒũnŋO˙˙a5A"1ÂDDBDį „˜ä(âB'R$8‰qÎ8A2;#äxŽ28ČųHāÖˆ’Dã˜r"Lq8įrq `q&ä6"LvLĢ"sQ6ˆđ@„aQŽbtĐ*ÄPP‚ Ԏ!ūēū–ē˙¯ųäúZ °‚BS„‰Į;’…IŽ"qÎ8œtˆĮ!Hã‰7!!‰8A„¤!!"HqŽaČAČQĘâ'㑎$‡8â(#'ãŖˆ“ã¤4âgH!؈͈‰ŒŽ‚ˆŦ ŋō”—$‰sēŦ´‰ 'Ȟ(É_tŸ ×䔋ũ"¨ĩ‚B‚ŽB‚H „ĄĖ8”9cˆœt„㈜sŽBŽB$Į8â(!8â'N8HIŽA¸äc˜q8įp‚!$8AœqqÄDH äsaÚUB]ķĻ‘Šœ@b]GŅ͋HįDBō@ˆMH땒ɏ†flähy¸†Da„ ēD/ĸpf Ų›`‚ƒ0Â!r`É)Æ\SgĖÛÁĐ d ĖĖ ˆí0A Čú!IčOÃ(Ė͙ļ`ĖæP3C0ņͰA™™ˇš e׎‘ĐĖ™‚aåĖ"c‰1ÂGqŒ8œq–LŽČāá 1ÄNįB ‘ÅD æp‚c„‰1ČĮ ˆˆœrt„N8‘#ã™Î8A0„˜ä#ƒn8’ãŠC‚° ABG‚F0ätÂ;eF’.‚„c N-MëÂaP˜F‡„4ŖØč#cßm Ļúhøč0§ŖYCÆVGÆöcFļËčÖũąúza0č:Âa§Ŗ@sØõŌtô{ič6Ž‚0įp Ž9c¤!"B–$AÂN8A‰NqÆĘq&8 ’ @âAÎâ"qÄJãqC‰C‘ŽBŽB'EA4(! Āâ"qěØIÂHá)Ôna$IP Áâ:3QŌlŌiĻJ‡M‡”=&ôhh'“†cĢāƒ‡G1(tGēV¨IXtqúN¯ĢnŠzLąé6“žŠ7ÄĢîxt{sÃÜ:=ž'†•†ŅĮzM¤úûĘļ&%‰âCI‘Į H „˜âAÅ ‚ â!$ˆ; „0Œ8œp‚‰F8AĖ8JŽä â‘ÃqĂ"qŌ8á"HqŽA¸âAÂIŽ,îŅt’GŅp‚VW ĶLtm ‹=„ĘvémB# ‚ˤ)ŤûģPœ$q [÷Ķ~vÚģ\Sjût¯ĨŨ{éúém%úMđ­oԏϭÅk íúôŊãÂpÛ×j{A „ã„“sŽF8H …"1ħ8â'㠇HŒp‚!Ž) “IŽ$Į Đ9ã‰CĀá$Į;ƒ¤"!$Į Ö8A`q&8¤qė(ŒEDō‚I‘ĐŽ4 ąH(aj”ûû^û×K§§÷˙KôąëĢū¯¯]x¯q¯ûūū:ûžŸī¸ëIŊī˙ÜF"q8č!8á4qÂBqÂPBHqŽ$Į"ŽB"'IBLsŽBB$ĮCœr1āÄ „N8ˆ‰Į8âLp‚cˆ`rq ĀâMČAÂIŽBHp‚8āˆúČ`~"(ĄĘ(?'T%/b-!s5ôŋZ­.)û]o˙Ŋ.ŋû]ŋVãjˇqÚö¯cúūí}5Uĩ˙_Ķ_ß.úuë×ÄJsŽ%9ĮHN8¤B4aÂD$%$ĮH š$8ˆˆ’N8H„“ … ‚cˆˆˆ‰Į!"B$‡!&8`q8â' „ixN*)΂â†ļ$Ą” „މ×ööīũņū˙†;^•õūĩø˙…<¸~õõãû_wããũŽņ)˙˙ė΂!8č$Œ9ÜBB""qÄã¤qŌ‚ ‚A¸âqÂD „RŽ>$sŽATr㈉Į8âqÎ9p‚c‰1ă‰ĮH …ZN–ĸHG\‡”øMŲ^SČđEXá‹tąS¤°‚čc¯úūžŋ¯°xŽĢ˙úüUë]ƒĩ¯öīŋ×ĒņZßÂÖļÃßo÷˙A„8Aˆ‰NqÜąČ8â$Į!Cˆƒ#Œ„$Į!G!ˆ8„„ˆˆ’„H098A 1ČQÄIB"B‘‡$9Į"'㤂ˆ ĸa)bä4#Ũ‰t+Xhbyř؊ã8žöåū:ޏøx.Ÿí˙ÆŪõ˙ŧ<Õ ‡^u_š—‚˙áđŋÕ×˙čãˆA0„˜æąĐA8œs§†qÂDN9rC˜q„á"'„Tã¤"C0rqH„Œp‚ŽB"Lq8įp‚‚$9ᆂˆĮGpą„G˛Ŧ̃B 2ĄFa#×ũ'¯¯˙ <#F?ôŋ‘¤Ĩ˙†ŖˇRuŋ˙˙Ņ˙Á˙ÎǰĻT˙é~”ã„ŲC¤!Â…$AÚ!&9ĮAŌŽqĖ:D(â' Ŧ „ã …"99qÄ „DD$‘â("OœqŽ$AÄA- ĮGôhĢEē„"‚†lēR/„("ëũkķW–cË1 áÍöëø&ũõ„ēm&ģŋö˙ øAū_ËņÛũŋú$!Ž9Į0äc„“#œq)ČAÂA"(!!sŽ!ˌ„"'H08‰8â"HsŽF9Į‡‚ ĀâAÄ‚:ĪJ’Ą* n¤ãâw(~b*×ßÛú˙˙Ζ—ˇûa/ũ^Ÿ÷ÁŊ\4°~Ÿë]P_ū‚ũŋŌ˙*/˙m/í$BSˆ‰Į!ŽB!""Lq‡HHf'㈜qŽ"qĖ98Đ8’@ãœqŽ"qŌ0â$Į!G!"‚8â.*‡6 ĄAĄ+ą´ÂP—C_Iúũũķ‰Ŋ/˙B˙ĮõųĶ ęü! : ŨVÚûÖë˙ëūž—îuMûĄ ķËî"%ŽXá"qÄN:Dcœrq&9‡0įDHBDDãœqcn8ˆØ9‡ŽâHqC‰Į&<Ĩr ":¨$GTlf2:6‚SŽF:”č(AR§w˙˙ø"ŸíūŽ7÷Š˙õúĨ0°÷Ũסļŋ_˙_ŋë˙˙Ŗ—úĄAŽF9Į0âM 1ŌŽB'É1Å ‚;TŒp‚ `qqÄN9†kœt‚H09ㄨã˜r ‰1ČAČQÄF#Dąë0éqEBĒCGjh~õí{f‹É×äëˇ}TēÛũs‹ėŅ=6—ũŋëíš+úļŌč˙ú˙˙¯ˇ_Šuöh­ō1oūŋ˜ĸqÂBRŽ4qČĮ ŠBSœq8įsŽ‚#㐎B"$‡#ƒŽB"qČ8â$Į$8HDDDDâHrr Įe-K)ô&ˆ] „+BÔĄÄL9\<Ąŋúí¯ļŊĨj˙˙˙î´ũ^ßivŸÛkÕ˙NŠļ—ę]ū]~—ëû­Ĩ ö˙ŋŊf „DJp‚‚0á$įŒqA¤g8ä â""qÄN99 8A ĮH„D‚$D§&9â$ĮŽAĮ!C #ĒR!p@ŗŒ,ÚE;˜qŽ]ãíĨĩŽÃI[KVW}Ĩa nûĒÚûa.%MŅNî“ŅN)9†”5l%A†m-†—vínûz†TÕ´5VÂWĻŠŨë!Ģa.B'rœÃ˜tœqab'"1ÄPBqÎ8‘HIŽ!"$AČAÄãœ|I@Āäc˜r1Į @Üq ãœvLĀŧ%8„Ú6…j„Ųt„CTŖĘ;i Ōh6( lPA Ø œ"<c‰N“A„ &ÁÅMŠw ÃÂdĄÁBlŽ( 1PEÆĮ°ÂLVà Ķbw„ƒ  Øáƒa„‚h8”č a6* á  āÂh8̉ĮA ‚A"qÂD ™dy Į!&9Üã–8A Cˆ’E"1Î8œp‚$8ˆA28¤|Ž#†ŠÂŽ$QČŖœq! q!(A v""Fš,Ę1APAØcC5Ŧ1 éØT ĄáϘA„Ä&a™@ÂĘ; (0ĢbD0„A„!„ÂÃ!„Xba4 B &„HhE„І1D0ƒ@ĘÕ0¨12” eV2ˆM6"j"’Jp‚$8Aˆœqŧ „R8á("rsŽF9 8„ˆ‘8â$ŒsŽ!$ĮÎ9Į#Ð rŖ‘ŽA¸âMÎ9cœr1ŕ4Ū‘Îd[Q{fu*˜rĮƒ@ĸâ""""""""""‹ö"""""sb#ˆˆˆˆˆˆˆˆˆˆˆˆŠ'Œ]t‚F"Lq8įp‚Ž"' „I""LqŽAĮ!!G AĮ @â"DŒq8âL!‚DƒPâ""L!8á(f˛‡ „FŽŠ’* QœtPkÄđĩ8´t{@ø”á4B$AČĮŽ"Lq! p‚ "qÂD˜ä(âDDIŽqĘâ$‚ "8`r Ž#J$QÂHDŪ"kBæ!;¸˜sÛJaĘté¤ęÄBR$â‡# „㐃˜sŽ)ŽB‘Į,qC„“G C‹#ŒŽŽ!ˆ8á! ĀįĻNPã‰NˆÂ<ãÂ#b%8Â(r‡Æ(*.ŋ˙ũ"‡,qįIŽ!""B) 1Ä „D˜į…„DIqěG!š9‡ƒˆˆ’„Hƒ¤B%aČAÂF„E˜ÂT]B*%{”änÖqķ:BÄē#äëũiUĒ\$Hq$:D âPäc‰1Ęâ$‡c‰ `sŽ‚c¤""AœrqHN9ĮŽBLvœ‚ãŌHÂAbCB6tKDt0ĨynMĖ8ސC ÎcöI†–ØJĸ%‘9ÎqČAĘį#ŽaÄㄜv\hŒq8įq&8`q8â'îB"LsŽC,r XäŽ$ĮcˆAœqĒÎ8˜t†sųt$fi¤N„E•Āĸa ‚Į*GåüŧțĒ„(ã¤BLq8įqA¤F8â–qÂp• Įc„‰1 ‘ĀšŽŽ ¤yr9ÄH08¨‘!&9AÄN9‡!"‡„#GZR;C0Ž-+„9„‘ŖĄ`НÄqAœp‚A‰Į0âqÂBE„*"A2;#á‰Į“˜sŽË†āP„IŽBC@âqĖ9:E!&8’„ƒŽF=’ –†˜":0T" Q;î Hëö‚B ĸ1Ä㤐”ㄈAņcˆ¤‘‡!„D˜âAXqc‰ĮH„HC’DI¸œp‚?((j¤'‘Y‘ŽqË"ž‹ÔPOŪ¤!' „ĄŌLŽäĮH ™)#B!Ž‚cŖhI@đÜr9âqÄIŽ$Į!G Ú9ÜDãÎ9Į‚ŠL$„Ī4DAX鈋¤ “DĮ8đŽ8DtyĨũsŽ*MHč ¤"¤F8“t”8”8HÐn8„ˆĖHƒˆA„“N9‡ŽqÄIŽ,!&9 9Į#N<‚#v3hēHĪ#ŖˆēJĸNX‡ÜDĐ1ņ˙Œ9‡At„‰C¤HqHIŽ$‡&ˆAÄIŽ"CŽB'„…Œq&8œq8įrĮ&:A$„ĄÂD†Ä†`â$‡!¸I(A !!w‚EՊE-P@ƒ)ķŽ(”: h˜āˆūšĩëĒBLt’!HR8âLqQ Āâ @âS¤)ƒœq$8AˆA28ÕˆˆAœqŽ$ĮGŌ¨A3l$"$~´&¤qC….)PD~!*ą!0ë.”~M‚ƒaȖ™Â; TRōHdŌ!fW 8A“L8H ‡8įDN9ĮHØsŽA pČã#ƒ‘ÃXŽ ’H âLs"BBPä ä Į Ē98„ˆŒ „*HeŅAELĐAˆA} Á-éaRI$Ä~ûpá‚đ|=蘒‚aA0‡$9â"!9Į!G!!&9‡cÎ9á$AÄIŽA¸â"AHD˜â‘8‰7!o. éÖ‰ÉĐÆSÆ D} ,Đ! |6á§Es_øAsš'HÄ“ƒŽĄ"$Įc˜t„N9Į‚&9 99ã‰! V8A0BAč!&č"v $$Īa!"] ÄĄ.2žÄDˇKB#‹æ^¨7^øI‡ũmlJqË㑎‰ĮCŠ$BF8A‰Į!;‰1ÂD˜ä(âqÎ9á91ÂHƒ‘ŽB9Į0äG0á"r1Č5ŽB8Đ8ˆœq8äcĸZ‚QpÄâ.ˆũYžú˛č.AĸĮ(t”qoõü÷—5ãŨŌ!‚Œ8HŒp‚!(s,!$8“hÃįDN8A F"1Î8ˆˆœp‚8â"$„D㈄ˆ‘GcƒŖˆ‹AŖŽ,Ä)p!8„ÚāhLj,ž‚#ŠJ•w˙ū¸U_đ‚a„‚PFp‚&9æ „㐃¤'ãØ“DN8A“R‚8æ„ㄈ’ã„“ „ „ˆ98‰Ŗˆ‰1ČĮ8ō.’‰ … ‘t)15â’a>ãĄ(„ …]˙Tîŋé$9ÜRI"ˆA BÂ"Ž$Į!Ga’„N98ˆ“DƒŽBqÄH08ˆ˜p‚‚ Āä ä(âHp‚ˆ`v!ˆ„&ĻņA„ųAâaÂIœt‚ëũŌ˙‰Į ¤BAÄ˜âHp‚œãœq0ä âLq$8“ ‚&á%"AÄD‡H „I‘!Ä㈓DÄㄐ2 ä‡G’˛°R™Ą8æhI DȄGá ’ķũsëŋ×ũ„‰1ÂDîS‘ŽBB"A"aÂIŽHIŽ)qÅ!#ŽF9‡0âLq!! q! q&9Äˆ8A NqÆE8$2>(Aˆ"‡EÖfŽ+t$"MÔz—‚ÂH„ū@Ė ĘtB#l&Cd(Ę §ÍFn!™ĩÉ|†^s/žČ芛9įĖŲfÅ6O_•c03›ˆc"f|Ė,ל΄CGL›D|æJH ÉQYs!™ ÉŲˊ‘¤rA"LtƒÎB'ã‰!ŌŽ"L‰Dˆ8œsŽ"ĸ)r Į ƒn8`q Ļ98‰!Č5ŽBŽ$Į!Gcˆ¤F;ÎhņX"ĐB ÄžBĨБ$‚ „D$ļH^‡ē xÂl0ž3dˆ ņ˜0š ņ„Á "đFpΐ ΌØüK™ŗ0oЍ 0ƒ˙úQKÚđƒF‡ŖĀķƒ Ųá›(´0ƒĐĐ"æĄč[†ĄŒí0ƒĮ!GHJÊDI$8@„DH8äc¤AĮCƒˆA`q8ä æIŽ"@ĀįDäcœq&:BLq8įBa—s0ŠĒDR —§…0ęôąe:øFĘ>0čîå;b›plh>0ömÃG† Ú6ÛA…¨pčîÔ7á ÂA6*h &ƒZ3´œ:Aö:3´l4Ķ:<4›„ÜBnm(xAŨÚHØq„ãˆĐ‰Ü㑎w @âqÄJ#Ž"qĖ98ˆ’D˜â"LsXįDIBC\qcˆˆA ˜Ä篘Ú6čÚ<’ĸOÅíDPe_7Ÿ_ĢIاH;NīI[ŖJŌv)Ōv­7baǰģīŨÕ¸m˙ô•[õé7ī žknûęęéŊ6“wēW۝’!œN9Į#Üp‚Î8‰Cˆ¤F8ˆ‰1ěœq9Į °:X‰7 ã˛8\!'qĖ ˆ`r7ŽĒŽ`‚‹Ō*‚ •9‡(w '´] H./ęĒŨ1ˇßęú^ĒŨ1^˙]ņõ§ū—{˙Ŋ$žõOWī÷¤˙Uw{wtë{ĮTŪú'$9Üà‚R ˆ”á"Lq$90á ‚!#…PBqČG8â$IŽF8ˆ\r ˆˆ`q‰äBHq{*2°vĨeåЂXĘ„LzAńGH!˙}{˙W¤ŊÖŨ_{õ.?ŋ÷Iu÷×Ú}kŋéoßÖ˙×÷_{¯Wĸœh œD㠄ã¤qČĮ!HBB‚0âAÄã‰ĮHØp‚ â"'„ãŖˆ‰ĄÄäq(r ƒ„“ŒzÛŖ¸o#æō1 Y#‹I‘āŽ8 …œtN…/Ĩ¯]Õû¯Ĩõû]oĐ~ēũõŋũ[ÂKˇ¯{}Ž—öÚõĩÃŋ]úŋœqŽB0Žá"qÄDã„įHRŽAĮ!Hé B"LrĮ!&8‰‡8âAČ9 ãqČAČ7DI""‘‡JŨĀ‚8@N˜ÅB õ „!.DW–¤Ž>Õ}úú†ŋũą]mņ˙ūŋũ$ŋZ˙Ø=.Õûüv¯}ŠëúH „Jqc‰Į!&9‡$9Į!Œq! ãœp‚Ō ĀįN9Į!Ž%"qČĮ0âqÄD˜á"'…ãn8œq&<0’\ Flž44‹(> 8áĐ Z‰šYÄPĩ˙˙á­cßūú˙Á}Ō˙ūūĢāˆōúüĩûŖ_†Đ28Ąkũ‰1ÄIŽaŌ0â) 1ÂDã‰Į!"Ž#DE‘ÂÆG ">GHā`ŽČîB’DDāÖ8ŅøŒq$r!Ą#ô]IœEŅ‰Ņš.‚N:0įĄĐDĮU¤N†ã˙˙Į˙÷ā‹~īīøFß˙ūę‚]ëëaÅ˙ßׄXö #?ãÃ˙ôaÂIŽE ‚‚D˜âqÎ9 8H „Dãq&9â!"q‚c˜q‚ #=ŽBqÎ>’úĄHD(ø…CŽ)âá  ‚˙˙˙.ŋ˙ú û\ ŽūA¯Ūé/ĩ˙ü–ī˙Ļ׆ ödá?˙8éD ˜BDŒp‚ŽB$‡!ÂIBHq!)Ä „ˆ:Œq ƒ’DH099QČ2ŽaƁÄN9ˆ‰Į;Åw!Ä80‘ļ4]8‰×UŽg$-GI Å÷˙˙¯ūžŧ ŋëë/˙_A˙^‘:ū›¯ü¯˙_ô°m/đ‚˙øˆ„‰Į!Ž'$"!"!‚cˆŠNįIŽ!"PâAĖ8A‰܁ŌcŖ‰ AČgãqÂDƒŠ ‡ČAÁ,"Ž#ät &"! $åē]‘ĐžÍû¯˙O÷˙ŋ_V×ūŋnŸõ˙ĩ¯ßŌ˙Sˆ>ßęŨ7^Ī p—Öž˙ÎåE$aÅ$ˆĮ! âqŌ!#DN8`qH㈐`q!&8ˆˆA !ČfšĮ8ō7ˆEP"‡&äcĨ(ã0‚‘Ņš/‹FķZ P!@›Ę"ú‰)´1í˙˙Ĩ§ũ˙éW˙ūŋë×˙ĢŌ¯ÆĮúû˙ŊG×o_õúúAfh „N8AA`rÄDDˆ8A œ†C”äcn8‰ Ē8“IŽBŽ$ãâ‚ F8ÆĐx‚Q4ãLc—ČčēœFhBĄb+@$G¨g?˙uīŪÛ×÷ę]|Q!˙ąOũ.¯Ke ¯Ūģö˙ŪŋË˙ŠíTēúö)ˆ“qŽc‰1ČAČQÎ8œsŽ4"'IŽF8ˆˆˆAqɎF8„ˆA">AŖ4ˆ9C¤BēEĐ;h*ÆDj‘á3\WB0’ũŸN—úļĢš/3Zũu˙ēú—_”V—¯Ū==ëīīÛ÷JŸ]{˙´›?˙ļ—ÂDã’F8A”įŒq!HR0įDHƒ„ŠGŒsŽF9 9ã>rrCƒˆâAÄãqČĮ˜ĒĮė!I[ Hų}; .ûŖyėēŅĸČü§RC”æta¯mĢiihãũ°’ļ´—NÖÂtˇ§z¯o^ęØGv.ŸŊíĨv—zßëv…Zڝ:¸CWõBqÂE:FE$„‘\„N8¤"aČAÎ9âLrq!ˆĮ! ‚#H08‰1ÂHhDˆ8œp‚¤'ZA8PCI=‚#š A4qÁ4!Ę‚F!˛:HŅ :ôÅZAƒ Â/Ĩ Šb‚Ä&ŌA Ķ„G’‰ĮAžäPƒA„Ø”đš ­Š0œ4Ŗ†z§ü&m„‚pˆđH&ƒ0ƒ ¤ôa6%>HąØIЉP‚Á„‚h8 ’H „ĄĖ8‰1ÄDHƒ‘ŽB!"BDŒtˆĮ‚ ãœq!˜9Dƒ‰1ČQă„„ƒƒqÄDƒŽ‚P0ÄEæ F‚šÂē!ÅD% PŽEÅ-‚AO ‚†bšũŠ m4á Ä& Š„ æpičZÂa4&‹pЈbaADĶžÕ†!0¨1@Ķ ÚdęXeBi„ÔĢ&*šÃA­Ø„ã PA¤8åŽS‘ŽBAÄ „Dã‰!Ä „Dãœr9äq!ŽaĘâ'BIŽAĮ&98“"1èãB‚0äB!S(y„]FBåB™¤@¨˜æq8â †$|$—ÄDGDDhDDGĄŦDDDDDDDDDDDDDDDiF„Aœp‚ ã„“ „ƒˆ“Iš8A0‡câ"Lq Ô8‰Įãn8“I"BC0r;#čP#ŽĮņ@„˜čLx„s ’ (ˆŠP‘´.'˙¯úR PˆAˆ‰t‚IŽaÄIŽ"$‡&G ™dxŽŽ28Čųd|Ž Â‚ Āâ"C0q"F8’N9Į°„i 7”å8HîkD| ˛t§ ":":a*!–9c„Gt˙•„ĻWųé*␄Ž9âqČ7HƒˆˆœsŽF8`q!Cˆˆ“Dâ%"aÎ9â"""Lp‚„B[„ˇ7 ‚péBZ!"ú]ŌHE!•„Ŋč:MRAëɎ(!8á"Dã‰C‰Į!!! p‚&á$ĮŽ$4@ q!"HrCqČA¸á"EÆBHzhdpiŅCĒā†qéč#ÖˆÆU˛­×ĒUKaČá–GDã‰Į8âLq&9 8HäcŖ‰7!$9Į#H09H)Ž$E" Į Ō8`q‚•ÄPEs#ƒ— &GDxSI $tG ”A”9āƒHætr†qU¤“IV’Ė9Į,sŽF:GŒqHDãČAĘâHqœR!c‰Į8ä8á$Į0âLq8įDH08A$Œp”"‡ÁøH†jtGČãD(ā%0ėB …EđŠƒŽ’Š„ Ŋ)Â0‚ž×áąCŌHD „R㈈”8“Œt„IŽBqÎ8œsŽ'R#Œsސˆ‰Į8åŽqŌ N9 §8äcœp‚‡ Ę8œq‡BÄEɎAqÎá‘Ņt‚ˆ„“pĸ ˆęĄ%8aE$„EŠ Hƒˆ…â„!á„Lė „ãœqŽqČQĐâwHN8ė! $F9Į,p‚‚c‘Ž""MÂIŽ@°q8â!"Hq㐃ˆA 1Æ7‡qŒ$ ˆ÷.ƁĶč $‘ŧÂ# Šq&9Ü;P‘õņ%&ˆAÅ"1숈A ˜p‚dphDƒŽ$‡!‚FHƒ‰Į! Āä â$sŽ"$Ũ‘ÑđŌÄ A 'Čé=m›KF0 Įˆ„š(ŒH„}G؈œsŽ‘‡8ä(â$ĮcƒœrĮ0äcœq ĀâHHIšĮ&G “DįŒrqŽAŦqŽB$Įn@đÜq&8 V”ĢBŗPa&1ÂSh#pEŌ@‚đFž B9P’ ЉŅoˆ¤B'Jr1Î8’ „˜â)„‰‚(sŽaÅ'DâqÄDã¤BLr1ĘâAÄN8ˆ`r9â"(eåYÜĄČĮD~<"8"!°’…IU@–‘pØG đÁ4u™Ąœ]Nå9Į,qHĈĮADDDIšĮ# …!8ä(âqÄN8A 1ŌK„ƒPá)n9ÁXq‘’xPGBN) ,Rxú ˆč$… ‚(pœHŖÆŌP„i‚ÂDDD㈘sŽF9Į!œqÄN9‡8ˆA ã‰8␉Į8äq‚ á$3 xĮ,p‚‚c†‡(ąĘŒ;„†'pĖ=! Ž8‰!Фš„ü‰´[šŠ2¸ŅM†eLÎô&*"qČ8âMÄDIF8A 1Ė8‘G&9á!&äc„#‚Š‘ĀĀB'ƒqĐâ$ $ãˆAœq ãœq8ėŽcA8™Ä‚6Ėh ĸ𓹇ށ UJB$ āŠ.8…Šä%ŅBøEģ_zmēAp‘Į3œp‘!ĐGŒq!…!8â%""w!#!$98ˆ‰Į! â"‰Į¤††‚XQ)ÂC‚1bG´H}Á !ŲĢú1‡wëpđ‚hU"PâB'$@ÄDDˆ9į†qĘâA˛;#„#ƒ‘ĀđP“rqƒœp‚Œ$Å($ !„§ĖéB8ëB"˛<§Eé'&K;VŸĢ;ĢĖĶī)ĐA%aŌ#ã‰Į;ƒ„‘,sŽBBŽ"$‡&8“„DDE$AČC(p‚8éŽŅȏ"āāŠqŖŽPæBJ$W1Arr Į'p•(ũ'˙ĮÉ&?¤œp‚a A!8á"' „IŽ"Hq&„IŽB9Į Đ8œrs'ÈHŒrrrr‡á$Įc¤AĮ!œ „˜č˜đˆĮT}EĐB‚#ŧĪę„Ā“Z=’„qĖF´Ÿ2[Z˙×ņ&ŽB%MsŽ)ˆA–9sŽF8ˆœsŽFâ"$s¸„“DĄĖ8’I"$ â"B"@Āä(č!!…”8H¸dt,! ąÄ„ ‚WŠHž )ÂL!GÁ4#úJ’U×_īû_„N8¤aŌ!‚ŽqÄDĉĮ!8âLrqŽqÄㄤ"Lq x8“ƒŽ@đÜq Ø8ˆŽ„@ˆč&â/ ĄÛã…IrC‚XJghAˆˆúĻ˙ū•ˆ¤Š Į!8įsŽC„‰Į;AÄD˜æŒqŽ"B!$AÄDHfw‰ŧ's[Dt$tÛBĮ(ˆ‘(ė”/~Ģ­wëėPA' „Hƒ‰1ÂDN9â!%$Į8âqÎä â'N8Đ8œsBA¸âHp‚cČt@ŌPJC’“ĸęžBŽ8@´‰ē”đBCc‰îČōHĨuO\í:;ˆˇäj!ĮD‘Š×*Y؍Hk ķR"_$8ˆA“sŽ'Dâ$4"""Lq8įDˆ9ąÅ!&8’H)Ž"$ƒk(ŒsŽBŽ) Į8î%EVB(ƒ‰N‹BGAaČŽTä ųc ˆŪâq _Ä Ī™ļxËč…rđÚ™x`";/ˆæJČæLÁ “q gŒÛ<Ņ “l†DÃ6a>2â˜#„]ŽĖŲļy&fĖŲáa.‘ —AžVEĐ Īŗ‘˜™ ͛d!ĸ—Ys ffm„ŗŽw$9Įƒ‰7 Ž!"@ĀâLrrq8âLrÄãqČ4'ƒŽ‚"ŽB"øŽàРАå„qųˆCÖa! (Č âBː,(ú<Ļz´cÂhÖÔ#ãÜ#YŌpƒGļá0iŖÛ´ŅđŽA„čö-M áÂz>4khö6 !‚FļŪ§GļnĐoHö8•Ŗ[øôŅĄđ‚Ę…ŒqŽB"Lq(sF9808H„DH09Įc‰qc‰ ÁČĮ Ē8œq&8ĄĖ(ā.ÍĄ—°ĐPA0T$t^„‰p‚‚s‹ÂA°ō‡¤á˜ôU°‚l<ĄéDĄęØh0VŽ%[VÃŖÛ•l3!ŖÃ 6éXiá$VÃĸ°5ŨúV“œ0Šļ ´+Ž<4A&Ōm¤V7 ÔO Ōĩl:8ô˜ØœpҜ§‚c‰1Đä ␜q&8œrNHqc¤aÂDN9Į Üq!˜9 㐃ˆœq ĀäqHIAŗĀØÄÆa!Ɣ „(`ZėžX’ŒHQČ08/6ŋÖé]>Ãzí-&Ēū•úŌxĻöŨ\Sjßĩ˙IøĻõZu}}[ôŸ¯ęęØ÷÷í&ītētL¸@ˆĮŽ$AÄBIšNF8ˆˆĐ>AČĮ0â$H)Ž!"AČ8äcœp‚‚ âLqˆø=$9XXänXíEp‘œ$}8ą Y\§ÄŠ>…ÂO#´˙õ¸ëūÖãüwuĢéŌēīõëJũvû˙˙­okũûn—W¯÷§ÛøõãD‡Ž"DHhŒqA“ „‡Œr!GG‚āPGGr8d‰N„!ŽR (XBŊGËęAÄBLčâÅGß^ö˙×OßŪŋ˙×˙˙ˇ÷Oūũ>ēøö:Wt—Mjŋ{˙öžôÖôŽ8œqcqķŽ$‡c‰r1Î8‰ĮcœrĮ$998qƁÄDˆ9Á@äŽB9Į3œsģJÁĘĄÅ(A¤’  ŠŧüC#ä}'tG•#š Öhzĩņņú˙ŋ˙­^­}jÄzĩũ}Ēáė?ėvņęĩŋøcŨl%Åv)q&9܁ŽB"LqC‘ŽqČĮÂD įDI"A X9âC0r „„E4qÂABX‰āĄÉŽt!PœáÁ a‹EAŌ* <˙×Ķ~Ą´˙˙ø7†āÛ5wW˙đßøAą0âLq8įqAb"Lr1ĐįƒqĐA$Į!G ä ä(č#Ž""‘I"8Aˆ’„Œq‚8âB2(„„‘CĶˆQA)ZJ!3Dt+™Â‘G ŌáXæņ3Î-{āúīÚI^—û˙˙õĢĐ6—˙˙ô ā˙@ßß_ū ˙„ŸôPėŽ p ˆAA`t‚DI$4"Hq&8ärAĮ"$Į‚BHƒ‰ĮŒB#Ą„ā…PA`gˆ˜ BŽ ĸ”BDw(ėē Ņĸ‚kå?˙’­|ō˙˙{ûŽ3Dé~ß˙Ūm>g‡ī#7öęîŋÍēĨߨ“ „ã‰!Î8A Dcˆ‰C„„N8ˆA q âqČ*Ž@Āâ$‡8âC\|IBqÅ8¤C‘G”ü(āŽ8GŅto§H%BŽ:ŒÜ/8‚Î+~ūķÉûÂ2ząŪŋūį—ŋģ]ē˙¯ûŋoū¨ûü{˙ā&ũzŲuęĖâMÄDN9Įoœq!˜8҇!!!ļ8’DI¸‰ÜDH8įHƒˆ„Áĩ,❠a4„DލrwD4!ô}_osEÛŋ{š.—0ŠÍũš/˙ķOÛ4[Wę]˙Ųžõø"įŋęöÍNh´ŋm§_˙?ĐDc‰Į8įŒqHhBD …#A¸äq&9Ä‚ãqČŽB"Lq_ p‚ˆøŅũ„0":L$BS‚.‚Eũ$•„1ßm{JÕvסM{[¯ ¯öžÚ_a*ũÕ}ĩ˙m+[õŊ?uû]ÛVũ4ũžÕëUÛM6"""Hrq8âLr(âqÎ:Dc‰„Dˆ8“É ÜraƁĥČ`q"$Į n8`r Į¨„TĖâ( ČđedDu8ģ]'ˆAâ&Jp‚nqÂA""$‡8äcˆœqc‘ŽB$ƒŽA´q8äq8âLq Āä â0‚ V… BJ)‘B ąÁ͌#6Ęō‡ށ}†—VG.QÎ8ˆ”:G†#DH â"Lq$8“N8ˆŠDcœr Į#DŠä5‡!!G;’=ö_„GæĢĘSŅ1á ‚0ˆH;ÁáEĶ+âŽâ2üpČFXŒ „ĄÂ „IÉ9Į8âB‘ ĄÄT„$)Ž$‡!"F8‰ Nä â"AÄㄈ¤"Pá*!0â‡k…Ą‰(ŌġY‚ĄA!áE!"ŽB ĄĘ8ąØĨB‚!8‰1ÄIŽaČ8æ „ „Š9 ;D ™‘ÁČāx(#…#äp7#áČā`*8A¤|DN#yHŽ™\xQ+„Š>’Ę)\B'jĐBĄėN(üDĄÄH‚¨âC@â)$""aÎ8“N9q"$8ˆœsŽFâCPq&9Įń¤ÜYtEĐąB 2ą#xAĐ;e+)(„'gĸc˜q&9‡0äސ`q8į…‘Ã9‘ƈ‘I‘Ā܎ä|ŽäpXD ä!šĮ#ãÄbĩRŖ# ‚Dt!ŽBC‰0Ęš˜Äâ"ŋŌŽqÄRHHjqČQĘéd‡ŽqăŽ"B'N8UDIqË㈓BD㈜p‚GŌ" DM">F+ +7ŖŽ""PėÚ#Ę>"8•jCH{øH§!!!¨8¤F8“ΐ¤qÄ ‡$8A ÁăˆA 1ÂHhp‚8æŒsŽ)‰Įî“Aˆˆ@„H&8’ĢÄ$ĸČú„™ĸčíM`Ôrn!ĘŧČi“páT$8œr „¤$ĮŠp‚8âqăˆ‰ĄÄ˜âAÄDBDãÄ㐃‘Ž%;Ä0ώ,pDxŽ…":NcĄm#ēHÂ8Bo Âŝ¨#š…6¯Š&td%“! 6).FČ ÍŖĩ’;rA„)tˆ7Œq8ᄤĮ,sŽF9 8A’ärq8är1Î8AÄHh„N8A‰C‰Į!lBBƚ0ˆøŠ8öPæyxA2 ĢŽÉPŽžÚ0‚ Âh8t~ppŒųN’B' „‚˜â(%!ސAœqŠ „D㈒„Hƒ‰ĮŽBŽB'DN9!įzë “.‰VŒÂHHƒ“„ãĄ\.ÂCÎC@į?pÁ ŅPxhmŪí0Ô;õqA îB$ $AÂPB"Lq8á"ČáāÜ! ĀâC0qC‰1ŌHáČ9E”S … 3Šc‹#ätAŖˆƒS„’ÄPt…!P‚&‚;‚>(AöŸ2×m[IŋéÍ2hŊxA H „†ķŽqÄã„“ãˆA“…Dƒ‰1Ä㐃’H…DJp‚ cƒŖŠBqČG8äcÄ …¤ĸPâ3AÕÔ BLqKéÂēęÄ …”9Cá'Yëë¤ĩI´¯ú˙˙čd $ "AÅ„"qĮ;Ĩ˜t„N9R Đ8¤'DD㈜q&8‰!ĐBqÂc˛ ũÂNa0ÂPBC@éœq0äÉ įㄈ„“H4Ž$‡‚… ‚ qÄBl#xshycŒú• ‰”=ˆ˜v_*“LHŽ( ŦŽ| ËŖ†`Žá„đA„ ē?x Á/™ƒ>fĖ Ī™Â8f 0‚/„đ0ƒ8A/Ÿ3ˆ˜Bø"ņãAü4Ÿīzđáĸ Á?D(C8yÆl œ0ƒSƒ64ŧGA"<"äA˜@‹Į0˜" ˆ,HŖˆˆ‰Į‚a‰ ¤$Į!G Đ9Į $N9Į Đ9 9į$„‰! #Ŋļaá „!ZIab$Ž%B™Ė$c-Th0§—G°ŌŅōƟŖ[AàDx:8í˜páŅŨ„lh&ᇄƒē8íč&ÃŖģGÆh6vÆÚ_ëá ūà ēUAÃ- AöÕ:5Ļ1Ŗã„H8t› ĻŒŅÎ8A ÁÉgc‰Į!G!&9DƒŽAĮ!„IŽB$H08ˆˆˆ¤B"Lq8įh":ˆDt””V¤‡ A5—b@ĀöqĶG$cChŽ6Ŗúv)ÖŌum'y =Úmč&Ø0ë{é7V“a(û‚ ¤Ũ0اIŨoI]÷ĢûöD"ōĨa+uŊŅĮjÚÚNĶ^•Ĩ{ąMē8í+x‰ %(" Į!&áČėŽG‚8Čų) B$Į8ĖIB"qČ8âLrr 08“R&‚C;’L"ĻCQ„ Ŧa#ŽA¸å*¨)…‚ĒSŗN#ĒŽŽÕÛŽ•îÔkûŨ7OņNǎŊņąNŊ7ũ?[ Û_õŋØ~’ĢīÛũi]ŋˇĢ̤ęûÅtüJq8â"qČ8ä(äc ‡!"$Į#BR# „˜â!$QČgDIŽB"qĘâC@âqăœq8âž2đŠqĸĮ!œq]Qj"0#„&hÚ=‰äGAađA —D|(˙ß÷ũÆDWŨ~ˇíZ^˙õV—^úņ´Ão^Õëü7ÆÕZW˙I~“ūéZßÕÕ-ōĮ Āį!$8„‰Į„BDcƒ¤"'IBB'L9Į "qÎ9 ãˆA q8¤F;" #båŽXč!H">–B_ŖŲtN(Пũâ=ąîŋKą–Šģ˙Z˙ū•¤ííīcĨt!ĶaŖ˙Zü7âŋí}×ũX˙īø¯˛%9‡ Üp‚&8AˆHDãˆHIŽBLp‚‚ˆĮ AŦq$8A‰ ÁÄN8ÎËĸ8Ėgžzˊ°‚CŠG$2?Š] B5ŖD!đë_á÷Ø˙ßęÂ˙ßũ‡˙ aû׏āß[BŸøĻģjÃ˙aõyĻ_AÂBB"qÄîqĆ`äc‰1ČAĖ8‰1Ę␈œq&9†qÄH2qÄH09QĘä6‡!&:˛:#ē#čˇAq  qbŒ>H „Š9 =’MĄŦ!E!tBw(pˆëÁøZîØ:Ģ ˙_׌„ák˙Ø>>w ƒũá|7ö0N××_ę mVE1ŋđ†Îé„“DÎ8ˆ“D˜äcn8‰Į0âqÎ8“IšĮn$G# „N9†PâAÄIAqÄFãŊ†BqČAƐæᄠHR!ŖÆaa ‚ä]$v°…ÄFql?XûĐØF}}_˙Įā‹ëúÁ˙†Ô7]ĢĐ"Įø~ŖŠÁ~0_öTa‡õū¨ã„Ė$‘Į8įŠ9Į âqÂHŽBLq‚$9DN8AČAÄIBA¸â$AčBDãÜ ąBÄBDc‘G!¤=Ûĸ2ÜH.8„o ø":É!PNPE‚GB1ÃĐO\šwōĘ˙ēũ~mz˙¯áž]H‰ß_ÅF_‹ų´.¸FŋËNkûjra–˙øŌHDBDÄB „'㈍Ä㄄sŽBŽ"‰dtGä|!"'†¨â$ĮW,t\6ā‚!v œr<Î:CBu؂)Ō $˜Ąā߄íH-˙˙đ—ûūC}iî¯ī ŋß÷ÂUî‚˙ n°o˙؉ ÁÎ808A q‚ˆAČĮ8äcŠD˜ä09DãÄ˜âAqČQÂDJŒsŽB"AÎ8jDƒÂF*”9c”9āPJ$  )C¤PíÍčPJS„č2čŅHĀÄ †hōĄŪ–߃}ëŋ÷˙ŋéw˙įo˙ü‡~Ō_ß˙ ž°—íŠ&ßëŋ.9‡ ãœqšN"""'ĐAĘá!$ĮâHrCœq $r8„GBB QŒK§HK(PB"2Cˆ$‚(sŽ&<ÂZJęåҚáˇõūΉúŌ˙ŪĩūõU˙_ˇÂ(w×úuÖŋß˙ž]˙Ģ˙ošĶo÷ސAÂDÃąÎ99éœq(q âqÄ „D˜âLr‡"'Dá= ŠBˆ‘GCP‚Áˆp™ˆ|m(tnA0åyNx˛ĸk_ú×WŋÛÔē˙ũ}ˇoķ Ŋē˙Õú×ŖËKĖ/_8ļėŅjĒ]~šuņ_y:ˇ˙øA 1Ō‘‡$:„D‡Ž9âLp‚C‰Į8â9Į q㑎ATqAƒn8ÛŒq ¸á(ä|/GŅ'ä+ÄÚČqƐnĨŽCFčAb… ‚Gˆ”¤Šž×˛éû3WœŽķ?_ũēŋķ5fk]5ũ˙Ŋēl˙ŋMĒ_õ_´ŋͯZū؟ŽÚŊîgļŊ_ļ— ¸âqŌ!Ј‰1ČŖœq&8‰Į0â$‡! ㈐qÄH6BEp‚C(DjvĄ ģD~ hn-ĸé$qÔD§Z]‘ôH|E‘ŅÕ3äMJqw_„iļŌMU†“hiúēNŽ>öPØI´qŨ¤ˇu­­ˇ¤é+I{N†ˇ}ŽØI´›WCíĩt7N­[I´­m%õgŒtŒ8‰ĮƒŖ‹.2>GR86‘ÆGR>„H.9 ĄÄD˜â$Į `q&9ä(į$2Į;Ĩ¨ƒ‹ŌŽ @åŽPú‡p- •e"ëZü"<ĸ>“žØFpØĢIÁ ‰N“0ƒ °ÂLT0ƒ6!1ļ‡&ƒ ąA†Š P@ØqLS¸AoħH0œŒbcbĸĸTB lB‰N­Ãá¤Å1PŌ„GÂA 0‚BŠ Į „„‚ ‘Ár>‰Į9â$ƒŽ"$AƁČĮ BB'ƒqÄDI¸Ú?‘đ¨˜åŽPá"(åsJ!8ˆQcH1‡ŌB9Ãũ+ &LB Â•jÃ „͆e: SL!ĶĻa4"!„A˜@ÎPM1]a„Ķ8á0M1 § &š UPh4ĐbŠåX„ĶL¨ąNÅPåZb%aČĮ!AŽ8A‰1Ė98‰r Į âqČ8ä! ㈄`q8âDN8`p‚âeū4]ęwA#Ą:.Pæt™(q!G.#†]‚#Î?Äq„GÄDDQ!ÄN8A‰ĮA B$Hƒ‘Ž"""'ãUN8Аƒ„„IF8œt&ãē˛č"NSŠ&4).ÄF‚ŦąĘ¸A¤¤(á@‚güMĐIŅZEđ˙¯*×Ō8á"Aq&:“œq8á$ Ž$ĮŽBE†Đä(äG""‚#ƒqÄ „ †ĐA0ŽĮN ĻĄčC‰CéęŅôŠ %EÂ!B”P˙ü›K°‚8á!"B8‘Ž)ŽBB$ĮCˆAƁĆ`â$Į!&9ã‰HÃĻrĄ8E„CĄ„GČ膙Ũ‹yÎ>’„¨Yč „’ ÔĄAëŽ"ATsŽ$ĮŽ$QÄã‰qc‰Į;ƒˆ˜q&9QƁČ7HfF9‡ Đ8œr8‰Į BqÄF#ˆ‚3 IË ”Öˆđ&&xŽGÃÕ1°R‡GvGÂ#pĨŽÔ!3ō<3‹ˇŊ-‰ ÁČ8áˆĮ é q ƒœqŽqŲ Čá´GČāxr>G‚8Čāäp=‘ȸŒ#čŧ0H":BŨG؊0„e8A ˆįaō"ÄNīĄØˆA ÅG$Ą}Gë‰1ÄㄊB'IŽqË „‚""MÎ8ˆ‰8â$Aă âqĐJÂPF!!‚X#ŽNá-  IãAc¤.ËÄ}B—J!F8@øa¤F8A’#ŽC8â8”8œsŽ$6ĮA Į ã7HfA q! q ĀâLrqáPÁ=HZHh!ÂfhB3¨‰åģŽ‚$8A- G+ĩĩĸ Į0âB"S„‰Į$8A‰Į!ŽChq&9 :B"qČ8ä äŽ'IŽAĮŽaĘâ$Į‘ĐÃ.‹Ņ‚(z ,TX˛>5„) !Âx …¤"%ŅCĮˆAÅ#œq&8‰ĮHŒsŽF9Į$8‰CŖhƒŽ"$AČĮ Āé Į8į„H099ÜJðĮF’mI2œã¤Âė㈠[ J‘Æ^Ŗm#ÆėƒŽXä‡#IqČĮŽB)Žw$:B""Hr Į8á$Į!ŽqĖ9‡ 㑎"%IĘâM !ÄhÈK8á†S GÄļ'-‘аˆø†BCqÄF¯ „$Ŗü1Hã¤8â"")“H08Žqăˆˆˆ„‘8įIŽBŽ4qÄ㐃˜r"AĐQR4TLЉtGĪĻ!8Æ)Ė:EŽG0Ę ˛‡ätY N"…ķŽE „R; „ˆ9įŒs"qĘâLrĮ8â$DBD˜éŽBMŽ"$Į AËR0öiFXĄPc  ¤‡""ˆčb„D%ōŅé$"qÄR$9â"qŌHäcˆ˜rc‘Ž! Ø9ŅČ8ä Į ˆœqŽ$Į#D˜øA2á„CŒ;Ž80EÕPH$„…›‰;ō‡ĪK†Fgã3ĘâŲŪĻdQe$d[¨wŒė-„ 3qÂGŽ$AČĮ8ėŽ28ČāØärr1ČQČ7N8‰AÄKrr1ÄE"8œq8â7rB1ˆŒtÂ.†Ž‚ސ Â.“# †$ģKÚ§Ēzé§Ļš0ôB'$BBLrŖˆœp‚&â"CL|DãŠB!$4$AĘâqĈ9â!!"A;œt^SŖxQ6‰4ÂA Qaƒĸ>¸ˆFÜ0œâÃØp÷‡ŋÃ:VķŽ4aÄㄉĄÄãœr8A‰1Č4"B$Į Üq Āâw ƒƒ‰1ÄIqÂN8A„”8ŠÔ%_R9„Ņ tB%Đ! qÄtˆƒžÉLK’z~ŽÔ‘Û¯kh́'rfŌâ"$Į8æDN9ÜDˆ9âqÎ8“ƒŽF9Œq"$DD$@đÜp‚á"AČ7qôŽ8éa ƒށņ#á !Îđą$28Čč"4…ũũüqÆņ˙ôHqHN98‰1ČAĖ8ˆA`r1Đâ)œqcep‚îBqÔDƒŽq㊠„ „DÐAâĄÁė2ˆ¤wĒHu‡# „D":.„ø1ü|+„_zūĶHŒsŽ!"MÎ9äq8įH08‰!ĘįHƒ‰Į8ä „ƒŽ$pČáB#Eq „$ĮŽqĮ!ãĄFŠČ„Dķ^2Ž!ˆ"<Žę3ˆË ŋũWŊk˙„¤F9Į,sŽ$Į3 „ „ˆ8œr 9‡!ŽaĖ9Į0äc¤$Į8ä(į"p‚ˆ9 8“IŽ'DN8“DîqČĮ g"1ÂR!HŒsŽXâ*ƒXHMX¤"!–Pä‡HpČüHxA#m/˙úúø3ŽBˆAœsސ”8¤BqÂh „N8ˆĨœp‚ ƒˆ“p‚8æIŽ""Hq&8ˆ“C„“IŽ‚ŽB!$„DEN8A„ã§ }Dt‚"HHhĢEđŠ›Á§ ˆAŌCP@ŋ÷Uũk_ iƒ„„ˆœq&8“!8A„‹DƒŽBLqސ”9‡ŽAĮc‰1ÄJsŽ' „BBDDãœr1Č8â*qĐâˆų‘‚ã„ !!ŽB%‰C’E"C…J"o˙Š)U”í>f‰;%ō'ŸĘQüŸ%°R’5ĮGŠ#&šgbņõŽAŖ´yFą 1ÂE!)Î8‘ „' „IŽ$‡#ãˆA‰1ČQŌ&â@ĀâAÎ9är1ă`č!!8âÂŽqĐB"Œ‚ FČđA }"1 Pá#ē‰Câ\ IFI/åČųųÃ@ĪŗfA™ļfF„_D+“˛āž a°O a;. Ų;&@Eāƒ<Ù™ļ"ú`• ŽÂŧ™Éƒ33f`ôBˆđ‚*͸tEYļ0ˆX'„ø—āš“Âė°Ã3v|ĖD/L0@Čąœ80ƒ0D8’Œp‚8âqÎ: „ã’ÂD á"!"MČAÅ"1ÂD‡c„‘!‚ ĀâLrq8ä3ŽB!$2‡M1NSÎЃ„ĖiTR;ˆŠ#¤Iđ‚¯čđ˙Â5ģM´Ņė4|Á:m‡FÆ'á<6˜H1„lx@ˆė ˇM6bŌēƒdÂÂ6ĪpËĄōÚ dŨ;nĐwh0SŨ7 ŪĐiAÃFÆ ˜¨„‰ĮH“„ˆAˆˆA Œp‚8äŽ"'ã‰Į äc‰1ÄIBC\q ãœq8įqHØq8įDN8œsŽaÂXˆ˛ĩ(tHF¤B.Į´"~ŋáü:M‡Ed5(zON'GĶÖÂwyĮ‡tVR–ô¸ ũē)ë4RŊŌ–é[č÷H;[­ĒîénŽ=+h\4øt{aÃŖŪĸSũŅí†d WI°ĐzVöN•´Ë „§!œsŽ‘#D㈜q$9Į! Āá"D ™3‘ÆG\!#†ŅHāx`Ž2>G’B"HsŽ!)gN:Ī$ǃ) ”˛(¨B!Ķ‚ Cúo˙xīJŌĩ}ë}SßtĮ{' ĶŨVąW[č{âŸũŌŌ_đũj˙ē;âˇģWiŽ)úm+öģĐUtü ‡H$BB"qÂIˆ‰Į8âMÂIŽ"Ä …"qČQăƒ„ÔãˆAœp„#†Y5RAÂŽ>žŊ~˙^?ū?¯ x5öŋaë˙Uõ˙˙˙xøUm_‘! ˆĮ ãœrĐBAwŽB‰ĮC„ˆ‰78äŽA p‚ á"$q"p‚ â!#œt…*8ãÄPŖątFŅB-XN—A Š0ĄZĖ˙˙ũVīĮûõ]Ō´Á^‚ūÁėЛø>×˙˙oëūÕõ×_åŽBMŌ#㈉C–9Įã˜tŽ8`z ĮcˆA“ю‚ŽqČQăˆ’DHƒƒ „ãœq8âPá")hE„!%(Í„gÔ ”JpĸgĻBGE΄ ˆâN/˙˙ę6_˙˙˙“˛=ßcõXūļÎ˙Øuë˙˙˙Įhãč#>8˙ˆŠGp‚8â"B:Hƒ‘ŽH„N9ĮÂIŽaĖ9‡! qČAĘâ!"qÅN8œsŽ'ƒqăœqyĒĘô]Eņ8‚)Õ‘\xEáA ‚Å #˙˙˙-8ūŋûĨøAS ßøaíËŌ?†ųuũ˙Õë˙å…öÔ%ËË-û,rCŠN8`sŽ'D˜â"[„“DNįŒsŽF8‰ĮHDãœrĮ!œsŽB"Lq C‘ŽBB"qÄIB!"qÎ?˜Ū!”9E`™C”éEG‘C¨A8Â_˙˙˙ƒ˙˙ö“øAtÚáÚ%ū‘Ŗëđo˙˙ûK˙éëĐ]=~ÂG!8á"AÄN:GŒq ĀâBqÂIŽ""‘JIŽ"AĮ!a`q Āä âB'$B!"MČAÎ9 8„ˆI $QĖ9Έ„ˆ ˆčKĻN( @‚'ˆ3˙˙˙ûƒũoē˙ą_׹ ø¤ŋÁŧ?™ oTžŊŠ˙ūÕē {vë´Ŧ …#BA„Š„‰Į ƒ‰Į8øˆ‰$98‰!ČAČ7DJsŽ' „DN9‡ˆĮA!Î(By „„A#ČDÂQÁ8IĖ9CÄē…_ëũëü鷞^žy/ū„žžĶ×F­œ^T&Ũ˙ ß˙ŋŋG€_į—ņQ˙ņA$‘# „IŽ"HsŽC „§&8A Į!!Į#r8ˆˆ„ˆŽqĖ9‡!G8âqÄlĸėA#ČÂĨ.eŌ‰´)—B‚ˆ"čĀ@˙˙˙ü_ũöfŊžŋĻĖ×ų…íš*éíķŠß'Yĸ˙ūķ‹Zīô‡˙öŪ’Ë­ß­„¤"qÄN9‡#BD$("7!&9‡! ĀâqĊ8œrŖ–9ÉČAĐä „t‚ ‘Ár8B88BLpD|ČU„PáØ ‚Bc-Ō ¸Ŧ„HtˆäĨ÷˙ļ—í­ĶĢ~–ļŋúęēę]'Šuũ˙tÚM¯ë~æˇ˙ú‘úūifi´ĩ„Ž9įąÄDã„‘\„PI Ž8¤“"C„“ „N8ˆA‰!Äãœt„ „IŽ"LŽ*Ž)%1š%a,ĄŅĖE Â-tP?Ú ûßūŌŋ -ŖŽÛ 0ÖŅĮ­ë! ũļD 4­ ‡hk}ĨkjØVŌÖûKm+]#×Ēü‹ŖũēöUļÖÛ ŪœDJq‚eâ8BøB"Lq!‚&8ˆ’$B"A°q!˜9ã„“ „N>Lr1Î9p‚;„„ĨD$y‚A@ˆúhŧžXđDy ˜A„ ƒ ƒ „ 1V“@ØáąLS a0ƒ ÁąA4ž98Ļ%> ‘Å8Dy&*ŧb˜­ÅB#É ŠbĸĄ„ Ķ „ JA0›MÅ=D§ĻąLP l“ ˆĮ tA`sŽ"A0äc˛8e‘ÂČá ƒhBLq Āâ!",Žā˜BqÎâ'ã¤!ÕA ´ŠYp˜ „Vh Î.ƒīLSûEĐpÂ`ƒM4ĶXeƒ °ĶLĒĐļ &MĩA”:>„CÄ Â ,C ƒ;ÃA ÂŠĮûûuž×†áĻŧ0ƒ ”ę‚ ”9‡A Į!ŽBŽqÂDãn9Į#!)ÂDƒŽ"'JȐjDƒXä‡# „˜éˆ“„ „D§8ėFC„RŧFŲ |DDDDDDDDDDDDQ‰ „D$'Däcœp‚c ˆĮ8á ÄDDē &Q„]F!šá~BqÔã˜rq!!ĸ9Įc‰ĮHB ĸ š$9ä č!!8â'ЃˆH „DN9Į#ãŖĩ\î¤0Ž‘āŽcI)ÅėN8A B"qČQÎ8ŠC08q ‘Ų!&‰C¤Ahp‚ ĀâqČAČĮ0įD˜á!&8“tƒˆœqÎú!)H$ :„S"\ÝČ`t°‚ĐDDN9Į!8ä(â""Lp‚Œ98ˆAA¤"qÎ8A“N8ˆAqAD™Ą.ˆÄĩ8ā‚…˰ãÄE}ЧŽMÂDI$5##ŽBLrC q8æŒsŽ) D Ö9㈈éŽ!"‚HƒŽB(IŅ„" į ŠYí"6ĸ@ÂœYÜĖŽW™#%t"’Č™ĖŊPBCG#A¸âqČ#˜p‚œrq8á"MÂDDƒ‰1ČqŽB%!‚cˆ‘#„$qČhO!!>!Â#éČ08 YŋÚge;•gë„kj›c„„RH„!!ÜH8įIŽ$Į‚‡0âqČ*Ž$ĮŒp‚ ""qÎ8œp”9ęqÄ,E1ČBhečĐ_Uđ~ÇzA͘p‚HIŽ$Ü „˜äŽ%aÂD˜âBMÎ9âqÎ8ˆ‰! @Üp‚&9‡&Gd|Ž!HĨîqÄㄈ8č ‘!؝‰ ˆ BŽ…eŽEģ˙;_īššĐNvkå¸Ō´LŽEÂÎ8`p‚:BqÎ8“u$9: „ãˆI"r ˆĐ8l㈓sŽ"HŒq‚œq‚E$$üà‚ „˙‰‹ kūŌ˙ĩęø|:$9‡$8„ˆA0…!a¤qÄãœqA“Dãœq8éh„I"!"SœqŽČėŽœq‰8Ä „„EŅŽXC*ÚŠ 4Ąa$ū?ūē_Ē!")q8æ$H|D˜įN9č!8á"‘į!Ž‘8ˆ‰ AČ7„sŽ(!$8A$‡8ęB"SœtW !! ;  ‚# ‚!h¯ũ?˙÷ë!ÂN8¤A Į8âS¤$4"„„ˆ„‰Į0ų1ÂD˜âqČQĘrp”8‰Į8äc„ˆĮ!$8ŠIšĮ,sŽqČQĐC+â#â&¤]ÄB ”9x4AŗˆiQo¯˙ū—Ĩ­hㄨA28P„BD㠄 „˜âqÎ8œq"",Ž2>Gˆˆ`r‡F8ƒ„ŠH ‚a Į8á!"!ÂŽ3#44@’IˆˆŽ…h¸q„A ]uũe?˙]}Uˆ „N9‡‘C„‰ qÅ!‚c˜q&9ä(âB"Sƒ‘ŽA¸ä(âAsŽF9‡! ĀáÂSŽ""MÄãœp‘ "qĘæ™ĄAč!H‡>"!aä)ĸō\Ąz­ų˛I|U%;ÄJ)ĮI!&8ÚDcn8„“RcŠDc‰1ħAŽ!#Ž!$4"‰DI‚!&9â#œsŽB$‚e‰N!0„â !&Ō•"\ąĐ*UĮ DfÎD‚ČÃ(gĐfŒä 2^]–Häs'f˛ėŸ“Âė™v]’‚‹”ļH/0`’c03|gĖáaœfĖB!Iō`™ļ|‹ ˆ[/ З“˛ņĄ›fŒÛ:Ąœ3æm FŒÛ<΄ffÚ!x“” ĐĖ a‰C˜q Āá)p‚cœp‚cˆ”âLp’GBDBN9Hf!$3Î8AqÂR8ä08ŽqĘä(â(NĮH!/ˆ™Ąw)՘@Ĩb"+ŖÛÂhĐđ—WŖãÂxF‡i„haƒ´Ûm4| gŋnƒF‡éŖãi§GÆØ}醄kmĻcė&ĄēbÂ><'iŖ@}ēaĪC@viŖ@xAčđ0oAŖc¤$sqČĮ!HˆA"aÎ8„Œ9‡ArĮ8į$C08ˆA DN9Į!œp‚ ė!‚B'J „I‘âAĮ8ņ#HHņ„!ßCŒÎPč_á&ŨLi7 XnPđËB ‡G¤JÃŖl;ŖÛVËÉ:áŅâ}ÚVĶL$›iô˜Ũ‚ô›(v“ƒ2(öŌpčãá6­‡Gļ °āîŠļ“h&ÃÅ ÃĪĖt&ÃŖßn$ĮHDㄜr8‰C‰Į8â%ŽB'BA$Į!!ĮŽqË „†Äƒ‰Į Ütˆ8âLp‚$8A‰1ÄBD „įN8A 1ÄBIŽL!•ΈĒ.¨r9KrA~­ŠnŸßˇŌÚJ˙ŽŨëŠ~)ēÚ§§Šn¸§Woûmúx˙ęôŊū&úÕībž)ĩaļ’ĢÂbm†ßŊņM§ÄDBA'ãˆA“ÈA ‚N8AqÎ8œrqP‚aˆ“DDƒˆA`q8į…N:L!8á҇HŒsŽ)‰ĮBkGD$[K7Œæ $ŠQÕë]'ûãõâŠ+øū˙\mū_ŌŋĨ×§úK­öôŽ?k~éŌˇ˙N¯Ļé˙˙Á”9‡!ČAÄB ĄHD „DBDã‰Į†¨âC`âHsŽ$E#aÂB ‘Á{B"B$Į!Bq tN‰ä|()s‡A(~q}īŋũ^ú]4ŋtÕ}zßũ_ö̤˙úž×ũũŦ~žû˙Z_õēũ÷­Ŧ ĸĨ9Į&Gd} t„ãAĂ$Į!Ä㈔9ÜÄ”9㈐`rqŽ$AĖ8ˆ¨‰‡!ŖŽaÄL9Į!—ŖģÂDRąXx—I'ˇ uë] t>Ū;C˙ũŽõ¯ëũW˙˙Ų Nča˙‹l/ëßë§új˙û_h$”ã¤!!!Ž6A8äcˆČĮHŒq&įh „$'H äGc‰! Āę‘Į#B8AŠBqÎ8ˆÄJšÖ~al!Æ'!‡û˙6?ņ_×Ķ uõû¯u×í¯ß˙Wøk]ƒũ~ Wũü{×_ø5đ§…A$DĄÄ˜é#†Q|!Ž‚aA2ã „ „N9‡AĐ8jŒp‚ â$ĮA œp‘‡!(t‰Į&Ęrrr(ōšÖtAh †ĄJck˙×wø-qņ„˙˙āĐŋ˙”í˙˙ØQĶøē`Á˙˙Cũ‹ũƒûļ)¤aÂDㄉĮ 㠄DãÍDã¤!"qÂR!nqÄDâLrq$9Į!N:h „Dã„“ „DDãœq&>BŽŌК!HMŖđĨAMŖ2¤e˙˙_„[ūĒO‚Ņ˙öđÜø˙ūLZŊ˙˙ŧēė?åŲAÛ[˙˙˙’~‚ü0Â-ũ\Zb'sŽ)q!Ž$AÄㄌ9!ÂR8äc¤$ĮSŽB'ã–9!Į8âLq$8\p‚0H „N8œsqČĮŽqĖ8A“BGN:‚BréŖË3Ōˆha4<â˙ü ųĢ‚˙ũŌč˙ũ7ļŋ¯˙īÖ ˙Ž  ›˙˙ũ„;ōĶü6Oč,YBqÂDã‰Į b! ‘‡! ]ÂD$$Į!‘N""$ĮC‰ ÁƊ#qÄãˆHTãˆH$' „ãŠN8A ÄDBGA)šÍ°ˆčPČč%˙˙˙Aú_˙°Ō_˙ūŋ˙˙ûü÷Á°—˙˙˙Ž˙ƒĨö—Ac„ˆH„ ‚HŖŠA"‚Žw‚ŽqČß Î9 ã09ä#ƒ‘Ž'ƒŽ' ĐH „N8A 1ĐH ‚c „ㄈA2ႉØhŪ(!siHčG’EF\ūõ÷ŋéú_˙ D„Ũ?˙ģM×˙ųåŋä„ßūAī_ûŽŋ˙äč7_Ž÷&“BEN8HéŽ‚(qAsqđ‚a ĮAåŽq ‘ƐBAĮ!&8‰ĮAŽ!"q‚cˆ „Dä' „R‚Ž(Ž+2ĄEķčū‚:ätBa¸˜JŊ @…G˙u˙˙Sŋ˙˙ ¯í¯ôĮ˙ļŋ˙ßož_ûĒ˙˙ûû˙į•ē¯ų…a4'#’ „ĄÄĄŌ‚8įJqH ‡ „N8I$A¤$R!Ü „˜æˆjIŽ"S„‰!ĘâqČQĐøB"¸A%…Ą!Ō4fž—ûúę]wšĸÛ4JĨ×˙öį.˙ũŗEúZ˙íŽÚš§ū—ļhģüē˙zŋķDŲĸ×lŅųõå×ZĢKIBt’cˆI"‘‡!‚t„…N8‰Į0â$8á!8â$Į#H6BLqA Įc„œp‚ ¸áËÅq´0„DŅAPœCõ īęëk¯˙ļŊĢǝ˙ÚKūÚūéû@ˆúm¯ūûiwW¯kßĒ˙Ũh§ûikūžÚŨõ_Đįr‡‚aAq&„“IŽ9Į‰Į âqÂPH!8ä ä(úŒsš9â"LqŽ$ä á)qÂDÐAŌ! „JM ĪÉ!>ÂF] ĖfĩˇKwn­ŖŽí [[TÛJŅĮëw!Nû ÚĢŖŽíXiVÚMĨjčã´ÖÂ[ +i'jëĢi-îŽ8Öõm+[[a…a¤ļŦ4–í+[l!­ÚA„3¸A0„DㄈœqH ˜B‘Į!(sœp‚8âqÂDN9‡ŽqÂDDĄĖ8œp‚"C8įŒq&8Aœqc„ˆ“ã‰!Âp‚[šĸA —IE.†; $ƒ ļ‡pÂ0øØr, Å1HĐ@  ÂlqZ0@Đa6*Âh6+v!1PĶb›L Ø­†›Ø Â/ĸ‚h6( pEđ”UL ĶcbĄ ÂlSƒM6)c„G‚\Nč ÂlJŒC„‰ ™—r8AqÄRŽ$‡!cŖ‘Ž""qÉ0į!!C‘ŽqČ8â"qÂD‡!ěœ|ãˆAŽB2¸˛ž'ˆ™ “!{ĶAˆM!l* ,Í4Lđƒ0šh0DtĐe 1ˆˆ†˜B!„â †ˆ†„á„"„Đa0ša5ĘV0Ąa† „!ˆAØAĄ ¤aÂHh#B"‚$įB ‘ÆG–"MĘâ"qÄîqÄã„‘‡„D „DƒXâ%:DcœqdpĄ‰‚hčHŒHčN!"Čj(‡ņDDDDDDDDQ}ÄDDDDDDDDDDq„¤AÜãŠA!&8 „ㄤ“‘Å#Œ‘Ââ8Čሜq8ä æ$%9ąÄãqÄsŽB*w8âqČ7 „›ƒ„ŠHDēÍ´Ļ‰Ž!ø@ƒ}0 „ „JrsŽ‘‡„§8â!Čė!cˆœq8į „âqɎXâ) q&9 9Į# …!!˜9 9ĮŽ’N8A 1Ė8A‰1ÂD›Š+˜FŠ Fũ#Ø" åp‚,Ú.‹¯¤˙œ$HtB’Iƒ¤"AĮ!C„œp‚ÂB ‘Ü$qČ`q8á"qČ7L8‰Į!‚㑎BPč!8á"œsŽ$p‚+§B$ŒH4ˆ„„GA0@„"éuHúMI Į!c‰Į;‰q8á"w)ÂD „N:BqŌŌA Į‚ á!!ŽqČAČi!"Bœq)ÂDBDá"(¯ĸEG’ „ēĸ*„DĐA?ûiiR!‚ƒ„„sŽF;N: #qÄㄤBLq„N8“…D˜âLq!Ž$Į8â‚!""Lq8äx™Ĩ„DDē.ŽdtRxũĩđÂDcœqdp¤q‘ō8R8ČāŨƒé ‰ĮHNâ' „Dã‰!ĘäcqÄ „ãœr1Ė8A ÁČĮ$8“ „L9ĮSŽ!$AÂFãĨ%ˆEzHŽÄڜE 6!bA""qÂDî' „ƒˆ„„ ˜B"$Į!ŽaÎ9cœp‚dpÎG ˆG!Ž"qÎ>qĖ8œq!ĮdpΊIŽBŽqČĮHh …%A"$ą‚Dás‹Ų‡ã„‰Į ‰ „N8ˆ“N8A‰1Ät‚DãUN9܌tâ("1Ė8A 1ÂBDPEŽqĮ8âL|P“C›ØC˙ˆA0„BHƒŅĮ! „BG„†qÄ „L9NLŽÂ8â"!$Į8äc˜q! Ļ:I‰Įc˜q!HŒq8á(Ž„Dhēų6VˆĖė[#įB:™Jd‘œ‰iåY•Í í-–į|뉖8A4aÄN8A‰Į8â) Į!G Įa9ĮîIÎ8„ˆŽ") 1ă á!8áÂŽ"$ĮŽw#㑎"B(¯ZH‚ĸ˛ČÄc9„dčķë+ã&†w2N7´ÂGŋģ<ČŦ%L˜#[0QgžÂ Ą&G áG8äsސ’ „Jã¤!" ‚IŽ$Į# „IŽ$‡&âD!ŽB' „įŒq‰V„$P’.a8@Ģ„×ũÃáÇJđŪ?„ ‡„ŧN4šĮ! 㠎9c¤8A æD㈘p‚c„„˜ã¤g8į†qÄãˆČ äc¤$3 Üq‚(âLq!‚8á$Aåsĸ Š(pģ A ˆ$›“D˙ä-={[DųP´w<0¨oģîŲŖ‚$8A0„R8AĐAH …#4qČĮ0á""8œsŽBLq&9ĮŽB$Į#ƒqĘá"Hq$8œrÎ8A 1ČQÄㄤF8Ŗ"ŒB'DY 14Dēû^EûÚ˙×˙}ŌÛ8*°öŊĒv!"'D „ „BD›Š1ÄBDR!Î9܄ „ƒ°„BDDN9‡ˆœsŽBPâ(!Î:A%8Aˆ“ !’„DK÷ņ˙Į˙Ú˙Į×ßÄ[bSœrsŽB%8HP@Čã#äpÎGÂ!)Î8ˆ‰‘cœr:B$Į8â'sŽ)qa”įR qBR‰Øh šAPAG˙˙üũtĖÚw¯ŽqÄã’%aČ9Į„ „I¸A0„ãŠDB „$Į0â$ „PBqÂD›ƒŠC"‘ĮBh‰Ņ3B™$a ÄaŒâū—ũõ×÷ŋđĖ8H „BJqÂH é Į p‚‡cŽ c„‰Į ƒ„‰AÂDDãœq8äq‚ ƒÄD!#ŖD’_×_ũõ˙¯˙„ˆ A„ㄠBqÎ8‰Į܄É1Ō $Į0â"qÎ8‰Į!"$ĮŽ2¸Ūvą´úäL.@—ëäˇ˙Ķŧ5Ŋ~DLąÎ9Ž#„„ˆˆ¤aÎâqÎ9č!ŽqÄBRŽ@ qÎ9‡$8A‘,p‚c’ ts<Š’t‚"? DxfČĐĪŗ‘f Î=š›7ƌųÍ"&@Ąēš0ĖĖ eҍf`Œų,Đŧš’ˆN˜d”áĖŗ6Á¯63c8eđˆN$å+%dpJdüž„Ōŧš„Č$čᓐD,˛vm Ya8ãåČųųŗ3æm”„lĖl! ƒ„‚IŽBSŠĮ!&9 99ĮHD „N8HDH1ČAŌ# „ „BDIŽ"!"ŽÚtvRąDmhâú=ŋĐė ôU´Âa ÂjcG°ũ­ŖØÚiŅ­ģz4?G€Ņ­øMÛ[ĻąūÕhŦ{ Ö~„Â4;G‡ Đ#3îÂ-ßč0aĻÃõŅ÷Ú5ˇ7tâ"Lq8á$¨DD „˜á+‡Ž("Į8įąÎ9 ãgq&8ˆAœq!¨:D âAČAČQČĮ!¤"FŅB&Cđ“a Ō °čöà °é¤G† >é6 ĮĄĢ`Ė Įĸ'j˜I6áô˜í´Ŧ3 O +cŨíßM ÔNØI[ŖI°ÅÃŖ&Ō ȇG‡LJĮĨ›áŌ°čŅčö  q‚(âqÄ[ŽqÄBDE"1ÂDD „Hhp‚c‰ŽqĐá' „ˆ9⊄&U#LS"Ģ<‡ũģI7îÛĘ}\StÛ¤ęũMū›÷ßJŨôŸŌ~i?°ô˙ßßßv’w­&ęô–´č/ąN´ÕäAS˙¤ÜBoŠyĮ!ÄãœqŽw!ŽBČ菗ˆų|!‚c‰ Ē99æN9 QČĮAA 1ČQÄDá8AˆA 1Áņ "¤ČkézŽ×WĨĢÕŊīW˙õOîßJß˙M÷˙ģ˙Ũ/˙¯zé_Åk­ũ_bÃĐûëkŋü2p‚‚ˆAŌAsB‘į „lRA Į8ä(âqÄDR âC1Î8œpœqC„“Œp‚! åŽqÄㄒH"ŒŽŠ B"GBBa !Gūģ˙ĨŊūõúˇŋ˙û˙­_Ō~´Ÿë¯ũw÷oŌâŸéŧ5Zú˙ZNŲß˙ę˙ü …!c‰Į!‚E#¸A0„ㄐA"qÂD›‰Į„ …#šĮ @č!!‚cˆŠBBDB „!"’ШŽ—WmŋÆēúlņûĢáĒ×˙÷ßũ˙˙ļ<1͝ÅĄ_ú¯˙oŨ_ũuíh$%BŽ'$B' œPC Į!8á"Htœ „ˆ:B(%8éœqH„ŒrvGd|"1ÂN8AœqWÍŽ‹ĸ&ˆhŒEá4K8Ŋ>—úëūø5˙ ūėŒ'¯ī¯{_íÂūŨAđ˙ī˙îéü}oa˙˙úŖŽ‘á!"' š„w! q‡# ‡ !ÂE"AČ8”9 9ĮÂ)Î9į#Ž$Į!!HBDG!HĈAŅNŽÄĐ XA 4*"tB¸ū7ã¯ū˙ļ>°^ŋ‡Áåī˙ø˙ü˙`đÁˇ)ÚQņū†ŋûí¤÷ī_ũxA‰Į!Ž“T"4L¸`„"L#aÂDㄈAČĮc¤AœrsŽ"'qŽAĮ3œqŽ$Ü „˜âLp‚‚&8Ą;t(!Q!ŲAäĮ*ÁՌ—˙˙ė94Ÿ¸˙áˇK˙¯ūZOËúŖGöÔ0öž‰AáWû_˙˙ŋ}˙˙ūEÆGG Grų/„҇! „JÉĮ! Āâ$Į#㈉!ÂDã’Œp‚""‚!œq&éŽ$ĮHŒq8čǤŠNŽĶŖ44% 'ÄâũŽaA ˙˙ô_„ũ`Ũ֗˙˙_×î_ũx6ŨjÂåŠũ§˙÷ĸ÷Ęwõ×˙˙&Gdpp„†É9Į’‘ęAœqŽBŽ"qÂR!Î9æ „DD›ˆŠFrc‰ĮŽ$ÜDã„„ʄ$ˆDDD…ŖxœC‚%ŅÄ]~ŋūŋ°oũ/ûÁŋoë_˙˙ũRūüÕ˙ū×˙ė%˙oũ˙_û!ÂD á$N:HAĖ8Aˆ‰Į8â‚„"$Į8äQÄR!–PæD§8ä æG8äc„Šqc„‰ĮÚFPˆč—ÉŌDt‘.Œ ¤" "9/ûVßŋ˙čâwũ/<Ŧâõ7ŧqW÷߯ž_˙¯ûjhŸ<‹ĻãŠ˙˙˙<ŋŠ_õ×˙˙÷„‰n8A Į!Ž&Gdpr8Čųa F ‚ `qÂIŽ%"ГsŽF9Į&8‰N@ÄN8ŽA# „R# •4"]I(!P‚āĢī˙÷˙v˙˙¯õÛģŋĨēõíū˙üRˇöí~÷íˇ÷ßčâËúîŋīũø¤HtˆA0„ã„ ‡ sŽ!"""qÎ8œqH㈒ã¤C(qq)Âr F8ŠD įąÂPD â‘8‹"č֔IBhPø‘ŦEĄ<Ŗī“¯ũëūöÍq~Ĩ×˙˙__ũ͚ų§˙Š…˙uë^ŲĸōuĨæ‹÷3Û¯Õ­r… ˙÷Kõؤ'†qÎ8A)ŠN9Į B!$AÄDD†ÁÂIŽČøB"qÂD˜á"&8‰Į8âqÎōaˆ§„”Ē0’4aœC‰äƒí™­ĩ^ëm[íoũVë^ûŪ›[@ˆöÚëi6—ļ—Ēé¤ēŊĢiZĶVģk~Úëˇë˙õ úëũë˙g)Į B*AŽB$Î8A Įc‰!Ęä(įŒsF8AœpAœr Į$9äRcƒ„“ ˜B"LpŠŽÄš" ÕÁˆMDDę6ģaZm+[I^ĩ_I°“ammqļļǎi{¤ÚWm§Đm(ÖÛ Ķí´wëVļ­Ĩᰒ°ÂV•ÚMŖŽÖÂMé­ČAˇĒm+[UļÕ4ĶM60‚D‚c „›œsL!8ä č!ÄI$ĮĮ8á$Į‡ˆA G!&8A¤F8AqħT¨A )Cp¨­ŖhžN‰Naķl(h'Ø­Š  áÆ6( ĶA§ŽÂ†*(&ƒbĒ)ŠAĻl"ã§b˜Ģ ą)ÃĻ)Ši4Ø Ļƒ ÅwÛ°E䘨"ōģLPD!ÅA’cbŦ&¨¤Â &Č ˆGÁ6).(M0ƒ ąA4ĶM6"qÎâ%ēA(- ‚!‚‚ äc„“BDDã‰Į0ä6aŌ!‡0ärĮŽqÄBD â'DN9܌p‚`ˆú™ĄDRĐaš‘VĄ4="ē‚”ŋXaPaPÔ4ė Á`Ä„ =h4B",! ÂjCL†0ƒB!‚ ÂqhA„8aalS(`A„Â3A„Đ‹9ØaFt 0„OâÂaÂI GRaœtˆĮHÉĮ ¤$Į ƒˆ‰ÜD㈤"w!! ĀâLq&:GDㄉĮ!•kļĄLĒŠØ˛Ė×b6# ˆëˆˆĐˆˆˆˆˆˆˆˆˆˆˆˆˆô""#ˆˆˆˆŠ/˜aˆˆŒ$‚ ¸‰Į8ä(âPá#"B’IA I C˜q&9æIŽ$Į!cŽaČAŌœã‰Į!Î9Į!ŽB'sŽ­Oą;B".uFÄGFĐHTB ”Ŋ>˙ îÄ㐎qÄĄČĮcŽ! ˆ“ãá"‡"ŽBœqHN8A 1ĐįN9Į ã–8ˆ“ „JsŽ"–B"qĖ9âBa #œĸĸˇBŠJO#A @9…¤N(ūEtē|A N8AA2;#ƒr89!FÝĖ8A„ˆ˜p‚8áĖa„Đ8Aˆœp‚8â"(!8â"Lt„㈉Į ‰„ÂĄ‚ĸčú8„ĢDB|$""mˆˆYÅúú!…"8„“! ¤aŌ!Ž#$@Ä˜ä(â'…îB)kŒq8âDŒsŽF:B$Į!„°‚ą"YBCEˆåZW”€…%‰Ÿ˙×× …ã‰ĮŽB'ÒÈAœt‡!H „˜âqÂH08‰C„¤"qĖ8‰C„’ „†`âB"B'$BPæŒqŽB˜Cd|ēP„Ö„ BLĄ…8B"&´!¯/¯I[i &œp‘Į3°„‚"œs¸ˆ¤$Į8á!!„DIŽ9‡!Ž"qÎ9 9 9Į¸HE!8á ‚AP†yD)äP”HÚ>Ž!RŽˆÂ D­ /đėPA†!BD „Eqô‰aÂBBPæŒp’H ‚8âEN99 9Š8ˆA‰r1Î9é$$‡!ŽHpˆAÎ:F-!’i‚ĨÕ¤ĨĐæA ÄŖFК! ķĩ?ʤ[ŦŒ"1ÄBBRRŽ"Pįq8á"$‡ŽB9Į&G r>#ŒŽŽ2>GáˆAˆœp‚HN9Į#„"ŽĄn)ʄ $aB<‚ėÕA„!Ф4R”Ēū8‹HBIŽ"qÄ$PäQÂBRAp‚há!"'DîAÂGCˆA4aČ8âqÎ9 8œr Į!HDㄉĮ  q)B$ĄF"ˆAšĐ‹DÆ$4"qŧTúą)Î8œpA 1ÄNá"qÂF㈤4qŌ#N9ĮH†!cœu!!!&8ŌGE!8á$ …!!ŽBC hē ‚Q6‚ 4BkBCGD&wAr”ŲIAŒ8A”9$’N8AŠDc„ŠBBqÂDJp‚aˆŠD‡0âqÂD š ã‰1ÂD „D˜äcœt„Š8œsžqĐč":Î"čú=#é&}“DG b-Dũ„ˆŠCGq)ÂBDã‰NB'Ȉ „L9Į#Œr ĮÎ:B"Hq‡Cœq8é F „DãœqˆQB‚#Ļ„œD ˆ¸–ŖŲÅb+ķĩí:,ƒxfîqË „PH#Ž'$8č!8á!)Î9į…XBqÄ „ˆ8°˜BLq&8HD㈓ãŖˆAG!ŽqČŖœqP!!HŽˆøA ķt'i2tP‰j ĐĐ&&húE9!Ņžqd!Ėė\ĘY–ķgeąÂLqQ&9æŒp‚0įN8â$‡!8éqHIŽ"S¤)„„ĐA GI ĄĐA3ņü!#Ŗ4](p‹ˆˆq8‚EĐ ’#ĸ:DQõ˙Į×˙üwũë­IPĻÚ Õ°„‚‘á"A4Xį㈉Į8á,¤ˆˆœsŽE㈈AH„ ™qĄ œsŽBŽ"‚SŽCœtˆĮÂDã¤0‚Ũ1Ĩ!ŗkPB|ĄŖ4GB] (p‚EāE†Ų‡!(pf/ūŋ˙ú˙û˙j †ŨST˛‡!ŽB4B*qÎ91Ō8á4Y1Č7R0á"qÎä â$ĮnPä(ãB""BLsŽ!„"B)Ä „R (cC„6lčÚ#ĸ: [GНŠĸtU¯eĶeÖ5˙õÔ/ūĢ˙ũüãÚh6č$ „œqHD㠘V+ŠJČáāá 1ÄD „DãœrIŽ"aÄã„‘!Ž"MĖ9‡)Ōc‰!ÅJ„a ‰Å(+tC‚#Ąb2:iDˆĮ$! %Dv=!0æ…‘Wæ,vÍæŖ#2$eH0™thŽgãŅÍœ^rĻ^åPŽ=DđĀDŦ•’˛œôųs:žUĸ>`ÉŅėД&Nė†z’ņũ×#wūŋߤNf9Į ép‚à 8äc„„ ‚JHƒ‰ĮC‘ސ¤aÎéq$8A‰Į;‰Į8é#˛8T$Į8âBLp‘‡‡J‚&: GÉüŽ+J„ ‚bmFŽÅЊaA ‚Ø291#9Rũ DxĖfČŲ!pžōvN~ Đ"ņķ ‚„ŅáŖÁ>liĄh"<šÅÚq`˜AŖŲŨ˙čđÂ4>4x`š " Ų `Œ>fŖÆ"đOŦ؜ ‚#ÄL™ƒ˙ë˙Å.a„‰1ĐBHĄË „ã¤( ‚ŽB‘‡0âqÂE,IBB‘‡‚a Į8áEŽ"§q$8AAœs' „E$ %& (xB(žĪ…,æČ ‡/„ÔŒŌGĐ BGÁÆĐ‰$ĪAÃL&–†A–ˆFv‚ ‡M´ÂM¤á–Ї`ËD;Ļ:<0”Ji„í´›Ũ&uA6 ŗÁš9hØŨw¤é=w‚ ‡ŸĨ˙G‘Į ƒÂD‡HF°‚‡HÄá) BqÂDã‰q!H „‚ã˜qÅ"1Į!&8‰Į!H „N:IŒ8A œs¸A Nƒ(p–ā`¤t](u{ IGJŒ"t{1, jQÔĄØYÅíá&ßaWē8úŠmwœ{ŖJŌwtqŪéuģŖwIöŊŨŋí+اtqÚļ˙Ŋ$Û×"ēufzaļé[čöūī˙˙ü7(p”áÂŒ9‡‚T ˜B'N8¤w s9Į+‘Ž"'…!!8á$AÄã‰C˜p‚ŽqÄ㄄㍠‚BSœq!ÜE!DGĻ‚ÂM …•á„ ŖčĄ*G’8áčE˛āœúęū÷Ũũ/­+Ōúé÷âŋ×oëâ­,}/ééūôǝ}]û׈ZXÄ-­[⟴ŋ˙Õ⁉N‚8åŽB)$;„Š „D ™r ¨!8ųĮŽAĮŽqČĮHŒsŽ"$ĮHæR‡0âPá$ĮI‚ŽXáÅAãŲ%ēuŸAD „N!ÄE*S„LŽˆh1ņ˙Iô×Ū?§øŽ6–īöŊwøÚ˙Û˙û[ë×˙ôžš|˙—úúûV×ũ-ŋw I‚ „N8Hi' …IF:T ‚D0„ „˜įq8įŒp‚8â%8A0„ãœqŽ$ãĀé BqÂCœp‚Ræp<ÃÁ:¤°ŠxHTDŽqBØD'! ;•a \xŋˇé~‡ũņĮņč~ŋņëũ˙˙Ąīûî1Ãīëũí¤Ú8ôŋKŌėY‡&œp‚8é ‹ „N8HDĄÄD „BDãⒹ ¤ˆAÅ$á"w8ä ä3Ž"'îAAˆA0„Nā”Ú¤!HÜE)PI A"菂! ‡P•D'H’ĒP‚Ō hĒq{w÷këõ­õėū×õ˙÷_öŋŪ¯û Õũŋö˙Û˙bSØĒ¯Š˙ƒB!ЄˆAŠÝÄãœr1Ō8åŽ'"NBB"4"qÎá$ĮŽB'%8qÂHf4w8įHQÂD㠌áH">—A# œã„1R &Ō™ŅĸHŽŒ!" ‚B(r¨rK<A„c­HG!Į ˙_ĘŸ ?ëî Ž:Ķ.•ƒ˙Į˙˙nP˙˙ú˙ā˙­ŋ­ŋė/ø0X0ZüÖūļ Į0įN8HæRސá$ĮA‰Į8á"9Į!!HEC8á"qÎä á) 1ÂBLŽ288H"‡E‘Đą‡)ÄV]‚)ĪM&‚ÔCŠæhE!AF(î’8%‰7L˙öׯßū?ˆáõ˙õ˙ûi˙˙ūÁũũ˙ßņõãŠĨøooØa„‚B „' …#ŽŽBLr1Ōœ ˜BqÂB$‡!HäF9Į!ã¤%9į$BL!hâAAA „'$F9ĮhĐM‚ ĸC‘Ž(Ąĸųt‚ĸ>A N"ˆ"Š’BD|ސA ˆ¤č”„ķë˙úu—ú–žōÄ?ũũētŋũå‹˙Ãk×û~˙Ë-˙ũû~¸l4‡!‰Į!ŽB"qĐCˆ“îaÎ8“R8á"AĮ!!HD „q!!8âqÂIŽ!$‚3„ˆĒ VPâq×d}HčhPD}$%)tGGā@˛čē8ˆÄĄĐ•„a6‚APũ˙˙Ũw˙~šP¯˙ûk~ŋë˙˙æŖ˙˙K˙¯õЇ÷ÅeA°‚Î8A0„J „N8HNį ˜BB)4@Ä$qĖá"qČQÂD㄄˜â"qÎ9sŽ"9ĮJŒ9Į#E( ‚c ĸ‚ˆ„ ē' %PHBƒÃWQ!$b4L×S‚. RT‚#‚ūŋũĩūŋ˙§5 ˙˙˙ņ Vëūŋ­˙Ãú×ė0—ë˙õOīųŠ{RĖ9ĮŽ0á"Pč ‚ŽB'Hƒ Ž= Aˆœt„§8âqÎ8ˆAœs¸AˆŽqÂDㄔ㊠M,aA:A(BFé•aEd|Ëĸč$m ŧÍ Xa AĸOČųtD‡Â˙¯ņLųåīũˇ˙yå¯ú8Xã˙ß˙_Ė÷ß˙A!kŋ˙š<ãČwû÷†Đˆ‰Į! ‚i!‚a Į âqÂq(r1ČAÄ „I¸ŠN8AœsF9Į#î"%9Į!aœrÂRA‰aÂ( ēCŽ0ŠYĩ!q´AÂIré! ‚ˆ‚#LÛ¸He:GBF]hAˆ‘\/÷[ĨĶÚ˙˙äëķ‹÷4O˙úĩ˙÷ßõø"Ÿũ¤?ëëK_˙îĘåŽqĮ&¤w(3Ž8HæN8ˆHãˆA C˜qä#”9p‚‚&°ˆĮ!œq8æã–9ĮA$‚!œ$"ŒIŽGA q„šĮ$9œRV}*@ĸ"‚0ˆčĄ‰ÄAŽˆâ ”\PåĄʄģ˙{ē˙¯ŲšöÖëö×J×_˙kûIĖ˙öë_ŋoúëûÜŅëĨ™ŪŊw˛œ „Má"4‚I„B‡H „I¸ˆĒDcœsŽXá!#a9Į  p‚p‚(åŽČėŽ…BDãČAÂD „CDŪ…Â&é†]ÄUBŽ"ŌEĐRúVĄ"1)Rņ Qų…Ũ&éWm Dnĩm~ŌžÕtqė5ĩŅĮëō0E­ũ6—inĢvˇÛĨëÃŌôÚū›¤ęĢ­+ö­! ‘!ÄR!Ž‚H …N9ĮA„p‘ĮSŽ'28ÂAĘr1ÂDDãœqHãá"qĐA!(#9ĮK8␄]Ō#IŽ‹FŠąC‚°QÖ¸ˆ‰š|B™¤DN,x"<M´ž‚a(aAĻÅ€ÂPÂLP@⥹LS0D$ØL äĻá0˜A E䘎H6Ō„ÆÅZ@™] Â\“âė$›iC 0M0˜AŌT xM2:z •Ĩ!A$F8A F!8á"#˜p‚‡0įqA N8H„ „ㄊ B'rc‘Ž’B"!ÂHPB"$Ü㠉ŽĸÉÔ$EG„āˆĮ$8A 8ˆhÄ#įĐAq„PîŠu„䈪Ķ/‰Ž$h —eÃ˙ Å+N›iĩá§ØŠāSá­Ēam>á‡ĶõAŠ / lBUjU¨ÃƒBM†„Šļ*ĐvlSˇM„ĸ›*Å($’0á' …! „IŽ!"AČAÎ9‡8â"8A A"'DN9ÜB$܆Pâ"qÂH.:N8HL8ŖÚAč!Ë!(pĨB$Į8ų!ÂCJ!„>Žļ4]YB;š<‹xH4"‡ Žąâ’˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠˆˆˆˆøˆˆˆˆƒ"-ˆƒ ĘŲ( aˆˆˆ•<1Ō!P‚a H!Ę"1Ō0⑇ ‚Há$Į8á"‘Üã‰Į8âDDN8”9 8“… „N9Į0é‚Rn$1{,8CrC¤'DB∸Â!Rq.‹úDčÚĸ6¨Dž’ "A­E˙F;ņԈˆîÅ$‚DR0䜎")Ō„Tã‰Į !ÄPBqÂDîqÂB$ÜBG „N8ˆ”ãG$Ab!iJgT*!rtB"ŽHæaH!Ą n ˆŧ „ ˜Lb+øKô›Pb“fî Ž8„$(!8á$cœq ĀâqÂD㈜sŽ%BŽqČ:ŒrĐBqÂDˆ8„Š„nģ‘\ƒŽ-†ØBaC‰cŠ&W•YT?”8ą# Ą ž"o;AŌ !H ´-˛:"ĘqČá§ôŸ„”=$%: Œ:IsBqÄIŽBŽS‘Ž""B'ƒŽBqÂR‡!!ŽqŌ8á)rp‚cŠ!‰1Â&Čę˜é)C¤! ”t"B ‚†_He,`ŠtAB"%O":ˆ”āˆá ĸ_<•Ũ>;iᄒ  ‚R!Hp‚‡!8á"CœqdpΤ§ãŠĮ!8á' „I'ãˆĒDœ …#8HîŖŽP⁠‚ Į†„DTãŖ BåŅ,DD`,I„.§ŠĨ b"„ã×íĨĢib‚H ‘‡ * "1ÄㄊœsŽXįN8A”:Jw8äcœ|ƒŽ’H!ĻÂR0âqÄN9‡!# …B’&‚0đąH§´‘…‚āC`ęĐG‘„ŒāŠ ‚VĨR"H%JPސdv$ŅB$ ëėëÃ&h$' „ …$AB' „ˆ8„…$œqŽ8HBBBP$'…#ŽB[ˆˆHIŽBĄ#B!؊Â"K„€@ŠˆRč(NØA ä†] TLē. @„MŦDToh!ž#š]`nÂK„ÎB'$' „BD „N8“ A""%“RŽ‚3‰Į!ŽA9C˜p‚ ”9‡!(q"Ž…ƒ—Qğ, @†… 8„áDx$ †%øa*GČøâs#¤á}bOžGŅ ƒš>>#°‚H „PB’ÎBA C˜p‚§!Žw0æã¤BqÎ8œs¸AA4"‘‡!œã‘ŽqŌ!‚ŽqŌI-_aČv GHB"A#œuށJ™tGJ ä4$4P¤ÂDt!Ą…Y„“‚GA%Z„2?üt‚HÄ”į „PB‘Į’C BˆAœrp‚ „E' †Ž9 8ˆ ‚N8AŠ N8HĄÎ8ˆŠDQÂIŽ’/›Đˆ¤%@ B,GÛ@Ņ’˜ą& Ä1Ŧ A ¸ĄS‹ö)$Čé$' „ ˜BqŌŽqÂBD˜á$Į!8â*MŽqÄãŽ"$Į!G&œr:A¤˛8ČæGaiČ(ƒB‡#Î9cŌ-ÂYtĄÁëŸG’´@đ@„AÍhDDÜÃĸũé„\āÂD ˜BqÂDㄊA!#Ŗœp‚ŽqÂIá(!œB' „ „ˆ9:Dœ „˜á8”8¤‚Ęp‚‘Į‚@Š…8ėŽ‚HąáčXŸąT㋍0¯ã˜%‚.™Ėĸ%ꆄ †_jã?ęÄB%8Aœq¸Aœp‚‚dpĄJ’8øA Dcˆ‰Į!‚‚‚&Gp‚ag)0‚‚GÍë(pAf ›#Á8âTsh*šåҚ‚`†PãAh)ĄÎĀˊÎą0dËËD÷h#‚!”á"qÂIa(!‚HîBAqĖ9c„IŽ'sŽ'…㑎qÄãŖ„„ ‚D …!(pĨ*Čų$‚# ZBT ‘ôDĄ"帉1É:$- ¨Ū‚­ätaDt]Do3GŅt8ADĄË(’úPˆų: ŒĮŊ0§™ÚĖw„vļĶØ¤CœrqA$"Ą"'N:B§„t„ „Tî‘c „§ N8HR8á"S ’0á"Pé6’ØÄ%ŗŽ{DĮcˆŸ%Đ@‚(t\BáŌNBA`ÄPh"?ŽA1á¤åđ‘!LZĮ#Ä4#ˆAaüFvèpŽáø0‚&ˆĮ!&8HHAĐBMÂIŽBB‚œp‚@ĸ&œt@„D „Jrœ ‡8á(!HDSŧŽeÔVˆØIƄJ(™ÄîF-ķ;ô"čPT"%:ĸ†TŌ+…‰ĪϙCŽq¤¯ûšAɄI1H …N8A Î8A ‚BR3”á' „N8A †ŌH ˜C„”ᄐA Y܄$aÂI¸A ‚ÂlĄĶ  ÜuŽ‚)Å(rcáŗŽ*nˆ—AÍ E8„0ÔHŌQ%Ķ>ljĐA ^]—$”E h˙Ú¯kéļĩŅN‘ĮTá(,ã„”į… ‡8á"‚ „N9܌p’D‡¤6BPä#ŠGR!H …qÄBDã„QÅcØe=N)øĄK$ą PūŅ!ú„ē&rœ’×ŊkģeVŋ_úMô „BA#‚8é Œč –wc„qĐB ‚H#L!Aœt„ ˜B!ČãEMФBÂ!Ą0å9C„…PäW)Å ĩ’a*}*‰ô,ú6’e9OAy„#GÔ~ŊÖŌz˙ûŋēßvß˙~é´:×[ũ˙ūʡũõö˙}‹ARA%A ŒqÎá҇!A A)Ęp‚8á!8⑇HNč!N#ĸ#¤˛| Ž8PŒ ÅÄK."Â)ä|!Pˆč$) ""qfÜAáOgë.…ãšÅúVŋ­¯ũûŊ{ũm]ũ×Ã×˙Ã~ŋßc¯Û!Ž:ã–8IĄ8âSŠ †‚Bw8á"B) ‚a'$%8A A ‚ABf„nMāń Œ$,Dˇ$8ˆˆhąÚG‘t9´8pcèÁí”åšBDwī˙ŋ˙ū˙dhđ~+¯˙Cė?īúÛī˙ā˙ėC„Œ8ˆá)s‚3„ ‚XA ‚ Äㄌ8HG „§ ’ Õāˆč#Ž,ú $įôVaÁõhrq+GŌ<ˆč …Ŗˆ2‡@ŠHä@8֗Ž8ū:īŪöül6°u‚ÔúÁ˙˙˙˙ÖÁûđ†!Čė¸ L!A$B¨!8á*8á"S„‹„Đ Œ9‡;˛8¤|!TˆHãˆCõ$8@‚`Š-•aCÂ*i rĮ&á"aÎ:ą 2:0ˆųô|LŅBÄ\`–CĒ<=¯ōz×Éé˙ũ‡üąŒ0ü7á=ôÃ˙˙ČÄŨūõđbĄS„„BUBB‚!(tŽ8„¤%)Š˜p‚AÚ N9ĘNņÁcĨ‚‚Cd}pAeŽwėŠ9oŠĪBą4ByˆŠôGĮĄI"éÉĶū|/˙ķĄ˙ƒ`ū~_,˙,Më˙~ƒŋ˙oũû5GrœPA"qÅN8A  „˜â§$qÚ ‚8á%8á„!¤"3¸B‘õb%ÔDBė"Ü ¨ąÁ8äĮ)Ų6‚"})0Œ ‚åĐ'įĐT •qD2Å˙˙˙×ÃāØ7äVôŋ˙ˇ"ī˙˙^ëũpoרŠ Xá҇‡A‰ĮA“NáB‚R‡ ‚a ĮA!8á ×5GŨᐈp‚‰Cēi$^¨F RŒēö‰Î¸ˆˆˆâ"8ˆˆˆŽ#ˆˆĐžIœpA0„ „Aa Į&ØHNá$Ü!‚™‘t„bƒ¤"IĐá"C@╠Cœå@!>@ŗ¸BÂĖõ Ę ƒ!"™_ß˙úqŌS¸Hä%8Ač!A ÷ŠQ6ôˆž-RÜP<Ģ!œq$Œ8ŖÚA+A1eŌĄ\Gœ@Ž:DĮM?˙õņĮB$Įnq‰ TOĮ"ŽLtG(hŒqI¤‰uÍ’ĩžA ŠƒĐFsrH&G G(Dt‘ôGCû˙ŽÄøj7ͲDghM⠘á„„DHƒGĄ œA*P’QPEĐEސAi !ˆP‹á!üČëõéĒ^v[˜Eō>GČâ‘ņ„.‚B0¤3X„H7ĄÄ˜įtL*J˜I ÆŠCp‚!„ĐÆ{;Dbũč:ņáj—@’´šŦDL8”9 Œ(Fú(X•4AĨ>o°ŠA Ĩ8D|ēBQÁDO"čá4ĮĘ戟.™ĮXˆA0U"lŽâHp•Ē9ņHÄB'‹Jž< ¨ ˜*A9ßd|Ž… íV_×ø`Šø‹ĄčBPŌ,B+rí$oĩCGéÆÂN!;5FˆBI&DrtžĮ’ ŽĘ˙°1‘Ņ)Ņ „ō7 p‰ÁpX呎w rCĶ đĄ‚.¨Dqˆ">ÄĄÆ42t’¤ĸK¯˙¤NЈ(TXéPQĒ( A‹.â&‚#ÅĐE GŅôBPĄU eXëE :H)[EIû÷ŖąE8á)´} B˜ŠHr‡JK é0@”- HÂËĄ0„æ“&VH":„GGĩG_eu$)LF"q:, AyĮ 8æqC㈄ˆ…Ads@Æ5)Ëi­"uōl6—úD" ãŌHŽĒ‹¤ĸ"¤‡qŒĄĐ$ļq 9 Df,ĄÂS ‘q„ BexĖ–YŅ?™ÎÃ")Ã" áfUÅa#ˆŠBfåØAây$‡ \p‹ †GÁ6h)č"‰Š pA"œ ĸL˜åįā˙‘\Ķ3ĪŗĻÛÚ8û}ÎĖf¯˛ēÖvZ™sēsDuH ‚HA aD…§(q.B"ˆúAŠ .˛|iApĄâŅ ŸĮw˙Bĸ°áđ•‡õčŽQŸJv.„2(ô,Ngˆ°‚(t“(tGˆä"7†‚Ž^ča›B]BAP‰tGČC„Xˆ"‡!‘ŅšL BqGoũj’%‹čÍV˙‘dŋãGb~‹J(Ū\ÎĒ"ŲDF^#Ĩ•ˆ*°´‹ §–)‘Ņ|O$&$”c#ĸä„ ˛‡)KõõŠU˙˙õUĶc@Ŗhē  Dt‘#Ž[Ö%h‚—H$"‚D8‰´'>@¸Q˒ ˛ļ9­˙:z_ę×ūĢåu„]hī\@¨'1ÂA0A!ƒ„ŗ’Ä †“8å[‘ų[Ĩ*ĒS•PE҃"ī__ü×üŽ é†"XâÉí•x›§PųŽCĻw"ŽHqa#\M›A""č΅Böv­”3ˆúûzūGDžŋūĢ´‰–šG ">ƒAôK„ē…(p‚‡ ‚ŗ†ˆ"t]¤â3Dxa6GN!Ė!˙˙ŖæpÕ}õœ|§ę'eŠ”9 ƒŽ:S‚#„# ‘´ŖH'LŒpHE „‚Bh‡IbGAåm“ Õč†ō]“é™ GŅėčd7_×B¤ō]‘VzÎ%Îķ †gBÎD/‘­~ŲXU”P,BEb.œBĄõ0ųĮ‚)К%BŌeĐX‘Ņ„c$#˛Ü×˙*`Aãæ`# ‹įŒ hrː@‹Äš(0aŸ0A‚a‚__×ô‘ “gˆŲŧžeYĸA0˙ ‚-ÃF‡Ū -/Ą‚ Íh¨DpÔLæ„ĘAVVĘLÁwacœpB’:9„GķhItqe:!6†( ‡MĨÍĄ°š ƒaôh&ÃŖŌŖĐA°ĶA “aåІM¤úōįá–xFŖ[ ¤ôwn`E øū'ļ‚ ¤ŪÂd&˙üŽĩˆ˛e&0ø@‚!. !ˆ„˜!}Q}mA ‘„8‘ĐA2ĻTYC˜sĸ'ŅBėŽŒŅ*_wĒaē)û¤Ûƒ{Ä ÚûP¯tŊ Ũ:Wú\JpÍ=*ˆA´›zJ[â›w •ũ7é'ÂÂMú^Ũ&™CˆA 0ƒąÆļŌĄPę"'št&„MÅЉt:Tâ!9¸NũĄ $| „wŋIqęëuĢ֕÷ˇ¯6ē˜'­'Ûņ§ūŋ̎ĨŌöŌëé#R;PŦDc ‡‹á ĩ'Pˆé4Î[¤‚ Ą„%"E8FŅtaB>„hD=zīÕéũ/˙}Û×÷˙÷úéŋÂ5ĩū˙zŋÕ˙_Kú×Õ!;Š&'R C eĨ9‡)č]ˆ›B"ˆŠD „G!.‹Ē y Ø4]ŖÛ).ũ5īũn?útÕĐ֖—ÖžÛ¤•?˙Ō˙˙WV¯ĨŽŊ}ü,AˆD|(öCåŽ[‚#åŌ¤%ōųAJ V‰J#Ŗ‰ @ąISx ČíÂS‹Ûëę÷ø:ÖīÅũŋŌĮbŠ~ĩžūŋ˙üWakö–ŋBD!¸Dč‚9‚anÄz„‚CËīâĸ'B6.•‚Âõú˙"ˈ;ø?õ UĄk˙]Šß˙ę˙ūš˙‚XĮ˙ĨîWT]RRœãƒA*$ņ„A‚ą4‚3ÁådtGGc‚Qō˙°âŊ‡ūŽî‚0˙ë˙_Ļ×˙ß_ū?ė"Į÷֗ū"4_Æ˜ĢˆÄ šāŨŅxHCÄĪV|?QâN2‰Ņ„ŦŽ-F#„ˆd0‚#’hC/Ĩ‚‚7‘õwB‚hæ]BGEŅŅ0eĖšÄ6áöÚ\—EБ×éŠA°EÆÅ]ÁáŠé„ÕŪÅ=ތĐ"­oėRZOIĢĮl4ĐiąĻÅ]Đb˜§ Zģũ¤"(!/ H’: ‚=—Fa–aˆg%­DRQ!Ą‚†̊C‹4h1ė¤ÁS†PAx—D~qb"" Áˆ0œD0B ÂXG†2†‡øƒ­„š †a ˆ‹A‚ !Ą‰#ĸ!A„ī<ē%ЈČk)ˆ†ÉŽ%qC–8ŦhpŖp65˜p˜‰Céq&ômÉ×Ä\G žū-"(ŋb":dØÆ Sĸ>c!č °aåCĄ0ŗČžm3áĮG# „(b#ĸčÚÄfEV!("ŸHDDbGLũ.“ûÄpÚŠĸ:*$ ÆPëÂA&ōéGVPâČ菄")qH$!ŽMPâ$Į/ũCí-/ÔŽh‹Ŧ"ž"9}•itœDDPFЉėĀ â!#AáÆ9üâ+@š,DZ‘ōëézW˙ũ$!:)¨Aļ ŅåŽPč!!ņ”9Į0åŽ{!$9!ā•0GōčPJjÁbA¤sŽPåKÆq"šC ãŽTūē‡QéZ퉚4EŅ„#˜ŌŒ*˛‡d"H†Ą‚Åá0‚,'&WŅC.‚ ŌA‡ "aF8“ã™Ī`Ō^Pąz˙ ØKÔō;Oš":1.‰n’¤ĄŦ Ŗ)ĐHN!EhŅ(âBŽ“#Œ$4‚ n˛:ˆčÚŦ‘e9OČ+ņ×Zņ Bô¤+Ä%ŅN+°ZGB=ˆ›XÄDDWu,ĄĘČĻĘy… …â'‘đĶûÕ׏b‚#a$ŦƒŒLĐH… AAƒ)‘ÁƒÅBYQõ!¨9N‡ã)”LĒŋHŽ„æGįp’.ē#ÚY,ÅGEПGŅtcˆ ˛(į Á÷!C6ÂjŒat<âũ91H)bûAu –áĘúHl““Q„!HÜ"#b"r.° Ž9cwBHL"ęÜm% Ņ,~Ē2ÉáĶ"Pš„ ‰2øƒ!yû•ÕQŲRÂ]ĒLL(FPˆŽƒAF.Æ—C!š= Į ‘ĀN‚@ˆø „N&AĮ „ÖŠÄ"‡˙Ŗ˜jA•ÕPié¨G@Č?b¤t# , …„Ō‘ÅЈËä3ōK`¨‚:";T‚GA žJMŧKĄĐ„]qÂ#ŽdĪ#!rû¤Ķō#ĄÔÂĻŽ7#­ƒŖoĘæ3ĩlË?ĸ:/ „žSĸęÔDRA"$t¤|菭!4B't‚dAő ˆœsM …HÂ.’a ÄāÂÄ}e,6 ĢũŌ°ķ C†GG¨110lta] ü”™ßA„ŽúhTŽ’<ą5~O„$œ—B'B&¤"&Š[…v5"ˇÃ#Ąk.bD)゘\““xtnŠN­ í A樝H?ptxa†ŸjHÎÉåŌô,Ž=Ēޤāˆ: ąA"Ÿ菩#5á%đ‚°Ė9Cĸ=dp l球„Mhē°kQŖĘ8đœ;„˙[Wū´­¯ūúĒNL“ęWTIU$Nâ‘ ÉĘĀEŌ„w@ƂA 8A„ÄÍQ„AĸčHčéÁq!áDt š# #°EĐ$ ĢūļúrdŋÖŌ˙_#Ēŋü¯ŦâI×ë„T-‘đsxŸB6’GŅBņÍI!K‚Q˛9ŖX”ô#‚æ)Â#ĄĘ#ɔä(åØiG­õú†×ßÃŦzûŋ˙Ō}­ļ% $œ—H!ČÚ.†ĄŅ8IĢ„”ē7ˆ@¯„@Í3C4rC‰NPõ/  _#äē1Š Č`‚ÁđG!˙ë˙õØWôģ{]ëũG˙ú Đ›ÄMáA"Ņđ!$0ˆĩ°ŖB‘: t}AT!Ä4ą’AA CČŌâŌņĮv‚ ‰t{ūũ6ŋȕũ ˙¯Cß˙×}t„E"] Ą ä–PEAģŽČėū$4AåЈBä]‘Đ‘€°„‚0ˆčÂ3bTKĄÛ@Ŗ´ˆčކ§_Žē÷_l_ëûŋé:× Žˇ–#hDL"ČčÚBJˆ á"Xų5/¸‰ŧ ‡IL*.•ĨĐ2ƒqÕ(ˆĨ,R’™ !ĮĮq˙ũwĢ#¯ē Mø}_TŠŌØI‹Ą —Í2„NąĻąĘ(…,tĻøAĪ+ŌåŽPƒ‘°ĖhAEŅJ9|Žˆ4&#މt „Älē1˙üâ:˛„rÄĄ”ųķ0‘ á´'2đåČÃ'ˆ`¤‹°Čkáƒá7Y*yĄ•$Đd6kÔI §GĖ" ÃhOÉŲv‰ČēE™8&Sē ÖGB]‰ÕBA1…$=b2čē.a^„ „Í$" Š}* A”åœsˑ # ˆųŒõ ‡.‹¨ØDt4žĮņ.\qÁ"đ&ƒI10ƒö5°ƒG€đƒGƁ8˙Ô^Ãū4¸~đƒx ˆöÖņ›F°ÁđBø"ņæƒÂ^ #CĶ{OąO „ ˜">Ž‚ÄCEŅCŒR™ô#莌ĐŌ„Pá6"!ˆ‰1Å-ō<Á"M"#Ar%Ą(t„[,!œ_ŖÃAÄxé8tqøpf>U´åVŌcīÍj”?z~Ã,ôgiá:m ÂIÁ–rĐmސl:pƒƒ1ōĄ¤ÃŽ='VÃŖÛá%$"'A8GņĄsA‡ ˆÎ":ŗŨDUa B"č[)ŌĘt˛cÂ*%ō:/üSkqMá+zëØnmŌûI×Čë3 ßŦø K†×Q ´­'MÃũģI;ŖŌŊzŋ¤é;uī|W¨ŲÄF!ņOÎ9ÂDã“ąÖ’Ћ‚ŒĢcbĻhƒBu‹ƒnŲD|Ũ’Ą -‘Đ,ãŽőÔzéú}uęõĶ˙ņĩČé˙Cá‘Ķ]:˙Ōk}k\~üm÷ëģ{t'EdttB!ލlŽ0ˆAÂqH ‚ŽPåDhˆD~—ÄD2C$!:Q: ‰>)Û/*ŲŋZŋëqM_Õ¯īī÷\CūûގŨo˙ßę¸ßWĻŋ­/{wëōēR;ĪŦÚIÄB •PQ’’2cˆˆAņ.‹įDy$*9t§Ih‹ƒ8ˆÂL ëŽÄ?ëJû˙Į˙Æĩûûˇúû~˙Ōv­ē¯ĩn…Ōēū‡ŋ莧ˆĒG‘Аh`ĖŌGB †„ˆ8Q„ĐåŅN„ĪĢAS+Î4T2¤Ŗ'Čų´§+ž‚I‚Äēa×ûúķ@ŋÃ˙ŧVŗc÷ęäŸíÔõ¯âž?˙šũ‡ÖžÁŠųąöWĶÄKĨ‚T”Î5 ˆŖ„ÄI)ĸŌ#騚#čDAŖĄŠČęŌ ‚‹Ž!ÜOĄ.§ü~āÂBęôŋ_fųu_ūæžÚ؟ßĨųĸ˙M´Bvg!„GIgö4$6Pér ĮƒA‘G8ú@ÄÂLB´ląÁ"'š—EĐB).„Q ‘8ā‚8ä‡-Ąá,lޟ@ЏĐK#ķ‹]m/NöÂK}˜Kļ] ŋļ°ÂH­„pØa$×Úéļ“kĒúkęÚ[{iwÚûa%´´?ņĄ<‰Đ¨Œ$‚ ‘øˆÁB!"âPėŽ“Dp”ܧZB(pB9­I†ĐˆŅ!ōœDlI0æp˜@˜Ņ´#ô#đD?†›0›†Â°ÂH $ƘA°aP6%=°Œ8}‰žÄ$á„Ŗ‡lB0œ%Ø ša´›G;Ïl#¸ ƒb˜a ļ°Ąi1 Âla†ŦJtaŅ\Ĩ2¤jRƒÔWŌ¨Gt„+ A¤pdqąL§vˆø‰ä"ô˛ ĮĮb3hrčDū"ĘOôøbŋbxąNH6ļļAˆOÃ# „HâĄæ0Š˜dt"‡a;R:#ĢËą í^Å1[šj) ØĢbx†!C‚.6ŧ0šV!0šf&ŧDÂ"¨í:†ˆë0ÔdG!ŖVBLr;6aķHs¸&D8Š0ˆčKĨčŒJ.„˜âg)ķŊœpˆáčŽjĸS2<ž"""āÁˆˆˆˆˆA‘ŌČé Žˆč!Îæa%ˆˆ`„!„80˜BÂCC"""""""=ˆˆ“ĄR>!ĐEÔą×!ĸC‹#„ƒeˆAe:C.§sÄDLŅėÍ Re .8­‘cšOŠtŲtĐņâ#ˆˆˆôWTJB9„… „Tã‰!Å!dpĖ0GĄ ‚ätD1ĄDÚBD| ļ$‡ōĮ$â˜A8…đ†Påˆč˙^WBe4tUDčDP×"PŪ$AčIŽE˛oAÁxØ(‰‡BsœųC…XČhq(xA &āÂ40ãÅ}~e^ēŠÚĘ>‚A)fņ7¤ĨŅ9#=F"G"Ũ"qÄ~‚Dc‹Bqˆ{*ĘĮ@ cā9C¤H{D~/v߄ŋOėŽ( ­’ĄHN!6‹¤úAh3hžŽ8 J.Xā‹čƒ@āˆâ—Ō†Ō0á’MÄã˛>GJ+i%ÄTc p˜cCœL̆‡Ōū–÷¤v „Í ČčB Lb!ˆ¤¤Į&äAÄDaø§‹Aˆč—LkÂ#ŽEÃĨJ†´ĸ%ŅBECAqīŌčPB" .B0†";¤ƒË†\ ¤G@ŠsšĮ$đ„$"gBm%"xCáb˜ížDt"! œ[ûåqD:0á tĨĐQEXQ„S H!ČŖ¤Ÿ‰u;ä‡:HÆcÎ"čTŽ„ēD3ŽâPáė"ų„_×!ŗČú3DtEŅBúøé¤CB]BDBq(ÂYC–8­$%ųc¤k$:P”5Žg(qaEЈ¤ĻĘįLˇ œ}-‘ÉÜlDÂvS„%Đ˙¯hN ’EŌG4 F! Ї˜t‡(|BRLcĘ$GX ‹S.>5.EÔąÆ–t(4!i'ņ<Œ!w˙â$čím B–ff0@”ÎSĖ$y!ID|]\R3ŖÛT${(Dt’L˜äÅø$&aˁD}$Pä6CãŽP„ÍÁ$tͤC8ē˙×JĮö\­TiĐH5—L(AâHꨑ„‚(pBÂģš!ĻCŦ C*à •č"‡‡C˛;ˆ„GD|„T傈ˆƒ!ĮG ĸ;HēH¨bé$|PAn?˙˙×ū.ŌÄŪX‚+$9ņœEá0Ž%CŒ&a\/„PâT ":Š#ø´]@’ˆÎ:…›‰(,qÄA…amH/Wˆ‚aâ$b#Ą*|]„ÂĘŊû×ßũ/üŽ(„HHIMJ„L$ˤPb‹×„ĒÅKäŒ"‡„‚ˆbČã ØY(¤G’ BA"HqC‰!ÅÂ,FN!ϊ BB!+˙˙ū’˙ŲCX•Ž…(AņGĐėŋ„ 0„æ\Œh ° B0Ũ›ÂŖeŅt"#UXƒ&áHQÄDã˛?˃jI4")žG’D}ũČ Į x29O×KūŦDŪ$f"P‚BTX”á1 ,$.¨Xé$‘$ŌGHøÂ¤é!ĄÎ8DuBËq$8‘G¤U¤15ŖčLōYėp\ÔLdˆé흧~n*ė—‰C(šÃ=„Ãhī$™K×Îķ HÉ;(ˆÄgDģĖŲÔüHšĖ͉tĸ’čđ¨* )t§h8`ž%ĄÂ":!st,b]БĐH!)ČŖ”8’‚8ČčŽdt_.A rŸ´\1œXAŲŗ6Á‚#ÅĐA‘đƒ=š0aa3æ"ōaGŒfČŲŧDréŪ˛LĖ@Ī™Â<ͰA“™ķ6Ī ™¸"Å"0 l‚|Î!p2čáđœ0ƒa#ž"8ÂĘāˆMâ&ФąBCˆ…zÂ<ˆų!§F8üb%¨HšĻV +.‰!ī$U ‚ĐPEúŖXŨ4|h t|F°ŅđĄá–xL#[‰Vm&4m āÚMĐáŪéŖ[o´>0ļiŖÛÂēGļú=žéÆč×FļT|¤ đŅŗårŒRRB$ˆa";¨A;ččh(ZA1SíB(tjGģ'A ‚đA5AQp0âqĊ9Į‰äCB8˛Ŧ-$~qRNčĄé6žé:NÔJēL:wI–=XŨĐNoށāÚëyXŌmÁÃŖÛ iÃފēM‡Gļ ÂPŠ6A„l88eÍ8tîŽ;Ũ_WJûŦ:H–"Ŧ Ŗ0Ī ˜ˆa Ä‚C!ę1lú#¤ÄÍ Ä\B R‡Ąœ˜ūg)ȏ ĩoõë­īŊZũ7]_¸¤ūˇ××ûŌˇâŊ4ēcu¸¯õŋßß}-o¯~˙ߥCB"msšC‰zM8H"‡AGAag4‚ „a “j ä)Bö„GÂYÄÎg*4…ŒãœsC”8Aâ,§Ž‚ŋÕĻ)˙_ũÕ÷Ō˙˙~˙˙ũéŌZž›Iéũ4ēJ˙ßßãk˙ˇJüŽPˆú §pˆä„îS–8”;ĐA8C X…¨bĘ&’Ä †I(Ž †%YŪĒ!ЎIĘDˆ9CŒėVaÂ#č"ëũ¨ĨØīžũi_˙¤Ũ ÖŋÕŊuëûīĶī˙ût›ĄˇĮŋPˆ“¤´AĸV‹§‚ ĸ‡Å— ėøĄÁpDŒž]5G“GtĄ!!šaŅJž•ėNW Œ8QC„‰ ō>ĄÂ# ‚Ŋ{pÅm˙˙_ūáõ˙öĩũZ˙ħĨëˇõ˙ GáĢø´D$ÄŅ R&ČüAô[Ĩô Hé ‚Šha),=°‚Ét"ˆáVöG‡.…^dĮ+˛ âHtVPŠÂÄDN/ŽĶ‘Đ‹:×ũ­˙؁X31x‹áWõã˙˙ôŨíŌ˙˛4kĩØ0]‘ø™˛ø›Å1čazŒ¨P…”:ސ _Ĩ ˜ˆIKĨ ¤…GZ‚a Ou(uLã”⃠ƒå9dĢ!5cõž)†q˙ņ÷ˇUõä, x2ZĢ˙˙ô/øëéã˙ũ‡ü{ °˙˛Ū‰Ą#ĢáÅ‘G @‚øHT+¨c X‚(pˆč× ‚B!$„"i˜Å‰ÎˆøAŽ ¯û&8üLŌēûü´íšzå˜û¯üÃiú˙˙ö]_—ĀŋîLrą6ŋøoųuC„N8oú+š"莆 ō4B}EFŌy0Â(xAÄÚPāˆč ˆé!LPÁi’21 ä'>˨)(aČá*žŦ)‡(v‹R @•D"f‰õ0‚CūēÉ˙õ×i~žÕ=˙˙_ãūŨõ¯āßõƒhßųÕP†t""B!î‘cŽ,)}lB⒠ĸų'é'ņŖˆ UIZŽšy7ˆ"Ž(Ąũ a›Â $9CĨQÂEč ‡7˙ZΨ˙ũüBŋŦä2†¸ūŋ˙ũ˙ë˙˙õ°oūŠ6žqßėŽ6†ĄËĄ#éBD3ŽaÂ#ƒĒŅŽ(Ĩ Ŗ.eŅ„8‹)ÂZŒ$ ‘ņ¤k¨ E:0‚Œ(Ä*ÄĒ#čÂÄBû˙6›v×<ŋ×F˙gMÖQ¨FAg= L—]9ÉĐŋ"ņ ūA~ ˙ē˙˙īũŊĩčō.ŸŋíŌû}|D&B'‘Ų51Ė:¤BŽ’!I+I @„Ąę6ĒOˆ‡I+„‡hh. BH4Đ#ŽHx„„B ūŨŊŋ˙íõĨúš:÷„t]~Âh†Ąč0ƒ" #Ąš€đQûŽŋ˙ŋį–ÛÅu÷ßēļNŋÔēīn´ˆčް ‚Bq2‡&îE$'–ĶÄL"č „ŋė ôq ŅD1š!¤„YÅŅėqļQÂc B…#ĄS-įbHN#ÆÛ_4WŨYš~˙ŗ5˙Žžˇôy˛‡ÂMl§FÍžŠŖfŅÎ˙ú˙lÍ6hŋlŅ˜ģŗEŊ6ŋ~ßkŨk˙Žâ&t!,ßi#B"qŌ!sžėaŨCjSĄH`ÄB8¤" Fh ‡ËĄA ĸ!™Üĸ# ŧÚc(îŽ>Û i*ēÚëĻÚ§K"“jÜãØh+K¤Û†ƒ ÃŖ{PÚN Äš´na&áČčÍ_íöŋjÚ˙„žŌ]Ũ'ĩŅĮÚßéļ—khiÚM׎aD…*CĐA‰Į¤]EõQ0‚Qē8• EƒBtGA )<ē0”D „Vx0ė…¨‰-D5âfƒũ´Ŧ Ø4­(i0a&ŅÜ6(&›a("ōI˛G Ž˙ú؄ĩoj)éĩqa ÂiēNŽáĻ› $ØI4Âl5´Û „Ķa… ÚVˇ¤l#Ø`DOa&%=8jØKĸ¸Ú(BĨđ¤čŅ„B"\ "ĮBŖNcØAEÁB #Ą!ŖZQÂö% ¨A ty ÄĄĶ)Ôcˆ™ĄŽqlWaˆR­2 Pb˜­ĢÃLVÃbļļ¨ēžë´[ŋÚmnƒūĶbi„ÃÅ'xbAĻÅ: lBv)ˆVÔqėSą\ĢM5Ęą ˆ]ˆš‘~ĸFŌ’čÍâ>”8"> 9CŠZ1tžA:#éŖAF8¤"f ’—BGGŗë… edēÖ*Kˆ˙ĮՇëUß}ĒÕĩ_ˆƒ0„D0ƒ",!ÂhD0¨0AĄ !A„""""">—† ģčōEDDĄėiCC „AlU“ĸ"A$&Øâ]b">Š ”AA÷…n AWøF;ūĒŪõ¤ēé};ŋÄDDDqėŽĒˆęÄsČ%‹+bp| …Ŗ„Ė:‚ëŠ!Å4#B&hXB9B"¹ГD!#'ūīëî˙ûęŸõŌUŠH)„v„"D †-e$Ÿ3 AĪĄ"¨DT†Œ"u—J>‰IšœE ˙úęūĒû˙ŨēōÜV÷+­Ĩéô%F&œN9NaI"莃—Ķač!ŗh‚!ÄHčž!"ÂYؒˆ˙˙ũēZūĩë^Åßiz ÄR+B%¸Q ŠpŖĢY<,#LD’"š¯ĄĻ#Ũ!ŗ$#Įm+ūŽģ÷Žũû°ÕuũBC B’$=„xĒ„Ũę"sHÄD&ƒAԏeЉŒŅõđÉ‚ūĩīáWūāŨú] BttEŅs L˜â"Lr(â;ˆeĐ"œã„ĄʛLŽ‚xåЉ0‚)ÔQ3B‚ĸ:,$ʧ(_Ë{ˇõŋęø.˙ė=qZ Žf‚ Q"HAŲx(¨Ōˆá:„ƒ„UįŅˆ’!ˆˆ‰Øé!8ĩ{ß ¯ü?ŽĐ‹(4"Uâ‡$â „GA1ĸ:.„D>2Ą „DMt'`Qãh}Ũ-UŌGžõøoũ•ÖPŠ„ ‚)Ė9C–8¤ HFy BU|Ą F3;öŌ[˙m ‚õŋŲ5ūĸ% „! ã¸„’˛‡ĸŨ!ŖÚDčŸ¤‰õgcâ'‘…°g,8Šد˙ŠA?ūĸwôWBD A2”…,ĸúT‚cDc„Q?aČøI%č§DI ˆŒB'В1(Ä Ž7Đ[×ô–˙îęŋŒ"čÍ„ERDĮ  YN’H)ÅąB‚HBDN!3Y´wDfŦ§EÕЛFŅ„˙Ŗ!;ĸp#jžŖhë×Ķš'yn|ŽŒŧÎ.ËxFņ„yNGDĪÃt$s°ÅBãšŅô6‚PGļ—EĐâãōTÂ~lbˇčE/õķ8mī™HY-0Úô)$DЈĮ(q…BöfņÄŅŖĘ´Gņ;H!;:†4.!1ūĢČęûŽŋŋļ_¨w büŽĒœDĪ+(Ú !–:¤F<"‡‘Ő ¨TDŠĄŠÄN‹q!ĸ:"ëú¯ˇuU‡šoŋēūĢŨĐNv:í”Ŧę ¯‰™Ē Ž*w*ņ„&‰qŲ:IĐAš×ɍë;Eä0_ˇōKë~×˙|‰,•*iz¤4%ŅĖDÍAB#ƒqQ :BqË× ĐHŽ‹Âg¨‰t_ŗhDLĐ˙˙ĘpöŋƒoK˙[˙ú˙ Ž”Bf‡UBHrv"S„!  )¨†sP9!A(!u#ĸt@ҝü`õßûÖŋ˙īô/ ˆčâ.‚D CŖŽqī0åŽ,:˛‡ §:HDD$ŒH„ŖĮ×^{˙zjŋaŌŋ§ëĒWô›Â"Kĸø§B‚D3`Ah›•bADR„#ĸ'E:AB"Hė’%Ö%BÎ--WÚ¤ŠöčvŋÖ­¯īÕ×ēChD†‰t4ɎS‚AāEÅÆ‘ĘAZ„—EŌDéD†ˆë8ŽÆĐ‹™Ą9˛ĻR‰ôõ^: nƒ6 § ƒ8l4˜i*_]}zPč!Ō&H ŽÆ"$oAŌ HO ‚’/—I ô"&ŪĒ„âq‚„BqdĄ;2Á#dœ¯!8ŧ5 „9- YvGdbú<$&ŌiĻŽĶ@šŨ†ÂVcä ‰tPÉA’ŒGTyŅd3:=r „čIhÎGČē…˛v^„ĻNË'ĘáhÚˆLƒBP„DRČéT¤Đ!ŒD%{ ’čČKãû´{z hö;ÂaŖCÖ{øMúĶH áĻæ×Š—$XF°ĖĖ ÂĶ30A™Œ!`Žƒ4ôBôÁ‚3†ˆP(F€ė&cíoOąˆB+dĨd!‡8äAČ â\%‚ĮCSڑˆE!.”â!Á™“aŅá¤(ŠÃ-qęØ3i1(x4Âé""sPâ¸aˆˆ†m Ž‚k¤Øu„FƏįpÚwMAŅŦa–Š;´lbT›(v“ƒ2(ņI°čãôŌ#Ą*Ņ:1!"šâ¨Â<ˆ5Ĩ”$Œ•OĎŖīVÅ:Męí=}é_ĩĩ×ÜDDGŪč㴛JÕˇA;Ķē=´´­'viŊtŪžûÚÛĨė,HĒŠpQ!ÄDã₄ˆĒ5 ‚ČúˇĄ\Dâ0‰×­^­oßס×ÜuīÖũâŠo “ÆīņNĢžū÷~—˙֗åu$a #6&VøĄ´ Ž8œp‚dp\Ž‹åúHōąPA„Á ‚čC´IĨ*õ!ũ×˙ņMRûimë]u÷ēZ_u}ukĨizWūŋV˙íĶ]ˆš*:4"’!0ä  Å „j(Ng:Ņ „4C ĸjß%Шˆû×ôžø¯ũ?j÷ĩĐūëūŋ×˙û_šúĩņėŽĒŧ „H†Ķ„Pė#$(áLîHDq.”O%Š„sAhė4ĸ>…%Kũ_÷°~žˇëõŧW]X_í×^×īø¯ēŪÁ˙¯¤"GBY:qŌ]"" ÂČčR>XAZB“BåҚ 9ĩL­™u˙ūÁø/ĢuíV¸/u˙øĄkõ¯† =ƒū:čqM֌  W!!¤8j„Y ceZ.‹â4,žGTĨĐ­˜FNˆōžCŋ˙ũž‚4yvw ¯á´ƒa%„XúŽŋ×ūŋđF~īM˙'_˛ßžDčē ":ŅøBBPįE1 „DMäé!ÄH5ų„^’A1;N<ŽŽ¨ōœU˙˙ƒw„â-Ķ 0‚ 0—'å”Û¯ųz˙ í姃ך]-f BBˆ‹ Ī ä0>!Ët‘ >" X­–¨`‹ĄčDq%Ģ˙˙~ ֗ņZø¨Ž_˙ú˙ģ˙„ŋß˙ū„Ú˛ÔŒ!lˇ‡0ū&á #Ŗ (Z‰ĻqKHÉM3Ėĸņ˙ˇ_ÖTĶúųå„[…× &¯wēö˙˙_Ōö×Éį—˙ M+ƐB)âÄÅFД ‚áŅt"HT"7J"cą¨ösú÷û|÷˙ģBĮÁ—ÁL¸-‚jŋŋņ_ßųÅõį“˙ŋû¯‹K ĘíHg$:ã‘GŽČä•gķÆËŦRP øŽŒ H ‚‚ E^ŋ×}×úŲžš"â?ËŽÍfk˙ũÍš&˙õRûjûf‹ŋ_ŗ?ĐDt[ԅ$-$„„(ˆP“ ‚ëAb'Œč„$˜Po L"ÛöëÛ^û_ ‘ĶtéYuWūžÚÚļ—ĩũ¤ëŽžũ}ĢkŨ7^Ú^Ų]-•…ŒĄŌ­B#†E1bf$…L"<ŠĨ eVD‘'EĐÍjŦ$›¨M7I;IŠ ļŒ8ė+ $ĒûhiēMĢÕúûaXa&ŅĮŨ_aŌaĢa ØXÂh6 õ+ŦĄQ)¨ÂŅ|ŋ*b… ŖB!”čBuįī¯C+Ŧ§‚eLĄÂ#ƒ؊”AP¤Č訤tætBDE‚‰˙Ē˙´W*F†"MQ(ˆG D| ‚.Â@Ą#ĮËĄ<„Ú7šHē.3ˆ“F@X„í.š X˙âqJ‘]•Å9'†7 B1›‚ØB™ŧēČėDÄaà ‰U (ˆAôR(đĪ‚ …FŒfh"S*e[uÔ#Ǥx—HĄÂ„âCŽ"!)āĘt_ž †§Š8Ą0˜9važ[ã^ūĘëh…gbhV„1&8†ā": I*AÔŧ˜ „R6ÔY|"¤Ũ* ! ˙čDPH"tĢ)Ė9C‰ƒ0†1đ Čč¨BXJ1Ą ¤RéZ qQ~qW .q¯â%ĐVThe¸‘¤%Š›īgĸgđ†‚P DŽˆđ¨ČfŒƒw‘3*Yą–æ‡äŨ^´ŌH .ˆú'é-­B ‚Â.‚XLÍ%…i-ēģ˙vߓré!™‡$8‚#čąÂ|Ť!"ę HøÚؤ"m¨ô”šīnäÂ˙ũę|fhĮGF0Ž!q‚Ä%œI Ą!DtŅaQė …†C„kI ÄwĸœE I(Xw}×úwėHEFRč.(": zŽ>‚(pB\ÔĮĄE3čb"菋)s/õ˙Ú˙ī˙+Ĩ!ž„TŽ9N*Pøw0$„ķ1Aņ TTxúUŋ˙ČÁ Ä3ųŧ!ŖČhōÉTo Į]Čių9NPä[˙Öd "‚M¤qˆäz ¨'‡¯ŠĸS;¤PXŠ#Ŗú ą ‹x_ģ¯˙ú4˜L†\˝aa5 `"8a°Aī+–#hÍÆH2Cøbdđ†„ē c%X‘!ÂZA Â4T‚… 3¸-%ĐE:6Z.„Â.ŖŨ˙Ĩ˙Đhâ# ÂƒG&ŒöėŽ“ŖĶCG0Ũ?ĄĄ5šŒ/¤M†!1ˆĐ‘Đ8QGáC#¨A ē ‚:€ą7ƒ”b"!Ē+Ž#û÷˙^m-͙Cí¤Ú!ž  Ú6tl:8ˆéĒÃAĻÛA{‰UY DtB¤˛: BÂA„˨Å!3‚âL!ČũEЕĘķȃ˙_äF¤#ĖGVtˆÄEžPÂ}‰wVŌĻŌ ¤ŋĨiH<Ž„!žDŦī‘ßmü—3Ąø‰™ŦZAaĐA …Ą] @´‡ #įŦē#ČO8VjÆ´”fĩ´Đã˜$|ņ›aG„eÖaEķėa.đƒD9>žŸÜ=\+}´ÔN°Ø_2q“™ļDĖÆqxi„ :h Üö8•Ú ˇÚ>Œc]ÖéŌĩ¯žžénü"í„l č4Â>=Ņ =ۃGļŦ4Ņ 4{4ßŅĮéŖcGΉ=RN:Æ7…ã„\$ˇ#âGVGA#v”I ´ãpH†ˆčž"<~%cWtqØJŌV“Ģn‚m6í[¯­Zík}úޝ†ŌŪ‚ŋ*ØbT4{Ģ{ &ÃØuVö%A6“ÂūßÄĢĢīĻWYU‚ W">L¨3ŅŽÁ‚B-eŽT 0ŠtÁHB#ĒĐA$sĨA@”":9‘ĐŠĮëĢęĢũŌ´Žô“ūĩ{uŊŌ]Ūŋ×ūĒė6éŠģ}“ĩz8ô›Ki_}ūžēoĩ}Ą%(xVGCBĢ@ŠpˆčEq †qÜ!NA˜B1B†&0Eh‹­{¯ĢīŪôû÷}˙˙¯}U{˙ŊĨ÷ôīú]īĨĢk§Ūŋ˙ûøˆ—A ]$ŠAÄÄ^7ĄUČđA !„GK8čæ&ŅA$mRB$t"N§Búū‡ģ´­k˙íkwģjĒ–˙Û¯_˙ū¯Ŋ$žöģ­/}ũ-ĩëöĮ°‚ftėސ‹…D!І_Œ †‹Ø˛ÂFÆĘø•Ņņ˙_ö˙ŨcŌßūļĨíī¯Õ[Öē uūŌéĐ˙öÃĮˆ__˛nMĐ@…R ADÚHhÂ7Lj…Qáņ5§EŽ•yĖģ3‹™ĖūGEŲ#„.Œ#ē.‚GÉŅüâ)ŋûĶX?ĩ°ž ũ׆ūģ_í0{­­DWëĮÕzõ]‡͟˙`˙ąbČæ"‚h:3L‚9‡—F2<§G V„B(xg„a$%Õ#ˆíH3S#ሌ(H'$9‡!%Œ„ /˜Čã#Á˙ã¨Ø}„aõ˙÷áüŖĐžøÃÕßx/ū ūŪĮÁû×đEaô:t„3=2čEF‰’3GhZJë^Fúé/˙úa[WšÕwumu„Ŋ˙A<Đå–oöԘoÛâŋAgSė›ĢIT&4‚F,DōŌL'ąˆĄ¨K—L¤åLĄˆÚįūūāß×é˙WvõgƒG× ē˙t¯á/žęŊ´°lč˙˙ŌĪᾒ Œ ĄÄē !8Šc„‡ŠÂÄJI• ‘đ‚ēËĄŲņČ`|JũųPŊoí/zĪ/ë†˙˙Ãkßõ˙ú÷˙uBŗVæ˙ũ/~„!IĸZZQ˜}Öc§3V’ŒEé įņ;UfķaKÄtGEã4GDt]'AC.Ęœ†(r‡0äAĖø˙ŋÛŨ;Šu˙˙Ĩ ˙ëÛoūîŋũTēÛoū‘Ä;~˙Ú˙Ręūƒ'ō\0ˆøZĄĨA „Bæ¤'4r °„qHDDDDDDDDDDM˙4[f}ũfžhŋõz×ģø2:ŋ¯îŋKs?Rë˙˙ˇ4V–úšĸûŖ÷˙ūĢbq)ŤcQ0† ‡ĐA H(ˆˆA3†RtG‰Đôõm{JŌՆ“ uĐöŌm.ģâ˙ģī‡ÕÛö•¯˙ęģÚūŨ]­­öž›ëÚדqHâˆč b’DbÄ …+V¨žM‰‚!4IR\ ĶA°a †[ā‹É6 64Øaéļą˙|ƒßä0íG]råŽŨWA†ŅĮwiíŖŽ5ļÂV•ØJC†ÂPę×Ô “ĨMħÚ\6„ē[Îh,‘ˆ‘ $& QtGĖD~)u¤a4$u5Ŧ&¸bÄ)PHn„Å1^Å5ą5ũ={ĻũwŋKöÅ1M& ĻqMĐaŠ‚.0ąL0ÅNė‚/a O­5< ë6†Q ’HĐƒŒa3ØAŅ…„¤˜ķ‹ÄDDDDA‚Áˆũ^Ŧ>ēūģëģÖL&„DD0ša(aĐa6B„!ˆB"""""= 0š% A ôÂhPF¤"*SB%Ņüކ=˙ũVŊũ˙ß[Ö""#ˆŠ/؈ę ‚ ‰ „ŒäÄâčEŠ8‚ Dō˙ĩļĩ•ÖĢkk˙đ‚ļÁ‹ˆƒ „ē*‰"'?ŨÁëVęųW|=xm/ũ}E҃=’híIEu•!(B‚X†Ķ/ˆÎ/­ĒMö­¤6–Ŋ­¤´¯˙ĐaƒD æŒsŧ‘ōųx‘ō;#åŅxē0‹ÅŅ.2ų|†‹æŅ.ˆč—dqO‘ÆGGČņ|ē.‹äv]Dų6ˆņĪD|ŧ]ĘtN‹į˛>}Č膉|Ž0A3ŽXåg*Ņtx‹ÅŅ>GČųD|ŽĘ´žGČčâ.‹įV^ČöGĘėB]¤$s'ÍZEâčöhŽ˙AÛiZWVļŠĻƒ´›VŌM5ŨÖHŖˆˆˆˆˆˆˆˆˆˆˆ‰8ˆˆˆˆˆˆˆˆˆˆˆƒˆ‰!ÄDDDB",Ž0Dq&8‰1Î8ˆˆ‰î!„""2>GdpˆƒŽwEōø‘ŌC#áKĸë#ä|)ŒŽŒeŅt]™Ŗˆ‘ķÂDB$3ČLk„ížŌŠ B „‚ aØ%tØH Øl.ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ“DC°„E‘Ú`„j}ģ BŠœÖ¤õ!háŠŧ< aˆXDG˙#ĸ: › k%`ÁPdxÚ GD|  MK(r)ÖW,CČ ä2‡â"$A‚QeÃ#""*¸õ˙ŋ×˙˙`ū5ü/˙˙ō›ĘĄ ä!Īö¤4L a~ĩ…˙>ĢÂø/ūŋ˙˙ũ‡é‚-ũ˙õBuĮáÄßāžą˙ņëöÂ3û˙˙˙˙áŋeëũ÷˙ŋđĐgTČ/D¸4pÃH0Šá>],wáū˙˙˙˙ŋā˙ž¸A˙¯đ ĖPøNh Ũ ū ô˙Nõ]ŋ/ūŸ˙˙˙’Ä˙ũ~}˙õ^ĄÂ?4´ŋéw„ŊÖöõũ/Ō˙ī_üōūŋÛwŋũyåõũÜ6ÛNđÚMĐm~ŋ×˙WuúJú_NŋŊ˙(NÚ]×äéŗ?_õWú˙ęԎžŽ‚ūÕ7õ⊊ųéÍė{kåÖē—_ûj˙˙Į^ŋM&Ōn›”?Ôēoí.Û¯úˇõĒuūŋ]ŋ_ommŋë]ŧõ¯í¯ö—ÚüpÚK +I°ļÂÚØC´“n­[I5˙ęĩގ}čí ÛJŌ[km- Ķž5žSĩm{}ĻÅbĨ‹Á&¸ØĻ)Š´ØėRlPL&Å&}ĶåĶõÕuÖM‰Om+‰OˆzL0’h<"!ÚLJuhîí‘^ƒ ਠlT6!Ķ{øa†!a„ a!‚a4!„"B?õåú˙Žūú Åa…[ŽũŠi Å{L-à šjL(VyņœD#ĻR"ų?‘ŲtG2ƒ6Hķ>˃˜0Px6Dpr9Ų‘ĖŽÍņDDDDGûīôģŪ—ÄDDDD!q`š ˆˆˆˆˆŒDDDDDDDDDDDDDū_]]˙{ãB#Čd†ŗ–äʂ  ¸åar˃š Č+;šĖ9Pl!’ŖlrĮ"9A’š*į}wVũ"×̤ūĩ33@‡˙Ũ$ŸŽeÃCÅĩõ•Äę^ŋ¯_˙H#Œ^ˇ]‡ĻŠwō…ũĶK ëĐ{íu]$—äk5|pũ×TƒŠ[inö( 8ãõ%õ§âŸ[UčØŅ­Î/öcŊŽ­7_Įô´ž/ų[˙ïū“Ļ˙Ûúí¸aŋ˙Ē­Î/Ģ<`˙äu ŨļĢ˙¯å +…˙H„˙^/ §¯ËrL›)#Eęë˙*Ļw žpÎ&A‘ûûxoØchÜÃjJ ŒD™’Ė—Ėž?™!ÆĖá š’ 뙄 ƒfĖė›*šžK‘S"´H0ŸĐí˙}>ÃēíՑĶ֖ :@Ũ¤Ŋ5L'§ļõļčÃíĩŌīßßņÜXpîסˇģGM)bcđöéāÉÍáà r..ŌIÐ4˙˙Ŋ;ĩīũÕWaƐØ0ž@×^fö­ßŦÉĶä§ũŪ’˙÷˙˙ãߏßwK‘Đd6ËÔ°aÚÚŨßl˙úqĮK×ú˙˙úŊėxØAú¸ë\q۟˙×_Į___Ũę?ŨÕõPú†üūũ-+˙˙õíë×ųĸų­˙ũwpmšAûëũ˙¯öūēĨ÷ŋ8‡úŋīũ(;ũië_T’K˙× ŋ˙~’^JŌūAŋĸ­äį’ƒ%g˙Ü<Žší>˙_TŠDY%‘Tkˆ˙š0d2'Dģ æŅБ4BäÜt2(øÍlÎã6ĖȊdtffæcĖ2ƒ:ËŖ† BT›Āé/°I´žB ĀĖ0A#ĮŒÁd¸Ė Ā˗„ŅŨæČĀ͍#ĮŒÁhëę¤ũW_„BôÃ>FĖÁįLD< —@ƒ>3cķ7RA.f3c„¤pŋŅ⟚‹dvB ųF†Ÿ„F€đm?Ŋ4gqhsa‚.h“Đí0ņ SÔ4A…hīAÃŖđĐaö‚ áÃA„A°úM˙ĨôŪÛRQ×|&ú{ˇBbÂ5ē¤{ ˆŖØ´lnķß ˙ĒNpĶHųYčôƒ`Ë,âwi9i6:„n‚#MÄöĐAŅņāáÁ–tŪA¯ `ŋõÚMą ÷č?Ii^û¤ŪŠzŋYW xzÕtéxf@•l8t{|pfN&pŌNqÚN•´ÂIá‘ÅũĶļ˜I=D ßtôéCĢo÷bPũˇõzot›ŊëovŧGîũ:Ũ7ī˙Ŋ?ē]ē÷}ßÔ5×IôžŸc~ī_JÛ¤ģÛŊoŋũūũúĶū'ũ˙Ũ/W[­][˙Kú˙÷Uié×ŪëŌ\S×Õé?é|:ĢJū¯…ëûĢoĨqOũūōņ˙ûîõ˙}_ūŊôũûŋ˙˙é}¯ũĩ˙ëw×Ŋ/ũŋņxP—KkxJęęžŋŪ—Ø¯×í[^ß}˙ą ]ö?ĩĩúû[õâžØĩÕļ+×˙Ŋũũn˙ũÕ|Wö’}ˇ@ČįĻ×ĸ‡Wī˙Ĩė?mWÆÄ~Ŧv˙î UՇÖ:˙ø¯ũ+ŧ:ŋūû_ūę] ũŅĮ˙ü~ŨGAtš`Aēv0i°’˙˙_ƒĢ˙ĻG_VF/oü†ļ Ļđ_øđ_ū/`Á}‘˙Ąī˙(NßĢ]{Ũu˙˙¯‚-ü a O4H1AˆJÄ/˙ņ~ÁûuÃn˜}˙û #>ՇøF×ā‹ßÖÃˇû˙ë˙ãô˙˯ūÚ˙ōë˙.¸A}Ö0Š2ø Á4Đkëõɏđßë.ģa ;˙ú „øođ‚˙å‚Ō­e–Á°‚ü7˙ōëÚ_ũnŊũuë˙ūëĐ_(â""!‚ ×6@Ā˙ũ>¯Ã˙^ „j_úŲi~ ū˙ũ¯˙ƒ ŋ˙˙ūŨk˙í×˙˙ēúüF„_ôūLWļž ĨŊī˙ō­Â]¤g†˙¯<ŗËũĩ7†×ÔÆ ßzá?ë˙˙ņąõļ¯ņO×õį—ī÷į‘Fß^ųŲŽõęhŸ˙ÖŋŪˇĪ.Öī×ßIK¯¯~Ũ.˙ëūČīū˙Ųĸ˙Ž˙lŅ{Ųĸ×.ž¯˙ˇ˙ŋûĒ—QÛ×˙œW—Qßųu¯ßf‹˙íVĖũũKޝÖë4÷˙×í¯î˙ë¯îžę˙ŋ}íĶ؟’;˙jûKũBŽĩWēu_U~˙moU÷öÖíu[î.÷VŌë˙ĩ{k÷ZǎÚJÜ|;ßŋ_ŊŌē×mU;ŨW´•%]5í?Cīĩũ ĩl%ĻØI[C´ė#îŌXiZ•ė4•´qô› ›ųP?⚠ˆA0ƒŌa4Ų†ÅnÆ6G>)4ÂziØMŽŌm&˜i'ÚV‡Z‚ƒA„!ôÂ#É1)ÕXJ)bSب šlP"ħ„ÂąP 1IĄLJ|qb˜¤ØĢcbƒ%˙ĩŊˇé÷Úh5^ÂÚ¯ÚM;4ĶAŨAAŠAđEÆÄ&žTPēÚjéŠi§žŠØTĶ[A ĶL ĶM0š -•iĻÔđšÚ`š 0ŋh?ÄDDDDDDDDDDGđЈˆˆˆhA„B!q &˜XˆˆˆŽ"#ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ}_úÄDEÄGëũ˙°ūĩ-u˙×­#°rå-ŌkûĮ×ĨéVŌ˙ŋát›z¯ķëœ_õĨÆÅ~Žf˙øąJÂaˆ@ˆīŽÖ8ę‚ ˙Ŋū¤˙ׯ[˙ōãķˆÍ˙N—Į!h"išgv[įbņTˆčėɝ•ÄldÍŲPgy™Īæas+ ™3ēˆĘ÷˙Ϛvnä &@ŧhG2%ōL6 ÜA”YŲd˜Aĸā;JĶKÛđß˙˙M=4cęƒûá‘ÁO´wv=ƒŖÅÛØ}$¤ė¸ŋģ˙˙Ú}Ōw Čë†GPëØB_wõT›++Tǟō ģ‘uø˙qa;ĨŪ„>ũ÷zŽž˛֓}>Õ*[î:˙˙ĖÖ/I?ĩ÷߸Ž>?ēM÷¨õ[oī¯˙Įũũá}ãūŖûųŨy;$">uîūē˙ũŋék¯˙i˙ũúßųŲ8„31§uūŋ˙˙Ō§÷˛:O†Χū—ĻõÔ4|ÃÂ{{}%­uųKČ֒Xr7Š(ū#¨ũõ˙"ęA#ęĒõékÍįVg’DI•$h92vF#T@ŒYaéļ—ČA›ŗ2ųķĄ›uJ336 ž d ž€Ī‘ƒ˙˙sÄNĪæāD&å™äī"؃5äæhFĸ4<Ą”#’"ų¯›3 ņ”0Â˙ō63†m„BÁ;'dČ ˙žšpƒ ĸ,Fc00ƒ%Å0FČ"ČPá| aˆO—$!Äø mĨĘõŖØôk Đb:5ˇMĮŽƒĻm×ŋ¯ÄvÔš^Â^ÁQŨž0ƒĐၜ0„ŧ „hĐ˙Đi„kz #côž{m0ƒûņMà 4-Fļšî8ŖXŅ­éŖ[FƏ˜†l2eĻ+ŽÂ  áŌw÷ŌˇG“ƒ.m')ß]ū´ØpÜĄį áېc‚ ‡”=&ŌpķXŌmŅĄ†XŌ š^•mŪÜJˇˇÄđǔđĖxt{|ˇ˙8˙‰VŌvƒM0Xwz&íĶĢĢÉ]&Úņļ×ŋVÆÚ¤ÛĨīÅ:Mé.Ŋ|k{I_¤ũbĄ¤´w 1A0ƒŠba‚AšlJ„š ‰Q}6*Đm&V ! Ü ov­{NĶÎ⚠VĢV)„Ôđ+°Å5¸˙ÄD4!„"áˆBB!„Đˆ0C×]Ũ_û°šŨÜ0œ1 ö!l"AaŽšzh0 Å‹ Ą % &Z3B6Ī"āœA‚P‚Âa ‚ ˆ0˜Ma†aĮq˙~ē˙øˆˆˆˆˆˆˆˆŽ""‹ö"â"""""#¯ËŽžú˙ëëÂ>îņũ˙˙õŪŗ%šŽč˙œXé¯ß_Ĩūš­˙ūû¯˙û­-Wųu ģūĒūũ%ÍŠ˙Ž=WŨÕ'ø„ Bi¯˙۟U˙ū"_.žē{áÚ÷Ž?˙˙é¯˙ãû­}ß×üâū–ŪL ˙ũĩÕ?};ųd9ɞt"RDĘLĨ—T“ŧS ¤ŋ*ĖīA‘Ŧ’ Ú;ŦŖ°S*§•ÁL‚†ÂåÔDmëôÃˇļũ‚*Aa;H lmČ@čˇ B-Å÷ˇ#¸;ßō…Û†Ã8ę›ĢÜ80A h áÃíBeÜ>Fz;šū;XmĸĩäŸÔ0¤vãŖS&q&(y´ĄûģI:AÎÅ=û­˙ß˙×˙Ä0B""""AāDDEĶĨ˙õū¸˙ū˙˙ˆŋõŌ˙ß˙߯o¯ũ¤˙˙×˙ŽŊųCŊ_˙ÛW_ëß˙ūPŋu×˙˙^Ÿ˙¯õ×øå$jЎíšŌ ÍŖU”A˙ü.AŲŖ#lõ39<Š gŅtm"$Đŗwų¸čg…6EY›Ž†C2Aá“$7.f¸ú9‘ŅČčFāˆI’)ũQ áŲōOī3˜$C‹ųA°‚#ȅū\ĘPEōr(/>fŲ@ņ3#6mžj&c>fŲs0H…Ƀ:330A.ĶÂ^Lš#„aÃ>AËAž3˜Fv°ƒpƒÎxA„ŽÂG‚zh=3Ä.QaĄ§hųKū”pčųߨØMX)gŖĐMč Øe•G€Â6c¸ađ˜Fļ’=ģA đoMŅá˛N´Â6;ÜßI„Æ;ϐl1NčöÃĻm Ú68œwčôƒ†a˜v‚  ƒk2č^8•l:aÃŖ;IŒ2ÎoĮŊ:ļé{}XxOQ:ž­ŋ|S{{ ›Ļ<:45o 6t{ôØtqėSaĄ‰VûûuI–:ÖL{¸bUÕéļ)Ŋé6Ž—Aø„+zˆM¤éi=WMŧãŪ)ögŌMõõûÕûÕģū­+ŌŋŽ='JŌ~!vßWzˇĨ´ũ6“}ģŸã¤ãôŨÛˇ\zMŨëOú]ôũĢké7ũ}kŽŋūßũöôļŌ˙ũ/˙ŋˇ˙÷ũ[Ēu_¯ŋë˙Õ˙˙úöÚ˙ÕjúomëŌë§ū›Žž¯Ģ˙âūž˙Ŋ}i7˙ũm~–ŋW_ûīWUõ¯×C_˙[_žĸģ]?˙öĩúëũ÷Cöŋŋũ†?^Ūģ˙˙˙ö×cŪ˙†ģ[Žõņ˙ũE>ķDGK˙âģö*­ë˙¯˙Ģ˙ûúæ˙‘j˙ÚŲ„ŋüz";Ī‹˙аiõū+˙ūõßč.A_áž°¸˙ņo_˙××é˙Û˙oˆß˙ã˙ü,kŋ‚š×˙đE>˙ë õ˙ūcõúđŒ?ūēĩŽžŋ˙ûī˙øa„\ߓ˙–Y—\{üo 9Âõđ‹˙îŋ˙ōbÁ”m/đ{˙áũËū^…é˙˙÷Kņ˙ƒ ŋö:Oūˇúü X<Ŋ?áú˙ī˙˙Ĩ {iÚ_á/˙ŧ%÷˙õ˙ūŋ_ļ•ü ˙8ī˙˙ŋŌÁˇôˇ˙˙Ō¯˙tŸb¸¯ôŊzũ-ŋ˙ĩ÷˙˙Ⰺ˙*>ŊŋwIŋ<ž˙ëésÛŨ¯évŋûĶ˙YåīŌáhđŋ_^ũW˙îÅ}ģ~§ũŖ•o_ũēūŋtųåūũį÷ũž˙ūû×÷õß˙zå×C¨˙ę_žõ}Tžæ‹Ī¯ėŅwšĸŗE­÷W˙Ĩut÷˙ÔēüķL;š%Ŋ#{æžæ‹˙˙/ûš/˙Rûii~ęßųė˙¯šĸõõũŋôŊ'û č?Ũ^ģVÕ÷W]/ûu˙{ĄíޟaRnÕ;_aĨm­¯úXOžÕĩ˙Oĩoũ´ŋŊ4îŊ°ĢưduČękö…ZWíĨĄMĨęŦ4Ēíĩt­;JęôĶĩ‚[Kĸ.´Ą„aá6ŅÜ< Ü0ŌáąėPMØI6I[ Ez¤ä~"øÅ[†()Rö‡Ãøw˙ßŨR“´ōĻž…ZČé¨wuŌVŌŊ+Ķ{ŧ=+šŨ§ķŋNEĶ'˙ëú]o˙ŌQëĒÖõŨÃē֕Ŧėuē˙}5÷ß˙üÍ~•ož°×I§ūí$ēéVū˙ׯˆ˙˙ũ˙˙˙רÃîŌk˙ū^úū×˙Žŋįŋ~>œ:ßūđ—ĩŌkŋõØ"‡Ũ˙ũ(‘ąM„'"rõ×˙~ëūfž˙˙ę<ގ[Iâ!˙~Ŋė(;]ũu×_ūøûõŋ§ë‹ 1×öšn‚ĨŊWũ Íᇄd yDē\ČIÉäŧ§y‘‘#Č<ëwÚø“” Ė ĀÍŗ‘"¯üÁ 'EĐD)?ø}\~ūžō6ĘRfĘ#[葓3ŋß"f\‰}œtNFfa‚∰\Á„BäÃ!Œņ›dhdlf.`ˆ['@Ī™‚‡Éƒ!R‚xJ€Ī˜A„BÁÜÁ„ ņ›`ƒD.K ũŠ0›ÄÍhĐôhiė ĶtŅĄá=ú˙¨īū¯§y–BŠ‚~D-îÁß˙"?[Û[ ?˙Ü#Gü"ãíļ—ü„uÉšBߓ˙˙éŋ˙–f‚ īŊ˙~ģžęĢk–ü´îN¯.¯˙×LēĄžŧ ŋm)uū]P‚~°˙Ô%˙ ŋūŌŽ]XC^ëķ5˙ë×˙č,˙¤ŋī˙Žģŧ†¯ƒg___ˇąīôD?úūŌ˙ôļ×÷˙ôūú!Ũ?û˙˙ū÷ÛĻ?˙×3N—L:Ø}]WK}ŲŦŸ:  īũ÷ũūPŸũBŸ8ŋëüÚKŦįëįõų‰¸âŋüōũū;¯Q×ū÷]ģž__ ëáŋ_˙a÷ˇĪ.Λ˙}˙ũj¯Ūõé)učÉ˙ũj]Ewī˙īæūĒ_˙w÷î˙˙˙Žgš~ĨûīûkuīĒ„ē×m{~N¯×ru{f‹ßtŋ÷úÍ>Ũŋ˙ūĖ˙öĖ˙÷íūŊë]Uõūûíëû3öĖ×ũ™˙÷VŌkõũēõ¯ūŦQAÕÕ6Õ×PÚjˇmŽ×úí~×Û3˙˙ūöŌõŌũW[muö×ÕkĩVūíC×öФŌŌzöÕ[[UÛ .EŅuöĶnļ­m;V^ĐáĨ $ôÆÁ$VŠÄŧa Õ „ pÂŧ6•­ûiZēëi[u~’zzPÕ8tßiļŽ8Ķy CJ4Õ´“°‡§i&ÚA›MŠŠM4ė#´Ą¯Ļa„6ÂQIĻÅ?ö%Cl|&mMŠ ą*„˜ÖŽ€âĄ„ĸ‚N#BƒLA ĶNp#JÅCĻ0°ÂPŌ`ÂAa„‚ØH4ĶH'I´Gb‚Ga&!lSIėĐM6)bwN˛ RlBמE{ÚiąM0EɔâŠĶļ)X§ĩkÃũĒ B§5 ÁlđD0…„ĐƒÂčÚ#á4ŒBƒ^Â(v#Ĩ3Du‰ĩtŸĩ;ŠkbĨ@Ļ!xb°Åh0„,SV˜@Î8!!ƒ(@T;a„A‚a Ē ! †D0L Â[C čD0Bˆ0ŋøˆˆˆˆˆˆˆņG@š"Ødt¤pÍ6)B `†G‘ŅŽ ŲTHqĻøˆˆˆˆˆˆˆˆˆ´""""*>b"""""""8ˆˆˆ“ ˙ģĻč}ųĢ˙ķ‹û^ˇ˙_ũwū’˙Įí¤ģØ4~ŧâßõn*ü"&!Gí­ëúĐa)ÅŦ0 ŽøfE+˙˙â›ūđÂúũi˙ƒ8?ūļŖŦEy6-F{˙%De¸‚{Ęåyš7Š#y’Y<îfIHėc;Ņ Ķ˙įĻ×Ŧh"<níöߎŋ˙ úúI +AwÇū˙ķEōa;˙™Q%UJ““%ų1ũSģ˙…˙‹˙¤ŽēOõū"í/ú_˙˙^š]˙˙<Ŋ~šÚ§‚8×õŋQ§÷˙Ĩ˙ú˙ĩ$āÛKīîũŊ}*ö˙ūģAŖønõ¯ēūžŠ~—ÜpžEŗ[=×r‡äŅŲÔ·“ž@đL)ųŽˆŠĨ5/ô„‡,)Š|˜Dtqę|Ė-”&A/›Ę3‘ ŗB!‘ļ\gˆ‘tI‘ļ|gĖŲ›d1›Š/cNųÅČ_—3B8A"í?ūPōĒ`ƒy/§ EËÅđA‚|Ėæ|ÂxD,Áž3láTÖx>3Æm„tˆX'0ÉΎôl61M†ÁŨ¤Ÿd›˜taáƒĐNĄŒ4‚Ąpčô™cß !˙¨„îÄ&Ō–:õÛ­Ōtž'Iøũ-&Ũ=Øm‡Á™ ÃÎ='Á˜KNŌÚt›VŪqÛMúkOéZIÄĢlPoŨ&Ō–:iĢú–:IŨˆAŌÚņôũ~?˙ÅZÚÚOī~’jÜSîßęŪ—ŋá+tqûņN•Åuŋę˙ZKON­é7ãĶî¸÷uøüwīŨ_˙˙K¯ģŋU÷ē˙JâŊ˙ÛBŸ~´ē­ŋûũm̝õ{UÚŨnŊo˙_õú^—Oļŋãõ­UÕ˙ģW_¯ĩu÷ø˙ÖØúŋ×ëjˇīđĮ×ûõį˙]üBÛūũuĻ {÷_ū˙_Í} ũũūÜ?ũ…õû˙ŨSôŨīĩ˙˙÷^kú˙Š;öëĮz˙˙é‘ėžģ#GĐk˙ęÁüx˙úūŽŧŋŌē˙˙˙¯sß˙Šøor†TWīũ˙aũƒ 7a˙ü?ë˙˙zũˇ¯˙¯˙˙˙ßuüÕW ū˙˙˙“Ēßõ.ģųu˙÷ üŊ?˙ũ÷āŨ˙ũ˙˙˙m/oũüę ˙_õū°oßķYõ˙˙’ũ˙˙Ũ'JÁļÂZÖᆗķ5˙ęÅ˙ûįĐīúŋũũīPß{˙ú›ÃøEŋ˙ū!~mŠn¯Đ…ü{8ŋđˇ÷ĩ˙}Û|‚׊~A‰Ë‚ Y 5íõũ~Cō|?õ´Q‡Ī/ūģũŋ_˙zßF+OF¯Ö¨ÆÆŸ˙˙××ūŲ:~¯áĻ2 B îhēūũ}ūũŊūõŽûôž˙Û4M™Ĩū˙¤ŸmŌzũHĪãë˙kũūļļf›OŽČĄđŽ&Ī´ze<ÛkŊ˙˙õŗ?ē=ūži÷Wûg˙KOîģŨ]Ũ-ĩŋMo[ũüâ˙×äfIÛI°­Ŧ:čÜB´6é8„›í¤éiZ8ûĻ×Ŋ5ÛØjî•îŊöˇÚíĨa+KŊ[öęBÖģä)­=§˙Ø š i˛eĻ’m &Å1M„gÂŨ+ Ú‡’¤ÚˇØao†špˆūØJØÛH&]ZZ DÚļIÚQĻlH v“¸a0ĨÆĻ(&4Øa$Øa&6A0lB ˜AÁ×ūē¯aĻ„˜ÃÜ0ƒ ŠŠV+¤­vœWŨ}Š BM;؄Å[LR¸đƒ ą*ƒ‚.6“Ø…Á&;™žMŸö!lS{RŦSaĻÁ6×ķ5ˆˆˆØˆˆˆˆˆT÷O]-+āÁ4"8a…„ ˆaˆa`„D0„DqDDDDE6„E1OŖüp‹§ŌĨüŽŋáøŽ"""#áz„YáúOU˙ÚļŠŋús˧§˙×ū°û _ë˙Âu˙˙žę×Čč-E˙÷ÚęÚ˙ÛJŧŽž#֒˙]°–“”4ŋėsô0°ēžšĶÄ&(1…åC6ĪăųØš÷ žąđƒķ"­ŖēąöĐaˆņū ģ˙ÄGŨ(öŌ˙ũôÚRtGf'˙Ũw˙ø@ˇ ¤ÁŠ˙Ļßũ×ÂZhRŋ˙˙×úz§˙×m|–"Ė€ŗĩ›ī„–ŅŧŦ›”™ĐŗžŒėÎ ¤kŒ‚ŒÔf@…˙ĶĶžŲu÷Ō īÉA6U™Úļv0•đžÛß˙(˙a˙ûúę÷Ãáŧ88} u¸w˙Â_ŦŒ]_]ë3öģČ}÷ü œĨîųØ4íŋū_~ÃMyuO÷”_ĩ‘ˆ•&ŋ÷ßk˙˙Kãâ=˙_H3PF¯ŧõúĮ×˙Ō˙û¯uŪׯ×ūŸõ˙˙_ëŨ}5Tė6Ŋ?˙õ˙]˙˙˙öŌNÃĄIˇjŋÕ÷Tŋ˙˙ūĨw¸mB ‡k %××ōBČ6CˆW¨ō…"’Dī1qėž=Å Ú ‘Tn)ķCËŧ”čŦ" ķ č~˜M[0žTļ`Í`ķ 4NɐKȰJÉ ōNqPČ°Ė G/R>Q$  ÃÂ!:o:™ŽFōAŗxD"rāøBYüöqĪ…áõ'†âÄĻãĄ„PGĖá6=gĖÁžač gŒÛD,‚H ņ›tˆA¸AŸ0@ˆė&"í0A ˆäˆtŒ Īh= ÎAœ2$ap‚GgÅ0=0Ÿ§ ØūëŖāôŨ´Â5†ÕncGÆĶOÆĩh:Ia‘Đ^đƒÎÍdša… 0σ Ƙ@Â=†š\°ƒÎŅ 0 ļévŅíēa0Gˇ„Ņđl":tŅ­ļƒ|ÄöÜ ƒPƍmbbV74lq<<#[šGaÂ0íPAļƒPÎHÖüDX_tqØu–ø•l3Qá¤ÛMiVÜ0ƒøB Čé”'ĐO ŗŅá¤bPũØ2Ä'](ã°áŅâŦi‰QH6“iÜ>“ÂŌmŅíŖÛIŋVÃéa‚%]&ÃĒ][{3Ō–ô›ŪžÃÎ=+Ļô›bU´ÅŅíĢ´×¤ßŨ/IÚĻø§Ũ۟{wū"""˛:b#Ū)´­į˙Ä&é^žŊŠm)oIé´­%ĢwŌuM[bĸž¯Ōôqûū•Äã÷ĻõƜU×鸯n›ūĸ¨Ļû~›¯˙ū?î•öŊ˙˙ßû¤ņ^¸×īëôûŽõ¤õĢî’ũ=ĢúMÅ=ŋM¯^˙˙u{õô—^“īt˙ļ—­˙öŋ¯ĢûZ¯ũ/í~žéŽŊ˙âŋū˙íuũ?]&úŌŋūąëރ ƯĢ_÷û ŌßũÕ}ũīņņ˙˙[{ûˇ¯ęž­|īl|~ũąõ˙ū—Ú˙˙Í/Œ?ûÆ˙ë°cī÷K˙øũVĢūŋūŋŊv -ųąũ˙˙_îŋ‡_¨Õëũ˙kÛëL?Ķözéøā˙˙îÖŊ|-˙S‹˙¯˙tqūÁ…ũ?u˙îŋƒë˙`ū?÷ūûûÁ…Á˙ÁũßĨ°˙¯úöŧ×ŋ˙ũ˙Ķuļ¸ļ–×m'˙Ö˙á‡˙ęÃ˙˙ūŊ~LVü…°˙“ŠõŨn¤ë˙éÉë˙Â.?ōÅŧm˙ũlAV¸ų0—ūY×áŋũē ü˛×ûZ¯åÕū°ß÷Mô ˙˙ŊøAv–×˙ÛK˙ö×ĒÂ[QŠ˙ū_Áŋ¯´ŋūž˙úßđo÷ȄioLBb°˙ú˙ũ-ũ~˙Ą ˙˙cÎoWpÂ˙˙ŋ˙Å˙ŋë˙˙˙É÷Ī/û}taŌ0āŗĻŪyk˙˙ë˙u{üâũgÎ~õŽęĩđČčÚŧâ÷đŒ3į‘o<ŋŅĢ=oūģīzũíīíë÷ũÕ¤) “Ģūëzë˙K.˜úÉ×_úūŊŊÚģü睈˙É×Ĩí÷˙W]déŗ=Ō˙VĖĶĨô؟ũ™ũ÷ûš.˙ū×Ģ[öûÖĖ˙˙×ū×˙÷÷ū—÷ëŋūžÚ˙˙Õ¯úwœ~ÚŨ7čãíĩĩŌûtļÕ×ēzöמŌîÛ[ÛŽŊ+JÛKûûCĢI°—•`˙[„4Û Ģt×v“hzßíĨk#ÖKęȈ˙m¤Ø^˜i{iļ ęžÃKl+ $í(ĶNH pŌ‚#Éä9Čt †ŽÂAm$$› * &ƒM4a{Áä˜a}ƒø@ÂlM6( ĶbŊ8"ã‰P´˙b‚ 'aČy†› &0„ 9đÂXM6)Š S0› 6**a6+bgLBAÁIϤįqI1VÁ°Ã wÔrL1TÅ&Ä%ĩM5bšŌ Sŧ~Ɉ†"Đe Đ´"A„ĶCWĩá­ĻmOšßەbžöƒ Ļ! A0„D0°ÂЈa4"B Âp`…ė0„A…††C!„"""&8WĶEôDDDDoÄDDqqDDDD"æÂ'8ˆâ""8īô7øF;ē}č&˙ûúOúN‚tĩz|ފŋ˙Ĩ×˙^ļ–Ģßū˙õõÛĻ×ë¯øa„ŋn˜i%°ÂL0H n—ųøb{a˛7CƒˆKú?įklɈˆū¨ų˙â?é$?˙ø‚_õ˙_û˙›Ú˙¯-í×ÉdIcņ3.Îč_™äfGDĄ˜2b;3¸Ų3ŗS*ąŪgdR"6Ebū˙Ũ§ĻôĐ´īí>õm7péū˙ûÃ{÷áŅŨ‡P˙‡ģģģDv$ŋŋõžv´ŋķžNfw|'"ërTžŽß߯˙ū!§k¯¯¯Ü;ū¸ø˙˙÷×īĮ×Å_×˙U˙6ŋŌWũãõ__¯˙ūęßÖŋũWũkíutŋ˙ī㤴ŋú˙¤ē˙éūĢéÅ7Č)-,ƒČ$C”íķ­ūDŌ¯ų!$–ȆŽAÄYŠ ÔG\čg ˆN›Î¯73G3D@ŗˆ„a2‰LD'’ĄvL§‚lÚ⁑ķ†gĖÁfØ@Â Ī™ļäė“ōxHāÂī ųœ0ˆT䠎É9;!zn!æÆleČŲ›d26Č1“›9"?UĸĨČaĨæ Č2D ‚ËpÜØĨČŲ„@‹Éہ„ Dw› ƒ4K xDrD9s8h"9&n§öĶGÁčøôĮ ŖÛØŅ­¸A˛?ļ›ē>4kčöûöģŧ'ûúaŖ[×Â4a4xŽ-4ll(Ņņē>C'0ƒjÂv‚bÃ,ãA7ŖáÃϘ8wAZ€ƒh č ᓘAÃÎīÄ4S‹Ü8JÃŖÛ‰VŌo´a‰W 'í¤˙¤Øpᖡ;83" ̰Ķ8GļbPô­&ôƒ‡M û %]pÁI[VÃîÕü'ˆOŗ:ä­¤ÜBmX{­ĘÆîžŋtĢ¸mø÷÷ŠzuŌUēoxĻßI˙­_zwߊoŨ­éŌÖúžS÷únÛéŌŊ'ũëĻ×´›§Kö?õ~Ũ_õ÷˙¯Ĩm}¤ÚKˇ˙Oũ¤˙Ĩũ}ũ:ã­7­Į˙˙õi}ūú_Õõ˙ĨôĶ˙§öûˇ_ũßīē˙Ōëūũ/˙˙Û˙˙×ĢĢU˙é­ūē˙ūߤôē˙īë˙īöĮŽÆĮ˙øđĮß˙Õ¯˙¯ũ}ūũõ¯¯Û¯˙uŊ[Æ˙˙{c*[ūūŋ÷×˙xĶ ŧW͏į˙ú§˙é¯ã¯˙˙ë¯é˙Ã˙ ú‚(…t˙Ŋk‹ô?˙äSÂlŠx_ŋøaë×ņ˙ũ˙Å÷˙ûhã×˙Û÷îŋŋØ?đ_â=ƒÂhzß^õ˙˙ė<+ ‡‚˙˙a˙˙$U˙˙ų0õ˙˙õ˙ũuŋ_A‡ūqūX”7„hɎ˙}õ–%äę˙øaá-†đ‹c˙˙ŋá˙˙_˙˙M¯˙ë߯˙áŋô×āŪé˙l ŋūŋ˙ÂY ɃĐO˙đ}˙÷ú˙˙˙˙]ĩŋ˙ÛŽļĐO˙äEū˙đú_Į˙ī˙ø7 œō ‘˜o_˙åZo˙ũīüō˙Wßū6+Ī/˙ū+˙ō„ßž_ųå{æđŪĄ×ˇŊ#@,įģũ˙úœß<•S}ėCĨ˙ũŋ¯ūÛ˙ë˙w˙_g_˙ņūŽ'zˇŽß×ŌRūŋ}üyuŋéūNŋ˙õŋüĮŊúųu˙ūļëĪ^ŲĸĖ֗Úŋ濉×ũĩūģ˙ßõĖ˙­/Î[˙īšŸŨZ8õ]ŊoŋÛ^Û?˙÷ŨZëWßú¯ų?Úî—ßÚMĢi{ëü§m…{öūPũwŨëOļŌm-ŋēOõÛB­%ÛUŊē´>īäbT­Xi.ÚŪžčãģÛ]Ōēmm˙2˙ᤃa¤O ƒ 0ŦIē4Rh0› -°Ō°ŽîFįÂėūXæA ã”ĻU ƒÁK%* ŲŠVaÎ9^y9Į+ ĄĨlŽÚVík[K´íĶîB¤jÚVé' ~)4JÆ6)i1ą)ĐM0›!Ō  Ø ƒ ąA0ƒL ö*ĨÄãí+J)‰O0ƒÔ#p˙*+šzjÅ1LV­*Ûą1ÜDDDDDDDDDDDDDFÄ&)ļ)éÆi‚!íé„Mƒ Sb8"; 5´žĶM{\đ*šũ†×M;†ūÔ&T 0šžOši„Õ}Ž" ÂqÁ0„A„"!„ ÁáĻ §Ļ@D™†Pę„YÎÃ4,!bX0„DC" ˆ†`„DDSDDDDDDDGtŸ‹ˆˆ‰6XÄDDDDDqEķDDB,˙לZ]?NdJŋI˙äØW÷×A˙˙KMuëÕãĨŨkà R˙ņēVAaˆQZâh~˜ Åe¸šĩôĄÎ/aUˆú¤Īøũq˙õšÅ˙û˙˙JūMÁŲÜ6dLŠ™åP‹2´f\dfBī˙;Ѝ™YFˆĀBáLG(2ĩfeoĖgâJG`FSÁr)Eú}ۚũRņÜ6Ą  Â¯ķđĶvíÚoƒ‡Á°áÃØ˙áŨ-ϚIÜ;é.ßĖĩGsũē}˙Ō[ÖEĶžF'éëz]Ŗ5ū˙ū×īŋ8ŋZ˙Ô^ĮWĮ˙ßQ˙_˙ęß_¯˙Õ_ūē˙÷W_û‡ßŠP)°æ„NOū˙Š˙~ŋūûŦO}|4x¤ē÷ú×ūģ˙íĨ˙ß×Õ§mēõ÷ũ?üė­&ušŗU’Īh‰˙ļ­ĨČ” ŧŪC÷žŗˆ†0ˆ@zoĸ œÎ†C2ŗæahämErÎhˆ4V„ŧŽĘ˛Ŧ˜2ŽXŅ!Ģ J„i”fŪKc\u˛¨ĪdÆFŠEœGVK’ ĄȒ6Ī2@Ίly,ĖSFr4<ã3“™ 艌  Ãú8÷J[âģh&Öö¨:ēŊCwH1 ļÛÚi é6•ė'bUŌeēb›pŒ=&Úpé<7VŨØI[ĩNÜãۊtī­.ūqûŊU6“ÂOéŠmĻß˙G¤ÚKNÅ:ļé6“´īž“zK^ŖŌžŌoÛũēŨĨĄé-kíî¯×î;ņé6÷_÷†ŠkīoŨ+VôēoÆž•zũöŌwôŸIn+ÚŊÛ¯uâ´ŋUŌuT›Ēëũ&âŸô–ēûöüožšŨS§˙Ē˙ũu­[ßÚJß˙ĨĨümkÕô˙kûūß˙ũ_é}~¯ˇûkûĶ÷ßÛz^õŋūŽūÖúI%˙í˙×íi_˙Ĩëû¤÷˙UßũĒmoÛÛWũ¯đEŸWôŋöƇ˙ûíúė_Ážžŋ^’˙ u˙âŊũZū—õô=Xa+kûWCøÖëĢKu_¯Cúĩ^ûũ˙ZÕ~˙ũE}˙_ęą \E/õŨ§¯˙˙WĶ^ W˙ŊŊēa¯¯˙_Û_ęÛŊ[˙ëŦWWŌĩüũ˙ÍĨû# EÅzÖ˙ûĪĨęžŖ˙ū˙úę˙žlnŨ_ĄÅû"“ī˙_ßė\?Õō/ģŗ =×ęŋØ?ũk~ ¯āŋü˙ú˙ú˙×îģŖŽ˙úūq˙ļŽēøEĮđÚ^ŋUė?Ōk˙Ūqél0Eŋ&i˙˙Õ¸¨Ž/íëûרí֗Õ„[īü"ßëĨ ˙ī˙äĮ8k“Ķ˙˙Ú]DÔįrXŊŌ˙˙˙˙ÆĮč.ŊļTWų0ËĶ@ߡ˙˙Ķ~ „ÛßíĐaɆ]eŋë˙Kü0˙ũžZz˯øAoū]~”Úëūŋū‡ëũ÷[Qī˙˙ûŊkũuá/û)ũ¯Áëm+˙×_Á´ī˙ū ŨuūÚ_ˇŋ@ßūŊm˙ú^—éęy˙ûëūīūõŪÄ'Ũ'×ß˙ū¯û}~—gYå¯îöoņ ķŸžÅ1Y´{ŋ˙]ŧ¨@īí˙ŋõėÍũņZņ_ú]˙Ĩīôģû˙ëöãüNõ˙ū‘‡QĮ˙˙ū믆˙ę]w˙ūŨõmøGŋūŋˇKĢ˙îž­íöũŅ…O_‚oũg ĶĖ­˜#†|˜A„ Đy+3l‚GgĖÛÎ h‡EY˜ ĸŁ„ ņ›dŸ3„30ė gĖÁœ0A„ Ų ƒ/„Bø3Ä`ÎgŒŲ ˆä‡ÂĮ,ŲiáôĐĐã@ˆäj…Îä­Ļš Â^ÂaŖ8vaĄŨ„ŽĶ´Â 0š ۘFv;ôxÚkŽ–ƒGļ0čöŅō á¤|n˜h0ƒ&scwFÁéļ˜MÜ&cÖÂ6 ŅĮsģ@ƒm§°Hų ™D:0í!­Fļo ŖCoFązl4knš ÃģnÚ=Ņ­¸M0Œ6¨ āÉĖ áÃá“¤Ņ­´i!ÁŌ3›GŠ3¸M‡ZpË: †‘ŖCIļa ƒdģ›tghÎŌ ‡ÎŌ  ƒ‡bŸÄDb/p“o)î“Ķ„Ŧ…ĶA+yOiĻ’ˇ”ąÔJļōąĪl;Īm'IŊØm ›MÃŖŽúVÚļ!:°Ų„…Ōm'm&Ü&Xę%C`Ōl1*Ü÷IęÜ>36ž=ēēGĶĩˇžÖˇé6Ŧ6’o¤î—Ü' |ãĩ}'bĢm´—ŧãŌļ)ˆN“qOMûîßÎ {×Ĩé6¯ˇéoŽ˙M˙qÅ|W_Ĩėq_I_Ķi}_¤ÜS¤Ûũ5M°i]1WV’ģĨôôÅ:ļÅRžŸ˙ßé7Ŋtŋß[|oļÅV˙{MׯuĢÖÚôÚûũÁũxũnô¯ôŽ+ē×õzziúutŋϟúT’˙ÕŋŌuˇŊŋJÆļõŽ’õo­×÷ī˙ūŋßīKûétÕ¯Oú]V­Ŋ+ũWOÕ֗oũ˙ûŧßöëņ×_˙ŋŋŋÛßíú/úëęÖũ-úÃi7Nũ˙ūžÖ—BØõ˙Û_­ēö;īc­˙MâØë×õ} ß_ŋŨīü>õŽÃũzû˙˙˙õׯŌÛë˙˙]ú˙ü˙ĩukė~˙ū?ũ˙ÚPúö˙Úđu˙u˙ßë¯đ~ՑÅū{kúČĸŋé_˙ŋæ¯ëWŗ đŊ§asâß÷ī¯˙˙ø?˙Ž>Á˙^™t¨<+˙‚˙čãöEƒūŊ`ūũÖŨP˙ë÷ô6īŋāÃØqüm¯ˇÅz˙ú×˙˙Äø/}˙˙Į÷íׇīŽ?Ø?˙ˆö ¯ø"cßööéŋØ˙ė?˙û¯˙ūū›˙¯ė=šuyiÃ˙åÕë˙ëÚ˙˙—§ü"ãRcšĢ†Ģ˙ų1Rë˙˙ä]Z×ōāã…û˙äę†đ‹ū‚˙ôĩ ?Ãw˙˛ęAīũ}ų0=ũ|ąˇū?ĐX7ū ŋļ—ļŋûix˙˙˙øA}?˙ũūÚ_oú~#ę˙õƒz ¯đ‚×ö˙õ!õ‘ë÷õkú˙ßČŠ˙˙ õā˙û×˙Ģ˙ūë˙é}_˙×˙ũ|4ŋßß˙˙˙ÁŊ.×ôŋøâmüæ˙˙(O„Pīūę+˙ũõܤÃęĩü,ĢŨũΛ˙ˇXE>ŧ#8_˙ūī˙_mųåŽ˙˙žû˙ßŗ›á?ũō}õ˙ÎûûīūøE¯īMŋz˙Ūũŋũ~īũ„ŋũîģüz˙Đ˙˙˙¯ęž÷¯īį;§ūũQÄū•ī]ũëûīú0Ÿ˙ō˙õ]ögë}Ģų§ū¯ūéy§ũuųĸßîŋÁwļgũ™˙uĶfŪŨZ¯˙ûkf}į˙üēöÛ3_ū—_f}™ūézųūéŌíėĪs5}ú˙îhģũ5×oõũŊę÷Ģú÷Kö×ē˙oĻŌ÷_ßöÖë˙Į´´Ŋ´¯tē´­§õtqė?ũ}Õ´4˙t?Ũ[KížûĻŌmõžĶĩo×t­užé´ŋl*õčz8īŌđ…jéSŨC čãáîŋzm¤­Ģi/é;kvŨ_ļ–›kÕŖŽí/ũĢ $ĻØJŌnnaP|SiECôiϚi ÂvŒ8l0“hîÕNÂ0đĒà G„M´˜āˆōMĢiL6•ŖŽ‡=xu¤ĒŦ5l$Ú0áÚLm¤šiÃI† ą)Ķ ãØœxA§ .Ą¨bĸĄØJ)†0ƒMŠ4ĸ˜a$A„ØĒb° Š „AąA› $Į?įew\lRiąPEÆÅb“Ú SVÃM4ĶON؅ąLVū›šTö)­v!5LPbƒMŠb›a„|đ$¤aÅ1LBā‹ŠĶƒM0Å+*$;Uĩ vÅ;ʁ „×< h1M{TʁAĻ*ˇ ;[´ū×°™P)…RÜ/įb¸OÁDB  ´ a ˆˆˆˆƒP@Âq &„DĄ†Xa`„Í0ƒPM”!jƒ˜B"AĻĄa4B"B!„!‚aˆ`°a4" ˆƒB"B!(B"""!‚DDDDDqūž""#ˆŠ4â"â"6"""""‹æ""""""""8ˆˆˆˆũרH?„?˙§ōß*­/ø˙¯õ˙üâ˙Ōm —Ĩ˙uĩöX@üAū(„8bŋĐh3į0‡+Ŧøú?4~oĮÕVŪq‰/ũ$é˙˙õŋ†_Ĩ]ü0˙, köˇøaäHŠ„vPe>R3QÔdæI2ģįs˛&3hČÄvPËqS+g’Ō>Ė‹ė;ŗ)âdDH‘ ƒ’ڟņč=;Đ"<äĶO¸jDy2W]īûĢļ_˙âÃè}à­ëč Æ–ŽîÇÃáö÷J ˆ˙†īî˙Ų(Y،…'kIɒĢKÎčŽũ´˙åe”ūJVīđ°˙˙ÃļļŊu­­XMi:ŽŊwīí~+Mīū˙8ƒ~8˙_ˆëũt?ëã˙õ˙Ūŋ˙WúŪõ˙ūˇũú˙˙˙ûú˙ë˙˙˙g÷¯˙õęēęēĒ˙§ë˙~õkķą ūō$•WĮõSĒRĩeĶč˜G,—”é6EZy/҄ɕF{ȃĸw˙’ė„Fy9ęà =|ė y<Û93dlfdxÍŧÜfdämælfÆEČøsΌ0ˆX.ČėÉ’r°…‚đŪG2dˆ#ŗA:М*NÉŲ`|¤3æn<@ˆw'e†KËØ‘ōs)ōaœ  đ㞄āĨЖ!äÄÉÁXBđ0ˆy“0@ĖĖÛĖ lyP@žp ņ›h…đÁ|͘A„Cäšã6d\‘0‡°ķb—#` <š đŸ[Ņ‚ ĸP~Å1Ax5 EĮiûŖÃĶÂŅė4ôē=ŋF†oMôh ĮÚaŅĄŖÛ čĐŅā~ôxAŖA;éŖÃL аŲã5 „gkÅŖ¸Îŗ4h &ƒĐ čĐđŖ_F† îÕŧŦm„é6; Ŗ[­4hmĢŖŨ„­ĶģĻoEÃĮ4k ĶGˇ¸a4õ¤:aÚ “aŅáčöʔ?Fw†˜I6i*m+ ēZ $›§cŅĮ{ƒ2m&%“¤8thzA&ÃŖ§cŅŨ„›&‚ ‡PčãŌlgƒ¤8tgi1†YĶh' ē'd'JôjØ &¨1öé6Ã.6¸bU´›d â‚mŅĮnŽĻÛāÃ­Ķ,uÃIž˜ø•t°čãÂMøˆô´Ÿ”ũôŠx§j!>ô•øIŌZ}¤ĩoŌÖõĩÚŌo}ˆOé;ĨĶú7NčãˇĻųOzŌm˙}ˆMĨ-ĶĶ{ēmé6’ëŪčãûŽ›Ũ&؜ˇnî—Âm[ëzęēmiĒtģIúm&âŋøĨ×ÛŽęûüi˙_û˙u§ÚúīŌ÷+_îūãÕøõ¸¯]×ũ&˙Wëņ×˙ô¯ôx§Ū¯ũ.Ģ[îŊŋũŽģģKúą¯n—ũ~’oékíz×]zO˙íúZ_Ũ-߯Õ~Ú˙ģõú]=˙ūÖˇđß˙˙Õé&íũ˙_íũ¯ę¯_ĻŊëÛ_­+Ļžˇ}/˙ž˙ūŧ5˙8’˙Ĩ˙ûûÛ¤ŋÛ˙ė|Z˙˙ėōq?ĮkKĄëĮũą˙˙Į 'ũãˇ˙˙Xôĩū$QpĮŌë˙_§ëî…lē8ž){û}˙_˙ëÚãúŽÃčW]ũx?öí~Ŋß[ú˙Ãë˙āņ]|uU¯_ũ;õ°ŋ˙ĸ~|5v §˙^Ŋ˙č2č/ôĩëÕ ˙ŨkîŖø˙ē‘iÁx˙‹`˙đaEĶú­ü°~īūÁá./âÁ~Ō÷Ž:ß˙ū?Ø<?ī¯õ˙ˆëūŋ˙R,/˙¯ßūŋuÛđŌé‡˙Õl?ęŋĒ÷Øé~ÃÁī…ō>"ßīúü˙¸ī˙ÉÍcˇ„N7û˙˙˙'gW“Ô/œAq—ũĩ—_ũŋũe§ķk˙–Ļü%ōë,C˙ųuÃ˯˙ËOđßĢ˙ƒz 勸!*˙˙ā‡ũëô5”‚åÃũ´Ŋũ˙čz˙˙ī˙ļũē¯˙ēÉ+éûix?ûūF=˙ŋ˙đoöKāŪ˙ôŋę˙˙č%ī˙žĻĐo ×˙˙ū˙Įר¯˙Bú˙ßēä_t!nuAŋ˙|Ą?īí×ú¨âųHƒéxE>÷JũĩīŊüO˙úĪ/ūÃxE—oŊpēū×ö˙˙õ÷˙ŖˆümũųåÅ>ŪyuāŠz8‡Û˙ˇŪ­į—ßëīŪy7øF,`Ž;[|ũ˙˯ęŋ~Õ%/ęūĩŲ:Ūũ.ˇũ!Ûz¯˙4]š-bv í˙Nhŧ˙úūų§îišžßģfŠë_Rë[4KVhŋũŊÍuūæ‹Ūŋ'[ö˙×Ŋ_Ō‘ûėŅY˙ŗ?˙j¯žĖ˙ŪŋûJô÷ ũ^Ģß_Ž–ÚžēîˇÂîˇģkēßôÚũ¤ŨköûŽ×n+ļÖŌ˙Ö×Ŋĩû]Û_TŌũz˙šĮ~ęÚļ–ÚXCUũ/ ¯jé6…{ö—ÚIŦ5mzk|ŒˇÛ¯}ÃU†•9,( ģGĻ0ÂJŸiĢ!NĶN˜h ˜L0ÂL0J)6›JÕ°¨=6VB"ÚH5MSÛVŌ[[Im´—m%M´–ŅĮßklˆ.Õ´­&Ō´;I°“ (A°Õ°‹4ęáåM8a Å0Ö%4Û 1ĻaŠNԊbSÂp ÂAa„‚l4aÃČ@é„ÛH aŠ÷„ļ*ĐiėPA„đšh84ĶMØ „ Šb<1PEĮƒbT&˜¨4ØĻ$˜A§† "Ū ÁŒ ÂaŠ„!fH"…˜¨l"<  Âr&)ІŠbSĻ6)ˆJ¨…Zŋą UŠPėSM*†)ĨÚųāSM5ßė>؅ą_§†![^qÁ„Áˆ`„\D[0„C0ƒpÂĐhC  Đa6 ÂÄ!Ã…„"L!ƒ(r…ƒDO.ƒM4ÂÄ'Ļ6ĐaJąML `„!‚ Âë`…‚ `šÁƒ""!‚ÄA„!„"""#¯ÁŽ".>""""""‹ö#ˆˆˆˆˆˆˆˆˆˆŠ'ŒDDDDDDFŖßûøH= ƒčzŧ$˙đÚéVEeIôƒ–åÚū˙đcë×××Ēõ˙‡Õ´´›KŋKØiÃĶI†ģa(đ†+ʆaå‡Ä1Å!aˆM]†’ F<#Æ#ˆŽ#ˆöېÎ/¯cŊ/ūôúힺ˙ûŌįb˙×˙„EWË8)Ų\ÎËYs ŲK„;tGÎÖrœú˙ᅝ†EdÉxŠXŽÖŲë*í!e>U‘Ų,v&D”¯%„œ]ĄAt-;ūôBĪ <:;ĩ{ĶÃún›¸|āÁ82_°ø˙á‡ēWŋû‡‡Ü;úJĶĐo|Í?˙/\0˙ÜÍmoųÜ-÷$Š˙ĖŖīˇtöŋ߆­ âí~¸ī˙ßĩ˙âŊ§×õũ¯˙˙úúW×˙íÅô>—˙įsG24ŠúPA‘ķ`ĀAīŊ˙§×Áûũ/˙)CIyß˙zz6 2ūëžZ8ũ|ČívįKõŌ˙_ 70đ’_ũm&÷A>C˙Ōõč~•žYˆlÔō*Ô)"Ė2%¨‘ŲŠ”T—’ī Ø_#:ÛŌHŖSŽj˛Tōvu3‘„mdX‰äC?*‚ĖČčEfŗŅÔÉŅČ" ”ČuiéÖđæ ų›zžųÂ4#ėäx‹ä˜ĨÆ`eĖ"&ôGÕ6 Žŧ„ģ<š"9;!ė"ŒīOOĮžŅœ;MĮOŨa^Ål|ė ZAÂ:6=vĖj2æc‰VàÜ6Œ; Ú>Qōyīávl4jĶFļÂĶwOi>ķÅGļoO4lz64ƒi„aē3´˜ö!7¤6whîŌmŅ†XØ@āËOũá‰Ũ‡Gw­{ œ:i 4AÁ–q<‚­&ûJâmmŪˇ§wxA´Ž'A6“|B“}0ĸUŌ°Ėq*Ûē=žO˙Ę–Ė„ÚOĄ†'žŪ•Ĩ-ĶM{'ŨēģI4Ž)Ō“lBŋķ‹īøO}ˇŖ§ßęwņÖíđĩĶīīW˙qôûúŪ×Ũ;ũ6“}6ņMč/õõ÷×I:zŌŋoqŊ?o~ģ]%^˜ĢJöô›ņ÷WŌonŋ~’ã~Ÿú¯i~—ēß˙ˇûÕ:Ũö˙ŋNˇõ˙˙ũ[˙ˇ^úMëON•ékēO֗ūúõī_îē˙[ōãWĨŨUģk_˙Î#ą@˙Öŋ÷ũũßØØ¤ŨZũ­i}}zXú_ö˙­U÷˙õ˙õ}u[Õkūˇöõŋ_uôŋūģūŧW×ūëø¯ ‡Ŧ?žÛŋ˙˙õaņ_đĮ_ũũëŧßßio˙˙ū?˙ëßnÕzaé¯ũkĮC _ŋė^ũƒë‹`āã`˙¯G^˙×Ŧ&ëuØ?\××Ŋčõ˙Áqø˙õåŋ˙˙­8ųmÎ=ī?ā‹w˙ūÃ˙`˙Ļa˙í××_ņ°| gžëaņ˙_ūũ¨Fu˙ū˜īĒī˙Úé˙˙˙ívßē˙ûüēÂū˙đßøåŒaš†ũūëō`ŸūÃė>^Ÿ˙ũ´žû˙č*åÔū]Kūũõ!/˙íįŖ–ų:ĄžŸ_üyŲmč.˙˙úķŖ˙Ƀ˙úŨ}üĐÁŋo!˙˙ūŌô¯ūŋ/ūģ˙IÉ Î'Ķ˙˙éˇĘsĩŌ˙Ž!wKúuü7žAŋÜęƒf0ųÕûuĢī˙ûƒ˙ž ˙ūūęÅj—úöē]õßîs~˙˙˙ũ[īĸ„Šc|ōûáëO˙ųä]?ëūûwũG÷ž_ūŲũŋúÍ[xE=˙õü#˙˙˙Ŋ˙˙Ößũ.˙˙ûŋoëĒõÂ]š-L&˙¯ûõũ˙ŗE}îi۞_ŋĩī˙˙w˙˙ūNŗE˙×Ō_—^Úũ}‘öĖ՚*éÍ?ũ__m&ĢK˙)äžķOŊë˙ø"cö×Msū­ĨöˇWZßû­÷W^Ÿî“˙š+_˙~ŋÚ{Ģí[_öũēü*˙÷úöŋi7JŨjŨBVë˙M;Ûm{éû¯žOļ“ĄļˇoĒēWÚVŽ;´ŽÕ†ēŊ°ļ•žˇĶŪØWKûûŋ˙N÷I´›K[ÛKmd-}M´qŨÚWa l$à wa†’§jÚA6ÖÕÖ鴕˜M=;Nᤃ´ēMPbĸSĻ!Ķa„ŖpŌØIŠaà &6*VbĄ¯„m ēL بĶL Ķ „áÃI4ÂIü0”l0“i„ ´Å2bT ƒMŠž¸ÂlNö)ŠA„Ķba6)Š@ØaØaÅ1I­Ø t`Ļƒ RŽÂOĻŌkķˆ1á ĶAĒĻ!n•¨1 Ē•bˇh5*Oƒ UˆUžĻŋa4šzwk< A„! Ä įM1M}ėS°›všf™Pƒ °ƒ(á4A„'đÁeA„Ęāƒ!ˆA„B"$o FPƒ „ 1TâЏÄÄDDDCDDDDDDDA„C@ÂLsĄņ†üDD „˙įaũg˙đ˙¸A×˙Ō×˙Ūà 4•'äj:(Ö¨Ŧ ~a:J@ƒ†ÃĨ˙ČŖ¯é)kĖĶč˛.ßw}/IĘ_DG™õšäkô]~vWi~×˙ämy ô—ŌũwųØŽƒ¤ŸĮ˙˙¯Ž—˙]¯˙â•×_×˙üė„Q#[[îŸ˙Į˙oŖ:ķą’ŋúúë˙āĻÁäŠģŊmõ_lÍf‹œTíåX`đ9ņ„ 9ņ—Ė Ø8@é×]uõũp ža¸W×ēë¯ūÚļŋ˙ģ´úáTI1ĻE3Ŋ#_”i‘ŋ$#R\—ĶȚ×ô÷vũüâ: ę% ¤išŗŠšōDLđ™ÎgC#ļP"r'3DGͲ’"š42І) d†C#‘„_4/°”0’ĩîOũpƒPņ4núFļéŖc œá4ka taÚ6 ]0ė ƒ 1 ˇM8bl#cFĀÁ– Ø™ ƒsÜ0DuĻ ØdÎki1‡F΃ !‹]ú˙č‹iRl:8īvtxi6xyáŖÛWI&ÆŪ“jØtSà %[Û !اŽ;I†“‡I°ÍDé6xA7‡Ø$˜xh0˜č0ĐM†i ŪĐa$ß˙ņ*Úļ“úMēÖĶŨ&ßVâoę!:][ŖIĩwotŊ-Ĩm'auŊ¤›I–:t“ņō+äoîEō3Į̊ո§˙☧ī˙Ō]tũ~ģëižŊÕßI}ītž÷é/ëŦ$ũUũ/évŊ=˙é?8ũúŌâq÷ĩ¤ũ7ˇŧWû֕á_oŋœ}ˇĨĢŽĢķ‹§ßDLĩį…øzõ_Té7õߤé?ū“{Å}?ģ÷%éī—úI7ŋĢ}Ũ+{é?Öõŋö˙ÜSīĶiuU˙Ĩ÷´ˇŋk¯Ĩ˙oÅ5ūßõ˙ŋūŋūCā=/oŋĮkÖũ/ö¯aW˙A¯_˙ˇúkŌũē×Ku_ēī××]ŽĮÉŲy|lî…ũĩúūŸxc]ZNĢ{]׋^—ú˙øõöīūØnhŊ†õ¯Uãī˙ĩŽ+X×ū+īũv,/ŋŌ_ūŊģëŨWâũb°ũ úƒ˙ņëßõūģ`÷OØ_â°ĮĄ^Öŋ /˙ņ_ūƒöF…đ×üí}Gõ¯ĩ_ēĢKõ‘Šē×õ××îÕëŋõæˇ˙áX>Á‚`˙CÁuëø˙]‡ņã÷…`üŽ˙ũBūŋÛà :‡üáWū0_đO˙˙˙a‚Ŧ}×ņëũÔ~ÛĢđEŊ‡īė>ž˙˙˙ũ‡˙ūˇ°ü"ßî—ü~ŋ¯éū]PŨüēŋ„\~XŸųiÍđw˙ŋ˙Ûˇŧ‹žäĮ+K¯ōCÂoũÖLŗˇëøAaŊųuÃËŽZ˙×,Įß ü˜ôđ‚ųuŋūquú_ŧ‹ĨúĘs˙˙-˙ß ˙ k˙[ūø6‚~X¯–î‡˙ā„z˙Ēöøę´ŗĄ˙å9˙é˙˙ôH˙XKũ/ė%˙ø_ čŖ<3‡†˙˙Ōõ˙ôŋô˙]ú˙ƒa/ūŸī˙×û_ũŽôŗČ>˙“ ųåīĨ˙į—˙Ūc Ūí˙Ĩ”čŌū!ūE ėwŋÚĻ˙“īœ_×˙˙ŪëÖyzŽyŊ_¯žE÷¯˙oŨ,"‡uąW[˙˙ú÷÷ŋmë÷Ĩû¯ûßë~ŋœO_ߜęŧŪŽ"ß˙‘ęF?ÖAākĢ}ŋû˙Ĩ—V¯ŲÄ˙Šu˙ųu˙ŋöhŋuRé_û}WīŠo˙ū˛ũžūi÷˙æ‹!­Kޝ×ėŅio_͚'3Ũo×/ÛūĒ_û3×Ė×ĮŽ÷[˙Ģoŗ5˙ûfūģí™ûųŸļhĩö˙×ūũē˙moŋ˙4˙vĖūŊŌsM­-ÜŅŋūģZũĩo^¯ö×OC{uŋÛ[ûīžÖŌ÷_ úŨ^ĩuk{käHķˆėK7œ˙oiĻ˙úomxiZũĨÚ­ĨęÚ]…Đî×ô;U´Ŋ[[VŌmtWm/îÕvęûKoû 'ém]ۄ;Km[K†“i]ļŠ§jž›a+M°•¤Ž”:ŌmXkjŨ&čT:ÂĢhm… Ĩ!PÛ x@ˆī0_×ûÚ˙u§l+`@í&( Âl0Ąƒ ĻØFÃF6PœS $a¤ØFxAąA0›Ž˜§„GŌi:8í°Œ86ÂQPÖÂ0ãM† Ļ°ŌO´ƒa-´tÃĶT‚zi„âqđ×a…b‚ka6( {A„ģŒ&›GbĄ„ĄÅb˜Ļ*(8öŠ@âqÔSÁĻÅz a˙˙OA…ˇû†A‰âÅ,đ*ŧ1 ÖĶbšb°Ä-Ļ*Ã˜Ļ­ĢØNŌėR†)Šļ)ØĻĨ@¨ĻlVM„›M1LSąJėBh&…nŸ°š•bÄŅk•bŸØ[°šéŦ0žšÃNža Â &ƒ *•á„í4ÛA¯Iß˙ˆˆ†‹( §64B" ˆ`„DCĐ`„0„0‚a0L!Ââ!‚ !ƒ4!‚ &„0„DCpĐ`ƒCh0„DDDC"8`„!ÄDGˆˆˆˆˆĸnq؏Ĩ˙_ÄDDG¯o÷ã˙_ôū“úüˇ)ũ˙øūš]wuë˙˙ Zļũ˙„–Đ Đ0ÅzC›įŲSôØņz+ĨøAÄėOAø†"?čđįHŅņ˙ŠĶu˙Õũ{˙˙ôŋ˙\bĢōTe>Cg`؃5d´ˆâ”ߟ˙uČB5ŗąŒ”Æ@q’FdĻķ!‘*#ŗR;Ú Ķ@ˆōî ˙˙Œ,>Ģ̃v¯‡°•ƒ%ĪK˜pßŲÕ|wŨüímyŨŦ;^ėÉ{UœEM4Ūá†ôW,ũ˙œ^ĶYšhʤû^vûŲHēsˇY_×ëļÖ˙ūŋÎÄÂxˆãŽ?Ø˙Š×ø÷ī_ĐĒ˙˙÷øūß˙÷˙;-ŋũW]=Wõ^ŋ˙uøŋĒŽŋÕjŋ¯˙NžÚ_oĶUõ×OÎų)Ō!QIdÅĒdi¯qīķˆ MįC$ GS;ŌßŋÛĻ֓ūŌmu_]×ĶĶ]mu×kŋ˙×ûí[K[JÕŋöŌí}/ö×BŽ´ģŌŊ\*wčU¯úŊĨkuĢĨ}ę°ëʰũϰÖŌĶm-=Z´ÛK{Ŋ´–ÛI†´ļÕm%Ŋ[[KûVûI´4īVM„z{jÚ8ûCîŌVŌ[ĩûCm+ apáĢéZkĄipÕ4Ķ8ĻFÆ‚r  ŦJpāŌĶ6%ē  Ö҇ ĶØa&ŅŨÚąM¤šjÁ„‚i|?ŽL'Ga(DqB›aB›„m„ē Â#Á&(&ƒb˜Ļ8la6( ÂaAļQēxL&ØA1ħ„ ŠAąÅC ą)ėSéCbSŦ' ƒm$MŠlJtÆĻ*āˆâėRiϤ^wŠĻoĶHBV maŠuÚi‚.;[b*nÅ1W\m1Ēi†+žxd¸?×M4!ˆXa3Â`ƒŽ›({M 9N 4ĻĘ4A… σ聂 Ē Å¨0X†˜ĻƒL&šØL*Úi ÂbŠĻšyP) Å{OĩM0ƒLi„HCDXƒDD0ƒ Ļ„\D0„0N"&„0„D0š ÂaAi ÂÁ†´Ü[ņDDDDqDDDDDDDDDDDDDDDDDDDDDDqŸ1DDqÛÚ×ú×ũ†ķą4žŊ5˙ą ôëũ/˙ƒ ĩ_m$´ŋ¸ęé{`ę+ęŒŪÂáˆB×ŪÎĘđ`ƒ^#õ ŋˆ˙Ú]ÎÔ¯˙ 'Ō˙âŌ˙åÖē_Ĩ™‘ADØČ˙–K#°qØ2"Ļv6—Ū™4<ėhÎĪäz;-; Räh‰)g`ÉIXĘ4Ė‚ŲĄĻūq%LJÎÕ#Ē$EAŲŅ„aÚώÃwđpÛŖpŨįwø"ĮÅ.÷ĨIT ˆđFvƒ~ŧ>ŧ2\0DLĖāáķ°Đ|6I9KAܘIkáŌéõé%H6“aé6š*YU_ī´$Ķ´ßäŅ+īI?Ú¯øAtąÖ´›§ĻéēņŋÚ [ŋˇß˙zëŋ×õÎ$Az jž­­­í/øõ÷~ß˙öé=ëâũ%õõŊ+ũëQë˙¯˙ũŋz˙_ķ #úvžļ•Ģ~ŋĒ[ë÷ú¯õ]ú˙zĨ8ŋõVë˙ÕZK×ß˙îqŪŽŊ*úÚr’$Ų‰ …GL‹ĮGŲnķ˙]|ëtĘĸO 끙"ÍŲ×T‰<Õ;Í%:_šaĖeÖFŒÂ(<¨3™™ÂeÖNČoŪÉ|f`ą(3ņüņÂ!`ģ,2^0œÜHA˜DXvhAĸ¤~CĢāˆpħÎÕVˆ˜Jaž ƒD!‚\8g iäĀsm„ķ.G ­/Ö˙Ę@áaäÉá8 š0aG´ gĖÁa3älŽ `SQœ3 āę‚ ēņL ]xA„CĖ3Äaũ„h3ć DrđƒĐ!ÜC ˆ÷Ū˙@ˆî āMŒíO0‹vČ"ŨééūđĒvQ§ŖãtkaÂ0í!Ņđhø7mÚ=Œ9ĶFļöŽėFŋūûdg60m‘7L2ĪÎĐAŊFčtâU†îĐa6éč×GąhøÚt{Ō47ÖŨ?ŅąÄņFļ>toŠ] žnƒˇHØÚa5„l= œ2éG† ‡N'v‚  ƒĐmÂ60e‹Œ`|DmĨĨ‡Iļ!÷ztÃ¤é;NŽ=&Ũ&×˙˙’´› 't{oÚˇ¯Û¯NáÚh;ŖÛcĻéÕÚ $ŸĐM†YĶaĶũ[„ÚMģÕ:Wŧã´îšŌm&öúm§kĻŨ~ûõnŽ>žõunĢœMĨī¤Ũi?ŋũZžéiqÅu­˙˙ũīũi^’wĶöîõÅ>•̧Ŋo¤ž•ÄãūīŨ&ũ÷ū*ŋô›KŪ×ôĩâŊúŌãëũÖô¯V˙‹iv˙ī}ŋĢ˙ˇM:˙˙úMĨũkN—˙÷^­¯ßˇŋŧBIˇú¯˙ŋõ]&ú˙˙ßŊ[o˙ÚúūéĒž÷ßĢ˙ixëūūø˙jũ–ūŌß˙˙Õŋíûũj›¯oúëס­ĩē‚ũ.šũŽ­oÛm×ņj˙õöúôüĐ"] ļž?[būˇ˙đÅpūëa X~—ū?˙˙˙ë×˙˙ûŠ˙˙ūĩpÄ~ĄŒÕ˙ŧ~‡˙ūųÃņ˙_éŋī¯[āúūˇ VŋWūqVÁ˙ō(žkŌú˙ūÖ×˙­0Ŋ ũ_ßÖūà ڰzw˙ø]˙Ō`ãü/ņũžģÚá…ÁúÅū Á…ĩ˙ū'b@û˙oa°˙¯×˙ũqĮ˙ü}‚˙û¯˙°a}‡ĮĮū˙øĐ"Į˙˙Ú;ũĒĻīëĨ ÃX˙˙ūû˙ <0Ã&˙ũ¯äÃ.¯˙Ëá˙ë˙ÛMūß%#Uô¸˙öá‡,„üŊ5ąŊŋÖōuCž]_¸†Â ×˙ū8?ū ⨝˙ū ˙§ßëú˙ü Ŋ˙íü@ģ o„<ÕĘģôŋ˙Lô˙ŪũiZŋX?˙á,/˙ųPŋûÁΖŋ˙˙ēß˙˙Ūžū—÷^˙˙ƒkēƒúú ŊŦ ođ—˙ûülwˇ” ßũ|,æ Ĩ˙žNŋûŊyŊķ{f6˙ŋßüŦŨ>ßûųåūs˙tŋ˙Š˙ē!Xtž7ßqũũ/ũwī˙į–yn˙ÚŊ:ũŊœ_ūŊé{×ßëû˙îû˙ܝ:˙_īéi6—o˙ŋ˙‚)ę]~ēŋø#ŋî˛ûßũéz^]]?ĨŪŲĸ˙.ģ×ÉÖ§ŌģūŪæ‹÷ũŗEīāŠ{ę]zÚõīîŋ׎ûĢ[]}Ō˙ē?>˙îgŲĸo˙ũŗ?mūŋ˙¯=Ũk÷JŲĸ÷4úŖKK_KKķÕîŋĒļ•×kjŪꜝßkŨkîŋëÚęģuî—ūũ´¯ŋzŊŅĮļ“}­÷û¯utév“a-´Ŋĩí-[ĢNŋ÷I;í>¯ím&ŌÚUM-öÖĐ"=­ÕĨއ~ĒÚMöƒwK­ĩmVøjŸ $§hwV‡é6mSōKxi&ÚA4á¤h4ĄĨaa°ÂMŖŽ h6ŌM4Á´“l$á&ŌBxaXkM6)a„ļI†‡„Ķ‚/ĢaÃtĶNV]ĨŖ¸§´m„˜Û Ĩa0•„ađDy& ІáĢ6%:b˜Ķb›GpčtÃI§ļ D}Š„đÂQI„b‚M‰ĮPÂLJxL0k‡WīĪ“ WÎâšāTđ)ˆ[Å=ĻÅiϘbŠb˜Ĩ BbVŠēÛ°Å1M&žÄ&+ĶAĻĻ+‚.6*¸"ãĶ‚Å4„Å4“Å5ī* Âöši­Ļ+vœ1]aˆNMJA­ĻôÂyėSL-ˆM0š˙ˆˆˆˆˆƒCD!aˆ†ˆ0„C hDCDq B4 •ĸƒ Ä0ƒ §Âa4BMaˆˆŽ"8ˆˆˆˆˆˆˆ†ƒ(pB""""""""""#íqĄÄDDqņūŠuķĩUĨ™R¤ŽŅW¯ÂõǤšĨĨŦ×é-$´žXîĒQĮČA˜‚0gÔ/Å ŋvŸX"qņ ~ĶM­~>īÖļ˙ßÛ§áõŨuá˙Öõ{ƒ ¨‰gōē’;:3GcyŲb.˛¤ŽĶæT3°qØÜvSåA‘<†2Hd§6D1ŸŒˆ#ēĸœ˙ZŪĶM3ą„ƒ!aĖM4/MNÖ]„ĘTiíĻĶè{ŋāˆ÷đũøu$đ}SÃŖģMž>ŪÃûuŽ1ëß>škōRŊ­ŌÚJÎÔûūŅŲҚsąO}[Žv¤Ŋß;Ø_†šũ­Ŧ…/˙an׏Ž˜ūë×đƒĮÄWk˙O×c8§؞Ÿ_¯Z˙Š˙˙ûû]Å$húZ˙˙úëū¯Zû_Î.›Ō¯˙ŋ_˙˙Ķ×ũn:úJDÖĄ>Ė…Qk__;ĢRĸ$šŧģ%>QÉėœŧ•3A”(<Јļq!L4ÉF"­”čͯ´ŸérS36fŨP")É9ĀĻ ‰ƒ0gĖáBá':Bđ…Ņō>EŅHÍŗĖ336F f `ˆ§žažF*ĖÁŸ2r3g"f`Í ÍlÁŖ‘Ą“™„pÍ 4#ænD BdĻ^A;/ Bd~N˂ėŋ1„BÁ:|Ͱ‘ŅÁ›D ĩĐgŒÛ0@ƒÂgĖØÎžl™‚îh‡æš„ČØŅČܔ— ƒ6FČ Čéüâ˛3ÆaĸŊ­:ąUŖãôÄQņŖ@ôŅĄē*ÃŋGąŨ{„hƒA„|vč4hiŖCŲũéØFˇ„éđl#@j áÂ4ŅčÎđƒ]Ũ§Ú QĄéσ0˛Cđ‹†ábŨįž„ĢnžcFąŖ[‰á¸vđcwF¨bÃ&s[GÁŖcviÃ&zhÖŨšėl‘ĪĶFŖ[tŅŗ¸ˆŒâiupáŅĮĢtG€Â ļaÁÁš—e”ÃĐpÚ<4{jØpčđÂLJmoÃ,á7ē=°é6{A ôÚM†)°ö“icH63 ™tÜ8FvhŌpčãÁŅâoÃBÛŽ“´ÂIö›tqá÷JLzMĶmģôáØ„é2ĮM$ÚžØiĒw‰áĨ¸t› +a‰V(6“nģüDtīzīKŠ~ŨßŌ}ã÷ŠbģwŠzÚJ÷÷Vø§zģĢxZĻ“´îŽ=/}-+búžŽ=➒aé,SĢūÛOģÖ˙ą[¤é4Ōˇ^ū¯ĩŽ:ZZ_uôé&ūú^ס­×˙öõĨ÷ũžžŊWūûŽŨŪ?ũęÜu~’Õ÷Ķî“}úWôú\oNũú_{_ŋWúũ{u˙é=~ß­˙õūûûuZ]=ēķ‰˙ĻĢũöë˙ūZ;žīßVēõúMõ˙M:ë¯^Ōûëũû]_Ũ5Õ˙÷]í÷ęô?˙Õ˙¯÷˙{͎īÕõö:˙ķą Æ?ˆė1Ģ_˙ąßøcö˙˙ ˙ëxõõßĐü1ũūčũĄü5ū˙ z†&kīéũ˙ß˙×_žŌ˙WÖŪúīâÖÖõ˙Ø?ūŧBõŋV!ú˙Û^‡ËŊnO˙ë˙ë­x…ūũƒÕƒ>'˙˙!dq?û˙ī˙˙]ĮØ?é^.˜?Ž VĮßėŋ°‚˙ūû˙˙û=øØ=x˙˙˙˙đžŋ°Û¨ūŊÔW˙ë˙×ūģsŽé˙ũ‡ūëJÃūođ‹xaü˜Ē˙a˙Xođ‹ú^¸˙_˙Ũz$éūЇ˙˙ŋĩû˙‚.?סá†~ūŋÖ]Gu˙˙ûúūū“¯õîęōę†ūvĒ” _„ô˙āûū ū‚˙oô˙˙ôëđ„–!ŋ˯˙˙˙ū‚˙ü•ŠÔĮ˙đŨb?¯OūØKũŋ˙ũAŋ˙đo÷Ĩú úîŋ˙ŧđ—û %ĐK˙˙˙¯đ{u˙õ¯ũkôŋÞfƒûņ ˙˙ū!a?û¨â—īķˆ˙üŸ˙ēūšíũ˙\ō#īįį×ú¯¯ī˙ū˙õÜęƒkųå˙¯ŋūžyzųWŧUŋ×ÚŖ8O˙ŪŋŖ8^û˙ŋœ^ú߂8˙ÕũūĢY…˙wßëˇ˙ZoúŠuú8ĪŠuāŠūõąīw_~ûūģ×˙×ũzũ~ūūŋéNŽ­}˙Ōz×Z¯_ŗ?÷÷KŪÍyĪįeUōGāŠ}}™˙¯W_˜ģī˙˙×_ŧķũ/ũ.ļĖ͚ŲĸˇkėĪû˙˙Û˙õ.ŋoûŪ×ēÕ×ĩŌ×íīm&Õē˙m-ožëÕĩî“č‰vģOÕ<&ˇûiZ_}ūˇ¯ĨūĢũˇZöŽ—~ßŋki_ēé&Úļžõļ—ˇī_ö‡i^—ÚÕפģk"čÖ÷ũîû‘Jš_î´öÚŽØJ҇Úé>žÚ­Ē}„^ŅÜRh;mqPŌM6ÂÂ#ôÃΤ›„ĶNĻŠļ‡h4Ų CJ8ôí0šm¤ž›a ØKIXa(kčãļŌTė*m¤šjšŌM4ĶÂ0ö4à ˜AÃK†ŧqB!9ļŒ8rq #°”JpÂa6Â3°˜A„Ų,0Å1)Ûē ÅN)Ї &6$ƒA Ø„ÚMtĄŠ¤Ķ؅Îâ“Mˆ[Å[PEÅOÂ4ŲN)4qMÕ`ØĻ)ĨÃą]ÚlRIąLT"ã„8ŠN( ÃlPAĻÅ!üR˜AĻ6)AĻ›šiX¯•š•´ûļÕ1 ¯ØŽŊ†Ķ5†ŸĻˇ 5ʁM!}W< ¯Uė&„CA„B !aa„BÂ`„0„DDB"M‹a„Mi„Xˆƒ\A„[ĄƒC ‚ !„0„DD0„DCBB ˆƒˆâ""8ˆˆˆˆˆŠb"""""""!‚ëâ8ˆŽ""""‹øˆˆŽ"#ˆˆˆˆˆˆˆøEŅ„Yãû˙Aúč=?ãŌŌ,šĩ×_×Ĩë˙é:ŊV×ôļÖ_ÜSa„´âļ š+ʀæeĐaˆX@ÚÎÆ† ē4xøŽ#ˆø3 ']ũ[~vS˙ũ^•‡˙ëqÛ˙ũÖ<›ÉĩYeĄ>HdОŒŅ›1—EŅļU §ĘS#3Ŋ îãšäĢ;ĐÎÂ_ũYdî„Brˆ•æ„fŲ#ЉÄ(6!y „NŌ— HīC!σCŠ€ØŸi§ĒiŨūŋĖ ŽļD€ÃŖÃÇOēˇ{`ÂŅ†’RP[ÇL>˙‡×ũáģ@Ū mÕw~N͗ȁ8:ítĄŽ¸XwÚ!iķ¸NE˙Îí˙Đ_Aļž˙hŅ{PˇüíQ7Nv|ē#iéĨI*ßÚŋiĻ•Úũõ„øīĶãī˙õöŋ_ūŪŖxū":ūÕ¯īŊE~ģũ}=YCįū>Ģ_ëĨū˙ĨĮ˙˙˙^qčãß˙×˙‡~˙÷Ž˙ŋÎÂī˙õ˙˙ûũ}ŋũŋŽ×ũWûI9Ų^ƒ˙˙_¯õOëÕ}-:ūũw{Fō“?ŽUė.D0¤ĸ;øéŠ7%â5’›ĶzčJŽT¸üHp čĪ'#oŦ؜"ƒ%؃3g#1Ÿ`Â!|’%Ī'2 gB6Ī‘Ą›3wį†|f` ĐÍÆgáŗ'2đķ2 ĄOk’ f›6 ęyŧҟD†u0ˆKGG5 ƒ>‹ĸtN^j3`€ƒĪƒŨ¯Ãž @Âaų0gˆŲ˜ ƒAĸ%Čh…Kƒ#ä3„|Ņ äL'„ā™˜0ˆ|—$â0ÂBA‘˙txˇáaßhđ¨(Fļē]á´xĶF‡öŦ=/a/ŖØhö`‹‡á8Ŗ;ũĐhqøF€Ķ0š;’Vk =ü 4x@ŒF€ĐxAĻ.A#ׁ5ë>hWl‚4?ļ‘Ąîž"5„FˇĄē4 ‚Ķ{MĮéŖpr1ĶŖØŨžpmŊp6´Â47A„ko=Ä0˜"?8’¯QIŊ‚ ÛA¨”?K“†)°é¤Ų¤¨›ˆMč&ēąĶnxzA°Ķ0•ÃĒAđË:ptxhđŌ“ƒ,úA´ž&Â64%;AĐA†g.aīÜ2éŌ ŽgMá‰Pū'‡]6$á…Ą‡ JēLąá–q=ģÃBû†'E~Á˙¯Ž>ũ{ū?×īߌÔũo”īëô?Ø0—ŨaY€ÂãûÁĮ̎˙ø/˙˙ū?úūũ×đWØ}{Á˙¯ëĮ°8ŋÂ4nJÖûuŋõ˙„Xūü"ßĐEŋûöũ ‹{ßõû`‹w˙‚3Øm‚-˙ę°Ö?˙ˇ˙ōpqĘûKõ$7ûKúūŋEŊpß~ÛŨ%Ē“ˇņwđ‚åģ„7{Ĩßķ˙ް‚úåˇ„ũ~ž‚úū]Đ_ąXK †Aûrëāß_ū_˙ˆū/ü/Û˙ũ´ŋę ˙ƒ`ũm¯đēÉŋ_K§¯áĨ˙˙ŋŪ_øAvAī]7„ŋīø6¯Ũ Ĩŋôt?ÁŊũ}Rũ˙˙ũŠõū+õŨÍā˙æĐ9´ ūÅ~˙œA˙ū—Ũ¯Å˙×ī‚)ׯ¯—˙øõ^­|Oß7†ë˙K9ļm:]˙gÍ~ŋÎ/Kú÷˙˙ëAgūŒág?Is‹Ûëíģođ‹yúo˙õ÷ŅÅũūŊzŨûú5Kūí^*Ŋ˙ŋ˙[.”ōë_unˇ˙ˇo<°@“˙õ÷Õ˙÷_F˙úCõųußũž˙Đęˇ{f‹ß˙ú—]枖ē^­š--ēīüēëŗEY~ŧŋųõOTūaˇMšßû~ëāŠv÷ę_Íé^æ‹IŋīõÕK˙žæ‹˙û3í}×˙žŋ_Žū˙ĢŽõŋÛ?nģ{˙ũWm´Ŋ}{[[÷ū×UŌÛ[ZM°~ƒˇūĶ[uí[Kû­WUũ{JëŊĩûNû_Ö×}ĩÖŅĮčRęĒØ_Õ{mzáÚ¯kÁÚÚčvĢiz÷Ļ—öëî—i]Ĩįfŋ´ĶmqŽÚJš ‘ “t6´“´“VŌĐīM°–ŲzkéÚNÖĨ´qŪÚMޚŨhU¤Ÿn‡}ö…XIwFi6•­­ŌtŖĩ´ˇTÁ\"aa¤A„đD?´Û AŌAČp!H4Âh0›!†Aą8ö4¤iφaĒa0ƒd8 ƒMŠMž—4ĶbšA lPBl!A6!C Tq lP"cbSŠP)6)‰ßĨĻa‚ÅVÄī@ØĢãbAσ‚/bSØÂ  @âS¨a&I‰O PMąLS‚ ІÅ1ÃbTU 4ØĨĶû؅ąJÃi}xm{ ˜K;ŠûšÜTãŠOXmjŌa…ĪĨ; ąa4"B &Ȓ ˜[U„ ­aXaB &M´ÂtĶ%XOL&„4Âà „Âa! Ba4ĶîĶD놨M0ŸaB•bh4ĶAŠh]…´Ô&š !q * !°ĐˆˆÛD0„0„A‚a2ŠÛB!‚ÁŠüė§Aâ"(žb"8ˆˆˆˆˆˆŠ/ˆˆˆˆˆˆâ"""""""""""""""""""8ˆĸæÅ8ˆˆˆEÎ">•Qã„>@ū‚tm ßúIžžŸÕ˙˙˙˙˙Ĩ×Oß_ēīöÖļŋÛIvÂIļՆ  ˜2åíØ¤°ČM……āÄ bbÜkãûũü<ėĨzøÕį“qU™Gb™6Eos˛LĪ;KeŅˆ“ EL¸ĘYĪ;š˙ â$XÎÖH‚å>F˧™Â? ėDI#R*ō&E<`°ƒ1Xg,ĘÁ›ˆ2:&! C˛€ zkÖ!Ų@˜Oũíƒa7[uF˜@Í0ęģŖX5Mwm‡uGÁũ0Čđ0ā –áīã0ԘNĐGpF0mđáÛJÜ#šáŖ`aÃ}ôé<%áÜ7Đ0ÃŪ@‘ÛĢv˜nUp͆đīų2Z÷"ęéÛĢŨúĨzvĐMĶīé=Sŋūé=ík´û˙Mŋĩ˙˙ŌÕ%ĮÅ_KT[ĮŌliÆąūļõ_~›˙ŋĮî?˙Ē_û ]?J˙W]ZųĮûûë×˙˙}uĨõßņ$Å0ЉĮ_˙˙^ø˙rŸß¯˙×˙ßū˙Å~ІŨz×˙ûß˙¯ŋ괗ëú˙ÜėŽ=k¯íá Íáē -Ūõŋ×˙û×˙UI+Éo5%ü‘‘müíQ˙AĨ„ō Âdĸ"rŪ+˜~F‰KNŊŊ"wxëų‡äÁ˜D HŒÎ†H{šEQ6$6SĸTĪvB74~ôäƒ$ Ė.Ī.d™™˛đˆw'eÁ<'Bn{!CY"ų˜ĖÆlgŋá gĖÜ%ķ1LĖÁ‚y˜ü‹ƒ8ffh3fm„ÁTxĨČ\— F†ˆQ Īƒ=ŋĶ>^lgĖ Â cˇôˆAϰéũxŸGœ3c8fĖ"Įff0ž!@ŒŲ‚Гkukãōxë˙˙ëúĄ_ãū?˙áē˙ũ[Ž+zØv ‰ßOü1úī¯đo|˙¯ũŋ†6>?˙˙ŪÆ?L:ŋßëéąŋÜ˙Ã_—˙X]VĩyOîŋũ˙ī“ÁŗIÁ‚˙͋°A}F˙ž°˙˙×ÚõúJEX.˙˙×Áđ`ļ°˙ū ë‚ũ˙ÎÕ}|cø˙ößī˙ëũá×`鰐lWŋí‡ø-|nu_øoūģū?˙Ô0Øw…˙ũ˙Ø{ 1īL;o˙˙°DĮ˙…˙ūŋø]÷A|ēŋī˙˙˙˙†˙Û#Zž˙ûáŋŅŖü´Ÿ˙5§˙˙ųpŸøđEŊ°ßA˙˙Ŧ7†Đ]áŋ˙—W#_č/ü"q˙˙ņøA„īų({×˙˙˙{udžé?׋@ÚøA×˙÷ũ~é|ē˙ĩi`Ø7Ē ˙˙ûÁŧ-Ôī˙ô˙K÷Đ/˙˙ū/ôŊũÕ}ß˙õ˙˙ãÃĢ˙_øoôŋ}ŋ˙ß˙Øa/¯˙A8lđ—¯û˙Šä”ŧ/ŖDX"Ŗëú}ļ‚˙Uū˙˙ø_<Ŋ|ō˙ūĩŋũ˙ëûüë†˙ō˙ōM>ē˙˙uũ˙ū…}÷ū–y6Ÿ¯ūŊ|ōũ[Ī-ŋŽû×īë<ĢŦÆŋúK˙ū˙Â.?˙ūģ˙˙ũ{˙û÷×úÕ¯÷ˇūa}ÛĢ˙wÚ_čÅ˙ēîęļ÷éy~éũ~˙īûë/Ŋŋ}×NiúųŸßå×ßå×˙ļgö—Ōû˙RûjŲĸ˙?°ēz´ŋŪŋ˙ŽŋiUŧåĨuũúú÷ššsDÚZG˙í/˙ũÍ?Ī_^]_yËK_]+ŋ×uēĩ1u­Æë­­ß $î=WÛ]WĪUũĨŊ}Ŋu×CûKŨBúŨũ¯ļ’§éũ×֒ēôˇŨržēkö­Ģ{zë˙Ģ %mm:OCM+¤Õ,!WMĨ…û^ŅĮŪÚ§ l!ÕĨ´Ũ]6’ļ“­§Z›­Ą÷vēa°’ßđcx¤ĶmÔPl-§hãģaá'[A&šh6ŌM6ŌŊ4ļ–MáXkŌPDy$Ķía…†ƒmqI„à $ÃI°“ih4ÖB#é&§!Đm„“m„›ammpB˜œ|I†ŦN8aąAŽĨÚQ8÷†¤ė0’GŠ@ㆂ AģŽ‚ 6҇ ‰N‚ 'i Â 8Â!+áŧ:vÅm1A˜b­Ã0§A4ĶV)0›A„( đÎ⃃ļ+ Rkʁ Š´âļÅ1L$ÅjšsØ0]ŠL Ķa‚›ą8ũ7Né‚#‹)Ä&ĄSI1LBiũ­…ĪšyāS ŽTOLSA„ÖÂbŸi„ūÄ-¯ûß *a|0öˆ`„0ƒ" & Ã0¨0„DCD0„DDD@Á Ž"B!„  B &„DCXaŸCb!„!„Âq ЃO! 0@ÂDDD\DEĄˆˆˆˆ0„D0„DD0B"Јˆˆü7ˆˆˆáĄDDqÄQ>b"â""#ę""˙ļ—AKŖą Kũ{zOéŌ_ë˙éi}|ė¤Hm$ŋI/Ö#I°Á*Ŋ‚za„;_üGėhb8S˙”8‰Ÿū'k(Ō#į#ŋū""#ũ’„dĻ[힐|¨$˙íaÔū;ŋ˙üė__ø˙힜Ķ˙˙ßû_I˙_˙úūeˆĄҚ<ˆčō!Ŗ4yŅäuG‘Ÿ˙<‹ĸ‚4DxÜEŒÔgC$^A™´}“ĸ‚!ŖÚ" ą‡6~v˛ŒĐ—Duᄉt%ĐAfĐAa‰tB]ŅäBY´!#¯úŒáƃG‚g3° ĖĖ Âčîõ8A&L EãäƒU,ÃTaōé:eŅ—‹˛<\9R84BHėr<0b!7ˆ‚FÂDX‚ˆ „HøÁˆ‚ ŋáĐAÃŖÃIŌ ¤čüÃŖģA Ô6“aĶ ˛l8GdJˆČ‘Ņtg‘ķDG3üŅDxō4ČųÆlˆčŽeŅÃ0ŽÄtG͑R:4Œ2>}ˆņäjfhæqō:;Ģ;XD$]č"ų­ōų´#Æv`2āÁ#ƒQ)dpØGÉŅä,ØqĘÎI0Ė1#ŗp‚(p'`Ä\(p…”9S´ŊÕļ)éŌ´­oH:]1ž­ŧãŨ+~ʰ(‰tC„a>GO„pApE\އx„PāˆčŽ‚)Â#ŦŽƒ‘ĐAb]Đ^˙õu{×J“lUîŋßĨõÅR f ÁCŖ–ä €Ō9ÃJ 9C•dcÍr Î[‘ŽqʂV{;”9“™Î9XPįƒųc”9āĒƒŽqÎ9T)YNPeyEUžĸ‡7”‚‡3•B•ž J4ä įsŽXäS”9Į(sŽWÎįâ‡(r+•fŒ ëÔŽņ,D ˇ,6X‚ ‚đ‚đ‚÷ņ ĮF_ %úßÛĢjŋû˙üWĢuŗ€Áā…ÂD ą#á"ĸ( Ŗ ‚ˆAc8‰xB ‚Å”8X—Dubŋúėu´ĩÕũ¯ņÄ ‡ö( ēXĻ"GÂYC…Š(p˜B#p´!"Â!†ûũ¯ĩī×_ëø„C„ FÂHėApŒh Ŧ!!fâ‡*ĘĄÂ.‚(pFĐA#ņC•eUõũ‘Ņ…Q˙ķ‚˙„ë´ü€Äā‚ˆF@‡ĄÁA$1 B ŠtG@ ¸ŽGτA˙Ũ‡˙úūą˙Y!!< bDB ‚Á”9X—„|B hŽ‚_++˙øn^ŋKņ ųiø#â0‚b•fŗqC„Ę!EWއGÆÂDŽ‚D§ũ˙÷˙˙ôâW!Š&PåPáĐAvX—„KÂ]!ØA—A:!+0‚Â0ŋ˙‡˙īôŋü€ČŽŒB A÷ö_Ž‚(pˆëāņ†%ėB č ˇ,Ž„ ŋúųMû×ŪëëųÍũ"ėE!°”EqdtcÃ…„(pĄˆ‚Cˆ(„˙úí?'VhŋŨZĖ/ōuę( Q ‚Ã#ĸ: ˜1‹0Ė3X°…†ŽŒ@ËÃy\ŋˇ]7MĢĢ˙¯ëĻŋļžZĀH(#áķc_]På:# Š¸E#YC„Ŧ6 C”áŅh ?Ũtī´›JŌŊŊĩm#ևÚV—ˆŽ": HĪ Hō#ĸ<ˆčō3EŽ":<ˆhō#ŖČŽŠäO™ĸ:6":6ŒŅG‘äyĸ!ŅäGEō'Fyš ŅĖō#ĸ<ˆčō#ĸ<ŒŅäFŅFhÍŅäfˆhŽ#ČÍG‘š)ŅHˆč†#4GG‘ DtyG‘G‘D<‹Ŗ4@‘D<ˆčō<ˆhŽ"#ŖČō3D4fˆ„Byĸ„yDtyDtyŅB5ĸÍŽ#Ȏˆhō#ŖČō:ĸˆhę":!Ŗ4yŅämŅäyŅä]Ŗ<Ž#4CG‘FhƒG‘ŒŅ(D ĸ<ˆčō<ˆhŽˆ8‰AD ą#Â,c\AE”9C„0`ÂøA8AÂá‘Ņpƒ °ŌNŌ IŠ ¤˜AļŠpÛG%:a įDGA‰tCdtyŅ´GG—Dt¤tyķˆōČč!>zÁų´$|Ž‚ Čč ŧē!.ˆč ŋ.‚ ˛:, °9×y{ <ē, „ „ „ē#ŖË‚.ˆč ŧŽ‚MĄ#ŦŽ":<˛:‘Đ C‘đ‚‚ďˆš!,Úč „ē#ŖČŽ":6ŗ4GG‘u‰ !Í ‚č ą, ŗh „ē!.‚ !.ˆčÚ#ĸ:Ččō#ŖhÚ#ĄČø „ŽˆëČčHųÄB/,Ž‚ /, „K ‚莏":6„r:ΨÚ#Ŧä|ôaXŲ›A"] tGA,ĄĘ!.‚MĄ.ˆč „Ú莏 ‚Ī#ČHčHęÄ ˛:!>8„Žy—Dtydt"GF‹!č „DBMŖČ „ē#ŖŽqA „"!"BĘŽ ‚‚Ä „Hč ŗh O‘Đ‘ėœCâGEЗFhKĄ.ˆčō!čÍБŅäf„DDēčM ‚/DtyĐ@„Žˆč BGA&` ž%ã XFX2:#ĸ<0fpG":ã„G@‹":0~^^>]ŧ~ļ!;R Sb¯`ŨŠÚÃTŽÅx˛‡D ąA‚˛:,K ‚‚¸AD …Čø—‡˛:AŅ+š ģ1bŪ!åĐA ‘иøA„%ŅdtX„?#áGI‰tBc!Ä „K ‚‚đ‚Ä „KĄ.‚BDK ‚.„ ŦDB r:#Ą#Â!Ldt&ĐØA „BˆAˆ„ØAb]‰Ô„Yt$w‘Ü1AfÁˆ„ ĸ 0b,B‹(x—A,Ąø„Ė":;\b] Čč(‘ĐA ņđc%á‚Äē!a ´X„›FŅâsō„"Ę₉´$|K ‚‚.™C…ˆ„ŗĐ!čK ‚ĸ]„‰tBBB&Д!ąAB]—Dt!&ņ,D š0ŒŅĸ#â]Ķ*˛ĻVĄA„&Ņäá&БГKĸ:<‚B č „KĄ.‚Dē‚>BĘ,{h „BMŽÂA"!„"m t&ЗA&Ņä"m A"m tB\%ĐA‘á ˛‡LĄĘøaƒ7hBlŽ‚!( ĸX„$| „ē,B ‚Páb]„PáPā Š¸Ab]Hč"‡]$tä|{ČčN(pŒ0ä|KÂ!åĐE@1‚Ä(2‡(pFĐEXbC‚6‚*ĘĢ‘áÂ+Š  ō;CÄ":#ž Fņ "‡Ž‹ĀĘŽ ē,Hč"ŽŠ#"ŽC‚.ˆč"Žņ˜H ˛w„Â,Hđá"GÂK؄‰tBD ąÄ „K ˆAXAc„pEbãÃ>X„ˆˆ‚ ‚đ‚.‡!‚Äē!!čp‚ޞ:ą‚   „ „DBEČč ą,MŖËÄ „r:ņ6„Ž#„„á8‰tBXAîGCØ@œ!#á ‚đ‚ŲC”8C„áŅtB^BXîGC‰l-ď„„8—B]„!ˆAAøAA ´%Ņb!#ĸ:ČčA‚ Á€ÄAˆQ! Š€ÁB=ū\/ū.!˙…„PáĐE,1áŒBÂÂ~,?ÂGĢÆ1Žp>!ãņ/,l ą‚áA¸Abá!ˆAp‹ ŠtGA8A bGA|/‚8@œP_Œb]‚ŲC•ÁF ‚Ä °ePā‹ ‚ÅÂGĮ!އ Â(‚#„‰Ŗˆ‘ņa‚ ‚Å„,,c,B :-ãÄ ‚ E\އąDtG@C„DB!C" !Â,K ‚n(pX8AbX=…ˆAã#pˆčA8Acˆ ą EĐAnX…ŒB :Ģ„<„C‚(pEŅ" ĸBŽ%ėBÃ.„„—A"X—A,G@ÍÅEˆčŽ‚ ”9C„Ę!č „ē $GA8"莂8H&GDtã….X!Ķ(pˆėŽŒ1ƒ7bC„GÂ*Qf/ePā‹ĸ:&ˆčŽ‚á´GAGA8ApŽ8DtGÄ ‚8áŅ}8Dt ŅC„ŅVB.‚´[„$t‚W8X ‡ ‰™ A ‚ÂE8F0f Š´BÂ/ tVPå\(r¸!.‚$tŽ(rŦĄĪ@ätđđAá8E`BĘ,B(rŦĄÂ,B‰tBB$t!Č빎„ˆ‘ņ.‚ !čK ‚‚Äē‘ĐA ‘Đ‘ĐAAbĄÂ6‚\Ž‚ §ŽˆčHčr:‚‚ņ#á"]—A%ĐE´$xB(p  ‰pVa*ö8A"œ":#Ą†$| …„#‰tBʙC„!Á‘ĐE\Ž„ŽˆčL!#ŦBaâGA""&ĐA tB,ĄĘî!"GB]ø„!áqŠ ‚Ä ŋ1‹0áŽˆėŽˆčĮ ‡GAp‚ ‚#á9VaÂ/BĄÂ.ˆęv¤ģÁ„„1ˆŽ!E”9C„]‰tC‚-Čč"ŽC‚ņ/đ>ø \O„ .Įށ‹ˆ‚8áŒXˆAbeáŽøPáa|"¯¨ķ˙ã„G@‚ûÄAˆAbX‚Fņ‚Ä „K ‚ĸX„Pā‚ Œx žC„GDtņĮđG":.ŋĮÄ ŧ ą,|XXˆAnGA|G#ūÂČ鄸…GH":…„øAk"‡ ”8]â>?°ą#xĮō:#Ą#ÃŲv> ƒÃˆEPáŌ(pxPņ\B ĸč „ē!,B ‚ÁÂB 6‚ pŠtGAp‚h ‡":UāĮˆ"‡ÂĄÂ# A„+ ą.‚*Ę!‚ÄŊˆAbGAp‚ĸ\ ‚ÜŽˆé…bX„WąA‚ Ä"‡ ą.‚B ‚Ä …Č莂  „$tø‘Đ „/DX¨„‰t"B!ˆAb]‰tCâYt"] a#ĄÁˆ„„Páa",KÂ!‰tBĘ,B ‚ÄŽ‚ r:!ė"‡ÚāŠâ‡+‚ ˥#á!ˆAb,ĄĘâ‡BB :!.ˆč °‚#Ŗ<ú6‡#äuᲇ+Š!!‰t[(p‡Äž}Œ1Á#„qÂ# @‚áb ģÂށ8A{„˙üĮ//Į‚{ØÅŽĮŽˆč  áŒx„„6XĄˆ\B¸ŊŒbVÂ∸AcÄ(žÂā:.!Đ.GA"C…ĮˆW# ‚!‚ÄB r:#§ą‹ ØQ|!Čøč$\ēđ‚.‚B Š":.‚p‚ ą,B r:Ä>!ˆA áÁ6@‡°‚Pá„„!#â^X„=õˆč"‡؄1ü °~ /—A˛‡ Ø^X„aÂ.tÄ"‡ ąÂ\ ąŒB ( ˇÁ6ˆ#áü!Ŗa"B!Dq‚ÄŽ‚YC„"X„‰t$tGBGCâ'Č˙„‰#ŦBDēč „BD ą.„ē!6„Ž™C ‘A‘ĐØA ˆAb&ˆAbúBÁÁ1#ĀÆ1a ‚/„˜ÃÄlvŽŧ{û(îvSŖ?üHč"œ ˜^ĐDtC„ŅC„GAáXAŪ( ­ĸ„Pá2‡)ĐFĐAnG„+„h ļQŽ‚)Â&B, ­Ķ# …‘Õ„„(ĄÂ#¤PáAƒ ˛:-”9C„,ĄÂ.‚ ¨°‚Œ"œ/|‘Õ¤B!0b66BCdt,ĄÂņLXB!Dē aāŠĘ$a*"!Â0ˆû‘Ō ´‚aA‰ˆŪ%ĐAA Pá‚D.H鄹Š#ĸ>ätø1q‚Ú(pˆæ1Fņƒ„…Ŋ1.‚ e„(„,ĄĘč0b†!Z# GŒ\]…Ác!ė …C„‰tGFĐA K ‚‚.‚ ”9C„ĐH ąa,ĄÂÚ# ŠæaĐAÂ8áĐ#Ø1#á%í•Đ"‡ Â+"] ™C”8BĘ!‚Äēč „KĄ.‚B(ta8Epb6"]‚(p„ē!.‚ Š#h „ēŠ„%ĐA tB%Đá"HDHø˜ØB"] tB‚ ĘĢ(rĻW8CˆA ‚*ät\„L!#ĄėA8DtGH#ˆHøE`B]„U˜p™C„,ĄÂ,BDēč „ ąč „KãŲXA â]AA—B]‰ty„›B]„—A"GA$!f!Ál8áA,Ø#@`Í`ˆčŽ‚ēĄĘĐEXrkĢ„På9V§A=âÁ$‚adtQdtE@A•7Ž!ŽC„°ž/AöX@Ÿ#č(>]áp‚p‚ šÅđ>BmĄŅ÷#§ČøA áˆ#Ž#A tC„X‘ĐAxAbāÂë,p‚đˆAXAc‚+ƒ#ã„D#ŽŒ`Řp„"‡(„ˆ"‡ÚŦ„U”8BÚĢâGA:ĢŦ_Dt#ĸ;Čî Žˆč#ŽPá‡GpŽU…ˇ‰Páđ‚,K Šâ‡ĄĘ°Hb0fßfA …‚8áŅ!H °‚ÄB%ĐA ą.‚ .‚GĮŽ Š">GA!ˆø„/ãŲ"œ!Æūņ š"‡ŽÄK ‚‚đ‚Ä „ ą/AlĄĘ!p‚đ‘Sĸ:#Ą#ĄA›Dt^XØA„8›CˆAbB,ĄĘätyA:#§#ŦŽ!ō:\Ú!!čK ‚qč „ē#Ą.‚B -Čč!ņ: Ar<"GÂB(đˆøAb]‰tBXAb]˛‡+‚Ä NGA/ŽGČëeWHčHø„øA‘đ‚‚‚‚Ä ą,Hč …Â+‚ÄŽ‚)Â# Ep!Á" A8AĐ"‡ĄĘŋƒ < ‚Ž‚ xŋãÅ0p‚ĮÁˆÄ ŦŽˆëĨøAbXąīâ_âū"|p@„aŒ‰ ˆ—ą,K ‚ā÷Ä ŧē!eWqņ-đ‚Ž‚ âø@‡ąábGĮ , ŧ"‡Ž‚ 1/‚ĮÄ „Úr:#ĄĮa„ ˙čM ‚‚ōčM¯‚Äē!!‚Į č „ē#¯;â"XAc„„8„%ĐAlĄÂĮÄ ą.‚\ ąūŒ ĢØū>^G\ˆ ą/,KĄņđ‚ß!ÜÂņŧGËĄ6ą „AˆAytB!GÄ"¸,Hč"ŽGBX´…ˆ$ ‚ü ŧNPá,=„ņáØEáb\B ŠĢ„ą˙ü „BˆA°Ŗ„1 /b1‹0‚(pˆčŽ‚øK‹âXŽNÁņ #1,YC„Xąã‚ đ@‡¸QAãÁ1ƒŒbÂ,BˆAb^ 1ˆAbHđ¸@ĸÂ Ė ŠY„,.Dt 0c‚B ^ã…ˆQ/„C„ž1# Š¸"ŽG† F Žˆč#ÄA`Æ/„GE჌Y‡ށpC DBƒ„  „B‹#ĸ:tđŒBŽ‚dtG@‚ a1~ ļCÆ/ˆA—„"KĀĘĄÁC!":#ÎG@Š1ƒˆW,ŧTBDē!ab†!D „KÂZ(x„‰ÂAG#Œ1ƒ2:# AÁˆAbX—A%ĐAˆAAGCā؍‰´B"B!ˆA‰tBĘ!‚ōč „K ‚Žŧq>8AGÄē!‚a{YC…ˆAcˆ„%ĐA „ˆQĮl †/aĐ C„„ˆAA—BĘ,qč „ ą.°‚MĄ# ‚h ą>",ĄÂa—AÁ—BGbÂ,K ‚h"ō(Åņac ‚,XXŠ„!D§ Áâ !ÛKø0Š€`Ä(Á› ˛‡*âÍeÄ(ąlYØA Dã„‚0Č莂dt°ą ,Ž‚8åEî -„ÍāXAX\#ŽTˆœqa #ĸ:ņ#°F Š":.‚Y¸!f#p3XB$v ĄÂ.‚ƒ5ŒBl";\Ø˛:# Ž8AZ# `âŲ‡ APåtBá´G„B ƒ(pFābذļGDtĮ ļ!ĮŽ‚+…ƒ# ‚# F‡ Nˆč"ŦF „6öˆč#ˆ ąa ĸŠ0ôPáÜ(1.‚(p‚+`E‚0ˆčKĀŅļW.ˆėÃbÃ>B^ĄÂf°G!/ EUŗŒÄ! ΈB‰œÄŽÁGDv,HėXB!‰tB%ЗA!‰t\™C‚čē„GĐFÁ‘Ņ´B]‰莂 ‚ÄMĄab]ÂYC”8BĘŽ*hâAV) Â%Đ‘ØÂ ˛‡Dē!/„!fEpBb‚eAC…„|“bA"‡ .„„—A„,ĄÂ‚.‚YC„!"] tBB"]‰|苧#Ŗ<Žŧް‚#á! ŠŽ(p ‚,B(pˆé y2‡/„q °‚ ‘ŅØB8A Į!dtŗŽČč!g4PᇎåÁ›‚\Rû ã„G@‹";0á(r‡Ž‚ ƒ• "ŦĄĘA`ĘĄÁA9V ‚ ‚.‚5đpė,B# Ŧ"<h ą}‘Đ[•áDĢ0á"‡]På\ …üpŠ":ĢŽãîX8"¯=âã„n„øÂ+8A8@ŠĄÂ#á āʥ¥ʲ‡*áÂBĄÂ# Š§A9C‚ o„S ‚ˇS”8DtW„B8á(pˆé„^ŧqtGA.VPá`ĘĄŅPā‹ ŠĢ„ņapŠtGBGAáÛÅčĄÂ dt ŽŽqĘĸŦÄÁ˛‡(rĐE„kBģ„På:,"‡,N8DtDtCœpˆčĮ-ˆÂƒ#ĸ:Œ—A8A8 EU˜pEĐAb]U”9C‚ĄÂp‚˜ApEUÂ>aDđã„"C„C‚6‚+Šā˜B!8#h"Ž\Pá t!ĄÁAeW8!# Š¸"Ŧ":ĢŲÄApŽ8DtøqÂ,K ‚‚PábX—A8 ‚ÄŽ‚pEpXápŠāÄA"‚Äq>B]ˆA8AˆAb]›BGA9dt$tā…„qÂ#ĸ>0ÆÄK ‚qÂ#ĸč …”8B!‰tC„]+Š!†.X‘Đ@‡WB!ÂÂFÄA"]—BĘ!č „ „ ą.‚Kĸ:,K  „yäuæĐü^Z.GÄX‚ ‚ōč ŧCâÅDcøĮ⋠Ч. `ņ °~ē# —AbˆčŽ‚)Â# E\¨i,•ĸ:2ŠËŖDRÚÉâXÆÂ ˆč"‡xž!Â. Áˆ‚‹âC‚# ĸāĘ,B „^რ°‚ +ī °ØDtã„ׂül …ŒB5”= ˆQ-„GA/ pEt ‚ųp@‡1ˆ#ŽFˆ ą.GbĮž/X߈A_ØA_„ đ@„n!ĐAČūB+ˆAcâXąˆø„1ė ļŽ‚ †1aGaˇīđ‚ Ž8": ĮŠŧ ŠVáīÁû!ŅöĶ„/apˆč_0x„ūX‚‹ ‰tC‚/bX…Ä ą# Š¸A—„ O‘ĐÁŽ ‘ŪGA8A‚ ĸ,B >B ‚Ä ŧ †Â ‚ĮÄ ą# ‚#x°>G@‰!Q‚Ä(ØA„!ˆA„!ˆE´!#ĸ::Čč$qHčA# A ą!AbBX„8„!‰šÂFAŅ"G‡ą@ą₯1,B(p‚ Pá„%ĐEAbGA9x„L'# @„A ¸A$| „A"Xˆ„‰tBB!‰t,ĄÂĄÁCߨ@„Hī1ãdtX„PđQzˆč(ĮŽCž ‚.ŽB ,llpD|(1câX0¸Ž…§Âī,B+†Æ,&GAb,_abĐG":X1î8áĐ(áņņâC„°‚Åq(Ü œ °x…öGAq|B6* ‹":(b1 ė"Ą„1ˆAD ‚ď„°Åq‚h „a‰°‘„0xÁŽ‚,B ‚<`Æ1/(đ‚č ŧbÂEĐE^ņAa$tX X‘ØÆ!8Dt]!đbđˆč(‘ĐAl/áC‚‡ņņ„BXx8ˆAbQ";„ G„ūīņ|xAÁņŒB  ďŒE B# ‚ ‚%á‚!D „Hč$ÄēŽBG‡#â „qÂ#ĸ>0b ‚Ë ‚ƒˆQ.‚Dēč ‡.„Ž‚+˜„Â9@„HųĖ „B$|HøA (p„ ą/(tÆX„ÜŽĖ Œ-ĸ‡!o\ėb0œpf #ĸ;؜pdt^”â!+āŽ8";!ƒ/ŨCaÇŔ8L¨(tĄÂ ätNxöGAdtGA¸Al ļ‚ėŽ‚ŲĐA ÅļG˜XŲ"ÂQeVPá`°Šb]ĐE:âČęĐDtGNGPˆč ‚Å‘ĐG":ESƒc[ĄÂ!Pá ‚ˆEtĄÂč † Ž‚AGDt"č0ˆč$GH ¸G": =„PáˆAbČé”8DtGŅ\†0c,Ö [+#¨˛:+’ 6aÂã•áãļGDt(ą,XX¸Æ6!6GDvÂ`ÅČ莂,p‚ŅP!1ŽˆåCĸ1 °c°ŖhŽ‚aE”8'ĄÁŅUėŽģ!pŽ8A0Ŋ‘ĶŽ™OA‚PAE„’ ˜p‚ č NGAePá ‘Ô":# ŠtGAÅp(„GAdtGAÁėŽˆčŽœ ˆé!#á¤X° ‚Pá „‚(p„ …Âá ‚á"DB‚ "6BX„PáDtB]›B!0™C”8B]ˆAb] tBä|FŌ,YE ‚+Šâ‡ ”9\PáAAnŠā…”9C‚Šā…Čč"œ ļ1dtŠ":TQXá ˆé„GÁÅW"Yt"](r‡BEČč"¸Ž PåY¸ŗ‚A‘đ‚PåYC…ˆEU”8B!8 ‚ÁÂ\Ä ‚ÁŅC‚Bk0áĨ!(p‚ˆč"ĮPá",J °‚°‚ō‡(vGDt¸Al(âŠ":e™SŨŨ÷Â Ô …Įđ‚Ä}øĮ°‚÷Â_Į°‚ˆDtĢØA Î8H ŦĄĘ";„G@‚ÆüB ~PáAŒc„Pč °xcÅńdtČč,XŧPDu(pˆč ą†,, ŧē!AūX„Pā„"ŽG‡žŊđE8Ac¸ø˛: albď„ 9C„ã”8D| …”9C„#h"Žaƒø‘ĐACAĐ#ŽX0ˇ ,Žˆč#ŽAÁˆ‚8åYC•ePāˆč"‡(p‹ĀņX2‡(rœAE…ˆDt a.˜":#¤PáŲŅ„"GĄÂå@<1*Į]Pá8AÆ!žBáÁ…Šp‚Æø"¯a)ä| † ą„ °‚ĮĮÄēÂb1‰tXEē# ŠŊaá÷ņĮ‚ ØđÄX„„]%ĐAAtX‘ĐA tGBX„Sĸ:r:™ĸ:AÆÂ Ä ŧē!6„ē!ņ,BYC„!Ž$tätö!Âđ?‘ĐAAcá‰tB]ŽB]â]—A>1¸E_Ä Ŧ ˇČë˯,Ú č „ē#¯‚č …”8X„PáW8"莂 ς C‚8 J"!‚đ‚!‚Ä,"č"‡] 1Ŗ Āf8á\ Ŋ‘Đ^S„ÂĮÅB Ä ŧ ą˙Ä Ŋ‘Đ]8DwđbÃįjGí˙aDĮ,X<,~t[øÆ!ėĄÂÜ °{ˆAbØ\Į,>!ė.Ax^X˙xˆA ‘Ņ ˆ„˙a",B Ârč „ ą/‚Äē!!,Hč „Hč „ ąÅČéČč!ėBā‚đF/ˆAŅÂ# Xä3`1ˆØ‹ˆč ĸøApņ üTD ‡,u1 ˆDtĄÂ ÎËx˙ņž\AD ĸఐÆ/˛‡…,bHæ‰āDB,,YBF1Ä °apŽ8A`Æ,(„[!ˆA Ba B0b6.,ÂXÃņŽ'“yāˆ^ÁFƒ=˜pŖPf†-…ÂGA1°‚1'‚Š";„åX^ĘĄÁĐQxLĄÂePáA´X1QÁÂ*äx{# ļGA`ÆÂ(r BeQĄĘ ĄĘQ(‚.‚(pEŅUđ}eUÂ!} ‚ápˆčCœpˆčb^q”8Dt‡åöPåAp‚(rŦ.]{áa[  ‚Î8AbQœpĸQqÂ#ĸ>‚ Ę!|YC„e(‚.‚ ePđ‚ā‚ħ({]Ž‚ Ė ˜XœpPAbqÂ%[„áaf BPáB  đˆøEU¨ °ØA[DtC”ááÁp‚Åûށp‚ÄĄÂ pˆéĄÂ# EÃ-ŒQŦ.tC‚,Bƒ„U„ŗ ,BŅĮŽ‚]ĐG …ÂE8Dt DX—A—A8D|"‡ ņax„Pā Š¸AoîGAG@ŠC‘ņÁ!₯ÂDĮ ŧ"‡ÚPáEAbGAr:„!.GAr:DCŪ/#ĄÂDB ‚ĄÂ6‚l „B ‚ÄŽ‚\(‘ĐHbA`ár<=ņÂ(?ŒDĮĮĄĘ";#á ‚Ä"‡ÚĢ‘Đ„!‰Pā8,B!fAÄaˆ „KÂ"ã„c!,B č"‡ē,|B Ë ‚ņî!Ūņ/a⁄^…NXoĮߎ!āÆ8HĄĘĮ‡ö „ „ĮaÁā‚Å‘ĐB ĸ^>X¸AbX„ Ž‚Ü ą,x„Qņá8AÂ.´Cû  ‚ßÁ˙ÄboŘH ŧJ";AžÂÄ ‚ ‚ā‹ ŠtX8Acâņ„UČđ˙Žˆč O‚=ãø„_āņ !qŅāÆ,ĄÂÄ ą# ‚# @‡ą‹āc‚Aá0b!D.!"] ˆø—A:!‚ĮÄ(‘Đ@œŽˆčHđā‚\ ‡!ˆXAD"ŦĄâX„ ą, ą.Č莈č C‚CˆčŽ‚.‚ƒX¨„„!ˆ‚ ĸGA.Xų´NˆčŽ‚$tĢ‘ĐAa|p@„A!×Â`ņŧB Ø[‘Đ1A ‹„10âBÂqLŽˆč …ü!‹#ĸ:ã„GA"Xø„ ¸Ax ŋ^ÁäkČ5ų´S¯xąīâX”8Dw&XŽ‚ÂŪ:CXőĐB ‚Å‘ë#ÁÂ Ü ą,_ĄÂ „Páđ‚â1ûöÁø…Q/žĢÁņĮŽˆú!#aááåĐA ‚ÅņĄÂ# ‚ĸAF…øAb!#℠O‚Œ1|c؇ނ Ä  Â÷,bøŽČč!Û!du‚,ņîũãģ({°ŖxAbˆč"‡0b!B !‚ÄEq,B ‚,í…ÜcÄ^^ÂÆAx„%ĐE=âX‘ņeU…Ž,ĄÂ!ÄBD ą.ˆčBCa"]4GBf(81„Âđ…ƒ¸ĸ‡JrŽ ŽˆėA!Äm"9ąƒąGŖ˛: D ą|Xҏ7„a” ffŲ™gȘÁ"åøA‚ ˛3#œÉöGA$X˛:˛< /Ųļ í¤GAnV DtVGAl-„˛:Yáī#ĸ:I8A0‚ø÷Ŕ=E„PöqÂ# ™‹‹ˆAlŽˆč!a{ 0ˆébøąo“(p…”8LĄĐŨ§°Dtb.-ŗGA 0Ō‹#ĸ;#ĸ:qƒBbĖ8AnU›ĸÂŗ Ã"U˛:Aƒ0ÂŽ‚dt†]ʁ„XᇎeÆEÎ!1œ[‹˜Pb%8ž˜2æ DGA # …Ę Bĸá, \Tē- ĸĶ(p¯PėÃ0‚&°ącā‚ÆÂ  !8DvGDt„ÆĖ=4PáAŒbMøA …Čč&GDtxA]ą ‘Ķ(pˆčĮ /GAr:!ĸ]  r:&„ē!Ģ(rœ": “ !,ÆB]„åĐA tBX„Páō:Ž+Š!.Čč …Čč ‚ÃaÕár:&X8VB  ‚ÚH ļ‚𠂈„Pā‹ĸ:!|XQdt[(r‡ „GAXAlŽ‚ ĖnGA°‚ ˆč ąĄÂčB č „ēĄÂ.ˆč „ē!e%Đ@„Ž‚$tGB]â]*āŠâC„Š";° „C‚0áXA A ĸp‚åYC„]aĐEPá„#ĸ:#¸‰Į!8á,Ž‚Ä":#¸ė°ũAŖãpĄÃTh ¯Ņā4{~cÖz/øá6GA`ÂÂáƒđŠ":ÄGp°‚ÅÂ(pA ,(Ä.ƒÆņ ´]„ /GAn†á"‡ ŒF!đpŠš,/‚öĢØápŦŽ‚(p‚āŽ8":< ‚čC„´CtC•aÁˆ ‹ŒA ĢÄ^DtĄÎ8Dtã„G@‚‹Š#h"Ŧ! ĄÂÖ!Ęt"‡ŦDX‚# Š °fL!abŽ‚,pDv@„Ģ0áĨ!(pDw*Ģ(p‹ ŠĄĐFs.‚GA8EĐEZkÄX„,Žˆė,J …˜@Ž8":#ЈėįīēĄÁĢ(r‡,z(0āĸƒ„珅āÂÁãŒN8A9C„AlãÄ"‡Ú! °‹ ‚Æ ¸¯pˆč"œ °cB+(p‚ᏈEApEĐA „‰‰tBXŽC„ đE8A` ō>:.,p‚Ä ŧē!‚Åņ.‚ ,B Į°Ŋ{àáa|Į,<|cÂ(pˆč ą/ Ä ŧ ¸ ž>#מBáÅđ‚ AbXAbX‚ \B  !‚Į č „ ąöPánXš„a\PbĖ8@Ž8At\"‡$ąÂ# Š# ‚˙ …ÂGŒE|":ĄĘp‚B ĸÂđEŅS„GZëŅî­ŧ㴘”=&Úa0ƒüSi6'JĐAđ‚ÜŽ‚!,Žņ°‚ģ(pą,|B Žē,!vC‚#¨‚J Ô":1ã,BDDDDDDDDDDDIĖ _ũ{^—Ē˙]?WĨ¯øĸ‡,J";„á0ŧB(p‚(pž7ā‚(r‡DtW-„%8A ‚áųĮ!8á‰Įpˆč#ŽX„'+”8Aa•pap‹ Œ:, šĮ,)Â#°ą,N8Ag ˇ,bã„C„”8A …ŒxAp‚ ė ą(„C”:.,l ąA‚Äã„/p‚ÅņŽ‚8áđ‚Ë(ö!āøÄ.!ØDtGA.!ėŽˆč#ŽX°°Ŧށ‰C„G|ąÂ„B(pEĐESá}…ĘB  ˛:EdtGdt!K ą,B „q ‚ˆG ˇ,{(ũ„žÂˆA9C ‚ā‚û!Ú"č ą, ‚ôQށ8Dw-Ä":#¸DtGÆ=˜p‚0á‡Ŋ* ¥ʰ°~(0ēÂ(pFĐE^ūAĐh+-ˆÄ ¸Eã"č(„$tC‚.‚(pŖĄÁDt'#ĀúĮŽˆīƒ„G@ĸøEC ‚Ä ¸EĐEē,|K Š#h"ŦĄĘšöÂHé₯.#ŽpˆîB Į(p>Žđc‚Á Áî ‹ ‚°¸E_pAÄ":ĄÂ# G ļB+ˆEPáA˛‡+‚Į„C‚6‚8A„$t!#ĸ::ö<, ¸AoPábX„8Acâ]ĐApū`ˆį r:DÚ|„ĩkÅhÛē˙ĩŋąÛũđ@‡˛: ‚öøā‚đ°‚ö\F!qøā‚ħ.!Įāņŧ_dt!ƒˆ„!ƒ„GAņÂņ,CÆ‹ !ĐAl ¸ Ø^!EˆQf ‚܏B/ ŲC…šUáa}ō<đcÆ1áåĐA ˛‡ ¸A„!‰xD ą# ‚,Bö† DBė.ÅÆ! ‹‘Ä „Æ+üˆkúūŋī~Ŧģņ˛‡a}ã~ČęČ莂abá.XøÂ øAb!ah,¨„QŽ‚ Ž8„GA8A # ą ŧc´[,B(p¸DtÂÁĮė"‡ÆÂ c[ø=„ÅoĮŨą„På!#bÆ61fsÄ ĸĸB Ab+°žĮŽCa,,Bņė!ŅÂ.cĘC؈Qdt‚ 1Ä ŧB# ‚ üB ˆä\ Œ8A`ˆäÆ/ˆ ‚a‹(xĄab( °<`ÄPÄ ą‘Ķ-ņށp‚ÅŒ,eáƒ„ÂØXˆAbXxø„GŽˆílD „N8ˆAbø˛:# Ž8AఊĀb7ˆ ¸°‚,YC„!qAe/AbČöŅS„,/p‚ØAl ŧ °c°„QC„Ę!°ŠĀą°‚đ‚Ä ąã˛:+#ĸđcx ‚åĐA 6,/eˆE\ ļŽĐAE‘ŅS„GA$XG-„,đ‚ŧ"‡ŽáAú‚ö[˛‡ p‚Œ{#Ģ#ĸ: ‘Ņ „ė,QC„G@‚Ø0`Ä „B Š#p°„B PåYCĄŒB8áÛŽÂ1+0áØaŲs.eČÂf#ČōˆHS°QP]ēšC˙ū?`ã_Ģ Â÷&GAh ¸AėŽĸX„ˆAb[žPálŽ‚< zcf¸FtEģ(vGAlŽ‚ĮÄ": árœb>ÂėC…)Å$N’#ÂÆÂWšS„GDtâ˛:&\#ŽŽ‚aˆœp‚Ž…‡(pˆėY7HćGa8@„Ģ0é˜p‹°PÁ˜":`Ų„bÃdta…ƒ…aÂށĐħp‚ŗY¯âŲ„œl „lXBČčŽØØAœq8ᇎa`á"Ž!ŽÆ!!ˆ, @‚)Æ,QˆčŽČč!ŽBâČč&GDrâÂėĄÂ# ‚ƒ”8„GH ŦÄŒK˜„PáVPöPáYÛÄ T. ,ąÂ dt!E…ˆDtã„GD}h!„K ‚Ä ąE(p…ė ē-„ °‚öXXÜl ‡°‚PáŌA‘Ū ‚ÅA8LĄÂ 1b!h ­ĐE8A}ú#¤Sĸ:!r: š‘Ķ(pˆčŽž7Œ":EAbÂÄÚ!- ‚Å”9C„\(Ã~üãÂđcŒb!ĐE^[# ļ1aEr:|!āÄAáá8Ap‚Į˙‚ īáÚÂøA Ø÷ŽÂ ( ¸ā‚ĮÅ8Dt]¸AŽ?°Ŋđ‚‚ņņ!x{[ät]Ž/—AØAbž‚ā‚ûÄ/„\_âû# Šp‚ÁâĄÂ ĸ‡ށp‚øˆ ą/Š">GA/ũ|":ĄÁÂ=û ß{ŧB.GYŽ#øøáü.#â^á0žœa‰ÜJq/ øA{u_¯˙CØ<Úü „cŧ"9=ŒBƒ(r‡đbø„‚ „!ˆAp‚ ‡Žū>!ėŽ‚˛‡ ƒØÄ Ŋ…Á/EĐA^C‚ „Ä ¸A†‚ aĮ…āøÆ1cĸ]ˆAc„]PāpãĐAD ą8áĐGĸPā‚Áü|~ã„G@‹";ÄX°¸@Ÿ¸A`ÄAˆ^AcÂÄ ŧB# ‚‹âáˆAEaĐ(cđŒ8@ŸGx`ā‚/GA`‚*…ˆAbqÂDBÆ!‹# ē8á‚ņ,|pDr Ä Š¨tC‚Cˆ"č"‡1aÁˆ\B# AŒbŒB GDvc1 ˛‡ °‚Ä ‚‹ Œá=a1üŽ‚(pAa‡¸Ä ¸DtGA1ŒD ‚÷Œ{Â# ‚ōč ˇ,|B  ‚ß!ū; ‘ūˆ‚áߊâX„˛‡ č ‡…AáøņEĐWŒ{^ÃÁãđ‚ °‚ÅņŒBĐX"č ąÂ~AG…xøŠãČč ^ Áˆø…ŲC…ÃÅņ}”8[„?ø„‘ĐE^÷Ū=áÂĮŋ°‚  ÁãXApˆč!!Äb8ūé|Vß×˙ø7˙‘ö†"N8Dr  Æ!0Dr#bŖa"X°……˛: Ų"B.#„%ĸ1ƒđQ F[caƒą‚XX‰ĮˆAbqÂ#˛:#‘v!Ž8A”8ö""‘ҁâ!œAō:ņávņ,Y˛: ‚ÄㄈAbSƒ Ŗ„G"æ,B(ÁŒŗ A`‚ápˆäGDvŒcŲC•dĮB†1ŒX„Čđ8ŤŲCØDv`Ū,,"XŒcŨ”^!ƒ# BPá‚ĥ„GAp XöaÂøD|"‡ …ˆđAáƒcÄ":Páƒ# ą,B „qÂ# G ¸#ˆQ+.\";„ã„ĘĄÂáŅtVPö]aÂ# ŠŧAˆ":(„G@Šã„G@—a1â^XÁ‹(r‡, ‚ŲC…ˆAp‚ aĐE^1ė."莘DtGX$=â_xØAŪ>C‚.‚ /â"‡0b ĸ^Čč-…†ũ‘ĐX„GDtĮށŒbūC”8EĐE,^Ä"‡G /Ü ¸Ax Ŋ÷ŒB ( ¸#ŽXĮ!ሠą.‚BâX—A,ĄÂĮÄ ŋĄÁ†=…Ž8AbX?Œb_„"!0Ab8㏂ s5˙濉Ú˙ķOîœĶmŠ,|A#Œ ¸ Ŋ…˛: ‚Å‘ĐX„ŋ˛: Ž!-ü+r‡ŖŽ‚AXAbÂûņ//p‚Ä ąú/‚Įčx^Ž‚ cŒp‚ ‚Œ{‹ö^>ÂđÆ,/dtŽ ąa{ĄÁŪ1áÂĄÁņ7‹â_~Âņ,B ŲĐ"œ °xĮ°ŧQC„G@Ž8Aaâã‚# °‚ Ū%X÷ˆA8/‚ ãĮÄ ŧBD „B GAbX2:# G ąŒB !p‚ßÃÇ8Įū!ņ°‚ÄXųĮ,B ,B# EqÂ\ ąûøAy{ƒ˙Â-„Páđ Åŋ,YÁãĮė"‡8áĐG ą /ėŽ‚°‚ÁˆØAqx‚ ÖXŒ\ ‚₸=ŧY…Â*đĮŋ§ށĮq a1øAxAcaŠâB^0n1,C„/‚=ˆ\ŽÂät0c ‚đAc„PááaØEXÄc­{ö7‹ „qÂ# GÁcĮĮā‚û„ãĸ!#ã°Ŋ |"¯ bũ„GA0°Įąƒ ‚ ÁpŦ „A" °…ßhŽ‚ŧ1‹ˆAbČčŽaˆjrÜAØĪ3Š Ž‚ ļ×O}Ø_ūŌa¤ÚG¯´ŋ!°‚ßa ŠĄÁĘq˛:(ūXâČõ ‚Ú,YˆHB Ų‰Į!r‡N=‰CöPá.#‹.Čč!‹ö˛:Y‹ČôB GAn6? 6C¤1°˜‰8ļBÂÄQxЉcŽ!ˆAcˆÆ!Â8á#1c„p‚Eė…o,A‹ .āXŒÄc‚ÁÄB ˆ@‚C1Ü]„ˆA˛9ĐBS„ ĸ ‚ ,/ˆįŒB ‚ "SˆAxˆDs¨Š(œqŒY,B GAb8û#Ö\X‹(p‚Ål ŖpŦ(ŊĐE-ƒė"‡a‹ė,YĢÄb#Ax„ĐL+A´S°­l.Čč Ŗ  ßadtGAac°‚’- ‚čĄÂ‹ˆŧPAx0ŦĄĘ"č ĄĘ§Dt[(pądtBätW˛: Ú(p‚8áƒl(¤CŽI„Pá ‚ˆ#Ž´C… ą˛9´[ÅőŌ(pˆäGA #¤,,XV!ŲC„Gp ‚č ­8D| ļ‚l/‚ÛĢ…avGA #ĸ:!r:đ"ö„\šE[„]På@„›† ĄÁDv°ąGA ‰Į(pDrAB#ĄA"áx`’iļŽé6B 4šĶM8"=M„­+´ƒ $G₠°‚Ū1í„PåBU‹b6"qŲ°ą‚ŲŖŽX°ŦB ‚Äã”;# ļ5˙Ą…ņáĐVX¸„LŽˆč$‚ dtČęĐAA”9CšC„šNá ‚ī(pACāö`ˆč(1f `ˆėŽˆč!8åČ莂˛:#‘Ų-Ž#.Ą*Âf§„ ,&ŗ"Į!lB#ĸ:ã„GdtGDvGA # ‹ …‘ĐBÄ0dt‡Ž‚0āČ蹄k %8”âx;@ĐFpˆė!DtGdtG":#°…‘Đ!8áŲܨ'wŦĐ%8ÁЧ,BˆAbX˛:#ŗ!al(ŲŅ.,Žˆč$Ch °apG/øĘ ™”ņq{ĄÂ âÄã„GAádt<Į(pˆė/axAGīÄ‚ ØDt[„ûAŠ# Š ¸@ŸŒ{đŽ8Ag °xŲ0ŧxD|Ž‚B Ø"<1ߊ(ž!Ųū.G^A{#ĸ:S„,B+0á‚‹(p‚Á…DqĄÁ„Qa>Pā‚ā‚ųĮ,B ĸœ ļGAtq a, ĸ^Xáž<t^Ę,a‚č ą~ đ‚÷ĄĘpˆč ‡#¤^Čë|WÔpŽ8AYC„GEĐEĄÂ,\tC‚.‚ "T P%9Â ƈéķĘBXøEĮ R{ á†!m&N˜Ļ)Џ"ãbĸ¯..VX2:\ĄÁđpDtC•lõÄ ŧĄÂ ƒāņa{# ¸a,Ž‚Ä ą/dtGAÚxË">ŠˆØA pŧ"¯ˆÆ#°‚øáØÄ.!ĐA`ū=…Š(pŦ °Î9V"@ˆč"‡(pD| ĸâ^,`á8 ą!ā‚áp‚Øx˛:# ‚# EŽÂ# G&aÂĄÁđ‚Á‡] ¸ ą]k< Ŋ‘Đ]„,B ˆé8A ¸AAbPāá߇ EĐ@ˆéđb‚0⠂Äņŗ"‡,J‚Ä ¸GĘ BPáĄŌ(r‡”8Dw)á1ÁA9NC8 ą,X‚ „b(bap?ģ !r>‚  „C„GA„ąˆApEč"莂*ū8ŋdtø…Ø_„ˆAp‚ōč ¸ņņx ‚˙Ä{øDtBūũû.‚ ‚x</ž „Ę,B  ˙‚đ‚÷Œ{ûđŽ8AxAb\/‚ųtXŧ./ av˙‚ ÄWØ^<Wūũá°‚ĮŅâX„/ˆA{ °ŧ{üqņ,D ˇė{?‚ ņ\B0á0áĐEāˆøA~^< ĩKÁ‚ ÂÃDDD `ƒB  0˜/áŒ>c÷ƒÅ…ė.An^ū1c‚ÅÂD ąØâC…Äx ‚Įą°¸EĐFtXŒB 0‚÷ņ‹ãāüā÷Ayt]„,,B Æ<ē-üB //.‚ßaˆAXX°ąa`Čč!h °p‚ ."-cŒFÃâ"~ÄDDD{b(+A0„l …°ˆđ°‚*ŒJqƒŅŲÕÃa ‰N,Á°‚˛: mDoGA # „N8˛:D ą+dt%!!ą”9CŒ`Áˆ ļ‡„PáĐLŽ‚ aØAcb"!ėŽ(X¸Drbqō‡(w!°¸An⏅b"#å8AlŽ8ˆAAˇĄÂ ˆäGūCƒãØØQÆülE„#bx!!dtG"9"B!ˆDrˆ‚‰N';4íØB'qdt„ˆ"9"PâqÂN8Drƒ ”AŒ؂#ĸ<˛:N8A # ą,Xb!‹# …‘ĐB%@41af°‹H DtGaÁˆ ™ƒ# …„"Čč!dt˛: ‡ŽîTL!ˆÅØÅ— XB' …‘ĶŲ΃# …‘Ņ‚ C„J";Œ„‡AĶA6ŲC•pŦ …‘ÔZdt‰P ą ÁņŒ1‹ °„XX°ēQp‚°‚˛:-„aˆAb^Čč,B „S„2:#†ąÂŅÚ(œr‡Ã‚¸EU ¸"č#‚ aŅE0‚ĮC ŠĄÂ.hdmQ][RœJ Š":à‚Áˆ ¸EYG)ĐAl ą' °‚Ä ¸>‚ GAeŽF BPåB^qŌ(pˆč"‡(rœBpk₯1ÅKĄË ąaeŽVPáį XV, ŖŽ‚ 0pa…$9p1‹¤PåŽBqÂB#ŖhŽĢ‹# ą,r(á‹ØA8AYC ŦĄËĄÅˇ)ÂPEPį „ã”8„' °ˆč#ŽT Į!dtGA ĮŽČčŽW(pA9C Š¨  áà ŽBqÂN8Dtā „đ"Xž‘Ņx”(@ŠĄÂ#áĢ":EPā‚āÄA‹ ˆč#8A ÂÄ":ã„G@Ž9C„G`Ü Œ8EĐEPîT ‚ĄĘŗXAF0x‚.‚(rœ ……¸°ļGDtGÆŅP6r‡”8Dv ÁPåēĄÁkį“…ˆAbqÂ# ‡!dtČ莁pˆîSƒ„]P∸Aa‡X…„Q Žˆė(":X"č ‚Â„X1Ax(¸Â3„ÁÂ(pQˆAbmGü":ã„G@Šp‚ÅübC”8@Ÿ] D(„[„)ÂoØ^!Đ"‡,0ö#‚ˆG": 0bÂ/ރˆđA‰Wˆ\ ‚āŠš~Čę!Đ"œ °xÆ,Ä">Gąōp‚ā‚, ŦŽ‚đ‚Å÷,B ŖŽ8áãĐAD ģĄÂ  „AAƒÄbQŽ‚]ĐEXąˆAp>] 1ˆÄ !Đ,DB.1Į‚] CPqƒŪ,Á—Dt'ė!Øü|pa{„  cņdtˆA ,cđAq‚ĮŽBū đ‚đą°ŖŽŒ„ŅÄX1œPAÃxAˆÂaˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ„ ‚ėĄĘ…hō\xŽ""""8ˆˆˆˆˆˆˆˆˆˆˆˆŽ"""""""""""""""""""""""!Đ#ŽX8AgœBCÄA"Á‘Æ\‹”FÄĄđo´¸âq ‚XC°Š,FA>BFj@ĘQ˛<‰Į‚ĮØ^!ŒBÄBDĀ q†!"!ØŽ!qaė$ÆÂ FHb6"",(Ä ą, ."AlG!8áˆč HĄĘFĘN8ĨŽa,"œĄÂ ‘ĐX˛:#˛:# „ ļG[a9C‚.‡e6Pė-ĩ„&¤GVBqÂN8AvPá,,D ąVG@„åqS+Šâ‡+Šâ¸ĄĘ˛‡+ŠŽ+Šâ¸ĄĪ…q!ÉApXåApXåAp]“ŗ91Ș{,r „Į%Pႇ<‚c’ĄÉ'"9ĐBqĘ“ˆDtŖ!]Påņp‚ÄŽ ЧDtNX2: dt!מLŦ,r‡ ļ ‹# ŧĄĮG.8A~Xáœr‡|1 a{üX‚ >!ŪD!‰C„Q]^"UŦGØAb/Â Ęp‚9B „qĘ!•%@‚Äã„Čč,N8@„ĄÂ]âqʆ"S˜r¸Ök5”9Ŧŧ(rŦĄËĄĪ†ãáZ•Įâ‡(AC•‡™@Ę⁕2¸ e,c‚ ė „ ąÆ[œr œrŦĄĘ˛‡)ʃ9C”9đã”Ađ㕇âˆ)Ęâ‡+Š Š•Æ ­”\Påˆ ą˙ņÁâ]•Åq\Tʙ\WÅWÅU”9\W9\rå.P2ˇF1Ä ąņĮ"qķ˛ŌĮŌX „t„GDtūAc„F7‰NˆëQčaŒc!‹ÆņŒp@„c!á͊(p‚ÄŊ̈ˆˆˆˆˆˆˆˆÂ Ä":ÖņŽ ‚ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÄ B!F.,Ēá DDDDDDDDDDDaĐE"B' „N8œq,|'á*ĄÄ§ BûC¸ˆAœpdt&¨(Ų­JYČ!Ž‘Ņs.FĄöŒ:#„ˆˆÆÎ.#Œ1dtG Ŧ4á"Z‰ĮŽĖõžC)ĘDlÔ9AÄã„˛:#˛:#‘"qŲŖsņ„ąŲĐ!(p‚Äã„GBāŠ§O,p‚ŽBqÂdmBhŽąĮ!dtG":D ŦĄĘ NPāˆī6˜A[á<ąŲÅ#âCŽPų1Đ"‡*ÄJpˆėŽ‚(r‡ G\§,\˜á,Žˆč Dt"BmL.æ ‡!Ŧ8•b ‚ĸ,JJCĶ~ū ņ/dt_Æ]„!Š!ãp‚ .Ę ŋĮđ‚-Ę(‚ ‚%å‚ Ä „B GAbB%‘Ņ‚˙ˆčC–;áØųĸ (|FÄlD"č#„ŧ°ē,Č,P ŋ­#""BŽ"" Ú8„„ „BD§<˜FE)uüĄ!‚dtˆA˛:EÂ#Á‚(pQ8â"B,ŽâqŎĘQ¨‹#‘ˆč!G":D „lE‚Yˆˆâ6ÖÖ!0âTƒ*`‚'Â8á,ŽˆûŨÂ%؉c’†°ų‡,r‡(s%PåŽPâPá%Ž' BPåũũ‹A9Į, ą8ᄜpˆéĄKŽXåB.ޝP‘Į!, ą)ÂN8Abq Ž‚(pQNPî^Č莈ųŅ‘ŅˆčސDt‚ ‡q8á'"9" ĸ:ĄĘá.‚,p‚0‚Čč ĸZB#øˆAaˆAxAœp‚ŽB!‰ĮĮú~?á˙a#xÄÁ#”8AÁđ‚ˆAw P㈄ ÅDB ū„‹ë‹â¸„œp‚fX>' …BY‰āN8A`Čč ‚ä|Ž‚ņ,/(t\t\":# ‚‹-„>Čč!(p‚‰āD „DG×˙ĄÂGĮÆ1 ‚ãØA˜xĮ¸Áö^ØîPāö2ô „§!EĐV‚°‚ŧN8Dr ˆč&GAšp8Œ"‡ÄB ,/YæB }…ˆ<î#xˆ‰ĮŽeÃp1;$^ŊxŗB!"qÄĄė­BÄ#ĀA ‰c‰ĮGA„GH[ޏ¸A #ŠGDs؄œBˆ „ã¨Á…‚ ‚8âÂ!œĄÖc„œr‡l „ã„˛: ‚Ř*ˆA[œr‡H&ÛÃĨę[“ „ƒ`âE\>C;¸.Ģ‚8á‰Į!8á'ĄÄã”;öPå$„(ĄĘ „ã„„Č莂EPåđQ,ąÂYĐGĄÄĄĘ–8DvGDw*$8Dr„J „ĄĐF!(pDr.‚đb8‚ DXX„GAÂ#͖é„]K …Ę0ąÂqÁĐ#ŽPāˆîB9c”;<2ĮHB ‡(qō‡Ęå-Ž#4CG”%„É@Ė Č›)ŅPĶ$LúL‚ĮG‘ģ~Čč,B ‚ÄㄈAxĮ#ã,N8A b!qˆčŽ‚ e „a",_,B „ˆAb\#ŽPøAbqˆAbPá8A„„ „JĄø"Į(|"懎āˆī p‚¨$Mū!ˆAbXoņ/8å!Š”8†ÉŽB!"A°|qBDㄌ`ďä|ō!#âO‘Ô š ā‹Č4ŽĪ ĀĄ/0ƒ@‹š!pĐÁBEN øDx'›3„>6"Â)Äl":AgD8œp‚ät!čDAɈ‚ED ą7ü"ŦD ąņp‚8øėŽ‚,J";„ˆQ,B  ļ41)ń"‚œl „lDã„‹Š„"%Ž'N9C‰ĮŽB'‘v]A„Á›ËŖa,2Đa6Đa › ¨A ē&ÉŲCuAŅŦaÃŖcâPâS’ĄĐ@ˆô\":#ņ(q8á(ˆDuˇ(qš1Ō0č"‡(r‡œ"=GAn8˛9"qőŅĸB."qÂY"B'"qőŅ‚„‹Šq(pˆæ] ˆč ‚*ÄN:N,ŽˆæGB8ĄAœq*ÄJp‚DDDDIĖ"ßēOZM´ŌģŖŽ÷uwwG¤Ũ>é_,ąÔĄÁĄÄĄÂ °ˆë˛:áåŽÂíŌĘ ‡!Ęp‚ĮGŽá')ÉBXœq,q8ä‡(|˜áˆAbS„„^q ,N8Ap’$GäĮ %8 ^PáaĘvC”8Ayqđ@ą(p‚ ƒ‰C”âPâPā‚‹ Œ;åÍŠ>_ĢjĒíé\UwũiZŋëĸ‡-‘ĐX|| ąÂ#¨÷ŲC‰Į!dtG ŧĄĘøG":ã”?ˆAb[āˆīáf§ŽBPūēÉC‚"Sˆ‚KBBGÄAî!ˆ X߈Ab^?¯‰C„˛: ,p‚ÄĄĘÄr‡˛c„Čę"Nâ"!‰Cˆ„â0ŠDˇ˙i/}~û˙ņ´ē_ĨãÄBDㄈAã":~!ˆAbX„GCjû5ĨâX„!#㈄ˆAbB!p‚Į, ą8á%8”9CˆéâPㄈ@„DB"6PđĐIqqDGG$9R,q‹#†|c†?KŨ}RņąĻŋĄ˙˙Â,q8á!"qÂN9C˛:„™ÕB 1dt‰Į!‚(r tá(…œ …‘ĐB'N8A 0AAœq8áĮGA˛9ĐB'D „N9!Ęʐá"qÂDđ%¸•fČėDeŽPėŽˆč!8å' „ã„#ĸ:#˛:# „ã”9!đ‚‚Ж9C˜p‚ ,r‡$9C‰Į(zÁ˙Յ[uŨCĮ˙÷ũ­„”8AyN%X˛:D ŧBÆČŌa‰C‰Cœq ÂGDua8Dtá9C„]Uħ!Ɏ"qÄã‰Į!Ž!(rœ ŦXd Įŗ¸EÔà †ĐâPå%%S“N8”9Cø˙ŋëāŪ—õŋøâÂD ˛Į(p‚Äã”9c„GQâ/˛‡$8A #ĸ9åPīãã”9!Ę ŧ ą8åXá„9C”8Ae˛:#‘‡(q)ČĮ ƒ‰C”8¸ā‚‚°A‰W‰NâPđЏ,ã„X„!‰C„šC’ĄŌ Üp ¨„GHB ŽXAbPâq ,N?˙_Mū á/÷˙~'ŒB ŽB ‚,h":|AŽ!#b^ „GAN¨bXãa",!‚Å‘ĐB!øœp‚Ä ą8á‡(q8á!‰cáˆA”8„!ß"‡(pD|"‡ Ŗē‰NB+ˆAbB!"XøAcˆ‚#ß,p‚DE‘ČŽ""9ã’ûîø¯)7Áu˙ëū „DB( ‚Aė.2‡‡A#‹!Æ DAĐBSŒX‚D ą8á#ˆAca"B!ˆA„‰Į „N8AAAœp‚ĮÄq„‚ ĸ?AA”âqÂBD㈄‰Įą&‚#čE9!ƄTw˙Ë˙ßÚŪ ›“qœB# ‚¸D~Ί“âqĘBbŽˆč$Â# ™„‡ŽEČ! JĖŽEČ!ˆ „㈉ĮŽPâqĮ!8á,ŽˆäGAA‚# EŽBĖŨ{Ȑ%8Ae%8‰N' „ąÄ ‡(rçWdĮ‡(r ƒ“r(â!,rnN!n?ū–f&ŦÍwõ¯ûš&ÕÕĖÖC”8”8@„ĄĘár‡(šY8Ar‡!8á!‰ĮPå!ˆ@‡ØDuŽĸXœp"9ґԇ!8áP∸FąRC”8Ae–8AAbD „ąĘ`ÄB‰C„Á„•bÂÄ":ąÂY‚aËĘ CŲ‡8@œĄÁ§‡)ÅƁÉBAHxA4KˆA‰C”8”8”8@„":P‡í[I°ļ–ëÚM­ĄĒíĢkjÚüN8AbXœp‚ņ.øø„' ļGA¯ˆDt!Ž1ĸ‡,B ŽBX„G …‘ĐXá8DtC”>XŒx BaÄĄÄJ‚ÄĄņ(pDw A ĄÁĐPb ‚ A3‘ˆAb!ˆAbČč!‚ÄĄÂDĄĘDDm—MĘD„ „BBDãˆäQũŠn˜ Ú[5ЉN "!ÞqÃbqÁ°Â\AÄDDE‘ÅđAĐXøˆˆã‹#ŲŠ~ÜDDq8âČâ„""8„/˙„G ą!!(q–"B%&ÄB#ŠJCÁī˛8ˑ,Ž‚8âČč!‚8á"ø@ŧ ą,r C‰ĮŽPâqÄã‰cØû†(0˜Ļ˜ŽUŠh0šģØĻ+iØŽA Į!ōĮڎв8œv duÅß,q, ˛Į!,rC”8„8˛=G!Ž' „ąÄąÄĄÜ˜åŽ'dvŒ8œqdz-„ÂAt‡!AbBXœp‚‚8åĄ…j"qÂJ‚ á!!‰Į!!,p‚ÄDDŒB"""" Ē‚Á0[–9C‰Cœq.Â#¤PáûČčĮ)Á"Pāˆ˙Ž–A&ã”8ˆˆAbq !ŽBČčŽAnBqĘN8œp‚8âqʹʐá' ‡‚ dtG ŧ °‚Ë X”8Ø ‚ˆAb ‚Äã„XŅqÂđʐĄc„á"%%" ‚J Ü#!(p@„J{q":,PAbaÄĄĘ(~öâPãŲ1É8 B8 B!AbPáę!DĢÁ)Ä „B ‚,p‚,q,q‚Ä ŧeēŧēHÂKA(qĘw@ąÄJ{!Ē8°™â!ˆˆˆˆãøb!"qÄÉC’Ąá Lv‡ħ‚8â b # ˜CA!"PâBX„‰Į„…ÜÈDt ˆ”8‰CˆŽ!"S‰N"S‰Į!Ž'ˆaaD „ąÄã„„‰CˆAˆâ‚ŒąÅ‘Āō.G"=ÎÉ„XâqÂKBBEA;6ˆņ´G@‚Qx DtGj]#ĸ9ÅY´GGČē#ĸ:På#ŖÔC6ˆčŽÆĖē#ät"<}Dã„„–8œp‚GDr# „ąÄJ|ã”8˛8`Ž ˛Į)ħA ‡Ž&q8á!ÄÁ䇎!"qÄㄜr‡ŽPåÁ!ōÐ$˛¤)„AHr‡,r‡,r‡‡(rĮ(q8á5‚û, ą8á'ĄÄㄜpˆäGDt\":!Đ.^”8”8„GEĖ2:På8@ƒ.‚&ááˆDt ‘ĐA"qÂ>><ށáĐ.ÂĄĘRn2äGA'N8AAbXœp‚GDr#ĸ;# ą8û  ,r‡!,rC”?‰C„DĄĘģ 0č#‰N%qá ‚a3BBXá' „ã„!‰Į!ˆč"Į!ÄRg›# „JD „B ŽB!‰Į!eéãá/Ž#Ž"8œp‚Ä ą8á,Ž‚Ä ą8á„%C”8øáÄJ!ņŸ„8„!‹# ……ã‰Cƒâ>!ĸĮ‡ĄĮˆŽ"*!Ž6_âX„' „ ŧKäQņ,N8A #ĸ:Xá8A„!‡,SˆŒD¨GGAXœqdt‹¤Đ\Dƒ(â"!‡ˆ@‡^C˛8kFQĮĮGA㈎"Pøâ&aå"!#Ž">""#ãŽ"‚D\Gb!"X„‰ĮŽ!%Ž."#ˆˆâBČá"-Ęr´GDDk\âqČ)&qH˄z^1)É8œqdtG"9ȎˆäGAAbXėŽˆâ‘ČŽ‚‚dtGDr#ŠGäq‘ÆÉ'ĄŲȎˆėŽˆėŽˆč!8åXåEąĘN8A c‰Į(r8ČÜD˜åĀA Į(w@‰Ž'Dã‰Į,q8âXųr‡$8A Į(rĮ(q8á9c”;#ĸ:#’ ˜LäŽVHr‡$8–9r(ëaP‚‡(q0âPåXå%"aü7ú0á‡G"9ŅxŽˆėŽˆč”8 B%8‚ !‡!œB ĮŽBČčŽ\N8A Į(q8åXåHp‚Ž˜q*Î/ DĄÁ",|B ‚Äã”8„' „N8œp‚GDr# „ã„L8”9C’q!J$aÁ&DÎBB8‰NB ‚,BDã„„!ˆūøAa‰C‚"P⁠C”8 JaÄĄĘJ|‚¨äQÜâX˜p‚‚ĮōĮ(rĮ/Đ_†"Xœp‚‚,B ,N8@„ĄĘp@„$B‚(p@„Jq!‚Äã„"!ˆA„' „BDã„„G"9Đ!ėBˆA Cˆ‚GŽX‚D§!!‚Ä „B ŽBXœpDw,JĄđ‚,J „ąÉ%PâPâađ”8”8 B%8”8 ‡‚ ŽŌ !‚Ä ą,N8A „„! $NXâ"8„‰Į‚Į8ūßá8ˆAœq8â!"B' „N8”8˜qÄ B'D!(q8â"'DN8œq!‚(pˆäG":DȂFÄDJq8âČâ‘ČŽ)‚ÄDT „YˆA Į‚Įâx‚8âB!F1ˆáÆHq8á"qÆÅ‘ĐB!"qÄN8œ| B"ÖA`q8âqÄ …‘ŅˆãX1ü „ąÄĄÄąÉBXâqÄ „N8A DĮŽ'ĄÄD㉇&9Įq,rC„„–8„„'N8AœrC¤%&ˆ8ˆA‰c‰Į8î'ĄņDøADr#‘" ŽˆäG">Gi8į „ „BPA"qÂBK „ãŽ'sŽžÄã“ĄÂKJp‚8„!9Ã~ÄĄÁ‡ „BPâ, ŗŽXœq(p‚‚ ŽPä‡$9C„Xâ"PäW!,p‚‡Äã„„„„˛:B ŽXAyC”9!ōĮ!,q(rC”äĮ$8”9pAAa'ĄĘBDã„qĘąĘN9C’ä‡(vGDr‰Į‚ ŽPä‡,N8AaŒ4‚Ar‡‡(|§!ˆ”8”8ˆ …Č7Š9!čPABBDƒ`â!(q(qœJĄņÃy’‹Ax˜q(p@‡(q+Ae:ˆ‚q!‚Ä °‚Ä „BKĄÂ ˆA„ˆ‰Cå%8¨„""B8ˆAbX„„X„„á"”8 BˆâT ^!ˆAbqÄãˆA„8„ˆA‚DBG,N?ū!Ž9C‰C”8AAcˆŽSŽ"$ âB"#ᇒ¸fւDĄÄ „ „Z!‡R,q8âXá"""qÂBBD „N8–8ˆ„Ž&JŽ""B'BD „BBKBKG!áȎ B%8ˆ B"‰ĮȎ"Ž‚!,q8á"CAD~"#ˆˆˆė ‹ņ8ãāú΃;+ĖōvR3Ģ5>' „ã”8œq8å%!%Ž'q*ɸˆ”âg$9C˜p‚`ˆč!8å'D㒐åHq8åČ蹂Ž#S‰NFä09p',q8âqŲȎ‚ŽPâqÂN9C’q8á%¸¨œp“#ĸ9Ȏ)âTDđ"x8ã“ĄËĄÉ'ĄÉHr‡,r‡,r‡$>@đã‰C„TŠ9CR ˛C”9!ËĄÉPū>‚"đ@‹čŒ Eüˆ ą8á!‰Į!8å' „ã„DtC”8@„ĄĘąĘŗ!(r‡œ`đAx ą)ÂKá!'ŒN8A ņ‘ĐX”8@„ĄÂ "(ㄠĖ8•f§Aħ!*Ä_„ˆAbqÂD ą8á‚a‡(w- ŽBYc‰Į(rC‘G$;„GA8@„ĄÁÜĄÉS‚.‚0ųQ-ŌeŅu,Jp‚Æ' „ã„˛:D ą!HHdˆ„!9ĮQWɍÕŌI´›I´›Â0ã‚"Sˆ‚DDD!!ÄF!Â#ĄKŽ!(qž"B1!‚â1ÂN‡Ž„#&"@†ÆÄB"%8 B%8„Q/ÄTGŽBČč!,BK „rC‹D „B ‚(pC ‚ ĸ?'c „s DB!ˆ‰ĮbŌ#ōĮœDDĄÄĄčs°ˇãđŠé´Ž›Ã‚8â%Ž‚dqĸ‡Å‘ĐB!%Ž!ÖÛl ąŽĄ,G"ˆ"ęgIŽHq,q8âXä‡Q8á!!‰Į(rC’ „ °‚í ’’J „ąÄã‰Į,ĄĘJŠúA!åš!ČĮ$9!ÄĄĘN8œp‚Õßū“Ķí× ,K(r‡,r‡ Ž˜A …Bž!–9CŠáJáâ ¸{„'ĄÉXAeŽ!0âPåØÉŒŽ)3Hâ‘ČŽDr#ĸ9Ë#˛:#Ņ(q(rœA"%DN8A"%"!‚‚ÄĄÂY"qč ‚hŽĄ!‰Į,ã„„>!–8@„ĄĘ x;„#ņ(qŽ!!‰Į!!†PúJúīöˇęß!ÄqŽAoˆDtĘÔ,XˆˆAøq,q1hh „AˆAA„ˆAœp‚‚Ä ą0ô"Pâ"B""!#„X˜q(rC”8Ab‰O‘+”8”8ˆHAđ‚˙W‚ Ä ą,N8ˆŽ8‚#čo!~Ŋo˙Ö˙Eš!ÄKN8„Šf ļ_†S‹˜A ÅĐû×øA„'"9Ȏ‚ ‡ņĶŽBXœp‚ˆę áĐwÂÄ ˛Į!,q(vGAAb%%"P÷1Á‡(qˆˆˆ‚ (!D§ˆ‰Įˆ Q!‚Ä „ ą(r‡„!ŽC(r #ˆ„ˆ„!Ų1ÄãøēL8„é;ļÅ=6­Ųģ˙ûâqÄDD „BDã‹dĮøE=„ˆˆˆÕí8VGQdpWKE, „B A%!"cˆ”ä‡É' …‘Ņˆâ„"qÄĄÄBDãâ$žōĮ Ļ91ÂDãĐDtœq¯úŨ÷`Ōzaétßú˙°‚ËĄÉHq8á!„Ž8A $uŽĄ8"?o ‚ÉPåŽE‚aķŽBHz(|N8‰Į!‡0ã„–9!Ä$CŽ  [ĢÂA"?!,B ‚ĮŽBqÂKN8AB‚ ĄÄã”8„‰ĮƒŒ ŋũzī ÷Nétßū˙üD§!!,DB#§ˆDt‚": âSî!ŅÕŋ(q‡!A c‰c„Û ĮŽPøá%ŽBX䇂ÉA(rĮ(uŽBYc„JĄË „ąÂKĄûˆaDĄĮD§!!,q!,\R ‚ Ŧ8b>vT ūßv ßî7ū˙밁‰Cˆ„¸„ą„A‹pc Ž;!8Š,J „XäĮqD§‚‚8âXá#Ž""B ‚Į‚8ũÁqÄ C‰Cˆ”8ˆÛ D§csjqũõØ`ę˙éŋ˙ūÄJKqĮÕ"qÖaÕℱĄq!Č$4ĨŽ'Jq)Ä!8âq܄á"'N8„„ĐAÂg ŒqĶ(q!Į"ŽŦ&]PDĮŋoņũzØ0ßũĮ˙ú0á'ĄÄĄÉPä‡h˜øDurĮŽEŒu!eXåČčŽDqHäG":#‘ˆčš‘ĈâqÂF BaÄĄÄÑGĮJąŽHr‡,ąÄã”8œqŧ ˛Į(rĮGr‡dĮ(rĮ‡(q(wÁJĄÉŽAPp‚ú\N9C˙ŪÃūŋë^¸A„' „ „N8A Į(p˜ Cc¤Pá!%Ž!ÔaÃBD ą!,q8á!‰Į!8á"Pá'Ąō(ä,B ŽBYcˆ”8 ‡š‘ČŽ”8ā‚A”8Ae $C!dt ‚Ä ą,J …‘ĐBXœp‚!”9r"ŽAu‚ØÂDã˙ŋXl•§×ųŠĪ;×˙ņDãˆAˆœpˆę'S Š">$~""CAÔ":#ų JJqœDDã‹D ą!‚ĮÄB E‘éc„‰C”>Hq(p‚œp‚‚*ĄÂGá„Â:ˆAb"!"Sˆ‚D ą8á"B8ˆˆ°…Ä":7Ą8㝒/ũđn˙˙O÷ũūPâ"Sˆ´Pá1":”9Į œYąj"4܏—EԐá"qĮq8âPâ'D „N8˛8Ëuk!ŽLqAq8á"B'N9Cä ā‚Â#Šä tĸF˙úį°˙˙ë˙ˇ_ŗPä‡"ēĄäëˆ":ĄÂ#¤_‰:„šC‡)Čf&r(ä‡$9C ŠëÂDã„–8œr‡$9!ÉPâqԌr‡!,N9C’ „ „ †A ĸPâPá"cŠ ą‡!.PâBŽE'!0äˆë‡$9C×˙¯íŪ˙˙^ßīZ,BKJr‡$9N† ‚ßņN9!ÄąáãØDt\ ą!(rĮ(p‚ ‡‡@„q ‘bP⁔8–8AqÄã„„‰Į!ņ!(qœĄü ą, „ąõŒ °‚Ä „ąÄĄĮ(p‚ą!(|BDúAÔDHAÅđˆę#įe@žqo_õût­ĨĨÕŽņ8á!!8„Š! ÄTGL „ „ąÂk-ĮÄ „K „BDKN8AAœr‡p›Xœp‚Į‡DD!Ÿ‡)ÄBBa ‚gä„!!!â"Pá‚8â,!˛¤(LqaXūŊũ˙Ņúļ—öf˜Tôi=:ŋÄB'DąÄãˆDN›ˆˆœwŽ˜ÆČâ‘ČŽ(BXä‡!!Ž'ĄÂGarüYHā×Į‡"ŽA¸”ã ! )1ÂDã‰ĮŽB'N8HN8¸‰C ” „ã”9ąÃĒd‡ņívŌž}~ģammVöęëbS‰c’BK|Ąūʐá8Â0áŅ ˜™Ä „ąÄㄜp‚8á!!"qÄąí„u!,rC‘Gr(ä‡rq8âqĘN8A BqÄÃė."S‰NB!ŽBBXâPá%Ž‘ņČjøâAqôC”âP÷ėPAļL ė%Á‚A´‚ 0›ÚMĨm„›IÂXAq(q3ˆAIDã„GPˆëˆ˜q(zP‚ÆÂ#¤!(q(qŽ%"PâSˆAACP|/‚ ,ąÉPá–8A Į/‚‚Äã„XâqÂ%Yc„ š#ōc„(”: œJą,Jp‚&‚.ĸ$ ⓱ˆA xk SÔđ*¨1LBü0ƒ1 ØĻ)ŠåB%‰C‹ÃÆ÷„aÉ!>#ˆAa"PâBB!5‰C”8âL ˜CÄD „Bq*ÄBxŽCŽ#‚a Æũq‡D „B ˆ3§c¯"8" ”˜âPä ĮÅLN9Cū#ˆöGDr#ĸ9ȎDr#ĸ:ŠNÁ 8œr‡$8āˆūÁæP‚‡(rC‘G,r‡ŽHr‡$8"?œP\‘ø”9C‰Į‚Įˇ!Č8â"Ž”"Į(xˆËĄËĄÉPāˆę0‚Æä4%Ä „ÊQã˙ŧN8Aœq8á!!ŽÅCâ „D㧔8"?ˆč/8å!‰Į!!Ž'ĄĮ8á‡(|â ‚„' „ąÄㄜr‡„ƒ‡Čƒ‚%S“ãčŒˇW—Eō?,BD ŋčÔ:”8+'ŧ˜â4ĄÄĄ˙Kˆ „D „N8ˆ¤"‡đˆéļ&p†0‚ Â# „§DD!œOX„ņ,r8ŋ¸ˆ‰NBX„!ÔĄč ŧ „B ‡‚Â#ŖPŒ<0…‚‚D§ŽBÎ&fĐb."!ÂQˆ˙á8”8‹#‹âB†ĮÅŧĄÄĄÄDDXB"ذAWqBGŽ""#nīâ" ‹¤ŦâhB,z G"Ž@ŦpˆäG DĮũ-Ų ã‘Œ":ø´ˆéęŌDtąŠ9pDt Š9Cûä âBŽHxAĶ*ąüä‡$;]’‚&ˆüŒq ĮĪ&\2 Ŗ°‚/ĖâPä ‡ŽB,p‚Įūš‡r‡$9C„XâPāˆû!°ˆę‚,r‡,r‡"!Ļ´*_}r‡$8Aa%Ž%PåŽPáÂ(sCŠ ąČL+P@ŗ" ¸AlĄÅÄãˆA…Ž‚Î8A qxA Į(rC„GAyb\rž„†É LbB""""qÆüxA"!"BX¨…L ąÄąÄ":ĶŅC„GLF1ŒBDD „ ąÄ „| „B qAL8A„XåAlGLø˜q(r+‡ė":b% A(„!8Õ~Xâ(+#įbˆŅ@…ķŲ6 D‡˙‰ĮĮ&âqÄ „T"B""é„",D†Sœrœō(‚ ėâBSĄŠ~"1ŨX‰Įa›LŽąŖēgN9q8âBXū~‰ŽXåXåHr‡$8":tāˆęPåŽPâqÉPī”ôF=âDŠ9!ʐär‡C$>C,q^É%ŽHrCŠ mW -Ä"čÂÂ,xi‚ã„Xá(Žŋ ˜ôCLr(âL%"Ž!„âSe‘NÄĪ B ‚Ä „N8„Ύ5‚Äã„„GWŽ‘C”8„GAA„ˆ‰ĮŽPá"Žˆé”8œr‡q!A ‚.A Į(q8á!.„LАĀåHr(åŽĄÂ#¨•E „ㄈAb\cūPâĸ$(ä_ŒąÄq(|ĄÂXA‹W ™ĸ=fu3ĢÂDD „aGQϊĄ,|Z,CâBáķ¨*‘ĖŽ)ĩ‚Rr(ä‡aņ,B Ž8ŽJpÂ&_’ „BKw ˆá ”čÄqgL¨KÄ0™|ÄDDF‡-ŅņĄŖÃG†#ÂD68Ļ.ĄÔqŽ ‹ņDy Įˆę4qČ4ŽHq!!đąÄãļ"!a1‡÷qØV*!%Ž' „ąÆcšC‰Į(x¤‚AHG+{QĘŠ:A #á!īAz ‡I6“tŪ‹q0åŽPä‡AĶ-”8Dtc‘GÄ":GN8A „GLKäQÉ'Kq8ø”8A Â&]D‡H":aŌœtÉ'BYR:# ~' „kōĮ(w(rC”; Š…ī8ä‡(rÃ÷á$!Äã‘GŽPôL}ęđ’m&Ōö!0âXœp‚ĮƂ‚.¸Â8በ:áƒA!#E0‚DąÄ „ ˛Į,|DĄÔá¸åHt/ËĄÉPâPäQã,Ąá ‚ —â#‹‰Į(xADˆAbB ˆčށ{Œ9CŠĮ!r(ė ‚ žBbPâXâ"#Ž?W9ŽēˇÄ㈈ˆ°›q‚„":)Ã4!|F(y…!G!ŖCˆŠ.‚ §ˆAœr‡, ‡Ą…ėQ ƒ‰CŦ+ļ(!ˆAœq!qÂEąb” „áõßu{rŖ•#åō:#‘ŽDpÁs<ds.7&„E— ˆ+Ž"â-†AQ8â""/‹a$‚#ņT&Ū]DD§ )tÆœz xAČfJ'‚Ë“ƒqüė,ũ?Ûõô$4ÂÂCD „DĄÄ „ąĘA„PäQČ8 ŠáĐ!ŽˆėŽŖ‘GHpÁ$Hr „HxEŽPä‡Čkׄœr‡$9C’đAÚ(rCá„ÂeԊ9!ÉPä‡dvC´Hp‚AD~FäĮ8č"‡œ B!ĸ: …2C‹ „ËōĮ‡ H8”8–9!ÉBXų Ņķ˛š}ũuŋŅC”9!É#bBXA c„„„‰Į(rCøA 8”9q(q‡"B"' „KąÂp‚rC‚#”8”9Ä ą!ČQČ`q!–8A4A @„JD§œ „"9ÅN8ßø„âB!ˆAaÄ^%B%"Pá(qĄ! qA‚¨ˆ„ˆˆŽ$4Ą*Ū@ČĖÍŗ†hf' ÍŒœÎ„P]˙ņ!ˆˆˆˆ„ˆ„‰Į‚p‚œDHQĮĮ$9Cˆ‰c„ˆ–8”8‰C‰‡ą D „ B"PâPâ#A ’ 1!‚8öw)ˆˆAâC,r ¯QąŅâøGĮ„ĶtU‡Ŗ[|#@hĐ=“^mV—ߎ'Š8–8œr†N9q8âXâC@âqąL9!ČŽ%Ž'Š9!ÄDˆ9rC‰ĮĮ!!,q8₠x?ËŠq8âqÉ"CCØL š Ŧ8œq! ‚ ĸ?,r‡$9!ĘHƒ‘G"Žä5‡‚a@đĖŠ<"c‚#ũī[mÛ ž›h0’môâąūžÂBN9C‰Į"ŽHp‚ŽBqʐá%ŽHq(r‡$8‰C‚LâXâqÉBX䇎Pä‡,q(rC”8ˆ”8™ČŖ„–8œq8á%ŽBqÄã‰Į‚Įq A ąÂB ,q8âXäŽ%¯ręDåHq(q3‰Į(īÄã„„‰Į(rĮ(p‚Ë „ã”8œ|H,  Š1ʁčq0âPö#˙¤ėTSū“né:ÚēS`wwū„§DDBD ą8âqÂBDã„–9!ÉPá"%%"%8„ˆœq!G‚ŽEå%Ž%%%"‰CˆˆA‰NB¤‡}2¤S‰Į!°‚‚Ë „ąÉHp‚‚Ú  BB ,rC”8A c‰C‚#iCœBD „DBD ą8á9āãŠ㠔DHQÂB øû§Ú}o¤­/tŠŋĢũ‰C”8”8ˆ„ˆˆ‰Į8âXâ"""Xâ$(â#bÂAʑ@‚"â""B8ˆČGDr7Ņs1‘ŅČ莋ĸ<^#ätGDtc#Ŗ`ŖŽâ"qÄDN8„‰Į ‚ „1œHQÄDDã¤#bEԊ9ĐâXâqőßĨKęûũĩũģé/˙ô"'N8–8ˆ qp’&ĸ"'Š=ˆˆˆˆˆˆˆˆˆœp‚ˆéqÄąÂKN8AėÉŽPä‡q3’aēø”9AÉ%ŽHp‚‚‚ü_˙¯[ëūÄ$7˙üĄĘąĘ$9!ÉHr‡"žBC@ä‡(rC’ĄËŠ9!Ę…ƒ×†ČŖ‘G ƒ‘G$9CŖ„–9!ĘŠ9øŽ¤‡ ŨČŖ’ „ąĮ$9C’ƒqČfŽE…A ‚‚hD „ „ ą´‚Aq8á'ĄÉPá%Ž%%S“§ĸcn9p‚a ” „BDDJG ¤>Š˙˙īŽģN‰=W˙ÄąÄBBq,q(r‡ĘJŠâ"qÄD „BDãä‡rC”9!É%EDA!"8„â'á!č$.‘‡!8åHr‡˜q(q0âP㈈ˆ„C#¯}qʐä‡(qž"1!DD „ ŧDq°ŪXâ#Å×˙öąÆÁđŽ÷§ø‰cˆ–8„„ˆAbXä‡!DBKD…DN8„ˆˆœq8â!!ˆÎ; !b!‰Į8âqÄ „N8–=ÖƒqÉEDbĐAËŠ1ÄBBD…eš4]Čü „KDG!˜8d| ã_&Ÿ˙˙R1Ę|Ę„Û)ÉŲ‡.…ŋ˙ؐŖ’Dã‰Į8â'Š8˜rCˆ‰ 8–8œr(ä‡ Ür(âB"qÄN9!áˆDt-8ˆˆ–8„–8œzb,q!GŽ%ŽHq8äQÉA Ą%Ž$åHrCå)2?&9ä(rCn<2 Įú˙˙ÖFDގ÷õĸĮ$9CAÄĄÄÎ"XâXá–8A c’åHqrÉ 8„‰ĮŽPä‡(p‚Į åHq,rC‘G!œ †‚Đė ’.˜’Ñ!,q!.Ņ•ytĮRC„œq,q8á!%ŽBqÂeēOųC‰C’§@„Jq!q!G"°^""$p‚r(ū˙˙íīƒi¤÷Ūŋa' „N8A$ ā‚8âCˆA c’ĄÂHhâXä‡$9C‘\D ‡DąÂBDã‘G‡(qExĖ9CˆAb"XâB4APrŖ°Ō ":ˆ‚BDBN8ˆAœr‡ ‚A"?8á"%E „ã„DĄķŽ"A´r Âh"üáÄ~˙ŋzëÍXzú×˙ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¤A3ȧ‚!G3¨Š}xˆˆˆÄDb'D㈈؄‰ĮĐI(Ŗ˙ß˙ė{öĢKסėÖ9!ĘŠ9 ŅČ9 Î9 Xøa("ę'KEČ`xA4‚ ĸƒËt™t]IŽ%ŽHq!G"B)t¤QČ)&˙šĸ÷ŋūÍš+ÕXThžžž¸„„,Ž)ȎDr#ĸ;#ĸ9Ņˆā„qHáŽG’8`ŽG":#‘ˆäGÁČâ‘Ņˆā„tGdtG ŋkÂN9C‰Į(rC’†!ņ!G ´9!ÃĶTqČŖ’HAĘ‚&‹¨œr‡!,ä‡, „öÂh"üąÄHe!$‡ũĩõŌÛJ›W[¨ü&ÚÚÚXFJD§ÄN8„„Ž!"qÄã”8A c‰ 9!ʐä‡ÜDã„„ˆ„„AÉEƒqÉ#‰C‚D „Drp‚h ‚„%8Aœq8á%ŽBqĘã’ĄÄĄČŖjä‡!˜ V‹ōC’ĄÂK „ã„–9!Ę „}üDĄÂDD ‡,q8éÕ†h÷爈ä‡ûISģ¤ÛIÛI†ēVWŽŌzuœDDDDDąÄ „N8ˆ”8ˆˆŖˆ‰ 9!ÄHh ą@†ÅˆĄˆˆˆAŽ""""H&‚8âqÄBDãˆAœq8ņA ‚a! Āâ%8Ž"‚A”á¤=†)˜NjÅlSaxa-ēa„˜ia8Ŗ‰8–9!ÄHQČ`qqĮ$8œqŽ$AĐL—EĶĩX,N8ˆœq3ˆŒZ’JŠäĮ(w ƒ‘G$9rƒ‚, ŽLq8đŧ0„FƒB ĐaJ„„አB BØAeŽ%ŽHq!G"ŽB%ŽHr‡!$8–9!ʆhâC@á"XäQ Į$9qČ„FLrC”9Į Ür(ôAPpČųt]4Ü"üL9ÅPä(äQåš4Gá!%Ž%BXä‡(p‚ŽPä‡ÄDHiEDۉC=Eo;)ĮÄDD\Dxˆ–8AAÄ „ąÉEG‚Pá$4Hq!8ä‡!!Į$>(ē.ĸB'ĄËĄÄÎS¨Ëę( …C’ĄÂDD! ‚ˆˆˆAAœqÄl „HQŌA$ „GÎԟū‰Ž"$(âB"C,q!!à EԐâB!‰Į(q8ä‡(rCˆ¸„MũÂ)čDK†ĮŋÄDhDqÄãû^U%ą8ä5‡8äQÉ"ALr Į!š9ÁqÄã”;d5‡TB~$ Hr(ūí>´På%Pä‡"¸”9p‚Į!G"ŽC@åHr #‰C‘! @á$4Hr(är(âEˆ9qHeŽ‚EĐJHsŽaÄąÂG!ÉC× „A˙.ˇK’åHrC„œr‡$9!ÂKv1É%"BĖ† Ür(đ HC’ „G!–?OĒKņ,N8A c‰C”9! (q,q|D‚Hq8äQÄD „N9q,qr(á–8˜q(r(øŠH ‹¤B!’HQÄąņ(qAĐIMĸ""!"BB"qíÁQ!,q,rC‘GDąČŖˆ„+¨ˆØéiēĨÄ㈈‰Į!8â"$DDD¨ˆˆˆˆ‰Į…¯ÄDDlāƒˆAnPĐH)!Č7DĄÄh ‚hÉ!%Ž!"qČŖ¨ˆA4ˆūÂ(v$(â"BŽPä5QĄH JC‘GĄ˧\žÄ…D…r(˙Ū%Ž"' „N> RŠäC‘G$9{ëÂæ „†XäŧąČ ä‡(p‚ČQČ,CXpˆę@ČŖÖrÒĄÉXåPęHrCôšc’ „ã”8œrC”9 ‘GĸcÍ$H$‚H$RC”8–9ĄÉPá‡H ‚!ÄąÉB'ĄÂ\‚Eƒ ä4‚I%!!!ĮĮôąá‰8„ÄDDN8’ƒw#â$(äQÜKHQĆqÄDq „ZH">ħ!AbBB'åBXá8~Xâ$QÄąņ‚ÉAEÔ „DĄČŖˆˆâ",!lŠ ˆ„¯ˆŠ “”8ˆR‡(qĮ ĸ$(ä08ļ! ‚F"8”â""#bA2éŲCĸ:ˆ‰ 8ˆ˙â#x@ˇõ­ãĀķ•DąČ7ƒHŖįČ.9‘Ä…rc×.ˆęA(|āƒ‚# ‚i$A0’DŽC‰Į"iC&9ãÍˆEB „Š?ĸ#ʐâX䇎Hr‡AGŪPâaÄĄČ8„GQ.9C‰ 9!Č`rC‘Gą!QrC”9!ąåˆ K–8A !Įqú˙˛ Ž%EBJJ‚j'ĄÉPåŽBXä‡$9Cä‡Rˆ‚A˨< ė›Ĩâ"qÄ „ „qa>%Ž'â ĸ$D…BDã„GR‡ˆ)""Xä‡$8AŽC,v#‚ŽPâqÉPä‡ Ü{#æ8„$tŌ ™ę&9!Ä „ąÄąÉ!„đE<爈„ˆA„'N8¸Ŋž@đn8øŽd°ÄEDDDKB#Š„DG~"""#B"AŌ ˜L(„–8ˆˆA¤A Dˆ8ˆAč$IH'÷Â,zc‹¤C8ú"čēĘ†°é:ģūų!ÄHQČŖ’ÉHqœō Į"Šâ5––a%ŽHr(öAPr(âXä‡(|XäQȃâC,r XäQČfŽAá<ɎHrœK‚El¸á„Ō#Ļ‚ _ˆA‰ 9C–9CĐA ‘„„Ŗ‘G$9C„DĄđ‚eĐA3ČNČm„ķ*–dgņ8â#eA¸ų‡‡""6Pä‡"ŽB#ˆˆ‰qEĐA5!!‡$9Cˆ‰C‘_0â@îˆ°C‡č$ "qÄDD †ÅP\tn˙BâC¸HŲ%ņ î˜A‰æ˛bBņCšrįÎ@ōl0’ē‰Į‚ŽEEÄPA4GĖŊÁhb?ĄÚČŖũ?ČŖÍĄāÉŽ™CĄeaA„qÁŒņ—€Ą !G$>CXuüN9C‰Į!G$>ĐH&!Du \rŖËrh$.¤Š9!ÉHr‡$9{ N:Lŋ‚Pä‡"ÖIŋūPâPäQÄC„Ž8„Ķ(rC”;éącf<$¨dŽCXr 䇂…†AÂ!–9!ʐâ%<pDs˯~Hp‚r(á’"#$8‰N"""qč†`âÃAv¤‰|‘ōüDEGß_øAŖ† R]9ë6â"  ‚'@ŠtrbˇųÎXä‡0ãb"‚IQ(p@„DDG(p‚A$A0‚lHQÄD „F[˜EŅuHq0䜍ÅD†É.,D2:ˇ×ŽŧN8œq!G|f΂ ƒeĐa8ŗ„áį * PlDj˙¸ˆ´‚J"qáĐHē’N8A cˆ‹ÖD †‚AæqÁ܁á¨: ī&ĖĪ5—8LėvJc\javB%ŽHr‡$8ˇī(ũS tmˆWTAdr(é:&Rc‘Gĸ„—EŅuŽGR $N0‚‚ŽPä‡$9Câ*ö‚&¤ŒrĄČŖ’ĄÂ_ë*  336Âŧˆ_‚  3C6h">čwĄ‚G •"‚CˆA!%ŽHp‚lDÃņŨzA ‘ˆˆˆí#áœp‚d~žëąA¸M­ŧ㴛x„ßlBn›MÚMÖ×]Sģ„°pžë\\†°á ‚ ¨ˆœqŽE ‚.”čå##ĸ9ȎˆėŽ)0‘ČŽˆäGŽ2âBŽ#‚#ÖŌ ˜A4A¸äŽHr(øˆˆˆˆ„ˆœq8â,PH ‚9!ČŖÍˆ!ÂQ8ã‘G }#ä2ĮØi{_uīûôõēUúKüâBŽEęŽ‚Žž,â0‡ŽK›.HwöQąäG"d㠐@‹Šc’Š8”9Čj@q& ˙ģ!DĮ(rCˆŒDdQÂB ,p‚C(A6Hã„GâØ ņØĢŽ×Å+ë¯×ĩÛKūâ$(á"{&CXqalĄīØ_õū=_ą_ę׹ ąVØcīˆ÷†ûoÔhĄĮsB7ąlЉ 9‘ņ!GBA1,rCˆŖˆŽ($H$qÎ:J@ņHÃåŽŪ?˙R ˙ÂúGÕ¯OĮ4Ļ|%´Pë’xeŽTtP厨4dĄ˛‡UŌë‚.‹ŽA¸ä3G(rCŅC'gD…rc’fF?‰N%Ž%ŽHr‡$? !rc„âŒQ…˙˙ā‹ņüđ 9!ČŖÆž)Gd‡OÂ!āÂPa8ÂĐlĄĘŧ† Ō9ČŖĒū%9‰c’ „FÄR!DtĐA$GP‚CĐ9C’ ‚A"ęXá!DGeĐHŦãâ+öCh|ė-˙,ˇáü°äõėqÕxpÂXĐąąL{bąĐA0šˆŖˆ‰ >C(uĩîŧD…D~"1A‡_ņÎĘA˙˙¯Đ_éũxŖPäŽÂ8í>íŗƒĖ$kŌI˛ #ᄐEÔG‚  ’$‚ ÄãėHčē.¤5Gĸ†¸áôĸ#×k…Ÿũ×ū—ī)ūīሜrC‘GŽHr‡‘ô"!Å#‚ät‘tGV… ˆčŽ‚(u #á8g!Ą(pâ$qÉ˙D8䏐< Eô“H ‡"A"Ž9ƒqáĐH球’Š9!Äã’ƒäCÍ„Ō#áœsŽŠCŨƒ‘Á‡*…f?˙Ūyz˙Ģūˆ„ˆŒŽ‚$9C„–8œr(ãFâ"0BŦÂĮ‘ĐEŽBXá""C@âBXų „‚&˜A 9!ÂHe‘G&ĸęē#ņ8á%Ž%ŽHr(ø‰ ÍĶōCˆAœq!8œ|FõA´¤!âŌÄDG˙ruĨūa{i]¤Ũš,ōĻ"""qÄDHQÄEÄDDDDDlC`†!8Ž"ÂA$A0‚qŽ""B‰)X™ÄD…G Ę: ’āˆå„ßÎĘuũ´ģK˙UüŅ$ßæ‰ĩÖŅ 8pA2œŠØ@ŋ|qaˆâ, ™åépˆũČa'×īí­¯zí…W´› é6—8á–9ÁqČ`r Į$9Cå@đ7ƒHä5‡„A#&9ČfŽEh$tØGtGäĮʁá˜>ė—SHr Į$9Cā?DTŒy‰áÕ}°ƒ „„ lSM‰O0›AÂ#ôà 0Á(éˆAä3G!ƁƁą†$8ä×ÄJŠ8‰ôChr # ‚†AĐA9wH9C„ŗēmC8åHr‡HQėáš:h)Į8āˆü ãí)ÃM{Uė.ö6!1MhDG!Gq!ą $]P‚Į!!G"ŽHqÄU‚û~ˆlqųt‚ô""#B/PŌ!îŋÃ"-h1 Ú8ŽCXp¨ „b"qÄG xå ]06ˆé‰ !ō‡ ļ‚Eԃ‘G! r(äQėá¸á)_ãŨZD ˙8×Ņ î!! rC‘G$9 Hr(䎂Į$9r ĮÆ/ÄąņGSNLr(ä‡$9rC’$L|čq!G"ŽĐH"čPH ‚‰xqÁÁ„ABPëôãũüĄÉ"PäQÄDDDã”8Ë8ˆŖ‰ ÍŠ9 L{ x7B  ‹Š 8A 9C’ÃŽE!,tGā‚°EÔDDąØBNPâXųâXä‡!ßōrCĻ%Ę*ĘƒqÉ؋ũĨ˙ņ8âqÄHQÄDDDPcBąŒv#bM Lõ8Ž""‚A ‚.‚  ‘’DąÕ°ƒqa0‘˜sŽÛûņb"´PäĮ ‹Ŗ AĮÔ§īzŋI;ˆ†ÂDãˇ„GÖ( H „RT-Š&=>vHŋAČ`r9C’Š9ãČ ƒšxËŠ8´‚fâBŽE&¸D6Į Üp‚AGé)r‘Ō ä6ĮL&T“‚˨Ŗ„Ŧڌ”9CŲÃ4p@ŋrc†Œe…ÂhDDDąÄlæ8„ba4#ōę%8–8A c‰Įq˜Sb$4-6ĐID „o(r(ø† AĐHēˆ?jâ4-LōķŽqÁø‡¨C‚_LHeŽ"$|rÐĀä09 A0…(ˆœq ㈠X"ëō? #üqq­¤÷wNč ‚IDo,tPäĮŽCXr #‰ :Ū""ŒJtڏŧA4A‚&ˆ äQíĸcĐH$t$tL­+ôŊ ‚a8œuü-|är(ä08”8‰ 9q8äQČk9 aąåh#Čųt]HQƔ|ā¸ā‹Ū8alF Š,{#āãĻ’&EԊ9C’BöTGTˆ2ŽHr(äŽĐIĐa$D≯øˆAˆˆ„„ËđČŖˆˆĶ„ĐH ‚A$(õö"M]L‘D‡Ę’F—]ë!,pˆ˙ņwõaŒ‘Á@˙_ą!¤9CAĘrā†$8‰ ˆ ‡ÄDDEWčDD„NˆŽ)d3 „DDƒfÅÄDDFˇ×DH5ė\Dom~AKÂĖŽ(0Bh♃Ã˛‡ gŨŠĮ!Ļ>¸‰ßmVăqú!°|ōĒGbĻv\ūF=„„ ƒû \~„Jr(áŌöā øŖ‘GģÎ9C’†hä‡u!˜9 Ēą…‚9ŦĄĖ9Ã8ô ˆü>úŠeŊ´F8}SĄėĄÂBPäW!ÕR&9rˆ8åqCÔHŽyyC˜rUˆũˆ‰dÄHŽSœsËS9NV‚)hßr áŦ9Į;ž\qÎ9‡B"ÆĮ =Ç´Čü#Ņ1G28¨Vá÷âXä9 w#rĮ8åA(r Į…ļ∋ÔūÁgt?uÂĮúĩBC‚dáŋ!ks°E†HrÍPøqļæ IU´$Fę ‘Gtä´ēm‘דL ‹Ģ ōęEŠ9uĻĘÅČ‚ „GĐ CųrCãûũ"N=áGXIe}‘ޤ ä‡ŦĄčt]R â%#ĸ:¸Du(|āãˆ">ž+!Į(rCáĘXø<¤‚! $ÄFDuŠÉˆh š&G’â?˙ÜĄÉ6!#¨Ų!Ōŧ]5ŧaĐI(”8ˆ°¯BR&GáqÁøˆâŅCŽ:īËĻDGG:ŽBWb“#˙¯_âqÅ&ÅģĄÕ{ũ}8ÆôŦm ‹Ļ ":ļPøá„‚ē&‚D~9Įbx„‚ ūÖvZŒ×ĢëQ´R:H0DtôĒĮ‚ ”åTė{ūę9Į(rCä Qûb!„‚˜rCÅ∸…Ŗ<‡ $&‚JF9ÂHr(ūao]}–=dQĶ ¸XÜ šC莑1Č`r†`îDL!Hd ä‡(rC­R ‚H A+؈â M‚ņĮ$:„Gã”=ˆŖ‚#éqČü „D}#Édk5ZfŦ§”‚ŧŪM[Cã‹eNtĩmc+ˆI™Čŧ4?RęHq!!GüĀ˙ØH%ía„‚AĐHēB0@´CBĐA">Ė8 ^>‚b”a=´yÁ„f†p l`šÂD);Ķ(tcąKpÂNŲCûí4aE$A DDÅ E×Â#¨Ž¯ö"#xô–ũ­5Ã&8HøŅņ‰Vßi¤|{Õ"tŒ8qąHôPäQԊ0á,PYú!¤1ųČŖŽ‚A ’$A9äŽEųäQÚ _ †CTrˆfAqČũ-[KhBV“|ļ“na+aÆaŧĄÂHhÅĘt’Žĸ9C”<1ŋąœš9yš?ƒqÉ-Ë HČQȃˆĐ>C@˙Įøˆˆá"Äh ˜MHƒ’Š8”9qÄąČd|2œã„]GâEJéëmoĢ˙ũ+â"ą@¨ō RqhĩŽ“”=‚Š ‚ˆˆA4ē$DˆD|„‹Žōę""8|!äãûū¯Ĩū—Ķ~ŨûØáK›@¯lO¸ ŸņŌ „íHPH ‚‚H$ãÁøøé}­éWßúˇw„}q¸÷ /šn]‚DD qÂûS˙úņn>CŒ4A2ęLũz۟Hw˙_ū’ŅcöPé~‚×ÁúÔ2†¸üDd‡ Ž>Aœv‚AM ’#Šņō Ŗ„0‚ —A ‘.Ļq! |ąđ‚)Ņ^8×ÃŊÎĻēÛĒ×íũ˙ŧ‚ãžÅ"c¸­÷ļ‚ņč8aœq‰EÔG!Įb˙Į  †#b($H$Muŧė§ã˙˙‹īú˙ô“N+P’~=_Pؐ?Š9!á ‚hēâ‚AGÁĐAųäÁČø|žĢøa„/˙/^?üąá?í­~üĄÉA¸îĘutˇ(}#խ܎ĸ#Ģū)0ÂA$GöHqA ‚ —A Aų9!Č7Š>@ô;A‘ø X"ę@đƒäQČk˙˙ũ6__×˙q‚ąÂPBáVņO!Ģ&=aÕ!ČŽA¸ä0]I#.8Ŗ’tírCÆŠ ‚tÄGH$*S #úĮ`ÂMŖģca¤ÚĒ ´aŌkawļ•„gv—peÁÖ$(â'DDDHAâA1ÄE EĶaŅØĸ> ]¯ Č=Áac˙†)Šļ˜Ļ!'q ž1PéŠbĄą\B"‰ ‰ÃHx _Č:ą&( œ˜ô@đ.;A$!„‚!ÕtA4wIHķ°ŗÁ‚„0„ !`ƒCLĒĄ„‚ r‡$8Ŗä $40H$]H‰ ‘ũĩxÔƒqđ‚_Č9HG˙†‚&]GÎʒxˆˆˆˆˆņHF"#‚AL$‚D~#Š ˆųt ‹¨ˆí ‘X˙Ŧņ˙RÜ".‹ŠūīCŌH ˜&!„‚!᠐H ™|%¯Iŧˇ—dŽ%EL&ˆüh ‚h$L+#ÜVŲūC‘G°DØØ­h×î´$6Į$9‘ÄH)E†häŽ@đV˙~C‘G ƒä Ō; G[ Ø9p‚A.‚A ‘uČq „D}„ãĸëCõúėDDDDbA0ĸ#ˆ°@˛ëöUX‹˙ŨÆ@đÜ|EXĐH ‚û]%ĸđ‚‚  A4A: xŠ;A ‚A„Âej< ‹¤ļÁ´ŧW(rCn9Á@âC Įåō>]øŠėEAM‹Šr(ôAdrŖ°‚h†L&]o Ââ"@Ŧq!â‚Ađ‚h$tÎå:.¤r ƒÖüē÷â$2Į ƒâBŽ$(ū°‚XK㏈Č(Å‚B‚&&1 ’  ˜CÄPI$ũËrčžGČükä~÷~.„ą#Ž-„!œp‚eԘūvT%čđä0vŠeR$fJ‹C ‚E× tGí˙÷øâ@ņū ™uĮ|&eb+3lėʆAŽPä} ‚.›I"?ĐH$EĐH$.¤AčXH$G×dĮÛŅáŖÃWG~ŧBˆRđC 6:.‹Ž@ņŽC‚#˙ŊPō #Ö BH!„–9 HrČ+C4tH$& hUUw[˙øÂ  ‘u ãWÄE‚A ‚h$GøĐ8üŋåŌūÄYß˙^A>ļ‰R÷˙ÄbC@ã´Š —‚A$H$.žÂ ĸ>Î8 WũtûŽ8ëō#Tą ‚B!ĐAʗ´HÆ…M"ęõã @˛>„G¯ÂAŗFPŌl:aÃŖģcįvL2Ž‚jÂh0ŋđ@ŋ‹;ĐA($h ‚h0A< š Ž9‡8é˙ÕÕ%ōžņAø§§ŨŅĮīūđļ@ārÃųQŌ„‚A"ëD;㠐÷ü _×ųŅīˆ`‚a2>ĄūŋĶĮõ}6ˇņZģîîē&9^!7 ČđäŗÍdČ'd † xHr‡Õėƒ0â)‚.…Mų Ņōcˆa$tH$]H7†høR A„ˆųN#ÂÎʁõŋ[Ļŋũ/úßßnļ$™P%œ b<ĄâžtDF)Eօwū1ą ¤=Õ ÂAÄlFB‚ —Č˙(~Ŋ˙ņëë˙ĄlVĮ´ĩh]Œl!„ĢžM‹Ž‚A ‚ēМp‚ Ĩå?„Gōę".@đã”>8ũ˙˙¯ß‡°üņ„S„yŌJm´s#Ŧķ đUĨ÷ūžĐA-Š ē ‚ēĶ ˆøgîēZ! –_˙Į_˙ėLũ¨ēyÁPt…¨Z:= ˆdÅL!ä‚ĐáĐH"éüēŅ˙ú˙l† Ü}(„$Ž„ë;$_úO˙_ôÃØÂOVá+­ Ü/Ü$@ÆB# ãØ‹ ‚I‚-M â"‚P‹¨˙0œwß˙.ŋ_ōÅ>PŪũĢJ’aôī̤(Pė‘ōę9;ūÛᤂ# I]v đĐA ‹ĢO1ŋ˙÷ö˙ū°Û`۟ßr‡ĐÁū—ÕB† ‡‹A$GL&úėŠiר"?øB!˙z0˙õ˙˙˙āŪå;ŪõŽŽˆę*;(vĄzĮô…H$‚AH>@ņŽA¸á ‚R $K”9r CŠA SšĮG˙^BCP|ė¨˙üō÷ī'ß8ˆĖ>“zIoĄe…(˙„PîC 3–åĐH$]y_׎#ėBq C šēø^—Ųĸ˙˙ŗEũŋūŋēuæÃ‚(|7qh1â#Ú ]6‚ ũ Aō戸HēĐļqÎ9åŨWŨxíūęŋé{¯˙÷é7õ_ûÅU'˜ÜHčē.š ąũ‹\í R Ú$ I*÷VŨ+M†—ŽÚûi*đŌĩēUoé:ü5ĩĩī8ä‡" ’.ļ($D| ™Į - Áqûx˙ |=_Ø ‚HŽĄurc°Â@ˆ[!|P@ q„Aą„B[¤ÅXTÂh‡ÚJŲ+uĩû Ø„Ä‚äëĮD ĄØˆ A"ë<‡$8A Lē ‚ēŽÚ ÷˙[ˆŖįe û•҆™ĮMU´TÖʁMJ°Ŋz]EE)††[á†â1A(eŒē.‹ ‚˙â"7q¤cĐaÂIN\Āãž"""""""""""";„ûČęÂc‚*zĨ ]‚A-¤A š#ㄠšąōx [Ŋ„.íd HQņõ7Š„y†ĖԘĐdtyÃiČĮä.ĩÅL!åŽA ‹ H ‹ŠĄÉ$(ö- ‘tØ,uׄ?ō7G(†G@ˆ0áDA‚(q‚ÂÆA×eĐHŽ—˛ëcņŨøˆõ$A.ß˙ÄDDDDDR„ˆđÂ&‚ ‚t$Gà „×H$ Đ¯˙ũHdįd|ē.¤ ĮÁî#ƒ/âZ Eԃ^„yDGmˆøiäu x‘éd2Į˙ĐLa„L!māŲ9Øä š ™åĮsŽˆũ<āƒ.8 V‹¯_ĻžCü a?ũúޏĶđ‚A A$H$]qh H0A+÷Š š ”˙Į_ŧVHē.ŗi§‰ÃqūūŠÄ>@ō QĨ (+Ė,ēYĮb ™ĄÚ‡úō ņs‚&ysIGõÛY $GTGōë­¨0ėR‘ôÂPÁpЇ"ŽHڐdF[„EŅuūéCA ‚&¨"?Ðé‚Aà šŽ i‚A @Ŧ㨈Ž"?ŦxH$‘u§_„¯īū{ŌĻ˙íŠ …˙ãčqĨī´ „A˙h$A2ę‚AĘ[¯ $D}ėŽˆ˙ÎÁüHč ™C¯!GûøŌĻ bA#ūŧ š H š_;) ge†wĄ‘Sä ÁĮ%XI$‹ĒũŠ ˆøA &]~ڏų…ūúŋˇG\áãô>П‡˙×ä äņÄcŽ@đAĐB($(Œ?ø†hDlq'Xt­õ„bí ‘Ģ{ˆˆĶظäG Ĩąq]Û!Šąz0ä0>9ؚë*Ķ{"Ž@Ėc‚ZÉ ö."#^A´}! xĮzßČ)Ã! õúâCPqŊRĮÅH6á%Rã‰Á‘Ķ šÂ!Į_kô$4­Č1ĩCŽU•éĘŲ!›Č!‚ƒc”įōâCœsÕDH@đÕã’ŠhqÎå=ģŅ @đlãœsË šĮ Žv 'ø¯ÔāØö„DDNÖŅt]5][&‡&ĒíáéNž–Ÿ„‚A  ˆ÷ōCįeA˙˙ë#ŧˇ/„‚IiŽÂũ÷kÖëÅ$uû¯‰M]q! ~I%}~d2!Å !§ä3Ž@ķ EĶa ‘u­M]Z¯ßŅÁ´tGÕŌâC@øo&RädEŊ¤!ųt]iÂXŒlP@˜lwŠA’ $‚]ˆIŽM‚GÃĨã†Tƒ8a|ĖD.L „ øpˆ|›d2$ÆlgÆN3FrÚë ‚EÕąč„˛?_Öē˙ûŖØ„˛?ŧ7ēhGÆč0ÉŅĻŦad Âhö÷Fļ°; ˙ȃč\w[A ƒA ‚#ô´ *Z ‚A[vC؄ ˙ŨãāÁîmÚM‡GģQ*Ũ:V %c 6a%k‡O_C:&PÉ´ƒ_˯Ąėƒ`ãlDC „1ã˜t‚MŠt—øĻ)Öâ›é÷Ûú´­Ũ&÷įēÆM‹¨ˆĐa A *#BAōč.ã`‹¨a2ëáÕZM˙_Ĩ˙ū—÷Zũīō†¨é°Â&Ã[*Z ’ēâ‚A">-ũ˙õũØ˙ú[zMũ5÷†A0‡ËP@›#ũä‚ƛö< A0‚ø ŋ˙÷á­ũ?õᯅ„ˆėPH A ‚ „+M菈@›.´&ÂA1.ŋ˙ö˙îūÔWä ĮČ äöGČųu˙Ō Ž‚I—A ‚&Px HŗŽwīA˙÷ũl?˙CmcŪAZ€„ —„|Œyᄂ!í.‡˛>]rcŽúũ<5~‚H ‚z0äQđd ˙˙ˇ˙Ŧ˜ģŠu—\h< Â#°ƒ0šÂB=‚ „$A0–Č4Ž!&&šÃ$JŋąíL˙ú˙É˙í?H/đ‘ÄÕMzĨGų.‹­÷KB4Čč$A\XA0ˆøaÂGõ˙˙įo˙ũtŋÁB#€Á AŅÂú9ŅÆŌ%Â!ĐA">Å’.ļ@đÕ AYRĶ˙wčE˙˙˙<žÃŊyå÷֗ô—i&ꗄ0ƒ ¸ü4M0˜Aš$a‚\ š ŽįųŲh˙ÛKõ˙˙ũØī˙U­:CK÷ōÜž.‹­‚#ęđ@ˇ|áČŖÖ’ ]‚†B(ũ?˙û×ŊŋoüŅnię]d‹ē÷žÚ”ũâ"<„ ‚ •/h ™uÄRA%#Ē#ųuŲHĻGŅą÷íĨî•ö“¤¸Im†˜ih}ũŌŪ–¨Ąâ5J[„EŅŽ1A„Â{H ‚a„ pH$L‘˙ ›Đaƒ 0A„PL á¤Ã !R 0›í‚PÂ0đûÂ_Ģ} s4ē„’A]qŅu ßûûņû!G÷Đojr!h4ŠV)ˆMļƒ ˜Ļ!5֒fȎ-wKæĖŽ/ĐãÚ „0’"ë–9 aà „„‚g#$#čE*×ÄDDDDDDEÄDG} Ŋ~Áíς ”2ˇū;`˜‘Đa ‚ ¤H$aÎ9ĮO˙õŨa}FÕĶ!  $‘uà ‘đH ‚eũ Ú˙ũa°˜Bˆë˙Ĩø"œŽ8kz“["iņä QÂA ƒiuĐH EĐH$‚.´H$G˙˙ųn'aŽá&qk¨; &* ×—ÛõämØâûN.I ‚UûÅ1Å!LPaˆHDv‚A$@›A%Ä 6GÃ)Î:Ō&S„,Dkí/­Ķ š CƒMDOËĸčēú|PA ‚á’A‚ ]m´.™Į0čū×t´‚‘ō:T´dt™D4 `ĒL&ģ&ˆ˙å×!¤8Ō˯ūCŽ@đqÁūAA0Ÿ!œ}†áņ„""#"# $KˆI’ K”8ˆh$A ŋŧpÅcÄeš|—Eց˙§ū+ÂA‚.¸–:&‚EĶ&‘}…ø†aÂ:‚h ‹­<5GA#¯īˆ˙ $I|wÁøÔB[!ĶH ‚a„.H ‚×įeKđHē.ļ@đÖ$]X@ž˙đģūĸ ¤G˙ûˆˆö‚ đÂh ‹Ž‚ ‘PAˆ˙ ">Gâ*ŋåAdhD2U-Â"čŋ˙KãČmŽ8aD0‚'ÂA AsŽ‚_ž˙>Čș–á ’ēč$I$Iū!Sī§åü6…놁ų †8?aŨhMBA#ü4Dt 9<0HēTqÁZ°í~ßς ¯ėē_}î‡x¤b’I%ųC{ki× ô ‚‚ áL†S…}amˆģ˙ßãųt][.ũ¨đÂA ‚A\0ALã˛>˛˙¯˙ &\„ā㋠ˆû¤GË­äuŋ˙¨IpO{˙_xŠ …¤H —iL0š pH$˙ūqßëî[—ÂEŅuüuOü B›# ’ ]r‡ÂEĶ2?˛Cn>vTŊŧčˁ_PÂĶA<ŧ&‚ēä6Į&Čë˙‰ČaÁę„V„ß3Ã03 ĸ™™ƒ%b„hyÃ…‚t#™xb üē.ģ†!6Á1ؐŖ„L ˜a4â ”§8įöô|m4ØôÂ64hxFū B`ū $]p‚d|ē„ ģ|~ḋa)"?ųīVŨĒۏomĮAÃ1é6˙ˆˆđ‚h ‚g—0‚a]@˜˜TIūČų#čDW˙}-Ū—Š×W_ô›boō¸Ŧhˆē.‹û۝đ͙qßŅÁ`ŖÔ(" &øH$ sŽw_”7īÛ˙W˙ęīüŽP„0I]p‚aB¨a ‚&¸ŲNˆú¯ūØB/˙ˇŽÚí{ĩĢÖū­ũwžģãÅ6ĘßT0‚ „GøA ‚AZ„‚ _ᄂEĶÎ8DdG˙ŋQû×ūēÚë^ƒ „ΟAn˙ŊųĮwÉá>ˇcČc°˜.IĐãí˙§KZ×ŋ˙âžōøŋ$(.‚A‚—Åø A$؜r(á A0S† ˛?ÄWiŽ/yØRûũį ž úūŋ…õëÁË­ ūģĒâ! W¨H ‚e×$8a ‚#đ‚eō?Ŧ>›ūëÂ4|#G˙ūüoß× &\ ‚h÷†ÂA"ëîČë˙ū?é<į„l_ęŨŋ ÷īú ˙o†‚ ūA0˜A ‚ivô‚I.M’@ŧ# ķ˙ßîĩA~‚˙˙ë ˙ō-‘ōčēāˆúŋûŊčā\xŋŋh!ė!A„¤ˆ˙oŌo÷Ļ65ũ}ũûÄ0„yĀĀí#ō,†A]rä‡G ĸ:`íu.‹ũÎ:#é!¯öũ˙Ē˙Û[ÚĪ.˙¯ųaq#Ũ„ļÛĸšlJ‹Û 'a„aÄī ūøI$uĐAĐ[é „䇄Lēũë˙ؤBˆëˇīâ Âh0š &j0˜FxhŅ1 ™N Ļš €Ę‚NaʂPF9C–9䜡ˇ˛‡>ũ„Ü{ÛÅĄ A=á$A3‘† öŦúY !ČŖ÷Xâ""""""""<‚¸čDDDDDDDà š.ļ@đ08A hŽŒ.ˇo.­¯÷ûß|\$A4ōC’ä‡Û üáŌxˆa0‚°Amhá¤;h$]ia‚lC EĐI×Ų Ë†áĨ¤¯˙~]p@¯ŲáhŊ[õH$Ą›R&]rpÂH">ÂDä â#ą]`\ŽÃ „{&ˆüö)‚ēíu#¨7ŋ{â]žã†ޝu؏AŌ éÔ ‚h AėĀė$Itá„Ō ´ )Į8ā‹Ž–=+ûôFō>]ZŨtÖÖöGøÅö˜LĢK_„!‘ûū: xw!`…Â+š(áĒųXš h ‘t""Û&]H)ƈøH$""’AÎAŒŅ#åÔ^üíIü‚¸čų†!J™;(PÄDDŽ‹ĸųu q~čNΛ‹O xqČŖ°Âiŧ$ …sŽēūŸĮ Ļ”¤A„"*„CÂA$A ;A.„ ‚eō?ē!G,ēõ§üCa0A‘û¤C•Š_÷Ü?Ļ¸ûūö‹ "ꍮ( ’ ‚ _Ė.AdpÂD|ēãáĮF7˙G~ļžoà „ÕŧN‹Ļ^׎ŧ8č>)‚! #Ž ĐáŅÅŽ™VEīJá$^ô ‚‚ ¤¯ AA”č˙_ll\H`~Ģ˙‡øoD‡rcá×ųuúū.‡ ųaÚÂH …Õ?!Ã tÂã„Gã÷ås\ųŸ26Ķ×Ō$úęëà  —ö‚ đ’8á\-kŪõãßH&‚ņL ‘™ĸ šŖ\šûČ+ûąÕŋ÷í%{Ķ $_$9ÁĮA ‚.ƒ „넂&–˙Â5´40ƒÁÇâēë˙ƒˇ/¤]UÛ&F_đDô"ŊW{ÄCa ųÃ\|xMŌ6mūˆ+ŽŨíũd5xˆõh ‘t ™uī x`tI$’$Gīė‘ōëŠęŨ%Ķkm~vYņJ?úŽ6‚(~[„EŅųC˙¯áüHQØ*"#W˛NLr(ä‡"š7&9NMÉš’å B’8čē_ß*¯kĶūú ^6:ˆŠSÂI ‹­ŧeŽPä‡%œ˜äA˂C‘G"ŽAA A ‘Ē !בĻ`ČčšŅ6Ė3™ŅxŽˆæn<™Shãŗ*˛>GĶôVŨ3„ „Y&‹æhųŸD|؄x¸dĆՐ°@ūīzž˙ūđŌīöl“Ž"#;(Z÷ÔDDDDDDDDDGr Ŗ R‚#ã‹â$u KÁWãšĮ"aČ8ˆŽ""""""""œ0˙ũĢk˙˙œũvĄ°“ˆˆ}‹ˆˆī„„DDDDDDDGõ_ũ˙uîé_üõßJīö̝Ö÷_ä\ô¸iÍ­'ĩ˙ęˇãūŋ1˜#dqūaš™*2„N‚j´ēîíÜCëŋëÚY‹ž÷¯Ođ‚^ŗ€‡9 €ÖáĨ†!1[Ļ+i?Ø„Å*RšĀc9ģ˙Ffį%9įĩœÎT÷Ņåíũ}ķ6ú6Ú[Ķ_ôáŠÄ\DB""!„A„Â`ƒ^­ ÷đôi Õ§ë˙Ą›5<+œ8 0ƒS`†ßKA›AŽ×oĻßúë\0ļ„DDE÷ŋ˙ĶXīõßūĸ“mUcĢūø˙úOu­Ķū:Ž‘ÅûûŌūū˙īA_ĨūÚõūŋÕąīˆˆ‡;*]?Ģû˙̝uīūũ˙˙ëKûŋéëX¯ĩœOæ÷íëŨ\ß˙aļ“ßÃõ˙¸vŽ,Úé~ōČ?Ō\†>šĶ¯ßÃĩ’ Čgoų ƒ‡ōŌš!ÕēęH ä2]<~õė>ņÛÛû}0â¯_oũ|Vēđũ×­U¯aČ aųū— Û_!hí˙ŋöÛ˙Ûë˙oī˙ÁūDĻëoöūŪuÛ˙†Ø}öoĻũđÜā?ø[ĢÎ ėyCkÎõŨũžđoœ yĀDÛüāh`ũNŦ<Ø_6ūÅs€Ÿú ũúCoŋīč<âuĨ[køw÷´ƒ|âëŪ×ēí˙s‹L~Į|˙ãũÛÕ}ũßũ˙ūë˙ú÷ŋŊ÷ˇąö˙îßëûqí˙ĩû¯ä˛6_÷ßö˙~ŊíuÛKĒūëŋ˙ûKûKÛ%‘ÜĪķ‚öī÷´ˆŪģūŸ\ƒžC ]+WōÕ}öȃä­ûa¯všČ QúneDt/tŨtūė0ŠŽŨōöVXåšĻ­„—#4¤7oá‚Ę „¤3ĩōA įFt…o¸PaųöŪūėRČb}âĸ4*6+ĶJ?ëc¸ī˙k÷!’ĐFåũ?;-DĐM‘ ûŋģMw×ģíS_Ģ^ßžÖŊû }¤ę­˙¯ŋũώßŨ­ Đa}SOī†ļSUá„í4HÆ˙˙R­Ķ˙۟pÂjžqJĻŅJš &GËŠvaEŦ!DDDDDw˙˙u׈ˆˆˆˆ`q„_˙×^úŋũŊyK ķ-Čg‚đ‚O›‘á>6Á,<Íd09xGšįe&6g ņœÎ#6s:é<â5D)…Léô(ôĶ&éŲ8&æ‹áöƒˇPŠĒ_úzGžđƒ@Ô ŅėīD.BDx§3"ņá˜$Bƒ´’!|Ŧ5h$mÔ=˙kËĒŋ^ŋŖÃĐ@áÇG:<0”Jg ƒa´aÚ ļš ™;[#cÜŧÂTAĶŅöJa`Ĩú19tÆ/4éžžî—ąMíoN“lB“ģ ŦRfBŋŊūŠ˙ûĩáŨÛõĨīCũ}?Įõøí:WVļé}jÚÛ×ú}ĩĩõ]÷Õûûūũ§ũ+ę×˙m}--ŌīåÆĢß§ėzū¯ĢOĩi2ûū$QŸü˙ū´›ë´ŸŊŊŽÜ*÷ôˇ¯^Ō˙Đnž¯˙īõ×˙˙ûékĒ_Âøw Į]ÔpqüU¸]˙üuī˙ē×Bū +ô’îīt§mÅWŽ‚)ĐÃ×^ģo¨ūžŋ]ūēø˙K×ūę‹÷n×@Šõ¨(-ZVũ×˙;˙ŋ˙ËōÄ}îŋ¤ßÕx‚)Úîcöõęíúä`Đ9‘ČÁŗ‚ ₁ÉA øAÛ˙ūÃKŊū¯˙ūˇŦ[õ/u××öÖC÷ä2˛ČĮ&9Č܎7˛  å9 d,G Ņ$É Ŧ#äŦ‚Y˜DÂ1ČŽBŽGÄxC 0“–änE–š1 ‡â^D⁒r7!G#äČdƒlĖ9!Âdœˇ EíO^đ‹ˇë¯üB˙ũß Š˙ĐëēÖat=éßŪ]wZíwáN uA‚0ƒR+Ŗ Âd2›‰šnFäQîÔ*|4īNÖ˙ĶÕs~⊴0^ŒoĐ%ē—čĀ-†qÂo˙˙GœëūŌŧōUW§ĢŨ)ĩĩíđū9C­ŋ‡­ôž_˙ËĪĐ$cl¸9}Ėnõ—Ú09˙ĸ÷åÃ'.bˡüŊ— ÜYvū.ŨKÎ]ŋZOô˙WønĢŌom[˙×ūÍš:§ÕŌ[ÛŽ‡MķÃļÚ˙Ė6÷~•ní{[ßũ_ԧ鴟īzßõIŋęúē˙ÛKoūģúzo˙˙Ģ˙īŧD…ž˙ęŋŨūëöŠ7Ōqë˙§ęŲ@q^Ĩ÷Iāö*­Í抃0ûõ߯Û×˙~ß˙ßĶû¯˙˙ûĢ˙ŋ˙ëúŋë~˙WļŽ>Â0īM;ĒÚW°Ōí°’Û~žéytUS„Ēk}ëQdž×Đ˙˙ę¯īũw˙˙˙ūũŋ„Pū˙˙˙˙Ú˙Ąũ˙˙á?˙ĢėT6)†4Ķ °qA0ƒb‚ &Å ¨?Ú\DDDDDDDDDDDF…‚Q_˙īī˙īá˙˙ūëëô˙ë˙ö˙˙˙˛9˙˙ßīū÷\L ”°ÃNÁ… ÂĩĶLWÅŌ˙ûßũũ˙Ōžŋû„S˙˙õ××Ĩ˙đE:ß˙ū—÷Ø_öë„P˙ˇõˆˆĸņˆˆˆˆˆˆĸc¯ūŧO߯úõûz˙˙÷˙ũûëw˙ūûkß˙ũ¤Ū‡úˇũ˙÷áÔbŋ˙ö÷g‚¯ãnŌ˙÷o üđ›˙øĻâŋ˙ˇoā˙˙¸Ļų‡˙o}˙ >Ōéø˙˙žß˙ūŧ'˙˙oë˙ûĻī˙īVū ˙˙û_ŋßmđEGûũíü¸?˙ßš˙ũü×úûr=˙ũŨ߯˙^_ˇŌ˙†ę˙öö+´Ŋ7˙ûģëū÷ÕÁíī˙ęÆ˙×˙đGwÛ˙ū6×˙˙ũŋßũü0ļ×ī˙ümīūŋûoˇ˙ūßũ˙˙ŋ˙ūû˙˙˙˙ū¯ûãƒŋ˙˙˙ëõßí˙˙N˙ũĄī{˙˙ˇ˙˙Åí˙˙χ˙ø˙˙ë^ž¯CÛ×˙Õw×_ž˙ū˙ēŋ÷ũī˙æ×õŧėŠ˙˙ûū¯˙÷˙ũŊo˙¯—õũ'K×ũ+_—>ßęÚũB īŌ]ü‚ŊÃ™ČL ƒ‘pģ#‚1Ęrė‚ãH×ū˙ŪģWū\ߤĢūŪ“ú]Ģīļ–ŋ÷ív—­×˙ĨũĨjĢũ„—˙ ›Ž[Ѝ">á„дȐ™nŠîzļÂÚņVē×ļXë×ßiyna¯påôW=ņ^_1ņLTôzŋ—ßąQ—ÔûÅ\ƒŒ˙ĶëĩĢ´˙_|Vā“ĩ?˙ÅGĪįûņÅm<íũW~Õ;Mpšúˇv§ B",Ž/ú/;߂ūē˛ęÂe×ĩ„ ‹CE„ĶPAϧwzE‘ä!‚ !į˙__÷Ãj“×Iˆˆˆˆˆˆˆˆ˙÷ˇ{ORCžŋÛŨū×Uz^õ¯ˇOņũŽ˙÷^×´•˙û’Į†88¤88§K˙đŠč/Õkįeüz0ŧp[o^üKŊô ›DuyrõüÂŽvXôŋáøÖßŊwüdQĘâ°ŗe_Ũp×ŋ÷¨wâ"?ŋŊ/…×—ģ­ė›”9CqÍŪ\ëē˙ëÂ(}7Wņmš¯ķÁ5TAî¯Á™đöģ÷‚)ëęŸz]ŋâ"Ќ ĸ""‡ ‹ŅÄ8ƒCņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü€€(ú_˙˙īČÉ™jgHŦ܀ĀWƒė\ Ķ)ÆgšA{7‡ČЎ¨ĄfÄ8!ĖĪâ@đjšk~ĶĐ"<ƒģUõä@™qĒĪoŌ~8aŅŗ¯1"—G'ßč{úëôēú˙ßîšŋ ēú˙üūū—×ãĖ˙öũŋļÛ@ˆúū— RC<5G)Če9 îaĪdŽFį8ä3Žg(r Į,sqåAāŽ$9œĨH šëëė?o‘<6ũēģˆYd4Ččž\f‘ČčÂ0ˆč舿^#į"æG ]žEŲr#ÄtG‹‘€\æl‹˛FGgãų|Žf/‘ĖŽ)"3‘ėDDDDDDDDDDDDiWá‡īØa°w_!0‰œDDDDDDDDDDDDDDDDDDDDDFĢ߆ũ‡ÁmÖÖMÂ˙IsãđÃéųÄ0ßŊBČ}(Ŋŋ~Û÷nëūw}+ß˙aũģĨi~ßZ˙ũøØ˙~¤3ūŽžHķŋûČSõmu÷î¯Ļŋ|€€°Jöa„Ą„ŊöÂļ—˙ymĸčʈĒ"„fˆÄc#Ŗyá‘ŅČæaĖA!2׊bƒī!8Sû"a!¸dpÖ#Æbãųš#ĸ<^0a›Î#q›Čņp„|‘ČŽČäG ‚äpÉb89 0Ž0GDp ‘ҁLD„j˲>Fŗy Dų#ĸŒŪ]ʄqQ&Æƒ.EĀæS-réĻ0M;Bė Õ5īq r!ČjYĮ>ÔNJpQg˛CžČQČdƒ(æ‚9ø§8ä\3”æsŽ\,rĄŽįƒA”rNHåYCåhV‚ ž¤ėˆ92DʲŧÁGf“˙˙˙˙˙˙˙˙˙˙ō 3ų?ō¨†ÃĖÂÄHChr‡0å{* ‚°ūUœĀ*WGŽˆâķGҏŅ˜DtF"tAĸ6ŠÎkFŅÕ¤yE Vl6ÅÂ,?SÁĮĮ5,Ą 6‹ÅķččˆųŧŽ‚˜Dtš„aĐ YtGDto!¸ˆe՜F„{#ÄxÚ#ĸ:1‘Å#ä|ŅōėŽĖ">GFxÜGD|Ūc/㈏EōųËæt]Ų"B#Ŗ Â.‹ĸņtGFhē$eķ„_.Čņ0`ČáČų]â9—lB@ę FøˆŒöFįŠ9 )râ",ĄĘsĖĄĘˇ)ȃ: f""""{1Ņ„GGĸ}EŅ„aĪFˆ‘ŅQ—dxē#ä{`ĸŲi ĐŒKãxO/ˆ‘&wŲŲ4F":9‘ÖŸ÷.GN‹Ŗų#‘#†Â?ŧ!‘â>GDt]—Ab)‘\ RĖ8ˆˆa:!įㄐ\q]Dâ/‘Ã`BÁTîPäcˆË¸‰üŽ‹pp‚įtŠs8˛>Gâ'™Ã0 ‚ Žæ㈃.ĸ!™ÄPH P ŦIŽqČˆf§8â"Мp‚Ër (@ˆĘ‚‡8â,"œ BPæãĖNSË‘ôB¤Į,r PÔJ¤#Ž ‚˛r P Ŧ“wDpØA "‡,q$8“ SˆŽ`†Ō8æp@„I€˜(™p‚T ”ä2ĀLX›“ °TqŲpĖ#Ōn$ QÜÈ2:“r°Ęiäq"€šrn‹†a#†œO"8Grc–9”p'ĸ8gB8åŽPâ ēŒãŠÁgąÄŒ–â#†Ā@’‚HŖØAdŨIe–Ėi"ŦĄÂJ‚€-8ĐAˆ ˜C)ČAČ.BőY‘Ņt8i]ƒ8ā‚œ†p-ÂĶ"'B"HŽˆč „Į!–@ÄDō.‚C#˛č ‘ā§(r(ƒlšlPAXĖ9NHq$S-ÄŅ‘*i‡v‚ Ę—dpĪéDAˆ„ˆ4qÔBT82?QYŅĮ0á84Ž‚(p‚ ąÄį ĨˆˆĶeĐ'ÛE8A‰1Î9@4¤›Qƒö‚ĄØVLq ’ˆüPGIŽF9ā4B&fĘ „H4ŽP DhN9‡( ä„đ¤|ŽeÔˇ´ˆbFåÅQAņ2­DpR#ōÉĒ3DxŽČāŠ-Ô,DôG ĸ:ŠB Î8“Ā0á!8ˆųpV¤" § Ę9ĀBŠ6.¨Lō8)ÔNČą'dpÚ#œŽfšHN28+DīPæŸÁæGr:‹‚hD a)‰ÄlČūÖ×4]Á\˙u8‹ž˙q4Dp8˙x™‚Į_Ęë,Ž˙Ō;õ‰8ī܋b Č3&ÍuÎÎŽÜ0dsū*× °[ûC˛†īū@đŌa^ŊԁāŦĀō ā°ÃßdēĒdqÎ9ĶDŸˆEø‰rĶED|raq ēh[Ąä2LsŽRi=údÍqcœr“Tֈë"Čã#ūCņ~"BĻUdūwEČd„éN˙#Ŧxƒ#žëâR$¸ļRe_חBÚČdÉ1Ër“!÷øîÂ$ŋ˙;ĸú%ÃT˙ņĘÚ!ވĶ#ƒQtGûĨækčC(sŽ" Ždt]{ü~„Nf°‘×˙#˙‰9Á¨Ž29—]Ō÷SŗUКd|Ž D|˙ņq3]™ĸ:6 ¤p…×ŋņčD‡—‚č—]˙HėÕt&Ŗ#‚Á|ûKņčC"š‡8įrœĻСūq7æUāĐGDt]ņ UWFJȎYwü8øƒ0âCIĘlŋiМFŲ2´üÚčDã#˛8R8dĄ_˙„D1°ûĨęvjē+@2—Dčē˙åM§Pá—Dt9/ûüG+KĄ E‘Ķds/ŅēųNŠuą&8”8@¨ „Q.‹¯uâ?]-ĸœ%-‘ŅtG˙ųÜ%+K§ ¯H$'í4'{#ävGE˙ū8õˆˆģDX¤ŌÃhËĸÔ]˙"‰úŗē!‚KÁĐ@„JIŽBqĪŨ)šĒPåPæÎT9cœLãG9NWĘÚWix˙„’/đ‘x 1+T‚!!ČĮ&å-”r“”Î,~;ˆˆˆˆ‘G<įūhú.‰Ņô‘äPĖiŋūAŽĸ4"""""""$„‚F828l‘ŅŽō8‹AP¤A3Ũ—A"]A#A4]‚B/˙TKŦHh—]DŠä ä6S<#BHŽ"$‡cž šG)”ĄČŖą&é  BAK ‚P‚D0„}ŌōT„Í ˆü†@6Ų‡$9â"Rf2:.dvG"<Šr‡(sŽqŌĘÔåPäp‚œ˜â"$/” Œ ›H ‡¤"‚HD~˙skŠ €Ô”9œqÅ  JPį8!”9NPå8U#ŽPe$QÎ9ŲJ"0I‰–9pVÍ7˙¤ž‰C#†Č„ØMÄæDC"4)DH æ­‹“r §(Øh§+Ęr‡DŠ9 Ģ0æĪü„JR!ĐT'tG Œ0QtEҌAē"Bė‚œîqÉB2>_/Ņ|ˇŠÔi„˛č „bLr ’sH´ŧ†…ąøB!™ĐB T$ BĨō:.ˆčē.‹ČãČîQ)Į!TA’ē#ĸ菗FŅt}EŅ:;Hˆčé‘ŅČã#äq‘ōäGGËĸų„]Eō:6‹ĸčę‹Ŧ ŗš TBŅČrŽ ËĪ˙Pˆj‰b.ēhO28B8H¤Ŋé!ЈēDŠ9œąÉŽLrq&8”9‡h NA­ <$LÎrøL‘ōčÆCEŅ|žG˂Ų#„#á–ČøM‹ Šd|Ž„L&s”r°ĄĘr‡vS‚†GÂAČ—'˙’hED~„A ĮG$;Á$,¸R8i‘Å#˛8Čųr#ƒ‘Áᰎ†Ą’@wļvĐWA$Hpˆč ‚"Ž""""""!ÄA<žGÍ A3ŽtGEĐA .‚AÚL ˜L/h?Â]˙"ĢĒ”8¤""qĞ…TŠr‡*Đe]„ŠPåS‚J‚(r‡8á#ŽPį§(å^î)7 „$"H!G …]‘à á°!‚`‚Š ŋh ‚đH%ÂC „‚QHĄņ^Ōüd›(Esäp¤p\ŽÂˆˆˆˆ‰t]ˆƒ*#ã „lG3 ĸ8„r#˛9Ų’ BKč">cAGÂ!Q"Ž""ФÂHDpĐÂЁâ%ŋ˙ô'0ĸ&hDք\ēA ąËĄĘ㊈°Qt@‡h Ģ„Hw0ā2Áp7rq^Â_ü‚ĸĄd.ēĄ;tP„â.„D B"$‘„") į9Į,rp@ą(s]”9c”9W đg(sˆ÷KĮLDē.ž„DP":ĀÔGČîU”ĒC #šÍŗEīņhŽ„zj3˛áœaĩßüL×T!ë˙¨ü&ÚKÚ^B‘:ú¤Ēŋų„âe'ŸDQ}%Iņ8„q3CĩA/I‰Š]T":Ē÷^&´ĐĐW×ČDGGD&h}5UßņČKĄĢDëę—Ú^"f‰Ņ>Ļ´]Č0lBŽŋų„âĪŖhD¨EÕSDÜ­UwüDŅ>'ĐJ’÷ųUBĸ=R ŋ¯•hN,Ž"aĸë+–ô××ëĤBCÄI Ä?UCUßō,„%Đ—A'Ž=R^˙#x™ŖsÚ!!č ‡jĢũyŠ ´_†ŧ ‡9ˆ¤muDÜŗëëųŠ$%Öf‚Nduˆ‰ ū5]˙:‚‚s „N"čKĸčēęĒŊĨâ"q, ˛čBrč ‡Ī/¯īžAĸčū$t&hēņčē "!Ō]Q7Šøˆ@„Í ˆL „hŽ„GčR¯‰ä'ˆE::1†‰ŅåÂĒ…õō A$t&hú.ˆ—EЗI_Ŋ~ŧDē`’.bÖDto'A"]ãĶDØĩR÷üƒÄ!UEt¨ ‚Dēi”/zĢßäč2Ŋ@‚Æ!…b]2‡)ųēŽŋø‹b*‚.ĸčB(tĘƒ0Ž–žé.IĸéËĸčDB ‚q<#Aá×ŋ_üDXB]GÖ>f„ēH$a4=U§ČhâD,ē‡0‚DD „~ēí덑Ņt!) ä]ë!ˆŸēKęø@„DÂ4BBq‚!Ä …Õqˆē¯˙‰ EБđ‚‚.Œ!<„—G—T#˙×.ƒKĄ#­ ‚čK¤A _Õ{ĢČDmHč ‡:I? •áˆõU÷ÚÅ&Ō.„$]‘Ņ´NÂčNduÕuõō ˆ˜AÄlK ‚īU˙Έē!3B'“:"GL­šéˇK´"CEЄMĸũB(å*úĒūų:ADčâ6‚DÂ#Ą b"q ‹„×ũWÄ „ ‡DōÔē8„C­ōÜS]ëŲEĨ8BNS”;6‚kĒ/ōtB'A!øK_ŋ >]—A"Ęt] ωąĸÚúų‹¤™XœB"ƒ6‚ûÕá"ĄĘō°Ģ=EP":&Wŗ5šÕuũ-•`œDÂ&R NS•ˆ@s´ ŲÕWŊû.8˜B]B’ Ž’°@áuøũB)A'As. ŠpŦMã úë´¸‘ōčK ‚aB,÷J 1Á]Wü0„ …!!FDKŦ ęĒžŪCEЗB$t$tmņ#Ąg2:>‡Nŋíx‰„#á"ë‰Ä]—EĐ@†C:ĶÚĒ˙Ž%Ōtm­„ ˆčށ:^ŋá”áštX„@Š"ĶB  …ĻÕU~ŗVGA"GÂGėŽ’ˆčHčté˙ĩáqé!˜a2°!6‚Ųéõ×üD …yA”rށ-˛ˇtQ6U_ō(—B%Ņt'H …íąä6ņ¯ū"&tN!ĸčēŧēĐ nžģ^!#ĸč&Q„æGP“Ë­õDÜŠmΨ(bš„—EŌXi8 \xAŋŽüDDDDFÄDŊd âÉēŽŊ]„WtõU˙´„ŽŊÛ]WęSë~ŋübļ•ÖM]Ž4Pūž¨jŋt]C˙}u˙‚e§ŽŸõ‘Ķëų7(U]¯ …¯ˇM_ō: Ģ)ūũr•ũũ•qúë!¯×xA2 ¨˙Ķ)rÍą´‚ŸÁ“nąŽĶė&ÃH įņëĸnQõĒ‹™.ˆųpjC•‡§*„LlQáz ĒĘĩ$Lú @ŸĶ‡ÛUüAA|ē`¨ē'‚pū  –ņCbb4+ø´äÜz¨ ™N Rl „ ´īë&ÉHRųoRA ! Xĸßô+\U4‹Ą&¤Cžũ.Ą Ŧ FxˆA AģËuu]Tˇ#ÂEôJpŠ܅ä)'pVņÁRÚĮ#åŌ>ŨS× ˆDtB!íKŖ•7ƒ}ũu!IÄN!# |7ˇXKė„’Uŗč †{÷Ō Ē-B-‘Đęû{ąųoĒ BGF2:.ˆëĻ÷ī騰‚D CėîPō:_öW²ŦŽ) ÆGĖ*oo†ôMĶĸ~D2‡A‚JŸö8ĨUlē&~)ĘāFžûQ~[Ԑ@ĸ]ˆAbĘx Ēûāꉸ5\U”á0„ē.„FPėUŋØ{T‡Â  ‚˙a×\ˇ!SÂRâ0’Ąô˙°ęēˆéâL!‡˙°}oK7„ŽŠ$ßáƒkŽâ‚.Ą'˙öŊA;ņ0Ą/ :ū4)˜@Bõ­‡MWĸų™ĻWĄ˙ÃĩƄē›(rĻr7ŽuT˛Ü4ĸGBf‚;=‚ĒÃĩ ‡„(˙Ŧ0ęžéBGB)~¸7_Ō!3Pŋ\7UUĪ!8„K īü „†…}pnēynBQ.„§ûÂRĻĒøåБ‰/ÂVöĒØį5üŒ 6•bų„CEЊ_ģõÖŗhÂ'.‹¤ ēÃuÁėD „hDē/ë ÕoŌ0„ēhD~ˇōn4Ēą‹*hē<žļéĄú8ķčL ‚Ō[áo˙ņ#Ą×TõDŨZkŽG@ t}…!vRë Ž?!eS„"ų Cúkâ8_!˜+zĸnžú_˛“oĨĩVĖ"čHø˙ũé ‚ē"tôģ×UeGČųų#ä|¸.GČæ_#ä|‘ō80GČų.‹ĸčžGČųr.ĖōčēǍB""""""""""""""""""$ąÎ9Į8ä58įÜsŽA8įrœãœsŽqÉqČAÎ9ܧ8įãĘîA8įîS”å9Į;”9œrœã•9XWå@°sŽqÎåw)ĘâœŖjŊb"""""""""""""""""""""""""""""E6ĸ&å×_…’ãĘrĻtŠrœŽ(sšNMĪ‚nSœsŽqÎ9Į8æ„îS”äܧ)Ęr‡;’ÃŽw)Ęrœ§;”į‚qÎ9Į$9Į8ä58į†˜æãjUXB""""""""""""""""""""""""""""&IŅÄ_.‹ĸčē0ˆč›Ëĸčē9‘ōč¸.GˁāßĐ\DDDDDDDDDY rŊu˙¨^ēëīē °–ĒŋŋZŪ´ézũuĨĒAmÖĒŋú^ĒKŌ֕˙Ō­uA-Wõoö‚UމšuĨĻdž’ˇß„Ģ_A/ׄíĒA^ž’­Uiwž‚ ×]~ē…Úž‡[×ē^ŋŋ­é­Ō˙~ŊoÖé_õÕkīäÜ"]ŌãZۚ˙“p‰-´´/ĒūõŊh›„_¯[õˇ\›„UūŋEĀéņúeA‘-=zļ5‡[]Sũß­xEÕ4ũ(öІ5Qęŋī–aJõȃ‚iük|!O¯ũb ,ŗ U}qhkūŸ}ü˛{;Čî—]zŊKsXė8ėˆ–ÔTØ=ũ{Õ˙éSŗŊ#Tr â }˙él¨Ŋ„žTū˙å¸4GÕzŦ~üjô˙_‚Čč Fō>Gė–‹tv“˙‚˙ëø!e@.‰ ČluHƒ“eŸ$ōM…$Ņ@Z˙˙ū‡øAĻ …0„<0ƒΘ ĶA…&å-HF@ėÃ!ŗ^jeFUs­˙˙÷ũ4OŽĶN 42oTi ügg"ė „Â~ üƒ3Á'# ƒčü#C4ÍÄfh†gK5™ šÖhōEë_×éSOMīõB×ĶúÕ4âĶ‹‹Xĩ‹OTÂi…M4A„0ƒø đ‚!p<ĖR@šč gÅ3ÍÅ>g™æey¨ˆf33˞j,Ã$Ķ÷ 5ĶOú{ z$;ņ4í>ũ+Oę~šjŠĮ§ ôOģNÂÚi„ũi„CŗpN!„ÂđŠÃĶūõzu„øHšw’ē'™+rWä­Ëĩ%Nũčģ×ĸCŅ!ÚĻĩ§ŽļŠiĮú~šzwđí0‡Š îBõŸjCÛkŨtAqÚ ƒž’Ēz S× ēo­'A7MߨnÂ:%xåãŽ^Z—†‰ÃŌ¤NõzŦˇnˆĮwZ÷øNč98a(˙á“!_~˙UãZMũ}?ĩĨē­uô)7:O …¤Ø`ˇá6wH0T īEãŨļpËđO'{åå“Ę'tNûIēn˛(˜M°_Ͱ›A;NĩJ˙ūûõĶūũõ×˙ũ_ô>õëĨÖǝôû ĻéŊi¤ēnŸ^¯´é5_z š ÷u÷˙Ŋęë˙˙ŋĨáú] ֓}é>úOˇO}MãOž=ĨĨôTŨ0Ŋ†ūÚõŋ˙QpWũ˙kņÚæõÜ8üÁŠ'˙ú¸ú˙˙×đŋ÷Uûí].ĮK^ũÚéũw˙a˙˙˙˙ōĮĒ÷ôÃũ…_öß˙öĩ˜(Øx.˙ģ#‰ú¨[¯ī×Kë÷˙ô˙˙ũ´žž¯˙öūĩ˙õ×úõũ>˙ƒøŌū>ũ7÷ŽŋŋZ˙&*Ūžë˙äWWô×ū˙Ņ˙đÃ˙ī˙–;×ũ‡¯ûūõģ˙öũîĩ˙ uģ¯ëúųu1ëđÜŊ8`´ ßũ˙ų!˙ī^˙áŊĮü0˙ūĩßë˙×ßõû¯ëú_ģ˙Ø?ãÖŋāß˙_üqRõ¨Ëôūōôú}áëŋŊiũ=uũ~ˇū‰¸/úö˙tŋü?Ķîßûŋø~¯†ßīŨ}ûũt˙ęúëļ~%˙Ûõ˙ņ÷3ĢĩôŧŅ?gīöŌßÖę¯ŋ˙đ˙ũnž˙_d0ZūšĩßĶk¯jŸŪ•Ĩi!Ô{˙˙9%iß~˙?æíŋ]ũ.Ģ4[šĸúū˙ũuöÃīēĶũŪ)a…°—°abŖũ‡đÁ]Øa-°Ší…°ēļ¯Úöˇëí˙Ú 3—ÚÃõ9˙gë˙[˙īūúá¯b˜ŪĸēũŋbēŠŽ5ØĢA¯ÃI°ģ}¯í­vН…ÂTéūÚēīÚoĢ^íwí/ĻE´ÕmU~öĢkö¯ø6+ØĻ+ö+wcö66qüSėqë´Ûúë^Õč0ƒE Â )c…,t×R}ÚjĻ™ÃA§i‘^ôĶēī[ÕWĩPŪŋęŸõ°ûūĩũĩ\DDF‡„`„4!„AšĶ5͆Â}„×[ ö´Ų|ï {LŠ?}´ õ¯ˇīV^— ĄÂ(Xƒ!DAĄh4ĶA‚ `†ƒ š ÂjĄŋūúÖØ§ }¤"4""""""""=ŪÁûß§˙Ŧö?iôũ_Ē_é/ø?˙˙Ũpŧ5éõo˙îŋKÂūūŋßô–?#7˙ßŨ@ŊZ{í¯úũȖPŽõŌūŋŠúĄûjŪQ/˙˙ßÛ[ ûUíßšĶũíÕÖÚŋZü†Ę#sĩ4ØJÕ5ÛKúú‰/׃#‚H=¨0ˇ—ÛOŨüXØÛ#ā°eĶŊZûŨϘŠbŋĩû}>šétÕũ?!°sŽqÎ9 œsšNS”įrœ§8įŒsŽqÎäĮ8įãĘrœ§.Î9Į;”å9\S”å9Į#ãœsŽw)ĘœîS˜r¨Q9\QĘrœã°ēúüv"""""""""""""""""""""""""""""A¤sŽqČ5ŽqÎ9”įãĘsŽ.‹¤"‡3hžŽ“# G„ËĸéI¸Jã°qĒ2ʄDDDDDDDDDDDIŽ"$DzįŋÄW÷E%ävĸ Ŋ+ā´;÷˙k͈“G‘tHGt]Á‚>]Čų.ˆá”_#ƒ!#äpĘ#ä|žGČá’ŧĮž""""""""""""vĢ•hē.Čų.‹äpŋú˙∆ŋ˙ū¤Ũ[͐YĄšŗ3<ÁyĄZe‘ ×ëũ¤Đh< ĪÁ0ƒ!ĮŲčă‹:Ʉø ĪĮāˆ\ " 0Ėāƒ 3âšĸã3ŒGÅ™ v *… 鯟˙z§ŪéÅ­§…M0š =‘ō>Gų7rqŅ!Ũ"oĩīãN˙ZĶáéÜié§Øˆ¤_PO žxTõÃ'ŽģÉįÃ'åã ŋĸväĸ‰Å¤N”tJ&ĩ§¯KĒúj´MīíWô› Đ`’A¸(N ģËÆ OØūõß_īŊ_í?ĨuãĶ×TŪ­Ĩđ׎ŋunĢõÕø¯˙õŪôŋOĩÃ×.ˆá˙˙Wīø+¯ũõ÷˙éa~ Į°ūŋøûü_`˙˙~EËK@ĮëôÁÜÃŋũW˙ ˙\?ūŋCøū‰Gö˙_˙˙Ņ{˙íßÖŋ˙ųz„üž°wV?÷“‚ /ū ×ûÞ÷˙˙õõ†ú¯ũĄ/Đ_ũ`˙˙üžŸKžņ˙ŋ˙˙úøo˙]vŋīũīŋ˙ú[˙īßĶ˙wÛ[?kæ~OíũŸõŋu÷üâūĩ_ķDįīkkkļŊ¯_ŽéŨkváĨéũ­ĢļŊ§ųęÆÅGĮÃ_īÖ8ã¸ī°ŋ %m…°’Ú[a[^îīŋīÁîíSÁŧÅ|r, cƒbĸ ÖČĮ°™öĒßöo"öŊ§ VÕīo Á††B."!Šc„8NNíļƒ š–8NÂv ę"""8ˆˆˆˆˆˆ`ˆčB"  0šŽ""?˙Ģ\G˙å˛gb]ę†fY"SĐdŸëĻdŗde<• Ok¯œˆ;;5ŠßÚa4×/ßÁ}ũ¯č?áūą˙ĩõ˙˙˙˙ĸX˙ŋ˙˙ü'˙§˜Ž­I ՙ™ŗš‹˙Ûū§38 qa˜ų0ƒ##H3ų„č Ąđƒ'P0›ĖGÆH Ÿ2'f†RŌ5ĮŲ!æ#Ē ^—˙OôôãŋM>/ø°š 5M0ƒL ÂA„ gāA„Â3ALâ8 ƒ'ėĪ3ΌĶ1g¯Ë‘9Ë*FDžŋÚztˇ§ßūš|i§ĻĄ4͈´âĐhZa4ͰƒTõVĸĐh<ķ5FAŸÆāžq|0RvŅ;† ^a"ņę‰įä­í<Ž›åÅĒD‡roŅ!ÚÚ§ië~ŠĮô6˜]/Mxņ^Õ<&ÚIēJÛéŋ¯ fā´nƒ† :Mƒ/‚ Kē/˛ķ/2PGtNܔ4JޝDŨŊԜkK‘D‡w­Ē˙ę×ūˇęŋ¯úũFĒŽûJũͤÜ&OO ¸L' öĒ“pĩá< čú}ĪÁoũ÷éē÷×ë~ŋÛîˇVüiéņ^ˇŪŊę´ŋéëAtétúWTßÖ_ŋ˙]íwī˙Ūļú˙í-^ëũ+ôŸßoëëúöŌkK_úáõ÷ū>ŋ˙˙C‡ņĮÃ˙‡ļŋ˙ßëˇzMÔWëã¯Ĩ˙˙˙_¯_˙˙öĩöû`ũū?˙ãÕ˙ëoëˇ˙īŋˇ˙˙~ģëöûŋ˙˙÷˙ī˙ī˙˙˙Ë̝,_˙˙ ûÖũģ˙˙˙ųc˙¯˙Ŋ˙īë˙ņ˙˙_Ë÷6ĨÕ˙ o˙“1˙øQŨס_˙˙˙ß_˙ũÁŋü?øūŋ˙—Rų7ŲEōzeŋ_˙úöšĸí/4M_ßŊ˙~˙Ģé˙_î˙Ķnŋ^Û_ôŋé´˙ÛOot˙˙ĪÄb˙3ŦĪŖ5ˇˇģíû¯íÖÚ˙ūß]kūÁpˇ l.Ú]…í+_˙í4ö­­§›vē”÷˙ŲįŊ˙æ]{gkųžŲûoo×Å1ÁÅ1ņėU1Įũ‘Õû %ità a{]ĩ´­m/íuĩũ´÷mAŨ{iëģé?ɲ€Ęké­­§i˙bāū)ŽE{Į"¸Ö6*6?دbŋŠę+ÛV?´ĄĨŨ6ļŠ7ā/ ‘Ŋæ0°ÖÖԊ:¯˙ 4ûL'iŨÚköŊ­÷kúö6=øãöƒahD!A‚ Â ˆ‹AÅ Âan a…†Iė&šëkvŸØ_^ۆžšīk¯ˆˆŠˆˆˆˆˆˆŽ"P‚DC „!„"!§h0ļšĻŧ0ƒ § &F˙ëB""""""""""ƒGåœ,_ŌI~˛Čj.ēŪ5ö ã˙˙˙˙˙˙ü˛e{DŌú”ĻDFãp&‘1?é„Ņ\!ŠŒ,}‹VWFÁ˙ŌvvGϚh4Ķ˙íp¤íڐq-˙˙øé$_ūģO¯˙ū—ˇC¨ã˙ūŸ}¯īūfGFt˜fŦĖÎŊ“´˛|ŒGU_˙˙Đa?7E™ÁB ô#ÄđA„ ü]ø fp Í=į"8͌œfyģĪ‘ĸ6d‚'G0@Ī™Hg™!•¤Js§š_Ė;˙„ĶOøz§ĨĻŠĐ§žœEĻĄW Ąh4Âd` A„ œgÁ G A„ AįÆ3äH Ģ™ŖuÍų2A3˙' v‰Ã˙ZéÅ*vŸĒqé'a8Ķ‹UOа'„Ķ0ƒOĐŗđM<ˆ‚ ĪGāƒū‚tĶ˙'Žná‚Dķ Díĸ8ĸwęFäXh›ëTHvˆßĸt‰íĒiŌzM>ģôĶí?ûtí7ũu]]tŨh'„ô×ÂiĐOĨ< Ú/œ`Ą¤đ–aåØHŧ˛‡\Ž2íŒģōqjMōqi^IŨ&î[ŋŋõĢC˙MĐõũt–õĐ¯P´›I 'úëĻĒēzv›‡ÂŌz~† „á‚îƒpŋA4Eįúž!úZ×^ēūõ¯ūuĢ}cž:¸õĶū;Oū=tđŋĄØKI?˙Áüz÷õëŋ^ž-֗ ŋÂúĨú_Šõúõ˙Ū=÷˙č/˙@Ŋ˙×Ū°ëõ¨­˙áū āŋ÷ÃÁ}¸~˙_ßõ˙ü/ûëë˙õė?ũyyÕ~¸‚ø*_ÅÃÂčpø`Š˙ûã˙ú%õŅ(Ķũzė?ëū˙Ĩé‡úēĒ˙°x_aņ˙đØ~ŋ˙…ūž‚ũ/û$i}Öŋǝū— ūˆãjˆßWôۈßė>˙ũ†Ã˙_ö—_ũ{˙úzøŽĨëŨ͝áŋĐ\RĨũz éŊ~ŋ †˙ßŋũûũ|~ŋ_¨zõõ^ŋõ× ĒÖžXĐ_,õ˙ †ū[rOõĖę˙ŋūˇû]*ß˙ūßKĒßúŌK¯đũ~Ņ9˙üßũĢkkū—ŽũûĢ›ũWķ?ŪĖ×ē˙˙Ë͝˙×ģô߯íŋ˙í+K kũĨÚZ^šØ_]ĶŌŋĪ_øX=RŋlĪ$¯fhú˙˙˙ûūÅ1ąÅqõąėT0ŊXJ×­†žÂÚØItŌūÖCũkûTū×Ķ ũpÕ˙7f-ÖĪÆīĶMû{ítÅ{WņKņHSÁą÷ÆÃKû -¯ / -úö—ũĨki6ŠũÚh2Qkæ-‘ē÷iÚixOûôÛĶ]×íßuņą\pllT‹U¸¯øãŽ+øƒ!ÂÂÅσ „Õ™'UTÂkĻU4ĒŲxM˙Úkmļˇú˙i§â")ˆˆˆˆˆƒ"!…. ¨!v‹L&¤ūvšÚà Ēdnļƒ]sē­Ļ¤Qė/ô#ˆˆˆŒ'Ņ> Ў ˆˆaa0šøZŧDGāĢk×ëŠ×đļŋâ!ŽžZßPüG˙˙˙˙˙˙˙RČK‰ĮbYUŒ†"•są@ØdŽŋOA’ŦÚ dVÎõÍqˆ¨ųØ4™j ØgĘUä%?9ĒĒkzfEén4 `ˆkËkėė 5˙úzzĒúy ōܘf`ƒv0u˙ũ. ũyn 5p@ÁÎõO˙˙úģO ėš<?˙ū×÷ø xAˆ@đ“bĪ42ԑe;:3S?,Ō˛B˙[×ūxL'„@ôČŌ4B`e„AŸ‚ g ƒÂ"/ĖFD'ˆ#AĘŗy t ųxA“æŒčȓ5D8”ũ< Â40ŸĻŠĄĻƒˆ¸Ŋ==uAϚi ôĐ}&]Ļ0ˆ{7›Ã?`ƒ=@„ ĸ1ž`ŠgœÍÚE=Ÿ$ ųæu2(f¤j24á Â ÕuD‡nšĒ}ééīéϜięū5^͈iúđšhZkakh0˜L ·$FAŸ‚f ƒ?á„ á‹Ėŧw A°ËōíĸwDíĸy’˛8ÉÛåÜ4‰ßĩiē' ‡H›÷Ä}5ûîõ¨Ķ´øę‚§ ĶģĶUĶĶNžƒO=ëzĻôžžžž˜M¤úM°UA‚Ļéá<Ã/ÍĐ` ‘;hũ”Jčģzĸvڄ‰Ã‘ÃDáŪ#ĸNŪLz$;õD‡qčīÖxL ôŌunõũ´&’ēúŊ/§Ûô´§č}Zꞃ˙tÚŋTė(TđžđHāœ2ü m“Æü đ\ ßËÍ=4ô˙õūŋĮ˙ßũ_zé¯ũ'úwT›é&éļŸĒ}úéëꞴŸéĒL đƒŽDõũõ×õŋ˙û×W‚Ķ~ũ+Ĩ¯õã˙øô’N7_Ū>ģū0žéúĩčĶ˙ü|}Žē‚đūĢOß˙K¯ëüü-.˙¨Zëû ôÂOû÷˙˙õ˙˙˙ °ãŨx˙miū?ēđ\"ßø-?tô×Oë¯˙˙Ŋ˙˙¯õφú˙˙÷˙…¯Ápŋī‚ëūÁ×M=?“Ģ˙'§īëūF:ä+­ĩ˙D¯†ũŋ¯õũëŽŋOũmî—×öƒĶAđũõ×kũ{×⇗¯˙Đ^Áŋ—§ų=?~ŋú%ôG DŖ˙Ē#Ž˙īOMpŸ÷ß÷ß˙˙ü{ī Ã~˙ú˙_ųztūz ëÛĐ_˙†éé§÷ņ_ßæõē˙í}káũŋ˙Ûëc˙ūģū¯K˙Ō…ę˙ƒt5OAļšžú^gëĻ˙÷]ŸŧÎūÖĪÚ˙õæ‰ŋūÛ3ę˙ūĒŋūŋ˙¯˙Ū¨‚ģ•ĸ Ú=ewĢk°ũ´ÛVÖŌũWuÛ÷īŊ×4ŗžģÛN˙ŗ÷ëŨ~gék˙Kû¯ąūö—ŋDF4CiCŅ ¤ö8øÛ††*?âļ[† ÖØI°°ÂđÖūëíl+a[_ĩ§_´íuöÖ˙[ūĩ˙ÔßՁōÉ´ĐaAąLaĻŋ~* ŠöGcbŖØ¯ƒØØãÛ đžÚĮ /ÚØ/am°ēļļŠ­Vô A´Đ m‘ u´ČŖÚjžļļļļšdAû^ÛûNí>ÅlWąTÅûr+Šū/âŖƒJˆmƒÂ  Ÿ„ ! &ƒBA„"38M†{ ĻŊVĒi鮚vŊĒ÷ßvŊßvļ:‚oH6"""8ˆˆŠˆˆˆ†D4!Á[Ã.Đa†¨5[ Xč2Nŧ21ĐdžėŒ{TôČß[LŠ:k:M ›ĐAŋQDDDDC@Áa†aˆa†ô„ kˆˆˆˆĐAč6‚oIŧŌđƒ¤ÚMôßā—IéĐO¤¨_éŌm'éÄZ„Õ ôôŪ“B#A:N“û]ęŌújt›ĻúaR¯WͤÛMôÂĨ¤í~× ?ĩ é;ũBĨÕĩzĩßl4ũ0Š:N×íwđ˙ĩKIÚũ„Mú;ŽČˆ8ˇ´ũ†›ņ_´ØC"q(ŽõZú[_˙’Ú¯Ļv‘Õ÷k˙žôŋʏĶ͇˙ëø_ę˙ė}ūŧėņ¤ëŪ˙˙û˙ę˙&âŲ‚8dåŸÍ †eY ‡ä!žd6jY=šDÆuŋ˙Ŋj˙Ąa4ĄayĻf°á0@ėx Â3ųqcō$ Ī7r„fFˆe™™ ÍH„i•Lzũū-=SM8ĩ‹L! ôÂa4-4 4ÂϘAϚxA„æ@Â7™ÆāįŖ1OæãÃs É6Ļd3ähŽg‚8gTlĘ˙ü•‘Ҥ‰Ŋz$îEŦČƒī^ĶģAé„ãuOĐzięžz|_iĻ5 „4h4Âa 3m =uzŨ0›„úIč<'„ōķ „ŧģz.ōî‹ŧ•åŨŠ7Éģ¯Dú$?MÅ'_ū’q ŪÕpœqöuëŨūē§WĒ´žšIú $Ũ§Ļƒ‚  ƒÂē„áųy„ŧ†/ōWT‘8—}†¨›ēęFäG|ëú˙ëÂTŪ6—O×é}øô7ZũפßĨé]7I6Ö˙¡Jž’}čĐMƒ‹Į ˜OÂåã×ûˇøX¯°ŋ]}7Ŋ?i˙^ôÚūģ^ã˙Ĩ˙ęŠ7XôŨ>ūõ ¯§Kū˙ū ĸ ø`žŋ˙÷÷’âûzˇ˙_éáj›ņ˙ôžŋ÷IúëūŊë˙ßán6 /ūúéh{…ø|htë^˙˜đZ_ũkŠũŊ]/Ŋnŋ˙ŋ¯ũ^žØ_ũ˙‡…öū˙˙ˆÂ˙Ĩ˙Üu˙˙ô=uũõĸW’ĐnJ?˙˙øoDoö˙ú˙ü/˙īúėûõ˙˙˙°^˙…×,h˙˙÷'¤7 _ˇ×ë˙ú#˙˙ūß˙ũ˙_Áwũ.ŧ:_˙īũaŊ/Áž^…ë~ũ~^Ą˙¯˛cēÃũ]˙_\ÉÃ_ŋëÛp˙˙˙ˇø~ŋ û÷˙ū‚˙Û˙Ōåë ˙Ŧē˛õ˙ü›pJü/węŊũ~Ú˙u¤ûؚ¯ßũŠ˙˙˙˙ū›|:˙õ˙˙_Û;J^ëÛ÷ŗ<įë˙ūŊ؟œ[§¯ûŲĸ˙û?}{iyŸ˙ũíú˙˙˙˙ķĩ€eØáwm4Ø_ĩūöŌ´đŸkkæģėũ„˙KWüÎ×˙_˙o3ũß4_˙ûuüaßĮÜU…Ø˙l% [ vĩ°ŋipÕĩÚmm[]†ļ´ļ˙_wģÍ,ÅßjÚ{gī˙ķ?éga`Qˇ^ūĐbžˇßccŠØ¨Ļ?Ž Ž+âŖŠãmxa{_[l/tŊĨkkvŋ˙ļēü‡í27ģĩLū˙L'´ĶÖĶm5îī´ûÅlėWŦllpq˙˙üė¨öÄD0B"@ &ˆ3Zi§ Mė&š 2QöļUM;[LŠ?¯˙w­­ÚÚļŋ˙ø^ˆˆˆˆˆˆˆˆˆˆƒĐapÂe˜ „A„ĶA…A„Đdmxiϟh21í8ké˙aÎÅķØb"8ˆˆˆˆˆˆˆˆˆ0B !„0ša‹L!ÕzÁ^ !Ū °×ņ‚ė0K^ °i}A]ƒkø]†?°ŧ|a˙ †ø^ø]ƒū ?á<îŦô vø@Ŋ‡õážƒūxaëĐ/a˙† ›d-’ūũÕĩ §a#ĩŨ Č×*šČ%ü ^dØûȚUUT8øØøøkũ6Ú}Ž˙Û a‚°ÁXˇa„ƒCM4 ƒTÂiÚ WūđŠđ×đļE´ĶNĶíjíoąMoėu˙ėvAļģ 2ƒ[ø0HDDDDDDDFÄDDF˜B-ša4Đa0˜A“xa2Qh2 öF:i‘ēalŒ~Ķ]ûOû´ßÖAV–AL„ÕlIņÍX!ÁP0B!„ĶM4Ķ ĻŠĻJUá…bC\{VŦƒ"¨ˆâ"""""" Ę6 ki­Ų„'¤†ÖÔ/cŌím5í4õam4ûB5kvŊĄĩÂkچļ˜^ÕŦ4ÕíZÚa{VĶ^ĩ†a^Ô5†^†Ķ ö0°Â xaC a đÔXa†0š ÂđÔˇŽ #˛€mŧ0DØn5åK+.ËĮf¨öT(0B d4Š@ÂĶMtĶPύDĻ;A™)GsrÜlíT2ÄC ˙ûüzáNĀ푏ĨgcQˆ0Gia‚¸Ø2˙˙ŨéędQz~ž˛Č „/˙ĮāŊ#˛/˙–Dœ›—ûĩõõc úÚø“xõ˙ë׎8Į1e'ę—˙˙üŗÍQ˜Œđ@ä)dÎ~ŦÔ3Ņ:>F‹><šŲō fƒĖ!‘JÉâ‘5˙đBB´ ŋM8a4̧ĻiéÅč3Ŧn „ĻgXÃ@Âg˜`ƒ3‹Œ2”â”  a1Ļ\ˆÂŦĪ!æōŊ–ę`ÅūĻž“M õOĶŊ>/‹N4Õ4Õ a4Ķ h4Ę„ Â!7D38ģ<)øÃ1™Œ d`ĖōäPy9/ÉįôNōW—!^o—DáČĮz'F÷Ö•Ķ;TĶ´ũ== M5øzięš BÂÅûĻ˙ĻëIĩoéúĻūÂúo„Øeņ+h¸H°ÁKˇ ŧ”Q;hæļ‰Å†Ö‰ÆG ‡R7"DŨĻ˙Å'š§k§ë˙Ž›úôšõköžŊ+ëáuu é'…MÂzëPŌ ŌpÁiáiÁ‚„  ƒrî/’†”ģÂŅ8ĸī/2WDã˛Qũ˙ĶĶé Ŋã˙ŋ_ZOJ˙Õ~“ĶxīOõ×_Mu¤¯„đЏ]7Aęá]Đ_Ŋ˙WÛīŊB~ÂĶ˙˙ŋ×é>Ŋ^+é= {ũZˇôŨZOˆū—×ęīøŋ_ãŧÁ{íū˙ūëŋūûū¯Õ˙ū˙ú˙ī¯ũ}¯…u āŋĮ˙ņņņņô”l8×˙˙˙Û˙đZūÂũûĒŋë˙´E^ˆĮú˙˙˙_˙÷¯ũ˙ÖÃ˙zøá‚˙˙ū˙’˙“z'ž/Ņ+ũ˙˙]~­ũ˙˙đūŧ0Âú˙úëøC˙õio ŋArÂÖXLy' ¯č¯˙˙˙pß˙ĸ7˙ ˙˙ß˙Öû×ׯõ ūŋ÷ø\!åëöX—§˙˙˙Ã˙ũh˙˙í{ŪŌëéēģŌû^ë˙˙˙˙oū˙õ˙j ˙ú_ËĐ_ŋ˙¯˙4_kk˙˙ŽŊ˙˙˙˙™­Ŋū˙˙˙]tŋÃĶ˙˙îŌõ´îĩŋlÛ°¯¯ēßæw˙ŲûĖíŗ?lÍ~žhļĖû?^Ú˙ûû˙˙ļĢ÷˙økV†°Ōl%ŋai°ŋkil0ŋūÚí¯ká>›VÂe­nīĩ˙˙čį˙˙š/˙_ũElqQQL}ė|}EĮÅ .à Ã^á­­­…l%í¯ÃKũĩM´ŧ/ļ™ēĩö˙ũĖ:ö¨;_žūõA¯Ø?kbļ+bŊŠb˜ØØ¨=Šö?øá…ŋ°ģØ[VÂũ…˙âBvƒ Âa0škdĄ48î'S8[^×ímmmtĶL&7ĩí~á„Å0ŋąQQûū„DDDDhDDDDDD! ƒ!‚Ķ0šp Đh5[M4ÂÚöƒ]sžEĶM?ž˙ŧDDDDDDD†„DA‚ Á8ˆ†A„iÃ48´ĐeÂz¯â"""""""""#ú˙ņõ˙~ŋīūŊ˙×ũúų64ĘŽI Úi ÎĘ ņ—ÆãŊr;vT"§úđš¯éÚĻgwŅ•"1D§˙§Ĩų zīĶM4ÂrŪ C˛Ņ;ų|āĄV˙Â˙ɏū[ ‰PvŦOéÕ!Įôŋ};ĨN[ø4 arČ"7Š ›&@…¤VÁũ_˙˙LSņø"¤…A‡‚w0Ė;NVU@ŋ˙˙˙˙Ü Đ°ƒ;Đ €š-đƒ0@đ@ĘåÆP3L¸ÍŒĐys!™ĸ6yüĐö‰ĖÔΞC*æĩd5˙Ėîaũs„~ž`ƒ: ƒB§h^Ą˙åĢ ˙ĐOËQũđÚ˙ō>žŋD¯˙˙˙×õ†Ã Ü'Ķä5ęČeD2ҤC+V÷ūß×ôØt˙˙K˙é˙Pw˙åĢ.åëô÷˙˙˙õa°ß,}„˙  @Ú ō Áˇ˙ū—ũßõ÷˙˙Kû˙Û˙÷Ûúoˇ…üÔ˙˙Ú˙ËV\āØ7ãA7Ũõč&áí Ų‘žē_æ~ē˙gß˙æŠŋ˙Ėũ˙îŋôŋŋí[ũ˙˙ŌŨü–úzwútƒh ŨBm=ŋöĶĩu˙AЊŌm/ÛN×˙ũŗõ§ëiũėĪ˙ķEÖ~×÷ūë˙ē˙ÛmééŌõZnĶéí(a/¨iCJ.ûwÜ5ĩūÖÂúûanÕŋĩOO×ūĶ˙Û ÷w¯ūžŋŊkí™ûfÖmvŖ­„Ũß I´žéļ)ŠũŽ*?ö+b˜¯V6?ū>VÂ]…l% &]ûkMũZôÚM¯ĶÚ÷˙kÚĨ§IĨ­&ëūN“zM4˙ĩA‘ŋöÚŨ¯ÚŋũāÃĮÁûŋėWąĮëva„ŋĩ°—°Âú P{ *ŊTôôŨPhDXLđOTĶAĒ &šiØLõOėīMoM=_ĩ˙Ķđŋøä[ėTļÆÅEjáokZMĨũˆˆˆˆˆˆˆˆ”! !Ã0ƒLŠė Ķ ĻŠ Õ?á¯h27ī[ģ öĄ{ŪÂpô}j­n›´šD@ÁˆˆeÚiĻǘLđšh0ĄĶM0˜]¸O §Ū°Đˆˆˆˆˆˆˆƒ""#­ĢuZŌtŸĒõ˙_i~Õ+KîŠééŋ…ŨŽūĩûéĒVģë]:ŋÚ}~Öëū˙õõīôŋģũ]öļ˙ũÕëŨūëé˙¯ĸ _ôŸé6û˙˙÷˙íÖū¯ëôëõ­÷Kîŋ÷˙ûî¯_}ĩõ˙¯Ŋ˙ũ:˙˙ ˇ´Dķ´#Čō#kīũ×úũ§iϚeu،îŸ×˙÷Øy įe~šfYģ˙}ūˇ_oÕ~žwGšÚWôˇôē×˙aˆ˙˙W˙÷Ũwõø˙ã˙×˙˙ũ‡˙ß˙īínž8ø2š]˙˙˙ë_ũƒøĖ`˜ŒÆi—3Ėķš‡Ÿ d`Ëį3DNA>D2C:ŗī1YIy´u˙˙ž˙ūÃO ŪhZi­øNĶ Ąv˜Aσ:‡0ƒ> â Ėâė Â! gXšÆŒĐ‰D ūOžn‰äPd#Íį\§_û˙˙`äĮzë÷Úké饧h40ƒX´âŠ„A ĶĶMS‹3Ŧx `™Ā“ī뎡ė7ÍĖ}EæJîĢú/‹Ėŧrîē'mŅ7ČāŽ&î@ö¯o§qéĻ›Ēqé§BÂūžžŊƒI˙ún÷_Ķôéi?͆_ Ü&ōxÉæ]¸Hŧ†_ļ‰ŪO0\ģˊ'Dã[#|ˇrPų1܊=?ũ÷īŪÁõë˙˙ãMīôŪ—UíÔ'ĻŌtļēéŊēŌm ÚMŨBn2ø&ŌO'”7Üģ÷úÖũ‡Cõíũ˙˙Ž—ëû˙]îÖ=u×^××ëuIi=7V—é?˙[÷Kø-õûëø/{˙īĨ~ëũî•×ú˙ZB—NëŊo÷]{×˙˙×úØ~ ë×§ū Á˙˙ņ˙w˙ÚŦ?ûÛ˙~ī˙Žŋūũ'˙Ŋ?íŪÃđŋŋÜÃëđģ¯˙˙øūģŽ˜Į˙ÆģĨdu˙×˙˙×ūĢ ?DŖ˙˙˙ĸ7á‡õ˙˙˙˙ė?˙ú˙˙ô#ß˙ã˙ū—¯†ũūžę˙č†˙ßūŸZ˙ũ‡ũ}÷K˙˙ū˙מ˙ģÃë˙ø¨˙K ŨÕ˙ü°åëīäôƒÉø_}×˙˙˙ī˙˙§ūĢ ŋ]o˙_Õáõ˙˙õ˙ޜ?ô?ü°Yz˙–Ŗūŋ&Č_ũ˙͐Ęî[–įŠį㐠uāŨ™­{ī˙ūģ˙××ßęëÃ˙ë_ûī˙ë˙­}û^ļ™6†}Ãz×Ĩî˙éSˇˇēūßīūŋũŊ_īë˙˙ū~ü7kØ[Û˙¯ís’éZûiyų~ĪßŪŲû'UûfkūĪÖf­bŋû˙ē˙Ē˙uõāÛkąũĨõ˙a{ÛVÖÂÚí¯öŋzˇzøNŌ÷WN÷ĖīüĪ´Ÿ×Û3˙í˙˙ƒlVō+Ø˙Øž**8ØŠûÔPa.˙ a…Ŋ†­Ģil0ŊûiÚû~ú˜˙˙ükwÚ÷ßŲ~ĶNí;_ĩüSÅ27ėTUqQLuČ¯Ø¨¯†Նõîˇ˙X6B´M´ĶBÕ0špĐh2CŲ'´á§­¯ætÖéÚ¯iÚp×ũWąüWģ§_üDDDDDDDDqÁˆ†0„4í4RĮ Ú ÂaSM?AĒé…Nõ˙õũāŪ"""#ˆˆˆˆˆaƒ0ē &ˇKë˙û~#ˆū˙×đ˙˙Ū­đoûīŪõŊûĩ__×˙}Å˙˙_˙ļ#éwŪŊũ÷ũúūŪŨ˙û˙÷ëîŋ÷ū˙éŋßûĨ˙Ĩ˙ŋū˙ûž÷ûĨūī˙˙z˙û¤ũ˙÷våšWŋâŖüŦnV*¯Ōũ{ îüŽŽĢî˙vč;"VŲ“žŋūƒĶ š§™*E\WČė [_köĶ´õŅ!ßö™–šŲãą¯Ĩũ} Û‡„ô7ų’]ééîŋtí==í_ö×˙îôđŸŋę?WëûM´õJ›¯ūģuī^ÚWáŽQčŋ˙öĢ˙Úļõ§7 ĐRqNą>xS<ÎŖyGō„jž`ĘļŪģĩ†ØkōxŅ;ĸwÕĮúRī%w… ]ģ]Šč“ßäoûøÖũ=4í0šiĻžš 0Ą 5M4!ĄØi~ũ0ÂM¯ĨõĶtÛôßŪ“pēnŠ'ú„Üŧĸw„ģ¨NŨ"ųü$O•ļ DņÉ[šÚ.ܕåۓ†‰Åv‰=~šqĒv’zØaūÂM„­†ŋôÕwU˙_N=BĻŨuŌtžŊV¯UūĒéÚë­C[Õ¤č&éĐOÚ ž]Ņy„‰Æ]ßEےļ‰ŋöĢØaa„Šĩúu}w÷Ōëßŋozum˙ÛéūŠéŋIëĄIëÛŪ‡oéô›iē ôŨ­­Č4Q?ūÁ‚L0–Á„ŋ˙z_õ˙é{Öŋ˙ūžĒū—˙īīޟŦukK’Į|z÷ąßūÁ‚Lƒ@{†˙âīīī‹đZûúŽēéôŌ˙˙÷˙¯îŊmx~¸ûõŋuĶĨÚKßâ˜Ē`ÁúuĒūŠpŋ˙ßûĒ˙_˙û°×÷îĐ4ÁkԜ_Á|ūÂ~ŋi­Š˙˙˙ôF˙ë–?×_û¯ē˙˙˙ũƒ˙ũƒŒã I`Ž ŋū÷¯iĢiëųdŨwö˛Õô ˙ūĢ˙Ūgë˙÷˙ūßõû_Âũ¯Aá…_ęĶTÕ˙īß˙ú_ũĶ6ŋõ˙Ûũ¯˙Ô0úīđŨ"W_Doü"(ûTJ?öžšÜ4ÖÖŋņõĢ×õ˙ą˙ŋ|õ˙˙˙îßū ËPüŊAHž}˙Ū÷õiĢi´ŋ3úuø˙˙ûīũũŋũīÕī˙ ũwéÖÅ ŋøaWôí0°×ûv؟ÚūŲû˙íjŦĪ×ũĒ˙§÷ôŋũˇ3_i>ũס××˙k÷ŊĻŠĻŌû[VēÕĢ˙ Ö¯éÚÚļ—˙k}˙iyÅZ~ũ­žšŸõú~˙˙ /˙a­¨0—ąM‚ė0“ .à ė~ÃKvļ­Žŋôë…ô­}˙O6Û_ŌÔŨV~ũ=ŗõ¯×ú˙à گ &cö˜§cbŋøĒâ˜ØØĻš÷Šbĸ›Øaw†m}ĩaĨkkaXim­ŽÚëVžÚØ]†aaĻ´ÖÂdoĻŊ‘Gžč4î×ūīõÅ|VÅ{ÅFĮÆĮà Æņûa`Á´Âk aa„ ˆa ƒ0„C"B"Âh4 œY'ĩÖÕ0™éÃUĶ Ã[TøiŨēÚ}Š}ŋcƒ"" `œ0„EDDDDDDDDG0„C \hAĄœ0š Âh0ƒ2NƒN‘ŊÃ#"ž™ČŖå¸a A„ ÂZDF„DDDD!0B!‚a&´ ÔAŲĩŽŌƒ1%ņĄ–hC;(™`g‰ļ‚úÄDi-%ÕmāŋFŖQ˙ōŲŌ;ō:EV5’’˙éĸ$DĄ˜ŗŊc¤Asąķ´}/K*˙ũŲ+2e‘ڏÁ Ŋō+)W.ŠéõëVë˙˙ęŋ˙ú˙˙ü˙ûu˙˙øüļGy|fqžs7ȐGU˜diĢtH˙%ķ§˙ęŋ]4ÂUPš‡aĒvƒîÕ?âČû7!T3<ί!ƒ  dƒä)|B<šDōIæ†to’?ĸpôHv‰ģ^=; J‡ĒiĒߥjŪi˙ÅĻvâĶAá<ķ fqvC‹‘üĖyüø¤`§âã'?MđƒÂ/0Pšvä¯'—ŽŌ'oéypâ¤oųīĨøū­ ˙ é§­ õ‹MĒiń:OĶjÕ}i=h'¤›Ģá?ÂĻŌ ü' ˛b‘x˙ä­ĸwEÛDã%^Z‘ÃjN‰ÃDŨõHô;×[O_ [Å_Ģ۟˙ZĢ~’Ķ ęŋ¯÷˙Ž›Ič<'I°ÁBÂ}č úA‚AáIįEãŌEŪ]š+h“ô>īßUWßôû˙B?_Õî“ôé{Ĩí×ĶÖߡMĒ]7UûéPjž¸AëĨÃ˙īúūëKũĨ _˙×˙ūõ{×˙ô˙¯Ģ×U}~ĸ/]?ū ĢCé}z~ŋŦī˙}˙ëõëõõôŸwKŨ¯Ôp“­:˙Ü0˙˙˙û­ũpZ˙ūŋ˙âã_~˙ûûøÕ}ŽÁ˙í˙˙˙˙˙č˙˙ũ˙˙˙˙˙˙ö“úė_˙ę“Wų=?ūîē˙ _×˙˙˙×ũ˙˙˙÷˙˙à õ˙Áëú÷˙^¯˙¯˙˙ŋ˙åč^Ÿú˙˙˙ęà "7˙ßomŋßŋßã˙ôŋ˙˙˙˙˙¯˙ë˙“wú˙ɏ  Ÿ˙f˙˙Õ¯¤īúũ˙ūŋ˙ģú˙˙˙é˙ˇN ÂūūŸ¤sķ?û3˙û×ëŨŗ÷ũ˙˙˙ß÷û¯ûûÖ­_ũ[×˙m-´“Ļ×ûOģ^×iĩĩíl/öŋžļŌ×ëlũf~ˇß˙kÚŋˇēŋųšÛu_üW a…ũ†é†a¤ũ­…ÛVÂ˙¯é˙¯ũ­ĻÚÚW˙z˙~ßzūÚĪ/˙ímFĮûė{ėSė~ÁüSû $Úà 6ŋØiv°—ö“˙ÖØM]}°ļ°Đh0Šé§ŲöēiöŸëzŋũĻ8ãb ūE[ĮžĮūà öąûkƒ Â`„JˆaLĻƒ “´×˛QũŦ0™ûL'ϟÜ5ģ]íÅnÅ~ĮDDDDDDD0„C0B"" 0ލ˜ƒX‹M4L-öž¨5ÛA‘ŋېˆˆˆˆˆˆ0B" Áˆ°„A„Mƒ;rĩ%,¤Š)\ąņj„3'õ+ öT†åtã+ų|| ˙˙˙˙˙ü†>˙¯˙˙˙˙˙÷÷áķ´ņĖīS%‘ŨÅL_õézŽ™ÚS$Fâĸ2‰3˙ûIĨč?ŧÕÚ˙_ĸwúė‰Gd=×õđƒ~?üŠ/_ũWũöx9’q˛ ōX!ŲQĢë˙÷˙ū¸A’ã"|d˜ĪŒ0@Čr‚v&#aČšä(! ?ķSĘ ęė‘dDtŽŗ˙˙˙5_U ‚ d¨d@ `ˆ~‚2 FKG•äT)JüÛ"<Â`‚ Î.ķҏ Áyž1šDq› ÍyˆĖ‰Îf„bĖ0™ĄĻPdä‹1d5Ķû_M¨5TÂ`ƒÂaˆį% ø&0‘i_§§ õÖ-4õOAĄiĻŠ„ÂĄ!Á Â!l2~?  á„â/š s4 E˙^š}„ <  ô &ƒ<Đ2Ŋv¤Įr(īDŨĮĨ"ŽŅ8h›ž“a§q§÷ÚiéŨééÅá;[ßÚņ… úi ôĶÔ'„M„é?§ <p`Ą‚Ō‚t ŸJ^aĸųÉY,ráÂDá¯ĸė)ÚDŨÔģ~¨“ˇD‡r(ũĮäˇīōz}ZhjŸiĒh4ôū:O]+×סēĨM0ūĢH7 Τđœ2ũ ŋNëÂpËđƒp› n‚˙äŖ‡õ!fīD/´CŨPiáPĶM8Ō˙ûūް•=i5Ē‹“tú^“tëũ^ęũĶOĨÂé'…XMũ× „ „=Z@ƒh‚FBũ´ô¨‡úĸ;ąūú˙_ŠõņŌpß˙õéO_Ŋ]øūÂ˙z7Û¯N“ ›ü=Đ"ptmŅ ,Cõ“r"ƒ¯‡Ã#᧯÷¨áƒ˙Õ˙ûú„úęũ?]pē}īI¤ž'§ˆ(@đƒiŌn °ČcuöB?˙ŋ˙ƒ Ķ˙ŋkü>ˇ\_ū´ū˙WWOÕ4“iIŌn’t›A=5NFÅö˙Ú˙ūa˙ū—˙˙`×{ŧ/˙ū¯íztœ5ĩõĶmtzöŌz˙ õ˙÷˙ļÛ˙õũ˙°ßų‡ĐK˙úī÷õî×WCN“Ö×UĢĨė(_āüŊ×&˙ũx7˙ōÂdāąÂ˙bŋ ūęę‰[˙˙˙ē_Ž?ZŪęí=oMĶĶUūß˙z˙îŦ6Sß˙]˙×āßũz ˙˙÷˙˙ũŨ==B¤ŸûƯ˙˙ĩö˙^ˇž×˙{ũ/ÃŽąÅW˙˙ß˙úŋ¯×Ø_ëi?ŋ˙f‹˙^ũüĪv˙˙īŋųn ũīú÷˙ũ_Ũ˙zߤ=WO÷˙›žĶũē}ūöĶķžom&×üĪķ=ŋÔ÷ëŗ?ûĢ˙ē˙áv¯ë֕ũo˙Ķ­°ŋļž˙iZĢiéß×í§ļžŋ!ķ×ļ“Õ§ë_­_˙˙ÁtÛ­u^ēë˙ö6 Šū+¯aĨąÃ ~à ÚļŲīÃ^Öŧ.ÚūÚ÷ˇöë˙* ĮÃßōdúŪí˙í[_ŋūÂkn=Ļ>¸­ŠÛöFâ¤v+xۊū+õ˙˙āŋø-/ŋßûM; ¯am?´Ķ᭄}ÚØOéūˇ÷ƒ{öŋÚ˙x/°qūICg˙đˆˆˆˆˆˆˆ” Á°„0˜! &ƒA“…´‰ķÚvša5A’~§Úëū˙īA}ƒZđZ˙qËĢ*,?ÄDDDDDa (B"! aˆ0„ú_ęĻú˙čDGõÄDDGßßûj īģ`˙Áũƒũĩ˙ŋ˙Hėôˆ˙ר?âŋú_Ú ]aŋđ?[ûōlkūũûi _†˙Đ.ŋđÃüZ˙ŨWà ‚ü7!xĢ#uú˙øaūY ×˙áŠA~ ÂĐ_˙AŋĮ_Ú˙H.đoû…ßüˆ°˙˙ŋũWāßú_āßû_Ōü%]a˙Đ_˙ƒ˙˙ŋô_ļ÷˙˙áŋ˙ī˙"û˙×˙ī˙¯Ōü ŒĪũ˙×˙W ˙ūÛ˙ĄKŋŋz÷˙ú]E~ŋīŋuūŨäÛÖ˙˙¯ũīČ;éŋīūöž˙Ūžt^Tzŧ=o]wūíØ;_ íĻũ§}ZŪåB˙†G{IÖŋĐ§WTÖĐvēzßŊZ ë˙ÅīÕ˙Ė+Ž'Úļ­Öuĩm4×öÎÔuŖËa+ ūČ4‹°ēęë­­­_ĨĻ˙Õ4Čv"Q4ˆVTŗ$Xij˙°Øa;VC[VŌl/a[íS˙†äŖė§ŧ÷Úi„ΑU°`Ŧ0Zũ‡ °ļ­¤Úļ•ŽÚļ“ki˜4úũ?õ×ûlpÁX`“ a‚à ØhļÂà ÚM¯Ûo÷ãūÔ/ČŖ§¯Ķ0>6*)Šcá…a„˜0”4ŊĶ˙˙Üaڐn÷ũ6ˇvĻ@ĀũŠŠ /ŲŪ †8!˜Ī˜ yŸœgŒ— x)đįČ͂&< gãĖã.Gīû˙UûMá˙kP=Ļ™ãÚaxwx¯#}[4Ķ´ũ8iÚĢh4Ö4˙˙˙û …˙ F°v°ļšam5ō ßL&ŊŋĶīAü?õ°žų e„J| yr(2L‚”<Ã!ŗĨ˜˙°ƒ4ôí=aCXjƒ4ÖĶWAŦ0š úoz§÷§ĨßĸcëL&Ąéńg#ņæ^D.„A‚„ ôidqš öQ˜Îf ŒDXˆ–¤ š™ q!á‚DPAÁ‚gp˜NA„Xaė- Ķ_ÉS$‚7†ÉCų(ŨzV¯ÅŪēé õũ8͏ŋ‹NÕ4- ëA38ün  f"ėÄgØL>"Ēâ"!`ˆąaD*  *Ū¤Ø0RyŌ{öäī'Ļ뒷|˜īŅ8hģ´‰ßڒ†‰;EßēŨČŨĸc´L}ūŸúú xÖ=8´=V""væ"!‚ 0„ZūŸīßũ^úJJŨ}ũi=;Mø`’xOŊū|n ƒ ƒrVíd­ĸíÚō8hģ Ö]ŋ§]w"Ž×ø•ŨX•˜0ŋØ_õ¯Ķ­'N¯éwĶj8kū­&č}~ēēn˜Tī×A˙…¤īI? “pŊ/ˇö‡ŠÔdĮņĮ!&LŨz÷ūøũUēĶ ĩņŽęąŪē}īßëk§§ õû˙˙¨˙ɏŽģÂ˙˙úũīŽ÷kũzĨ]tõ×+•ŋīëĨŋõˆėŽ‡‚­ßĮZ˙ūo^ u˙˙ũ߯ŌÔ­Œ¯XûúŽ˙ęûĩ÷īX<+˙ė˙˙īđW˙÷¯˙­ŋû[[ęĢŋãîĒ?’ôūÃÂ"˙öųc×˙د„íĩžŸ˙ã˙á&%ܙōGōCūų+ܑŨ­|ˆ:ë“đ@ہ?˙†Õ˙ū~õč×˙~ŋ˙˙˙;2:^Žŗī§Üû_äß^ëÖöŪІø_[ōÅqÅōËū˙@ˇ˙a„›¯˙ú˙ŌQ˙Ũ§÷Ú˙Ģü“ˇÛMęĢÃé}ëáŋ˙đoõôģ¯âĩ×˙åë˙í}û×ŋŦŠ;ūžúõē¯^ˇũÚ˙˙Ļ=k×ôžŋ˙˙˙ ¯G ŽAā0ĩžÃT 䁡r9,{qV•÷}™˙ũ×ī_šû[×˙ˀQß˙˙ūé…ũÛßOußOˇLmtũĻa¯¯_ļ~)õ˙ŋÜÎ7öŋęŏú˙ŋ˙¨Zßĩ}ī˙ŧĶ[õļ•­°Â÷aPûkđÖŌĩĩ˙‘[Iú#ö~öūÁA}=5[ė-ú˙ۚûocb˜8ūØĻ)߸¯cƒXĒøa?ų¯°ŋũ¯Ø^2$ģ§,ēŖ<‘đh0Ní4i ĶNČ ÷wa5M4û ­úŋięļ ¯iЧö:ũŊŠŽĮö?cøî"""""""""""%:h4͆N;žĶL-ũ­ØMK~ČŖßôŨúũ¯øˆˆˆˆƒ"%"Đ0„A„ ! B,&ši§Eΰ™Ũ¯aVČŨÄDDGĻŌ`„DDĄˆ˙_ņîŊ/ø%  ˙Ļ0—({ôÂŽ|9v@| š,xƒ …Âa:Œ“$(ˆ.[CŠE‚dQ°G Âza50ƒ2J("qBEB „Đ}ôa`ƒĶ `…ŧjžžšiĻē ÂavôđœZi ũBhy ņDééÚiĄę˜\x wIžų <†qč‚=wkĒ~i7ô2 Œ7fŅ zú!æÂ ™Âtú ˛," ¸A¸M ›D,ú!t< Čv];uˇáá:A鴃ÄM ƒZûÕ'Ōēm+Ič= žŸN_×Ķ×ģZ\'ŌŊož­ë{títûMĶ–DņŪ‘Ē2vc;…ņģJžž+ 6“ĶZäܚ_ šg}¨īHéĘŋī˙˙î>ô=6žU/"W•"úАŧtŊ­ęúŋkõ×˙ šŊ~˙5_ũ˙ę˙˙˙˙ēÆû{×ø]*oũęõz÷˙˙ëĮņų ˙Ū ēë˙˙ũõ˙Á[¯˙÷§ _&į4ĘÖȎĘ,ž˙˙˙āŋŽļūåH×%@Į„D-†y„ đ@Ėķ8 €ĪFe`ƒņdHĻ`Âc<Æōäx˜dƒ ‘Kį˛xéfl¨ģ×ø.ą˙é¨.ôīN- Ÿ„ô4Ķ0ƒ4-SM4!„Đq Ņ  g …˜0@đƒø¸Í Íæƒ#ŧšBq‚T+2AEƒ“D )ķUđ¯¯žņ…_ÕĨÑGjŋɎõOTÖū8žĶĶÖ4ôĶ“qvA Âa3Ŧ~? üaŠæn78! Î.Â"ųœ0AŸŒ?…ē˙_ ø_H4 ۃÂywEķđeøAôNōî)xåŪ^9(ĩ ¤ ‹‘čœ:—DŨHĮhœtMÚ&î×ū­8ĶĶĶK‹X†Ēˆiëô@‡ëūūŧņÚéŌßŌĩĶI6ŌM¤ÚO à …L+`Ąpœ$ƒč&'A7ĐznJÚ'Ņx•à t]ē—Õ‡_ÚR1ņ܌zqZÂ˙×øD3úVŌņēë§˙&˙ūģīęŠÚ§¯ĮÛĻÚôš õĐú¸T§‚Iī¨MÂŌäî‰Ú„„‹Į7.đžm˙ëčë„@‹˙¯Žŋ˙ôßNĨ×īŋĩë]cø Iũ'¯QiôŸúëK§§Ž’zt›­čĨ˙ø@ŋĐ-ĩaāŋûūß˙_í˙Ĩ˙ëīëûkŋ˙ūã×nĒ­Ö—WOMÖũ×_@ŋ‘6k˙Đ/}í& ˙˙ÁëHzß˙˙˙‚Ķ˙4°]˙û˙ēú×˙úŽŋ¯¤÷ũ¯Č†€ŋĐ-´ õ˙¯ö_U˙×˙…á÷ø]† ˙˙û PÁ}ũ|W˙˙úߎŊ˙ ũà č”˙ŧ0ū˙˙˙˙ü.Áũx^ .õû¯đÂčFū¯ß˙ôˇŧyáīK×÷ũ/úØ oA÷õ†ūĨųI˙˙˙˙č”pßkčôDq˙Ž˙ØhŒ}|Ã×˙û_˙ž¯õ˙뮂õĐ[Aô˙˙‡˙î˙˙˙Đ^ ė~v@ŋûâŋĐ'ë[˙˙´ŋ˙˙_ļ¯˙˙ZM˙_˙áŊŊ÷ūŋ˙˙¯×׃u˙ũ~A|˛nē’ëą_˙Ééa}/Žē÷¯õŌú¯ũũ¯_ūŋôŊŊõī_ß]~ģxãÖŠŊ˙˙ŌŦ˙Û˙Ĩīւ&úß§{{~šš˙ŗ?ĩlüß˙˙˙˙6Ŋ}ÕuûŅzũ˙Ú{úõĐ_ŊīŽû˙¯ŨzŅÁuÚũŽ“Žƒ­ĩĩõ×K˙ŋ˙[5zÃũs¯ë÷ūĢß˙ˇŋ-]Ŋ˙û¯ß˙ߎ‚4DuãöVJÂŨ…ė+avM¤Ú˙˙ßļēšŨĩĶV×v×ä,ūyĢ­6~Útŋũ;Ž×Ģ3˙˙_Ĩ­×˙¤"ÅH¯ö8ã‘`VĮ"âŋ˙ėŽž;a…{øøiGŦ5öŊŦ0Ŋ¯ÚûūČTõīĩ××}îB[ūúŋū͆Iõ¸i‘GģXp͆˜O×˙ÅûÁą\?}ö?‡ō8Å=EoPâļÂQ°Â˙ÂŊZ}­ÖBW˙Ž aDAœ˜A„! Đ†mBi„ -ÚiĻļŸŲŨ­ģĶ#}4ũĒĶŽÚdAûUĩíũÃö*ĸŋëĢiīV­ õĩ˙čDDDDDCDD4 !ŖF"!aDA˜ÂEÎí4Đa{Ná¯ū¸NÕŋëßjÚVžēîąȈˆˆˆƒ"""‹ĻgMąÂ &ˇ°ÕÜ+ÚũöŋĩĐŌū5xˆĐˆūÂÕĨļ’i6­ĢkÚ˛M! ÂV˙đ͆†ŊĨ -„Ŧ-…ė,ƒKH˜ã´ŋė|JØaa¤ÚL0V×l(a´˙ģ ƒ–LS 0ŧl0Âa5úà Ū;QmlS `xcŪÄČIĐ0Š­õĶNԊ:i¯ŲለŽļá­Ĩa4ÖČ7ĩ…ôēa;NĶ „ØiúŅî Đ0ƒ  Âp  0E8xˆˆaƒC0@ÂhTᅠ¸ƒ$–Ô‚D‹BrÚNĸ"#Xöéū×Ņ7xŠƒžVÂę™ŲŦJbgĸÜ]aĨų*•oLėn;ǰg@~B÷üˇ1˙bšzņũ×_ũãÚí˙˙†ŋ˙¯†c'ë3"„#:™ ˛6g\Ėōī43Ģ>É #^EUü0Zwz Đ2đLÄh= ?Â!á|8L0ƒøgXŽ3c4 gâäF ec(E<|ˆfC" ˇËH1ēøM>5M>ãNôâĶ Ļ…Ą˜N!„AĻžšeĻ|8AžÁ2xü~žaįčũ|œQ8ĩ —m‡ÉC„‰Û‘ģŅ7ÉA9qM;ĶOŊ?} í}nôĶ]}ō”tØfõĨÂ~ƒÂĻá7ĐnN“ËÆ‹Ė–dŦŽÜģˡ%t]ŅxåÛ ĨRo’ļ‰Ûã}Q'qZ]Ö˙Iø];OÕŌ]>—Tô)m7\&“tõi6“i4×|$nē~ ^n´Ŋ×íãúˆ§×í˙ŋūĐõū¸õí~?­}6Õ˙ôđ´ģōę×]x_ë÷ûūčWũé˙Hi˙z¤ŋĢē[­~ž‡˙‚ûé}č°Ôŋ]A^ëŋßÂõ¯˙^ęŋë ŋ×˙˙…˙x°_û`ī׎œŪ×ę?˙˙Ú#˙ŋ˙ė—ūũø{ízŌ…ûõ¯&ū˙˙õ˙ßÖ˙ˇ˙éŊū+ūŋŠīę˙ögæîgkßékßûŸŋũ­Íŋŋú˙˙×Ú?~›kkkÚ[}¯gŸYēŋ_ũŗ÷ũ§yÅũm™Ģ˙Ũ˙ەĘY‘ŠũČc,4Ŧ/đŌ°Ŋ…í+­ŌīM[[_ūÕ°ŋkj¯ũ;K_ũ/ŗÁIi˙{ÅH¯ØĻ>+cŠãũ†Šc˙Û ļ­¤Ã īļļ°_Ēa¯Ŋõú¯i§ö™]{]lm?ûąOėS"ŋâĸŖ˙bŊúŽ8†qІ Úh0˜M53σ Âà öšdŸī[LūĶA§ëé˙Úûū@ÄDDDDGDA‚ˆˆˆ†a´Â 5U´ )c ÉÂöšjˇŽ‰ zÄDDDDGĄDGūK^ k˙ëŋũu˙ÄR˙á„?ņæ&„PIųø„>f†u3Y„@Á‚ Ü3PSŖ6! Ĩ ؄`„@ĨYXžĸMo  ív˜A‚ †ÂiüZqa8´ĐvČQÛkúqvšh^äN!z ŒH) m퐖A/!-ĸ, âÂCL'a=oą˙˙˙ô˙˙OÚO˙õMũ*î“đ› ü+„nnũŒž4Nčŧhŧ蝩(ēËļ¸Ō'FôM܌v‰õM;N:k˙˙kūģ¯˙õ°ģ˙íĶÃ_ŽéĶNũ:MĐíĶĶ× ƒ×M´û]<&úIū ›á7AĐO>‰ÅŧŲ“ŧŧpŊWį 4?˙ûĖū˙oļ˙Qßɏ†1ØZû ŋ_õ­+ũ6–>=?ߡúMõ´íi7ĐxWMĶium_˙Mũ´ŋŌMtžéų€ûīįWÛĮ÷ˇūöž?_˙˙^Š_Ö==zN­MĶu´ŋ˙˙_íSÛūŊö&?˙뾖äĮ×ßëí*˙_üŋũũūŋŨWßüßÁ‚˙˙ /á¤Úļ—˙Û~Į_}¸oũ_úøØqë˙ûÆ ˙ŋŋ˙đW×ū}zÅ5˙ōøbŋŽ ƒûõ ū˙ÖĒß˙Ķ˙ėīū˙ĢÚ˙_ü‚˙õāģũk˙ö˙ūƒō|ĩyĐoû’ŧŒuņašäĄŋwū¯˙˙Â#{ĩ÷_˙ü/˙ęŋߓpĢ˙˙aL&ŋīXBūēÔŧ=÷$ũ/å—Ëú˙ųs ÃėWß_×ۈã˙ū˙Ž!…´Ķ^ĶO†ējMÂi„˙ŊyCwŪĒŗ˙ôŊõūũ×ņ§ú÷J˙ša5Á÷ú˙ņQhDB#ƒ0ƒPM~žŸ˙ūē~˙¯žŋííˇ˙žŊaôž?~ŋŌ˙ŋŪŋ˙ˆâ"#ö­úû˙v“ĮjëĢ|ˆ;Ģ×ũß3_~˙ęŋ5^´—˙˙úūë÷ũ~Å"9qû×Č<ƯĮ‰wãūĪÆūĪÚn—öˇŲš˙˙o˙ūĩŨj˙õūģív×÷ũ{KīÅē_ļŠĨĢk~Ŋ­¤éáIČJw÷[Ėīõûũs={íz_´û_˙u[_MU6×ņ°jĮ ,0•…Û XaXamx?ÛJÂė5ūÕûöÕ°›Ž–ŧˇŧ%îÖĶ^õ]Ví5°˜_×áĻ)Ļ)ŠcØâĸŖŋ¨ãĻ+ö5Û vˇPÂÃI´ē"" Ę Â`ƒDM1ށå#Ô&ē ĄĘ„di;L&š 4ČĮī0č4ČŖÃ]û´û_ūÅllTqÅzÄDDDE!A‚aDՂ ÂĸįϰÂdŸĩû#{ínĶĐkÂÄDDDDDiÄRRČB"f´Â ŧ˛Ŧ&XUŪ"""""#´’ÆL jĄ…Q˙–Čœn;3ŠÖA3ē/꩕ĘãŊTĩR˙;U˛%w镸”D[6¤ÎD+"u‡ũgj#˛‹;ģõ†žŸ˙ī˙ŋ!/˙˙×úËį¯˙_˙˙đ˙üļc5}˙˙ßĨMīüļāA‚›ŒÆP2 e3Ė0@ōäN@ˆJĻ œˆnÉs!˛TÎŦû!ÆŠ2“4EU}×˙¯ø´„ÂiϚÜXAÜZ !„A‘ãqœn6üafpA„ ׂ 3AOÆyČ `ˆ^# ¸di˜0æ  ŠEš2Íõ˙ūIÚ$?ĶM4ãĢO´ŌM׸Œ ĐŊĶĶ‹Âa ІœXL<a‚ |Ügų™DĒ\‰Į™‘ ´„ųy—tNčŧpƒ GNíIE-ܸ˙" v˛(ī´ūôÕ?´ĐĶAĄéú 8°ža=:NēV“pޏL([N„'Žtƒ¤˙Á7'€ž^8N žē/ÉD0Rî‰Åˇ%mŠåÃTIčûôŋÂ~žšWVū×Ģ‹ũ67ÖĶ̤ÚŋôŨn—]U7OôÛI7Aéë &Ōyy„Ü ōWíåÜ0RW——wúū¤øõ˙Ö=?ĶúũWŊ?Ö¯đŋŌŌz괛IééĒę+ũ&ÚĢIĩH7Mūkđŋa~ŋ÷ß~¯ũū˙ôŸ~˙˙ÜoŸ¯˙ĒũũGõ˙ ûāŋ™ˆŧ>ŋë×O˙ú˙ūūŊúëõŋīūŸúuIū˙ũá}pŋ­q˙ũ˙˙˙ũG_˙đČúÖh%¯ËĮūˇīīí˙˙­ē˙Š?đŋ˙¯ī˙˙˙÷¯ŋū„k…`˙ oū?Öøá˙˙“šĐ/ũ˙D¯˙û˙õ˙û˙˙˙˙øVû˙˙˙l[õčtûđŋá6¯˙˙“ĶôžŋüŽũ˙Ņ+°˙ß˙õõĻ˙¯ũ˙ũĨ˙˙õũo˙˙?˙üŗũßüŒ?˙A‡˙ß4_Uë¯˙ˇ˙ūŋŋ˙ß˙í˙˙ģéaˇú˙āŊũå„í&˙m6ĖüÎ×ú˙éuŗE÷˙×˙ūßß˙˙ī˙˙ūŊxokĨöēļļŋîŋÚˇÚnŋëūg˙Ĩ˙æ~Ŋöh­}ŋžŋßŨ˙ņL0žÚ°ÖŌ†īģŋ°ļ­­Ž†—í¯ßí­¯íĢiļŋũ§ŽĻúķw¯ũ™˙Ú홯LWąLlSür.ŊŠccâŋ˙áĨ`ŋvŌm~ũĩmpН§ë¯éßëé›ŧÃĻŊ„ĶLŠ>Ÿ§ũ‘GnĶ˙û_^Å1üWČ¯Ø¨ØØ0’ûÅC ė4ŋaĨ°ÖRē‘…ˆ0B! ÁaŊeâ ;A„ĐdŪdcļFë…ûUŋ´Ķ#îÂvŊũ§ØßúØŠ^ÅqLtÂâ""""""""4"3*" Âa‹†eÚ !§iσ$đÉE¯jáF?vŸÚÃMt˙Dqa‹ Åϰƒ jqū-ˆˆˆ‘ē˙z ‡˙ßcũk|›ú÷ßë¯ũ𠁑T.E.FL˜eƒ,™ĀI+âA”L ÁC0A‚ 20!)N%'PžŠ đƒÂaH0˜OúzϜZh4âÛúHŠ;N-SÖš ‰ČēDšÄ$D˜CåãD|ä,4EvWW÷§›‚:Ŧ=7 „Ũ:O ĐAŗŗX’DD-Čĩ¯éči¤›ĒŌn›„ô\'a3ĩ&Q(‡‘L‹B÷ęõĶ]=7]_éú~Š„etgb뉪ąUWúūžŠÖ×§K“ˇ Wß§žVšiš2 ÎÁ˙ũēÖ˙¯ßĐAúö×Dé™-Y%ŧįũĻW*ˆœVcšŊ_˙ūõöˇõ{×˙[ī)ėė;]?ú]]?˙ß˙ī˙kĨ˙ũĐē˙ö‘īø2>a(~Ã˙×˙ōŦČ#:?9>žXīëĻ˙˙î˙ūt/¨ˆŽ˜?ū-/ã3qœy—Áeāƒ übÄĖeČä3yŧĐΆy'ųBuÕ˙ūŋ˙ú˙~Á˙˙˙vĩÅĻâĶĶ´q 5 ‚ đpƒ=ŧ3Ņø˙tN3Dnũ3˛Ũr]_Ūčą˙˙õ˙a˙õŋJ‹†˙ÉCDŨ­§i§|Rqiī§öÚϚyę„Ü9–žg/‘ƒ3Ė8Â!"\3‹°ž„ ųfdDĸ'3yĄŪöH‰_˜ˆL՝|„_¯úđß˙ëúAĢŋ č'—y+ĸw„ÃEåŽNė$Nܔb8}č˜īTžqZũ¤ša4,'qa=SAúa ĐiĄeÚ}X `ŸÆđƒ:@ƒ `ˆDpfČĐSŲ>HĖĻaŸ"Afō^Ė˃y¤S˙ūID˙ä¸Ē-õkWĢÛH<.›Ļ §§IÃUOL'„˙ ƒw}Ē/5¤ŧ„~'é§§Úhtŋ§„ĶŌ‹ūĶė,\C „iϚĶPƒAö}„0ƒ<38dã#°˜Í0ˆH<·ŗyĩRz?Ŧ7˙â:ī&S~ēŌ˙tēaŽ;WÕ=>˙Å$Ü-/nŦ&ā‘;ËĮ%tNØ`¤ī.Ü0Hŋ )wšwEãŅv¤põÚDáú$>E#Éģ^4߸Ô'úĻžœZÚǧaSĢ÷ā˙˙˙ˇ˙ŋĨמ~­ôˇÖ7ßÛę˙Z_Ũ4õM× éáV“ÕS~ÂĻé&ö´žûa‚IūaBntËČ`¤đ–Q;}I[„‰Û—Ö[°‰CåÒvĩÛú~˙Û˙ûûáé¯ņ˙ũ`˜/˙×awëĶęžĩũņęœ_龟ë¯ņ˙Ąë§˙ĻūžNĶĶMUl'ĩ§…N“ū‰å đ›Ō   pÁ|$]Ŋ~ßÚ˙ŋÕ°ī¯˙øéÁAëŋ ŋ}ôëņ_úzëęīé?Ģ˙ôŨû˙]Wë˙cãÕXũSÕ_˙N“aŽ’ë§ūžŠ˙ū˙ûõû æ˙˙á°Ą­˙īöģ˙í"–%v ˙ūø/÷˙ęúē˙õ§ę˙ëĐū—ãŨ?˙˙ŌŊ'û!˙×ũ˙†ū˙ú˙ÛDĸ‰G˙˙Dc˙WE˙Ģ˙Âņ‚˙ëĮņ‚čl?˙Ķ˙˙÷4ø-¯uë˙ø_Ŋû˙úĢ÷úy+{kũítÜéƒzĮüŊōõē _˙ū<í˙Vŋ˙íá|/×ŋ÷_…ø>×ô?ũ˙đŦ?đ^ŋ‹˙øÁ˙ú˙O¯íŪĢ˙ļ›ûV˜n)ũ˙$î´ˇ˙_ëã—Sú˙“v˙Ē%~‘(×~Ŋú#†ûK˙˙ĩū°ûõo˙˙õ ¯ũ˙ūÂđé´ŋĩ´Ŋ´÷¯˙˙õũžēKŨØØ˙˙$^õ å„ īõ~^ē—¯Đ/–ö?˙ū×ũ¸aõč”uūŋ˙Dc˙û_˙¯ŋl0–ØXa/ÛV_i‹ū÷4O˙ßÕ}˙û˙Ŋt÷üi_û¯˙ũwƒ}/Ũ˙ą_Ĩ ũôŋüŊ?üˆ8A˙û˙˙­_!øWĮûĮėT˙í+N×Û?v–ļ­¯ŋ÷_ŨW¯Ūŋ_õ˙˙˙ú^īĨúOûč/úÃ˙Ââŋũ– /دŋŪLØ&ūÖkú¯bĄ¤×Úļ­¯Úí̧…ŌûKû]ėũũūÛ¯Ŋ¯ē˙˙õŋ6ŋÛ˙Đ_ëŋú˙˙˙ē_ū—˙­WŨ­Ļŋ 5í1[\TT~ĮÅFƃ_ĩú°_m]ûKøuũŽŲûëŋ}ĪŪŲû˙ėĪ:/O×÷_—¯ŋ˙ũZŌ÷4[˙õđŋ˙âM4Ma~ /a?ôĶû {áŠûcŨŠũĩ÷l%߅íl/é~ßŨ˙áoM5Ų >aõ÷ÚȨúZ›ŋũ{öĖûO˙Ė˙īôZŋ÷íÄDDĒĀÁˆ0ƒD0ƒ ĻS: IĶímF=‘ža×ĩôČŖ÷jĢbžØø6˜ö8ũŠŋö/ÛÁ„¯ā˙÷ė%Ģ!ûÚļ5ŋí}|.ŊĢjÚzöŋē˙æyē""""8ˆˆˆˆ0B Áƒ"ÂÂi­§}­Ũ¯ũĻũā×k‘lW°oQQ]˙KplqßĮûÅpՆ—amm[ ļžČzē^m4øˆˆˆˆˆˆ0B"M>(´ĐdnĶžÖíuČŖđĶ÷˙öĶŪõĩ˙^Å1ņąąQėWÚÅļÆņ_ÄDŌÁ8ˆ0… Á¸0„CM"įi§ZiĻ$č"~ë„öŸč27đ°Ķ[ģOĩöõí}!§D(@Â#,X Ј†yn°˜NÉB œ Ķ%i­Į˛(÷dcöŸĨéâ#Xˆˆˆˆˆˆ0B( â!h0„Cx-¯Ž¸î"# Áj֒˙LVÅ`Ŋ…ˆhZŌØ¨0A„,&šˆˆ†ŖūM†¨S´ņ";WJëQYŽüČ8‰Į}˜Í˜Č§õ˙*×áSRIÂ2O˙é˙×kŲnŠDņ*™4Í˙ŋ˙Ú@ŸāŒˆūímU3ŗ”DĻ*y4Ęëkķ˙üqž“ëū˙ôĶ;¸īĸ% ŽXĶ*ŅÖ]˙˙¯ü]:˙õöõ„@ËÆáB 5ŗņr?˜"rķB"Ļjōb:Į\Ē÷_˙˙ũ}ũƚ}hZ~fãėķ3đSÂá gâã=˜ @ʉäPdHķ2$Ę{˙ŋ˙õ÷ú&ū“NˇŊ?Nũ=44ĶN4-44â ' Â 3Đ f0”R yō ĖÍYHgHÔĖâæķąp¤äxg†\9Ą#ĖŽ:…<Ī3äpõ˙˙˙Â|'tNØ0KrW’ļ‰ßŅ;ŊŌ'n)QpäĮiۘ^ĶAá4ĶôĶZ !„„ø&`ƒ3 ‚  ė gŖqr'všŨÃĶ> ?ķ T˙úûū=StõôõĶĮMÚõÁKÍAŅy“Į%n]äâ’Š' ~N2ᡞ‰ģIVđž’h8†ŸĄhwéiü;ĶûŦ  ōž?Ž įÆ@ãņ’ ?‘žn"3H#<Á“–|”2Í/ūô—O×]}ôßĢOI:ŠNĶu֓h' 7OOÂtƒT ‚yxŅxŅ;ĸî)xâĨÃEے‚+Ņ7mHßČŖŌ´ûģģŌÕõâÂa>īOÂxP˜OP…BM Ač<äga0@đAŸŒ2ŗâ” Ī7'*Ėčd$ėĖČdj[ëuõŪ÷KĩßĮ­üGŽē÷ëIĩö¯öŌééŌ 4“p’ $đ˜Ač6(OÂn]ŠûäŸōn¯đÂŊdoš1ß柧4ô“C´í=:ø´4!„ 0¨< Īa h3đOõīÛũ~Y˙Ũũé}÷ëô‡˙Kφéņ÷Ēž´žž'„ßøoŧ$ä¯|°Ás?ĻŅyAŨyvū^h"yDáú'n•Ņ8rPŅ8Ú'ųUb–Ö0§aU4ĐėÅĮĮ˙ôöĒ ×˙M:˙˙]˙õĩ]žžŌëē~¯ŽŸī÷_ūĩiŨ~OO÷¤˙O › øJēĻč=<&ú~ē´Nōņ—t^9xáKž‰Û‘ÃÖ]Ņ8uo˙×˙×ü-/Ąã_øüĐF?īđ_ŋ˙Ĩŋ˙˙]kģ˙öĮû¯[[ūˇüj´žŠęļÖŋCü..’}ŌnŠŪÂŅ}—”›A7 U§˙õüąôũ‡…ũ˙Ŧ,ü~ØzŨ0ûū˙˙øĢû ‰ū;āÖë_˙īZŋŌ_%ēņ÷Û¯˙§ŪˇI÷Ŧqēũ'§ŪĄ×—Ąuų1Ęūõz%Ãz%ß˙˙DcÃũa~úƒ¯î?˙ūL}ņ×$;úöû˙˙ēëü7ŪŖ˙pĩ˙kû¯WI}×_î“úŨ=Aˇ˙—?ũŋpŋÁŊ˙ËĶ˙$:ô l˙ôJ>˙ ?˙˙ûZ§Žŋëŋ^ž8ûž?†Ŋ¯v đČâđ˙˙ŋ˙î¯ ū—˙_˙I˙˙ĩŨ/|? ˙˙ø!Ŋƒaŋæ× ēÃí˙ÕûiRk÷ī×ļŋĒ˙_°ëũøö˙ô?Ōáāŋ˙Nˇ˙˙ŋ˙ũë¯Ûu˙÷˙ū°á˙īAwƒ{ø7ûōę˙ņ\rcá!ÕáŊŽ?ũŅc˙Ãū˙ÖõØ˙õūžÁá}/˙ų\Ŗ×s9ŗög˙ûš/Öžû^Ė×˙žŋßûˇũ˙ûũaîĩ˙˙äâŸÁ^ü“ëz“ ž‹ŨdĮ0åOˇ˙×č•ëŦ7˙×õ˙ė=˙˙ūŸđÖûNŋûOÛ¯Ōü¨^žŋögßūh›?ũ_īūú˙˙ú ŋ‘GÉ#ūū˙ûOÅGB>˙&îOO ŋ—Ģ˙ū^ŋ˙Ãx@ŋ˙˙ėIŊ†† Ēŋü0ŋĨ]…ÛT6ē˙ë¯í§¯Šģ9ũퟛõ|Úû_÷˙ųļk˙ßĢĩ#›Šžž˙¯Ão×NũU~øo˙ŋī×đ~ũ˙˙Ž˜Ļ*īũŠö7i‹ã°ļŦė0Ŧ5ŋ°­ũ…ĩNŋ×]mPkū@Žëû3ūŋŋŊũģ~×˙˙ũun¯íkū˙_ß é×ë× /Ļ›ũëvĢkũØĻ+˙ŠŽبŽ8k /[ $à ÆÚÚ[ .Õĩū×īųĩtKŋԟ ũâŖ˙ÜĪĖũŨŗ?ũüũ˙˙÷ūŋ˙÷õëūß÷˙ 4  &ša5M5A¯aU27XdžĶLŠ˙đĐvũώb˜¯ãcØØøŽX¯Øao˙ƒîŖŽ˙ëŨëûM´úĢ_0ķžī{?wëųŸ›ūũŨlĪÛô­¯õŨxˆˆâ"""""""" Â…ĻšdáVĶL,2Oi¯ ÂdcŲ{ĩ‡Ø§ũŠ`úũž:ëW~÷iwø`”0—í…ûūÂM„ģm{ C í„î××ím?Vũs;í}ûWJ˙ˆˆˆˆˆˆˆˆˆ0@ÂÁ!‚˄TÂÚammúnÕŋ]~ÛM=Ull~ė~Å{ļÅqĮņ\WÃVÂ[ki7]Õk­Ģ}­ĨčDDDDDA‚ˆƒ ĄEΠãĻ[ĻÚeiÚvjŸÜ4ßa{[°Ģë§öŠßØâ¸Øâļ=ãŽ)†ę"#Mˆˆˆˆˆˆˆˆˆˆˆ† ‚šjš tĐkpĶË É?ÚÚļF˙ ŒxkvŸĨéŨÚcõЈˆˆˆˆ0Cˆˆ‰> ÂØB"BMN0š a’A‘dcÃMTmqĄĄa8ūÔFÕ[đŌ֔GĻĸ#˙–åą)úgfqŨQŲTv˙ߝä@ƒØ<î?ųĒķËĶSąH–Gt˙˙Ļ˙d&ļĻYÔķŧÍ_ũqČũ?ÍUĒŲØČíf*‘Hd˜Č<ęŋ˙˙ũ}WjDŊu Ϛg`ãž9n:˙˙˙˙˙Ķũõ•ĘÅ#ŗÂ’H,Ģ\‰ČFˆÛ* čd5‘hë˙˙_ũß˙đP_ä‘І˜AĄ§ƒ Ą Ī:Fp `” ÄQ‡ŗĖ”Ėäé32Í?0É;ŋŋ˙˙ēKÄxWJ…O §iÚÚhzj Ä<  Ęx"G3‘†2q…ŸėŖY&ΈöDf¯ūôõúÖ7N/ę˙ī¤˙ĶítôŪ×O[î“×Õë A¸TJÜģÉãA?ĸė)+ĩ.č›Ķ–é;N)=Súĩôã[ĶTĐ͈´„đƒAëa5 ēyčÜn0@Âā‚ ün.AøAžū`ˆÁ~ēˇOūÚúũ{Ũ{ũŌ[WŽĸŋõÕ]^âíøí?]PÂŌn´›úz°ÁSh&Ņ;¤—mšEے˛VåãDâÂ~Jčœ:Dáß&;tNĸCģô¯Tô´ãôõãqa>/;M O˙ëūƒ.(.āģ˙ÚŨ}ūŋ˙úëĨ¯øũ={ūŪū¯_]7OēO°šxI=S¤Ü' /×̧…Aš<č á—éš8 ÉŲáŅ;Hģ|ŧhŊiˇOĸpúäcš1ō1Ü>ûĶׯõņ‚ø/˙°qŽ˙Qū ë˙×īá]o ­÷ôõ×õū:é:WøÖô×øöŋ֓Ķ]7íé: ëĻ]:O¤ô÷A‚§„-Ū„č  čŧōy /,Ž"w’ļ‰Ûˇ_˙ūž˙ØûūŪ Q˙üqø-Ô<ž¯ûßŋúõßūŸúŋzë˙î‡ũ/ũÅëqz}ŋēoIéēđ××OOM´ũt“a„Õ7\'Į˙˙Ō%Dq˙ö˙˙˙_˙ūü.Ŧaúß˙ū ¯úvØ-ũÃŨ˙×ú}×õúôĩõׯK¯ëûúéÆõ˙÷ōõü˙áē˙ëũŋ˙˙ĒŅ÷Øx_Ø?˙ū˙ÂĮ˙0]˙ž˙ū {˙[ŦđO˙ÛŪ+˙×_×ßëéũ_ũu˙˙úĨ˙ę ËĶúōõĨ ]Ë'˙äø“‚ô ú č•úÃ˙ûkø_Û­ƒ _ūÁī_ú üŽ ø_C˙˙zđX˙˙˙˙īÂŅnQ§˙tŋũßŋ˙A¯ũ !žģP~ËÖų7(˙°—č”zõÛDo˙ũ‡˙˙Ō˙˙ëøJ×ūģ˙đ_÷ęÁUŋÁxÚļļš˙ũūÛ˙˙˙ū˙˙élaŊ/đßĐ˙ûú —§b¤āÁ´ ëõÁž×ûDŖ˙˙„GŅûK˙˙×ūÖđŋ˙˙…ČJÔÜßŨŸĩĩ×vûÎ.ĖÕĒ˙š+˙Ė˙˙÷úë˙đū˙ū—đžúĄŌųj˙áŋõū^Š˙-_ūū6Į"@%˙˙¯D¯˙õĸQũ˙˙Š?ÃI´›Tė/ļ­­Ĩa~×TëOWm-´ôŊ[ŧÎ˙÷4YĸoÕ߯˙J˙E¸Wëū–õīęø¯ũøOũč/ôRÆŋ|›ŋīĐ\īö*ô˙˙#¨ Đ.ÃcŽ=Šę8âŖÕ°ļՆ†Ŋ¯kkëa[_<˙í;O[ķ÷ÚögäčÖŋŗ5ũ~?˙čŊm×ū÷Oŋ˙ú¯÷Ŋ?˙ú ˙ú˙…ĶĨé˙đB? ­4û^ĶīņąÅGŽÅlq[iC ß˙ +jÚØ.šø^Ķ 'ū¤ëŦŠ…ūæ›÷fũ™ūēüũ˙Ĩūē×ũhžŸK^ũ^ŋáu_û×ū—E͆aIí4ÖĶ# ‘žœ;†ƒ=ĩĩûŽEūÅEFĮLVĮ°Â_a}†økk!˙í…ĩ°˛MŨ…í?üŨ˙˙gŸ¯ö~īĩŌūŌėĪÛßßũv˙EĢ­˙˙˙q!ŒFlB" Á †š ¸´Ö…†Föšßūši÷~ŲŠđÅ|TSáÆÃ jÁÚÃJÂíĨîà &ģM…ũĩÛ -ĩíoĩ˙Yí2īŌ´ĒûZũûũí}Í?˙â8ˆˆˆˆˆŒĀĄZ„0ƒ2pƒ'zi É:ÚŽŧ5M:wÃv)ŽØØØö?ØĻ*ö+Ž=ŽØĻX˙‹a°Â\ƒākioÚWíŽ˙ČzÚÚ˙žwũ¯ëúņ -Zi•a0™(HŸé§dĸĐtH{P™~ÂiĻūŊ­ëiƒiŋŪ ŠcībŋŋØqQ˙{a/†žØ[ŋˆâ"""4؈0„CŦ$҆a4Đjš„Đkh2pĻšŲæp…´ČŪČŖúŲz$öô×íWž˙Ũ?đ{ČāWĮ¯ŌëÜDDDDDDDDDDDDC4 ˆ`„DC0ŒØhC0č0ƒ ÃĶNĶL”Z˙DíĶ"ũŊ…í{"†‡ĘæbĨ~ĸ""“ˆˆˆˆˆˆˆˆˆŠ[„!œ4͆M4ÔŽ‡Ž ×éčDq4ÆÅ6ļˇPÁa3<ÃËäņ|ä\‰ČÄjÍæŅĸ4$ [Ô'š2­æ#§å %˙ûkI>“˙ŽĒ×MĢuÊéē ÛX3' á:'t ü|Oš.Ũz'pÁ .ō8ĸnãNLvƒÜ&Á:zöšiĄÆŸk 5Ķî- BiĻ ט‚xA„`ŸŲōĖ@á)ÆP38š‘@ĖķŧÁšō ōí?ũ­…ŋŋK^ēãŽŋúÚnĻ˙}'…đžŠá:A´ ^4n^u—‘Nܕ´N-Hß.&īDĮÚzöĢęļąú_ü&ƒ‹Oŧ!ÅÕ Â, ĶTĐģ4‚ ôgD3ņø g\ Ą ĐiŸČđ„ŌG ÉĮØĶ…Õ|wôŋ_מßūã¤ã˙û×ããõŌZOOôđžēpÍá6“Đ} Â’ļ‹Æ/’ļ‰Åˇ ēäĸ‹ĀĄ|ģž˙Ũĸní5õąÕ;M8īĶûîĶõÕńÂ}Â%Œ%¯ûvšš ÷ü# ŋ˙õ…õ˙ę˙ˇë§z}Ą˙ēŌ{¯n‡Ļátí}i=]zđŋ¯§ ˛{đeņ}EæƒÉ] åŪJá“N^9yDq—tN)(v¨œ;ízøûOĶžČŽĄ6“ûø_äî¯üÁôúû[õ´ģĄ_×}˙Kúũ[ūAŌz˙ŪžŊG¯ūļé…OMūĄéßt›ai6“§zH7ōxß (_6C JōņĸķÁ…¤éûč+¤ŋVū˙đž ˙Į^Áŧ?‘´ž ŋ /×_÷ũ?ũī˙[×Zõī¯ßéx֗ũuõũ:ĩO×}ēímWĢL*ēéŽ+ēN—ōc°ÛĖīDq†ŋî‰G˙˙ÂÖŋ˙û X?ö/¯ü,?}~ŪžŋŽ˙ūģŋ˙˙ŋ÷ôŋÔiū‡ēßZūŸ˙¯ĮŦ|éGũ87p[/_Ú ˙˙ôJū‰ß˙¯ÛpÃīü/°aũãaúũtˇ˙ęū˙đ˙˙îáū˙˙úß˙Öū˙ß˙¯˙߯Ēū­ŋKI˙tŋ˙˙…Ū‚˙ųi:ƒ{]rQöŅ˙˙Ø}˙ŋūŋíë˙ûÅõül?õ˙˙˙ã¯éo˙˙§Ø‚ß_Kŋ÷wø_^ŋ˙é~—˙˙†đoå¤Ëԁ~@ŋ˙č0ûK˙˙ūŋĩúož˙Ø˙˙õ˙¯÷˙˙˙KÃü‡ŌÕ_¯oĒô^¯ö˙˙ū˙˙˙˙vđ˙ûĨø7 ˙ŋ—ŋėWë˙ü˜}÷ø¯°Ã×˙ Ãú˙ßë˙úũ˙˙ßaū°mku÷7Ŧ;?ëkĨ˙˙˙˙ŋīģūũ~ëû˙Đ7×˙×ũ}Ēûׇäw˙šbOī˙˙ūŋo˙÷˙ũ‡øDo ÁiĄĨđ×î÷ÛY:˙˙Wųë˙W]û3ûS‹õßģ3˙Û˙žžũ/ŋīßū)ũøo@Ÿū°˙˙ëũ˙ōõū—˙˙˙ƒÂpŨ8ØŠÄ&+ø0•Ķ×Íõ¯ëūŪ‹×ũ˙ßû˙4ũúûßõ˙˙˙÷ũ˙¯˙ũpĐX7á>í{ą]w×qĮČĮđ~ÆÆĮ˙ļía­÷ôÚjÚoVžš›ĩũoÛ?^ģ˙§˙\Ņ~žŖũõõŋú˙ũî—˙ņOW˙˙žßū÷h0ŊĒđײ(ôNOģŊWŋėŽČŪĮąÅAņOąO ?oN?mĩMvB˙m.Âū­§õüŠZ˜ŧõ_ūŲžj˙}×oũĖûũŗõš/û_ë˙˙ũ-â"" ˆ†ˆ0B‚4a„-UNÎ<Ķ$÷ “Ųč21˙ôÂÜ?ŋÖėSŋąÃՊa¯í}}†ļŨũéú߯˙ø[ūŌĩõūÕ˙ÖĶ˙ũm˙ͯũxˆî"""""!‚ !Â`…Ąvƒ†Lœ&ģ ļļLŠ?pÖ˙°÷xŽũŠØ¯cbŋ_ģŠoWīŊ†ļŋ mv˙ki{jØ_Ū×S}…˙Õ?öÔÃúˆˆˆˆˆˆˆŅB ÎRa „"͞Qk “öļiīÚ˙vŋūéŽīäWÅExbŖØū ŠcøĻ+úb˜û kØ[JūÂÚīÄDDF„DDCD0ƒQs´!„Ķ%Š’{M5MxDšėŒxa?_NøiëĻEļÕ{UūׯĮülp~ÆÅX¤ą§ÄFq †ˆˆ‹NĶ0šh4Ķ´ ¸Mn *Ú ~í27ōĮ oöšëÚŋ^—ˆˆˆˆˆˆˆˆˆˆˆˆƒ)ahZ ģM0ĢdĸĶģA“‹PÂĨĩõGˆÔfBC†.-lRĨ * \X `ЍŒ!ų6YD"–āLĨÆäĐgeQÜff^% ˙œZkĻUc°JŌūžtĩō'yŲ”TF¸‹F¨F"@9Ú8ã÷íB˙=öšā™\Ö;O‘%ūŧaŠ˙˙ūŠÅ*&Q2ņÜDo"YÕß˙˙üåŽ*wš’¯ČE¯ÚĻWRŋW˙˙ûũ§§éëä%ëĘåc3ˆäH"ņŧæ`Ęƒ”Ôķy‚ÔŒgFDí5˙^ú~ŋ˙ÅZ‚˙āŒ’ĸ đƒˆa 8†ƒfā‡AĄ†38ün3Aá<38Äo1Âb4<šš$ō[būŋõ˙˙Ɵū–ŸÕtĶ]V´ x´=ĻŠ§xAÄ4ĖāˆS™ČZÍæĀ`ƒ\‰ÆH#<šäg˜2EšŪHDiæ˙J—_˙ü˙čģrVŅv#Š' u‘Ñ7ËČŖ×X¨˙NīīģĶL'˜Ma4,!„3p&b/Aˆ<øëĘqšf㊠gČė$jōB˙˙ũ˙O^ü'IŅ<ōķX`¨:Aŋ‚m¸`‘8u kDíÉGZŨũšvšvĒĮŪˇĻĩh4 ĶLã=áD'ųœ‘#ˑčÄ|fyžh2ö\‚!—"rŒÜc4G‘ˇ’fjEC˛vD˙'Í˙ũ^ē~ŽžŸIá7Ķ[ũtíBn-‚ë„߃6°ËŌĢ77eæO(ģhŧrWEã’ļ‰XKĒ&î𘎜ič>Õ0ƒÂq|^˜A§hqkƒM5M4!ᘠĪ0Lž0Âa3ņs/g˜`ˆG‚üÃΌ"åȜ°˜FŦÁ2ƒ$ΑĒ%ķZR˙ßÕ]~˙â•˙Ģęõū“÷˙˙Z´•Õ¤ôôŨ=h ōķ[ô“Ī.Ū‰Û„‹ļŌ&÷ôŅ!úi÷žˇÚņũé'Šë„ké„Ķ]>,'Ļ™œ…„A„A„ ô`Ÿ‚ €ĪÆ ˆG—"r#N3<Ãū˙öēũW˙õ˙×øĶ˙ö ãĩ^ØõON“Âú„ôŪ“Č_ ꝂAôÕŧ Øeųväq ”aKĮčŧ J!ŠQvÚ¯’ޞpém͊øũ;OM˙iĻ‹N.ĶÕb 4­˙ę?˙øu˙˙õ[é˙úé˙˙˙īj?ûv¯B˙ũBēô„õ é'ũá; Ōl0Pĩ§éđš+†_—n‹į-ļ‹Į Dí°™;ĸwà äpEw.¸h›´I܍é§IĮÚiŦú˙ũØ{˙×Į_ū˙×ęh+˙éÁ}.žŋ _õŨzO~Ž?OW÷UWũ×ÖŠmĶפõ÷MpƒĢÂëaW ö„é:MPnĶhš+†_ˇ@ÁIF]ŅvŅ;pŋÚũ˙˙ė?˙˙ë_˙ũæáaū† Ø-~ĢĢāģ˙,5ā¯ī˙ũ¯×˙ũ_ÚO×פ—KOĨ×OúŨ~“}8Ũ˙Mi>);MÂéëéáU6“i<'…“Ķą_U˙ūūŋ˙˙ũũ ø_ ßž˙Đ^øëčbû_×}ū•ŋ˙˙žŋâŋ˙Ũ%^ŋéē˙˙˙ūüGúzwޏ_î7Z˙îXO˙áõ˙—¯˙ë˙ÕÕÅēũ…č×˙×x_×ß öŧ`ŧ~ŋ˙˙_Į˙íī_öŸ{×˙˙ë‚×˙×tģ­÷ĢõĐõoĐ_˙ŋøo˙˙˙˙īø¨,7. ŋ@ē˙˙TG˙ôFūš‡Öŋ˙Õiw˙û˙WŋņĶ]˙ë×āŋ˙ÆÃR M˙¯ÖÔū‹×Ķ˙īũ˙˙ŪŋûĨƒ˙ ž_˙ûzßɕõĐ-÷Wđˆß˙˙˙˙˙úũūŋī˙ô˙ūø_˙Շ…øũc¯ãÁ~g˙÷f{¯ī˙˙˙û˙˙õˇûÕ˙ߎŋĨ_[_č/—WÖ^€Ÿ—¯˙ŋØŽŋ“ĄūL}û˙K˙˙˙ūˆß˙ūÃÂū˙˙øZļŸČJ~×__ŗŦ­¤ëöžgųú˙ũß]ŗú˙Ú×[ī˙Ĩ˙ŨũkÅG×˙˙ú×Đ˙ūß˙ōõ˙ũ˙ōõú˙˙AŊŋ×˙ũhūKŲĪM…mvūŊöŨv×˙o6í-z˙ŗÛögéũ÷îĮú÷_˙íuú˙˙ē]˙ũ}˙õūŋõú]˙ü°…üŊ;Ë×üĘö?ŋØØøßƒb˜¨ũŽāÂ˙öĩĩūĒÂIĶkí§kiX_Ö×ZpˇųŸõę홧ũw}˙tŊŽ˙˙ū›×_õ]÷ū˙¯˙÷oK˙˙ū ė'Ķũ…áúmß÷ƒbŋö+Šc‘ŖņpÁa„ž%qwļ­¯đÖŌÛLÃÛ__OÜÎŋŗ?˙īÖ˙öĖ˙˙öũ˙Íģ˙ũ×˙×]˙î˙˙_˙ēü0„Q9Ú hpœ2áSĶ „ČßNČĮģ^ū×]íîėSąˇOėl~ņĮà }…á…Û]¨k…íũ´Y ú˙_×öôŋöĶû˙o×4ģ?ŋÚūŋ؟ŲûũûßũėÍqˆˆ¸0„DZ -Â “ßÚĻFđė.˜LôČŖëwŪ›­Šö+c㭊ļ/ßđÂØX~à öũŋ_Û_´ŋ´›]=Ķ˙[õũ´Ė]úũŸŋŗ?ūĖũ=ˆˆ‹ˆˆˆ†DD0A„" Âna´p™'O[#u3ĒkÚŲöŸi⨝ƒũŠŽû`ũŠ‘Gąūņ_ėŽėWėq_°Öū?ĩūÖM…°ŋjõÚø[]s7°ŠˆŽ"""""""  ´ôM4Ķ#~×_Xi‘GĸnúۚūßÚ÷ũ§ū*Ūļ?بØĻ=Ø×ļKũ†Ŧ0Ŧcņ`„C@Á´", ÂŖqh0 É§vƒ ­­Ø^×í0ŋ /ŲŋNĐjŋiø6+do☯íV""#¸ˆˆˆˆˆˆˆˆhŸDC !hC Ą i“„ĶĐa4 ”ZĻŊÚ˙ 4ČŖūÂëÄDG`„ZZaaŒG°ŠˆˆĻ>-p¨–Úu•Ę3-zjv 1ĨgaÜíc˛ˇę˜Lė˛&™Xúëú˜õŗŗ8‘Ģ˙ämíUä¯Ļ[‹žVŋ}øÁ(í’UĻĻEDdšī˙īú~A,Ę´ĢŦGkÖ*>b˙ÕüŽĒ§GzD˛ķą*Ī/žf‚™æqĖÄ|d ašĖȐEŸ˜d8­~Ŋū×úwo´;ËüZôĶ  × „ |X dDGą‚g˜fōä9"‚.ȂL ffjț*Ē˙˙˙ú~ëČŖŅ!˙¯ĻšũĒiύCN,!„Іgā™Ö0  Ä0ˆN"ų Ö|<9šŠs(#ŽA˛¯ĘȆq"? F™™ÅO™ÆÄ˙˙˙ĮÁ6‚ ü/(°Ö‰ÃDáËļüÜ˜īN?ĩAéĮk§iá4Đ´8†>Âa3ņwįÅ=æyá™æķȂ$Ļšh0˜L aƒ ĸ¯ß˙˙úéūŠá;¤đ' ą­Aäđ•´O)+ōQ—`ĨŪĨģ…H›´MÂŅ7Ōq^ē4ĶUôϚiĒ w÷ ũ?ōķų˜Â!‘ȠО(#Ds%Í5(dĨŠ!>˙˙ĨkÖ#M´øũiuOMÕ_ Ōm&Ã/‹ôĄ žkA8eĖģÂ䮉ØL”9q„‹†‰Æ*ôūqĒa?úÖôé/AęƒX°ƒ  Ķ „øû… @ĪÅØ Â!q‚…Htr.ĖF2xđČŲŒČ" FJäķk˙˙ø˙סĩ×Uõû[ęÜ*Û[čt›ŽĶp´ƒt“Ân˛ōö¨ŧÂDŪ‰Ū]ęHwũ^ŠÚÖē¯iϜi˙§Ēziá^đ˜BÂi gXüp(@Ī ‚z4"ī.Fã8ūxgĸŋũX/ø[˙¯õë˙Ŧ¯¤žŋŌëúéūˇię4›×§„ztœ–?ܐ‚wų(éI Qxô‘xÃ%yqDíĸíÂDáũ:&î5ĶON?TŌO˙ģAÅá.Õ4ŋ§ũ† ņ‚ˇ˙û˙˙…˙Ē˙íūŋ˙Ž’ëŽú§Ąī˙Ē˙IĩĒéôŊĒ´ƒuĶÕ7Ⴀ<)xÃ'åۗÉˆ.đ¯åÆ]¤NočŒvŌ$>ô“úNūŋü0ĩāŦú˙U˙āĒöGô˙†ŋ˙ēęõ„˙îĢëû˙°Âž¸ĢÆô’z¯éÚé'ú÷ASēN“N“ĨV’A´š§aËá 7%~]…%wŊŸ˙†"ŊQö˙˙÷˙x]Pëö¯Åø%RĪ]ü^üWŨÃßõūúŌÔG­ŋ}+Ąŋņöš˙ęéŋ˙oĻéô›iíU§m×á´O5Ōáŋ˙˙˙_H/˙ß°˙˙øO¯í5¯m ˙Ѝz¯R$,W˙úÕ˙¯Mú]oĨŽŋ˙OU××Wøũw˙ÃiwËÕaŋųf?˙ūĮ'ū›K ˙×i}xKŋ˙ ûõũÃūīÁt?ãČÁ?˙úũ‡ú÷[˙˙ũû˙ūũoõĩú]oXo˙˙ú÷éüēŧēÅaųz˙bŋôJũ~ķ>‘(õ°˙ûĻãūđˇßé˙ūŸĐáõ×Ŧ_Į˙ūŋ˙ú¨-¯˙[zīēßũ˙ū˙ŌK÷ū°ß_˙Ë×Â˙ũ}ūŨwõ†ūŽ´F˙¯õ¯˙ũ}‡˙ūß˙˙˙ūŊŪ ×Û¯¯KķEĢ˙˙ë×üˇ˙õĨˇÚ÷ ŋôžßâŖA}åYËĢ'ųá?ū¨$>JõĸQ˙˙đˆãá‡˙ˇ×_˙˙×ŨĐ]Ģų<ϝØOSrį¯ėĪũ˙˙ÆŊīô]W˙ôYũ}×ū˙˙p„ī’ ē¸CüÆ(/_×ī…ōËŋ˙­†˙˙ûû_æĸ7ŋö[ ßvöÖÖ×_í?í/˙‘B5ÖĪŨšyŋėū˙ūؚķ?_ŨwĒũ˙ū˛&äQēū›îé÷˙ô´ā˙ûŦąaRę˙˙Ũ{žÆw_ŠŠØä]lT\Wūà k˙ōc îŋk!į´ˇOūBú{wųĸûßīoß˙];ēīÛ˙û˙Ō˙ū¯˙Ûī˙Ō˙˙úŋ¯×­×NĶīȃßwb˜?ö?Ã˙ė6=ļ+ĻV [mW­ƒö×°ļēõǰĩŠŽėũánÖím/ž—o˙4YŸ¯ŋ˙ī˙ņZ&8/˙˙˙A|SIqÄC “„Đaa§za27A¯ßaVõ˙éģÁūÅ_÷ÃøéŠũ†–öÛTÕĩâ¤qČ9Ģãېu{_lķŋm6Ķ˙K_nŊ{3ίí™Ē˙ŌŨ—§˙â""Јˆˆ†hDD0…Ē 4í5čŸY'øa{Hŧ5´õZû[M÷ėWą|lTT?kßūÂīik¤Ø]ĩĩģ××´Ķö˙}3nE!Ÿŋ×û˙ũũZЈˆˆˆˆŠ6"! Á†XNB.—6ÖNĶ#^ĶėŠ?wx:ŪęÚÚÛö>ØäWėS|0”}0Âņė0•ĨļéĩäÚ˙kizUō%=zõņÜDDRq`„!qh4ĶL&œ2Nƒ0­…AĻŊ„ĶûîĶûĶėWqNō-Šcƒū;aąPû°ąÛ LũX_ßū#ˆˆˆˆˆƒB"!„h&‹LĻ§Úa#~ĐdcÛĻļEí4ÛūÕ[Áėuũûģ֘0JÕĩÄDDDDDDDDDDA„-0„0BĶA…@Íj ÂŅ>°§dQôØkû˙dQüXØãHDDDDDDD]C-2ā&˜M5HšÚiσ ǰšküDq›āÁT–ŋŦDG`Á{Iuą“!bvĒ@jÁˆjĸ#ųmŧ›- †3ĄTy Âašd*5Åf'ÉķŨ|ˇ"M4ūũ4õ2‰vvŽ?tNōvŅ;÷ũšøP˜Līĸ ¤YNŊĐMĶ‹ŽŊú¯°™‘xĮdãĩļv?z÷Ļ˙Ō˙‚‚„LîšĪŧ& !#ĩXėéUzĩī˙Z…ŦžûV¤“'Ņ+ĶSĒŊ0Ļ@QŒÜŽ në˙ß˙ë¯Aŋŋá]R~Id—´āƒ?‚!ĖÎIA!?՚ˆá懐E­īīˇû˙ցBũaWĨ ūB§\ : åaTn.ĖF2x"2ˑ8ĖķT\ÉIĩ$3^DīU×ũWũ~ŋŌAuDū›i¯ü~˜CÖĶP›ëš‹ „D'g Ī.@ƒ(, gÆg›‰s!’a2vt{œ_˙˙ūŋ˙k„ūeËĮ'yw×ų("ģõX÷Ķī´íi ôĐ´!φĄ4„AĄ  "äq“Ī”„œš ĘS:ĮXë˙¯˙˙Ļ˙Iēztžž ū^9w…ŨKˇĖ?‘Ň%n\dnŅ7h›ôM܊;ĶWN4ʹ͏°Ÿ„8†y Â ü`ƒAá#ŒĐSņr„Â9Īæc5åņš#D{7 ĖČči’æŋ˜ˆlĢQŌ5ŦĶ˙úŋ˙XÚ˙Õ?Ĩi=zĶŪõM¤õĐxN‚npfđƒpƒrxåŨˆaKˇHŅ;Ō&î[ēnũ;~ĐqiĻÖ-8ĩAé§jM4Âσ0„B "áa@ÉÅŅĪņœGC؈ffŦŒyC;{˙~ôũé˙ûī_Ģë}tŨ:=>×O]6“t’ Ž› ž“i6$Jčŧzĸw’†ˆáô‰žF;L.úvéé īOãÂiéߘM4ĶĶMPi Ķ ‚ ü0@ ögB„  e3‹‘9gĮ„_ũø*_˙˙ĨÖõīë]úž:Ũ?úOÕŌONũ:NÕ=v§„ė&đËZAáåã“ļ‰Ä2ø•´NōW`‘yŌ—Yvū.Ú'D×"NLvšiá8Õ¤ãî4ôítÔ&qhh={ūŋ‚„ŋĖ"?˙ätŋ÷­Ũ{˙í˙ßũũ7˙Ö+{ĶĶíjņCí×Ŋ5Z\+H?]7 ißI ũ$˙A‚IŌpËNƒ/_Ú'tyw—ywåۄ‹ÆHáhœ8Hœ7DĮĸnĶMmSß˙˙……÷„!˙ņ×Ŧzŋčí;ëũŋũ_˙ÖûUû̝oņĻöÕëë¯ŧoŌģöūēnn“~đēmĻŌt›IģIáSÂĻč0H ô‚l0H ßôŽ]å㒊'ŗ°ŋ˙ú#xIũ˙˙ū—ũƒøØ?ô4ŋë˙Âûúôuū˙ũ'ũü%úĨũk˙ˇ˙øûĶIuŪ7ĶuÕ }=Ļ´Öé6“pžƒĢ[_˙ũŌ˙˙˙ūëbŖ˙Ûúa˙˙˙ßT˙üríũī˙¯ŋ‚Å{ûûĢ˙ŋôÚ¤*?ī^Ŋjøú˙â•íĨãũ}ëĢüųŒų1^üˆ8^°˙˙˙ëũ×éĩīũƒøã˙㯸îŋë˙ŌéMHÁ?˙Ŗ¨ŋ×ôŨúēŌē÷˙ģ×ĨĨĢ˙˙ē×_/^ōÅ>ŋōz˙ß­_ü"7˙û˙˙˙…˙¯˙˙˙ū0ŋĄāž˙ø/"ôøwû~–ßúõ˙­'ú˙īū˙ü7ø7ß˙_˙˙ËĐąoɘļūõ˙ÖŋDŖ{k˙˙˙˙úÕ¯_ũâŊXq˙˙÷]{_úēu˙ķEQM˙ŋ˙˙ū“˙ũÚ˙˙___āūËĐŊ?ŧŊ~‚äĮËIĢ˙˙˙˙éũxDq˙˙DŸ÷0úaõ˙ė?ÚV¯Ĩöuĩ˙Ũ7_ķņēŋŗ?˙w˙Kû÷_˙ß÷ÛK˙đŪĩ˙˙õĶ͝¯˙ëūŋ,˜/åë“Ķ ī˙ ũXÃ˙ü0ūĮąôĮ ŋm.ŋ†ĩíĻôßûOÍwö~)˙t¯Ōŗ?^˙3ŋÜŅßūŋ˙˙˙ū—WqZO˙ë˙˙Ĩ÷íh/×˙…ōę‹Õ˙øoí<]ûßėT}qũ{ %ö•vН mo°›kÚ[jÚ_iŲžm˙™˙÷Ũ{ë{˙ŋ˙ˇ˙˙¯ģuīī˙˙˙˙éT˙Á밙ũŽ™~Đk­i§ũ¯cö?cb Ø¨¨Øa(av×´­}ĩm?öĶÛpļ•ŽĨj[ŦÎĖëÍßŲûũ~ĪÛ~žŪ˙­ë÷]ŸŦũ÷×˙ë˙ŋū—žŨņ ƒ@Áƒ"L*wwaHuí5Uô­¯a=ĩTÅ1ėVÅ1KÆÅ]¯ %ņÚVģ§ÚL5a­…Oû_Û]ˇWŌĩũ+Kú˙ĪÖŽŽ­ŸŧĪív×Û˙ķEģŨŸīû_â""""""""uÄDD0…ĻĶL'jXáBh2OÚvš}Ǎ7ØŽøâ#$S~Å{qû˜al/Ã[]†Ũũĩ°­Ģkkļđž—Ú^ģiųŽ[?:o˙œčŨ\DDDDG`ÁˆaaPaūŨ‘GĶ]Ŋ˜O°~ũAûÅlT~Å*G¨ūFū68¨Ļ>+cn+Û]† ØZ¤÷VöŌöÕ=?øˆˆˆ‹†„A”IÛ*˜SMIūÕ0ˇÃ#á„í?ĩ[_ûNĶMm|ûĮą^Å1QQü0°Â˙ę„DDDq5!h4""!ĄÂH0ƒ,, ͰžĻƒ ’ˆiĻÕIî­­‘Gí;Ŋ4׹ą_ũqÄG#^%ˆ´!†i Âi Â 4׆IáĒßū’B""""""'Dk@ÎĒˆÚëÔDF"=\x°Ŗ˙“eqÔÎÂō¯•ÖŊSA’ˆĮeŊ=.õRe¨Ē ™ČĨ˙…¯ūš§Š*‰TDī×˙|-ü˙–áqĒ;T‰njĮ2ŠÛ˙Ė;˙ĐZ̧ųna~žŠ…;ë•ßõ˙úßô˙ŋŋ;?~vQ¸šRšYĄcS:=Iŋ˙˙˙˙ÕւOÎâ$īîA„ø gā˜A”0@ĪÆÔdv|RIųĸ0d?5ŧÃ$2 _úũū}CX×ũ˙Tœ\C „;N44Ķui Á đƒ3¤~? œygŗ<ä\Š7›‘ æfKšdBÍ'Í/üŋKûņĮ.í"päĄÉE­IģĨM5øĩN4õTÂqiÜXCL* !„A„ <5Â7Ģ9˜ ˆG—2‚Ė!æ˙ī˙˙M Ũ=7<ŧ† „‹Ā‘õu¤ę0ŊŋJŊ… ū ƒŌM“TØa"yH7čŧ›<•ÃR8ráČŨĸíč›ģĶû´ûũ4âxTáũ ĶM5BÂĻ4-ąa0™čũ ôg  0„yr'D‚3G"Ŧķ ‰ĸvK˛sß˙˙OÕ×ÚZõīîž>?˙ŊzOC]Sīí7J×NÁBŌ Ō}î˛íú.ܔ4N#ōáĸq‘ŽBDáôŸú÷úņ§pĶĩÂw§ŦZa†éC?fā™ˆ ÎG ƒ^ˇ˙ë˙˙×ũũ;~“K˙֗Tûڷ֕øõ_ZŨ=7íô“ũ5M¤ ŋŌxO'H>’'nJßčžoÕÉ]´Â„‹Ė•‘ÃyŅ7ĸnÛänäŨú&īí5MNũV.ã[˙ü˙Õ?ü~ŧ?˛<ˇā­ūŋôˇ]ūŋú×˙õ˙õߡę4õÖßôŪ==^•<&×˙U¨WN…MÔ' ž ´m&ôĄpƒAÁ–Ŧž%NÚ'm…ˡ%â¤cų(h›… ˙ŋ¯˙Úū˙ŋė?ˆßÂÁū˙ük°ë˙üo˙ūĩoTŋ÷§ëũ~žŊiũīIīīŌô—§úūžžŋĻžpēzzŌjŸáBÂtjû˙˙˙ũjŋ°˙ŅcÔ+˙ë˙aīũ?‚Ô˙Į˙ϝī÷ũû˙÷ö¯ž˙÷˙˙žß˙ĨĶąUę?ZˇXéxĶU÷ūžËĶ˙ą_¯ßøoęûŅ(†˙˙û˙˙]‡˙˙˙×û}¯˙ņÃúūīúë{¯˙¯˙ũÖë×Û˙õžŋ¤žēáŊë×˙ũ/ûåĪū üĩé†ë˙ūD€ŧ7˙˙ĸQÃ˙˙˙×Ģ_ũ˙°˙īŽ¯˙Ŋ˙K˙øãû˙ü˙ũ˙÷˙˙ī˙P­oúßö˙ccK~ŋ/N ˙öž‚đÃ˙úŋúuīØ?˙˙V˙ŋÖ˙u˙¯ë˙˙öū<ļ˙K˙¯í~ë×ē´^ŋũ_§ß˙Ŧ=˙īˇkũ~‚đ˙˙,"˙— 7]n˙˙ü7˙õũ{˙_i~˙˙õëđ˙ú đ}˙˙ß+‹ßö–ŽgÚöŧ>ēuīģW÷¯ī˙˙{ß÷ī˙pß˙˙ūëƒ˙_ŗ ˙ų7rÉ÷ũt[ēũŠũ˙ĢôJ> ˙ú#†ū˙ũaĨļ•­Ŧ4íw^BŅĢkyŠŋōEũŸļŧß_˙kؚ×˙˙ë˙ë˙×ã×ÛĒ˙˙Ãũ˙ņĮë˙˙-YuũøoūZēę˙˙öØØ8¨¨Ļ)bļV°ÂÚūØ[_ĩû ēûūžĻęm.Õ´žÕI×ũūhŊũëũí^Ŋ˙ú˙¯ūēôˇ˙˙ûôáŋúēü7˙˙ņV­ęŠú튊Ûö8¯c}Ž_°žØ]††ļļŊ­ûë ë˙ÛOīėĪ7múŋÚ÷˙f‰˙uĻû_īwũí˙˙÷˙ī˙é{‡ë˙ū­a…0ęXč4ČßĩI´Đz¯Ŧ5íU;ņü|SlVÆÅjĮØ_ũí~Â]…ˇŌķŦē˙ĨÚÚg]ŋļĖ˙˙KĢüK˙íŅo˙÷˙ŋũŊ_ôD,qˆƒQ9Ã0™vžš§ “ÚkiŨ‘Ŋ¯}§i­ßbŋdoدcØúm[ k &ÂÜ?ÕÕ?û]ím/Û˙ų˙ÜũgåoõÔį˙æ{™ú˙ī˙3pąņqD!ÁiĻ' σ'  Ķ'ĶXdžÂ|2OvŋëkkâŖŠŠbŽ+Ša¯ėVí…ĩū×~ļC§ö—˙Úˇ×öļŠŽy˙wkūnĢī˙ø?øˆˆˆˆˆˆˆˆˆˆƒ"B!„č0Ŋ…ĩNÖęoÅ~ũąQ_ąMU_ãūE~ĮWėm…†ˇūØ[[ ÷ÚX_˙íĘ>ˆˆˆˆˆ‰B`‡ 27MB <ÎļF: ×[ Ú¯Ļŋ­7ÚũũĻļũãb ø?b˜ØŊcŽ?˙‡ŨŒE!QË0Dt"!„!‚ ! ˆh¨m4á„ĶNī.zÃ ļž„Õ?ČŖŨ§ÛöšũĒ˙ŋ°ąĄœDքE„"@Áˆƒ*ĸô ŨĒi„ “Ļœ53„ČĮĩÕz'˜ˆi/ÄDDDqD0„DDF¸‚ú¤"—Kdc˙×L0”D5ąË>ˆĩDĖZ˛“FĄD•Ė€ƒkĻIcŋŠŲ"§ü‚~kIęd ŦÆŅäyKx.ī ŌįjÖM4ȜuŽęÍQÎÆÜ5˙ÁÖéŌŌ˙ģÔėÖœD™ÚŧæD2;3_˙_áRũg/ĶÕm4Č93ĩHĨÄĶú˙‹ūŋãūƒ˙×īOũ÷˙˙čŸ}ûūŋåȜ‚eːDb'#aŠüÅūŋ˙Ķ{â#ū-q ?&âD-@ÂĖķ8ŧO˜Æ ‹Ä8Ÿ>@‘†ud9s ee˙õõ˙ûOīûÕSO´ø°…é á„ā@@Â!^a38ģ)Æ‹ærÃcķ2!ŸeĖ Íisw{˙¯ų(ĸqŠ+hģ~‹°¤otIÛßŋé]ĶĶâĐjĄ4ôÖßA„8´ø‡gâđD+‹%Ë7ŒČD;Į0ČnØ˙øO °ÁVmzxNi † KõÉ[›ųvÚDáČŨĸCē‘GŦiĻ…j¸Ml'¯ÃCĶ0˜!ÜC„ fædgš Ī7ˆŅ"‚1GŗPeFfgVC2˛ĖG\ë~­_§˙^žŸ¯īëWuK ÉĶĶ ƒ`ÁArņ—Į0ŋ—tIōQ—îŋXĶA¯wH4ז?; ڄа†šgX&gÄčä0@ô 0“˙ßõ÷Ŋ^ˇ×úôõwíí7 §éŌá%ĩĶ_¤Ü'ĻŌx/Ô2üžQ8—tNōn˜rQEÃN)˙sOM ;ûN4í;Õœiχ˙úÕŪŋ˙öũēë_Ēņ÷§ëŪ˙H=tõzī]„“tč Ü:ON‹ĮûŽ‹Ī.Ü)päĸ‹°š(ĸNé|”4NˇhîÔ*˙ŋ˙˙¯˙˙ũĩ[Â˙˙ßCÖ˙OūˇZĶũ¤úã{ˇWˇCAõ˙§ŌŌA¸OOĶpž&ééøIO%mˇ/%˙ũūŋ˙úē_˙QāŋŨzô žžˇ˙ûŪŊUéaƒ­/īŦēKí~´›¤Ž›iúÚa7 …× ˙˙ôļ˙˙˙˙íĶū×ûÁøëŽū˙ūēđž˙ĩīí{믯~ŋ­ë…B=jØļ“˙¯ûęKũ˙û˙×__˙¯ÂÖ˙¯ņ×Ģ˙ü`ž˙‡˙ū jë˙˙ũ¯ßūŋūdŸëã˙_ũ×ö;ë•˙˙ũŊ˙˙˙tX˙˙ë Xoãa׎õ…_ã˙ū××Íû˙ ˙÷˙î˙˙õũu.­˙rzt ]~ŋ˙Žŋ˙Â#A˙aīŋøWú˙_ããÜ/L/Æ ˙õ˙}×˙č'ũ˙˙__ũË×ß/]÷˙˙ÁūũŽvŋū˙˙ø_a…ü/˙žˇUŠz˙ūž?Ņ1˙ŪžŋK˙Ž˙øã˙ī—Ēûoæũč÷˙ %˙ūˆãíĸ7ūˆĮ˙üÎūöÖũvž˙ĐĶ˙˙û{fjŋũ˙ūëŌü—ĢđŨ­ûÂūšĒņ^ōÂQ=j~  _Ës¸$ ˙û +ũĨ§!˙í¯~ĩüˆ¯gī_ĩŋĖ˙Oßŋ˙z˙ŋūõ˙˙Ō˙˙¯_¯Ãt˙ˆ ŋ˙~ĮÃūK°“j˙Č!ukëúūÚúØU×ķī_lũ˙ūŋ_M˙oõīõëßĨ˙˙_ēK˙˙đÔ´÷ō.ŖãŽŋaģąû /áŽÚÚŋũĢk^ž˙íŽŲúÕ´ĖVŋ™Ä…ũ¯˙ŋ˙/_˙˙Ģ˙õ˙Úkö™đ‰C÷jĢ˙ö¤P˙"ŋcØĻ?ũŠcö[UßßļļÖÛ_mSVŌŦÃë×ŋlũđ˙Ėī3­-w'_ūgëņQ4" a1ƒYā ÉÂ˙Dųí;#†ŸÚÚßiū?ø?cãcb¸¯a…ž×öÂö—kōûļ´Ã[[ éŽÛģVÔÅŦDDGĐ0M‹A„ĶM0ši’…M?°™'îũī§Úwßâĸ˜¯˙‹v=ØĮv8ūö_°ļÕ[¨ˆˆˆˆˆˆˆˆˆ0B"!‚ƒM;$ũ„ÉD2CđÂöĩū×í;_ĩLU7ņQûÆĮxjēâ"""" ˆˆ†ˆ4M=4×A‘ÚĻAĮøal*do­ßÚŨŦQÚĀØj÷DCA…4 œiσ%2p¸i( IFąDDDDDDa…AĒ˙ˆ`ƒ „°Â\DUŠôū`ĒM…ˆÆM„׏åš$w ynGÃ+̊Híc"~ÖÎô—TĖ•Ëįöw]äĨYÚxœ9ü?˙Iį"Yđá–âAČHĨGc3ątSĸ”ĒûãëßwĶM3r īHĒdR$ŋ_˙ŊõåørũŪT¯ŋ%_§ĻvQŧ“2•Ę2äPJThÍLüŸŋ˙˙|7/˜˙ßzåE’Û žšô,&ˆAá?ÂÁP2™ÅČ fŧÜ|‰C2•g˜ŗ˙øo|7˙˙˙ĩwŠ‹Ú éĄh?4-4„ &?4đƒˆ3Ų0D+ ôaŸžgw—" ˆÄ`ˆš^ha˙ ÎąķŌ5}˙ũ˙[Įūžâ•ëIēîŠč~ēŽ¸MÚ×ėOÂŅ<ũ č'EķD¯6 $]š+ú§ÚÜũ§m¯h}Ē|^ĄxC‹AĄgãđ@čđƒN,&~Aá0@ķĐD#ČäP@ˆH?fōIÃ(ĖĖčōæ’{˜ĩ׎¯õ×j?ūˇ{JÕ?Ŋ ˙MõĶú‹TëŋĶj×ģAë ŗõEķž‘váIÒ;à ‘Žîë˙Ķî5]+ ߥk§ØN-8´ĶÕbNĶL* ËÁ0ƒ<ôx@Âq ôO˙Ü˙žŋ˙Ēũ-|_×ũ/˙žšĻëĮüzwūÁ*ŌxXzđ`¤ō‚y;ēWÁn¨Á—Äķ ^?—aI^]š+~ĢĸoäQ÷ĸní5˙OãMãM=Pzwz˙u˙ĐåŨī‡eŌ‚Ō_Ũá˙÷ëĨw˙˙˙¸Ĩˇĩ¯ū˙ēon˙¯ĒnĒá$ū“×O_ËĖú ƒ7m™<¤ōW—tNې`¤­Ë†ÂéR'‰?I~‰Žé;˙ø^ŋ÷ë˙āâ,/˙ē‚˙šr˙ū˙ëļēák˙¯×Ūĩ˙ŊtžģŌ˙Ž˙ļœ^Ÿ÷IôžŊēēzt›§Ōj´ƒ† „“a‚… ¸Më>‚>%˙ū‰_ŋ˙×˙Øx_˙ē ũE˙˙͝īÃÁū ŋĨž9 âŋv?˙ūŊ/ë]jũ'§÷˙ūšĢôĢK­+ú¯§z~ąéļļģ_ëÂ˙ųb–äôÉV/ü7H”k˙ôF?˙ūŋaũ˙ûū ˙Ĩ.ĢßĮUrcūģ˙ëu˙ëo˙Â˙˙ũū•ÖŖôŪ:×˙ÖßCĢZ^ŋTũôŋũ˙¸B?ōÁšz…ßūę?˙ũū÷KõÃũŋ×˙Ũ;˙ö?Úöŋú˙˙û˙˙Õ}ī˙īâŋ˙ëč.:_˙Ûûī˙×ū˙˙Ãõ˙ũŌ ˙™˙ū˙ü7ū˙ũú˙˙˙×ũ˙ũuáwôēøũc˙Đûū?¨0_¨á˙˙kūē˙˙w˙ũôŊŋę?ū××ü?õ˙‡˙K÷˙ūž]ä‡~ũ˙ŊWë˙_úôˆĮ˙˙˙˙ũu˙ū‡á{aņúũkm{]ŋėĪ7íæ{g›š/¯ÛúĖ×û×˙û˙ˇėžūŋūŊXâąčH˙’ˇ¯×û|˛˙Øũ}×ëŪŋīû˙˙ ŋ˙īū˙ Ú^Úwí§Õ„ūöĪÆī?kéūĩ¯˙˙˙ûēũ˙×ëëßŋ÷[õūžŋ×˙× ŋ_ßå‰õ—¯ú“Ķ$;ũ/ëŅ+øo˙í~Å6ĮļØ`•ü4­a¯ũ­ĢkkļŋkÚëļ—í¯œ˙ėũ›_ŋ˙Žŋôõ˙˙˙˙ë˙õĒ ē˙ßë˙˙úē˙fIöb~ÉģųuëíAŪÅ|~ėlSđ{l|0ŋ .ÂëˇūÚáSĢÚ×K¤ëI|/šæũ-ęŧĶú÷ũ´´Ŋ/c˙õųzu˙īģÛ÷˙÷éŋ˙˙KēÃ}ąÚi§ “§iöU´Ķ^ŪĶM>Å|SąąČėWŦlpÂūà 0׸ka?†ŋÚ§„>×{^.AßđÂļąúũ6~˙o˙­nŋ_˙ßķ?üÍoũ˙ũ~Û÷˙ÄDDD!aˆaa4ôĶM™ũ„ũTˆ;í˙}Š‘_ÅE{Čā_ÜWö}†Ŋ{ÔTuØ%ūŋúOȔŪēēˇëįã—ö~öīėĪá÷ך/īõĖũ˙ūž""""" "!ĄŖÃ  É:h0ļœ2CĻF=§č4éĒíūēö?cëûØ_û m}†ļA3M…ĩ°ēļģjŸöŋa{°›k˙ļ˙3ŋŨ>ΙŪÚÔDGa4Đė&M%vJî× ÚϘ]{ôÕuī"ŋâŖo㊍Ž>>ũÛKØiC oũ¯í…û iz~ÚöŸŌĐaˆƒ-4ė‹KģLj āŸĻŸđĶĻûĶímp~׹]1LWr+ö*Fū)ƒâØkŊ„¸a~KLjˆˆˆˆˆˆˆˆˆ0š™8HšéÃ'‡L“Ã$č2OÃNõĩĶO´ÖīģWáĢŨŠíb¸8ڂJ"")6"#ˆˆˆˆƒM†D0„C0„]Ē &šØO†IíSĩMmŗHüq ˆ0„!hCV’m/‹ =.-t† ąųn^%Ėî¸ėKëĻv7Å/yķ°ž%ą ŽÍr&ž>žD¤žĶ; |׎DO˙˙ É-ŲČ*Ķũ3ŗXėŌ*‘ŽęÉ+:ä‘y‡˙õŽ­ZūV>īL- ÎÖâLŽ˙"™Ö"yŧƒŽŒ":ëúū?í~šŲ{֕sĻwĒÕ4õ´"!—ŽŌŠ\Ŧƒ!Ũd†C2/d?˙˙ü˙ū ­4ÖŋŋøM4!í„ Â ĪÁ„āĘA.Dã>ŠBAæŋ˙˙˙ôēø/ûk;Rē UĶM4ôÔ Â 'šgãō â `ˆR æķqävGB9ž * œĢ4ÉpffjY†Hˇ˙˙˙˙ũ|iÉ3ņ͙+ˍhœQ8hœ4MŪ‰ģŧ'vŠöŸøAĄaS‹Bj´ø'Âr'ĖFâã'‚!"\‰ČĶ9›‚dætiæ/ûŋë˙˙ģk]=:A÷„ôÕ:O œ2üģhŧĸī%n^7]w‘Ŋi­ÅώjÖĐvŸCâĐiĻ0ƒ2\ŗqvbķã$ƒË™AŖO0Ę čķ7’2´ŋ˙úxŨi}ãB“tûMôûĐj´¯úpË⛄Øe×ô^9+%m‡%nJ4‰ÃtNr7ĸozîĩ ņé§q„=A„0ƒ‹3¤~?ÂOŅh0á ™ÅŲ¨dãŗŅŦ7˜Ž#B4ĖCĐ325"`Đdį˜jTFĻgfO˙˙ũ×îŧqõzi÷úQë­Ūé^<'Žh*pÁSÁBá˙“Ę/`¤päãÂŅ8ĸáԌvąūŋi÷„ūÖ ==Š„PƒĩL&hXAá0ƒAŸČ@ÂxA f"ė3đA‚ Á—#ҏš~`Ę ĢF†t“#QւũzŊk÷ĶÚ{õ‹ū´ûZˇOļŌOĶuO]ũZNÔ'A7Đ3zm' ŋōķ ôNÚ'’ŧ¸vĢ-ßkČŨÉŊ~‰ģ¤NŠé'Į§hzz¨O ÅŦiÄpÂq|XCø°ƒ5A0ƒ ôa„ Än.Á8/˙Ãaö¸/÷˙Ö˙ Úõ˙uÕ^ŊU¯_í_õ¤ôṲ̂đ¯Zm ė*´úH83iøN‚z ôIáKĮ/5ĸō(\ģÉExiģŨIƤŨČŖŨQ8rí?ĩûOTĶŽũSN׍ƒƒ˙ĐØ6ö˙đ_˙˙úß˙˙Vëú˙Ļúû_kú­ëŽĢIûÕŊú¯m/Hzn:MZM;P´›Ļá`Šģôƒ7„pÁA$ܞy<ËĮ%o’ļ‰=ų(ĸpãD‡ĸqĒXŅ!Ú&î‰Gũ0à :ũ}‡ëķéƒ÷ ŊŌ˙Į˙H|@ēû˙÷˙ž˙Ĩ÷ęéwŋ×ëũ{׏ސß˙^ũnģWûWĩOTôÚ]}pƒü'§‚„„Ü Ëė7Ač/˙ ˇ„Jūaŋũuaū´X˙˙˙×úđ¯˙č}pÖq˙õZ÷ũ/Ú¯÷kēˇ^Ū¯Jú_Z_ĨęߨúB—ĨŊ?ûtũi>ŊĶŌW];õĐë÷Ņ9°āßũ|°pßũīAŋTJ˙ë˙˙˙˙…ë÷_˙ã˙˙˙ū×úø0°dqxā°ãëÛ¯˙ī ˙õí˙õ÷Ŋku¸Ŋ}SkK˙Ŧ6¯A~˙ŪŖũ÷§˙ųzy• ¯´N÷˙i˙˙˙˙˙¯0îŖŨWãCØĐ,<ø˙úī _ū—˙˙˙˙˙ü-z^ßūũŨõ÷w÷¨đß˙Į˙õ˙Áōõú^žŦÉéú˙˙Ūŋū××åŽ˙ũ‡ū‡az˙˙}T/ū˙˙Į˙ÕĮŲP_Úž˙ú×÷ŲûūŨ˙˙ūŋ˙ûũw˙ëŨ/ëųĩ.¯úúËĶ×Čtú×īëëÃĒ#ˆač”ũ}w–?Š?ú˙˙˙˙ŋõ¤# ū†ÁđžŪļbÍÛúúųžsÍ_ö¯ŋú˙u˙˙˙ú__ ŋ˙˙˙f'ßf¯Ķ˙/BõƒđX7&í˙! /˙úē@žŋ_˙˙˙˙˙ ^ģĮöĶ[VŌĩõÛ[T×õĻKūģU¯ųŸŨĒ؟ŋ˙ķ~˙ŋ˙˙˙ū8¯c÷Û˙KŊË×ŋēß/ŋ˙_ųz˙­Ņ+ūôŋąĶąQÅ1[Ã†ļ—°Ōû¯{[ŨŋöĶūģOŗ÷ú˙Á˙™˙ųĸũŋ˙˙˙ŋ˙đ˙õˇW_˙˙ņŊūû˙×ú˙û2ŧڅ˙ËėŒ{īîĶĩėĮėWąÁüwė0—đÂõÛK°ŋļũd8Úæs§ūŋퟛīėŅmf‹ëŪūŨ_˙_˙˙Ŋõ˙˙¯˙˙ī×˙¯˙nB-\-Ã0˜Ma’ŽÂi§Ú­Ļũ¸=âŋbŸØö+ę:ũ‡~ØKöXk~ß˙}¯íĻÖÚ{_Ųû3ķßęséßũŗ?Ũ}*¯ėũ˙úW˙˙ũũ̇ˆˆˆˆ‰ÕˆhA„B,'i¯Ų§jš­ÚúÚÚũßŪāúbž)О:ø˙Ø`­…ū×í}ūÕ°žšö—aSîõ˙_ŋo÷]×ŋ×ûķ?˙Õ_ūõũū"""""""ˆ†Z™Â Âh5û%ũwöē°ĶQ~˙ėS#~ÅnÅC˙bĸļ %ąėv•7ė0ŋkÚNöízö×ũ&Ķ˙ÛK1~ŲûĖī˙ŗ<įÄDqˆ†]ϚŦ2NŋÚdcũÚú‡U[ĩąģ^ĮīüWąČļ:ãƒbŋâŋ†°Â_ũ¯Ø]°ļũĩM}b""""""" a ĩA„՝ŨöjšļļFöō(˙Ã^ī]=ĩū×ņLWûą×ûÅGÃ^8a/xˆˆˆˆˆˆˆƒ ÂÁ‚hDBĶM4íN†4ČŪí>î×í?ū˙ûXiž ö˜¯j"؈ˆˆˆˆˆˆˆ‰ĸDHŒ0BĶĩA—u¯i­ É:ÚđĐkąXˆˆˆˆŽ""" ˆ†„C]§Ą†ązGū[õ;ø’ŽQzũŌøÂ-"Üė]…¯Õ•8Õ&n;5KÆãŧŽĘsˇgz~ū˙+ _ĶRŽÎÄG}š2Mo_ŋMkĘU[SWޘTÎįĻK( g…#—2‚:ĐÉs!ŗ}“™žąŪ īøKŅ$ˆËķ­ęo&?σˆh3áĪ‚@ üa„)8Ėķw߯˙é|ã _öŋMpŨūž ĶAĻũ˙˙˙¯õø0Hž9vä¯.Ú%y+ō8h¸Z#Å*iĮ˙˙˙˙˙ūũú§IĒ´ž›ĻøZN~ áKĮ.čáaieːyĨ’öSæftiēe“ŪAë÷˙÷õ˙ĢĄŽ›§ūē}&ę'a< ƒˆa~?a‚¸Ü0ƒD(ōņ<`Ž3Ųž~„vG A„BAāž#AĪædTA„ČäPh2ŒŅšŽ˙˙ūŊ˙÷Oū˙Đū7§§øC^4ĶûJĶđ§ŦC éĒ =Bašqa1ø Â!b7g†P<0åȜŒŅōvjĢŧÁ”Ūũ_û˙ôž•!ę]äíĸņūĢŌ' ŋ¤Nč“ŋßOSÖiŪŠÅ­øTO´âĐiš@†3áÔ"`<&Ø˙˙˙Ū ‚ôÕt˙Éڗž ' žē† ëÂođËâW—v 'mˇ¤‹ŧģm<ōáÔhœ9Ū¸ĨOûOÕtŧi˙`˙˙˙×ú ZƝoôm']&éßēöũ'´×…i6ÕBzôˇIÃ2ø'Ià ¸M†XĀ\$^9yÃ0Du%NĒĸq‘ŧ]Š´M˙Ø˙˙Ú˙…Â˙Ķ˙ûŊzŽūô˙ŋ×éoCi>• OÕZMô¯_õ]>Âha=?ËÍá6dÁBz ˙ũ˙ûÚ_ōQŅûõŋūžŋ÷]Ģëõ¯˙˙ú§¯Ž•ŧ~Ŋ'n’tēúĢKū ˙_˙ą_čhÃ˙˙×øõ[×˙ô˙˙ ^*ęūēßũũkīú˙÷§˙¯oøo˙˙ôŋŌôē`˙˙¯˙˙§ī˙×øüŽ˙Á‚˙˙÷˙Ĩnŋß˙˙×÷_ëųc…˙ũvZ˙úמÚ˙˙s>ŋß ė˙č}/ūül?ū;Ē˙˙˙ˇ×˙Ĩ¯éÚ]yŸ^ûß˙˙˙˙ũŨ~ŋôF˙a˙˙˙˙Ō°˙Ēë˙ü{´“ūŌž˙äAŸí[ŋÁ˙˙˙ųz}ë˙×ãŋ–c žHv×˙˙˙ũŋ˙z˙ūũ{k *Û[ XKöCëm/[[ ™ļ˙˙ŋūŋ˙øë˙Đ_X7˙ōĀŋ˙ü™w˙×˙×˙āØĻ*ø¨ãū .ÆÚQ˙úKū˙Ūŋõū×˙õŨ6˙ß˙˙Ü7˙Ë­Ģ˙˙ėÍÂÛiëjĄWŪÅ|o˙ˇŋũĢūg;ÖÚũÖõ˙˙īũû×úû˙ûūũ˙ũ Â 'h5-–:v´_Ũ­‘G°™–`Û˙­v×ũĖæ×ß˙×īÛ?~šˇõ˙š/ŋ˙÷˙ۊūŋ˙ˆˆˆãˆˆĐq ! ƒA„ĶUi{ka{VÂü0ļļēé{k×úū­¯›jÚ÷öŸëūû™į?˙Ík˙ßüDDDXũŠb˜×b˜ĢTiØūUūÃ[ė-Ĩˇ}¯ûjģkũũ§jaũûa_[_ĪßæwõkÚ}÷Új/}§Ø§vFū*cbŊŠb¸?bŸŠö˙†”?˙íiŊÖŊ?Økø5 *iĻN-2O “ũϚũ¯kũÚöEûnÖßĩí|ąÅė{í÷ņ_Š`‚hqDB-†´ĶL&ša4×´×ĩîūköūÚø=ƒöŽĐhDR`ˆD0B-8‹iĻĢà ™'´ī×´ˆ†"""""""8ˆ2Š 8hD(„”Dq*Ih°’¨×‚˙+šDŗ;×ę™ŒrhšëÎ}Ļd€¤˙§ˆ˛ŠäOƒŗ#،­/˙ú÷zj™ĻBŗē?˙ũë/ĩúڝ„ej;Ō; !RŠ…ūŋ_č6;ūŋÁÚenëī˙x­đŋ$”<Ũįž\“ĖÆH"Afa’ 5õÕ÷ôŋY!ßú­­ča4 ̈h3ŒŌ0ˆN"„—"A Ė2AĻT˙˙˙áŋĮ /Ēi§uØOH'§iÄ0ƒ@ÍQøūčŸķqžo(ĖG2ã(#D*#¯˙˙ļ˙„=X2w—tN2Q‘Ŋvũč;žĶõTõģ] a2?L x@Â"ų ÃBDÉNa&@˘ŋ˙ÛKôzt´›„› '„÷ĸō~O2PŅ8ŧ”Q8č›ģôŋũS]šię˜A„Ļ}ž‚ ôi@ō9H51”#Qf⁛FãähŒÂ',š” ķ čΏ˙û_¤ôßã_VĶëˇĶÂta—ápœ2Ä;č6ūû^JÜģ Ņ7ĸnÕzĮϟ~ŸĻˆh44Ķ4ÕS B§ƒ Ä0ƒ3<ÃČã(ü\‚!+šĄf ˆ—#Di›E wúôß˙ž–õt˙Ķĩū´úĮũté=?ĐxA´Nč&ŅxáTŲ—m_P‰Ãĩ“w&īM]$õãN-;  ôĶB-8‡öqkqiĒjQ_ũūëę—¯÷îŸņ\{ĒÕׯqū…zzv›ĢVŠß^ƒ} ƒ ƒÉ[Eåĸv⚤Nܔ]ĸnänŅ8h›äc†‰ģNGOũ;kĩīú×õĄ°˙ė˙×ū˙]î•Öūëúũ}éև¯ŋé­üZá7MĶßO0ĄBá0Ũ==„ËĮ äíËŧ•ļ Ņ;rQ’w˙´~žö˙Ö?ũōqÁnĨã÷˙đģÚZø¯XũŪ>¸ß̤î´ŨtīUĶÂÚzm[KŽ&ëkéáa—ĒŪ¸`Ģ˙û˙ ˙˙ūĩÁ~˙˙ŧáÚAkl/ގZī_ôŊt?ēžãõמôÚõū“ĶŊ7ī]úęn˙¤GĨ˙đŋ3Ô+ûkר_aĮø-pÁwŧö/ö“ß˙…˙ũo×K˙¯˙īúū×˙˙,#˙áUĢ,kú×č•÷úDqĩ˙zũč"(˙aŌ^Ø0ŋ0ôma„ģ˙zčøau4˙˙˙˙Z˙˙_ûí\=h/Ē˙å/A|qÁ}o˙ß *øa˙ĸQíĩũõöO˙ôĢõ ü~‡ŧqūņ˙˙˙ô˙˙˙˙ū˙˙ú÷Ōß_ízâĄ~^ŋA~Dîļēĸwz 4J?˙û…˙Ü+˙˙¯˙˙ĩ˙û}˙˙ąû¯Ŋũ}5\oī×ô—āß~‚ü6‚}ø¤x6‚˙ũŌ˙Ņ+˙ę‰\0˙˙˙˙˙ß˙ļK?ŋ˙Oŗ˙}ՙ­u_ū—ՏŊ8_īũ˙‡ū+¯Pč/˙ī×ø_ōÂxX—Ąz˙‘¸_˙˙ũõūí[VĻŋõ…wOÖ×O÷˙××˙ņũķ5_M¤ŋŽÅ=}ąßú_ūéaŊõ‚˙×˙ę˙đlqQLWļG]ąĶļIĢ °ŋá\üëĢ]r*ēųĪlüÚč=÷w˙˙ë_˙¯˙ũ˙˙úũ/×õ˙ģAÚøŋøāب¨īãmÚĢŠ†ūCƒa7TÖ×VÖ×ÎUĒū´gzëjß_˙˙ë_˙˙˙­˙˙lWÅ f¸a0ƒN×Ķ#{†ĶM0~đuŋÔė8¨Ø0“ +4ŖûVÂŊUĢßkjŪëļ—ööĪÛڜûĻĪ͙˙{gīôēūūŋˆˆˆˆ†„A„"pž 'kdŖû#TīúmėlVÅ?ĮûaXĢJÂV¯kũ¯öŋ…Oĩĩm~Ō˙Ī<$Ú˙ik^yÄDDDX!a†X˛&„áSOĸ}dí27°š Œ{LŠ?ÃO´îėUÅ1ąėWėąûŠc†ė+ /üvŋv­…~øˆŠB"ĸ#6"UĄ #T" Áģ2qkĻJ4Ķ#}0žšũžļÜtĶņQ^ČßLWÁÅGö§˙ÄDDDDDDT@—ƒ.ĶMS% }ĒÃ$đÂ™Ķ Ļš‡MÂkîøžJץasV"!‚ &šzd„[Ėá2OŦ?Žüpa$”DDDDDDDDGaĻ(%¨áPh)¸Ōˆƒ-ēZH˛Ž,*â5ųnUĸũI”vDwŸō+ëguGz˙Žå*]lŽb"˙küˆ×S˛¨•Eŧfŧ•/ū+č•ģ#^šdjLäLâŋFŧ­/˙ŋ_˙~rÕWÕ3"ჴ´Sōšls4fŧÎ˙˙˙ũßķŦEŦõvwEϙ۴!„ø`ƒŗ™.F˜DA’!ĖŠ-˙˙ņ˙ŋ­?=gyõN-;Ķ‹Sí<ķ7AžĮã¸e/B<šŒyĄ"5_˙˙˙ø˙˗~ú' w#q,}éßũE§ĒŦCCâĶ! Ļãö`ƒ a.Dã&Ä|f™r8E@ŲҚŦÄu˙ō¸'õ˙÷øúÔ đ˜O'}ŽNßĩ…‘Ŋ÷^žžŋĒh=bĐhiĄ &`ƒ3ė đƒ›‹‘H@ˆO$:W0Čl­2s3eĖÁ3âÅ83f\Ę ß˙õū˙ēēiéŋéü3Ĩ ¸Aīų<ĸđ& G\8ĨôMܡ īiĒqiØN., ø†ƒ°ƒ<ķD$azéá>˙O4"yĄŧŅé’HȄg§˙§ĢĻú}˙괛uúŊڅ¤đŋ ÚA¨AÁ‚ ž%”N蝄‰Û“ÂWDáĸáˇ#}Ũié§ĨÚ{éÚ¯§ŨĶđ˜B„Bđ`ˆ^gÅøši˜dŒüg˜Â—2 Ž–hDčÁ2AŲ!“J-/ë˙ëuéú˙WͤÚOét)=uĶp¸OUͤƒÂnNčŧōxŅy Ÿ—tNŪ—%MßĨ۟˙Iū˜Tü'„EńjēŨła &…„A‚!p38ģu‰đƒ4Ė2ADæA‘ }A˙˙øëIŋú˙˙Ĩú~¯ëKÜoĻéŋĢŽžžēvŠēõ žN‚ˇ_É_ūMŸ´2áū‰Ã—a"púDŊŨņÚk÷aS==P}Ē L Ɗh0š Åđ_÷ãß˙ūîģ˙ũ˙ûĩīÖ˙×HGúÕī|qéúÚžũ{é˙ë|0I•útš„ø0Pƒa—åæO ^O.Ü/ö”QväŪ‰Ã’‚8hœ6ĨÍŽúé§ôš§ûĨ˙õī˙˙Uë÷î6ŋA‘õoŋ˙đ´ūú˙÷ÕūŖĨ֗ļŋĨ˙Ū×Xū“}´ũ$ûOPēoz~°Â§H::<&žœ0I<'ũŽJÚ/(ŧ0B‰Å\:ė0¨˙˙˙î˙ycŋû¯˙øŽ˙ã|øō M˙˙‡…ã˙~+ŋ_ėuūą˙ņēŪ´›ŽūĒęūŽŠŌnąķk]tđŸaB“iƒâO˙ėą˙_˙_Ú¯˙û_˙Đ/ũ×ã÷ŧ/ũw˙÷ä.ö˙ũÂ˙zũ˙ÖĢ˙é>ũuz]JŨxīøĶĐūĢ˙úëųq˙ē˙دä āˆëūƒ˙Úĸ7ëú˙­{…˙ãÚä‡ëÛá˙‚ũx/ûũ_˙Ģú˙˙ũīūúßûßŅn Ŋ{×ū˙ãcūų`wųa˙ōą ]ũh˙˙Íũ˙õÔyą}ũŋ`˙[P^˙˙Đ÷ë˙˙˙CäGÔ9u×ūũ¯ū‡_¯û˙Ļũ÷˙K˙˙˙õIuōĀÚ ßŲzü7Á|˜÷˙ũõöũŋū‘úü/×˙0ī˙ôŋ˙ãØ}ņûŋaŰo›yõūŌÜĪę˙ūŌĒūaŋúûŋ_ö•ú_˙zƒz]͝Ë4ĩīúđü7ũ0 _˙%ŋû_˙÷˙ūŊ‡ôžÁīė pžCû_ģûLÛĩ×Û˙˙Đæ‰õũĩ˙Ņz¯˙˙ũúwīúūũäĮ"ų1Áŋå§—˙ _˙'­ë_˙˙_¯Ãö˙ØtØqũEpÂ]­…ŋöŌwũŠëļž˙gãŸ˙íŸŊÍgī˙˙}WĻ˙ŋūÃīũį÷ũęŋũ/ũŪžŋ˙ū]njāũĢ/^ ˙†äÜöƒĶũŠc‘S˙Žŋāߨa{ °Õ­Ĩũk!f×öĶ×_÷3ęŌ ×ū~÷˙úw˙ûOÂm˙ĸā_×ŋ˙ŋŋáŊęŧ7¯ƒt" øŅdŖüņ¸Nû~×_܍öÅqņąĮ߰°lØVŌl/ũ§Ū^¡īôŲûûīë{ė.įU¯ŲŸC˙×˙˙ūëîŋõũûßīŋč8ˆˆˆ‹’{'i÷Ú 'ßtIŪôÖûM5°}ąWūÅG~ÅqM­ļ×ŋļÖA?îĮ˙ îA Vé×í§"Ŋ}~“IĖ˙¯˙uŋû3üŅoĮûīˇõƄDDDDDDP"yÅ ÂĻN0Ŋ鄛"úi§˙kâ ØØ­äqâŋ˙kû†ŋÚČ'žÚöîÖĶÚžę×˙´í´ō7tæU=~æŠŋâ""" Á†„C \á„ĐĶA„L”^ŊŽiļF=¯úkúw˙ö¸6)ũŠmƒbŽ?¨á„ŋîļ[VKöŌít×ûOĶíN?:ŨĻrūÁ—â"“ˆˆˆˆˆˆƒf°˜M0š &éÃO쏭öÛ[ģI˛(īmĻ ˙a1˙ÁûÅ1_ąÁą[Č/; %đÖŌūՆÕûVQÄDDDDDDDDDDLŅNĄĻšĒ $\ė*ö°É?~ƒUMmîĶĩûMž×|WąAähÅHãj˜Û\DDDDRlDC(2•„""3@A‚hE„u!iĻ5ô­Ēû 5_+‚1aE~"8ˆˆˆˆˆˆˆˆa†0ą 4A§¨†ŸnąhDDF!…Á‚ëbē†žS)Ņ DGüļˡČÕ(íUßđ§a”‘Ų`Bė¨C˙‡Ä4ĘÄv•üP+˙ŗ!8„ LåûÎԄČ%šËÃLŽW’qØČåúĻö`.7đō)ßäÚqˊĮ\Ŧ÷˙¯—Īŗ"vu˛)y‘BīML‹bg‘8ĖČ̕Ưt˛42'ží˙˙ úÚūú˙z…„ đC3\rÖ'3Ė㑈gÆ{(Ėȝ˙'gfĢûũ˙˙˙Ė„ëõ^†ŠņÚ§~´íB 4üÜgáAŠg D_1yĐyüЂdAžd7’Åũ˙¯ūŋ˙ÁAQxŅ8ɏšü”7¤MßÅa;Ķ]<&‹OĶĶA f#Â `ˆ^"ƒ"ôšŠg˜"3q™'˙û˙ī˙ũVžĄúAū0RņēĸwK˙îÕtô“ø´ôĶ‹N, Ķ ?Æā™8_7™ųņB!4Ī2ĻHå%“âÃ,ōEŽo:5*34GYGë˙˙ÖŌŊ]ô˙ Ģꛅ¯čŧhŧÉŨˇčģzĸîü”&;Ņ7h˜ũ;N4ū,/­éƚh4É A„D'( „D!pÁgŦ2Čģ>2 ‰4F™ô`Đ3C5fŒ¨‰†JW”/ũĶũ=õē­˙‹Ū—Q_ĶĶtôÛôũSa›đ˜'A_„Ú<•´Nܞ9w„‰Ãų(_Ŧ„éņiĒh|iņé„ÂaƒNĶA„ ü gâæf¸Ã>.∤‘ÆP)@ķų2t`ˆ3—OÖ?MXũĢÖ¯}^“t­oI=%ũ7O ē÷ę›a=BmMƒÚAš< ›EãËČ`ŋūũûßôF?˙¯õ˙đŋ˙Ą|Ķî _˙]ûõõŌūŋëũúŋ]Zu×ũb=}oéi>ãuZĢũ5÷TŨS°ž­§§Ũ&ß˙áŋõõũw_ö˙˙ũžë˙ũØ}˙…˙ũyŗü˙öh'˙ø/õū ŋõ˙õĶ­$ũ_ī˙¨éV•˙]/øū–?ī˙ü?÷^˙ ģ­ūLŸųe “_ũ^Ą‡×øDo˙˙öë˙˜ßáxũ|˙ãõ˙ë‡đĘA}k˙ëėˇ¯u~ĩ­õúûĨŋņë˙úŋí˙_ū—O,Įû–cá˙õ‚˙˙˙˙īŋ˙_¯õī˙ ^ŋßŪ‡°aj/ũc˙K˙˙ë_Á}p_˙~ļŊûŋ˙[÷˙ûvĢũ}˙ûū ũ¯Ĩ˙˙ûßËIÕ×˙Dī˙ú%~ģũĨ×˙ũ0Â˙ŋßž˙ũ{ãī ūûīN­į.ž¯˙Ö+_˙ũ˙Ž›˙ëīo˙ë˙īŋũë¯ũōõ˙ ŋ˙“Ô+c“P˙˙öŅ+}ôŋĸQīû÷ëúÂ˙…˙ö°ÖÖ×÷´Ŧ/ÚíÖimëļtŋ3Ŋ}ŗ5˙Ũ˙Ō˙˙˙˙ņĮ˙Ĩõ{ü/˙éĶ_˙ōęƒpžZŋüŊ:č/“ë^ŋ˙ĸQ˙DŖ˙ØĻ68¯öÂÚü~–ŋjúwûyģĩÛĶ˙ģ?ßF¯÷íēúív˙ũúŋ˙˙Õ˙ô˙ūöK˙]÷ūļéũ˙˙–Očūũ§wū˜Ļ?mØ˙¸Ö)†—à Ŋ…ößôÚ{anžŌŋ_[ ūs˙ÜĶëĩūžß˙˙˙Ž^ž˙˙§ë˙˙ũ/ī˙˙ëôŋôŋūA—pÉŧ0ŸöŠ?äAôĶûžņøbŊã‡ūÅ\4Ą…ûXa[ ļ–žÚ§ļëÚģכĢívĪÖĢú˙^æžŊ™îgõ¯÷õ˙uũ˙_Môŋī÷ũ~˙˙\DDDDpa‹†[ ŸvF:pĐkĒ}Ŋļ¯˙`ÃÅ{ą˙av[ö_öŊޝîŋ˙kk!(Ķ´ŨuūĪŲGëļg˙îiëĨųûí_˙_ī˙ú˙ũˆˆˆˆ‹"&ˆ0ĢdímûXatĶíSá¯ßŪ=Šƒö+ũļVŪņß˙ -…ƒm+JÚũļēukÚíŽļ­÷ØVũ˙˙ŋs;¯_ũ~רˆˆˆˆˆ†„DA‚hA„-ąÂ œZa27û#û#ínĶ_īÅ1Á˙÷áŠcļ66)íŠá…‹Ø`ģa-Øa[ $à kÛ /ūŌíĩ˙ĩöūĸ""#B""""""!„"NĶL-éĻJ; ‘ú ˙×Ķ"ļM;ÔąžÅqûTlVėîà °ÂWņ˙ļė%Á,DDDDDD0‚hD0Bâ"í ¤\á Âi’}mĶ#~Õ0Ŋ§f2(öģk˙bļ*÷˙ØŽ–""""#Mˆˆˆ‹A‚`„D0„B!„ Ä &ƒ ϘTítÖĶÖČßūČŖũŽÂ×F!„â!„""!‚š 5ŌĮ­JfÔĘâĀÅIx´Ž™\ &Q™šŽW+'+ˆũl&w8Ŧ”ŽÖž—ęŋÄ`ŋ\› ŽÔã$e:ũū0Oę™]Aŧî#!/˙ô$ÚwũϘ)ŋ )ˍˆĶ5˙_˙ĩé§ĐyéȟA™ÁjˌŲĶ7@ÍfyÚ˙˙•ĶŸÂhėÎ;¸OPšÚ„ââĶ ØTĶ/‚af¨ e¤|fy§GŖō Ë.d‚:ՐŽĘĩ˙ŋÂōīĨ&힝ŠãOâ4ûđƒģđ¨0œXAŸ~3ņČ ÉÂb.ÁfaȰGQܕfŗ›O˙íéõA<oYxäī'dŽ‹Ę †×%Wa׎ĩiÚÜ_ēĒq…ØUO1"Ļ^KVĩ˙ö¯AS¯Ō]<&›Iē§ L'„Ãk/Œ$Nģr8ĸvŅdŖr7ĸn¸Ķ¸hv ƒ™Æc ˛`™Æ#ã*ȆY<ä!‘ĻvDj__ņũo{ūžžēIēęē÷é&ūĄ:MBēn›ĻøN‚h0P‘|äėŽōW…ņa4ô &Âh4Aá Î3H ĖâėŧOšŖH `ˆŗ=˜k—"‚4ÍÆdĻ„B#fH2`Ț'jDŋëĨõoĶ˙û×ũn­û¯īJŨ i=tŨWNÔ/ĻMÖԍßč˜õ[N)SOTŨS‹ĩôͰŧXAØPƒ ša0ƒ3ņøä0˜ŽF@É|Î?ŸüŸBL’BT* J`ø,~Ģ˙˙˙˙˙uOõ÷ŋtõõ}úN–õÖ(-ĐA´NÚ']šváK]Ŋ&îé:ûÖĐûN5tâĶOõOŊBiĒiĒxA„аƒO‚ņĮÔúõ"ŋ˙˙ũŋū˙é_¯z÷ގßöĢ é=¤š é?: ũŽލ´^8\•åŪ'lfĮ%^9qøŅ1ßÅ&ũÛ­4í?­ëëũņ×ü~Ūˇõ_ī÷¯U×å`}i_ãM¤ûCÖ8ĶzONū𮟅tđēt›ĒmZ§§H?Á$  ]ûåãđÁM™väņĸvÚč˙˙˙˙˙˙×˙Ø=˙÷˙˙úŅo˙×ú}ÖõKūé\­.ĢÆ­n‡ęŸé&õëĩi[ĻĢ„á‚č.Mܰ…ÖÖ]_˙˙˙Õë˙Øŋ˙ũ˙ūG]˙ę Õ˙Ĩũ˙Zëũô¯×ŋõNũ{z‹õ¤ę;Ģūēz~ŋ떯˙-E˙˙Ã{ë˙ü5˙˙ŋŅC‰%Ö˙°ã¯Øl:{úũö˙˙˙Ûúģ_]zĻū•˙úŋ˙÷{¯ë˙×˙_k˙Ė6˙˙˙bŋ˙˙xĖ\“ëėū ā˙Ö7ãĢŽŖ¯ã¨áúė7˙˙˙]zļū¯˙ŋÆūū˙w˙˙]‡˙ũ~Ģ˙ūŧB8ä4× ˙í˙ĸ7áļûŽŋî¸_˙ØŧÔ_ņÚjh%×đ÷˙ëۙögՙ˙ū¯˙÷ėo˙mũ˙÷Ú_˙˙„$+ü˜ Éiô Ãaŋõ{¯moŅ(˙ūÃ˙ ˙ũ/Đ_÷a˙ū×í6ĶÛ__Ŋ\Î˙ķ?û_˙˙Kë¤Y?úúûø6×éx6 ˙ōęŦē¯]K¨/ūē ˙°˙¯÷™ú%˙ØŋãŨІ{_m.˙í§íkkšœCŋŌžŌū˙Kž˙(\o˙ŋü/×ũŋãu¤˙.Ŧą§úƒËĢōÆŧh/_ïßŊŠØ¯_cv*˙á…ũ†•¯ -Ĩė5ĩŋųŸˇ˙kō K¤˙īŪ˙Û˙˙_QŨ˙ŋžũũõĐ[ר7¯öƒ$öœ0šĻŊũ­Ļũˆ_Å1ėT4ĩŠŠŠûaũ…ūŌųåËũĖũO/4_gíũŋú˙˙öū÷_˙ãkãü?˙ ! !j˜T×ím{†ŊĻ=ÃU˙~ÅuĮčâl­‰?´ŨSÛ ļÖ×'¨ŒļŌõlüퟷķ;_üŅyĸ˙K˙ÚëŽûûøˆˆˆƒ4ÉBϚ­Ē¯¤IŪí]2ƒė§ü4Ŧ-­ĨjÚØ^Õ5ŋoĩí}ĻÖĶÍí§ļ™"¯|ŒŊvĖõîĖ˙ÕūģŽ¸ˆ¨ˆˆƒ" 44#FÕ?,pšyN@đÆÅr,v8â˜ØØĻ>6)Šãbļ>žX¯ũ°Ŋ­¯ÚVēöëZí}ĩ#*ÕרŠŽ*â""4"1 xh]ūwiÚoiώzk}Šo˙ŠØĻ?c†cũ†ڏļÖÖÖôŋųC<3$d„Cvƒ0ƒ, &NĶA„Đk “ϰŋi‘ŋúÚÚkéÚbŊļ â˜â˜¨8$ûkŲ#‚ā~"""""""""'\z ahDZ &ƒ0šh0ƒ ‘ŋauĩėŠ?څM^ž=ˆä("Qˆƒ"!Ü0ƒS8M>Ŋ­`˯Db-,qlĸH$ŧDb ‚@’^$VTüĸ.ĄBK˛1Č ÔÔ^"ČøqGV"Lr›y&8“mŽÄ§!ÛIHHdkh–Sƒ.ąrÔNRCƒ.Ĩ‘LČŧHŽÔä ‘ļ„‹zWyÚH)ßH‚öF82:˙ëą#m×øY\éɁĘmU˙ĨĻ„7Žî;ŧÃŋūÂ!’MÔΞž;3<ÜfđĨDė….C0p@„†Hf7ũxūío—‘!Ú$;D‡hkĒÚz§Ú~vš„Ô*„øÎ98R^'ΊgYq›"qŸČؘŒÍ6"qČdƒ[tŸ˙ņĒAÁšaá‚ ^;ē’ē'Šp×DŨú$?ôã iꅅ´Â~…„Đvi4@âČ˙˙˙é¯KK턓ŋÕÂnA­áÖnū]¸H“ÚDáü˙VŧZú§Ą$Ū°fdi˜3ÆC2šŅVb_˙Ū?Ŋ4=UëÖ¯T5jÔi7ßOPƒa„“ü&ŅyuEãų+#Š'oTNDŨ´Č5C$ÛĄ„âLô3ė&b80!™ÆpD B0€ĪŒūg™á‘.Fhú0Dƒ7™™<Äuŋ¨_ĩ˙_Ģ˙ĮßUĒúoëWē§øP›„ŨÕ: Ã!–8A 7otœ}­ūvƒ´ĶX´Đ°†a< ÁgųĄdažĪ4"A"#3B!č_I_ē¯ęÕ߭Žŋúũ[ũŦwZzoE"C$ Į:æaKŧ•‘Ã’†‰ë‘Ŋp¯˙_§žÖĐqa§ĄĻЍA ĐgĨ Ÿgo Į@ŋw¯ĮL=aËGŋÂ˙Ģūûē˙˙õÚû!š8ƒ *nĄ=„ ´ËĮᖠŧa‚Dí÷†ޤŖÉE°‘vŅw‘ӏáb‘7za4û‡kuŠ?đŊn‹W¯˙k™„¯˙ũ/÷˙Áo_ø[r[]5ÕĶ×]>˙ĶĩMßĐÂ~ĶĶXxZ ŋåæ ųŗ.čŧú.ōV˙ _Z%úŋü0Ô0˙ųcÔ.—˙ë÷U˙āŽ¯Į˛ C[u8ūõ­×ûÕū>—ë×ÕÖŖC]?é=4Ū­$Ũ?ĶPŸŨBųdÚ ī÷ūOXo ˙Ŋ]"8˙˙˙ŋ˙ø[̝C#žũūŋũ˙_wNŋ˙ŋßŋū…ükĮņīú_ô˙WĮí`Üŋaŋ˙ô ˙˙ßí˙DĸūžˆfXâ ēĘņ˙˙ū ˙˙˙íßĢ˙OKû˙×Ũ}/ö:˙“‡˙cŽŊ˙ŋ˙ë˙ôkሉ1Ę\n˙_ũwüŽ×˙ūĄ°˙˙ümSŋŋņ˙mŸĩŨkß˙oúÚ¯ŋëõö;˙ø_ŧ獃HâDo˙˙û_ü/ōĮ¯˙ûõūž ÁÆÁü=ōãÖģŸŋ^ëélĪúoûë_ũ×ũžĩ˙׊Az8âAl5— @ŋūŋØičŽ>õ×˙Ú°Ã˙˙ ģ‡ėÛîÕĩmvÕŪöĶÉėŨæ*ũ_^û÷×˙˙Ũ¯bAĄÃ#ũüžž¸¯ū åÔû˙ũŠ ˙˙ú%0č0ü0úûQÁąÅGĮUOivēŊūÚûav×ŋ_u6ŨŌ×ũkÍ"ŽE/ũ_īK_Ōū8˙˙ ƒ˙ū‚đܲ‡áŋë˛(ûi§vŋØ­ŠũâšxęÂî×í~Õĩ˙^Bҧ˛a r—ī˙˙üąÂ˙ë÷k˙ĐAˇû_ßáx>đ}qˆa4a% /öļēēöē}b˜õc銏ö7`á…Ņ ŅÎ9ų‰æē˙ŋ4_é˙˙_˙ĸŌ_˙˙×ÛßÛū"""" ˆˆajŠ Õa­ŲđČĮĶ^ūíũąR(g„3 dƒ!vûI°Ÿ×"Yv•¯kš˙ë˙ī˙¯ūī˙ņD0B!‚i’„Õ&˙h2OkpČŪŌm;8ō02A\ēļ?ė-Ĩ÷˛ŨŽÂđ×˙ũ”7É{ûK^×ÖÎ}™äųÅŨqz Ē'8a:$8ŗ4]rS˙Į˙Šcmcwŋ߃†•¯ÚÚí­ēŌuĒkjƒí}(ôâ2‡,xAX˜L†HHļČŖß鯎úāũĒĻ˙ļ8¯bŖã¨ûVVŌ°ļ”0—T’öXâ ’ē #đd}ÃL&šjg0šŨ¤_ęaĶ#~Čßĩŋ˙I´Õm>ûėS|ī •Ŧ!‡ŌØJЃÄDDh;ˆƒC@ ‹ˆˆŒšÃ4ôL”,2OŲöšjE5 ŖIąĄ(qÅ+ ‚dpØ`2AWüDDRqa ÂÂ™ĐÆŠĻ$3aĐ@ƒA ¨Đ2A´Ž>Õ/l(L)C˜qQa|)Ô2APpÂöŧDc´qÂX‰CÁ‰|ąTĮâA¸į1i#Ī"č2ëhZčãœp‚hL(iB 2čēb C0ģcФ v‚A‘ų +iTaĮ8âPė!ãi8ä2AĘkë!8öˌ&GāÚ i2ęŌ¤c„‰C Ą„9 qČd¸âF׈_‡thŽf” &%ŽaŪC„'pŠ€Č ˛3cES¤B8ģ#†i‰ Í`VGY ÁũőŲtG č¨dt”:'‹ ‚>qō>‘ZĀĨģŠ!ÆÄPK‚h!(t§2č>/„PāČũ3'‰ĸ`šĮ&8Õ— ‚hB8čKä|:t‚8ƒäY­3ĩ6ufc"ũ˛;œ{đœĄĐA Eđ1EĐ ‚aávÂE@đ]Ŧ5ĻžUÕ4ÎŌDŽ$‘Ö%\jP@„PE&!‚Ga„ƒ#¤Ŗ/‘Ņtí]ŒáąŦOņŋ×ȗūą°xī0č L4'؜ 1āAĀđÍ#ß˙āšĶ˙ČŽŠ{”:qá„čP.!ą †!@Š‹R‡Čų‘Ÿ˙ū‡˙kVA¨xVËēNBqÂ\L÷  Œ:vI Äãˆ3°¨Ĩ°™'‘ĸQ÷˙ü{œqÂ㈠†é1(w(x$‚‚„D …P^B¤@đÛŲW_L&v-Ø¤áȂ: ęRšPėŽgCM2ƒ"Ōé˙|l$aĐ@ˆāĄ Ž8 B&’/‚Hh§ˆú)ėYNˁā¯]¯;=Ꚅ éÄ0ƒH˜Ėâė‡ Ėã Äf2ABDšĐÉE˙˙^Ü$V&ÁČøAãĄ"%:AÖŦã‚#č2>: ˙@ŽĀŦ.šiĶ´ôœ^L î,&|9'gôhX fķŲr(<ÖHŦʏ43ŖÍ0ŗˆ¨WČ5xˆdwl ‡Jč§@‚v‚Ä8rpS°’AЃ.ŋ˙חŽZ˛vŅ;ËĮE㒆‰ÆB‘!ņRPâ´ĶĢNÛĐzzĻ„0†ƒ „ xA„fqv‹đAŸŽ`är4Dč la&!đ‚@„WbAã@ˆú CV¨x°L1&9R¯˙õé7TôÚO§„đ› ššaáSp´^9w )+ˡ#~¨œ?¯P›Ļ†šMU8‡ĄqiϟAz8ëV%8Duˆ"Š‚@Œ8 ö]Čč"‡ú˙פÚN—uũ.ŠëIŌn-'„ßI?ĸw .Jōo“"vÖ\4\Uw&īî˙DG‹H °‚)ÆÎ< ˜ E@”8 JB#WX@ĒÅÃ&dK‘Ôūķ †É˙÷ëĢĢũíūõW_IcußMũ;]Z<&Ã\ŧ¤ôŌn“Ī%y(zĩE Д>Ft&0’-"‚$}Hč:iqú ü3‚…ˆA„! ŗAšfØÉÅ„ō9žÍQāŋ$ ˉ™ÉĖ”_ūęûÁk¯û¯Ž‡ú˙mkôŸëŨ§ØN“ĢuŊ<*j¯Ļá?† (¤!ĐA4wčÅ ‚ÜHéÃVžƒŋãM0†hCM<'jǃ „4gŖņč fy¸"%Č fqrīû‚īkęŋ˙˙…¯Ĩ˙ôą\}ë§ņūŊŋĶ`ĸPö)’A[.‚Ap‚D}“Hē  @’)Â#ú.üģrQũ4ÕS{CŒ&š§§ŽL*Ä0œ_—köŧ/hoĮ[˙āžë˙˙ū¸Z˙׎ŋz˙”9 Áø#ēELz„ č ^"Š‚Ũ íGŪ“ĶāÁ7’ē/2ņĸq—™+#ļ‰Ã`‘váB—tNÚˇH˙î7ĶÖ ëũčũ˙Z˙‚ũ×ũūS‰‚˙‚÷|?ûßö( š E.ąd|O°‚g‹G ›Auh8E:„N8D}&´žŋÚ}´› é7L.›i'… &á7/)4  Ũú/0A—äķ/2vûŪēčßõ˙˙čŠ?˙˙˙ë …^3áV:‡˙ßû0ˑ3„’@‚ļ, ˆûA$!!‚   #ûI—žąûĢūēũ_zôŸ§ëßWĄŌŊ5IëĢ…uĨŋŌū]~]_ūM_Đ/ß˙˙¯× ęŋ°˙ĸ‡!”ĮQHã„(¤ĸčģ „  (qHâ(/´@ŠlPI ‚(pDpČDDDDDDD hB!„!z‚h0ši„Ķí2Q¯ aϚtŽ8įÃøAũ‰OB Đ J.ađ‚l&Z†SĪ ‚`š@‚ņš ‚ŗÄDDDDDDDDDDCႠ`ŖB4†‚ Ųc”<%‚! ¨īļ":Ü …1(xI^đ‚đą‚I$DyƄF!ƂMÁ6˜”8¤-:ˆi; ŌG@Ž8ą¸AjĐA ˆ„Ą*4–ËIA ha8”8 YC„ˆd|§„ ģFŅSŋP‡GŅNę„XÅ”9Į(p‚ ˆ”ãâÁá§ /‚jse†A0ąÜ5á| M°á‡A#č š+dp\$đAa">GC„“@‚a"Ÿą´‚ ĩ؄¤!]4ÇÁÂģOˆ@˜ŅO„¤H4„Ä{Ë Š ‚RXė‡H,CQgXA‰ĮAÂ+Bh …!(pˆų„!”â¨â#áÁ)Èa UĸC†Gdx4AÅ"œÃ„@ŦuÚN,& Pá;HēÁĪNöÂ@‚č!!ŊФB‚GČčē­%ĐA Š !‚8öŌ Đ$… ‚ P@¨ ‚B°‚aČ菗о‚vG„4-ÚH°ŗģ°?  ‚ŽÂ‚B”h$‘Į†Ō@ˆč!aŠ!ôC4rœE"œ „ã¤"6Čø^) §ĸ‡Š´â( Œ ’„Ŧæ‚q(r{(r‡ų1ÄqÄ ądr#†Ypk#ą„Ō!ؑG`’iÃKÂi! ؈”8 Id‡,rC‚#ƒgG ģŅ .!Ú CöŽ: Á,W-ĖF㙭´ˆ ƒ„„G!(r1Î8M §Ámĩ dĮ‚‚C„BĸČ˙„8āˆúĶÕ4ĘĻv<‰Cˆ‰N!; PXA="œ „DB#î,28ÕąâPī˙Ūd0@ˆúœÂ &qÄF+Ht‚P‚ëŋĶķŅ !Ŗ$›Ęt‚ V@AC„ÆŨĻGdpČ˙ū>ūd7/‡GA.Ä":īa.^‚*6Š§Đ Abqį`ã™Ūŋ˙ŋĮ֘‚-đ@‡B ´I#āCÅŅĮzPKĻ™•"Iĸ;+ÎD!Že%˙˙ûhJiŦ BjB.Ø*í, ˜‚#ÛZ8˙ÎâõõĶLėDUÄĒ•Åb|fyū\‰—3Lęˆ:G?0ΟūˆfŽqÄN:n:B)Ģ/õáđ< ™c„ ‚Ä!ë÷áT÷ūÔ&Ŋ|Z!Ųų2xÄn0…‚!] Á ÆP38ÄtFˆę‚.e\uÖų1ÄRHDąÁŅt #Ž, …l Tĩˆ L$°’‰QīūK˙Ņ8wÚwö’ůšh=4Ķ?&ƒĶ5‡4יĮķy†b„ņšeČ֍NfŦŖ33ĢØˆŽŲæqÁDDw´Ž>PöAô!§˙˙ô8~ƒōxŅw“ēīōQEĀMHۚkvĢÅÚwϚņiĄiĻ~3đSpPƒ?D æ9õm ‹â!Ęூ& !ļÂÂA^Ųv˙ũJŸū´›Ļß×ĻŌ  ĸvŅ;hēuö¤päoDáéņôŨéëĒqÅŦąĐXĐEŅH ļ] ĻGAû öqÂ₇dĖĪŲ;:ūK¯˙˙z˙û{Õ¯u×WUtđžpž°ÁBxMĶwÔ†\Á"íÉ]õDáÅE"päcš?ˆ°ąÃ:#ĸ>BCˆ„ē#ŌŨ ?°´ŦC2˛gŦ&0äq‚@ÆP3Dm•˙ ˛{˙!‘ˇũ÷Zŋúę÷÷úë§Zŋ˙­'uëé'…zđž(O Ã/Ŋ+d|.æ Šq ‚háĻ\6!HĄÁž/ œZ 4ĐjšĐgã;Ļ3‘¤dĀžIŠ„ ĖČҚŅĘvH?u˙˙˙úūŊúø¯i˙_īëUûŨ Õ5Ķö˛ŖŌ ąhCIF)īģHB6 Д;änDöŸĒiƞũ-;Âiúvša3đLÜfãL û˙˙ē˙u˙×ũׯũu˙[õ×kßC×õ#DJ$PBCG;a*!ĐA4Hs,/ ‚čŧÍĐÉņ+hœ4N'n/ŽģŦÚ'ÕéūšjēčZ_˙ī˙÷˙‹ÂĶõ˙ũ÷_˙ū ĩ…ũĩˆ„đŠ%A)'vŽnčã„ô!ŦSÕ^/ „Ũ„õĩ I˙—˜ONë/7čŧa‚à t^b•€š9pũ×˙˙˙ö—ūæ˙˙÷¯úŋ@ĩ@ŋôÄ}Å @ą‚$GÚAA¸A A"‡´’Ģ­zēXÜ,iéŋŌzvúWOęíl,>Ü'„ü'H?˙ú“'ũ×ö×úŅũu˙˙tX˙×˙˜w…đŋŋˆ°KA-ü;8đðŠB$Įūŋo˙ã˙˙ûø÷[ũ?Õ ]jũl/ëõū­ÅzÅ,ûŪŋ˙úē˙ū×TF˙_õˆî)8"č4M ^(ē(u8á?ūøũÕúŋ˙áuõúŋīnē˙Į˙ú˙î—ũ Ŋę?˙˙˙ųuz@ŋDķũķŽ).Ųø ^Õ˛: ‡ AbPéô6ņ¨.Ãū˙¯Á^ŧ˙ūŋ˙Âöēŋ˙˙¯Ņ1Á˙Į˙˙ÆĮ˙ûÔh/Đ_ũR `qt.†!)š(p@… A ,˙oėūƒ˙ũž0_˙Ø5éđ_ēë÷VgÚZŋô?žg˙˙÷ô˙ûü˙ūÆ2Į –‘tNÂÄ OŅĮÅ˙ôßūˆŨaŋ˙˙×]˙‡˙á}C]~Õ´ũ˙ų#ŪĪĪzī˙ũõ_˙ũ~—ūâ]Hø!e=ˆdpŲ$?˙“˙–7@¯ ˙˙ū‰]ũ¯øaīí¯áG÷b˜ūJJVŋd8ĪÚØK^š˙¯_˙ŗ?Ũôŋ_é–8„ ­—@Šrc´‚8ø†G@˛3šC–:˙^ƒ˙éxo˙÷ũß,H/ßũŊ~Â_ĸyûOņąQÆ˙°āũŽą˙˙í¤īīm§õVēļŋŧZ UˆAœp“j„Gũ{mûũxë˙úú¤˙ø7ūÅ_ڑŋЇ ЇLŠ?ũoÚbŋø?øëûá„ŋá…ŪÂ˙ĸ‡,p‚ŨĨ8įXJáÁ C„‰˙˙˙lÍWŋëũ˙^ˇ˙˙‡Ōũ/Đ2Ē"" a`ƒvēEû~ši‘Gõ[íuđplė_ąûĐÄq!A GvĐ@‚ÄĄč㊠˙îgžķ‹×3ô˙ũŋ__ö?ū˙Ū˙DĮũ}DDDhDR !`ƒ0AϚvļÚ }vė.ši‘G˙÷Ą(p@´°BPé ͇$8œ˙i§H;Ũģģ°šI­¯­zų¯éé}˙Õ|DDDDDDD0B"!§4Âjš œäÃHp@‡$8˛>„ĄŅa$„ãĨũøa(k˙ +a+ Vŋikļŋaiĩ×Û˙3ļ˙‘HūŧKQkb)Ä „R&A„”8˙ũ‘_ąLSÅ{Įąü|XūŌûĩ´žCĪöé°aE …aÄĄĖ8A4 ēIœqí{†[ûM2(úwßßÛiŠcų1ûö?IErƒ”8ˆ„ą)Âď—A}ã -Ļ„0ši§ *ØLí2OöFũ„ČŖũ¯w¯O˙°¨4 ĄÄD$S„v‚ ÄDIĄB`˜M4T͆a4ÔŋĶXdqaAa2>‚ GČė‘Ã ÄDDDDDDRlDDF<ãˆA VCŠ^ģ ‰Č-‚ČâPâ‚;ˆ‰Cęøĸƒˆ‚%;ąČƒ‰!ŨXK(qÃ#¸ BÅŽČf Iq ¸öą(qA$AqÆ $;‰9ä -ƒHpËpŒ~#ōÜŧve•jH´å/û_Ŗ˛ÚqÎ9ˇ7Äx‰ ąČd†˜Ī䇌ōčÂ;†v@n;’\ו_”:@ha2pÉBˇ÷Ēvšd’"qŽ*ōąęĨr˛4F‘dC:EDuļ!!(v^.‹ ÚŊ-ūs×ČzĻ™Ũ(M4ÂŌ0A‚ ĖâėŧiĪ=˜"‚1ˆgSL‘! \u p@œAĩ‰ØĮ˙§ū?mĶ‹ Mžŋ„í C4đáŧœ]Ą@Œá •ˆ†Ŋ˙˙õûĸíĸ8ōPäŨĸo Įú~Š„ī=YĄÂS„qa;_Ú˙ëßAá:'˜Z7Aåã@­tN%ma"q“w#~ąĸ1Å;dw‚#‘2AW˙˙ũõũtŌ]=-ëIé´Ķ`ËōņŠAAA 9éœ db43ŖķyÖ˙˙ëī֓ĶíãģûĨõīOO ĒéÍ@†Čúsސ‹d"™vm‚a? ĪDųP<š Î3ķCS™‚H yr!ž]_įEĶÁ{˙_ĢĢ_QīõzœqI$ĄÁØI @…˛ uū4ī‹OPœXOOh^šq ķBđ@Í3#ŒĶ1‘Ļ`ŠtF ŒŅ¸/úûÃŊ.ēūē_ūéëáĄA(‘G8áč#ŅtGÁ;]"oDŨö÷§úív§Ą¨AĻąj4,!iσLüŸ õũln˙˙ë˙Å\o8⠂ą AeĐ"ē.ĐMrWEįT]š+hŋÖG ZdĄĸníw…Ö;ŠOJ-u[ĸ7˙ŋė5íuūū:ô:¤! âaĘ4g 8č"‡(p úKĮ¯më WOüŧÖ*z'”o“ŋ/•éŧ”VJ(ģwuĐ/ũo_˙Û_˙ÃÎ8a2> ÄDtLq(paÖßĶĨߍ=?é<'á:]6×h'¤ēĻáBzn_:m[ũé˙āÛ/K׎ļÖ˙å<$Šp‚‚AĐ=Ģ‘‡Hī˙˙˙_Ö˙ßūöü~›ë§ëIátīū÷ũáēīŨ÷bš=WÉëRęŲtDãŌbHˆ?­XöũũĨ÷˙í¯úõˇ˙õöŋú˙Õ˙_ũ&ŪūļAŦ|!apv% "C„‰N"ô8Įtï˙˙@×Ájŋzú˙õŊīū÷˙ĸÜūß8ⓠęB$Ü NLsŽ! ?û˙Ŧ˙˙õü~ ˙ßø'ū`׎úø_m}Ō:~gėW™˙Đįī˙GœGĒEŽdqÆ÷˙ ˙Máŋ˙˙ũ˙_ú˙ ŋZoī0˙à ÖŋzjÚļŋČĨŪŲû÷3đČ4H#ŽË‚€BSŒ"Ÿaķ<Ād/åƒÉÕ ß˙ú˙˙ĸQ×˙ũŋ˙˙[ûė~Å0Ō†ūÂ˙ •V×îĶÍ8įTR0á,28hˆ‰Į8įf,ĖĪÜúuëĩ˙~ũdÆú ˙˙ô ß˙Ģ­{oģõÖÅ~ÛÅ}à zŦ „88‹#ĸâ ņ‘Ņx?ûņŊ˙˙õũz ˙îŋë×Įå×Ūģ'j°ÉŦ4ißk­=¯ƒc÷œpA‚â"b0ІĮ˙ũ=ûkßíūģ¯ú_ßüqŦDDDDA„ ! 4í"į &Ч /”9ąėDĄĖ8jˆmŽ4äķ<嘎Û?dšūę˙˙ŋŌ˙[˙¯˙˙ū"""4؈ˆa‹Iâ$Qō‡ ŽÍ8˙Û ÚWūŽũ×]ĩ봜ûŋ_öë×Ōß_lÍUœ|ãŠF xk6Iôo Cƒø¨ũv -C }…°Ŋ¯ö°Ō´­v×ĩá˙ûkú{ҎĩS!(|IŽâĄB=ŋi¯ø§bŊŠcØū)Ž6>=†°–Ø.ļ—ÃW˙DTāÔ=؄„$Pũσ5NøkjļŊũējŸwb¸Ž/Øŋc˙´ŽîqĐî@đËjŒ97A8ą`„DC@ÂdЃ.ĶMTđ˜LÄÉG “í…MlŠ>¯aSKÃHH4bÔ!ÂDĄÔ!!—TEDDDDDDDDDG !"p†OA“4kĻĸ ÁƂÃė „Ã $Į‡AtF2g°š{)ÄSėKl$XâPød|ށ- $"aÅâ#œsqĖ8lH(§Hã‘GĄÄã¤Cˆaę$‡GA#BĄ—â#ĐA‚ Ęt‹ ´…— A‘„F8‰CÎ;˛‡ G(r ÜSœsŽXåJ=œ| …ÄĄÎ8@„ã¤Ē$QÁʐđô6A Įi>$nPâHq ‚™rR@‡¨D á8ˆžŽ=ˆ„„]‡$8éb!ŖŽ9N7ĻXâ"5ŦHfؑGÂH"Į!HDĄÆÚ!đ‚ŲNP㈔ë˛;‰ 8˜s“N;i" äã-đĸ4B‚8č ™CˆA˜p‚ÄŠ;aˆœ|Eđƒ)q*Œ‡ä3ą(qUäTɸˆ’i!!GɎXã§éŌ+9ŲŽŽ8“Î8”;¨„đG#†gããĸvû;%ũ52/ŧ빎"‘ĮV…DŠ9Į=‰qlDĄŨ'ôōf˙ĶNqČ5bAHR(p‚Ž"$‡)ü˜á%cĶú˙čEĸ‡,qÂ")â%Â)ÄDĄÔå,ZO˙ū×Î÷˙÷˙ü}'ĻÚũēI­ęØ*ēnƒa—ÁEæ JÜģÉ[DŸ.ô‰ž)z&˙¸ĐkwČiČæ #†‹bPåŽ8AˆˆA Ž‚PįrœĄÄ“U2:#äp@ëÛŌnĒĩnŊõ¸TŨpƒÂ~t螤H7'`¤­ĸíÉC…/’.Üģ}˙Đ'ë ßū˙ũ˙…˙ ü˙˙HEō:î ˆāķŽ)b${HąÁÁ\!H6˙žŋëĢ­/ÛÛWëI´œoÛi˙ēē­'„đĢŌ§IŽHĄËÔ/—Ŧ7˙ũ˙č˙áGūŋ˙˙ē˛ `@â-A NÂ!(p‚ņ0âH|ĄĮũjúM˙Ģ˙ũWũ}c¤ßŋôûtŨ¤­ĐÛU˙ë¯ ˙úËQūĨëô ˙‚úëūūŋžS[8 „ „ã“FŠ‚6H|DJ˙˙ūŋĩk˙ŋ˙û÷ ũ]×˙˙ũĩÕ}÷īūŋôËW—¯˙›W˙ÄĄÄIŽBBPé|‚ãŅĮ‡ĸ‡TĀâEąŲpÚ˙˙ūū?˙xëxëüĐJĻ˙Z˙@ąũôĩ˙4_žī˙˙__ô˙}?ī˙_ūõ !’ Ŗ„‹TK„S’Jp‚cĨˆ„ û˙˙ũkú˙×Âūā˙ûã†ø/aŽģjÚzŨŸ˛7Zīũ™öŋú˙ëŋ˙ũ˙Ǝ8‹#ĸ8P’˛Į‡,q(t„lã–8‰qÁĖŽ˙×˙˙×˙˙˙ĸ7ūˆßá‡ŋ˙Âõö†cõ°Ŧ0ĩkĻŠõ¯úwūŲû˙ũŗ?ˇ˙˙ëbAl(ā‚$8AáȉRœ‚Xô,ŽEĀđYë˙˙ūY?ũōõüžŊ˙@ĩÛ×ú˙Â#}á‡bŊŠŽØŽ %ą_û [Kę×û 튡¯§æuöŋgæ×Zb!"MĘDNåŽ"iˆ×˙˙˙˙˙õKũž ˙˙-'āžL|˛ûLŠ?vžŸbŋäWėSŠûbŋí;† °ŌØal.žęß \!(vÄ „ÜpˤF=zëߎõũ}˙Ĩ˙ß_­w‡˙īõŌéē Ã0šh2nš œvAŦ5ģĶ´Ķô˙ŋą\{ãö*;J¤!’îPâ#b‚q(rCØũ.ļū×ũß˙˙˙˙˙ß˙˙úZ|7$! &ƒEϚa0ļļMlīžû oûÅ;cŽAHp Į‚dp„pB8`"œĄË"˜åÂ]ú_˙v~ūŌēĖî×3õūŌ×[ēūˇ˙ûž#ˆˆˆ‰!ˆ`„DŽĐdí4i„ČĮ˛Nļƒ ‘­8ˆ¤Pâ"Lp‚(ũˆ”8”8‰!ȃãūíĨ˙këkĢ {I´ÛK ūˇœĒ×˙ŗ>˙˙3Ī/ˆˆŽ"""8aˆ0@Á c f(āYœã”éŽqÎ8œ|IŽ8\‹[ĮČąØÕŽ*8axáĨk % +kjÚ˙}§ivĒíĻRŦDE$"!"؋$K×ģ[[û_TÅtÆÆüqąÆÅ}û†îJõųĮ fqČQČQčĄÄãdu&Ŧ0š~švF=˜uMU4ČŖŲLˆ=Ú¯ƒ­ŠŠßmŠb­zQ `q(rC‰!Ä.2C„™4„DDA‚„A‚ + ŦĖáa; ĻĻpƒ ›ÃAŽŸÚ˜uLû´Ôk;,Pų!Ō8â%;GC#āV"""#ˆˆˆŽ"" ÁEÄCC!„"!„Qjĸ""Ž"Cnmņ͞ ™äŨH5?ˆM–?@‚#Ž$Q˙Ћ”8‘G\†`ä‡ؐ\{,qA CúBELxqĄč‚ã ,¸7[ Ô=ę-×&8°0´Č ûJqĸˆĮŨbChvÔRåAŦq %ņ€påPūWR‰h9ʐ58ã#ä|ŋŋT΀A‰@ҁÄXB#år‹ũpƒ;/ˆŦįČāA9ėDî?ɖv´×U°ƒX”9úō]Ŧˇ× ›dfvFȆw‚˙ôbÕKL‚Pôíŗ˛Œ“˙˙Ģ´īôĶ;$Šæ#¯˙͝ûë jC“/+J< ÁÍc!ŧЍ3y™yHōy+¯I˙‰Cũ?žƒa4Âa?'‹°“Fƒ4˞3FጆČ6k˙îū?˙Ļžš§~ǚx„Đ´Ķ8Ágāƒ3‚úM8@ĖČĢ; ˇ˙Ã/ÉŨž‰Ũz''oâ‘!Ú§§zič8×ņĶ2žAŸÁ$Gãđ@ĪÆ/˙Ŋ<&ä?.zxPŸętN蝾^9+#Œ”aōáĸpôH}˙ۚ˙jÂå-w˙J×鴝&é¯á4ôôô— p˜_Aéô7'š˙ Kˇ%ítãÁfg$‚o\Š—"Ėčy;5æf™īũ/˙î==?ˇ˙O¨ĐûÕō;B“Ķk†]^ĨæĻ…„4âÂh4 đƒ3‚h0ˆ^~0˙ü°˙×A~‚Žŋ^×_˙W_˙Ķ˙îŊ="'­i„Õ4ôõ á=/ņņuqä1?ūõo˙ūõũõē˙ĻŅ;É[Džō8ráÉņ‰ģD‡z&î)ōo˙ũx^’ ņ˙˙ûũ˙–#˙÷˙jĩ´Ũpƒ† “Âmč'„I¸Pƒƒ/ Â˙õūŊáē˙˙ƒ`˙˙˙ß˙žwžžŠÕēū'éá4õõūY=zč•˙D¯õ˙˙ė6_˙_˙Ē‚Ņņ¯ë˙XôŌĩßOi7_ú—¯—Vü/å“ß˙øl7ß˙˙˙ûËëܧ‚˙˙ęŖzŨ-˙˙}/ôŋō‹˙˙Ã˙˙˙˙ū}Á˙Œ§īũA¯˙ß˙ũ÷×˙áÃûūH˙_÷ēz…íaīđŊ!ņāˇŋúÍæ‹ėĪ˙ß˙o×˙öÃ˙˙é˙˙˙ ÅQ˙ëõ˙Ú ×]m´ûM¡~žēļ­™úM˙˙ūë˙ˇ¯^Ŧú ˙˙DŖ˙Z#ū߆ᅆļĩa°ēÚÚõ˙Ūqf˙ŋīôŋ­úųĮpŋ˙ŅjÂū]Yu`ēŋÁûLS௯ØVM¯˙Z“_K˙oöÖũzĢ^:˙˙nž˙ë˙ũ5´íoûėS˙ü0°×a¯˙ %]­Ģjīëē˙˙é?ŋëŪŊÄC ÃL“ÃNÉ?§do Œ{M?˙ėPb¸¯cX6**;§_˙˙4Zļ~Ėë˙˙â""""""B †h0šÚßÚk ė*mëƒ÷Ũĩö×öĶũ[\ĪÛ?zí¯`„0……aŦ5ė)cĻEôČŖū?°ˇö­…ĩĩm>×ÂYĄÄD\DTIÖ!„!Ą M/ėp~ÅFÅ1Q[Įpa/øâ""6ū÷îí4Ö×ÁąūëÃ.ĶMNMl&J-4ÖÖČŖŨ¯ēøˆˆˆˆˆˆ0‚ƒ"-FíxˆˆŒEø˙ûrÔĀ/-A 6ōÔ`’Ô,FĀÔâP Q-C@5IjøƒdˇKĘFYÔĀÔŠ…;ŽÁc¸É¸¨yn|ėeĒdN;2Ŗ"™\L C/;ŋTÔíP΀Ô.ĮĮÚԇ}’"ājĩū<ī‰ä` c˙˙Ž%h Ĩ¤ WF†uŦŠ/ūŊ0p˛¸ŧ „ĖāƒBŽj3aÜ0@Ī i˜fōã6E3QLƒfžõūaũWAĄĒφ…„Âi˜‚ ü380D+Čã'Ģ4Fyŧö`Éhd\īÍëķÉf)ž˙ĶâĶôâĐqņiÚvš ô~?ȁABŧdã4ÎfâœÉNĮË Ü'^~JØ0Hž8RPGt]ŋDī#z&ûí=5íSÕPh?‹MSPA Ķ ^TŖ6j# Õuî—_O ON ßĻá6‚ Éä2|Jčģë‘ŊQ8w|ˇĸoûAÜvšOė&`„2ėņžĀÁ g@¤ä|g ųŸæ|ŽŒÁfŒŅŸ#8û0čxĖãl)ĸ9•EčīéúēĒÚĻëúŪēßøMËÍū’l eņ+ĸqét]ē—ü'­˙īNõĶģL ͏i§v4!đƒˆ|9Ŧ…<hÍō3g™­˜ŗ3< }wôŋ×˙×­&ëéŌ}~´'}q§Žžƒu &éØT[8īq}÷kūŋũ'­÷öˇ„;AŨáˇiØAĻČ<‹(÷˙÷¯Á˙û¯ī×˙ūúĢúŌîļšŌQüęaĩ¯KßũŨŨŪÚ§÷úßO[õAŪž¯ū˙˙˙ũūžŋûŋôž¯^×˙ú¤„vēō  Á¯“†C#‡y™rvîõûī´‘īļ•~úNīÛU˙ĶĒëû¯˙˙…ú˙˙ô?¯˙īĻ˙˙~[Vō` Ã7ÚĢí××ûÖŊꛮNä2ŊäĄÔ“‰BPäŸŨ^ˆŖŋũ^y,č˙ē˙ũŋ˙÷˙÷E_˙ų‡đë˙Ŧ¨’€3<~—˙Ŋ?īī¯÷ũwđÂIč7É^Le(O˙ÉDņũ˙˙˙_ _˙˙˙ũ×˙îļŦ?˙_Âė8ōbp|_¯Ũ˙¯ėj÷ë˙O÷Ž˙[˙õ˙¯÷U˙˙Đ_˙ë˙ÉAÆk˙×îŧ0˙ũ˙Dcöåh Ã~ɏî5_ē“ÕõßĮH˜˙ĩūēī]´’ŋõąūŋÔWūŋõũ˙ĐŪĮū˙ņ@ß˙ËÕzęߝŽ `Q°ú[äßRCš!ü˜øŊîö̝žū:ÁoU¸ĨŽBę?˙x}˙û˙ß˙˙×˙˙v?˙ö7}ęũāܓŧî`ļ [}īúUOܛ˙’ß^˙W+˙“}]o˙°|†$YëŽ˙÷˙ë˙˙×˙˙k‡ŋū˙ü<ŖÎĶ‚Ø6oņëˇŪõôŋģ_õK˙˙×÷×˙ÃūØ]ú˙´ŋí}´Ŋ´ž˙3ęŋŽŋ˙˙I]ĩģ;V `Ճ|–/‹’†‡ŧ{q××ĶĨÅü*¯ūęš˙ü>׏ā˙öÂ˙Ø[í~˙ũ´Ũ˙ÕÖŗūŨæļ~˙ß;°1ƒũ§đŸôūĶŨīĩģūގéũü7ŽŸí˙دö8=Šö+īá„ŋöÖîƒ[_öĶũmTŌĖ?Îʁl.ī¯ôîÖũĢkūŊ“}/ČĪ’ķ&ŖRCų'É\˙đũŲ(ĩžõĶ_ėŠ;öŊūØëũŠ}†ŠīØa}ĩl/itųÚ -úĻņģWÚ˙ëû÷õT>´Ũũw˙áŧíUŲDDD0¨DD0„EĻOMm0Ŋßk¯öēbŸƒø¯b˜øõš­ĒÉ i|Iãä¯ĸ=uŪJ÷žß×ß˙÷īíûu¯j\ßDTDDDDH4"Ј`šiϚMĶM;L-ũ…õģ_˛–Ôä€/ąŨOx;ÉgzzߊböęO<…§ŨŲ<Úú#ūžféõK HDDDDDDA‚ !hD4Âh0ƒ' tčāûR’āUĶë~ôüwūõßŋÕH;¸öá>AôÚąQqL|ÎhPQÃfÉ$Úūúä{ĮŪûOŊŦq˙°ŋŪö+ĒúÛ¤Č T‹†ļļŊęŋi˙ÚaWTõwĢöģuģTí{ž‘ÃSk úpƒ4 ĪiϘMPa5ģōŪČ#ļĢvûß°Ļš˙°¤]’ÄDDDDDDDDDDDG iÃĪiŨ Â Ķ0žī‹ xė•â""""""#ēŅĀŗkZxė†CÚ΍†@cdą!6Jō›˛]Č m…ËLÔ! ģ)­Č}f’Ć@mCĒ!’{­vC$s^C$3íČ,đW+•9 ĖZD€Õ-#@ĪLŽ ¤2CT.Fbu;Õ&M"UHd‚ĄTĢ ‚L“fD‘¯ÉA) :÷ķŧ´Ė”2i2 ˛M‘eüķ-}Qˇ\k˙ŽŸ‘JAl=74‹! '˙ü~4ˊŖ˛T°Ÿ#4i‘ĸĄåtdąūÚéĸ,.ƒMOČ4A„B`aAæ d‚/ŒķŲėÄfD Í ëd÷ūžŗÅžģĶĶTĶMPaĩM0˜! Á‚ Î1 äjÎUšdŠ šĄ’K×ŋū)8ēĒ'DŪōnŅ1ÜjŋqĻĄ0žž;4,& ÎF‘ˆ<&KĮãđ ĖãŧÃ<)ž`‚o4"æ%|ė"ũŪč&ūĄ83L ØeøO/ģ˙ ‡ĸCš7zq§Kq§~†ƒ×Aá4Õ4-4Đag™ų‚“-ö|…<ã4e8!™‘¨ę‹ĸ„Ŗũ˙˙Į¯ÛƤ˙PŠ´^a„—ŽŨ ŧrVéģúĸCûUŠ;ôĶûÕ4Õ4ĒaĀrāä`Î \ØåŽūõôŨ§øú_¤Ū˙ôé==^—[M$õpŠŊtNđƒwōņ„‰ŪJ-h›Ņ8wÖ˙wwé„ũ?Nŗ<Á‘"3ElČo5Į_v?ūˇ…ūëéūá+îļ?õŨ=SŨt/ęēĻ›§ AējJ߆ũúZkũéĐg™QÁeĄøÄ@†N<ˉfŒÂ'#LÁģ^7ę Ųqo˙˙úũtžžŸz[ũ.ÕGĒŸŌčiũ„žˇmúßézŨ§iZϘC §ĻšxA„Âh4,C ¯0ī`đŧlFŋü Ž(/iđõž˙×õîëĒ˙÷ēo÷ūJōVŨ" ¤­ÉÆHäŌyĖúä­ĸíŋŧ˜í5´â“OUŒ-õÔ0õöŋ˙kĄ‚ņÔ˙Tī˙f‚ô ū•˙˙÷õũ.“×Ü!ׯvŌôyxååĮ mˇĸvæĮ'dvæĮ%˛ßÉę÷ Ū‰GÛ˙ūĢõü0˙˙îŋˆßÁ|ū8?˙˙ũ´ē{a}×īN—æÃFģ -'IØ]a¨OÖ­S^đŸí=F@Ÿ˜#äõ˙ō$/Ņ(õˇ˙˙÷ū‹Ąk ˙°˙׍~øúļßö•]{ą_ãŋô/XĶxôØßwøđßūÚ˙ų`^OP_.¨o˙ũÖž¯ŊŋŅ˙đÃ˙“Į×đrČqä<×˙{˙^ô+÷¯×õßũô—ˇî˙¯}˙đo˙ū˙åk¨'ô ˙č7˙ūõ×đū+T;ĐÚØiĻ—’âՂūŪôĻŗ=ß˙Í˙˙˙_īõ×kĨ˙_×˙,#˙ī[é˙o^ę˙ƒË‡ L0K‹‡ų˜OD1"Í´ę‰wúíĻs÷3õĩŊÍŽžßí¯ū˙ûõú_ũ‡˙ū8T˙‡ū’ëũXáx0žŦë˙†û[a…íSŽĶmuûNöĪ7_?d˙ūģņūŨjŋ¯ū˙ëÉg… ŋā˜R×ôģ†ëôG6ˆßĶ\"7ö=Šö*EqÁąL|TvØa[ kav×OÛJ×´Ģmsö×ūŋîg˙˙ë$‚u˙&‚i<˜t]?-;đn^œ ^@žE‚‡Aŋ´ ūĶM5ģnÖîĮ[ÆÅGĮ°Ōģ[J­/ĩm}°žÚ˙ڜŗnŌÕ˙˙í"!ŋÉ˙ŋ×P˙Ŋx6—°B ˙UõÂi Ķ˛QØMPa2(öF˙iÚ}Ž86*+c}Ž7¨ū?öÖ×ĩĩīīũŊ˙ũ´Lwíöļ—Ŋ~îŋ;R U`„0…´ĐˆaMí2QĻÚ­ĒŨĒßßŲØãâ˜ī¨“īũĨ `˨duUÃ$Kūg×ûoæ~ģ×÷ôŋge7ÄDD„D‘ˆ`ƒ†ˇC đÉ: 'vF˙do¯Úkޝëö6* âI;~AīŋÚĶz›Ģ?}§ŽD—ŽŲš<ŋ˙ĨøˆˆĐˆˆˆˆƒ",!ĻalÃĻF˙ę/˙˙īĢöÕo[VÕĩt›]>ŌđšuŊëá=ū"""."BĢà ¯¯­cIØãŽ68û  m~˜`ŋ[ū„a†™nĨ¸MU0ƒ ßßëoi§§â›ØĻ?ãúß눈ˆˆ‰B"""ĶŊlŒxh0ƒ#Ķ#~Ķ"Ú¯Ų˙kŦDDDDD0@ÁA‚ ! Đh0„Õ4AϚĮ‹øˆˆˆˆˆˆˆˆÄj×vŊ†—bŽÖ‚Ļ;ĩūäÚy,úĻIƨš|ˇ)ŧįĒf2§qxėy/ûĪ^—­ĒfJ#ąį-2ĀŲ˙_õ˙û˙ëKëų––˛ ūvB*2ÍĪ_§_˙˙øÕ5:Ån5ES!" BnW×ÖˇÕ^ŋß×ũ?2(ŽÁ3™QˆČNžWÁldã$ "˛á™‘ÔôũMæĨ˙˙ō (u˙äĒ˙M4Ķ_ĄaTheC:PČäGHЏ˙˙ņĮZjŌnƒLē“ÂpËÕ_čŧrxä¯ ”]Ņ8ˆĸpŅ7z&ņO×ģ¨Đa8°ƒ¸†°¨53SA‚@ēeâ9ŋ˙˙ūĮ˙u§ÛĢūž›§…Õ]Ļá7>‚čŧę‰Ûë䠊ídŨōcŋN4ÚAŧ  ‡„‚2˛<ŽDã3Ė3Ã$‘ČūfDhü˜”ˆō’˙đÂõÖúéu˙Zũ÷Bø¤Û^= ûü&ũôĄ<ŧh'’ē8eų+ˡ ˆËŒŠ;D‡}$őŅp[ ƒˆa4Õ‡š ķ1⁄BAæ<Á!H#ķ9*|ÎHäĒ< Œ‚S‘3%Ũ”_ƒ˙¸ī˙ŋŊuŌū?˙CãũŦ&-§…{OV“ĨMĐx'„ƒ×A$!÷§kziá NĶO „âĶ‹AĄ 0žQf‚ 0žŗqfyˏĘ…sAŦô%ķĐ˙]‡˙ßīŪģū­÷÷˙ô˙¸˙_´–ŖZMØXh Ŗ­"ķ%n]¸HœQ7ÉGDâ‰ÃôMūží4ͰĻŸđͰņv… ü&˜Aë˙āúę˙ר˙đVㇰūü/ļĢũ§˙ûÖÛ˙ņ!c¨"?íWAáPnƒĶđžƒz/ žĸwé™(hždމŪJ2ī%mv‰ÃūFôIŨ"CūÖ׊×ÎÅķaū˙ëũū‚°x+aûÁ§ô3A+aū–ŋMÄIB!CņŦ}-'ĢņIõzéôšxAØWO ēn›§ ô˙Đnƒ7ōvų+h°ÁBŅ;z_ũđß˙īī˙ú%ˆĮ°öļÂû˙á~øēޝ  s9CŽ‘Oīõ¯^ŋī§ūŸHząë?Ĩ¤ßõ´õOôũ=l*éô„3ŽLpZ˙˙ē˙ז¯õ °Üå†ŨíøDoû_đžîŦøx@ƒA,_~ ũïîũGU˙˙éŊŋū›Įúo§ĻúŌ­!ßû­×˙īÖŊč,‚A`ø7āß _˙ô‰_Û˙]ŋđŦN8`™#ŊƒŦŖ˙īõá˙/‚ø/‚ú˙ßë§˙öŋ^:Gaû§û×ÖŨ{˙ëpŪÃOī_˨/ÁŋäđĄÂÚ ?ūqÄĄÄ …øw…˙ũƒūЇūpPSÜÁ|¸ū8ķ_š„Á˙ū8?úœ÷öû˙ë˙{Köü?×ņūõøčG˜kūÄAHãˆha‡čŠ˙˙Øû˙Ļž°žŠūē˙#ŠŽ. ˙ü}u˛,”ĢÛT×l%Ĩ_ūæu¯úū¯˙ú¯ëöŋˇ×øoũP8 X¤Xá#Cũų1Îåü7˙†˙Ŋčũ"7øDQī˙õū×˙˙ūÃūPÖí[_wūßũŠÉ\ÎÔįæīĪ/˙Ú˙˙ûū˙ëb‚E8đ˙ ¨B?ø?ūų1â‚Ã+úúúuõ]č•ü"W˙˙˙ÎÉEūÅ1Pl\WÁ÷ėq_Ø-đÂļŠ¯táB~¸_ßÜĪ×ÍÕûgįĖ˙ÛW` N‘Ξē˙˙ ˙āÚũ: Kø_ÂĄųzÖ?ã ŋ˙å‰˙’}Úiļšûāũ…ūĮÅ1ą\0ļ­…††Ú_°›a~˙ī[Lĸ˙õ†Gp‚‡@Švūŋw˙ߡõ­~ŋīÖ˙ú^‚˙_˙úž"!„T8†§ŋڅÖČŨ´ÖûÆÅ1Į˙ņQü[öÂí­×ļ”RQH!Z•Uūžg?ûõé?šŸˇ×˙ôžß˙_˙˙×ũĶgj‚ÄDDDA„āÂĐP(Ba2QamHŖÚdcÃ#îøkö*EėSƁ'Ž:XnŸí…Û]7.ģy īÚ­˙Öŋúæ~hģõ×Ĩũ˙Ėׂ 6#ˆˆˆ”!0„0˜B§ú­„(ížœ5ĩ^ÖŌŠPŠ ~>°×ôöúĻŋ~Ūļ–Ŋ~ÖûM´ũoū˙ēí\Ī˙‡ļņĄCA… „iØAÂÆŲĘwą^ûėTVÆÁ„¯bŊŽ8ũėÁ&Ō°žļēŪõím=v×āžĸ""""Q„Čė„B†GėŠ?i˙p×Į"÷ē~ŋcŽ6+cŠc¸ū+Іļũ„ˇžK>ŖÂE%(p‚Â(0ši„î@˅´ĶMa‘ t]˛(ų‡LŠ=öEü Ķ_\7˙ØŠûØĮ˜Š„ Å4ŠĄØˆˆˆˆˆ‰FB"AĄa†i Âa5Njš åŽ˜MlŒuA’{lŠ?éá4ũ5Nv )H(€Œ _ lxˆˆˆˆˆˆˆˆˆâ ˆ`†\ ´!™Á ˇA„ĶBN!tČ8č$ˆĮhã‰(~#ˆˆãˆˆˆŦ0Ho‚‚Ū9!őīųœöŖp@„Š9ĮĸPâPā‚úVŪ‚É"āe8”8eī˙é‚HJá„'B#˙ûŋ‰Cįdt\Ãa„5´÷Ú@ N"‘Į‚Ū9XˆŨŽaČAÜ2;#á¤L¸`ŽˆäėUŅĮ‚Gd|°BEB1{äPâ) œq Ž áÁj'sŽxA 1Î8œui¸žS„ˆHĄÜŗ&ĒS¤BqÃ@ˆũ„qĐá~Z`ĸEXAbË „ „E!ą‡‚MĘã™É‚#É&GČø*Ųp[ĄÃ#Šœ›j´ô8„âÂ8åB$‡Ŗ1ÃĻUoö)qŧ˜âPáé˙ß8ábPä‡ņHJ †—˙vAqöˆ”8Šå!ČæwĻjÎΈčŽDo˙qÂFã‰Ü* ˇŽ‰!Á‹´Đˆ’rö$i'>ë7e÷] CWgCES—ú`Ē;-Yʗō¸Ŧ~?Ÿžn7›‘Ļ`Â"9@dčȋũœ|ĄÉ“†‘\F˙ų”ī\Š­;ŋęĄ; ˜PƒBÍ ƒ@ūÜ% ŦBĸ!(sSĄķŊ_úIi¯įqûC>BĶÂ~ė‚ã᠂ĸŸ ļ‡đD{˙øPŋ˙ú/(HäpÚĩDáč›ŋÂG›­ 2Į8ā0’˙˙˙˙ûĩ§¨Tđ°Íڄá—Rû @é+.aŖŽađ@„R!×˙õ÷˙Õ׊…מĶģOütŠq! ‚E‘ōI™æyŒō8ÍYžf?.eB3ĄĪ##Z5įX¤D}{˙˙zÖ7ŋj>?ęŌ,tŽ8‚ÖBqŌ# †šjÅ§iņh3¨pƒ<gā@ĪÁ3҆†~.0ˆG—‰ōD\fČôg„ ķ2$ķIĖY?˙č _Ū‚ëû#‚AŠF ‚Į˙ŊSím4ôââNÕ8ŋ´âÂĩÂa æx gã9x eĻąžŒüš‘ži™DFâÖ¸-`ŋŨy./ÜãˆãˆA 2‡ G BFéõØR8ú/#v‰änŅ!ŨĒwÜi˙Ôzú >4õŊ40§vĄæz…õ˙PK üB@ C¤û DĄË BPũ? /}Ž MÂnt^t_9+rxŅy….ܕļōPG~\eíw÷ĻÛJĶ^˙ۈãáŋ÷Ņ~û‚ KâAmqÄqGīūŸ\z÷§IŌo~Ķ´Ü$ž°ÂŨa4߆_Ōtš &ūJŪ‹ĖœQvī“ŧŧú.á‚Į~ú'ŋÔĄÔ5‚ ‘æ“IqÁ‡Kõũ˙˙ī߸˙V?õũ×_×Ģxô“ü'öĐN“ŊSÕũ˜Wëú˙ĩ…đŋØ">„B"‚ėąđ@…D%ˇ_úûũ&û¯Õwõ¤ŋũ˙ëúÛũžŊéØëÔ~Õ_ī¯Ĩ˙)Âr‡ ŧG$!)8„\Cíũ‡ü28Ÿ}ø_đ^īũžŸ˙˙Ē˙ũîŋ÷ÎÂŖO_ú˙ÅU˙øĄhãˆHJ–8„Šæ_˙ü~‡j Ūāĩ˙_˙ņ°ī¯˙í-vŧīĶūŋ˙ú]†*‚)ĘĄÄ\ „$S˜pˆũîŋū˙ũu˙_˙u×˙ø>ŋ˙x˙ö˙Ø_uũí{_Íåž4S‘ĸ* ÄBÚI-˙Ã~õ˙ĸ7ū¨ũß˙˙°˙˙˙÷đŋhnÔ`ŋuiø_Ķ~ ‚!Hã‚"‚ÚƒˆAjߊūüūZ/Sk@ŋ]ų? ˙˙ūŧ7_˙õ˙čūxëä^ąČȝŗœt) CôB‘Įq_õī˙˙×ū‚ú÷¯˙ž`Ž˙˙åéäæúöÎÔōčēîČßīû˙õ°Aļ)RA("‡ŗ>){˙ūū¯Ķī^—˙˙Įŋ÷øz˙˙ū†ūŋ á“‘`ˆai„vš§ ÉEŲö—IAčD ˜!0ūЉ‡!ŋ÷į˙­Ūŋũ˙˙õö˙˙ë§é}Ö""""ĸ""#Cĸ‡8å=´qøÄã’G˙ÖŠæö~×3Ŧũŋ­Ĩkļg˙ĩ˙˙š+ūŋũ÷–?˙ßEÉcĮdĮą'b#āŽ8 „ĄÄŠ;Ēīė-¯ũŦ4›W^ÂÚVēöŋ˙öŋÚfęũu´ļĖû[3Ōo˙ūŠ+)Á0ė,B T‹ĄÎ˙ø?cũŽ8Ļ5Ž8¨ö_žŋĩũĩMommm|/Úi…l)ļŋ&ÁĸÎFŲ1ö]Čč#Ž6g  ’8įî˙í~íSÖõOąUÁīüąLvG\Tq[†­„ļũ†[[}b"†Â÷´aĐO‰Cė!5N͆IĐaSMST '‘GÖČßM˙ŋ[´Åí=qQąĨ"ė­éĸĪĒ. ¤!!ôŽ8ˆA Įˆˆˆˆˆˆ‰#—`pa0C-–ášÂ­éĻJ´ÂkÚdcŲ‡TÂßŲ~ĶŨ‚‚jPåē FÄJą"Ž"Pėq\DDDhDDDD„ĐƒÂ °ƒ.a0šĻƒ ĻJ!§Ä‹DŽ‚ ‚¨ĄĘã„‚šĮÉŽĩ¨A C&8 B,!HčR8ã‚#˙Ē.K,U @–A;#˛:t‚ ÷‰‹RÖ­*)Į 1xˆ BCîĢŽZÔEĐĘp@„N:A ‹É‘ÂŨâíSØBq< ‡œqJ‚!1(q —qčI¸ ZHČ<‹E Į̈ˆAîZČLąÂ ‘Áw˜rq(uQB)G–B‘‡Hk Od}Ū!ĩ´B„ĄÂE- AhąÁEĻrÖĸJ q(qA8dqB;á#W4e„¸B SēEŽB!!IĶĖŽ%QØ) Dp ŧR–8DyīŲŪąŲFFōm4]N8 „ã‰C–;âSŠ‹#¤˙ōŠę§fp‹d|!!(t§° ā‚ûīūō§ú™‰b¤qÂJÂŌőŅtˆk˙˙Ķ˙I¤(*ÅH-ĈœsŽ!•éū˙×ņņ8‹ĻYNB’H"‡ŲrF‚#ęd ^ë–?˙˙Ébá8tŠJ‘ÚŲ]ÚgfqR18ß %ÛĖÅ=™æyÔe3ÍÄ!Š™Ī'e#_˙!3LR8â#⎂ÂN?ŧŠ=ļ?éϚi§aSĶ< ĪÆ Ȉügšr(fyyWŲĸņaÚ0âB=")#ë˙ūŦ.۟ŌiĄĄĻžžˇvąa4Â<  røAaÔl3’9#ˆ'Š0rėęČŌ˛Z”8@„ „N?‰C–;_˙—ĸÚ ú//z.Ú.Ü$Hz&í‡ĸcâ‘n˙´ôũ=U4)ńh3áâA‚Lv|d2:Xĸœ!ĐáÁ>H|Jß˙Đâ=ŋ}U' ôA7O ƒp¨>Ģ%xôN’$;xĶM>ė&ģL  ÂDĩ Ō8â"Š‚‚+˙üČĪ(˙ĨwÖãÖôė'éēVŨBt°ËôúPƒ†_7Q;Ëŋ%^eۓw#}§éφB‚@‚Ä㐃öL|DĄåhS™•?]Ķ¤ß éŌtxMÉ[—t^4]„‰ŪN˛ŦĒą!  Å#Ž´īO Ąh4đƒ<Â ķ „ ü~/0ˆN"˜;†lfƒĪæc#dDŒy™Ų0ĩûūū ēë…÷û˙¯UžēM%õãí]p&éŌzm&åäDŽĄ—Ž—D á"Ëĸōz§§zz§ŸkĄ4-4ôĶA„Ač::Fā@ÉË7‹‘@Čė¤ŲXhíņÚj\x/đČé0_ZmÕWWÂů˙ũ˙ēXûĶtôé1!ŠEBū]ī—v¤áÉY4]Ŋˇ#v‰ĀHųv‰ũzqh=$ĶM<'ņa bÂA˙˙ī _…ãāû˙ŧū˙ĩ_īú×­\Qc„ŠpČė2 jqĶ]S°H'¨O†ēxOO7 ĐAūjO0Rķ%dwD㤉ÃDâ‰ģDá÷úö’°ģ~ķ>ŊŊ˙ ôڇĶõáxüŽ3ü ˙ä˜˙u ĒBFsŽ!ŲnBËĘ.¸ũĶøë×N— Ļũ'Ž’nĢ„J›„ŨŠô^`ų+ÉĮ“ĖŧRņƒ4–—U}”:Đ-~‘+ūnŋ˙…ĩõëOö īÆëí,X”>‚HW„ˆOuûõũ7ũí˙˙˙ôÖ7ĒN׋OíČ^´õĨÖũŽŖŒGAËÔ/—Ŧ7îŋú%đˆßßūzúø[˙ũA%.„›Š#÷÷˙˙û¯^ôë×ūßë׏Cõ˙ī÷í>Qūëë˙¯Ŧ˙˙ĩ;( ÛOĢí{[?kš”-Úö÷ú˙×˙ß^×õÂVžøœLJ#Šp8Š ļĄžX7_­¯ūû¯˙ú#}ęà ëU˙¯á°Ö°ļmmmxk ęˇú]ws?ũíŗ5ų嚟ô˙üˇúŪ(J „Eą8â‘c°öm~˙v*^ŋ×bŋ˙Đ.H~‰D6ˆã˙˙žÚH“áwŠ}ŠcØØãØû ëļŊ…îĶû[ §ú}§­­¤Ųû\_oԖ$‘ĮnPęÁbPė7˙é?˙Ĩ˙ū—O,P'  Uɕ˙˙ãA9Ųe§a{LŠ;wiöÅnüS#îÅ7ÆÚL0ŋÚÚM¯ÚÚë!Ō˙: ÊEŽ>aĐA @„o÷û÷ë ÕëŌũ˙ëīŦŊ˙˙úAo 4Ķ „ÕN ‘ŋkiëÚīēƒŨŽ+øĻ8ū)†ŽÖŌmFBPāb–!‚ I*čÍ~g˙ũn‹¯Ë×ũU_Jõ˙˙ĨXÄDDDD„D0„4/Mœ2OÜ5ģ#{#ũÚ}ę*Ûb˜ã A&s*qÎ9C‰!ۃôÚ}æÚë"ĖīŋXÚ˙§ˇš/ú˙÷]ybœė(Hˆˆˆˆˆˆ0AÄ0„BM4á„ÂdŖ[0éĻE›M;HãĐA Ž$‡B]„žÖÛ^ģZmwd9†{Iĩ˙û_í}´õ*ī]ŗņģūũ˙PœDDDDHÁa4‹Ļƒ#Q’D‡ÄÃû#ļ=Š`âŋcØ­n+ØacaūÚ_à ˇamS[ Ú¯ūŋČS Q!ÜDDiąE2ņ)r†`íœqhãˆMma¯Ø[_m{§ėŽÅ~ĮėTl0ąėWõ°×øqÁ_!"PæĄ!SÚ Âv[MmSĸxÚ­ĻEI>Ŋ¯vEļĶąM˙˙Ķn—ĩ;QH „BgR1Ƃ Ž"""" Ŗˆa FŒEĻMSM4ĶA’{Lô˙p˙ĻČŖéņBq2Į8á$‡Ä ąÚŽâ#Xˆˆˆˆˆˆaˆ`„DD2ā&ši6O}ÆB"ĨqƈĮ!´Ž=-oqa„”9c„DL;”8 BZF C kíŦ‡ÁHDų AėqnĶÅCX¨‰Ųjˆ”9Į(qGéĻĸšŠ8úV‘ÜÃŲ‡,r‡Hî„A„ĐaX„ŠąÂ „´ ”>!ņĐÛ/E!G͉Cˆ „c„Hã‚%é‰Į ŽČų™in‚ė[ŖŽČîB” å­ĸA*Â,sŽâPâ)ÂÄ2戭‰q÷/ąg A—‘N' x.;D‡’ ƒŌŠ@twH$(1"Ž:îM–(ą´‚ėāĀäŅ჉‡HøL™Į"•ƒĻPāˆō!VãˆŲcˆAcūŋ•X’D ;ZB… ‚ šėI8†éa~TĻTgj  ŖšĮ”>Â,q‡@ƒ0— ę˙*-<ÉãT‚AID U˛8Čųˆė‹ū*?˙ž]ėPI ؜vˆ">Uz˙˙ūƒė#„JbPâqÆĨyĮb"K‚Ą•Ëūŋøę‚ ‚‡Î>”8’ßĻ™ØTDãVVØtäYž‡âŦĶ$A:U/˙˙ø”8HÜq­bPåqÁŋ%ˇũ„ÖšvŠĻƒL i‘‘øü?!åÆlfƒ3Žf fdhŠ g_Éõ˙Û8¤‚GēBÂ~˙˙æęiüPM5˙ Ū„h>.Âi›0CÁ„â-Gr;$‚0ˉĄdĩĪõ„rœ …%ą!8į"?ãã˙ųwDíũKē'NßϞcēí{Tũ5ĶĶB Â äŧ~4Ad™ Ķ1•æúIaŦ Š‚BRH":õ˙ūjƒü$žp› úAų<%”^>J-"vųŅ!ë§ŦzĻC4Ļ ãņøÄ<d-1c§‚Cå°…˙ûßŋ¯VÕ÷úĒē~† Ÿ„Ü Üŧōņ† ]š+%”^5—ôMŪĒą îũbÅ „CE>ÚBär(œ\‰ČŅ"‚#fuy†H2’ Ÿ˙ũ×^¨ŋMV˙k¯a}i6“ôí%pĒéåå'ũčŧhģĸvŅ;pĨŨõŪŅĮ!Â@-V[‰C˜sâqa…„ üf"qžgŦ ĐgâėdÄrD#ˑ8ČŲeÆNF#yä`ĘŠ2’ĖG[6žŧ=ß×ëī¯˙Ķ˙ß˙§ë[IŌoī zAéá7 Ÿ]C/‰d6GdqÃKb!"+NĶ´ĶCĩøÂz§Ą|XL Đ´5B ¤‚ ü]‚Áˆ5/äÁæc(@ĪÅÉB!6Vi“‘[×ø˙˙üü'˙Ĩáu}ú÷˙ņIŊë”~ŸŽXA Ũ ‚QÃ8ô$ĮG¤ĄĸväŖ.čŽ(œ4NÛĖ˙ĩ>ũ4õôâãNÃ{L!„ĐiÅŌđđuũ˙ĮåÅüü 'ņū ˙ę˙˙˙Z÷ÖJÔDBÄL1R‡$9c§„đēn›„đžž˙äī/ ]žJ႒ˇ.ōī%NŅ4\dnôIŨ§ũiĒw_Ã˙˙Ė=W˙×ü/˙áx˛ã˙ēãúa˙ā´ŪŋøÉeŽ‚N@đ\vÎ>“ ˆę›kŨŽļÛ„îļšĶi[I?]V“i7MÂ{…¤„đP›“Ę/˛vÕÕŠ'm†‹ŧ”D0„`ß˙ÂūÖë˙ôJ?č˙˙…õ˙˙ū |†ú¯äąBBDhDB kâĩXã÷˙×Ŋo×Ķ˙Ö­Õ?ĶŌOMĩtī}==7‡„ė(n˙ų„žôû/Wč/ũ˙˙Dqë˙˙ü0˙ ´ÁķëüRIP“čãœqŨxMp_ ÷Nĩ˙U~˙×W˙úOŨmÖ=7ô“Ķtô5įjHw×˙ū8ú˙AéͯĐ/—ĸ˙ūŋoũŋoŨŌB‚$á Dp[691Ä!{`¯‚ø(/_ßúęGK˙ëk˙˙õõúūëZëßáŋ˙ŋ_˙˙ũ˙×ã˙üÕ|“Ķ膝˙Ą(q(q G‹&8•°—…đ žëëņÔGûüq˙˙ŋū ũëī÷úR¸ŋž˙gë3ú÷˙˙˙Ēū˙¯˙˙˙×Ũx;×_ėBSˆ BČõŌGAŅvē"õ^îŽaú˙˙˙˙_ũ×î ˙_ņ°SkĶí,/¯nŋNg__¯˙ī˙˙ēWßīoéxn8˙ô‚8á%BŠƒˆ „2?č>~‰åŋZēē^ŋ˙˙í¯õ˙úĢ˙˙°˙Iß $à kļ“ ,5ßĩŽ˙_û ūgZ›~ģf}}úæ‹˙ĩĖ˙˙˙aĶ8@ŧ˜ârøWđŋKA~ßņû/Lą_¯rVQ€ĢŠ˙õ˙Dĸéíõסũwb˜Ļ>6)Šúbžž?û û -¯Ø^×ũ-[OÔåŲûÛŊ}÷ũ ”øI;(âP莴’¯Kúëø¨÷é˙ūĄ Ŋ{˙,V“˙ ž—[ī‘ō ˙wŪŊϚë˙÷ũ‘Ā˙Šcøí°ŋ°Õ†ļĩŊÖ×]r{Ļŋā‚Ũ'A1ö ˙ī×_õ_˙˙ũč/˙˙ŌũŪŋā„˙~A„É>ƒ „Öî_îČŖ˙ßđĶûÁą_Å1ą\pÂąLl0“izūĮd|, „0Š ‚Ž‘OĮôŋ×U×ŨßīßŨũ˙ëú×üûūŨņa‹TMUnÉ?ki‘öFūŋwkv*ž+Ø˙ŋBBģ.}‹E'ikúû­˙˙æwfëög؟ōõûw÷_÷õúí˙ÅDDDDCDDA„ ¸†¸iÚh0™'´Ķ#ĐvFöŸĒ}ƒųCŠ Î8“ „"?ka}°ŋk…ú˙m{O˙õÖš Oįí'Ö˙é]Ŋ÷4Î-|CQÄDDDDD0BL0BA“‹†žŸ}œs8AŠ@‹ ą!IÅ1üŊRđÂí„Ŋ_Øk ~öÖ×mm,-¯ëiZ§_†Šˆˆˆˆˆ´.„rn,Ž jaÎ:JīŨ÷˙Ũö+bŊäoâ˜ũ‡üq]ĨjĮkí­­…ĩ~ĮˆĄ(pė…aĄqĖáIײQé‘Ŋ‘ŊúÚÚ˙÷k×öŊŠŠâļŖb˜¨¯‘[ŠĶ,p‘ÜB}0 „Â#â"""""!„"ÖĶ ĻaS[[ĩ†[ÉÛßjˇ§§ŨϟÜėĩūBPî‚;ˆÖ(#Ž7ĄÂÄP@â"RĮ ĻÎ%œ*Ã$éσ_…N,D-„g(pJˆAÚ DGƄDDDDq ųĮœ A°dp[Ųc„šCœvŋ¤)7I‚D‘Áoˆ‚" ‹ā”5ęžÄB"SœqlI@´˜Ŧė†Gd| ‚ęHrĮ!ĨTúV´PâB’Fㄠ¨ãˆ „R؆ë‰Ũ @…E[Q8âB1´ág Eë¤Päc¤ B Ķ ˆŽé„š´‚B#š0á{dw–™_„‹.PA IgD „ ON8@†Ō‰qk‰N( ‚ë8įN9Ü BiæÁåq|ō- $ĖŽé4%D ˜!G_TȔAc(Ş9 Ë‚Ū˜Baâ&húū{Ôė*:ÄTÎéÂBPíˆ@¸2‡$;#‘#Ą÷ŦŪĒ™—$'(tœ!á$ˆ„S‘ˆøÍ3PFŦĖüėtŠąÎ8Ža߯?¯˙_˙ ēü*}‚Ļåå×AáAB'Ëú'yw—y+k"ŽîBB̊TũŠņiꆃBĐgā˜AųxŸ„‰1Ō!!ˈ8‚#ß˙˙˙ċ"ßÚ÷§Iūšęšz߄ŨŠë—˜N‹Č0A‚o“ĮZ'mnĨŨ€‘7úwĒÚz§ÕŦJDBG’R‚0Ëy™č˜?Ęy¸‡Ud[˙˙ũ¯ŊŪ=cÕúę#u¤ôé7ĩ­pēŌl2ũ: č?'ļú/DáÉCDŨÅ"Cŋö”9 ;¤ŲĮ,v\ˆęĶh4ĪĮāƒđ@Â~.Â!^0ƒ)ã™q‚@Čæb1 ‡:r><š’ ¨d3ķFJø˙˙ŪŊpĩK˙ģ˙õ˙ŋˇZO^ÂŋĄë§Öēn đPAûo%‹ˆ‚"ˆ”8í5 ǧúq|XAč]χ…M4ĐvœC0A„„øÃEķAdˑ8Č21œĖķ1æāD æ9ۋ˙ī¨/‚õúÃũūŋē¯ņWqéūē{­éééŌūĩ‘c”9Ũ#FąĮ% †˛nîéwî‰ë×Ŋ5č/ÚvŸ§… ƜZ SAü]˙˙˙˜wAz˙†f}/ī˙ŪŋđŋŽęē˙WũD „DㄉŪÄBaËã‚/‘út›—”˙A÷ :2|NōíōW ˜á"w—aVȎôJ5%M蛴H§jŸ¯ČAęvZ˙˙úžĩ…īø4Â˙üuēũu‚ü?ûē˙­v—ÛÛ#Ÿ Ž! /MͤûoéĶpžžŸ­Æ›IáP`ža‚ =ĐAáũ˜HŧÂaICDáĸwô^?w¤˙÷˙ߨD¯ōQ˙ÛŅ÷˙_ē˙ü-Ģø˙ãøÔŊQC„Î9C–8ŠÃ8îPâCëë^žÖ›ũ/ęÕúęŋĢŨw~´ŧRŋÛĒnaSĶt˙Oá›Ē‰;˙˙/NüU~ōËļ^ē˙ú˙ūL?}Õ×ũ ŋãd|/‡ĮC”â—§W­o_˙öĢû÷Õë¯ē§^Ŋũūē^ēŌtŋkūé˙˙ũh/Ōúü60ŋßå×Û˙úāļPßõ}˙ø_zA8 MaÄã‚*˙ŋŽũ_÷˙_˙×˙ûûŋ˙­ŋ§ũüßß˙_ŋ˙˙øtŋ˙ëū夠¸ oųuę+úŅzĩ‹ˆ‰O`A ą]˙üÃę=Kø˙âßKũ~Ŋŋõžēõßüũi˙ūšĸĩßūž˙ũøõ˙Tēo˙Ū^ž]X/ž‘c„HÜàŠ‡Âaūëkīûũũ˙ļŋ˙ŋüuø/÷˙˙Ũ´ũ¯_ĩ˙Í3‹˙oû÷˙˙ĐOūƂ˙ŌũžH“„BRPĐ´B%˙õ˙˙˙˙é=}°×úß÷×đŋŊZ˙īí[ Öŋ¯^Ú ×_˙ŗ˙öŋ™ÎhŸå“úú.ũÖŋŠ„……é„é ˙,˜ŽĨë˙˙“°ŋéũūƒ×˙˙ú˙}Ĩ˙ø66?cö?ž[I°žÚû§õ×ļļŸŦÍ˙ļgĩŽhŋ}zv!hㄠ˜XĨÕúë÷c˙˙î‡ū]köëúųcm›_/_×õū‰_ũXeĮ˙ŽØ]˙"ŊŠcޏũŠíᄾŌĩė,‡öŠ˙kČC´ūĖ˙ū‚‚  ‚‡ĸqA>˙˙˙Ēū˙ú]ņúßā˙ūŊ|ĩáŊ1Qi÷Ũ É=Ú ūČŖ˙Úiũ˙āøũŠc‘ĀØpÂ_ģaiƒ°ŋiöųĮ‡‚ą"]o~›˙ßę˙ôMÁ/ģ×ūßū˙ßéÆQ ˆˆˆˆ`„D4ĐiĻJ;˛(˙amÕnĶ Ũ0ÅąOlWą[í—!eÖˇēŲúŧĪ×o˙Ė˙üĶĄëízöû˙ŋ˙˙˙čb""""""!Ąk™ÂéϚdĸ‰å¯ö´ÚöŋÚNS–ũ¤-ÃJÂM­Ží§ũ¤ŋļŸöÚČYī¯˙ĪĮ[Ė˙lÍz_ųĸ~ú×Üė)Fą !ÃDD0˛‰ö×ĩ˛7˙C#šC–9¯H|SlSņ_ØWŋ´ŋá…`ßŨ°“ߡŨ6Ÿéí˙í§k­Ģū×ąjƒ" †ˆė㈠‡eđŽ=Jļũ¯ÃȝØ˙‘`S~ČûÁüpÂÅ{´ŋė-Žļ ÷ü´—oQņĄ† #Ž) †GpA ß3„ÂdcĻ4Öû[û_íúéûö˜Ļž+cāũŠb˜Øū ¤ÁbIāÁ$¯PFZ8⁠QˆAeėDę„A‚ˆ†´Đ†ĩMĨ˙ -ü4ĶUA­­ŋiö˙ÎĘÃfļ3°!cJBqÅD"<í"‡ ‚Ąƒb$ëhDDˆaa=tĶ$öIĶ' ßjĶL*a• ™Čáä¨!ÃOņHDDDDDGė*ˆ†¨5EQ"'hX];K´¸ˆ2‡B0æ㑎$Į˛(ãcc"CŌˆÄ „J ™‘ųAÜÉ1ĐG&–NÉą‚‘ÁlT!"!Ąi9Cœq‡ âPáōl´ƒŌx B)9ĮJuÄtGDt"#4ōÖBgd|  ĨI¸Ą‡!Œ>qČQė:đ@„ĄÄĄÄ ™ÍAĸ˙Ë[EÄ!)Åm‘Ų;âGM @…qđâdwiKX„‘ôÂDĄņ„ŠáØåqhėm´"! C˜p‚(p‘‡ą@mtĶ;2’"|BT!ü‚ãŠÃ —ü’¤û;­ŠE!‚[!!8ņŸÃŖ]Š´Ė’âWčĪ´IÛ# ‡hDB#¯˙īŽd§úaJJ"qņAeBŽdu˙×ĮÆũs_ŗŽ,„%eŽqƂ †Č<ŗV˙˙˙A ¯äÜÈę"B(*ge;;¸Ĩß˙˙|R¯‰CˆA p‚čĄÎ8”?$]×ĸ䱞fc(Ī.A‘.Eeˆd3LĢ´ķŠ˙üîĨ‡‡,p‚a<8ä‡HKë•;…đšhCâÂ, Đa aÁ'žr7 Ÿ33ĒÍ øŌ8ø B"xÔJ(qD~ŋIzúI­öļ˜NĶ[‹ §…Lŧ0C šŗØ@Č1Jg˜gÆF†gš"s¨ÍLƒDuūwZaˆA;Œ1‰!Áëõņž”ģĸväŽōQ—nJ¸rné†ūŸjƒM L&š„Âj˜AĻb@ĪÁz9„!“ŠGd@ÂaS †Å$!Áb‚ ŽGīôŋT›Ļéļ_„é=:O8aBpÁO‰FN<&ŠvĢé§kéøN= CAĄi¸A„JD29ķ`ļâM˙˙āˆb@ē]×__tŨ:ĩ [ڄč&øA›Â„ōī/%yw—nĨŪ]ģŅ8ü›īŌOãMˆŠ#č6Bã+#0ˆG—"r%ːG_HčČfjœÃ#}–T°Ųę_ëõŧ^Ÿûūēi´ƒĨđ­&á<: ŋĻÃ/č ܝų+rė$^YֈŖ´Ņ‡8äq„!&8EŌ ;‹0ƒAža= ƒAŸaĄ3Ņøä0@ĖFâäP2;|w˙ū¯ŋ˙ũu˙Cū˙ĶBū!˙Iūē~´›Û a_„DîAR!cœpA Į&>AqOũ4ãÕ4ââū.Ö,!Cŋâë˛č+īũ[ë Šu¨­cū/íĨ}uĨ˙]6!œs*#ŲâԎ‘;mTŽ&ív‰ÆēDĮiČĮwé×˙ūģˆāõ˙ã˙ô˙‚öēõß÷ũŋzë% ‚Čã#üã‰C˜sŽ6Rĸp ž A7 á7 4tNŨä¯ōW ‰eQ‡ŋ˙˙Ã˙˙ü.ņ—øZƒŊ˙ë˙Õʼn‡)ÂN:AØbB!×ôû¤õÕíĶÂzūļļŽ´ōnäô.k˙¯Iŋ˙ūē Žŋāģ /ë˙¯ú˙ū¤ąA0…„#Üq0áī_¤øW]{ĶOõĢ§Žą˙å˜|˜7˙ü/ôJ˙O˙$ũ†}×ī­û˙ņá18âF>"aųĢūûÂÖžß˙ëú5ôÛũôá˙˙—¯îōÂ'Ãhû˙˙Ú_˙â,ã”9Į‡$=Ļ"a ũG‚ōNė&˜"‡˙˙˙ũ7ûõ˙ũŊë˙˙K˙ūƒpŋõŋ˙c˙˙‹A‡Č â#_˙ Ŋ☨˙ļ)Ž+ãø=vũ,DDDE„œq&8Dz6"!æÖĶO^îÕ{ũīŪY~õënPá#Y1ČAÄ": ;´Đi„8õNÂjXéęEûOŌ' Ģē°ÂQ(p‰Ü-°‚Ž'(ˆˆˆˆˆˆ“Ŗ_ˆˆ0B"â"‚4bqĻ3$ˆē` N‘ĮČāļHDá)!F‡!‰7‚Ô!‚ڃ !3LD BĶiq#oØjqDã‚'}I‰Ü¸{ÃËqÄĄÄĄĶlA8"; ÃĐI%-PŽ ˆųh0üㄊGrĮHV!‡-mb҇adp[(˜sŽ!†BĄN?„‰1Î8Mâ˄TËÄsA–˜Ķ.ˆá(ãœrĮŽqû‰C˛ĶQĄQ–ļЈ‰1Ä|DL9C„…¸ÆBČāļHãœrĮ ĻGČčFÎ8‘Gėw!&“c\ígBAÄvĨĻ[ĶSTYÍTã”:Gl ‡–˜Ō^E#;ĘëQ؈•į~…ŽH|N97ĄŠL˙™kzh2†J¸äS™ˆŠ(”8‚"$2C4w)Ę D|ļ_˙˙Ģ]tÉbBqÄĄÅ1$8‹#Ļ!˙ö×˙ÄŅ0‚dp Ž cFHŖÄīFxˆ=…˙Õ÷ĐUŠ0įĄõ‡$8õLŽ7î%{Ęâų‚8Čl˜yŒ×­˙ûi?ÂЉ‡[Î8A2;.ú!Ų\'z™Šœô0A„ ü]„A‚ !|f™ˆøČoˑ#ĖéYI˙ũ•%$8dp[ B"Čč"‡đžķ°Ų,‰Mįŗ]yÚČhńõNÂĶTĐa,ü~8g„ž\ äcCБõģõ¯˙ž%Đŗ9:ŠB#û– X6ÃĐoöˇĸ7­á˙ ˆ˙bļ*)ŽøŽļļļøi:é¯iz~gZˇëÚŲûüĪßĩ˙˙ŧh ‚(áą"ŽXīūžŋ¨Xlf ūX7-^X:†ô dĮČŖ…˙ĸW˙īDp˙ÎÖ?íoW"ÁûƅGülW [ma…†“ -­…mw]mv×4ja÷ú˙ú ‚&8A BBŋ˙KõKŪ˙ ŋ†đ~´›–Ŗ˙ ū^Ÿ@ĢũÉVĢkaLé‘Gģ°ļ§ūŊŠƒŠŽ)ŠcbŖØØ0ąöŊ¯ēļ˙õdc–8rq˙ûf˙íŊ˙ī}ģˇĨ˙ûé~ŋõ˙°q$!ˆ`…ρ„!„7Ī2Ozé…Mm8v§ø§Øö+بß˙aŦ㈠LŽGąCˆ÷ūŲû]{üâͯ3Ī/üŅ~˙˙M˙˙ûíũØ2@‚"""""""2ė hC ÃL”&šdoi‘žƒ†¤W|-¯¯÷­‰CˆA äĮ!K˙ßk¯iXP'Ũ„ūļĶ7yį㟞ŗw˙™ßÚZ˙įī˙Üü ņe„!eVa0š Piö™÷ũېœp ĄÄĄÂW÷ė0VÂąöÂÚÃVÂŨki0ÂíÚzöm‡ũūŋļ~˙Â˙īÄDDDDDD׃DD]ĻIč „ ™‘Ál”8Š#¯‘GėSŧSTS#~ĮT8¨Ģƒ vÆũ…ũ†•¯ö­¯Úūڝ…â"",â)9Į,tŽ8‘G˛ļE÷Úi‘GôíƒM~ĶM0Úx6=ƒ}ļ+ƒƒö8¯ø D$‚ōĐj’qIą$9Cሆ… ÂažĻtÉD0ši§öM;Mm|Š˙km°ÖūĶûēĄ GĄŽ8":DDA‚4"QƒN@ÂpÂw *ƒ_´(Ķ[0ŠŲĒöÄ"Į ƒ‚8ˆņÄDDDDDDA‚ ! ÁâLsŽBqōžËãœpD|Ž´„Dė”K…‚čĄđ‚c„ĮÁķŽaĮkĘįmtZĘ(rC¤>) ~(ŌÂGN8‹ ZÕĸû8âqÄIa‰1Â#蔉BqÄĄŌ,x"‡$8A I‚ŒA‡˛qËZĩ&åXö%Pá(Ž‹LhHA "Ž"ļÛ —H?0â0ŠD ]͊(ä0>$‡aLŽ.¤QÄ …ŗŽ! ˆųÛĻvˇ–ab.ƒDJ‡!H*úŦFIņŽ9c‚Rá¤Áūvĸ#>Îū;ėŦņ!ĸC„­ƒŽŋžžŠŲÚPb*sÁl–8A AōĐĢZ\ōŽČ¤žš(q(qÄBU´ČĮ˙˙˙_Ž4Pä âtWövˆÚ+˙˙æCŸŗŽ-‰‡(p&™(d8ėĒ+FOLėŠ†4#4@™ˆļj_˙ųÄ˙ß&9c‚lŦĖ×ũm3˛ō ˆe$Dááƒ<ĪAg˜d8 gã Ä"*ÄņA%Č ˆftd­W˙´wéœrâĸ"‚×@ĢķąĢŋĶOúϚÅëiĻOX´A„Ž?Á$j"@Ėķvha2sĖI˙ˆB9!Ä2÷đCWú~T;2Ä]¯.ß蛸Šø­S´˙M4ü  !„M0¸@Đ0ƒˆfqø yd‚?™æyō'Fã3ķŌŨp‚+„ ‚˙ņ˙šëųáŗ¤îĒ“pĄáh´NÚ/(ŧm<”4]špŅ1ßŪŠ§Ŋßwv„aB ķđƒčŌHäb3"¤6؍ĸ:˙˙öģũũ7ŨSÕ7\'§Ú§ fôé=Aô^Qväã.ōīZ'č›ģ^­?[?‹OëL Å C–=‘‡įz=uûûa˙^ũ'ĒëVŠčGøWM¨íūÕ: ŌznAÂy<ø`¤¯.ũŌ.Ū‰Įí?¤ä3Ž#ĄÄĄÄ!’Vi Ī3‚!Đ\fōë _ķ0Ÿė=äQŪ˙˙˙ÛŪŋ]ũá÷ģæ‹ŋŧĪ߯ũ[ŋwņë˙Ã˙˙.Ŧh/˜_Ôēßäą b/WīŋW°˙đŋá~ø}Įë÷īĄĮđwŽßūÏ˙@ž—ļŸ¯ˇm™į?_÷˙ŪŨsDŋūß˙˙˙ũúōö‚ â§&Ië_˙aūøDo˙Kũ‡˙˙_úû_ëãƒ˙ƒöĩVŊĨՅĩMm?ûÍÛgíN~gŪÚ˙ú_ūĶI/˙Åz&8ļ"*ˆũ¯˙øׅ¯č•ū°ßÖŋūßŋ°ųŸ_ŪŦ;ëÁƒėWąņ_Ø,5Žīė%ukk []uuöŌĪŲē÷_Iŗ?˙ŋ÷đÅIŽ#˙˙đo¯Đ[ū‚˙ÁžĨéß˙ŽD:đÛ¯˙ՆūõiŨ¯ö˜Ļ)āāũŽ68áŦl0XiGöˇjļ–ŧ5ĩö×ĖãüÎŽĖÔã”;BHr‡-ėUú˙ˇŨú_ũáŊ}˙ũåęmx7Éģ7&īöiíǘMW†ši‘Gūė&šØ§ö*+Ž;´› ĩ`ģaĻû§$9Į˛Į2?õ˙ī˙˙ũī˙˙ûŊøz˙Ž\áé˙Áb" Á ÖP°A„ &úiĻ"ĻpĶîÖ×UÖĮÅØWØj„Š8¸¤+ĩ˙Ôß˙˙˙¯˙~Ųûõ˙ŋũ­/m' Õ˙gk!#ˆˆˆˆˆˆ0@ ƒ0ƒ.2qjšvšcĻEŪ˙í{ėWÅU ¸âIá9q(tĶîŋ¨NŊ´ģ ˙kūnô›?ˇų‹ķ?3ÛŨö˙û˙¯‹%LDDDDDD Đ0œC!h§a‚i Éƃ]xi­Åˆ¤Ą"PáũŽ;á…E8ao†c_ėūŌ†ļļûKī{M´õ7/õíœ~b÷īŗôš,b#ˆˆˆˆˆˆˆˆamŠHUõ°{ÅH¤&+wū/ū8Ļ6*cõöJ°Â§ôÚ˙ĨŨwûj=!Q ąĘÄĄĖ=.°Âdo >×ūīūÕ4ÕíģOŋˇnد¤ĮĄŽ A‚ Á´-4áσ'ύ2Pšü5L&šÚęØMiöēžļ+Û¯;*WhQPˆˆˆˆˆˆˆˆˆˆŒÁЃ""! Â ¸AϚ -ßŨ­ũà b J B˜œv¸ˆˆˆˆˆˆˆˆˆ0„CB Á",u8ų1ÄĄÂ#ĸH."3=ôvŖE$‡lĨUĶŧNÔ!EAĮ!8ö"‚IqgGrĮ!GGL.ī–°E­"1Äî1´ĸČAŲŅqĄI´ÜrÖ­č!Ô&8 ­5œ[‡ÁáHŽ‹Ŗi8‘G!3Čę „BŽ"ȃ‰!Å"NUh˜ær‡9ĪCšC•BTČ‹‘Ņiƒ9gBGR‡(vÁˆˆˆˆˆ•„t‹ĸ>GˆčŽdpĖ#ÆšHˆ8IâMʐ „Ž˜ē0ĐˆA§+ŦBÚEׯ°æˇĖŽ;%0;d –C/ Ž’@‹Ē~vYęvWã $} C¸E!#ũÚۚfIX‘ø„]AĄEÖ˙āŋėíāUd ėb!˙ú˙ÉH,ēBHpˆüƒHæúūĮŋaą&ÄR8á’˛Ĩ22čí&viĘåo(ÍKŋëZ) ƒŠ#Ō #Ŗ„¤ŪūÂgzäΉ"ĐƒĪŠQŒČ@ˆDōæCfĻxÉ ë^ŋˆ‘ĐĮtŽ8¤„GúHėĘĘĨæļŊ=z„Aņ`ƒ3˜@ÁņLãO™æyņ“ŖžOä¯5˙„Ō.™ĮDã‚8A5[úÖU=áw鯚}§Úzjš Ķ ‚<}žœ\Čņ>FfYėЈf@™Ö&?|K¤$ ˆ„“duÖ?pUxá>‹Į/5.2īČŨĸpäcģON;õUÖũ0žēĄaj0ƒ ü]‚UŒÎ0eĄ2:31Q‚ãųĐ@¨ X˙ū=ÚoĻŠ¸IéÁ˜OA¸&K(ģ͐Á"vákĸpã×ôáĄũ§éϚjŠ âĐâ ô~9ÔÄN:ų1ü4˙˙øũŠõøôét֐uiĒxOkMÁrquYvŅy…k%nNrnŅ1čícMmtíqũ„PîB*šƒ8EH,š’ՑdŒ‹é˙­WöôŋũũûĮ§Ģôž´ƒ÷¤ôė'Ēt~‚tƒpƒÍŽ ]Ņ;rW]wz’Ä‘Ņå(sŽ@ĮœĄÂZA! 0˜N, ĪÁrAžüb ü\ˆÁIÆ3¸¸ÍŒĐa8Œ2âS™ ‰™ԉ?‚đë¯ŋęúë}nžļūģëqŌŋ÷õztŊé Ķ ē´O!—átļR.„&&"Câ ÂņiÜ4ãĶ´õN-4ņaBiĻ &ƒA„ ‘a~.E3ÎF#Äv\ĘĶ0e"4"Ávüp˙÷Ã˙uZë¯UJ͝Ļéūš_hë§ÚÛđ ‰}BAzhvGÁé2?%Xˆ‹ˇ#Š.܍Ũĸnéw$;M4ë‹N“TĐič?TâwĒ|XAĄgY0ƒNģzØ¯Ū‡˙˙­w˙4uūū†ē¯§üoKÂEųCˆ‚ļā‚ģ0é¨L'H:ON“Â}āÁPnōW—y˛.JČã/-"vŅ7ĸpŅ;ĸîŌ.œŒz|iöˇöœ"WØė?ßëØ>žŽë˙rãæņ…îŊâđZa‚ú^9‘ÖÚ8åŽB´Ą„) ē´¯ëjęú}'Ļ›§IĩiŽ'Ģ ]§ĻéÐpÁB›0ƒhŧ|)˛ÁI^]š(ú.čœ3ĩĨ¯¯Ažŋ˙ ˙ķ˙õŋëZ×˙ũBė0_ßŦ B)DRņ8áĶ.Š˙HZĮ¯VŊčz˙Ļąút'¯~•ēëé'j­'„˙ONžƒË ˙˙– ˙ŋ¯˙ÕĢŽ‰Bß˙õđŧ_× ÖJŅt&ˆd6'ē8í8@œ?˙]ĄëĨôŋ˙õzņVũ+é/l_Ŧzę˙ņIúûŋáž˙˙Úúą˙øürę îŋ˙­ŋ ĸ7˙á~ÄēˆAÁ†q ‚‘uüuæ‚ũāŋí˙āŋīUß˙õ¯W˙×ũ_ũī˙ūŋpßüUûÕh-õ˙÷–@Ÿ  _ūˆãî2câHpEÔIZîáŋ˙ ˙¯A~8?ü/ëđúŪŋÁzˇõ˙īĮŽsôģ3_öŋß˙Ŋ˙ņũjĮ˙˙Ōáë˙áiâgą‘GJÅĐA ˙ú#˙ūöū ˙̰~˙āžÃë‹˙‡^ÕĩŨ3oū˙ķ<ō˙˙ũ÷ß˙§¯ŋ¯ Ĩ˙č.ņA‘Áz­„‚R %#˙×á˙˙Ņ(ū_ôF˙˙ØõęžÁ˙_ė•f•ƒXim…ēŋmWÛM[imz_kŊ™únÕ­¯æu؟˙ū˙Zä¯.Ĩ }h! ĨüÚū˙ū‚ūYpßū ų'_ø×÷Dĸģk˙øo ß☎)Žļ+øĢ Úũ0×íj­l%˙¯Úšų×ō}˙īū[ŧDâd âPō:Ō,B U˙~—˙ŋĨū˙Káúƒŋ/Z _ƒ×û’aÃ#´ÖĶ_Ķûą[ŋė~Ëøa[KÛJÖÖÂéŽí{Tŧ †$ĮBbČú!ėęŸ˙˙īë¯đß˙_ûžõ^Ŋ-đßōõū/ja†R€ƒMiũ¯ØMm{†ŊũŠ~ĸĸŊŠ´˜ũ×°ģy+EĐ ‚|ã‚q 'ūÍg˙˙™ũũ˙ú¯ēŨ˙ß˙ģ˙ūtž"""" Áˆa……UM4Ķ#{NĶ"ŪŸÚiĻö?ØØqĨxĨ#㌏ėp@™t‚ĘSûiļŸëûiú÷ûfyÅ˙˙šĸŋ?i?˙ũkˇ˙˙õqD„D4ÂjĒXá5ė&˛7í2(˙áŊ>$u8â'r‡H+I$ đH ‡ûVŌö×ũ-ĩđŋjí…í=[ÛÍËļ“ퟭ-_'Zûš/÷ŗ?â""+ˆˆƒA‚ ! ?A’~ČŪ­ēG͇(@›dt°銏ãũ†–Į텆ˇ˙ØVÖ×Jëŋõž×ĶŖmūĶũNKi˙ÄDDDDD4 ˆŽ]ĂˆęÚ[chŽŋi¯ĒدøĻ*ũāØĻ6*6;bŊ†*?†ŋöė*tÚß b- !ü CbAŨ ÂkdŖĩ†ļļEûM7˙ģOAϘ7ø­ū+‘ŋbž68ĢJ ‹ds#ĸ>G2;P‚D‘Í2čDDDDDD0B ! !iĄš œpĐe 0šØ^„ČŖü?î×ģM0Âë&Ãj"#aÖŲĨ1aD0Ļt!anôŨ’{AĻEu§&Æ‘Ō)Č âڋ@ˆč"‡‰t"8ˆˆˆˆˆąQ .™8 BÃ@ļÂ.‚|0Ą"1˛c–8­qIĐH%ã&Qs8A ĐA2:BXCę"_.”8H]ąJ‡õ-aˆFBHp‚3Ļĸ‘1Ę$Č顄œLDC#‰ĸœ „&‡c‚aČ á5vA JZÉĐĄ›TAbqÎ8Ax˛Į8ęPū"ČæĸåŦ1DB?„‹E-2ų?Iâ%ĒPâHpĸ:MyÄ(ã‰CöglQųn|™ĻQq(rĮ!Hãî&†G{^Ķ5‚‡!a ¤(c„!ˆõ%¨Č9HÕ\ҘÉ4O“`Ŧft‡‡EŪBé<´ÕŪ“˙Pļ*e¤uȲ(ĐGÔWH!({ĩ!H!m˙ü–zūšišEâ a!†„EļGq*}qëžŋ{×ŲEħ!(Šã‚#ábT€Ņ'׏Œũ˙dSÄē: ƒ/đ… ęXđ’ņ&IbgĪ% @˙×_÷Z¤ņ#ĄeŽqÁĄ qlBYx„/ÖÎÆGjŲKĒžW*"@ōæC,Î’ūß÷â]1ÄBU´ÂE ‚įŖUųŲ˙äÜĐBŽūiÄ4ÔôaI˜"qČ2A †f¯˙ū×öQ ¸`އ/´4SŨ×úũ;:‹ ņi„Ķ0ƒ3đSvb4ŠLДĖf™‚„ŗØ3Q,‰3ŦJ=õ˙;.Ž!bLp‚ČúŒEg Âûkīĸíĸpäcš7ō1čīĶM5M8˙í …ę™ˆ&xA‚ fyžh<šwÖc5~8Dcœp‚ŽËÜąčãáĄDu˙ũļ´›„đƒÂĐxA°Á"VŅ8hœ4Mܛ´N(›˙ŋU˙ĶCNiÚqwū0@Â!"\ŠÆ"ˆA Šb!!8ėē˙ũũ ŠziëQXWNÕtôƒ ƒĶ Â˙Ņ7ĸväpûŽLvŠĻŸ§{Ė;X´Ö, Ķ A&éƒ˛÷ ŽŊūm×Ū„zoũ_§I´´ŧh~ŊŌZŽ‚‰Ū]´^Q8zĸpäŖßúöĒĸq 8A ĮHza‰. Bˆĩ : ÍBn\Lȃy™s<Ã$.΍M"Ŗ+ Ú¨/ˇ_W˙ãŋc×ÚétŨ?×Ŋ=>Õžž›}^¤Ž‰Ã IEwÄYG!U&9C‚h •tđƒCvƒh3‘øü]ρÄ0˜A‚ ü]á:Á3Ė3˜Áņāŋ¯˙úíŊkú÷_˙T­&ÅčqôžŊ˙…pĄ„đ›„!„ „6LpˆęØ „Eĸũž‰í5ZMSģâûM4õ¤Đ´× „˙…ö˙˙‡ † û_÷û˙…ŋņ¯ë_VúēzGRĮÆÎ:BLp‚A †^Ĩø ܔeå"ė+Dâ¨ģzŦß#|›´N$î1NãĶN˛l/Dc÷`˙˙˙`āÁi׋˙øúģ˙˙ŋ˙õzbPâPí"=(sŽÂ˙ü'Ģ۟„Ú'”ƒŋPœ| &á<)ģ%n/2īxAô õ ×˙˙ļÃ]ũ_ë˙úÁX6×÷˙˙˙Ą(p‚‡r‡Ō”9Į+:¯éēĮĢWÖéęûéę­&éÚną§…Ĩi7Z}/Ãß˙ō$.› ĸWũë˙ú˙ՆÁ˙˙Ŋ|ÅŅSP’B!C‚#õė …' Cú˙ũ~û¯ũˆô´õí}čšü/Ã˙ķU–ƒh/û˙“ĸ?˙čŽ,6˙˙_˙˙!o¤HqŠ0åÚX …ŗ*¯ßÁëëßÖŋũ ´ũũ 7]7Íû˙÷áÃ×ūŋĐõŪ˛õč †˙ũę?˙ŦB˛> (p‚Ū: aŨū Õükû¯˙Į‚Ô?¯˙ŽÚzŨoũŲžÛo_ė{˙˙÷u‡ū˙ųuĘÚ ‡šC„GHPŲrA/úü-Žŋõķë˙đŧúĄßû[TÔåßëūgZyžyzŽŊ˙īúXv˙ßëëųzČZÛ. áJĸ‡˙ū‰GÛ_˙ĩ˙˙Âė?˙û턡…ĩ†—ė5ũĩ}´ĐtrÛ]˙ĩs?˙ķEúī˙­?Ūŋˆ§8åqËvG2=h§ÄĄÂčŽŋ˙AlSĸs ũ÷_˙Ņ+áŋ˙ŽŌąLlSėTÁ…a„Ą„­ml/ím­§īûiØKS–LįŪŋ˙ŋņ‘đŠq˛‡ ¤CŋŋëI.‡īę?ū`˜^ ˙ōƞĮi‘GÕ?ĩ~ÅE1ąÅ1˙í…`Â_uöŊĩO´ĩm0ŪĢĖīķ;fBFŒ9ĮG߆\‚ …_¯ĨŌ Ö:˙ũ/˙úچ į€ƒW´ĶžĶM4˙īĮÁúąLqąÁ­…†—×Ŋģ oŌB!"į§C‡`‚ —_˙ú.ĸõîŋ˙ũšĸūú÷ (ˆˆŽ" hD Âa0ƒ2qöēdQá§˙vÚŠcbˇ˙øĻū^ˑtGl˜î"Lz8âPâCÛKūû3ī˙3í?ũ~Ėūņ¸ˆˆˆˆˆ !aģôÂdžČŪĐiÚ˙kđÔą[‡ EųÜ㍏PâúûaYä,öžļ“U˙ļŽ5]˙­™æī&É!mDDDDDD0A„ÉęŠÖĶ[_MeMJJDP@ē +A:EŽqÂ#ûl6+ãļa„˜aa¯ũü5ma…îŦ%íĢanÕo¤"#B"" &„C Ą` Į0åXī`‚œĄņ aÂđpÚ÷´ö*0Åoō+ö)ŠcØãø¨ŌŠĩš\¤U@A0K„”;ø@ƒI„„°„">G^í{%Nܝöƒ#}?īíSõU´Ķx Čá#U‡!Û`”\Rbö‘O„Ĩ`„HB"( t6 † Ϛvš  œh5,uáĻĢV˛šŅtÄRAa5ˆGz ^‚I B#Ŋb"""""""8ˆƒ!"ˆēđ¨ECŠ  0‚Ąö6A{<‹ûņl5DC#á ‰C‚#č OĻĐA &6ŌęŠsB!…ņmz!] ‹ėS8„‰ÜĄÂQ ‚‹fr‡Ũ]4ץĐáŌ†x  ÄB Ŗ†ƒ Ģ,p@„C ŌĐ#ŽĐ‰‡¤ÂDt"8¤XįDa÷„G@Î8 †Ō!œ}ŖqÁáiaˆaX‚#Մ”8„EAÔ3qÂqâ”8¤gŌP‚…wÔĩ“ĸ}‰C¤qđĸ:Pá ˆč$Ęp‚a”E$ZA8 QiøØ†Ü ´*"L˛č B'‚8∸A!‘Ü0ČãˆAˆ …'âĐ XRÖPĨŽBqŌ)ū#] ŦB(qdv†(ã„pĐA8EՄ‚#›]ĐvA†]KXB.ĸ% ˆâ$! –ą[”8A”<Ž“/$H ž!0å8A ĮI:!a ˛Ē‡ „Čú„‰7ˆôĩ“Ŗj*!Šŗˇ¨(Ęp‚3¤!ĘNqÄĄÅ&A A„'paÚA' „ĄŌ DŽļ‚eâ>ļS"ĸ+č爰Iļˆčē ‚h O:nYáDųtGEŅ.D|„’gĄÁH \DŽJĸ’@ˆé v‘’ÚyhD|ú/žEōņIŽqëœE‘Ņt‚,h „ē–SLŽ‹åȏ‘Ņ‘đœB"$ÜDRA ÜqD B‘Đa§ D#Ŗ%´Ü˛ˆDčÛ/2;# A"%""Hp‚eĐBqčōcĸ>GAĘN"‘ĮÂS:äĨ9J!!ĻGÁ8A ȑ2‡ōČR‹ŖųDt]ōėŽËĘGˆī§ČāA#ŒŽŽhE—DqHᰏ„"˛:öFㄤŊˆĒeĐ*!@‚ŠQ Ķ–B2>c.dxē$Į!‚8į „ã˜rCŠAČáHč”9 ˇ,ã’ÜpALsŽÔ BPí•ErTÔĄÂVËĸ:,…)’G… MÅÄo#ä|ÆGČâ‘ĐB""$‡8âLr‚‡‡ÂļË Šp9n‚<.%!ÅŽ6 éâ’ u’”v‚ĄÁ–ADL.B3%$] Œ›,ŖŽmŅ|‘Ų é1Į„DDã‰p‚Čᰎ`x ģqHDDDE‘Ņ‘ĮDua<›˜t‚ XHb ˇÃ#ätYA:ą™ ‚hÂARlDt]ËæÜ›˜sŽ"B""a”9ąČ.8‘G ƒ‰ĮHÎPá$t˜ ĸ"""î1Hb!ŌBØV"CɲR.˜B’AqB4L//ɲ|"1ÄDDDDH â‘CˆA q ƒ‰7) ;¤S‚ļČųކ&GČāBLã–8Š”8ACŠ㈠†—G1A8œpˊ‘0…DFąNš‡!!c„/D|ŽŽ@††."#Šq‚(pū%!eŅ]aDîĐd|DŽœėA"Pá!lü(ႏä!ˆAˆˆ‰‡(sŽ$‡V] ”;#™Ã#šNSŒ›%"č „ ™ö A9!ÚH#A ŧ]AR,rĮ,rC‰1ĶSˆ‘GQ!´9NPä(ሗLäB &ˆé „0‹ ‚aL @’E)"øAFJQ}Fę)Đâ!#Ž$QË „p1&9!É%EqČ-8ŲcˆDt1(|BÄ … Âdt"BČūŌ! Ž˜ˆˆˆ¸ADã‚"ĄÂˆ‰CˆˆA Į(s”8‰Cˆ‰‡)č8įD„C#˛>EÔ ­¤JM‰Q„!!„4šĮ‚)û# !(p@„DN=‘ ㈉C‰C„G…–9n"@ž]T]v]a"úHã‹‚R$,N: †ŲtJëē.‚ĐA B(Ž…(ĐIĄdqŖ&™ŒŽŒâEƒSŽA´rq(q ŽB(މ焂RH Š Cgn –1&š!@bPô"(‚#j"­ 7Į Į!Į Ļ9‘Ä{(ģ Pâ‚ސ¸HĄÁáé ‚2$ˆæäš0ĸ:/ÉšVB8 ]<ĄÄƒhá.$Į(qeĀĄŒaĢŖŽ)2ēڄ†‹ EŅ6(AÂIØ<Ž‚&9ĄŠg†¸â$Į!h„IÉš5hN8A¨Dt%ŅtÄĄÄ „jM„ĐA0†ĐAˆŒ‘Æ]D|É‹ qDē(”8‘@„‚¸ä â$ ÜlA Įh BĘëHE%ËÔMĒEŅt}¤! lGaq†PâBŽ"Lp‚CäĮqdŨBË BPįqŒ, „¨p š ‘ĐQ:TŽ8ļ­l„(âaÄDFŠĘaÂ6Â,pĸÂÄXH$˜@‹Ŗ, ZFČĮĻn8ˆ‰w(t1ĐG N!es$„§hÜpåÁU$ØQ(rĮlBTō ŽXų!Čr9ĄČcˆ’MĀĶHE„!‘ŲË Ã#´B”Ž ´AA$  ÄB%"D‘Ã$4Å’ ˜! #!Ŧĸčē9Ė"čžyG˛øA ‚Á,ŦČb Hē(FŅtGĖd|›d|âčŊKā‚aįQ‹Ŗ|ŽfŅt]7æãˆA ÄH ŖRĄČˆ X‰C Q ¨â6Œ#R#ĸ菘F2:.ˆâ›‹ŗ|ŽEĖŧGpd|‘âčž^.‚ ԏÅ HērúAHč †#EF ČčČč¸9#äp pqaˆˆ„ éŦ§´J,! žGÆ8b$Įdp\ޞ8R8¤pXˆØA*"‰^ˆˆˆˆˆˆ8´!‚ab‚Ąˆ„‚A‡°Ëô&"4lî$Á ėˇ6ČāxeÃc(wČá†\ˆāxx‹Ē!""EN8ĶãŠDDŨBG‘ĖȎȰ Â(p‚™}"ô)ˆˆ‹;APₜt*E!(qAo,q‡&9Į ˛;#†r:.ˆųp× ‚Hã‚B#˜DĘâ""""â[‰‡Ž‘ ‘Ž#†™"‡eà í"cƒˆˆA ã–9C–9CœqëmÃ#˛>¤,ƄĄÄã`vy1ļG i$‚k  xĮÁ$°@…Ģ!Ļ;&āŌB”åxˆœxŖŽaĐA."‡Įą~$ 㐃‰CŖĶ†¨âPâ".PîqŲ3Hâ‘ÖˆáR„qČ.8hÄ …„ $tÚˆqØDcÂŅCœt„˜á$3(q ÕAd2Į$:b'v(ã™í‘ôqŪ‚E"‡l\ CƒFHw8âC 5Gˇa$4B"% !dpØGÂhų㋈@…XŠQ×§ƒ!ą(zdpȐAÄkˆ‰rrĮHrcˆAA‰1ČAČAÄAQ›¨M#ŊŅCČ!ČAávGApF‚ ôBDŨV‚ ˆ’HeŽ!ČãHh]ˆB!%!(t%H‚äēA mCP¸‰ÁŦvĸCˆ‘GcĶƒqāáGA@åC8á$‡+ŲpnGG FLp‚`’ÂG!GŨq8Æ!)B#á">ˆCŠĘR GÃ.>‘œ,DD!(q!°tGLlZuŋä 0š@‚RŌGHJՐ.>BŽšÜ†Øä4Į !$‡)đ‚7Ą‘Č&Mh†ä á#!#Ž,CĶĄ!0⁔9c°„Š8’ĄÄD!ŗŽ! !ÄEŅYâ4 @đĖ":DAEm'dĮ@„!ǁáĮ!ĄķD˜á'Äæƒ`äAČ cÆá ˆæGbGâ-ŒFPú,sŽAcâ4qÄĄČlĄČ* R! Đ8dܚEXâČė!ЇdpČtĸ‘NBHŽ‘ €ƒ´ÉB'EІņ0â‘Įą8â"-Ø8AËAŅ7„a%Xā‚D|Ž‘‡Ž$Į8är˜ä4ĮŗklŽÂׇH—EМB2œŒr ‘ĸ‡8âAPq(q yŽBâA p‚cœr‡Š‚Ä2ō!K!ČŖˆ‰ ĄÄ‚ÔP„Õ¨”9!Ķb"0E¸B>GAYN8åS”åyFÁQą)ÄĄÄ „DN9 ã‹é28Đ ŧTJÄG˛Į‡IŌ ´8ˆx‰2œ‹F­! ŽÁ¨‘Áāy—ȎŽƒ[.>Ą!5˛>GLJ‘Á`ށ8HŽĸPâC‹‰AČ6 Ú.HäGÄDēBqXAÄĄÂD˜â@ĀįĄČ5Ž"‘Į Ür Öí–8‰Įp‚P„SˆÂJYtGQ ™ „DĄÄ:Hú!Ɏ""""@ĀäÜąÅ‘Āđš(â JJ&GEĶ,sŽA¨r Ž@œtC‚!"Į8áĸˆ=ÂADt"]0„ÍB8âChr!˜>A w†ÁÂTHh“ré%8„‚ bC„ˆ‰ ÁÄ{8īnÆ™ä]1ˆˆ’ĩc\| „Ąė†qÄHŖˆ”9!Ë(y ĮDCˆ“GA ĄŸdČ c´A]Ī*;tc#ƒ‘ō:˛ 9 ƒŽSj㸉CäG(p‚‡Á,|Y.ˆč‘ôU‰‘Č5ËĻ8A¨ņ ‘ĐHú#ŗˆēRJDpŌ„PâPâA&9C„Ž@āqņ`„DĄņ‚`ą‚GrĮĮŧQ‡!c„GU‘Ķ $ „h"tG˂‰î$‡!–8ã‰q …0åqõ Žō:H! `r1āá¨=bPéqŅÃLpЈˆ†M ‰p<ōĮĮdpÍ#†ąČá˜\ŽG 2n1aJ„!lDJã”9C…yô]XAŅĮØ8‘G…IPíWJ+B„0„J‹‡(rĮ!˜9ÃXzėP‹°õ&8n8\v\B8 ‘Ãoãš ƒ‡&8œpˆė„â#”9Į#2;¤Â ļ Pšáá‘ÆG#†™"r‡ #.8ĨB@Āâ#bLq‚lDøˆ„„ų°Ú:.ƒ‹;‘p< „㈈”8‰C‰Į Į!Ŧ8‰qÄÜrŖŅœĄÂHŽ2>ĮÍ>Å)hCh ʚCą ¨8‰CŖø‰ˆŠ„DL9N!IĶ(ä4Į Ö9zÔãŒV ށ#ÄtG]„S°EqÃĸq! q@„†Ä†Đįâ˃YpvqØL‘ĐZМqĄ0čÜDDIÜÆ]A ‹Ą"ŽAŦq!–8œq `rCĐ8¤C`ũvÁŅ7V’BFĸš$8ČQåÔ㉠8Õ H)t#ĖK;"ŽB$‡ōC‚¨ B"aËIŽ1‰C˛äī7A,E\p‚HQi”9 8ˆˆˆ …‘Ãa āÖG 2:–8A@¨ãˆá$QČiŽ"$9 8"=!ráøÅqDtōŲâC 2Į~,DE"WBD†@‘ˆ¤ĸ#†Œąláį"â@Üp–¤4Xé˞‡!GÃŲâPá$đôA¤qeÔEŌBPä‡!Č‚㈠„ Šq \sIˆDtMÆ „ø LŽ5ˆƒĐ”8Dtą‰N$‡!Ļ8ˆ‰Ž$‡!°p@‡†˜ãĮ!!8÷DŅÅËcÆGA‘šNņ&8A q xfC(qJD˜âEQzĶ&8„Ŧ"‡ H9ã‰tGIĄÃ ˜áĐA‰ ĄČƒn9> B‘ ƒ‰rŖœp‚‡!˜;P帘qėąÄSŽaũÁ†‡xˆˆ‘GČh ĄRlH âE„#”8ž!&8 …ÅČQÄA76"@đÖA!"Ž$3ŽPâ)Éž‰ˆA“ …r‡$9= ĄH,#Ģĸ CØ98ã–8”9!Ō$8P8‰ĮČi:#Ą8§ „R ĸ"@ÜrC8ËJÄė‰dx¸ģ8į†ÁÄD‚¨â""–,ŽEÃhXä‡@ļˆg!‹§ ÄB0E[ą8ėŽáHāŲ8á¤MôA‰Į(qē#‘à 6#BHpĻ™ JPáäÄo(rC‘Ž""Ɛ B( †Sˆ„(ļCŽ7@ČājėáŦ9Į‡†XäĮl¨â$ ,y7Ņ)ŽŲ ƒˆâ‚ŽĸØtPäНÄDDDŠ8B>*(HŖˆä2Lpw‰qČ8ˆåŽ‚(rC8qLqJáGãb¤2HrĮ&9Į! 0ė„I$‡!Ŧ8‰ ¸†GĖ›č˜ˆ Bĩd6D4Â!!’nî„Dƒ@â"$3GĸĮ-ÄJB#¤$3Žä;¤2Ö8ļV<5 …€Čāx7Ęƒ@ä!ļ8“vGÁ°Ž ‘ÔD§8╠a‘Č!q x09c˜rC’AŸËá—(}˜ÃE–9Į Ž"@đ^Y7P˜‰1ú xjž!‘ä"!80H28áÄC‡ dpØG 2;#†™â8!Ɏ-ŒÚEAqõŠ9ĮÉaFVæâ‡$įî_âô„㉋@„ĄÉ$‡!8A qM"‡ŽÄ ĸ"ˆę!(Į!SŽcÅ2ęx)ÅŪqŌ(rC˛8daE—š‚ÃÆ8‘GŽC 0DDDDlƒPáė!Ę x9Á”r CˆdŪĩHB Ķ(q´…‘ÆG €7œqdpČ [ ˛â"EpĐą8äÜà‡!°pˆęPâ‘NPâĄ.„āŽ9c$IÅ ‰CĻ@đ×Î8A‡cŽČāļá𠐃ˆ˛āxЊ„Gä Ž0Ä-ˆœsŽ!؉‘Á2Į!GÛC–;C ĄĘ†H3ĸƒ[ ŅČ+ŽqÄ6,Ž0‚LÂ.Ŗ)Ų2c(rq x)ŽAaČŽ"’ˆ8œvGä2ÃÄQ ƒÂ e8—d#ģ# „㏐R! ›ęƒCˆä3Ž@đÛ%Š#ĸi‚lã‚#ė&"%*ČāĢ!GŠ8âE(âĶq$ąCĮGWp„ã‚äAÄDĄÄ&$‡(rĮDtGH§ ŖŒĄ" ÉJ/‘Ų$4ĐģHDC‰ŌDJ!q(qŒB#ĸĄĖd|!!mã‹Î9åB@đG!¨9q낍â2oĸˆ‚!ö%@đÖƒc†ČAÄ2/""tˆ7¸†ˆ‰Ķ8đŠ! ƒ†,JR ކ¤Aķ04ÜĖ(EFČ5B- ˆ’Œ98œxEC 3ĀŲãŠ6ƒ`Ž ØAh㇜sŽ$2 q! ŽÄtG Ä$ĮC„ąĻ„E˛‡„66nÄHdåŽ"Z‹bPā‚ĩWģA˛ c<‚AqĮ  qœrDQö@đVڐŖąxfĮ ĸœĄÄL8‰ GH†`åS”9Į"F8<4‡(éF.Â8īE8‡bLsŽ"$8åšCœa‰ąÄâ ÜpėĄČė†@)ģŖ"C 5Į ~9qĖ8¸ˆ‰!Á+#ä2EļâØ‡A$!‘!$,qHąÄã‰1Ã&â28)œÆG €R'H[aÁ ¸F@Đ:⁒DHi""BAĮ!8ōn€= Ú9 8Į†–Ķ tqĊ9ĖrČiŽ@đlr$ į‚XäĘDR(vM|ŽŽC(qļāŌD~͐4 ‹‹$„D,ƒ(ä4Į$9c‰IŽB""&†ÁÄdŲ`H¤Ø0‚ė Jō‡ Ö:ˆ‘G$8âEBDƒ\q(á`¤\ ĀēąŲĀĐģ Q 1Į(p‚(âLq8ä‡M„Ņ€3 B莋 ƒh#Ž9Č딂#„HA(äc‰!Č8‰!ÄDIŽC`âE"„ãœr1Ō$8‹dxŽŒq!Ũ\ ˆˆ—EŅt$MI°äÎ84 㔚Y!ÂE8Ag  C„FtĘq(rĮ H9`380Š„•ĄÂ1Ē‘ĐAA‰„] FqČ-Œr ­J‚¸­ îPePå9NIĘr1ĘrtĨōņŌ$S¨A#Z§"8ˆ BPä‡(pĮˆē@„†„ē!¨ˆ [8í‰ä 7*…Pá„—EŅÔá ĄËĸ> IĖYtGA~'øi‘ĐAĢA PI"<_ í´A š#Ŗh ˜B]ˆč-ĄŌ.Ž":.°‚†":ÃN‚\$‚h š ģa ‚⭑ŨDÎHrƒ‚"9CˆmP ˆėN!4$t'ŒˇYAŌÂ#„#†@‰(Ë ‚g„‚ēAtAvÂl,Rņ‚ĢK! ŽŌ-Đ] ‚á)[I°‚& °I# ˆųí $t‚@ģčē.‚Iėh ˜C 8A‰û_b’AŲÜ YC„“„Šĸ ã‹"‰ä#-ÂŅ}"đH*’Į0å@đV˛Ü§]Ņ/—Dv.C°…'‚‚8J†ô‚YC „ „m¤¤%>B0‚ ĄŪ(0˜ ŋnđ‚D$!ڄ!CÚA )ĐAeĐA NC‰}B&„ē+DBDT B3Ž…m„Ч&\3Hāl3j$'ˆœDęA*!V'PäĮ8å9Cœr‡HČ #˜rKM$8‹ã‚N;#¸A4,!Ųp„y0ąDN8A ĮAˆ`°DtI5)Â}DtGA oŒK ‚ $!—HtC—L/h$°„HéGDt]@‚!# ‚›6Ž Ž A"&f4 ž,"‡)ĘIŽ@Ė qä,F[åŅí-”2īL$ŠW´qÁRc<6Sžĸ ã† & ™"ĻGÂÂR”ᤎ;”8 …$‡‡3˛8ÂhNåCˆ A0…] Ļ‚úLPAĐ";H ™N‚xA ‚ö‚B „;OåôÂDE @… …ė&""!$QĖ9C„)v@ļaÎ8‰Įā éeˆēŠ‘ô'AÂiá&‡°…Ab6qÂH Žš„c J‚JG8ãŽ)v!‘Ú!IŖŽâ)qH …„g „Šp@¸$`˜ˆH㠐A°ˆé  Â!p‚a„ U°„l š0‚FÂoē>]A š.‹ĸtv´„DDˆˆŒŽ#&‚i¨ėŽ ÎĀŅ:.„ešŅt}Eä+a+„LBdq¤ĄĘtH!Č/Į8åqÎáf@ŌNS„„N9!Å"Į)Ác¤ 0Ž>Cå8ABaË ˜BaÂĄķ!„( ˜Zļ†GÂHà‚n‚Z% ‚abÂaL!HÆL!‹h A­ ‘í‚#Ą.A!Ę:čBDtaČāx5‘ĐH B";Ar1ČqÄDXˆË|A9 \ ‚â@ž‚ÚHà—;…´NPâ$ÜŠ•´‚Š.Pá'!FrœDĄđ@˜BaÁéâ,"HĄđ’B,a Ae¸H ¤'ŸXA4A~BA ‚ąL„ ėUBĮ„qŨBZ …ˤAeŅtGA#—AÂ>aAfä˜,¸ æžEĐa0‘‡HĄÉŽAqķE…Šnj‚DL P@œEœtZ-Ļ !A‚ ¤ ’›ĻqĘHfqÍ1đŅOáĻGa Į aŽqÅÂF­‘đ‡eÄLŽÂßI'ĄÅqÁôqĶģ.‚ „L T LU¤_jĐ ĸ6Aô@­#¤† $‹ŽÚ&ŽB^Â:!hHúB‚ vŦŽ‚ ¨H^#†Q A\({B•ԐA F4^Å#h ‚ŌAH§{¨’BSЈ1Ā›.‚äy4  Đ˛9ČøBqÂN8A„lˇ A LēåaĐEZ Ú!‡ …í# Šp‚‚Įa4^í ‚T˜MĐ ļ$tGH ´˜M(@Ŗlã‚H ‡ÂA‚ ‚ą#Ą@­$Ô$]3¸XAYAEŌŲt†ØĐH%´‚ 8ä߇(v'ŽZˆųT °jA4ĐA0‚č ąŗŽ †G „"C1Īh$‹§Xh!†š8⑇Aļ^ŠD‡‚)Į]TŦD ‡Ü °ÂŽ‚8âqɎA ŠA{ÛHĄÎ8 …‘đAXí@žá ė$%ąŽ V~]ˆ š‚ˆļ‘|B‚Á„Yt"Ęp°‚Âč …#ÚCB$H+ —@˛œDC]".ĸ’1„‚„ °@„ސAYN@Ģļ">L.#á­Ĩg „ã„‚D†`å D˜é؈A‘G ‚œ$"%% Â0éqÃ#´GB  ! ‚a0…"Ÿ!dtŽuļ ûi ¨%ąž ‚ Ą@‚ÃÁA4C –MA ĄĘAe8LĄÁl!0ˆč „B Ą!`’.„ŪGČč Bƒ„"¨$°™Į(sŽ@ØPAW’H›D}Đ[I °H$C„L-ZAˇv ĩŌH ’L ĸC0p‚ˆ žč ‚ar‡8į‘Ņ#„‹  ÆGGHD㈄ #øH§‚„î!)8AXB­ A`‚ÂÎ8A XAA Pč&qÂ!I*.‚ ܎‹ų 8 L h$L$ [ ´‚uh ™C‚ÄHđH BGEĐHŽ…ĸ莐CeĐPŽ82>‚.‚cbEĄ,yŲ’.Ĩz’AøA1„ „L!P’­Ĩh OÃB‚ P†GÁRA ‚R‡K ģ–9Įd} „'ã‹A8ˆ‚ $8Ռ LHŖˆ„#Œ„' ™ō>ˆ„´ ´qØ!)ÂŌ.ØM ‚hC#á …  J‚%H ‚đA4@ŖÂūÂa2Ŧé’ ÂK¤6GAˆ š!ˆ„’ø¤ĄÂS)ŌCeĶ‹+Ęp‚HhâA" N&Ō*DYĘ÷—EÖXÛ …ĐA7j‚ôB‚&Ŧㄠ„ ‘Į!M î4!8č"‡˛>A4aĮŒ9Į‘Æ ÄÜpA H&cœq!ŽB“#á´(rÜ …„Ą‚PJ)4Â8ā‚  ’”8JčXí„*@‚{IAXÂ&´ ØA ˆ ‚!áx ˜L„ ÄYN@Ē Ŗ@˜ĄI,L a0…™ÂA2œ!/„rčē&VĮEŌ!Ú‡p‘f8’˛ļTT„Œ‰t} ‚  ĻqÂ,B ¸A!A Ē( ĸŽ8A0†Al§)üU‘Đ@ŊZI a”9C„5Čī ! 8A„ˆHĄÂE ‚c„äÜ „ ˜BPá! ”8IPA}‘c”â%"ÁQĮ&âôI8AÅ2;/a4L R (¤< š@Q&‹ ‚vAxA FA, ˜@„ ‚h´B!$A tA G ‚ác‰t‚ ČAʲœ#č0šCČ‚˜âHq&9NVÅʒC ´B!ÂÄDD Li3Ž‚AÂRÂRI Â&°’AąH$¨X‹H! @†# "‡!!`˛‡ ÄJ AĻGČā„q‘Â!i#Žqô\ĄŌA¤Sˆ†ĩĖd|!(rCŒ39NôŠ&8 ˇÚĶH$C ˜¤Š- ‚A‚ ‚=„„L!.‡ØB I‚AÎ8Ai”á °A4a ÄB  P@œDžAa B"tSĸ(‚1b!Ęô‚"$cˆČņC2EЈ‹8å9^ĄĒ ĐMBAŠA)‚.Ú!Á´C‚ Há5†Šub*  ąAø“ „E‰P!eĀĐ ŲĖI(ėŠB't"] /—GŠC—Ō—D|ē6‚ …č$0A6„Ÿ R+L㠁XA D‡`Ŗhh㌏U sŽ ˆōAtLŽĐA4A2;„4Pé¤Xá AAk!) ‘Æ A2úHq‚ „,,v†&#a ‚ސA“ã‹%8‰‡{K8â(!GÂŽ$Į8âqÄDD „HeŽ"EH7qDâ-“D0Æ_”9PRz ˇ Čč‰ @„DKät]А¤$tm+Â- „ ā‚a°™C”é ÂHM \B\ ‚ Ar‡H*GqÃAr ‚ š[Jt‚E ‚!u!PHpā‚Ū‚D †ŠM„&Pá%Pá) C˜qą,ã‚҇Aq ŽČ愘â&BąÄP[HŖ‰CˆˆˆĐ98ˆ’âE"Į&8“ ą@A A„ĩ#ämGŅt]p‚í"č,Lĸa7—C°„wËá6ü ( ‚(a ’#úPÔPH BS¤!ą &ŠB#G ˜L!&á=ŽđACĐA„ „;A%9Į B Gā‚J ‚° I[œp‚Aq ‚Ž!!g(t‹ã„‘G@„…DN8”8”99 ã”ä âBA r(q‚‰8ŠÛ(ĮƒeЈA‰~"fŒ!A °˜A—@‚hBâ%ĐA0…„ʰ˜B_-´9Į&’H T„C„\$A$ ˆø$E@˜ĐAp‚ŌarĮ&¸KŠĄÂ""’TB,§8âPôBĄ eH!) ˜Ø‹ ‚, ˆč La”9ĮhÜq!nL¸B8D ‚cˆ’HŖ–;.Hã‰!ÄD „Š98“㈉Į!‡‡Ž8‡HãØrcšÃ#ĸ 䈗EŅ:!Aˆ ‚"&A0„Kĸøęî) –)%„O`´Ę ‚ah$A{BH ‚ÂA´‘‡†Ž:M8č ‚ V‚#čãŽLŽĐHh§ᆠļ!ļ(#ŽPå8AŅŨÁa ˆ”=ˆH B"qĘâqÃ#˛>GÂ(â"%"$‚!r9†ÁÂDŠ98”8âqėDD$!‹#ĸ>aADDē.‡.‚BD⏗Áø‰ 0ŦžĘrœ! b!q ‚  8 QbšA~ĐHà• ?X”8@…\œB hGA~Î8„BqÔ Ŋ„g í ˆ÷ !Ab$Į„!°Âp‘!Ō‚GeÃ0ĀđÁˆā°GČ菑Áš6BEDâ"-Ä8‹‚Žv&ˆhD ˜B%ŌGĨT]$] ‹Ŗh0p‚H TL!‚Ę!P‚d|($@†ņECAÂa=’ ”{H-‘Đ&Ú'¤ĮėR!I‚!8ė”á ‚´„DB ąA$BqÚ0į …ύ0…!GæGĸ9‘Ã(Ž r91ČAÄ!"Ž!$QÄDŠ9 ƒ’ðČÐ< Į!’šƒ+Į†‡’.‚E$„KĄÂDt,&@Ē,S#áĘģ)éĨH †!, ’øA Mž'$ė!BČí„ŅC–8@„pA‚ h O"ŽF8i‘đ˜Ciz!‰%aÄRœ˜â"qÎ8„Ø8‘(â'HJ‘ō8 ¤p Ž „$rw Ô9Œ7ÂYcœ|DDއ.‚K ‚a t] tL‰tL/†](pA0˜„‚Ab( ‚Œ}ÖÂH$!´@¸@ƒ ‚ģ‡H „ㆰ‚— ‡ˆ„‚ĄĘî‚ÃŽ& ļ\‚7ˆI—|z8ä ä6"LsŽ$QÎ:BC8â$‡(âB$ !˜â$‡(sŽ"B0Šq# @„+dw;EZ%ЄŽMaÂeXMHl%(†ĄL§)Ė8A5I°’N ÂA8Apí ‚§H ‡‡pŅN'iPöF: „PAD …qõd|‚Ŗ¸AY1ƙ㈠BPâ‚‚‚(âLq$9Cˆ‰‡8â""A q(q!´8AĆqÄDÜq! xČ,@”Į°ĐˆduH%‰ä] Š Ä!ÄDp’úADt‚A-ĸ¯ H „PI :&  < š„• 8ŲzMHã‚8¤ES„U´CæJqTŽ8Ah#™C„‚ PA Ú Î8”8„ˆœq‡‚! rCØ9 1ČŖĶD‚Drq!"Ž$AÄEĸœ†˜â-ˆƒQ”>vĄB't}‰¤–]ü0‚ A…â( ÚIĐKۜp‚zH!´q„EĘp66A~BŌ „B ĄA(ĄĐA ‚ @… °‚ÆÃ !‡!ŽBC8âHrąÄĄÄĄÄĄËĄÄ „DD†Đâ"C,r&öPå. ‚yØÄ"]B"q ĸ>‹ ‚aL!|&!Đ@„,R1‘ĐK&…JH ˆč ’AŌ %Ō QÄJĄÁvá^ÂHBlN8A9Į ,PV\ …!$ Ž8„”8„ˆˆ‰Č5"%BŽ"$‡!C’ƒƒ‰C’ąČeŽ"."@– ‹wČDKĸčÂ&‰t] D N(">MaЄA$‚ž BŠŊvíŖ ž!-…M°’h ‡ č"‡&Ú 8@„ „BA´ĘqŽ*Pė‰ãk˜äc‰1Č8’§!Cˆ„‘G‚Cˆˆ<ŽPđŠs@ørĄŽ­Č§Ab]IGÉŅ.‹ŖčDē!čē!!TL(¤  Œ  B’ * „`‚`šA 8@›A ‚a #Ž‚(rœ ˜B‘ĮI1+eŪ­`1c´Š㈭ˆœsŽBÎ9㉠ˆœq"Ž""!$QČAČAÄDDIˆĐļqÁ…Ä"s'B"]A&hD „Ô‚DG0†‚&°]‚ đ‚hPLN:N‚ Ĩm ö’@ŠBĸC„H Tīļā‚AtA.a~Eã†A¤IÄDHŖˆ‰!ÄDH[lG":6‹Ą.‹Ą8‹Ļ‰t]ˆ—Ōč ­ē!e Đ ˜A EĐA  #H ‚ļZØh#ŽXI']„‚)ÂBö´Į0á"qÎ8ˆ”8œsŽqČAČlHc‰r9ˇ! rC–9C‰qȁ¸ėŽŗĄ8˜B]B]Šē>‚B „.&Ä-„!Đč4Čč%í0‚ M ‹ E8A= <VŽ+ĐG „E†ÂhÜr1Å#B$W!8â@đÔI$ÜĄĮ ŽČāˆDHd˜öPâ"aû.‹Ŗi”œ!HĄ‚Ō0‚ „,!>O„‚Ž‚QN ˜¤AqŌ^„´‚>Ōh Wa  †AՔ9ĮGÂ&‚E8„ˆAÄHŖ]8A0˜B]  šWA6‚á !!h ˜!)ŌŌA"ŽBEN8’§ Ô9 ƒ‰Á sŽ(Žƒ ÉĮ píŦ"‚÷Hē6Ęđ‹ @ģAaq‘ ‚DYX—B!$ˆøA ˆęp‚a tM2œ ‚ ØC„*ń*Am"; „RGp‘Nâ( \!Ž$ĮH „Š8„’$"Lr Ž"@đŖ“qĸŸ[†+Š| ˜BB9tZ´‚, ˜MAh„ŠDm …”áŒ$ā‚ ‚qaaa"!t%ØID!A>!"Ž8‰7‚c„‘\ĄÄDD‚@ņ„F Ad09vîÂ)čã•sÛBL!V‚ūĐA0Té¤'ĸúEБŅB7„°„ „h ˜B Ģ „("øHZEŅđ‚J! 6é8ˆ BFsŽ%‘ĮAƒ‰7&8‰‡(r cØ8Y  ôUáĐØė!‚ e„0„K ‚Pá ÅE!í I ŽŌ ϙEĘp„âč ˜B‘Œ ˆë $ĄĐA%H ‚Æ) Ō(p‚HA!Ŗ9Į8âPâBA0„˜âqÄ BLrœDIF9H.8<7„Č5žA ÃI´Š‚Ø,ŽA@ļBN(}°‚ & „$Z&„ˆA0„â.„ē.‚KĄč$M ƒi M BŦ§v,ĄĐGPB'ㄜp‘‡hBYpØ%aČ8䇎!"AhpH"8C]åxA1(wbČ-ƒhįŒq"Ž"( °‚aĘsĻ$t‚ĐI—ﰐRœ LHøA0„ „L&á$t¤‚>‚Aá¤' a"‡ ‡Ú+œq&œvGd|!HYĄ(w(q0įJåŽ6‘G‡!0å@ūĘ!@…F]ė!h  đl‚ØeŽF8Aœq"Ž$QÖĐAa Î9Į!Ô,ú.‚SĄÂ„.‚ ÁĐ ŧž B)‘ĐœC—A8A0˜LÎŽĐA2‡a ‚}ˆ“„ŠE,§Ž8‚Dâ%‘ĮAœqšCœq 㰄D6A t8H ž†Ã bPä â‘C‘Ž‘Į‚IXA  sŽ'a„ ÁØģtMđŌB¤"GIFĶ?"tN„ ˜L, ˜B7A%Ķ= ­">š(rœĄÂDJpHp@ŧJĉC ‚R8ä â! wQí‘ņA% AGd2@Ū>$Üt˜tŧ „PH FŌH ‚H$%Ļ"Ō"‡„ Áá,C/`2Ž‚ •hēˆ ˜X؈@ƒXHēÂH-‚@ácS„¤qŌŲ‘ô!!&8“ „ „HgrCœqŽ@r‡)čoā‚ahĄã hl"‡DŒrc¤!,HŖŠA(( ˜L!ÂyNqÂIŽqüæ!ØH$‚(pŌi č ™tBÚ,ē.ļA„N"čDYĮGą‚H Cŧ§!ĸ„áˆA A!Â8į C„‚DIš8”:I qČŖˆˆ´ė!ãČāJãbC(qa q ‚‚‚ÂCPI„ÂĮ!HÃéNo@„ „vWB Ū/l Ŋ„)/´ĘÔęˤt}ŌApH NNS ‚‰C„„„ˆ„´Đ‰CšC˜tˆ8âS„œrcˆ‰Įî D Įģ ļ8‰1ÂNå8A‰1Ä Ad|$$tIBE9‡čYøÎ9C„"BÜ „¨‚ œpvŠB;H @„HčCG/°TMAí‘Æ †ÄĄö\ˆāät Ž8”â"*Lq(sÁ"ŽĀP\2”1ŒFÜHŖ‹#¸‰Ü§!AĐDtGÂE× ˜Q åĐAAƒ#ĸ:1I1°’F* éŠFŅÄ&ˆ t"ŽL.‚,゠ĄAq‡qYtGČč‘G8ãœqR‡! Ž9‡,qMÅčĄÄÜr‡!IHŖ‹{  áÂa{qôčēSˆƒg ˜Bš R LĄÂ,PA8A3ņNPØL¯ „A80Ŗą QŨĄÄIP鈒„'ãœr‡Gd|ˆW˜â"ę@Ôc‘mÄpA2;œqĖ9ĮŽ! …ģGiâPâ§ãéI„ øA¤S„;AaÂŲN +`¨ē!4,ĄÎ:I ‘C„„G4–Â8îSˆA’ „Š9ㄈ˛8ĀØlˆ;ėŽ °ØdÁŌAA0… ‚!"ŽA¸áŽĐLŽ‚GGp‚ŽCeĢ"yq˲ Āî6"""&BPá"Lp‚Ú  a{A A ˜r‡Ürč „â.ĸ!ˆˆH C&–GDt„¤‚ė&mEB`‚°Ŗh`‚Ãč AeĐ*!HN8„‘GnA ˆ”>$\ĄÎ8؎;dÁHp‚‡!c„¤L„ÂØB=B( AFSôL,DQcžÂÖ4ˆúA"& ˜Bf„N‚HPA‡@‚‚d|bÂĘD˜á%Xá"B""šm¨œqd|!! Pâ,„đ‚h „yĮ&*)Ęp‚†AJÁ8 B&’ņHƂ!ÂDâ!8‚ Ü58† Šp‚h$SÖ$W & ‚&8mpî@ÔA‘ÁlHāš.bw8ⓠ#á"č0˜ĐHjô‰'HbÎ8A¨@›¨@˜đ‚hŽ‚ˆžI"‡PH§ a!Ģd}^‚IŽ$ĮA „FÛ!’ã‰Į8æ4Čø@ž‘Į ”„°“¤‚Ü2‡)Ęp†@Ÿá¤C ՑôÚ[.¨ š¤S„‚h+čMBLqQD C8øĻAlĮHIŽqÄ …ĻGÂa ‡ õA%—A(A2>äĮÄÂ.†ÄK¤5ĄTX C‘Ņ´’ ÔL¤áVáqVÂR‡KA#,#†@l#ƒs{ą!’ ƒØˆAŲaĨˆ„AMAŌ„#ƒ,ŦĄËî]Å ¤ŠpTN ˆ šē#įĐA- ĄApa!ĄI!kqaäĀÜr,ƒm# 4A F:@œuiP1ĐA!č%ˆ”8Ai0ƒ#˛>‡P=ÅáŲNPų1Ëãœq§¤qÉaĐA$L!&DĄĖ>C oˆ‚ ( C„ļ‚/.‹ŖčL$‚$| ČėēR$Oˆm2áČčŽ\†Ä˛œĄÄBDNį‚"' „JBxA˛č „QNPâ‘Į0ø ĸŒ†”i. Bŧ6—BGB0ĐHĄÁ„@`‚Šh* "C\qq":ö%"EIŽqÄR‹A&„ē!‡!(sŒ¨  ‚öœH † - ˆķ)Ņt%Ōa ˇ†Ž8ABF"3Ž$‡$8œp‚â6qÆÅ ‹á!A) …,BDē&UŨpĮ„‚A¤H*&åĐA ÄO \C ‘đ1d|ŽGÁ”ŽĐ؈˛;¤qÁ‡$9c ‚8âÂ&} †Pá"Ëĸ8„*ÂaBŌ Aí…A¨A0˜BBĘ$]YĮ!!a‹d a§Į™Ž)ŠBB"Pá"qÂFGÁ‚v[ŽHŠIØ`‡†Į[Aø‚°’q Øâqԁ,5ÜDYĮ&8“IŽB! ‚’AytC"œN:G|§ÂRˆūGA8œpÄ ˜AiZ0˜AI$’Ô\H…B x)d C8â6ČáøBLp‚ląĐ@Š0˜TÂA$L!‚h¨8ø„„DâĄĐŒÃ¤ i:YĮ!L§ „D ˆ‚"8†Ų ĄŦA N:BqÁČ!Q‚aa TŽ8A„ĐH§ÄēHú/Ė$- ØAĻ‚HV ĄČŖˆėŽĐ8ŽS„”:GC#•„Ai †qÎ8ƒh šCä“a tC‹¤B„C‰C„p‚k—HDHP@”6ƒ(â!Ą)ØBqÎ8H5í„!„’U„–",ĄÂeZm2:@‚ A¤C„B ˆ9c< Į+2Q¸AdQÎ8AˆAšĮ)Â! žGA,ã‚N: „JuŒV CI ‚Õ„0ˆ`pA<\ŽĻG ´ˆøB"aĘr‡HĄÄFŌ”â.Â! ‚a0„îEÔŦhu„)ʧÂŨ&‚ ‘ŅHH° Ã\r¸ĄÄ[ x5b ĄĻGeĘp‚ÅB!qÎ8A1„‚ „"‚ …cčēŠtAza BH Lv™2†ŧccb($„Y#ŒŽHà‡eĐI„i‘û]^-&G PÄAD| ‹šPØ9 ‰Į8âCœvGh$)U ‚å9C¤C•„Ę!ņI‚!Ęrœ`!oą8įãía'8įJ$í¤B>‚)a,CŲB#0 Û¸°…—AtBÂ/I§ „˜ęĶā‚ĄĮ ˆáwb‚q/&á$Į!!ē œp‚‚aYtGI0ĸ†Cqd|!ąá!&8ˇąa Dua î,ã´-ö@”:B"BPárœN8AX7‚ 2H…„)‡ÃļØå9Cœt8†GDsGĐGH$Gâ*Kr‡ŧE…e8ŠGDD ˜B* áč0U(x÷a 1ÂD˜åŽ"'ph)$I.Ō x| 0Ũ‰Į8á"Lqds#˛8ėŽ‚ ‰š B@ņhXúN)$aÎ8œq HąŌ!<‚¤$|$!b@ö8M[ŧ†ÁÄZ3„Šp‚„B"qĐAÔ@ ä ä :ÜđÜøÜ(,,leptonica-1.86.0/prog/pageseg4.tif000066400000000000000000003402761506303110300167420ustar00rootroot00000000000000II*Āūl¨†H)Ž|(r€XĐ1 ļdĮ0 DH-§!Sj"C$W* qΙ¤DD‚؃”Ų5‰¸r°Ör `“ãĮ˙˙˙˙÷õū˙˙˙÷ōßĖ>ԆPū‰"#ĸ­”€æÃ˜Cdb<3Ē*ÁA´V™ČÜ|0z0ĖšĀ œ l5ʐ¤prėŦČčģ#įd":!ˆGČ⠁iŪH¸Gąi,¸”†$M†cbB‡(rĻt9îT`ŦĄĘr‚Č"4؈°CB"""OQŅtD":#ĸ:#ĸ8:a3ē♑ŸD|Ė4Pd#pÎGeĖÅ6D˜ 2‘Ėžl aˆˆˆˆˆˆˆˆˆˆˆˆˆŲ‘ŅQ(3ä\ŒĖ‚ŖˆDtpŽ´Xˆĸ‡ O!ˇČæa—PYˆˆˆ‰28G;ø‰Į]äˇAt"d‘Y^´GČęßN­…žB $„I&œŠ+)¤3ÛUŌoÔ4„TȸˇIHtmēÜ˙ģđ‚nôŸĨũ.ē} ģđŽí}'e;˙_ŨžūģKéę˙aũ÷˙ôˇũŠé8nííÜō˙ Ãũûũ:VĶzđøvŌĩü0˙}‡÷Õŧ0˙oaÛ×̰ßíá‡ŌAÕ7ûx|—@Šp‚˙ˇˇit„EŊŋ#-ŧ7ũ/}ū÷ģž˙߆öôĒ­ūîŦoDuÕŨv¯ø˙Ęä/oßúUÚ[û™'U[ N#{imûéDF¸ÁpĪļA}ŦDD8Â# lŽ‚ E†”DFČøá†(ˆŒ˙˙˙˙˙Ëz¸)ÚÛ)#ą…ÎÔ Ĩ>Ī “p<Ÿ‡°éēhΌ„đ ¤ĖŠĖv7˙ß éĒ„É4 d•Ūēô‡pčņOÁI`Čá æ [•GuF—w}C C‡xĶpP˜):+‹ĮeõĄßtOÉĶģĶĻˆÎę/ūę÷„íû†Ũ{åp¤K¯ČÅū=õģ_NîĄęŋ¯˙]n?ūüŽyWõ˙üqûÅë‚xG(‡˜"AņļC"@Ī‘˙.d…šy,ō1~K˙˙øôlt-°,#X`Ąn #;ÎÁbŽĪ  öG¨4E\f‘‚(ÄNŠ#fxČdQeá—č4‚ †MĶ%ą*é6%@• ÜZŖģEāhhųŧhEŖāhĐ4? ‚  ’3ˆŪxR Ę#tFFᝠ‘œ˛s3VHYY.ĩÔ/¯ûúé´­­_×wŋzz[hZv›IŊØA„ÚM†Op“¤Ødž­¤Û%ÄąĨ„aßŖd"ųé…ģ|hŅ ‚„Â. Ą0ƒLa A đDQyÔĘÎ A  ĐI*t2Š›Ę õίČZ_­˙˙íöŖcī˙­?V֖ûTęŨ>“¤í5ôÛUĢßÕĶa“Ŧœ/a$Ú<8č'‰V'ˆFv„§ĄŅī¨EÃđp‹€Â`Ą0ˆ~3†˜D9ƒA˜#bčˆ9XE¨?>fl¸ÁG'ĄvK čF ƒ>Äõ'Ns:ĸ++ kŋ˙Ąú[w÷Ú]ûīi˙z_÷öâļôëĨ×ęé[N=? 'H8aŌl0˜M¤á„AŲ.'Íúžč&öč&ŅíÄÃŊ Ú5øŅąŖåßCGƅŖX~Ą FhXMÚ0ė Á0A„Âh…Č `Ļlš]„f! õ˙üĩxl?û˙_ūã˙ûߎŸ×WôÔ4ˇö*ũ:úîŊk]jŨSĩXIô›Ũo„“ŽpÁ8eZNb)Z¸p}’¯I?ŧˆí&XųÄĢaÚ:7-ÃN,(B5‹Öô[ŅĄ“o˙˙õßÇ˙^˙ū´‹×˙úãŽđéõãÆ?ûũ!ĐV?õū˙ŋøũ5ĨéAôŊų;[˙áĄđĖu~á‚uÚ &Ķ̤Û1e4 a ÂÅ2Ŗ{LŒp‚h4Ø „!ą({ $pՆ@ aŠŠM; 6NöUģKOV×ũ˙ûĶû?íŨf˙gķiūÔĮūækļÍūŒû4[˙˙ÂŊێ""#B#/a`„XL111 |†x‹A„A âƒlˆáąAjÄ4ĐpĶNí´iĻēÚduÚZ{ %ß°ÂZ}ė5´[[õûøaúũĩ!õ×í™úëáÄŅg—šgŋЈˆˆˆˆˆa†0……;‚.ƒ ą IŌ 0ÄĄé„AÄĄŌa0ƒA„AąAØ\0AąA &*!„M‘0UđËûĢh>Áļ)5]nũ†ŊĩūÖ˙ū×^Ō –áKøˆˆˆˆˆˆˆƒ ‚B"$č2pųb^ÂøĻ™'ZtÔTai†ŒqØI‘za0A„‚VĶ8ÛVŌOļ*Ë÷úė/{„rįÖ""""""""" aˆa0Ĩe…™(ʸj!4_÷i§†ĸ˜ ƒ0ƒiŒ   r PA°ŌbļŽ"""""""""""#b"L Â'Aǘ¯m,SMđEļˆˆˆˆˆˆŲ„0‚ôƒŗÎ"5¯tƒÂĻ—ņ„~—ĩũĨib­¨…`š•ÅĄ ŗqPĨšã!tkCÎĖŖ#\íUBÉIŅ™zēĻë¨P §jâ âŋŊģŖĮ;+‚…;ŠĄ%d)â—˙×uiđ˙…&hˇ2dÅůŨÃē<¯â&mff‘s!Æãã3üÛ'Æ#6¤3$fâ+f–¯õķŊ?û_Ōū‹°ĐâF°ÁT&Fv‹‚ÁAS ĸ‚h‚Yž<)›8Ļq‚M\‘›2LštGLę×8ĩ˙+yÚW˙„ŋ ›y(¤Ü\h Ú äX|Z;ĩFĮĻǰš40Pš!ÕŦ „Xø†4BaåĖ Ņ r8Ę+qƒ'Š !Y¸.B/U]˙ŦÕäW k¤áš:XdŨMá.ƒ°›pÉ‚AÃ.ˆ6Č č0‚5ßd°JĘA¸•¸´7'P‹Æ…Ŗ[AÅŖC0Pžpdã60L h…š‚ޞ‰a*Á´‘Ë("DC5(Fˆ„× ėĮúZę§c/ßMũ k´ī5Û­˛ė.’wvšm+ Ã0Õ°ÉãKĻŌ°dŨ$Û¤Û"ޤí¤bUŧ"ė= áâî,#XrVĻâqÃ6)ąB!m„& L¸Á.gQ ‚\¸Â )ÉÆt ."dčäHFˆäteB3Ī" Dų!­uUëūˇ×Ø÷âŋO‹ũ××N­míĐĶa—i+`†-Ļäü'vOŦ“äí¤đ›I–;‚ †ƒ Fƌ;FŧhZ.‹°Â„ŅÂ5‡% Â.ˇ ū‚al ‚`ƒ†.3Q‚`PLá‚eĶˌ ”ŒÔƒ"†O›5!ųČOˇü~‡{˙ë˙˙Úõ×ëët?īÛNõõûm &ûÛŨ]­ˇh2æ› Ū2NTYŌeIļ'%z éĐA°‚Ē64kqaP´\U BĶT-CĀ´ŅxD>„Á0š!p<ØĄf‚ĖÁ"‚4Œī_ōõü?ņ˙ôš˙ô=ę?_xŨ_ĩ_Õ­/jũŌ˙üvũ×ô¸Bė&ët„ ēÚŨ6Š6“uƓi;%Œ;%”™cŨ‘Ûdx%g‘^‚Ņũl#;Bí?EĀiŖ;B-0PƒDK#6˙¯›P˙ũ}ņ˙ųzûģ~ûúô7øöütŋ˙ũoôĩĩėկގŨęÕŌ{ô­§v¯pîͰŠÃ†m' ēÍ&Ų:ᖜ+IÃ%zGĮ† ØF†yČí„hqa ×˙˙oüūč/˙_RúūjûōÕū^ßū—˙č{_ŋĮ˙˙­ī˙íēũūŠūßēXíoūūûŽîęęŨ8e˙ŌŨ'Ü4ͤá“ËUŋ˙đßøE˙Ô/˙ūˇ­˙˙×õũE˙-_˙îëĄØ?˙ßũĐũ{K^\˙ž×ú_˙ũWģëô—ēOT˙Nõ˙îģ˙Đ^ūéh˙÷ũ=˙˙˙˙}õūŨo¯0L?ũ˙–¯ôũūõ˙˙÷˙ë˙˙ãU_úR1ߨ˙ûß×ūũ˙Ō˙īK˙˙Ö˙˙˙ĩ˙˙ī˙˙õ÷¯ ß˙˙˙û¯˙Ú/Bõ˙ë˙ūģú÷ĩá$?‡ū˙Ĩzū͡˙ĨũzA/˙ū˙~žũûūæw˙ũ˙ē_káCí˙ūŋ˙ëážŋ˙˙˙ũũÕ|})cvãûū¯Û_ŗųtũîģëûf‹ķNģîúöũ˙˙ö˙˙˙Øiuūĸ˙tŋ×˙ß˙ī÷ũŋ˙˙õÔ/øVü,xVáĢ †û[K__ēë˙û_ĶVõVĖõūÍũš/ū˙˙žž+WKÂXø¯˙˙÷öûúöŌ˙˙˙Ü"ĮúákÂŪŋÂũ­´ĸAąAS Uö’í„0EC]í2:ûö /ë˙kÔ5Ũ.ÖũĩŌÛ4[o˙îhĩôtžëē˙ø/˙[ëĩëöß×ø¯ôŋũü ŋ}XEžX˙ą˙Ô1 ŧ4„QQAJl Q &alRi°Čöš m´í&*ÛIXõá…Ŋa…ÛžŌū×ũ.ŖėĪķi˙ŅŌR÷ŨÍ?^›˙n˙ŋ‚úßūõÕ/ü%ū‚÷ ü ŋma”Ēˆa0Ą ĸi„b™YÃ&äĮĮí Šp„!„0“AÃH l&, ÃŦ$››v=&ũ†ŌmWWV¯uūˇ˙íĨŽ˙MŽŨ™í™ũ~Ž’ŋ˙˙ŋūÚVˇĨöŨoũĨ›eągDD2NA„ĘÄÅaĻHwĩl ƒ@ØāÂQ ØĢJ!Č=m*ļ)°ƒĩa—Ķ_tžõƒ uÚNžˇiC^Ģ×ī˙ß_ûS˙˙ Ųžšĩū“ûĄ`Ļp„0„d ķ™'xaâ˛(ęāˆá ڎJ" ä8iÂ! ØĢ &I†a îĒkßǧkí­˙ũļžˇë÷i}˙ë˙Į›p0ƒ. ÁP†'1LŒÛ“MĶ 2‡›Ä&0@ÂjH  ä@ 4a˜Tá„á‘ÄN!Ųy9 ԎžíHëm[ũoú-ÔŅŗõâ"Í q ņÎ&œ„0A„8íĶ(鄈_vŠĻšjš ÄãØ†lŒ{nĶ ‘‚ ¨ƒŌ σˆ5Mãëč"z™æÄDDDDDFX\DDDDA„Á2i „-™8-Ė?…#uĢL“Ļ*i˛N‚ čx"‡^¯¤û<؈ˆˆˆˆˆˆˆˆ0A„„"-0„~ūĩIôœDDFŊĨúOÂũ¤ ŠWū—Õ/ĩJĸ!80Im/×5Đq Ļ+°‘dU8ˆ† ĄØĨˆƒ1°0áTDC‘o+Ŧâ,()ov7ŒŽNĖ‚`§iLÉjĻí#ŊNČ‚gaŗžŽĶÚp`• éįgi…ÎÃeN#3!•úĄ|>iōUPPR!2Ų› ‡]ëQp÷<]đžĄBeq6JÚŗ˙ĩĩūģ‡Ũ8FyØv[ Sáãcũ{û¨h=4ž™kȄdjŋ¤ŧVũއQ÷v~/ũ˙^:û_ÖŖ+ú9;˙^Í˙˙¨´ÕAA 29åÅ —EGĖ#¸œ#A‘ƒ'×#3qĐÉķ~Cˆh‡‘?ÖŊH*˙˙ÄVÂĸāqhCŽ44Ņ„[†lfÆu „(M0Lš˜A' F3ŲļOæŲ ęC‰ķˆ„FˆōOđŋ‘¯!zûũ‘ÛzeŽäŖ†A„ĸ‚‚ ‡ø”íÚhģaPˆŅĄŖ\&c°L ÁAB 'ĸ&‹ĢÁMȃ(ŒyĻb43¤jūŋųŲ4RķŋJ@—ÚwWjƒ2{ŌMŽŽøeC6“˛ Û1Čđ–4›'ŅA‰Pô0ŒīPŒ8q8īBEÛ…Ô0Pšx(L  ˊpdc?$ÉÆHČ†ŒĖF.yƒ$jUŖZ*Ė‘‘š…ü&̝éŪąĻû˙Ũ&ũ=[' ›•˛p˜U¤ûĶ{†l8dų¤Ūs;vG˜xFŒXGŽ…ŖcM÷…XD=–ė"Ũ„CánEŧœCˆ`¨"R\‚a3â Ļq‚ŗš™8ōA‘,ÜKL†yNjHލâ5"ĸB$%]ú˙ũ/˙žŊŊOÚZ˙ß^õĢģģ=8dęM˛}IŊ­°tƒƒ0š‚ „z ĐAĐÂ0îNÓƨZ5°†´\0‹ē5°„4Cėv…°gØÁBfbĀ '›&™ ĖÁ0Si‚`ˆŗ4œœd˛MĖæâ4e>hŽ%ŋ˙íęü4ŋũ´7ęũõ_]GwŨúoí+v×Ų;Ĩ¤é~„āËŸĢ ē&ŌpÉH7Aēmđmôa &äAôÍuEãÛCiĒFļoÂ5Đ´\Š„,&ŅĄ‚Ņ œS6@¨…¸Aĸ ƒ>a ‚„ËŖÂšM¸ūŋ˙t=ī˙˙¯ēņŽûuūũ˙ũjúūŋBˇëˇTÕéZģöŊ’ë­Ã,bļNĐdá+¤éa„“Ũ§IÁ“äØ8w 4I6•á…ˇH Û#°ŅžŌAŋģģ×hkĄ …„-./ß_ŨW`û˙ųĢ˙¯Ë˜^<>˙Úī˙ēßøūŋŊ˙Ļŋ­Ą_ooÕˇ¯û„ÛI>õOĶ' }]&ôN žļÉ=§H6sødņ†_§ 4Ķԕˇ’‹ĶļČŽô›IēūßũÎ?o˙˙ū÷~‡ö˙üz˙ü˙ũ˙øņĐ˙˙ūŋ__īÅÖū†ôĢū¯ë„-6Ŋi];īôᚁ8f Aˇ§h0ƒ†O“Ĩĩ_tŋŌ´‚,xo˙˙˙}¡ŋák ŋ˙ëĖŖúG‚˙ĸcĨõöŋ˙ĢõzĐ˙Ž×ũŪû#„DAúXęßŋîŋŽ6˙ģ˙ĢôÛ_¸ßâŋĐX~ŋū˙×đŒ<7˙…đ^˙ú ëú¯uuũͯĮ˙õ˙ŋŽŋ¯˙¤…GĨ˙ūø˙ˇŌõ˙ėÕ4Ģü/☤°Û˙˙˙_˙„˙F}čŅëŋđ_üõ˙ë˙×˙÷úūj˙°}_í¯/Bõ„˜z˙I˙ÃĶû˙}†˙Į‰nąWį¯ū“úû˙~˙ũúXo_ Ŧ%ë˙Ú4|"ßøEŋßû˙đŋ˙˙ë˙…ŋ˙ĶK¨á˙úüÕ}ƒuK¯˙‡˙YĐHTŋkÔÆÕūĻw͚%ī×đE?_ëôŋ¯ú˙Kôú ûJ˙ū˙Ī˙ũī˙ ˙˙8˙ė7˙áz˙n˙ß˙†ŋÍĨ6ģ_Ŋ¯m[IŊīÖ×Ũ/öˇų¯˙ũũëKõ´ˇī˙ßũB_û˙÷ũū¯ÛWūXđß˙„XũũöųĮk˙†ß˙ۄA§ ü9ĩØ@ītŦ á‚(vĶÖë×°–ŋ}¤ŋ÷ũ×ú˙úũš%ībŋÛ4W˙×˙ī_¤˙ú[öŋõŪØ}˙ ˙\ŌŌ˙˙o˙Ä>Đė&ū%:Šb˜”>7A b‚0ØIƒA ØĻ6Ö˙ģAíčŊí×ë˙ļī˙îķEļgˇēũ^Ŋū˙ŲĸüĄ%ˇŋŋŋÛ˙ú û÷ ÆĮ×˙ƒ˙øÄ[ ‹L&0˜PA…Š!§ąIϘL4ÄĄėJ|TPB âPđAȃŽH ÂvØU†}č?bĩukūÂL4îŪŋk×Ŋ{íĢkö\ŪÖūģĩ Īŗ? œOē_˙Ųĸ˙Ē˙˙ûɰjĪ8ˆˆˆˆ8Í+0PM0ĄAOrQÂĻUÚdœ(„Š„Ø„8œxA„ØÂ ul4˜M;bĸ—ØĻĐ~ƒŌŌûTöŌí†ūõ×ēŋŽŌa¯w÷úKÚļž§ŊßŋõßūÁņ¤ôĸ""2ö^ԁaB“ĩ<-áĻI͇TAĻa Ôm1„;JH&Ț†°ƒ°‚`Âq Ķ°°Ōˇ Z _cŠÛ´•Ōī×ģ_nęĩ˙ü߯úļgŌuzĄÁ‹ˆˆ†aaIÔŦ˛N‰Æt´Ä š`Å1)á„M­‰ĮQ„b´ĶA…¤ƒa„‚a&!ÅąI§¯]˜]Ãūũ}††¤Û?¯ãˆˆˆˆˆˆˆˆˆˆƒ"AØM0B„É8)ė&°Â ,RlBâ¤n›  ‘GXAąÂ!„AØH ĐiĻÆÅ ëUúB."""""""%eŽYB ÅÁ°ĄmvIÎ8"ëdcãb“M0ƒa5íRū”hDDDDDDDDDū"" a5l$?õˆˆâú_h wešiĨĮAĒ\JáCÄZâ,â}rŋĄ)Ų‘’Ū  ŸFGŲ’Z&ĘQ1ۃ‡Ķ!L§` ¤Ũet‡īüŽteĖėhgˆˇW]Ē÷t‘dĄ2¤2ļÎđÎĘĸŠÍĻíÂhņGŠgkR…Są´…Ũ|D} Ō†̇ĶķŌ–KīõĩøĐÖîŌnéŋ×;^8iUßÛŨ÷ęd _ˆū×´üÛ:#1Y"ČÄmj´k˙˙Ąg‰0@ÍB&G@¨„â]>ĪF f#XĘšR36g™ ĘȐĖë.š\ē;ôJ—˙úâҰ8†čģ ! (Mp …Ŗ@°‹p͌4BœXA„Ã3ÆpÁ ŽfdvažŽZ•uUüČĢ;ĸ˙üžBM†O*ÚN‚mؑŧŲÚLąč Ø8uDHŽŅąĄj†‹B4h`ƒ4Œ *y‚$ ”DQœ‰ts:GMS]}|Ĩy؅å)zzzm/ÕÃ.ĸpŋÂģ¤Ūá—XLtŦ2WČí¤ĖöBH:`…„]ŅÂ42â Â` ™Ôˆâ„˜§…:ɒã'ŒÉsl†ežn)ĪSB3Ė2ŒÜ{4GŗŖUđē~šŪ™+û­îˇŊ^Đ˙ĩtâ¯îÖû´îĶÕŗÄ3SáÛ#ˇ ų!ÚA°h0‘ą„aÃBâqÃM5°¨‡ ¸ ! ¸LpŅ A„(P˜A„BŽBģ0ALá‚aG$Ččķ'Ҙ4É!š, ‰Ų‡æĐČ8%(Yŋ\*˙ū Å_˙÷_ŋöĩēo§ÜŨ-§W ēûIh ėŽØaGēAŌ~‚7">Đ@ÚqŖcP†xĐŅvâwhF„0‹ąĄEĀah‡°Â„Xᗍ< „ ą0ƒ3Æ4BCˆ2@¤0§™ Íš‚$9š’  ”‘–āŒĄū¯¸á÷˙˙é˙ī­˙ŽíZ_V•ēK̰ž›V÷Ü8fN­‚p˚°ÉĖž4›pé6 š“S†l‚<2WĻgČW¤‘čŧhŨAh4Eã‰Įkm4!ĄÉ@apÂ-áB-ØMī „Âa™tƒ „Ė @Đk}æÔ5˙˙˙ŋ˙˙_˙‡û¯îŋ¤×īē˙Ģ´ŨSĩOÛ˛í%{CŊ6Ë´í] Ë' Û'4ÚN“aĻž“a„ÉFNé6ŽČąãá6‚  ƒôFĘÆ‹°Ņ­ŖcˆhÖҝ_¯ü?˙˙˙ūjŋ˙ü6ŋ˙ãü˙ėoûũoõúoņ߯ą§Ģ§t›_ž’Ŋ+ĢhiŌuv†\û¤ÚģĨ{†N…ã§Ũ+h%{é;L/˙áŋ˙˙ĩß˙˙ũŌũ†)˙˙$8N–?íĩÃŋĢ˙oŪ?˙ŋ˙˙VūžŋmĻöũŊ}Ļ÷Ļ×Ku÷j+Iũ—4ôØeũÄ~˙āßū˙ī_˙˙˙uû /¯ø!ž—ßë˙˙ūŋÃÛ˙˙ũîŸĐū/_˙˙ū›ŽŋĩėVëĩ_öŋnû˙˙a-˙˙Û_ÁÂũ˙īX_õaÃŋ˙ųĒũŋ˙˙˙ém~ŌKũ˙V¯˙˙íŧwĸ(ûėkõÕŋ_˙ņO_˙üWᰍī˙\+낆Ã˙×˙ûû˙˙˙˙ųĢōę˙˙,m˙¯đõöQÃÛ˙ëš"éŨ}˙ųÕŋ˙˙ū ÷K˙ūí+¸˙„h‡ß˙˙˙׆˙ũŌ˙˙˙˙ß˙Â_×üŊߛPæW— |?ļ—ļŋÚ˙ĨĶ˙ög˙čÕũÍé˙˙ ŋô°Øuū˙˙˙˙ûĢ˙˙ũ´ŋO˙ÁũđÃ˙o釰÷mÕ¤ÅZN’¯ŪžÚß}í¯˙]æÖš˙öh˜Ģ_ũwoîž˙ûũ}ŋ˙c˙˙ūúūŋũ˙ŋī˙đÃ_o  lT0“Pa&H ab, ĐiĸĨ r"ĻÅ'§vŸ}Ĩéû¯í¯úũ%›NGú˙ũ/˙߯ųĮ˙û×ņ˙˙øAū˙ø7‡đÜD0ĸiŠ Bų— SM†Ä&%œ ĐaĐA„!„ÂAđ6!Ú_iííŪà Ķg­_ĩēŊë÷īÛ3ūõÎ~ŋé "÷ūí[ėŅ4Ųĸß×öë˙˙ūŪē°÷Ø|Ė_ļ—íĨkkļ–˙Ũö˙í&ûöŌ/˙ŲüēėĪėĪ.Ÿ=ũ ķÎ"""ā8aLĄĄ “„ÅE"Į´Ä š´Å1  L Ø0A„TB  âGÖ!ļ’ ä$4˜iąME&ÚV•—×c >×§IÕXa[¯W { vÖ˙ËrÔgt'ÄDY¤`0ƒ, !3ƒ„ZĄNSŠYļļ!M Ä&6ļ‚ ŠŠb!„ Œ  ‹†a¤Ä4ØĢXdy=Š´ĸŽ*ŌģTŌtą–i(B!‚ eĀ@ÂhB(L“Ÿ˛˛’pŊ‘Žå@Ļ)¤ÚˆLD0ƒj(4Ȗ­&!¤í~ŋ^zDDDDF\‚Q8C ĻL@A„Ķ „ĶČÜPUŌ¯WÄDDDDDDGÚIëõđąM„‰ēŌ˙ !/˙eÉh*û^#AÃ.ՄÄnAÄn2š"#q•2­˜É"ĸ‘`™ŽÅ"Ŋ¯ˆj¤P  ƒ;Ē+j›ē%D#ß\8>‚x°‹Įú5´k„,"c´ÁB-ł„L hˆiˌ d@SŅ™A“‘9¸‡˙˙˙šķ#_ôé=6͇ ęø2įđôé<žRl4LM¤E†5úx´l„^ŸpEÄ&c°‹pĶ „ S6AĐCâņ‚(3HŲ2AeȆd3(ˆŅD6jßúŽd?ũuēĢ[ũũ/zm+{ŌŌà ´›IäĖöK)i6=žJ ĐAéA6ŖcFÆÕRhŅFē.!h0B #@abA‚ ͑ „õ ķaƒb悐ÅÉŌ” ĸ.ō !9ČĪ$4"ÔčeC)ׯŪÁ;¯˙˙ôŧkÛ˙×Ũ_}lZonŽ~×}÷I÷KiĻFēM¤č ÃdWa,‹bTRm˛ųŖcEÛ ŨŖ^|¤l "pũ­„MŪlPˆ{ <(@ˆė ÁABa ¸DȚ‘`§5œsYąåȌŽ3ÆJIĮûöŋ˙ûôˇŌLŽ“¯ûĮ˙ą[ũŌëŌŌ´Ÿûļõm'õvt›a0›§KÛKKF’nxf´Z6‚ <5„_8ôl ƒhÖÕ™­ŖeQvŅpÂ.Ū…Äh‡`˜ Â Ā†Æˆl˛-ĻĘDįüÄÃīņ˙˙áū÷ņũpëūë˙˛>Š}Ũâģé}Žé[Zínļ“Ö•¤Ú_Ĩi\BI´žŸŌ´Ÿ„ žNÉ?IŌ°“‡IĐM¤îm&g¤Û0™qî'N=§ģz‚˙Øt˙¯˙ŽÃūûŠĒû­ÃŋøkčGũĄ×hũØūßūŋíũRũXūŋá--[ĢŌŽÚ-^ˇK[KeÍZVé6û Ã.…ķ aÃL*fsBvŋí˙āŋ˙ė?÷U×ũØûųa>ю‡‡ˇĶ]ÃVũ¯ø×ô5˙C—ĩŸũ_AZMúŊ*Ŋ×ëû~;íŽû´ĶŊvû†ce€ŋá˙ôg˙˙†˙íw_˙°ūŊ‡˙ôŋ`ŠĩtÔv˙Įū]¯˙āũŋô¯ûīJŋū/ô?Ō÷JÛ˙˙ũqŋøo_Â_˙øūĩ˙ü›_˙÷øaā›ĩÂļÁ×ëũ 6ŸØs$ŋŽŌŌ˙K˙­.×ë˙_Öĩßû¯˙ũŊ˙ ŋß ū“ŋî¯mĨāŪŋ˙ģvcÃ{sģH+aŋđŋ÷˙…ößÔoû¯˙üŊ5ķk˙˙n×ũ×˙&Å'ūÍ ?_˙˙ßûõ]˙tâģ×˙ø>‚Áīü#D ßá?˙˙Âûû~ßi~ũ˙˙˙˙˙÷˙˙˙ũmīÛ ˙ūŋŪu_ŪÖŲĸ˙˙GŪ˙öÛÕđ–ŪÅ1Ĩ‡ū‚˙ŋûÂ.>P~˙Ë?˙˙ū˙˙˙}}ŅĮĨ¯˙iuŪïąZZK˙~úuíĨĩkŊ_9ī˙æŸîŲĸKvúKwzđ—˙˙č/Ūû˙m´ˇ_fw˙˙˙wúˇ]^˙˙ūëønA‚Ô5†’a0ƒˆi÷Ķm7ĶŨ/a„›]mz˙ûKũ´¯Íũ¯˜ęĖÕRæ<Ą;¯×ũ‚)˙VÚ˙ŪŪž˙Ũ˙ŋ˙ėWéEo˙ļ“ /ÃįîûLTBM>Fé0„„ظ`A„ &ļ)†a4ÛJÕd=7i6’ßpÁ_ģØaØa_˙Öë˙öÕŋÛ3W¯›Oš-ˇĻöãũé[Ũ[÷˙߅ė˙˙øÄDDD—RÜáaBNĘPN1 ķ¸">…ĶLN=4bPAÃ0ƒŠ P@Á0ƒb˜0A§ĨÛIЧl í(tęŊéû -­¤Ø[=ū¤Ã wugūÚŪ­pßuŸ}ŨŸ›4]í™˙ÚŖÖęŸ˙ö)Á`‚ÄXA„3wøa18ôØ Ķ#ŊGki0 Â"Ķ6)´ŦS°Âö)[mX­ēí^ģÛŽÕöPÂ÷ÃVûéuë˙ū‡ķGÄYž"""" &U`ƒÂa0ƒ ļNbPb¯‘š1Ú{ Ž!4‰C¨ØĻa°ÂM„l$à 5l*z †œS­ĻÅZn¨i[t˙~ŋK­Š6,]Oˆˆˆˆˆˆˆˆ0„DC2p—0aM48A„DfІ!0Ŋ­ˆLUÃ@؄xAą†š6-Ļ.6JAæÂĶIÅ īMäX(á ėO@úXˆˆˆˆˆˆˆˆˆâ 0B"Bâ'4• “„ Œpš U†!5„Û „A ę!Į˙kâ""""""āĘ4&] §*#ļČÜUíVššˆˆˆÖ""ÂūĢ@üĶcģJŠ/Iāƒ† *KU\X„YŖš^Ģà kTēŽ6‘‚žÔUXH›ƒŦ&Ä.,B7+Îáƒ(ܡÕŦ˛čŽįāPLˇÕ 2ŠôDFĒw0į{[D¸—CŊjv–)Ž/ÂŲ.ā¨>ā V…ÁBfUŒÉb2äTŅVžĢmöéˇ9-‰u …;*ĖŅЁ0Lī Č8ėĮßŪŋÃŖZG€ô/UP¤˜@Xī÷Wkô*9Ųi;ģ¨DVa“;ē_ޏk§v°áĨ0÷&Õ’DÚ^Ž?čwũŨ'¯éļĩĒë÷á Ũu+älÎ Ę3‘ Ŗ™ŠR’=úđŽPúÎũ­"…˙˙õŽ0Ą4ÂG`˜ Ī‘Â Čæ`Ņ ųqÆA0d2(%c#hâ(Zļēϟä)•¯˙Ō~ƒ6)rAĐē‹FąjĒ‹ÖÂ&8q Ã4C—@Ą3›C#å!“ŠD'!”F÷!ĸ:"iuũ5˙Ŧ’" ēøi„&Ã%—d˛“3Ũ§H?' &Đ&ôƒhŲđ†ƒŪ3˜ š40‹w„ha u‚gˆØÂ˜ ™AšGãDčÁČ*’ŅųDFíWŊWQ"ŋϟēŨ§[ėŗ÷č?¤ōũĨ{†ZHt{†ƒM ÚN‚n’ ŖÆ/uŅvá ļÁAB & 4$&Â!0†GŒgŒÃ'‹æŅ„kdãLĪ3Ė3ƒRž0Ī Î0d”fäʆ'‹­WKÎĘīę­?ß˙N•˙ĨĨîË´­ĩOŌé:Mũ„› ž>ŌĐM‡"ÃŅíņ8ôlĨ "ųÚ5°‹ĘhĐãŅ­¨M 6AcÂ&˜MôĻnÁB "c† HK`ž\a$"Ėã øÉt E†™ ’3 2Zäk ¯ø˙˙ûŋĩUûčWēwŌ}×Ō×§ßÕˇpÂl3zÆm+ Ļeų9ĻŌpŌA°Đa$ÛiĻGŠ7ĄĸīĮA¸•7.Ú7x°š.!<Ņ 0˜Râh…æ|‚h…āÁ2y™ĮĖš$fÍIYëūŋ˙ú‡üučw¯úŨ˙cCw˙­ũOīĶīM¯ēW[/–õVÉÂwĨ ̓/Ą’}8eÖIéXh6­˛1Ër~i:ÉCF†‚ŒīŌm7CA¤kĻ4lhŲ͐ņB  ĸ ŽÉpp˙Í_ŋ˙á˙1>ûGwŽéz_ĐßŪ´ĩo˙˙ė}&˙Ōõŋ^‡õĶzmĄßĄKĢIØMWkđ'KA>8¤éim4“†NfļČĮ˛NZO„hnģĻ‹Æ…õ„NŲnY˙˙¯ëö×üŊCŌlœ?Ū늰ū[”#ûu˙˙˙ũ˙Ą˙Ԋ?}/ĮĒĮ¯ßēzũ×]^¨VÕĩwKvˇh4Đ­¤úNá“ĨÃ'ԛ –Y9 ė&ł˙˙îŋ†˙˙Ļ…ûēļô+ë¯˙ø˙Áī˙¯î¨}û]˙kü˙×˙¯×~:ô=~ģŊoēONīęã˙˙í/ÃũëønŌmđ­ĨŖPIŋÂ˙ũø_Ø˙,?ÍU)zûĄØ>ø{¯īú˙ĩ˙ßkü=˙C_˙ö¯ˇŋô¯ũ˙[øíūÁôœp›Iđođ‹ûß˙…ũŋúëë~ŊUXz[ķTēŋ›Oøëô?éCĮ˙ß˙ú¯öôˇ˙“¯īFOíŊ{ŋß[ŌŨcŠKö‚˙˙˙Â4 ˙˙˙}íŖč+{í×˙˙ëëķûė?ųzüWūínŋē[ūÚ÷×_G“›æ‹ößĻôģßKwí/÷˙˙Kü7˙}ũú_ÖĄáŋÃī˙˙á|/á/´›Âũ/¯ũĒ˙øjŸŪŊúVžÚļgëg흝M.qwæ‰3úõ˙Â_á˙˙úļ˙Œ °úá˙ĩŌ˙ëÂ3ü#ü/ŪŪíû ˙˙^Üãŋé„ ˆ^šöGDt››IÚ÷{ /ļŋĨõë}™ûjŋ§UŊ˙ûõ˙m˙íRXÛŋûūūü%øIëÂ.>éxEŋõ܌A?˙˙ũ-/σM aa#Āã8iP i„ØĻ!' Š´›1„á§ ÚzîՆØaUMîę×ī˙!¯VŌöĖ×ögíš{ūa{īíô˙āŠú ôŋ´¯ü>‚˙}Ô Ÿū˙ŋŋū" Á‹8å>PåFįr‡ĩ8øĻ´íĻ‚a6˜¨ „ Ø˙bĶb˜†šzęÚÚ˙OûK§_°ˇÛjÔ4ēĨī×3ë[?û˙ [˙öôģėŅ%ŪÅz˙z_˙Ŋ~ÆÆüDDD\DDDDDAœ˜B!…L!eqN§ãŲ8 ŠŠ' Ši6™'„Đma‚LD0ƒˆ‹  íl+h&†G˜Ļ×bļ+ß_õoøat­.Û^˙˙˙ĩ÷ō1w_ļgûk¯˙ßũV–z1qC „Âh^TÂ# Ä&J ‘\““CN*!1QLm1 m;Akb4“ģ´˜dzÃi6’m—ØĻ_ĶV×_a„ĩĩĢ­?ģ 6­¯÷ëõ^Öũ'Ą`ƒDXRĮ0šaƒ$áKtÕž¤cØ „AĮAĩÅLC;4á â ScˆmĻ÷Ų}ÂÛ0˜í6_W×ŨWö­"ܯ'DuõDDDDDDDC ‚ !a† ÂeVš “…Ēr7A‘Ž‚ ÚdcĻ:ŠcŒlm1l0ąƒ‘ 4í6Vœ2˙ļˇJŧDDFeւh2ė Ąa0š “…Õ2p™cč0ƒ#xb$é7M „Ø ƒM­†BßëÄDDDDG$ĖŽ˜L!a‹(˜C0ā‹ĻAФŊЈˆˆˆˆˆŽH› ŋÅVzÆŧ›ęqšžužGĖPƒ `”žô,ätf‘A‹Yš9O&Ęk[ĄũoũņxíŨ}Ū—˙ëÕ÷ĨĢŽôëēģB­īŋ¤Üža&÷§ô›d˛ČŪm‘]ŖÛG‡ģIŊŖsиŒ&îpа‰Āvš4SZ!ĮČĮaBB5\Ų‚:Š`fĖų“ŠS‘ķ.d„a ŧ[”Œ ˙˙Õ˙ü?Uûøž˙Ũ(´×ŋnŽŋņũéU÷ß­ũ/´ēv›a [:XIÃ:Uúŧžjî,˛Cš(÷ ÂĻŲ °āč'Ņŋ‚ čžhaļ~ĐŅ­ę˜&ŒôÂ,xTAėCBīå¤ú˙üÕīĮƒôēīJ/˙_ũīõŽĮkõėUũoôŨôũéÕô[­+zÚNVî’vĶnë¤Û'Ė2éÛt› ēaZMîČí¤Ãh0˜HĐŌĄ âFđp‹ŋëë˙˙ö÷ēVū]_ūĨ”–åG˙íØ{^­ÃŨGßŋ¯˙îŸ~ŊˇÛÚ~‡ß]ĢV˙uŨ˙mę÷_}ZuÚvˇKIŌpÉŸĻg°Ąŋŋ˙đÃôqę ļ žëÂŪ÷˙ū°ņųu ˙qØ}Ž­ūÕ}Úß­uĨ˙˙Ĩdq7˙ąúūŊoéĢŽļí%oú zÛB?˙§˙ü>Ũ=Xđ˙úũ×˙˙˙ģ û †ŋü=˙˙ÆĮ˙ë˙ûöˇ¨ũˇ˙˙ßÔo÷˛ú˙ö+ĨĐ˙˙û˙ü?Ŧh' ūÚA?Ž“ë_˙ø|Ûo_Á[í.ŋ×Ō_ëWO˙_ĮĩšŋO\1ī˙˙û˙B?ëˇ˙˙ūßũöû–ūėBKö?ŋ˙˙đŪÃęĄē˙ÁW˙ü/īŋá}ŋa­˙ūÃēųii Ã˙g˙õöëŗ<ÂúĨßí:ū›§˙úđøKđá˙đß÷ūođ‹˙ŧ"Įūžĩá]/ūö_˙˙ö˙˙°˙˙˙Ã_Û¯×mo÷ķßög¤ŋĩšgõôßīĨöá˙ô°ę××č-ôŖ_Ž˙*ūžü"ß˙áÂ,˙˙û}}\§Đ+ ˙ų\áĐa6*ĶļŌOm&ͨ`“{uë×°ŌũūJˇÖÚ鿝˙lÍ˙ī×úŨK]+KūˇĐ_˙ū‚ôŸôŧ6‚˙˙˙ÁģūŨmQ‡ē0˙ũ´ļ „A°ÂAl0”lU„¤A–ĸÕ;ŠD åQ„ͤö+îÖŨ&ö˙_õí|éīļfŊsÉ÷˙õŋZ_īõî÷Īûūŧw÷øtŋß˙ü;¯úQ„ƒa˙ö”DCBĘH!Nr  BaĸšĒdc¨ ˜A†ĸ Ž0ƒiÜ`í › &ÂM„Ķ^ŌlĮ vĮ}÷Ø_û_Û¯úũu[tû׎Õ=KjĖ˙ͧ_õ˙_ˇzũŽ’ÃĨ˙ėqD&!Âv]„0ŸYÜBMŠ Bc0ƒ ,qȜ› 6”A†)mÂé:ˇ ģzßũûúûu}˙ũ¯Ŋk˙Ũo^ä9CKÛ4÷_]ŋôhÄDDDDD„9vDbL“„Ķ *)‘GMAÆÅ⁰ĐAr%ˆaƒˆq [Lčƒ;A„Ķm/öĖ}Š4Å/jßĨ­íúö“k õéē_ &ŋ7ŋ˙ô9Gˆˆˆˆˆ’a • !]…y'AŠö¤XM’tČĮA4‡Áąą(z 6*`ƒˆƒb= „ØaíbTäGv’mĨe䨅ia†íŽĢ]/ŋoRŨk>p“ˆˆˆˆˆˆˆˆ`„D0˜LD!ÉĀ Âa† ĻU rĄ2‡GL”ėœ'avĻĸ™' ĐqSŠ †)ˆ†Ôtà A‚ ­¨‡kal î ä¸+ū""""""""""""""Pƒ:r‹„Á†X@BL˜Ā˜N BŊ§Ųę)‰ĮL`ƒcąˆˆˆˆˆˆˆˆˆ†C „Đdœ!dāķuHDDDFö”įØ2旈_ ÔiX2įŠ–ëyØŪ@đÁKrR;ŗ$ąRˆV=TėÔ¤Âfh&ÔĖøpáÂ%ÄaķŗHė@ ()]O¨|;۔ŠT”ä 2Ŗ+žū‚w÷|38péĻĨo v&ũ4JķhНęН¯ÃĻ÷•ŰR `† é_ŌĮkũ÷àõRcP_õß㸰ŋ_)üˇŽS­^ŋÔqī­Ô:‡zúäY$$Nŋ˙× };ī+Њ ‰ŖÉ}pŋúųT_ãëĩđ˜Až#ƒÁShč.`‰Ņĸ5 slé'<†—#ŋŽvhšCŋü~l"đ6ô- FŒZ.Á ŒŲ#;ˇĸ ƒ4B‘0P´}‚˜,Á †§2 ˆaœÍ˛ŒÜ{4<ĶõĶÕÎÅEQk˙á&é°āō,tžJA0à ĻAĐAÖ-Ũ¤ !â!qi„[¤ÂeČā͒A‚„ÁB \Ī O#6h)™îJĩ"Ŗ)ŅåũZ靍Ĩ;O–/˙Ö¯á„Øe×m„›wkŌpËĄ>„“ĒmëvE‡' #ÃAÎŅą†ÃÄN;CTláSEĀ`Ą0ĄvƒÔ¸†D*A‚a(ô_6‹ÆŲ —#HÃ<2€¤äQœg™FfŽGL‘›‚ä[$#ߐŌęUū¯Wôúû¯ę•ĨŊi;Zģ†].ÂxAÕŌ´ÖîČĮ&āƒaÃÕėiâqŪ‚mūĐuUFļ…„\…ĄÃC-‚ 3„ „@ÁB —#ˆlPƒÁŽ — ž`ČmJxÃ!‘>mdųÄi) ’¯˙čU˙ü~›v˙˙{ŋ]˙jũ[WWWöƒM;' ÕöN °Â,$đĶ Ø"?¤ėŽ)Ã4‘mēM„_QxМq8īBÂĄp÷Ķ]Z!`C ĸƒA‚„ Ņ đA„!p0ƒ04Ę5ŗp‰(yd2:\"šdHEZúßū߯j”k˙]˙˙ž˙_ãô=Đøô+Ķõ¯ŋN!– ¤ī´vF=+§Ļà áŲ,Ŗ[dvë ņ˛,Uäxųė#CâwhÖĐŅąĄUF°Â5°Ą öNBÂa4gh… X —ØÂ!^lŒ0@ .0C˙˙Ã˙ũ/ũĒ­¯˙ūĩū˙Ūģū÷öŋ[˙ˇúŋZm„;ĨĢtĶí6–Âp˝õÃ7í6s'dë ´˛XęÃ&æz5ˇI÷vE†č&ä[­ ´9é˙Įūŋ‡˙z_Æžßũu_[˙Z˙˙û˙¯ãoú~ÕûÕ=^õļ­ ŸÁ›ūé:N“†6“˙˙˙ŊuøOÁ˙Âø+˙°ī×ũö˙û}˙û_ßõü]?ŋũĄī]č\}õŋ×Įôŋz˙uīũ˙ˇ˙áŋęÕ˙˙ŅÛF˙øF… ˙ūß˙ū ö—ė?öúū`×˙ū+˙i ßųpŋī˙ģ_?ú˙Ûŋöū˙ūŧWõ÷×ūëüqŋūü§Â û˙°‚ũ!ŋúđl˙Â˙ūßūŽ;_Öú˙˙˙ū´sûŋ˙åëæĒŖ\Ŋ˙˙ū߯Ĩ˙¯ ¯Ōû¯ūūûUũ{z˙_ô—éa˙˙ußthîé~˙z÷~˙ûÁ~ˇ _ī˙Á¯ü'Ķ˙˙­ƒ÷_˙˙ö˙öūéûķWũĨŊŸŸũ{mkû˙ūđ–˙˙‡_đ—÷ū˙k˙˙˙á˙žÔ#>ôŸĄü/˙ūÛ˙˙ũŋëöŌ˙ū˙āÂNļžúûõļ•­˙í¯ũ~ēīųŅũį÷_Ũzé~˙ņ_÷˙˙č/˙I'¯ŋũ?ßūoė˙˙ü7˙˙˙ū ŋÃà DCAȇui°ŌzŠm;0ģÂÛ Z¯ū­¯ŪßéWzīKîĄ˙ąžŋ1ūû×^§ũú_ûz_īéu˙ß ŋ˙ūđ˙ˇûĨīūąúũ„„ČܛĶĻ(  ˆTáĻ." ØŲ80ąlZa4í6Đv„Ō°ƒî­;Kí†ŋôŸũĨžŊĢ{k˙ë˙Å%ũ_ū—}ú_aß˙˙Ã_÷˙ū ŋøˆˆˆa2‡DB!„82B'4 Bdā+‘Ga4aƒ‰N˜âPû 1‚ $0¤a´“AĢØA§o˙ļ•}l4ĩ˙˙īũõŊ}+õ÷V˙ėĪŊ4EÖŋˇ˙¤a~ŋú_˙‡Kûâ"""""""""""ÁB]‚ &ÉĀ&V(…Â#Ļ)lR ! ¨ˆaXAȇ ´“Aļ“MXTØĻmĨkëŨõwß}öžÃ_ÖÛ ÷ĨûëWî“{˙y…˙ŋ¤`ˆ0ƒ. ÕzēÅՊø„m1l0A@ÂÁqĶb &Ãĩƒ´m˜ĶIŠ´âŦž¨kiûii_õki×ßēß_ųnĒ'ÁÄDDA˜(†dā b*Ôčĸ/…öIËv›$=ĻIË~ˇńؔø¨Ļ0ƒ 1ØØŪH&a"[Iƒ0ÚMŦ„C 7MŪÚjß}¯ļĨ¸(cÖ2×/–įŨF0 …4ĘAXƒ ’sžJĻ¯Ú RiĻÅE5Ä&70ƒˆ†Á„ė%a†¯ĐˆˆË\€( Âa† &FęšcŲrC؜{É:Xa‰ĮĒëÄDDDF„D@@„X&ˆ`˜.̝â""<Ž—¤—_ô:×Ō„WÔ˙§ZŪMøâĐ@éu‹)qˆ a¨ˆõW4Œ€ą•ķ v+‰2Yęˇ¨(L#ØņØJzaŨÂäŧĄB‚‚Œgi^ˇWRž }•ę(iū…÷pî]<ėÆJĩ&Œîŗ>Qũwũß{tĶņ+‡)āTËzŖ°w˙ũßV“ôačãĘŦvŠ‚‚˙_˙¯ņp÷AŌ *u˙¯˙ĮĒŊ!Qđá˙ŪE˙âŖĩīß+ú(_ú˙˙â¸ĩđPL¸Čb‘ÍO"'›fĸ:F#ņļ}šŦ—Îd]_¯˙…¯õĒpˆ–E"0ƒ ‚„A„đP@Ī‘Â Øä>„h,AÛ:yÔō9įL—_ë™WŠ^‰˙üŠđ“,wƒA…Î8”âSÂ3‡ĄŊ„"äí„h *a„BE‚;%Œ ÁB!|8ƒÁ4"k+Qƒ$<Ī6Ę2xŖ9•k"zë¯ä+û†zÚŨ Éõ&Ų'†aŌ|2VÃ˛\K4H7Aģi… -Uܞ=ÃFÆŽ a„Á#ž`Ą 0C8g… Ѝ>4ėÃ!‘O›gŲ(Ę3ĸ!ĨÉtA5ũL•=īˇãũjÛAĒkIú~ƒTũÖÉ=&Á–1;Rúá“: ĶxH6“ 'bU´xxF†‚¨îа‹ēHŅF†˜EŊ!ÜC ‚„A„)ņ2æLŽČæpgAPafJd_|SY™ŗ đĶ(œČ™’ƒÉRR!.Ģ_õotŌņ÷ūŸ÷éĩēēŋÛvŋo§IŌv› >“i\ž‡ ;%'Ōm ØF‡8A6ríŽ'„gj‹°Đĩ¸ av¸hĐŅĄ„Â…ˇh…ˆLfØÂa0ƒ42ã0Ļ‚‘‚Ú” †5(ˆŅ• čgDCÉŅČé)WÚ˙Ō˙û¯˙˙˙×i´Ģ}/õĩ´ļŸŌéŨ[iéßuēŋvs/Š6Á:Nč ßIŨÚ=éŌ ¤čđâĐAŋFĖųmŅŦ4k„аThŖ[…r ė"c†ˆw›ĀĄÃ0ƒ0˜)ã0ĻGD}!Î[“Ą„ƒ–åĸ˙ūë˙ü˙˙Ûˇ˙ø÷˙˙˙_kŋũ-×­}×ę›]ĒtÖÃ'ˆeū’pËÕjŪé{¤á“„–tí̇IŌt|r,RwI´›é Úū $mz.‡j†"ÂrPT &Ąũ˙_˙˙˙ëųi˙Ũׯ÷öŽžßīĐ˙˙ū)¯ãßß§ŋũ=ũ_Nēūēô=Ķūū•î¸a6–'JÁ˜åÍZM†YíRáI–ôodvŌv‘áÂn4_4g„^dü­?ëz˙˙˙˙îŋ­Wũcé=_øø˙í~žÜ6ŋ˙ÖëßVõÅ0Oß×Ôq˙Į}ūņ˙IÖˇéo÷ôûlą‰÷ “Ō´žœGũ¯jŋ˙„X˙˙˙úöå>ŋ˙˙˙××ņ˙ø9`đŅ,Cũkĩ˙ũĨū×6^‡÷~‡Zõvŋ­WßZëī´ÚŋžŨ MĢiÃõ˙ū‚˙˙˙īõŋß˙˙˙ …ũB˙ė:V!ë™GÅũëú‡,0ĮäėîŊ‡øuũ|4?E÷I úŋ˙ūŋÕ˙ •ĩ˙˙/˙˙¯ũ÷__˙˙ücėc˙pŋûx+ũ_˙×ũXi0ׄ#đØ?š°Åwũ‡-?D˙¯øū×û˙éëúú8Œo˙ú˙˙˙ņQ_īÖÚŨ ŸAá?øoˇƒ˙˙…˙û˙Á[Û˙ 6˙a…×ö}íÔž…‡ˇ­˙ū—m+˙˙ŋŋĢ4^•˙ũ˙͝øK –˙„ŋüĐXoũ˙Ņ˙ũ/đ‹x7ƒa?ŋpßí…ŋöī˙õÂļĄaáõIvēívõëë˙ŪÚīĶ_ũ™ú˙īõ_]˙_˙énß˙á/˙ßūĐXvŨ˙āØÄ[ëü7˙˙ā‹áo ˙…øL ÂAü>Õ´—´ôîÛ4Öí& M´¯kû´´ˇ§JũuūũWöüÚ{4K›^i›˙Ŋôŋīí/ôˇÃĨ˙¸oė:O÷ā˙˙ļ• ļĐAÃxEŋ¯Áöí L Ø „A„‡@ƒ ã4AØIŠ ļ’u„Ķ\Ú w[ &Ōm>¯īlõ˙ūŊí…ôûTīėĪ×ũ´ŋ×ŋ0ģ3Čë_lŅ{˙mĨ˙īûwņZ[—ø>_ū‚ū"68ˆ0B",&ˆ˛P}é&Ąą ôƒMÆÂ†  °“ $Á„á…ˆ4Cb—ļĐ}ˇk¤Åa>˜i}ė0—úīÖí]mŸ×Ŋĩŋ^Öķžc¯s<ĮTŋųīlŅ}™īũš$´x—˙׎Ũ%ŋgŸ$ņhĢ#V„„Äãâ$č'#tÂBāˆ ˆƒ†¯Čōą[liÚvö•­íĨ°`­ íXĢûØ`—û~œ5ŋīoŋĩûVĖ×ģkéūq>ŋú×ôž„DDDFh8a†!ÅĶ#rcØĻ$áD&Ē „˜MÄĄÖa0ƒ‘96’ ŠŽŌĻÂQqȖØiZL0ƒbmŊĻļ“ėT0VÕĻ˙¯÷ßõˇŽßK\DDDDDDDDIƒ8Ō[PŲNSĻ„˜a2p˜„ˆL““NŠŽ6ĸŖ0ƒbÂÕ „LTˆībĄ„!芭¤æÖ=wJ×RÜ~ąÄDDhDDDDB"!a0™(90™'LĄĪĸ­ˆA…ÛL&ĄĶQ8ø8 ƒ40ąĮ l4ĸ Ö—ŦDDDDDDDDDA‚(Á‚ ! (Npu5åbšdJqIą ‘ŊŠ­äaũˆˆ‹b""""""{Á ‚k; /ŦŖÄDDlUuĢØM*¤—p%tL‹â!•*QJ­c°ŌŒB°RšIŸŽÃÎːŌ;Ągd2gO—ûę Ļĸ™™ŲÜ;˙… …;öeßwÃŖS\¤”8)ذË(ëūūúA ū,#[™Āˆ>´‹YŲÉd|™ß˙˙‚ŨB%á§jPL2NˆŸ˙ß§§ôú<…‘´Ķ•ŧ§“$”†^˙úㄝÚA>ßAß{G„˙&Ÿ˙˙ŠģZ¨žúŽ‹™9ß˙˙^ēNŠ8§8ô•ŽŠĒpß+ĐÉæ†ŋũįezäÉué}{ ĩ[ŧ ÂĐ0ƒËŒ21˜3æyŒãfpō8ČdOfŗSq¨ķĸũ}uũņKøEÛFĮá2Ŗ@apã, âw "Ü0TÂ@Īą¨!åÆPGŗyŦyd2!‘<`ʆžēôōŸY\˙ũoŌm+ũäĄIEÛ#ˆh<‹bU¸A´n4kƍÛp˜´fÆpâw ÃąØ(L&ˆR@Ččø§ČáŒĐ!Ž3Œyļut@â8‰ Q[]|­ūTąĮ֗ūAĩvmˇ &žŋ “Ōy>i6:¤ōwG¸h0M ƒaÚ7¨BÂ.ÃđBÁ Ąˆ[a=|Á3âgŲã.2‚'FȆd<ÜfGčīä†Q›ŽĘōĸ__]j×úé_Oļ•ÂëV÷tē ¤íU[MYH64¤‚ ƒƒ†G ŽâŅąá4-ÂĄi„[ĩਠ`˜L!`¨?KA‚a{"îș.0A’R†\ËÄ|áFáerBz’ųĐɸĪ$yJŋĄ‹öũäAß˙ūŋŽé?ëúwtŋĨ{´ßĩ/÷ė'K>a—Bú•čųp“ĢČąĐĐAéhŧqhģxG‡ß„aņ´t!ŖC›´CÅ8ė°˜A‚!u 0š!ø0P˜(@ėÖa2ã˛ÅR†P2lÉÛ0Χëá˙ßūÜ}˙}u˙_~Ũ柝ûũ7ũuˇˇ­˛vŠŊà Ō÷Iļ’–éÕéëH6Č č0’vK)ĐMņ†ÃȐ'†|ų|Â3°‹°ôlhjžĄ …Âā0‰ŽŅƒÂa| Đ}_†p5˙™%˙˙‘HÁŋ_¯ûVÚĄ¯~˙Ĩę˙õĒëâˇû{īĨĶlŧ[‹Ĩ­Ž–˰Ÿö›Jë ´tîL'I°eŒļ“i;&uaÜ#_yũ:7¤‹æ…ŖcâÂ6?øa˙¯×˙Í]†ēū˙ãZRdú'…L˙˙_ŋņ˙]˙ũŽļ¯ŠW¯ūž.–;úŋCõOŨV¯[û.ĶĢ{†l¨­,2ĪJÃ'Ũų;í˙Û!0ŋõ˙˙Û˙˙ü+đž†j˙˙˙˙˙ãŋ˙×y >˙ßŨ-˙ī´4š˙JũŋV´Ž‡ú÷ÕŌũ&Ú˙§K˙ƒˆ˙ß˙î˙ũzÂßũ/‚˙˙˙˙˝ôīøŦ6Ūŋüzŋžū?ëû˙ô<˙ũŽÖ˙ˇOŪßß÷ß˙ûPߡ˙ūŖĨoá?û˙˙˙đē˙ęÁæˇ6̧¯ŨŌ<Ë×˙˙ū?×°ģ˙އûûûCöiû˙˙õá˙˙~ôˇ¯˙Đ_õ˙¯˙í…__†˙_ĩÂũawđÃú˙÷˙]}Ÿ_蹅úOđõûf}Ēį>ūĖú˙˙ŗE˙×÷ú\oũøKß˙ī˙˙#FŽ˙øFˆv˙÷Ŧ#â°Ŋ¤Ķũ{¯ûāĢū˙ÅūôYļ°Õ†—ßûiZëū­ŽD&ŊÖõ˙^ŦŅtŲĸÍ?¯ß˙˙˙ļÕ-íÂXo÷øa, ĩ{ŅüC˙Ŋūß˙¯ū˙˙˙oūÄ(¤ĶÖËúąûwë¤Á‚]¯ļ–ŸûÚëk˙û¯˙ū˙'Mé_é+ˇŨüV—ú_iūõ˙K˙Â./ūo˙÷×ü7õÚ Â ˆLD0´0ƒˆaah&0ƒ´“AÚL0ƒļĶü&G[Ķ"a‚KÚÚēÚû˙Ã[__˙ŦâÍ×ŲĸŌįO\Ítëīŋ]ŋë˙ú]īč/˙˙uđî 0B4ÉAH8å˜SB–öFāžå@ĻÅ ÂlTa6,aÄm0Ą„˜Ļ)4âˆJí+@×ģŊuÛ ¯ļ—˙ô˜om_Ōü&ŋûvuęŲžë˙úũWöiú_ūŨũūßī%ņ`ƒ.ĘIÂM“€Š bA¤Ķd8A†IŒ a`˜&h6DwlS [;n¯^ĐwŨÜ0“iZ˙{K˙uđÖĪī˙í×Ēög÷úë˙šõî{ûâ"""""&ŦքXL Áb%(ą;ĢTč Âm*%6H&aqØK 0ŦvNA?jÁaĩö”S }…ũŌí-Xk°Â_¯ūÃJĖ˙˙9ŌkĶf|DDDDDDD!a"AˆC)ÁÎ9ß,{$ę)Ã1H8h6IĶ ÚAÄãÂÃĄ„ƒLT‰ą ƒ6A2:´˜†Å6^ŠNíŦl0•Ûi/ë÷ ,DDDDDDDDC“`™# ÄD0˜BÔBˆM0šM‘GIĻ›‡(qR1Ķ 0ĐA‚lPA‚ a´Å2$6ŌM6ZvŦW#Œ˛ĀA‚`„DA„" &AĻhéĪÖNΏūĄ ÕÐiÆā„Aĩ¤s˙0A„!„#ІUĸ|0ŠnŠb""""5KĒõé}%I#°…ÆŌĒėtĸž"0M\De~āĨpâķĩ<ˇ¤dXŽ›šÚ”()YwßĨq;¤ĄH@æaHčČĩQ^yÚu÷˙uwâÉ\@˜TC.EŗŊ Ęq‘k}÷Ü80@Éž÷ĩR‚‚Ē3$ŦíIqĮļŊÚũ¤\ÉÎĶÔ)žd@ŋĮéĒúpŪĶ2˛ž%P^Vŋ˙­˙÷ė:ĢõŋũëKũ¯ũú…\ŽfŋĩßÚ˙~NE œiäY}~‡üG×Â,vM¨ DÁėĖ@ƒ#Ė\ÁFc0ķDgãlˆ"s$fŲøčgH‡réy*ōTŋĮč Ú;°”ÖŖEÃÖĶF‡ ‹qq  „â0„ `ĨÆ2#Æ3æyŽ\‰s4ŒŒHČioõõ;O˙ũ+ ÷ DœîAžáÚM„{¤ōoŌež-áÄhØÂ.ڍn8´4C¸°˜(L'„ķ.2@WŖėû0Ī Ūz?2xĸ"y#9¤ķĻžĢųĒÎÅWŌöšéëí[Ũ ‡IŪ_Ũ’ĘN“l—斐a˛;i0à  ĖūIÚ3¸ž/ô,"īj(T[ˆ`ĄB`Ą0ƒ!⁙˛ã3f3AŸĄ slčDPÍŦÛ õ;tŋ§•=<ŠßÕņöíutŋWėiŊēvĢôîô2æt†OpÉãÂ;#ļ‚~¸ĐLே„g &†ØBÂnĶąÚ ˆX‚ Īą„ â*!Vˆŗ—@§Ųƒ:䙔œeLˆ晞r:Ä-.˙÷˙øĻ ģ˙ŋø­ûĨ­žŊõÖÚŊ?OöĶĢē‡džģ3Ã'ĐN‘ÛJēnDČŖ¸A°šxÂ64Ø´n ÃŖcÕ0‰ĀhZ-ØPĻ‚˛L& Î `ØĄGĀ ƒÁAA0A"ˌˆ#HÁ)=‘ÆOOæŲŌ^ŖÃûë¨Úáī¯˙Ú˙Åūö×˙˙ũzëēÚązw]v&õļ;otž¯pÉĖžRwu–ųxŨ’ĄÂA6ōPĐMÆM4ŖcFĘ/ô‹N‹ļĒ„4kh5M0BŅ>!‚‚ ¯0ˆ[„A„Bˇ ):ˇîšüąŦ?ß˙áí˙Ģö†ß˙ū˙˙ŋēŋ^÷īôéV–íĩĨūéi[TënôãM¸hE&Ųt ŌpÉ=ŪMĨ¤é6gƒ$˄I[ģ#ēM„kÄãÂ4;ų›;I´ÛĨŊƒØa/ö %zwęŋõßížŋ_-'\DDDDDAÄDAšÁ0B"!… a5r7Î<1 ‘¸WūÅ1aĐA´ņØXļI4ąTÅL Â+ˆiŨ wŲmvŌlÚᄴöԎ¸uųéÄDDDAĄą 0Lą §ŋLœ&!F: Búa;VšjŲđ˜N%‚ ؈pÂ Û DCb˜†q"7-ęŠ']žqV¨ÖÁ; „&› §€Dti21Ėķ1v!21ᯑēĄú¯ZOŽ"DDDDDDDŖ ƒ€‚h0ļ’UĒI>¸ˆˆˆá„Ēô—Ō¤ątĄ$Ģë +Hjé$’ŒPØH›hD ęÁ1TŖ j§ˆ°Ĩt´MŗŖÅ[Ā!I‚’ˆČU™Eo¤Ö.ž}ØP¤”guÄ^ã AđúnĄBaJøĖ“Įjú´o÷pķÆ°§a(&d&ÎëgfwvļŋPĐwÂo… Žé8âzÃÛ´úšŲŲ. fē˙ëžÖî>žäˇIú×ũŽ˙đ÷Uĉúīū?ûũrƒ!’”#Ē:Ŗ‹^ŗ_˙˙âÖÔ"Ã4BC4 d“ŠjĖd‰ã™lIŦ†—4ŌĶ×ÎÆū8Õ.Ú6°˜EÅ(ĐĖ`a „[†apƒD-ŸŒ§3HÁš3HA“Æ™Â) æuūĩĖŽüŒ[đdųZW#ŅIļG{h'A: °Â *xá6Œí‡aS‚(Ņ ‚ÂŅn 0‹…D/†@ ˜$A#:ÎFąO'×KõԙäŅzúpĐēļĐm/ÕÕˇh$Û$ôęú ˇkvEvt{lŽÜ‹ á1 ƒa”ŅšĸáĻļNÚ40ˆ_|Ž ( Á0ƒÁL ¤1IŠPeˇ›fĻCĖDæBdųÉ<æk~žŠũm*ôēÕ÷ôŊ{hVÕ÷ÕŨ–{† m6“i6'Ĩi8dā • ›ĐäGĶaڄ^6đ…ĸņ'ĄiŖXhĐŅSC­Ģ õí˙ŲŽˆg÷†ģ ˙YŋaĨũ˙ëūš:KđE?õŌ˙ßž˙đ‚ũ˙ÂVŋN–ŋ˙˙ˇčĪ „XöŌ˙_P_˙˙˙č/û˙°˙ŪéięÚé0Ö­{[^­W˙ķOũ.­}[Wíéē˙Ģ4ūŋũ˙ ŋuŽ+ū˙ŋü °č-´ŋ˙thōĮ˙÷˙đŋ÷_ˇÂaEļA§íobŠV*Đ6A†­Š}ëˇëuĶ .ŧ4›ûŦĪĩ_[]×ũŋ×÷¯Wø§ū˙˙˙Kt¸¯é˙ ~˙ˇ÷˙öo˙×đØŲWa™ė1 í’uĸš Đ@ÃQ(u ˆÂ ˆaa;[ki1 Đ;c´ėÂmX0–Ŋļ“ .Ōŋí=uûSŸ˙ô×؟ļg˙ũš+×6-ĒēßĒ[{}ß[¯č/ũŠüĐ6I[â˜0Ž—¯úv—˙×÷–éwÄDDDDDDDDA›PL&B-=Jë0ö§ˆjSųĮ({ V•6F:b¤QÔ0Å1L[@☠ƒ@ÂėSiƒM;a—ö;AŲíGDtÃ^ęÄDG L&A„ĻĪdė&›A„Â0°Ŗb!„N"H`†voâ""؈ˆˆˆˆˆˆƒ!—`„IĐaJ.™8L”nÛdQéą_JzDDDDDDFÁ” úģ?ÄkĨN}Ø*ŌO0ƒ jŧYWí-b5 ÕĻ!C E‚Š•ųaA3ąĸ;ƌíU IϘLÉ>J"7šÄęęž߅ÁAA3ƒ+‚ĢôPĶž~Ô(Rš&d'“ú¨Đ솔8yãFķC%Ņȉg–b5ŪēũkÛ­pËûíéX3V]t›dŸ^áü2vL$n‚´ƒî‚–>F?Á Â ÃSEÛFĮčZ!ˆé= C0L ÎÁ‚—Āâ fl𚯤’"“™@ČÆQ›ŒČˆÍäæw¤j˙˙˙§{ëmõMũ?´+j˙ĩģˇKlĨÃ̇‚ †].Õ82æ_éĩ ‡dvä8âF8@ÂPŒīøŅwFļ…ˇĄ'aŖ[ ĄpŅ  0AĻ0‹ƒÂa;0˜@ œSAb“™š#į‘tP2qÂH]šŸ &LLäskô¨›^ãPŧ~Ģ˙jĩø˙ãø­īũŽ˙ëĨĨo†œ2čNú ôvF:Ļg¤ė•Ã˛\JŨI¸ĐAĩEãFvtl ƒ„xƂ 40ÚhĐŅ 4[†ƒBAĻnÂÁ›ØĘØ  ƒ83c‚64‰>%„ŽEƒqsO# *Éĩ™âīQ}üz˙ßĒf[˙÷I'˙÷úž‡­_Wh:╴öĄ=ZXdâ“`Ë­i:N•Ĩi6ČĮîm&Â4RtááÁŅŗA´lÉķi§t-ŨūänîŅn,'‚æÅAęhdå›4Âũ,zyĢĻŋū‰ĢÉÁC„Ã˙‡z[Äwī˙ßēŠWûûõ˙Đ÷˙ūû÷CW֓īžë°šJŲv’ŌŌm'JÕ´ƒoĨĨi?a Đpᒸpû‡Gŋ6“,|ũūEÛŌUP´˙ŌŊßū¸B,?ønŸ5y”_˙ßū?˙ũĨ˙˙Ą˙˙Ũ¯Ū­_bĢbž+Đ÷Ú÷î–ŋîēNĶéo ũ'đ­ôß¤îžøjžÁ%G}#ŧ0‡ūûē;Ō˙˙Øė?˙a˙˙é/õ˙ũuĩ˙×ûū‡Jũ |vũGĄ køĒt×ū5úļßî˙o˙˙ö;ī ’´!#ēWBœÕũ÷ë˙øoü6Ú;Ō× ßĨūõ˙˙˙nēâŋË&˙˙šuĮƒ[ū6¸q¨×đĐ×ũ+˙|ũŋûŌø*ZKîŋéu˙˙a˙Áúŋ|7[×ũĢ˙˙˙߅ÂũU˙˙ęŦ9zƒų’fԇ$,%†‰Ė,‡˙ũ}ëÚ˙úīôĸåģi.•“Ŗ‹~ØØ˙ūũ˙ŨŽ*×ė˙˙˙úV ë˙˙õūá[ØaúVžÃ—¯÷^ŊöĮ˙ūé%Ŋiŋj_f}S˙îNˇ'Oūô˙mü/öŌ˙˙˙Ū°‹ŽqÛJ˙˙ę˙đ‹Äa˙ía[đžÃ¯û¯évũûØ,ÂĩJ‚Đ>é†M_m_´ŋÛ^—˙ė÷ôŲžög’čé˙Æé˙˙k ŊėW˙˙˙øAađl ŋėpEŧđDĮø˙Ž˙ÃÁũ&ūũū!}(­4øĒpÚK¯ l0•÷¯īÚĢk׎¯ĩ™Íˇ_˙¯¯Ŗ8&˙˙˙ūĐXnŨ/ŋ´Đ_†īũĩŋü?„h˙íáŋŋé*đDp§ a =6ÂlR”CNM*v*â­mž/[?ēŪŋMūŲš˙×éŗEézûēũų:×ÛŌü?˙ú_áũ/Ø oåŽū×Qˆ0„Â5ĻaˆNČĮvAC ŠtœSĶA†A„‚ph9ß $īb­+Oîöõõû {öļģ`Š~oĢ3F?÷3öÖÍYÄögļ—įŲĸūĸŋˇŨôŊ„˙ģ¤õË(BuÉf0 œ5+­E"ĮÜ5M ›†)nĐa„0ƒbëˆ5ˆ4ä=/aē}1Vél0现Âé / XaoŊĩŗ5īījßĢú÷œ_¯éz9?íŲĸíK­+ˆˆˆˆˆˆˆˆ¸ˆ"!„„É8)߲1Ã}‘Ž‚E6‚ ØĐaƒ†pA°ŌMŠˆ;V*ûlRlSŠZPa& [[I†ļĨ]õ÷ß˙úšĩũģO}s‹o=8ˆˆˆˆ6Á0„0˜Ca„ĘVIÁL?4Í[ƒa21ÔSQLJt6‚ ϘŽÕŠb˜‡íXĻÂv“°ÁvØAÚÚĐ}¤Úí×öÃK´+ M—D۝'¯qb€˜L  "†Âaaa™'LB 0¤n™|SLlĄÅTaqÄ&60ƒ´ĸ‚{I0šp₷Q\0ŋZnz1`ƒ „!?2pƒ†]E’€M2p “…;ŲN!2(ęRh0œ0Đ@áÕt4ēVŌhDDDDhDDDDDDO!4„DXEBT××tŧføˆˆˆí"ĻI7ú>ŌHŽZmŪ—âĩnŌ×°šĄ† uCø°ˆKņ ­(ņXL)\ē!hC-”⤴Č+2ĘV0ĒėՓ&KŦĐīĒ… Žb;Ę~î8pú3ķđ)NŠ˜ÁAHC;T/ūáŌpëĻĒ…+§ČLÁ•Ë2ŋ˙ãáÔ"æwtaä;4ĐđRL‰b;(?˙ôīē ˇwH:mÉA ČFŧ‡ÚDwPsą‘T_ßõQô›˙n l:‡pÂäŲ_×ũņ ßõMĨ‡īvƒƒ'mĪŋūE—˙ĶūŖuŨ×ĩĶo‡ūëúúWūÚ[Đ˙ī]Jü<Á›gHęy.ˆFCŠ¯ú™*~ßëŽ;˙ŪŌÂ3âÂ-ŪaÁ@́˜ Îf3<â#Ę\dƒ 唎ŋų؞ߝ–d…ūž= ö‚ ƌ;FĘ8î|„]†‹Fļ†`T8°œ‡"nÁL Ųa`CF ™ŦSAHaOÆČá™ÆĖá,Û:™#7) ΞS˙ū­ú§š˙ëZíËīÉķ'' VĐAļK‰cI°Đa0™'höëAÃM0´laĻ‘­áa„Ch„]°‹ˆ.˜! 2˛A0A‚„Ņ ‚Sė¸ęüœķ ęDŒŲžgG3Ē_ŋU˙ĒûĶĨuíúOëm0ĩߨ éa–ž“{֕´ŌMč Û¤A0ĐAđāė¨q)Ãŧhj‹ļ‹¸P…¯› Ä0ƒÂah‰ĀÁL Ī3N5$<`‰šķC-Ij"‹_ũ~?ûŽ—øĶûÕīî›uĢoúOŌO­†]]],=ģPœ0ƒĶaÃ'0­ī"?|0´gvÍĩ ĸė0š¨Pš3´Cā`šavnņa8dČÕMû(ÖAL *åÆP.Eãfpˆgdr"gIi´M„Öû˙ūÖßĶV˙˙Ōˇë×õéũę÷ßĻž›Iļ]ĒÛKp ˙ A<ž4›d¸–B5ˇIļ>'¤øF‡‚mí&l( avĒ,"âˆx:ˆl „ÁÎą„ÕM Ќ3dn4tiâ=šŒäi Œ›+<Kė/Įŋū>Ōú˙ī^-ēīLUÕũõč]z˙­^l4Ķî~› œ\0ŌsN,Ĩöüži6éÂŖBF†Č°ĐOé7†™1ČGįį'Ãhģ¤šĻĄ0š¨CĖ. Ļ|‹šØ}Ë'Įū˙—]uĮ˙îēÕuöûß˙ûßãK˙đ—ū“ūŋô/O˙°›­ßë ŗšv§%¤á„ÚNt/ÚO´Â zl8zf|BFļŽéQ‡čÎđĄõNqŌŖ‚aãí˙áW ߯ÕĘĶáßô]~]^øk×˙û­˙ŋŋéũ˙úMÖũŽŋá¯˙T××ŌĨé÷˙ŊújÖöũq¤­tĒ•'Ĩ…ZĨé-S3É´Ô7×ā‹āĄŋ˙Õ×Â˙Ú8í~Ō¯öŽ˙÷˙ķk˙ĩ´ą˙˙k˙×Ŋ˙QC˙$ĒŦV—ũu_WŪŋë´_~’•5ŖŅ/)ëŌŌ˙8Ŋˇ4Ô÷ũš/­i%K÷˙ũŌú˙ؤŋޞúÕkÕt2ŋâ Á°˜L”ÂaE…•ˆC ŋ’…ϝ60à 5l$ńa´› 'eö*Ķ][$Ûõ÷IĶ˙×ŊëöĪö•'ûŽsSmyUK˙_ėŅköhŋTw8–Ē–ēJ•KëTĨõÂÄDDDDDDDDDD!hCCX„Îø„„­‘Ž­;ˆAŠ8ÚbÂ0ƒa„“†8ƒNÛI5NÂļŌĩīĢĩ^V /ßà ZZXSŖŽ+ũŋöÕw^Û[īQ!ŊuĒĪ-,ēŌKIQĮULBˆˆˆˆˆˆˆˆŒ ÁadnØbhlŒtƒ ąH4N70à  &a dGp Šbŧ ÂiąÅE* :âĢM?MŊa‚ØJŋmtģĢŌnŠmPÕizTēZÕf‘P!D0„E“…˛žÄ.ū)änO &’ ƒjĄE1H*¨°ƒ6.DpĐlB: ϜU¤Ã4ĩ kö¨¨¨ĢKI į6ÄDDCˆˆˆ‰ü0@Á0„A‚ „DCT„ÕS$ëŲėi†ˇ†a6ĸŖˆßë×˙ũéĨ˙|zü[u˙ĄÖŠŪŊÛĨúĩˇMZ^ôÂvšmĄ ëtۆ]6•ƒ.¤á‚w ¤ŌÚ蕤~Y4hh&ŌŌ Ū|âŅēŽ4lhģū0¨ˇ„Lvĩõ˙˙æĢ˙6¤/WīūXåˇú×˙˙ãø÷|bũ!¯ûģĨēūŽž÷Wßũßt´ēIĶ.‹ĒEBœu´'ęšÉŌ“˛}ęŲé-,=Z ÷§Ãƒč Úī ū ˙˙˙÷ũŨoĨô#ū‹¯SU˙åëä‡.”Ŋxkú˙Į~ŋ˙ÅīņÕûīú]~ŌIVĸ?ZęÚWŋVīĢl&ˇîNŌēOچ\îáŌ­ÆŸ÷„X˙˙˙˙¯ôqëũ˙˙Ú˙˙_7Í_V]_Û@Ąũū—ú¯˙ûęŊ-zũ/ū–ŋë}é>)kĐ¯˙_úOŧ$˙á˙˙ū?ļ¯˙ū˙˙˙˙ëמß˙¯ËÔ5ö˙ūZŋōa7˙œ —XĮ¤ĄĶî×˙ūõũëĄņkîŋ˙xë÷ëŌ˙˙ū÷úŠë˙÷K˙˙Ū×ü7˙˙í˙˙˙˙_…˙Õkéb˙˙˙˙˙ũĶ˙­C-ŌÕ/ũ/˙˙īé×ū×÷ēŋ˙ŋˇJõpß˙_áŋ˙˙˙˙Â˙īJēđŠWÖĢúū˙˙—UĒũW˙áÃ˙ļĢûĨŪ؟˙šĸWZúėŅÜ˙˙ąūĄß˙Ãŋ×˙˙˙á?˙ekZ¤ Rü/˙˙_˙¯ˇŋõVǰŋ÷é] ^Â÷U_ļžēũ™ũ™˙ūŲĸû4U{īzūØoíũ˙ū°‚üUk¯¯đ‹˙˙ß˙÷ú_÷ĶaņaÃ8‡iŌļMŠ˙V+uzŌŨ-†ŋ{i4Ú˙ũ¯ē홭[<ģ3ũÛ˙Í:÷˙˙˙mūŋū˛ū—Ō×č/˙¯ë˙ũ˙ß_ûÃcdœ%M‘Šb‚ ‹h aaA¸A°Â í$í&}ŠNũâģOģcøa&› ũí¯ŲšŌ_ĩ#˙ŋ˙öié~NŋIũkŌ^•ü%÷ú˙˙˙¯ũ×˙áá„ ØUaA„!’pA„CRŗ*đ°ÅSÅbŖia60A„A„  šl|R}„ Ö+Øa[¯Øa+Öí/˙†•ũ°ÂV—˙ĒõųĪËŖííoÛõŋūûÛ×˙đÜDDDDDDDDDDDF[˜h !i ÂŸ?ꆃkh  ˆ´š0›ØTĐab­+VŌMm´ö=/†ëĐ}˙aqN’U}G˙[͝īUžjÚ[îiögūÅúüDDDDDDDB!„Đ0™ī5äp!–LBA„ᆘ ؠƒA„âAĩiäKà Å„MU8ĒĩÖ)i?[îīūŌO__V[jÚ˙˙yžŸg¨ęA0„C Đ“ĻF?i”ânĐbČŨ&˜A„AÕ1UĩIP"ÃAÄ6M†špČđL6– Û…ˇqņWk_kˇm˙Â(œP&ˆˆ°Š…TÂØNĒ›$ö60›lPA„đAą@ą´6› Ļé§jÚvˇÄDDDG°2ė˛eÁ‡Âebdnƒ i‰O:A„Ü Øâŋˆˆˆˆ¸ˆˆƒ'LDDE’‚‚€Ą?\DDDCúĒúŦ }qH$”Ļ…šB–*„1•íšâ•Ÿ5¨PPPR•ļWĢ+jîĢ…?‚‚ge1چvGwÃĻĒ ‚d‘™vV~ūūĒÃō’ ‚˙ũöÃi{z&%%7ƒ$Ėû25ŋū=U îŨēdØNH§Ô(Rēs; ʕ˙˙ū÷íĶw˧(L˙ũëCõžŪîęčī˙˙˙~8Õ~û¤Đ˙æŋŋül}GåĪ!˙úú’Ίuũ~?âh!@„€Ĩ!šFˑ #g”„i›qFSätD4kZūļÍ_˙דĮŖ`aŒ"î`Ą0‹ŒXF† ÁKˆ`a;Âapˆâ‚— Á.g†PIČã( 2Db­uõĖƒĘE˙¯Ļô›Ļ ŅîÄîĐOi7Ą Ō7;¸´-څL"ā0‹Š!ėˇq*3˛@…Å0A įLĐeŠ@ĨŸ(,íBUÕV˙;§˙oIÕ×IØAŌy|Ōm’~Ļ’m’vK%&ŅíąĶ ƒá ÚA°Âa4xãļ‚!āÖEÃD=šEģBÂ82P)˜#ÂH Ļ‘8š¨SŦ~0eHÉ IQ›Žg2 ŠSŽC˙×˙ëi]ií?ĶûCúKĐkmĻÚt°“˛p’mpËôŨZMģÕ6ČĮė'§IŊ&Â=#c˙Â.ØDá„]´0››AAS: \S`ƒD. Á0ˆ^ "$Á‚"lÔ¸$A3—3Ų3Íw”Fo4ˆ”HÍÄbR_ũ˙éëúßģũ¸¯žß×÷ˇ˙JÛ ­ Ëûia—4ôá—6—°ƒ  ŌA¸A†“Z/FĪĶNŒ"î¨ÖЋš„āŅĄĸŪ°˜PL'›Âgˆ&l@ƒ2Pƒ(ĐU6‘Ŗ0Gž3ŒĐeƒĖ3Š’ĘΙ/ä&tEēÍ˙ĩūŋ¯ãßž:˙íũ*¯Ķ~ĒīĨã ĩŌū×Ũ_…ŊUĢ͆\é|$›vGmϘI];Ĩl†Ëi>I´vGmĩú68šĄĻ…„]Âh¸ ˜BÂ` Ą0ƒ<  ņLĐCC åČ0Rå]ôž›ņũ_äĮZŽ•l/ŋøēõęãģ­ŋ¯]­Vŋ¯IŊ%m+J÷­R÷a>éoėšĻŲ;<é8e˙ š§ö›IŨ’ÎÂIˇIÂ5Ų ŅŪŖ"ؕ~-Ž'wŽ-ö]†…Ä4\Įûūē˙~jŖīōÁôL?ũëĒ×á.:?éGK˙õũZŌąũģÕU˙Ąû}oz×v¯A?ŽÉÂIŌØOēļ–“†\Ķa„Âl8dņ¤Øa“ĮMČīI7ČŪ‚ú˙á/˙ũîŧ/īK×˙ŧ˛~—ã4ĸôōnPå:_ũ+ŌKW˙ÅŌŋãqĐũīúĖ cˇūú_ũ ŽíZZôũë˙ĶĶtŨ:áĻÁši°É:‚o°É?û÷žūŋ˙kāŋę ˙ũ}ŖŽ×˙˙„"?üQ˜kē}õüB‡ûé,?ūöž;Ū¯¯Køž˙õ˙ūú˙ëtúŧ!Ũv˙ׯ oũ:ē^‹û„h˙˙kß˙õ˙˙×ŋ˙×ôŦ?í>^€ųĒûË ã×é]ĩúí|{_ū˙ˇņßÕ˙‚(~M‡].éÖôúũÚŧ~‚˙í/{˙ũŌt›ųcą˙˙û(ŽĖˆîŅŪ—ũ˙ģ˙­‡˙°đēMŽ—|Wčēė˙ãōę˙ęÛû˙˙čG¯˙˙<ŋßû4_ĩz_Zé}˙˙qĮũ7˙˙ÜÎÄDGī˙˙NÃūÚ;× ˙ī­ė? ˙û /ø^ĩ˙˙˙šŋüŋūˇ§ĢĐkû˙¯¯f~žŊYĸ_°E?ßéÉĶ_^ŪŨ÷˙÷˙˙Ėė7ūˇá˙đێ͇đŋßūáÂū˙ũ_¯ū‡]¤­¤Úˇięˇkė_ĶjŸ˙°×÷[ûKĢ]­}ŋ4ī°EC˙Û}ētŋŨ[üTVŋÃé}ƒøEÆūXī˙Â4}p‹á>ŋ˙ú˙˙ß (A°ÂL0‚a„ö!„Õ†˜M6)nŨŠÛAÚV“§Á‚O{ujà VŨ}í¤ŲšÛ_öÍŨ?ũ˙}ŋîíŋūKŊŋKëß÷ÃĨûé}áßũ˙˙˙ßĘôãÃĻ%:y(PĐlJƒM „!ĶAG(iZMDAąL0›"CKIŠzm%Mž ,0JāÂÚŨà ¯Ķ¤Ũ:~æ~Ųŋūģ3Č˙؟ųúû3ČūnzKīØŪá/ũū—˙î’ū˙˙ŧDDDC‹D!‹†´ÂˆQ „É91áĻ%Ļ*!=;0ƒ@Đ6)‘ BmȎØĢ†ĶŨ:ˇļœ0ģzūôÚWÛk˙ëí¯K¯_˙ögæžr˙ŋÛŗ?˙õ˙ū˙˙īˆˆˆŒē‹Ú @Áf Đ0„YYPĐa4Đc‹h āß 0Ŧ0‚a§Å'IĻTnލzv•„Đwzjļžžßė4ŋO×uû?ļē˙ūûĨögūŨ~æŸ_Ī "Dv2iÂĄU1 ŠbPöà …ÂaģPŌ ƒAà Ä㍑-0Â\4C šaaĻąö—aĩm;R:`Áb›t˙ūŌ˙a¯ú˙ieēׯ:â!˜@BC1kBiŠ3ŨėBa2pšj)ØĻF:AϚ,&m -Æh8‡ą5"8°ƒ4A ÂmĨi*lW{i~ƚ—ˆˆˆˆˆˆˆˆˆˆˆˆyœĄĘĐ ÂÂ!8eĀS¸":•pČÜ&NM4É:íU4ÃaĐ Â Øa „  ƒ˙ˆˆˆ‡ ˆˆˆ†Â &WC(u†!zĩá~´#ˆˆˆˆˆ‰F1úü~ēK4ZžĶ… ¸ˆô´Į ø„ÎËQnÉc"q$Éĸ;5ÆWČ)ž&BČĨ)‘چv¨ŠēnŅNũAJ€C2#°Lė ™ ]÷oũ xSģ…-ĖĢO˙î˜#Ŧ“ēy‚‚giDvI§QØ^×ũt/‡ŊBŒ28Čų‘Ņ‚čet\z÷u~°čņF¨)–2*˙ëûWZBy~KáÃå</˙˙ņĮZAŊŪŨų”}?Ęĸ˙˙×ßŪú¯ūŋ˙˙[˙ü¯ŲžlČfo#,ĶUĘ+.Âúû땟2õũãđPL&"8D ˆW!.8ƒ3i˜Yq’ ҘfaMgk˜2(Œ2Zȗ˙ŽļvųØ<¤×˙‚ ąØGwĒŖã“Æ ‹ … „\Q…M°! ÁB ę3cq›Aū}˜4ÉÆQghjNgVy)!kJžžw‹ūá—Ív’¸dāĢ' Véˇy(höãA Ük„gqaŨī„˙ aö\ ˜! ah…‰ ”xf:ŗĖÁ‘3Ų†t2H5!˛B×ũ<ČĶÎëü”¯Ŋ8­īCCĨîá˜`AŌpÉÂKđÉŧ2čO Ų,¸t›}x•H6Æyģh×C¸zĸŨ…  ƒ8FÅD,aaˆ\ ņ2æ\e8Âe(˜¤(RxÃĖã øĘ3ŒņåFâŨu˙Nõú˙˙}˙¯BēWCĶĢ´˙ŋ̆ƒa—éļIôéöXöBžƒvH õŒ"vlmMéŖXq„[´CÛD=ĩL&Âa0La0ˆ\ †ã.z— flÁŽlÉ4Œ33*q Šts5ˑ‰áwëë˙ūˆŖëũ˙¯ëûü}}úúē+IÄ3R—Âđė–Ráw ›Š}KGˇNŌO ŨÜ ú3Ŋš60‹āãCEāhN8ÚŖ[}ń[°Ą4CĀ´[°P˜FpČb„L†A —.0Sņ‚G5!Œ¨NJGRÜĘūø˙ü}˙ŋü˙˙ ˙˙õēõm_K}Ļ÷[ö‡žÕÕÃ568<l2æœ2éŊéÃ$<I°Â a’$ØhI6û$; Ü_h&ãH6i¤wh×BҰ4â„ĶE¸´Cá1Ø(AÄ3c64Cˇ$ß˙˙åĢ˙ãëĸc”āŋq˙ívŊ}õë˙Ļ•ö4˙î–ŊŽŊ žĶĢzékpƒ “°ŠØNí _I;' AĨlŸC.…õ+ “Ōļ “áÃ#ˆIžJ/Ŋ&Xũ 4^Qx/›˙˙PŋũoūŸô#ūŋė?z˙ō˙˙¨á+ūÖ˙ô?øēûõėR|zŋõˇUčzŌŨž›WĻ—úIŌļnœ2čl8a6“´tˇN“iXpyĄ˙t˙_˙˙ũB˙°ü/¯¯č‡$˙˙éCū˙û\=/ģëãž˙ī¯¨a?ß˙ũ:÷Ģģ[˙§ėt´´Ÿ ö„h˙īkūnŋ˙Â˙ˇá­˙˙퍇û˙ų`ė>]_†Ŗûu‹æŅgĩ˙ß˙zûC˙ããm5¯ū˙ūž›_ˇ˙ą /˙ŋ˙A˙ē4ÁˇÂ-ũ˙ū?ī˙°˙a˙˙Aa˙ė=^mY°T÷ŌûųĢk5_¯˙Žŋ~ī˙˙¯]}˙ũŸ˙ūŋŌ÷˙\%˙‡ôõzû˙ļ—ōĮa˙ ˙˙… ˙áˇđÃ˙˙˙õ˙—WũU’ŠÁ×˙˙˙úŋ˙_I/ßÛ4_ūŋ{f‹ũ/˙ôŋ_ũâŋÛ˙˙ũ„[Ã˙áŊļJNõß˙Ũ/˙˙˙ģÁXw¯˙÷ũ˙˙ž˙˙†Ŋwũ˙kß˙žm?ū~m/ôŋžwíö˙‡˙˙K ÷øo'ėëû˙~˙û˙÷ūqøP˙˙˙Ĩôŋ˙ûTä*vkŲ´ŲĩąV—ëŽÚ°Âīúũ÷ßúl5ũŋ}é!ûÛŨ˙ëm-÷ũÕ/ßũõũn7˙˙Ũ´´‘ĸ÷˙ũē˙ũá0ƒAÁÆ0AĮ Ģ lŠ€ĐlC6AÅ ėŧšv5ėv• ė){ _ē]̝~gí˜˙Čk´ŋû3U›_fä4úũš'zõë¯ļ­~Ÿ˙ŋŒ%‡˙˙Ũ˙é˙â#a—a†ƒ&0"§ZrP“bqĐh ؈aÄ㠃68Ļ8Œ ö( Đi°ŌA°Đm¤‘Ņ…fÁ„ļÛJūÕéĩģÛ ÷VÚWúŋíŠĩũū˙3ęĖüŌūÍ˙š}“ĒĒ˙×˙X_ŋ¯˙fãÄDDDDDDDJ˛ĖÂd ¯Lœdā- ÂTĐlR ŽJ" Š’anŌ†!Ã#ËÅXAßfjŊÕël5÷KûKũĩv×Oî×˙‡öŽë›ßŪŋũ%ûÛúū‚ˆˆˆˆˆˆˆˆ”! œ Bm’â‚h0œPbą ¨ė$ÆŌ &v”ˆâ‰Ŧ$ÃI4Ķm$Õv+bŊ;Ø˙öÂ[ %UúũÕ˙ëÚWëĢūœDEąR0™89Ɂ„ÉÂbš /âžJ†˜Ļ( Đh6(  6š ā„ ¤ĶblRlSöwKļļazÛtûuu^U""""""""uÁ•0˜A‚a" ÂXaPkkĩh&ĻĐAĩ[‡ąAlS  a ‰Č–Âļƒm%J Û1×W|DĂ˜L(Bi† ‘ŋûļ˜„ÆÅ1Lqô’qavEY˛ps…´ēgœDDDDlŒuĒObkŧŽR˜`’\bđÁiFŌÅXRÜ) ˇ,2˛ËrŽĄAKFK"¸j9n"@ÁLđLȕ’jũĪT]5#0˜&v´ÎÁ#ŗũôÔ>é…S°<(PS Ļw]úV•ũí.Ÿšå vYœdÚĪãĩA­Ž¨_ęī“F„ˆVmAOøãŽ_ũÜ>ĩLīYe~Îæ˛ Ŋ|}…ģŋíéŖÂë¯ßøę?ĶļרŽē×˙ū>ĶM|֎™ŗ!ĘC=sˆ×Ņ˙˙ļ"="Čō „!x<Ā†Æˆ[‚31LÅ%ČÁž§f †2Fq” ūm ë,Oš#ڑ ČË;¯ōd˛.ŋŌĸáĐŅŨ¨FĮÖąaÚ=Ņ­ĻTkaBh‚`š`Ą`‚„B'" ˜ ÉO°S(ŽgwÃ3äķ‘#4GŗRU×īLė¯ķ˛•k†].
ČąI–>x’č׋ …ĸāXA‚„A‚a¨!lC ‚ Ķ “‹œEãÃ"Q2\yŽ3ŒæĖ‡)Ų„žē¤ŋ÷ī×ÛũŌĶ×huļ›öŸēweĪXf„á'NŽŌN“aÇIä­ŧ‹ &gĸûŲEākz.EÃFļˆw„\= „L&žl@PBŅbĐh…S"Á’āŅ äN—dņ‚:!l‘'æ’e ĘČÕˆ/˙zøŋ˙ƒOĩ˙_§¯m+Zũ}ūž›ėwŽN×ü'pÂVé6ÉcJŌl2CĻNԞ:nƒ¤Ûč&đ›(žqh×pÂ˙ ßá4ŅpâÂ`š ) Bâ˜$*!RR4BÄ& „ `„LĖdA•Ī9Æ‘BLDˆÅ˙ĮzŨ/â›CkĐ÷[ûøč~ņũ˙úėV¨}_ßüjÚ§h\iŌ]—Jũ%i[%”Ÿ„2xÃ,åãGÆÉ  “rPŅáąŖt0˜L ŒīOÂi¨Fƅ„]´kaB40™ÔC ˆg˛:;D' ƒ-‘į˙õE×ëųĩ0žĨ“˙đû¯ęŋ×˙īėw]ÕÕŋ]oũWŨëŌÚÛjöÕ.Ÿ§ ¸ŊŌNt  ęė–RwzIÜ2ÄŠ#\21Ķí˛;iZOĐtha„âä;Ãh ÚhØã˙‚˙û^ŋũ‡čŊ?˙˙˙ïÛ˙õ˙ˇ÷‹N?PւąIéėtŸū˙ũ}zÕļ›_ôŪÂI6ÂKa:OØu´ÚvF: ŗŨ+ $Ûĩ˙҇˙¯ęÂ˙˙°˙˙˙˙˙a¯đ˙˙¯¯ôÃ˙+īūˇũ˙}/ņßë­ÛûøĢë[ū’ũŌŊ'aŊ­Ųm“´?ü ŋŨ/đŪŸß˙†˙˙˙˙ûIŋö˙˙ōÔ'æÔ4ZOé0ëø<%īøũŪ×˙_ũĒ]|üC"ėnŸņũV’čúWˇßû‡°—˙ū˙˙˙˙nŋö˙÷¯˙˙ÕŋÖ8{)˙ô‡ëĮõīĮųd˙îąđë´ēū?oīúT˙Ĩũú ˙˙o§˙˙˙ö(=ū˙Ú˙˙˙†ūÃúÛŋ˙ ēëūũõ_×Ņuũ’ÃūũW˙˙¯ŲŸąŸĩėĪ.ŗEûf‹ŪŊūÛū˙˙ôoøũŠ˙ß˙Ã˙ØđŨ˙øFÚ0í _đŋú8î‚ū˙_¨jß˙Ë1˙vĢ}Û .“ŋm+í~í~×Íũögæ‹˙ũ˙ŅĒ+į?Ũ˙ø_÷kūá˙ynÁģü–í˙đ‚û¯ˇ˙„[˙Û¯[ŋÂ˙ŋØl.—ûú_dKĶNÂËėiŋ›WqV“Š+ ī^Ũi6a§û ˙¯Ú˙úmîĻ˙˙FI_~ŋíÛ˙ˇ˙}×˙KØØĐ_~‚˙õb’˙Fˇ˙†Á÷¯˙ßí2(雇Lm[a´šˆÂ Š „ $ÚWQLBOMƒ¯ÖīOîģ8û˙˙̝ŗ4˙ũ™åūĖ˙Ŋˇę÷Ûu˙_Ē_ũ/ߏAWá/˙ß‚í˙ŋ†0B"AĻ0Cģ&4 (4ÉÂļiąAŽ(4ĐA„ Ø ƒ0A„`Âa0˜AČ'4ļ*á„k§}ĻÚ^ô—öŌžÂWļÛ8ļ×ÎĢí]}¯ûõīŊĒ[ō¯ōuíŪéTëņ ˆˆˆˆ“ĄÁKaˆ†*2 Ęģ'}Į´l\A`˜A„ƒŒi&ƒb›I6M67V;0•†Û´/´­ŋģ˙öģÛ?÷˙~˙ÚzūÚũ™Ģ3ķ‰ÖÚū÷ôēXˆˆˆˆˆˆˆØˆ`…’ƒø…+,ãŲß8áÖÛ‚i´¤E„QMFŠ8v“ šv’qadGią ‘~ƒlĮ _aHëŨk‘Ōę¯pÂZļĨÚ˙˙؟ˇåēŖūĪ8ˆˆˆˆˆˆpˆaC,l(A„˜xkN)ŠMÚm Ķdc魉C¨Ã‚ ؆íDa9đDB=;ŠbģĢR:ĨīļKtŋIi<͈ˆˆˆˆˆˆƒ8P!F „[TĶM[ÉBöE5L“ĢiöF:bÚ „a„˜Â`ƒdLؤí+¯Ŋ8ˆˆˆˆˆˆˆˆˆ0B"A„!„"A Ë.‹ …;â™7M]ĩM 1A-ÉtZZN""""""""" ÃÂzøˆŽ‡ēT´Ĩ} ƒŠ´ĸ,&CĻ……ËZŦė KX‚;ҐHˇ˙… IY)fJœ8wÔ*„Ė#°Ü;ž§tÁA{ûģēz˙ũß˙˙˙ũ˙˙Ģ˙˙ĖĢY,Kī˙×_*~RŅÜ/åÆud1I7”F"ƒ5E?æ"2]}uRĨ¯‹5<&ag6,A„ Rv`ˆ§Œá ɁHq‡!õ$‹›e#R#4ˆĻuÉ5ǝäc´xhØŅņŖc Ÿ’ļ­ŖCXEÃNŅ ˇ`Ą8aˆ\„Á 2@@ˆ‡"\‚"ˆhĖĐ)­—#ĄĻQFlĶ(į#Zɲà:N‚}‘KFļ“ƒ@ÂĻŌm&äAÚ °pz ÎOEãN!Ŗe.EÛ ¨Ņ … „\BÂh‡xE¸`˜M¸Ņ LÉaČܝˌ¨2ˆÃõīęû4ļ“ĨõMö“†:ū‰ĻÃ$ö›I°Éœŧ¤é6‚zH7MŖŪ'v‚vG  ›‹Méń]ģÂ. =ūĮü~íôŋŨ/˙„;íÕ:N­ŽtV;[…p“´$á—JNÉc œĶ˛P¤­¤Ø8:LĪ‘ģG‡˙ŋøēëŌî4ĶüĻõŌõJŌn…_ļzoéûié]Ą„é7õo8IŲ(_`Įúöëuõ÷ooõ÷ĮKņūëí_ÕĮßo×h~­¯ĸÕ˙_—Qc=˙¯ŋ˙˙°m}ŋņûˇú_˙īü+ /á}˙˙˙í×˙˙ëÛė_Å~Ŋa˙˙˙˙Â,xlc˙ ö—˙˙˙˙ú˙ūė_˙_™?Ø˙˙”øA8p‚~°‹˙˙˙ú˙ë˙˙¨l/¸_˙a˙ˇ˙áuú[×î‚ītŋoīūŋ÷ūũ,8Eŋ˙Â,õáŋ˙Ūŧ/ūŗé×û˙ŋV˙˙ũ˙ß˙˙àŋ˙A?ßá˙ëí|"ߏíoūėüˇ|WY§fÛ}ˇZĨĨ¯úûûĨũú„ģû÷˙_bŧ ŋ§§kĻĒà jûõ &×Û?˙¯ī˙jõ}ų:ÖŊūŠ~Íīû˙ ëáœ]ĨĶļ*Đm ęՊbĩa„­m´ģJŌoßēl˙éwöŊ˙ļŋgüõũūŽ3¯ôŲ'QL“¤Â Ļ%˜ŪÂOAqąDŌOI´Ą‘û¸iļŦU˜A´ģ[Aû­Ĩ˙ }īOũ/_׈ƒCL!Âa4ÉBȐØAĨ°Â‘ēv)Å)Œ  ‹b‹a„‚ÃJ0ƒ6!ÚQ!!ąJœ2?ŽŲļŌa„īŋâ"""#B ĘØ`„ `„ėÔà ŠUC#tL&˜Ž(2CĢŲuÉ:h&ĐA ØØĢŒ  †‹~ â ô"""""""""" Á0RÜ „B ‹L'jgáˆLŠ:ģVIŌ|Gâ""UÄXL!¯C7ą}–Ęé%Đ­é-k…úLm(„Pe›‰ZæYß)k ā¤Idž ´IYnŊ ?tëí˙ģˇTīZK~ÉÅ'WkŌzov’´ŸÃĨ´ Ÿ ØvF:“ēˇH&är, în7–Ꮮ/Qõû×~ŸčW\˙ũÕ´žÖŲxĢļ]ØCN“ƒ4Ķa“„A„ÚN'Œˇ ?õë˙ī˙˙Ĩjˇõdq?×˙U_ąjŧtēn¯Vč^†™Ų¨‡kBÖ2ĸęōô˙ãđÛŌöë¯ū:ũũŊé û´?Ûëã×ëôÚ ×M3$Ą Xŋ˙×˙ė=?õ}Ņ{ø˙ÚTzũÆäé-ûūģûī˙~y$˙˙¯ÚņđaXŽÕĩ˙îē÷ĢÛöÕ&˙ū­W6ĩl˙îŋögī˙Ų:SJ=ú˙˙a A´0Ä&˜0›ā¯a žûOiÖÚVvÅ'iÚÚ[°ÂZÚÛk÷^ŊŽéØ]u˙ū˙™ĮA…´Ķ‡Ķi„AÆÅC t=ĻJ,u ôâŌN˜ĢAŨqKmĒÃ.ģb–ŌĶö .Ë"ʞ^û˙¯Íą`B8ˆ†k Ļ!5Î9Q–Ã$ā°Ķr(é’pĨ8¤ģ‡QAĐ@ ˆAb!„Ú A Âh6)?Šë˙˙âØˆˆˆˆˆˆ‹`Á Â`†ƒÂi„!„"Så’sSЇ†Ģ[Vm˙ī˙ū§œDGa˙ņŽŋÛ­ ô>˙ņ×ÛT’×ŋ˙ŋē_˙˙ßöÁČM.’û˙¯ÛĄHiŠŲ˯˙øAŠĶiW×˙ũŽ))äšņ 6Dš‘CO6gc¯üjĄ?ß< `ĸ$B| dâÁĖ FB §EŅâ5"jEĒDŪjb Íą‹÷x^-tĶí`‚Â`š xO$( AũŦ_~š|ZiÅöĶĶž?v÷Ƈi§~ž†zĪ":#¯û˙ĩĶOôõ_‹˙ĸ-˙ūío˙ŋ&Ų܎žBÐđûʰŋĸ~ˆG÷Ō"CÕ_į\Žžž^ڐ˜ūžBŪämm™ûÖiŲĸKlĪĖĶī_¯˙Ūŋ˙Ã˙¯ũĨ ;KIēՆŊŪŋĢũáĢ u´ģû_˙ųōõŋ˙ö˙ē˙ö8kiCI´›¨Ļ͆_´Ą īb›­ˆLRI1­¤ÛĨß˙áû˙˙īūŋëĶšŠŠbPiŽ6*8a&¤OTõAĩ‘,4‹P¤ŋ˙ūĢ˙ûįĮ˙˙õâ2ā0L  œ&a2P )Ļļƒ5MlU1O˙˙˙¯˙õ˙˙úmË3„CĮ˙˙˙ß˙˙×˙ŋˆˆ˙˙˙úß÷˙˙˙úõū˙õ˙¯÷˙˙˙˙˙˙Öũ˙ú˙ũõ˙˙˙˙˙ú×_ī¯ĩ˙˙˙˙˙˙˙˙˙ģ˙˙ũ˙_˙ë˙Ļž˙˙÷˙_ŋī˙ũƒ˙˙ũ˙˙û˙˙î#í/÷ũo˙Ũ˙×ūģ¯ū—í˙Öē_{˙õūũc?ëģ÷ßßí­˙kū××ûõžÂ_Čuũ×˙û˙ėqũ§ÚßŨ¯÷ŨëũÚjˇbŽ$9\Ž?Ã>gj¨’˙¯_ß˙ûßÁB„Â`˜S+ģ_ī˙ō~­5[ŋžúŠØ9B‚öē}…ģīģûMWČ ũãŨ§thŖŪ÷~B"!„!ŠC„õĩîĶR ũϟkd8ũŨ!QPîå¨Ģđd¤°Oi ! Ķ šÚũũ͍ˆˆâ ÁA„!‚ ū;ŠØ.˙˙đD ´Ũß22/Õ}ÁFŅĢ6ŠŪSĢŽ˙ü a YĐ!ā†ƒāåXCĀÁÔ!Ô!90*ÄrR„Hy‚ä"R]õîû¯Ŋ6‚Ûáﴃi;Aē„ÂtÃ0ŒÍCA‚jŋĄ×ˇ !!` ƒ6!Qė<ØĻA—Yq‚ 0A Ķ'"@ÔÁí˙}éŊÂēŨûúWOļõˇÖŊ/úL•ÇôoFĄm:.>‹|\Zh‚ØDÜ6-9Cŋņíkéģöũ[WūŊ~÷ŪũíŨũ&Á—2õ8dŽ &BA7† ’„htŖ„hh&í=ŋ˙ąŌå;ŽūŧwĮ÷M´ŋÚÕûęßĢ´é—:ú^t“†]pá—Bũ:\žĻˇúž]7ũíûúˇō‡ûr‡ûũŠßũ/ūŋ۟Kz˙×zëOūŋyĪIö˙˙oũ_ũŨ!˙ß˙ūézŽ–:Úŋ˙ę×§Ã˙õaę—÷˙¯_Ģũn˙ĩūŋû_ßū‚‡ģŋ×˙Šē{ņØ.‚‡¯ûũũÂvé˙ũ­8âŌ–°˙íĒW×÷õķŋōgà mu­ûũ}udz¯TDuÔŋeȆ36lÎ@ÉË dNJkGbŲ kX­t­nū„8°l!i„Â6)ą„Đh…đfąMŒøĻdla —!š™‚!Šƒ0Ÿ fOĖãLÛSÄK‘ Έäjyž¤ŒčKŋĩ% &Ųƒ6s]ômęxaaøM FČBEØhtL÷8 ˆL Áf@ƒ0TBĜ@L¸ÍYŧÁã(fᓑFmŽ[Ī#UŲg žÚiŌtŊ„I´œ2p’l4 $›nEŠNČąIˇ}?öt]´^…ĸîǍ¸ ŽĖ "ĮGaBa0ƒ8@˜@Á‘Æ2Ũiß§Kϟ}Ŋé_Ú­é&ßW ÚXa6“a˜Ņa&ÆYáÃ%zt›IļGtwá‘bMB(Ų‹Fļv˜qhÖØDu_īûąUîĩĮĻôĒũ^Ÿmk_a6­ĨĨaĻ×yg͆nô•†H~é6ÉcI´l9(i6#˙Cú¸ũbī˙W˙úũ-ß÷˙{­éęŋ[ŪúI¸B¯í:ží—åÕøuļ’PõŨ/öŋ˙ũ­˙˙ēŋ_˙˙_ėVū•,õē–sAč ÕFvœ_˙Øs'üŊA˙øūŋūՏ˙đ×˙ęũŋÛî?‹Zox˙i„õû~ū˙_đŋ˙ˇ´áWߨ˙ĢūšI{ /K°ß˙đŸ÷øoí,7˙^¸/˙ëÖŋ¯°˙ū˙˙ũ‡.ŋ/UŋĖmf§ũ˙ūž+ûuīŖG˙úÃNˇūū˙˙˙íz_ˇ˙x×ũ§ûūŨ°˙ëū˙˙öŦ§Ōß˙ũ¯õū¯ü7˙÷˙Ë9Xŋ_öhŋėĪ^Ė˙}ūŋo˙ÚmRÕu÷žŋŋÛũŌü=˙ŅHĢņëŠŲ5ī†ŋž[kÕŠí*tŊ˙mpžŋ˙([ŋũ×ĮV–ũûŋīũ|„w žģĒwQ[°Á+íēīŋū˙ęÚmWßũ{3VžŨ˙˙OųĸėŅ}Ũ˙˙ų0_NÆaĐA ĐpÂA ƒĻ)ĩ†GŨZ ĨaaíĻžÚV_ &ÂÚ÷ëˇL0­×Úíí¤ģĶkŪÚũ™ū˙fynH;ū?ė&Vˆ5üSVĶQ †*b˜Ø”<ańA°a(ÃÂDpÂa0ƒĩb›I4ÛNäHmĨûŊwÃŊ†m>ëØjŋ˙ˆˆˆ‰šˆ0A„ BÃÉĀ&˜SäĶ Œp ˆüąáˆM1 ’zē§ bšb‚ 6, Š0ƒka„‚ ´˜ šlm§ØJĶbƒ_˙ņDDDDDDDD ádĮ+@˜! ˆˆa`„Y(!ĻŽƒ ËTÄ$âi4 b‚ Ú˙˙Ešs†ƒD48 ¨Sâeb Wß˙ū—˙ũ˙Ōŋ¯ø"˙ ‡ũ˙ũß×˙öšg HŠVdËí1éč0ƒp@Čbđx6eÄ"™*ĸŖ6etĻIüXO ß§é„Đ?•†ôé:âÖ-ôO‰{{;œ{Ŋ?ˇ°žgÂpīÚ4Cú÷÷•ôˆ&d…Õ*čwŅŋöžvøPPLˇ4gay É&J:Ûôš‘(I Ÿ‘!ũũéęvŠ\ŗ vZ@ĨHˆ˜ĖÄOõûÕ?v—ųá$,Qäá7›§Š=HĮĻŽ?ũkûôūîīžŒéVžĒ˙ū—ō>é>?˙īôŪ˙Y¯ô˙˙˙ßãĩŋÖĸīũ-ūÍĸë˙~—˙Į/ū`Ά‘Fo427!c¯Ģ˙ÜE˙˙įkk˙˙ëÄ0ŲąMŠ'Č Đfĸ ų„@Á4Œ5Ė ddlČũŋūŋĶČם™/˙ûŽŊh0ŖØâqŪl"ė4kačÖÂ!ĐCØ´h !gˆØäu˙ú˙ũ-tō¸”÷˙ņåķJÚh2CéļmŌm¤Ũ8H7ōNŌy.˙˙ëīųÜ㈞K2^6ĪÖ:r]pē˙ūũÕÛč0—iˇJÕŌÕē°e§,⃤Øa? O˙ë˙ú­āąfÆĄÁa Ä4ˌ†)¤`ޝ#RåȄÎ# Čœa”ĸ("0jQfŲ3ĢķĢ*ĖĶ"<—ŋũ˙Ž•{˙_~­ūũīú_˙˙˙ūáÁŅąÜN8ÂŖ^и´h`„0œ‹pFôCØŗPˆ‹Åģ>FÆ A‚„ä+ÎAž#c0† āÂ`ĨÆ œ@ōã'dã.ōãRAŗ(Îfl¨GDyŸ“cū‡účj(ˆ>Åõ]ŋ¤ŋí˙ˇũ˙vL`@ÉķFˇO'w“†‚vGbUļA…öA„A†ãEŨŽ-x÷Fƍ›Fƍ ^ŅĄÅ…›‹‹…Ā͊la „@Á Ęqrã$ ˙Ũ/Ûū8u˙Įū?˙ī˙×ŋīí5ZZŊ6Ë@AÖÚiŪ¨8eœžģTí4!é6“l–0Ɏ Ų°áŌ´ž’m'dvß`’nøLąŨčØúFˇ5Đa ¸„[âŅ 7˙Ë­üÉ?6šĒ˙#Wé¯˙ī˙×_üoũņ§WĒvÛ¯Ûõŋ„)i6ĶĐģ Ũ÷K ē[ŨĻߤž_CŽōú9Ü0ƒI6é8FŧŠ=ƒr1é6?˙¯˙ø=ŋîdŸu‡Ų¯×úū˙˙ŋ˙‡ūŪ›˙¯_ô÷ũ˙úĻž—Ŋ?ĨŨ_N;´•ô“˛pž„–“ÁŌļŋ˙ážŋûõ¯˙˙˙ũøíw˙ĮŊß˙ļ’ßô?˙˙uēo¤šī¯˙ļ–´*ëģû˙˙ë˙ü7˙×ŋĨ_Į˙õ×ūģüUƒ˙å×ZtŌ˙˙˙Iŋ˙˙ūØč(˙ũô?‹ė׹õO˙ē÷ũö_ū—Ō˙˙˙˙ö~ŋūŋ˙ũŌ˙×˙˙æ×ßÃūÖJĘ/˙ūôļ˙ëŋūŨ×õū÷˙ßŋŸ_ë˙ž˙¨{÷ ßūŋoũ˙÷˙˙˙˙él=Ö*G÷_å×J]x1ũv×ūĖøöÍģf‰ļÍ„īúų:˙J˙˙˙ŋ÷đŨzŖD˙ūûGv—ũĨ×˙˙˙˙ûßũ˙×û '˙čŗmØi?aĩŗũ¯Ŋļˇũ%˙˙ũzūīūÃ˙īÕ˙˙˙˙˙˙ôŪū×ūŋļŌ÷ †˙á5¸ĒØ­+b›X0JÖ×oᄴ¯_ú˙˙˙WW˙K˙ûũŠŠëŨ/ũŨ/˙û˙ÃûËvßė0ŋ˙ᰉ˙oū4AĩAjA6˜„ĢI°‚ND†›iXA¨_ä!Wëû˙üįßūy?˙šīßŪõũß˙˙ˇßžĢŋüB˙Šđtūíņ sšCà !&ĶME)áoĮ˙ũ˙K˙˙ë}˙°õú˙â­ŋ˙˙ŗ?ũ#ĸöėŅ:îŪč/īø¸ˆŒŊ— °B!‚„ÉŲG* Ø?ūŋ˙˙ m¤ŲyAÚKÃ^Â]î×ûŋŽŲé´ž˙ĩmoÛīëíĩũ/Û3ęĖüĶÖũ÷û4],DFi_˙˙ī˙bqđÂQH0ƒ8á…L äHiąIč:Ö}o´˜`ėSi/›_vƒŠtíŌĩŌöá‚K÷ü5í/˙ī:¯Ũ˙æc˙¯ü0LĒ jsÉĶ$éˆW´ƒM¤A„Ū‚ Š0ƒh1Q‚M„‚ ØÁ0ƒ‹i† ČL $ÚPŌL áąĻšh‚NšlSą÷ęģ­˙ /˙ũRß˙˙ÄDDDDDC" !Ą™Bö%ōˇ!v×xdc„bšbTPAÚ ¤a6aĶM %ĶA°Ķ°’vÅtŋ˙ôŋ˙ú  `•‚:@–8B"B#sâe_ SIÆÉ=5b₠Úɏ¯˙ÛÛ˙ß˙EÄDDDŒBQ4Á†N0„C åu˛˙ũu˙˙úŅŠĮ˙īĩÖŋ˙Ōôū“ŋūßßõũkKí Â˙˙˙˙ĸlPzüG˙ŋ˙˙ô—׏ũ/ëūū’]×˙˙˙˙é̆l˙īĩ×˙õŊũ˙˙ø‹ &8DtWB˙öũ˙ų_Ė‹ŨqŨqØ× Į˙ũûũU$¸ âũŌõ"ī÷kÂjGdOūÕ[K˙m,미w´xéŋÆņŋë ôviõ(w}ô‡˙kkŪ˙PRŖ#hËrˆė]ÂŽŋŨ÷¯úvˇÚaNʈęÔĘØZ “G„˙ˆĩí[L‡~úÖîß=Âaé„õ ˙öļ˜TĶ_Vá¯íRŅ­ēxtx˙˙đd”Â`˜B!„ÂĻíŪX{^h=„\–DôR)HDD­b$TĮßZtŸ§uŋú¯¤žĸ?iâõâ?Â(qæDžH,š*įOi.K"§íŖīŋüz ŸĐâō64BčBäŽ( g62œ9@Ĩ š$š<¤&i5:Ÿūų§ĢëŽ^^t›“Æīkop‹¸EĀa CCŊáÁB ž /ŋj­üá%¤Ũ6áŲ8O'”œ4Té‘]˙ņ¨DíŽ\ˆÖlĪ`í'Õׯ×Ĩ˙´!™ ēˇŌt› Øe—.Ëdą†Z ĸœą‚a0œ_äJqmI3Œdãû:F †F‘‡‘ČčD‚(‰ô} —F™¸ęf™´QQŅ3R5/˙Š^´Û˙ëézWŊ~í>ˇØpčN8œw'ŨZ4QpBBŲn Õaa œA„ Á0La0PPƒÁB 0A‚"dķDnN&2ˆE'D`ōDæuyd¨á˙K‹õ˙í_K˙˙˙§ ē×pÁzoŨ&ĐMč ÚhÎҞŋ"ÃFĖryFc´#F°ÂĄh¸ FļEÄ(BE¸ŪDĸc°ƒ0ˆ1d|A‚g?ôŋīøú_oī˙õũ˙a7[­¤é6~]6>¤û×´ÚM†H}6“i: šƓģ#ŠO¤čĐĐOēA™ęA„6‹Įļ”]´lŋũ.Y˙č´í˙˙˙ŋžšũžŧUßKjŌūŊ§ú m̤û†šuˇaŌÃ' m'đė–jßv’m&Ų,`Éô5ē Ōv˙W÷ß˙ëŌ÷˙˙˙˙˙´ûīīß|Wéĩļ‡ë­ë§ĄŽÛßa6¸ū´“m=>žécū—ũ÷_ũk˙õ˙˙˙‹†—č÷_ņûqj?úę×"ûûõ˙˙ņ[ßú_¯˙÷˙˙˙˙˙˙÷ė?_ņáĨũëū×˙ū:]˙ûtī˙ÜkÜzß˙ũôŊũī˙}˙˙˙ŅĪaûķW͆•˙5S@ū‹Ō?ōÉ˙äāÄ+˙_ZWīíõÁ S˙w˙ũˇũ¯˙ú˙˙˙õVŪ˙øPÃK¯_˙_ë˙Ąm˙ũ˙āæÖŗČ(é}™ū˙ūiÅ7õ˙ū˙_˙ũ{†õ_đ­˙ū˙āŋ˙ūa¯ŋē˙˙ˇīázíĨĨ˙ö¯ī˙˙Žë˙˙ęļŨīÂ. éø˙„[˙˙ü"Ũ‡ūŌîŋ˙Ã~¸Ŋ$“c熎~Á„Šĩ´ŋûūī˙˙ūˇ˙Ktzm˙Đ_÷˙č,ũ†—˙úøoˇüh6­& ŲR$4ÃM´•6öĖ%[si´ŋ˙ú8é]īÖũ-Ōë˙Ļôŋī˙Ō§ũŠŨ+z˙Ãßė ļqĘŦD„E@Ųā˜Nš´Ķ ƒ8 ‚0ƒAÆØJ×}~×û1ī^Ų˙õ1ögß{fzëf{ūhŋŊŗMđ^÷ĩ˙ßüĄÂRĖvV€„Za2˛Îé”āˆé Ä'1ü0ÚW­ëj­°×ūô)´´Ą¯Õ­Ÿ×ũĩũŗ˙ tÍīũqVfŋûÍŽĖũO>#ˆˆˆˆˆˆˆÄC8 ÂJŠ]6•Ã#ņIöƒuWKĻ+´˜Ļ - ūØ×¸av+ôģĶŨ°­Ĩ˙ŪÚˇå‘=Čé ÉÁU&JL8":å>T uM B66‚ ؔ:†V8Ļ‚ iŠc0ƒA´a›ƒ¨‡jM9÷Qļ’wvƒĩŠģL˛NOŪ""""""#‰ÃXAĄ4Új!0ƒ ƒ xGz  &I×i0­4ÃA0Ķ#E ÂiÃAģLPA„Aąl4ƒL[BÆmRB""""2×"!‚`˜L Á‹Ž a2 §L¨SēdœBi‘ã‚#ĄT¨DDFčDDDDDDDG6$:į>ļĢŽž]~ ¤ĩԈ˙GRŠv•B ŠJypŸˆ`šät#ōŨm•Īü)‘@fe*ˆŋKy~Kî™h*"Ą™'ɸč&ƒná0¤Ī+Ĩ @ČŖ2ĨëFtéáNGMB™ā§aHú;Ŗ%¯˙‡ Ķî’JO; &C Öû¨ŋÕZ†Ÿ$zoüqÖļRZáø0M?&Y#ú\zõÚũÚmúūŋë~=ģ˙+͒#Jķq9,ˆČIBgXčŽ/H˛­Ŧ—_×ķąH8¨A‚„Îl`Ą0˜AāĨÆh…‚€Á0ƒ8ˏĖĐtQ‰É=<Š}Ü~øo^Ž0Âi FčN;Ma„k„0ŠņhÎ͈lb 5×[úŊr,‰ _žpÉãvƒ$ô´x`›×d‡ŌMģĄö‚ †ƒQŖd˛$œfŒÁŠPIŽr5JH_ĢĢéĢÕú~ši+Wz ¤áĄ ŗí’{Aų|ÖÚi‘I´40Ą4CÔD).A4Ë ™ö`Ž \šJÆq‘ņšF ÚĢ!æ™’Į’ŌR!Í^̍Kųëũú]~˙Khk÷KzaŊm&âôlwqhÖІ!a4hqapÎ\fČ"Ũĸ$0‰ŽÂjÂÁS2†Æâ64Dāž0P@ÁzÉС#ÃAđđPd8dž™ Ę3u Ģ!3¯åēÉáoũhn˙÷Õ­_ÚãÚ ŌļK!–!7(rcϤî“nė– VŌ{@›a4Ō °ĐaB Æ;ĄŖc}opš5´hz„4\0ƒ\Z Ņ9 ‚a>Ģ3AsyãÃ( Å~×ëöÚū/ßô=- iõlZYÂt­–{L'Iš}I°ī ›i¤­‘íŌ°Â $›‘JŌoŲÚLąčҰŸ4lÅĸíĄâ8MīˆÂ44[áŪš•˙ôZ˙ŋÖŌßzOû˙˙ßĢūŊél ŌNÉÚW}&ŨÃB“i6áØA×t› Ÿ_ĻŌ°Ë˛ œ‚°ā–á‚H6‚Âät öžđŋ˙ü´˙™I ÷˙ ŨW~ũ/tž‡č{ëõë§ëë÷ÅĄÛeÚ<.“{év•Â,ŋá_Â˙˙õijĩ_˙čo˙Z[wĄúdpé_čhŋ˙ëęžž5Žž’ę˙A?éz3×Â4˙ûës!\Ž|Õ˙˙šd˙ō1×_ūÚ_ĨĨ˙û˙Ģ^íÖÜ_Į˙ãÖ]uxŌ_ēė Ÿđ—˙˙í¯Ąd\&ˇë˙×˙0ŋûTĻOå×GĨe¤˙ë/Bę˙ã˙^—üåvļB5Ër§„GI¯kũWí˙˙ũ¯˙˙õ˙˙~ķũ*Ōß´ģūŠđžëōęķWŦxzRCũCßûšĸ×ÕÍ?Í?ėŅ1^Nŋß˙ŋ¯˙ôŽļ˙Û˙˙˙ūÔ/ë˙˙Ŧ8¨B>Ū­Øa˙솗éūÚûkíß˙ũ˙˙סēŪ•˙ö—_ßūô1˙u˙˙‚†×aųDM=8Ŧ }Ĩ„1Ų„Å_éü0ĩà š}}ŋßßĮ}>ī˙ũ˙ąH/ßû˙"ŪīĮ듄𠠁ĩ)‰CãbÚ ÁÁ4b67ėĪŋŊĩõáŸßūĖķËÛßlŅ4æ‹(K}ąO˙˙đH/í/ūũ‡–;˙`˜B4 Âj† „L ×īĻ› ‚ ĨØa& _Ō˙ĩúûPƒOtĢĩíl ÷[3ûJũ†ŗ?ũŸøô›3˙'UŽn˙ˆâ#-zb ąLV›"hŌNujÅZŪŦWöģLSL~ˇ°a*Oĩa­ũ¯û_kÜ5˛‹K6ŊķNúøĐûMtÅMԈ8aaÕĻl4[[@ƒ´ !ÆđÂQ 6)ŠûY …#­>Ōa‚]°ÂĒk÷Ģ †“ŠnŗŪŋć†p D4ĶÎ?e; iáŠÚ 4WĻŦ* BtM ÁplF0ƒjLS"A —ļĐwöÆŪƒëū"""""" â""""" ,A—g0ˆhYUĢdā'•b†ŠĻ76$pڋ{Ö—Õ ˆˆˆ¸ˆˆ`‚![' !xaFņåqBë˙žu•ŌĒé=a}zT–ë‡AßH%ĒUĄ;UõEqËÉ.ŧGÄ{IũC¨´N˙LB§ß†˜T=O„<&`B `B QÁÎČVL˛”ßû ų ˙đ˜OæšTĢĘķ—˙M=;¨pĶ˙žĶ2VĘåKīô=˙ēŽ&W x^ú˙˙ČąW;1žB°Ąpü|_˙÷‘!ēĻ›åq‡˙õŌ÷{˙˙Ūŋ÷ũũõ˙õ÷ˆ†ŋëúŠĪū×éņö#ĨÎ#UúK˙˙˙ŒuÁPŽGãtfDšdadæCÎD6JōĻ’˙˙ĩ˃ķēōļŽõ_!8‘ŅĄįL"Į„Xė Â!C ÁC É›‰Y‚- L¸%4ũë¯]SOÎõĖ…–ŧŌ ė., ƒ œ"ųĒ>t]ˆŅqÚFˇ¸EĀi… Š!ä_˙Ũúį(J—ę¸Lē&ŌøAÃ'ÔĐtŦu]Ō–ærVá6 ‚A°áŌp'w˙˙Úĸ “Š `Š M#A™Æ 2ž3"œÉđš¸ë#™Éx”ÅÕä×ßžļŸÖéŋۜZm_ǎt›IÃ83I'ûßôâŅ­Ąa†Œė ŅHL ÁQđA‚  šÁ‚—LāĻ`aš„‘ƃ3eĖÔA2\RxŲ’S˛æt;?i–d-~šé}¯bŋôö=+TŊû˙ĶÉCIš†Œü$ŅŽmx´khmčZÚL!aXF°ÂD>Ĩ¸a0ƒFp ((AĸœĪãÂ_×}÷÷ūŋę?ŋ˙ãMėš ũ†ƒ¤ šęÃ'Œ2ę¤é6ė“äō“n‘Û× & īW' 'ŅŖ„¸Ō"Þ|Z|˙ü˛tŋø{đõ¯†úWû˙˙˙c֗ÚûĨĶĶîŽí 6•˛qö[mŧ$ėÕáė2n’l2Æl–4­ĻŌmÃ%pÉŗ#_ę+õØÃßöŌûņß˙î–ũī§˙ũ˙˙ū‡ë˙Jī_KĄ]ÕÚ}ļ›íá;C˙ī˙ođÃõö˙ë×˙÷Öņũ˙qņ˙ß˙õˇũ_Ēî“û˙ū˙đßí÷ûmĨŋá˙Ô&ÃũŖč/øuūĩûĩˇ{_^ģú˙ū˙¯îgž ūļ—ƒ¯á˙˙ø,?ū×åëũƒEëū^¯ü}REî<ēŖũī]˙ūŋö˙Ŋ˙~+ÃŊ?øA™UøV˙ü/˙{˙˙…ŋ ˙ëūŗŋzūöhˇ˙ũvųÜúwĩēŋ]|ʁß[˙Úą˙ũaŋ˙˙Á]Ũ˙đŋ˙û˙á~Úí˙æĶŊg_Ô|ßŎ_û˙zˇ˙á˙û‡˙˙Eŋõˇ˙øE˙˙×˙‘Ķ~Á„ļ˙o´Žģ¯˙wKėÍw_ūĄ˙oTíũáŊ˙˙éூû˙A˙ũ}ø¸†q„ 4í†wļ–úÁ§Ú]öa…ĩũūB=‡ūi˙˙˙Ú˙ú]4—ŋŪ—Ŋ}é~˙Ųû $â &ÆÅ( pÂA ˜AÃZ 0“بƒ0œ‰'˙ô“‡ŋ†•ëũŸŋSjŦĪ˙lÍoúūŋfšĸ×īû4^ūŊč!`„DC'˜A„1†ĄÍˆM1 ‘ēa2NĻú˙úž§Û KVՆ˙Ŋ´ŋí˙kũÕ{_īKí~Ō˙3|DDDEÄDq%Ķ /ũÖ¨6ÄC ąV“ä áÅ&›GûØöÁ>ØøiéØR:Ļ­HęâŊƒÕv˙mt›˙īĪN"#˙Æļî›QR1ņa¤Đq@ƒ†h â!ĻÂD4ôÄaŌ Ø ƒb‰Ŗ áąV“i'kfŌtŋú÷ Ą0RĮ,€˜A–0!Â!¨é´ŦËwÉBw‘Ž“ &­'#{ąI„ÚŠb‚`ƒAąøDt—˙īY Ž#B"""""""""" Áˆˆ0BL&0„C a2‡(p@ŦîSŠîĶX˙˙˙[ÄDDF[4.—˙¯OûŌ*‡˙˙˙ᄗ˙ú˙ėUîx/ũ‚ū—¯ū,/˙˙īã˙˙øA˙õ˙ŋ‚#á„GZūû×B7ë˙˙~ŋ÷üˇpÂÚõŨZė¯Tüv.˜ãßî×GJS§ũĩbŒŠ¨û÷˙Ć22ŋE$vĩƗ}öŋ÷S"Ŧ(R!™+G˛ĄČB"yėí9‹P‚Úiũ­éúxU0ŧ֓MBe ‘Ö"Ķ!ßû´ĸŽö$ƒ'’Ŗ^Œ„ƒ=„Öû˛ínīõMžaŨ†? Žt&ƒA…UõĒM}ģö>å‘!‘ŧ3Œ.E‘ŧz˙páúÛÂ-ÆxŊâ#×ZūTû|Čɗ#F~6dį‚å †güäugXÅFMøũÇû}đ„0Ą LB-āĄ0„0PL0A› ‚"L›‘›ëĖ´Č5äoî˙é~Číö ƒĒ;´khØŅņĐFē6…¯ęžŋūéWüXN2ú“¤áÂAŌfsA*ßú„zđãA64lhZÚŖcęNØ[Fļ‹°Õ8°š41¸â"t¸Í’a ‚ ;#ˆlh0ĨÆh)|žqŲÄG Î0~PF™¸čd†ŠĮŋë_¯ũnû¯í$ĒÁ™=Ųô'JÃ%–La:Rđ ÛŌV‚mŽJ44ƒŪVš Œí6n4^4?Âa ˇ C˜á‚ސLƒ4![™h§—ū?ã˙û†ˇíĒĢzģ{]v›vĩôŧ8eŅ6ŽÉ„é?Įŧžfb†„“ī'”›t›dvč $hȃč38A„Ō>‘­Ļl&Ŗá˙ë˙ūŧ=‡ûÅ%˙ęĩũ~é>‚Ļ˙ęčwõ˙Ũ[^›W“´•´˙¤ØaŌßk°É?I&Ã'ԛFģC÷ü%øW˙Ø{ëÚĢëãQC˙ņĩ˙CW˙~ęõëĩŌ¸Õ×Ŋ/Oŋi.Đj!+íú[,Ø'˙„a˙‚õū ˙ĩKãõ˙ũh/˙ŋaûûĶwUßĮĢī˙ũ‹o÷CTĩkiŋü ›ũ,4ŊđŪ˙kõæ×.ŋ˙Ĩ˙-Gõ‡˙ķ|Saú˙ûĢ˙Ō“|_Æ×ĖÖŋĨūâŋÃíũ¨jˇÁ?ë˙ã˙¯ũX˙VĢÃųuûĄūŽ—ļ–ũë˙ū´j˙Oģ×°‡ôa˙˙˙˙û…o˙÷œwAX˙˙Kė7ž]]šzôX;Ÿ ũëˇë×ļĻ>ͧŋĪĀÁ:á˙ß˙ß˙ūĄđß˙˙áC˙ū žŪŽ=/ßũ?ÂŌ˙]_ûWKĶ­*ī˙ûšũŋøA`˙ū-Ĩ¤o˙˙ˇ„L†Û˙û˙ üŽŽ“  Øh4ė äW=7iZũ]˙}š+o˙ûŋūŊŌß˙ãcIÃ˙˙úH/Áô˜¯ÛũÁõqA4 ‰CĻ0ƒcˆaa†M¤8j 0ƒŪĩûWŗ5ũ÷m˙ļhķ‹˙úĒßÛ˙ûë÷ŋôŸōĮDZh2p˛pe {ąQ aėBbÕ­ëļ†ra…÷Õŗūß_kôˇ˙ųųõĖ؟ēūÅ/æĶĩŲ§îßŨSüDDDlDDDDDE°X†›Ÿ ŋfÁ‚JŪ6ØŨ/[[TûOͧ×ūŌîŋ˙īÚĩÍŨ™úŲžļ¤ÚíķŌ„ƒdc ƒiĻ‚ ãb ŠA á ‚r&à  ĐqÚH0ƒˆi§õh;Uļ5m.í­_aĨ§Ũ¤Ũ6ēļŋÜŗaa4!„@Ķ*Ģ …ĩܨm4Ä-Sdœ( ˜AąaĶNÄĄė4‚ &Đ@Øa A‚ 'Ä0šŌiâ“ĶaąéEiæŅną-ôą &‰Đ‹%šzi…Ÿ ,1 î™' ĶŠĒ   °ÚA¤cŒFŋˆˆˆˆˆˆˆˆˆˆģ „" RŦĢLĢA…š’t×֔DDDDDe›é]­°‚ū6)/bÁ~‰Mj~3ixkĢŽŌ‘Ö+o\ŽXއĸ:,"â ƒšg5ŋ”?÷u “c&W>@‘JDYcôŸGzÕÄāĻNJŗ&2ŦÁ3%<Î˙úA§ŋMO=5RX0_ûę/Ļ0ûØ~ë#@ŸÔÚëßÐŖ36Ü_ėŽü_wũúͰŋēū8ã‡ũģ˙đ×˙ß˙˙ök<`Ęxš’ Î0e4FåÍĮFA˛B)%;.Š<Ĩĸ4ŋ_Ã˙ũ†pEĀ`Ą0TL&˜&š!^0ƒ ĖÅ##™„c8Œ#†h=5Õ2ÜG’˙œ_×öA´›‹‰PŅÄî5´-8´kam4hhĐãBĐ´ŅįDuGX*ëŽŊ¤ŋé×˙m+IļK!„A8aIļƒ' O ĐXFļtƒa„A„Ą¤8‰IƒDQËō-’Ō0Där:ddĨuĸ9/ åé%üÍ/ßđÃVéļ›í^›WdâĐĶĢŽ—éI7NFļ "āZ.BBŲ 0Ą0œN8a3Äph…D"z  ƒÂyq„Á ĖÅSH ‰ãfB3ÉŸÍē\Û:<Ízßâ6ë_é˙éh[Ļ6÷[vŌ]v‚Aļ:eŽĐAŊ Üa0ƒa†Ã¯j°‹h‚8°‹€Ņođ‹v‹†0˜A…6AAB Q °ƒÁKRŒ›F3Ã3ŒžFÄ^'?Ëu3Â# û˙Ũ˙q×ņŠ!Տßõb~Ŧ2q]ĨļNe͞|Ōzm&ŨÃ']“€‘Ū™cڑŽĐN‚ƒh Ū‹į7t^$5†ąá~\XEģ-¸´ë.!{ą†Ōĩoü}×˙á]Įõ]ęô5ŠMž•ĩ­íĶ~͏‡iÕÚ Ô´ˇŌŊÃ.t›dąĨē[#ļ8Éßodw°Ŧ&7áÂ3ŋĻļģ˙˙¯Ë×üĀâ”9j¨ÛĢĨõö˙×˙öžą÷]_Ō×Ū­§IŨ'iÚN—´Ļģ ž0˝Ōƒ  ūŋđŋ˙ôŦ:īXz˙¤˙ŋžß_˙ßø"Ÿ˙Ž>ˇ˙×_ŋ{^Ū—Oúˇ˙EšŸĢû˙Â˙øV÷FVŪëß׏ß÷˙ßûĄū†ßīZ˙īö‡íËū’˙˙ūēÛ+”Ē˙˙¸˙˙á<7ŨxFxs˛Ņ?˙ūj˙˙˙˙×ōc”#üŒr‡P÷ūŋ˙˙˙īÕ{×ĐwˇN—Ö—˙ũÚ ÁŋJé,Ęæ˙˙˙Âũ˙˙ũüŒ?˙˙˙ôO_îÚÉ?˙jūûúœ_ũ%ûu˙ĨŊąÆßOūë˙đEûë˙û_˙ü7ëũũ}˙PC˙ú_žđ›˙éYŸ™ß؟köhŠŌĖ'+"˙ÖÅßH/˙¯˙m/˙ü7īũ˙_õũcuū¸/ŋ^Ō•Ú_Ĩ¯ļ´īÛVÁzeúl/^ŸŋĶĨ˙i}}ß˙Å˙á˙÷˙˙^ū÷_}đŋue¸'ᄛJÛI4í+¤ĮųmŠcôö)ûWK3DtGŋŋFŠ˙f‹××^ŋ'_ÁzÛ˙ŋūŋ˙ū˙YŠi^ēá׎Ä&+ PMÄ㨄Â؃6˜LD 5NÄ8kĄûĨÖģļž—ī]ūúFIŨŗ?ũŗD˙¯˙˙ŋf‹ũXī˙A~ÚX~W,a‚b’ĮÂaPh]“ƒ5%E4Õ2C¨„ŋ÷V›uÛ *÷éZM÷ūˇßÚM÷ڗ˙nŊĩÛŋÖŨ~Ž=w4_žŊ˙÷Į`Xˆˆˆˆˆ`„_đ†Hr6dH"X¤Ķb¤J!Ã#ë ŋiß!M­6;í6;[[Kîû_ŋ†žĢíZ˙˙ėZúũˆVØb „ƒNFø"8FNÆltapq Ļ6!´ÚLC ¤6Âi°Â 42?{Ú]„ļ>Û´õúËrą_ĨK˙ˆƒ*ŗ # &A‚ A2psŖ^ÂjhSŽqÔĄđŲü0žE5۝ąÄC ą„A´pa\†頃ND!ĒĐMú_ė툈ˆˆˆˆˆˆˆˆ‹ˆˆ“ DŸ3"88‚pa`„C kÄ*§a&žĶ#A¸@Ûénŋé<ôâ"""""3lB!‚ ڂhF„ˇē^—úN“øˆˆãĮÄôŋũ¯ęŋõÁ?ú]õėâ…7Kü0•¤Ŋqبa/2[/û ŠOĸm3˙‹aÃōÎ'—@ƒ/g ˆ"4ˆIøŠĐô ‚ 2@†$ 2 ! C‘ƒ%Ëåt‘øî¸§Ėō,žá„Ϛ =h{˙éu÷˙û˙×÷Iŋ˙\_L"߂‚ ĀĻÆlfÍ悔Ō5#R õÍŗĄ‘Wœ˙īūû¯˙ÎĘ˙ō#ō˛ŋķãĐĩ}č×Ņ­„\t!uz!b0œ#„ds°A˙˙˙ũëūžš3˙̆]• Ų Xä ŸJĐAâpuÎôãFæØl"ė\_˙ī˙ëŽp ųysŲĖčÉ—ũ}u˙øˇė*ũ/}&Ōíˇ iđÉĖž4Ŧ;Ķ3äí˙ŋ_īũú{`˜ `‚ ›2ãO.2qČyÍHđПfᓙœlŽÜŸŠ HÂ7šyļC"|æ§C*"FKĸWŌõĮũéũtŋū^:ÚVöŠÕŋ]¨O˙úūˇũwčhģhÖÕ D;‹F‡$ī4[°‹Š3ĐÂŖC ‚a0˜DĮ‚„4!„!CĐ`˜Mŧ ¸Á‹°Ÿ ašĘÉÆAF3Î3ÆQ›ōˆ“DtE˙˙ũĒĨá‡˙ē_ø÷ūÍOúŋ˙élŽÚZOČļų(„pƒz70‚ 4ƒ¤‹A6Œí‰P%@h ú7B.čØīFˇ„]°š‹iŖC,(D-–ėĀĻl‚‚‚`ƒLņ„ ‘Á,%@fb–ëLøī˙ũ~?ÛūŋũŋĢßüW}˙žŊ§IžÃ††\ÂoŊŧ+i:Z¸eĖ›Ĩ´ ÂN'ĻgĨlšrxŌwt›F‹"ģA8a0˜$›thz6ÕBFÆąâm÷hĐŅĄŋá˙˙˙üŊ>ũc˙˙˙˙¯Ō×K˙ßOŌW˙ē]?WŨĐŽ“mz^–ļ+Ŋ:VË´Ëĸm&ØAûŨŌvIéa—>áÚ]Ų.'ÉįI´œ8t›H8°ģ˙˙_ú_žõ˙˙ë˙×÷ŋūģ÷´†?îûŌt›_î˙×˙÷üumv¯jí%ļ…'t­ūœ;TôŪ•Ģģ¤ß°¸oß˙˙˙˙đŋ˙÷˙ø_×_˙ß˙˙ø˙˙ûøë÷¯_ĐëĐũŪÅūÖŽõ_JĮ¯ßôžŋqāūŋ˙˙˙õá?˙˙_˙īãûüĪ"ņ„G˙E¨ûü°Ÿ˙­ƒų :ŋ×˙˙úÚūÔ}kŋzú Ž‚ãV˙˙÷˙ˇūü ŋ˙öŌ˙õëãņ/˙×ëū?áú,ŋ×ßū]OåÕü†ÚŦžą§û¨}˙¯_Äpû˙˙÷˙˙ū‚˙˙د˙ ß÷ū˙˙˙¯˙Žßá]ëú˙ ė>øZķWUa˙îōÂ’ 3á pJæJ~ŋˇûûfŠķ×_˙˙ú˙ë˙īī}×ū˙˙˙‡ü"ĮWūūé]w˙¯†ŨR\'íûõõ¯ø&k˙ũīģ[_]~×˙tŊ?˙Ŗ˙˙ũ´ģß˙ßū[öđoÜ ŋß_†—ũ˙‚&?ÃÜî÷Â3˙F¤ũũû˙oŽÚL2úūÚm­¯ žĶK_^ūę˙˙Đ__˙¯_w˙÷˙˙ŋÚ]}īėWõ˙ ŋ ÅGá/¸¨Ãõ˙ßūđÂÄC@˜Aą †l0ƒA†!C…1DC4ėĮiļ­„§˙¯˙ë[ļŠof˙æŸíī^a?æšWųåëčĐ ī˙ôŋwjôŋw˙ëŋöX„ČĮ4ʰ@”÷ĶäQÂbqá‰N“h18ö‚ v'aÅ1Č&õū˛G‚;i}Ÿíũ†ˇKĨk}˙k÷č;öúĖ˙ļ˙Û˙ͧŽÍ—ŲĸĒ˙˙ūøˆˆˆˆˆš!(´0„D2ė¤ÂhY- Đ&NC˙ú˙zöĐW°`ŦW÷đa-v÷ĻīVöK_Õ˙MXa/íwtŊt×ĻÂ˙ļ­fŋīôļĖûũŗDåēÜ}qqõ˙ú˙ $aÅ4†8ģb­$ÛJVĶ´ĸب‹T톃M†‘Į2é=lÚ´´ũ魊ģ^]¯ũĩ˙ĩ/åē PƒķĶ˙˙ųžGĩü1á„Ul&”âlPbÃi‘ŽĐh=68†ĶaÂl4ĸÂvģX'ĶbžŌM{´¸ÛÛN›Ģ^“˙×˙Ąvų˜õÎ6†ƒA—`˜Lĩ0™…Ą“€B' Ã Š‡Î9CÃ[AŠd|Sė+dc ƒiŽ0ƒ0ƒ8a ƒ 0kÃiú˙˙īú_ņq ˆž„A„,&ƒ i…;ŲNPø">ÎøĢa1˛7ME]˙˙˙˙įŖ––{†ƒHŋ˙˙˙˙Jøâ#í/˙˙˙˙Z˙à ˙ë˙ū’×ø¯˙ĩ÷īûŌ˙ė˙˙˙ëãi˙˙úíū%õ˙˙˙Ŋר¯˙˙×_˙ėAŨû˙ŋūŋ|l¯˙˙˙õ¨Ëq6W|ˆû7ũ˙{k˙ü)‘™ņû­Ĩ¯_÷÷u˙‹ŽMŽíĢjd…ŨÃ˙ÁņĮŦq™yŠ#˛–M˯ŋŋŊUnĶä´0EH)Ų„d–3ēŒÖÎôŠå‹˙˙ûũn á”YŪNƒMUBeq ŋžūČ úĻŊŲ=č°ÖũŋáVžģ[´ōuM{Uû˙û‡ÖõüC"L*aHG0ujŊē÷ĒũÃŋČ_â#Ž ˆƒCÖ*8ū˙_ņ˙˙õæK("FqŸŽŦ¤ōŋåŧ˙Ō"H‘¯ūü(& ‚`ƒ2\8 d1$ N˙ÁHyŧ¤!FHSįĐˆŅ’Īũ/Mr§™Ÿ˙˙>9°8‹Fļ‹°Ņ­ĸ °ÂĻ300‰¸g‰xP˜&6!„&đžĩŽĒš ū˙Ģ„›d°–Rm'A6Ŋ'' &ƒ  ƒčŨBŅ­´čØĐŋ\Á’ ĸu­ÅŠH”Ŋ~ŋũ=4ÚV–­Ķ†]†N˙I[ž–Ée&Úa%m|…q ô‚f†Ļ œÕ32? ‡$‚;dã˙†\Ždxķ0FÆSŒøÔĖTÍA#H"¤yļt5:C”ŒG˛“Ŋ~+mW˙Nž“t*íŊ$ßë´ÚģÖėœ}tlę=0™€āĻY´Â&8h‡‚ŨĄń-0Œôg 㰈w‚ &đL Ņ á↠‚ ØÁˑ S6\Îąƒ:2ŒŲž2‘#6ÍW’Ëßū™qW[Ą÷ņõßôŋ¯×Ąđ˙<}¨ •ô>F…6ĸ‚cAč8<‹bTRn&ž’/œZ5Ņ­ÅŖ[Maát"ŅĄÅĸŨ„,†,&0P˜!æÅ6ˌ Îds1‘ã‡á÷üu˙÷Ũ˙ũqn”_ũ:OĨ:IО>}ƒ/ތ:KjŌ´™n\û$åŊö Ũ:N|œ2éĢ ž4Ÿ'm&Ú 7 žG„qIģA7áÚ!Žæ°ÂĄhģøBÂ.Ž.õ /ųj?¯û餗ũwÕé˙p—Q…IiV4ĩĢĢĨëm ~īŽŋģļ­Ķīô]—DßģPƒi<ži8dON “Ŗ[dpĐO†ˆ>› ˜]‡ŋõ˙õė?˙˙ô]z—_ũĐŅ7Šúëö4Šoô×˙˙Øéö=$˙bŖúéz[ĩ÷OŨ :ļĶN•ŽÂ—Đai?ÖÃ˙úûo˙˙×ē˙˙Õé$I%Jú_o¨čõ÷˙ˇŧ_Ũ}zeĐ_ĩ¯˙ĩö÷_AV–˙Áõū˙ũü7hīI˙ūū×˙ųjî—H%.­jŧú˙ØuÁ˙ü8~—Ŋ¯üGč×ü˙Ĩō1ū—vúū˙ûđũ_˙˙ũ˙_ID(„ĒôĢëķUūū ­ƒ˙Ũƒ6 ūY?ūŸË&ų8)ũ…ũz[Ŏ÷o¯í˙oü;U˙ÛûąŨú_ÔUꗅ˙˙öũž˙ÛØ˙˙õđ‡õūa/û„Ŋ9ZîĒdŠĶ÷íŸũëôŗEĶõ˙ũĶŪ×÷ļēuú×á?˙˙Áŋ˙áą ˙˙í_ø_đŋčŽĢūŌ[īoĩaŸöūū›_í~ĖöŦĪÄûĨ–?÷­| ŋžūŧ?ƒ˙øp˙˙˙˙Â˙…õīöįų!ė4›Kö;Mē† [ĨŪîéZĢļÛKūÍëĶęēĒE˙K˙ũÛÛ˙öß˙˙ūūũÂ.?Ú4}ö˙ŌŌĮ`ƒ6ØIŠdL ļ•m¤Ä;mļÆėîĢyÎ%ŧįFÕüÔĄõÕwŲĸ˙üģ4Yåũ×ģ~߯ë˙˙Ĩ˙„ŋžgÆĮØ ÂĐdnƒƒL Ä.)éŠpƒc0ƒaS@ßÃ]ãÂ^aZZéøĨ *Nŋfkm~˙íė.ĩ͝›ōW×؟Ŋm˙؟öhŋ¯û4U˙īíĩņ3áJ °B!Ą &VÅĻÅ,4LR„°•ŌQQĻ•Ģ -°Á}Điū“wŨļ—ˇ_ė0—izwė5ö_U˙mW˙Øf{×  °ęēâUV”Cb™ q áĢą dGm¤˜AÚ°ŌM66n•†žžÅ'ąũگà ¯mëũ­5Ų3Kp™PŠ„ĶA…L*ĻĄ‚2NšĻėËąL&!:lPM8¨ ˜A°ŖblXA Â ¤AĐ@ 6!Ļ ąVzÚvÃM6+øˆˆˆˆˆˆˆˆˆ`˜@Á0„A„""uG]›Š Á0B,&ˆh0ƒH#p™‡G\ˇĩá…Úr1Ō ;i‰Į@„hXMĻ숈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†aˆ0˜M Ļ'[ØkĒb""""""6ŊŊ}ų\b¨&d7u% R¸ĮÜ ĶÎĮŽÔāĨ—FQwĶ{Ļ “FeqnkīÚ}7 ¤Ģ wY•ō$ąÜōHĩ°ŋkFxFŠ~vW*‚‚‚•#;ž#‹ZOĩģÛŋĒ‚“bĪøô4;žî;ŋõVžŸ÷päØ ŧŠdĘÂ)kņņ÷}Ũ/¯Ēäg˙˙˙S%–t<ūr3‰ It…-W_˙˙Ōá0†`0M3* ŽŠB `‰NŦÁ’ 3HĐf™ŗR‚5G#ėŖ'<ÜēųØdŸÉZ˙õčÆyˆ°’T Âa F¸BM Ø(M°ÁA`ĄÄAˆŒ_×ԓ˙ũ.‚“†O‰õŨÚGŧŽNČíŖÛŌ Ąjxœq8íQvâĐe™'•(蔐Α!ŋ)IWPŋ˙õzęˇ Ã,˛iÚ“´ÚļsĨa’ČeúpÁ;Ĩ-ōxŲ(‚a°B ˆäX%C `™dėà ΁JxÃ4 d2:<Ę(f Pž`ކŠåČÔEhŽ™Æ}šŖĸ<˛å’˙õũßûŨŌé×­voŊVq§hQx›MVyEÛEÄ! !a„Â.! ¸i„N ]†´hh‡áh0ˆzˆ|Â,vF `f`˜ Á0ƒÁ‹>)ąlŽ0A“ŗA#ÖV#ĢĘļtG˙­˙˙ëū˙ô˙ąßę˙I°ÉĐi ĶĨ ­á’Ë œ#CA>‚l#^té7";IŪF;ŅûAÚi„‹Āâ'„Đš;j,#Xa ‘ģE¸aJqL Ų Á— ĖĖ ęĐë¯ßí}¯ģ_Įũû˙ũ6Ô/Iéö÷iļNi:N7ö––h¤ØaŨ–@ é6j A>Ĩm;H'd° Ú5Ųē †š“ļ“o6‚pÖž‚h¸qan?¯ŋ˙˙ãú.¯°˙˙õũļũ/\khR˙čWŨŽĩwĢ_ë]ŋVÚiŌvÖíB}Ų8UiZ찘AôNôßđ_ūŋ ˙áūUúßīõK]ßëÔ4˙VūĮß˙~ūģ˙ŋī]ÕZÕēwŊ&ūm,2īÔ"ß˙˙…˙đŋūßũ¯æU˙ĨZ_˙ūíū˙üwĒ_ũoģ×qęŋĨz÷Đ_˙ūŖ˙á˙˙ßŪĩˈW÷ŋųĢüĩŅjéü?Į˙“Ũwø˙÷ú^Ü~÷ÖߥÕôģ˙_Ō˙ũûū˙đ™Úp„/ūŽ=/ö~ü˙Շø_ôē¯ūŋú_,gäđߏ˙ëŋ˙øK˙ôŋŋßūč>˙Û˙ü?ø_đŋ˙†˙_ū˙˙ ˙×˙ÂŊRX?EŒ˙__ūĪŋöũ%ūĖ˙Ν_žŋ¯ŋúLWøo¯ˇ˙„[ī˙Â-˙īŖģK˙ ˙ļŋūžÜãđ­˙ŋĶm{î÷ž×ĩ˙ŊĩûŋKŪÉHLđ¯Į˙a˙tŋôŸ˙đ˙Ĩ˙ėTW_„\˙˙ßô­ Ąŋûņ ƒA„ ų‡eūÂÕ´Ĩ…#Ģâ“đu­­ũ§˙×ĩ]ų:íßļ–ū˙ŋé÷ŋū‚˙í/ŋûØü"âííöIÂbPęĐanl{‡„ ŽI‰CˆmAÄCPƒAĻr ÎäIĖÅũë÷ßaŠŋëŗ?ßėĪûûKĪyįũoūiûë˙L~ū•ŋLR[˙mđÁ4 !°„ œšaHĮ†Ŋ‘GĻØA„§ßöŋ^ÚÁ‚éZė0—ˇíĨĢg¯ũm˙†ĩZ_˙ę×؟ũ™˙éoų:Ļøˆˆ‡—ąBˇ6"ÁHK˙í¤aô†›ki' í4â­bĄ—Ķ´–í+Í­maˇĻÅ;ˇ˙¯Ũkļ—ö­Ģ_ž˙mvÉņqW×č1 ;§M¨¨ ƒ FńÄĄÕ1„bƒaĢQ„ äA„Hiĩ[a šiÄ4Ķĩ¯;IŠ´öĩÕxal6ŋŅŠ§˙°`„DDv&†™8A’€§xa wMW¯d4Ōi´ôÄ$ĶM ˜AÄ,   ƒ´ša„ëˆpęö)D ē\'ũū„DFceƒ ‚ˆ0„E—hD„&™G;à ) 18÷ĻF:b‚ ÚŨ-~˙üDDDG0ƒ. 0„Õmu˙ūüDDDDF”/TļŋúãŨxŽ>ŊČĮ_˙]6!”ĸË9ł˙¤Ō¸˙č5¯ūĩ˙ņkŽHtØlΊ}‘ãcČÆ<Ȗ*Ŧ…~š~¨Z‚„Á3ą&Rī ˙ŨOáyŅáANô^Ÿũ¤ƒáŌ}ŨĶ%Ģīũ3"›ô>ī¯ũ¤Ļ\`¤Øxޘk2°ųu ũåë>ũūÃųeô˙˙˙˙īū×ûúPī÷ũßoũ ŋ˙đŋ˙×˙˙ôoM˙íõī˙˙ü?Ĩ_ŋ˙æ×˙-C´ēņßa×K4ûŅĶūÍŲĸ˙¯Ō˙˙˙˙oûú˙˙ļíCøoļ˙˙ĩ˙†˙ūû˙˙˙Ģ_°ŋ­Ķ~ęū’ûkí­û¯ŲŸ˙šîŋ˙˙˙ø?†ûü7ãû˙ö?î˙˙¯˙˙ũŅß^ēāē†ūŦRũūÚŽÚO÷Zļŋúú!_˙áŋ˙ß˙ûvŌŋ˙˙˙Ĩęû˙˙˙ûû_Īũ?Iũ„š@ 9úl2=iÆÚva6ŋh?´ûũ/˙ŪũŗE˙˙ûš'ŪÍīˇ˙_ˇ˙īööŋ˙¯ąĮá/đ‚ÛĮ˛ B *a;4âƒA›L[ a¨Â lˆ<&Oë˙đßđ×õ˙_ĩ:-ĸtûk^C_g˙ŨÍ:˙wû4___˙˙ũ5č/oKÔˇ%DuÄDDlD0ƒDA“€š Befx´ÉÂģ§M4ūŋ˙ēąéúû~Ŧ5ŋ´ŽÂßßÃUûõáĨõųĶũĩlQ˙o˙ŗ?_MŗE˙˙×ũ–9O8ˆú˙ūØ am ĶM˜A„CNa*ĩ‘0RĒvMŠ´Ķm&Â(~ĮvļģûƒĄ­Ĩ­Úė5ũûVĩ×ī]¨~OB˙˙ū˙l ŠĻšA0›QOí 8 ƒh Â Û DXA´v“äI°L&ÆÆÚLFÚv› ēlĮúėt×ëozå¸RdYë¯×˙äM8ˆˆˆˆˆ†YXL*a0ƒDZ*i˜{(pDtNƒ›ØK*&F:j)4à „… ˆ´q†‚ Đl/0›Ų„؆ę×JĢ˙˙ČÛDDDDDDDDD Á`PˆaaY2≄×Ũ4õw#SÕ˙_˙˙WÄDDDDDDDDDDC  Â œaWî’˙ũt„DDFŊ„Ģ˙˙ë˙?˙˙õWj˙˙˙&Ƅŧ2ŲW˙˙éj?˙˙ę ˙˙ö—Ŋ˙ũVī˙˙ņĢZë˙ū×&Ô­oīūčy\žB V+ų/ūŊByÚÍļŋūÃZŨ‡M¨Åßū(›ŗ+ŽĘŖą ƒũ5û˙û…*H(LėĨ–æŊÄvš˙ū´õMB•)‘Ģ+âĶ ƒ÷˙iíÄhAŨ<)í4û_í>ū;īĸâüÉel ÂhZi„Ęa…×ĶîáĐAߊ-ō¸’DB"" ,}}¯IßĒęUq˙ņũū¤KR!ŗĻy‹U-˙ú˙D(äŦ‹”BÄ0Rã5‘qääxSc6)e‚"#LŲž2ŒÜj2aĻCdŒâĶ%—žS¯˙ũ—0uĩEÛBâôũ(0P˜S„a0BA…TBû " Ŋzõ\Šez—ãöN—t ƒlŽÛ%÷ ÂH6ī J†ˆŽEāhZa4-2ȍ3lęD<ät"rSŠy¸×•Ÿ%™“$":!æŅ‰ZU_UÎÉ/_^õ­°§ÕˇkÕ°ÉķpÂa6AŌmÃ$é#†á0BA‚`ƒ  ŅĖ" ƒ  `Šl‚ †! aNĖ ĘXõĖ ČQUęBķ¤AĸS­¯y6Ë˙ũˇ¯ŽëÖí;´Ũ;' „);AÃ3!3]ĸíÅŖ]Ū‹ˇqhÖÔ!z„Â.áčXA„0‹ˆDĮ "d;ˆaP!qL ĐyąAQ 2#‘Ų, fĄ™s Ú1Íg$ķH"Ÿ6g™Ö!į5͸nmÍ'/˙ēž˙ũø˙ũ~ˇCũ~ č&Ų+¤é;$:H7RQIēdWa„ #CIŌoF‹h'AkÚ66šjkŖ[ŨSiôÂ5Â.Ú‹v…ĸ;40…ĸ„& ` ƒD, o0ƒÎĢŋ˙ßū×Ĩm˙ˇ_īŋûjÛAŋ[hR°Ë8N–aé'­l2p’m“ęēV ž…ĐŧĨaϘI6“ė˛C ĶL n&Ũ ÂIģģFĘ„^…ŨÍŪ?˙_ūņ߃˙īëũF­^ŧÛöûĻŊ%ŌzčWúÕļē}÷T­oIÚ¤ĩn›dávúM˛} š—Úm’â|ŌvGm“u'm‡'m[`˙õ˙}n˜˙úŋŠūßÕũĮ¯úeĐ_mŋ×ĩũ§^ŋWU읝§÷÷é^…/ĨëĒmvž›a;8nĶõ˙˙˙ Ģ`žŋūžŋÃßūõ×Äé?č{ëūßŋū‡öîžÅo´ßĶßūúuŋ÷aöēU˙˙˙Â3ú „Xũ˙üø˙ZOwōŌ~ņū?Ĩ˙úZĨú_ĒĩŨzu˙Ą˙˙øox˙˙ģ˙ú[jû˙˙čŅũ‡˙ė:˙úũõŽ]u˙K_šjßË Ŋiâ°˙‘ē֗˙ũ+ßđëũ˙˙¯ë } {˙ûū˙˙áģūŊoŨ ŋáũõũ5Ž?m:Vī/SU˙–˙˙†ßEˇK˙˙uũcë×˙îŊ/ö˙ü?˙ī_xF}ū˙˙¯œ}}˙8õ z¯jĢ˙_˙˙ūũŊ{[˙ôŧĪ×õ˙¯ú˙˙đ˙×÷ū’_øEĮũ˙ũĩc˙ÛŽ‚,{˙˙˙˙˙Öá˙ūm6ĢÛĨũw×˙ëúŊw¯ī˙ī{˙÷ņ„ŋôŋžũ˙ŠĢåģøØĐN ˙ļ“˙÷˙˙˙˙cˆadWl4‚h; &Ä7a¤ØA­ßkuköŋe‘BõnŋsEßf‹öĢŊŗE×ÛúZũסˇõĨŋü˙˙˙ęA˙˙h2Nøba8 ›$úЉCÂa0„ÂA°@ŲÄ "2 ZųĪĩŨ/Û]Ũm=~Ŋ˙öĖ÷iŗ?4û÷ĨŨŋmĢ˙˙Û¯˙ūß(xˆˆˆˆËpBÂa`Âa0„DgšĸŠbĶ$á ŊĨi6•íėmŨ %˙÷°Â^Ŋļļģ~Ú_k -ŋßSkŌė˙؟÷íš/˙īĪWKļgņĄ’ĘŦ!Âma¤ÃHaa&¤La&Dv›Ļ›Q †œRlC´áÛh$ėO¸ÚØØöĶēû´›]†˜iđÂūééëú–åâ#…ņA„ĐbŠ4ÃAƒO‘ŊŒ4ƒ‘M‹b‚"Aĩ´Âh áĻȚĻĸĢh$❎ĐpČō{Úw_˙ u`ÂVu_ņ—em(æƒ""L eĀ Â˜B!’€ƒNøi­ ×jĶĶ$ę(1H0Õ0‚a6"A´i„a„‚ ؆ƒÛA Ķbƒ”?׈ˆˆˆˆˆˆˆˆˆˆˆˆe„A‚ ††„Y,Îđ×ĶŪ›QIÛB?Kqg " /SÔD~ģūĩá¤Å ŸÄSč>?ō¸;3øRĢ‚–ü}ĶĖ€āŸ|:hī,ƒLˇ33'dÎ2_ũ&‚‹a0L(( d´Î֙؞D™ØĒû](ēgdHīFŠ×SžÂ‚a MĖŋŽß´šI îĸ›ĻúĒ˙ž”qŪ‡}ÃŖÚĮ˙×¯ūĸįa_ã¯ã´˙p˙™U˙˙ĨU2XÍăČlŠ%×ʒ_ũ¨&< di‚eÆ0Ŧ¸Îƒ#qƒ!Æ;5ķŖ:˛SŠd1ëųRõ˙üažl*Ą‚„(P˜@Â!ō@Áĩ×õüŒ˙žÉ=&ôŲy(¤‰VãGvœ*.Ú5°‹°Â!ŲslęķTDŗLæuˆFuDnüÚ_×˙´ŌßVė ᘀ›Ŧ4Û$đm+díĻŌtƒtˆ[‚`ƒ…đfc0`  ‚šÁM ĖŲ‚!L'|G…}y‚$ ė›(<Ķ7ÉË7) ’äCΚĢ˙&æŸÆŸ_īŨn ×ŽãĨ­Ĩ`Ëd ‹FˇhØĒ5Ņ­…UFﰉ쇇 Úqˆ{‹pÉ Ļl‚`ƒ…†.4Bā0L0§Œ `ˆƒ“‰N>mfĄ”™A3q¨ˆÛÍÅDKb(#Ģ"D Īī‘ģ˙­ÅtŸuëúdÜIŨ' “mS˛,4&g¸aMļ‚ >ĄÁ„ômUgs]Õn-Q­Ą…BŅp?¸°ĻÉO6(D. „ÂeČáA60@Īąœ2ãƒˇ]âŋīoĄ†Ļ÷Ļû ē'zvúí}-“ęN ē:o Ë9|Ōw 0’tœ2$^™Ÿ'—IäXo"ž™cÜ4Âa4ÂA8Fw†ŖpqŖ]ÛEĀqkáot-˙ę‹)˙\˛úĄKūëzÛuĶãØũw]_û×ŋŊé>ėŋ'iÖÆ›eĶa„Û°ƒĢēģO´ļ“đ—÷dcŌpáĐO't{a„ $‘a ™ž[‚Ūģ˙ûzëųb˙ū:öŌûŋÛÕw˙ß˙Tũüũ}ŨÛK÷Õ][֒¸MmúôÚīI[ģ ×w3^˙˙õ×Âú˙ŋíÅuúQúˇũÚ_Æß_c×ūņ˙˙ēVß§ú ĻÜqú}ÕģKiû_õ˙û˙…˙˙ūdŸāīūXåb˙˙úīk‡ũ­˙úĨ^–ŋ~Ŗ˙õß˙˙˙Ö˙ˇ˙ũfBb”¯_û}mÖ"ē˙íĨú/qT‡aīßë.¯˙÷˙$áĨũC˙ÚŪ—˙˙īí˙˙ú ŋí4D\˙ŋᇯ­˙˙û~ŋ_×ūúēMú+öÁ˙ãëß˙đzēķO˙ėŅ~ŋŊˇõ˙Ŋúī‡oí+í˙÷ßũv(o÷_ī˙ĩúŅĮiaöúü%˙øŪŨvŌ˙ö×K­Ŋ|Ķo˙ûĢĶü7ŋõ˙ö’ûmĶá˙Úû˙û¤ö¯Oá>˙Ļûë Ĩ˙īSÉzÚ\W÷í¯˙g˙ŗ>ŌŌ˙˙ÕwŽđ¸˙˙ūŋ㎰ßėB˙˙â—íbœ \ąßö ßøEŊēëūÔˇ2ņ@à ƒpƒ4‰ĻÅ6’ØAąMÛcn¯˙ŗ>ú§ũįiŗEî—éGũš* –˙ Ŋo˙…ļ”}¯ˇũ?÷ ŊũŠų’Ú Bš!„ĒŽ6 Äãڑ!ąM6'˙ļģzM÷œõû_ŋũßŨZüâįO÷4_ú5xÚŦ͝o~ŋJØß˙‚øˆˆˆˆ2ŠA a0°Â Ä$ˇŦUļ’ßú_PÁ/tžŌĢî .֞—ëíÃ[×ëk{U÷í,ŒOíúõuūŽÜĐ¯äĮˆË‘h!ųÃ6™H&˜A„Âv˛ áģ  $LŽ­.D‡ą_h;^îÖö5õĶęļ %ŽŨˇW­ŨŸ˙ũm}KuIøņöģ Sģ^â4č4 †)4-”âšpƒ6šØá¤0ƒ Č=†‘-A„M øí1LC ÃVÕa¤ØAą_jĶui¯aņ˙ˆˆˆˆˆ‰šq`„A‚`ļˆam2ė( e>qĘGíöƒ ģĩozڑŽ“A Ø„qLm ؇°ÂLC0ƒFä‹&?ņ›ĸ#B"""""".""""64"kÃB" !i“ƒ &xŗÆJ)‘¸WÃĄ˙ôÍ6Ī>"""""""â""˙˙K¤¤ô”Ū˙ū–̤ëĐ˙˙UõĨÅđũ¤d,W­*IT/´ĢJÔę`Šuú_■ XIB¯˙a5 ˆMp â!ĻTW팃xˆ´ÂÂĘęĢ ęč! cR‚8X&d5é âĶpƒÃĄęz*3ŗāąa;COŽęšįdDĘ"+ģTü":ŪõĶÕ3!c+ņīß§ō ˙U2[JvNJR+–3(f@lˆÎí˜X~"Ŋ5č öļéŖŊ4šáB`ƒÁ?ū- …ŋČXȑD$^Ō{WMĶ I%]zxĶũ>õô ūûŖÂž;ø"?Ôã˙˙ũ÷ęŸõ…]â=Õį`ˆ•¯^ē˙Äp×[īõõ_˙]'˙U¯æDąŗ<ČdH (3LĪ8}9Ņjŋ˙ŋë˙Ī(Dt&aà `  ‚ØSH j™Â<ˆÖg›5#ZdųC!į—ŋ˙ßįe?ëņŽąLAŅēĄmP°\°‹ˆB lŠx(McîˆQá˙××és˛2U˙øDtĶ Ōm,:Mģ#ˇV–ȰĐAäXĸ - DwĒEãC˙˙ë#‘2†Qŗ'2ƒ5Ŗ<įå!Ėō5ŖŽ¤ųJZŽŋãϟ÷ëvĢöOė&´Đl2Y œāáÃ'zL6E‡˙˙|C63c†!‚ Îą„ & 0ØA‚`ƒ&\` Ņ ĖCHÁ?"e“’3fxΌ‘›2*Ą:9õ:šį‘¯˙-É~ŠĨē×˙õim;wí6×Ŋ ͰŸˇūŋ“Æú.Ú5ŅvÂî Fļ! ôhXL&…N!` ¨2J)›$Á0ƒ0ƒÂaB3d0TBûD&KŒ2\Bs'eĖĖdī$2Fqžd?%L‘›mB˙ã˙t^÷_ũk˙ũmĢú˙ū›RÜS¤Ú5°áŌ—ģ˛;mPFŧ‹dväx'ļ­đƒlŠ;xœvi„<'N=|Z6Q­Ŗ^'ĒhÖqhÖŅpÂaSF†7 "? ‚a͊lP˜(@ÂsË˙ĨôŋŠCú˙nŽŋ˙_~‡˙ŋouwtĩ˙ûW͆_´°Âa;L'ė2įVØ@î ûÔ&Ø ÂÂ6Éc :M¤ė ۆ’w’†“h&Ņíą¤Ú0ü#ȜzûIĄ„]ڏū‹Ķ˙čąo˙ũW˙˙˙¯îØūŊ†Įö˙÷Ú˙ßÕ÷JÚˇŨũ]Úũ§­'ŨĻŨ˜ëeœ éZélœ$›ĻÃ,asNÉ`AˇÃA m‘ÃIÃ<ŋ˙˙ūQß˙ú˙˙ôßúū°ûõúû˙˙˙ũũũ.˙ß××ũoßę•ē×}]Ϝ>õģAéĮĮ˙˙ū¯˙ûĨ˙˙ūŋŧ?úáė/áĢ_ß˙öŋV˙öũ/˙úã‡˙čj?é¤ß˙˙ĒõĨ˙÷˙˙¯˙û˙˙˙˙!‚˙÷žíė5ørô˙ŋø˙˙˙ußã ũoŋ˙öž?˙˙úũ×-ĘhÂ#¯īûũĩŋ˙ūŋ˙ī˙ ūÃ˙Ōaëė:o˙ ˙á˙÷Uū´¯. ÷ų’~Z´+˝ø˙ût?ú˙āŠwī˙ŋßûĨ˙ú_ęŋß˙†đ¯†ė7˙‚ëū ˙˙ÜãŋûÁkũƒ˙˙Ĩ]ׯõ˙Øq˙m_[ūĖķu_˙÷_˙Ū˙úŋí˙ļo\WÃøEĮ˙Ņo˙˙ô´ŋđˇū˙˙Â˙øZ˙|/øyä_Ü0“kļzũ†’kûņ˙˙˙¯ûĢŌũđ˙ú_˙„˙˙ąąõú4đß˙ũá?˙Â0˙ūŌ ūúi ØĢOb—MģOn×ßŋŊ_m%ũ¯˙ é>Œå Ũ~Ûo˙Ĩ˙ũ~éõŋøK˙pũ}˙ļ‚}˙ î˙đņã Â CLah Áma!„0M „č*Ü2<Ä;†G“t­{¯ü?úJÚī›Ufy˙˙úū˙ūõôūß~ŋŪ—ßú__ēIûÄD@ˀB! &ˆ„Ę "?†'tˇn„0›Ä6"Ø ƒAô—ūŌží&ĪZŪģ %ß÷˙úŨßëõ鯟gã ˙ˇ4_ļf­kŗ=ë×ĢūôŋŋAˆˆˆˆˆˆˆˆĐ‹LœA1Nrŗ˙ūŪ”Aĸ ÍXĢAÃ4ĸ­$íuÂí~ĐncVÂIūģM×÷úw°Ō´ēøaoė+gūöÖ×ū˙â—÷Ëu…‡øˆˆˆ×ūÜSL8ĻÆÆa„‚a8 Â Øâ!ļ‚0ƒ0ƒ@ÚÛ 4AĒ{a6;ė*pËĻ)˛˙lp`–ƒâ%õ_]˙íQ*Bŋ˙Ù'e{a™v™;+ ENåaX™áJržËōNsŽMü¨GRPœ1_ôÄ$kAƒv-…“cj0ƒ6Æ6˜i ͈=;´é°ƒM6Ķoëë˙Ÿ"."""""""""""""""""""" ˆ†]„"ᒀAĻ AĻĢŽĨPh0¤ ,4¤ĐlŒta0˜A Ū%<&l`_˙ęķŌ"!ÄDe¯e$2˜L!ĻĄ +d ĩ˙˙í'\DGžC–L/˙×tēë„—˙˙úëĮ¯˙˙ēKū˙˙˙­i}¯˙ŋá›1Á~?˙ëÄ-/˙˙øa_˙˙ņøū˙žô-G˙õÔeĸ‹˙ūųŅc<Ȕ˙ū×Yä)˙a?mbŠāō“2Guq>ˇö ū7ÍL)Ø; Žû21‘4TŅNž˙ûÖĒ(P¤4 # Ļ ›dIŠĮHŦÄ-Ö~?ŋí8zw҇ ˙UL(P  Ą9åūČqūČqīģģ‡AˇwwwUÔb;[Oíl/Ôwww§8y75XˆiĄš ?í~ûŋüō>“;;+ōR„HReŽ5ũüo˙ßßåpzĒę#ūŋ˙§˙ņ2SĀ͒N)ŦShžyE7šˆĐ‰¤ŒĶ6ÍRš˛M.Ģ’¯}÷˙ãøM(Ņ‹BŅ XE¸°‹pÂ3´Cŧ ÁĀd$ȃ&ld§eČčĶôũ;Č/˙ëüō>ƒAĻ=ĐN“‡I–;I–;„Iũ Ŋ0‹Æ„XF°ŅbAĸ–ę—˙ë˙ī˙č$ęŪߎÕ;K¤á–xdņ¤û$=&äxK;ō1čđōȏ™r$)š¤`ŽA” Ä|“$#–PgAÂ‘B4ō'<Ėŗ<â<‰ĖŠ,͉Wĩ˙ū'×Õø¯ē¸Ž)^ūĶՋCV§I°Ë8 á' ļD ›Ņĸ,&FaĸÜCÁ5'ĀĄ8i Â Ą‚ Lķ.)8pDZˆžE™pJ„pÉČû.IåŅŋ.F¤uh3"@C['ÍæryŒÕå¸YG~ģĮëīņũĩõnŸ_Ļ÷¤hv‚txr-‰VŅĄ¤Ë ›ŅšÉãŅxŅxÂ/!ØH č×ŲFˇŖ\!F°Âp‹†7a€Ânä-°…ĸčYb‚D_… *  ÂpŒŲ—@\¸ÉÅ \âHāÉÂČlŖi¯Ûéhw˙ũzū“†_:ŌÕà §Iĩvŧ2įn›Ōm&éØA¤›I÷IßwIļGp“Ķ Û"ģAÂ4dA߆aaÁŅēŨl"ōCģ~…„]âŅ­„.FíDßwčx8˙Pë˙×ū?˙ũŌt'ë_Å+¤›īKIŌ{ûßŌŊ&Ã/‰ÁŖí=>ôé6Âá›Ķa‚ †\îōúÛĨ¤úONwH6‘ÅōPŌo„I´p̀ļĒ­ÁëíÔՇ˙ß蝘fņõë_ī÷ôŽũooĩŨ%Ķėzvu×ŨĢß_ę›ôŸú´-“„•û6ŊK œ*l%uˆg̜w‚†oÛ_Øī˙ũZíëĩĩú_é¯ĮØÅ¯üŨ׊MUīõūŋūŋ˙ģCģ˙O_t?N“KH"Ū7ũ:áŋūŋ˙ī õÖ4ū?_˙úV–Ũl6\?Đũxx¯đöģn¯õë¤5˙J˙×Ũ5}í~Ũ1 °Øa„­+˙ ˙ü#×˙Õ}_–Ŗû~ßūŗj9uXËÕW°ūū>ŋõ˙¯ū×˙˙ühkΊ:Kwö)ˆXö+ë˙đ‚|˙Á k˙˙īž— ‡ė?ëú‡˙°õ˙tžēūåą_ŋ˙ų~˙ņõĪ'wŅÆˇčÂÛ˙o­/FũčĪü#=Ō˙Ĩ˙ũŋ †ü7ũ÷áŋũŧ/ūŋ˙^˙ôŋH–G´˙yīI&ĖŅŽŋč˙4˙KÂ_ßáū\Wũ×Ĩ­¯áÃę˙¯ ˙áŧ#?ūë˙˙ī ˙ī¯ī˙Ū´ô´ŊvÂßūģĨûúéū—ú]×˙üU‡áŋūû˙ƒéī˙ßũú4~ŋī˙˙õÄ8}ėAČ$Č!Å>Ų^ÍĻî¯āÂ]÷Ũ˙˙=LŅûíĶīļí˙÷ūŪŊŧ%˙Ú_˙˙á/˙˙ö˙˙´É:ˆLUC†ÔTP Âq$0‰Á„‚a0›Ȑî ėŋ÷ēļĢūēVļ•¯k˙Vg‘üögæ×ûš~Ū]}˙õ˙Įũũ„SôŊ˙÷×­øˆ‰ž Í­°a0šu+6Ķ“ģi ˜NE1ÚũŨúúę› %ŋÖŨ:MîÃ[¯´ģ¯í/ûÛSŌōũk˙ĩ^ēž­¯˙uúëöhŊ[qųî",˜í˜xˆˆ‹b""Q†ˆ`˜L(‹M†l â ;AąAüT‰m+JÛI‡V1VļŦWėií­Ģ Ŋvû˙mt˙aí¯jÚëēßíūÚ˙kj™n§QĪ„OM8ˆˆČÜąÚlll”$Âk#tØi؅ ąL0I‹Úb˜a'P@ÂmÂ"Ōb› ĶM(ˆ†œ]ZlCmiėU§ kiZ¯Ã v“ $ú–å]ÕÕéń" ÄÍ L!  à „EA2ēAˆA’€š BˆA…&é¨Ô5xdQɸĻb4"™r1č6Ü&žÆÄCi‹ˆƒ 0”D0ƒ`Đi ØÂi1L0ƒÅ­iib"""Ė0áÁ’°ŪÔí$YŖą(ėO!hĒįhč'˙w š-9-0   ˜)*ČLėÂ#LÉJ"ąŲeVÚÚúoõUBԌä2âeČ(&eãíö´áÃģČ=ĶO ę ĩ˙ũg/î\Ņ›~\ÉÎ='˙û¯˙Aaū¨?îĸ‰˙ß×˙ūđŌW{_ũūP˙;Ī˙­ņ­ņôēD (K™Ŗ5úęÚZ˙ã[˙ü Á4Ķ0Yr$ 'D‚!—ūCȚRFY˙&y/˙ã˙ŅĮjéÂa˙AæÃĮŊ`ˆ˜JČú`“36q˜5õ_ūŋūw‘c#v IÉšíp‹Į¸!h‡†(AĒ’œ‹Ú¯˙ūŧōÂNėšÜ0ž:N—a“i^Âh5]tØpėŽĄņ8í2>åÆhĖ gĖāÂG<¸É#„šåȆ<Ž2΁|šF…æŲĐÉNn42„kGThfŋ$fŋ#˙˙öũ]'ˆ[ké?ļēVîĐpËäáÃqa "íŪv.-ŨÚ!ĐC†Œî, Ņ1æ0/ÁBw‚alSb‚„Â`™qA30L`†!…03” K‹d@ÉDŒŖ7“™ÖČ^jˆĖ› ˙ûū÷ū—MiZKúˇí7īîɤíē †ĨžJH6úAš< Œ AÃ5ú5ę-HhÖЋUMčÖÂ.ā…Ļ "á„BęXႠā†";0˜!Å0FČ ÂG0@ÉŲq“ЁĮk˙˙­ypöņŌ˙K¯˙˙ÚNÉÚW}]¨AŌŋ ą…ĐŸ4Ž&ëvšˇ_ūŋô˙˙ÛK˙˙˙˙Ō˙_õß˙ŋ˙˙ú[õ×÷…×ūÛ_ũûoíרuũ˙ú˙é˙ŋėW˙˙˙˙˙áģ÷Ŋ˙˙_˙ŋ×~Ö˙wG[¯đÜ0×OoŋũmmļŌaž˙WÛJ˙˙ũúôŊ˙Ķīļ—øũ/˙˙ŋ˙}ûúûÖ÷Â-í×ønÃb!ĻM4„h4áÚQ[muoV_×ū˙õÖtū˙˙o]/ķ5˙˙o¯ŋû˙ß˙ą_ßĨ‚Ļ+ü96Å ™7JÄZa0›Ž˜Ám†h h‡°ÂLDMˆƒPš~M¯ˇŪŋ×˙Ųûßoc ˙œOũ™ņ[fŸ˙ũ™˙ũš.ģŌÛíö=+A={ņĪ´Đdāˆ10Ĩb“}m+Čßr+’t°ƒäHiŪĒéZļ­­ūÃKĢ­:ŋû_Û_†—˙ûjßûjëšĸŗ?sOé×F­ūq9Έˆˆˆˆ‹ˆˆˆˆ0AĻŽžČƒ†š †”CN Øa(†ČšĻĮa&°ĶôĶOēžâšØ­o톰a+M~IēXktՄ–MũĨ÷ ËrŒŌûWią ‘¸WτȪŪ, ØQLBbë 0ƒdČ ÁÖ<   ÂlCb˜0š &c°ļÅ6–ĮąV­>ģw˙_ņŽ"؈0L°ƒ,mL”pÂōʴ˘LĢ*á§Ã ĩUM‘G†˜ĶM6bA´ØIĻ@Ũ†ƒę!Č%H&°–#¯ņ›â"""#B"""""#B"""%A‚l" Đaa!Pk &%šŲ'V„ƒN*˙ü ũˆˆˆˆˆˆˆ†aX`„C(pƒRÉč/úZJ"ÍņxBŋ×ô˙˙Õ-×_]¤ *]Z˙´‚@–ŠGĮŠÖé/ė*ĢQū-5ŋˆ°Ĩ˜–č)ąJrČ@ÎCP@™´ æã ąŽIÉĻa=0A‚ ! eēY ėiŗ*QÆqhz ôqōy Ÿú|:AĨßû]?+ã$ąŲ$wVvYŠŽŖ5 ͇pîēčˆ=<(PR.dHŽĘ2 Žū#q$īÖ}ä[~ÕŅūēÄĪ ‚ũ*o˙ä-äH”ēÁ‹‡wčҎOĶSŋ‹"O­ũ=iîûžôÂWÜ:= ųd×ŋúûīúß˙¨ģūŖ¨@„eŊäë˙˙õē˙ũGũÖŋß˙˙ô˙˙õ¯ģ\¯æO›mTÕ¯˙˙î˙˙˙īNJP˜( ˆKfĐDR*HėĢ"FnŦÜj<šæĨßékę˙”˙åezū‚ŖãBw N-Ú.áŧkr$ņn(OÁq$tę˙õû˙ũ5ß­\0ƒa&ę’mũ6A„‚ ĮÅŖc“°đ‹ÆvEŨ˙˙˙2Ē!ą”3¤Ą?×˙ķ˛]~×Nh2– ēmúŲ'ōú—Aô›I´˙˙˙‚ —h2€č2q35F´^<˛äC'\dIAcL™ Î3Ė31æqžm ŪFDŒŪNˆņÍÆ§ŠŠ%’5×ãēß­īĨôģCīŨ_M¤Ū˙˙˙ámvŊØMyeÛ Åń!„MÃŅÅĸÜ0¨…Õ„BŦ l“ ā Ą†`Ą0BᛠPƒ0ˆ^! Œ<œfq‚!…# FķH‘š#‘ Š ȓÉĪŪßũ…_žëNžŌ÷ÖëKi}˙JÂAļGoI°tŌMŖÛ &Z7¤°mspz/ŋ˙ø`—}ėSh6Ķŗ ŌÕõÛ­ĩíŋ]ĩļĢļu˙VŌŋŪûiũ/ųŋ×û3ūøˆˆˆˆˆŠ˙īøb˜°ƒ0ƒj8ļ-†”CĻ“Aļ ąI„ÛJRF‚MŠĶcM;TA*aļ“aˇkm¤Ú°a-†Ø~Ģ˙íĒá†Nũëû “€šĮ(| 2pƒ#u1LŒt֚aŠ†Ō 6!1M1AÂ0ƒi4ؔ< l0”abŲÚLCb‚ Š Ãl ė ä? 4öŌŗ ÂMŠė6—˙÷ĖĮŸ"""""""$Œ0A„""!(B$ķ0ƒA„"!eM´Ņ¤„Č܆Fé Ä&Eļ“ ąą8ø6%0ƒ8ØØÁt0˜Œō˙˙ūņą|D2ė „ė&‰:„Ô”.aĐ5ß˙ũųĪ˙û˙ésŸ˙˙˙t¸ ūŋú¯åŋ˙˙éj#ūû˙ö—˙˙˙āÁm/˙¯ūÄ(¯˙˙ûÂ˙ļŽŪū,_˙[ņ“aļS˛Ĩ‹äoŋõ˙Ģ… ˙ūū˛ &U]üˆÖĶøÖŌoîáŨ0ėAûņĮ÷˙˙Ū˛ÔöR™–Ÿūˇ÷zw-%@\ėԁáM/üyúŲ ü4Ö†/$­é˙ßū×´Ķ´  ƒáÕå~Č'˙°˜B-°ƒ0ļŌũūžS˙‘t""$'ékŪu_Ô}+zÆh*” ŠH=NŸzíĶ÷<‘ŗ[FŠ!āĪ!Š`fgČØđ†ˆ^œČčē>).FŦÚ˙"Ę N¯ČŌ_ûI6“zAļšannú6S^"Ņ­Ļ…—˛ˆ`¸@ˆíž éR-ųŨK˛Ī´œ2įvšiXnIÃHöđÁ$ØFˆa˜Wč ڄ^5U××éũũ;ž“Ëš}$­'}¤OĄôŦ2tM–˛¨ÉãpˆÅŌäj$k“­wũ‹ÚK˙ũzß­í$Ú3†  œAŌ>FƈPāƒŅ pS6\fŦÆmG„fd⑅Ÿ™ã:‘ i–åa͞´;íũ×˙ kītÛ~•ūn%XØh0˜§uIUpĄ BĐ´,&‹vž0ƒ0š![ŠōõÞˇ˙÷ôëŊkøú´œ4ÂĶTáÃ.֏Œ?ŧ‹ 4A„„h|J;ŅšŖeYxOąé‡Áé­_õãÚ X—ūžĩŋĒī—aÛ¸ë¸ežá„í=]'σ6opɛˇ†ßK˙_Xé[ëūdŸTũô”ûūûˇi~˙ĩ_kĩđŪ´w˙ø-átqÚßëüūī˙˙˙ëĻ*˙é^?°ø¯īÂ4oĪzë÷y1×í¤í×ÛK_īôîÛ˙žíūÃîÅ5kûî—4;.Õ×ŋũPC˙úû˙íNJÃũ~ÜŅ^õŋ˙¨Kī^*>ĩŊëũŌ˙đˇ˙÷ė5¯‡îÖü˙Ŋ=¯ûmš*Ūŋōu˙ũũˇø_˙tqéļ˙đÃîĮiOkkˇˇûvĢî•ũ­Ũ?˙˙ļSá˙Ŋŧ"Į†Á?˙Ûō&+VDpÂ^ÚPÂm§`Šv™&ė-­wû %ēßî’×īĨ˙ū”h,: ˙ü´LB¨§ Ä&0ƒbØØŒ ŅÄ&!ģZiĻÅC#ė4ŦŅiūŊĒ_˙ą´–%˙đüDA‚D0ƒ.ĘJa2p;ö™'UA˜MĶ›_ôõũĩŽŋú×9ë˙ēüDDDDDDDDDDDL aCŋ }ļļļ˙Ģ×ũkũŅŋËrDhĸ"Å u‚Ĉœ[Ã/éũzwßūõ}ß *kđŠÃq‚ &0ƒÚˆl4ĸÂi„ $ÚR!ŗƒ"-†]”@@ČT • Lׄíĩ˛Nĸ™'&šiąQODDDDDDDDLĶ Ą`ƒ0ZŽĢ ™RÕíF[ŠeUAHY‘ļv[u Vđˇ?ūļtfĻda]˙ -ūū×į $E0^¸î÷zũßÃ{˙ũĒ÷ūEōˇū#ĩĘčDioĒßãĘū!˜ ĻlŠdr$ —.J@’˙ôkaa„,&nâS†˜AæÅ‹63dˆ—Ķ\š ×#†H"ƒ4ŒGe_Ōm&Ų VĐA¸A° “ĀŪĐaB!ÜCF€ÁBan`Ą?R-WKĻÚ§īm'KáS‡d‡O#ˇÉE'‰V%CA6ÅæÖŋü/M:]Zēŋ[~ĐģNs Ōl0šē Ų,e¯ÄyŸÎdxģ4ūGG2:#Ŗ1Š –Ė2“æh—Db ‹-ĘĒ7˙īw^—˙M?M˙ZVŽĶ„\9ááK‰ĸĮ ˆ°¨‡°Â!Ūa l‹˜)q‚eĖāΈ–äEō3č{&Eƒ+˙C^ĩ%ŋ]÷ú§ī÷ú ‡7á„ ˇ ŖcŅšņhÖÕ !haĸŪpBÂ&;F€Â`Ą‹˙ū\ī}wõ˙ņū‡_ĢĶáųŖMģ[†_ĻÃ.ŧ¤Û‡dv‚xAĐOh ÚNŒí AËpŋ˙ô>Ÿ„ŋīęžXOĐūr#ĒooŪ]õūņÛWy;´ė”vÕžŲ>Ĩ¤Ú Ã%•q˙˙áx˙ú[ŋKųeûĄ$Ö ˙_Ž—ĶŌî-6Đ¯ëģuöŽĶu˙ūü#?ŋū˙˙ú öˇõļē_ߡßûúØ˙ĢJŋZû˙˙/–īû÷û˙ė.Ŧ›„d`BÜÃ)ũûŋ_ŋa˙ũuú ņ˙˙˙~—Ŋõ˙ũm˙„\wÁ(vC#å‘lũũë˙ƒ˙ô^ŋųa‡'§äQÂŌûuûš/]ĩo˙˙˙ũ/đƒ Ą ›­ ˙×ūß˙˙ūÃĄôĻ(˙Øgũĩ´žĖÖŲĮĢ˙˙ŲĸũŗD—úh?˙īŌ˙Ã˙˙øo˙ ˙°I´ĩļõ­Ž÷×ú{kũ¯ūĢ˙ë÷˙ā˙˙÷ūūđŋķĸ Si ĐaÅZØA†)8}Ĩa;ūū%ü0ēz÷ŊuėVõí˙û˙øŪÂ.?|Z BM<5)Ä&%:i„˜ļD˜†lC6)4 Šˆ4īU÷×˙˙ß˙ī˙mīũ/ū"" Á0M0ƒI AˆLœa{ᤠ0Ķ#XA÷!~¯˙ŋi^c­´ŋŗ?˙Í2:w4˙ŗDm%ûņ"""" ! &<2ûßÚZ]Ōmũ˙×í„ŋ­†ˇÃKÛwjƒ˙ŧˇ(F™ĸâ"==°Ō†A„Ũ6ÂQŌdG Xdyn=mV+V *đk tīuNųŅūŠN)“b!‡¨ˆaĐ ÂIÔ4˜¤ĐlSq SaĻ"1K˙đ`„! 2vW„ &HsŽxĐaw“ E4š†a;#CAątŋ˙˜P f ! 'a3“€Tŋ˙ÄDD8ˆŽŋ˙Ō˙˙˙˙_ũ~—äŸWž—Į›‹Ž3ĸ˙ũ8˙ÖáĖ —ƒ—§F„Pdš•-VŊF[™­ƒ@Á Á#b‚ †!ņ †r᜸¤ƒ#ö@‘B#æbÅ*‚24Č3*șuō¸Äv253ŧÉ,eRŒ&˜N-4ĶAßh] „ 3 €‚!Æ!ˆ|CÂÔ9HbeôÎĮMT(-öĻœ_ũŨé„ A„á0˜AĐA ū ÁaßΞS-Ϛq§˙īéĻ…[âĐhRaģVîīĢ÷­­ũõúiũ§öǟ•”čē˙ũíbˆ‘#ȰīäG÷ūŠÚw^šIŽUb:#Ŗ‘s5™ŗ!J#ƒ˙´÷!oļ“urČ8õy˙Đ?Kũ!ψũ?ŊdXĒ ’ŗõīˆõĨîŊ0žŽŸĖ”ūūšúôDˇ"FūEžēāÁ;™;Gŋũ˙ß÷­˙ũĒoß]éŊä-ũ_õŅ zy;NúA ōŋz˙Öß˙ĢÕ˙˙¯ôë{×W˙Ķ}Ĩŋžĸ˙¯U;_¯ßõū˙ũK¯õ¯˙!__¯ē×ĩđ¤„h´ŊŨ?ũ/˙ī˙ßû˙é˙tŋ§õ˙ûņú —ą” ¤CD<Ī7‘!Z’™H„Ŋ˙˙˙˙˙˙˙˙˙ūû˙^ž4,&oƒÁBa4C0)ą„ Ī°S6Dņö`Čf¤‚!„ū˙ë˙˙˙˙˙ŋ˙˙úę˙ü”/žRė– íĨzAŅáņŖcÃÂ6wØđĄ 0PĄD=–á…ī˙īëīū˙÷ũū˙ũI˙ÔīO%+‹,ö˜N“é:O˛OI´m' _˛<ŽņhÎômŋū˙Ú˙˙˙×˙ú˙˙wë˙úޟ:'˙īKWÚ zū˙xv¨;†_PNsé?˙˙×ūūŪŋ˙˙˙_÷˙æĻ_0G ˉÅ:Ėži"äqåSŠ•l肒2„Ģ“eĩ˙U˙ú×Iô’ĩÚjũ×ę×ôŋÖŋë˙˙˙˙ī˙˙˙ũøí0¨ĪN,&œCĶD/†`ƒA—@ ˆŋ6fŧÚ[.GB'™Â-ĘAG˙_ū/×û__ũ^žŋ˙ī˙˙K˙ī˙ũ˙ß˙˙ &a#CH60ŒîOQ°4h§¨ˇaãD=‹Đ!a9;#‡˙夸¯Đõŋ˙îū†ŋ˙˙_˙˙÷ŠôŋúßëU˙ë÷A-]đÉãIē}+ œRm&Â4? ōav“r$ á´˙Ŋú,'í)Ģī×ãß˙ũ/˙˙÷úũ˙_ũ˙ļõˇ_ĶĢíé;B­î“†Yé`Ëõ˛g/Š8a0œDgEūŋá ũ*˙ūŧŊ?úŌ˙˙ū˙˙˙˙ī_˙×ė˙ŋ]'Wß÷ۚĻÖé§˙_ū‡ūŨ_üŋûņ˙˙˙ū0Ŧ?˙ûũ}u×ŋŽ˙ū/īû˙õ˙˙÷øA?¸F÷˙˙čÃ˙ū<-ü}×˙ô˙Ŧ~ŋ_˙÷M!ā˙ĮßKöü?Køß˙˙ū—ö—úN˙˙„˙ūŋûũŋc‡˙ũõa˙Vé¯ōŌ~˙~ūF:˙ũûf‹õ˙_Ûīū˙Kŋ˙×˙˙úõo˙ū°ŋûz‚†˙ ŋ˙°Âûēūjũû˙ĩÛ˙Û3ëĩŠÍ5˙ũ}ŗE˙ëú˙˙øVū˙û¯˙ú;ē˜đßø_˙Û íú˙ŋ÷_Øa+´õøi^û°×˙õūĶo˙D(˙ūŋõõoëûéu˙Ũ/Aa˙p‹˙ᰋ‡Ũ*˙ëą Â âÚv5MAˇu}˙ũđŌ×ūŋ˙˙˙Û˙ũmo˙ãŠKí/_ü ŋīŋūüÚöÆÄ㠃Qą{A0ƒL ĐiĒvpČķÃAü„/KūBšNPá˙ú!"õ˙īRī˙ûĨœO˙_[õû˙ÄDDAœ,œa0„C “„ČŨ4VŠĻĄ0ƒAą8éŠ 1įÅ˙Ú˙zÚŦ7˙˙ĨÚUũ×÷ū’˙؟ļ‘Ņ:ūy|Wöh—â""""8ˆˆˆˆ°ša0ƒ$āŋ^ŋū˙ī­p܄/ŧđŋ_ņČB˙Ũ­}ŋŊz[Jū˙õ­¯í-ԑ:""#˙¯˙õüáūŋīëÜ mqQ ;mklva6•Ĩ īŋõÛ ųn.“XĨųņ˙ūĻcę˙ũ/˙ŋũzũB}21ņ¸A„âPę ‚ ¨Øi6ąl‰ ĩMŲMŠ´Ķ}˙˙˙ŊČ8˙:Ļķ2˙˙ëküDXL& “ƒĻ‰–đ !E2N¨'ƒĒ ĻÂ0ƒLûû˙ß˙˙ų ¯§˙õ˙įÅ÷0˜@Â`‡aƒB#_˙¯÷˙˙ú¯˙˙×K˙FMԏ˙ūū˙˙÷˙˙˙īũūĩ:%˙˙¯¯˙Ú˙˙˙˙˙'˙¯__˙˙˙×ë˙˙ũüˆŖŋ¯kĻ˙_ũ˙>˙÷˙ú˙Ō˙˙ŋũŋ˙˙˙O˙îŋ˙ߚÉēŗ÷˙ë˙ūžũo˙ß˙ũ}˙Žŋ˙˙÷^ŋ˙ë˙ũ˙ÖūCfšũę?÷˙˙˙˙˙˙˙˙Č?˙ŠŅ~ގßõ˙õīũ¯_˙_đ˙]ZŽ—_˙˙ë˙˙û˙Wī{˙¸Îˆ›Ģ;ß÷ëū˙÷˙oë˙ÛõūīoūW2ˆ["%2,íoēĩũĩ´Ŗ˙˙W_öëõ¯o˙XŪŽœTSHb˙iGũ}wà Ĩúļą÷ˇŽŋ:*÷÷i˙~Ÿbâ›_mbģm7nŖķąwÚi¯“t×ūÕ÷ĩņüWņÆūvŸ [ņņÚĒÚŪŋ˙öšũ§­fÚũ=H¯ņÚ &™ ˙ÚĻCŋ˙÷¯ÚũŌŋáõø†š &ƒģNR{_ũ{!ŪĐkÚ 2û ƒÕڐãöEáĶåē_ˆŒ ÍŗPT ÂgÃ­Ļ˜Xa5í0ĢØ];Mx‹^×\DGĄa5aDA„ !Đa%†h0™Į;‚#ãīĖ–3Œķ:>m’ĻqYÕ/‰xˆˆˆˆøˆˆˆøÄ0ƒ ‚‚‚29‚ĻfΊS™Ŗ0d0ύÁ“ÆŲ ˆr3ÍqŅČ~v`]_įD„§„lhC …ĸāF†P˜EÄ& A˜ą‚‚ 2p‡Č0SB˙ĘāvW.‰BâA„pÉ\;%”™c–=ŖŌl#Ū%;A%”ƒlŽú4}|Ž_\ÜD#ؚ%zŽMÖī÷ßū“ęëīôđ/ÚĻŌļœ:Mũy‘(Ļl8D;ˆ`˜ Â#‚%‘†ö\f`„v`æƒ>Ė3cR§˜2“æˆâ""*Κū†ī˙ãūģû÷ûôŨ7¯ūŋö…„ü&´[9+3†&š!l4BÄ&`  ƒCÁ+#˜gÄŋõ˙ũ~ÃkúÕŋC˙×ũ˙ ÂgIFG‚xa„HĐäGh&g0˜Ię‹ĀĶ‹FÆĄ #gŅ­ĸã_ųu˙øcú˙˙˙˙ĩđÂWˇxp˘M´Đw¤œ0ƒîûIXd‡á—4á‘瓯–I‡Mūŋũa¯˙üÕ˙ņøÛK×÷zß^Ŋũw„O}&Ø!­l8dãģé{˙˙ũŋöÂ˙˙˙×ßëŋũ˙kûâŨ揨ũû˙Bŋúū×ũŌü6Ÿŋ˙˙ßĩø/L0¯˙ũ?č?J/˙ũ¯ø0_˙˙ņ_‡/_ī˙Õ|"cöĸ¯Jŋëņũ‡ú\=+÷ũ/Đá˙ī˙…û¯÷¯˙ũč/§ĩ˙˙m%öwËÖÃ˙Ö]^˙— gÂ˙ÜĪ˙ŅĶũë÷˙˙˙úŌđĶNŽîŋ˙đžÃŅĮĨė?ũ˙˙Ļ˙á˙˙ųŋ˙ũ/lĪ˙ßīK?“c(MG¯˙}ĐEđí˙áŋ˙¯¯ö˙­ą]§ëßúûk˙ _û´ēü&"Ķą˙ūę_‡Ōbŧ?ūˇ÷ũ†Į„ aĐA„La üä á°ŌˆiŨ§ivÅC4×m+ž× U_˙ę—á¸ûÃ_˙˙‡âĘVžūÂlqR7A0ƒbâ6Ŗ4AļL  ˆx`ŋ˙ö*ŋÚß­˙{÷˙~"""-ˆfŦ`šNBgÉ>A’pŋ RzČŨ9i”íëúũ—ëjĖü˙÷_ļg˙ûfˆē~Īņ{U(&Ž×ũ_÷Öà wÛ­ęÚ^ß|5ŧˇTēAņŦlC4ĐaĶ 6Õé7VËö•÷w°at˜}'ŪžĶ ō7a8ĒvqQ† &!„A0A°aXƒbĄ¨˙ÄD÷Đ™XOA„,&˜…#†ėr(á4Åu\hDDDDDDDAžāÁ FH˙^8ˆûKūÅi~@ëā˕%ˇĄ|GũO°‚|G–īėĨüÉPøpP ĻE,ŠÜ0ƒOáBđÂa8i߄´öîå˛7˙w-pDvž#ˆG d˙˙øMĩ ˙ūOˆō˙˙đšÃá×õûInüī;ōQã]˙ōH˙]zßáø aL9I ¤1HaH“‘G•!ÍiWū‹†,“Ŋ4LpÔ&ƒũS_īŋßŌø˙ŋõ˙ī˙øFß˙˙˙ßëk8øë덊ô“ß8ˆˆˆˆˆˆˆa0B!—`‚ ą …ŊÕ{IĩĢVÖßļū­Rŋŗ=ŗ5Ãâ""# §i&ˇéûŨE1KđÂMĢmĢa%oĻJÂåšQ˛ãaˆH4V@ 5Vi¤ÂaÅ0Ķ‘-ĨˇkÅ6^pÔčƒ'T‹AĸMŲN9üãÚx ĶIŪbPöƒƒI§šj1!â"Q† aÂa0‡â""#,Ü×ū—˙j_Ĩöŋ„‹+&Ãâ<+ÄkˆžBŅÜÔR"P(()- ™-ˆ#2 įD<ķü((PRš$Ehø|;‡wÔüV0PRČŽ4§EĩûîáÃÚ~~""ŊĀ Ĩqq‘ ČņÚ˙đáĶTüė Lū?×õ˙îöŒ÷˙˙øĩí;ģôwvš’ÆJÖK˙ņņž”]Ũú§˙‘U‘UøøĨ˙ÔëĨ¯ë§ūI˙ũô Ž f(LĐSŖ0FȐd0„äSęDĄŲF}‰Zũũ?)˙˙úŅ­ŖFCšĸ&ƒL"Į„XėD) 0R℠čFÆ —yįŧđôķCaHÂÍĮCÎ#Vk_ūMŠ˙2U_˙i+Ié'‰V%D#;A ƒzŖ]5´"ũ ÂčhĐėŽ!ąQđ˜Mčx  ʚșˆh2ˆÁ¤`ķ8 ĘR„CŽˆöCˆ”H^Ģé˙ũ—4ŪØfôÛ „&ŌŌļƒ'Ēt­'dxK!ÁäWūI7ƒA…ÅŖôkÅŖ[‹ Ŗe4\0‰¸`…ĻCÁAD8ė0La0L¸ÉÄ3û.Yq’?&iŒ“Œ2FmĖFĖķ:#6ɤ›­ Ë™|ĐAļN¤Üž4žNÚ44œ#[A:7"ؕE‡čģiƍĄhĐÎa DÜ4\0„8°ž & gˆalfÆ 0ƒ Ÿ ƒ00A‚§AA2äfg˛=å;0GčČc0Ī䁐cĘŗL—G‘§f?ūĢc×ô˙û¯_Oû¤—oÖáwW§Já:N—N•Ĩm44tŦ#]ŖÂM˛8¤8MȏA: šŨŖ;ךņ;¸Ņv~#´/M´kh‡ânІš„,&hX(A„ō6(D*ph„ ‚á y Î‚į‘#Œ†gA—e¸ģ3ņß}ūŧ_ØĮ˙˙éké^˙Ø˙īzëūÛUÕî“ĢlēiÚ ũĢa‚m+đĶrú“áŲ9ŌvlŽŨ;ƒ˛XKš ļGGģ#ÂYJônE¸8‘ Nė"ĮhģĒ/(ŧnö‹ļœEü”„Â-Ū…ÅĻ…ŋ^€öŦzŌøz_˙ū‚˙úãõēũZI˙ßú˙[¯KۚJé÷Vũ¯v›a:Wí5Ķl îļĢIÃ,ęØMīá„‚t™ž+I°áŲ1Ę$ŨHđ–CTÂ44ė)ŋ˙˙ũ¯øúoõ˙ß˙˙W˙Ōũ~­-˙įEØo ūqŋđ˙˙˙m †ëü'āŋ˙˙…ũũ‡ōęūŋėüÕ˙|Ņ4•˙û˙~ŋ˙oī}!Ō˙øûīU Ŋ_Ãß˙˙Ëwú_„háŋü#:ôg˙˙ū úû˙ø_û˙˙˙×_Ú˙m˙ũ%û¯˙Ōü xū[–]ŗD]=žO˙}¯˙ūÛ÷ū—‡Ŋũ'| ģŋß˙Eŋ˙Áŋũ ū˙˙˙ßũũÚ×zúŋ˙˙ū?˙Ũ­ũ˙¯}™÷zlĪsO˙˙Ûĩcŋ_ŋKŊ-˙˙ũûū˙Â5˙Áŋ˙˙˙Â-ũo˙ŋ˙„Xöę×õ˙ũŋđ_Û}n¨ Ĩé/ęöØI+žÃKû˙ûŗ÷_¯Wų§ëú˙^ēûkũÖ­ˇūŋ¯ū˙Ŋ˙˙ú ū˙éõ-°—ŋŋ˙ú_„Xūúąö“SĸˆPՈzσl ÛMŠģ/žÅ1]ރ_öØ4­˙ū˙†—éßí™í¯ŋ_š$ŋ˙6ŗu™ūÛfŸ_^ūũwo˙¯ë˙íÖŽ˙ú\VŨŽŋ˙Ŋ~‚~gę[ !í4ÅHŖŠA„ÄãĻ6‚ Ž)Ļ‚4  Â ŠN™ØM ŗ Ōö)}7ON $ézõė0ūé}ŌÚ_gûK__[S~aëĨ™˙û×ég¯ėŅz˙˙ūŽ#õ˙öŊa.ö×ČDX&ƒ'ƒXPƒAŠÎTMËŒjĒŌ|Z ‰Câᄁ6‚qąlCb›I4ĐvļąXAļcØļ•°ÁWaĢ]ëߡWŽė5ŋÖŌ×ôÕv×ŋ]^ĩėŅ?ûĨßÅ_ûíúčÆÕˆˆˆˆˆˆˆˆˆˆ0BĐe¤0˜LPĘÄ–ũ’„ęI 1H4͊0ƒ &8ˆm„p֘¤ ЍaPa8†šÃ#×kŨ*lT0A­Ût­„ŨÜU‡KĢ_ûŋÛ´ģī˙}/[3[é/Eš+?GaYh!' ’{ž)ÚUaĸi˛1ĐL ؈qW0ƒiŒ a0ƒb‚alxA„ ÚdLiZQa0ƒA§r ;ÚLC†G›I5_ēOØamŋ}Kp°ĢĄrS" 0RÜ‹4"ÉęÁ†'C8ękLœ'÷ PbS"Ž•=4än­Đbļ(1Ah0ƒĢ qÅhĨäšhA눋ˆˆˆj\‰""HÁ‚ [‚ ˆˆˆaBą  œ0™Yežkšo*-’tÕÜS$øb:×ņÄD\DDDDDDhDCÁ:& įDžŊhÔâ""7Ņįõ¯MĨ9õô´ĩ­/^ē_˙:&¯ŊJøk] ƒŧ{H%üg\”0§ÚQ …LTE‚xQÁKwŠÉŒŽ -í•Ŧė SÍmä-™aA3ĩddŽ"ŅŪ†L.I­6ŧՂ…*ė›$Ŧ’oũ¯ĮÜ;ēn×aB0@ §iėC<ÎŞž%Ļ|Ę×kiZīiíįēģîŽķ6¸P§@@PĄ0˜)’wqkíëQŨÜ3Ã[ûëǍ_û^ūũáŨĘrč÷G¸w˙øéúĩîôîĸĸīԂ#ĩĨ˙˙ø˙ŋū˙U˙˙˙˙˙ų]Fi›Í,ŒōĢ˙˙˙˙ęŋ+Ž)ą‚œ ƒAáO3˜ e Í"qIãB"0Ķ!‘É/QėÖŋ˙ü˜Ė‘”ĩ˙˙ũĻ–0Œ;„!„CŲĄ„\4C¸`Ą0Ø(TBđg….@ „DÆG B@™ąN‚—D`ˆaOÆ™3ŒņĪ)ŅĖŅäj×ũW ˙˙•Oí0ƒ†Hz>á’Ŋ$ÚMւ 8ÚqvxÚuF°Ņ¯‹°ŅpŖ@‘n˜PPĄႂ &yÁ—3@☠Á6ˆčŽˆčįf„ie$a™™0Y¸ęÍwęAé˙˙˙÷ú ŊéÁ—éŌÃ1ęá„á' “ Ëš ŧ' :O't›IđÂI™Đe¸´nńm P%CFĮꍐ…ŖCB"Ņ„-°\Á*aƒÁ yąt i‚G3ã!‘ Ér/žŒ Ī2æxRs ” .`ČdO›eEų ,‡/ōFŋēzö›û§úē~á vŨ=A´/A$îĐdō“˛7TØai7°'dpŌl@ÂÂ4|60‹Æŗ‹°Â.ßč5D9¸°‹€Â4nî0BãM ö[†o&b˜˛‹ œ ƒ?ÁBq+#ø!‘‚ČøA‚à æ38Ų"Ļɘ3TCČ7×˙˙A‚¨úûĶ~“ēZž?V“énéSŽĶKmoü'Kh:Møeōm÷põī'tƒ¤Ū.ēI–=ÃIē‘A°Ú;ĩÚ68°Ÿč¸ oÔ"„A„\0Ą9EÃZ č)˜A„ô `ĨÆvŌņ˙ø˙Ûõ˙¸üoÕŧząũ륧ë_K÷é×äí-ũŌēô°ËĒu'iC¤é_°M†\É:]&Ã.wIÚv _5l2WFŋé:M‡téļ:’z šîÚĻ3´kń]´!Ŗ[˙˙üŊ¯˙ū×P÷˙ C˙[ī‹ŌŌęÔ+×˙ô5¨ūÚ֖˙ØÕ­îûŊBĩúŋŪ¸N“ū–“ĶŦ0eĖŋNÉ Įļ`ĻšIŌyyH6,i7Â˙õũ˙í{_ôK×˙úŌ˙ãĩÚ˙ô;úÔtĩ˙_[¯Ķ_{UūŋŊ˙úzŌŌ^‡ÛK}ŨēI÷§JéŌŊĨá˙û˙ũØõÃŋ˙˙æØtŋž^ĩQ˙ũ‡ëu ŋũ^;˙øÚÕļõô?˙ÔVũ‹˙´ëī_QßmĢ˙^Ŗ˙˙˙˙ŋ~ß˙ˇĨ˙˙ZÅëũ7Nŋī0ü{õ_r3‡˙ōÁŪB÷ī˙ë˙˙uûũ˙˙ũžŌ÷ŽĮéũßŋ˙ūŸƒ˙ÜąØ6˙˙˙˙õ˙…˙đÃ˙˙Ģĩô^ĄĢ˙ŌķißKæĢŠ˙_ŋé~‹Ģú/Á~ÚiũöŋŌ˙˙ũ/˙ôwöŪ˙ė0ö—˙˙ˇ3ŋīô°‹˙í˙÷÷õøaë˙…˙´qßëá×˙˙˙üũX˙,ØÎ—_˙ŗ=ģß÷ût’˙ß˙˙˙ÛߎÛŦ ŋūÁ÷ū˙ÛKŨŋ˙Áūī×K˙ ˙˙˙˙˙ū߅o˙ę÷ß˙°ÖĪ˙uö—ßŪŲĸ$/Ũ&đŲÕlWˇī]ų:īž˙]/ũm˙Ģ–ī_bŋūĐ_ũ͎áí˙ũ˙ß˙ũé-áŋ˙ģIۄjŸąL%jëíĨīK|0ˇZŨY˙ģ˙ū×öÔÛÛ˙Û3ã˙ũķDūŪû˙Ât­÷ûí/ũ˙Đ_˙ęŋē˙˙Õéa˙úúa‡„A„A„ Ļ)ˆl0‚0ļA˛%† +jļŦVŨ¤×l5Ū—āÂ^ŪŪŧ5k_˙o0d×ĢØg¯ôzŊš"éõ˙Íí‚;ķÛUöhŊz˙ß˙¯ˇũŋØâ[û×ņ 0„Der 0™',1ZąIĶšØVL&à 44ávi°ÂH5MŠĶ´í?b´õöÕX`ŊūęÃ6ũ?õn˜a~˙öÕ~W„éũĩ˙ũ°ECKöũ~Ėõ˙4˙ŨwûūÍJ"""""$ēÁ"bˆbL̞Įą ŧ18č Ø¤Đi†°ƒˆlXA‚ ĒAą &qƒbŽŌ[aĨ› ëf—E÷X¨ki§ûļÅ:ß_ /zvĢk÷ö›i}¯kÃ_ęŧß˙]6~ ÄDDDDD\DDNˆ†ˆ†Jœå9OiöIŌ{#qmlPA„ƒA4„ aÅÄA°Â ė% ؃iˆr$a‚}4ØĢX†ļ›ÚVvŨˇKą]ûŸģëzîēÚWĄĄˆaahD0ƒEĄebe†(0ĸ"Ž\oaIBh4˜{ÖA´0ƒ‘G„A‚Đa‚ ‹6-† ƒ6‚Ä0ƒh Âa:â ĩŊ†•¤ÅuÄEÄDDD\NšFöœ&0@ÁC‹B!„,ŦL(LŖ•Ōa1L“‚˜{"Žb§Ė<0šwĩÜ7ĻF:Š0ƒb ÂMVǧœDDDGe L!ˆA§ë¤øˆˆŒÆé×]ŌåœŌIŠn&Iz^’$ŊU¨đĶÄ."ŌËeZynŒ¯°ā§ŒŽˆX†ĒE PLĒ3Ŋ25™ ¨2sģǍPL@ŧ;žß?*gcƒIXĻą ꌗ#"'ŠéķŋD•iŋ}Ü:aė28 ī;‚ĻցALŒ wTŒčÎË'ÆX‹rWˇņ}ęŸh6ä%tw¸MÜ kšå wøP Ĩb;ķž˙ũžîŪˇH4öîsaŨ]Ķü”ƒu`¸úū8õ}G§tƒ}ŨC¸pd$\˙ū˙‹økŌm÷w}Ŋ“=ųõæDeS#’ŸúīNqëãé_M{ ¯m˙ęĢ˙ęs_œz_ū“øø˙˙Ρ͑Â'?"ųœlΤáÄhøh5ĨÄ¨hÜĐĩĪBĐh\XEËMÅĸāƒą `ĨA2ãĨ/Ē” †?uČl‰ŖÉI„/˙^ŋ¯ŒüîkƓģ¤ßĩAÃA„4 6ČĮ†N)6ČíĩČŨ¤“,}ņsã§ģ…ģĄb„7 ‰¸a<Ø.lk}„ ņ&GGˆ)æ\e8§ĸã$ 4ĘPIȁ™>a”æPÉķgš˙""A+z˙úųôšn§äķ˙ūôõOWVĶT)l'e—@AŌnŨw—ĐË9yJÁ ÂAtČą}$h Ū7MzZ6ē…„ÁB‹vXE¸hH{3ĩD&`S„Î A ‚a<Ø ža?0eË.2ŸfåČŌ?gÂfE9#H)"ȁ åÍæŋ× éÕũŋßŨz}˙ęßIĮ}'Vú÷IÃ6Œ ‚H6—ÂiĒ 6;#‡ŖEäGpƒ˛;h ېmŠŖãĻ‚.ËEÜ#;B÷_Mū„8´gaBh‡q` Ą0ąaX*!ė< Ė lTBD dâų S†x2æˍHö˙íĨ˙Ūß÷ũnŋ˙~ëú_˙ÅUū“uÚôû°œ2ũ6á„v›VÃ.dæŦ%ƒ/îaS˛1é6“†K.Á?„ki?ȃí Ïž4nÚ75äXÂ,wĸîĶ‹F‡¨"NáĻ âč3Ÿŋņ˙ũ˙jŋŋîŋũøÛKõũ]tšŌõzÖ˙}w¯v/¤žŊ+é+h4–­ĩj“ūûø`ƒrú–'A—2ų‡ é._U´„îÉ=ĐNl4 .JMëØpxö›õ˙û×ū˙âŋū“ūŋ¯ú˙ûˎŪ=×˙˙ûØ÷MũĒ˙ˇ¯CUôũ~ž?ŊZOCîđƒI=6“ûļíúļ–ôs ÕãVŨŲ'. ™|Æø˙‚ũ¯˙×áû˙˙ߚē_˙ûkøIŌít­ũöŋīu÷‹ū?ņ˙Â_ũ˙īi×ū?ũãO˙מ—Ŋ^“}4Ēß˙„g˙_˙…˙˙˙˙÷˙_ũũ(Ģ÷_u˙øū•>Ŋz°ŋŌũŽ˙Į˙ëú]˙˙×˙ę˛}˙ĮėˇũĨûk˙˙čŅ˙÷īm/˙´ŋ˙ûūôĒë˙ũ`˙ŋ—§åÔÖjø¯Å~;˙Ō˙˙˙‡ūׯ[˙Įē˙^˙ÎŋøKũ/ũÂ_˙_ė4ŋ˙úßũ[˙ë˙ü/íūúú˙_¯ßáaßŋË×˙˙üø˙ŠÚF_ŪE/ēŋŋŌ˙×ėũkõ˙÷kņ_ũē_˙˙íËvÚ­z˙ā‰ü?é˙kø/˙… Ŋk˙˙˙îßø_×˙Y‰ũ˙ūũĢ˙˙ūõëūO}učã>ŋ˙ūÛûßīˇ˙č/đũûũŌü"ãōŨūoû˙˙˙ú†˙Á iø˙˙ĩôŊĩ˙Ĩ˙̝×Û_ŪĩüķūĖøĻ˙˙ÛŌĩn+§ëõëũŋũøīŌ˙ŋĐX}/˙˙˙ü7ū‹ā‹‹ãī˙ßøđC`Ö ėj›Vēv“kļ§§ŪŸŨ¯¯Ûûjũí¯ũžæ‹m÷_õ×˙ļÍíŊĢuūßénÚ˙ß˙˙ø{ü ŋ´Ŋ/_ĩëúôŲę'z '„A„AÅ6qal‹DpĶ ¤Ä‚NŸ vÅm­ÚkŪŨĨ .Ũ~éZ˙˙úŌ´žĶūĪôæ{Ú˙ˇúæ=ëũÉ×˙˙ŪõũIm˙ß×˙|Až!‚Âaâ"0ˆ)Ya2N ˆ˙[IĻÄ)u Ķâ Â Ļ˜†b äEPØm¤Å]ēuwÚkūßííģi7ö¯ VĪ_ûz¯ŪÃK_°ŋëßīE˙ũ}ģø¯{4T˙÷ë—´¨ˆƒ&U".ÉjS”öļFáAđČŨ{PÛ SA@¸ a†b!„"!„A„Ĩ 'JD‚%Ž XĒb­Š°ƒOîū մŊv_ūÚŽÚˇV–ß˙˙Ģko˙ųn-Ĩ˙Ȉˆˆˆˆˆ`„#N:b#›íĻIÔiĮ˜„î h[„ Œ  hX@ÂĮ $à * ›ąĻšm īt­u[ „à iģ~à ÚM§ëĻ—ũ˙ÄDDDDZ a0˜A„É@Dē &ƒ UÃLœ8åFVf€™c’pfp@ģ' (1 ĶM6 áĄØÂ ب¨„q!Ä:ˆh8 Aļ”CN-CD3éi$ëT#3&„÷ÁeĒ“€„C ĒS„ÉA(-ËĻIÕ:l$bĸ #ë_Ĩņ›jPĖ4†2ėá ›+Îāô–’ZüDDGĨÖŠ(tž•?JĘæGü č Ø29 /ÔZžņ ĢÎËRÄD2{Tž¨‹„|E]¨ŒŽU(S˛´ ķą !I`Ļą ëfA•Á’ļĐm#ąFĄK!KŖĩŦė-w 6ÃÁm#-ÎÍPSY–™•‘ ÎÖc"˙ßũ´ƒ@„]HÜvō…3 ™Åj;øīŋˇÚĩ¤*{‡{WFį`åRļR`Ļy` ŋūqãZ.L4‡uäOaÜ"XŪ×ũ?uüĢŽí?BĶîáWNÃŊÎôīå_Å´¯ņ~Ŋ'Ũ­ß¯˙YŲŅŲĻPŊ÷˙ûK•ũJCKúļēĒ×˙˙¤ãˆ‚‚ –GĐ@ÉqO™äGD}tˆdtūt“×_ŗ˛_5ú’ÄD—õûô?ÖEÛ´#D>ĩąÃ˜áæÁscŪ°@Ī‘ąžf 2ƒ4gãfKŒô`ČcU!™ .H24eōĨ×_Mŗą5é}}ņt&p¤6‚˛pžĩŅv… ĸà °ŒđBA„CŽCāj ˜ĀÂgˆ;5fá¤`Čš“—įLŪudųÕWŌ_é?ĊzūN×ũ¤ūeá“u{Mu ›ĄŌ=ųvnE†‹Į5°ÕFļĶŖXqfĐBL ÁBf6*a5đP„RäpCŸeƙ-§—"AãP2‚'Œ<Њ}2œ”Ō7ōœ‰Čīšų Ōô—¯¸ū—VīÄ%´Ŋõļēˇá„2æœ8`ƒî“a—2SMĢA’“´ÂIŨČėO #>,4AÚ5ëа‹ļB.5†´C†[°ˆYî!„(M0ƒ ô*!PCÎ ƒ „!5ž#cÍŗ8 ÉÅ54ķC3HÁ“ŗ †2|ؐȆ q .iš°—dÛŊzŪ¯ū“j֖Ģũoī¯öŊ7Mí$ém ÛŌÛ' a0 ØdņŊ$é?Û% ­'IäAøAčØâwaŒ"ųȎđm(}#[Fš¸"ė5˙DKP¨‡ XL! !˜(L&3恑ü)ö:<.\d34ŒĐ)áKr¸ ˙č}˙&˙ĄŌ´Ŋ-]īéņõ˙ZúūēÚmzwÕ÷KŨ÷dž“}°A°Ë­6z—2xŌv ēęÃ?N2õ¸dü‡°’tPMøp| $ghØõ´gr,9(ØĐ´lhŲĶT<(TÄ"câÂa ˇĸŨ‰˙–Ŗ˙M˙Ĩô˙Û˙×ũ÷ŋĮŪ†Ū‡×˙ũ~){Nˇz]ß]úvŌĩn¯]˙jNĶôˇö­ƒ0ŪĐA:N2c ę ØM´JŲŌ´ž‚5ßŪ'w=„hØA§ƒ˙Ĩ×ö˙Šŋ_˙öë~ĢŋĨãũ{ŋWŋnWĻĩū›˙[ßŌ}ūũGh}*÷×˙ŨwūŠĩvĢ]§WKöÜ2Īp—/Š6|餝ß˙ūž˙Ū–é˙…ū˙åéÖ]^]Uņ˙Hj×ū=Eõ˙xū/žô>¯ũ‡bÕ7˙õö?˙ˇŋtúkëŋŊ{u¯ē^á˙ũž˙ˇ˙tŊ~ģúūß˙˙ĶiVūŋ~Á×_5^^ŋ˙úí/˙í‡ū— ˙ī˙ūŽ?Žŋ˙÷ąÛ˙õ˙˙îũ˙,vÚņīúôˇū˙˙˙đŋĐ&ÃK×˙˙˙æQå‡˙–ŖÃÕâĨ†ûūđ˙ĮîũîžÚ˙ūũ˙]†ŸūũuÛûÛũ˙˙Đ_āß˙ũwi_øE÷P“¤û˙˙÷˙īūī]0÷[Ļúõz°˙×ũV‘zķ€Ų˙đüøk˙lÍ:OŋíēUWīŋĨūū˙ūģ˙øAi#CŌ˙×˙ë˙˙ũ ûøoũûŌ áū˙đŋūÃõ˙a¯oŨoסm+ۍztŊ{_÷ŌŌöß{ŠŋôūXtēû˙ß˙ī˙ūü>ŧÎė?úûā­˙…˙˙]”9ܡ(sŲĻÂ˙øaø_öúvˇ +Õ÷ļôŲëēŪī˙ûüéū˙؟wšĸw4Y#˙ũū˙ßo×˙ũ/˙ûēÛxo×´‘qßÂ.?îūøˆˆˆäbˇ˙ûøE˙ ŧ ؆b› D‰Ŗ†ÚLRļéÖéCOģ×ŋKĢIûJ׆ĄŽšú˙K˜NĻ{¯ŲŸˇš/ŨīÛũ{÷÷̎÷ūŊžž‚úûZnũP_˙ƒ~‚˙ÁÚËÉ8VLBdQĶ@°ØĻA t:>ÃIˆalˆ8†a4Ĩ ŋ žÅ7jÅ;˙˙ĩ餆Ũi6ŊŸÛ_îŋÛ?ũ‚;´ēÜÎķ§úíļfķ—ũąFzī_¯ũdé˙ÛŌ˙ũũ/ũËu/ˆˆˆˆ`„0„C !]•´„É8+Úd*h6*!*66˜Âû„ƒM6 Õ?^•ĨiE+ ,Š?íëŋ´´› ?ü4—û^Û°ęMŋīôüįÛ˙đÕnĖûÛ ŋ˙”'õ˙ėˇ͏ˆˆˆˆˆˆˆˆ`ĨŽ0A„ƒ$áMp ÂēPƒNF8†{‡$8­Š´šÅh6D 0¨6-6;J*Ō´­ŠNĩƒģVا]´—´ö“×_ũ;KI°—°ÂOļž¯˙zëûyž¤°ņÄDDDDDDDD0™Æ“ „ ÔPka5jĶ‚m„j(4ÅA„‚ ¤Ä&!„! mAĨ°ŌÂâAd"N!ÚV“šlmĻà avm*ū—˙Úw°ÃÄq™TNJ ˛`ABhQ pÂ2CyĐĸœ1 Ã#%§dc¨¤IĻČĮQQMMĻ,2+Ļ0ƒŒ a pÔ ÂlC ĻØMĩh=-,DDFZŠrUˆĶ"áÃA‚ & a†dā Ä' kū*Ķdžš ‹Š×˙⸈ˆŒÉËo@B,&ˆdāķ Mů×ĒņZ˙G`M*˙äØsũaĨĨúĩũ~ĐAŌøÂĄ|F5ØJ7ÚT cJœDŽaMi ƒ8ˆˆŒŽÎęu W[gvɤSåj!yū §Â‚…2YŠ ‡tũW2+e¸™™ ¯īģ‡ú’„Rđ ™Em™)™ķ2ЧUßŨũß ō-0õ … „Č–GÁ&JŸũ¯ũÄēčδqáz¨Rm û˙č%Qz ŌA dkq¯˙˙„Ē´‡QÅ îīũīŌ”Šëũ7´˙+Š-ɏūŊ.ŋŌK{ŋ“Œž1,嚺™Ģ!H‹ žŋūw‹HW˙÷ū Ā`Ą31˜&<Ø8 ÉÄ8)˜\fĻa‚Nfƒ4¤m“<Û!𛉠I˙ԙz•~d?ų_ãũPMÆ Ø´]‡ņaBa &nÂ-Ø(A„Ņ ƒ ’03 …Āä<悒$5ŒĐŧˊY‘¸-WIRUõ˙;'˙_[džîÉgf˛;h&à „āŽÛ6„aĮ5î-ę˜ĩ´krP8 "ā0‹ˆE¸a„ĐfÅ60‚`Y03hŋ‘Å(¤`ÔŖ0ĖĖ†Ô†d3č)ĶĘR_×ī3K˙§h5í>“ Õ÷ÚvN)6“ĢĶa“擆\ËĘXa4H•ˇ¤›„ú ´ƒh'I´˜~p m BãF† h…4Â!đ44B'!|ŠbS˛äH&\Ίf)›.H2 TÍLÁ’ īFQ›2U$2.\ÎŦëâFyGX—˙×ōmo­ãõ}}[v•m ZˇēŊjõN•íđÃ/ÕíôÚN“ 'ôŸl0ƒ &äXa„ĐaHĮi7Ŗcîôka˜vv,#Xj˜DŨĸá„!ĸRā4BœCA„& ˆK 4B†!‚ Đ" ¸Á0Rã8G"$c9eętEđĖãšr!‘<ÜB<Û:92§¯ũú u÷õŋ¯|}ŋo§^›ÕŌŋ˙ītˇ÷ 'Ū ƒ¤Ødņ†] =+ 69§AhŸ6Ié7Čđ4ž4p›‘c„odvÂ44gqhŧŦÖFĀĶ’ļml&„hÖĐģ´-ĖÄ00‹‚Ļˆxœ#b„CAń ?Ķ˙øKÖ߯Đë‡˙Ąú¯ņūˇÚęŌßX÷i/ģ}m¯NôŌûŌV¯ÛB“iŸ°ÉēK l' ąŠÃ.´é: Ų,͆LzOģTÚN‚Â5Ų,%+dąƒƒÂ… Ō7ØEåˇEۋF‡hÖÃ*ã˙˙×ūÕ–ũ‡ūßO˙ũ{ĨĐĮö‡ņũëú~´=¯ũtßŋÚ]õģnŽô֖߮ĐĨiXf›ím'i§Iļ›đfĄŋQģ[†Já—Bų¤ÃLĪ“ēO'm'˙˙Į˙ßūa˙°˙™]5˙™F˙˙ëá׎īĮ˙ü^•Ž÷éU¯õkīļ—ú˙¯M]˙û˙˙¤•°ƒûĶ~¸Đtž÷˙úīũŅŪ—øVûũ˙˙˙×ūmvÁÍ[J]_Zų7_ô>Ģ­˙^‡â‡úëī˙ū‡Ü0šûĄ˙û|ŋŋkßë˙}ØíĨ˙ūųcŋûī˙ˇ‡˙ ˙Ú;Ō˙˙˙õ_oë÷×áž‹ åé÷˙î]^Jû÷āQ˙˙ū=¯˙žģŌŪŌC˙×éŋCöŋūßŋĨú ˙Ãßßß˙˙īûŋ†ö×ûœë˙…˙˙×ë¨C˙ūļžŋ6ϝē/Hū˛Õßũęī˙˙oŋû˙ŋ˙īũ1ĩū–˙áëö*+ŋžŋ˙˙˙úV—˙ø"Į˙˙õOũīáh/˙˙ú˙_ßZÕ7ËĢ˙ū˙°,Û]ë˙Û÷Z¯Û4ÖŨ˙īīû˙ūûžƒvÅ7Ģûŋî‚˙˙õēžī˙ü"Įˆ/˙˙ø/˙˙ߎ—˙˙õė?ĸmëÚîŋßŨ?ũĨåūŌķaūؚ¯¯Í[~“ũš.˙÷Šbž÷ûK˙uūĩ˙˙Ĩđ‚ҝ˙ß˙„[˙˙˙K˙˙Ũ}ŋúm¤œ4 nÛUmiíUƒ][IŋīŊvÂģK~à kn“÷ļãĩčÚvĖúŗ?˙ėŅ/ų:KÛūŋ_ŋ˙}ũ-/˙ī÷Đ_Ŋ˙ûi˙ũĨā˙cA†!‡Â„0°aĐL abĸ¤ØA ĐmĨ°Á>*ģöÂ)Å]vŦ:u†Ŧ0–Ĩ ]´ĩiūÂëöŋŲžŪyߡ_šĸíŗEũūĩ¯íũŲĸô­ĩ˙˙˙K:ņ˙˙ûá˙ˆ0BÁˆ†)ŽqūL”( ÅÂq\C6ž‚ !6Ŧ$l4i0ĐlBcOĩbŠúö /Ŋ†ŊÛKOzwZę×lÍZũēK×˙ūؚ×û3ôŋVĖũ/î3÷´Ų§˙ē]# ßė›ĸ"""""" ˆ0ƒ†LĀTķS—ÖƒD`ĒĻ!1(t $!Å5ĐA malRpäHlVpËņL5ļŌŗjŌ]Xö+ö•ÚVēkߨVŨĶiC=˙öž˙M'kÚ˙īúCįOöĖŅn 'qĸÁCMņö—h ÂlAĩŸLCبÃipŌh ØĻ‚ äMCIkâĻ ĻÅ1PË­cbŦ ×â´Ŧ'wúĶ $Ŋũ¤éë˙ØRÜR⸈ˆˆˆˆˆˆ0„C-XM0ƒ0ƒ$āœ0˜AˆUƒI°˜K´Å'¤n™éœXA´Ķ0iĻ4A„ 5"Žĸ ÚÁ x¨iąÛiCAĸ =ÚĻŦbīQ"#.E…šƒ ĻD7ĘČa˜D@ØAĻNΉ¨„ČŨw´“A šp Š†a8a ƒA´#¯ÄDDDDDDDDDDeíâ"B!“2psöVX…,pD~S‚#á…I/čDD\DDDDDF—˙=Rū’zUęžŋJĒ7å,¯„ī­-„ČŨDVĸD0ĨzĄ‚Xė]žf@ķŧ]2ĸ)"2 ėĒĐúÚģ¨Rž PR ‚•ŌGīģ‡Ē*×ņa0˜B!„!„Âh0„C%„FØA„ČĮá„É:Ս”â‚lTC EcKEė."""""‚`ƒ,@L'“dŗôsÄDDC×˙ÕēNŧ ×ęŌž’QOKÆ6!vF[ƒŽéÁAJæą‘_ԍŗS+Q‘Ô8}B…;)ʄ •$Vc°\īL•ĸž÷ãTÁAA2,a2ČHŠĮũŨÃĸNŨ=u?…)\0åuŖ ōĄ™ß÷ø#C3o‡wtŪÕcRŸ;SĖ×˙ú ũīOžWԝ7O+M˙ŌÛßÛßéå˜ī‡Á‚–čüН˙ü?ũoôáŊü0ĢęvS‘˙úũĮéo×ō¸Ē_U_˙˙ũëņĮ•ĮĀĖ fâ:#æķzåȐD !9&Cdžs3gFt”„K˙ųŌúõÔqû„â8ŅâE¸dq Š ĸ‚‚ i‘đD_yq” Î0͌¨ Č3$Dņ‹ËŧŠuūŋG˛)˙ü0ša#[…ČĮ ƒf 0‘ēÁÚ64"EÛFŠÂ.ÃDqa &nĶ0˜A‚§‘Ä6,CĖÄŠFķ ë…Hú˙ÕWuS˛Oîô—ĐeĖ nˇkt› šĻŲ.%”›H=$ŨZ ¸ˆAҞ‹Æ§õ'ačģ "á„\|  °"(gƒŲc•eŽTKŒō7œĖ#¤lÎå˜27›2æ&ÔĪ$<͐JKšY1ˆã<ΧĢëûęßúÖũ-^•ļĄiöÃ.¤ØeĖŋødÜąúZMĨ„kž ô›A=E„ėQĄĄhqÅĄhX&a4D˛0Ä3„lPL&C0P† „Bč!x3ä0L Đa<†)„G3hŸ3AMc3Œ@ÍSĸDaŸd‚7@_0e™H‡.s:Ų6(?¯o_û¤—Ū—ģ÷֗úWCžÚN•¤ėœ-˙Ōuuų;hÖŲ7I8a˜RPÁ„ &%@žh5‡‹ŊŖeQ˛…Ŗ]B/‰ŨĄŅ­ühC ĸĮaė&h3„ˆą „BĶ^!œ ™8Ļl`ĸ ƒ¨Sff)vn0y dã†PvīaU¯ēũ~˙¯cíûÚö8÷Đũmõi]}:[B“ŋPƒû0›iŠ|ÛÉcĻåõ'“˛8´“l•Ōm„Û%Äō“xa4HöĐAĐA¸´]Â/ƒF†‹¸Eãŧū}đš5Ķ‹¸hĐÕâ0ƒČb˜ÁNkĒCo_ËÕ¯­ũë×˙Đû‡V‡˙˙­ú_ēŋo˙ôÖíÖõ´é{Ĩél Û2{´;m6Õ:WīK{ødō“i;ėŒt“Ķ3ęéÖO¤áϘHöŌ~J Ō} Į´ÂahÍpÁ2¨ū_ëĨ˙ũ˙`˙ū^¸p×Úũ×ũÕŋũ׹nŌŨŋũũZũŨ/ī/Ûé]tŽ/ŋa­Šé};îũ+øeĖ ũ¤áęg3“ĮģŌM¤ã{œ~Ō˙zũúõū˙˙Øl?˜îļ˙˙ũ¯ŋ˙K¯Kīú×_ū˙úëøëŊ4“}k˙j˙oŽúûūˇo­>ūž˙JŌĐŋûĩũ˙Ã˙á†Ãü/õ˙˙ߏ°wūõû˙˙˙ē˙Põo˙öúk†‡ę?ž˙Į˙đÛē~ĮŪ;˙ü{øK˙¯ū˙ü7˙ūā˙…÷_˙×ü.ÃtŌũ{īūˇ_K˙í‡ūßō÷5‡$˙ņūĢ}øzĢ\?û˙~í'áū*ģKũĩ}ë˙ü?˙ø6ûFÚ]˙^~q˙ßū—÷˙ß˙ė?˙˙ü,8_÷˙č°˙û ô‡aū‹˙ũ õ¯ûfœwßõŋ{ũ~ûŊՄ˙¯īŋøFŽ ļ—^é~Ũę˙˙ūūŋöŅېPßú×x^ŋ˙aÚ8ü+ũƒ˙÷ũ‡Ũ­7ūŌj÷Ģmz0Ÿ×û4÷7īëûúé_ú^6?ŋ¯_ęŸ˙˙đß˙˙ũáđßûũ`‹Ú÷¯Xŧ+īē_Ú8íA[īč:oØ0JŸĩŨ/Ũm-žūYšÂdŨ&Ī˙õûĶ˙~¯ŊĨû˙÷ßŋ˙á÷¯˙âĸX˙īAlS˙øm´´‚-á˙Ã}¯úZA<7ëbPéâ ãØh6Ō‘-¤šĻÚWÛi?°Á{KŌŊ†ē~֗utßūļH÷¯ø­õĨ˙ö˙˙]o},?˙õ„žŋ÷‡ŠcAa˙Áö+öö0‚Á×M4ÖövE„ėPL aÅE2(l ĸ@Ø ƒ´ģVԊ°ƒĩîļÕĩ´˙˙éũ¯ũ{žÍë˙æ´û˙ũŸēuöÍļũū¨ÚÍ?=ŋ˙Kˇûo ŋKwˆˆĐ‰ĸ a0A„B"L&ƒęN)âbi‰ĮĐ>$l0I°‚b nĐpČũ¯ZzŪ×wû *íëö­Ú]io^cí~ĖÕĨ§Ö•îНæĶģÖmŲžOüõũĒŦĮĨĮ'AÁ‚0˜LÂHĢ! A!F:0ƒ6%c†“Na6‚ &z{ÂĻÅvÚvÚkvcē˛ûiXUĶbŽžÖö %ė0¯_ß°ÂWßëk]÷_Úūēô˙å¸ĢPâ"#ˆˆˆˆÂi„Ä.ģîúA„H4 ÂlXM‹0ƒbĸ˜Ø¨„amPG؇a(Â ØØaX†ž‚xĻAāƒM4í'­öcö*×ŋ^¯ŊÍJ̤"""#ˆŽ"Ë(E’€B'Ęë+MB (LĄÁS“ ĶÕIBbƒJ› ˆQ'uaĻ:A ÂâŠã†b!‚ ĢH äL_ˆm¤ ‚RõB""""""2äĻ0@Á†A—gĄ6d  Ј´ôÉŠ{ 1KiÚuČßÕjŋą`‰|[h0Ą+‚ßK_="3;ŌIŠ’Ö“¤Ok’K^žÖM•HŦŸT•FkßņjĢŌĩa8a+JĶ TŠ:ˆˆaD(† 2oB2G|ĄL„ˆ-ĪQãeĘëCAíÎԘPS˛dUڜEãė–GsŠ–v h}îx™Ęv ¤ÂŸĘÆ H0… „vœgdŒŽZÎĖÕzéCJ"\F ēw˙ūj”Š‚áL¯Î֏ãĩCč }ü9¨ĶmǨņaŊŠŽ;žŋĄWtŸõ÷wūŌ O›Ē4U7–åÖi÷Ž“ĩĩ}?ūŌ‹ˇô>õ×+KôąÅ{_ãī´¯ōšãĒ"ˆ.ēįjHĨĨŌoũ˙ŧqap@ĖÄ8GÁ&h2“Æâ%ÆĒH"ts%ķ‘Ö:"× ¯”ĩ×(wõ˙˙ãŅ­„]ļė!h‡sC0P¨Î-ÃH[g0L`‚eČ0FÆPy՞šyƒ$9˛38^P‰!õHH—Ģú˙˙DYdY}&Ōl8;"ģŌŖ6MĒ68´-aĒxP…ĸ„[†&‹@h„y˜€™q ĖĮfy†fEÆxĘĻtČh­uęũ/ũ}]T­ũ.›öpËū“a“zÚMƒ/Ë´“l–C%t›bF9‘ÛGŋȃžáŅąŖ[‰Įj†m ãšCL Á0A„ Bã6G \2âķ™…?"—3SČã!ŒÖ“ČHK™æyļš8A:ō2:ŋ!¯ôõ×úˇÕ?ēô;Ķo´Ũ:M˛p˜L'VđႠ˛č_5÷IØA´{l„}7#ŊPt0‹į¸Ú}a„""Ќ°‹a¸a3c‘Ų xAž$BÄ'¸)PZ ķA į„z?2@Ëģ("ˆÃŌ\ÁÍH2 C4͙FgœÎŦŠ­zBŋ˙é&ŋĨ~í×Cú˙ģîļ–•´ęėÔĢ´á›íƒ/ÉĻØ&K˜i ÂAŲ‚8@ÍŨ2Į„h  A°āéĐFwލZV…ĸķúhŲÂ.ÃģB(BÂ-ńBŲ1à ¤pCĸ!š!u †˜&˜((  ęÃLЌŲö\”§eČŅžfõ˙ö×ĮŋĮū­û˙]ũĶkú[ˇõ¡kô–Ų;A—pÁ]¤&ŌmđÉëIˇ œ-ŲŊŲ´žë×Iôƒ ›Ã äAÚA–?Aqq4\XFvĄM#c‹T-Ú "ØP…ĸâ…<Øŋ˙ø1øK_˙ū×ū‡q˙ü]}¤õîßOCOôâļúŋ×ģ´;°ŸØO]^“Ĩõjũ;ˇ ŋV'[M\Éå' š{´ÂJŲ+aŲĩ–đĐûäX /ũūÃôX?čēŋ˙ø˙˙Ķ }¯ëûūīīIoĻ˙ũž˙ׯū¯×˙˙WĢĐ[ļ¸žÜ&ĨāĶĨ´•ŋí>ͤíaÃ/“‡dúiÂ2|ú˙×á°_˙˙˙×_˙æÔ9j8˙5OØ?ūŊũ/×kôŋ÷˙÷@Â_ūŋÚž—_é>8oZŪßũ%÷Ú~ÅoßwûëŌ˙˙ļc˙˙˙˙đ_˙đÃü/¯đ˙˙o˙ßũņ˙˙ąī˙ũ¯ô¯Ŋ/˙īÛēūž?Cũz˙Uû÷˙K˙ƒ„ŋû˙˙ú3˙˙ļũÁü7õ˙§_ö’ūĢ˙û¯˙ŖqCũ~ąZ͇ũ}/˙˙më|}[˙˙Ú÷w˙˙Đ^˙ũēûzûú˙ü ē˙üÕ˙˙˙˙yĮĒ˙ī÷…ũ˙×˙č__ü/˙ü˙_Ūŋ¯.ĒRę˙øøĒ¯˙žģ˙tŋ4õü˙ž—˙ūīč/ß÷ûûí'§ũŌßzĪ˙˙˙úŋ˙Âũ÷ûú˙ŋø^¯ëūč.ģ˙Å[=:Oū{I~÷ū×ītŋū˙ūÍßĨßuī˙×÷˙˙_Û)ôh×ū¯ŋūūX˙í-˙í-pŒ?ˇKŋP¸^ŋī ´­íß~à 6–ė0—¯uë¯˙ûj_ėĪŋūĖ˙ŗÉÍß×íS˙Ĩ¯ ũ˙žī˙ī_ũ.ũ÷ö˙bģ˙ũđ‚˙˙m ‹~cß˙˙†(0Ԉ†qi1 6*ŌNc_Û_īR:˙ŋa¯ļŌ˙mSûUö×ũí.ãũ_é˙ík¯˙oü%˙uÖßđŋũŌũ/د˙b^_˙˙-ð˜„ČÜŅM‘¸ĻIĐA´ ƒ ƒ0ƒ0à   Äa4ä áĻÅZQZØAŲŽØ¯°_ē]õŋĶ_×ęôũļŋųæ•˙˙˙û¯ŖõšzQÚëíš-ŋ×A%éú_ÛÄDDC(ā˜L!`„0ƒFR r‡ ˆSŋšCäĄ*i ØĐm1A¨0‚ˆļ‚ ذ•&›i*īÚZz÷ukjė5Uī˙˙žīÕŋt¯ÃÖÚéũ¯iög˙čÉΝë_˙ún""""""""""""!˜h*aE2p™!ɏaN9߲P)Đh6( ĐaMH aĐA„AČ&ĸ„›AD9°Âļƒ eëOO[í´íVĐ;OētģĩÕ].Ô$˙ũļ“L0—˙§˙ë˙˙q—D^˜…4~/š'RœPbØ…žƒb,&0ƒÂ"xƒ6,œ Â6, à $ÃH âĐiČ"wi'ĄU ]ÄˆĒ~îīR:íHëŋŌūÛâ""#ˆØ0ƒA‚ eęP#P…’UvˆÎx<“(rĄFá *…@": ›„­Š BÕ4ė à‚v"A˛1Ķ´íBA„ƒõˆÂa˜A˛!¤šh4īĶ?ÄDDDDDDDDDDDDDDDDDD[ÂĐė“”&˜A…A„Ęŧ¨-Áų‡(uß% dœ%O¨ ˜L!pūy1؍ˆˆˆˆˆˆˆˆ¸8a0…„ˆ¤žžŠįÄDFYŧkézA×é.Žŋ^ÉąrŌŌIuáPÂ^vP^—ö*Ō­(\i…ÚCÄ2Ú0*Šâ=…&‚"3æ[š˛ÎÆge(FW ‹ˆ “&@™ÚßßÂGDžĻxS<)3ąˇMÜ8Dæ-7MĶĶ™ĖŅ—2ZČ&Ec%<ėbûá}Ô>îvŗ! ė Í‚™‘ŪĻefLD*2I÷_é˙ßŨԍo ü§ŊB‚‚‚erįŋŌqĮkoö•ÃîŨ˙\ėŖZ¯ã†Ŋ÷ũũÜ8páŨ?8˙Ō˙§Úú˙ŨĢå?ø‘oõß˙ÚzO¯Ĩ˙G˛•įe×˙˙ũĩęΈäjzįKũUôķ+˙˙˙ĮîN@„4BdŽ) S380@ËŧÁ)2‰sLĶ6ʡšd;4G4•u×\ŒĘ? ~wË˙úÜhŲN,"ė;Ņp.!Ō`Ą÷8@ ˜C3†:LŽˆlžpŒ.\ˆfFÉslčgy¯ëúë˙˙Ų,¤õ't›“3䟄hčZ6UčXĄ˜Fˇ!t™Á &ˆ{„ ­0A›¤žjDHe†{7ŸÉ ęō_Í„ōÍĨ×˙ˇúNĶia–tôŪˇ„Ōpá–xpÉã ;„vGmÃTßaÛ ¤l|Z.ØB0TCëDG#‚2€¤@ÉŲƒË‘ f‘†K3qčĐ”ķqĒR#&ÂË×úë˙˙˙éz[Oú_ļ­Ŋ{Ķû ĻÆY{Ŋ$ėŒxwJŌpoö°‚z ü‰x ¸´l†š a‹í,#ҝMpšІl ÂĻnŅo¸ !-á‚ĻN)˜ ‚‚h‡†0TC36`†ŋ˙Ö˙˙˙˙˙˙Ĩ˙˙¯Ģöôī˙Ĩm4Ë´Ũ-'Æ] ?ē°á–0&tØd‡¤ÛŊKįÛ%“Ą|ŌmŌ“ÉŪNÚ=ĐN9Ōl#F4l AŌ ö‚xÚĻLq¤}éĄatĐŧô~ŋ˙˙ø˙˙˙ūúõļ”_č˙õMĐãjž˙īé{ũVˇ0ŋëuÚvĢö]„“ũá:ļēNv›[H8dáWéXdņËæ“a’ĶL áŌvHzNG 'ĐäXz˙˙˙Û˙÷_]~Ō—_Įôŋ˙_oUúãU˙ūīũ'ÅWëë˙uOßö×K[íÛ¯čVŌt›§ßáˇRvŊļ‡Ōm ôé8a7˙˙˙Ūŋ˙˙ũ˙˙ÕęZO͸û˙~˙ôõúü}˙ũņmëč{ßĮũ˙×ûī /ö ˙ūŠãz¸ž>ë֗}=oú˙ū×Ü"Įīú˙˙Ú_á+_˙˙ŨR˙æ×˙ĖOū˙õß˙×Ö×ũ¯Úûô?Đ×īūģė×ĢōljduĻ˙ŋ˙د˛ŸAî˙˙ģ˙á=/ũ~į÷˙á}˙˙×ũbŠ|Õ˙Ņ{ˆĢüū\3É9Ũ}?úNŪ—pøm{˙ú}ß˙ūļĄ/_˙ũ}ëũ-ūžŋū•˙˙á˙˙˙û˙ū˙ÂÃ˙U×~ņ^¯˙.žžģaŽ˙yĀŋū˙Ûũgú˙ũŋÖ×ü%Æß÷˙íú]ŪŖë˙ū˙ūŒ;˙˙ü(oü/‚ūô ˙˙úŋŊ0ö¯ëëöõŋ÷Ģ_ÛU÷õ˙ŋøĻÍõĩ˙ŋ˙Åkõ~—ī˙ūŋîõĨ÷õíčŅūˇú3˙í˙÷˙īhīKÛÛ˙ ûĶAŽÚm›KÚZk{ ŋû˙öŪ×õŽĖ˙Û3˙˙ß˙đ—˙ß_˙÷Å˙øK ˙ ŋ Ö˙ß˙ŋīđoo˙ąū%ē­BAąq„A°ÂQA<4 %͞úŽ›iĢ {ö[_N˜i W˙ií~ėĪ×˙üĶ˙˙üßßŲĸŌßũvôžĩĐ_ūŋīąQ^øm÷č/ۈˆdœ&ŧ1A‘¸PÕAŠdcÂq„A„ ń ä%IŠ‘wŨŗ›˙ũ7_°Õŋ_ī†ē˙íĨļ­?ļfŋö×ķ‰˙ŌūŊ}ŗDžŲ§ũäéw÷ŨôŸÛˆˆˆ†UQdRaaˆ†IĶ#uė*iÂa6F:ĻŖ  ƒA„"íĨĻąW}ëol0•Ĩwûü0—^à ¯}Ĩë¯˙Ūŋëkũ¤ŪõūÚõŽq>}=}^ŋÜf›#0Á°špÂaOUĢ_h:Ø „A†ƒ '"Y;b­ ŦˆC´ÛAlo§qKröĮØ@áׯjGM§kĨĶ"ĶØapŽŋ %ŊißÚKûޟ°ôøˆˆˆˆˆˆ‹"Đ0„‡Ë{LĶ$ávĶ 6‰qm&ią@ĩXA„AmA´v  ÂlFÅąV“Â)†›iíScē{í&Á{R:ĶoûŪ–ˆˆˆˆˆˆˆ‰> °„D0„BЈ0„XB!„vjƒ.bĨŽÎ?Ų8LŠ:dEE0™'I†˜œxb“0ƒA´oA à DpŒFh8¸†0ƒüDDDDDDDDDDDDFXāĨ¸ a˜B Áaˆ†iŲXĨ BaS$é<2(öI׍kĮÂú^;HˇŦūÅ/āĢāĖŨ_âÂøĒĐ4#+ĢPRŨ(R(GzFA]ˍȴ(P[ę9O)nC#ŲŦvĻÎÖ2K™(_õiÕĖ–" & u3$ŗ;*Î͝Nô/ēÛøS˛ŠTÎU@Á3°ĖĨ2•ëqwpáŅĄXwOpžĒցIˇæ—üw˙Ą÷Ãnéá˙â?­?UĐ>áŪÃ¨ķ´ˆėë˙ü|}]ũũ¯˙ë˙ũk+Đķ™Ģ:-uĖ„ŧ¯k˙˙˙a‚0LšŸ"ĒCŖ0Î31Tĸ$› yË:­U?ČĖ…ß˙õģqĒ˜EÇãC  ˆw‚ &šāƒ@ĖÄ>G}˜"Rž3Œ3Æt"b45ÍÆŦč%ũW;üí˙_ũi7'Œ#[Â44zL8ô›ô]´0ŽíÜZ nđ…ŖD*a0ƒ „(L Ņ A„ &Jœdņ‚$ ÎRFF1e)këë_åKķ¸˙]:Xdá$ë†Y͆Iá÷ ŗŌpéŌy;č&8;"ŧ ƒņq*îŅxZ5´âŅĮa F† &ī6!„Aå4É“Œ) jH1 ‘›jHōäu#XCLd‚SŠųDC˙_ú­~ô?[ĨÂ'~ļ]ĨŌá83Nß°ƒ~“ëA‚m&ÚI°ÉĀRņ„ƒ˛8¤č&ãFĪí:69+xEØhÖÂ.(‡ãCˇráø(L& h…ŒC0 ˜A Ņ 0먏 Á*DtÍį8Ėãgãņŗ$˜gĖ ˛æJŗlę!9“æåĪg_)Ōū‡ÕÔ~ūĮÕĒėwëúŌ~ļôėœ$Ą§ÛaŨl2|öŨ“¤4ÂĻéŊ&ÂA´é7:ŖcŅ|â҇hiŦ´na”‘ą„lĻxëŅ­ŖCN4GģDČč0˜L"Ü0TĶ Ä3 Ė 0Pƒ ĸ ƒD¨‹Ķ™„Îr æ kūŊũcûŪ‡ûũ_ũ}ß­n‡_×ĢW]¯Ũ§ézoIēĩpË:uÃ.—\Ķm†JØdí ÚJ÷dá$ÃäÚAÂ40Âa ƒqA­ A7Fv{pڍ”lhk‹†‹wĄ!ÜZ,pŪž>*“ĸc”į/a¯ãßũ˙˙˙×Įí˙ãWļŖßéî¯_ûûũ˛ņm´ô/ZW_ūãOĨÕúOĩØdœˇT ŋ†OŠ;$ô'—ĐáÃ%•t­ŪNč'IđÉÆũ/áčD}†ëûß˙˙¯úŪŋĩû?ŋŪĸûŌžŌõO/ę˙n›_[ß[Ō×ßßKh^ˇūéĨo}žĢIü2qeŅ7Ũ? Ų>†\Ëæ•ßđ´ ¯ė?õaūŋú[Ŋ÷˙-'ĄūŒuė?íkŌ˙Ž~ßû˙¯_ö— -Šö—×ũ?¸ū?ûÖŊēûé;ˇ[īßÂ4p‹ŋáŋđP˙˙ũëũ˙aoaĸĶøˇĸŌû_ŽĄđ˙Ú˙˙×z‡Ģéhv×ņ}ĨũĄ˙ũ¯âūŧŽ‚iŽ•ē¯ũ/A;{øđßī˙˙×˙˙…­ŋØé˙˙5aėø˙˙ūŗTÜBåčāÖ´‘pˇ˙úúëõüFŪ•˙ņoŋKŌūü?Ū–˙˙˙˙˙ü#GÃ˙˙˙˙Ģ{á˙ŋu >ŋĻ 5ųuu˙™]Xī5_Ņa´č‰×ĩ_Éל_úī˙_īëū˙ū—ā˙†˙nŋ˙˙pŪ˙˙ūŊv˙‡Ûmuû¯ëpŦ:˙ũoũƒ˙åˇvëūŊŗ?†īû4Zį?÷_ß˙ūëoôŋw÷˙W˙˙ûp˙čŅ˙˙ûp~ųcüB3îŋ¯īP‹˙˙ũī˙˙­ wÜ0•°Â_÷ļ˙ūûũĩ˙ŋŽĖũu˙ŗOßøĢ˙ŪŋÛV˙Â_˙ũíoēT߆Đ_^Ú˙ŪX˙˙˙ Ũ˙˙ @ã8ļ*DÁI§iHØ¤Û;I=]'ONĶî˙uí+˙ŧ’ũūs˙{3ôļęöūÍŊiu˙û˙Ų:îũÂ[ú˙[Ĩ†˙úû¯Üg˙mØ!S É¸JÉB 4Ō &Å8A°‚8 Âà 1a› 4ĶMаԨīđƒ^ö $žŋĶi]zēWíŠĩšŸVūŋ˙V“ëjc÷éŊ†g—_՚{īŲĸë˙ī˙ūÛŪŋ÷lˆQDLđÁ0„2ė&š"_ B‘¸Za‰OM4Âh4Ø @ØLŠā Œ  ´˜¤ĶaŌ°Čõģģi]:ˇ ēģû¯ũģĩn›öWö•ˇØK¯íUļ×\Į˙ößfũ™äũl?Ī_ŲžŲ q`„hŸ•i“€ĻŌ 8 ƒŠé¨a ƒa„ƒ $Á„äLĨ"CI0ØKl Ķ[/­¤ëa;ÖĖm¤­Ģ­Š; u˙"]nŊÕ{M†•ŋļŋŊúwíė4Y"""""'LE„,!pÂ*,xbÄãÚ (§ŠAą@Æh60ƒˆLSa…ÆÅچ”FĶ60š 6)Ä6Õ4âļĶa˜IņW§z˙ÜH0ÂQé0„0…—a°„ ‚ ”aB ÂgĖøg)E2pļĄë $äc¨ šlC ą†@â!„L4‚! Â؆lPŒDDDDDDDDDDDDD׎" ÂÁa˛ėãdā&™DČĮ3Ї†W¯øj4"""""""""" āÎ$ â:ĒúJSe$—KCĢQ•ëes% 3ĩˆ„}ABepŒČąC„gáB•†GË♑<î¯ĶAįŽ„ZžŒƒ"xÁI˛†VâZemuD80Oņ"IXĻąÆđĻŦ(L+3%fEŋõ´é‡ ŽpÚIŌz¨SĩF"ˆ›réjīĩ´ ¸x,>čöíVĮ˙˙íú˙¨ģčđe~ķ %ū¸û÷ĩmuú‹ŨuSŗåīģ˙Ž.ģŨ}r!/ŽŋĒßhī˙ÁĨ֙Čₘg…'&2xÃRF#ÄAģ""tĢ˙˙˙˙ū ‹ Fļ„[Ė ØÂ`ĄQ †v  ‚ †lˌ @ƒRJŲ9"'ÍÄc$D3'2ž˙Ę–wņÚ×˙˙Ų!ōwcI´#Cˆ´ƒqŖcŧ Q­Ąam fļq…˛Ü2â"Ü0P˜@  ™ŠS‘›.2@\‹æĖķ!™ÔūOåëVũW_ÉF§?œwhiŲ8IZMīé8dāĐ]˛OŨ&Ã&:IÃ' Û¤Ú ÕØh0A´0‹ļš5ŅŦ4{a0…„\Tč!°p˜A„C däh)˜ČÂ4Œ /’č_ų ‘4sRDHĖķlˆ#4o5ĩĘOũ4—ŌËs'öÚí'õčtĻžĄúnŦ3Pš­'O“´×†Iéaé:NŽm‘ÃAph1)ħhØÂ.ę Ļ‹€Ķ0‰Ō0ƒŗaƒbî–3ƒ60L h…ĀÁABa30Aĸy6)s0D€¤`ˆ3S.g˜\š‘P3<‰Œ”fˈ9Ī.jTD=%_t˙U_˙ũqQ[÷Ũ[ūūŋI+h4“¤û­¤ęíKéžÂ é6‚wIŌl#CIēl#Cé^4ltÉkü"ížģFĒ”'0‹Æž¨XEŨ "ôÂaø´D˛;&áĸ;#NA‚a4Â â ØÍĩķ.:Si3A”Ģ˙čq¯ũü}ö¯ęĄëëm˙C÷x×nŊēTĶūáÕéŌutžœ2xÕôŠ´žA…WZM‡dwh ƒnÉcĢ m&döx`‘ÛA:7QŖÃA=†i`áÂ/3¸´kŖcFˇ'mûœ4ĐąBҏhˇW˙ōô6¤,Đ"?°Õڇˇ_Äi|~‡¤5V‡īũ˙Ēi~é.ûĨĢĶוĩ{„úēé7í;/û´ęôôíi;Nēļ ÉÉÂV÷—פŸt°‚vK)6“i7M‡‘GH&Ņí˛+žM ›ũ…˙­×åՇ_˙å‡ų8N•{\=†×é?×ņ˙cøÁ¯îŊ$õŌZ÷^ßģŌ˙ØŊ­ú Ž+čU÷ÛzĢ˙Ũ§Ũtē !­]„2ÄĶi>•˙ßü/ûí‡˙õúnϝŽÁͨ1˙ũĨû¯‡ūčœ>ÔtēõŌ˙ģ˙īuũ-í˙ĮúWúkûą¤˙oéiz˙û÷˙Ū?á×ø?áŋß˙ũ~[Û ˙ļ—č°Ÿ`Ņa,4XßëÛūŌnŠ˙˙­…˙öķEĨīJ­û\?ĩīÔî4?˙ßĶ#ĨM}?˙á˙†ũ ×īũžû à /˙˙ė<+ ęŋüzö—˙Ū?ė?¯D:˙üxëū=piúĩ˙Äqč˙˙_ũÛWo˙˙ÛŌũ!ė8Eŋ˙:oũ†đ­áŨēũ×˙¯÷m˙_ëđŦ?tŋõöåčY?÷C˙ËН•O˙a™Ģ3Ûũ/Û4[õoĶíūĮ~[xt÷ũĨ˙ø|#DÂ4~ßnūî–+˙ü"Įú†ßė˜ęû˙… ?ŋ˙é‡×ũaęķŅ˙ė+kī÷ŨŽg˙:ׯlĶūÍf‹ĩŪŨ/õūŋođøK„ŋũŋæw¯˙˙ ŋÁúüFX˙ī˙ˇ‡ūŋđ‹aû_ü/˙é=†_[V*)‡ÚÚîÃ_ÛIŨo†“~ÚíŽāŠ}˜öĖŅ˙õIü_ģuģužëßûo[˙˙„ŋßí/ozÕēôöÕ˙Đ_†ũ˙đ‹˙˙b!„ÂĐj ,AÄ0œ‰b“m&ŌÛJŌm+0›bĩ¸Ļ˜0ģ /Ũ0Âúūß­~Úŋ›û3×7ögŽŋĢôŨˇUßéũŋŋí˙úú[ū—_Ĩøw˙ûA÷é]“‰Đi ÆČÜ% ĶA Į $Å1Ȗ˜†ƒkb‚qV6Ö*Ōl í;MB˙pÂVĢö˙°–žßļÚŲ˙}}Ōõ˙!¯Kúŋī˙\Úũ×Û_ŪÁ ŅuöéũûÄDD‰B  ­aXQ0ŠĻ™t˜jšA´Äã¨Ļ˜¨Á0ƒ X!ē Ķb›Ní Į„ŌcĐ=;OˇIĩØom[öŋ˙÷ûi]ˇ­žõū}^ũŸũs§Ø[]_ī˙Û3ėĪĪŨ–ë?—#P„! Ļ0Š“€„Y…Tša7c6:c†­DCA°Â`°m¤Å“ĐmĨ õ†CM;°”4›JDŨÛ[VĶmoÕõ÷J°Âë~ŦPÖûöĪ_¯Úļē~ŸÄDDDDDG`ƒ$á ’€˜„L“—bqÕģÂ[pƒ Aą ˆ†ƒbw#0ƒŠŠa„œ Іh6-†@ƒíBaĶ (ƒŠˆ4Ķ´˜Ãh(`ƒ˛ôU…#Ģļî*+Ößô"""""""" ÍXB4.!„ÉÁƓ „"-B Ba2ēĘr‡&8@ŗ–=‘ēbĩ’…¯Ø„ČŖ„LŒtšqL&Ŗccj#ÂD@a ĐAĐ@Â?Äq›§#”øg „Âaƒ„)‚a' ÚÚjß_ÕcB"""""""" ˆˆˆũWĮũuO&âæē ‘6.]E>˛Ũ(ŖKÕĒ‹]DZŒŽ•¨FA\()š& ĻCĜvĄŨĻė]‚‚e|Č7pęÄü§”&d+8’åQ}ũđáÕÔ(((& “`FMĩDšû[˙î?Š^#ą@`)-Ô!ØēÁ25ž8|5īô!ÃģØdWđš…%aÖ>>žĶė l9 $ thá~˙˙˙ÖßÖô!æīÕ#ß˙īxģūÖēA˙Ēįj˙ YR˙˙˙G?­Ęü<Á¨ji’,ÍŌR]í\ė&^ŋũöžŊ<#? Ŗ8`†p $BË˜ Īŗ6D™ŗp¤9Ž{2s”e刕u_×"ūd´ŋë˙é‹AŅģŖe TŅ­„,&Ŧ0Ą0œŒv 0L&h…x@ķbÄ0P™@×.D2"#ņ“’Š ˙ë¯ķŽü푎H_Ļ=š}]'t’ÆÉÚb’l2X%[§‰V%[‚ ¤ÜhđÕQąü•°˛Íĸ0‹0Pš-à ĸT…ĀÉÂĻf)†_8ŒfÅ3Œ3Q˛|Ųž2AeĖé/.ÍIs*%ë­uPŋõéŌ´ˇKiÜY8Ĩpšm[ &ŸovIé6tĨႄÛŌMō1č Üh'FʨFÆ˛ˇ†‹v    „Âq Á͋Ág0˛ã:f&38Ã<3\`ŠN)ĪflžmEŅņų gRÕë:ÍĘt‰ĸ9hŖ!-NĢöø÷˙ũŊ:_]:VĐiWëmÃ5†]ŌvIé^ØeĨV“ēM†a ›‹FƏ ÜN;FĮ%a„ačģäė4\„8Đŗ˜$h`ŠŖ@`…Ŗ@hĐ0šCˆ4[‡¤1Ã<Ø0`^ûâ6((@Ņ ‚œ ƒ#.0@Â"cE"¤âœGĖē>3HÃ5fãH†yˇdA[øĩõ÷ø˙ĩßí|W~ŧ%˙ßŋ´;kė!W\š}$Ød%i8`˜ é\&ĐA´†Â7ÉC  &M˛,4› 2ĮaA„‚oT6xöJkŌŅvÛt-UP´kĄhģ †ļŽeŽĐ´-ØM0L&aÃAáú"ŽŋK˙_ã÷øë×QëŋUũSÕqēūßøBŽģģ{{Žŋ ęÃ.a6ũ$ė“Ōv¤õąNsĩ¤öI7^ÂiĒH62Wd‡ŖÛvEŠNÉcIŲ =&Ō ƒa„AĐâÂ3°›†vėËQ˙˙—WŅuëũ/ø˙ŋC_Lž¯¯Õ}z¯īO„ŠĩŌč}Ģ_°ī]×q ­/KŽŌt¯á;BŽá„ö›I†Žj+K_§v–Ã$öF:I÷“ÆÃH7o˙˙˙˙Õ~jûū˙–)ŪĒĄ˙_ÚQę;˙ŪĒ=_WûŋiŌ§ž ī˙ŌkKíi~˙ˇîúũ{ú_ú˙zK´Ķ ¤ŸéÃi7 ˙˙˙˙ū˙á~ŖßëôZG6Ąú/N˛õÔąÎG˙öŋK×ūĶJ7ã]˙ĩŽ\=ĩÚK~—˙˙øīŋákõûĩnÔ|7đ˙˙ŋ˙˙ē˙…ū˙˙˙aë˙N´?˙2Ž>á#0×īŋ¤MĖāšŸĸ7*uߑG[ëū—˙û_|>ûô?ĐÛJ:杨i]ũ˙ĩ˙˙ũūđšcŋ˙÷Ŧ>˙ũ˙…˙đŧk˙û¯B*‹Wā…éJmé×â´ŋ˙ûĮūų|Žŋ¯IņØ~ī÷û˙īũ˙ũĨ˙žŋ߃jŋ÷Ĩ~ą˙ūM”ë˙ûœv¸"Ÿ˙x/ˇŽßŽßMĨ˙ū­ŋKú_™;Yuu‡áūWû3Û˙˙ŗO÷'^ŋf‹]o¯ũ~Ũöīû˙A?˙„\ycą˙ũ-/˙í ‹úOˇīzK˙˙á{Ã˙˙ūŋ ÃŪ˙Ōė0–ģũĨûa/{ĻׯīoũŗDsũŗEäé÷˙د´ŋīŌũŊ.ŋccqßŨŠA÷ļ˙,wû˙ūoü?˙˙ũ~7īû[ Ü5´ũŗÅ/Ã]WXk§žŲ˙žģĩOû[aŠû3īÛ4NŲĸŨōtô—nū˙¯ÛßÛI~ÅūÛ¯˙ũi}aũŋīûmFˆ}_ėPAà 1„0Æ„@ ŠM4 ˜Ĩt3 Ø0ģvŋ $›~ØK°ŋ{ _íj×°E?ũĩÖˇVßûUf‹ŗEöh‚6ˇūÍģo¯nëû˙ôŋÛë˙ãoŌÃų'˙a†dœ! ”ÍĘ{ aá…~Ōh4å8Ļ‚EąAØH ŲqiÆŦUĨeø`ŠqW{ l.Ø]†ĢV°Ī{é:^ôøUuûZĨž›UVŨ[4[Åmo˙õūtũtŊŗE~ŲĸŦ>–˙Õņ'„DA„ !dáIĘča|¨–ƒNÚ 46ĮLX@âšb“аĻģk Øûęë×Ļ\IvJī÷†ûē†ģoûĨë÷Ũ{}öŋÚŊĒëœ˙>í^ĸ"""""" Á˜l!&A ČĮXkh ÃQ8č ĐaÔ0‚„pv“aX†ƒkcļ)lhƒāƒ‹v+AļØIŠáéŌv“ ũ°E;Aëŋ¤évÃm{ L0—é˙ūëq|C,&! "\lœ&˛ PbŸL ƒi=„ÜŠ:nƒM6) A Ú<à Fa`ƒ0ƒ°”4›JD˛& aĻ›ņWÚ×ĩ†•ĨHDDDDDDDę2”BB Ն „b€š ÂgĄßˆēiÃČÜ.g´É:ū*)Šwi‹AĩA ‚ †0ƒx`“ ."""â""""4""""""""kåš“‚ `‚ œ&†Ž‰žėœ(…Žž˜„…TsņÄDDDDDDDDDF’Ŋz­xęžčúĨâáRpeŽ.q•ÄŲ A0RÜÕâŖPLîÎŨŌ :0äD¸PL&W$UIˇzGdĒaA+”æY™gikôfní¤r…*#ŋÁJĸ2üōČÚ'FĐ)"¤g`qßEFv­kVˇiF\ÉÍŋiæčD6uPΧg­ä?ÂęBėíkëÎ贜¯˙éęIÚMƍĐi N'ĨxEÛXMD;¤C–ˆa;A… „GvÁMÄxøÉâīÍÄ<Ÿ!¯kūŸŠųRņ¤Ø2Ķ„&Ã$ô­Ļƒ@ÁÃA°ÉÂH6ČđJƓ˙ ƒ #=(ôk4k`Ŗ[¸Â5°Tø†0@Í'ŒƒRœSú‘6ĨAķqVĘ3VHō_:2t@ŖĻ!šš^—×ׯTÚ\!ßĻõt)[M>➠ĩ2úŽ‚m'A6y;i;¤ØaMĮØThaDā0ĒŠ7 "ˆ* E‘Í„Cŧ `ĄaKŠ0RãČã@ 8ņ$%˛8 ™ hˏ8ˆčŽŽd{#į?Š@ĘtHŒ5˛ä¤ “럏æâ)Ņ­)îE׎Mˆũ˙wØˇ˙ŋģúžũ7ZéjõĶö ŋVú[$ūNېz‚n#AôlLJFƍ ģa谘Eà h×FŠqaØDā0‡Ä\[ŘĐg bŽ/ ‚ĸ  Ą3`‚ä`€æƒô4Éü eQ3Nŋã˙īĢ˙ĢÖ×ŨuzuëúíĄá6×ĻŲ'. ŦzĢ9ŨØeŲQIļGzm‘á+lŽÜ“´hĶŧũI´ƒōPöĐMȃŧ8>ĩž °xīF­úƒXEß›°‹€đ‹w#‚„Âh‡˛ĮaaõŋápŨ/˙_ö˙ŽīqđÕû_˙}ÕÚVëwkÕņum„Ú[ ĻáŌowJ–ü2čitÛũĒŽœ4ėŒrܜÉį áŲ;[˛;aō,:}č'ĐA¸ ÜhÎôhŧáûū‹O`ú˙˙‡ųDq‘Ųta_CûK^LJi!ūũuĶŨúū—ũí;MÖēīĨOŋēēģˇŋõ­û4Ô&×ŊĮØO¸aIúû^öŲôœ2æ›A;-'˙íÚ˙˙}l?ŗĀŲķ(Ö?Ô˛Œēüē˙÷iß˙ûú ũ÷ülVËálzáĻ•˙ęß'šĮũw÷}o×ÕÖŨ/m„ŌWĨŽ?˙Ã˙˙ŪßīøUÂũëOU_đá˙˙íŪņũ˙פ#‡ü˙˙Nˇûú×÷û×ĨZú׍ŋõŨđÛĨ˙˙^ü x_˙ĩ˙öŋ¯`˙Į˙Ö^ŋ˙‡Ĩ/Gú'ŗ_˙ž—ũ}ū?uî×ëøĮĮũ|~M”/_ž˙õúü˙Â-ī„[˙ßŌģ˙mŋ˙Øá~Ŋë˙õaūÃūŋ˙§­žīëũûük˙åŽŋĒ椞˙īx¯˙÷˙íú īūÛ˙ü ˙ūü/߯õūŊ,7˙˙˙k×˙~áü'˙é/_¯,>\5û×ögäBßūģĢķ‹īû_Õmx˙ü87×ū˙ˇ˙ũũ˙„g†ô°ß˙˙÷Ž?˙ö ˙á˙_đŊ{[ö]õ˙[Ēũũ™ūũw}™į&Û4M6hŋößūü?ú ˙˙ëü%‡× ˙˙ū­×˙˙‘‰?ũ[˙˙đŊøÕ´‚§ą§i:jŨ×÷éūÃUí}ŗú[i'ÚÕŽh˙÷oūˇ˙_˙˙úÃôîßö˙˙ú˙öôŋ˙Aū˙øEĮ˙†! al ƒ°•A„R'0’ ÂÂIĻȅŽØ§Aļ l%|vŦ0ģ /ßæú!¯¯ms¯˙×î—ļhž˙ŌͯKŗ<ēķO˙ū+o˙ûTŋ˙Kûū˙ôū°`„D0…ŠŲG+Ŗ˜LRûƒM ƒ ĩ\SAĩ Ø§Š[ĶöûI×Ŋ/ÖÛ˙īû_úõīô´ŋöļ—÷¤˙_ūqēúūē˙ëy§ļiūžŨäØîĸ#ˆŒŊĢ" &Ndn' ĢPÂtÚ Đ@ķ° @ƒ0ƒ´­&I"hë´ŽĖ+; GM›[ĨÛëk}­ę’ąÚ]đa&Ō_îęŨu˙Øjŋ˙īí‚)ÃUĩē˙ŗķđÂDëXˆˆˆˆˆˆ‡`„!ūąQLB7 P@₠Ž#ˆ†Ã‚ ' Â 8a ˜AąÂA46­&! ØĻŌM>!Ļá;I†ƒXdy=0à ØAŨ˜ÕuԎŊĩļV %°ÂZúˇ /ˆC¯q4 a 0…Ąi’pLœ&F<1 Ķ $͏¤í’tÅ^Š‘GĻ Riė] 1QlD0ƒv*"؈ˆ4ÂłÅ1Ai- ė1°ÂcúĄ Â`š4ÄIЃ(P­Ā!“ƒ—ˆaNŽ '‚‡)‡69pqĘÅÉAcՑGĢ Ģ JqAbPę0ÂbëĒâ"""4#ˆˆˆ8ˆˆˆˆˆˆˆˆƒ"GHA„ Á ĻA’p¤Ųôē_ŦDDDDDhzIe¸T–´ĢAĨŽ‚ GŠZŊôJ(ŽÂZĻ40ƒ¨ĩ7 ™ÛŗģˆĩPĄAoŽYG`Ų…páÓtAA +Fd7Œ…ŗąŧėžwE˙]#9B…;0@ ŋũŅŖaüíj]BŸŽÅûôg{‡°áÜ:ßũ§[§˙ß×ū=cũoģ˙É5éûãūĶ˙_ë_üFWļ`ŠáņLÆPdÆlĪĄäæAæ¯!=˛.˛Pģ˙… §vŒđ‹v ͌Ā„ „ %Æ31sA§˜2'ŒFdoũu;-ķ´ęŽÅÉJėJˆGļmGŒJ;ÃhØŅąčÖĸáńk īFpŅ Â`Ą0„…˛5Ĉõ$‚D‚g8fÔŦ=eđēŽēūŊ Úžôũ¤Û „ÛžézNl$ܔ:téģGw‹´áp h( `˜ a’ã(;0K™ÅåȆJJŒčÉöšĖÔĘ´tG•hčŠŋ˙U×ūēX]Ú_~Ŧ%Âá[ßJÃ.eķ 6ŌRÜàÂA6;am4|Ē5††Â-ÃąÃXD‡‹˙˙õéÖ¯WÖŨ÷ŌŌēwŪēK[h_¤+ Ã,č:Zļ8†a‰°Â ͆_4› i’ĮZVA´›dąĨĨ†Jé6•ĶaÁÚIŨŨ2ĮiŌ ôYzzü9`˙ü?–7ūL0ôŋũ-Ôq¯ū×öŠßīß{¯˙ūŊ]mzKŨ]ĻÚt´Ÿ~Út´­ Ũ{íû-?tĩvx'ԝ'Ž? ėëéÛ_˙{ė%ßļŋŌö+_đ_ą˙Ō˙ú×ķ_˙đ_ ˙˙˙˙ûë˙˙˙Ģu˙Ŧ2nĢû1ögÖq˙æÖûš/˙4ī×҇Å?ÚX}˙A?˙ßŪ˙ÚN—ūođ‹˙˙û¯˙û˙˙˙áu˙ ģkũ]}°•÷û­íŸû_lĪöÔŅˇŲŸ~—¤9įĨē[÷UĨī˙ß˙īÆßúú đwũz_ī˙ũ˙˙˙k‚&=ĩ˙ĄļĄq!ÚQXAÚ iA…V+N /Á¤ŪžÃ zßõžŨ­›_ūŋoũWūßūŋÚ_¯˙÷ūˇ˙˙Û˙žú bøoÆŠ˛N™Ļ(4Äãđƒ0ƒbØĻ! Ū!ą  ŠĩĶb¤ û°ƒYåkí+?ļ}}ęôžŊš+K˙lŅ}fžõf‰ŗO˙ŗDŋiuˇŪ˙īíŋ“¯öÍ?{ë×útûī 0B `˜&qdāüaOÂd´ÃQ Đm1 ؔ< q$uļ“ ÔNūÖ˙V¡_wà v°ŌēvÖŌ˙Û ˙˙ßŊ_÷ŲúÕĩ÷[ūėĪ×Ū×Užžę]?›‰šU„DDDDB‰qe“L&V¯iŠiŠb6ÂAa ˜AÄlSkkĒąļ_´˜§6ēƒ™uíŨÅh;ģTû_ĩũ^Ø4–Ą¯Ūà { æÃ iiÛÚú_u~qj3×DD_ ÂdáE[¯dc¤ Š0ƒA„ ŽÂOėSA„ˆ;6˜ÁȄalC4a)†œ6lv“šl4R 66;I†pËĻÖė h2:í´´ģĢŋķĶB""""!‚`„0‚Âa &Š ĶKmZ†™8VĶ$ëÃ"Ž•0Ä&‚aca1M Œ4M„Š‹8¨‘p0ƒm(jv–#J’|DDDDDDDA‚`ƒ"!—`…0B!“€A„"Aĸ ™(9Ķ#u8å=’„Ú¨b˜Ž)ĒI/B""37Ոƒ(¨ŌZמq ­Mžxôē^ ¯ėB×ė L%ļPƒŠ‹ 2Ũ/•ÕLŽ()6Ną¤CP‡bčÉA…KO §ËpfvMáé]ŌfDā˜)Ų)VLâ(ËpNí÷ģĐFŸ‰9B‚…+•–āLí$RD5ũũ}G´wĩä •ÄAAABËßθdņÖá—BxŌˇFļ“ÉŨ“†m ôAÄ×öũcŌ]¯õũƒ_Ŋäƒũö˙ÃHx˙ë˙ĩũk˙ûUũũ˙Öû}m—ÁëúŨ}ē]zMĐÖôū=?˛v•Ŋč78KK§\{˙ˇí˙˙áaŋ˙ž‹¯Í_aė?ĨéUŋ­ Đũâû˙ãø÷´ŖđÛ×ö\_Râ7_˙÷ú˙­Đū?ûĶ÷Wīųc‡ĨÅ˙…ũĩ˙˙öŌ_`ÂûŅuī–Ŗ˙ËĶ˙ŋú[ĩūģizõ˙ü{Įúū˙÷üß˙¯Üũˇ§Ũũ˙˙Â.?ƒ˙ũ~Û˙×˙žŋĨųbŋ–OŠúË'å×mR›SW÷´ŊæWå§_û˙˙_ÖÂáū˙_ĄöíonŌëû×Ō˙ũûļ¯á´høoß§˙˙˙¯˙ ī_üãŊīũ¯ū¯˙˙ŨŽ+ū+ûËЅ6Ŋūöãū˙K˙÷˙oî*ü8A~úŨ˙˙ß÷˙áŋ˙˙˙tŋ_ß˙˙ũ˙_ õ×˙ZÃm&Īũ´­[Ĩë˙ųŠ?W^Ųĸ˙'^NŊ×÷žŪŊŌ˙˙˙˙ü"ã˙÷ļ“˙ũūīú˙ŋīiá[ūÂ˙īļۘa-ŋ÷K_ŊWí-]~×öÕí|į˙’_4×Û4Wũ˙˙íę‚ũ~ŸŠîëũ/_íí/ũX¯ß¸ƒ˙„g˙ã %hžÚLCĩa‘ûÚwļ•ÕÛÚđÂTà ˙ũ™Ží™öŸ˙ļgˇ÷ûfˆō×É×KūŪļhˇĢ4VhŋIŋŪ˙•ũ˙˙„˙zXoß wëĘæˆ†ƒƒ aŪũaŠ‘‚ ÆÄ㠃AØJA† 2%‘10 Øö)5´Ŧ iöŦ0а`•Ü5a¤ÚZßũŗ˙öĄũ¯ũũŸũ×ß]âŋŗ?ėĪ[˙˙ũ҉˙4ú˙ôŋęâ""#B" õ‚ „"h˜¨„Ä&ši‰ĮI†MAÅ1(xA„¤ÅؤĶbĸ›Kŋb› ėUՃ ß°a+K_ízƒ [[a­ęŽūÚûj“˙ˇZ¯õũúæ?×˙÷4Ëu$gqšXƒE„Âa ŦąL+ &a˜ „A„LCalU˛#†b­(ƒƒ#ėļ*IŽDž˜ØĨNÁPËęąZÅ-_ĶÕ6ũ†õnŋ_mz†ƒ ÚÄDDDDA‚0„3Ā)ÜtNƒ ‘¸[ ÖØNŌiĩ8â™'LTaœqM=;  ƒA‚ÄC0Đ Â  äJa†‚ h0ƒAČ=b Šģ;×ûAŨÚąB#\DDDDDDDDDˆ0„M0šaa0A„CA a‚# ĻF9cöŊ¯kį´¯ūíĶhlN>(  h8ļ.ÂOņĄDDDDDDDDDDE°ËXL(BNĨr•IĐdo•aRũŸâ"""""""#&ĤzZZúTĒžá4‹ éuŒ1B–ĸļ–˜ĢPĸ6…pL`ƒ+§Ę~WÍH^ ‚ehČ-M7ęČ-ĸ[•Ö—H4ĄŨķą6„˜ŗ;ŅTv e)•¸ˇĶž/´áđÉ@eš íb2@™oė‹3ŋ2ĘY•ŒėŒŠ(­UūĶĻUßCDč*¨P˜(('Æ˙|7[ģģč@Á7õŖŊTÕ­ĮÃKUīM4Û­;Ļ˙ũ,qß÷~…ß~K˙¯ú˙×˙¯¯É/˙˙˙†š_ŗ<Ųåt5$#ĸ:ŖČ–¯__S´ŧŦ˙ūž<L"Ã4BĜ@L2\@ƒĖ›3ÆEČğ›Dņ‚(:; Š‘œg™ĐČ8Ģyļĩû{i{ūék÷N•ĶĨ¤á—=†N a:’;Öwģ#ŠOč&4gqhŲTlhģqhXDíá€Ņn#B𥠄Âf6(E¸˜J!L"ĮeÄ.3d0‚‚aaa ŗb„Á4‚ `†`ˆ´šãxR€¤Á“æĖ†׎\Όé™Fs-ËãĮtŋĮ˙ë§Ō˙ö÷¯Ž‡ßŽ é5 îs†OšRn]IŲ,i;%­.J܋L=ÚLąĐaqhJ*h0’eŽÃuė›a4›74"Ņ­„aØEå4>‘°8ҝš6Q­„]†HTkhĪL Š ‘ @†0ˆ?0PA§˙é/˙ßøh_Ūûî‡ūŖÃ úīË ãUúŋ×U¤í:íôÜ' ÚŋM¤ėīk žC „íU;3Ú šN ž:l;ŌZģ%IJ“¤œ#]đÂKŌy;„k„&ĐMĶM„pŒî,#wNO5´ka4-˙ú/O÷ô?Ö9ņ/÷K˙˙Ą˙ûíŌŌ_Øûę××Ēk_é^¯ØëĶ´îô¸û^•:˙ĢĨm0+JŌŌvN:]†N?OˇZZ¸2ę$ô´'dąĢ¸dÜ*m&ÂRŪm‘Û˙˙×Uö#ûz˙,Ÿųuũ-RH ŋo×Į¯×ãHw˙ŌēŪŊ˙ū˙ôŋũ*éŋŋˇ_čt’čwÛ]~ęö‡ŋVÚzŪ‡m/v’Úq˙˙õø/ˇ˙Ŋ^ŋū˙ī^4ü?˙˙ũ[˙˙˙îŋúŌô6īQ_ę?¯ũ(ęĮūšzŋJĢ˙¯˙ũŠ{_˙÷×đ ˙öŋū˙˙öū!/ėīë­z,?˙˙÷_ũë˙ž˙˙˙Vģū‚[‡í~‡ßĮ_ũēm{˙Ûŋ˙m/Áŋú˙īÂ4÷˙õI&Ŋßõđŋ˙˙˙÷ë˙íĨ˙§ķUŌ˙îX×ĮôĨՇã¯,ú\z×ū˙k˙ūū˙é~˙ęézū—˙ëúW\ąØū˙đ‹˙˙˙˙¤õ˙˙×ũūÚ8ī­˙×ÂņÖÃđŋ_ōÃ˙˙üŊxũ–åūĖû˙ũÛ4ÛūëŨŋ úŋûũƒ˙øA˙˙ûuk˙īē˙ßú]_˙…đŊøoÂ˙˙^ ˙˙ÚKé˙ØjŲūÖŌöĖ˙ķ}Z˙ĮūhēööŸī˙Úûū˙ŋ ŋũī˙˙c˙˙Ō†˙™ßÛ~žŋXF„h÷xˇũ˙¯…ŋ˙˙ø[Oب`–mmŌđÂZļ›{ +ôūÚëg˙Kõõ^8–˙1˙÷¯˙ßūé ´ŋúŊˆ_ŊŋņL˙ĨŪ—ËôŌ˙Ûŧ"ã˙˙ļ’-˙PL Â6˜Ļ"a š Šˆ8‡iE6v•C0ĩcŌøkl_ŋũ´Ŧ-Y˙˙W4_ī`Ž˙˙ÛŅÆ ÷˙úHõ˙Û˙Ģí´ŋ }7{~‚Û˙˙Ōū˙ũŠA/ÔDJäA…#…jd21ÔPiŽ)â!„ … (ƒ S"X¤Ķˆ5M4Û¨­ŠO[˙á…˙ßÛVĖ×ûū’´˙í~ĪĩÛöũ÷4Vŋæšī˙ᅧÍ˙íšo_`Š_˙õ ’ũGQD ÂÂaJe†IÎ8"?´AŠÉ:a4ĐA„Ųtƒ4AÃĒÚCAļ“pØĻ~Šļ›`ŠqR(ûŋm%mO˙­×ŋŋĩ§ĩēūZßūŨ¯uëũĨkîžq¯īū­šhÕ~¸ˆˆˆˆĐˆˆˆ2´A„ ˆa2ļ€ƒkN*,&ÔlJC6.0ĶC8ih):Á0ŠĻĢČz8`ЧiÛĶtĩØŽŽžąī¯Š6Ŧ0“×à ßzũû}CKīŧëčDDDDDDA–, „ÍLãĻFéĻak†![{Ą  ƒjħ‚ˆaĶNƒ @ ã`Â!„ '  ƒ°Š„ÃAÆØI4ØĢMmļÚ}˜V“Ė-5PÁ|DDDDDDDDA‚`­ĄŲ(=˛†ŠãØ":e: tĐbė&IĶŽ™énÚN!'ČŨ% 1A6˜ˇc0ƒbÂ8jÅD— i‹ÔEöœDCˆˆˆˆˆˆˆˆ0@ Á0A‚ !3ÄB!…A„Ę 0„C2PÉ@^ČŽļbĩl“ûONŗĶˆˆˆˆˆˆˆˆˆ‡¯l!ĒN–“Ž,ßd*%ôž•'ĨõĨĨTöĩ0KęĢëĒ;+J_`’Õ„†ĩ&Â^!W6—a5L(29 DF!C6'™U¸€Ũˇ|Ĩ L)JúÅJ;UCMįt-<ČņÂaA3ģek*™ ūŌØtÃÚ~ ˆp"†0L¯ėînJguÄĪ;õ˙öŋî.#ķõ)V •ˆ(P˜(&væw[!ėĢ‹ ZkkŽÂ=‡MÆJÃOtaūĄB‚Æ„qÚ ~‚i÷ áŨ ͏wFzĘęōGøúN_žÛ[Đģģ¤áęĒDō‹˙§Į×˙éR˙‘eëúī˙ú]r ˙úųI?ŋú˙ü¯28 @Ī û$ S™ļy”59%RvO“ųļHÉ›ŠļuZúâDīü˙ũ0MvĄ<*Ēx&f˜ aBe@…Å08† x Â!ˆ˜3âŸdxÆ_6g†Sæ™ļHø )9Žr:ŊU/__2˙˙ĨíSĒ ęĄôŒ=ūĒ 0­B.ÜZ.!B„]‡aėa0PĄˆ[`ƒ2J)ˆžo.˛äH5ĸÉyžižYĖ֍ĨęŋúHˆēX3 Ķē)ŌT’HīG$ņ KY˝å=tÕ5/!éš<¤ĖđƂm„A„‚ĄŖgFę65‹ģ|qq E ˆ[‚‚—‚0CÔäGG"č&Dfqƒ%ķfpŗCeŗ!…>)"ŒÃ>IČ„ÍŗėęțÉŅÄHŽˆã3ķy¨ĘqŅ ~ŋTŋúčkÅ*KĒQIR÷J›uéēˇdâŽũ{†Ožî“Ĩa“ŒĐM†šaI<#CđŒíoT.,&wĐQqh‡" -3bL Ē,y Bã6Hœ Ąˆ^ ÖA`œĀˆā€Ą3⁄ĪƒČ₠&\ˆaLÆD2ŒŲÂŲ9 Tčy¸ęÉįŌUąŌ¯HtŠiUģ÷Ōk×ŋ]Ū´ˇ˙ha÷z„ ¤āĖžpá“pˇdväíŖCA•×ß˙˙˙˙˙ø/ûa˙ŋ˙ø]t‹œzŌĢfĒ­ŒzKŠĮ˙ßŖŒēU_īˇ˙ôÅj—Úa-˙ w÷˙īh˙†ß×ú˙˙J˙˙˙đ‹ølŋ˙˙ūÅAĄŨTRĶiS„¨ ´¯ŠB“kũŗ˙¯~æ‰˙8ŋėĪũŗ=˙WÛĒ˙ūú˙K˙˙ēôŋ| #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *data; char *fname; l_int32 i, n, w, h, istable, score; size_t size; BOX *box; BOXA *boxa; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pixhm, *pixtm, *pixtb, *pixdb; PIXA *pixadb; PIXAC *pixac; SARRAY *sa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "pageseg_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "pageseg_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "pageseg_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; #if 1 /* Test the generic page segmentation */ pixs = pixRead("pageseg1.tif"); pixadb = pixaCreate(0); pixGetRegionsBinary(pixs, &pixhm, &pixtm, &pixtb, pixadb); pixDestroy(&pixhm); pixDestroy(&pixtm); pixDestroy(&pixtb); n = pixaGetCount(pixadb); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixadb, i, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 - 19 */ pixDestroy(&pix1); } /* Display intermediate images and final segmentation */ if (rp->display) { pix1 = pixaDisplayTiledAndScaled(pixadb, 32, 400, 4, 0, 20, 3); pixDisplay(pix1, 0, 0); pixDestroy(&pix1); pix1 = pixaGetPix(pixadb, 18, L_CLONE); pixDisplay(pix1, 510, 0); pixDestroy(&pix1); pix1 = pixaGetPix(pixadb, 19, L_CLONE); pixDisplay(pix1, 1140, 0); pixDestroy(&pix1); } pixaDestroy(&pixadb); /* Test foreground finding */ sa = getSortedPathnamesInDirectory(".", "lion-page", 0, 0); n = sarrayGetCount(sa); boxa = boxaCreate(n); box = boxCreate(0, 0, 0, 0); /* invalid box */ boxaInitFull(boxa, box); /* Init to invalid boxes */ boxDestroy(&box); pixac = pixacompCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); pix1 = pixRead(fname); box = pixFindPageForeground(pix1, 170, 70, 30, 0, pixac); if (!box) { pixDestroy(&pix1); continue; } boxaReplaceBox(boxa, i, box); pixDestroy(&pix1); } boxaWriteMem(&data, &size, boxa); regTestWriteDataAndCheck(rp, data, size, "ba"); /* 20 */ boxaDestroy(&boxa); lept_free(data); l_pdfSetDateAndVersion(0); pixacompConvertToPdfData(pixac, 0, 1.0, L_DEFAULT_ENCODE, 0, "Page foreground", &data, &size); regTestWriteDataAndCheck(rp, data, size, "pdf"); /* 21 */ lept_free(data); sarrayDestroy(&sa); pixacompDestroy(&pixac); /* Test the greedy rectangle finder for white space */ pix1 = pixScale(pixs, 0.5, 0.5); pixFindLargeRectangles(pix1, 0, 20, &boxa, &pixdb); regTestWritePixAndCheck(rp, pixdb, IFF_PNG); /* 22 */ pixDisplayWithTitle(pixdb, 0, 700, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pixdb); boxaDestroy(&boxa); /* Test the table finder */ pix1 = pixRead("table.15.tif"); pixadb = pixaCreate(0); pixDecideIfTable(pix1, NULL, L_PORTRAIT_MODE, &score, pixadb); istable = (score >= 2) ? 1 : 0; regTestCompareValues(rp, 1.0, istable, 0.0); /* 23 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 24 */ pixDisplayWithTitle(pix2, 620, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixadb); pix1 = pixRead("table.27.tif"); pixadb = pixaCreate(0); pixDecideIfTable(pix1, NULL, L_PORTRAIT_MODE, &score, pixadb); istable = (score >= 2) ? 1 : 0; regTestCompareValues(rp, 1.0, istable, 0.0); /* 25 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 26 */ pixDisplayWithTitle(pix2, 1000, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixadb); pix1 = pixRead("table.150.png"); pixadb = pixaCreate(0); pixDecideIfTable(pix1, NULL, L_PORTRAIT_MODE, &score, pixadb); istable = (score >= 2) ? 1 : 0; regTestCompareValues(rp, 1.0, istable, 0.0); /* 27 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 28 */ pixDisplayWithTitle(pix2, 1300, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixadb); pix1 = pixRead("toc.99.tif"); /* not a table */ pixadb = pixaCreate(0); pixDecideIfTable(pix1, NULL, L_PORTRAIT_MODE, &score, pixadb); istable = (score >= 2) ? 1 : 0; regTestCompareValues(rp, 0.0, istable, 0.0); /* 29 */ pix2 = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 30 */ pixDisplayWithTitle(pix2, 1600, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixadb); #endif /* Tests of auto-inversion of text */ pix1 = pixRead("zanotti-78.jpg"); pix2 = pixConvertRGBToLuminance(pix1); pixadb = pixaCreate(0); pixaAddPix(pixadb, pix2, L_COPY); pixGetDimensions(pix2, &w, &h, NULL); pixRasterop(pix2, 0.2 * w, 0.08 * h, 0.4 * w, 0.23 * h, PIX_NOT(PIX_DST), NULL, 0, 0); pixRasterop(pix2, 0.6 * w, 0.5 * h, 0.2 * w, 0.15 * h, PIX_NOT(PIX_DST), NULL, 0, 0); pix3 = pixAutoPhotoinvert(pix2, 128, &pix4, pixadb); pix5 = pixaDisplayTiledInColumns(pixadb, 5, 0.3, 20, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 31 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 32 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 33 */ pixDisplayWithTitle(pix5, 1750, 200, NULL, rp->display); pixaDestroy(&pixadb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pix1 = pixRead("invertedtext.tif"); pixadb = pixaCreate(0); pixaAddPix(pixadb, pix1, L_COPY); pix2 = pixAutoPhotoinvert(pix1, 128, &pix3, pixadb); pix4 = pixaDisplayTiledInColumns(pixadb, 5, 1.0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 34 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 35 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 36 */ pixDisplayWithTitle(pix4, 1750, 0, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixadb); return regTestCleanup(rp); } leptonica-1.86.0/prog/pagesegtest1.c000066400000000000000000000050411506303110300172630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pagesegtest1.c * * Use on, e.g.: feyn.tif, witten.tif, * pageseg1.tif, pageseg2.tif, pageseg3.tif, pageseg4.tif */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixhm, *pixtm, *pixtb, *pixd; PIXA *pixadb; char *filein; if (argc != 2) return ERROR_INT(" Syntax: pagesegtest1 filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixadb = pixaCreate(0); pixGetRegionsBinary(pixs, &pixhm, &pixtm, &pixtb, pixadb); pixDestroy(&pixhm); pixDestroy(&pixtm); pixDestroy(&pixtb); pixDestroy(&pixs); /* Display intermediate images in a single image */ lept_mkdir("lept/pagseg"); pixd = pixaDisplayTiledAndScaled(pixadb, 32, 400, 4, 0, 20, 3); pixWrite("/tmp/lept/pageseg/debug.png", pixd, IFF_PNG); pixaDestroy(&pixadb); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/pagesegtest2.c000066400000000000000000000112421506303110300172640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pagesegtest2.c * * Demonstrates morphological approach to segmenting images. * * pagesegtest2 filein fileout * * where: * filein: 1, 8 or 32 bpp page image * fileout: photomask for image regions at full resolution * * This example shows how to use the morphseq specification of * a sequence of morphological and reduction/expansion operations. * * This is much simpler than generating the structuring elements * for the morph operations, specifying each of the function * calls, keeping track of the intermediate images, and removing * them at the end. * * The specific sequences below tend to work ok for images scanned at * about 600 ppi. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Mask at 4x reduction */ static const char *mask_sequence = "r11"; /* Seed at 4x reduction, formed by doing a 16x reduction, * an opening, and finally a 4x replicative expansion. */ static const char *seed_sequence = "r1143 + o5.5+ x4"; /* Simple dilation */ static const char *dilation_sequence = "d3.3"; #define DFLAG 1 int main(int argc, char **argv) { char *filein, *fileout; l_int32 thresh; PIX *pixs, *pixg, *pixb; PIX *pixmask4, *pixseed4, *pixsf4, *pixd4, *pixd; if (argc != 4) return ERROR_INT(" Syntax: pagesegtest2 filein thresh fileout", __func__, 1); filein = argv[1]; thresh = atoi(argv[2]); fileout = argv[3]; setLeptDebugOK(1); /* Get a 1 bpp version of the page */ if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (pixGetDepth(pixs) == 32) pixg = pixConvertRGBToGrayFast(pixs); else pixg = pixClone(pixs); if (pixGetDepth(pixg) == 8) pixb = pixThresholdToBinary(pixg, thresh); else pixb = pixClone(pixg); /* Make seed and mask, and fill seed into mask */ pixseed4 = pixMorphSequence(pixb, seed_sequence, 0); pixmask4 = pixMorphSequence(pixb, mask_sequence, 0); pixsf4 = pixSeedfillBinary(NULL, pixseed4, pixmask4, 8); pixd4 = pixMorphSequence(pixsf4, dilation_sequence, 0); /* Mask at full resolution */ pixd = pixExpandBinaryPower2(pixd4, 4); pixWrite(fileout, pixd, IFF_TIFF_G4); /* Extract non-image parts (e.g., text) at full resolution */ pixSubtract(pixb, pixb, pixd); pixDisplayWithTitle(pixseed4, 400, 100, "halftone seed", DFLAG); pixDisplayWithTitle(pixmask4, 100, 100, "halftone seed mask", DFLAG); pixDisplayWithTitle(pixd4, 700, 100, "halftone mask", DFLAG); pixDisplayWithTitle(pixb, 1000, 100, "non-halftone", DFLAG); #if 1 lept_mkdir("lept/pageseg"); pixWrite("/tmp/lept/pageseg/seed2", pixseed4, IFF_TIFF_G4); pixWrite("/tmp/lept/pageseg/mask2", pixmask4, IFF_TIFF_G4); pixWrite("/tmp/lept/pageseg/fill2", pixd4, IFF_TIFF_G4); pixWrite("/tmp/lept/pageseg/text2", pixb, IFF_TIFF_G4); #endif pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixseed4); pixDestroy(&pixmask4); pixDestroy(&pixsf4); pixDestroy(&pixd4); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/paint_reg.c000066400000000000000000000326171506303110300166500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * paint_reg.c * * Regression test for: * (1) painting on images of various types and depths. * (2) painting through masks (test by reconstructing cmapped image) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" static PIX * ReconstructByValue(L_REGPARAMS *rp, const char *fname); static PIX * FakeReconstructByBand(L_REGPARAMS *rp, const char *fname); int main(int argc, char **argv) { l_int32 index; l_uint32 val32; BOX *box, *box1, *box2, *box3, *box4, *box5; BOXA *boxa; L_KERNEL *kel; PIX *pixs, *pixg, *pixb, *pixd, *pixt, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Color non-white pixels on RGB */ pixs = pixRead("lucasta-frag.jpg"); pixt = pixConvert8To32(pixs); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_DARK, 220, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_DARK, 220, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-white pixels on colormap */ pixt = pixThresholdTo4bpp(pixs, 6, 1); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_DARK, 220, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_DARK, 220, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-black pixels on RGB */ pixt = pixConvert8To32(pixs); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_LIGHT, 20, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 4 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_LIGHT, 80, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-black pixels on colormap */ pixt = pixThresholdTo4bpp(pixs, 6, 1); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_LIGHT, 20, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 6 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_LIGHT, 20, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Add highlight color to RGB */ pixt = pixConvert8To32(pixs); box = boxCreate(507, 5, 385, 45); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); composeRGBPixel(50, 0, 250, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); box = boxCreate(236, 107, 262, 40); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); composeRGBPixel(250, 0, 50, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); box = boxCreate(222, 208, 247, 43); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); composeRGBPixel(60, 250, 60, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 8 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); /* Add highlight color to colormap */ pixt = pixThresholdTo4bpp(pixs, 5, 1); cmap = pixGetColormap(pixt); pixcmapGetIndex(cmap, 255, 255, 255, &index); box = boxCreate(507, 5, 385, 45); pixSetSelectCmap(pixt, box, index, 50, 0, 250); boxDestroy(&box); box = boxCreate(236, 107, 262, 40); pixSetSelectCmap(pixt, box, index, 250, 0, 50); boxDestroy(&box); box = boxCreate(222, 208, 247, 43); pixSetSelectCmap(pixt, box, index, 60, 250, 60); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 9 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Paint lines on RGB */ pixt = pixConvert8To32(pixs); pixRenderLineArb(pixt, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pixt, 30, 40, 440, 40, 5, 100, 200, 25); box = boxCreate(70, 80, 300, 245); pixRenderBoxArb(pixt, box, 3, 200, 200, 25); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 10 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Paint lines on colormap */ pixt = pixThresholdTo4bpp(pixs, 5, 1); pixRenderLineArb(pixt, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pixt, 30, 40, 440, 40, 5, 100, 200, 25); box = boxCreate(70, 80, 300, 245); pixRenderBoxArb(pixt, box, 3, 200, 200, 25); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Blend lines on RGB */ pixt = pixConvert8To32(pixs); pixRenderLineBlend(pixt, 450, 20, 850, 320, 5, 200, 50, 125, 0.35); pixRenderLineBlend(pixt, 30, 40, 440, 40, 5, 100, 200, 25, 0.35); box = boxCreate(70, 80, 300, 245); pixRenderBoxBlend(pixt, box, 3, 200, 200, 25, 0.6); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 12 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Colorize gray on cmapped image. */ pix1 = pixRead("lucasta.150.jpg"); pix2 = pixThresholdTo4bpp(pix1, 7, 1); box1 = boxCreate(73, 206, 140, 27); pixColorGrayCmap(pix2, box1, L_PAINT_LIGHT, 130, 207, 43); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 13 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "One box added"); box2 = boxCreate(255, 404, 197, 25); pixColorGrayCmap(pix2, box2, L_PAINT_LIGHT, 230, 67, 119); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 14 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Two boxes added"); box3 = boxCreate(122, 756, 224, 22); pixColorGrayCmap(pix2, box3, L_PAINT_DARK, 230, 67, 119); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 15 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Three boxes added"); box4 = boxCreate(11, 780, 147, 22); pixColorGrayCmap(pix2, box4, L_PAINT_LIGHT, 70, 137, 229); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Four boxes added"); box5 = boxCreate(163, 605, 78, 22); pixColorGrayCmap(pix2, box5, L_PAINT_LIGHT, 70, 137, 229); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 17 */ pixaAddPix(pixa, pix2, L_INSERT); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Five boxes added"); pixDestroy(&pix1); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); boxDestroy(&box5); pixDestroy(&pixs); /* Make a gray image and identify the fg pixels (val > 230) */ pixs = pixRead("feyn-fract.tif"); pix1 = pixConvertTo8(pixs, 0); kel = makeGaussianKernel(2, 2, 1.5, 1.0); pix2 = pixConvolve(pix1, kel, 8, 1); pix3 = pixThresholdToBinary(pix2, 230); boxa = pixConnComp(pix3, NULL, 8); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); kernelDestroy(&kel); /* Color the individual components in the gray image */ pix4 = pixColorGrayRegions(pix2, boxa, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 18 */ pixaAddPix(pixa, pix4, L_INSERT); pixDisplayWithTitle(pix4, 0, 0, NULL, rp->display); /* Threshold to 10 levels of gray */ pix3 = pixThresholdOn8bpp(pix2, 10, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 19 */ pixaAddPix(pixa, pix3, L_COPY); /* Color the individual components in the cmapped image */ pix4 = pixColorGrayRegions(pix3, boxa, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 20 */ pixaAddPix(pixa, pix4, L_INSERT); pixDisplayWithTitle(pix4, 0, 100, NULL, rp->display); boxaDestroy(&boxa); /* Color the entire gray image (not component-wise) */ pixColorGray(pix2, NULL, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 21 */ pixaAddPix(pixa, pix2, L_INSERT); /* Color the entire cmapped image (not component-wise) */ pixColorGray(pix3, NULL, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 22 */ pixaAddPix(pixa, pix3, L_INSERT); /* Reconstruct cmapped images */ pixd = ReconstructByValue(rp, "weasel2.4c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 23 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = ReconstructByValue(rp, "weasel4.11c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 24 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = ReconstructByValue(rp, "weasel8.240c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 25 */ pixaAddPix(pixa, pixd, L_INSERT); /* Fake reconstruct cmapped images, with one color into a band */ pixd = FakeReconstructByBand(rp, "weasel2.4c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 26 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = FakeReconstructByBand(rp, "weasel4.11c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 27 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = FakeReconstructByBand(rp, "weasel8.240c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 28 */ pixaAddPix(pixa, pixd, L_INSERT); /* If in testing mode, make a pdf */ if (rp->display) { pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Colorize and paint", "/tmp/lept/regout/paint.pdf"); L_INFO("Output pdf: /tmp/lept/regout/paint.pdf\n", rp->testname); } pixaDestroy(&pixa); return regTestCleanup(rp); } static PIX * ReconstructByValue(L_REGPARAMS *rp, const char *fname) { l_int32 i, n, rval, gval, bval; PIX *pixs, *pixm, *pixd; PIXCMAP *cmap; pixs = pixRead(fname); cmap = pixGetColormap(pixs); n = pixcmapGetCount(cmap); pixd = pixCreateTemplate(pixs); for (i = 0; i < n; i++) { pixm = pixGenerateMaskByValue(pixs, i, 1); pixcmapGetColor(cmap, i, &rval, &gval, &bval); pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); pixDestroy(&pixm); } regTestComparePix(rp, pixs, pixd); pixDestroy(&pixs); return pixd; } static PIX * FakeReconstructByBand(L_REGPARAMS *rp, const char *fname) { l_int32 i, jlow, jup, n, nbands; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; PIX *pixs, *pixm, *pixd; PIXCMAP *cmaps, *cmapd; pixs = pixRead(fname); cmaps = pixGetColormap(pixs); n = pixcmapGetCount(cmaps); nbands = (n + 1) / 2; pixd = pixCreateTemplate(pixs); cmapd = pixcmapCreate(pixGetDepth(pixs)); pixSetColormap(pixd, cmapd); for (i = 0; i < nbands; i++) { jlow = 2 * i; jup = L_MIN(jlow + 1, n - 1); pixm = pixGenerateMaskByBand(pixs, jlow, jup, 1, 1); /* Get average color in the band */ pixcmapGetColor(cmaps, jlow, &rval1, &gval1, &bval1); pixcmapGetColor(cmaps, jup, &rval2, &gval2, &bval2); rval = (rval1 + rval2) / 2; gval = (gval1 + gval2) / 2; bval = (bval1 + bval2) / 2; pixcmapAddColor(cmapd, rval, gval, bval); pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); pixDestroy(&pixm); } pixDestroy(&pixs); return pixd; } leptonica-1.86.0/prog/paintmask_reg.c000066400000000000000000000203451506303110300175170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * paintmask_reg.c * * Regression test for painting through a mask onto various * depth images. * * This file shows how one can start with a 32 bpp RGB image and * derive from it the following: * 8 bpp color, cmapped * 4 bpp color, cmapped * 2 bpp color, cmapped * 8 bpp gray * 4 bpp gray * 4 bpp gray, cmapped * 2 bpp gray * 2 bpp gray, cmapped * * For each of these, pixClipMasked() is used to place a 1 bpp * mask over part of the image, clip out the rectangular region * supporting the mask, and paint a given color through the * mask onto the result. * * Finally we do a clip/mask operation on 1 bpp sources. * * If you run 'paintmask_reg display', a pdf of the results is made. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixs8, *pixm, *pixt1, *pixt2, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Start with a 32 bpp image and a mask. Use the * same mask for all clip/masked operations. */ pixs = pixRead("test24.jpg"); pixt1 = pixRead("rabi.png"); box = boxCreate(303, 1983, 800, 500); pixm = pixClipRectangle(pixt1, box, NULL); pixInvert(pixm, pixm); boxDestroy(&box); box = boxCreate(100, 100, 800, 500); /* clips on pixs and derivatives */ pixt2 = pixClipRectangle(pixs, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Clip 32 bpp RGB */ pixd = pixClipMasked(pixs, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixd, L_INSERT); /* Clip 8 bpp colormapped */ pixt1 = pixMedianCutQuant(pixs, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 4 bpp colormapped */ pixt1 = pixOctreeQuantNumColors(pixs, 16, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 4 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp colormapped */ pixt1 = pixMedianCutQuantGeneral(pixs, 0, 2, 4, 5, 1, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 6 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03608000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 8 bpp gray */ pixs8 = pixConvertRGBToLuminance(pixs); pixt2 = pixClipRectangle(pixs8, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixs8, pixm, 100, 100, 90); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixaAddPix(pixa, pixd, L_INSERT); /* Clip 4 bpp gray */ pixt1 = pixThresholdTo4bpp(pixs8, 16, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 10 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 5); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 12 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 15); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 13 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 4 bpp gray, colormapped */ pixt1 = pixThresholdTo4bpp(pixs8, 16, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 14 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x55555500); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 15 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp gray */ pixt1 = pixThresholdTo2bpp(pixs8, 4, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 16 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 17 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp gray, colormapped */ pixt1 = pixThresholdTo2bpp(pixs8, 4, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x55555500); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 18 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixm); pixDestroy(&pixs); pixDestroy(&pixs8); boxDestroy(&box); /* Finally, do the 1 bpp painting through clipped region. * We start with two 1 bpp text sources, use the inverse * of the 2nd for the mask (so we take all of the 1st * pixels under this mask), and for the remainder, which * are the fg pixels in the 2nd, we paint them black (1). * So this is a simple and fast blending of two 1 bpp pix. */ pixs = pixRead("feyn.tif"); box = boxCreate(670, 827, 800, 500); pixt2 = pixClipRectangle(pixs, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 19 */ pixaAddPix(pixa, pixt2, L_INSERT); boxDestroy(&box); pixt1 = pixRead("rabi.png"); box = boxCreate(303, 1983, 800, 500); pixm = pixClipRectangle(pixt1, box, NULL); pixInvert(pixm, pixm); regTestWritePixAndCheck(rp, pixm, IFF_PNG); /* 20 */ pixaAddPix(pixa, pixm, L_INSERT); pixd = pixClipMasked(pixs, pixm, 670, 827, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 21 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixs); pixDestroy(&pixt1); boxDestroy(&box); /* If in testing mode, make a pdf */ if (rp->display) { pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Paint through mask", "/tmp/lept/regout/paintmask.pdf"); L_INFO("Output pdf: /tmp/lept/regout/paintmask.pdf\n", rp->testname); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/pancrazi.15.jpg000066400000000000000000002630351506303110300172710ustar00rootroot00000000000000˙Ø˙āJFIF˙ūRCREATOR: XV version 3.10a-jumboFix+Enh of 20050501 Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā…L"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ˟øøzdcqÅ>ã™Ū–P’1ŒzŌ‰pĸŗĶ&OÆĩbQPĘ'Œ g?…JŖwCЁŖ&FjÂđÛs×'?ԐɪäMI2ŨiˆËž÷ŠíØIŊÁ¤ĀrĮš™cÁŠj‘G¨ Db1ĶģōEJڝ´œö Âg#Ԝ#Āā Q‘ę~ĩ2ŒŽr)‘Å’0*R›[§ĒāúPĘčŊD'TxÁĻíÆsƒÜqRōsڀ#Ų“ŌĸA**ÁīéQ˛ƒ‚E]ŖÜsŠo•íV‚į¯Jx_@(ŸŲԞE9mĮ§Õoh QĮ€¨ éH`Sü9Ģĸ>ŧSBrhĘ_dBrV—ėČ[îÕЃƒJ @\¤-ĻŅMûņÍilë@‹$怚š,TŌ=Ič+U#éØR˜ø˜¤;™?ŲĒ{S—L*:ÕĒ8§ĀQ‘é@\Ī‹L€cę*qĨÁ‚ Kų ŧŽëR•7`h ™m¤Úf4ĮēŠ‹û&͈ÄQœú(­]ƒ=ņšzÆČĀv .bž…j[ũRĸâ›ũl[„­Ŋŧ÷ĨØ t w0ÛÃĐ0‡ŸF4˙øG#Ûʑ˙jŪ{Sö{$Đ:|;˙5xv0å¯Ô×PĢÆpõĨ=0iį,<6§øĨQ˙Ö§ /O1˙ WVˆ3RlõãԐ\ã×Âäž%ûä†pCš˙€ ė#ŒšxŒnëī@îq'Ã2ƒ#\ 4 H8{Æ+šŲžŧ{Ōųcį­„o NrVe Ķ1AđÕŌ¨ũōO’잏cŸJ_+9zƒÍ!Ļp áËüãΈ{Ļę90ūíz"ÄRGĨF°Žs´vūtįŋØwážíšã?vč×øĪ“mõÅz ÛĄ]Ûāđ>Ŋi~ĮÎ#R 9 .yßöN¤Eŧ”ŸŲ¨›H¸į­z0Ú¨¤qÆ8Fˇ‰” Ž{Đ#Î~Á¨Í˜ĮŽii|8d}+ŌūÍ)QíëL{XK“¯>Ũ)įš}šđžÆCų˙'—:žm$_Ä×Ĩ­œ,AÚ;tÚDŦŋ)bF0Ŋ žlÅĮX%đ#I¸|™Ԛô–ĶĄ`@Až{ûS•o€ į\.yÎōúŠöá!0÷Į˙ZŊčÖĖî”į‹ĸZ¨ c^žƒÖ‹…Ī?ķGy&€ĨÉ?âŊûΝ”ú¨¨˙°­[ŖR8éÅ œ™4ŋ÷Č J‡øâĩŪ7‡í1“äņ“Q ÚļH‰q“Ū‹ šÄyŅ Ē1ÜŠĨ3ö”üø×hŪ˛+ÄX8õ¨…ŦØ`)ȧq\äŠÄŨ$Cų˙!EĪīꏄí€ûŧžÔÖđ„;zėsū4\zŋ”¸˙–ƒš60č"ŨĪøWHū‡œą˜ũzŧ$€āHôs Čįö)'˜ķėæ$’0‰Ÿf­Æđ‘uÎ>¸ū”Įđ´ŋÂÁž§˙­EÃCcî?šüwP"b8‡>šÅk7…nŨ*}@Ļ7…īđŲ hË0ąôL=>b(¸ ãÁ˙úÔģ†xy?†æ"9 ?#H^Ø÷r}6Š.Ë ž_ĐŌŋķĐū+˙×Ļ˙Ŗ‘÷Ô}Vį‰đČĻ!~\˜ø˙^š;|āsŨ)LKÔ˙}​ũņŸfÍ4°ÉËĄ˙€c ŨĶđCR˜‡b˙†)Ļß'ĢúöĄ‡Ęī”đū†˙ž‹ųõĒC2ߐĻųíˇåL—ģĻ>ŸũjĢqߘ>W|ž'ęj9",‡æúbšv0ŸīšaŠ&VŽR`ö¨‰­Q˜QMŨIē'ŋzHø9§Mūščˆn8 h–#ķ}k^% ˍxP lÁĶĨKz”Jā`ˇ5&ĐAî:ĶNņ‚>˜ŠÕŪüõæ•ĀŽēt26~b3Ķyæ¯ŲE[’#ŸnDÁk’ĖŦTuĩ]ŗXJĀ]Ų9Í&äČÎ=juāÔ lųjĘ+W8ö„9PōzS‚įĨācŠ5.3‚šÍ0!T=ũjEԛsČāũi6ŌÃ8ęh8?QJ8õÍž´ŅƒëKœ ´`āŌF:Pzö¤lãŠviBä Đ“ÔT d`ôĨ Ž”đ1ÔPČžĒIč?:jņÛÔĀ)Đ:Š6sÅH¨søŌíĀĀ9 ‚`õü§ã“ßŊH9#Ž( ‚  2û­9WĶžM)€§¨ÚGë@̃ÔԐÆNqÜS‡<ûôĄ‡Í“@ÄP;ņJŖ‘žœS”`gšĨ’ ãÍ.2:€2P0i‘ŒĐ’qëO 9Š-žƒŌœ:ū\POLq֞Ē8Ī­4'w#úÔʀ‘Žq@ÃØiÁO¯áOÚ8äžÔ€yüņŽ;b¯J‘TœsB¯<j@BúœŌQFzw§œ‚)@â¤1ˆ #į5 UÎ=éUsČÎj] /|Š‰4ũ˜ĀúĶÂä‚GīĮČø$öāQŽs‚ =@Ī\4¤qŽBŒŸÔP0@^Ø?.=1Jcš Ā…<8€ ž2ŖųÔ¸§@Ĩ7oBGRŊé0##$ņØĐCļŧ•?“‘×˙×N+ō“´gš`E$ã¯Å0F2Ā‚A槍0§8Á<~T|Ŧüv˙:Uōʐ‡’âŸ"1“ŒSíVcŒ6î2ŨŗHįÆ8y  â,Í"Ä'ž Y=;`QĪ@Ojƒf_¯R4Ã{dcķĢO’­ĪoĨ5P6ŪĘ8ĸā4Dx.:SŒg9{ԁrŧØ~ĩ!Œ–‚ÉÎzĐ]Ÿ7Ė9īLÚôŠ´PpsךfĪltæ€!hAĀĮđ)<€Ÿją´öäwjA÷ˆüh_ʁ‘“Š`vä/ņVö`{Šj¯Ę{~” ĸĐā1 gFģˆ ˇ´ąÎ üx¨Ša‰Č<œœtĻ€Ŗ$aŽ6Œgšā@Ę=€ôĢė™Ī$āõĻ4gođĻ#(Û.ūGZŒ[F01ZLƒwNƒ“š„ĮĪNųĻ2“YFq?*d–¸ÆÕëéZ, ŠO,c$äĐ1Ū Ę;Ž*ŧ– ÷ŋīŖ[…ßAP:ŒôÍsôčČûß×ųÔM‰ŋA[Oč8æĢ”l‚`{õĻ2Ž‘ Dte'‚ÆēQˇ pqÅ0¨Ī&€ģ9įŅŲTāļ~ĩ]ôéWîŗwė tėJ…ŖÜ¤žôÄs&Î_^}6Ÿņ¨Ú9@ÁūĩŅ<[yÕw‹ž™4 ÁŲ&x^}‰¤"Aü >ŠÚh×<-Å01ŸŦ¸¤&@>ëū"ˇ|¨%GåIäFOŨĀĮ\Đ-{\`Nņ؏ūŊeHŦ‡k)S]ËÛ#qũk;Vŗ´į ĨĨmīš¸ËĄ.''žiëŽ2¨Ė=qZļšHyų8ûĸ´V5Aĩ@v´*4›Õ˜SŸß=œ6i'ŋzXøĪŌ‘’-[ Ę=ÍnĜsX–@4Ëé]'å¨{”=S§8Š äãwÍ9EHôü‚qžjvŸ@)wŽH<ū`ņԌĐy#­D•äĶÁÂņ@ ~ŋ/Ĩ&N)2zPŋxs@ õĨæöáĐĶ‚ķŌ€ŊépKSÂåzwŖŗHQ‘ɧúPŖ €1ô§(Ë Ö˜ÁõõŖĶëNŖĩ"Ÿ—Ĩ;nHüE •)<Ō¤Āė(œ=Å(1íüčũ94ƒ–éN8ņÆMŠ^ߝ(EËcéI‚X§­ęiŊ(ëė1špPZ@ Áœcڜķãš]§ž~ôā1Ø~T Ŗœv§¨Ã~´x枃ŸzkĸĪÄęJēí`8Č"’ÖÖ+[TˇqkĩIĀ÷&ĻT$Gz•c'¤1ĸ<õČüjE]šÁÎJx$ņNT9Č bžEÔĒyĮ‡ÖŸÁ°4ÔcŽ0 J@Œ“ī@ gÆĨefb;úPĘ8Ü 1ĘåI/Ĩ1—åĪJ°ËÛÜĶ$Œã¨ÅV#< kqĀčjÁBįôö¨™3“Ķš`@Ęz „ĻOQVvĀg&Ą`Gåڀ*˛ü¤pO ˆįĻp=zUļwAīœS6;‘Ō˜Yp 1‡{š˜ĻWũi›8Īj‰”đz—‚=jÉ`ĮŊD˟lq@*Ŧę¯Jžępjŗ¯=)[f1Šc/"ŦO4¸  įŠPŒôŠ]¤“Š­$Ėß*pž´Ōšp‹lIĻ HQ–Ē/š›,r}*R1L8ĸV7TŌՌÅFp <ĩD[šĄŗ^ecHŧRÉ÷ßęhNhg rÙÔVümëX:wü|VôCäëŒÔ0,ގ­Jƒžyėj‚ƒ÷GëSĸP¤1‹o‚Įy*Į*0)öđyAŗ#9cœąæ¤SøgŠŠ`Žx Bä¨а~iûTĒ”€ķ€*A&21ĶÚ¤Učhō×9įšE'Ŧ7”ۜS‚“L€aÁŠ“§&€3œæ—Ĩ 2GZP§<šr*U^jņ֤ۏΓ)ø'>Ũ(šä€8Ĩ\ržiBt÷§„ãZ@&ÜãģR…õÍ<€ĒsHÛĮJ`(ę4ƒ×¯Z <㞔€PƒĮ'Ō—=9Ļãڜz@(Á#4ņƒĐĶ2ëJmĮ<Đēį4đ3ŒĶ0G?†)Ãĩ.G8ôåä€3ŽŧŌØĮŊHZ ŸéOU’:āR ' ŠqÍ 94đģ¸ôĨ †u5(FûP41cÉü)éwŠV2Hã5*ĮĪĻ) ‰c"ĨQšxëNUį#ō Áäƒô§… ûd͆yã4š8č=ŗHb%ŊĒ@¸\Ĩ*äā€1ŽEI×ĨĒzr*PŖ94̌ŽM8ā(ā@0&:t'šFQŽ”ņׅåĮN”Ö$>ĩĀã9ŠN3€=):ˇ=r)¨0Ŋ;HŲčxëĪáMŒeFzâœ$!IÜ(ÎHĻ7žzTŦpÃvrj6Ūx'ĶŊ"¯$ØņŠPCšw ÉôâœĢĮ' Đ-–ĀúSqČõ={ÔŧäüÜdSYyĸā5PÉ9äŸŌŒã¯$˙…8áA89ö ƒž„xü¨¸ Q€ŖÜR.xÜ10z`°Ī¨Ĩ#åˇüéa-ÛԘį=ĪŋJ1ÖĪą#ŪžT—öį‘M΋ĐvÅ4“Ķ‚OCRD 8Čāâ•ņætãë@Oķ¤Û“ŽĀéSŽŌÜgŠčš¤!FqĪpE&u…ˇŸJGAĪ_Z´W=šzÔgåëÆ8Å4p0YŗĮ^ 5ŗ€Øįūt§‘ŽƒØŌ¸Ú…ŽN&2FO\Ō÷¨ƒ įžyĨc׊|ƒoN­4v'šR<œ€iņŽpHÆy *äsЉ†9\gŽĩ1n21ĐÔDādâëjaáŽ:žüĶw}OJP:zŠVųU¸=úS@T$ˇAHAĀĪZ•Ęņž$ƒ¨ã¯zb+sč2sųҎ9´øˆ'œPÂûS#ĩãgŽ´ņíHä“Ō¤÷¤ãŠ&ž9 ޏëOŒdgښ@9ė)Ø

īR,c¸ Dô÷§ČĪŊHąįĨH…Ā!‘ˆų§ 9úšëKۊƒÔTĘ^^õ‚?3RŠÆ1ԐÃh sŌ‚lSFź$ĐÂäqH‘Ā֜ŧwæĘ€$ 9A$æ¤Ų…8ëQüÄd3R¯nįÜŌ Š@俜v’:ô¨ÃcŋáNÎAbpãqįqÅ(]ŋĨ0ü#Š$šp9'Ž8€VB~´€|Ãũãü¨ ģqÉæœŖ;ˆn¤ūX=@Ĩn#Ž?¨Ļîä`ãnĘõëīE€FÆ}đ•Fq¸g‘*@A'ך`|ƒũ(Ŗ FGĘõ§HÁS'ßņ§đێĩ*qĶŋ4‘ͧN3Gz Wuę9æ•>`¤ĐŨÄĶHļŒ÷É?JqîĨ`ãž)XD ˇ pxüŠÁrĶå4Ē>n08ʕŽØĮ (°… ōŒžøŌ㟔ãښŒŽĨŨœSú¤cŠcŸåũiÔv¨Û9ûÃĄ  cÎ üiÃæ0\`u¨“’:õū•  āã­&ė<í g<¤bĘK:…Q՗‘S_sN@Xdį$öŠY1. ‘Į4’ŽS˙­Ö§x8\ŠîTāĶYdÆdcĄ?˜âšQ#ÚO¸ã­JŒŒđ§<8`U°qžEIŒĪĖIč}ЁÜGŠÁXķÔi˘É'=? P>OjfҎ$gžĩ $Ôė äüĀķô¨ŨT19Îå@ ‘éCŗcåķ’iÜŧöR•ĘãëEx98'Ū v&O쓐sŽ*ŪŽ8ĒŌ0Ú¨ ÁbHĪįNĮËĐū4ØÁ8nÄSÉÉ kqÆiŊēôč*_+ šēûS ã‘@Ø€ŸZŒĢŌĻ#ßņϜm+LElpŪ¸¨Ęq“õŠL{Á?Zk('ŒPv5@IõĢŧú{Ôl03œĶ\‘úÔl88ЈÍ1—Û­@āúņP•íÖ­:€1ÖĢ•õĀ€Ž2)„`Tå@ÉÅFT‘øĐeũ¨˜uŦ)mÜ"ē™>ŪTČäō*Ћzf€+,U/•ŒāzՁééŪžôÅ!GæËU‚0žÕ*F8âŖˇ­"UÉĀŠœâœ nöæœA.1ŒPœw§cS”gi ž˜¤1ŧįž) õĪJ”ŌŌ€¸ŖĄ­<`ķßĨ3$ĶŽqž:÷ c¸ÛŒ`P†Ŗiâ€Ū„b€%.=:‘ÖžŒ8jÃøÉ˙õŌaIĮ)¤œ`ĮëLį¯JIŊ(U#ЎpiØ%98ĪĸFQČĪąR)aŒúŠC: ftÆy̓íœū4ŦpÜqÉĻYĻX}ŖÚ¤ĩēŽO•dšúÕmRŪK‹Pb?68ŨĶ5[GŌeĩžK™ŪC,Š>ņã#Ķ~‚ŸBoЏ#°ČÉ4Ķ÷8ã¯ãN8éīÍ.ĐŨqøT”FÍ´@æŖ’d‰ہ“õ§ē’Ø÷ŪāPųˆ¸g4…¯ĘĶŌŒ`õ¨ų ÷ö¤–$uɧ Čč1MmĀŨzšPH$Ā>žÔėņޏ¤Üv‘ëH3ĪA‘Ö” ͐É Ũķéč)ØÁÎrÁúԌ ņžzcڔ¯Ëø€ĮÄū&x$žA8Š ät<Š…Ā Āë@„fščqL. ãŽ; ^āŊÁ§GĮúP2xTí=sīڞ 0;ˆĄ§B¤ÎĻXB.[‚@,#c8sD`ƒøŒTŠģēô9¤~7pHHōš8<ÔiØ$‘ōņīSí;2=3I°€2N9éL Ą$$#¯9Њ˛ķã¸46KsĶi¤ XķĐsúSŒÎIŨí÷[či €Čcš‘‰ÉŌ™"d´úį4;åq´Ž BWæ$õ'ŋԜ Ąã ŧđz̓+ōrŋ4HÉô§pTõéšB™$cž)¯•úqúĐR€ČĀ5XFdÎãÆX˜ä:T@ō8[ h.Ŗsøö§;(Nqœcõ¨Y×'ãŠ`HKcŊA&GŋŌ¤ãzũ)‚>XŽ˜ D*!z“ĶŽ”Ž0rŠ’"æĮœuÅ0+ã9¨ļāāÅYeÚŦIôíQ8ĪzÆzt¨˜īV6üŨxÉĻ6rxÉĻWxÆ)×ĨXn¸"ĸ ˙*ŽĘ1QƒČĢ(ĀúTds×ĀŦĮåâĢ’sV[ņÚĸÛ@•É5.@ČŠČāÕį<ͤ‹Ö˛õP˛îą˙<›ųVŦ§ õĒšcGŊoúbßʅ¸™į}h õ4VæešŠ–ÃTR˙­?…IûԊFæ„>YûUžĸą4!û†=÷A[ˆ f6LŖŠ™ž´Ô_Z˛Š1@„Ž>zÔË*.Š”{ĐviØÆ=ęB8Í4z}( •'ĄĒˇ÷)khŌ6F}?Ĩ^ÚG­cj¯!Ŋŗˆ`Ŗ0 1Ûp  Ž™nŽÅ<éßæ.øPqœgĶŽ?úæ›­Ū™€\ ?ŧl‘’xū€UËŠ&HC¤BO_öG­T†°áRmä™@–ô?Z@>Ų#ō.€†*@ÜvŽ})úZÆQ‚[ˆŠĒĢA'ÜãwŠm`ō­äD#,IāúS´ö•¤™gŒŦŠz SŸē}?­2 "žg.NÉĸá‚dŒã¨ę(Ķ^h¯fĩ—î†*=IūĒĀũCQj@žRđ¨uˇÚί9ąéē„žN§nņįw™î:ũå˙Ų¨LOL dSúRgëŽßJa<đhÅđŧõ¨‰,MßJj.>RzųÔ͍ÅF2:ŸÂ ÚFN~n(ŒŽ2iĄŗœđ(fÎ9Ī9¤ •āš@JTàíNqœŸöhŒå—$cŒį¯J—rtëŒ EQƒĪsü¨=@é˙ęŠ dp@&œËķühŌúU9ˆI@į8ĢíŸ^˜ĀĒwŗĘ˛d2$@Î=*hŅ™‰ėõ¨ĄęF9Ģļé¸ãØP!č›CgŽĩ:¯Ę9ãž)Y•wg¨…ņĮ>õ+ߔdTRĻ_ĘĻlāįiԚ9cŸË,d{Kž0xÅ#Ķ<ā*]¤ëė) āįšĻ„Va ™BGš`Xž„cĖūU:Ļ[Į<ŌōĮ'œd ‘psÁĻ3D'ŒûÔ2ŒgĄU–]ėôīUŸ>XʍĮ¯įE€¯ŗ$sÆM,… Œž~P9ÍM°2j#ųˆãŨJĀGįBˆŋ62Ō23JH;mØõÍ!۝ŊFGz jaĖk÷{zsM "VĀÚ:sÍB2NîGP eƒOojz… ’6įđĻwøAQ›pĮŋ5p`ŠëÚĸxČpA8Čõ aUˆ$gŽ{ô¤aŽqœT¤n‡&›Đe@įŒFiŦp§žÔđŨš¨Ž@#åęzĐ\Éž”Ō™ÆOj•A#æÆsØPņž9ã‘@Č6 õÅFę­Y(:ú †E$G¯4­´gw~•Ŧ:Āq´TLŋģĻgĘĄÁÁÍY+ßĐTl¸äô4ĀĻËķ…ŋN•e×­BËĪĩ@ŲÆ*&Ȱ˚iP(™BjžąüHī%éWČ$Š¯ĢŒiƒ¨0?ōώ<ŦõĸŽôVæeÉe&žŸtĶüƞŸv‘Hč´EÅšĀū*ÜOzÉĐÔũ”qÁ&ļÂŗ&SīSĢdņÍB€Œ‚*dSšB,!ž'ÚŖ )ãŽ(\ԃ’) *@ ŠpSūqYĢ +žCޏ?1ĪŠ ’ŅR 7 Tʒ÷Îy5iwī“„e8یäũ}{ÖRélāîŨÉ꥞oo_QRÚŋ~ąM#‚ĀėXƒŽÄõë@…´‰ŌF,°Š.R7'$ž§Ūĸ˜‰õDEåC/Ėuų‰ũE5š5Y–I$•Ŗ I cįžqÜũ*ΛgäÆķɓ$™Á#ķîI'ō¨É*XcŽØ )5&ÅßŌŦÃĮ˙Z€ô9ĢIJ‘"“ŠzœąĪĢÛÖ¤ÚNύäūU*ƒš@&¤āc=)øPŪ¸¤Ú įs@ ëČž‡9§*€ŅiK•G …üúP‹÷~īëFzœSAÅ!nOã@ ԃڌđ&ė(ôîšúŌ‚sMŨÅ&hI zĐ9n”™ëȧœõ¤ÔŽMHFHĀ<   ÷Ĩč94 a$įøE0ŒôS^:úĶ{q×ŊC Ŧl į“š~1ÆLō~nyíNã'ԐĮ¨éÛéS ų€^}ȨĶj$q@Ƹ>ž•2ŽIČ8Ļ.:āR¸Īz@8íĻ*&<điÍČĪCQ0îyī@ÄëŒį’( “ŽÃ8ĨÚ3ŒšUōũh<ŋ˜í8Æ*UÜO=M<&G\œ v~cŸåMaķįŒõ¨bprNy¤-îsĪō nT œc“QˇŨûĮi$SÂ€O´āFĐ;qJã8'žiB–ÆqîjP§'ũ) Ēː3ŌĄ#+ŒšļĘĮJ”điU—Ķ5QĀU–\9ĮJ¯ËLb pJē€õ`ƒŒųTN¤ŸĨ0*Ę WíéWr Dˡ¨ąZĮaÆNõ-AŒ`ûÕ]LgMēĪC*ļO5WQ°¸_XÛųSBg”zQEš™hõ5*}ĶQuÅHƒŠ’ŽŋEųlãuæļ‘{Ö6”¸ŗˆį°âļŖlÖcdĒ*e•š™Gõ¯Ŋ8-"Œĩ2Š=x *LJ($Pvķž”Œ<đz͈?AP°'ŨhÕēNŠ 7¨äˇõüšũk8ĮtÛ <ČÕ˛¯¸g?Pz÷ÛZãĶÛĨHˆ1ŽhŠ—";eļšŪWÁ/$|ķîôD'–ÆĐB’X…ΎĶų×BqÍ.ÍĮ'ր1ôũ`>儞ŗn’FGL“Éü†=kĒdŒr:g,qôįëRíÁöaZ™/JLsĶ4åPy€ c×ĨH:ä‘Öšƒo8§¸džháyÕ2zbŒķN-Å (nƘŽŠ¤á˛hBIĪCL$ãéM'"“ @–ãŪ“=ĮĨ1[p$öéOZpšũ)@$Ô/QOĪSڀÉ ã>”ķGŊ NN9ü*X†øŠjôäSĐa¸Û@ǜąÅ+s@'ĪĶ“ū4 aā`M7öÅHÞÔŪ9 hb¯8æžâF“ŒrOOëOSÉôæÅLîéÅ]ŒØãV?ŊĶ#ŠšĘô  ,p;Ķú”€ā“Ô͉9¤1¤’Ŗ5…ĪLŒ÷Šų?ÚâŖ*XķÆ3@ã ôíŌ”dā`ũhd?• īŒQqÆ3Ī­.HÎ1œ f›É9úĶĀÉΏ¤ o™FzãԚĢ÷ŗ’iãˇ qÔũh9ëõį4Æ3ÜôãųŠFā}JĖ{=áPą ŽÔ€oUo_ūŊFįZR˙/'¨ū´Öcįց nNqØ*P2~īaA2ÔõÍ>%'ڀ%AŽIįŠŠŌ䌐r3R„P9ÅH#ÜĮŒN1@ôÉëÅ'Ū#šŠų‡l㐃åœ6­+€Āw\ÔaāOzvį•ŠeÁ)ˆb§#‘S*d’9Ĩ5[† cœz—§ =+€*?,šx#H&˜]U•;š{điĘ=E=SĄâ”ŽFÅÂāÉ§ą$ ;Q°˜mÎ>é$SˇŲ8Ær(“įĶW. %8ĨpY˜p9˙ëĶŅ_9 ĸ„R¸œ)Ø™‰āf˜ d!†Opx¨ŪœũjgŸŽĮ¯áQääúŅp" Žv’rsÉéíK&įÁz~”ų8¤aˇ4YŽ ¨Ÿss€;~54ˆY”ŽŧSps×\d/¸cäĪ5ÖF!†\dätMBÃäŖ& ĮNëK€Ģģ_Μ§$Œc‘üé3”éĶüiˆF'nOž(ÎXöũj”üéĀ u˙8 Éëœb tq dorjĐ8l‘éQąxį>ôé•ãĩ’r8Ŗg'Ĩ aŒųĐ1Jõ<ÕvAČëôŠ÷c˙­Uœä=ŗÍ0!uČ ŽŨ8Ģ.ŊOę*0ĮۘŲxÎ}*6īõÍX+ĐāÔl ëLEGÁīô¨HĮ^}ęĶŽx¨(ģ`ÔM’1ĐU†*ĮN€+°¨ß7ú,˙õÍŋ•_`3íTo†-gĪO-ŋ‘Ļ„Ī*ôĸŠ+s2ĀÎáŸJ9Rj üÕ,yÁŠežšĩŸá¯¯5“§Ü'…k ãĨf6Z@HĢ=jŧ|U””ˆ9§ô) ķJIĻŽ 8ķQ;ĒpxĘĨ'°yA ĐUžĄ,úĢYĨਟ~Lđ*YuĢ+{†äa ␤Tíõ++ FũfrŦōį;IíN}GN“Yˇē3&ÄC—*F[ˇj››¨]ėYÕî/ėâ[‹_-ĸį 9įĮĩkYČfļŠFĀ.Ąˆ¤f˛5 RÆm6hÖåpŪˇlĄŲkn‡Ø8ü(Z“$ÔuE…QŠUQN#h?AM'äÉëTb+'x¤DÅ<7Ö?)ëžÄPĒŧŠqą.ŧA§YI:ÜÜ2™cr#$`JôúÕŨ;P‡RļVÎZbĒÄc8ëøP'KÎŌN)„ŌuīHŗ*iîsLmÜíašS“ך œœ`güđkœ‡ÆĻ1įA7š Ȍ=š&ē<`ƒŸ˜t5CMŊ˛ģ‰’ĖĒė$ ´ÃōŠf´íkÚåk?XÜL°˛KŒvŽđ1žÜƒ]$Œ‘ÉôíYWOau}Ÿpė& &Dãž}zÖ^ž‡Ŋ$*Š:YôéÍ;wČp) ĮOΓ'Ē3 ’8ũi3ûãiIôô gŠzpĸ¤A’NOԘš€jT”Œ=>´ cuëJŋ7˙ZšÜōM>1Į†MÚ@ĪzģĀāUHPŗ šē„Ā uÅ8dœįšsuëHŽI9öĨlcŽM!ŒÆN1Å)ä{w¨T°|aJ•Áį9¤=ɀČČ?"ĻO“Žjö§ec=ÕĘD—wĖ~ƒŠŽbķĮņFH˛ŗy~V”íĐã“×éPä‘ĩ:'đŖ˛2(Gš|Âģ‚į’ˇ×4õ’3Ō¸O ęSkŪ,’öā hlö¨NĀ0õ9ęMw‘ÃĻOj¸ĒĶp•˜¤|ŧz C•CŸJĻŅŽÜt4ÆaÉëč*Ņ‘YŽO€5 đ °Ųf ÛŊU—Øgš.07/Nq֑ąˇ¯zv8ŽOĨ)€1Įv4Č;yÆqŪω@Ā4…GVį¨Šâ@ÄŊ¸'œPÂ"ÅWúSĶp'FZz¨ ų¸50‡å$üTÜef_˜ķĪN”ōÁbOĩNĘKãô4Ķc\ņEÄB#W9úĶÄH+ëR ÁĪLį.Ō#ŋZwUBŽx˙yaŒžM3nŌv1äƒíRîIî3I°c'¸í@Rš8Å.üĩrM.Öeœ7|QpŅA`zRē2Œt>žÕŨ>§Rl`qœōIôážī~ôĶË ūt¸$¸ā÷ŠîčyúR•ĘœŽ ŅŽF~ĩ&Ōzž˜Ģ¸ˆŲqž9?áQ*ׯdĮ ŊÍB¨U˜œķHļy=?­5”؟z´āN;t¨äUۆœņøP,qø k ōØûņ­KĩBNx¨Üüœ /˙^€Œƒ¸ö5¯Ę:Žyö§H7|¸'ô’Ũ“éŠ{ •Đyô~t y}:˙CĄk%ü–‰2´ņĻíŠs´nĮ'ņ`.?iÜvkqČĀ ŅįN Í6@F>šĻ$ķN*3ëŒsR3ŽœæšrÄķši`OáL$į§sRaK`qšcIąĻŒŽ}1Q1čĨ<7͌s“Cˇj­!ŨĐ ‰G$â­u=j:āö4†Pv§ĩBAāgšĢr`uǤw÷ D=j&RsÎ5a€ĻsPēœr8  ˛/Ž• GĮNĩq—ŌĄ`qŽiLĄÎ1Tĩ5&ĘaųfßČÖŽŌ2NqYú‰"ÖaësøSBg‘vĸŽôVæe€2Õ<|=ÅEÆxŠĸæEâĨ”ŽĪOËQíZ‰žšâŗė>UÛ­j*äcĩf6Iƒx8úUÄËzUH×o úÕ¤==hÂāv§ MR3Í)Æx m7ę1NéКBší@ ŽjQ2ČĻ„ÁÔ̜X~ÜĀ‚-}Bņ.yË)˙\Øã8üjÜZ>ĘAŠ÷äh´Ņ Yî%ŧ†9¤–Vuį OŊgj—:mš6ļvpIrx$ !OĶÖ¤éŠr~ë4gđæŸ$ öqåKÕXš#>ų5Ņ* ÷8éŠå4o ä-Åú÷Ęŏįū×(ũŪ=ŠėŪāŲÆHįԘFzÎĻ`9=8ĻmuĻb4䊜ļT qŪ”z杸zķŠsēĖm`æįûCRũëÂņ…LŪgōĢ~}ú"8’CžWaŧŠ8Ü@ûŧ”Í}‰–ŅVNX‚/…ŋi¯ŨŨ.5he*î îOáŠÚ “Ícø\–ŅäŲØ<îŪcƒ—éķdŗd{ƒŽ•rÃ[ĶõieŽÂé'ōÔ;mÎ$Ī¯€-2ƒÚ–5!q‘ŠWīØ})ˆNîœTŒˇ Ã~uyOč*„$îįĨhFŖšRä íMĪ?1äú ›hĮ_ԚĀĮō h‚BNv’H&ŧß\Ŋ×ãŧžÖKˇtA—ĀĒĒž™Ā~'ŊzC.wsI$AÁR 0séīQ%sj5}œĩGižģÔg–ꉚ>SyŒ.õ­ ø_L’Kß´FĶ´Mīl ԁõ­‰|7n˛™ėf–ÆcÉōą°ũWĻ*¤-Ēh>x¸ŗ„Ėey­¸q‘ũÃôúT$Ņ×*Ō¨Ŧ+m =`Ū[,0DÖŪI†4Ā'vsųqZā‚8ôŽEׯŦ\ĮnlĄ…HI9ny˙ë×B>fį߁TŽJŠIÚC™ˆ<h?7==ŠōIÚpzUČí䊪!ŽÃoõœŌŸ3jĢc=kIÔa‹ՙ…r6įđφVTųoR)Įpc&žĀ㑁čNj#Ãš DĻBWvÎįœâ¯ÛČ7gËĀé“ôĒJ0Ā8íZĐ|äíyÁ'9¤Ø G\ņŠ{NmŽ*E…@€ĪTe2G°ūĩ!qŖyëÔâžĻ2yÜ}Ē"€7 y&œĘŠ77=ū”Ōc$.„€s€;ũj9ĨûŖŽ ¨"¸ˇœâ#Ž 8?ĻjFP bN{Ņf+‹…R$xãŠpuŋãQœõ$ž*48lœķې\Ÿ(ķJQ('†ą¨3¸ķĶ#­&īŊôĻžûÃ5u,#ĩ1÷ë“Ȩy=+Ë”ļã€}ę…×#5ESįãiÆ*Ėp‚I!yë@ ¤€ëN-÷€íQ,|Œt=rhh”ã ͚`JJœâ@:ķMf#ž*&L#chĨ"C-”B}qBB¸ĨԒĪŲ1Ų­Döņ'!@=Æ)%‚•(9ĩ;ȝ‚ ''ŸZl¸ōÃdŒëP2F%E#.ž•)Į“‚Ütųi0õ2íõģiõ Ë&9-˜g ĪĨ_Ö[vũĻ Ãˇ˜š?…s~‹RÖu ›Š(Ų—Ę1āîųFī§=)ƒĀV%7ˇy(ü?:›ËĄ×ėéZüÆŨ¤ežš4v°Ē^KnļŽĻīįŸéZe0XqÅsš/‡$Ņ5™šÚC$l<š†$qų ×Qˇ8mŖqĶ‹vÔβJZ;•¤\zûS#×ëSH¤ į ÍW¸fXä1&ųl.pã gĩUĖ’žÄ'i$ô5X~ĨSŌŽuŗru %ˇÉĩvœįŒãđČäpjķ)1éž)­AĢ; #úhį9įšp9ÁéĪ5 QŒûZb+¸į#ÔФA#ãzš‡¯ZF$ž8T%yëøT™É Jf0œ›Ö€"‘KˇLc=ę"žõ9ë‘ÔæĸqL `Žj6^*| ķQIqځ˛tæĢIÜ ՙ=ĒĢģžh3’1ŠÍÔÛiō0ĸ&ūUĒTõŠĪÔr,įĪxÛųkq3ĮŊ¨Ŗ°úQ]e‘ÔՋa™ãíįU‡Ū#Ū­ZĮĖīT˛‘ŨØ(1jŌqYzy!9­hųŦÆÉcQß"Ļ ã4ÅĮqR­9H㊐Š@=ŠĀcé@€ Ķ€öĨÅ/~”ā=GjoÜ#×52ŒŽ”ÐčHíHg)¨k×Ķ}’Į(ŒvîÎē÷íZÚ.‘gg‰åš)nV ĄöõĢvZ •”/!%É$´ˆ įëSLnZÎû/øT¸õ:=¤mdIu¨Glđ"m–YeXņģ äֆęO\W8l´”×,ãĩ!.ąeŒîāyôé]xčh‰Å$Ŧ/)äR¨=M6CŽüûĶ2b7ü)ÃĻOáÅs×ꗗˇ kqo0>2ĮūUĢawöģ§dräǜãœwüi'rĨ +jÚl—ŗG4ĮŅ+&fˇŽĶƒĐ‘Ž@įëSiÚeޟbO1cXÚP2cšĮ|æ˛uJSwĶī!’&Ed…ãŨæ`…'qėknÁĻ“Oˇ’yIŪ$2:´ļҜcđĒ ŗßĩg‚E(Œžô„Ō:L Ō÷æ "ŗŽ Č#rãŪš‹¯ÜF˛ĘĘú˜da’B3ƒÎ Šęwō>_­6;ˆî7yRŖ€F퍞} 'cHNQÖ&^“sa5úÛÅhašŠÛæ,›Ž>Ŗ9­Ā3Ūŗ ģļ¸Ö.cŽ5ķĄUĨ ƒ“ŒûŌĮzH*=GÁ$ū>ĢmRö={ėģĄō‹ĸ¤{Ū­ŒļũØRxĮ;}ëaˇˆØ  ā œdöæšĻT>"YL°ŖĩÔ~l~|lCˆ×øJnôīÚ­ZđNG§ˇoN´ōsė)Ÿ)ät§R‡§éRŠ`ÉtŠ~t‰ Į<ž:šČņ•ũ’|āD~|E˜ āîį$uÆqŒVģ/Č@æą5Ģ ûÆÅ´–ī›CG;2ėÚIŪĨyĪ==€Ą ]hŽō$ˆwĘÅĻP aˆÜĀ@Î8ÆzVO…UÖæG!v›8@eĸŨ÷ģ2Ėp}JÕĩĩ}?ÃōÅpņĢĒJî噗$ąÜsĪ~}*Ÿ…­ Ŧ—QŊ´0:ŰRw1Á;ˆčČĮĐũ)°7˜ŒäõĻŠę˛ęv3ęRXĮs]E÷â ķ ˜éõÅ[‹ˇzԌĩšŊ$’zUHpĪjģ0yë@É7ėÉ¨ĖĄŽAÅ?}jŠ­Éæ šxáå‘ŅQAf'Ԉ¤Yd2ļ °čF*Žģė;ķōãėōuãą¯9ŗņ^­cj–ņ˝|!‘9Ķ52v:)Đu"Účzŗ: `“Î*e 2’3ķdW—§Žõ@xm\¸ÃúÔéņPũšÛ>ûŋÆŖœÕ`ęÅŽŸ ļ­{ĒßhØ0ČĀsøķZ@œ{×+āyŪōŌöęLy“\–b}Ŗ×ë]W#šĒŽ¨Æ´\gĘŪÀÉ9_Z0ÃoĨ)e~”íŲ$įF$3ëųÖz –ęø‡jŊ/=ųâ̍˙Gč9ĻlÁÅBĄIÅNĮĒôÔKōķŽ3HEˆ“Œķūĩ=ū­mŖ[,ˇ.Q *­ą˜įüĒ 8ü>´Čy8á¸ëÖ¸]rí)渚{’°VĘ˨pœÔÕF<Ė™JĮL>!éŋ{k¨)8 šoŠ7uįščžßo&ž—ŅąkyQdBĢ’Áš\Üäq^ ļ{‹“ ÆT Ŋ<ôâ}ëģTŊ—Ãō§Ø…œ6vđÛ[Æ 'įų÷:WŽäķV鮄Š2-kÄēíċgsö[pJn†÷ųúŸ¨Ú=3ÖšÛš,¤lÜÜ=ÄŠÉ%Ë}˙ĪãZ:tךÕĩŦųōĘ6Š ŗu ž¸ęO°ŽÄÁm"ļTRšP‹Žũ=ĒŨŖĄlōéKL˜Đ!ČûĄŽš9įņĸ=būŅĶû;Wģ‰8!$mĘ@=Jž1ū5鍲X_͇r;rŒ{MsZ¯…Ŧ/ĨŒ"9å•${sÉįéBqz0×rΗņÔ,zÄUN ŸãĨ ãÚģK;Û}BŲ'ĩš9Ąqō˛?Cūx¯Ô´ģ­!ãYŖŨ#‘^SëPéZŪv“ØÜ´,XĢŅųį đztĨ*IęOšîę¤ļsÁíéOĀôč+‘đ˙ŽŦõ"–—ÅmnÜí˙,ÜöÁ<ėũMÕõ›–šÛQŌæ&ŪŪo"XÛ%8ëŒdd÷ôÅcČîiĖv 05˛Át’XĶpXdg§æ°aÖuY5gĩXėöīÎÆl ÎxÁ8ôô⸍rū-gÄm°Iã #9ÁÉ`p¤œNžôÕ6Ø9$zäC8Ā=ĨZTbæŧķCÕŪ6ŗŠ9ũ˙RŊņ§Rˇ6ō- 52>lûķ]h¯85ÎxSŽĄs–Ūæģ—É#'§NĻēØbxÆqš#ąåĩ†KŒyŽnëA–Kë™âÕn-įģˀņĶtÆDįŊSkë¯ÚK¸VeRˌŨ^MV–&›’~éKIĶgĶ~Ōˇ7MrŌK¸;œmōĢá*q˙Ö5[NÕSWK‰aV0G)Hä'īŒ‘ų‘WŨYzqŸđĄ woR˛Ž[ĻjŽ)áv‘ëÅ$™ā’EQY1œ{ĶXÜh™ŽÜôô¤Ü~”ĀˆŸ›v{ Fc°…9øāú c1#h ã=¸įųĶ$~tāNßķëI1ôĻ%y6*6QģäÔŊĒ29  ė:dâ #$`æ­88 {TKĘs@ˆB’&ŗuA‹+’zˆ›ųØč=ë#XaũvO‰ŋ•5¸™ãx¤§ C]eƒ÷ĪÖ­X ŨĮūõT',M]ĶFo#úÔ˛ŽŪÄšõ­HŸf¸‰q×ŖņĀŦÆÉÖĻ_­DŖŒÔŠJö  A4õëLZ˜xPœŠ•F9Å"ŒSķšUœšGq3œáFNqøS€Îphlw4 yœäŪ*ÉåXZÉ;ôÉūƒŸåP‹MoRœC{uöut.QxÂôč>ŊëpéÂC-škiŽ~x›ũAāÕiúŌũn¤Œ] ˆĄ0ŽAÎŌyéÚĻĮLe{ĢQlŧ=›¨[OnYĘī37\Ž:~5¸Ú{“ŠĖļÕĸžš[{rXaš@ĀĢ!z†ĶTži/fž(âąļvz’ĖûO&ip•{Šghė„ÁEmųŽģ@Į~Ƒ™Ķķvü?ũf¤ę:S\wįĨ<`OĨ ą"ã Í;8ėsHŊixįžhėŧãCUŋ“OļY–Ö[—iė Gä’@폊Ŋ_cōqé\Įˆ-Ūí/¤’ōG^vgŠfŪ(AqךĨå։oh!ŒM Ĩĸ‘ÔŒí8;ļq‚}ž˜/E[€v´mƒˇûҌzõįŠąh|]$xŋŅ–MĨr Č’?3U4ģš„SZ¤ęn% G,ĸWUlĢ,ģ8F>œS°tšV_ȎˆæĻt)0؀“Č\dˇ¯Ė@9āWWK įņŦ;JēļÕ ĖķÛŧ{\ˆHĄ°9UgeŒôĮZډqÆE&4[ŒœjÔ õ¨S€9ãéÍYŒŽ3R1Μ’ ÅFęŠ;­5Ô`@ĩ!¨i×eĖk2ˁ Ķ-´Ø--"ļH“b 2Œœw?Zŋ‚ä­8đ:æ“W-IĨbØmļœÛBÎ ciZk‡clC‚ÉüqÅhŊĮ•ĒØO{nĨäļͧˌ§†āđE&Ķr•›ą‰Ļ .ĸVŒ@÷ *`Ÿ‘p8$ũ+B]BÖ=;íÍ<dUįg+ˇ×#ņŦOÜ^^øvy.ØËrZE€3…éĮŋķŦh4ß[ĩ¨=‰– ™ĀČÎ=ņŪĩ]˛›ˆĮb=+Ty֑ËŖ120OëMZú“+ô9í/ĮwĐÅ7ڔO•L88ČyÛųęĩ= ŋ„V֝AB7>ƒõŽCSĶSLÔÖE öi˜4nP”Œƒģāî9āã9Á5ŪiĸöãM7Q9‚7RĄ"&bĒ2„Žāū5mĨĒ!&÷<ÛÃŌZŲx‘ô‚(^OõÂŠÂäAÁë]ëŨYęúŨ¤QĮ-–ÄI99ãŽŧc!™ēÂąuŨ7M´hžäÎąÉ"‰#šJ2Ia•=†FĨYđė w7čû÷ļÔfaG¨'-ëČ8ɧgŠ*ö°í?AK=R;ŲnžÖҰČcUĀaŽqœ8įŪļ\&ãæ(.qÎ28ū]s:ˇ‰ãŠęK[Hd¸ēBwm\÷ô^HúÕHaņ~¨­,0<0ąãp}?^Ԓ¸ÎŽ[-wŖ€ųˇr>¤į×#đ^T†âĩÔÉIūäƒĶŽOąŽNOjh wŦ…ûŽUJˇŅ›¯Jˆxfé$dMvĪ#$…¯ iŲÚKf—PÉĖ"Xņ€Oâ=ąųŽüō|ī[ĐSMÖGÛ\1ōÕ~bÔŒ`į<}El&•âģHĘØęe9!åĮļŸ˙[âoĮo5í›\-ģŖ+¸ ßëUĻLŦeų[LĢĩą¸B<F0GĻx늷ˆ.V5˛žE;„¸į$pX÷ãnØækŊ-RÖ9X˛[ĄnŠ$Ģ"€Ė ’I\v Ī‘YOĢYø~Áô腎ŗpĄA“Ę{°$RĀåķōđ įŠÎ+4îöfū­owg&™yįKíĶųsĖÛL‘ŠU]̎@åˇtã=i­câ-\5œĐÅ-œH^YTŦČTo›Ļ3Ā<į=*Xõ‹]ÁÖ6ē뛛ų-Īú#üŌJ2v vę[Ō°ü â+]Öx5A!Wōž8Á'†-€:üŊi+îVÚéū3ÔbÔHžq% ;š24 §in Ãį#`q^ŠŒ yNsČ#ĶĩymĨĻŖŠjzĨ”rEg;ŒË_vY˜ņžÕŨxdK†4čØļrW<~„RǕއŠŖ&T|ŊĪ5!'žNJBĒ<äŌ\œ `ã‹,¯>DcäÎX:dkˆyR2zįéRĖ~\¨$ŠR˛3Îs@ŅÆCgŠjē„Œr‘HķÆ:TņøŋFtRnŒe€;LMū°č6šåÜ7â9ī.$’Ũ˜€ßtwüjüÚ‰m ĶMcn‘ ,ėü u8ÍBģ:äŠitSĐîm¯ĩÍNîŌU•6Gʂ2pO§ĩikö–vS$ڜ6 ĘʓHë•m§ięG\wĒĻ›o5ėÚ\ŅÉm E1ĻNŌ úžû‡åTĩ‹OI­=äēĨ–ą ãĖ’DÉ8IVwn˜Ģ‚ĐÆ´¯#Ŗ°e“Kŗ‘fķƒĮy…6îČv;gßÖšŊCÃz…ėŗ¸M<#ÎdS21‘€ėHíí]%ƒ ŌŦļL'ȕShp@ų€÷É5—{¯KovÖÖvŪÍ<ī(áTõÆpyÆ(vM?tŗĸÛjÛÜ%đ‰JĘDK„  möÎzփŽsōķUt­FNĶí1‰Q‘ÁXAüũęû í͉ļåŠI—qŪ™ 8Œœ~Ue‡CP1āÕw$ĒP÷#ņL’Eˆ ėNĐIÅNãŒfĸ•rĸœķ@?N9sQžOĨLŨšīL^ éˆŒA¨ÜØÚ@ÆsSEFŨã@ŗņQį5#ŠˆqԘ@U95ÉĀė*FöëŪŖvĀãúP}WĩckÃū%wœŒų/üm”Æ+ Ä1ŗiw§Œy ˙ škq3ȍ%/ĩĐdJ:֞’›¯ãöæŗTsZē0Í÷üúŠ™w6Ÿpč1W”ŒV}ŗ~í~•u‘Y–SëS. W@OÖĻ\Žô*đxŠSԚ…rZŨ8 E‚:Ķ”* 0¸Ī4õ$ŸĨJp;ÕVøØéōÜ Wd`û*á'ƒŌŗõkVž°’Ú3†|ž:úP˅¯Š"ë6 ¸Į˜*AŠXāynA˙Ļ‹ū5’ž͈8kŒvÏđ¨æđĩŒ14ž}ĘnjžAū•šÚ“ęjG-ÎŽĪĒķųfV‘éîbÃ?ˆ•¯ œļĻęR<ÂU˛X“Ô€jۃeko¨Lö7K< Îæ”įĄҌ1´âô&ĸ\ŪéÅM'‰­tŗ“Kĩō"ļ13ų āۑķWaa-āįs׏įS`m9ÁAî)ŽKĮp{fĒæijrW6"YIJ:HíšÁK)āîN3]tD˜đ§h8ģ˙ŸĨrCW3Y4,*ۆ{ƒßØWX -°ØTļĪ—9œqĀäéY­Íęü$Wķ][Û,­Öiō m  ã$úšĖÖî$>e¸™l'•–,Ŧŧ+néģŽ1Îzã>••x$’ōãÎÖŅĨ‰ãW‡Î1 9É ĢÉŒONk{\›Np ŗy¨@̰ätōįëZäZ­4ڃ›˜å-2üČdHžQĀn3ęp8ükmXįāfąŧ:eŲt%YÁ€<čR3÷GdāķšÜúR` %‰âž3ØŌ‡Öž2§€}ŗH íjŌKŊ*xĸ“•qÔŠĨSƒÅkŽéå6ō/Ą$˙^õĄĒ^ŊƒÜ*oe*÷9`8õ<Õo4’æIėŸrœ—’͸úĻĄ›ĶWrmGŋēēÔB˛Ã(Xá,N}ĪéS6žåŲ/Ļ[I&=ēĒÎ0~ņäd¨âŦŲ_Zß&ëY’E\.FxīĐÖ zf§ũ´nČ-˛ŨŽ(.vË|Ō?'SzÕ F0´éËf*ĸc{c͝á@4\¨ā†ëU$\ųl)ãŸķšŌeÁ$95]Ją MSû67„D$ÁA#č{:Üą†+HÖÚÛjĒÛÂūĸŦXKÉē9Ŗ”‚Q÷ĨgvU–ã^Ÿ¯¯ÖĄŧđƛr "˜Ŋbšíи$Uá›ø…–Š# ûąJũOü Hā˜Žž"@yųF UÔĩôŊ>kŠŽØŖR[ßĐ}sS;¤yÖ¨ē_ÛĮTŠŅîgEØsŒđT0'‘ŲŌŗWAû,Ë6‹ŠyŊÉepJ?Đ~•JX¤ģÔ.o% d–RĀ؜ņęk|ZE§éī4ŦD‚Ū(p„t”œzæēŅÎORĶĖ}gũ™pr ˖ˇ=˛WLķÆüĒĩƁ,0ųÁO”GĮķ§¤ `{Œ×imĢÜ-°)IlŊau/:cîOø ĮĸUU˛ŠI>Ųá{ϞŋÁvĶō˛ãЌŽ8üũBĶæchãF˜˜ÁvÖ0ĀgĻĨ] „vžtV'!HšãÆZRø Ë*Ûjz­Ôˁ:ŧ!df’c=}>ŨFƒŠxJúUōm­mn0lČšĮ8ÎüvĻån‚åŋSŽDŊKŗÛE-äŦ2Ų`¨h÷tõ\Ĩĸ’˙ޙǝ—v|×Q–y„EK"ŗb Øbsž$qŠ›ÂúUŨŊÅÕöZęņŧÉķĩG@};Õ;Ŋ7LžÔủ´y&šØ.eûIS) …ž\.}ęāsÖˇ=‘ŋ§):m§™Á'•čĐîT$”Áį#đŦ‹›}fÆōâM6Ū ›k†RGÚŅžœûp ké­ŌlŒ Ë ‚3ˇŪ ´cŋZÆE ŗG.~æZ=ĐÆHÉöĄŠ’wŅ\ģŖŲOoo,ˇm\ÜHf”Į÷A=‡=€­vÍgčÚˇöŊ”— nđĒLŅí|äãšãŽĩ}ŗ‚qÆ9ωŸ5ũâ2Iīž:Tn˜}†*T9ĮLöHŒ\` cw§rJ…y5œļ@$õgo\į>õā?áTw郁Š  Tî™<š‹ĄÆxĪZb +Í5Ôc+)É5d0ĀqQIĮ<ÔėFÍF[å Ķ8¨dõĨÜsÁĸöÍ4đŸZÄņ UŅīs˙<ųVģŖ“X>#?ņ(ŧ$g÷/Įāh[‰žQIFi3]&E€y­}zĮũŸę+ pkgAéOô2-œ#jÔUÕ 5RæŦŠæŗĘ:æĨÆzT S/=ķ@ƒ‚jU5éÍ8c(9ĶÔķéQ/CO^@  w*9nâˇųˇ{„_rjMŋ.3XúũĩÔö°Ĩĸ“(™XÆŪ42 “vfÂąÎãŸŌŧ7á\—‘â…cûĀOĻä4ĸo Á‹v?獕EŲ¯ą×Ũ‘¯§ĸ¯ˆ5#8ņ[KŒõé\ī‡žëÎÔ&ŊM“–Mų\cƒVŧ>—fû]Ö¤÷RNĄļđ>3€?žÔ❉¨ũãh`į4ÆĮAœûSešŠ­4U™Pܓ€)&9…Î˙/åÆō:{ū´ĖˇiUtÉA´؜mŲ•&­]M­´“JHŠ%ÉÚĨްįĩsq[4ÖđÛÅĨt æíYJäc,rs]ürɧÜĮjßŋh™c ãæ*@įˇ5+sJŠÉĶČ#Õî#–}32ÜÆËēՌƒ!1Ûā:Ųņ#i›%˜ų¨¸ ؒÜũqTU[䲰´Šū;”–7‘]LaH-šˆÃ{ŠšâDŦb8& [€p 9AÛĢęf/‡O"ņäVY^䴅[$Ēžđ:ã=­n~^3YˇXtļ*ąĒŧÎ˲$c8ûē,ķšÚqŌ¤ šŖLš]áļW3ųåėÎíÛN1zȰĢkvĻōÖâ(cšiU†6ŽiääČĪ5Ņõôö¤.‹"FXeĘŠëđ ,VÔomė­<û˛`€\äŽF=ëŋņ!-5ĀŗĶØņˇĪ ôŽ’æĘ ȑ&]ʎ$ĮŠZŒé|ŠUŦ-Héū¨J™#zsP[jtvvņIm`ĒŠ ėÎâSß­Vļ:÷ÚĪˆ„ĖA;œ9cÁŦéÖö–ąÍ‘Ė~i, p­Įtč*Ž‘ĒęŦ ÖÍ’ēĨxö€š*9Æ9ŊéÄĘwlŲ”HŅâ&T9¸Č#9¸Ŧ HfÖK¤ˆ1Û`"MŅ~đ€IP3Įļ8ÍoÜÜ[ÚBfžháˆ`‘°žœŸ~s~œ\ër:ŪË:}Š†ŸĖā¸äáˆ^ƒŒw8 Лnęp0Ī4Đ3Ī"Ži y™Ŧ]BîōÛ[ˇKkinPÛģT'rŒáˆĪ_ZŲ p@Ã4Ģ7–ĻEV nĐJoą›qquiæÜŲ›YŧÆ_)˜r=@ĪzÅņŠtax´ųî ‘Ŧö)s`ŧ˛žŊ+ŖÖPŦ‡xn…NF?ũuĘëĐŪ]4›íá›ČļVhŠl•~Žũ}i 4ĩ o[M†Ū8ožâX‘šâØ'ĘAŒ’¸'éŪ;ˆt‡ûS\ŒŌs9ÕÉĮr:sĮ­ZÔŽäĶôa,*%‘|´V9pHûŽ3ĶŠĨ†˙δInŅY8Ö_‘Øn!x8 •íę3ԁ˜žšYՙîĻ”­´jICw_ŨŽ^¤÷ĻÚFĶøŊ­åH–åœ#$ģwyDoËÛ“ČÆėqV­íBŠöî{ÉīaA°ģ3| ’rî@É$öÅRЙnŧSŌĈZy_rI 1ʍĘåz|¸ĀĀįŠ`wØއœ˜ WēģŽÆÎk™NR?˜ã¨Īë:Ä6J,5Ëx][æUĮj‹šÂ[xcÉČ4ΧƒĮĩ*€§šôČĨ ų@÷¤Øš°×nôĻž#É8ôĻ\\ÃmM<Ék՝‚¯ækŸģņžoŸ*I.Xdb48üĪˆüŠ^Åœį¤ԃN:l’$1´’:ĸ(Ë q^syãNëĖ[8VÆwŪĘ;’z~ŸFžņ&´ÂK˛á[×ööãō¨r:c„i^̞; 5ødđÅŪŦöžmŧ~h1|ÄGņČĮZɸø…Ļ-œĘÚv¨˙ģ G%Ą āA=1úUfĶ< e–ÕnŒ!Ûėų9ķĮJÔÕuYŦôŊŧĶÖEĮúMŗLÕ9ÎxÁã}kHíŠÍV)MØÔDpĒ…m|žÜqQę7[Ú<ļļâân6Įŧ.FyëVÎ͜Ķŋ>ŊĢ•Ô_Y7¤\ˇĩßĩ$ˇ~FāœŒääātŠz!Ís§`^œd¯ON)Pvã Î $mŧ”eéÎ8?֚ę ëŒâŠ37¸Ž œuÅ1@īNl’Aj4ÜͰãiéÅ1ŌfĘá1’Ņ2Œ÷$p?:Éûré>'Ŋû&žf‡d1Íŧ_ŧ-ûÂ6Ž„ās[’#Đ)'÷¨[‘ĐĮ¯Ō¸u-ôķŧM‡šÕ>VŽåDį˙sUˆ“:]GUšÕĶėōŲĪe§œ’l ‹•ūâ čBĮļzuŦ›û™´‹+‚eCĢjī'}ŋ61Áūœ˙ĀĢ"ŌŪy$–ęéRkЈ'¨\îŸl’N9#=1Z>k.Pg愓´wQĶ õô¤Įš§§DĄ×‡Ų•8ëĐņĮŖq*ũšr>R[9üaX3-ũ¸änSĶvĶž+rX€y#9%ã r>ī8?ČTŊÆļ.ÚÎ$ˇŒ`įŸÃúW9ãęŪÖ͟l/šÉېJãØōkŖŗLÚÆ}ÛųšĪņSE<ΟŨldÚyŨ?­L]ĨaĩîœLVV‹u0 Ã&âr88ã=B: S|Bé ‹îbKyĮáÛķǚ,/28]ĨŖŨēB\į׎1šĢŽÂ˛**ĘĨ é’2ZL'ŋ |ž˙Ĩt-õ1č[ĶC­Ŧ2'ˎĒão]ۇ|gđ§jē7V™VhfW.Ŧ‚cž:ô8ü=jM'{ZųQNåãg€AĮ¸ĻYŪÅ&˜‰2ėcEÃaGŪįØFˇd›˜ŽBŲx˜î† žĻŠ71ķžãũŽH#œŠĀÔ´›/S1]C˛`Į'đLŊŽG¯ƒôę męZ´bËȚÆK„x°˛0dhČčA*{ū'Ö Đu ?U˛MW‘c€āÚܑ–ĩõëÎÂ}•VŊCCsÂöËâdd°ÕMŊôc÷ļw‘‰T¯÷Ŗn _c’?NüuĨš+íJ%Y>lĀŦsėāũëÍŽbÕ<=ĢüÛ­ĩ+&Ŧƒ!Į?0ūđ g‡ĩ{ŋ„|C‰t}Bß`—'ŒųrŧķÆ˛¨åQ¤R‘‘¯|<Ķ.t—ƒIŗŽ ŒüŦ$*§ƒ€ŨrÁÆ;`RXøn{?U‡V푝W‘Y9<đšųsëĶĨvŨWiü>ĩŽjĐčÚ{\MŌāí î9&˛S“ĐŽDŽVĮUŌt'{}BâŪ;ĢiÚÜ4QėÜ6Ž_fNŪŖ$pq]|ÍÛ3ž5°Fx8úÖ—akŦÚM¨ßiņgPs(IŠ´Îsœ€?3ZzÄémgĘf6}qŽ8ĮnŨČô7v„´AjUŦā1Ņŗ\Ž07gôíV‚ąŒppI9įÚŗôvIĩ%÷…_˜6$uųĢį8L1˙×ŦŪæą9:ûVÖd’1ô ûÛ´Ŋ‹RØ.-§*ÛhÆũdęV6—÷ŨāŗŧVļ>Téᔎ˜PÄ0Ī@¤rzŽ+GÃ7'RēÕõ Ã4ʑņÔ(ĮõQųÖnŗgĸÜę7ĶKmrnƒ(Ž4ģ)|HŒm8ų€Î1ZSÔ²´ÎĸÎD¸ŗˇ™ƒDŽĄ@T`~U?Â!˙'­A‹-¤*íWYG3ôÍpŌj÷ßižK{ÛŨ“JņžëbÉ;Y1Æpüh“°RĻä÷ąÚÅ<Ŗ›f‡˜ÁŠŽã­HėÉâ˛<1å ­˛Ëå,ÎĻ៞IZԓxpãM8ōģ\“Æ8>ĩ!Ā@?Š›ƒŽ1G~?Zdŋ$š‚N:ûâŦļ6˙ŸZ‚eV<žĻ€ŦNWĻ 0pX €œÔ*0{g<昈˜ōN;Uv|°Šåäœ}*ļî=úĶķ7LbŖ=G5+p<š€‚ú遑EA+Õ1_įP˛îlPawœˇJÅņ6zO_%¸ü+ ÆņšįŧT›´KæčDDĶ[‰ŗÉz (=MĐdY:ÜđčÍĄú Âī]†W™[Ŋ‰–Žē,V]9Z™x¨ĘôüjU¨“œTʔię÷ŪŖZ”~tRLn$IbUŒ}Į ÷ŋ ˛1īŠhRiĘ;x5â ÉŦ­­å‰úåÜņ ŌĩĀÆp9ŦŊfâh崊Ú–v“rĢôĪëIėiOâ3ÆåŦzķÄŋũjxņ„Gŗûė…t6iqä˙ĨųM/OŨŠÄĶ/Ŗ˜ÛŗHEvTÎīĘĸƜđžÅ LęvĄsŗb€ÛWž÷5¤xKFÔô{{•’Mîƒ{C/°29Vūƒ:]YK(‚8]Ĩe‘`0:V•Ŋ¤ˆV‘6æÚ n'šĒŽÆuŧÎi< ĨŤÖw7Rî#wY\l*€uČŅßûÎÄÜæ&GSÅYŨĮJ̍eטÅSĘl°#Šm‘ī#.ŌĶSv j(jūčÂąž@­ķč1s\Ú@‚á$™Ú[ĄqoōĘ,CĐ˜ĀíëZÚĨÃÚiŗN“ER¸yQ™W,!y=jVæ•oĨÂ-bĘY<´Ÿôƒm’„.đ3ŒūōĒ~!’kv˛‘ZĀ@˛ÂíŠå€8č;uĪ^+2ÖXeÖm\ΧÉ;Îĸ,ĒIĮ,˜ŽãޤVÆē˛‘g"B%ˆHÂE3ɉ¯QWÔɒøgaŅUÔĀRIdeō‚}â8Ü?_Ĩme{Ö^ƒĩôˆ™Ŗ]Îv™ŧĶˡVîO'ņ­3Ö¤ ZÅ´÷ZUĸķ]B€[hÆFyúzsYš&‡¨iú§t`–=Ž‘ēČîb]Ā„ē {g“[w×điÖR]ÜžČĸcŒŸLcÔæĢéZÕļ¨$X–XåŖš2Œčp{qO Ķ'ž{¸íØÅ“öY­s.—7wņjˇķFf“l–ûLJŌxnČ>õÔŨŪAgnĶ\HŠõ&ĢÚ_éúŧ. ’9ĐuV^Ŗčk7cjrqÖÃôĢKK[y ĩ“|bby āādgĄéQ[xŠÆöúK/6ã{2ĮōĐNKá#×ōĢ6Viņŧ0|ĄÜɡÜõō¨ĪL{ë{¨L)9ũâyLÎHä=ŠĨdg-Y¤ā2ûH>¸íߚæŧ-=Ė÷EŽ]ĖÆØ1$œی ~DÖõäķ[Äi';†åGT*0rrĮX~XžŅrbÚcr›ū[æmŽÛ›ŊÆjētë۞įôįixĶ|Š TȏaÍeë2ÜĀ-^Ō5Ā”…Œpvœ‚}:¨ [Œe´V9úđ CfąĻÚæE­ûSŧÖ.ĄÔ"û0Ž0R wĪ\÷ā~ĩŗ¤j—ÚĢOi:Į”ǧí/Æ[p=9ÆG՝VŊÔonæÕ­$÷N $’NyöôĢž ąąēû#<’]|§Č†&‘ųŠÍs-֛¸būkÜGĩÛhÁ`[q[6“ŊŜ2ÉÁ# f‰ˆŨ#}˙ ã5í>ÚĘų„‹-ÄNę^Ídfr˙q[#qäāôĮJ¤dnøäMōHHâg‰Ėģrň æ6Ā÷Á¨`˛ŽįÃĐ nÎņˆŽŒÄ•,Īßx$%˙ēAūuŪ•?&qÅKFÔęƟÂqך­‚čw–"Ų´ë†…”BđėÎxāŽÖēøČĀ`3‘AtĪZlÖđ]DŅĪ rÆzŦŠ~ĩ…Ą\XÁ-Ƈy-ģĒ–ōī¸ė•Ŧ_ģSM‹÷öļēÆ5˛8ÜFU$Œpœ†Į¨nkž“JņnĨz^§uĻ}„ņ5Ė*LŌ'u xŒÎŽĮc{ā›X,.ĩÛ,E&'•Æ9įŋˇ5JįEņ‚ôx.åĖkhąŗ Ã 0äwæ´‹Đæœm&ŽĪ ĒģLtįˇo\ö˙ëWn¨Ú•Ŋ‹E|ŗī”[°ņ¨ßÔ¯AĪ>Ŋ+°,FBįĀĮį\]ŊœP5…īŲ­ž ŠÕcwķōAcœ1Æ+9;Œīå*É'Ž*Jƒ’EG)Ļ\(ÁíĪŌ¤‘W## sÍZØå–ãJ–L*œڑFÆäbžØĮqžiwcŽyĒD”õ;Ái’Å6} ¯ķjã´eŸXą Vō\ɏYIoĶĖV‡‹§’_ôƝÚäTcžˆ3ųī?ARxJŨ'{íQŖ`˛6ØË.>L``váV´Z#'Ģ-Í?“yy*đËjėŒ3ō2áAĪũĩƒĻži6ŌGkrÍlLŦWæ›p, õëÔú ŸZ¸0Xë7lHųV6ÉaĶŅc?ˆ¨Í厙§ŸŌŪ8ŅÆ3œ Ŋ;t>” %ILˆÜˇ1•Č9^}ķĶž”–×Ė×fUĨDdxņ­ĶÛ<ŽxĢ y 吞ß˔ 8Ü1ĪNž”°0Žág‚%ā6WΝNüwõĻ+ŒwĻâÎ{0ģūbÃیqéī]ÃIšŅ[<*7×,rļ×6“jVöë*ĮpōĢyD`‘ĀëŌēÕˇE˜DęT,jA1¸˙€üĒd8…ŖˇäíĀ'ęũ_q>1Ŋ’úųlĄ‰Ú;Y’ äOC ūĻģ{OŨÛĪ0I=s\?ņ1ššÚ¤ƒˇ'ú`~TSˇ5Į=ŒĀ3c÷¤üÎĮŽƒŠë×9>ØŽBūōæūTš%‘RB°Œ`äŋ–Oš­ZÜZŌ Aš6Ã*ŠęĀđwžßáYģ4ĨŒ“*n~ī~¸ũ+Ą#w:}ÔbÖ!VÉP¸ێGëS&œQ捆P’É3tĪ#™=jD$ĶíL˛cËã€:€Ävéū}ëZávŲ'Ė<œ‚2IüŋɨŊ†ŅĀëz}´Vwˇ$Kį˛ĨŽ9ŪúŽnÜsŊ@'89Įļq[úô%ŌīHŖIã?擿<än?ÅØ“\îã’DĘVE;pGÖ´[ëšgņŨģUĶSt$įt°g˜ũʒ:õõ5ĪApö7ÉŽ-&“~#rĒžŋQœgĶ?J—IŧšĮPŠâ9!ЁŒn= įũ Jįß=Ēæ­ĻÄú„đBĻX.ŖŦ@ų‰°?ˆôĪĩ$–Ė~hõx´ęvŌXęˇpļĄ…!ä"€8Î$=}zWfvį7gļŌsÛüúׁØntë;¸D‚{îepĒ ĩžb2åIã"ŊŌÎūËQĩûU•Ė71qķÄÁãņ˙"šĒC•ŨB\ĘĮ0ņj{†•â;xG,s’Ÿ¨$t?•tR§™nŅKƒ¸Ž ņÆ8üj9í<×GYŪ& ŒĻ9Î0GãK-ŧaŖÜŧ`á‰äûÖmßb’"‰ xRG26qœ}j|~đnnŪ6UËÄ Î}ĒGČcŽĐ1īRĘKĄČøŗMĐnGŠÜ%­Ķd,€fãŊs‡ī.'ņš:)åūˇĨĻi)âŊwPŋÔÚÚŪo.(Ā#Üú`õ5ŋwāŊ î‰f°ļ0¯AūĩŊEMSJ.LŌĩ°ļĶ­’ÖÖ=‘ ųBžšęOrMsšĩ§†jwéúuåú’dŽ}¨ėÁGĘ Œc*Į…Úę(/tÛÉY,'1ĢĨ+ŸÄŌĒkW~QŠ4đéjQ† Ķ"ŧŒ“–ÁZAœU•¤tPíkh ĻÔŽ9ĀĮĶÅiD…˛TáG$žžõ<8kX‚ŽŅ°:ã~ŋ—jåĄ‹WI`– ‰æ8{™'–^Ÿ …8_ŠŅÛÉļë%ŗÆņ?Ė" “ÜäQ/jށK %¨ļs,¤ÄŊ.Ũ=GĶÚ¯IĮĶۚ"JĖ@8¤'ž})@;y8„dü§Ĩ1åÁ˛ Vs—lƧqÎ B@'>•HN2jŒyü*Ņ?.8õĒûrĮ=鈅ņŸÖĸĪ9sRȤ?>õÆhę~ĩ âLÔîx÷Ēí÷ÁĀSČéßĩsž*“ËĐī.r›O5Ō[ŽƒÚš1ūĀģ*y-õώ%žSڊSúRWA™6yŽŖÃ÷Röë˜Įzę|7‘qügúTLŅJtŠ@ä.;g5 ŽEXSĮ_ DÉĶŌĨ_jx=jhÉČühp;ÔĢQ§J‘hP čiĘŧû͇L~@üpk2ėĮģ`ĖpYdP} Åhî8Î+7Xą7ö‹äą[˜Žø›Ĩ&]=Í@{“Í9ŲU Čw=riâ[Ë!äßŲ*÷?&}Čūĸ ›UÔõĪô[H<´?{a'#ܞÕ4öŊÛV6ü;0˜_OÄR];'ųüktΨi– ĻØGnŸ6>ņī–ëUĶė#Ũwu CС?—Z¤EI'&ŅwĩgęŅI.›:Ē—ĘŊXg+2Ûj:­­‡˜ęîÛæ1„'=ø­]PŸėŲ›Í{qˇ;Ķ–\ņîzPɏÄŦgC§ÚÛŪ@Ímyo!”gpÁ˜ ãŠė=;VöËß Ũë™7fYŽŪô˛|ĐEqE‘ēā•Ôn#8Ν˙ž•1zšUOŠĘé÷.ŠŠž ŧ‘÷!gHÚ¨PÉÎOJŊâ$Ši­b’$’Fķ0$t 1Ë g‘Œs×Ūŗ­.dk›yãļģš‘Œ o¨+ ā‚vöā‘V¯n ûÚLÖqIä<Š-ŗš@HĀwA?J׊‹54 m˛­áˇ•XŦa™A]ɸ’rĪōīZ›ÁųIųąģĮn+OŽ=>Î ‘c-žû™mJĒ ˆH$q×'ˇSíRØHˇ:ŗÜÉĨ\Ú\=¸lŦdŨŦGō5 [Õ,§eöa7•ķŖîÚî°=Ē-?J¸ļÔĨģ¸Ô^ėŧ"1ž5R9'(séV/u }2!5܂8ÉÚäöšf•Ŧ&¨Ōų6÷ *2É*íg=§ũik`*ëß-ň6mvĄŲŒã$;sUíĘj tžģFōš6ŋ{$xą])9<õ§p‘QʍŖQ%fŠē]Ė—úx¸‘;ŗü~čÜp=ĀĨgi^}:ęßQ3ė^UĸEp( žƒĄõ­+¨Ëi÷1CĖŅ8U^9 ŸįĪÖĒik0‹uģšÔÚŦ#(‘2H­ÆÉ ņž~•FmĻô&ÖīVĘŌ&s Į4é˛J UC×8úcÛ5_B1GŦ_ÃĀēļŽ8ŧš|ŌåGÍōg8ããÔV­ŌĀÖ˛‹ĩíļ“(”ģ{įZ¨U\.01øÖ}ĖZâëRŨ[Âf ŨˆŅ×g9]§ø\įŠqēÚž†õ¤ kmŧnÅ"QvlœO~ÕĖøĒXūŪĒÕˇ @UÜb>]Ō ÎGŖuĶZ´†Ū'BĘČĻAŸēp2=ũ)%†Ōi"šhāwˆî‰œ)*sÁRzgڝėAĪëŪ^ÚG4ļEĒ\W"XŲIĘĒ:‘‘īÖĨ‰ ^ ˇĀ~ÆĖIC!\Š9*qŸ§5˙‰-ôûšmåŗFābKˆâÜĨw]Ė2:­;Pš;ī K3#…žÛĖ+Š !ēŽHâ•ö)"¯…¤…ĸŧX—0VUƒĘ…–Ĩm œˇkĮÖŽ*ėÎNĮ?­Ū}ēũ–ų‹8H$džxöãū]­š]2Ú;x‚¤b!ŠĀ=2~O°Ž'Co5•˜6ë{eÄÍüd_ęO?€ŽĻ{ˆ^3aâ„˙/2s´Ä‚žāŋĨ\ģŽ{盋› 7Pžd†îuĪĖ āǟĸ„Sô¨b¸[™ŧ¸eŒĒŧ:€zƒžŧŠąmo&Ģ$×ŌEæ]\¸(GW9ÆH?xāöāzSĄ¤uXŒ’2õ>ž´Đ„y›NOô{q2–)ߞ?ĪOåVėŽœËmz`xaœĄl€Ū\ö<Œûæ B—éå¨e ās“Ú™2hö¨,ÅË.ÆÆ2§ ö=ŋ/zb:m.!4öå2CnVqĐqƒœŸzÛ՞î6ŠKQæōđ#c€NåīøŸÎ¸Ī jÛ/¤đJ {öČĀeČüx8Žô?™8ŨĘîŦĨ¤‹OŨ ĩŠdĶāŽáQn ˛É*ļEq(•4­rgrJÉ›ål”Ųü‡âEzÆX SŒtįŠĪø×üMÕ ÎŋšĢļ+8‘Į%™†qôĀSõ4ék!ÔØâŅžaŊØŧŽųf'Š8į’IëÖē ,Uŧ.ÛrŌBÂSÆ~ķ ŸzÄDä.r™ųA<äŠí.<ģ]îEEhžÎą|ŧ~\‘ėH?­tɜâxVcqĨĩ™äÂŲȆįÆ?é¤+ ,€˜;‡åĮô?—°ŽÒ4ŧ æˇ$‡ ĀaŽG>āšíĻķKApdŪ°!3÷N>đwÉ?@+9îZw)O—),Š aˇŲų¸`G8Āôé\7Œĸ†rX‚K$ŧ\m’ˆ=ČôôŽúd]‘Ų#v5 ŒƒÕ‡ļO?Zņųd’[–i™™Û'pįŸo_ūĩ\Ie‰JĄÆŒ÷ũ+~Īũ7IŠRJI§>O9!šQ˙‘¸ôP+›GÁoBQ[Ū€ŨĘtõŨēėÆĄgˆ; ūX5MŲxBļ}GZˇŊĩK™,6ˆáeČ,wcū˙ëæē˙čvÚ}åö§g¨[OŌ*˜­ãdDqž ŗm8ę3×5KÂú|ˇƒÄWQ\Ijˇ×~Hš"7*ĸœāô,Gū•Åø—ZmX ĸę×ķ\ÛÉåš–wpäd€FpĀŽkœŲĸj'˛°†N*ÆüōãÅŌ5Íĩŧ΍ÉšSü9?ŸåO“ éĮ95Ė͊ÅI+Č9§į,ËC%qĶõ§*~č“ÎFzR*:q øˇNŅ"šļ¸†}ípėZ5R0?ŧ1ŌĩĮÄ¤Ë ‘“Č1ũkSBJ›LY۝“;3ųÁKƒ¸đØĪáíWΝa;š{;fS×0ŠĪéPŽŠN›zŘ^ŋU¸Õu•Ö9įE ü¨2zûū•™¨ø›LĩšÔmgŽÁ.”Čšgî +ŋŒ’Ų#ēm.ÚÎØß-“*Ģ\n‘0ąļÅČúgņöŽ~OMkĒj}=ÛLS"˛Ãa+–Âũã Ęļy;ŽkJfšrēŅ4Xō#pá} §Ōŗ­ĩÛ[Ëöĩ…gæŲ,‘’ë´÷īZ‰T`8ũJįŖđ§îU$Ö5 Ę]€ŠM žƒևtäûnÆņlķԏĶÚŖ~GÍüĒž—btënd30wc+r͸“Īŋ"ŦšbĀcŠĻC#r6ŸķšÂÛ4‹nN?­8Ļzž9âaøTN1'SRŽã֛ Ü9Ļ"“Ė1QœÕ‡ÚĩíŪ@úĶ@WÚvŠfЧĄ5a—ąô¨OĘÅ1æõĒîĄ[ŦHŲ<ûÕviŅ‘P8ã5;Š…Û‚4ĀUÁæšßá|9}ë´t˙xWH„ųc8ĘøÉ‚øvėäķ´ãœw<¤ŌRšJč2,ŽMu~_ô@Ú5Ęp už˛Ü“úš‰š#ĸ\Œt52ģĨB‡Žĩ8ëP"d<ôАgŊB‡Š™qŠ™"Ļ^•tũjeÉņ@SŽ´ņĶ9ĻO(üŋÂÕīŽluKwˇÎ>Q'ŒõâˇqÁįņĪJĪš’äęŅÅgE„ŧ–Lđ č?*LŌ–÷hÉ>#ŧE])ąčCQR/ŠŲqŋMeŌˇ.īSOŗ3ĪŽ8dn>‚ą ×uK×iĸKUûÄ’>Ŋ+3xÚzōšv‚}WÃ͛‰#’ā>$Få>cŒ…`˙Â3ũ›fâ])/nssī`s×cåÍuzX€éđŊ¯0ČĪbNHüÉĢĢĨAĮ¤^‡<õf]Ŋū“w=Ŧ6ė*–ō‘FĶÚAĘõqøÕÛĢuēĩxw2–ÆG*Ā‚įŠI,ĸ{čoJ°’ˏ˜6?“P’x­wĀcÜŦšķQŒķ“CbīĄZ6íî’mBņ.&ܑŦaF˙SZnáYC¸RĮjäõ>Օ§ęw×1äZŧ;Ū wãĐsÍZÔm%ģŠŗ­¯ĄÕŽc.ƒČŽjVåNũI!ĩą‚éŽ!†𗆑C0ī“IwaĻÜ\ îím¤“Ĩ@}8į¯A\Ū‚ŠũĩKkuŠC+Anņ˛ã Ėq˙ęĢ'6Ģu -įe‰‡•ˏ:C´co$į8ÎO_ZĨᛟĩ\\:Élá †•"ØCüŪãŒŌ&AĮ50ԎÃ6úsũ)ę¸éü¨ÚyÅs—ū/†Å¯ iŦŖ¸…œE“÷@ >H9$ā`éÔn{˙­\”ÚÚjÖX´‚åUĸ"ä[CŒ%ä2ņČĀ=kŦ Djå{‘ëøũqYŖ]ũôQĩ…ŪŲ kĒ8!Žüägĩ+ŽÆ…äļđZĩÍČQ *]™×%F?Ã=ģÖ ũͭ߆ŽؗCDh›X(#‚ŦŧbŊ3ÁĢúĻĄwc4hąÁ)•ßddJX <"79<ņŽG­6{(um>ÚkËpe1Ģ|ŦęĘHđ}Š\´Œí4Ĩĸ}¯í×ĮÍxŌ?˛Œ3>eœŽ8į?‰›Â),W “Hæ;U3̀wp˛(ÛĶ ô­+X,mšŌ>Y˛ų ŧšČđqVÕ.n Ä[DkŸ<ƒ“Ÿ›qFqĮZOšGW}Ļ[j‘G ŌŗÄ’o(¸#ۚІtë=B ›Xd†H[p!œ‚#1į¯Z׏Ąâ“ĖŒL‘Q+rĒHË}CFą”’˛&+ĶŽxäĐœŅÃōƒøöĨ$cŠdųŠ'Uî­-ŽíĖW0Į$YûŽ2?ĪŌ˛$,á.Ö9įÜøÕXĩyŽŖmoba2†e•dBáK`đE=ģVŊĩ.]E5ńР¸’2¨Ų#k@är9Ŧ}?NÕP°¸Ŋ}ĘģƒFtqŽÜ(äˇĢVŪŖpöúmÍÄeCĮ2ädd)=;ũ+ Ë[{­nÖÕX…*ë!12—Ú †ä š9㚆mO›•Øé%\˛¨žĻšĘÆsš|„BŸ/ˇ×4Ösƒ‘ž•g,‘Fūå`ĩpY“#’ŊTw#ßĶßįÔšœŦcRĸpb„Ņ?‰‡ļŪžkĨņMĶĘRÖ yĶ‘Īe韡$“ėcč6ŅÜj&ėÛĀ›aÉį?7ԒIúJŪ*Ęį3wv.Ájļņؤ'‘€ŪŸÂ1ÉĮ°ÎŽfŪH5=B-"ÛË[(‚ųÃ9ųAÚ=û˜÷Ģz•čļ[‹āۘąÁoL{“ķu˙žti6īen˜\Jøy ādã§ā=) -‡{!ŧ@vĮ§ļ?\Ô‘O*Įå)…ŠîSĐ{`snįĨ?Uŧ—aĩQķŧ3erŨ¸ôįŽ*ļ‹ö‹Ĩũü) ŠĀÄų öõô9õĒ$׹ˇŠ7IˆÅšMĐq†ÉāLãĶÖŗncZ¤aĖﭐ¤ž‡ŋķũY˜ļØ;Wã NŖŽŋJ­yd\Ŗ.6œõn3؏_Ĩ!ŽŗWYžX˛—9@2ãķüû×_ ŪGqkˇ~ö‡ä$œũ>¸ä׊å$)e¸rĖŒÅ€v”á˜0ī0=ÎxÅP“Åm ÛːŠmRé‡ËÉäŽäāåԔ. Øę™ãƒ^vČÁ6ä.wsÎ:ö÷#ˆOėg Ė\ gú~5åZ­īšīl‰–%á”, g?ŸøtdžĀŅTt|ŸņųäūäW¯Ú iŽ ‚æÛLžáΒ[€dPËČŨcž§ô¯0đũ—öžšemķ2Üɑ¨Î+ŖÕn^MV].ĐCAŪ ,*æFčwg$ ’;ķJzč CĶĩhD:}–‰Ļ3ÛÃ(#ũđė6 ā’Ų,3Āb+ŸĶ<gaâĩ ¸ü…„I¸I24r?Y?ˆ¤“ž‡ī‰<=qÔt›8ČĐˆ3 žQ yéՇå\?‰u[ŊGÄ7Wf8æX˙wÎģ‚&:…õ?ÖŗŒ]ė‹“[žŨ žbīŪ0G~= V‰ËėkĖ<'¨­é?ŲÎļ:”jÁŸŨNŋîƒĪPqAĀ5éuâ_XÅr¨Szá”õV‚> ‚? ĘqqzšFIėJT¸\`vāŅ'Ũے{`zSKŒw ŽYãP=H=}ĒkucÎ#đœúeÔ§Q7ÆŨšķôįÜÔ˛āŸNžëFÛÃw‘™,áqë[ĖÅ´Ŗ›ŸĮüūĩɡ†žÉg­Æˇ~¨c PM„Į ˙ $ėiO•îo闩¨é°]ƅ‹¸)ę?ÉŠČ*Åŗ“Æ)–0GgcŧjcU\îέHĘ<ĀOtĻdí}EĪqũiKåqéšGo™WĐRíéÛ4Ä)8lzŸéQŗ¸÷Ĩo™‡lRĨąÛÄG"Žõ\öÕ É öĮJ`VŒšŦۉĢ2}ėqPc‘Ū€$T;@í\§ ēãČ?ņá]~~QŸJãüpXøzlpģĶ˙BQø…--4”vĸē ‹ĩŲhKūƒÆú×eĄYF?ŲŦähÅëÅN ę*úqŒÕ”"ą2tÍJĻĸAÅLĸ€$Ü𩔌uɨ“RŽœ zƒŽ¸4ņĮ^Oĩ úSÁĀZpÆG=úb˛u)oŦn–ōŪÜĪ&ŲS'#ķíÖĩōGėķ´ŠƒåwąČ˜¯üKyž#¤gĄqũMtwö:L ¯*¨AōFÍų ē<Ž(dŽL@ÄtČĨcITRkˇbŽÎ—đ_ôÜsÖ¯¯CƒUînm´ëFžá„p'Ū  ņÚĄ›VļļĶâŋsļŪFP\qÜSHÍŊM0;V~­ ķÁ ÅnŗūøFl'“éœTÖ:Ĩ†¤Ė-.Ąœ§Pœ ņNžŋˇĶâI.Ä.pāāžqô¤Â;”,ĸœj‰,šrZ¯”ĘZ' d`=*×gTFv;UA%@z§gĢZ_ĖŅ[L]Õw´Œ ÷ĪÖŦÜ){i@PäŖ¤g'ŒdRC¨Ûz‘ZęVמQˇ¸ dĖNAÆGĐđ Āņ,Ģ æ@ŗ†KRw%áƒåÉįŽŧāÃ#ÖŦh´w4ösĮrmČ/$ë"ã °PāOŋRķSW“\ŲËŠ[æÜ*˜ė„ƒ,F2§Ū­Í}QYŧ-ĶŒ:ƒúTCQÖĮQX>Í<ņ˜ƒ‘ î ’Gô5YŧS -a¨)Ÿž, ÖԒÁ Ģ<‘$’|Ŗq [üķPjvö–3M8Ę9ōŪÕ&ÉĢkŌ^ĨļöɁ’Ēz“Ā< sÅE¤ëęī*à ˆą¨ŪdĀ!˛A\Î1ÔqîjĶCͨ†XĄeÆã#1ĶĩCc•ÔŅØGi *Ā`eą?ĢčdíЛQˇĶŪ›QŠŽŨŧÅy@!¯ō-Ŧv¨%kP„<ŦÎUŗ—āķė)×V_ZÉopĨâm` øätįŸmikGjūbī-# –sËcÉ=ŋ 7-íũļoįÜɲ>ŲęĮĐ ČƒÆšdŗˆŨgˆ€îŖō?ĖT“Ú[]ø˜GzģÄvĘđÆĮå''qĮCŽ+Jk+ˆ^)­áhĘā‚€qė{VmŗĄ(­åĩ:\FAđũtĪ˛Û´r#CG'p۝Äđßāk?Apt˜ÕdķbŨ"‘†7 bü¸Ŧyv7 aĻęņŨĩĞ\ŋh"-ŪaË.>SÉûŋRÕÉrŗ° …J``ŒėF:~UÆĘ–ąøŽ+X …ē[\B&4}ĨA;sÁČę?ĩØņĪĄ˙åÅŲ2hcŧ-ŽcßH€äG€2goÍŲs¸JĖeŸÂdž‘^eW–ČĖ#¨ÁÚAÉ9>ŲüäÕ^XtíÄWQo=ÂAČ,\œv÷céūņëøU6Ų$ŌÕ&Šd2Ģ4ËpT9ÜIbvņĶ' ú ģ¤čöz\—2Úī˙H ¸06Ž0Lį4ē ›RԗO{rķE Nį|’ôĀčČÁ5›ĨĄŧņ žĢ&ž°yņą…ħ{ ^ÜwŊ$QN‚9‘dAü,Ą†wØāāÄĸ}ģC‘ķô¨ĩÍã4ŖļĨ FËĮ¸ŖˇŨ"ŖÆ1“OSĪLƒ™×|8úæš ĘōE[“æģ§×ŸŌĨ‡@ŋĶāXlĩ_.5ƒg'ßÔ×L€mbƒŒįŊM–æę´ídÎ|Yx‹ĮĒZ?¯™mˇųĨĢ˙ÂB–*ˇSX´M4jÍnޞ`°ü+ĒÜ0Xã8SPÔ`°˛7)xōŠĒ§īØ˙?JNÍG{X¯ŦØę7¯l4ÛņdŅH]ßËdm`ĶÁįÖŠÚøS:Ĩĩî§Ž5ävŦŌE Û,Csš8ë€[ķ¤ņ]Ãa`ēšéą]ĖŪ}Æđ­ąW$)= 8ũjĻ—o•­Ú.Ÿ¯Íkt^9 žíg …,Hät úî­:ŊŲÖa_1ļ ķžÕˇļk|–ō¤†UQ "&`ģŽ:€qKyt,í&¸hŨÖ0IXÆYŊ1Čõũ+?GÖįÕ¯Š-ŦqYˆÎs*ŗŗ:¨?(äúũEfŪϐ‹ålא|ę=ųúÔs;G˛Ÿ›îŽ}Oõ5<¸%IČįĄŦíRVˇĩ‘‰$*´‡ˇAúkXĢŗ–jČâ5›Ŗs{3ÄÕDDyĪ×hoĖUåĩŽ%!*Ëæ¯ˇ¨|ØúŽž+Ūu°ÁĪ27å˙ƒķ­ËÉ ŗšē-“Ú¤ö#~Ŧ‡ūkylrÄÉē˜^ęû[ F…čōP;{m­ĩ}ļčˍ¤qšąÉ᝸V&ŸÃj‘ŋ|ČÄúž …jŽ$ ™0$[>§Ŋ!˛ū-Ķ?¸W%AfÎA§‘Ž{ûŌ#Cec#Fėd$~p2Ü`ãāžWžXÜU’FUĮŪÆOAßԊŽŪlP¤-d?8pß{‘ųn§bYxú‰™LjŦ—gn1…Īéé˙×­ˆÚTF–Hą”Ŗ*8ÁČ?†OįQA5™Á'seŒ€D™ëß˙jH.&Ôvų…T#;Wæ=qĪ~¸ôĄ‚%šaYS+ĩ Øßđ˙<ןę3Gy¨Ë} ĘČFÖ ƒ´(‡ąëZ~#ÖĨÔĩ)4ø&ΝĮ—ĮÎ ,:ŒŽ?ZĪmĨK7Ęŧ°ĘôcŌŽ+š-ÜĨnԐ€ŗãžs9Ī#üįëZZd[u4Y”ļšÎ8ū‡L]ˇk;ƒå+ÄrģOãŸjęt­-dÔVwM˛˜`gŠĪĶĨT„‘ˇaÁgs2 /a“'†ī“éƒÍ:ŲÕ­Ôō92Œį$.‚Ēø‹PšÎÎ >”]æ3ĩšÚ:Œ{įLÕŊ9ļŒ&3œg y8įķëXtš§‘Āøą„~!RŸ$ņPéړéwīs€Ņ "ĨIįüĘģočŅj:>čŅ~Ų“ŽN9¯?pą”D†K›†!¤CŅ=ąÜŒÖŠĻˆØí^_í[)g†UZ9:ár9#Ôë\~ąáļ´ˇŋ™n•Ŗƒ+䒹ʜúķĮŅč0ļŸ+ØĘŽ„~ū5aŸ/$qøķųԚŨ”×Z=ô0ļé&U*œå™[8t$ķøŌ‹ŗ°Ų‰đÁ•ŧikÃIqŒ7c?AųŠw‰­ßEņØbĀĮ|īžÅdÄĒߊZæü;Ģļâ =MG6ķnn9؜?ģIüũĢŲ|] '‰,aÖô‘Ōų@„$mž#Đsß'€HôČĄžY^[ ĢĮCmE.í!ž´ēōÚ% ˛+Tdy÷ķÁįk˜Ŋ’ūūáŪđۅÂáD Š…Ā,3ž9杇jec™ŖōÛlÖå˜l ōŦ¤nųŠĩ='΅&´Hm<ĩäÁéīĶĩiĨ¯ȑøˇN6YœŖ¨)~‘¯^Ķ”C.Ąđ­Ķ2ācī*šũXחxFKKåÖ.¸ˇļË vą…TÉ$žÜžëÕ4Č&ækˆŠO3y’( •'ą÷ĐâšënkL–f(!ĨÎIíōąū”‚3,aSŲp āgÔŗäĸŠČ‘ĪĐÔɍŖh%qΏ‡Cn§1¤x>ŪÚÁ]ŪÆä‘­îčozŧūU ˙\ qū™]üœ[š¨åg$p1œæĻÆŪÚ}ĖĘM/FKIßs$’Į’Ãq`xõ?qûü7tōO˙õŧ× pŌ]4r đ!ŗå‰;G`}+Ч_›Žrk”Vņ;[„– † ˛ĖéŸkc'đ÷QWžy¤4F3nNėę vG|eąäõíéŸzķģj¤ąAn {˜ÁyYŖ+xíÉ<ũkŅL‹ŧ’ēƈâĮuūUŲld†GH t¸;*)~9ŠzŗHI-ĘzTĻãJļ¸`’'̓œcV$ęFzTûb‚HÕmUQ€ĨA&Iہדš!ģ˛#ŒŠÎzSƒp\ëLlāƒKœwĻ"]ƒø95g<ôŠYąĐg“Q78Žz bWŊęY]øĀŠOÍÎMDĮ“Ži +:n“qn‡ĨE(<ãĩXeÁ'ŊW™ļ’=iˆ—å<öĒíV¸#Ū “îâ˜ۜö4…x}*GĀ=zԁԀdzäŧzđä˜˙žˆ?ņęëÔg­qū?ų<8øū)P~´ãņ!KcĘú))}(Ž“"aÖģ]!1fžģōÅ(9ŽëL]ļČ=Vr4Fœ@¯Z˛† @zՄéÖ¤ ”ŸlÔĘHâŖQĮZ•6÷ DË֞Ŋy¨–Ÿ’§‘@'㊐°˙&ĸ¤^h9o!ŠO-å@ßŨ'ŸČTųį8=8¨ø ģ`Î9=Īã\ū˛ēŗ\:A#ũœ¨,c\øŽOáI—Š;7czãRŗŗ$Mqî–ūBąoĩSFķ Ėŋh–åŽ$ķUÂĄ$ôüģ~f´5-‹¤Ũ—ķ<ŋ%ÃyxÜã•[à •vb&Ë…ķŖåGųr0Xœž€‘Ō ņÃ[ÜBcÕĨˇ™×iĩŽ=Í8Īaĩļ÷į§5kÂ_ąJķĩÎķ&LwĮōŽ0¸§ ëŌ“ØĄ¨Y\ŨÉļÔ$´Ø6ÅV-œÃpzRéVSXĮpˇ"âIf2´›B“•QČgŠK­J+9r+cg. °'9aŌĻĶîūŲ ŽbhöJņ2ˇû,Ff“V“H:ÄŖSI\Ŧją€ŦUAÉ'Žũ+6 Ŋ.L\_Ī%Ôą.!ļ(B(āR@įë]ļÅGgP62qÉĮJĄ}ŠXۏ&æEmä)HŨÉ8ëY´uÂwVHˇygũœ–“oČ0ÛXŠ>Ŗš§Ŗh‘čōÎļō#A"ŽÁåǎĖT`›JŗŠK{ ˛5˛ÜOæ(ō™ö‚ŊųíÅVŌųŊÔ$Ŋˇ’ė›#3ųĒH\§ˇnŪĩ]gšĄ{xļŪs#ČwDA’ĖO͝ŠSEˇ°X ͍‘´ß˜äh*Į;°H$yæ Öî%Į‘ö9f…ö2ėˆČ˛Į(Ā@8ĒÆ€4x•ūBA°Eå„Û ‚ãĻp2:ОpÖ4Š¤Oíou &)PžõžžÖ.@ŽûZ>Aá’üãĐ×Fj@Ø\TÚæŅĒŌHlĮmpDģFÕŸˆ´ˇÔÁ.~Ńm.3•ߍšę1Zc' ßΊæâđū§´Q.Ģ ‰nEÁƒėëÉ퇿ę RHÉît㌜ÛŋøvČMŠy)•|âÁnW›äp›p ?n8íŽŧXg‚zŸ•U{{ ŗ*Éoi4‡å2+rĄã°#đ4ļL¤ak2M¨Km=´SG ˇ–Eʃ)•ÁųŠã¨Ī^;Ôw†ËJŲ¤jW‘[Úē‰U‘Z<í*¨đpI÷9§øļIb˜ÅϘ…ŗĸ ¯,mnqˇwÍéŒw+gOˇ]ßŧépA€$]KpX/ŗĶ´=ŽZ2ĄģĶėŧ".¤ē†Q4q¸B ĖYō3Œ@$væŽx< ŽėnFe1/ČŲBŧl\p=?ĨhĪoÖRÛFæ˜8\ˇVõ'>üԚEŒöi’ęøÜÉpáŽØö"ā6ŽN2:ķÍMÆjŽqŽ)ËéMPœŒ})Äsߞ˜Š(ĖÖo5Dĩ“NĶÍķ4ģdˆ6ߗcî•sx[ŲŗĨ|,‘Œõ<~Fąŧ@Ãû2đ•ÜI~f9˙ĐkfAēxʞüģVņĩũģEšBJŋ8+בÁĪŪé[EęqMhyėJN¤ŠŒK˜í´ZąĢ)9‰ō|ųÜāŧ‹Ûļé[^"Ķ`Ķ´c}n6Ī—Čķ ‚:g§oZæ[R‚ķO´ Ļ9 l?a͎Ė![ŊNKXēŖ30Éã׌gņ̚M™’åϐĢ’š9ã¸˙õÖfĨ¨‡í K.~x\ũĪRW žĐ÷§ĸ^ĩÕŽũ¨ä•¸€zs‘Œ‘IĢ$‘Į$rˆ—'ĘË,™NFOųúÔŧëØĖŦÆ8\—-¸š9ČĪ~§ņ¨Žåš7đGA9ķ†=įŒs“īT&’K ¤ŠÖ)ƒ zׯJ¤ŽC+ÍwslaŽ8ŌO1Î7“Œ†ôéĪéŸjnĢĢ2K>Ÿ§KæI (ķ!ĀRx {ā~yĢúŦņÃa4˛:āFGŪUËqĀZãíĐŦ‘d›‹ qœZĢ äŠĩŅÄqŒGnߎjũ­ŖÜ-ēžđBäásžŧQũäˇ’W;d…Įųõ­x­é6r1 ō&p:rxÜų{ĶnČĻ™5ĨÜĒŽårœ6WŸÃë]DO‘Ĩũ˛áY&įVaÛĻ3Ôg­;NOĩ[Ģ>ÉG•aÜōrsÛ?βügōiļņÂŦby0rŲ;W‘úÖwæcØÂēŋ¸Õõ{B>\}IcĶü*Ží¨ŧ‘æ—ņŦ:…Ī” Â$bģ¸ÚĨ¸Î?˜é]N7‹ô/ ũļÆ˙ĘĶb&_,…%WÛz‘Žz.>ĩš¯Ø%î~𥹗ĻvāĮvœšÁđũ•ΙĄjēԒĨ„–rGojŌķ3ąĀÂį nsŠĶt˜“ąÖØxÛÂÚíœQøŽ+H54P˛3Ä@>…XtĶw­K+x%2ÛZ‹âvēL™㜯oZķ葟I7ėļö’ųr,Ž„ą’ķČ,8 qSËŖÅ¨XYdNņ\Cەš•J:î1 ÜOBĩ<ƒr4n´Žcdo;iNáēœŌШÔԚ0DJ2Ú9éãˇ8ĒķŨÛÚ"´ķÅ ąĀ q“č=jĀäęqČĮ^´Ō!î#uõâ˛õ{̏¤…-žE%]ŽČ|ĖãR;zÕû{Ëkˇqo4r8eVä{ÚŠjbéŽcČ˜\dËŗi8įŪ”‹ĨŦíwš–yfi„…Såxö*ŽxPy8î~•.ŗpllæŊ{Į†(áuØąF9ū](Ōãēķn^æ#!~÷xlM?Z@ú=Ōž-éŗz!f pSJ!Wâ(čBĘIo-­îcšˆĸ™<ģe„Ûķ’ rGåÅ]—ÃúeÆŌÖī•EEÄΨéß_F¸¸Ôō9Žgu ĒŦÖ­S†ÉNsüŊë*âÚH¯ZÖë˄IĸWy/ČäŒĢŒsœ}jŒÎ’ãJ°ŧš7VO(]ĒŌ | “Ā<ĩ-…Ĩ‚Jļ°Gģ‡d\ÎĐŧ́XúíŨģÉ۝o&x×ÉKá (äsĀ9=ĐGĘ?‹Šė›íÃS‘%ŊˇYĘ!U ’9#?ČU?OļĶm~Ëjž\[ŲÕ3Âäį˛ĩmRX/bĩ‚öÆČyBc-ß åˆU#û§&¯im¨iV×2lV‘Nā•'8${qÍ&5äWÕ´ûˡ Ûų†ˇVōËũ¨Z[iļFtē°h]Ĩ%•I$|Ŗ‡é÷ˇt5yüCcmwqivæ!`Ŗ9!įŠ$×4‰‘c3,۝@E9$zzÔY ÚrŲ­ zŊÜÖ+,O nōŦfIūäy8ÜØ=?.qÍ&‡-ä¤ķ[ÎĐIåųÖųŲ'ĘŠägU‹ģ¸mÄ1Í—íB*îËžG§“Kģ´ģĩ?c„Ä‘†&ˆĮ´ā`ãąô§Đį*xˆ4øãXûįJ˜Äœzí<ŸBŽ8ôxŌ5‘|™YPFĀ—brĢĀį==+3]Ôm#ÔÖö5ē,S UpCe$烌Ķß­hxq‘ô;v@ĄI“T€Ã{|ØnFzķëMė s:÷]ŊĶ5ģ›se$É+Š€–ÚĘ2uÍX]R\Đ.ƒwÁ?üMjßÜiņÛ:ę —Ũ$Ã~•kĒĖnÕ4H.n­G ŗ}Å˙uĪ8úÖM‘JI{Ļūq5Ū‘m<䗑KF:šž0"ĸļA˛~éb9QČ_ˊåt­^ę[ÛXÆŦ^Đ0šHiÉĀF7ūŅ<öĢKC–ZŗŽ˜Köy>ÎÍ´ėķ =ŗŠæė?đ—3!B~Ņ)dŲWØAb  >bŧtãĨ–7šĸvā2c*}ŗÅsšSŦŪ'eĘ%‚Y‹+såĢtoo889úž 5Ôhŗyáks{6Ŗe[ëГÛŨEĩ ]DĒšë•mŧg>•›ŊΈŲSfãd1Q˜Æėą§HÄL ĪLô¤fã§=8=sZØä‘Äø‹P6—ōEvÉ-¤’): ¤ ŒGŽN{ņüë=dŅ#×mŽ,`ˇ…1MÄpĘ 3žs×ÖˇĩĢ#ō9’ūŌîĢ3Ëāš;X`ļhĪ õĒ3YéĶ^Ãog \ÍrÆBÖōíŽÆs‘Üc§¸é] ¤Ž6îÎGö×Íį=  @ˇē°R~ë{d7nÕŊĄ\-Ō]5ŗ­ÅöāîØÜŦŧƒķ ‹ž˙…7¨‰îå+{į,É/@Nܞ;qū5B`§Ŋb (77 )īÉĢSbkš„ĸˌY|ŊHĪķü*9RHHąļ\älž@äžã§üiĸYÎĪ Î­tĶžb€Į~§՛k%“OW#6Ũ÷†Nry¯ĩôįšŠâYžHÁ+Á´ÉëĀč¯G§,;Žõps•%zu9§qVĖKæ$Q˛#ÂW;rHčxĪĩ;ėOoŽYy@9lį?éW´ôY Ę˄`~S†īŪĻ0ÂĢ åœ”!B¨$?8ÛRŨƑ6žX¤o0Úž@­ü;ϯҞn̆Ī]Ŗ'ׯãÚšĻ“W6ƒkBü‰â†Č{sPŪŲũŋOžŲܨš\ãĻjk•\CåįÎp;m5* f8ĀČĪjÉŖDėĖåđö”#Ž)ôûIvŽ<ƅrÜzUgđΈųQĻÛn8å#ųVÉ^rTœ==+ÄBôiRMctmæ€F6đʐĪ‘´jJSŅ’čÖ_ŲēEĩĢ2ģDb8'8õīŠåŽü/¨}ŋ퓝U<ÜŦĖņų9‘H!A*J¨=†kĨŅn..´‹K›‡Ũ#Æ›džGˇ§Ĩd?Œô™E´{oiĨX•ÕÕA2mb6‘žrˇáWgQ5&™ĩqpļ֓ÎŲ"$yĪ\.qķÖš™,|@,ÛP:Î.Ņ<ĪŗÁ‹ĻvõŽ’ęËív6›Ú5™ Q’š˙ZƗĀÚ#DņĨģĮ RĄŧĮ$uÆqøR’š­)E-M;yDļ‘NT¨™Uœ ŠyÉ?/Jtâ 8Ą •ƒŒŽŸ…7kcƒųšf-Ļô#`wnĮiÉ#J u…>5$ôÆ)ˆRpsרeîŨ=)áp¸ëžÕ ⁐})ˆi9íU¤l{TňNqšÉČ“M ry]Æõ;6 ÉÍDįz`Us†Ī¯j `ũsR9äĶ1žÔÄ7 ĀkČGûbģë\­g#DYßŊN•ČHQƒĐ=‡ãL‚ޝgī[Q$ĒĖ’ČąīųI XĄ˙€š›ÃŌyÚY—uģ,“H@ƒPg…ČtĪĩAŦĪunļ2ŦđÉO™‚Iˇ6ÆālįĪ#ˇZĩĄĪįéĻVHĪ,ŒĖą†wˇO#ņĻöų˒C>Đ e‘éK 1ÛB!‰qŽvnjwÍ?pü)Ęrŧū~”†ŒJĮNÉģ™ĸĩ—ūz?Px?ΊéSYęsƜĒŅ8as ;Šœ÷åsŽ”áéîu ¯e–&f•öG2oPšāã5ĨäꑋdY-š1*ĢŦQ”Â˙ßFŗkSĻéF×-jV–—°¤7R4DČ l’`à `ŽøĪᚓLˇˇˇ…⡙§ųĪ›$’obøî>¸c°ĢęÚHÕmâ‹íOoąËîERNQ”›âô5.—`4čž?;ÎŪå÷˛¨=ū?‡ÚĢĄÎXēģ†Č Ļ]ÎÅDŌ;u8A'š§[IÖé$|—ËŽ3“’që“ĪJÉ×nmŲ#Y>u†\: oģa#kdzäō8ČöĢú;ŅlÎcælŝ§ r3Î)°1äđäךÍÕėŌĒb_ŨŦ‘ ģG<ŸSZ?bÕ2"ÔĄ8\*ũ˜œŊZyÎ)č¤ŊČéQes_m+XƒOI#Ķ-’rŪpC‚Aį?į5e%Š5]c€ü4¨(ČwÃÖ˛-|+¤ŲÜÛO R   ŠiÂíčN=é™6o0{œc¯ĩrÚÂmzE]¨Ķŧq0o”—ˆ&5'īgn¤œîĮĪO\Õx5kŦ‹{˜Ü(cĩH qøō1˙ë hį.u ™õËrŅŨYî0+Å)8ib^„Š N3Úˇĩ+=.H`Kø­ü¸ß1o`Ǥ‚8äv'n•j–ŪZŦÖ7h;<š͏—ŋА¸Ī<ŽũN*-vÆúũĄt´ßäģ”"t^6ŽHxØg9zh- Ŧ k?ŗÁ ŽÎ8BG{ 2ą\7ĖĻ öŠŧ"U´‰yˆpĀÄ`ŸøũsŠeû=—…ŖYH]R%>I%Fų@äã#TŪ˙d7Ÿ4’š¸ī‘cĪ|3~@â¤Ĩšž3ˇÜ÷Ļ—Íķ¯˜T)}Ŗ$zfžĘNi õĪéI”žŒ‚{ KŠRK›X¤xÔĸ™”6‘žĐT֖ļļ0˜­ Hcf/ĩO|•  9h¸ÖƒÁ˙&œŧķĀĻîęOOJ ÉlĖĘ sķ61Sr–Ŧ”˜éš7(qœ|ĮgŽ{Qņž•§1ŒJndūė8#ķČŦk/I¯xŸMˇû0†Ũ$v ¸ą'cuČô&ĨÍÃÔkšÚMæˇ§i×dŊģŽÕš#(38E#$c&ĒŲëB÷Å"ÖŌūŌįOk7˜y9WĢËĶņR_ÃĄ]jEumĨ¸ŠØš7îXã-ŽIųFOJ4ûM-q†Ÿ§ĮorļųA—‘ą‚Öä˙ÎŽ÷G?RΡmuydÚ‘¸Ę Šr€¨‚Wœg(ŅáÔ­‘ážō hĒ#x˛Ks’@9āuĨÖīn4ëXŽ![| @“ΐ"ėÁî{įŌ“HŊģÔ|ég†(âČōLR‰ū÷?_aQÖÆéËŲų dËsŽõĘøĒōúÍ>Ķir҈Ø*§ĘUŽ 9Ī<åGį]L¨|ØŲŗ…ķôŽOƯŗNVÎJƌ1Ô|¯ūˇ…›Ôâ¨ė´5ķĢËØĐy_0)/÷SŽF Ī~•ö–qÃ4ר‚.WK°Á=¸$•\˙ĩXúÅÔīãufiwŽšųÎxé[WĘ&Ķ/Wi(I#Ž3øÕĢ;^č,ŽīLŪ42ŦČQĄ!cŽ,ž„ã É•PŅ4īėä‘1”“ §nÚ>ū<ō=˙Zĩo>Ō\ÛĪäu˙>´Ë싉’i*‰Xî°Œ9úŌę'ąBā<åc Žrė rˇįš¯åĘĄûû‰UÎIęũ}kbį>k°IāįÖšģģ¨ŲnĘp•.ßëã>Õĸ3eûMAmã{Ũų !enpĖqœœrq폧}[i’TYLžqÛ#ˇa+āI˛h]hÉĀܓœœô<ōwŧ:ƒPž¸ÔüŨŠ$ŒÍ=ū}ĮzƒQ“R´Ķ5KĢ‹!Ķ m Bfų§“ĖųN~Bp8úОĸ9ŊJī˛%îdÃn2ÆIÜ@¨äõŽĻ;Ķg§”–ˆÚÜ)ÜĢ…üŠY[=1ŠĸZŗ‰ōŪŊ*D“ĩ(^ =Iįø CdĘįŽ*´Œ7íŪ­Ėũ3œt5JGË1ĮšC!Ãņ‚1P6r{gŊ=›$Î:Ôˇ1ØU ā{ķP;“OfĀ=zÔ.܎šÔ€–,ƒ’ā>)ņ§XÕæb˙ë×|ƒœ 흊fŪĀĶG? Ē‡ÄLö<ß4`zĐI4˜Ž“"öž7_Â?ÚŪÛq÷ŽJņ1‡ę•vđį`ŦĨšĸ..*ÂÆ*ĒNŒE!GãRЍ‰íRĄįĨL‡ĨS“Š„Į?ÅH™€%R7`jU¨—ԊphMĀÍrpkZ¤@¤VFhÃ6ËcßÚē—ĀRq’5ƒgâKVDxۓĩ#’j$Ņĩ+Ųûˇî[xĸ9ÚeĀÁRŧõäœÔÜוÚüĻâœúšp#šĪ¸Ôí-/Ūâd‡zW‘ƒ‚>ŧ̧͆’6ę§ūÛ'5ĄČ÷/†98ük+R†uē’Uŗû\SF#`Ž“õ=]ļēŠėČa;–7(XrGĻŊ6kôļ•‘Ŗ|!Uܘ9-Ō”‹ƒič&‘m%­Ŗ #HYå/å!Ȍ`Tä“ÛÛJōOĀíq‰cb‹`ą ¯Zšazn–Bchš) dn‘Ôũ*ŽģķYF˜'tĒ ĸ+9Ÿ7üøÍ8ŠwoRM!7DÉjåæ,ZÔļ߸ ’pGnzb [œëg/eå™ÚČLāŒüÅqŒqųąĄ.Ë'•ļ™bTŒ–UĀĪā8ĮJɌ]/ˆbiÚä;\ēƒö˜Âļ˜ŨĐr=¨$ˇŽßé¯:YJ/eš…Õ„vŒQo•A~ûØëŪ´thŪ-cš)bpōeg“ĖžØËwČÁãÔT—6–wáRę(äe?&~đaÉÚG ŽŧsOĶ-ĸ˛ąH`åYČvmÄ勞üŸŌ“Ø ũYuŸĩ ŗmļx_3Ę@Ķ ‘žãĪNzUũ'æŌ,Éi[÷JwO÷ĪųŊųĢYÁč zúPŽ)‚21ÎG˙LJ°Ō%dvĄHĪ\\âj-meup5(e™ĨlC4˜ĄˆĀŋáVÜĮq{§Ęˇ*ōŗ”q §c ŦO˟QQsUIîIâ mNæŪĻ6Ų‹f1áąÆH#8ãĄīSčŅ]C§{ŋí îĖZ]ûšętĮãŌŽĢƒĮB­?%˜œä÷§s3ÄMrĻÍaiĀbû‚FpŖūyŽĨhiû—LĩSģp…7Îs´rsΝ_ZÄ×ÍÖô’H#‚8‹˜ŽĪ'+Œc#'ą­Ŋ9Ji–ŠCĻØSåfÉo9Ī9õãōĄŸ¨kŗÃrÖz}“]\ŊĮʞƒŠŽËÄW‘Ū%ļ­`mŧÃĩ% Bįˇ\˙:ĩĨKšš´fUšYŨ¤ōų9~ nŊ=ŗé˛ZI"4Ī…Š0ß0lđq×­AԜVœŋ3sŠĀŽŪĻ‘] *[ŲXU{ˆf–ÆhŖm˛ŧLĒųÆÖ*@9ú×?ĨiĢĨnöēÚi„7Ú'‘—‚¸Į K’Ø;ˆãoŊRZîÉØęøįx{įšäü$Đ5îčŪÖI .KÅ3ģ Ūŋ)B Éč:âēkĢDŧˆĮ$’ĸä6čehĪ^9R:wŦ}ÉīŽRōÖæ^Ø(Ũq$‡$ôŽāôúįšhEKֈxģd’Zų’\@B›é•Žnbnxãˇ"ˇõ]Y4׉i$ÛL‹Ú IcÉį×ŠÎƒÃ÷ }ėĐĪRŖ¨û>Ö!T(¯éØzT+ķ¤–aũâ,2ģÂŦŲå݃ Īמ”=ĘLØŋļMcK´Ž‰7—"ļÕb0Á‡ įõsH°m€ˇY|Õ2;†ōÂ}㞊ëôúV6ązcŗŽĘ7œJŅŖų°Ë8˜œuÁúöĢžķ@…Ļ™ås$ƒĖvË`9r};qÍEŦ‹Z˛ėÚՄÉÅÔp:c+!œ€F*-*đŪŪß ē†âd14c `N Z—M˛–I%šŌņ“"†öÍ-žŸkbō›x3‚ )ĀĀ ›;›^ļļĨŊ 0=<ĶÎ9?ʛ‚G<jrō}ģĶ"į/â][Z°šHėü“cōĶ|˜NšÛM\ņ4?h“PĖ$žeˇ#¯Ę:Ž+ĶöĮ95>‡k,ââ%­Î1æÛü…ž  ÆŗkS˛ž"1*Z÷9­7ÁVk3[]H÷))']€–,;ģëŪēˆŧ?agwi5¤0´ ŲÂrĀĢŖ¯$rj‡•Ģiē„—˛"ę14Ká$rAÚ~ņįąJ–×Äļ×úĩĩĢ6æfIŖ&ŅĀöüûQąS•Iꞃ5­UÔŽŽEô–ŗŲˆ$/oæ—åķŽF8jĩ¤iēĩú˨_[ÜÚŠ?&ÎWš# •RՍ槎.›Ētë8­–y^"ĸiK3pӃ֎héqis>Ÿ>ĻúŒ"1,2MˇĖQ’f{8ëG{ięKŽYŨ_ũˆ[4;ĸšY[ÎPˇP9<‘RčvsÚ5ëŨyŽ%(ˇN€ Ķ5{ÆĶmūЖ3ŨąnV< g“ūzĶ´;˛Č%’áíÎj,¸"āëY-Íۗ&›3šfP8ė}ųũ+ņ\^n“p rbÉČĪB?Ŗ1ކDeéÜÔqĮ5І^Œ=ˆĮõ­āėÎę/ĐN5–RFۘC.XŽz7ū<Ŧ+Ŧ–ŅI e€š"ĒÄ÷ÁˇĢ˙ŽBæ6Ķ/cänŗœÆWũ†=ŗØ0?÷ÕuĐÎ é¸"aŗ~B:ũv“ųVŌŪæØČ˛gž¸Ÿ´FJ ōëĶÖŦĀĢ2ēŧŠoåᄎÛKeē`o~Ŋ*ß›§ëŲgÃmåVī͝?ĘŽa|ž y%p6“Ķˆ†Zd2EąÕXŒž zį€zƒĶ°üqîlĐHĪ,¤oē’œqĐwÅj‹ulņˆÚ€>ātį?ãßŪ°™œĢnōyąbUKeŋÚĮ|qĀôĒMėjĨĒOĸ]™ŠHG ~nŨKã¯9'$ũ;~5ŲéÄ2Z“’W–\d7?A\ũ••ĘÜÆdLG:ä\ãŽãŠę­Ŧ‚Ęģ˜ĄbWpÁ^Äu=85r`X-PČ`†bI%šĀĻę­­ŖŪÎ莑ŗ*1ĀÜ3Đw4j7ØZ+I!†(ÔdÜOāž}ĢÎĻÕ&Õ¯ŌKˇfį9æÆí×ÔūĸŪŖoCkBEšhĖd2FŽsœ“×<œ×[)û4@3}â āš8ĪŌė`´‘Ĩ—&@Ką UA# Ö­ŪFĪ{hČ`$Äāãņëūx$î$Qņls6‘ta9$eųÎášrztÆsõŦ=6TĶŧ%y{ng™\Fzä*žšę×ēšNĨ Ā#ĪÚĀ|p }š?ũjâ.oūŨm§iĨÚÚĸv˙ž¯‘ŒsČũEh jw~û…áų¯o˛EŧJĪ\—?xĮ;r{æšV×ĩmr˙¯-›r#ŠŲ]ã oVÔ´ZFĶÁWÂ+iyidšęāŠ'č âŗ5 KjÂFĶŨ!#æ–&2ĸc<`āãđ­Ģ;MÔūįPŧ<Ė´7šYÔãļ<1øÕë7ZÍâ–?fŽÁaĩ˜ģŒŗßĻ:SNWJ×$đ Ļ•oŽ„ŋĩ‰šWWĩÛ…qÛ9$ŸC^Ë÷Š“žšįĶžĩâ6Ĩu,"a$Ņ/š'$>lúƒÆŊžĘø^éđ]ė &D“™ãķ&ąŦĩš­' ˛¸i‚cƒ~ĸ¨ë:ŠéZl÷rŒ„áWyŽíÉĢr/$Ũˇū„ĩ—âÛYuæ8t‰ûÔSÜŠ Ä?ÂGE?…ˇ„uĒęŊôŠfPé2vžžËôÅ6ķÃמOí->đĪo [wK@<ŊzņŠéôoé÷öą.ĸŠįhY"s´îgĶ==ąT|IâôéŦá–9î§CqFC’[ŽßZ„‘ŲĪWŸ•­‘.mVh\„‘wĢ{Á}¸ÅrÃZŦ:”z•åÎŽhŲHšōDl$1„¸Üūē‹(×Fļ´“"HāX؏P'ôŽbĶOŌm#Ō/^\ĒÜGũądŽW^6í^1퓷ŠÖ' ž&uīˆ÷sĐũėķ߯ķŦëÕˇkfŠčÄbm+#p}ž´ž"ˆKĸ]ĄI$]ƒ(Ÿy†î@÷ëÍrēŊŽĄ–lmKKb Ĩq4#¨īĮķ4›f”āšŊėvI…RR0œ0(*yúg“īR‚Nr?.:T8PģJŒqښ3jĖx\qŒ`ķJ3ŒX{Ōg“×>´Ö;r;šb#}ŲÃ}*Ŧ‡†#Ÿ­JÎzŽ{Ô2caÉų&šB ĮÎD8^š5*AÃīP°ÉÆxĻ2Į9'ˇãC¯b<¨c°ęÔ¨›ÉrĮ§cL ĸ ƒëJžĶéVČųA­@9œĐ ŦT˙Ŋ4ÆA<ÖŦ"ž3FŅõĪs@* dŽŨ+Í~(… Ļ€ Ō˙Ž×ώ¯ W—üP?žĶ—Ŧ?ú ]?ˆ™ėyíQ]Fļ3ŠEíšíĸPQqé\^†?âbšô˙ íá\(ĩe-ËčHŖŠÔqøÔa9ÔąŽ):Œ •0{āÔjZ•sž”ūƒ$“ŽjEäž´ÁõŠ“@^_Ã"œãÛ­4}iSŒķÔĐ„OCĮšŖoĸØGną5ēHWĢ:ķųÕŠ™R $ŨĒ[>˜ÍÚøĸX–8Ž-šN0[8'¯n”›5§5Ŗ/éúU„×WĘÖĒQ%؀į°įõÍ[ūĀĩŠæ ‹Uō90É9œÖM§ˆí­ÍËis,ĨøÁĮJšmâŠ[ÛAŽæs“Œ ZŠšŖ{ĸYjWI5ä^pHŠ*7lœæĢx|œ8gŽ3˙VŲŒtę§s×w9Lí'L‡Hļ’Ūym+ČĒ+œqœÕ[ûheÔ$gŌ¤šĀQæŦ€Ë"ļ›ž§úV$ļWMĒ]\Û\yS]ĒĐmGnsųŌ“5ŖšsEUK'[ŊēyŒB3nĮãø{Öfģp’ęig,Ë*l{8âwŒģrY׀¯­khđI ЉU÷ģ‡åbxĢW7°XÂ$šž8Pœ‘€?Sū@4D‰ģČĨĄ€–R @]epæ9Z@įÍĪļ=F+#IōŽ5+[ĄauÍ4ÎėÖęAÕÂįŠéœå°zWImso{nfˇ™eˆąņpߨ5ĪéQŧz”7ņZÉ4Ļ-ōFŅĘNâFŅČîA>”ÉĒÛ,wĸ+ĩŅüšĻi"Ž{wų,sØÆzVށs˛[% ˛CšHc8bŌz€}é÷ēTZ”d–xļ§Ę}ģ•ą}¸đ¤ĶtTͤķ>×q6lj ņ–ÜĮÔąÛĨ ,gęēvŗu¨É%Žīŗą Wíf1"l\€ĄN>nãŸĖšŨŗ_.ÂŪ2‹X‘J)ČS€8ÉįĶ­E6Ąo˝0ßß9'°~9ĀŠ ‘f‰&Œ–G ĘØęNŋKZ™?ØÚ0›Ët‰įbYƒK†<úÅ[ˇĐlm¯ ēļĘ’"zdîČ#׎ŋĨræ}ėĪ›Čž›Ī!‰ ëôŽŽÃ]ĩŋēŠÖÍ!B_*W¯Z„tÍO”všw-Ģ[¯ÛĘ o¸‡ÁayČųöĮzŊĨĪ%ƝŗaųĘŪ2@lvČãŪ‡ŧ1ęPY…SæĮ$‡/´Ĩx ƒëOŗšûU˛ĘT.Y”ÜŒƒß5Læ3|IŸF–ę1äÍĩĄ,~~0R2~ŧc"ĩíËŗ‚2A0ÎãąõõÍkšŒ„š}ēŨ>ĸąjŗĀ 0 )ÚG&—9ā8¯=ˇņ›éW7vˇ0ŊĘ-ˆ6ßķ¸ņŪ´#ø‰`Gī-n”õųBž?:Ždu<4ú#˛$ž°ÅQ—LFÖ-uÚ¯ē2…åÃ9úŠÂ‹Įú9&á1ŨŖĪō5&âA­øŒĨĢH,âĩ$Ģ`nmÚ.…ėĒÅ7ąĨ¨x_FÕožķQ´Kš6,`KČ]¤ž>ģŋJv‘áŊ/Cēžm:ÜB˛Æ#xÁãåbsÉĪzšu}œ>uĖŅÁ €KJÁ@Rj–•â]7ZŊž×O¸ų‡yeNŋNŖŠģ3žęäēÍÔ°ˆŖˇ–(¤bė^V;QTrÄcæÆG¸ŖBȡš‘ŽDĀÎØ‘×kžƒ īø1éYū$-í‹}„ŨėYdŦLįp Æp2jī‡nEÜWŌ„eí˛0O ×>ų¨ûFíڑ¤˙ņøŦ‘‚ãūŖa„´ķŸ4AQŽsžĀđ5ĄČŲÂxĒÉŠ#d sŽG ߘFü杆og•^ U„°(į×đ9•uÚæ”ēŒĐžŌeŒĸŸGãķĘ¸ >im/#Ŋs"†ŗÜāíˎ‡ņķS[^ņ0ÚGCŠŲ}§OeØDĐeã‚õ÷Î0=gé7e­Uã+åŋ ‡<€x­âÅJʀ–ÎÖ-œ7ĻOų=˙ -ổodhd‹øäĪ<ûĶëëZAĩÔØōŒČ…É1€HÆÂĢmIfŗŧļž…ĐFĒ„ ÎT’yôĪãZâō)Ō;yŖHŽ͘ųÜAéú‘øQy<¸f:¨Č'š‘Ÿ_­P†ČΊYŅDˆãiį×˙…¸‹fŪoˇ4a†#ĖŽÄr0œŸÖ´´9L:€NĮåL”œtôāœSôÆkØ%_'æ(žb. t#Œõ9$ķę)<ë{Šæ)ŗ÷ {ŽéÉüAô¨l¤´35:KRęÕSlwBËĮĘĮ }FqRÚÛ¸‰ĸÔ(āģ •’ėNOŽkĸˇTÖíĨĩŸ!žpŽŖ”ä|įŽøÅsvʰÍ5“í[¯ĩ#Īų4'pjÆŒÕxŖ¸Ī.îTd•S“ÎHÆG=ũ+Ÿą€NAqōFSq)Ā/ųŽ˜í]ŋĻ>ĄŦC‚ŠŲȈž™įúĘ­éZKYÂŅĪ*)9' Ęō9ępx§áZ§dgcR ŠÁˇząÆIIäp0:ûúwŠgųŗՂœ98ã?ũJĒ#ÜQĘ^F_˜/^ü“ƒÆON:ҍ™<ˇ`¨HNōm `œž˜Î? Ėŗ—ņ=ķ´pŲÃ7ĘAi0X†ļOLŸ­s–måŪC$œ¯šzåwy̎æVŋyn“nÜFŒ"¨įļsÔŪ’K1 ,RfÃrģ°3úVŠYŪ§Ą^[ntiĨ‚fHAÉáĘ)˙üꛨĸņ=ōnd+o+wĘDb FŅõ Ļ lÛĮa'‡Šęrm$\œ‡Î õÎ1ƒ\õίĨęĖ–Ō[Åy{ŠŅO,” § 0ßÎOļKŖ'%ŠMMœž$Õî-ŪF]?Oļ &Ö'Ėf\ĒŽzžk‹ŋĐu Ø_ÍnļÖs1Hßp`pyãÜöÍz&•gŖø‹YŗÕdp^[Å:쀇 Îpp:ũĶÆjI,m|_¤@ÆÎ ^yJA?œđ:ãWPš§ÔcņjV`âŒÃ…õđM–đY0‘ņĨąîr¤âŊJÂŗévđō {÷ũk#JĐŌŪŌ8d† {T`ëkn0ĨęĖysŸaô=kyä#'¯5I]šAXcā\gÛúŠl’n$@É%æcģ pbøžūæÃMDąoô›‰DQ°ÆFA$ËdmķI"–ĨāŨ+Uģ3ƒ$.į,ba´œúŠéSi>Ōôi–h’I§^VIX6Ķ큁üëūČÖ|;uoŠK¨ ãIÔ\B›*XėzÆģÉ&Ž%ķ&’4@,ÄāũJŗgMYÎ)(Ę㎐5´ûœF 9f#;zķ\f‘Ąéz}ö›}Ŋ4ˇyQĻÛX†õÚvÛäV ԑœrOÛ_,ré× #ųq´Nø;W-î_š] DĶî>ÃueŦë öo$ē]Ģ ™UĪ•Ô’1žk‘îtz…힝jn§$B…ā:e‚įõ÷Ŧ˙íí%jVœŖ÷Ŗ'õĩ{]š‚ĮM{‹‹vš@!xį×ņíB…ÚwœņÅ9~`7}y?•)íœrjŒÉã“ŌĢČÄį9Īj•°¸'’jŗļOLĶ€yãÖŖü˜šxĀįĻ)Ÿx1ĮL`SØDd§ļriŒāãŽĨLĀíÁqPɍÛG|Ķ?Ŋ‚ÃŽ ;T(=˛:q׎)›GSôÅ#žxûŧĶ6ļ:āTĻ7$ ųϰ<į‰NOjá1éOPžsMm¸4AžÕåŸųžĶÔv;āũ+ÔÎĶä˙ū'ƒû“ĶũãWOâ&{FŅëGËMĸē ŊfüņҍŽŌ?NõĮxtväöQü뮌œú Éî_Bâ•(âĢ#r9Š• -#ät§ĢsĐÔ Ãĩ*1ĪĩXzSÔaŗŸÂŖV ŌĨ"}yĨĮëL÷§¨âÜēĨŦŦáHœ‚8•ĢZęļæ{Y UmŦ`ƒčGjËžÔŋŗüA3ĮĻ]]ŋ‘-o˙,nbAúã?…U‡]û=ũÍÂxUSq´ž-øČČÉ÷9ëTc{i ķœqڹ˖ŌXŊ]@DŽBą. ųG9éZz-ėšŽ›ö™ÆŌI TeÃ*† =jĄ7 }zÖļ1Ī›–ķXH!GøÔČ֎排-E„kiģČ„eēã&Ēę1j7S[K9mŅ”ÆZá‘ĪËÎ~R9ÉnÂXf˛ŠHSˍ;@črsQßę#O6ÛÔyr¸GwpĄ3ĮųâDˇŖ[Mk`ąMIG$yž`bG͏Į§zĀ´YtËĮÔeŌŽšWWiÛ U'œŠ8<ƒžĩše‡ųÔÎ7^ëX—DŨ ޝ䜃$~rũŪ€āãŽĩŖ§ŊŧÖÉe´[mÄ^X…`Twšļ§OŪNŧ€ė$vī–ūž•=Ŧ‘ĪgöāŦR dvänŖÖŠės؊ūÖÆæŅ×Pއf—ŖëØũ*Gxã˛.ŋ2*Ãg#3YÚžĢĻğfŊ‰g…ĶxÁVW*ām<ļ{~u|ÛAmĻÍooŽ-„AŒg$ā}h{ˆĀĐ/´Ģ+(ŪKÔʋæ4’ķœtÁāĩļÚ͂Æ;”˜–UÛ‚NN:~5™¤iZ6ŖĻDíh2 I¸d!Āį#ōjĖžĶ’[ymaō$ŽTsķČ‘É5 3wė›ķ5¯-ōŌ[W’HÌoC†\wđĒē~€ļ:‡Ú†Ŗ{?îÚ=—2ų€T‚8ééŪ¤ÖŽŽ•5ĘÜG!@$‘ (ËČSUtmfMNYck6cl ī,ĐÎOJéõ§]#aäŋ€ū܂ÔÖg†#aÄ­Ė,C÷čŧíTāy ƒÎ:ič"ĩ¤ŠåyŖŧM÷2˛ŠÎĖn'ŠĪˎ09¨uv¸”Ü˜‹48­Ü‘oŒÉą-ĶwâhŌ­cI0ļȞΏų’2@%ƌį’9īŽBŒt×:]ėļķ]ZC4МÆĖ™+ßųŅŗØÅևö>—“)kŧų˛ČžŒ@f~1ųÖ§†Ø>…lŪfōá›pe~Ŧ{¨ĮåU⁀:Ö§#dÆŗ@Ņ;ėÜ0 ėGĐķ\6ŋd-ī0Ņ/—{…•ēĒLˆ?FŽüŠŒcƒšæüObŗÛ<[p—@9ĮÎŋüR†üPUÅęDÕŅKI–;ËYaUd!%ŒšųXsŸķÅUÔm^īIķ#ųîėŸÍSœÁųŋ<ŠĮšôŦ{™!Ԗiiēųeæ.2ÃØü­˙­ņ+ÛG,Ē !ęš0äß!€÷"Š™–íŒRé‘^C$šC°\ôzĮáY/úCĒĸR,At?įĩgDˇuÅ֛+;ĨŗoˆŽģY‰$cļyüj+{yãž’ęI<Ël7 ĶØŋ_ŠGKƒz‘Mkî“ɇ•~Sƒ…=Įá’jÕ°•Ú[…‘žp8îrGpsEŜŗBŌŦâíDEn0yė2?Îh˛äCŒŌBāqĪtĮn({S ŅU#–hÆ_(\‘Áe–zöã­lIĨüÉsíUĘ‘CšĮîrsßÖ°íln.5;iāē0ˆË$¨yWQ×ŋSĪj؏I‘ĩfÕRúuU„Į%šƒŽŪ9íXËF\v.ÚÅ $,Ļ)æÛÎsô÷8Ž[ÅēΛcâˆ!ōË\4_éNŖ€?„ߎO #ŪģxÖ5Øāļt#§áÍx-ė’]ęW—Dūúy¤“zdœ~JĒjî⓱Ũk—đØÚG#ųÂV—lMĐ#0ÜŒ{đj{8ŨĸYæRéÜŠČSũqūq\Žĩu5ķ[Æ\‘ !FNīŪl‰üą]^r#Ō ‚1T”œˇ<ô˙9ĢjȄîdøŠ÷û2ÉTJDĖåüščĀāgŠįžĩdiúŨ´7“KsvŽŠ 3Č÷Ü0đGõääščĩØ­gˇwv 7ČÆ $öĮ§aךķpžkĄË*Œ€289ãüįÖŠ+ šĢĒk zŅĨŊŗE KōŠ~XÔûœŌŲ[I%¸œˆå. <ņœŒqÆGáUcxL@Ü;úsZ>ˆMmœ !v”“Šü?Î*öDõ;ûŲm΁Õnaķ]ËnÄ"A€Ų8œ“Û¯jÅēŽ;û{ĢŠ´ØôíGM*ĶGnŪdsBßxŠö ž:sÎGa§ĒˆÖIļ•, ę_ŋĄāWĨ´¤K ĘÆÚ$МįhĄ^=pųŦUËg]­hđkēĩŌŗ@Ĩw0 är8ÁéĮÕĪø>úM3ÄmĻËäp\oķ ͅķžövŽ: du÷Ž‹ĖšÃÃq\BJKįŦ{cįvė.H''–'ޔ燧ŗayĒ‘6 ˜ØHHHčOˇ\œ{f•ôÔĢ]+HJq郸ÔE™S͝ZF ˇ-“ëīNwĻ=ëAĒåU1‚Msū'ļēžˇąŽĖė˜])I?ģų[šŪ偂:ž*Xĸ%2ˆíųÔ˛éÍÁŨKø{œŸÛ2–'‚ ō?‚ĢjēwŠ­´į7×ŅOlîŠ"Fšb ¯IÄžĮœu¨nn ĩŒËp@MĘ9’Iqߒ*lŽ•‰›Ō߀ÍLīŌnŖ14åíܐāŋ…5Éé?Øwƞmt}R+„”$îûbaãzŗqžŽÂę)ßO’;iV§‹jH˸#žĮ|ŸÂš‹=m+ÄÖˇ7šäwˇr ‹ˆČ–E*ĄųʨÎĘŖĨi­s–NōšĶÜM æÜHąÆX`š“ĶņĒ7wvö†$¸‘b0D-üLx¤Ö’åŦâ6ŅĮ4ë:6Ų8\É>‚šôĶuˆŨ{ ˇąO+C!fuädvūY¨~FЄZģgS†!‡ŽyĮų•ř‹ļœZ°Øōķ€==úf˛õ R 4fy* '=*•Ų›dŗ>1ĪtŦŲuŖ˜FÄnúôŽFīÅ:…ÔŦļˆ6œō'Ŋg0ÔnŌIä¸XĘ–lô?EÅo]ÍcIu=ˆî˜Ü7°5!ų1Åpvwږ“‡1,–Š2ĪÎ=Ī9ŽĘËQĩŋExĨ ģ͎Z™ÁĸgNÚĸr2r;žõƒŒôĢyČį‘M–<Ž:u¨LÄŽ0N0M  °ü*UW3ëIÎîq•' ¨qÔTíÜcŠ„ķžÂ€0Ē@Æ*§ÔšÆA¨Ü|Üf˜’sČ=+Ę>%ļuÛQŽ>Ėū<ÂŊ_‘Üc5ä_ßw‰Ŗ^›-”qūķUĶÖDĪcŽĸŠ+ Čč|8?Ō&>Ę+̌|Æš žcŽâēxķY=Ë'SÍLŦ¨W8íR% '\wŠAė*8*ˇ42c€ N‡Žjēļ~ī㚝Oų4"œT€ŸÖŖC“Ō¤Z@6XÄŅŧlI?s‰wy 9ļž&šÕOî܃ØÖÖĒí—tęH!Ŧ•ņ@‘vIcœA~ŧúbĨŗĸ”[W |Q,¨VÖÔų‡ 9#đ{AĶî#’Këė™åõ īéÚŠ§ˆ­îūÎØI9#áW´Í`ꚟȍI ʒ99?Β.JJ/•qF‹3Î $Xޤ ã?™ŠúŒö¨į"ĻVÅUÎAļöņ@…cP¨K3cԜ“ųœÖ¨Æ Ļ/ˆf& đf|ÛpHú×Hį#šÍ]4ēšíŽfķĨrÅ×hÉ8įڔiJ1w‘bÉ<ģ8@„Â˙Už@ŦmfÜ[ŸĩžĄpĸIh ŌÄ1ˇ]ÜuÁįëvŌšÄYœĒāŗõŊ*Zíu!Š5´°™CŠ xīX‘xSōĸS­ÎB‘Û­_Ōôëû]BIo.ÚíL8W8ųI ãö¨šģŒnåCEĶõ)üˡ”˛Æîįdp88ëéWmŖŠ Hb†C,J +™7šîÂŗu]]GQŠî;ī UÚb V,2OŽzV†ll4Ûkf7“FX+€H•iĐį9Ís˰žØUŽhˇĒ‹ÖEÁ!ǨöÅudg#'Úšzú˛ėķøJ¨?Ŋ‰Ų÷HŋĖyĪPGS:cƒŌ†בīëOÂđ3ųR‚1KßĨHîÆĘ‘:2Ŗ&A!Ā#9㯞)Yá“ķwęļĄĻÃĒY5ŦūbŖ2ą1ļÖųX7ˇJ¯Ļh6Ú]Ė—0Ës)tØDķ1Îx'ëMė'Ք˙cŪâ$™ŧ‡Ûũ×;Nä:Čđģ˙ĄŨMl‘ĘĖęĢ´(߁Ô#į'ˇĶœÖÆŠO¤ŪB‰KÂÃËÎ7qĶ?ᚭ ‰wrHˇŧ˜’éBÉ"…P ^ØÁôÎ?ĀfiĶÚÛx‚yŲĸHÚiIæBHrrU™Nãœt…X“BÔūĶo!–ŠüÍ4ęĖĸBNāi<÷8âŗ,tįÕ5Š„°I ”‹p ÎÄ˙ŦÚW vŒåOãã‘[÷ÚÍÕŽĩšØŧ‘Č#Û"#%đüíĀ 2yįķĻÁlCâŋ*K{ ō("|Î€}ÆĎ_JŌđų΃§Ąsœ/NŸAëØY^+g0؈\™ Ž|Ŧ9Î%@1×īdö­?Éč6 ŖŠ…*Čt$ŸÖ“Øæģ:ĸ–b$– ĩŧ†úŨĨˇ“zd$2+˙A’{‡¸›ė¸aōČ|Ŋ3Á­ËKFŗ_5ņ ĖAũAŠÔŲÆ*7.•į>ž´Ķ¸`ā“ž‚¤'$’ŧQÜ`sÅ&LWsÖüWũĨ%ž˜…–=ėÄuëSøgŗŌjIaаa)ڎT­ØjØđĖ6Š`nAO´Ī4#n'yzŽhņ5¨–ŌØōÚTōĪŽ[?ž ČīR‡ĀÖænŋã%äĩĶ–V¸q€z/ĶÔĶŧ§ęö}Rõ,ņíV—!ŸsƒÛŽõwAđ}ޜÉswļâí~nF{đã]w ×īfįH„šūI{t4Ö¯RjN1ƒ…4eK č÷ž!›Q¸•åŊ@‘€&e6ųā)´4ũ:ÆĮPŧ–ÖIYR1,o3HFŨØ9bO ãđ÷Ŧ]OÃ>ŧÕ.îõa×A˛+NUĸŒ(u[8ãõ­hē>‘×ö+'Ųįd,rųYWœ“ĐŽ lôG+x‚‹J§%Ų¸1mya EŨרËpp jhnĮJ‰OÚrŒS3žį$1“˙×´ØĪÎØÂ9Ščq‘éZƒ‰$ķČOQŗ76ŦĢĖ‹ļHōz2œåŠĩČnŊ}hfüN15sÍõëxá¸i Ęî_='čGũōGũķíZöw q¤ ōĀÜ/ņū¸ĒŪ'†KwŠWĮ í ã(Üįđß÷ÍCāëƒ$WV˛70ČČÃo$ū\ƒųÖ¯Us.ļŠ$švĢe2ēDkfbE?.~ģAüj xžirîĖØfIxõč1øÕßÅ!ŌD›šŠâ)ŗ‘Ā1¨'ŸtΊMu ĮpFĢķŠ!ŗŽß˜ĒZ̉Ģn^ãíkž6Ė~ņ\üÛIīOxÂ+*sŽ§ÉęjÕã0šų€Üų8?Lį’ V†Ã,R7E Žy-+Ov…˜‰Pģįiô¯jˇĢ¨TCe$X”“Ęŋ5‹Zš-Œ¯ë˛hū oŗíSĘa˜œ Á˟\ÔהZĀ&A†ģyüzsū5éŪ3ĶŌmÚīåm“`zč~ íãë^dą‹ve•0^wr=z ÚŸÃĄœ¯sĻ´Ķtš`\,†Wb-Ŋųæļá™<•ˇ¸…å8<ˇ};~…sŪ”‹ŠmĻ ˇ’ƒ–$‘ĪNƒ‘ŠĩĢÎą)ŽÎ+Čîƒ,4ŗRHāāÉāĶÜ[šö &gˇxĮ˜¨Í l¨B2~ū=ûcĀbˈJŽĀ`ōE%ÁÍ"¨1ĒuBĀātÚ ĀėyÎH§éĒLĻMŧāŒ0<ō{ô*ֈL%!°sžpqœc#ŊkøjG‹T†@J&v–3ü&ˆ4…X€NāN;gņüÅ=ü´ÁE2>N‡§Ššūtn+Øëõëų%ŅĒ´ęRũž' :ãûfĒNék¤j‘¨)€[C“Æ× w˙ĻqŠü}ęļ˜Ëu%Æš<$@ŠäY …vîų*Nsļ™%ۙ⌴EjææëĘPY™ÁÉ 8Ļ{‘[šŌ}§QđåĨ¤*č†é|Š-åÁGndIųįJęô+9´ũ {—ų“8÷í€?Lqž3šĖŌ4M(^Zk:mą‚-ŒG˜ũžp^ŨGˇCÄ;ucĶĶ'ük5ąĒîÉ]ЅPw§ÂۇąŦÕš”<ŋœ‘ļî;‰ã!@Sž rzÖÄPqˇæĄčUčw˜;ą“ôĒ:īˆ!đũ´rOm4†A”€:“͝ŋŌļ ]›Ž3—?ČQ=­ŊÜMÍŧsB㔑w/ĻqPõ4§Ę¤œļ8yõßj6ŪÚØ%…ĸFe2ļˆ™8Ål_x\­ŧ°iķYE,mÛš2ÄAā¤äuę*6Ô5=5Ŧí.ėb $ąB—9xĪLäpG˜T$îv:ŠÖĻmjŌ[ .éŽg{k_)„“+d\|ÄČ?Jæ´/ ÅĨęQ^ØjčĸmØīX˛ËČØ^iāæĢŠãĨJ§š™zã2qž*%8"ĨGÉühd<ô5:š…N J Į4*8§ŽH¨—īíR“ōđqH ē¤Â-6áœPŊzšÉ¤û4m)S#HUځĮZĢ­t{œt1YqxljPÚ>TãųTŗhAĘ:Aūs×4Åļíbá@ åė g‘ū׊á$nļ—Ė ]Ķ5SŠęˇ¤+$>:æ’`éTIļZ†k™ĩ‹”Y‘-mČCĪ˜ŽzžÜĘŗ$ņŠyu;hÚtwVvîUĨfÆō:íV5? ŽŖz÷v÷÷rLĖ"û˛˙U^K4ũ2;=%aS ĶįņlĻ´ĐŽĨß-ūÔjʒ m§øs؟Žk%õ™„,æPÃIät`~\7L}kCL´“OĶm­ˇŧQ€\ d÷ãĩBîūņ´ųÕ´éãʐ%WÆ9ëíQ#ZVž¨ßļ•žÎ's–d˜§Ÿ§Ō°ŧD$ûu˜‰Re #´ MJáļ8õ>ĩŗl_ȈAn=ņX>!š‚-RŲfØŦa'tˇÍl¸ČĀy'ü*‘Ņ›ļŗlŌāšfGU„;ŧ(vœ đ?4[j0\´q§˜¯$"uWL¤ãųÖ]Ž”‚Ę Ŋ7ËWhÆ“ČĶÆŌ6ƒ‘†Št6ōÆņ¤š %ķ!ųō#›'žÅ!}9Å lį95#(ΔĖA?HĐ呗<õëP_ČëatéģzÂåHę8ŠvŨ‰¨ŽnRÚ .$ÎØÔąĮ_†5ņ#ĩZÚiú]ķ\]\°ũëžöAܜũ+OIļ×Ų]^}¨ÖDr0ËÉĮķĻYK¤Dæ[˛FōXŠPpyÁĢļvVļ­$–ąĸ´Į.ų'wâ~ĩō’QjÆv˛/^ū3fēĻÍąīkfM›w6îŋŃZÚqcĨZą3nōPŸ<ųÛü^ūĩVmT[ę3[M-ŧ!mÖDiI‰,8ö_ίÚ\=Օŧî›^X•ŠŒ‘œdû˙úĢGąĖ‘ÎëËÕXI Í–ÉtąķˇŪۑ´įš×Oß×{yÔ3;ŨCũ­Ų„ZœŠ‘‡b 7pwdä ÆģGŋüņCØcđ229§ƒÎHâšppsKČã¤foˆutÍ[ˆc—rF˛:î š‚–Į|MSđūĒ÷w×V‡RŒ1F˛,ŪH’ARô#Öˇ]UĀ € āŒō9ķ§…_3ĖØžawcœzfž–›û{6 1;Œo TFf*¸ÉāÜ~tË;ØuōۙŖûËŒ“´ŒG#ĩ&ĄĻŲjq„ŧ€H;NâŦšë‚#4ë :ßJI#ĩF]÷°.ÍÎĀ$ŸAųĐÁ˜Úփ>ēņéúsCtR͘ÂīĀlāķ–öí[ˇúĨŽ—Ow#ĒČūZmFrX‚z(8ásž˜BÃXĶ/ĩ6†Î[1ļ*6‡ˆäœņÅ8ø‚Ôũ•’ÚåÖb†7XÁ Ŋ°3“×­> ļ0üMpīr#‚úŪîŪdY>Ä-–g_I9įæ*= u/™ũd%“Ėo!>ŨĮ $ lÚ&—s3Ës§ÛË#˜É'Ā=­ÚÁ­¤Vđ.ØaQ ŲŽũ)7qĸČ—õŗ¤Č§NŒEhÖŅ‚Ábq‚¸b1×ņĮŊ_ō:b€ ;ŧ1YÛSYNņQĀĖ™ãœŌĸ–8ԐHĨ™NzsīO Œ`úU\ČR‡=ũéä*ļIČĻî铊k¸#ČÍ9Ī[›Ŋ>æ>‹$ F= ãūú•s^š#ÄSĢcũ.—åA'ķĪį]–°˙ģN6ɐŒãä-˙˛×+ámnQ¯.#Øę­mŊøÃļq°ö}ëTũĶ6ĩ6õ{P`š ‹SäLŠ›ÔĘC;p§đä}ėúW)3^iHˇ 7ÛtâHip|Čšä0öį9įŠęo}*P.7KfĖ‹Åpv>eĪ<ƒŒį9¨oížÎÍ0Rm™YeL]Pū%+߆Å ÛA3 \$- a"áÜ`=ú`įņ>•Y˜‰å@YņÔ}ŊŊj5KÕ%Ō™‡” MÎ^ŧ{dįčØĢ.ęŽî˛,ā0<œātĀBØėô€ąhŗ¨?y6ŠAœg#8ú֝ēĻJ%mĀŽĐqŒ’9ūu™ĸŗF>\vŠŌaˇMl † cđãõ‹f›j7PĶ“Pđô–`ā´Ca œ0åOž嚍“\ØŧČIJ(fÉû¸ |Ãˇá^ĩgqšŧ¤į“Ė3üĢ€ņžÚfŗ3Ék˛Z'\„ËHĪcœņéWMÛBgÜÍĶ4à ’LîėĀ‚Œ(ã€é[ąG#6ōÁ˛Ū˜ã9SĪũ+2ͧœBĢ$ĘNÆ#îõ!IsÛĢ^DieûĄJ‚ģ•vä`ŸĻ0GĒäõ%ŋc›ĢE '#)\œ‚ qØķøæĢ@ČŌa” ėsĐœuëžÆĩüi§ģŋW Ņ…BĨ'zņŦXî!ļ„€¸“ nĀ;ÉĪ˙<ŸÂ´ŨbíÍËFŦdmœķ¸ãĮaĪåôĻčTž&ŋFLzl873‚@cƒōŽxĪéÆMN‰¨xší¤žĪ§&MÅˌ(\ž3ÜúÆ:Ž ôˇē•­ŧ0éúXō4ČÎĐO™rĮ=XūgŽƒ-éa¤>îI.Ž­ėôøÆÄmEœc'Ņ@éūÉnäÖ։á‡Đīîn>Ūeîĸ1ķķÆ}äQĄYÛčä]ęÅüÉōŖ8RwëęGq퓾’ ’9ģeNáXJOcHĮ¨øbKkh­áPą"mQŽÃŽ•“ˆôų/䲡c5ęJ!ōJ” A9äõ’+^ōæ×MĩûMėé!‚o~IāU]nÆÖßM}^ÕÖ˜Ųd†xUIg#hÎAČ;Į^Äō*cĢÔ§°ŨÃMgŠ=ü—î%vwÚŖyÎ3Ô¨=3˙ęęcŒĒc¨ää˙ŸjĪŅ—Zi']NW$‹Œúņ¸ņĪSƒíZŅŽ“Đt#ŪĻMļ8ė4#PĒNI$ÂĢ=ė÷ÖÖRķ§Æņ…9?YäႎøÖF§ĸCĒ]ÛË<Ž"]vŖ'8į#§Ũ5šÅ+ęhLÁĀ2xĒ÷pÄėžj$›:d}Ō:ī\Ū¯g¤čļk4÷ڄj1åĒŪ>įöQšÃŅļuŅ|.ŽāŌ’RQ'˜š“;yëĶ÷ĨwąĒĸœ\“ąÛjšXÖ4§´iÚėŒ’Å€PĢ‘ŽĸŗtĪ G§jqj pķ\Ŧ,ŗË"$ėåNæoA´P0lj˛Xiŗ]Ae-Ė‘.å‚#—ĨsŪ×īõ}ZHîRÆÚ(ã}‰]špC&˛ĢōōGOJŅ^Į3zššž­“rNŦRG+”RÅN Î? Îŗņ^¨ßÃil%iĨs…d+Œ)9įé[ĨWĖ9°9ö>ÕBwļ7‘FĪšž$,gö&•c(ZÍjK,!BŨ@+ĪāĶĖÍģ˛21ķ’IĮА1^Œā’IĪúV6ģ§ãKˆmÄ(Ęŋĩ9[@„ŦĘ3ØÅĢۛkwHÚ WvqĐr*îŸōØÜCqĩ>ČÄgŖĄ0*ŧ™'ĩ+1úŠ…›'9Кĸ#l~†Nœ*œíéīRIŒķŸ~9Ēá nË1$’wrŌ€BBį8&ŧ[ƒņ]ëqü˙ė˛ršęEx‹?ŠoČėá%ĩĨš2 zSwšJ+c3 ŅO÷Ģĸ‰ˆ̜ŅN#o÷Īô­čÆHŦ™eä>„ sUŖã¯J˛¸ã*}jTųF*äsČ#š°šXž:Õhúu•Nœ÷2“éR}*4Ā=9Šg9@gëlF‘pFsüÅ[†($…ÃĖ ōƒĶ˙¯Uĩ‚‹ĨĘddPW*Įä{Ķ,õ[$€,~xEéŊąíœTŊÍUų44ÆĖũëh=ãÛm>;mAîĸTDx‚QŒi‡XąrķûČÃúT֚ėŦLĀ˧õ"‡aZij^Sž˜æ”†$Æ;Đ#ūā1øS3ąžœįĩrסˇ7Īe$ļ-+p0ĖÔ{fē˛8íū5ˏ6=h@ö„°7,ã<’¤sZ™QętPnF ËÆ;“ŠÅ֖i5Kv´yŒĢŪËĻá’K)įŽ•Ģl›bŒ‡Üģä+7]ĩšyˇ6œ/áōJ"‡Ë“9ÉÜAÆõéŌŽ&/scKãJ´ ūh0¯ĖWņԁĮ9ĢaŸv[ëPY‰cļ%($XÕ[f6‚8…Ož¤œú –†@ĢžI4å`N2sŪ‘HŒzņښĀ>_{nĮQÅ!ĸFSŽ WÔaqöūAB$ÛԎõhĪsUu(ãN¸‰äĢŽ Ԙãēš[ė:hA›[B›x-ž*ļŠņEŦj6–›E˛l`ĒŲ Är!𖓏š!#ŪaįŪ´4Ũ:ĪN ¤{7ė åĻjM›ŠM.,íŽĘ4öĐLSî™6ßĻzUŽ:ĘŖÁôŖæ ŒālÕlSž÷M‡TU”´đžbĀ͡<(g @Īš­ xĮéčp?Īá\ŽŖ)MZ%š™ZU{usä0YXŋ|HŽøÎ:ÄÉÉČ=ŗëN@IéNĮ9Áüę2M<}i pÜyüM8˙ÖĻ`Rîãé@5×1hˇNŗ< ‰A$ŪŊ=ŗTŧ=ōYŪ%ÕÅî~ך\Ģė1čr;äúԞ!>f—sĐ?،Dŧ…!— ƒ×>õ‡ėDV“ÛËoåēÜ#4Æū¨ã¨úņŪ´ ™z-ėVšÄˇ×qŨĢ8xŖŨo!UĖšˆŒ’sœ÷9¨nt¸tīCmĨŅ_>‰Å¤L äî;üŦņÎėķÖ´<;qk6Š!‹nčíÛĖ+teRÅÆJíõÚzprqģũŊĨĨÚ[ČÄŌ ˜<î˜üЁ¤p3ĶŠĨ\‰Œ§Ĩ9 õ¨¸ÉĀôšÔĀ@ō(Đā{Đ2]į§ĩ/nAĻpG&šųŲōúqÎ?ZLá=Ä6đ™&•cŒufl:ĀŊņļ“f„Bīu'aĀüI˙ ÃÖŧ)¨Ũ\ÜMÉ4K‚žtŲķÉێÃĻ*֋ĸxys#ŪLWcaΞô#ķ¨w;cJš\Ōwō3'ņfģĒHŅØÂŅŖqļ÷ąį˙Õ[^ ļÔ ŋԎ¤ŗ ‚‘12’K}îįé[š QÁg2Cĸ­ĖÃjŒúV‚CÎdk˛…bnjãųšV •Õšą‹wáHī/'žM[S‡Í›Í opcEš§3(Ęã>Ū™ę4Î0Įņ¨ÂF$iU‘ĀÉO†Uķ!h¤Z2U†GåKnžQĀ(ãŽ>”æÚxäôÍ9pRM蒇‰‘e°Œ!9v’ŨŽ9!Ŗl`öų‚°´Û¯´øj) o’ĀeČbŧĻįZž'Ôb…--ŗ’žeÜĘ?ᚯĀ}2Ė }+#DO#Aà œ’Øž*•ėKZ˜šĘ…ƒIē…N`™í lá•XÆ2sÜ>ĩyvĖęĖ\+…RũHĀמõOÄjmR7˛4y;v…e úŖ ÔĶ„7ąų‚â'e}ß#oäcž>¸ükN„jΊԴv‚@ėAÆ1ƒž–? Ķy?âZ›IŠôīœUāßdY[ÉúH÷ãķŠâi>ÆŅ0ÄQ¯sžk'mŅĨŦAfæ ß5‰ō×;ŗčÃ8üÍ[Ԋj^ŧŪĄŅĄrx ¯ęg]^ZE# ›Ģxĸr>g•WÛR3ß­eZ]xN‘KhoQ—ˆŠå”ã‡<Ôqôâļ­†“ŠŖG.kã%G—ä’G$ųŠF>ŊÅD’E\žž—Sđö§ũŗŠ\ Y‘[í8UF¸2ŠáGAČšĨåëßđŠhÅm-æĶá 23ĖĖĖĄpžbšÁ!°Ē€zdęy°=­Žš÷O¨Æˇ°Ë 2Ÿ6Mģ‚ŧNÃ9ōÉŨ¸˙ŗŸzk.ģeâi­­§3Ú@ōH–Ē˰\YÆû8¤†ÎŗEÔ//ôô–öÜApŦ‚ä#påĪ;N{Õņ!Pry#ˇÖ y¸ ã¸ĮôëĪn9Ļ1`„œõíX=Í'VũĀĪ îĪâN+ŸņO‰F‰n–K™GČŨąõ=ø­¨IP§¨Á<öųĒÆ™isåĖ~k$~Z#¨dëÔįŋ4šš­)EI9#Ōô[}JuÕŧCĒC<¤†âtÂķŅšĀĀWW§Ã-°xØÍ0Š(ã?—áīEƋĻ\dĶm[h8"ЧuáĢĩ+ģ;xmŧÛÜ å‡OįŠ”šØÚucQęŨģ熧•§ĩäË!U„Cs|Ä(Ā䓓ØXļ:íž§âTKBJ­Ŧ„‰Ŧ¤ŠPÛĐƒžž ~ŽŠũŸl×Ö[‚’*ˆĸMĖw0læŗôũZ[íobÛŪ[ĀļÄėšļ)ķomc׎ŖéZĢXåÖå­RmR)íŋŗaŽPCų‚FÚ1ŒŸZˊMZm^ÂMCMŠ ĄĪoįiäp+ĸ<Œ OĨ2G'¯^jZFĒĨ•ŦDC/*zG†<Ž´ą¨“Î¤MŧįĻhš™F÷G˛Ô6ũĻŨ—€Ār+œ—Ā–įw•y4{‡ í?Îģ'dƒPîÉÉÅhĻŅJmũ¯ƒ´č7dĖYÛĶĨlÅÁ Åė‰8ĻmÃ,ÆĄ-–Āę}ésˇ¸9Éî#āļGķP¸ËĐzĶ™ÕzŸĘ˜Į'“Æi#Œr °rØõT˛žxBĮ ĀæĀnßģ“ßŊC+qŒæœĖ SP>ū´Ācqš€č:R3`“‚M48\äõ4Épąt¯ ņ+ņ& A˙–íūíķ1;—ĩx^¸Ûĩí@˙Ķ˟ú­inDĖú(ĸˇ3: f˙xÖô@ƒXzūåûgúVôgëYmzTĘrHā*˛jŌ6îMIpqÅH:â›J9  }ędõ¨S$N2x  gŋ5 ĪãQ)<ԊĀā:@Gul.íšÅwc${Ō]_çÂŌJøP0Ē:Ÿ`)畨ŗ°–rĄļöÎ+—ļ‰oîÅÆŖ3GĮđŸ›¯OJ–oNĘíčXQ}â;Æ,JZĄÁöÔ×Sa§ÛØE˛=_Šo­S‹TŌ „Eņĸ(8-žŦˇúĢÃnĀĀ‘nÉ^ųĮŦ‡79+-•❞i  pĒ9ĮĩēduÆkM/QŊœâÁÉ\0ųĀ<‘úÖÖE<‘Í&ŠŒŦ5#HáDUųQ@ƒˇôŦu×K hŦe•ƒē:,‘å6ļ9Ë g°Į­nŽrëÅSŸGĶ.æûDú}´’ļrĪ$įߨæŠIk0žÚ)J•.ŠÛIėqVc įŽqPÅ PÃQ(XŅB €SÔ`æ¤ CmÁ8ɧĄāđ)¸RiÃĶu š8aŽEUÔėÍö™<;ŽĮŊN3ŌĒę7[XK,LD€ų$C.;ĻfõOü‡nĀ =ųüęΕĨÜØß]=ÅË\‰6Čü7˛1ŸĨ>îËQ}.(bģÅŪđZlûÜzvÅSßEqqe{pˇFE2­ž¸ī•?ĨAĢ›qfˇN´„ d°ĮˇZ\ @úÕÅÃu(ģŧq5ē([í§†ęĘIŨë]Jˇ8ū]+™äÔĩ”¸˛x ēËmĐvOī+2ŒōãĻ:邷$įØĮühíÛ4‡ŒņA'Hcŗķõ?…/>§ņĻvÉ<ĶąÄĘ€3õëyŽ´[ˆ- IĨ}Ē‚ã†OĖādōŌ¨čęlƙ務ŠĪŨÂ3Œöís¯{w…ˇÚeWd.Ô$’™¨tÍJ=bÄŨÛ+¨ŪĘĨ×#ŒãĶĨ09˙ ËԒ$w¨ax0ąĨäŽč2:ĢpĮŌ´‡îãÖ­nSPŲBŪk$×쓺pÄŠķëQiš.ˇĻ”Û{k6ķ¸WYYŠƒķ•%ˆŒöŠéČáG×ڛ`!ŨОüņNAĪN‡ŠPíúR xZ‹ ”†ëBüĮšQš-ųRŽ=ŋ*úô ö=ŠÛHô¨.nRÚ fsōƅČQ“€2h`•÷%Č-銊ęÖÚõw0Į(íŧr§ØöĻÛŨ-ÄKvȁ×pį‘S1œ­MĐÕâĖuҝ4ā˙Ų7åC6ákqķĻs“†ę)úÅåÕö¤/āXfC”RJādņ[ķĮAŲŨÃEˇĪųVlA#?+.†ĒŖqi’ >Ė30´‹–gbČ“ŪĨ‚ÚŪ×Ėō"Hü×ŪáxÉĀĮŅE89§“€2jŽŲˆõé@;=4ŧŌ¯q“ß’id;s€{ԌĮīi™— ˙ôĨ$ã¨úPƒm\dō bę ¨K=ŅK“ ŨDäōzŊ­~ũ9ėjũÂ[Į&į 1ą3ú÷ü*Ŗš28m*ôØøšŪIv w(ėî*AápüÅmĪãē”–ÖļŅΊJ‡2ÜG]¸0{ö¨áĶlîn­n'3…]¨Ë…Č ?ˆsŒįŽæŠxÎ_ F„•?*Nũ+[&ĖîŌ9ŨWWŋyĻ’āG$“H ÇĪČ8@ė įęy÷=~vfŌ#eö¯ Žú uü+ΝÖMōD7MšŠ–U=zœØÁŠ­¤Õ4•IBŦfO™į{/¨ūuRˆ“îz4Ú~‘¨A–ŖlÁa]Š:n=ų*ëęy9âŗ[áṵ̃“KÖa˜&qŌ$Û?#õĄđ׈áŋLßëfęĄæē‰-ĸ1–‘cdĢØŦõEhsā¯+)KģWŒŦŗEÆ?ŲãôĒw_õ‹†öķHUQÃ3K)äƒÕŋĮĩtĢ Ęs LjĮ,å@˙õĶ(„Ģļ-Į\ãŽE.f;iā*ŨļÜxŠ7\āĮenŸ)úĮļ? š6‹á 4Ö3_;‘ĩ žR}Áč?ā&ĨÕuėéŌž%įtĪܨš e‰ `ÄâŗZØËĻŋ­IæiОH–ōšWémęs’q銭ÄI?.–ÔŧÛÚéÖq€C"q×{vü(ÛZkúė†Fy-c+6ufv!OAõ5ąá KĒLÚÖēÎä´6ėpąãų‘ø`U˙ŪI§ÛĮ­ĖÖđw=´*ÎÉ,īČš4š•뇭Œčŧ'ĻE035ÍĘ Ū[0fņųW§°ĻÛi^Õĩ“bļÉ5ę) ĻVÂí8įjížĮņŽ%R9nNėûâYLŒä–8=ũ=I°–w_j‡i¸†áĨ2y‰0Œyų[’Ų?ÄuéÆ ō˛nŽĘO‡ZEÄjŋŲ1 9‚á•Æ;€~SøûUü9&•ŠEm ė’ĮpūH¨ķ­]ˆU.0w.vŒŽ}ķWuÍfGÂ֖ŠxÍs$áe{;”Ū1P~b›Éęžžŋ…áÔ5Am ĸĶûĘWŽ ]ūŌŽĀW9ˆĪqJÎōJė¯uŗ?Ä^“HHĩ‹ĖqķĒÎĒ2p{tĪĖ1O5Ēúuž­am}{j6’oˇBUU¸|g#‘œ€ģ}Ā9ŋŽj֗ˇŲÛęVkĒēF\ÆIÚ9äg?)SĪ'=Ebk7ßJŅmtģëi46_˛Ī˜!t@>mÄdšl4Em'‡üwŦąĄˆÁ_õrƒģ@ÛNG9+œ×qs ÃFãūŋķŽÚØęwžUg)•ÉĪ–ˆB“îw-v+Ę͜÷Îjg¸ÖÃC”<ķģ$â¤f.î8ãëšh*ōaŊĮJy‹€=ņY”‡ĸ†xÁĮ>˙1¤˙09ĪZsÚ¸QĐg>•˛`ą ũėž(*Ė%rP‚y=*Ž]„ƒ9Æ1šd¯ōœö÷ĻÆs°…ēĐ#3]šŧˇĩ€Ú%ÃģÜĸēÛĒ–dĪ#æāgɨ4ũRķP›íö×6ĨmĐųN¨#-ŊÁ+‚ĮĻŪũēRøšėŲØÃ7™z˛ p‘Y(y&8?.#É9ĨšģšûuĩũÕÔˇ1vImüĩXĄIUgčrÄ ž•KáŖ4/.u k”ō-ã–3´’‚1ÎlÔ:&š>ą$˜˛ÛF0'î7û#z~ŗĸ]ë2EŧX,€-$j¤— ŒíÖĻĩ͝-ĩĖ—Hö‰Aq˜ÕåĮ9āk>§OšČû—Æū sŸ|â€T)ãˇ;€ČĀÁäUl@cÉĪ=Ē&'nã­IōíĪ| …‰ã'SĻMÃģM&gŊ.rNrjNGĮ›9#­FKđjf#oˇ°Î)ØÉĮ ž;TŽūĩ;—r*'^xĪĀĒųëëL#jõëŪ§qíž)˜āPi^kÁõGķ5kĮūôō͍{ėĢž+įëŦŊÔĖ9Ëąũkj]LæAE8)=ivŠØƒ¤đū>ÎŲųÎ?JÚ/ĶjČđöŖöÍnĒ3ŽŧÖ,ąPsVëQ…Î*e\(dįŊKˇ=*éS!ãŪ€%ŒbĨsQŽOJ˜z@ ÆjU<{Ķ1íOPhžŪ;˜ĖS Ą ōq͚™zˎŸŌĒŪ]›[v—ĘięąQÕĩRËe‰8ÉSRŲŦ äˇĐč&žÎÛ/;DƒũŦsYē\ÖwzÕĖ‘mQĮšôĒvz Ü]Ėon^W‰—8=rÆMlXéQØß´Đ*¤-MŖ$į=sKrۄSWÔÕCŽJ“ƒŠˆjNĸ¨į2 Á§ Ōt\RŠĀ ƒƒéÁŽW]†ĘĘHāXíV&eY^`Ų$“‚§žqÖēŊŲ#ŪšhõĨ˛ąŧĶîžôę%å %˜ŗģaŒP€čėP&ŸlĄv)HQœ: ÔûAqMļķE´"õŪZų‡?Ŏj^”‚Êp9`{ŌpOoʔ`qŸŌX“v@9æĢŪÛ-õœļÎv‡6>éę M‚§øŌ’Å ĨŖMKŠëļ‘‹ytŗs(áfFĀoBjūkw¸ģŋ ]\0,ŖĸĐ~ĩaŽĸI|ą4~iΰœTZt÷ōMr/bDPTE圊=ûÔJNĪKYˇĨ&FA9 õ旃Iƒž•FLŌíZ‰&G„̆>2=Fq[aŊO_é˙ë¨ŋJ{Ķlņ֓'˜­/ãHcņĀČÍIģ`ÎsÚĸëJƀ1ŧE‘ļ=Į—jˆ€–UÉ,y*§¨ëLą‚ęmÜiqëą>c˜ßl„2ąęG\ũRņUė‘ŪĮoloešhJũž8wÄwß•¸Ã5ą 6í"d’FŒ˛3I„’ ūŖžZo`#đū›¨Ø4ÆūU—z RˇI‚ g;ÉĮQŌˇ=8Ĩ5XšpëČÅ+&ėuÎŊ?°=}Ē \ԄžjHrxíéBõäb“v” Œt¤0É'ī~•OSŠI´Û¸ŖŪU ԒĢę~\‘M?7ĩ&Ž4ėî#ˇ“]–đY[ŨÜG(,-9ė2@­mã8 ÷¤‡ĪRô*ī/ôË=N-—–ņÉŲ[aô=Ģ4Újú\alîŖlŋōÆsļ@=÷üj\NīŦķid™Ęŧa žß‘Éųw˙LWGāéŽgŗŧší˜Ė×8aƒŖ¯V–­Ų]ČĐ Đ\¨ÃÛËō¸>ŪŋQV­Ŧâ‚[‡Œ6éäŪĀžÆ8Å$‘+74]ŒƒĪJ”zã?Z‰ĻL¸^3ÍYÆ(į$šiہČĻ‚úũ(,+¸ųģ}KÂü¤đ{Ķ囏9ú ‚ÃĨIō:gŊFOîÁíéSlË 8õ46ÚT~ÄĖËøĻt‚[y–‰ōÎĘ ã†ö'hę;W)â<6WS°˜ÆŅČLcä}­’Á'Ķ­z‰:Œr9°Žü;Û%ŸČķˇē]—<ŒãˇjŌKr%ö9-.ĪJŋ˛t˜Hnĸģj–xÃuĪR9éĪ'šč-ã˛ļ—SŊxVVYqĢ F?>ŋį›z7†NŸt'ķUÔc‘īú tö’iw’Í<ö“`:gp:ôí͟LpG-ŊIIØņƒ¨ēęS\"˜3);Tão5ĐÁâéĸPYC°ānĪø×Qyāī jŌŊĖw˛ŲLøÎÖU Ũ#ŸÂŗáŊĒĖ͉ ō¸ÁxÔëŅĒÜ -J2xŌūuØ]a…:~•ņĄ?™ē;K6YےqĮųüĢnßÁ%ZįWžëiįČQƒøŒãķŽ‡K[ ZF”ČÚen[øËu¤å°Ōm˜'‚˜j>"‘’%ų–Տ-ŽžgōÛĪZë/ãKŗl&ũÍǰhÔ)ŪøčG {JœÃwtčķ@§8‘r õ;ž•n;EËĄf•úģœą_On+I˛ųHŖŠk•÷AO) ĀņÉ?øöŽ?Æ}P|¨"ˆ2âĪĖC|äíČÁĮF)āõ‡ ąĪ,ÔûÎúōÖōT6؃#! œĀlįķ5*I ĢĢ}ĢøWûIšōŪC,Ōˍ†BF§9÷#ˇž0x$VZÁm|°Ā’Ygš&ßđ§ĖäŒn’sžūÕ-ēȏ Ŗ)V=AėAöŽbĶĀöļš}ĖȆęRĖŅägŒŒĮ9ĀČĪåW„8ęs~Đ&š´šŌĐ-™–A-ЕžV]ßu8Įđ÷ë´öÅOâC§ø`ڍ͡ÕÄKū†2$ŒŸŧVnsŒđ¤åG¨­x%Öŧ*Ų´2ęÚ\Vå!x#/1|Œ9ĀgĻ0Nt.ô›}NîŪōņ&E´ˆˇ.7c$uûĮŒâ“–ēDÆđ÷„?ŗŽ íŨĘI+\ Œ@ŦÜ´’ü‚778Ī4č´éėüawqöXÚÎķs9)„(īîzZęVLdíÆ}jŧŧŲĮĻ*y™\¨¯¤P`@ĢžFsĀséíRĄöÉÅ(@c¯j…J‰z܃JāZRņžü{Q“Ŋˆã?ŠĻ†<銉Ųv‚ ~ĨHŅfWÄ`cøqîOĩršŽģ5ļĩ5Ą†wˇXQĮ“fÜIëĪąŽ†Y wÚ0 Ą:[Ú .å Ų‡œp9įŪ“5ƒI挟øIboų‡jK’AĖ?͚ˇ¤øƒOÔ¯RÚ%…ÎĮŒŽīéŪšû­_Qņ5é˛Ņ•Ŗ´l—,qõÉíôękĢđtMÆķguËĖĀdûAJėč”)Âûšő÷X‚zg­^ÚD}NöįņĄ#0}qOî¸ãüöĒšÉcUÔî-e[k;i.Ž]<ÂĄ‚*)hĢŗ&ĘßUĶaHmô‹%†!…Tŧ#Ÿ—“SØ^ę’ø”[ÜZ‹X~ČōybE“qŪr{ÖéÁĀÂėgĐf kÛazļę‘­Ų„ˇî >™íRŦS›’nH°ÎFĐĶŊ4;dôöĻ–ųqéLwÜ8į­åēš›V{xŌ3qĢ;ķdä?/Ō KÉŠ5œ‚&TdŖÎpK};Tž™wqp.ėošŌäGą]ČĀŒÎĸŌôÉ,ä’âę厎§ÆųÚœŅwąĩĸŖ{›ü ŽƒŠLU‚‚}}ŠqŒ\Đvācļ3Šf@H îäÔe‡=‡ Ĩs1¸zĶ1ĩp:úĐ!¤dƒÛÖl| cŠs—ÍFŅ€G#“@¯ž*ëØsN%˜ôĀĪ~üT}7uÉĻŗéœ Œœž@ãģˆ\㜊F%9ū”ÆsŒ sQ>vጚqÔāj<œĶĪQ@šBHčiääPHíŸÆ€=Ž §p7*2r{Pšã>” úŠÁˆî*"ĮĐŌ1wĪĩ.öžZ„{ĶÓÆ~”€œHqÅĢQš‡.z zɞ(Lŗõ§ä ¨ÁæŋĶĩ)Č8Éáj;+[[ŒV$HNâŠĶ4đŲę)Aë’>”wbd9Ī =ųįŌ Sß4ņ'žOjB&ÍųS˛Ŋ Æ=Ēs´n84Ą†sœö  ×h{ô¨ŽˆĘŦ~{Ÿā㑟z]ū”§OZ.Z[•OŨÄĨ™°VYB`cÛ9§)¸ –H¤Œyü…9÷ąOųPƒÖ€°ąŧ‹÷„l}w`R’ėKžĀ50ļ #ĶFrIĸā]U @$`õŖ|eÆé×W{p3‘K#?1Ú¤ ciæ?•;zžž•—Œ'ØĶ‘˙:Å)ķ|ĀU×ļĶMįŅŋæíŠbudų°j(´ûh>ā\œJ/§Ķ4 pÜtõĒŌLå20Į)ëøS¸XÔV؟ëûā dŽÍŽ*šËģŽsĪĶ‹„Ÿ­ °éw™Cy§oĻ*€¤äûqQYķTô5 ĀsøRrNįéŲĒ0Ŗn0͟V§1Į9Ėņ’F}¨ōĶĐņĪ\Ō°RŖj¨úRĮlPHČėZaaw`Į\‘R)fČíëÖĸLŦxlOķŠã'oˑ֋…†l9ČĮŊ=đyõüh8'ؚ:ŽŅȤ1O '?ã\uīƒĩĩ]Fâæim÷Č<’>ea°œûŠė…ú”Į|ą9Å”ęJžąg ~΃jkL¨G„Œ}~oëWŧ=ĄÜhū!š<ŗĮö`VR’Ų r}={×Q‘‚IÆqž1LqģËšJ(šbg%fJ[ä&ŖķFTdEtMd\äā°čMQÎ5›Žė• F=*\ ĮëÍ0 ÃŽ1L§9=úĶKŒ3Ž)Y—f  1ŗģj€9č>”ãƒ60N=éŒŲcĪs§nÚ2yČÅFĮƒéہ'pāTD Zq6åõ"˜Ođ‚8Ā 3|Ø'ĩ1،zqįœuô¨˜įœĶ#× sž1LČŒÆ¤>§¯­@[sNĀG#`š„áqÎN:SäÜØúõ¨˜üÜûĶ"IQ’8• rzįéRH~SŒõ¨Ž6ŒđiĄĪ ]7 Š=Îõ¯+jôß°_í\eįEúũ+Ėö“[ĶØÎ[ĸžĸ´$č´9´Æ?ˆÖâ6yŽ{E뙸mÅģ­dË.Ŗd䊰‡"ĒǟZ™ĮZAbʒ;U„9ĒŅįŽjtÉ=i‰‡ŊHŊĒŗHU€5i91“J?1ëõ¤|‚0>´\gĄ"”0ôĻįŠ¤āœdQp% Ž ūt)yÍ0Ä S¸ę ØQ‘éĮ֚0Aę)r: r°9Á§m8âš:psJô ūTå ߊx¨=ÁĨËg‚iXdģō:ô¤ž™¨že9Í( ŽzĐ"RHöÅ(l÷¨Á9Ā9§r:ŠHœbœ§žGaQ‚22qO j˜sĶô ¯00Á攎GãšC%>‡Ĩ3'×úS“hM=N}sOÁÍDg‰NŌpzuĨÎz)/˜ÆqøP%ŨŸđ¨sÎqšq-ˇƒŒĐžg|S^lL ˇŒdĶI9Éũ):ÉšAéÅ;’x8Ēžkgü)ŅČŲ9Í.ŋŪÉŠ”'<Õx°¨$Ÿz”Þ(l€xÆbŧĪzE?ŸĨRų›˛yĄ WfOsR/$įæ?Z]Ē’xė*&“`*…ĮS×4d0Uv3֓~Nnõ_qÁÍ.āOZB' Ī\āt§,‡pxúÕ}Á@'h^äšrČČqĐŌ€zäšÉÆj|ļ vāHIôÍ%ųsĀŖvIĪĩ1~ī Í?v>€÷  v¨Į˛{öŠK€§€@˛`‘ƒÆ1LfvĮ$-Kģ’CqFō;ņP1Qģm LÍģŽ”Ã’sĮSքÜxÁ cƒIžy  a’ &pM&îžüžÔŒäc8 œûĀL$ädž”Ķ/īBÉ\äSKĮv8įۘn¸ÉŖ¨ë€*5|)ížiĻNHZq?63‘ŠL’Ni7qéÎ) ¨õÛ@ Ũ÷Z`8ãš ÉÆėtéLō䜓l `+p ÎI¨ÉPĮõâį‘ŒqQÛ¨Æ(…†{Œ Qŗ1Ž”âÆĸvųøäĶŽãÆ*q’~•#7\’NzTlŧōAŨž=*HFā8ÅBÌņS´ŒãdÔGŒ(ƒūMFNŠ˜ˇ|qīUÉĮ§OëNāq?&ÎÖ.2Ķü—Ö¸ātŽĮâ€ÜXD;#ąüHŌ¸Ŗ]ØÎOQK“Ō“q¤ĸŦ“ Ņû)Įg­¨Ø÷Ö^ŠžT $Nüō+iIČ*kË$W tŠĐ–Ķ3éøą uŠ09ÍN™ ĮJbGƒS"`Ōld‹ĪQS 1Q¯¤šWT ņŠ™qŌĢŠ#¯¤ÎxĪåEĀ›Ąö§+qĀüę%bX‚ķRî´Žų˜ņJ`Ü})¤ä€4āŖxü)\,H>ųŖ.:`}iö#§€§¨Í ģŸîƒD´€QŗëR3ĀĀĨ-ģ­+røaÅN$‰ô>j“­.ėŒāŒuČĻŦƒ¯?4°4ķ†8ĸáaÍ"Ž3ßLŌ†Vr27u"Ŗ(§œƒžzS‘rûFō:⋅‰Ĩ;'ˇ<ÔE]Õ~m¤œwŠ3Ôcõĸã°ãôĻõÉ Ķ‚÷`ŽÔŽŧŽ G›8ÂÔÅMBë°rh¸Xx— ČĨ ūÍEJįŸj“>ĸ‹……GÜ ‘Šp‰'š`į‘RcåÅ NW gØR„É-ŠmfË#ڞIʐ(¸Xh=3O€229īš ōh¸ÅãۘũžQNûŊéNIõĸā5{TŒBĮ°ëHÅ$Ē3Ÿģß4Ž;ĶĮ°6ጠz˛î>ų¨  Č ‘ŲqŌ šÎIncŸíSEˇĒĻoŽh¸Xž0y?Ĩ;8*6 €&Ÿœįņĸáa gŋæiŲúŠhRz}éÛ äi\v9ū*\ŸQŠ@§ûĸ—Ô\v"ķ$ۀWŽjÄRLž8ô¨™225ÉÍĖN’ ЧšĨpątžɧ‘¸T!AÁĪj•HķNāŅZĮ Õ[Ŋ>ŪÜ[+ĒģœüĮ8§ „â˜Ķ)l)Čĸâąa@ã<͉ĀĀãëU^`‹œ9%Ü3Ž=č¸X{}@õ5y?8Ī8ooʗpÎ6ŸĘ•ÂÃQFw)čæÍ9W –\ \axÅ ō…Î HŽÔ„Œd˙õéSqųŌ¸X—Ė8É=)˜\ }qQņƒĀü)ģ¸Āĸábd'$äf— ’*Ē ämÎ{ÔøÛÆN=č¸ŦL0Īۜ@P@ ņĶ5IŽ~ņæ;´Œ›N|õĸáblå~nũéBŒ)Ũũ)2zrĩ<ŖÖ‹€ÜqŒįĨHeíŠyĮáLc†čqEÄ<”āsęh,xÜy¨ƒŗ‘ĀéNÜO˙Ž‹0cˇī@#’ ‡<đ1øĶˇ tš.Ų\gŠĢģsëL2 u'ژō¨9\ A“Œ6áÅ@ōûūUŧ`žôˆĢŸ™¸Í0ōzdĩ=w7_J¯ gđ8Ą˜m9'ķ įæÉę8ڛÍÃ~ŒÃ#ŒœR.@ũčį“ĀĪb^2F§ÉôëQgŒ÷ 3û`āSIųERqúÔlyĀ?/sۘ.SČ^´Ā‚¸ĪsP0õč: “× w8=*2zãĨ1ŒātÎ?CĶŊKéPąõϘ3žã | ÷'ņŠ['*´ŠryÅ1Jä“׊Š$°’HôĢ2Žõ UYĒ’NzSÎ|o1“\Dí ~dŸë\É­ŸKæø’đƒĨW?EŒkĒ*ČɉESŨ¤C­N‘¯Ĩ"TČ1Y*ĮžÕ:ĮĮJEbŦ"Ō ˆˆj•QsNUZģŒQaÜEZ‘W­(õŦ+€\žy§íR€)ÁF:Q`¸ÕQ×ųT  qšiŨ9Å+āŊ/âię;R¨Áí×YƌäsJĨ˛Iã)ÛA=ŋ:\K•0™-ĐãÜŌíÎiáÉĪnôå^N@Ũ9˜ÍŦGŪ8 ڜT’F=éÅG\œ{RåCæc@nԀˇsŸjnĐ@ĘįĻ”Š=p?9Ps1ÃwL 0ãĄT•ĪS‚dņ~)r æa–ūīå?v” &Ņž´šPų˜ņŲŗFė˙ üiÁ{R2ŽTĖnđã”ŌIįnMI˛œWqĪĩ;zãŌĨØ3KåßķŖ9ˆ”Ē—éŠv˙qųT‚!žG?(„Rä!‰Áo›Šâž\ūÔ†E(„ĶŊƒæXcŒRy€wŠŧ€=)ĻĪŨr1ķ"3<”á'ŽÚ›ČQÎ) ךXųŠÃ8ČĮĩIō/֛öqŽÔÛķĨĘÙņŒđO֕[éųĐ-TŸ‘§}œcŒūtšXųdgĨ!$tÅ;ė˙í΃n{š\ŦiĄŧ“Í=}¸ÍKŦGœŠ9Xųėžp)#gž˜ĨįšĨAšAĸĖ.ˆRyëOPN4}ŠAŌOĖPmdÁũā×Y…АΓ3ķ$ņÍYŧŒūU]m§LČÕ g 4ĩ ¸ĩ<G\U`' |ĢN+?eĨ¨ô,ëJÍōõâĢâ`8‹õŖ|Ŋ<“ųҍhXsך‘[ßõĒžl™û„S„ŊŲN~”ĩ„í"œË}*Éßj<Õŋ\SCĄ9$ūXŖP$Hčį¯ĩN°§,wŌŖI•pI§ÄÉ'Ž( $AF3Ķ9Ĩčp_ZˆN‡ŋŊ8H HĨĖ+„uį4Ž23MY“<Œbœe#$ŸsK™†c'§sÍ}…?å嚊ŦF2zöŸ0XhAuį R ôÍ”.WŪŽ`° œiĨ°1ƒŪ€āš¨æzŠ.$¤qUžiIlûuŠŽqģ§…ãE zw T{֞Žw`ŒŌ€õ'žÕ>ØĮ€=čæ 1°§ŽiĨ¸Æ­8…‚)§ˇãG2 1;¯-Į`(Ü9Å3ŽyëIšēzŅp°ė–õ6ŲUĸ :ΓėĘ ūpĸž8žˆÆh˛ ”|ˆĪđ A‘-jëmÎšą€ â‹™• ¸9ųq‘ÚšbPÃ?CÍ^)ōuũ)ģFŪ­BæeC{~´ŌœņœzŧǤŒųĶZ$$ņK•™” ;Žw8ŸeR1æ8üĒūŅĪP­)U$Œ}9Ŗ‘”~ÆŦ0%~=…FútÖc÷Eh„ x<ú pM †z \¨\ĖĮ:L‡#Ī÷Ú?ƘtŲŖPVeb=G˙^ļüŧWŊ/“ĮŊ¨|ėÂō.—øŖ$÷§ {š-LÖģÂë÷I¤žHëëG"´fH‚åqōĻi¯ ŲˆÆ}˜Vē9ŌåŠä^Í´fŠáæÉ=I Ķq9ęˇJöÉüj&ŒŅȇÎc픑ō:÷h Ā÷ãÚĩ‚œt§ųyŖ9ĖŽ:Ų>ÔÖÁᎏ­b•Ā=3G s™@.ėšî}iWvŪãđĢ˙fPŲi<ĸ: 9sĸƒ~ë~ĩ•¸ÄYOã]kSģˆ4„ĩäŌSčĘüԈŲ9¨c\õâĻœÖ%ĻLúÔ*t…NŖŠ‘sęj0xÅH´Ā“ūÔĀięGNirŽ)ŲÆxæ…Īlb3ë@ލÍ8pG|Ķ#ą§tö¤ŦƒÍ9ųGņ&W'ƒQ NŪØ¤+šĪ==hĮ˜ āx¤Veb1ŪŖ­1đ§œgé@‘üB—sãŠnúŌ‡`:f•ĨÉ'ˇZ• n sĶI$=Æ?x—¸ô4ŽāÍČāƒĀģ°síTÄǧ'>´yÜpØh¸7`‚Aõ§)ûŖōŦķ9ĀU zš\Nh¸Á\5œ­S7'R,äōrOԁ—S×&ĐzŠĻˇ˙*pš$~=č J(3OŽ5āãõĒßi  Hˇk´dúPŦ’?CA^ ~u\܌:Đŗ `ū”€°207ũ)Ā‘ü_ĨAį.1Î)Qס?…'äĪÔSƒu9˜˜ęAúbĖ¤…Á÷ .Oŧ–=1Ro8Į]]@ûÜ H¸äŒP%WĀČķĨķp }j ÃqÁņĨĪps횐I8_ΞŽAã`ŧä ŪôGr(>ū3ÁühŪ@ÎĪČÔ`ņ€@öëNČã&ČōČôėđ>P) ķÖĨŽ(Û׹9#ÜЧĖi7‘ųRî Ō¤Ąā‘ÁŠ—ŗŒTycʑøĶŸ^iŒ•YûÃō§‚ŋŪŖyÅ<œr9íH㑚~GˇZnäŠpÁ#Ŋ9Š‘Į_­.3ũj3‚ܨãڞūęūT0ۂN?O؝BļL‘ÆyØ3HųjŋÅÖ¤L0…TB(ü)P6­+šÃ‘žÜĐ7ÎzjF\ ūN= +<{S”JdpĒpŗn9DĮûĮü)Ŧ&^B!˙ũ(BY¸Í/–ŊqÎ)wČ0<¤äsķ˙õ¨ė@hÔūŪĨ7f Ν­0‚‘ž{âĨmËĪ–p}éî1sčh0[ŋ­;w×ëRĀâ7ĮÖŖ`AÆÆũ?Ɛpé“ëMōÁÂáé›ö 7åšx”ųƒ)˙v˜ 1Œž1šc ;JČŧO§ũęsžŸîĐ" Ą†NOáM1äuĀŠˇ.ÂšÆ<ũėį@Ęū^qJG^IŠŽcpüé !<Í0š&åĀāžôŌŧdœņS? >joãŒ{b #$*&Eã$Ւ€G"Ą 0#${P šbĄFPFrjsģhä=ņLÉ#'¨ęiĄ•ŠąnqQ2‚0{ՒF9Ô āÅBȸ8ę*6ŌĨgäāLŪ36>”ŽëÉ<ÔŽHĢ(W ´ Žĸš"°įš`P‘sÎŪjŧąAĀ´dSĀĮÖĒŧgŠĻâÍ8KĻŧ‘ōņüÃđ¯2v.ŏ~kÛŽí„ąē0á†+Åī û=äąc„rŖ>ÆĩĻɑ^Š(­H=2jtQŒõ5 š™¤AĨp5|äČëų•nļ*Ã9Á*Õ"n8ëEĀÛk”^Ų×ŅÄ °ˇ'­gäāúZ‚`Īj.ÂÆ”Whí¸;āsWVávį?JæapĮãZ‘‚ČIāûQv+"ų¸P{ūTár¤dč5“(b™įĩ4ƒ=+…Ŗ:äœwâ•n3Į#˛C2âxį'ŋZ.FēH‡$3gЎ”­"€sž=ēV"ÖlđSĩ>íä‚pOŊ.fĨŲ į Urę0Ķj‘ŸjŦí´ ÍƒZ|ÁcF9ÕX íSŦÁœãŸCX^i”ī5ļã4\V:4™ 8'ņŠ w W8ŗ˛•ųŗV~،dĮ§4\,kœ0ã¯qšˇ0 ĖmģcšÍ sĩCŸĄĸácHHïAīIģ y qÅe™]ųŋīŖKö†`I$~4\,l+įßčųN8Æk]ˇvã“Kũ ÍÂļ÷\,k Ųô4ĮL63õŦÔžmí¸°āw$—™Į Ÿ\Ņpą3eOLķNķĶ<Ö|ˇl3œõõĒīušJ°,¤r ĶL,m–ČęíۘĖvįwVLLU@ 8•eeu‹,1õĻ&\Rrp3žø¤pÁũ9ĻC1+ķžŲíQʛ¤Č8oQ@8RģĀõĒÛTJŽ„ ņÅZEXTäwÍWeđGFÎsLųÉ‡ĶØäžpE4ŽAõĸĀAÆĐ3Į§ĨFØ9ãĩJËɘ@Æ˙ǘˇ ĶĩC$cĻpqÅYc3ĶĨBĀdsøš`Vp‡ā*9cĶ˙¯VY2§ęqPĘ2Ęŧry ˜vę:Uv8\ãjÎŖ X”ĀŽIÉĪÖ äqĮ5<ƒiĪ|cŠ…†GŊS™~\ääs^GâË_˛ë͍čÄ8üũUė2ŽPúûWšxúÜ ËiĮЃøūŊ\ĸgE?eš™čˆžŊjtOJ8ŠÖ˛(‘ĨéëMQÅHŖŽ´x S—īĶTđIíR‚hãĩ9A'Öĸ,Į€qJŦTsH × ĪZ‘N;T*Ážžõ'AÔæ’uæ“ lšE&œz=ÍŒ.aDg>´Jß)¤Rv &†‚Õ;Aœ kĮ“×ßĨ1ĸČČj›’9lüiXw+Ŧ ĮīTĸŲ€ęIúS€e§ŦĐõ .0ÂT 枨Į @vŠœ"¯AšArˇ’ĀgđĻß<ŽjæîĨ#gĸÁr  ãđĻ‚wĪŌ­íS’Õ"ãŦ;•:šMāšš&p*Œ Š, Č9§€; qØTį`Ã0=Š\đ)Xw! ëŸÄS†:qSeq§aQšä=¸ĨØ8qõŠŧĩ'•üŠūBpx÷ĸÁr xĮŪ›"Šā U•ļAĶ<ķCZ į'֋ʑÆx<ŒuŠ<Ĩl‘Ÿ­LĘWî“ôõĻÆ’ezsÛ­aÜo’šÆqCF:géOØû°:vĮĪÜí×4Æ,YÆGãO'œdcĶ ‰ČäS#Œû L.!Qד¯>ԇœŠ€7bî9Uŗ’qíRŠ*ŧ ƒM'ūTî66{t cŊ2 ũ)ƒ;ËßŊ OEŅ!2tĀúĐYFā1‘V āįĀŲaéíVā?:C#9vqÅJ€“ڍĒ@Æ{ԁ;PĮĻiT(ōiY0@äPŊģ}(ņ‘ĀÆqÖ¤ëÍDĄī~”÷Üé´ SQÆ>^žôōųÎNŋ•"û„žMH$•' Ŗī¸äã=…M3ĀôĨa܈E´ģœsŒæŖ[XœQÁĮ5hA }ŠņáF8ĀãŦ!ûS ~<Ķ ąå—œumäĘ OSŠšh#§4ÄdēųÉúSᕕ@éWäˇo+ŊRû)bXäã4°Îwcõg#i$Yʏ„…'ž•aefá†=ņL "lņģĨ;ī ¸ãĩBÆ950|ā P/<Ķc“‚?­Y!IaĪņQŒã8įڐėŽônpã{)Cà “““ī@?xîčĮ“PËj$É@OãKŸsOŠeëœm÷ c„„!x*yĢLŸ!äôôĸ KŧŽā5sĘŨLūĢBe(¸ÜCõŠö‚ŲįT~K›(#ŒņŸJĸKpÉš 9ÍG8iˆLņģņVZ6#ƒŸJ•n HKt"‹4æÂŦr vĄĀāÂ™čŅ ŧc5&āÃĻMĀ ōO9¨›ĄĪ+/Íę @ėDI˜ '#ŠĻ>Z;ŽĶ€Nj6ĪL÷怜dcžŧTo†díÔĐŲ 0HÅ7–áņí@HOFšˆđĀcņŠä9P[¯zĒÄŽq“L.FĘ1ŠŽËčyĢ ß]‡9 d$ WJāü{tčdų$īø×vÄāåücŸBŸ‚Jß‘ĒŽäŗĘ nM+}ãI]–ŖŊJŧw¨PąãTČG‘DĘŲāƒO\ƒÖš™æĻAÁ]§đ5 Ĩ"F=*EúPœ ]™Å8SĮր"ųžcĪ­L¸8æš įüiĘŖ;ģŌÃĄĨĮĖŧt įŠwG&€&p´ģNAÍ#‚\sS1@¯rzĶ‚SJNiĀqëīHéŌ€ §:šF#°Í5ŗŒc8¨ã%$m#֜ķã€ŧŠŒ31ÉÍ&ˆŸiõŠŧÁÍV]Į §G9ü¨_9Hä~”+ņ‘ƒL\°Îqõ퀑ž>” ˛zâ„o›¨ÜŒ`6qę)Gäš@Xvob)¸ö¨Ã’y?…;8Î)Ŧr§Žh¨äĶIÎA֜9ã恒ŖƒÅHœ“šŽ0­ÁŠ“ž1H GĘp3Šx‘XãĨ0*“HYéš`NXv"‘åPO>ÕY˜pqNÎxôĸâ%ķ9ëĮ֜’FpqPmā‘ŠvÖlãšZI88ö¤,Ą~b ô¨e{`c\ DĜ`Jdõã4E{¯Z” žE W!11ĩG"5 Ŗ,)ÅO•‡rŠgnHĮ”eXtnãˆŗŒUa´“=EK)lJ€sØũiĮzjēžG8õ§BĻk…R~Qɤ1Ÿ6嚸š\wķV’Ú0˜Ø1ôÍJļéõj?v1H}îÆJĒHæ­40įBŸcNōbd9đĨĘÅBO§,‡ōĢ&Ō,äųЖ*Š÷ĸÃæ+† “œwŠ#æĻ<œą§ũˆ'&CīšVdW2Ķ#–F8`Í[y”Ŧ>dVXōôĻĘăœæ´˜.äÕY­ã „f'Ū€æ)Į!SČīžĩqFA<ûsPĮj1Ÿ38éÍ^Žņƒ€8¤#˜Œ0÷c‰<`Vœvā¸ņŽÔĮ´V÷ .gBUIęqīR dyíR}œ=ŊH-ūeÁÁúQa\Œ2āžĪ­82’>n Lļ?.w}iÆÄí#=HÁX.Dr{Ž”€îaōķŪĻl˛pÄā÷ņm‚s!įڋŅÉlö^ÔįvÁ)ŽÔß)žs€xjŽ6v$ž:õíIŒ˛¤É÷¸8õ¤hūRģ}ęŧ IåÃÔÕĨf äŽ) Ĩ, ŧôÆ:UfŖÉôô­&ÜíÔSd…OWϘŒĩ~Ų528PŅ æ “plĀëL k!ÉÎ3@e=FsÜÕ(@IŠ"˜ķ‘‘аI ÛķĻÆāŽ}j8Ę1Ą%VåO~␰ųēR Ú ÛM߯yëL7{sž´jŪaæ•AÆ?ZՍšDSžŨĢžĩ‘žŌŽŧâˇ-fV‹€:ôÍRBb2ĢŨÖŖxž\ķ’:U‚vž v 'ųՒc(Ú˙2¯×4˛ŸĨ[‘° ¤ÖĢLģSšhâp¨Tƒ‘ŪĨŽB?ĨB¨Ēûyį4ŌYp 0-3as‘Į8¨‰!qsPų ’§¨įš]↠1 œb˜Ī’hVÁäqIō“žôÂã\įo=)…€$sĐŌ“¸qÛĩ4r2ONÔÄ<Žjŗã§aVHÎMU“<ŸZCČ<…ēfĻ uį5cۘ\Ģ'Ũâ˛uˆŧí2æ>ĨŖaúVģƒÎ*œŅ‡”ŽŧPž*áĪų˙=)•sR„ÛęÂGúš"j•t"PUό|Š+!’­JŖ&Š)*¨Å?n;ŅE´?hÍP0ĀŊĸŠ@•ZåBˍ:(Ļ.ŖcŒ$€īV˛ ĶæĸФ&X•Č*­XŒņn´QTI^XÆælœæ›å‡R[Ÿj(Ļ€Ģ4czũMC*đ9ĸŠ`BĮįĮĩ~ņ…PËÁü)…3Žhĸ˜˜Ō #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { if (argc != 1) return ERROR_INT("syntax: partifytest", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/partify"); #if 0 partifyFiles(".", "bois", 3, "/tmp/lept/partify/bois", "/tmp/lept/partify/debug.pdf"); #else partifyFiles(".", "ortiz", 5, "/tmp/lept/partify/ortiz", "/tmp/lept/partify/debug.pdf"); #endif return 0; } leptonica-1.86.0/prog/partition_reg.c000066400000000000000000000124361506303110300175430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * partition_reg.c * * Tests partitioning of white space into rectangles, with examples * sorted by height and by area. We use a maximum of 10 rectangles, * with no overlap allowed. * * This partitions 1 bpp images using boxaGetWhiteblocks(). * For a general testing program on arbitrary images, use partitiontest. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void TestPartition(L_REGPARAMS *rp, const char *fname, l_int32 sorttype, l_int32 maxboxes, l_float32 ovlap, const char *fileout, PIXA *pixad); int main(int argc, char **argv) { PIX *pix1; PIXA *pixad; L_REGPARAMS *rp; #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", __func__); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", __func__); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; l_pdfSetDateAndVersion(0); lept_mkdir("lept/part"); pixad = pixaCreate(4); /* only for display */ TestPartition(rp, "test8.jpg", L_SORT_BY_HEIGHT, 20, 0.0f, "test0.pdf", pixad); TestPartition(rp, "test8.jpg", L_SORT_BY_AREA, 20, 0.0f, "test1.pdf", pixad); TestPartition(rp, "test8.jpg", L_SORT_BY_AREA, 20, 0.4f, "test2.pdf", pixad); TestPartition(rp, "feyn-fract.tif", L_SORT_BY_AREA, 20, 0.0f, "test3.pdf", pixad); /* If display requested, make a tiled image of all the results */ if (rp->display) { pix1 = pixaDisplayTiledInRows(pixad, 32, 2000, 0.7f, 0, 30, 3); pixDisplay(pix1, 100, 100); pixWrite("/tmp/lept/part/tiled_result.png", pix1, IFF_PNG); pixDestroy(&pix1); } pixaDestroy(&pixad); return regTestCleanup(rp); } static void TestPartition(L_REGPARAMS *rp, const char *fname, l_int32 sorttype, l_int32 maxboxes, l_float32 ovlap, const char *fileout, PIXA *pixad) { char pathout[256]; l_int32 w, h; BOX *box; BOXA *boxa1, *boxa2, *boxa3; PIX *pix, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; pixa = pixaCreate(0); pix = pixRead(fname); pixaAddPix(pixa, pix, L_COPY); pix1 = pixConvertTo1(pix, 128); pixDilateBrick(pix1, pix1, 5, 5); pixaAddPix(pixa, pix1, L_COPY); boxa1 = pixConnComp(pix1, NULL, 4); pixGetDimensions(pix1, &w, &h, NULL); box = boxCreate(0, 0, w, h); startTimer(); boxaPermuteRandom(boxa1, boxa1); boxa2 = boxaSelectBySize(boxa1, 500, 500, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); pix2 = pixCopyWithBoxa(pix1, boxa2, L_SET_WHITE); pixaAddPix(pixa, pix2, L_COPY); boxa3 = boxaGetWhiteblocks(boxa2, box, sorttype, maxboxes, ovlap, 200, 0.15f, 20000); /* Display box outlines in random colors in a cmapped image */ pix3 = pixDrawBoxaRandom(pix2, boxa3, 7); pixaAddPix(pixa, pix3, L_INSERT); /* Display boxes in random colors in a cmapped image */ pix3 = pixPaintBoxaRandom(pix2, boxa3); pixaAddPix(pixa, pix3, L_INSERT); /* Make and check the output pdf file */ snprintf(pathout, sizeof(pathout), "/tmp/lept/part/%s", fileout); lept_stderr("Writing to: %s\n", pathout); pixaConvertToPdf(pixa, 300, 1.0f, L_FLATE_ENCODE, 0, fileout, pathout); regTestCheckFile(rp, pathout); /* Display in a column */ if (rp->display) { pix4 = pixaDisplayTiledInColumns(pixa, 1, 0.7f, 20, 2); pixaAddPix(pixad, pix4, L_INSERT); } pixDestroy(&pix); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa); boxDestroy(&box); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); } leptonica-1.86.0/prog/partitiontest.c000066400000000000000000000151201506303110300175770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * partitiontest.c * * partitiontest type [maxboxes ovlap] * * where type is: * 5: L_SORT_BY_WIDTH * 6: L_SORT_BY_HEIGHT * 7: L_SORT_BY_MIN_DIMENSION * 8: L_SORT_BY_MAX_DIMENSION * 9: L_SORT_BY_PERIMETER * 10: L_SORT_BY_AREA * * This partitions the input (1 bpp) image using boxaGetWhiteblocks(), * which is an elegant but flawed method in computational geometry to * extract the significant rectangular white blocks in a 1 bpp image. * See partition.c for details. * * It then sorts the regions according to the selected input type, * and displays the top sorted blocks in several different ways: * - as outlines or solid filled regions * - with random or specific colors * - as an rgb or colormapped image. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 w, h, type, maxboxes; l_float32 ovlap; BOX *box; BOXA *boxa, *boxat, *boxad; PIX *pix, *pixs, *pix0, *pix1, *pix2; PIXA *pixa; if (argc != 3 && argc != 5) return ERROR_INT("syntax: partitiontest type [maxboxes ovlap]", __func__, 1); filename = argv[1]; type = atoi(argv[2]); if (type == L_SORT_BY_WIDTH) { lept_stderr("Sorting by width:\n"); } else if (type == L_SORT_BY_HEIGHT) { lept_stderr("Sorting by height:\n"); } else if (type == L_SORT_BY_MAX_DIMENSION) { lept_stderr("Sorting by maximum dimension:\n"); } else if (type == L_SORT_BY_MIN_DIMENSION) { lept_stderr("Sorting by minimum dimension:\n"); } else if (type == L_SORT_BY_PERIMETER) { lept_stderr("Sorting by perimeter:\n"); } else if (type == L_SORT_BY_AREA) { lept_stderr("Sorting by area:\n"); } else { lept_stderr("Use one of the following for 'type':\n" " 5: L_SORT_BY_WIDTH\n" " 6: L_SORT_BY_HEIGHT\n" " 7: L_SORT_BY_MIN_DIMENSION\n" " 8: L_SORT_BY_MAX_DIMENSION\n" " 9: L_SORT_BY_PERIMETER\n" " 10: L_SORT_BY_AREA\n"); return ERROR_INT("invalid type: see source", __func__, 1); } if (argc == 5) { maxboxes = atoi(argv[3]); ovlap = atof(argv[4]); } else { maxboxes = 100; ovlap = 0.2; } setLeptDebugOK(1); pixa = pixaCreate(0); pix = pixRead(filename); pixaAddPix(pixa, pix, L_COPY); pixs = pixConvertTo1(pix, 128); pixDilateBrick(pixs, pixs, 5, 5); pixaAddPix(pixa, pixs, L_COPY); boxa = pixConnComp(pixs, NULL, 4); pixGetDimensions(pixs, &w, &h, NULL); box = boxCreate(0, 0, w, h); startTimer(); boxaPermuteRandom(boxa, boxa); boxat = boxaSelectBySize(boxa, 500, 500, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); pix0 = pixCopyWithBoxa(pixs, boxat, L_SET_WHITE); pixaAddPix(pixa, pix0, L_COPY); boxad = boxaGetWhiteblocks(boxat, box, type, maxboxes, ovlap, 200, 0.15, 20000); lept_stderr("Time: %7.3f sec\n", stopTimer()); /* boxaWriteStderr(boxad); */ /* Display box outlines in a single color in a cmapped image */ pix1 = pixDrawBoxa(pix0, boxad, 7, 0xe0708000); pixaAddPix(pixa, pix1, L_INSERT); /* Display box outlines in a single color in an RGB image */ pix1 = pixConvertTo8(pix0, FALSE); pix2 = pixDrawBoxa(pix1, boxad, 7, 0x40a0c000); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); /* Display box outlines with random colors in a cmapped image */ pix1 = pixDrawBoxaRandom(pix0, boxad, 7); pixaAddPix(pixa, pix1, L_INSERT); /* Display box outlines with random colors in an RGB image */ pix1 = pixConvertTo8(pix0, FALSE); pix2 = pixDrawBoxaRandom(pix1, boxad, 7); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); /* Display boxes in the same color in a cmapped image */ pix1 = pixPaintBoxa(pix0, boxad, 0x60e0a000); pixaAddPix(pixa, pix1, L_INSERT); /* Display boxes in the same color in an RGB image */ pix1 = pixConvertTo8(pix0, FALSE); pix2 = pixPaintBoxa(pix2, boxad, 0xc030a000); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); /* Display boxes in random colors in a cmapped image */ pix1 = pixPaintBoxaRandom(pix0, boxad); pixaAddPix(pixa, pix1, L_INSERT); /* Display boxes in random colors in an RGB image */ pix1 = pixConvertTo8(pix0, FALSE); pix2 = pixPaintBoxaRandom(pix1, boxad); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); lept_stderr("Writing to: /tmp/lept/part/partition.pdf\n"); lept_mkdir("lept/part"); pixaConvertToPdf(pixa, 300, 1.0, L_FLATE_ENCODE, 0, "Partition test", "/tmp/lept/part/partition.pdf"); pixaDestroy(&pixa); pixDestroy(&pix); pixDestroy(&pixs); pixDestroy(&pix0); boxDestroy(&box); boxaDestroy(&boxa); boxaDestroy(&boxat); boxaDestroy(&boxad); return 0; } leptonica-1.86.0/prog/patent.png000066400000000000000000002242761506303110300165410ustar00rootroot00000000000000‰PNG  IHDR  P"J—å pHYs.#.#xĨ?v IDATxœėŨĪ#9~(xĒŖ^G=lĄĸ ŦÛpM˛Œ9ŧŖ{``§#'ÛØƒû'¸9øčjĖa˛ņr“J˰ŧØqëų6Ŗõ/xoŦ1˛ü:|Œ°7ÎЄ1ÚÃÃõ´pRH&šß/!…2Ĩ¤2ĨŦRVķ[ŨŠ_Ąˆ"$ƒdÂä]¯ĀūG ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōF ōÆūI&_ø÷ŠĀ“WöIųœIûūü‘ā“ÚãԌdņÚ~\žoįsŸTĶ•“ąu+ˆQ DhU"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"oĸĮČČČČČČČīyc"#Š1]Ŗ8ŧnā›šĢÄ>FÛ/ë%ŧËDu˜(iƙQˌ4!ŠpB¸â“B’†‘Ûoāã&ŌąH“ĖFĶҤ! #ö§bf"ÉáÛ~É#'JĖxbēÍēSCh"‘Hōą4mE Áˇũ’ĮMd,Ņ°ĐŒNLf4SfR¨.ā™âmd’mûŸhdƅĻTØÔúĘLĮúĀĖĖ˙Į‡@dâ!¤P[Æ{A40Tj¤š4Åũ-31˙Æģ‰Î]dæ€IÍ@ˆÎ ũˆÁÛ[Æã'ʍąDx·wƐh›ŠųeIdqĶ1Θ<æxN. *Ėßĸ2€HPGtÄÍĀˉšŽ( DH””D–Į ap´["Č7ižíw<~"•D)˙:‚ė7™vDŠēbÛVņø‰)‰šŦ?˛DÜdJņAÖZmũŸČf‰^ڑÆôpŋ^)žiւ­“[Į{@Ôĸ–čs“t%‡´ö›.l°I ímã= ʓ’¨ÛUH(Ũ)”ô•Mާ[Į{@$ã’¨Ķ…ė#C”Ū…âB`ŗ’[Æ{@¤+ĸ NbšŲüõXqų ˆ"Ėl–‰ŪQN"ƒ%ũļ9ßú;Ūĸvˆ# C"ičlëīx/ˆl1vb‰ ÁîAæqAÄļūŽGO4|cËD ķ×đ8Aĸíˏ¨c‰l•ÚĖdCŦ™Õü\€h„D “ĻíâņHŌ‰4ÃLs 9G8!QDņlûSÚ#'j›^a2[Ŋ/M7ƒS=䇎(Cĸ)$M[Æ#'ę:1Šæ=ČOw ÅgFŠ @”@J”ä„nûœ(WL˜d‚<šĶŠ„4P$AšIšļíwîM¤¯ŲQ&eI”ĶúŒ "]'JŲ]WöŽŅĐîŅfʄ}ē(9õë7ĀPˇ”îM¤V‰ō›RZŸqA¤ęD-ļųwß1r)B%yá^áÚč„b›įUļĖx E'nK°]ĸą~a÷&’׉8å%Q‹.­đœHÖ×ä %ŽHœ¸oĩ  1’(Ėæã|7Í\!›Ã |íÂîM$ŽáČĨiI´Û>÷&Ɲ%Ļ*ŽY/ûؘ•“–Dyč!‹ļČ߇)ž6)jY1'‚dąeīɓ&°īß6†Ī=ˆ\*‡9LU\áģ¸đDĶ‚#XG„8“°kŒˇÂYŋV[ÁĄÔ˜S+Μ°Ō c‡Ä´O0YlØũ+ODdČ-ƒeŨ™(%GÄÂZđe¸o䍒ˆØ? ֙Ā:0Ü­ō“Q oāL)žj.ČŨî…“Ž˜6l54qŖÍŲŗXŠŗʤËDøŗ"‘Ū1Ņg¸y–¨%8ŦšK€@ÅIÚbH$“ös›RēŦc$bKÔȁčÂîJ$ËY ģJÉĒ*b3'˛ƒ]Û Ž6øB:ĀCŸĀâtC;"xJoŠ­š3‘ ŸĻQCBĒH>-‰bK$Xš ‘ §690eDĮp:ƒ™t„•o/á|sG"‰›ŠHązŗ(rDv…%b]鈜9€wr$R<Ũ!VŗRHáä¤#ømČĄĢulaē;TŽßŋRÎZæ´F¤`MđŒĻbŗÛ#’mūŨ‰\ÆôŦ|}­Īē$ .ģ { €RaOŲR˙GCՈāīÚ/žQRÁJÆōŠV ˆR?-Ĩ–Č–ėmeˆŒA"i‰âÖ}ˆėyĸš kīä­D K¤ÜŲĮÁ–Œ!>1ŋŽÍvLD+")ÜnwĻOqī­ĩXĘŽ ÍVŠUD"F×ä>DvcįqX{;æ-DÄ9ؖ%âL;"nžF"ÜzGtķ ^,kķuŦˆ˜Ũ<ģCQŖĖ/æ˜Ų@"šG–ˆ§œ,ˆđ„dˆ$ĸi|"üŅįĩLX5‰Ûˆ8–ŅÜá Yąŗ Ų'_։ĖVDxČģĄl+"^‰vūН!áĶVIDxʈ)ŗŽ`"J"X#ÔؘČ~õš™Ík™đ[Ą”u‘Ô•Éuĸ¯jDŅvDvízÜNd‹ƒ×‰ÜæäxsĀûãLwJĸĒ–I;"v‘+áWDļ°īōŊđäpA„S,Wß,/ˡŠ=ÃUbw†D9‰ŠÎRÚĻ-‘ûirü¨:ĐŌ;ą+Ŗ(:”DU-“ÍĪn%j9Žg8%Á d^åFi[‡ĪV5DT•]ņ’ë2-¯ŨÚdĒFŨHķ™™Œņ'B"8LāÔ%/ČBXĸčáÖ]¯wDÄ}{Ãū€t‰H,ˆ0Kēņŧaoėã!JQÎjDĩÂ+žüîA¤ ßPLeI$k5ĖsF>‰Î>K“ŠtŽ×—DŽøžWE#{qÁUŒ‚Œ#)‰ )ŋ­–ØG¤xÎĮ}{ĻŊA”Q>'ÂÜ2<Ü)$*ËĪ–H'ލu7" ™Ģl‚?žôG‚ļú€Ļ/#G”ĮSĶÜLmKĸÄĀ Mđhęãî‡÷ÍlAd÷õœßŸČü ŗšԘ‘rD“$‚]ģå ‡eˆpDŦ߁hĻ?7™ĐÜeG’æLŅ$š´HDS÷×å6S ŋƒB+žļjD“&å[I؏΅Ŋēę!2%ļ)‰ÜĪXĩîC4]ŧŖ-€¤2ədqNs"äkˆ„­‹IiŠD˜īlWGdېŦ‘w aų,]ŋ >ĸ IĶŨ€(Å ‡¯ülNä~ƒH=ģQa‰đ'ÂbŦ%@ÄJ"Ų¸…HÚ´ˆ°ęO‡í*[Õ6cŦRkēHy nCdÖ!HI‡‚pD§UZ„‡V´ Í2-˛•‚w#â–(g7ˆ™ĒIWéDîfÄm“áɑTe4ûŅ}‰Fލŗ‘˛D:Z-jqöãû €(‘<ąi)‰ĸ9‘&?´D+Oúxh#QŨ >Ž.ÅĻĢ.;D¨×Ų’hļ‘Ũp(-ˆTˆ¨-‰āë-Q^#2ä𭛛e‰ō›DŖ’ˆ‘|V‘ōRÛũˆ G”m@d,‘HDÆeŒÜIŋq/ĸĖuŅč&ŅoŨBdĢĮ—‰%ą5ŽÖ>Zn§q7ĸMí’o'b%Q^'JDę~DGÔ)ë}r$"5ĸÖmDz™H'åO–‰øm­TîH$L(Z&jąEÄ] ĸĒ‚ĩK÷'zj÷"ŗ JŖĩD°cß$ę^#ŠįDür;ĸą%Ɲåu"ZĩĒ2ŦS ĸǤŸnC¤^]'Ęo!böšø2Õ5"1'’ˇÜ°p#ĸĄ#jŦ u"~Hī˜H]'ˇaˊ‰0/­žė Ôđ‰#J*ĸÉļDŊ9QžDÔ0—UeȜˆTDԜ1ŗ Ę+ĸČ\ܛ(ŋ#Q~Hq[]åsĸâ–{:nDÄæDŖ:ü7›%ËDø_ēkXKDđéôŪDåIŋF$×ešVDt`/Œ„ã ąč°úŅ^˜ŗDŲ-ŖˆÜ ´1íí׈fđƤĒuÄJ†<—D=(žŅD3xQTD9"S'´F¤Vĩ–‰Ü53(|Bđē,sDļ…“=éˇn邱 ‘6sĸAh" ȲÁ0VUa}Q…W$ĸ­Xąd~5‰$M`)’čpCĸuƒHG˜ģNޟ´[xëĖß!ŖF‰!ŽŠõ°œŠ+ŠŅmŊT6!ē2gH„-–: "RHB;ÕE"$„ĻKŦ yÎZ Éã:Q+CH%š¤$zÁīG”LD‰NbIouD‡Haĩ”ŧĨ}b‰\J™āénKĸKGYøÖQ¤lĮnËĒxN°‹Ä$â "w™ĪUËääĪa&é.Ä"Ņ&Ŧ‘¨3Šʤ°DįŽJúĮ7ŽeCÉ5Ņą­âĀY`‘ˆc=^斨ŧN›¨†Ú† šgVŦŠHbĢ8ÜÚæ§ļ|y‹īM+ü9և6jDģ\I4ĩ9LØ7š†‡lbĘH v‰2ʐ(ęY"ŧMÜÍËũpôP@Á*•¤'„§*vDQŲ6Ë^âÛĸŲcsb‰đDɰ܃ÛI%IlkB>ÅŊA“NĄ9ę|ˆÄV„ˇ8ŧū‰ŲÆ50;ˇ´/œc‹)a•Eëŗ$‡ŸąÍ-āį‚ą 6™s_ė\Jr€ÅĖ‘€ä‡ÕŠn˙ę’(7“1ąũō6ĸéŅeuja:ƒ›DX›Ļɉũ…ĸS˜Vŧĸxih‰Č5<Â^lC41­ö ŦRsáfklf2˛ß¤OĐOŧŽh3?˜wlÚēkGŋ:ļËb˜wtDéúÐAH CmĨĻI_`+%XŌ3WŠ ËĮ+ úFrÕ0đĢŲwát‚­ÂxI¤*"×BâEž-‰lXĸĒ Ŗ‹–ģ\.{×QÍĄls9L&ĨÍHÖĒMßĀÄŗUĢCŊåŌÕ"ĘæCå¤âŊ\=sYOx‰ËšqŌĮ6ģš“ę{`]Uå+ė>îÉĻ}PüÕûõU|ûá~ĸmûeÕ:,wÕŲ$ü‰l°;.vgáúøm{›eYąē]Ûúđ_jÄŋīŽwŦ­ÅļK)c×Dg7Ëžg8œmG¨wĻŧķ­@ũÍđĪģ¤Āũ83ĪTžxXĸūŲvˇ†Ö×wmKĮV÷Ž3oÖëâŽKŨaœĪWb‹XÚqčgžCCžwķ†|ÛD}ĮšķŠįÍAo,ŠČuS­‹o^šĮÕ]gūfmČČČČČČČČČČČČw$ēkĨæÃÆ&Wŧ׆­CŠĒqōnšt´9Q+1-Š×÷Z_dž¸v5UmĩÆŪHÉõ ÜęcŽé7]€\šTR\1ú7ĪŲm@6'Ęc“ÛßÍ63å $õxX"Ų¸Ū­Nžb°VļÕFątQڎ¸" W‡TĶdy”ˇkŗmŧŠ"2ĢP^h~ÛD*R׎ģ ÉæãšŨŋ K"“‡‰ĸņnˆdÃĖÖ•ĩ˙Mä:męų;âf›éás^žw~Ëę˜nY9••Hßļō›ŠõDeƒÜ'rũÚæīäŽ÷­ųĩĐŪ-K¨š=‰x,Y{y ŧå¸L€ÉõMĸō<÷ĐDî Õķš=ĐlK“ųmzËęDŌN˜ĨIÎ#ÁNo;×܅ˆģE7‰Ę6ËNä†Ų™ŋ“ŋâH„ĢQ5ũ¸­GĐ‘Ûˆažc"6Ģ-ŊNT>yĸڀe#āųGØĒē$r¯Üz-ęDŽ­vR{ŪĀq„fģ!ĸkˆôCã`bW-:úֈĒŌ’Ū˛¨›Dg˛"šî„¨ĩŽH=$3L6܀n°ĖEˡ‘mLh<-ßęDå sĸb'DŠ:$§âĀļÔ"Ũ`ķą) Õ|"Í5“ 7 ÁWˇ×ĒxNäö/lrJ!°žŅbęēí¸ņŒ¸}kN4Ū QĪ oԉÅĮ‘ HáJvā…Îéƒ)Ŗ˜ˆÜ€°ƒ[/ÅČØ‘Oh”sŠWš|–¤D_ĪĐ."eōˆĻļClĩ/ʤÅIĘZ|¸"á(I[|Ô0ƒ lQ9Yĸ¤õ Dˆ.Œ䴓žXāIm$*ĸd3É#Ūú4N‰ZßT9eB&âŠŨ䊈–DŨáūŪPôTÄ ĶÎ-ļ'č ›%éƒ͌"7 åŧer<Å÷wZž Kš8fé‹XĐۉ UˆŦqŽ9Ũ‘"ØabÁ(ĮRmqÛ6ōü!ˆ&æ°ąqbQ„éF{ĩ%+‰`hĘsEĶÃČC”Į2ļ)uŲģB˛’ˆí„H$b°BKD҃æßŲãĨˆN—ˆRf‰R :Ų„(qD.› Jĸ“[VūDš|aÂéX`_žœŸ=<ҝŲ`Q„ƒĐ ŧŽŨš\ΉtYŗ"¸#:Ū ‘!ßCĸAŋ&Í$˜_@Bc’e"ē ‚4ģ$J,Ņ­'ũ:ŎrSíϤoZŋc Ųŗņ‰DļOÃ}ÅZt™D;2ŠÛ‹Œ#jUDëcҍ$úbWD˙ņ:Q4'2ÉÃeæg ōŠŨųmŅ`c"8ųVDnėAIôÃĨ׉„Č­éz=QĮ2(&wJ"Č`ˇėāÔu"‡ˇČDvlŌ:QVũ`GDyã:ŽRš2šüôaˆô 3í9‘zÉ\ĩN¤?B" đũå5ĸnIôYß%ū.Dâ:ŽėRæ@ëhˇ?*‰˜ČWÉכé׈莉äu"U#j?ŅÕQQ.6%’Íe"Í.]16ß%­›(8ĸ聈fī3Ö)Kú§ĢˆŌ‰Äu">Ũ-‘ēA”Ήę¤ß‘$ĒËN7&Ēô-‘2Ån‰4‰%"ŧ@Ķx‹DÜa9ôløˆŒ#š™,įníč".ρcØĪs×o$­ˆŨZš~ŋč˜ÚFôœhQ1øģՈnË]§Žį‘%qYŊŋ+ĸS$ēZą6˜fEtũréÂM¯ņŪ "6ô”ŅzöMĸ^G{"Ī\INÔŌÍøÜÉõEČû†%*Ū•ˆā$Dą¤ŋDôŋįŦk‰Ž×–ôãŠ'rží÷——wEÔĸÆdQRXĸæqÔĸփeH4v ˙°°°ZeˆÁsHúŊ<ą%ũįk‰pŪô¨"J%ÃÛ)đ‰Ũ‘ÄB_C‘‰\­cŗŠŊqފȃ €(:"•č@b;\cYëˆ÷Ō"PÁ‘‹‘h}ÅŦ%údAÄíPIÕėaD‚šá}cy0Ōƕlh;Z2yNˆ(îalΧ‰įo$ė]ØpT‰rČéķVvōۈpŦˇš8ä˜@"ŧXŲxfD­ÄĖp=hëCBGE>!ųkƒjpP9Mō¤šûäēĸwbāˆC¯“”ÚģŦáØU°ļ^Å8ħ&ÃĪļ6šļDĪiDpŠĪņ:Žƒņ‚™/énˆŒëíæ*4] į×vLËÄ6†hãíč]–ļQ,ˆÕւW×ŅĒČ…ŨŲî=:Y{Ō‡œ›ąÍdėhŠ8¸ˇī§ˇvmöŋ9čnİ_keĩ4JÆ-ąīDģÃFįڀ͛v’ŨwĸŨ ˆaŖlŖymŅūØwĸŨ ˆą26Ÿa߉v3 ÆĘØt‰}'Ú̀+cĶhöžč˙<Čhà §Û{ĸ ˆą2č†Ķí=ŅÃÅŲ†Ķ}ƒ‰6@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä ŪWđ›Č÷& ˆüˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧá%ēĀ?o~EnÆūáī⛗ÃKôÆ\3-_4LN’”ĪˆÉ)×\“ĐX‘ƒ†‘Éc34)Ą’ŧ")iä„Â,­7$i}FEŖ„Ä­Į?Ŋûmƙks6žūf3üs~ãíá%ęÁļOgîšŨ”čŦˇxDF.ļŨ].ˆŒ6ģ"ÂŗYÛ¸EDæˆū$5Į°õČ0'ęũŠų¯ ϰDĘX"Ø—ˆ`ĻØŒ7$_ĻčĖmŅÕĩS›Ž6Ž–ĐõDw¤Ø["’p ™o—ËZ"2\&%QÎXIÔ0–h?jS]žį ˆ.ō“KĪ—ÚČŪ6Ãä˘ØĖ4_úpžŠ˜ÅÆ üDĶϝÕRļ"šā‰ņĻk›VE6\\#ú{ĻKĸÎnĨL%HäųN]XņKjSA8§ĒåU•ęÔčõ V5"ħÕR˜Y~ĸŽŅ ĸˆx k6FÄ%‘8āFÆ?ašK„'6ā@DME45)ÅMˏ=ßéˆøÔé˙ÕrųÃYETžH0õs5Ņ F„§4Z~¸ŅNWĒ€eâęÉqIԂ×ŋވdE¤Rc‰ēÆ%ȸ ú •›AjÁĮs,z`ȧT°ĸ7ė˜v†ųØËŋ7ž‰­›@rĐš4,c_1ZŊb@tqŲŅ˙ÁЍß:ayIt•Ã_P㯛Ņ6D„Í–‰Ėœ(LjžÁvŧ>| Dܞôa7>pD˛aĒ“~a~’XĸŖ ‰Z"ø‰˛‰ÉžŠŸ%ąú<Á‡ĶŽų2’Åin÷ŽŦÁ v.DķųĮ/’’čåA,õa\4äÄ餀í+îˆN!•M>Jf#ø´yč\īGTĀĄrY¸ĶŽ#: +"UÍr :5‰Į-• IDATÄFž(‰ˇDŠ9˜Ļ#zŊ…õœâ!0ŗDŊá_%/˛Ųd€<îM‹â'–¨7@Ūš3VėŲÁ÷ŋe8é'I{QFōŲĖ™d DlZĸ‰4´wŠÉTĒ“Cûî=‰F'ĶÂ%…Ž(Z5*ĸ b’F†ĀšŸ8"E˜%:5­Č4cK´Qí‚FĸÅŗûlD°ą˙”üN6¸ÁãŽft\¯>úĩbÅ˙úāģŋëˆä!ëZĸ‘˜\-ˆ9ąÍÆĸPĮúāoCdâqˆ$sĸŪiI… z!ØT0,6 QšiB‘æ:č“xķŊl`#,҉ËūÆüV6vDÎbtXüę‰āŖ¯á!É˙]ũûŋíˆō“’¨ŸGÔ}SĩiŪĨŲp2V_čÃæ-k˛ŅāÍŌ^dD­›DT~œ˜¨1O‹LË–ŅžÅætĒOĸÍĶ"°™n‰.FĻ[(žũŸúˇ‡YQā‰ëŧŖ8íf˙8ÃŖ>úoHôFņßVōûh`r(ƖDę5wDaĄ›ļúÁîE_"“Šīũũ-‰Î׹´$2HtüK*_Ä&j™ęŒfō‰žCŽō6Ņæg4$ŌÆ‘HōŦŖŋÛÍFHÔC"Úũo—gK$Mĸ¨%™ŅuD!—#RHÔ5™ūŽŅßŨލč­%â7ˆK„'ļ’HΉ.•i܉L-QÚ@"D´ÛíN°øBbuÂ(8"S#:¤/DŖFt;"ø­×ŨrÎ߈¨E\•‚Ë::"°Ņ„Ô‰Nū'ÁR’Čƒˆ˜Í]ȅļDIˆ$iØŦãFškKDHt>"a:‰ĸŨ3KÄ3uĖ?æmKu\âĨŠ‹4<{ڃ@&=Ŧ::……@ú~šíõĢS‹¤"R\čīūÍ Ž ę å Qf ŌŖ_ ŅLņ’¨š‚h4›(,jķũŒ•DoĨYM”"' JH÷'JāĢ]Iß^$‡ŋJÜ"nq8ÁŸęŽa7Á4‰8hhz /Ķ$”<,$ĨŠĩėļ\H,éK.N’ļš UŌĸp€@ž“Ō~ˆÔ ģ’(÷ŌUHĻp¤&mqLÛy!fHÄF ˛dÖØ^É!ŅdIGÄō MīO4Á) WĨf/56 dšäxŠ1eé„DâŧÉy‹Ä’|ÚOÉ'˜5ą—/~GNäB‰! n؈¨‹‚°J žé€v4R!ŅÉ!ŖHáG"Į)īk6Ā‹3:Fĸ4†˛Ģ)&ōÉ$ũčCōĢä"ܤ$‚S°€ļm¯Ŗĩš,W4…“l[|ØčoATŽī[÷•ĩZÅ2ŽÜ5´KÉėK}c‚kQĖ'*ķĢSÂõgYõž ę™ė"Ģ-.]-ū´ŧ‚Ē}Ëypĸ˛ZųVd÷áŽŪ\ķŠ[™qYßŦnLp-ŠųDŗú‚o.v]ø/5âß[Ģŋ(ėuXs3 5vģDEä͆ķ‰Ęę˙áĘÉÖ_!ö^°ļ+â=ā ÎÍ÷ÛŪRę–M+Ŗ˜/å‡îŪĘÉVÃaø›=āīŪüQJ\ûęÜmoQ&äë7­ $˛íŖtŲ …¯œėlíügđĪ&…Ē]‡ûYn”'23ŲtægsÜ6ŲúØ  –)›ĒŊíāøįėúģŽ…‡­ßÛ,H9C­ĀŨ"4äķFhę@ä@ä@ä@ä@ä@ä@ä@ä@ä@äŊ&ē\US孉Ũuė-‘& ŧ\õņÁĘMŽÉĸ6ģ•hÂԆˇļ‰Ŋ%2}‰×Û*"…i§xM3/?Ī9ŧ6õwvûK4˛ŨˆĒÍļzā%Īj/ļÁAG<øŠė;Q“@t3F&Ų„¨Ē…|¸DŪx4D˜\ĸåX&ø<-)jøO^x‰ˆNs™Á˙"wF›eųŅK:îÁžsYĸ‘”-6dO‘A"VLÆę$I†Cŧ|ÖĩD)i¯×§á¤}x1)Ô ëöā ŧWiĘēƒyZ”{´mė/QNLčŸXΘ”Ä@dÖÍæDëāí*ö—h$!wm‰°¨úcĘĒŊČ<'ɜ¨õM.Ǝ4œôHDáÕAčKxŖÚ‹~Eö˜ķEß.‰ôaÂŅõ™NĄ~PąM ēH4+J"Ű7P Z$šZĸ䈰ęŦ"ĸ‰ G4"Ė˙”D_Ņą%ē˜‹@d‰:FQė YŅäM ÂĀ3š#jgHô‡s"ģŦãåĀŧųfAžhdķEibtüw K$rŠy‹ZĸéĀ ŋŲDD‹—G‡4É)Ŧįad¯€Č§/ŽMʰôM˛Q›íbo‰4!†}ž?}a}GGĸ!ĮD}ßD°ąáCB^ĖÛÃ>\ė-ŅūD ōF ōF ōF ōF ōÆ;ėÂíߍÆx|§ąYOĸŪ2Å"gđ‚ä8hXÃi ŽÄcäķzîîMŲ?õbŪ”ę]tuģ[øûŖĩˆ"Žī—Z9ąÅŲ¸žb*Žü°Ôān|JŊõ’0ĀKFnĻöq8.áģč0yˇđ÷jl5)ꕹ}7ŠŗqDڎ˜aZ| DēF¤h E,UĒ€mÎė€+Äļ߈‡ ˙`Τ!e'˕eF7DąY"Joi:ÂNœŨ˛;p†]:ŠÄĄQčöņ°áīaÍf—‹aĸ̍ĩÉ\IÄn‰kD™Âņ Ųģ%ánáī§Ī§—U?ũÕDvˆbŗLDĮŌ,™D`?×ŅPÁaύŋ˙īģīhÚL§Õh ĸÚyh%Q‚=Ŗ¯ņeĸŽtCfo4ĘüģŒ Æ ).Ē<Dĩq*ė(Îö=6'úį›DąäįKDpäŲ!ŗkˆö36 nÕÚcØ!ŠE’7_5ŖŠčįņ8åųÉķDĮ@$רV.Ŋ›DĶ÷€xÆ9+q:W}‘D’]Ä9œÃ˙~€Į›%ĘÚō“W,Ј~ArũåÁŗXN€h‚C:u$ëå@ģÖkžgÆ Ģ?Íč] p—Ø€(K“ЍO$ËÆŊ'‘4ėɋ#Ŧ´CwōåĮ8vzIÔ‹“ƒƒ§ą@T`;Åļ`ė+Ū¨B|ĘēąÍāpēfôđ-„ļ‹MÆRSq™ĻvÄŅ1‡ũ‘Ôœö_¨9Q§/Ÿ}ĖxE4´DĪãh$O’öĀ6å"Æē9Å1N;°Dm3yėD“ĸ]ŽČי( ęeŽ ;ŽļŽâ D¯šļÆŲĩÆâøđyŌļD},ĒöM9ĸ‰â,3Ę F<öm€IuAtÂzŽČt3wZŗC“ß[Ĩ&ŽŲAI„ãô›Ņ¯NæDŧNô€[ˇ“Ø€¨[ą ĸ=gxÁ¯“šN,Q‰ž3?éĶ˙,Ž$C}yD8Ũč×Ī ™%ĸ^˙ũ#âô r{H”eîNvˆbĶĸ— ĸŧNdo!Ÿs<鏱 ŊD 2Š ĸ„͉ÜȖHâ^DÉĩˆëDX?"†Ī”%úÛ:ËßCĸ.Ÿš™í(Î#$úh~ŌĘ:‘@JŅûKK¤ŋS'"ä} ŌËDU#Jš)‡( Ņ'kˆ”ošžZ"ÂŌ Ŧjü} âKD_›ä˛"˛ˇŗDöŒöŠÎ‰ҊČTDėMw2[&’ī ŅŦF”šdŠD<Ë.m¯L;DqŒDMWh¨cqŒD#$:Įf’õv'$˛ų"ú”Kö)nxA”›Î…Í:3w+­ŅĄ#J1ˇ DÉoĘ|ŅSÅšž_#:v;Ķ~‡ŋĸ°šš,€ĀæLģĖ]g3ˇĪ°Ŗ8;ĸxAÔ'ņ/æDļĢtĄęˆ(c™bZE}dDqhbŌˆ~Ãz™ÔGŧ$ŠNˆEKDr×ļ›§XÃ[e4ų"š@j:›!ûžĪá'’Ļ=,Kú‘|jr:Iš°ļ<Æb,ŽâL[ŸžĻ8ę>^$Jąb)œĀd+CŲ)JŽM‹Įšü¨yHÉáøxBHē;ŅŌę´ŦƒW$}I/ä¤uĖRC.Oą‹Ŗ8ĮũQįΉŊÔ8Â˙qJSųŅąü°ņ/xëOm. cŨh5_‰§q˙ëzqö*ĩŨ æŧęrbuåŖˇŅ-/ŪaŧÁœĪVŧWɰw2€íâŨ æ\.sßëw9˜sŲ,`“[8ŊÛ ųŧšƒz#y#y#yc‰Îđˇë€ąĮDܜ¯ģ¯Éõ˜Ib#ž•ō Ÿ1Ä:šŸē‹į[Į;%*ķDĢŗĘF›ĩ„”FGŠÉúy~Ԅ'Xūkį¯^ė QúŖ‰‘‹ŅMÜ5ZbZĮÜŨŦCōks`yæĖĖķDën5D‘÷~:6¤1QÎģŖ"?9Œ"ČW’î¤5îˆhœĪof!ė¸T->’Ŧ|;ļ#xjBX9 ^ÂįcŦМ­)ŪL59!ŅfÍüVs:įˆ°Qĸę{’î¤5îöDšá0K ĸžŊ`ĘĻØp¤Fdķ* ˛W)‡šžĐęBrĄĄü6Ũäæ Ø•ˆéĖIjÚFRŊ?DŠgKDmÛP6_A4¯˜Se%K¯9ÉwŌÑoV€ÎKĸ79˙Eø|_Ōœļ'’|ŧDÛŖ+§+ˆÎsY"*Ė’Õv™‚ä||ķ.{Ģ"gH”\UD $úŋ÷‰hR# L¯ķdŠ;ĮíD ¯¯ˆ5=eēxžËVīa×#]&Ō Ü¯öˆˆaeĀ ĸ؞§n%ÂĄ3Üējš]Lö‡Q$‘ž9Ū"Z{všršwŽŠÄ6ųˇUDĩ@"Åp,åkzĘā­æˆm˛?AĸRŠÔļë‘ôn[˛&v@”˜–‰âFÎeđˆ°ĪŲ¯ŖiÎrã>÷mûũ5D?_G„-ˇē%/‚|”%LĨ|ŋˆ"“ëFÜ'æÅ dcŦœ\I?ŒÔŲöûƒ+ØŠ^ØČOLĒ›¤bxäįÔtVe1Ņ5ŊÍŽŊ4¨o ŧD9ŸåûE¤āĀWqJô‹.æDd*č“Hņ¸oÛīŽÔT|zH;ŗÔ4"l*đn.VSBžˇŲ­ņšxÃh‰R3ËŲžą\˛8͏)”*ĸ%ŅŠP,îģöûWŗļÜĪfR2lh‰“­&‚sŨˆHŸĀņ éO„D`5ûE¤ Eĸžĸö‚(ũĄl&đ6ŲöûƒŲTbÙėR*}p9lKÄ3Xq  ¤ClCĸ’k&đ\¯?Œ€ˆî$šä–(9}3'Ę˙@6-‰lûũ´a‰ēÅTÎôaĶԈV,õ.DĘ ÅC´d8÷Œ(sDG‡I¸ ú-ųŠAJ+p˛í÷ŗœQ‰Œū~I¤yŧŽH3Í7$j˜žxA”ė‘ˆV‰:‘mŋ?¸*āЊˆ$éųœHFu"ĖBVD˙%ŠJ"5ī§´–HmF4ÜåîŒÆ‡*ÆĄä&ķúc{ĸKSAέWeĮĒNdÛī—DÅ}ƒDŋW‘čĸÍî‡;…ũ‰DIÔÃüã^ĩDgXŅx“ČļßGôĶ!}b\ī›Ųŧ+×r ŋwD9C"jzr“yũą ĸÁ‚ˆUÅØąŽ°5IdŅČs:zõ'RũŠWDŖĩg4.7#M$øÄ@(”û%5Ln2¯?ļ'šÍ‰(ÖŌ ‘ĀĩŽd‰ģbGˆ&ĮˆūՍ°1ež’ –ŊQ¤$b5"•0Ũzã0vA”•ų"úŋBąN'cĶ–ÍäM™/˛í÷Fh8Đ`:)ųΚĖ]MįŊŨŽE2šmJ”Áî‹ĩŽ…+é?gĻĄáw’tëÃØA1‰‘(îaO['–hoįD#KtDō„IIĄŒ†ƒ PÎXU1I>…]lŖ’~Į¤P8Ž3“2Š'L͊pđŸ]Ä.jģšzõÅ avJE+"Į˜-ÆfEŠD8„ •šIEN S-šäã1Ĩ+–Û…-œŽŠ×žąä)‰tNĄ€&Č1‰%á0wëúÅŠûň(ÍuŖŅœpŦi’œž$# c+Cˆp 9(uH•æ  )iڅ}‹uVŲŋ›Õ:>hėāŒÖâ-3ō)íÛË=8…åNķ$U Â#‘Ir(î2“ˆ§ņ•á)m‹¸ų-NLštWŨĖÃĩ¨ŨŦz˙AcˇŦëWÄ.×~2—OēĢ>u×a÷ Åņn‰Ö7\\…0?[ŅUŸē받]j|Đx[D+÷V=ŽúÔáėAŖėéī­ũhåĻŌr6ļęSĮļYŗ‡Šī¯ũhåĻ–W>°Ģڊ…Ųŋ{0ŒØn‰~kíGįĢŪ,ˇ_­ū”ãŸŗ­Vh'ą[ĸ;ŪCŠÜy֜ĩÎđŋ˙Úė*v›Ũ1Į_æ ĸoĀcōíMėqsĐ}‰@ä@ä@ä@ä@äũ :ˇõíŊĢØžH,zZØQą°}ūmaKtq­ĒÎp9ĄEÉėĖ=°­Wæ!bí‹ĘόÆļˇÖ,o&8ž|ģŦQĖ]×õ„på×ų…ÍU„=bz[¯ĖCÄÚÅķjՒHRûâ0ŽuŨ˜Îŧ’\TæD īŖ @{PŦ_ģ ˛0–‰XT'ĸŽŅĩīt{Ņü@›™LSxs?GHĸFˆM15ÖkcĪŽ5‘˜ÄPŗ¯C_ī‚HŌōéJ"—\k6ŗD ĶäëDSƒ‡Yŧĩ°+b'DÕ)m%Q9›a5ĸ˛DėQ‡YOĮûP—ŋ"ŪŊÂKb’à ^_'Ę@î\GûpŅlEė‚H%’ϝiN^8<7’âû‚‘¨D­üsm„MI¤VŠÁûLY~L;-q|Äž¤FR|öĸ(ĮäZž¤ļ÷ Ūšb™(zÕš¸l›ļų˜^tT}cûCî]ė†h0Į4Nőb´g$Å÷á¤ßvD_7,šúšfΞū‡ņ_4ôęČŪŨÎüŖ÷š¨3ĸd ŽŽD‡qIôÂŨÉŠ$R_hÖLÆâŗ\(ˆ˛_Õ,߇6+bwDI‰’yZÔLJĸCwžŠč’ëbR“r¯°_‡3ŋØŦ1Ņ[Åķ3auĸ<šF4)‰Ė7ƒ(ÎK"uĐXœôMHF%‘‘Hd‘ GŦ$ ūM â‚n$Å÷¯éFE$,ŅĀMė­ø‘|ī‰(ũ˜f$Å÷¯™ĶŠčŸ-ҎK"lÆo‰†’Ŋ÷Dq[œŧ ­Ežh™(­ˆ>F"õƒ’×ĀĨä}&J,Q§#Ž›4OŒ¤X¸Lteō˛ĸmr=+*ĸ”›mzŠžŋDŌAäč˜JKÄn‰’HŲäzZ&׿ ĻsDú}&ĸ$ņúø@[ĸ#~H9"@–¨¨ˆžo%؍ęäŊ&ÂÜ5ĩD‰ôkvHķŠč§u"É˙‹vDįåδą›ZG zuP#RŽč4-‰đ> ‡X-5Ą8bē&1?c&~ 9 䓋ׯ°s9•Ž(}Y‚M!CáäĨäkũũn1rų"E¤æĻc:ú„ŋĪD}SdōŲ‡¤!Žž|x8ID95égÍ9QŌ‘°ŸAŽQ==ˆ;ņō3Ķ ČPcŽ‘TØCŠoŊ6ģšÔ‡Ö‹ŌH›pO ä(ÄķFëå͍Ŗõ(Æđ›~ÁŸ7ˆü<=$­OYįōęËX$Šŧ¯Uj‹E­_–§ ~uqčŊ'jŨ›¨ē8ôžVī΃Žŋ-ŒįęĪôÚã~Åîˆ4[œxÚāW{ĪûzŠą Ŋ˛'‡ ĪÅúĘvz3Ŧˆ]­OJÎnŸĩęHôž6{˜Grīã¤ŋˇ›Ųqė(Ĩ÷žõĖ=đ]ŦÆÎ#4äķÆ~­‰sû—-Ū¨Nö­Ģúũ1Vô#qŸ×?šŦ-vã.+{K¤ ‰Š}Bo–9/÷Ö¨^wŌššá&­2XZālūQzÖūąä/Š}Bo.ÖˆôŠn^vbyP˙Ď3-ĢNį­âæČVÅūņdLí3ļxsé@›Ô´mŨÄ´ū‰;įŌōÕtžģĩŠa‰LE´ˆå^Y“ų”‰Ž'öåġ-2)hīŅŊöŪrîģ"˛yķėÆHåÄī1‘ą­h—cšq[EdKxŲĘĻrâoŅōŠš"˛gŽėÆÕˉßsĸĮņ?û%%‚ĩÍë“Æ•95ŋm?;åF~Įđŋ‡ĪŖœöMž™Į‚ÜākŽM)^k;q D­#3ĩáųß),§MüŸãļŠƒŌÚlķ_Ōĩëą×D%ĶĄ͏’ļ:ųB|Ęē§ēyō46â°ÉMŅĪ^N‡JHĶ4Ũ´.5Ē€ÉˤPŸáÄG'ŸQ_qũôÆū\ž,&ú Ũ¤ĻČ:EŪ.ôįæ+Š7™–Į­Ī<î5Q܏!wØāī€v' }xÂM6R'OĮ㉔ú„CZbsn9…ÉĖx’ŋ€‰Ĩ:ūˆFˇSĄžĐO‹),į&g…üvm `Q°Å+˛įeė5͆Ņl fę˜ãVڅˇšœđ:ĄÃb*”>dļė‚?Ŋɤ:„‰gĒyTu ŠŽ4-ÆØ,&¸"^Ā[üö¸œŽīō8ˆŠYI4̈Œéc)ˆ#¯ˆ†Rņ¤;™Ēc$š\UDŦÎÔH„—9 )ķâąĩ"K4š b‰&&ąD´$jáےX"§ŪXĸŽ<æ]  ÍÄĖánVœ ‚D}Gķ‰= 3Q×XĸÉåEĸ.aW7ŠDØAKâÍV,QÅ$R–¨Ā ÍdI$€ˆO ¯@á<æˆ ŠˇŲŠ÷€HL—‰°{Éjĸŋ]&úg$ú/ŽčŸ5˙#ÔũķûC$/Žĩøj"ũeĸaꇎčcÍ~E‘ŒŅĮīҟ]#ĘŲj"5Y"Ԙ\Ģ?°D؀°H‘Ž,‘>zˆ:W–Hũš0˙P'’ÔuŽ@ÄYÍęD#Ŗ0šÆŅĮņŒ†ÉuG˜˙ §îŒ&qôÍķGN4sD‰0M$Žč55‰%š Ė‘ä‡Y"Å 3ąD ę!ŅO-ŅļD˛$úˆÎG–Ūã˙/ī=nĸÁĨ%Ō‰äeÖąg‰LI4¸i°ų—u—D™RH$@‰’Ņ@ō×H4)‰û%;{ÜD}—uÔT6—r×°™$ęųąT‡´Ė]OĒÜĩŨå-‘Šdķķ–sĸäīXīQåą%2TáÍžær×Ė  ŒÆōX4äoO ŒöÛėÚ|Q1SŒ}9‘DžŽŊ"Ë9Ã頍D¯59$Ø:ķqéØ$‘Eaû™nĀĻæú€wFŊ8ä&ũč¨IE"#I‰!d$íĀîđQÄTŊā§šj¨§I¯ƒcrũô틓†jÄf0Î_žæ}õ”N€P°ä1cEC}ĐPˈ'4Ė™éˆ§ņ ÅNuƒņRøüGųĶX1l­=0ũsŖX΍z“•¨?20qŦ_}@€fúôđÅQL>ŖsķËDŧÉ)9xÁqā˙žIŸ}°~āįũ%Ú*–ÚŪžmˇŦ@äoÛnYß"žfĸ ã@ôžnĒÍâ@´j`˙ģÄ{J„ˇõ­ĸŋvĒÍâ=%Ęk×|Vۈåņží2‘7‘7‘7‘7‘7‘7‘7‘7ŧDļĀžßcáaÃKdu–{d.7\Ä'g$­ŊŠĸšĒ"õ øŲÆkˇá%ęĩˆNĒVķgš&\ŧÆĻ,ÆLęíYsš($՞Ž[x–VāÍģžší;sËíZŧDŦՐņrˇÃeĸ‰`GZåUģÖKįt1m’ 6y’Ŧ#Ē߃NĖ—|^>ē7đRj-ÎOŨ*ŋŠ/Ä1œ•¯ōÅÛėÖ>ā>"ÍICDUõ‹ģØ´| MŗëŲī˜E§ŒØŦ"Ō ‡›[ڋpâ5ŨŽë$^ÍSušqk$ųr+NēxęÚ 'õbžũiį}k~R­ėŅŖ• IDATP1MšĢ×ÃG¤8›ûÕũđV]lĒÍ+˛t\kFž ’8ļã2QŽéŧŪŽ=˙ǚGR÷čvĢ|™HŅÅsK¤’hņŽëm4ī4ÔŦVļ'˜"‡ÜŦ /‘áĶá¨Ē!o¯˜âB°s|ėD*Šíj5"Üũ—‰2˜pq-E}/ęÍįĄå7p÷ˇˇ4 ­¯8Fˇž{ Ėī~8Ga)ÕWj9|DR›éų¤úîhÅsĸZŠD‹|‚HÜ$ęĀ„97+âM}ëčõgŅb5āN—^šÛˆæTš}DĩY¯‡h‚ŋæ¤:lV]˛Ŧ͡UŌ•D#ėîŗL„–yũyŧ5".™$×vĮzl@4†l‘#ŌējÁŌ×Ņ?’ÃĶžØĄÂāíVn̐OåķÄíkˆ~ÎŽ/cx7ĸ1n,­ŋÄØ€HŅėzœzøˆFŽČĨĶú3#~?={#ŠÎ ūŗ Ž`ų1m@š¯Ķ$ëŠĪŽ #`]ŗnšžÆu>ÕOcõ§,0EU'¯˜¤Šā?ŕÄäöįtÅ/oŊūėQ†¯hũ卅Ŧ&’F˛Ë•Ũ"ËØ€($G¤løA3ˇ>kņ¯āŸ}[0qL˙ĸŅ—JđNG|úÉÄu:yë3\įSŧŗ´=kÁx–Š“—´Č„:˛Ã`ã_ŅUߜ܍¨cRÕ_blH$čDfƒ˛r`02Öf˛É0D­~_ĀĮÉ@|ü{Â%ƒüĩÆųTĮ‘°)96Ģ“$*ĸU]TtŖĀÃÍOųŋĶļ$8„øg1vü7I[Ŋæ‚égüûĩÍOÁáŖl×#8š˙”mRxŋ[¤÷˙%uĸY Ō€™9…ōĀŋԐLÃÛpĸč–ë$>ĸ5ĘĖ$īū†u‡Šų§Ã9ŅiŅ'–¨ų§s"7.čŠNÚŖ9Qí\ą 6wuDle/žî¯ú Ŗ?ĄOž0t:ėø´9ÅvûÃç6Ô§4ëJqt€}„ž/Š=Đl×#9™˛Ô4Ų+ Ę5S=‹T‘ˇŗb6VGL7,”MģŗŅlėˆÛuŠázØD×™9QÛôá‰øGãŊN$M¨ˇ RuD8`¸Ī“ū ečx,ūø/ž7Ãn@Ŋö :LzŲ-|Žt’X"Ûõh*aĻ žā° D˛üņéHN厺ņt*!+}rÂh˙€Ãb2Â ˆČ-m@ԃ]ÖM%×%j’äQ"Np(^;`ąŅIŋFÔ¯f,‹Ŋ(Ö|åŊTģ86×4ĀÂtĻRBZÄđûOhQ`“Fœ –å’kėWß@‘H4š#ĸ€ œŲp<™ĀNŁh Y‘ÅxŠ­d9áŖíˆ/‰Káôíˆx•VVD2ڄh`‰ä‚¨ŖųĘFt%ëdŽ2gS9[uX1^I4ÆÆÆ™œéC$‚ŧoId˛Ūx2E"Ûˆ†“’ČlIÄāTáˆÆŠæŦĩ–¨áˆRrҎoŠ•å$ļ&Ëāļ" Ę i’XĸŋbŖ’HQ+2™:„™°sŒBĸcKdˆ§ $ĸŽČdCŧO™%ĘŲ–DĒ$Ę IĘēņ*"EĘŊČæŽ×ŠÜ$"ĢĘ5H4ÁssÛghŗø˜Ī§˜"Ņ×l’9ĸ LUÁ23m‰&˜ čĒ$‚Ôđk81Īcލcoe‰äVDzA4ԉŠíf+‰ y='JVÁjˊ%"Č:vfĢÛnė€čߐčŅßJ“rKdŽH˙ņ‚HmGÄD°E‘‚ũ|Dėŋŗ7ËDéœH]'J+ĸé*ĸ•̎ĸŪĀˆôw¤ų'æˆZ'–Hfģ$*Īh]ŸũŖIē‚!ŅĪŲp‰čBŧæ6-2BÅfėˆ:Ž(wŖîà Í%uĸÉĸpĮD˜\ëßąD Ōĸ¯Š#Ę-Ņ´F¤ˇ"R ĸžéœũ Rë7ōEô_éųŅTžūæ‹rķŲIl†._•Dü3ŽDÚugQNåĢëÔēvĀp›\›3Úšĸ‘ųˆčÅ5"a~6'ę\UDđeĮ@d~×Í0šN‰ä%g3ĐÛXÅ3+ Ô´{ŋâŨƒdžģ~Uũ™%jæ<2Ô5‘8üėΌWE=w=Ÿ SŦŽSŗÛÎ4Ŗé×H4ļDŋ “AEt¸ šÁfÂLđî/-ŅoYĸ‰#R#ÍŽ´#ʲŽ(KtĄˇ8鏀~gGÄLģûkÖëv°O eM>Aĸ‰ cšhäŧĨckD$?ĸpÄOG6_”'<œâō;ãĩD’s$‚:¸"Ąv!zc‰ētZIž8é.áX:Á™$˙K/ˆ:Ŗ+$2Ņājte‰úÛIsšš‚3œĄO;ŋ ,nEō˜ĩxËåųr*ŸÅ Ķ iAÎd”ķœxztīDđ™$/i9š'ĪirŠW@č`õ T¸íMŽŠ <Đ>fÅæc—uėŅbT5‘HXĸ~áōī@D›–¨ŗ äųĸ9Q:Ë'ļ’Ē- 8Ęræ*œdŦÉ̃ü¸‘’üŖd|ö@#Žä|Bū—H1ÁŌD'°ļVŠŊ|E>ū€čX`Ũ{ĘäįųĶ'‘¤ú[ō ŽņŦ ŦÂĘĄĖžÄÃágéeđ@ķˆ$ö•1-j‰Xw,¤%R!?ãęGļëŅDáLGŠŋZ Če#ŋ­â‡/hĐÉ#(âc16ũŪVD6–ëä ˙ė™íúüŊŪzņ 7ú9  žä&Vv‚ŧĢ-F†âÉæ´ásš¤9W‰íz$ŋ€™RqBô“$îãΈ>áí\ÆōƒDōFԆ‚§"–1Á˛ˇŠ )¯qŅĨ7Ī—ĮßĩKŨŊŪJ4ĀÍ~ ĢØ‘J‡‡ F„ũ‚Ø)ėĻę[ō|ہ=r$¸~aģAîųĨĨ<>o6õiŋĘHzHõss•š'ĸ! (ŠPØBŌØĒJ­ŧ˖Ū<Ģôv{ԈØmŽ‹yå JžzĻsĪ|åN°ŋņ°ą›-^1Ī#?Ŋú[ú¨ūĒ>ÔĘĸΌæ9ŸˆÛR‰í‰¤%ĸæ!o@]?2ܜ{ŅPÆf´ü>^zÅę¯ĒFØĘ´øH.Y^‹ŠøA‰ęaˇ­{ŗ‚§ûëØ´—¯õ,vė3ŗŽHęĪx_sŗ6v@ģ÷ ¯›2ī¤;‰uD=ÃŋĨtwĸ™@tÂÍÚØÁ š‘Č^ŋI×CFIt#Ĩļ+åRvAÄĖ:ĸ Ĩ×úë.ĮވZė-]ĪĖÃÖbw…Ĩ ėĸ—%3ëˆ KtKw´åÉ[&ēŪLÁŅ5D6ŧ…čõ-—ŅvF$ã]I*éU_đßĐĢ΅ø}Éō?ą'û o¤ķeŌâ&˙“œG}ķ§*Qö„ÃfšđėūA~Äūåŗ(7öCKjô+†—F~zī,úĖ č?™UÍwĘØ‘Ū9ҏSd}’˛ĮũãŦ;îŲûéŅŠ>Š˙:†g]ÚĨƒ‰øŖé`:tDÄMģFɓæGĮüĖ~ˆMõ~i;Ņŧü8žeķ>3Ž(~D&Ú5Q7âčāEÔœ !z=#!‘Î&Jņöˆz=Ö-&ę?eÅxŒ1,ĻÔ {rĖģĖ~¨Ūs…Æø4‰“ņŧĪ Ū‹įÉ-­vEtaÚģ&ę ēv€īÎ; žéeôÜ`Ka$ ĸ˙ ņ#€ü},_Qė{^āøā@”`ƒHûĄf]lyÜqO‹I1ī3ÁE´˛{}ģ!š^˜ÁމXÖŗDŨŅˆ ™’Hę’Hs$âŊĸ"jΉ° .E"ûĄf=$,ˆĒ>3–H6šHōéôˆ –hDmCb,U-Ŋ,‘iEŽč0ą#sD†Ú5Ŗ‰ėĶnaŠyŸGDž¨˜íœ֞Ę9Q geėĖ>Ē*^îŽf‰¨ƒį1K¤Šũˆ$ĻŲö) æ}f,QņĀD°OŗņĖd;.€,匚”ķˇuĸôx5‘ūcŖ#G4[MôíEŸ$¤ĢģÄšØE1VŅŽëēËX& Å&;ú;–č„[ĸüÅj" ŲB∊•Dę‹>3H”åMd•‡tĮ%ũe"SėÁĨÜ­$’ĪVፗĶcK4\I4+}f¨ķĀD&Â!Đâ;ŽRƒ¤­FdĸäRĮff‰4v "ũÄ%ĻsU'‘hZĸĩVDöiˇ˜‹>3–H<8ŅŌãŽBĶËÄMčlLa3&–ģį"˙K戎:3K¤Q–™Kåˆ(ĩj– ŅØ>…y‹yŸ™ˇBTĨAģŽŪO.ēŗQŅšāYI¤MIô5#QįrpYҊHWDöCpAw˙ž’Čõ™y+DUCĘ]_$ŠÆ.w 9=ČįíŒUDĒ$b_ÛÜ5?ö [ŅT‚ÍæDöÃ2w=tO‘ë3c aē÷īā°AP÷°ëK­$›ÚČs×ã4ą÷Ķąg4ŽDg†ĄxŅWP ÍmŊ01) dŠÁŽ_!Ņsj?ÔßĪϘÅļ÷īéŖÁŧΌ-Æ&Ļ{ēvEv@T–7č­p§HéhŒDínnڝaNŧŸ3í\ÖäÜ$ŊNO|ôŠå Ū—‡é†yÆåŸyŦ?ø0‘ė4˛ęx4†ß’áS /_W}f€(§ŖÂ$JT6 Ųuŗ(ĐôåĶø¯YzH~ ‰ĖkfÔ+ŖIĢIž7ˆ0æ5Ëšü‘ ėÃrÂúf"™…š<5ĪU”GƒŽũĐ$’â} āŠ|Ō ōķyŸ8ņ“˛tũũģh<ãĒņĖÍj EV4Ŗ-Ī“ģŪĨŦāĨë“ŌŨ5Á:Û~I+ã&ŅÕĘn?Ôū-îJä’PÍ”čōŨ$ē\yP÷ėßņ杜\8Í×'Ĩûßô&Ņt%‘›.Ûŧ““ —S|}Rú8‰VĨ{åČĨw͞•#ŽŨ’”>F"ąō’ŽÛ zˇ4Ã_îœŨ’”î?ŅÍŗ—\Ų{Ų%&ėÎËg‹™WĮŪŠ›Ãmę•7 ´g }÷/8Į?ˇu•Ú{ĸcōŊ÷ˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧˆŧņˆ‰ÎņĪŲÃĪžŲ*ŽåÂ)VšÃ˙gĘHV¯æŅ‹âhnë7ĘWĶĨ‡ų¨e…ō9~ŋeöČ^\Sr;ØēæÂKŨMĨ™ˇęü 7BUC–æߎb_́įbûŖ Zž 5IŠ;Sj˛NŊĸ[—O›@$šĢ‰Ē (7„´Dĸ5÷ŗqąīDv/Yn.€Å‰˜N§~ X.Ē(š™iļ|´Ō\Ū‹ ?îŊˆÛŋsĸyĸD™¨ÔtuŊQŲĄaŠN÷ŧzRWDÆ­¯T{ŧDS8°âAũ‚Į7’¨ŧ(6'šƒP†^¨DŊ>YyUÅÆūeŨIKÄŗŅ,"×HšĻúčSķj™hÜ͝#UČëN‡Ø ÷ĸS؋:Ū:*Ę[f‰Ô‘Ä[EũSC`=jočcĖAŠŊĄĪã&šX"XõAE4đ ˆdE”F&ągøˆFŌtģ¸Ĩx—‹ëD‰Œ#R'%‘-āŊDߎˆž]ũ[E$ڎHá^ôˇˇũÛҁyŋˆ°ßOÕČũ¸"2%Ņˆđ–:ë‰~\'â/Lh0}ėDŗ*-‚'Žhž\Û€h DxKõDÍ%ĸgĻNTd§Ÿ$Q_55…‹ąŊhŲúŧ ŪęčA{=P6‰õQT~žŌ˛bĨôų+[Ė 1ĩYkÁGŲ?QõĘD o¸SÖĩ>yŌoōžDäŗ’įŦCx$ŸDö^›HÔą7ô1ō’“×Oã-ēėŲk—g;ŲčģÆíËĘCVõ˙ŗ÷6?’#؁'==UL@5ɘÎÁF…%P‡š­JĐAŲčˇlčPĮũPõöanģ‘ĐĄĸ —›G9Fėŝ›€­Mc- t¸‹BŗBņĒCĸƒŪÄYlŖÃØæfûž‘t'=ü3Â33"3^UzøI'n4{öė}l*M[~lŅUoVäĸiû^p@ĩ,ØęÄŧ}>W"]ŲÎÆäš—Õˆ ģjeŪŋ ĸŗēu÷ĒlP*EVÁœ Ŧđ:ŸųĸfĖÆ peQˆĪšĄ‹wŲ•íSķ°yĒĢ+‡ųí5ÎĶÕ>˙ܑÕébčĖ!RXų4^‚ˆD˜g˛Žčęúđ$ÁųÖVˆŠO+Ë˙vˆN¯ü›!2%QËĶ‘NqŦæ%ķĖ™.ŧŅTáē6o´Ģ­h’c+ÚęF+āTC[!ēđ/ũÕ1l˙úyXž4zĩ¨ˆ‰SĒ~ĖËš_¨ŧ˛pQ ĒĮüdŗÕŅÆ›ĢÎĖ<Î/Ôo$sĩ!]ąxŗR6(!÷7ay:ĒŊ‘Āžę Z]+§øé+į™…•—É܍>\XC{*"Ėhygˆæã’ˆ&se "ʋÃÕ]ƒ˛ŲōLút劝āÃių=[éwsĨ|ųŠ\szŖr–rZHîĮˆhūJ;Ÿ!Ęj Ãfŗãĸ¤@T3›- o,§øp˛åNא ũžVˆž@Dķj¨Ē*Dãšņn!ĸ @TŗŲō­“õĨuõqËëV‡ŒrÚg'œōY¸­ ē=ą>‡‰Q{HeŪMđģN ú’čYü‚„’(\rVŽÂũî!ƒîĀŌļ ÎíÖ0ë;f™ŗ7s™7‘ ÁˆV":ĸ4„Ų$œˆN“´u‰>uķHrsÃĀö/Å3bgZ8IŨp͒sđF{A# “Ŧ<Ā sXff9îĄuâļÉú2ߕã\ČE‰įûSD0]N2ŅŨˇĶ4Ck0‰@MūJ9Ž›k!)lę…!Ž5;í ĪŧˆhŸøž'ņé(>bķ˜äŪǤĘīJÖ‹7ˆLŸ¯ē„â‚Ĩ.õfã‘Å\+vŖ$/áR=l=čs› 9õƒ0+l[ifō.JF¨§Ã\† 4ІĻõĄ­ŒŊą+Ŋļl…¨įP ˆ:ĖĢ;Rôi‚ Ąa”¤Ļų%ĸđ\įˆ”gˆt‘6ˆØ Ņ›ēÎČˆP DĖîĐ1"RVM•ˆQŋšÁ›€Ú@‚Ô B•<ÔĸaĢD´cĢ@$1Pˆŧ‘‹ŧ™l‡hĐĄYĸ°„{ma#"/„vQ  Ü´Lyį+DDÅTÁÂDWˆ’Qī:•ß´ė‘Z€čWd|f {ˆčĶąåžbīNļC4Z„Hˇ¯"zŠŲË"ƒ(ŪĮņũ§›!ęŗ_áe;DņDįzp‘ÂÄc@4I6CĶųx÷˛"^ ĸŠĖĻéį:(š—A…H"qjŠ ^ĸ@UˆāáXÍ#dé™ÔŠ&´hŨ˜´Í՜9­\Û/ŅH°yú•í‰1ˆūĖÔĸŧ@ä‡î$Ш9B ƒČ×cøÃū†\„I‰HNĨ€H•ˆh…č¯W¤;ŽŠÅVÉ"_Pƒ`Ō0„ßZķlŒ[nn`Ú%9 úäĖ™ũĻ“ ƒ‹ąÂKõ&%"Z ķ Ņø˛Ō‹ā!WĨ^DĶ QĶNиÂZ“(5Ŧ<ŧ4”Õ å ‚T¨cD´ųØšÁŜ“‚ßĩëŽŲ3íz އŖ$îf…vmÁ‰āØOÃvZ!ŠaC× ˛ĄįâGĸŠę¸QÃŊžÖN­: ]úŖĪŪ˛™­HՊ2ŧŅv׊ÆĶÃ#"¸Ė4ųĩHŸL›š`Ūx$@CŽmŪĘNõ'!ĖÍ Dĸ ÚuÔwÂqĄņļ€?ų{ĐáQĢ@ĶēŦX@î2ēč$PØ Q™^&iž4t.ëˆæŦ+D_”ˆđ!Ü8‘ĪfˆŠ– ×Lƒ(î’>ÎfúĐ?q\+š#ÚĐØÛãTËGûāßJÖŋƒ~ î÷ váCôĄųģKm#aį9åĐūkYĆ{8FMāb D÷b÷3ÍbÚ1iV5Z&,5ęÍŌ}_A´$¯ŲĻšh÷a0t“xēŠįņ3‹ °ŸÛš†ŋ§‰æ/>sr/S_‰gĮęeqŖ=#ÕIˆĩŠõRŋ"¯˜ÎŊ¯[ęo´>ƒ—YĖ^ĩū×fUŖe˛vÁšâã&ų$¯|Į˙Ŋx;ƒcĄPjņ>õÂ(BDƒ+Ѓö CͰˆäží&Q&Ĩz”ɯ DŽãû:Ålę”ā{„ąžˆčŽĒaĨd4sU–ÉnzŖū#ģ‚hÉ'[,EAC@ÄüĀMwmĘęh⚆=‚™ŌI˜„Ų.?CCgáŊ‡ÍsŦU”Ā{ė14!zl#"Ձ—ˆČ ŅÚ¨j´L6pžŅõütū›™Įm. kÍM4Ö(BĶpC¤1á< ’zŋD4Š#­@T¯j´L6sÁ:]IĒŦFV/¯åHDĶ[#ĸ~zZĮË‘YŊED Ÿs Ą-Ø úÆrô¨@¤…ÔŌ"hwŠXuDĒFËäö:ōĩáS°™ũ "#Ī3^ũfõÖ r3Ŧ<á|°@Dqí˛@ÄE1Ū¸ĖP b熍QÕh™Ü^wĐūjD“‘úŧDôĢ"N Dŋ*ŠĪ— jT5Z&ˇŅđ`%ĸ¤D$ÂŅĶ"\q@DO D"œGD|ƒ¨QÕh™Ü^D|o%ĸ¨D”—ˆÔQ ‘jDę¨@”Ī#b%ĸFUŖer{ɏ DD;"÷rŠˆjŋD”Bw­#Ú´ģFŖņq1ĸ Á$=Ķi ŧ„Õ=ōLō8Ā8Ōqx9äėøČ†ąüO` õw”˙´đęDdũ×íÂRY|Q%;(­ûũž†“4¯Û ü>Š Ą_uŸ8YŦžŌû&Áĩ}Ë<´¸Ė"šŒ@â …WŋöWč¸Ķ¯Û‰;ä6ƒ7Gī†y.(Á xč7ĸˆO„ĻÔv.1ũ&ãŸk´ĩģĮBöz=ęû0ķŌ™PŽã•^ũš¨Õ‘aīFvЊ:Ä#aŠ%Ü Ī‘‡Č…b&™b"ģ¸ÖLėgö;4ŖLRŖLáwRzõK[/¯ģųîd5Ŧ"mũįQ„ˆ°‡5žz€ˆÁô)@äWˆhéÕĪÛkߍė‘§I8l•ˆ°Xļüc!-ƒˆ[ˆ“ĮiŒÆ.ÉĸÂĢæjõ8ėÛ";A¤āŽŌ%ĸ˜Ą~¤ˆ@īŗĐŒûˆËOkĖB˜Ą“žęPMJDßĐŌŲnŗ÷Ҥ†ĮíĨˆ~_ b­ÅˆÆyéŧmŲ ĸ¤†HØFËv"úe‰¨ß[ˆ({E5D8n“eˆ^•ˆâ·†Č'a JDh(s.”+$=CD\7CÔ)‰ũ9¯!*ŧúßcD> ],‚Bčä2Dи\@ô†E?ēŒ-šēwMv€hˇ‡Â] į> R\ĘHųé3ĮuZĘ`ō8œ[<°­gōáĮž=¤Ã'L tķī?C¯~­l2ĒŲΈ֋5IY[eŠbD Ą ̞Hãj…ÃmüŅe¸ŅÕŊk˛D?ց7V$~âŽY˙ĻÄcĮÃ:–ZâGp6ƒ´ á$]2:ÍÔ'—CípÍŋ„$ļã3ôę×ē¯ãŲš/߅ˆ&5Ķ|Õ ™ß ĶJMgÅÁq•į " 7ZáQŦwĶmˇũĻkD/šŅōÚĻËĖäĘfaíģŌŠW˙•̈́]Ũģ&ˇŅBÉk}újDįæģNõ\āC›āzČŌīBšƒˆ’EΝn}hîųÕ­Ņ@lžË×ķˆęšĶLR”Ĩ߅ōömēj"ǟr‚Ģ4Kŋ å­#’šá†dŲ›#2æŒ>ĐDT(\ĪZú](7GtÕ'}ĨČ?ÛpÃ=ĸ…KHp|ūĮ‚Ā[mÉŋŖ–ĨĨc_ēąæ?… i,WÄúÜUWŖāâ˛#ÂNI=ßw.ą>;ˇ•Ý3é(TԆÚ" jė‘D­—x;/}ĩéæOėI:ĪHdáÚÄ%–CyF`úwd;áČ~ÅBPJĢ0!ũm÷ɃīéÃļä΁ölŧŅ,SŋHŲčûÛõģ|œČŽ“%1.íSsŖ=qnIôîÄä9.!ųŽ:aŒF&ˉ’y!˙œRķŽ–aBzŸ=<úÔŖŖņKKëõLũĸĐÅü€zŖąČa÷4úmbŲîM"‰Ū™ĀŦĒx>\Ģw†+JšøŠ4AČRR@„K,˜#Ŋ Bë`Ė“'ĸĢ:Ôtײw€  "Ķht*û(ZLMwŪ$Læ ˆHˆëø¸\’Š´@T\* ĸ%ĸIˆˆ2ŲÅĨ–•ˆĸ‘žãˆĖ“A4И7*5Õ†Ļˆ¤eUaBZ!"mY"&¯ 2Žéž@oĄŨŅM"‰Ū™ĖØÃ ĸ!Ha+|Ė1e•aBZ""U ‚[¨D$Ž"#"Y KDw2ĀĄŽ(ĻËUaBú÷¸ŅdŅŋ\Eô_o "ļEú›…R!r"Œ¯n"ęąĸ*LH˙%€ˆK1Côķ+ˆÔŸŧ{D迍.f)… 9Ũō("ƒ‡í"YGT… éWˆ(2–ßĸĢŨĩĖŪ6"Ū6\+v”-ô%Lfé{3ÊĖD‹…dfáÉ }xŅFDA…Hf—J‡ˆĒ0!ŨAD> ’_ öēŅēWM!zŖ‘D ĘqŨ%Ž  p>]NN<ēČ.¸FHnž0\§ 6Ą˛_¯ąė-ŗt×t ĪOo‚Ų.°Ú^)VĖųõbD—đkũũDĄ,TĮ¨DôF#‰ ĸšĖØĖ쇨MsĶ€I‰H™\ĸdËã’4.´kéÂQģŽģIŠ]ˆ┈pdŸ!šhšß!kÍi×o4’Č ą%SĐsDküuü)ĸĩĢ „DŧmF4KL¸öÄ[XmG4Ļ];ĶuĄŨVaBj=ÆM+‹áZCøRvŸŗO DcXŌD˜VŽšÚÅ ßh$ŅQ`™<ķŋ2ŠŊW"2ŖËֈ<_ØŧGŒŌwŖ1f¯o‹¯q~dŅ዆‡ū3= Ō>r8;ncn1K[?†ÍEīĄ=ä –¤Œˆė`,ž86ĪENÎĄ#ė&÷FD īŽYø}öĪ&M|x#D1SdøôaģßŌú;"ÚQ #~Øļ^ėYÎøtHĮ:>›… iw¯“ĀŗúG ôč:¯á3ōš°˛úŸŲÁI˙œ[Vŋû\íĩ¤?qJ{‘ČšUFΚ›ËŽi‹Í/jˆø¤B„Öčk0,žÄ,Ęx‘đŨš/v…hHkˆÎ‘2ˆĐhŠˆ`.í!Å9閂N7ķ_š:šHî6ØfWˆx Q–ÖũU…hBÆg›œŨ6Ų"Ajˆbëã)"ų—ĸ„d‘¸õÖȎHRz~]Aô§h•ADáŅ­ 8[#ģ@¤˜>QuDēvŖŠ?3s4@äq:Ëđpwd?fmöQáš)Œû4"2zQĒūŖAã4!Â?O˜qdˆ$Ķ‘ATLcubIƒ(TŽ–Ô+ŅĶ-˛,ÜŲ"Wę4RÔëķĸ$aŠ+‰Äž4‚÷€H0@$i”m=yį˛DƒLd×Q€ˆœ‘dbų8Đ#hĸ0Öđ–ÉÅmŒ8Üoōsfûˆ(3%Ų Åų’‡3û¸­X~ˆ„ŖSPh}8VŠqą}\ !ŌŅf1á:šÍOą×ÎyŖ-ĸĢÜ'ŗ77-pģäM!ōte†<™Ŋy DéÕũ(ÍJŋā+4“ĩÕž¯áĀØŦ~^n°É)ŧ)DhĐņÍ3:{ķyĻëjd[Á•oˇĒŽÁHĸ‘Ŧ­nɧī[V{‘ąvŖ€î7…hļæQ;‹åëæKÅ j”žPčŪYG7’ĩÕxĶ)âūÃ"“˙;E„v0ŠO~W;‹%ŠæW‰šŅš~jÖVŠÃâ&š%hmįŠq’ēųĸVôNo´ŧ #¨ˇ€íį°æ3DŦüÛŦĮTGÔ('3ی-BtēŲ9ŧ)D“ę'ĒÛˇˇ„0ķø~"RUPf]UÜz°ŧDķå*D“eˆ.Ž"ō7;‰ÛëȇRƗˆæËUˆ˛Åˆ` ŧŠˆlvˇ×ĨqDķå*DãÍmę7w{qzpį\Ųø~į ´ÍÎ~KOFxí끿NûBūáĨˆĩ‡Jb[ŋ&͊;˙Ū¨°¨ Åé ]ũƒá'‡úˇÔVPĻ~Sú°ÛJršjeæö" ŊŦ/{öd< …V>jŠ—’EGŸŅoY¨ãî¨@a;KŽEŸzy¤å‘|âĖ*î`­žPŊÔôæęŸŲ“TË/:r‘•Šß†üEĮÉōh´ ÃíEä‡ũÃ.V2ÉR\žrų•dž˙u‡î"Ų• >FIžgĸKŧ4ÕÉlwVqkõ„°K¯cĒĢģzä9&~ûú‡“ɤLũ&ä>qō4åGlų‰Ü^D$áĨ<Ã˛fčžw$õ\E÷iˆ…Ä ĸä̰{Q‚5 gw°VOģ¨=Ķ;A_”¤š­\hD—e^3! Š0+øōšŊˆ(œø ŖŦ‰ČĢ™Ŧá  ÚADyF†h@4Q DĖņ‘Ž!ōŌģŠŗ¯)D¤u‰.¨g9€HD†$?‰ DũļN)w "kÁÕĸa ũ?ŊØâŦLũ†ˆÜ´ßžĢˆLŊtĢJD\ö¨D˜ūTvŅā{’p ˆ<ĪÃYa…ˆĸ`ˆgĨƀˆŠęO^ĸ)3R!ĸđĖĶwҧ%ĸ_•ˆ~ˆzčŽCá,DÄIčW Iģ†(ˆQwš›Ā@$Z"zZ"ú%"bpæKd{!"aˆž.D¤Z5DÉéŨG4)û"uT"ze ™ū–čÖBDĒmŠŖ…ˆtŋ†hėßuDŽÎĢ ēkrˆ:§ú—Āehš—5DĻâN1ĸ ŗ–S] ”A4Ö,ūs5E”¸—w´/"€ô"W%%"ˆROu ĸŋ’č§›œņ +ˏ=ž!Š;‘D˙Ė|]"m“ųŪX})ū\NqęNî&"Ėž†ˆ‚Ë"æœMē"‘ĄepĄ3]éEĻâN‰H°ŋ§'ē@4ž4ˆ¸:—?šœ"4¸¸Ģˆ@ĄDÃI‘íUˆ°ĀįX')"ĸŪ¨Ž]›Š;"r°OũQŒĒ#ņøQ.ŋ˜ŠŽ‚î¨ę¨Ŋ”KųeˇĮĨ^$å—}ˆöŠ ƒ†“$¸XæÅļÆÔČáŦâÖę aĢg1§@ÄۘøÍ­Lō"õ"’,ļī(ĸ â/Ĩ3ā6vČLwũhĪR[’X6æy äŖqË.šI´<Ў;̏ƒĩzōŅž—č ĨÄ 0úrŲ˛Í'eę7Ū튚ÃW-…Ü^D 7ÛjߒDŧÕ˛^töz„̎]¸îøŅôkũ/vŸļĨ‰riË­YÅ~ī[=†q>ĖBÖa×ōĮĒĨķv™úmøä‘Ķáá3˛üDn/ĸ͓Am!Ģn¨erh­Ü#Z+÷ˆÖĘ=ĸĩrh­ÜfDo âŖ‰ßŒÜfD}ēķCn™øÍČmFtKäŅZšG´Vî­•{DkåŅZšG´Vî­•{DkåŅZšG´Vî­•[Œh–NĨrOV…ãõé܆sĪķfYp™°îhI +˙rļčS”[Œh?TÕ~á&8æŠ3pۜžįB\uXcQt÷tučŸč˛ķ¸ ˆT14ˆ™Û0mēT_AdНĸE9ĻIL^Ņeįq‹Íî–ĘÅ\7™Ûp0däʍ†ąFxŖ-˛bN͐>]vˇQ- qЍøCfŸœÔ?^,LOʘĒĸ2( Rķ“Q…æŊCTģ{–#ĸõŠZ‚¨,jˆäüAįäö"ĒõÁK11+É%ˆ’éĮbî ķr{ÕFōĨˆŠŲ•ˆÄDeœ âs—[‹Hĩ.a”~Mp­(?đD>Õė˜ 5áTü@ūĮZ|d.˙Æĸ HGvɅĢ‚ŅEúápëß~æœõ-xqÆY†ÉšõO4•ŗū Îūš‡)aâ§ûÎŋ=]âÖ"ŌŪą:čbØīi˜„čîšÅqī€P‚õwō(Ä4ŋn2˛áŖÉ8Kø‹Īœ¤ÅŒŅEü}Ղ];ēN&ŲĢ='5Ĩ|ūc-ŸĀ‹„ËÉĶ­ˆ÷Ĩ'r‹aæfKÉĐ0M194\U¯×íQâÃđV„Éū9 J˛4“ûļkÅō0ēHîJpׯöņBSm%“¤ĩí†~"${x”›žˆxŖ;ŠČ$øÖX &<Į”āĄ]ÖU„$<īŦ@dŠÅņĐ+ŒaŽ‚ŅEđœb)VâJƒˆ9^X‚Bŋ†čõÆ,,cwą/D“"Sp'BDE ÖDÚ ĘQ”EQ"ē Ŗ‹$ÛĮTíņ ĸ.P0ˆpĢ"2EŪQD™vˆÉŽLÁDD&X|h<Ōũö ŽH{DŒ.*é)"Đ!n…Ô"}÷™R2Š„1ÃøXOȞ!ĸ,f&I˜"rŠˆĶ ‘*áX3ˇ2ˆœŅøũ@4!!'%"Ö*qâaéň„S!šÔI¯†H–­čŋžˆ ģBÔi ÛÃŌ‹I ÁÛĮĘI QVG”ˆ°öÎÍ‹ßĸÜ?oZψ"Ēv…(ūƒHĩ=-í%ˆt G4DÕĨuDiHî¤/2tōīMe„ŽMū' œbųˇm#SD><WˆÄƒHģ—ē=Cä6 –°ņ+DL{QQT šė‘ĪŠ>­LTåėÛ1evĒ]÷Xâh˛Oá…5t îĀėĸË, ­ķØöR­~ ĸ¸LĖ1ēG4ģzōKœ€XÔsQ/­‘ë$ß2^töØš"Mƒ”T9ãÅDÔ¯‰Žcęˆ:0ÂôĩT6p‹Ū€M)ĮąÚ7•…ŽÛƒ ł;ņŖįžĨœ Rî¸0ĩãg_āYq›įˆ(N5ŅE}ėÛļtėą ŗ‡ĮĐÆyŽ>ŗŽ /ē;âÉsĒéVTü]‡Hh†SĖFĢŗ$í ‚L%áŧŽP,@äéw‹čŦöm¸=ģN–¤ëČˆĘÆŨDäWOŌę8ĶŨį|ÉŌŦv˛ôDn¯#ßˆĘ šˆČėõ?ĸ†­/ĖjG!z™Ü^wĐ • - Dŗābˇ:Ît÷f-ífĩŖŊLn-"eĩDŒĄ@?@ŊîÜÖQ´ ãh[¸†pîÄäÔFiĩ%L_>‰e;ū ­âŖļ……‡t^Ā#úh?§‚ö_|ąoĮÅņ´•p܏ŸģIfĸO_õ=Įčō°•?$#?kË< Oč/ÛBŦfė%’=—O>ÆOúŒxD̝”ã…Ļđgˇáņ ­Õ3'õ“ą`ū+҇müKh,¸Mîf$QˆÅ†(ũú‡0œ†ūhŒ.€ČM&âSū÷[#ĄI˜DŊmá“J|_KŠ?, š‰8čô°°Š™ē1>Ĩ>ŽĘz=f ÜÍH"@¤öIv‰UŽÂ,3}ņÆš€ų†d^0DҏDÄH˜Á'pšäK8aˆĄCÃ{c×ü0á’ũ‚ęaWf˛ Å}îf$ Ō öЈ(/q#ĩr@ä'WiDô7Ŧ@„ee| ˆŸĶÎDw3Ā}l/ęˆbKāHí†éĸ/BGĮ >Ë…Ž˜[ėtˆ…‡ˆ,;=z`í[N‰čČēëˆ~ƒŧ đ.))‰DDĄA„""ˆsšĮf4† 4™!JˆNdwŋËāH"­ßDZ…ôÖ!ú—ĸ![…č¯ßCDĒ­b-ĸŸĪÅņ"JKDꇏå{‡H÷1ˇĖ:D3Dš‚¨3CôŖŸŋgˆč™‡ųsĸ:ĸą>š!Â95Žh#“Á'pšĘ>'˙…ĒŅ}†ˆœ‹Dũw˙EŌߑķ ;Ŋ㈞Ĩ‘wZˆÆ%ĸÉX!"†Dtiu D 1Œhĸ˙DÃ@â-fã-uōD˙`$é÷$"ōī8ĸ}ręË&ĸŒ+ԋXdš5DÜÔĢbpƒ1öІãË)"fâhŨķDÛ#ENŗJ/ĸ'wQĮ!^^"â%ĸœDn@Žķ:ĸ#ŧ\ ˆX‡„1ĒŽÄôE E˜Ž¸‰rˆ=U÷ī¸^¤˜EŊLjí:8c+Ĩĸ%LĩĪ gdhˆž#"E*?!Lū5uÂC,<ä¸fD3{ äÄK´EûÄ z){ĖŅ~ˇwGšXl¨ĪlĶØá1LČ8Zôœ0’mT¸: Åžƒ6Pg$:¸jŲÆJCޝUK1{h Y?‰îēĪ“˜E)tH˜Û šĀr†‚´Ú7‰$zgĸŦ>mëąjˇA ­~ī1†[ĩ9Õh>z¨˙‘ČįmMĢe}á<>x`õ™ƒ•†)@îĩĮĻđĐčÔúâÉcËÆ=ãúô´JŽac=>ƒųĢ–Ôe7‰$ēŞ…Ÿ—˛Ú×˙žŅMT? D—7 ų0Mî­“Iĩ¨vų0 v×Â;Œh°ųĻō&!ßw‘ÚæÔor™wŅ[“{DkåŅZšG´Vn¯ķ¯ ›. IDATĖ­‘-ŗ`)Sœž™įæY9° tŒ5vūŽe“,XŌ)ų¤eu;DĪįųŸųYƎB†ãohž/{›dÁíŌcΕŨįDĪįųŸ!ęÛFG{LƁžâ6É&Y°âVéæĒ#zŪ/ļH:2EÔ#$H䂺`ĨŖ˛Ą¸ēˆ€™CDĒgļÄ@ų<î'į "Mƒˆ—Ūų‹ R>QŦ-QĘˆ=ˆˇ™DŨfŲ$ Ö)/×– Ē,ãJLŋ~&>(D˜ëD”~ĒčƒJô<">[<Žß;At%’ˆ-ÜŦž‚gfšBŌ~Ķ+ŊŗÚãõ#‰LŦ5ˆlŨp“oĀņQ‹į¤ŨŽŲÍ5"‰„eíą…›Õ3¸ ß5â,RAŧō#”ëG D…ŗ{ĄáLüI#æ_m=˛äSĸ‘éĸw‚¨I$dį [¸ŲbDÃų͜*Hąv& D׏$2Y°&SD1#MFø¯mëa,ą€všÉņ&Žv€¨I4‘ô[ļpŗÅ7š˜ßĖ_´âÕ¯I”ˆ #¨{!ņũpÜ@"Ūũ¨@dގDõHĸ‹ÅˆØ˛WWéˆNęˆČŌŲ(ÅS^6aĶKRĪ,ŗĪ$jé‘č:øNlqąD‡;ƒ¨ß6ˆüfwíĸR|A”Ŋ D¯Ų•Mš1”õW!ĸ;Cäí6kEû–3¨_!%<Ļx6;GŗœĄ‚͡ę¯6A¤v‡ˆB;*]`N{Mšˆč°B'iė!á[BԌŽŋÚ‘Ü"…i÷V#bĸrNíQ#’Č :d¨Ū]úī”ƒ5‰.¨´^ęÃ#ûX’ËwÎą0Cģ•P`FųsGœöČ)˙)îĨ1á‚Öŋsz ėo0å+=Ø7đ 1Y°č*Dʲ*D“‘ŋ“VT‹$2ˆ^ĐžõÅŗIŠ5‰ž6ˆcūâ€$yĒYĪÆÂD°Mî QxÃū˛Bo¤ž“p€{Á龄>jНũ™-2ŊœáYz"eÁb"Ŋ‹i‰(ŋ,ŒGôõ& õH"ƒhc„t˙°÷(Īą&QĖQ&÷÷ ŧâG]Œú¨å'‘˜L0ŗĩjÄ§ ¤(Fŧ÷‚}G š”Š‚ũØ0Õā]ā„§†ˆœ7IÍ+DiHą!šF}Á΃‹I3ŦI„y‚´)CRŒĸD&u: Ev‰‘G:Ž$ˆˆ$¸——ˆ‰ėQ/1IŊ`ŗÛŲ$ ÖĨ>Š#J…ˆÆX[ķ\ĄGĸūv7ˆĻ‘D5D™ėP¸X]CDHT"Šfˆ´IēŅF>Ķ„""=(•]ėŽĶ›!:SuDÄ9k"šhAFŧ‹ú-L| sÎ}4ŠíŅ4’Č 2‰Đ3ÕĄÃÖ$š!rĸ~Û 2…‰p_ÁY‚Q˛!†_šA„{éb°DÜBDĄ<@DĄ¤dé‰l’ë\ąr‚ˆlĪmh×5DV{(…ŖšE‰“ėŅ4’¨@Du(ÔX“h†Č;õtHˆ\!æ .eâRīc5,“7įŊ€(CŊ( ÕsƒHŨfÁ‚YE QŸ9ZĻ…ĶX@¤ŅQlQcŪß "ijĪ!šD3DŽßD¤>ŌŽ#úĒ@dL5ŋŌ;G×m•3ũ6ĻßŌá“#Vß‚ÛŖ`ÂPᏠˆ†5‹D7[é­G]A„5‰fˆÂ“&" ÕĒ!’U HûŠŪ1"Ė‚Õ/ŗ`I‹ĄW¯æ_Öo4@Ö x{Œˆ8‘.5Ū°ÔE=’č "ŦI4CĐ&ĸ<ē_Gô§"Ú¤*ģë"*ūŦqōĒgšŲUĒšz$Q‰ˆœˆ…5‰fˆæ^ÖĨ€(ūé ‘ú3D„{ÁĒîZ˙bGˆĘÉÎōŠ#ō×qSŠGUˆRDÔŖÄšD3D1s'‘[ ũč\üÄ šE2˜fė“÷‚ š"ęĸ@=GŊ(¸ ĸų,X‹åM!Ē"‰JŊČ9+/ą&Ņ gÁEĄ:JY!’/ņ¤M´QŽ "Ük†H0Ŗ:Ē#Ŗ:ĒčEÅüzļ&ŊXęˆÖlēąĖ"‰pĘ`ŲFuėŅ8ÚD5DzÔĐŽáo._ÕŖíhĐBp¯ĸƒRģĻ7ÕŽ 8ëōÕí,UØ,’5ƒ¨O@­šocM"@ôez}šÂDp߸0‹x&0 Ķ^ Ũ qÜ jƒHZęG€U‰ę÷ŌŲ6 ÖbŠ!Z`ŠšžĖ"‰‘ ˛C†p2üĨ$ÂÆšD 4ÃÕÅđūDs‡‹Ž3āšDוø?œ€Ū 'ÂMaBÜū3Ü .å1ˆTKŲn žR¨ođį‘D>>Ŧ+ŠŅŸ=]°ĸw-ŠEáˇmūČFV™-lE°&Q˙âĀōC—ĐȆĪö÷-,L„™ ’áÚÆ^ô$&XO´ã3Ü ËšĄĀzA]ũ¸eAG>8šĄŊh> ֒ŖĐM¯üÆ˛]ļļ]d•žsŽ|ˇŅm“{DkåŅZšG´Vî­•xũ&5Ų…؝CÔ§[lŧU´Ņ2šsˆŪžÜ#Z+÷ˆÖĘ=ĸĩrh­Ü#Z+÷ˆÖĘ=ĸĩrh­Ü#Z+÷ˆÖĘ­GtquŲiĄ)~R[„X`$­EÁĀ–§Ņė“SôųgķÛ×äÖ# jŲôK™,*âĮk.ŗ ÖĖkQ0Ž8;‚2šÂØÕ=Ļrëĩ¯"ĘYjˆĩ˛Z ×ĸ†H ĸå‘Vú JŽŪhųĸdDõmA+ĒEÁĀ–¤vŖĄŖĀŨnE €ÖåEĢ’ÕãöHc 2÷-_äšG„Ī?4DĒBT_f'MČÜs@éeō"’ĸē{ilBæžKļÂsė=D4MœV %MČÜs@t¨šP[˙]2¤'¯‰ņĢ˙A{¤‹Ø:f#„mëÃ.špõO.å*}Č8ÕÜųÆÁô bëה˙1hčÕđû-=–íáĨŗ‹ēE`Ü9—Ž<ėĩ–žČ­EdBY^ŠgIÆž8ųęīŠN ‹‰zŠ_‘žĮ"ã/>s’˙ņq– ų YĐ$~fį‘–GBŋbOĐC}ĸÕgû:=';V{Î×-ɝC{ÛˇķáÁ zo4 eųJ=JrEm7Ŋ(T§i’‰OxŸî÷˜N˛\Č}ÛĩbųGYŽĪ‰eŽAšj)…ĻĪm;Š´qĖ⏝¯uōLöˆķ‰ĀxhEašĀŽwz’)’¤ŠÂU`]ĸÃs@ÄxŸ}Ŧ€Į0Žš¤Yr^|>ēĪ{I„• „bÄqŊ3Ąˇ§‚įB@Ę8F_áÁ1`é‰ÜvD4‰fđFDĐp„DRīĸ(K ĸDt–oˆ™pŠH#"ĀĩįuŊ ĀIŗ‰A”É Q˜Ũ Ņ;ķ/‚ĢœīÉI…ú“Q`haa@j(€Ęâ:ĸ~CĨEH2@‡X‚ˆB/ĶŽ[G¤w‚ČĐųËåŸĮŪ#jĪeÛDh)}”ĩ|ŧX*ˆˆ"V!‚élĖ D\A:TSDœÖy˜Å=jI2D-aŠČ Ξl†ČŨ"ÚĩĩÂ×Q8íéLŲ<‡ÁTģø°ōQč¯,ēXҝi…h].)ũj"á4Šv(Ļ DATC¤>ß"Ēi­đ˜•Îņ‘yŽSD§ĸĄIĩŨ튈ž*ú‚ˆ‚ÚŅÂ.=]€H"âD"mˆ`l¯#JNKD\b< " ō!RL2Q% [$ŌÖa:“"ŠHá˧A‹ąģvQˆ"¸ĖļA¤Ž Ō-DäÍ  "i7ũôgÆō„ŋ"„ŅątųΐÕą:"ŌD´] ŽhØ]ģˆ(K8Ņú¸Ņ„`‚BORG4DDĄoš—đģ=—ôŒ$pã×e'%" H ĸ,Ŋ"čr˜k Q{n•é*—˛Ąq‚Ū‘˜"DãežŽ "ø€ũ7ækW%"ɲ3.LÄLhĸ/$ ŠHzčq(ō¸ö8͸A„ŋZh r#DxįįĢ"‰ ,õįƒ*Ũ,ŨPˇ–Xå—K…Ŗ|04Ú ĘJD’žĻ':¸LTwŠH ĸS3ĶO‚ }Ąž+r ˆø•iHh_Tˆ0pģ@tŽo„(Õá|UXHęƒH^ŅØh×Ú ŠĻˆœo÷ŠN’RuDŠAäˆF‰ž"F8?)ĩkę""`ėcFģÖĸôæˆÆkY|ȎU;Āį/É` ÷` .lŪîëļ´M•˜b‹–°ˇDtˆ¸ŅāĮ ]įã":TVĮb:ng]Ža–%3ĸÁ}é%ą jįŅ™EČKš j•īIFaKŲ1#šÆx3ĸ!ĸoŽh t@ŗX´,3EôŐ÷Ø mžw Lĸ‰-ÆÉˆˇc˜ccÛĄîgąh%ŖĨ‡YˆH>Ú3Áێ;„VxÜÖAƟ|ÆFōą°TˇÅWˆ(NĮ9īvˆeÃY¸Œôĸ+HŸŲą1înrõ˜ÚjŸI˖m9GÆ/āö [íxé‰ŦGô32tV#Šû‡Ũúu ŸÃĮ€h<Į’ÄâˆY"h N8^z˜+‚Ą,Ŋ#ÛúâÉÃä­aļõÚ_ÆÄÚßc#L@!‰˛ųŖ­ß8Üé˙öđÉ#ģßŌjŋeIĒ/Ž%ë'ė;R؋Ô3ÕŌĮZé>ĩģ­ū‹į¨ĸ0—y`ÅÖá#{yBÜõqúŽ šÅr˙ePãĪz¤?Âį€h˙ėqŠĻāícƒhĖ{N°GpM╁853dî‚ČôŲŧâ"ŦĒo\}đ ˛=8pŋœątÚņDĮ >¯SDöhˆÎVÆU֝ĖÅÑéŗų#\L;ØÕß(_ŖUˆ,'ֈh`ž#"Ė|d;Etē2ž´†ˆÍ͕ČôŲ<‡ķŠļŋúā› ÂZYĢZLVųaĪ˜įĸvKŖ˛/ę9áĩų"R›#J§ˆV|DŲõé~‘öœzôãv⯠š­#š3JŲG´ųI:_}đÍ‰ë ’_4ŠĪzŽüb͡-weČm ™[A"ŗhķ“ņôÕƒˆxķF° ŋö6\™;ģĻnYMž6é™M‡ áĶK_}đ7ˆhÜ@tĖĄ/__9y1É$ Á 뚈ŲÕķ9Õ~–Ô}õÁßĸc4ĩn6ĸŊKYČĪôd-ĸŖĸ.rƒ~‰¨=Dƒ÷‘—Ã\v="ŌD4T€č“™^„ˆŋŸˆ˜Nę|変č9h×Đtâ. úSDĘDŋŸˆÆ:LŨt-"˜ÆˆÄÃQëx(Û85ˆp˛Ûƒˇv{ōoGÖ#JĸA´bĻ/l=dh i™įâcûKˇ‡Ī:6C "Aã'¤=|FwzōoG֛Ôf3YnR‹[ēO†äXĄųĨĨåû…Í?nI'æÚéĶļlY —ųsã+)ņī‚ė&QØ{-ģIö^Ën…Ŋײ›Daīĩė&QØ{-ģIö6E–Á?s2¯•ž4^šGV+Ō—›ũōģIö6E0ü3/Ë/›]CiĶLÕīęąll´Lv“(ėmŠ`bĸÖ܊6^|Œ›¸úxGˆn[ĸ0ŧŅȂ­Ã/įböllélG7Úmrõ­’“š×Ķ=æŊ¤6L…th­ŧ‡ˆčÜëé÷ˆĪî]‘’b˜ú  Oâž=P Åūû7‚@JČųÅĀÔ÷5 ?Į_Ņß~ÖâLŲøZØÕsjv;ėÂî—î~Kõ1ƒ70ęHás&ūDŗī(nŦGú5Yz"ˇŅ>õˆ›ÄƒÔM}xŠ>#÷1h¨öí¯[ęČ•+čõ::4%“qaû1uuž9¸ÆåŪČ&^ 㴊QGIë='ÅGĪHڇwŋí>š‹ņh”R/Lħ^áâ;ėŒö0HČ c.M˛kPT¯ÛŖ_whč'VÔQ4JPŸÆ"qFIÄ?'~šfF쯍Ŗ(á>–=Į‰ĐæŧĪėåvÕ[‹HŅ_Đ1?đņ*q$„6ŪØįd ö0€ČE—á”8 Đ(ęânčք\ā–˜žŖŽŧ y˜]܋PSß§dšuū#R ihuC$&‘Āš@„WŠˆĸŦ@äDÁ QÍ$JRƒŖŽ|Ė6îų‘‡Nw‘#Y`i —šAhęˆĐáA’‘ö"ŨĮ*”pƒwCDöû>*Ą-Ŋ"u'éļd  €k'ø˛@ä…gXËlŠ(ĀŲ‘ã;\Ž06îfš™ūī1b†ú3í‘"y7õ" ĸĸOá_Ģ@$Ŋ%ˆÔį™nÍ#:h úũŨD40ˆŌeˆrØī)›Cô*D&0āÕŨD$?.í`ɃQvR"RX !GDbĪ Š‘ *™´2‘Ž—Á…Q ¨wĢí“āb†6TˆĐ zWąoŒv­Ûé#āĘC$D;„!"9E4œŒjÚu4gˆˆ3JÆ˛Kĩ)¸‹ĸv­ī."ę“(Ũw†OLjš@ !;fDc°ŅØäA;xŽˆ\'nĮ -Ēa]Ø}čˆЋˆÛ\Øe"YˆS^06#~×ŪŨDD`–?;dCcHõ˜L īļėÁ˜cœžæĪ˜–ŪۖdxĖmtėTöØD¯Ņ˜ˆâąrÜáŸÂ;u4Fˇt{øä¨CTČõÛš‹ĶؘŌŸÅ„3Áb´nĀšb АØ=Ģ˙âĀäx }ŅP?V-Ū‡0Ą°§#ˆFßAlggēáķļ%ŠüÍIuœÉ˙2~ôĢ,jíî=¸ƒ™g"¯ēHk›øŋRüĢɏ†5äÅrg]^§€…ŅéŠûBîĸÉĸXŠEŠ ×ŊŠčdízãŨ@”_E”_ԘGDßDé"DÛ%@A]ę ĸĩ^/wŅéUDü΅8כGäŦ]*ēˆôÕ@ ąv$Z,ķAŪũĩãA4¤Ž‘ ež,*˜kö¸Ū}HrsDĶú•ėÆ‡ē˛ "ŲNü%ĻšĀ-=ÔÎ4ļ Ęæ&ûPē¨s`^IGåčՑƒˇYļjEļ"03–-u ÷™Å.B_1nį‘hsËÔŲĸ¨ÁČjļ†wĐÆí,šŧf×q d+DžFŖÁ„KÕc.Ŋđ#ÁÎušæãØB Ė:ü3LKÎpĨ3 Ō<ŸLîdø‡‘-uhĒĪEWuØ'Šä~ø/ėLGÉ?“˜H\ĩÉĐĘ~ ”d¸†s:Nŗ\œ7ŨUī’lčéö*rNŌ׈(?㧗ˆ:•ŗĐLĪeõ´Ķq8I䇅čL~Ĩô˙ĄÉ9M% ō˛Sq:AD—˜üîĩ đy’ dŅ$•gk'ÔˇVļEDā|ПbqņĨ‰„îÆÃlĖØĒ'sˆ m?ķD(Ų‡ƒuÜ ŅīҰ@” b<Ā’Â-ū1Žņ“ÅK—™AD ĸ>.8LtŽ„ŧB”‡DãdÜ Ę Doāäߎl‹ŖTˆžGD‚ˆP7<JDi@4Î?HD˜pbb)ökD¤03ö­1Ē@%ĸĐ,¨[ĸÔ ēf¤ą›ŠÆ[~mŌcžžĪ@×§į—ÅķŌNV™ËNĻۂœãМn~ Û"Âe˜Ü ’ē@äĸūËāz’Q”sÎQdåÛ|ŅLL@LSítt=ŗBĸĢ`—ĸЏeļļōŊōOek*lE.Žl~ Û"’ö Ņ+ƒ(LF‘ã‘WŒhtGˆšáũŽŽOøWåQ^Qĩo—‰õšˆĒ°"SŽ&”W­OĢd[DĨŅD˙ Jų§:‚˙ä2DžAt c<ŠŲ­™_Čo˜“iņŠĻa•a›5ūĐj[”o4˛ų)l~ÖČ Ę+DđÍ~¨o5Š5ˆļˇ4Ŗ0ķ8EtRū]ˆŋ2l˜YĢ.ĢÜâ´DTl|Ą7”-ũ'DäD)¨ÚĸČųˆČįĨęXG¤˜AäoķESaæņN!:0Ÿ&đ׏4à "‚ölQÁŽ"’' × c/o”)ĸę "Ēúŋr ŋhãÎq+DŽęá)1ĶXß׌ ĸ3ėšŅe…ĻąnČŒhĶØëÅh—*y…hē ˛!ĸjŗr Ō@4ŋ˛TļBĒ\ĩÔߊ.ŖôwŒDKB‘ 4(@Ą˜é Ņ¯õĸ(ˆ§‘Ģ0O&r.äy3)Íĸi,놈*Ũ Œŋj"Zž’iNļBHEC`q€&5ö=Ül˜aZą\1š\Tˆ„&Ŗô“@g0…“KĨ1Šm}§qzpįÃŅ9æÕB#đŋ‘ĶaQĸ×TĐd ((ĘÆ˛C'a6äė5ą5ĶĮl(ûŌdU%­3åxš[ŊŽît­}ų‚Ú4ĶąĨiŒYŖ%Ãlė´Í˙R@˙ļōt’ķ­—ŊB/ë˞=OB@ô°méįŠĻūçä{ü!^‘oŲS'÷~c)QNĸ@5ˏė>ų¸wŸ8)Ib摇m +A{'ŋiIčÂcud?q ų°}ę„#;uáģA$lLė[l GÂÚõyh÷áNZŠq,AÁ?BĮ( t5tIGYD÷1ˉˇFä‡ũÃ. “,KŅ(>ęŒhDˆGņî"ûGļDcŪŖĐ/æh†6ž Éėã1<¸Ą.õFc +c`vĖĄ5ÃÍ(ņc8F¯ĮˆōĪŊްDMšÜdŖĶkž$\ĸ”g‰0×Õ;a ‰GpĖp ¸čSÛŖÔĶ@cŠˆ˜Âač%˛g\‘u ĸDäÅĄ0 :UÖe Ō~°ĸ°ÕGä_ûđ4Éä ŖŦ‰(,IMö) ‘ė ĸt "V ˛Ë"ĄJDR{8ŤáB´ŅÜũäēGWz>D„NŽUY6 ŌŪk _ĸŽåčÆ"íĄzP âƒzÍ"\ƒHY+˛_žékvŨÍ "øyƒÜRX܊āč-LøOĸŨDu:õ‘ĢˆD”DĻ ÂaŠFAÂLŅyˇ“†ŧaD×7¤Õ}Z"ú—Ҥ@ô{@¤>_ŽHzuDu‘nŨD×OY3C$Z"úy‰()ũ‰p9ĸŦŽHūeQDũŖ[€čú2C4ŠúĸƒQT zˆōˆŌĸ?­!’%ĸøų{ČÕy5ĸu{ÔšD>"bū“¤9_„(Ē#RfĄs&Ú O DĐģ­H?t{@z‘Ģ’Q倈DŋDiˆz˜WyˆˆˆRõ D éļAtŠž˛Ņ˙ˇ(ŨO%ˇ‘&šA\Öšį%"I]"UĀ9ƒŲāŊČ3Ēcj…˜q…‡‚ƒHīą}įÜY‘Ąé#Õ 'uDƒ°BäŧÂđD¤¨ŊPģöjÚu¤KDGæP" ˆŒęØNmoųÄ˙ö"ōR.å—aÜ—zQ÷yīGC=Æ ˆÕŲŖN¸ÉDŅ>AŗB‰č°Bä:Éß3D>"ú$ĸeF4†ˆN$ëPßĩ3Ũwú7(¸ķî$ˆøKé ¸ÍŸ2Ķ]?|lĮd œãöŨ:Ø6‰_dšÄ$¸â+¸•$ÄōĄˆĖ߆Įņuũ`ŒaE8j9f“Ä‚c&;ĖĄÃąÂî""N3[í[0Kx9$Úę?#Š#˜%ځg1=Ō.yÂx"ŽĢ>Æ^Ä?˛úOäĢ˙ÅĮZãĮNĖŦ>ÃU&_kˇ˙‚:Đūú|Ė1i¨Į§CĘŋâl<“Û‹hƒüBd‹ƒÔž/ŠBZŽä~ˆE!Ũ#j؅E!-_ų`ąÚķEQHËuĮŅīXíÅĸ(¤åĢÅ ĸ†įÄĸ(¤“ĨģŪfDëJblSeĩ1Ļo…t›õéęĪk‡ÖJc~ą]ŌmFtKäŅZšG´Vî­•{DkåŅZšG´Vî­•{DkåŅZšG´Vn="AĘ'´ūîIc›ŠsE}Mĩ01Ũ|K]yw°î n=ĸ´œÎ5sJ™+3ģ­Û[ƒÆ'Õ[&âĻ>¨~˛î n€ˆŋ•Đû¨ôk Ē"cJ™‚¨[í ĸf ´Õũcå›Ė<ŋ•~åbGkoÎyrLo´z+27Z3Ü4-]¸ëīĘĩū=7@tvÍøŠíÄ_d1]âėrZCtb§0Ē5{DtYGԌRZ$7@túVę]‘EoŪ.D+*[]3Äl;!‹Ū\‚ȝ!*ļ˜Â¨Ú"™ėŅ:ˇ”´Hu\ûĩ}ã’`ʲœŽ+nÕÚSAXŖÉ•wôRDĩ,¨åSU†D˛#ōy[ŸNæ6qb¯ZWŲLúĘéSE¸ ×Ŗ,&ž¸ŪCíš‘Ē!Ē"?YųēbDÆ;FD‘_č=at/[îŅPcA„Ŗ´P.Ī>…ČåHXļ˛ã#ú[zōšHės[D1?Iđ[jëCÆŠ2ZļCĮ}Ø/öšnK0.GœÅĒĨœK÷\P$2<€Í™VpėŲt' IDATëŋÚ#}ŗ0Åb[‘ģ)„o: ų×DSÉPo‘.ŧDä†ãš’’ēI8˛āæ™ÄO{GŸ˛†ô{ęMŌŅGvî7ڋ"˛f,Ä3Ąŋe7 “Áŧ)‚” áwšDŋÎßiD,rƒq-ÜÜ Ŗ„aî|ĖKũu‡Ún ÷ačÆnŖ,Ÿ~}đ•Ü'ž'Ė# 1&Jú‡=ôÆĘ0¤ízyÎ?“¨@›ûz2Ʉz$ô>ģY˜Œ„N9%åøP!DûöÍKõ˙c˛ˆŲŌŦūųöhTkđ~āeÆÛ,įŌTÔ!a:ÖÆÅ5ƒŸ,KsålāģĩØ…ŠZ RÄ 5"r+Dī…´¸yīui׏åÅÔ ē6›R*D-DÔŪ‘ôJDŸ"ĸ_­Fôi‰hR"RŸ×Iģ@ôû#˛h ‘҇KD7–aÚ :΍eeĸņ¤Bä˜0Ē@„Á3ž~ 8‘0Wɟ–ˆ’‘kˆTĢ@ôË"Jđ Ĩ•áX>ļw‰h\ ę#"K-C”M%9Ļú)ađŒ§°ģö "oĸIÕE%ĸŧŽH÷ D¯nˆ(@/ž*¨ũ”ę]"jÁ<c°aĒ[Ŋ^ЉŧB„uŖQnF4ãĢīÆÁ”ˆØĻDä/P€("¸˜øĨAÔéÜ,L&@o ŅXcÜēĸÉā*ĸ §@ēS‰Hm‚YĮ€Ã<pbV<ˆ`ũTũ´BD‘Dá æ§4ˆ0éFa2ū˙ĻM@íDņÆcvšˆ´sîM ĸ ]!Ÿú*ĸS]<Dû!ĸąJjˆÆ—uDÄ9Ķį˛DDo&ķ†eŅ˙ /āj"j§•v=E„?5"â Dž. DG¨]ã”%ŒģuDqV š ŧc{:Ÿ"ēY˜L€=ö›BtŠsƒõ69¨īāė G4-Ÿ—#ŧí‚^$ēTcđŒ'ąADxŒOā#Œƒ)‹úQČ[ãJ/zLžám@¸BŊfÄDÖđíŅ›…É,DT¨Ž7@”""žҐŒS˜k‘Al)SQĮqĄ×Ãã`,€nüėŲōŅ^‡X6īâ#4ŧ`Œq0°ßKeD›?;*ÚĖqûXĀ™âüžī ƒ‘5|"íÎØ7 “YŒˆė QtŽˆāpZ=×Í g‚ Ÿ=}`q‹bE‡Z˜UcZũŪcŦĩīˇÔŪá#ģß>ÁGhaVŸ9FmļõcK9°Ŗ‡ĪŲ hdØąx2Ü#ZĀN\ëķļü‘°‡ļKn&ŗ‘ ģAķ2D„‡Ķę‡sˆĻ§öā3’\‘ž5{,eÕژŋøíëĮ€hÅo"‚{ßŅ‘=^ŗįzD4ED~RõÕ2DįSãėŲBīDĖKyۈÂ&ĸßŲhRķíáš=×ËP+ ‹—Ŗyˆš&ĩМM¯ętĄũĨH<ÚH?ē ŅĸC蛄É$hĸžM@Ņ÷0ĩ-Ņ(ÍĨbđgüÚMũ(ŸûúiųG#"˜ķ•ˆ†2‡'[„(š"ō]Ÿ2pÔψ–Ų'Ž&3V q4íۘI‚DŠĀ//`ã–# ÃSÜÎõÂEĸÂčSˆģhE§H‘V%J+dĸeš O–îąŪ¤fa0cR“Ö“‡Đ~pXĩeÛüā7šŅ”å"‰‡YŌÂĨF 7õ@.t´(,† ģáē›­d="#+Lģģ’Ĩ˜ę|Ąų“'WĨŦ °ŲJ֛÷~åy+בõ‹DFč›>Ŋ ĸ÷–ČúĨF|\i•Û‘ÜtųûÉÚkjŲ?‘Û+ëŨđáî&Î߁ŦwžÁ‡ëįûzd,Ũôgūāä&Ž|ˆÜz×ôw/÷ˆÖĘ=ĸĩrh­ÜvDLOĮS,ąÂˇœš:ŌËĘē5ū Øē9DzņōAû–#20aųÔYå\Ė”*ŖQ0Ž‚ÜÆÜ0ĐÍ aąĨĢ—É-Gd"ėōŠŗĘT, TÁeÁtEî ĸIĸ›ë7‘ZžĸsË™ļ–OũÍ[QšU3ī+7Ú$×ÍVTÜhË wŅI8}ŠˆN–oŠĪ "|–5lö„'5 e÷uDīVģžˆa2–Ö­SNpįĢcҚÄe#žRjkQÚū“E‡Á §MDtņšŖĸ’žGT7æ "ZR. Ũ‘ĪÛŌ™†É¸Zv <ã]{ų"8JlkAûT2‹ íĖt–6ēûR] ī§]ā‚j,‰Šzz—ŅųÃĀ…Ģ&ĸeÖ=ķą—Tʈęq1™žŌHŲ}ŨåmŅž†ÉDZ˜ Ց^ƒhh빲ˆ„};ÁqVļa܎}š"tā0 :åRĨ,Ÿ’ųÃĀĩÉ&ĸšČáú–Z;xŊFQh"ĒGŖ×mQéXt}D&ˇĻa2‘ÎŒŠ ŨՈ^ĩu0Eāiˆü`}[ŸĐÄĐ ČŦŧíÁ6JbiĩasĄįÜV3-ėĐÆÅ#ÉN1އÄŗöH˙Ã#āĀ˙Ūčcy Ž…%upäõ’LūQ˜¤pĄiŠŪëŨ}ûÄ\~…Męxu€wD.™%‹Øc•Ûé!'kö Gōū a˜Ėi•ňÎW#ŌE.AlâgŽÂ}’ĀQāEĄ˛P˛K@„e:tã<=ôĸ.ēë,Í Dz&–ŋĻ! ĸ҇°đ ˆGž‘à ĸ įũxíû­õrD¸G¤ÁŖAiĢE"?G„×_Bt&Xi'*üéBhRŅQ˛ŽhŠˆ¸Aåˆđ”‘Ōˆ:ŦĒ\‘…9—ˆ’úAˆ$Žë’d܂1­ĸb’‰gСbG8e†ˆPđR8Ą—…6õJ&Xŗíˆ†2ĸ„TũrŅO÷"úŨ i7™Ya‚…ˆŦƒ‰:ˇ˜$ˇē1ˆ"CJ,Í)ŖI´ •uķŖé‘XīŽg›á) DTĩn†h ŋö‘B+čēk+él'ĐÛĄŅÂļr”we‡9"ˆ¨DOwF×)œŖ}¯u3ĸ!ĸfH Ļ#Á†vhŖãиĪ-Ũ}ˆž‹ ĸĮNŽ(™Š]?CDđQD”Ÿ’KæŅß3ĢqrSDŦŒH/LØ{%€(¸Ä( 1ô DW]nBtVO“‡0‹ąĮS\á-§Wį´ivŧ—<9…›ô8ŸvjĸˆÎωxtâ`RAzgˆ?ũ¤éØĶ]´ÔĀ Õâ”ĸŠlļi>°ˇæ;‘TeDįF†ČģôVÍat\G„. kˆÆŽÕë| Ū8V´>Ē­đ‰_˙œ†Œœ€ l_:Ʌ˛“GpMãŪŗÖ T–Vī{|Ū{öäŊœåTžÔ8ĪæëEÅ)axxÂ0+4ļƒ8ÄMæJˆŧiŦœ¨"*mrFXČyĘ;„ÆŪ\ĩ€Ģ^’å^ĘKDãj˛A”Á\r2?WBĸ=ŅŲ†×NaŧWČū*‡¸ÉĖ DCå cEęˆ?UVgg–eCŗ>Ĩą8—æ]D~ Q*Ų9 â8+ŨƒhR^ƒž!ûĢâ&s)ķ…œĄĸÃH#:SŽF´ÅzšL7@¯ĻaˇMR?cÁj¸šÅMíCä_Ņrg—;ĸ_J…ˆ&):ÂŦî-ü†ö!\ŅŌģ(9vDŋēR> ōQy\ú­ĶW6ˇö{rjD—Éŋ…F×°/ų7įQ?w_ĒKėã­t¤Į}ūÍúHŽ-bÃck|ûęsĘŋoæ\6Ŋ‹.įÚá_tjrBvŒûoŅßAĖÔšF´\ģ–žQ“IЇOčh!%mßEOęĪėȝ˙ÚR$ö ^ƒ>Ä>ŪO-ÕTčV4NÃ~$?R/ÉK†':åOI„ôęЊ˙“Z¯k‚GúĨ–KꉓŊz\Į×/§pũl ‘ęņBRĪ5¨ĢČü ĀįÃķã8š&Œā%##ėĀü¤Ũí2t+ŠRūí?I(…˛)ĮĮ*Æf Ŋ‹|ãp„/Ø#qeâWúÚEļ• FąĸQéBĩˋ¤ÔÝéĖgž{aų—QÄÁ¤z‚šē§öSŅŅŽ6—€ˆEđIöMûQ—ēča•#ÂŋžņĻÁėė ģöƒMA7ŧ}D…ϘFTę•ˆü%"…L0}E jŠD )@$Tc‰ČۆH÷āĮŽHptũ 9ĸ’Ûļö ’-ËD&Å ö€‚RdYēˆÚh4?2ˆEŪDąš|•õļī\ŋuD3D„Yä‘(]Žö Bb@dR ú:Ŧ-…>„Eô5Dáíų Dø)8¤%ŧP|8 "눒*ĸdļzí2DôwļTē•‚hk¯ ŅĖ B_8Ų`~Bļ"‚CŅ/ˆ~ŗŅ/īĸKŖRÜΕ담WPŽ(2ˆtŒŲ†ōšŊԈŪ_ út3ĸ÷ "QĖąË ƒ¨äP¯Ŋ‚rDA„æŪę=(¨oE‡‘l/57"’ųˆv…–Ēuxe•LbĩWl‘K@äDڍæoáõL#ræUDloÎˈÆ9wHeg#"aēk‰ę&"lŠŅaäÍI6"âˆ(öąÁhDÚļųLų“) bÄA×HVBäĄ[‘Fe˙BQcˆČYCÄ " ]#zõô¯_8Ļhāŗ-ˆ¨sQB„ĘËĨ˜J‡ .QM z=Gˇĸ‘ _éNäļVä-ߖ´ĩđGņęŠ7É!y@fŲ"ˆAdneė(ŲN÷Ä0ŦŠ¨Ã›Øj‚ˆ„žr‹BÉږ(Ķ—÷QÄTЈ.6#:¯ü¯…aC„¨[@„y@˛Yn°qĻ^–õh ‹Š×BÄkpšÃēšôüxiąT­oŦ›ī=nD:ˆČ'ÎÔWUDÎŌLáZˆ˛PE*č+īn!ÅûÕĄ•ƒÕųC˛ŧbK'G¤6!ĸ•˙•7^"č¯}ąČ2!%DŪ+#ŠLŒ2Uįˆ(ËAÉxĨ^aôē(đ+’M7ŊkŠŧÛúzaŋpØ:›OT †ö^Tŧĸ Ė qˆ(üĘļņÚÎW|rĶĮå}nÁ;­0”‰_"Ėâ‹"ÉÅm!Ō.`ĐųPĻ0Î#ÕZŠ:I%ôjœ8—Ōīãj”°„Yđ•ãš DÆHNÕ¯ēŽøé\´ķčäˇN¯MFęsj)–;%,…øîjŦ~.ôIīĢžü”ΰĩMÉ2^ ʸ“°‘xîĻ.,mlßW–Ŧ9]‹Ņ ¤ĒK@5҈ ŊjĮáģiOtíŲtæ#ĸ‘5¤1ņEöë3Čøņaįɋ8fņČŌgk<˛G’6ųSâ‡,w6ŠIšF[RÚãOĶ}’ŌPžĐEŲv“ŲCō€ŒI.2éødÄ%ڈČbōT´iŋ FŊk!ÂDu5d‘ƒˈ<ŋ÷ŧƒYcŌ%íņ=6ãߎt (÷žŌ‡?ÎP ÎŖH<•Ũn×q|Ņ-œŧ*āšzĪģânĸDˆj}ŅĢ;[a0+EŌ¸Ŗ¤Mo3xĐzD4ۂ~R Fךíeō)ƒ? NĄ‚ %åë$ <ĸ8Ÿū‹ | ėÍY¤siDšs †$…F4ĶTDn4•ŲĸŽ/:…9¤ 5ô'Ū%>×>I|&>Š[tŗ< Éŋ)ō€ŒĨã F!ôE‰ ˆČæĶéũáîØ§Ģ§• ‚*†Œ;‘ĒaIšĩĶ(Mæé*"ĩ‘$Š2ĸTˆ‘Z"RēũĨĸEŽ>I"R7C„y@¸“FčÕW ëŅYäôGģcŸŽHOPĶĻ@/iO5ĸJdɝGŌi*Úqæˆā^C ŨJˆ´˙ôūdX Õ°ļD”niDíÜŲHšiCŘûpZ"JŦįú\7ËŖ@[Q4] kŧķ~‡ô•ã_ ‘´ õÃ/Šccßä L „—æÂ’Ļ4Ŧņ‘ãG Kˆđ "ōa ôÕŋÂĎ‘ą^WN 5d*ÂŲĄ¯æŽFšĸņŦ^ Ęäc@4‚ƒ–ÔGʤķ>ŧ“Žē^+ ;l ‚+œ’įŅNāĄ”įÂ%Dß. 7Gô퍈¸SAôb‘pSî”5 "íY"ŋ#DŲh"i=īäq¸yL›‚ˆ į7ˆürūå%"ņŖQš#?ڈHÔˈÄ_Ž JŨj,ą†Ōˆ´uŋY?,ÍåcĢ^BçE>}DĄJĘ‡øIÄQ^āZ"š-úĸ8G4‹6"Rĩ ĸˇ‚(vS¨QBôžA„Ĩ×cÕ\Q°%"€ąDÄÂįLžŧ"ŧyÉæ‘™MhDĨé@h ˛ĸĀõ§Ē­ĸŦŒũ‡ŅÆĮą\"’ĖŲWeD –ũ-"JÔ9ŽÅņÍš|+ĸä9ÍWE¤rDŧ(Š ]X‚^4Ņ‘ ˆ$ Š*ˆÆÔĖLĀą¤˖€ōˆ†ŗ*ĸvŽˆˆĐˆKJB˜¨„%ÕQ9ĸQŅŽQĖ#Ŗ:"L á9oūøæˆü2"Įž—ô"Ę9ũ¯ˆ¨>ŋ."\""ˎ§į÷pÕA‘Ãüéc?ŦOzŅĀņÛ5@4  i˙!ķ°¤͒:|˜#rĨÕDnîl4p`ž›â W"$0”‡Ĩ‹Æ¯ŽaŌh“E"BéÔâQČ D„sįDt–iDĨ,ŠzAV~‰ŗ™dúĀXs!b\"Œ•‘ã°De%ߨq|$œ~b'OQ˙EDÃŗĄ¨'l”—ú‘ĮqŅĐ_JtŽ8U§ĸaŦPüa”eđžĀˇ)2šĸGŒį‘8ļBũ}”´‹ÍŽî–4@DŅTįՈĐÅæ š" F ÚāgĸÜtQëŠ2Gäã„J{ĀĨz\OåÝFTŽŊ44VŒ|ņ]¨”*Į Ōt<Ōj3"å@$QXFZØ1’4úį =qxnÖž#Üõm!JQ j+"˛,ƒČ3A"Œ:Ŋ@$rDVMÁ´Î9¯ *w .z JD$ŋŖš9"ž#‚_3"Wšb(Ą%D¨œas„‡•´@´ËŽã]Ŧ :7̓툴Œs}÷×Bô›Ņė DÜYA4dQĮŽ jnčq‹ˆ&Đn8ēNį3Ëa›A æØqŠ"ĻąŽčĶQTFä[‰:"‚g˛@¨[{È˛LŌķËsP˜ˆ¤šLæQf†ģ Q˜÷+õŸĄo¯ ĒØ]oCTt×A‘ģ ‘ĒáˆVBčˆõŪ4ĸT2ˆārŧŅ•šœįˆĸ"ˇ„h^ Šļ!JÔ?Ŧ#Ōt‘Gœ%"ß["T ĩŨ?ՈĻĐ´ĨMWđņŊŲžtĩŽ (Fn ĘMŅ\Q•™J´ļ÷qF2fĸČĨlĢ—ˆ(ƍ¨lšŽĩŅX~•’‘(â\-Ą7Đ‘äˆāiŧH´Qģ2ˆ@Sc2˜EâĻÄ ĸdüÚIŠˆ°6ˆ%ĨĘÅKŦ–eŸ!"'˜ ˜5Ą_*…Tg"ĄÕV ėĨb´GDĶtL•´ę(ŸkÕŅ[C4˜/MÔŅøĘbˆ#ĸsƒ(‘¸üGÆs@„ZC–#Šv™áŨ"›ˆÜ"Ŧ¨͈8 ­ŽåœĄ:h{áGˆ¨3û3ŸŗĐ ZĸÕÅe\ bÅ45s횕´ëĸŗlČ+!Îü\uDąFDsDmxä}2Õ#•íZĸׯ:ö` ’X 6¤8ÁpAƒîՇVÛrF “W0î nĩj0×P‚Ëø¤gКP Í Î Ģa9Ķt¤aÉĩ7y 'r4G¤3čô{L†ļß~žhđ‰oé\;đŖÔŖ™ž€Āß=c`DÃÃ~Š“@|+´§Ú_ÆÅ čb“î˛TŧÍŨØÅĻë&ķÎĘRĐ"iLnå¸\JŖ‹wØ3פ=ķĸfcBÛbđi›žÕCg(žG’NK§ļŦë\; ŖÛ ö‰~q:šfĄh5pĒ>ž hžŽWOœ0Bį˜q?ĻvąyąãļŽ&ÜĄõ¸fÁch3ŗ^¤ u‹°>v9Ęoq{øä‘Ũƒö1Đšv Áá$Ô~í$ŽõėŪl Ø ŦRĪé@Đ_;čŖ×‹´‹Íë_/2"ÖŪ”˛ {åš $9ÂŋWļ^îm¸‘Ō¤UÛzhīÂãką YļMOZ_€õŠ7¯lŊ|žáNKXēõĐÛA´l;[š‡ˇōZŧyeëeļ\=ņ[G´4°=/ŪTs˛jũĨqÍĢZ/ËŨˆÄŅ!zķ"Ų†öWF”m;ôõAD6l•QÛĄ¯ "em0MZZ 3ž‡öģØŧ+ˆ@¯_“RžĄÛzh¯‹Íģ‚č5Ę=ĸŊrh¯Ü#Ú+÷ˆöĘ=ĸŊō6&üÛSØ•ŧDufėʁwĄ­ŧKā”hSGõâúĒČ ā[—7‚ČUM§4HŲADį1Lš4"‰Ûz+?S!áûĶ%ŋyyˆ$jƒu[HīÎjllõqĢÆX,ŽsÛūŖ“7ˆŖeŋ‡@‚ūL҉R-[Õ͒IČxZļŽ<;ž^Ôė7#oQLf’PÜ^ôÆŠFô‘Aô3ŊátŦ%39y#}™KÂđi:‘‡Û}˜Œán–Ų  tRY?Đҝ™n"zö|AeÉ×,ŗ]ŦM–˙ŊX,īmŸđŋDh]­;Dt}4"š`"2û|îhWa?ĩę˛pũYņBI” •RŗũíŦ•ŠŨ…Í?ŅmW˙fá?ũûƉĸŽ’ éģŠ Ē‹ƒœņ5D ן O•l@$Vq˛øŸtTĻû%Ũvõo.ÆI—ÕrD:="2ë~ëˆāĄ ĢÚÂõ'[{áA“tÃæŽ‘å]UlU{tÛÕŋ)DTy¨ũŧ)-&4"mhŦiCŲõ§Õû&Ĩ÷zéąŒēŅJŋjā‘īˆĘ|é¤KDåoĒʛCD‘+ūGŌ+(ÁĢԈt4įHVõ“ yĮI&0=–ŦË:ĖB "=&!"<ÂØÜĢļb¤ôžšäęDy“,-öHJ'=*DZqæ5>sĻiGLDd"ËG ÚĘ'—ĸ[ØuåM˛@´-K'="DBi›"u&Ÿ)5˜D8ZDx}VŽ}r)z°ēĸ|t+-ÔŌŌIŅ,ߗ ¨hkˆôõEXeŠĀ‰úPĒ>šœ÷ŅíJë,T?GSŽoÖGę‡éÀ­ÍũŸĢĄunŸ]ŠoЋKœÛ ĢōįĖ’€ŧˆžw§C:R?—hšŽÆ×X!TŸ9Ím¤ÍˇƒxCˆ˛üGLRN•ŸDØ*ˆĻ%gié¤CŲl؟ÔdÛÆé‰ō§œ?åč~œ&ߋԩzI^B}ņƒÖŖf[čL´›ÎÃēHÅSųņ‡ĒIOēenǚüéP~„Ī}ģûTø‚ū¤.XÚfúö[Qœw<0l]nA”.š=ˆŖ=ˆü0PȁąŸrųÅq”Š?ŒdSRB)´ĖōÉwĄjœrAŨŅSŌeÍq?GôžAô> ŠŽ‘t¸Õ°ŅMŖîōŽh° (t#éPmå/žŅ|_ÚäŦ4z9"ˆDŠ/’uƒ¨YE4Ļ9"^ATt×YŽHļ5" Ũĩ ĸĐJ,ŌCÍyČ`"[Sˇšą”ļō-­ë ŦŌå§Ōķ‘ŨnVB¤ÎˈÖi3A/ˆ"–#ͧ@”(ŲÉÅđqöŒhØ]O•ĀîÚ͈ā{ëˆrY͞¯•Ŧ¯Š„Â""œP¤%D“ŠFã6û\BĖs§ i:Ո°IŽQ€ˆž,ųˆč%åÜ úÎâÎtƞņŨDÄ DhO[A”æˆ:ô+ô BD0 $"zsą`:Æŋ/!Â<QĸÚ9"“ą'’o[/2˛ĐéZɆ|›œÁęžHU DÎK‡8ĀŊ:Qib´k¨Ú5ŧåœ4ˈ­Q š€(Ķ{ŪžvmdŨėwYâ­WŒÃÔG4OęEĪCŖ]gĶ":íZÔjA/FŠË%ã*å=ĸ)Ė=ƒ)^ÚÂ朿ˆÆƒô+Ģ ˆ´s›ÅŸC…Įčuƞ´Č¯ŧIŪ ĸlG ]¯.TŌŠŲũiÂAũåO¨ōG'zøqœ<9Ĩ#ųĐąXÔqÂlŅŪ!āØãi÷Ė_ČĮt˜t-¨ekDáŗ„Z‚$G hx5ņ¨ņ˜žÕũ€S@Õˇ\ŧADëAŗ%rí– ‰ŨĩzΚÜĶ)hâCnmõĨÃ?N‹<Ļ#čwĀ÷`ŦĢ+Õk=5Ģ×ÖÁgäS5’žzÜŦ)t+J"ÎÆđųÆIģŽ):OēOÕØMh茏aŊčfbBcn“¸<õÕb‚ V 7ČŪ …ÜDW;rēnB47ą7éžĶžKˆæ›T‚…kˆ.õøøĩB”íDä­!ŠŋŽˆ6hM Ąyęk†(ŲĄŗāX¸ŠČäÄūZ!â%Ÿ–Įiõ˙‰ž§ŊĄŽ}ÉíO´„+ZŸĐ›šÉ>ËŌŊ šˆŪļÜ#Ú+÷ˆöĘ=ĸŊrh¯Ü#Ú+÷ˆöĘ=ĸŊrh¯Ü#Ú+÷ˆöĘ=ĸŊrŧˆâĢbK2¨ŧLŠ —¸Áļ5ŅæEyĶ`á`TĘŦĩØķØįwŧˆÆĶ"Âō ōBŠ Ü`Ģ8x”Å) /ŒJĻČ W¤erŖÍrĈΊ D‹eiŖãÔļí/ôZ_:•’ŽHĨäF›åxÅią.X}ĐHQÁĮmk+rK­hé`TjE…+R)šŅf9^D*­.˛ü•ē¸Ûŧũ]5/!Ęß\DüSĐZ]×]“{Dīĸ…Ą )JrD[‚øšho^|ļ8Q`¸xøįŨC´¸R”äˆļd9qU´ŽČ–§x÷-ŧCHQ’#ÚâˇîĒņ:"GsŠ&/ēÈ.SyÚpæũP]\ÚŌIœ N$Œã'dØ$¨īųRŠĪœ!UÔ‡ĒNBqœįôj¤FŽęĩCõĢ.ÆHūŊ˜÷U]ÉZ„)Ä읓=ÛôW?Đɍvl-"iŖ_‡ûI­×Aī HtœČ{L=ąCh?cĘĘļũ;Uĸ-›]¨ęzeîČR ´^įɋ>Ún:ŸÔĐÁČũuMž€†8ˆ0y‘hķnķIG'7Ęļīø-"åÃFÜ0iĸwFđvƒˆ7Šrú tŨ †q÷ëæ.‚Ē.qŅŗ( ’v—"ĸ&}øãŒgč`&č`äĸ_’Ō”ߎđs]ú°Ŗ“ÅÛíŽQč-uŠĻÃhė¨ČX#ĸuŖTqÉ!îTŅŋA“EtˆA Gü¨ÃGŅÁ(âč`¤“ø0=$$ rLrŖ`{ęšģ„Č3ˆĻhCĢá1D„ ‹ ĒdŸ-)ƒÔ´÷L„g(#‚îZįî!&šŅŨG„Ų3\’äˆ:zZ"ĸŠr4"íY¤Ęˆ†5UE„–"jarŖŪö°@wŅi‚`ōžD$œTA? fđA*Ú"ߤ”Z"ŌI% "Į4"Ln´uŽwwũ´ŒčO”ú] ‘ŦWÉīWũt"Y7ˆfī"ų"ų]Ĩ~Ąu"RV÷+ˆäw "t0Ē"R–AŊˆDZFô¯u ô6ˆ†•eUD"5ˆø:ĸaG# Ū Dŗ2"õGJĩ‘l*(ųŽADĩgQ\F4–ŗ:é$>į DIS#ÂäFƒíī"tUtƒ(S˙JIæˆh.>Čũ¸v†ŪmV Šöž˙Ø9"Z š ƒ“ ļGũŋKˆÜ™F);G$•A$O•‡ƒ>ų-zUM¯ DØLtžŖÅ ?—ĸÁ|<ßz!w ‘Qc5Č ƒhˆ´ęhᐁFÔĄ9ĸ>šíZåyŽˆf DgŲčŽĒŽQ2ģ~ĻˆčDh8Œ§.; Ģ*‹X´ŽÆ uĄ{‰>DI=™ĸƒ>aJ}†yŽ”úÖ¸¯UGŲ9ED˜Ü(ÜnųxŧˆúĄ Ŋ3Dd§üIĶą§1ÜŦr=\č`Ģ~Ōļč`œPŪ‘ Ö;Šíąē Ÿ%ŧkõUØî´nķ'§āŗ ĒÕgĶKëáĶįl¤āsžápÜ(9 Oĸ뉴zØãķŪŗ'īÕŦ^įTžÔ8 Ÿčøp€h@¤5<ą×,ÎægęLAUĒŠęĢ$>%ũs•„OŪĢK"NåcQë=;…Éɸ‡yŽÔ šĀäEđšĮĸn’íȊē‘ŽļĩuĪķíČ$Ũäc´îõ– ߔäáŲ‹čˇļ~o!C=,%€ËEÖ.ŖÃžį:2É_7ųmŊÔų.õp—ėŊt/Š+ž7UPâāL9"kåÛl™¯†ˇē‘xųë&Ŗ­Kc—;]IvČ^D÷&œâIŒ×šōH"ĻĒŲŠo,įųë&Ŗ­âׅH2ÉŪ]Žsjö×õÕ`¤wĀnŅ%Íßlō1ōļ}*Ū~hˇėC$؅’t¯× ×YI×Օ?Ō|oQķtŖ[+Éez°ëЊėEũ5Üãžŗįˆŧ•b˜ÅŅí#Z|ëŖŠ$¯:bėûĮ đjïĩRÍ Z-D—&ĘŪm"Zl.îķ1LjxՈėûĨ0ÂĻ;lTrŲ‚H8€H?ˇÚ]ŋYŲhp(ĸ‘°ēNؤvrBp{“˙‘6„Ē „…?¸Ĩë} ˛ŅTõLæėŨ‚ˆN:V;â4?OœtœúéXq@4:>>ŊĨë} ˛‘Em€h(´Ÿ¤üéûma9ãņ4Š2ƒ(aˇĢĒ㛕}ˆ0æōtē3˜ 'gĸE0ĀĮ{Oxįą=§ã"g`ŋÃ}ŅXIgœ¨ÕøîĢÂI=GÔø€wˆ=DŖųב˛}ž‘EDËDmšđ& ŠÆ!<[ĸžķn#ûœíEôžÃŅ…ˆČVũpHsD]į“w‘؏čÄ^C:_Dҁˆ,§?´‘Ĩõ,˜˙æˆŦ÷ˆoÔ9Uũ‘â4TBˇ"Ė\%ōV$ī)NjkˆD Ü#ĘeQįk5%o†HäĢæįË"ŗūy^ŽåB“ŧĀŧz—…'­ŧ7’ŌjŧąčŪž`üDq|ĸ' th@Ä˟Œ”ŦĢ Ų¯ˆ÷ÉT5FŒÎ6WŨŽpTŽ“ŧĀŧ:ƒÄü7ĪA´LE”9•I§9ÛöųÈüH :;äĸ*ЋØßûėj$1“W]ÅŖäc{ūLj´§P9´Œžíę6‚“g‡(ė‚ķ×Įv>éYCģ$HžúV#Æ\ŽøaĮöúa“ͤÚõp6|ˆÎ”;JūĸÛ¯4Gj­é­ē~čfæ$/0¯ž_˜ĻĶĘ *­ČPÜĘU‰ČD˙]œį¯›Š"-%㸙ķ%ĸųĸp‹ėGäPžíé'NB,Vãõ„ˆ Äû¸ĘFĐÂČđ)Ũs†ÍrĨPžĶ}KjÃZâ˜%5[ŲÉÃ'‚üĘŅK§Vē§pWĸí"ŅŦ„Č3ÅEAņzĸŌV Đ ËĘ…[d?"-¯¸‘ySÁÜwĸ˙‹ *9ųđÁå EEá6Ųŋŧ_ųö7,˜[ ŧģS NyÁbđ?QÉáȇ.‹Âm˛“H ŨYéuˆøF-ė&ÎgŽļNáQÅÉĖsQŋÂë€čŌŠ>ˇ9ũ=™„€høƒ†}O÷Õ T'¤×Ļjâķ°MëôÕų—:#ŅyČæ ĐĨEšũz˛đ%í1–ĐŅM1üûĒģt7IŗĄ`?ąáA{JĒŌHü€’3NˆĒ‡uKJ{ß'_ĐHM9ķž8Y0˛_˛'öH0NĐč¸õčĩ¤ų3%Ô%ŸÔĐ5´ŸØŗX‰ļz߉B8?c¯ŽČĀY†7sBüGO!@ä8ž§â4”}f9Ęåæ"N1 `Ų€íŒyõꊰQ2[A„ÆĨM6Ž0%ŅĀ Ö0; ‰‘’7AôÖ ųüQŧDD1Y¨FdŌ iD€s„I0‡S:û$Öĸ"Š4"ß ōQWЈ:0\ŪŅ[˙ŋmCôËŅorD3DôWDš‚H~7ĸßŨIDŅ˙qąŅû9ĸOsD ’ß}Ŧ–ˆÄWq7ĸ_ÜMDŸ›ÉŧģfÍQ€ˆ>ü´Œčß­ Ęö zy'MO˙|‰ˆ\ˆL:!=ĸuēԙ"ũĢ˙  ŽRA/H*˙xQŧŽh,ˆ¨jŨIDi‡”Åjˆx¨3=ˇCÖ{Fõz‘z\ŗpyŽŽž°$ރÆfĮh]öú,åüЊd÷aÜĐŊG´SŪaDôЊd÷áwŅÁ5ÉîÃī.ĸß\“ė>üî":܂€ė9ŅŅV“m—}Á‡˛#EŖ–ģ†h5ųĐvŲgëŗ~€{Ņ]Bô–äŅNAGą{D;% ÷ˆöČäüŅšG´W&ôŅšīŽ÷ ÚļŨ#Ú+÷ˆvĘ?ą{D{äŸĪī"Šāį× IDAT*šĨ\ĻÔėĒęæRĒ™°ŌĘī )ĮaĄÅ›í†/˙÷ųŨ@„ ņƒÂ˛āŋV Šá,i1kČÔđV=?ÖģļAÕæäLŋĮ­ĄŖÜŠ<šŋ’üÛpĒÚvÃ{t:¸"øeÅqKM[ ’†ŒˇE‹¨)”ûcÅģö™'T ™cÖužį¯•ÍŌ ĸy)Ū\mBTîĩĘyĀvû&ÜäAs”gŧ$+&čKr•PoŦĸZōŊØķ]8Oƒ ôI-Täe÷‘~3§Ęu‰K6^ÅMC‘Ļˆ~ ]ÎFĸ$Q˜=B!ĸ€žéÂã›/fMúÃDŧÔķF ę"ŅÁOQ§ §n@G-“W‡Råy:åN§|63ˆÄķ”Š? @āh¸æ8GäŠ"’eD0c¨ËŠr "aÍŽčšü°GŅc3a*U‘ŸÁDšCGĨÃŖ`^ ”ËSîé8Šņ ˆ¨GÔtũŧãÆpž”_hDž˛( úã7#N1å'ŲŧÎwS[ĮądqŒ9‚$ę˙ũQ’#€¸ęx‘(o&ŠA”hDûâE-‰G {Hû‚œÕûŠŸvpŠp4ŽC>S¸°Á_Hâ`^ÚcĘņzg#é$OÛu 猴ČÍˆĶ ‚!O9(áĶZ~ ÆaĮøÍȇŽíxoë…ÜŅL% "jÁÅsƒČŦ]O•—tŠA”šcü°ĩktpi0'QVb?ŗTøg¸ālũ{§×˛EÃŗdķ‡uĖĢãL•zNĮįŊļÅ?‚/v Ŋ…õ䑝(õk'q8ûœĀyzŠ™w`ø›ÂŲ“$÷›yÜŦ=§¯iŊ(ŠŠqˆ“pŌ'² (NÔr„ ‹%’žqĢfŽņšÁw^[ļ'õ:Tn‚HØ*†y{Ŧ¸-­gvbYC*ÍlöŅpZ_SCÚĩ~`Õōc¯Víåí"ērh¯Ü#Ú+7Ct×^In†(`_D{Ėl”¯…QņuŌ­Ë×ŅÍäŪîz¯ü#ģG´GĐ āŅ^šG´K$ÎČīíųCuhā–ß=ĸ‚ēų=ĸ‚ÆP÷ˆv Ŋˆč†ø­įú/Ã?ˇŌ”l=tđÆDŲŪēĮH’õäƐ֘.Ü>´|°xˇn0øwk%Ę8Lėž€ģ€hŨĀ„Æ0Kō ˇ]šŊŦÃV?Õ\+Qī"xĐÖv•L+2Và ˇ} ŗxģū ĩ؆ŗŋ šZOpUFDĘGLŅ\m’WŽh§ C֝D4ۃ(S›äUņģ˛vŊŠ(ŨƒhķzõĢ tGM÷ ÚlWņ*ˆĸŲ1#ú-Ļ=aVBĪC_äßĩđy‡HG'OĄ_ëî@įMQ_6ė~X•pzĪöĢŽúœb"5T-‡?o’ß?ÁD€um2fcŪ•A˙šøƒ+õœmŲĶ÷Å1#úÔŲ.é‹įÔĩŗĀw•úSÉŗœYŒÉS|—cŠ™6ļ"7E<Ņ +ž Ų8JDįÉ3ū”p{1Th4)yØ ™+’Y }Ų4đLčROŖŗä}šŲ`>GŒHÔûÉ÷Š;’’AÜ( i؃,ĶÉSü”Ù`D™ŧ)Ęø€ČĨ~„fWÛX Āú¨V-JF )Ī /Ō8Å3ĄH§ Bɯ̘3"5'’ú€¨Eũ r/0Uô5ďĩ!†;g:ŗ2IAāˆFD‚)"r8Tō`ęíOŌ d,iägü/RhX‰Ž íŖHÍSt…Øl >QĮŒČĻ’ųŅ ]5‘ZADŖeyēn\G " 茈bĸ 4"ô‰t˛žÆOĸ‰:jD)\úxĒõęhe+ ĸaM',˜"ĸHûséŧ)9"Eãu\GLė$Ķí1ât4ÍBŅB_ėM2™ÜŅdīZ'”Õq?ĄCôĖ8OėŅDĐĪ ´ĸ’Gj’čä)T|KåëE:oJķA-šëc—ĶD~Kԇī?Ŧ÷`ļ1õ• Ų€YЂ"‰ŽJáā™Đ?ÄúvīƒGļĩŲÕōšˆbôj­ã–Ę™RpũĒĀ„›Ĩs˛™b Ž XˆnŇšRC—ˆá{Z5¸˜ŌÎÎm¤ÍîížŊŌŽĩyŊ蚈|[ĐT¸ņļߔAÁ\˛ØKŖ™vtĮ‡"EBGujŌ*Gē Dį|įá"–nŦqMD•Î8æ]]›]us؊ÆĒEæœA”e&đKvčƒöŌ*¨ŋÂ'­´1zˆØîœĀKDrË~c@މ(3ÉĻŖgĻO˙ŋPĨž-•“ũ†y~<ÃčW7īÔlæĻę|,˙UŲÛE$F$ļ ēæ ˙}^Ëū<  Œ0,Ō›íōĸJF€čōKæÅū,ÆoãėЌÅS›ĸ9"ú—厂h÷E”mūE¯§:ĘŅO(q ËūtņMŅ•r/a ü™ÎcŸčéÍaâúŠEŅ/KĨ~û%“Ũ %Dˇ’BNøj*Éž-¤EuhMYB÷#ĸqčpņ0?ŠHЖãī–Ĩ†9Ú)[´B–ÆHŌ"kā­ŽčĘW!†×ųHņV‡iƒi„ÁƒĻ] ĸQĻA$ƒÉ9čFq9+ēJ('ęķEĄ80ĖŅNҚÉv)ų‡lqĩŧ^_4÷Uōcū]™*q"ž§ī@DØ]"O# cŽ„MNä÷ŸX˛ŸP_…NbĢöūęoTÆä:ˆ2ЋlQ Õø)ÃՃ+ķ8᠏ˆD”8"ūg–8 ĶæÔvT+‚ˆč%čˇ";6Dכ€ĀŦ9æ™øEg2GZ´8Á"åŠNža Bä“H2(Ųĸžŧ5šŪ ˆ|ū#ņÔĸŠ|ß ŠQrQϰrŨDw߉F”|tș‘PņQ"ēæÚĩ¯|ņ#Ią•䈂e„˙î‘iDŧ„ˆį “hĻ.‘:˛MĪ‚_ ҉ŌķØ ĸ@#".×ģyœaw-?8$=iāE ÂIڑ!JЌû1ŠņĘŧåĸŒIŋD’"œ€ ¨{څ÷ŲL(ęŲL2ęÅ+/ ÷(âø*€'uVA´Ų4¸ėō×pąy†î៕‰t°Z(š'ovJ¯‡(p?%mŲęļĨZAD˙;pPK­$Qûģđ~šđ.qĶDā˛üĘ Æ ‚`6ņ/ŖyŅ–xĨ›‚ŽĐ™nŦĨ¯kåĐ`ĩd ’åc°Q.˙ŗw=Dašr}LŗÃšī,gŠ#i=†ŠD¤ĸ<Đģã'ęņIWÍ÷ zĖb¯WŸŒ‚0Ž Ú¸¯ėō!¨Ø…čŦZ6X-¨á>D˙į䚈„-뀈ÖÔÍ„Ŋ˜ŽKĢiŊ§†ļ§¸cbۅ$l>˜j†{´ ĩę^Hr@+*ģ|ƒæîxĐV4Ž`ĩ$ĀÅÁˇ|9˜\o“¨Čqžųđákh›dí¤ Dw4R­ĩqá-ŋĐ%‰Z-1˛ot¸Äk×AT,Ķ͇ßEDOČõ ØæÃ‡.VoēZ,UĸR’j­ˆōßr ÄSĢ%Fö!â§äzˆōQXîŽu[â.U–•ÉJ­MÍī| ¤øĐu 6šĸü×ŧYk9XœĸŠß'ŠÖڈ(_8_YŒ[×E¤å:ˆōšoŨHd-ęëqŸĶRļœĒ3†Î¸…¯ž¤sg(k!c#w~52šáûęKĸĐôŌ ÉD8‰Ū`÷C~ë‚Ė SĸŽÆęį ö…x_Itî¯mY֏Ûbö×5ų^#ßvŅŗ•§ēŊī|â4¨ÍCÖpę#K5QûB'üųEs’c‚@>ŠõØĪɂOŪsL‰J{üi%ėS' “æ'ÃM€lķžÔĐ:jDa"°ßc6žļēL§h"čGg‡Ÿ12˜‰.uĸ¤ŨíR…éŠSÎ<7J$ĩą^XŪcö¸E|†ĢŋūĨŸqŪi2†ģmhqĨ@SĖDæFŠčv "bhen#S@L}D\ŌÆÛ*ה(Ôõ}Žˆ|ŽöØ1*čŅæ­Æ#ˇŪ/)D$O⭊ "2ŽÜq&:hKDĖ÷@äE+ˆĸĸT´(ú€P7Ј|]ī6vcß´`ŪÜ ÁĖĮâę„(ô ĶNQ'‚ƒq‘6`Ãŋch!čĸˆ€C¯ĄĩĩA$[ÔåZA´%|ōą›ƒr}í!ķ#8Ûķå‘]Šv ĪE”8"āę*Dä,A7Æ\ˇ„h-ĸ„–ã6-%D#"8cŽ šÆDŋYA$­čw9"á–5*ˆä÷7^„?𠈏máŽ{QzQ ĸTa:*ĸtč9ĸ´Œˆ5TŽhŒŠßü }1yũˆŒĸ{~HՕ‰MHÖ "lķDI#ęjDÍDņŅËQ\Aô^(BDŲfD_MŽ…(à ë::cœĄ>‹—5ŅĖLķN‘z= ķɂ蜒ÛTW# sPnŅ<9lŽ(ŅlĪüŠj+ULjø$GÄ Ŗ…T9*X jQ2¸DAŅ߈RœXÅ[ũ?ŋ"WņL´E Į×ÕĶ›Ĩ9(ÚōĖC' Ԙ㯭_—~÷ŧÛC~aĘ­˛QĻFœLũŠlĢ?Á‰Ö8GGœųœˆļ֋ؙūBƒˆFū ]šĸ"š"ˇ@ÔĨü;ЈŊōˇ "ײRc*›q1KčjÔäÍXšƒ* ˆ‚AĮYĻ ų$=Įâ`?ĸ…9(Œņ%38 ē8IũDrõ'¨WG’åˆ Ä["Bw!D4˜WįUDže"G¤/"zDõ˙™ü˜3ĄZĖĶt–æ Đ“Ųų8ˆâ43&X‘ŽļŅÂôŌ(!ÂyYˆÚædĄ]í',(4UŨUų˜īƒœeDŖČ Âvėŧ|L.ᎍvŊĘáˆRĨm‡ŽŅĶ7ŗ0ÅõļÉåųØÍüY$tíszĸĨ9č…,Wü,â¯ÎĪüvw;ŒâŨéiŦD’z đt‰ŖG4DtĒÁÔcœņ 2´…^Ô:Ąß m@%:üƒ4ša˙=Môˆ†ß6ŪŦ]Q„ú*˙ŖĐˆĖFÄŌÖy—,ō˛`D˙p ĸĨ9č…Ā G!gp¨ ãĄ¨ķSšø =Ød¤čÚyËęŪÁmn‰N plā|ŪpBgxDô]Oœ‘˛ĄD#úH$Są˛ÃGMâ ĐįZ…Īn‘/žK†ÎĖMĒ•ĖAAŧXE$u9zÂ`/FT˜ƒĒ ĸqīÅ{ūŌ™*‡÷¯pQ(_/zÂzh%ĮB§n={Ú@o…N x¯ė‰8­s:õŅÁ ÷ė‰3 A{”āÖajsŒr)jüÃäáƒZˆĶœdģmíáˆ|¨Ã*ouöesPzQFD…=RŋęXœ\yŸėFT˜ƒĒí[Õ¤zPV}\v&ĢĄëK%û–r8ĸ$€¨ũ]%”8‘;ßSsPĨÅ DœHúŗÎęfƒ‘sēķ栀h[^°ŨˆĒ[n×Etą§‘ލ?D: ‚.Ââ§ŦbŠß” !7ö“—×°4%ĪˇÕŠüT^U׊w!BÕtŅdĪ~ãáˆ`܁›ˇquŋ¯FŅ—ĖAņÛ'*X ’5ŊNCÜ@ĪvxišĨåΨ,;ÍGdF’ĒxˇŒč{x9˙Iũ×ļF´45ˆŧ"ÕëĸâˆĻ˜Ŗk׉—æ ¯Œ¨˛Ķļ jĩkˆJŗžMr D)>h!N՞ŗĶSŧΒ­#"ōʈÂ.eP×Ržįa_˜ƒféļš;­äĘڅÍUDƒ=[E×DôgąâĸŲ} ‘€9']"â-š\‘6ˇ"Ē’•+žĸ:$íKšjv¸'Ŋæ5ũæFjŗ¨2\"˜@,Éũâ@D sĐíˆ`ĒģžzO•›ûni5ûq˛Įųōšˆ~$¨§Đô"*™ƒâcNazP ēDÃsĐ`+ĸˇ)×B LB¯ÍA‚ˆ‚˛ĶLą™ZL@bÕ0ŨõaˆŒ9č]G¤0KĀ ëҧ›ej1ŊT–Fäg)ß=č/ÍAƒŲŨFäg*šEĐ kD8ņöĘ>ԙdņhІ‹„qo‰HëE‡˜ƒz|ĪøûVäžDqšÍRņB5Û¸ėˆ‹4+ˆ ,–ÔRŲú_OQ§â„ęÔ}æ ĘģŨ}ߎ\Ã-gį‰Õnvē-ÚTsP¨Wƒ,žaËH:]ûCˆS‰ū—˜ƒ‚÷âÖođær ßXJGÖCĢMkLJ~Ĩ%sP…Û˛ęËåũ@9yø°ÆÉũÚõ -ĖA1ŗęmßß-Čņšƒ¯9čŅČņšƒŠĻ°XûǞ„ų'jĨhQpŠ{đĒ'Üõķ¯9¨‘j ‹BQĘkizÂX5ĮĮ,΋=×-æ°+“ŽÍ>FŽ×ÔH؟a) Dåî]#âDU‹f)ĸŦ Zņ…¨ČҚƒæRIaąÅ¯TnEæA#jĨhQPiE^õ„ģŧ/×2ÄŲyôĸ„čĸúEw°8"ēĐ,ΗÕķNč‘–¯'ĸ „(¨~`1•Yœš]VĪŲw‘[BäV?°Xm%å zŸ_/'äÕĶĘËFšÛˆœ"§úÅ ˇ8BŅûüz!0¯žöwŅđķ†ķû÷­"1˝˙ŌrÔs–Đ<-Eá!mõ\֤ˆRŸˇ˜P’‘úU×<Û4ĄŸ9đt¤l íøU ÕRkøŒŽÔį”GüÁÖ 9^DqR$ĻP3ôGÍ(yFĢHK‘;AđTü€ēCÕ¤¸1ßžocœŠĻxōLahķ. œŸØø Yō#xĐ86ĐQšĒ&JĸQz{úoZ(%"1…JãäûŸœfĸA<ˇHK‘;Ad<Nc.ģ˜č „]8Y HڝØ!"Ī›fŠėvĮŸfÛĩŊŖE$é9qĮЉ)T%j Cæzƒ"-Ená‰N ÉF“"´ËŠāÔá ¸D‹ŅöíˇĶ.Q큠媛F›]ŪQ^;ĸÃgt՚pÄõ‘ILˆRåjDÄ/ĸåįˆbŅaŽËg˛UEDrD Ús7 JƒČÛņœ]×bVÛĖĒž2Ŋ¤U×SÛÜėÁ+,fq)2dyŗÕŊu)[Ė.fá›4ĸ"1态Ai :Aøĸ‰væ3íå ЈÃŲ×pQ€HåˆĪIËážrK#Úq™×ŗ˜­‹L´q3¯Špavœč ›ų+,fq'Ķ|ÔŨŗŦĒŗĨŗž#ĘSŽ!ĸé*"l`žÔˆRíå`9|1 Âá`&•ĸ¤@DaøO9Ö'ÚÂĐbv4ÃĒ"é‚0¸hÎĐPĐ´ĸLŗ¨k2["Úũ°•-fŊeqĪ *S(õmDôĶŨˆ~S úvŽHÔ+ˆ~š ßž%{-‹Ų‹mfŲ\tdŋg,čˇ&XžĘ-f/°ũį`D%‹Ųō†ÛjDEb %~ˆäw‘i)Ö}š#?Ęa˛*ˆŪ_"Ōa;4"ą}c˙Zŗ“4Ãø —ĸĪ™FԊ†|ŽĘ-f×íÜú)[Ė–mgĸ‰)Ô û"Ąŗ-EZŠ5DEw=‹rDX †ĸn{"ĩ=ŒäĩĖAaTI•L›=@+ĘŖņ)Tôs‹Ų‰Ļ2(!ÚĶ--fË…Ŗ‰)T†ˆ0<ņŊ"-Eî‘#J´—ƒF”Ą]ûF4,PIŗÛ¤ĸÎĸģ&—WNĘŲWŅö×C”Eh3ĢāV6!Ę-fMÃŽhi1[Ē(•AT$ĻP"ÂÜ $dEZŠÜ b ˆ"ëųT=ŋž%Žh?Č܀uķ$wDkĸícĸÉQĮ}ŋ¤št IDATÆ~ĩtxQ"÷hŸ$nĖŦVEķ'šŊŨG‹DŊŖÂĪũ§ũŦŸŪžtŗ­āܟ|˙jĸjbŠĸ‡f6-E}Db,–(‹~ą@”ÛmΚ¨Øj5ƒG§‰Œ˙čĐ.øÃ_–Dį˙/5bÖ 7fÖč\e%Qu€ÃS˜-_ƒÉGGųä¨ßkdģY´i~Ö Ī%Z1;õ.š‰)˛hhßĖĻĨ¨‚pŗÂØ­ë,ØZ$Úkĸ#Gä Ÿ!ōâIßîĘØíĸŽŨTYŅ^ĮūĐč™u“UDãōIVŽôķÛŗŗQzttx˜¤ÛÛ÷ōhÛ4ŋ€haÄėčøˆ"Üŋé[ĸjb ûģíĸÔmųf6-E}Ä4ĪÃđũÔMuQûŲįČm–; ;›a#pD,ŅŊâ=KôĀnV“ņô7V÷ĮÉųoZ\j8h9 ”›l6n—kŠu3_•O€rÄlš9™gÚ= ÷GŗD…ŨŒ9—haÄlrüˇ,‚°ŊģWøÕÄ–(Ŋķžņ˛[[Í áÍĻĨ¨‚Č>ĖoGģiĢQŧyĶ/‰Ō;ÛAŖđĶ–ģ Û)ŪđÚaĮnÃíĻŲ΍ Īnģīē͊á( EāwoũÉ2vcŨĄ7ucfMēSõĶčøQäˆĘá å›IyūmK”NķÍŦhZĸ›_đD;1ģH4ŠúŦQML‘…&ģßmŽå›é ¯Ŋ6›–ĸ>ĸđōī˜~7Ø377×MöæZ#ģŸ‡ũ|Ŋ¸ žėš›fTŦŲßĩßŊŗq;˛jë}÷ĒÛz{;ęgoާ|~ūY§/5JͤYēc÷fōæÖ†[üÖk4SÅû'ˆŪ­ ˛iáˆėéÁųD #f“Å Ŗ… ŸWSWœ˜–âÜī[B—$Ęo¸%gža˙įˆ‚EĸzÄlųĘy^üQb*"ŗqĸjÄėňĘĮډi)ŽQæŽũŒŒ;;@šRœ$ĒFĖ–oã忘č :1{.҉Ņkåŧ '§Ĩ¸JDvûÚnˇ‡n†Ígˆęŗå_<7ģ—!ĒGĖžK´¸ SM]‘_aĸâ\ĸzÄlųĪMoNôŋ˜¨1{.Ņ"G5uÅÉi)Ž‘{—îČnĀ9ĸ¨Ú„^$˛›zõˆŲō/n‰ÆEr4-ļ3ķãŦjÕ#fGîgfŅQæe“ôCK4ɂҚwŅˆŲüĨĖš`—1; MąžmúyšŠ)ëÅņ2ŖŲˆYwr-ģWņÔíéOŊŅp’‡]͉Î{ĸ-Ž˜]Æ2ËnÅ#fËÍģÉ˙đLįüĐ+ЊGĖ–D.ōÃ.qG^n+1[}˛ģS…—¸#/ˇ˜-‰^âŽ`+1[í_âŽ`+1ëˆVšY÷2Zņ°÷ž‚ˆž0ˇ!Ėīę_íŽėø"srcaqøĪéƒĐĢõĮ|9_>\¸NĩtˆŋÍ}ÃÁY×=ÕU&Zš…“X ×)ßZY<­@ų ĮGˆ/^÷TW˜čăeņ`Ķ'ŦŪk~†¨š(ēŽ$E‹ß–ēSuŨS]aĸsE‡§öhĒ…ŨŗO´`ņ{܇“¯*-ž{jņē§ē&D‹G2<3AHvöΏ{kÖAųqN4[˛‰čøķƒōã+M4ĸ3ļøOœ1,?Ήf[ŋ¯Q Dg /ÕsĸääåæU ōčŒ7ŗĸzå>'ę×˙ŊæD#ķĀ/ŧÔ_ˇ;0ŗƒ=˛¯Ŧ÷˟4‚=ģū.‡÷Ėį~ūUˇ˙ņSso'psZdnų‡C÷=Ķvڋr÷.ģŌaœÚoČËwsļĶ<úˇ–1böe‡Ūa–‡Ãáp~°Įd’LķŸ¸ņēAy’ëh¯Ÿ¤î%7Ļų†×qsZÄŊą;É[yÉÄ-éÛ÷Za2ÍĘ÷ÚŨ•’a’įö˛CG”gn⤎Œ¨žėâ 'ųN8tC!ë#-Qh‰ZŅÍrQŗƉ›3{Zå@QwžÔx0=rc3ė—Ãr`ZšYĸÃlÛĖŽŧŌ 9Ę[Á4s§KĘ Kv‚k9ƒC§“ŧî/wîfK´c?Šˆ†%Q¸H4ÃpDûS7ĢE2ɲ“DaMd˛ŧÅגČXĸAŪ öŨdëƒ=z‘ÉwL^ž[|1QÛ.ļƒÔ&=™¸ņ~ÕĨf¤–›—Ķ…ŽČ\Kĸ"ˆ3w"ųƒĀĖĮ ĸŠ(ÛŽWāš%ŠĪ'r› AVY‚ņŒ¨“L›ētė–Ež3z=‰Ž*"ŋ/QĨAEô3ĸš ŅOëK‹īÖD?uC8Ö¯/QRÅå2§&ĘŧŠč'3ĸOĪ&Jsķ,‘;~¤ŧ4TDÅ7ŨvQãú +ĸŋX$*Ö+ĸ­ŅGgegåŗĮÖaM”—'ėn_[ĸũŠčSã?9žņbˇZŖílGyč^ˇmžM”XužÎ‰úæhF4ą‹kķËpzTĨ›îĖôג(âŖ~v8?Øãá¸$Ę-ŅīBģEY8ĸÎŗDîĀʒčČîŪenĘKtF4pDÍp:uDOrGôøēM“ÂîŠuĪöx8­‰vÂßĪ'r/š/ûîxT‹éQĩfDÅĻŨŒ|t]‰Ü8ėąŲĖöΉüüˆúĪ•ƒ!í—ŊrëڝX2íœ Úš9"ox-‰Ü×§š™šŽ??Øcp8î9ĸÍV#l4=SÜvĮ{¸}´ßœ\ŖŲīĪ?#Ī}Ošī%éZ:Û.ęw’_4Ŧi:.w@ļīEāZíŽ†Ų‡æĐŒ‚ųÁũIzk3ėoú¨Ũ˛ŋ˙^§?ēšt+͈ŧūØm‰įžßq'!OŌû…×ËÖ3û­%Ņčî¨ĩ–ŖėÖV`˛üMŋú×q7ļ§Ą]ė>)ßũĒöøĩŸ}úāfØ3å❍ĩFöžŨ`ÚöÚ߸ņÆZûî­/­5ÚÛvũƚ{)- Ļžņ-?ßų&ĩWJ˓"xí­ÍÔūüŨâ3ĘßXƁŸW¯ķGŋeÅ—žč´2čÕ$zrâ=¸×˜čüŅoOüÛkL´îŋLDTžû/“|/…¨+ûäŲq­/õ4˜§ú‚1—ããwĖę‰öŨ‡jÔIߜ¸e×ųGˇ˙AKOüZ|ō›/ė2DëĪŽÉģĸD'ĪrzV‹Kv1ĸꉖ<û(úC>Ņ^VD4ũ›ęŋ‘9“čuˆˆŌĪĒ˙FFDįTüqõŸČˆčŧöˏå+Å":ŗz†đr•&ĸ3K?vį›(R?Ōī›b3loģw0Ûī‡ž‡RžÉÔü.|wõÕEÖhGãn ÃÁž)îø=ûœ›ė˛âž‡RžÉ´u#|wõÕE–EÉ4ËŖũũØn]ŪØn# ‡éQūĄ‡RžÉ4„IO¯y!š¤n|I¸eQĮíĘ9ŅŖęėQpū‹š¯B!NKĸĐõŨ0–čO‰bú!ĪÕläohęõęہûXŸÕ ¯Y<8d5Į,]dOč†ā4üŠ(ĩû /˙ēÉjĸۍÕŖ>ˉ<ʓÜ Ũ×õ[v/\ĢėŸ‚U܏‹Ŏ(,JĸĝÉ5p÷;Ef5Dõasĸŧ:bŖ>N=‹ĒcD̏—'ú5Ņ߯šhöøMõḐŸ­EšyöQ4Ü_Åũ¸4QūÃr˛ožēbĸꘆ3?V,;Ad˙ÉŨėÃEĸÕüŠ.Oô­Š¨ØŅqGüž"*Ūĩ>OŠN>_\‡Vr×ĒÃ>B3˙4‘;cĻŲŋ"D…#ú§rģhâvũũÃŧŸ Wr×ĘÃ>J• ēāQQWƒ¨˙ÔrøŸ—Dˇéž$ĘŊ’(Ÿ^ĸ_e9š5Ú|qä~EdvŅxķ{ĮDc÷Ü_/‰ŽĻc“.{…riĸ>_e9šûĮk4S=;ĸéN°@TDæ _M-ŅĮË^Ą\Ũ|§ˆâšhęˆŌEĸ´°["IM”ší(Zîš.DQM4,‰˛V¸@´í^6š5ˇˇĸpŠwäę=°Dnʎ"|Įm]ī;ĸŽ78,‰ Kôž#zĮ^ËÍk9éxå4!Y#oœœ ũ…ģēDģã4wSvävŗą¸i÷ŸíŗĢ{ˇ?éŨ+ũQÚōÜÄëöZvŗ˛3ėŪ•Ķ„Ŧk¯ Qŋ}ˇéĻėHŊŽÉŪEĻ{Ë?üĩßhG抉ēÁM7ąG§}×ÍkųI0~ØŨjėlĪt–ŧŧžēDW&a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„-›čņ‰¯.4ŠîUˆĘ“H.U‘7æß˛xņčŊęŋõ!ûŖĐÄÅúÁjŽ~zÉáŖČ럚ĀĪËfŸ-^W‡8õ3qĮ^/kŽp ÷—ųãSDņ|.˛Å‹g‡ÎUÔšãhŊiąšŖ°^vL”ž|FN´xqXO9VåáÔtÍkDtō‚ŗf´+ÂúÄsQĨæqbö_ĸāĸŗŽušČūīŅëBTÛS3ʧ5ŅVTn]›‡EItôĒ/‹RwÎģØÍŨ›‡3°„æIąŸ¤v ;ˆ§š›ÂĪ]íŠIjĸbgFd,QįéáëEÔwŋũã§ņ3DšI§Ž(´[ö2ˇ§o†%ŅQōĒŨžéƒÁ4ũėßÂØü֙=>Šŋ˙Īv˙ĩãüŋGÕŲģŠč$Q”ēųJ,Q˙ÉëAôÎ ™~ō¯ÄnFŠyôˇ’ø,oŊûŽŨęŽ~ēĢŅÔ5ƒŠ(ĻŽČŽŅzÉëAôļ#úŨŸÅîĢązŋJ~ū‰%z;É~4Cwĩ"HŌą;“W'É7Ŗōĩk7ĨKœŒŧņĢž]Ôu/úxváŗ};܆ōØø~tīžŨxôúYŗa3ļÂīdˇ6wÂÆwÜxå; f”E~ę§wĸ•˙+ ˆŠFh‰ėVbšoE%QÃÍkX.xE{õ9§FAž9ēå÷ļŖ›aų>šŨā.Öy˜Ũ_õī°â.÷nėcžĘĢ×åˆ^‰7 /ÛåˆÎŸ×îîrDûĢšWģËŦæN\í.Eô8ZŅŊ¸Ō]Šč§ĢģĻ]ŠhŧĒ{qĨĶ@>LD˜ˆ0a"ÂD„‰[*ŅĶsŋ¨[֋)IšˇØmē—ĨŽ_÷MC“5Žį˜˙ę~Đ~ĄCĸj ãáÂ%íF0ût˙øŌŽ7ŸOģI{|Æāĸņžį~™ųĀõÎsŖâ ŋí&D;>/đ 6ÅúņĀ +đ^ėėĘ$ZÜŽw\šķ{[-œŌx/ Ę1ÚŒĻzČCwkY8:Iä^ ^OŖŲ—õa§f[œmî!Qõ`Ÿ¸ä`öé‘{‡zö(ŠŽŋąŦŸ‡ےŦeŅ(°ĪĢ(=Iäģŗ…fÁėKovo5ŅâSá]hņ§‰ö/] *1‰Š`ŠD#ķ7ũe'ˆŠŗ‰˛hR=įģUH4ü<}Ÿų˛Ņ"‘ũôҏĒį뒈zƍ1íšÜŨŌü¯ˆōų#ģ^\¯žhūG:š}<{¨œ0px‚Č_*Qŋ&*NĖ_Yx%Ņéå]>މžs˛"$š¯ gĪūc,öCŧ@42~ĩ¨\Ņ^I´{Yĸõįģ5$úëŲ'ÉėãŲīŽ.•oú DŠņ+ā%uj"7St´ÖŊˇ¤īZĸuˇF+ŧĩqꏾú֗ŧöČ´#“ųf4˛Ĩ´ÕhŊõ<ˇ†D›ükŲģ“ėŨFôf´ī7"ĶlÜIGÉԄÎŲsŗ7:ĸ4œöĖŊČųæ“æšũb×|îwˇKäfá´$"¯$ZŗDÍ­ 7zĶO:nķ+vDëŊŨÁ^ēåī{ŖvkcŨÂuŖá`Ŗąsīyn ‰6Í4I>õ’Á ¸ˇŊáÛ_rđ8÷;oˇ7˛wÄËīw˅Sâi#ŊÚ՟Ũ ėÅVë†7rķwĩŧÉaü#?^ŌvQ#œmĩ‚ž›K{0ŠŪ9.‰q?múŪ¨ąŦ›ŧaFíČ:ņ^ö\“^áÛ&9L:ƒÉ ΊoĮŽhb:Ū0N~ūYŪMĶr‰ž‡ûnÔč†ŊīC¯đũØ~áæįJ ûXˇDÉp/k&į†?'júŊtķĻ×qãßŨdD–¨û~§—5ũĐŨÛ }7,zt¯ø~g/]Q”<<ŠÜ”dßrDmß|íĮÉũOōčíÁá4ÛuWĖà qC˛ė}ßīaOķm7zĻ$ÚęO’Á¸—ķD+nz'ˆvoĪíũĩƒŠhj‰6QļzöÁŒ˛š¨õ<7‡CĶŗhlĐqß ŗâQgh>5aüÛév}y0™NĘ+†áiĸQVØÛę“ARDK"ōŸ!*˙J]ŋzĸ™N/ßđĸšČ>æ‘įīíUĶ_6"zj7öíļQl˙Ÿ¤ų×ŨAxņĐüĒũ_ũË4o}e8HĻ‘ģbŪ Į5Q¸WŨwÃÔ˛GÔšeí/‹*ĸļģnOē$Š{ųíˇæD]ûÉVđ–#zŽÃ™‰č(‹R‹ŒL<™æßs3WúũmƒŪxš_Ũėv.K4õgDqœäŽčíņĐt’|ųDaVuí׿Ģ3"ŗ–˙ģˇĖŒ(]ŸeĪĩe„ÃA‘¸¤n2ģŧЉō(č;ĸ Žã4w¯ŋ4'*ĸŪ"ŅļŋĶÛãũâģ+!ú´&˛ÂŽá+ĸŦWüQÃm9ĸÜ5ŪjŦīeĪ5c"=ÎŖ<Ėĸ ‹âÁ8̈ėdŪ :É4˃ø'áø4Qcm¨øļŊķ_N÷ŗÁ˛‰ĘMĮ›ŅČs¯zĖˆÆ–¨]møæ‰)E…oˇāžëDúĻIÚŨôf`@Ã$k•ŗL9ĸ"ėôíÂ)´Õ>Ûņ-7ŖEĸˇ{'<\:‘›UŽšQš§P^y=ĶīëģŽ¨iˇAž˜Ŋ‘yŽ9 ‰č‘Ũąđ‹ ëÄũĖÍT&úYÆvAmŸoAŊg˛H”.™¯™’h˛tĸî­(‰öĘ}4ˇF3‘Ũ?ąDũ9Q7zŽ›#ĸáD…ųųYDAM”Ų­é’č^IôeãNĸ,Ņ’ļ‹LMۛ5ŅÁ^gFä÷ŒU˛ģ´Ž(t¯M8"ŋđĖŪãã—$/íįaôĀlü'c‰ūOZŧ[}ķŸ˙- ũûŸE_ æ'x+ĸ#7ņTĩéh70ËWļ:Y´TĸŽ#Ey6#Ú$ę”D[‘#Øgœ˙Ø{˛÷ˇ'ÎėqҐ¨ÃŅí?6Ū‹ŋ{?˙›ięéīīö¯ņ§É'Öėqų{ˇŖŲÖõÔ."ގŽË—ô;š#*‚eíé—DvˇyhÍuĘWˆ6#w,”#ZŽMöžĩ"ģœ?Šļū[Ô|÷Á§ĶüīÚ{r4Ę>ųŨŸ9ĸÍâŨÎpFä6œŅaIôĀ}ÖDqõ;‰ũë?Į=<ŖNėˆ2ŋŸmŪŽˆâÁš}xĮåR¯\œ’¨aŸ÷QlŸq íˇīgøŖĪˆÆ]y°ŅÜÚŲ°›ąģŊqnWĸy8gÛˇ7ÂØîę~ģšŊø’éĶl§Ø5\ļøģiÖڈėĶ !ÚĩÜŨži|įyîâŗõ7CzŅđŗ­7Ö{éV°Ū‰í&Xĸ‘]ĶĩīFÚČ3Y¸åvØ ēésMu D™—zīˇēyŗ[}ģ4ąŖÆz’å[vũo7 ˇŲ]^s×>đģwnŨđL;5Ū\īwīģÅZŖ$zX˜4iGŊ‡ĪsŸ-Úî~wÃ҆ī7îŪzsíã`×-ŋˡaol>Ę×ÚwnØ/Ÿ´Ŗödŋiüû•l]ŋxW~ eg>@ōÆsžģØ+Ctæ›dÅõ Ú_ų-”Id×/ū“WOt°ō[(;ķ´Ų2N°rĸĮáĒoĄęĖc/˛ŗå.×ʉFŅĒoĄ*8ëÂloK­žhÕ7PuažŒŪ­œč;œũš^ũ8ũ3^üGŧę‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0šäúIDATa"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„ũgŌ “øEæIENDŽB`‚leptonica-1.86.0/prog/pdf2jpeg000066400000000000000000000037411506303110300161540ustar00rootroot00000000000000#!/bin/bash # pdf2jpeg # # Rasterizes a PDF file, saving as a set of 24 bpp RGB images # # input: PDF # root name of output files # output: 24 bpp RGB jpeg files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outjpgroot" exit -1 fi inpdffile=$1 outjpgroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" # choose one of the two options below #--------------------------------------------------------------------# # output image size depending on resolution # #--------------------------------------------------------------------# echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r300x300 -q - ${tmppdffile} #echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r150x150 -q - ${tmppdffile} #echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r75x75 -q - ${tmppdffile} #--------------------------------------------------------------------# # output fixed image size # #--------------------------------------------------------------------# #echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -g2550x3300 -r300x300 -q - ${tmppdffile} leptonica-1.86.0/prog/pdf2mtiff000077500000000000000000000027321506303110300163360ustar00rootroot00000000000000#!/bin/bash # pdf2mtiff # # Rasterizes a PDF file, saving as a single multipage g4 compressed # tiff file # # input: PDF file # output file # output: ccitt-g4 compressed mulitipage tiff file # # Note 1: Requires ghostscript # Note 2: If you give it images with bpp > 1, the result will be ugly. # Note 3: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " pdfin tiffout" exit -1 fi pdfin=$1 tiffout=$2 # assert (input pdf filename ends in .pdf) if test ${pdfin##*.} != pdf then echo $scriptname ": " $pdfin "does not end in .pdf" exit -1 fi # 'echo "0 neg 0 neg" translate' is the mysterious "primer" rm /tmp/junkpdf* # --------- Choose one of the two options below --------- # output image size at 300 ppi #echo "0 neg 0 neg" translate | /usr/bin/gs -sDEVICE=tiffg4 -sOutputFile=/tmp/junkpdf%03d.tif -r300x300 -q - ${pdfin} #./writemtiff /tmp junkpdf ${tiffout} # output image size at 600 ppi echo "0 neg 0 neg" translate | /usr/bin/gs -sDEVICE=tiffg4 -sOutputFile=/tmp/junkpdf%03d.tif -r600x600 -q - ${pdfin} ./writemtiff /tmp junkpdf ${tiffout} # ------------------------------------------------------ leptonica-1.86.0/prog/pdf2png000066400000000000000000000024561506303110300160150ustar00rootroot00000000000000#!/bin/bash # pdf2png # # Rasterizes a PDF file, saving as a set of binary png images # # input: PDF # root name of output files # output: png binary files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${tmppdffile} echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppdffile} leptonica-1.86.0/prog/pdf2png-binary000066400000000000000000000021011506303110300172620ustar00rootroot00000000000000#!/bin/bash # pdf2png-binary # # Rasterizes a PDF file, saving as a set of binary png images # # input: PDF # root name of output files # output: 1 bpp png files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpdffile} leptonica-1.86.0/prog/pdf2png-color000066400000000000000000000024671506303110300171330ustar00rootroot00000000000000#!/bin/bash # pdf2png-color # # Rasterizes a PDF file, saving a set of 24 bpp RGB png images # # input: PDF # root name of output files # output: 24 bpp RGB png files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" #echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${tmppdffile} echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppdffile} leptonica-1.86.0/prog/pdf2png-gray000066400000000000000000000024701506303110300167510ustar00rootroot00000000000000#!/bin/bash # pdf2png-gray # # Rasterizes a PDF file, saving a set of 8 bpp grayscale png images # # input: PDF # root name of output files # output: 8 bpp png files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" #echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${tmppdffile} echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppdffile} leptonica-1.86.0/prog/pdf2tiff000066400000000000000000000025631506303110300161600ustar00rootroot00000000000000#!/bin/bash # pdf2tiff # # Rasterizes a PDF file, saving as a set of g4 compressed tiff images # # input: PDF # root name of output files # output: g4 compressed tiff binary files for each page # # Note 1: Requires ghostscript # # Note 2: A modern alternative to ghostcript is to use poplar: # If the pdf is composed of images that were orthographically generated: # pdftoppm -png [output in png] # If the pdf is composed of images that were scanned: # pdftoppm -jpeg [output in jpeg] scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outtifroot" exit -1 fi inpdffile=$1 outtifroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" #echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -r300x300 -q - ${tmppdffile} echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -g2550x3300 -r300x300 -q - ${tmppdffile} #tiffcp -c g4 ${tmppsfile%.*}*.tif $outtiffile leptonica-1.86.0/prog/pdfio1_reg.c000066400000000000000000000321471506303110300167150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pdfio1_reg.c * * Basic high-level interface tests * Single images * Multiple images * Segmented images, with and without colormaps * 1 bpp images * * Low-level interface tests for 1 bpp images */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *data8; l_int32 i, j, seq; size_t nbytes; const char *title; BOX *box; L_COMP_DATA *cid; L_PDF_DATA *lpd; PIX *pix1, *pix2, *pix3; PIX *pixs, *pixt, *pixg, *pixgc, *pixc; PIXCMAP *cmap; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "pdfio1_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "pdfio1_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "pdfio1_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; l_pdfSetDateAndVersion(0); lept_mkdir("lept/pdf1"); #if 1 /* --------------- Single image tests ------------------- */ lept_stderr("\n*** Writing single images as pdf files\n"); convertToPdf("weasel2.4c.png", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file00.pdf", 0, 0, 72, "weasel2.4c.png", NULL, 0); convertToPdf("test24.jpg", L_JPEG_ENCODE, 0, "/tmp/lept/pdf1/file01.pdf", 0, 0, 72, "test24.jpg", NULL, 0); convertToPdf("feyn.tif", L_G4_ENCODE, 0, "/tmp/lept/pdf1/file02.pdf", 0, 0, 300, "feyn.tif", NULL, 0); pixs = pixRead("feyn.tif"); pixConvertToPdf(pixs, L_G4_ENCODE, 0, "/tmp/lept/pdf1/file03.pdf", 0, 0, 300, "feyn.tif", NULL, 0); pixDestroy(&pixs); pixs = pixRead("test24.jpg"); pixConvertToPdf(pixs, L_JPEG_ENCODE, 5, "/tmp/lept/pdf1/file04.pdf", 0, 0, 72, "test24.jpg", NULL, 0); pixDestroy(&pixs); pixs = pixRead("feyn.tif"); pixt = pixScaleToGray2(pixs); pixWrite("/tmp/lept/pdf1/feyn8.png", pixt, IFF_PNG); convertToPdf("/tmp/lept/pdf1/feyn8.png", L_JPEG_ENCODE, 0, "/tmp/lept/pdf1/file05.pdf", 0, 0, 150, "feyn8.png", NULL, 0); pixDestroy(&pixs); pixDestroy(&pixt); convertToPdf("weasel4.16g.png", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file06.pdf", 0, 0, 30, "weasel4.16g.png", NULL, 0); pixs = pixRead("test24.jpg"); pixg = pixConvertTo8(pixs, 0); box = boxCreate(100, 100, 100, 100); pixc = pixClipRectangle(pixs, box, NULL); pixgc = pixClipRectangle(pixg, box, NULL); pixWrite("/tmp/lept/pdf1/pix32.jpg", pixc, IFF_JFIF_JPEG); pixWrite("/tmp/lept/pdf1/pix8.jpg", pixgc, IFF_JFIF_JPEG); convertToPdf("/tmp/lept/pdf1/pix32.jpg", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file07.pdf", 0, 0, 72, "pix32.jpg", NULL, 0); convertToPdf("/tmp/lept/pdf1/pix8.jpg", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file08.pdf", 0, 0, 72, "pix8.jpg", NULL, 0); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixc); pixDestroy(&pixgc); boxDestroy(&box); #endif #if 1 /* --------------- Multiple image tests ------------------- */ lept_stderr("\n*** Writing multiple images as single page pdf files\n"); pix1 = pixRead("feyn-fract.tif"); pix2 = pixRead("weasel8.240c.png"); /* First, write the 1 bpp image through the mask onto the weasels */ for (i = 0; i < 5; i++) { for (j = 0; j < 10; j++) { seq = (i == 0 && j == 0) ? L_FIRST_IMAGE : L_NEXT_IMAGE; title = (i == 0 && j == 0) ? "feyn-fract.tif" : NULL; pixConvertToPdf(pix2, L_FLATE_ENCODE, 0, NULL, 100 * j, 100 * i, 70, title, &lpd, seq); } } pixConvertToPdf(pix1, L_G4_ENCODE, 0, "/tmp/lept/pdf1/file09.pdf", 0, 0, 80, NULL, &lpd, L_LAST_IMAGE); /* Now, write the 1 bpp image over the weasels */ l_pdfSetG4ImageMask(0); for (i = 0; i < 5; i++) { for (j = 0; j < 10; j++) { seq = (i == 0 && j == 0) ? L_FIRST_IMAGE : L_NEXT_IMAGE; title = (i == 0 && j == 0) ? "feyn-fract.tif" : NULL; pixConvertToPdf(pix2, L_FLATE_ENCODE, 0, NULL, 100 * j, 100 * i, 70, title, &lpd, seq); } } pixConvertToPdf(pix1, L_G4_ENCODE, 0, "/tmp/lept/pdf1/file10.pdf", 0, 0, 80, NULL, &lpd, L_LAST_IMAGE); l_pdfSetG4ImageMask(1); pixDestroy(&pix1); pixDestroy(&pix2); #endif #if 1 /* -------- pdf convert segmented with no image regions -------- */ lept_stderr("\n*** Writing segmented images without image regions\n"); pix1 = pixRead("rabi.png"); pix2 = pixScaleToGray2(pix1); pixWrite("/tmp/lept/pdf1/rabi8.jpg", pix2, IFF_JFIF_JPEG); pix3 = pixThresholdTo4bpp(pix2, 16, 1); pixWrite("/tmp/lept/pdf1/rabi4.png", pix3, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* 1 bpp input */ convertToPdfSegmented("rabi.png", 300, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file11.pdf"); convertToPdfSegmented("rabi.png", 300, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file12.pdf"); convertToPdfSegmented("rabi.png", 300, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file13.pdf"); /* 8 bpp input, no cmap */ convertToPdfSegmented("/tmp/lept/pdf1/rabi8.jpg", 150, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file14.pdf"); convertToPdfSegmented("/tmp/lept/pdf1/rabi8.jpg", 150, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file15.pdf"); convertToPdfSegmented("/tmp/lept/pdf1/rabi8.jpg", 150, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file16.pdf"); /* 4 bpp input, cmap */ convertToPdfSegmented("/tmp/lept/pdf1/rabi4.png", 150, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file17.pdf"); convertToPdfSegmented("/tmp/lept/pdf1/rabi4.png", 150, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file18.pdf"); convertToPdfSegmented("/tmp/lept/pdf1/rabi4.png", 150, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/lept/pdf1/file19.pdf"); #endif #if 1 /* ---------- Generating from 1 bpp images (high-level) -------------- */ lept_stderr("\n*** Writing 1 bpp images as pdf files (high-level)\n"); pix1 = pixRead("feyn-fract.tif"); pixWrite("/tmp/lept/pdf1/feyn-nocmap.png", pix1, IFF_PNG); pix2 = pixCopy(NULL, pix1); cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 0, 0, 0); /* with cmap: black bg, white letters */ pixcmapAddColor(cmap, 255, 255, 255); pixSetColormap(pix2, cmap); pixWrite("/tmp/lept/pdf1/feyn-cmap1.png", pix2, IFF_PNG); cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 200, 0, 0); /* with cmap: red bg, white letters */ pixcmapAddColor(cmap, 255, 255, 255); pixSetColormap(pix1, cmap); pixWrite("/tmp/lept/pdf1/feyn-cmap2.png", pix1, IFF_PNG); convertToPdf("/tmp/lept/pdf1/feyn-nocmap.png", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file20.pdf", 0, 0, 0, NULL, NULL, 0); convertToPdf("/tmp/lept/pdf1/feyn-cmap1.png", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file21.pdf", 0, 0, 0, NULL, NULL, 0); convertToPdf("/tmp/lept/pdf1/feyn-cmap2.png", L_FLATE_ENCODE, 0, "/tmp/lept/pdf1/file22.pdf", 0, 0, 0, NULL, NULL, 0); pixDestroy(&pix1); pixDestroy(&pix2); #endif #if 1 /* ---------- Generating from 1 bpp images (low-level) -------------- */ lept_stderr("\n*** Writing 1 bpp images as pdf files (low-level)\n"); pix1 = pixRead("cat-and-mouse.png"); pix2 = pixConvertRGBToCmapLossless(pix1); /* restore the cmap */ /* Add a black/white colormap */ cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 255, 255, 255); /* white = 0 */ pixcmapAddColor(cmap, 0, 0, 0); /* black = 1 */ pixSetColormap(pix2, cmap); /* replace with a b/w colormap */ pixWrite("/tmp/lept/pdf1/cat-and-mouse-cmap1.png", pix2, IFF_PNG); /* Generate a pdf from this pix. The pdf has the colormap */ pixGenerateCIData(pix2, L_FLATE_ENCODE, 0, 0, &cid); lept_stderr(" Should have 2 colors: %d\n", cid->ncolors); cidConvertToPdfData(cid, "with colormap", &data8, &nbytes); l_binaryWrite("/tmp/lept/pdf1/file23.pdf", "w", data8, nbytes); lept_free(data8); /* Generate a pdf from the colormap file: * l_generateCIDataForPdf() calls l_generateFlateDataPdf() * which calls pixRead(), removing the cmap */ l_generateCIDataForPdf("/tmp/lept/pdf1/cat-and-mouse-cmap1.png", NULL, 75, &cid); lept_stderr(" Should have 0 colors: %d\n", cid->ncolors); cidConvertToPdfData(cid, "no colormap", &data8, &nbytes); l_binaryWrite("/tmp/lept/pdf1/file24.pdf", "w", data8, nbytes); lept_free(data8); /* Use an arbitrary colormap */ cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 254, 240, 185); // yellow pixcmapAddColor(cmap, 50, 50, 130); // blue pixSetColormap(pix2, cmap); pixWrite("/tmp/lept/pdf1/cat-and-mouse-cmap2.png", pix2, IFF_PNG); /* Generate a pdf from this pix. The pdf has the colormap. */ pixGenerateCIData(pix2, L_FLATE_ENCODE, 0, 0, &cid); lept_stderr(" Should have 2 colors: %d\n", cid->ncolors); cidConvertToPdfData(cid, "with colormap", &data8, &nbytes); l_binaryWrite("/tmp/lept/pdf1/file25.pdf", "w", data8, nbytes); lept_free(data8); /* Generate a pdf from the cmap file. No cmap in the pdf. */ l_generateCIDataForPdf("/tmp/lept/pdf1/cat-and-mouse-cmap2.png", NULL, 75, &cid); lept_stderr(" Should have 0 colors: %d\n", cid->ncolors); cidConvertToPdfData(cid, "no colormap", &data8, &nbytes); l_binaryWrite("/tmp/lept/pdf1/file26.pdf", "w", data8, nbytes); lept_free(data8); pixDestroy(&pix1); pixDestroy(&pix2); #endif regTestCheckFile(rp, "/tmp/lept/pdf1/file00.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file01.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file02.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file03.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file04.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file05.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file06.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file07.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file08.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file09.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file10.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file11.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file12.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file13.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file14.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file15.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file16.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file17.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file18.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file19.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file20.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file21.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file22.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file23.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file24.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file25.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf1/file26.pdf"); return regTestCleanup(rp); } leptonica-1.86.0/prog/pdfio2_reg.c000066400000000000000000000360401506303110300167120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pdfio2_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void GetImageMask(PIX *pixs, l_int32 res, BOXA **pboxa, L_REGPARAMS *rp, const char *debugfile); static PIX * QuantizeNonImageRegion(PIX *pixs, PIX *pixm, l_int32 levels); int main(int argc, char **argv) { l_uint8 *data; l_int32 w, h, same; size_t nbytes; BOXA *boxa1, *boxa2; L_BYTEA *ba; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "pdfio2_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "pdfio2_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "pdfio2_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; l_pdfSetDateAndVersion(0); lept_mkdir("lept/pdf2"); /* ---------- pdf convert segmented with image regions ---------- */ lept_stderr("\n*** Writing segmented images with image regions\n"); startTimer(); /* Get the image region(s) for rabi.png. There are two * small bogus regions at the top, but we'll keep them for * the demonstration. */ pix1 = pixRead("rabi.png"); pix2 = pixScaleToGray2(pix1); pixWrite("/tmp/lept/pdf2/rabi8.jpg", pix2, IFF_JFIF_JPEG); pix3 = pixThresholdTo4bpp(pix2, 16, 1); pixWrite("/tmp/lept/pdf2/rabi4.png", pix3, IFF_PNG); pixDestroy(&pix2); pixDestroy(&pix3); pixSetResolution(pix1, 300, 300); pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixGenerateHalftoneMask(pix1, NULL, NULL, NULL); pix3 = pixMorphSequence(pix2, "c20.1 + c1.20", 0); boxa1 = pixConnComp(pix3, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, 0.5, 0.5); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* 1 bpp input */ convertToPdfSegmented("rabi.png", 300, L_G4_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file00.pdf"); convertToPdfSegmented("rabi.png", 300, L_JPEG_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file01.pdf"); convertToPdfSegmented("rabi.png", 300, L_FLATE_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file02.pdf"); /* 8 bpp input, no cmap */ convertToPdfSegmented("/tmp/lept/pdf2/rabi8.jpg", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file03.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/rabi8.jpg", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file04.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/rabi8.jpg", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file05.pdf"); /* 4 bpp input, cmap */ convertToPdfSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file06.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file07.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file08.pdf"); /* 4 bpp input, cmap, data output */ data = NULL; convertToPdfDataSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/lept/pdf2/file09.pdf", "w", data, nbytes); lept_free(data); convertToPdfDataSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/lept/pdf2/file10.pdf", "w", data, nbytes); lept_free(data); convertToPdfDataSegmented("/tmp/lept/pdf2/rabi4.png", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/lept/pdf2/file11.pdf", "w", data, nbytes); lept_free(data); lept_stderr("Segmented images time: %7.3f\n", stopTimer()); boxaDestroy(&boxa1); boxaDestroy(&boxa2); #if 1 /* -------- pdf convert segmented from color image -------- */ lept_stderr("\n*** Writing color segmented images\n"); startTimer(); pix1 = pixRead("candelabrum.011.jpg"); pix2 = pixScale(pix1, 3.0, 3.0); pixWrite("/tmp/lept/pdf2/candelabrum3.jpg", pix2, IFF_JFIF_JPEG); GetImageMask(pix2, 200, &boxa1, rp, "/tmp/lept/pdf2/seg1.jpg"); convertToPdfSegmented("/tmp/lept/pdf2/candelabrum3.jpg", 200, L_G4_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file12.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/candelabrum3.jpg", 200, L_JPEG_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file13.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/candelabrum3.jpg", 200, L_FLATE_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/lept/pdf2/file14.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); pix1 = pixRead("lion-page.00016.jpg"); pix2 = pixScale(pix1, 3.0, 3.0); pixWrite("/tmp/lept/pdf2/lion16.jpg", pix2, IFF_JFIF_JPEG); pix3 = pixRead("lion-mask.00016.tif"); boxa1 = pixConnComp(pix3, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, 3.0, 3.0); convertToPdfSegmented("/tmp/lept/pdf2/lion16.jpg", 200, L_G4_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file15.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/lion16.jpg", 200, L_JPEG_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file16.pdf"); convertToPdfSegmented("/tmp/lept/pdf2/lion16.jpg", 200, L_FLATE_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file17.pdf"); /* Quantize the non-image part and flate encode. * This is useful because it results in a smaller file than * when you flate-encode the un-quantized non-image regions. */ pix4 = pixScale(pix3, 3.0, 3.0); /* higher res mask, for combining */ pix5 = QuantizeNonImageRegion(pix2, pix4, 12); pixWrite("/tmp/lept/pdf2/lion16-quant.png", pix5, IFF_PNG); convertToPdfSegmented("/tmp/lept/pdf2/lion16-quant.png", 200, L_FLATE_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/lept/pdf2/file18.pdf"); lept_stderr("Color segmented images time: %7.3f\n", stopTimer()); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); boxaDestroy(&boxa1); boxaDestroy(&boxa2); #endif #if 1 /* -- Test simple interface for generating multi-page pdf from images -- */ lept_stderr("\n*** Writing multipage pdfs from images"); startTimer(); /* Put four image files in a directory. They will be encoded thus: * file1.png: flate (8 bpp, only 10 colors) * file2.jpg: dct (8 bpp, 256 colors because of the jpeg encoding) * file3.tif: g4 (1 bpp) * file4.jpg: dct (32 bpp) */ lept_mkdir("lept/image"); pix1 = pixRead("feyn.tif"); pix2 = pixRead("rabi.png"); pix3 = pixScaleToGray3(pix1); pix4 = pixScaleToGray3(pix2); pix5 = pixScale(pix1, 0.33, 0.33); pix6 = pixRead("test24.jpg"); pixWrite("/tmp/lept/image/file1.png", pix3, IFF_PNG); /* 10 colors */ pixWrite("/tmp/lept/image/file2.jpg", pix4, IFF_JFIF_JPEG); /* 256 colors */ pixWrite("/tmp/lept/image/file3.tif", pix5, IFF_TIFF_G4); pixWrite("/tmp/lept/image/file4.jpg", pix6, IFF_JFIF_JPEG); startTimer(); convertFilesToPdf("/tmp/lept/image", "file", 100, 0.8, 0, 75, "4 file test", "/tmp/lept/pdf2/file19.pdf"); lept_stderr("4-page pdf generated: /tmp/lept/pdf2/file19.pdf\n" "Multi-page gen time: %7.3f\n", stopTimer()); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); #endif regTestCheckFile(rp, "/tmp/lept/pdf2/file00.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file01.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file02.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file03.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file04.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file05.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file06.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file07.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file08.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file09.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file10.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file11.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file12.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file13.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file14.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file15.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file16.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file17.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file18.pdf"); regTestCheckFile(rp, "/tmp/lept/pdf2/file19.pdf"); #if 1 /* ------------------ Test multipage pdf generation ----------------- */ lept_stderr("\n*** Writing multipage pdfs from single page pdfs\n"); /* Generate a multi-page pdf from all these files */ startTimer(); concatenatePdf("/tmp/lept/pdf2", "file", "/tmp/lept/pdf2/cat_lept.pdf"); lept_stderr("All files are concatenated: /tmp/lept/pdf2/cat_lept.pdf\n" "Concatenation time: %7.3f\n", stopTimer()); #endif #if 1 /* ----------- Test corruption recovery by concatenation ------------ */ /* Put two good pdf files in a directory */ startTimer(); lept_rmdir("lept/good"); lept_mkdir("lept/good"); lept_cp("testfile1.pdf", "lept/good", NULL, NULL); lept_cp("testfile2.pdf", "lept/good", NULL, NULL); concatenatePdf("/tmp/lept/good", "file", "/tmp/lept/pdf2/good.pdf"); /* Make a bad version with the pdf id removed, so that it is not * recognized as a pdf */ lept_rmdir("lept/bad"); lept_mkdir("lept/bad"); ba = l_byteaInitFromFile("testfile2.pdf"); data = l_byteaGetData(ba, &nbytes); l_binaryWrite("/tmp/lept/bad/testfile0.notpdf.pdf", "w", data + 10, nbytes - 10); /* Make a version with a corrupted trailer */ if (data) data[2297] = '2'; /* munge trailer object 6: change 458 --> 428 */ l_binaryWrite("/tmp/lept/bad/testfile2.bad.pdf", "w", data, nbytes); l_byteaDestroy(&ba); /* Copy testfile1.pdf to the /tmp/lept/bad directory. Then * run concat on the bad files. The "not pdf" file should be * ignored, and the corrupted pdf file should be properly parsed, * so the resulting concatenated pdf files should be identical. */ lept_stderr("\nWe attempt to build from a bad directory\n"); lept_stderr("******************************************************\n"); lept_stderr("* The next 3 error messages are intentional *\n"); lept_cp("testfile1.pdf", "lept/bad", NULL, NULL); concatenatePdf("/tmp/lept/bad", "file", "/tmp/lept/pdf2/bad.pdf"); lept_stderr("******************************************************\n"); filesAreIdentical("/tmp/lept/pdf2/good.pdf", "/tmp/lept/pdf2/bad.pdf", &same); if (same) lept_stderr("Fixed: files are the same\nAttempt succeeded\n"); else lept_stderr("Busted: files are different\n"); lept_stderr("Corruption recovery time: %7.3f\n", stopTimer()); #endif #if 0 { char buffer[512]; char *tempfile1, *tempfile2; l_int32 ret; lept_stderr("\n*** pdftk writes multipage pdfs from images\n"); tempfile1 = genPathname("/tmp/lept/pdf2", "file*.pdf"); tempfile2 = genPathname("/tmp/lept/pdf2", "cat_pdftk.pdf"); snprintf(buffer, sizeof(buffer), "pdftk %s output %s", tempfile1, tempfile2); ret = callSystemDebug(buffer); /* pdftk */ lept_free(tempfile1); lept_free(tempfile2); } #endif return regTestCleanup(rp); } static void GetImageMask(PIX *pixs, l_int32 res, BOXA **pboxa, L_REGPARAMS *rp, const char *debugfile) { PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; pixSetResolution(pixs, 200, 200); pix1 = pixConvertTo1(pixs, 100); pix2 = pixGenerateHalftoneMask(pix1, NULL, NULL, NULL); pix3 = pixMorphSequence(pix2, "c20.1 + c1.20", 0); *pboxa = pixConnComp(pix3, NULL, 8); if (debugfile) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_COPY); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixaDisplayTiledInRows(pixa, 32, 1800, 0.25, 0, 25, 2); pixWrite(debugfile, pix4, IFF_JFIF_JPEG); pixDisplayWithTitle(pix4, 100, 100, NULL, rp->display); pixDestroy(&pix4); pixaDestroy(&pixa); } else { pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } return; } static PIX * QuantizeNonImageRegion(PIX *pixs, PIX *pixm, l_int32 levels) { PIX *pix1, *pix2, *pixd; pix1 = pixConvertTo8(pixs, 0); pix2 = pixThresholdOn8bpp(pix1, levels, 1); pixd = pixConvertTo32(pix2); /* save in rgb */ pixCombineMasked(pixd, pixs, pixm); /* rgb result */ pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } leptonica-1.86.0/prog/pdfseg_reg.c000066400000000000000000000153131506303110300167770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pdfseg_reg.c * * Generates segmented images and encodes them efficiently in pdf. * The encoding is mixed-raster, with the image parts encoded as * DCT at one resolution and the non-image parts encoded at (typically) * a higher resolution. * * Uses 6 images, all segmented and scaled to a fixed width */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* All images scaled to this width */ static const l_int32 WIDTH = 800; int main(int argc, char **argv) { l_int32 h; l_float32 scalefactor; BOX *box; BOXA *boxa1, *boxa2; BOXAA *baa; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "pdfseg_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "pdfseg_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "pdfseg_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_rmdir("lept/pdfseg"); lept_mkdir("lept/pdfseg"); baa = boxaaCreate(5); /* Image region input. */ pix1 = pixRead("wet-day.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/lept/pdfseg/0.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/0.jpg"); /* 0 */ box = boxCreate(105, 161, 620, 872); /* image region */ boxa1 = boxaCreate(1); boxaAddBox(boxa1, box, L_INSERT); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Compute image region at w = 2 * WIDTH */ pix1 = pixRead("candelabrum.011.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pix3 = pixConvertTo1(pix2, 100); pix4 = pixExpandBinaryPower2(pix3, 2); /* w = 2 * WIDTH */ pix5 = pixGenerateHalftoneMask(pix4, NULL, NULL, NULL); pix6 = pixMorphSequence(pix5, "c20.1 + c1.20", 0); pix7 = pixMaskConnComp(pix6, 8, &boxa1); pix8 = pixReduceBinary2(pix7, NULL); /* back to w = WIDTH */ pix9 = pixBackgroundNormSimple(pix2, pix8, NULL); pixWrite("/tmp/lept/pdfseg/1.jpg", pix9, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/1.jpg"); /* 1 */ boxa2 = boxaTransform(boxa1, 0, 0, 0.5, 0.5); /* back to w = WIDTH */ boxaaAddBoxa(baa, boxa2, L_INSERT); boxaDestroy(&boxa1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); /* Use mask to find image region */ pix1 = pixRead("lion-page.00016.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/lept/pdfseg/2.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/2.jpg"); /* 2 */ pix3 = pixRead("lion-mask.00016.tif"); pix4 = pixScaleToSize(pix3, WIDTH, 0); boxa1 = pixConnComp(pix4, NULL, 8); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Compute image region at full res */ pix1 = pixRead("rabi.png"); scalefactor = (l_float32)WIDTH / (l_float32)pixGetWidth(pix1); pix2 = pixScaleToGray(pix1, scalefactor); pixWrite("/tmp/lept/pdfseg/3.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/3.jpg"); /* 3 */ pix3 = pixGenerateHalftoneMask(pix1, NULL, NULL, NULL); pix4 = pixMorphSequence(pix3, "c20.1 + c1.20", 0); boxa1 = pixConnComp(pix4, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, scalefactor, scalefactor); boxaaAddBoxa(baa, boxa2, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); boxaDestroy(&boxa1); /* Page with no image regions */ pix1 = pixRead("lucasta.047.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); boxa1 = boxaCreate(1); pixWrite("/tmp/lept/pdfseg/4.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/4.jpg"); /* 4 */ boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Page that is all image */ pix1 = pixRead("map1.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/lept/pdfseg/5.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/lept/pdfseg/5.jpg"); /* 5 */ h = pixGetHeight(pix2); box = boxCreate(0, 0, WIDTH, h); boxa1 = boxaCreate(1); boxaAddBox(boxa1, box, L_INSERT); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Save the boxaa file */ boxaaWrite("/tmp/lept/pdfseg/images.baa", baa); regTestCheckFile(rp, "/tmp/lept/pdfseg/images.baa"); /* 6 */ /* Do the conversion */ l_pdfSetDateAndVersion(FALSE); convertSegmentedFilesToPdf("/tmp/lept/pdfseg", "jpg", 100, L_G4_ENCODE, 140, baa, 75, 0.6, "Segmentation Test", "/tmp/lept/regout/pdfseg.7.pdf"); L_INFO("Generated pdf file: /tmp/lept/regout/pdfseg.7.pdf\n", rp->testname); regTestCheckFile(rp, "/tmp/lept/regout/pdfseg.7.pdf"); /* 7 */ boxaaDestroy(&baa); return regTestCleanup(rp); } leptonica-1.86.0/prog/pedante.079.jpg000066400000000000000000002113071506303110300171670ustar00rootroot00000000000000˙Ø˙āJFIFZZ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀJ˛"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?Ŗ%ŋĘÃįüŠåĩ(Ė:åœxx€üØ× 4Ci'ųW'¯ZøHėdĮü˛đ#^l]™čî>{?Ũ ƒ‚ĸåíhĘĮ_ƈíI õą˛m•FvātĀĻ5ą?2Œķé@Œˇĩ+ČäįŊH`?Ž+EĸāŧԘGĖFzsEĀÎH7$š˜ ä´ķZ++¸¯Í9 ØÆ)ÜFi´ åR‹eč98ĢËā _¯Ŋ.ĐeHÚpx  bČã pFU{÷­Jî#åÆ9Ąc“Ž}i ĖÂ7íÉÍ<[§úUņn d3d“¸bä*ã‚=…;ˆÉhI=pOJ_!Ö7ÜۇaŽŋJŌktķr{r)Ē€PŠā`sšC(}˜…Ëqƒ‘‘QÉjHÎ<{f´Qk.y HöĒP0GjC9[Š&…ŋw’ ĢöHĶE†āúUém#|–C¸~b eP@_B !éb´P¸ÎWŠļîvāãŸQZ-nž€T‘ÂĮ9äšb2fÚ@nāÔąÃ“´íŨÔj䊊ß6á‘Ö”F*œgŽ P{r“‚āŽX.%eÆ=ąŪĩZ$ã Q4*~´ĪŨ(ųˆŽ@Å8I#ƒØ‘Ā5kĘRnĸöd*0HŧĐķ2âHĀätéSFÅ[į@F}{UĪ!Qæ=:žsH!Ā߀AíÅ]Q×hų}jGuÎÜi `Ž8íéŠqƒËMģŗˇ§<Đ"2ᐸ9īJe” î´&ĮōÍ9b ĘņĶĩJĨŽPņÅ)uä„Éė)æ3ģ‚?5ĸęGYˆņÎ1ŠĩåČNšĮJ”ÆYą¸g<â€9ųlüŽU[×8éJ‘dž ôéÍt mæÜ21 SF—9\c¨æ‹…{js hGĘ$ŽŧœUˆ!_˛ÄûT0VRų÷Ģ7Û7ÂÁSČüMG g#8ÎSũ•ZwD5НN@Á+“Ÿbk;Į.ĒĘ[•īÅtšËitpIŲÜŸZägˆĄ‰í ‡ā¯¨úÕÅ]jKv4<Ų{D§ßpĸŗ~Ô̸Įm´QĘĮ­yC<ôÅbj–f}rˁ’#9Ķ$×DŽ'§5F÷RÔķÛ˜¨e"hŖ*!wcb5ČôĮQRĸęũ(Ú võŠCd°CƒÆinj@"Ŧ´J䞤ĩ Œr8Í"hHn[qŠiŧĀG öŠĀr?jPW+í“L„gËÄŌ8ˇĻP€Ķĩ*œt ô Ÿ…›åPšĮ~”!SHleāúŽÔ÷‰•=sKJNJpí@”Q@ œĐņƒ’'5"€ĀĄ'ŒQŧ§yĮĩ ”ē/îÂîįnj\’ˆĮ¯ëJbP~o^?Ų§‚Œzz~´ÂŦFFę8ü¨`唨\§5#ãŠÆë@ÚW‘ô⁌ÚpG§jC6pãĻÚ āãĨ Q´ŒķŽ4‡q? #Ūmį8ŠÂƒˇžq֐…NAÎG_įHų@žWļiáI*qÜR(#~AāzĐŋ#Ŧ$g94à gŠcŒdå=ĒU`ø'šM˓‡ī@ 1ņ÷AÎj5ĻĀáyŠ7ģ0Úë÷š#Ąø pJŽ!P˙s“ƒÅ)„Ŋ:Ôá3Ė9=ĒE@[×&˜|ŧĄĘ‚ãßšbä õúÕÃÛÁÁü錍ķe†q֋‰rņiâ`T€xĀ4ø™‡=;R€CŸ—Ûĩ+E#(\mīN9 ō0Om Ž9¨ĖN‡äĀšPÎÜc¯==éí`K=iãp'ŽzđiŲrHĪ\Ͱ4aäC°œŽ[Ž8âœņĢ)ųG^*mŒ[wģé@ÃĀ¤Cņ‡f ÷›[‚ŲČÃZ0w2ŽA¨Ú āđ °üč„…†č¤õô5'–įōÍ[û>Tå}điģB§pE"ŽT0…Îs‘MxžLmäw­K3ƒæmÆzœ{Ԍ•ã#­SĸtëÔ×ņ¨Ųví$ä!Wv°3ž™*-ˆNHûĀŽ´ Ģ#ĻĐˆnžĩ]cÁf= M Âŗčy¨Ēčß6ā /CĪAHhŠō!#Ēá[Ķۘ€˜›Đ?Zĩ0ųŖ ŸŧxüE@ą†@Gf9ũjŖąܯ™ š9ƌgë\ίhÂ=Â?—9<×Wrs'mƒƒØwŦ]ZXĸ;X6Č˙ëÕ&Ķ“FBÄ ŒQVąny ˜?ėŠ*Ž+ž äägŌ¨j1ČڅŗÆ2DRz•âĩ#ã8ÅGpö¨ cŖžũ*%°ã¸ëbÆ6˛qĮ#>´õɧŒÜœPĀ``9¤†ČАIęīíMįvHÆqÅ9‘ƒ‘ģ N(Úį9 C3[ŒU9™“.žinf‰fXg žĀPŽ—Iĩąĩ˛0OQC’™#Õf3´‘ÜÔ# sŒsÎ)į”Ü ^ZŠV œoCéJCuĮ>õ3ųyÜ ë‘Ū¤W8ûߑĻ!p8Š÷ö ¨$ €ĨBŒv¸cԒ8õĄĸC"°ŨĪŪ ãŒĐĖ €x$r)à ÜāņíMŪ6€ĮŸįÛ4ŒōoF•ĮĖ;û”(#îā{S#(Üõ፠Hr~a“éõĨc´đpsžh ëĀã<HëÆũšėGz„ΆašXڞ—ĀT9 cãeDQŒũk#YÖ­-ĻŽÍnēœŠ9?ZĶ—–ã z1\fŸ§L5fååY$!É%UTų†ĪáT’ļĸץēú‚éšC\NųJI8É'5ˇˆ­õ fx’E ‡B¤ŸĄúÕd ›XŒ;ĀC,–ûĀŽ<Īĩ`IöâĐ$˙hŽÍîe˜‡>æãÔgķéBŠhŗ:k-DWvį?7§$úũĢ_Ŋ’oK˜ÆíŒ…|ÅĮP{õŦ¯ Č÷Qw’Eæ6pĀ1ū‚#-Ū—$rfé%|™]§w>Ÿwķ§Ę¯f&ôšÔé×+"§™ ķZąĸƒ€ įūxŦ‹41ÚF‚Āzæĩ"“åÉž´NX×ĐÔE›wcœ´ņ"Ē‚{*ČžfĀĮp õôŖkyŒ`᝭7zļėĄūU"md#¯jC~ö3õǎR403›îņ“V0ÛīW'ˇNũu0Û.=qų˙TH‘ÆŋŊnIÚ3īY•˛JŸ3ŽØ5ģ:ŒH̃ōŒįˇ5“¨ō>l€ ČZÕ -Té/žĨžāa¸íūsE_´‘<ˆôHŽå ëÎ)ˇkēîÔädĮéOŒˇ_ÆŠjLÉĒéÅ~îŲ7ūiS-‡Í#ā㌜œvÍ áH#…õаq3MČ?)˙?֒ÚŠœtę*•ÔžMŋ˜9#9ëW;N8’k?Qĩ{ÛI`Wzt*qÁ09ŊCPķļKhöō1}„—žqęišf§p’ŨEtŅb Á‚ß.OSīúUwŅŽ,ėmc1[¤‘*ĖrIâĄmîO™%ŒÜ 1īp1ĶŋéĪZĶŨ؝w'ūÛžkËPíl"‘Ĩķ|žF8;ŗôümEâ-5ā/`,Ē2<Õã=;×;oĻÜÄmÄn"33mbwo9ôã4Ë \Ŋ¯<•&Ņ­™ōz–ÎqŠq^]ށ|4nu(§–(ØD¨¨­#+iĪuíéŌˇnŦ$¸‚UÚŧŠ‘Ķ"“垁¯RŊŸˆâŊļIC*ųĘ#r3īõü*ļ—â[%ËjÛDĪå‡bãÔäÖlŪŋXmQž‘E•y(Āõ۞q͎Ŋ+xf{–‘ĨŽ"‚åæX„Œ7Š\HÖŽŅäu˛j‘É`et8ÃëĐņPO~Ü'*y"°î-o4ÍÚ+D‰$‰•Z<IåGSԎOé[pí‘|™Uxîk6ŦUĖéuk7šh!š2ËķHÃ×"ĸˇÖlÄŅ´p“'ĘqƒČ ŠĨqášĐŨĖ™Õ€ ˇ™Ÿ•Ž8ëמƒĨG˙åäR[ČH;1}åŽĐû°FÜ7׃õĢ´{“yv:]/VķŦŖ“P–Ņ$y Ą†\ŖsŽzûTS,Pę’N’íilŅ/I1÷[ęÎŪhŠdļâtPÂn@?ÆáÎ3Ķ‚?töö@ÅōÔ8ô8Šv[1Ģõ"ŽęÎÜ´Ņc˛å~ĸŗõ;ĨYėn-Ĩ;Z(˜ß˜učAĀ^O ŪŽ›-ąh27…œäŗá°xāũi’čW:ĪąZî9LJąv“Ķ’zūŌ÷ ģltVw6­˛)H˙‡pĪN¸ūĩFimŋ´~Ö$C IwŒg=3×Ūŗ,ŦKNōExĩ¤ €ÛøäRZéq´ÎhKHņ4EŲĖŦsģŽŋ^h˛]Bíô:Š[Ē{¨V8ˆŪKŒz}*’ë÷G]{#fō<Á*“ģ9ÆoZĸš -´éĨXåžÆxķĩ]™vį$cņ¨¤đæŖŸ’‹#ÎŪsŋ9\õöĄ%Ü.ÍÁ¨M%ŗ¨|ī$ƒœøÕ]CPē†Ūe‰w…Œ|ŦØÎ=Ā>õJ+itĪ.E´\Üܤn¯9ŨŒĀü–ļu;6:}ĘÛÂdĒĸHÆrH6ŗ*úúV§<°ZēîŽ&U?1$€G÷ŽŖí›•d]ŽÅOÔtŽ6-QŽŌ’"EoK1ˇÄ`öî3œS~ÉŠFtņ,S ‡÷šKœĘxÂãŽASqOfJ}:(5ˇ™§Ō+¤nQŠ:ä}j{mJfL¸ÆLđ+‘=üVķ[[ZÎŦf”īö¨1L`äŽ}°kwí3éz476“JÅSí ÆäČäķô¤âē KšŦēģŗ7ˇSŒg­TšQqs¨~ëâéøP–q’J+íUŗœÚ¸Č,õ;EŠQĸ%d¸ÜdW!8>X#§˙ވÆãrąŪę3įN‘r§+Œg­dÛj’Û"XÉQ+—¸Ō/nô™b†ŌęUkh܉I\g’ĨģcŽ8­IēˇÕoí%Š×Đ3:ぃĀ'œķšŽD–äķ]ėusę ›^Ĩ¸yÕ9]ÁI™>™Íb˙ÂNĶ%Ŧ[LËs™ōŽDg8Á?­EŦZ]\ŪØĒG3څ5bl1b>\Ž8Öą ĶuˇŗYÜĮ*ŲIā 8ÛߨāûŠ#mAŊt:‘­â<ēė#ŋN*Œ^-ŪĨąŖ7Rz âĩ˜fļĶ%ĩÚ,Žd|äžĪÔgŸsYVÚ.Ē6HģĄmÎ@ĢTŖkļKŠ+Ų#Ũ!Ô­¤XuV—„^H̘r‡Ÿn+đŽ›pĢģ“#Gš"UUĪR}Iũ+˛V?ē} bėhShVIÕę1ĪozzÛ¯BĐr1V^2HÃc)9$Œuũ*l;•Ū?-íäsQJ€Žät5qÆ9ŨŽEWuË|§¯ sf;ą‘ĮZ ‘Žōģ~Fî:æ´Ža‘Ū<zúž*Šˇ+ēEœŪ‘C$Ép^N)‘ĩ÷tį?Ÿ˙Ē­:~õ>\އ퍪_–LcįUD–¤W„¤LšÂīP1ߞ•“¨!šL ã9&ļ/ŋÔĘv†ƒƒß“Íd=ČxˇT˜`z—šQ2~Í(ãaüÍ'Ú1Įž8öĸŽėV; ]Í}ĄÁq4Š+ąoš<`Į=ąVīÉ[ģcėܟ|RivÉidGĩUyFĪjžâ×°9' ‡\õĸ~B‰r%rr9#ֆ ?JthĪSžÔŲWåŽ}M%°žä%°¤“ĩˆæ˛uģ×°Ķd¸„eÃc$wĮë['#n~ĩ™ŠY%í”ļûVSĐãlÆq7~"IĄ–B’aaYˆãîļzs׎jkköžfUƒÄÛY[ägųü3eiq"ËspĘņ›,§ œ qZvúTPJgûDŽŌ[yôŊ+GÉЕÍԆâé"xāËÜd NĮ$į°ŊUĶ5Į‡Oĩ{´I#[´¤‚vã#“œō+R}2Úōh$I¤ŽX‹’,g 0G Õ;Ÿ Ā–ąĀ“Ü)Z0K(%[¨''j Jú¯¯˜ęŋi_´wŗķJ'ķÆqœzRXÛę×oæN`ōĸbw–Uˇ8'§Nž•ĸēĸÄn§8ˇōz¨ų}­G?‡VS?‘.æeD)#Ų8ëM8‰ŠŲëFÕįɞf{“FÁr>\ņČųGŠŽOÕ Ôm>Ķ!X`‚0AÉõΝ8ÜM渝åķ0„ ƒŒŽF8éZļpéļ‘Į <ô8<’jeËĐjäZ–ŧ°Ũm˛â2Ĩ›Ũ2s͊Œkˆ%ec.Đå7ņĀgQ,SUÖĩfs ÉWå8Ũ‘¸‚?#WAī˜›™ e‚8r0[§šâŸē…ŠQõF¸ŧŗ!îQKąHūLüÜō08¨āÔįģšÕä7Ī$¨Ģ\.q‘œņŠĐ‹ÃöŅK™X˜Ü¸ØT’¸<ŽŸÖ’ ÎŨâ1ÜOˆ]¤@Xģŗ•éĶ“īNņ HŦņ°uËYbØŌLHWî°Į rGA’?:¯yâHĩŨēI4sƌĄÚ&b¤.ėûāķP˙cGzŠ7Údڈ™W•ˇäqĪéNšŅ†ÛÅûS0ŊląĀx úŠ^č>bXõ¨Äi’’ęČ *Fē} ūĩĸ×ŌŠųåqúÖrhą¸fĖnŅ™FTĮ?ŽĢVvŗ%õāšSä4›­ķ‚qŽzvĪJ—n…jHu¸m.ŅoĄ”ūėāāsúSdņÛ$;Cn1´ô?EĢi-}sk%Ŋäqų;›rI#sŌ¨EᚸSz…ŞÆŒãîõīŌŖmBōšŗkŠyÅZÚE‘zŖ¯ō¨ī5KxŪK{ÉaÚĄeĘāg¯>äTzf.Ÿ Ũ*ČÆf~ r~ŊO5WVŌî¯ŨĨŽâ%ķ kgYTđ Č9û~5)Fû[l]:¤)uąîĄWRfāėqÅhĩŲHÔykŗ;œŸL×1}ĸŨ]5Ã$ąŗĘbuČĮÜ9ũk^R×rZ–ųrũ íŸjZ \.͕^qœį$ö=ąŌ¯Ũ]H÷ŸCĸƒSĩģyfĩbdE888ę A{Ǥnš’5ō¨lNE-‡‡åˇÔî.§¸bDų#*š\öÉǚž$÷°:KōÆx`ÅOU$ЂCíQĨ÷+[ ‡Sļģšx#:Œ€y9œjä>`)>lœâĢÃá™V{t{‚- 2í)•īĪöÆzŠģkŖ=„ņ”ß"u%ܡSĪ&ĢŨčÅīuFŪ“pĸ0€`‘œVâ¨1‚?Įüæ˛­m|š7ˇ į5Ŧ€˛8Áã­HCČp”ÖQéĶ­<†Ũ‘‚;úĶ›y8P#ŊV#ŠÁë‚*ŗ6øË ƒÛ"ŽÁw`’zôĒ“+Æ@äđLŌe#6VFĘËČ9z§^ãîđyíWîLЧ†8=ĢHĪ1Ā GZ] 4YI 3É?Ö̍ŧÆIāāúÔĖrŒôôí‘ū5^0õ>ŸZqؙnCĒ1ŽŪeÎ;qũk*@ HŨŒ ŽkkU‹sˆĀaž{cšÁģ“lkŦGCšâ7zwSš+8Év  Įû4QfGŖé3ĩåŒSÉ Å!PĒņŸëZ ƒqRĘIVÉĮÜP6°Îiס)ksHv§ųíúS–ÄĨŠĸĢ”ØøÁājæ â,áÛ8¸ĨÖE#dgĄôĨd–Hâ€ęFۏĨcë—&ĪLš¸q*FYrp ÷ü…i†brKŲéUu 8Ž“Ë”+BrF=?*c‚‡Uēžk'ķ -7™n…†ŌŧôĪԈĩ‹›ˆ‘’4ĄķHfĀ'v#:ķÔT— `úÄV6–ņĸXš ˆķwézŲ¸ˇˇx€1FŪ[™Pvũ=+FŌčBOšĖI%ŌÛ_“|ā õAˇ;€Üƒžœ˙œÕŖŦ^ĩŌ’ĘSíKnc ķW;úū8ĮJŪ?dY¤āA$¨Y‰!€Āåą‚zpib‚ŲŽwŒ0\âŽuÕ+îT[øŽĄö?9 ÛrPppj=jy’Í#@’xĸÃ)`ëĐĶī ļ´ÔÍëÆÆHābĻ5@ČÎXã-õ8âρ­nāŠyā/î…HˇcĶ gzöĨĸŗ@úŖ9æ‚dŽŌ(cYnĨŒ¯%C.NGąĮJ}ž¯4ëEY­ĖÎe'@ĀôãŸĘĩžm+ląĮah'žbxād`šÔĪi§ėD{;vHÎTSíÅ6×T+>Œįí¯VÆîFPŒ’ŨȄGžRܝązŊ ÜKs#ÉöT†;˜ÅÁ`Ūn¸įØúքšm€u–;xTōãäįw¯Ž}ęΛkghŲ‰"Up2ʀd˙œĐä­°rģ™ŌŪZ\ÚB†?ßĘɗŒ)9#ĶĨg.ˇq-´RŦQīkgƒAÛÆŅéŸ^ŪõÔ^ŲØĖL>ÁĀuúÕ t­=Z5y}vė/<⒒ļ¨m;čĖIu˸$i‘Sʍa“kÁŸĮ5Ō$Ļ@ķŠWU^yô÷¨įŗŌĨÔd­Ąiv+9hríÉ'WVūI‰vĸ0Ã0{b‰5ŅOĢ9}C͛VˇsäYŒb]Ŧ …]ũũ˛?*ŋŖę2_Lđ˛Gŧ*œ†8!—=ųéßéVnŸOĩ1FĐE˜›zŖÜČŊIĀĮĢJÂÂĘÜųŠ))_á@§oaĶĨJÛZ•îc–I'ˆ(h‘˜Î2+%uۘėŪfŠ6Z ”ÚĮwŽŊ?:ßÔc-§\F ;J…UAÆ21ÖŗŦ´¨ÂÚ¨!'ĘXæ^ ãúf”ZļŖ’wĐŖ5ũáKoWŠIC1Îā¸Î~š?•WÔo¤ŧąš‹ĘPŋf‰äį;Kįãļ uwnœ`ˆI2Ƥ Į@zŠĪ}3OˇA͘9ąõīJjQė'fÁ¨Ũ´¯o •$ōÜįžT1?A‘UáÖŽŽQ’‘3ÂōŠŨģîœtĀõÍoĮ§ZĒŦŒĄÜį–Ž}x=ų¨?˛,"ĸ…DMˆqØõNhŧBĖĘĶ5{¸mã Ÿ1ƒÍ8ā˛ācˇSĪĩN5ŠĸšhļüMäŠu%wzqĮ_ëZ1húiļÚ YsŒŽzūŨ*ˇö5ŽC‘*ËģÎJÃįØˆ“Î$ū5`ģĄmc¤Ķ!É\qģšĨą2ÜfŦŪ\sHô=ŗžq\›;5ŧeĨŨ‚”^žÕ×jČ 2{ƒüë‹mé|ą8?>‚'ßuÚeĮo”ŅUūĶ;~tS°Î˙ÃđIš‡‘ƒ1,Ė[$œņžÜôöŖ[ĩ7ˇ‘B$ØB‡Éö&—ÂŪgö,&W,N “Ž˙¯Sj—PÛߏ6T_Ũ/āŒ“ƒJz!S՗ ‡Ę‰TåWļEYļŠÁĐ˙Z†ŲšXãe §PEHĖTíÚq‘J!-Ä+ķco‡¯ĩĖæŪŲæcÆØØúšŪÚ –ÉÉĀ&˛ĩ‹ŋ˛F$`1’sØbŸQ#ĪėtíBâ)¤’ ˆŽnī;p‚9°1øÔĢĢ*[’ˇ‡3ĪČr6äõ8ņŪˇ ×­nt71Š—Ã ¨õ?•:ëSļš´I"šfâ qÎ?,֎Oą*+š‡%ŽĻđŨčsæ4‘Es…\ Ōg§¯ä)‘ GzŦ°ß,-4›ČSŧ((įƒŸ^8Ô[ę–ÛU~Ņār—ho쟝J­7ˆm ‘Œ˛@ĐyĢ ˜¤÷t9ąÁëŌ…&úKšƒumzZũ&KŸ*O*%cķ~ėŧß?6p*{ä*~Đc,Œ ’§8ß<ūŅIpŗŠČV$qTÖú8ZF™’<°Ál(öÍ.vô°ųzÜÁ˛Žö­dÜŽ|é§@‡,į§ĶŠÆģīW4Ønŋ}$í!/&?—$‚n¸#ũšÜ‹P…åaÄ…š`ū5^-^Ę$ĀšˇÆ0¸uČ=ģĐäß@Iw(_ũ´ßEjhāh\™#Rş 8ÆsĪMüw¯#Įp'}ҍ! §ėI8÷ĪĻ+Ą‚ų!C%ėʑ({°?SR\ę6ŋ!Y!*Xw gĐ{ŌRōw9՘ƒ:Ūa F a˜äzí5bÚ-Iíí#‘nĶ19‘‚—`ųŽSƒôíZw—ō[<ČÃ,—í ŒäIätéWtÍPÉķŨI0 Ú8˜€ĄĐqœž§v*§'kØI.į2˙ڑDáŌãįģ ąV}‘€~čā•=jWļԏ‹âĢ1áËrĖ{p>§šë¤ē†HŒņåR>Vę*Ŧš˜ˇÃ-›`Üzû{Ōį}ƒ—ĖåČŧŠáŒp\‰īal6<Ąū;~Ÿ5ZEÔ.oãY#šŒyōnuĘŽÕ;Tzįv{ôö­i5HHā_)§’ŠA uĢ}’ÄÍ Ē¸šŖ›Č|ĢšVa,v÷8ŪI㉘ū&ąXÁī‰Û$ŗÉ$ŠxŒŽ7m8ëĪ̓Zöz´būŪŪāÆ.Ĩ‚Äû€šãÔ~ĩ¯>Škim4ķʁc ĖKzv•$ÚŌĀŌ}NWO†â]VõŽ<÷ueXŽUâMkÛK—ŌÚĢJ?ŧHÁ>™ę8>ÜU˜ugžfhāC\™LƒƒŸģŽŋŌ›§{ĖfY,d'íÃšõĄģî v(k2I§›hҊ+ŗ›nv*Œœ u=ãYĪĒy0ÉžfÛÜcųKģ3Æ>Q×ę+§Ô`}GL’ ”.Jnęv˙ú¸ŠZū;xĸYqåŠĸä|ßLũiŠi°šģ9ŠīîžŌ‘ĢĪiR/õ]A]ŏg=ķOŌîîīu'ķ%ØąīV€.q†ĀÉĮĘO^§9âˇĻŋMƒî2æĻļ•7mf Čœú¨rĶaÛĖįu›ÛĢ9öÆÎb’Y܃Œ:–5Z•ük(–@ōy‘ÂX)ą¸ũ9ã×ņŽ™åČA\'ŽzÖoÚaĩÔ-í%‘'R2OŨĀÎqé͟zĶa5æTPŊ–X’MŌK"u<ƀ|ãûÄ|Ô Ģ^KvcžG:Âˡ9Â囨ĀÔČaŽ™‘BEƒ×͊­5ÔcJŠâ"ÅžÅQ•Î:ũ&•×b­æs)v]ĀlÉuxŅļ Fƒ]ŦĖØø1ĒtęđĶĨWŸPŋŽÂÖEÖeˇ{›’böQŒuÜqŸöOZëf•a[`ËnĒęÉ'Ο›æœCTĻģ —ĖĀ×W7K^A$HĖ<ŗûænN\įíRxJÖ_íû-ŧâįtŠƒ8čtįŋã[2Ëq.7‘™„{×U>žÃŊOi}öyˆų`;c&Žm6.ģ›đÉ0cŽ3üĒØ ´rsųŠŽ0Ž@ų°rG:ÄJH]æ9 ĀūuŪ°")-žŨęī”Ĩvˇ89õ]ĄFe`Oɀ­)'ĐiŽĸÂī"ĘF0ÔŌŽßß"ŦUČÎOEG/<Đįĩ°\Ĩ(ˇÜÖ´ÛS-ų­g¨WžLœ0~]ŠŠĻÜÅ4§ å¸=ú“Dy¤‘øuĢ7@ĸɕį‘Ķ“UĄ8‡å8äuú¨ėLˇ ũ­ į–ōķœtį˙Õ\–ĸ›-;2ãæxöŽŋP8†B;Āük”žUuėäš.4cˆâĮP=¨ŠūŲüô?÷Í|ÄØôũØZYĨēîŲÚšë€0+ ÄÚiŋņ (X…ō$ö˜Öˇ‡¯ŸQ°ķeFBĶÆ8#ÔzžHˇë䁜[Šú|ÍJZ!CrŨš¤V觞Š Lę<}iđ( ˛`ƒČéOn¸ÛúҁŊHU@QČ'ÜõŦ}vÎęīL™,Ę­ÆŌ˜ũÜđOÜÖÉ^ƒgŊeęúĒi6ī4ŠĖKüŖœšrá ­­eŽ)a#ʉ"V°å”ŸF;ŋ?jĢĒYKVÛd…¤¸>C$Jxwaģëō‚2}ÕéüI~d’7`ą1pHûbĒ˙kĀ—Ōyĸ13&ÕųI8ÁäãņĢŧ¯¨­h<ø~í/ĻH1t’Ā.ü>õž¨+[H^ŨäIžyx ŗ‡Üō}1Į\Qũ°Í¨\əĘÂEšˆ0(îpF¯O֜ū š’âĖYۓ$ˇJŗ烿#Ÿn(÷öËš~8î˙ļe…Ÿ6‚5?,DcŸâīПn*;Īu4šR¯€ÂŅÉÎ #,|Ž+^æåŌØ!ąČ'fšīíÃˇˇn1[o-X,HåG¯85*ũ vļĨh|;Ē-Ų™’ßy30}äí‘Ī ĶĶۚlž¸Ž(Öû#h‘w)Į–Ŗ=ģ—;ŋ­l隸ŧEhĸ”F— É$učF{ÕûÍPiļŅŧö˛ēË0‰Upr[×ĨW4ībycc/PŌMƞ-€ÎB#ø3†–Ef6…yە­ÉûKJ8 ˇ Ûˇ{Vˇ‰íåŽPęá!G“Ė*0N $Ÿ¯zeĮˆUÕe6ԃ,Æ4Q´“…Ũž¸Æ:žÆ’įZåeKMú­ˇKų6Íœ–ÓÔp:ár~žĩj]ô[ÛD˛A„ĩh–`œr89ČĪŊ@5æy!—bĮlĐägë´tÅMũŗ+ŧRd $ĸ$dą˛9ÁÎ}0iûáhšēuŠÁn!v‹bŒ|ƒ{~Ō¨]ék?kE‚HLk×?w ’@Į9ãéˇŊ?GÖãŧ˜¤pȌЉrpr:j~ŖĒÛŲ ‘K_Ë ¸ËąíSī&Wē҉%…Å„k<¯æyÊ'{ļv–ã€3˙U-Ļ›5Õ­ÕŖ[Ŧ7+…>hq†f8ʁƒË~b¯˙kZKf 0ō4.CaÁ ƒØŽ GĢaafM­ŗDK8ō‘T´í'Ž8ųW—b,‡žz˛ÜƝ@ąĻŌAå€ôępséPž•s,p%ŧŌK pPÆqĮūf´ãÖbšîHŧø‹*îTmnœđ0õ¨îuģq Ŧ‰0؂S„Á*zq֕äUĸTmčKv” “#­ËÆ06ôã :mŊåŊŊä’íŨžEŒļnŸ­>Mp´(Ņ,'ž!Ã`dœw>€ū}jDÔŅžy'ghŅ„^O•’tŽNr?*=á.Thčl÷šmŧō¨™7lƒîĄëPkZD÷ĻßÉōD)ēFÄnp¸@@퓓SÁp–0áJŖė8Áü*1$Œyލ<õôŠÖ÷EhՙĪ˙a] 2ÛŦöË ÆJÉÂļâĖŨ‰8Ā{ôÍOĨX\ZKö‹‹p%O3÷Ąō['ŒLÖŽZëĐM1ļĻhž`0Hķ“íUÆŠo<“$’ŊGxãœûf­šlŅ6î^š†åô›—ą˙‡ËānõŦąģ‰Ĩt˛q7Ų„qy’ƒ– 䓟Ŋœgˇy­›K„ûmläÄĀėlß_Į­>âá#…f’@‚#“Æ:ūĩ)ĩ ėžĨíoL7đĘĒÁ#Qŋ8ˆ õäįđ§.ūą/n˛Gš`ŦŖi# ŋ–qבåļībáÎB7x¤ úØŽŽęę+8^{ÉJ,k‚Û ĮžúķYķjÁ1^ŨDfØŲc*0Hč2h‹’ZI7ŠNßK„Ū]HwEeû>ņ…'q?ÄHį°ŦétÉÅģÂŅßgå]”ų’9¤$ƒį­t—%ĨŖÜLR8@yŨ“ͧ5ëvŠĒʄåIØąWg qŽéMJOa8ÄŦÚAļŋĩ{ A,Q,ŽäĘ.T'<āÛņĢ^Ņæ{™î/hf.|Ąæ ēg?0Žšî)éŽXCtb,Á˛ŸōÍļá¸SģÁ8ŗÜbíB¸\üŸÂAÅ')[TąčmÃ@¨0IķœÕŽHRĪJŠ ĩ‹‚[¯Ķ6ߘã ,RCĪCŌŖgųĘqíO'hÜ2r1֕BuŨ‘Û4Ę āāúöĒî@‚yÁ⧕pTņU6ĢĒPØéĶķÅK-NÆáĐķŸLUÔînLgÖŦÜ"–IˇĶœbŠĮ‰ËŒš†h‰æ ķdunOÜV}ĢŖD eʓÁ#Ķ"Ž]3“j•ĀÉĮáT, †Î1U ˆ–åÍH~á€ęPäĨp×(vDË|g8čkģē`@cĶiū•Č_MÃÁrî;O$sĶĐĖī˛ɡäûŅQ˙h'÷d\ŦWGŠé6˙fˇ1‚¤g< {J™dI¸íhUJöāąÍbx-/™0ģߓpė›Žp¤đĩoŗmÔû‹üÍ9+K*vu srI ãō§å@%ŋi§iĪ9úŌ@Č1ōœ~՝Ŧ鉩iķ[K)E‘6–RÁâ´đ¸8 ķĪ5‹¯]lfJąã,Y†ėíCÔįī4}-ŪĘąMž[áÆõ9Ô_Ø6RFķÁs3!ČØ>QŸÄ˙:į-¯/- ŠōõvĩË=Čmŋ6Å]ŨyÁ?(ö¯ˇq$–ųą3J†IYW;HãéŒāķÎ=jÜdē’œ_CZXÜyß,‘”JvJ~÷9ÆzpOOZX|c֒G4ŖėäíũáųšÛ*8Ŧ­XŧŸQ‰[g•5ŋžÁF<Ŧœ*“žsŸĐÖŨŽŠŖi4rŒCu>•-É”Yyáˆ'kÛEŌ%2ÚåĨ rĶ6$ČY9ëųįōĒzî­5­ÄpÄé4M;ČŲÂĒö’IÅd[kiÖQPŧąIu6āIy āūņĮģN0vĐR’ž§_aĻXém­Ņŧ˛Ā娎#įđŠĩ;Ŋ’+6mØ˛í㜞œ ĮŊrķjú‚Lą+ÄÎVūPpō;gƒžyük_JÔ.u;7¸˜+ívÆųrBū8ÁĄĻŊæ §Ą0đՌPWÎI#ׂj;쿁ŖŠXɒMÛUH’Nz;ûÕ^[ ŅÜÔû}šßl…Ų ąÆp:‘Ō¨jÚCęĐÃéH$ų”2šę=*¤Z䎐[ÛZya2HāRp9õ?ŌĒļŖ4˛HŽ?qq?ŲUĘ z‚i%$ĮtՉæĐî܀#+9'#ž?ú§ūÁĄ­ęėhR˜2 IČ⃌{h“XŨZ8ŸË34jAå™AÉĮ§šŦ5įû\ŦLB%ÛģØÔg¨Ŗßē\ģҚY Ԓ—ÁV@ “ŽŊØį5wC˛k+g2Îd%‹1+ŒĪķÉüj”zŌĀļö Y”°_3;Fy ˇ'ôĢW7kgc-ÔģŖpqŒđ?úõ/›b—.äēŽœˇú3Yũ ‡‘ƒo˜ŽzqTæđŨÍÅÃČoˇHōDYÄC$.3×qÎ}ēS[š(€–ØG4ŽJ)qĄA-œpqߟÎĻ‹ÄŸg´…äĩȒŨî7d ĪĘ[ }AôĄ)Ĩ ›‹zšzîš/tՅ$°Č“)‡ Ü{V$š[ĘK‹§S,?g‘ļ ˛“ž1Ā<ŸZĩ¨j’ŽĄo–ˆ?6mīÂ‘Ë ŒŽTķÔ§ēķ"™-ŅYäeN &Üî/ô•YŨÁ?>áĶ‘LDNQ˜œcž•ZFãæéĶ“W$$’Ė Ú{Õ)î#[˜­˜|Î RGúęYH¨ōFŅņžF~aÆ*œ*yųFyO5vî3ÕÉäČĒ‘EˀÉëĩF*ĸ$œá× ÎîOåT- ō`!€rŨ:qW'ƒĐ‚Iôâ› ėFp8ūuQؙn%Ų`ąõjöõ"¸‰Á2eŒžg*HjžÃZí¯GlũĖöã#?Ĩs3F䯞›]—Ô(˙$SčLÃglNvƊ´"šrsˇü(Ĩv;ƒĨOmqmæÛH˛FĖ@e9pGéSJÃûD€x šõīY^°’ĘɖfFråÉ@Bäņü€­).Ļû‰Ú#š%c8Ūæ…ŧčg1ŋ+Œfžß.ۜrxëQĒŠ”úúŠ|‡lg#ŋOzÂd|y§ƒ\ˆŦīîĩÅėcL™B˜0ø°Īŋn+Ģlwāƒ×ĩrū.™,ô™nĨ;äEØ2ĖĮ€?Zw wysm¤pĮŒcڛ öāår@(ũk˜‡Ã×IbÅa‘Ž8ŲΆFëî@öÍSģ´šT;ReO1æTļė@Tāņ¸ķG"žåsģlvIgjŖėđ¤nōe#zåˆ8Æ~•SB6E'“(u¸Ļ‘ķnę1üą\Ųˇž6ŽsHÂËËLļrįŽFzŒĪ­kiV2[Íinļ.–ëã#ˇ(Øé_ĮÜlˇõØŌÖoR ;‰Å°˜C’Füã#ÚŠi÷ËĨ=ÔļO#lŨå$vČÎëéLņ,K§Ooo,PЌ‚zÜtŦ.÷û7ė+e:¨ļmĖH¸\(úķŸjqI mĻvÅ –‰ UD8;Xr§Ëf+…ōJǍ#Đ á/ ¸ŒL÷A#ļÜÆsåĮ$Ã’ƒÅtI1¸{wŌlŒŲŨ‘ÛŊ'+‚•ŲĄvđ~î -šO4œ|€ĸœg-ž™éõŦ]4Įy}s¨Ë•_1aXJ“fAÆ ą<՝VŪvŋĶ–Ũ&dYXJɜ*•#ž}HüĢ ŪÂö;°Â˜Œˇr;n$!‹žŲÆI#ļ qZ ŊN¸Agķ9ˇ‰ËŠÂüÅ}=j(RÕ$¨0ÚØ!qĀâŗbûKŲ:ÜZē1Œ¯’b98įÜ:ĖĶ­ī막ä‚ãp´Û&éPr9Éėüi[Ėwō:ĢÕˇŗˆH-wã;Dj äūyĒV×:EėBlã 3C*:Œ}FyĒ÷7ˇčŠ#ÛŋžĘ?r˛Ųî=ČįĨQŌŦn!†wŽÎFîs|)Ž3ŒąüsĮZĐÔęūÕ vlǤ ŋ&GåŽk×]ŗ‚ÎkˆlfX…ŅG˙V >q€íĀ˙&¯ŨC-ŧ'äfEėk“7‰Ļē%ÖæŊ2ČßpžsŽIîoĄéųr ¨Î>e=GΚ§wgj‡Ę[xZ2 ōČNNyS\´ĒĩėŌÃö¯5Úlc å…Č߸tÎ3œú WQ}î…āPYÆxųąĮáRÕē;”`]95%…­#I!Bņ>ÅĀÁÁëÔķZIlčŅĘcōÛå žį Ž2'ŋķZP—&đØ:Ÿ6šã8Į_ÂĨšˇškZYn§ qކ7VP1ģžzŒÕ¸ëš*^F´vš|nbû,,a|î | ô>Ŋ8Įĩ>>ĀZFĸ‚/lĀ9ĮO\Ā‘'ŽōüÃĀÉqlĢåawya˙ę­]2;™­îî1,íå\1N=zōHéCN׸-ö.7öuĻ]ŧĢs1 Ė@BÜõÍ–6‡3—."xŽ †ÆGč+œÔîR-FũežT˛2ō2ĖrãÛķ˛ęŌ[ßÜææ6HfŠ §!ņžA1B‹Ũ’Ŋ™­s•emöŠ"ôeĀ`ļ3ž}FFj3c§Eiö‡ŽŠ73Ģp2IũzúÖæĸ÷zuîųĸųĸE¸S¸0;TqŸ^ūĸĨûeĖo4^y0î…|É”īįÆp:fĢ•Ûqs+›QÚZ m9‘˜W8P~ö9ã<ôĻ&ČĖäǘäŒ)œĀÆqž?JM?>šUbA "Ž22qØVYÔĨ]AâkĻ(/HŦĒÂŧöĪ\€jRmģ2›ZhtzE—Ú>ŌŖæPĘŧŸĀč8Uûģo-Eŧ€<$rŊ¯oÃĨrp_]:˛ŧî’f˜¸ ÷8įĄëœæĨŅu[НP\Ü ƒZŖTŦzĶĄÁīpRWĩŠ´K2áŽyh‚]‰õžxūBĸZMü*ҍe*Џ; ¨9į ŒõëÍeŪjWi­spËĖm]šOŨ“’g0AíŽõZ=rhmŦĘŠÅæĢF;› xôÁč)(JۍĘ7Õ*ØŲĨ+oŪ› +÷—ƒëĀđĮŠÍ#HšŪ’H۞O'ķŦío|öÃ<¨%‘‘ŧļ#+´ž°qČĒNڔņÚ,÷ZÎK.Ãí‘ĐĶ åã<ÖŦ‚ŧ‹*ŀųĒRĨTd’pĮ¨>ßįĩ]á‹!Œ`3ФbĒvüŲüûT2ŅQü¤ķ HųR@Î}{UV8ŽLžalĻŌ üŋ­^›s6 aUąų˙úę¤ceĶ#ŠíŠ–h‰fuh9Ā'ۊlDJŸČ}i÷ƒ€ c œāņQĤ3`†ĒŖą2Ü[ˇÄ° ƒ'>āV-ü@Ä>}€°#¯ĄĪåZķą,„/@ëY÷(8ÁVņÎ8Ąčå[SšV*D\}ņEk›eÜrø9ôĸĒë°ŦûŽ›{ku‹IQÖ6ōÛičĀō? q ë2 Ž#R=ø5•iöyĮqĮ,}OŋJœ‚ē”ŒŠÂî>øãųPö%nh(;pW*žļI’Ųå_9ņ…īRō㎙ĪJCi “Î1Š“Žė ĶBåJüÐyÁ=+œņ4ēx´¯v˜Ąq ķ Ā#€xë×ŊtåNΧ֚DÄE…‹ŗsžôĒ|Ásö4muË8įû! >q˜tę}ēcœæ­MâM8m,yÆĀįēcĶķŦxü:×aÕŽ-n qŗÆHaĪŋNøĢgÃw+%ŧË%°hĨ2Žßhl u÷ęiZĮyŽ]ZĘw°¸U$z/Ž}?•: fĘ5_2XÆ[hÜ:ļ3Ë—˙ĩĖ(°Ŋ•[gˇ&8ų!›9õĢ’č25žŲ-ĐÅ0¸%`ûÄ)ķž˙įZÅyö FįLvM’]’QJãsƒ’;öĢöZĨš™­–U2ŒŸ/ŠãŠúg"ŠZxzō;k2ˇdļ–W9BĢį=úŒÔŪđėöW æėd†3rī œúķĻųm¸.kėjͨAhIW?.Œ÷ãđĒsj6/sæ ˜š@¨ĘN3Žã‘Që:3Ëuk8—iˇrUy ĘÃqĐûŠ…|9¸ØÜÅ"Æ [ĸĻĐę@Á<|ĀĻi.[j7Ė_‹S´vtiŖķ!~@ė s“UŽuŊ=Ų<ŠAĀm§$ã>žŸS>ē–iLˇĢ*Íą°(C*šÎG8ČÆ:Tshˇ— i!ķ-ävĄáJúįŊq^]‹)ĒY…ļll$ųÕs€ØãŋžãWlõĢv¸ēQâû;Ēģ>#h9Ã5‡…n¤˛†?ļ ŲÛË?6vxnsĀį=*Yt[—kĻŽu%įI F …ã?Ũ;Zv‡pŧû4”wå^9sœ ō=ũzSMĖR†?))‘ €ŪžÕ™§éS[É,ĨĀiæ2áNvĄqĪ^™íK§ÚĪ-ÎĄ—”%ʲ!Mųîõ=9ОÖÅ]õ/Į46æy‹Ē†NĐ­9u‘÷Į"ą–Á¯CúS'‘nI9ÔíĶ˙×\Õļ•s¨h6ÁeX•Ŧ–.3÷¸?1`pGŧi$šģÚŅ1Ôėž=Í,[#!€Č•Bîâ8äĀQĨōFĀĮ¨õãųÕYü=tŌÃ!‚,‹ōĢLΏl+ÜuÁũ)—8¸¸UXNˈąåW`]Ŋ8NÔė—Ruė?JÔÅåŦS‚‘´‘+´{ō#Ļ{VŽ›wæZ,Ėŧ¸ÜķąģŒūuÍEáũE­Ō(Íē {xâ`Žq#+†=Ąúõ­íO’40Œy’Nļ3Û'žG ëԜ”VÁŊ͘%ŠōŲÖhČÃm;ąķcŌ˛/gEģ‚ļ2ÆåˇČB{ŌŦę+$ztÖđîK*Č œv'€~ĩÎÚiZ„WÖ;ãi#W˜I"ÖÆŌTąĀāđ3ŠQĪ޴FĒCHî ==:Ÿí1ÄŠæ Įž•ĢYËse-÷mTnNA'Œįʆ•ļų(Ņ´ƒ]ũzŒ‘×ĒmŌX¤ zœoōkœūĖē‹Rēt†Q§ķQŲČ+ōí ĶüäŌV{Ũl.Ÿu%å´3*„¤ãvqĪôĢčMÍÆ#e‘>č*Fâšķ ß›e€y‘hafGęåƒsŽzĪŊmøoGk)Ĩ2Û"—jlī'hëĐbĒJ:´ÅIŲ4w:rȁUąģhų{_åZ¨]_ŧ+.Ę€äíás×ÕŦA1ƒ÷IįØRz$rU¸÷ëM|åHsƒ‚r(ÛûĨžaÖĢĘĖsĩA#…?­[% “ū\yČĒ&\ī#‚qۀ;Õĸ ~ö;Õ9a]û˛IĮąŠ†Z)ŋĪõnņŽAĒq0ÜĖɸķÁĢÎĒĐ8E ŲŋãCLŗ™âN?Ũ˙ė¨ŠŧŒ?‰ĸĻãąĶøS¸Õ-VymvüĂpĮl’? šËŪ͸āŒųS,Đ'€@PëLY6ÜJ@ųŸÛĨi6g^Še’7Që‚đjuo17§Žk?Ėd%ÛiAƒ‘Æ}jÜ$Ū@8ĪSŪĸģĸKœ§Ėzägĩrū%Õ¤Ķ4ķ$jIŪ#_›Ģ7ük¨fN \‘JÉ×fŌĸĩcĒ…ŧ„&dé’xúsŪĩę‰GqŽŨ-ŗoP˛G:Ã) €7†{Š…ĩų¨[g’O,HȄąŽéÉāžqŌˇįŌôŗe5’DžLš,““ęO^Õ^ ÆIwKųpĨÕĘåAČddgŸzŖØmKš ŨÍFeTĘŦqĪÖ ‡ÅŲks<×1&ä ˙_ŌˇnŦ­BŒŒ a†xö5›§i:$‘[Ë;$G1ŠããŸjIĢj†Ķž…;ß ÄPīKˆa‘Æîŗ‚N> ûÕdÕ¯fÔ­ÄĻ?,Y™äØÜąÎ8<}ëYŧ7Ĩ‰šEi2ĘęĘd;Hrw zÍ+xnŊĒĢäD`bĶ6JĮj” O,ŲDø™"°.ÁÉų@oR ÆīŧN:^ĩ6—¨ąŧģ\Ũ+,¨Ė”2Œ¨8QÛ¯J™ü7fĐ\FTŠFÜāIųPŪΧZĩoi§Xę~Rģ îūeä‡Ú;P1Ͱ¤Üm í.Ĩ]OP Yš•å•EœUį9ČīŠÍ˛ņVēMŦS4­3[,ŒAÉ#Ļ}Éū•ŗ=ĨŽĒësÄė Ëũä'•>ŖŠžĶÃ6A +G–’ųŠu°9ķĄ8ÚĖM;ŨzÛ$×ÖĘŌWNXč`ž”ž Ôb6z…ĸFī4vÍ>ô;võį×98ö­eĶt­7QUi9nå$nv!ßëĐ}=Šu Ošw3œŒÆÛ$+šOđœu§ĖšŽvąÚā´iSl‡ÉX™ŠļAvôö#Ĩ3ûDXę—ęūi‰¤ˆrųTÜ;Đd튚ķIŗ–o,î;•ˆ‚ʧ*~ŖúÕ†Đ –™įq3ĢJ7Œ|ŋwߌ­ˆZE=/RKK›´¸3^ëËRî\UN2yÆIč;՝?\†ÎŌ0ĸæy$°ŪÃyUlO Ÿūëfŧbg™‡›įĖ6īNœ~u"x~ßÍXy"¸ļšË/L`œ{Ōn,‘*ęú‚$ĄVX&E')ÁgŽ{T-¨ÃĨŲĖaaŒČ" ¯_­^ŠÂ+!ˇũ\`*)9Ø>´ë-BÜFėTî Y1’G#¨éœÂĸęūEģÛ˧qâˆx‹˜åF…Āåąœg8éĪZĢ7ˆ`ÄsFXĢĸ–2r!x÷#öĐš•–ę]Âãíc8lm8éŽÆĢ^iŸnGˆK)"?.OŨ°gvsČãĶÖŠ(’ų‰ĸÖH‡Ū@ĖË´å€8$}*5Vē“N=ây`ķĖ(™WÎ3ßņÍ\ūÁnešPí¸`§īÜņž;RXøz Wˇ—ílLųkŋåãõV…ĘđlŲ\"H˛;.Íáö¸9PF*ö›ms pᙠUŊõ˙ÉOƑ\Z}¤¤M7›_†Ü3Ķ9üĪJˇcŖĩ›N^pīs&ų6Š `wéŠo–ÚæžĨƒ"ŦŽ‚ŒsœJŽy[bŗ/Ī´ãwëPŲ¤ņĪy˛Ø¸hD›G8ÉÔ>õcĮŌ¯Čd’å#wƒÜS•ē 'ÔÄŋŋd"” ˆŽ¸`õĮ^†´t›”ēQÉ2J#”ũÅÃGß=Į­PŧĐgû\†ÚáB=Āš!—wÍĮpßtâ§ŗĶ'ŗ–æ\Ģœ°ųp‘Č<œŽ7Ë`WšĢ&Ąg ˙Ų_攎ėė,į0:Љ4ôšw,H(§[e8xÉžŪĩ.”ou!;˛…UÚˡ Žr3žAÎqŽÔ°øhē˜äž6ŲˇPĐõˆ0?7<“ŒdbĄmDųīĄjMzßj‘ ERāžGcM}fÖ;ņi3eÁS•û žŸ|ÖM͙ƒUŽÁg@đØē–‘w}æĻ{~•~ËI†ÚhîVFUH•$ †Ú0{påO–R‘Qĩ‚`34*YŽžÎ dtldđyĀ­Y“ûJņu¸% b"x#Ļ ŽsUdŌmؘĸœäĪöˆŗĩ°wzu5ĄĻécuu+\oIßy.Ķ¨ü(n6`šŽŽöԆPTc#5p•Ú;âŗŦĐ´6ĐĘOjĐA€¤}‡Ąl QųŨ×ŋßĸ­™cĪ*Ÿ÷Ō˙…%Ūi†›4sÅ*H&fCœƒŽAÉã9ôīÅOaáR€‘×"´4šŦn‘äŗ¸Iļ|ŽQķƒ×Ū˛îí˙âv&ffÕ=Æ:ŸZēš‘LĶTgō˅U`0x#ÛÛK ’}Î6ã\ŧ…§YįEØĐ)•x~aôšˇūŖ=ܨ“EäŒ!8*Ø'מ0EuņIg1Ū[q$dsUĩ NŌĘâŌ1hXŨąŒČŽ\G2z$­jŲĘGŽęGL%öo™-]š<ۀė}8¤]Nk­SLķn6÷sĮˀDdô¯@ŠÖÅĸ?ēB’TŽ<ķYwī§[l #Dˆ…VĀų~l1õ…5Ņ+ęĖmS‹ū¤ŊšH#PNæUŖæôVåŊÜŦw¤ĒÁđčTpF*´‰åĢA”‹aVN *ô&Ú (ŧ•ÄQ€¨9ÎĀĮéųTļžĨ%mJīQ{ĢøiÖ1ύ°ˇPĄĪÉĪ$˙*ûJō{Ũ†B$id…­đšT­ëØuāįŒVúęņĩÅÃ6žîđ˛ Hļ’Á°s“Ž™Í^š{ya‘CLA™r2;ÕķYlEŧÎ nãėĘÎé; Y%aᑗĪĻsíŌˇt›ģ›Ģۛyļ\,QŖyĒ6›ˇéúՍ/N‡NąKf+,‘¨RãåŨŽõv Ģ{KfŽŨ#Sœ•EĀū”Ĩ(ëd5ĻĻ}ũÕŌöĢæĸĮ;4ls‘ą˜`äw_Öŗ­ĩûí°š{fķ­Ĩ“2pPŒc ÜVõÜkylōåAÚhŠÆĐ€˛[Āƒō=qII[`q}Ė{¯Ë,փ1˛N!܃;”Éžũ8Įžyé[1j­mi#LÄIį‚&Ÿy™eŖO{5’J‘Gœ,jX¨į8úã"ĸŽæŪę˛'Bžįb°# =Í'f´CZhŲ–ēÕÖ ‘bÖôÆ#*ĔŸŊųqęjÔ:¤û-ãDe’ybflālÉũ:V­†ĻD%ÃÆ2Ž@ĮįRÉgĨí‰e‚9^ū_ŨŒĐãŌãØ5îsoĢŨHlī<¨Õ.…WÉB2úāĶVöéĩ -ĄLhâ)Ļ͎vsøŠßk+*âM‹D^žÜ~&ĒOil× ^(Œāįr€ŒE×aY÷9ķ¨KqlÖųI­Ú|Ŧ§*ëZpxbļŅBōĒĮöÜĖÃw=Qæˇ[–ˇÄnĘf” î8~ ņŸJĐĶn…öŸĖ%¸8BrĀäū™ĒíĻX˛ōĻr 9Į#ņ߁SéQEnMŧ#EųŠŒõī€ztÍ ÆÚ '}JzÎĄY][ɖGw'XôĮäúõ!šfÔ%ĩ†)$dXĨd…%sĶĮ#ŋzĐÔ4Ģ;Øä–TbdË,Ŧː9R@#84Čė!M8Sģh$‰ G#8'܌ŅÍ –W9Ŋ2&SŖŗlÂÃ;é€īÛã[ÚvĨ-ÄŗFņyf‡ä}Ę嗌p9˙é–QŦm”*‚3€~đüjÍÛ+O l˛˜ņí—ž{sCš` ŅĶéLâ1æ°ÜFHĮ•knmĄ<öĮ^yŦÛ$ ŸâīZ;PáK yúÔ­‚[’0g@Á°ä SI‰dņƒúT„€Jg¯sÜT„@ĨۑÔĐĈØdŒ|€‡Ëŋ)Įãږi>wÚã dįüúUvv`āą=ņPŲiîĻ)æ'œņÖŗáœ›…Z¨cZšc´2ųĪķIĮLÔĢ čÛŗëSsT‹wḁ\wô¤ƒåÜq‘“ĶŊ@ŦD¯¨ū”°ŽŌØcˇ'¯~•QØÎ[’O†ˆ`ƒ÷¸ĮNĩŸt…ĸ,GGncųք˙ęPōín=NO˙Zŗg}/ČKķŒĪ0‰˜QI$Ē’zŅM-j &G¨ĸ‘GY Yũ‚Ũā}ŒåšFeP7f?Čâ¤xŖ“Q˜•ÉF}0Ģ–ë÷H ņôöǍáu;“ŽŒíØi=Ršœ:Øŧ°I# ÔĻ&6É0Ĩz{ķš”“Ž„`ŒQ€ôīŽ´$KĢmÜŧ0ĨaëÚOöƛ%ģc ßû§œī[ä.ŪNsíYZĻĄ‘h×Są@S€rrGaÔĶ~@Ž*]÷ė62:pI7PÄ%™qžx;zT–^ēūĐc5¤†Ū8c1ë’ęAį'¨ŽyÍjÉâ[0åļ’íßšmÉ´ōXcŒS¤ņ~cÃtcs0BS–éЃô4ī.Ã˛0bĶ5E‰¸ļáâf >RJí=zqڛ iz­ÜÂhBĢĮBČ#ŽyÎsßô­9üAÍÔ+Â"Ōm•^ˍ„íä § ûSäņ5ŧ–G>Z ĈÛsŒôä9äPÜ­kQŪå[c5ġ+-ģBmįhp0aŒäėGĒbÎâY´Ö[YdŽ9 ģFWm#‘žM[‡Zĩyf/"G7;‚¤ķœé“W%×Ŧ‘[Ŧŋŧ`ŦŠį9#'ą8āZ§t‡ŖVšÍÅmŽAojHZŧųˆ_0’9lgnāæĄ¸Ōĩ9,.AŽYŸĪŽL•ÃŊ‰ã88¨ÆxôŽ“ûEmŖ¸g ›[væãÜ ƒûzÎe;î‘RT]Ŧ3ԞĶ'­RœˇHNęˏ4ŨJ-J)<™ß,:\ķr3žāũkgRąŋēŅφĮ|S8H;xã zįŪ•ī­Ä­nķ9°Ŧ;nëcŽqéMOYĮXîÕĨs’wmÆ1×ŋ^jĨž˛“ ‰Uʂ@^…āņõëK™ôCå]L…‡UHnļC|YˆŽöŒIš,qØbĨhu4̞ņÖ2„Čä–oŪ|䎠íįœđFˇkâ‹W´†yJD˛¨`…†Gųgš¸÷cÎWĄĮđîįį495ĐS؜åėwDjŅHoLxeyÚûŖ ЏīŋĻ­ŲÔ§iDéŲ¨`v‡ųŗ´3ĩmõ›YCí–"˛G˞Ÿ¯ē´l›>Ķä2~đ ¯Lū¸ŠģjÖ*Ę÷¸ÍY§D˛T–hĖ—h™BA`AÎq×ĨSuÕŧ¨Ų¤š|Đ]cm㟓#¯B~ŧf´-ŪĮ]ĩļš–ų [ Ŧ‚3Š uÎG\zæē)xá[wŪü)ߗAZîįeöéu­-ÂÄģ""ÎáĪôô­M~FˇŅn&ĖS*åO{ –ûRž ,ŖO'/0ŽEîåIôĒž!n4‹˜Ĩykš–7Ā9ĮCŽž”ĩm‰2ÅÕü)(-Äą>Ī™Tũãœc͜q“éT^yĻ|ĶČÂ$ē$Û~đļž˙ZémīL÷×’Ə IY˛[ öĮ¨­H%¨ŲĩÎiķ[t.[õ8fŋՖĘîgœĮ2E&čÖ=Å_#gŽzÔë}¨ íŽūВ…rÉ :c0zEt—7Ÿ7Ų¸ķ6œvĨļŖ0€ÜisyËæ`čWŗÜYŸ7sîW'ŽÜqŠĘcd‡îą‡Ãw-¤’]ÆÉ om°ãp TŊčI˙õsLøA"ĶŪČ]F‰"lI<.ā~cŸ˜öí]&ĄtÉdL-šH¸Ü{c¯á\ŋöķ´ōÛŦR˛Å0¤U8_—q=ãŋz“ØmG¨ųŧ7+…7ą“<ë#(‡öō}ėāā~žĩ$Ūšēŧ‚æ}K/#픁ķqœ“õîk*Öø_kÖ7lŒ‹5ŗ0#Š—ûŠ×Ô5ƒek#eÄJTõrØĮ4ß:vēÕÅžĶŗņÄā1R‡pÉ\N?<ÖCxjy#XDęŽ`ŽÆ#‘ą‹g¯~*xõŲT1hCĪĘĀãĖČų†Ao#ŸÂĻ}u@Úpî­ėā¯^™ČäßCĨ Il ń~žfidl7"ā¨NCNĻ’]*;]Ŧd Úyé“íԘĮŽ•Ĩ5ģÉ 7áÜŖ‘čk&ĶRûß;+ŧz"@[wTRˇsZ_đ‘4 ŧXžß"IĪA…C†?§­R¸ØË‹H—ėqBg‡uŋ–"*‡/°ôcØ};ķVdŌ‹ę0<ĸ&€FĘņœ’K°=Į°üûS'ÖÚ ųŒĒĸÉ  ķrO ūCiõčQ#vĩ›zÉ䀸 ļ2;ō9ëėzS÷Åîš.ĸ–rAĀÁæ•ÕIÛÇ’8#wn¸ëZļV¯&kĘlŸËT(¯ Œc?€üčąņ5ĨÅ yb•PBŌī‘F Žtô5øĻÛÉFŽÖV é8Rr˙w$ÃÔbĨķ=šV¨Ī—CÔũ m€^›­ĖįvŌÛ͍AQ>ƒsŦđ:$’”uIZFÎį‘Ž=Ī5noĪįŲÉinīįNÖō!ę ƒœs׏ĨIš ÕÛ ywŽrÃīm sęÕMĘ´H$ąÔ[™›qƒ#Ū rÜqød՝ Ęétā—!Ŗ’&``AäƒčzTâč­į’īûÆBÁXeN0:ôëÅjÅ#ø‡t`sĮp*vąI$îr÷MÅÅũÛ+Dņ\<;%/†„'ŪüQŽįšĻÚôwÂH UŒ^´ĻHä ÁĮįßĒ|A§K(’Ŧn$āÄŲ!NŽ;Tw:ĖNčŽīšŠ¨ |¤žŸž ZrėMĸú™˙ØĶĮc‰!‘voIųŗ¸üy÷ǝ§ß‡ũ3#Úš<ãiã€;ņŪēš5(­ô陨*"–cŒ€ĸ˛įņœ!f6ōíÁĀ+ķ Áíßņ)Iė7­Čô6úÂ+2•O6%  €1ĐŒ~ĩ[SĶnîî„ûROôg‹cābx?—ŧVÛ_ųŅŦą+¸xú¯Ĩ`Yęo%îœõî,ĄÃ.c‘ĮN(MˇpvI"‹XŨũĒ6šdXáRc‘?vT’zķéĶéSÚŲŪũ˛ÖAlSK‚ëÂļīCū×OjßšģˇĩYfšØĒ/ŒķÍfÚjBŪIġ.č.8ØĮ†]Ā`îiķ6‰åŠdzŽuöč%‚1ļ×WÚ‚w.3ĮíĪ­QūĪžYuXüŌÆčŋŧR=AëÔąĪ=Ĩ¨jc6Īm<™ûH‚eØ>cÎAg°éQÍŦmž˛žŨŲĄ’wŠDؐp­Æ1œä~”×0>RĄ°ēœI‰D˛cWw€§SאzŒwôŽēÃMē™%ÔLːËÄĢåœäāŽO‰5圚” v‚ßė­(]œËnö鏭\Ķõ¸Ĩēoh¤EÁ ŒƒCS.f†šS:ØŧäØĮwgnsޤJĶ%ĄąÜ}+*ŨŨíļ¨ áx>ũĒīÚrŠáwQ•Įļzū5ėSW/ÆĘYĪN S Žķ’Ø šd‹¯@{Ԁ‡ā+ĪzĢܑ N„āqĮZĢ,*ę‹apyyĢ_8;qŽūÄUr\vÁĪ ×đŠcEÅYce)8Á8ÍS‚0“€ŨŊkBe8!Hü?Q_4ÜĄG^¸`;ÖlÕ=jŪYėx?įŌ‹EŲ bs™ĮéKŧā×ˆY'<~tã°¤:@Ųp?ˆōOÖą¤ˆAn#LĄqžsōķšÚa˜ļŌI'ˇZËēkG¸d°$žqچÆfËc>”SÍŲS‚¨H㘖Šwļ–Ër¨yāu?ūŦW1u“Zŧ.LG°įų֗†…īŲ§KČåÅĶŧaˆ ĄžO&Ÿ/ĢŨnQÄŧzžœÕÕÚÄRzļ^ĩ‰öĢv•ô˙=ęøÁ]ģxÆ "| āđ8Å*ā€Ųā͊ą2wa€ãƒŗš[ŊRę{&+å0*FŌûƒÉČ>™ųÅĖŦk^ÁĨXlšPbX>@Í+ qōõĀÕŖ„Wļ­ā‰XĮvx9õčkšš6¯ĒHķ+gį`?Ķ­sé¨]]i‘Ũ=ͤąũŠa c$JW'Ÿîz{ÔĢŊnS˛ču'ÃZMËo}Î CänQĶ#ž3Ö —CŠ]‘ĩÄĮĘq$eؘ ČúÖkkwImwuˆ˜ Éöf_›å# yüOąÉ5ô’,Ol|ŲūΌËÁĘnånAãЊv¯J×C˛YdšFdíã\ķœj[>Íknn'&)D}Ã,GN1ŌŗŖžš>s<ļ¨ļĖpAËūīq*sëĶŽ€ÔúFˇ-íĖĐÜ$.ŅyYhԁķ(`0I=IëúRj[‚qŊ‡ÄĢ é’HîuvۜļAíâ?ZÃņZÄņCtŪS’R>02rqÆ}zÔZíÅÆŸö{˜#…ZK•’LŸŧĀv<}yǐęr\ßŲG%œk{™`ķIÃÉÜŧûāŒzķOŪh4L°Ö“ޝnĐĪ!ļH%€BAā˙OéÚē˛W į§á\žŸŠ›ģËxÖ8?Ķ"{šy`U29<áZZž§%…ŦčāÉ4ëđ:ōF}&ėVš™˙Ī–R$ž`¨’ÄŧHüŨ\Ņ?† šhíMįÛĒė\/đŽLŒŠX56[Ģh."X]Ãäą8$čFF~PpOCíY×:ÄöKe/͒F$+‚G<ņĶëUißq^ØŪ¸°ylž4u "”,1‘Ÿn•“†ÄQĒųĻPáZ0ŧ9 8úSEõÄ:ޤĪ"ũž?ŗŦ1œ•Ë(éRkOGœjq4ĸæxđĘpø-ĪN){ŅCŧdÆîŽÖÕŨ"BaˆVüĒøb1 ĮÚe˙EÉæ•†ûÁ¸Ēū&šįPĩû:ĒA ;3“–,ŲŨ [“Užží­ÕJG"Å#–9@Ųëî1M'mä›Ô[ømõ›#LŸ: Ŗ ãŒ7¸ČúU6Đßl˛rŗHŗ3(á] ‘ĮĄÛY–—Ũ4ųžPŅéŽĖÄö!‘Öēm#VûUŦĸhŧˇ‰Ā`3ē­ÜduĒjQZ 5'ŠžÚ4“ŽįoúIēāwžŨzf˜ÚĮ,R-Ōų‘Ė͜ Ã;žüzTšÖ°4éãŽ8”¤§`;ƒ‘œ§zHu‰î/ÚŲ %Q„RHüŦW9ôĮN;æz×ģ}FZxj=‘Å<˛:y•;n?NzVļ› ÛZjęK—ēē("S  `>•ÎiËygo<ÖQ4-c(pp3ßÛüúÕ´ …={sIjŗíu$gš†UWŒŲ?ÃS8æ+Č‘ÔSd R™=sžh`ŒÉX&YÉo¯¨Š vĄHeÎŨÛŪĩg'fíĨŽHÁúõŦĸ€ÜĻTÆĐ=k6koQ†āq€:Ņn7ĖxCõ4ëÜl<@ĸ/–fĮŨĪ~1Dv‰J ôį=>•›sąCįøpK~Xūu¨#Åģ§æœ~ĩ™yˇÎŸ“´d ֆ2sč3ôoūƊoČNw'>ĸŠEž›uÜM%ŧĒáO–Ø?u‡_éøPÆ ę3 ¸ä7=jž…iũnņųŠĪ#, ?Ē+Y7EąŸ˜ŸĨiRĪDg .LŖĘŗ”'<{Ճˇîã9¤SMĨąÕ-õ*+CGåų|Ä߃Āũz×5&ƒŠŖÚ´ąF’B°íEq“ĩžeÆ:cŠÍjkš|ļē\ŗų"pŽŽÂI cļ:œNĘú2ŽíŠŗ5Äs bÉV#rãŊĻŅŖų¸õŨĪ=@đĸX”eûŪŨk’ƒFÔVÕaûRäJęvo‘v`į’ŒAĮ\gëS§ģ¤ÖČėn CģcaÉ g§J…Mĸ%NŌWō?Ķō¨tģ"Ķāļ‘$Ā^w0f#ãĨ`]h7ÉĒĪ*Y…yŠ´…;ãą<ũsM%}Áļĩ;š×~ÂŋtdôÅVÔ--XC;švˆ’Š[1\súũ3\ôz-åŧHķŸ¯ŸįJYH¸WÎŅëé×Ļ*Øß‹6h%Éc™. $ã9öÎ)Ų-˜ŽŪčІBđHŽI'9ëÁ̚lĸKŠ-ŒLĸ&•ČLŒä`ž>ĩ™¯éwW6ȐÁ HÎÆŌpx<ƒŽzƒÅ?@ąģ‹RŋvãŠIĘ9d(ā9ÉŠ˛ĩÆÛŊë™#L„$8?.:­fŧå0$QąrNĪųÅP×ôëëģļ1)!ˆu8!˛¸Į8wŽ?*­ũ‡qqĢM=ÅŠ0ēDō9a¸€yáģõÅVŊÂīąĩwyÛgKFs#b€(`ō{ãŠˇe´ˆX¨98=á\Õ¯‡o-l´˛Đ˛ÜŦ‰öŒH0LJũ:uÅKm ęV‡TÆf Žmŗ!ÉgQ•ÎxÚAĮ֟*î.fuŗiņ&He*x&ĒŊĩĨŧļDčŧ‘Öŗ4X5/&ūŪécy‹BBqČ<{ҍÚ_&™uŗ/ ˆŦ{NĶģbĄ­lRzjZU´Y$‘SįcĖ›FHĪ÷ĸM>ĪÉB–q?•’QsœįŒôíXš­äo0ŧŽxtŲŧä°ŽO|šˇxš€ÕmG4ö€Iæ,'æ-—ŋNŊũ*­­Žēšue°Ŋx&ūĪ•MŸ5 ÎĐH–gž™íSCig¨ŅA›IU‘ũŪ9ŽvŪR+{1˛æÜĮaåŋ;”H@ƒ’@Ī>”Åké&Ar—bíkbÅŧŨüžÄ`ŒņëO”•#Ąņ Ģę6Ãn°Éļhäq+`Sœt9ĪJšaiec}ĩ˛yDˆÜ"ž¸8ã5Î@.šņãÎ@&JĮvÁ!vž×į­RŌįŋš°RŗO,rG/›¸3sģåÛî9éčhŗ°]3ZhēD°IŒ)4˛”â€eKdž@ā`wãĨU×nlĸĶom 4Yv†'Žš•i¤Öš\q¨<ŗ: •ĸoŨí\6Ae€ũqÖŖš JķLŊ¸–[šGŸļ8ŧŖ÷<Õ!€#< Ķå×V+éąĐEŖYE"2ÛDĄjüŧ(įŒ~'ķ46—Ĩ´2Gö$ÚŅdžPxœvŦ8¯5GņqbémYĨ æA €¸ų@Á#“œķ[ ¨}šö>a07ŧĢ€>Pܝ¤úāÕ-Iu)8m/L’B˛ŲÛí1ĒdÆØ@ü8úRXM§Ûë2éļöŪC´_h*Ŗ|ÁIīžšôŠļîv/š\ŽBúãßŪšíSíúô˛ÛÛNßč.Ņ%‹ƒ€Äqõĸ:čÂZ×ÚnŸ~ō=Ũ´3ŧjUL‘î ŖéĪëUeŌ,åģK™-ŧhHÍųõĒÚIŧÛvˇ1Îŋŋ;<Äa”8Úrqžüõõ¨/ãēma"-r–f Čöá›2îīnĮŽM;;ÚáĨ¯b䚘ĒŲ[Œ#D6Æ8Vę=Į&ŦYiz}ĄĖÁu Ū\aK3Æš“ũĻ—¤Éö¤™d˜Ės„°¨#ˇNzæ–-GT[kXî.dŽšEšãī)Z•ÁÚ0 g¨ęÍ>Vú“Ėģķ[Ųjw˛ZČG›g,rˇîČã+õĒŗév˙o7-Fãõũ9ížĩBæ÷Qîö™^1%˛îxĘmVŧ#^ŊqQ]M5ģ[ nepņM–H؂ÃũXÎ9>ũņTĸú19.¨ÚūÄĩ]="6ÖâÄ`p­ę×ņ­>Ī%ėŪČæšˆīo.Ží“],>JĐE€ÎĀ ƒ#ąËl ‡ÃڍîĄĒWûHˆ¨*gpęzc¯ힴr;^áίcŌ­ŅJŖ{úc˙ÕVã*íaÁč{ÕXž4RŦ…s´sųzÕôہ’G¯LÔ­’•xŖ|ŲۖČã°?Ōĩļ˙Ŗ°ŋ>üVmâ€ĪÉáW׎øQ ‰Î}ŗĐ|đĸšoāå2{™ĸGtwzUäZĨĸOE$2ŸáíZ–Ņ$ŒząÜsێ•› ép閭 cRÛÎį,Iú“č+]0Îprzũ8­$•{—xŒ”ÉaÎ*‰ˆ°rOīNqŒÖŽāx'ˇĨWxÁ`ØÎ8¤ãpNÄ#(]än ž†™~–3\lgŠb¨2ØúqV¤Œ>r Üb˛õ¨éķ “Ę,6  Oą"­ ]3OØ]E Š“o! ĢFrų‚3ÛįéPÉâ%šļ-ųĐíY0’‡lßigđâAĻØĀnŒd?w&ŅʑŒЎjđŲKƒp×@‚Ļ21šÁ䃃܁Ž(÷šÄ‹ÅiöŌHo$~{ÆåWŒ’@éĪZŽ[1'”ab[Ād œäsÁÍI†„ov˛I bß/!͌ŧ~sž”ąøa¤7‰öÂéÃũYāsķtÂãĩ?p=ņúV­;Ų+ĖQæVe§ƒƒĮQێĩr]r4bŌĖĒËvF…ū֗JĐ‘o<p˛4Žōƒŗiäį“K˙ôr_}ĩĨfÉ4@a[ˇ?ŸJ—Ëv5{!ˇúÕą2(ŽYR@b`VBx؂1ĮãM]nŪ´Į,HžqSÁÉ+Ü{`ūT‹á×7Ip$St×$2¸˙<ķŽŲ;˛ ÉڕŋŨ$Hņ’đw0Ëc=p¯Ū§îŠō!ŋņ0¸N6[Ą/”w8*Āôũ :Ķ^¸ŽÆÍ|čÍã2¤›ĄbŦWī€xÁÆqS\xA’YKÜå¤ēKŒr0¸Âž}‡Õi|Mfņļ‘&$ä„›$tČ?J͛ÃōA ŊŗÜ:ˆ ’8Ø(#%@ŨūđĮęjHü(a2ĨÎ#“ËT3ąSSĪ+•jGđä—Ū"ŨDdDQåvBSĪ+׏sBäæ7áÕlįĩy-ŽÕXŖo\Ũq‚=ĮįXƒÄÖĐ\\$˛Ä#ŒĀž>ö2׊œiŗÅh°ŧąī,ŌŠ=ƒ$öõükt'ˇ˛ŽÂiáŪb‘ķ,jKI=OˇŠëI%}G­´7.ŧAaEϏT–/ÃÁü,ú̈́W"¤F™˜+(ėÄ9õūuVm(\j);*XYGŗ1ËN@™Ŧ–ҝãÔĀ=ŽBrwœėVĮ¸ëŠj1`ų‘ŅĮŦÛŨ Éw Ä€Ž2~3Ø˙:ŠßT˛W’Xg…Ŗ$†;†Ŋ ŦáY"ŗ–?ĩÂ$6ŒžaSšÛ.Ųô8ā }΋3=´ąĩ¤=K€ÅBŠär@cŽžÔrĮ¸¯.ÆøÔK!öWF…ō›ĸ!ąôí‘Ta6ú•ĩŠ]ŠʉØn ž5ImîmeĶôčÚ€Dw…*T`0öč=ōiuO%ķ]nYŌhŅ$‘ŠV'ˇŪô8äP’ÚúŋCĸŠč•y¸n˜ëĪÖĒÛë_ņPË`D j ķUĶø~mĨIÎ=ę)m&ģŌæŽXŨã(& ĪOĶ­sōxkQ玖&h­‚X-°Û!ųĘŲÆ‘ëÍ(¨õ¯Đëî5+(L{&ˇxfcžŸ¯ōĒ/ud÷öŗ—ƒ;`bãž=úW?q¤MqĨLęũŧJ'Œ üëˇ-ŽģqØbŽÜørYZŅ­Ė2*Úy •Ų8$A^š‘í֝ŖÜ^÷c~}F;tyĻ1(^NÜã¯åY÷>"‚=BIvī™Ą\{ņí늋UŌ/eŽ(á’-žhvŪzŽāÖ]¯†īmä͎Ëm‘Ņų?tãqūĪ˙^’QļĨ^WĐÚ˛ņ=–Ą§˛ņĨą,˜Ā|Ā‘ëč2)Đk6°ŨEې€vyƒ9=ąžžÕ…‡õ#ĩMļĖļË*IYĢ÷$ ƒųđzĶu ßČŌ2%Ą ĸ—lÆ#9ūéëۚ9a}Åy[cv}Z?ĩyM$+,;(d/‘O:Œ!á10H ķ\ũļ‡~ח7@˛+LōÄÆfÎYq¸Į¯>‡ĨV_ ^Ž‘e´n—!Č`UˆÎŌA^Fį¸íO–=Ú]ŽŠŌYŽäēG†%H_j>î÷zô4].ā#hĀ}ß*įŠ­Ąé÷–÷š“]F;™‹ŽŲČÆÜ‘ƒōƒøÔ>'Ōõ ­DKi 2$IY €8*ûˆ9ôÆÔŅeÍ`æv*I­ŨC4›"Œī’Õ†IÜŦŸ¯Í[–÷Ág8 į<ß2ä×:Ú>§ũĄp ŧ+ŪĮr `Ēã=ŪųZ]7KÔ­ĩåž[X„l˛H8%É Ž ũxĪŌĒŅ&ōęzŖ3Á¸ #qX‚ŪÜķíPZĀŅÆ›A8Î0zՕ>m cķ¤ļÜO1|´u ÎíÁKķ1ÉQ“ßŋįNF*…öü葊į<|ߝ1 VĮˊĀä†ü¨|8$Žō§ŋ žGfĄfōĀfn‡zįųT˛‘^á”Į†8ūUšÍ]#n>Āõ5Ąq8Æųžĩ#âe9”ãîÖlŌ%ËšË=cœU8Šī™Or?ĪéVŽpaäzƒ×ƒUPoy# ũiG`eÕ8Œ ã$“ųV}ô›cf CapûŊQWS+Čî#įĩdęN do1Ą9ęF9§ZlËŧJÎÄÄē’võčĨĖc>1ŽÄ7U\GĻh÷SŨÁæÜÚũ™ƒ˛ė.*1ƒĮLúV’ōō'ÎGÕRÂ2#bØ!ųúUØĐ<ōŽ8č šĄ@xãlōqČŠŒ—Č‚ŧœôÁĢ=ąŸwĪ­BN9į#ĶŊ4„#×w'ŋŋã\ŋÄ’x^ųNíĨ eG+ŒWPJcųÖv ļs[J—+‘`ąYāqęQCvw¯ĄÂhÜ=âÚ¤{’!wī†\ƒ×°ÁüéÉŽ^œL°† uLœ“’Ž9=?>+ĻM3Lŧ‰'[xP˜‚Æé´đsŋđČą˜cû*(PŸŦ˜ ‚Gđ“ŽŲÆ}…MãÔŋ{Ą$ÚÜÆ8D–~[Ī!1!ö –ûŊ8`Ս>ņæd•…b’g#Ô~§Ûč–ËĸäĄh¸Ž!#)ˆ…cƒÎ§ZģŸoaET €?ē}˙*™5˛*7ęs‘ę˛ËĒ´ōO:N.冝˜T?)^˜īœg?Jģgâš~Ã$—PĸÁöG¸,’g•;qČīSA¤i †æ´™27Ū<1ëéZ0húTlŠ ,{Ld`Ús‘OŌŠĘ/Ą<˛F­uuwšķÛĸ:j˜Š¸bŲRHÉÆ¨“ÄBt@\™É6Ȝ“ûšvíČ븂;ZߋHҌ˜ō÷m—r‚Į!ēddį€$ú6jŧĮ€Ąąķâ<Œį8'ŸJ|ŅļÂŗšŠsu$ļŅ´'ŽNĀô<×+kâwĢ9aI%2näF§ąîzs]ōŦ$‰'ČOlVL&›öwũĖadR›H吟ģüMu*ĪĄ•âZÛÄĶ4„”{é>rž^IĀ+é‚F:|´Gâ+„Ķf?g Ņĸ3F?;˙Ë>pWķ­˜4í:WvxāÚŅų;Xgräã9÷&Ÿm éŅÆō˛Ŗģ0“v:‘ĶjĢŊÍhdÅâå”ÁķyÆÔ>w3œātįˇjĨaĒÉ—7%ä¸†5bTmžî üĢnÛD°Žf>\jˆK‚§1ÎéKyĸiēBŦ!bŽȌ˛˛•äîÎqŽ)§´‰Aē—L‚vFŠb';=˛"ą#ņšē0ŊŽĐ.LEmß>ÍÜdsĀæļ­™.­br'l*rĮcéŌĒMŖiÖ-fÎÄHķųĢËãˇ¯õĨx-Gil"k­ÔąMË$U˜¨Ûķž;äútĻÉâx"‚0ARÎČP€pÎîsŽÕ%Į†âēškļŧ$–Häd)Ę˙NåR§…-¤nņĖĢ4— ÅWŋŪ\Œ}:Ko˜Ž|Yb„ŖG1O-ČŠ•ÎēŌ'ŠV+ģÔšˆĮoi´$¤g%†pp{ö¤ŧđÄ7FU’öáāF¯€„‡#/äĶn<3kpŗ—¸” °ŦHÚU]qĩąn94ũÁ>s[KÔbŊWēE8I DåXu­Q%˛–‰WÍû67$ĨHWųļüžŧņøÕ˜ÍĻ“b`7ųŠIeų#įč8Ŧģ-Ö})l…ëÉl˜1"Äg~ņÎ9įŽ{}h\ģąžnƒ¤ņģŦ˛y¯.Ŧe°Pe‡Ô šmuoöđ#“~WvŌzđ?Š‘4„ŸT°¸’ęDkV;BFǤž ņĶ˜Ģņčúl:ŸÚRÎßĪ$Ÿ1P+ ũ(÷zæękÛKDĄ[hoē=˙ĪōĢacĘžėGŋéPĮHŲ”dķõĢJ‚‘õ8íMlfČ%*`bŖ9í'ķÅBdÕ×pãqæ­mhåÆ28{§zlĘÅ~^v4ÂŲ';O9ΚŠvÉ,ąDŽģr2 ž§BÆy‘ķ(}?ũt*ų<}GJ[”´(ܨˆu9<ĀÖq1ŗîōĀlŒ’A­‹—Ėax9'§sXķ ĨZERÃ'œõ›4ˆéÔ &ė­5@Įˇ\gÖϜ€†l`÷īQ';Â˙wŸëI –IÄl_ųâą5@˙j!BÁ;ō"ļūWŽAŽ =zVF­¸uRØwģsM‰ŗ5öķƒßĐQZS÷ĸp{ŅO˜,vž­4ŋ.@ųķ\üėœœ’1Đd“ÎļaŊ˜{ãõāõꞓ4ۉmœvÆ{tmÅsžLüŒuœuöĻj—Ōßé70\ģ¨F|ႛ œœëĶŽke5ØŽ-ėæ[ r ü’’ņ†Ë ŖŽ1œÔļ:´˛^Gosj"ķmŒģK´†ąÎzæĒí=‰I5šŒšĀ–H`}äÜÃBØŨ"ĖéžääqÅoOæŌbUŖ"<–B9āœŽĮĩ\kČâŲ›ueÎß0T—“ !û<UŲp¨ŋz†îRM…ŊŪĢsĨHđČŗËöA.á’AĶrp}(žîíf†8Ž.LS\a˜Æß*ėįī_ԑ[|ļÚ}­ĩ”fI(mLÁ8ÜĢ“‘ÛĶ=3Å[ģž‚;F’xžXĀÎ:ą<=ÉâĢ›]…m7 .ĮF &2Č̆‘—nãëŠå!žšiåY/#‰#lN1ŖžqŽšî+´ŽíE˛ŽÄI$_ēH8?ZįŦí-Žą5¤ī;InāĀ9W?x?SÎG9ĮŊ(ŊîúRëS-Ēš8Kié0ĘaLĀŸãWoõ &FšŽ(ŌæTdŽT–?\Ÿl]Įk-ž\Ē{ã8Ågj—ÆÂÖ MēĖfš)cŒn8đ{SRM聯ËVaÉ{xĸäG4K?ڌqī;Tōr:rIö¤7ķ,׏‘ŗ—ƒ2—jž9oa“Œ×Qh|¤“jēü§ßۚmî­§iöžd°BÁ"äđ?…+č8ĩĢbøręōå.b–MņĮ3$Ríáןæ=8ŦMböūÃTž8§P†ÍįS${˛UąŒgžĩŅéZŊ•Ôs%ŧk…ŧ˛€ciĀã;öĢwŗŲ4`ÍNčß uō?ĪåJö–¨,ÚĐä[ŰFYŠ-`vF’ä)ŒNyúT’jwSę[Į2mũâ.r1ˇo\õåˆãŌ´ҝ//"K!Äʍ”^ʏ@G§Zŋ"ØiĐĩØļ#Mō0U Œr}ĪZmŽÂIīs’‹WšžĘEģXÍĶūĐQ—+ūéÉį8ũzuŪą}iyp$&(<€SĻ7  ŨzV܋ĸļÃ%ŧP4„Ä]8-†§C׊-CԖY¤ĶbķLÍö…Næ\Œägđ5W[ØV}ĖŠßũj“č -’kˇv6ō duKœs’qŽŊ W›Qž†bķ *Ʌ?&Tįo=ŋurYiĶE°Ų[í UG–Đz}+7Ë͚IŒvđ4ÁL2ĻĐxOáŽ)Š.Āâû†•m9fž•Ŗ2\B‹"Š8Ū7 œû? Ãr%Ƈ$ o-ļ$$…ųLžũyõĢŅÍk ĒÁ ēGŌŦp0yĮSTßQ°ŅŦBÃoåD\#E,qČôÉĨŦ´ڙž-‚$°’hÂ–ģ¸s mĻŪžæ´īæ‡A•^Ūžúā (ʂŽ?ŨĢ×ļēvĢŨ[E+Ža=OOĨ:ęÛNŊŗHn-ÕŅŧ‚„zČôÍ>mbåŨŖüAy 0´Ûöe†Iãs—]äŠ ÛŒ~5ŗoŽų÷­j-oUÁ,[rŠÆ:ęzTĐiēLsE,ÖQ€"(Lú×šÜšæÚ5t%ʰåFNG4›´AfžåÛI`S°Ę ä âŦŦĒFæPšö¤ŠMŅíãëM&B  úõ Čîî¤p . 2 ;ŌÎŅmŖ‚;vǐ,ĸgķ" qŒzą+˛â=„ą€ÅJŸrœm°Éˆ,ļãĶ>ĩ ŗĘ>fėFzžj\Ī˜ņƒõÍC#ü㜃Į§õĻØ$6u@ĒBžF c]ķT‡sķsÍhM!*Ö*OąŦ™Ĩũę;ōpAÍIkBä‚0ČT“ĪøĶcÉ-Žģ:~‘¤,Tp=ŊŗN‰ƒIŋIcR–26AåšŦŊBPˇi SŽįđ­s´wųģũ;ÖVĢ&'•Ŋ7߯øŅa•?v;Î? +5¯.Պ­ĖŠĀXãôĸ‚į øjŨít´Ũ¤‚Š´rwc>¸ëVbfžæėīe"b ū?¨ü;7Û4ØæČߏP€ĒúUԟڷČɀg“Ž0pĮúUÕés(-ėl€ãœcŋZhUāŖ<ãgŠ0\qɨøÛ“€ãۜP›+ʤ)NIāįŊs'ŌîīôŠ ĩ14Ž 8œžkĒ}ÁŽ0Xr0k^ÕWL°7e#–b3Į§Ö‡ž€ļÔâĻŅæ[‰Ė@;Å!ÃĐėÆ@õŸsUĄŗštšÕbBķG9‹p <–r2O\UÍJū[­VÚUŽhãf‘&ŒĄŽŨĀqõëS&ąci8”ė$íwe<úgųĢČmDŗy§ę:BH$ˆI ”‘ūAĪ>œSėa¸’Á%›|‘dd‘]Ė‘[Ų<ķDe]Ĩ‚¨Ü~ƒÖši|Kk3-Ô.BK >×R¤ 8ÍF­lUŌcWJš“S–æfš2$ÁÂė]›vž7~*îĄm}6•s ]Č( ˇ ëéYŋmyLFÜąÉļt †ŽG͎nsWn5hŖFŗßå<ßu•rØ÷Ûˇzn÷AĨŠēF,6IæZ*]$^Q‚ŽžäõĒVē&¯ŧĸĨ2[‡ß÷\ãĶļ@üęåŽĩ iļou+ ÍŋžÅTá€'LŠŠŸ\x5!ēqi%ŖJcōķ´î‘Į<Õ^Wd>[#;û Sōŧvī&5Œ2Ą‰$g”uÉëKqŖęrFōŊ´{ĻXv˧ũI\nŋŽ1×5Нįj—QÜ^bÖ5†T( 33ƒ’;t5ĩcv×mF’0ÜĐ(#āįŠįˇĩRZ‚IœÅ­–¤÷ļÎlŠmģ–G`뒌¤.pyäŽ=ĒŪĨ›bV+…yŽŠ ūŠš&ĢėV÷,Ī˜Rwcž¸íŠeÎąa2°›aX“ĖlŠ ĄęܨĨvŨėUĸ“E=OBÔo.xgˆ´{I|må€īßڝwĶęŦlâigļĩoŨŽf Ēįßiëę*h5Ãiw´SÂļąâ¸<9ÆÁģčHĮŌļāŧĩˇ†iF# ™ĨØ™ÉÆ ã“Iļ„ŦdÜE7Ųâ’_’VåÕ[ ¸ĪįúVVšk{qG˜b&$¸ôúķZŌø‡Od3¤aƒm=øqĪ"¨Å­ißh@ī&įVÎĶĪëíBRNö)´ÕŽ^† ˜FlĀVˆ?QYZōä筜)m'ŲĖĪ'Ę2@ųp3œ ķĮjžēÚEr“ũĒĩūbĮąˇœî Ќ•dx–͏˜YXa‡ČĨ˜p ãÆ?• 5¨¤ĶĐďFŪE 'D˛ÎÛČË7ŋ'’ `ļÔÖø#$ėŅLrXŸ,BЖãךęŦo-¯X(lqČäqKĒiđ†i#W\įsc§Z|ĖQĮAoŠEc,Â+”–HĀ‘JŪd’ ÅTõÚ2­)˛ŋ[{˜Íĩķ@×< ûØFŧŒ į–=žojęĶ]Ō¤ũä“ĮŠ?08qʍÜûâŸ}Ģié2ŦM˜ÄxĪÁúŒĶæ—bycÜãŲ5[Ö3ĨԎ,䓖C)l„ĪBFĪ^j8āģ°}?]ų6öėĖWĖz‚šęy8ëķWGyŽØGBIxÍĀO1ųGŠį3úŠŊ öS]K M 2ŒpĀķīG3ļÁĘģœjGy<öIr.Y$ē/Ÿ›oŨ$äOĨmh†î8Ũ¯T ,„+ļ@āOį[×÷:|hˇAŽä8ę:f˛ŌûNš›\Į*ēŗp'Ž˙Γ“ka¤“܃ZŽHô[Öû–&xŲ\ĻŌF0kžu6ąžK/ļËÁĄ;ËyĮ–Į¨Æ?Ųô­ģÛģ Ũ6h§œ¤2`<ŠáHëØú֞Ÿs§AbEt% 6.öR[cŽ2hMÅl &÷99—Sĩ’K‹Īŗ4{ԐėRBŲÚpxĀĮ ‘L)ŊÚˇ*_PĖ’aÛ÷DAۜsŠŨ‹Po7Pmæ’ ‚ÎOZ¸f‚kd‘6aŽw×ŋ_JŽvē •=™Ę\. Ģ•{évŲš ‘Č7>ė'ķĪŋZŠõ¯[í)4L3nņ¨‰‚í, qŽšõôŽÁ¯Ą†Qųb]¤7%{u¨UĶ. ōHÜ$™ĄMöÜČ7úžĒōNŦŗÉČ Á*Ìg§#œšĢgĒ<0°šęYdŗœ˜ŨúÅ?'n¸üņô­ø5[K‰į…0YKežP§‘_­iZŪŲ”™FI㞤g˙¯G7šWs'A77W˛Ā÷Íj°ÆLŗV^C/8öãĩjXߋŨJm:6š9íYqæĮ€ã‘•įœí4˛Üڙ0ģ‹îˇlúÕ}*īMKŠįļ L˛+īŪxŧ vĨžļ+m.vŦéĪ;ã#5u“ģxœJI_i'æ95ĸ3"\6G8Īâą|Egū‘5œĘZ9pÖŽr=Īá[ā(}ÛWœW=â Ú{­ FUë3Iģ1¤d\čÖ÷w!“Ry.,Ã1PŅ’ģ”. ãŽ3ø“MĐü'–UUŒDY‚äĒ’Gn$g‰k¨\-ôڄŠO%ŠJ@bäāšę9ī]'…õģ“ļHLB'h÷ Ø>‡ĨëŠJĖߞÉäĸ°*6¨%}ųâš Ÿ [Eļ%‘å-¸MʤĄ9'§_Ō´õívîĮQ6VČŦc´k§-&ŪÆŅÁä×?&šmēfE}.J™Æãšü:â„Ĩm늤ēg؁ōĨ!Ië° \jpŅN ÖڂÉåËmc†á€úsĀŦš5 .nnmå0‰LR“ČnrGâ)|;$é Z…smQĐāwüŠYĨrŽž…ƒá5’ÆÉGŠŲ팁˧šįĪÖŦÜxK|¤‹ĐížĖßģ=N āû˙:ĪmZęgg´ ˛ĢVRNŌHāc’1šžķēϪm-’É*ë![‚™]›ēã#ĶŽôũūäûĨ–đœMö.čŦ°˛*dėN˜÷9<ū•{F˛1ž¤ŌŖÆ¯v^7+ÔQœ}AÎŋ‰'´BÜÅmÄ ;yž ëÍkmÜ\-ĖbÔÛ(œ|įį ġ 9Ī5V—A{ŊKđ‹Ģî‘ŨüĻ™%thvP=xjŨŠŌXļŠįoĖ=Ŋ eZę“\ŊŨĢ[F.-ą”WČ;”0 ņūEJ5Ĩ+æÄŅUāslŽŊk9]îZ˛ØĪƒÂVōXŪZy›P\bÉáW9ž :ž/ 4—•–$ō•öˆĐ`ãÆëUĩ[ëŲ5;8"ܑÎKĘŅ’Äەų$RYęŗé×ڀ%{c<0Ā…šķ€NxÎ=_ŧõš>ęŌʼn<ˆ%™ˆŽÄÚŗ'ĩ<ž °L—I$1yEez•8ĪõųGåQKŦ>§u^^b¸¸eLҐ‰“ŋ+Øã§ûBĩæēp&teM‡ssĀãŋĨKr[‚Iė7MĶŧ¤e!02Wn=8>•…Ēč/eŖĒųÁÕ­¤WIF̓ōįĄãĨxĸtąkŲ,ÎՁ&Ģä•vĀíÁ=@īVnuŠ6eŗ“Ía$žKČŧ*wzwŌ’`ÜZ3—AēŧĶ –ÕãÄöܖĪÔxúU™|=<7SÎcGi ģní`¸Âãļ{öɨ?ļę6—6ë)˛.œeĨ`ÆyĀÉĮŊ_“\i§ŅŦ›HépXm!8'铏zo˜K”Ī_ ŪGgųŖ0ÜŦĄYË.• “Éëžũ…ki~ē´Ô–öY]ŅXįp@õĮĨlËĢYŪžõhøŽ vÜLāI›îgj’ĪžM]MNÖâč[}ž;Á`8íEåmBŅž‡Yk$Š2ÆUH#į5Ŗā1…õ5FĶÉÛī ņNsî \Y%7•9ãšK`dΎXaBļ:4Ōė$ĐgnÆ1õõ^æâ+TY%“dc‚\ŒSÃ$‘üŦXƓ`ŧÁØlSƒëU™œ‚GcÖ¤•T7Fzį¯JŠæ‚Dž˜"Ĩ˛Ō*\ŧË ;ŽAĮ›4ގ4C¯Ž3Z˛îgÜ[ąÉĪų÷Ŧ‰ ‘‹+g$ņŒÖ}MƄŒŽ ’ gǜöéUƒüĖqō¯üęi:(VR ?Öĸ@Lû‹`uöčhBcr˛0 Ĩ€;Ŋ8¨.đąĢc¤͜Ճ€Ÿ™8ééP_Į˜ĸ*š/ģ'ņ˙ëPƎtĄ$Ÿ“ŸSENWËøŠĪōĸ€= LļļíĒdiŽŲ9#ߒj+8‡›" \ŗ3`€ĀS´q8ˇ‹Í–IŽöųÜH<Ž€:~ëXšÉmĮ9>õsÕŖ8ģ&iBä–]¸})¤Ú2pzĸžŠ˜Ā$u˙?­Q¸šFŸl`Į'‘ūxÅUėˆĩŲ;ÆĪzcŠÍŊ†4V”+Ÿ˜1'ôĢā„ÉõÉõŽkÅÂáôK•†)f‘QŠ™ƒíĘķīøPõĐkBœúnˆ"ķmĸĩō¤BĄĸŒ`}Įją ‹XŒŪ]ēFĘrX(Oë\Ŧ 2Íok ē†ŪŪ(Åē¤O“Á,XįöÁÉôäÖˇ†´ëöˇKˋ™ρLČßwŽ?uĸJĘ÷);écOÄVVú•ŧĒ‘nŧ1:BęvãpčOĻqÁô¨Mąm6Ö=BÚēH)7áŊ;dVĨ.ŠįÜ[Ãį¤jQĸByvÁlŅGozŠûQ¸ŸSK1|"‘ŠF7đŲęßÂA%N= -ĢjįFöēWö‰l?j1oa’ S•އ¸ĢZtvQˆbˆEâSŒ ņÎ¸ûŠnnl'†ãí Ÿol“˛5œ9 T˙ßBļ•&:Ē œŦÅŗä$-Ķ>Ô¤š[;‹oŖ×ĩ Ģ‹P֒Ē"~øc(Nr ÷āÕßė›VŽIe‚/ô•>q†ņčI?įĨNmîVÕFpwĮ×#Ŋrz}î¯5õŧO曇ižÕ Âķßß9Ą^BiE*øsN¸ŽF6`ˆDÄ;”tž• ¯ö=íÄâ;f[ˆØC2HŽ>mŊÁī‚9ëFĄwŠYh7 mŋĪR Îąė2k')w¨2Í+<—PâdAĘPXœcc8§ÚÜŽÆœúL-ŠÛlÚ-> wļ¸A–+ŽžĮ?…MeeŖÜMt#„<‘ ĩš3ŧmp6ž1ÎF=k!u]M"´ŽyZÜOŗĘŅg÷ƒ&âqÆqÅ2ØŪ[ęKnÎÛīaF3ĘĒ[Ąã¯åUgÜWGMĨŧ}ĸæĘ(ćū[ŗ33d¨ĀbNzZéövEní‰Ē $ĀŽoÃ3jjĄĻ™a- á+ʰo—ŋ.G$įĩ[ņeåÜqiīˍ’^$o°`'ž ôÅKZō>¤úƟŖmäĢų-ōēHĒ Fsųd} ¨b˛´[kHĩKxRflDQŽ×|a‚Fî?`%ÆĸŗÛLōĖ!3B_gŪklb1Ž `÷üi$ģÕŽ´ûV‘Ĩ ļ"âąäÉr;cF:{š^×%ŊŽĒ #JŽHÉŗPđ'î˛I*3Ī_Ãō•™Š_lxzhôŖÍÃy-”(TnÚũyāf¯É%ŌX,Ōá¨gQÎĶÜ~¸EŊ¸‡M&ĐÉŋΝÁ Áų‹Ķ<‚ LnØŨ‘ÜGĄé¯‡ÉfŒēž|Óŗî‚sĐ`qNÔ4›-D‰ĨGķ4YIĖ„ƒ´ū_­a]jsÛø~âî vKīCÔ1ôÁŠÎĢ{iy‡ŋ†DûTPęę ‚Ē5ũãë/o "Āņi_r°äŽ9öÆ9wÅ7ŌiQۘ™šû‰Ú„’G|{žÕ>õŌL~îö ›DĩifųgqrË+!Yvã˜ĀĢ'Ląļŧļž0ėû [ÚL‚š$įܚÅģ×.ZvŲs +ißk@Ž÷ĪÎĢ]jˇvķÜĢĖ…c†+•Šd™ŽrŖŋ@ęšd.h¤1H$ā_™€ÎO8=+Ģĩ™į˛¤!%eË(9ÚØÉĮ¨ĸ|Ë[ޝKßöL!-VĘčƒovŌŗœî_¯ĖzՉ4(<˜ĸ[É#0ĖeIJŠ œäcū#XЉ5ō­ÄąęŌÂZ4 ¸<Ÿ¯øVîĩsqaqn‘’#—æ’M›ļāŽ2@sמÔåÍt“%5fėK?‡-.šU–îö'“Ë+ ÚÄl ā÷ÉúÖÅĻĻF°ĘļЙ‡O,'ĻsŽūĩÉÃŽ\Ŧ‹7Ÿq*ÆAa$cæöéīVô}RöëR°)"ÍjˇXōōÜŠįõã‘K–VÔ9Ŗ}ū(ĸ”WEY .NŨÃč:uĒqJá”'ĖÁ ô\ÃfUŽ¸ĀĄ)j66ڍŧ–÷ |ˇí=ŊjX!‚ŪØ"’Ú ?O𩊱e%”°8Īļ)$Q¸cnėr9‡~ƒĢ/ÜtŦŲQ7Œ…ę7tĢrí|ˇÚĒĄŊ{ÔĄ‘ŽėĮ>Ŋę.j‰& /#×ĐÔ( ŗv&O9īV& €ÅvŒāįœpEGo–› ~bI4!1Œ;’>˙^Ģ^˙njŋ$ úÕ¤@έŒä¯ˇJ§Ē2@xÉĀíōĐÁĨԓōŋũōøĒ*#„“—˙?č^i'Ķ|Įv!§—fîĀä/́Z6ŒJ â>Ųæ¨ø~˛éÂī1WcŊ† w\~vrOš āg9úÖŗŨĮŠnŨŸÆwpõũh;°~@§ļŪߝH‡øôϏ“’9éT‰d7 H/PGZÍžŧHm÷÷ āG@kJPᆗ(Į#=ŊĢRą’dd6 8ĮĘqéŽ}j$TLˆĩÍ8Åö•hĖqļĶ!q€}ÍBúŨĸ+-´Øu]ÎĀēAĮķÍaÚø>îΆKĄ4ō4LO˜Pšû¤‚:ž„c‰ŧ+upgˆ\Ğt`ûÎFā189ŒSå‡r”§Øéíĩ#ÉA,‰ķg¸cČÍdĮ‰œ†ŊšKv”Ë ĨsÔ`œīP^xz÷} XaÂNˇ LŦÛČRŧduéíĀĒĐøSQ‚+MØ ÎämĀåË`‚:€xĮzŠŲ…å}QŅI{cs$˘ÚÛ:ŽüãņŠŊ(;§_›×ë\Ū›áíFÖæ×Ė ›xŨA&mġĻ1žüÖÕū…w<6å#ˆĘŗ#:ˎ@ŧoZ–Ŗ{&Rn×co|G,´ˇHĨ€Ú´ČH!˛¤u=ųŊ;V–‹Ŧ[Mei%Ú%ÄjßŪäŒã5ĪEáŨRŪ 0ņ#{'ˇ|HrėåH#åéōū´ąøbûh…Ĩ‰mĸ‡jĘĘd9'8ΑĪīTÔ{‘yv;-F+´`ÄFĄrčzū‘ Ւ]ųD“ĩ–ëץükbę&ĶHŽÕ%.¸T$zõôqŅx2îÖŪ;hRíTĨˆôG Ã<[Ž?ĨJIî>f´GU%֟2˜ˇėbÜgŒsU#Ŋ‚9æyŖh"I>WŪ‘q÷¸Tē…ßC§’æĘR“jƒĶqÖ6ĸ§QÕ!ˆÉ$Z0™mu‘‡bŊF1ץÍfÂ1ö{@mbŠpŦŽĀmߝ‹Īe*žÛÃڂj‘\IlŖØ¸Ī˜š$ûõęhI-S¯FŽ jvÎĨ l Ųėk6ë]û%Åŧ6ņG"K'–äļ ä@Æ?‡ÖŦļžßēQOŪpOųæ¸ųt I5Gs˜~ڗ*Äāų| ŋQÍLT[Ôš]luđO6Ąg$’¨’FE `ëŲŽ:gŌ¨Í§ü…Ë ã$nÆ)ē&™wcŪøÆ.od1“ž@< tũj–ˇĄßO<“[Ų$ū}„° ‚ Š öūGœS–ãRj;–‘Įm;[{t8āō+M.ĄbK)Ë€W=:× ęM-ÍĖV2 [ŧLŽ€S–ū.¸ĪzˇeŖëkâņ`e€´ČāH„åŽxˇôĻĸˇ¸œ›ŨUåÍŋ–Í ŧƒ @V/(ĸ€’/pyûūĒøĸŌxŧ)Š4€9ŽŲÜ18ÁÛÁāšĮūĖÕ Ŧ‚{ŗKä,Iķ¤îl€FFqųĩÕÉrļˆęŌ{XJ◁ôĒSjÖ7L¨›Ū <ļOĘØĪ==A⹔ŌõK‡Ōmî,¯ŅŅ;šD mŧîįž1S]xkUõDŽÛ÷rŪG6ø™?{čr įŽ=ęš#Ü\ĖŅMVņjėmÚÕĄJąeį ŽŲÍ6-8C⋋ŲĒ"ÄTî]šÃdņüFļ<3a=†Ž–ĪĘã˛y˛‚NWô:U]Iē›L¸û/š$b˧pÎ:dc’3ëJúÛäa7ؤ찂ĒFqÉZæí4ëiåŊIī cQl˛™Š”mÔq•ĘOk§ĘąŦ–p“|š‰NĶę8ãąŠ>äđË:DíJ™$úr?JÁÔ­ĩeÔĩ˛Ŧ˙4N!ķ7Sĩ@ÚIÚ܂zdjŠ ōm:‰SzĻBžbmgĖ:įÛןŊŽõ\žbæō6ZĘŌ;øîVŌØH÷ß,xĀ*}}ënÂ-.ßs[ŲÛÛģāÉåDnũ‡=k‹ŠßRžßOķbÔ÷#;ĘU”ÅPņË0 džŠtÛ]n/'™gœ,ošYĶ9;Nq€0OĖĶåķ%ËČôxâHĘíääžGNjÆäæ+ŸšĄ^rYG¨ã.@‹hbÄuÔŽ"&‚8ČÎEBĮ˔I!.6maĀžžõ#í/‘‚{sž C(%0Svx öÍ&ĘBēāąĶ‘•āķU$*r­ŗ××üŠŸsm%“ŒmíšĢ7–䚏æCŽFqPˉZP[Đ/`x5HģĻ@#Ž9Ģ“Ŗ€0zf¨ČA9^IįĨIĸ-ÜšcîšįĐTPßļĐF3ŠtŦdŽ"FŨ§Ļ9ÍClĀ9Á#k\uĄ –ōU”ōáŒväU=AFÔÚ2Y‰ô=N[qLär2Gnk?P%‘N į=sĮų˜t3 ÂNNīÉhĒû.sÃņøQNÁsŌt+ų/ė!¸0ŦdŗŠr8rŋŌ¤˛Žs6ĀYúāŌi´ô[|,qŗ&Ũ¸1õ9vÛėĀ!NĐOSZOtc ™ĄûĻ` āNôÕ1îĮ9Ī~ÔĒXŋČ IĻ•l’ûÕĸXר‚YN3‚3\׋56Ō´Ų."IÆß0V…îÃ&ē{„&4%N:pzV.ĩĻϝa-´žbG"ív‰đ}Į>ŖŠO}FŽūIoį°¸‘níådp¨UvËōÉöį"¨iZëÛ:\Ũ\Ę#ûŸ"–%wūëŽ+­¸đ­š-̉ŽcKX™zŽr9ôŦk_ čEŠūY"™Mēƒ*¸r@ã‚åŠjP°í";Ÿ\­ÅĒ[É#š0H—åŨũėg‡ZŊcâû§ķšđǧÚZÖrÄ}[=*Õī†`š´ˇÍÍĒG(q Č*z/B Ĩ‹ÁąDŦņÍ2ąŸížĮäqČ žšëJđhv–ãWÅļŌ]B#i—1¤žg•ĀFČÉį€ÁúzVŪâ;m\4hÍæ"ĢüˀĘĀ•aÉĀ8<xéXÉĄÅš1šIæ3@ ‘_oŨäįęOOZßŌ´84Ģc¸¸™Dj‰šÚĢ͐OlŸARųzŊK2ĪÚŧĻä) ˇČGņUôzĶR–DŽfEĩ]%B­Č 8> Õ{ģKK¨f°õÎŲŲ}5#tMާ,I•"å*6áß, īZ%ÜŽv2ëzd‘Čdš…V&ōäi>P¨ãØũ*Ŧú–—lģˇYŪČĶ;ON§ÜV'ü#Ė—ī­XÍ7›ĩAb(pzŒ|ŋ_jŠ_ę—lim•bÖ1=Oടáũ{Rå‡pæ—Dt‘ëvpx…´ÕœōDÎ qīīŒĨkØjöڊČ-.RcųļģĶ˙žEqīáũFņž&žŪ5ēĶŖŗ™•˜•eŨ‚9<įë_EŅ5uۍbūhĒD‘ydĢ(x–¸č:zŅhÛF'ÍÔéü낈\Fa=Ôr*Q—V)ãˇCQ’ āgäRFŪSÍßú˙…! pë)LgŨĨB•€Î=ĨM+d’{įŠ‚EfÎũ§<Ũ(e!˛ÅûÂŪiÚà  ÕYĄRí"K×īLuh2 ~ž¸Ē˛˛L’9ė:“PĘEgS’ ŽyÆjƒ¨ÜŽ­ōô8ūĩvPvė` (ە\ŠË”"Ž#Ÿ_jV4E냈ãį§|įĩSą›uăŒĢŸš¤oš'“×ĩGdqÔøÆ>ŋãI îYY*Ųā˛žžõ^ņO–sąž@¤“ÛãR ĸƙųyΏ§\¯˜Ēŋwåëø ĶĐÂōŗļ;|ÔU“fš?ģ“đ_ūĩ€ėü=po44w.ō™$RX`ä; ~•˜í44…ŋ ŽõŖ§Cök@"+´ą|ųbIũMTŌņ-ēČ#`7ĄR;ƒÎkJĒíĶvLŌDRØ,ß)ũ)íĩ°ĸRHÄwŖTî ŖļņÔpé–ëqö…t†'ã$—ČÉ#€Fß|zVT2,Z…ˇÉ›õ+•×s)ųÉ*OÆŊhšQ_ŪZÛ;"…VxÔíúzTO¤éhĘÅęá<ĩ˙{ØôŖ.…Y™šŽ§{§čĶ^C"ĄHÚAŧ8ÆAĮsYâíV=:f ˜–ép1¸€‘ˇžāŽŋĨlx­RO ܋3íĶąĩH žųĀæĨŌ´K *Ü\[Û€ŅŽõĀebȨ‹J7k¨Ū¯Cû\Ôloî¯ŌĪíqX´Ģ( YŖW<ÛĻqīWĩ8^â9"zÉnŠpv¯š3ĪĶõö­šôÍ)‡ɅļĸÂß*Ÿö>ŪŨ)˙đir´ĒąÂE !ƒģ3ôŖš=‰å}ÎZ]võŧEĪ §Ú~É.q Ž3׊ĄĢ3ø–k­įí–PȒéÂķlR˛™åIƒčkrãÂöąÛNöąÂōŊģGË´‚AīלÖM—†Kx`X‚Ūîx„T éÉīŽ94īĀĶčt_ģZÄéŪ_”xükœ]}õQj× •x…PŗFÚpHĀô>ÕÕÛZ[ˆŧ¯0ž~\g€@˙=j+m KĩÚĸŪ  ‰pÎd ôĪĩLl6siã[å°ŧ”ZÂZ–ä|äROˇ\)9é[:6ŋ=íõíĩĖ^X>C\úUČŧ7 ”>Å—*lt ËœãéíK…§XĖ÷qyr8É9ČĀëė*›]+}NwÅ×-î‘fÂ7´’āųˆĮī~~ V Ö°ˇŪšĶäˇXā…mÚ<ÁAa´ ķĐuī]Í۟§]Ü$÷IJąęš@éēŲ2=­´y)ƒ¸)ųF1ųz’I4;7ŠĘëšųžÖâāŠA #î]Ãr€AôĪpj˙Úz¤ū7'p3íVSMŅĩ[xîa ö9Nâ˛ŧäđ}HÍZžŅ-.īmguË[d† ÉĀôöúTˇ‹Wܡg}#˛#*Ŧc žācĨWÔ|OqiŠũŽŪØĪ Ļ`2x €ΝŦ-ē ĢpŒ+Ļ{c¨ĮįT¯#Ō!ŊŠ˜âFGhņn%†Gˇđ÷Í(ī°Kcĸ‚íaŗû`/“{ |ØÆyŦȕløsM2J­lÅYo2’FĖmäļAZô;txrĨ„Sc"FŨŊ“žsžųĨxöOškJÕaÖt”žŠ'PāũîšÜW}Ecę3˙aŪŨę— $‘Hc‰b,\đ:āc'9$V֙ŖÅĨÛ-ĨŠhã\rØŨĪ÷įķĒēŒjwōÚMÄ ,‹2íÛ'˂0s‘Ī9ž”]_Č}<ĘÅļž[‰mäÄąųŌĖ~gŨãŋQœũ憙̛Y¯bœMqqqĒK¸ßĐ=zĶCҤ•Ą€‰!Í >yOģŧgœcô¨§Ōt{[å‰Ļ‘g2=ÔoæÁąķ2ūGOj¤ãĩ…ioswOÕaÕ,b¸ƒ…ŪT†<Š2ŸÄVMūģjŗi“[H]Á]Ęv–ã?)<ÔzuĢēLVI§ÛAe2ŧ<ȅO. Éo|œÕ;ŋéĐß}Ŋåx¤,Č1Ŋ—ię;ņRšnî7{ē üˆūšK›™7AtŌ ‘›Ė ÷xĪ$dãŊuúˆãÕĨž"’)­ö—ŽB3†‚GáœäV]¯ƒlDđ™/U`ŠXTnÚųŨÛ9įôĢz'„,´ ÚæŌ[˛ŪP‰•Û*@<ę?­[”Y’:`ė䀃’z&ˆ˜ŲBā`ŠÁΏī,€‡‘ĪĨ! q郌})ŗ1ÜG;Hįåúū˜ŅápéīP6UX”$z‘R¨ÂŽvąāņÔ˙œTb4ķKáŋ‡Đ˙“RYBâ5PīÜúÖUŅ'œp}+bwPÄ2ãâą/v"Ž0Į‘ˇ‹Lyb|­ÃßԟnÄHãĄfÎO~ Eš"žŊsÎ@Ĩ‰‡™!nyČüŠ “;ĒvƒŊÅ2ââ8"I¤;cāžũ=ēĐ~PŦO?)ũE5wmLŽĢ’}3@Ҝ^ā1ÂqžĪëE\ íĶË?áEvr"Õ ö ŪAY%ž)Œ‚|˛@ îã<ŋ5YHāp3ÉOãŠÖXËoŗíŨ´…qÃ’1ëíOŌu–iā_)|˛0C†Ū§Ąõø4JMô’ęsÚØ¸Ķė.•¤e\2Æ@ŒqõĨhRB:œåh“žČQĐķ‰/.Ϟ´šîíĸo‰exØlÁ˛Ķŋ8<ā֌ēÎĒ^úEšˇ‡ËiQ#”ōĀFĀ\“ŽkŧE…˛‡Ëä˙wŋ¯Ö ˜îT)ę=)ķy #”Ķõģņ< Ķ4‘€Ūbųq—Îæ8=>^sīRøGÄW÷÷sCu'˜†åRčlîāq€@Čõ5Ŋm-”ŗMöwVki<š¸Øã#ĐöõŠRā$¤<ęĒÃn܎==čæĶa[­ĖOjˇ6šŽ”‘_‹Hn$d›*„ NāHāį͚ƎņuãXږ|ƌ3æ0‡ÎNzũܜ1œįĩvžLsÄD¤62ŧž¸˙ëĶ—eŊŒ¨‰”‚ŲčxįéB—ėqs]ËĨÉŽ7Ûî|ôŊ†BdQū¨ˆÃ1ãĻ įÛëUæņ ÛŪ MRĮP’ŅY•J”#*sßøp}û×~H]’Fnc¨ô#čiDVŽs$j;á‡zģĄ[ąÉ[kˇë–ē|×0´R;[¸ )WXԜsœ–'ęÅlëzœēv‹y{3<1ÃŽ;ŸjŅuŒí1•Č9ĪĶ˙­NX ;¸ų1ÁéRŪģyäڭ͌ēũÔSÁqsļ×į\]ß.î§0ÔdŸ[Ōō[_=Vé•ÁpģsŽø§î"ĶŦ GoÂUČôú{T_`ąUQäĀ Ø8öüÉĢæ]…o3™đ”QÍĻiz‘ įĮj-ÉP9]Āō{ā¯OsV|SĒĮŒ2"P.cVŽâ ęrĀsÁÍlÉoU‚ĒHŨŗsũ*ŽĢ%´V™šßíYu#„HpN3ƒüęy¯+ŽŪ邞+Õ Õ ÚÉÔĪhŒĢËģ9Ü@#ŽÜ×G§ë÷—w­oqŖŪڍ›ŧɐmol‚Fiiz\ĪŊŦmÃoĪ’šŨ×?ZŨ ­ļMĀuQÎ*ޚŅfēˆ.0ĀųsÃĶņĢ1ĖIp}wu5Ûĩ—¸<ôŠ‚Hëæ€7(ÃA >Āc=Ŋi„|›OlįŽ”õŨ°)ÁĪĄæ`ųcBzûTŒŦîŠNUG=@ĒÎËæ;*˙$éVä˜$€p>Ļĸ'Ė,–Į%#:áˇ&%éœČš]ČTĮŒØ;b-á_°ŊĢŧnOĖX6~ī ãęjęø€G5ŧąŧ‡Ë ņãąuį$võĩÔZ߯-žK‚‹ąrIéÔŅÍ$&ĸĖíM{O?tJ˛HÁœ ZL d“Ë1T5ëPԞkuļuûļŸ;ÁŸ8ÚzįTŖņ ãX{øįėŌY4ë8 pÃ'#éWΊŅÚIŠ4F5‰Ø:Œ‘'Ũzäcšv’w'GĄNo ę,Xnˆ„ˇũđl´^3—žätäÕuđõđŊķŪ tuÔ~ŌėdųŠmÚŨëÎkĄą×"šp*ģFčGŨ#éU/|Io ÃÛ0wm2Hc…Ī9įÛ4)OaÚ&ôžT•ķpŽ3ĩŗ¸[Ûh¯|E{ąˆ ˆás1 yE[’=ø?kIâÚ’!Že…ƒ YšQœ÷ČüûV-ĻĨfu´OhōĪ4ŌA‹ŽÜJןjqM]ŠVz‹tu"ËAöÔš'qÉ^Â0¯9ÍYŌŧ;{m¨iؚ%‚Đ˖ˆĶ=H#ŽŲäķIo­ÛG=Ĩđ¸‘mšÖI<ŊĢå˛ŠcÜ0Î1Ō´nœÖÎŖ¯Ãuj°É-´‹x ƒũ|ŗč9Č­+iŠČŅēŗ ãĻ WqV”™Éņā‡Ė%Ø\@rŦĮ(9ęqŸĘēÍfļĶmŌíųHQ/ž@ÁÉīČĢ2Oh"ŠáN+*mn+{ŗžv˛`ˆIUÜH˛G4œœ´ĩ1“DģŊ:ÔļĐ5´ō;5›,€Ĩ‘Áī´õõŸwĻ^ĀļŪEŧ뛝æ9=„ŖRô<ZģáũxũĻâŌōā3ĨԐÄv¸/AÎ3øVŦ:ÕĨü‹Rīãxu^›—Ô{Ž*›’z‰$ö0ßHÔ#—PHtô>m˙šIeâÛĀëÔҏäõĒņøzîîãNúydK/ŗÜ9‘C™2Ŧ äãiĶ]ëX,h˜âL„Ü “ĐtĀÎ{W9>švuģ˜5Xũ‰gVhKųd—]ĀČz̘šKs¨Ô —UͲ,žy€XÜ+ĀŽ āJä…¨JmK¸†4ž*‡s`+X€p9Áã9ģ;œÛ,Ŧûˇ 9 Ž}k—ŗņ%ԗ×W˛\4VŨI [|d(pHÎFŸ@{QëaĘŨGCaŠÁ&/ÚĸŽÔ$ÆLãpŒ ƒœ0-žÎI5•amĢ]hh-UíŧŨ5bf‘ĮīĨČ Žxųw œ}áé[ˇzõĢ=åÔΚ{(e;Xüŋ02q‘ôĸũ6Ūô¨÷@âîm¤Ž'ôįéŌåm…e}ĘĘęF´vˇoœŌŸhL€åIyĪZ“FąÕmĩËG’ŪXĻVîîYГåô98ųzŽ1[Nąn—OiÄ{ËáQ—Ã”`‘Ü•Ģy;Fģ@L˜ãŌĨĘ[•\࿇ļ1˛Ēŗ8ę9é\6­Ģ˙ DrÃe+ÛĮ<,dWÆA [ŽOLs€sZ ¯Ø‡ķ|āŅ™”Œō áąëW,ĩ];P,¤@áXTô#=GĪáBæŽļå}Iui ęXĨvhíœ! ‚ÅÚũŽkĸˆŪÉ{›wČÎÍķíoå].Ŗ}kaļšhvÜ.ečsGãúÕKIôÍ5cŧK…L8&C/ʹʎIĀäûSŌؙZå;‹ I53"XŨŒs,ŠFe@oâĪŪÆ+ĄŌŦõËKãöģČníŪ>Ą<ļWĪÔäTɯX[COEBī–áG?NGæ*ũޝkĒFŪC,Œ‡cŽĶšOlƒČĸîڅ•Ë 3nĩ†:㑊ŧģ„9#æũjŧR)'÷d¯ŋõlž6„R=¸įņ¤‘îb僀ÍČúŠIy%x‚8=é$„.>aô¤u.ŠoĮluĄŒdʇŠÃÁ­C§œ°Į^¸˙`"¤ŅÆ 11ƒĐ˙:X×'=jŧ‚oŨyˆU9#šąlX—`qŽP'¨įų„€7EĀũjÍŪ<Ųé’Aũ*ĸ€÷tmĮŊOpŦØË˛@lūŌę3$ܸ$ypw1đĸ‘’%b žAÁäô;ŧ­4DcXöŠųTpSĶĄŽ(Ucā`6GN*õŠŨÅj‚îT–bH,‰ĩO$€=áX<°éāÂåˆwŨ—ë“ØUÔĩŅģLę’42HQ˛š8,ĮE,oo3éC ~f1ž:ÕFÆlcd ļ};šĖÕmãžÕín!YŖ”a—šú{˙…h’Ž‚Ā^0MbøšvĶ´[ģøĄi¤†2BƒŸOĐuúSjû 5Ô¨<3§H“Ģ‹™EĮ–ōy“ļãˇ§ŋaQKáŊ6ánāąrÄȁ˙‹nŌF=Es“jēÅŧVķ\^Û#nI6gØgqQץüišŽ¯¨Û,ūt°ą]+Áfr?˛î>dmĪá}6d’iįŽ(¤2ā €>nGN3Š”hÖˇGûNÎGLɅō$ >^ˇĻ3ŪąWZžęîK9 :M |ËĩGyûĮĩQŌĩíBÛO˛´˛U";Ļųąĩķ€FIÆ;ɧË+jÙ&v¨#Š#C-Œ `ÖDžļhnK\\nģ™%Ÿxxųzp?*uÍÖĄq~Ę$ˇō< Y2|ĀŲãÛ›Ē_Ml֊›ÔÜN"įrŽG^ĪN9¨JW˛eļ­vZ}#O¸ÕU^íŖšWIB+.O–NéÉé[ˇk öĻ1ož Wl„0ų—‘Ö¸ØĩŧÖ´ųd@& r…‡LŠ#Øãõ¤ŗŊÔŖŌô›xeY%ģ‚F˙HÜyQ¸dįš8Ģpv#™^įGaá[VŒwq$e6ž[˛ížÜ/^:Ô'ÂöVí/Únn“g+ÁB60Āę?*ÎŌu‹ųnŠ"l%–,Œn Ŋ-–'ž01Åt…ūĐ蒱Ũ"į Āu2rOV4“&†Î˛؛~æWÜīĻ==Ŋ+.O Į¨]O,âhÚtEē#ėéÛ#§nՉá됐hyŅĐWu;ĸÁlāûņ]<ŗ´6ņÉ=ÆvDK°>Ų44âôų–Ļ%Ļ.Ą­ękqįŦBō)•]6ŦpsŽ€^Õ­‚`Y#q{7îį’ávė;ƒžŨ>c­r:j_ÃĨĮĢ!–Ū$2]Čī7^ljš¤Ú|Œĸ8mUŽ] ',ŦR0:g-ČéĐU†ņ˙ÛŪ9ŖËä1ņ’]†;žäŠ•‚čĶ_ Z;ģ›×l\­ã˛”'ˏ ĀĀéZZĩŒŌÍbÖˇO Ģp­„`Ô}íĀōFÆ;‘\•ž¨öw÷Nˆë:<„îÁ ü‹}sV$š.ŦYDPĮĻZIxęI`˛8?.ūTŦîGlö‹ŧ0 u^Ջs yڊjO%­Ī“äLĒĄƒ&ėä_zŃ[[;*;CIm%õĀ2“°däƒĪĖIéėißđ]Ũ<ë˛Ũ?:qđ‰c†ōÜÍžW`ņî2uČéĮךnƒSC{ Äú`Œ@ŒŽė1QëąÃ'ˆôXÄ;ŖšIˆ ÀŽ}9&ūĘ iĖËōø^9Rõ$¸)ÂėŲ@b •b¤ācn8"´´-{]BãTēģâādŒa(Ā=}yĮŌ¨]Ū[.ŗh˛‰ÂF% Ë?ʸPĮr㜭MWąÕ$–%iš¤žę 7•‡esĸvķ=rOŊNģ‰ėzđAČ5ZÚT$ŽXāÃw̏įiã=\Rkå†á‘FéPąÚ0xĮ4 2ĐrAî)‡>ISŽ((,Č¸ã‘“Į5‚FNƒŠž(š‘„‘l‰¤V?9ĪŨūŋįJëRrĀĒ *Jx+#ƒ“Ú°¯âkyŒË#/=? ×ē†ÉŨœŽÜÖEŅķ2n•%Ą“m‡pnŽ? ’"7í÷â’â C×ę:cšXKpqĐ}9ÍÉD1Î6 č=jÕÂD ä—˙Zlj +:¨>äúšĩ4Ę[ĩīŽ‡=xĨÔ} c9 GÚXsĶüš)ģ%í$Ę=~?J)ŠĮ¤ŽL|ˇn0k4ös`§ đ8ÁĪųúÕũ Ö; & tC´ø,NK1'“Īząķ(Ü9juuhΛ˛cā92ãŒöĢ'ːPc8ĀWe8lzQ"Ī…+"Œ0*Ŗĸ%ęÄĮ—ŒĄûŊ{š§<éŠa…ÎĢn˛lY cÕØ%šEŒĘwg¨īū5M‚1uģxŽã…ās…‰ ҇Æw.GxŪ%WîˆÔŨėZŗ.-›n[GČ*ƒˇ>•LZiÂ3ØĐ¤yØŽ=*Ô"īn$ÎõæŖšÍÜԜ×<Ō¸XÉĩĶ­áÖ.õ'‘e‘ĸXŅ Ą##'ĢséWîa´ŋˆ,°Į$9û˛ aųt¨ã˛šŲœ™Xm$õį<ūu+Û˛Æ KHįž¸üčnãI"­lPŠ{•âU–ōn:SĸŌôĐąÉ …Ąu$ÄâzœUĩĩ™“ Œ`uÍ-ē8ųÃF3ÔcúŅq2ą´’øN֑Å7VlOãŠŌ’ÆŪFŨ$*é´Šr6ž Š†{yŗæ¤›x#ĨY†IŠ€A=éØM”N—ĸÛ´etÛD1äÆVĨ 롎´û­/Kŋˇō'ļŽH”‘—ž8ĢŖĘäīPÄ`†â—ȸIUÃŽ=võ\QÔEĶ4č,œm–8$2Ŧ=8íR\iVŅ„–Ü.BQ”e8Á Šî+EĨ7Ÿ"ĒÁ5ŅwG‰FÖõĨq™ĢcĨÆ!iŅ "8ÆÁ”žž˙:iĶôŋ0Ėļ0‰D…ˇl‘ŒƒWnDˆd,Ŗaä€GáJ‘Í"ą!G/Ą\friēIÛĩ”>[ōëåŒdžŌĖžzZŖâ/!ĀAūŦ˙ jMĒĨ‹.Ķß­X‚Úq+2|Ë´p[֚lL“ÃúeĘ:ČēÂĻ4 e?ēĀ˜p85ÔģXí+€Āg#ëTā“÷ĄO*xįƒĶŌ¯Ū ¯ĘęsÜw AæķėųģŒb•.ŖkAĪNiT€ÜIÔg˙>Ô1éÉ ŒЁ‘ŽĐ#ՅA.übLuį8üĒW 2Á¸ô¨Ļ+ģ&Pö<}jYhĨuģh¤ôcķŦ›ˆķČ\c=˙•i\ĒH—r}NfŨG¸ŧü§#0jĸp|¸Áā‘Ī|S"QŊ'LÔŽ™†ÁíĮ4BÛn|æ’E#ŖJŲ*ÛoJ’LnÜ˙t’2OOĖRLŋ¸˜ū į֕˜ĢœƒŽFECĄŠc€äBúôUō6ŋį֊`zLKĩUB€8¨āXŖ–@ VëĻ¤ÁTßŋ-éÚąãŊå Ĩ@P8Ī8ū”ę´šš8ļ™Ž?/?v—ÜF:ã'5ųP¨|Ãå$tĢ-,Ĩrcč:gš¸;‘%bģÔšJæ1œ,Žīš°āRs´ûRØŽ`*b:|˙—ôĢÅ ’@žIčtŠcØŖåEÜ{mëõĨaÜĪyŠ8SŒd ņUÄŅ PœŲמүO1ØÆ@έC%ŦaK­¸÷ąžŋ; å¯ã Ž8ūub+˜åwR:`žGzHā_'qƒĒíęNGŊIIfß68★•„{Y‘סãUūØ%‘ “€Ã†ũéV'H]÷<8wŽLtŽ7ŪВxéÛĨe178õ¨.Tâ9z°É?ÎÕ+H“@…ĄÛœpxÅ$ņ[–MĐ“Ę:ûR°Ņž[Ü+Į#‘°†^ŖÚĻąĩA#Ÿ4ƒÜwÔĸŪËy-“€Į×;Մx!åâÛģÜА6W¸€ËũīJ#!A)o—v {ãĨ\$ŠÆI^įĄ¨’Ö0>G;vŽ;g§ëE…qÛÆÉæ,ß)ę2N*žá åd™ļ/ éZ1Æą ` ŸoZŠæŪ%YĪNŋ‹eëą×sLuĪáL–åQ>iāŒ:žH!YHX°;€i]Iō›äā‚=r)XĢĸ˜ĸŋ6Ėō8éM[ˆ˜ˆČÜÜĪų⭛d,HŨš@ āú~´ĻĘ)@dž˜â‚čĒÅxÚģЎ=W–pÛaÆ:ä“ZKcAĶōũ}h6‘7¸AĘįĩ Å2'îʞ:})$‹ HŒŗc<õúU“ŗ”H^ŋĨL Ä›•'¨&Ås9gs{âŽ9ęĨŪ !PČ$p}(´c–L’ĮĨZ[Ŗh”üœš, Ŗ T͚æ÷O˜;ĸÛHĖꉐŲ$úÖ­NÎŗDÃå+¸¯äųąIí#8^zŒf¨=¯’rŽĪƒģOzĶ2ĩ­ 5[*YįÖO69#la͍Æ3ũ*ĩ†œšM¯’UŽ rō<˜%˜œîĀsč+Ļļˇp¸pņ×#‘īÚŗnĸ;XŽ9ãyęĸúX:ܯ„\´Í—R@8ŸąÅFˇ›5cˇYs•xŸZXÁ‘sį)lîV^ÞOĩNö'r2°Õp{ŌũŊÆķģk˜öĢé0kēqČíYÖ6’*Ž÷9Į*ĮŠÔHöŽ ãéë×­Z%‰Ë*›ˆČÎ}ę&v96Æp*IRBĄ—ƒÎzķŌ“÷…A. ČšĄˆ„¸ |‡đüę 凔Ø#Ž:ОÅōrFâ3ȏĻ*ŗųÃpR‚3ŌĨ”Š7>HMĨ ÁČ<ņíYŗm`¨  ¨É­‘(_|žzgëY!î\€ũīJƒT:Q Šp vņíD Į+}8Ŋh2¸†aŒœ­ šŽĪįOjē“eŧ‡9mŖŸ~Ā͝HRIûŨ¸’ƒß‡õĨrĪ($esúR{‡C'sŽ2§÷cúQUßīļdQĪA'˙^ŠĄĢ Ä`ōž+‚°7‹y ËÃõ>†Ŋ†`pmĀŦ]+pŌŠUŨŊˆEAéԌš*ĻŪ„Ō’ŠfĨĢoˇWVÆOΧ-Ā G<ØÔa"Œö"šDf`H$@ėÎjáĸąœĩcʁ†6ŽGĒ ¸ØŖˆäÃ8#ŊHâ wa†9āšfbÎ9'ß?S2Ąšīk‰[€z‘ô˙ ģš|ÁÆŪ úT‡jËŋæ!‡ˇåëMY­Ø û˙MŠš4ĶȏQglu˙?áPy“ą;€rsģĩX/HL’# @8 ÷į<ŌÍuĮhåW!ppy€¤‘îH2ô뜕‘ĘĄž)A*z˙0jÚÜä`ˇ Hô4äkiGæ Įļr)X égš6@duųŽXŒŽ™áWm%gEũâį˛öįųt5%ĖvōŰČęzī~Ԁ[Ē(I@=Î3ū  šVg¸BĀI÷[…Į8¨ Åæđ ä70öõÍhĖ-/#Węr­ĮĶ=ÁČÄAŠŗ`ƒŽ8ČëH.fų—eO8ųN23ŒS<ûļ;7c#ŽÜVÃD“ĒÅI * QAÁ”1ČĄ3 ī]‚ÁHēģ†"Ũŗ;€j’øįOŽe?ÚVÃgĘ@— ô­Yô[[ģŧŨÁo) …2Æã9ã?…7ū(Ɂabp1n™Ž*“Q;‘ˇŒ´§txõK?)y@#­Nū*ŅæÄ1ęÖ¯3d*‰ÁÉüé‰áÍ"% 4ë3Áę'ôĸJķ‰].ÍÎ@ƒ“œŽ™éEãæbGâŊ?,N­gą@ë:õ?A‹Ŧ"šs.ąn˸‚­2q×ôŖūI#2Ė‚Ä)0.1´p8Ą<'ĄĘģ“Nŗ*0ōWņíEãæųgņŽ’€Õėž?×ΝԘŪ,°Ž52jö ¸n į¨Ü:gŪ‡đσ•oė›2ËÎJũ*EđĮ‡˜…ūʴɧJ/?ĀVdxģKŠūØ˛Ã¤ųĘ?@ž/Ķ1 VˏÜĶ™ãžŸÖ¯ h;BŽ‘hr OÔt§EáŽIŌl˜įĒÆŊŋåG쿑ظŠĘūî;{=FŪiŠ–’8ĨhÚ\LfE'Aô9¨mtMOŸÍ´Ķ-â$íŨJįø ´v N' ZNŨŧÉ.ϏÛIl væ¨\,ŠĘā…c…Č\÷ãšĶh–HĀ"2Äc§_Nôôĸô˙>ôˇ ŒĐĖc“ō2xρؔ•\’zö5ŦB&\€§ž ¤rēʧ0=( ™f\\+äá—9=#üMiÄáŌ69dJØ9Īqߊk[‰IÄŗ\R)4;™0Ĩ˜”NŠWpŲōŠéĪøÕˆĻ‹1 ÅYX›ß§jŊÄA R‡…­ņEx‡,c{gßühĖ+ \víč*eŲü%”c8"ĄŒÍō°ãŠ“{d3ė{ũ*Ņ VPw’¸<ķ‘L6\3Øäc?äSܓ‚ČHg*H]ę2:˙JŠe^™ëĶ5[åÜAoŖ´í‘ķ! tĒ×!Y›va×ķŠeĸ„Š~nIäZŊ\!%NAÎ j/{¤y]­žŊ}*…Á‘§$/ËÔ.:Ô!×B°6ė–b3øfžŦėœmSNzķū*§:€ą‰Đ†ųIčx5wī\ƒŒžƒŽ´ Œ•H…‚ 'ķĢ1€;I$Ø÷öĻ0IrŲPŸQŪ”KĩÔ¨iRAņ€)uC ‘ ąû;uö˙*vĐ#,Jjs"“‰ŽzuĸŽÄÜôÕ鸜ŽÂ¨ÛDldGō•°čgÖŽĀĘHmďŌϊ5‘vŦ–ˆĪÅTĖS";Į8SÍ e$Ēį;ēR2a› ¯4Ô.7Fr:~5HCˇ3nBĄx<­Ue–8šÃž,5bH÷Ë@ĩ™wæ­ŗŸ9AÚqžFh“g,ŌÆū.záqЍÖ2Æ&$ã<õ5JŪöxãRãĪķ2CĮĐ`~”Ë˙ž™wkmˇ›,ĖPāaxËjô/cjÚÉ#€Fāį9%šíLûžl‘Ą ģHR:tčZŖ{â)-­e’;'šōš‘Q€`ŸÄ@=p;V•Ŋô^[ŅƊčŨ˜ĮãIŽĄ}D6Íä›qrG=éæÖO1 T“XÚ¯‰˙ŗomí%‚iŅÂŦxbĮ<ČĮnŧsÖŦ}—S†ŅŦæËnŲ.܁^‹Í[ˆwBÁQƒ7P:{⨲†EōĀn ĮųöĢgPmcŒãĻ}Ēs –ā‚:c€•‹c>ŅÆcSÆFCÛíe`CœāĐ7q´¨ÛĮ~+Hé ‘˜Ž~qĶ“@™]3Ī1~4Ž I˜ Uˆîé‘MŒÜDâR„¯8~õ4 HfäíyũiaģO,(;W zäqŒS¸4Yvgˇb ¸uĒ6ˇ…ä6Üe ­V'ĶNĻēqy™;üĻÚ_ ×ĒØßŒ2îëŊÉåW¨úœĶz šI}ĘrĒ÷öįéųŌîB¸;H9'Ķĩ)ē˛]ĖÎ01ĪzÕ{ÍVÆÎ–iöŖ0Q‘҉ŠPؙĸž)bŖãõŠ#kĩ}€š[gô5ŧI›<‚āôä…J—08Îōp:áū´ŽÆXōĻyAęBNqÅG5´đÆæ#Ņz“UžĶͰ33¯r0ā*9ŧEeixļO$†E‰Ļ]ąŊ@=3íM+’ô4mŠæBwŽGAU$}Åâ%Ā<ũ(°Õ­u+xŽí„›e]ÃpÆ}8ŠîĨX€mÁŸâüŠ=ĩ+īu]ˆ[Čų{z~”ÆŽVV%\Ā’qQ Ô2gPÁįŽÔŲoãX™“'<ã<õÎĸėģÛyĢæG1ÜĨˆēĮΝ+—°0¸^{uúU%ÔW`G̀Aę4žp2eĨũÛrĀúūuIļ&ŦXÎ›;šĀÎėũOįNˆz…å*ĘyE<ũ~”å– ˆ›æ$ĻœyīŠKI#{ŗ#ü˛zŖüiˆ×…3 ŲĀāv§6r¤†Ģ_+:gĖ;ĀÆ3ŽjÃü˛g<ž1œÔle'ÍÎO%MJ,†I'khb˛îä‚OZŗ0›ƒę ĮûGŠĨrÆ4‡’_9$÷5p.Ų×$dtĮŽpi’ļ ˧#iüj °Æ|1Œ˜@ķAäp9Š_-  Žvczšl™ˆ+ōôíÅCĄˆŌ€ĸv8ã‘˙×ĸĨ!I'|CęúôUķcĶ´„h´Ëx^G”ŦAL’ģ1“īW"QA(é•YpA!¸Zå¯íĶūؐŠĖö[a•únV%”{⃸TŌxĒÚĢģįk¨ ´‰Dą•R¤Čr­ĮĖÆ2*i|Q¤\%ąēRėōnf€åX>ĐŨ2>l ˙õčåh|ČĀŅ-/t;ģ†Ô6Û[‹u/‚ +ŽKt$’Gsœâē Ûđ•„*ŌDÆ-Áq÷A;ēvę)“kē&§wDši$#nÆÁdÆpqŽ0;ÖĨæšm¤Xŧ—$)ŋamšĀų°8ô6ŪáĸØåîtíZ_M¨ 6g†Ú¨ķbÛ9-÷¸č=ņQ_Ûęšbę—÷‘K÷ xL ą+†dLäIãŽ}k­ĶüUĨŪ\}dĤ6AR1ˇŽs͍ëQ]ęÚ¯§Ė˙hGŽÍÖA"ČWËlpĘ~žsO^¨W9­×ÉŗēŋąKËĢ…”Bm%wŖáFr}wįũĒė °˜E!ßķnāníūMcxZųī¯u&DėČn2LŽFX“žzšéŒŅG•–89ÅL“nė¤ėyÍļ‘ŦA’›IcWÔe’x•Á ˜!AûŖåãž:UŊ7@Ŋļ×#gŧ1ڈŌvf$–ČÎsĐØ ŠĒx›X˛Õ5¤û]°M9‘#[ãÎŨ’üŲéĮŊtëÖSOm­åÜ6ÜÄY“vŌqŒ÷Ž*ĨÍk‰4e×Ûnĩ'ĩxÖMš| =}GoĨ`xģMŋšk+;5š[VŨæĩĒs…ųWŽ'<ž+lꖐÍƟ}aö9f˙Iķ ov+Ûūī^ب!ņe´ļ˛\;-ŧi3C‡ –ĮN™ęjUĶēCnú6jiúkÛÃŪĖë ŽéX1ÉĪŽ-5‹mķĨ­ø–x§™Uæb°ą8O\prsŽ•Ü[_‹‹HîmŲ%‚ õĨŊÕŦ­‘ ÔąĀŦvåßh'ļ)Eĩ ÚšĖč)š×÷í~ÁĻĮځRdL6@<‘øÔ:ũ…ûj˛y)|"Hūä¸Wg`20„Įđސj05ī‘ čn9‡xŨ´ãœžĩ=ĖÁÖ9”m•X‚¸ĪųâŸ3ŊÅekhÕ¯?ĩ^%Ęx *SvÅEÉÁĮņž>œÕ†ÕOvŠãR ä‚Ā!b­$ŋ*ôĪĘ įŋ5Û΍ZXžâ5yOĘĨ€'¯"˛īoËUĶímŠĘĶšY㚌ąũqøÕ'Ų Ūe¸/gēŧ¸ĩō.#kuL´‰ōš#<ū˙ZĀ֒ōDųFq°ŦQÆåQs–< #€?•uĶēˆ•’b9îO~ĩFãVŗˇŌ¯n!ē‚y­Ņœ `üö^=Oĸ:=OUŠ‘r^įZ͇—3Ũ[\ĻčsŨŧČ8rN"ēKmKíĢvaļ”43›ÍMģˆĀ%}GŊfiÚēĢÛI"E}Jōs”RÄā~†¯}ļĐģ]Ģ4 …Ál”Ũö°+nax¸ÜĮmjĢ<ą;+íŠæI1„$öPNH=kÄw—­ĻY͂†ÜBKĩģm2ž9ÁāgŽÛģ]ëŪĀō&áCĄÃŲĪĐÕ{Č­uģq ’Ŧą¤Áđ:œŽAúqN2åĩФ¯ąCHŧKËģ‹DYAˇtŽĨAÜš=ú8¨g å‰ũ‘]åÕŧ3ˉöpĀ13!HĮ¨āՈí‰,$Ž3ƒŋ rHÁĢį]‰åķ<ëRÖZÖSkku5´q\Cl#…Am›AbÜg' kŅ=𔑎P{{TōîOœįoCŽôíB‹Í"h#›Ęyb($Q¸.zõ¨›NÅÅ4yÂj×-—Šu$öãĪ•ã;NÄG’Ã3ôÍ,Íâ‹ë“¨C:Å"  •ÆrO÷A8Éę3é]$V?ŲúbY&5cÚ@;†:˙:ЍhōęúI˛ĩ’f.ŦA\ciđüĒšâŨŦ.I%rŊžĄqmk%ũôūu—˜#„ĸĢOs´ņ×ôē‹č¤‹OsDpÁcŽō¨ŧ=Ą;Jh%ØŌŧžl…qã…įVo’I-šĨqšĪV×úõíRÚžƒ[jr:§wkq§JuŊk˜d7P\ôn8 2É=k°ĶŽ"žĩŠöŨÜÄÎv—RR#ę+GŌdļšK‹‰Í܈Ļ4bģHŒ’Aäđ>‚ē4„ũĨ6*Ē‘Âö˙õÕÍĻô")­Í5ĀáFĄŖåĀ]Ĩ€û¤õüiŠĪ(U8éĪåJ$c÷eG'TŒ{Åį!<ƒęy¨wpCąa“R†'hŽFG9üĒ7Ūęė{Š­$‚3å™zōĒŗšO™wĐwĢ2e~ö3ęyü*Œži;ASĮ&¤´Sw&āŒÎjĨ˝Ä2“’W#5qŪ]ā ãšâŗīZeŪ/N€u cį*ņD `ĀđAīúԑŋīsĐööų@ō?–…”¨q֞ŧÜļx8o~sJĀŲ+ČĘvįnr~´¤ŽØÖB˛ŒnĘ1L•‚E./$zuĨ $–(ĶæųWyĪJ]Alcî´<\¨?ÃŧqíEiIĻX<Œīiv$ļBõüč­lˆ=ÖEhŅ–2\ÔüÄņYrGˇĨGjîÖņģ0¨%}3Í<B6Á€= )=ˆD&ŪŲl%@cĻ)Å÷–FđA=*fķ|ĢīŒUY\¨˙W…cÉî=魕Õ H¨Ŧ-WÃVzÅÔwß\ÛΞŦ6 0zƒØžF:Öš–5` })ōšR;įŠ/Ô7Q𠜂w…ÉŽâhä™YƒĢííž3ߊŠ]ŽŠũĄëFíĮ"Ŧcæ I9āzņ]™ōžáBĀū5EÖŊ¤€Ũ‡Aū=hrcI~‘ákÍ7PĩģūŌ2,QųA*‚šÎ׊õ5Ŗâ ;íĐDqk:I"ã&P¤ŋ˜ĩŗdŨļH؍ÁYpjÃZÅ!`sĘõ=ŗš›w’9[oÍķ:jŠ|Ø&FfŦ’’Yēņü#č)öŪ Ô ĶtøžōŅ^ÚUvU‹åmŠąI9É ō3ĮOJęœAcȂG ۘyÅO ą\Æ˛…+ÆAqČĪniķ2lŽ[FđîģĨi°ÃĨušķ%o,0x÷ËĪņy5ŌÄķHBļ9áNŸJžÄ_vö¸S€=éæŽS°į#ÖĨļõatq֞ÔÄwšÅĖŽ&DqÆNá>Ũj)<~ˇŗ8¸Cn÷Ë|̃æ 1€žsŽ}?:înâØđ‘ŒŒŽIŠĨqķd]¤€6E;°<Ōëikg¯Š ¤˜ÂdfÚ6íV#8<œ˜§ ꖲ[˛ËlōÚŨËõ%\c(,71}ÜävĒsBŽĨCüŊ:túU—*ÄĒ𧁃ŌĒ–HãF9 0s@ÆMˇĘˆ!ĀÜ>PyéNB|á쓨ܚIŲV% õaŽx¨ãoŪēŠÜÃd˙´M$ &ËBã^iÅLmo–ØĪ~üū4“ōd(Áū•ŋnų.īŅOôŖ¨-‡9Õ|ÆÛ%ĻܜnŽLūâŒķƒ“šBÎ˙]Ãü("Ž0¤ČĪži˛ĀŖųJˇ\ö4åŲ˜äúûPŽÛK`2ũjtŖGĐddōô˙õĐa‰$''kķŧøĶä"TȏŽĮ‚hēAŋqpŒSârT7ːÎhHĶhe!‡sšP¨s˜“pä āķŠaXĮÍ´N E„8"1ÚļūēŒEåœö$įãJY‹d.ŧy¤y € FzŅa‰å17d.yĪqĶëOōĐāŠČw&šg/yęzTtqž5`Œ:gŠ,ƒPÎJíôāRÉėWķ3“Ŋ?BrįX ا0€­laéĶü˙JV€œƒ€HĀÔrAâv–ČĮÍØzTĖĖ%b ˜ÂôÜF~”åŲ"n€:ûR˛ĘB^G@CS´YVPYÃuŋįJwˇ' ˙ڤܴ)Ą$‚älģG sŨŠdRwrŲÆN_zY,EÜF3P´‹ŠAÆôũhޏmŒäœÆ o8G"ī,Ä„cŸŽ[vÛÁųpsߑøS^Xö‚@°ķôĪ֕‡r¸Œ¨eé“ü˙*ŒĢŗîl$v=ęËī8î=ę6 Āõ9<1ūĩĘíĨ6ŗ†\ņ€ J#’@0ÃúsÃŌ™šW†Ldķ‘×ņŖtEŠīt'Ą @ípCûüÔĄX *áˇry5á†ãĀķß4+"˜ÆÔ*—éūTÖ$Cį Īâ(°yņ–iÉæšRąĘÄÄ0ŠæėĒ{†āŌČĘ6ņķ‘Å0"ˆ@ëĘcqäu§ŦQ0ܙČüjḾ¿@:}jž˙áMåļW/€:ō)øV$ŠÚārzdÃ[žzŅp0ŽG]‡šHų08GÚÅ~W#;M:Ų6ÛĸÉ fĀqŒŸ\TPsĪ<ĩU Á=!ØĐM˛.ՓÉ_QëŠ^y“†éƒÁ¨ĩ°í΁Ļäũ˛>zŽJb$ųPŽp}OOņ§æ.ë֘ŸęAī僚r˙¯Įoū°¤ãi,Ŗ'y4Œŋ7É#ŒđF2*(Āhî3ÎŒöéJ ų~ŸĐS°f!ĀŨ¸9­Fop˛€1œg¯ãŪŦdî÷Įķ¨ãĪqŽ’ ~f“H“€O4íĢŽäN=;Ōõ’ēOëM2J§ĻOđ ˇĖ7į§ĮįJQ€ ŗĮQĀÎi:J¸ãüŠUÁú @f]à ÷\âŖp\žŧķM„>¸ÍI’QrЁˆ´•.ŋî€㑓æœô ņš‡ŖGŽ2'Yˆ?Ü€‘Œnrryč)ĨQã9!—üúR‰Įaũ)åõ×ø|Â1Û¨ĸ×›PƒĀ=r;~4ÎBå}c7~ ~ĸ—ĻHëŽŋŦÛŨq“õĻHÄE‚áˆé’qíëS\ŽƒīTgũ_ĶĨ e”ŒˇPiâBŲ^3ė2 U—ū=Ņģ‡<ū&ĸˇäžŧŋú  ,Ī.í‹ÁÁíLf`§…%yã—ķĒŠÅÄØã?Še$ZHū5%" ČāŽGjo8#+’9÷ü* ė.€ qˇĻ}ęt$ĄÉĪ?áG@"ō7 éM,Ŧ Øč8ã¤ũĸ1ž ÷â™9ũéļŸåI”,ĖC*ˆ‡¸÷¨&f’2D[XpAâ¤RKŽIę?•K'EúéR;upˡˇ?ũjĪŊ`NAËq2?ߔ ąqÔķīÅcŪ€$‹‘üŠ #˜ Š<5šØ[w ‘ČŠWįOļ=÷ŸëE§.äÎŪĻ p-YĮö=ÍWĩÛ-”R€NÜôÁĀĢ›AŌgbmŊj‰Ûdáx퀰ØķŠcˆ*+ûEōāã ĸŦĀĸ˜˙Ųleptonica-1.86.0/prog/percolate-4cc.png000066400000000000000000000133241506303110300176610ustar00rootroot00000000000000‰PNG  IHDR€ā,Ö2PLTE˙˙˙   ˙Ā€˙Ā˙îîĀ@ČČAiá˙Ā €@Ā€˙0`€‹@€˙€˙˙ÔĨ**˙˙@āĐ333MMMfff™™™ŗŗŗĀĀĀĖĖĖååå˙˙˙đ22î­ØæđUđā˙˙îŨ‚˙ļÁ¯îî˙×˙d˙"‹".‹W˙‹p€Í‡Îë˙˙˙˙ÎŅ˙“˙Pđ€€˙Eú€ré–zđæŒŊˇk¸† õõÜ € ˙Ĩî‚î”ĶŨ ŨP@Uk/€€€@€@€€`Ā€`˙€€˙€@˙ @˙ `˙ p˙ĀĀ˙˙€˙˙Ā͡žđ˙đ ļÍÁ˙ÁͰ|˙@ ˙ žžžŸŸŸŋŋŋ___ßßß???ŋ<Ëm pHYsÄÄ•+HIDATxœí ˛¤*E5znÎq˙[hÁĄ´ÔW d&÷Dü×5IrÄĄęKU@iÔ.;§ņÄ-ôúëŋ7• NR4ę~ũ÷ņ>ĩ2=žĶ†ŒãMĩ§ęúŠž;ã(ß#đJ=ËŋpĒ…(šŨĶaŗíMĩĮęÚaŦÆĄ}( éŠûeN¨×ô˜?]ßÕ]?˙1rΨģÖŧÕvËķöZzyНg>¯XĨŪęē¯jŲž_™kfŲĻzy˙0tSŋ?škĖžp­wũėRíįE3ßĩčLĄqŗô|õĩ žöĄ:dĢ^'Ûq:|´>ô,ÔUĶ,˙~4j:ķgÎŪ<sÖÚyį4?0˙Uõ°%°5īŲ—ļęúšT;ß9ÔevnŊ‰ķģfˆ>•o¯Ø*MģíūĖŌ´û“ûÆĻęŽŪíŗõéÅ؎ؘC:Ξ‚¯Î^]JŦ]œ?ŌĪĒWCėÜĄG`Á䤯žœ_—?ķ“ļ2Ãˇ¤nŪEølÉ~:øą?}Ū9ÔõŠęünõUų¸Ī2×}Öąĩ‡ÆĒģzˇĪ^_<̀ítÜŸ‚¯Î^ĩ%ļ.šæzL+‡Îa/|ÁîÆ/Ģßz<>0“Ã'‡ËKĮ´vãŨ;ëŸO —wĪ•īA C{Ū]ŨøiíšąkŊûgO/VÕA˰ė¤?ۃ?TũŠäÔÃK?ēļû~ņŌŖŌąģ¤é/ˇÕ 'Ģ͇ĒÃ@œŪ9ŒáW{“§Ę÷ æāųˆih.ÜVw_īũ‹—ĐÎXĮÜ xíáåÕĻ^oŽí}÷¨t–D5?fĀ}ēØßąt—Iq›hēˌvœ¯īž+˙ đüąūxÄ´ŽeķŖąkŊĮđÜØiü:<¨ēžīaõ5·ˆöS_™;÷¨t–œØSA“ŧū*`[-ĮĶûåąĪ€šęǎ¯īž+? xžĄN/<7v­÷t xzą}'āMÍŋĮWįéz9üÎÜĨGŗn”æÂĘԘ‹Õ9īöŧnėÖsšą9ÚfΎsžŗÉo'ϟwļ1œÖŗÁëģįĘí cFíæ,øđäšąkŊÛgO=1;ÜåšŌVå×IČ1øCÕõĨīģZĶᄎ7_™ÃYđkæĖ40Û×Ų¤<^ŧŗW`2.p}^9]š;Ī€ß×?īž*_Ôéė÷—뀇']ëŨ>kĢũŧ¸]øîyFĒ9‰oįҍžËæÛEPÄčĐE_ØŸĀ›ĮÛGü| ũÔĪZ§;Eü~öÖk{‡åÎ . ÂūzÛü_hŨå˙×ūãDėwÆYū?ĮaŽíŊÁ ȂŊl ` J'XBķDŋ>|Ņü›ˆU5Ã7˛TÍė´æš=é`í§Ã?6Ī810M3;æVwö:āh¯ņ9>ČąĒføF–\@s3Îå65ũvC—aÍ3N LĶ !8).˛AV Č Y)ZĀG˛FR.Å ø-,ĖC™>š“Sĸ€ZĶRž€ŋƒ‚ )M@7š0 &Ŗ,=ŧ‚i(J@/Š0 &Ą Ŋ‚‚ (GĀ76AÁč#āK•``dJđĩH˜ãRˆ€!Á˜”!`˜C00"%ŧ…ņ(@@}p  ũŌ¸#Q€€DÕĀĀ(¨Líjc \@Rip*ŨRÉQ- Ŋ/0ÍưŖZĀ(•Â@R IHŠ^Ŗ‰) 3Āۤ܃ÄĄG@˛šŪÃa#†yŒ=(DĄF@ĒŠÂ€ž@@Z¸Ä!%˛™yØ"-Õ ôC‡€œFS,P" M54° †=*ä5éđІ;:$Š… čŲ 8쀪B@ŠJHá[ ` 0:d@]owųÍšRĮŅæO 0kĪd])‰åXÃ@G‚ °wŨÚ*ÛJIL‡šgTü6ĀŦԐõ.ųLGšévÁŽPúéSK–…jØ4ÛĀxjžZkNƒkˆ t!Ѐu—šqĨ$ÆŖĖ84Ŧ“Õ4öŸ|Į€œ§Îąą!ЀeœqĨ$Öc hĀēōQļ•’˜1īčXhĀV<×JIĖG˜ųöÁáßs`ø Ųō_ūfF¸€4QÄD@ˆY€‘Áø7ĸ1¸"‚ˇl‰ĸˆ‹Œ(s!Y@!s‹03!Z@Ē("˙&@L , œ‰EN¤é‘, Yҁ@Ā$HŠ5-r5̈ 6)‚¤‹"0đ˜aá&CŦ€ŌĻiņĻBŽ€„Q$Ū“ī* ÄŅr|Ä HE"$n4ҁ€ W„ (t(eFŠ’F‘ ĄÛML `R`ā72”;Žb…PiŖHˆÜM'010đŒHEĸäØ# S@â(’"zëĄ&GvôÔHPø"<|bD HEb`ā0ĮŠîėMw“.Õ%~üÄw€ ĮŠ­Æ&õR]ō'ų= #HĀåųmâĨēŒ Ü pÚæŗ¤Ë4h< } !HĀŽŸęiÜkI´R’†Áø$`=OŊ10Ĩ€:ÆNG/Đė‚Ír…)—ęR2rJēDđR]ŨļRaĘc@%#‡)p!HĀÁœ÷]ŌĨēÔ œšŽ„v°kį=p›tŠ.=Ãϧ'!„}b΂WčĸYĒKΰa 4ˆû.XҍÁĀJž€ĒMS_Ū"NĀQäBÕÖô˜(M@m#ĻŦ;/&`”(ōĄmƒōæĨxe ¨p¸ôõČaƉ"' ˇ)/ `n 7fGe§œ% ÎÉBg¯\‘%`¤(2S´Zûåd@ÉS $õŽ“ŪžũD”€ąĸȏâŽũ˛ Ü)P€ĒIsßūD’€Ņĸ`€ę­ë/ J5rAy÷ž# ö)B{˙$`ŧ(xPρú{xäC‘S Kúø#FÁ†":yrĸĀ)˛ĸ<ĨXĘČŌÍbŒ#JŲĐvÂnŅkī2mnû}ŠŽbÆĨ˜ŽŽ„-TŗŨp7ūR]ŌKiS €C[Å]ĒĢ a)¨Ģ†°eÆãƒ˜Ë4”4(%õ•`Š.{X}Ĩ¤’ĨŦ)0l܌ķa] i)ĘĀđË0fĄš÷ē-ÖTԐ”ŗš/ÕĩV˙°”Y)i{ [)Éü1‹muŠŽ‚ÄR4Į€ą—ę*gæŪ”KÖĖ30_Ĩ“ķ@‚*į$!›Xrí†! XÉc qœ,CĀGŒQ€…ģa¤7‚#É'AÎ$6‚/ŌN‚\ÄI0#RsFžH8 B@pG2! ¸%Õ$Ái„€ā‘2'Á,I0 r0kā‘č B@đ7‘„€āQ „€ā'1'Aˆ§ qĖžX 20oĀ…8 †Ūĸw-¸RA ÃĒéÚĨ|čJIPô †Ũĸw\Ëm´Rĩ‚ĄĮ€KųĐģäC@AĐ*H#`āB58 –Ĩ‚< ¤æ™ƒš´kå@@(žRŅ1  É,H#āĐV!+%A@Ąė‰i \) Ę%TÁ ו’ĒЕ’  dÂĻAßã*Œtd!`Ū¯§Aˆxį tŧpR|„€€˜^ķ qŦw9˜7G! ˆ†‹ƒÄäį!ąųSBRđ(!Џ•0ŋ€¸ S ˜7œ“„äāßf!Ų0B@˛’]@œ—M~ķ2AV Č Y€ +d%ˇ€¸ S8ŲĖÛ>Č Y€ +d‚Ŧ$đvŠ.X8éŧ_Ē N:‡ļz\ǎ7Ģj†odКyĮ_KuųĀ810M3īøcĨ¤õD/Ãˇž‘A@Â2|›á™DAé$đö€T mu]Ē €TÜ.Õ@2ú›Ĩē€ˆÜũH˙Č8<~UŊ§ē;~ŋ×<_î~*Ķ<‡ņ،yī!¸‡2ƒũęũūģđ§fnZũU䯯øŸĘôS=yæĖ>÷,ã0œi pû#ũST7cܞ‹ŽS[‡o˜‡f´¯y”yQÄ0vßÁũ]fēûōī"7­ēDvũáųßeÚaNĀā—€~6ļũūbõG3Ãy}4†öīÖæŧŦĻĘú\´iėû{ûČūæÆšLī_Ä0õĩWh‹|žzEļ~åî\æķ;%÷fėŒiår.ã2œŸčSāđ­%žãRŸ‹Ūî:Ėžeŧ‹4­ũŒ{™=­îEö§žąĶšgdž ¨—°ë^Æŧ|9hūÕĖö÷2vWdæ÷"ûS¯ČÖģ—š=køŅŒy}9Öö íįp&ŨģüH‰Īœ2Í2—ˇįĸã|TÕΛ†íĄ{™ũ: G3{pîeöc@÷"ûS¯Č֌ē—ŲOB|ōÜTËu@¯Đ~įábA ~üH˙sŦĐvķQō)˛Ŋč×UüĩĖčSfØ^w/˛´åUfļĢ_îÍėO}"ÛöyÍŧHĀ|Ⲝ_8—qÎŋO ŧä?sY9Îl2IENDŽB`‚leptonica-1.86.0/prog/percolate-8cc.png000066400000000000000000000127031506303110300176650ustar00rootroot00000000000000‰PNG  IHDR€ā,Ö2PLTE˙˙˙   ˙Ā€˙Ā˙îîĀ@ČČAiá˙Ā €@Ā€˙0`€‹@€˙€˙˙ÔĨ**˙˙@āĐ333MMMfff™™™ŗŗŗĀĀĀĖĖĖååå˙˙˙đ22î­ØæđUđā˙˙îŨ‚˙ļÁ¯îî˙×˙d˙"‹".‹W˙‹p€Í‡Îë˙˙˙˙ÎŅ˙“˙Pđ€€˙Eú€ré–zđæŒŊˇk¸† õõÜ € ˙Ĩî‚î”ĶŨ ŨP@Uk/€€€@€@€€`Ā€`˙€€˙€@˙ @˙ `˙ p˙ĀĀ˙˙€˙˙Ā͡žđ˙đ ļÍÁ˙ÁͰ|˙@ ˙ žžžŸŸŸŋŋŋ___ßßß???ŋ<Ëm pHYsÄÄ•+7IDATxœí –Ģ*õĖ2ܜŋė ã'&5Ač†Ēs&Ą[Š4ÆĖWšQšėÔ7FģÉÄ,õōãįĘ ŠOŌm”íķŋ§;،â‘ĮņæöQ>\‚ ģ9¯ãĘw î)ũüßĶŒFņ”ÍŠæpkŨõEßÕ^‡]'˙}|ôOŲÎ5Ą|žžņĄi›˛i‡‡QÎa‡˛ŠĮ—ęfnŒ/?{Ī›ÚrāŊeRzŊķ2ÖņPķ;āsË0b7,ír~}žŸô͗`͆ũ¸Ī}įaßĮzˇÖb;ū&ųâc ŪCą:[åŗØöÕŽåęˆ`Ļ,Ējūī[Āņ UÍø0œŊa†ŗV‹ĶĐО[N`=ž6mZ†k‡^õcũĘjŦqqkĮ™Øž:NŅ{đeË4äˇ~=+>9ö(ŽÆ]ö-7‡ácV§c+ā&ųb+ā>čÜãyˆÃ.í zŅĩëƒ[ˌį¤->6ôķÃđ¤.Æé›OŨ°D­/øĻžíc%ārũô~e5Ö{¨íĢÅĮāũĢĘėÖŦúąZ"O‚Gã.ûî7n*āfümōÅVĀ}ĐŠĮrˆã†aœ1ĘęāX…wLĢB˙!`ąz(ûuc,īs8oZŸÖĻ?zåųđa÷ęvđW]W,WŨŧˆūļ÷ĩīfcQŦäŲŋM~5ô{ÍîŽŖŠ›Īû#ƜiIz|pŲ­œŲXlv*Vąye5‡cžBn%1,€Û+ĻŠBMåk°“q7î*ā2ūw÷G¸ÛZ•ķåÍ:ŪįåÎ|ĸĒđU.^¯L4ģĸ¸šfWŅÖp˙ęvđ÷ģĩë+ĻÍ5Úy°ũ¸ë ¸ ļŠ€׀ëäWC—ĮGX|TĀáqÚëãĖm(wæs2}O^ģ°.æëé×íą÷„™\ŽÆ*—ûWˇƒ¯ÜV¨ įÁöãnŽ7ëkáøßõÖŽz^~žšuÄÜyž)Į+jŧIPlĪûôšŽožŸåújmÛôIpųĖ73žå—ĻīW–9|U˜qÖvŸ‚7΃íĮ]öŨÉ8Ú|Oépü¯aQŧąÃīOÁËÁņ)øƒį™ËĀ`_3´­€ë›wĶ˜ÕûwuƒëŊeskn[?īž_Ũ >ĢĶLßKlīĶšŸÁöã.ûNÞ7.÷Į˙&āÁ1Åæ>ā<Îc{p-÷ã!wåé}Õ$š‡’g§ķõ]ļÜC„,f'ƒC€Æ_Ÿū ęúĪGüløaüį§}ÕmūRÄī€'æŋÉROÁaūË & Oŧūĩhŗû÷Ú_žhÆŋ…øū'‡ĨYĀĶŋa~ôqØü‡K–;.ΟiK‡kĀ á¯dœTš™… ķĸ? ŖĢ‡Fՙ5à >1&Ė‹~üëĘãßĒé§{|ŊY#BÆI…‘›Ypß˙G€vųƒ8& ˇđ‚O † ãOá˙žø ’‚€/ķpPúÜJ‡ĘP/ā§qA]hđ@7 ԄreŖ*Bˇ€gĻa T xîjAŗ€ß,C@%¨đÛk¨Å~w u WĀ_†a   øs T€Z ôB@hФŧQ V@Ŗ0PÚq„ŽęÎŦa3ĀQĀĒžFhúb,†f ãđĄÄ Ø>æĘe,“†qøĐB `œėĮĒv›€Á+FĀIĀŽ*\9=¸ŦÁų6ûæ”euĪ5`x0<î7ĸ_Ÿ‚ĢÎŦasĀ€ũt¯7k˜† Į€ƒYå|Ų¤a>‚ šßĮ(G”Āā0\‘ƒf Æš5¸ ЁA@ Q3%DÍąFZ Yƒ#WĀ€YHˆ›+($nŽ āg\ Š œ'(&pž ā.0†DĒ€5@ˆ0dbBgîCc`@PVėė@ƒØ”<3PZđĖ*`ÜU58R š…´đ9€Ãį†ĮĀP  Čøų€€"ãįƒLŖ/ŅČĄ†ÍBd™€€R3Č<É ~ y€€'H! đ)džĀxŠŒ,ROĄ†Ī’FÚ ā9BŌH<‡583ņRōH‘†Îâ 1‰$ ~AL)Nü†œL’ŋ!'“dAĀo°ß~EP*‰"P@IeGP*‰"QĀāYœ#é͐&øQɤ~GT2)‚€ßa ž7ĢĻlęąQÛ4~„—5垞I'ģĒ/úG]mĶN?F_áeM9%đ^œœlę›ÁÄzhԝYãWxa3.,Ôpŋlz‹ÆđŌJްtRÃYĀžĢ—QJŗÆđŌ&\Ú"1\,ËŽH[@y %Eė 8˛Ũ$nžÅ%” ŗī׀Îy†5øNœŦĮ‡×§āĒ3kü/oēåe”~îöĶ=žŪŦņ#ŧŧ閗QB¸-Á]SΡ–[›Æ÷đōĻ›5øFÄ},qļĻ” ōŒÅ/$æ” h€Äǜ h‚ȤŌM™T   ŦÁˇ€FČĖ*ĐJā]HPęL MK?⌑…RķRš!ĩ2Ģ ›˜rĐą‰) a ž4EnfĒA@SäfĻa ^č§ĻiFÉ ɚéĄŪš#:9­  9ĸ“Ķ šÃ|hėėt‚€ČÎN'hk°d (}†…§§aÆÉÂéo…  âTZ!>Au  ŦÁžA@;äg¨ ´C~†Ę@@;Xƒ=#J@ ŗĢ EUČ0R6hx“hmQ‘¤ĐIęma ö ZŖ#K-  5:˛ÔZÃė´GIš:$ –Ōĸ%Oˆ0Vļ¨ITx5‰*/Āėŧ‚žLрWГŠxđ ŦÁŪ@ĀK(JU8x J /đšr UUMšŠÆMĀĒ)›vlÔCŖ6mœ„W5§ĒŪ-’q°ĢúĸÔEŅŽ?FŗđēĻTWļrq°úf0ql՝Yã,ŧŽ)ĨúÁũp°é-gá•ͨ˛tĨâ.`U-Ŗ”fŗđĘfTYēRq°~™ ¨,_Ą¸ XuīQŽ8ōlk›PmųĘc=û×čģjúoŽ×€”@/¸ øxŪUéęb.†&“đúæS]ÂqģX?ũt¯7kœ„×7úŪ2q°œéĮģĖΝDLĮáÎĻ”Å!įģ`…ŗŠ0eq  ŦÁî   sē@ tP™´(Đ J +č†ÎŦ!F@ĨĩDgւ#`Ä,Púž‘:ĸ5o)  #”@7Đĩ‰Ë]Ą:€ÎčÍ\čŒŪĖ%€€Î°쀀î(N=>RÔ\F4į1ÆĖÂÕÉG=@ ŧú@wöQA@P/ƒ€^Pž~DĐ ”ĀĢ  ´į ô%đ"č õ !ę/ ú RŒš…8„  /(—@@o¤p áA@oP¯€€ūHâ Bƒ€ū ^=’ÆQ„=B ´}’Ča„D†€Š”ŽTŽ# BŒ›…?’9`  W(ļ  _Ō9’@  _(–  g0ĐôMJĮô %Đ ôNRs;čJ  蟴ŽæfD˜XÍHėpîE†€q“đšƒ€wÜŨŪ%Đŧ 4ÅMĀž{ö¯›˛ŠMģđ ÎV‚‡tNÖM=÷o›vú1jėÃ'8[”@Cœėúg˙ŽęÎŦąŸâdĨxLwāz 8÷oúáĄoĖûî)N%Đ ?žMûîI΁€ˇ&Äp$ՙJô°ü1ÍžëĶŖÛ5`Ē•ęË+~ėęáĄęĖģîÉÎūƏ€ũt¯7kėē§;Mé™7œ,Ëeo›ržĮlŌø Ÿî4Q"áģā„g €÷‚?@Ā›ÁĀī āŨ`āWđv?Õy§aÆ×N’;éĶM_Ŋ~æ ę¯.ßžâ?ëĶ>ʇå9›ž[ö1˜Î°ŋ pøKú›Ŧæ¸ŪvíuҝžaîĒ~ÚfŅįB—‘žųLî{ŸĮҎßģD5Él˙‹įßûÔŨp:ģĐÆÖŸ_Ŧūc0‡ŲßFW6œ—gÆĢRYnģVÕôúĢĪԚ~ᯏOkßeäŅ–VŠŊ4îō~j•Ųķ+wã>īßS23UĖI.ã>&ĶųÎ>ŋ 5įˇ~ƒ”ÛއKĮø‚eë.U=ícŪįuZÍģŧžZĖTÎ-3ŗ<圖ej?§ķ•}Eõh—)Ĩį¤Ü>6ãõËį;f|ëŲõ™V ›.íc~ÕŧĪøtzßÛu™žÚ˘›MŸúŅ[Ÿ€IŽq °Jíįtž˛‚ą€åķ R?¯Qëw×ņęšũ˜€úaÛ§,;ģ.ũøž-­ú<†KÍv4ĐŧËëŠŨ ˜+EŸņķ‘å h§įĨíyū5ÅɚvæŽ>}<–Ķ;qķĻ™/{íúLĀĸKW=_ĩ 3-Zæ]^O­ĸ<—2ķ>S|؝€ų“ŗÕŅŧ_:īöw捯›ũ–Ĩë|)ą’¸ŸÜ°ëŗl7īō<‡•m˜ie2îōzjĨ˛=īí–Ķ?,ûüœÎWöAčęâ×/éīĢrší:éÖŽiŲ×ŧΏywŅü+˞yŸi)ëy—×SĢĖž;›÷9üÔđ#ˏ}žÖļIíįt]M~IÎoüČÔWs-¯ˇ]ûáĒĒ]}nę–ĻyŸ×}@‹0¯äĖûŧŽÍģŧžZeö<Ŗæ}^BlÎsUĖ÷­Rû9Ģ›!øņKúīk…ēŽ’7™Ŋē~ÜÅöémútËvķ.s,Ģ>}ˇÜũ2ķzj“Ų˛æY„šp†.ķį ã>FĶųũ#\ä:SģF•ãIENDŽB`‚leptonica-1.86.0/prog/percolatetest.c000066400000000000000000000264631506303110300175600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * percolatetest.c * * This tests the code that keeps track of connected components as * pixels are added (randomly, here) to a pix. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static PIX *PixDisplayWithColormap(PIX *pixs, l_int32 repl); l_int32 main(int argc, char **argv) { l_int32 i, x, y, ncc, npta; NUMA *na1; PIX *pixs, *pix1, *pix2, *pix3; PIXA *pixa; PTAA *ptaa; if (argc != 1) { lept_stderr(" Syntax: percolatetest\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/perc"); /* Fill in a tiny pix; 4 connected */ pixa = pixaCreate(0); pixs = pixCreate(5, 5, 1); pixConnCompIncrInit(pixs, 4, &pix1, &ptaa, &ncc); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); srand(26); for (i = 0; i < 50; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 2); npta = ptaaGetCount(ptaa); lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); pix2 = PixDisplayWithColormap(pix1, 20); pixaAddPix(pixa, pix2, L_INSERT); } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 0); pixWrite("/tmp/lept/perc/file1.png", pix3, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); /* Fill in a tiny pix; 8 connected */ pixa = pixaCreate(0); pixs = pixCreate(5, 5, 1); pixConnCompIncrInit(pixs, 8, &pix1, &ptaa, &ncc); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); srand(26); for (i = 0; i < 50; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 2); npta = ptaaGetCount(ptaa); lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); pix2 = PixDisplayWithColormap(pix1, 20); pixaAddPix(pixa, pix2, L_INSERT); } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 560); pixWrite("/tmp/lept/perc/file2.png", pix3, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); /* Fill in a small pix; 4 connected */ na1 = numaCreate(700); pixa = pixaCreate(0); pixs = pixCreate(20, 20, 1); pixConnCompIncrInit(pixs, 4, &pix1, &ptaa, &ncc); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); srand(26); for (i = 0; i < 700; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 2); numaAddNumber(na1, ncc); npta = ptaaGetCount(ptaa); if (i < 100) { lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); } if (i % 30 == 1) { pix2 = PixDisplayWithColormap(pix1, 5); pixaAddPix(pixa, pix2, L_INSERT); } } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 0); pixWrite("/tmp/lept/perc/file3.png", pix3, IFF_PNG); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot1", "Number of components: 4 cc"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); /* Fill in a small pix; 8 connected */ na1 = numaCreate(700); pixa = pixaCreate(0); pixs = pixCreate(20, 20, 1); pixConnCompIncrInit(pixs, 8, &pix1, &ptaa, &ncc); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); srand(26); for (i = 0; i < 700; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 2); numaAddNumber(na1, ncc); npta = ptaaGetCount(ptaa); if (i < 100) { lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); } if (i % 30 == 1) { pix2 = PixDisplayWithColormap(pix1, 5); pixaAddPix(pixa, pix2, L_INSERT); } } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 360); pixWrite("/tmp/lept/perc/file4.png", pix3, IFF_PNG); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot2", "Number of components: 8 cc"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); /* Fill in a larger pix; 4 connected */ pixa = pixaCreate(0); na1 = numaCreate(20000); pixs = pixCreate(195, 56, 1); pixConnCompIncrInit(pixs, 4, &pix1, &ptaa, &ncc); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); srand(26); for (i = 0; i < 20000; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 3); npta = ptaaGetCount(ptaa); numaAddNumber(na1, ncc); if (i % 500 == 1) { pix2 = PixDisplayWithColormap(pix1, 3); pixaAddPix(pixa, pix2, L_INSERT); lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); } } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 0); pixWrite("/tmp/lept/perc/file5.png", pix3, IFF_PNG); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot3", "Number of components: 4 connected"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); /* Fill in a larger pix; 8 connected */ pixa = pixaCreate(0); na1 = numaCreate(20000); pixs = pixCreate(195, 56, 1); pixConnCompIncrInit(pixs, 8, &pix1, &ptaa, &ncc); srand(26); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); for (i = 0; i < 20000; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 3); npta = ptaaGetCount(ptaa); numaAddNumber(na1, ncc); if (i % 500 == 1) { pix2 = PixDisplayWithColormap(pix1, 3); pixaAddPix(pixa, pix2, L_INSERT); lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); } } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 340, 0); pixWrite("/tmp/lept/perc/file6.png", pix3, IFF_PNG); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot4", "Number of components: 8 connected"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); /* Fill in a larger pix; 8 connected; init with feyn-word.tif */ pixa = pixaCreate(0); na1 = numaCreate(20000); pixs = pixRead("feyn-word.tif"); pixConnCompIncrInit(pixs, 8, &pix1, &ptaa, &ncc); srand(26); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); for (i = 0; i < 20000; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 3); npta = ptaaGetCount(ptaa); numaAddNumber(na1, ncc); if (i % 500 == 1) { pix2 = PixDisplayWithColormap(pix1, 3); pixaAddPix(pixa, pix2, L_INSERT); lept_stderr("x,y = (%d,%d), num c.c. = %d, num pta = %d\n", x, y, ncc, npta); } } pix3 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); pixDisplay(pix3, 0, 0); pixWrite("/tmp/lept/perc/file7.png", pix3, IFF_PNG); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot5", "Number of components: 8 connected"); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); /* Do 10M pixel adds on an 8M pixel image! * This gets it down to about 385 8-connected components. * With 18.3M pixel adds, you finally arrive at 1 component. * Speed: this does about 1.3M pixel adds/sec. Most of the time * is used to write the 280MB plot data file and then generate * the plot (percolate-4cc.png, percolate-8cc.png). */ #if 0 pixs = pixRead("feyn.tif"); // pixs = pixCreate(2500, 3200, 1); na1 = numaCreate(10000000); pixConnCompIncrInit(pixs, 4, &pix1, &ptaa, &ncc); pix2 = PixDisplayWithColormap(pix1, 1); pixDisplay(pix2, 0, 0); pixDestroy(&pix2); lept_stderr("ncc = %d, npta = %d\n", ncc, ptaaGetCount(ptaa)); lept_stderr("Now add 10M points: this takes about 7 seconds!\n"); for (i = 0; i < 10000000; i++) { pixGetRandomPixel(pix1, NULL, &x, &y); pixConnCompIncrAdd(pix1, ptaa, &ncc, x, y, 0); numaAddNumber(na1, ncc); } lept_stderr("Plot the 10M points: this takes about 20 seconds\n"); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot6", "Number of components: 4 connected, 8 million pixels"); pix3 = pixRead("/tmp/lept/plot6.png"); pixDisplay(pix3, 500, 0); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixaDestroy(&pixa); ptaaDestroy(&ptaa); numaDestroy(&na1); #endif return 0; } /* This displays a pix where the pixel values are 32 bit labels * using a random colormap whose index is the LSB of each pixel value, * and where white is at index 0. */ PIX * PixDisplayWithColormap(PIX *pixs, l_int32 repl) { PIX *pix1, *pixd; PIXCMAP *cmap; cmap = pixcmapCreateRandom(8, 0, 0); pixcmapResetColor(cmap, 0, 255, 255, 255); pix1 = pixConvert32To8(pixs, L_LS_TWO_BYTES, L_LS_BYTE); pixd = pixExpandReplicate(pix1, repl); pixSetColormap(pixd, cmap); pixDestroy(&pix1); return pixd; } leptonica-1.86.0/prog/pixa1_reg.c000066400000000000000000000137151506303110300165550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixa1_reg.c * * Tests removal of connected components. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 CONNECTIVITY = 8; int main(int argc, char **argv) { l_int32 size, i, n, n0; BOXA *boxa; GPLOT *gplot; NUMA *nax, *nay1, *nay2; PIX *pixs, *pix1, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); lept_mkdir("lept/pixa"); pixa = pixaCreate(2); /* ---------------- Remove small components --------------- */ boxa = pixConnComp(pixs, NULL, 8); n0 = boxaGetCount(boxa); nax = numaMakeSequence(0, 2, 51); nay1 = numaCreate(51); nay2 = numaCreate(51); boxaDestroy(&boxa); if (rp->display) { lept_stderr("\n Select Large if Both\n"); lept_stderr("Iter 0: n = %d\n", n0); } numaAddNumber(nay1, n0); for (i = 1; i <= 50; i++) { size = 2 * i; pixd = pixSelectBySize(pixs, size, size, CONNECTIVITY, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); boxa = pixConnComp(pixd, NULL, 8); n = boxaGetCount(boxa); numaAddNumber(nay1, n); if (rp->display) lept_stderr("Iter %d: n = %d\n", i, n); boxaDestroy(&boxa); pixDestroy(&pixd); } if (rp->display) { lept_stderr("\n Select Large if Either\n"); lept_stderr("Iter 0: n = %d\n", n0); } numaAddNumber(nay2, n0); for (i = 1; i <= 50; i++) { size = 2 * i; pixd = pixSelectBySize(pixs, size, size, CONNECTIVITY, L_SELECT_IF_EITHER, L_SELECT_IF_GTE, NULL); boxa = pixConnComp(pixd, NULL, 8); n = boxaGetCount(boxa); numaAddNumber(nay2, n); if (rp->display) lept_stderr("Iter %d: n = %d\n", i, n); boxaDestroy(&boxa); pixDestroy(&pixd); } gplot = gplotCreate("/tmp/lept/pixa/root1", GPLOT_PNG, "Select large: number of cc vs size removed", "min size", "number of c.c."); gplotAddPlot(gplot, nax, nay1, GPLOT_LINES, "select if both"); gplotAddPlot(gplot, nax, nay2, GPLOT_LINES, "select if either"); pix1 = gplotMakeOutputPix(gplot); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixaAddPix(pixa, pix1, L_INSERT); gplotDestroy(&gplot); /* ---------------- Remove large components --------------- */ numaEmpty(nay1); numaEmpty(nay2); if (rp->display) { lept_stderr("\n Select Small if Both\n"); lept_stderr("Iter 0: n = %d\n", 0); } numaAddNumber(nay1, 0); for (i = 1; i <= 50; i++) { size = 2 * i; pixd = pixSelectBySize(pixs, size, size, CONNECTIVITY, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); boxa = pixConnComp(pixd, NULL, 8); n = boxaGetCount(boxa); numaAddNumber(nay1, n); if (rp->display) lept_stderr("Iter %d: n = %d\n", i, n); boxaDestroy(&boxa); pixDestroy(&pixd); } if (rp->display) { lept_stderr("\n Select Small if Either\n"); lept_stderr("Iter 0: n = %d\n", 0); } numaAddNumber(nay2, 0); for (i = 1; i <= 50; i++) { size = 2 * i; pixd = pixSelectBySize(pixs, size, size, CONNECTIVITY, L_SELECT_IF_EITHER, L_SELECT_IF_LTE, NULL); boxa = pixConnComp(pixd, NULL, 8); n = boxaGetCount(boxa); numaAddNumber(nay2, n); if (rp->display) lept_stderr("Iter %d: n = %d\n", i, n); boxaDestroy(&boxa); pixDestroy(&pixd); } gplot = gplotCreate("/tmp/lept/pixa/root2", GPLOT_PNG, "Remove large: number of cc vs size removed", "min size", "number of c.c."); gplotAddPlot(gplot, nax, nay1, GPLOT_LINES, "select if both"); gplotAddPlot(gplot, nax, nay2, GPLOT_LINES, "select if either"); pix1 = gplotMakeOutputPix(gplot); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix1, L_INSERT); gplotDestroy(&gplot); pixd = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 20, 2); pixDisplayWithTitle(pixd, 100, 0, NULL, rp->display); pixWrite("/tmp/lept/pixa/root.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); numaDestroy(&nax); numaDestroy(&nay1); numaDestroy(&nay2); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/pixa2_reg.c000066400000000000000000000110241506303110300165450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixa2_reg.c * * Tests various replacement functions on pixa. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { const char *name; l_int32 i, n; BOX *box; PIX *pix0, *pix1, *pixd; PIXA *pixa; SARRAY *sa1, *sa2, *sa3, *sa4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ---------------- Find all the jpg and tif images --------------- */ sa1 = getSortedPathnamesInDirectory(".", ".jpg", 0, 0); sa2 = getSortedPathnamesInDirectory(".", ".tif", 0, 0); sa3 = sarraySelectRange(sa1, 10, 19); sa4 = sarraySelectRange(sa2, 10, 19); sarrayJoin(sa3, sa4); n =sarrayGetCount(sa3); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa4); if (rp->display) sarrayWriteStderr(sa3); /* ---------------- Use replace to fill up a pixa -------------------*/ pixa = pixaCreate(1); pixaExtendArrayToSize(pixa, n); if ((pix0 = pixRead("marge.jpg")) == NULL) rp->success = FALSE; pix1 = pixScaleToSize(pix0, 144, 108); /* scale 0.25 */ pixDestroy(&pix0); pixaInitFull(pixa, pix1, NULL); /* fill it up */ pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixWrite("/tmp/lept/regout/pixa2-1.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pix1); pixDestroy(&pixd); /* ---------------- And again with jpgs and tifs -------------------*/ for (i = 0; i < n; i++) { name = sarrayGetString(sa3, i, L_NOCOPY); if ((pix0 = pixRead(name)) == NULL) { lept_stderr("Error in %s_reg: failed to read %s\n", rp->testname, name); rp->success = FALSE; continue; } pix1 = pixScaleToSize(pix0, 144, 108); pixaReplacePix(pixa, i, pix1, NULL); pixDestroy(&pix0); } pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 400, 100, NULL, rp->display); pixWrite("/tmp/lept/regout/pixa2-2.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); /* ---------------- And again, reversing the order ------------------*/ box = boxCreate(0, 0, 0, 0); pixaInitFull(pixa, NULL, box); boxDestroy(&box); for (i = 0; i < n; i++) { name = sarrayGetString(sa3, i, L_NOCOPY); if ((pix0 = pixRead(name)) == NULL) { lept_stderr("Error in %s_reg: failed to read %s\n", rp->testname, name); rp->success = FALSE; continue; } pix1 = pixScaleToSize(pix0, 144, 108); pixaReplacePix(pixa, n - 1 - i, pix1, NULL); pixDestroy(&pix0); } pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 700, 100, NULL, rp->display); pixWrite("/tmp/lept/regout/pixa2-3.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); sarrayDestroy(&sa3); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/pixaatest.c000066400000000000000000000105641506303110300166770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixaatest.c * * Syntax: pixaatest */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" static const l_int32 nx = 10; static const l_int32 ny = 12; static const l_int32 ncols = 3; int main(int argc, char **argv) { l_int32 w, d, tilewidth; PIX *pixs; PIXA *pixa, *pixad1, *pixad2; PIXAA *pixaa1, *pixaa2; if (argc != 1) return ERROR_INT(" Syntax: pixaatest", __func__, 1); setLeptDebugOK(1); lept_mkdir("/lept/paa"); /* Read in file, split it into a set of tiles, and generate a pdf. * Two things to note for these tiny images: * (1) If you use dct format (jpeg) for each image instead of * flate (lossless), the quantization will be apparent. * (2) If the resolution in pixaConvertToPdf() is above 50, and * you add a red boundary, you will see errors in the boundary * width. */ pixs = pixRead("test24.jpg"); pixGetDimensions(pixs, &w, NULL, &d); pixa = pixaSplitPix(pixs, nx, ny, 0, 0); /* pixa = pixaSplitPix(pixs, nx, ny, 2, 0xff000000); */ /* red border */ pixWrite("/tmp/lept/paa/pix0", pixa->pix[0], IFF_PNG); pixWrite("/tmp/lept/paa/pix9", pixa->pix[9], IFF_PNG); pixaConvertToPdf(pixa, 50, 1.0, 0, 95, "individual", "/tmp/lept/paa/out1.pdf"); /* Generate two pixaa by sampling the pixa, and write them to file */ pixaa1 = pixaaCreateFromPixa(pixa, nx, L_CHOOSE_CONSECUTIVE, L_CLONE); pixaa2 = pixaaCreateFromPixa(pixa, nx, L_CHOOSE_SKIP_BY, L_CLONE); pixaaWrite("/tmp/lept/paa/pts1.paa", pixaa1); pixaaWrite("/tmp/lept/paa/pts2.paa", pixaa2); pixaDestroy(&pixa); pixaaDestroy(&pixaa1); pixaaDestroy(&pixaa2); /* Read each pixaa from file; tile/scale into a pixa */ pixaa1 = pixaaRead("/tmp/lept/paa/pts1.paa"); pixaa2 = pixaaRead("/tmp/lept/paa/pts2.paa"); tilewidth = w / nx; pixad1 = pixaaDisplayTiledAndScaled(pixaa1, d, tilewidth, ncols, 0, 10, 0); pixad2 = pixaaDisplayTiledAndScaled(pixaa2, d, tilewidth, ncols, 0, 10, 0); /* Generate a pdf from each pixa */ pixaConvertToPdf(pixad1, 50, 1.0, 0, 75, "consecutive", "/tmp/lept/paa/out2.pdf"); pixaConvertToPdf(pixad2, 50, 1.0, 0, 75, "skip_by", "/tmp/lept/paa/out3.pdf"); /* Write each pixa to a set of files, and generate a PS */ pixaWriteFiles("/tmp/lept/paa/split1.", pixad1, IFF_JFIF_JPEG); pixaWriteFiles("/tmp/lept/paa/split2.", pixad2, IFF_JFIF_JPEG); convertFilesToPS("/tmp/lept/paa", "split1", 40, "/tmp/lept/paa/out1out1.ps"); convertFilesToPS("/tmp/lept/paa", "split2", 40, "/tmp/lept/paa/out1out2.ps"); pixDestroy(&pixs); pixaaDestroy(&pixaa1); pixaaDestroy(&pixaa2); pixaDestroy(&pixad1); pixaDestroy(&pixad2); return 0; } leptonica-1.86.0/prog/pixadisp_reg.c000066400000000000000000000200201506303110300173370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixadisp_reg.c * * Regression test exercising various pixaDisplay*() functions. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" const char *files[7] = {"brev.06.75.jpg", "brev.10.75.jpg", "brev.14.75.jpg", "brev.20.75.jpg", "brev.36.75.jpg", "brev.53.75.jpg", "brev.56.75.jpg"}; int main(int argc, char **argv) { l_int32 i, ws, hs, ncols; char *fname; BOX *box; BOXA *boxa; PIX *pixs, *pix32, *pix1, *pix2, *pix3, *pix4; PIXA *pixa, *pixa1, *pixa2, *pixa3; SARRAY *sa1, *sa2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); pix32 = pixRead("marge.jpg"); pixs = pixRead("feyn.tif"); box = boxCreate(683, 799, 970, 479); pix1 = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixaAddPix(pixa, pix1, L_INSERT); /* Generate pixa2 from pixs and pixa3 from pix1 */ boxa = pixConnComp(pixs, &pixa1, 8); pixa2 = pixaSelectBySize(pixa1, 60, 60, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); pixaDestroy(&pixa1); boxaDestroy(&boxa); boxa = pixConnComp(pix1, &pixa3, 8); boxaDestroy(&boxa); /* pixaDisplay() */ pixGetDimensions(pixs, &ws, &hs, NULL); pix2 = pixaDisplay(pixa2, ws, hs); pixDisplayWithTitle(pix2, 0, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pixs); /* pixaDisplayRandomCmap() */ pix2 = pixaDisplayRandomCmap(pixa2, ws, hs); /* black bg */ pixDisplayWithTitle(pix2, 200, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix2, L_COPY); pixcmapResetColor(pixGetColormap(pix2), 0, 255, 255, 255); /* white bg */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ pixaAddPix(pixa, pix2, L_INSERT); pixaDestroy(&pixa2); /* pixaDisplayOnLattice() */ pix2 = pixaDisplayOnLattice(pixa3, 50, 50, &ncols, &boxa); pixDisplayWithTitle(pix2, 400, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 4 */ pixaAddPix(pixa, pix2, L_INSERT); lept_stderr("Number of columns = %d; number of boxes: %d\n", ncols, boxaGetCount(boxa)); boxaDestroy(&boxa); /* pixaDisplayUnsplit() */ pixa1 = pixaSplitPix(pix32, 5, 7, 10, 0x0000ff00); pix2 = pixaDisplayUnsplit(pixa1, 5, 7, 10, 0x00ff0000); pixDisplayWithTitle(pix2, 600, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 5 */ pixaAddPix(pixa, pix2, L_INSERT); pixaDestroy(&pixa1); /* pixaDisplayTiled() */ pix2 = pixaDisplayTiled(pixa3, 1000, 0, 10); pixDisplayWithTitle(pix2, 800, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 6 */ pixaAddPix(pixa, pix2, L_INSERT); /* pixaDisplayTiledInRows() */ pix2 = pixaDisplayTiledInRows(pixa3, 1, 1000, 1.0, 0, 10, 2); pixDisplayWithTitle(pix2, 1000, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 7 */ pixaAddPix(pixa, pix2, L_INSERT); /* pixaDisplayTiledAndScaled() */ pix2 = pixaDisplayTiledAndScaled(pixa3, 1, 25, 20, 0, 5, 0); pixDisplayWithTitle(pix2, 1200, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 8 */ pixaAddPix(pixa, pix2, L_INSERT); pixaDestroy(&pixa3); pixa1 = pixaCreate(10); pix2 = pixRankFilter(pix32, 8, 8, 0.5); pixaAddPix(pixa1, pix2, L_INSERT); pix3 = pixScale(pix32, 0.5, 0.5); pix2 = pixRankFilter(pix3, 8, 8, 0.5); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix3); pix3 = pixScale(pix32, 0.25, 0.25); pix2 = pixRankFilter(pix3, 8, 8, 0.5); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix3); pix2 = pixaDisplayTiledAndScaled(pixa1, 32, 500, 3, 0, 25, 0); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 9 */ pixDisplayWithTitle(pix2, 1400, 100, NULL, rp->display); pixaAddPix(pixa, pix2, L_INSERT); pixaDestroy(&pixa1); pixDestroy(&pix32); /* pixaMakeFromTiledPix() and pixaDisplayOnLattice() */ pix1 = pixRead("sevens.tif"); pixa1 = pixaMakeFromTiledPix(pix1, 20, 30, 0, 0, NULL); pix2 = pixaDisplayOnLattice(pixa1, 20, 30, NULL, NULL); regTestComparePix(rp, pix1, pix2); /* 10 */ pix3 = pixaDisplayOnLattice(pixa1, 20, 30, NULL, &boxa); pixa2 = pixaMakeFromTiledPix(pix3, 0, 0, 0, 0, boxa); pix4 = pixaDisplayOnLattice(pixa2, 20, 30, NULL, NULL); regTestComparePix(rp, pix2, pix4); /* 11 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 12 */ pixDisplayWithTitle(pix4, 1600, 100, NULL, rp->display); pixaAddPix(pixa, pixScale(pix4, 2.5, 2.5), L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); boxaDestroy(&boxa); pixaDestroy(&pixa1); pixaDestroy(&pixa2); /* pixaDisplayPairTiledInColumns */ sa1 = sarrayCreate(7); for (i = 0; i < 7; i++) sarrayAddString(sa1, files[i], L_COPY); pixa1 = pixaCreate(7); pixa2 = pixaCreate(7); sa2 = sarrayCreate(7); for (i = 0; i < 7; i++) { fname = sarrayGetString(sa1, i, L_NOCOPY); pix1 = pixRead(fname); pix2 = pixConvertTo8(pix1, 0); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa2, pix2, L_INSERT); sarrayAddString(sa2, fname, L_COPY); } pix1 = pixaDisplayPairTiledInColumns(pixa1, pixa2, 4, 0.5, 15, 15, 2, 2, 6, 0, sa2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 13 */ pixaAddPix(pixa, pixScale(pix1, 2.0, 2.0), L_INSERT); pixDisplayWithTitle(pix1, 1800, 100, NULL, rp->display); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixDestroy(&pix1); sarrayDestroy(&sa1); sarrayDestroy(&sa2); if (rp->display) { lept_mkdir("lept/padisp"); lept_stderr("Writing to: /tmp/lept/padisp/pixadisp.pdf\n"); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, "pixadisp-test", "/tmp/lept/padisp/pixadisp.pdf"); lept_stderr("Writing to: /tmp/lept/padisp/pixadisp.jpg\n"); pix1 = pixaDisplayTiledInColumns(pixa, 2, 0.5, 30, 2); pixWrite("/tmp/lept/padisp/pixadisp.jpg", pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/pixafileinfo.c000066400000000000000000000055561506303110300173570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixafileinfo.c * * Returns information about the images in the pixa or pixacomp file */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { char buf[64]; char *sn; l_int32 i, n; PIX *pix; PIXA *pixa; PIXAC *pac; char *filein; if (argc != 2) return ERROR_INT(" Syntax: pixafileinfo filein", __func__, 1); setLeptDebugOK(1); /* Input file can be either pixa or pixacomp */ filein = argv[1]; l_getStructStrFromFile(filein, L_STR_NAME, &sn); if (strcmp(sn, "Pixa") == 0) { if ((pixa = pixaRead(filein)) == NULL) return ERROR_INT("pixa not made", __func__, 1); } else if (strcmp(sn, "Pixacomp") == 0) { if ((pac = pixacompRead(filein)) == NULL) return ERROR_INT("pac not made", __func__, 1); pixa = pixaCreateFromPixacomp(pac, L_COPY); pixacompDestroy(&pac); } else { return ERROR_INT("invalid file type", __func__, 1); } n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(buf, sizeof(buf), "Pix(%d)", i); pixPrintStreamInfo(stderr, pix, buf); pixDestroy(&pix); lept_stderr("=================================\n"); } pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/pixalloc_reg.c000066400000000000000000000145561506303110300173520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixalloc_reg.c * * Tests custom pix allocator. * * The custom allocator is intended for situations where a number of large * pix will be repeatedly allocated and freed over the lifetime of a program. * If those pix are large, relying on malloc and free can result in * fragmentation, even if there are no small memory leaks in the program. * * Here we test the allocator in two situations: * * a small number of relatively large pix * * a large number of very small pix * * For the second case, timing shows that the custom allocator does * about as well as (malloc, free), even for thousands of very small pix. * (Turn off logging to get a fair comparison). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const l_int32 logging = FALSE; static const l_int32 ncopies = 2; static const l_int32 nlevels = 4; static const l_int32 ntimes = 30; PIXA *GenerateSetOfMargePix(void); void CopyStoreClean(PIXA *pixas, l_int32 nlevels, l_int32 ncopies); int main(int argc, char **argv) { l_int32 i; BOXA *boxa; NUMA *nas, *nab; PIX *pixs; PIXA *pixa, *pixas; setLeptDebugOK(1); lept_mkdir("lept/alloc"); /* ----------------- Custom with a few large pix -----------------*/ /* Set up pms */ nas = numaCreate(4); /* small */ numaAddNumber(nas, 5); numaAddNumber(nas, 4); numaAddNumber(nas, 3); numaAddNumber(nas, 2); setPixMemoryManager(pmsCustomAlloc, pmsCustomDealloc); pmsCreate(200000, 400000, nas, "/tmp/lept/alloc/file1.log"); /* Make the pix and do successive copies and removals of the copies */ pixas = GenerateSetOfMargePix(); startTimer(); for (i = 0; i < ntimes; i++) CopyStoreClean(pixas, nlevels, ncopies); lept_stderr("Time (big pix; custom) = %7.3f sec\n", stopTimer()); /* Clean up */ numaDestroy(&nas); pixaDestroy(&pixas); pmsDestroy(); /* ----------------- Standard with a few large pix -----------------*/ setPixMemoryManager(malloc, free); /* Make the pix and do successive copies and removals of the copies */ startTimer(); pixas = GenerateSetOfMargePix(); for (i = 0; i < ntimes; i++) CopyStoreClean(pixas, nlevels, ncopies); lept_stderr("Time (big pix; standard) = %7.3f sec\n", stopTimer()); pixaDestroy(&pixas); /* ----------------- Custom with many small pix -----------------*/ /* Set up pms */ nab = numaCreate(10); numaAddNumber(nab, 2000); numaAddNumber(nab, 2000); numaAddNumber(nab, 2000); numaAddNumber(nab, 500); numaAddNumber(nab, 100); numaAddNumber(nab, 100); numaAddNumber(nab, 100); setPixMemoryManager(pmsCustomAlloc, pmsCustomDealloc); if (logging) /* use logging == 0 for speed comparison */ pmsCreate(20, 40, nab, "/tmp/lept/alloc/file2.log"); else pmsCreate(20, 40, nab, NULL); pixs = pixRead("feyn.tif"); startTimer(); for (i = 0; i < 5; i++) { boxa = pixConnComp(pixs, &pixa, 8); boxaDestroy(&boxa); pixaDestroy(&pixa); } numaDestroy(&nab); pixDestroy(&pixs); pmsDestroy(); lept_stderr("Time (custom) = %7.3f sec\n", stopTimer()); /* ----------------- Standard with many small pix -----------------*/ setPixMemoryManager(malloc, free); pixs = pixRead("feyn.tif"); startTimer(); for (i = 0; i < 5; i++) { boxa = pixConnComp(pixs, &pixa, 8); boxaDestroy(&boxa); pixaDestroy(&pixa); } pixDestroy(&pixs); lept_stderr("Time (standard) = %7.3f sec\n", stopTimer()); return 0; } PIXA * GenerateSetOfMargePix(void) { l_float32 factor; BOX *box; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; pixs = pixRead("marge.jpg"); box = boxCreate(130, 93, 263, 253); factor = sqrt(2.0); pixt1 = pixClipRectangle(pixs, box, NULL); /* 266 KB */ pixt2 = pixScale(pixt1, factor, factor); /* 532 KB */ pixt3 = pixScale(pixt2, factor, factor); /* 1064 KB */ pixt4 = pixScale(pixt3, factor, factor); /* 2128 KB */ pixa = pixaCreate(4); pixaAddPix(pixa, pixt1, L_INSERT); pixaAddPix(pixa, pixt2, L_INSERT); pixaAddPix(pixa, pixt3, L_INSERT); pixaAddPix(pixa, pixt4, L_INSERT); boxDestroy(&box); pixDestroy(&pixs); return pixa; } void CopyStoreClean(PIXA *pixas, l_int32 nlevels, l_int32 ncopies) { l_int32 i, j; PIX *pix, *pixt; PIXA *pixa; PIXAA *paa; paa = pixaaCreate(0); for (i = 0; i < nlevels ; i++) { pixa = pixaCreate(0); pixaaAddPixa(paa, pixa, L_INSERT); pix = pixaGetPix(pixas, i, L_CLONE); for (j = 0; j < ncopies; j++) { pixt = pixCopy(NULL, pix); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pix); } pixaaDestroy(&paa); return; } leptonica-1.86.0/prog/pixcomp_reg.c000066400000000000000000000211021506303110300171770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixcomp_reg.c * * Regression test for compressed pix and compressed pix arrays * in memory. * * We also show some other ways to accumulate and display pixa. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" static const char *fnames[] = {"weasel32.png", "weasel2.4c.png", "weasel4.16c.png", "weasel4.8g.png", "weasel8.149g.png", "weasel8.16g.png"}; LEPT_DLL extern const char *ImageFileFormatExtensions[]; static void get_format_data(l_int32 i, l_uint8 *data, size_t size); int main(int argc, char **argv) { l_uint8 *data1, *data2; l_int32 i; size_t size1, size2; BOX *box; PIX *pix, *pix1, *pix2, *pix3; PIXA *pixa, *pixa1; PIXC *pixc, *pixc1, *pixc2; PIXAC *pixac, *pixac1, *pixac2; L_REGPARAMS *rp; SARRAY *sa; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/comp"); pixac = pixacompCreate(1); pixa = pixaCreate(0); /* --- Read in the images --- */ pix1 = pixRead("marge.jpg"); pixc1 = pixcompCreateFromPix(pix1, IFF_JFIF_JPEG); pix2 = pixCreateFromPixcomp(pixc1); pixc2 = pixcompCreateFromPix(pix2, IFF_JFIF_JPEG); pix3 = pixCreateFromPixcomp(pixc2); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pix3, L_INSERT); pixacompAddPix(pixac, pix1, IFF_DEFAULT); pixDestroy(&pix1); pixDestroy(&pix2); pixcompDestroy(&pixc1); pixcompDestroy(&pixc2); pix = pixRead("feyn.tif"); pix1 = pixScaleToGray6(pix); pixc1 = pixcompCreateFromPix(pix1, IFF_JFIF_JPEG); pix2 = pixCreateFromPixcomp(pixc1); pixc2 = pixcompCreateFromPix(pix2, IFF_JFIF_JPEG); pix3 = pixCreateFromPixcomp(pixc2); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pix3, L_INSERT); pixacompAddPix(pixac, pix1, IFF_DEFAULT); pixDestroy(&pix1); pixDestroy(&pix2); pixcompDestroy(&pixc1); pixcompDestroy(&pixc2); box = boxCreate(1144, 611, 690, 180); pix1 = pixClipRectangle(pix, box, NULL); pixc1 = pixcompCreateFromPix(pix1, IFF_TIFF_G4); pix2 = pixCreateFromPixcomp(pixc1); pixc2 = pixcompCreateFromPix(pix2, IFF_TIFF_G4); pix3 = pixCreateFromPixcomp(pixc2); regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 2 */ pixaAddPix(pixa, pix3, L_INSERT); pixacompAddPix(pixac, pix1, IFF_DEFAULT); boxDestroy(&box); pixDestroy(&pix); pixDestroy(&pix1); pixDestroy(&pix2); pixcompDestroy(&pixc1); pixcompDestroy(&pixc2); pix1 = pixRead("weasel4.11c.png"); pixc1 = pixcompCreateFromPix(pix1, IFF_PNG); pix2 = pixCreateFromPixcomp(pixc1); pixc2 = pixcompCreateFromPix(pix2, IFF_PNG); pix3 = pixCreateFromPixcomp(pixc2); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ pixaAddPix(pixa, pix3, L_INSERT); pixacompAddPix(pixac, pix1, IFF_DEFAULT); pixDestroy(&pix1); pixDestroy(&pix2); pixcompDestroy(&pixc1); pixcompDestroy(&pixc2); /* --- Extract formatting info from compressed strings --- */ for (i = 0; i < 4; i++) { pixc = pixacompGetPixcomp(pixac, i, L_NOCOPY); get_format_data(i, pixc->data, pixc->size); } /* Save a tiled composite from the pixa */ pix1 = pixaDisplayTiledAndScaled(pixa, 32, 400, 4, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 4 */ pixaDestroy(&pixa); pixDestroy(&pix1); /* Convert the pixac --> pixa and save a tiled composite */ pixa1 = pixaCreateFromPixacomp(pixac, L_COPY); pix1 = pixaDisplayTiledAndScaled(pixa1, 32, 400, 4, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 5 */ pixaDestroy(&pixa1); pixDestroy(&pix1); /* Make a pixacomp from files, and join */ sa = sarrayCreate(0); for (i = 0; i < 6; i++) sarrayAddString(sa, fnames[i], L_COPY); pixac1 = pixacompCreateFromSA(sa, IFF_DEFAULT); pixacompJoin(pixac1, pixac, 0, -1); pixa1 = pixaCreateFromPixacomp(pixac1, L_COPY); pix1 = pixaDisplayTiledAndScaled(pixa1, 32, 250, 10, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 6 */ pixacompDestroy(&pixac1); pixaDestroy(&pixa1); pixDestroy(&pix1); sarrayDestroy(&sa); /* Test serialized I/O */ pixacompWrite("/tmp/lept/comp/file1.pac", pixac); regTestCheckFile(rp, "/tmp/lept/comp/file1.pac"); /* 7 */ pixac1 = pixacompRead("/tmp/lept/comp/file1.pac"); pixacompWrite("/tmp/lept/comp/file2.pac", pixac1); regTestCheckFile(rp, "/tmp/lept/comp/file2.pac"); /* 8 */ regTestCompareFiles(rp, 7, 8); /* 9 */ pixac2 = pixacompRead("/tmp/lept/comp/file2.pac"); pixa1 = pixaCreateFromPixacomp(pixac2, L_COPY); pix1 = pixaDisplayTiledAndScaled(pixa1, 32, 250, 4, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 10 */ pixacompDestroy(&pixac1); pixacompDestroy(&pixac2); pixaDestroy(&pixa1); pixDestroy(&pix1); /* Test serialized pixacomp I/O to and from memory */ pixacompWriteMem(&data1, &size1, pixac); pixac1 = pixacompReadMem(data1, size1); pixacompWriteMem(&data2, &size2, pixac1); pixac2 = pixacompReadMem(data2, size2); pixacompWrite("/tmp/lept/comp/file3.pac", pixac1); regTestCheckFile(rp, "/tmp/lept/comp/file3.pac"); /* 11 */ pixacompWrite("/tmp/lept/comp/file4.pac", pixac2); regTestCheckFile(rp, "/tmp/lept/comp/file4.pac"); /* 12 */ regTestCompareFiles(rp, 11, 12); /* 13 */ pixacompDestroy(&pixac1); pixacompDestroy(&pixac2); lept_free(data1); lept_free(data2); /* Test pdf generation (both with and without transcoding */ pixacompDestroy(&pixac); pix1 = pixRead("test24.jpg"); pix2 = pixRead("marge.jpg"); pixac = pixacompCreate(2); pixacompAddPix(pixac, pix1, IFF_JFIF_JPEG); pixacompAddPix(pixac, pix2, IFF_JFIF_JPEG); l_pdfSetDateAndVersion(0); pixacompConvertToPdfData(pixac, 0, 1.0, L_DEFAULT_ENCODE, 0, "test1", &data1, &size1); regTestWriteDataAndCheck(rp, data1, size1, "pdf"); /* 13 */ pixacompFastConvertToPdfData(pixac, "test2", &data2, &size2); regTestWriteDataAndCheck(rp, data2, size2, "pdf"); /* 14 */ pixDestroy(&pix1); pixDestroy(&pix2); pixacompDestroy(&pixac); lept_free(data1); lept_free(data2); return regTestCleanup(rp); } static void get_format_data(l_int32 i, l_uint8 *data, size_t size) { l_int32 ret, format, w, h, d, bps, spp, iscmap; ret = pixReadHeaderMem(data, size, &format, &w, &h, &bps, &spp, &iscmap); d = bps * spp; if (d == 24) d = 32; if (ret) lept_stderr("Error: couldn't read data: size = %d\n", (l_int32)size); else lept_stderr("Format data for image %d:\n" " format: %s, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", i, ImageFileFormatExtensions[format], w, h, d, bps, spp, iscmap); return; } leptonica-1.86.0/prog/pixmem_reg.c000066400000000000000000000130311506303110300170210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixmem_reg.c * * Tests low-level pix data accessors, and functions that call them. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_uint32 *data; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Copy with internal resizing: onto a cmapped image */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pixCopy(pix3, pix2); regTestComparePix(rp, pix2, pix3); /* 0 */ pixaAddPix(pixa, pix3, L_INSERT); pixCopy(pix1, pix3); regTestComparePix(rp, pix1, pix2); /* 1 */ pixaAddPix(pixa, pix1, L_INSERT); pixDestroy(&pix2); /* Copy with internal resizing: from a cmapped image */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pixCopy(pix2, pix1); regTestComparePix(rp, pix1, pix2); /* 2 */ pixaAddPix(pixa, pix2, L_INSERT); pixCopy(pix3, pix2); regTestComparePix(rp, pix2, pix3); /* 3 */ pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); /* Transfer of data pixs --> pixd, when pixs is not cloned. * pixs is destroyed. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix4 = pixCopy(NULL, pix1); pixTransferAllData(pix2, &pix1, 0, 0); regTestComparePix(rp, pix2, pix4); /* 4 */ pixaAddPix(pixa, pix2, L_COPY); pixTransferAllData(pix3, &pix2, 0, 0); regTestComparePix(rp, pix3, pix4); /* 5 */ pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix4); /* Another transfer of data pixs --> pixd, when pixs is not cloned. * pixs is destroyed. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix4 = pixCopy(NULL, pix1); pixTransferAllData(pix2, &pix4, 0, 0); regTestComparePix(rp, pix1, pix2); /* 6 */ pixaAddPix(pixa, pix2, L_COPY); pixTransferAllData(pix3, &pix2, 0, 0); regTestComparePix(rp, pix1, pix3); /* 7 */ pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); /* Transfer of data pixs --> pixd, when pixs is cloned. * pixs has its refcount reduced by 1. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix4 = pixClone(pix1); pix5 = pixClone(pix2); pixTransferAllData(pix2, &pix4, 0, 0); regTestComparePix(rp, pix1, pix2); /* 8 */ pixaAddPix(pixa, pix2, L_INSERT); pixTransferAllData(pix3, &pix5, 0, 0); regTestComparePix(rp, pix1, pix3); /* 9 */ pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); /* Extraction of data when pixs is not cloned, putting * the data into a new template of pixs. */ pix2 = pixRead("feyn-fract.tif"); pix3 = pixCopy(NULL, pix2); /* for later reference */ data = pixExtractData(pix2); pix4 = pixCreateTemplateNoInit(pix2); pixFreeAndSetData(pix4, data); regTestComparePix(rp, pix3, pix4); /* 10 */ pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); /* Extraction of data when pixs is cloned, putting * a copy of the data into a new template of pixs. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixClone(pix1); /* bump refcount of pix1 to 2 */ data = pixExtractData(pix1); /* should make a copy of data */ pix3 = pixCreateTemplateNoInit(pix1); pixFreeAndSetData(pix3, data); regTestComparePix(rp, pix2, pix3); /* 11 */ pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixaDisplayTiledInRows(pixa, 32, 1500, 0.5, 0, 30, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); return regTestCleanup(rp); } leptonica-1.86.0/prog/pixserial_reg.c000066400000000000000000000125761506303110300175370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixserial_reg.c * * Tests the fast (uncompressed) serialization of pix to a string * in memory and the deserialization back to a pix. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Use this set */ static l_int32 nfiles = 10; static const char *filename[] = { "feyn.tif", /* 1 bpp */ "dreyfus2.png", /* 2 bpp cmapped */ "dreyfus4.png", /* 4 bpp cmapped */ "weasel4.16c.png", /* 4 bpp cmapped */ "dreyfus8.png", /* 8 bpp cmapped */ "weasel8.240c.png", /* 8 bpp cmapped */ "karen8.jpg", /* 8 bpp, not cmapped */ "test16.tif", /* 8 bpp, not cmapped */ "marge.jpg", /* rgb */ "test24.jpg" /* rgb */ }; int main(int argc, char **argv) { char buf[256]; size_t size; l_int32 i, w, h; l_int32 format, bps, spp, iscmap, format2, w2, h2, bps2, spp2, iscmap2; l_uint8 *data; l_uint32 *data32, *data32r; BOX *box; PIX *pixs, *pixt, *pixt2, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test basic serialization/deserialization */ data32 = NULL; for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); /* Serialize to memory */ pixSerializeToMemory(pixs, &data32, &size); /* Just for fun, write and read back from file */ l_binaryWrite("/tmp/lept/regout/array", "w", data32, size); data32r = (l_uint32 *)l_binaryRead("/tmp/lept/regout/array", &size); /* Deserialize */ pixd = pixDeserializeFromMemory(data32r, size); regTestComparePix(rp, pixs, pixd); /* i */ pixDestroy(&pixd); pixDestroy(&pixs); lept_free(data32); lept_free(data32r); } /* Test read/write fileio interface */ for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); pixGetDimensions(pixs, &w, &h, NULL); box = boxCreate(0, 0, L_MIN(150, w), L_MIN(150, h)); pixt = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); snprintf(buf, sizeof(buf), "/tmp/lept/regout/pixs.%d.spix", rp->index + 1); pixWrite(buf, pixt, IFF_SPIX); regTestCheckFile(rp, buf); /* nfiles + 2 * i */ pixt2 = pixRead(buf); regTestComparePix(rp, pixt, pixt2); /* nfiles + 2 * i + 1 */ pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixt2); } /* Test read header. Note that for rgb input, spp = 3, * but for 32 bpp spix, we set spp = 4. */ data = NULL; for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); pixWriteMem(&data, &size, pixs, IFF_SPIX); pixReadHeader(filename[i], &format, &w, &h, &bps, &spp, &iscmap); pixReadHeaderMem(data, size, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); if (format2 != IFF_SPIX || w != w2 || h != h2 || bps != bps2 || iscmap != iscmap2) { if (rp->fp) fprintf(rp->fp, "Failure comparing data"); else lept_stderr("Failure comparing data"); } pixDestroy(&pixs); lept_free(data); } #if 0 /* Do timing */ for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); startTimer(); pixSerializeToMemory(pixs, &data32, &size); pixd = pixDeserializeFromMemory(data32, size); lept_stderr("Time for %s: %7.3f sec\n", filename[i], stopTimer()); lept_free(data32); pixDestroy(&pixs); pixDestroy(&pixd); } #endif return regTestCleanup(rp); } leptonica-1.86.0/prog/pixtile_reg.c000066400000000000000000000066221506303110300172100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pixtile_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" static l_int32 TestTiling(PIX *pixd, PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap); int main(int argc, char **argv) { PIX *pixs, *pixd; setLeptDebugOK(1); pixs = pixRead("test24.jpg"); pixd = pixCreateTemplateNoInit(pixs); TestTiling(pixd, pixs, 1, 1, 0, 0, 183, 83); TestTiling(pixd, pixs, 0, 1, 60, 0, 30, 20); TestTiling(pixd, pixs, 1, 0, 0, 60, 40, 40); TestTiling(pixd, pixs, 0, 0, 27, 31, 27, 31); TestTiling(pixd, pixs, 0, 0, 400, 400, 40, 20); TestTiling(pixd, pixs, 7, 9, 0, 0, 35, 35); TestTiling(pixd, pixs, 0, 0, 27, 31, 0, 0); TestTiling(pixd, pixs, 7, 9, 0, 0, 0, 0); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } l_int32 TestTiling(PIX *pixd, PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap) { l_int32 i, j, same; PIX *pixt; PIXTILING *pt; pixClearAll(pixd); pt = pixTilingCreate(pixs, nx, ny, w, h, xoverlap, yoverlap); pixTilingGetCount(pt, &nx, &ny); pixTilingGetSize(pt, &w, &h); if (pt) lept_stderr("nx,ny = %d,%d; w,h = %d,%d; overlap = %d,%d\n", nx, ny, w, h, pt->xoverlap, pt->yoverlap); else return 1; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixTilingPaintTile(pixd, i, j, pixt, pt); pixDestroy(&pixt); } } pixEqual(pixs, pixd, &same); if (same) lept_stderr("Tiling OK\n"); else lept_stderr("Tiling ERROR !\n"); pixTilingDestroy(&pt); return 0; } leptonica-1.86.0/prog/plottest.c000066400000000000000000000126411506303110300165510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * plottest.c * * This tests the gplot library functions that generate * the plot commands and data required for input to gnuplot. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* for GPLOT_STYLE, use one of the following set: * GPLOT_LINES * GPLOT_POINTS * GPLOT_IMPULSE * GPLOT_LINESPOINTS * GPLOT_DOTS */ #define GPLOT_STYLE GPLOT_LINES /* for GPLOT_OUTPUT use one of the following set: * GPLOT_PNG * GPLOT_PS * GPLOT_EPS * GPLOT_LATEX */ #define GPLOT_OUTPUT GPLOT_PNG int main(int argc, char **argv) { char *str1, *str2, *pngname; l_int32 i; size_t size1, size2; l_float32 x, y1, y2, pi; GPLOT *gplot1, *gplot2, *gplot3, *gplot4, *gplot5; NUMA *nax, *nay1, *nay2; if (argc != 1) return ERROR_INT(" Syntax: plottest", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/plot"); /* Generate plot data */ nax = numaCreate(0); nay1 = numaCreate(0); nay2 = numaCreate(0); pi = 3.1415926535; for (i = 0; i < 180; i++) { x = (pi / 180.) * i; y1 = (l_float32)sin(2.4 * x); y2 = (l_float32)cos(2.4 * x); numaAddNumber(nax, x); numaAddNumber(nay1, y1); numaAddNumber(nay2, y2); } /* Show the plot */ gplot1 = gplotCreate("/tmp/lept/plot/set1", GPLOT_OUTPUT, "Example plots", "theta", "f(theta)"); gplotAddPlot(gplot1, nax, nay1, GPLOT_STYLE, "sin (2.4 * theta)"); gplotAddPlot(gplot1, nax, nay2, GPLOT_STYLE, "cos (2.4 * theta)"); gplotMakeOutput(gplot1); /* Also save the plot to png */ gplot1->outformat = GPLOT_PNG; pngname = genPathname("/tmp/lept/plot", "set1.png"); stringReplace(&gplot1->outname, pngname); gplotMakeOutput(gplot1); l_fileDisplay("/tmp/lept/plot/set1.png", 100, 100, 1.0); lept_free(pngname); /* Test gplot serialization */ gplotWrite("/tmp/lept/plot/plot1.gp", gplot1); if ((gplot2 = gplotRead("/tmp/lept/plot/plot1.gp")) == NULL) return ERROR_INT("gplotRead failure!", __func__, 1); gplotWrite("/tmp/lept/plot/plot2.gp", gplot2); /* Are the two written gplot files the same? */ str1 = (char *)l_binaryRead("/tmp/lept/plot/plot1.gp", &size1); str2 = (char *)l_binaryRead("/tmp/lept/plot/plot2.gp", &size2); if (size1 != size2) lept_stderr("Error: size1 = %lu, size2 = %lu\n", (unsigned long)size1, (unsigned long)size2); else lept_stderr("Correct: size1 = size2 = %lu\n", (unsigned long)size1); if (strcmp(str1, str2) != 0) lept_stderr("Error: str1 != str2\n"); else lept_stderr("Correct: str1 == str2\n"); lept_free(str1); lept_free(str2); /* Read from file and regenerate the plot */ gplot3 = gplotRead("/tmp/lept/plot/plot2.gp"); stringReplace(&gplot3->title , "Example plots regen"); gplot3->outformat = GPLOT_PNG; gplotMakeOutput(gplot3); /* Build gplot but do not make the output formatted stuff */ gplot4 = gplotCreate("/tmp/lept/plot/set2", GPLOT_OUTPUT, "Example plots 2", "theta", "f(theta)"); gplotAddPlot(gplot4, nax, nay1, GPLOT_STYLE, "sin (2.4 * theta)"); gplotAddPlot(gplot4, nax, nay2, GPLOT_STYLE, "cos (2.4 * theta)"); /* Write, read back, and generate the plot */ gplotWrite("/tmp/lept/plot/plot4.gp", gplot4); if ((gplot5 = gplotRead("/tmp/lept/plot/plot4.gp")) == NULL) return ERROR_INT("gplotRead failure!", __func__, 1); gplotMakeOutput(gplot5); l_fileDisplay("/tmp/lept/plot/set2.png", 750, 100, 1.0); gplotDestroy(&gplot1); gplotDestroy(&gplot2); gplotDestroy(&gplot3); gplotDestroy(&gplot4); gplotDestroy(&gplot5); numaDestroy(&nax); numaDestroy(&nay1); numaDestroy(&nay2); return 0; } leptonica-1.86.0/prog/pngio_reg.c000066400000000000000000000525761506303110300166570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pngio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossless read/write * I/O in png format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in png format for * various depths, with and without colormaps. * * This test is dependent on the following external libraries: * libpng, libz */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Needed for checking libraries */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #define FILE_1BPP "rabi.png" #define FILE_2BPP "speckle2.png" #define FILE_2BPP_C "weasel2.4g.png" #define FILE_4BPP "speckle4.png" #define FILE_4BPP_C "weasel4.16c.png" #define FILE_8BPP "dreyfus8.png" #define FILE_8BPP_C "weasel8.240c.png" #define FILE_16BPP "test16.png" #define FILE_32BPP "weasel32.png" #define FILE_32BPP_ALPHA "test32-alpha.png" #define FILE_CMAP_ALPHA "test-cmap-alpha.png" #define FILE_CMAP_ALPHA2 "test-cmap-alpha2.png" #define FILE_TRANS_ALPHA "test-fulltrans-alpha.png" #define FILE_GRAY_ALPHA "test-gray-alpha.png" #define FILE_TRANS_CMAP_2BPP "trans-2bpp-cmap.png" #define FILE_TRANS_CMAP_4BPP "trans-4bpp-cmap.png" #define FILE_TRANS_CMAP_8BPP "trans-8bpp-cmap.png" static l_int32 test_file_png(const char *fname, const char *dirout); static l_int32 test_mem_png(const char *fname); static l_int32 get_header_data(const char *filename); static l_int32 test_1bpp_trans(L_REGPARAMS *rp); static l_int32 test_1bpp_color(L_REGPARAMS *rp); static l_int32 test_1bpp_gray(L_REGPARAMS *rp); static l_int32 test_1bpp_bw1(L_REGPARAMS *rp); static l_int32 test_1bpp_bw2(L_REGPARAMS *rp); static l_int32 test_2bpp_cmap_trans(L_REGPARAMS *rp); static l_int32 test_4bpp_cmap_trans(L_REGPARAMS *rp); static l_int32 test_8bpp_cmap_trans(L_REGPARAMS *rp); static l_int32 test_8bpp_trans(L_REGPARAMS *rp); LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { const char dirout[] = "/tmp/lept/pngio/"; l_int32 success, failure; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "pngio_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; failure = FALSE; /* ------------ Part 1: Test lossless r/w to file ------------ */ success = TRUE; lept_rmdir("lept/pngio"); /* remove previous output files */ lept_mkdir("lept/pngio"); lept_stderr("Test bmp 1 bpp file:\n"); if (test_file_png(FILE_1BPP, dirout)) success = FALSE; lept_stderr("Test 2 bpp file:\n"); if (test_file_png(FILE_2BPP, dirout)) success = FALSE; lept_stderr("Test 2 bpp file with cmap:\n"); if (test_file_png(FILE_2BPP_C, dirout)) success = FALSE; lept_stderr("Test 4 bpp file:\n"); if (test_file_png(FILE_4BPP, dirout)) success = FALSE; lept_stderr("Test 4 bpp file with cmap:\n"); if (test_file_png(FILE_4BPP_C, dirout)) success = FALSE; lept_stderr("Test 8 bpp grayscale file with cmap:\n"); if (test_file_png(FILE_8BPP, dirout)) success = FALSE; lept_stderr("Test 8 bpp color file with cmap:\n"); if (test_file_png(FILE_8BPP_C, dirout)) success = FALSE; lept_stderr("Test 16 bpp file:\n"); if (test_file_png(FILE_16BPP, dirout)) success = FALSE; lept_stderr("Test 32 bpp RGB file:\n"); if (test_file_png(FILE_32BPP, dirout)) success = FALSE; lept_stderr("Test 32 bpp RGBA file:\n"); if (test_file_png(FILE_32BPP_ALPHA, dirout)) success = FALSE; lept_stderr("Test spp = 1, cmap with alpha file:\n"); if (test_file_png(FILE_CMAP_ALPHA, dirout)) success = FALSE; lept_stderr("Test spp = 1, cmap with alpha (small alpha array):\n"); if (test_file_png(FILE_CMAP_ALPHA2, dirout)) success = FALSE; lept_stderr("Test spp = 1, fully transparent with alpha file:\n"); if (test_file_png(FILE_TRANS_ALPHA, dirout)) success = FALSE; lept_stderr("Test spp = 2, gray with alpha file:\n"); if (test_file_png(FILE_GRAY_ALPHA, dirout)) success = FALSE; lept_stderr("Test spp = 2, cmap with alpha file:\n"); if (test_file_png(FILE_TRANS_CMAP_2BPP, dirout)) success = FALSE; lept_stderr("Test spp = 4, cmap with alpha file:\n"); if (test_file_png(FILE_TRANS_CMAP_4BPP, dirout)) success = FALSE; lept_stderr("Test spp = 8, cmap with alpha file:\n"); if (test_file_png(FILE_TRANS_CMAP_8BPP, dirout)) success = FALSE; if (success) { lept_stderr( "\n ****** Success on lossless r/w to file *****\n"); } else { lept_stderr( "\n ******* Failure on at least one r/w to file ******\n"); } if (!success) failure = TRUE; /* ------------ Part 2: Test lossless r/w to memory ------------ */ success = TRUE; if (test_mem_png(FILE_1BPP)) success = FALSE; if (test_mem_png(FILE_2BPP)) success = FALSE; if (test_mem_png(FILE_2BPP_C)) success = FALSE; if (test_mem_png(FILE_4BPP)) success = FALSE; if (test_mem_png(FILE_4BPP_C)) success = FALSE; if (test_mem_png(FILE_8BPP)) success = FALSE; if (test_mem_png(FILE_8BPP_C)) success = FALSE; if (test_mem_png(FILE_16BPP)) success = FALSE; if (test_mem_png(FILE_32BPP)) success = FALSE; if (test_mem_png(FILE_32BPP_ALPHA)) success = FALSE; if (test_mem_png(FILE_CMAP_ALPHA)) success = FALSE; if (test_mem_png(FILE_CMAP_ALPHA2)) success = FALSE; if (test_mem_png(FILE_TRANS_ALPHA)) success = FALSE; if (test_mem_png(FILE_GRAY_ALPHA)) success = FALSE; if (test_mem_png(FILE_TRANS_CMAP_2BPP)) success = FALSE; if (test_mem_png(FILE_TRANS_CMAP_4BPP)) success = FALSE; if (test_mem_png(FILE_TRANS_CMAP_8BPP)) success = FALSE; if (success) { lept_stderr( "\n ****** Success on lossless r/w to memory *****\n"); } else { lept_stderr( "\n ******* Failure on at least one r/w to memory ******\n"); } if (!success) failure = TRUE; /* ------------ Part 3: Test lossless 1, 2, 4 and 8 bpp r/w ------------ */ lept_stderr("\nTest lossless 1 and 8 bpp r/w\n"); success = TRUE; if (test_1bpp_trans(rp) == 0) success = FALSE; if (test_1bpp_color(rp) == 0) success = FALSE; if (test_1bpp_gray(rp) == 0) success = FALSE; if (test_1bpp_bw1(rp) == 0) success = FALSE; if (test_1bpp_bw2(rp) == 0) success = FALSE; if (test_2bpp_cmap_trans(rp) == 0) success = FALSE; if (test_4bpp_cmap_trans(rp) == 0) success = FALSE; if (test_8bpp_cmap_trans(rp) == 0) success = FALSE; if (test_8bpp_trans(rp) == 0) success = FALSE; if (success) { lept_stderr( "\n ******* Success on 1 and 8 bpp lossless *******\n\n"); } else { lept_stderr( "\n ******* Failure on 1 and 8 bpp lossless *******\n\n"); } if (!success) failure = TRUE; /* -------------- Part 4: Read header information -------------- */ success = TRUE; if (get_header_data(FILE_1BPP)) success = FALSE; if (get_header_data(FILE_2BPP)) success = FALSE; if (get_header_data(FILE_2BPP_C)) success = FALSE; if (get_header_data(FILE_4BPP)) success = FALSE; if (get_header_data(FILE_4BPP_C)) success = FALSE; if (get_header_data(FILE_8BPP)) success = FALSE; if (get_header_data(FILE_8BPP_C)) success = FALSE; if (get_header_data(FILE_16BPP)) success = FALSE; if (get_header_data(FILE_32BPP)) success = FALSE; if (get_header_data(FILE_32BPP_ALPHA)) success = FALSE; if (get_header_data(FILE_CMAP_ALPHA)) success = FALSE; if (get_header_data(FILE_CMAP_ALPHA2)) success = FALSE; if (get_header_data(FILE_TRANS_ALPHA)) success = FALSE; if (get_header_data(FILE_GRAY_ALPHA)) success = FALSE; if (get_header_data(FILE_TRANS_CMAP_2BPP)) success = FALSE; if (get_header_data(FILE_TRANS_CMAP_4BPP)) success = FALSE; if (get_header_data(FILE_TRANS_CMAP_8BPP)) success = FALSE; if (success) { lept_stderr("\n ******* Success on reading headers *******\n\n"); } else { lept_stderr("\n ******* Failure on reading headers *******\n\n"); } if (!success) failure = TRUE; if (!failure) { lept_stderr(" ******* Success on all tests *******\n\n"); } else { lept_stderr(" ******* Failure on at least one test *******\n\n"); } if (failure) rp->success = FALSE; return regTestCleanup(rp); } /* File r/w test. Returns 1 on error */ static l_int32 test_file_png(const char *fname, const char *dirout) { char fileout[128]; l_int32 same; PIX *pixs; PIX *pixd = NULL; if ((pixs = pixRead(fname)) == NULL) { lept_stderr("Failure to read %s\n", fname); return 1; } stringCopy(fileout, dirout, 20); stringCat(fileout, 128, fname); if (pixWrite(fileout, pixs, IFF_PNG)) { lept_stderr("Write fail for png\n"); return 1; } if ((pixd = pixRead(fileout)) == NULL) { lept_stderr("Read fail for png\n"); return 1; } pixEqual(pixs, pixd, &same); if (!same) lept_stderr("Write/read fail for file %s\n", fname); pixDestroy(&pixs); pixDestroy(&pixd); return (!same); } /* Memory r/w test. Returns 1 on error */ static l_int32 test_mem_png(const char *fname) { l_uint8 *data = NULL; l_int32 same; size_t size = 0; PIX *pixs; PIX *pixd = NULL; if ((pixs = pixRead(fname)) == NULL) { lept_stderr("Failure to read %s\n", fname); return 1; } if (pixWriteMem(&data, &size, pixs, IFF_PNG)) { lept_stderr("Mem write fail for png\n"); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { lept_stderr("Mem read fail for png\n"); lept_free(data); return 1; } pixEqual(pixs, pixd, &same); if (!same) lept_stderr("Mem write/read fail for file %s\n", fname); pixDestroy(&pixs); pixDestroy(&pixd); lept_free(data); return (!same); } /* Retrieve header data from file and from array in memory */ static l_int32 get_header_data(const char *filename) { l_uint8 *data; l_int32 ret1, ret2, format1, format2; l_int32 w1, w2, h1, h2, d1, d2, bps1, bps2, spp1, spp2, iscmap1, iscmap2; size_t nbytes1, nbytes2; /* Read header from file */ nbytes1 = nbytesInFile(filename); ret1 = pixReadHeader(filename, &format1, &w1, &h1, &bps1, &spp1, &iscmap1); d1 = bps1 * spp1; if (d1 == 24) d1 = 32; if (ret1) { lept_stderr("Error: couldn't read header data from file: %s\n", filename); } else { lept_stderr("Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, ImageFileFormatExtensions[format1], (unsigned long)nbytes1, w1, h1, d1, bps1, spp1, iscmap1); if (format1 != IFF_PNG) { lept_stderr("Error: format is %d; should be %d\n", format1, IFF_PNG); ret1 = 1; } } /* Read header from array in memory */ data = l_binaryRead(filename, &nbytes2); ret2 = pixReadHeaderMem(data, nbytes2, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); lept_free(data); d2 = bps2 * spp2; if (d2 == 24) d2 = 32; if (ret2) { lept_stderr("Error: couldn't mem-read header data: %s\n", filename); } else { if (nbytes1 != nbytes2 || format1 != format2 || w1 != w2 || h1 != h2 || d1 != d2 || bps1 != bps2 || spp1 != spp2 || iscmap1 != iscmap2) { lept_stderr("Incomsistency reading image %s with format %s\n", filename, ImageFileFormatExtensions[IFF_PNG]); ret2 = 1; } } return ret1 || ret2; } static l_int32 test_1bpp_trans(L_REGPARAMS *rp) { l_int32 same, transp; FILE *fp; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixSetColormap(pix1, cmap); pixcmapAddRGBA(cmap, 180, 130, 220, 0); /* transparent */ pixcmapAddRGBA(cmap, 20, 120, 0, 255); /* opaque */ pixWrite("/tmp/lept/regout/1bpp-trans.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/1bpp-trans.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("1bpp_trans: success\n"); else lept_stderr("1bpp_trans: bad output\n"); pixDisplayWithTitle(pix2, 700, 0, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); fp = lept_fopen("/tmp/lept/regout/1bpp-trans.png", "rb"); fgetPngColormapInfo(fp, &cmap, &transp); if (fp) lept_fclose(fp); if (transp) lept_stderr("1bpp_trans: correct -- transparency found\n"); else lept_stderr("1bpp_trans: error -- no transparency found!\n"); if (rp->display) pixcmapWriteStream(stderr, cmap); pixcmapDestroy(&cmap); return same; } static l_int32 test_1bpp_color(L_REGPARAMS *rp) { l_int32 same, transp; FILE *fp; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixSetColormap(pix1, cmap); pixcmapAddRGBA(cmap, 180, 130, 220, 255); /* color, opaque */ pixcmapAddRGBA(cmap, 20, 120, 0, 255); /* color, opaque */ pixWrite("/tmp/lept/regout/1bpp-color.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/1bpp-color.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("1bpp_color: success\n"); else lept_stderr("1bpp_color: bad output\n"); pixDisplayWithTitle(pix2, 700, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); fp = lept_fopen("/tmp/lept/regout/1bpp-color.png", "rb"); fgetPngColormapInfo(fp, &cmap, &transp); if (fp) lept_fclose(fp); if (transp) lept_stderr("1bpp_color: error -- transparency found!\n"); else lept_stderr("1bpp_color: correct -- no transparency found\n"); if (rp->display) pixcmapWriteStream(stderr, cmap); pixcmapDestroy(&cmap); return same; } static l_int32 test_1bpp_gray(L_REGPARAMS *rp) { l_int32 same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixSetColormap(pix1, cmap); pixcmapAddRGBA(cmap, 180, 180, 180, 255); /* light, opaque */ pixcmapAddRGBA(cmap, 60, 60, 60, 255); /* dark, opaque */ pixWrite("/tmp/lept/regout/1bpp-gray.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/1bpp-gray.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("1bpp_gray: success\n"); else lept_stderr("1bpp_gray: bad output\n"); pixDisplayWithTitle(pix2, 700, 200, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_1bpp_bw1(L_REGPARAMS *rp) { l_int32 same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixSetColormap(pix1, cmap); pixcmapAddRGBA(cmap, 0, 0, 0, 255); /* black, opaque */ pixcmapAddRGBA(cmap, 255, 255, 255, 255); /* white, opaque */ pixWrite("/tmp/lept/regout/1bpp-bw1.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/1bpp-bw1.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("1bpp_bw1: success\n"); else lept_stderr("1bpp_bw1: bad output\n"); pixDisplayWithTitle(pix2, 700, 300, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_1bpp_bw2(L_REGPARAMS *rp) { l_int32 same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead("feyn-fract2.tif"); cmap = pixcmapCreate(1); pixSetColormap(pix1, cmap); pixcmapAddRGBA(cmap, 255, 255, 255, 255); /* white, opaque */ pixcmapAddRGBA(cmap, 0, 0, 0, 255); /* black, opaque */ pixWrite("/tmp/lept/regout/1bpp-bw2.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/1bpp-bw2.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("1bpp_bw2: success\n"); else lept_stderr("1bpp_bw2: bad output\n"); pixDisplayWithTitle(pix2, 700, 400, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_2bpp_cmap_trans(L_REGPARAMS *rp) { l_int32 w, h, same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead(FILE_TRANS_CMAP_2BPP); pixGetDimensions(pix1, &w, &h, NULL); if (w != 82 || h != 73) { lept_stderr("%s: bad dimensions\n", FILE_TRANS_CMAP_2BPP); return 0; } pixDestroy(&pix1); pix1 = pixRead("weasel2.4g.png"); cmap = pixGetColormap(pix1); pixcmapSetAlpha(cmap, 2, 100); pixWrite("/tmp/lept/regout/2bpp-cmap-trans.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/2bpp-cmap-trans.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("2bpp-cmap-trans: success\n"); else lept_stderr("2bpp-cmap-trans: bad output\n"); pixDisplayWithTitle(pix2, 0, 800, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_4bpp_cmap_trans(L_REGPARAMS *rp) { l_int32 w, h, same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead(FILE_TRANS_CMAP_4BPP); pixGetDimensions(pix1, &w, &h, NULL); if (w != 82 || h != 73) { lept_stderr("%s: bad dimensions\n", FILE_TRANS_CMAP_4BPP); return 0; } pixDestroy(&pix1); pix1 = pixRead("weasel4.5g.png"); cmap = pixGetColormap(pix1); pixcmapSetAlpha(cmap, 2, 60); pixWrite("/tmp/lept/regout/4bpp-cmap-trans.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/4bpp-cmap-trans.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("4bpp-cmap-trans: success\n"); else lept_stderr("4bpp-cmap-trans: bad output\n"); pixDisplayWithTitle(pix2, 200, 800, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_8bpp_cmap_trans(L_REGPARAMS *rp) { l_int32 w, h, same; PIX *pix1, *pix2; PIXCMAP *cmap; pix1 = pixRead(FILE_TRANS_CMAP_8BPP); pixGetDimensions(pix1, &w, &h, NULL); if (w != 82 || h != 73) { lept_stderr("%s: bad dimensions\n", FILE_TRANS_CMAP_8BPP); return 0; } pixDestroy(&pix1); pix1 = pixRead("weasel8.5g.png"); cmap = pixGetColormap(pix1); pixcmapSetAlpha(cmap, 2, 80); pixcmapSetAlpha(cmap, 3, 80); pixWrite("/tmp/lept/regout/8bpp-cmap-trans.png", pix1, IFF_PNG); pix2 = pixRead("/tmp/lept/regout/8bpp-cmap-trans.png"); pixEqual(pix1, pix2, &same); if (same) lept_stderr("8bpp-cmap-trans: success\n"); else lept_stderr("8bpp-cmap-trans: bad output\n"); pixDisplayWithTitle(pix2, 200, 800, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); return same; } static l_int32 test_8bpp_trans(L_REGPARAMS *rp) { l_int32 same, transp; FILE *fp; PIX *pix1, *pix2, *pix3; PIXCMAP *cmap; pix1 = pixRead("wyom.jpg"); pix2 = pixColorSegment(pix1, 75, 10, 8, 7, 0); cmap = pixGetColormap(pix2); pixcmapSetAlpha(cmap, 0, 0); /* set blueish sky color to transparent */ pixWrite("/tmp/lept/regout/8bpp-trans.png", pix2, IFF_PNG); pix3 = pixRead("/tmp/lept/regout/8bpp-trans.png"); pixEqual(pix2, pix3, &same); if (same) lept_stderr("8bpp_trans: success\n"); else lept_stderr("8bpp_trans: bad output\n"); pixDisplayWithTitle(pix3, 700, 0, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); fp = lept_fopen("/tmp/lept/regout/8bpp-trans.png", "rb"); fgetPngColormapInfo(fp, &cmap, &transp); if (fp) lept_fclose(fp); if (transp) lept_stderr("8bpp_trans: correct -- transparency found\n"); else lept_stderr("8bpp_trans: error -- no transparency found!\n"); if (rp->display) pixcmapWriteStream(stderr, cmap); pixcmapDestroy(&cmap); return same; } leptonica-1.86.0/prog/pnmio_reg.c000066400000000000000000000145411506303110300166530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pnmio_reg.c * * Tests read and write of both ascii and packed pnm, using * pix with 1, 2, 4, 8 and 32 bpp. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(l_int32 argc, char **argv) { l_uint8 *data; size_t size; FILE *fp; PIX *pix1, *pix2, *pix3, *pix4, *pix5; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; #if !USE_PNMIO lept_stderr("pnm/pam writing is not enabled\n" "See environ.h: #define USE_PNMIO 1\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ lept_rmdir("lept/pnm"); lept_mkdir("lept/pnm"); /* Test 1 bpp (pbm) read/write */ pix1 = pixRead("char.tif"); fp = lept_fopen("/tmp/lept/pnm/pix1.1.pnm", "wb"); pixWriteStreamAsciiPnm(fp, pix1); lept_fclose(fp); pix2 = pixRead("/tmp/lept/pnm/pix1.1.pnm"); pixWrite("/tmp/lept/pnm/pix2.1.pnm", pix2, IFF_PNM); pix3 = pixRead("/tmp/lept/pnm/pix2.1.pnm"); regTestComparePix(rp, pix1, pix3); /* 0 */ /* write PAM */ fp = lept_fopen("/tmp/lept/pnm/pix3.1.pnm", "wb"); pixWriteStreamPam(fp, pix1); lept_fclose(fp); pix4 = pixRead("/tmp/lept/pnm/pix3.1.pnm"); regTestComparePix(rp, pix1, pix4); /* 1 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test 2, 4 and 8 bpp (pgm) read/write */ pix1 = pixRead("weasel8.png"); pix2 = pixThresholdTo2bpp(pix1, 4, 0); fp = lept_fopen("/tmp/lept/pnm/pix2.2.pnm", "wb"); pixWriteStreamAsciiPnm(fp, pix2); lept_fclose(fp); pix3 = pixRead("/tmp/lept/pnm/pix2.2.pnm"); pixWrite("/tmp/lept/pnm/pix3.2.pnm", pix3, IFF_PNM); pix4 = pixRead("/tmp/lept/pnm/pix3.2.pnm"); regTestComparePix(rp, pix2, pix4); /* 2 */ /* write PAM */ fp = lept_fopen("/tmp/lept/pnm/pix4.2.pnm", "wb"); pixWriteStreamPam(fp, pix2); lept_fclose(fp); pix5 = pixRead("/tmp/lept/pnm/pix4.2.pnm"); regTestComparePix(rp, pix2, pix5); /* 3 */ pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pix2 = pixThresholdTo4bpp(pix1, 16, 0); fp = lept_fopen("/tmp/lept/pnm/pix2.4.pnm", "wb"); pixWriteStreamAsciiPnm(fp, pix2); lept_fclose(fp); pix3 = pixRead("/tmp/lept/pnm/pix2.4.pnm"); pixWrite("/tmp/lept/pnm/pix3.4.pnm", pix3, IFF_PNM); pix4 = pixRead("/tmp/lept/pnm/pix3.4.pnm"); regTestComparePix(rp, pix2, pix4); /* 4 */ /* write PAM */ fp = lept_fopen("/tmp/lept/pnm/pix4.4.pnm", "wb"); pixWriteStreamPam(fp, pix2); lept_fclose(fp); pix5 = pixRead("/tmp/lept/pnm/pix4.4.pnm"); regTestComparePix(rp, pix2, pix5); /* 5 */ pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); fp = lept_fopen("/tmp/lept/pnm/pix1.8.pnm", "wb"); pixWriteStreamAsciiPnm(fp, pix1); lept_fclose(fp); pix2 = pixRead("/tmp/lept/pnm/pix1.8.pnm"); pixWrite("/tmp/lept/pnm/pix2.8.pnm", pix2, IFF_PNM); pix3 = pixRead("/tmp/lept/pnm/pix2.8.pnm"); regTestComparePix(rp, pix1, pix3); /* 6 */ /* write PAM */ fp = lept_fopen("/tmp/lept/pnm/pix3.8.pnm", "wb"); pixWriteStreamPam(fp, pix1); lept_fclose(fp); pix4 = pixRead("/tmp/lept/pnm/pix3.8.pnm"); regTestComparePix(rp, pix1, pix4); /* 7 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test ppm (24 bpp rgb) read/write */ pix1 = pixRead("marge.jpg"); fp = lept_fopen("/tmp/lept/pnm/pix1.24.pnm", "wb"); /* write ascii */ pixWriteStreamAsciiPnm(fp, pix1); lept_fclose(fp); pix2 = pixRead("/tmp/lept/pnm/pix1.24.pnm"); /* write pnm */ pixWrite("/tmp/lept/pnm/pix2.24.pnm", pix2, IFF_PNM); pix3 = pixRead("/tmp/lept/pnm/pix2.24.pnm"); regTestComparePix(rp, pix1, pix3); /* 8 */ pixDestroy(&pix3); /* write mem pnm */ pixWriteMemPnm(&data, &size, pix1); pix3 = pixReadMemPnm(data, size); regTestComparePix(rp, pix1, pix3); /* 9 */ lept_free(data); /* write pam */ fp = lept_fopen("/tmp/lept/pnm/pix3.24.pnm", "wb"); pixWriteStreamPam(fp, pix1); lept_fclose(fp); pix4 = pixRead("/tmp/lept/pnm/pix3.24.pnm"); regTestComparePix(rp, pix1, pix4); /* 10 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test pam (32 bpp rgba) read/write */ pix1 = pixRead("test32-alpha.png"); fp = lept_fopen("/tmp/lept/pnm/pix1.32.pnm", "wb"); pixWriteStreamPam(fp, pix1); lept_fclose(fp); pix2 = pixRead("/tmp/lept/pnm/pix1.32.pnm"); pixWrite("/tmp/lept/pnm/pix2.32.pnm", pix2, IFF_PNM); pix3 = pixRead("/tmp/lept/pnm/pix2.32.pnm"); regTestComparePix(rp, pix1, pix3); /* 11 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return regTestCleanup(rp); } leptonica-1.86.0/prog/printimage.c000066400000000000000000000132371506303110300170340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * printimage.c * * This prints an image. It rotates and isotropically scales the image, * as necessary, to get a maximum filling when printing onto an * 8.5 x 11 inch page. * * Syntax: printimage [printer, other lpr args] * * The simplest input would be something like * printimage myfile.jpg * This generates the PostScript file /tmp/print_image.ps, but * does not send it to a printer. * * If you have lpr, you can specify a printer; e.g. * printimage myfile.jpg myprinter * * You can add lpr flags. Two useful ones are: * * to print more than one copy * -#N (prints N copies) * * to print in color (flag is printer-dependent) * -o ColorModel=Color or * -o ColorModel=CMYK * * For example, to make 3 color copies, you might use: * printimage myfile.jpg myprinter -#3 -o ColorModel=Color * * By default, the intermediate PostScript file generated is * level 3 (compressed): * /tmp/print_image.ps * * If your system does not have lpr, it likely has lp. You can run * printimage to make the PostScript file, and then print with lp: * lp -d /tmp/print_image.ps * lp -d -o ColorModel=Color /tmp/print_image.ps * etc. * * *************************************************************** * N.B. If a printer is specified, this program invokes lpr via * "system'. It could pose a security vulnerability if used * as a service in a production environment. Consequently, * this program should only be used for debug and testing. * *************************************************************** */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define USE_COMPRESSED 1 static const l_float32 FILL_FACTOR = 0.95; /* fill factor on 8.5 x 11 page */ int main(int argc, char **argv) { char *filein, *printer, *extra, *fname; char buffer[512]; l_int32 i, w, h, ret, index; l_float32 scale; FILE *fp; PIX *pixs, *pix1; SARRAY *sa; if (argc < 2) return ERROR_INT( " Syntax: printimage [printer, other lpr args]", __func__, 1); filein = argv[1]; printer = (argc > 2) ? argv[2] : NULL; lept_stderr( "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" " Warning: this program should only be used for testing,\n" " and not in a production environment, because of a\n" " potential vulnerability with the 'system' call.\n" "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); setLeptDebugOK(1); (void)lept_rm(NULL, "print_image.ps"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w > h) { pix1 = pixRotate90(pixs, 1); pixGetDimensions(pix1, &w, &h, NULL); } else { pix1 = pixClone(pixs); } scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); fname = genPathname("/tmp", "print_image.ps"); #if USE_COMPRESSED index = 0; pixWriteCompressedToPS(pix1, fname, (l_int32)(300. / scale), 3, &index); #else /* uncompressed, level 1 */ fp = lept_fopen(fname, "wb+"); pixWriteStreamPS(fp, pix1, NULL, 300, scale); lept_fclose(fp); #endif /* USE_COMPRESSED */ /* Optionally print it out */ if (argc > 2) { extra = NULL; if (argc > 3) { /* concatenate the extra args */ sa = sarrayCreate(0); for (i = 3; i < argc; i++) sarrayAddString(sa, argv[i], L_COPY); extra = sarrayToString(sa, 2); sarrayDestroy(&sa); } if (!extra) { snprintf(buffer, sizeof(buffer), "lpr %s -P%s &", fname, printer); ret = callSystemDebug(buffer); } else { snprintf(buffer, sizeof(buffer), "lpr %s -P%s %s &", fname, printer, extra); ret = callSystemDebug(buffer); } lept_free(extra); } lept_free(fname); pixDestroy(&pixs); pixDestroy(&pix1); return 0; } leptonica-1.86.0/prog/printsplitimage.c000066400000000000000000000130101506303110300200750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * printsplitimage.c * * Syntax: printsplitimage filein nx ny [printer] * * nx = number of horizontal tiles * ny = number of vertical tiles * * If printer is not specified, the only action is that the * image is split into a set of tiles, and these are written * out as a set of compressed (level 3) Postscript files. * The images in the PostScript files are scaled to each fill * an 8.5 x 11 inch page, up to the FILLING_FACTOR fraction * in each direction. * * If printer is specified, these are printed on separate pages, * because some printers cannot print multi-page Postscript of images. * * If your system does not have lpr, it likely has lp. You can run * printsplitimage to make the PostScript files, and print them with lp: * lp -d /tmp/lept/split/image0.ps * lp -d /tmp/lept/split/image1.ps * ... * To print in color, see prog/printimage.c. * * *************************************************************** * N.B. If a printer is specified, this program invokes lpr via * "system'. It could pose a security vulnerability if used * as a service in a production environment. Consequently, * this program should only be used for debug and testing. * *************************************************************** */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define USE_COMPRESSED 1 /* fill factor on 8.5 x 11 inch output page */ static const l_float32 FILL_FACTOR = 0.95; int main(int argc, char **argv) { char *filein, *fname, *printer; char buf[512]; l_int32 nx, ny, i, w, h, ws, hs, n, index; l_float32 scale; FILE *fp; PIX *pixs, *pixt, *pixr; PIXA *pixa; SARRAY *sa; if (argc != 4 && argc != 5) return ERROR_INT(" Syntax: printsplitimage filein nx ny [printer]", __func__, 1); filein = argv[1]; nx = atoi(argv[2]); ny = atoi(argv[3]); printer = (argc == 5) ? argv[4] : NULL; lept_stderr( "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" " Warning: this program should only be used for testing,\n" " and not in a production environment, because of a\n" " potential vulnerability with the 'system' call.\n" "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); setLeptDebugOK(1); lept_rmdir("lept/split"); lept_mkdir("lept/split"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixGetDimensions(pixs, &ws, &hs, NULL); if (ny * ws > nx * hs) { pixr = pixRotate90(pixs, 1); pixa = pixaSplitPix(pixr, ny, nx, 0, 0); } else { pixr = pixClone(pixs); pixa = pixaSplitPix(pixr, nx, ny, 0, 0); } pixDestroy(&pixr); n = pixaGetCount(pixa); sa = sarrayCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); snprintf(buf, sizeof(buf), "image%d.ps", i); fname = genPathname("/tmp/lept/split", buf); lept_stderr("fname: %s\n", fname); sarrayAddString(sa, fname, L_INSERT); #if USE_COMPRESSED index = 0; pixWriteCompressedToPS(pixt, fname, (l_int32)(300. / scale), 3, &index); index = 0; /* write each out to a separate file */ #else /* uncompressed, level 1 */ fp = lept_fopen(fname, "wb+"); pixWriteStreamPS(fp, pixt, NULL, 300, scale); lept_fclose(fp); #endif /* USE_COMPRESSED */ pixDestroy(&pixt); } if (argc == 5) { for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); snprintf(buf, sizeof(buf), "lpr -P%s %s &", printer, fname); callSystemDebug(buf); } } sarrayDestroy(&sa); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/printtiff.c000066400000000000000000000074511506303110300167030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * printtiff.c * * Syntax: printtiff filein [printer] * * Prints a multipage tiff file of 1 bpp images to a printer. * If the tiff is at standard fax resolution, it expands the * vertical size by a factor of two before encapsulating in * ccittg4 encoded PostScript. The PostScript file is left in /tmp, * and erased (deleted, removed, unlinked) on the next invocation. * * If the printer is not specified, this just writes the PostScript * file /tmp/print_tiff.ps. * * If your system does not have lpr, it likely has lp. You can run * printtiff to make the PostScript file, and then print with lp: * lp -d /tmp/print_tiff.ps * lp -d -o ColorModel=Color /tmp/print_tiff.ps * etc. * * *************************************************************** * N.B. If a printer is specified, this program invokes lpr via * "system'. It could pose a security vulnerability if used * as a service in a production environment. Consequently, * this program should only be used for debug and testing. * *************************************************************** */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define TEMP_PS "print_tiff.ps" /* in the temp directory */ #define FILL_FACTOR 0.95 int main(int argc, char **argv) { char *filein, *tempfile, *printer; char buf[512]; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: printtiff filein [printer]", __func__, 1); filein = argv[1]; if (argc == 3) printer = argv[2]; lept_stderr( "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" " Warning: this program should only be used for testing,\n" " and not in a production environment, because of a\n" " potential vulnerability with the 'system' call.\n" "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); setLeptDebugOK(1); (void)lept_rm(NULL, TEMP_PS); tempfile = genPathname("/tmp", TEMP_PS); convertTiffMultipageToPS(filein, tempfile, FILL_FACTOR); if (argc == 3) { snprintf(buf, sizeof(buf), "lpr -P%s %s &", printer, tempfile); callSystemDebug(buf); } lept_free(tempfile); return 0; } leptonica-1.86.0/prog/projection_reg.c000066400000000000000000000132131506303110300177000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * projection_reg.c * * Tests projection stats for rows and columns. * Just for interest, a number of different tests are done. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void TestProjection(L_REGPARAMS *rp, PIX *pix); int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Use for input two different images */ pixs = pixRead("projectionstats.jpg"); pix1 = pixConvertTo8(pixs, 0); pixDestroy(&pixs); pixs = pixRead("feyn.tif"); pix2 = pixScaleToGray4(pixs); pixDestroy(&pixs); TestProjection(rp, pix1); TestProjection(rp, pix2); pixDestroy(&pix1); pixDestroy(&pix2); return regTestCleanup(rp); } /* * Test both vertical and horizontal projections on this image. * Rotate the image by 90 degrees for the horizontal projection, * so that the two results should be identical. */ void TestProjection(L_REGPARAMS *rp, PIX *pixs) { NUMA *na1, *na2, *na3, *na4, *na5, *na6; NUMA *na7, *na8, *na9, *na10, *na11, *na12; PIX *pixd, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIX *pix7, *pix8, *pix9, *pix10, *pix11, *pix12; PIXA *pixa; pixColumnStats(pixs, NULL, &na1, &na3, &na5, &na7, &na9, &na11); pixd = pixRotateOrth(pixs, 1); pixRowStats(pixd, NULL, &na2, &na4, &na6, &na8, &na10, &na12); pixDestroy(&pixd); pix1 = gplotSimplePix1(na1, "Mean value"); pix2 = gplotSimplePix1(na2, "Mean value"); pix3 = gplotSimplePix1(na3, "Median value"); pix4 = gplotSimplePix1(na4, "Median value"); pix5 = gplotSimplePix1(na5, "Mode value"); pix6 = gplotSimplePix1(na6, "Mode value"); pix7 = gplotSimplePix1(na7, "Mode count"); pix8 = gplotSimplePix1(na8, "Mode count"); pix9 = gplotSimplePix1(na9, "Variance"); pix10 = gplotSimplePix1(na10, "Variance"); pix11 = gplotSimplePix1(na11, "Square Root Variance"); pix12 = gplotSimplePix1(na12, "Square Root Variance"); /* This is run twice, on two different images */ regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0, 19 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1, 20 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2, 21 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 3, 22 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 4, 23 */ regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 5, 24 */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 6, 25 */ regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 7, 26 */ regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 8, 27 */ regTestWritePixAndCheck(rp, pix10, IFF_PNG); /* 9, 28 */ regTestWritePixAndCheck(rp, pix11, IFF_PNG); /* 10, 29 */ regTestWritePixAndCheck(rp, pix12, IFF_PNG); /* 11, 30 */ /* Compare by pairs */ regTestComparePix(rp, pix1, pix2); /* 12, 31 */ regTestComparePix(rp, pix3, pix4); /* 13, 32 */ regTestComparePix(rp, pix5, pix6); /* 14, 33 */ regTestComparePix(rp, pix7, pix8); /* 15, 34 */ regTestComparePix(rp, pix9, pix10); /* 16, 35 */ regTestComparePix(rp, pix11, pix12); /* 17, 36 */ pixa = pixaCreate(0); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix5, L_INSERT); pixaAddPix(pixa, pix6, L_INSERT); pixaAddPix(pixa, pix7, L_INSERT); pixaAddPix(pixa, pix8, L_INSERT); pixaAddPix(pixa, pix9, L_INSERT); pixaAddPix(pixa, pix10, L_INSERT); pixaAddPix(pixa, pix11, L_INSERT); pixaAddPix(pixa, pix12, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 18, 37 */ pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); numaDestroy(&na7); numaDestroy(&na8); numaDestroy(&na9); numaDestroy(&na10); numaDestroy(&na11); numaDestroy(&na12); return; } leptonica-1.86.0/prog/projectionstats.jpg000066400000000000000000000063631506303110300204700ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā5é"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?é‚îoĨr^%žēT’$—ljãåÍuŠČw Wâe)ŦÎŋî˙č"€7tKŠn4čžVËr:cĄ­e<ŖņŦmcIƒŒgwķ5šãš  ėmüíAU˜í*:}Ms~4ē¸ąņ‚Ö_.5‰ CuĪ­tVō2]é´æjŽ4Ņ{aũǧ  p8Ësü¨‰•û‚VRØ8?"õüŠNЍ…;¤éß`˙ ĐđÕčŠImŠgˁüøWNŸ78ę;Đ- ę7—ÖÉe žYā€==+§×¤ko ĩÔ`‰ūĐĒ äƒÚž°vŦ n*GQV|coåx:2}úĐ3áũN{ Ë9i8ĀĮ§ø×FX“Ô×)ᘰfrsķãôÕŠāPMŸ%°qÁ§ĪsM—˜_ũĶJO<ddŦ1āķ´T–ˆ%‰žvŽi‘ŸÜĮūčūUwG+įÁ¸Ž08c€x  :ŊĖžōÜ6WaåĮœc#ŒūF¸‹zöæRéĩw̜}sZŪ3Šū÷ÄĶų[”#ĸ–E˙ÕŅlŖĩĩŽ3;ķŖ$Đ9câi’eK„ §ę0Etļˇ pZBûƒF ķŽ9Ŧßč‰d–÷ņ.ØįU ¸ÆįĐ{RødģŲ"ļH?īé`‚4ĶžęáØB œއ֏ÍCÅ;īdŠÎŲ<”<ģąmߕoøĘķėūļ´ƒ#8ôË…sŪĶã¸˙I¸Q(9 ŽhmŧSs“ģ‡ôÚ¤›ŽĻOĘ:~5ĩhËwÚ|ƒ+4Œã;°•s:lkŦ ŦJ ~uˇ§Hč8į ?‰ >Ô-[DפŒœy3uÁ!éúę-'ķ FĢ ƒíVü{¤ũŗM´AKÅ´HORŧđŽcÃ×ÁŖ‡9BN§ų4ÖZņy{ƒüÅ\ņĐĪ‚ÂúKgÛ?úT8ô<~"­xĐO˙kÉ;)„Í@?Jä|2PA:–äIũtĢ"ლā-tûĢđ~ÍmŊr@Ŋũč¸Ķõ3į“taķ+čhŊ™˙u'û§ųTĘš5ËčúģĪŲ'lÍ´€ßŪgŌēËc‰7gæĮ×WzĒ*g:>J¸FN3Šāĩ$’m~bÜČf<įļî?Jô ,Ãe¸#ËPŲx ą*FáÉ-ŗeņŒrr'žŊ‡Äw°Åu$PFøTV tļ>(žŪŽH ÎŖ‡ķ1ĪĶÖüA•G…lá'į3ÆĀûaXž`c„g=ô&Žvöōû^Ôy 8ĀFn“]^j֑Å`ãnOŋZ§ã×?j˛\Ë ßøûŠO H˛X&Ü,ųüjߏ-Y#ŗģ'åÚ~o\l–Ō3ÛĘËëŌ€=Ä÷‰‚EĢšfČ?G_đŽSÂãl’°ėyüĢ.VŋÔåS,¯3Āfá~•ŅékX|ŽFâI8ü(Ģû zŪ‘q§9ÃÁëüÅyŦ‰uŖjŒŽ¸•H#¨Ü1˙ׯC‚smtz)ĀükCYŅm|Mb[ˇˆ—+‘ßúP/aô%â8˙g9ÅhÀW=sųŠá/-/ô=D#“ U9ŨĮ¯Đ×QĨjŪĮÆXāũEoL¸“wjĘÛīZNwŠŦ­Ūôz"ŦĒvōHŽ3Äį:äã Oū:+´^0Šâ|NsŦ\v)ĪüPIĨ|ē}ļ:yjJĐ9VF—jl-ÔÜÄF Øč*đŊ€įũ&,cûâ€&EÄîF>č=>ĩ$RîGæj8š9Cmã§#<ԒIĩ°ˆųjpįë@öꚎ—-›ā‰ īŠō{ëwĐ|I5ģüĻ)H;{Š˙õŠîáŋY%U î"šß›[ÖKôtk‚7õëĪō  [‘*A(ÁS#ô­/ÉŋĀ(p9š?ë\o†¯I”Z3ąXÄ¯ø×WâÉ đ `sū’ƒųĐ=áĻņ6ā–<úō+̊Î-FĘę YLMÃĄ ū•ĘxdƒiĊ[yųAäs]ÎŊkĨX\“q¸tdHÁËdŒr(€Úëĸ1ü´gw"쨜ėZāė–KŨUĻ œŗH͎ü˙w0¯€!‰•DģöŒļ9­0.íļį9ķíT#‰GŨĘĩt6Tžcü?Ō€8Æbņ~¤q÷‚°˙žV´ôË[YŦ-|ËXYŒ#$ÆšéQ|HŒ˙ÂLÎ<ČūŸũjw‡Ž#m: H›Ņ $ÅiĨ¤Qgʂ4ÕŸ„/Aũiâh‚’]Ī<Ôk$mrė‘°.GâhCÄ6oŠx!öa¤ˇ†ÔŨøŸH‹^Đ%žŒ"][F͸õ sÛčkĖô{‘oŠÛ…Y$Ž}+ŊŊņ-•—‡īmEÂ4ŗ!EDäāņũMpl&MZÜD7Ü>™ DËÆ[ÔVFG­kš‹o§zÉÅi†Ũ0SÜ˙ZãŧGūܸĀ8øčĸŠÅcLŖ°9ÆriRY˛?züŸī( §ÂSJččō37šÍCãYe Œ,Ž[ĮōƒüTQ@ę\\g"âQĪ÷1䑉2H΃˜š(  O øžĪü˛<ß5Ųø°đ2į7PŸG,° Ã4‘g“åš^ŪÔõO´iŪI uflŸĖŅEu}”öÁcNY =ke ( OõIė\ŌÜĢĀF3´QEaüGŒ›kƒ÷ļ"ãđjâ#’H€1ČëœôcE2Íqˇ?i›ūû5ĩáš’mîΆ?y‰ĸŠéėæhÎW¨sĪãZ×"=kJ’Ōö$t āã•ĮL( )žŲmĩO!¸uÃᐠwVė—ø3×ÜQEmŧjz]Å­ŌoB€ƒÜrOå76ëÔ°ŠĘ¯BzŠ(  ōœ¸ë쀒q]n§ÃkäÉy$™Žhĸ€:>ōöVN}…P˙Ųleptonica-1.86.0/prog/projective_reg.c000066400000000000000000000210611506303110300176760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * projective_reg.c * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); /* Sample values. * 1-3: invertability tests * 4: comparison between sampling and sequential * 5: test with large distortion */ static const l_int32 x1[] = { 300, 300, 300, 300, 32}; static const l_int32 y1[] = {1200, 1200, 1250, 1250, 934}; static const l_int32 x2[] = {1200, 1200, 1125, 1300, 487}; static const l_int32 y2[] = {1100, 1100, 1100, 1250, 934}; static const l_int32 x3[] = { 200, 200, 200, 250, 32}; static const l_int32 y3[] = { 200, 200, 200, 300, 67}; static const l_int32 x4[] = {1200, 1200, 1300, 1250, 332}; static const l_int32 y4[] = { 400, 200, 200, 300, 57}; static const l_int32 xp1[] = { 300, 300, 1150, 300, 32}; static const l_int32 yp1[] = {1200, 1400, 1150, 1350, 934}; static const l_int32 xp2[] = {1100, 1400, 320, 1300, 487}; static const l_int32 yp2[] = {1000, 1500, 1300, 1200, 904}; static const l_int32 xp3[] = { 250, 200, 1310, 300, 61}; static const l_int32 yp3[] = { 200, 300, 250, 325, 83}; static const l_int32 xp4[] = {1250, 1200, 240, 1250, 412}; static const l_int32 yp4[] = { 300, 300, 250, 350, 83}; #define ADDED_BORDER_PIXELS 250 #define ALL 1 int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixsc, *pixb, *pixg, *pixc, *pixcs, *pix1, *pix2, *pixd; PIXA *pixa; PTA *ptas, *ptad; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); pixsc = pixScale(pixs, 0.3, 0.3); #if ALL /* Test invertability of sampling */ lept_stderr("Test invertability of sampling\n"); pixa = pixaCreate(0); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixsc, ADDED_BORDER_PIXELS, 0); MakePtas(i, &ptas, &ptad); pix1 = pixProjectiveSampledPta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0,3,6 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixProjectiveSampledPta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1,4,7 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS); pixXor(pixd, pixd, pixsc); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2,5,8 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixsc); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of interpolation on grayscale */ lept_stderr("Test invertability of grayscale interpolation\n"); pixa = pixaCreate(0); pixg = pixScaleToGray(pixs, 0.2); for (i = 0; i < 2; i++) { pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS / 2, 255); MakePtas(i, &ptas, &ptad); pix1 = pixProjectivePta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 10,13 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixProjectivePta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 11,14 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS / 2); pixXor(pixd, pixd, pixg); pixInvert(pixd, pixd); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 12,15 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 16 */ pixDisplayWithTitle(pix1, 300, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixg); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of interpolation on color */ lept_stderr("Test invertability of color interpolation\n"); pixa = pixaCreate(0); pixc = pixRead("test24.jpg"); pixcs = pixScale(pixc, 0.3, 0.3); for (i = 0; i < 5; i++) { if (i == 2) continue; pixb = pixAddBorder(pixcs, ADDED_BORDER_PIXELS / 2, 0xffffff00); MakePtas(i, &ptas, &ptad); pix1 = pixProjectivePta(pixb, ptad, ptas, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 17,20,23,26 */ pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixProjectivePta(pix1, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 18,21,24,27 */ pixaAddPix(pixa, pix2, L_INSERT); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS / 2); pixXor(pixd, pixd, pixcs); pixInvert(pixd, pixd); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 19,22,25,28 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixb); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 29 */ pixDisplayWithTitle(pix1, 600, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixc); pixDestroy(&pixcs); pixaDestroy(&pixa); #endif #if ALL /* Comparison between sampling and interpolated */ lept_stderr("Compare sampling with interpolated\n"); MakePtas(3, &ptas, &ptad); pixa = pixaCreate(0); pixg = pixScaleToGray(pixs, 0.2); /* Use sampled transform */ pix1 = pixProjectiveSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 30 */ pixaAddPix(pixa, pix1, L_INSERT); /* Use interpolated transforms */ pix2 = pixProjectivePta(pixg, ptas, ptad, L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 31 */ pixaAddPix(pixa, pix2, L_COPY); /* Compare the results */ pixXor(pix2, pix2, pix1); pixInvert(pix2, pix2); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 32 */ pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 33 */ pixDisplayWithTitle(pix1, 900, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixg); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif pixDestroy(&pixs); return regTestCleanup(rp); } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { *pptas = ptaCreate(4); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); ptaAddPt(*pptas, x4[i], y4[i]); *pptad = ptaCreate(4); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); ptaAddPt(*pptad, xp4[i], yp4[i]); return; } leptonica-1.86.0/prog/ps2jpeg000066400000000000000000000014031506303110300160160ustar00rootroot00000000000000#!/bin/bash # ps2jpeg # # Rasterizes a postscript file, saving as a set of RGB images # # input: PostScript file # root name of output files # output: 24 bpp RGB jpeg files for each page # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outjpgroot" exit -1 fi inpsfile=$1 outjpgroot=$2 # (need mysterious "primer") # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | /usr/local/bin/gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r300x300 -q - ${inpsfile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.86.0/prog/ps2png000066400000000000000000000016501506303110300156610ustar00rootroot00000000000000#!/bin/bash # ps2png # # Rasterizes a postscript file, saving as a set of bitmaps # # input: PostScript file # root name of output files # output: png binary files for each page # # Restriction: the input PostScript file must be binary # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppsfile=${baseroot}.$$_.ps tmppsroot=${tmppsfile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppsroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpsfile $tmppsfile # need mysterious "primer" echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppsfile} leptonica-1.86.0/prog/ps2png-binary000066400000000000000000000014771506303110300171520ustar00rootroot00000000000000#!/bin/bash # ps2png-binary # # Rasterizes a postscript file, saving as a set of binary png images # # input: PostScript file # root name of output files # output: png binary files for each page # # Restriction: the input PostScript file must be binary # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpsfile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.86.0/prog/ps2png-color000066400000000000000000000014051506303110300167730ustar00rootroot00000000000000#!/bin/bash # ps2png-color # # Rasterizes a postscript file, saving as a set of 24 bpp RGB png images # # input: PostScript file # root name of output files # output: 24 bpp RGB png files for each page # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpsfile} # output fixed image size echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.86.0/prog/ps2png-gray000066400000000000000000000013751506303110300166250ustar00rootroot00000000000000#!/bin/bash # ps2png-gray # # Rasterizes a postscript file, saving as a set of 8 bpp png images # # input: PostScript file # root name of output files # output: 8 bpp png files for each page # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpsfile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.86.0/prog/ps2tiff000066400000000000000000000022511506303110300160230ustar00rootroot00000000000000#!/bin/bash # ps2tiff # # Rasterizes a postscript file, saving as a set of g4 compressed # tiff images # # input: PostScript file # root name of output files # output: ccitt-g4 compressed tiff binary files for each page # # Restriction: the input PostScript file must be binary # # N.B. Requires ghostscript scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outtifroot" exit -1 fi inpsfile=$1 outtifroot=$2 # assert (input postscript filename ends in .ps) if test ${inpsfile##*.} != ps then echo $scriptname ": " $inpsfile "does not end in .ps" exit -1 fi # output image size depending on resolution #echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -r300x300 -q - ${inpsfile} echo "0 neg 0 neg" translate | ~/pckg/gs/ghostscript-8.53/bin/gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -r300x300 -q - ${inpsfile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -g2550x3300 -r300x300 -q - ${inpsfile} # use this to output to a single multipage tiff file #tiffcp -c g4 ${outtifroot}*.tif ${outtifroot}.tif leptonica-1.86.0/prog/psio_reg.c000066400000000000000000000255401506303110300165040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * psio_reg.c * * Tests writing of images in PS, with arbitrary scaling and * translation, in the following formats: * * - uncompressed * - DCT compressed (jpeg for 8 bpp grayscale and RGB) * - CCITT-G4 compressed (g4 fax compression for 1 bpp) * - Flate compressed (gzip compression) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *WeaselNames[] = {"weasel2.4c.png", "weasel2.4g.png", "weasel2.png", "weasel4.11c.png", "weasel4.8g.png", "weasel4.16g.png", "weasel8.16g.png", "weasel8.149g.png", "weasel8.240c.png", "weasel8.png", "weasel32.png"}; int main(int argc, char **argv) { l_int32 i, w, h; l_float32 factor, scale; BOX *box; FILE *fp1; PIX *pixs, *pixt; PIXA *pixa; SARRAY *sa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "psio_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "psio_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "psio_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; #if !USE_PSIO lept_stderr("psio writing is not enabled\n" "See environ.h: #define USE_PSIO 1\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ factor = 0.95; /* Uncompressed PS with scaling but centered on the page */ pixs = pixRead("feyn-fract.tif"); pixGetDimensions(pixs, &w, &h, NULL); scale = L_MIN(factor * 2550 / w, factor * 3300 / h); fp1 = lept_fopen("/tmp/lept/regout/psio0.ps", "wb+"); pixWriteStreamPS(fp1, pixs, NULL, 300, scale); lept_fclose(fp1); regTestCheckFile(rp, "/tmp/lept/regout/psio0.ps"); /* 0 */ pixDestroy(&pixs); /* Uncompressed PS with scaling, with LL corner at (1500, 1500) mils */ pixs = pixRead("weasel4.11c.png"); pixGetDimensions(pixs, &w, &h, NULL); scale = L_MIN(factor * 2550 / w, factor * 3300 / h); box = boxCreate(1500, 1500, (l_int32)(1000 * scale * w / 300), (l_int32)(1000 * scale * h / 300)); fp1 = lept_fopen("/tmp/lept/regout/psio1.ps", "wb+"); pixWriteStreamPS(fp1, pixs, box, 300, 1.0); lept_fclose(fp1); regTestCheckFile(rp, "/tmp/lept/regout/psio1.ps"); /* 1 */ boxDestroy(&box); pixDestroy(&pixs); /* DCT compressed PS with LL corner at (300, 1000) pixels */ pixs = pixRead("marge.jpg"); pixt = pixConvertTo32(pixs); pixWrite("/tmp/lept/regout/psio2.jpg", pixt, IFF_JFIF_JPEG); convertJpegToPS("/tmp/lept/regout/psio2.jpg", "/tmp/lept/regout/psio3.ps", "w", 300, 1000, 0, 4.0, 1, 1); regTestCheckFile(rp, "/tmp/lept/regout/psio2.jpg"); /* 2 */ regTestCheckFile(rp, "/tmp/lept/regout/psio3.ps"); /* 3 */ pixDestroy(&pixt); pixDestroy(&pixs); /* For each page, apply tiff g4 image first; then jpeg or png over it */ convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio4.ps", "w", 0, 0, 0, 1.0, 1, 1, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 500, 100, 300, 2.0, 1, 0); convertFlateToPS("weasel4.11c.png", "/tmp/lept/regout/psio4.ps", "a", 300, 400, 300, 6.0, 1, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 100, 800, 300, 1.5, 1, 1); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio4.ps", "a", 0, 0, 0, 1.0, 2, 1, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 1000, 700, 300, 2.0, 2, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 100, 200, 300, 2.0, 2, 1); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio4.ps", "a", 0, 0, 0, 1.0, 3, 1, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 200, 200, 300, 2.0, 3, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio4.ps", "a", 200, 900, 300, 2.0, 3, 1); regTestCheckFile(rp, "/tmp/lept/regout/psio4.ps"); /* 4 */ /* Now apply jpeg first; then paint through a g4 mask. * For gv, the first image with a b.b. determines the * window size for the canvas, so we put down the largest * image first. If we had rendered a small image first, * gv and evince will not show the entire page. However, after * conversion to pdf, everything works fine, regardless of the * order in which images are placed into the PS. That is * because the pdf interpreter is robust to bad hints, ignoring * the page hints and computing the bounding box from the * set of images rendered on the page. * * Concatenate several pages, with colormapped png, color * jpeg and tiffg4 images (with the g4 image acting as a mask * that we're painting black through. If the text layer * is painted first, the following images occlude it; otherwise, * the images remain in the background of the text. */ pixs = pixRead("wyom.jpg"); pixt = pixScaleToSize(pixs, 2528, 3300); pixWrite("/tmp/lept/regout/psio5.jpg", pixt, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixt); convertJpegToPS("/tmp/lept/regout/psio5.jpg", "/tmp/lept/regout/psio5.ps", "w", 0, 0, 300, 1.0, 1, 0); convertFlateToPS("weasel8.240c.png", "/tmp/lept/regout/psio5.ps", "a", 100, 100, 300, 5.0, 1, 0); convertFlateToPS("weasel8.149g.png", "/tmp/lept/regout/psio5.ps", "a", 200, 300, 300, 5.0, 1, 0); convertFlateToPS("weasel4.11c.png", "/tmp/lept/regout/psio5.ps", "a", 300, 500, 300, 5.0, 1, 0); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio5.ps", "a", 0, 0, 0, 1.0, 1, 1, 1); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 500, 100, 300, 2.0, 2, 0); convertFlateToPS("weasel4.11c.png", "/tmp/lept/regout/psio5.ps", "a", 300, 400, 300, 6.0, 2, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 100, 800, 300, 1.5, 2, 0); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio5.ps", "a", 0, 0, 0, 1.0, 2, 1, 1); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 500, 100, 300, 2.0, 3, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 100, 800, 300, 2.0, 3, 0); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio5.ps", "a", 0, 0, 0, 1.0, 3, 1, 1); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 700, 700, 300, 2.0, 4, 0); convertFlateToPS("weasel8.149g.png", "/tmp/lept/regout/psio5.ps", "a", 400, 400, 300, 5.0, 4, 0); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio5.ps", "a", 0, 0, 0, 1.0, 4, 1, 0); convertFlateToPS("weasel8.240c.png", "/tmp/lept/regout/psio5.ps", "a", 100, 220, 300, 5.0, 4, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 100, 200, 300, 2.0, 4, 1); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 200, 200, 300, 1.5, 5, 0); convertFlateToPS("weasel8.240c.png", "/tmp/lept/regout/psio5.ps", "a", 140, 80, 300, 7.0, 5, 0); convertG4ToPS("feyn.tif", "/tmp/lept/regout/psio5.ps", "a", 0, 0, 0, 1.0, 5, 1, 0); convertFlateToPS("weasel8.149g.png", "/tmp/lept/regout/psio5.ps", "a", 280, 310, 300, 5.0, 4, 0); convertJpegToPS("marge.jpg", "/tmp/lept/regout/psio5.ps", "a", 200, 900, 300, 2.0, 5, 1); regTestCheckFile(rp, "/tmp/lept/regout/psio5.ps"); /* 5 */ /* Generation using segmentation masks */ convertSegmentedPagesToPS(".", "lion-page", 10, ".", "lion-mask", 10, 0, 100, 2.0, 0.8, 190, "/tmp/lept/regout/psio6.ps"); regTestCheckFile(rp, "/tmp/lept/regout/psio6.ps"); /* 6 */ /* PS generation for embeddding */ convertJpegToPSEmbed("tetons.jpg", "/tmp/lept/regout/psio7.ps"); regTestCheckFile(rp, "/tmp/lept/regout/psio7.ps"); /* 7 */ convertG4ToPSEmbed("feyn-fract.tif", "/tmp/lept/regout/psio8.ps"); regTestCheckFile(rp, "/tmp/lept/regout/psio8.ps"); /* 8 */ convertFlateToPSEmbed("weasel8.240c.png", "/tmp/lept/regout/psio9.ps"); regTestCheckFile(rp, "/tmp/lept/regout/psio9.ps"); /* 9 */ /* Writing compressed from a pixa */ sa = sarrayCreate(0); for (i = 0; i < 11; i++) sarrayAddString(sa, WeaselNames[i], L_COPY); pixa = pixaReadFilesSA(sa); pixaWriteCompressedToPS(pixa, "/tmp/lept/regout/psio10.ps", 0, 3); regTestCheckFile(rp, "/tmp/lept/regout/psio10.ps"); /* 10 */ pixaDestroy(&pixa); sarrayDestroy(&sa); return regTestCleanup(rp); } leptonica-1.86.0/prog/psioseg_reg.c000066400000000000000000000160041506303110300171760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * psioseg_reg.c * * This tests the PostScript output for images with mixed * text and images, coming from source of different depths, * with and without colormaps. * * Both convertFilesFittedToPS() and convertSegmentedPagesToPS() * generate a compressed PostScript file from a subset of images in * a directory. However, the latter function can also accept 1 bpp * masks that delineate image (as opposed to text) regions in * the corresponding page image file. Then, for page images that * are not 1 bpp, it generates mixed raster PostScript with * g4 encoding for the text and jpeg ("DCT") encoding for the * maining image parts. * * N.B. Although not required for 'success' on the regression test, * this program uses ps2pdf to generate the pdf output. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char buf[512]; char *psname, *pdfname; l_int32 w, h, wc, hc, ret; l_float32 scalefactor; PIX *pixs, *pixc, *pixht, *pixtxt, *pixmfull; PIX *pix4c, *pix8c, *pix8g, *pix32, *pixcs, *pixcs2; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "psioseg_reg"); exit(77); #endif #if !defined(HAVE_LIBJPEG) L_ERROR("This test requires libjpeg to run.\n", "psioseg_reg"); exit(77); #endif #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "psioseg_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; #if !USE_PSIO lept_stderr("psio writing is not enabled\n" "See environ.h: #define USE_PSIO 1\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ /* Source for generating images */ pixs = pixRead("pageseg2.tif"); /* 1 bpp */ pixc = pixRead("tetons.jpg"); /* 32 bpp */ /* Get a halftone segmentation mask for pixs */ pixGetRegionsBinary(pixs, &pixht, NULL, NULL, 0); pixtxt = pixSubtract(NULL, pixs, pixht); /* Construct a 32 bpp image in full page size, along with * a mask that can be used to render it. */ pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixc, &wc, NULL, NULL); scalefactor = (l_float32)w / (l_float32)wc; pixcs = pixScale(pixc, scalefactor, scalefactor); pixGetDimensions(pixcs, &wc, &hc, NULL); pixcs2 = pixCreate(w, h, 32); pixRasterop(pixcs2, 0, 0, w, hc, PIX_SRC, pixcs, 0, 0); pixRasterop(pixcs2, 0, hc, w, hc, PIX_SRC, pixcs, 0, 0); regTestWritePixAndCheck(rp, pixcs2, IFF_JFIF_JPEG); /* 0 */ pixmfull = pixCreate(w, h, 1); pixSetAll(pixmfull); /* use as mask to render the color image */ /* Now make a 32 bpp input image, taking text parts from the * page image and image parts from pixcs2. */ pix32 = pixConvertTo32(pixtxt); pixCombineMasked(pix32, pixcs2, pixht); regTestWritePixAndCheck(rp, pix32, IFF_JFIF_JPEG); /* 1 */ /* Make an 8 bpp gray version */ pix8g = pixConvertRGBToLuminance(pix32); regTestWritePixAndCheck(rp, pix8g, IFF_JFIF_JPEG); /* 2 */ /* Make an 8 bpp colormapped version */ pix8c = pixOctreeColorQuant(pix32, 240, 0); regTestWritePixAndCheck(rp, pix8c, IFF_PNG); /* 3 */ /* Make a 4 bpp colormapped version */ pix4c = pixOctreeQuantNumColors(pix32, 16, 4); regTestWritePixAndCheck(rp, pix4c, IFF_PNG); /* 4 */ /* Write out the files to be imaged */ lept_mkdir("lept/psio"); pixWrite("/tmp/lept/psio/image_001.tif", pixs, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_002.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_003.tif", pixtxt, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_004.jpg", pixcs2, IFF_JFIF_JPEG); pixWrite("/tmp/lept/psio/mask_004.tif", pixmfull, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_005.jpg", pix32, IFF_JFIF_JPEG); pixWrite("/tmp/lept/psio/mask_005.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_006.jpg", pix8g, IFF_JFIF_JPEG); pixWrite("/tmp/lept/psio/mask_006.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_007.png", pix8c, IFF_PNG); pixWrite("/tmp/lept/psio/mask_007.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/lept/psio/image_008.png", pix4c, IFF_PNG); pixWrite("/tmp/lept/psio/mask_008.tif", pixht, IFF_TIFF_G4); pixDestroy(&pixs); pixDestroy(&pixc); pixDestroy(&pixht); pixDestroy(&pixtxt); pixDestroy(&pixcs); pixDestroy(&pixcs2); pixDestroy(&pixmfull); pixDestroy(&pix32); pixDestroy(&pix8g); pixDestroy(&pix8c); pixDestroy(&pix4c); /* Generate the 8 page ps */ convertSegmentedPagesToPS("/tmp/lept/psio", "image_", 6, "/tmp/lept/psio", "mask_", 5, 0, 10, 2.0, 0.15, 190, "/tmp/lept/regout/psioseg.5.ps"); regTestCheckFile(rp, "/tmp/lept/regout/psioseg.5.ps"); /* 5 */ L_INFO("Output ps: /tmp/lept/regout/psioseg.5.ps\n", rp->testname); /* For convenience, also generate a pdf of this, using ps2pdf */ psname = genPathname("/tmp/lept/regout", "psioseg.5.ps"); pdfname = genPathname("/tmp/lept/regout", "psioseg.5.pdf"); snprintf(buf, sizeof(buf), "ps2pdf %s %s", psname, pdfname); ret = callSystemDebug(buf); /* ps2pdf */ lept_free(psname); lept_free(pdfname); if (!ret) L_INFO("Output pdf: /tmp/lept/regout/psioseg.5.pdf\n", rp->testname); else L_WARNING("ps2pdf failed to generate pdf\n", rp->testname); return regTestCleanup(rp); } leptonica-1.86.0/prog/pta_reg.c000066400000000000000000000232251506303110300163140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * pta_reg.c * * This tests several ptaa functions, including: * - ptaaGetBoundaryPixels() * - pixRenderRandomCmapPtaa() * - pixDisplayPtaa() * * Also tests these pta functions: * - pixRenderPtaArb() * - ptaRotate() * - ptaSort() * - ptaSort2d() * - ptaEqual() * - ptaPolygonIsConvex() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static PIX *PtaDisplayRotate(PIX *pixs, l_float32 xc, l_float32 yc); int main(int argc, char **argv) { l_int32 i, nbox, npta, fgcount, bgcount, count, w, h, x, y, same, n; l_int32 convex1, convex2, convex3; l_float32 fx, fy, ang; BOXA *boxa; PIX *pixs, *pixfg, *pixbg, *pixc, *pixb, *pixd; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PTA *pta, *pta1, *pta2, *pta3; PTAA *ptaafg, *ptaabg; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-fract.tif"); boxa = pixConnComp(pixs, NULL, 8); nbox = boxaGetCount(boxa); regTestCompareValues(rp, nbox, 464, 0); /* 0 */ /* Get fg and bg boundary pixels */ pixfg = pixMorphSequence(pixs, "e3.3", 0); pixXor(pixfg, pixfg, pixs); pixCountPixels(pixfg, &fgcount, NULL); regTestCompareValues(rp, fgcount, 58764, 0); /* 1 */ pixbg = pixMorphSequence(pixs, "d3.3", 0); pixXor(pixbg, pixbg, pixs); pixCountPixels(pixbg, &bgcount, NULL); regTestCompareValues(rp, bgcount, 60335, 0); /* 2 */ /* Get ptaa of fg pixels */ ptaafg = ptaaGetBoundaryPixels(pixs, L_BOUNDARY_FG, 8, NULL, NULL); npta = ptaaGetCount(ptaafg); regTestCompareValues(rp, npta, nbox, 0); /* 3 */ count = 0; for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaafg, i, L_CLONE); count += ptaGetCount(pta); ptaDestroy(&pta); } regTestCompareValues(rp, fgcount, count, 0); /* 4 */ /* Get ptaa of bg pixels. Note that the number of bg pts * is, in general, larger than the number of bg boundary pixels, * because bg boundary pixels are shared by two c.c. that * are 1 pixel apart. */ ptaabg = ptaaGetBoundaryPixels(pixs, L_BOUNDARY_BG, 8, NULL, NULL); npta = ptaaGetCount(ptaabg); regTestCompareValues(rp, npta, nbox, 0); /* 5 */ count = 0; for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaabg, i, L_CLONE); count += ptaGetCount(pta); ptaDestroy(&pta); } regTestCompareValues(rp, count, 60602, 0); /* 6 */ /* Render the fg boundary pixels on top of pixs. */ pixa = pixaCreate(4); pixc = pixRenderRandomCmapPtaa(pixs, ptaafg, 0, 0, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixc, L_INSERT); /* Render the bg boundary pixels on top of pixs. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaabg, 0, 0, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 8 */ pixaAddPix(pixa, pixc, L_INSERT); pixClearAll(pixs); /* Render the fg boundary pixels alone. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaafg, 0, 0, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 9 */ pixaAddPix(pixa, pixc, L_INSERT); /* Verify that the fg pixels are the same set as we * originally started with. */ pixb = pixConvertTo1(pixc, 255); regTestComparePix(rp, pixb, pixfg); /* 10 */ pixDestroy(&pixb); /* Render the bg boundary pixels alone. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaabg, 0, 0, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixc, L_INSERT); /* Verify that the bg pixels are the same set as we * originally started with. */ pixb = pixConvertTo1(pixc, 255); regTestComparePix(rp, pixb, pixbg); /* 12 */ pixDestroy(&pixb); pixd = pixaDisplayTiledInColumns(pixa, 1, 1.0, 30, 2); pixDisplayWithTitle(pixd, 0, 0, NULL, rp->display); ptaaDestroy(&ptaafg); ptaaDestroy(&ptaabg); pixDestroy(&pixs); pixDestroy(&pixfg); pixDestroy(&pixbg); pixDestroy(&pixd); pixaDestroy(&pixa); boxaDestroy(&boxa); /* Test rotation */ pix1 = pixRead("feyn-word.tif"); pix2 = pixAddBorderGeneral(pix1, 200, 200, 200, 200, 0); pixa = pixaCreate(0); pix3 = PtaDisplayRotate(pix2, 0, 0); pixaAddPix(pixa, pix3, L_INSERT); pix3 = PtaDisplayRotate(pix2, 500, 100); pixaAddPix(pixa, pix3, L_INSERT); pix3 = PtaDisplayRotate(pix2, 100, 410); pixaAddPix(pixa, pix3, L_INSERT); pix3 = PtaDisplayRotate(pix2, 500, 410); pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 13 */ pixDisplayWithTitle(pix4, 450, 0, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix4); pixaDestroy(&pixa); /* Test pta sort and pta equality */ pix1 = pixRead("feyn-word.tif"); pixGetDimensions(pix1, &w, &h, NULL); pta1 = ptaGetPixelsFromPix(pix1, NULL); ptaGetIPt(pta1, 0, &x, &y); /* add copy of first point */ ptaAddPt(pta1, x, y); pta2 = ptaCyclicPerm(pta1, x, y); /* first/last points must be the same */ ptaEqual(pta1, pta2, &same); regTestCompareValues(rp, same, 1, 0.0); /* 14 */ pta3 = ptaReverse(pta2, 1); ptaEqual(pta1, pta3, &same); regTestCompareValues(rp, same, 1, 0.0); /* 15 */ pixDestroy(&pix1); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); /* Test if polygon is a convex hull. Make sure the * pta gives a clockwise traversal of the boundary. */ pta1 = ptaCreate(0); pta2 = ptaCreate(0); pta3 = ptaCreate(0); n = 30; for (i = 0; i < n; i++) { ang = -2.0 * 3.14159265 * i / (l_float32)n; fx = 50.0 + 27.3 * cos(ang); fy = 50.0 + 27.3 * sin(ang); ptaAddPt(pta1, fx, fy); if (i == n / 2) fx -= 5.0; /* pull out */ ptaAddPt(pta2, fx, fy); if (i == n / 2) fx += 10.0; /* push in */ ptaAddPt(pta3, fx, fy); } ptaPolygonIsConvex(pta1, &convex1); ptaPolygonIsConvex(pta2, &convex2); ptaPolygonIsConvex(pta3, &convex3); regTestCompareValues(rp, 1, convex1, 0.0); /* 16 */ regTestCompareValues(rp, 0, convex2, 0.0); /* 17 */ regTestCompareValues(rp, 0, convex3, 0.0); /* 18 */ if (rp->display) lept_stderr("convex1 = %s, convex2 = %s, convex3 = %s\n", (convex1 == 0) ? "no" : "yes", (convex2 == 0) ? "no" : "yes", (convex3 == 0) ? "no" : "yes"); pixa = pixaCreate(3); pix1 = pixCreate(100, 100, 1); pixRenderPta(pix1, pta1, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixCreate(100, 100, 1); pixRenderPta(pix1, pta2, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixCreate(100, 100, 1); pixRenderPta(pix1, pta3, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixaDisplayTiledInColumns(pixa, 3, 5.0, 30, 3); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 19 */ pixDisplayWithTitle(pix2, 450, 800, NULL, rp->display); pixDestroy(&pix2); pixaDestroy(&pixa); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); return regTestCleanup(rp); } static PIX * PtaDisplayRotate(PIX *pixs, l_float32 xc, l_float32 yc) { l_int32 i, w, h; PIX *pix1, *pix2; PTA *pta1, *pta2, *pta3, *pta4; PTAA *ptaa; /* Save rotated sets of pixels */ pta1 = ptaGetPixelsFromPix(pixs, NULL); ptaa = ptaaCreate(0); for (i = 0; i < 9; i++) { pta2 = ptaRotate(pta1, xc, yc, -0.8 + 0.2 * i); ptaaAddPta(ptaa, pta2, L_INSERT); } ptaDestroy(&pta1); /* Render them */ pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixCreate(w, h, 32); pixSetAll(pix1); pta3 = generatePtaFilledCircle(4); pta4 = ptaTranslate(pta3, xc, yc); pixRenderPtaArb(pix1, pta4, 255, 0, 0); /* circle at rotation center */ pix2 = pixDisplayPtaa(pix1, ptaa); /* rotated sets */ pixDestroy(&pix1); ptaDestroy(&pta3); ptaDestroy(&pta4); ptaaDestroy(&ptaa); return pix2; } leptonica-1.86.0/prog/ptra1_reg.c000066400000000000000000000413421506303110300165570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ptra1_reg.c * * Testing basic ptra operations */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void MakePtrasFromPixa(PIXA *pixa, L_PTRA **ppapix, L_PTRA **ppabox, l_int32 copyflag); static PIXA *ReconstructPixa1(L_REGPARAMS *rp, L_PTRA *papix, L_PTRA *pabox); static PIXA *ReconstructPixa2(L_REGPARAMS *rp, L_PTRA *papix, L_PTRA *pabox); static PIX *SaveResult(PIXA *pixac, PIXA **ppixa, l_int32 w, l_int32 h, l_int32 newline); int main(int argc, char **argv) { l_int32 i, n, w, h, nactual, imax; BOX *box; BOXA *boxa; PIX *pixs, *pixd, *pix; PIXA *pixas, *pixa1, *pixa2, *pixac1, *pixac2; L_PTRA *papix, *pabox, *papix2, *pabox2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixac1 = pixaCreate(0); pixac2 = pixaCreate(0); pixs = pixRead("lucasta.1.300.tif"); pixGetDimensions(pixs, &w, &h, NULL); boxa = pixConnComp(pixs, &pixas, 8); pixDestroy(&pixs); boxaDestroy(&boxa); n = pixaGetCount(pixas); /* Fill ptras with clones and reconstruct */ if (rp->display) lept_stderr("Fill with clones and reconstruct\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDestroy(&pixd); pixd = SaveResult(pixac2, &pixa2, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDestroy(&pixd); /* Remove every other one for the first half; * with compaction at each removal */ if (rp->display) lept_stderr("Remove every other in 1st half, with compaction\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n / 2; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDestroy(&pixd); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n / 2; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDestroy(&pixd); /* Remove every other one for the entire set, * but without compaction at each removal */ if (rp->display) lept_stderr("Remove every other in 1st half, " "without & then with compaction\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } ptraCompactArray(papix); /* now do the compaction */ ptraCompactArray(pabox); pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4 */ pixDestroy(&pixd); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } ptraCompactArray(papix); /* now do the compaction */ ptraCompactArray(pabox); pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDestroy(&pixd); /* Fill ptras using insert at head, and reconstruct */ if (rp->display) lept_stderr("Insert at head and reconstruct\n"); papix = ptraCreate(n); pabox = ptraCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = pixaGetBox(pixas, i, L_CLONE); ptraInsert(papix, 0, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, 0, box, L_FULL_DOWNSHIFT); } pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDestroy(&pixd); papix = ptraCreate(n); pabox = ptraCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = pixaGetBox(pixas, i, L_CLONE); ptraInsert(papix, 0, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, 0, box, L_FULL_DOWNSHIFT); } pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 7 */ pixDestroy(&pixd); /* Reverse the arrays by swapping */ if (rp->display) lept_stderr("Reverse by swapping\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 0; i < n / 2; i++) { ptraSwap(papix, i, n - i - 1); ptraSwap(pabox, i, n - i - 1); } ptraCompactArray(papix); /* already compact; shouldn't do anything */ ptraCompactArray(pabox); pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 8 */ pixDestroy(&pixd); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 0; i < n / 2; i++) { ptraSwap(papix, i, n - i - 1); ptraSwap(pabox, i, n - i - 1); } ptraCompactArray(papix); /* already compact; shouldn't do anything */ ptraCompactArray(pabox); pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 9 */ pixDestroy(&pixd); /* Remove at the top of the array and push the hole to the end * by neighbor swapping (!). This is O(n^2), so it's not a * recommended way to copy a ptra. [joke] */ if (rp->display) lept_stderr( "Remove at top, pushing hole to end by swapping -- O(n^2)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); papix2 = ptraCreate(0); pabox2 = ptraCreate(0); while (1) { ptraGetActualCount(papix, &nactual); if (nactual == 0) break; ptraGetMaxIndex(papix, &imax); pix = (PIX *)ptraRemove(papix, 0, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, 0, L_NO_COMPACTION); ptraAdd(papix2, pix); ptraAdd(pabox2, box); for (i = 1; i <= imax; i++) { ptraSwap(papix, i - 1, i); ptraSwap(pabox, i - 1, i); } } ptraCompactArray(papix); /* should be empty */ ptraCompactArray(pabox); /* ditto */ pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 1); /* nothing there */ regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 10 */ pixDestroy(&pixd); pixa1 = ReconstructPixa1(rp, papix2, pabox2); ptraDestroy(&papix2, 0, 1); ptraDestroy(&pabox2, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 11 */ pixDestroy(&pixd); /* Remove and insert one position above, allowing minimum downshift. * If you specify L_AUTO_DOWNSHIFT, because there is only 1 hole, * it will do a full downshift at each insert. This is a * situation where the heuristic (expected number of holes) * fails to do the optimal thing. */ if (rp->display) lept_stderr("Remove and insert one position above (min downshift)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_MIN_DOWNSHIFT); } pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 12 */ pixDestroy(&pixd); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_MIN_DOWNSHIFT); } pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 13 */ pixDestroy(&pixd); /* Remove and insert one position above, but this time * forcing a full downshift at each step. */ if (rp->display) lept_stderr("Remove and insert one position above (full downshift)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_AUTO_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_AUTO_DOWNSHIFT); } pixa1 = ReconstructPixa1(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac1, &pixa1, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 14 */ pixDestroy(&pixd); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_AUTO_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_AUTO_DOWNSHIFT); } pixa2 = ReconstructPixa2(rp, papix, pabox); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); pixd = SaveResult(pixac2, &pixa2, w, h, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 15 */ pixDestroy(&pixd); pixd = pixaDisplayTiledInColumns(pixac1, 10, 0.5, 15, 2); pixDisplayWithTitle(pixd, 0, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 16 */ pixDestroy(&pixd); pixd = pixaDisplayTiledInColumns(pixac2, 10, 0.5, 15, 2); pixDisplayWithTitle(pixd, 800, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 17 */ pixDestroy(&pixd); pixaDestroy(&pixac1); pixaDestroy(&pixac2); pixaDestroy(&pixas); return regTestCleanup(rp); } static void MakePtrasFromPixa(PIXA *pixa, L_PTRA **ppapix, L_PTRA **ppabox, l_int32 copyflag) { l_int32 i, n; BOX *box; PIX *pix; L_PTRA *papix, *pabox; n = pixaGetCount(pixa); papix = ptraCreate(n); pabox = ptraCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, copyflag); box = pixaGetBox(pixa, i, copyflag); ptraAdd(papix, pix); ptraAdd(pabox, box); } *ppapix = papix; *ppabox = pabox; return; } /* Reconstruction without compaction */ static PIXA * ReconstructPixa1(L_REGPARAMS *rp, L_PTRA *papix, L_PTRA *pabox) { l_int32 i, imax, nactual; BOX *box; PIX *pix; PIXA *pixat; ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("Before removal: imax = %4d, actual = %4d\n", imax, nactual); pixat = pixaCreate(imax + 1); for (i = 0; i <= imax; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); if (pix) pixaAddPix(pixat, pix, L_INSERT); if (box) pixaAddBox(pixat, box, L_INSERT); } ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("After removal: imax = %4d, actual = %4d\n\n", imax, nactual); return pixat; } /* Reconstruction with compaction */ static PIXA * ReconstructPixa2(L_REGPARAMS *rp, L_PTRA *papix, L_PTRA *pabox) { l_int32 i, imax, nactual; BOX *box; PIX *pix; PIXA *pixat; ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("Before removal: imax = %4d, actual = %4d\n", imax, nactual); /* Remove half */ pixat = pixaCreate(imax + 1); for (i = 0; i <= imax; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); if (pix) pixaAddPix(pixat, pix, L_INSERT); if (box) pixaAddBox(pixat, box, L_INSERT); } } /* Compact */ ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("Before compaction: imax = %4d, actual = %4d\n", imax, nactual); ptraCompactArray(papix); ptraCompactArray(pabox); ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("After compaction: imax = %4d, actual = %4d\n", imax, nactual); /* Remove the rest (and test compaction with removal) */ while (1) { ptraGetActualCount(papix, &nactual); if (nactual == 0) break; pix = (PIX *)ptraRemove(papix, 0, L_COMPACTION); box = (BOX *)ptraRemove(pabox, 0, L_COMPACTION); pixaAddPix(pixat, pix, L_INSERT); pixaAddBox(pixat, box, L_INSERT); } ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); if (rp->display) lept_stderr("After removal: imax = %4d, actual = %4d\n\n", imax, nactual); return pixat; } PIX * SaveResult(PIXA *pixac, PIXA **ppixa, l_int32 w, l_int32 h, l_int32 newline) { PIX *pixd; pixd = pixaDisplay(*ppixa, w, h); pixaAddPix(pixac, pixd, L_COPY); pixaDestroy(ppixa); return pixd; } leptonica-1.86.0/prog/ptra2_reg.c000066400000000000000000000221611506303110300165560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * ptra2_reg.c * * Testing: * - basic ptra and ptraa operations * - bin sort using ptra * - boxaEqual() and pixaEqual() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void BoxaSortTest(L_REGPARAMS *rp, const char *fname, l_int32 index, const char *text); void PixaSortTest(L_REGPARAMS *rp, const char *fname, l_int32 index, const char *text); int main(int argc, char **argv) { L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "ptra2_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/ptra"); /* 0 - 8 */ BoxaSortTest(rp, "feyn-fract.tif", 1, "Boxa sort test on small image"); /* 9 - 17 */ BoxaSortTest(rp, "feyn.tif", 2, "Boxa sort test on large image"); /* 18 - 27 */ PixaSortTest(rp, "feyn-fract.tif", 3, "Pixa sort test on small image"); /* 28 - 37 */ PixaSortTest(rp, "feyn.tif", 4, "Pixa sort test on large image"); return regTestCleanup(rp); } void BoxaSortTest(L_REGPARAMS *rp, const char *fname, l_int32 index, const char *text) { l_int32 i, n, m, imax, w, h, x, count, same; BOX *box; BOXA *boxa, *boxa1, *boxa2, *boxa3; NUMA *na, *nad1, *nad2, *nad3, *naindex; PIX *pixs; L_PTRA *pa, *pad, *paindex; L_PTRAA *paa; char buf[256]; lept_stderr("Test %d: %s\n", index, text); pixs = pixRead(fname); boxa = pixConnComp(pixs, NULL, 8); /* Sort by x */ boxa1 = boxaSort(boxa, L_SORT_BY_X, L_SORT_INCREASING, &nad1); snprintf(buf, sizeof(buf), "/tmp/lept/ptra/boxa1.%d.ba", index); boxaWrite(buf, boxa1); regTestCheckFile(rp, buf); /* 0 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/nad1.%d.na", index); numaWrite(buf, nad1); regTestCheckFile(rp, buf); /* 1 */ boxa2 = boxaBinSort(boxa, L_SORT_BY_X, L_SORT_INCREASING, &nad2); snprintf(buf, sizeof(buf), "/tmp/lept/ptra/boxa2.%d.ba", index); boxaWrite(buf, boxa2); regTestCheckFile(rp, buf); /* 2 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/nad2.%d.na", index); numaWrite(buf, nad2); regTestCheckFile(rp, buf); /* 3 */ boxaEqual(boxa1, boxa2, 0, NULL, &same); regTestCompareValues(rp, 1, same, 0.0); /* 4 */ if (rp->display && same) lept_stderr("boxa1 and boxa2 are identical\n"); boxaEqual(boxa1, boxa2, 2, &naindex, &same); regTestCompareValues(rp, 1, same, 0.0); /* 5 */ if (rp->display && same) lept_stderr("boxa1 and boxa2 are same at maxdiff = 2\n"); snprintf(buf, sizeof(buf), "/tmp/lept/ptra/naindex.%d.na", index); numaWrite(buf, naindex); regTestCheckFile(rp, buf); /* 6 */ numaDestroy(&naindex); boxaDestroy(&boxa1); numaDestroy(&nad1); numaDestroy(&nad2); /* Now do this stuff with ptra and ptraa */ /* First, store the boxes in a ptraa, where each ptra contains * the boxes, and store the sort index in a ptra of numa */ pixGetDimensions(pixs, &w, &h, NULL); paa = ptraaCreate(w); paindex = ptraCreate(w); n = boxaGetCount(boxa); if (rp->display) lept_stderr("n = %d\n", n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, NULL, NULL, NULL); pa = ptraaGetPtra(paa, x, L_HANDLE_ONLY); na = (NUMA *)ptraGetPtrToItem(paindex, x); if (!pa) { /* na also needs to be made */ pa = ptraCreate(1); ptraaInsertPtra(paa, x, pa); na = numaCreate(1); ptraInsert(paindex, x, na, L_MIN_DOWNSHIFT); } ptraAdd(pa, box); numaAddNumber(na, i); } ptraGetActualCount(paindex, &count); if (rp->display) lept_stderr("count = %d\n", count); /* Flatten the ptraa to a ptra containing all the boxes * in sorted order, and put them in a boxa */ pad = ptraaFlattenToPtra(paa); ptraaDestroy(&paa, FALSE, FALSE); ptraGetActualCount(pad, &m); if (m != n) lept_stderr("n(orig) = %d, m(new) = %d\n", n, m); boxa3 = boxaCreate(m); for (i = 0; i < m; i++) { box = (BOX *)ptraRemove(pad, i, L_NO_COMPACTION); boxaAddBox(boxa3, box, L_INSERT); } ptraDestroy(&pad, FALSE, FALSE); /* Extract the data from the ptra of Numa, putting it into * a single Numa */ ptraGetMaxIndex(paindex, &imax); nad3 = numaCreate(0); if (rp->display) lept_stderr("imax = %d\n\n", imax); for (i = 0; i <= imax; i++) { na = (NUMA *)ptraRemove(paindex, i, L_NO_COMPACTION); numaJoin(nad3, na, 0, -1); numaDestroy(&na); } snprintf(buf, sizeof(buf), "/tmp/lept/ptra/boxa3.%d.ba", index); boxaWrite(buf, boxa3); regTestCheckFile(rp, buf); /* 7 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/nad3.%d.na", index); numaWrite(buf, nad3); regTestCheckFile(rp, buf); /* 8 */ boxaDestroy(&boxa2); boxaDestroy(&boxa3); numaDestroy(&nad3); ptraDestroy(&paindex, FALSE, FALSE); pixDestroy(&pixs); boxaDestroy(&boxa); return; } void PixaSortTest(L_REGPARAMS *rp, const char *fname, l_int32 index, const char *text) { l_int32 same; BOXA *boxa, *boxa1, *boxa2; NUMA *nap1, *nap2, *naindex; PIX *pixs; PIXA *pixa, *pixa1, *pixa2; char buf[256]; lept_stderr("Test %d: %s\n", index, text); pixs = pixRead(fname); boxa = pixConnComp(pixs, &pixa, 8); pixa1 = pixaSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, &nap1, L_CLONE); boxa1 = pixaGetBoxa(pixa1, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/lept/ptra/bap1.%d.ba", index); boxaWrite(buf, boxa1); regTestCheckFile(rp, buf); /* 0 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/nap1.%d.na", index); numaWrite(buf, nap1); regTestCheckFile(rp, buf); /* 1 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/pixa1.%d.pa", index); pixaWrite(buf, pixa1); regTestCheckFile(rp, buf); /* 2 */ pixa2 = pixaBinSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, &nap2, L_CLONE); boxa2 = pixaGetBoxa(pixa2, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/lept/ptra/bap2.%d.ba", index); boxaWrite(buf, boxa2); regTestCheckFile(rp, buf); /* 3 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/nap2.%d.na", index); numaWrite(buf, nap2); regTestCheckFile(rp, buf); /* 4 */ snprintf(buf, sizeof(buf), "/tmp/lept/ptra/pixa2.%d.pa", index); pixaWrite(buf, pixa2); regTestCheckFile(rp, buf); /* 5 */ boxaEqual(boxa1, boxa2, 0, &naindex, &same); regTestCompareValues(rp, 1, same, 0.0); /* 6 */ if (rp->display && same) lept_stderr("boxa1 and boxa2 are identical\n"); numaDestroy(&naindex); boxaEqual(boxa1, boxa2, 3, &naindex, &same); regTestCompareValues(rp, 1, same, 0.0); /* 7 */ if (rp->display && same) lept_stderr("boxa1 and boxa2 are same at maxdiff = 2\n"); numaDestroy(&naindex); pixaEqual(pixa1, pixa2, 0, &naindex, &same); regTestCompareValues(rp, 1, same, 0.0); /* 8 */ if (rp->display && same) lept_stderr("pixa1 and pixa2 are identical\n"); numaDestroy(&naindex); pixaEqual(pixa1, pixa2, 3, &naindex, &same); regTestCompareValues(rp, 1, same, 0.0); /* 9 */ if (rp->display && same) lept_stderr("pixa1 and pixa2 are same at maxdiff = 2\n\n"); numaDestroy(&naindex); boxaDestroy(&boxa); boxaDestroy(&boxa1); boxaDestroy(&boxa2); numaDestroy(&nap1); numaDestroy(&nap2); pixaDestroy(&pixa); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixDestroy(&pixs); return; } leptonica-1.86.0/prog/quadtree_reg.c000066400000000000000000000124671506303110300173500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * quadtreetest.c * * This tests quadtree statistical functions */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_uint8 *data; l_int32 i, j, w, h, error; l_float32 val1, val2; l_float32 val00, val10, val01, val11, valc00, valc10, valc01, valc11; size_t size; PIX *pixs, *pixg, *pix1, *pix2, *pix3, *pix4, *pix5; FPIXA *fpixam, *fpixav, *fpixarv; BOXAA *baa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "quadtree_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/quad"); /* Test generation of quadtree regions. */ baa = boxaaQuadtreeRegions(1000, 500, 3); boxaaWriteMem(&data, &size, baa); regTestWriteDataAndCheck(rp, data, size, "baa"); /* 0 */ if (rp->display) boxaaWriteStream(stderr, baa); boxaaDestroy(&baa); lept_free(data); baa = boxaaQuadtreeRegions(1001, 501, 3); boxaaWriteMem(&data, &size, baa); regTestWriteDataAndCheck(rp, data, size, "baa"); /* 1 */ boxaaDestroy(&baa); lept_free(data); /* Test quadtree stats generation */ pixs = pixRead("rabi.png"); pixg = pixScaleToGray4(pixs); pixDestroy(&pixs); pixQuadtreeMean(pixg, 8, NULL, &fpixam); pix1 = fpixaDisplayQuadtree(fpixam, 2, 10); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 100, 0, NULL, rp->display); pixQuadtreeVariance(pixg, 8, NULL, NULL, &fpixav, &fpixarv); pix2 = fpixaDisplayQuadtree(fpixav, 2, 10); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix2, 100, 200, NULL, rp->display); pix3 = fpixaDisplayQuadtree(fpixarv, 2, 10); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix3, 100, 400, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); fpixaDestroy(&fpixav); fpixaDestroy(&fpixarv); /* Compare with fixed-size tiling at a resolution corresponding * to the deepest level of the quadtree above */ pix4 = pixGetAverageTiled(pixg, 5, 6, L_MEAN_ABSVAL); pix5 = pixExpandReplicate(pix4, 4); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix5, 800, 0, NULL, rp->display); pixDestroy(&pix4); pixDestroy(&pix5); pix4 = pixGetAverageTiled(pixg, 5, 6, L_STANDARD_DEVIATION); pix5 = pixExpandReplicate(pix4, 4); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix5, 800, 400, NULL, rp->display); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pixg); /* Test quadtree parent/child access */ error = FALSE; fpixaGetFPixDimensions(fpixam, 4, &w, &h); for (i = 0; i < w; i += 2) { for (j = 0; j < h; j += 2) { quadtreeGetParent(fpixam, 4, j, i, &val1); fpixaGetPixel(fpixam, 3, j / 2, i / 2, &val2); if (val1 != val2) error = TRUE; } } regTestCompareValues(rp, 0, error, 0.0); /* 7 */ error = FALSE; for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { quadtreeGetChildren(fpixam, 4, j, i, &val00, &val10, &val01, &val11); fpixaGetPixel(fpixam, 5, 2 * j, 2 * i, &valc00); fpixaGetPixel(fpixam, 5, 2 * j + 1, 2 * i, &valc10); fpixaGetPixel(fpixam, 5, 2 * j, 2 * i + 1, &valc01); fpixaGetPixel(fpixam, 5, 2 * j + 1, 2 * i + 1, &valc11); if ((val00 != valc00) || (val10 != valc10) || (val01 != valc01) || (val11 != valc11)) error = TRUE; } } regTestCompareValues(rp, 0, error, 0.0); /* 8 */ fpixaDestroy(&fpixam); return regTestCleanup(rp); } leptonica-1.86.0/prog/rabi-tiny.png000066400000000000000000000045501506303110300171330ustar00rootroot00000000000000‰PNG  IHDR,¤*  pHYsb&27tEXtCommentXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)!¨.9×IDAThíŲO‹šp•˸|FKNsZv šöŌ‡Ļ59†|„2žeoŗėĨÁV5Ŋ¤r0Ž%_Ā—|€œrZ°š îÛÎ-,„*:07¯C,ŗZŊŧ§ęęŋ噉3$&´3ŨÕŋRIO%Фbp›d؁ũ0¯vã–>ø_Ü^nÄ Ãŗ5Ģ_ėKņGG4KVŋ,ā9L ĢVâ'S"^ą9΀ɒ“h$MVlæ…뎎dA?¤;lŧfN¸aŋ/˛ŒJŋĮšÚæFX×Są2ŠŲÂI'ÅlÍđú‰SČ4Č-f•XˇŠįāņZ5+ę‹b+,ŧ4°fz”`_0ÄʑœFmjœŦ@Ŧڔa\„Ėđ˛Ŧn$w¯*€7ĖŗcŽ]ėB‚Ž Š=1nņ,oēĖ+ÅąÕąCęØ2žžŗ!å&ÆžË!åM—iMšąīJ Ļw×°å˙ĐĶŪ="Í6ŋüĮl~§lq;ļ? ļĻũAĩ5ųÛą­t`īËBŠ-@ŨĖÚRôųī~ųũÍėŊøūũÛ'?˙ė“˙đÕīÄÎŪÅZŌ›?ũåoßūâŗŸ~ōņ—_}tīėėėũãv`v`v`v`v`vg,ŨØcē†1ڔēĒŋęú_XÁ‡}Ļ vŽšlšDØē cL• hĨŪ0C xJâĨh˜@æmeĖļØ)ągKf;‰E&Ύ—ËČ+ßû”Øé f2#ĻB6~ĻÅŠčT]• 2§Âž– ŦÚdv™›*ŦaÂ.™SkF›h]Ŋö4Ē0†ũļ8–lždŗĻĄZÄĀ'ë`ílĖqH-×\ĢRߑÜĒŦ),…&2+üɀ§üHjņ2ļOyJk’2ŽŨđ¯™F&ŨPqãĨāĪ˙üØtĖõ’Ųá§j%ķ”aMŦSbáû!ŌĜڔĄ8¨Ë]y>Ä0SãFõÅd\ˆˆšíƒa›jlú),ėHV^öú"ÃSaÉ`f LMą c¨°`s|‘ĖŊđ˜s`Ų"„T ÃãĘ!‹1tœåLáĘ**#5ŌÄ0ŸøĮ‰“Đ. /œ¤œË+ʕX†mĘŨ™ VÔØŌĸ ¨9…v˛F†ĄÎJæ„ûVkf^˜ÂS–ŦhX^2+m,ŗŽ‹,ŗ)ŠĒ(Bģb5xɌ4Č^gôČđFUöÉĖ> ;´™k˜fĨ*įŪ^å|W}-ķžR3/’¯éļÁÚ Í4Œ+k.Ÿ]¸ęÉg`¯2ûī)/“.2Ú&#Æ"S™üŠuÃŪP=5`/3{EŦķ`°ÅllåØ2‡‘/ĀōÜrÚ~ø%ŨĢ.Á"‡3Oqķ1ÄNaÛ[ɝ žMiŋÆD ÛN8í‘g×1ÚĄĢŖēNmã[ˆũj+ėÆodōV,4Qå]0ūŦ%}ø,]}o&ƒVFī=ļĩ؜˜?]åádļË(ŒšŪ›l1lš„–L­ĪöØ*ˇŅÆáīvŲúĸjķđ.[UÁŪ!sęVŦä:]b?M•;’4dųŽØcE†,ՃČ3aî÷’T+ƒĶŋá'Z× ô%2ėĩ Lza}_”e/ŅŠŦpXŽ}†Ņx„“TʑåąGŸģĄä•‘™é‹ĸzŗÂ p,ŅJãu+bÎØf$2œķŗĘô9Î{80ĘœØ‚Øo*lYČ3Ŗ81:™(pn ĖÃˇ§j53k†UĀ dVMqFāŲ“ČÄw 3JĶû˛m5SŦÎ`2nXąØbOKV`9VlžÅBÜxð,KV&[ŦLVqÃiŲ¤fô:iÍFŖ VAw)7˜šQcÍ6Ē[Ąf؆[ bFƒQÚ´fØX “Wtŋ%šãLm™eQy.ârÄĶÂŲMx)7#s‘Ãųâū}–žDôâ¤Ęô)Æ5ae'É7†šø•?å?ÖŊčļ<‰ |ĀΎCx[Ū%ß<ŧ•q§ļ´3q§Œ[¸ OoÅt|+æw|øĶĮ­Øv,õōĩ¸Ūe[ˇ¤K–nž„Úgá})„eOuÍEiRÁ$Í.ÛNËņúß`p#ķwĘÜ.s‰RŊ™`\­]3ģËL”BÚŋa!ŗŖû|<’ē>ū‚• ĸƒëŒ‡WĨvtĻeä°[§įGIÉXUâ2 ×8¸ņđâĮ Ee"˛Ø@iyšāĒĨ(­“ų.æMąxX…ž¨ŪbiqôšfE…,+prŧͯŪâŗhå”ÄgōŲÂâƒ;N˛aôä^ŗ2ã¤ÄÂeĐ0/Ē%“!n8Ņ)dVĘŧf,ŒE;ĖâŊglG5,)pūs+ĻFˇŲEGyV_°Ã(nö‹SŪ6˜_ąæĸĀđͧG0-Ų¤õÃÕˇûÉ-y ‡U~ƒLŧ߯/Øk:!ĶZfúŲ…÷ņzÍzác­įc/Jjz/. Ûį—üuĩÍ@lJĢk™đą•ąˆgČ Ŋ×Įįې[AĖ&ŠHû뜧2ÅBCú€•8ģDz”h3T´’ķ¸ūÅ|ąë^Ú_áJŠŲ9ŽrbœlØ#ęâ ęm 1˙š~A;/Ž ŊøĀ‡Áû¯ą°ģEéúÅ]Ú0{íŠrõīnd—áĶ]ąüÁx{ĢiËŖZ–™oei:ŧ> ĩŒ9Áq…;\S„uŪ‹ˇ•§}VúNí1Ž<ÄF´Â|˜xR¸–&Æ9k$Æf(Ÿô‚%]‡D€hbxÎCū[3ÃņŸđ syx¨ä8ã`y+C3bÄy>ĢĖŋÔÕ@]u”IENDŽB`‚leptonica-1.86.0/prog/rabi.png000066400000000000000000007064161506303110300161640ustar00rootroot00000000000000‰PNG  IHDR ā ä*AĢgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœėŊ×}'øēCމĀZFK{IĖ8kꈒ.a§"™ÍaÕz`Ÿ´ãĒ;yPQįK…¸Q|ĩUŠ ĒÛã ĩģ—ŦqØY¨ĘI‰“+ŒũĮyNāũōŊžŋûšöī“÷úūîkzŪôŧ1hđNŨëûģ¯é’<=PUÆ āAĀƒ€7íŪÄŊžŋûš€7=o zŪtįxŖĶ~āÕīõ ŪĪ´xT•ŊčێAû€÷K÷úūîkzŪ´x§îõũŨ×´xüy{Ņi;=oDúøøåíŊą{ž~úŸČ6#íŲ˙ÁÛųø”‡07 š‰(3߇ƒūÖČžJō/ā?õNĩĸŋõV]<{˜|ÚCŽé_ũĩßü¯ÔĻ8ÂįY’Ĩv_4šqéV˙ķ§ŽL3”%˙đŪÜÉßCzĻ7=o zŪôŧ1čxcÛāUuEĶFëēęō7Ũ4xÎ[X™@Cj÷JŗP×zFG ­8KáPn5S,ÅcBx]ÎŠ =" žÚđDãŧB÷4ˆ÷§ ØMž=L&´"ĩOá†ĻƒXķ4ŽŌTęšm°Ŧ‹Õ^0÷Ĩ֏ĩ;„͉T,ķ‰Dd=Ÿ'„ũRŲ'ëĸQÁ‡5%-ÅEĸŪÔa,'+ʈ_e~ōØ13Ą\:˜ã8x3=ÖW÷%đöäK˜Ub˛w¸Žk;”íEYšē|MĨ3Nąž\œųÛÄ žD:oÎûmƒŅpāõ;$ŠvÔāŧ*eÛFClĒøGҏæwØĀOכԐāY‰UņĮrŋ؎xrØ÷HCŦ6AĀÚe‚Ú+ĘđëÎ]E¯ÁŋˇFBÍD|ú‰áŋxŧdS)tĪBMĶāįõЇŦĮ4­\+…kv4‡eÛíĄ@cˆG˛ŧ‡ü˛AihđšJ¯ĸ!‚ēô­*eQXīŧĸ3c0 -cŅ#MŧÁÔ-ßOlÛ&sųj™ôŸ*°šĻ‚œ¨š@bE]YÕĢĮëû“‚Ÿz}ėø$üXĘPO5 bâ uq’5*`­¨€ô5œqÃŪü&*üSkâÉĩÛAhxļ5”`ą{õ9ėŗr#™l)&ôž…Ļ^¨pMĨs2 ;˜ô0ˇ†D+°ŒË^‹|=÷ę ^Ũ\ęûp õ<ĩëÜFĖ ŊVS-Ë  ļnmđûņOēŗ;51ļw|JŦTéoŪ}‡ãŌāœT[œ? ´āÎâĨQÍE˛¤°mØWJŌִۍƏ‡œxv åeųŊķa´ËhdŅįNpeKڙtĩ‹ļSëƒ-D8ej#fN?v1–J SrxđĻbĨ.íĒŽÂÂ×ėXģV+—S—šļ ¨:$÷’Ēõ4,n>˜o­×ž;ŋŌ^P FC€FCŲqÆ!ÛV­4ô EĄ6lŊ*ĩ˜›ÃLĩÁ4ķLš\ߔå"ũ5îļm˜Rׁm…­čyĨ feCtš†ĪĐUčũex~ėxØļGÄšBŖ“ĒwÕWˍĒŖēEN€rZŒ„Ē‚ƒĸ1F•Å{}ƒŠ t/ƒ™ …˙ĩ˛˙FÀ×w…oˆz˛ZŊÄâĄGUŽĻ7Ęĸ`qäáĮNš Rwđ™P¯ õÍ#ĄõMTĐÁļqŸ¯¯ŽŠtīj‡jĩ¨&-nA/ ęwhzŽJûë,ĸX õÁh Ęâv°íĐÆô@4ĸĒ‚[=bטj¨ĀhžY‡qņKæYÕ"(RĸؤĶđãáĒâĩ•d‰ĀĖĶGÚ4؟FOírQˆĀ‘˜RJÍv— 5mˇ uë¨Z^*ofl uĒ^^Ū~SĄjû`ß6íUAĒëŨ÷§P¯ąĢČíņĻV5ĪäÁ õņ\ƒmÅJŌu5i,đîØæL8āÔΨXAļMĄ^lÁ­˛ŋԐĶã`w>–Hßæ•!ŒéahT=¯WÍm6ˇ”熿™uTEi[́đ,PãrWÛķ‰čjØĐ_:†ÉåäLą\E‡/P÷Ę}ÉŧŊ’ûŖÃ`:ØÜ '`š+Ô:Ē0Ũüš„ŗpßû2ņÍq&9JrqąœĘĸ‚†Īņ”nīžFw*¸ÅØ‘É˛ae é1ÄíIã`Į.ÆøD$ŧžÆ6 UwF åĢØ´F ˆčAŠÛ´/=uęņۓÆrFygÚüjļøF<îT6[ä)÷ĄÁSēpķ Íڊ5ZE‚ &E¤ĮĩÖ( {MSģ–F+ęZk˙|m đŌ™@”gˆpėĪ^čûUcŌ0āizß-(ąËRm^†w %Z†ŅĢĸŨFŨ¯3Ļöŋš}R•ö#Î뛚@ÚĘ”ģ> xâū§Ąœ¨VšuÜĸļŋbhPļŝû.ø÷XËĩ÷Æ@n‚cfÂųËŲ č%¸ķQht=OíÉŠ ,ĪåÎb†FLÃĻÍhŖ"ĨŸ[EÁ tm–āčØyV́âÂ|ĖĐķzŋÄĨŲŧô;Wëú×N•æ–áOn“bøņĖ8 ķvk(<@ėÚĐ,DqMmŗ–kŊ˜į9Œ“:ūw¯^qø—ØxđúˆXz3šũ<*`id€ŌÚ´ĒL ė[°ųä{æ~^2lP™˜Ģđ'tæøw3ĨrŲQKvĀûpā‹æ~7o͍Žö ¨+2ÆŦ$ģÔÅŦb÷§āāĮĀn2—iģl;Ų((Ũī žØTēF¨pĀŠ.(DēI÷"ÍKTŊZ…Ë5ÕŅĖĶq’‚i"oŽ[ŒĮøé0˜gŲlQäyFĸ!ÁSŒØģîa`[mGUí{*F lQ¨uŽī#˜{|IUœFbŒ‰į ¯įŌŲĸßûOš˙ÆîCޘwæ ^ĄĪ¸ŪÍvššŗX@}Ĩ}¨Ž{ˇÔũ,ŪĀzûúî%āʰ€yŦ3OÚū/ˆŸŊ~$Æ B§Û5J`ėG ]nȔÖĩMҍ|ÖĶazéŽLĀļãí™-gb1>Ʌ€mwĘû{ûG¤a×<”“ĸŖŦ‡ UNuEŪUqŊą›ėō¤ā˜îäë Cõ:°mttč&øéHÍZž¤ŖX÷zƁipđ”Ŋ“xĒMŊŠXē›QNY!BQĻ$÷4ĪÕæ–g}ãYÍ ?^=[›âDĻ48xN~ĶSĻXƒé)øą‚nxÔķÚķVEΰ­Ōķ)͛ÁwÕ6ķŲ>O<‹V­|ã>bÛŠöˇhqŠŠ$¨Āö`nĨļŖ6œqj‡[0rCh z­wæĄ0.r}Pr&ÆĘälŒ6’Ë˙ (,°ÔöÎ<‡đ‘hđĖõΉĀPE7ŧÕĩ^E˜îžîŅŽĄĮEJ÷˛‰3°NĐRbōo‡›xVļeBųt&3ŋ˜ˆ„8Vmˆižõg[Gļ}ƒjëŧ*æ€LHjbaI´2pgĨn›0@Čx[îÄ\kÚöpØy$ËÄ[Œnrōˇ~2ZfLéũ\ŽŖĶXæ™U+›(,ËĸŖ´Gq3…G˛ãUPé†FéŠ=ĸe‡ÃŽĩŊā™p(ŸĪ”JņTBHÚ1$žŗS´ |Gw-Ŧ €•¨Ær'üĻjwČËŨsĸn†ÃÎF4į,Sœq+l(Ŋģ*Ūžr`nøūāUõ>IĮtĢĮjĄã%keËę  ^PSäšõæúŊø:åxE-Ô Lfá\”‰äÖsôVéęÖ@b›m{ŧr ZbĀĄĶ wÛ5ŅĘ@į˛oûTXîęt é…Jkœ/ÉúÆK˙û‹Í(”åx#˛ wĪ ?xβCŽQī;ČEģbâ^šŠwžĄŠËę+N4l(h°ë}Čŋ(ŗ€mˇ =!1nJQÁëū-5#¸Ņjžavcw|Œ8‹U+JK¤tVrãr°Šá¨2†Y”šyĐķš9Û“‡BĒ`Ž{.Đā)}Æ ÖŦÚĻĩ$0(Y/ĩusK­D÷ŦW‹`Ë5ˇ”BQjctė@áķQ˙Ę)oöpCc­yŊģđôeeL8KČ1.‚BeSĻûĢU nVZ[xŦņŅ8ā™ôŒ.‚ĩŗŅ3ĒŪhĨËäĻž‡ąī(_­[;Ā>€XŌØwl *4…&\Ų> QõŦ %>dÛÚΎsĸv÷Ŋ*-rvR˜͍2Đ:c\đ Öô\˜›ŊIÉf,Čõę(Ą mâxßLHŧ‰%ŅųÄæ^~ŨaČŧaCŠzŅu}SÆ5î’ØTĖ1ēVcd|o˛m]‘éZ×h¤Äjsœ‰Į„ sÃ×ūlü*uČ˜\ĪN`O Ébg %kĄ€NQëgŖšR¨ĶŅ(ú čc‡X˜ â—×vđ6ĒËMiđė*JM°Ã´ŽuFŒ[kIûAO2ŠÖb¯ÔõÚXiÉŽ`ž…V2¸žĻ„^Ģ–ŽÆ”mŨđō žę8ZŖ=Kt#­Œ”ŦžĻČõÔujfT FŨš6)J ÃöPOüQpdܐ_=)˜‹%Dį{7žÔ!g4rmÕ‘DEÍĸÎAšĮ\1faįÔēI%­šŪ/H‹ÆrđęĐÕÖį70 Nẃ×EāŊ3čĩNwTÛA—=çb°­`u€ŋōNĨIWIķ#ĨŅÁëĐqŲøŗˇú…đ ÛîžØīXØ0XE§nQŨĒ41ZS[:juãĩĶä!é@`>ļDcņaÛT4Uwg[hœ™×!Įå`48xÆdLæÃíÉ\+^ÂVé˜hģÔßŪõÆŊ!šércg§Q=ÄÂ#Đ‰Ė„<č¨éfŒĨj8ĐũHŽŗmˇÍ&аāé?§%}l̎hȔžœŦV›¯Œņr×–N2årœŪ“CxŖ5†¯Š;G͊Ģ=•P#ŠčXØÄ"(0/—–Ĩ6RͨŒå0‰å_ĩŖÖŊÚo]Ą  ˆ96åũ ėKC'öÔi‘ŌĨT+ZæzÚÜb%[=~`š˙Dbmg§ÄíÍž4l›ąÄšT6ŗĪpC ŠÂ÷.Ī<Ĩöˇ´ŦĨØvŲ‰:ŨÔÅm3nËkZJm§Tާ–@cųÎčķmŽx™ ŧđ:R4uPXĄ˙ķ J#­yæã;:Ũ>ĢÖÂ!€ĸV3ĸš­W4MēB xizsėyGÉ; ?T×Ũvs(ŪŨ]g[Ŗô cíˇēLk!Í´ÖdtšwR—aíŖy.jClŸĒČ2L@7  …˛¯ėа+Š­{,Ķ@tš´_šËz^ŊŸĒŽvā.AR z^į.`$Vĩ홯tÕ/%„āȈI~Ū îšųš˜-ŜčBt(éĢZÉmU…ēņ@–ÚĢĢĸÃŖjļŊÜŌĮ˛ë[yYcëâAEΌöqč`¤–c=!ŧšz÷ŲvoÂ]žî˛–:MEÃxÚö‚WU¨&Hƒš TŲŋŖ×¤ŅÁ3Kė=2š†aģ)ēöģKZŠ^°ēHƒƒ×4—Ū~žœj÷LļE۟ō¨Úú 5ĸÍcū%‚c!ĮĻ)ļą˜ ŦwÁŌܤ Ą•5†T}| žŖC ŲuÉmúWŠőõŽž'ŌP3L˙iw§ĸl+¯HŖ‚÷YŗĢG"llÉ÷;áŦŸh@HûnŠL‡B, ,ë#đތņqW šfŧŖŽ“mÅN=8Đ …­Mjž<ņâŠD'Kų3šôˇ't­´˜Ō…uЄĘčaÅ …ęy:5q>4×ŧJeS–ˆm¯ėu>­čæ|Ô[öL<Ęļ´:˛Ṍ•’aQJ= Ė5lûË6y6­aAŋ^ø¨XŠ-%"ëÔq@^•+û^ÔĮ›\ÅÄ㞤‘˛xI7ûd(øž ĄYK™kČō)šėęVđ‰)fĻ ¤•ĀĖįäZą_ÂbBÍ:H\hnë ļutX%+ëųģËļ c­>˜yIBĻ›Įš?íˈ°íŖß–ĩ’Ã"ŽĻĒŋÕĐ/F†{JG<ŅaŦj8 lĮ´D šd´!ē°ˇ°íÕ=đŲ‹˜P[ÃņĐ\GžåRįūNė‹‘É`6‹nŅfĘōĸú&ū”F7åáŽ*ÂēœÍēŨ8 Äc1ĄnäĀäĒm ֐!‘EË é)…:õéJU_—?*-ÆGOyÚ(įo—ēd)ĸŪājCãŧo&”‡éļ%…ĘÆúĻ|ųÕWŠ)ĩüŨôրCaųīŪ]aäŒöÛBQēšb`õ2žhšE‹pĻEhôhÆ`y6œģ j1Øû3šÕLf;Î1ŧž‰ŲōäåīfŠoÄ^Ā5u¤|>KcÂcpđúŦwŊƒFt…Ú°šLi.ŽJ`”×Ô¯sŖbg#‰sŅĶOϏ…Ÿ`ÉŧQâß_ûƒ— Ũ*ĨR [ŽįålŠœÂ™*ĘōÕ[SÂŖC"å@cą­â8ēĶĨûQļÅč&Twĩ˙į_Œ ž„˜`h%xÚë{6JûO^Ņģ9ņ6ÃĖĪĀrWŽĄYģž“Ŗ4OU -Î8Ī„ķĮŗ%uāįėGCƒ§´ÃëēŠî¸A„A…:ļųšĸSGųG‚’FÄ,č<ĖxVüВÁĖ@ļ]ˆņ?ŠŦƒ[Ûų˜įaQœ‹ŋˆž€æâ{čV­.Æ ßĮˍˇ 4ą3ÖZũücŽËÔ,ÛĀMŽ…ąs€-Ę=Ųˉy>Ū “Œįg‚›+ß{īMĸ˙FíF)ķ͒°Éļ´Ųi™÷Frŋ‘ŗˆԘŌÖIz¨eŖT˛ éz™ūčÆēįtÄŗ–<õÍFršŗü¤ą+r&Ŋ 2l˛™Ėōb<•ˆ´så?đDr…UÚÛ¸ė†Į,ë–ÆŦˆ –Ö/ŖWY-^ļĮPS:šũ$ęVödĐÁw¨Ü♐g“¨Ā&ƒŲ†åyž™%“˙§ūqƒ?žTÉį‹ oÃ/ųÚčĪiŌpāÕtĢąÕÆįŸĒ÷Ŧ„ĸŨH§!ĮCÎųõü¨ŠR ė ŽôŦ|A’)Îķ>€+›ą z^.ŸÎĖ?û1|é NČdžVTË ZļˇÂ¤ŽŠY›Īąˆ;%[c„å@ķ,ÕžĨ-húŲR|ô¸(GÉ3 ˛mņĪĀoĶĒe6ÁE˜ā? î$ŗ3áÍ<ęyb͍EH&ú Õ‘ļgšÎqŠ4˜ĐĻ.Ķđnē€ŽšË˙ęun,ĝ—ĮÉœÄÎqĖtŪ?} Ąã0—Ī“Íf€mc‰p$—KûÉÂ3ˇDÚzļ€Y’Ά7Ņ;:ŠÔØ/S-ë^ãŖ‡Ū-§FÎį­X’üŨã´z:“9ÂGƒčŽ €ļœ ĄĢŲ °é‹ĶúĀÕKĀ+Ō_°€Ū#āÁĖŧŗÎgö5ĪŠjiÚ]כ˜Jã#šQĶ’=étĀiĸaņįƒĻ ͂ēÚ_ĨmiĶŠ6B+Rš°>ņ÷¨ąĒČļ˜eĨƒ“# žâĀž"dtÄ~G*F€n‚ĀĀeæßÜē dˆī ļ’ģ§_ĮxpjŸ1 Ū=”–°P8”Ë`”­0‹3ī_ŊĒrà |Ž[”muԖ ú5“O4Ö:éŽdauØ+ öÆŋ™™ĖS5?Ęø‚{cÂcúˇX#K9” Îã&Yȓš>ÎGį!‰ķ¯ânÚͰšl7˛õĘK‰iĨö}q¸ė4Œž×MMÅø×ēWÛÄÜä2­ƒl^Ļ6RĄ”)ÆFĮΉ~ģü—< Mî˛<ĀcÕ ™3¸›ąHc|@ĪK1^HŪ9k0FŖš˜Qî˛3´C g=vpPģĒp/áŪAũīkkcaÅn•Pį‡Ņ ¯áTöŨ˛žÄY{ĒŪ#Ch>üĢØ2nëęc‡Æ‚îīķyF‡[C/MaŽ.CÁƒU.ĘĖņÅ"°ig^q1Ö¸õŌļßˑG&×iZ æ_đ‰™'dŲ^ a$NĪFģŪ›^=Ú54‚KŠŽ˙hãę™en ė‚Äs\˛ąĨ‰Û^Æ#í‚rÂĖ„ą470đBĶ ü˙āú2vCĮMÆŧ”šžˆÕ01eīmëNSjēÖ}ãÓĢnø:íęcOĨ{Ĩ/ķ‘āāáĖõRЏú„ĐĪVäÜķ ĨHiKcęØ!OÅĀļ˜Û¸0Ū{î‘H°Sŧš•Ī1īōėakZˇôШ”HŠö"ąÕõ‚|cZOįŗR?TŖ( E–ØĀg °EB]4F“9–õŌĐn°kŖ<ƒÛA™R)Æ_‚hĮyCa,*’tį=†ûĩģŧ{ÖG1nč1iĨĀ]š¯Ōī=6pč,^!ĻyŌræČķhuŧ.á§Cų4œāã“ÃpÛĨ‹ĸ~EO$ž z‚›)Ņ"ļtīļ"äåtĻÜ×ŗ6 ĀîîŅ’ĢØŠUģÔܒ¯‘4zV2Áķų0ŧø÷ƒŲ?0á8ĢŖ””ĘzÄÆSsŅs°$ŽŖž÷÷‹;Ÿŋ(—u2÷īģļ1Z]¨'OmP˙Ļ<´ŽUut>ÆS mIcŖFąI‰×7ƒŲÅÅ8ų|÷yQËĄ<Æ €>r:Z“ˆ4÷ÉãšÖ(‹Ā?2¨MĀļũnIÛ7ož2^Ž;ēUDŊÚÜę>€éņîZeÆnuÁ‹ŽxAŦš#>ĶŗJÁķ‚ų‘Nû9PƒčNžĨ¸˛^¨Ëū„…8îČ –l@Ž€ĄíFC đĞ‘w~€;MFņĀj*Jo7 ÜNŅÜVĖ‹';C20ą8Ÿ(Ãnˇ†˜ß cÖäͧ“ũĀļØC‚‘(y„ŧÖsx}Ŗ ËY?ÍRļ-–cđd˛\ŒĮŸs#_TpæŊķ–“Xga§y(íā!Ö¯Ÿ_ŗvš•~Ã9uŦ„§“¯žŠûqŒe?× ˙ËQgTũÉ!4ΊņT"lT=—o*āúf]AŊāig{†Ô—ģÁK:ā†MâģÛj%\īō™1ûŽRĸM0}  ¯0ųĘúU nļÕĞĄwžāQũŽ+Ų¤ē†ĩuļ#å˛ T0ø<ī°a=,Ą¯3DÍ/âÅėZr|ûËidnžlAõŅ͟9t'įōō ĐķRÂ!ÆKhZ˛mØR"ĸúûrĮ΁m̧Ū1šŊ9EÁĢ4ÃŦ;(3kŅDŗĩ17ēė‹D:5 ÍZ×KÛ$8švŨLĐŗŌږôöú—žĸjúíO-%| įy˛tDÖķpcqŦ2傠Ĩ4Ā¸yöēcŋĻ}E3 ÂdÁVՊ>ņœ5)؍¤‡œ‘°ņ9ą ūOEŸdŒäQĢ›>}>ödŲ6› 8>ņH8œ—Ĩ>VHŦšŅIDmwÅS–wUgÜ(ęŖØ`ë`%ŋš-ž§j~‹(6ņcéŠs ŽĻ‹ņmōH„œ´Ÿ‚ųœo& zMÚģ0CĨSßĪĀž­ŊÉX,i\āĪ< cUrŊ;Ŗ+:Š4ŊÆęá*߯ō勸-‹œĮ˜ūœņîdŽųáa‰<ü8Ī‹RʰĄaT ?cžÖ¯ÕĪmãšé@×9°o‹¨į=ŅĶ2ã.€įLļĘx-ĸíVĐëŋ|y{läˆe׹õiœī‡Ÿ@É1 z0ÚᜎÃã^ũIķW‹Å(? Wû~áÛÃ=ß^44xjëĮŌRU#LJM IĐ >l^Ír/ÛˆM?ååŅ/ĩl{î\äBŸ`§žKcšAĪ“VüĨøâKäO}V+aq’ģĘļ§Z/*rös´Ē ŲzĘ<&b,üÚNYíÃ6Ęø@đŽ \>ߏNrō:ĖŧÖÔ§¸JfŌ÷ŸlŽŽšČ~2žâ'ŅÖDÚĸ ÛŨpĢ ¤$˙@7Ė3ãũ[EËbŋ@A÷Y<†ÉüĢc4ꊲQŖâ9$qƁ ææãGÁËdĸ>f&dDa0‰ ĨŽ7QX]Mûįŧ„§1əR,! Ā´ 4ķ>ėßÚÆQÕĄô ô÷ī †Đ‡g 8.=Åz1ęPæúb”DrĄWąŗ-™ O[dÂ`ÖŌTī) VĶX…&˛UĀ`Ÿécpu4Ä,4xÕ¯[ĀSúSAĒ›å Ļã‡ōGß,=톞B }īŒ0 ­ĸx-äq9šÍj÷П‰ņx¤å"zsęĪķÖ ųįwžühäõ\VEiK‹oÆuaüÆ,ƒ÷xöP÷6aŠŧĒ[8ZŠí`1§Hhŧūđ-Üæ`xBÁãØšĀâ î>OČ)úŒnœķōŗ˜\Ā’‰(y į5N†Ųøī›E{-ŗˆĨËZaFuú1i0Ûöwhã&ĩ5ž­Ķ=LŽûnЧę͐d$Øh‚r˛įąŨE‚Ōâ$F=‚2âY1k6 ÅqĨ^Ķ蝇Aņ+`gÄcKđCĘØãšŌ÷ƇĻÁfžj_ķ€m 'ļڍĒ0ØOĒ Ģīž—Ô~:^ëPoWlëMĖ'Wü•HD€mĶäžâīģĀÅ/@ë\FļrĢŲ4;=ĪDh]šoūžNŊ’`ĻßMļmƒ§lĢô^ĨPâīĒá – 5 Ī IfrM’3ė"čqaēZ;EgŪ§ņ˜?žÃxBét`Î뛍äąō[üŧ÷Bcl™éĮé~@,‰ŪYíŸu]v mu<ĘļZŊO˙ •–Lą¸U4l˙ŒŅQĢ™‘ëö˜d‚f­„î“‹^2#Ņ#WwOm#xgđ~z’FGįW"Ôŋ†ūˇņ/1`΅rŽ‹qŖ¯`–ą1kĶ@āŨ´vhˇœé0f°íú5°kãKŖˇ 1Čkjwēč †×@>pSüÅHŽd%ō4ÃGa6€=Ž1m,ryŒ[‰bŧO>ûJŠÜé*Ņ(ë‰ģÄļVđ¨šâÔsŌ0،’ĢePwĘcƒg#†„C+rzáKQ⠇BĢ×Ų[8ķŦ;ŒG"9âŖQĄ™ââ"ŸxÄ3s5M.LžžÕĘådëäĒzŠ–?üĢģŪ[Ō1ŖÍšîœgŲč6;ĘâÖ>u'ŨĮë%!4Īüsķ˜bņ %Įw‘Pđ¨ŗ÷Îä<ŲĀĮ“PhíĄLņí˜XŠŧøĮ_…cáĩüU`ÛŽ#…ĩAĒ:Šbqé Â-mÛĒŪč×í¯Ģ°šĸŌÃĘøāØĀ‚KVZ‰ `ŋ~Ÿxä_ÄøįÉã`p Î‡ ŧŠsŧi隸įô- Zr†û1jƒ,ĩļ^@ëJÅîx]Ô_P5ˇōڍr4ü'ūdėFz[((úęžģ|=Cŋ|~õ#v‘›fČđmˆG"yŦÉĩ‹y6“ûėjņDėÉcīˇ÷­D!˛™ŋ[lkĄĒN;Á÷nfn= ëžWõ­ēÂm<Ÿ@ųŲų?{:ŧ&IėB8ø b úķø¯9ūYĐW˛™R).$Āđ5ŽĪ?tũT<6QäŋŌâĸ€­'1ÜōnéyēQΞé\"CŖZvvS˙3PŖ^‡~á WĖZgEjUR }ûršÄŠę’—žo{Ŗ€Ōė|”$äAįŖ9™t”y,-o4æKD0ë;žJŌîC°@ ÍŧÜķŪ›ø§î\Ô\Ķmģ)¸+ũ.„ƒã#‡ÍWį,1BoPķŒ‚į§ā1…k6#iŽŖĒÍņĮߊŋ^cKĀļŧĀüeZŊ;˛Y{EkßëæÁlz‹=CÛ]īM¯J¯ž§aTY÷šå‘ Ēvˆ5 pwh*ę%áOš}cņÜ#dpÃÛnøx–%„s¨8ƒžwîšH!{Mm´ÍČĄēKlģsĘōĻĄ;íZ‡°e ƙŋwņŋžéF”€˜P.ģĖÆĸžÎI‘)lŌ<æĮT>zHōĪEҘ z^<æ›!€mr^FiÛ,(°đĐ*~wË<ĶßŌ[­“¨ P­§ë–T[l¤z¨vbŅÍø”>,wū!“9\9PT>A0û ŊČųUŒ‚'$(áō6Ÿ¸đčM‚}4ƒ!PdІyöŠ^NbبņåTĪSxģÆVl׌3‚ŖlƒØ)AÕĒqōĖL°hÁv?Gb8؁Y—˜÷4™ö¤É ęĒ÷K§h=kâP 4w ]F=ī<ŸHĐÚ ņ%“SU YēKlĢcū‡…°¸€Zļ'\ ŋ…V-ßuôDÜŽyšD! ♈žķ?töÉ5ãĮđ˜:•Ŋy~Šg‚ÁđUv›oúSņĒkģ įŊrāŨqī˜‰íÛŠŠNŸ+aKš6’ÁũŊIŠcS€,Æ|>,Ĩ"ąÛ0ė§mĀzŌi? f†ĮĶ­ãÛUĐĪäŲb ÎOl víųĘĩƒ˜yNāížęßÖČĩ5Vߔ^n4ps>įZ §ÃĩMŗ øŧāMŌXn,ļ–īōB ÷s Õ Ŋ‡wgą’÷Š'›Î,İ9 ­ ‚æ<¤` *˙blė¯[Wé“ëũö ´dSļpG?îín⠆a6r+YÖŦŧlbŒQ¤Āļ %ŧį šö]<įũ…"ŸÕ1ųWO%*[›"mĀĶ&:¯›4H¯Ņ;į+čĀíÚĨįN÷<ĩ $2‹ĸ´=¯Ė]›ļb;‘‡0 ØŽfž l›˜Á@e‰…‰ûí鏺_ÁZá‘-Œ'ˆĮîÛnã’×+Å):Šö Šc[¤¸ø¨ŽĢēĂ=ô%GLļŨ†:ĖBĶķI)ŗ ę]"z ŖFyaz}%ĀËü°<.Rg(Lŋ2ŊnĐŌ>ëgÄķNāE™ĻGbYLúŌ)ÉøÂ¨ÎŊÁįEūp=— ž"QkæéDÃE›üuũˇŧKāũy÷U–ë]A𕠌9‹R‰YĮ&c.XĮ ۆs’(E9† ZEÎt<âÉ=wÁSļÍgĨĀBė<÷ÊōáJą1ZUņw‰mÍŊŗĻ œ“ŧ(h;`P.%…īäãoĮÄÎJtĐ5/ŧŠ3/&0Ũ ƒ´ J˛Â!“aŅ<ƒ‰•6÷Š |‚Vā‚ŲGŲėÚJø`ŧ*NŌÖ Mu¤lÛĐÅĻØÔ˙/í÷Ū?}FNKîĀÄ Tég2ÛčG9ŦwŽ ĘW†‡Ā¨ pœ”úč[ŋō`įåŊžép‹mAĪCOŠQ.|“ũ-‚ˆĪJՊBUĻÎæEĩŌܔåĖâblô:ČŊ4mķ'3ĀŦĖZAKŗķT ÷ˇœ);įMpfŗ'sc1Æ?„<ųÕô2ú“aĻÉĩ“Ī÷ųÁëyŖáÃ]OSáVØØą˛;ĨÖÁŽŒUˆÁ ļS7ƚ $Á5‰x3&ØZŠ˜×L$˜ Y ÛFąÂt:!Oyš‹Ä;™ųŨgˇj¯ĒIl‹Ž9B$ē[zžvIÅۘxėeÖHzüsĨp<ķ~p\ėl˜\'Ūs†Á˛,n÷0/;ė0Faé9Îwz_,>Ėœ˜^;Ō\‚×°6 ėôŠ>é:xĒCūEW =ü›ēœ|ŠĖš„ō$ˆTÛ6ĐĀéĩ5l;…īPÚâ Ί˜ņJ˜5:ö|āČ()Á ˜Y4ÍŗŒéņŽßZÉË`rˆWÅIĪŗG ˆMEëΊË7vJ†YÛyÔqÉ–ęvûæ,Ò0Qâ Ķb[ĢŖųy2ųĩĢ~Ú÷ƒ24Ęû&y4üē֠ņ1ô÷ļC‡Õånąm ŧÛ ,˜âĐWšÜ€å;’g3mâ*mˇ’0ãėxį´ŖÉL†sr&s>šzr(%â ĖĀXÃcĮō‡ŽßÆÜ‚­k´Čú,ÜgąOõ>įøā9íaSØIo:$‡ęhŸmdí†Znŧ”üëđhãPģ­ yK¤8œ•ÉĖÅpÂåd?9Ŋp”ųîD/–üėĀ2`´#‘‚5BbÉŖãqī^īIę~Ÿ‚aR(7âK‰q­ +a!‹§ˆÕCsŌĐõ°4(!æĩáp8—É,{”/LOæŗŲ Š­J[Č%)^š¨•cĪ æīĄž×)†dP˛Z‰ 7j|ī{8J[Bŧ€ŧˆĸ^ŗHH›ųOÎûȤîâ/ãü,–Ū—ÅŌü?IvƒęyŽd´92paâ÷ķŽŋw(ęõFBÖí3æ9ã_–3WBŖß^P¡§'é“ŋņÍq>1KB9ô'cĩ†ˆÕqœ¯cŨڞ(Ū;Žõ¤­1yŠŦ`đ īZųƒ<š-ā‚đG–čļE0(Ąũ`=÷Ÿ]|$ Ęp¸EF=Å–Bp­°öąq—Uã”Tô›ģkÎPPUŒPw]ėĩ54LLNŅĸWW%wÁb—Y#‰ęÅIŽĪy´Č"Ŧ{Øé1SŠûøŖÄ NūûŦÉDŲv]–U5•ÄÆÔõƒŲôî ’b‡ ˙€zŧ÷'īî”]‡.e&C!ëOōËÛļŸiC›LûH$ d9î…˙ņ×>įcŽ’P>-.Đj ›rĄT~F4˜€gÔRīcē^īIī\Qģ‡jĻ;šE?S~v˛8×oZŒJšU°Īljw€VdĀ<ÃÜ /cZžŪéĶ›Ģ` 60÷ÔRb6ŧšŠ1><ü°^Čj–û׌JĻšŧrwĀS¯t^;ų¨åōšĩ.f]˜ÄV˛ 0†ĪŽ'ĐÆ-ž…¨ļåÂԁsÁ™Đ™ååˇ?Š\Æp†jEWŽáώ  ĮFĪs8˯Út0jĸVŖ"ËÅ˙Öũ¸(c–[YŨĮæ zԐ¯B8”;ž]Ā’–ē!ūPūŖŨĐBĨ)×nІąfÅÆæFíî‚įHtHÕßNŪéņOŽGčđÛ˛sÎeY0cŠaĐĘ`YŽÃÆė2 ˙ŌďpĢq9ōƒOŌp3]‘ĀZYjLŧöˇkzˇ_\Ŏ¤Ņ°Wä Ķ‰ŋ ŸŊŧĖÎۆdڀ%1ZĮ¸îÅxJŦ⮕ °ož†š…âĪëSEw¨Ā$bķįM0‡Ük˛bP°ũũäs&XN­<0ÍžÆ Õ\–VĸÍ:ŋœ‘¸O~îŦ´Ã:§c'"5‰-ŠAŗq捍Ũā)Ník+[°Üí”@â]‹z„ļ‰#OĻßüķō 8yß4˛m†Lų"á_/|õĻ„ÎÜŊMŌŦZ Ŗė+ļĸMCÍ<ģáWLęMáO}Žc‡î€(˜ĩÁžgL†ä(JB°Đ-ÎK;=L ›ųĢÅŌB”Ÿ cKŊQ—ÅęÂĨâãâ]ĪŅĢR‰ä=­BnvŸą‰ û¯ƒĢЏ~§3ÂŌJ\h\Äh…ß,°ōüEAˆčú‹bĢō†ŽËˆÛR˛šYPôqi@=ŋˇ~­7<ĒZĨŠV,–bŽÕč"é)#ŗÛA–Ķ[āyŖĖéĐ ö™Á˜ŪâÜSĮ1Eîyė wxģAk Ąš"%ØŨ Ā3Ėŗ†hSAé́‘]N- ‰u×zÚ)ĘĶ2[}*d<ą.Ŗ Ėôx¤@ņ\4‘ė:ûũŨŨš§cü…pŽ!ÄZÃėë: ž…*fĒŨžSę_ûā;ž'Oˆsž3@JN€~Ô5ę‘ŌۆVWĶ Ĩ(ŪJSąŪz]§šŖÍ-EŅĮĨĄĀÃŒô…Ú9ÖÔ 72Å"w0č=֚v‹€Ÿ0^yŒ 92æ`đŧ7ôÖĀ!ĻĀ ŖcCąŲĖģQ~PđTD Ėi{/ЙäØėp÷­Zƒĸ>&ėwdiG´ Gōŗs–†[{5SŽĮŸÁ;ÃÎAKm ÷ŠmÕî&Jûry)!4›ŠœņoUˇ§?Mæ%gļĨ ķuÂ}1Ø*"å1ˇŒNžŊal —)ÆbIAØPēk¨4DšÛ žIXč7…å-i(gŌŽí™uĶÃ}ĨhČ]]š˙Eē÷Ž ‚‘™pĄPWmĪ 6D Ō“‡ę€įx ōŠuø›'ŪPËXhí ¸Ák…7r=7Ô=: Y˙Üŧ—Ėxm°m9x§TnØã°īÆîß%đ>4ŠŠđ_­f8洟Œ”ų‹.ÔAn={×û“Ŋõj;ô b­›î÷ģĄË`Ÿ!n9šÛ}[ŠEŲTZ?Ŋ"+ZYtØĮrŠÆ’8 IDATŧ[Ŋ'ŊCzJĢšn‹Xq=—w3ŲNīŪß?}Ãʝ†<ÁNėŠ^~e™œŸúēv¨o ´Ĩ €:Õ9DŨ-<ÕŠø ÁļĨŌyž;(ėX.æĩ'X‰™4ĢĒXÉCŪũ&Cæčrl‹ĩč@ŅëŨzQÅģŪ•nđD´kK4#ū*q;¨Ė$ôĸāĖÛîsŒbŠļb§1}`f-v!„ŋŦDφ×H l;4&k+ūņąoI°íäzŽÖ-΅ 0jnuĀŧ­ F°­Û#läĶ•ŲĮ#‹åĄ––Ō-nƒØé‘#ŗ#Ųúoú OLĪzhŒĻ(oaTYoIîfŸFŊãƒįP¸āc3댯5}x{įWĨ_]v6Ŧ~ÔÛē›éŠ5ĀÂi“7 6’ŸIæ(ĻGzg0÷ąČârˇ™“_šreWđ% …î žÃĖģ…gQŧZ„ŋeÛ⨠ĩž>hæœXˆ~¸ĨŒ¯AŸzĀ bx2ÁMcÛ)Ö[–$–ÄRĀëėĄŖĶ[9šH÷~"Â&zŧģÁĀģÃØŪĸuAÍÚüŠĢž¨énc ÍÚ^§LÉpôåátW°#‰-ņ3žƘQķ Ø6[˛wÄĸ¤énô<ũ°ųo“qĮi_yĮŨFĶ~6~+ÚË龜mKņļŸj‚ŗ€į%´SkŌR\?zû×ÕfŖ‘ėÖšžKāQāčV@ŖíĐĢ}ŗ¸čfŒE0y=/؜îAB…Āû‰wĀãĻoZępĖŗž%ëy‰=ņGŌî #q_Č ;ĒŪ¯æéÁƒ§Z^7õk5ŒLŦį\ĩ.ž:)v\'´œ }æ1XŠËôS–˛-•‰úÃKÛ’÷Ë<­ æYšz^×ķôÉ)9pđ´2ÖcڔŗŲëœ{ČąÄ˙ÔbœŸâ­ÎĪ ã™Ō×ōSM‘'.ØzĘfЉŒŌ6SZŒ-]Jb5˜nĒ NQŽŪüŖhÆæSĄVTõņ˜‹a´Gŧ‰ČLh3ß ōŗ‰ ģmKgŪļņúųœĨČ´D091ƒúņ7ËÜšGĩŗ_G;|ŊˇŊ^í€fžƒž÷ í”ŅY¯5đĄŪhtʄOO:sra1îkƒv˙ D^BėFĖa,būUãõĄtf‘ķš•iph2•ũīŨ~qâ|yĻßČļčÕsp†x3īæ‹g-īe}´ ŒZ°ũęÂŅO˙ŗßœā (Í­n<ęīŪt<$M´ÆŸxÜVĢÁsæ*{}>·ÃFáK4Ī*›.î6îžÃĖģųÕrKtGŠå˜ĪÍú‚,š‰xÖŋEq˜o­|&jvđށm¯ōád÷E빲íiL*ĸ^xb].|¯'ĸējt ¸KāŊ5c—Ŧ6ŅŽ-7]yE"Ž‘‡xŌŲ@é/cÔRČ?°ĸÆŦŲN>ŧ=Ņ.§’ėždŧĸq¤d&œģ b".0á5i÷ož{ŧ^ á4båŪąí;/ëĻzgÆ$ •­oInXAķ_ž?=9j2āë=f=ĘrŊā™aņs÷HR Õŗ…˙õŌŗwfūéOH0¸&1C€%Ļp͕‰6x3OũFûeYO ­ģîŪf-tœõ=mĀu$Î_œĩ›´Ÿzė& 7§wí ī Ĩ˜pú×ķiR\äąī9B¯Ēöũ‹ģŪķEĩBŲ6•įV$WÁËą4O÷C&7sykä <9^Ī 3ŗ˙ĢãCģĨˇô‚÷ĶŪ“Ė­GĖņUd­ėr!f††4Ũ(î,[=vŋėžŖ ĖMRģstÆ8…?— ĘĘqÂS|"i[Ŗlë~pېāÁ‹&âbÔįN†ŖŅ˜°‹Ü‘Š„øõ]Úë"¸ļ ĸwŽííö?`€Ą†ģíKŽY5Ē?ũ.Ä—˜ŗĮ°a’ŌûHâ]Τ ]€ûZu9ųŸųÁHMVĒëëk$đĪņ ‰ÛGˇmįr°&Â?ŋ¯aæĩõdŠĨ2ŸŒ„Ņ<+aCÃČfŸpw”æÁÁ]“ēßo]pX‰‰„CųUĐĪÔRŒķ"GL˜`×ų´Pō1ŧãtˆžÂF}X:āPā§„ČMRØ~ļ˛EûąēPBeLđĒ:hëåĻū?oģˇŨHPë ĀęõÎ&uũæ×oŌ1°ÎŠlĢđ´SzekFđ‘ŪfãL“ųx‚ŋÔlnÖÚŖŸ*›ÛA=ą—7æ0ž˛uh!ĄP–Ūū į'ŸøÍ?~,‹]˙0ĸօĐqĀÛ=…3īų—žüi#šˆ¸Zūõ’éȌጌĨÚÕSãā`dKN›'tíž páqŦ>Ī„ėGŧä_jíäÆ:``Ë]ĀŒ{ Ū6Ū@9ū$ÆžģV5ŋMĪrÁ+—ž‰‚åe”|§Ėãļ@iŋēŌû1s>7ŊažÛbaPœˆÎOŨpGk<ė‡Q0tĄ8Īû‚Ŋ÷=­\æâ؆Ŧ˛Q@!ÁŅáYũļņE‡ØxœŗœĪ nžŪ‚é‹Ĩ-. !Đ{2oLM%īėčd[ Ūîacģ6 Ã]䋨7ö€UĨë•R]F°Ŧ ļÁ+Y.˜ø!ūíū,;•ˆ„åĮ˛Cü‡ŪX~3AÚĘ7P< ‚ˇß VÎį…œ´ænÔūōŦHū§ČÔ|ÃĮ˙KŠ#­ĩđKå%ŗž*°°õĒËÅîhŅDōÉĘ˙ņŲėÎBË<ƒ#ĩtPō āŊ ā5+•MŦã~ũ "ƒirI¯Ŧį¤,ųį˙Ŧ ĩĪā,pųž :ŒgĻbFęöŸJ$šŽŨd]›†ƒ‡9+X‰Ømäŧ užjš~{qŅEÍãØnaˇždšāĐvŸO:1XįēČÅŧ͟͜}_W ¯hXÖ\t ¯áÁģUEąą™?ã6t´orĻ8‹‹MũVõâŖaōĩUÂ~ĒK<âtÁņ~ģv“ërv§ æĮMų°?pö#X§ąĐĒr Đ ĒĒ`|Ū›é€û‰ĩˆ‰ųÚyø†;‘Įpmąã 3 2Ä!†ķNĪíSą Ū¯¯f@‰}Åp"Į–°ĻJ֕œîqĀ{_ՍzĒn)Č6 ¯¯įäēĻ—bOƒŒ˜~bŗ Käs,yĮéėŦS%.¤9`ۍü™,vwôENįäĩk5;znî~Ū­S:VŠ\q?Ĩ›É‘•Læ]°Ŗôd% v-9t˛ņîĮ7É'|S Á銪ũ>‰Ön,y}Ķ3++‡ČÃ/ž†=O¨n•đ <ũ”^ģQ:ī2p‰ ÛÂ4ŲØ,ĀĖû[ŠËĄ“ЎS ŒÍ;V•;Ũ 3đY?mš›ŋđčOáŠŖĖšįxŨļč}ØĮNŨ å"Īû—Šdå‰MZ04–ŦčM垚gēž×3ŒŠ]ļŽŠŋĩˇÚˆĖyŸ>ĮDÖķščĻåĨ­D&˜ī|ö#ŋ—›=–eŗ+keK.Ԝü*w—mŧ–’ˈđųų•C™ĀÂÃXį2ė9#-˛ü°XéV-™`0˜N;†{HËd[lȒYŒ'0‰_.h˜ˇÔKšĶ +ā}ė|"wāQōH|–? úŲÉ  „ŅßĶĢčVŦĸĻŸ5ēĪG3ák…ÚĮŨø ]k¨˜*Ē8”´ŋ‹ā=™GŲv‚;‡Õ˙˜âų%`æ§XŠ|f+_¨í\įzŊö-?`ĘĪJ6ķôâtōũ y‘ +ōG؅-)DļĐŋīBR÷8ā]ŅģÁ=Z#"|Ãû‰aÁÅ"ZĄiŲ_nˆÉĘZ÷ÉØ7$ĐP˛5 ōŋ0ŸˆŦ¯­ĘŅøR‚ĻČcļRīÃë Úō}ŪgĶĒŽĮßæųG@ACúâ|ĖGføÚfvÉr=×SōōĪŌ‹Kķ<õâŨØ)Å@‰Nã8ø÷<ÛķŗdŠOęÍ­üjÚ˙M0ž’hŪ!0ŗūPWjÅ"ĮôŨęd0ŒÅčĪWV2™nŸ…ŽfKīŠg5ĩņļÆÅ–\ĶvîŪĻ÷ŧÛŪŲēŽĨū-ŧúƒXšņ•D”-ƒČLU+=!)AڏŖ×Ĩ,Įĩ„™ŋ8ķī"—BWkÅwã" ō‘wJåōŌĨJ¯fâNÁŊOęzøCxš7|žŲį°ņ‡Ŧa]ßLX)ÔõÛŨ×ŧQÆ,Úíe ZŽøū0w&›)aŽĪ}ģûä -7šÍŌA’ĮŠF´@ãWŦUfæ¨W:B˙ŊO˛ŋõË×u fŒkf™;ƒÚå"KVĢsö˙ åEb.ŗ 0h…PįūƒīĸØŧTŨŌkĩF9‰…áĩšKÁ Ãƒ÷֕S(mŊ‚ ęW×ā•°A[4ĄkTBႮ;äF9 $h˙Õ0-”LéøōÂ3žĮ.Å˜ũՅ ŗUMuxpͅÍđĀÃô)ŅâēŪ˙ĒÖYˆø37JĀļI#c´ëą'“úOėg2<›öüē"\›qcwBŖM†ö‰Û úqŖˇĻ{^‚Ā“\¯7JŲŦĻģÁJŋąž)›–Tu÷ȧžđ,ũk0|Ūßĩ e€f˙EdÛ" “ÚČe‹;ĻzœŌE, AÜ-ų*öÁÂĄŧ āŠn­y“kŨ#,K¸ØėĨæë9Ë´žŗú“œüŠžö-”Â<ŠlvJ5•Ü5]{Ę^ņl˜fÆ|AæėĖĀ•˛\TąäǰQuÕT—÷Øūūūąo÷Á#ą(a"XWĀ3Ũ´õÁû™ŧsûVOÚ#G˙úŲ@”gÂ9Ô팁Lņ¯¯æg×9Ū7ƒôp÷l “1Ęģ!Ú‡zU4ĩû)?<đžvk^›0q6"åײ”m-9'dRˇƒįcÂí¨ÉĐ ģĐ)ųę_-%&üíwļˆjĪV^ŽŊZŠĩk…}FąQ[Mw,ĩōáaũoęģæģ[ō›.€wį°Kzž#=„ˇ1š3‰t5H6_GÍYß°F杄Ķđ\8‚>üšO€kč_Đj'J(mŊFk\ThƒãžæŲ;/ëĖ×ļš Ÿ'ģŸ>vķÂYLtbũőĀÛ=vpāųqæMFBšÜåâߨö}ŽZv§ÄĩËžwCļ]3ļĪ‚ˆ‰yū´!OÎČ1X@Ā4ČÚØĩBĨ{ûąwņđū|æfôĢgŋ~ëņÃ7šSw>7Ķ:ÄÜzøpĪų:Ēžd}ķŧÍ?ڹ׃N%›ŨŲÁ&ē€|Nƒš˜ÛĪÄøsĖÚJ& Ļ7eYūfŧŧÔŨlĢ5ÔT˛ŌŖč}ãëúÍgo=üâŲ7īˆ/ß:vė֋ŋÖ:ô᎘‰îĶīåƒĪJÅķ<ÖlÛ°•¨Ô’ØũwÅ+`ûE•ķĪ ‘Æ$G}3%•)Åá—8vĨA#á 5ĩņL˛ēUP°€zKīĖģō&‚÷š—<ũå[g_Ūí´{{_?ė°ū Ū›KĀXAļ]Åbî6JĢé%âãg‚}ŽŊ82ú71X ŠXŠų“ĄÜq8’z–ļFJ˜cÃÂ2L?´eXÄf÷ʕ?×o6n=Ž}˙&x§:āsĀe0‘<ș‡Ávų9†˙.œRí_ –Up•8ˇų_8—ÎæŖTŗäüÔŗá?øS?ŒŊĖ–N`Šü&&ņŅ[cLī^‡Nxú-ŅīN7xæm/xöž¤¨´Eō{į|XR{CīNÖąŸ—fįčnŖ'`y~6jãĘ1ápîxĻ8å#‘0Ær—qáÛÚúnÛA‚ÁXØû˛*%@Bđ~Š3O´ƒwjdđŪŋr zž—ĀƒįW;îß•hķß@ļŦÉōžPŊ*üL8”Ī.ctŲ‹ŸŅūÖĨÉ;[yd۔ č0û°h'ęyĒ“Ņo÷cŧŗn€wë - lw‰ AĪ͞Žt}oĩšÁcŊWx 3šļ’Θâ#@æŖül€92E<×N%/ ‘°Û#°­@ũĸ; [ƒG'đÄ]ŧ[xˇÜOwŧlGą=ÃÄsB÷vtŖ_yÍtæD”÷ŲÚaßB…pŽđüŗ‘°íB™Į}\ĐķJjYŦŠ“°v{ĸÎ<Ņīw)xw^l_ôž6xޚg=É)^Fđx@m+.ôTHmXO‹FŖnHXÆĶ6k‘<„˛-ŗ9 0=Ū(~Cˇ^j4Äę[ŠĻp`o`‰=ŋŨĪxGī¯ÎXāš*0e%û@:P|cŅĐķÛˇV+Ä#e,U},!Ū&x(m—Y`ÛH8ˇ’)žÁķĶ‘ŋ•ĩW˙ũy­önéí˜Čļ (Ė •FŌąöĀÎīÎŖÛvôâąØÖUđmo9î‚/B<9ôũ˙`ĮN¯ī”Pž{>B"úOBN/ …ĘĻįY„ÆíÛ˙2˜gßA}™úEÛNꆞŦ(ŠÜ#moéˇÎšāĶŋāYŒīŸ™7ÕîĶŨ&LÆÃJøånwGS˛ž 9lÔ; žąn ķGŧŗ“”mqû[Ā„˙ĒOEž-ŋ -mĢ`oCĒxÚ1:ķÜOqŧ‡ēãŒ%6PœãŠžˇŲĨįũBęč$´ÔœļA€žéέ zņâķŸxöQMO%„'ļ0é[Ô+ēRÛÁjlĨŪ;ķnЎN!xw΂~įxŌ¯¸ ^wīFū˜ ĄÜŠœéÖķ4Ŋ[5Øįƒ°2ļ|đ2ôŧĀ–ø%kŲëĨ˙éÄ߉;qާģˇĀļq,5]¨›Ņ>ug/üöŠíÒxķÔ­cú)ũđ­ŗ_ß%g‡Ī1ÜÂUđ>×= ö:a˜ŨÛ_¸ŨčRĀ>X“zŌ€¨5;ã ­H–nqK*¤—'¯÷Ņ´ķ]€‡đí!x]ũjĢ÷“8re;ŗ×ÕŦŸX/(ˇɌF÷Åđģõéö&1ßŪéQ*.oM Ü-ņŧĮo/×<ÖŌŨø­ƒ˙ÁMšR;ÅļÖÖĸ@ÍËGėŽSŖ`žõ doęŪĨ0ŊXԁ†ŪFÛ ĩZfO;Â7&ŖbbüĒÁëlš c¨Z#¯8ÆE+Ũŋˆåˆ•%¯O|ëÃaŅ>8]¤…-ŗ|žxéŊįuC÷ĸ§čę%uųœŋˆˇÉķvDāų„މŨ”TEĪ2ä8ųûo÷v,įGÎäķą?cš=J¨šoz?đ´Ŋ¯›WéŲ{čŋ‚^ūEG4´Ō~σõûQ@e°œ…VÎ}ÄŲ*ZûŸŪ{%ž\úNۃhyÜÂ$b’ÂÃ$õkžIŽÎ ˛ú&"(ļyŠũƒ7÷ˇČĒÅTn1ēįvëíēt{E ø¸žŸī˙ŗ>9˛„ŪÅ-)lnNזqæ5ŗô2ā­ü:ƒ×=øĄr”e#"rļu|p-˛Å5D)€wÁc–OãđqYų~0°qŒ0˙]HîYØ ”’ē ƚvÁŧ’éŲģoíɂ'Ø~˙Ęäĩ鮕hŗŖRõ[yŪ‰:&|KÆcV—;ÉŅ׹gŠļÅR–ė„_ ģ#g^ķŽm#\,6ÜŗĩÎ ŧteĀģ”ŲKS…e;ŨUb ÁBČaᏖŌŊú7l~ vąGŲũ#LkÚJßĪüŧ-Ôļ4žÂx<(ŒŒ<×Ä ô.wåÕüL›R'‡‘ž‰ã3m ŋxtŸtynOdžc÷Œ‹ŨSŖƒ6īę9SŖ}”XžäŲ.‡ƒ~HÉ"ˇ€;ŽÆéĖģŋO]ĖGæ$ŋĀËtŋöAÄ|ĮÆĮt§āIf‡<ßĨ=õm옴kČÅcˆißOģ?üN;ĐÆ|3w€D+r (vÁū7ȋ8Ύķ˛2~ČpÂMí<Š-…¸ÔŅ+™uˇÜÙįsîiHęV§ˇjzC 8#÷}Ø‘Ō­u°Z7rúXü#LsC€'?žÄWÖ°Įb̌Š ļîDĖNF{ÃÂÚ}$žÎĪHúŸkÕ' Ūĩ=IŽ] ûĐ}%JF ĐÖāé9¤~?ĶŽ"›û‰rš‘"c4(žņ€BQnŧ*X,LåK¸ˆáMķXƒĄ=(Đä‹fĩŒ9xęہįÛcą=Ûú'+ø­Ąap’•w ]~G`ęn…y•=Ëú­čžEDßvŒÍÚŅ”ėŒÅę}7™ēxĄØ–1hŗ‘ŽĒ­Đĩ ÍížĢ9[ëäĢ{^FÚãäF^ęS˜*FúãœãŪŦL |Ũž; ´™œ`&´+¤Ÿ0p7E9ŠĶˇ˜+ ͞EĢÛíÆĸĸĀ ö“owĪZƒ^æ­9Sé+ŲmÕ>MX[“´S)IĒ6dĐļĸøî ,Vp'°,Wxåė"s¯c˛7kN0×4{'׊…ÚĀĢ5Ā[ː&xŅ~ÍĀka8Â$'7Čc†FCÚM,ÛU4û~?3Œzט“uâU6€LÉķāžųišmŒæ |ãX‹&˙oÖ_‡Ņ¯$ˇ'I#>ŧ—˜]‚—ŪĶ3ĻClI!ƒ{ļ)ĩ}´ZČķî9ö:x֏ DæįdL9ڟ8„„!8'ŐgaÃ3`į-Ĩĩî°C;xk+māaÉߚí1ÁĶöØTaŒįvĀ,˛āz˙ŖäŦLMā§.w€×YLP0ĢxÎNŊ ßčėėč~‹whHaqø(&Má>.Ļ[tîŌ6sŸ×´ģŧ›ÔTi‚÷O­ÚsÍÛ[đžiĮã0ŗ†Å(‡Ņžč~ÎÖSeģƒÅd<7/+ŽöČK\œĖ”c֐ĮF•Ã~qøāÂr9Õų{PāúĮPđJšnįiuS儞4§ƒ×u^ÁKī­wĒElq<͈~ƍˇtrŽO÷ˇė˜1Ļ=,âAĀåpŒ‰g\‰Čŧâ¨GúŸë˙6ÛMĐļ9Üp¤š?ŧĻ­o ž*ŠŌÍĮīŌģg͙įĮŲã%Wįg3GÆ,ĸåLWúaMK˜9ŗ†ēvĘ<ČEg• _Ã%)ÛŗFOH$bW(sí•d ÷šãS­ŧˇĢ'ŧJāÛŽĢ đ`Í[Š‚øŪŧYę<“TŌ žĐy€‰×a¤yîOĶ™ČÁĘO0WĨSlÛ.—qûŒqš“ķʸîÖŌHBū9EX–?ĢīhÛ¨cÜī§ŧ`æĩēgZ~†2ŠÖ (ô5éî]u`ŽTÅĀ€4 ŠĪ”4ÛuęaŦŦ=x'íéĖ;ÕÂAˆã#ˆXėÄüĻ|pĻÞmœĖâīāōD"˛õckŒæ-,Ž$ĸlû ‚šPX‡ßb\WbO4ŨæŽģ|ĩÚ2Ĩî6ėk˙ėZ˛Ũ=ĢXxÁcœŗ\,[øG[7xĮ7üĶޤ”›fĄ%HˆáŠ–nû ´IT›z؉ÁP žÆdžaJø—sÍbé#“f%ŊwsoM›Ãģ#đr|0˛Â •$äĢ…Z[ŽxĸĢģŪô_n^ŋaÜq‚ģoácÚ}¸“HųqÜYŽ8āf„ŧ†×–ˇAŊÜŽ§lc<ú€âŠŠkRååJŸüāUvc’\ō´`D7YÃÚømüĮŒÄbĢ…` #māx˕Xë㖉BüV¯Ûz1œV‘.ŖÖĐ{=‰įŖČ™ÜF. ÕŠiÜôÎĪHZĮ0Ŗ‹ÚvôŪ.}[3ËĐ\ė8ÆŊee|Ŗ*ĩt#ÉņæŨ¸˜w~€uéOšõ-߅Ķ~î§áde<(†xĖąŽ#,;IŪ:Ŋ؊Ōn °ÃĖÛ;đÖv ۞ՄOQĖ Đ€M–evt0 Ôŗ€3¯ĐõŲ Ŧ篘CoØGؓ8/UØË'ë;›`ė~íųTƒ‘ÖŊÍmú?!đŪ~ ą59Ö×ĀļĪ:‚*);ėÉîē>ēVw\ æKyĐ-c8ŲO¸…4 r@î— ?ŧļOķO´ô$ ÚyaŠõ†’VSSZŽ+'æI÷Ūc0úė“‘Ŗ¨}¸åæk|Ų‡zäÔÄ 5ÜŊ’ˇ…¤@lĮiųr$6›3nĖâiŋ92ėōÄi’ČĶ^ŖlŗÜē ÔSå<åôéĖ}†Qy|æFđâž=œyr”´2Đbœ¸Ī/Āō†o )*;Ōč –Æ=Xč§/ûšw.ĀYÅw“ 'h’āĻWķØ#ŧxo?ĄäFÖ.XEŦūL\ĩΞccƒĶáŽâŗÚrŧ;{~–°Ö¯[§D°˙û>OBÃũž„cöÔl¸)X\ Ÿ îY ųclėmãÂžĀ›{ đ¸-’$ĐZg”“ék˙ąôM‡°f´ũųÚ;Ų°Ę(+0^ģvôŖĒ:čŊ?IˆëĸCš… ˜ŧÄ6‹ÛŪ6ųDkÜŠזĶ_xéŨ‚ĮŌĘYr¤ūō”qZ{čŠUčdh€‡~ˆ­;Bö)‚ßę÷.Pā1Ŗøį˜ĸUn‘ĸ!‘R PPŖDŽīsļÜJ]ŨÄVW s/ú|÷Ļm÷Xléđ§yĩí<í$8yv¸ĢĘé3^îÚ=C/ÃĪxâˆ9˜Õ¤Q#¤*āW:•aMą5Öļ”iĩXðCáąQûU‚§ģÆęæž3 9fčĄ!v’Šu‚×AŅ>24˃TúÁāöā)âĖŧ‹QĐ>Fyâą+ĒL`ļ¨i…˜+OĻhÁŗtí@° më¸Ņ fx>9¤°šN*Ž6SŠ˝[7į™'h6õņŋEŲĖ`hؕˆDgYđVhœ ÖūZ~šrú¨`įĩ˝%xœÜy„iŠ­`œ‘Ŗ,øņāČ3W–:bÛîčWû~ځ„ØOũpëA8c!>¯(Tl“ķ ļ~4Sh&ųj nš6b‹E{’ļUÉh™ČہwyoÁ3õéfĩ‚Ö$vû~€ĀĖs?Ÿ$ßëøāBÎD[s$Î)Ų aÄåÕÔ,ZÃ^šš?¯ņ˰ŖūõÅĘjŪĒ“QĶlŦ9{ĮîɃg1qLë ĀĄēØqhĐ`ŽK{°CÛVÛoÖÚ6Ē áŒ‹ ÚÔ$ĪqÄ1ļŸįíö?ûŨØĮĐ!`ˇŌDŌėQĐØSģŋŒqĶF!ĩĒMŨĸŽę‹ āNU)ļ iŧāčYŗŦ?≧c)o€‡}ģQGˇi ŸŒFŗ™Öƒ.ŗÄ1Š{ŋH\6ŽŅ(>>ĩ;F:ņŲĐŌXLUĐĻ;É ę㒠}\•øJ}Õ_1xfpjáÕæ6tW/F”įeŌ9ķV鏑ú~˛yŸ‹÷í™>˞Sąõ`#ŒÜDĀĘpôž,Lj ļÔR)ĩ€Ņw˜pŧáļō^ÆY}Öysí×<Ō¤1sØGĮ0žĮ×ß8âûāÛŊ3đSfõqKÚà ÜœØÎzã_ĻâöĪ ßz͘l>8u.ÜMŋ’ÍIÁķŲ>(ũ€ĮuÖ ĀđÆõ˙­íQ{š5žÅŽ`hë)‰ųYÅ1Ļ×Ōfs >1€ĘogÎx`.š´ _Ž]¨sSDUŅ?ۊr°Ã”ZéŌåĘ[[đ0~Qā™%ÖqŅ–`¨>ĀKN ™ũ¤úUDļÛYXî†y{hÖö˙M¤īú/"cc2O;0ƒˇ)ÔjÉ* r‹IÉy¤ũ^ŊģEŸoOuV´9ĪhÎEą¸¸TÖęŲj_ߚTą•žĒT đ. TŪÜđ.햔ƴ™9ÃxâíGh%™2Šdx8¸ļ~#ÎÉāŦúqv‚ėpø÷[\0ÍZĒ ¸CŦ’ąøLv0Ąîq'Cžzq5˜ kXB@‹WŌNžå×QY&ã[[Yã}ā›1%ĻŪ\Iĸ2\ōũ’Ė›~÷Ūž’ļᆓívn&Œ~šõà Ŗ øÖk,ŧ@ä¤C5Ŧ>jģnEą VA?ÖDĮ…€H)Wŗ”ßÜ<ŠœY{Öš˛^áŧRŠÚ˜y7-žm{[FÜdį.ÁģfÛ[đęJØn”@íxPjũôxë[VæāBd^ąOˆâYOBÆC pd™H§GW9ž“ B^ˇ{™¸Ū<n¯]níÃrŊäsŪŧ[=H­WÎ;uđ¤ H €ā]š[;Œ˙;Mv‡ēÁ3Aøšo—āQĮUî<ÚôŨq€ū˲´ÕŒö8^o§7cܑįG6 †\pĪØ–h—ã09)ōžøŧ=BÄŗ^p=”ė)đ\Šž÷Jm)ā×ļ&ĮcÍĘ\Šú ôQŧŠÔ§­ëEļ›Ĩˇ|xŦŖīh¯āmĻw žŨŪŊîÁ´ī8ä,[ŽNdÁ´mL˝KĐÎ;čq_”É7'[ޝ'ŅFŋ˙ĒȀ}‘ ÚψgÖâģJ ?EÃxTíĶ-ˇ§āUĒøØ+ÕxĪöi+´ß­ę\Ą=Ev ŪÍ]ƒ×ãpë՟ÍqŦųáZ‚†_ęƒcĀiąã$­÷ad#ŠƒŒ„xķZ,t'÷Ž5t€į’:S˛wÛæ75Ī× zfs{ŪĨĮ“ģ1üNíkũøÖp¸GDš"0­ë&üwā(ĩxāÎö "N×X1~íŧÅd;I#ŠmK`ˇÚĀ͘ š {îÁëõģ<ß.ÁKŋãÛĨŠŗi°ģ KlépņîÆZØV0"ƒ–xŽwcđĖŅģ€aOzo\}ĐK¸XÔ/ībę!ō+^Ž\žûA:Úa Sˆčä›.ļЛ‚÷éüCÁķéāa¤]ˇû \īäŽŖ] Ŗ›Njųô8hWÅ1ĻĻæ‡2= c€įÂ͊ė~$Āô•ŗƒÚõŐë<<]KĨnįōŨ”7xZģØjØ}Šv}ŦúÖ×)xféO<:ēŅë>Ō9ZŋDFaZ‡ēbK8ėˆĐgut|Ėzö¨›Ėë›"bĢÁD‚!8*žō$0 ~ûĸķ­Đž­ŧŠ$ĩwa—bģ{ÚKe ƒŊĩã…Û~:ŧ ­Ô#ŖČ´ËĸÄ´4îĸĨ€)Ö.øq7cŠė8%XŦŧ;rü"Ėŧ)‰Ū§æŖāũ •›=ķ™wéŽFÁSëāíVaėžöĖŌ%Øá`—Øō¤Ŗ0[h~zœKĘØÕŖHí6:Z˙AŒ’0NæŖŽŅ€xĐ“āæ•ņAél‚ØÖ˛+3’V[*ßΧ6´š–ēŨūpTÛĒíāÁĄTižūhũą†ļˇÜđ2›ių )¯ĢĩmŖ¨ žĒfAKxy ”@ļü"ũŠ{Bwäĸ’ŦÖŖü×ę_öÖ~ŅvÄvIÛĖO‡Ŋ? YŨ!äđ>Ē6Œdį§uđV(xÕ_x˛ųŸ‡[ķrÃŖ[ڔ° eÕ/¤ö2vnåÜzônŌ€ÎØf?pßî€÷ÚA÷5$MKŠjĄũÉę?‚ˇRĨā5ŨŗķΛÕvđ¤_™GŦŗŖh$īgD/O˙ 6?[&œ]ɂÁ ͜Åņ1Ŗ‘7ë0”Ē%ĸ÷ãŨŧŨĄd~+Z=ŗką=÷ŲēJoŖæ‚Aô\ęģ¸õqĄtŪvũ.­ŗ¸[1ây•ˇ|2ĄāiΛxģÕļšĄ0äG…Š; Ī6Jļķč)C¯pŅØm}ík~‹ÕBĀÆÚY;+B-—ũ†NŅÍ$æĮĸ ŋ՛xĄÁWø%˙ąpq!ŠiyÛēĻMˇy*Éî+õ­!6ĨuÚ­+C*oH`.Q^=ۜŪ‰]ƒˇ[RžûĐ)3Ēß&WĘ'éŦeÆ…R1ÎÅX冠ŋOkDy=y̓bËqؕÁ>q”ID>AĪcDŗĻ°1ē$ũ ĩDS›<Y{ϝ2@ÁĢö•tđĒD̃7g“Ã{ÕgzǎõuŸôQu—‘dĄ=˙Lƃ&˜ÃšūŒžhÛ5˛|ųöO0åŠ$ĀzÔYŽ#ŗė¨ŪŌÛ.PR ęsņ˜<ŲSn‰FĮ'„ioŅ“D=Q¨ßŽŅ&'m‚¤>>Õú4Ú5?ŨG<•šžKđ2Ĩ]‚‡Ôã‡xN2!x˜‰ĮíŽÅ z2c3z–ŊE#ā“a;=¤pÕ Āęŋ×_9žéŖ“ü&DĢՓŒĀ9L˜į‰īīĒī]-cã•ĸw Š.7‘ÛgkÜļs&‘ÔžĀ“×+­ļ>Ĩ°ų™2ģlpÚ¨ėn‚~—¤āH:rÃ/ŲFŽË•˜bÚϝÄä“wã 7m …Ĩå%[ÃZŪŗŅxīôXJ° ˙ ßōēĢß^cXúęā5ÄļœŊc=MŽEÔīÅD ÄÜŗĀ$‹ŽŋęˇđäÛŌ_˛Ɂ;ւģi1PØëYN–U-ŋąQ\Ū[čz/më <†īõNžî“´ mÃ+ÔFŪŖÜÚŪĀĶKFM÷Âļ~3:n2Ü=õ('#XjéiöWÚ¯ōæTČÅķÉXL ŒXąÖ6Ļ4“MORđŧnN‰‚Øc'åË–aĐŠhf°O[Ík3SWÛ˛Íڋ>ađv[Äb.ĮöS]‡,FYL5ČŖ,ú'Ãb6˒™3˜%ÛÁˆŅûŸĶáčķŸe°x4ëסs xņfô:É{ށe|Cą•ĀāëĄu͓o—†đˆį3ž˛ąž›Jųsíâ;™§)ėƒcÖIžwGÁ\ĻĨ~°î§m‡X{ĀB>ãO‚įq„e-VŒŋ`GŒāŒ^|ļYh}ĻÕ/ ŧ]Įķ„ēĻhS”ŨĨtČdė$jtÅA?ØāTQŲÕ[tš[H*Ųq4‡Ũ|$ję=y?e($LšAūę'Ø*ˆVŽcĄG’5-ˇ9­§Š…MIۋF6Ŋ‚§ņģ/Nē)ĄąƒĖĖ0N%ŲP1z ^Ī egFÂČ@ (7ĸxÆmPÕÂ%e(čh˙Қŗė„(‚Âxž°ãdd’& ļëŌÁ+ ÷LŖp]ZŸ xęN4lĻC0=jREŠģŽŽSŖēéŅ/‡7ā¸÷"ˇšĀˆHâ\ŧyO+Ķ˙ˇQ)Ļ=X;„EņE7‰ÚŋtGĪ} šŧßĻƒĶĶØ).—?}nëbÛ'ŪãDUøG9ųé:2QÂjFcC‰ŧuđīČSá’Qģ}ԏ¤D™„Úyå–0rfsÂKĮ-QōĨØÍ­ÅB…qlqŠŲ™°ž‰b›ū5O6Ÿ|[ÍbÎ-¯, }´Œū×yæ\q.bûÅĐs¸ތ2āĀĻ(ųh_‰€ēšCĘŊWEP'(šĪÔ0(’ōį…MŊcīÆĖ>ė\¨¯,ĨŅ„ųĸĀĶv-ļ|÷QĶ~ tŒ5_^n‚įNΖU,RaÜÔ,næGĨ6v$ėr'ėkmũĝ•ZégüąÅ•ŗ…Šœy!'•’O‰z~ø$áíĘ=–“Žš¨âđ#ÃÍB"•Õū| ͒M\| ÚæŒVģY5[šŊh­ĩķÛ¤Ä÷ŪģOxä+˜pqYÆôŲdũØũ”–ØĀYM(´QœAíũâ 8[‡˙ˆÄ Âų3O"Ē|é!卤bé ž‡Øž°ˆâ Tl—–0ßBĶā­)īĨļ–6Uû^€w)ķDÛļ֑×ęām%'<Ĩ­ģ“I‡Ō,s†aŋ1€e“lGũ!tĪb÷&ü"F˙ä7åđKEi1I;8„ŊË´ŠĨsŊk¯u›§ú:<&x—ŋ8đŽ|_x–Ęjíe†0ņÕĖaZČhÁŧPwdÖá@FUw2uāŅ5ø+%üw¸Š›?´U"‘ž­mž‰Å÷jK–ÔÆ/–šbÛ^ĢØVJŪG ^ē°{÷ėQ†ž`ā‰ãëāŒtލfä>5;:æˇō4YÛ1*ú÷‘&čvl€ną„×=‰y{öĄÕĪ€•’ŒÃ!ũLĶ~Q #̓%UŖ1ޘ‚×:(xŌã‚įĶwĪä]øÃčL‘š3 IDATƒ.°XW˙ũī>ŋXôâŽcÔ1ĒWQÖŗ žF#@VėÄjõz"åVąyĢX>%I/÷•ßBđ¨›1/§R-?Ŗĩ_,57 [įZ;x4Wå‘Ā3ë&ėÛ­‘,<ÚéOgš¯û—–ĘŠģę_,ßhk)ŒÁPP ØŽeiŖVVø‡×ûŨ„ÜŅŋëČY/œÎjų`Ŋ1õ&Ōúc6|Û' žôä˛áÛÆaūGÕD_pšvUb‘f $“A í^ÅÚ3ŊŒYv4ŽgO‚Ql#Ėz2ęČĒV‘Į*dĒ…ąŧ”z ÍÔ#ĩ%U-g:H?ĐĒ"~Eā™; ōîėOë1•dođgTĻŗ¸ŠÍ¸ÜķQ#Zķû÷ë§Ķ`¨#›Cƒ&™9!ˆŪ×^ū.iÜVg6AÛĻR—ĩŧ„U,ŠrÖPj_‹Áü¤ĀÛèJOƒ[JŨVÂL‡‰Gūn,;~ŌÂtÄôĐļFt‹‹á„ ­ģŨҍCÂ#ƒü›ÃGŨTlSaCjfĘH§ŨÔÔz­G•œ¨0Uf͗‘J€cŧŊ}ŊŧG1UĖ×ŧ=0Uēķļl`:Ėķ„S˙3 îzØÁf›Dctšãáz*Šl_æˇú đ,Ž~ˇŪß[ú™ÚávĶT(n¸Ümæąīˇņ9Áö•2*€G|ĨęĀīT€qŽ9;ž Ũ'yaPöđnÂÉô(ĢēX2j …ąø™‚•¸#I˜y ĪûčiåæĐH^N"ŗīLHĢĩjJĮđnŽ#xUīfÕ9§géa+4ÛGÚĄåŌēi´žĀģYú‚ĸ*Ŗī!gaæ Ė’ÆVԈ PT `qaS+Đã˛Ũîčģ1†™ČžĢ ļcļŸ…k‰Ģšĸ!Eh 72TŖ„|ĖæTƒ`sN[A‚ķ•ĪĢ”^ŋęģYQëā9?‚53G×M[öŪÚnĸ †īzØô˜<‰Ž?cåyNĻĩ)!ĘwÁßlôî û7Få?a`eL'ŋ{/+h­Fë‰ŽŠ ąŊ]ČĻ9lŪĪhėĐžęDT<ĖZîJÛŗqHŋņ– N2hÅūyķ”Ž0|ũ öEž–mÆ+°ûČŦ’ĩˆÃ >ˆƒëYļŒ”aĀA;Cž*Gˇüĸ‹øR ļAm&xdÁ Ļ}fŽGV§‹Wĩ%Üî9§U5ômŧœ¤M‡ąUA=*OÁ+xUß§ēØÖ¤x›:xĨ—Lų§{ī%OxTđØžŽ`ijžĄAIįĖDcd épœÁh~ë KŖ5ķSFôßhŠ|o"zÎíŽGÉ7"ŠĪõûR—ËęWāÛ¯ž>ĸíÔ0)šv%].rÁ™ÆcÎ]žĶ.”¤Ē¯ęûā.yMđlŸŖ§aEĐŽÁ;ąËbåūPŖæGdˆFÍÖÎëm' ĀÜbC­“XŽ˙Į˛Lˇ+Ŗ'g@lš¨ŨŽ“22ą0žTúŪDP›¸RJ&\­¸hÆĖņ]ĐŽglUŸęŧŪ,Z{ÆōļŽéāwV<Ÿ´÷b+ Îë CÛß9Õ*É ͝§=]Šą3‚Ũi8EACŪŒŲ‘Œ›‡%^Íč1Ŧ‚bûĩuIÍI0Ļõ¨*úû5m ŗE9f™ˇˆ”9`ƒį&Nų%fí)ĻÄęPe´ 7+Ō…ę[žēå÷E‚įļ~On8øÆā(š,ĪÉõŖWûh<ų*ōMYF.Xî00Ĩ_Č@—šRs~1äv'ĸJ_Æo}ΓžzųŪxP§’öi^.ŠE-•BÜ )Š˙‹V:á„į–%ų%˛v€T}…#žŒ-ķQKķ<Š^ÁÛUTĨ_Ūú=ĄųōPÔβ‚•ÚģĻÕ6ßsq$…7ņŖ‰Ōe´pÖīÅ˙fŗ)šûŽ Aø"x‰DœUĐ^AąÅF6ĩ+āžŠ9msJڂ<ĪFgėũs_ɗy–FÕ^Á39͡Ë5ļ}ģ_ļËØÚÂ:Œ ŲëvŪaĐõ ĮŠķÖ58ģÁ5ŒÕ‡ƒ¤ōėÄ(rLašŪĪŦčéGą=ũķpą˜^zH)˜k˜<ōC-ŊMjčŨšßļO29Š-'YŪxĻž/,îgybpâÕO´>w$öÕ7fáímĻ6GÉiüÂsČÉŞÔPԇķYւũéåŲožEVž$ˆm€RĢ–ėÆM ŨÚ1wŊˇÆä#ķĒ=¯÷áŨūmFnŠāÁoĨØÄĸ,ûj3ŊĀģ¨˙īæ09jLdÂŦEØĮ ú ĢõØv™ņģ>NÚ™ĶĸTsëzķÁÃÕüæt Ŗ*j^û9Úۑ›´#÷ÛŖ€įĢ=ą…3 ņĀtljįųmg™KīaīÚE}Š[Ŧz‘$MuS´ŠŅj"žĖĮŪɟÄô^ļø9~Žīē´áų†[e›Ą0RsŖÂЊڎ¤đ{ ž´Ë¨ĘNvž` š`sŒŗđŠIb{ī…(a5lęc(Ö~•~îËJŦL;ĩŠŪcWdĸĮĩ´{#`Ŋø’iŒĒ cQVVķÁW4CMĀŋš ´hŽ›lī<­ŧGŨõķFuąéģ˜ŦĶ ´°°û+.SØ/~Ō¯•dũ­+tˇĐģ9ĀÃ;¤äú Ž#d评`uIGŠãôĪĨĸį‡- •ŗ5l/t/§a’ĪâŌ6 ŖÎŪŪ‚W˙’Ŋīŋrō6v^ũ.ôļ"Ã#'>"%ŒÃ!•:,´ëk÷ƒ7ËsrģÂzĻuŠ}7ëGnx”Õr`įŲëS˙ÁIÁûeÍb5‹ÔoWĖ,ŋm6ˇjRÔũxāõ YëØAlą1-Âū#ā§&I*C°FĀÛ4NšŨúzÅÖ †Ë˜(ûEüęžYŽjÔPĶ*[đf‘ŗöͰ÷‡Š=ė$Ō3xģ,Vîč Ü=d9Šģ×č/üŸúšũŠX–ÖõˇĶ—é™ŊlXHwâÅqŗ…ÍĖņ}´ū´#˛ jR ¸g›#ŪOĶĒn¯4l܅Ôŋ_x6Y/“ԝŠíƒĄ­ÁO†_H!XŠé0e,ŗ5đëŸ*ˆÖaŸ°GYĄá53.ūī&ąÂæEך#ŅYíĄEtņČšÕÃp•×76`Žĸ{æ]Ncxo‹tø'žī)}Ķ›“ ģ.ūSÂnŽ;$“ėDpĖJ =Xš2xŧ ž]G׿ą2>Úmč§&ąfLX­áå„ŦdĮ-"#}Ls ā‹ß{™šĶ÷”Íį/ {–ߤ¤Ķ{1z3UœævŪN3qį0ŋËzÛ}ÛŋMû&iđ}}+gPš.Æņ…gہŽ+˜ū8& āĄ ­Ųą@č bnÕæUĪO´Ŧed[Üą.zĶĒrģP¨aEĒm 5RŽ 5)W՝š<xoíŧƒ„4:Đ609Qļy˙UꟹSå–™× ^ŋ›(Į ¤žáš}QŒŧ¤‡N[Ŧ^]lĮÎ2R"U˛ŖAŠXŧ¤Ĩ| UK˙c> ‡?K.ŠĢÛ&ƒžžZÕå:5ŗü€t÷ĄžĀ{iWņ<°ķĖw˲Õ*ĸØRV­Ė<:ŧgå–ëĀ,æ=qYnŊ4‘ēŎ ãæbĘ*6ļuģŸ‡™GÉĻūšļQđĘ mCaĪ{I%› ÎÔÂZíÚnæ­´€įõâėČĨÃŦ9POāÉģĨCÚq0 ĪsXí4‘˙'p°RŧLŖ}ąNę˙×Zë^‹ƒ „^ã™ŗŠáå¤muĪzø@‡˜Ū,C†ô,&ąÕ/;f;a7xÍŅΎ{đö|ÍĢ{ zW˙˙uU?æ?[/F7Ø #´]%×Õ .ė¤gOŊPžÕ—ŅũAÆû^"UFEÛŪOg•Ķ 0ŧéTė{Ō§TX§;¸iž đ)s‡ëyd,“ũ‹ ™rR‹á°!83Œæ5ã[Ģë¨[ÖšÍ R Ã–?Đ?ë7Söė8f{'ä(ˆ'mą”…ņséūôÃ3Įŧ/ߏ)Á÷§āQĘHrąŲō˜Û×xũXāé¸É‚^oYĄ<ēŖãšÜízÁ%ˡ(Mƒ¤ŅāČ@ÉĀ—§Ÿ~k´ũb ˆ-A.[QDÜe<0bõž›ÂĐũqIšsú}Šč:VŽŨž†° ŖČ›ûOŧî§~üėxēŒŊ: fī°w1iüø­õęā VÚŽ¸%͟2ķšÜ‰Ąė Ö’ØåŋŒ“lËɘĖN|KBaMÃrŠvŪâÕT6˜Į‡ÛÄÆ"͑ų`å‚öAeMĪĻųÔg[{OĀkk”ē7Cn…ßVãiäÎ2 _ÁZīUTĒ˙jë%ŒĮMä({ ‰ßŨv8Ë‚™g'<õûm|+#÷€xÖC´ķ۟{<_ũūoøJåg'pÎՒŠÛ­í›ŸąŨ ՁŒŒāŦ¨ļRŸjwʰfŦŊåÔú*X|iCPž} đÔú÷>,ė°ŌÃüäˆC9’ķ[ÜGä.Žæ6ęžQ‰5ĀŗęÕ4â“HķâiOV9밗ĮÆˇc"Ķ4™Š˛cAéĩŗžëÚkŽßM)`$ƒ:ö$͘^6ŨÖuŨgËŧ~~ ķŒÁĢ8×ŪVɀŒ¤ę_ˇUI‰`Fv鏺ēī‹y=*ŒScĸÅzÔŗāŽčŒ´‚k`ŽÜ'Ž[T—r_ÍSŋĩnõp‰X,3*ZŊ‹‰˜’`HÄX¨Ŧ‘§ķÚī2eâƒÆķ^*3îAēmVH—ŽcŧÁËéfI¸FréĀo TŪx‹D¯—x[…ßđXc׆t<ÛŠ-FU"´cËhŨl /,xˇQlŊī’įÛŽĄ‘ģ06B\ŧë×<į:‚wŪļrWEŽø›ĨĒsnŊú8āɍ'¸Ø+v[gwĀf!`g<Ãŧ1 šŽÅŠW%_^Œūß4BcaøŽāo^ˆ ėˆ5|%‰œŦūŗpŸˆÍÅI’pj˙ÆõōˆíDĀ*ĸØæR8|%Ũļ ¤Ú4  Ā”k€'Ų>Z§āÁtŪÜ=xíRÛnīŲĸ؎0 AŽwĮ !8‹įûnNj›-h‹ˇ˜čöI‡o°PØÅÉāĩžō‹YĘôÍŋʋ“X(߯ [Ū¤`A ÂŪ+ iõ§›—Ûwl‰Ô^EÚh€‡ũžÕgžoee×āeZÁ3IzØ<ŪäÍVĢ[€O˙‚-äũ„ §5•Uō7ēŞ!|"*ŗp éOŧp;˒ƒá^šĶ] ւær2ąŨDFķ”rc"Ȅj΋œįū’šÍãnx#ĩ›†ļ€įĶH'xÚÚc'K†Ø2d‹p€` ^īQ*Ģ‹K&c a'!kq1NČšGļÂw÷bClΑƅ<&„ZŊ¸Ęąc"2š'ŠįįAaÜ*ôÎ˙×Qip$Tü6Ü~"8Ķ/]~Đē{+ÛZĀĢú*Dõā­ŦO%ŪŽäg%M5‡gûą5!r5´7"šE#$ųÛd@ûPĻ ¨T4ĨÜčįÂw_í#ŲKæ•ln&ô葨ŒÕŖüŅįŸˆĮĨŪRÆÆĻBž—qA `ĪīDĒüNžĐūpĨvđÖëbĢ9W2ŧ˙Xāų|­ Ŗ÷qxģ7ą–€Ŗļ °p_Žŋõ/‘4Ÿûōj^€ÉbK˛šzwŽöįb Å~ÔÉX–pîŽ7öØ1:SšĀ?‚YL)ēÁ  ŋ›JɧWQǰ)ĩđ…ĒÚ@x+-ā­S÷ėzéqĀS%ßî†éF€v<Üũā6ÉdL´Naē)JfŪkG_l= ‰š9.j'~ës4…F^û Ųģ–KWÉ)ÖoåŨņč<íįZøP´'ũįBŪtœ:z7Ëåĸ7ėE’ĪKĶR-Ũūp>}æIļKŪWlkØĄĀÃ6Ú5ĪöxāĶvĮ1°m-(Åō?z˜6&éßĒ˙ę™đÃãUÁ|>ÆrÄäR‡Å:ėâ8™Pæ|âųôfķŨ(ÃĄ÷ R˙æpšĮ7ö0|°Š…5O-4Ί{'œđĢ]P­kU[ŧ’vÁy÷F˛ŠĄÉŨ€Į›kˆ¸Ņ¸ĻūįoÎL‡ĪOrŠŧš#}"–ą“C+īė3NĻ×Éúmą1&A×Ã9tâŋG*ûtDL–Ć,ې[GŽ’Āũ õNA[‰=› ū‰˙ā˜‡…ÜiMjiP RīöŨ삇V]˜š#¯ŽXŊÆķŸXĪx—ͤ˙“ŋYLŨĘž%R.¤,¸^ī•ÅrÚüņJZ¯5SŪnÖ<ÎėuĶ\ŗĢĮ#sŗvĮ˜ß" a^dēŠIÉT˜!Ügˆ8Vŗ4ž×VJ$`­’%ĢŨŗl`*Œ™Uē?Ķ7bõ,,§ĸJ62‚ˇsų™p¸ņęPĄū4ᮌąR#_e¯ÁëT[ŋrûŸ&į5M?ėøÁ6-Îŗ4Ÿ#eP ÚËLÃ-…đ]IŽwĮ´~΍”Dņ,įáØ'ņ¤4’c)Ë h0CHaËũ$đsMĢIÚgũ‰)ˇ)ƒžļ”2[į€gv‘Tq+Āļ&K¤ŋĶ—cH?RƒĄb žVēŒģf,ĻgŦáO ŗĀ„QW xĖę›á‡ŋr,œx@ŦÃH…4;.ŠČeqUÎ}¨mTŋ˙“@č\ Pŧ €Ųˇ¸”úŽĻŊ/uOŲˇ¯û€W5ŗŲv1øÆ+Å6Î)2ÆáŦ I•ĢĢ„Ŗ YĖ7`ŠÄ%;6Č0„&`´ ûE •)xĄđQ7øĩŗV! ?4ŊQģvo6‡DĢW Û ( đäR…ŧ&ũąfš’ ÆÉŖ.đˈâøē‘lŒŽGŲqČŦĐ}“YĖļŗ6ÄÅËą‚‘#™G–ąëÖá"Ũ/kæ4"\”ķ[)÷›2Ā%ÜĪ˙ČxW`x>‘ēxZ‹ ”ģqžĨĨųÅ2?::?C—;ۖ]īŨžĀÃ5¯ņø&8l5žÛžÖǟãuyÜĪÄ$°p8nđ XąéŅ;R|˙Ō›Œ¸90H„´\â1ÚÕ°_æmÄšT6Ē_FĸĘx Ŗu‡z­oŸT| ‹mØģ°ˆÔo´Ø6ũDĀ3?ī‘ĸ*u‡`GQĮKžĩƒ[eĩ2‰d$+Ü1¨A؃ŪE%{io×§sTƒq\"•Å 1ĪÛq[C<ãqĄ]’›)í+åߡzÁĪܐ"”ÆM?ĖKáéŊk}Ö+xšĐņíˇą—žM}t^MtąŦ"ƃņī;_áųk {ōŠíÚ¯ũâlģŽ°āΎUŽ ,‰TkUé_ëbëąÅíHœp‹)8vR<č;8|Äv/ē'=x­ĻŠe‹Ū[]!“ˇ‚‘i´ãŖ {‹Š-fZāĢfČZœh(˙<ЇcėŖ#ĸÃxĢ,Ü ėëØ‡wNžhÜԎîl8ŧœLĸŊ"zÁ͈ÉĐ˙kÖę§bĢdĩ<¸ĩŊ˜~=­y°ęUeī|§afļe=!2vv<͎ųceÜž cßEøÔŌqGö0ZÉįxYO!eđW`Ų“ū>ėLŦŽf‡BČ,ĨØ 6Ãe"øæą‹÷s‘ŧ˜y LƒZIbŖā)°ž[¨C÷<ŗŗĒ¨0ÚÁČîFķē(e€Įu'#Ę,;;÷IÜxsŠméša)Üw—ŅՂ ŧʄa6;°/kīŲGƅķÛ~ŠLĢÕŠÍ_Ú>~y1ËåÄÆ `ÂҜĶdęĐL×Ķ1íf¤ŨƒgviĨÍTĄ';~ÛwÁđ= Ī-ô¸ž0Öëbë0ØĨCęsõ¯5ˇã{^XÎngLÃ$ĖĄÄq S{<Éû(ŋ¨_“¸‰˜­ \ũÚúˇī§bŸ#ąJ­–nR ŧŨxŊtV6/ĶĪõlįĄØv8\ķچ.s™hîôŖ…|ēĨčØ IDATNĪķą%ˆŽÂ­Œ‹sc‘¸˛žÕ}B{xzƒ&1°§FÁlö"œ˜^^J)—>úÖ>ûų;¯ĖlÄ=hOįđŖ ÉEĢĄˇŪū°&,ĻHõžÚˇģ`čd÷ĄŽđøņžÄ|;J‹!=e˙3ū‹^|…ązŅT|ö–`(wģ@˙ƒ_dĮ ‘VĀ+”ŌŅ?ĢcÃĩtéŒoéZyå}ŋ8ŒIāf€Ø^;¯ģ‘MxæĢžz¸ûpOā•œ]ûļ=1 ˜(Œxķ%ō5â:Ÿũֈ…đũŪ—ĸV˛Äö>ĢL Zfž•¸’ķYėûˆi‚ Ģž.Z]ĄÚ"MŽF;O‰.žë™Ũ+lž?Øũx=Wũz/ā™\˜iOˇ/„Ũ×2Tkē¯ÁpdČē@Ō°ū˜Ä0)™ Ņ`”ŅĄ>‰“ė ę /ČaW§¯,–÷d°cKŒēĩaꞁŊ2^XRĩʁųĄl>?#nԐ€ĩ• Ž7đŪØ%x}—wWÄ2I:ũ`3s‡áx æq@„0ž´ĻŅ’ŅWĻ1|­ˇ:… fúö™"ëėGũ!­oą“3W˙Ėmž÷ Ŗī€RŠ$NŌn2$üí”z/‡n0,ˆčžuĀĐxouë <ÛåŨĨ[ėŧéĖ2Š€îøHwZ3š„ŧÔĒĐđXZ†ãdč#Xą‘Íím$'ËûXĀzЃTđ°Žų7ŧ°÷ĘßÎĪfÁéđíæüL¸›DĒ'đĖŽöŪÜ.gŪNÃ1* uĮéĻ–øqžËāCŊtš“Ûޞ+Ž`Č%eͤRJcJ3ũą´´šŸ™퐠ĩzV8›ŗ†_ģ¤iEúD.ļģ¯Ō ‹ņ ~ZQYÃÄ <ŨÕқȗu:Į0ú„lĄũš¨ƒöŗõ$/ÆrƒâsG9,Ēœ4Ūå9 t­ ËŨh¤LV¯ĢZy•0Ą×ŧ‹ÉrÄKa­‘(UŌÖW´O[â˜{ žJÆŪ¸g&c”XÁ@ķ¸# ÂM;§Õ(x9ũN6ĘÆi?tö["9XeP+g tĪËH€‰ Áøi.(…‹oĢĶëZî1 ‡Ŋ‘$ ‹†Ļ;ÜZŲˇNhĶ•ˇ¯“םkREˇIæîjUg ]ÅŽÁĶ.tØyėļ”ĶõúĻ{D`(-Rē!8.¯VA8n0ÄblũtüpAđę>ëOÎ+,˜+^w,š5öåØ[ä}íŧļyZ‹0ũ0%2Ū]Eē˙ŨÅafŗ­‘ķ/9įl˛L^ˇÉΒEÂ#&#­ ”Ž;3ĪānwəéeßÖŧR›{†Ú[ín0ŒÅ_n9ˆ{fČ­eąõ™púČ,kĪƒY­`.ŠËũüE%ˇŋÅW}_ŧ†Œ§Ãžb"ΊRņĩšˇ?>k{o)Ĩ6%ėiS6įĨĩę‰ķNÛÜš^õŲl×Ņ=S #ûŽ_(ņļĖKŪÚ@Ļ—ŒSđÔ&xLQxžtĪ>†ī8pƒBwĖzB-Ą\ų 2ŠŪĨŊ19Ũ™cŌŸ9@ x¯Ģp˙ũ_Ŋ•ŖŸÆËÄ>Š -āNnŌș+ ×b´Ÿō¯3ųésáÄUdü ¯,§[äVuέU_ŌœÎ›ĨãëęyįĨęžeÖ^Â⋁=qīæJO‰>æņ<†ī|ôm†ž/Û0í -AiÃvĒāž˛‚5Œ3Ī(Eą…Õ-dKû­@ÄÅ4yŪÎæ¨ņÅx…ÁâĶhîéÍŠÚgiõÆzm15Ģ7Bs§RåÜOÄĐ0†EÕBۓaú˜úŒôŦsĨô§ëÕķž›sŧëĨķΚģĒífErŸsí~ÍëŦÃ@nÎmĮ~ĘJŪ:dŌ5ķPIp’uô Ɓ?Æox•‚cõūPͰ^Ļ+ąŲoqa;ŊÕ@ ԏv^vÄoŠs†^ņĘŌ5=xūÛŧ’=Dˆ#Qûwķž4fÂKMŠÅô1õß;žTĒ”:5Ŗé♀ŌķĖ‹?B%™#ĢÃļĶēE§dG-Ėđ0ŨaæÕŒ7Ņؐ‡V°¸¸eũ×Ā…%g…ü¨$–ú ívĮč˜8éF'˙smS›ĄA(%‹•ņáD"–]ÍĪtN Ū?SčāU[Á…á[Ņ<>x-E,Ü õĀ„‚h\°%ȔŠŊØ “ˇĪkņ(ײY‰_‚KEŽ1kțĆI˜Íh|fd˛ų>芠*bĒi67~ šÕ[āûšĒĸ‹×ĩ­ö—NoÎh€‡5+šΞ=xÆ×ņÚ?bž-а^Œô¯ŖnÁw'ÄpQĶ’‡č•XłT\­§ôé›°ĨĮ!ÚnõáIŅËÅåÛŪ°=‘‹ˇčώ' nFí•eų¸}ãŌį-w ŖW‹KKÛ&õ on]} ĀûüŽĻxt#š Ũ[ŗ™6{|¤\ž×Ŋn°]ŨūŧúpŒúũ#稂QOÅC¯¨DVŋĪŌe/ē”P{…ŠyupĐ˙ō/oŖÄũīog'ôX~ÔNÍ?āV(lâī mkqģ=ģ„Ŋ`˙ŨūC$žlĪUŅŨ3éÛįëšjSŸv‚wáņÁk¯=Û~1 ņ††œÜ5;C†‘šHÆÎy ~í:â—áu€ņęb;ؒšoļÃŪ÷’°ŪQąĨģ!„÷pûn})?ŖŨ;Ml‹ĩ Ļāæ-ÚyūŠđ1“ä(›m퍷|΁O×ā5øc+kø-°~ĪvŊŪĨkæß\ĻšŦ–mũÜųNŨĸ6Ür!AĒBęG |íZÜ`9VĢĨSŅĄ‹ŋ”­žŅũ˜Ã9ĮŖÛ=cä}J0?3L>åÛTl¯$Žeƒų÷œ+ŗyÔGŸ­äŒ˛ķHõ€OļÉ>ÍŠõŲŽSzš āÛČīx”,ine×ϊDÁÃ6G"2-šģ& áN)flĻņ’Ön_DâqŅĀ›nZéûqš{ŽÄ鏆pģc1e"Nūr„=E„ßæ7ąëæ_ kõ°AzŠŦæW&k§ķę}7ĶŽ`ûŗôRĢÜŽI0Ռ”qh—Ę5‹—øĖá>ų8ŋ`%8skžĀ3ĄËÄl]ÕĪX įN˜ā&t2&f׌ëēZ&ŒxcČ Ør~ė¯ZÄ8 ãgį˜w™Ģ •s­ĩE]Búz¯Ė>s|ē&īŗPŒ“č,Í&p'bŅl08í­i*ÅGÍåWÄaZ#D“Ļŧ‹é’ŖĀRĻ´$ķõĖ¯×Á[ŗõ 5ŽĢF`´Dxŗ™Ô|G0ĮĒ}Xžķ$ĀîÍfÁā Ž+ŽT2úģũÅôRJUVûŪ°zÛ<0v¯`ĨJžļ'X^Ĩüč2‘Ųũ–3äķ­o[(€Ã•IĀ-ŽÚ}%ælmŦyHéÄÕɈLÛōŽQ7°•zļ;˛b™cŒC×´|.`܀E.miũ(sučÚãŋHģ>ĐRnšÃ3˜ú†§Yžđô+!Xî@M ØŌļįš1¨X\Zz˙üŪÜ_ŸÖŸkŊ <ķŅxŸunžĩȚŽ˙œŅúĸ5’bÄDļš¸dB)ޏĢQ[Ûp1š$o@›ĸô s&=ĀsEÔ΋* Ė<î5öÅ–::ø1t'B`ŪĨR…|^ŌĻkcÄ^ĢčrīKŨ{ãéĢä_˛…ĀYĢ›{AÉ ~\eY †ŊØųĸņÍĪ-'"ŠUœ‡ ļ)euÛ>ĻcÎ÷˜āФį,)™}ĩ čä'Ãs‰VīQ08čÎbŸ¤ũQŠūŽ# HĩŖ°ÚËm€Įîe'‚~ŅsŖMcS _ëv'Īqʗ/kÚ}ÆHHÂ5ķvnBœ..§QÔ+3Ą°ÉÃ=iđĒFGÉÛ´§ÆĀĪĐĩ]čĪlŨŗēčîŲНúûƒRøĘBē•Û“ŧ¨iĢ_ir7‚6uRŠg‚ī‹ŸRžŸiČGŲķŅ ģķZ|‰y€SĢH˙tŽ"1ē ojĶŚÉsš YzđT™”Ē<úĩė˜2$ŒgOŽƒ×›{6”Ûoņc‡K­æNÎõ7žū ā1õŸ€eĮXĘ+Ŗœ3ŽßKĮH†ŧ`ŸUhŅ7™UFÁß(^…QČKoę_ŊĀŊPĐrÚĪqËí•{”dîĖ6īõ4ķÖq÷L0›@\)Ē\Y™`#$#b’ė00zÎxÁíLÚˇ°Ão¸øvsŗ6ø*¸EŌ ãđŊž˙ļfaü ˙2;Q}¸9y–~+īIŧpģPNī]N•s4*Oŗ/ōSaoī õ2zīä–,fmģ÷XÂL‹1^á1ąĢirQw]ûū8îo€Įx’đíļ)kY&Gčnc‰Åa†ĩ) /Ü*`ŗīōLbÛ+ XK‰.ßŋö÷Rũ‰6´^Åö‘Ā3ÛÆRcšÕ2šÚ†a÷ĐÛ;ō@÷%āÕ<î{ĩ”Eûaæ5W<–ŒZÅŗJč6 y—Ķ1%3hą}ĀhūĄ§…à0ʡŋįIĢ}Ži(ļY=ø–ËŪÔõžŖ*ÂãæÜĨīrËkc‡­ ž@vˈ×ãNDĸ(ļ˜Mâi( B#Í)Ī.•GĶā‘Ŋ¨žĶ´dėÖ U<Ę%ā[ÚyJ>ˆũkÕ2e*{ËIR­˜Äž]`MīIÉŲŖįƒ™ĮsĻyR­ø”uđÜ ŋ”ĻæÖ1Ėh'W"yõrs̓O| Ũé<ßœFīų+ŊĪ<˜+cV@‚MÖvö` Ēų´267CąĨˇqA { ]kždˆ-K;ōđ[ @ÂX‡Į"[ŒąnËčSĮŗ/äúÆß‡ūVQZ¸yX4üZIĻąkœpËNLtõа!pƒõ‡=ÂÃˇŗÁꞕ‘"T÷ š,J/ūČxžtēĩÔģâÜ3đĖfžĻozc'ˇM˜IÉtls ;€§‘?Šš-ŗ„ ęôļĻFõi-āQ‚ĖY%GĢTS?*r‚ÕÚßī–uđ†ĐŨžĀTø“E° øĢ¯­Ãˇ‘ÖÔÕ|0`¤Ôæĩ™ÖĀĀāŠ[;ˇŊ‚îÚy]p´:l×ÛxĐq2CD+,i‘T,zē•GcßR<ŧ9LęŖŋˇTVC˙ûZ!4bÅū5ˇÆDē+Ē`œ4F"ú /-,`úeŠØ"’9:&ÁĻ–QŲúíG˜yõÁo…ÑæGé^ā­ÃÍļąmāõMˇ‰-ۓJÅÆąÄįåELJÅ0¯ąžŌ¤wŲ“7Û­ÔĀ`ҁK§SąÕÜØéúͤËM÷ˇ mŪ6o÷<ķ0Tėrķ‘čÖĘ­G[ũ}؁CQĨáyš-ŖQksĪc.ʔN¤šĪŋ9é‚evČx–ƌ„ŧ´ ļĢyđpÃHUĀ_5ĐĨöAc] šŊÜMkŅŪ|jkʐŪL•ˇĩčPÅ!õ šŲpé3ía€wΐB ŖĄîÄŨ’o* XŌ­āa ĖÄEĪ ūIĨĻ}}’Đäxú8™Ö`x¯,Đŧ xū˛øÉōR9W˜Ád•¤NŧąĄĩƓŸ0xĒh*ļGá;ģŨq™Ôɋbģ Ѝa!ÖaWÂ-+:Ū¤…;ˆÍ°’öOį[åīžuÜМ 4r@ŨŌoaaøyßšķ´OUŖÚB:uŗôhx‹p§Ĩú#}āļ™V+ˇXV@˙—’Š*…Br[ĻۃĐ8o™‘˛G9ô‡Ōk$CPūŪŪ?¸+Ī{Ũh’€h-0…Ŗ•'FķØë„Čģ§õøîlĸ“ @ܜUÜTJK¤VTv'+œĄĢRĩņ %u›âX{ŠdęUÁ›Ų]‹{Į÷Į0ÖMA@Ub ´YYOÆWą “Ō8ĀAF;ëÛĖ Ų€~ų~ßëntƒ EKŋ‹$Đhā}đžīûã}ŋŸ¯ņ%jĻŧÃ~˜Õ’-đkK´¤—'ō1;lŦ‡nä™ļUh}ĪÕĖŲv‚įÄāÁkG0ĒâņČf҉ųMƒ¨?ˏüĘŗ|ŽŸKlÁ å‚?, ‚;ÔéŠmā™QūƒyO AߜoÜMĻÉaųF§”'š`ŗĀ\ÕØIsæÁĘ{"@ß Ā–ˇ}"n0ÖÖ¸ ėåš}rīŅ´­ūŠÂây;†|ņŒ4*&|*üá˙ÉĒ&FĮ9Ė>ėČŌ/ŧ õFī‹& §Žslĸ'Á|F­Æ@§ßũ_ž=ķg33aÆ'J5…æ4¸˜aĪ5zÍf%7 ũĒ׈ÚŨÕyRgQ÷#š*/ķR‚Œ6uą6GŨvː!ļäk‘Ⲟ\Ø:CÄŖöĮ4Íĸh äĖG$áØķD÷ ZÃņÔąüUÍ7eWc\†ØĒGĖ´Ī#ļ0ƌÛēcŠp;‰đĄ4Alv^ ŪÁ‰“Ž?ųč|MŋÚũ<‚‡1–“Étē+āiå˙Ō3ģŲ)Ũ`5|‰™N§Dˇ0@ß͒ōęÄĨŗ?+ęĶCíÃƟzx¯’K.WcHŧ+Í@ģO Ë>Áģܤy^Õ2=ŗāƒÏĶ1Âo7…ŅĮķĀZOm<Æĸ*ņ×j- Ĩ-ļ“§ģGŨ‚ûņÉ˙‚<-ßĒ€U'‡2Údˇ_ĸÎų§’žŅĐbWØAđĀW-´WOŧև1TčČo€_Ī ]i^ˆDŧŦ rũšČœkcĩ}Āķ6î<4xÔȒ’wB1¨Úäô )Šû^yHVqR8Ú-ÆŸbü:XĢÄÎĪÔÃSÛ3"#Ųōd2žZĖåÁ-~1îą^ũÄs˙D%Ėģ¨ĄØ.•°Ē` ôîržP¸õŅ“ŧÃ7&ų™)h€įŨhŗ2ŸÆ%/&ÁG^gā5.VVßßh^ō6¨wcŖ(ŸÃ=#ÂŅP|œÚ5÷Tŋ“ÕŌ¯ŋĢģ3:vnēžl‚u6Ú¯Ņö_Ŧt/Āž!ãS LJcŒĒž k+iŒäķ­ ØbęĩZõgiĐ-%0U>Ņ#ÍĘpbSĄ\lĘÅMxMåujP#xrđtīĘŨ†Žā­îŧžWĄØ"ŲŊ?Jzī`Õƒhš {`§Øî–RzĘŖÎkk•Ē)ĻX§úŒ~ß~։9˛xėHNM¸ĶëEöå Rp>ãˇ˛+ÕŽã/­?1Pĸkhחs…6<…vÁ[ņ>Vđ.]âéũÎ/lúU%§ÜˆĒ‰Ļs¸wūÉ E f.Ķō˜ŲėĖg ˇzī‹§pΰŸîw­ /įŊ “‰č+d=ĸ¤ëŋĀÛ*FUPlĢÕ°\ŽX%ōļd)=đBĀ(i4Āk=^đ¸{Öŧ.JHÚël.¸°ÛõlČ}ĶnW’æÎ°UŖdøâ´¸x|KËSŋGfPt=]"p?žÍ†ŲņÚyËÅėV9œoÛ´Øi^á„đ-|ÂjˆŪ^CJš˛ąŨoũQ÷<O'wԞé‚n8eÅĶO=éx*ē'xÖ`—ąĘđ˜'ũ͐Ą0\øé\ßr€GNŧ†Ix 0Žf*̈ŋ`0:rJ¯ÅŦĻ%“3éÅ%^Ōũsē> 2ÚáîŲ ˜ËĨí­ÛkÉnͨŪĻ ŧ÷x ^ã‘Áģ¤t0O¤wå\P]D}OtŠûC ‡$‘ĖœČ”ˆīÍō—‰^GŨ!ļ˙™LF_•ÉwTâ¯T°¸gøą„ $͕§^Œ áßøëĻ×ŋJu6†Š::ŗø"–˙ė˜ÜS—ŧȇ]đ"o|lüE_gāÁo}S[öéŸÜČYUS/ Œ'ÔĖ^§gĒũ™ũ îjÔöāHŲT # ļŅxzÚy‡øÁÃî10“Ĩ šĒúÅ'=Ö[pz•ásö+ąũ¯6•ˆÍ„—ŽūÖĨâf{ÄÎ˙d,Ɖá1ĒđKøŅ?đZ É<Ų Ûâ GíÁĀU/ Ũ3lȲĖŦŅ/Œōpā)NށŪ!s„ČÚËG˕ם,˜CœM&jîŽOĢŨm˛DoߎUŽ•‡íÎ=(ļeÆˇŊ˜;o"fžIdNHąö 5Ē/ą¯\Ŗ-'Q˛Nūņ8ŖDwë[øHāõ9 ÔøėʘĖŨGōDŖ¤[ÂHékîJFÚ;.ˇžæZETģ ŲBsąĻMČu7`Ņ˙,Ũų,įØ*DKŨķšėd­ö+~xúEŦąU5ŋDÛō‹XĘQĮĸÖBtfá   5jLlo0Éĸz~æâcŽ/xģvž:öŅÛS=M Ų`Ir|Šm,&¸ežVl; 9KOpœbKū8ū û/Y.Įą–€åTb<`4˙ôŊXŠRC[œ˛,ÅøĘņ_0aLcœŒ ōĢSŌĄŋ† °BÕ>ŽU[ŦÁŪļ^ƒM›]Š<íqf˙ÅŪû¯īžÚvÍx_ß@’LXĩđ0Ô‹Áf[ûËØé­¨If•‹(2÷,Ȇ9}đČú˙ĸôí*ÚyŒQ•+Œ°ĖŋCI‡ōfaāéŲîjļāI 9šč tĪhuOŊK_ÜĘC;/Ũáž1éD6Ž0āŋurŨ<ūwØy§Ø˛XØí`cķ ŗƒlÍ2@5ęY۞īęÄŧ8šōäæö§­áhp4OænMœÁŸ_÷¤Â؞ųģÕZŠųÉ ÛkŦdyĶõĒŗøxé1 ļxģ­ŧÜēcZ2ÄÁ;EÎ!$=‡Ū„ô3¯ũ㉘ņ2qG"ƓĘėLx9—īš‘ä{­2•dAMÃúPđĒŨ3‚ŧSB^8ņįĩęŊt§sŖ%sÃzĢTŨ$dXt­Ēĸ!ā˜íįhŎ_đ°pĪ×§cš-$öø°@XaąĩXlŽŲN3ĪMŽ‘ŧĶėlûâ@Ј+¯§q‹˜HĨtQa9rķmüÖĐ#37Ø%xڃ§@56‡ûĘfgĪl[đÄ&V“v§įĪĘtęá6ēüāxTĨ')Ô@Ŗ­‰aų4‚×Į=Ûģƒ„7Lū‘íĘļŽÖ*I›ŪFņÎ_Í"eOú§yūÜ6ææeĖÂfv^AĢaę"G–@†đUØ>xFŠov°AĢäâZxëxŠ„ũôę—ÅWbņŧķg§gĶmDÉ9DØpĪėđė/jøfFüf×ČÉÄ ęTÕņÁEŽŋGžœ™Yē‘ąÅŌ‹ĢšöŖAKųëŲņä‹F­9ŖØÎÔYÍh%q>Ũáînīč-%0Ę>u^÷ĐŦũōC‚Gi˙~Ν˜ũâÃĸ=‡{&p€znWšŒ3Ėlw_XˇjÂų"4’Ęˆ°S ØíҏgtžŊđŸMģ(áąđ"š% ËiÜBĻKĖZą€ƒ' ØÛk=35ÄļÍÄÖÖča?ā­îézœt–|`TÅÛ(qKÄÚíVú!n\}Huėƒ’Ē‹ ŽÄYeÅYą+Yô1į|Æv'ŗˇũŗŠ1Ö/ ĩjllZ9“h)øá?Žw EĐģ &s3@mLɁūnÛūeāõ)DŪx:Ŋw4ŧÚģ|X0ôhRöÍsߍ%˙ŊQ•Ŋ‡Šr‹$eAĮÃÃŖá\OPEŒyŌ%]ŠŨËJDt nˉ™ņh”°íޜ<‰IđƧŪĒ%ÎĪ,ąž]¨më‹ØFžUUœĐ=Áë*fŸcīũ×îßĸ•§õŒüíŒJŠŒ`ĮĪĐ>9´a9ØSŲuü5¨U*S;^–>û" v"ķā|fōt<.KđáÄņŲąđ7¯ŽqKŽZ›édaQŦ‚\Âĸ=€2S­–nŽĘūĀëWŋ?đš{4P’Áa`)u8…(f9aĒ 0ĩīËŽúŽDŖÎl?ņ”ãOa4|ŖgåOĖķ¨ĘRŽ5"BHs…ŋVrf ח–QŊ‚ /KĩīĸG‹tđi$kĀKŦ°Ęnā5xW`$ƒēÍdvŽ !>†é„+ B†ē€í€7ÕÂ1lã uŠ-™[t‚įŸxœJ/ŪØĘV†O’ƒ2ay2s>x1#Ô×ü_Z.ŌÚZ OŠũĪ•0Ø&ˇpĐģÅ-Œ5`Ņ^Įr4šŧMæŽvČ<×*Õĩ>§ŪĖSģ§8āé'6 ûŞ.pjhĖŽ5RJ{BÕå#ÕĶÎG‚Oņī:vˇp‡ņëcØL]"š" KŋŗuŸf•Ļg0Ēé†÷hvŪĸBšiÔWŧë*ՅH#đ.]4×é  ŲØ\ąh<áĘ^}ĪŽ?qūˇŒh”jûFĖŗ#ˆę˔ÉÄÄTĀ{ŖđA;ôNŗÜÚÉ( IķYf|ÂGĨĐ[… ­ĩ6ëK` —ĢI~Œû—+-Å0J:‹úÖļ•7üŗöP#°ŌöŽbYûéČģ¯ t%°˛Yq­Đ•!u¨ÁVæŠĸî‡ö˛xús^Ú“elgu÷zĄ¨64Xkģ`Ė›ÁÖÛ§wúuņxē7™E{Ž Ŧ:×ĸ’Õ°°Jĸx vÁ÷Đ=[†ín­’sŽ´X¸ų;É&X˕Ų ÖË"@’¤’•ŨČŌjõȤmˇáį}ũõƁ†wEy}hečĢâû•ĀCƒwv[ ŧA†,×ļfœĘöŒ!ļ+; 뾌ŋąš A ÍkÕy8bpĖ[#œ/h?ū ĨģU­ž™aįßöpOņĸsĐ/ßĨŪ÷›/āa`ŗgEz đ°bĢë Žŧ(đ*íŖļ¨Š9ØÔē+¯ođÛX¨ËÂ\†ęU0BxgÅy&ķå5)wU+G=āĻHYÍīŽ’ƒĄ…Cūō“Ģ÷ZŦOM‡Ū,ŽUĻįÃŧzōĖfŊδ뉎i7ĨÁk˜ā҈{×ŧßTŧM/ō~ƒ~ˆ‡yũáÁÛ%cĀ’`æؕB´ ūúôN…qŌ“&Ą…~wí­Ë͇8ãŪ?öšƒõ:§ƒyÍĩ´LüŸÁŽĀ‹Ĩ›7+UÆÉP(øÁ$|‰ūT˜ÄŌ,NÕY.ÚÄļŅÖYųĀÅĀģāą•÷1Ŧ<ĖĖq~hđ.č ļ“ãQĪh?=Ÿ_ėQŠxâ\L8"⚭2—?šÅš“õxÔŖŖčņū.K“Ę[ ^]ĖÄôŸ:OĨĀīũƒėąĻV_“Ęąŋ­ļRõÅwJ[Ÿ0N8¤ŠÉŽĩZĻĻGô@ĶĪĢ>Ä>MLD†6īŌU\ŖmåáÁ#„Ūƒ@ÍôØh–ĀõˇĐ‹īRÖũģŸÉ§3ƒCEr9üErž–  °Û@×…oü™~ąÎËT=Š <7į?s{ä`ũŪŲ´é|)[•“ ļõا°:ÛA°°ĩ6´b›‚÷- Rm `2ßeŊ”x„Ūåž›žîīÃEÃkd}}ēÃEƒÖķˆčŌ˛´Ā–›ũ)ÕqQ¯ØÁũ¯Î…o|¯°VMÄ=,ËvœÄ…c’ ŒŽü;杕ôKJ^Ė1OÖ[Šd%GU[iĨkéŲÁĶÉĨŨhc; ž¸Kׇŧ6Ÿã¨#.gåםꝤ öáŦęŧ ˜|ķ–™Ak ŸĶø~tKŖĻ¸Ø4x<ßč~žŸÅà @‡§I*U¸2ŊXŧÉ gKäŅĪĀü‹–éŸ!xíb8iä\yOz đVŧwiÃõˆāÁ˙:nAš÷ųÅà Ší@īšĸ}/XéĸÉN-ĸÃéčŨĢb¤Žčį€3GŠÛyŧ–ļZ‰áËq;PUė“Ā0yÍŲ-=wFI+÷č}īŌ&ų´fĶčībšmōüŒRˇÜ3=rŠ ^ƒĄxĄģÜ}{đØ{hboԃ‹-˜w1čė*ÖËząņ‹+č^ÆYyN'Ļ7č[<Ųėņ!ũ­ĩęîsabû¨ŨpPōų˧)ĄE[­™zz‘‡U0Ќį Ė(›ĮA‚í{áR@wqđîéOĄØrđZMĒxŦË#‚g™*éæÄã„Ũđ?—Jv†56ŠÆŦ1˜-cĢxÁĄŋ]˙ëŽÍŋ.í¸:ĸ!/Yx)w5ãwcƒåyđ{ˆû(;ž˜ģŽĀQÖoũķlĄŪF¸>“Åo`vmuÖې@‹ä}Ęģm‚wŦžÕģŸÖ^klĶĮčLÎ†Ûø7Ô_lŲ…"Úŋb=,Ó“QOz:Ô:6ģČhãÖaí eĒxĻŲMüLÛbK"~>˜1ī;œ—~ ąėŠeĖ‚¯&1Ž’+ŧYm•žBß dĩSČęH] +ąsÃ$Yđčõ"xMđô§ÆĘ‹Üšûé‡,˙({ŠmüŸ1§™Į{፨ūūžŨŨ˛å^ėžn;:’ŲŋS‰˜į¨ŲvEBSĐ#ŧŠ*$ąøY^æÎĸŲ"G1KO›`Q€Ø)”OŧĻ­ąIJ䎿Ž ?Y‡5ŒũVžRWøL>+Ō5F:€ˆ1;Œ‘k”5ZieÅK"Ēwå°Ģ9´ú°1´Ę|ÛG ĀNÚVũã ×0mߑŊ., ØFû‚ĮÄļo2FĪGôĘvÜaL”•ÚXē" VÉcƒųb ž…ā$ø¯ *ē1ŧž‡?:Áģ˙br^–@OLēîŸŖR0Z(†ŖZĖ Wk‘ęŨ•ĮÛÔĐHmŠt=B"ëõ°ĐöŽä@Ķģ‚v•"j`āŊßaÚĻ÷ĀŽęfsCbš ŗkųˆú?Œ)ˇ¨žBĖ ž|Ô6–QĀÃØĖ{… “ƒf¤^ˆ1ĢFôŸKS´5žÄë=N‚´^ÕÄ(`ÉX“Qøo[‡õ‰q‚ęß X>Ēô›áÎA%ێŦą8Ū Ũxģ=ļįúDŌąx&ąr¤?Bvŋ§sÖlõˇđˇāxŗŗŠđB0ĢúMąuŠÆģ~2ÎRÅn—_ą æŽbͨ'Tį4âŠz`ĸ‘Moë6eņ‹ŧĶŖŊë ÜétJŸ+ģģ˙Ø'xJ›øÅX,…IįĒ߆ãAÜĀ*¤īؑ+ÕI¤ā=āx4SŽL0Ōhđßĩ[ã‰éƒĻ‡1ÄÁ;ŠÄđˇÁ¯McįŗšĖx|:,Kƒė‹ų/‰ –_ŊXÄ ;ŸœūėŧTúíîŅuUš^‚ŸŒ‹ë‹Ä)LvėnĸDH}“ôģ‹­O#Dš¸Ųe(ķcĀ ü 9Tū¨Ž’Ąu¯ ŪpĖČ)ÂV{å‚Žtz¤+Âķ]˙)âAĻMcÖ(Œ›<Úy˙ĖLę"¸g?ŠÕZxhÁX،Tļ÷pāõ­Ļ‡•‡œŊx<ėü0상‚ŨWpŪ;A’Ņ8˘-ā+ģš¨?Igę˙6X¸>bŪxÄہ`ņ˙õŌÕõ &5 ŖÔ’6€Û†ĩļco›D´xŗ‹ųlļŠņ•zŠT ˜§B;œÅrŗTú%€×' ‹-ËĨ@Ę&Ŧéå´ÜSđ㙕Ŋ@âCí˜.­÷§ĸqŌÍņŊ'Fđ€ÄXP&ЃëÆ3fa W0ˆzžŅ;‘3Ãcļ/9æ~5*„hŠX€U†„ÜUáq‚ÂÍÛÆ<ŧzv;ärœUž0đœ“4Í?jÂf~œF ÂŒ#ŠŸĻ (Q|ôN÷ŅG„1<ŋĪYLÎÂʓ#ׇLZŠÃ| ĀļÉ ļ‹…-Xy 0ũō>#ÍĪ}ō žVcžWéFáMd˜žˆŒúôãŨzÃ(eɡĘS°Ûm‚%Szdė>‡Ø–Ŗ1O—  ˇĀ0+d{ĮŽb‹H`¤§3O$UÅÜŧQvū]žãŸKĸØ"5 k=ú dlņcífßĒxšąDŅ(ŽVgęéãŖËūÁĶŅÎ;iD8ƒ’šņ9Ē*î˛ŨíÄKîy`”Ą>ķxdÉĒK;ü%2ÍŌĨ@—'Áŗ2_ôŦųm‘fŲ2L—ņ4֌ž‡'äŖEm›SƒíŽŽ§Ū•$2ųĀoŨRŊúņN ^•û€GíD^¸:§ųŖî¸UDõÄŽ)xÖë?4߸kvfĻãŒÆxÂĄųŧ*ĸ ˜ËÁgŽûUã#MœtĪø§Š§Fįsíô0S2Â9 ûvą\2$ąEŠø"6 ždâ”@‘ÂlĻŽ -_xmkÚ)Âlu‡›'Ûė6Dė˜~ ÉȆ$ŋÛÅ&#‰fKÚˇŲļB1יØ"Umū7Ou?Ī'ÆOēąt ûB¤C7ō…5€‹åR|L˙"ũd­ær“i Ķ“—ōø\íķdŊ?xCôxß]Ä(ûqHĩEšú`„˙D?z}\]¨ 8wŖ\­€*O‡ĨyƒŒę5BƓ]ą5C^s‰'˙•Â>S‡æ}H´ŸB/ORĄ Ø%Ūwšâ1¨FuÎĒÂk-ôڊEũ'&h_x @•đ ø čfā\ÜÂ.^­m˜čö^¸Āœ ī˜ĨŲ8ū‡DæéŽž˜0:_țdûV?ߋIXS؆ŦēXĨ LÄΎJŌHfđ𷅙ũĪ' Øe­ÖđŦ5“Ē›ˆę?Æžq3õúō sz+Ę/< ĒMÅ0Y†æŨÆjÚ#yŠŸ rŋg„1Ļ0¨ãŒBʖAôēqÕŲs;ƒĖžŠmQ׹Q &>˙xâæzā["âÔT<g<ˇkŦáŲ2Uī1îgš ,~\†5‰ėŋ&fx×ēŗu}LŠđØĀģ— Š>‡Ų& îŅų‘÷~īŸęcĄøĐ]đĸX/+mu-ŗ¯X‘æXsÉ%l°÷­—žŽ/ēÅ.õ\8(_×T1÷„0Ŗ‘`]Œ3`›ü ôKië6ˆí xš"’ĒԔÍMd›6†UoŅ̓j“÷ģā­GúFš>xm'L’áø.^-ƒö?zƒ2.l2ÛÉŠĸŸ'ÉđĐȊg7ŗ,˛&ō×Uv@įIg>B14÷ÉäD,>Ę(Æãîą ”įŲiZd =Û5Š}Y—r\ląTŨļ*UŌEÜ눨Œ”W\Ũ’Ÿƒų. *ēzŒ 酭ÚũøËîâŠdÎĀ36&ÍįyēmēSšf†ü,Uīŧ•ĪŪ¯%•ÔLŖ*ĩ@Õ<ŋČ`ŗęķLđėĨOw0 ÎÁģ˛kžü>Á | G˙Ŗė)Ķ×í7Į{=9PŧËĄŠZE6ĶŲõZ'Ė#3ŦäŌ­ŧŅk­d*VŠOĄyw5Ŗ‘hj4.>ķeŦ¤Ī0w Ø+ĻØž Ģ/ō‹"X,ØĖ Ũīã_xz¤Ãö<‰¨xÖã6ŗ wa+ˇÆOgH"…áHM9yL&WÍäPž`­ŧuŪ8ŧ Ûb2Y;¸ęę1YČ?ÃąD ;="Ãt(ŋ}Ԅ 0ÅvÆfįYāŲ7ļ;%ßķ6<ĨvŪ¸;Å€ÂØ˛îÄŊĒī3ĖųŸcīo Öą69ncdđ)ëæ¯ pscȅôžŽ%RgÚyŧšōĨĢY°ú°áYžnĢCKų7蛑kđh.wpßĢ` ČđRą¸Ŋ­Wk|rM<{,nŖ Ūîe.ûõ0tĻ0Xq}<Įƒ{=)Üġnî2#JŽ $kˆ]ą…Ģā_äVtZrɰ%¨¸{€š"‘ŒzŠÕ|sę7V#€ģ>ËS+–Ųã˜RÖÉĶ­×jŦŗCËpĪօæËJÛËÍē;ÆiĮú㯍A)sJ„{ņ{ ąįg˙‹’'‘yâzÆvČyŅ/˜ëŠ­Õč°ëŒR_ÆÚ)ŒžåŦ柊G¤ ÉáņÕZõeŗŪáîY<-3xK.¸_Ą[eX¸ŗJvB ŧh á˙ķ°WP‘ļK0ÛĖģąBˇ¯4"ôWŊÍŧ>'xJ.X'ģrM÷Œ‘]Ÿņ€{œWņûˇķĻøüūDōŧų—k"5mūžÎžˆēgØā'îN.xu­Ą9QÄä=ŪÎļz>Ŋ´”Ëfŋ;uú,, âoôn*ŧ|ŖPÄB cr‘æ ĐŊęŗŪWÉt Á˛¤†hãÅ õ’Ëĩîm‹OšVÍGīž’ƒ$3ˇ“, ēBÎlWuė:ÍÜvŨh|WÕB¸ lԃmÁąHōĨt:’+øÍƒ\0Ú%‹¨âŖŖČ…ÄN{–qƒĢŊ+ĶËO~ëløyL†Ŧ´čĖf}qģPF˛iÅȌįāEŧĢ <í÷Žŋâõn4<ĸlÜY62÷âûī7_đHā‘VŪÜ­]p’{ū–ėįC{Œ—O*Čð2õ˛<ИāĄa^ģĀK…écŽ­Ī?ã×&b°YJHa–89ŠŲ>â)äúķØË–™^C+%´˜ĪdyNc”ƒÕļņķÚũŗĸžâ]mrđځ+ĢM;ÕV7Ö/DVV__m4ĢÍ EJÔøŨoSŧĶ|˙ÄĘúÂírõ0ī`™eˆÛŽÆāÍ~?†ín̆n-r h•D2~ūyŖąíũ'é&<ģ*Ļ‡āŊ~Å/ā)€ķžŋąŽŪ]õŪŲßį‡gM<÷Ëg|ū(Į=u9°lc—Ąĸ(*ÔÉ] Œ…æÛŌC—-5ANã‘6šsÔĀkÚ-Ūāk XŖŒ2&G՗ō[[x@ylæč¯“Čr‡5™áb›­T’Ø#}é-x ‚ˇāą2Į•Ą+Ūļwƒ§<מˇKaYF%)§î Š5ŦđŌŽÁrÂGØí§ >߁Äų™:]Æ\¨JrÚzb•ucA,‘Ÿz9ķæ}ꊨđ ãŠŋ˙@ loˇXv ֘Á‚{ōâ¯Ŋí%XŠīlé´rævY×RĪ2—uÅoWîĒ ŪcĐPÁÉ;Ü-žĸ´ DvyÜvãYüÕ@Ų3:°heAÜĢvÁRDÎg0\<ŋcE„ƒ2Kž™8 bŧЧ­™Í%ēĩ]ŖW/ÕĒÉįĮ%Čũ$ËŌc‰›U|āŅ×WÛÖĘ[Õ…žKī\žĮĀķĸš÷hāŨ…áķŲí˙Fyr 9rYÔ_ĮĪCØ×(?8^_|‹uŖØÎŗĸŊ‹cá`@ŋĻ˙?(ŽŠÂ‚Č%ũöZÅ Ã +_ÖGÁŠxjhĨp500°ĸŧž~‡w…ûļž÷ĖãeIÉbÔ}RŪs ģâ‡`$ų*X°t#žQûŋI;?í^îz7ŠĨόyüÚw¸čDT–Ft‘ÄÆĖö.—“ŗ,Ëb ÆK3éđ }å/ŋ9$g•‹K%VĻQUX§Qcv.¯é“âY<-‘Ļāũ 4†Ôg]DYŊŌ|Ųûj#˛ŋN,ũĀC".ė;îa÷ÚĪv”wįąįŋÂnÎlâŒ*\Ņ*aīØōFI^õ‰ãÃņƒĮBÅ×>Ņžm¨û'Đ?Ŗą“Ŧώ/FëļX?ÂÍÕ0ˆí›€§2›F ŦWδõÎōÎ)– Ú¨›.}HĐMUizÕ§EĸŦ{ۃ``<Ņ7÷b?āa$šˇˇå?ä]–`BũŠũÁÛã×ØÍ CĪ"튘_XÕ^ 0ËĪíŨ‹ŋö‰85ė‘ƒAz"S˛MƏŽJ`—üŧö“Ú‡-š^ZDú°c!åÔČŦ¨„VúÖíĩęΉö:ŨŲ*ís×1BR˛ŠÔĐãNJvkt;°lėÛŪΨhRÁ›oŲ΅0`”×홏˙œjŠ#ZsgŸC 3¤L-d3|ƒr™''đ°“|§rČ/ę?¸eČAXé2×ļ-dßx{Žũ‚×Vą–;bHķļŲö^Ī9bšËũ_ĀWŨ˛Ҝ<Āx5ûĘ{;ė!37XŊúd2î s`¯§DŸ›D1¨afôfyQ) ĘŽm6iãÖīÂŨ.>ŋ Žed uǏĩ/ <Ú<9†Œ÷30īšũâpĪÜrīuvķ–ŖurPúšõļnãŠOF…đ÷‘Dŗ Ž˜kë{MãŠ÷<8{âUČŽ%ĢXÅ įį'˛˜5 ū,o<>ÄĀįēöčČ}đl‰x œAšījBą•¤ėĪ˙qHĒGNPRawßræ_}ŤTŦį¤nÄ厄ūŠđ_˒)%ü|a° _'bŦ/ÕVÜŗ_ГØüˇSØbœŦ Āī€XĻKÜ,2†8Ĩ/<Iö‰~tĪHp~đ<ŽmšFōÁéŪk5ļé€XL˜œî;Úŋš•ÕŸÂūĢ ‹ob­Ī(Ë "#zx¡RžÄ[~|†Fo0ŠÆ{1ɂvJŧfŠųŪX^•ũÂˁ‡ ŒsjÆ××:vD <3ö‹#€āŲqąąwxņŗČz|HAŗŅ{gŨöę8¸ŧĄ|û¯Ļf–žŋžÃ†/ä_“¯O"CÃ8†Ŗ˜qŲbvãÍr‹~LĢ­{éôÛ ļkŦåhg9Ÿ}+ĢΛ;ë/<åˆmĪŠŠ˙ô’duClvŪÕ×q÷ ÄV´Ã/ü÷ėQ…Ö¸åĮm˂ūÉdŌ3M–ZēōķįũãSņŗĄÅyp3bŦƒ—Á\ĮŒ2Ė=Ö+ÉŲķ—Ūú,{ģ†Û]ЍÖ@^™ƒÖ:ŋ™Ū9Ī_ x˜%Õ´Vŧ€-ŨûžgđŲ&Ė•7h×Ũqõođ›oĻm‰Ä3Kë°rŠze].IåOD”urāÅŗŖ •oTĻX˛ŲUX‡žø¨,КoÅ#ŖÂ“)#Š\UĀÍČc'‚+ļå\HXD5ƒupÍí>ķüĨ€wå2m ‚ zMõų1ū-Č=@ČVÛËĻŲ/ˆ-PŪ§Z™ß|ûß[0ōP¤nGzŠƒM•9ĻÃ)X]¯áĄv<]'ĮZNæ9ļę{Iš1ųÛ<úŽåĖHÂßfšÛ÷ą ĢMÁHĄ ļŠ/lå­ ŅļšÉØú–ī1$X4Q˜EāîĘÛ ž‹ß|+[v?ËZA;¯Ė¨{køz$Ô¯×o|ļõI5. :h$kØGĢĮĮ^#@›–Í%Á`Į?å¸aē ¨K#ĀéLnÜ~āĄģV:hŋ‘đ ë¨Ē¯áŽ^Ėáf ˛ģŽDÉō[?Č֚ĪX0§€Ûf7Ž'†S ËôuÜî¨Îs‘ŌÅëæīcV”bN(˙ÅÉ8šq–åå퉧b1GÔÎY,ĒFƆīŽŲ* >}ë#ĮÃÜ´…­ _üTÔmēxGåœQĢ7ķwķ,; ė•ŸĪĮéÁ‡ēe4’Á*žÁÎIˇY2^}Yį_R˜uĀ=ËÁ`iļĩhöžđÚyŦÉîģۜCø 5åCĒũ‰ P<&åøĢM ­GŅČ%xĘĸéĘø'‰8ŦÄŧVŊ5|6YŋŊx æ9 fąķíyÖqJ_ĢQĨS/ŌįžŅūXgžō?ԗŪ*‚{VM ‡K‹ŖĐįZyö‰‹Vįo6ИęĶAz‘Úú@‰ß:üŒ6hH=ÁwB! bKNdÕ/cļĀĐ­/Eå'¤š6ÅwaãŊīy4ę7Ø]ëáÛ쀧* &=îŗĸjßāu×OÔ-ŒöMŽåS,ZįØđúh[ãnUVc$x6•bä ˇøM9đ'|Zš¯,ęá=Ūh*3į÷L˜˙ÚŗOüÕ;Ĩ7jĩęų™ĨRą UĀė ‡ÛY”ØŸąwÚÄŌøĢ•H(}{´Ē‘†Ģa¯ÉrB`Ë4đPlE–ŨHúDIŒ–¸‡Šn<-Ø‰¯} ˜žČfVĸāš¨û+/˛b>–”G{Eמ›LÆŧ*í040 ĢYY,nŊÎGĸ?ĨOĶÕ žū8ĀkƒWÛEŲžRQÍž=y€Â aÜģÜK‡,´EŪKi0#N ĮK$IķÃ2Ã˛Š8ũ杂īčˆgTFbøŠRúU'S鍷ЊģYÔiõƒ™1,;ČVÎPpĪĀlÄĶÚNHšËęúšÖÔlEgíw™ā!w#,ũ°Čˆ“°€Âá ŗ]˜áĖ‘0 =}Õų„\/ū~"XßÚ4k…6•ŒËŖ,z‡ÕAãÍ$õ29—îŧÅJ€0)ėŧō°%AI/°ˇ@ķŽ>JoŪ ­j3Œ™ —Û^ú— 3ÚY˙%€×VÚđy'ųí5ķĖ-]áŸ†UëĪǏ×âxøģnļŊ0_:`{‹oŖn‡§4$ @sä*f§ÆûÂöČÍgƌ9 ×*Õj*žR¸$]ĻŧPy&ŊtlG$ÜĄwØ2š’Û>ƇxJŲ›Ę:×Į mu/}*@9¨^ķÚũXÜÉŠ˛ ‡Ô å  ‘Lė|ÚņzSl;ĄœÚ˙ ˇĖ’BWđWA æ5íOĸÖŗ>^ŗā]ņ6•?åųWšP"‡‡šOôÃeāŨûĐŅ÷ĖÍŖ*Žc/Ν/¤Cķ֕‡ÉžŖ+ļÕXÔņŒh6õĘbiÆQ+˜%‹¯eĸ‚ôCcnlL%ŋNēą†åzœÜZäŪ -ŋSĀđŪĖf–>AęПā5ŗ3ĻØ6õČę]}Đ¯‰4¨÷ulÂÂÁ[§wīRŸĢé~xđ:´Ė Oņ āú›ŗĨđéŽĮF!ŖOZÉ'ö.R[üžšôŪˇ3üĢčū·LNœŒ§.m<æ9(Kķ>“ĸÆs ØĩjÅ!)æ,æ¯fn+ ī”´š\*ĄØVΧh}ņāÃīŨĐWšxí@¤Á:ąŒĒ@ī4čĐ*u=’ųđR@™y›ãÎūÃØq,+Ā2ú–ÕŌ›ƒgĖúoĩ ĄØYdãŅĀkÃFm3ë°ļĮ¯9Ģ=xĪÛ\grãÎaŠ-­Lõ‡Yb!;KB^Vˇû¨Áí#aS]¤ūõGb2ØīŲōd$uļˇážŦp<^.meĢ-$[,eąĪ5Ȃ˛Ų<Ũ āEî€Øō§aĪÆ@tčÚ#€ĮBR&xdžÕōŨ–J"F6Į7m€>Ā=“ķãæ;Ʌ]Vy?Ōëmk^ˆ¨tâāĪÛ/ōHā]úUT6xÄŅ“2ŠŲŧāY#áŦf}Îĩ7vŖfWJs}avķīCÂ'ˇƒÎsKŊąø ;e0mĀķÍđ[×ļ>ķÎt†ÖA<ŽŦ!§OxšPxŗRĄ÷ž>C/ĶąŨcŅb iÉ.x+(ļ°Z× ;=*xí ´9œJJ<%€)HFL3ĢH‚ķdn…8IĻö,R§ŦT<Úp<ã3–¸ãˆÎ}î˜ ¤<õŒ†i“bTāDˇQĢkø$HëVšÂĻķ°Qa_ĖßŧÆaJŌøņNū&: ­ã#d“čxëxíĮ^§y‰ļáĶ€™í~˙ƒ†Ô y•¨âTœ×ŅąTZClķ™=kF­xBŅŊ.d#ÃŊY,^ņ‹1÷¨Ü}Ę=vTÆdn–TĘįąBå[écøqÎlę7¯ąĸ–tˆ^ĪÖî'ąéã[ŋ(LšŊKû‚§ŦvÁ{¤=¯ĶÔé}lŊ똍į¤QÄWE–¤ˇߜ˜ŊÂ'&îŊōČĀ×JÖ;äԞįz.†MB–ížr”;"X)ž#G7c Ŋ3C7類ž'YEņ`EĸũGĪĻŽwn܄7}Ãv|†āé&xMÚ@;¯vŪŧ÷™ļ}čR‚ö]ļŗ!k‚:”‡Ė•‡|PÂ.?°_ÂX‘Í;Ū };ĐwĮTÂĖŦ°ķč1ØŖOŽ÷ čØ(&-€Ú=}2N¤ |ĸÛí!Ŗ*9sëÅŌÍ-Û0kôãx<ÎķWÉū[ôÕ/y<ŦÚk%f,@oĩ­xĨI›Ū§6đŧĢž~˛M;ŲĢ~-eÂčL3d ‡Ņ÷Dėd4$;ŌʄwöŽč…Š]šĩĀųo‘^đĀužb1sđq“3ĒyXú ‡Ū,'Āš@7ãMVĩˇ˜+¨kĩÚšÍ6RõxYíĪh2 bûö/‰€ŋsƒ(īŪ3ÁkĐ6úļŸb›GžŽä (ļí^Tö u5h‹uNm6jBüûZs9•?…{^œ™Ī>[y/đ^úŖî;\īĄôę2!ņ)QØ^ ŠācüŽÖž aMÚTŒšg—Ręŋ¸žyę#ņĩRĢ‚•rŖČ8Ááčä %ˎ@8MđëBĶÅÛR¯<%ÕËÁsĩ ŪŽžÕûīõOaWĘØĨQ9`\-'$ŧ°šXy¨!ļY#qs/čI&ē]š=Û#u‚7#ķūžļ†‡Q dɧĀ1Áë~VÕˇšD˙lƒÖo,hßÅN"°Ũå‘Tī<æ‡fĩŸP¤AJL3y\'os¨a€§zõˆPŊ+^×ëüIil´ŊëúĐCƒG1’ėCæIãķc“eÃRąĒ“,ĸäč@PBąMĖŧĪí ^čFÁēŊ-_ßb <¨œęIŗÔWžÎ#41ËG’F4Ģ Æ^ؑ°3CĶØQ]5†]odûZVĻHđÉķ2 ęöģy­ŒyĩK7ŠŸũŗß,•ļ+•ß‹§C!đk+Sėqđ3j•äˇRĮņ-7K´dmëCŧĢ2m“šäą‡Ũ3 ū¨ĒDc˜â/‰[+<8h ļĒX‰ē‡§ekÂSÃ{&ĢLÖÔ&-Ņí>āņš‡2>0ÉAīæ_Ëøcqˇ\Ā HđIT׋gëØ/éģIė8…TĩÚTôk(sk6/ŅkwS ļ[ˆcuöüL?đ`š=oīŅ hŋāu‚ķš†\HŨÕäâŒ(ĮŌ[ū „į@lW˧…ā‰ŊZ‘°ķ8W¨hļHé/WȰÎfĮäāUŋ6~WžáũųH,^œgb‹æx¸k•d*ũå3žv]×õZļģãŦSp7;7ŠĻØę.ēbûëOmW”G‰íTT°Ōøæ§Ū~ļōPą~ÕAu9wäÉéŊĀs|Ĩۆē u ‡ŊĮĘI$RrPVį 3ĶĮÔ~† wcŠß0ŦÂÎ/ŽTĒ-Ú^Ŗw΍}'ŸĪ–_Œcí#,Ä3eŒ,/ģŨ5kÂ.ĒÚ>Įåv€HéĀCæāN7ĒäC÷LJ¯ņūFGqdāŠ“§H<ÚEøp`OđüNB"žō”ŽŅGđ?ô^-ĸƒČšĻGCųŒQ!ĘÁŦ–ņĮcƒyM_üÁkSXęsđ„uČŌēĢxūũęˆ.¯cÕŪ<`úgú‹đŽô°JŊ^äáÁƒĮ:ĻˆQÖ\Ab¨šÖy šåŸÂŒū\éŽ,éОîYČIˆÅ˚Á-Sl{íëŧĻÁ:‹‡‚Xŧ2•ˆÉ<„@„(|­8đęb>ģUF&Ž6Š›JžE2_ņŋČnˇz6u|ņ*ŠmRiĨÃK7,šÕOԌŧžsˆ+đŋG¯ŗ b;Ž}”ĮŪBœĨ;øEh.ļ <ē{ņûĶ{gëNq‹9\Ū™Îr‰îO„í.D‚ŋv ƒ˛ÁÕú+4ˆ´ IDATØ1ų9ĀÍ8>›JÎ^üy(W ‡ åÉ{åä 7û֝Ōl•+ŧ'›đYúô^āŊk/ōā!;Z;hoWëąÍIëQ–āŠ4Uˆx„S ņ …~Ą; ĩî;´fæŸuɐœŅP,ĒëŸĄ’e‰@Ȩ å…ŦŧÛīš^­Á‹ŋÉ(1ēĖ(WQ€S3šCÕWÁÚÛ/x^¯ßÆ~Ác<ũ“(ž×ĪĢhčyxô“ĘăyRPrtœÚ›8d˙D%ƈá*č&5[o4eÔwĀMĐjnrâ$%F†yî ,"‡?jˆīÍš°dšT¸YŽ$gÃ!l]=…Ô[‹Wžw‹žęĻ0ɎĶ ē)ļĶ{‚žûhāŅ÷AÛčģ ØyV5_#h/GCLl§‰Ę“{Éū3vđX44=šÂpŽ“95ãb[EęlKī¯$`PFŌõī ØžĮ˛ŧoYÛ¤bNøeũeÛŦ{üšĄGŦƒÉ‡oíŧ9MĩĪĶâĐp8’AĸŲĘ#÷‰+ÚŊâ¤g’íÕ(ã-në5#ÔâĪÍÄVtīĖÂĸ´ÉD*Ėå@lnØķÅŌÍÛå[’JÔvÄÍXqÍgũØ ũŌņRˇ55¯ájēˆ ž>ąÕÄcŊčwhģođTz˙ˇņŲkÅOܸá/lŧ-ĄO8\¸1šÁĐtö럍ÄÚØDÆĄ0zÎŪxîBøÔ[ãx†‡5ąD,5°đ5Ú,-Ķ›ˇŸ÷: ;‘H×C×_ËÖž{åĸįĻJK ŋŨ)uÁģô2ŊķnÛõ*ûķr;ŌڃC–hiŦ7ČēСįčūöŧ!Úv“ßŅ=sGQadh|ŧčÕ áüŧŠYČŦéĸ1öîčā[‡žą´mßã3ųž5âíƒÅ8ŧkÉM={ĐÛĐü ĻIÄĮÂŊpeû“Ę´äŖäđšôØ"ØËXG¯Xs{åBƒž—zyíĀĢ+JŖIĨĄš§x AVĄ;ÆžĀ—Ĩƒáoėļm[9+Œß2ü}‰ˆZ…ņ,>a;"„cdĪ!GėīÁBĮƒŲ5ĶáíŅļxƘ‰ÆÜcĐOÛĩˆä cc9pžæ>@ j°ķTŠē@ČĢę3[XôJŅá`m ė”—ŧúũŠzˇ­ŧzeĨŲO´#íKŽOģđÚ`‚߇mCļÍ֟0ÉŧZ"ŦģāĄŨ cîåSÎS8ޝ_4w#‡Øú'ÄãcÄ™ŪˆĀų°¯5Šmy2‡sāN ˆw…5›_ĐüŽ8æëå˛ÚÚäT*•^ZēÁųģā=× Ģ zųo]ŲhG._Ų0t„ ^ĶL˜˙Üā Ą{f-)líáÅ y ļaŌŪ6Ëę9æ2˜ū*ŲĪđ_ŗŋ [iÂ3ŠãokȒmßķx$;NÁ÷>͈˙=,2Ë-Ėûūä÷žL×ZU%ÆŦ­‹1…Q('?ˆ§5_RہÎg%’~៲•÷. |Û;Ũ^ŋēŅũĨ[Pz¨¯aÂg;Sŗ)p‘ƒ,GéĖۚą\örģÆŨct„UøJËnÕvŗķ@EŖXz$iŦ¨Ũ•7DTei w}^ûXŠ÷ đk'ŖŅNJâåyŸ?÷ä9ĢĖŗė0Rx.ˇiį!x´AÎf˜ ŠāŨé¯Ņ/}lx‘>āÁ÷YÖ~О6!¸Ãxˆá;öōA™UkģV°ī°žooEĮ÷ÄÁ‹[5ÄÎ•įŸˆ{0-œÁ¨ëMېōū,’û`q7VíĨ¨Y$—WāšWWãžsĄÜŧļ6Ў{fԋnšāũjƒę„Ž+xCĢzäĘãˇĄN0÷šŗĄ7hÛHp, ôŠ–ŨčŠ )YæM‘8DĮųß:{lÄúģGaHũRëŨذØĪ(ˆCĄ|FĶ$g.^¤ttoOæN‚^å < ( ]ÍjÕŪÃkũŌ—´ņ4m˜ā]q€§?*x8Ø >22Ā>$ ĀâiOœą@OG¸Ŧ DĶ&’ûŽxbģÂûƚ^ãīŪ§^"ū÷Üėės’ca`áOõbÔú@ōëé‹Ë…ëåÉhĖ3Ęe°bâÜ1$™Ŗ$p+ûŪ]Ąd&Ęč—\ ēŅ F´xŪ)7ëL‰Ü†_æúĪ›X„删 yׅ¨p,]c–°ķÄßĩŋĘÅ4N6zÜŗ iõûĸîøXĐ)ˇ*ņcō^z Ę#ˆ­äũãÄ-…īDŽ“If͟LĨFÃŧ¯2=c’ééĘSƞwš<ī#‚ĮÅvŪL56žy9ŠÁΠ͓ĸQád}‰åĒDH'šėoÂŋÁ7kÆßΕ‡Qŧ9ŲQĸ&KžėÜċ ļŒ{uOÉ:Û?āßlî'‚LlcHf‹eö•jĪäxWôī}ÁĖŪ}Dđ:(ļF/n¤0ķŠ"‰ Ã6ø@KHLÅzd ÄļR=Ŋ7hæpŠ­1_Åü{wą5yŋ$"ųüąX\ĀN"sdXđøžvᅋtģOđ æTM›?ŸÍÍôņŲøĘ‹ņ-—āŊŪ z đ†7xĢzā /?´ļ%Ŋ/ē=X#—#š'‰ĘCüôĖį_ÁŠ ,¨˜Ũ(Œ>_R9žÚ<˙„5–ØîL“bo†Ū!&×õ†øĒXv™đ ĩ~J–diNôŗzáæƒ ü]Vw%‘Ä7ģ5ĐČĻâЕ×x׆Lđ6ā]Ąīīŧ@đ:Ą\6“Aĸ+Î4T`ā…*Ŧ<ī:NŸ.ā ōŪā‘Ņā‰œ,•öĻIa ʏĮÄāw´*ēbž1,ŌĐđšÕŽEQíԋņÔÅVķUjÕ$%-Y“‹ŧžŽ< #ÃeŨ î×ŊO¯čO]xaFr¤?x÷'bÃÍũ“ũŦ&4Tũâ-$Av­á$ä?ąē ŦėŨÁQĮ{pĀĶ=˜ŖDՍƏ‚Ŗ•Ÿ'v4øī /úƉgk['Hļ,húäT"–>Ž÷Ūėt,đև^_‰\V?Ā쁇Ņhxīļ#<(u‡zõ§.=ˇ?÷Ŧx,ŨāÁŠZŲ§i§b Á$7ÂOĪž˜Ŗ7/wÜMÆŌVīVŋųvĮHŲļy› Í2’û‹-ŒqNÄ>Ŗ`6ÁˇĮōĨ}Š{ ŸÕĢÕdĢ[Ë8žų|ÁO\ž“íĄgĪ’0Š-vJ*x5â]9|x_Y¤ų˛.Pĩx—=iˇOč_Ũ_` Ī5 @ĐļY˙¸|2ŒšŊĮ§+œ@ŽFW ėŒEÉFÖ%üáŪāyÂĨîũMŦĖڒŪėF ,K˙)t‰šÉˆ=Šxz}nîæ\„o2Z9*đęVqĨöž„í;_ę„ķųĢčžÍΤ;KEĮėÖ/ŧā5îjƒQøō¯MIĐ+tĮØˇ7M8íĢ/ņđTÖwH\'¤FmRUytŸņCÛũM)1W^xntbå`č¤$a9 ā|!ĨãAîžĩfģF’O<•Lœ=Ėåŗ÷'‘63LKÛÛ[ĩ.erŸQã?îō.Ô"—éĢ}.Ü÷ʓ¸”2?Ëž‚E^lwŒ<‡éŗ ŧ䍊ėkbŨßúŽ‘˛íūĻMlŊũęMŲđ°†3>ÖŅ;´œ#Ķŋú‡JëVčāÃ4 2*įķ°ņ%ã3 ō¤OņŦwÛÆîだōû6’īÁĶTßx”S:›x)Ęfđ OoC`BØ˛ĘĻ÷žúA쨚āŊPÛ<‘ŋ#úØfįą,s™=螖Åq4Fį5đƒY1¸JČ䓉écäæ[´ũwy陑 Åd•úrąØ;Ëだō;ĀëwNČäņņrúĖŗė6‰!ö¯ú]˙7WÄļáá ļ#åZ÷=ĖØįA3KŊ§{ÉV´SIlF’Ë^ÕL¯<ŧxÅ~ÁģE–uÅ,qOp…q‰<ŎŋMĐ%sûĪÍ.>֍-æ“mšĪPE‘°ZÛyÕw8î‘GƒjV Ō°údę`X–˛ę)ˇsÁo+ŋ˜ˆolõōá¯dë Ū{ Ô˜úáãĪĪ“’$pĮŅЗɛ|z:9rÄv4OÔSövŪ™î{Ŧz­â’/“y䚯à É/mg›#Úé ø|x4́Y@Œā‰˙­Ōk„üöß?aIXüąĩUМi)‚ĻöXĀëÜë Øæ3sãö¨Æ×2:āiRQl{ÃQAŪ<éJ;Áër6õ^Žj~4īdM´Œ8q25Šíģ™{$ŌUëAĀŌ[˙{ $‡CRÖ /ęĐĮ1öęû“Qŗ™ ‘`ônËžˆö&qšĻ‰Ą+$ɖŨ<‡Øš¯ríxdKk—aģË"wŖ0*Ív›pŋÍ>FaËO*•áTĒ/Ãī/<´xų•(#ŽĶ°a!n9y 5¯p ”a,Öísīüûp¸g;ÁÛzÁƒĖ$Ŧä>Ÿßsų!ņüU°FãįX ÷¸ åÁQ;ō-åį˙G’b- °ķ5mÍîœį/ŧōz.dižņX| ļŸŧÄ&˙&Āl9Ŗo…}ŊČ{ƒļŸ=›îĩōđđ‡5Xöué!qŗČ7–€ûPīū˙ŧŊ}p[ו'xßH–h a¯Z‘͏ ŒÅĄäî(Ž3- Ôn :%/ķCėļ¤ęÉŦQ2 Ží­jĢ)é=SŒ˜Ē™naĐ,8ã)ĐŲ?ĸ˛Æ [Ֆ‰ŗQ&šnĢá)& t`)n'›` }„āŨ=į>|>€âŠäVI$É÷ņ{÷ÜķqĪų€ŨvÜėהyo&{ūøę;%@°#á4ˆ-Øy5ēņj ´‹­Ü3ėęÁ×å‘?>æˇéÅ#D—ę=KRoĪßåúsę%$Ø4ČHķā^8îĀdķŒŌ8Áën{qû|“ŧWŌ™ēÂĐZčøÄĀ{čˆîi.Ô+Š=v!l÷ų_' Íšah˖įšĐ{ŧÔf$7Mâ–Âēū@]#`‘ō!‰‘68ˇ™cÚļŸüNwŽs:‘ĖĖ‚\˜#ߛ˛Úãņ~åā•Ā”o@j…ؐ›jۈ7§šŧrĢXˆÖq°Ml›€[{›žHoÆ='×;Đ¯¸đūŊ€"Mtˇ^ Øbķ„eŗØPEÌ4Œ:Lqú€û̎?ŧ‘ąYįĮ†Fļö$v ŪŖ4ØQF0Ÿ"axåŦ™291ĮDÉÍĶÉrģ{ēl>öŦ´F3ôi‡RęßįFõvb™áŨnНI§/’™ô$&ãa.ΤĪMr8o†œũĐļ–)ī)Ä6ų …Q%_hTéķäÍŠË29ŗiU&;¯vžÃ~h>\OæW8Ÿ%aKļšÍŅ(n|l‰¨zXÛ.Ņ }ļf^x<ˇ¨˜Zlčė/F˰7Õ'>ˇ30k%áŒė1f¯•â3€MõĀbĮ&^ę0)÷īævÁCŖ”ÂN\0p÷O?+IáÉ kâ@XꮄQEˇÅ0 m—¨ßl’6˙Kæ'âm˜Íã72”D°›Á ;wbøSŽšõ ŋ€Ų>ˆl"žbŲûÜŅ?FeĄô˙ŠkÛ2=ßÎŊ‡ÖާWByįwž|C˜psĢ‚ ŧāf&ß Jâëízæ#[8dcĪjŽy‰FDŠkUrĻēū€Mx@É=ŠģgfF Rߊ`fb›öšlÃŖ°ķ,č|˛´ōã ų š‘ +šJ#āt—.ˇƒWđ:!˜cļs;´mlŪ&íėa$"gĻ@åqõžÆ`žđļ9I ylņÔtƒg”oTjĶ °¤;Œœ X´×ļ=Īå‘:>íÅp Øy‘ÖižÍ;ģKīt‚ˇÜŧm‹-ÆķîĨĮ ­ėK8ŽÜ°NV_ŸpĻāëĒ<ˆĮWÛ3`ą>đŽÖUģÁëÂ+bO~ \ŒÅŽŦpÕĄæÚĢĮm5OĀ鈗ؔ<ÖØnī~ĩ<ąc"6Áë94i[„OOž:ÁčP˜į Į9âņ{ĘT”;”Ō[%qˇ—äÕ\ķžëĮÚv–7OPz<°šÅáō˧ŧŊHôÜl,^ŅU‚?ą!w/ũŊŪΌ‹ëO*üžįX@¤%ĖšŸ{‚W~ōā|`lÆĖū)Áŗ_Ų§tb= gSžę¨§Ŗˇų–ã_ļÍ<åD„KĘęC­‹œÁ̜˛ÜĩÉ戍„YãŊ€#– 7rŒ†,7đäņi?šË°"‚ØŠAė‚–Ŧŋ6zŋŲ:„w}ā‰Ŋ~‹ŌRzÜë1ÚI[z+?íg-uO“ũy?Øĩ)V)€Ū‡Ø~¨cԝ—Ž”I°Õ –ŗņHšĢ´ŧ“Áđ8Īr¸É)Ļ0(Ĩí9ÉEąRlĪõļ ‚ƒ÷Ėŧ…ēõdf1Ol}ŋĸŦÜ6åŽØ…Įr ¨Į—ÚžĄžŨŅžŌžjH„5ŅEõoAvŽũ…yæųãæęž2(Ų1ã(ŗë‘ģfžũ?ßcJ2­äh™hJĢä[įŪráķxt ëq/=đd×­,ÄBā=åöŒ`đ$dˆWyÁœB‰ÂÃ{möÆī[b›RšÚˆzÜsēšĄB39Úú æ‘YÅQĢ2É0ʃ†ũQ °XP¨ŌĮs1p–^mxgeĀ+ŪÉÛl6+OĒRrfP˙´ŽĻ\ēķ xRī -āUŇ´ÄrΝX=ŌjėŖ<(4ü2›WąĻn1\m—ø/„ žj/đ@ng8ŖęÖքąĄŧ)h"QéLŒ4ŽaR GM`XŪO\nqqU‰Ģ,ŽŨ-ë_Äy_ĩžX–ÖcƒÉĒãxōįĪięJĐ<úÜŗÅX+ē7í zf rÎũʁ‡-n1MÃÚv‰ ĘĄöĢjrõ@ fÃČécĩKƒ‘™Œ×ĐQ7šQÛrFä܇}ˇNyœ‹öXüŪqÕÃÉÄļ\Ũ}˜åIÉÖVEëÛso¯É֋7N˛tę—6#šx>ųécį„uÄv@Čü*ŠÛ}ôEöåšŦĮãĐ÷aįY„ą0ô}€× pä5 Â|#]aũ•õ:o8đËđRyNĀÖ06…Äf|…ö\ ÃĘ?ĸ•Ę)‘^žšŦ_G*‹7ËÕĪ7Ā{ķtÁ;_”]ķkč&ęā€6#y3đŌã>LJƖî*ጰŒ.Εú›y_jģ„2ķxÚFņÔŗøL/a#Œnc2d ņœĮČ|˙lö´ģąéÍnˆķŧb +Ûg”&âTÎ6#:EĀfŽ\ĩVYįųéˇN—ŠéüĮsE8ŋCéۂŽLw^ œ›ØLXũvq­aÄ=ƀ˛}ĀĒXúŽļK`ŧĀ8~š*X[„}l~v ļECĄLÆįvÛĸ* ØúŲ‘=Œ”‹%Ožn:™CđθđčĶoũqĀŖ€§x&ˆ-vÚáĖKŊÅnį(Įļ*`QĀŌGŌl&ōˇÛؓtŗamģ„ŌÍĩ#sU x ˙ąf@ŋ …ÃČ6ā\˙ōO‡Ūnü%ÜéŦ9Äc‹ČËØŒyjŸGdpPŦ%|ô:€WT7×o+Ķv^Ę–oą¨Š=„éqŽšKđĖ žËįĖũ¸g_jm&Čģ[p6n §Øâā›ŨJHk¯ŋrBā{‡æ#ŸÜŽŪÛo‡‹Ĩ/ũ¸xaå™˙Šm0jņ8}”ËփĄŸŅģeQ"MđôÕ/ €wą\škīn`´€‡Fig– $!˛ĩ= įįØG^x|ŖŽîŅv%ųķÍ#Mąí žs{ÕŅ^Áø:öKŠd2Č/tū8ļGŲBĒũR6G§§Åm¸gŸQ–F[m€7[ũíxD׏˜nĻ4$tofĒ”2S¯€5é‚íĐ|CØHÃÕveŲėŧĒļŗÄ0æ/ļ:ķ+5Ŗme/Oy$ŋˆdĻÆNųƒ´Ķ=ģŖOođ\Ŧ}5‚'Ō›ųmƒwŸ>tÚ_dĒ œ ŗÅ€y+ĘF‚¯9áė›Ĩ]kO‰‘t\uSąmcĖp1c Y˜É ÉŌ?›ŲŖŧÁ02‚ÍIąy°ĶyˆÛ`1Đ{°`4¸ ŧŗíāÉMđÄ&xZãy=Ā“1ĢūaÔöüøQÁü¤Ļ3Q¯Hņ– ã¨öt„´áŸU÷wƒˇéĖŗIŊĻēžčfŌS>“ â,ü¸Rįcâëoū۔Ņét,Ä?×ĸâ ÔęūŲŦyíā]¯ƒ C™yįw5 Ņv–õŒęõöŲŽ:}ėYf°8ņúōÎH˛u2s¨ačõ ä6‘m>Ūˇ‹QëGJaURĨ{:ādbËZ‘;¯™÷™đNŸ—Ī´Āc]oãI€'™@l™ÂhŨ+Ŗ“ĐÄękēĩļ+=`˔ŠFÛY°ôÃōØĮúÅY˜yĶĮkʎ_°c5ßä-l-īˆ)ŋí ŗyņNųôr•Íŧ"‚GŧQl[āÁíƒ—wQųŨąģ˜ã+xąļA5ƒ'NÚÍ:žÃ[v^ە”™×7xzlwjŗŲmķ3Ųå%Š˙–֟gR )oaė*—/\„éVA]QųšXHŌ稿­7Ë_X+#xįķ”­T]—pæÉÖĪžxûũĨ˙ŧoFÍ.a…rûbÖķ!xÖ ]MíāĩŊxXŲ÷ ąŨ <ž×%øyžxŊcNG’Ūŗd0h¤æĪ¸/íؘ֟Ŋ°Â¨IÛ\sûė>1UuE.oĘ?Íaĩ÷j•ŸvéčPQ4]ŧÎĀ{ģę˛öŒéŠÁkIˇ&ļˤ{WGG 8āÆâyķ{ÚQëŪöÅFØ VœÁžø~8í)S!vŅXd%õ`>28õ~Ūv™”KĒå‡ōƒ¤(*] ČR%)Ģd%Hĸu˜ŅéęXŖŧ-­dĻŋ@°*čá[ I@OėˇëõŠšxÅÉUÔûZÁ[;\ũ‚§g]‰XDIY|Ūą_¤4U[‚@īĸ_p^]ĀļĸĨ/ŌĪįj÷cĸØa0ö:<đZ*™aiŠx.éÜŽĀ“W3؀ŠQ…''Žĸ]lÛÁCĘŠš7;“ŊíāĶn?!3'āp"žōž2ĸ¯cąā6|C,™ėõą7DúÃ]NÉ%9KEŠņä­kFŸ x°–pŌcCĘY)ŌZrŒ#zû,Ø+>ĪIۀ=ÚW8¯+ļoø]ÕeS›üĄ úlØOØĪ ĩ­c1ęH"$ü_b? ŗĩX$‚b,6e+˙•îŲÕX„í>‹zÎhĀâ8 Æ!GíKŗėEb˂m€WÅŦđņŖÁë mįCfä'CbøôúD[ģēį8?&í…ŗØšÕI—žDŒ~ÁC¨Æöė!ŧ[iü„YzÍ÷Ë%¤˛´"ŪžĮĸŅ:ÕeĨĮüą2Įõ’ÄŦĻ‘Å˙"’îždĻžŸŸÄŠ8‰’čPgŲ¯ģjĩØypZ‹ŦP´"Ž~mbËēĶ“ØNgŗWC¯Nš–>Ühh2ËZļEÃ3Ú'^;xōá^āĨz˙]/z¯Å8™ {=Nšą%ÆŲHcˇÅĩ~…˜PlKČ< bģQ’s]\pŋBđb06zĩąz IDATVāÚđ ÍŧŠ­*Kب]Gx5&ļFmāuŽŊ>4c™ōĸŊ2 į*_°ĩ_åæ(īÉfAl ĩ%PšƒÖ/xĨđrvú܍0æĮœ7LŠ#†“Č9ÉK<ŖP~ ÷ą´´WAąjÕļ́ļzŊ49‡y¯įuFk¯<ÄÉÖ÷ĖcC0ŽŒčŖ’kÎīG:=_~Õįõ°F6 ĩŲi´ķ”Ą˛Z:§ØPŲZiÕU\Û9x5Z{i 0úHvGĀ YXĢJĖ49˙ĩ…ÆŨ´vđØÕĨˇtz;ĄpzÂcØowÄfVž+#cŽrČÁÂ=ËÃđ×דÉVļ€*Ú Ū\Õu7Ŧī>đĒo˜ĀØ YĻtI.ÚMŒŖ[0šˇvz—ßōX[F&ÆęĩËŋC'Ÿ{äņû‘ĮĘĸđûÛAaLyŨÁBío(6Vl—ĢĻ'^ųˇhéÃŋČNũ#āž™qûBh=BȒžd­*gÃáW…îGÜd´ģg=ÁKmú§-_Ļ•c‰[>pÕh$ŒҰĩ"ÜåņīųyÅų—+™U0UQlą%_öņ3¯jÚØxŊ~)%âîŲb ™sëe{ņ!Ū0˜Îöųy‹”_ķI4Œļ™‡9=<áTī-¯õL˜˜nÜ͸NO<ļļô)ãXĀ9rčJ“•q(Ž$%ˇ]ŠĒ§)zsŽ>m‚dkŊ;áZwxxYõ´€'ķ"-Ŋ÷IļŌ¸+ŽŖÆŨ΍M/YęÛ| F›^EV´éh›yX$¯'j÷L xfōę¸gĖkî ŲwÔxâĀáÖĻŖ@‚#’FĘUL ?Ęd¨Õ֛•ŪyĒ?2ČQƒN&åŨĻ”˛ …╇dqI×ËCčŧī‘pĄŧōĶđ‚Ž<“Íp(ļX$÷Ô.ĢÆ¨0ÕOŲW¸ú¯Ŧ>ĀFjĢ3žf$ö…=fžĮ‹ˇßö(\ŒÁ­EŸ{yŲm/F~ôčšÜ†\Ɋ`¤$i‰Ę™FTå~YvYĨ<åŽ—Īœ1 ]œeøæÎ}Vŧ#!G \‘+î’ģ‚>ÁĢžŖLláåaÜŗvęPĩmša˙c;)ĢFÛÍÕØČk?×̘<€žõĖJƒ=j6#÷0Œ—0=Ÿũ‹ô”ī–?py1gĖ`÷†uđĒ.Ķõ2Z+WEn¨žöā}|įŽėē^=ōwŠōoĖUĪüööĀ“€{ gŊŪכŗMš‘xalnt~>ď…ũv°5~ŅĮŽwÛDSĀSuZÖOŒžf´ķG=û!=8;?ūŊ>bŦŒĶž`PE`vŋZ/.—ÅĄbQvŋXO‡*xËpāNU´Âץår/>Pm Ž_(üí ōHąpˆĘã!#XSh~Ę­(?Ãą]‹„ mÅôšÁS`ęæáZ ä“ô’Ų,ą{°"d 2ķ^ˇdĀ_šņMOĒ.F(¸AK+ĢMNZšĖĀ3×d×ܟ7ĀģŋüņMėü€3Ũ)÷ŠYi¯|––O9 ‹Ø¯ŪŖ{„z “Aˇßώë÷„Į…c>Â*mXĨļžē ŲÃ:;8õļØL˜×ũ€Åķ°ļhč{§ééBai..¯æ*ŒŠ+Š\Ĩ(–Å9¯|Rļ‚cQī—/ΕĪ5Á[+n<ųsôAŨo ļ“ų&CŖ€Û¸ÔdXAÛ;rÜ m3OO]•š%xÍ3ŲlČo ¸Ą›˛(vŪûûįaĖ„;ĄØ —k\Ĩ8āŨTƒWūãåK đ>ƒYˇđčuZņ;?]'LÉåąL8ƒƒ`§;‹×mÛ_ī –Ōŧ° đØoKa€š°éÃ!°š¸v˛'<šģŗģAŠ žĮ÷eÛjĶgájŧ›Ü,>*se2ÄĀ;AŦ&Úo­ öąŲ xŠüŲ\a^’ÂéWq’ŲY•+q7›/ę‘ŦŨí ėŗyÔŽŅ†•žzæm]|†›O<&ĪĀ÷ŧ´—č×ō”@Œœ~64惺ŲÁÎ3[ˆ×ãtÁ ŖČž%¯bc4dJVŽR%e—ŠŪÅF‘Yų…:x 0dB­kÛW˜ĘēÚcq!¸‹3ûęō'0u(ÆæPØ)+ō:üŽIĶvÛ¯}XBûĎnиÛhä†đ5î} .$™Č¨ ģČ+”RW—´”mąP | EląđÜEŌō.ŧ#āt xZˆõ7 ÃW`ŌĮĸŗ!ĨÆaīkä$‡~nˆ‚FõõäÚÁ2O´jÛļ™ĮžKlĩ€‡m•įC–WŸōøYŽyxĘĶP$Cüįų:öQûô8kaÅâļíĖŧŲ™Đ$ÜÜÄŗWā6t'ČoŗŧYp´šY‰|dí<Ė<9R•N–x…fáÂŌ¯.˛Š"xZēŒnÉßvCæM˸qĖ`××}Ũ=ā•y<ÎûŗátfɍuæA5xZŠĪ82ĸč*ŗŒ“ą“#ŽÅ+aäX1ÚFIÚ;N›í‹ŌWŒdŸxļā\b•Ūõ¨Ęų-ņ3o¨ŧFs+‚wÁ̊tÁëmŌ hÛˋؐrjƒ”õlØ…¯zQD¯Ė[n¸ ÂáÃĄkŸyõB)õ._?kŪŖ%‰)ũŊöčŗ`¤āņ]y´dbŽĀœōĐ=ËdŗĶH—l€wÆÅĀ+é%¯Ļ€‡Ŧ ¨m)ļϞŽŨíŠfą¤3Snl•@tÄ6bˇIf Ģö@T`Ut¯܁zIãķļf[ƒM=ķ4Ԍڤ°Y Øč;ž/û@]Ā}^ĀŌŠ(čãq/æĀƒĨšÉāĖëŧĘZõœėaqh­(ēL`(ü>˜'O#˜Ū`a䟯SPˇÍR‚üË2yž+ZcšüųsC2˜‡ ė,ē[īN¯Ū"ÚÅ6€Ä.‘´āeYæáŽCÖ2ËÉø0 .š˜ßĒ/kk¨fž9ŗKuIMbËÁ,“xÆs`ZwÚGüŖvŠūã§§F=b›õŗå.žĒŪtėīîī¸Õīd~L^~1Dŧƒ˛;ŸÎ°<ęhėĐǰ‹ˇ™'S삇]kåc -ÆķpŦii”šxd?Dą˜š˜8Ilz¸and`ۜžÂô7@4ƨ˙kÛ[bVGU´—zKF0"…Š-fë/°¨ĸ™[˙—ÄķÕaįĄ8Ø&>ÅJaĶEZÛ¤‘¤Â¨Z/',ö"ˆ× Æķ2ÂŽ'°īqD%´—ŊF܅ÅûĒÎöųûcĮjړ’UbËmÃ=ãPÛ˛ä™hŗ<ū€Í}>U˙ąÁˆë4ëp ĩĨøĘ ,wbĄŋū?JĮG*o?Ēb+Šô‡ÄDÂÜ+¸Đ0 Æ7}4ûÆā 9ęwrđųŊđ„ ŧÖŨüTfũ~ûįXĖ8_ö?ķڄalˇūÅļØž4?æ6p ļ{ŌŦ[Ɂʛ^G÷L,Ž&1Ŧ’ë ÞC3x§…(æ"ĨÕ¨˛b+EÛLæ–n;gO tTá>v¨f^7x[ĖŽRkHjŖôÍpĮįVū×8,’Í\¯ŅéŒ%âéëé°Ū1ąí<&ļFgũē´å9ôXxäÃ~Ô0ũo˙ö;64*=Kø‰SŠū@Ԑທcņx.ÛŨFžžōą9˙đ.ö lŪf3Ę9,ņĀ$c쎰ž9Ŗ1)mzHãŪÎøü,i:ōŽf…ŅŌļyöŲԕ1Úōŧ™ÁÛöÁ‡Ũŧû”ƒŽ3–)ˇß`Įä¨Ė-¯îk†>úzƒQY0’q÷ļ UWŨ xŊg^ ēc{@ņúŒļƒ˙ô Æ~đ†'Ŋ^g` C‰ëâ4ÍoqÎĻ—,!^ ä Nėįbą éŦŅãgíánėķzœ——ĐÎû‡¯ŊPׯ&bņ0šN›9ÉŪ9â⊮ed Ĩ¯Ķĩå;ױț^_Æi“ÛŒFU#xEĨ e%H,^;)˜Ū°ßēî5ÂüKÄ#ĖÎß\z´åti>z'H {ũ‚×ėv¸ŠĖ×ũä ywŌm¤6ũw#‘ŋX”ųGpßŦz—;xL“jh °ķÎļ"x)éūåŪæM™ĘT: /ÖEķV)õ–uÛāIH îY,J§ßú-û ųdōX=ü“ņMũÎīÅ÷,sŸ{˙Ŋ´æ”n•ÂxvækũƒĮ#˙—ŨÆKŗķÂYĪXĀ%‘!˜Īā˞v苋ąwV2SSXÅgå~ŗķ”^žzÎē&ģ#ų~žŽŲR/cގü4ÜbJGoÎIŌ‹=‰´€WTžūāüƒ—VpĶ̍"hN€Ã:Ÿ üĮ—.°éÜNr#ɨfŊԖ”l6“ ?öĩL âÜĖ.Ŗ'āZ ŋšr噚Y|Á}đ×čę_*ŅJvZlæJɘ`ÁĀcây'Oķ'ķUXuxoôârņđĻ@ŊĀ+#qZéR†Hĸč¸˙⁗ÉĶēo8i‰9āčqÄK7ļąéWpčzš"4ö—d/ųbĖbɸAl1G€Ž AÔ‘H:íõ˙ö/^Ö}\{åŖXĩ¸g ‚éjƒN&CeŅÔīŗ"ÍßÍË.ōNŸĮ{p™îĪik&Ōsæcb` #=åŪEČGDüŖc{ČsH–ˆÛ72Ū~ÂH*…1(um§jĖnŒ’PxŌĮÂQ1œūn?’k)Ã3•Ō99}Ô?ZaMƒcŽö1zp4;-6/îWĩ<WvYŧeÄÖj]+žĶF2Ũ <ųyø¯´ąšõũá gƍØ-^O|ˆËáėˇOHīzşŲļ!ļ~4žtö žžčCL’F^Đ0,wūāŸũqɄČ!3y.Gã ąE;æ*ĸĩ“Š}WšŪMŧįŧ˛ˆˆĨžfEÛkĪ误jæk>ÜĸŊîŒ×‡'ņŠēH“žŌé$ŋĒŧ–Ø ėŗÔUŲRl-ŧ‡3°°ė3¯8Á/˙ 8 ™ß‘'ŽžFuOcʓÅx2ũ'´˛Q’}sĨPÛf[āå[āĨX}íāUw ꡟAkÅã,ŨgÔ,$ö—2[&`ZÔwúu›VėÔbĢ—ēĸ*š“’#ü¤â#&ØŪĀÁĒ}Öá>Áą ģ'œąŋ—\e5LlYKKax¤ž¤€wÄzW/Iđ´tbé žŦŖņ8,0Ũ v fͧ Gô‡q×{ŸÛ`ØŊ˙üŖ>zŲ´fΏ_]2Jh9™7úŒĢÉwëXĀi‘Ke^WL°ĻžÁĸ>¯ČÚĄ¯d˛0ķ:7qÍsĩĀģT­ĪŧĸŪ%za‡āąmsņōˇžđš/^VxF ŧYđ¯öŒîaŒ›iÎļPƒgžéšy[Š-?îáFQr!Ėē¯üIōū/Á9s•÷yæ˙x‹+Ė €ZÆ$‹cA…¨ĻėSäšāĩkÛKUĢŪŨxßß)xH˙,8Đ×ION cž –ˇĖ'Ū7?u4W16âËJ˜ļÁw‚×Ŋé­aæÕŖųŊœáuÎõÄ6í6Šû *Ė܁ht%-šäsįŽOŸ*.+b;-6/‚āQĪĒ€g•­k^ŧ^°hŽįÕŨ3gĀ1+= ÷{˙?=›ūėe‡#Q‚ånÂëįĸļ+Ú'žzæē84&%c÷°Q'RéNeƒ§Ũ>Ÿŧ7yėēŸģŧôĀô‹ō;!ÔngđqĨ#Fár˛m÷ ‹ŧj<hŪvđ.>đσ`'âƒoq6b&éŖĶ,úƒ\ųšt8v„į^‰E´Ŗ×Š0ĀWā՗Ԟ€L Xđ‹ ƒÎIi’D,‚ØĪĄr@¯ĮčXŒ—Ōlģ p9ąąŅšáāÉMđä:xֆ‘đJâú‰Wđv,,YŁáí[Ū1?FĪaY9„Y{¸ ¤ŧÖD“ÔęckąĩÍJ3čŲ |×2#}nƒJãDđœ Ø_ˆ„Â>ĖdaŒ[žŸ<›¤ŸÕjĩwâ%°WO‰ÍÎWuđĘž ĀŖC xwšā‡ącą§•¨ X%!ˍŖ4øzC@&]ú>Ú}^”˜=áÔ6ĀKmžö t=čĒ iKömHrxü¸g?įˆ^Ų3“.Ŋ<ŊN[ī)˜~XvÛpĪĘC´üW‡žíy ßî<ŧLåT0`_BįkĖŧˇwąÅp’83‡¸'m<ŊÄw5;ŅöŅĪķŽq”âȅ4v†č­p\lf%‹ĩķŅD ßü)ÅÎëL Ís´ĖŊ]äÉ Ķ-ętIo™nÎĪaTE’­s7w^Ö'9N7žíJÄ™Iæ}í<Ög\ŋNģéī$DnŖĨjë< ҧH—”Ļ ä÷÷Œbéī’ĸϝāgīZSgPlgaYūĄ @LĢ}xß$_’iV„ŗˇÂÉōĐÍęĶGHž yQ—7ĨŦDé_1e’öijcĶŧ˙KGKq™ÉŦ´!ãĖ;ģ&ņŪ“KQæ>úY‹ĨôÖĪÛ^ãˆúē}”‹ŧ8ā Ž:ô’ląaˇžĀ¸Ë`ōŊ“Z,!ƒØ*9ņrĪ´îļŽįčT­y›ähŅ•zyûāU`ŲŦ` Ŋp$=ū­ ĸØâôCûԁ´!Ų铤ũy[WŪ <­2q˙KģFíÕx"üqŸąŲ’¸ëí-ëΉÁČ9¯aœŲë ^fbģi-AĪ–ņę;îÍŲeÂϰ‘ĖמģIūé¤=ÎbŠØ˛j Xd~F—šįÃégĶúÄjmkØx! V`ްÃ,K=:”ĸØ—™`TÅ?ĖJ€|ͤ@E{L| =J-ú¯ˇokĨ•;ôĖĶĪąœÜŽōeOá~ƕg÷üŊû…#īĻqųsÄÂę†ßĀĢ4ލ/ĢElŨĖDœŲģO0¤ĒõÎO]D’y[Žå Îė›Ā4y9"¯ū#–›{Ua0Ëu?gR‹ƒæcå.Š).j¸ë +JėĘėĨos‰Y%ŠŒ›*ā‚|ŨŖ:ŌClEÕeû¨%ā÷ ãH5ųNØ:î9kŗ_ģ2sŖöá2Č]”ß솅ưÜ1÷Ŧ"Š´Wc‡Kŋ đ`õüåĨâ2øžũĘ !É+1ÜÅ"Œ'g}Ķ0|åßkNļh›y F\7xÃŌŧÁ΍-B“Ž{Ž(ųNå֕9ŨôģmúHú9Ŧ8ģú~ŧúƒĩ‚ú:áÚ!x=Šmá`å´X Ôč{bĄāˆaė.ëil¯L;(^Ļå?vĖFÂ[?Ŧ<&Ø{ĩđxÁ°ŸØcąû|˜}TtÍĨŽrŽĢ'¸Ædė@÷ °I IDATėė­āŲ`íŖ>ņŲ9xĖBi ÆxÔPŊŽĸ€ßŽ8÷Ũ::Čą‚äuZÁkúļŠ^ēgŪ–IÉŦƒLxNģ휍芮ĄÔ‘)ÃYą‚e5˰Ũ EĀũjØĨV[ēVBąĨ´p•îxhÜ×ZœYéž ˛ëšōŽĪũ]Ög„ĪßeŲž§ü#vIŌŦ/Zā5—65xfū‡¤Ģvģ^"“™ãĮÖÛį„‰•Ö°˛¤üÚņĘiÔļĨŦ;XKLlȏ+ß{’āa¤ē‚{v…D,~û)ásöúCX<q}ž^æđÁwãiė%¨<՚gëÖļÚĀãėzLŽu{ÜŖ‹×ænËŧû8–yWõoK{ŌãŖqÔņBœÔÄzGŒŖļ xŊ¸mYŅJo2~­„Á“s “ōQa._šöŋž5-ÄÃá}îŅūÁ̞ēcĄĮĖ“ļ:‡™¸&Ÿōxœ,,ę~n(Fžõ¤m€Ó7p›Š#>AĮâōUđĪä7|ō×ËC€ ¯°7Øy‘Û™)ė䴔Ô. /b–†ŖĐsĶ ^Sl›æ\xÚNd#WęŧdרbÃĘķi˙IįÂü|š7īō“ƒŸ~HũŸn$Jā\LŸBâÁÄŠbŅ^sŒNįU–>č5čķÉ"=Ŧk[VémíŽ-éœy›€'i<ՕPzŸûĮJˆāĨyō’Dt7öž rŊËō` Ķøŗ§0ŦË-Æß' ^¯5Ŗ*4ž,­ds×iņ_ķŒŖ¯D1{@‰€÷ũ]?ˇĨČmâ9ą-đ$&ļŽm€'ax ÄÖŽŸ…' ĮUqNKØÛŪâ;m4:ôđ~sČâLĀĖ[­ß ëŽÁë5ķÖ‡éÕ,sĪØ­â/ÆâĨ˙ļ{ˇūw#ĪeYK¯Đ6ėŧrŖ…FxŠ­ÎÁ#čz{ –ž:"gãKˇģž)ehOē–qúCvĘŦĸØ&ģŖ*5aī÷æZßöŽ‘Ô^Á˂sƒ1OVk;:rvé•×jąø Rsa8j{y´ˇ ę[Ģú’ÆS"3iˇņu9áî7xeH!žöų¤Ãâ8܀ąō–fė:Āãqq.õEĩg<ūŒVđČũ›'õ&ã/ūŠo—ßfˇRĸŦŸC‰e7ö~Â5^;ģ%&ˇ§Åļ3đ@aP'uU~f,,ÚŖl?ƒŲyq ”qú§īb úGĸą™ūÁ+Ã(sŦę‹Ļļ>˘€ ƒápÆā-ŖđsĘßđâw,ž MN`¸1z!˛šÎU”$‹ēkĢÛ;lŖą„•\ŧKą8Íå6.üŸ‘ŠXļ´„Åh~­ĖđOJlõĘē÷û ĢŠvŸæ‰Cĸ0ŧQ˙ ›ũŲČLųyūOčģ^āƒĢqŒ†bŅŋÚ=ģs§'x"SĄõĢí€'‰ČoQâđ{ėB|fƒ&ŽáōËĒŅž ‡}Yį_Û_Ԍ]‡ÂPFWj¨đØ Ø4d&n7ĸˇ™‰EpÎöé͇ĪÁߝk*āŧŧˆéĖÎKâÉsĒ‹Ąß ŧüÁ=Čũ_IŌđĢnģŨƄũ5–!xƆˇÉIĸQģ‘Ü.ļ0_ˆŲĒžnjëŗ6ÂĀ‚dĒP­6įF0‡5=ĩË3ZˆÆYļÜqmŖTęõˆŊĀ+2đ˜Äļ+áūĀ“MJ’KđĶĢâiŦ?—ß\Æį}?Ü/7ė\š‡Ķîūĩíz­X79ēōj [žÄF$ŗå5Ŗ˙€­!ũ25 Øĸ¸ąáõ˛zL“Ú%˛’ĖkÄG ĸ”Üŧō“¯*~Œmę™/ëg›dhĨaæW~ŒŪŅh8’šîŲHôBßîŲFKlÕāeSšNĶíä6ú€56ŊžĖđãnÎę+†Š×6$=§đãd•Ģ4AeĩÂx,x˙mûāÁĸ{ÆĸQ÷2{Mļ/Éšėô4Ŧ#¸}6‰ūåīFCáą6ŠŲr4ÅļžÃ(mKl ö&pˇŅhĶŗø€;ėĀŋÜdÆô`qös`5‰xR*Y¸7Ī™0…îây€ī"=˛ x]÷Ļŧ‡ĘžZ ųü˙yåŨ}^oPéˁuo8ž3C>÷Ÿx7Īëۏ7œZah[°ō°™¸įuG,´GjÕë͖īO1"]ˉŋÉÜČ<˜ižŧá3äO|~ˆ’3ƒzr„Đ‹e=OrŊĸŗiSaüŨļÁĢ(î™ŧ ““U”x˛Kõfß˙ũŋՓ-īfná.¤=ÖˇØ–hŗėE-ļš”†W°#{n“ßh‹%†gö ŖN¤&÷Ėm |'šL&דØ+ĩ$L;9§\¤ŧûsËÕ#Gô›Ũ†mäŊn´šŨNįw–ęI>…ĢJ`‘Då"UĢn­*ZĨķH‹|qšgU—)Øĩœbā1#ųŌĀ{HYđŸÍŧ_¸čąŸ>…厤ė::ĸ‡ÂSSŲĶÄļ›û ŊÁË\*Ÿę[mā…,ãFĪɑE)˛í6úö vDcī…˛ĸ9ļ[&W‡—_u ­•Eëõ›Xōsq­Z¯xÎ:—gāąR׎ĀCÉ­Áü; kĮUĖ`%p…Ø•ˆ…yūxöë Cg˙āŨfvž~Ąkæ­Ļļ>‹āŲūĢyÆüŋ¨Ūgdmä-ãXžŸd˛ŲcŦãŦrō\ŧ‹wËÔt}}šH­Ļå:x‹˛ÕÄė<…uŨĨŠ|jSđĀŖA_6Чé-&JĨ­ž6č-78w=āâíßÎ[õy]”> ZÎ#u‰¯‘ŗŲôKÚį?I 19Í˙Ģ/Ķwŗ•`–”ūS´Ņįļ*^ŧ[¤&ĐĩELÅëČÛ¯‚ā%“H$öąķ{Kąđ÷Qm•rY%ˆŦ;/ëõ~'Ē]_ôXķēÜŗ”ļ3탉;bŸ÷ ė>‰Ŋ1 ãâÜLü‹Ë÷&Ŋ§ÁŽJÄW~Äė<´.”Sƒ—§Ļ:x”šî6ĀņŖ,žWߛvđî#;xĐYŖÉų•3ō—ˊĩÉ(ŌS¯aKã_ÆeÂ}gÛā!ų˛Zl5šgŖŨ>;›žw{&¤í'ÃH%b‹}ãņŠ W?z§ķ ¯ģÖģLuŠŊŦvëĨÆˇØvŨ]Ū"Áė<4o6[ ۟:ŋ÷ÁÆ9úYĻÜ&[™5Ėl€‡ûúËkčf0đ@íŪÅ" x öËūÁ“]1 /ī2ËĘķ &P÷"XíXl˜öyŧËäÆíā5ßåĻāÕ¤Í˙ēmčašã͂āምE‘ l =r[ˇ;ŽŧŦšCû7NAa°“7âÉāĩ´m§ØV{gRh IYá?°ķrŲĖszųjÛÚÕ8ë˙‡vŪ7įÍĪüۇˇĖöÁËŗ=°ö# đ4œF"āžš6›MíWßæ=F˙IG4 +5Č ‚”ĢėäTŠxÅ&xeQŪCšß6xž‘–äÕ,#ē\ŠbŌĻģ–n€S›ŨƒÚö¤ŨŽ™z° ՆœÂOļāQ b+`ēEĨĻkĻXÉ[#Vˇ†n[ÜĮ<1y_ĻRųįsĢĢĶb]u5Û¯,~ĖĀË5Á3ŠÁë‡×ž­øŲ0ŨžZXOÂ+\_ēōaøöŗC1U3Ã4é%ļę{ŅfįļŲÞ ‰šđŦōŨŽG’ˇ HVIâdÛ 2%'Đ=Ëĩ˛¤Zā•ÅK&đ0.öīîĀÃąg)Œ€āͰÕëÚYb‘ˆî‡GB4 ´C•ĒûT\×ĖĶVpËHØ+h&u´oÚː 3Îjøęĩ" ļÁŗí×(ģ†ōU×%Ī…ES.ĐųåsXÉWwĪ°Ē ĀĶŌ÷lSđ˛•cĮj—0Ĩ—Qp|ÂŦ&Œį­đˇpX—Ų5æqØŖ’fėM˛ä”N œ­ÎÆĐĸm †{lŪ2à € ÆáÖm|ÂËA,-/ČÂbû5ōģ9醪Hu÷‘Ąâ›Vī0——­ŒhĨčBA^Ŗ`Íl<’Ē ƒ^]Ûbņ#8¸JūæķGv1mËČÍ´›yMą-Hœ$)‡Ô^ĐxĒŖ]įļ/`Qđ„Û0âXxiÖĸŖĪŖ•ĶÁÂI€‘æčzāƒx.rŽČđī WÖéÁčméE] õ¤4„āI.i÷ĀĢąų ēÎÅ+ë*˜7•Í2î’h(θšĀ@TëãļCÕÛn…ņcgŌĄØ. )(áž F‡ [+ H‡Ė˛`3ą…‰ˆ ã~Žë9‘ĖâipÔ¨<´,ŊŦ+žØžk{āąō)ÜŗmMļ_.^°Ō,f‰^Æ2×ôkî1n ömōՁhÚļye‰9K]3OxG,6ģUaãŅ‡ĖĄ´÷tĶqĘ;p&—ōņĪØ›U˛ˆÛ&áŦŸbqÆ,é —â×Ā^ŒNvĢŸbąŌ”ģZ‚úŲĪJäJŊ—úūžˇõIô’ŲÂŋ&¨÷ÚíD ė db>AÖ,•*Ęj)‡įŦĶŪŖ2 ́$Û2nPq%h6{ æ÷?¯ßގKČ<ČČĨ´c׸˛,aŗŌžāiÛŽ­v~Rđz†ĸÄŧ—,˙Š~čz…œ…%đr3žé@Ŗđ ÷ėW^…>ĘN3ØâąŌņKŧ^¤•ŦWÄZ.ļ.GņGĪ[[˙ā5ķēk 4ÜÚczŪBÜÆáÆÕ9…dƒ[@.ĖŖžafĨd؛ŋœH(îŲf¯Ÿ*ÍYR—Kņ{—(XwĨKČ܌ ’%tŗ=#Čásû+đ^#īMšĮúÍf!ēTÕTš'ņ>#ļÛë< j‚÷y„Gj-ø4ŅÎĖŊ)x—žōI…ĘŸĨoÂļĀĶKŊÕqxbËģÁÔąu3Ŋ†'°]ë h.{Oų1ĒOc8€IėĻbû„Ák–ä˙(—­œbjŖ”Vĸ*ŅY%đūŌr6ËAJ}ƒ‡5,4.ēgžąŒ\ŊUĮ°ŒcJ{ˌäpcÎī-%îŋG+9%Ãq+­ü:ÁSbKđōŪÅ vá,¨{úOyũ|drœxŠÛé'Úŧ…æPƒ§šÔģ1lĘŽŗÛIĄôÄáôIÉÆũ#,rsš ösH Yúķā¯ŧÚbíŧl%Xp&ĨûHȔ”W°:=ā°ëg‘DŲ˙†fîŧvđęĨg¯ēķ-4ƒgālz‰Åb•…/„ %ÄqāŖy0’}§ü΢Ÿ‰}“0ĒXĘŋđ0>ģ.ĀZūß H¸ÎŌÍD°Šg•mîŨēąKĢŊÂŊvđ0ŦĸīŪŌR­Œ?;ß}ŲįŒ'`ŧ‡-Įų)˜ø9ėĀpŅ'ŗÜi¯LžĀžŠšUņa_ŽE´ķ˛œ’5ė,Äĸ‘ô¤[ûĻwKlŲR/nđ4ÎŧQD&Á§Į=°đ]Y˜ÉáÎsVĻÅ@’âĻmŽŠŋ.ąEßļv™UęąíŗËਃ•GYeT##6Û<ã>÷ÃĖĶŽJlIđúāÁaf¯ĀĻę5ųwãkŅåÉÆĶü,Š‘ÎQÛDKlķ&šĒ/Ũô‡O<Œ>‰ÁÂÕkWjÉw]ŒÆBi"@2/ QööÁ[čŪ>Ķj$ÛIfŸģ#:đģ&Ŗč% ÛčÃ*Á4Š`w…|~¨ .ēŦ´Õîu¸_đØšˇž‘„okāžEX˛JÁD̝_TĮÚ"ˆmzŧą…´ã’%tô4uõnšÅƒ9Ũ,J;‰PP´…ËK‰VG$ąąđU‡%*Ãņ°ŽÎŠo`įāÁX_Š_CžaFŦŠ%ōSÎΟ0ØXSPŧFŋCŌŽ]# Đ&ļjđú[eĀ퀲åŊã›>:Û8 ņ̓•ƒ/At.7ƒ˛î!ŗĸx]=_}āĄØ‚ˇ¸K¯ú|•ƒërĨBEįåčB$ÁĢ‚æĮk,píĶKuī[sƒl>E,fÁKlÃD?ČŅj‚b<-,$AĪåÁÆĨäąvđ\O<Öõj“e‚¯0MUKĘ2ShN=Ņī §}žŗA ›­Ņ¸ûúGĄGҍļņõ~­fIũ0^vãnŖ"*ÔĢ1˜Âhę]ų¤|ĸ ^ĩ ŧûO×ëę- ‹°‹pŠĻĪÎLeŧØā)ŅĐēÁŌ¸„üfĩ‘>ā}~(˙ĸK2ɍ›[žCuįĢēęĶώˇ Ū}´ķ*§ÄŗôŖKōq×77J錯âĩëŖf ÎhŒ.ü ũt`ĄđębË:ŠßxⰑ!ĖZé8ÎÛ8äH"ŧčõāļK‰iŒÂÉkīĩ_ĸ<ë\ÕöŧÕT}KT_ĻW^+zō^j¯1‹ĪŌĨHü=€í6˜(aą”rĮ#fö'ļõû{‹õk$lP[¤šÎcļŋŊæ Ŗ,ögÃáIlķŦ§ņÛ0ķ~V¨á:WŖÉ8ŌÕN‹ đŪ:Û Ūîį]såx’ŽæOŪ-RŨLãHßāNQĮcb%ķ3@Ũ¯Īɏԏ…‘ÔJU‹M;v đÚŠ¤ˇ ]ņļOQXNƍ‚Ķž€PŠk?9øņ˛Ė6KKé\öˆíFKlß:Ũ ŪĶGŦsņÍÂĀ[+‹CŠ^ ŧ4W|Ž‚ļõ)Ĩ[+ōĒ•2õ[ ŒÚíöÅ2>æv.%ã˙=ÕvĒ5Ά>–ē˜@ۉFČP\nČBYfN‹`8„Ÿžĸ¸íĮW‘i-s ™Ģ´˜’ģĀŗžCđęP?Oķwî`Ÿ›mƒ‡a‡Bæ;|M”ĀICĘéËߍÅï ÛÉ ũíƒD$bú¯~7eļų3Ì2u@OŌrÛ]§mîHb–8ŨÄh ô.Ė ŨČQ¤hīĖ—UāÉŽšģ ¨ÎߥktftY1Á“g‹ŒÂŗ îˆéO_oŪđŗJĪ{?ģõû+ļE‚ÕāĨ4žęų/ĩ˙ę˜Pâõ#â ôõúŋQøŽüį5ä0ÛČeÅāzmŖŲZ>ķxéá铯ü[ƒÆ|G’‹( ¯XøÛäO˙5áŗ‰į=LÃfũƒ×nį=Ŗē˛¤ņT‡ŋԞEĒJä_Dđ¯w#=pžy )OOąâ›Č*•S ųĖ3māšæ¤bx÷w ŪYĖUšG§Đw Sz+ËâÉ?ûn,úlĖæÆķnūãuíTø¤mæĩ†ē•&đx ™ ԟé›Ĩ\ĪŠ[ÆĪ˜‡Øîņãôa Ÿhßŋ¨žj‚GË ŧķsOŧ*f@į:ztÎX Аnų÷Ûė°ZĄkdĘÜø:ĖĖm‰-{`öŋzæĨ4œã1ąDGāĪÉīœ#Ŋ™ėÎ,y:—UúŒÖÄ6÷Ŧ<ŲÚŪÆNÁŖ†˙åĀ=ĢՖ.ÄKāLøÁ^_Œ_QîÕĖs–æŊ’ú¯Ō>[՛’ÆSÖî¨˙)ĐĮCĶĀÃÕø…p.E˙NÎVüH /]ĸ nĩgā‰Čn < ī <ŒIŽÆ;ĪĪú:o¤ÆL‰X˜Üc܈ŌÖÄZŸļ^‡ØĒPm<œsķkap՗ū9™˜fųĨ•ŦoÚ ­F6`†´Ā+ÖÁkÖû<đĒŋGåÕėôŠ ŊLķ‘~.LŋNąFíö™°å)÷t°đéGëyÛ6ÁÃz;ģDÂĒ §´œ‡Ņ_IĐÕļ#V˜Í†§‰ĸ>˙ČŖ4FG3>Ŧ%KRĮŗ!xë đ(‚'ΉfuđÄ€×pĪÖiíęØy>Ÿ' tˆąŧfāNāģÆŽ€h Ũ đN Ę–[öÔ;@ ZÎ33ŖKë0¨<›}–°LgŖŖŠ-'ŧĶūāIeĨ“r´ÕĨĩėđ”͇ĸ¸Ļ€7TEW ŧ;åwKĕ6ĪlˇI.Nœ›Ķ?į\`Tē`lOaC‚ęē)mgâ°)rÛį/=û‰(i;1ŧ˙ÎũĶØuĒ„l:žũeĶβ.Ib<Ī5T>|ÎÚo {{mŧ Š-Úy¸lގöS™ķúGLÂÆ˛^œyʡûØļmīōĪzɜV]7ŋéwŒ<ˆ­bjKøßŽv%dĸ„cWXV(†§;‡)ņÍ;YĻōPY'Ŋš#đr˜,ƒZĢ”IcŖŨˋŌ'œ>f [&ąĒŁéo¯õžK9ožíĐ^xųMūT5Lį“u÷L/á˙:ä^%ƒ!ļąÁÕČúĖ7Ĩ÷âĢ?Ė‚Ø’Ŧ˙8¸WJnŽåæC3xĢ‰zTGŦ-&‹.ęXˆ…ߝp{ŒN›q&‹g…>°S‹-1ŖNWįESZÎ"ÖŖ"ÛĨ”+ZīõoÉ@u6Ž}Ų”ŧ֕lvÚTčëW˒B 3Q¤—āzu)Š“éa4ŲlÉõ §`$Ža˙Nhėdŧ ŊËÃa°+üĖ#7vēÃĻwŲã"HlĪô“_xåz¨HŦ‘•**¸û ˜Î(eÚt äđ3ŒVgÚĸzĶĪ[ +sååsÃo'.Štq#q!°PHn¨ŸņW^‘2ą…I Ŗ$Ë9šĢ‰SV Œ,ĸŸ.%î=úAāšÚÁCE –FŽķÂymgzå‹h›ččΏ66‘WđġqŗėõkWXMp KČĒËüJÁÃtŅBájžT’āž!ąĒ×pækĖ^ųf’1˜–Ō§ ĸrr}ˆ,mˆ­}6dI#ŋ%ĸÅĄļÔ öVũ'˜,íCî—(˜ rÛÎŲ¯ņēũd IDATØ'Ģ>|{˙Z›g¯&’LŖI$VsYzfPę¤āC#QŠąyÔoo™ÁãÛChfڋ ´đ} U-Nē–ēí•<Ö9ĘÖ탇Ũ§Øi­˜ṍ@;SĶ˙ú-[Jo9* ¨ˆûč‡Ū/'%Ež#]Ûgų-N3OOÂŖ˙Ļļŋ0(ā=´ĄéOäH8Sš5z°ęŨ,’‰†“O57o{Rã=1đІ÷ ĶT”hl2!˙į¨ü^FaĐSäLŠđęwÔü“}X ēōVį¨˙1Æ`E­Ģž˜_Čn‚Ü4EĢoœŒQk ôƒdŖŠEîŨXĩcČÁë•ŋ\„ ĖƒĶ§ÎÖj 0U>Æ`b&‹ķīr”q7NŖáIKbĒđ\õ;ĀÁqœ#JĖægÔWÖgsØáĢF3aíe\‚Á)zCô€gÚ`ĄI&ąę‘VDåU āmÖÕK x÷;šUoČ̟øĖl‘5gÁˇßBĪ-™ˆ¯ôcįĩĮ2^ĐĀV)Œ­ĀC ‡„ĨÉ)ĄąņÖÜŊ°xfÁũ:'.&#Øég^"~ÍÅJFŗ´|ōā=& _K*Û@gÎĢņR)­Đ`õkGÆ0:ږ‘ëŲú¯~G’’%ĩÛ(‘ŽŊĮ-g^Š0{åw¤Æj‰āém “ã—‰2ķ¨Į?ō' cĩ:ĻY'Ē=yđ6+;q‘ žE…!§‘Ûŋ*æ˛ÁÁúOĄØÂB_•úĪUŋƒú^ $ôĩÎĢn•8Tī5Å-I nt[žž{Œt+S˛'0ōŊŲy‹BŲ„-dūĐG Ŗük*męXÃ+9M+bÁÉØ0. ˆ2Gûžŧ]đPÛîK¸*ąŨ<čõ!~Ō'4ģöŋx~aŒŖUÜ$đbcôhŧ”…GhĪō|’ā=v÷Œ?NŸÅ\­D)íģu*āü^"Vĸ‹9Y,áˇõ^ũŽ$lû‡á›ÔŅūĀ#iÂģ=ÄūĨ&}œÔü‘`ôcĩ˛tüƟũŽčŦDöeË_‘+´"ū™܈יēķâŨ­]āõ$gÅ6ČÄv…‘\\Nū5Ŋkúh)Áåí<°WúĀN-ļ8ûÔz[•=ĸ‡×ÚüÂ$ĸøŖ()ōD'—T}ūŸ9„qŸoĘÔqF“P۔înŠMU}ŨX^.‹˛ŠÎŗÚl×ĸŧÍ*$×5pĮč*V aÕā:ĻĮ—XįŊ(Dĸ„ˆūĸđŦāąŌĮ‘ūĀc #D,>˛KųƒG‚‚˜Û).É ŪžlPit:bŦ#ÆŠ“Îd““+Ĩ[#Žĩš˛ 3‘#ykY—Qšš”ŠlŸ7õôC´‚ĮÔ;Œ$öÅb^w†ųNäģČU*ë4—Ŗ?ī+ īj§Ė.Hꙷeņ€įu|QĒë‹Ē„GYļeĘā I$wãO=H­ĢŧLÔLa“…ú%Ębū°ëæûÅ*ë$ŲSņnžî¯Ė Ũe5ô{urw÷]íāÕG ÜÚŌ ā„ €XYƒüĢb<ˇÂåˉH¸Žuđ›Ŋ™Ūy9-b;’f|ÍMā ‹ÂQr0záļ…čŒœHĒ‘™0ĖÃo_Lîljt ‹1|-m›ĮTĐûå2Ëíɗ­Ļ;åjŊĶ›õæV/Ë-WĩPũn ^cר×ë÷h2ņí$ų^ŽíŪ&c Å=ë;ĩØ*Cė¸č–3ORžø5âé]gŒh)ŨO÷“A8ŖTåS¯ž&Îo€ØF”ÄôĢKņ6đ.ŪŊ_-ŗ•-_u]\.coų3Æ>5´VŪŧŽpūfā•V<¸^ĢĪ÷ädåšVŠ1?Á0OæåOúĪÕ 3Ž,t‘7jī)ã(ąSųũÚČÁ†fJéRŦ?†(Ŋå9yĀ&Ą›Ŋ‘X'×*“/Ķ5ŲjēģV-2đÖĒŽšåęŗ:d¯Šß˜ÖĘŊ”†æ™W֒r)Į˛kq<œÃ^/°ŸĐdŦŽ™‡øpāČ^ŒÄÖ ŪVĨۜ`û˙™{˙ 7ŽûNđ5€á") 0‹V(I€HS+•5#sĪ´Đ3ĖŨ›’nüĮ)ƒĒÜ‹j…ŖqP.U9¤Ø-rĖIÕî…XėœĶV‰ã;L\W–ˆš?DÔė™Ž]ōā:Z˛ĻhEvŲsƒ1éPēī}_÷kt7?ē”ö[ENãĄûu÷īûŪ÷û}ߎ@&å™ßKÁŽRN~yœOŲžb˜#ūVŋŲ™ČäWž%ˆâÖ?aĻŠvØĀĢך:ÉÅāŨĻāá‘÷€,¸î­úŽĀ#[$úRŋá•ö Ŧ ?rēŊēŠGf%7yYĸ ņøß>-xCą-¤ø•Í÷Ÿz”iākÅŊSdäD ØGûb’ŲU’r2žØĀ’ƒÂļŧņZ}ŧ.PđāhSŽ6Īp*đj0uDÁã¯e¯ŧÍ$ÖĪč+‰•ŠO‚S<Ŧ[xÁŜ™Lŋļeüc€ÛkOšK Ū@ļ…*KüœMēLH}îÆ!7lLAœéXÄõI_mjŌ0Hl‹ ūWēĀĢŲëŒ žQj“ĸ ‰–‡]īÕü=Hã˜Ü ãĄBa›¸Ÿ™Øö°­$­hÁ‚mm™{Œžî“ĀÃÍ_(B ¸ÃŖˇ!ËT>oûũ˙ OØÍ*ėüz5ŋĒOäß" ۊ-<ŧv žĪ:x¨ĩxImCŊ3Xx79ą‰ųx fbļM‚54Ī›OĮļ@)›öŽCŒ<<*C~†įņȓĪ"˛R€øĮáš.mŪ'u#đ|kRē`[~ĩíx Pķ1Ävß'l‹GÄbžrÍ x>Ō™"ÛąŅˆ.§Ī@!6Ŋx^˙ˆįļÅs=ëJķę$؁°bû;R‹EžEãą^Ë<,Ēl-wˇāQÂęŲÄČŋ–3‰#XĪ(ŸÄĖ “ÉŲá ´jĀãÉįī°ĀļsŅ4–N/ÂÅSđöB[čûSĖŲ dEĒTşoø|ëp: õ–Āk=Ū"æ8"į‰TÎ c9o4āUą,n|7ˇ Ûgâ;ÉvaUh‚–›ų ™Û7ōĻä<=Ûēá?-xƒØÖŽ˜¨vōéŦ›‚ĮĀČŖēĸ”í9XmVđ|÷â\Ŗlû§Ptåņámî O8ĮŨ;U+ŧv›É^uāAMėU¨;õL …‚¯‰ÕŗJėDn‚‘wÆâȓjXč2Ģ yvIB”Ķöļx°ŅÉ_á‘GĪ‚HūČ fB4Ə’‰¯ŪPFŪocđ.>\oŊöÉā­ˇäđŗVøâ€'øļZĢā āBŪųX€X–f2ņ˙ū¸|R*8ū‚đÜ xRžĘąėŅž“Ļƒ˛Ā33.y}ĘrcœwĶsūrtrÉA.Ü×~ǟĩÆŅKöâxíX‹üp|ũ°Ŋū'đō™ŨVp×aíĪj<õ+a)ålâķî ՓâiI=kōfŒ*2x°žH>ÛĀŊYûˆŲ–Á¨diZ‡GH뀎큧[×Q˙ô‡ŅčŪÄÆwW_˙ņĢ?@G‚āæßļ×Ũ˙d— @§ö1 {íiĒ…€Ną`alØųãNn—āa1ŠJvŸŽ’\`ąũ*L…qĸŽaQ&fĸ”ˆšm%ĀÁ#=xƒFž•>œfék-;đÔCđ Ĩą\oß[ģ}#t•8%GšÄÆ •ķ ô´’JīŨ­˙o\/SPƒwiCöOD!ĩ¸”4VL´¯Z0F žP›$T° }ÆjnvŊۅTPä€owžĢšt#ĪÆxŪëĶŪuP‡6¯7&ŸZ˛iŽpĢOsM!1^0 OBaû[ByŅVÔŗH}˜Ü$Ų@v‰Čb^{Õx>r‘ŠmmlWØã€O`ļ ˧FÆ4WhĀC)ol†ČĮø°V„ųĮ^2§žA–âä# Ģ‚œ]JŖ‰Ģ7ˆēF“č˜¯ĻmÔ˛­T˛ē-Ĩ=„â~éüÍa¤:™ŋũ'÷sĄo_‚‚™ąÍd{eõŗdÛm((ĨËv{‡ĪĀfÛU؆'7ƒžm‰rk–m1ãĘg N’ŋ5š}ŋö´āīå2ÛÄ)9ą˛ē]°ŧ˛KäD3öŧ$8\QÜ`÷bÄ&ŦgCGɏ`Û"x°0Í §šË ÔōįrzīĸŅyKŪ4x €wcžÔPۛáŨĀ&‘É92â4“‰ÍļHĸ/Ī&CĐPĄ°-VËVŲ–īän4ĮļŲ\ē*ŸZ—’yŖķf\VĪ^y\xEøqŗ"&7 Õ3ĒĪęc‚~Åíŧmė:ļۅmUD.ąQ€ŋ•“IŦžíJÎ#äŅŨP‡“ŠŨž—ō ô˛ú`ķ' Qޘmņ‘œGĶŦęÁ+î<,ßÁY@YãÁK3Aåqŧ`@āWķe3Øi É}J¯ž īeģ-"]Y6:ËÁ{KķxĩMÜȒ"Ŋ~—\A}Ÿļ ž¤včc‚ē*=˜Ö.@ģY¤¤É×sÛr)§fĖxx'žæââM˛­#G“Æ üĨ;-ņČfŸqMų{xŧM’ŸŋŨžnŪÃxáQƒĮ%ąJŊƒÁ1i–āûâÃU¨üxrë=Ŧ*Â]%đ“._í€.ė vC~‘eCŒņķĒ‚0%•J-Ü/kÕ3ɆŌU#OžQŽdsā%Ûm1ŋ-TÕļÄ\^J ^ĸø›“f°3”ķtBō@9ĪOÁûäå"Û˛ą^ސM’ƒ0™Üå4 5@=x2āIŋ‰Ēá~ĩ“Ŧŗ įIŊ™!U˜ĸŧÚ”XJƒĀûߎČ'Ęģ@F.6đg ūT™:'Kx‚Öō„Á“ˆô˛CŪ ’:r3‰_';âĸ%Ģ …‡—j’čØļÖŋ‹§"ôĩ~ Ų 7Ô…Ōüž‰ũ›ĪÃÎ.sBLËļ4åļž0rđļ%§dP+ yÍËßÁš6l+Vb&*z÷PĪ´ā \02ō‰M^zWãĀA‹ė¯ã&_œøa[Ŧ)]Õ˛-]_מ xdE…dŋrNV‘œ,IŠ+,8[QĪtđ˜ŒVĻX˙š/ŋŦ1xŽ7™fÛô|””Ī ŖQÃÃŽĀû¤Ov<ĩß õČ3œ8˛šË§īCE"ygíSāų´đx4h žķĘQō~†ûŧŒÃ‘O{įgĸāÆē”)•O’7¯,ōáwë>IÄ.ž—j],úęŒČ‹¤‘ĩEŒ ™ß=Ģ=ã:¸Eaĩ6´ °ĩ%ƒ‹™¤—jđTՏt⠈ßĨî´íėķŌ["lC3oî1—Š?gŋkg}哜˜¸z]fÛúaßzË'%Fî€÷´ģÎû8FŌ5Z§|Ân6Ŋ%â’R4†PéØ!ë°íFâ†)¯ZÛ˛Fslģ—eĐÂäīĪd¸ä"ŲK™úûąāáGĸ^+1yĮ˛Îš×Ÿ´`4ä´ĩë¤9oŊž%…sĩūwë8ˇ+đ°~sGSKB\…Ô$(„ø[üš)đžhžšÜ ęOŲ“äo/įJ¤l‚dŖļ6n(#souĀ“W[Á‡ÁkpžÚi <ßå^A,Â§ÆąŲT Aĸ{.Šgxš5^gäņ0X\8dĀļĪ˧ũ2PŪƈl6gr‰gōxÁˆ$6ū ĪĐ:ˇhŪm žčĢIĢp+ŧØP¯žŊĀ3đųÖėT€Tą×R­>ņ$äK˛˛é]$Ą‰ ™b[Ũŋ¸+]ÖĶ/č€Ũe§ūÍ÷0šØx‹Y‚˛{VÕāQļđę"͏Á*ˆĨ7xhąƒu؊Tģ =Ž@BÎH˛ûs#ĪGÁŗņF5¨˙ȓöËā4Ų׏īuĻ Íŗ‘Dœ°í|Lŗ`ˆ#O„ûZZÎ]§›íˆzō2xéaŊG„9Ņ\1_#9OŸ¤Ö<ųŦvPR‰{†ÛØH|"$á‰ĮCāßŧ„—Ü>āĩÆuā­åV1Ëļ6‰m›ŋ^Ũ†čxŽ#ÚVסּ+#ՍŧūāQßNŸ”€čubîäøÃŠxîŌ'Evɲ1ÛRđjĸā5¸ÅÚ0qŊÁã`Ķ[$>• gHûÛ;"äĻŲ(€Y>fEÎ+’cÅoŠmiūŸē|UŸč-ŋķDô4”ātĖļĄūl;sŪĻ8*đļˇąx|–SÂîEØ=̜Ál Û@•*<U9€'éÅĻØ–žĪ›cÎfOCY’ÃØveUĨžÉā55āÉ † <ÄSVØVv7ƒv įU0Û%‚ ĀãÉņmԍŧŸõíá¤ü4)ō^#/M“\HĄĐxäUHučĻŧ‡2xwx­đíÖ+oŧ‚xŋ*Šg“íĢ ~„'x(BPß*V3Lų6ĘãF:ļÄļĘū{¤?x3(îxņĨş~Õš”Ë|XÆŽjĩ•„d=x‹:đ “¯ Ū6ĖnÉÍMM#ˇ š!ÖË}!SŅS𑧐.øŦÖ¯znƒētKgķ]':Ņ›,MwŗÄžLØļŖžÕ[ xkjđ¸;đ† bé G’IŠ œ~¤ Ë€Õ3hyÉx>xR āQ#B.Ĩ9›í: yõ, Šgœ¸Ųž!ŋLũ_ŊáĢ"ƒwYoŧuŧā]VĀģ2<_/đdĒ"Č˰ $9RHūâČĖ÷+f : ÅļB_ļĨ?t$"Iŗ:’ÆOūŸÅRJp%›?8_Ü+|øú^)  Ū3ž˛×Į%nų$đ^ą ĪĩÂWđ˛+ƒ7TPŸ9O Š%_.ˇąŲ† !NēąaE=Ķ]b†m}ōI<‚xdüë­*SˎųŒˇĖŒA`ۊl ŦšÖ{ƒ:ũäĪđāŅÅöĶ5rKíįē̞qMŗŲLéÂtôÍ[ˆĀFSúƂŨ!>ŨÄR ˆĖP鐁ˇ é^!Ö+eÉöM ߊÛÄĨûPÖKĢ-§šgŋ‘G§geʓŒđvCĢŪĪėLd2„‡f`°ĒŦ(ęY_ x:Īû "ĨTÎʕuǤŅx:ļ•Ãu´ˇŧĸœ‘F–¨Ÿīō˛Ų(ۂUe2„™›:> īNŋ/MĪy›ŋŌ]rsƒėzĶ[´Ëƒ7U/œænũØļ Ōæé,/7ëÁC”JĪÍÎLąīžôÛõåįw„{Mââ(¯¯eŨxíÕÕü}|Ķ$čc0A`! °ívšh “ÆÍIQĢŖ[#3āmƒ52Á“ĖB•ŗâ†”ëg‚IļUĀĶKã4ˇë3ōNĘ”Ļģ@äîUąK-á=hv† |šˇß˙>š$‰U̐uČx¤UķíΎHü}¤f¨ IØvÃʂ•ÆÍiîŲgäÉ/ßfč#폑āRÄęĶ/ …Ŧ÷Â\4ŸÄl ÉĖvšL&Ā#>=šraâęö=Rĸ#ņ]ySā) Ɨ”&VŸd ÷ČŖû5EĄÃãd¨uė8ĀC‚ķÉ )G|ŒäÕą„—†Ė°mUu ÖOK@’3Ü'*ī@?N-)lû{ŧĒUûƒÁ+yåH=s’iÁƒņ73#y \(E]W  ~ßbB-™œķ¤t$ۘm› žŨ(H/ų͍eķāÛÆÔž%ÚčÍļÔ˙…䃚bĪęBr™yŅÚŠo÷ąĄPAŧwŋü™˛-×nß ŽĮ$ƒ%(ípöL"5ˇm“ę™ÂļĪķĒVíôy'Ĩ)†Šĸ˛›vŠœāŅ]`›ÆęYĢg˜m!‹ŨwäËĖ"ĻĸáÁܚ*šįĻ ’h  Rģ•4ņČ )#o,pŦÜęĶÜ´7xĘ ô|혴ŠRë>ÛɃŲĨ4‘W&C×E’LGēLs?Aš j×úX8͊*¤×mĸ&“Rnŏā‹ā= GôZíôd[ēLüLą$tÚtā9_ĀRŠëg×ūĐīd͎Ä6x)UĨ“uę™Ô‡ ŧƈĀk‹2Xg!Ŗŗđ6‘Äë‡iļõÁĩžcYÕĒ}€ž#Žה] ‰k…nđ(Üvä{1@vošŸ'Ž[Udˇ¨xŖyrĘUĩ~†…;N`îW!=!o H_IŅŌjŌ†yģmėĨf•\ voņĖwŊ°]*Ëf]ū5x’9jd#O…~XLķ÷ĒÍ&ŨX3…]gäĄ7ĄzŠ<Åk gMų´&ĢĻëŽ vŠg.—ßą”I—fązî>é“Ęĩ7\ôÚw|bāåA=KBe‚ŧT ­3RĀxpĶ`Õ­ =ęu1ũžWí_ЋäŽčŽī…’ķåQš+1ŽĀō !xRËëdb’¸7Ē7Å6žîHŽSĨDTl‹žŌCĒP/ļĨËDQQįˆY´îyUøn‡jø7âm`V™ f B‰Ęy}Āģ=Bđ ­ī͂ēeķFË/˙1&nŧSÅ!Rjȧ€§~YmđY/đ”ÍFÅ+™üÛyá~5ÆęĪö#>ļE#‘‰Pv&>NLŋû™‚§ŖUˆb9)r­w r‹đ:kPŦĒUĄ^l+ŸÕ^P­_„ UōNZōxmldĘ5† žü:bOm<ô‰‡dđúŦļRe‚Ņ€'ã'ļmĘÎQívAĻ?Sdļ%āíUĩjÁëĩ`țŸ˛t˙ĸHúkžyG,oŊK Gų„3]ŋ)nĪW(x5ËrBXā`’Sƒ7>BđI¨ iÜZÄ?ũÕ \Ĩ€įö­ŨĒ{gŧuœãíx§Ü-tƒĮ qŸŊ0-{ IDATîfŠĪ‹dI=+ČGjy˙Û0^‡mÕģgCGË_”NpŌQCęīąOÜÔq"UÁü~‡7m›0û—ãžz1Xø–ø)’ßåÅuÁöôøbã|Ø}ķéZŖ5în´Â˜mųc˛7|/ëÂēLƒG"ķ]~jPŠK‚ۜˇ…Sפ6ÔjûeéÛļjˆ€÷(ŗ]ú!kx‰ĮöÃSĄ0Ģ”Ŗ¯&ą€%_)„o/n {žÆ˜ ¯øÖ0x ŒMŊ^$Umėā'zåöîĀÛDUE$ÃíLBr[Šö~Ķ^äîoXļõŅoél^Cdĩũ4šLô'ķ tG Ŗƒwcv5¯ėzcn/Ö÷a߃ēx8ŒÁģŧūĸVžāßÂwv žžš`†A°đĻ}ÁSŽq,¨Z€G§ŧ’Úŧüč‹Ûz3‚˜@`Ģg_‹FâÁ•k™LųĪŨß›Õxˇ1x€÷€ˇx ƒw[”¸|w|†nĻÁČM7I°y‡8RäÆxäÅĨ‘—âĩvîfxåXAúöįÁ} D -ĩņ_éĪ…Ôú^r1ĖĘĨ û˙ž[ĪdJąW˙.ąņŧ‹bQo_ø€÷°ÅŨ~ÜOô]qæy4á1 ?9]+d"Ė $é…e9¯ R…ŒG]/îÚÔ§ŲĢåéHÜŋE÷% Ã\ŋ”)•ŋFęÜ.BĒsŧ˛ˇ"ā­<ąNĀÒ ^¯×ũ6§žéü}6 "„ŽVÎrÄābRT‘œ.5Mėp#ĪMŋT¯ȕ¸Š•/ƒĶÁĘ?CČyÕJôį‰yāT{Jđađj2xEĀCđ.xo€Œõ9ÄûU>ŖĨĐv˙I‹ođä‡|Ŧ,Í5hĩ•Ęl÷š˜mĶX02Ĩ9öĖÔždŨ^ ĩđÂâZ]Olxūęß`đZ‡;ā-†‹ãÀįë>EEōj̟äĪVŦ*’ōĒ āĐ>€qÜģüå5Ĩ†}ØĮ­—ŋ€žâ÷|ø{v&Ę-ū*]ęŦļ$ŒĨŪúq¯!¨ÁĢīŧ& U)úvž!&ĀšŅ0 Vo"ģg]rŪlKCÎjÔ0%Åœžā{ßí`1`0'—Õl‹ÁsKāÕ)xn P.W1x°`|ȉē8`“āuĶŽ@’5$Ú4ƒ¤ŠĒg9‡‚RĢö ÁŖ3"˛ČĄĒ=Ōúķid‹DBÁ,¯¤įŖoâ‘wąvŗũŧČ2@ĀûGUęŧu ˇl ›Ą‹m˙šķCk@Nf’lz—æĨāGŦā(Č"pnŦ˛Åc†¸ ž6‘Ôņžąē]…ƒ|î–ŨE>Ãŧ`ČĪŅRp^VjšôÎ8š#ō V3˛™´÷ũģPß JŌ–F¯ÚVæ<Đ3 å/I)Չ^îßŲ<Ârj˙ׁlK™õ#ZŠŧö“’)¤ÖL@ŲëߨīIMšÆ;lۏ$đz…™Ī€m7D’y°: ļE]Ųģ/ŖúÅrgwzģų%TJĪ-‚¨†ĒŖDĀ{8"đ¨ @"Œ)…vvD/Á¤†A`R]ÃÃ΁lKíQ<}ô:`Jt8RÄ7/!É+ķŗ‘ø„æMzoŊW •UQ2æAÁB1)ļåĮØŪx6uĢB ČO(("Ë]Mv¤¤SēĶũDm›ŠÄƒėžLzū‡˙ęOĩg\§ã…a^SīJóW%V•‚ÎĒrRÆW› Su•å!džmå—Ū@ĪˏQC_.(į1zđ*>Ãīám{AJÉæđj[íûĻ2ŋQ)üۀL€—7ÛĢ]­; į%!hÛ䂡g[‰ą­“žšKŊ’E¤õxˆ"ąûƒ9°Ä"C.D‰ŠsŊžÕ~^Àņ'+†KZvÃļ6MkįyēŽĸëEQ¯Kn*ߟ꾑yą”âĀŽ÷,Æ-üāÂö•ęĐoړ,‚'[o÷dōüDLŽļðmˇŋ¤âJōŋU‰°ķåžFl§Ëīđ^že“č]—ķ?ö/]’mû“)đT‘{´ēŖ@Ū`ŗm>cĒLf/ļ4ōNJ_lķĪʧԉY^ųžīu;ąÎ‰ ÉW;7‹'>íîē%2žp_Ô G‚Ø”61Vag-šĪ.ŋē)đh¤YCqvSŅ_ ‹ā.ׄ_Ž%H„€āI̐uH^xč+̤‚!”(¨J “āŠGŖmU=Ÿâ",ąáÎGw:yxŨĶČ'æī\ąÕڗS™û ú×ks@‘Uđä zÔÅáųT÷nũ@đj†­įŅcAŋNŲĒŌ]IüUoļõĐ˜N\“û—ą¸‚ĐžÔÁō×"‘xBvnTœĮčÖŦ‰@\Sl eŊ9}+S ų<–ķĸdÃyx" ÆđēFžrF÷/@9öˆũØVn[vė)Ĩæ€mƒ*9Oņ ĨĄ@ŒØī-ÚiN‡¯į™Mƒ˜qˆĩ…ĖƒÄaÔ\ŊŊ^#OˇMĨ˙ú¤üœ*ū%lKŋW'oU„œ}8 jÆ­<¯Z0đčA üië#OKdpī2š^,˜Ë§¯ķĘZđēØVfĒGŠ= Nˆ$•ēIvŨų°ų“ō"ˆÁX^@Št)v"~îŪŲ¯÷IŽwūŪ–Ķ# "kāW¨ÚŨŒdē8kE=Ģé[û<úí¨W˛´ąĒŒ<xđāp"pČxácŖ$ô6OŲV™ķ(x[jđ${J÷æÍnĀëĐę*…ĖɅüsā‘‘Wėž^T9HZÛĸbR‘NxY1 (UĐ5ä8§Jļ¨ pÃĶaÛīęŪ¤x܈ÁSRJa9Oæ[ÃįîMn āŅõ‚§§IîQEš1`[ĖŦŪyŧŧPKxūęD0{ô¯ķUāõĀĀ’¨Rw äpģĄ46šˆ9đ|pU8ųŗŊĀĶŗ-'ĩ~Š´)Ž*Ę͸î‚4f\—3Xø^ŠÄîõīķ37ÁëšŧRǝ/x’CčÅD†¯ŠŠ,"Hū?7ō&Õ32ŠŠú<ũŒ‚ÔüSDCΖuîéq3ÆVŋ‹\Îũ/ōĨšXôL—zĻĶ€×Sr^WKšĸō1ãXsā‘[Õô­}åŧŊō;}¤ 9r*l5ž×ô^"Ļ,€~‡ŖA#Oî_ Ō…XuN‡O¸'tjڑ Pmn´oĒ ‹[ô’Žlۗm)˛ŧ6”ĘĮ'Ŧģ oC3°Ú‚Sōl4˛?0áČķ‡ö}éæCŧwÅ"‡æú—ę5ąå#ā=ĀāŊ#};ŽÁu$āU!ůú#PÛ\áŽÎ‚á„ĀēāéØÖ'ĩļÔĒ×åáņŠî3#œˆųxÚą)•`øÉlˋŽW÷ƒ­'Ž a÷'ëun}(GŸĄĀkJЎ„ŽUČ,ÛĒĀSízë~bMŸôģŸŅU—bÛqËՁŪ~ŲØhd"´‚2xætČV:›L¨Ā xį}‹[ ņō„ū´|‹kŪb+ėžƒ[׆Io>äČ+č>ÃĸQiZ‘ķ–õ­ũ Ÿü)'u]­oĄcÚ~‘ųžw‹)‘É Ô§¤žĄķĪqņōÃēčģ\đ/ŧļk,ī2€wÛpÁĩÎļ@¤ūŪ}Ųj.Å´f䩖Û~l{¤ ŨÕO׋.˙¨1ãÍ Áj;?w‘]īô\,žØ¤āqĮ}ĐžÛŧu=xˇ7ÄÅQ‚Į‰íđmEe<Üx~dŖÂ†į—ūžë€×b ¯4O;ōîōš8ZđĀĨąĒúLØ6f…m%p؞#U#!ˇÕ•-[ĸœŠíŸŒ.§Æí=9tŸG/!gīL†‚ų<Õm1x}ģčVw›€Ûĩ‹ĸā.ú2õ2ëNüe˙ąnÁ˜š"ÛgļR4„Žī!ô ū<ņlqkîÛįÜPˆ¨g-PĪ0xXH~Œ?ŒŧvWÃ*¤ˆˇÄļŨÍÚŽYŨųP ķ üŨOģŽõvą-ĖÃŦ4í…ŽƒiĪë'"q5Ûō>ôöĶaņâΞļÖBLM8l[n÷úcīØ+ãkzĢa䤡;ļŌĄS•ŗxáŊnŽŪ^÷œį Į= F 'ˆ!gaT n„Ĩ˙ÂĨôáXØ6›K{Ëą•ķø0˙˜įĔ›?ÆÔŨ^`ˆE–P°ė|Ŋ[|а×N<‘$ Ą Ü3×ŨāÉÔ <rVĶ­j™gOčFŲņđŪ9’>w0“ž›y3ą˙oofÎëĀ€ˇŒ˙Üē%>Žq-,‹ĩķö[?Į‡ãęęōģ¯M¤ģĒÖũĸZųČ xŨÍÚ{ąJ;5ˇ,w atđĄ]Žé ĖļŦėy˙÷.ĸ}ûņ~3ú]ĖļÕ!Ū”RAųX¯ÚÔø‘]HqÃd]å^ržN”įĩ§ãģąęHršB+Ŋ\>˜åŒ×ûŦÄļpJN$ESd´ņŊ{ļMB]‚>ę?74xÚtž—}ÉģBÎxå”LĻ\2Ör<ĶąhK)ā… ŅŖ—¤:äÃĶčĀÃ:ņ¸M•Y´ŲK>í ^wŗö!YÚĖČJMK™ō–Ĩöˆ˛íč:˛ņmmÅDŋV[§ųWWˇKÅ".ŋßŋ€ĐqĮĨüP/Ú!ŖŊÛ]˜áՄŲļm…mģŧ z˛­’H_ņ2+’vĮ‚˛büæ‘vVËļ,"ČzČxøØ”kb*˛ĖGŖq“lģKđv RUEɡ{ŗíkæ°nÁPĀ“™ĩ=á(ČGō^ŧŖųōXŖ;yŅ<įJv)}áÃ(ÉĨgnÁÉ^xíbÎk’Rh ĸMÃį6§š‰Ō) 9Cǔܤ=B—[&žÜøæ˛Ž7âR뚘€+ Đ(“Í.ŲøC?89ü{Jd”LĘ{ëDŒ €#Iˆ-GĒôėEä@=ų؃'Čf-x“ĒöĢĒiļí1ō´OĀĘ­>éãYb8€§­ČŪ¨ĘŠ,Sšf5}É)0Ũ}`{ų‚˜CĨC1ĸå~Æl ´Ą[%čGČÉŪ^ļžÁ5§š/ˇVĨR° ˇĨJŦŗķ›1ņD€G´ų¯Ė”žÖŒGŪ€éÎ šô>ëCM°Úîęņg;"šõF–Iƒ‘{Ŗõ(Q0Ģ2BĨģ2ģ0ˆņ;PÆ;ũzôÕP°đ(uĄ4{boŦ~_N ËoWđbÜ'ˇ1Y¤ģĒĻëļ& :Čbow3§éXîÔ0ä h>Q͙EmWū@–€ŋŸģÆĢ„8ü[=˞xÁĨb[Ųqņ˛?]Ԑۘî¯DĶl+ũŅ;é‰ā$Úō[oXļí¸„VEˆ9W. }Ou)„gč.čđ bęüÁ˙§”!eãļ­Iāģ<­‚gDđ˛…ÂNĩ{ÚxMī2xō>a“…* įÉú“¸ļĐšÔFäåîđŗŪ/ŦE’“xē[JĪOGĄĢ‘'ŗ-°ėåN-`en—]!xQĐ¯ļÛ1ÖĀĶ>AQj”oöH]ōOũį„Y†Ō¯ëËąĀƒu`’!Ļ=Žū,røž~Tߖũée.ēÜĘįKP—`ŌX=[ėTĄ~āHåJ#qĶdrsšLŲpā}QúҰ() įôfŪr…EÎ@vé‚1lˆäčzÉ.Ŋ_*U"ęû ˇôz4Ō=ōž0x2Ač­ŪǞY3 3ğ”X“ā ÅļEŌ&hčíQ(]~}ę”Ķ/eė&PĪl,ÚĮ ß?˙Īuäõx™LŦds*ļõIQR‹—;åõ”ÕuôāiiģZižäŨû÷ȘmœĻs‚‰RÄŅąJj$?pæc¸B]Č‚'Ķ>ôÕ,z?])G"q(sKrĘŖųŨÆžqwˇ˜ņKö†$eÖ˙Œ?‰õ Á'Ž-Jƒņ‰2kĄ3†Ļ#Ī× žr&E}Ôrŗ )/^˜;{PLũŅL$ ~œÍ¤į0‚øäÕKWä4œváícîÆ[㠌 ^ŅΏ×íõgÜ"ŗØ`ZOģkŋ+Ø ąĖļZˇĄBadāiŸ MĢō2AøæZ*đϧ!mΑ7ŧŊßąŸ9žM.ũøĄmMņöä@ŽîaÔEûzKģëɯËsŪ‹5qmŊáÁCrŧ^ÃC“gZoíüôD|2XČ\{2õ’Į×[bøōz‹ģX—Áģō`Kŧ]Æ×Z¯Œ?hˆĖøâģ­Qy ¨N'˙oBíÖĒYo ƒ‘âZ@ûEh—~(áW(…ˆđQė\ãXFĨųųhōTĮ1ˇëNS>?“HŦütRŽĘõ2Ģ<÷–^xąĄo­.¸4¸ņĩwqŅ}ëą2zđ¸Ą@kËÖ(NåĨg ŧn/§¯ ŧ1؈Sëöjô–žŠēĀ´žškc{ÜĮætÅ'K73,Nîđ{öåoĩ™ÜÛjÁĢ!eבfehvô 38zŠ4?û‡\Íø&ŌîŲŨ:˛wŨiâcfیĘJFž[Ԁˇ(ļõ­cžÆŖo5v^L…Õ՟XZ0ēG^āJx2œoƒ@_ČīÚ9Ũƒ<6v~&šœ„Ŋ^ÔÄâ;§W-y f4 ŽäōŠ=ƒ‡´āņá-Rx ƒˇ(Ęāų ŪÛÚČŖ8‚ŗŠdaIn͂Į‚§c[“vœŋBĒF‰xuE‚,ƒØĻŲ^wr…6|æĮP ’ĒdJ•ØųMm&QSŧĸ{ KC2x<¯edŅŗ]Ēá_XĪĀ!˛ <ę"đHõ’2a.<ûĻA’ß 6Ā́éģ¯EĪ&ŽÔP.uĀfûį{>ŦDĪ$;ā᥎đ xĩņ-ąūīr q—œČėnäQj¯ŽšÍڋmuāU…Wč–íM^9ë3NôĮS_ īëü(šrŽŊ†˜WĮoĄŦĮ;7KrúäWUāÕ}î#^Ļā5ė[âiÎàr—[žuQ'BYĪhĮiãX9ûj˛ķFCŒŧîĨH7ELŲōaĨÜÜՊÎfídl>c›–?w›á ŪØvæĮNĪ`ÜųƒĨr,ĒyĄęÅ8€į+@[á▸(ƒ‡ <ōÖ ķšYyMĀ‘&ō!—øĖÉ÷¯›mIC[Üæ ¯¸˜îJ:ŅU§d’rųņčûViūÄ/âĄ0ÁLGO$6VÂaNžčƒ‚(ü`ëáe <÷m ŧæ0BōPāĩ%3žŠrĢf3ÃÉļu%ŅeS1ÁĢ|đ<ŪŲŅøĘ.yxƒ[L@bx<Ũ뎉Ghü"nō˛ƟUŗmCŧâū„€į&7ķ=\č–Á[lpnä<ísY¯—‹BĨ’Üđ›¯ĮČ{U^Į%ņoUŸ^͆īŧ'ŸJSv5(‡>ÎŖ/?Jũ‡Fe'¨dŖbÛįs¯IāKāíđ0p‹u2ōF^7ÉÎŨųÕûl÷3÷'ģ!xŽ+:đ¤ņÖÆZîûR“N°vä ?^|*ā— ėÉX‰ũ]äHk"™r4 vøß)HŊÕw­×8^įž>āšÔ?Y9¯qĀs‹î[#’eļÕË˲Ļ0ļÕ.uųŗ@× í5<š›vE&ÁtwW¤Ž<ü܁įŗéŸ”ggБ˙_ų™o˙å<ū˜?†Ūfjč8SôĄs>Üfŋ]ŋČ?įžÕ:>žV<âĮßmpŖ¯ģ´C%i˛ÜęÉļzđ|ŌA[1‰j•čŌĪvĖ—6›ė‚uOĨ^ũ ƒ×^€X‚hT‘žSûÅS'āIF$ģá.ķØŅ+ˆ)îs2x1<öœ2ģe[™ōĢÛēWLĀļĩŽV‡vߞ–˜jK!ĘđŖ-ë/;ģPČ/4`ÛÃXrM –2߂Ü4° ¤KsŋN`#N+"„ŦÔ ß­Ÿ?ΈĩS_áÅnxĸys^‘gĶ<â¸#TËōJ"hCÎđāršÃq€Į˨dã/øŸ_HeJŗ‘ø‘l>?öz¯ž5ąŪ°dQÎëÚžMūÜ:xÚˇöiú­S/øe*âkˇ=ü~?‰bŅyHĘäE īkĪFOYv8^*ÜŨŗũŧ0‹ęŪôļ ^x($ÉČkˇsĢ%Ū,xÆlĢķUŠĶ¨))‘žhĻøĩÔZōXoãßĪĻ<ûŪ/Íū!ôVō:ļ•Á3e 6^ĩ÷WÍJŌdĒZ$<đtržü@M<¨čĐŧî:ņNĄˇt|ŋ4‰!V•r,ĻS5oK°õĘpiHŖ™ķÚÛĢEĶāŒ<`>­—œė>ˇųKĨ}YžZÁLÉ{l=ØIˇãZúÃy"/ā‘÷úl2QøuA÷ ˇ¤´3Ŋ2\ԈĀÛY5™įWž&§ŧv&oĘtˇ%/_͒?ļiļW"!ÖÉ >cߜô_[Čfņôęžû›˙C2ĘéŲļŽ/:<ĄY9c֝{HļĨ¤lŲR+˛qBd5ЅåC|›:Ę܍”ÉĖåōĨrEĪļVhˇāEŖŨί|—.‚‘WÔá‰U‚įnŗŠÄĐ\*vîuV#JĨleb}'É˰œwu%W0ųĻd<Ą ˙SwŸ‚ī#>] IDATuđüęzčš9OQąŽsņA{åŊFËRõä"æ(Ūf›Š0ŲŖ™÷Ëŗ( ė{đ'?ŋķņ‚9 Œh4s^3–4ĪļûEęŠĸi6ôI¯)Í4mŖŽ“ģȑōxåŪydŋ{ū‹˸ÁßËcļ˙/m mļ¯†m Ķ6ũŦ+qŲ^ŊMÁßF(ĮĻHÁ3ØđƒŪįËļjöĘۇ`,åwĶ5ëi;%įBę¤ zöœ|Āʍ3Y90?Û žcöhę=Œ[$ūF6—ßæĘ˙`íE5dÕĒĸû\1›žŠØVKę‘'?MŗŠōJ–éčÍAũ;Ri/zJ*X˜ļąNöŗŽUš˙ôq ɇbCži?ÅČKļÍgDR‘_ļ?xĘc)ãąFO‹ęĮzWW30 Ģōā2ßĀB2T†Œŋ+z̊LE3čĀ3ĨˆŠ]ž=c;‚ßŨŧ×ā6rá•ÍvĮõEŨĩ‹=od›™b…T:=+îʗJą˜Ņ›úz€×Ŗ$Đ.ÁŖtŅl^xL‰Ž‘'ˆ•™Ná¤xEÍh ęēyÖ?€›÷YHũ#īĐĄOÃĩęK_T= >Ņ07čHÁëÚēz=gŽl—ôúÛęļ ÕāQA¯+‘>˛EuŽ=\Q×=˂÷žƒ'ŅûũøįŠ˙Ļ˙RæđũJ,Џdļ}Ŧž¯=Jdä ĻS^Ņ‘§Öéņį¨Áŗ+.JˆãØĸΐ*U}"Ķ,C:0xž_yįŖX=[ÉåĶ̊<ņŗOŪŊm`˛ō” <› wxÕnļ­~¤ÂPr,j7ėī°ēî% V*‡îˇ¤ŧ„Œŗg×ŋ,÷ŽsÕū,ÁŖ§ĖæC’É˙Ķ…×wå˙o‹YMĄ.B˜mĪŠë¨ëwīlėۈ‹dJöL;#~˙˛GđNŖSáTåL<ūņõëŠĮĪ<™*“åYčČ+ƛüđJy34ö›{ŧīĄ<ÆīXRRL;`zîyįQdŗm&].SļũüÁW-°­O”OŨ[ČyEyËVčġíĩkäö¤~EmXväfßBSŖ¯Į×]ū#ÂĮw7wŗí§Ē(yJcßŅ8ōšÛŨ=å.`9ÁK åõ t ļŌ\W¯âÕļRŽÉFWä&{LƒĀ;ĨõW#īø@p‹‡•ú–#Ī(ĄĻöÕëËæÁ퉆IēŲ–z q=‹G^gڋœ~Ģۆœ*û<^["SoNŦd/e Ã4Čyr°2ī&‘/!7_÷ÕĮÃ͘wö>æjãĩcaÔ:æÛ=x=H¨XyÍŨl[Ŗ‰ßQ]|QŊ 9ÆßŧÄ÷žĶĖĖ$žîŌ$ä,ü›ŖšLšrVyëââü@įŨõ–oŊÆšášŪEëëëį‡×.Öü¯nhe x+fS!ųD:ōxus×ČûĨâ•ŦŌ)ėQ.Ų™1}L×V¸/.Ŧž-¤/xķ°õ§˜ ū¸ÔÆÁĢT=[Ũŧ†āģŨ8†•ŖūÖZãaëį[Üjí;vî¸īö“O(•įYķāéG^/đjĘ4xĒsŒŧŽžņ"ĶŌ×)ôkĖQxŅā—ŌwˆÕŗ7ŽŽæˇK•˜2ōÜ ę­K#o6Ū7…ˇšËŧÃĮZĮ}k#¯ JqMÖF^W Ū…9Ȃ1ŖéųŲH<ĘåS%ZU\˙„Éđ “Á{('ü÷Â1nĶũ¤ŲÖĐkb(đÛ>Õ¸JčØ6—29C‹Â| ĮäŅ!Ŗ8<ČÆBxZJ—>œ™‰8CüoÜsü?/ęåjĨJÁ[| ƒW‰zö o€w‡€Į=9R3qē;hn0)lĢ5áëĀûY÷~7ĄŲŗÜæwĨxŨo ôœŅ fTæmđĨšBĄ…kےŗĘUĘļ571 ÔwąxŪÁsƒ†ą.Ūj­ įÂwܡZá€gTšz×āÛn—ŠĀS ŋĻYˇé­øGéŌ§;ÂĐčÛNš ”ĨīŊ\ĄāÂ5ˆ]‘SÕŪĢTNJŨÖŨ5Đię(\ôŧ‹WÛPčęĒÖWĨ.įĒå¨ šāŪąãXlœí#¯Cxĩ5YАÂļvMŗvĩívԁįPǁôØ{ŌMÃ/úũ—Rsŗ°ëÕŗû•ŠöMˆ†æÎ Q‰Å$xđëUÅ3 ķQ{ˆŒŧ†žCŅMĩ#¯ĄÂXÖ^-‡YmnŦđČĀEJE 8›a)e*N2[Tĩ‰Ģí›Ŧ)y{Đ(Á+ļ•Í*;ûú<û`đÆxUæJ-xB‰zĮĢö/$đĸÜÆ†¸š/Ĩ%āüŨ7`]ČáÉãEÎ&,|/]žœ m\)Ä7Ú:đn :ĸ‹5ļŨļÂĩ°ŦJlĢŨҞ­R¨Ko*v8nB ¤^‘G,ãdáąfœ ˆáОŲXÖéš V•ûå˜öMiÜ^OzRā‰OüîIyZ1cBŨuĮÕUŽu/×~GėX—YíˇÍ×ir ô]0„˛Ä$+Í;Ŧ÷Ø]TčąAÛ(ĀËį ŖŦ‡ī¨ēY3ō{”Đ•öŨÎĩ7Ā[ŽÃ؟Ļ?<Š+õAĐøåķâŊĒö=4h‰zļũĄÁ“¤Ŋ xĨ^3į%¯Æšūōį ÛeÜ>é7LęrŽĄĀo›įÚ˛ĨK,˜Ú˙ÂøžÂ'b‹õŨ;×NîOŖīlÜǜ'ƒ§ąĢÁRúÂ+Šr‰„qjŖåOĨįæa;ŦxZįF4ą?p0Ÿ§äDâFÁ›ęhˇāmbũ,—īâŠah¯Î°ÎJ5lĢ$éOŗ*ÂqΘGB6§Ũ59–īøy(%rëgejØ í~ä5EËÍđd× žŧ ĸæņˆu¯j”ãwDˇƒ~Æ+ļÄĪŲ6Ã0AŧîâéėđG.ķ^ĨOŽ ˆÍ¨LRė(ĀŖīŦęw}A>ęNF€Õ3X0ŌļųîÕæwķ¯?{€ˇÍąlœÁGŠ/>í?lĢ4Ī$B7 –ŪTCŖ/ˇm‰mcđÔOÔËEZ~‚Įũ ŽŒ:™aˆŌĸŠböŖkŪ X=› ŨČåīũÂļÕĘŲøŠQ€Į“jQš‘×UxEEŋAõ_‚Ôž<‘R"cX?ƒÂ]g:ũL2\1÷ę#y;šīõz|āąĒf…xröˆīē|/°íMŧxbļ=eŨ n(坞u^ģ”ļ•Oħ^āć‚Rŧáé Æ˙5܊4§*T{’āáÕļûՆ3JčŖīS䒏 øÛąē}ŸĖ^š.Ī\Ŧˆáu<ŧ÷5'3Ã(åAvÖá°Û˙üž"ĢíIŠį;Wȟŋô‰`†Rœlš¯wDÕĀÃb“ė`r^'Ņe­û<yÔíÄ“”ßīĀúŲëHĩ”xŸ:1ŗ2fJķąxĮŦr%Lūg‰B!ĐHLÂ2īÅŸ”ôŲXØDčŕ\æũJ%š… RׇÃxäCg•Xûäŗīzîo ÎܘŲéČÛC“ŗ ŠĀëŧߓyß°8ō´ā)|ĢtüŠ""îņ䡊 $ íI<ōÎŲPd"āŊééŲH|˙‹ŋ—Īŋ_)E,Ō› ž‘•~ā5,„cĐ ^ņLOĪ ‰”bC,4Ŋd˙w _ÎįßĢTÎ&ÁÂā]ĪY˛Âw<‰”yNîŌ]Gãœ$aîŖˇxŖŠ—ČÜDÃĨxúÁ&P*EŖāä“Ī—æåžŨ ØÆsãYo‘‚wÛ<ŖÍĩĪwÁЁg#eA•Žü}ÃËÁ&ՌÄũPŽŲ!Æérd\ Ū+$j#īXû‹ø65{}\`D7S?æ;žn9ģø÷>ąísÚx‹܆%HGžPŦõ|øā),įQ Úo[ņ63Î Ål›Ë§=Ææ<Ūf›qAn¯m&2ÛgméØ?üũmáÎĢņ8e[<ÎÖ@ĄXĐxĀķŒ7^đŽŖÆ>7nGŎO…´:ШÁk_ĪZy2dێų ¯HT4ŧüeAŦT"°ëŠ—Ņ=s(‚ 'ēp¨ã:ÉŖƒŪy°"ØļcUY\‡9omĢŪâÜë­ņÅFëˇ1Û6Ū>īĮ ÛÅzųÖëÃ$ÖˇžPą($ŖnTĻUāŠL*Æā‘Ũ ዸč%ũW~ō?K?üü…tifĘE aÜÃōJgÁ ā-nmĩÂî-ÁŊV‡4øßŽ%%ßÚã†Īũ ņ¤æŧœ…TH„8 *NúŌđä÷k]ŒĐŪ¤ØÎ‘Ä=V{É7/—N͝ˆ`Üš)#Ÿ]ũëÕ6­ ^c]đ|kuXz×ļ„°¯°îĩ­F˛ë?!đš…]˛­.aĨÜ­Āw aŌÁüũJy6yēF!€?˜.?åŠ0l6•Æˇ™Lüė7~´ųÎÕū:˙ĢØIúüwx—)xļŧÛë‚Dt÷ÚÃwyũ‰W‰Œmņj{ŠŽļm”jƗīÅ †‘!R9úJŲlėL(Ž{ørN&˛xēģGœU:l ņĘPø ÃÕoMīōģŧÅ'6ōÚX=ŗg4™Ĩ:QŊMđ„ėâĻ(ĮĒ›ũڔ\XØKc-ã4C!…Y, ŠjķĨC'é 4,ĒxԜPâ/ßũƒ'֟ÔČ+ĮNí<"kđđŖčŗue˖7ž|ĪöŊJ9ĸ\ŲMŽ‘W"“đøpÖ }ģûë{åęÅdŖŗÃY[—Ā+ĒÁģ-ƒwûßđГīŽUđ ŲVYbߤ‰‘÷¸œI`9Ø$Xí.É$€Å;žø–R)ÛôŒë´Ą1wŦQåX$‘ i4aļ…T dÁhŧÍuĀ[{ Āk{Rl{c”lëņTĨnÅ žgšĒmąI,Z[¨ßÁķ„q'üę/ëŨ„Ėƒ ¯”NŌ¸ŧÕCļÖLđŽŨÁām=Š9OˆYɅdžō|Ōn ¯h É1éŧ5$Oõ‘a_@Žė%Ø>ø‘mĮXDŊ`¸Éȧā= Ûŧõˇ_Åā­=ąŖ`rl < Z”āŠ‹ÛķúÄÕl–īŲŊ Ëy0Ũ-Ĩįf#‘Ķ~î{™¯5cÜ/­Ŋ§âa-x‹ÂēX āS<¯v·ÁģÁ+ˆ]4‚9o%oŲĒŌũæ—hÁã,ĒĘG=áyų~Ų 1„ĢĩāōÆLPJÎéD?™ļĖ+Ņo@Pæ^ų¤Ū-^Ģ&† xx[ĀÉxŲz˛āŨ—xĮ…ģqa”:å,•÷zëpģm`bÆâÂļNēĨ{-e››é¤œįæ!qĘZŖ~ž€ˇFvĐnã5—€×đ –MøI€ˇq#ׅeđP†BĻØŖ>ížP&÷F(ˇĐīŪN§Ÿ 8ŧĀ ŪEœšĶąčY<ņ­^;ßÉ!…<ÜĪŊÕ Å(…pũû­ĸ›7@fV+i€ŒF^gׂ{^o߸j”Û€8G^Á‚œ‡üŧč¨FúÔŪHbŗí=Č铠ģgÔaVđ‰vņ) ŪÛŧķ īąČ÷ĄÚsž!ĘØ|ĻlÛ=ōüĘŽ…âßg)g6Ûā9T’ )Õ|Đ[:ųV˛r¨7x7nŋw˛× Յ.ą¤!†× ÎłņkØéÁã=%ļVä;öŪT*Ξ}ž ĪÛ4Äüdąœįa+ĢyáîŲ¯ˆâĶÕ^/ô`P<‹BŖ˜ķŦ¤ļ*tk­t•XzT6¸P&&Ęvõ+6ãĮ?–RĻ\Ž1GŽO§gg“~†w>[gn ÛęéŗoŖm%FˆĶíŠ1õĸ­Tv¨õéā Ņ~Ž#Ë_°‘Ūü„ŠÄی‰ûA\.ÅbĀļĢųLŠÚë…Ö†vĶÛ=x•JĖ2x<=”ļpl6lÛPėËũĀ+O÷ųvÕxÛˌ‹—ÆT bäƒAŧ`ŧW‰&ûŽ<ߐ¯> ļĩ‚)Ŧa[–4É]Ūd"´ßm%Â_ĖÄĀ•[â!ů+ā_N_¸/ x]ŨLĒĄ:Ē Rčķ]mģščcûŠÅ¨oĄŽƒe1ĪīįS6|æ?šJ{1Ô?íßڃéŌb¤nW>ŨąĒčŠ1t5 ŨƒWļĖļaĩ†į ōíS kØÆúUxō 8ōX\&šˆWhķLŧ7ÛO#yr$âēd8Z.žĄ,ģ}ŗŨ0ōšāų.č ĢķéJ§ÃöŲ×C;P˙°° ÔdŜ×Ķ}x]l–{Ŧ)ö¨S}{0b[ĘÅ4ųŗKģ⚠–RXät9§9÷‘Đ¯Wķ*̊u…zÖGëKŨ†@ų…T!g|ßöw7AĸÕæSäJķŒ?6Öw‘Ë/Q°í˙2Ä„ŽôzĄái÷ā%ŽZ–ķ´ā9Zž[<5ØÕ < õōīŸŠŲžî+yÂļPHm†ˇN#yÕé%Ė‚‡•ÚĨââ3`Ŋ€˛Ŧ=ŧš˛(ũát¤”ŦkĘÍäV˙ŗ(|xŌ:h”F1įYIa¤g[–ęHŽb [Kû dΠ@HėëXEí„ũÄ\ūr­đ­ü{Ėļ‰īJwx ~Á.6tÉâŸ,x#b[ÄR+ōßš{˛ų^Ë <”ācŦ¨y/€4cãģ1×s™÷HæÁ••ŽzĻą–`đę§>Cđ„ûåQ°-¸­§ rŸ×čŽŖąKh‡ ĸA7Û:;ą+^(„&ŗ:ƒ&ˆGsėërėũĘyŌs‡0ßWr™{e0čĘykĸpîŗoŗwüŌâ(x ÖzĻ•]ĮMƒĸoWāÛų2ûē‹ƒųn.ŠŲv"@*=Æ^M|ĩ°ē-T^æŗĪD…r-=Ŗ°­Ä).Ķ‹=]S—7ˇÃ‘˛Ŋ6í„]ī\æBzv*2.Ĩ<ļyįŪúŗFōę>āĩŒ˛Īô Ũƒ×.fHÚWи|2ߖ;l/;čĶXę×6‹ĩ2?ČÜĶ3.ÄøbUÍžKBķ‘HÂ/ĨļčÍļ˛Ī<1đVŲöNŖ?ØhÁŗOŲŽ=y*ę>)‚vā "ÛgA<Ks1ŲMę~•žĀeŽä¸&>üDš>Į‘įVƒãBēëØPŲ“‡ W§Ūl* €&‚<”Á.¸ÃŦ~ôŦ(ČāŲp@LŨ%ä⚸c"iČæ<Ŗ¸Īahŋîʓr?Ĩ[ļ}÷/ēÔąu",Ūņ^[4>1‘Íf‘ũ$øŒäčNRđÜ"ī÷ƒ'Z˅„@TŠŠŪXąBŨĨ&x<åĸ›.ļím&ƒ˜mK?$Ššøh:væë‰ÂĒ@Ķāĩk=ž?Ų5zgׂŽxŧÁ&Ķ•ĮīO!¨On™LwÎĐO¯įŊ‡ũŲ˙„NDΐ]o…m!TOxæŗoÛ˛<ĻoŋÜßc?=úB–ôŗCŗ,f[X1lNFb|Ļö|ę 8]D€m%/=Y~ "ķÂ0ō>sđÄÄÁĶŽ<ŸÜ]'‹OĄaôŗ.ŖŠŖ“››„Ą:R¤,Ģk"˜Í“Â]‰ ˜øĒŧzĸâ?ļ,ī˙ØUŗėT'ą*'ņČ6ŒŋĪĸXÆęd4f¯/AŠÖ3§_ ­îė´ _Ū§ā=đČŗ‹ŸĪœg™mÕČSĘÅwBš˜ą­”Ų@Ūé)'ãGX={ŠŧéwåĶ^v/^”˙’yķ”?”Īo—Á¨'˙ZļD$Av×|āYf[FíĢ­Ŧüų¨Gˆōānk)ē <ũ?Ąiģ÷Ė› Ų|:=ŪA•œˇ%†I ĪCHŪąŦžiĀŖ>ÔM–Yĩ7 4׊8ęAEØŊÅĶ]FNU #o>‹*r^ƒW‡`yĸž\ŧ†)ÜHɸäßX}I5xũ‹°|TėuŲ@’•[Į‰œ‚[hiz&˛"tôÔ$8+ Íųä'ŨæVũ•0ŦRkkuŦ¤Ų?3đdzaāɯ‚§AÚ-oąWÆX“šrúŲĨ Ūŗ.4ņíė‚9ŸŨƒå•X<šą’UV[ôÉČ]o0"b?[đ„mšĻ‚đTøPđfĻäŖĄö/ŒČ67ëtÉŲš@ucx;z1đÍ<Š  Ōc%UĖđÍ[ ģ>a\ä‹ĻØũČŗTHDŨĩhķ= ¯XŖŠČT ˜#Ū€[6ÛgQ<ōr7wǚ×^-ĐØļhõÕTWvv-|ōQÍ2bÄeC,XU T/™Ā¸åŌļgNDO'ĻŽŦ%Û+×횞[ĸaåäA4ļĩ*$Ŗ¯RČ|TėyŲ ÂÂ0ä§å‘—e"RįĄ=Gy›' ™|rØ=;ŖŲ=[7Ė-8v ^3yÄ,‘Šm roYåy,cîđ§ņĒą`ķڈUŗ-Û&7>îČy„>/đļo­ž%‡äüžŊœÔpĩĻ IDAT™PT™T cŅëE~„đšAB0ņĨįĸ{Ũ‰•r;õúßĘÕeeÚ:bJCģŸķnōV_ØVR讅ĀĶɏŠČ"đŊļÃø<īym&âJŒAFķéŲYvŌlc‰¯gļKåčY*$Kw;î3˙âŖa[ĢāqĘÕ*6üaų¨&cœ&ĒáųŽįĨzÃ~äØC~=u&ĻI*.,įiØÖ0ÁÛ`Úx¤ĐŖÕč)x'åūJĘQQūÆbÖJ÷”lĶ‘HXŖJŗQRé1ŋôŖ3 ›ÛŊh÷#ķ[}ŗ°ü—Ąš{:úŨ˛uX !IJ.××7p“ îōžƒéĒ\K|Ø|•ŗŽ™B#ķ,æ0SÖęģžļõ ÖÅÄAš l; IāđČ;;™ØÚÉŋ’9ú<Õŗ“ô *÷TW=šĪCQ †ÃąœIąø7™ûJŠ‹ÄƒŲ\æî_ÆlŽ1Ņ+7ršÕÖ"‚m­‚÷UzĀÉ})!4älbՊœ7‰<ī=ãBū—~ˇÆđžGųŌ{Ņh$q5K䕸įÍļ„š‰IĢāŊ"˙UŌJĪĐ]GjR™¸a…mUÉAœŽĶ+\Ę;7‰CĨGŒ[/ō]|[ëdˇn¸ÅbøŽĻūņHÁčÁŽ`ŋ4ũüčė_tĸĻdđŧŗË‘ŒŨvØÍĀl[–ÔÚ\žtčŠČ™ŋš]Č ú7jtĀkšÅZxQŖ1:đ:( x‹āQg Ē_t\BĨ3&ôU y mŪéÆQņ6ĪônRwŊ6äü—ß˙M›üųÆ Ym#]>ÉęT4—Å€wëIƒ'ZgÛ?’˙rôæJ+Áp˙¤…Õˆ f•˜áą°÷+/ËFÎ$‚ßĖaļ…­+šîCŽ'Ō¯ŨyFe•GŪMë y´ĢÎz!ĩ‹+lëåYåØq0m›qÉõ¨K{#xÁXɧ„JåG]ë…ŧ;mQņí~Rā‰œeõSOŲåf;üKړíĢ9Kry"‡'ec!F9{ Ÿž›ÁËÄOŅĩôũû˙÷ŊÅqŅĘ@đÔXŒ<F}Æ2xķ’gbg×B ›e ųĢ]c/bS.˙Bī‡Ķ‘ø~GĀ[,ĸ—<˙3ŦļĄāõü@ļ}2āéîi­ 7<ō(dtY|öB>ŌeĶŊzŧķ3R-øäD.doŧŽfî•æ÷FĀ™[˛Ké‡^xĒP ‘´ģ—ķŦ<<ú`eŨzá†4²Ģŧ¤lČåb ųRiÔfd˙"’ŽŽfô/Ōž*äûI'nķVÁ;„H啂ÜҞbO–žū2ä5܅=7)’Ē6!E˙”>rEíY˙ī¯ŒØļ^Œęnņâeáš0Šą„ÅdxŧúÁĶÜwwlkSbĨD]ĄŽŊxĢ Û´M:üRÁŗˆ?¸ôAM7Đoņef2ą‘cŅx7ÛIĩĖâ¸€Ü Įņq~]D­§áŠjöaĘØXyq× ˇéEĮČ˙ôŠŊ,ŲŖ¤EØ<Û2LņĮņí sPöË+K™É0}=×eĪÃ#oŸ˙ŊŧÖzÎ]ĢađÆí­cįœv^ŨČųlāÉwˇ.įx\đĘū#/Ŋ2dŲ Ûb ,¤RsŗŅÄ˙OŨûšqŨ ~¯ ˆ¤€…š‘tlĖp+Vŗ§ĩŊW23ŧdÁ9R1U)i&’Ųõ 5ĒÚ?ŽēĄØÍá˜ŗŠÚ,'{Ž8NaVųÃ,ķsUŅ 'ģãŗs+”ë€ÔÚKĢlė€"i@ŋŧīëhüšü˜ūÚ6€îF÷īõû~ßûū€J"Éhæō¸ ĪÅ˙2“áÆ[ÂjeN:Iá=”.ÛWKüL /J—y’HÂjģ¤ũˇŧŪm[Úmõöö qɖ‡ČŦ^&ĀYĀæ2Ξ,;€(–¯ÅgFÆß–Qû9mßm•äžv¨˛(ŧ‡ā7õ˜Â[lįÔ?ŧÉ@¯đ „j}J偞ō’~ãȗų^ŧôĢ^ų%Ō –qžVŦo‹bôôĖĒĖÅŠ<é˙ ,´ÂÃ:ŧ™*my°ĨĀ[jWåļWxôTĘ|W¯ė”ƒSOXŽh[ú!´Ãb8ÕSˇĨ“z#/(ĶQŅĖ0lCîäá§1Qy>ūA¨<|¯ŪuŪĖ áÕĨŌķhû ŧzš_6z52J/#÷Ōō¨o^”ÚȜpDG˜áŗV„~9DŦĩŋ—ÉžwŸdĒŧ*SÂ×UxĢØnßFx5œŧŅĢĸGģ­vMŋÔTdĩ%į1Oû˛ûĶFÁCĀexƒ …Ž›Í7b´͚™ąņ Í0ˆĒBáVUxˇÆĪžÕ#; Oķ}—#šW˛ēd ›˙ŽÖKˇ­‹cÄ ™ã‰H†…e čĀŲņąP8ü?,´Ü‡ÖōfxŽĀëŨkē­Ž¸û^o8-Čō×+š^Ŋk01årnŅͧĪņãąČôĮėeáŲaXj…§´<ģ2`ė ŧ§ą^‡[ųīĻvéZųnuî˜ļČŋĒõ’„V9F '˙7äļ>ē‹d|¤Û.$wŸV=OĮéđ*0`(đ>Üxy\ ¸z„÷>Ē?ōž6yÁĶšDëz÷' 3ŖíX’ƒÄ|FŒ[w:ĩŸí91ûë<–÷ŗcža4ēd6—›lîļUģĪ~Øļ‹`Û>Y” Œ!`ų`{ĖŗJ%pŧGx%CáCˆRĀ üûģ>+uÄ5fv0'Ė˙\î¨ËĶŅ,õnŧ•HŪlē‘S8 —cAoži)xKéīI—4xˇgb ,ŠŊÃĶÛįžÆņB™äģ–¯ôŪmCCŒ9F äĖ“øKbŸ  DRž‰Ÿ Í÷Q`Ä#`ŠīŸd˜’ų #íG——‘'ŋ­éqģđŒļŊø S)ԍŗæņâët;PŦ ēpŽBˇ…ąØŠÜō„N˛d´ũh97>ŲBO•{žzEzõ SåĀH ¸1ČÉŌfטg^WŊÔĮ‹tSáåũ)ÜCĘU+b\.:ĒäŊ`Ņ)t-V*!¯—¨}+4åjąÕ<ÛDø6īõ ¯–ŒöĒį Yš]*/ úõlˇgm›g3Á -ėYHÆh*Žđœ|6)t}Ģ-Ō¯‹Ė{ē ģz†W/žŽnč'ęĐ;\Äķŗ=ž\wŨŠSŲ…Đ1/0äĪrA˜ŌŊáj”87úz* ?ō>oōjTS#MåqîlO§Yäķ[!',ŸŪü~2ōRæėūũ•\Ž(É ­æY2€ŅöFŨ–Ņ+žŧāEú‘ÚĄWĪv}^։Tgfšlī?ˇšJE_z9 Ūwąeĸš=ņjžáå*Ą^ŖXôQ´ų¨†ņ‚>ķē‡×]Ęg=äĸkļšI(ᕈ~”ŋŪÆ<ëAĐmKGz…§¯Z<ĐR˜Š.>ę+Ōm+Ŋ>DwÍîx$æoČhNd@¨Ĩ>ų× ĒVŧÛ=wÛzĄ.^ŨRæŖ´‚,ĖZ/ ˇˆv[(Œîtúü!/Tôūëˏle*“ #ü‚`Œí‘nKô§õ<6Íißj(ÁrF}uw´ėCːKŲ âfDŗųp&3Nēm؏}DԔpz^;éwŅģÖģ;<“Ô3=hō‚į՗DIŽô_D*Ų(N>s‰Û°ė˜(Î%“7+ųƘŅŪ¤xëMÎ*ŊVîbŽhg8¯­:*SŸúėÔđDĪšiˆ•aŽDœū`Āæ6ĶĖÜĪ/LC.g^ÆŲܤ€û–žģmžęąq°šû‡,6z5ęĄh÷qŗü lgĄž2-í ¸›9­÷+pŠ'ofŠõvšÛbÅI´œčĩÛj%ĒzBJ_×'¯Ž×•5oU]qAjÖOŒ20Ξ§ƒ×‹ņäŨ•l}Āhįū´Eé ž’ē׌æŸû…ŪOĶđÎ}H Ŋ“E;b 0ā›ˌWBá"yōå˙p™§NwŠTYžü•™6žŗŧōęŌŧZÃĢPÎ*l^=AsáN{ŲS˃ ęiŅɞ0CûĖæÎû( 3 ¸\(ŪžŸæžOaī­Û–”1˙ŠĄĀŖļ™~QĐšč[}ÃĢ øĒ$Ŗ-ų˙ļ$ē}ájĖĘ ˇC žš[Ë4Ũ SPéҏėm †= 8ÍfˆyŖírv|Rũ–Į oĩ ŧ™zoŠūéāāÁęŲų“IéĶ‹¨ÃxAáõš ÄÁúü>Û>Ōm—3š Tzŧ“Œn zįY-đāq!ŋ-đRõÍ<"¨čĢMãE}Îļt4ßkZ$ˆXfÎīsĮoŗQ_đBØsKN.˙,“ûoyüĘ\ŧUĶŌø?Tæ×W zŸúø“ų’ps[ā$Ųã4ŧæ" R˜čNĘø—¯wßō˰¤âˇŠzžĪw–t`sųoīŨÄ_ÆV> †Â5O2™ÉæÆÕ/U×&ÚÔ;—yI‡'ķíîŧ?xe9_éYĪ͐5‡œ}U?=üŪŊÖyĄcæ ËLēíxåB(<÷čļÁp¸¸ ĩŧÅ āUuxmgá2ĢŌãiĮĮŊāëš .q4uhO²V¨Kāv°™čļŪ”r85^[ø]cĶÖāĩę^S¨jbǧģĶÛįM!gxŌë=Œļfĸ#?ãv›SÎwüˆņ"wŦœy‡púŲķS8\ŧŖmnRØ ^•—nāđ…Œb=Á̎7^ŨRĶĄÕģmöéîŦŲÂî´¤åékßæũ™Lvō­SĨ€n-˧”ī€˜Ú%üL…g\ږ9ų˛¯}.ÕžāU¨žÜã€Ą!ûĩ¨Ū†6iĖéį—ģ‡× ¯í‹›ŅTæ´|ķæ˙l\˜/¯į+ęč*Ŗ'M NŸ+ŧšß„EZn¯Ę _,Û!ä{‘jĪÚN ā™×Ŗ&Ļ]M&¨m‰ÍđđĄMËwĢÕėžFҍųlnČØ˜.„ÞųdŲžz"¯¯hđ0z˙$‹đSxĶĖā)ē \Ƀä2’^!ÂÔēíļÔŊĮĨŊ‘•Až9šąą2VŊrŠĩ”öŪbU'ŅŦ ī*åF˜+ÉŧÉ>ķ?¸^…ūíMĪãÕs‡´ûĐ(Õ[ž<•Ī÷RÄ1âœÛįF‘ ĶCžÔŨ2`ā‡kkŧÖī$OlÛé’o†r ĻWœå&D´o{€×ėSų´§n+¨GgŖĻāáŗd¤ëōäfeYm6Æ=‹NAø(3gNė?õcĸžxZ¨Lô<#ŧ7[āŅË#đxøz ¯6NÃõ Ī Té)fTŸJ×CFUŠëy–ˆēĮ:ĐˆÕ¯AžSg•¯šĨši0t[ēz;>Ž-¤ÚĀ͟y*ŧĪ‘A„ÂSæ^ž[éĩ¤åõOo^gĩų_ļ|„ågzîļdÜ ††ˆ™œ§ƒŦZĀ8q ķķõûh€'ķvŧ*Ų⠈ŗŧRģrr]ÃKĨæ›Ėŗ§7z¸3N=¸œ9ŖnZááķŪŽģ-RĻņlŒ™p°ZŅ>—;]Îb,ŦŊûp-üaęãų˛œ›Zá]æ¸x˛ Ī^2&Kę^‹ôæĢÂĢG˙Rŋ(’ĄÛ–,]&Øwĸ›Õe6ßv:Ņ+6­‚×ūÃÎåŽL„!%1ĪŪ ŠVx‚rYę€Aá­Â Wm5x5ÜCž§ēŠ\wöŅ?2´ŧ*Û]ˇm. en, ķŪJ%ĄāŲx(üMÚmĮ…Vx—•ËŌā <ˆ|L^Ū°]uuĪNwĐCÎęá <úl3ˇæÅîĪŽŸ!ģY6ã$xHÉĖ¯áâģŸČԅŠf*Ē §Œļ‚OPá ŠđÖļ'ˆŋÛCŪē ķɚ(Ķ-´ŖŒÆ…t7įayČ힎Â0qÎE,5ÖÁžō7ļ5˜ÂƒŒ)õ§âŠx÷(<܏'đNā<…÷¨]j•>á k`žu?­ÂŠĮW›]ę`Ļ\^žĢŖ\žˇ§XųĐž—P4ęō”K"F tŲņ‚€kĩŖ~ī‰#˙ˇ0UÎR焏‚ž]^ŧ(đtĀØŠ…Ņ!v™^pxD1e$1UFä [Đķē†Gn˛‡nĢŗŧēa˜Q5ÆÚ˜nF[3uĨ‹ŲlY'˚ĀĘß Ũ6_š^0/%ĩø\ĒÍÍđWŊ“Î#_!Ɣ)Í˙Ũ"€ļ¯ÁJîa&™S}îÔ­tŲ ]á’°ãžÍNÖv‡ÃPFž4?ˆÕ‹fƒĀë¸6_^^ŊņäWkįb& mmeŨvēëŅVģđš¸vą ^yæ9ū#ąĶIÚCÔģY3áæ xŨn1F?˛Š›-×0Œo+gˆšr+>_^ɌŸiŊ ŠTw!€7Ūuˇ­OŠčæļáSÚA*JÂÎ_Ģ%|ļ&n1ņŸĸQ,zšĻ}q÷áØĪōDIöۚ'öŲØ¤öü~ĒõNJ¸mdhGŧ§×ē…§#‹œQ7ŒĢŗjˇxō :āëöėTĻYô‚š |4“…Œ?ÄÉōrŽ-/…åLģY /=éæÎ{×”¸úi¤Ûṅ¸RęÖ/ ŸRxķTKÂČ,vwnŗKt°ŖÛ1bfˆ¤ûg‰}vmų3:ƒ–Į¸8—uųLëI‚ũQëģĨ;xmķ}Wē.ZĄ]÷ķ6ö…ŪmŠKD9ŨáDtpĮ\´ā­ií"Ŗ.bØDá_“ŸbĸHēmB€ÂˇÚŽļÆõ“-HŸŨV€Y•Ž[žvŨRë|R[ŪēOî Ū¨˙,xGą"ōCjæPķ´Ã‰¤ŧ)ŌmWĀŽõ.Ėß]Ύis;mœ.6’Ūá õst)úãĻ9’"´å=ĄŨv"<ÛíÉU ! ÁøáopJÎW&…Ú­ųų2¯yp´;Nmefē,NĻ/ųčŗČ ~dJˇUĖŗånËųąĢ߇Üî˜č|Į)ĻÍÄâE!5$kŊ\~žĮÅđ/>IõrĢ2x]ĮŒjŗPĩ!^ûZãĮÔšqžœ‡Šgģ:ŗ-0ävG"S#ÁaÛĨŊ}äĮ,¤EžûŒŒļ?„iŅė™nĩIú„'CKˇķyÚeˇ/´ƒJņŊîN}-Âá_íŠXtĘoS waXõ.Â<|^/Õ0Ŗô /eøîn“†jĮ}éÔļÄVx‚€ĄÛfģ<ˇ™(Öä)Ęū˜Až™˜/BĮ~Häå<áVŧ•LF39•ĶRGxj™īŖ ŧÔāā6ũ‹īá•ÉsŪŖŪ°üÚï)/¨^×ŨVÖéöCũ(LĢ(€`Ā ö2X…rųŗė™6đ <ų¨e`đä5x27S=íWą Ī~’ģŠĀģ¤Â{ukđ6÷6 Ŗmį o đLš-āЍŊh× ŠSlŪĨŅ›Ŗį>iˆaōĶ/CÆ_ī­;ķÉåĪō*<x.€WŌáņ*<Ō(<É4hx¸¨.=3Lā}?0 đfûi)ŊUũZĐ~‚ÎûT*Á×\[@gFQʸžīĖ„÷V<1==6LėŒ8hw¸"„ÃķÉd4[™đZJ…GhŠđĒđfZāĄÁÁ_áŲqA)ëĶ>”ĶŽŅˎĩ6Q ^ØßÚʒ#~‰vwlČmĻú Š›ŊË/ĐÄũržčŽKųʅ‰ēyV’ĩnkWāņøš u[ŦĀ“QŸĪ<åqˇÖdž‘'aíŠaŅ‚Ŗ!O0éĩI IDATôĖíDCVÖg‘[!+ĒāĶnō>hžF#ČFĩ⢠ôŧ„#zĖwŪuđĪlEĶRĖÚ;†céąOæV/Sx÷›ááÂ`FÛI­Ë2Ņ; ôxü@Õ~ÛŨģ>‹\ĶŊTŌ-;Ņē)å`v€Rnĩ’‘Öádßņl.Ī´Ųy„%* ë÷†ŧĶI˜UŠĐÔoā&ŧPoyĢDÅĢžOá-V/AmL*ĩúÄoŊzō¤öģ÷ O9Ī:ĩÔČ/*ŋTŋĪĒĢ í† Ũž¨ę6Ô2ejĪ´ŗøcĻ‚DčҘOˆ¤ÛŽŗÖ‡:…ŲņPx ¯Ī“–ü0\œ_„ŋ…5xU°0Hķkī‰ī‰<x5ŧž$=بįÉÉz=ĸ8ŅNŨ*:˛2§QlŨ‰š0ŪĘäģYÔļ ?ŪAÆ Å~ üĀņ8éĀäÉ$F"Ą*Y\ ˙"1O™ŧōÆbā3cZāķŒtRIĀĢ „ôĄīōā­ˇ,žÉųʤĄÛ*é<čéÖûÕV-*zĨÅvíĶŨš‚ĸ‹Ē:hĖ™×ëĻÕ0˙ČæõÎĸ!äŠ&ŋ&Ķn € ’H]Ī3•Ū7])T/ņ3˛ŠūÁjŠĘáՒ€KĪūWQ’_mCŖ÷gŦBæč4|9Ļ߹δ´ŊíŌCk•Å vÚĒčũĀZ3$l´ÚĮ5}ĻņV.ŽGBŖ9ÍäķŦ\Îkæ™ŦvI&Ķ÷L2ē„0r]bJĢdĀ{LlĮ’ÅTâ-×q•ģ'ņĨęå#‚ˇžŽ+9Å+T5@Ž(Z,~>ŽíÖÚ¨ôņBÖ'žg{‡W04äŨŧædŖcWšfōyŲ{‰}ËĶš´ņÚZžÜÂsm´%tŽßĩā+U„Å’lŠZŧ'Ĩƒ(m‰ōĀĸŗ–’o!hx)ĸ°@"Ą†‰ŅŠ^ČÆGöõ)× ÔߟjŗČũdŠōĩÍ8G6¯RÄÖ:tÜc&Wųg—øēĩ…d™˜)Õų6Ÿį]΀ŧ›T˛¯›¨[FđōôÛ°ĩXLÉõ‚…&šļM‘ZË­i.>5}Õą‡tĒ­ÂŌlFNÖ`ŧ01ũ|tbč ƒN Á 8›Íũ*@Ė3}FÆ]jžé-¯đ‰ƒ@įôäžFS"˛účÔķ7Ō…ÄĖJú§Aš†nŧ c™Ļ ‡aÅ´íjLˇŌ-<.ÜĐåÛēyv[3\)ŊåvŪČFŸŌ§ā[Õč.Ĩ5Äúšų ˆ°}'eˆž’/=O"™ĖÃ7æk¸6v7ęļ[–.ā ÖRķ)šņKS˛L”vŊū”‰f/GN=DŽj§hR‘{-õĒ ãr!1= ålį×bÎąq˙?÷7]{ņī}åÆ?ūu1+7;> ípˇĨ ]¨ŋnš yŧÉīJw…ée{^=î™6 7é2Ė0ęQ|žcnŗYt°Čđ2n1víÁŅų‚`}Ũŋ‰e2PÖ× 1Īŧ´vĨvŨw[øC]|ĀØQWęÃ*~Jß ŽLĶpĢâK}JĨĐČ@ėšƒF^@õnÖĄMQÁtÔūåčøčŦ7Točˇ1ŒÉH[\¯Žë÷ҝt¯­ BWžš42ēnŠĀ†¨—{–§+ûęöÅSũąØ5­F:SÍS·#ėXĀön°ęđŌ¨ŊėŠ“支ŧŧœÅ‚qÃ;ÕK˛m(ŨéyJæ-ü!ÍoA`4ßJȌ8ˎpƒ„ô:îũą3P„ôŒæé(tÛc´^R–<øBswn'øĪ„‹§‚­TųŖÜød¸˜;#ŋŅxíËūô o­ÉŸ^@ŨLŽärīj*+ƒŸŌOpm!UNĨaÄāÕÃäˆv‚žJ]¨}Õí†öæĐfväČ)ī7˙­ŠXķü›ÛÉčƒw‚0­rē-ŸŅ˜Ņœ` Ķ`‹ŠmC4<]rā” úņ õ“JÕí0ūĸū•SÈ 0ŦmôZHCĐÍã"dV hõā™į´™ŧŪŲk÷ˆ4?%Åô¸ēę[=\á}Ēüŗ đ` …ē7ŖFÃ0ÚĒj2cHĸ,œõ4 ˇÚû}~ Ũ'<˜ũ×2ˆ%Î*Čõ’Ļbt˜đü>Øg#DA.ÎiYbķāaŋpg>Ym;ĀÛÂĖĘÖá ĐÔ3ÕÖjÄĖ€n˸”[0éđjÉä§qj@Ÿ‚Ot/š_oE|”â56:æcÔËÂ9ÍąåĪōīP`}/|@ôžyđ1ƒi•yeZeBđv‚ˇŲ:ŧæåÔ|2ú äA|Wģū•öqeâ=béÖīR/ūĨvŲMĻ/;Üm`˙yÚmYä@ŠPU × ôߝS§ĮrDģsĮŠZL"üôwĄpWĶlTÃ=o^TSÚ–Ø ãpwė\ąˆĶūŪnˇu荖‹ąĖO´ĩî Ė‹zˆyFgi'ÖhÁ3ũ0žļ#KÉTrØ%@QE|šxīķ!MW—MÕח:ĐėŪ?0ĪÖ°îR\–s9! v[cE2™1ÕáŅáņÚoĐBÃܝâ7đĩĖ'OŖˆhyãoDĸ0LķzĻ“Ë÷Įsęͯo^~ëŨ–ˇđęcÉ4폤Ā{‘x>.-ü™ž#íGéŗ.Žxʐa˜(Öߓs˜¤˜KjËgĘ# ĀJ´ģ´C˛ÚVķxAēa—IæEũßæ2ΊŦĶéyãy#–ŗsũîüm3â͉X&8J2Mũ„ =5ŖĀģž áöÅ'töŨ.s0fHvģ$p0ƒņ-WK…†ˆ¸ŽáiąļĘŊÃü€Ģ1ĸĸ vÞÉ2y ^ŨĢQ_ŋhmf‡ģKøöF$žô3ČėžŽFYŋܤ\ˆ9°_ĀYĶšcˇâņˆ336‡•Ya-ėũFZ%đ]üT÷PIj—iA‰ģ. ķReĸW*Eyeđ’Âōįãz螱Û>)ã4§ŌĮ Y÷R)´Đ`ÖÄnāA9Lw9F á,Kģ­ģ8æĄúĘx. L4Ö cä'uw <ņVUxJ ōLSxež[|Råúƒ7ŋ^ÎWÆÚm•aA^ĪCÚkī­ymõĖĐļ+Â?ˇkö™>^,ŸŅļÚ´˛p7ėĖ‰ÛæējôĻČ?l‚rļ+Y%ø,‚œéā[§|oU>xër6WĄNÉIÕ’-X…ˇ*Ģđ |Y<¯ĘéŌU~ŠxSqmAˇje ŽųJ•âܤæPMáå•=’åüįvmâ„×NÖˇÚđč*ķŸĖx>†yÍ=‹˛>?ō#—+Wá‰_"´šFf6æd‰žėņ܁üJyš)9šŗ*šƒTål„GqīúÕ~ኲNgņ.öˇ>Ÿ$æŲO'¯c|VŊ!Î0Múd K ŪyFû¸īų(į¸ĪfsŧÅčˆ\\ú'|đÉxG­-ėqģŅč¸6`ŦŒį…†yÄ­Ĩé2WR ÕáŅQŽĀ›šō¨oxāW™ģsīķIL'%ÖōũÕģŧ­úÁ‡$ŌĄĢÕ~­{î×6úBžøŦ#ęđҧŨÁúÛļcŽdŒŒb~%č;æ<}*8čų_Õ' 8ĢŦՈĘĨÍLjvÕķ°]ĒÃŖŸŪ˙Ø/<2J„‹ˇæĶĒëGv|< >°9#ëXĻrJíœú#¯¨'.+ô Á&Ō-ķ 1zÚ¯˜kdÜNÔn͒§b‘›ˇ˛tôÖ2}{oŠŗ*šÆU˛n‹eŽ SdÕáŅÂXŪŌ‰OûƒŗF<)Đ<´ē3DŽęųۍđđ„_ÁMī/ßÔļÄfŨ ;†ˆI힝žü6;Ž”:ģ­!5ģŸuŌqwœâÁYe ¯'Ë´ēÁąeuā­R7Іn+Yx‹ßčž"ųĘŅRĀą’(,ã¤)âõĘÚ ķ7ÔÔ<ŨIŨyÍ[›Ué.įyíĸû…ĮxČŊī§Z͆šĀƒîHģ-Ír#–ÉŽ;Ãŗ@‡×ʇ)ĐRîĖkŗ*˛°´ú„Â{D-0û÷ęđ„Ūũ‹ũÂ#Ļ,†å:ķÉđÔũ°.ž™éļ.záœ^šÍŊŖĄŅΞaAWÂ:ߊŋ syäŲAŽÂá|› á…D,}'8wūø‹Ÿ ˇŅ$UM&Ãá„ÚmÃxWe2Ú*ĩVŧ%ŪeaIW¸Č  Ûæ5-đē ÆTũģĪ%oĢ?ōÛĖĘrN$›GN !9#ö.͛GUhVíá-ķV-ʗí÷Ę*ŧ ˙ˆÂ㠗ú„WO…ڞRĢS€ÉIŌQđ°C^ŲŽŽĒØg6ũ$úpœîž'Ž"QvÔrš§‘sd¤>ŋ÷÷y)7jķēŨņdÔų2¸_­]ŋ-™û´ôhĩJlÛUÚōfNŌ’…đWųR•Ä3o47ŌčáiˇĸĪ˙" IˇUV¯8ãÎōržr†ÂĶËĀÉú}ŗs@Ȁ‹´ˇÖFmd´M\/ŊPČ{ˆXjÎĶĘęŲētŗ–ĸ͐š˛'[Ž—ėĨs˛ÉR SĀxĖ.ŗE#ČĘԃä•qˌ’ŲąŅ`¸8D g˛˛ŽK:˯.|ƒ…ZKūÔ‚'Ëzîq\KÕčâŪxĀĻxŽ õįË4'‚aŧĀúd|ˇU.ÚK§ôšV&vģ!ĩĀč0ųAÉ;Ņ#W˙k;ÉWûXÛ¯I '-¯ŧĖúliJ× ĶTŲˆ]Ŋ ’û,Đõ ƒ Ū‹āĐ*ō˛_›_'īķ?ų;åĸŨ)-˙ ųljĶ^gĪh[ƒâÅ"V™ ß/H0AĖņéˆķôč°-\×ķ~đX¸\ã{ĄÕ$]ÁS|CķDņi 1ŸËއé„rž1ė-C♉tŨÅįÚÆāÆ‹öÂÂQŒDž`āąpÅhtĖoS~ķīšī* ûĄĻJđHŗb­hŒ~$ Kxa!ŠÆzīK>`Öx=­įŪÂW´AŒJ$3‚6ПDí3~ōôxDŦ˜U +9ú–­ÂŖöYąņ=Ąúr ėė°KųÉųú§ëåāŸzEÂ/õŗÁŒu17ŋáĢûrMÆDb<‘$ˇ0 á-´.zp‡[ž.4‘U1u7šB¸‘˜ÂkôBŲĶghn3u?Ę:­9FĘÃĸ5UƒīCø+žöۆ‡<î8Tv†>Ä—“Ņ\:¸V|Ä˙ĻOnTē'¯Āęí˜ë+yL×ß_Y AūÜØŦ?3zųA*đãĘé3ÚKŊP× BĖĸÃŅū“ōũ?ãr›Šw|`8ä6ßĻ6Ę˙MnĀD"Ų6õ>_vîļųQŠkëÔéX]+†įî$”…Œ~.åĒ G¤’t–.ĢĐ3č‰.ˇ{ŧ@χ ¯‡ß2߆ҖXžx ēmHÕķĒu”Íkfn^QŸĸųr!˙\ –āņģ0—éE˛>ëĄŪxnôSč xŧÛĀģŦnųlā‹:Gß „1Mav ėģw‹FáÔbņëīļO†Ņå3¯ĸV›„YEB°ļ€Ë—×jwî$a `O-U>„?ēf]Ž“ˆZË8Q‡'#ę|áR*,‡ŧ.B0EcämhŋWW’›xdíŊˆœ„Ûo^¯­Õ@)ư|ĻĖrÕ~s'ƒYŊđy0ĪXV0PnœõYā|Ô&r`õC—ēiĩîÛ'ĸČüåWŠŋMØëNŌõ>Í<xZāUņĸüĒžņÆē†WŦ‘aÂāĖ]$Öuyy% )ŽjņdYÕ>CΕJŖ60ĄļÛĖØ -ĨËõŒ{ڍ'x.Iôŧ ĮMjF<ĩÛVņCų́ÁĶÅH„áVqæ.Î-$ŋģŒ˙_ŦĀķ%9)—ĪęRՍÉAŽíŨįMiž ÔNŒügø}-úŦžz¤ žä^÷+‹õåŗ‹ŠT^~ kĄų돝dgĻú´Ũå÷ųJHÛĀü&r`UpŅĻčķŲˇ ŲŧRQ …ũ ÍCTZ‡n̊dpžî,[îļPäO¨-¤o…ŸÉŸAˇ-.ÜIfĀ>ķķ¤U*O ë+.ém‡g)m~˄mR9ę˛×`žŧÖeÅÁÂ+Ã(ĄšÕ –€rŧ5—/Ŋņ‰/ā y D)¯ŌĐōۓŠ­˜ uxĸsÄg;Üwc1œŠĘD_f2hly­.ŗĨÂ[Ķūގɉ ę›J—Č1‹čâcRÕŨå”#}žt`ķQÁãāZšå˜Į=ũRT9đâ_āōsä ÂčŌ|ŨfđÕ6å  8håĀ9Ĩx+ķđôņFŒ[ōš ˇS>dķ5TėüĀppŨ ~Ûí ŌmՖg6›#S÷Yŋ͊Ė×§-ø.“.x_$nëz^U/ž4™pÕ,ˆ2'ŲĢīƒkžÄŅ&)ĩŨęž–Ÿ™čĮyõtāŦBôŧ,xŋš]ˆŦ7čyú™ ÛĪ”ūĻž­.Į›gĻĄÛ†Bf¨œyšč+‚ O’.#ūÅŖŦ KāJ–ÂYNÜoJŗĻ*y†81-qéūā+j™æ •É_>î`õ6wŸärėÔŽõCŒŦõTĸ靀wRŨō[mfH†é€h>a.‰˛ãķû\îé)õrfWų™ģž>…ŸI—Nžä–ŊĀ_-ė7IÉį×Eņ}{ŸđTQŧkī@ËžO­ŦÕ ]ũۈņzjO ŨÖøĖģĩ-ãE‡s1âīŅ]nH.52ĸÖP"æŲđYÄüŠ 6´9ڙW寧ņ“ęĨ79néąÄŲKxąĘ/–ˆnl_*Ŋųģ3í‹ŦtO°(F'X&Šĩ›Úb€Ú䉪ũQW„úîÆn[÷ę ģNÂú”Øë†l.‘4>“Čēˆö>ėōP§ŠŅ VvĻ$ŧ™{ <éĪÍ<–ø€',>. ˜[*]˛ĪôiÛ6Ī+€ŊVVwäI+OŊM,lĨRēVŒŨV‡×rÖˇ8ZgCÕy>™ÎžæB ‡Ã°…„[ŸÜŽFGcCqķū”Zž0s‚}Ūõ’oĩ$ČÜbIæ–úhH…„רģą$*[ž‚Ā;OqĄ}}ėÚ-mĢ”y-2ĸĈ°ē:õ_ĸĻ$cPjđŨˆāÜķ€í¸KTvæUxD'™‘(ŧ’ Éé˛äÕcž„eūá@āåq;—Ą-” {ÜčĨ¨3gÖ ŨVÖ[^Ąf>åŸ)ÁgŽ6Ūė0ąÎÜ(âĖ@yûvÄáLŖšzø”´JĮ¨Mīļ8Mā!Ë"g"6#ŧ‡ í  åŅ…bęŲ†<Û0dŒ¨ŨĄËgļ?n<ÛõÍZJÛjßFúČęrŸ ‘õųäĻ9¨n}#­íĀŧÍœsšã1õŠfd¤Á“ĀCˆĀSēí"hĨ& O2áVŲ"úˆÔá=ŽjđpāŲq<“á¸Ox°r’€Đ_53S˛āAļķŲįUßė2ĩKœÚ…nX=›Ed…2“1uøÚãŽé‹Fühč›ĸëĢäįœEÎ > ™˛zA3ĢŪįŪēT‡Wx÷ęđÚBŲzˇ=Xûīĩ>:‘˙xÕf=ˆ…JÁCĶĐmábâ6Dø…Âô6Āû˙ˆĀ{(_>â,U€÷DG`Vú‡GäÎm‡ķåą  2ˆã:ûNđÜ1æJĘ?ėõÎķˉBį÷5¨ŌuxzÔÔ`įŖĖjŦ^q8QĄ}î¸čd­>ĢÍk~é_a™– $đÜnw2ĨÂ[%:ņ÷¸ĨEöšČC4m)ŧ‚Lā=yÜ7<™Öæ$˜ĻoDīûha@dōC'PëĮžfFÉHÃSĩžĐ[:ļĶŧÍzFũ­ãČÅŲq˙ą×hˇ jQ –BÁrõ¨ũ:W¨^:z’[|đ.JÂbéÆö‡ũˇŧ‰0Q撇Īāß9aN‹/‡ÜîÄ z!ō$¤É~ŋųŠáˆŠA!Ôá zũžrĸę#Úi×ėr8ĸcž€M(BTÁiŋ\°ûFŠ^P•ö[Ō<: …y/Ęčĸ)ŊXâL%ˉŋ* p— ÂRtMŦ|WÆũ%´ad ’戌Č2’L°¤ŸxÛ\Ųžõ ˇE"4Ŗ~[ą´nČâXĀ IDATÅ:âŗ!¯ËėÄŲē'ŽŲ­ĀËg/éË^™ÁˆX–ôA$ŊˆÎîG—ˆOėGiŽ/xjŪ(ōĄ Ė>1ßūļ8{;6å$Æ62›“‘W GÚķe€ã]k[—ēA|ô¯KéĀôĄA ‘—ĸ,ë׃‘ä‘ęÛ]åđßNˆā‹QāžØŧpØKĖŗč LÃ?ųĮÖa3"Í‚l ŧđ$ą7îĩ›ŧہ)øvBHŋđŽß&ü܍HöBn—Y3Īú‘­ëyc˙Ĩ0ņkŒ'˙(tčŒ*<Í% —ŌÖŨV×_<^¸ Ņ€¯}atŲ%ÍlĮŧž0F}Ėą}ņk"i‰V~Įāáę?‰9ēâ™ˆŌ W!9áp:ŽüĮpĻ@ˆ˜G‰čXžíÁƒ 93ģ!7Đ_cĖnÍŧ`đuˆZcÎ*ė< Žx¤šeũ —˜ŽQ˙ŠĶ121wâ%ĸAûã2w^ßŌŖĻn_ˆ[ØĮĪ;ë{VÉ'ÔÜ1JîĀ0Úî<0„¸ä' ?FNb3ž†jĐķÆü×}ļŅ:ĢĢmnë’mįŦ,1siˇ}>æŲ¤īŒXÛÛO1d\K•—IˇĩŅLØD_!–ÚwŽ‘(-rž~@}ķ7ŧ/€§ßåņķ R 5ōKg˛GŦ DķõĪŽËix°3Hûģ•ˆĮĸÎ́Āyǘ2ž71Ō;üL{s}Ü´}ŅŅģ‘Š 1DĪ‹8_öҊˇ1üüč7ŦéĪ­čÃĖęuëú.×0ĀÕ]^ÉįÎûßCŋķ/+ N:;ûŲØömĶxą5ņ)˙¤˙Sô¯đķWü‡ÎyČ==ē“Ũv‚ú,ęŽ;• ácˇĀ<;=揪šĖĶįˆ?0D|ßřŅã2‹.Æ÷ƒM‘.l[pæ/¤ K.ø @$Yõßß všŧ׈š_Ô7Ē{M |ŧņmü9Qķ˜%ŧ˜KÛņ—äÕĐwDW$JĖŗ„÷EXM!…ÕɒZQH•ŋ\Ą‰ÃÉĀëįÆöŨvģė‹­ Āķ(E+%Í4Ŧ;¯ŧL,”këā,0> …ãP×)“{~öä"hŨõ§ÆCķÚÆ€CÎ\.eŗ}āyÂđ“n;ˌŊIDņ(éĘ/ī <*B¸XTœk:x')įīW„2~žĢ„B¤ÛÖ8[^M÷‚O„Ų #>e#s:ØL]!ƒ-”Ŧ§ f4ä}ãp E"ŗČáüÉEĄũ=ĘTŦڛŸō}ÓŠoÔš§\ųÔôdųŋ¸‘ĶÅ[Šd&í÷Đ8áÕ/bč/é{Ž)bÕڈ}ģųãĻX4W}ķO‘éß1D¯wfÔd+ŠŽđ8 ¯{ĪЇšÁ]Ŗ†ī”ËYí*ˆÅ Ē3šR“zAĪĩĨŠČxÁÆ^ƒÜȎÃāH,—ūĢQHpž™‘ke†ĻÍĘr<îbŅ—ƒõŧ{4ޞŠ^HK@ËmķŨĀ1Û˙ō/„€ĄÛVÛęy/XBîd ~Ī0ąv ˛Ė׊–v™žAs&ũ˜¨ĻoųΒąMlw‰uQîĨåmę%•§93_+}đô #*ŸûÂtWø#ƒoČmžBiÄž†|itÎæž›Nu¸ÃUęoĮ[(MŨ ŧŠĒŗÉŠąúˆÁ˜‹Ķe 2ü{>AZ*ÚįxŋŌ¯ACŒ¯g6[ÁyĸgVūOE‹/¯@5čJ9(iŗL~é‰đ‡Õƒ—ŋķÍ;tÛ^ám<`(Ud9GzpĘéLoũ>Œļ§i.{QËĐhXûŠčŪ>Ûc_čķđb:;fS21äsx2ŒkŠuĩĒcMįT™gÖIđ:ÂëĩÛv†ˇļ†įSĨ­†ĖZ°ÃCŒōYmņŦ¨'܆–WØ>x,ōŲŽ yâĶą¨ÃËR ‰˜áTA+ؚĮ+yPjwÔåPųE N OîAN…g!ŖĐ@á҉UÂ8Ĩä} B4F"éLīK|}9Oē­ōyv|˛Ífˇž>ųŪPĮ Ą\ão…‹)HĘžÁũKMXä$ėjJ$¯ĘāƒvšĄjК°lŋW¯™Õ <*p‚…dĶᚏ“øŲŋŋŖœ „'æâĒzW3¸éÕ˙ma×)ã2›ŖQHU6v„aîÉ—v‹3āËđĒöŌY™hMų’IBՃ„Ûē lžšÖWÖËÉøĶԏĀĖđÂß÷}g‡^=oYŨPÛĨõn*ĩĄ#<ĶĒĖ_/\âgf–”›/ ūą$˜VŠ…ąēú¸$ŖĢáúõ>āA¤Ô¸ č‹ëåį9ž›ƒe ņSÆUFšD9<Ķz‚]›"âŗÚ`V%ē2>.„ؘ;īĢĨ*'ķö™%˙]š!ˇ”¨…ą¸ē* W UÛBĒßÎ-¯X$=žŊķ¸ “zJ*¤ė¸Œt¯œō} ˙BíÅpCJ)UŌģˆsd8€ŧ(‹‹ŪáJUaĘ­Ė\W\ĄîšáÍĒ'û‚ÆÅČo@}š’IZčqB^ÉüIčĮKģ­:ú˟JéÅ]ĸÖ2eŞÃ|A+üGÃ.VåŖÜ’]…' Ģŧ]7Cá­x‹}Ā++´J˜lĨVY“nBūRĩ3Ɖž‡įԉdŲPGiGCÎÚJ <ŗûF4ęĶĖ3;DK<ŦÁ#Ô$Ū.]ĸđž<‘„ëßŧ ā˙—ÉåŋČ]—Į`R;uŸũæĮ‰u\Sá}áūŨÖãw ž{Ģ~{ČŦY˛Pxę:8ĀuxPĄšĀ{ŗ¯–—\Īįž•“™ėO –ÅŖč…˜9ŗųÛâ7į’ë¤Û*˜2Ž3úa)mc!gšÅ\Į¯5ÂãǍOFÚBFGxķː×W̟˜ Cį~pû…†æ öĶé`đ-\üēzŽúĒžœ×ļ2¯_Ąi¯TxVē­ōŅû8žtąxÄČ&ZI,–ņ˙3ˇx“ũ€ņΞŗxŖūËO~?P/'P‡W÷w›–QíSá‘ŅV‡÷˜>ķŪÔoŠxr2ļüY.pÖ,"DW Ôé€Đ!ˇí'×sÂĸÁ+ĮĻڜ`wiĩžžŊīčC€§”ĮĀû‡‡ÅGîg h'”åp‚ĪŅON(ĨYÍĸ‚øû)ēgÅZĪ´‘×áī2Š6ĸÃĢō@Ī{b¯Ēđ^\¤ĒŠoqđ.„Bt :2°y¯L;XãvŨˆ:}Ŗ~+3äžqX Γ ÕĪt/øŨ´/:H<ËŖ™Ē¤Ā;¸(’ đŽÖ–U…k—ŠpĢŨ6˰īĐBžČabŽĖÆcSŅąHvš#âŅņMe×ēŲz|aˇQĩŠOļJā]]ēúŒN¨đV ãŲbI°÷ ÃꔋÖŅ6“æ—ņ ‡lnˇyZ['x^mOĄõđnkī€(đnjČ!Ŋoí釞ˆŅjÁbZ¤…'‹€ĮÛ[“umÁf_KÚ|Đ$^´_ícVĨ !?>?rĪN;Ôp9 ؆\fQŒ˛#SMuTš]/ôų¨=8^4ģ˜U…*GÛ§Ä]´Sx’ŊpÔʈgíũĖįÉâŖ¯č@VŸ•q›_r°ZĮՕH}ŧ´§í¯'ä_‡šāŅģZßSĨmäŪV[žö•,ōŅĀ71‚œ>cØ×~9¯ė:Ģ_UEŋ–]4Î::u¯­l¤@PŽeZlLŠ ío™ÂßTvÕė2îĻ´-qģõ m@ĩOnŲ7<Ųß´īC6äž6GždŌֆõƒvgũbĢ¡ŪåŗÖˇ¯*ž`šâpŖ‹¯ž1Ĩmėæxa;|ĐŪæuhzƒ§~cûX/4ljI=K3Žéđvqŧ@Ŧ¯Ãmā­ˇž5x›ĩ70Ô=õ‹ĘžŅļԃ¤1(i¯[ŲzËëP@MUŠĨ´cîčG‹;BŖKv ŪæO-mŨĸ>JäĩB7v€F—Âīŧ͗Ŧˇ8@ëđž#ĸbī9ŲKđZĻį\Á yOĀkęļgęG˛ËŲĀ…ŗ=ŪbĄŠ#T EO÷Øhä­(Ā_Ž$ČēģTŊJ%îPhpŨö­†d*:ŧįV&<íÚķėfOžx|čJú`/G *ŧˀQ†?Ճö4'1ØÎHˆ+ØĶĻ+XÄ/B’íRģxĒÁuۆúWzî-Q&ŊMŌ(ô&ä~&­ļĄ“ą(¤ė˛ķĘõŲ哚?úYŽÛW <Ņ’612ēd†)rÉTčÃ3tsxf%kŗÚm+‚väã„ŊĀמ…ņŪIÜpĐÄĩÔí¯eēû ^•nųƒ wũĄD”dIâšÅžW=yŨÃTjWw`đ‚Ēčĩd ͇ŊsĶÛŖæe‚t†ÚĶR–—ŗÃŪšÛfunū T^ģ$Øáhč–W¯qK‹dsõ™$ŧUé2wˌ‡Ĩí}æž–7ĀĶ]|jw’ĸķjįƒ6Ÿû`"ėqĮ!įP%đzã76úŊ`Ÿ×á]‡ņ€Âû~ņ÷øYI°SxGk'-JÛ ĪÄŌ–§ŒYŊPWËöęđĀ0ĩˆoüv,ĸÂá×Ģ_: ?dú´Ŗö'čđf Ûŧ™*ŋøāUJX‡íŪ’âŪŊmđ0‘FūŒî^Kéđr“į÷}'.‚Ķ1ĸĘŦ×YK•E,„rkŠd9:Ōéx…F‡IŖ{ŒWņM€WRáÍl3ŧÃSԚU+.ëŪJ%cÎSãƒÃ´™°~Ė Æí†ž•ɉZ<ސĶ×fG•†ŊDáĨxȄĀ[ÄU“īúNĀ Úh.$ÅcA9ƒtį™+-i‹ļCDú×ĩĐ‚–hCžTËiōĘüö)_ËîB<ģO:đŽâÂāāmÅUëđę…ēj䚾‡˜ŲęV 3Ę˛Æ˛ÁĀ1oÜ-jŸ¨4Ôg0Ž“aá1ŒļxĪ,î`ËCÎ<ėHG 9¯÷,Œqlęžo›Đl* |†œ˙Č ’ų×ų—‘ũįčīCÅ ŪŋxŠĒđ¨ĒB,4n'áY鄞2WŸĖɐr‰Û isqdXæ˙9‚_@B-Ņ…Zîī:Lhđ–žĖ}Dā=Tˇõû7+p˜îH'fëKļa2€”Ķ;gsņ1đ}Ôčb˙4ē’ {2ŖÂã¯ÖĻŽ]“(ÆÍĻķ39\RYÜ~0[ˇaɜío‚eVĸWz]&đhĐ ”Â#JōuEĪëGIŪ|°R7ŠdūęšĢËyüĢĐæe+vTūŠ`ŧŗũ—`N@ēđ,˛ũŅUZ‘„ŖÜÕŌ0Ī(ŧÅA˜gæÎ^zo(ĢŪ įÕ'ŋßÂÉ=į^6Ž/L‹)åÅËPÜAB ´`Ķõ{é-…Ō›Gíčâ?¸W=É[ŪÃĮ}ÁsovE¯iY¸Œe |”߃ŪÜîd,–Ņ ´ßÃ0Z5]…‚Ķ\áU+ƒN ŊhA'\b $üņb?ŗ*˛oĶKĸđhˇÕ uaņ#ŧWŠ 7xSų§$”.ŸäŋˆŋRĒڑ€Ēžd)ô¯&nz1‡a€rĶWq \üÍôņĄÂw¸ÕļŌ~į­ÂƒôĖO,Ņ–14õ%Ûjt%_Ų›-ŨIŸdȒčŨđrx I’RÆB]M´C8ē~ĮāÕææįīŋrĐĩOü× eĒ€˜^/ė.Ą D‡B_t›Üĸxa­čyIŊō:(‹ņdL˙<ĨÖ˙]´‘-đē–Ū၀”Č"ßHOˆËYßd=jJD/WÂĄŨfÔQxŧļÛ /WÂĮÜJ –?ÁkiôÎ[ÚG’•ņŪ)';ZŪ`āĩËO¸ąČOrĪ|đŨã8<7›0„(ŗyōén&ķŲXŒđļPãl[ā|!@Ą¸r4ëĢÄ* ũų|e“uŨ•×Ģö*6°}ī D{ÖŸŅ?ŧ5Å}[N„öōXû}Ūp —ŖânCę$ęĪ|ĒžL4Ւ)}–Š2ŅJGė’­j‘-yŽ‚-¸$H|Šądī ā5ÄügŊæĩWUQ¤Å _ÛmFE…Į\-\ēt´ēšö1Ōûī?zä„ÃRbJĻ*áĪ´/p"ŋ… Ūē-•$1;Ŧúú…¤ö‹Ŋ;ÚĒđ,ĢŌ%ųM~ą$9W*síāÉW-3VWKŌĢܕ’T@ÜĖu;ˇŊđ~úVČeNi¯Jˆ™(Ļ֓ŅŨfÔQTxöUé"Ļđžqn•Ā;iŊ|Ôžøčņĸô¸z”„œũú5îúöÂ+ĮHÃ×_Íĸũå+•kˇužیtņÍU¯zŌ*ŧh_\zļ(­ŧÕęEŪnŸæˇR@ŠxÕą>^ø”,5åŨFÔYåB9¯<~uā9đ‹ÜÃÅgKŌÉŪÃęEá:7ÍĪ´ģåÁÁƒĘÔí…RŸãŊę.€Œđ.™(+ƒĖf-ž˛į˛Ã ŧ‚ĨˆÔŦX’pá˙gīŨb$9ÎCÍČÉŅäđ¨Õ1Ļ Ÿ–ŨÛŅ„‡ë`îļ!¯ˇ…Ķ[1”€5G„!/÷Å īÄ›lAۂJ•Ų*‚yÕ` 𠁭‡ŅŖaA‘įAŌd)SŪĩ 6ø sĀņr2Q†z bĸÜ^N´&&c˙?"ëžÕ]Ũ]ŲĶ$û'ØS—ŧD~—?"ū ņ<$ oļ÷D5ŖjÉEx͏ÉĪ^Šŗ‹e2“Œ¯]xÂųŽŲ@ÛŲĶbž.%™°Ä‹æˆt¤“‘+Ņĸs‚đœˆŗãųķäŌ bÚíQǟ?^nPųL~3I˜dɜŖ\éh'ÉIÖŧīΘ͐|ņęg–—_}õæãŸæęg.ŸsŸP’ē5 IDATûIŧŽtôØfîvŅqåĀ+uų֛7ßšrõęcŸxõOHDŽˆn_xm=‚æäā•ë)úüËū9˙ø•O|˙­åŋū÷{æ.“ƒމ?šüņ8ŧ­ĸãJ÷/+3'6 _øƒ/ũđoūŸ7Ÿ{áŲ—¯?yëÍ×o>wåĘáŗúų“ˏąj~`¤xåÚ Üzëõw0ŸĶ“?xķ­wŪ}ū“×?ąüũ#\Ɵ\ūö˜ŨYȋŽ+^4c\Ãōė—¯?õĶ[¯ŊķÎßŊđĘŪžë\ŋžüæ ë"č⏛.ūņ'—_ŦŒ˛ .Ūûß/“ų?ÍūŸíˇ˙ô¯ūķß}ũåë?ü)Tŋw^¸úôg̰â°"Įf˛QáqeĀ+ŲūwŪúāŨ^xųúSĐluį…g¯?õÔ­7oLtƒI—ņķHÅ1÷GāŽČ‡•,ZW^øōõë?x ēģ;wžqũũŸüûūãā–‘ŗLČĢ7 yå.ã˙Aˀ—”‰ŽŋõÁ ĐüūũÛúŪÃÛođÎģ÷ėÕëO^žœûûß{æąĮȲˇ˙ė˙Aˀ÷÷åÂķīëZŧŋũÁ¯îÜ}åŠ7ßēņÎÍĪáâcËį—‹jF˙øZŧrŲaŗ}øĶˇ?¸yįÎ×_šūđ6ę+w~ķâ˙4Ŧrß.=÷ĖĶÎōååāņsWŽbķŊTdíĪāA‡ß~ā=ÍÖÄU×ķûáÂ˙Ë×pyų;˜§ãęÕ'–/˙æÍĪc w›ĮūJŅufņ ÃogīāüßĮįŽöąŨæō0ūđĮožūÎ;_ÄD¨—oŊųōyz¨Ą>cÔ¨ˆƒúã%OūŪ¨ŊxK†§õ+ī˙oõMû¯ÜĶoŋõÎ{wžŽĩ˙ūüŸžwĶāųËsWL†ąūęĶ˗/߸yîʝ‹Ã=_AÉÃŋęÚ–ōšÍ´(~Ū{˙‡?ũÎëĐBõ{âÉ[˜PņųĢ#đ—ŽØš7§¤¨ä ˙ØŲ~äānī˙t(üũûßúāWīŪAÅų‡?xķæÍŋ|öŲ—˙čōŸüčwŋų…+ŨŠZõ_÷ǟ_Pr† áMnđJNûcl#Üī~öۃ¯ųúû?xû-‚_|yŽÚųų/į/“ß}į_Ŋø7Î]žAžųürõ3ËdųŌ7ģ×)(š…7°×sōđŪ+Ū'Ū~ûƒ÷ ŲŪŊī–žũ›ßžsįåWŪ˙͡nž÷îŗW?ķÔ­[oŨ|ū‹WûÔō-BnFƒ×)(š…ˇYôP…ŖČ‡¯Ųū//|ũŪûoU…÷î<øōËOũđ'oŊõĢw_Ā%ƒ?!ø÷žđōŧÎŋvéĸQ¯t¯oü‚’3ü[¸ŋ}RđJvđūÄíۅˇ}øđ6ô|w^@ÍųūÛ˙˛ũŪ ZßšģûōSOŪzũņĮ˙KŦˆ—aæ{éÜE3ņ-¸„…ˇ\tõ‚wŋäxđčOŠõ]r ā+˜¸Ŋ 3>ŪēųîŗĪ>öĻ4~ũį.:×ē+W'îošŨŗYÔŧ’ķPŸƒYŲûúíÂ[ßĶ8qƒņŲë×øö[8Ëŋuķw˙ķ3ĪĖ˙™š€…wŎ§D:›§šīák/[/ēōIÁ+YIūÄí}îéž—Zō1ēÆīŨūį˙ãÎģ_ŧúÔõå[¯ßŧīÅååķ]\˛Č_0uá%Ö}‘(Ļ]d™1ãÛÖĶDčžŧŦl%yĒRāęå7^É)~õ?ÜúxTčOŨZ6׹ĮŠ5–&äįq(M&ĩáGŅ*UŽœģHĨ‡fŖÉ #‰|øjžû@ûßxøöíũ q]Ckp0|Øwžxõ•—Ÿ zkËö8åĶXüōÜzŪo›áôpōĘŊ÷ŠSâwqáåÉī'8÷Ü9ûx2ķũM-ŧ=ÅŅ­Ŗ8Ā‹ĶXÂA?ŠŖäéŲt}^WpŨīí>xīŨ;Ī~ų\r~ũį¯^é_j^KfTú¯ą´iFÛ=ŤĪâ4ãŪ Ā͂ÃÛËM+GjļšÜ•īúßūŲŋzūû Ākh„÷kú°môŧm]„ŧĀ+"SFÍ[. ŠŅn><¨ûËŨŋĘķgÃH‹đߥ{0ĀŪÅÁ9ŧÛoáĨ0ÚŪ-¸Ę‡m†á\…fûvϧÕķŠäîWŽ_˙Ą}-Ē4€>Oąm¯“Jxā%Œø0đŠ9Ŧ|@ŸĘēđhrãņc—ņömPXîØ×rÅ ˆĸeõļĖĶ™§7žČ|€×Ü €'y¸UpĄāŊī,—Eåā¨cSHo÷HēõˆŦģšđȓÄsĩt! ‘ U7ķˇ0/æW)Ĩæ•(‘O8wge”p %\{ācüŖ˜¨úZ2šYŧúĖ“ËįŅāĢųÄÁ%8œ4ō^.reÍļÜXĄ0ÚĸQŲė„e~īõ#‡WęJōųāæŨúŪC\$™‘0 Ŗ“ËáTĩāíũ7d#ôcĘՋOÍ ˆCBe˙õÖĄÎ,cĀ(ˇŲ]ö §đCYƀQ*;ōú]˜^ŒYųC÷¨g–¯Ô•äĢWŸ:Â*rIRŌh{ĨŦéŲyraEœ‘”Ņl/.—DÎČLĻgŗ‘ā•Úâ“Wf>Ú]ʀ@ŗ}Ŧ$xŋŧ~Ŧ娙Ęŧ­\ōŸ>ĩ\9OÎ^U9ē|ØĻgîĖá%|Â/V—ī˙-‘9?ķf;o07ĻŨ,‘ĖüZÆhk6JJm{ņęŒ _qü'_jĖi'Ō~2 ŧYLĪŽ\)ƌ›-ˇđTū†õŋIí?öQtn đʝžAŗĨdÃđ›mĮūÃĖߓ‚‡A‚˛Ø]qŽg.0*#đŋz4đn>~îJYđH0ÛÆiƒ÷Oå&NšmŸ§rxfMo8õ#÷AP&ģ‹'ī‘ ``ąŌjßĢ˙ūāBˇ‹đfwĖrėĘ#÷ōc˗ËBōßÍ´°‰ŖV˜Î3°zŊĻô­ËmĒ[3Įŧr3°<6[%ā-͌°Č¤˛! ß 3Ö /Ŧz‘€ē,VŠN.IU)M.ŋ>Ûé™äŠRUaÂ×hÜ-x@ŽQĩ†īR}°ú‹ūD—ŠN.c´}†\>”ĪņôLųЅƧĻYâč‘lPOÖ8ŧK3Žáë*¯Fâ*Ū[7/‰Čš¯$<JŪ…—q0Ĩv^(̜Q´ĒÆÜb•‡Žķßų×33ōAAx-5OûÚ4ƒW’/q™MgĢ2 ų'14(Ū'¯ÎXĪ3đüAx<fˆÅš'”ŋčÃ[zRŖí›7Ī•§įŸyŗÅ4˜˛ßįuž­y_逡Ä>ĶŗķäwgZX¨y/čÃCÚÄ8ŪĻZz]ōEvrđäÅå#l?P>9ûŅÖoe^1ŧČK5č)‚œŧ7oŪüüLĸˇÉųā_Ī´°^ĀČᙯR텏Ÿ$ŧĢ/?Q:ôī`3-ŦĒ7ņČĘ\ƒ‚7dDŠ—T‰MWeōæĮË[…?OūĶėKŒÂņO7 †1|7ÕŽt‰Ot2jĨŒãb‰ķŗķŲØĨMō4RlôķaSUž8ëf{)Ū÷ĪCģ}æb9žŪ—oĖv÷ėX2{xžšZ–Y(ÁéŲlįļĮ’2j^yčĐ&ųôZ†ÎB‚n)C.ĪxĶûX2{xŋų"yŦ<5ų÷ŨtÍ{Xn>jį# ¯ÜŒ—_íôėXRŧįž!åĢ<÷ė'g_âŖJ ÍöÍKÁšĪ—ŧzdÅŲK zŪķ%Åf°rų#=Új lQÚhûųgŸ}‰*eŒļ¯įÎ]) Ū“ˇŠcs_ŒÔá¤=īų§Ë aĒJYÍvÔĘæ´ŲWfO•jÜøxiÍv 4‘GOÁĨ 4 'K›žõ ’­ūXšÖqįŋŋųâĶWŌļĪ^(m†Ņ‡g"ĶėôāMT3{xoũč¨i類ßz`ëqīøĨíËŠ€§Ë.†GۙúŽž xŋųüÕŋųÄōå xĪ?ûĨãąPúđL(ķVŪäœŋe4Û7oÜ,N¯8yōG˙Ãņ‹X(§ۃ˙ûé+s%ĄCxe)É}x&r^؃Wå×H }ž~đōŸ?ųę­āæš+Wfž ųÜ _žE{’\ķ%ÕN6Gˇs 73†ģ^Ƹ=d˛ođôũ SĮ\˙á­¯žˇĐ{î™ŦS=ųælk^DX+˛qŅU<Šy€đ•D3ŗĸ“O ŧž˜ûííėŊģž~īŪOáÕŨYßáIæŸ=EEk§ÆĒ!}4p,Ķ ī$ÄĀK ŧ5Žđ:đ4 eŅÉgđęžx1ŖTVĢô‚]xiO <ŋāä3xuBrxvH ā™5žÁ+/€—‘><ë to’<Ēž€fk>¨Zx €]ôõŧÉÂc=xŨŖ‘ņÔzÁ›$8ÚZxĘÂë&iŧÁÛ9ŧgđŠáeVĪĢ2tdi+›8d^ŅÉ{xœÖ(Æf†đb9ī6žúކ HŅÉ{xK´šgæļ˛BqÁŊ™Ã —x[ÕÚŧB‘„%ŽZõē`.ŽĒ$‰÷M˙žļƚĸæÃĢp­ÆŨ´čä=ŧ+žđ2ĸ/z |\đ"ūV<˛ačÕUŸÔ‹NūØÃĶøĐ-=Īrk•nƚDx¤fbŽFŲ|ĪĘ>[éģēm؎Ë<+Ø!}ĪĘŧ#ČŧcHnԘ}øáÍ"Mį!Ål7bÖÂũ;UđTĖjŲŨOˇ ŽÜ-š ĖüsŲ’2o@ēĐNaŸĮtžĒÛ>¯đ"6ÍLā%ō‰ėŧ˙¨áí#žkáy9ŧď…ģ-R7#xáėãC2 éO?”đ6õÃĻ&´ 'NfáEøbķ ۘ Ā‹ôĀëÖŧˆÉ•mļ⠘qĨÃŗž?ėC Īëöyßĸ:–¨0HŒxęhRvŸ§-ēĐÍÚ¸—rKĻE¤Ķ&†8Œo#ÆöŨ“=ŧÄD{ÍxD4Kjī%ŲjŲŖ­Ž[IÅЁ—šâ’ŲŪˆŸMÖaPû}cK0.§ŪnĸŊ´ ĪĶ­ļ°đâÚ}• /l ŸĻÂÖŧXšF¯LyBüMYYc.¨KVxōŖ‡'øŽđŊÄÂË@'ÛŌƒĮĒÖJ‡GSéŗXæđ2jLâE%Š7ÜŋU–LÜäqydđR„×Ā^†í ÃŖm;ˇEŠ'ĮŌīÂ3“ ¨Œ œV>kĢĩ%ĢđäG¯‰Kvž…'}Ķlc„×ĘXPÜđK‡ĮRÅ1(wuáĨ™ˇÕ–ÕSOŌāÕžĸ-É <˜Ûf,TŧmbéđDđ*ū<đĞbˇÛ˛Váw O~DđĐPtPņtķ „xąf é§4‰n_ĨDdÄÉ*>ŒŽ#đB ĪÕв ģē^ä4uFæ=-I¸‚šõ„ŧĻĻTh{ĩĻBĒ /wIĘĀ[ÔÅđd'#>Â3áÎĮåÁ{¸ĸÅx>qÄAŗĖ ĀH"pÔ?-^ĖK‡Į4Ā ĩ…ũ¯üĒ&4=!ũË#‚W(Ėöéīhŗ0ĀS€ŪOtųđô§&Á{ Ļ‹/ˇh•Ķ/—ģæī=´]Ú<Čøë˜bā=VļWøP™ą_Mcčķhá[V°Rī ”Â/T×cŖ-Âķ”Ņ:Մęîē8ëÁ‹ķ^FĀûžúášĨ”\$čÜv^Séax0-3đPIæßķˇ sHœ~xEÎNیa^˜ˆ,_`fMTXā1éoŊ¯ņFĄĒ~šāŪŊd+Š€%ĀŽ´žĘëžŅéádƒjĻofį̌MáÄōhávoĨÛįIãēōFā>šæĄHŅ*á§ŪVÁg3 08ĩ\„ŋ­ųÃHSoǍx=ûTÁģ[đYÉ6É$wräûuĒāÉlCGM+ŪAƒÕЇ÷hÄÂ[ô÷?ę ^ĄxŲâGÁ+ŗŊ’}ú€ŖÎāJĀ5nDpԔđ$é'¸č<[BÂĶ%ہ :SÂûĮSüŸoˇ´J™ ŧqnĖ6 íi•)áíŊüäåã„{˙ŖbΎš~Āđ¯?õä­īÜŧy¤¯ģ'ž+tÖrüŅöƒ÷Ū}÷ŲĢ=qųVpė€ú˙íŌ÷gō\'"ŗWUî=|ęˇ^ŋųÜįŸ9.J’į<|éĨk‚ũ”Éģ[ø÷0ÛÄ'ĄįŨņ¯_ō֛7o’įqnũ¯Į-[@ŧūKju;fŪŽĻĩ)GŖ$ŋwįÎ+/?uēÎĮ?eöy˜—ƒsŋ˜ōI$īi‘áXīĻ`9ĩđÆ%ûāŨ;/ŧ|ũÉˡnĀPôLi‰­¯8OŋrßŋŨģ¯ä¸ėn–O¤Ûq^?ĐūDįĪÅĖäÁŗ×Ą…˙Ü•ĢÍ4ZŽ;I—=sxøō#¯X@Åyëõ_Ŋûüŗ/æōåīÜŧDŽĐô{đp ‡‡/ãîM>Ēđö“ūûüÖëīÜšzõePŸnÜxz2q~žŲe˛/{ëíGxĘõëī˙ôĮož•g›%ŧƒOøˆ‰íčŒÕYÍ;ŦXx6ržyyozũDp72>G~p´ŦŌŦ˜â­ƒrƒÁĢ‹J^]?rL’ĮÄSœ0Œüĸæ<=aMčcPÅcÛl+žŦō蚁×ŦĢĘ"›ƒ—ōĸĢ.Ÿüą0´Ī؄Ɍ5eÁ›F[UjK âXVũ“?öđÖÜŦc /L՚o ĸŊTN<>öÍÖoöāU€‹•q43đžgx1ĄRÁK°Ųš—5 Í6‡×xÜÂŖÎ„\ˇgđDžđŠŦeáéĻZsĨoáĨgđ āUģ5Ī÷tĀB O9ĒB6zđĻH÷ą†'üPÍwá%Oƒžˇzo_†F¯ž*-œÁÛWrxh đDօGSõ uņŦĪÛWō#‡÷DKUUŸÁÛ_ŒĒRĪá՟Pš’œx߲đōäqãr¯™1W~U÷áa5C}¯ J2NĪhÚ9›aJ˛čfsDūžôƒeÉ6+_F7åFž˜ā ōq‡‡;ŨäĘ.â/Z?įūģ§žš@VVŲŌCŽ p,<ųã/û”Ö›-ãJ€’į}Ī5đ‚õ+ G[ é’5R|ōĮŪ°düîí-ķĒš÷đa¤#đ‚Út1üRËöQ“3xĮ3xĮ3xĮ3xĮ3xĮ3xĮ3xĮ3xĮ3xĮ3xĮx¨R9ĢyV$?ÂIgđl˜(ãuaėŖr ōÄNûy,ŸÁŗūRfĄŨ Î%ČIžÁ›,{9<ŗÅ3¸I&ēob=QÎāŲf; ž˛đTáÉgđŦœÁ;‚tCmĀÃOÎāí'Á“^q,ĩ;ŧnʐ3xGnĸŗIđ„õj9ƒW$„n+Ēh6ĪA)ųŲĶķ@t9ŧÄÂÅ'Ŋû›ŖÂžÄímRY ŅĩĒ›,xn˛’UœČׁ×ĒÃôÃä1?yčŨĮ^ĒŊ´ļÅ:×YĩBŧčĘęW’UĪHļfáũGG,đŠN>ƒÆiÜI%×*ĢxuyņĨŦąV=ʸ'°ŲFD3š†•:ƒ×h5C‘ÂÜVé å‹˜ūeģ‘d<ė`gׄŪ/<ëķŠj^‡"ÎáĨrí ˜øgŗØ„ģ/FCå3xE‚đÚ ˙ŒAķUĩBˇ^|oAxšZx^fá­Uč M•wŒž'kgÍļXՄx¤đüˆTÖ•.ŧĀķĩ7 ŧ’c‰ŸBŖ /#•ŪbhāĨ-[ķ|q¯P <Ēž–^]gŸnYxÛyÍۜĒŲ~üāĩī7ŧ.<™ÃĶũŧÆ:ŠwēđčŧBiī4BŨ0đö´kí<ĐüÄĀ{`ŒNáÉwx)ĀÛ “]xž›dxģĄŦŧÂõgđu€‡Ķ3Šß@xÍ˝'č{Æq/×ĀķĪāJēí5Ûvn+}SķŌ XiÚ´đÄ}„į‰3x"æœÄK\qÂxąF#ዠŨęč0Pąđ*žØ):ųãO.:‚ OžĮˉë.!T:zģŖ#˛ė! 1O’9rELą$õņƒg$ãzÉץˇ ū‚ežŪ~ “ O.‘hŪiĘ)–¤>Ļđ&Hoŋą1!āĖQáå}@גcķåúPHņfí€^nÁŅ…Œ~Ÿ•›ĸņ$$;0wĶ1áu˙MFŋ—^gx‘ÆlŪöō§AŒķžrũÖ Ä¯të5á5ė0ÚtáfŊ}JxâĖųLčŅlžFÛø֜d^ˇŸ ‡“†â•[ŨOļĨy҇‡<}\™¤–~ok æ ̟ ™žë‰D7[ؘŖå8ēÆA˙đâMc…/tâ7ÍHÛíāÃ!ƒ­ax kĻoLŠsØžĻöhŦŨ“'ÁSÚÎI×Ō)áe4NĨī¤ĒÆ/zī Cx?'&OŊ0Æ0‚Ęš´čŌęáđh… Â.ŧ-֚Rįđx@KomŲģŲĀæÄB0=đĻ^†ŌXŒM{f-‡€§üē5žéaŌX.Qd-ûž˜§—„‚ <éh’\ã OMėu†uÍ͌›ĢŨļ’ÆĀ-Š;cÃ+2ņąHŧ÷vŧįŦĶĘ´đX đB)3V˙ļ…Į-<éĶ–1 Sˇw…dđN(âx?§&¯^ä錰EĪŪ02553o–cđxūz`ßę@x-:¤˜oy ũƒé.;áĸąßûtŋœc‡„ˇŽYøß6đL…kĒ æ_ĮĀsvÚ&*n*UÅUŧ&áƒ8Nŋäfņ›Đ9Ō‘  Ëu?nĨ0Dč~ō"¨¨Õ.ƒÃĀk Á㇄×ífŌ!o6Ŧä0$ IDATđveĪ3(Ä`‘ āÁĶ7o(U÷<žįÃÎüYĀãIFŪ5BCöģ}xkĻŲ„—h oįļ/8Äæđ2jßfTŗF;ã­8n‹%žŧ˜âc4š,cŲ›ę߲ē”’§ũÎ Ū¤_ŋĪÃf;Cx@Ąjāą†=o.‘ŗ€įFĖŋ /ëÃŖÃđËX#Fx­XÔxڐmmÕ;ņ3ˇ•:ÅtÉę@!‹T öāeG…—ËLáÁ€đPÁHč`Ÿˇ†‹s įũ6Tã ā-­ĀZLˇđēĄŠwo 3ŋExШ_ŅÍNw…oŒŖĪĪám§=xĖĀã^háA^ōEĘŠbK‡‰wŗ§b=ƒ^ËĖ<@ģÍa*Y]ãŦ@ÃđĻ­¤7Õ>_å P÷honkŒˇ`Žũģ‹_ŗŊvî1Ŋ”Ë“û¸Nę üRÜIī ÃKp°áéM“=e3đ`ÔÂāzģø%Ô5`aK¯úaķĀŨ2ĖáAci0(Ģx;qæįđX;)Ņ}Xx‚\ŪvSÉ$ũG)Ĩ“‘Í€‘ÄĢĶ`>hĮ¸ĖÖ\ĸ (ŋZ2ௗ>Ũų%kНūŅ‹͔ Í&;8â5‘Ë.4ĀNē͖zeĘá)2îÅã ęÃKūĸOL„ˇáCˌ۸ĘJüÁđļÅîĨBYx|U• &ī‚ÃĪۈliėÔę›ßLŧ„˜JBxĒwĢnPÁORYŦüVg‹5ÂFŖķ͟zŅdŋ‹ļ{đv^û 6ß+8ƒ€ĮŧäE ‘-Á# EAxĸ¯cü-Üx8Y´đ(öÂ[ŽNEũ(îTŸ8ŧ"QüÁmx† 7āg_„Q8hđLĐä``ĀT7/m!ŧē܆ŪģŨ^bsũ —oR5/ÆŽLĪéx¨WؚG ąæø%ô{1\Š8ņ\%€GĄLpŨΤ oRZ‚ŠgĮ‚7.1ް‘Ÿø z¯—ĸN*ĄnBĢÆUS€‡â¤ÂQxí!xqx¨×æđ<=_H\…oÂËæMŸ×…P Æ¸zdāįxđėõÆG•ģ) Â Ū ŗkfáqå'4jŪ6úL ¨*G[\/Čáũ¤¯˛}ž'ŋdš-Â3<ąÍVxš_ž…÷O</˛ bΞąÉUû-IOĖ,|dŲ\Aq@˙nõŒ6Œ€1Ē*Õ\IFx<‡gôŧĩ"x´×l=´l‚‡Ķō^ŗ}ÍWžôZZĐŧŲęãÁŗß–ĪĖÂGÜlÆ6šŒGį¨Õãđš:ŸaP€—Ā ÕĘáe8`(<Čˆ?ŌŽ{wáĨē“ ÔŧČ÷CΝˇ~ #†üÆŦā•(ŪČ|Ė0SҍēķĖÄķD ęĪ‹`TÆķEžĐfzļĒJŦ°æ)\qĀ.ĀĀëā’ čy|§đ˛-ŧļŽ4oxŧŨú%ęy_kŸ~xf/aŪۘ߈pI…ø:špžDŒ?#Ņ‚KČ% <šQxį̘'”ëļČ@y¤Mŗ!…k]~ŠxI†ƒ÷ ŧ€ˇfámįđœnxfédxmxÜoēq:7ą4đ‚Č VW<âÃąŠāh\ķČqæDkNōĸdfQyï“*Đ@æÜ˛ÆļĄÆŠ*(÷Î~qÔŲIeÍ(Éŋä§ģ>x­Â#ģŌ͝*í˙­1Îw%´äHx¤fCĩ3Há&ƒî:ZYš@ŽÁ@đ€x$aįŅŽtÄ5ׅ 'hI4x´Õ”‹0)߉ŋĮ Ų~*&=Ļ’\ļ r˜ÖĄlĸļ'|fōaŧötōuā*`ōaáAŨ­ŠēŌ#(%)ŲpĘ:%U˜WēhĻÕŌ $̎ĸÁ€˜}9%đ äPe)‚×—ž…ę`˛U; Q˜ĪĸiWēŠ`ūŗĢ×ņÄ[fÉÚ Ú@ÖajIVŽã>%HŽĻdĪ8Ø\÷dĨĩĩī×}Ĩ'2;Z ôŗ{†.>Ņ,zJx 7ķ"í}„gUĨÍ9'1ÛīÛl­÷˛5=ŧ)dÚfëĶ­m•L"ĩÜŽn^_ĪŽÖ^%ËĪ÷ŊŽĪærŧŨũ›˙¨L Īn&#<32vፎˆũÂc'ՉGhëåŗŊ—qņ°ŠsxiYđ˜6đĖú‡Î›íŧĖpŖ2vĩÃ+°—īĨŗhúûíCÕŽ$rįuámęļG†geŪĀô´Ū€}q?Ϛō†wöKčGûۜ;ĪēwM´b™ ‡ƒ×8ŪĀ›qxˇāÅũíØ‘ %o† ‡Ķ š~ ŸMuÎĐģ™ÃĘą5pųpŪđ]Ãg+‡0čūđ†Nņ%ĐÃN-aŋr…#9á)sā›,SÃCMQŪāÛÆŨūÃžĻī4ÛŖČÔđDíÛ}ŒP ŗė9ãÖäę0Ë ēŒ ų‰ođĀa}?&§Æhj%9ČŧH!ŧŒ ‚‰tŅPú+ ē”˙mpŦz—ƒ7ôv a ^O_3 ø: å­rO–iáAá oÂÍW‚ÛūnœøZ?l7Õ ŧúÚrąČuÄ ‹ĒFĖM€ˇČô€}ŅĐĘÄáŨÅ?ø+ô.f¯OoĖĨ˙Č25<ԃ‡v$^ ‡v¤î éĢNS´åĸ‰ģ)–i´AÅ2âë PŦûŽĸ›‚(}Ī3eož°1x Ÿ^ącT†ÃĒy‡0ü^‚LæĮė=cЕļnŧû)šĮڎZC¯/áKTG×Ö6h HTsuĀĩrЈs‘Ež XEąÆŊĨĐŠā4[áO_ŸŠŒx^Ô]9HĄįYxĒJų´ ¯…H/–U„×QŦ˜c Ņ’SU8Õōâj•Ķ]Sˆ“-1-מX „GnFÂ^fĐî2G.ĸI•ĢīÉO{?Ųq† |bw:„_áŽHŠƒžÍzN„G„7Ų­šf]xŠīJ  åâ‡h“ÔJŅŽeāÅ}x´­*~CĢÅՌŖŠˆą‡å ÷ļ)4ęyÆZąZ„Qü’§V]­–åEP_s$Đ ŖŠŦ,,é|ãđr ūAPúĮ~ ŋév~剆dꚗŅ.<ũh.ž1”K|cĐeBôõá…rf x|ā­[;éŖ=lÃnąfæy#L—š÷ŗZƚSĮ‘SŌ6ĖĶéŧ­,\r 5đFU =kx|JßüÃÃËXF|*^đ<F“5 Ŗ‡šÍŖĒhĀãBįđB¨ą ŦŊĪ[DxmHiŒ)w€lĸŅŠĻ;Đ Y&ǿևЁŠāÕ&ų ŒK!ŧŒņxSޤž\ĩđĐPN8đÂzžĢ <څ‡ÖĮÆ2"Ŗ?á!ÂCûĮá!ĶÔneˇ:pvˆ¨ŊÁåĻl2ŧęTkŽ-ú ×Qž1”+‚×H'÷[Gá1„/ŗđāã.ŧ=FRBi:ĪY%5g˜iĘ!*š] ÕĀk” ī6Î0Ú˛?Új’ÃS“āáēTڅ×ĀØ4Át9ÔMĄGá…hu÷°^FVÉzÅUd‰$¤r΁ŪŅ×.¨åĪ>ŨK3ˇkō1f4Ūx65ŧĘŦáážē7˙…Ęm‹nÍĢ4[¨]x5>Hãđ æ˜&Ãc9ŧëkÜN6á)UĄ˛âĘļ)IÔvøĖlĐ!kÏ`ōIGŠIŅĘWĐčšņo%~ō× Å­øŽŽ4z1é–QqäFKƒ§ <> åļ%ÂĢįđž1fjÃđ|Ãc/y1‡g\{āš/Mž6OBW Ÿ‚:Ģ*DŊŠ–ú4¨y^Ŧ áĸŸ’N6¨‡Ņ•Üúã?‡c~NÖ`RÎŖKø‰qŨ Xų(oHĒĢ—sx{ė‰Er € O¨/|AØéĘĩ”Q’U<öáU ‹S~>`läđÚ9<_×Ķ.ŧĒ?ô<„÷‹ĪiÖ×~Ĩæšą;?51a ÂcĄ‡į ü&ÚL5Âļŧ¸å„ˇpëĩÚĢÃôL ãKĖc„'b€‡ŽW1Tƒ~%*nt­æČKLšPqëÅÁG”äIŒ(ŨaÆL†4îalÜĻ%ktsũZōk9ŧ8Û@%ŲĀk!<ŖįUēđŌ<څuaŧÅ:ö‹ĪÁķģđR‰÷1đÚ ˙Šå´ltnEŧ-čœžbáá1č´ÆiĄ-Ÿę&öD‹¨—j˜N2l]į(ÖZ8 á]ŲXē/f ܝÆhxŽNX€!*‚ä<}ÂM`Ÿxns­“NjŒV-<øņUīÂKēđvr=aמ ;Úĸ‘ÎŧíČĀûö0<ĒYfáíÁˇĒ†>æmã0 }ÂûzsĄs̆ŲâMå*ú ŧĐc˜qû”&¯’ÃCc3mœ­EÕ ›9>ÆÂēŦyqGÂ}ĸâMˇi§göKPa kŠ%ē)…’ų99Xg„+RAå&’mĒ/Áđ0Íɕd{Ģ$[BxŠ÷āÁKÚUUŅ <‰đ䒧ŲĀ€Aē>*ĸcáĩzđĒžŸÃãŅŽähßԃ‡n] „'ĖĖáųŦŊ‡ļ÷ka­xÂû TctÔđYRܟې⁒ŗÍ_zÆ Ā“nr(7Xž@ĒdS88Ņ—4K´nàŲ"Î&ĐDE1‡×43 ˆė /#ĻŲ6ŪŽ…ÁKLf*­ĐDúM|müK ŧ˙5fÜ+ėŽ×ßŗļķf´mĩۚˇ–Ú_bÃgé4@Įˆˇ†Wícežøî&ZĮZxXÂTØS—üāhg‹nRCÃ-hŲppFˇidæļžĀÂZx-…&9ÂëīĀõāɯ"<áÅ^­ŠđL° ĄbžJA™ÁÔ —ž12Î<ø=Íú*éî <žbāqã‚q"đFÅîl<ŦĀX-Ü-‹;Ҝ0|24â„^F ˛6į&UÚčôLģJ˛DxØēiÚ7RJXŪlå_xč]܅§Fā}îÛĩ<č§Q)€āĖŨÁ5“āųm ¯ĸY{*x3c7&ģ[m‘¯3× x°ĘI\rÉ ÎDV¤ _öĸAM¤(Cwĩü{Đ'Ž ÂC09<ŋ/ÁeÕė÷_ĢĄ'.4Ģ%†öĄ°OÍqôãÆáđœW^œ-ą>SÂķK7I:hoūãĒlŠ‹Ą. t$ēčDčĪ2ŋ8WY~øžîÂSžéķLtœžėÁK ŧß~ĩ†>(ø 4C¨Ķ<`…ö˜a…ɝqx•ŧN@€ķŖŽyˆŽJũž ãųwŪË?”z‹UxáQĪדášQÖ­yЧ"Ā <ķō}ŋš­ÆFևW‡ÃN;ŧtŸnž˙ :­°zĸXfāá’bžĀaÆ^Îđ"MbpŠÛÃļāä9‡—Ī|¸÷ĨŧŸ ÃKąŲÆ ivxíiāq~ĄF]ąÁPÍ]#ĸuá%荝qzÖL <˜Oī!<ŽđX×MR•ëym;ķ1đĐ ĸ/ļđTĪürĘcfaų-SÁCOSB6`ļÃ@%KįŖ)Ņ‘*ņĩđ:8)0*m˜į|ôŨ”d€×Áé‹Ĩ™ųôāåJōÖMĒŧŖõEĐÔhŗC܄7Ū7) Mx€šA”ŖüˆŠķŲ9Ÿ+*˙ ŽĖ›™[xáđēs{:āNŅ=mžÕßzW4ņ‚ĖÄjxhŨ`ā…ÃÜ` :Æ(5œ…Mø2!IļÄ1,“–ëĘđčdx­ĶCnˇ×^âõám†9ŧĕhwKŠÆŦqLHc‚Ģu%´uæĩ)‚T…Ūƒãŧô¨lįđX^ąĘDâÁ<ËIT= )¯mÕ:¸\(/ ?J e(?‹Ö:ŗķ„’d"éufBŒē’&8Û37Yr%+ĢKîmAéh=1đđ‰âm€‡H#đūÁÂËĒU¨>ę̍įém‘Ãģ/Wúđâ.ŧ^ŗÅ­û×^ܒk<ƒ‡ēaPŲËP÷¨?v‹°õQEëčԕ›ƒųŖ‰5¸e…Ķ:Žļ‡ 'Ũj ´…9#)ÂKbĶu„Ōx -^r\ŖÁšŠI3¨x‘2æ]iû3Œķ˜°}ĪÆŧ6đÚŲW4ĀÛÃŦ^c‰Â{ĪtpŨWĶ-LâÕ°đz…°™Xzđ¤Æė*¯Š <øé kË.,rŠÎ)&‡_ŒŽú-mŗƒÕįÖFé”~œ \P Ĩ~Øj•O†$ĄQÕQŽ›\\pȊ‡JÉĸ1—bčlhš­´AíáÖĐvK' ƒ[xõŊ†Q’^ļáŋÁ āÕÆfO3oļīåžj:0Š-oĀÃĀĐT^j8.@xqēŦdáÁ‡­!x,F÷8˜ÔŊ‘A÷Ķ6đZĢdvԆßh´Ë€×“-˜nÖ ÛōLWŗđ°kqÉ2ŽæŅ×hƒ Y[$ŗfEV˜›Ēuh^ÍŨpĪxa…Üā*T’÷âlŪš¯:ĩƒ{Fā%ž‹š„EE2Ũ‡ĮsxĘÂkäđøŨЀ7KĪGxč6¤qŸÆ›§đ-zĢų%Âë X› ŧā]a‚',€˙HD8Ô9É<švmCŦUŊÄ­Ã|!l™ ‰ 1Ô¯š—šĀ÷ƒđøŽąöŒ%ĮU$t@ëíoåđ:Vqø5™J9<Åp%%3ɒXĪ3z^^GVēđT^hā­ņ-š–ZķēRœ†ŌÚ!ÆÚMqBááØökGé/ĀąFL'Ųđ’Tp/y)ŲĀŧ2Ņá’ņUÚ]‘äPo-ŧ­Ū=žüĒ2Šc˙ÁčV5]V@ŗIpōŅ1Ųü8†~аŽhœzôoƒđ°Šrv2đT!ŧ1š‡ËēŨȄ IDATF1ŽÖč Āû5f´ƒY[4įā)ĀĤ˛ VĄëD_5L=-WV <čÚō‹Ų>Ož¤AqxčM•õáą><ԃĮŒĢ‹Q’Ķ€x˙œÃ ŅÉ30mx˜_ģrB5OM0ؚJPûe{ú“ ĢēđÜ“¨EëŽõUƒ†wOU)ē¯m,ōü4 OũáŽ@Åąķ á ‡ā5ÍQdž`\ßįP”0΁—Ęû_Ų†…?ÆjČaD*K5âœPŗ>ūДũáoÄü:UPzKA+GŠÖ3¸ÍáyģFqė<ČûŦęÃûIž]3‹QĮ¯D/ÔhŨ.˙úĶ9ŧēy`˜dįđøü‰Áķ ’ķÎVTžhŌ‹JcáÁh`ĮLzŲg3Ū0ē lzđ$F#€™6.sĨu īK]x8#ëÃĮ™ƒ"đL€ƒrEÕvzօWßä™ôŗ~Í3đn#<›ũßb„ ø§&&-ĄJ˛FUE™ÉÂC]î…}x›xōĢ=ן\2âĄõ:ŗŠc´^ád4^3ī֘–ŗĢcÍĢx¸bĢ|;ÜBx0׿´™ą—až=PĐå×BR †øĻĻ{ÅFßäÃ{itß1ģĂāőŦ?@Ķ>qæŨđ$ëAoéÉ'ÂH‘ gĶŅk€žŦ`æ¨pnkāé%€—*ü…ZŠžĨĻßŖ7ŨON1QN1ŧąÉVŠ}̆YĶĖhKÖƒK?ĸĐí9ŧCœQT”Ŗ7ˇÃÁCEȟ”>Šô„@Æ6=÷ū™NæųJ;’Ã5[´ö'% čÃÛŲ00™Sc›ž¯ßĨLoV5īĀëXx¸F[[Žģ}§[ iļôMߜc:YÃūÃd,8īOqĐi€ˇgáázhƒ Fú8^ŋũRÃT&ĖG {„7Vāmņt Hy÷•ÍĻ1&ĸo$ŧû ŒˇīOsPĎzųà 5o?x?¨F]x8X-öāTË`XK+MNŧÎ ŧđpđėĒôHĩ§>›Í‘á=X[ūsģ!6FW­`0d6!bŅ‘ĩä)á šĒ ŧ–ąæÂ\,˛Æ6ëZķ°%L¨âT&#;–=CxËT>w@' ã52€aļíU­Zņ|œ ŨD>Ķ×<ęY–åŠ8‡wģ8N‰ā““žÃŽÂĶË´đÔ:úūhLU“Ã7›ĀŒˇĐjØĀÛÖ$ÔÂÛ ¸Ģ§Õ’×5/ą5Oŧ* MĐaŒæm|* ŧ5ŪJ•F‹,nÁ4VÄĀÃ5ķ”…ÕŲ”^F|ąāŗŨM-Æ8ã^g ^Ū×m×. oėģÛøGÃŗ¤÷Ëū:åô,ĩđē5. đpfŽ-üʨ*Ãđ¸gĶ|Ą[€GtŒy,ZØ­ą8•UĶlĄI€ņgGRžtMÍMž‡*ø8ŧüß­â°đÆž?õĸŪ)ú0đ&ÖŧQxÔŧЁ‡Õ4Ũ˛đ|>ĪÄ͕¸MÅ{đ2Ícá’4KŠĻ1ŸUü ÉicŋG ?ü&+MæįđjR+~ oLĖĩGĢLžšø~Ŋá‘ā5ĐēK´Á˜˛D7ļrxĘ…'āAoíäđā &ũ…īŅŽycáeæ=ɖ°ķL^ŒĨȉņëĨą?V€ˇW>ŧƒåhđ„éķŒa Äįđ’>< քns;ëSÁ°īdÛ(ØsI‘įÆiãßEÜLŌ–´@ׯwTzđŗ į_ąâ8 ŧŠ}ħm‡áĨ}xÂ-žÃ {Í6Ƀ#<ÂÛ­C‹˙ČÂķ]0~· đü– R _ôŅ- ‡'‰…GĐ!dŪÂà UŗũāáSâGŽ¯ÂøâA7'>ÁÉIü„mbŒŋČo×ŅŖ;†á ~-ņŅËØ1a^8zØ$™^Ž$įđ@ųXąwá1đú9|˜ŪĮ€šĄx`áAå4A‡…ŲŒ€—ˆž3Oåđˆk´ík ÷q+jļxįdÕoÅØqژv!NjÄkn ų1ŨDįŽW!Đ%ȝPyā-ĐďžTk&ÖÜŧ­…ƒëÜģáw­‚§OŠ=íôŦ )Lr홆…ˇmāĩi2oĪ>\Žļ>ēäđZ aO@ĩ×G|r <ėņ—L^luōô^ ãÆûV‚á[ Ö}ĘpÄÅ5nōvúoĀŨ^[r’ Š]‚ā^ˇ–wĐ>7ēÆĨ-Ėagŗ^ƒû'÷’˙ũ>N&,īLģǞX­ņz”Ã=ĶUëhֆš‡K(éĀķķš‡ūŒf~‚×(‚×kļÚŽmŠ%€gšmX¸ŗaĪĨ^ úށēŖ@ŗEÃ(Ž§ę>‰ä ´æA 5‰Ųk€j]Ēj­Æ0Ģ#ēBõTpŠč íÄĀKŽ-éWiä9šTĪOØą›^F˛?ēWÄU¯™Đ čq ßĐt\éÂ㞅ëāaxl“6͎ž‘šų›ŅvŪŨ#‡‡qH,ŧ¸°„ˇ‹úÂĢ5j`ũ2nÜPˤmlāvÕ&{MuĄ5ĮtĐ$ž‚yqāß%ֆŠ$‡;ĘšßĒc4õFØĖ*œ<},xÚ՛0XuÅEĒ•“ĖĶ †™°dĢ˜<=I āU<ņUm4`´ĩđŧxŠŅķô!vĄYbāũzēĻZxÅ; &kߖ—× „šĨ…—&&,UËč>čŲՎÍhÛV5ãHۊ÷DĪN‚h燯z Tĸ›š03Ũé[pzmN°ŋ>ä2ŧÎūGøŗ-8kj‚šz™E ž˜s’ErEšî&’?:Uņ ‘Ģ!xv†ą‡AZ”Q’ŅåĪÂÛĩđ:ŊŅļ¸Åx™Ķ…Ī ĩJō{9ŧÔĀ‹-<ŒđŪęÂ3š[m¸÷ĸāĩÍ$(‡ŊĨTkÚØxÛ[;đąú.‡…7&U_d>r‘DķNb÷¸qn:O0$cL#cj‡+ÎIFŊ(ķĖÜ•äē…—îXxfāÕŗ3æYxl2<‘ÃÃAÕĀķ5‚×Î0Ā sxč,ƒUrˇcŽįđLä/”Ų§-ŧÖØ{ûđ &j,ž‘Á 7 đĖ*(  ‘#ŧÄ8ǏÁĨ%׋lŗ ܚŗ0nĶ–™ÛŌ㤭›āΏĻ­`š>¯™vᡂˆŠéä<âļŗ qzđLސ0ŨM2ô›ÁŽ2‡Gĩ…Ws <ŋaRdÁ}NŪ¨ėlCÅG9ŧhĩr‰âēž,¸‰ĢP;Ihˆ+žˇK,Š’ÅƯwÉ)\5đÂnŸã ÂKu*Æāyé<ô‰#ŽØIČ:õá9Ūfâģ}xÄ|ÛĨÂë8•¨=ģôD"Ņ’EĢŽ¤nåŋ*ũkÔi1Į”p„ãFÁš(FÜĸLĪĻ$íÂë ŋŠģF§ĪטI÷āE@ú÷5ÂÃLN}xĘøR5@)Ŧ÷á,ĸåÃ+°ú–!_̌ŪČôWúž™M<éIĪKrŋŪ"xĄé S ™šé ‹īŖĒRí×ŧxŒg¨œė¤˜ËjžļđBô™ąđ:í$Á™{X*ŧô xękƒīÆá ˇËM3|ķņ¯‡ā…™…Ū§ÃđŒîcāõF[“ŊFË/ĨúĄ‰ījVÍ^Âsx›}x˜ ¯txh´ŋ¯Č¯ž›^O¨uĮ@ņ€ÉkĘoxĘÂķvŪĀ‹Ķžžwá=ėéy&{–pUôÎR•/äđvUŪ˛īæđ|īvŊôf{ ‘fxęËaāe˙gücO7ŗ%ēŠ>gįŊÔčy´… %1tZڟaė´a*˛gf•d„wĻeútāŊ”Ãëč^ļۃWņcŪ.´=H† q ĪûT}VȚƒƒs’&‰ˇ)+Ô ŖÚœÄõ§ĩL}ÉŊ]3ˇe^Ævž˙=Kgk&ëŧLmøč0dāņļ{ āąĄģxŖ' Ā+Đķ,ŧ`ŊæšÁŲ.ks”F¨€Á*(Ô%+ž×hJVo%˜>š9ĻūÉč6ŽŊŦq€ˇˆs[a"Gxą’ nŲŅļÂvļvSŒ (‹ēŽ“‚7,U’Š$cũ6ôˇđb’50Ÿ’—TųfBŦ S>oŖî”q=ĪCĮįkķ.ÃԏW¤Ęp• ×ōDÍkŠ@ôŊtO(VĮ ^jāŅ]œÛâ*oŅŨŧC qņĖ=Ũnåūššũá]ãH5ãQ¸`ę˜äé ­ãzۜ#Ühŋ¸NæÜ`yŪk¸;Q­Â]qjƋā}w ÃŪÂK˛^ž8Ÿ›(ĒŊŽę¯ÖđŸĶ˙eZCŪjE¸Ũ´Æ^u41ĻėđéZÃpéĄÅâ°UéģūwųĀšŨčîyÍĶÛ9<2Ë¤‡J‰A_…ÛwC#Ųö÷œÄ –ũIdæ@ãwČ=ÚēŋÛ~,ú0đLž åž§ŨĮzĢuŊpB7-ŧŠ…—4U÷Ņ”ËńÄđīÚÂËĩá7–6P‡›į­D)ž$0&įsÛŒŠšUŠÖhĒŊNĮhy ˙DNšÚūÛøŊô¤›{°dļ߃WņCÅw€7cÎĪiuŋ˜5<đČBzđhŦ#¨6žŠŨ[ķ|;Õįũ8ŲË Cąk6 悑.ŧÅ?F‹T7ڝN/y1Î+Œ}˛AßĐŨ‰đđGƒĮrx…ö LÁËÕö1xÍē.ÃĀÃŗđs(Â#.æ 1ÅĨM^ŧ5'1‰f Û=xXĶlnL1žbĒ’Jū+´ŨiwáĨh=ožß<7°Â˛ë—Ō>n^oîxÖ†7Úl'ÃÛ-4e:LŸ‡/$ÅfÛŨļFxđRhÂ᝗\:h*öˇ_ƒpĀĀÍ(ɒOHKŪ^܅‡šÔđ™3ĢŹ2íº·Ur^Ŧ؎…Wˆé"x“šíLā)máŅ><Z°N, aôôû4đđ ûžDx˜H>šË€'ˌ$ˇQ„×Ēë%j<žq~—¨ęĀ+ÂXĄ:TŽ"<Đ iS<(Ē×[úŠīs8x;…Mjx -OĢ|MŲ-ŧ{BĨlŒĀkt Nˆ7ū0‡—äđJsxžĐ?§ą…GCڅGˆˇ—ÃXz؎5G‹˜kƒ8Šâ5 Xž€ųÜÚ +ŨŖ-yaŌĶ’øøŦnĘŖļĮ$ŗn–Ņ6nˆ‰đļˇŽĪäŪ°Jr•ĩ<Ēcí6 ŧá­€5ŅZA/pšäYxP'Íá ŨÄė-^äŖ]]ƕp ¯ đLŗVI‚×ĖĐ Ep“XCŖ y˜ęnė´˛õT…ŊZĪáyے€6ņŅáúIĻ—™ÉqœxŠĀj͉VXPķ0š¨NÜ42sŒZG‹ûOķ.¨Į€—xqˆĩĻ ž¨ŅF}×j<āÛ!hō[Oņ{Øŋœ‚ŗ4[c˛đîŖž§‡áå5¯ŖëÚÂĶŽUæ%åéž3 ¯đļą‚P“nÆäNKÍY]x 困Ú8ˇlKczk|mbiw"Œ•ˇå‹c37‘KK• .æxÄOC„‡huôDFĒŧ‰†5SÃKLEÖHÄ‹\ã\âÖ÷Zõhƒŗ“Ö˛m/‡G›ēbPÅwáĩ4:ļ𰑄fYņí˜öā…ÃđŒ˙ļRÍ@äF_EđāĮlZ—Oą6¤qÕ7Ņ›â=͉bŽãV˜b­6ڝũ˙ėŊĪ#KvīyŗÕŲ‚Ë-ĪÂ=pšĸĪĀ,ŧx%ĪĻ*1î` Č+é0āžáYēÆXu!Š™%^Lž…p9€7w!LÁđāí[ĶIĨ z!LmßBPgšÂÔÆV_ ę(wŪ Ÿī‰$™d%ĢY?ēoĪ@{ĢIf’Ėü0"Î9į‡#퍝U2D­˛Ŋ4‚žh*ļ™ž"˙IÔģ'<ׄį]ÔAϐ•‚á=2bš={ļŖ“§‡˛– A„ŅQKǁŦbI<—J2Á›TM)‚÷'ŖŖĪĶé5xÍ2@[`œĀđâMđFÍn­šžqŒ>Ãå>ō¸ŧjĪĻ <ę­ã‚o GS^¨ÎčęĮUŦOwŠëÛĀël{ĘÄFGŋŸÅŲÁAHBŽíÁE&OŸī…4C’BŦ6đĻU\¸ ¯įzeōun.vû?I§Ŗˇ xĩ‡w]Ú ÁbÁ/ĻŪå*ŧ?ÉoæáĨcšh2ˆôõDÎāK?ãb{Ģōđāc¯ÍÄBBR ˇ…wÛjíy‰ú ¤gQvō|/¨ã3—ôħŌ"Õ1›ˆœy Ŗˆ§.ŸMÍë=ûŖŅEĘ{ˇÁËĢfÕå€Vāũļ@āņJ4'+đHžL<¯5aÄđœ7¸ĶĶ%ŧ\š%ŧŌôŧöđøu|5ņåô;ũRoōWŋ_Ī[‡×‘Ü p‰UoąøKđB¸b‚Æ%YÅE^dōˇĢ?M¸Ō–C0ÅØÚs~Ĩ`ÖFåBbАGāyAŧ–‘QåNđ4ā †7I.¸úÁSC¯đđŠĪŠįåŗZžjā͝|ķFÔŊāu|ė á,ŧ˛(ɒ§‰ËÛ8#Ii#+4cqIč"(8éH!//áŖM ƒĘ]îú°%–Ôķæ)lT^õŒáå?[ĀĄI†7ûG6!køžˇī‡­,œņđŌz-įײ=4ŧ’´—e—§Õ–"ēYŧÕa)"h/¨< đĒØĮsâŽđœáÍŪ.MofņŲ•,Īø9/?|Íū™o/ ^ĀđĖ˙ķ}Cc` N ĩÆôÚĶ3ÎŌ‘Įˇ‡†wC8KÛe#c|ĸöKp_c$šeųÅ*ö5åVā•— ī%WߊG?‹[đâĨ´-˙ˆŋŸËôJžōÅuÍ/ŋ‡ŪęW–šį9îyoíjUŪFįÔ{Áŗ×—Ī6ŸŨÚ1؜xúUû ÖęÚ Éqĩ¯x؅ŧ¨ fū¯ZđLėcôG¯(ģáŲ?üÖ*<< xÎT€9dļƒwKik¯ģjé­Ū¸ŪĘĒīfx9ļŲ KæđôŪëĖą_MDž!ĶW\ēī:<6!x} įá•sxõÆt÷SUž­Ŧ|@{iÁ+¤yŒ”_ÆEcŒåh\õ"sÁöš<§ŠĪ'~’$xM‚ƒôŦwxdŒ§āqLâÉ$ŸÃC„šķđĻ^ÚŧxĶ$ķąÁ[i\duų4“…€ÄLöÄî:Ŧa ä<71Ôžh\üÛá‘:KũĻØžŅHÖÄk>g€×S)ĸ-Ō+6Ī*MđÎ'ŧ‰l˙ŒĄâŊ˛ĘYĪ‹_˙ēÂcG´åSķ?˜O8Žb/āŲöIT 6…¸*Tĸx„´Ŋy˜¤˛Îč0Ë$lȰĩXׇŲMv+BUf <2­É°•đWøœāÁ q&Á;OIYß@īŖ†wŪŦohģš qęt˜}E*ų@4kœÚēlGģûWú‰Iš|!Y„V„Yn^(ļÄČ$ē!ü~—Ėŗ!gĢËgĨŅ2ĢôYZ“yŪ}5<×)“m#WŨū­ ā}íbla^ĻMT}š1U&$õV6]Ē09 QÛDdú<ކĸˇĢÃZŽļ‚wŗ/đՍGßOÛP¸„›Út@ŋãCЎŽâZ×û1=‰_šŦ~ uÕ ˜˜ˆL)‹„˙ÔŸĒ­†ífxdI¨™ĐčutãŨŊįļUĪģOûÚ ü‘ƒÛÂĢâ"„bÚlA7›*uØxē/ÚF;đ=´MđnUŸę>m{xœÜ¨‰ ššģ$MÖ¸×P%VZGųjeÉGŊģm ĪÆV2ũ°ŨĪeëoLZ+ ¯Ä‰XÛ(K>ØÜŧ-ĪŽĖ@M+–<įõTŽ—eõ=ČĻ4O•ĢÅyXEDõ8, Pį vuā˛Ĩš×8OąßhëJKckdšuQƒjaKËfgyƒÅį?Ãču:ԅcöĢ”— IDATšõĶĖædF[ÂCvo€g]ũØå—ށ7ãÜuú >3¨⒠^Ŧ&3žÛXÎØa[–ĻūD9´ŊČ{•F†Ž~$1 ŊˇwœÛQ}-‘››­Ī˛é7Âŗņ5:Cxˇ-āmŪĖŪ^aô5x˙I4‡‡ā’Å-x ųJ5ÃsĢÛ@ÚJ<Č ‹¨59ĩƒĮŠāK’Īé ūá%; %ŞΧ)Æa››ÅßÖJ×ŋ…‡ˇ!6ëx—Íį]Ŗ“ĸÃ> <Ž^ž„'Zđ2‚W^¸å°E*Ū.xp&É ÃÃd.s;ØU~›z+õŧ˜ā‘J2D r†㋋¸jn[“| xŧ îÖâtæđnÔģázšÖRŒ˙…˛õđĸuxą[ĀĢŠ5xUPĢĒÍVáÁķ$Ÿ{aŗtsxDõĮØĖyxŖY㋋hÃûNëVŨƒÃs ž‚ā]l‚‡$ĪÎŧvKikˇ?€[ƒąS<~Ëŧ?æŒų€‡(TŗoæÂÔz_´ÚÛxD•ãāŅzūŖ9ŧ×l|må™á-ĶŪd1įŊY‡ŽFđÎŨŪIœ—n—sŅŦÁĪÔÃCĩ8™ŽĀsö‡ôđņ˜Ģ ČĨ´Õ!”olŸTŸá_-ßŌ†7aĄ‚Äŗsx7tvĐ_‰‡íƒÂSf3ŧ+žÛ?r ŧ*pŖŌí°ž°ŪķžöđÔxë9<Ō#Z8s’ÁMU¸ŌÚkh‰‡7NŒ OCs *ĖČ;¤ųßĨ›Ü ŽqõŸ@ķ#asž”!Ū™mŲĀãÂ!4ŠSĪ1<åáaq]–î‹ēŖįyįa†Į7~<ößæ4äsx¤‰{/[_š+ãĮ;!}t/ŗ2ķ\Úã?€c¤Q‚(vÂäEOĀ'.ąa-aˆūĮŪ=ąA)°:BĄ%ŲĀĢUÍĘ8M´÷‡gČfĀjSŪ‚wîá!#*T•jtEæ¯[ƒ×kāå͜×ī€˙4žÃĢöt"Wā|0Ž/¸7æ2d$ˆâ<ÔJûŦŦd:ŗ˙3\rIøLØf[䨍e9›UũŪ'áˆāŧŠį˜ĸ%)ėĪ•ßI+eÂú@A{Nč'¸jīŨá%QÂ0/ĸ$ĮáãhjŨEEŌļŌÃK¨øoėāpԂwÔ¸t{oŧÉŧãx*Ī™&°ŠáŊbD ņT<˛EZđTQ’RŽėČĢĢÎ.x‘ą´Ö'éĻdKū%xJģ‹ ZĀ¯øičQT˛`ë(JûN™úD:Íŧ­=āI×#>ŨCRåfę;iĄg˙ŲŠÍe¨žWNŽQčę:ŧ ÷l93ņš×ķÔRUĄn K^(ä9†ņŌŗ°īÂÃ˛:2qĨZđ.Ë9<Ō3xiyÅ1,ōaT*ËĄˆ—V{xUœš”ėœL}Dļp“Y-'†=õlUûrGw†Įãų#ÄĖjÔûŲū )æÍc׹ÄĻwBV°Đ‘ĐS6؊ZŽx‡Kg xcŪOšÃĢ%VÆ5, ŪĄô=oꝐđrųŒį <å×hhŽZĀ+šF‡GOGop[“9ŧIŽj~ã uÁđŌŧãŠíĢ<÷đBūņrž¨GļrŊno•[Áģë+ü…¯&‰<8%‡Ąxą‹ĘĘUPÔҘÆE1ŖÁžíËæYíá•'ÆŠ^CŊ N8ií†X ŦĸLeëy ŗŌbģÄÃ3>˛Ī)č$Ĩ›ū‡7%léô,AVÎųÕxƒāš6 ‡zŲŪ{‡ˇTČĘ÷]:[Ūņs3YÍŋ‚t éæXŋ$%đ|” ÁC#ÃCE*GR kÛšƒ˜Ãŗëđ†Đ­<F÷¨V¯œ;ŅôöÚ ŧģE0NTÕʆĪ fG{ PÖA–í%qÖųiˇˇÜeēžHöÃˇŗxgkGķnx7îŖAĸœųOzu577͎xWW.íÛÁ[ŽG đô ej° tÖõōMĩd›]‹Î÷uˇģÁ[ĪyķËīĨa%āFxĒãUģI˙öŠņWo wļį›āŠŽWĪNé˙¤å)w×BfĢßå6WZqsŗwŊ™oŪĸm€wŪ O<™´ŽuÅ˙l^hŨÜ6VZqpqč:fn\°`Kų6k ¯ãå7؅tŪ8jڗ§%‹?Ķl§‘cU×ĢķÆÛˇ \ģŧŅx]/.á-FkWų:vķzīåŧ{ÚĻfĸ›Žv´‡„×9&.Ü+ŌΌĶsxõ:|(’˲úĪŠŗaũûĮI&Žĸ'{đ`´Xŋ´1Dž÷ėx7ĸÅXŋéԀֆíMđZë]žN[­uėŊ#<=‡GŖđTO’"ƒ$l}.Q(ˆ:äîö{‚eĄņŽá…°'ķŗn †tđ›¨"hā…Y„äOE°U=ÕFũšŪūëZLߎ6ŨŊáÁ%Ņ.āaŊš]ĮVāMH|=Ą đ—*e÷x—đbfx؊6æāØõb•›†įŧ}5e'ylɤšEFū'ļl÷ƒ×2k¯ÖŨšļđĪ{<ėÆyi̧ČũĘđŒĖ^-%ģ7’|%xQ­Î/Āļ•Ū„áa đĻÆwŸĨÕõ\NžJŊķl4Ŋ‚@gŗ]owˇÔŲWᭆ ŨŪČ`ĢŊä˜Cĸ”kŪԜšS RWā)|¤&!zŠēÜŧœ]ĀįđrC2hЏ‘d­K_ĪđdyU^šIft´÷o‹  ›āÍ<<ŧAVĪyxČ^˜r úDŪžĒ…Ø7”;†§ÜrØrŠ*Ž‚QZ–3†7mi+›| æíx3üw3ŧVŋKĪÛ¸Ž0E†ĮbGū•Îa6T1œĶĨĄ1Z– xāeģĒ~ŦÁ+đ ¯:B10lö{=otááõGė’Z/#îk‘D‘QIq„‹ —'ÔYÚkÃՃÁ›ŊxŦ"ČŖ<ē÷ †WEĪ>V\eiŪų^ņC†įž7 x.ax'Jģ1~¨6ŧę™xQōFĄ9uPkA?–}dtēâāØFCŽˆĖ1ĐæÆ4ßUÉŽÉ7ÂkĄŸ­+C÷‚7¸ī%Ã#éxîXÚ<Œ:NIUq?í€7[ĀC 8āÕ{N¨”ā8ČeDę }7老āW[Âŗũ#Ât2F°ibDdOŠįG‡ņŸGĻ(Ž.Į&0Ŋàz:1 ‚›ũ҉Ä|Bģ&ŅV6ŗØë6ŧ–â]v˜čw†WEÃ3sxÆi¯–#ī•ėiyIđ&/ū[ÅU–ŌÉųŪsļ"0īÛÔqÃpŽ|†÷e\|=¯ ĪÔút8šĸ8'‰™Ûß9$Ģ0ŋ$“N>:†}Á'ĸAŊß Pģåp„bxK„5\Ļ“ūãĐeŊ0,°ŧfŖ*ĒNtFöå×f čKė´x’ūÖņ6ĩ7çIœÉ1{=îŧAˆČđPÉϧ#‚§/&tđoåTY’€×čyČvÁ𸀂‡÷u-Ķŋ× x9‡áÖßû)RæÃßdž:xBu ķđ ˜Ã6Dē x_ 1mfãSÔŗH­í÷8ŽšDÔŗ˛Nxķå>zęîū'a<ķC2ŸĢ$2Qöâ0â‡.‰ ™ŧ؉ŠČęā>đęđ4Qp›9€“Gr‰IJ訰‡ŋ•€§õnO /†FdɸˆŽ`aœ/”ä ü”ŠÄÉ99s!Ёũ}Ėđ^5!x/]ũ­/0ÚÍ5xÃ×$„éĢØCą´ũŊcŌͧĶĒÖCŌ@oÂ1ûUėËđ^YbCŽ<†8FŌÎ˙AĢSü¤ŲGØŖ,§ôĄĨqų´øoŸM$ RĪã<Ī81°yēŋך¤°%ŧEŗpCĶÔ2č§Ü ’Ãā4'Ąč?‰“•!ņ|œ Ôytž^ŌČQZI/áMĖ^5‡÷–đčBˆAFį_Ō™ļŋ2l‡˜ l/vŗŠá)ãáU oBĪÎxˆ˙åWĻŪCX"įĐ„ēũČMmĢ!}Ú(ËG03ķ2GÖiã&3ģ!%BÉɯȌŠņx¯÷ đĖÂĘķjãå Ę^,hGŦZ¨âÉnD“L–›g:SŅ|aāŧ)xC!y8*Š}G xp#FļmĀĢ;āI˛ędVĨڜėũÚ<Éđ‹…’ųåė<Ôl:Ą/ĨëHĮS†7)sËđRęÕQ‰ßđFϟ–õîŗøAā]K´å`qáö. bcv-´ŲÛĄ EŗE‡Á¯ÄI<Ĩ)ę.MYX1Øwú,ũ ΅MlšáˆQĀĪā-•dēŨ!iŪöŲs xÅ?Ģ:4āaØ"æŌU xĶ˒áÕąļD8žÃŗ€įHÂĨåÄŖ!]q0É ‘ædČÃø>sŪĸuE tīD~M—lhۊŖ×§6¤ųŌpD1õNDĀ>ĮĘ^ĸŠ˛Ŗ=T|­Ÿ ŗx7†4&á€<öûKķ w^‹Āū¤7<ĄLh†Į}‡āe€7âbEõ,ÎáY.š`ÅAúžŲĀ›ÎûmoęáCĶ+õMiīĨĒÜOmtđYĶøaģtâøXĀŽ[:NĐ#ĀĢžûۋa—ŧ6˜ĐTFö4ŨdŽ9H…ášÔœ×ĨoÁŖYSȑ‡‡NKũã™ā!,p۟îĮČĶņ@đĖs}í5šŅ‹a^Ũ‘ælã7Mí\βH( &D˙WđZÂ#ņpa=ÁMöéÁÁķ…WōbWب U3LúŸĀ%ÄF͉;›ēđé‘Ŧ÷:eâ–đsĶ{{ÜĒŊ#€œ5æËĩ—Ž…ėąĮ˙¤fö8rVˇ]QIe;Art ŦôN5go\r‚ÂŊ“ķ–đæÅ6—ĘûíđP#|-ĐšÛ;{ō'ŽĪøįčAØŪBaë”:hŲûģ!žlŪ,Ũįlå.ë?ëõ“#îzķÕ¸ļ–q×›âį›K _kÕ_lÃD’ŪŽņžāÍ6Ãë1<…Į6ŒW|ÚYŧ÷o‘­‹× ųšŗbÖĐ><</ŽŲ¸`xXl9›ß΀ˇm3īđøÛ:˜åvđĘ5xKĮ üZëđ +đÎŽ}ڍˆßd{OđÆˇ‚‡{ļy~ųhámŨļ…—ņ\œ¸tԞî—ëĢđŒ‡G¯Š…‡=ČûÅåk°HW(—<ŊFžø>ŧV‡pËļ-ŧ#•N ´}ĀÛÃårœ&I,d!OĮXČĀjrJs…ũŊå°åŨíÍđŪåŠxŊĩ>ĢŊRŋCŧˇļ-ŧbl._ƒ,ĩi:)žiš‰!b|ī‹ĀJxxYŒ4¨đ?:‰IŌžu|æFceck9Øļö^ÃöÅm-0¤šz‡…ud:šÂÅɉ9p~Ę%E%/ĐãŌ$šáQŊPČë|"ÍīĐįŸēדgNCđöĻđxķŠ÷Ļ0 eķ1åpäš~ėÆä×ۖ@Æízx){{8•ĘŌۚc3Î"W‘Ō+ÉGŠáÕ-g•=‘ĶS˜lũĮQ&'âb˙öŠÎZAW]đšÃīĐ"•d;ōĖ  ¯O&ŪféļUn¯„jâŊ=hčrĖO^ĢŠų)ėž%x3Ø Ą‰xĒR˛´Wu‡\_?ĸŸTG:ũōöđZÆ×ĘđŧįÅÍĩvĩ—Ë[á N÷Ĩē~R~}2ņŋH}Ÿ­Gã~ŠŠíĶÆÛŖV¯T}E=ŧÔĸ+vCƒįBO§Ķęķ:fŦE­NSũ ›ļéË6ļõ‚ŽŨ—Ũ īŦ}ØĐ[v¯}XŊuũǚ˜-qŨ%™ĻÃB­ę¨ oä fM‹Ũį9<Ģ͜á+*Ũ§*įę4w€W¨î×o 鄯§‰`xë”ļ‡7ėž8ßķÜ <0<üƒœ§sx˜I¸RÕ^LđNb‚÷Ž­ŠŨ ]úāũJuŋž <Õ><Åθ^?ĨęŠCy˜ž§Ü|ØÂÕŠ†ˇv<¨,×áJ'ą’_:ŲĀÛUŖ;Āë^%š=ŧÜĩķŧĖÛûƒĮSÄôÍžōđ”[…įõ<†įXI&x™8ŽËĪŧtīzŪštŋ¤‰Á[53÷ĪŨ—ŨtĢڇ‡ßŧ‹5x˙´¯jÁŗŪ$GÂ÷É<ąs'x‘Ũ‰GēN–8$ĩËāx]ÄųiõŦšōĩ3ŗŽ„"œ­§šHD Ŧ7{?x7ĖyģØOž˛ÃÂbō/ˆPų¯<ŧ‘KÛWŲrØÎá Ė'ágׂ§īoUOBÃĒIč‚D” õ×ĸ ŗQ΄Ļ˛nę`€P‹¸ˆ§u<ŠlĨ\bÕ ĪtÂķįŨ Ū IûęŊ=jy!¯<ŧĢUUåÜ´āÅôÕ'ņÉZē6<ô„ÛÃ;KAŠa՘z_ŠÔėŅˇ¯˛įƒČĖL§Ŗ}‚—č2wõéD…ÅŅŖLĀî¨DOvŸíqč捊jē›ãjmĢ,žŌĨÖŋĪļJå¯OyxoZXˇ‡ã ‚w.×áŲ%<ãáĨšģŦĩ|UļáÕw‚7tQQi˛jLÕÛWĶ#ķYË Ąq—–4ņ”lG_Q˛Ö*!ÍHI™Ûž*iOėšĢx ŪÃŗßąé…Ų‹Á Ҟ°ud…ŗĪĸėx W Ú júļČVģŪĨˆ‘SĄĄéĄ|Íp4œĸˆÅyt xŪ<[(ÉsxnīĮN3ÖUx¯n Oį.*ĢY5' /71œÂRT+š„ŸÁ;Į(IgdnĀ#|W‘°×CøWqŸyx„ŨĖfėĸōé÷L…ē¯Fb]ΆÃėÅŅɉzc`OÜŖ-Ü-6Â{“8¤L1ėíĄāpžEÉaT¨á;͞ ō'íŧņu…q˙¤ŪÜ|–^I?ŒûrÃ멟$Øx4´Uo‡§hGdą€WÄ]åöŲw-°[˜“ ëŦãŋ;įTrąj î¯ię•c'ļĐF&ĪBŖ*ĖÃCœ-Mzæ”<ĪĢÁ^\ևņ}ƝÛäm=ŽŖˇ§6ü;ęˆeR š/ 7š59.ü­jāaVŧaž„Wž[#Đķ¸ĸ¤-x¨1P‚'ˇášIÕŧB.āŠ 2ü^éÔč<­zĪčÕgß ŧÕÆU\Q—äO\tčŠ7ļŠ,ˆ6<ĩ¯}:B͇¯ëgôų*ŧŦĪ+ÉšK¯ŠMȅ'^Ž-qOϝč'<˙Ī}Uė*ŧē-0ĖM¨t¤ZĀ‹Ũ*ŧ1ŦȸžĪÆV´āÁ‚^xg /ŋđŦ‡wxúīWāŠ‹ŠāÕqÚĀŗëđĘ<ŋ0°€W ã?ZcĄh/ŧRėĮĪŪ–V Ģŋƒ3Öŧ›Ų^_/āíFLæđōžŸķâ×§\ō=;CsxšāíŠōŖ‚÷ŲŨŪŨĀĶōđÔ_6đ°T­­žÖũžü™Ēžĸ$!ŧŋc=ĪÃ{Š*ũFzx%ÃËYÚÆ•‡wUr [ŒĀИ¤mIbo_~TđĖÆÄA7ˇDeÉļeĢÆ äžōNJ– ¯$U6ú[Åđ†–l{}õs– – V’K PBįõ<†wž€Wyx¨š]% øĀķŽaT[5‚'‚ä{—*JA/Ž IDATQĸ'>ĪB–V’c­>Ũ•į\šsFÆķYjr_JRųLŊw\#ĩ乄sŽázse5%eˆŒK'ņų¨7­c(É1 lÃÂHKÁęē•gīžÆßŽ0Ē-[OūîDB—ŠÄ‰‚tqg?í‰d;A!ŗ}’šÉ!’CÖĸ ŒŦTy€Â d-GiG†8"xÅ Ļkhã˛˛úŒtŋŸ^I=/ĸ?dö‡4Ÿ$–Ž>xīŖųüz•{ũķK38ր‡DJI‹qĻ́‚Š,tŪ§Gš,I”1$õŽtib-™</Wō´ ķ,$ÍšęĮÖÍ  Úۃ, ¸•lUGķ>.ë’Ô"ŋžģ°Âʲ9@‚pAŠ1é„6tIöŠüĮ€L<Ÿˆ˙‘ôŧ'ĸÚ¸b őpâ͏ãĶo /ŲķņwoũöũJÚŲo¤yxAäÛ´3īž2‚ämVÜ_͌ŧ‡GC䘈܏>#ŽYÖõî[ÓÂGéá-7ņŋŠā †×}ÛÖvTÛŊåļđj5đŧOŌr¯ ^w’ׇmŋVđŠžŸJZ۟{Ģđš^úĀžđbd˙ā۟ĶōPÛŊåļđ <žÄƒËkđV7˜|$mŧÕđo‡" ø{×QĪŽbĐÅÛAjģˇÜ:ģE<—kQpš ¯9ÛįS$ீ@f4ššģCÂ^ŊãŠŪÖq'››j=Ūō§¸=ŧšWõáayč8‡tÅ g^°ē |ˆi“[ŧ|¸­ėûđđPņôĢ4ˇ•öŠŽẍĻĖNxw7GîŪė–ⷆ§įEļļ€7í„GJ*i¨r:ÃnėŧĢá ÆJGWžōzg% Oí„ŧj#s ęĮ sĻĨŋ[Ák¨ˇz^ÜŲų–Ú-b=[ŌųÕģīæ~íÖđ áá͖đÃ;ہœ6ų8æ<¤zĻĘiņ\ZčÂ–ĢØ0ŧcŪ¨q^ڞēTų/PsŽM8Ō†íšKęY°ĸŖĩlũîģCģ5ŧŠáÅ ĪÔ˛§ĻŠ€‡ ‰Ī@aę^ˆTĪ$vg•D %Â8Ã_†wRKųiܐæ/BėÕÛOd‚!īŠ×Ŧ@ĪÚđ–=O/^ŧlÁKMÜ΂°„×]ūty¸Ĩ×%¨IīLUéųÖđ\1Pš‡7!xDđl_ŊĖ‘ ˝ [ļŧ‰ØčԌĄv‹›šfΓ&Ž1ĒųėČZüđL&E]4‰ÄN”šDī.rZŧyŊHŊ¸œ6[Åķ\Ĩ›=Xo īĘU=îyD #˜†.ŋęË6ŧ¯¯ÃĶėö5UlĐ'‘¸>ā„™FÄČÍGĐ}%.nŧđáUrŅ-–đZK-xdũŦĀk ÆØŨĐVBāIƒĪ0‹Їƒg[đŠã%ŧī<6Ë|E ^ęŗéO°Ûˇ,ĒąAä•dĢÛđboÂQ‚=)SW'ŧÖ}SĪ•-x[Į0¯ÁŗMÅyM‡÷ĩjeäŽÃKxX2IÄ5xŲĪuąãŌ’„aŋ`dĪFLšSŸÚS,Ÿ÷âvõâáĘ}#ßŨŊáUī^ŧ„—.áÕßúŠÃ°m˜áāę<<ö?ŧ|žAԃœÃCr÷UxŌ5đvõâģO\ĶéZÛN­šž>,jÁĢ~đÎģiNė‚—/ō…7˜Ã1<–FõˇūÆĨKx-Á+&kđhR™<<ĶD˛€g=<7iwâÅwŋЉy&ŠC5Ĩä T@œH^e§-x[–:†ƒOûûīž^“+b¤U´āÍŪ9]ĀëፖđĒŪÔ4đŲD .cšIËNĖĶĮ¨%Øī@åÔÅc’É6 ¤ÎÃãüYŪ×c eøĄC˜l*YoVáõ˜×pą›ų€đxāÕ['Ҙá]zx垝Ã[›ķč‡U¯›aK Uy:“‰8ãrmbđIéBf™Æ”œ…S„™d/Ž"ĀĶEk"Ōˇ‚j'ĸ'áWŽŖŨz1´Í'âÅŧ•ą'iĐ2ŧnĩ'I†axg„čœā氆ņ%yĄįÉiåÎGsxß<Žé%xĮa“P[.ė3”ũĢQ“āM+П^Y XŧŠō"Aš™¸8‘iiëGû*Đ÷Ëč)Ų‹ŋP“IņD•ĨtETˆx2É>}†`á#]Ŗƒãą}Ō[šƒ- enaaXUGĸ`xŲáAhB§1w.kQČPf|bŒ ķ^xy…TîĢFnŨyē€įKŠ8ΝNÎ*ÅņФē- †§<ŧÜÃŪą: xPČG=ŋ$}—~ÄŠėîĢŅ0Ņ“ 6‡j=6=!ÅaÖDūĐŗũ0ĮÄĒĢž‡‡€Ģ1=™Ų*ę쎎m—­QîŲũęÃ˔8Ā2aˆŨŲb/,Đ͊™ÕC^˜Ûļq’ ŧôŗĒQ’ĪQŒáM žéĶĐ^l&ŖĖĀ ŧZÉ)ÁË×āqÄÖ^^ vI[ĻôdÂđāŨ,Xߘ†Gøl§”Ž8˙<|ÍĸŌdî:Ú}āų† ËyãEü|2EÎsˆTΚÃĢv…ũŋf‰…įĢ€Fc!䴄¸-ܟfՐANP~!'xjZ6đZæŲ*ÃSl^âŪŧŖõtdŨį5MãOũKÅĪF&dfĸč+ƚ‰xGgôb4ĄY@ėŌ‹Ū](­Ō†GjÆ:ŧ¨Éŋ{̈́ŧLI6īëuxãšá]"z%ŸāûʅžįxQƒƒWä× xČĶæÆŋđÖÛđ†ÚņŲžHž’m(]Øī;a*4d;)ļËķČĀjãôÜØøLK†—^0ŧŧō=đF€‡5ūŧÃŖaQë.gXuķJō¯ŧ"Ø|ĖÉ!ÁSŽc*œÂBš=„á‡Yš˛UcÉFDÉCZņŠ%´'•ĒÔiš&{z8ļp;° /å?øÜĪyöœ÷<2k` š ãË0Á<ûõ€ˇ!ûõö ÂæŧŌvđŋՑ‰–čIQ4G/é5đÄÁcFk¯öL<Ųg¤ū&Å^4™Ŋ(ÎGūŒaÛX4Lúû":E–ãîkal}[ß|kĨŦ—VG–āõŸīŠŋ ɘF…ĨOŸQ¯Íö˛h8ō‡ĖT°ŅØô hM-TuP ĀĪčĮ‰;žg{x\+ä†AõëŅ^Bšû KŧxĩüĒJ­*öBÎë%Ü)*Š%1MAĸNIOŋ7<8Č6ŧo~ŒßĨ­IķwÕēąŨۈ~ĸö†T÷ÚžĪRœčk}ƒm ŪģJÚÜØnĪ)īŒ˙vÃã5ZˆfĮŲēVžüf W-ۚbšš6īívđ^vÁ[ũzī–4đüIE¨—đ˛ølËo|m-ļôÂk68ÕĘë]đĘy$–‡7Áōņ6ōļ-ڏ^Ë`>ēOĨƒ÷¯QŒ<ąÖ<įđė6đZäŊ†ą$÷ŠĐx'xzåõnx+,F‹r#ĩŧ–˙ėļņ8wj[—Ŧéjwˇæ*¸ē0Ō 3ozxX7{ĩ<˛)æ¨oöo¨m OGrĉŽß´Ķær[5åįđVæĩpĶæž×:˛ŠˆBkØNMām\AÅ3ųĄUSŧÁsübŸgŦƒ­$lā]­P‘ x¯^n¯Õ~íá!L *ëQŧ{"j\=ŠZ\ ĨwJuđÎÚŖud‹Ũĸ|õœĨžøëá[›Ú™›TY 8s´8ˆwŖL¨˛<ķlÅVBs Œ WÎÜUųŗ“ūDámĄį­uŧŠ7(Ŗ†"ûNēoČäŪ^IđRĀŗ1šØ9ŒĪR¸z˜W\ĩ†Ļu‹ŌDr/ÉċGQ†}ÄÉST30E0szģh‹ŪŗÎ7ÅeČąá€pđ|NīZ;īŦĮdkxƒ8ĩ€įŪ^đWxŠČU<4¨†]ĄØ{1vÅĪ~`õē'6JŨX~Ø™(ķäDž&΂U›/Ši[Â3ļĮđφ}X+UiŊ„—ķÚv<´}'ī /›zIĨ›õYāŌQōĸ~"Ĩ,˛ˆxœė?;Ų‰āģhņO?/´'˛Đ—šųģiۛkĒ ÃƒÃcŋŪÛÖYÍäāĮ|3c´WP*ũxæŨēųļđĖ‘ĩāé9<Îf>ņđŌŪš‡w8㓴Ä0‹ezjRdįE,áŌU 4M]=’2OÂz¯&4Ā“ę›Ái&.配É`})áAÄ7đô^[H­Āk:o{eYåÎŦįwhô؃g˙ã^Oxx5÷Ä9<$ŸfxÅmÎyÎ3f&=•-āĨ)Ųļ6fė@ŸĻ5‡Če‰Í,7Ž•ƒķaâv÷?Ą‹ĢwŽēāé%<ŽōG:āMįoa*-FŪ˙´oßÃãa›˛ŋûvŸÃ‹+\¨e{<äų<ƒøĩârtÉđčkėģá鏞2ŧŌÃëĪáųzI€ghÎ[ƒWũdß5đÜŽ^‡WšZĻHøāęB3@öđāD‡<ÆpŸĮođčÜŨȍ=<ÖF[ūˆāÕ <ßķzī”šĀķØöĶFÚzxÍwsIđžˇĶĀĶng^Z[Îđēå Ģ<ģÄgÁķÛ%1ũš‡—.āYŅ:6.táũEčáĒW}JŊ+HzBWŧlĄIÍá įumīûŽ#[đūœáI5˛{ Īī¯Đũĩ^kāmĩ#Xo„ˇšåëđXU1˙ëŪô‚tđ%ŧÉBUIĪÍžYÂKŖ%ŧđLoæ‡-/@ȟĸ^áđļß mōf-ÃĨ œU›Ģ–¯ļZßŪ=)g'k6Īā˛.‡ŪÔ”āAHŧéRĪKS• Ī-Ģ*ëđ†\˛ÆÃûeI¨œ‹9Sj“ō5ŨJ`Ük™ā!iÃäēÖjuûÚĨQ‘é+^(ļ-ÁķæŲāŠ)YņhęáŽŅæ‹\ö¤ÎĨõą{ĩ€—ˇā…˜1Fč¸õ\Uaxģ¨wĶ}OīvMŪ>ƒeņÉŖ Û›Ū‚”×S ‘üÂIÛōœė˜)a+xlžyx3/¯ )ssx%Šy%1toTØøį€ÃŊîŧ}^ôčŧ o ^r{Į1#9B%ņBû^X™Ë$%œ†W!ŖI>)4â›É˛Éŗ}, ”W֔鸲-x¤_NķŒáÅgô’öđ`øĄ˜ÍŪGīöōĸi—Pš+8?˙“„ !Ŧ^Ŧá%d!ŗd–ŖŋŲŽd>‹l†j7ÕČâĮÕ~ƒUŪ@ކSu,‡Î†I_ą’lû˛¤ ļôŲnēķRž1xŨāSÅqžŠĄŽ{dnjȘ]¯`Ŋŋ*” k<^ėŽŽH+,˙U™ä„ƒģ:{ēŠ¨Ģ^ÅgFUGĶíųoĨ]F/9ˇ éNëoũŋoWÔ4 `1”āÅđ˛¸8ĐÂ^œLBÔDqˇ{Uų!ā}ķu€ÖÛ]*9øk,¨sŪáŒģVëΡ<ŧŌđęNoíŽđēZ­7ꡇ÷æÚ+‹eŠôúĄhũœŌļđ7ŊÖô†×QõqC{x‹eŠëĶę^Ą¯{mģĩ‰•6Ō<(ŧëļ€×ôŧ×­c wĐM׿ŪG­•Ûe'áļo8PÅûņƒÂkŽš Ū Ãö]đ>LĐ† 2\ųFĮË…×´öīžŪĢö“›ámtö~ítã÷‹q.ˇ‡wŨûđÎnņ­÷ pÚžmö,‡OCwÛž^<ē.Rß3ŧm“Î~øļ īlĶi6ú+™š$.Į~aˇŽ[„Žeåi=ūWx¤OQjAÉ@<“§æ`ŸfĸĶSŖëȍë#^ŋí9ė_áņ˛ŖUq¨‡Á;dgĸPöN d%aPÉ:´ßÆĸ(į„å7n€§ÚOŪī†(ƒo¸m /GšŨŠŨØ' wáĄT˙ĄœÍęŊžˆėIīQEöŗŲ)r?c!‰s…KIX"fūķË$ĪĢq“ÛÃk'ƒæ@üåZQå3<~Đ"AÛÂķÉm°Ãėáa ŧ°đÂŽú=™ĶąĖđ™]ĐũE(]S|ú,ŦŸÅŠũއ* ãu[—ũH˜ũđD@5S¯ÛÛx¸tŖį¯YŸyŖ ÔaÔ<đ °%ŧIÕôŧžĘ­ß–ĘĢ“>ĸ¨j=ÆōˇA"âJ× qn5ĐŠąõū‘:ĨS‡Ås힌Äņž8„Ē%.Ãüøe„͸ėx?"}YÆ^•|šøîEĪĢVn>D¯Ģđœīy­3:āqęÁuĩō™#nĐ”ļ„—^í]:‘–NM–đŊŽāÁ5tjKw„đË9˜T:Ŗžš¯°_W˙•rgé¸:Ŧz˛::Ąˆŋĝ|Āš69ۉаĸœÚ¨zä̇ÔA‹ đ8Ũh?h ÛŖ§\cõx7Ū 9<Ŋ„w\4WŦ¯âQn&+đ*˙œôžœV;Ú!Q÷įĩVv ‡4rú•Svš*蓉˛‚ ˜Úl z!)FÉâęW7+#LœhnyŽÃ;ī†÷öēĸz]s]{ĪĻv+xÉuxC{LzŪ”S ŧ+l‚,McČ †¨iu8đđƊĻBuQVW€įÔ°¨5|¤|Br.`•–WɚĪĻŗ™í÷ŽH˛÷ãhŧ>Ĩ-@ībؚ5•—]Įo5låux‰8`xÛ°‹ņČxxhĄŽyX÷xØrdu1ĢŦ‹‚0hędx)ÍĻsxŗđr{Yõûû:‡ËŌ2C÷ę%ŨŪlĩZÕü“6Ũõ[XŗÍd´ŊŪķ*îyõ#†—ĸø*āĨ xãęÎt'cĀ š˛ÔxšuĘ.uŠæáÍR‚gĪÔûËėkˇƒ7ē?ŧË„×ÄŧnÃûÁCŊ8†‡\ē+đ2ŅĀĢdEđB§ŠZĻ$wxHzDT˙"qí°÷•Ú×4ná[ŋˇĖûˇęŨ^ygxĒëøļĒ )ÉÂĨŪ9JYŦÁķŌv4ä”+đŽŒ‡Wü€3’Kû’¨Čm>"xėõ/-˛ą#RÍą¸‡ŌĮڐ Z…—E—XܓnøˇL#žžėîyĶFa:āå^éáåîŧXŸķ\/Ev^WDö'5ÃSO'PUž xŸīÆU€ž[:Q‡øÜŧ¨w–đ’(¨Eĩr9C LjĒ}Še ^æĖyĸšĨ]‡—ßŪÔąˇŠģžöq+xdێ2SwÁ;‰AđĒ9öđžĩā98@ ˊo…ĖŗŠĢĀlšûzˆŽ›Ÿ"|˙š´ĪÍĶ]ĖĢÔYCဖ+,%ũ ‹ëv{‹ IDAT(Ė š˛‡§| GûrčūIÂUU 8ĖÍJW)ĢîĪ=}œ&'QĻq¤†¤Ėô¨*ŌĮōŌ˛’\zx˙>æŒQ%*x•înG0COO+šš´:`x=87đęđ đ†­UBš;ŽáĢVā‘€&­—fE/'|ËËS ũ&°Ņō™UœŠĸČØAøč\õĩq œ] (?‹ĢGAg\§ũ•ŽŲ öI$*ŠÁDHĖ’¸Í΍áU{ē8Žĸ™IuvđüąČ”C) u¨ĶÂDCd{ũqNFz4hā ž~ŠÆ()ááÕrÆđ^"iāEcpI'aNŋ`å›áĩ¤-ā‘bÃđĸ!ģˆŅ).3ķđ.<ŧ †§Ę˚áÕÕqŒaģÕHĨ~é|ŊĢ9ŧ˛÷%æŌt/§ĪÕĒč§ä™ƒáQ׍‰+,›ÆG Vã•3Ģâ(ŗņĐ ų~ÉsžA2‰î2Ĩˇ‡w­ĄķTjxUôw!ü•iâBâÜŪĶ~` Wņüd_ Ėķō‹2z÷$F˜×žB"ōĻʒDĪ›5đū˜æŌŸCUųûxpv5\mqƒįsxĶIžåüä’k6qmÅģŽåŦ“ŌKĀĢ94*šVŪojŧ Gzâ;fĶ‚NšŨK`Üʝîʨí…IfĐw$/žGâ‘áˆŦ‹ŖXô÷{aQíËÉ)äf_xyOŽˆSēŧ*ëM–™q?WkđFĻâ|‘á°,ę§đÖ#ų?^ƒ—ĪáUmxqi—Žëē¤3NūŽ^ŪĀĶøy[xj3ŧÎwoĶ^QלšÚZ$ú;PNÍúArđXPwĢ8!9ũrSG„9”ˇ´4ä÷{2°ņ~+ˆĨįõŧČÄρ'9ü¤4‚áÉ%ŧņ éۈá]xxį%×lĐȖåōĢ)YŒ ¯ËŅ”á•NMîÛķî īZÃ']@‡úúJkÕV^rp ؄ ‹ŒvŅĸ/.qĪī¤F6—sx¨ŽNđvÖāĄ„‡—žžÃŅ´įNxXÍQk\rŦL\I„Şž§š –×ÚļđŦēŽÕļzŪŒĩÖ7¤9ū ,ŧØF \’ ¨“~7§šˇ%uŋ˜+וcŨ˛jeŊ/öõ3\ŊKđŽæđŒˆĘ‰‡g‚— x‚6𔇗ĩāUÁũāæķ‹xåé;ŧÁr7[øwĖá]ņôŲߓsAļ÷^{Îs <ÖŅx)\gį^9#xXi7'+=o [đĖwîīáÚ^ŧōôŽtĪžåë\—rĪ‹WāũU rK´†3įsaë8É]ģįõu ^~Ī9īÁZŊˇúüŽtæ˛D$)āiĀûoÔŪUęU•jô<†G†ĪxĪ,á]ŒŪ™‡7šÃ›0ŧéŪ jLNßxx÷•ļÖęĩ •[¸Ō™?.ŠG=#­\d˙3ä‹`ķlæáésØ-xĨkaZ÷Ú*Č^Ęđ`|°´=FŪ’*ļ?C|.’ôá‡íšĮØĢíßi#Ņ?„Å )1î˙U‰# \ãišÅí a ¸Äö؆âX& ‚""ũŒ4øž Eī^Ģ* ¯î­NXņS?ļ6j4sÃŲū‚BgȡZŲa˜Ä§ VŠ#åǍŪ $9 ‡Fåę09¤˙t§ßĀ-†­ät\햴Ūđ1×Węč×BĨŋö˙ŧâŋ#˛Ā_×1VCāŌPTŨKõˇ„ˇšđŲ´–šėÂããŊ–`¸S;ģūŌÍqæ[FB=ŧeí€Mđæ}ķçz?ģöJũųo¸<}ĶŠ¸÷ÍđZéī7ėFÍŊ‘xúXxîgīŧÄû7}ũZžã>ŧļŨ;áÍ_?]üAKVNąęĻ+¸cë(ķS}īÆw|xËÖĒđxåâOû3HO Ūŧë/ŊÃ'īæŖ‹öpđ–7ũn]đôÜ{ĮęJ¸7JMŋY¨U784ļۃÁkŠĪw‚—hۏ/Úa÷Š uŋöĀđHŸTˆĪW–žĐĻÖ ŧmۖđDv(w"CĒ Ūpš“š8$ŒĀb&īŦŨ^FđÔo&đ[Āė4 x¨¨D˙0ž ŧŋhļCŠ‹˛ĒbuŽŊÔâyÎ΁ô´Ķ˛:ÂJ9ĘÄț×5›iŽGx…Âȡ(Ķ`ãk†ÛųŲeŧŲ;")VBxēāÕëWm­Pžo[›™#ũ…ījO-āĨg(ĸFĶĒËķKĀûņ„;œ’ûŠ”+ũÜÁĒ˙ d­\ĀãäŲ‘‰Šį* Ãâ(z4y=ŧa´īėúqž!âö“õ6^üŲØ:kBn Īüãī{x…`ëČÄļ§VāÍ8O>ÃË=<”|˜ĨÁ{$–đFęÎđķļŽ;á­ŒÜ^ēÕ$(e×ZЖđė¯ž?‡§ØãZÄb¯ļĨĪO ÁëÅ4žķđ¸˙aCoWį< ŪÃŖ3qJĨ‹šāÁKv’įŗJFą–É0ZĖ}ÃhúÎa{vũøāDÛČīīŋŨĀķßšjoĪ Œ<9ĘŦļ™ķŽûõ’AœgÜĀĨžé<¤ļKsTOKŪé0]Dœ†īŪj¤.H´áMēvoļ…÷Gßjæ<˙eŌŲz/åKĒ Ãƒ´…/üYŲ‚7YÂË vJ"xgkđ0i*cBIŨĩß Û!F–WĢž `/“dŘ­&•ĖØkŊ.åmž"~=$žņŊ™mį<öålģ<ŨĀãô÷%cĨĪ8@đt<'Īn[6ߚﯨÃ+įđŌųåļāņ°"+jŲęš āMÂAēé„Ŧ˜Yĩ‡_(yz%<=ũ ßW˛ßDސ…Ã&\–™/åhĪ!sD†TU(įQŠ=ąZ˙>îvßh7ōå5_>ŧķ*Ėú иķņUiUĘđzŠ Š YŊ˜ü †w@ƒ÷Š{^Ƌ➠¯hāŅ'UŊ“%ŧš‡­Å°u-x-Ģ?wp4‘)ÜIám6šŌwĖĒnõ#ũŽM˜É1ĢÂq°sθ†ĨˆK>;„§šæ‚’>æŠ:°.ĻoETĸâÄŸÄ T­×Lŧ <ŸÛ yú‰ā˛•ô-Ąų$'\H„Č+=„? Ž aÉõq xĀ̰´$‹Ū>É€¤jÖāÁD9g1‡‡ÜÚ놨†ol 1[Ģ3\™!f’ˇōRËđ|ļĖ5¤4Å{M6žō{ââHOØ/ˇļŪī)•ŧ`ŧ¤ZR7¸_âBglîāÁ‹ÔՇũ{ÁkÚ¯xÛKhOŸ†â A!Ŗę°Ī?é‰ĻéŪöe:Cļ\o.†7Äõ’…+æđŽŨh- Jō^ĘđŽ<ŧŗ6<ŽÍelû Ī-āĄCOyx(Ú7€_™CYo ŋ۝O9s„FAIu ˜eEVQ‰ZPî’ú. ŌĀēbM ¯ī3l¯7öOɂšēHWĒ9ÜĶ•qŸ68=VAšbÆŽp°ōaÛj„h^?Āo xiŪĀCwä´O¯ŌēŠ [ĢŽÁ›6đz(VĖž+đ|ļ|äŲI<ŧ‰eeƒ|~YVũūž5xĶŪeįŗ Ā›V€§ëˆ †îAá-r†ā_¯F–§UP…U˜Õa€¨°JžŅ]ũ,¨Ž´„€äŠ;ĮžqŅÛꂰœĄFĀđrXŪe‰LĐ휏 ī“ˆ ŧęH’Ļéķ@ŦÂģjÃc/n.-Âđ¸D'Ŋ0y;­{`püLJGŋWk„)ÛįáũĀĢĩmī*/u—lÅû á Đ…üH™Īi”ũJÄøë Û ŠĪb3 Mrûßãé˜-ŒK$&_‰ax"*9bëû#ĀssxŗÜõžÔO;6SÃÄ%ü?XĶĢŧyķjŠžsÅ=aYWe Ū… ~Ž_š€ˇ”‡‹¨¸›lž?ČN”œ™ŌKĄĒ>æ”#ō+aãq‡¨QˆCĨũŽáW‰æ<]Κđ–üöđM+'ŋŠąÛÃCÄĪ,+Pš „,ę!-–…3Í4;ōy3Á¨<íGAËņyŽŝĄƒ÷*5AōJ(Ū ĩīoިĪXĩꃠn¤›Ėĸ{’­áE;Á4TAđL<5ržÃ“"TĶŦē!đIĶeĒNč\yb‹žęt<ÛɂH"D éblLKaĩ4R;ŗų5ā˯l×øcžQÍËUˇĖ$°WåK:äė_W4î˜×d{xģGŽwl4ãæā’Į>ë=…&YÁ‹Sĸ‹°*ÄH!ĶiöŊ9|2-’R# ôuČqN#Â,Î|qŽ‚÷ë=”ö%WīÁl›…ēš'ÜXœXu‚UîŅŲ3 Ī­Iü 'j(YĨOĒų)–>ÅžhĀģ&ūęēĐŦ­áe'ÁČÁŗmđč)ÁÃĩđXKÉEHĮfŸVđr™YøæânSj¸é4éũžšqžyå^˙ąĪ.âĨŌa¤tÔ_^}ŪJ1´ž{‘áš–§ī†ai:Ĩ@­@­’A§Šb=0<}"ŧ ^äāq~xßÁKo^OĻܯ9:ō0@ÅĒ‹UxZÁMĄdUœNsŨs‘˜Žá&bvw,ebĨ¯Ewyõ‹X 5ŠáUjĐŽĒâ1Ęux)¯ūĄ2;]Â[/mŗ6pšyxūŒáb O3ŧŽžÕ  Y×ō¨ĩžexZĀųûà éM†7Nc­Ã<Έ>Œ% Jáa'ļר¸ē ^%g§ÕĘ$杭Ž”Ú” ąéJÛé˛ņŪo“uĩĩyfN:›s˝,á šÛvE‡›¤Æđ¨[8x…ĸԄį[t[3ĀM!üTĻãUxÔŖ‡ŸķVk)$ ôæōÆ~´_ŨFxüoŖŗ§đĒĒāŊ7xjy5ŧÜ,ā•.ČŠĢø Ķ­áE5ę”{~vāEŌ+;åŖ°|ËAfyéģãgüY…‘ÔĨ mh›ŦÁ‹×ūØd¨l ¯ĸũncŌ{L˙3×aÍūn>į• $ž3<ädxŋ ‚ŨŽŒ`Á ųyž™‚j*úâPyŲáķCUv8Ž-ōÛ]ēļlytj2Qd§“íö~"’ũũOŒ?4Ɵr1%Ä=5šåēŧ ĢŨ7Á Îgŋ ŌjÎooÜ/ã Ŗ ĪGô}2Ąī š‰eaõõäŦN ¸6Ÿ•<}83<æÜé\ØņšJĪâ_AvާŲÎ`ŖOŦd×Ēėy¯×%xėųķįÔ+Jė¤Dūd _•ÍđėŌIQ÷öjxÄėŠ>Ųû‡ODö؏ē°ûõ‰Įĩ ›# †¨_Ā‘NsË<.ä_Ŧ(ɀ÷2.kxŋ VfÛÂÁ; ã ŠģE Ã=!xyŪąK c ÛāȒ͈3ŽžVg5!%?ōPsjúŽĮûBôJąĶ%ûÆôáû§›æČŨāĩÉøĸT—†,ųčø‰Đģ29ö2)Ž:CqėķĻ÷ĶCDY,P;įų×jÄđBĩŖfņ\WYŧđŒ.ũ ÃĶŋ&´Ôķ Ņ„WÂx=˛^ææÄÖđ´`x— x^ļ€wr91]Eq™áí…5<,uô†ˇnЎ:°ÜQĘđK^pĪ ZÃÛņ†"Ā–jÖ9Ķžøãlw÷9 v•=™i9œĻdÛĒĻ/Ã3áiLF/yé˙…ā…MxÃūK…(ˇģ€GfsĮÎrk”­áMŧ †—ĸ9Ķü<æĨ€WĸĒą­ę#öƒi~‰0°ŧƒžĸÁč(äŲVļÖ Į–wŗČķˇgmü3ŗûäšŌJhŽv&”öŧDæéÅ^O^DÃbFÃbl}čo…Ô˙cāéÁŌļ5E /ex‰+âįā„"<—[%˛FŽÛÎđ$ Ø1ŧĶŨp†ŌąWā!­Äđéŗ[ĀÛ<ÛŪ—`ūO/ŲxLBCƒŠŌō",FžF*ėž :ASÕ;;â¸,‰.í„áÖÁķ+x¤#įv7Œ$ÁĢc/¤ŧWAæKx¤įŅ“Ķģo4ŋh ¸Ķa¯UÕ{ĪđÚäõÜyUü'ßĐD$ a3•ž9Ų…XúÎ+x\{Ņjx=†GV4/ûãP[^"8åä*ŧÜÁŧáé ûŽÛ\CčĐ~ØđŽJé ĸ‚ÃëÉŌ¯đ‚#,đČxYv[ģC#šŖĢ!_`wæY"ܚŋ˛–5rŸáËđŧ<˙ã€ˇ!vc†X t[Ųz ^T†1Áģpö,*ĢVđ˛eË[Â˂!w[ģ„Zķ× KįVŨ–ƒ ^?8gx‡ļ oX†Sš~ėVō/­–cÁ{áāéUx¯Wᑅūm†×—–"P…ā)RYs388xdžŧII֋ļ߯–AyvŠįŲ1ˇ<ŧNÖāŅąđųv-o ‹ēč7ß*xŗļEí“A=ã ëžôũIŠezpla20ŧIŲįōŽŧŨDGXášģU• žŧlĀ{íā™đYč†7ŗŋ¨ā}ĒĘļ2m{QB 6,éŪ!MÂFDâ˜î7yQȄPČŗ‰ŲĶPV¸ ĨĖ'1x}Ēį%V’+ŠtĻ5ŧs‚‡ú§ŪÁKŠķ¸ßla|8đ6ˆ>ÁãŠA§đÚ›_uH? fĨDTī Ž "Ĩŋ§ŲhŽč ä¯§š)”ƒ7Ŗą’LëŧšbXŗqüs9dxYéĖŗ‹-Ėŗkām™jūŊĘŠ{@&ПÚķō˜˜zCˇö~)ãiŸáI@ŖŊBœsО ‡qŌ…Ī’ôtāŅŊ*wU<' Fēßyũ×[, \ŗžˇØ^wŽÅíEÔžq÷ĩ€úŌōŽW/1aĻŖ‘Ĩp ģč‚—Éhė9ŗ/)Ė5™OŖCĸĻlöD ÄJĀ´Ėo^’Ú Ī|ēxæĸĖÕ­īņÁÄÁ[ķâ[ųsē’Ôžš äTÍšēŪōBšMf™¯wĩ¸{˛ũ~Wāmh'1Ë>ĪđZJŠĀā IDAT“ˇõiîæ6sWa.įkđVâŲ ŧÎ’ˇōˇ„7_ÂÃčwŪ–äoņZ4€|GÖÎß:ÖâÂ\OŽ)+~Ģđ֎\ʃÁ[ę9›āŊZžVÁĢ|7›Xûßny™× ¯ē¤Á5GœnUx¨ėŪö›ˇ„טŠ7Á;[N"ÕÔ\Ŋ í†Íģa‹ R´x­p>Šn,,ÁvđZĢę]'÷oõģ€Į™7œôx—[Đtđ6ĮZ^ãŨ´Ų8ҟÜ|ĖĒÜ Ūôžā9  #ĩZ;\ßĨ)ļJkūģUš}ėëũÁ_yē5ŧ†#Í:ŧ—÷X‰ũ&šĩ’°%<:—Õ/™øŖ„wkŲž?9Ų—‘ŸĨ€kÍÚÜøŨn ¯áHŗĘęōŖ€—”īŠWb]ļŊ=ß ÔÂf?Ņö˙*|Lœõįī i<—`7D>:vd/…Wtéčr/Œž›ô}Ũ1â8ČTИ~æŗbW"ŗí}Âû #€ŽƒĘÁ+†ŖâŌwžąÅ Cú3]ˆc•ÆÉ'ôĸũß=‹MŦōv¸†‹—NØÉlU‰_Āk Ŋ^cEri~uũ> l Ī0<Îf9ō8į\uĻ 6Fžb„`hv3Œ&ėJ] ߇ 'Ų‰‚L/;ÄÛ^6ØõIÉá‡Ķ5ėuxjŧå€{Õf7ęzųŪd{xqė˛$:xė=ŒwĀđāj‹ō †s%æÔËáŨ—ĻĐ變§zޟKčSI÷)ĩM™ sĘËʅ+ûëBŊŗfž —qtq˧“å!jũbÉļ^ũŠt8guŋ^˙ĀBމšh“w„§íAsËcxh xŪɸsĩ€ō¯‘ž87;ž¤&čLJågGaĖ>‘[/K|íG^Ōg—‰lß&Fô–š~íõ“ķÕđ_yĨWĮ;x­$|˙ŧZuĒNŌŲtüģĀ“€ˇĶ€§đ ÃS3¸q˛mJ9ŖvȎ'ixsPe×zË.\¸ĄĶ8Ī‹žĖ gėŅ/"xĪ—:PŖ{/ܯ~œÕīØëĒũTKžU ƒēM[ĩÛÃĶ x•’œķf˛ū<›ŧ5wCâxĪÔđŦT9|ž°ŗCđ|dUCēĀÔÁã=‚ĶiŠĖīsÍׁú6šē­ßˆjš˛;Ā[QPOŨƒ Ŋ¨öVáĩW2€ÜŊå9xÂÁ+ÃĶKx1ôŧ™]ĀûÜÁÅ×đrĀã-h;FīUįNœŗŽ(į447DŨŪĘBéi}Hŧ Ĩo ī¯k¸ã!›é^  sl4D/kĀÃæh^ ŪÔÁãƒvƒø"¯áMŪrōkšžéíá­ČŠ{XW øūáũÚ+[ĀÃ`ˇlyr¯ xĸˇĨ%<ÎųéJØTđ|öôŠĪŧ2đĪ/XŪŅßë×uŧÅãMđĻWå^āÉ&ŧ¯Ųõzoœ:xY™ B-6ĀË^mē‚ėcxžģ4Éŧåĩ\Šß^õéÍđ6Ô ‚ÜâĀ-Ģéyã)Ŋ˙*¯áņ¨AđLcĖcˇ%/¤G1Š(EUb†'šcŸqm5Ā;]ƒ×Uú@/öl‡×čȄ!Ŋ|íö–đŨ÷&xn`} xė9ŽÂÎ<ûųŪ×P’šUūŖĒáđæíđĐō$Ã㋎ā%~ž=øa ŧį;û¸÷č‘Wöc¤qááũN^ô"ˆp*YPĩ¨Ā ķÃĀ4Ų¯VGüđ6]ēŧ„úä$AÔH¯†gÂSœųį€įÃņú•lĀ{ÅđōŧŨĩ–GzŪ:<ã^~Véa;ŗ5xeOž@XāW?™~DPxåAĪË×õ#:ûãĀ’™m<ŨAũaΤ´õ$ÔäYyøå/‚Ō'ķۇœrĐĪܕ†…ËĨŸÖ†ĸKˇ€G—dOŸzQ—Cķ“ŽL¸ ęų#‚×S\’Įrˇ *xÅŪ[ø|1ßÔōŸ<Î 5zŸíJúĘčų-t_%ĸđ“5ÔXíKĢPÄĘ]ēŲŨâ:xĩ°BDZmŨį“OËÎ0Û—Ņą?‘É~ uŗTp+˜dF Ú’më“ūVÁ́Ŧ 3ģ6ú‚ :¨´§ƒÜÕËjĀë6ā!Ļ_<ąˆWiĀ“(jŖbŋd=Ö%zJßîāÁÚFˇEĐ r! í*šĶįÂØS=ŗ3œo7D˜ZĸmŖčŌ đnfwUŪĖėĩŦ kåāuň/Ž=/Áđą Ķė„}‚:*py™‹Ņ]¸pŠŲTŖfkfŋ¤Oۉ×ā Ā3 ;xŠuĨ žex1āAč;xd(aārīsĸˆ!Ëé5˙đ8Æßr$RHđhVTģd_ē:LËĸK¯}‘0ĘXôéj‘Rđ"˛1Ų|_öøq'ŲúÉoŽB/Ã"€ūË'‘į(ÄcĪJ)žÉ<xScžø)‚}Ü —KĄÛĻ‘&—ē‚WāĻĮąƒ7cxƒG8اž„šČRÁ¯´‚7ÆTv>Ŋ4ƒ`—Ē+n°,ētŧđŪā­Ëŧ”eđ ėītĸƒNv΅Ēđ‚ĪõŊ8Oĩ,BĶe}h†`Š'ũ%ŧˡw[DĄbg´€įĘĨŋŧXĀ –đ„°ÎPpîāÍ\z„ŪĸåYXÚņyú†>ļŧ\ĀĢ‹.=ŧ;ω}õjë…âÅĐCŠuONOtnl¤Ä‹ŨFKZō˜g^)—đ$Šæ˙7’\ƒG&МFÔ+ČWāÍsė†ė37b…įü-ŠhQļ„wˇė%ŧ"XĀŗ\(˙ûŋniy›āē‚­Ā#Ũ<4āø­kz÷oķÚâŨĨՇn ^ĩđúkoL𞸞Ũą-đT 7Úxcíác4Í5ā‰ÖÕä{€ˇ…Č­Ĩ^•ĮÁËėņb‚^Ģģ~ۄąžĒā҄҄7;Ĩ˜>–Č&ŧvOŒ^Ģ˙ø U8IUAPĘ@ļ†÷Ę((jŌ°2RĢ*¯‡Ų–áEļžmÁ;æŠ8~YÁËOí°ŠhiĀSíwŪüãnđBTۋ)Ãõxƒã9§œ™}GJ˛ģŅę´uJ2Ę^Ęđ†<ģīp^ŧÔ¯°ãŪOžmđ‚ļɚéē @Į}I*÷čįĐ4ưèÂ<ËÂ%ŧĸģ€GC3™SŊ„GJ2Áûū^x:83ϝū5Ÿ æø ekxe õ\Ī‹Į˛c‘Ūî+x_wũäDŧ25"ąėCƒÆĒģĖá9čCJą.[Ã+‚qŽ‘–Dæöœ€Œ§ŗŧčųY_dAG4Ŧ9ŒČĻavwžø‰Íūē.ē'¯Í_°áf–íSn/͐+Îí”FŊĶs”pˆą†Fīhäų“ŲQ`KQtOžî<öĸđs$z…ī6g‹cíîHŦs¨ė˜Fļ:bĶBÃ}sėYĩ7Ķ\Ĩ¸Ļûr+x9ō¯M Ū%āaAÜÁ“3 w/™ņŊ˜wƒSš7•Œh†!ĒøDF';Â+…Ų‘‘č{V”ž—…Z&^žŋÅĘCņīŅãOW¯æ.đZŽKŋ{]yīβũ˜ŽĶ92˙ĨšM Ūøĩƒ7 xUD‹ĖJĀĶeāÉQ6‚)JVåØûibĄˇ•—›~øĮR==Öeˇ÷¨“yœxˆŨPS";Ch$4ˆQãôͧÅaxaĸ|“@\įŌõ´ø4Mkēkī-mîƒįįpz­áe<˜É đæĪžŧi / —B_Ŗ]îŌâ$T(8ŌgĪiîQöœˆ†ėûsÚĩvæųāĩ¸ĪLëŠgí=7˛žąëÄ6qžÛÁ+ ž/—đā0)›đæ xy áËČAįēmHĮ†ŌíHč|ÂõlĒĨe?ž}‚w ˛~œŸáFÍ>uåžā]Ú%Ž‹ÆéŽ—­á•Áxŗgæo‚— %ž*xļ‚סŌ|Jđ„ŋ8fx’áŊ™‚7Ŋœŧņ8]ÂKÍ-áÍ뇝—đđŠÂģ^$‘Ū´†'Ūážļs„>§ošŅŽŅ*C†w1ŊLšžD°EjéļīŒT/ĶxSˇ…R x‰ ‰tąÅÃ+ēČxJhË F]/CĨz(34v×đ8L”āņ¤tŨåÃ6ŧĪÜŪÜ> ŧ÷™•žwfØûZķ$ ē›ā™ž6Ū_ÔđHûŧŠ w…@ ƒƒįg˙Ã3G3ČWፆvWfá›ôj0˜–Wāš<—­ŗíļđfĶ]/+đĖĻŖĘđ& ¨.đ‚UxŸÖđÂQcÂ@häwŅmšBĩÁq„áũ āq0–îp'ĸ į!Ā̞lW×*Nv|2YMõ!öCģâPvr—ëˆÕ֘›ĻWĖÁëáåĪĒØ{™­đäÅ´‚×' Ŗ ī…}éāŗJUI+xߩበ­áIģhyE‡-Áëaũ ŧė$ž”â˜:;"Ę#¯| ÅsÕŅØ_Žü)ŌŖėŅ&G’ŒīˇÁ´Üř†Äæ`đŌ–ŨđŊž4pî^$ iOĪ” [ū % Ķ,Üí#˛j īāØž6āAIž:x¤Ü;x¤î×đ¤„'ƒg#/uåAšÛ6o"+‚áį*ÎhgĪéūĘ@r‰I^ĩ*|Ԅgĸža/ēũnW E8mOÜ| xë°ö›")ā™Ž8$Ēĸ'ĸų>iaā&ôÙ Fœch.âdĀđâKĀŖ;;ĨšĄĮŧīGÁđcŧ• /Å~N~IđN]ĒËī,āĄČ āÍĖ`@ö3 ؅ovQpÔâĶ1āĐÛŲ /␚´Dd~üĻOW9ĖúÁøæ [Âk—Ô āúĪöžh¨Év¤…WûĻūūĀGŨI1î7š›séWR’Fįåą ē"\íÕž•Ģđ$&î%ŧÉ—ÜÕĐŧr=č͌Ī%íjx%^unz%Õt153‚ËŠ!Ķõ˜#jíčų7GŨ ŧĨ¸=Eú%žļaŠ =Ëú՚Ÿ|ŧkâÅÆwîKîZ^q+x—–Å}TLÛŪ{§­šŋ“{tŨ [Â+¸xJđÂÃscuq+x\ÃĨhëļ— Xg5“m6žŋIŲ^ąœ0^0â×­á͛đ6yÆ_.†ŽŗúJ>xđ˛uđbŪyuÛZzkxĐū¯…WÉŪ7Cž•l ī’áņ^Á/e^p”›ŸyKģ>!Z]€ËĪîīC—-á]žáÜ,‘gš¨8AËS[ú Á{&‹ŽÂČ"8 åŽuŽf•Ll•”v9æ]••‚ˆŧÃCē*OāĒX-,ÜĮœŠôbcʃŪ~ī‘HíÁžÖ~N83ŠB2įbŸ”;ŦÁ9xAËW,Y7/W&Kk…ĶoDļ„Į G9ח=ͨU<#DÁ‰§”éŧč;•Ąō>OųŒ}Jüė0°Bū-5L‘uJûÅaPŠšSæą,áÉ 9ųęhÕxIÖzÔV‹û÷([Â;cxŧõpŠ”æˆV ŲKŧĮ LGŅ•ķĖÚGÂūT"ƒQ×OBąG&DôÄûi';ėųžM^ÔQ7GÕ¸°—vqĪ Ô–×áƒdCl•-ኃp†É1úZ —đ|}–÷ßŪ”á!j]ÜŠ*¯+=OĘ/iŧ#xåēqX_BŽ‚°¨ ĪÍŪßĐį0bÂČP ā•.āaP]•í}UN›Ųc°O?´FĄ6:<ÆzōīŠû^ÖA…ĖOJy Ē2EˇuđŠīČ œhĐIoļ€Įétߎ+xHˇ´2ŠLækĶũ1BŦƒĮ? °†ęC‡÷jõŊ+ÉC;,Eļī˙ˇÔq´DúbņüšOĪw;ŲūSa¨z…įG…g<Â?LÜČ3>­á‘M8xĘ)͋oÉÂđPŨJ—.]9ūEz‡ žFa•wĮ˛l/hÂ{yã‰a$v¨‘ Ãėw’]‘ xY |qxŠåÆÅžČ Ėŗ@Æ’w¤Y?8õš,Zá•Ōz„ˆáÉ%ŧYŲ1„˜ôŧpņחˇ˙Ļņ ›oE)ķ“čŒgĨH˛uũūOĨF‘ÁäéŽXí§4Ę2ŧ:Cŗu& ā!:`os{ IDATúa /­á뇯¸)íįäĨ/^!ÖīXf!](ČööáîI]„e=ɎXd Ė3Ą†i O4ā!f…áŅ;ũ⛁wSØÛ÷Ĩ§Ū¯ŸTJ‚ŪŽX8+ ¤Ž?4ĸ…z+ŋ4á ģŸNĪģ\÷MMß4ŧŊ°ņĮŨ­Á ŋFŠØā…ˆįY´ŧK§į•ŋŋđšUéŪÍ2{~n‚}å‘m;ēDUŖ‘dņ2f…áoRÚ÷#ŧ‹žJČĪ@ˆūĶŪŽ89”jƒ™uâŠŦūQ K…CJĶKNžžŸ ūā-ĶKCJ§ßb1Į#ZEdÅ#Oû‰ĖčĘËg}Á1+Įū>› 8­ü¨ŨwũūåVđŪײEHe^Č éJĨ,d&_ŖavĖVėē€+ŽkôœķxŊšŧĒ[9÷†čAŽįŽRõTltfĮ {øAåVđĒĩWá"jDDtî)Ōâ[&[Âsn‹ĩ[ƒ đoDD đŽŦãļû~ ˛%<÷NŊÅWÃ[(Ty#§ģâ_#+gãáģ]ę‡'[›5ū­*\čFˇŨ/ĀŋĨŦ߇5Jۃl Ī)ĒÍũŅĒŪĐâ•ŧ†SgečËĘĨŽų‰-%žųoP^ČuˇÅ'nįlܒ§üC’-á9÷ÁÛÂĢDVžŗˇ‡÷Íh–[˖đÜMlīĒY^OġWí0ĩf^û`d;xĨPČŸ¸ŅZŪâÛÂĢĸ?xˆģĪׂžĸūŽĮ!Đč[ĀÛ6Tô#‚G7—‘ė$TŠ>Ķ;Pŗ‘ޝũ`æ;F@˛OY W>üûoZÂ+$+zđYʋ@žÍô~ŨŪS¯ėŠėY8Ö4"f{^'P „ËLáK#Rš~ĀÛvĄ˛jČ<önÍËîŪ…¨™^^„(Á2Îá~2i.‚tšpЎŦûēÆŽ¯Ä`hDXIpķģĄ ^ O ÁĨŋiŲŪđöą49+‚1ÁŗN7„2CJ_ƒ•K5%Sj–Ę"ŪJĀüžĐ5˛čĘLF‰ĩI2đFZfĒ Ã“!ĸ8 KÕÕÛáeB<6]ę{ŦXŧ=<¸!•{5ŧéĀŖ˙}Mđœ-åđō,ŖįsíR#tU//^/G&O;ĨfÚäéįåĶäĨŊŦį%/TUĶ{ĘŗI8"D%›ļ<åąĢ‡(ØÔ.›ā•žË-Č&öũZm Ūeŗ 5Œ‰uđ¤ÔD đĻXžœëĐĨņtŪ ô6îGÚņL?ãŦ_ũ€ZčB˜Õ(JįôßŗŨŽ}rđHĸË7švĒ +’ë>'å^¯–˞)ÂŲüˆāa&xãk”ī`%KËjm›5š-<|ũĖ™¨<—š{Œhĸ'Īr†Weߍc+į\ČrĩrĻĐÁe’ÆsÎTL­Ú(™įš.ũĮ`[ŋāĩô¯„^͙’ëÁfx­™.,/¤šėį4gśx°†Ņ°¨ŧ VųļđĖ <šü%< $ ¯<đOŲŨfRŋBËcxsũīë$ŗą<xô˜§Ļ”R#‚͸ü¨&_íbŗģĀ›#Ã{ĨãĮ+.|+åĨzĶ„įÚņ}ĀËŨÎę Čŧ%ŧˆáEđūđ×ä\WđÚÆũMđØ_ p+Ž%ĢŠ ‹Ļ÷ĄƒˇÁ¨ÜŪ¯œĒâāQ¯:EũjÂ\ˇÅq;iĀž$WZ^Äžˆ ÁüŽō[ƒgŧ“ĐÁãĢæTÛWކāđÛw†ˇr§ky VŪģ6ÁÆļæŲ¯œ’ŧŧŽāÍ-ΏؖáũņlŧŒ•d˙Zx‘`x¨ŽDM–—ō6Ā3áĪųĻÚÖJ7Á›m„ˇĻ Ũ?ŧ¯^ŅÅŦ xãK×ōā‹i—đ†\iÍļØÂŽ4BAôfxÂŧ‚¯Ŧr[\“W:üĮޞ…‹jŒ~[Á[,×ā­ ÷œq™_VÆ^Šå€Ą^…ˇķ0ßĀÍ?˙¯^kˇ…ûĩŧ/ŅmK§įĩƒ=r( —Ûä艧=KĪôĄ*|sÔ;"Ŧö|dG_ō:串]ˇuOVķí­yŧŽX5÷/SģĘÚ:øô01]UnBļ-ŧ€e†¤œŦ”áųo×áÁ đķ‘^¸B Â1W˛ŠŨ[āy>b™‘˙WŽōII Ë?Č€uđ¨úĨ(žxŧŒ†2ŦĒDa>´ãSÔŪ}Ecĩ Šī˛.‡Dū3Îö¸ĸ@ß<â^žî¸õŧŽFitäEEˇįg'Ũ?ĘúĄŸÃ15\ōãy`›cÃö—_ȡ[Ā Æ˙om†ĮĘ5lž:KöŒ\ŋš.ūôĀįqÔÛt};ŋģtõ˙&d^įĸīÛȡjđfRwĪõQ ôĐû˛đuĪ3év‚,(ü ̎sô™ōJ2Ųôé>ÁdÔÜī KŨkjlRĘɅæ8œĘ<“ސEÍĪåĨƒGtĮ€7%x#zŊY§Ēŧ†ËØ˙a¯gÂĄ@€g<:ēP)#ģīLLéK´nę\*ļ>ũ‘žEí]1|L§įšF,NŽö{âZ‰}Ÿ އÔZŠÔ?ܰiúŽ^R¨ŧv ;ŋ„ģMæ'{‚—íz‡d…’SĀëûŲy|Áđđ„ ŖcÜ*āĨ—iéā¯ÂkQ˛8žŌš6ŧS2R<ƚ"9{|Wđ¸æ$j7ĄĀWl1Œpęí )čōˆĢÚ8x\8cxOÍĻ[Á[/đNŌnŌ”Ą›ŋLfEh$Á3žÉ';íëŽ~"%>B0;4ČS~EŧđĘn "NČđ2TÉV‚W…Ķ€—4ŗÁ‡kS\›m>ąD‡@T¨ø9ˆ‚!ŌP’KMėˆ^rz^đēÖķ‚É/zŪŦšmķ3ÃđhåzJīÜMHŋ?XxkĮ0<×Ú*xa‹qWŗKĮ‚W.Ō¤p^ū{”o!ŧ3†‡įWāÕökcû$m^ŸņíUņVn#+™ģ?Lx܁¯Ākũt ŧŲĘõĩ]ĒŖļČXîmß>ŗÆoQŪļĐ{†§î¯ą0ÜvŠ•sEŨrn¯é*p[xåü­áņ k¸b9x㇁Wû<¤ËH„‡”ēđîí˜o¯ôõqhū$­EÅĪÍļrīĘ^ÝāÍVđØVMīÐ-áyÉ'*ë$Ąā$cŲ!Ęŋ™ã ôąmU!ēâįûxNFfWįz08Áš†÷BĄ~=™{2 “˙ $žåÝīāā9ĶđŲÜ B#, ánûŽÛpĻ}æ'áĪv…ŠTg(°a#‚abáˇÍđ|ļHõøû oLđú¯Æ2cxj<3!& dÂ`<˛J;C26Ę}5¤ÎZ ØāžGÅŽĖ˛ŋĀķŠyē eˇ†÷Ū˛Dm'[à ãé” ˆ‹°†ÄyÁđdZŧiŒŗOSŽ‘uƒ”Û'Üi÷ēũXęWŽú'8eXĘčŒ9éŅĪ$ʧĖJÅÄî īĘ{Ÿ.ųđ&ČM‡äîąĒf[ĀÃlĢfī ņiYŽU0‚§*bį c‰š+’ā%YŅÎFz^ÂEwЧ^öœúģö-ĘCᰈ“˙ˆŒåĄå>÷Oš‡†B¸\ ZĒØÍ1‹Ú˛­˛íÂâ&”x€÷ųŪ…ë^!>-ģpđÆēT¨äā•jʼnáijœæĻ€?íLĖŽėˆ|VėĢ|š#Št$9cųPĢ™í4îåVđ6†œ7ā-Wƒ’…~|īđĐō2ß DņdĪ:xĩ@ŸãĶ2¸Vđ$ŗĮČčgė˙…x¸/ĒĶ،|öoFRˇ8{žÎ‹”a§P3úϘāĨD\×ËV‹I~áģpŪr5Č(ģväí}ĩ<í™PĢđ„ƒG-O„ąĘ­fYà ŧ˜Zį ûyđ9 Õø"-^nB„ūMŗã)Üęã4ÃâHp†ŒåĶ.gŊģZWá)÷ĐXAXē#Á"6Ŗ9Ŋ_kėŽĀÛŧSxe%bxeÖđĖŪ^$%”[xđ’õ<wxųšƒ7ŧøuZ[×ō|öĒ™ÃIRwFģÎP4-ŗŋŪũÁ̤¯X>[Âkģxčļ/'(°O xI īo,ÆŦžŽášMā|ü?Sī.UD đWv03ĀŗHÆ-Ĩƒ§^åeOÁíqĻīlÛn„×ēÔP‹ÃŪ™Fɀø_jx'a\éy€gü<5Žáb¯ōRôƒYæĶĶL%rbiŅ x¤ęE"Uj’œąüžā­Į_}#đ Á3ŧŦ‚/öS†7 =đ_¯ø3ž0jxj OŸÔđŠÄÃ+Ûd\¨†'Â^ڀ—ũõ ĢŌą~iaŠ\S’˛ŪeÛ,đĀđĻ—ÔąÆņÁšlƒ7E|šƒG¯ÎŨ„ÁŪūoLŨ6G ĶN4Ęx#šG¨ÕԜËđr¸5ŧHĩÁKüŽũ'^)SĪūĖV~ÉÆą &ĘųÚŪúĒōEøD>ŧâ&^pJđÎŪÁ*ŧāœāÅ9īQĐ8ք§Oåic°pzŧÜÔđ¸bM/‘mđNãaŅ뉔}"UĄî+ŨŪFüoĮå)‰Ū'$ëđ{: +†îP¨ÅŠE^Ã;[÷ú-‚ÅVË=Īļ¨sŅ™\čŽRŖžcaĀîžãõ“ņi9ž5á… xŗi īĐĒ/sJ‹šIķ˜7ˇđĢáŋŪ”žG uÁ‡Á)Ö0.Ø@Ļi§čv"V‰¤ÜĸŽîyÅŗB ܊Tšo蝏JßKĀ$ËÂ,ȤƒĮíų$Zx,'Öü;ē•gכrql /Ųŋô“(HH×ãD";đ&‰ä’OĶSĶôįŧÅŊ’z1w…1<˛6CėāŠãRÎS{ŒC§<´ŧ“zÂ(ÃVxęœÚ)+ā|F'ŧR`0ŽÉdš¤Ŋ„‚ō“4)9ž 3ĢrMœķ´|܉‚ų„lMg[ÆYįŒĪFąs4 ‹1˙lķÛgSˇqŊ#ŧ5á‘!ĀĒ=ÂúôžBųdúĨE_ؑLväúēˆt/žé‚¯,ÍB/ã‚JéœāÅ6č% ųĩš`˜,‚œáQûįåq xåŊĀ+߇ÜV‚åŪˇ Aöņ‘ĸĮÖ_`O:‘!ņŧô#>éwrĻbd)ŧ{˛™Ô>R  “ <%Å˙bŊ*į[dĘ'}ĪsgAŋa/`;xĢ{ŋ÷ėˆ}/Âé„đ$wÁ5‘ÍŽƒaVzƏuĀų|ŦéˆC†J&¨ų" ˛ŋâđ(ÄĻ7Úæ—ĸÛ1ĪĖag8ĶĮå>b1ö…´îßnŲm[āUĄÄeëi?x1=idĻ2™„é>€‡L­™oRÄŪčī|ŦįEŧœėĩ:žl ou5Z6^jĀ[[Ų~šŨŠ?D‘¤,Đđ(mŠy/žØ&ŌfiÂ{Ŋ¯áoˇŪVwîoēúæĘā]l¯ždZ#?Äaķörwxĩl‚go‚§ļûęXîoļ Ūژ×īÍō͏ ĸ×}Â[“ꨕÁļáíõû /ŊŧiēĘŠížú–má5ŌcŒî Ūˇ_ļ„÷šgÉō9Á.m)‚]Éa nŒûŧ›$ę”22HģZ õ”ô𾟐U9Iė´ėX4ƒ]+ÛŖĪ™æãƒ÷rãa.ß}ŲC6őí¤e¯ëŖT īĨĀ÷†áPaAÃķŗ P6ĻįWœĀKŋOđF†SöáĘ0ĩž[”Ü ­îĶš ãņ”zo¤ŸÁEę…)í—đbĪūĖø›„SĪęĄŸöĨũũ‚'8/*xrÎËáG!íNŒ#ې.}¸õ˜ŋ”ã|fĐ Ī|=ÚŪ“ŧeÂ2Eövėúe@íPcĶq[šmôöƒËÖđAŦ vzbx؈9bīą)ę)Œá!92ąTĶtnú’ÂrÔ°‰^XŠÆcėNĮ2ŌΧ<nŋũĩn ¯-zâ!Jm /´ž.LOģÍgo^ôɜˇR^OĨėĩCđÎĶ|^Đh‰ČdûMą§Î¤P?V>ˇŋÖ­á™uGZ ĮÖ#¯ ŧ2ŨođÚĩˇ§}ķ™ 6Ā+oVÁ‹Í| /#~eW1ˇQ´|ąũÛn3ÛÎįsŨÖrÎ|Ā3ŨxsĀ“2×đ ;ĖÎuĪmŸˇ y[ÛqËsuė/žkˇí‡qųgŪĢUx¨Į—æāiR sßÁK|Ā>ÃāŅŋæAáĩœô.đ‚›žmkx'ĪįOĪVá圐ŨÖđLg O3ŧĐŽĀ+DŪFËønrŧŲĘqöZx7§5Ŋ<đÎ+xáŲįÕÄĨU-Ī/cžõđp-)ōīšČÁ3˜]GvE^| 3­ô’Gž>ÜĨŽßķ:ˆMáa5{AúxÎ1…Bkɏ¸ÖĢÖܸĨƒWc]L×Āû'uĶm¯ôtwŸTÚRŽQū4§Ūz[ ĪQxÁÁ;gxzŽĢ .FoWáŅĪ954iWđ6dõk—‘Ųy62v~Paģ !&B&Ÿųåŗ)ôĄDL…č‰Āf*IBƒļڝ,,Ä`Ĩ`ĐäÔîyŠõŸkā}­nē íābIčĮE”L˛ī%ũŨĀÃl¤ģj4ҁ_ÔÆ Nŧ•…Ą.RĀ;ŧß)j éoÕÄÔđnå͗åįŽĸĄL4Ō”¤đķ7;22ũžĖLĮמŲĐĻqYJmõPt‚×{æs0rņb@.ŸxVŠceŊNąK6Ú,$=OĢrđ$ûŌmnŌΡ÷’ōgŠ.ŗ#/ D_ \€ĻŸ9{ėGr’ĸ8Ž2ĖŲļōbrIæŲâĘž†;]ú;uA6rpVMÁíā(XĘĩU&fžĘÃëųd´@ųaŨQÎ4ÆMéwĨĢGÅŋõizķËW\Â*ZN3Ī–\HŠe…0Oe¤¨5GŠā%ŌĀ;ãTš=ŲąIĐnH”q3ŽŽžØ X‹:*…Ū•‰~}úÍ3A#YĩĒ‚L¯¨w;2yŠėēŗ3yH Ķ ^؈ĩŪžäČų‚l–đr†ČGåã-:!Ē Ą–i¨ČrÜ;¤uŽ ƒ §č,(dLĮ ‚(ŗrBŨ 9 ˙XĘ1=(‰¤éS}ėā‰'Ôd§sđšíą´_öOüO O •(šr;į3F+=™\$ûĶQ2ĩ…ņ­’Ä/āqmŋ)ʃŧāĨrđčÕ<”‚ŠÆĒYą˙ã22.™pĘÃô8į㨠Ãë,„IæíĒeŨÆX#Js܎"õæ÷8ûôŨ,EÔ IDATŒëā­‰>VoaŪø><ę QO ĀŨ^ͯƒ—:xųŠZŽbAHŠ;‡ûđ˜/÷¯‡BL"ĐŠœ,Ļũ‚Vān}K$Wdz› YŅŲĻ0F%ĢđB :°—đ‚%ŧĮäŌũ€æĢôÜÁCŨ‚Ģđ.Qô¸^ xŗ‚ķ< ŧ–ë6đķb{I9šģ-*&ģPŌü¸j™J!úvū˛ /ŧų*<ãāITĖ x#҃dN*†—?ŧ–jjĶkęXŦ õĒ[|YcĖ<ƒ2„Õ„qņięĨƒá/ x%/)Îí*ŧĪđö„7CiNĀ+¨]žđžžŲ3ôôwâ¤ÅBȡŒĒ€áŨáõš†cŦÂûI"< auËr­Ã+ūĻ ORG%õá…“†÷˙…W^Ōˇp°ŋ+<”ƒė‡gdPWđ0eWāqËķ­>%xŋV8(}u۟7áŨÖ2<ęVÜmíCÁk“­#0Vōql! xĘAŪ%’ŦĀûĖéyĨzËŦø×1Š.ęį.꾆÷“ŧ?ãŲVVÆžiÂkŋ €w )ÅmÜÁ^!ĢÎŌĸœųsøų;xA ¯˛0.+xŗ%ŧ|oŽęāÁ§ú*<šm/QAˆáÍ>Lxœs[AŠ ”°čdŊ'jhēęt4ŗÅÁ#=ČwG¤‰˜WסּģÃŌpxda …Ē<˛*¨EŪk‚'/͐á]| -īVRŠOŪs”ƒ$›åŇzŅdĪũŖ0zFÖaA˙’ŒfŲ@N椔 Ž.“ĸšœAĪ#ۖZč€áaQ ųæJgž“…!/r†go .>ԖwGÉėkĶËB,Mx9ā…›>AÍd ČÂNüh¯ŖŊĖ'SĶ?ĩØčøš—)Kva:5žĨ~OæĪđĨDŽŗ“<›Đ4#Ėôē“Ež -īqϊÂb'ÂUŌõŒĖ$ÁÃj}rė‹#ß'1:ō2‰´XU{Ę+Љ0ûšĸF*8>ŸˆûČĢô؏´ōÆC,ûˇÉĮoƒčRÖĢ^eXÆb,VՆއ›N;ëv9ū!xÄö Ãę"Ē-h=÷GofĮ×/‹vĩéãûŖ‡—ÚŸĩ—)Ž%¸Ū5ō{ī‹ĪŽ{ŠLūoƒĖė۟_÷ū~øx%k¤j“ûxňâڍuėíTio&××&=ŧ›öbN?ĘOoãâë>Đüãô–ūČ$ oų?Ā{ųŧw?Ā{ųVÂCŅ={EŪIžđ8oŪõūUī§Ūîˇ+ĩŖĩ×ÔĘ_WJëŽ8ßKnTû-†ˇî:ģĒ _qâhÂsŅU‹ĒÚÉĘąF­üØkä#€đŋŧ*æŠCádĨø-Ã[đŊ^{ĐU- <åū¨ÖĮ^ä‹ÚÆ8ļ1FŽ4áëŗH|4đ*Šá­dŧķMđ\ūũ‚gV–rŧÆbŗrnõc‡×Ŧ |{xĶßox+XjŸˇ+đV˙>ÂĶ*“æH\dSÔÛ´gČÛÛ<ĻōyģmËk¯ÜÃĮo"/{.x*‚¯:V |i Īėī+#Ë'Ą”QÄâˆ}Vņ›āśā9÷­^ĶÂCˆĸ¯’eˇ÷ČK=Ũ1ĮzOHí‚āų¨x™=åĖĄb_FúP1ÜÀ”c‘…žũR9xČ×č*͗ķžsøxāÉxœõKÍ@ML ’4FĎ<ڕŗü’ÚPfĶšrÂeË.ā ßüXīí i/’0;2ƚqņ\yYW‰úĄVĄ5žUú;0A"ŠUé—ĒÃfF‹ŦŊ#ŧû˛ o)2–yÁ™ L¨&ÅQ(' //O¤œÎ/ ¸,"%ō4+ WЉöܔˆęđęĸß}ęĮØ­(žHd˞s’}•{Ú#x~"M§ÜHoĩ/2ß Ū7“QĻThyŽPi¨R†7uđzž’Č xc­Ą5Ļ)‘-2Ü}øÉôŌ”AĮį2ІpÉv—Jįæq€Šą¨_3ĮĖ#€N!ŠÂ4y´]Ņ–đLķ¸ëˇŖLJuVÃ#,¨)S‹WāRgđ$'Ø–"ä(­|V d ĩvĮ1œWéˆ<;;Wh9›Í &Œņ ^ˊ~ŠŲ65€N7^ˇhV™Õ‹įŧ‡FJ”rđQáāÁ11­āa夂‡ !Âķ%ÃÃûĸ…Æ“ xįŊŒ•ŧtoj,B­BnĶ(ūĸL`>3ƒƒ‰Ŋõ@ĩ]ŅÖđ‹Ų:ŧáúņ"pŌŽáE ĪOÎō€āųúÄkÂKąô´„‡ˆxrē“öķĀļÁS\1VMßÔđŌb‡”RmW´-<Õü[ļŧj„h=ųũ Á›TŨļ|ĸĻžūZM­Jˆą E8uäęuŪđ<ŧŋ l^ˆ| ČßAš!Ļ";Ĩ™gî¨īŅ‘rūNđl4ÖfÍ:ŧė}Á‹ë cĀđ¨ÛĻy Ī˙>ôŧų ŧ€áEĸ‚7ũ;Ā“Îēo xÆ7V¸‚rQ¨ÔDîĸ&OžøũTQÅcĖé¤9Jãl@Ŗ­ CSEąPy  āÁНeėöHÍīlžįšCeõáZå]=é5ĶÄ^ ?/°"nAˇĪü¯PFę1͏ÎũŠ€—Ã?āL¸aMh>Æl)/’,ŧSĄ €gXßÖ~Ξ¯”Ņ=yNŸÃh+÷Ų ÷ƒJXžĨZŒt´âēįÛ_`^ۏ°‚m…đoâŲ<ö]Ŧu÷“-đš_=Pö†…ąæŠÖÂŒxw÷ f+á%¯ŸČ8‚U"/ØĄQ>xfôx†gļ_Č>ÁëbY5†5ģ“žIžô€'UĒû0dõ™x%ģ‹gī#ûÂģđ^d5˜Ŗ/"S?*ēhj†U[Gdmā öÃ1w AôáÕŖœ{oxŧā……ŪØFËČ‚ÎŗKxat ëŸđü€ā5'õ؝ē|Ų[įY„—H ļ:ÂKh Ēāņ9ÁKBL{Øˇžę}0đRö‡gx‚ā]‡vŦˆ4Āë+öĪđ–RÂ˯o“ĢĐÖāŨŧ1ƒ7ŖėŸáՄāYX|kĄīƒ§*xĖlûr<íUđ˛:<Ü)xļ‚—4ģvüÎÉđ°ŒĀãž´ĩž÷āÉōį{ܕ8`ļxļ„5ÂŖakŪŧÅ&Ņ:ŧfû÷Aĸ­‚€…RÁŖũŊ͞įâÃģaŧ\î°­Á[,)ʅY„ël4åKˇŧmg|œāÁc”ÆƒåYbáÛÔķŪx5.ä!dx&¯Åtzļq‹Äš…6 ˙Ųũö‡gëđŒŽĩ„w[š*`Éŧ‡ß‘ēY.íwĀSĄķ˙.ļÂsNāŃÂķ >fƇĩm8ÖÁ]ŪÔ [¯ŋģ”ÄÛĘÍō×m:¯ļ:DWFĖ;=pÚúž –.PĩķŧpģyĨėĐŨĀëāßxšgrlXŪ#ŧAõ÷ád;ŧuŅ!ēŧį”úƒtž\ŧ‹đtígAFmad>}00El<ÃÚB …pī850ļwu(ËĖeKx‹¯W;ŽĻ^¨ÉbËļ}Ŗŧ7<Ūû1ûī#GãÆK 0GĢuō(ŽŖ'2z‘zfØ…Č‚$‘šQ•+ŦúIč3žõNÁ˜ĮËW¨iĒŽr SGä˜p4Jo 'y ŒôōBœ ĩa˙ĶŊĀterĨ…E—§äú F\]@g}$ŖáEú Ēč' Đ5ģbÆSg‚Ę}õÃX ŲÔ €÷Pžņ…˜*čSõĶÜČĄ+ Âą21ŽÆX€7ž<5’ŠáņcŠÉcB͝ŧĀCuč§qU°S!F.dUááøöRĶízöZ}*`>ōÔ+ΊË_ˆĻ}TđrĪ–đÔžĀ:Ļ“ëœŦbŒ^îŽļĀ“džАCrĸ (h( NäPLžõņGëB‚ÎSĻ÷ zåÅT›WôķĸՍ9Û?.xs€_ëžåˇēoRÂĶ<ôĶ]AŅVī†<Kxįo†Ô4pƒRŖ­L/“ÉX,d:-ų;īĢ„ĀÄJđГ8Ģā]0ôŨ€×ãŖ­¤(Ä ‚7Įˆ+ÉuWđĐ×r,t‡đŠ—Đķfņû6œ­s.÷?Jx°Ėá%< T)á1ŋ`‹ž7\ƒ0ÚJJĄäāĨžOvŪL4`įMū9‹§sm‡ąÖŊßx“ļwđôåŦrJxÅ ŧ!˜×)pAĶž„—h€'ãˆJJ¨žū‚āQ(æÃŒíœę>čĐüÁsĻ Á››å°ĩãJįĄ×6Ötđââq O,āA߅5dÄWā=c/aãÁ$á*HŧÖÛøį":Ûŧ)ĀûÆÁ›.á…LúØVy@xäKHđÆČęŋąY°^Âųžn~ũQÁ#;īõk}TđR]ëyà ^_̐O…q9aĐc ˜yįä¤s°Õū갅Wņ=ڃÎÃúžllŅĀcģy3iV´Äí‹>"ŧ|^Wžâ<Ę\QÂĶáā¯\!âÂKx^8˜žÚ¯đÔy^¸û›ŽŽņfS–ĩ=Áos„w`yļo†• €‡ûĨAŽByÚ;W…ƒ7Ko•ÆÂÆF|#‹+Lđėj-ڐץÄ/-˛0é^9x-zlđpÃ)ČŽ}˙מöI'Oü¨ãiĻ}0ûü˜â…Î1–ÅzŠnKÖcēÛĨÆ$™f°. w‡ßŦ7å#†wŧūJ>y<|Ÿœų‘ô މäSŽ^#Ё1yŌENd=Ã0)e\Q‡ĩŊD`m ĻËünÂŖrg;åÖ[+LŲ`ĸŽí đ5ÂģZD22/˛īl3ôe_xúđÚo"˙ ī-äã‚ˇ¯ëšļŗãąåã‚ˇĨū؆Pn‹‡—}=‡nČQåáV9+˛/<ųĐ 9Žlä†ŲsؖÛLsôéIÂŦųÆū'{Q—=ᕉuĮVĄaūĪđœĪx6ŸX6âõBŋķr(ŧT$M𩷴­(B˙ĄČaÃ6ˇąžļņ¤)ÖÁ4Ák\OoŽØ§{ų1?ŧ›ũ!ō&đ7/]Š•˛Mjđ6Ž–aYåƒĢæŊ /0×áāĻ)ä áQÚāąĨîģĨö0aCÃfXÔązúTFU(šÚ* é0xĀģ”ÍđדģáŅ:*ßŪB1~ˇŲĮ4úXTœL]ô˛đ}Üŧa˛—ė īŋØ Ë ^SšŨFxū1+RÁ›ĪÔ{žk9¨¨ę5¯púëöáü1#ûÂSgč˙—SĪ‹]kĩËXĸŪ ų1ānÉĄđjOšāš+œŧĖÂf3ęĩŨ÷ēͲ/<į˙đt; \pG†áĸđԉĄ'åtŒÍŧ­§EÚí×ũ†đVj6l‡#E–nô rg÷Ŋnŗė /Ā{‡ŗ-Vb'¯Ų f¤cÜ\ĢSáų9ôK‰vîH01L€\^Ü BÛo ĪęŧEĖÎŧFygđČ%&ˇ% îî#ĻH4<ĐĻ+Ņ9PÁ’7Œã(zÆõŧũ¨ķ‰§YČēƒ„[éđæ;¤ä‚eÃáŠúĢ5x›=O|đrjå8“ĐŌōčĪkDŦŠļÄl‰ÚfF'ĒÄJc‚\=ŗ~Ņi? †@($Ũ Jp‡Æf"JŒHûnŗë-áš æ-=Ol‡7ˇû^ˇYö†‡šÕĄ•Ų#LPGŠ*ž#ŧÉŧ舘įFōŠęÂKđ$>h6Ąˆ#Ŧa‘ë0Č`x+ÆÃÁ0#%|æ6ģr[øæŌ30܋Į!îOŠ‚8ëß îf‡9_Ņ1‹Ũb7•~øđԉ„Ļŧ›œ˛–æKx…SUˆIž„§CŅŅ5p2×aŦ. Å&Æ<ĻtˆÉ…Kũãāųę Ŧņbnbßˤō0&eé—pÅē<˛,ŒxôØˇĖœâ Հ_E úäl/G=öÂ3mŠJ-7œā á“ģ bĖ1 īdÂ85&r†Ų8KxØ?%âĖĘũr2’;|Ķ€Ö˜îĶ2–ˆ<ؔ%ŧá0Ī^Ņ’-„gÎēO°Ģ2IÁA /jûIČėP}?ÃĩĖ„~F"¨`ü6œcTîkøÅ;…g)[3ŨVãŧĖîߐ‘\ÁÃՂ.áY>°bīgO|%bJ›ĶŽāIŦCqgzč瓍ÆŦôŠ-…ORrtNĮŦĐčåáũë ļ˜ĐāĩZ~ÖŊ ‡SzîÍUúŗ:´xÆĶ'AT<ēŠ'ôX{Ōėéū đ(é:]ŽĀc‚˙ayoŧ„§öĘ8ŽÅ)įĻS‡7\Āk‡čC|Wtņĩą–<ÕēU­Âģ( ŪdN âũ9š=aĶ„+10Õ=¸'‡7d4@ˇ0Ę[_ëkķÄgŊG^$§“$‚›“oĄųđ†ˇÎöMKgíW_ŒVāá~ŸfÁc<Ƅ÷īāáįtGâīÄŧK›R)….eԗ4ĀŪ4FxēKđPģĘVāÍ)áÁ‡sôčž!c”ų€nTúʄ~röŗļœLĄkįv8ÉÕģƒ7]Â.áũ´‚',õŧiˆđ& xŧ/Bx.áú´īēaR)‚‡xÅ:ŧ^GL•ëŲ„§p:Âz+ŧ ɖšĢŸ‰)’Ē'⹖đ•øÉž+xUČ_ĀKÂûn#¸ž¤a ŗ æ]Ā3lûUŠķ^§`˙ `ųĸũ<<LG˛lƒc/¤dЏã鍃W[ÔŦΊá„Ö5<%īQ„—Ģ/^îā )p n_zũßãÂKcZlƒčģ­đŠ:<Ũ]éy%ŧ[„1Ė Ŋ„Įz+đ– x ēÜ4wđ`íB&‡ī†-ęÚÂsŪđŪ¨‚§Á–ÂØ)LÃMąWpō<>Ölû|ëa}/ŗƒÜ° āčĩ[ÂËė(× xß!ŧ| ī¯f6YĀÍđÎBœ v]Á͟<{.āųf¤/"xĘĮBtí,c|˜TwIĻôŠXÂSī ža—0mĄIÁC-–Oō;zœĄÎûëđel1ÎÆ™*pŽi //áŊ xĶ”öē@’Ë f¯Ã“ļ‚ĮqÂ(áœāĶŧüáedō ëÄŧĮO1ęyؙŪ…OC*Č` (á1œSÅ@wœŧÎŋ„Iēy"<ėy—áÍęw4čÄoÅ+ž—á: xm,`oÍåʄažhĀs:¯ Ų6+už\™mą ĀM͙ϒOp8 đÔ삎%1s…@xŅĨ´ŲcÖeđ…žĪ4īOĀf¨.n ÁĀåm [4’qÁëāÁô6ƒ˙*xŖ ^āávā^ŧ  (9xFNÔm5a`}Ef<5Ęq'ą_Âã%ŧņ†Wšakß%ŧJnĒPøīYĪ횀] .3ĒĪĮZ,Q÷TXnËDĩ Ū ĢI0N•!xßH„‡ĢžX>ĒŊ€‡ŗíŌí¤¯Kxßá „‡žŦÃÃJ6#\öfÖr¯čŧ÷ o]đĶZŪũÍ˜Û íąŒG!öLZ¸ ‹0CB–ī‡ŠžĻĄ†Žįc‹Ĩƒœę ļŅđZÂ[<}(ø-,Īb0Ô~‰đpcā<ŸYŗ„7ĶBŲÃá}FũĪŧÜ.fÛĒįũöũĀíw~÷˙ŨbĸBÍ­×Gxę4HD"ū–k·žĩô `=ægYtĐ,&xY¯Ī3čĩqbÄšôh°^Ā+ä ZaĖ´Tvćwß­ÃûÂ,á„÷A[ão* oE\oË> ŗP øėYôŪcöėSRqž °T'čG'|\{ú0‹& ÚįLcÜÁFx]žM`Lûå CÜh bßŅTŦ˙G˜Ķä—gÅO—đbƒŗíŒßÍH>ā4o~Å5™Ã$aí˙°ė”áfč-ÃRtE‹sü^"Ô Ī.… Oáßkē˛ö<ÅáOŸb„‚ š– 8Vúąđ`ŠÂ,:]—ҁā îÁģ=ÚōLîũąã$Ļß"URÕģôŲjPĀģg°°Î,Ē*&ĒS°ėŲ ff’Lš°`]/úģ%ĘOvGe}U XWĒĮĮS‚Ũ5˜mc@îũąwXue§kösjͤzŸáŸ}ãũ=G ʀ˛úķ$x†BWĸ‹G,9ķŗ 9ƒ›põˆŋëž÷å~íîŲį÷!á×˙íˇ:Đ<;÷afúœg3Tž]Dfû9ZŊųāáĨŖ÷Ũ‚íōáÃīģÛ僇÷`.<ŧ§ØĻėī ŌCv$Œ}¯ō&đvdūOGļMđŪIdæ+{Ã{ŊôōŦEŊŽzĢ.œæÖNtH؏Iö†wģ„Ws._ƒēŸËZî‡öwRŪŪę°-á-Ë-(÷BU¸íŖy‰ÔŖēvoôxōc“7ˇ5 §ėh3ŦCė|žéČLn™Ôžui÷ Ŗtv2>VÉąŽčĮR>ô`ļŊáM÷€W -å<úģ‚—ņĸ%晝¸Šgl(íÂĶyåļV‡WlKéáfhíī÷ĨŪŪŋ ī?'š>ÖB5nJx 7’Īt8ŦÜû"Áú§—é IDAT›#<ƒĄ)õÎf.ˇ\hŪĐ>|‰fŲŪ­í/á}Ŋũ8’mđЧ;ž€.‡ä˜œš…hų*ŧrĢÕ\˙Yķ2ë×ę_[ŠaVŌŧãä•ŨuUQ¸vŪ{ēšė }Ų~პŊæ—žŪ‹íį¤ŽU3' Gđ:Âu¯1HoåˇŪŨ <Ŋ^\ŗ~âåėŪ(Í+Ŗ{āÁ;ûW{Â;Œ˙Üŗ:>\Ģ-ÔE H†ū`=2ĸIˇÖĶĄÕß5x“āš9ē_ˆõ<Ŋe/OŲAíÛ ÷…ˇrļŧúĐæŦīÜߗ+Ų^!xjûč}üŸ[ÛŠxö´ãcvŨ“”ųÆĪčë”*ŪžĒĨ@ đ”M΁Ũ o[Üœfå!ĘũđFÕ/{›žÁgw˜r'Š-:ÜpL^/žũ“ąiwģÂcĄ ôO“0ĸč€ ‘QüÄfÅ)ˇÆ+ÎĩáõM[6ÃS8ÖéĢ”Ņz[čš Ā[ČđŽ9l ēVÆču9x=Žū(4įēÛî‰Ŧ+íM:W*āiqGüXcîÄGoÆŗ€ĖŽÂtŒđô÷­›0n<üq†ĘŒžJilĢmđt8X Ē?>ŧũäxŦŒņKT^8LĻš{‚gFÚüŽ~ÔPˆŅ$Į wĘĸŋ: Čė@x˜¤.Į§ÛhĒĪžņ,,˜ėÛ8‘0!Ĩ¸ëåÂDm‹ûĶa%âwĪoģr+Ūë^"ÖžĐŧQ'Œ_…{}XæE‹ōą&ŠsˆģŅÂ\õ¸íƒ9U]‡Į„Gáæw˜LaâūxE@=/ b‹•Jx<ĮЕuxKņÃŲø;Kq*sĶÁz*5xčãX‹ąč@Čû›ŲÜLëęN‡pÂŅl =5×ų ‰Ųh1p#žęŗkąņˇ—Ũ‡ū—æcÛđ =ož›6ēŲ3tâgžž°čĒöŲ9Ėm]4˛Žī^9 <ÃqVÁ›C÷¨ÁÃo[`üÂë”đ’ ĮЕ%ŧ ážĻčM˜aŽXKAV`p;xŧ´ķ Į­ÂlZĘEëę§Ę<¸ fžîõĄô$xW¤dS´MĄON\ūō˜}1ŠQ˜™BøØ!9؏~o|YÁ|%ŗüŅqāÉ8]Āģ­ÃSäŒŨʃ‰úšƒ§`–Í‚x‚4vŠC1§áEŧb ĪæNį!< ]ۄwzũ%Ų1ÃWSŠqĸŌëahĒBxšžœ<œ¨8ēãŠŧTcŧÂÃo6Üpĩ!Ū?Gå ÆVĖÅW÷ŗ;ĀÎCxr–âr ĢÃ#ß^°ķō´M”ĸĩą4•g$F<č˜ xÆ##Ų/l„wĸŧžÅa›¯KÅ”–RäZŌ Ķ}o+xô™ėÛNiäī^Nđn†stėÕ ?Ā8(äXSG><¸1ųÍPyŗ„gälŠđ.œcôhđ ī„œæˇaZÍļ˙PƒgÂ_ÉÜ0‚'0¨„'𔃗< ]۔ũCEAļ0QAĪCNsÕ&xZˇzX m;<°öÉŧų]0Lđ8ÖŦšŖōÅ -™ÂĐŪĩ“ŊČo ŲJqäÁr 3ĻORaÁÎĮË*ƒģˇķ[9­ā}SÁ3X›â™ŋH<˜mKx‹ĩ­‘cļ6ˆˇÃ{d~@đ’°˛įŠ˙ØĻržúēÕc€?ÃąĖ Ū|fčč<˜ ąõˇoHukŽ Ī2™cÖpáaXzŌG2םĢn /×XVĄ‚—¯ÂSöŲyÚíˆé îΧEkÚĪMô…ų"Ē|­9†ĸlæĢË Ūo~äā}YÂ#%›–đ܄Q‹X¨°Íęv8p\pÖáuŽ/ æųŽ`…1ũė1K,Œ ģžô¸Ëņmëq“<~›ĪÄŦ„ŧÁãS€—–đÎ)´ĪÍļīĩß:SĨK<|‘ŋj†×/áĐđ%<ũ?}Ÿ‚ĖOčš=âÆÂájđX ۘā‰ĢõŧãčŧJhđUđ€¤„EŠöúė–Ĩå'âŅ×đĻjÆgV…< Øæ`™dLŠÉÄh„wöEe$ßTđ°~c—˛õÂwũË-đ OR뎃÷g%ŧũī 55å%ŧ<­Áíg|CΜ‹øŧPėĘü^RÎgPđItدš ¨Äč€ ŸŠûC‹+BĩųXw$ēώąîĶ0N5,CĮ¯S G1t„x8a|qMđ¸ƒ7črÂĐÜ'xEĐ_‹d #~kđœŠĸ˛„§‚jØÚŧÎĘGv1sIĻîøĨĐâL…gč¯ž\ųŦ ã=ë=Œ˜Œų+EÖgÚH5, žÂ4 ũŗŧ„Gq›’<,Ģ"nãĘÎ3ˆņá—đ„­†-ūJ ‚gžųņr°5x˙PÂЛ{å]øįQ8v‹‚÷< HÎD&ŧŲ'{ô:ǰŦû¤ãŠî˙Ô"k˙,å;/hËa#<\{ŒĮmŦʆA㖠ŽZ‹7R˛ŌÎ<ڍâ¸*AxW/áá­É<éíúbīÃšŅØ°Ė(˜¨ÖéĩH0¤:Ĩ†åÜ)ŒzvŅöaÕĮ"TĢESáŠF0gĻi™4;ˇķÔs„'qŸ—g x—¸ÂČĄß^ŧ…‘<ÁúsīĻ‚× w}‘÷åē3#_*#ū…â‰î™-ŧq$Šû۔™íÄÉɉ§°h øņ‘ĖįƒŠ Iɲ@ƒęĘ ‘Îģĝ˜ LEvęēÅōl‚fâüVÂģk¸vM>xkRngŪn)â0ŗĪ)”ô‚gįįžy\Â#%5šíœpĘđÅ^u'ŅũzDŋé÷UĩŸ,*d ­ÜÕ`}ŌX[t)‡Ā kqqåŊĐ o¯ú ī[^ėx˙°]•đūce­jÃ^ŗ'S ĪÅŧMîúZ€WȚkŌ:ŧĩVirŸ˙å‡+Â[Čr—ÍÁ“å_wÕąõÃļųYfūhëÕ^ÜۖC‚W›ī×ā-đl…×7‹$[䃞‡*ygđVLϞ s-ļ]l˙ĐhŌ ũ—‡đíåxĻžŊu0ŧ•g¯J/\žvAxà šTīîƒī¤ØļđŽ5I2˕Ŧ6xn6ā-ō¨•Œ*˙Ā-đtyPŖĄ\žvÁK›Kœ™Tíƒ;öCėf*ąU›Y‹…­°]ö„Į˜ö3/ |}) NĮÕŽÄ*ŧrįw žh„ ×r§: Ūĩƒ7˛•įņîÜdëX…§øüXđŠÖ•ŧĮ~ö”cŪKû•§9ų:ųtģŸ hŒA[ZŅ›đVöĶ<Ũ¯ņÁĶ×?ļxF‹KîļŗÍ Ŧ:WđŦųy{]ö„'˙åTĄÎKMĀ•†–FLķ)Ļĩg\ų†eôĖK‰(Ļ ÃVĐ7ŒŌŠŧ•˜p7Ā`hšŽåŋWÃl ¯œđtģžą“Ŋāä̞UŒĻÚÁ1ųáô•åčĶŽģ|šëëë5ŸĢ‹V[D<ÅqS|ĘéÁWž¤Aou&hÕĮ8Ĩ8åŠá•ā0xåīxēũŌj5lŽÁ› ^8œčn¨ČûŽûb&Zt=RO•Ō]™kķč3†ĮčSxz:ڟ{@ÍyĢsĖúl˜)zĸû'ƒųVÃry­R[Ŋ<8éžđ|xÖāmŧ˛){Ë+x|HŒIw9ú´“?,Ā SŨ=m#<Ē´„ĩđ°>šĩjA‘f1*§ĪtJ ōØ=ėRAōėŗgmôOô—…6ûW´ŨIĀ÷Jā‚—Šl(¸Î1áä%ĩU`Ø6ĀKŋŖ§Xį^Ģ-)WŊĨÚäL!j”ũ<ĮGųV™Ÿ ī‘ruŋBhņ4ųŒ}væ›3鹎ŨÔ'NDūĨ?đû›ÍaJ$áëÉīãīÅš,Âz"ˆũā5hƇƒĮ#ļ„:x8s„÷…1ajēÂ8oUK{¸čbҁ4Ļ2ŽSōļÉMĮ؊so2×O.[~Ē{"šĻ,ÔƒĒPaOMģåy^ƒ??Ā‹:žĪŽūHf<: ’$ėkf=;LÚbÉŧ*ķLŠú)Ŧ‡‚WHQƒG5úmŧĄū]žĩ xrJ—ą.–đ0ŨŽiŖËúœ˛ōã´ĪõŲ5>Šī‰ 8“—0]€“Ãō'ÉE¸ų5â¯=Z}&ĶāE‘Œ3Ė#´˜“îc´ÛŒ¯…fBæIŨ8“wyáálVđĘ”ĻŨۇ‚gO ŋ˜žBõŒđĐÎÃėö%ŧ6 9€ŒWāŲp/wđ(”'3Ėy?TēM9ôC*tKģߏūŗa6Áš€ų’ƒqu!đtÚ3'>GÖė™D?ŽÂį}Šįąp TÂ3đ"ĘUīā‘SđPԐëđœˇqú fš„—<‚Â1ŽÆnŪoj€s2ĸuG5j^G(€W`ԕ¤¨Rüs*æō¯¯ž"š ‡Ã,šëĐ×|ž“S8´&3O<,xđĸŦķD’ųę-Ÿ€ŧ<ô9ļĻĢ^SĪķKxčkSļméŧUí*ŧ¤„gŪÜt˞GAŠú_Tđ eŲ'x!õT/ˇMđr„7žåŧá…O!<ŧœ T|ÔAnN$†WšJlbĸ.æ+ȍsĩ‡;‡ëTæ Œ„Ž$ķ5/ZG‚‡EÃē]uK:Ī–đnT5aXĶ'MXƒG‡ŧ ŽÁC‹ā ‚W`]А eo:ĢÃëĸŖbŪ°“:ŋsņĒhoOĐáYôÃCW<kn Zp<7-8ńâÔ1>@]QX+pęŠ ŪķNc{Á\Å 6°Ā0Ļå(đČũē‚7[ĀĶÎTQ9ôJ0ĸŠ ũv Ūbļ%xúĘlĮ^^ƒĮX˜ņŧžēĶĐķā6d Ī• jôJÔĮ "/`=8ĩÁš yĢg<b(ÅÕ¨ŸÄΤEzWÂŖ‚@´ĨŪv+ŒAÛ]đ näĢÔ=ëI5[ĢÃŖ|›đøÎļ/–đōŧöŪŅzŪ ŧI㓇•ŖIĐnō’–?&our˛x=@`Ձú¤Ÿ°.ĒOuÍĮ%ŧåxД`Än‡7KŠō2Éw xĪėh ^OŒŨ„áĘØĩą›NWáĨKxķ6¯Á;’ŠRßyŨ ¯Ņ%Đ„ØŸ@_bĘmÃ~ņ,Š áÉ™ĪŽ¨ Áķ՟ɿęÖÉã&xĸ7%<,f5¯āĩŽŽæŪTWđ†ãÔĄ#žĻ,ņhiįaŊĄŌTQŧ#š*+į™ėrüžĮ%0_yØhä #2ŦLuƒ˜= pmęĶCƒūŅÖģj°ķ… `áN71Ëä`ęāeÅÉu˂Ø.āᚹ_ÂÃ8uĶáˇXWáávíš8x8R`ĒÕÔĻŽkį-˙Hwģēg¸A_Ž\'´¨ņÚK Lđ[āafŌšÔŖ ĸsų‘d†õ|‚ũ‘*+û˜Q{#ėgŦ6SØ[ck[´˜ŅŠAx´<ƒŽJĨœģc+{ßįļrų{ļ+ŨČ=Žė;†ü⚏ˆQüČ W‚āy‘ô 0š([Yr⡎…N=}Šø#+@–ņ~„Xz­ä9– 1;`r"UŲTPWwyf„Ÿmģŧ“:ŧ= û˜î¨÷š˛ß¯8,đgS}ŧ¤ũKڈŸ“F`“Œ‚mBoÅËH¨Sž\ƒ^Č3„—<ņ"Á> ņî‰;Šņ|8šīXōrû[éŊYũĖĪēÎļ(‰QĶ‹0TÉÃØ%ŧÁZ†0ߟŅ,Ö9‡nš`c7‘žĪ$Kvԓxx÷ČũCŪü𠓝o9—hzqØŦŠīS9$”āáEßLë­Ŋe[ÅP6ŊʛûüĮī~9ˎn[ÅWaĶĢĸĶũx>&x‡En‹ŖøyãĢŧŲõįū0•C‚Xî‘]ųā߇lŲ%_4ßoÉÄr|ˆđļHŗ‡IŌÜOīSŲ?¸/ŧaģžÜk#ŊĄėi$vģŠŽĘGœövōāđŽđūAĘqā=ß|ŠÚ‘XÕĶExÅŪō`đĒ]ØUxÅŧĩÉÎM”Nĩŋ¸ī‚†ė OÜOnžÔ oŨásí]‚‡öÛ0ē¯îڙxWōāđÖtۚëĄjúsƒ>ųŨWŧ9ŧ5ŲīåâĪ”Ō8Ūo—¯p%Ģ7 {yœä{ÂĶēgoũ:M6Ô~đj˛ ^CÄßžßŨ4Á3˝vˇÕë”0ķpŲžbú™ĐøŒû4°IĪO°#.w.›v{†‡XĀ{ą„×°Dj€×\ŗĪą és­,ĢLX“…V3Įá@Kz?x†ëΏ‚ŠŅ<ō-ëxzgįY'0^qĮۚKÎÁđđë/āŲãĀÃĢUđ^Tˇx°x ëāš°zsī”úNöÖy‚ĶãT*_ĐÃÔÁ“ŦhfN|Şn%×piu)°H•“.é6Lä÷o´„'ãúyŪĀŊų =āɘäS! ˜RŨ Į˜•Y‡˜MMŧč)ú|zęŲ™ņ˙ā؈'ĪdßFĄ÷šā}lŸč™ũļ ¯TÃKÍ7_­°.āÅFŽfö´õ x ŨEąPtŽ™jŗīYJĘŧÉe: ¯RˇÖ{A ܯĩ€€âŠ„ ŪŪũFráč#WĪiöŗ Ū­!÷sŊ oȝû/zИŪ9ŅXĩ!Gz 8ųëĻL˛§@4‚“Ģ0 Â50ŧ‚4i#ŧt€F™l€÷ĖFBÁ$oxT0™HôûėÄGŖíĨ–¸Fš™¸Qĩß\,āņ5x”ųü˛”Đķ*x,Č˙vZËWáaÁ„_ˆ f¸vîGŊķđy ¯ô÷•ôąSôK‡ĮX‚ ĮØ8x \įd$ctrÚlNv};Ÿæc€g.äWŽDMûągmŌō3nXI€Ī=TĄ?€#ĖĨ …'Ÿ€w  S8xŋū˛‚7~UĘx ķ* ōķŨĸX° ē[Wđž’oĒ~†.xčŦ÷j¯ŧI:%xÃ)š?4(¸ÄtÄ0Íą~‹2†Ē×p˜ĨØ3Üņæ)´ ÷‰?DxęĀ;Á •šuŸr*%Ááv ĐĶI/˜ūŨ,š–* f*ÔaútË.y&ĖÉŅāÅ%ŧĐĒ_˙_}‡%ā6ā)æāißÁ3ô°6[ÂIčāĄC ÁKkđféÄÁŖŧ÷Mđ0üoSĖÛ¯qnwŨŠONâŖx KŌŅ„Â*¸"ų}úü@SbZÕûæ1y &ūŪŖ‚gaŌ}˙účá†ĩŦ"Žw<¤ØŪõ˛įŧoūuŲķŌši€wvJđ_ÖĄķū`ŧėL€bOÄx/ExEčĒVŧL‡/Ū¯8_Âŗ Čá>AGGxčf*ĮИ!<0Ŧk’â„Á'sĒú“?&E§ƒ•īL/€1_C1lđ/féĻrLņíŠ~wĀKŅ„$x‹ŧЃwŊ/,ŒH‚g1J]-ā1‘ŧG@𮙏đĀŽÆÆ˛đ[NđpsĪ| ŧ4ž:xá <Ŧ4GxŗžjŦ̈đ„ËdŽÎéÃ˙Ģ×é‰á\é.ĩf%!†0ĀÐėГéĮŖ=áĩ^áāəîTđbĒhQtŽWuÁ+g[øF™ {Y [\‹#< ^Bđ"ĖwŽđ0ŦŪĒĻž7Exx^@>/vđÄõ‰å¯–đpŌeÅÃãđë^āå čMK`á¯[ęooŠĩŦŌé;āQîV0=$šo xē„l“%ŧ; ]‡w‚ađž¤,T¸kĐÁĄl†Į|ŽĶaÂ`´ŸÄAß#ŧĸÕášÕ/ /íâÔjđđÃ_õēXâkžĶ 5nđæ8û`<`~Dx–)éĢk‹ąpÜĄ„Ø>úSĢĸeVáŊä¯&ßčāũßTeĢ/‘ đ(ڝŊĮą‹†ōņ5Ã;CxęS ™b×+áõX/ Wē"‹X$›.ÜQŒT(áÅp¯ų-ÆGYŽēđî÷ŧ}áyÉ C'ãaųƒž§6î'ūX!ŧsĶŠÁ3ō†Īž3Uä× T‡÷īÉÎĢāuŧŋ ^¤ŠÛ õļMOÂû9…í2ŒãÆdMáYŦdNžŗķØ ŧ„<8Ģi>ÂŖJcĐ?Ņģ[Üæđ/GxJĩmá×JÖŋ ŧ´øī}ŒAx‘,°…Mŧ‚EŲcæE0EûYŊząōmWŒâ Æßú.œđk<|¸0U2;jq„÷zīÂûšāá$ŧÅljéĻĪC :Î4ĄCęĖÁŖx8kŠÆĨbĮbä7E •đ”ÄÔ#¯øcË0ž†ôs}eÅlŠ˙Ϙ´ã7m8ÚQcOxuš+×qŲļ?V-tIõ Xã_Ā*ÕĒĮ,iQĪ}Õi1XteÅé%ZôqđhmĢlKžÂ(Yƒ‡ °ķ2Ōļ4Á#<§ÕūŽUVB+Ņ„Ģ 2Ujđđ'Z °.ū‘M`eđpép ũáyžūÍ÷í 5Gąķše™ęwãĖ ĪÁQ˜ĩXvʲäē%ģÆ`á;į‰iëוtĪ`š;x=1ÃȈ¯)šÂs‘Ã{āĩåm|įāYī¯KxŽg\7Jī ŋB¸)^[Ļc&ÕâßXUÂãOÁ|ûr ˙Šø5Õ˛ÂT&;\׏oM^š´ƒ9“ŅN|Éå§>ëx¨7™Â ˛DaŌå}˜rĐĮpŲ!x@R… xFä đĀ´ ^ĻŪ- "% IDAT _ŧžåßM ŧ:L ŪË ļX9xßģĨc †  ë nÛÍ˙%ãüĪžˇõåU Žo]p']¸=0ĀÔxs'`x_|žņ¨ÅžQ›EذÁĐËDõ‚|L]ķ|s‡=1=>߯>ß [hķKyCđ°õëĘ망#‹i™u.čf6ãęôŗ°\5^†y|°V=ÚųœiF íŦ.Ą´ųņx–gß|ũ^˙âē×k…_]÷ēíɧ­ĢŨg…Ņ( ĄŪXö‡ˇ¯”ž3Ŧ‚!G/,Ŧ[Œ§„ȰW†0“€IÚÅ:Ÿ,cn…ö ĪxöÖéCpÛȰ“áäQ°Īž]ßɡ÷6r|xĨ4?Ā]WZYPÖm4U˜Āúí°ž=PØOxcŊė?îpÂx_đv-ßXÚŦ<ĶŽtrī ŪÛ ųûÖ>˛ŧŨōģ/{Våģž/x%ßĘŊ;0žr‹ė ¯fl5eČ˙pdĪ`ķå1.V‡×`QU’,7gŋQBäMö4Üw&ßŪKö„/Û„ˇ6ĄßĢüÁČyWlȞđ†î8䲸ˇ‹ V5ŧ9rîwPö„Į]C#jۚ5oļá–NŠ É{?NŲžŅfxkOâæGÅKm´ŗÜķĮ"ûÂs?€ˇa…æ ŋmŽ+,ÃvÄmžGŲ^Åi/xCzΞ^ąøíÅæ…–ąKx Ēɲ:ü=)‚ÃāáZowĪk†Wé<ŗ8ÃhķĒĩ „ ^qļŲžuxŪ2ŖÅĘÚv%’ū˙Û<Ī[JŪöčΊ~ĄŨ=¯yØV˛oĩ˛’¤Ą]Â3—gz]RTŦĮKĶcÅW›āU¯Ŧm?Â{›!Z‡Å˛ėOy}}.Ŋ_y!Ā›–eNu{x~īzãLwĘõ?ߏ æāUĩ/ Øų@ûÂķÔY NÍ#¸ŽēÅc×āĖNoVÖl;āéáéÍÉų:ŧųđÂu—§tÕ āĩŲžQmNöļšų/Î{-42rĻ…Ĩ€\ƒ™˜z6ęzIH&ˆ_ÂÛúÔn Ī}~ĩĻ—¤Ëágđ6O´ oųŪę~^ ž\‡7]…§efãÃ"úö…7/Ÿ[Aģr85A ŽŊÕáŲ…==÷“Ū§!fT.áeiuãU>j7<ęĩ x›ÍšŊŪĒÔzŌ.xāŨ< ŧŧ8­ār˜+į]Hžéžāø4JbÂē°‚§ūø–…Ņ—}WYnIįTĢόI\ąúöƒ—ŋŧpõŊuxBŲáCõŽõÚų`˜R°zžÎIûą?5l ž”SŠ‚`'—}}ĀCīđž3|1Ûx`Ÿķ‚ūPū^°„W¸ rđČ÷žĢų^ž„'0\d ք ŅQ”*OĻkš[â_ˇB z™R˜ œå&= hŧ°„×ĸĀŠÆ×íæJú–é^7vÁÍ%<üŒ[ôâ¨Õĸā’Đ[đRYōc,āõ?ĸ 1˛ ŋqđn*xwŧÛüI–đТëná;x–įMđf<‰AG[đõë Â/Ã<ex×Ác°5 KÎ<ĮĐÕŠ×poŸtXČēĖ[…7ą} sYÖC<™Ûė€åŲŅāmܰƒáŊopYZ]o ˆ+cĘū¯*Āũ5x3ËŽ‚, ØöæÎéũpŽÚ‡y1€üB~‘‚žĖîˆ;šGžsÁhj>‡Ÿ/_īô\~'đŠƒK–œ†op„7ysx‡Ëģéy˛ˆ)$ŦTŌ†÷Fۊ…œītŲŪģ.oq¸mâÃŌã•ß™ė O#<ąüûāā]šÍ;ĘŧWöļņJāGåŽz”ØÁWŪ ^e¸í¨7ēkaũąKŪ}…ĒÖā•n ÷ÃĢšSWÖæ4'A€W—ŊāŲMxîAčō÷ōvđvčŧåĒŦzôîāiąv ;Ũr āÁ‚č+oo‡,áUŪč˜Ã˛ļ‚Ŧū^„ū'´ķĄäÃ+씍„ĪŅrÚu\*EĪÛ^GũŋîÕ¤ŖĘ‡ ošõž{Â.áŊ>ē'ŧžÛ͙Uņo ¯ŒbĩƒŪ+Ržoo‘ō}ĮqĩEKÖv?7ę”h[í¯`ąö”đ™Í>•6{NûEđĒhíHę°ŧe¤ÚÛÁÛudí}VfŪŽÁKXĐs‡Ôám¯¸iZRZ|âŧ/3&rfŧäše2ɟa´…ĻIwšũē īßIj´¨ûŨĀ{]‹G/D†ļôŋS´‡ŋŗžSö„'ƒ\÷DrōoC@ÅŗË0Pw*“ņvō˜ŧ)i—;a,+<{ØqJœp‹ą‚÷KéZ_;7ŊEĘā!áŨֆ-†Ģ8Yj#đĩ´:x?Ųžƒ)ĀCīËÍ´īn5–´Á„ĨéT `ˆ āŒEšuO|}Ž.O´á=/­€ĮŅ÷éųōÜôEpûöáÕŋMuū:< Yx x1y5‰ūâZƘ_z~k*xqŽŅu#/ ņsõé\‡llOA…Ė3sŲ;ķãWŦm ōh9đÂÅ 7áKz´HSæģ‚§šĨO><ô*"x„įR]§ˇ¯#Ë U!ˇŦ”|9cu17ŌĪ t?ŧÕēÛ ÅܸįųA…>õ‹3ūO|ŦZŠŌ=ā6‚T6Ļ .`ÜĻĮ‚W7šáš´$oZPĪ3Ąƒ§ xíâÆyáqėy!f™V×/PFđ%ĨASÎ)¯)FųŨaa?5= kßąę˜8ž„÷”ë§Ø&8Ũ $>ŖËÍ8ŒBâsžį¯Ę¯í^Ü^ž°ļĀÛ7ã`x)÷ĀoĶ™âđš+nĸč){/¤Ę@äČ?5/×dž!ŋƒ‰ĩĀéGÂäŒå*pˆR5‹Ą”ÔwátO8ų¸`A<hΜ}ĘØo.0ŧBUŽ%zņÄ}åiFũáį{ƒ‡†!xų žĀCΧŲŧ;Œ2B’›šî†e›<ü[`ĸy€‡ŗm OPAĩ‹Šø§b˜*Ķ ˛†Bnyš%0æ™E<č¯ kÅØ›'pđԍe]€‡wŋ„§?u†‹"xĘĮ īb 0ŽFtžĢš@g~)ãTQ—pŖ9q SS€†ÂãéÔ Ãˇt %ˆëķ8;“ĶŠúŦŨQčëŽķŖßgįčŽ0oĄMeíĮ䷞e=˙&˜(Ž¯4UĻFĸĄX^օa‹+ō^F.ÜfŗvOŗŸĖä‚ųXWáĄä&ŧ)ÂÞ9!xēˇž›ûĄŋb´tLV°–XˆrHŋ|ĸzr2×O.Ņŋkúy C€`0 LW2*oeÄ h‰D­Î'>‘ĻIƒÖÛĀsŪ—îKj13¯@M]Â#˙w,ũĻL¯`čđū;ü¤ļC9ĒmÂŖō+°ęVŗT =ˇ7›ãúZe8‰1N?<:xčü<ÂS1…Ŋ؜_‡ëÛ.Ö– Ŗŧôz Ætä1vHŌ´E<Ĩ¨ĢŖĀŖÆÔYk”~āM €÷[ŦwZÂŖ¸†‘ x6ų[Z:ĮŪÁ]g80į´ŽØ„įž 1đLŧŲĢ^ŽŸĘ§đ‡_ ×R Oá4hžF‡Z„G1xLŸ#R0\ö&,nŗ!L.œāâœ"åŽfŊÜÁÖÅŌH„Į#g`Ė <Ąĸ.āÍôØŌšƒw 𔤞ˇŪßÂ/ƒ˜āšāĩā&pđÆßíWrOH„×#xC~đž‹ĞG-”īœ—đ§á“Đx†đ ÉG‚W<ņ”2|lZ¸scõŋŧčJūw/vŗi Ķ=`Pč#ȝ73ΰče^ÁËoiJpoÂÞJ [›á°5?j‚ƒāĩq+Ṏ›õkđrĶãy!ĐXGŊXƒ7.õPWĸgmí%ã<›âW÷–?ž…ĩž§|vEŪ—†qĻ9ĖOFË­0Ę 8‚‡=*šFqe/vUvkkđČTšĨoē„GÅã8–AxÅ÷›āŠkĪ'xú áņ ųXåēË<€Įl˛ĪnĀ8xX#Å0ãÁK'€đā晀ߊ0c0ŸˇîéVķJėĐÂÜÅ!ˇ´dƒŽũŠĘÁ6šÅpœ×Iį9xTƒÉ•S$x_<ũ0æ冞ņ{›<ėy˜āøđȁĐ=Æh؀W0Bo×$hWSVžÅÚIŲ)3Îé?:ÃZ+ÉY‹EMÚI&˙5ÂŖŠ3°ĒÍz|g=Ŋ€ķ6ŋc0ƒ÷râ ĸ†¸÷ƒqōŒäux/^xÃįĮ‡‡Åë܇?l>BīŊģ–Ęiųë !C͎ßoĒŅ“üÉ/ē ]hķ§<ÛŠå'øEu‚Œvš2fLõ2PhĸŪ Öô¤Pr9Į˛Ī`EĀōēđ`™ũÚ­0nŪ¯Á6@ĶuĮW9Ôsšŧ/iƒdËCfîŸg ŧUmž¤…ęœ{ŅíB›LdįkW!ŧäÜcŌÁ“.ũĖ˸ú?žžî™”ÃĨč8É=ƒ%ØpÂˆŦåÖļ#„'obԇ¤yšįwvõ D훆īī÷P‡ˇ5F´ë,†j.–Ãô˙vũˆnŸb"Ÿ$\ûÕ• =ŒåXŒÔčiīŦë%øđ4ņUë\ümVœŠž…›1JAÉũW~x;Î(ö>´o›ĻĘũ/=*âä”W%Îņķâ%ęiŧĢƒ¯&ƒ˙Yč/*áÉ(üĨTCuÎ$ =ķv¸ēŪR‡ˇm° 4*"ŧɖĄ1jxæ$Mx1$'ŨS¨Ø‹pĮ^ōû„§ëĄ]ŗ-=÷?Ąt?Ļ8Į¯aNrr@Ôãģ†göI@‰ƒjÃ>ŲíđdÃkŖmgܞ,…äŊÛ}ä€X *ģ0EMžēŲ-ŽĀŖmg< ŧõ€áį÷Ÿô=I•(܌›57DšíŒØyÛá­Õ[,mŧÕa˜ĸ€Tŗ۔˙~ģ[ú6E\Ę~đև€ŖV¤‰ōÅEäŌŽĒ°īHF{Yl}g‡"{x‹ŧöîGep,ā•ƒŧėŽhüMŪŪ"AļķŦā-˛Viwô:ŧĩЕĩc?y+xî‡(_vđ^.ü–Ę- M]čderŪĀzĩžw9ŧJŧY<úm-tE×ĪIđõ§~īōđđБĐũ&ęGßŦÆ­Ĩ‹ö‘$ŧęMāMWu^%Ūä]Ā[Ų|x3Ō›ĀKwÁ ëzxĻUßR xÛâ/3Ųd–;ī-¸ĩ‡ė ¯í%YXY;R^{ˇ”n‚7ôŧō7Q?úmā9/˜JĘmôæC3Š?ß|ÕMü‘•‹?&*(IH]_öĘĢr?ŧDj/;ķŊ*¯}đ’ŽÄi@÷•đß`OxÃˇ€§VŠhÜ ĪČyÃf—›ģ2ËŨngQƒwÍz”z§¯]i)öļ\‹šR=tĢeâįž=…ĢÅŅ%;yÂuá<П…ąÁ’ãĻ⹖đĘo&ę§|xųŠĶæŊÅŽđŠnÃ÷îƒŧ܂MĢ" ĖúĒjŌŽ${ÂëH…ų­5ĻNƒŗöU,ãŦh=9áųt‚šf­ ébe€ Ŧŗ`‹KQ0Ģ.h” ’õSōˇ€7Ū„ˇMŒœníy¯ülļ.Đ0t&îÕéąāĩCōÔtC~ƒßq Éû2V…ô9OsĒŖ[˜T; G ,ŸP< 3Fõ€pëNh4ã8EīÂĀ´eÍÖ9^ē˛|Ū¯é¤<ģ€Wm>ihĶąá]Z¯ãāÅ xaĀųdLĩs´äÉĢ]ĄW{€‡Ĩ VôīSÂ^‘§úiīĘj§Y÷‚#Ru)PĻÖŗIē჎ÁJIĒ7†§ŸU5xƒŖÃģĀ>žšv‡ŋpđēčMk€gy<âÆē08x2žŖW;OĄgÆäG1§øŠÉ^>ŽāŒĘūŠžž`ĻāÔ0}žœīĩČŦ,OŽĐķÔâI=Âģ92<ô•åQÔi#īÚÁë‚2ãņ´tPZĀ›8¯v„‡j´ļ!?ųš22IōûÆVđ‹á^ 4ÕŨ÷w;c’ÄVw΅ÉĐ^SVÍ7“,d_xÕļ'Ļož ŧíē áąÎųdTÂCŅ ž‹AŪ€'Ņ­ÕÁ›R|ÅáSÚäåFLŠá…Ū˜h{@Žgģ%°ú‚ “*HžI•„*Č:Ÿ…šĢ+8ˇÎŒPâ…z‰Å ö§Oę5ĖFŖãÂ+Î$:Ū[{žĘ:Íxm‹éÔU]ĘĶŦ퉗ĀĪä)œ;I.yÖō“@†ÜąJ0—sbÚĶ XÚ áŊ’äá"gđÚVXđØđ΅ƒ÷/§ŧĐVđøĐ:;¯ŊÚžÍZĢđî°',āšūktîÂúh)ύŪ^‡cúÉĻxÕĻČĄ`ĻšFVŲ™¨0ųā…ÕĮãę‹âIû‘WtlSĐQ3ŽČŦŸ)_aĖŧ x‰ãĀë <ŋ7 ëđŠbĪãV;x“<ęy–ĩD ˜îIŊ*ëđäūđĐŗ6žŖķscÖäXuđį‰$oŸ4€ŒĶy}؂–ÍA;HT˛hũ)ÃįZ ´‘7i_},āŠ|2MŽõ>Âëã^{:[Āû‹íķą­ëŧp2ĻÁ}_ƒW°:<‡xĸõī,LM'<^Œņ Đ2A!–0æ1b%Ä4ԜāMâx0ƒßT}iîVšŠcrī 0ÆĀÂ$‡K€4MՑ†­ 4“UÂëĘW8ëų°lxŖųŪ‹fėĖSĖÁËšíđ~‰!ÎļãÛø6ŖåYǏ„GFnJxn^åÅôXđz<üō xøŗ‚F…K IDAT× #A¯×á T /(‡mė6¸ÄÚF^ےF˜Ĩâ8=–Ÿ{Æˇ3\ĒsĖk/ĀtļCíë S„×ãDÆ(‚J–ÖÕpyÖ.Wϝíĸ.jđā­ũ ^X.>…Y˜Ŋ{ÜéšĪĄÛkÚ?'–ęERũÅægTĖąR9âEžjķTqŒ73ßĮķ žkņ˛ odļŊ-Ž]+ŧŲüuņÚâ'ßCYž‹&)K…N9uŅāeī‚ë ŧr%ÕÁûĀg~œ‰ga^âá>TâacZáŅGØâÅĢią‡‡CÔŠ†*PuõÅ)>lđÂo>{]ŧMķ虷§\Æ ũķņF7ÁÍF6ëŗđ°3,pöŊšĐÕ(¸ķĐĘvƒˇĒÛŧ âį„÷Š:Åči*Ö ’‹z†aĘl;x°ÅË_¯-pūe?§˛€| ëŗ~ŽŋPÅ rŋ×iN­PcJ=ŧQŗ{ĪJ<ē€L¯įåB]ŸKãěCSNĪĻžÆ‹#ÂËh PãE4”_G/5={ūģĪŋėįɜ|kõÁëÆÅ”ÃŪ=L/tĨJˆTzIâĨWjŒxŅĸDĨ{RáŦrJ ™÷ÕÜv~_âáXjJMtņú.Ūô­¯Š×Ž,žyåš9ī āĀ{¯Ō?žSžĨ:*؞^†YĶ=ŠÕ͞‡O đG3e8¤ĢTŽĢl9DŖ+]^Ž ´-T2_Ī]üĒxgū[Ī­SŸ—ĒúLWš ÃØ+lR霧ŖfÁĐĮuđChCZÅá^[—`Ûā'Bēš•đFåMi°_{ŨĄĘ įüj…Ūžj=HĶu˙aĢ3Å_€îĀR-Ä˙Ī˙õŸŽŨAzũ—¨Â[Ō—ąÕÁĮčmãü ˙Ÿû§÷ŧįđžžYÜū_ämãüvõÍlĪČiŧēëęhú†wđīxæ͝žéüJŨuu´gáíû|æž‘o īüāŒ>՝_Š׎āãũ’ˇ˜}…üßŨõiŧ:-@sé‹]{ķļzÛLG `ë —Îš^đŦô¯#ž:$īMDđ¯ÜzƒxŸg@Õ |NJ<—x.ßśgTûÛß\UÄķUŦÁ¯&9PéÛÅ.^âûßæEģx)ŠÉŪ‡xĒûčũQÎŦÖTũ÷<Ą7TĮÔŦšmU˙ņhl`åˆ>–xsÂŖņíoÛKÔxÉŖ/¨°õŨ’đ(đMŠņœięāaĄ\ÜõŠ=™<Øâáa›íâMoz“˛dK*7Eœ`Ÿ<ÁGM‰?øđŌxĪüg/ė>l[ūĮŌ ÎÁüŽÁŖ'ĒĐĒü8Æ!ķįzS7€(‹ģ^ąGx™ÚÃûoŲæÁ‚ž…Æ…ĘŦ9Ä[Ũa—Ėë g ÕRS îŸÂošmļAÄ]¯Ø#<šÄDšĮ˙¨ņĒÃ^ĢięŽvÆyŠđō5vÉĒ%ƒ„ E"Ū>”æëd^ÆG/ŊÂķĄģ†•%ŧëOi÷‹jœį~ŖF Z<§ Ī.Ŋ†[Â=Ųâ ņŗŨÖØĄ9z9č \̜đø)ūÎÚŨĶ:0á*ûX„-^F‡78ÃCä‚rÁ.ĄéF’ādņūfļۚÕũú„7vCXMj<}eĸČ<ú/¯k‹R°qÃyx]„^ xéöį^į ö oæ<ŦtuØ.5θį-j<„ˇÁ˙a‹7.ņ,}ĨÅÃn¤]žBŧŪ¯$Cî ĒŗŽx,/oeąÍŖĄáŅȡ)XXãáĀ$ĻZčI]Öq‹‡s”}ŧ>ámÔxņŧQ9uԏŌĸA‰7Ûļx8ĻIÛ>MÚĩ=[÷'Gé'ĀōĄ)>MQËžĩ Â-ž‹íœÔ)oņî‹ŧîĶ#ũÁķûx?4xÕ8’N<_áO‰GC•ûBīãMŽ^ŽŌ#<ŗ‡7kđĒ5ųj§ĶlņŠXí å §gĶ{ØÅۜĒęÚ'ŧÜÁēÆûRâåv;ˇÅVĢŦ4y/yØÃËáølQ™ūāņŧÅ[/WŪrA‡jĄĢŪĸmēļxˆ—Ãç Ī•Ģ*ę÷ŌoĩĶKīĨGxzęĖr^õļËåĘ5ˇpKK›„§Ē.ŖIįãûÂ( ˇž7Ū$t.ŲÁ[@÷ŠTŸđEjL3-k’éĘÆ8Ã€Û OŧĒzŊŨÚŌŅhK¸ū(tJ,ĮũČZJ-)ô~s6/lÍ&m’CßWpļø¯9´úęC ]I§ĻîGÜÅhÚËHĸW¯„,ēd¤ŅEĄÔ?×ō…žæˆÃ4ęr 4tIMEŲ *)ÄölIENDŽB`‚leptonica-1.86.0/prog/rank_reg.c000066400000000000000000000177311506303110300164700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rank_reg.c * * Tests grayscale and color rank functions: * (1) pixRankFilterGray() * (1) pixRankFilterRGB() * (2) pixScaleGrayMinMax() * (3) pixScaleGrayRank2() * (3) pixScaleGrayRankCascade() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h; l_float32 t1, t2; BOX *box; GPLOT *gplot; NUMA *nax, *nay1, *nay2; PIX *pixs, *pix0, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "rank_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/rank"); pixs = pixRead("lucasta.150.jpg"); pixGetDimensions(pixs, &w, &h, NULL); startTimer(); pix1 = pixRankFilterGray(pixs, 15, 15, 0.4); t1 = stopTimer(); lept_stderr("pixRankFilterGray: %7.3f MPix/sec\n", 0.000001 * w * h / t1); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixs, 0, 0, NULL, rp->display); pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); pixDestroy(&pix1); /* ---------- Compare grayscale morph with rank operator ---------- */ /* Get results for dilation */ startTimer(); pix1 = pixDilateGray(pixs, 15, 15); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ t2 = stopTimer(); lept_stderr("Rank filter time = %7.3f, Dilation time = %7.3f sec\n", t1, t2); /* Get results for erosion */ pix2 = pixErodeGray(pixs, 15, 15); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ /* Get results using the rank filter for rank = 0.0 and 1.0. * Don't use 0.0 or 1.0, because those are dispatched * automatically to erosion and dilation! */ pix3 = pixRankFilterGray(pixs, 15, 15, 0.0001); pix4 = pixRankFilterGray(pixs, 15, 15, 0.9999); regTestComparePix(rp, pix1, pix4); /* 3 */ regTestComparePix(rp, pix2, pix3); /* 4 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* ------------- Timing and filter size experiments --------- */ box = boxCreate(20, 200, 500, 125); pix0 = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); nax = numaMakeSequence(1, 1, 20); nay1 = numaCreate(20); nay2 = numaCreate(20); gplot = gplotCreate("/tmp/lept/rank/plots", GPLOT_PNG, "sec/MPix vs filter size", "size", "time"); pixa = pixaCreate(20); for (i = 1; i <= 20; i++) { t1 = t2 = 0.0; for (j = 0; j < 5; j++) { startTimer(); pix1 = pixRankFilterGray(pix0, i, 20 + 1, 0.5); t1 += stopTimer(); pixDestroy(&pix1); startTimer(); pix1 = pixRankFilterGray(pix0, 20 + 1, i, 0.5); t2 += stopTimer(); if (j == 0) pixaAddPix(pixa, pix1, L_CLONE); pixDestroy(&pix1); } numaAddNumber(nay1, 1000000. * t1 / (5. * w * h)); numaAddNumber(nay2, 1000000. * t2 / (5. * w * h)); } gplotAddPlot(gplot, nax, nay1, GPLOT_LINES, "vertical"); gplotAddPlot(gplot, nax, nay2, GPLOT_LINES, "horizontal"); gplotMakeOutput(gplot); gplotDestroy(&gplot); pix1 = pixRead("/tmp/lept/rank/plots.png"); pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix0); numaDestroy(&nax); numaDestroy(&nay1); numaDestroy(&nay2); /* Display tiled */ pix1 = pixaDisplayTiledAndScaled(pixa, 8, 250, 5, 0, 25, 2); pixDisplayWithTitle(pix1, 100, 600, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixs); /* ------------------ Gray tests ------------------ */ pixs = pixRead("test8.jpg"); pixa = pixaCreate(4); for (i = 1; i <= 4; i++) { pix1 = pixScaleGrayRank2(pixs, i); pixaAddPix(pixa, pix1, L_INSERT); } pix1 = pixaDisplayTiledInRows(pixa, 8, 1500, 1.0, 0, 20, 2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixaDestroy(&pixa); pixs = pixRead("test24.jpg"); pix1 = pixConvertRGBToLuminance(pixs); pix2 = pixScale(pix1, 1.5, 1.5); pixa = pixaCreate(5); for (i = 1; i <= 4; i++) { for (j = 1; j <= 4; j++) { pix3 = pixScaleGrayRankCascade(pix2, i, j, 0, 0); pixaAddPix(pixa, pix3, L_INSERT); } } pix4 = pixaDisplayTiledInRows(pixa, 8, 1500, 0.7, 0, 20, 2); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pix4, 100, 700, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix4); pixaDestroy(&pixa); /* ---------- Compare color morph with rank operator ---------- */ pixs = pixRead("wyom.jpg"); box = boxCreate(400, 220, 300, 250); pix0 = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); pix1 = pixColorMorph(pix0, L_MORPH_DILATE, 11, 11); pix2 = pixColorMorph(pix0, L_MORPH_ERODE, 11, 11); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 7 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 8 */ /* Get results using the rank filter for rank = 0.0 and 1.0. * Don't use 0.0 or 1.0, because those are dispatched * automatically to erosion and dilation! */ pix3 = pixRankFilter(pix0, 11, 11, 0.0001); pix4 = pixRankFilter(pix0, 11, 11, 0.9999); regTestComparePix(rp, pix1, pix4); /* 9 */ regTestComparePix(rp, pix2, pix3); /* 10 */ pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Show color results for different rank values */ if (rp->display) { pixa = pixaCreate(10); pix1 = pixColorMorph(pix0, L_MORPH_ERODE, 13, 13); pixaAddPix(pixa, pix1, L_INSERT); for (i = 0; i <= 10; i++) { pix1 = pixRankFilter(pix0, 13, 13, 0.1 * i); pixaAddPix(pixa, pix1, L_INSERT); } pix1 = pixColorMorph(pix0, L_MORPH_DILATE, 13, 13); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixaDisplayTiledAndScaled(pixa, 32, 400, 3, 0, 25, 2); pixDisplayWithTitle(pix1, 500, 0, NULL, 1); pixaDestroy(&pixa); pixDestroy(&pix1); } pixDestroy(&pix0); return regTestCleanup(rp); } leptonica-1.86.0/prog/rankbin_reg.c000066400000000000000000000164601506303110300171570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rankbin_reg.c * * Tests rank bin functions: * (1) numaDiscretizeInBins() * (2) numaGetRankBinValues() * (3) pixRankBinByStrip() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, n, w, h, nbins; l_uint8 *data; l_uint32 *carray; size_t nbytes; BOXA *boxa1, *boxa2, *boxa3; NUMA *naindex, *na1, *na2, *na3, *na4; PIX *pixs, *pix1, *pix2, *pix3; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "rankbin_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Generate arrays of word widths and heights */ pixs = pixRead("feyn.tif"); pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); pixGetWordBoxesInTextlines(pix1, 6, 6, 500, 50, &boxa1, &naindex); n = boxaGetCount(boxa1); na1 = numaCreate(0); na2 = numaCreate(0); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa1, i, NULL, NULL, &w, &h); numaAddNumber(na1, w); numaAddNumber(na2, h); } boxaDestroy(&boxa1); numaDestroy(&naindex); pixDestroy(&pix1); /* Make the rank bin arrays of average values, with 10 bins */ pixa = pixaCreate(0); numaGetRankBinValues(na1, 10, &na3); numaGetRankBinValues(na2, 10, &na4); pix1 = gplotSimplePix1(na3, "width vs rank bins (10)"); pix2 = gplotSimplePix1(na4, "height vs rank bins (10)"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ numaDestroy(&na3); numaDestroy(&na4); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); /* Make the rank bin arrays of average values, with 30 bins */ numaGetRankBinValues(na1, 30, &na3); numaGetRankBinValues(na2, 30, &na4); pix1 = gplotSimplePix1(na3, "width vs rank bins (30)"); pix2 = gplotSimplePix1(na4, "height vs rank bins (30)"); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ numaDestroy(&na3); numaDestroy(&na4); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); /* Display results for debugging */ if (rp->display) { pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 25, 0); pixDisplayWithTitle(pix3, 0, 0, NULL, 1); pixDestroy(&pix3); } pixaDestroy(&pixa); pixDestroy(&pixs); numaDestroy(&na1); numaDestroy(&na2); /* Test pixRankBinByStrip */ pix1 = pixRead("pancrazi.15.jpg"); pixa = pixaCreate(3); pix2 = pixRankBinByStrip(pix1, L_SCAN_HORIZONTAL, 16, 10, L_SELECT_HUE); pix3 = pixExpandReplicate(pix2, 20); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); pix2 = pixRankBinByStrip(pix1, L_SCAN_HORIZONTAL, 16, 10, L_SELECT_SATURATION); pix3 = pixExpandReplicate(pix2, 20); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); pix2 = pixRankBinByStrip(pix1, L_SCAN_HORIZONTAL, 16, 10, L_SELECT_RED); pix3 = pixExpandReplicate(pix2, 20); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); pix2 = pixaDisplayTiledInRows(pixa, 32, 800, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix2, 100, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa); /* Test numaGetRankBinValues() and numaDiscretize functions */ boxa1 = boxaRead("boxa4.ba"); boxaSplitEvenOdd(boxa1, 0, &boxa2, &boxa3); boxaGetSizes(boxa2, &na1, NULL); /* 26 elements */ numaWriteMem(&data, &nbytes, na1); regTestWriteDataAndCheck(rp, data, nbytes, ".na"); /* 5 */ lept_free(data); n = numaGetCount(na1); nbins = L_MAX(5, n / 50); numaGetRankBinValues(na1, nbins, &na2); numaWriteMem(&data, &nbytes, na2); regTestWriteDataAndCheck(rp, data, nbytes, ".na"); /* 6 */ lept_free(data); numaDestroy(&na2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); na3 = numaSort(NULL, na1, L_SORT_INCREASING); numaDiscretizeSortedInBins(na3, nbins, &na4); numaWriteMem(&data, &nbytes, na4); regTestWriteDataAndCheck(rp, data, nbytes, ".na"); /* 7 */ lept_free(data); numaDestroy(&na3); numaDestroy(&na4); na3 = numaMakeHistogram(na1, 100000, NULL, NULL); numaDiscretizeHistoInBins(na3, nbins, &na4, NULL); numaWriteMem(&data, &nbytes, na4); regTestWriteDataAndCheck(rp, data, nbytes, ".na"); /* 8 */ lept_free(data); regTestCompareFiles(rp, 6, 7); /* 9 */ regTestCompareFiles(rp, 6, 8); /* 10 */ numaDestroy(&na1); numaDestroy(&na3); numaDestroy(&na4); pixa = pixaCreate(4); pix1 = pixRead("karen8.jpg"); na1 = pixGetGrayHistogram(pix1, 1); numaDiscretizeHistoInBins(na1, 1000, &na2, &na3); pix2 = gplotSimplePix1(na3, "rank vs gray"); pix3 = gplotSimplePix1(na2, "gray vs rank-binval"); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 11 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 12 */ pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pix1 = pixRead("wyom.jpg"); pixGetRankColorArray(pix1, 20, L_SELECT_RED, 5, &carray, NULL, 0); pix2 = pixDisplayColorArray(carray, 20, 200, 5, 6); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 13 */ pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 30, 2); pixDisplayWithTitle(pix3, 800, 20, NULL, rp->display); pixDestroy(&pix3); pixaDestroy(&pixa); lept_free(carray); return regTestCleanup(rp); } leptonica-1.86.0/prog/rankhisto_reg.c000066400000000000000000000120741506303110300175320ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rankhisto_reg.c * * Tests grayscale rank functions: * (1) pixGetRankColorArray() * (2) numaDiscretizeHistoInBins() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, w, h, nbins, factor; l_int32 spike; l_uint32 *array, *marray; NUMA *na, *nabinval, *narank; PIX *pixs, *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "rankhisto_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* Find the rank bin colors */ pixs = pixRead("map1.jpg"); pixGetDimensions(pixs, &w, &h, NULL); factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h / 20000.0))); nbins = 10; pixa = pixaCreate(0); pixGetRankColorArray(pixs, nbins, L_SELECT_MIN, factor, &array, pixa, 6); if (!array) return ERROR_INT("\n\n\nFAILURE!\n\n\n", rp->testname, 1); pix1 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 20, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 1000, 100, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); for (i = 0; i < nbins; i++) lept_stderr("%d: %x\n", i, array[i]); pix1 = pixDisplayColorArray(array, nbins, 200, 5, 6); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 0, 100, NULL, rp->display); pixDestroy(&pix1); /* Modify the rank bin colors by mapping them such * that the lightest color is mapped to white */ marray = (l_uint32 *)lept_calloc(nbins, sizeof(l_uint32)); for (i = 0; i < nbins; i++) pixelLinearMapToTargetColor(array[i], array[nbins - 1], 0xffffff00, &marray[i]); pix1 = pixDisplayColorArray(marray, nbins, 200, 5, 6); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 0, 600, NULL, rp->display); pixDestroy(&pix1); lept_free(marray); /* Map to the lightest bin; then do TRC adjustment */ pix1 = pixLinearMapToTargetColor(NULL, pixs, array[nbins - 1], 0xffffff00); pix2 = pixGammaTRC(NULL, pix1, 1.0, 0, 240); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix2, 1000, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); /* Now test the edge case where all the histo data is piled up * at one place. We only require that the result be sensible. */ pixa = pixaCreate(0); for (i = 0; i < 3; i++) { if (i == 0) spike = 1; else if (i == 1) spike = 50; else spike = 99; na = numaMakeConstant(0, 100); numaReplaceNumber(na, spike, 200.0); numaDiscretizeHistoInBins(na, 10, &nabinval, &narank); pix1 = gplotSimplePix1(na, "Histogram"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = gplotSimplePix1(nabinval, "Gray value vs rank bin"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = gplotSimplePix1(narank, "rank value vs. gray value"); pixaAddPix(pixa, pix1, L_INSERT); numaDestroy(&na); numaDestroy(&nabinval); numaDestroy(&narank); } pix1 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 20, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 1000, 800, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pixs); lept_free(array); return regTestCleanup(rp); } leptonica-1.86.0/prog/rasterop_reg.c000066400000000000000000000070521506303110300173670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rasterop_reg.c * * This is a fairly rigorous test of rasterop. * It demonstrates both that the results are correct * with many different rop configurations, and, * if done under valgrind, that no memory violations occur. * We use it on an image with FG extending to the edges. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h, same, width, height, cx, cy; l_uint32 val; BOX *box; PIX *pix0, *pixs, *pixse, *pixd1, *pixd2; SEL *sel; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix0 = pixRead("feyn-fract.tif"); box = boxCreate(293, 37, pixGetWidth(pix0) - 691, pixGetHeight(pix0) -145); pixs = pixClipRectangle(pix0, box, NULL); boxDestroy(&box); if (rp->display) pixDisplay(pixs, 100, 100); /* Test 63 different sizes */ for (width = 1; width <= 25; width += 3) { /* 9 values */ for (height = 1; height <= 25; height += 4) { /* 7 values */ cx = width / 2; cy = height / 2; /* Dilate using an actual sel */ sel = selCreateBrick(height, width, cy, cx, SEL_HIT); pixd1 = pixDilate(NULL, pixs, sel); /* Dilate using a pix as a sel */ pixse = pixCreate(width, height, 1); pixSetAll(pixse); pixd2 = pixCopy(NULL, pixs); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (val) pixRasterop(pixd2, j - cx, i - cy, width, height, PIX_SRC | PIX_DST, pixse, 0, 0); } } pixEqual(pixd1, pixd2, &same); regTestCompareValues(rp, 1, same, 0.0); /* 0 - 62 */ if (same == 0) lept_stderr("Results differ for SE (width,height) = (%d,%d)\n", width, height); pixDestroy(&pixse); pixDestroy(&pixd1); pixDestroy(&pixd2); selDestroy(&sel); } } pixDestroy(&pix0); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.86.0/prog/rasteropip_reg.c000066400000000000000000000061001506303110300177110ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rasteropip_reg.c * * Tests in-place operation using the general 2-image pixRasterop(). * The in-place operation works because there is no overlap * between the src and dest rectangles. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j; PIX *pixs, *pixt, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test8.jpg"); pixt = pixCopy(NULL, pixs); /* Copy, in-place and one COLUMN at a time, from the right side to the left side. */ for (j = 0; j < 200; j++) pixRasterop(pixs, 20 + j, 20, 1, 250, PIX_SRC, pixs, 250 + j, 20); pixDisplayWithTitle(pixs, 50, 50, "in-place copy", rp->display); /* Copy, in-place and one ROW at a time, from the right side to the left side. */ for (i = 0; i < 250; i++) pixRasterop(pixt, 20, 20 + i, 200, 1, PIX_SRC, pixt, 250, 20 + i); /* Test */ regTestComparePix(rp, pixs, pixt); /* 0 */ pixDestroy(&pixs); pixDestroy(&pixt); /* Show the mirrored border, which uses the general pixRasterop() on an image in-place. */ pixs = pixRead("test8.jpg"); pixt = pixRemoveBorder(pixs, 40); pixd = pixAddMirroredBorder(pixt, 40, 40, 40, 40); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 650, 50, "mirrored border", rp->display); pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixd); return regTestCleanup(rp); } leptonica-1.86.0/prog/rasteroptest.c000066400000000000000000000116601506303110300174320ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rasteroptest.c * * This is in essence a fuzzing test for rasterop. * * These timings are for 1000 iterations of the inner loop. * rasterop: * optimizing: 0.35 sec * valgrind: 12 sec * rasteropIP: * optimizing: 0.18 sec (two calls) * valgrind: 13 sec (two calls) * * This has been tested with valgrind on: * * all ops with niters = 10,000 * * op = PIX_SRC with niters = 100,000 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void GeneralTest(PIX *pix1, BOX *box1, BOX *box2, l_int32 op, l_int32 niters); void InplaceTest(PIX *pix1, BOX *box1, BOX *box2, l_int32 op, l_int32 niters); int main(int argc, char **argv) { BOX *box1, *box2; PIX *pix1; l_int32 niters, op, selectop; setLeptDebugOK(1); pix1 = pixRead("test24.jpg"); box1 = boxCreate(243, 127, 513, 359); box2 = boxCreate(541, 312, 513, 359); niters = 10000; selectop = PIX_SRC; #if 1 /* Basic rasterop */ for (op = 0; op < 16; op++) GeneralTest(pix1, box1, box2, op, niters); #endif #if 1 /* In-place rasterop */ for (op = 0; op < 16; op++) InplaceTest(pix1, box1, box2, op, niters); #endif #if 0 /* Basic rasterop; single operation */ GeneralTest(pix1, box1, box2, selectop, niters); #endif pixDestroy(&pix1); boxDestroy(&box1); boxDestroy(&box2); return 0; } /* ------------------------------------------------------------------- */ void GeneralTest(PIX *pix1, BOX *box1, BOX *box2, l_int32 op, l_int32 niters) { PIX *pix2, *pix3; l_int32 i, val1, val2, val3, val4, val5, val6; startTimer(); for (i = 0; i < niters; i++) { pix2 = pixClipRectangle(pix1, box1, NULL); pix3 = pixClipRectangle(pix1, box2, NULL); genRandomIntOnInterval(-42, 403, 0, &val1); genRandomIntOnInterval(-18, 289, 0, &val2); genRandomIntOnInterval(13, 289, 0, &val3); genRandomIntOnInterval(13, 403, 0, &val4); genRandomIntOnInterval(-34, 289, 0, &val5); genRandomIntOnInterval(-38, 403, 0, &val6); pixRasterop(pix3, val1, val2, val3, val4, op, pix2, val5, val6); if (i == op) { lept_stderr("Rasterop: op = %d ", op); pixDisplay(pix3, 100 * i, 100); } pixDestroy(&pix2); pixDestroy(&pix3); } lept_stderr("Time = %7.3f sec\n", stopTimer()); } /* ------------------------------------------------------------------- */ void InplaceTest(PIX *pix1, BOX *box1, BOX *box2, l_int32 op, l_int32 niters) { PIX *pix2; l_int32 i, val1, val2, val3, val4, val5, val6; startTimer(); for (i = 0; i < niters; i++) { pix2 = pixClipRectangle(pix1, box1, NULL); genRandomIntOnInterval(-217, 113, 0, &val1); genRandomIntOnInterval(1, 211, 0, &val2); genRandomIntOnInterval(-217, 143, 0, &val3); genRandomIntOnInterval(-247, 113, 0, &val4); genRandomIntOnInterval(1, 241, 0, &val5); genRandomIntOnInterval(-113, 163, 0, &val6); pixRasteropHip(pix2, val1, val2, val3, L_BRING_IN_WHITE); pixRasteropVip(pix2, val4, val5, val6, L_BRING_IN_BLACK); if (i == op) { lept_stderr("Rasterop: op = %d ", op); pixDisplay(pix2, 100 * i, 500); } pixDestroy(&pix2); } lept_stderr("Time = %7.3f sec\n", stopTimer()); } leptonica-1.86.0/prog/rbtreetest.c000066400000000000000000000074051506303110300170600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * Modified from the excellent code here: * http://en.literateprograms.org/Red-black_tree_(C)?oldid=19567 * which has been placed in the public domain under the Creative Commons * CC0 1.0 waiver (http://creativecommons.org/publicdomain/zero/1.0/). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define PRINT_FULL_TREE 0 #define TRACE 0 l_int32 main(int argc, char **argv) { l_int32 i; RB_TYPE x, y; RB_TYPE *pval; L_RBTREE *t; setLeptDebugOK(1); t = l_rbtreeCreate(L_INT_TYPE); l_rbtreePrint(stderr, t); /* Build the tree */ for (i = 0; i < 5000; i++) { x.itype = rand() % 10000; y.itype = rand() % 10000; #if TRACE l_rbtreePrint(stderr, t); printf("Inserting %d -> %d\n\n", x.itype, y.itype); #endif /* TRACE */ l_rbtreeInsert(t, x, y); pval = l_rbtreeLookup(t, x); if (pval->itype != y.itype) L_ERROR("val %lld doesn't agree for key %lld\n", "main", pval->itype, x.itype); } /* Count the nodes in the tree */ lept_stderr("count = %d\n", l_rbtreeGetCount(t)); #if PRINT_FULL_TREE l_rbtreePrint(stderr, t); /* very big */ #endif /* PRINT_FULL_TREE */ /* Destroy the tree and count the remaining nodes */ l_rbtreeDestroy(&t); l_rbtreePrint(stderr, t); /* should give an error message */ lept_stderr("count = %d\n", l_rbtreeGetCount(t)); /* Build another tree */ t = l_rbtreeCreate(L_INT_TYPE); for (i = 0; i < 6000; i++) { x.itype = rand() % 10000; y.itype = rand() % 10000; l_rbtreeInsert(t, x, y); } /* Count the nodes in the tree */ lept_stderr("count = %d\n", l_rbtreeGetCount(t)); /* Delete lots of nodes randomly from the tree and recount. * Deleting 80,000 random points gets them all; deleting * 60,000 removes all but 7 points. */ for (i = 0; i < 60000; i++) { x.itype = rand() % 10000; #if TRACE l_rbtreePrint(stderr, t); printf("Deleting key %d\n\n", x.itype); #endif /* TRACE */ l_rbtreeDelete(t, x); } lept_stderr("count = %d\n", l_rbtreeGetCount(t)); l_rbtreePrint(stderr, t); lept_free(t); return 0; } leptonica-1.86.0/prog/recog/000077500000000000000000000000001506303110300156225ustar00rootroot00000000000000leptonica-1.86.0/prog/recog/digits/000077500000000000000000000000001506303110300171055ustar00rootroot00000000000000leptonica-1.86.0/prog/recog/digits/bootnum1.pa000066400000000000000000000610561506303110300212030ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 123 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment0¯ķŊĒ8IDAT™cø˙Ÿá?Ãv†‡>dxø€á0}`hĸ`ô$IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR •:ž pHYsb&2 tEXtComment1Øô<%IDAT™cø÷€áƒÃ†$ôŒ> ĄX``xü[­ō_\yIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment2Aũ܆=IDAT™c8`Áp@‚Ąƒ„ؘÁˆŒî30üã`ø#ÁđÂáGÇ O0n`h`€ ˇ }Ļ/CŪIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment36úėAIDAT™cøSÃđ@†Ą‡Ą…ĄĄŊŠūŗ0üįaø!ÃđA†á˜ËĀ0ŋŊ‚@ …áÃ_†Lx^IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úėAIDAT™cøgÃđG†Ą‡Ą…ĄŒÎˇ0üįaøD2`’…á?Ž70´70° C? CÆ6īwm‘ĸ#)IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment4¨žyŗ/IDAT™cøßÁđŸáũa`øF€Ņ1†s ķdāX% „7U1,ÄIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment5ߙI%GIDAT™cøĀĖđˆØđ3<°gxüŸáų†‡˙Č3IDAT™cø Īp€Ÿá03Cs3ûAö üpôÄmo`hg`øĖĀđ˙dh?ČĀÜ BÍė ü ėŪ;¨hޟBIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĪūáã0LøĀđđCÃÁ ‡¸ŒØAø 3āÆPĩíP Ö˙h|PĀđ€„öíû´÷˙Ÿ˙-&3„ē(IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment1Øô<.IDAT™cøß€áû†@܀„ņvˆĨø3Đ0ĖÄ?0ü?ÅÍPÜÄėü ˙Áƒ˙ņõČ×9nöČÉ.IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜XIDAT™=Ëą € @ŅOeé 7ڍā ÖÂP¸Æ@IAÔ‹×ũĪŗ58åŦJiÂÕ§äˇ7%oûŲ÷ BɐĒë°ēåv} bĸwyôF öë-jGĖaxIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™UÍą Ā DŅ/QPf„ŦÂhDŦuŲÄ#¤¤#‡R Ovq>3IČÚ%ēDŽĨlĪ‚÷Íq* ÃfüõøzŌęģ=›˛¨ū§S/á‚*ƒŠá”kIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮü‡0Ô0|øaÃđā ÃAūĮÆÍ`ĖÂĀ Â˙ˆÂÍ`ĖÂĐÂ@}Á˜‡á!ƒĖ˙P!ÃđÃĀhk ÃÆ?ŲŦ0ü !IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR !*ūœ pHYsb&2 tEXtComment1Øô<$IDAT™cxPÁĐ`ÁĀ`"X0| šs€ƒĄ„pÅŨ"YƒX8ūIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆eIDAT™-Ė1 ƒ@Dá'ÚŲn—kėá„)Ŋ’’‹Ŧ7ØtS,ų3‹^1 ą uĸ"Ž’Ykâ%k#ĶmhĐ[gË<˛[™á]ÔüWDœöļA|'{ˆöôˆļ“-ąˇĢ#Ō (; Úî]IENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úė[IDAT™eÍą €0CQŖ”ŦŅnFˆDAÉŦĘ"áčR ‚# B§WŪ7ŧ#ÚåÍ0ͰxD˙šÜø ‰ēK .)úq|Œ8 P?įß*CQŗQ3¨íĻĀ5ã6„įČLŋIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment4¨žyŗTIDAT™cø˙Ŗ†á˙ Ō€øŨÄ 6 ˙@XÁ†áO‚ τ†@5ø!âf î`ÃĀÄČā˙ Y6PsĄøƒäX@Ŗō5Ū0ō€IENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%ZIDAT™]ÍĄ Ā EŅKtƨd´J6čJŒBƒĀR÷Eũ4UˆŖîKwä]qü„l”Ž!ÔÅ×Ņ}ô$ņŲ(ĪĩÃXi›NåtīšĮļ€IQ’ž!/ĄF@˛-­‰IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸXIDAT™mÍĄ€0DŅĪ™RJe!"Ō&„Ą$âæÂ ņܟ]ڒP"Bāœxv ”ļ!ÂJk™ƒ=ŲÃĀ+ĩ´‡#­aŖÁzųĐ8ĩ…CR¤ė¨ŨIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜YIDAT™mÍą € „áßJF`”W8ĨÄÂĩ0.”=4v_ņ’ww´ŠR¨äbœUšg;ņDY‡ÅH™ Ėgܞ#éˇHƒšËõĮ=Q)ؓ×ū ö‰/ ßδIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/YIDAT™]Íą € @ŅO $q×°`(K âbē n@Iq9„N-^ũP+T„˛ėäš$Ôstļš>ŽA! œ+d ĐÉŅڛ§iāî˛ ‘ŧõoŧFYf—55ˇžG´IENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮøáCà ;†äüããƒ`ĖÆpđ?Cã&8fDÁ h|F¨gc ķū“ÛņĄFŽáGĐŪ @û92‡ũIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR !Å`ęၘT‹‚Abd€fƒ0PŨƒ?đÂ>DS¨IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%WIDAT™]Íą € Ņ#ŌŅ2 ŖQ:JÁ&.@ų "ōcĸÅë.9Î+q¤ %dķđBBũŲĩ™m&˛ĩ@Gé ę4>ÜË÷Ā"*b[ÂdaՏúÍ?ēÂŦy”IENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ]IDAT™]Ėą €0…á_L™ÂÂ튈k8Œnb6H™âđ<Däņu[ŖG‡H•HQwD˛-lϝé’]’˙SAX 1hæéŧķØŊ_¤§2ĸ>kõ-ˇ6yĸJ§IENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( SIDAT™cx˙˙Ãq >Ä ˜ũ˙?ų`ü˙˙(€â ˙?@ņC >ҁ¸ˆ™Ą˜ũÃ?(ūÏĀ?@X‚˙Øåë?‰ņF͊ÁĀ8IENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment8Ą(5˜XIDAT™eÍą €0 DŅOE›Q<C1‚k%b‘ŒāŌ 8Q:Š']qēÃÃØŠ&OœOhpM=A[B7!GˇĢÁ‰œ( wžÃÚĻ÷oėÅGvŽ}:-|hfaÕIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/[IDAT™cøßū‡0Ô0|ø#ÃđāÃÁ˙< Í˙Y ˜7€éFūĮĀpāÃūĮÎĀđ˙?ŗ 0ĐÜß@üāЎ ްax´÷#Đvū?Rd6Īx ËVIENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøß˙ƒáㆠ €øƒÁ ˙H04ūã`há˙ ė˙HÂÍPŊ 3@fĖ|Ā ļdĐNž*ö9ĩŽ IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR ģšĀ3 pHYsb&2 tEXtComment1Øô<IDAT™cøÃĀD?>0 €`q2‘ÃČ‘÷>ŠÜIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment2Aũ܆\IDAT™-Ėą €0 DŅhÜŅf”tŦE(%+Á&ŌŠ9ļ^qļt4\›Š¤×qg3Jƒ°ũv ŨC˙đDT92ÁDëÔŅ;×āÔQfį g•"‹zÁøÆ”íŖĸ.äQc ĀIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėSIDAT™-Ėą Ā0Ā\¤´7đ -#DĘb…(),Š“<9Ƌ 7Y8÷HŊLgĖ3ęYÅ?ų>îŠ4K/ŅĶxdw ˙•Æí(íŊ†éˇIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗIIDAT™MĖą Ā0 AĻËEŖąt6s6ņ*Uą D… \GāģæIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜MIDAT™cøÃūá#30`0b†Æ? Í üŠĄüÆP5  4Xũæ ėČø?‚Íü‡Ą¨ˇĒd׿ęÕ&™s6‘ IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/UIDAT™MÍą Ā CŅR°c¤cFAĘbtYãF ŧAQ$Å+,}Ėlx4, ŖĘÕ ŅĶgŧØ|;:ēEÔEƙXūŖe…ģj7lMŋzļÖķ+Ū‹J IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRō[ˆ} pHYsb&2 tEXtComment0¯ķŊĒQIDAT™MŒą €0ÄŦD‚.bFa.ʄ,öŖ0%úį.Nō™č΅s°°3c ؚhžč‘QØĮģsl4yUžMúRÔ)œę=ŨČ~-‹$$øÂTũIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR æI!Į pHYsb&2 tEXtComment1Øô<IDAT™c`€††† ˆF @ē āĪ,Í}¯ö>ØIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRŸøAĐ pHYsb&2 tEXtComment2Aũ܆VIDAT™%Ėą€ DŅīJ´`ÖDZ™—Ņ%\hāˆ‹ÎÍËî/Ŋ:wpŽÉ×(˜ė,+DÉršĶ‡CôÛՍâšE{Ŧĸūe.Ų6œ˙Lø×đ0~cnž9˛?:œŨ(2ę>Ņxlų*bĐ §8<ŒšĀüIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( SIDAT™EÃ1€ ĐŋéÆĘÆ5ܸ–›&. ÂEØ\;v0VhIxÉÃ#Œ"7€S¯đpäxĶÂ;„z†Ô6ĨŊÆÅ~íëf–ĸ­ũa“Ø<˙zîKÁ4sUŖIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜]IDAT™eą €0 /J‘5Nņ$[ö6î†O†Qų‘yX‚öI\UôÄáƒÛG™æ{ĻmEģoŽFžSDÆ69öD3¸;ĘÂ)fu Ī÷u­rÅŨžŽ_ôĶ9ęĨ‘IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment9Ö/aIDAT™UÍą „@„á˙PØD°áŽĨ+ĀDlė•"\† ûnp#ƒ/û™ĄQŲ¸X –ÛĨšFæF—OĨuƒíîâkŒŪ™e]ēËŌÍDž„qú7f{ÛGüR@™40†\ŌIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒVIDAT™cøüÃ?Æ? øƒĄ†áG… Ç?6 ūČ0<üÃÃpđŗ€q#7˙c€cf fâF(ÍU Á< dČĖ5; vūį˙j6įHŨ•ĪIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR ßŌŠä pHYsb&2 tEXtComment1Øô<+IDAT™cøWÁđĮ‚á€C}ŖD H*(ÁđA‚á4pø› +BœIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment2Aũ܆\IDAT™-Ėą „0ŅAŌÚJĨ¸ €čBZ˛D#ŋ„ fmŧl4܃đŸP'ō,NOüŨš#ā4ÛRY“e%JeŊxB}ŨŖqM†¯†*ĸéŖęnÁ-܄1iļIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úė[IDAT™-Ėą €0CQŖ)3ŒvģP¤dĨ Ö0„."8'Š×œüīLÔH”‰8 ‘IŦÎ~ēK.9ˆGûÔqkĶë‚Ū¸,Á-.6CdžmüÚՌ6ņ{ķ<ãx$q§IENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗHIDAT™cøüÃ˙f$Ė Á˙@˜ũÃfūÂ@ųí>ņc ~ÄįĄx>Ë3*0Ā@ƒÍB2÷Cà8‘5”`knîIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙đÃ˙H¸Š ø˙AÂ?>0|8øá3Píc ~ÄĮ¸ˆ  ˆá愚 Ö/Āđ$÷ĶŦÅ=é9jŲIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%PIDAT™cø˙Įá‡…Ã>ÁŒ@Ė€áķū ÄĖų0<ūāÆ˙0`āÃ@Ü ÄĖ@ØŒŲzø`h?|€á;Ø<E88Ļ…ŨŠIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸRIDAT™uÍ!€0DŅ•Ŋō¸^̤‚k@¸@q˜â‰ÉîÎrFq ĸ#ö"ļÕfËÎyņúŒI^ž…ÅÄųáīÕI,žkūŲ“n…Õ*l:ŌŠčIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( ;IDAT™c8ĀĀĀ `ėÅú?B°<?>°˙đ†˙ ÜÅė@Ė€á˙Á‚ adšō˙ 2ÕĖĐIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8Ą(5˜SIDAT™-Íą Ā DŅ‹((UOJ‘’•ˆ˛ˆŗt.Rä)^åoŧ#–ˆķ%šÉX€˛e‹SčËĄé WWkŅW߾͉"mĒŊcK›?Ū*K̓GIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/OIDAT™UÍą€ CŅtŒá(ēkÅŖp 8€ŽNŋ…§¯Čå.Ņ\ŦŦ–­\­„Đۇ^EJȨäAū°…x`36k?,ķUøœĢ/ūŧ89a&šÎIENDŽB`‚ pix[84]: xres = 200, yres = 200 ‰PNG  IHDRØJŠō pHYsÂÂnĐu> tEXtComment0¯ķŊĒ6IDAT™cøÃßĀđšácÃÁ ‡000```GÃí@Üü¨æPm#õüāoÕ )œ9ĮAIENDŽB`‚ pix[85]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cx€ĄŒ‡€jĀ*_0™aˆIENDŽB`‚ pix[86]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnĐu> tEXtComment2Aũ܆1IDAT™cøPĀp@„æ10üƒ úcĀđ§€áGÇ 0lŠa`ēĄiķM@0IENDŽB`‚ pix[87]: xres = 200, yres = 200 ‰PNG  IHDRâŧņú pHYsÂÂnĐu> tEXtComment36úė>IDAT™c8ĀĀĐCM, įxūņ0ü‘aøaÃđŒČ0<āaøĀÂđá?5@Q?4°0āax`퀠ŸĘɤIENDŽB`‚ pix[88]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnĐu> tEXtComment4¨žyŗ:IDAT™-Ęģ ŅÃ"{̐Å÷pഐDü¯<ŧãW\°k SBSŠ’‘Ÿ…ŗŊųĪÜÖôIENDŽB`‚ pix[89]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cøÃĀđŒ>Ô0|øBū0<„ĄƒØ0axĀÃđŸ…á baøĮÂĐĀÃĐ hĖa،IENDŽB`‚ pix[90]: xres = 200, yres = 200 ‰PNG  IHDR*ōt pHYsÂÂnĐu> tEXtComment6FŸ@IDAT™EÂą Ā Á\P2BFa4lą˜ŲÄ#Pē@rƜŽē”Rp!…|9ƒ˜øĀ;ÚPÁŒĩYņˇ?„pŲ?›0¤âílIENDŽB`‚ pix[91]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( 8IDAT™c8ĀĀĐCķ1üĸ60âcøDr ôĮŽáÕ1|Ŗ˙@čā?†Ã˙š˙1´˙€ØÂWŌä3IENDŽB`‚ pix[92]: xres = 200, yres = 200 ‰PNG  IHDR^"â$ pHYsÂÂnĐu> tEXtComment8Ą(5˜:IDAT™cøaÃđ€‡áp Ãņ í`d<Âđ€$DXÚ@âũø€Čö ‡€Äđ@>1°ėIENDŽB`‚ pix[93]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment9Ö/CIDAT™cø÷‡áƒ Æ, Í í@ˆŒ 뿆 >00ügaøĪÃđ‡á Ã Ž†Æ? ėWā׋Ų(ŖIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment0¯ķŊĒ@IDAT™cøÁø€€đ†Æ Í@Ėü‡˙‘äAę›A¨÷ М `sAĻÚķ‡ũ˙!%ôŸĐ–IENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR ßŌŠä pHYsb&2 tEXtComment1Øô<"IDAT™cøĪĀD˙ū0040 @XäЈŠūs1÷îåHwIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aũ܆bIDAT™5Ė1 Ã0DŅoŌ¨sëÎ×p—kšŗCâĢč(ęŌǜÂh3RČƒea?q‰6 ąSŲ(,dŌpŪ ¯öķöūąP—ˆje!˛ųˇšq›ÜĢQf‘W{Šķ°Ū„á?ũĄ/”1p*Ō“^IENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment36úėQIDAT™cøÁ~€áķ†Œ@°ņC3ˇâ ũ@ú??8Āđ˙gÉ1@đ~(fa 3М š ķAöü“?.ZņÆIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment4¨žyŗJIDAT™UÍą Ā0DŅƒQ0üoâf fūĀđ‚˙đC1Мöü„ë!ø˙ĮŽ˙˙ÝA¯†ßõEIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment8Ą(5˜[IDAT™UÎą€ …ៃ’,ÅÁ,,`3ÜÄ,)rÁ€wx_“ŧ{ ­ ꅊpŗqąRē=R$rę_І8rŸw–Ž@Ō@6ž19“•ąKK°l˜ũĻ:ÁūxŲũ/šČ@^IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment9Ö/LIDAT™cøÃ€áķ†Œ@؁ųûLĖ ÄŒ@9hâ@ â…ū˙€ā~ §¤öTĐL Ų€v|`?ʝŒl9”IENDŽB`‚ pix[104]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment36úė?IDAT™cøøƒá€Ã †6†v†ķ ˙ˆƒáà † dEū3 <ņq00p04X0|ü>EøŌÃãIENDŽB`‚ pix[105]: xres = 300, yres = 300 ‰PNG  IHDR 3ōÅa pHYs.#.#xĨ?v tEXtComment4¨žyŗBIDAT™cøžá;Ãv†@ÄĪđˆäūØ3ü¨Ą˙Ačc;Ãcv(:Fũ0ÔĀĖ í˙ŲaæĀĐvøÃ!\ÖŒFIENDŽB`‚ pix[106]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment5ߙI%7IDAT™cxø‚áI0<øÁp†˙`8`ÁĐ&Á0Ÿƒá:šßĀĀĪĀĀÂÁĐĀRöãv[x'UđIENDŽB`‚ pix[107]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸJIDAT™cøĪÜĀđ‡ąáCà ~Äūn`8üŋĄˆø¨ŽųåØ?0Āq;7Cņá@ũfĖdoIĶ&;+ežĨIENDŽB`‚ pix[108]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™c8ĀĀĐĀ€ü ō ö ˙!HŠū‘à † *@čÁ†?04˙`8ūœEÜ;õIENDŽB`‚ pix[109]: xres = 300, yres = 300 ‰PNG  IHDR‡“ pHYs.#.#xĨ?v tEXtComment8Ą(5˜CIDAT™-Ęą Ā ÁG.\f$†Ŗ`-G^Ä.S…X(ŌéĢgW%„éøüŨia‚)C7ZĐ=Míœ9ÄÅ[?ŗ,Œ4ÚúIENDŽB`‚ pix[110]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/BIDAT™UÂą €0 EÁ'Ĩ ĖŒ’Ņpäâ¯ålâl@I”Đr:žJFĮšųĢÄŋAĀ ¯ą‚Õ‘#ĄŠX#¯ ēJ?+qc.IENDŽB`‚ pix[111]: xres = 300, yres = 300 ‰PNG  IHDRņĐ pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cčg`ÂF†f4ØČcĘ-‡‡IENDŽB`‚ pix[112]: xres = 300, yres = 300 ‰PNG  IHDR XxÚ pHYs.#.#xĨ?v tEXtComment2Aũ܆-IDAT™ch°```ā"y0úF$~H0|ā`xØĀĐÜĀĐĀĀĐĀĩī īEĻā™IENDŽB`‚ pix[113]: xres = 300, yres = 300 ‰PNG  IHDR*qË pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ0IDAT™cø÷áƒÃ>†l ím íM ė‡Āčˆä‡ĄöC ‡Ųđ1<ļĩHĨļáĄIENDŽB`‚ pix[114]: xres = 300, yres = 300 ‰PNG  IHDR$CT˜uĀlcx‘ôôĄåÉ=ATT„‰'—Ažáö:ņ¤-Ø“Ę˛+iîĘĘ5üVÄôĩJķŠŅ= IENDŽB`‚ pix[118]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment71—( TIDAT™EÃģ € EŅK((ÁQ Œ…c¸ Ŗ0%á‰ÁĪIH_CIJËrt‡ožŗ-¨ŽeE9ĖI(ŽÛhDˇĸššúš,sž¯"ŊƒˆOô7ŌŲ@ģ˙­ežIENDŽB`‚ pix[119]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment36úėmIDAT™MÎÁ € DŅ!8R‚ĨH)v"ØŌ–B 9֍ŅË Øā#Ü 3 `$ÃCĪ,bÕ¸w+¤ nøÔ%ĨÔĢ‹N{|Ÿøū"é"ÎnDõBg œėՍŊ ~Ą1{5ĖQĶ„‰JIENDŽB`‚ pix[120]: xres = 300, yres = 300 ‰PNG  IHDR&ž ļ pHYs.#.#xĨ?v tEXtComment4¨žyŗfIDAT™eÎą €0ĐŌ. ¸ˆ…ƒY|pąŅ ~™"ä{g‘ÆæqÍ'îŽâž‰­S(#7ID0’ ´ԏ-Ē”XÉä˛Yå4$‘ĐA#í‘ËëŸD”ē|‰Į_EP¨[Íš˜IENDŽB`‚ pix[121]: xres = 300, yres = 300 ‰PNG  IHDR%tÄ pHYs.#.#xĨ?v tEXtComment6FŸkIDAT™mÍŊ € EáK(hLœ@L`ŗ7 #PRž—ÄŸÆæ+΁ę.ĐbIVtGš/$ęĒ ėz#ņeõNĀTZ6CÎIœ(1ã‡nSš1šĢŸŅ0ķ‘_đ֝Ę,ųJÅzšgxIENDŽB`‚ pix[122]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment8Ą(5˜lIDAT™MĖą Ä Fá‡((ŗÂq]VÉ$Ŗ1ŠGpI ŋ•ätÍ'íĮōdŦ†€3›(#čۋ˙Ą/AnŨv˛1(ķūæ(īąb_ŅNQéĻZŧ~č"Í`(PģzMöH-ģėųF€jŖ_øIENDŽB`‚leptonica-1.86.0/prog/recog/digits/bootnum2.pa000066400000000000000000000600401506303110300211740ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 125 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment5ߙI%=IDAT™cø!Áđ„H0<ūÁpŒ04T0° ūá`øD ˙Ā蔱ŋƒA^‚Á¤ōņ*ŲņĢ'IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ģšĀ3 pHYsb&2 tEXtComment5ߙI%BIDAT™eÆĄ €0@ÁˇAWú›!HFęcV( ÁTZl“Į:ƒEVIŋöY69¤ČÕudwË#§ė’eōh&wfk'ŧIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%XIDAT™ch˙üĄųņ†æ `˜ˆí?0˙Š°1ã†Ã Ž˙`ø˙˙'ĀĐ Æ ĖPv;P]˙†ū Į?|`xđáķ+ŗ:Â?ŪfIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹áŧ pHYsb&2 tEXtComment5ߙI%:IDAT™cx`ĀĐ ĀĐ`ĀĐ˙á˙†ũ`4ųCCH(õá?5€Đüų~†v†ÃĩŪäG-IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR ĩY' pHYsb&2 tEXtComment5ߙI%6IDAT™cxĀÁĐA ũ?@h>˜d¨````ā`čá`øĪĀđŋ„æ70đXũ IT‰Ä\ÄIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment5ߙI%OIDAT™]Ëģ€ DÁs-ÁRlí:ąėLLÉ ÃĮ8&›ÜGuąō'XĨYmŧn¤ ô쑐Q'iôŸ™Ņl"Âi‰Ÿų§ÕĒģŋ5O*ŋqãIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment5ߙI%WIDAT™mĖą €0 Á(Ōf”lĀJ €„˜ 6€ÁĨ‹ČÆĄ‚âĒ—÷÷ßĀčĘĮ„‚-¯Ö倠ŅuލüÁ¯#ä0´Bę´˛JeĮ•â“åČ.<ÔđnđoIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment5ߙI%BIDAT™c8ū‡áā†Ēah˙ÃĐ˙‡a>õC¤xÚYæˇ0üĸÔ€˙ { C;Æ5(o ūE‚ĘIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR˛Y1 pHYsb&2 tEXtComment5ߙI%UIDAT™Ė1 €0ƒá_:8z„ÕH/VpččZ\  Æáō¯č§¨ÁV‹ââļįĪŨŨ&ZōŨDŠâębLLÅR…0‰íë"äŋŲûõŨ.i[ŨÆ4IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRyҊ” pHYsb&2 tEXtComment5ߙI%NIDAT™5Ë1 €0Ņ ),=’WûbáĩRä.䂍… ‚Ńi†ëį ÎOx Y´C”WØŌPLTƒęÃļ;ëÄ´*B(×} É$˜Á+AIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%PIDAT™cxĀ|€á ķ`8ū˙Ã{ >„ąå0qČÛė‰IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment8Ą(5˜9IDAT™c8 Ãp˜‡ĄŊ…˙ąˇ04ķ0Ĩ ˆ‡Ą…ĄŸ…AžAū ač?ÂĐÎRđá´r_UN§IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment8Ą(5˜FIDAT™cøoÃđŧ‡áü†ū' ķ€P?=ahÂpøÃ†0ôI†á=Ãų†ųG@*åÁhūę?ÃpüÃį?Úđ$ũŠ 8IENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR^"â$ pHYsb&2 tEXtComment8Ą(5˜3IDAT™cø`Ãp€‡Ą‰…ĄŊ…Ŋ„š[X@‚d@ČrŲ@Rü`Qs€( ņĪ1ĪÜIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRąā‰ pHYsb&2 tEXtComment8Ą(5˜>IDAT™cøĀĮđūÃųG ÔF͏ž1`c8ĀĮđ€áÃ&†ķ ũø€H *;ūˆáUķ\YíŅIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8Ą(5˜cIDAT™]ŒĢ €0D Ą‚Ačn$#t•#$+´T–P>GR…xæōîáˆlˆÔq!ÖDl™˜>ŠĢhŋˆå xĄ—ßUô{b„O>;Ø ØōCûŦæՐô-†/՘;:G3#IIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜UIDAT™cøÁ|€áÆ?ūa†ÃHø ;€å?TÕՃôüaŌ@}€r€ú~004Õ21;ˇ˙đ›Áæ8@ÍĒWęU>Ž\4×iNÎfIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR–áĒ pHYsb&2 tEXtComment8Ą(5˜NIDAT™ĘĄ €0@ҟTTv$†aÔÉŽ9Ņ5¸ °Ww…äåĢĪSņ„-†í¯vÖafOx&ō÷l†tÄ)CP Ú…ŪØ‰bz‰Ŧ$U§ĸÖIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR˛Y1 pHYsb&2 tEXtComment8Ą(5˜TIDAT™cøcßĀđšáņÆįŽ˙â? í? ¸Č??Tķ€ĸö#ÍĐĀpøPÍv :~ūƒĀė@}í@|đ#DßūŽZ*ŒDGėIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment8Ą(5˜MIDAT™MËą €0 DŅe1Â”‰XĖL‚Gpé"˜„‚âé¤Ķ÷ĨŒĒxI(ļ ęÂLúÚŗC°ōÛąēŪā0¨žbe˙´šYŸ¨ú%'ƇwEØIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment8Ą(5˜QIDAT™cøÃđƒáCÃ ˙H0ūĮÆÍP‚%Āøá †~0Āā‡p= õí˙Ø10PîC#PŨ *~0ū˜ú2đĮā]IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8Ą(5˜fIDAT™5ÍĄ €0„០°+”Í:($ŒD‚@˛BöɊĻpŸ¸ŧË=rmÄĘkôŒÉ1eGũģŪLn4Td8v¤đ–î6íĘē /IENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( CIDAT™cø˙œĄ@ėķ˙Î˙w`˜Â@öü?îņ˙Ÿ@üˆ?Cņc >ÅíPĖ~€á.ĖÁ˙å\ē8•›Rö@IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRąā‰ pHYsb&2 tEXtComment71—( =IDAT™c8ĀÄĐĀB@Āˆa˙!†˙m ˙ûūķ1ü“Ą?v ôŖŽáĮ?†˙ūc8øá0˙ˇ°ô܂IENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment71—( 0IDAT™cč÷`h`€û†ú ˙hà †˙ ˙Āčũ¨@ `ôŖš*N>ēŊIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment71—( XIDAT™MÍą € Ā/í6a71V–Žā*yCa‹ąĄ â),Ž>܅rd üXLÅ’Ŧbá"Q. ˛7sĶžĘY’ûÄj$XéōÍ&gá R^DĐTQŸęIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment71—( KIDAT™-Âą €0EŅë$%ŖEpGp#ŋtIa+ØXˆOôp0‘ņíģņá Ƃ6dhA=Pđwü_‰ķ+öz“˜EW›++ĸ‡f)IENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment71—( 8IDAT™ch`c``b€&ūO ōŸöcøDĪ`čÃ˙s ˙ûˆ„ūɁĐ0úaBęļq8ĶíIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( DIDAT™c8üƒĄ‚ øķ‡ üĄøņy ŪøÃ˙f f‡ā ĖĀđd,Á@بļūõ…0VĨ‰IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment71—( 2IDAT™cxĀÂp€ĄĄ™Aūà ę!(úgƒ@j@čũĸ~˙éū L:R„7IENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment71—( @IDAT™c˜aÃĀĀ Á P8ŸąAūqƒũs >Äįū÷ą<˙ŗo`øÂõ ? ø ˙ûŋHÃ'ĪwëAIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment71—( EIDAT™-ÂÁ € EÁ—X€%PŠĨɍÂĀĐx€áↇD# â€āĀųYUG IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ĩY' pHYsb&2 tEXtComment1Øô<$IDAT™c`ƒ† ,~T`G`čY04H@t™]ÁûåV˜IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR^"â$ pHYsb&2 tEXtComment1Øô<IDAT™ch˙ÃĐĀĀĐĀÂĐ ÃđÆXô@†ž89ųščIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR Ķí pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ` ‡0d780080`ĸ`„Ę}PE  čũĒ+a IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR=Û pHYsb&2 tEXtComment1Øô<IDAT™cha`‚°äÎ Ņ\Š EIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ģšĀ3 pHYsb&2 tEXtComment1Øô<&IDAT™cx|€áđFj<ĀpôŒ ė€ČĄĩÅ'~õ&™”IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR˙šÁB pHYsb&2 tEXtComment1Øô< IDAT™cøoÃđĪ†á‡ ƒ 5Ų”#†  !J{nj˙IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment2Aũ܆IIDAT™5ÂÁ € @Ņ.ŪXÁMp5⎎$t…†%@cZ_3Ą)ŗŗ)̞ükCžãXâ1.cÜȤ*9Ā7‡—᜛uIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRˆ{9 pHYsb&2 tEXtComment2Aũ܆0IDAT™cø÷‡á Æ2 ˙‘‘ Ã? úÃđ†ž˙a8ø‡Ą…áųŲ(°R“áŊIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹áŧ pHYsb&2 tEXtComment2Aũ܆4IDAT™cøđá€CƒÃ†˙ 0$E˙ ū0üųĀđķÃį Ī?0?Āŗ=÷æ/ëĖIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment2Aũ܆FIDAT™cø÷‡á Æ>†ų ü ė ĖÄĀĐÎÂđ‡áŸ Ã?†?5 ?ū0|ūĀđøÃá , ÄÎiQ|ŊŅŨIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR)ā"_ pHYsb&2 tEXtComment2Aũ܆BIDAT™cøų‡á Ɔ†ũ, ˙[PQÆ˙2 ˙€Č†áO Ï? ˙0<ūÃpø C°‡éĐ~‘ĖIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment2Aũ܆BIDAT™cøÁÎđ™á#CC#CķCū‡ ō`dá3Ãv†ü ė~Ô3|øËđđÃá Œ 04˙?’īŋå­9IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aũ܆QIDAT™-Ë1@@á…Ō ¸‰}ĮR($$JGp•į&{:…ėú‰â›nHÁ9*'–R8.ëkw6i%LŋÅÉĩ4FęāŒĢ7"†Ë¨"ŗū|~Uŧ&¸,0å?IENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR ÁFp pHYsb&2 tEXtComment2Aũ܆2IDAT™ÂA€ ĀpQĀ@+Ņ„ >y0(˛ŗúĄÄÉÅŊ7^æ#z+eĮ3žā#-Ņ›xÛ¸ļĀÜķĖĐQ{Âŋ#IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment2Aũ܆PIDAT™MĖą €0 DŅĨHÉ,Jq(kĨc ØĀeЏtČzĪgz‘ECÔ&Ž –€bŲŌä]mp:wķũãŪXEßÜp˙1‡ŋ¤ĪÔ!r˙¨ŨKIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆ZIDAT™=ĖÁ Ā ƒá@p„ēIWq”ŪztĨ‚‹\@đbAúkéაÃ[‰ļDf@,ąy¸ĄãÅôŊJ˜Č)É!ޏÕ뛚F\R%K’ûglŗđ'r=Å ÛIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆]IDAT™eĖą €@DŅp%h'ļ˛Ĩ` ļĸX† 6p`r¸Î%&I†OĖNiœŒŗšągc*émTš2B˙XœXe”ä<­s÷j†šrÉ)› ˜tŸ¸í3<×ÚŲ­IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment2Aũ܆eIDAT™=Ė1 ƒ@„á ¤tâ ŧ’7ˆba´`á5â ^ē-ĮIaøšaÔ…pŽčØJâYųēŸĐüL6ģÛkBŪÉ{ŀ^6[Ŧ NÖGĻ(ķļC+™ÄhüuŒˇ¸F—6Ōۉ IENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment9Ö/HIDAT™cø÷áƒÃ9†ã} ím 뇸É ü ¨Œ70<``øÁĀđüCķ!b’ĮÚųČ1<°cøķWįŊ/šŒ3IENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment9Ö/LIDAT™MÂĄ €0EŅģÁ0 Ŗ!ȎĐUJ•Ŧ@ķ(˛IáaœnãZq'BũÚīr˛%ŌH+ČŅŽ2 ČxúDŸŠÂÅ!ĸ^ô;'!:ÛIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment9Ö/WIDAT™MÍ!€0DŅqģģŽkôhõVąį@aK0#š–B‚xę'3čBŒBėá•X™C‚Đ0Q~Ō,ē>JØĒĸšĄ§„ÁO†‡…|ŨÛg|8Ņf^¨^6C °žIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment9Ö/BIDAT™cøķáƒÃņ>†ãm í‡Ø!čĩQÃᆇ ŋ0ü?ÄpüC3choc8ÜĮđĀŽáĮ?ģ/ŌUŋƒIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment9Ö/GIDAT™cø Įđ€ápCû!ęĀĀC@vû†æ 00|``øßFm ˙Ųūķ1üãcøaĮp Žáā?†ã˙CĻZÅ"DĖIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/ZIDAT™UÍą Ā0 Ā)Rz‘qŧŠ+—Y)"kŧ7PŠB ˆášîų‡Â⠉K+ē ē ŽT>øé6Ũi( Uāģ ˛V'%"7c¤FøJœ[ĘOÉ38d€„MˇIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment9Ö/^IDAT™EÍš €0ŅA„¸Zpi”€D@[ Ú0üЁåe9$‚§ ‡Ō‹Ü 5"eq–‘ŊÄĮbáW]Åë æōÚr`MD$;Ķ'NØęf׉ę¯û§AL&Ķŋ1=`<õIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment9Ö/HIDAT™cøQĮđĀŽáCķ1†æC í‡؁čĩƒŅņ†L ˜ū01ü?ÄđūÃņc ‡Ī1îc8 Įđ@Žá÷?ō€+M–IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR‹ęčj pHYsb&2 tEXtComment9Ö/EIDAT™cø÷áƒÃķ>†ãĮú˙tÔ€ĄũÃņ ?0üEį1´bh?ÆĐ~ŽĄ}CģÃ;†˙˛ø$nĨrčMIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment9Ö/SIDAT™-Ė­ €0„á7ЍdÖĀņF‚`­k€Ę•uå ˆGŨc-‹šDšÅŪŦ‹ÜãĮįx5œÃiĨB%čK0Üģŧ˖ü‘ŠĀÛ$´ę(8€ķIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment9Ö/[IDAT™5Í!€ „áß$ÍJōËH'=ãEđÄžOŅđÍÎlØEĄMBŨ"E"šR÷ĮŽŽYG>’bũSƒCpčjúĪļ÷˛íŗ ųĘl‹Ü?ô8ĸéĒ*ÄIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment9Ö/ZIDAT™mÍĄ €0DáGĩŨ€­+ŠÎEēHQؓ„ō…@|æå’ã^D›EÄ^ER$ˇ€.˙Á¯Ü ™"8*h…nŊ7˙:M1IÁ6‘RQ6!gߋ6„6B }IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRĩé`_ pHYsb&2 tEXtComment0¯ķŊĒBIDAT™cø'€áķ†Œ8ĀĐ˙įÃü ûØū? Ū˙"’?˙Įá1Pũ žėūķÁ"vû)=IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøÃū€á#3$0<(H`xøCá ūŖĀĐü‡ŒÛ‘0; W퍍ŋd?ū4ķĎ?@üŸ˙4ĩ.›IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRgES pHYsb&2 tEXtComment0¯ķŊĒ1IDAT™cøgĪđ˙=Ãķį ‡3ČĐD ˆ?‚ÔĖđø9Ãįã ?øˇœ´Åé IENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment0¯ķŊĒ/IDAT™cø#ĪđƒŸáÁa†Ã@ôĄˆ€3‚ˆ7ƒÕU><Ėđ¤÷=ÛÔ{O¯IENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR æšŌ pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøĮ˙€áķ† |H`8üCĄũ30°˙c`ā˙Ąal0Ęõ1HM;Hũ > ^  €fũĪäu"‹Ŗw(ÉIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRl˜; pHYsb&2 tEXtComment0¯ķŊĒBIDAT™cøÃüƒáÆ  $>H04ūã`h˙ ü`܀‚û$ß TwđP¯[€ÍųÃø|Á!`‰2ĨËIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment0¯ķŊĒ2IDAT™cø`ĮđüÃ˙s ÷Ÿ1ĖĸG ōXŅ0ŗjæbč?ÆpūÃ9†uÍĶ\› >IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRzW pHYsb&2 tEXtComment0¯ķŊĒ5IDAT™cøgßĀđŋásÃáĮ íøŗ`@Á`ņ@u@5ú€zūØ7¤ã HtãcIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøĮ€áû†‡0<||€áņĮ ‡?`h˙ÂH˜/†ĒûāĀĐübƃ‡>01Đü?@{ūÛđ 0ūØ­IENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRŸøAĐ pHYsb&2 tEXtComment0¯ķŊĒBIDAT™cøĮüáã,`xđĄ€áā0nü#Å ÍH˜ 7åÁø‡Ãa¨žƒ@3Í™2ûûÎ3*꒎|™IENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮđ‡á Ï:†˙eūįↃ@|øC3€cf$ĖŽ$ی¤ū0X? а™ūÉ0ü¨ąÚVÃđŋõ 5;¸iMIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøß˙ƒáķ†Œ?>0ü`xđĄ‚áņ †Ã,Ž˙‘`h‡á ėpĖ@#Ôļƒąc †‡*>üÚY´ģøŌ5Š : IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment6FŸVIDAT™cø˙Ŋá˙c >Äü ˙äūØ70ü¨o`øđŋá!„âæ~ fbÆæ‡ í ¸˙CûŠ5l`8üšáP߈š5įšā'ŨIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment6FŸEIDAT™cø†á߆5 ū0<üÃpøÃņ? í`ÄPÃĀĀBė- üäčņƒQ˙†ö# ‡{Č0|¨qŋКâ‚IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment6FŸTIDAT™-Ėą €0CQŖ™ƒM2;Pd-ŖˁX⍏"| Åk,ëãÉDŸ_sâÍ šk¸ˆúĘMd}1ɇėåÔЇ][“3zjXô?åā1ô|˞TIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRąā‰ pHYsb&2 tEXtComment6FŸAIDAT™cøŽá?Ã9†v ū1<øĮpđCƒC{˙0zBė@t€ĄųÃÁ6†| ė÷ŠY–cIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment6FŸAIDAT™-ÂĄĀ EÁ—9¤„´ĘÍo æD$-@H""ŲYNf'–1 ôā’ĀĀš6ūúNĸQÅ0VæÜ/).ę[ŠGIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸWIDAT™mÍą €0CQG‘HÉÜhŲ„2%3! Öp6HyED0ˆ’âu_6ˆ+=žm%8ˆ*ģŸ"“<#Jęöš;~ļ‡ŠÚŗeTj__žxj4‹t•HIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸ_IDAT™=Ėą € ĐŗĸdM$ą°tWŅP¸Æšå/ˆxÄÄâ5w—Co@Ī2#š',u•”cP—ĩYHŦ•p5Á[Bôķŗøe˛kŗi{ŨD9õĨķ|xÔ82,iRãIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment6FŸIIDAT™ÂÁ € @ŅozčŽĒ„Cįj8¸F xá`DÃËc*0„.ÔDsJãēąIVNas$֎ū[sĨ8^#”ąķ­NeŗRIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment6FŸWIDAT™EĖą €0 DŅK¸d†c‘ŖĘZH)˜Ã$ĸIGÅkŦFwâ2ĸ DŨ‰ü "r˙Ļ™՛ZÛD ā HâĐ=KTĸŦú¯m_øį1-CCĖIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR}$ZŠ pHYsb&2 tEXtComment6FŸOIDAT™=ËÁ Ā0 CŅ:@Wđ(Ĩ#t„@&ķ&ÁĮBRĶB’XULŒžˆ”ÁģáÃhKÔōãē)‘˛;6h›}< å6=ãÔ ÉŠ&Üõ“5ÍIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment6FŸVIDAT™cøßPĀđÁ€áG…Ç? ū0<ü˙á0ˇ#aöæ \ĀĀøÃ€ųŗ˙a ÜҁjņC ž  ?€füoū=3—ÜXœIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ\IDAT™MÍą€ DŅE(ÁR,ː܀Â(D ܀÷01xsüšÃđDÁ=ĄrÃ-WM“‘Į'¨]ÔâJpj|3q ~"r˙ڋZc÷kMöŨãä Ũ7n.IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR }ØcŅ pHYsb&2 tEXtComment36úė=IDAT™5Ë1 EÁ‡¤TZ%°a )Hø#C$%$ˇS gËcû'B,G–*ÎĶžš2JŅu‡$‰ޏâIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment36úėNIDAT™cø €áû†ķ‡0ô?âÚÁØJ`øÂ@š˙0|`‡¨˙Ā Ë;€q?HĪö ü x?CÕ<Đ¯9ŧivIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹áŧ pHYsb&2 tEXtComment36úė8IDAT™cøPĀpĀ€ĄA€ažÃúWĀđŖ€áũrūQƒ}ƒ|ŋPËj€] ũßüIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úė=IDAT™cx ÃĐĀÃĐĀÂŒ@ÔĀĐÜĀĐÎĀđŸ…á Æ@ÄÂđ(o``†!& Ū6 ÄĖÉM+ãIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėLIDAT™cøĪ€áû†?Ė~0`øüāÃķūcÁø0P-;˙g„Ёä~8 a8{?ķÕ°ÍfęiÚu€˙ΟA‰Éu.IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úėSIDAT™mËą€0 CQŨšHÉ ÍŖdfbq,`ēFIMņ*}Ą@ŧ2âČá¸å”k‰Ĩ’(ĘĄžŠˇų‘ĐĻŽPĪŋ]{›Ōa X'ēūÜøŠÅ;Ėl\X=IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment36úėZIDAT™=ĖÁ €0CŅ/ÃU:Š#8‚āŽ”UŠ Ô[ÁbR=ŧCHuP,[šáHķ'S &QŖ­6ˆÜĸLOgŪūJĶōæ~x‰^ĸķĮââŦē‡9<"e8,IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR æI!Į pHYsb&2 tEXtComment36úė6IDAT™cxPĀpĀ€á‡ÃšF@†Ã?†?@$ĀđČeŖ´_€Á€áCûŊP ]IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR–áĒ pHYsb&2 tEXtComment36úėCIDAT™cøÁĪđ€„42<E˙č0Ã˙v†˙ü € Ø33üo‹?Ąö Í`Ä $2463`gxĀ1f!ŖMŖIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment36úėXIDAT™EË1 Ā Ā…+,}’_Û`a™/R\™/øK A7H1ˇw‹™ˆˆn„ÄsĨšũneKˇĨŋ)ÞŊž€Õ—"ÖE3¨åT×3Ņĸz‰Ą™.ÕČ5¤UIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment36úėCIDAT™cø?ŋá{Ãæ†Ãø7>@°˙Å˙3#Ô}>äÅĪ?```FÂė ”ëâ&F Z úō ¸(ævŪRIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėSIDAT™cøĮ~€á3ã†ã0œ˙āĀЏ„Û?`čŠ˙恸ˆ™0üĒ˙ĪÄ@Ø‚0`Á9y :~šÃ 4ŖAūÃī˙=Š>˛%"ŌIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėWIDAT™]Ęą €0 DŅC)Fķ*EJV‚Š5Nb—)"…3é(ždų>ÚL8ˆ‡†Û EŽēĄÔq'z¸dõ}˜ūĸöĶ~Æļĩ‰DÎęˆēō-Æ<ę1įŌÂIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úė\IDAT™]Íą Ā Ā(RÂ(Œæ"ŠŦUÖ`„/)PČCRĨ8ɲũ6nOp#* %G$NGûô€$—ę1i>h™čŽh“˛Ģ×âģĶĄ ā~vÍŧœēQĒéįĘ?ėY8Ŧ*ôIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRyҊ” pHYsb&2 tEXtComment4¨žyŗ8IDAT™cø˙šá˙c > ÄÍPˌĀ€â?ø7PÍw ũˆĪņņƒ bõãÂĪ\d2ŦÄtËkIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗCIDAT™cø˙üÃ˙Į@|Š›˜‚˙ąCđ ūÂ@š@5ø1o†ā~(æb8`\1 ˙aP`øÁ ū:đÄÕB}IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment4¨žyŗ:IDAT™cøŽáÃ>†| ĀčÃĮ6†Īm Ûގ1œocč"6h`bøĪÖAįZä.ā¤n3IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRgES pHYsb&2 tEXtComment4¨žyŗ9IDAT™cøŸá?Ã~†`ô‡Ÿá?Ã~†Įü ĮÁ¨‘AĘ č;Ãf†?ėŦÖ~Ė zĘIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment4¨žyŗ5IDAT™cø?áŋÃ?0ú#ĮđCŽá˜üĸy| L ĀÄđŠū°1ü`bø˙īá„tp+IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗKIDAT™cø˙ņ?âƒPÜČüˆ˙€pâ†@5øķ㠏`8Äũ@v?Pƒ Ėy ÅҎÉ}ūŋíKç{ZIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙ãÃ˙PüŠq3@đ?…  ~0üøÁ?ū`x Ä΁ø8ß~Ā‚ƒ€ô˙‡HfáÂv°Kn[Q´IENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment4¨žyŗKIDAT™mĖą €0CQ‹"ķ2A”ŅčX#T´G—9ü$-'=š°uęļzËK â@˛Œw÷ÔĒôģ›<Ų%l7˛GZ&˙{üũ_AI˛Ēˇ;IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR YFÛJ pHYsb&2 tEXtComment4¨žyŗDIDAT™cøcÁđÂá =ĸ †?@čā†Ã?ŽŅ†> †>†y0dFu u dÁ'ūp0ü“"Ŗz;‡PÄIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR˛Y1 pHYsb&2 tEXtComment4¨žyŗDIDAT™cøžá?ķCđ?(ūÅ?€ø'âį@üˆĪq?Īböâ˙ės@ė@ü(ūķÔå&ÄIĐŽIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment4¨žyŗLIDAT™-Ė!€0DŅOBēŽ\ЎCräēJށ-Á –I¨xųɈ!Ē̘ķJš´ßę)Uƒ-Ã’Āæ"Iė˙é“͐Ũ?>K$”c >IENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment4¨žyŗDIDAT™cø˙ųÃ˙‡PÜŌūAņ>øá/˙âĪ@u΁ôy îb~ ††˙€úbÁ ņ† @]LÄ?IENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙ķÃ˙P|Ё˜˙9~`øÂ@šŸ?0|âįP|ˆīņ| –?Ā˙õ>„šû‰} €áPūÐGYįIENDŽB`‚leptonica-1.86.0/prog/recog/digits/bootnum3.pa000066400000000000000000000762371506303110300212140ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 148 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDR%tÄ pHYs.#.#xĨ?v tEXtComment8Ą(5˜eIDAT™UÎÍ €0 āWi#{Q?Tî3dô[ÎfBa<ë+¸jÍA_IENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment1Øô<FIDAT™cø#˙˙Ã Ņ€…8Ā$€ˆ â#ˆháÄōˆ¨DC=Č { œ’`<Āđø?û{†_SoMíIENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment2Aũ܆hIDAT™eÎąĀ CQq)3BØ$̰ Q<%‡#%e\ŧRßģ‡Ã^ęG㴂y9šGÁnˆø(ÄEV bs*V\Ž)ÆIœĩ°&‚ŨDV&3¯ˇVÔũ]Ž_&Ÿ|,ĶHÃ{ĄäJIENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDR$Jŋœ pHYs.#.#xĨ?v tEXtComment36úėZIDAT™UÎą €0 Dҝ ĨdÄTŒ†<LĀ Œ@I.ØIŠ×œN>ŖA H+nBÍēžIENDŽB`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR$˛_gų pHYs.#.#xĨ?v tEXtComment4¨žyŗaIDAT™mĖÁ €0Ā•<ōŒh éĀ–,á‡m])WÂ=}„Ä;…Á} , ‹V“ĸ•h¨#wČAŠÁ†Nŝdčęl‡‚_HA ū2ƒ€ ė´NÄaėŅžœIæ¨ãd{Ä˙#~ˇ ˆä<ÂģÍɎ•KVC]n¸y=n귎IENDŽB`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR$TvŦŊ pHYs.#.#xĨ?v tEXtComment6FŸ\IDAT™UÎą €0CQG)ŌÁŒ’ŅâŅ2JF ¤@:ō)h^a|VôŨ ë† NÍl@W¤˜Ô…ÛŠÁ2$Đ"H¸MŅa|LfJŧ‰—/ 23Ö ›-áđ9j80­a„ŲIENDŽB`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR%Ÿ* pHYs.#.#xĨ?v tEXtComment71—( [IDAT™]Ėą €0 ĀRP2Ŗ°ŸŠĩ"ą#¤¤@1ļ%‹ˆ/NīŠ™ ˛‘ÍGdĶŗ‰S !ÉĐ_éΤ<ŽŽĘũc šq­A5¸pd¤{KF6á ã4O›u‡IENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment8Ą(5˜QIDAT™MÎģ Ā0ŅC.’.%ŖÁhŒâRψdcōĩôDssĸlė,T&œÖĐėĮsēJ6Wûɝ$šmiõ%5ž—íŊ7îÆ:m_'ZJV‡WIENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR$Jŋœ pHYs.#.#xĨ?v tEXtComment9Ö/\IDAT™5ÎÁ €0 Fág…ÁID)ēXGÉ=z(Eß-äŋ•FáĀXILáˇhÁģSō'‰VvŪIŸ,&Eęî]ĀuÃkP)rKS˘ĨˇõÃØôŋ);˜bė IENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR%pč& pHYs.#.#xĨ?v tEXtComment0¯ķŊĒYIDAT™eÎą €0 DŅoĨHIKĮ"6#ÎfŒÂ))"Œ“"ĸxÕÉwÆĸQŸIöîbâ$v:ts &d'ĻCø8ÄeĪÚ­nu„Ņßļ ‹KT ˙į—02z“ŽČgIENDŽB`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR#WēŦļ pHYs.#.#xĨ?v tEXtComment1Øô<.IDAT™ch`˙ĮĀŒ†!ø˙â˙ ÜH!nøĮđ‡ĄŽĄh``=:'ĸŊIENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR%Ÿ* pHYs.#.#xĨ?v tEXtComment2Aũ܆iIDAT™mÍą …0CQ# ĘlŖ0fŗŒ6€Ž"ÂØ”_?ŠN“ŧw!ˆčX‰K(DÃDTŒa0sØHĒ„~؃?ëņ˜z¸ŊE§÷Šyŗ<ė–k_ōŌÍ=™VL-]ÉũōęF_VžbāG6¤“AIENDŽB`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR$ģ´Įƒ pHYs.#.#xĨ?v tEXtComment36úėYIDAT™]ą €0/J‘’XƒŽŅČhaF Lã Dqzémų舃•ÆLeŠÉKĻŽÄ>2’‰Û jÆŨņAÄ?ōänPxŅ[ôwûö„/ŧ›ũâ,ēkå-Ļkɧ‘IENDŽB`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR#¯ZWA pHYs.#.#xĨ?v tEXtComment4¨žyŗdIDAT™eÎą € Đ3”ē+8ŽÄX¸Ŗ0Â/)x—hŖŋxÅ]rųŨFՑ"˛HūHÍ ę,Vb)"Į͐"W°cÁį’Č`ÁžŖŨŊÔI(Ëb{(ÂnĶjINZB•IENDŽB`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR%pč& pHYs.#.#xĨ?v tEXtComment5ߙI%MIDAT™mÍą €0CŅĨ ŧ%Ŗå˛YFa„šDW!ŠWYļ‘7&žØ,œĐ…KŒˇ@–Ŋē]ôüŒČaŠųĩ´Ŋ7‹¸M/ÔÕ0UéC\IENDŽB`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDR‚ũqh pHYs.#.#xĨ?v tEXtComment4¨žyŗJIDAT™cø˙ņÃ˙P|Š€˜áÃ?øĀđŖˆ?|`øÄø1âv(f~PĀĀĀ Ā @ö˙@3 æ~@Á#m?˜…;…IENDŽB`‚ pix[18]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment6FŸUIDAT™MĖą € á3”Œ$›ŠĄp­Į& ¤ ācĸÅWŪ1.1ĸčN4/ę"Ęj†8Mzíf›Í$@Ė9ā ¸ ž}ÜĪaâ#j ûZ_íĶŊn ø44îÎ4ĘIENDŽB`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment9Ö/ZIDAT™=Íą €0@K)R2ŋ Œ’Q@)˛VØäŲ åQ‚$d]i}Q´ đ\š[B1'(]_øĘ΀ƒę6Fƒ&7>ŠYé$0˙Zų´)îŠø‚4ßXāȘIENDŽB`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒHIDAT™cøÃüáÆ ü(`xøÃ€á↿? Í˙ ˜ũI˜ˆÁúdÖA ™ ŗ?@ėúÃøá?˙…ž/ŖÂ;!IENDŽB`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆PIDAT™eĖą €@Ņ °Kņ:ķĀĀ2,Åų%\h ž+ŧt(ˆV¨1gąDb-‰ú#jŧ6Ûm˛Ųüšzqâ­Šbaâ[zÜ '6îZîŽXIENDŽB`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#xĨ?v tEXtComment36úėQIDAT™]Íą €0CŅ(R2Ŗ°šŠ(Y)ˆE’  JpUŠ×œlei1ÍbŸÄy‰–÷īÕšŌ9[ņM-A{Fúx#x÷čŋVŊ›+6ÔmF;IENDŽB`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#xĨ?v tEXtComment4¨žyŗEIDAT™cø˙ņÃ˙P|ˆ€˜áÃ?(ūÂ~|xĀđˆņa(îb~ >F >tđ˙@ĐL ĒAÁ[d<ŠKY$ IENDŽB`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment6FŸVIDAT™UÍą €@ @#Š”Ŧ𛰠›đ‹…Mį õ+ÔmÚHã 36ˆCmIENDŽB`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDRdÔē, pHYs.#.#xĨ?v tEXtComment71—( ˛VFaĒ>XˈEÚ ōĖCA Ä%qXđBē?;Š3†ŨA+ājhöí [ˆū“DÍņ™…–ĐôHä1įŠuâxIENDŽB`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒGIDAT™cøĮ˙áķ†Œ@üáÃà ‡˙€ņņ í`,ĀĀĮ D`°žfšs„æ>øPĀ´…á#ØNEÅ1SæiIENDŽB`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDRdÔē, pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™c8ĀЄ ` ä?40ü‡áHø!†âã@ÜÅũH˜ˆåū°}ÃއcWÍ5PØÂjIENDŽB`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDRŋo pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c8ČĐČĀÄ x CTV#CYf_Û*IENDŽB`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( 3IDAT™c8ĀĀĀĐĀ€ ä?40üGÆ‘đa(nâv(fb~ū'Āė!ø×Ã1¨Æ1čČ?RiIENDŽB`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆RIDAT™5Ėą €0CQSQ2ŖÍ¸.c°Š% ÖH6€.E”`”ÃŌk\|¤…āLØ4D#=š;8ߗŨ)—DQ§­˛u'J'ÉÂūá ŊŸ:čAĨ!IENDŽB`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™cøĀЄ ` öūƒđ ~ŏø0>ÄíPÜÄüüO˙ØCq=˙Ņ˙Tg4…b ũGIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDRÆŪp pHYs.#.#xĨ?v tEXtComment36úėLIDAT™MÂą €0EŅ~ņKGp”Ŧą°tĨ‹Ŧ7ČÁ§‚‡C4'ÉØ -¨|T҆œņ4Fā (ĄŒÚģ˙žL[Áa†xSN'đšuIENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( 9IDAT™cø˙ą@ūACũ‡†˙0üŠņa$|ŠÛĄ˜‚˙ÉCą=˙ázūûŋ î6wrļyIENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#xĨ?v tEXtComment4¨žyŗHIDAT™cø˙ņÃ˙@|Š€˜áÃ?(ūŖđ€áGÕ|âĮ@üˆq;ķ1{Cƒ ˛Áfĸã` Yž=ŽąEˆIENDŽB`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment5ߙI%PIDAT™]Ėą €0CŅ((QqĮZa“dƒĐĨˆt8(Åk|>ŅŦ‡xB”)æ,m"¯î."Üķ‰ČSĩö3˛ę^ą[\ū•7ØŋÍ}j4LMuŽSIENDŽB`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDRDŋԊ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒEIDAT™cø#€áû†Ė0`hp8ĀĐøāCķ0fūĀĀĀN4Ē냘Ņph&ĐÜ@ķ?đ`øa0'ļûÔˇIENDŽB`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDR&čĩV; pHYs.#.#xĨ?v tEXtComment36úė[IDAT™}Îą €0 DŅ/%eF`” ÅA,Æ(ŌEdsŅRŧę|:ãi` :'•Æ"Ļ5ƒeö‘9$>Vˆ.­āēwĘ#PÖä‚p‰ʓiF×ܜÛuūr|c2;lüü°IENDŽB`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDR*n|ÍÍ pHYs.#.#xĨ?v tEXtComment5ߙI%hIDAT™mÎą €0ĀG”Q-ąX‹€X€2Ɔ Ds•ß~C nŲZҏų—Î-•ņMÚ HŊõĸÂR?ČŒŅ HbzČ?\îBg(bg2)Ē_îĄApÜôF$+ŋ:Ļ[UoŧŌsIENDŽB`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR(Ōŋ7K pHYs.#.#xĨ?v tEXtComment6FŸaIDAT™MĖą € „áŸhBÃ&Žā&.f"nÆ(Œ`IAĀCZ|¯ywG-ŽÅ; ŽĖ@ŌM]æ°2f⒠Ûm¯”UfqĶ^õĪ_ėŖ{¯ŧŸ ¨ĩŅ$mÖÍd5ōˆæ IENDŽB`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒWIDAT™eÍÁ €0 Fá'=äčŽâb‚-],nŌzô m<|rø‹“•ĘBaFtĸ’ËwüˆĶ~ëį—\~=;ڂīÄ;Ŗ7ē­÷m˛æÜ6"¨Á÷ŧIENDŽB`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDR#¸xĮˆ pHYs.#.#xĨ?v tEXtComment1Øô<1IDAT™cøĀü‡Ąņņņn¤"š÷€‡Ąˆāø`āü‡Av!]’IENDŽB`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDR$Ĩ}÷0 pHYs.#.#xĨ?v tEXtComment2Aũ܆^IDAT™MÍą €0„á?°É)Dp1‹€…ke”ŒŌ"äyžîŨ=Ė5N6* …H&ˆ'Ą4pģ–°CŨXõ˜zũĮžvËÔČk#Ųā^ĖAãžîVâųM2Ąŧ˙'IENDŽB`‚ pix[45]: xres = 300, yres = 300 ‰PNG  IHDR*žĻķ pHYs.#.#xĨ?v tEXtComment36úėbIDAT™uÎĄ€0Dҟ‰ˆ¤JĄ38†h)ĨĀ °‘(–KA@ņ(ë­é‡¨eū߯ėPˌ„˙3€qCK0õBĖ”ģį?Ã? 3ĐT"^%IENDŽB`‚ pix[49]: xres = 300, yres = 300 ‰PNG  IHDR+JâuV pHYs.#.#xĨ?v tEXtComment9Ö/lIDAT™=Îą Ã0CŅo¨PŠxm–Čđb—Mœ TēĖ0Qâ5‡#H$ĄE *'…n™ø¸'š›ļŸį׎×ßŧ…˙ņ€¸áüÔm˜Ú‚œ—vK͕ҰĶzAąrą:SŨ-›"[ąęŌ´įK_J‹IENDŽB`‚ pix[50]: xres = 300, yres = 300 ‰PNG  IHDR$NJL3 pHYs.#.#xĨ?v tEXtComment1Øô<8IDAT™cøĀ˙ƒáû†æ hø˙â˙h›Øv,bØô2Íe`@  ˙˙Hī˙7Í'šu’IENDŽB`‚ pix[51]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment2Aũ܆XIDAT™=Íą € á#”Žā(ŽæĪf$.–Äį3‹¯Ŋc˛3Xé,4 A~í‰PĨĒq˜Ô­}ÂĒ%42ę…ˍéÖpķĖĸ¯ļ‰ĻW|pŌīųMĘ ^7zúčL IENDŽB`‚ pix[52]: xres = 300, yres = 300 ‰PNG  IHDR*…KvÎ pHYs.#.#xĨ?v tEXtComment36úėqIDAT™mĪģ €0PŖ”ŒĀ ŒĀdÄb‡X„()ĸ˜søˆ‚æé”ä,$ ŖaGkØĐ"j†ĘĄŗr2‹(Ķ,ü ŗˆAQž›”ōÅ΍(BQw@Včxoá$ÕčǎZ)éņv÷/¤@;íd]LYõIENDŽB`‚ pix[53]: xres = 300, yres = 300 ‰PNG  IHDR'Ė+î  pHYs.#.#xĨ?v tEXtComment4¨žyŗCIDAT™cøQ˙áƒ=Ë#a9(æcø Ä6¨ø× đ?¨¸„-ؘ ˜>0đ1ü˙Űā|§Ņ7Ŗ”Ē˙'IENDŽB`‚ pix[54]: xres = 300, yres = 300 ‰PNG  IHDR+Ĩ h pHYs.#.#xĨ?v tEXtComment5ߙI%fIDAT™uĪą €0 DŅ‹RP2Ŗ°š# ›0tT@îhžÉšŗåîĻcL]Åd/Jx2Ō`š”Dšž`HęGķHqo°B˙Ã~\pF€ī‘į„îŲô)ĸ˛DšUƒÎ.\t^Õŋŗ:OIENDŽB`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDR(=}\u pHYs.#.#xĨ?v tEXtComment6FŸeIDAT™eĖ1Â0DŅo,m:×Tp“p-*Xn–Ŗø.SDģŒE:ŠWũҐ{#ģ‘.•Q‚ąũlyžÁįT5˜VšIûy%Œ–œüO=u×Î¯ÆÆÔčúrđú[Č5Fd°âŪIENDŽB`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDR(=}\u pHYs.#.#xĨ?v tEXtComment71—( DIDAT™c8ĀĀĮĐĀ€˜°10ƒ1û9†ūv ˙AøAøÁH¸ˆ™ø ŗ#đ\˜˙°ü?•F: ŲIENDŽB`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDR*n|ÍÍ pHYs.#.#xĨ?v tEXtComment8Ą(5˜mIDAT™UÎą €0@Ŗ”l›Āh|Äb ‰Ä)SD2˙đ€hްdË )`T*”‚Y1 ĄU&e—?ŅIc°ZđnyÉ76Շg€ģ`ã&ˆLÎōâŲęEcŖ ąWÁ÷ŽųjwiĮyPN÷QYë5ÖIENDŽB`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDR%ãOĢ pHYs.#.#xĨ?v tEXtComment9Ö/[IDAT™mÍą € „á ė×°r2cQ’‚ŧį%F+‹īēģcrĐÉ4•( (§Â!xųÁ§˜ė¨÷hŌĩ1Åíņ)#á]ZÖtfčģqŠgÔ ĢŅ7ģ›&1Aē•g"IENDŽB`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDR%pč& pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™…ÎĢ €0…áŋš °ŽÅikuF@"šn›€E|ō<Đ!*ĸ0s1r28#OFÜ\u „OėLųGüŧ™¤ÔģšŧģÅú^ÛŊ]aõ'zg-53‹zū¸IENDŽB`‚ pix[60]: xres = 300, yres = 300 ‰PNG  IHDR#SO|‹ pHYs.#.#xĨ?v tEXtComment1Øô<.IDAT™cøĪ˙ƒáû†æ 0Ėá˙â˙ÔÂÍPÜ´ƒ400ŦH8&LL žIENDŽB`‚ pix[61]: xres = 300, yres = 300 ‰PNG  IHDR&ö|fˆ pHYs.#.#xĨ?v tEXtComment2Aũ܆aIDAT™=ÍĢ€@CŅģƒ@RĨĐE[ģ<š‚!˜A™$Ą$N*=AKĻ!Ļ…ĸōÚčˇYąÅĒ ŠyšSŸžģG'byúĖúāH¯Ų˛…?ĨÕt@BC—Ûß~IENDŽB`‚ pix[62]: xres = 300, yres = 300 ‰PNG  IHDR(Ōŋ7K pHYs.#.#xĨ?v tEXtComment36úė^IDAT™]Îą €0 DŅá2 0 C1@ŠtŦÅ(Œ@™ÂŠqHÅ+,Ÿåã ĘA"ŗ‹‹°E‚ sėO#VœgÕŋ{ĩŲŽą×‘7†<đŠŨ^Ä˙J˙ũth]į¤7Ÿę8‘x´ŧIENDŽB`‚ pix[63]: xres = 300, yres = 300 ‰PNG  IHDR%›ß¯% pHYs.#.#xĨ?v tEXtComment4¨žyŗ[IDAT™mĘą €0ĀG)R2l›*JVJ6ųR‚„bœ/ž'Kļ↠r'9â N ͈ä1FrĶ҉d *u#j€dp(Ŋí3˗äԕ/€8õŠZ0А<IENDŽB`‚ pix[64]: xres = 300, yres = 300 ‰PNG  IHDR*n|ÍÍ pHYs.#.#xĨ?v tEXtComment6FŸkIDAT™UÎÁ € ĐŲ@Fa3Š›1 #pô@¨˙Ģ$zyi“öˇbf*6=č¤S"É*Ãaä $‚ž@ˤ,*S*+l“D" Ä/vLUĢšˇÕĘd˛aˇÉ ĸ:“ĮķdâÕđÆĐ­\SļAˇ;IENDŽB`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDR&ö|fˆ pHYs.#.#xĨ?v tEXtComment8Ą(5˜_IDAT™eÎą €0 DŅš d„Ŧ@Ép’ÍÂ&PĖ (^cßYædã Ū*#…2é4r3‚ŋhƒæÚĪĸlĪĩw1ĘČ0Ī’~‚vŦ2KĪĢ÷܊4ũãģ_’"*Áߙ.kIENDŽB`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDR&w= pHYs.#.#xĨ?v tEXtComment9Ö/bIDAT™EÍą €0CŅO"Ĩ„ ˜ƒ C(lÆː(SDw (žäÆ6ž™ĘČEO‘ƒD^Ų8t¯ü‰_†ü0™PõŅÚ ˜ø)–~­ĮĢ\ĸĪįģ°ŠkQŖ,vŨ5ĀN9eIENDŽB`‚ pix[67]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment0¯ķŊĒcIDAT™…Î1€ …ág\Lŧ€‰GÁ›ņbå&Á‘X_‰n._ē´ũĄĒ‚Û‘/¨Øf˛8âI ÉČQų’´ŧ?œcdÛÍũJ$ũüD6û7 ĒҰ˛ĪŌ4ÂÜ!›\‘úl<IENDŽB`‚ pix[68]: xres = 300, yres = 300 ‰PNG  IHDR &7û,$ pHYs.#.#xĨ?v tEXtComment1Øô<-IDAT™cø/Áđ‡ƒáÆ č(”úAxBãÂĐ?†˙‘÷ ‘§ÔĨœIENDŽB`‚ pix[69]: xres = 300, yres = 300 ‰PNG  IHDR%ãOĢ pHYs.#.#xĨ?v tEXtComment2Aũ܆]IDAT™mÍą € EŅ+$–ÚZá&ē’FŖs F ¤ ˙û•Ö—œö]d‘J °>3\Ļ9Ļ>xsíķĐ^ËPZ^š#šĩ_õ‚˜žZÃÔ](§MÚø]Â=”ĩ2îôēŒōIENDŽB`‚ pix[70]: xres = 300, yres = 300 ‰PNG  IHDR'= ĩ- pHYs.#.#xĨ?v tEXtComment36úė_IDAT™MÎģ „@CŅ;š`BJ  2ÚÚ`Ĩ}D#Đ!^ķÁIlFŖØ+= “UĘ铩_Û2ŗéQĐj“…q wËŪ'$,.õåÎŌą‹.؊5­üĐ ?Ĝ@ DFQIENDŽB`‚ pix[71]: xres = 300, yres = 300 ‰PNG  IHDR(ŝ§‚ pHYs.#.#xĨ?v tEXtComment4¨žyŗdIDAT™UÍą €0CQG)(aV`Ö` 6HRąVFÉWR ĖRáâU_2H (FKJũ“؁”;:CįzÁ9GeUÄiŠSŲ) y ŨG&;ÜAKh1YœčåÍÜiĐčwķIENDŽB`‚ pix[72]: xres = 300, yres = 300 ‰PNG  IHDR%ãOĢ pHYs.#.#xĨ?v tEXtComment5ߙI%UIDAT™mĖģ €0Ņ‘‘LF .…Z¨\šKq „ĐËOr@đĸģ‘*ĨSIÔÍ(ŊQ¸Ė’dēwģøp÷OūņŪ,<˙-’—ę ęfVĘ`'MZ8ÂsŋpIENDŽB`‚ pix[73]: xres = 300, yres = 300 ‰PNG  IHDR&w= pHYs.#.#xĨ?v tEXtComment6FŸeIDAT™5ÍÁ Ã0DŅ‰O*AéDiÉØkÔØ–â|Ô!h3Häđ†h™đDXĸ“øJŖHį~Éģs}&?&ۄ,Iž,°‚íÆ98U#˙ŨdxYpí.íīņ›õēĩ˙@;8’Üđ>IENDŽB`‚ pix[74]: xres = 300, yres = 300 ‰PNG  IHDR&ö|fˆ pHYs.#.#xĨ?v tEXtComment71—( IIDAT™UĮą Ā DŅC.(Q2ZQ!%…Åå ’/Ŋâƒüŗ¯ā0rhüH`7|^í:ęŊЕ%¸aÄit}KN3'A6Cžķä˙IENDŽB`‚ pix[75]: xres = 300, yres = 300 ‰PNG  IHDR,¸%.Đ pHYs.#.#xĨ?v tEXtComment8Ą(5˜rIDAT™UĪą €0 ĀG)Elą˜ŗIF ƒÉä!BĐ\ķہģģ@áÄB˜ˆ =‘҆@Ø"ŧ%’¯ûP‚< Ü ¸é^BMM=ķHćDŦn"íK#ĸĒB•mÔÛ˙ŽCãOŨėąūčZ_`zī&}KIENDŽB`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR+Ĩ h pHYs.#.#xĨ?v tEXtComment9Ö/tIDAT™mĪą …0PG”˛ŖÅˆÅÂ&’"âžũŅ—(h^s˛īAÄ&.ˆŽLœ‰v3u6%,̈;ąF}§ŪĐ1Ņ&āæ?ŨhĄ¸ŒKŸ$´7ēÎˆĶ´ŲŲÅ}Å÷Šĸ%3š,}ôđwc5ž˜IENDŽB`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDR%tÄ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒbIDAT™mÎą €0 ĀG)(iŠ`”°YˆXėŗIFH™"ÂØ’Í5–˙"BHQnDb`'ēŅ0;u JšŒLPHŠä7×?´Ģ}ĐŖœâņ5j[[ƒ—wc`ą}ēJΤčæf`¨‰šE2IENDŽB`‚ pix[78]: xres = 300, yres = 300 ‰PNG  IHDR%ãOĢ pHYs.#.#xĨ?v tEXtComment1Øô<AIDAT™cø˙˙Ã?ö ˜˙140ĸâ@üˆ˙ƒp#ø ƒØÍ8Ä!æ}`āc8ĀĀÄЀ„0°1üĀKÔ6CtIENDŽB`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDR%Ÿ* pHYs.#.#xĨ?v tEXtComment2Aũ܆hIDAT™UÎą €0 DŅC”ŒĀ(Û„U2ŠGH™qøBĸyrãoC!ėĉ•čXĖL4LD<uDI( Ú7 2ĨjôÜUĪč5ōÅäĩļæŨØL‘ķ?čŧTĻû!éā ģ×Q™ßøâIENDŽB`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDR&ö|fˆ pHYs.#.#xĨ?v tEXtComment36úė]IDAT™mÎą € …áŸPP2Ŗ¸… ÃML\€’ŠķŌY|ÕģŧwČ!tJāÆSp”¨vKé–K=J–æĒŠGōâĻ6n "CūÁ—Ní"*Ũ›ÆvĐ?Ō Ōž<›ÍĩtjIENDŽB`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDR)*Ô] pHYs.#.#xĨ?v tEXtComment4¨žyŗQIDAT™mČÁ € DŅI‡Ø/IENDŽB`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR#SO|‹ pHYs.#.#xĨ?v tEXtComment1Øô<1IDAT™cøÁ˙ƒĄũ3#đ ūŽŲ‰ÄØôBņ †0†û'M6PôÎ"\IENDŽB`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDR$ģ´Įƒ pHYs.#.#xĨ?v tEXtComment2Aũ܆`IDAT™UÍą Ä0DŅ/8t îÄ.M[Ú 7ĸäė‚ƒņ ĮūĸKˆƒ/V& ƒJRČŊ­Jē§éOZˇ‚ĻEuky[YÅÜÄ8D6šķƒīááõH”^į=ÂãŪIENDŽB`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDR(Ėvø pHYs.#.#xĨ?v tEXtComment36úėZIDAT™uŽą €0 OĸH™%́˛hF ¤ˆōŧMCCq˛ä?ë$&bĐ8؁j ĖÂļ6¤/-ãLŖ˛ėΤq›˜ąĶU_'ÜŧëæüÁš{ēũėÍūø#ūŅģÄ>Ė}ŋ>ņIENDŽB`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDR(Ėvø pHYs.#.#xĨ?v tEXtComment4¨žyŗQIDAT™uÎą €0 DŅC)ŗ^Áf(ŖeFpéÅ\0HPPŧâwî[Úɗ‰@§ ëæ oËm ûŖ…JåHF.…*ۑāíO&ßNØ>M‚ĄXIENDŽB`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDR*žĻķ pHYs.#.#xĨ?v tEXtComment5ߙI%aIDAT™mÎģ€ Đe. ¤Ją-3al +°Ę0pX!r ^rŸŊID$xąÉ#Ģž˙0,šë{aėŽĻžá¤™§ãŖ×ÜĐä6đō` hĘŠoæ&Ę7"EŅ=ũøŨ"I=w.účIENDŽB`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDR(=}\u pHYs.#.#xĨ?v tEXtComment6FŸjIDAT™UĖą Â0ዑœ.l›Āb‘p `-’\ϰūĮKD“âëN‡ú„ZFÅČúlcĐŽvÖ§Ŋ‚ēS°üwÅ=Ül˛ ŗEbPâĸ÷aT=ųĒđąå¨sbe—iūlūuEüWÔ=%qq ƒIENDŽB`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDR)*Ô] pHYs.#.#xĨ?v tEXtComment71—( LIDAT™cø˙˙?ÃF†$ ä˙`dhüÃĖĐü‡ˆųŽ˙gøÂ@؁ÔCđ˙|ˆĄ¸ 3Ŗâ0ĖŽ˙į˙¤lP­gŨoIENDŽB`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR'ČŪ> pHYs.#.#xĨ?v tEXtComment8Ą(5˜]IDAT™eÎą Ā ĀG)ÂŒÂX))A,f6É”."ČcEiuíˇŒYĢ:rˆ´ĮŖŒ]#áėFøÄßĘgöķŽ{sÁn• oeõ–ģ“ėŸáô–b3EKôz{IENDŽB`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDR+NĨk pHYs.#.#xĨ?v tEXtComment9Ö/yIDAT™UĪą Â@ƒaG)(ŗRF ›ŨXĖŲ䍐’"Šą… ųǧ˙|DæÂJŧ°nDa6wÃ6 bW$ƇúĨĢž+~ņI5$…D‘ŧ9ƒēŖŌūĪĪāwuy†ÎP^%ŽšĨ˛%ÚĖäáœM-Ąå3ūŅõĖqæ¨Ö¸ŽIENDŽB`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR#¸xĮˆ pHYs.#.#xĨ?v tEXtComment8Ą(5˜TIDAT™cøđÃ?† 2 x0°04 ã@üJų˜Ŧ†@ÅAō   ¸ˆ Ā ŠAę@z>ņ Ŋ˙€Šū˙˙ y 'y;IENDŽB`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDR{Ē| pHYs.#.#xĨ?v tEXtComment1Øô</IDAT™cøĪÆđŸ‰áÃ&†L L 0ÔųA Pô‚˜P6ņ˙|qĒ‚æą˛QIENDŽB`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDRËĀ^ pHYs.#.#xĨ?v tEXtComment2Aũ܆SIDAT™5Ėą € EŅk$ąaFa0 ‹?n”?Á'âKNõ’‹ãt2D%R“vĘ%ūšeôĨF‰ ^I•ŦŽĶ6§îr8ELßl-˙ŒøžĀ$Ū8ųDÜIENDŽB`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDR!õ°fƒ pHYs.#.#xĨ?v tEXtComment36úėZIDAT™EÍÁ €0 …á˙ĐŖ#8ˆķXqąŠ‹t„{(/RđABƎąRY(¤O>¤IOÜâęŨ¤ˆî~sg w<NÉAsŪdū,ē¯Ę1åEŽ_ũUË.†üUįaIENDŽB`‚ pix[100]: xres = 300, yres = 300 ‰PNG  IHDRœĶû pHYs.#.#xĨ?v tEXtComment4¨žyŗIIDAT™cø˙†á˙†˙ PĖÁ˙€ø˙âPü„ øĀ† ŨĀÃĀĀĀ€ €øPė˙†˙@upü„mˇ.% ZhkZIENDŽB`‚ pix[101]: xres = 300, yres = 300 ‰PNG  IHDR >ėĩ& pHYs.#.#xĨ?v tEXtComment5ߙI%TIDAT™]ĖÁ €0 …áėą#tŒ&XpąŒŌ ėŅC@_EüĀ2ÜËHsá-}87ÆIc§˛QX§#Q˛ŒĀ/ Sũ41qy4ÖUĘ5ŋâ7DÃÔsÆ NŅ"—fĄ>ĘIENDŽB`‚ pix[106]: xres = 300, yres = 300 ‰PNG  IHDR Ņ.Ū pHYs.#.#xĨ?v tEXtComment0¯ķŊĒQIDAT™]Íą €0 ŅSŠ”ÔTL‚2ZÂhfF ¤@?†ŠâI–,ŸéģãT.Î0qŗŠŌ4ÚkûĶÎBÂtkĢD/ĢŖ?~Ũ:ūyąT_70IENDŽB`‚ pix[107]: xres = 300, yres = 300 ‰PNG  IHDRÆŪp pHYs.#.#xĨ?v tEXtComment1Øô<0IDAT™cøœá3ÃF†Œ ?024020€É0÷6ôŸĒ)hPéš|×ãIENDŽB`‚ pix[108]: xres = 300, yres = 300 ‰PNG  IHDR$k` pHYs.#.#xĨ?v tEXtComment2Aũ܆SIDAT™MĖą € áJFpâh†ŅpF ¤xáųŖÅ×]ß'ÆIį ‘$R_’\|&Üâļ|HxMx=LáXļIסI]ôCŋŋB|zŒ$g\É\aIENDŽB`‚ pix[109]: xres = 300, yres = 300 ‰PNG  IHDR!ņEļž pHYs.#.#xĨ?v tEXtComment4¨žyŗPIDAT™MÍÁ € CŅ&.ĀŽæŒ@âb zä@ŦUŅØäzøP%”.Âãø}hŗ-‹‘¨ļ 쭌˜Jđ_˛lĘō/žÜlˇÔ=D†´"ÂIENDŽB`‚ pix[110]: xres = 300, yres = 300 ‰PNG  IHDR#ą“gō pHYs.#.#xĨ?v tEXtComment5ߙI%OIDAT™cøĪx€áƒÃ n€ã íí@üŲĄ˜ˆ™˜†ā¸˙Ã˙ ˙`Á@qū Ė`ĩŊ øh˙ yäß)/¨ō]ķIENDŽB`‚ pix[111]: xres = 300, yres = 300 ‰PNG  IHDR"wŅÄ pHYs.#.#xĨ?v tEXtComment6FŸUIDAT™eÍĄ Ā Dᗠ°ŒÂhŒĐĻ‚ĩhē# z?ŠĢørâÄc‰IÜē4Š$ęjÜō|˛x“$rˆ-%âzØüā'ĀĨą†ĩ’šéÚ $O.hĻFIšIENDŽB`‚ pix[112]: xres = 300, yres = 300 ‰PNG  IHDR!l}ú pHYs.#.#xĨ?v tEXtComment71—( IIDAT™EÆą Ā CQw”Q2ZŒ(X 6É”)P.>„ŋždŪž˙.Vųk’$Ox—ƒ.ĪrŨ]Äm[•&iʤ?: 6ŖGfˆIENDŽB`‚ pix[113]: xres = 300, yres = 300 ‰PNG  IHDR!‡Ũ€ pHYs.#.#xĨ?v tEXtComment8Ą(5˜YIDAT™EÍ1 €0DŅ/Ļŗõ(Í2Âk)^$Ū eа:f ‹ĮÂ0ÃbT…•ĖŌ5p5ą@2ŋ˛ģzįëûÆwQíFƒéųͲKR„.KŅFŋ_ĮĮ*0Eš§TIENDŽB`‚ pix[114]: xres = 300, yres = 300 ‰PNG  IHDR!™­Į pHYs.#.#xĨ?v tEXtComment9Ö/XIDAT™MÍą Ā DŅQPf„0Ŗ$ĸČZÅ#PR ‘CDQdŊâlLNÅ5›,Qjân‰Ø öe˙™û"WEÅEę~jf¸˜3NũŲ ¯¨|øÅÁ1ŒIIENDŽB`‚ pix[115]: xres = 300, yres = 300 ‰PNG  IHDR"˜¯. pHYs.#.#xĨ?v tEXtComment0¯ķŊĒMIDAT™cøßüƒáà Ŧ`øĀ`Áđ€A‚၃ÃÁ 8š˙A0ķv<¸ 7#ã `ŗübŲķˆAöūcü§.&3?ĀŪIENDŽB`‚ pix[116]: xres = 300, yres = 300 ‰PNG  IHDR#Z¤Üņ pHYs.#.#xĨ?v tEXtComment1Øô<+IDAT™cøaßĀđ@žĄ ˙ĄļGãķ70ü`n`8Ā´ƒ@l 3t0=ސĮIENDŽB`‚ pix[117]: xres = 300, yres = 300 ‰PNG  IHDR"zĪ´W pHYs.#.#xĨ?v tEXtComment2Aũ܆WIDAT™MÍą €0 DŅR¤dVÉf1+Ũ(!e $s)bëšķo} y Õ|Hō€Įâ×§B4“ˆjū#;cwÆa§¨!.ģ-/`rĮ2îũT¨2QĶsÄIENDŽB`‚ pix[118]: xres = 300, yres = 300 ‰PNG  IHDR"‘øT pHYs.#.#xĨ?v tEXtComment36úėMIDAT™cøÁßĀđ€šác 6``ø˙ˆ?`Áū760üĒ˙ÃĄAø˙ˆHÍ4 ŗb~ šąd'Čî?ō Ōa5gI>ŠIENDŽB`‚ pix[119]: xres = 300, yres = 300 ‰PNG  IHDR ÕÛ% pHYs.#.#xĨ?v tEXtComment4¨žyŗKIDAT™cø˙āÃ˙ ˙ ˜‚˙ņ6¨`øÄ  øCà ôA(nbÆ č ˆ0H0ü˙`Ä@ŗ `Ęj5.HJWIENDŽB`‚ pix[120]: xres = 300, yres = 300 ‰PNG  IHDR!øŽÄ pHYs.#.#xĨ?v tEXtComment5ߙI%=IDAT™mĘą Á'–ŒĀnjÆ(Œā¨‰•1šâ‹g ą ĻXŋp  ĮNKēčųá…Å=CÉAų/õ[PsUŋIENDŽB`‚ pix[121]: xres = 300, yres = 300 ‰PNG  IHDR"wŅÄ pHYs.#.#xĨ?v tEXtComment6FŸYIDAT™MÍÁ € DŅOl€RčPۂØv°G„u0<ŧd’Éâ–đ-âDē4yHØj˜Un)Ãid†4ÅĪūĀŪ tX~šĻĸ{V¯Ē?˜öãOSō`/Ā™4iƒˆtļIENDŽB`‚ pix[122]: xres = 300, yres = 300 ‰PNG  IHDR"˜¯. pHYs.#.#xĨ?v tEXtComment8Ą(5˜cIDAT™-ËĢ €0Fáã¸#tÆB"!$+•T°FWŅ´üÄ'îãPįDf$ŅqÄÁØŗĘ፟ §æ;;ŽØŋ˙Íõw>‹ēŽ@W›éĩũVívŨ<čßԙzGQ_CzL[3᎔šĩIENDŽB`‚ pix[123]: xres = 300, yres = 300 ‰PNG  IHDR!™­Į pHYs.#.#xĨ?v tEXtComment9Ö/WIDAT™MÍą Ā ĀRP˛›dFąD‘ĩ2ʏ@Ipž„H‘uÅ[ō}'¨É¸ÄP(5!4<âÔ”O)ēyqŅ C^?Ήp#l[‚Dũ=x.œ8ŊIENDŽB`‚ pix[124]: xres = 300, yres = 300 ‰PNG  IHDR#SO|‹ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒQIDAT™cø?˙Ã?Æ ~0<`¨`8Ā`ƍ$šH0°˙â ĖÁĀ3@1vyö?`s˜æ1<`h`aˆ=€vūÂĖ?rĢ*˙GŠFGIENDŽB`‚ pix[125]: xres = 300, yres = 300 ‰PNG  IHDR"‘øT pHYs.#.#xĨ?v tEXtComment1Øô<1IDAT™cx ßĀЀ„ņ\Øžáņaâlt ”ûÁ 4ŸĄ€xŊe/ß8e‰éIENDŽB`‚ pix[126]: xres = 300, yres = 300 ‰PNG  IHDR"• ßi pHYs.#.#xĨ?v tEXtComment2Aũ܆^IDAT™MÍą €@DŅ/†–āub+–r`cЁmŒ\hp¸Ž āƒeXv¨ˆ“‰BōËd'Ŧ6Û->ÎŖ$BæÃČ"qĩĸvūĶ‹2â°ÍæWŸ†Ä˛šûĀ–7b(øS—IENDŽB`‚ pix[127]: xres = 300, yres = 300 ‰PNG  IHDR!ü[Æų pHYs.#.#xĨ?v tEXtComment36úėLIDAT™cøÁ|€áÃ(tãÃūâ ė€Ā€øÁ†ŒH¨ã?€ŠƒęûÅ@6?Đ,v ™⯠Û€ôŗÁ6Ÿl ¨ąIENDŽB`‚ pix[128]: xres = 300, yres = 300 ‰PNG  IHDR#ą“gō pHYs.#.#xĨ?v tEXtComment5ߙI%OIDAT™eĖĄ €0DáG*]é WÉHÜ(ĄA(GJ žœzĮ9‰J [^ĸôaũXfKw0ÜMŠAßŪŋ܂¤pŖķ‡üÕ˛č›.š6}Ö¤IENDŽB`‚ pix[129]: xres = 300, yres = 300 ‰PNG  IHDR#^Q Ė pHYs.#.#xĨ?v tEXtComment6FŸXIDAT™EÍą Ā …á,,ŗ‚Ŗ9Š]ÆČ*BšlpĨÅsŠ’âƒĮņxG¯ÂKÆH4§žÅ=]¸—sģ„œ7˜ō’šˆCƒcŗ?{Pfˇ,uūÔ7-Ę9q.Sŋ<šIENDŽB`‚ pix[130]: xres = 300, yres = 300 ‰PNG  IHDR"‘øT pHYs.#.#xĨ?v tEXtComment71—( EIDAT™cxĀĐĀ€ņ˙ ÜĀđ˙!„âf(f‡b~ūÂō  ø‡=áú†P|ā?7Bq3˙ßģŸ7šwXVbIENDŽB`‚ pix[131]: xres = 300, yres = 300 ‰PNG  IHDR"wŅÄ pHYs.#.#xĨ?v tEXtComment8Ą(5˜]IDAT™cøĮøáÆ @Ō€áƒÃ >øƒĄų˙ƒĐ‡øā ü :|ˆ›?0´å؁ęųAø?ƒÄ˜ú14ÍoÛŌ[úZ*õˇrīũIENDŽB`‚ pix[132]: xres = 300, yres = 300 ‰PNG  IHDR"• ßi pHYs.#.#xĨ?v tEXtComment9Ö/WIDAT™Uģ Ā D_”‚’<Ŗ*k1ŠG ¤@!'œ&˛ž,ŨGĮs:×ÚÆ¸šqw# 6yūI3ôŗCu’‘ÍR ‹ī%¨ŽœRĮ‡ļkŌvöC2,jŠ\t=IENDŽB`‚ pix[133]: xres = 300, yres = 300 ‰PNG  IHDR#ŧĩ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒTIDAT™cøøÃ?†  ~00<``8Ä˙00üĮĀĐ Äí˙˜ FČ7 ¨áã@|øƒĖ|đClÚ÷h/Čū˙÷?;4Ũí€ø@IENDŽB`‚ pix[134]: xres = 300, yres = 300 ‰PNG  IHDR#ą“gō pHYs.#.#xĨ?v tEXtComment1Øô<4IDAT™cøP€á€ũ† f€bû˙@Ð061|Ļū;Đ>0F€ ûv8ØhVlIENDŽB`‚ pix[135]: xres = 300, yres = 300 ‰PNG  IHDR#^Q Ė pHYs.#.#xĨ?v tEXtComment2Aũ܆YIDAT™UÍą €0CŅ(ƒlÂ*%‹!Q°ÆąAĘQG4`é5.l|2‘J ˆ‡¤šÃ.—ø ÎĢ”đ˛ˆĸ>kGę"ĢQ6qã–ķ#ûxø'‰ č8Ē–yQGIENDŽB`‚ pix[136]: xres = 300, yres = 300 ‰PNG  IHDR"wŅÄ pHYs.#.#xĨ?v tEXtComment4¨žyŗPIDAT™eĘą €0EŅg•ŌŒâ näûŲ$Vļ¯Tŋ/PđÂé.|#|–ޏšSö†Õ(™(’×ĮR"ØĢˇ !E|KRá6Āõ˙PŪą_A˙jßËcIENDŽB`‚ pix[137]: xres = 300, yres = 300 ‰PNG  IHDR"zĪ´W pHYs.#.#xĨ?v tEXtComment5ߙI%LIDAT™eĖģ €P…áß°ŖŨÎŌQ\QÁŌÂ𯿒|‡E¸:ŒŸÃX­0ŲzģųGqÂ~ÁqC=ĢÎ{>kŪ ũũJ‹wn(nĸŦIENDŽB`‚ pix[138]: xres = 300, yres = 300 ‰PNG  IHDR"zĪ´W pHYs.#.#xĨ?v tEXtComment6FŸSIDAT™mÍģ €0 EŅĨpÉJŲ °’Gņ”)áZ¤¤8–ü×PĶ-ŠãBûęÚĮį˜ęéRER›(‡d,G–Y¯ô s›?ÄÎÍĮüï&ŒėĸŒõIENDŽB`‚ pix[139]: xres = 300, yres = 300 ‰PNG  IHDR"zĪ´W pHYs.#.#xĨ?v tEXtComment71—( FIDAT™MÃą €0 Āī(QČfeąg“°AĘcË_pԁ(øĢ~xëE™oiĶ%ŋq%ž¸åwbăčJË՟ڌŒĀ>ŲĘ3äIENDŽB`‚ pix[140]: xres = 300, yres = 300 ‰PNG  IHDR#ĩfˇĪ pHYs.#.#xĨ?v tEXtComment1Øô<,IDAT™cx🡡žÁŠė>Ø3ü€ŖzT„G IÁv†Fdđƒë$€[zIģIENDŽB`‚ pix[141]: xres = 300, yres = 300 ‰PNG  IHDR"zĪ´W pHYs.#.#xĨ?v tEXtComment36úėPIDAT™]ą Ā /ĸČZ XÉ]Öđ))äĨÁŌ5ī=9'„c‹ Åíp\ÁĀĀ Ä`Ü$é˙@ą˙@š˙~`â?õDԟŌĀ3IENDŽB`‚ pix[143]: xres = 300, yres = 300 ‰PNG  IHDR#ą“gō pHYs.#.#xĨ?v tEXtComment5ߙI%MIDAT™UĖą€0 @q.3BVņhŪ€•4ŠG LEĸ4Šot’đDÂA‰qÍŌ>Đäí€bĄîí˜ÛØđ§ŧ§ÃX›Đõ•FŒÎÄ~3†üvÍIENDŽB`‚ pix[144]: xres = 300, yres = 300 ‰PNG  IHDR"• ßi pHYs.#.#xĨ?v tEXtComment6FŸRIDAT™eÍą € EŅK,XƒŅEãb ×xn@IAÄØYœúĐR¤¨Ļ˜lDD‹¸›8ĖųšŧXĄ‹&Ā.ÃR&_˙ö2m‚4Ž~E;Åãôß°-m2HIENDŽB`‚ pix[145]: xres = 300, yres = 300 ‰PNG  IHDR!l}ú pHYs.#.#xĨ?v tEXtComment71—( =IDAT™c8Ā€ €ø˙n€āƒPÜ Åėü„ųū€°<˙aû†0\ßĀđ„˙CđA(>ŒĀ]ŋ5_ßIENDŽB`‚ pix[146]: xres = 300, yres = 300 ‰PNG  IHDR#SO|‹ pHYs.#.#xĨ?v tEXtComment8Ą(5˜_IDAT™Uą€ Ī!āK°ĘąCCÃĄJ0ü€á=Dƒ îfī6)*6\(˜Ō"8Ģ 7A|É6rīË:ŧžģ€ÄŧCā”Đķ đö'˛;H÷ųn(˙›ĶąĘ+Đ/ëIENDŽB`‚ pix[147]: xres = 300, yres = 300 ‰PNG  IHDR#SO|‹ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒYIDAT™cø˙üÆ@XÁđÁ‚áƒÃ >øG‚ĄņCķ?f`hūÁíPĖĮ `ÜĨ!lT ÔhÎA >P!ļd˙Úûhû˙Į?¯ 5âĩŒ°ÍIENDŽB`‚leptonica-1.86.0/prog/recog/digits/bootnum4.pa000066400000000000000000001146521506303110300212070ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 10 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇ .IDATX…­™ąnäF†›Ļáž`āg Ô~„  DŨ›øŪ@Î6ˆ$h€Ѕ—ŨŖ\ úšĐ\ Žl˙59iĩˇ\Bpô )˛ë¯ĒŋzԘÅǘōčKBœtôvÖņßQ•õ*VßqEĀõ˜Į6*W*ëTŠL¸KßQXY寪2u¸Áį0ƍ÷*÷?ŨoęĻkĨā܇SŅv ™7­úy•ĩĶÁæ.Ëž™ŽVuãąøF5$zÚĩ¤ęÆC"…Î…}ŲķŦęĻCQŠvŪ€Ėģ˛ĢBęiS4‰˜Y•$vĢvÚXU(_ 8‚kô+â„čic>G”Ž…¸…¨bŪ’n%x?%í¤ŠKR_<Û;D/¤LoÚ­¤$)/‰~!øcũŠėJ¯Æ}ŲåĶ~%Xk ˛ŋ$õ´+ķ…`…¯Ë>c¤jrÄô`ĩħB$›zē.2F.‡Žßi=^[Æ´hëņˆ¸ã;Zų ڌ'…Ü[ínO[íBŊAU'jį^¯Ō$PžîëžĒUY*Ņ(¨yˆ>›•fĢBsNÎ„ŸŠsČŪDWÆß p5Ž8€0pK_Ä,ūfŗ„ÄŨ˜ >”•T|xāh3ã˙hy–ž/ą’Ō´ã÷ļÆRé~ēâwîm7ŊąM¸;Í0áMo 2LĮĸáēčž öĻļ9ČÁvŠęî<–yčqVˇķÖ։ HöåĐrÁŠëÎÄAČāhŋ’Ō쉄ųãÁEiį]áŨJ’@┞„ā›ü#I õ,׸3ņBjũ-1/DŽ_EĻ ōr7ŧŠū,yuMē[|š›Ī˛'YߤYWĮŨžW‡d ¸˛Ŧ(׍Kō…ë˛KkÍōq; ALIŠgĩę`r‡Č5ĖÛxˆ_ĸ}˜5Qȑڹ×yKí$ŨîîĩnVyCŊy䷕zMy*=˛ ÷Ą@åĻ&EŊfĻâ'V{[ēgĄÅÛhpŠ3Qüī1‘Š€Î™ l.Cžx^ãKt”¤r†å-Ã5Ž˙ųÃÄä?¯¨sTsĻmgãS7øæˇxŋ{í<ĩBa[Õ9Ŧ žwˇGã;¤FŽCņ¨ēp´A‡úŲ7Đ~ŲĢzÄ ŗœ 83žAEę'!¸ráL9¨lÜō9äãFt€’¨BNgûČŗōy%ŠŸQ\ō9•Aåī‘y!å[ĸ_HöD5ÉŋpÍøšddŗyŸl’€ĪI;Ŋ& .$áē1“áZ“Ę…wH„Í~Įĸ•Ūčϝ@Úy¯3ęēĮÚZXƒAģŊ˛B e‡n]éÎÄV$BN‚2UOۂDŲJĘ{C‚˜Z4|dŊË%ÉW„8!ų+â_ˆ_‰$Ú'Ä­Åå5Qī“*~Tí§d qō>ož`Č>K°e÷ÎûŦŊŅ:ÎdŸH/+ęšy^74ëZÜĶã|mĒf‰‚­A¸ÖģD`~qDnĮ˜˛Ü´ėK´+Ä4—pą†vN‰P!Ú!Ęäē4jWU9udŗ(Ņ!îNô…€>îf“ŒSjĐdĄRŗ qLˆI:Τ/ chŽÄņš>;ļG;äcü˛bdQ,üŋ¤‡Ü20iTĀŗŲ€¯ˆKÃĀ ģŋÄ ŋscĖį΁ęvú6ī|´ė…aŽgO¸Z?‹ĻķsŅŌ[yÍÖ\ŧŸ>}î‹>ލ{š?Li‹iŖ—ž]3KœŖv’>ÍŽŅ Ã׌—Ū˛— EŖ/´qƒk¨ ŦÄ]K/ŪãDTčšaH Ņ˛Q˛ŧ?Ã2ŅrŧCĖôC‚ü‰›D‚´ÃÂsAô[˛˛-ҝˆ +Ų¯îöÉî=˛Oīãe Ōŗ5éŠßXB.„üąK+*kM‚}āZŋ&vāZcŧ¸ĻQ:•Ė Mƒ Á íMŪ"Ú#—ĸ}Ô ąĘĮž˜ĸ=Ũl1aĸ¸>ķЏ“É(¤G.€Č¨@å™ĄCiv*˛/и˔0ŪR‰Ô(ÉCRoȒâĢ$\)ė/՟ F ÅžãTY Ä>ĸmā ãŲqåķ’“d›ŽØ!Åū‹4(™ƒ0h0qĻÅķb–qH ąÚ”Ŧ˜lÃT×ĒRŖÎ܏7Číéʘ'´Åž~§QUĀ Õ}D=€=˛ĻĮŠöíLT……Ŗgę™*ÍyčT>ĐØŠgBŠ>:!¨á!ūUlŪČĖ'$.äŸņWQŧ•ƒ%2z¸]ŠxKNŨą¨ū\kŨ[ĸ?!ŠÄ}¤š÷5ŠĘ˙7™Io:œŸú‚tgR‚üØĪkŨ¤u˛ŋXkDÄ=¤ŽqIčnwEúŒpZɒ1ÅÄĪŪ_ÃŖŪq^hdhHD]ĢÜy'4‹‡YĸÛ VZąČpŲaĻĒîˇHä‡čM#Œžp0ÁAŖŠô÷JÆfŖ!éŋÉ@]p#č Öą˛˙ŗÆŠ¤:1KB)ûHhĄÍ$äË%ŗlj ų:*ŒŠ/ČĻqFŌ™løkš$n6Ä#Fw“‘Đå/kp“:"úf$Âph¨U/ÂH„é ˛ŋ*ÚG|ąB§ĨĨÁŦÆ›ėĄ|ä†w‹’5-‡j”ŗˇ™d ĩ׉§7Ë3ŲfĒYũ!–IÜ-gŠykeVâĸXųP'/HÆZŧ”ˎdm(ī’<õY˛^ãõbæa_Ā´ûŋ‰[IņBēwHzęN=\Í+r^ liu"ûŠŦۆģG a‰áŠdgNŠܔˇV6‰B#äš3 "Į÷í˜fį%ڝģ;€7“nŦ9+¤čŊē2MQĄí8 CUĨJĒ ˜$ôŗ§'rivNú#&Ÿ}ÚGrâ‘\Ēßsļč˜ęũCœlšēŠyö{Œ–„ģGå¸ä† Ō葲4/Đqá,y$žÉôŽũ-ÛU(‘ŠãÃ-žWáĐy@_@Ū"Ųė:Z&LČ7(īXŽö‘fQ$$ŦsŲ?í°PŠrô=LhŽĩ–,9ĻĸF´Ô ŲZÔĒiŲBĒ ģÁCÄ ĄĶ~‰ėæÄb_Ö$^É-!æ5qĸŧÔͅĀPĶcāTˆ!ąŧz%š%ą‰ČLû1 Ąc™ßŊFĨk܈y‡tæ}˛ģ ÕúģK’Ūty¸8ˆŦÎNÖ ôŸŽčNVt%o"â7‰Â€˜âë›m¯™lÖÎ[ćcsĪ"ØK´A¸ĄÎ˜v26cJh›gh(ßcXŧ‚BŧģᨠąÃGŅ‚|ü>sܸOJë3Œ%KķČBŋZ€a‘í…–đeiLY1Ë`Å˙i`@Rŗ8˙”€ĖzŽcĨ9sČ­eâYÉCõģ‹2*î0inoqkˇĀŗ=9L9N1ƒoaœĻŽA"æb4‹o0+ß]ĄU°(,ėXk S?N„lsÅ_›ēž3.f3ëįeSOėÁôÎ]3īĸ¸[ŲiŲ'7ümJŧLKkMŌË6m"-= 쨧Ú7SuäöĪJĞŸ_ōŧø Ÿ#‘ä×OHsA8Ë}†ā´}‡t—d'DžmÃY`!n!yŸ…đõĶę¸fŲYؒė.HÕ,ŋį^I%UŠúgmĀ LMU}%ōŠŧ?įRRc­ŸKSs¨?”žÖļĻ0ļĩôR%TIRc¨ī‹ô“ÃÉÕØÉ$a‘QÂä@ūâđ…ā]‡¯žĖĪŸÛ"^šŦä͞d^SŒ|N6Fi1Zj*Č@2HlŪŠ…-šŠŠƒYo8ŋ4‚›:‰ĘS¤Ų?*ˊkúĢ¤ÛŽv¤p1šÛ“h¤^’‘¤lmKū:)/"rŦĢĶoČ´[ƒ™¸įHÉxšįėšqkA^Éēn$+QÛ’Ņ‰~^ v.xėaTėN@|Á‚{q|Û´|×.äVv7ø§čۄß:ũ~ođŠ)žT‘žtõK…b´ŠwĩÁŧxÕÕâ<Ōŋ’đ9ˇôĘf”ōŽäVÔ˙VīÍ „ŸD’b7÷žá’qž<“QÉoChpûØŨÔņ;’ŠéŧPųn$1ßQ2™ŒT,^žIÖûy‚”7×H~7“æ‚äkäWIÍŗÕķ4GÄÍär´’đÚkԂ|õšk$jdĀĪíšA~œÔGäâŅŖԏY\ûä5„žęS[‡ž"“KÍŧŪ3>Ô{‘ŋQ,2ëÃ;:æƒŦC2“c2ÜŌ¯“ãÍč[Ü)ĖĘ ámf’Pĸváŧmņ ÜaY ŪžČ*$áœLFÎ7d"Šxΐé€dĻķ™´ ™f_GâëČđZrž–°}†ė,HF^a›?#íĶDŒs<ˇ×-ŖeH G‡iá,oā;$ĖwęŊN=ÚūPnc™IÖ/įBĐ#L¯Æ‡Đ“$Ŋ{+ōaę3+Qũ“Ė[ˆVVéŋ5÷˜ą@ĄāÎ5$áåŒ>6\ø,ĊËu:cgō‡úGEĐBPq%e!AIBíčËL¨”HFŦ:$õL $H˜õg`ŲS• ØN¨),Ļ’$Õ ™fHړzpMķķˇUt%ãqW¯yÉîrüúIR˜é_CŌJĻC2“ŲėË1AĘlIĄ‹ģũņ$)D“؝’ø zH#?6ßSiļ÷$T>ōv'biO¸ĸ5'SŒõ^Ĩ‚õaôc_s-ÕvA•džē.u5õĒ{'ķ^¨œQ0ÚĖ„ŽÜŠėgUÁZ JБœH]ɝ*Ž…hԋ‘ģE_ƒhĻĐyJ‚VÚNCÕ8) ‰FĻ#2îIļ]8#ąŨŸO¤ėÉw‡ķđã÷ÍŋVŌîČO—$9bÜĪ—A5ÅŠ+qOęQwŒ¤3Ō^›§,Ņ%ņ'";’}Ŋ؟pIPÔšŅi‚t‚ŨG–NŽå†Ąŧp‘’d IŗHôŦxņ*‹áIm5…bŽb˛X´#ëÂŨ\,\ųTfDõĨ •útpūMƒ˙w­ęhĒô‚å€Ĩ‰Æ j`z!ëƒŖ2ļĐĄBMÔX]˜šy&ėeV’×âņ/\`#Lü¸o­?3ÉrÎ;5Žė1&m4H8íhY™;4^ö$)F؉īIˇ'ų%d­= ㎠¯ MŨZŨŅŋŽˆEũɗdÚØf¤;&˛%§ŅĖ‚Ķl-ސŌ¯ŖíŌų%é•DĐö~˜ą”xúė‰xʤá8ą܊×ÖÆ4RdkZcY‚žũ‚‘&YJ;›Ų”„ģúˇYB!T䞭60báCĨ'v…Õ-<” :v9õ=„Ē\U~OGír_5_WdéĀfVßĶš;´û\uÜ)ąéiH  CüŒÚ/Đqy+‘į ˆŪΑY˜—M ũõ‚Z,ķŧj%“gŅËņ3醙sČBō‹Iˇ!ã9iŸ#ƒöûũi4"H+ nOĻ ¯"ÚU/ŖņŦ† xO™ö$Ŧķ( [Ō•PŧŋeŗÜą•UĘßą×DßŖ8ā˙O|yDp™ ˆX \Ų ^­U`īœyĖų™¤Č ‚vŽAØŊGÔdĒƒUM Y1°N3ŅĖQˇ!7‚”@ÂŖ‚0Šԑ\ÜúHŌT#ãB„ ž#KŲ|>&NītCÆ-Ų^Cw[ÔĨGu†KŌ>AšáU˛pBm žĻ ėŧ0ĶŖāüJTû‡´´Åb„ōŽûąQ=˜—k æmųĀ@{gëCF%Č ą-ō;žÂÃ´ZiI4iP7v}Čé”TˇHÍH­Vū$ũī‰ÂⓆÄ~gŦÅgöQ›_?RuF%Y+͎ö´Â×O §âÆôüę­ŲâĢĪ 1†;?ņđUëi¯ˇI2*Œ^'RHŠŗg`;ÂÆú‚Ä•čs™áD`uڐ´!Ŏíæg9'Ō=MZ%jÁ?¯’é:1¯Z,x)š´ÚÖ`ŊĻû?‘“ÕūD( Īˆí‚ļz?PBmQ‹ŦúČ ?ÔĮ¸×jPîô9™ŧđˆ_3{-ˇ$o큛ŗĐė¯d#æ~áDnæ‡tHųõ¯˙(<>‚ōoæxIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇIDATX…eYÁnķHzl†ƒ´QÔĖ!Œbæ–c´§(XÅ ’øˆ1Ėæˆö°å‚Ņ ,𡠃rÆˇ\MÇ?§Ũ6|iczØŠúZ˛g˛>ВŠl6ÉǝękĒQeߤ*{›ėsâ×XggUP­2AŨaSgeƒēVzPY5jāG¯6ĒǤŒWËļ÷ÜQų¸´ĩW Uų*rŸI>8ė¨U—m×qĖ]Rí€ Î-€ô#vęŖĘnxÉĩRĒĒ0OĩÚrr[Néãđ Uü" ŌúŨˆiˇÃ?įį*H¯viŪ¸<*[:Nˆ|}F<lžs>ę8mC‡‹îÕ}\É1Ļ 9š@ļęHW—œ{"C$‡[å4ō”ķ–ČãI¸Ÿi‰? CKäSŖmë|Ę'ÁÉqŲ(­sh“Î÷DŧÍ:ģœ…˙ō`0ž ŽMMÆđ1@‹īs˛üdG¯đeøė„“~ĖŠå§2ŧŠm>žb'hsĖcõ{™ZČ*`ǝĶâZS}ĘCûđ”nÉî9™üi3æõ=oÂî”ö5ĪŅæ]zÅ>9čomęōn÷Ŗú”ŋŸT8IŸķ`w=k˜&ĒSūĒ†v4à66{5ÍQŠY”SSUšëŠR^­­W`HPü Ī}Áíä Qå+‘ųqęƒR˙ŠųŸßž# ŋåq Öq§üģ܇?*2-ō‹Į¤< ܍‡-äĄŨœBę\vÔTBY`s[AX¨Ä•āGīÖËZâÔTâ€Ô"‹mXĩ•¤ë8à *ŋTu×ĒŪÆyÛõŸtš­4]āĮˇŨÖ1Ŗšļ2y~[7DvaŨÖ&›¤ÁÄEîöRŌtû¸Éũiēœ!ĨL¤ų92 ˛:#Íy´?Ž_’ÂĢFØÕįŅ$sA,îUŧų9"DNDÂÍFxˇÍÉD"${hÁkŸnņ‰äŽMãö‚A¤Ŋ/‚ˇļhAt#°‚HÅīžN‡ æŨ x ĐB cv”ËūWr`äoŠOļÅîū‡â‰<° <’“Ž:÷1ļcx éĄ^äĨÄŖĖŗįüĀ9IjG=<ŖˆĒȉôuSųv†;Ö&U=å˙U*´ß`Ŗ"›'dž4UuĘŋVbj5å†(~ĒęoA\ BdJ rę ‡  )ųĢ}aķCíŠ4ÔY `ĸâë›?}ŽOƒúU˛#Įwĩ#šq&Ú<´…Ņej\ØÎDG-„ÖāĀĖč2xt9ĪLčHûa5ĶųˇįY DĮiŨ)uC†O5Øëí˛HDū@šLˆüž:ūxfü_œÉîÎÕ_>ĒbõĪ|AT2)¸>[ ôŅĀŅ<.ČLkû͍÷!.XCŧå ÁąÚˆĐc#‚ž7 ųcÍdĄ"ĨäÆßM)ƒĪ4}ÁОāôø‚ÅŦo-2Ķ:k÷w"ίTmÚĶj‘™žĘ=‘šû°,[įÔēēđe>vÜķˆ4Ūų)ĻtčÂ<֏uĀuÁw4ŒíŲ+UĖ;ƒĒÂŌWŌâ˜:WŖĒ"S˜7Dx´ÉU-ˆŽWNaËrx!{‰x =Âc:p ĸ!káLR“!‹.NlA¤‚ĢŊ—čuˆa,ĮQČØŊ4×ļŲˇ[‹ŋI2Čæuā š&](dOöõ…sjŲ›U,6å”,| cĀPĘ``Ŧ;˛Ōa(hˍX!Ķy&!<ō'^ŌāššūGėļƒüÁæØė•• ЧmtĤf°ö‡`g˜/ĪtŦīlÂéķžš“É^ÜúÖ&Ÿ˙Čj|ĐeŠū ŖvdãĮü(ˆs•]…û_lãŧŧuĻŊz €n üâÎÛwdūLŧŲ@YŸŨ( ķöŋ/1ĢV˜ģ×Q—ŒÄĮ„^2Ē"k>ĖÁÃõZ_âĸ­TŠž~„Cxą§n§Õ Ž;‡äCĮķĸKx€ßÅ+jpęņ¨ŌaąŽ•NS< 8|b•Ģ>.Ø Tc^Ķ‚t@0đĸW´Ž‚ظj;V{ŅËŅDÚ¸˛8æķ<Ô¸žŖ ØķŽyĮv]úČ`mū9pˇnˆĀ÷uZ˛˛¯Ûū…d÷7oH/ą ^į"ƒ!Hŋ€ˇY„ ÍOŨš_@\bKͧ/Tį~…Ÿ…šf‘d‰fbWĀ-¸ /ũOĘĄpCčĖDŌ/´DŽz˛å9A´,áŒé ūpįČĐ?š2ŋA2Ō ŗēWŌĶ1 E4 ‡Â°Ũ᨝ĒĐzl_""DØ! A ŌĀĖ Ž) đ6¤3Ū„_Ģę1ßŧ “rāĶU“”k§07"ō÷öÉ3!E[fĄŠlY §ÜH%_‹'į8äJĄŸ¤z׏æ÷úÜ>Ė/ŽĄTķē—ÎAŽEÚC@ËDVJŋĻëŋĖ9ۇ\ú\$ŦŗæÃa‰ĸ~­bŦ›3¯áY9đŽr3-!Įģšņ E@‚(nār~n\'ČęĢ&"iŠ ÔĶŅß 2iĖYáJĐŗÔä Ģâ īø5Ījššŗ/tqw,įLčጎqŲĀŗ×t”EÖsĨá•$”û1pāB‘§~ØN°CN˜{Aœ´žLB$ģAíû<‡{CŌ(ŅsUKGb‘ÃIÔšwĖUĪđ™ũ faå}aØ W=b”r3p:ŊŖ/˜Ũp+š*6†õōÚŨũ ĶSŸPwøqV§ĄŊ§āĖî`ŽRĻIîzĻŖGˇ‘üĩi^ƒŌ“šQ˛dd >Íė}t•ŒÄ 1]×drFđu"ĘŠÕÅ7 R „kBgōŋw“"'f—ūnōƒkŋ›o)´–Ų÷í)s5āV<éÅdMUR- ėČ5ÕėtŒ$ ­”JË:RËęOĒ,!qÉ(¨ĩFáŋļe­úp;Šû°ĄˆæļÛ˛mæ YäĻŠwqYw°‹öu‘=ۇ’Ō­ šeô@ …å{%9ūÆv&-ZŒí„ė:üBrüŅAIãMüEFŸnŲOėÁpŊęŒŦj"wėŋ'氏Ëļëãb 3\Av}Zø| ”Ū\—ķĐ‚ôe ‰Zh­îûŪaŧ ô°īŽŅ…ėž,ö45WNS)÷\IÕĨwöŌokōR⑝î˛ģ]éYŠ9üD#Ëap  J"Š'đ+#´eĩh¸+ŽaŠm @˛‘E“cŠæNj÷Câ8‰ˆŒ˛MP.´ŨŸ^“ũŊpĀkũÂŰUl_CnĖ+ZëmäĒĄF2BÎÂП‡ņĒy Scˆlô#;ÉΆ`Éú<ûŒô\—dTĶʝ×T×o•}ÆŨ×īŊķę iØŠŽ ‚äŅŋ>é>đˆČāDpōČ=aU§aĨs-0J0Ɇ6Ņyŋ@vŖ4ļecč \^ŋæÂŅ5ÛæMyĶ`NĄô ˆnÎ-ŲŖŸ7õ>BĒGÔu€dkŋ¸)ÁĪĻ SAC:š­šn †Ln+ ­C'„ī ˆšOũķ drAîa]–īQ´‘j"Œ"Ŋ€Ę’ũuž, ŲšŦ4jž_ˍJ̐dC‚/ Ē |gÚˇžÂrī_råZ>§ĀLÚdīŨšī\#ËĢī‰ÜG"līģȡNöž2ā…2n=į=Ēß1#ŋøv'MɎ3?áĐīpwŽ\-‚ũę(ņhāë‡Sž2˛"”Fūaēcû ›XŋwĶĸuŪŦÕÛß{áŸå\RĪ%Uį¯Ė;‘áŒ€oĸ:BÎsnÄ<ŦˇO/QũCNâ tM Ž—*#KHđãl%=Æ#=ņũB”eĨl¤Ģ7'õŖŋ‘¯HBĖL5Ü@NžŅE¯ÖĐ\‹ė"+[Û¸œA•ŪÅųēūŠ=¨mX|Ví’ °ûÛæ&ČZMä[„4šĒ1 ÁÉ Ō¤Eî9áŅųŠ–UÉ3ōŸ“ÂA|ArúäŸYuFēBû‚0ÍO+Ššä¨w¤†%¤;Ađ‘Ô[ˇ™HŸZĸŽŧļęˆ$íoĪCE)Ė`<â§ ‘*9”f6—š‚ŦĶ4EŠYę6ģjiEB+ˆ42‰gbīÜqrų<ž´ķįŪžâåĨ€Œ"Kē|ŖÆ‘ŗũÛŅ><ą'â’n~yĨ˛t`ë%=œ ’éŽ>ũ¨ĐF×CÖv÷ôš÷¯Š/`B{ôÎÖ ÷åŊHe˙ĒļÄIŪš"˙āröō~kĒh¨#Ŋ ‡üĨō;û(Ŋ2ųB:dTYÚLeMU1N,ŪZ…ų[&*Ŋôâ­UXŠK×Ŧp›¸ųtČĒ(‡;â˛ļˆBīHyũđ‡t !NfIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇJIDATX…]YMŽ#;z$Áe ÜЁŽ…Ü|7°ŧĶĀBqv>Č`dxŖ…Ļ˜‰FË:B_an0ĖāZÖ:…ˇčeŗ1‹Į‡ĄEG|LÕë7AR(˙Čøžˆø¤næĻ\25ųbjô7]{wëĒōęįXT7ķsŌUšŦĒę˛ÉĒS›ŗ˛‘ŸgõŦē”ž”URV]Ōá3õ'ÂûŊ–Ŋ7QNFåXõk<ų3b/åŅ›KÜ ÄÕūkڅ1*Odå‡1mŊjHMģ:öÉšÉ[ßĢ ˆ{Žãđ+døąSîJ‡ŗ9sÎ; ĩ„:đ9ģšēė.eãėky DjÅ š:ZžNļf_ĩĒŠfÃķá¤.ēšCÆŅĄUŋUŦšĒQÖĘÖæ/Ų*lQĩˇUí~ĸÅcÄ+„c€đËŊŌEų+z§žÍ! Ÿ÷ Nág>ZõSqø2zÜēr¸^ę.ŠgÆ]Ëę8 }‡wxŽXŗãŊŨ–ˇ~Žw‚ā׃ 3‘ø)ķËÛV¯wdŌDžéÛŲē:hžíĖļŦBTæ~ÉĄ˙]W§s;ˇũ bzÄĘ1y-Čŋâ)26ēWØžsYcĄ€ôʖĩRŸ’ĪxPĪcY}Në Ôš”ą1D7ĢcĩØč=XĩÅūœ Y‡… IĨ‹é@&ŠQ—˙S{=Ę:)?k|LxąęÛįWû[€āÁn*Ü<—\*Ģũšâ]Ž5`uyįNü}—”ë}æęc1æ.Ŗ4ŦšUP6Š k!¨.šÚãŪž '…ˇĘLņic]ĖØĢ“3*âįX23íƒúbĻ1mĀQ ˆōú%īà{ÔPCđķ {ĩöçŒĪ: ōH$ũsĻ¤æ†ä_‰€×îs\Ŋ›îˆ]o|r¸¸˙‚—G3ĒėņšÎR*ō¯ąÖË8Ÿ:đ üŗ@°6Іąų)ž6Âzf ˛Í¤a&ŲQN}Ũųą‹ėŅ>°Üč7!É1ŊųAÁąfÄE‰`Ĩ{“õ׌}ÃwDf}SM) íkōŧR{  –0ČÜxŨ*΃Yųˆ ~[#€bFŦ\;Ŗ˙|ōˆŌz>n,¯ ¨…‚ÃųNĐ¯gŧz.ŧë­Ŧî D嚑×F:\˜+_,ÉÍŊSÜÆ€U–xŗ$ģĢ!’ō3ęé\{ÆĪā>Ζ wņRöĘM_ Īî•æeQ…ēPöŨđ-ŗ 6JOiĮwGerž ũČ%?Ų) äacÎķŖģäĨ‡˛.ú5Ŋ#}˙?@ʃō›‚zŲái_˃öÆōô„ϧ?å=zÍ[yZ {l)xōg,X-žš Ų#ģ/YāziSæ+𠍀]‹}}4p÷*tņ\Ĩ€wߤwųG´lqf‡eĻJ-áŠc1gá9ā:S&˛¤Ëŋ¯°ƒÖõ3j.ō:ßž&-5F˜â@$Iã!Øē†-Š‚Oäß[fŠđ*¸2´-ŋņüĢVLAwéĐį ‘KSŒU7@ƒW7"ŋĸQ˙ŠQø÷.į]¯)¤@V Á1k gģ#,vY?AFš W×aâu&_ļŠžwÁté&×Ūž.:­"‘—krčĢۏt5U1Cy§KbW>|Ą Ŧ Š@YĖčåžjāh[:Š …æÖàŊa—Y/øMK-Đú4‡­C?šá×Nq/ÍL{Ä2Ŧœ:€ Î,?\ō¯¸.ÎUY ¸+"^kž=ÃGiˆ8¸ėG yĩ‡"č´‚“á ÃōķL-É-˜ø?ėhŽ{4B¨,&ZM÷‚Ž'twôGđW…*ˇØfHnėB˛āŧ‚TGXãŲß šžĘDIä(*lyfSĢę#Ž€Ŗf\ˇđ~)ƒŒ‘•D0NäÍ3ą Ë‡î÷œ`Ž˙—Ņ—G§‘LË ž -ޤ?yp}"T‰‘ÖÖ§Ķ;âûüAšņÅ #$ē/OĢwdøÖķ…Į”‘Čĩ ‰e #Fõʲ¸AĀq7GX*†]š’ŌĖßä,*ŸŠ ‹áÖŪ„´Ø~TCXŌŖŊƒøüBJ’PB š .Y‘VOG*à €Č~tܝzž=ĩ$IDéĸū{ųāŖTājE͈44,ˆ¤ˆ•mwvcŊd‘œ_‘į‚ÄI˛w,@΂0I ´Č¯,MŽÃĮß˛š§ˆœŊ#X  ĢÕ˙\§ jLŠŦ Eņpása…á”—™)Jbf׀ã č™K'$ĩÂÚĀua˜"t`,qOûGĖng. 9äĖ;ÄŠ÷Oņx2œĮŋ­‘A}N;p8 ˛v‘ '"nũ?ˆ<œĖ@„ųĸ ī‰\hØĩîr?ŒÔ…sĨŲ°ĮƒįâΟ) ‰NˆŅ@ĩųKt8”V?äÁ%ÉH ×IĨš¤đJ˛šRßf?Ė ōŌ)‹f8 œ0Á-ļ3tTú*×1Ŗ:Mé`‹ķŸtÁ Ų…ą;IēŋŒĸ“ákyŅ…(0!Ŧ7ą˜ž÷HY‚.Ö ĶíŽĀ’Ü8ŨîŽK†K䓟ßnôU âāz`cd&6ĶB]ĮålD+Q?;ęë¤ŪŌąŦöŗÉ° ĐŨOūĖ4Œp˛æĐj[GΑ@{•ĀĒõVŸņåĐĮÃx-î‰2ĢZ* xŒ Ē %ÜŋYd„˜!āũ+žS3#}ÉOģ1fOsM5 €î>GBOÄÖ$É’Ėí撠Ė[~ĸ.œNØwÎPuŲˇ9’~A´†k;z¸§˛(?ųØ į"#Ŗ­ˇĶŧûˆ'ãŦķ’œŸ8¤;håˆŧāT›‚˛‰ĮķmU/n&qˆ $\jRĶQĐŠŪVČnA^ōžrŽ$”xt—:ī:ė‘‚‚­ĻV{ Ōø¯E„‚ÕÄW(ˆ?C.*É…Ū‹ßõ#ũĐןoûŽÍ4S¸gÅAēČe͜ą‚aT 7ą,r›0!š<&`­“Ųķíí@$‰K‹ŧr (ېAĩÄ,Ŋwîx˙]/*Âm8qü͐Ē[•ŧ4ōŗņᇰĖaĨJˆĖŸ˛ōmådŽDO3ۆŦģÖ㊈Ë1–C."” ˇĖTå: ˛õwÜWoÜpį`/×TH"¯i†—ėĪķÁ/°Tä>ötVÛ bæfŖÁũ=úæîIŸã.Ā$0,ŋF˜jãČTpÂĮLŪ‹šgã÷ Ôd/>˛į36÷–SA<ųÂļFwûs-2…°ÔúOđÄø5u­-3 @ĪleQNîPģR¨wt€¨™¯-ŋëî“S\Úq‰×ū™7¸žĸÂQ€ŋÎoķiäQcõfåŖ›čXæĪé9ā7L2S‚RáH‚ôœú´r˧+j,ëgÚUą6 š‚x’~/bW!/8@Ž/ÂsŽƒP*Ž|ë8. k$ÃëbŒ -ŒHĒp‘žĮ_„8.3ā•B ûÚZ0įŸėūŽcŸ(ŠŦĪa¸ĐRZŒ8ģ”ļia¯ŠCæ,¨ŖØ6Oĩ˙x”ŒSe‹öđ]ÖDÎģÆxÛ°ú “ŦŽ.ƒÕ,ˆü ŋĮų+A2ßqnŽžŗü\ĖՂHĶŊ´!1/œä ˙;ˆ-@ãËAøhß!"J_8Ɂ“Qüŋáž‹dw\ķkōP9(rدí ũ[ėļZ=jœíąYvaų°ķ.ę(LkĶVꂓ?ėUb2Ũ:s2âJXiî09āÜĶzÕ˙Øā”¨P1•Y 2G˛d7( vUIœĐŠ5Áf׊ ųšéY WšQĸ6ĸ`âĶžÃ¤:aIčÉĄ\ĪĪG+“Ē‘ŲI1A‚‹đ Ô&É_™=ú îčgÔxūŋ ufŦ—;1Ũ2@ŪÛŠ(4Á–rû[­¨% ¤Gļwˇ$dû%IâīÉaĻĒõ˙€¤w„~B0‘säVwÄqķŽč†ĖØZe"gB§u/r ö¯!ũšü׉[øFAL:ČŲŧ6‚ +ŖĻŅj€ũDvĐ÷Öš€fpKü7–ĶÉiŒël-™čۍÖԊaTídrĪĻc‰`­ũSįæ‘,‡G¨ŪÄîīųĪ1^ŦŽŠË$ü?ũUæĢŖiNIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇIDATX…m™OãHrœæxR &Û'—BåÎ7ĐŪdC[lc?ˆ1'ß đAĄH.KhX>ÎaūžMĘjŦö``}ô­) pīmRhĀÎÆä2ũ^$Uǚĩ`Sü‘˙ŧˆxĨRHé6…˙ĮMúCJF%_cŖįwŦy2˙Hܕ¤4éäđUĨĻŽĢÁ`â2 /H“đ“ŧæDÕÁĘ*Iƒƒ‘ÅsĸH‰J{ŖFU{›ŋ/RÂ×ä !ƒÅę{3ŽS,ÆEr:Ē´5*>'ĄˆëôFĮ×éQAÕÎb§ˇ}BēŅÁ%KRŊˇAáÖ>,îLpce”WÕxĶįPŋ8‡qiÎnŦ…ŧĩg’S¨ŨūDrrdpw’ēũ!Ä HĀŨšå=ēÍÆ| Šī@ĸ9¸‹LN$‡tׇ D)Õšee÷n­Ę­4}ÖŅüRÍAJˇXÚFŊRjë6ļĮ–WZņĢ*ÔėΨüšÂĪL}ĄžfĒhîŽl2ōĢQ7Ũŧ×ÃëåÚ~lSo_÷BîHŪjįkûģ6ŗķĩŅęäC“îôÎÍCõĄE¸íAŒ:øåŌŨ¸Ô­›ûę];ZĶųG+͌ ĶēŸy[ˇą2ŊŪ/ĸŲ7qm QWÔm¨ŒöÄiŠ^EĶ7!dŲWÍíO•ö˙PMQ`š0˜įÚ§ė›ËjŠ~ôI~žW E}9uËĩ™ž?ßqôÍD kÄ)͟ŠuM%vŌlu%Ėĩ&kįBälĐĄ¯Ŗ¨Šą`¯Bōĩ/øî‡"*ƒäLí{ŧāzĀđZ/$Øņĩ"ĮœÍYœ˙Lõ'ƒbPĒô)ĨGlü.}€ė°âƒÂeFū8.}D~Hĸ}K&ŠÆޤq?-IC‚߲KÃD< n_îQŅIP81HË0@ŧ°–Lˇ_0^đh@š¯˜â¯¨ķ'‚ûAŪGö/rԀ0*xōbœ?,ū  „‘U„yũßČūž)ŋDq¨BJŋĒŌâņ†6ũ ĄR÷ŒōĄôžäLrnĶ—į¸'iĘŖ¯ß‘ ֎m玨ķäOôNȉ‹{{öņÁ˛>øÍƒQûQ¸o~}ow>>šĪØQoũä@˛kf™œ'ōhԖē{°ŖųÔ~ĢĘ~ 1EPēž3Ĩ æcÛPá¯ˇņĢÕO‹C;…€Î˙ RV¸ØļĸũiÁBĀR¤ĒĐ ¯¨™â' 44ĒÂ;&™Ô‹ė[H&ôŠ:‡v.°ėLzÉlÛ4–“vÔÁFjGHbu6 ĶáČķcĄęË1^}ĨøâqLÉZËĸAä˜įD"KąÖ7% R=bÆQ!œ$:mú,!J'„ĩ$8ŧĨŽĪ Qw­YŽ;ŠLXüęĢGĸ\UxŽ8Ą Ÿz$•ŨVA¤ŒČ'ŦƉ ZRhŠÍLÎ' Rd'DÅODâ ņhž‘F‡U&[ë~ÃßãYŋņ+é"ŋDN ,“ō.!Ŗz!ŖÕqVßh?ųčQ{!é 'Ēîô)ą@˛ķi†|3Ö w‰äčâŪûņÖ~jAŧz\ę}‹ZĄā”îtįĮ…=ĩ°BƒÚ,ußÂBЉöqŌ“ÉF#ąƒôÎßiã× {h}ŌN­™¤gxÖÆÁ}čæîŠ=GU ØAtŗšbwЍšŋŦ/? ¨˙§ö‰n~ ˜+qîI•}/ŪéœDt€,]ŌjHĸ¤B"_yúcĸj™x¤ N艌$49|§đ‚B Kq[‰Ÿ ÁÚ ‚%ÎöJBĶĻĮ$ŋŗ‡îs ";wˇE­ˆBF‰SMR˛LXlŖz;n„Ä vSŧėŇt)N¤Š%’ ũîJ”`’"“Ą$ÉQ2Ũ~Aí—ČûŠK YH`ĀđCÜW2đÁŸû/0WĢņ9ņ$ŋ"éž'ŲI”×G’¯,~ß+,÷$ŋÁĸ>iTK˛EvÁ‘˙Ãē };ŪÛĐĄ éIîŒ]k}lĮG{.Ķ ¤KČöBčŒPíŠoĩ:v҆&ÂÁå ÂhO]9ėcu8Qâ{ˆ{´û.ŦĄø.T‡Iį@ļ$ØqoAtOŌûe r&ų-HQøēØ6~ƒēp įĒĮeŲ„’E„.'ég‰˙Å'ž4J/ G)AŨ܊ēąKųŠû4"Xņ¨øN‡ĸīîĪ‘ŸAD;)§GŧGŧ!Å6ˆsØRŲu&%õ†g?RÍ Š–[åĒâ…DAąCkf„Â+/uáJ<ŋŽ0Ž ât`į‰„~į'Ž v(7Đŧ Ôč ]B…øj´šLœ%Jn$4J•4E ;‰ļŅ/Hŧ÷DājäiH¨Lu!JĀÁuęėŖP!ŦÔ6ÃD¤Ēb3Qė>X;$T¤bX\2,”ô ‚Z˛ÂFš0!Ņ1˛Šô[ĢâŠĨmūĩBÁ„éņé-+Ä?Z…U÷ˇÁ׋ ũÂW°6éŸmøëô­UXmJīęu&'Or+¤+Ī8a5¨åŊũč?Ã.-,ú…¤ËÉŽY>ڃGģÛĄ¨>™ō#QÕ6 HÚe˛žĄ_MyČd‘ëėhģ] 3ĩ%Ų‚,šFl>^žŪ!qSžs˙™uLĩˆ‚ ŠÆIĻOļ:W­ßæ6™˛{Vä#Äā-¸x‡Sžēåáö}ŅCŊ?g¯L?J0ˇÁÔđD'ĸ¯DœDÅbkŸ´ss=†ílÖ[I1ܓx60rŒĪ}bÖÛĀÖĀiú_’Āŧ!1“Jˆ—*RP×$•Ķšwa…€Č"8ŊcTˆ‰Ø*8ļ (߁lŲtVyŖįUÛŠ_ˆFl?6*6š?¨ã…8H‘ÄeÂ_¤$ÅöcŖ•Ûņ ŞZÖš6û¨Lë(ö“<ŨžŒ•,;ņ†’NËF‘}”Ōd35.%8Ҏ{@ĖVAČĪP‹ęļ ëĘ˙Îh@ęd-ÉdÅ0XWÃūg(GđFTXmÖéCĩīAöŨŅĄĘœãĮ{c¨ú~ߤžÛģQĸäč×ág Ļīô’Pü}u Œ’Ã1„ų>{ Kđŋč$žA5@;qƒÕ{Īėž@ü7 9˜ž8¯ūd+Äq䐎ņōkxĸd{uîūÄq\Ú#ōŗ Ąĸ'B˛WŸ:O7ũÁ샠#Žzx$ 'ŠØũžh]?‘Q,ü:“ÂÍ~LTąįĀ ­KՁ”=~ŨŠp;ŋØč‹ē˙…ä<‘Ū?ëä3%ŒŠ˛yŠ ÷7l“g ä"ÆTÚIņøĘĸV&– 0!Ē$ße"Sö>J+“ôÚ¤'Âȕdí\H)zŖQĸ'"ũ)‡ąQJ‘‰4Ü]ĮüãĶL5ɓJ˙d!{Į57MNqF={öīōL‹š¤ąÜ(›› kθ†Á˜/0ûœÉeę¯ãTėÔÔ&KžV5;ĨRbęžĪųš= isô’ !(eĐJŋƒÛûōuTeJōžqĖMö÷"âŋæ–dÃ낷ŧ/ߥUŲ˛ßë…¯î5 ~CŲ éõ-įuČņ÷_€<ŪCöˆŦÁƒĖ_ãAĒÁßãqzáˆČr09zåHvūn7…÷8̎A&īül*ÉaxŧC éŪšĸũRŲŊ_úā@:ˆŪ;˙Ēˤ'iĐP“ÔēcÜíkŋ§šŋek°X˙i'ÕÍ OOũY =Baf™˙d°WŨOeã'2b‚īîY`<÷.œ¨rūĖ-MįiV4÷~wT÷ü +oû‹G=‘lŒ˜î°ú4'$îįžœ†¯ĸøƒ‰4֛'Bŋcå˜Č~árŒg¯Ō”2DÍi˜ˆĸōx•Z¸’’ēBŋÃĐá8uá#ät~ę"ģh$ū^fKSđzÎrk–Ī/aŋp Ū2˙™Mâ´˙ļ›  Ŋen rgäÅāH!ĶšiČĶĸ ážNKk ˛WšVyŽ‚LžÛb•­ycj8T8õAĻEi*ŽįP$ûžÃŖ<‡eą@īŧB‹ėß÷Ąû:ũž¤)ã =.Čļ‡ë˙äŽ`ËāĮ§EųĩC!6‹…*Ī>Žõšy°ũŪsZ4ámÎ.i-äÔ)‚?įŪ{.%/ųWirļsžäÖŪįiĄãkÖĪîVŌ<'Û)/WĸfYˆtf%A@ŧ\ķe#M*¤­d“ŗ—;iör#*bOr rC2˙ HÚdĸ4Ÿ2ɋD5ëLb3ŋHŌĘkyĖ•¸|"6˙+ 6|G|[Čß5‰ 6˙ÍĖ›,ĒsŌŲ7Qœo@ūWøœIĸ¨G“ÄvpšĐæ1Üal“Ü´ƒĮÜõ>lD ÉZÉÁoėÁKõWkÜzÛä]¸ŗJžđí/ˇXƒ¸r*w7’wéÂöōÛŋxå1š>{×Y“ÖŽ—ßĻņ=ųŌI.$b 3HâmNį…“;ëķTIîä!žČgĖéā;Cüˇw$˜mÛÉķVq‰oč72ĻՑ-ɲíķ”ŊÕ "*l܁D@l“=†RŪaĨ6öÉ7:.¯TîALÚ^5bü­(nÍ.EĪ*7Y‡pŠd‡ŊPũVԈĩ6žC€Ē|ƒ'sûßđ˙žÚPš¤/Đ •ØŸķY­o„ũC%æ_ˆTŗRÉ=Du$h[?ŧ‘=ķ_qa”Œ-)ä÷uS_ėįĖhdY÷ĒøņyÉĒ‚ĩALŅŧ뛸gîŅŌ"~„›Ų&ŽÛYú°ĖãˇîžamĖķ ´#ĸ䒅8¸‡Æ#šjX&]<9öįÆŦžÛI‡Æļ ô°=ŌÔ¤­ƒ-s†Ēf=v‚°x Øē‰ƒã™F$š~ƒ&kƒÜŲ~ü2W‡ÜˆŦčû(5rĄ‡Xf;j’bĨI˜ÔzŠÛŖčjTUzđëJ”š>ĐM=đ]9ß=‘Tˆ9‘[M/V ?ĮU k?Gā(8â‘ÛîIĒ¯Â¨].męzÉ&…û…Ím9=ŌėÅ-`ÛīĒ{ZĄx°ÜO$R:‰TęögēäYGY[ZĻ[öL¤īP_Bą:įyRÎDØ/Â!&Xk¸¸Ŗ„Ķ‘ø5m~ kA]Ëņä”īBqXėÄkXœB+˛¨ĄŌŊ“iŦeuø”ˇpå‹Č ŸĶ{'ŽīUɲô[dœ뤊ŗĶž=ž\:Tf‘ķū÷‚ôŪĒBtZ.ŽdđKû‚æø\ĩņÆõ:•r+!Ķ#™§ŅŗB„ä´æš+b!\Ŗ.l‘–šXJ6*Ú \3ėę˜ęyãč}Z–~ôۙū%œ’ƒw†q§.Ė×yæ‰ SŽBŋųQÃKÛĄÔ'C#Ûįṵ̈K-rÛÉņ Ų>4+9’Ŗâ+`h7 ąGōĮ§l›sēÆŅdÃ;>ĸ´ô›–zÆũHT9™xæ¸_xĻo„û‘´…<‘ŧŌ#Ąė•¯åüdb¨„"‰Íĩ›T…`ט3œT?TēI)wKÚ°~˛Cޤ:;ËŗZy<‡ũquí5[Ŧö:ũ€{ÍgÜ9Ëũã|R9}¸ÕXņģļŠUŗŦĶî0Ą Ũįî A!2¨ģįtČč1P@`,š„‡1,Ŗ$(k˜ČÂ5Į‡>ûú’>đ÷…÷0(Ņ)û#Iīä ž*Ÿé"{y'ūH įōSÎą—Š„ŋI|GXKŽwûŽvAgvŋ›, ĒAé*”hˇlAū+wŸũn^*ŦÆĨa,lĐ[ËÖ5m„…BüĐäxķ+zcßč“Ö‘įH>}ā.$Ŧ(\ējúxŖ{ )¯8b…0ü!”€ĩdiŋqؓÎcËc#Įߌ¨Ų֌l_…v%Ēš¨ˇ™_hļˆöIô;$7$×{ĮQĸęũž*#P•ė"‚;„-Ī]4MëaHžīäYëc34ķ§_"˜1#/Ęūd’5čēœąüž 8|ĒDׯąp"cA3ņ#ņ -Ž™ū{ūÅbl—-wŲv1‡đ˜}—éJķUjĮ/W%JX,~žĻ¸™ķiĸŲčr¤öņÜc¸âîÚ ÷‘g#*ŧz‚/íŋĸ+0‰§8+*~ģᚴčč#ĩŸÎķÉ#Õ6yaŋkä- <-›ŽąP~E¨N¨Hø˙!ķąžĘ&”bP¨<×(Eô„™ÁëøGr˙FŠ÷ú) t°5N†˜Ī:G‰ßÔ.į`PŌōqÚfčüĖõhËܰÃÅ{=ũ‚ė‚Đ#9;ŦõOųAü–üƒŋhĄŅ¸f…p#ÚŊV—ēPÎ- ëōfXÔĒ/üEKá& lģžĀSį˙LĨô ō3IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇ IDATX…•YKŽÜH–|l ãąHČc‹œt!–t"Ŋ}!€ŲÄ"$Á—:BbĐNpĄeĄœĐĘZ”ŠCŗĮH)UŨ`EŌüųŗgfN)/ĨŒ%ģ2—/%5Ģ4Ņ•ĐŦV°ģT%øRagj˛ø` āJJW–ē´%×yīB“Äļf‘2U˛Ö%.ÜKr} kû\—a”lJt‹ÅЁāŋüŪõŲ$ŲŌzŦļeJތ@Ēä‹%ú"ĢĻLËՕ>ßų:6Š4¸VméËdŲų>6‹Ÿ‰āJeÅΒ}ŠËÅ Ö$4ŧ|Yũ†.‚Q„įĀB‘Ļ˜._J[iųfZYšŌ˙O:úwr×ĘH…grjJđDŽbZ9œˆœ÷ļŊÄÖél ÛKÚßcMŽĮēË1uÚģ^‚¸ŽÂ+Ŧ€ėĪUŊˆÔõ˛÷Ø)~ÄĻE’\Ĩ^Åqģ ¯ 8ĢĢøųG$ˆY6¤IõëÚ$bģ¤mį iâ†ôxßų˙ā6ėšÔo×Ų5ĄZv7$ôĢ"ģm-t@îzį¸ˆ|¸C>āyÚt°a\îũõ™#[u(,=j”uh‹m^ŖĮ]Ŗâŗ …‹sąΞmÂ厊^˛›€Ôrjˆ$ZâŊUsv뚏âoCđuÁk.ũŧx{Ģøˆēnģđã^Ļ‚g  %í}鐒ˆ€4‚ē˙ŽHĶV‰īd%ä"ļRSē¯;ûYNˆ˙š)|ĮĩrĄCŲŠâۏg‹2¨ķŊŠAė3iŋĢPüī@‹ä:0‹|Ā1ŦĘ,{ÛWáĖū ŦƒY‰ž3xī@Ž.(ēõāfE‚ĒD„åȊߐæG¤ųŲ7˙‚˜ˇHQd–댊ô`0n kĶ 9(âCĮë|CÆ đC 'Ú Ė@& (”Q‘.Ž .Ė8z˜Ũ8.'?ĄÎmäŽ+ņ|ĩ=`KˆVUŸäņj5&~¸š!Ącyļx•Īâķē +Ä-*›uŨē• xeĩb'*Д߀ P*{2¨:jX°"‚?˙@gö“,^Nv|#F Îø~C›7FīS/8{pQœéq–h~]ĸx7 úm‹Õ÷` XáēˆbĮCų/’T~Ö;GFd(áã*qĻüLx–mÛtHz2–Å \Ņ•HĶĮ<Ûwd`{GKéã==á@ ų-R‘t‚â†*mˆĢĶ…Œŋœ"(ÜķGôÔElEžÁžá—$āȗēëp ‘ƒéņ3‚Hž€įÔĖÆ#ec˙P÷ų„cŽgW X0‹…čęo‡F„ŋ+ÅA{¯Í(›ú†-LE E,=ėlF,lKddWÂęfG#ėZ6íø ņDJŧ Š˜‡tߑaŨŊAx7ˆ Ã†ėˆ€hKū†J€wFŠ1wu ˝ŠЍĐˆ{Š ŽëË#‘ĢëC"2.^LčB_žĐ`ÎWęÂĒjūŸâ`ÂR¤Î˛BrĨąƒ¤?PK¨LĐ ĻBTT.$˙ĩü^°=˜ Ÿi=,čë vĄĪēōOZė˙õ’Ā…„7Hi´t*Žn‰'‚ -düaĄ´ ~ؖPŖÂ0”(ÆNÛ üŠJÔw¸ÉĩnqĒ u­*NÅAį[ PmōËšxq5MIĀ5W‰bŅâ0÷9æ'Ã[ëąXĐ73v† .'?YŪÃĀķĄ[&œāë yT„2‘ũŠlŨķD~Ŋ‰8G'ÄUõD@x $ķ”vžĨeÛā ?ŅÔųLgĪŲ?y”=~$t‘¸8œ0¨G" Ōk%´ãđ˛!ᲡŒ(wŪŋĢ`Š~Ē!ËҐ‚E‡3ž) ØAÛĀ÷Œ:W˜|AĄ™ØĒŅV ¤Œę›hļŪ ‘ČÖōåīåĻ ŗ"-4(2}CÆ˙AڋlžhÄ(ƒ÷D@7Čŧč™`ŠF:Ŗp9đ˜{ENäíÁ›˜î?ƒ%đ’ ö¨—Į}Bŋ (Ĩâϰ¨Ô¸&Ž„ã˙…›­”é\ūFšî70€ ›BˇéŪĄŊ3%Đ]ĨeA‹&deŨĘۚļ}¤.°ÂiäMUXöĮŖëģô¸Å ĻčĢ4ņɇŗÂENŽĒŲv…Yc>Īöîi[nˆ%ôĐũ Ą{Gœ8Ԛ!"úãÖÉ}| °k7ī˙/HûgDÛ9ÁãĒŋ#jŠ@ΡHŋũf§H-Rå A4` ˜ˆT<šŠĀSŲ1ËQ¤ËŠĀ6ķzoģyš‡q t"4 ŋ!/˜ yöũ ¯1¤݈á0ĐvˆœJĻQōx­i‹ MKCĶ‚x Č:ŌĀŖ“Ge@Áq•Å-'ÂWĘiņ‰ŠĄí—ü¸IŖ°WĢdĨ˜†åaH^p1ÍcČ ņäí”å^@6īæĖH˛Ēūq]“ūēV̟qaĸE4TÄrōp7Hŋ¨kJRa^€Lv#7˛]šYīԅ*#ŧģ~ĸAJĻGŅLw'‰s X†bßRaNîy0—@<<ë†Ä HhZD˜“Ą (™’zØč۟nČņF’Z-v8Ÿ ‘™$ÎØnÛdēĨjXéĢPŠāÆĸaų…Į_eד7ôŗpčŖ#šņ…ļõÕĢųv#jŋyaco­zōÍác´"hY^´Ŋ˙;$mūfŨ—đYnšĮ7dāØW7Ä9Öĩ"ŧƒ?!š§W„wāã'ET7MĖRæzCN¸Nevö] –ĖũvŲ î:ää¸\–ûfęˆLëíŪaL!×{7´r _Žž\xv‚‰G„c†l°bŊŗĖÎ5'tH†Ųq,Āø”_J° ŲŸ5N:Ѓ FÎdfF^¨#Їēá¸@P QĄ* į‘G]HŒŠ$’*9ÜyVũ™ņĀîŊÉWKqX=uS>AŦûG\l(°C¨ģgĻjĶiq…G Ųõ%.Žm$Š€åûę œ^¯ÃÛ˛Ēç¨Bŧ¯nˆ0ôŧß1ß+\i’øŽ8ˆoiyŦu ŊdT DÛ5õz­5UoíŪôœW‚Ȓ*†ĻŲŋ¯{ĩPƒúīŲ8 '[+Rįã,ŅhÍEE3ĖÄ<Áô`ûĸĸÉa˜ö €eĪÆĪ—öÔ ’7„ĶNĻ‚Ŋ"ōŠh€ĻĒÖ=.hnÎH]N÷°€ē›ú†hcį$Õuĸ{ƒ°ŗ+2čŒŌwdXvnl@f¨ŠmĨߐ]3õtO‡˛ß+‚îߞ@Ņ›H4MË’ËƒĻ īŨĄ…cāŒĖŧœū"2§';y ‚|Ä׿%?Ēt6ĩĄ ū4;ŖQ¤ķ3Ū-Kœ!Vsą Đ:×Ųŧ&fQJĖĨ¨DN— ūŒņügųCįTŲ.áw¨ … –G:ŧĐVûČ$TT„5uFBą){ ģøiæuhőķį$–fÍŌ ‰„%ķŒvžŠŠ§å2ą8<Eb´øzJĢí§„GÅCŅļš§HŸV×#Čâ˝ü˛í)ä,íø>û_œ~CúõęžBK@t•ķ{vۜjΉTéɟؤfÛųĐyWAgÜHŧ)Ę čB?á‰P‹xP4!StK ™ŗNt5÷(”dûzĖwxGŠœ ču>°ŽnŦSrŊÉG[ĩĖĸĶŠ-$!é´ė;9Ee"_XÍ?ܐUįGWMĖßŲâwå†öâšQ„žqĢørđávā7Äl|=Di› ŊÍp›ŋy‹p֊ĢDPŊzLŋüAˇ˜ÁEŖÂļ 2ĐMÜõLˇĮĖ‘[îm5i’ā SĪ`ØĪí)#@ŋ,ĖÎ ĄVŖ”ĮbĖÄd&mĄŗˇj”8ũoyŒ]ÎĖΨĐĸÚKdž!8CĪŒŠ˙•5ą’mƒ:ųæBĀj°!>‹2mØÁFÔį>Qcę™RSĶōÔ2gx~ōŸF¨­ĄGâ0ã‡D —7"EÛČß×zC`Ŋ‡\îũ´ØÅEM3ø!ō„Z/œdĀ 6öD}ōlÁ­e÷Äi^í758xMĖ/]Q#F­T xXÔéĶ-Eé˙;ßdéŖŨ˛2ÄŌŅ=1é§ļ냆aDiúīöČ\üˇÄiĐÄb×/Wíū,ūgß#õ!Ķ2!^["GØŖËĻGÎü`Äņ[ÁŪ3*4ŗáŒšx­_FUŒ°!Z×ۗ†=Ũēfƒmž‡S;üŌ Åŧ!Õ[dƒoH÷ ąo‘ũ7D~@ú7ęÜ.oŖ*Č[d›ÕíĶÉĮ@XávAB†tHüDÆåNŖXBzĄâ-‘‹›#Š:íĀ)\âÆKĮS",ŗFB_s^'X  ŸKų´ĩKa ~ŨžP•ߤüŦĻÂáOúô[*(5ūĄöÔyæ+ˇO9Y‘ČīfĻO‹Gū‰ßLāŖŦ"ėŧnJü“7s<;ui0ãü:FÂŖŽ!ˆsüÉņëN°ô\‹ī't2†G”ũŲ%Ļ“ō™_áĻtu_BڐÛôĐįA?ž%ęrVáL–*įœļĪj įš„,Æ@߀ĀĸčÃS`¸ķč†@ŗĪ)VΑ9huĩeˆ?ĩFW(ÄMA ZÛÅņ„Š ˆÎ+Ũ4,'ßsō”#†žJųÄöŽāÔņfäŧ‘ũĮJiÁõH1Šō6?ÔtfŨ4GHĨHˇ™ W„÷ĢH+úAČNGí-‚ގS„quĖÜrîé† ekü¯ˆ~™°œ"Ō*ÂÜ}GF"]Úŋ!ŨF2´ûĪå‘{ŋ!ŊЖ äƓ`lŨ8ęëIîM¤7?eaȖ_ŪãDSnĻ„§,Ŧ-šÆį1ˇ'ĶCRŽ<á”õqšāyƒĪCaĢiD†Dĸ­mĖp1ė5uāXt¸QN"Ą¸îu‡Įė* ûÛãpJ|z Ž“)X"{ˇíL2îĸĻé‡åø%?†r ËlĮ°Øŗ l)„­Žđļ[!–÷Ģđ%Ȓ se<É*ž-¤<Ņēė+*ķ`DŲ(?3ŠX1@âúžÃ3“"ļŒĘ8UƓ ÄŅ"#“8~€đˆ ˆ˛ÁÔÚŪÎ"Ų—›ŒéĮįjÉc¯9O})E'ĸj>V *ąV†%)e™zjŨ•¨<ęaMĪØ3Їôt '¤îf"-#[JQ˜øēŠé6d—Jķ{á(´ķQžęŅy–Ŗ– É~€e4cĪ_ī˜Ųķ˛jËß-ԐØMŪŖÛRĸ/ņLŪ/ė ˛‡g’÷G…DnUäJĨÚM’ߥ.ėHúŋŲĒnéũ•ōy4Ŋ ÕĮėĶÔŊhjŸ¤0×% k‘Äͨ yäL(Ôäž"IFkG2ŠÉgč ÃĻې Ųŋ"ÉhSfBí3Į×ķ9¤Qŋ$N šHÔ0é#ķh'ą4 ūgnv-5†ĐÉ}`é‘DĸhG$˛ą°IōūŒŦQdgn,›CW rcė Ô5îũ‡č‘´CŽ4O mh"5ŋ,’˜ČŌŖDD ė‚ųĘ3Ō‘Ŧ‘‡‹&üŽÅAMŪčCZĸ%ąŖ¸ģ~îœŗw*ōËCö?;DŽw—‡Ŋŗ9øģ@z6Ԉj¸ĀWߒDÄ‚$Ģ aDÅ—Y dAē7ëŋ\2Ûk-%û‰­b`Å¨Ū*wrpšX2`PkŦČĘĶqĪ‘zī‰NļN¸Ž¤(ųåŪJˇö[Žų{Œl iĄ„[î)ŅŋG1`ü`ø×}Yē ‘¸-zĀęš)éx1(ŋSúĘO‘|ŧ<”rO­ō4Š!éœHĮS:ĨՉĸ2‘ü%ÍzŲU 'Z :5jûÔęDWõ‰t‰ŒŋB’Ģņ,/[.*s¯NŅČ,Ũ? )N.ĸ>øMĢh¤ú” Ÿ’ŽR5<‚YŦ3ŅrrË5Uö[5ģs?Ëۈõ§‰kôã7{OÄ“ ĘėGōqĩˆŊsļjm–¸ŋŠ€`ķ$ŸI˜Ię>J.āĻē Ļņ9ūŒŖĢ—g|qVÂųŧ¨o@P jÜĖnęMQNOųúáÛú˛˙_œėŦũzAŋPŽ? _PƒmŸ­y=ü¸b­¸ ĖmģDîXKáoX+ÖĘū;Ŋy°đˤ%ŖHGõ^›wĖĢIkwCíŠLäž âĖהôÜėH€Ŗē_ĄJŪĮ¨!á<%"ŋƒ¨įQYXIŊ‰ŒåPxA‘F‘ĢÜqå˛ä(ĒŖœÉāR#áÍī´î$2NZâq2xÔô§du$ŊŠ}^-"‘§T&W+ 3ĸ÷ r›nmF’^dH¤ķĩOwK|“HédáKUˆL'ŠQ@*]§3oĮë9kôŒĖ EŊãčŧĶr²QĨīå—ŊķŌ ÷49e^„°ÚŽhgņ¸Ų?¤UÕĐzf“ú^īƒYJ>~‹ā]Mķî)a1 í'ųÎIJūĪí–Ĩ¸%ņ7™^\qĨôNEēmÂ+'zÔzu@˛Xá)¯Cøė_røÛĩ^H$¨_Ė›Ŋú…ÕĒ×Âjé]Á2åx:Ą(Ņô4A­īy”Œq-ŲĪD›Mp?ŧuŲ÷tB˜p|”â• QAfIņ—‡$î^šTīWûû';ī$T†™DWlWΙ|âšîëKSí1ĮkAÖ|ÕŊaž3öžžyJ¨š#áŚjL˛gė>$~'ĩ[‹TAvtHKS"lWí ęĩ‡„z›hCw #ģ&6ČF$ˇšN_ ؖ"ÅLØOĨ>¸R_R¸Ų:%|W 2>F-Ÿ:)Ij‘čëJúŽyËė˙’‹ŠŪ`;žIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇ IDATX…mY=¯ãJvlšc7 ĶZ8‘YŊĄ X¸ĀäeNo¨@› :0ŦuæĀĀû)Û90đūÁ‚ n_ŧ`ÛXšíĒĶŧ3㇄æ%’įŖĒÎĄŠeRö!Mõ\&oŌ=Å&ũ1ÅßĒP,J?bRf*–Ōv˙ŧQ“šUŲĪWĨŊší˙aų‹2Œ+•W—Ī@.õāÔĩ~>ãlÛĨžĢČŅf¤õ§úųļ\ŦÍŋéÃąrĒ}<–Säŋ”R}ü@ôL$íŌ?[ĨôŒ_ÃĄö†HŸļqǜũšėæ×õ;}ÚY"ÆŠ"Uéæ‹úxļc—vƇÛNĘų‹ŌމĻģp6w—Îz×]Ų*<…˛ø%eœŋ)ëngUÆĶEáI‹™‚7Šäj¯GüM+DKŲPfÄ×8(ģ”DâĻãHÄÕ8|QV×)ƒbŦņGT˙~šá:“Â%īŽQÆĢšˆÍHĄwâkĨ;°Å›;TÅsēÃV&œÎ…Ž{Û>Âū ገvQˆÔ…^*|ŽDų´W ˇŽkDFtКŠO¸{<"֟"ŗĒ'ƒO9ų;âīÕį›jÚ¯HĀwŌd1Ic=éoH<âđÛ25S?ī˜A^ËAuËÖ §';´qŸs ä‚įqęÄzCæœ:×ĪqbŪ#ŗĀü 5*9}Î3Üßk¯UŗDtQ&|A€‡ŸT,rm|ōõ‚˙ęÉ&„<2“ŠLũ}iđ ŠūûsBjG5ēŸņhŧ˜Ēg|Ņ9Ŋč ^ĖČ~)Ú)=ŊžČėj=ŠŊ}NŠY •*Ÿ¨ŧNšã¯'|[ETĒQ9\ČŽžŋ3¨ĩŒ4Ή@xĻG=)”ųHAÄĮĒž:<ōDDuķQíŠôDpâ' čŠyÅô uP„íFĩũ˜ˇEēĨ˛ƒRĮ ׎æŽ.‰õÃ̃€”…SĮO%ē@[äg~ayZíį=cpBˆJ$16h</9n`ÆZĀŌAą¨-APņĩŠgæđkFՑ­!&u¨GæŊäŠ9ÖxÅģŽ§ ŖĖč6įO…ßužj‚^v֕ȂîqÉL2*ÃčhÄZãĐ´+‚/Öņ¤kšaE–„ĩ/Ȕ‘vųî;M—‘6~ ZŽķ Aå˛ĩŲūûž9}cÅ7Cw8)îМŧëuđ†' Đ˙D0Ė…bŊųxBU1ķ:¸ŗ$: ą&?W`—ß&‡ęŊi͈j'N‚"2ĨEƒøIīČa MĒ!*ęØ !W%›|Ãŋ5¸ÎM%I?Q@įÉ).Ųøĸ`­é‡›ÁÅéĶ›é|¨;RŽ-|87cŽ–ėEAEtĘŅņC<§'*XēēؚĖ;mü›ôŽĄ@f°@ų ™˙:#táĖ8čI˛€Ĩ‘Õũ,æũ”,8 HųuY 'Ÿm|)–ėā.§ôbPûņĒoĒsnkZwē4oe¸ #Íå(ë´m`HŠųœ…Œ`f¤ü‘\´F'ÂHĐū˙öēâÆ0‚–Đ âČ|‘ø i q“ˆž¨‚ätŖJöĪWd.FwŪę1VĒhŠĄĀcėjׅŨY÷KuRŊ?@<Âė¯Ņ ^ƒ]4čí8mĒvŠ!5[Đ&ΊQp%!#=~’bAŦ‰°Øŋ"RFU€ æF˙Ė7OAîš~•"¤H šzļķöl ĩä4ēpBæPįvdØqF˙ ņ”ŪÜg‡ÂÔ° āægdĄ,ëŪPˆSÍ-–ú÷k­H‚Eü˜öFŌŦxūMņ.Ú`6rĐ_*KÕŧ‰ßņh|Ž6aD_ˆˆ bWāSĄ*DˆE1pâHf˙Ŋ*~”6xēÄRĩŽŌEī÷p>ÎyčmG_mŅ Ą˛ŽÕüŊÛŠ^ėPĀ%Pņė…šĒKę‚ē§ŦŸ ]'9;"Î$%ōŒ˙„y)na úAžƒXy FĒ`ĻŋGę!#EŦlK¤'“ų;Z\åž ŖqoI Ō§ŖŊ÷é}*1č šĩãKFL‘ëmđgTĐUņDÚ~a%J™ +YˆčŠz˜éžPņSÍ4ô; áŌ˙Žô;¨û)ž*Ū[i§dŌÔ(ą¯!kŊüîĸûČŽP>^ĨœîfÖū+Ŧš(‘gø!ϧë¤~gĒm?nÃ,{ k*č–]ĶeĻčfh=ĻfWŖŽwÍާ[658~E⊤#íQ•Ξ—_ËČĐÂę@P€tˆ8ĄŽVt@ãA6Îč—ųd€đŪ0D@Í.ûrtņjāÃ/uú öŋĖŲå@fŨá Fw‘^€:ANS$ūEIíŖâKqB‹ŒŲŽj™!ďZizV#琑đuJ :˙9›Ô+õÂ;VdÃŖ_ö<‡]Ō‡s…:8(ˆC~qÕĨ˜Üu`âĻ.ē°Ųá°¯Ņ¸ōĒ›_WMK‚.z”ú}ÜCœpŧgq;*„3bŖųˇŦ "ĖrŽIŦķ’Ö†˜ˆLDĻ?…˟ȃE ]DÏ ž;qŧ¨š§Œ$ũōĢD>ÃŊõ‘Ŗ:xdö1N|EœŋR&÷V3ģí¤.é}ŒĖœ$€­bĻW™ÅbzË5ë!O$zÖsķß+ûS7pxĻ…į ˙“ “ũ)&Žsšd#ėŠõŅ8įéĀDŖBmBĻ:Ô[įCŽy:Ļžåø Š~rĻ?Ũ4ĘņŒAiO[¨ß‘t8HƒqIÂˆCˆĄëÔß!ÍԊđ×võŖ#Ō}Ctž‘ßAOŅ‚XA`X Įöw[ŨļhÉG÷扉j@9~āŪ8_Ÿĩn#îē});÷kÎfg:Ąj߇—uvĻ3bĖŦV)ûggDËLeZU%Ö&x&O×)'åC.v œĸuV!ŖÁa(€āŋ(˛,ՃZâũy¯ûŠÚǧ‡¨âŽ7đŖ~ˇWí´{Á˜Œ“Æ^ΟĄ[HíŌļ)PŖWŽŌD6Ģōlƒ%ėzą?ŗøeE˛NČ0Ė. ęc~ēn¤Ž‰)ŋ!üááŽĖšŽĩ_B­€PAôŧąÅ}š˜–K b”M mo‹ŨĮƒŦÃPĒZŅ­[§Y<0꒟ėž>φ9s:ĻÎԈ}ŊXHÕ"ƈ u ]€=ōuę1>pĻĀ<7×ōĐp×aV*cN‡å %?–ÄXNŲÍ^÷š%Î!¯æm0/ü'4a€n§MķÄh ôāX\ ōęaE@Õc?#:=bX2Â@.ĀĐēžŅWdĮī`ØZ‘ôD‡Įī.+2â ŖČ“^0ā:w­PūzÖĐI=–ķŽ”^čü|*˛§ā@`:Oˆíã‘ŋ\Yņ4E ‹R;9‡tAö0ĸ§V–2?ø\áŌ Y_%n/šuJų]§+W´įĪRöÜŋ!GeEvD0$ø<„Ížâ 0ŅTģâ1čaĒÜŋU5|ˆ°?NŊ“ÁZD}­xģTRŌĩú1r$ãHÅO6U¤j܌ĨŅÎĶŽEõAd’Č"#+ņģœųKDžŖž!œ1€ŧŖdUeņk¤; %mŲ“Nųą\Ÿ`dž÷įÎëÍĢSŨņ¨ Žģ!a{Ÿ‹đĘڗįëÕģĒŗdŠ%Ė[5„Æ7ÚŖĀ)šŖ@ō‰)Ļ%ĨšĄÂ5\35°LLJZILQĖyOę™9îCnRüLÍÕ܇pŗãÛæŒl¸Íž7S>÷–ņÚ<ߖĶFĢĮŒ1ē G]°č ŋR×@î †Ø>âņáĻ`+°Ž›~E0.ŲwDN)ŒË1ÁW ŗ–‘& @ Lß!§™ŽDÚ^ ã†cv‘įtzĨS… !00A§“áŊÕĪIŊrĮuŠĻ÷ËŠī\ËRs š5•%á*ŒÔĒs‰:ž‘a™Ŋ­.—ũŠLĸÛB'5kHÍÍĪŽ{>ÎÎ!¯™Ŧ3Ž­Z—=l­¤K,į‡ŌØĄ~Æ­ˇ?Ŋƒ]ÔĻ*J°KĄ—Í ÅĀ„ÜŪãn ˇd ´¨đŋLt,Īy{(ČÅģbE ˕ A¯Čņ00˜Rœ˛(ry1RâÄcሊ§ĸ ’˙™˙*ũ,HÖ鈰_‚ D0¤wV3ēSĖũOŪŽ@h{ķî`zÄŨ6]ˇÛzčD[xdÕä*ŒÆ…!‚ÛÅM7ŠØpũáOǑĨԜĒ'އœp>ēžO¨9I¨Zʞ­Ü¤ß§đŖ4„ĘŋAښ‘Ÿ:ū°ō›ėT7z U˜é\^nėFŲęūĶļuãūŒ|ũĪJ…ËIÛxˆ/•-€4m˛ÃßĻQÔ ĸŅڟŌ.ĩ˜ųŌ ¸|5C¤î@< ?Úņ;ߐ2ū†€SŪ㋒÷ ˆC˜;Ø%|Č0Ļ}A]ēæhû–ëŦyŗĩŖo.‚ Ę=LEŨYul(ÆbŪéŊ3ûŖ .¨p”jŪ5Šŧ="2ķSā‰ÂŠÎHfŒR؅Sûėa)­\žë”vãōčĀ÷ :Q:°ĨwđL˜ö\ŦîŽ%'€SÁa8Œ x„ũ3„ē’ķŪ?…vĩ¸ĪÕ"ĩŽ8íĻ\™|Ģ@„ôˆt+Nbîe×Ūz7 ˜S›&Šs-¯8/| CƝVdũņ'ŸÖ×tĀ÷äíã:˜æu|­3nۘ9ÚĨ)ˆSVz¤xŗ¸ˇ°7đØ\Ëđ‘, κЇ‰„ė1ę´ úOĘž!“cö\ō¸€ŽįŠHĘūí{)Äû˙i3‚0AD96@0Ķürœ†ĮÊūēƒÁ„k†l@; /öĄœÚĀUgŽaĘb8>šą›/úäĀ^?ēËÅ^ēĶ,o,߯ÜŸž-VesZË{šõՂPWžÚD 9]’žķ(PĒõ=ځu~ČŽS6LÜęļø˙g.ĪlŊ’}œ8ŋõ"”ōøcë+ĨŪ( ĀMã†PŒ#Ü—Ļ,-/ŗ3CfŲĘĩl”<™z’Ž˜dũƒF͛Rø›ß¤°"â3böDDÚ HV˜ŠKyÆĀw* aEÖ_“f’&ܡô â߁đ6! 2§0h!sč,÷eI˜÷āõˇbdá.¤Ē|ĄŧÆų;ä­GrCN9™qC"nRŊœÍ4LTę‚ŧgnū4VúŠ1aĢIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRČ,ށÁ pHYsb&2tEXtCommentn = 100ö1ˇGIDATX…m™ÍŽIv…oN \ĩ$`ēbüå]-ˆ Ūø1ēß@ŪqA(2'áÎzã1БČE-ûœD-´œzĄO8cΚÉ*I­†*™_’•?įÜ{nPŠŠ]­ļŠÁ–Ølkôûŧ¤fŸí"-ˇLjĢĩEą2ËI\Âf3KqÃSZÜS–ĶŪȘÄLådĮ)ũôĄ?%9x#CŪŊi‡rôķ9?øŅ—“žeiķ­mĪå!¤sž÷_üe–ÛĐK[Ä6 5›rëgp‰"a\‰)÷/¤>„9ž#1$¸!š)"‰û}Ōū–H˜ûå…îKM&˙9ãũJ>ā‹fÜĻ0뚁l|l_HėđŊQš˛š!܍Ÿ'ŧDœëHDĻēķÆÅØn|ecEēŧ•fĒ7"Q€cģu$‚Íw7Ō¤‚c’gķŸ‚'ŗ—¯Vš\lNøĮZ?Ȝä$‹Ë-vÖK-ŽÎ 5á$id9:B¸üúBf\NmqížÄ×K|!—Ú]IV2uÅ׹ÖGR‹‘C6ŸK¨įîōĄ@šš­€'7åPMw|ôãČķŌ`Ÿā.w~Ę8ģîx‚ĒĘÁMK[g'K‹3I6ŪkHžJ‹ŋ‹^¤NŠFÜö˜Oūu\%z‘ äđiĩ:W,žOēēXžtĮû ‡oũBá nÍ\X3Cu¨2˙­Š‹ø°ņx[ˆ¯lĒąr)īņwņ'Ll2  ¸gâ,S9l͔a1%ĩ N=ŸÜ“ ¸€á\~ęķ=y<ēád?ɰėH dČG×Ûå6Lb@Fē'pkņ÷a$â—6I\‡—•@ņ¸đh°™”˜īÕËo#‰Vuũ ‘īHËoģQâÕY E „ C|CXg°M¸ą‰×Ąėü /HsĻė _č ׍yo㘠đsÚØŽĪ{Q]ļ⾓UáS‚Ø#ŪÎøˇåNĀ­Šo‡YŌ ŧą`įÛåä(×5ų€'+A'´Áˆ([°ÆJ\w&’ĪØ ęä΍JúⓊ_LÍ!\dZ$ĩš>×Ųö%w‘žė4Ҋ 2IĘv9ŲĄ˙Tŗ×f=›lŸ^IōÃ'œōđI˙& eĪũPį0ũŠ›{ąUMļ–dkg šN¸ŲáOxÁß,¸eĪüŽBĨΆžņĐ/ÎBŧˆ;Ž´Ø |ĒØ‡šëāD;–…äaœŸ+>†žpÉ}‚vÃûhŗ°(âÅ ŒiíŒ"cč3ĮGųÃ˛w—IŋŊsÎL>}}Š Ęv …ĄŠD9l §JክNŅËŠŋĀû0Ú\¨=/Zp10ĘgȞiÉ˙ ~aû@ëEBŗ@ūąÚ jeėâä |`sî ûZËÜX !v$#*ū -ŧŒŋ>ᙞlQôú)+ÉačäĒ?ģAßÉÎ÷0ˆ4õįĻ~FMGr@7øs‚ĀА›C¤ÛšXŲ¯ŲåÍwä|ũ *ęüŽ•[˜ŪŖ ųĖD?&ÚĢ|GŒŦ–ü–D7Jâ7dŖDŽdũ;č}‡ĢÎ,UCbĮÚāLoLē֌ÔΘ) û­íž ĸŋmc8 c¨âŸ ˙Û=Éę'kpēDGé ´ ÔˎA/`zī"Ŋæ‡čŒĮ 8zaŗmtXF^@ãEimč…NŌ›ëŽzà |™[ÎÎP<œĻķĒŊ˙Č´Tņv/˙‚TŗÆéŽųácÄāZÛrô텊˛ŸËuhגæ_ÜŗÕf y'7–\ŌããFTfŅÆ2ĸ”$īđųŽ’Đ…#{?ɚåP‘ĢŠ5ÄtÜŖ˜gĻ%Ü(LÕy‡õ:Æ#×wōÁi0ŌĘ-3G`[Ôk Œ?ÍĮ)‘âg qė ^Ķ?„ū¤+¨§Šŗ‰ëbÎ\ ûgĻŗTĄsœ°^Ļa_Čp^PņcϘM’÷„+Šf¤÷,f*A<ē5ķ|ÚTĩÞŖšęū+?´cÆÍf%< 4×ΗĸëĪĖ›pÉ.´ĻėũØ/Î~b°č?Ž#Q‰­…/$Ėä!~Xž Ō,7.k?|™Ē¯dūšŦiÄéĐSn\úžđ3ŋ!¸uĄŅo뇠YBČ/$Ėļŧ÷qĖ zÖ+á .wË1ŲÚÄAŖŗē‹PH4 ķŠËÚ@¸Â…D´æ›î'mcÚhõßė°Ņ U4ū4ëėü†¤l÷Lj)˙ĮÔ †@_¸á$'<č:ŌĀâ81!(ؕpXv+9ŗ/ \pi´/X•ÆIJ/œYKšŽt‚f7,W˜”˜_&.ē†uŊX<íuTˇgÆ,x!īDŸ]—}f$C–8ķ} Éw)˜aįpÎS¨×pUe¯ĸ‡+×:ëĶ'z™‰5‡†h˜pūâEsUāŗ2ü–6Y|Ÿš[NĪÔũėqmÉBë^ž"€Sū^5bhž9D‡c˙‰ë'Ôtņ4ƒR‡Qēž‘‘fČĄ•ˆi‰í VІkĒČLęā1?š§NŒĐ@Ü_Ņ-A—\í$}FŽ œīĨĘŪ^oㄉø#ĶS-Cüâ. ũLįŧå֋’–åü ršį‚Î-l TŽô˘č•py¨jĘáj‘ö… „ĸDÖüŖ…>‘Œ_H÷JxCĄë&_מž"CYÉœØŌ6adZ‚_ؙ0K#.eT 4$‰]—J#šCß$ÍH[>ēZôBdíJ~ŧŖAˆ7[tÆ#.+5ĖHđÂė [ļL$ ũ…+§H ûBšĄņėsÃQ}žįRcĮԁšYVBÅ.˙ŧž˜Ŗtíé"ĘCčĪØy^ ũ‘ÚCŠk9e›š2“î\O€4ķģMËgh^IôOÔNŸķs&g Æ ÔÍ‹ę (pÅTÉDņŗú÷Ÿ¸Č-ē>R‘] ÔÍĩNNMú”¸ÄI­ôSĮ „ŪauÁ€+§°sĮū!<ÛšŌ sößĢüįä|ÍH.!ųÄ?&S,[ˆ˙Ä5Յƒû{t¸ĀÉ„É 3/2ß1Üw<ŊBŒf˙!’ô‰‹r”Šŋi¨īÃßŨî[=Ļ…_Z*ŧÕÅÍdß2# ÷Ą9¯ƒB&ájŌךÎË+–[§ëHtúĘÁ+ÁYžĐqyZWAŋ%ë‚Ķoŧaž A=ģäĄXãÕ¸Rņ+ᇈëãG‰ūž!_.m4ûī\T/¨+pĖA‰5>ëÄŦ^čV‚žĀiC–Ã~]=jŽA oãŋ3#Aŗh\RĘĢAÔ4w+™ÆrcQJxnđæ„c )ômN žõS^—\5ÍāJØ,P9QŌÃøá…pŌÃčđÛ°žõ&?xሧRĖŅ/ĩŌá™z$ ’ēpŗ#iûø°ƒärheáĮČ_qúTĒÎäwČ#ęxÄ }ĸލG;ļÔČņ$\LBŽâú@ÃxÕęĸvbLÆ/üõ ˇ0]øEČ“e]-0õWBœa°Uy W[u]ŠĶÕŖRdŽGČĨ{˙ƒQ— ml9>0xĀđÂÉ ĢKæ÷Œ°J:XõB?vĮĖäˆ^Î\1ãã/‘Í1b÷‡öœų+fƒzųËŒŲŒŋ Č ¨°œ1nŲÄhxĄĮ娉ķÂøJ•Ôuu˙•ŧL_ˆ*ū… œ“č2m¸zÁžĖ ’ū•Ŧ҇DTė]Ąâu0/C÷Jâž+LP7—Ą6ž´GdÚ´ĶŧĨ瞯â0Po2bÆŌūuĩHfū —¸œzTĸ+§ú뙊ũ­ÕŸŽid_¸ŒÂa™Y‹úPõ.œē7.6ë˜\˜ÖŠ€‹ųq¯:__˜ũŲÁ9 ם{O@FxÎķƚŠÔ;‡)š•|æ¯I(ēh1+y°ä‘Åq}TW-!šOÛTލA×$üāœņmf]HEvļ:Ķryī`c:láīžˆb\ßąLüėbņSŲģŲ&ʙŠ˙o†Ŧ¨îߨ׈xē Šĩĸpą‰?ÅqøˇˆAõcũ8âOˇÖL'ŒIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit0.comp.tif000066400000000000000000000143221506303110300217300ustar00rootroot00000000000000II*8œB@¤2!ŠtgA$ŅCčd€„ĶLa˜A„A„Â`ƒM4ÂtJšhœ0šjš!hŅ8všt› ĸXĶ­š%4IÃDŨŨ61×ÍĪN:kjŨwMÕĸxŌ´/}7%aĶry[ĻŌmƓ¤#Ētž­[̝ë¤ßũ{÷úßjôë§ũû]m/}Ž~ũ/WûĨގūļ°ŋ[˙ũG^ßÂī_ŋũž8÷ßę?ë­u˙×˙øøøz¯ņĮ˙˙˙{ë˙á˙ú˙˙˙˙“õMĮ˙ī˙˙#_˙˙ũI˙˙–?˙˙˙īú˙˙Ũ&?ūūŋøūŋū˙˙Z˙–˙’ɏ˙ųcâ÷îM˙˙ß˙Ũ_ī˙˙Lz˙OūŋúÚ×WßíīõĶĨÕ÷/äßļ¯Zēŋ¤˙ŪŨm(kĨjëÖ­Õ×WÚ^˙ÛPÅ7M¤ôÚ°Á+ 1ļžÚÚMĨ´ģXū)Š¯Š´ēa¤Ø%bša„ŠŠjša1M1LBcc†e)ĻA„Đ5M8i„Õ…†ƒA Ķ  a„ĶA…pD: čö Á„A9  a‰Û „Õ°„MƒĐiĻ4iūˆ?8iĻŽÜœ0šiĐ{i„ÂP|ž5DĮkZ ģEãFāčŧ¯iú' 'Dí ´F;I×EãWIęŨZ"žÕđũ¤ÚW@˙ļ“Ķi^¯x&˙VŌûŨ+]-&×ŪŽēO%m/öũ/˙÷õŋũ6“úߤûõūž=/øãŋzßßŋŋņüWĮĮkõī×˙ûüQõ˙õũũ˙˙˙˙˙×˙¯˙˙˙Ŋ˙ũ˙õ˙÷ë˙¯Ą÷˙#úī,}ōcäĮŧ˜ūūLz˙¯ËĨ˙Ō}ë˙rCĩûôIßķ>ŋ’Ëw&īŋôĨ×ßû×ũę×ô­×L5Ũ/Ōy˙ßũ]/ęüm7 ¯á]6 ļ ]=Xkí~ûjęÚÆÚļ”m­øí&¨1M­Ķa+ 5kuLSĨiÕ ÖÅ1LSĐb›Pí6•‚`ÂM4 &]4ĶL ÅA„ÅzģA„h0@Ë 4ĶPƒ ˆ¤ ˜L4UYáÁ&ô\4M4`ƒ„h4Âa:6Díĸí„ĶL ĶMŒ&‹ˇiŌģĻŌnäĸPĶDíĸyIš;i6œŲĢiĨiZ¨zmWĻ×A~šM˙ßy+uirVéĩéžļ‰wzVˆą[KIöÕ´ĩz˙ëĻûũ]?{ĨūßúęÚõ­ūŸ÷ãũ/´žëß}üqĮ×ÕúZô÷ņë×˙ã˙÷ãŋû÷õ˙˙C¨ø˙ø˙Ļ?˙˙˙úå÷÷˙ã˙ú˙˙רũŋ­˙˙–?_˙×˙’ßë÷˙˙ûŦ˜˙˙_å˙˙žXũ叒,ũ×üąÚ˙ŋ{īČĮîžļŧ“Õū¯Vŋ­ÉŽëīäĮ˙˙t˙í]nĩÕ´Ŋūž›Ž­uÚą]?{×ë{¯ęŪÚOW¯õbŦ´›IŌëI°‚´ĸ›KjĶi7[tÚL0“kî­_m-†•¤ĶME1Å6bĸšląM1LSTM4ĶM4ÅA„Đa4pa˜Aφš *DBNaY j`ØM&‚2p€š &0™ @Ļaš' :iĻíØM4h;EģDņ ›Eç&>F8p›I´í4NØDŽ;iĨi:Aú  @ū•Ē"ÃDQôé7õtëtŨ5}éŊš‡ ⁠é]ijÚôûŅęëK_Ōo÷õaĨ}­­á×ī :zéĐN•Ĩ{˙ŋûõûVūƒīŋĢ˙×§Ũ_×˙ĢīīŽ;K_ëúëãëę*Lī¯˙Į_Åņ˙× ö?ø˙˙Ž?ø÷˙˙ū˙ūĢ˙˙×Ķ˙˙ųc˙˙˙˙“ôŋ˙˙ūÃũ˙õīëĖ?˙ų!˙˙&?öŋ¯˙|ãåžL|›šoų1ÚÛW¯ūLÁ˙ũŋ_˙ë}÷ Ōŋ[ ũ˙˙ũaĨĨî˙ēĩĩz×­'ĻÖÆûi^ôÚļŦ0“×Ŋ^ß˙ĢĢ]/ŠŠĩ÷^ĨĨ¤ÚÚlbuģiZ ĩol+kav:ôĄSj Wļ 1V“ĩ@ĐiŠi­Ša EBbšZ ¨4   Á1A„ 0ˇƒρ… ÃĢ  i„84A‚`ƒ ‚ƒ4éϚ&;@ĶPš&īM4HpĶEãωŽŅxĐ@Úhģaö‹Æ“ ;D‡hžh ܝ´›ĸW m[]RoëI°‚J Ķí¤ôøA´žēnÕø{pĩŊÖĐ]Zˇ§V×[DyīŌuoéé÷_ëūŨ?ĨĨ÷õ­¯ũĨ{u}ũ{}Žē×úûīĮßīßõéü}}˙üüo_ŋņŪū˙˙×˙üu˙üĮ˙˙˙˙Éãßũų1˙Įīęŋ˙˙˙˙ú˙ü˜˙äĮ˙ũË˙ōc˙ūH˙ü˜˙˙ŋ÷ų1ōcĨēuöī˙叓˙õ÷_Ķú,~˙é{ÉģĢVũ/˙ßzęŪßÖŊjû~ˇļļ°Öû]Ž“ĢöˇX](tč.ēz}ũ„›[úcuá^ę­[í+JęÅ1N“i5iŌm&Â[a&ÂLlS­ÚbŸĻ+ØĻ!4Å1°šm+ „ÔP0šbšhZĻ Ž*í4A‚5ļ8,0ƒ2p„ĩJšdaà h0ˆDN¨A„ &˜ jÃL ĐiĒ ' EŨ8hí:mB xhœ5ĶN“hžj‚Ķ[L&“h˜ô›°ƒD˛&éģI´Gģ´› éĩ‘ŽŌš<WDwK„ŪS˙^ĐAéŌzŨ_÷ēˇ%ŽK+Vŋˇútž¯tŊ˙éÖב_ÚZM÷đŸö˙cũé˙˙ú˙ĩŽ˙Ŋ˙Ũ}ū7˙ū+¯éë˙˙˙ūŋ˙×}˙ŋ˙˙˙˙ë˙ū?˙˙˙øë’Éŋŋųcã˙˙˙˙˙ų1˙˙,ü_˙ü“õûīäĮōCå[D‡ũ}˙ëĢú0˙_˙˙äĮũ˙˙ûō1ûũZ˙ēŨ?¯Ũ_­kîą]_i]m&û¨zš'^Ūúëūŋ]o‡Ltß×TØ^˜÷Úßtà 0ƟH>ûąMí[I´Ŋ†Šž›ė%ĨU­[˜¨Ļ)Ϛi°J6Ōwm&ŦSNĐiˇiŠa6`šl$†M4AÃ ĻŠ 0˜Ļ<ęët=Ûn Ķ ÍĻh&i Âi§M0‰ÃDیīFæšjm&‰ÃEØh´ę‰ãĻĐA´ƒh4°ƒ˜ûŅ´č'D¯¸ZMî“ĸ(īoHņ¨ OWˇŨ7ĩmt›ÛõŅžĶ§]&Ōtž‰wéž×Aę˙䞗M˙÷ Žũ_ēoxAÕčuÖö=_^´ŋ[úŌnŋãú{ãö!ŋÖŋĶ×ũwīõū˙ëī˙˙Į—˙˙ĮīĮ˙ū˙˙zĮ˙˙˙Q˙û0˙˙’˙˙ú_˙×˙˙lą˙˙Ë˙ü˜˙ūX˙š‡ĨɎ˙×ßũ䇯˙˙˙¯,|ūūŋ˙īo–?˙ũ~×ß~XõĩēŋĻŌaĨ× Û].´[˙°ž˙˙ŋo´¯ŊęÕøi6ēęŨ0ÂV“…tŖtĩŋ¯cŠéēՍøĢ„ö“~“ö‚͎W°ŌõūŦŠo´›[TÚēLP`› á´šbšm&**áĻ*ŌhLT&)ĒiŠi¨aMĐ0ļa0Šy„ °š°D€H ba„Âa„@Pà ë§T 4a2AĒa0L0D^MBiŖcMv‰ãM4˜íŖ;ĸíω;D‡i6Š6“zjmš% $KNƒĐn›ŊũŽŅQí]&Ōûíé0×\* WAéŋízŌ‡ŪGŸ¯š;ūũ×V–­Ģũ+ßÖ×H{­Ģ÷ŋ Õ˙QˇŋũÆūŋ˙Õ÷˙Ŋû¯¯ũ[ßŋ˙éu¯˙¯˙ÆĶī˙˙üwõų1÷˙üŋĮûlđŋ˙˙‘˙˙˙˙˙˙ã˙×ũŅ!˙˙˙Ë˙˙˙˙_Ëß˙ԘũūX˙_˙ūLz#˙ˈĮũ˙˙ũUë˙ũĢü˜ų!ß˙˙Ũmuzz†]"‡ĶīēŊ\Νũ…}×ū×Õũ/÷˙î”}^Úąŧ-ē´¯ę÷]'­ĶļŊuø˙ēMî—M˙lŊũ ×ēLS¤ŨCXh'AXϏLSi; +JЈ&(1VĄžÂh7M1M1AŠiϚa1M‚PÂi‘†ƒ ‚h0ƒ  í0ƒ0Ž n‚P0`÷ 02vƒ „4A„Âa4ÂaŲÁ †Â*h=SL Ņš“„Ķ4gsķ‚"ŽĶM4í4]ģĻH”eã …ŧ'Dí§/œŽęšMĒč Öøvr}Iëš}§“ˇMô“¨"ĸ“kû]^]cëi6ļčÅU! ÃĢ÷VŊ]6¯ˇŋ˙Ö¯˙_úŌtē×H?÷ëá^ĮīOë÷éG˙ûīęã˙ž˙ ˙Įũcã˙ũ)cúīũúߏ˙÷˙˙úC˙éx˙˙¯ū+úũ˙˙˙˙˙˙úú˙_|ųc˙ū˙{ūûũ–˙ŌäĮü)˙õûׄGÂ_íËÃųŅ1ķ˙åŋë˙}¯žūHĢūü0—_ũ_˙×[V×§īũ\ÚW§ūôëtØ[ HļŸēudnŋø]~éÖ*Pãb­¯û¯žŨ7VŌ~:MĢtÆá&Ō÷ l+„˜Ļ*„? ŽŌôĩmėT};M1M0Ԑ6)Š ĨöM4L* 4…ĶQēP`ƒ4A‚jƒ* @ÂÚh4㠂 ģ:0ˆ¨`ƒA0aÃBG8 jƒ0L Á  ÁxAšOMi„O'Ņv¸iĐi§ič›ēmÚ%m&đ‰ØjNˆ°ÖHvÎ^SH:ZˇMĶĸpĐAé×ōVĐ@éZMÉe&öęŌuoûĢDWtŖ­ī˙Wû÷_úŧ'õĶĨjÚNŽ–ēëijū“uˇ_ūĮß^û˙}×ūÚ˙[u|¤õî¯÷ũÕüoũüÅ|l˙õ˙Į×˙˙˙û˙˙˙˙˙õ˙÷˙˙˙ü˙˙û˙îžXõ˙äĮūōc˙˙ųīūäĮëķ_˙ũ‰õ^Xųcû_äĮö—]ircũW˙ũŋ‘ĢV˙oûĢ˙ĻM×ZVû Ã_oĩē}÷˙õ}˙ÚÅQN––•ĶjĻęŌ´ąLSļ—Ŋííîˇ_ũ¯éŌnļ_iZN–„ÚąVMC 6°Ŗ´›IŠa‚A„Õ¤ÔMŘLSĶƒ1AŽí0š 4 &a{A…wLŒč(m¤ŌÂ@Ą œ&˜AÆh4Â5†0ƒ†`ƒNƒNnai§é„MÚiσēÉã[“ŠhŸQ(a'—Ž ´ÖNÚ`ˆņí[I ´O=Ö°ŌumˇĶĸVūĩũtÚÚN•Ž“ÂĶ_t ČŨöļ–Ž“­ũ_kr8ö—ÃĐuīûīu×§Ãk{ŪŖuøúīĩŋ§ãéuü˙ũí÷˙ņūˇūē×ũj–üņą˙ī˙˙üo˙˙õ˙Įú˙˙ōĮū˛1˙˙˙ęŋī˙˙˙˙×˙&=x˙_ëũ˙ũ˙ū?_“˙˙˙ú×ß˙ōcú’ũw¯Ē$=_z˙öôÖLß˙˙ûī$;íy!ū•ɏ’˙˙W]i~Žžŋ§KĻéē÷ÛīęÅÕ˙uoéŋõ~>Ÿļ•Öē醯 ´ž›I¨iXJĐVŖuzm'X¯´›[Kl+atĶiZąLSØ$ĮÅ4ÆÂûAĻ)ĐM4 SA„ĶL&˜¨4M šh[A”0&4 & ˜Pe 6ˆ3 @ė@Âf­6U ‚" A„ö4  aŨƒAϟ§Ú "ųč˜îgŸŅš­„Ŧ& ĸyXgŌÂ*”NģDņĢh“´OĸV‰XtŨ=ÖđôƒĶĶĐm'V:i:M­ęôÚWí&ÖŌ~ũnN?ūˆáöžũ÷ũŋ_Û[īŌ˙ŋĨī˙WÚßņôž?ĮĨĨ­˙ũuē_Ģ˙ž6)øNąĩúą]˙˙Ĩ÷ú˙ø˙õūŋ˙˙˙˙ē˙ä‡˙üŋĮëQū˙üą˙ũ˙˙öŋ|˜˙ūL˙˙ûü“Ņ!˙˙ũ#˙˙~ˇ×ūŅ!˙ūˇūōo–˙účąõ÷÷uü˜õũuī$;Ûßëۄ ũ7õ }šŸũĩëÛŨ/Ø¯Ēøa&ũzŨCKí-.^Úž˙õi7ŨXĻÕĩl/ēÛ_i]1N“ú ŊEE6 ZCLBuuīŠ~ĶVwđĮ†Ą¤A0˜§m+A„Å5`ƒA„ėTS Ļi Ķ ­…°ƒę°Á;SAŊ č0Ą* 0ˆĄÛ \MN0M0ƒ0˜L ÂiĶ4ôͤašiĻAĸpö6š &(ŧh”4äáĸyDĄ§/'›ĸũĢĸwäņ¤ôú ´Ú'm&ŌozęšVs¤ûu§MÕũ:ÚēWޟĢK[×]&ûŽŽēŋ}¤Ã[īĶîŋWV×[˙¯˙Ŋr<˙īW˙úUū›˙Û§[XõūŖĩ~û˙˙ũ˙ū?ū8˙]c¯õ÷Ĩū?˙ūŋXøOī˙˙˙˙õ˙˙ūë^ŋü_ú&?˙ä‡ß_÷ûɏū7˙˙úĐ";ä‡˙˙˙˙˙˙õ-ü˜ëūŋwû–?ĩĩũš1ōC˙˙˙^¯–?ģ˙¯Ō}Ú´[é÷X’ŋĸOW¯z˙ZũĨ×ŋé{}Ģßm]&Gí[ŽPúęŌŌũ.ēOVŋ '­*Õĩ~)´›§[a+Ļ(1 ŽŌl+MÖ´´­[KeÍ­Ļ6)Ļ)Šbšb˜Ļ*ĶĐa4Ķ ĻOM4Ô0ƒ ­ Â A„ÂaA„Õ°Ŋ*ĸ=(3Ēa+\(@ &šhÃĶÔá Áp tĶAĸp A†šh4ė&‹ļm:ryFęNĄØDņĸPŅ;ŖcEãT›KDíô›Véš8{ÕĶh&Ō Ģ éēŊũuk¤•î“ui7ŪēēMŅ.~Ŋ]?ĨúõĨČīßkzuooŌoûīm_m+WŽŊ~ēŋŦ?]zŋ˙_ę˙ßô˙_t¯˙ßũī_{ŋ_îˇLüĮÔqüoņ˙õņņü˙ĶĮ˙˙˙˙˙˙˙üw˙÷üą˙˙˙˙˙ü˜˙åú˙˙å˙_‹˙äĮ˙kü˜ūa˙Éį­u{×õrĮ~åø">¯&?˙[_˙ÕÃûÕ˙üŠ?׭ޝēßŋĨŨũ†­Ö—ēá˙ŋ¤ÚOûíøĢVûĢIëKĢIŋė$ÚWZÚbēua‚†Ōomum&*?ûK[jŨE}¤Ũ1V–Âm'IŽĶLSi;‚uŠĻ6аI´š†šaE5Đi„ĶLU¤Ô0ƒAĻŽ‰„A„ õ )ĢÁŸR! ÉÃÜõĶQÎL aha´"œ4XėĐ'EÛAĒjƒ ĻĶAéwO Ŧģh; Ú&î6Úē&9Įt\–4›EķMŊˇ@ÚV‰ķEã^ĐBßSí'IŌtEˇ6“Ģ~–{Iŋ§ũ}ũ7OM×OˇÚ#ŋĨtKž—ēOŨ?Ĩ÷Ú^õ}īū۝ק˙_öŌŋ_û¯õˇĮ˙˙­Âkãūŋ˙˙ú˙Ú~?ū˙ũ˙ã˙ũ÷¯ß˙˙ã˙Ŋ˙ũã˙˙˙˙˙õ˙Ž•dĮ˙˙˙ōcŋūõ˙ŋ˙õÕėŽrĮɏõû“˙˙˙ܘų1üˇÉD‡úōŨ˙ÃAūŋī˙ôŋ˙z°Âīēõuhõŋī÷˙˙ßī°Ōũ.Ŋęę$Ŗ_b­uXîŸouŊŌûOMÕĢiS m/°“ĨkM¤ßŪŖm(ĻŖcmÚM¤Ø$öŽ•…ÔSOM1Ä&ÂLSLSk4aĻĻƒ ϘLVĶQ]σL ĶMh0ƒM L0A4 ÃÔŪu†4Đ4^0L Âa ϘAĻtÔ&ޚ&îŅĸši¨M:% æĮZpƒhØPÚ'ÉÛM;ģtžJáC¤Ü“´›A=]Z>š'zoV“u nŊéĩēÚ%ŽOģjÃĢĶ˙Ģ­×ÃŪôÚ]_ĩĩũ+õn¸WŪÚũ¯…ũ?˙×ë¯]6¯˙˙ãéŋ_˙õëĮ˙Į˙ũ˙˙ã×ø§˙÷˙˙˙üqĮū?’¯˙˙ūH|˜˙×ü˙wú˙Ū˙˙˙˙˙ ˙ū˛c˙˙˙˙˙_ũōcûü˜÷ũ–?ũ}#ˇé˙˙˙ūŋ˙Ë˙¯Ãųnū¯ëí˙ɏõnŸz[ßû /ĩ~û­nļ”4z˙ôũî—õ…}öÁnĩzŊ:XA=7Ŋ6¯V•ĨjÅk´¯é1V”UĢjÆėSõc† öÖ  Å1 Ēi§ė&)†‚l$ SMSAϘL4 ÂiŠ Pi„F´ ÂĒ &!@@,āĘā÷ēÂ(,,n = 239leptonica-1.86.0/prog/recog/digits/digit1.comp.tif000066400000000000000000000102521506303110300217270ustar00rootroot00000000000000II*Ø4ŸCŌ4d!Ä(Кäč $N¨ PL‡Ņ…> KB`0™ Ēf ĄsDBŸ \*u6 aNĻ ­ÁBđ_õÜ0¯PĩįžåƒAÁߌ"o…Ņpå>@Āô Žų ŋwÃ˛ú=IÂ˙˙øũÛūīŌá˙˙˙ū˙ë˙˙˙ī˙˙ëŋ˙˙ŋ_˙˙ķÁöēû˙˙˙ūŋũ˙˙˙ũ˙˙˙ũ~ŋ˙û÷˙×˙˙˙ũđŋ[˙˙đ˙˙ˇ˙˙{÷¯õ×OÕ…˙ŪļpĩÁM>ũÄ0AĻ…§a„DFWL; D3š šČ Úũ‹B(‚†MDČ!Ģ.ŗ{5L„šņvpC&|x(Pœ0 ¸Z@ §ƒ Žœ"į‚‚°Akø%øLĖ9@`Dõ_s€áŦB‡ Ŗ@ āų vä8ß냸wÚÉĩũ_r@öŋãš$á{¯ Ÿ˙Įō@O˙ūûģđ‰˙˙˙ú û×˙õ}˙¯Žŋ˙˙˙Ã¯˙õ˙_˙˙˙á_˙¯˙˙˙˙˙ũ˙Ģ˙˙ęī˙˙ũīū˙īë˙õ˙Ũ¯×˙¯ú˙úũ˙ũúÖÂĐz}⁄gÁŠi j™Ā!WO č†  aÁ q ĮΆˆãČgC# ü†aႠ2xĐ3 ŒÁYviė#¯įÆu""Á ƒ!ˆ& Q„ô!@ŗUB`¨Hgé˜8&L&| ā  ļ#‚&l0x0|)āu ĪüP>Ąwįúä49üíy@Žxy˜_uä]ܐūīžũɇŋ}ÁÁŨÁũŋīëŋƒ˙˙_÷˙īû˙˙ŋ˙˙×˙˙˙˙úëũ˙¯˙đŊ˙˙˙õ˙˙˙˙ŋĨ˙ëūÂ˙˙˙˙ģ˙˙˙_˙˙đ˙×˙˙ūŋ˙÷˙_A˙ūŊ˙°Ÿ˙āŽ85õ´ôŅ NŸLđk„ Čö§„ Áv^.Pƒō8g&pôô" Čá¯üCˆ„Â0ŋÂÍL¸Čkg=NE9Äc!Á—YiËĐķ!ĸ…-DAĪ$<(L Ę <¸r@‡†Ë‚ā ž|øxÁ[pĒ-Bšā ˙đá/ä‡ŋúģšÔxh?‡xr@ŋdâĮ‡a`ūëŋ‡pí˙˙kú¯˙_ũ,#÷˙˙ūŽ˙ũü/ĨŌž˙˙˙Â˙_˙ûĨŽ‚˙˙áßüę˙˙˙û×˙ëũ˙˙K¯˙ũú˙ū˙ī­˙ëëīëũw_˙­ë{˙˙˙°ŋ˙…˙^ƒ ˙ÕOî˙ī x aO éσ3Ą Lā.ƒ2ā˜CD3Žú„č†| $ Áđƒ$ xe #°܉pdh“„:ˆąˆ Q.ÍqԍD QeäũB‚ Cā!đ]B Bœ3‡N„̓ đ…B“‚(L†P–Ģ^\ø`.ë.;‚ģī¨Sá AUÃpyq3ĸĮîė‚~|~P&.C‘ƒ˙!éūß' Ŋß˙ß×˙˙õũõ˙˙ũ˙ūŋũ}kúÂ^īũŽŋ˙ū˙÷˙˙˙˙Ŋ˙á>ŊëøKŨ˙ũûūŋūĩpũ˙˙ú˙˙K˙˙­Ã×ūŋõ×˙Ŋ÷÷×Ãūŋ[ī¯iūš÷믰A§gƒÁ…UAϘ^C0ƒBАö f: Øk$Ô4Ā… čA đũ‘nÂl:˛°q˜!‹š ‚š PdR0‘ČRēԕeâĒ ā@§s€¸Lđ8*„ĪŸ&LXÁU0U°Ļaūp0'€ŽĄ/UĐhjŨYĮŌŽÂü‚'ėCēä|‚˙\āG )Ŗ‡“@ÁiÁØBûÂrpŸåúņŪڇá~ūŋ˙Ŧ_˙˙˙ë˙˙ŋÕõ˙˙˙_˙˙˙×˙˙ũŋ˙˙žŋø_˙õ˙˙¯˙˙˙ūĩ˙˙˙û˙˙ũ˙ôŋū˙˙ūŋ§˙×˙øa;˙úũpŸßũ†˙é¨ ×>Gėđ&ĄŖUĶ „´/ú› ë‚ Db"āK. ¨P†Î8qpÖ†xČgHhŗÁ,ĸ 9ōz¨‰ÆC#¤‘ņJtGAH4 pUP˜ Ī„˛āáA5P˜^G¨)€` qŌ„ÁU;Ģ@ĄT!!œxP )Ā\/đUä3¸N›Ēš^|‰Ÿ gà Ķ}ŨkųđM {ģā˙Ę>˙ ņ$ AÃũũđ\wÁ˙‘‚žūžģ˙wä"?ī˙ŋ˙˙˙ũzá”˙˙˙˙îŋ˙˙§˙ũ˙ë˙˙˙^ŋ˙ę˙˙ŋ˙˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙ũ˙˙Ã˙Oũ|/õđAú~ēķ0cAč4uAۃ9„AáBũ˜, aÄ0C„#×ôá‚!ĸr†qÂđ„ađ°Mä09܂õ0žB †ƒņ9cĄŒ…Đ‹¨FŦ*æb„A4'Y*#* M30uÂ`ƒ.Ļ`āĄOu áB…OW ˜ÁWTÜBįƒLĐOáS H(T‘ū×TŸ 7¯ûáôN*Ž7 Zīƒ” ××j>C |.î¨_|ī˙˙õØ]/ÖĨ_ŋŋũŪ¸ëøĶūŸ˙ƒ˙˙_˙¯ë×˙ū×YīÂūūŋõ˙˙ūÁW­}ũĮķ>˙ūŋ÷Đ˙˙¯õí˙¯˙¯k˙…˙˙_Â˙˙˙˙Âũ§éÚŪÚáŋ÷ú ęž?ū2:ŧ Ō„"A <&ēņ B (A‘Ã8@ėđ.†ĸ$4@) Ũ›Đe % 5Áx Ð!íK‡:Á‰ô$$FĄCD‚:™ÔČq.0…3 ø=Ļf …> ž ¸' ā̤(*› &ũāŊ”&ÉÁĸôxAuPiŲâ ãį…r@É’•ũĘS‚Ũ˙|Aé§úûôHußū˙ūũ˙˙‡ÂũėŦŋŋ˙Dßū/īúõK˙ũ˙_˙˙ú˙˙˙ū?˙˙˙˙¯˙ũ˙˙×]˙úī˙˙˙õū˙ŋî˙ũ˙˙§õ˙ī˙˙˙˙˙^õ×ęĢ˙˙÷ô˙´˙ĶĪë§A‡úa Ϙ@îАJB!‡BĪ3`ØGĖ€ƒ0˜< âAqÄG~×!ĨŒ¸,‘Á‚ᥐļ Ϝ0¤ėœ!O(#¨Á•VJ˛ę/Rc˜¨Ēđ9 @PĄ3`†Âe„Á3€Ĩɨ> ÂfaALÁ…<ø(PPŽ*Au (u–?˙‡NũŨÄ9ԂgÅáÁđūP/…ĸÃ˙páũũ}˙ģ˙˙{˙Ūŋ˙˙ũüŧ˙˙˙ü˙í˙˙_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯×˙˙˙˙˙˙˙˙˙ũ÷û×˙˙˙˙ë˙˙˙÷˙˙ú˙÷ôŸŊ4˙˙ÂaÕS†~v™ĀƯœ D1„‚8°ƒ *!Ŗ§!°„HaÄ`5ČāDxw;ĐöeÁƒŲ8ČáŖ§ÔA!(3Ą†`0H#Ģ5˛a‘Œ)ˆdj™ (&ĻÃJ&|čGƒaY&‡™„>f˜'‚¨ZXPĄÂØUu^áAIÄFŋ¸(9˜CĀáxy!įAģÛáß áä1C‡' žH|ĄAVßš Gë$ ūũ~ī˙ũÃ˙wū˙ķ ôĢ˙ū˙˙˙ũ˙˙˙ë˙ŋ÷˙W×˙˙ũë˙á~ŋ˙ûá˙˙˙˙ū˙˙˙ū˙˙˙ũ˙ëūģ˙˙˙˙ô˙˙ßë[÷˙~˙Ēk§˙5ČāŊųāa§ērj?ƒU3á‚8Z ú§äp\'Ą‚ 4ė'„ (ĸ" ŽČáG\4ljĐ2OfĒ úG įZfGAš`ˆl†)¨É ‹ŠeTORõ'Ą.& á31 ØAĻ|Ė& P gÉÄLаt-0ępø0S€Ąaû†GžWÎ`áÃĮ˙…ÃũÜ;¸(9@œÃúŧ†qĪ'H?î/ũĄ}ßĖ’”˙ä.Ÿũß˙ī¯˙îŋīũ˙˙ī˙˙ßŋ˙˙_˙ūģ˙õ˙˙˙_˙˙ú˙˙˙_˙ú˙ī˙˙÷_˙ŋ˙˙ú¯ūŊuũīž˙˙˙@˙ŋī˙}ú¯˙¯L/÷¯Žŋ Ãĩ„žšgÁ鄁>A80D3¸fÁ…=4îhŒ … Â ĶƒÎā⁗” ‚ᇞdš)įÅ‘ g Ų‘@æÃ†GXGR‰áN¤ufŖ dĢfŧÖÎĨÁ0LĐ8&  ˜ aA3áĶN  §Á… f>BŸáO¨\&(7™‚gÁ×ū āēĶĢ˙Ü;žN%áÜ _‡Ė?ŧˇžCr@ß| &/īÅīĶŋ˙Õúü=õ˙˙˙û˙˙˙˙˙¯˙_˙˙˙˙_˙˙˙ë˙û˙˙ūŋú˙˙…˙ī˙˙˙ß×˙īūŋ˙˙ū˙×˙×˙˙˙˙~Ÿ¯˙ū͝÷ëTõûÕyÍõ4×젚yđЈ'_ž0 ˆgļ0@Đ4 B ŧ‰#B HáŸGÃ.ÂC5eÁ°ŽÃ!õ.d ˆg™9“‚õ' #Žj#āâPgTD8PšđMfā˜*Ã4=™…Î?#‚as`€ŽĻÁđPÁl%Ԝ>ÂPkƒ0°Öp3‡A‚h)@’ėĐkÁđĶOūøWîūûåøKī×˙˙ŋ˙˙üqī˙˙ūk_ũ˙üú˙˙Ž˙˙˙÷×˙˙ūŋ˙˙˙˙˙˙˙˙ŋõ˙˙˙˙ë˙ßß˙˙˙ß˙˙˙ëŋ˙ß˙ޝī˙˙Ö×˙_ޟa;˙Nūëx aēi˜ ˙ŗ`@M4Đ<1āˆ1īĩ„âČā@L¸k‚z`Ų€Đƒ„/Ķãķa¨†ŗØTRÜ"r<6 GĨd3Đ8§C50™A*™Ŧ¤=EÖpČĩžj`8PA…< &jC Ē .0˜)đ}<( Ü O3d3ÅU '͆ŋîĄBēŸՅ“‹äáCZîđÃwŪH8~hūC-õáßpĸä0™ W ˙ŋīžõīú˙ũw‡Ę˙˙ü ŧ?ü0ŋ ˙˙˙˙˙˙˙_˙đÂūû˙˙˙˙˙˙˙úū˙˙˙Â˙˙˙˙˙˙˙à ÷˙ũūŋūē×ūŸū˙˙kO×Öũn^}Ũၠī‚ķ@ODúēāƒ‡đ@ˆr8h͆~G áqØ@Ũ„D:ˆjQdp×80ČjSüƒa †Hΰˆˆˆˆ‰‚a8S0PX/[æ.đ~˙˙˙˙˙˙˙˙ø|įátí@@,āĸāĪ’š(,,n = 227leptonica-1.86.0/prog/recog/digits/digit2.comp.tif000066400000000000000000000163121506303110300217330ustar00rootroot00000000000000II*ø>!8… PGR:'œB "ž: , „ Đ0ƒ0A„a0‚ ÂM0š 0ƒ ŖMϚ`™đEZ%ÎĶTí&ĶM4Ķ ĸCēN“h– ~ŅŽ‹æģr1Ú­§ @únžšz:‹æˆáŦŸĶÛÔwNôÃũۃÁkAĩ§÷ĶWĶČûûáäų¤ōyKŌ&8j0õ#ícÂvē˙ûŨ0…ëycņÜqč8÷K[üq߯_­}}.Ŗę—AV)4¨˜ũk¯ú­0‚á¤ĢT’ÂTēÂCIJ•(I* H%I$„%XI$Š*ŌĒP‚IzAUH%ĨI´ARI%J’IPJm$•RH ’A$I%I´ŠRSh *ĨĒ8ĄRK„R %¤ *T0–ŠV‰ŌA$°•&’ $ĩItIBI* ‰KH$´Ē–ˆz‘Â$’Š:#ĨU¯T“SíU IUPÕ0¨bHi!Ŧac’¤ œ45S0ĘUB†šĻ]¤¨kņTâ+¯¤‡õKëŲC”åPå?АÎ:`:Ít"#ŧ¤3ē?‚!ŽĻ” 뚆CIÄ'# Ļ¨8‚AčKB/  ")Č$Úa"ƒL  h:Ļa5Âh›†ÕƒAŖcĸPĶTĶ´áš ĶM5 C ƒvš%îŅ>ÚMϚ&å=Í4jAûĸqNžgĶZ%yhtžK:wôũ;NĶĩtßĢĢõô_÷:}Å7Qtâ˙§i˙ôūHp+Dcū˙÷ƒëũŽņŋ˙ë˙Ú¯ŽôļŊWĒßRh$××W˙Ö´ŠGé,Bč%TĒ–Ō¨I Â] ÕRIV„’Ō iE ¸$’UA ´ŌZUĨ„´¨ ’I/¤ IUa%¤ŠTôĄH$’H  Č-(T­$ $Š?Ō %Ŗ $‚P‚T’@I%VH%ŌtĄ%†Ē‚Ia ĢHOP¨-$* $„BSđé'Hi* %ĒFšI" ZCUZI2⤐HžęOŧ*æ Á$A‹Ą¨,tĐŠĐgĨCCÕW(×3ŌD3ŽÕ J*Õ  |RÄĄÖŊ­*Đ9íS @öČg} ĸhÄdtSēÃ?ÍS=2Ng  !Aõđâx@`˜”DĖQ62@°ƒ ‚ ‰@Á4 `ƒ ĸ ėø%4MÚh˜ė iĻĻša=:pƒh0iŖMČŖ‡iŪ‰>oÒpúN67÷ŗLHíÁM§=4ûÕš,¤đŸLCtÅ>ŋ†ō7|BcŊåæGvLUkõú›ļümĶãôųoū5á[ø?¯ŋ°ģáß ¯åŽô_GÂÚĮtúĒŊ˙ûUõ¨ázĐItĶúQTšDۈĮ_û¤5Ú J5í$‚UKH}•$! ĩ¤’I-pTĐI$ĄpH$°´¨ ‚ A%JK¤ž’I$:-RH$‚'U$‚I"ęI*é FkJ‘¤” ‚Aj’A$ ÂicAĒ*I=ĨH$’KPŠ&‚H$‚$$“I%@’ItĒ—fDŒ-a}R ’XTĒ_]i¯J öZK¨H,GĐ3c šĒ‚‚î”ûX28]t449>5SúP ¨rãŽ#U‹Đų ãŲž„D†°é+˙ ĀūCXrãÉō˙dvƒ˛p˜[ “;AŌ! tČbá™G¨2-Eę(œd1I3hdä´#Đ"@@d@Å„„8p˜ a „ 4A‚ 0A„O &ši Â8ė Â6hģ 0ƒM:ĸVĶDí§a#Į3ƒIģIÂziŅš¤Ú¤Dã'šm-&Õ&Ņ(Ëæ‹íÔ7N‰āŪ:DIģŊŅĩ¸AāƒÂn_{ü ņOúņ÷A÷Ļ6Į ŪõŌzû‹ÔxĶŊ>÷ęéëo¸ß¯÷Ԇ!rÃzKéĮûã&>ž¤‡ū˛C¯ūÕ’Vž5uړŅ]T4Ŗí*]:#@CĒK_¤†ļ‚†^‚UJŧ$ Ą$šA i*ô’\ ‚I†’TI’Â]$_֐A%ĨĐI ’AAIR*AR ‚IR8Ē’ ‚I ’T’‚@’@‚h$ĒT’J´æ‚Ai ‚K AiBT*PH%I$‘Ļ‚ĐF‰BDú ’J–•."‡U(K¨J’ •-TŽD´¸M~•5T’ V•8֖°¸A,)3Žj‘¤´4@‡JĐõB,&fĶ •uäˆ=b ×_Y7]$ą @õ|Ė=B…^Č>C8ūŒķė‡:Df„0ŽĸŸ|ëԆ{-Âͅbƒ)Ț“  )ҐÄE “Å>9 Ķ4Lœ("ƒ  `ˆTH`ƒĻ8`š 0ƒNnz`ƒ ωcL"áÃNO/Ũ › š SŨ:ŅĄĸskAēmįV‰öHv‰õ4ę“Å=ōNöŌŊÕũ xMČą\¸üŽ˙O~Å}¤õŽ‰Î¸Aáą°¸tbö?ö÷ŽJ1í*ø.îāâ—˙ĐAīĸ1˙ģ×w ~îúãîŋ$:äĮûQ|=¯^¸axĢZļđČĮ×ß CIPĸC˙ÕĨt’¤T”/Ķ[Uø˙J$’QÅFIŌA*AT* ‚TI*Ą %ĒKõH$–Ą-i Š$‚I• ’JJ´•%H$’Ai% ´ŠHƒI Œt#4‚IO$Š$oIPI…I$­H5IT‚ŠĘ´Š-‚3ę „gú KUC ŋ„–ĻzZ$Ģ….*Gô’ĐÕ%A¤Q‚­*J‘ĻT´?I-UW^48ŌĐŌ]UlĐÕPŽ=U%ÔŠ†…¯áxĶ#ƒD~¨t‡Č= -zč%Ž@×'5ƒ/2V!¯ &E𠉋‘øa5R;SȈ C@…h @F‚  O(…8a4ÂiϚ -Ã@čiĻM;M0šĻ‚ֈ°/š7žNiĸ1Úw§ ŨĐ'KIĶH“ņ Õē.ŨĒM„JÃßm+Zt¯n^: B'2@Ixū[¸“ēQģLPzjÃÂßël]¯jļĄ5‹ņŋōCē}×ūøũĨŌNž8â:MPi/JŠ~t‘ ū!tŊiKøI Ą„’J$’UˆH5 –Ą¨T‚ĒÂA,B Št´”¤´ĢGJ•I-$KA ÂI$*I-$’A$(T’H(IPJ’PI Œđ°ŌAčö”#ÚJ’AA’K‚ĐIhPĒ ĪARJ‚A$Z3ŌP–ĄP-P4–•*¤´ĻĒŠh0TŊT*™É$Š$ž…ƆĶ#„DJĄJ4@ˆ™´(!ëĒšĄH†wĄũRëĒĪŨzÎ8¨ t’‹]V|CC—ÚjC;ŨĻFá;TFX“ÅÁy&EĄ¸ūCē5pSÁ” č0Á‡4œ(™˛_PŔŸC0š &˜ Á†4 |& ú#ĸā=m˜M†+{MÍ4.mDĄĢNi¤új“h“úm&ũ‚ ßM <ŋhŠ;§ü_Ø@é÷D$Q8iI⃭¤ßĐzøq%==ëzxOūÍ<Oßc˙ųÅÁ4/ņ˙Tė‹ž5] Ø¯’Á# ĸCū5ęēū×[ā×ׂ#ßL*ë /éS ô>ŠR␄¸VŋŌH%ŌTK¤i! JēIRëŌCH$Ši$I.’ô–AĢꖒI$–‚IŠ Š$ôP‚I I¤ų%6#5–”#øI*A$–‚éQš I:ĪH%]š¤maBtT’Ĩu ( Š!„Ŧô’é$´‚’^XÁA $— I}LäÎŦW4ŠuLŅŽ ‘BU]VA‹čFĩ ÁPÁĐá›$8QcPCUЏĐÖŌ]Đ: ÅDkđ´uyǐÎ>C\tôÉÍzjZō:ä3ލC\đ΂€…¨B@¤J"8Á‚$ čDšą:ĐAϚa(h00Ķ A2)„Ņ!ÚiϘA¨6‹Æ˜TĐ4đĶ7 åģM0“ƒhžphô։ŪJ5iϐu봃iáĩ´ƒh Ũ?iäĮĸYÚë_N~Â☏‘hŋÂ÷ˇ‡øŊ8đƒđîá?ÅáĀÃGīũĮûË÷ū­¸÷\Ŋ÷­F?¯ų!×^ŪˆŖø_ étMøīũĢiõŽ; ­u_#}%Đ0¤ĮXa%âĢŌ‚T“^øīB¸KĒé(iD$¤M BÂU„H$5II!č*J°T´ *ÂI ’ŌKH$I*I$’J%T’H0’S‰i$‚¤‚J’A4ŌÂiA&‚I$’I•$’ŌD‡J‘ítš@ ŽhBI* ZJƂT•Ōi]I$¤:UPTZEYžŠ}(=UuŌIkÂ!_ G(I%DG á&Á2@3@€ Â &ƒBÂaMa „ Ϛiϰm5DĮh0¨ŧič•ĩáĸų§A7#†ˆļáŨ¤Ū‰[A<ŧhŊ‹ĮH7‡„ nOŠ>ƒč'Ø zĮ úøëá’WĶĶ]r<}|ŧŪĶO´ûū¯Á;N–|_Õw#Ķũž˙é~ĸēõøx_ī˙&;\w­íuøŽ˙Šû¯éGJēũi/ŌXęĒõ $Ŋĩ¨K T$žL„’HUđĄ$–…!„’A •(KHAuH$KKúJ•$ ´’K(Ii$I$Hä’T’I%I’H*AzI’¤Ē’úAB„q¤’ĒH$J’ H%I K$zIB ‘Í•'H Š$‚P’Y3 Dé$‚^ZJ¤p´’¤ēAi*PŠ%]ŌĐ3ÉBĒ“ęO¨!¤•” CCÁQ tAˆ„Éõ ˛Đ= :CCBŅFˆkŽ>C]Č/C8˙Îä?Īœ$†×!œtÂf@EdM S Ã"=P"p„â ę0eÔ@SA&ÄÁƒ0šh@ â Ŗ0ƒĻ„§„ĶDíĻ’h0¨4čŸ4ÕS4OƒD˛75ą ĒŌmaω{M:LS¤Ũę˛vôÄysņûiņAŅ —n0ߓͧ!q…ũžđđžGŽũ… „OíŽėī~˙ƒųīÛ[ál(/‡´ˇôá÷ė:Ž–ŋ -jäP˙­ĨUkÁŨEАũĒũGņKĄō:>O¤´ĒđÁmt’Õ!Ã/CC¤q­$’XqT $‚AT ĒAa ’J¨* ´J–Ō˙I$’I*IPJ´’IU$•I$ŠpŠB‚I¤• ’A 0ˆŌI#ÚI*H%I$G4J,*Fˆ$@é%II$J—ÖĄ%KJÕ2ōG´•* SLÕQ3•pƒĒĒJĒŠ$’T•cIU$Õ5c*ĄAQ0MLāž‡č ¨28ˆhE¤‡EĄĮH*ÕTŖD3} W÷¤•ĮéBšŽC8ũ‘G ŽC;ūá“ŅuæĸÎį­Pa5SÃâō€…” Č"8Ą‚$ H†t ĘL Â4A„A„@Á‚h4Âa4ĶM4_BiϚ+š'\8v‹úqh&íQw–œ(7FcH>ˆņÂnŅ [DQÚh Ũ<ÖôûÕȝ„ÆčžĸVIÂ÷—ų}§IŌ4.Ú˙é0OON5Å1A×ŪîGãīã~¯Ũi§õ†˙ũČŖ¯ŊžÜkÉÕc˙­į?¨÷´Ą˙ϰÔÒĩ´ã¯ŠI? Õū­(¤—Ž´)7zĨ†”0\jĒ’¯ )Gô) U $Ē•UN—Õh$”$•%h$HXX]°Š$ $ĒŠ¤’I$•$Š $AU$ ’J’ I$Š%¤’ŌI$*„•$•$$I$’ #ú $@•’Tm„ ŠI%ĩA$¸J’ ‚ĪI$Š%UUPä´ŠUŨʈƒĐI$Q \(BÔ*XP¨‚ø4C<žR}%P´4AúĄ(õN‚aRT5 ‹A"šIkka ž„kĒĒä3Ôa×ūÔÎ)Î>ĶGHĄš!5,s=č‡ĀŽŦ… Š3ÄHa Å …@Bİȧ4†ČgA Â * &ƒA Â 4Đg‚šié i„"1Úa5 „áĶM$qUU6ŧh<žĸũĸqĶ—Žé¸AŅŠ#ˆ$•BAPI$$‚H$“@IÂTH-$šG4ŒøT‚§Hĸ h$h$’Š/~H*JŌTdrIB°”5 (Aiúža%ô:j"ŸÔŅĄĻ A™ą¤Nãâ•UBÅĄņĸ,† Q šTAxT5cãLŽ HBĮJˆ?â—!œrôĩ­H*:°UFŽC˜GRdžš s…<)5$xd1’Â$bo:'@…MĐaÁxa įQ0˜L á4ė&šhŋaˆ†aSDá§MQ1ÃTŅ;kۃA ģ휜?Ũģ#Įu%“÷$īŅ>ĸ1čŲIæēAč:|ûIá¤Ũ< nƒ{tümÃŌü:#Í{ü.žģÅí˙§Íū×xõîēūaFū/û_zÜ=Öĸû.ŋŊŊÅ˙ڑŽöąø‡XŌ˙ô´˙Ž‹ōc¯Ú­-éZ¯­ĶaėK´ĢĶJŽ’I{(֐ÕkĒj¤!CôT’¨H$ ZKHIõĨÕ$éRJ‚ ¤’I ’IõA$’ĒIRI$’XŌH$’ZŌI%¤‘åH@‚I$%Hä’G$ $yĸŌA$•ih$ HŅ ’ų=BI@‚ ‚It—H&J6•*TǐRtĒ’J¤ŠA|&‘Ĩ¤~K¤fđ¨j{CH*Z˜ H83‰BŌǍhi&G%CUáŠÚ D PĐ×B?´C5 =%ũĐ:!…×ˆg_˛œŽíu!œz ­­‚ÄCX5 EĻ™:\āB@Άkd2#"@ʐČEcKâ|XL ĖÄđ⁄ &f h3áĶD@t &ƒA„Õ4ÂaPh0˜NšhŸ†ša0ƒDą„NNÕ4Ņ7tF;Dú“ŦŋhŽ<'HĖ­ÛDũ§@ú<:cnk­ĶĸX67Z ĸ7ĶËĘWÛÚč1K ûÉvžÔP7Mņ~6˙ŋĐbē}ގ˙˙$?믂x{­īŋW´ĩ˙÷ĩ#$;TLK›äĮj+˙Ūž>­Vę<ãõõÕUņĒéut‚ hwé×L*†’Ļą ’I'^¸$)t4é$–ऄ% ’I ’ *T …č*J ’PI$ŌH%P‚I*H-$’¤Ą%J’ $A$H ’I$Š$’A$HbA$J’¤ ‚?Ņä’I$ä*I‚ $’@¨$ĐI H%M(0‘éI¨$’JĨĨ„’H,,' i4•#9h’A%PŠ*I_ūŠ-$†’¤ŸUU4($¨zōôO(K i!ø‰ RØJ4ÂÁĄŠ‘Ú¯UãD3ˆ‰ĄĄãZ÷ø } }pĨā"€˛ @ꗆ™+[L•„-ԃŽ! r-„ÔÆÔã•X# ĸ "0Éę„ĐˆÃ!‘@”BP‡ ƒ'ƒ f€‰„˜ˆ0L0ÂDņĸc†a0Dcƒ0Ą0˜D1ÔôčŨ Ãm5EΉ㓀Õ4O)Ļ u ¯ōvîh-y(k °ˇĸ\éģ|:ín›]čž5ŊÉtûŨúP÷IūŖ÷„bh×ĮÃû‡Ķ8W×é?}˙ŪÂí†ÃqëöũũújĄô/§~?%=Į_Šū•Ũũ_ōc䇭W ŋũ/éēm!Ã_ūԛäĮ×TŋũE ‚h*T*Ōę’ĩ^ŖKŌZ BjT)SøJTаĒ Ǥ‚ĒZA*ĐZ¤‚ŌR ” TIĄ,%PA$’IT$ZA: GúŌ„úUT–XKI„Ą –X„H"tü‘Ä‚@Ą-’H!4ŌÍz I| •"„%K H$’5*K='œ’]I|%hz¤N’H&”&+_Bā‚ ’Ē!…64ˆiM$4‰BJˆ/Cų BĄŦF¨Rhzĸ.PøĐ˙ŽąĒČ= ĨîC;ę@ü(RĮ˰MŦ 2^{ÂĻ ĻzŅ L/k¨ž6¨Ôކu˜#SA @F!#ЏB^ „ ̓AŸNœ"a„ tĪ&›i„ƒM0˜A„ÂtÂi§ Ņ<Ē'm4íPiŅwĒÚ Aģ@›TOŪ‰gũĸ8čŽ"ėŠôžéų§Ná=D˜øMđM˙Ú'tâ_=š'ĶÚ}„}§ļ žģ„ž˜vĮĒz˙qt_ úø¸]>?Ŋøâ˙Ŋ$^//R1ũũ§íqúĨ|:itēɎĐĨׯęĐZõĢëŗz¤ļ7Š]I?Ĩ $!zHV’ÂĒM% ĨH$é>•ą RđJ–ē’ h$‚á*¤’I I$Š$–I Ž0* Ą$’¤’ HŽēA$’I$’ ¨÷GDAËIŠ?Â?¤‚T ‚ A&†S°‚I iZW¤’ZõXU –Š%I*R8”’Đũ$ë z ’A!ÔņFˆ0:6)qĐ"œƒ´45P§šĐÕ_BÂJšeï—@Äum*JēĒåę4"Ŋ qūƒhD3žAõo#˛ē„ȐšĻļ’yá :D"âh0A„AĶM4čˆ;—Í98tKšV¨>Ÿm1zZķöę÷ˆ}ûī÷öŋĨ}úīŌ]k i,4¤ŖPĄŠŠ($’IPTŊ#É#ÜKA*IPJ–J‚ŌĶJēŽpŌŽŠEŽ45JĒ„†uĖFUĖĩ C¨€,ūÂūđ˛ē(,,n = 244leptonica-1.86.0/prog/recog/digits/digit3.comp.tif000066400000000000000000000167261506303110300217450ustar00rootroot00000000000000II*>3@恄H) Rp„ƒ$$ H!B#„x 4Á0˜L&˜A‚ ƒ†8ˆ€é:iσMaĻi„ĶÁ…mÉģ Ļ‹†t_4äņÚa8hœ:‡aŽË˙ ŌĩåÛÃiĒĸYAđÅļƒi^?{j̧ū=hŽßŋīēi\ŪŽûã×˙˙R;°“˙Ōvë[JˇéÆŋøÂK ĨĶ͏kü8QëIUi 0‚ŠŠÁ- J$$HRJ„ØUÁ/J&0PĄA$P@‚œ‚§„Âϐ%@§Â(AĐw§ØMšVŸų­ŊÄ捧l;l. á ˛AėOŠHl†Ęš˜Œ -’ 0A ’T—b¨QH5āÔ¤áđIBŦØs@ Ą1 H,aA0P™ @KÁjƒî[ī]4JÆmZ 0Ų@AlÚvÁģļų ‰Æ'C—Ąđō@Ą°Ã!9@Ŋą ļßxr;mƒ†äsØfæÔ;/ąģaŗ ÁÛ.`Ūō;Ė ˙‘Ųņ§ .ũoĻõ‹×Čīû‹ôũ~?¯ņ"œŒą{ū¤‡ī‘ßøôžGŊdĮú˙ũ%’˙\?í~Ũ&ũúūXé‰ŋ‚#õ^Ō¨Zû¤č.ē6×°‚¤ˆæļ•­ēøía(ē “i]CI†”V)°´ÆÅ{”B {´Å0šh1 b&ÕBaA„„#Qƒ4  Â„PÃV iĸ! 3Ą ΈƒĻF„ &h"lø@‚ žŅ-C@ 8A¨L Â,zϚa '„ÉķDc‡i4ÂhÜŅ+yĐĶÖKWgĻ~Ķ|œ5zy<˜vŗ;ĩ|ßņÅī“ŧ ęÚmŽŽÍŒC¯cíīíĻ˙û†/Ry˙õúĮ˙ ˙Aũéuã˙õũWé5ë_Cĩ…~’B!H$ģ ­BU ÕPj Ō„C„Æ‚I„„%˜UA“ŠĄ&$Ō$˜PASIMBi!4g‚Ą‚`´îÛ$f‚râŠ] ķNl Fė0pÃpī:°œ\†[ī” ę1rA’ ¸eMģ‡áƒČomō@Ŗö‡íŋ÷y Kûۗ~_pû—>ūŒvüCŨ?k_Ū“¯#ŋĨū5_×_]Š1ú#i%…ƒCúũ R¤‚ĐG+Y1ÂËÁ|$6kJ‚Ō#š$ęi„DĒa&ĄĩM'ɨb/œņ#Z°ÂHV’ #Ė ĸ´˜¨¤ Pcm(ĒmbĒ` … PƒƒL ÄBĻ+A’Ôâ @AĻ"Â‡A‚‚ aOŒU•œ• ŧ`Ȅ r!ø ažA›H6i„Âa0˜A‚„ 4ũ0‰;A„ÂaB 4ᆉõôJ)¤Ú¤íĮ/­Ōn›ÛW‘ŋ‡/Üכ4éh—l-Ũuūƒøē\ ânƒüŠųs˙îô7üwOŧ<'oė)1øa~ûõŊcé×éßú÷ŽĢŽô48$“]%ûKAVT:J}4‚ÆąÅjA$•zJĄ%*Pŧ† ‚APÁ"p ĄHb¨$N`:‚A5•á‚|0˜( ÂJ z¨/ÚÚt }—ŒgW=°lCÛaļīŧ0üčPÅÛ˛@¤åȆ! ÅûÃļ ‡ÁŨí˛īŊŨžŨÃošëeũä%.äwš~Čæīe踴!ŋoÆņl~ŠõūŊ÷¨Œz˙RcõūH$:˙¯é}zŠ1Õa. Ņ„ŊKtš)5N´ C PDwGkiÍPtëōCˆ†—í& $Å=|0AiEX%¤bKJC8āÁ+LBbšpI‘0Į…l¨¨`ĻHâc Ϙ ÔA1A¨] fŦēÂÁ„@ĘNJ˛SA Đ`§Č3§eúä) BGL3 Î†Ņ!Á„9ƘL0@Ī3„A‚ i‚i‚vāÂiĢ ĶLŪÃL"Pp›“ˆOϚēkMwrpžk¨74÷ĸ˙ryģ—ÛËĖ tGn^ŪēoöŅ}a:ÚN‹í„'ˇūîûë§#ˇ§§Ž—Û÷ûUOŨ'˙xŋũ­Ēū‡ŋë¨ũkûI_Ĩz P!ĮJ‚BOISđ\$4’¤UKKJ’J&$ P‚$“A Hō„ā’p˜S0DĐFTPbHP„‰Á)§"õÚ čh5 &8iöî‡`Ûl@Ã͆ƒƒáŸ8ᝠÔ`Ū†Ã!—:@‚âŨƒ‡l!ŽÛ$ۑĐomˇ{Čķ†Ųíøˇ˛ū]ŨÛũöīÁĪĐl^īūä÷áč{—ú.øø‡õĒŧŽa?M.ų!˙_^×­ õ@ë×ę_Hâé“jŧ˜í])1ŌǐijˆAŌŌ$;HģI ļ•Љy!ڑÚX¤$Ĉ=]/l% û 1A 8I† ! QTÅ1M¤ÅD+&)¨Ļ ŠĢ ĐPČZ&!˜@Å4Đa1MT2zĻz  " Áᒠ2=C ´ØaƒGQƒ2F †TL"€ÁpÂfb&0A„Īˆ˜ áA„MA°˜@ÁŠĻ4tÃiŦœ öš§ríËpĶM:čäŦ4oĩĶžSa:ŽŸníīö‰^Jôč•Į§aw#÷Ã˙đ›úč>8ŧŽôøĨ˙[Õ4pÂtē˙ŋũml¸Ž5BŋÂūŌ¯CCˆ|* ’„ŖŊFĄZĐT@‚ I%  ĸ ēĒ„”$§ ĐAA$‚Ē *i„Ē™˜HjĄ44Õ ĒđšļūŲ vîƒĢ’ 3Į öī’ Ũ†øˇíˇų8MÃÛvŪ ļđpÛ`Øw: 9„ō@ßŋnH Û/CÃw’w}÷‹Ķō9Áäw—ũ˙}ņÜ}¯‘ßôärũoŊ‹ZŽ:á&:˙­tÕ}kĮF#ĨÔˇ…øF%Â#v–‰/¤…]5.a%1ŦHAØ%pII× ęŌ#žá…ZG¤“IĻ*ĮAŠbšB¸ĒІ‚ŠĒ† „ĶĶL( ÂLjPš (e† Á„Âj@ÎL0š˛`Đ0@‰x4:âGޤu"MA 0Ą; ĸ0ÁfaOƒ‚f&B%áĮM4ÂÂaa„ôÛ“°M9+se4ĶH15†‹¸"í§Dúžōpí]>÷ØNĄ†‰FĶŪˇē'zmäy“ú'ī‘ĸ/ž˙ü<6ë߄¨„˙÷}[҅L-/‘l[ÃĨõ¤_#Ž:M_ūõ ˙ZŽÖ— OBŋ ×IHR t´¯œ B UĄ$„ ĨŗD’LR„Ŧœ. h"A`ŠÛB•SēPž2‚KØ*Ú@ŨŨ”ėā^H"@ēķ¨ŽÜ2†u Ũ† ˇ/āŲ œ†3Ąøvoûdí 7žīŨø‡ÛnáŪ=ī˙ß÷/8z‘Ī#žû¯Åū]Ũû‹˙ƒöļ§‘Í)y üŽīDcĩ#Ú¯\}97úđˆō„Ž>¸_õJēI?Ō† ^—&; }Š1Ö 6ļ ”HĮj\Đ"é˰•--Š÷ˆ<%iCIÖ E}CKXĢ †Š SÅ_L¸\S„šžlPi„Ķ@1 a6MvaƒA…A°`˜N‚ Ŧ™Ųi–†0„Ž(&æŖ)ōp ČÆ0ƒ…8a0‚5†h‚0ƒA‚ h: 4MÚh˜íwčģ 0™ũƒMƒN‰ķžÂh#ä‘â@ƒĐ:ŖGtJi„-[ëÜ[[Nl.ĄéžôF=][íõ{ä1oßßÜk[ö|û˙qĢK˙Û˙ÜtD¯ū˙A5֗õ ˇ´¸A°“ͤB°ŋŪFõIÖX5 ƒA&žšH ‡kj‚†8Ф$ ¤ ¤!R„4 ’đ’Âa#0p’HHÍfŗ‚ŨŸ ŸA+HVƒ…´đđīG }ʀdâ§ŨŲpŅ7 ÁÃ5bė7lpÛä á‹bĻĘČg’pÃ“Æ ’oˇƒíí‡l8ä2Į{°ō÷°Ãvßš ˙éļŽō;ũۋīËŽũÆųō9dw§¯ū>8|_Å˙]˙…׋ôF?¯Ĩ/ĸCÖgRcŋü%­QwYøiUmn¤zL~Š%ĨuL"1Ōéa&ŌKJ"ŌęF=PQô›A:VW_ŲtŌ&: jĮ×Ú !h&)ĢI °“—ĢAÎQMX š 8AH1 …"ˁš°š ‹¨^FĻń ( ÁMŠˆY˛@Í\1pFč0p‘Å „°ƒL a  BĐM´x ĶL*a4Mà  h0ši zxiÍí?‰cDą„NÜüĶ[EĮj!đƒO„Ũxy8ˆtOšė'ĸ+äyŅ>­ŨŊēâīöãÚ ôpúū=Ūܐ>°ŋëßūF?úßūÂéĒ–?˙˙Wų ĢĨa(đ‡ƒđÂü?TÂëõŠ…ÖšÅĐŌ ‡Qh,)@PĄ,acZĒĻŠŌIB¤A  šAtú@ƒP¨$ˆcAæ˜%gÂÛL"@ÁUšqWí¸aØ&Ãa†^6ė of`„ŋ{d2˙ ƒgQŗģpl*‘ĪmąÛø>îäāĀm˛įÃmüAŪÛwŋOß.ī˙˙#›‘íŨ?ú#Ū÷˙üē}zôB‚Õõ˙Ú °AúZAĒMF k×ȃ¤Ht°šoTž8ĸ撑ÞĒHxT‚MQrI‡IjŧÛJ› ęÚ^\i‚ZHBb‹Á-rp0J )´˜„ÅD(„ĒāÂPÁÅl Ä Â (TĶLTM2ZāĐa0 Á2N@ÁpĄÍl†fŖ:”&ŨN„C%!SΜ0ƒD)Ã30ĀA Á0ƒƒL3âSL&< Đa4Â7; „éωC´HpҰš m[LÔH:?փĸī@ķO#Į%tK%t[“{§Ãsu Úßt˙MîÂ˙č‘GÕÅßA‡^ģ˙Į˙„ũöü˙‹ŋ]ü~˙_˙ŋ¯Įk W_ŊGöx_ĨT•,*ŊVÖÕ$Ä$†‚˛P…U!ú *ĄT aU!B„ˇ„$¯‚¨L@’a$„‚Q—áM„ “a?U‚Áé`šš†m Û÷`Ü4JæËļđÁļÃāÃÎĻC(VHo:rōÛ(xpÜ6æĶm619 míİōkļÛa´éÛˇŠģéí—}dwī~ä{Â{éëŊ}č}eÔ~ëč?Đ˙DĮč?I`õëũHŖëû“~ :“Ô/ôaI;Eޝ‚I­h+D‡ú[ /TęØIēIŠuŌēŌĩ1Ĩ}“)Š1SØI°RáôĄ‚V "f@Áˆ1aͰšĻša5Âi§ĸø:iĒh”4ĶąäáØMžôG›’Š'|=ĸW˙DË‰sĨŊh‰x@Ũ>Ú%Ôšvôž¤y?ÛūēëžžÛ tļAč==Wßėz¯îô°—‹ ôŸģĩâŋūÕŋ˙ 4ąę’ĻĢĻąÔ„¸Ķ¨ÕF‚TŌÕĮ ’Õt”($!% $A¤IEA'A ’dáĘ @Šá0¤€ˆ0Jā" kA"pŗŅŸ4ĐVŋ‡~A‹am>ÛÚ 7ˇvÛļāŪÎōû/§AÆ Üŧ{’ ę(vT ß!ļí’tšĐxa¸6-˜n÷ļÜŧÛÛûģkˇ~Ä7r÷ū˙—{‘Ū÷!OAīŪGö=zOR=ņūG|C”]ä{ž/×#­}–?ĐôԘúO‹TzōĮõļ—­ĸcí+¯ëîHv‰ŋcōúOčÃDz$í# 'ĸ9ĨjÚR#é/¤— i1Æßi ĐVQMÔSÚV˛âD&)Ϙ¨ĢĶa'j;LBjƒ ĻE1LˆĻ@ÁCA„ Đdƒ „Á2:Ņ? `ƒHs¨ä! Å!‘¨Ņ Na0ƒ „ a2p¨4Á3ÃA ĶMƒGāh< hœ:„Ô(TänŅ7jĒŠ.Eû§ĻH)ąĸûĸ1ߤžnöđÚ§ē†ō<¸Ŋrq Ũ>\ęWĢĮŨCĻëa?ûõũü?ëëūŊáŋÉ÷á~‚ūˇū˙ÂüzA‚MWCĨNĩĩCŽ’‚ „˜KA$‡t…Ō… ¨(Hh*é‚L*…H ĶNÕAÖ Š‚ Ģ šŪ P ŸO‡‰Äö. =›jöų G š 2@°Îƒ˛@ė3`82@íƒøpß<0áŧčCČƒ~ŪØlAģ ļÛww˙Ŋß1˙ ũōī/īí Û.ō<īõĒčîGqéÅŪM] ˙Øî8Ē0ôC/õĩ^ũ$ôž—_á}…T¤čŒzĻĩ0á"CŌ’RÅNJÁX@—¤•u$>ĩ…Čä6AøH8jéX+ Ú^ĸĄ1 ÔU„‹˜IV“Ä&*­5 ¨AĻÄ& ˆM0ƒķ CLŠB"0A„@Ɇ4Dˆ§lO0a!Đ0ƒĻ5ÜŧuBȡūöŸŠũ(U‚IhĐ/ŋ{!‹°y _ŧŽOĶūĢ˙āÖČ8õPđĄ„f ,ūÎūüžÆ(,,n = 242leptonica-1.86.0/prog/recog/digits/digit4.comp.tif000066400000000000000000000140121506303110300217300ustar00rootroot00000000000000II*8!Æŧ§QNȈ靧FļSŗR$ „ŽŠš¨MUl'ĒjŠÂ˙JĒ.ļ¨:… ĄpžĒPŋõUUPŠR­UW]-VęĄ×]Qo×UĒĒĪUZÕT*õTaéa)Ŗj—úPë˙ꖋ0úåE(jĩUK]RŌŌ×]>Õw0õõÕzZ]kõ^gëhét´ēŌ„žŒ:˙Z^––—ékũzZ]xK˙¤–—éa-+DĮĨ×K]lå×KõĨáJôék˙ëõ×]‹úétž—A×BIĨ]ú`ƒUŌ×Kˆk¨T! đŠhDM ‹.t´ĩ°ƒģB"â,Ž ‘Á[ÂņŲ'!D6 AĄĐ9 dØÄķ  5p+ų”*dÆ×č3ŦP%ÉČk5ôt°a…3 û_‡úÉĮßüč_đīú„ëøA ūškô  ‚i‚iOđƒAúü5A¯z­Ú$ AŠ#§‰†”0Õ!#ŖR‚ á#°đ˜MnÂa0ša0ž Tĩ]}5uTë… ĢŽ—ŌõU_]RT’U˙JŊ šÔ_ǝęēõĒ×TŽĢú Bũ}Sõ FIt—ÖXõ× ÎüąáœÕUWI=%¯Ai:&ô—˜xY‡ÖĢĒ×ôŽēôŅqKŌדz pŠh'Ž–––—é/ AučéĨU×_I}az ēĄÂÁ%ęēëĨŽĢdÂõÎõK_V‚Ōëúû‹K˙_úöŽēZ^KKŦž¯â.B<Ža?Uš ã´Ô-éqĄ |DD8ˆ‰ ㈋LŽxˆŧD†xW–ˆ(9đæ‚āA4ĀŦĐnŌhK!2ؠނ끐Æ,čFĀ‚Į †;Đa2pŅ’Y˜#Čbŋ˙k Á[D1ėŲ]ĒŨá;ũÔ„đƒC m-ëÁ é¨[Ŧ a?ģÎ;ö°˙ũhB~Ú5 Ļ (XašĄ i‚5ŗSvÄē‚"Г .ƒPĢa=0ž Ũđǟ…Ô(UŊĒęUW××ëũjž°žēĒëŽĒĢU_ZŌÔ*ũuUÕS_­}U)~ŋü,¸úZHąęŒ?DĮĒ­?]U|ēŽaéakæzŌÖŋK šëúŽ‹ŠTĩZĐēŌŌúũĸcõëËĩŌõ¯,z‡˙ õŅ'֗<}kZ­, ĩÂZ^´ĩë\%Ēéih'Ž–—Kôĩëū´­uUŌũB×^­u×T¸ŖŽŧ*˙Aē\]‚ Ōč.́ϔ:×L'´â44ėŽœDGÄ_ÁÅÄ8ˆˆ‰ VlDDGãÅŠ qō đ¤3ä4P‘8ä4@á’r üœRÍFH¸hÎĨ[$8D‚: "„õŅ v)ĖX]ũuī´á˙]šPƒÂa0Ÿ„øz~ƒ *ū?ũ˙pĶUv 氜†gH5a B]šĒj1#_P¸UN×AĒŽz_MWP¨0¸UŽĢõ˙¯õôÂūĒēõÕdz֗]ĨUUUJ—×_ŦÃÖēõAjĢ\%čÄŧ-B¯Ũ?KZ ĪUôwŽŽ:Ö´ũ*éQšDŪĄÂ3ÕxKEU˜z…KËôšę–—ē,}uŌái.ŠhZ…¯ô´ŋ_]kĨĨü›ë*]k„ēékĨîēZZ^‰žŧ–ŋë]tW]VēZ…˙ĢôŋKĢ]u˙Uˆ1ŌŌôõø#Ōũ/1]Ähˆ:×ŌЏMPīĐ ĩ—EÃZō<C ĄüHŖˆˆˆ4#B"ČāB!G„â2á‚8,”q ŽÍƒApÎ\ˁã×˜Xdāˆ9 ã‘ŋ>=2ry‡"9vfŅpÎX´H!‘T>Æ <Ž BÄø?×â!…ō7ũx5ũo_C÷Ūáí:}>×$L õĶ l Á Ū¨5MéŽŋ…ë×<}ķ¤ü,0ļ™!‰ŗ^PØ2!4$x*Ę.˜M&"mU0AŽ §aPaPp[Ô*ĒáV× ü*ëéz감U_\*ęŋëIRUôŊRĒŽ žĢǝIUuU_ĐZ×ÂúĒ4T&ē4VŗŊRUú×Â&? 4hŅ]tL|ÃÕB-ëéKZZúJŋK t‰ŋëUõŌŌ „ŗZ /EÆ´°—0˙Z׎—úZZZZZū–ŒũRëPô´ĩôĩŌŌę’ëŽ?K ´ í-%­/×­p“č/ŌéjŌŌũRKAj™u˙úZ˙ëA ĐģAĨĄ_˙˙^-S â"Đ?ĶíuА†ļ\$DCˆx†ãūž,ĐeÃnC8ä HHAÄDAĈ?ōĮ’PB,Ž2ã M.:'H)rr¨M=ađƒdčCCųcÍâÁ ä2ä4ž0ē ä‚Ļ˙å÷ë ˙!…ūŠôk‚ŌĄĀuL ûPEB´ƒ´ũũ<.†7 žŅOm5Đ3Úkë@Á˜sޤ† ՂĢÔāĄéí=Né¨ÄŽ5(2iŌE>5ĖNœ§UU_]0MĄ5N*„¨Pē…ũk˙úę(PŊUWU ēú×]WU –ĢõũWá暭WUÕUUuë8˙ÕUuŌҟEP懝ëčŅÕ/éˇĐy‡ĸĮĒ&ųĸ‚EŽŌ҇ÎôēZZZ…H:Z-õŽĩUŽŋŌ˙ĐX]--tĢ]uŌŌéii˙]iaWŽēū– iuĨĨÕĸW­tƒĨׯĐP—­~’×ô´ē ēõŌ Ãô´•oâ8jŸ¤´ŋ­Ĩ‚8ëÂÚuĒĄ -BŽž"#ãԎ‹ Ąé_ät} ;ˆˆrcˆˆhDD8ˆlvGŒĖĀh#‚ņ! {/ŽC8ōr6ÉĮ Ø=¨Á†žpCqp¤ƒßų ĸ‚5>ŋÍGų d1˙Ã.8ƒ ë!ˆĄ¯˙øö˙˙Oũ=?ø ˙§Ļxū˙¯ûõūÖíL‹Uv jp‚AÁ¤„Ú4„ÔáŅC‚ 0špÔ0˜Lꊎē¯ūŸÖ— ĄiU% S]t˙azëKJ ÕBęǎÕRUU¤— k]sÖĢęĄk¯ôĢ0đēĒZÕQcŌ ĒĩĸcčÚU´ačŅĒĨĨĸĮø]$¨*ĸŪžŋ“¸]-U-ūLwZ-č.ē&=Ö}4LŽĄRŌŌ nžŋO…ĨõĨ¤”- ū–—]t¸ƒ~´LzZé~–ēJTŽļēp‚)éi K­.´’KKū Ē*§ū—é$+õĄ˙„qåÄŌŌ×đŠzétâ*â˙Xƒxĩĩˆ˛áq! v…Ą„4ÔČāÕķ@„q—Á_¨ÄŅĸ6  ‚_a{!‚É]„H/d5œ†˛! Ōښ Žu"ņāä‚:’R*ÍGũ}¯ŲvKWõÂū¯ņĶĩęŋ¨„ÂKTéüŸ…PÕ߯OØXu¤@چMĐiŽŠÚ­æƒ~1/‡l×YÅø‘Đd͆&ōŸ@ǐNÂiĒaU4Ķę–ŋŽ}j–’¨U×°ĄWĨZ¯¯…UøK_UPĢŽĩõEŊ]/úAtŊW×­j•­RĒ‚-ëĒŋōüąÜī[ūŋ˙Ē 4—ŌÕzú4gzŖ(X~—_ék Ŧ/Ĩc™ŽˆĮ׎–ŋ¯ôę4ZĐuŅcŌú™éj–ų7iPū pŠpZ]i~ˆŪõŌŌéڇ_ũuŌõ­.ĩ˙^¸ZũŽŊŋKUī˙čCKJDzu­—׍¸j×P…éan ûĐÕ;ĨA!G68ãMb"X‡ņŌÄ=ƒˆˆ°—Čh8.C@â0Č/"˛9^N9 ÍŖ`„å CÎ9!ĄĖęC<ũHqs[$''Úä0—^N'õ"ŋ'û_ƒŽwŽ#0OAü:ūž× ÂĻO×|&Ļ€œh;\'ëę4ũB_éō3ĻL7XFŧę3Ąšķ\B#Ē 0‚ ­'X§gS„ĶMB S ØTđša:…ÕUBkĒá¯ĒZĒ…]jĢú¨]t—ë…UUUIUVēë¯Ē¯­Wôw„ēÂęĢõU ĒĒĒ3ÕSĒëÖĢŖ=$ŊB]Q'¨T´hëZú-úŅ8Ė>ŋ]*U]RŌÖŠi4¯&= KF~—ĨĨĸ8õëĨ-Ž’Ĩ¯ĸâ—õĸ1ôĩUũuŌŌôĩ¯KIi>]-+…Öŋ¯ĨĨ­Ž„4͝˙ũ Ģĸ8Ŧ‰ Ž"ū-B uBëŨUâø‰<,D4$Aņzha5 Į4"8‰Áėƒ@đĶ9,Čkä4•ÉœŽ@‡!Ž?¤CAÁWXxrHh8D ÂtĶī_öēkČc5žu õ4Ė ī˙^A~!ĨUöLp­ūŋázA1 k˙Áđ¨›ÕRū“kÂū˙j°ÁôūŲ¨ĐDC:ĮS5#S‚lHô"!z…UO zĒ 4īŪ’…× /Ŧ.´Ul/ǍZŽŋŽĢúô•ĒžžĄW¯¤ĢūĒēõ K„qáu]WŖ=uEŊÖqúú3ëķA×XI×H4ēĒ^ĩAhąÃK_Ô*…EŽ‘cįŠtŊ.´´•uŌ]i}EŋÂZZ_ÍŦ%ĨŽĢTĩŌŌŌü XK×ôē­}u…×ôŋ]5ĨŽēÕ×KĒJÂk¤/ĨŽ––Št´žá˙ú˙õŨĶAiqčE„ÂAÔ'ŽĢÚô´-uä3Ž!Ä"" Ōâēq"‘Ábâ,„y î$5Į!´åa>X9™ˆØH ä4„9ŦŗŠųŅÖHPgƒ\œgŗ¯ÃāÁl ×á|/‡Ã*Đk˙Ø7x_Å˙øUū'õūÂzaĐgÁ…L?ķāé÷Ū¸pDé•uĒ}Ϝ2‡,BéĢ !“ÔēŽ +—XE˙NÍīų˜ Ōz„Ļ|xi­Ŋ ĶXkØ&ĒͧA“0MįĒ5a˜ o¨&žšę˜'všÖũBÚ§ĻBũU|%ë§ë øUUõëZǝô̤/_ÕWõT•sŊUŅžU˙Zęŋ˙Ž’ëéå_]--uŠŪŒúđž´aĐtŽŊ}zõŽĄt°ū§4LxEĩSzXUĨ|Ī­/JŠ´–ĢAkK¯¯ô­VŋYc×_zKĨĨ­œĩŋ[ũ.ĄũzôĩŌĶ Ö‚ëJÕ'ô´W˙ŋ]jF?Đ]jē˝éitūļ†šˇ]5ˆ‹ÂĮđˆQÜ}ëĶ9ÁÄEƨG üY#‚˧Cí29Å.ō ,§'„4@Ä†Û“`Ž„t,͗"āØ5šƒ4$HņĻ@‡úČgĄũ¯†˛­aš@čC_Zú ÅÄ4$_áũ÷ëôōpčøc¨Z~ž—ŋ÷đƒ Đ>í4ÂCˆÍëM† ÃO “yĒč<9Ž…M4Õ{[ü(O…õÔ(]S Ŋu ¸IUk_Ō˙ŌúKĒÕRU„ē­/õ]WI|.š¯ÕtĄĩZ×ęŧņFĨĒŽ‹–šŖ-áV’õ˙ĒæŽĩŌŅcęÂ_Z.*Œ=W]zZ]~¸HŽkĨ¨K¯KFēŌĐZZ]uĨɏôŽ$ēÂ\Ν˙]i&×H=tšZõ¯­/×AuIij-Wëôēéikĸ í/č*Zđĩ¤´´ē_ĨĨ˙ú†˙ׯ˙ūŋUĄ  ÃĐׯĩ Ž—PœEĻ™¸ˆ‰ũhFˆQÚxˆˆ‰ Š?KˆˆƒØ$"$Ċ>A°rCã¯4>C]ō‹%3úŲ47äX_! āˆc828“`‡SĄkņĸūEąaIëÅÃöj!auëūŧ8"‡†Ŋ~~ü/¨Ní?‚!8A ũh0ú ;¯„ ƒÃšÍ?Oō_víWU^Øh§„$‘NŲ‹†ާ5ÄbĻ}…U Ö BpēaUtÂKk§đĄWUĢP–´ĢŌ׎ĢëUUU %×_ęžē\§ŽĄRĒŽ¨Ã×_õTUŋčŅ_Tđ–ē˙ThŖ_KĶUį×ę.ĩ „aęŒô–Ą~—TƒúT‰Ŋ.ĩŽ´´LzęōãZZëւäŪõëĨGTĩŌŌë­-ÖēZé8]'¯Z]iZ KKK uÂëŦŧŠëK­mp¸ë¯ë„ĩëŒ tŋ^Ŋkëô´ŋ×âëPšĒņ M„ŌÕ8^Šh¯¯`œDDE—Z\GĄa:Đ´ĨP¨Dwū?ˆ`„˛b$4@ÁÁ°Ž֊! rŠžG ƒ6áŽG †ߐĐuÆH¨N3cÚ'Ã6!ã#ŠG˙¸kū0ŗSB|ߓ„~ŋëłģø×Âi˙X˙ė ũƒÔ ˙§§ęƒÍ  I?ĶuöŸė'VŊÁ—X^H˜R7ųIÂ)Ūj„DDDDF … Ąię˙ĒÕUVē˙]Vē˙ÕQ‡Õfz¯õ収‰ÅkH:].wĨÖžĩũ.ŋ„´ĩŌĒ]A:뮗ëKõø:„ũVĶBņ Äâ"#ČkŽA°uĐ9ø—Î:((3Zķ É8†ZsQũ˙§ī ƒæ€áôīĶ\@,ūū/ōú(,,n = 245leptonica-1.86.0/prog/recog/digits/digit5.comp.tif000066400000000000000000000161101506303110300217320ustar00rootroot00000000000000II*v7æƒ^CEį›!ˆ\SŒģ?“™ėā.kg‚’ŧ0Ēo |8Í"ä*ŠíT&x>= 'ĻŊxAŨX]LrcĒ^犜b˙đ† ’ęN¯IkŠë„ÉS(žĢAAfp¨z\$ĢDC›ZqžX¯›W^—˙ČÂ_ŖŠNēwōâ~\š Äĩœ<ĄœÂŗjāč…ņX‡!čø9Äqh‡œ;ÍšáÃyķ‡rĮr]ˆ86O;§ōáÜ?nōáĐnîrPÛë ō}†Đlœ+z ‹Ũü 历ŨÛ6|>ļWIiŊˇ3tąį͇îø†˙˙a}¸†ßxû‡ŊÆßßpŨđÃöīõūۗ—ōę?ûōûūž]d{‹ĩũ?O8ēĒĐN>˙ĪēY ‚_Ö&>Ģ_M ^“hąúôĒ‚õ‘ét‚ëēÔя\$—P°ŧ›Õ¤‹šH-˜úƒ éE’°–×Ŋ +„ ¨W´x?Ĩ‚LV‚ JÅ4ÚME4‚ŊĻ)¯a"ĻB Âa  ›#ŠĶM6„)ši Á& # ‘č3ęĐA–@("fAXCtd'Oœ˜Ã†žĐģ= ėÂφDo6aķgÁpSÍ‚č8ĖÃûãZ¤ÔāauÁu\*믎ē' \$BĄIūO]%ā¤Ē,pS SÖ J¤‚Ē…æŠBa #Š"æ¤ÃɎVĻԊŽž†Ģč{Ĩĩ­ú_Áũû ÆiČ!ßzđ8J`š@ėŽ$"P‡öaH!æ ž„4!Č| ô3w"I`q ­Ã†Ãēî;¸vH ‡%ÎŅ' 6‰įaÜ;ģ—Íš0›áf‚S{ds<-ļN$ŧöÃÃW’įNC&Ÿëtũ[ˇXa8ģŽ8ŋû.žf#âûwš@Ąđl_píūīīáÕōīr9ôbÛ˙0žĐ~Ÿ‘ĪAûøpƒ÷Ö?C×õâôŋ˜_0ų!Õk—]AúUĐŋ˙õ¤ ~MjäĮhá*UéXHē Ô*&8a]a,0´Ŧ0—U‚Uąĸ8é aatŽ#l$ļŽ•E6KâšË‚a1ME$Ä+j Š‚ƒ 5i ĄØMME4ÁE4`”0ˆca0‚A„$á0aRpA„Å0Pˆ1„1`ÄģBVHs ô ú´Č/…ĐØC8&YĄ…S0Ä0\ø$… kÂĮ…bŋĒôēT¸.Ļšĸë­UAUHõP´ đĄ$‰ŽiBĒ“×,…Ē—Qu!Šĩ#BåšD*^ķ ǐIĪ^‡á˙Tšc? ôú!ûONĄßģ>¯ †yģ‘)ƒāyÃ” Ÿ<8pä-ŗ ¸‡pwáŧ3‰Á áďˆÃģDcģlČŪ‹€åãm—áĐ6_žļÁ¸ ođØlCw'ĘĻŲsĶrqË`ŨXm°Û8zÅûn}‡á܆(ˇßn>ßÛqũŋķ{ļG{ÛøWė'†ūGĸüÃō9˙ü?ž/õãČīō;éõ kŸ¯ÖžLw$?Ģē…ÚũmũōC†ēécKËë^Z¨eÁäĮtGõŌH*JéKJ!ZĄ“Ŧ4´´ļ…aĒØ%Ą Bm(¯BŦT*ACJ˜ ÂĻՍϛJ­%P˜ĻE Š  Ė+ $laG¨,0A…A›Pŧ2x2; Ŋf°ÉG‹‚ᐰĖô7e …‚Xƒ6Ô Ī&‡„ãC0ƒ č8føB‚ũzëÚÅëUëǍIWZųõ#’'WUÂŦ*Ĩ…`†dáT‘ I:Î °õĨõ AHÃHÁÕHĄģųĢ *ë˙yƒ‡ōô"#ūäd!Áĸ&h‡›#‹čƒķ/ūˎD˜8;ƒ‡q "âÃn$°‚‰‡ ;`įwwqh…˜vš‘ÄÁØ7ũƒ_;†ģ‹Ķw” ę4ƒ''“ĮháŨ'nÃéÁ‡WMËû}ËĪŗĄH¯Ū:°ûĶ{d0\¸’]ĻūŲÁīŋöF:Číąûâīƒģ ­Įä}÷Į~Į˙ä->^īúå܄?áÚäw§‘ĪČūGōúûĩë^.?âCĐ|Žõž´˙“ÅōcĩIztļ¸^HuĖ=~ģ.Žõ¤+IŌŌJǤĮĒQÚëĒ´F>°^ÂØ$oôĩi*ãëÖĸæĒÄ( ƒ 8VĢ˚ĶOWJŌxa(-¨Ļ*ŌáD'aE]CÔBiϘ&a&%MPjÃ#“L&čÁ‚ ÉV˜Š  @ÂjœOƒ`Äū&͐ŧ^0@ď" úåČbĪBŦ‹ Pâ0"„.A!Ÿ×0" v.j}zk÷…×ę“ j)/J¯_ČŅęĢŽĩ „ʀĒ^ĒOR^•F¨GĄŦ$Ysø*Äkk„5SkXô5Âá~ŋ­xhŊ&9ĩäađ˙jDHc6ˆzrû‘ĐØY =ß ü‡č4ČâČ"]ƒ†ž_ŧįî.rw÷%ÄIcN^=Ã자›M…pۃģÛģ?97z ę[ÉĮŅ|ŲŗÉ=ęœ ¸žņ“†ÚMÂl^›÷ Ÿ đöã°NãĶŨnÍŅpģáÆûņ|oß6{æ×îūÃŽŸ˙šųåßßéôb÷v>/O¯Ëҝ­ä{B¸T!Ɏō;U×ú˙˙&?âõ¸žē"ŨR­">ŋĸ1ércŠ/¤cČîaá‰ų'Šy*ėđ’ûUú O¯NŦRitÅ=E1 XP *M„°]TB¸M}iT4’ˆLU„ÅĄ1ĶH&‰b ˜Ēa Á˜Maa„Čô0˜æŠAx-¨Ą…šĄu“Đžr˜dÂųĘl0ą›Áp΃›ÎĮ„A4 ôũAŖáUWũkĨ×ĮĨŌ‚ĨëųIÕA"đ*Ō.˛‹DĢĨCÉ'CTFžē ¨Rz9“›Dĩ¯Š. īĢYƒ‡ōC—D<Á‘Õ‘†žĶÁßCõ D=; rĐh‡?ŗ ‡Č@đī†aˇCôŊČC‡!O‹ ÃöœAÃNA †&Aõw‘ĘE“îåøl;ģ‡aĐhHLL6čš ¤ÃNÛÛģ“įxvë†ÍŽ\Ørp’í’Ūa…ƒköß§' ‹äôįRë¸qĮvÃˇ†đŪÛļ_{ÜßėCũ˙ČīÁâŊåÖ˙ŋņīōcâåīâīũ.Ž•W×ūō;ę—#’Kt^,~ē&?AĨõà G`’—˛:]"ôąØJēڗ’tH}EE:ĄPŌM*¤ŌÕ&ÂX¨4…Ē´¸á š´ĸļ =^)ŠlĒc`Ē%jÝ bŦ…đšbaS iˆLS BjR"pƒA„&ƒ"„Âa2áH•…DČ/ä1…ā0ˆ`a܆yL„C!l†–0Ž+DíS\ūē„Ô Ķ>aIҞ@ĪúëĩA‚Ō_Ú!ĮūēŠ‚KĐJ’ų84ËNˇęLaz–ę\€˜]U<ž­):¤Ą !EčGĒëđS¸Ē–Ŋ*—Y;Uëà …§ëM$3ū6a|8|;1÷Xĝ7!NB΃BKÚ~Cˆ<åŌ\pė¸ôîCņįÁøzqâ†9ĸ7pîD8j\xw#Ã͆hà ÜÄ=Ü aÍų~äųØ}ģ4 Čī ’—}§Û§†MØ7 ģáqŲčcpø—HmļЃbîŸc‹īÉi‹aō@Ãm]˙Úw÷đî?|Ŋ˙ūū÷åũ?ß}oz‹ī#ŋ˙˟Üq¯˙Ĩ_ōßú¯øHâÕŌ´yĨ¨_ĢT‹ëRC¨aL=}RHā éj¤}(ikĸN)R1’´ŒzV§0‚kĄ õ}­PŖA¤ƒH¸ĐIZA ŌÔA6a ļAR X… %E ›K „Å1A„ÅBƒLB¨&šbĄ‚Úƒ=A˜ Â`™`ƒEad(dFŸäCžg˛n ÖÄægš"pI UƒS`čh(BÎ5< ž3ŅđëĒj¸P‡h0U SĀõ]ú‚Ĩa%ÂŽžƒ ¤ë'Š=s'%Ąu‘ ĄHPÉŽĒ ’Ž‚B‰j ]aL0Õ%^ĩ&FĸÃŨIŖA’ AÖËŠfHēēÜ!釿%Tų˜h‚SN—áĸpˆž¤9ÅđáÚt°âJaÜCOČâˇw!>Û( ģ‡scˆe Ü<—0ŲĐrNĘĸV ÚpĐL;: 7pđ›4áÁØ' y+b ËëƒÉûo ÛzmÅļĶŋMļÜ,<\éÃxŋˇÕģ‹“‰û˙ėÃ÷îBŅū˙ģˇūÃČī„ũ˙܎÷Ëŋ‹Å| ˙]=-?“ō%?Pz˙‰_Ņ1ézWú—J‰K„–Ĩ×ŌúË•x‡EęŦģKô!Ņ}/ô–đKĄV­RŌŅõOĐUAzJŌ/­ĸCĢ `ąLlV“i6“¨II˛âGbĒ ˜¨L&ĄĨÄ'A **­B 0˜A„Ķƒ c0$&ĄC ׆ƒ§A„  …'PA aN˜Ī11G! „Sž/0ŒŅNƒ ‚ m„y‘Áƒ@‘‚€CĀŋaSLđ.œyĀzëü!Ÿ0^]*K᠒_^$OE …$1R Ǟ褃? YęTŠ‚u…Ą@ąY ×'ĸž RušĨ6ŸŦŋÁWūø4W×˙D=&ÉJ” !äžBĸaėڃˆwAûpû1H<ČYƒˆU<`Lāa_ …ž Ÿ õ ÷ĒŽĒ—JAŨ%KÕUURųvR §$œR!įæĢT—!#TIÕIę‘?P¤p aWÖ øC6ĒKT<ÕĄAH¨ôäôu¯Xkđwú˙ä<æ  ûˆÃŊ}áˇ"†Bņ u9{žö› CĐ;ķ!hCøh9čvNģƒ—Œø<8aģ@ķĪ#ČpsÁnŦ K´ášDáÜCm6rqÛaļĘÆģŊ>áÉļŪ•ŒAÁļŋcøm÷$ mˇČų❎íŪáŨüAû}ßvŨŊ÷˙˙h?åīũKk#ŋ_JĢôŋī‹üģôē֖5D‡JēúY)ĨäĮ×õJÕ Š č'JĄzUč ē1ĒF΋{PAÂI1Ų%¨J FˆāA& ExJ‚G$šBŦޏ#°“Q@‚bĄXHHā: $Ô&8T6 @¨0˜„ˆu )„Ͳ-`˜H#YƒŌ ‘E `ĄCņ ö_žda°ƒBš(Cá‚ækGA2rÕ ¸Âlú^8´Cõx/Z\-ø/­„•kKMj–/éĸEÔĢŠ(SĸõOIj(]U- Y-rõ0™ÁĒI ŠB“p_ĨĮ¤äëšĩCø/ū9 5 I8›˜f‹LŊ  ÉÔDF\0ņ#C‡w|ˆ âCäÉpÁƒä<ČZGxpyķ¸@Ûy Kƒ‡%aÃ ā›“Į'Íp鷒†üœ8pOaŧ+A\'ž›nœ7t É;ĻÁˇ‹Ķ‹x7ąMûäķ ¸_ƒaž˙‹}Đ~ŋh68;Čö7$EđãĢoOûũ=Ëûž÷ō˙‡rī{ôõ0ŦŽ˙ú‘ŪęŸßáŋŋ˙ûéü˜˙˙ŌÂËîHzõ…ņü×]zôš!ũIēH.ŠQ†—ô_ZëŽ‚Čæ¸Rũt]¯iiiA‚EõØ% &]‚LR|TŠāšÂüHRiXĻąPĸ ˆMElBp“Ē bžš`ša0˜LPiĻ*L„@%>+†ƒE ĻK@M2h ŋ}žŅō‚Rs!ų2¨h F9Į\&a„ÉÁ4ÔØ.ˆãÃ9¯Ž0ŧ5T¤‡H~.—˙ęJĨVj‚ë ‚Z…UU&HÉũH”ŠĢU˙Š'’Å=TH2͍RĩŌū‰Ô–Ŧy´–züõū˜ÁAց˙÷üû‘Į|߯Č'28K̇dq`ĐhŲķh)É|]Ä0ÚĐw ”!P!á!Ž žMĸ7wd1/náĸųÄŽpäQÁŨ[‚îNËį Ė=Ŋ\&áËį.=7tO-āíM'ūœmŽšéģlžŌnKŨ[ÛN;ŪáŊ¯˛<˙îÂ˙wãž8ŋãëûö;ū¯Ņwø|Ų˙ԎyČ'Čįé˙ëūĩ^DåŅģō;ōõĨîHwzZĒKūƒ¤û].L}ö’X8„ž‘1×aI Ģ„lÕ,-V‰ŽXK]$ÆØH%ĨH0‘rKKZ­: tēj3âĸĸ›§¨0DGŠĀ—Aah0‚ ´ē„Ķ`“g )‘Ž‚`ÂLS´‚ B &Âb˜Ļ˜‚AX„ 0‚a0DBm!„CDtÁC-9Ô “"Œ/RėÔ>^pD ÷x? ˆ%'Ô ŒGÎ4Đf ÎIÆĢU]U ЍęH-Dĩ]UuŠ+ ŌāĄr!Ė9ˆ.ŊR@‡EŒ…&œ)zĄŠiÁdõRëđšĢRô ę})tŅz“ĐPŋëPô/û_ûD)đz?Ųxú—Čōä/‡!ü9 Í!â Maōåeøˆv\đpáļƒ‡åÅšáÄ8‘x8ƒŲđö ËģBģ“Į7ƒļäŨŅ>” œHL0oaĐn^:m^úõ`ØpopđfŸ=éēęŲpĘSvˇ$ ØíėŽÖĶbâ⠃×Û˙„Ũ6-pÛlovßŦ}ŋ}ü?âų˙wČī}˙xy…—ŋËŨûå˙1ÜxAéäuúz˙ēņqôž—\ ĢEß\ą˙¯úEÍeZôÕUjLUĨũ0‚KŖf—ōc˙×Adw×Ō/% *ļ ĩûIUy„”0AU\¸Ha(Ŗf—¤Õi=ZNŊ Ö6ÖÅD&ĸPŠ&Á,a‚LSĨ (L%aP5@Õ6‚b˜Ļ)„Ä(ĒbĻDŦč!”@& „Á4L Âa%XPˆāŒ‚&â ŦŖˆDæČ>aČ/‡9°†—ˆĪ6Æf™° ā`!”ĻŠÃU< ĄÃĐ]Bé'z˙øK_UUøKS'P’Šõ¤LtĩY¤õ&@PĨ§6šUeÖĨø,%ËŠr,$F Š|é~ĩĄKžĒĐõā˙Đ>îŋÁ<‚xrūlä?ä,Č!ß؊:pá­āœ9 `8<¸ų ƒAäQÇ!Î!ˇwqyq îđ@íÜ9 Bw' ĸųÅÚ$ûĶføptà ÷tÜ;„‘ģėO ļl†<đ<[?2ģĐ=8zr†ũė„ô؃`Ũ]8ī^Pü2Xö˙_Žā؅vJ˙mûm>æ× ü\;˙ã‘ß‚‡ūíU>>‘ß—đšwôœ…?īâũÖšõßõũ$ôŖ¤úä‡kĨÖŋ`ĄKęžŋūcDĮj‘ŽHxJŖĄ¯T“IZŌAXŽT#r´ ZIR‚ũ‚V,S@•‚ęƒKAAĸ7‚] `“* ͆OPÁ&ĄE1 † SV „|$lSÔM1Pš (0‰ AH G¨Lh0ƒœƒ Ē69įԃЃŲB!Č{`Ą˛æU ‹Nz4ĖŌaQ xBÔ+ˆ$g ié(†Ģh%õZŽ=pēJģ˙ëĸ(v¤,Â×“ĒŠUjdęKBu8€ēŪ}U`ĄÖŗ'ĸd. ,Úš‡­ĢTBœÉōZ‘ĸŋáúrAŠš…ôĐCÁđp~æÜ…đˆ'ø4„@l‡é[Ådaîķt„˜yÎíw‘Ő“n$x8;†WŪû‹ƒ’†žÉŨ‡J6ŨÛ`œŧpƒrXōxyw† Ö 0üŽØnqËíđÚˇ[ÂaļŪØl7ÂŒWVG7Ãpüœ@ũītÛÖ.˙‡ÃÖë˛cĮŲH÷ž;¸øqweh=?}û˙Ân_ū×˟õŅÄ˙AĮ¯Û—˙MW˙ōøJé*}i˛¸åK ˙­Zá+DcõäĮ­ixKĸ’IPA5ŽŌ#†+¯Dc°–Ō6Â\“ŒŋNŠE5­RĩTŽÅA…pĩ`Ŋ$Ģ`Á*ũXa&ŧS !:_ ĸ¨6“ QMjŠ…MÔB‚a5Å1M0 ÂdMM„'Ēa4„ ÁO7¨ŸR ņ `‘47]ËāĶsDSæļ ‚Yŧ <ˆ&5S­ÃTЃ6fPžUĐûúÕ*Ĩõ]tü*ëÁT):ˆôT×Ô$UaK¨. ĒKä|¤´'¨$O@ŗ'RôUR͍>Ô)uæĶáRPPáUĮ~¯˙§{B!!įú]{1Hzŗ÷ø~ž áÃ˛âŠ}ĸŽA=ČOķ!BøiÛâû`ä)Ûh<Ü;ģO"ŽĐ8pÉÂCÉۃ“°īm÷rø˛w†‰t7'΂ģĻäyeÛ4 ܖ} Ür|&Áē~û á6 Ų tô؆Į­ĢzŊY8A}ŨūŊėXcíX¸>ÂŨëk˙ņ}ė}߯#Ŋō˙—ũņō=˜<šečŋ/h ųs‹‹î/č'¯—üŽõäßĒ˙úRcčŽõââ˙^HUk˙ÚIŦÃ˙ëúÖĢë očē^‘1ÂđŋÉēSūSöÕ•IŽžœ$뮒T•Õ¤ÅZPfĐK XX¨§&ÂHSkˆ#™á°éĻ**ÂLlBh4Å1L(ĢQ@ÄM0˜Ļļ˜UL&­‚ &čƒ „N 4jŽŒ0ƒ. ĸnđˆˆˆˆˆˆÁSœ 뤲7^zž_ŌûíĪ!|<;ŨÛgŒ†13(v˙ŋ˙ū˛;HŽŌĒŨ[Jب…„Ô0M@@,ū@ūm08(,,n = 242leptonica-1.86.0/prog/recog/digits/digit5.orig-25.pa000066400000000000000000000316271506303110300220100ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 25 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2×IDAT(‘=ĪK“q‡Ÿīû~ß- ÉYŗÉ@["ŗ­mR›‘u=ôãá%/‚Btˆū.]ēØ%ĸN— ¨Cš+7{ŗ&f‹m˛5Ú4I÷ãũvxÅĪņįđ|„ĸũåå[oü– ˙æĶū„šĻišÉ ™Lf zW ķx”Vg V€m"AMPmäj ¨ŸÛG(t%Ô% žņŌûŸĸą;.°œŅą›­™-aœ$ Ôņqb¨Üî…CĻK]¯7•6BK•wÍūfiëėéžčĄûCōŨQ.lėāöĨĻG@‚•‚¯ũn+MĨ’n;gHĀ‚û×[2ũ¨JãiãŪE ‹âÔí9?ôî?ŽÁ랰„ktÖD<ë¯{fVÂeō>ū¯ŽCΔčPö }Ũv¸Eũ›Āf —•Y3ĩ¸ņpÚģۛŋí3‘€į×\ CÚn"ŦäųkŠ 5ÎWË`“0°YėR­Ô'Đ9–swũ°ļļR&#qˆ­*Ĩ˛Ī&5`xū¯’ņŦYûPiÕ>&—-šĄO ,ąŗ hĻŠô‹ Vt‡nŒ†;Ą`ovķ'=žnoĀŗ°¯ˆ@qŲ-IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ÂIDAT(‘]ĪĪKĶqĮņį÷ķųė‡ŲœŠ›ƒBˇŲŠ i)#)á!:t0ˆ@čÔ%ˆNũíRET$t0ČēAÖ°š™É SsŋpnßŊ;Črëu|ĀžoKîŪ„Å}~ŽEā?ršĻĩļ”ÖÚBi­MpĘ`ÛJąrāv­Ã1IB|,ę”ÂŧSmV+Į™.đļƒloËŠÜĻ9ā nN–KWh˜eéF3ßŲ\(SJ,¨€×ī0š …ÁûĶķĄ|!8tĸį€ŸÎ´õžkÚžr„.ÎÄĐŠ?B¸›õT9u/{cŋĄĩũ \ŽH>ũ<šđkrd¯Áy°ė8uŨ^}üröõ€ņ÷…‡CC­xŊcĨå¯ ã‹īRM˙ŌB~O.iđ5ôzĒzM5ž@¯ūˇH9•[Î×[VĖģDņdlĮ~X {Ū<úÛS#;1— ¨æôÖŗ)ŠŲĢÉļöˆŠēāétÍžČtE‘  ûīĖŧM‰-,zĮ7,™ÉBGÕ5Øũ­8ˇBį­ĶHqÜ[seI‘'-;t5#‚ˆŦN\ō8´˛Œ;v{ID,HOŧ˙ü§í?ā/C]”g†j>IENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŧIDAT(‘U‘ßKSĮ?÷îpģĘļ\!Ž­[[ÚBæˆQ-‰’ ž„ŪŌ‚ ‡|ގū€)(*ˆŦ‡ Š„BÂ(ŅAŋ“r̆Ëēkå 힎âü>~9ßs>_ŽĄÔë‹kˇ"xķķ–-°0w{8Ûī?¯Ūwē“ US.ÎŊ9âÕ+¯šÖąÂnĀ›‚\pŨå…éc&Hũ‘à ´´ÕąO}SUĄö™đæÆō?ŧHúčĄf@°âÅs=ɉ–?ĨVÄ×ŲĶŲĸŽ‘ ļ„×tAX˜ūņpĮû¤áuîĮüėxíŠ m'ßĒĒĸ…d],;ĸĒ‚ŊöÄļO?)O/mjũ=zöî’Ēæs\VeĄ’8Q¨Õyú8 ¤î ĨÆŧŨŅwP˜œ ô=Š„|”ÚxŧĨ †$núY÷ @GHŽĪ0ŗnšĶ`0ä#ā7âÃs Ū5ŖĐš €ō €ŪLÆÜmÍ<Ėž 0´ ĒĒzk+` |W•ŪjiÔî͟/BđøĀF@_öW~×:XVU5tņÕŊąO.ƖĻÔÁŽCYüU}ņ÷k,ę4„øÔNÉ~=Ã!đIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŗIDAT(‘e=kSa†¯÷=oš“žļąji>Z$Á"hÄ,N‚âčā*.—ū'7˙…ƒB‹ˆ((øÖØ5ÄļŠZKåôÄ&'§ƒ- xM777ĪŖāķ/•Á$ØųX}tĄ)(MäÔ5rˆČ ‹=Ž|Žô¸fUke€ČNųhŌ7`u€ÂåėÚŌē„N\ԘZÆZŸ™¨Ĩ;ÛvqÂÃxĸ˙*$‰ĸ’Ā!†ÉčšŒ8>}HtĐũęí0č„ÃĻõĩŊ hęĨp×}Ųh4`øø`nilāįčų‘@ũŽŊs­"6=ûĀĄüÔéųžžąf"Ũ@§Eģm€î—úÔ°*ĶúŪ8˛ĨônqyāæUk†ąėąÜ|Öé {-Ā>m`€Ąxn<>T1ģë:m@}ĪE vŨũ üŽĘüHôŖá›@{Ķu’˜–'k'@X=| 03ĩ—Īü‹g'ôŸŋęœ7[ķīY\˜PîŊ×S¸ĩ^w> •ëŊ*_¤rûøŽ‰Î–DD”Ājõɛ&d/ã)%üĮ_kFĄtNē"IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2kIDAT(‘eĐĪkĪĮņĮwžķ5ŋfeĩYSFŽdX9¯ä"íâF”ŋA~)Ĩœ¨å 9™â@B–´Y[3fÅfĶĸ6˛x9|žfËëøęũ|÷zŊJņŸĘüšäļ![mĢĢEōBŠžÂĒJũŠŌ–KI$ĮsIj]ė(ūM°ˇk°EéÃøÆš#OkéK’äËäx’H?˛D5˙ĮSx}˜™†×(ĀĶŪy˛;ˇ4/ƒÁ[˙ †}7G’ČYXŪyzÔ^M¤ÍÃInŦÄö—‰\ÃĮ$ų}g5%r…ŖEŽŠķ0Ūß=Y {ē#ųēP`¤ YZĢŪ•]žo?ø7ā˜u=ÕŗéõĐÎTŊ{Đ^ėōjĻ@ëāXąKã盂.vā\>kÅÉÄÃ&NŊIŌģ mI).~nØŲ˛Aųęwˇ"ßîļ, xb(IJ1;öüŅØ{›;*›š ĖĪÎ˙TŠ­T¯˙lĪß XŠ'pIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ĘIDAT(‘U‘Mha„Ÿo÷ÛФÍÖ6Äkj1nS[ŧZi°ĨÅC1(bėŲŖ ô"xīéĨ…ž#Š˙…lŖq‰ UléŸųOˇŸ‡ĸs›ax‡™W¨tēčˇ"– ”GiĪÄ|\ōíyFŌ8d–5ĢUą>—Å/v`2ud Éŋ0ΟBúuŅQôŅDbŲ"ž `į.NAnģqr*÷Û>{@ūØmpäfÂÍw÷7Ũ>$5zÆĐGĀÛžĒî…ęŲöB´nog/…°¯öu#KĨöĀđāŊŊĄ”¤ā♞÷|ö°Auš™åI†VęJíŋL]TÚĻ ƒQˆÉy€¯OŗÚ°EMŽ[…Ԋmģ>O+5î%Gë*˛÷—rŊįĒEm1UâĪ€Ŋvˇ;€zPyĶîæėŧŨ× –čļdkúc[88G؀āõJŠĘ-ũÆŽ´ļšt ˜”3īœ>ã—3??˛ļōŽëķ§2ģ<¯Ž™­z"ww”BŊNvž{%USJ ÅęrĒŪ¨K=›™ōBÁzŪÉ;!˙đėpËū LŖŗ &wFIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ˇIDAT(‘EÎMoQ…áw†[äĶ™0%”Jii‹€ÖJâ…Iãē+މ?Ą‰1Q)Ąa´†/@æ^@9Ë'9ÉĢ)€Í;ŋÛtRÅŧđlûËŦc;@ĻZDŪũĪ7-? : ûß{Ķ5QŠä0v–gsŖ+sÖâüC5“°ė,rî[õФRĨŦF^Ōčd´ø~Ęŋ0ŦĻĶHVSų´6YÛĸÕčŗ7ßë¤â%6ÖrC“ņ-o˜e?(‡Ö_Ŋ÷õÖåwŦ$Ëų̐™B ˜ÕTpyœ[đƒÄū°RŌÎJ VáäŦŸÔ'Ņų]h’Ë}AĶJOsĮíū`4w㇀L,và t-äMXI,ķš™ 隮o –VÁ×u_)ĩŗ`ĩZI¤T"üdB“2P2PéôXšĻŠ Čįv_gŌ•~Q4V;͜zOĩļ6Œ´ëŽ˙ėÅiÁ]ßģŽn:ŅâërÉÄ Yo;aĪOäĒ—@4ėÚĪ_]Wī¯Ž^ë.§ŨĖĸŖøĮOīŽĖMĢiVsŽX^ŸlTĶ~LĻíë8OûžT˛;Ô<IENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2IDAT(‘­‘1KBa†Ÿ{3T°"j˛ ¨~„äØHC[ĐâāԟhnljÖĩö*­-Á)Qs’âFˇ”û:|yīˇÁĄ3>œsŪķžĮąrãhÖėĮŲ\pūA#hx”¤@áúĄsˇŗ˛[î"IKl,ĻN>nå €–ôÚhø™ŗļ{r=ˇmVX5™™€ũĮ@¨ž dk’ÔķĨīžĐMāp¨°ĐųĪĸTņ+d¯gųõ¤ åjÂ$i°ez/%IÆoōūÔr?É`@÷{`6ĘEō×öKCĮŲŽĨ{kf.ÂûTÍĖŸ"zÉG‘59|oՎë¯˙Žn+­b$D#ķIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2 IDAT(‘eŊkSq…Ÿ{sSMˆVŖI-)ô ZÁjiRA…ĸ.âb)NÖÁÁ? Šîū\J—ŠtČā t‘*ZôÆ4mĸĩæ–û‘ãđk‹mĪö>đžįŧĮ;dīDØ@Í[5Cš€ĩ‡ }–› ŊŲGi$ī$$íl÷ŅÁ'’$!­^2›ũ“ĄaĐsŧw`Ž?8wmŨÁ(wk,ĨS›žD{GmĪŌŽŖ­ų°€gíÛŗÉ’+¯ë˙n­ž+œ:“1ĖŠŊŧ8ŧö5ųcú5ú8H•!Ž{’ô˛w[ŌBgה$é×(L˛‰ŋg E:owQ--c”Ēî.cx0‚‹!Šßߛ3Ēzē_øčė‡ûÍ­=ĩ7z.Ī46  gÆ'&×Ҏ:rjáFŨÜģ gK‘Mų „9ūÎCą/aģ`2ķt‰ĶcyPsnJ’Ū^åÄ3I‰Ãƒ^yvxųãŌĢųü €ĨøķTågŪm~úęČ?č,6ü/‹•VŊ÷ؑ.†īˇãôî´Ā?P(Įná¨Ü”IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŗIDAT(‘M‘AH“qÅû÷ߤÕđ“鿯Ԃ˜}EeERDR§.JēŅ!"éĐĄŽ]ę]*čT$Ĩ…(DąD6+ s…‚Iĩjûžm¯ÃgäīöŪáņ/$üģ7ļĻ×uËÃŖq×u-ŧšĢMä͈ģmvlqMĮ…N¤é&"Üņ „*+ž°ĄŨ0›XÅåIû˙;-§j˛@v5VÔcņėîí °ā}áđՌ_\J§’éS„kUIŋ´‚…ĮĖŖĩÅŅLbK °° #“ËsĀÎŽ}GS€t uO Ų˙ĩ*¤ĀÉūâ(ĀÅĪu¤‡)Šr |Ģd ‡‘3ā ŧ‚ë Õš2āC€Z€aô­ę› zÜ@¤œy€˛Ņ×Ķüü@ŨnÆš$IbSŧŨ tĖJŌŗšņĀR ÷€n3MšįĀÆ^˛ĮĨJá\gÛ@Ûԛw“ƒAŖcaίœ>ûīĨSßÄãžÕO’ÉųâÃĶŊa ĻĄŅ=’mëzR–îeÛ!Ö}Ĩ ų|ž$é/Cō°.i’7MIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŊIDAT(‘Uŋkq†ŸģûÖ´‰!ËAšR­'ŊCmp˛øĢ Z(ēHw]Ĩ[˙˙ ‡….A¨›ƒÆZĖ•45? Fihi{M“Kr÷uh"é3>Ãûųŧ¯&m0 Ã0Œ:3 oůlļÅ &ĸ¸ļ7h”3Ã×}<Ņ•Jål;v9°î_k'kU8×iN"\āÖŗ„§īĄ ũöˆm͜gũĻzÁggõÄa%åžĻƒÎ•1Qé@åw퇞˙Avæn˜qz˛Æ;Ī;`ûô“Į6B×klARūŅ|ĘüíÎZBׁØŨtPÚČHęKҰöǰ /_ÜKOLø[°;CÖ¸¸9ž>œ¨oBąˆüš¸T–Įė>˜A6=OöY¸.hyPTO´ tĀ;Dģᾓ@|sŨȝXeˆŠeįĶĨÆķžkšÍŽSéšīû ]T6BĮĘ]LS­JīŸ‚¤RĒTW$>ŋ^-“ŽōŦŊ‰M•ŋÔsīÛéI1ŨØôü-ŗP:U†đÕŲŠ\YÎ;#€pIJ­Ė$Š$īä<€mŲ– üī.˛Öēīē=IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2×IDAT(‘U’ŋoq†ŸģûŪLAÚBûû>īđjˆ@ái‘Ø5ÅįõŊ _8Šd¨%÷ΊĖL¤&{Ē8ŸƒÕ’)Ârîų ímĀļX~Ĩ÷\T°Ž¤}Š˙K_8d+聝véH_N4G\ Nw{H7œ´Uōœšžęôp;FˆČĪfekHē~gwĖšÖZiũX‹›8ŗqXG´Ú–žŗ Į|“ų¨GŪækɯŦobƌ+Œ¤ßëMéú’*Ã̜w5Ąö`ātwV[ū˜Æ87 ĪQ¸qėMØÎÄ‘ĩ5‘ōy€ä ZÃ2ú _bpU/Ŋ”š@ <5€*ŋž‡ 0$Ā(z) UĢŽ@ĀÖ °Ė6°×ĖmĄaĀ´ž[|´ØtD`ūöÁģüã øoEm㎓ÅcĒjũū›OĀíĢãûŲX8 ƒgSŗ[AÖo$ÜŸ¸ģUQŒģ×÷ØÅ$Ÿ‹ƒ  P(R ąū—ūKK´Ų ŋũ IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2GIDAT(‘e‘=HBa†oDddIƒjBKk Qc4E´99”4¸759´DC­5„QÔ4Õ ˇĸɌˆ›98ôįÛāŊןžņåŧ‡į|ŸGüà Āũ#÷ą@’Î'čĀĶí#$IB’VøY’ŧ/øÆ?kc_ĄTĐŨWcwĒZüé āî›BÍx ĨfāÕ×*(It\Kúuē^ ÔoåžĒßÖˆߝĢĖŅŠ&Hf į Ŗš‹ˇËe§nv”=‘¤a(8™ÃLˇgš…Œd´ˆ­ÂíįRė„Įļšán01 r°i5åPqÉĪēS@YhŸē$Ũ’Áļ{7ƒ(ô¤ėėÖaŪŽ^A_MBJ3™—¤ōá ėÔo{O#įei;B"mŲ÷–ļâ{Rf`åĸņ~’iJfžųßÚø6š jj¯āIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŽIDAT(‘UĐßKSqÆņ÷9į{œ›ĘØąÍšP4ĮŽ5íĮH ŧ4ĸ ‹ØÍēéOŲE˙á•WtQ*!FŠ`”°~.1Ę+fV¸ļrČ}ē8z˛įōuķ|>&đŠ åjĖ>õŲ5ŲŲ+Ūā8žíܚüČ~2u€Â˛Olnęn/ųJ)€éšÚžXG¯Ž&đüÉ{-ŗœ–¨ĻūĐh8w%ژ°(xtˇ†Ũ“îęŠ4(>ßΎōuëBĪ [¸ĨRq74 €Üđī0ŌcoË" ‚ÍzÕŗŊgōËŨĮŒ\´ÉN…ŨЧ?ōSaDD¤4•Ë؞Ļˆg"î͉l€¯LDîô}aäüÖÎÖoEĀėU>ŅzŨ}ˇ {Ģú?ÃHtpØ Ђ˙YKčNéP˙}°¨Tŗ'UáËJ(’ ägV §=ĸæægûcÉŅĶVuqüaíČņkęÕBe ķeÚüUx\c8}1@ŗ:O„a$ˇ,"ÜLøĩĄK“oDDT֘Y]¯aCgÎ;}Mv§ž¯ũ$Öf;qĶûô/O:žŨ!eIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ËIDAT(‘E‘Árš`…ōŖ Šˆˆ üÔHĸn˛é4›ä-ú`}Ĩî˛Étš.ēiĸN~4AQŖRĸhŌä,îÜųæŪšįĖͰXx@Ävĩ›–B0õ&ėŲĮÜģęy3QvãīĖ}Fŧ€ŽEAđtĮü@dšVĶŒŲô/d‘š2Ŋŧtęa„7ŠTð,# ;”šPШ ƒAĐļŠÕ(8•( ! Å —p:åO‡kYˇŠ&—›:Š"Ō<Ė išĻSÚĪ,1âyK ŸĀ7 ƒ^íÛš,÷5ÚŦ‡Õh8Ũ$Q įŧMƒį́˜zĸpß4ĢÛ=oTĘB°C˛sܞ´Ē-™;(>øØžü¨J%fŨŦ Ō¯y˛ú&9ŲĖę9^äqÆcĻĻ P$aļY|¨Ōn—ßC§"Ü*ĘĢĻų1—ŧúŗ×Xt..ŪŲےõGûŧzfÔūīîgûc4{]•OY2ēŋs'ôęúĻĨdŽ=ž{˙sˇÉšūė\f´ôÜÅ:p_VÕO^Ī–2 ˇc×€vÅĻ”Ē"ō{1[R9KëēĪiéŖTĩc—8ZāŠzø1_ą@Ār-ąIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2cIDAT(‘]ģ/C‡ŋÛŪFŠ4”õX „¨&âK b1!É&ĻÆ`ąŠ]"aˆ ‰ˆÅ#Ēkč@…”¨\‰ˇ{q UŊיÎųÎķw—åõ跕>¸ŦŒ "w}XmĘ\īÚ*wPÖûņ%Ԑö— ""@íÆsæF˛ĻÂy <ž\¯”(ĩUæį9āđ LðącĀÛQheš t5bĢ;äÛÆÎŽWi ŧžū͞}ˇÕ^å/­sfÃp.]>¸aK×𞈈s!“ŽôxÅHžUג¸HgR›ĢãNלˆđû‹+miDÆbÆ‘VĀ=˙,Žü‚`x?0ą0_§pbeymš–sõCŠŨ ÎĐ fŗ+{ũÜūũ}rš`4bˆĀĐ'ú (ŗĶ@¸É:~%̎ųëS˙%í“^@b'kņø-ũ=%?ŸzžHĘNeˆIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2¯IDAT(‘]OHĶqÆ?ûūžûms´?2šPS™5h-‡ŖÛB(ĸĄP—)$:xŠŽ]ē׊ģPYP§ˆ BX 8˛0dĢË~ÎB1kŠķõđąznīį}xž÷u SËūcGS‡€ĘĮR>ŖiL>üGz{Ã|rœeĪqMi`ŗXÄh]4Ø´É>_pk6”ģUčPļ͘ŠĮs'“ofæôx×hF"AŗÕô¨3—GÛ#QÔžnũâ?6ŋڑü—i6‹ÃåėŸ•™’SĄ{,°x‡ƒų\:f,]—^Ží˛hōU´¯[Õu­xOÜ9ožMÃúd'Oũ0đxIDDŪŲāģÎ]`bGDDdëyĐ¯đBÖ2 îĄđE%ōœMī_=gz°‰í3ËnŠĖjųī FĢßĨĨûjøėnŲ5xTĐ­^æ_ $ĀnĶ í @Tņ‘†=™_`†ĘĻāĄ`âˇ>åŦÍŪLeûęī^Í\ŧfķá6€'ĀwoeGô`(4]­ūøėŋR[¸„ŸÕĨĘÛ:pg2Ũ°`z’Ö> IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2KIDAT(‘mĪ+ƒÆ?›×ĸŒÃ”-!˛ėâ ¸RS#JႈüH\üŽîäB‰rą”‹07Íĸĩ„ÕR2ōã}‡ŊiīxnßOßīķ<_—î7Ŗ&ļâ õŖ9œęēu“ĖaIÜü•;ū•CĒ<@ņ|Āc oëŊĻČĀ 4MUdß@ËˇÃļ:đų–J­yš_$}Äo’$ĄŊ6ĘŌÚ—:"–$ņē¸=öUõ˛$öõúnƑĶy!aāĘä7˜Q `Ĩ–ƒ€öÃgéj pÂõz5ë3cĢ@e+Փų#[åžŋŒīXĻC:=~'gX aģ¸yĀh1ämÚš‘ ‚a€āą$éŽČ­;/īîl7­Øz đO“ÉIí}@—Uä=zZĒ˙.˙ĖiJčëbk˛ŌŪÚ}’ô‹é’cü›‡ëIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ÆIDAT(‘]ĐĪKqĮņ÷ė|gjVZmMaŨÜĄ,רV((ۂˆ„č)t :ũ Až*čÖĨ‚‚$bc!–Q,%djYŽųƒĻŌÛëÎ<VÂ|_đđĀGœí¸mĮ€ĘlvŒŪÆÂᎨ[ĒĖNūEĮ]žĒTč>ĸ@)V MOU€[uOÄßÖՙ؍)sŨ›<ÁīoŨ (ˆߌ°ŽāæËl0Mđ6˜ŗŦČ˙g k‹âÃöĐĘWÆļĢn–ÁŊ!ŠKŨÚ՛ŪHéVhYöĀĐ´ĢXxŗ€Ųw¨­öe|tqffĸ˙0’íkīDDœĢí@âr'Ų|擈ˆHy°ūX–3ˇs˛Ö˜Uˇõšį (=˛ŗ~´õ¨éįOķzķÅc€ī  FîŽÁ–Ī­šy€ˇŸøķŅ_Û hĐĐūíV_€‰÷éÕÛĄ˛&˛=¯ƒNÜûŸŦ¤BŠ"gæ­–xņt“ŲČ ĢEĸæ8^Bšpí_AĖSŠ0“ügÃķoûģ÷Ž T+ ņ˜Äéx4:û ķ“JŲ0ŠåͰßžlv:N&R¯uh5Ûe`Ë.JŠžõŦ&´jí˛gN”ūÁiû°ŗī§ŗš E2ˇ$‰ĢķæĪŨĻŊÕqH$Ō…øĩlîU–Å˙ŠŠĨPš4Ű=c¨†oU{ƒŗFl]ĩž€}Ǖ՛FčųņÜ ë…š‡Q˜ž^Z˜×øúģ°ū:bũī ũUŲ-ÎÎŅrũ.ŌdJö§=?ûr-6ĩĢŅpûXŌ—ëIĻŨAÛļ‚Ōķe™KJ.IENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2âIDAT(‘EËŨORqĮņ÷ų¯$1P4™6 ¤‡EálváōĸÖĒĢūNŽjsĢæÚĘMMs’gf,Cđa*‚įœ.¨uųyíķÖXĪ­UŊņ8So–bTMŗĒ~ @¯ë‚’?€kĒ7úöwzf1A–īŸŨ~°4īE€ĄéZW4ĮîMĨŗI_ŋŊ•w‹r,_pl* hœ›×ĒŖœ^JgD§˙kģÎĘ:ŨoDėÃ|ũ|ˇ(N/5į &C Ĩōqo§|Ŋ7‰Eā—ą—ļšO>‘č¤PÎŋ/zŖ‹mķgåtGxęí]Ŗ3÷ōšĨĨ•Ũ‹­Á‰ˆ€{ÔŗüęžĨfVOKÍúÆä‚HŲ Qt†SÅOMN6O„ĀÄh`ĀqUS  ÛĘ `Y6pmĘU­Ô˛üéiĀq SceãĘēųûm4M@rīÖa(æáŋ)Ķš2¨ũ3ĀWf ÕéBŠFߌ.āy6)\6•c^Õ°A_ûuģP)ˇ ú8"Á3 ߸į¸ĩũ}īË%ĄLvVmQÛߨoÛ:¨ÍdbAyÁį†ĩ-r^¨162ŋœĄ?üąËWÁKĖd†@s Ũõ5ŗ ĖÆ3‰ đî˛ÃZ"°`IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ČIDAT(‘MąoaÅ÷ŨĨ‰–ļGą†PĄDiS“:88k‹Ŗ‹ņ0qpqrps2N&N&D5ļҚhcКļp‘Ļ*1 ĩTŽ>‡ƒĐ7ūō^Ū{šĸ§b*Hxŧk}ąĐ ÎZŅĀaķsß$žx4Ŧ'ĸ(uCvĸÉ{UĨ”R´Ą2Ž Ģ˙øĨ™Ŧ:7eČžpfl ã—Đŧ–¤-zõ&ü8€  °ŊüˇįûāNUj[–ĐįŽåFēƒņ¯2 šĢ%īå‹GAÂī?žtÎõ÷O ›_n…„á2ĪĻ׿—‹Fū4Ę:a]9*ÍÂĄë¯ŸĢúh§0ž{á­ ŅJZŨeŠI°’ĖmŋŅe‰hîILŗ÷ Ũ‚ōęÁO€dĩēōĶČE{(”áŅÕ#Úđ]Ûŗ0S/śBUũXßv|;n8•KuˆŸtĐŪ–tļŸĖ8æÍ†­ß9ü Žä•O5=íØjO–ÄėŒ1ͯv{ ōüÕb,oJdūž]z÷/ęÛ+/Šr|dŸ5 ‹1¯į„ŊŸˆ4ĩQ~¸Š‡#Á|ÂڕÉ!4…Ē|÷ģtŋˇŲÂĨ˙i˙¤JQQIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ÎIDAT(‘=ĪoŌp†čˇŦcĖ2ŗ Ũ€ŽXBÂbMô0‰Yŧy2ū“zŅøë˛ƒYbb‰ŽŒ tĘ6&f–1ÚRßã“÷ķɛ'äˇ[‹˙Ņķ،8ÜÛmxžåÆSč÷æ3ĸšûbōaĐæķ0Ûũ!ūôxlÛ„;{6/%6Ę*âÔ ƒODŊ‰šĖÔėō5q2Cén>ąāēąĩ• ‚‘‹”Û\KčŽZT@Đsá˛îxŠä&€÷}Øp|SNŨŌ 3FŖŧŠ”ĖÜŗÍ›NĢTuŠeéau GĮ€Ū˙I=U3Vūv+6Ô1!4­-+ļõ(učÖ„šŗz}žœîŲûtëo˙QĢ„ŅŸŒíŒNDÆš!I*Āܖõąl|‘ĀqCÂŗžžĘEŊ¸?(>ŧ>“ ;ח@HRĀŪT=BëŋšA+`ļåÁņPĻg˙ąl˜#Į­ŧ|ß%gNt?)Ŗæ— †X1Ŧ tŪĩũ&ʛĻ0îœÕŽpŋĩũs€­˛aŖöŧ>@¤ô´ldD6r3Ģu.Ĩû6Ŧ†Ĩ8ÖžžŽ+đ)Ą°Eō›IvIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2ŽIDAT(‘U]K“q†¯˙K{öŌDœ>*Ö–P-](áATPE_ĄĶžAų úuŌI‚ ‚  v”Qy0›ÃÍŲˇÜKZ{öėßÛŖ^‡Üŋ›û' ]6j‘…\^ÍhĀxs9X °°v"ǁÚ×Ėŗŧ‘ TDVĖ“>*"€ëė)†PJaŒ×~Hā1>w.æņÅOi@Ģ}ũūņnv'$‰ė;›čŨ !gqĶ„Å^‹Lkéß÷k]ĸŋ<^Üî9 ÂYĄX|31qáf2Đuģ¸Ë˟^&¯^ŒŠ?:æ§ėųīŋz@ áŦļQčü)‰Q[ƒē4zykÃŦKŦ¤ bvqۅ×ĪęŪ’öûĮ‡C͊ƒ—-úŊŧ8R~ąCåŗÜ÷9,ÕãpƘŪ^ˇƒ’†ŋžū.ĶBMMëæķöˆ}:JįÛĶtNÎĻôÛWŊÔT*XúŪ‚É;ŗcēöŗÂæęû˜Ú.ģš{û(:ώZˆĖŨē1 :1ĶW(WÁŽO^›Žĸ•ÍכköYIK˙Š=Ąh]Æ IENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRëĨzÎ pHYsb&2nIDAT(‘eŋK[a…Ÿ/ųn­Q 6´RMAD †Đ‚včä"HŠ ØÉ˙ĀŲ?ĄSЃKģ‰Pœ ™54ŽŠ-´ Á¤÷bc­1§CjrÕ3>ŧī{Î{Œ¸#/ŗ9hęGĮCqNę…?Åė IîY °˙-@L›(z֕ļ—Uˆû×SŊ"ąb˙¸Äč§+ŒûĶMYĀ”azŦĩB.mŨ÷|M/~&ÕŪ÷,ĀB5Č*o§’ (Š0ũ ˙ÍÚoIHÚjŸÜh°ƒá`äåHŌį‰Œ.Ą[yŲE‡ĻGSŲá‡LšŠÛ?ZyĀč!ĘAÖŦˇyI'›%€ųāÕ&ë1ÂŨázŧķâ1ģôĖ1ß0–—$­8>ák€Ų’NwV{ ņE\Ž5ZIĖĪĀį;eĄĘŪģf”Ž÷9IFüuŋįĪk§<‰ŋzųÔ#āÆ/ŲÛū( ü0/ŽĐo!IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit6.comp.tif000066400000000000000000000171041506303110300217370ustar00rootroot00000000000000II*r$DaÔÉĐ΁ Å:Œčd8—3TuF§ 3 „Ķ N"œPL"3‡P’á…AĻEŧÎĶ„‚A#eŽčŧh$ƒ¤’–œ$‚A ĢK„‚´HÃZA%H%Ĩ^š ­AT"8t a„ŠiR_J—פTŖî¯„4–á}RZJ-ĨQŌ¯Ję’×Đã!gķ¤ŖŨVŊfʍČ=5˙UD1Ë3I—,hAÃXrÉv–Ū’ÃU Ä8¸weĘ͉(‡œƒ#‹"ېÅîD‡Č¸ŅŪÃDvíæ‡ē‡ ž&äWtøaÂyw7‡p÷V“‡Ģ i銹Đ7#‡‘laūøĻ)¨˙w؅÷§4O˙ņėVÆ úc÷˙ëūõŋô˙÷ų1î˙˙ß˙˙˙äĮL{ōC¯§ōĮhąëɏš!˙ŋ}××_ä‡rCūH¯ōcŅ1˙áČĮ{uũikĶi]7V—ûa+i_Ģi>ôÚßûĢė:xLv)ē† XA6ļ ÚM}Ĩi6Ŧ5îĶÆiD&*Ō{…›JJé…`ƒ  Âc 4Å4a Ķ‚ SS3a Á0ƒ0AŠ  Âac‰Ũ.a†k0Ęq†ŲPď"!Ü‰a4I´ AB 0B‚!(á ˜IŅpÁRL"ođŠŖc„–“KŒ:"M¤áĄ4i=ŅĒĨ ‚H¤áI°ĐZO ";pēá$’%ô‡¯Iŋ uŌH% ”$–Ŋ:é.šÚIiZ…­8I~ģ¤5ô8A%ézUČo]×Öŧƒåi ũ05āöQæD°ķcĪJ`|4!åĮ üė~!í8‡dq"ķ‰qi ÜšH>"Ûĸ$;‘!ÅĻ”Ž7ÜC@äHÂo âh‹ŽE‡ˇ#ÁČī'īD#äyĻ)û-„ŲžƒīAIˆA´ˆ ÃĻéĢéũéöúūA Š8_ûûõNũ?īÉ˙úŨę:ę)ø_˙}Ö˙ ˙¯å˙û˙áÉŊũš1˙ëɏ˙˙ũ~Ņ!˙,íɎ{öˆĮíõ˙k$;á¯õĢúL}h›´ĩzŅ!é|Sî­Ö•ĩßoŌę6Pû„ü+K_Å0˜iE0aXtLSi{A†ØĻŌŊZM1 Đ&ļ)†NÅ0ÕĻŌ´b „Ũ0˜N ˆ…AˆL&* @ #ĒaāÁ4 G\@Á tƒG lĄ HäkFļ 3T& ÔM„ÂA4E"0™ÔP˜L āM MRH$’aBĸø0’t ‘!č4$‚ †ĄK$é"8¤ēiA$‚ ŌD‘MDī@ĢAN8DŽ‚„’]¤’ZIuKKõI$‚A%¤— ’õN’BŊ-%´•+Uô”0ŋ×J’ Iuņ¯UKA)ąĒĩKOUëS睝Ė4Čį ųéäqÄ4 |§ ü$â âCC0pŌJ8wûA§NîĄƒĖ´î›šũ܊>B8pîD~Áš0áņtŪGy nJbD‡"éŌA¤đ›š,ԅáMÂzz~žŒ7ôĮAŠĻŊŽ66Ÿcs2úHkõÕ|˜øŽŸŽ˛9žø_˙}é˙ųCßjžL~Ë˙ōcÜ÷˙ū˙ũūLwÚ$;“ōcŋßEšc˙o˙ū×ûVÕŊä‡íŽēO$ô›§ÛJŌycŋ¯VēáÚˇũöļ”oũĩn›Ļ8ĢIŌm&)† 5 -ĨĨ´ĸ­* &**÷bš Bm ĶbšbƒM˜AˆL&ši„†A Á`„Đa0šai…ŗ[ BÔK‚0Á†kĐ11ƒgAFC!#˜A” š`ĩ‚  @˜&'  ($ ‰ŨŠ — j¨m$‚@Š&ē#†J¨žj$‚T “¨—% ´´ŌhŋÉzZA‚ú kJ5Õ¤ —J’AR֒ĐR|—HRJ´P’íW´HzĒA(ŌJ•Fĩ¤IĨJ’ItĖaq\ÁëJĩëĖ8žCâ˙0%jlŅ qŸ-†œ4A{˛‚×08¸r(áųō1Ü;‡åĮü áÜ6ˆ>St}ȸâ‹ō8â]ģēMĶh;’ũDœ ܏á7W'ßīr-ˆ[tđƒŨ<ˆ?7˙é­­b˜‘Æ› ×zב{ņMP1]S˙Ž!S˙üoË_ī˙īî˙ÉŽūH~ßßģ˙&?á¯Ú˙ū˙Á¯ Ûūaë&?ūŸîH|˜ų˙–;D‡ëÖˇŨDŠ=~/´­+’îĢuum[VŸē ‚Ŋ6ļ¯N•ûkÖŌbģH6ŠŊŠb¯†”I¸i6­­ˆULSôĶM„˜Ļ˜Ļ)†(h4ÁSL& $ĶLPh0Ļ*Á4 ƒ%YZŠ h0˜MQ#Āė3Ą†DĐÚ# †fĻ%á#ą/†0PU0A‚`Ą5 „"/A/¤ Ô œš $Á^4 ĐH›Â„ @‚A8I:%tA- ‰]$ē ’ôŽ‚IßŌh ’ĐI(II’ũ%ÚA×­i$’^Ŋ*ĮĄJ´•4Š‚Z¯ęWŌëKAa…ô—úV I¤––…Z܇ésõĮ#ĩk ’K~qˆ1rã¨qŠY‚Z˛8ü8w"Ãõ~ytGy‰:D?;0÷#ˇúŸ<¸ŠÜD8ƒÔÁ ä\{ˆųĶq@õqD°äwģ’÷„áĶxoZ …Ü+Ļä^qąî˜ūûČšų~ž­+‘l{ĮūÅ1ëȡd'ũqũäA܋Ž#æˆīHĢ‘m˛>i7܏öÖá8OAŋ{tõ÷LSô|Ē6ä#é´ž˙ûÅt˙ˇÔA˙oøĻ:xߍéé鏨ú“õ˙Ô~û˙ōc˙ë˙“I’ü˙ø˙˙˙ūL˙É×˙ŋõūŋ’˙ɎũũmwŋVöû“V‰“}rĮkīOOZM˙[ĨÚÚē†ûKíuĢĻë§ÛÛJŌ´› ûi1Aēn˜§K_´›J)†ąVWĶ{mcl+ÚM4Å0ŦSĶaÕ1  bLSM4†A Ä Áš!“0˜A„@ËÕAĸ"5Ld]S¸—@ČO B }’„ "á…'"š‰SMqH$šM¨MP`Š„Ķ „‘íĨĸõ&;DíĻ‚“„ljå PŸŌH:N(„ ´E}=\†0’JĄĒ–—…@”xN–ŧI{Ö-C¤’ix¯‹4ŋT´ęŋ‘cë¯KV”ikIi¤‡Ļ¨Xū*“Kík$’ôA?—,tCø„ˆ˜% ’ōãÎņ#œ‚{N!đ–ˆ?ˆr„#´!ĻŨČ>% ø"[Í),páāävävîä\púá?tÚ#Į\„}7^ˆš„Ä—:!‹wÚ‡î›Ø„Ú]qMôŪMܔŨwoņŨ={ųŒĖиǝ^DŒWtėõĮĶū¯OōĮßúŊīdsûä‡\Œ˙&>´˙Éų!˙ū˙ûú_ú˙&?äņ§˙˙¯ëß˙Ōy'īīŊ÷„ôõ˙Õō ;KKމŅ7i}…n­[Iéž+žën¯`¡Aũ'JÖöŌϘĢJęÚļ”UĨėlSé1Ní1LT1LSLT:a4ĐbM0šh5`šaEA„ @Đh0˜RDu21cĄA‰xHMÂ\ÜęÁĘw>(PPŠ‚aEĀa0HĐEđX*@‚T‘;`Ą4Ŧ(@•ũ„˛ i‚A S'$ĸnŌ´Š’@’Ņ„íö‘!ÃIÕP*H*I4I餐U ´•.’ $गĐI˙uŌA*IPIj)|$ĩ¤Ģéu }RũĨČ?2?ÖĄjZ´ŖŽj’õŽlĐH‚|}NtîCĪ .4Ađ‡˜‡A=)‚‹Čˇ@Đkî ] w6nÜ=7"āpäœ4á  ŅÚh‰aØˇ"ÛÂęÓį#ī%ΞIŨ6GŽ,&öéžõYDũ¤ôŨ¤û”'§íúûĶ{ĶYū?ø§úŋŪ7˙øĒc´˜ū:wãĻ?ä‡ ˙ë˙Ŋ“ī×īōCž7ä‡˙üŠ?æú˙˙ß˙Û˙˙&>Lwɏßų!û÷_Ģɯũ~—-ü5˙˙Ō´žŌú}ĩzūŸuzÃ\$Ūũ×NļzŊēũ&ę˙ˇÚV“jÚÅZû¤Ũ ŋĻŌļ“i1 † E6“LTlm‚Å6 Ģc PiŠiŠ ÂiĻ ƒAŠmÖIĐaM0•R0MC |A0Ęr42§VjbmČ„#āC[Ļ t ę((N‚g@ˆ0œ"QA*"ŽÂ#Ō ‚AU€õ „Ú5tOŠ(A ‚XVĩ “IZ tH$\ RW_Ē"i I$ ]p’  UôKDôB % _­-PI%i(%ĨKÚ’¨*ĩŌŽKĨT†ˇKŠĨū’ū• !čšQļ’!į˛8ë͝—ŧナ Đ†„`ĄĸâōäˆcœhAĸ Ėiâƒķ¸‡MpŌāáÄ;ÃD\}§#€r\îö‹ŽGŨä\ĸ.:nGÍŪOw ¯ítÅ<&+„ Čã öЍŠnr<ȡ×Õ>Åãä|AûÆôôŨ?ņNÆũ4˙ėSû^ûûõĶũ}Rc˙˙“ũüą˙ü}Ö[˙˙˙žũ˙ɏ˙ŊäĮōĮÚ˙Y1ëu|ũõûDcžŅ1Å]'“vŊkhŒu§ëÖ¯žū´­_Ї Õš7a&&ëė-tŊ†Ž ZM}ĨiGúļ“V°Ö)ŠmZđÅ1†X„Ä&šą@ÄP˜„Aöša7A aS  Đh4&Ō Ú„ÔB ÔĐ :°hNbȁΆj!<ƒ)āČļ4T‚u š Ga0TÂa:i…H& M?  Ĩ.Ũ5 ¨ž4‚I"ųĸpŅ<‚"ō•7EõļZ Á‰: ¤ĩ´J%ęé< šT ŌéÂU _§§I%‘HPŊ*A.*ÔR .Š$Ģ˙뤡Ö*JŌÅCB’+Uá¯Ĩdy(BĢŽ8|ƒ˙I(ƒķŌUŧ†2Gä1rį ũO4Q \‚y ]Ä;â <ŽV°äXwŲĄ§ģ†œˆ8v„?ŌnÔĀâ "ÛÉ{‘ķģ„ ČŽ;á×%ށšܗöûtōP$ŧS‰.ȑ§Ũ'Ãp›ĻéēŠĻ¯Ãp˜˙Ž›ß÷Ũđū˙ė(Ũ~8¯ëĻ:Š˙ö+dĮ˙˙ė˙˙˙ūDû¯ōCĨ˙ú˙ŋá˙Ë˙÷ėÃũzžë×Ûú~发GrCŌ´˙ōC÷ôH|4­u¨˙]&öęęöęŅ7 +u×ĶíĶ„´ĩtĩl$ŪÕÂĩöŌĩ†­íĨ [ĢÅWąL8L4š „˜Ļ)´ĸ˜ĻÖĶA Åb˜Ļ„ „ĶtĶ1PÁAĻMõ.˛0Â1à !#ŗ[ų¨Ž™a0D)ĩ" 0q<Á§Ā@Ą4aB˜A‚„Á SDé‚†!Ą„‘8a0š„NÚ NŊ$’ÂA.Ķˆ@+EÜ ˆâ—Đ:H$&ôhŽ:ēŨ„°ŽĨ A 6’]:'t’ZúĒ˙éWč/Kúôē@žŋꂮ]t“Ō´¸ĨĒĮV’¤“¤’~–’ÚõĢū:^’Xi ÚĨi*´ĻŪG%Uû.ÆąOZŽ\qC!Čdwé!Ņ dŽ.{˛8Ēyc‘§pq›áÜ8‡‘øqt`ˇL;“öˆĮhŽyr‘-ŨÜSr-žō$:ä#Ō¸@ô 5´‚ĸEŧ‹ŽŌn‘›Ķp¸MīˇWü>˜§‘÷ŊŊŋũ?õĶ˙Å?ū˜īŠc}öķ0Æû&?J7˙ōcũŽ6ŋø˙ûßĮ&=w’5×_’ûü˜˙˙˙“˙˙˙īdĮĸ1˙ī˙uÖäĮáž˙ūūLwŨpDõÖŋģßÕ×_ēĩžÃßŋ_oˇĮ{i:Oõ´­ęč$éēcŊēk¨¯×[ÚV“¯Ķi{M͎MĶa-1LPlb›A4ĮM‘Åi°”WÚwb˜A´ „4ÅPiŠƒ „Ķ´Á†0˜&ƒ „&ƒ HÁƒsŦkPb\`ŲĐÎŖ:0Ø235p˜AĻhĖ A” Ē@ĄR!L&‹}ĻŠáT^0ŠÁ)ēˆí ›EÃMē.) H¸iaB/’¸_Ģĸ< M%¤‚$œ%h*ē U,%×OB–ĢJÕ*IuKõ ēZũRL-Ōę—I?ÂéŌ]’Đõ *ÂJļļ ņöŠiqÔkĩŠŽ×¨­/…ųƒÅs‰Fš—}Žē!˙ˆ|‚ø/ˆ8ƒĖ4Aė†0ƒô¸ĒGĐj`wæō=iÄÅÄ5͖EˇpĄÜjĸ îGÁ𞛑û‘qČČŨÁ<„|Ÿ ]Âéî'°đž˜téo%â¸M¤áA犴DŒ&õQ™¸]=ĶĶ´˙×_¯’oņ´īŋ^ßĮōcęŋû#Ÿė~û˙ô˙˙éú˙˙ũG#ūŋú÷˙ž˙&>L~×ßOũv‰ŋö×˙¯_´L|˜˙“ũĨééēūäĮĢrc´ŋĻ÷âŸũ¯žōá­Õ¤ÃJŌmm+­ęÃIŌmCtŠl$ÅE7PŌc´Ą6•ĩ‡Å|0“ąM4ØV)ĻÁ&˜ėA1M8AE0ƒAĻĸ°ƒĶ 0šr ' Ötá S”í2]˛„B„ ‘(8=0AĻCaBĸė0ƒ&M‰žŠĸPÂIĒ„h4ÁSL ŌTëAGlZTJÚ%Ķ’>EŠi6’é$–‚áÕŨēV¯„čh*ĐR)•' MĨū­Pit$Šũ[@’ũu4ít)jÂUĒKi.Ģãô–”‚|R|xCĩ˙čRTęKĩŽ\ō ŨkĢKķLŽ;‰!Čccų˛Jú9æQ œ÷F !ÕæÆ„ û‡û‘mč;Rãđƒ‡Ũĸ8ō<M÷"ãĢâhr%š7"æ0nEwA{ĮÁ0öä[ Ân7"¸tď1ŠŦųačĻ)ëĻŌo۟§w¨ß¨ũë}x§ál˙˙c˙ũß÷÷ūŋ_˙[ūXų1ũë¯&˙Ōũæ†ŋ߯,|ąōĮa˙küīīš!Ú#ļŽÖ?nŊĩ†Ōŋma­„Ÿ¸OMuki8V8ôIébĸ›JŌa­ĢēąL0”U;­­Ļ˜ Å)Ši´šc j ˜ĢL*iϘVi…ƒĐpÕ Âi„Á1@ĘŠ0L ÂäųN3Y „ 0á4`Ė†Î‚OA ‚ i Â„Hę(@Ņ. …’EŨ4ŅyL*$Ą0–ND“„#§•Õ†°H$•ˇP ‚I'ŽO!-ē DhX@žI ąJŌĩ é$’Ēö ’KĨ¯K@´´š…HRKÕëũÕ*K×ę—Cĩ†5˙ũzR9Žĸ¨ŌGĩIE?ŦAæšrõ/`Ĩ—.CœyēŽ!æ 퇛ĸž]Åæ+Ü<4A‹wЇhZĶBGÚîC/Čš’Įä| ī’į aČđ;‘đLHéē‹m:d/äxäHtÔP:i’ü'~>˜ßwß­øéáo×Õĩ˙‚)˙˙ī_˙ã÷ōCû˙ßų1ö˙ÃØíÚ,ŧ“žë“?Dcä‡Ú˙Ėí¯÷˙ūšoŪŌm_ũoũWŽ›WítLvˇÚMĶî­íÉ;W[JŌmb¯ļ“i1Úļ•ĨiZQV“bējŨ1ļĻ)ŠbƒÅ5˜Ļ› ՊiŠ 0š 0ƒ 0˜LSPĶ ˜A„  ę0i„  CD1”ņNÃa‚8ŅĄ#°xfŊ‘ĄšŠ„ gAC a2r Ahąé„ÂIĒ‚Ļ=\úŊĻÕ$ ЍTŌP”•Áá„%ĸVĐ$+JGRDßRcŧ%ü/ց$–‚„ D$ƒĨ ĨAUŌZAzĩ´ĢKūŋŨ*KDd(IĢt•Ĩ`’ú֒Õ/ëL/ĶãŌK´ž–oQJ‡Zét]PČ'*BOú] < ķXyÎüÁrģ/Ü4Đf ō9ČŽĶDĀĶ0‹šĶ9_’wwaž8‡A¸ģąn0ĶíȖîK܏Ã„ō>kMȑųúzy.ĐxW]§ô܄wO1Ü oõ{ŦmĶ-ū>ŋū8Ļ7úyL|WĶɏ¯Ļ)úŲc˙˙ū>H˛Į˙&:÷ä‡˙˙×ŋü{ŋü˜ų1õōCš!˙¯÷‡“˙ë˙Úū‰?û“˙ēO^Ú$;˙ßũ÷W_ž÷­~ÕžÖÖûôŽŊ6•̝Vm.ĸž˜úu÷īąąWL=І ÆÕ¤ÂmaĶkuēiĻ)ŠiŠiĻÕĻŌ `Ä&ÂÃjĶ4i¨M1 ĻŌ„Ķt˜L ˨ahéa ƒ aG)Ø`Ďm†ՑŒDDDaA ˜$š "…PA  SL%Â"xA(D­ĸVĐTR\ŌJ ´´‚K@´­-I/I$´´Ē•kõēTĩĒ×QKĨT’}WIKš˜ƒā•*ÄZ‘Æj´\ysÃø†šH†„:GaÜ;‰ė4áĶ„ō+‰.r%ˆMČļä|÷ŧ iāáĻéĨąMGבln˙Lmá=o_÷˙˙É˙¯˙ú$?_÷­˙&?ÚōĮrC˙˙Ø$ū•Ų€—jõb­[ŨSË}_vŌ´­&´´+L4˜ĻM6GŌl$ÚØLSAŠ 1Å1PÂ5ė,&ša@@,ū<ūi,4(,,n = 248leptonica-1.86.0/prog/recog/digits/digit7.comp.tif000066400000000000000000000123521506303110300217400ustar00rootroot00000000000000II*/‘†Ã9ŒÔČā†fuĖƒÔ4p0H[ hHg‚đĒ ĀđA„@ō4@ņÆē!]d´b‘ ääpĪČ9 ōeÃBčL…Č(Ĩ¨öš!×RsČ8N˛rcĒæ‚]’ĩRsÔäZ™ "Ī똈ãÁUXM/]}}.’ZÕWŠD0‚Ŗ´˙õ^ĸ—ŌIPĸ’Z´ *IR…×ū‚¯ÖŠy9ëũ(XA,*Õ5ZA*IVĢIVĸŧ/I*Iu H(I-RT—I*ĨūX^ēK˙úĨI$ĢւŌĒUKõA%Ak¯Õ*KKé-}%UõĨū’JTAat’˙Ō¤ž•W˙ĨĨ_Õu \.•RJ‚KJĒŌÕW˙UĒÂT’Ēęžŋ]u Ĩ^•˙õÕ=5 ǰĢĒ Õ5ĩÂÁ….  Œ"0%Yä‚Â95/bĀ€˜A™…Á  Z TĀ0DpcMcÕlŽâ9Į0~žAAČe’Ī'BĮ!œ}5 sĄS&>JŌ5"BAKt’ĸ“…Md[ ’}„˛t1ō8XÔP_üUAĒĄøUÔ jOáVĒ’Ĩ×û„ŧ*øđMUë Õ+ Ōét’Žĸ­|RÄ:ŸĄ0] ĢĨ’…H%WŠXUĐJ’ Ô*\.žēUIWT´•RĒ]WŌ¯ũkŌIRUõ uôUT ´ŠVŊ*× u¯đĄR֕Wų L!_¯ū•W¯­*T—]V‚­*ũǝūĢŌĨũu Tĩéũ/]| ž}x_Ĩô‚_˙ŌūŊZÃõĒ˙˙úû¨T—×ūqŸúû ¨' -‚Ü0¨0˜Rtq„žC͂āˆ/BĐAČgp™ ‚îCAŠT G†s „ĶAĄĸĮ Ö@‡˜A õ#ɑīâĸŽ¸‹_äŖJŒ…År ‚ifEŽ$¸åŅ"āĒJ(z¤¤T: Ą&Lræ¤æ…’r9g\¸!]PéA(ôë­%ę“3ĮúÖĒŠuū•PŌI}VēÕU¤’TŋŌãô:ôžąũ)}ĨI¤5ŦT$Ē—×Aj¨/ ZŽ$Ŋĩ^ĢÂĢĨ*­.’TAk–•WúPŋĨū’¨J•zÔ-/ŌõŌIRéRIW ē˙Ĩëõé*Iõ­k ēę—ZŌ˙^Ą.Ē´ēŌĒõA$ĩ˙K×KúŌ]_֕Ō^—×KÕ/ūŊtĄ$Ąl Ģ ēõ×õ†ĄoŊ‚ÚÃL*à ¯vǐ"‚ ‹€Žˆŧ\0ĨČāĄ:†€@ĖÁ ņd†sP¨EåĀ„â5‰ƒÍ  vž ĪĶBÖ#ų! |D_ @úǚ™g†iã­Ņĸ˜ųg‹BĐԁŠ˜ú“›Ē¤Š}d4MČQÉ9 9ĻŠåĸ”"^’ĨŠ8=ĒÅh:ĨQKIU*KĒ_Bō] M uQIFšŽ¸KIBĒĢ_ŌCęZúĨŌ–ĄtĒ‚Z´°‚ĐH/Z –:¤hU%Pŧ*Ē…KĨIj°•$’ %¤ŋ¤ŠVŠ/­ ’×ũWŌTiRKKŌ× Z_Ĩú •R KUKôKë u×U¯^Ŋ.’Âë¤ĒŠ*×Â]}Õ*ũuIWŌú×Uę–Ŋjŋáa%úč-ũ-úK˙ôžŋúZ˙˙[×°žĩV i­ ÖÖÂĻ#Ã!‹!œr„!ŲÔ3— Ŗ #' Ā⋺øSø#k!œpĐĩB,&ûX‡dpLjg5_^#Dŧ4.ø‰ rÃÖÄ:Y ãéyÄG L–ޤH7BbEĪ˧,ņ~C8똀Mx!G&tt!œrĮ!œrc¯Õc#rĄZˆv k—Lú4}kŠ‘HU,PAdéĄ3éá%ŌôēëǝŌ5éxKÕĒI×ÂÕ#Ēz %Ĩ …V’Ē…¯ēŦ-,(âĢ JĢI-*H-VŊt” ŠŠuĒák]U~̤´ĩĨT’õ¯Ž‚Ĩëá-aĒ’ŌúĨõ^Šap’J•P^’Ö‚¯Ē˙__­/¤•~žĢ^ŋõKT—äC…Ká/…úKŋ„ŋ×ÕuõW˙Uđ’߯˙úũ*?˙…Ģ V+Â]û°ļēũ>Á5TCá&ÁŞÃ4 rl† a.Ņ đԄN"놂îâ!„!Š3čƒÂ3Õ;AđôâBGøÖ?Ŧt$’äÖC\}TŸđžBF@Ė„‹@Lä3ŽZ#ô°U“ĸŠ9å}T":#dԝ…\äk­BZ¯ĒÚö‰Á느ŠuUã̈́Į^*'OKéEké~Ē>•}t5ZKĨTõŠ T–ĩQÖ:\$…%Iu %ZõĨøKI%XXP—ę–ĢÔ$•%¸KKÕ}T¤ĩęÂKIi} ,%ĨǤ̍H%ũ-/é$ŋJ‚ ĨAW__õU_ĨTēIkū—×˙_KUūĢák]tĒē^—Pĩ×ũx_UŌá%õ„ŋ 녯õô¸_ũ_…Đ}%­ēũiøP̝ęĶ žM5†žšj¤Ô4Ā„CAËÂ~AˆČ$Á‚+S¸$ ÁR bÂkÕ . !ĸ Y aÆuÄjļž’ņWč˜ūL|†ŊĮ šPŠҘ?Eކj |u!œzRĪÍE ē§iY?R\F9;+3!UtĨôtC@įr‡J‰ēę5jĢĒ×Ĩ,ë˙ŌQņ^ĩ­ŽQúCÕēKĒJ’¨Áa.–Ē…ixIęŋH-.ŊT.+¤’Ai Ģ„„.’Zū—Jĩéa%ZIh%Ē JŠ}/Z¤–ŋáô’ZŌTž—Z_Ē^Ģ­t’K I.¨$ĩ˙Ĩ×_ũ].–ũ-~Pĩ] ´ŋ^ĒĩZ_ũVē¯pŋĒJŊ ’¯ëĨúĒôũ~Š$õ¯ Šz˙ë×úŨ…ũuTÔ-Ļ jžŠáC$ Ė/Â3Ī @Č1Ų @ä4Au„u‡ 4đ@Âé—eō>„8ŗļˆcˆ0;ō 8â)b"øáŦ†s]øTŸÔ†¸ú“"”‚‚2 c­~@ÉŽĐtĶŌ-ŽČ9d°ĒNb˛œ‡/Ö#.šõ…0æĸDpĄ2Į'5Æ¤č¨žæ˜U] ŅIΝPU úpŋū•Ô-5õÕ ´‚˙_UD"Ú­…at5_ ̊ũP¨IuŌ *ęĒ„$*ŋZ]ւŽēA J’é ĒZ…KŌ^„žIiRK^Ŋ$ŋ Rõ¨JĩX_ĐU뎰Š$xJ’],$–žē괕RŌA%뤂úŽ/¤”%UAnĢé/˙ ĩ]-U/‡¤žĄŌ¯ÃŌJŠi(U„_U˙ú %AI%×§Ikø^ĩK_ĨI˙¯× Ą=uđļŗi|;TÖÂaSTԎáˆlé"Į!œr Yĩ!œrÕÎ9Q î@Ä‚ųˆq ÄP‡Č>4ŅõÚņōW¨Î8š„pn#r9`Š9Đ9ōh0æ97ä1˛Ö|&Lr;C¤ÔŨœ…\'ĒŦPā¤,֒„–´CI ĨT×¤ŋĒŌŊiBÉWD‡_č ˇZĨ×Z¤’Ą_ÂÂBĨŠ]ē¤Ē!!KŌI-U-pŋH$ k\%UIV‚¯J´_I ĩJ‚…Ē épēIkŌĒ *ë%¯ëפēUéRKK­jēJĩéiikū•pŧ-zū’ę´’ŽĒ—Âë˙ÕR_X_^‚­WJžžļ‚Õ _×Oõ˙UũuũkIU}}/^ŊVõMwUŌëPģû ŸKŽžÕ0L&ƒ8áĄ=lTԎÛ8\qX~"Ų\`ˆâŖ jIž,!ˆ1" ĐÖ5MkÕrīūC8åĄ* @æƒŧęĻG‰Yˆ×] æũHAöCX~Ē’“ú'čtE!%'ųgËgS#ŗC¨¯ÕB~× Ą2ĮI5]~ĩ…ĩUč*ŦV’z5ēđ…*’TĒ9…BĢTĩĒZ¯ kTĸj4UH%ũ}V• •Ŋz ĩđžĄi$’Õ U]$•VĢ__U^•R¯]%õ­$ēJkH%ÕŊ.—Kũ-kęē]%_T‚I%KX^ĩU  ēę•%áijĒ‚…K¯UôĒĒĩ^ē´ĩ^ŋTžž•*ĒŌū‚Ö–ĩúŌUõô´ēĒõë]-z¯ũ.šÚZjŸáBūĶĩ_L>­P˛ pbhaÎ9,‚ãŅŦÎ9>"Ųę ģ‚!œpĶAwhiŦFˆ.áŦ†qčz!œuW˙HūC8úø¤C8˙ôYŅĒIĀ´ˆ?Î9h,rtĸsRΉŽĒ’š–ķ!œuU"Z¯á5 ¤C8ú¯¨CáTœ×ÂĒęŊEeō¤´’ŽŖø×^°ĸ’¨A§Q\RéV˛xĄ(× Ä(Õ$ĢV’…đĩ - uņA,$¨$A%Uá ĩ‚­ŦkõUKĨǤ:„ŠiRÕ~’ĨUĨÖ´AWĨUK j•/×ĨKIWÖĒ^ĩúZÕ*¯ĒZ —TzŌM}V’õęôUŽēK ޏUIxIuĨô -/×^¸]TZÂũ/÷ÕZ_\.ŋUZ…פ´ŋŌõKūÃŌíú_Ēz ÂĒáR_ iĻ ­Ēi­Úx"Î8‰ ƒA‡ˆâ$r Ra~5TÖ ÂŌUY ã×ü°Ė?ãÎ ķ‘YÔR4 ÅL„˃AÜģPôōGT”ąÕ „‰œ†b)R‰Ą ?ôĄ(ĨBŊu,rS&:Ēô•?ĒUŌR„ū+UKI ŌI~ŌCĐP—ŠŌU„Ģ’õ Ȱ—ZU¯^’UŌ -k]B_ŌAKItŠ °Ŋi%¨ZPĢĨ ’ĨūŊt‚éia$Ǎ/KÕ}}u ĢAWItĩARZÖēétŊ/…ĨA*ĒázĨ Š ^ēúIzJ—¤°ēA.‚_é/ŽžŊ.Ē•%Öē¤ēAWûái/ĨéBZZč/U×ÂĨ_˙ŌáW_ũtŠW-j–×_Ô% WúzÚaA{ũw6)€Î\#†‚8k—Ä 5Čđ”ËŠÆ*„=X‹CB ĪĮ>¤2 Äē>9H>ä3B9 Ž$9:Ã^Xũ q×ÂĒ!œs„ĐŊŌ´RĮ'äPōĮĻũLuåŅxôŋÕ5ԜÖ/ō߯Ĩ­‚Ō˜p’ô­5Kū)N„*ëĨéZĩá$“ ąéEiYsPŋKXŽI ĩ˙…N‚ˆ%T°ē­* T>•h. ’Ž %ÕBŌéuZZ…ë].–Ą.ŠWJ,*ĒZĒũ}kZú˙¤ŠRĒJĢ ¨/ũĒUĨǝ ‚ę¨/U×ĨU¯ĒZÂú꞊W… /×õÖŋ˙ꗭ*Ŧ$ŋŨWú^—˙Ö˙ū’Öũ%ü$•Ķ˙ũkôū—ÚĶ ēö˜_xTÕ?M;°ļ ‹HW vFBfÆ\pÎ `ΐĸ š @‹4ʰˆYg báČãB$ÍoāÁb4C8ãÔ1ƈÄ~G`‡ Āä|áĪĸ u¨‘G&t˛Īd-ŽC\xŦ¸Ë>C.™‡×šÛü`ķQU›UkĨŠ?P皊,úĒô¨zũIūĒū‚ŌôēK xB—_CÕcô—Ac^–…BJ+I ¯ž ŨaU /Ē_Ô$ãI8T‚ú…Õ ^!B*Đ^•j’ŌŌ (T•UWéuõU ĒŠuI*ÂúÕV´ĩÔ%J–ēĨëÕõ¤ĢJ•WõK„ĩJ—õŌđĄuXZXAu]}/Uë^’Õ$ĒžŊéõŽ‚˙úĒĒŨ/ /ĨÂëõ×ī˙đžēĨM%ú WKõ_ÂJŋũm „¯ š S5ŖŦ ‹pÍĸ ãĪ9€!NĄœßSXôAÚĄâÉÚ|GT"Î= |:™Ô! æîG NmןŅ[,u8čz˜…20Ė9*˜ d „ ēĒÆ‘:izXRŅá¸CRĮI*úÕuĘNĄR[KđŋôĒ”tŠøÔôĨ>i*HUZŌuK]w_ôФŖ¤’ēĒĒ(tUIz_XQŦqúZ $–ŠT• ´ĢXZ¯Âé$–ĩK ´¨*Ká Š$ŠU]*ëũVēZę’ĒJ—éKZJĨ×úŌ×P‚KõĐAa-(UŽ’×_IuT´đē¯KP—UëĒúęĩõ˙]/­U/¯ūļŠ~ĩ…ĶZP´´´ŋûč/Õ}}aA¯ëé¯í}ëzjļ…&Ą Ā.G Å$B ‚A ĪDÂZ ö"Ít4C;ba†„AČ`rĮ˙h^„zčH?D5GĘĢ!Į&?QÅG˜ƒjƒę19–tˆhÔąĖ‚cn€ĢõäŠŖˇĻĢ“ ":ä#Ō¤¤ŊK:…čh JäLéV0¤š:č_U]RĻŋIk˙ŽžŊ:ŌÂ_KĄI*ZAk¯č"?­RU…ŦV÷JŠ$*/áGZÔ ĢQõéi°–)V¨´–5ĨĨĒI Ü$¸TŊ%¯ô ęĄRũBI$—JĒŊ%˙KJĄRRB_Ĩ˙˙úŌZŌ¤I*ŌŌŨuÂūēôĩ˙_^–‚éĒú žŋúūĩKá$ŊŠ×ë×˙˙ūŋ]Õ/­% ŋ­iw¤ŋĨĩĶô˙Ō˙÷¯ŪÔ-ĒÚiØO°š QÐ#Č083™p ģ„h„DDDahYpjB" qĄ0đš qü†qĮ‘ų˜.\<ĮRĮ.ŗĒ†D"LuäîŋŊj!IĒęJÆņĮOž÷ūöHėąû˙ɏ˙ųoŋũnHvŋöļƒīy1蛴ŋ¨uøD‡Ũ[–;Kí(j˙0īØ÷IwA…Å1Ŋ|WļŊ Š…{‚8û“UĻ Øaö“h& zM0˜„ ĄM¤ÖšnƒÂb Ž6)ƒ 4‡+TÅ0 ¨4G A aĻ!0ŧ2z’ P0´ AÁŸTÔ# Ŧ6$ƒJ¨fÄÁ“`ƒ „Á0L4 `ĶMJ„ 4ĶDš Â$āÂ'a¨AĶD[w Ņ>v‰ã’ļ‰Û„ÃDą¤Ú“æ‰ã­1¤ÚN‹úM 'Ļ(7OMũäv+úonŊēŽn&ׄ×_}×˙ŨŨ^^ŋž˙Üöˆ.?ÛīNXîšc´ûõĢŨQëžŌĩ}ÖÖí+K–?´ˇ&8­mh+¨ku &!UēēĩcÁ…{#ŠÅ6“tÅ1Q ˆLBa¤ÃęÅlU1ĶÕ?Á ˜Ļ§iļ›wÚa<^÷°ÁûaØmíĶNÃpÛ´Ķm0?ąÁϚiϘA§ũ¸’|4›EÛ´]åÅ‹úhû“vž pM bŅ8¨6 ÚAŌ'tn|¤á¤cW´›Ļ)đęÅh v@õˇģāÆėU͇¯īԇīąOí{ąŧoŨ?ûŋũr1ī˙&==˙í4Ė*nL|Đéå÷^L}Âö-GŪü0ˇļ‰ŽÂW0îLpöæ5ĩ q[iC Å6”SØ[WKKÛW§ˆM‘Åj6Њb˜ĻéˆL0•„ĐhAˆA„AĻM0›AĄĻ‰ õ Â 3ˆ"ƒ, ´t ’@Á‚ ˛)Øi(g\, ĖÄL&A‚!Ņc†0D<Ã4MMA„oj‚  Â%Œ&š "suMƉF\Ú%m&Â'a„ƒĸ]„ÜŸ4JØDņדæ´đ›KH:MĶĶ›KH7=6“tãŨ~tëĢīõŽ“˙ëī÷W[˙˙_oīūÚ×˙ßëūī×ũ˙˙˙Ĩž×ô¯ž×ˇÃík}úÚVŊŌžęà 6•ÖˇßtÅHL øuiCVMĨŠĩcbĄ„˜k .Á&*Ōbĸĸĸ´ÅBĻ)ˆLVĮ ˆTÕ­ī[¸`Û4Ķm[í ÛMØ}†ûˇTĶ[ė"ãwŽĶ;Eģũ0‹ļšxN‰;DX ƒĸOEü&‚3ƒ„]´Hvp‰Ņ8Ļ‹‡ xMāÚ Ô:$íC¤ÚAŠ S6mzƒtžá銧߃ēN“¤OØÚbŸØúŠpņą†)Ž˙ũŨßk >ũz,{ōĮŋīŊĸC†ŋ˙k˙˙kĸCúũ9ĮuŖ[žX÷a‚ĮhõūHzZ ¸Vœ¸č˜ūö)ÛJöĐM̝ü4Fô­pki:Zi°I† Cĸ˜`“Ģ ÅE6´ĄĻ˜Ļ)Š )ĻMĶLP`ÂPÂ Ļ ˜A‚Ņ`Âdô „LBárCn" á°A›Bė‡ƒ@đƒ4JØ `ˆ'i h‹@Ķ3tŅ‚l&Ljņ„Fá„ 0‰[FöDė:#Ƃm0Â%ÍįLAÂi§A°•ρ7„Ũ?jÜ.›Iۓ¸Dü9;i=C’Æ“ëĢú÷^̧§S2Ģú×˙ī˙Wß˙ūž“˙_UŋūũC¯÷˙˙î¯ø}×˙›]ũßžÕŋ­~á×ßÃJöákkēƒJŌĩ°­ÕĸCĩŊÅXĢJ[Û]ĨÁĨ jÃACI†0Ԋm(ĢŠbƒ ˆLSĸĸŠÅUß}Ϛí]5v˙w|6îÃwļGW†áŨŨÃNôīiÁč4ĐxDŨÚ`‹ÆˆáÜ*&íl"cÂhĐĶD„N( čí¨: °‰ģ„_4Š´7/ƒPÚ% &Ōa¤ÅH=1MĐ6“ĶN“bŠ BtŸĩcôbƒƒģAØÃîNÖĄ÷v[ûÆüWOžîĶËŧ˜˙Ū˙˙ū˙ēõîHvŽ‹„F;ôXôF?Ņ!č‚#šcÕ;öÂđ˜uĶíÕĢu /˙iZ$8i{`ąMĨ`‚˛8FŌÃPÄ&鰓`l4ĸĸS Š SÅXĻ´˜„Ļ)Šh4 ĶM4Ô0ƒŨ „ 0˜A‚aGH0L-Ø0BCÍsgVu'a‚ h‰ķ4Âd€€ƒ40ƒA„ @ˆJIēMĸP øPƒA„ &˜Dá„ ÂiŌĐ éŨĸXŅš|äņĐaËö‰õ5EãíĶhšÂhži<ͤIĩO ´K(‰ '˙ī'í ũĢūū“¤Ü&é÷úéé{û×_˙īNˇëÚę˙ôß÷ŋ÷ûöˇ˙˙Žŋ÷˙˙[J_n˛Įi{}Ĩk}ûÚßon›]+VPu %|+JVˇP× XiFߤĮ +I‡M¤ÅZiĻQL)DÅSÅC D*ģėSOnáßbƒW¸vĶa§vÛģˇMģļĐm§„l>ÛĸCĩŸ¸jˇ.á==ô6vŌuEےvē6¨•°‰ģ¸am1Ũ:ƒĶaæ1M¤§’Ɛ<&Ō3*4 ˆŨáŌb˜ŽƒpõąON ôŨ&Â@ûģĶģ´ĮÆėBczwúiũÚkw´>ëũŨ§˙“¯öēܐūų‡krcģš1ÚŨĖ;˜z0˙ųcÕ´ŋEŽŅ!ûËv‰Ž ĩm[ũžÖ銰“ % &IĩûK iCJÂWI°•1LPiŠŽ)Šb˜i1LW Ä ĶM0L&ƒ!fƒLPiĢ $A„Đ0GVu Âa0‚ `ƒ>H:  `š  ČˆE:ˆũÔĀp˜RøAŸaš Á2‡'1 0ƒĸXŅ}+Iŋ[øBôŨ\ŸŊŅ, ę.õīđ@é>˙OLSę˙é_I_ޗ͝ąZˇ˙}ûÜÃ˙˙īš1ß˙ūÃ_˙×{M˙˙īũ+JáÃí[Ũ}[áŋÃīŊž;…u­+V&;¨8_öŦ0–ļ“L:`ŊcbĸĄ¨aŠ!aCØpą †G WđtÂÚbÄ(ĢQą§ [IŠ Á8x}Ņpä16ŨĒģl:÷°Ômģ ˛VĶaÁÜ äwNƒØDĮiĸPŌl"CļåpjĄ} ›žĢĪÔ6‰ÃŖ1ī Âa^krüPonĐ@ÃH1FeLVĄ´Ō ¤ Đm.ĩū6˜ß§DŖû´c}ãpīĮĐ>ÆûĢÅZË}Súą´˙ūđûÚ÷Ũ{Xaŋ^™1˙×äĮËT0ēōcĩĢūåŽ˙&; ]SíŖåŽJDcū­îMŪámŦ0KW°ļVÁ&)°I°Ŧ4ā‚bˇAŠ`ÂM{ $Å;W†)ŠjÄ&LtbƒL&œ1L„Bj a„Đb0A„@ɐaš `ļCaĐaĒ  Ä0@ÂiŸƒAŸi„ĶA.Á˜Dc†˜AϚ'ĻļštJč–9;tšhŸ4Đ Ú6‹į' Qt›D­„iĸNŅ~aƍô›AĻ‹Æ“û„-Ũ#įNˆíĐnt›§Ņ<¯Ũ'IŊŋĢJá7é6¯á8Mėŋú˙}ŌīõõŌ˙ũ¯¯é}ú˙īßû˙ūß÷˙žJßëßû¯m¯öŌë[I.ÃúPԐ¯žÃJŌŊ†Ŧ=ƒ÷aũĨēm(„ßu~Ō°ˇQ]C Z&â­ŦWÅ1PՊ BŠĻՊaĢX ÖīLSĶOÅ=ĢaŽßģm†Â}ߡwjŨđęčž´E†š,zi„ĶŊ?N‚yIŠDĄáĐN“ĨģÅ;QÅ{ą‡^¯ė/~Ú|1‡Ūøžž˙û˙˙rĮ˙õûÚ,|ąë,}ĸCöäĮé¤á<%˙ëhŒwÚiZûsäĮaoū­ĸnJ鍴›žV*Ō´›KØ}¤˙V)†&a&Âą ˜„Į":bG&ÂÚV(4„Âb˜ĻƒAσĶQA´Ą„Đh&p a#Q´… P ėÕX0ÁNŨ2˛ƒa0™…0š Ņ1ØDų„  žé„ė&Ļ˜MČHA0Đhˇa4tOŨ äíĸW›š% ƃh/p¨ tŌzMĸX侓¤ÚLP7Å?ĨĸæŌnéŊtÛë_Øîƒ~ˆßOدÖ˙Û˙ãÕč:˙øßŽū×åŽģ÷ÖĢ˙¯×}đ˙ũËvˇ&ūÖŅcĩ´××īÖûiCX§XiZÃĻ&âˀęę Xa[Ŧ5bģIŠbŖŠÃ b›V*X…Ķ ĻŊ¨4ĄÔU ĶTûĶā“Å>ŨˇmôÛę=îß ;á„\u‡.íˇiŨ¯é„Ķ&ĐpŅ1ō1÷ŸB%”Ņ+i¤rpäâ‰;I†‹æ¨ č mŨĻ4›DĄĶ¤‚1é:/Ũ6Ô:Ll‚@Ũ&רîž(1Aöĸƒí4Ÿi÷á‹wëi¨O˙ŋOī×˙õ˙ˇ]Úŋü˜˙Âķ–>˙ĩ’=mkŋžë_M¯Áßkū•ė" í-ĸŨ˜$cĩ´ŦM6 Z$;Dß,vŦ0”mĨa„˜Ļ˜„ŠbŠ†ŋiZQM0ÂØĻšĄ 4ÂiˆLS Á‘Č4Ķ Âa2A„ &AĻ)ˆL0D3¸`ŽŖ:Ft0ŽˆÔdv˜@Á„M4 đa0DC°L4NØ čŪÂ'YG?šh•Â%Í0ƒŸ4_š6žƒpŠV•šxŅ´›„Mį ´iĢ~ŋ­'W t­]ĘV¯M§XDšĢk _zēŽ›Iû]Ũzõ˙˙ũ¯ß˙č=˙˙ëūú˙īņ˙õß˙˙ũ×ͧßĢkÕĨ÷ūļˇÚ$;KÛJá7 [[X|=´˜tÚPi}ĨiaԈ@4ĸ­b˜Ģ kjÅ1M¤ÅAĨŠãaD&˜Q Šb¸Q´…vAįØ^Õ5l0ĶûۭÛŨĶöðá§vÚvļš}Ũá5´lh90š.Ū„#2•ÁŖÛTNÚiDāBt_4Â.mb7aÍC‚N:%ƒĸv*Ō¯OO67ôŋ  ĮĐv)Ũ/cz}ęû¨6“ÖŽīáŽ)Šãc÷ ˙^û ķpīũ=ŋė?üÃÂ˙ö‰ũ~˙ķĩžåŽ÷˜w,z;ĩęßÕÕĸO¯“ąû­ņ$>Xív—ūļ´MÚûM„›ĻWoˆV %îŦSiC 6“ $ĶÛ 5i5b›PÚ „Å1LSš &(1(鐃ŽĐ6‚`˙ ØMA‚5 ÂPáƒNw bRpd†t&ÃI‚!(‚hēG &gÄ  &-čÖĐaˆY´4oaڄE톉ģ„0Ą´ĶD‡ 4¨Ÿ4ƒiŅ+kPÕ#æ`é´ĶA6‰sRGIĩŧ: M'M&˙Ņ,|'§¯OLBéä­íÉfŸ×IŅÚēV—˙†ēOôūŸûŸīģúáõßąū˙O˙ÖûũoūXī‡˙ĮWIŽ×@ˆīŋī˙‡ ôH|8V“VŌaũCIēaĨjÚÄ-'ےĶ ,U¤ČņZQÁÂl,4žÁ+H0cLWb­QQLVÜ&)ĶÚiĒ­­ŠÚmÛģƒí†Õ˙Ü=Ü5L#XiÚ&ôniĢĻPv‹§Ĩĸ,;ĻÂL9,~ŸM Ff‰ŊT„wƒÕ¤ÚiĸNÍŖ1Õ c†“hŪ'HÜC☑ãFĮM¨mæ“@ôƒ ž'ã}Ō é:Ll&7Iøũ˙Žž˜ŪŸ¯lŽ˙˙ū?÷ëų‡Å=?Į$=§ß÷ūÕŋõ˙îĩaĸCžũ4Đ"=WEŊ#ōĨĢ{L5šc´FãŋDßÛ[᭄˜ĢJ›PÅ7ąUÚēV)°‚l$Å;MCKp“M0ĸĄĨĻ)ŗcj@Ŧ&!0˜„ĶM4†‚ ƒ0„@Âh Âh0ƒKŽhpÁ¨0đ@î55ƒ X@ÂfaP`ƒ3 0ˆ_gķ…L aAĶ  i øaQ¸4 s[MSDė:hŠáĸQEûDúDņĻ“bˆá‚ܔ4Ņ~Â=Ė n›WI´Ev‚~¯ÕŌ39(ÕÕŌouéēā˜tę¯OÅt¯ŋ˙~/˙žŌo÷˙ë‡_˙%ã˙˙˙˙$?˙_¯˙žŌß­÷WR ûŪ¯nLvo[î¯éC…iZVŋ ~ôû XĻļÚLvŦ5bĸu¤Ú (¨LTUb˜Ļ  ˜¯a‹ĶA­…  Û¸bƒ!>ûV˜níîîÂ~îël8pÂiÛÃDQÚ Nǚa4J QÚpŽŌoĻ‹”ŅpŅ8ú'Ōlà ËĐtK*Dœ:%މE ŪH: šŌVÂéŧ:7§WØÉÉ&0ô'H7é1QÅtôŊŒ;ņēûĐaĢžÅ?o÷~?÷ũ÷×īī$>?ũ~úú˙°ą õšc˙~ÖLz&ú‰šœ?ģûíaĸĮĸCš1ßūīđšn#28…Í^°Á&6øa&Ō`ÁkV­¤ŪÅEXJÖÅÅ1AŠa¤Ķ /`ÂTÂb›JĶM;A„ŘĻ*)σ ˆVX`ƒ ႠÂ$Đa ašƒ” 0ĐaŨˇT ļ Ķjh 3ę  d₠ø` Đa:a;Døĩûˇũ×Wû˙Ú&?˙ũũ˙û×ŋ×_÷W˙ũ×Wŋīû_ž ~ŌžÖÖęŌ} .žŽ˜i1V°ÖÂV”L:†ļ—ØĻÂL4ĄÔUZLB†ŦS ÃIŌĶÅ2{ģšbš¨âĒ!\5Å4í5ļîpnߡîÛwh;ũ§mÚmØ6Ęį 0Aė"NÂ%nĶNĶAĸNĶôų<u 4ƒhųNJč˜í„\P@Ú'• ĸûHĐž›PÚ% &ÂG‰ ÚMͤŨAŅ(„ƒjüS¨1AŠëH:‡ßcu|=tĮûAØũŽ>ˇ¨…Ģũ{ą¸i÷Ŋßū=ũŪ/ /ōĮōcõī_䇮Œ>EĨwü˙DĮÁ횇ǎũ¯0ūŅ!ũŦ˜úƒ á-+Kö¯QV“i6—V‰>› 1PŌmXØ`ļqzv°ÂÅ0Čâ1V‚bša„#„ĶŦBbš BŠ 1  lh4 S˜ ÁCA Â A„LS „ `‚äų0AHd¸mĻ‚Á Ãaį¸0ƒ0Mƒ0ƒ ˜Pƒ ~i ĶEķL&š:iĻ‹įDâ­ö‰[DyH6œ†‰ķI´J$ė Ōnm]›T´Ž´GĻé¸N7'úč'ŽžGē t:ū—N“ĢúaĶ˙¯^˙ü˙ë˙^×˙˙û˙ūÃKúū¯ŋīë˙ü?īžé‡°Ōũzĩĩū׈WÃIŠ´­(a&á0Ն”4MÚZ°ęà ph&+b˜Ļ;Šm&*)°‚Šą\S´Âi…ôÅSAŽÃéŨŧ1ĩĶUÜ0ÚvîßĶĻė=0DŽM;¸aĸ|ÂØA č“ŋƒM4ôĐF‡ iĻ‰Îœ$AģÚ'ŅíŽčútMč›ēm|'˙DxŌ ĸQH8Dx*!6“¤ÚGÃēAēA1žÅÕēzú¯á÷¯ŖŨ' û˙ņûîôÆûÅ{˙Æ˙˙ūü˜îL~Ė=>˙ūûŪų1đD{Ŋ&=BZ$=°Ōa‘ÅŅc‰ūũXaŽÂŪÜąßk}Ĩ†Ø0A4é6“i1LAZ°Â IŠƒ./V(‚ mC˜ĻŌkØĻ)Ļ!6Á>–iŠh1M5  iŠŸ,0M0A„ &ƒ0ƒ@Âa:#Ŧ0‚ 7„ ø@„A Á ŖØ4NÚ'l&Ą:i6‚‚m4NÜ?ÚļmžčœôEÆĢ_Âé÷ĶÜī˙˙Ģ×ģ˙{˙˙ku¯ū;ĩēĩ‡_ĩ´›ĻÖՎęÅGa(„ÅU¯dėSULB´Ãi ôûøZ§wa4æzh;Y9ŧŠ= 蛴ka4N)= a´ĩ'm ŪũŪ&Ō¯õēˇąOŊéØû÷˙˙õ÷˙ņ#üąōĮũ­¨5ĩžŅ7¤ÚW°Ž“¤ÁÔ0”v˜áĨ %°Œ10šĄ„ƒ0t@,ūn ū›^ f (,,n = 247leptonica-1.86.0/prog/recog/digits/digit9.comp.tif000066400000000000000000000172401506303110300217430ustar00rootroot00000000000000II*Î<2@ÍLh2€æƒ: t2@…Ėë…$  0ƒMv@ "xÁ> ÁAψiĸ|Â7†m4N0ĶĶN‰ãA„\Ú%Ô_4 éZt+DËđŅ>rxé7"Ž×A6“} ¯tŌmzŌaĶĢēAęéũ_ĩŊomVëėwôÆßZĨíũFßõ×ü?r8ũւm_A× ņĮũ˙_˙˙˙{˙ū='˙˙Åęŋ˙Üą˙ų}ü"<=×_žūXė'ū‰Ķ^Hwܐõø’#°Ņī{TF=}Ņ1ëņˇģ}ŦJ~ą$;DQß{jÃVÕĩkŪ6?oãm]XØØÛW 0ŽÁ§ciĻ8÷ Õß4ŗĄ2#ĮdXģ˛,\ų—6E.'qJ‡ÅÚ{ŽqĄážíΨhjޤHÛ◠?č?›ué×]%¤GA#Ž—„–‚„ŗč$•ų{]$“[Ŗo }$MWS–ßŌĨÖŠŌ_PK —IĨ…Ö—˙Ō¤¨ —…m+KúTIu‚I=BU¨J** *J‚_‚AˆA˔$b a)´Šé1@ÁLUÂ": &ƒØI !0ē ČrXv‚ƒPb‚P3Šh2"„"!ÃA¤aĸų a Ļaˆ‡ L&š74h&Â%pšaÆ›†ƒAĸvëh•†“jęÚ šxäŦ4­5 ĒO´NM¤ÚV—é6“ú%ŽŽ^9wMôûVŌøí&ũa¤ë¤uŧ‹}´˙{ŋ˙ÔlmĢ×Ļ;˙ã­X˙§î˜˙_˙ņúVŧøûĩøã˙ß˙˙‘G÷kņ÷ûüûë˙˙ņr1ßđíšŦąūˆŖšcŋY#­ŧąÜŒvēŊkë!œw‡ÖŅáĶHvēû1ÚōC÷ÕÛĻ)ƒx`Ŧ=†vÕĩlmZ nᅱƒ ãėlqƒ"b āáÃ'hvB 2Q!“%áĮ}ˆCāÍÜ2î> ŅЈbėųõ]PÔ!_ņô é)õŠsZ<‚ÕU4ēŨt}.ĄFĪÔßßP•.Ф—A%× ’uũVA.—J¸W%XJÁMĨ̤KÂ^—Å*V”h:ĨARK ˜‚Kō%'Z°HĖ IÂIa&K šai`˜™ LPA4N,SIO@šl%„ BA4#\ h@‚ ŖŽÄ(‘āÃ:°dƒl…9‚=HÔgB#DD6 aˆ   Á4CĖ0ƒ( ‚  9!ÚiĸNÂM ܘ0Ą†ŸÉcDōĄ†ˆâ‰ÛD„ôŌũCôĐA†‚t›Ž›ú%t įODWi­Ũ[Û_¸W‡VŌmk^“÷†éēīÕŌa×MËrŦwMö˙ŌרõxqĮk˙ū?˙˙Į‘ûīņĮą˙o÷Q˙˙˙ɏŽH}ŋ ˙ßû˙éQøō1˙˙˙rCũGČĮčŠ?ínŧ˜õÂ"ŽÖÕ[īĩ‡´F?ĩ~ęá~)‰ī°V8âF8ÛŨ&;[ŦŠđÁ…vŖũŨ¨ũØ`¸ØÁ„NgpÆáÃģ°Âģsä\Ä8kŨ‘ŧ4 P+†E ‚C>>HhÔCEāĪĮ:á˙Ē-WÔž B?ŅĮĒA-są¨ApONĄ*UJž—?6t—tē^põĢęšGzA-zI+P—¨Kp­, ‚IuJ’P’›ü$•ŠŌI°IëHáÁ(aI^?H-b‚‚đŌŦ ĸ AG bšA N5ôՄ]AA0ƒ,0Udaˆ@Đx`Ų̓’ …"ȇ!4.˛G"j 6%ø Ä&4AĻA‚ Ą—0˜@Ķ' MļDp áĻh&Ņ|PƒNžÃĐAŅ+a4N(Ú'…ÕíƉÛč&ĶJĐAÕ ô ˙Mĸ7¤č Ũ2uŧ•‡LUĸQí&öŌ =ēom^§­¤ôīAŊë_×IŠûȃ˙˙Žö+âēa€˙‹¯˙^×úaū¯÷˙ãīW˙÷˙Ûõü/ņ÷ņņ˙¯ø]}˙Ņ!ōCŋ„Ä9!úk&?š!ë°Ö˙}í91ÃM[M{ž6×ø|5bDąkaƒš!ÚXDQÚŧmĢûØV@ØV8ãaíŽúģjĐv0ȃ¨§wø i¨ÁÛA;¸2ģ´āĐh8r<‡Qâ4PŒĐxė É<98žg›<3Z –`ž>‘œa„U'R4)Pâ•=žķ ņ 'ápüŊ¯ŠJ‚}%§Fä’áU­%ĐH%Ô%柍UĐ@—­p‚ $—ÚũŖT­Ij‚IZXI'Ō¤+„IŠB‚K…Š a “A –‚UA EP%éP ŠCZA¨H ‚i¤ ŠaAAZFƒÁMAA„ÂŽ&á#ļa‰ÃOYĐÃ!H$u"GQGAŸ i‚ ø!é „Áv‹F( ØAϚ…LŽ Dā“´Ą„a0æ‰ÃMÁĸYDíÉcI´ƒ ƒi:rNĐhŸĻŌŅ,ĢĢtÚMŠōA6Žļ‹æ‚ ôõč0h Ũ]6“ņ]]_ĢĐtÖé1ôÚOü{{ūôÚW"˙ūūļ“ ˜ũ˙÷‚ ˙˙ã˙ãŋXũûߨíu˙īۘ˙ųcë˙ãū?žīäĮ˙˙ūŋĮß˙zņvŋöēēđõųų!éĸ(õmdQÚļžÜąęˇ$=o´;ÛL+ ,Sur1юĶ_ĩbF=°XøŨŲėS G{ūĮi÷i‰CûI§v''LaČf ̊A§ 8h1¸dnœ0ąÁ“tj,|†3SÁžä1Ž_Ŋ*\1ZÎƒŌ…¤yé ĒĒŧÂǤqõIÂõ9áN<$’.ÖZPĢA,$šUéiĨ}+ ’Z¤KT“ĨJ-Õ* Ši’.’đ‚3XŽ-BIE$IĐIh ”U|%N$Đ@‚,„´‚MiAj‚ŅáiŘ¤Š¨ĢÁAS (A„ Á3—0˜Q#ŠČB„ ĸå†D ŒāĘa„JxÔĄ4aƒ0`Š4M4Âh0ƒ'f%5 Ϗ(0Â$í˜&i Ņ;h:%”Ņ+i„5‡ Ųp!‡' ŽÕ4›AęĶH6‰ķJՆ“‡õ‚ =:Ņ:ˇ"ŪŽēéŌnG zaĶĸ\õnž—MĢĢ~ˇč ūˇôčh&˙Oõđ˙oûõonŊ˙Qõī˙ôøŽŊø¯×Į˙Į˙QíĨÅžŧ˙ņŋūŸ˙˙ɏ[^ĶøÕm]ˆĮ}ÉdĮßō(û´īīŋė-­ĒĐīäcėGɎÚÚà ÆāĄ‰Ŋãĩ†ˆĮpÁmcøØ˙ļ üo[ĢģAŠ ×wi§†GÕãpû%qÃ˛ ÷îĐb7w ΁—qđË´sáA•h‘Gƒ-îȝ …ĮĖ:9¸sŠ‹‹ rI*ĶZZAæ,ŊũkÔۅÂSČ%é&ФsJĩЇ„Š4ŧ$aWúĩ ëō;ĢI ZéRCA~­…°P––ÂØ$’XK $Õpœ,TUC^Œ$/}* `žÕ$ÅXč$hՊ PIŠˆMiB°˜A¨‚ M4Đ@š°A„IV ¤a Ļ5 ŠbG3¯Pd1A9z0n~=y`˜&„ĄpË ƒ30ƒ' •…MEģDœ; §-Ä4đƒL&­é§HAω@iĸ|Á‰[D­ÉãIŗ4Ą4IõmÚ=šF>EɎD°›’­ĢōCû[ĻÁÚû…|:ĩąÚÚöŦlqaXØkk /ûL|õĩwdnà ØÄ(¤ ģģđՍÜ͘=ÃŽš㆘aö7UĄŲ: t#ŠÕQԃ Zƒ#t!ŌagBõÔáô*ëķ ARZX=Ō„’J]%¯A.ę‚˙O ’ U3ūŽŠ$Š'ŌI— “ĨU]$NĐ-÷ŌŌÁ ’á#Íp•$Ŗ6Ō A H( J’8ÂQÁ KB¸W@–CH'I+ 5Pā‚ + !F@H&’Ō„Ä&ąÂσÔ.Rƒl ™u„œ *‘¨C¤ÃBjV¤B„ĐbG3^  ŲÚ"Đ4Í Â`‚aP'A„ĖķF˜&‰ÃAĻė&L' ōOEÛWDų ĐMĸQAĨhŽÚ%y>j‰ÃN66“tōyIŌ ÉCÃĐzm(hŒvA´õÚļŽˇN“kŋĶ &ž:´ë֔WÚ˙t~Ąũ&ū÷ūLvĮ×ëõī|v—ī˙˙üo˙ŋūĮ˙ũ¯÷˙˙ûq˙ük˙˙ū˙Ņī˙_Ö?˙ũē÷ßrCūĶۓˇß¯hŒpŅq"ŽÖ´EŪØ/ļ­ĢĻąNÚ"ŽÂļ)äíĢëa&äcö8˙ 0ąˇģaØØã|;ģūūt0Čō͇ ƒ;ļá×Ç ŲSÁÁ…”9˜qڍPŠ Ž„8Đ~ŗQUč†_ęĢj=#ö:ÂŌ0kI$y­BĶôûĪ}tú }éiu­x&ŠBZZIŌŌ„‚ ŌĐ\*„•+ JKT’­ “Ņ…ū´Ž´ĩj’4ôņXI(IŠHbŦA&Á –ÛJŠ0’@˜AˆAR´ A T4‚A0L)‡N„І0P(2!įLL› ‘ԁØl8PƒBL Â Ėā‹pÁ ˜   D‡i„ Įh(~pĶL&šhœ4䝠ƒh•‡M @à  ĸVĶ’vš$;¤ÚAĖ%AĢIŊÂMÚļ‚ Ú@ܕŌ>ģ÷ĸyĻÕái^éũ6‰ķ­'„ÁRŌc~;˙DHĨtûĢĨzŋãßÖúĮS­˙Ž?äæû÷˙í;Ŋ˙Įũĩ˙ø˙˙˙û˙Įi˙īîĶ–=˙íŅ!ŨčŒpä‡Ŧ4Eĸ1ßĸ(ųcš!Ũü0ē°Ö8jĮ˙$?ĩÖôF8{|oچ 5°ļŦq$;]]ÂTų!û{G ģ`“ÔyÎĻî0Žö!6 ÚLnŠ ŧh2ãI´"¯ž.!ĶQpÉG:/Å Íö‡žcÁ„Š)Ž‚ŠR‡â éēAŖUIü,ģúÖŋXTĩ0~!ĶŖŠ’ $~Z^Iz‡ALÁ}$Õ$’ũt’A-t’’ŊwA%IPKÁ ’N‚đ’ĨÖĄ$’¸T°$J+øđ“ $‚IK 6B Ķ §IŠAV‚‚LTAA‘P i4Đ L&+'Ē R4Ám1 ((&aC"čŦΘdDȇ"Έ&P! Q.`ÃĻ…C„Ŗ Âa0™ ˆ4 0AĶĶ Ļ‚m4M0š 0š‰ã6#piĸVŌ‡hŠîÂ#vˆíϚ$íĮI¸kĸ\ÖũîåÍŦ&éĩDŗ@ÃĻõxI¸MĶîĸé<Ÿ4ƒ ^J4ÚZWK˙uĩéŠc¨Ãk}ûl“Šĩū¯ë^ž7˙ũ?úNãĻŋ߇˙Ô+˙uō ˙˙˙ßÛ˙˙ˇūîūę×ųcũî˙ûũŊžāˆ÷ĸCšcä‡ö¨Œr äAõuû×˙ᅾÂhHŖĩŽü=§ØjØ-ĢjÅ1ą"Žä‡ÆĶ!´Ũē˛á#a­ŽûødqØđÁģēą‡}Ú;ÕčpČGNíAĖÄ îėŠ?ŸŒĢT9Ļ\‡$" ģ“ŠN\ ’ú›ÅÅĆP…ĮëH-Ą„hŗAđĩëõJbÂAJĒĄRILZ ’ĒĒúõÕ’¤đŠV•: u¯Jŋ„$}¨$—IU­…A$’^x(JÂH$­‚[…t˜¤‰Ō i’ŠIŒ$åɊ} ‘ ֒Á ‚†&!4Â4-Ļ* ‚aAĄ•Ĩ‚ Ë & A‚aS$B…đ‘ĖKŖ]C",d(dÄ‚%› húeEØ`ƒ˜āĶA„Đ`ƒ'˜'MМHˇ Ú  ÉÃMĀŅ+„PštŅ(­Š@ÚMÉå\ AŅyIé´áÚ$ī%oŌÛ[VMî“r7iŦ#1¤ÚMîļũíĨ{¤ú"ģ^žõ˙÷ëīQV‰[ û÷ú _o¯ž=âž8ū×˙˙ū?WØ_˙˙˙#"ß‡ xãxã˙øīåá˙ɏãˇ˙ū˙“&=VäĮÚĒũ=ūŽHw˙É˙°šÚČu̝ûfÄš!ÚōcĩŅ}Ŧ5{Ûīcmcuca…ö8×ßö7cd3ëm&ÂĶxwdGģī젃P‹ŽÜ8dcĮ 8o!đeőŧZęcYĐĖÁáŲ#” Ŏ:ôyi)Đa,(éiŊ% °žoé ´\éVē4ŧ.b[Ât—Ō~^ázj—IëZ…9$ĩéS •/T‘N_Õ ×\$ģP–č$’kjéj•¤Ä-BX IŠŌH%×éa ‚ˆUq%p–ę˜ÃÅ1A'j‚iĒ BÁ4Ķ@‚„ÕBĩ`‚ —ZdČE: †d aȨ!„$wˆR"¤š’C Ķ 4ÂBGÂ!<2€¨0ƒFĀĶša0‰¸i ˜jaŖ}¸a' ĻƈĮi ĶJÂhž4ĩn}´J/ØOVm>Ņ.öˆáī]Z Ō¸NŽ^žFí[ĻŌt[Ļ×ßŌęä|ûKA_ūƒúžÚWū“ĢėlqũņˇĮúõô˙¯LzúūũŦĮ˙õëúîë˙ÔÃū?ęXī˙í? ĸCū?˙˙˙˙ų7z÷kŨōCä‡úˇōcŅ!˙ë~čŠ>*ÚŪßĨÚē]6ƒ Įĸ(âBø`Ŧ5°Ŧzļ”5†GęÄnĮ¸+ąģû>Ր]á—kãvI§cmXj[î;†™=LJ57c c១÷qŲ㝠' ÉäŖM >Ëš8”=*GRk$’t tqé%G—Ö‘Ŧ“U¤—ú_9RK_ׅëAkôšéŌ ~Ŋ$ĒoI+A-éĻŠCZ­ IŌĩJN ĢH ĸ‚V „Ŗ,%`’LU%ZI$IˆWZĻ*(%N3 ¤h*°ŦBj 0›JG ¤ … ¨h0 ™ĩHâ AL & L('†H!ND Œ2Z°ečD ˆr!Bšh4ĐafLÂat[†š`‹æ‰Ŋ4i Đi…M:@Ú%Ē‡H6š'ÔNØMЧk[AZ"ģôƒr(ô›H<ž<áIXjˆŨ­Õöá¨}Đm~Ōmp›‘ã„TEŋãt˜úm_^Ÿy:Ŋu Ÿøúēę8§_˙ņ˙÷ģ˙ī˙øûëú˙˙ŪÆüvŋū!Éū¤ĮËęŋ|r1Úõ߯Ũ÷üī´˙o‡&8|ŒvވĮ…o‡X`ÂĊ?öB>áŦ0ˆAÜ0Xõ°Žō7rcá­ĢÖqąÃŠ8ŨŨĩcucŨĢģ† xÜiŨŨŪá§ØđėŠ=]ô˛ŊÆ ×Ús4`P`žšdcΤá—wĢШHODá C„ŽŖM ĢÂj´ĸ (|ÜĢ›ęš K¯ Ĩ]$é$“Ė?0j¯XI*úÕ.š¤Ÿ…é$gA°%ŌH%JÂH+“¯IE’ŠKTˆb: 5c’ $&)– ‚ĻŽh:ŌŖáI(­&š´M$4$ ¤Ą4H&š°L` Ą50˜PAĻ’ Ë80`Ț‡"FD6‘H"Û$VÁÁ‚0ƒA Í&L Ķ›°ˆ‡ t rvĶL&“ 5ŧh Úi éĸxÂ%­ÍDŦ5ĶM&é´Ņ'h•ēú ĩÕčIÖŅŅ>|5mĐ:MŅŪëīV•­Õ îēéĨūnĩÕ÷õut¯ę?o¸Wę˙ßņ˙õ}k¯ž˙QüßÛīņüqĮëģņë˙ũī˙ąQ÷˙$?ûõ’˙˙˙ß˙ßčũy!˙ގ˙{r1ûkČĮɏ‘ŪäĮG9!ßíÉ7[[uŌĩĩŅv¯ŽŦ?^Âļ´Øa\/Ã#„vö;VŌiŠpėQÅ6ãv8đá‘GšĐ˜ŨÃ<'jĪÄqNŖoSĄ†MáÃ&<8¸dQæyqÁŲã ąËcA™ãGB0ņÆ Đë˜y‡WÖ-utrĨŊQķî“Uđ’œuŽž•#ÚĨtŋúĨK¤šß é-t­.Ž:Â\ Ŋi,-RęĢ ki$–Š4H P”BV“”$ é1XPJ‚ÂM‚M‚Õ1@‚œ$•E%„Ō )ˆL&¸$ĸAĻĄXL(AσGVĶ ƒ ƒ džDC$Ø6L h"5@ƇĶM`˜D!ČD0Ļ Âa94 4Hvši‚ 4&ƒĶ:iĻ‚äė0˜DcĶÕm‡%Ļ‰ÃÉåĮKI¸hnODĄÚNo䝤 ƒ{hŽŪÚ øi:Nˆí¤Ú (:Aéū“Â˙ywútŨ?t÷Úˇ§īt˜í&(:ŋ¤ũüoũŋ˙˙õûI˙ëĨ˙ũÂīĮū×ĮÖÆĢĮßĮ˙ë˙˙#ɏų!˙ÉöÕnF>Lz\ûíŽû˙äĮap[^F=ÂúÃŅ!Ú$<-ĻļąąôÃŪLv­ĸ+ĩc[X˙kcĩĩû˙oa…6@Ã ÆôėV‰C ÆėÉģÜ;¸aáÃ[˛ ö˛7‡w´N#†hGRc‚Ã&ņqÁ¯gAė„{9äė“Ά8ũ7C(3u •n `čķ¤ŋOæĒáSÍÔë—yĪĸ9ÂÂÕ:ŌK¯_úO ëĒxKaPARÕwôúÚFęë¤ēA#0DŠÂŌũ&*Ē„Ŋ/‚I›K }$ë_a(Ļ4ąA$‚ZV ~)ŪŖčĩ b˜ Å1M0ē čĻ … „#i Â Ķ‹A¤D1I!Ąž°ˆķ†„!‘Ô„ ) B0‹ļ˜D%"!Ķ`„ ´ĶPƒAú'l Ķ úiĸC´i´ĶŅíæ@ÃI´Oĸx Ņũ; ˙z#÷ËhŒ}HŖëŊ?_“á‘á1ÚáGkũīĸ1ōcŊÁ5a…†7û|w$?†ŧí˙âBŽ Ž6?`ÂûM…mXũŊĩa‚ŧaÜPLa÷ŠđĐn˜{tÆÜvJ.ŨŧØ5ž ЍGšŒh4u3 ¤ƒpîhÖĮëÁú ã]ĶĨéēAuåImCđĻí§ ‚œ-#īOĢÖ´“P’W¯ÂTÂWJēæ-%Ŧ%ZIAZ ë iGzNŠ%„Š/֕tŸ­LŌŌõI /t‚]­Aa AĩH$ô‚l%ĐDȤđk Š&!`4ID  ēj*Á‚á $_bÅS™‘æ$|ę75ĮB Ää""#4ŦđÜcƒ@͏N› '°˜Dņˇ´´ŅĘEę}ŸIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒRIDAT™=Íą € …áßHÉŒbâbv,ĻqF ŧâ§R|ÉĢūGīJ[á ēBĸÔČ%‘[‡0e‡[§đywū‰ąNމŗXĶÛãCQûlģ>—ĸ1îŲŪkIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøĪü0Ô1|`°cxĀ ĮđĀ‚áā>†æ?lpĖü‡ 3@đ?dĖƍȨ¯áÃ>ˆš@ķ?íųÁøáû? Ŗ)q‘™IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment0¯ķŊĒUIDAT™MÍą € …á_Š+Q˜ÉŒŅÍÅ()ČᓐhņU—ûũrœC•ŠQ6ãnFnėSt„]ŌüŗLʒ‹ūyЧvĸ6ŌØėø9p#-?ŧ’IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment0¯ķŊĒTIDAT™UÍģ Ā CŅ‹^AÉ…Ņ ĘbHY„()ž |’"Å)ėÂĻĶQ•ƒ‚#Į]-—N˛H3ˆžšųgeä͌ūsę–ǐ°äšŊ>üøķôˇÂ&–´ôxIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRņ—ˆv pHYsb&2 tEXtComment0¯ķŊĒ_IDAT™=Îą €@ @K”Œ#0ŖÅčË(ŒđåˆāĀ‹æĒØĸž7fâÂ$ÖQØ ĸ-Šq†w<‚`d'3ᖱŸÅJž¨žš†ę&Ú웄r´€B ËđĄIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ķŊĒRIDAT™]Íą € Ņ“‚’…YÄŲ 7 ()ČĮ‰¯Ŋc\§ãhXętXr7uObˆÂ˛ŊúŸųÄfIU펤ŨŧxôqęKô)Ô=(l4 ¸IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment0¯ķŊĒXIDAT™-Íą Ā Fá‡KGp’ +eu4G˛€eŠpæĸ_ķÃŊcÜÂ@xI<åéÖҜĨyK fIP/(y ŋšJܲŪũĸ6‚ļNmjģĪ‚ōG%QŪ=<IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ķŊĒSIDAT™uÍ1 €0CҝĮAIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøßü‡0Ô0|`°b†< đ04ūaahū‡Œ˜Ą˜ūÁÂĐø‚~ãa8đhĻČė =@Û˙ *ķū‹NIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment0¯ķŊĒSIDAT™mÍą €0CŅH)3BFÉh4L–Š5!å§ …ŽâInl3Î`8;&*…Ë Í3‡'Y_[üaRöO’§;YĻumjˇ“%°Eŋ*ę˙5‚/u.Ŧ*(IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR@Jˇ pHYsb&2 tEXtComment1Øô<,IDAT™cøSĪđƒŸá?Ã0:F 0ô ’éj`dh```’Ė ėDŒ"Κ‰IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 8W pHYsb&2 tEXtComment1Øô<*IDAT™cxđƒĄĄ‚Á5X0°`xF`Î}€Š@˛ ~^‘>/sIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<+IDAT™cx ÃpŒ`ˆ Č0|aøFp < @ 2‰”0‘‹IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR)ā"_ pHYsb&2 tEXtComment1Øô<"IDAT™cxPÃpĀ„Āh‚ ƒ} =#F  ŸtņãĶV˛IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR M¨Kˆ pHYsb&2 tEXtComment1Øô<!IDAT™cxØĀĐFČČ=FĀč! Ā@ Ŋ p˜zE„Ž/kIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR@Jˇ pHYsb&2 tEXtComment1Øô<8IDAT™cøķŸá‡<Ã~†ü Ÿ†Āâ°"°Žė 00``h’Œ ˙Ûô_/}˛ŌIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment1Øô<3IDAT™cøĀŪĀđˆ01c2B0*žÄ€ŦŒ@ T?ę?€a)—no38IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment1Øô<)IDAT™cxĀĮDŒĀČø€ ąÃ b`8AL ?äš'´!ĮīIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR‹ęčj pHYsb&2 tEXtComment1Øô<0IDAT™cøaĮpĀŽĄÁށˆä ¨AŽa}…됨\ ˜01üųCōEĐ`ĖIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment1Øô<$IDAT™cøĀĪđŒ€Q1€?Ãč*j`€ĸŒTeCAYŊIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment1Øô<$IDAT™cx Įp@ŽĄAށrĢĸHčC Š{ ÉåŸeYIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<IDAT™cøWÃp†ĄA= "$˛Ļ“ ĐæėIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR–īØŌ pHYsb&2 tEXtComment1Øô<1IDAT™cø!ĮđáÃ>†bŖ6†ØĐ:DL  ¨ dČį‚á’¸%[PIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<4IDAT™cø÷‡á Ã0j# ’#†6 `č Ų Æ 0t€ÃNŖu’QkIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment1Øô<)IDAT™cøaĪp@Āh[ã}R`>īę§ŊLø0¸ôh™˛IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment36úėXIDAT™=Ė1 €0ƒáŋthĐŖx,GG7G¯Tpđ(Žžņ b E>!„Æ@ĨtsĪ“858û&‡ĶNY%9ú[Ė —gšķ[$v™d™hôË÷mÁ_,ÔĨŠ{IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment36úėVIDAT™=Ėą Ā EŅ\Ā ˛‚#d$GR¸V EÖ¤°}åFPRœöp7q9~q>âęJ-OIÔ-b Čėĩ& pHYsb&2 tEXtComment4¨žyŗFIDAT™cøĮĀÃđŠ@ņ8–aøĐ Ãđ„Č0<âĮHø8 ?ahá< `ŒXūå˙?a(ļĶã'1fí IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗDIDAT™cø˙Ã;†HøO?°cø„?ņg(ūÄĪĄø<÷?¨ƒb&†dĀ“cø˙Á ×1ü˙ũËĘ8û¤TōvIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žyŗKIDAT™cø žá˙a°‡āö ?@đG(~ďâ‡aøA=C;ķåøđ13#†F°Ü˙ō ˙@1ˆũĄ{C-&[(‰IENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗFIDAT™cøĮđkāøƒ Ã(>Á?ø3?°aøÄĪĄø8ŸPÆũ@5í , Ė ĐĮ, ‡ęūŖã5"‚3bīp÷IENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗKIDAT™cøß`ĮđAŒ˙(@q‚Ã0æcøđAŽáÃ9†PüųÃc(> ÄĮø9˙áv L@Œ ‚äfaā˙õH2™ˇz[IENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗLIDAT™cøĮĀÂđˆ€ą 7Ø0|hã ü(ö„Č0c0> †Ą„jځ˜Ŋ'ø„m€¸†á˙ū-ę(å˙Y5IENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗKIDAT™cøĪ`ĮđAŽá_?cøÅø'˙âßė>Cņc > ÄÍ@ĖÆuPš‰`c0bØ´į˙ ~Å@¸o‘.Ŋî IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗJIDAT™cøĮđƒáC˙€â`lÁđĄˆX0|â‡*Āø1c 0>Äũ@>ķ1sV0ŋA‚á?Pū¨Žę,Dú¨PaIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙ãÃ;† ü'ŠØ1üxĄ˙ņO(ū ŏĄø8>˙AŽĄ˙C˙†tĀÆĀ”˙Ã@õ`üņÔI5õˇĶ\ IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR"‚/O  pHYsb&2 tEXtComment4¨žyŗcIDAT™cø˙Įžá˙~ ÁĀŪĀđNü nPöß ņDüũ ßĀđBšAÄg{ŽDM>b”mĀÜĀĐȀČqû†˙?@nų&äQˆß˙ÕŗC<ƒÜĐIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗGIDAT™cøßđáƒ˙@Æä>€1”–cøďØ1<~`Įp„@p?2n`c```b@$ÆĮđ˙A&ū÷ÔŲ1REh\cIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment4¨žyŗGIDAT™cøĮđk~0Ø@pC ÃO ūˆ†#ã5 ĮaČ? ÄÍ@Ü4§°1P\†á?Đü˙@u˙úūüôx,‘i Ŗ`IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment4¨žyŗNIDAT™cøÁ‚@lÆ€ė,>ņC(~   ‡p0n°`8ŪPÆí`üƒĄ˙Ā~ ÍÔËĮ€4ņį ˙fĄaLL,…t=3BIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR#Isœ pHYsb&2 tEXtComment4¨žyŗaIDAT™UÎą €@ Đ/rŖ8š)ítÁUÜĀްÍuZHĖ' ^ķH˙˜™ĀōāėŠ!;šČMęOTuŠ&‰ˇ3ĮĮL6–Žč:ÁB„ĢcA[Ôŗņ¤ķLyT–u û3IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗRIDAT™cø˙ņÃ?; –cøŖÄ üãc;†@üŠņáu`|Ȇáv>`ĮĐÜĀĀD` žÃ ü˙rPĖĄČ"Ē4÷°ŧˇ$IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment5ߙI%EIDAT™MĖą Ā CŅĸ d¤ÜfI”Å< ƒD 4¯ú–Ņ)ŽØkvˆû[Âøšá i= {ēĶĻZ™rn`ũNJˇiŅw&ø2Hî)IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%\IDAT™c8˙˙ÁІ @šˆ™˜ˆå0´åú‘đüũæå{€j$0´?P`8Ä@ilÆ ō@Ė@‘!ĄjĮö ?ęŧ5 ¸eßIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%WIDAT™cø˙˙Ãū ˜Ą˜ˆå?0<ŠŋâķP†|â ąÃc ū†į˙``čá í@ÜxĀ€áCõ2íÚņī˙ãÃA‚]°uIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%YIDAT™-Ėą €0 DŅQ¤ °BFËx´  ­épA)ždŸÎĻ=…F §IÎū:įĐg›”˙,3[ëāp¸D퓤!VĻžõ[ũnŅšW˙•/ĀÅ•IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ߙI%RIDAT™cxb÷€013ŗ1?Û?`h˙ŠûÛ0ôÕ60$04(04lP`hū ĀpüÃ4<(.ÄüØÕCíxĀü­”14&û°MIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%PIDAT™EËą€ DŅĪRc)R3´ĩF†ļp%ĐžÂhđĸŋ‹- nĸ8š8‡Ë•Sdo™nˇDŠŧÚÃ~ë'•Ā÷„ū×,ęĻ"0lnÔ>IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment5ߙI%^IDAT™cøøĪ†á`¨`Æ? ؁Xˆ˙˙a8Ž„3ÅĀje$Č0üĀÃpđÃķ, ˙?€0Ã| ŨÄė@Ėø€‡‡ĄŒe ú€v<`øŦ„/x‹]˙ŅIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%ZIDAT™cøø €áƒÃ†(ūĀp€ˆ™˜ũÃaû Į˙#pPŧ„ 04``8 Ä˙‘°<ķC1ûf ē†`Ŋ ;>°^|0ŧ‰NIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%VIDAT™=Ėģ € …á?Ą°Ä \ánāJŽĄp-:×`„ëâ ‹¯:îĮhõwpR(ģsöŠø—ŽÉJސš¤O›De1ÁĸƒmՇn'x3hnIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment5ߙI%\IDAT™MĖĄ €0…áUI7č ŒÖÉ$ŦrM’¸‡ƒk‚@|îkÍ(! .õ1öŋÉĩ†ĸ‘b‘jp¸ķŗšÔ(ôŪ,™e`”ė;Cũ˙öHÜ3Cĸ]dIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment5ߙI%YIDAT™-ÍĄ€0DҟÁœÃ pi™Ō"q´* …ĐŽĖĀ&ƒxōīâSâ"QÉâÔ ƒŒåuN) M–DYŒ’ŨÛáũ˛]Æ Ą+sכöĄí'úķē/ËĻz&ŠIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%RIDAT™cxü'á ?`8ĀÄė@,˙€áđ˙ íH¸ (Ū”oĒm`P`h|ĀÆÍÎņ} žÄō@ĖŒ(0´遘˙ųxļ.1mÜ IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%XIDAT™MĖą€ ƒáßŗ ”Q Ä ÁUđ¸“5!ÖøÔB‹īŌ$áP ĸW'R/â`9‰ÜDųsbˇ^"0kd“'›RĄĨĪúđ,ÆÅ‘Č-ØNČūĪĻ qã5ĻFøIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%]IDAT™-Íą €0 ĀG Č&YÅŖ€(X+ĸI:V°Ä–hRa%˛Žú×îŠö ũoRä™Â'ī.f•ŊÕ[ė-ĸĐMEøhģ‡ 2úļq—?J9}ÆT IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%XIDAT™]Ėą €0„á_,,3‚ŖøF Úš‚Ŗøē”Y!#¤ŗŒÁFޝēã¸ĢķfQ&™Ôœ,M.9ŗs¨ß´[Ŋ3öb¤ígéæh ôŋ˙āÔæŨ@2Æŧ]žIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR*…KvÎ pHYsb&2 tEXtComment6FŸlIDAT™mĪą Ā ĀG)R2ŖĀDYFķY()ΛHQ"ĨšÎ˙o¨žՍ4ŖÅ¨`n†'#žˆ¤-ÂxQą ¨Ņ‘ŒDJ‚üˆ~¨ŠEz“ÁøÃYé7ėÖ6ą–ží• ŅŪ`rwŒ¯IENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸcIDAT™UĖą Â0áŗ‘B6›ĀJ #ƒMūRēˆžķ ) øtŨŅb をXŽĸÚ|˛ŗˆĢ=ÄëŖ‰â ÖÃØ6Iųö´é+3-™÷.jGÜzÂĪ™;5i•Ļ7ŸŠŋ­IENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR'ČŪ> pHYsb&2 tEXtComment6FŸ_IDAT™uÍ1€ …áß8ĀØŧ‚#›×râÅ<ŠG`ė@‡Ŗ‰Ã—´¯MKO‘F¤ŠąSœq/˛×!ŨȒõI3"ŦAĨgĒ0˙ąeį˓ \%r3čŋn››ŗšÃ7 sũqĪIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR'#酞 pHYsb&2 tEXtComment6FŸhIDAT™UÎÁ ƒ0†áWz t€‹ē’šābŠ‹Ø <æđaüQ(zxîuŠÔØ ˆHy‰ímzą~ĖWLõ2›œÅ˜" ‰Ž´w§üioƇŽåäøÉąĘŗOÅjDmuöA¨­3IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0 …áŋPđŌDpąĸ-Ŗt‚šôb_ȃGÂˌuˇĪk2ÚâvCÃiHX+âņŽP€ Õž>ŋ4ˆ,=2Z J˜i~/\Ôūے›ėŠÅ.]{’ņøIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment6FŸ`IDAT™=ĖÁ € DŅIđ†h'Vf 6f(…fa`X"œ¨™XÄ Ņ8~sÎÉ9fQ_/ûeyE2Ö%, ØÜcņÖr˙áīnYŋžŊōcAÕ3ĮX8ĩëú!6 DqM}­ÄëIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR'= ĩ- pHYsb&2 tEXtComment6FŸ^IDAT™MĖą € á#Ø9‚›ČZV¨›1Š#PRžŋbŒÅ—ëåˆ6ãD fį$jeíũ0‘ÉK`KFūå+ė¯üq]sˇdfOÅ~ˇjīJä´IķēËAAˆ|§IENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR)ö!Đ pHYsb&2 tEXtComment6FŸfIDAT™mÎą €0„á_í!nWq\,báސŌ"ŧxŠ`cņ5wy3ōėőqžTg#åč_“dβ ŖxPØR¤ZJ*ûqį‰ĪY>–GÍ*ah9¸9ĸvŖŪčËēX:ķr5°’IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸeIDAT™5Ëģà DŅ; p†:ĀČ-)t„ŸpM”B ˜‡WgfƒŊŒ˛0,œL8}vÚĶŲ_ōqĒ”q[3F’ˆ…€Å钀ŋåvėx1ŲžâúJ9j—w`׊)č ū 0NÖI]IENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment6FŸbIDAT™MĖą €0CŅ‘ ƒ `“° 86 ›dĘŅ…# O–%˔ā)L¨ÉxR¯ÜŖ™•¸˜C å#nGl'ļ—m@rGķŌö“ߤrÖ˙NíĒ+UHqõDûŧŲIN¨6ĒīIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment6FŸ]IDAT™eÍą €0EŅ+l.ā(‚‹)čŽ7ų#¤Lņ1>ŅB°8å{—šgĒAMœâ Ĩur'Ŋc“,Nâ6˛_AƒGãül_%HäČŗĶOfVËqĩęîzü3Ėā_ØpIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR'#酞 pHYsb&2 tEXtComment6FŸbIDAT™}Îą €0…á_l. ¸†EĀĩ,&›e”Œ2őx1•Å×ŧ{<Ž–-ZB]Y…˛ ųRw ąĶ<ęŨĶ9ĩáƒC™ŠĢü ^ûą¨Ë°¯Ŧģeüō”;Ú¤Š\$IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR(Ōŋ7K pHYsb&2 tEXtComment6FŸaIDAT™]Ėą €@ƒálApÁ•,-ĪąėÅ,¯ž9´P‹/Į#¤0‘˜PVˆX‰Ŗ{oŗ%ą=‚-šũh€FSM‘å/ßÛĸÛĻ’=Ú`Ū‹Ū§3­ē4,;ÜbáŽRIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment71—( HIDAT™cøķ!áƒ304 a ˜›HßIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment71—( TIDAT™cxø˙C æb†ũlū¨â? ˙ņC(~ 恸ŠųXūÃ?{ūÄ?@(öƒˆb@üČūĮTÛÄ˙˙~2@ÚęŅÂIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment71—( KIDAT™EČą €0 ŅC)(3B˛ Ģx”lÂ*åAA‚8é5‡møĢd¯”‡ą6ãÂPhƒO“Øfqt9”°ˆŊû~zI7ū˜$GŦHŋ7IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( NIDAT™cx ˙€áƒ700ąĪoH`˜˙˙ƒđƒ ˙BņA > ÄÍ@Ėū€á?ËCąũ†? ûÌĀ˙@¨ö˙˙#“9§ĮũËIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment71—( VIDAT™cøĮ˙áƒCƒ3@ą4`˜˙Ā€a˙‡†˙ üāÃ˙‡@|ˆĄ¸ˆ™˜ũȜōüĮ‚€0˙ƒŠ™!ô ū/˙‚î9HOë(*IENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment71—( PIDAT™cxĀ Āp€Ą0Hąũų@ē€á?øÁPĖ Á˙؁˜˙Ãyūa˙áå>0ų Ėđ˙0‚õ'2÷ ŖĖ|IENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment71—( LIDAT™c8Ā Āp€ĄŽæ10Ø7ņ‡†˙>@đG ~楸ˆÛ˜‚˙°ũ†?õü„偘ˆ™!ø3X7RĢâŸIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( GIDAT™cx^˙€á7 `†Nㆂ ˙><`ø˙ ?âÃ@ÜÅė@ĖÁ˙ä!ø33 đ?f„Ē•ZŨ7õÁ IENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( JIDAT™cøyĀ€A€€ø ö  õ  ˙|`ø 7q;ķ`øÂōūØCđz(ūÁ€ō؁l$ü‡˙~4—.ŧĘdIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment71—( MIDAT™c8Ā ĀĐĀĀĮ ÷Á€ÁūC`°Å?0üáf f‡bū ˙@XūÃ{ Ž˙Āđ„˙Ci ÜvūÄø?1ø4TŪéÖūIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( KIDAT™cø@€á70€€a†y  ˙>0üo€âF(> ÄĮø<÷ąü† l˙á2–‡b~ūÄ˙įįö6Ÿæ{Ũ„IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( FIDAT™c8ĀĐĀĀÆČ€‡AÁū@ƒũƒ0ũ˙Ā>č@Ü Äėü˙Ãų ?ėŅ0H (˙ƒ˙cb!0a?o´IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment71—( @IDAT™cxĀp€ĄÁÔÅū8€Š€¸ˆŲ0üã‡bų ė0<¨‡ā˙,”˙ÂüP,ˇ42|;ŒIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( OIDAT™cø`˙áã†0†0ļ`ĀP˙Ą€á˙‡ ˙?Bņc >Ä၏ˆįC1М˙õ@üņO ūÁÄėü‡Ŧb1=lū]ŪAIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment71—( OIDAT™cø˙įà †TĀÆė@9ū ō,æ?¨`øÂ€¸ņ*fūÁđˆųXūÃ(ūä˙`b˛˙€0D=~b3Úî™ IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment8Ą(5˜`IDAT™MÍÁ € Џ&qƒŽBÉt3Øâ9â§ņāáĨ‡˙Ûb<ŠEE@† žąm?Šz”*(9X¯S›ũCØšû´gđMbî"ķ‹wį}ĘļĪŋĢbėú)õ/ļôĸ—’IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment8Ą(5˜`IDAT™-Ėą € „áß@bCá áė&ÆÂĩ .”/ÄZ|š\r9ú!ÔE(Ō°{RõäÉqN/Awē7Ÿ˛ šyq\ŨqwĢ f_ŗ˜j‰ÉŅī)PõGVyÛ60ļqIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment8Ą(5˜[IDAT™UÍą €0 DŅÉeFČ” E™"EØ,l’\RXŅP<šđŽ;%3Ã"ŒõS]f Ũ#×<ßŪĢĩ0M8ŨaĐ.ũÄOčšž3Ø|Įģɸâ(8>ä|IENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment8Ą(5˜XIDAT™UŒŊ € DŸ`‡8 Ŗ ‹é&ß”†x‹—Kîgë´ĨS ŽÛ ˜ŖÔ âdIYæĸcęÛPäŧ ^ŦS¨s^‘ƒ¨}Ō.Í÷ėä-9fÖˇ+IENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR$ģ´Įƒ pHYsb&2 tEXtComment8Ą(5˜hIDAT™=Íą „0 Fášp™…Un”C,Ä"a—Q|?W|…%?›žIĢÉ×ĨĢTNëÆÆv?ĘëSķ㊅ uĄ>æÂ5sûÔū l”ŋ]ļĄģÃéW_šõsX’kūũŠ8>¯'đ1IENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment8Ą(5˜WIDAT™cøĪđ‡áƒ Æ <  xT°0øÁĮĀX†áCHŨ ŽaxÄūČ04ūacÆ? X0PüPˆ€fėb}˙jö *ČoĶAIENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜OIDAT™cøĀđƒáCà †ƒ$šp a °øÃ €ę@ę?Õ(€¨eūÁ€‚Ų‘ų8€vHí˛›ņƒųˆú'ž[zBoIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment8Ą(5˜NIDAT™cøÁđáƒķ1``c8 ÄL ?1å ä>(Ô1€ô€đ‡;†@šƒ€j€˜á ”û4hGØŽ:|Æ&°ŲgšIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment8Ą(5˜\IDAT™mÍą €0Dá'l.p\ĖÂābÉ&!eŠŋ𠂍_{Û [d­ąI â)Ģ#ĩĪ)Qrķ¤(b¯@6O4Įe0ū:}T}ĄĪ§Ņ[ęNvÄY1Ū ‹âIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment8Ą(5˜PIDAT™cøÃøáÃ6† L `¸Š @|60~T÷€Á¨ļˆíĀ|°Ü&†Æ Œh¨ˆ¨ €fB0Č,ˆ9?ūcąį‡ƒKIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8Ą(5˜MIDAT™=Ėą €@ CŅ]AIFšŅ‰‚ĩ"ąČōJBOnlãâ cc§ŠŠ†ÎaO'ē˙ĻsšrNXÂZ™üՊ˜æío š"@e•úsIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜_IDAT™UÍĄ €0…áŸ"tFčh•• X‹¤°BŲāÉCÁ5(ė'îO…!´d.%Ē"Õâˇnk]æđ{ë÷Ä}ˆGâ´ÄîũؕH( ϟČÔ+Ų‰ÖÎzŸÄ/ô€ŖIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜YIDAT™]ÍĢ €@á!pXm\iX‚¸ļHNĐ ,ÁübņŲT‰‘…Äd=s¨?zĖ–ÂH1ąBMÄé‰Õ[ōĢq~Ú[öh(Q¯øY-ŧĶŗ41—*×(õIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment8Ą(5˜OIDAT™eĘÁ €0DŅ/9¸%¤””–Ŗ`cą“”°Į=,ÁAæŗ’†S™Ũ˜׏1\?]]ā[hK6ÎŦb5{ō(ņ1ŒƒWeˆĶnÍZ(xŊŲŽIENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8Ą(5˜^IDAT™EËą €0 DŅhŌŅf””ŒÂéŗˆE‚˛€ŠpP<ä;sJ%ĸÄdqlęX>ūÉUŧ ‰ėļÖN‘1RĒŨMĒŽūĨXūZ—ÚNķÉíßFį 7´ģ4ßtt”RIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment9Ö/ZIDAT™eÎą Ā „á_KGp”Ė•*ÄŅÜÄ,_@4Ī6)>¸ęîhĻ#\T"Ĩ˛RķĶėæ6~Ė$TŽhĨ°Tõœž!džĨL‘qG:M÷E“Ė/Žŋ9€4>ĄŸ3ŖIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR(9ˆŒH pHYsb&2 tEXtComment9Ö/fIDAT™]Î!€0DŅOÔaë¸FWBâ9!\¤Ü ¸M—-T‘ÉKÆėfĐ](P“XIKāʞíå>…Wß Mí[ū8Í!âė§#õF|Đ´ĸąô0vTz[1ڎIˆŗpĢ<ÍEo—ŦlaIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/XIDAT™uÎą €0@# 2B:ÖČhé)2ke$š/ĸ<ū”Č:ŲĨĄE0&G2jOØGtÛŽ8ü:>=  ¸IMˇŽ¯ŊL&žTi懅Vn• rI^ŠĖcIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR&ö|fˆ pHYsb&2 tEXtComment9Ö/gIDAT™MÎÁ ƒ@ DŅīøĀ%„Rh+7 ŗ-eK 7¤Ŧ<˜ ‡žFōH#Ŗ¯Đ*‚™ƒ)ė ÔwjN g Kt[g=-qß˙•ėK3ęĶrËs͉‡Ŗ×€â2ĸv™Đ‘öų§.¨ä?‰>æÂr*RIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR(Ōŋ7K pHYsb&2 tEXtComment9Ö/mIDAT™MÎ1 ƒ@„á\HãRxÁ+ĨLą…a/Ļx‘Í ,ˇ\GBŠá5ķuĸ v"ų=ōÕĀvëųXR îāįĄæžÉ™Ôlļ^ äî ”g Û˙õÔ<4Ëh‘:G/ņžk“hŌ FŠALĮbŨ&IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/]IDAT™UĖą €0@Ņ/l\ Ŗdąŗp-ÅE".ģGbĸ Zŧö‘%2pøÁ˛DËĒr›n†ļJü)t/ÃüąEáÂî…sr°äXšG^Ék1%JŊ^%5<žÅ(ÜIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR'ČŪ> pHYsb&2 tEXtComment9Ö/hIDAT™]ÎĄ €0Đ#ę°uŦÁh8B*X‚a XF@” *Oʑ‚AŧÜWwWE° ī;ląŠ‹V ĘTíĩËôÃl¤“5,Ūāę>i‘>ĄÍ´•f" âDQB­?eĪÜA4ņã¨oIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR'#酞 pHYsb&2 tEXtComment9Ö/^IDAT™UÎą € Đ3ū„†ÄÅŅ,L(\ 6a„_R|Á Ja.¯Ŋ;´ÍPÂĨb™bķÖ6 ]+Š SJ‚a¯āŽ}R*á•vô“¸mŒō‹˛T=œp”IENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment0¯ķŊĒ4IDAT™cøÁĪđšáq3Ãáà ‡24?!v z€>0´?`h+*~ÜÎđá‡<l94>tą”IENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment0¯ķŊĒ2IDAT™cøcĮđáÃa6†ö&bo@ ~ :ĀĀŽŒ€âM ÔÜÆĐĀÆp¨Wy„,”jŅIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment0¯ķŊĒ+IDAT™cø!Īđ€áp3Ãრí`Ä~7:BÍ@ÔĖpá?ÃyŅ„ČD_+ÉIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment0¯ķŊĒ8IDAT™cø˙Ÿá?Ãv†‡>dxø€á0}`hĸ`ô$IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment0¯ķŊĒBIDAT™cøĪßĀđ“Ŋá#sÃà ‡ņƒ†f8fcf(f‡ŌÍp QŌs¨˙asàY?€æū˙ß;]' BČëIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment0¯ķŊĒ5IDAT™cø!ĮđáÃA&†æ†öv :€‚øaÄ+hobhfbh`c8ĀĮđA˜Ld(DŖ˜IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment0¯ķŊĒ+IDAT™cøaĮđ€áÃá&†æ Ä Cė8P;bhnc8ĀĮđA¸Ė–zŸ¨IENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment0¯ķŊĒ7IDAT™cø#ĪđáA;ÃÃà ‡č C3`h~EĖ`Äø„šÁč0XåÃã ú~ČĸÍt\ˆÎMIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR=Û pHYsb&2 tEXtComment1Øô<IDAT™cøÃđ€áCļĀY2Ÿá8á ĨÚu>IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR$Ŗģ@ pHYsb&2 tEXtComment1Øô<IDAT™cxĀp€ĄđAȌ ĄžJ¨IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRīĸŊ pHYsb&2 tEXtComment1Øô<IDAT™cxĖp›˜ @Fh†įžĪĄĮIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR Ë<9& pHYsb&2 tEXtComment1Øô<"IDAT™cøŲĀp Ą  „‚Q#D=``øßN;ŧŊaYIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR ņ6XV pHYsb&2 tEXtComment1Øô<!IDAT™cøĀĀp€Ą4€á¨‚čAÅļą^IENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRô3h pHYsb&2 tEXtComment1Øô<"IDAT™cøÍđáÆ(lCF l„ƒ`x?>U Éęh}ŒIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRĸj ļ pHYsb&2 tEXtComment1Øô< IDAT™cøĪđ“áÆ HÂ;‡`‘ûŌčj ¨IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRŠÚ0 pHYsb&2 tEXtComment1Øô<IDAT™cøĮđˆáCÂ6a…m īõ† ¯jTĻIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR `ęƒ pHYsb&2 tEXtComment1Øô<"IDAT™cøŅĀD0040€â6… Zî5zųĪI ßIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR `ęƒ pHYsb&2 tEXtComment1Øô<IDAT™cøĀĀđ€áC h€ĄxLĪg ‘EŗIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR$Ŗģ@ pHYsb&2 tEXtComment1Øô<IDAT™cxĀp€€°‰ ›€° ™ōī$Ú!yIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRīĸŊ pHYsb&2 tEXtComment1Øô<IDAT™cxĖp B0‚eør{ĮaIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR •:ž pHYsb&2 tEXtComment1Øô<%IDAT™cø÷€áƒÃ†$ôŒ> ĄX``xü[­ō_\yIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRËaĐ~ pHYsb&2 tEXtComment1Øô<IDAT™c8ÂĐÂĀ…ØBĻ9håkämIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR$ūR pHYsb&2 tEXtComment1Øô<(IDAT™cøĪđ‡áÆ @ÜĀĐ„Āđ 6Âa>Ą*ļû¤ËIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment2Aũ܆IDAT™5ËĄ €0Ā*;Ŗ0âGÃąF +đ!!9{Ú*Ē(ÆÄĀôÛyRq§ęšõÅyh›F|”ŧ/×ú|-&wąIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment2Aũ܆>IDAT™ĘĢ ŅƒTvFE4Á2Ž5‰ |/O#P”,xÁņ3œ‘Œjl>a)30"Ŋ= ĘAŽOŦ"j?,ųIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment2Aũ܆?IDAT™c8`ÃĐ ÃĐĀÃĀĀÂĀĖĀĀ܀@ė ˙@č Æ2 ?j>>axx€áC |¨IcuƜĨ…IENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment2Aũ܆=IDAT™c8`Áp@‚Ąƒ„ؘÁˆŒî30üã`ø#ÁđÂáGÇ O0n`h`€ ˇ }Ļ/CŪIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment2Aũ܆IIDAT™-Âģ €0 @Ášp™„ŠØ QË ąŸ†"ÂPp:bæĖlĘŌp§|íīÆåD%ĄDæč#÷ÄQY&a×YũHhwIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment2Aũ܆>IDAT™cø ĮpœĄŊĄš‰Ąˆ@Ņá ˙›Āˆ „ūÉ1üącøSÅđķÃĮG ˜010€Q?ĸm5YäíIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment2Aũ܆:IDAT™cøQÁĐ ÁĀĀÁĀĮĀĀÆĀĀFĖ`ÔÎĀđŒūq0ü“`øcÁTüáÃį `€ˆšL ĪÖÍįIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRØļŠ pHYsb&2 tEXtComment2Aũ܆>IDAT™cx ÃĐ ÃĀĀÃĀÄÂĀ D PÔÎÂđŸ…áņ0ü‘aøaÃđãÃĮ7 0`ah`a`€ ¨ņuˇtP7IENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment2Aũ܆DIDAT™%Ęą €0 Ņ“(\2C0Ŗ)E֊ÅB)]ųcôĒĶĩŗŒØ¸‹3˙<ŽJGyؐˆ“ų˙ÅĒŧ8 Ru1h0IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment2Aũ܆TIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment2Aũ܆BIDAT™-Âą € †ŅĪ#šŌ…Ņ˝.fĮŒ@Ia yyôŒv’‘.6­§¸EĻNdŪÂ8čAsCū˙xīŒ–sIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment2Aũ܆CIDAT™Éą €@DŅš\ –rÅ hafļapÁâē/{<;nŦb žn“Edã+;҉ ËKž aqÍúņÄ:a¯´8IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment2Aũ܆AIDAT™cø÷‡á C C ; s530ügĸ< ˙dūØ0üøÃđņÃį7 04°€Cƒ Éx‚ÅŽåtIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment36úėAIDAT™cøSÃđ@†Ą‡Ą…ĄĄŊŠūŗ0üįaø!ÃđA†á˜ËĀ0ŋŊ‚@ …áÃ_†Lx^IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úė>IDAT™c8 ÃĐĀÃĀĀÂĀÆÂĀĖEm įX>đ0<"†', ˙Ž304e jØÁĘXđvÔ :§ŠTšIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ĩY' pHYsb&2 tEXtComment36úė3IDAT™cøWÁpN‚ĄƒŒú9ūs0ü“`øcF ˙Ā"˙ú‘Ã1†! 挟;ĨIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úėAIDAT™cøgÃđG†Ą‡Ą…ĄŒÎˇ0üįaøD2`’…á?Ž70´70° C? CÆ6īwm‘ĸ#)IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRØļŠ pHYsb&2 tEXtComment36úė=IDAT™c8ĀÃĐĖÂĀÎĀĀŪĀĀÜĀĐŪĀpžá?Æ2 ō ˆ{Ļ€™¤˜ĄˆXđø(xFV IENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment36úėAIDAT™cø Įp€Ą‰™‰ą‰ĄĄ‰ĄŊ‰áÃ?6†| dš˙0´`h† †v&j|ĀŦĩ~$ĐrIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úė@IDAT™Ë1 Ā ҁ,ąųÄ xÔ‚÷”-‚ĩ¸đĘæM- 0ΐ.–đ˛=â548 …ŋš iŋž>ĢN KŽōIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úė?IDAT™ÄK €0@Á lÚK% q{ ÁV` U§//Ŗo˛–P~͒›ņķ'ŧ\œÔ´ĻJáŊûƒí …íÖéŠIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úėH0üã`øĪĀp,ÅCũ ÷8ūXS¯ŊŌV×IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment36úėCIDAT™%Ëą @@ĐWüĐü°Ā%1šâ&`%ŖÜJ… "yíĶĩ¨IˆĐ…!ŦáJGjŗVœé[Õ˙™|q//ōŋÅ7ČUIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRØļŠ pHYsb&2 tEXtComment36úė€ŅqâPRÆÁp5ėãAųˆģģIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment4¨žyŗ*IDAT™cø†á ą0ü"TųD, ?@āˆ ųŌ‘  ŠpAØIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRâŧņú pHYsb&2 tEXtComment4¨žyŗ5IDAT™cø„áÆ`ôŒ~00|Ŗ ĮÎ10Ėcac!h€Š„!4ë؀5!ŠIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment4¨žyŗ6IDAT™cø˙ƒá˙ †˙ ˙@čũ˛;ĀčÃ{ ę`¸ßĀ0ŸAŒ@*9 čü˙q‚€Ÿ„ IENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment4¨žyŗ.IDAT™cøßÁđŸƒáũá#†@.ũá€2ūÕČ0@Á¨0ˇĢ@ˇ´IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žyŗ5IDAT™cøŒáÃ6†˙L ˙˜ū€Ņ&†l ô€‰áC!P¨Œ ĒøöÕŨAŲdÆIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment4¨žyŗ3IDAT™cø€á10üŖ? ?ĀčÃ'†g Įúäā’b[^yíņÄbIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR æI!Į pHYsb&2 tEXtComment4¨žyŗ*IDAT™cø˙áÆ`ô š÷ĀhÃ>0ÚÃhĘūpŨĮß^ĨĖIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žyŗ)IDAT™cø˙ˆáÃ&†`ô‡‰áúCķxā’Ô&#õešIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment4¨žyŗ0IDAT™cøĪÃD˙X@čũ`aøFXą0cačcaā"øƒ„ūą“îdü„XIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žyŗ*IDAT™cø˙á˙!†˙M`ÄB˙˜  8:F÷™Z@ m°š_Î/IENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment4¨žyŗ1IDAT™cø€á1€Đ†0ô‰áÃ;†{ ûĀČ,Tķ ũb÷äÅĖÄIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment4¨žyŗ/IDAT™cøßÁđŸáũa`øF€Ņ1†s ķdāX% „7U1,ÄIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment5ߙI%?IDAT™cøĀĖđ€ŒäÔ3<ūBū3°g8ĀÎp˜™á?#Ã˙F†˙ Į˜á¨‘‘Ą¤æ‘<†ŠüĶĖÕIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment5ߙI%CIDAT™cøÁĖđ‘á3Ãv†ō ˙3<# $ÂĖđœ‘á}?ĀĐx€Œ˜š˜øA*˙˙ö1)×p/žIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment5ߙI%EIDAT™cøÃŪĀđšá#ƒhßžá˙~ĀßĀpĒæ#7ņf`hbfn€`v††& ē¨Y˙ėīŸ%ōėŠIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR–áĒ pHYsb&2 tEXtComment5ߙI%EIDAT™cø˙Ÿá3ü`døÁ Fė ˙C҇z†Ė ž`øD~?`8F Œƒ ›Áēøū˙ę&ļ4ĄY‰IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment5ߙI%GIDAT™cøĀĖđˆØđ3<°gxüŸáų†‡˙Č3ØĖŧ ¯ IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment5ߙI%EIDAT™Ė!€0Ņųųĸ˛GāĒ­á\›p‘&,Žē…’<;Ã,Üų+ŒĘ0ą9*JŽĀ7,ŅEˆlË+üs{/ŧԒČéčIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment5ߙI%CIDAT™Ęą €0Áĩ. tI´v&Ą­GhÙS:0Ō$+-icTbįZô_dŠ(ܰĖ4Ũ4Sâ#ŖÆ)Ž|ę ] ›6Í=+IENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment5ߙI%>IDAT™cøų‡áà ’axđ‡áû†˙`ôūÃC ÉÃđŸ…áõ70´70°ƒ?ÛÂpž‡áŸ zļŊķ ˛…IENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment5ߙI%CIDAT™cøßÆđƒáÉ1<øĮđŒ˙cx$Ųū31üg`øßFž`h?ĀĐ $ÎĨØūņ1ü˙§é Ŗ:Ú!IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment5ߙI%GIDAT™Ëą €0 Á—#šĖĖjá‚ĩ,(R˛BF ¤˛QŽ=*y”Š„bK<ŋ+‰ÎnĄlÆaxā'm§ÉZŗķnT~r¸ģ@rãIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment5ߙI%=IDAT™cø˙áà bcøĀĮđáÃ÷ ˙Áäƒ:†l Ī™ū7€Ņ: FÍ`tŧá|:rëŅEÁ •"„x›Uː]?’‹F!Hq+S˙ĮHOĘaÕ —“ņÚ°hIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment6FŸCIDAT™cøcĪđ™á#ÃF†ÆFæƒ Ėį˜˙ƒƒ<;c3Hũ=€Ą íš2<Ėđ€á?Éã#ŠSIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment6FŸ=IDAT™EÂą € ĀSb(ÁY kižp ŨĀ’+ãåôÅÃÅN)jUOi˜Ģ)K!˙ö=C„ģéÛ ŊŪGcÁBIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment6FŸAIDAT™5Ëą €0 Ņŗ\¸d$V ōbū›Xb”tHO×ĪÁ Ú)Cƒk"ora'8.ŧ‰ŪũäOEiŋ3^+ŽMä–äIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment6FŸEIDAT™]Ėą ! CQŖ+(YŲˇYnF ¤@ˆŅ]ņ$+qĸŨŦõXŗX]WØr 0w‘Y¨ą_īĪĮMäē#˙Vc MQ^i“IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment6FŸ?IDAT™EÆą Ā EÁ§dwf#fŗB‘ĩ…(ŠPč"]qŦ`)ē(Â/Ã4t˙āI?ŧIOĻXƎ [ÆeTIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment71—( 0IDAT™c8đƒĄƒp0|ā`ø#ÁđO‚áũ€Ą Āčũ€ĸƒ?ÍeŒz-IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( 2IDAT™c8PĀ€ 00|`ø'ĀđĮŒ ~0|ĸ >0@B`ÔüáøĐ!‚*KžIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment71—( 3IDAT™cøaÃđ€‡Ą €Œ ˙Xˆ‡áÉ0üŖ6 ô‚j@І‡-Tq9IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR æI!Į pHYsb&2 tEXtComment71—( 8IDAT™cøüá€C``xĀĀđA€á€Đ˙ >0üŖ`ô¨†‚Ņã@eUV#M’w*IENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( 3IDAT™cøđáÆh`øF @č0|ĸ ôŒ‚Q#!z‹˙ĘYfkIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment71—( 4IDAT™cx`ĀĐĀE L l Ø~°1üã#9úF?ĀčƒÃ;0ǃĸ@ôÅ*ũk˛TIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment71—( 3IDAT™cxø…Ą X>°0üãaø/El`¨†á‡ Æ5tˆū0|üúÍūâXJÕIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( -IDAT™cxđá H`ø'ĀđĮ„~€Ņ *`xF`¨H~`8B`i† šÅIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment71—( -IDAT™ch¨`€ƒ 8~p0ü" 0˛Ą ôŒü`8CAy'Gá¤W˛IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR >Ÿ[Î pHYsb&2 tEXtComment71—( ,IDAT™chH`€ƒ† _ū$@Ņ0úđ„€Ņ ač0­Îâö)ŲIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR øŨø, pHYsb&2 tEXtComment71—( 5IDAT™cø`ÁĐĀÁ ~p0ü" úF?€Č‚¨ōCÃ0:A?@čá˛ņ´īm‰oIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR õÈk pHYsb&2 tEXtComment71—( 1IDAT™cø˙€áC =``ø ĀđŒū$€Đ zĀđáÃ0:ˆŠ?`8ūŖWķ~ÁÆTIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment71—( 3IDAT™cø˙ƒáC1€É ˙9ĀH‚áŸÃ ˛`øF* čũĄ˙?nIRáÔîđIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( *IDAT™c8PĀ€ 0üĄ Āč}`8F 0ÔFÍ´ĻĸĢMëIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRęC/ pHYsb&2 tEXtComment71—( 6IDAT™c8ĀĀĐĀ€ Xūķ0ü—aø'Ãđˆl~Ø0|€ †5 āč=üWxBîķIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment8Ą(5˜HIDAT™-Šą Ā Ä, ʰŗĸ¤øĩ)˛Æ‰ (SA)’+ÛŦÉČ(ROÃ*&.§SÅ}ÜUą‡$Ōøņų>ŅÁ›Yķ†PáœØ°IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment8Ą(5˜9IDAT™-Ęą Á7–ŦŒĄ°t%Ü7ÉUŸ'^ąŽ­gĶZ¯ė‘ DGâ9Ū§šÁĨ7IENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment8Ą(5˜KIDAT™cø˙á‡Ã6†L ‡Pķ#†Ã@Œn ø€Ĩ00†L ‡1´Ąæ 1401`ƒ!&†c í ũú Pû!†ãl äū× ÔđQ ü´IENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment8Ą(5˜8IDAT™E‹1 ĂCĮúeA°ß*žäžbu2].ČI#ąÉÜ cÔîČP#ÁU]Ÿ:W(?ŧ~ĶLëęąIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR‡“ pHYsb&2 tEXtComment8Ą(5˜DIDAT™5Čą €0EŅRX:‚ŗ¸™`áZ~R¸Æsƒ7@ &`āT‡Ö¨+Î(/áIÜûČÎ ƒ <âōī4Å(đBŨ>Û æąˇĘIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment8Ą(5˜DIDAT™Čą €0 EÁ§)ÃĖÂh‘(R˛R€E<‚@1ßŌUG,ĸá+ŧ–NŖËÁ,IīDįšlbiČÃ]ņX?PßíÆĄ0IENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment8Ą(5˜BIDAT™cø#Īđá3ÁF†Æ‡`ôD682 ‚Ĩ>02<``8ŪĀĐ~€ũû(jČpü1Ãv†˙˙¯íŽ?wŒIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment8Ą(5˜EIDAT™Ėą Ā0 Á.Tj„Ŧjcˆ×’ĒŦ!o Bd¸ōyž‹×H%Ī`k37#č ×#nAÁËCKe“ŽuøFF­š‚4qIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment8Ą(5˜?IDAT™Ęą Ā ÁR¸ôʎ(\˛–ĨĖ0XēōØĘr2ņ¤Eųk˜0„ų–˙Ą_†tYx7čKŧ“@<IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRØļŠ pHYsb&2 tEXtComment8Ą(5˜BIDAT™cx<‡áxÃņ# í0Ô|†Ąą‡á€ Æ< Xæ30Č70Č?!~ ų„˙ Cû†ãsū˙Q Aĸķ7)IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment8Ą(5˜@IDAT™cø÷á?Ãų6†ķĮúPû1: Bø°1ü`bøD ō ōäAQÃ>†˙ļZŦH‡ĮIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment9Ö/=IDAT™Âą Ā@ Á ]¡jqÛēÜ†Jp~Đ0ôÂI!ĸČ=Mö4ŅMÃŋy7*¤™øÂëĄÃę—Û7ŽIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRÁēIw pHYsb&2 tEXtComment9Ö/JIDAT™-Ėą €0 Ņ“(\f2ZF "kąˆ;Z@‚BņŽ<. \ļ)°E|H^~Ģ™^ +™[}öā”CÚ§I?ŸãŅĀ#NęŽÃIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment9Ö/7IDAT™-ÄÁ Ā0Á ~čy-Ë\c7’N Ђd*įË´1^ø|ŦmŌM‹lõˆ)îS*IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment9Ö/GIDAT™cøĀßĀđ€ŊácC3Cs```GÆ@1nâƒ@ü¨ö˙>Ūâæf ŨäÍ{ ßĀđĄžƒG ĄĢã!VIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment9Ö/JIDAT™5Ėą € DŅO((ÁQ=Âb ×p Ņ#hņšËå3vqoĸ&‘Ŗ(Y„&¨?-}ƚéöø3]VĻļ§OÕŨ~čI!ĩj6ÜęIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment9Ö/=IDAT™c8ĀĪp€Ą™Ŋ™ũ ?€ĸū í ~00üoĄöF†f0bgę} ĪđĄ˜’`%PŌ‹IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR.x"I pHYsb&2 tEXtComment9Ö/HIDAT™=Ęą €0 Ņë(ŗRFa䂱ø‘1b&Ā„(žŽ9rg‡ a¯^`úد3J”k†Ŧfũ.ą<†.öUDĶ €ū*…ÄÁĸĩIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment9Ö/:IDAT™EÂą Áī(Éá,X Â"°´R/Į)„ :2ūˇÆ0–qķtÂņ–•^Øõ˛P$Û\œĀIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment9Ö/8IDAT™]š Á.¤Jň€ļL't“2V%2.’ĄģĄ‰üß!`ˇwÜ3Lx& Ģ&Ęq¤-(KIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment9Ö/JIDAT™cø!ßĀđŊásÃÁƒ ͘˜„0€1ķ 8ōņ_ û?P ⇠ú˛Í<ß]˙'Š ėIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment9Ö/BIDAT™cøĀŪĀp€ˆ@°ˆ\æ@ü ŀR @Šá˙2>q# 7Mšshæų†õ ŦÉëĩ|ĨCIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment9Ö/;IDAT™cxĀÎĐĀČĐÜĀĀFüHˆ†€˛00üod8ßČĐŪČĐÜĖĀÜÎĐ Ô+Īp@žáA=híŊÉ­°dIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment9Ö/5IDAT™cx Įp€ĄĄŊ ŒÚ0°ÃP; =?Āđ‚1obhĸ6†Ãm Ŋ?ėO9g3¨IENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment9Ö/>IDAT™cø Īp€Ÿá03Cs3ûAö üpôÄmo`hg`øĖĀđ˙dh?ČĀÜ BÍė ü ėŪ;¨hޟBIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáŅ!Ņ pHYsb&2 tEXtComment9Ö/6IDAT™cxĀĪp€™Ąų 3!vTÔØĀĐĀĀp€áÃ˙ Ī‚ƒĐa†Ãí û™ŧÕęáØŪIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set03.pa000066400000000000000000000741651506303110300215620ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĪūáㆠ>$0<üaƇ0ūÁíPp331;ŖĘ @0H?Íû`ĀđāCĐÚ´īûĢ'3Ūc$@IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cø?˙Ãæ ?0|`ᆇ~P`8üCĄŒ˜ˆŲ˙`Á? ¸ Cô@Ė8übæÃ;@víđã1¨éšˆIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĪūáã0LøĀđđCÃÁ ‡¸ŒØAø 3āÆPĩíP Ö˙h|PĀđ€„öíû´÷˙Ÿ˙-&3„ē(IENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøĮū€áķ†Ž>~xĀđđCÃã ‡(0˙ŖĀĐū‡+fGÂq8>ÔøÄŦ‡@s?Ú´hĖ*4 rģä*IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cøĪūáㆠ€°€á'0ø Āpā‡Cㆆ Í ü‡f‡ąaęúÍ9øÁ€áÁ°ŲĀh'ķĐB,.1):OIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment0¯ķŊĒCIDAT™cøÃü€áã0|ĀpđCÃa nūĄÆí?˜„˙ á¸0H7˙€˜uđÄ|=?€öũãÄD.s­ĀIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment0¯ķŊĒCIDAT™cøĮū€áķ†Œ@|āÃà ‡ÁXĄ„00´C1;QXŒÁzAæ`øĀđ€áÁ†ĮPãæ í?˜DÜÖĢĀpüČŦ†‡€l`øĀąh7Né1t?ņčIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĮūáķ†ŒĀđAÃà ‡°C3ˇ˙a``Įƒ™‘p3Cõôū 6ķÁ° ģ@vūį˙É 2šŨ‚.IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ķŊĒUIDAT™cø˙ūÃ?æ 0€ā‡ øđ –`8üG‚Ąs0´C1;3 af Šięa°@ŗ~â @ļ0BėûĮ˙< 7}NķZIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒAIDAT™cøÁü€áã0üđ€á⇆Ã?šĄ˜ŒˆÂí`ŦÆÍņÁ Íf„Øķ‡ũ ,mx$WÎIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒXIDAT™]Íą €0@#Š”dFË)Uˆ˛Čāō‹ˆđ˛Ž´žm&t"<‚‘„ÂE#ĒŲ\Ã'áO]DŧWmįa›rž´/ Äĩũā -M7ĄrĪ#IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment1Øô<.IDAT™cøß€áû†@܀„ņvˆĨø3ІL `ŖņĮ ĖdIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<+IDAT™cø'ßĀđˆđ700ČCp€ŠS˙šŨĀ4 üohą¯)áŽ`IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cø#ßĀđˆøQņ~ˆøj`YŒ@s‘Āķ'$ĒĀkúIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<-IDAT™cø/ßĀđ‡ŋá7 á?Hø.†Œ˙āĀØ`Äú€ŨN*eÕÚ´§IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Ü0Ž_ pHYsb&2 tEXtComment1Øô<9IDAT™cø˙ŋáŋ|Ãū†@ĖÄ @ü"Â˙äņã?Ä`šė@ķ€4|Ä˙6Dú/6Sœ˜OIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment2Aũ܆[IDAT™-ËÁ €@ DŅ/`JŲlÉT<ØVėdí Į=ˆq$<fmú9 î…#Œŗu0Ę ČĻÎå֞QČēä.cđNÁ3m5"*×ĢŒíĮ¯įlå#.*-Ą8čIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment2Aũ܆hIDAT™-Ėģ ƒP …áQĐzV¸d%6‰‚FJ”E.­KWqQd}’uü õÎ]•‰'…w-lnė˛ŦŌ ˛„ą8ŧ4ģ$ĩ›u"æ*ƒĶƃx1ƒ§q~ālčˇîąūî>(_†Ü/•å{u‰IENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆]IDAT™EĖą €0„á?Xh—˛‰Ģd KWR\äšAĘâķ,ă¯88ŽÚ%Fæ°ĖRk…(™>qm\[ß ŸEW4ju€âpĘ~ÃÖÁČ+ņ'ŠįíĖ+gS¯“ėIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆XIDAT™eËą €0á –ÁŒö&‘H ¸Čoe›ŌBŸ`gņ5GĸQŖT#*}`n0šĐÁ[q§ŒQ_bln}÷"ŽÕhwâpģ+ūeüØ:H*FĀ ,IENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™MĖą € „áŸXX2‚ŖČh ×zÆE0.@IAĀ‹6ŧËW\.yTog$L ėŽ>˙&qƒM.í=ē=Ęd´Ų¨K¤ŽÜōČY@/?ãŠŋŽŲ'ˆMôëõIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™MĖą € …áŸXX:‚›&3 ×:7aJ >…wųŠ—ŧ;ōb$gôŊÍķDØŌ°Ę"nēĻW=MũŒĻûĒ?e7ōé„XÕë †˙(¤…'[à ~ŠIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆XIDAT™]Ëą € EŅk((Qü“ˆ‹}ãŽđG ¤ (ÄÆ˜—“[=ŠSlQæö$…`í­ûņ&\ĻÜ:äaüģWZTęĒ”M°.ÃŲ„\˜øō]ˇ'Áu=ÖéIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™eÉą €0CŅQ¤Ė…Û ¤ŦuˆEÂ)S ‰[O.Ė•”ŲC…T!5Č.ēŅoËäŋUÁTąĶ—”‘•ž }ƒ6āv—+vū1äÔK(ÎPNIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆[IDAT™]Ėą €0EŅ+),]!›¸J6Ņābų`aûīŦ,Nu6u0 F.‰Í"S}Á(Aɟ]íŌÆ-áÅđ,Áčúésĸ-‘Ú#ˇœrH!˛ūtqO¤Á1$Ļ͉ÄIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aũ܆UIDAT™mĖģ €0 EŅQ¤ƒ ˜%“Ą 3b‘Œā2Jx ļNķüĄFÃ1:§ÄQ Ę"“ŋÂĮ.—f}°DĪF×}͟:ƒ¯P6ipŪÚ¯ų/åsÜ$ጧIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment2Aũ܆]IDAT™eĖą €0 ŅC)R2ž„Y%‹…MŒX %E”đ鐰ô[>ÆâÜÁņÉ)l$ŲŨˆõAĻŦ}ÖũōQ$9Cŋ]6÷jÔnœކē¨ûŽũ$ė°(ö%Vƒ-IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆VIDAT™UÃą €0EŅ+),Á?Z&!…Ĩ+).ōÜ v!ņWĸe9ubC,[d•1dŖĪ|÷k$ßŊhģOžue2îj\ūôG™/{ĪÄcJ+öö°IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆VIDAT™MĖą € „áßPX:‚ŒÆ$F*׸ȍ@IA‡6ŧËW\ry'F˜<—IrŗB–>S=ĻxŠeáöÔakvœ¸ņāB2•Ĩķ7č6k?6+ģ_uU)Ũ-”BIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėYIDAT™5Ņ €0 O:€+t´Ž"ũp-ƒ‹d„~öCˆ/E G ÉåŸĒaŪ8FĨ8ĻXŊbâÖH¤I=L?;7ÍnĒ?Ô÷€ũU.¯–§ŠIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėVIDAT™-Íą €0 DŅ(X#ŖeP Ö Ę"ĻĸMéŠp)ž,Ų>ĮčdnK´e:.iōôÄ–ģņ.ĸܨŗ?÷Š˙š¨ĢœAķĻÛU?,~EvŗH^3jd#đIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment36úėWIDAT™Mą Ā ąŖ1J‹ewi]R RDÖÉ/ŋ_Á§‘)’¨Ęĸü8[ĶüŲ2Ãū‡å|¯›ųÎåŲá#ęĻ `!ĄÖ×M=Q^Á1‘Ɉ<IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėVIDAT™MŒą Ā /rÁXa´H”Yé7Č ’ŽüÁđˆŸņy žßÂ7ø8€ƒá?åū7C1H?ƒÃ 8 ˙_Ä˙-Ĩ÷<¨ŽøēüIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗNIDAT™UĖ1 €@CŅx<‹…­W˛ōbaģ`ą#ˆã_A‹(JVŦ˜‘>翯Į™šcČÚ°ĶŒĒ^FVaĶ˙ĪøbwļW¸B=/¸‚IENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment4¨žyŗRIDAT™=Ė!€0CŅÔõØåXW‡ã $¸L—_ÚA<“L"ßL>!ĄC¨r8aŸ§ąŲtcĮc#ÅFęS”“ũƝ]ô•Tžá Ë ņ[BtˡÜÕIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment4¨žyŗRIDAT™-Ėą@@„áŊL ׎Îļ¤Fd/0žŸ{;ķeģ+ßM>…‚Šz k1›.aÁŠ‘Ō&ŠŅ—^rũâĻü;éÜāÍ >h?Âņ”ƒ1IENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žyŗMIDAT™cøøÃ˙ƒ@ÜČüŠ˙ņ(ūÅ€ø1Píqn~ĀĐÄü@1T0ŋá?PŽAf3$0|Ę=bũ˙z3Ō,˛r‰IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙ųÃ˙‡@|ˆĄ˜ņÃ?$üˆņĮ ōø0Ÿęéâų@Ė €l¸YÍP(öŒĀø˙­W9­_õ:ãIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙üÃ˙Ã@ÜŌ@Ėüá˙â@üąųÃc ~Ä၏ˆįą<#ƒ ™ņŋŠ™!æ~`ã X5:ę—IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗTIDAT™MËą €0 DŅŖc„ŦÃV”éX‹T”ŦbčŽ@˜Ÿˆ‚âŲ–ĪVėVl˜ĢQ‘+f}:ëÁ ÖYŦ Ŧ˜¸—zejĻõ/Ę[+ĩŦå‘^<Ž=R0ú­7IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žyŗ8IDAT™cøđ7B1#˙â?Püˆ?@ņC šÃPÜÅč ˆ˙7 ™ Ä?€b0ä¯1ũ„9ėOIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žyŗDIDAT™cøßø€Œø˙a~Āđˆ?@ņ ~Üü€á8ˇq?ķƒ0Püâ˙@q 4¤ „?€ä0`ö2å\՞~IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗRIDAT™cø˙ũÃ˙Ã@|ˆ˜˙ņfüĀđˆ?åņãæ Įø<÷ƒ0PŒŊA€ f5C1ˆÍ`Āđ(÷Š?0\ä7–č˜tIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗ2IDAT™cø˙ũÃ˙ÃPÜ ÄĖü ƒÅ›qcūøĪ€)˙ƒ„>€ä)ģw: –öBĢIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗOIDAT™cø˙ũÃ˙ƒ@ÜŌū!á?Püƒ‚?ņC ēĮ@|ŧųC?Ų|    Āđ†b ˙Š}Ę<€bû˙m—5ZŪ;qIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™cxĀpŽ0`bų Į˙Cp;7đ1PލĻų@Cû†~ ž˙á?ūÁĀĐ ¤™‘1P ķ ų Pķ0?`ø#˙Kß/û9B-IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment5ߙI%ZIDAT™cø˙ÀáƒÃ8.â ?0ū˙á8>ĀŠi~PĀĐūÁ€áü†˙Høų†Ã@ÜŌ úC톆„€v|Jū`ūžb7hũĖ÷IENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™UĖą€ ĐpŽÁ&: ŖčQXēwŦ‘~iå7@eņš$¸e uČBÔ(+ŅüoäŊß2 NK¸Ä đgēĨHhSŅĻī}ū3īÂĘ4øĶ‘sIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR Ü0Ž_ pHYsb&2 tEXtComment5ߙI%LIDAT™cø˙°2700đ70´˙o`āGÂ<ō@qv Ę33Åä40ėĐĀđ˙ķ1;æ?QĪĀ1˙Мė Įô&1‰ËÛqIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ߙI%\IDAT™cøøÁ€áƒƒØ ?04°`8$˙áø˙ í˙!ü8ąCûîc``øÄ€¸ 9Œ@X€¨ŽąÁ(X6dĮöA$]/ō įIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%WIDAT™MĖĄ €0„ák*Œ@G{ŖT Yé%HFāFh‚Á•ŖŠ@|îŋÃũƒw„GYˆŌˆã§ĖÄDMĻaĢ {.iÃ)YÂģ¤>õ͡u}ԉ/¤2s}$ĸpIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%WIDAT™-Ėą Ā0 DŅ .TfĻQ +šJJƒ,  œ‹pņ@ˆãã áč‰č&;qOb,˙}éwŅĻ‘8éxĸb&¤!m)ŠÂÔ7m[Ww#¨F?ûŗ5?" بIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ߙI%RIDAT™MĖÁ Ā0 @• ŌQšŨúČZ‚<ōôõ}æį(¤-ElG?J’¨A4ą×ąnU?æ× Ä_ŠœęéQ&Ž}Ÿ6ĸk+ŒŸÆ6Km%špIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ߙI%YIDAT™MÍ1 €0ƒá_:tô =šG:x­ŠƒŖG0›kŨ:YĄ„o !ÔGܚHüDōb­b7Gg­s"ÎbąÍ‘§Š ÍU æëDb íC–<ˆâõ—89´yŨĘ9IENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%NIDAT™]Ėą €@ CQŖ)ŗRF %#°ŠGÉt‡((ž”Âų õ"ʈ}įO9M´q&BŽNŒÆį[ækkŗ­ĒßjŨÁEŸ*œķ(øIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%WIDAT™EĖą € DŅo((eFc5Ž…–ŽĀWŌ!hÔâU?wT2ôɊmGũíŖ˜MĶú’1{VyN9jW¸ÅÆtz9LvØäÛöų× ŠÕ02ŅlÇ|IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%IIDAT™c8ĀāĀÁPČÄōÚ˙Ŗâ x#Õ4780´p`˜˙€á?€āv fFÆ@9v fĒm€ÚņhÆæÍķ+ÆR6ŊIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ߙI%ZIDAT™MÍą €0ዌaFË(‘YK°Đ.+ŧ Li!Æ_T°øēƒŖB„—˜:ãÄÜÄōSŠX{­%’šzļ íļ?f“L_?g˛<)Ļ÷QíqēA,9Ã0y!IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment5ߙI%aIDAT™MÍ; €0Đ ),ŊBŽ–ŖRXzĨ K¯0mJ‹@œ Y,ûÅč‘aH偰™Øqüœb‘X´Q,Ŗ2cm ›Œ†×uUЧZTŸ÷]Ļ]ˇÆÁĖ9)Ũ–ŒIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%KIDAT™MĖģ Ā EŅ‹\P2BVņhf‚ŦôēŦÁŲ€!$§z„YŅDŸâNĸjg gU¸ĖäyÁŽq8UNYßü{júd &R§×]7IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸSIDAT™]Ėą €0CQG)˛Ö†tEÆ`#96¸2˜ ŠW}Ų8A Ō G`ÚÃ&OÂ/ĸK] 4ŠĸMQ¯ųQúéâņÚĶâAD!RŖņ)+ģ—ąŧIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸXIDAT™uÍģ €0 „áĨ e„Œ–Q@)X+ˆEŽ RRD į(>Ų’Į<Å@ŧúV2]‚ÛĩöBĸN‘Bō`1ß â6“zā×áŊeš3‚"Ī?ÆĒS-ĶsÁ>IENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸGIDAT™c°aH`°```(â ~ĐpƆ›2Ė *@* ÔFløPī>2K¨S¨<nDj`(ÃjIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸOIDAT™uÍą €0CŅĨ`-Â( [ėØäFH™ŅQ…ęFÚꉤ7)#Å>y!;[ûąn,Ŋ[´,ūĪbš,\15ũIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸRIDAT™mÍą €0 DŅRdŒŦâŨRd-K,b6p™‚ĨĨxWųÎ܇3qãŠí”ūIc,g0ĖÄ?0ü?ÅÍPÜÄėü ˙Áƒ˙ņõČ×9nöČÉ.IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( 9IDAT™ch`@ ė0ȃđCļ?|€á?ˇC1;ķ`øÅđ4ü ËÉõÚøD2xSAÔIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( @IDAT™cøĪĀĐĀĀ€Ø$0đá ō!xūÁ ˙q3ˇ1;˙C°af(†ō˙ņ?–95E*]+.IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment71—( `øˆ›Ą˜‚˙!á?üPĖŽĀ?Đ1H^¨ū˙×`45R (IENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( BIDAT™cøÃĀĀĐĀ€ `Äøđ{n>ĀPß~€á?;ķ`ø‡„˙Č#đ4ü #‹˙ą? @0= J ĶIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment71—( GIDAT™cxĀßĀp€Ą+00üP``˙‘ĀĀ˙„0đ?â‡ä>`øÂÍPĖ Á˙ øüŗCđ~ ųs÷6ģ*Q…'IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( GIDAT™cø˙Ą€áƒÃ†8`hâū@\Äø|`˜˙đÃ˙ƒPÜ Äˍø;*ūÃĖHl(É˙į˙)ģ9ŲW'IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ?IDAT™c8ĀĀĀĐĀ€Ø80Č?8Ā`˙ˆCđ˙f nbv æ?ĀđŠ˙ cų ?Đđ$ ˇ?z/ •K6IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ÅÍ@ÜÄėü„ųøøŸ3PaĐ|M˜āĄ$‰” ĢIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜WIDAT™E‹1 €0GR¤ĖüJž&XXúĨ ŋ‘'œŨ)ŧ`@–a›zžD[Ä%q[åôĘá˙vÛ„§é74NĢƒâA‡ĩ?ČŖˇh‡%ŊΜ.åčË@IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment8Ą(5˜dIDAT™EËą € Đo(dư¤t,J;W‚¸#PR\Äcņršģ˙!ĻŖATxäŨŖt‡‹’ü"÷¸ņĪ\fžž{žĶņFŅ"5 #ë=‰î‹ö+}ŲŲë†:i¨ã Õ1‰yXņkIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment8Ą(5˜`IDAT™%ą Ā Ĩ d„Ŧ(kŊ”"k0%B1PœŪzeúaTg Ģ‘ˇEžY7wrš\rÜfú…(Ā’œ2;āEP'ŒW>ôģĢ<ųļ:{ŗi{œö `/Ŗuŧ}IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8Ą(5˜QIDAT™Uą Ā0/•ËŦÄhŽ\d-¤,”.RøQŌ¸8é{ÁlNNāxĪ4îÉÆWBŪ%9Z šįģSģĄ[÷Ī-ĒĢŋ VG)J Ō„IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜RIDAT™Eą €0/ú‚52Ŗ Ĩ`-ØÄ#¤ü"Nĸ8Éoõô"ÄÎenUZÂ9`31*‘•Ŗ›åh1}QgMöģÉw÷ž‹{ø÷ōŋ =Ųä$A‰GIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜TIDAT™E‹Á Ā R@,ÅŌ, IcĻK¸į=͊° ,Ë,)…^2ŨOˆÁO@ĶÖŽLCŽÜåģē“ÔŅļŊ*˙^L8æ×E]ō÷ß§Ŋx^-áøDŌIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜_IDAT™-Ėą €0 ĀG)(Y1ĮŖQ0ĢXJ‘5^bč\D€“ ëôÍûņD „¸Up^3’ËÖíÅyn&X]\Ví¤Ię=Ö.0•ßĶsôā‘E˙ĩĀ2 Nf´IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜YIDAT™MÍÍ €0 †áW<ôčv´ŒŌâĄkU\$#ôØC?Ŧ„'FpÚâŧaœšz¤ü’š‘ˍšĒĖy'džŦTļ.c ˛Ē—u7aßn“Ąŋ÷îßo0ūˇ~SIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜RIDAT™cxĀø€0$04P`hū ĀĀū7qCACP]#H-HG`Ę10€1Hą ˙a``bæ@úDLHĨlÅ -ÅHĩ!IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜ZIDAT™Mģ € EqGŅØÅ‚Ō•H,,]áŽ@IAĸ—`aq^ņîgm5IœU\-q÷Äņ‘Íî_ąV†/LÅY’o$Ë´ČÚüˆîš;Š;˜yožl5­€íœIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™UÍą Ā DŅ/QPf„ŦÂhDŦuŲÄ#¤¤#‡R Ovq>3IČÚ%ēDŽĨlĪ‚÷Íq* ÃfüõøzŌęģ=›˛¨ū§S/á‚*ƒŠá”kIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment9Ö/PIDAT™cøÃßĀđŊásÃAƆæ í@Ėū'nâæ ‡00)† ˙? âã f5?âƒ@ 4ŋhĪ }돧+-ėˆ/IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/NIDAT™cøĀ~€áķ†ƒ˜€°ķfĀŽ@0P91™ ? ūõĀp;H?ČŦĖTÜĀx€áČ.ū ?ėN)´ÂŅ”IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/GIDAT™cøĀ~€áķ†Œš@0û4Ė€‚Ę€ČdxĀāĀđ˙ˇ?8ÆĖĄ¨Ą„v?Î@'`F< IENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™EÍÁ €0DŅlĀRė@KĘŅĢ•™t;˜cbƒ"˃]fi썃xĻ‘Éu˛‘í:ŧ˙˛Āq´€OŽšsŸÃzŦ¸3š;ø‡ŗn˜ũ5“1Ŧ!4IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/WIDAT™%Íą €0CŅ((a2ZF!bą ņב ŅéUļu´YÄ(žĢUeöȌ‘ēöĄ œuE¸W‰°{I<î_vz_~b.bķŸ:‰ļęē".,lēČ)IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment9Ö/GIDAT™uÍą Ā0 Ņ*3’Wû"kÉx€Ŧ ŧA"ƒ!UŠĮ•Į[fV1™SeÔŲ~đR„;¸ Ū‚cV6–>.;Oė$ExūĘÍģnãä++ČôĩIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™mģ Ā D_Dá52ŠGQd­Å#PŌ']tzŌ÷aš‡Øjrz8eđb™VɤežpsŎĶCån&ëķ“aZCg(ūØáŧIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment9Ö/RIDAT™mÍą Ā0 DŅo\¤ôJÍÁ‹dāŌE 9ƒ!M„ĐqĖ"" %ķœ=DuãWü‹āŸxÆįrļĮĻJjĸ­ŽÕu¸ĶĻŨE/âé/"Į_áIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™mÍą €0CŅĨ`Œd ÆÉ(dŗHŦáޤÄ-œ|…}ÜUD‹48’:%¯úc&án‚OvkWtN›1ŧķaÉۖŋ6ĄĻ!I&üU”_ÉIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/OIDAT™eÍĄ€0ƒáŸĢ` :ŖĀŊÅÚM2B%‚ōÄ'"’pĖbĄI4D×JŒT)~ÂēpˇĀ‘“Ęeˇ*aģˇ^-‰-?Lųšč­,ŧLtí˜IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/MIDAT™uÁ ! G,Ā,ÍRbg–¸ōŧŸˇ9ßËėÕÉ[ÂLī”$ ^Čl:˜!™đŠ­g+{䟞ņƒeˇ(ÚŅ^4˙§&zxx‹öIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set04.pa000066400000000000000000000743071506303110300215610ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøĮ˙€áû†Ė@Ėø€>H`8 Ä͏ũ‡;3āÁ (¤¯ũĐ,~đ€áá éŒģū°?qP/ąėķqIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™]ÍĄ€@ DŅĪ "¯ĨP‚ļ–Ą‘”y’s OŦųKŽ"ĄMœ!ö!{€uh¯œū{˛s á\ĒvõŖ~ŌDoē9'øœ)ôIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ķŊĒOIDAT™}Íą €0ÁE]”æVÚ2ĸ‘s~€`‰ˆ`ÂģåÎÂga›čMœ&v+¯•48äiølj|T‰†Đhy×ĸ´Đ/98ŽũCIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment0¯ķŊĒ@IDAT™cøÁ~€á3<ĀđđÆĮ@|üƒC;˙`c~"1;ƒôAõÍ: Ä`x´d×?ūy-é ohHIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment0¯ķŊĒEIDAT™cøÃ€áķ†Œ0`8üāCķ0n˙ĀĀĀūųIĀė`ũ 2ķđ ų@;>íúÁ~€áũ§,ģ˙IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøĮ˙áķ†Œ@ „0ü`Āpˆ›Aø‡C;ŗ˙`  Ā1H_ķˆ9‡AæšĪąëû†?@ ´ęÕ2o˛ũŸFIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cøĮūáķ†Œ@üāÃà 0c†ö?Ș†ŠmūÁ s~â  €ļ0üÚõh'Čî˙ķ?+J6|.Ë_gIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøßūáķ† >$|`øøĄ€áᏆĮ? ˙€ãæ? üFŌsđÃA 9€fMgøÁąë?˙˙î9ļwyŅIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøÁū€áã0|đ€á⇆Ã@ÜüAĄų‡ķvq;ƒôâƒ0$€ÍŲķƒųÃ?ūwĪ+ąnÎrIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøĮ˙áķ†ŒĀđCÃà ‡ÁX€ĄŠÛ˙00°ãÁĖPÜ Ã?ĀúCņà  Āv€ėÚ üŸ0tŧÆGÅIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒXIDAT™cøĪūáķ†Œ@đCÃà øđ†fūÃÆíPĖŽCÄÚ@pķ†Ã s€øņ š@æmÚõd/˙†˙ķ?ē 6īTaŅUIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment0¯ķŊĒKIDAT™mÍĄ Ā0 DŅĢ ŗ’w+ČZt wƒƒqŠĸ¯‡?F!t‘ŪFÜA<"Ē|ąOĮ¯l˜öęâ¸ÂŅč`IŅķ7Œáo-ÎAMįIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒSIDAT™eÍą € …áßPĀŒrŖ]Ša1Ü7 ŧÂm,žōŊŸ یŽŅP'Ô>eĒfvI–(7Kpņ'}Ękn,súĪՄVÅē:ŗ7ĸ=Ų-ĒTaIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĪüáㆠ€°€áÁ†‡ū€āÃ@Üü‡Ž™ąāft ŌÅ ũ?Íš 4dË }˙˜?ü1QËrIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮūáㆠ>ü(`øÄ˙0c8nūÀ‚™Ņø0|ŒĄú~0<üaÄ €l`ø´ëķ†˙ė–l7ŝEļIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<4IDAT™cøÃ€á71 ŗ`ø¤˙ áDâ?Xđ y  0ĐÄ€øu.;°C¨IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<+IDAT™cø/€áû†?@|ˆ€¸Š@Å˙Ąc~Ō1ČtĐĀĀî.…b‡EyIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment1Øô<'IDAT™cø'ßĀđ‡ŋĄˆ ø˙ā‡ˆ˙‘§CÍA’Uá(éŠO†IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment1Øô<5IDAT™cøĮ€áû†ö Hø˙AÆü”á@3€Xˆné˙@ü_,ļ5Ũč>|IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment1Øô<*IDAT™cøÃßĀđˆĐ0Hė ËCđtĖĘGVcƒô`š‰ 3÷$ŋé{}ŽIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<#IDAT™cøcĪđ@ž†>Č3ü@Fö„’âĖ pđ‘Ž\š ?IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<+IDAT™cø˙˙Ãū ˙Ø04 á@ą? q*b°Ų `üˆv×6­ĨÂÛ|IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<1IDAT™cøĮßĀđˆ€˜J?â@ü†Ų‘Øō¤a9?€ú@@Ŧ˙ ĩ(¨Æ‹ßIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<%IDAT™cøĮßĀđ‡ŊĄˆpHœJøČL$âũo`¨ž&ž#vIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<.IDAT™cø'€á˙†ė0ˆ˙ƒ"G üh^ƒ 4ņ“X/#čs1IENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR Ü0Ž_ pHYsb&2 tEXtComment1Øô<#IDAT™cø#ßĀđŋ ƒÄ~åūPƒĖÁū30“&NÅH.AIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment1Øô<"IDAT™cø#ßĀđƒŋ ?ā‡ˆáÅō$`š …ã%ûÁūš IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment1Øô<IDAT™cø#ßĀđˆĐ0Hė•đ~ ™ q;%ĶžQįIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<1IDAT™cøĪ€á`?ĀĀ€„Å~@威0`h`p``c†@ú˙ŋģ1ڃ-¸ŌIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<IDAT™cø!ĪđAž†€ėäĸv8øÁŊeĮΝķŨIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆^IDAT™MĖÁ €0DŅrđh Ļ-ÅR lÃRb'[BĀK!ëÜáÁĀĀRŊĐ“–Ā.#ÃPĀ÷Íe۝*+šÆ~´Q¨ĶI™!+HƒÔÛëģŪUÂjü+féĖÂXIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆_IDAT™UĖą €0á –Á7Z&ÅÁUā ŋ¤õ!ZxđĩĮV U"Ņw‰1'&ąuęFīf%.‰+ģÁųãŒâhÄÖå4V7Æā:žėgŲup—-ŪŽÔŋXIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆YIDAT™MĖą €0CŅ((3BnVÉ(A)X+lrl’%Ņ`ëU–LN›ˇ•DŠÆîFhÆŌ`–ég“ĸmxbTgRDwh\ĢŅ:œrHæķOF==úy,Cí%4$IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment2Aũ܆aIDAT™MĘą €0…áßĘŌÛĀÜĀ•˛ KWЏHĀŽL!9/`!Į÷•Ō)í2+OėÚ‡ÛŠNīnß-7KŠE×+uPžQ(ŗ ‹Ģ˙WHë‡OËVĻÍŨ1w XãôIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment2Aũ܆aIDAT™EĖÁ €0 …á_ī…p÷Æ7‰Bd?"Ų‚@ŽĐK'Kŗ*ßÕ_âēõ’p…Ž?Ī`ÜãF6ƒ9œRžĀæÛøDë.zņpįIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment2Aũ܆dIDAT™5ĖÁ €0 …á_<ôčvĨ“ˆâÁ5Ĩn7č҃´žĸ&|ÂKČŊ‘Ŗv$°Z`3Kž.A+đ™ĩ_äTĻ([ĸQiėŒģßšOš<–!VŖîxũUįũ(áÅ-ÕŽB?mIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆]IDAT™MÉą €@DŅ/Z‚׉­\'jļtb`cˆë* <øX+öZ¨9'V%ĻĄ@í*7ū,ŪLˇ„eaŖ âlÄŅEöŠÁvÂė20ŧžŨßJŧ2./ 75LIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment2Aũ܆_IDAT™mŒą €0 Q¤ÄŖ°+eBEÉJ‰X$lā2E„ą(¨xéĒ˙?lUÚ¨T”LäŦ3{‚3(ۋPŧ7ßYŽXRĖ˙wPú$´EĐÕ1áēĄtÜ ‰ŋ¸§Į"ß,{:><9IENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aũ܆[IDAT™cøS€á˙†Œ@°ÁĄ˙€ƒü0fbf4Üüá<˙Ēûßp€á?Pī?æ €æü°s`øQÃĀđņÃc > ÄÍЀ @N'¸¯…ŠJIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆]IDAT™]Íą €0 DŅĨ d˛ ĢdDÄ"Œ*Öđ)SD 6 –^sļÎT/'dLäĀT xå~’înŊYIiGŸ…ļœÔĘŌá2-°Ãë˂~ŒŠÛ)ôĀ!IENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆^IDAT™EĖ1 „@ƒá_,,míömN"Ę^kĀ‹ÄŒ…8fEØĀ×$Ž^¨ņ͉EA_~ ŗÖš×ė~õ^•¨YÔŲZquâôĪņI”1د`ŗÕĻÁxü3Y!n“*•Ĩ›2IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆YIDAT™MĖą € Ņ#–Œ Ŗ1‰ÁX¸„E~âØY ø5æōÚŖZĄá)EĪ&N-0(ķŗGV]<= =ŠUBĶOį Gƒ]å p¯ ú%7įV-ärëpôIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆]IDAT™MĘą € EŅK((Á?“…kA\äģvüZYœâæ=šWĒS2‰5'vb}A0Ū¸°šÃöĄ‰‘•QĖf‚ŌŖŌĻÄ= WNSšíŋ đķöhúšÂ.AmüÚIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆[IDAT™UĖą € „áßXX˛›¸ “ˆ¸ÆEžPRđ6ŪåĢ.9ŠŌ,ôFģXeÃŦĻO,—îM-*/´ ÔEč_e…ŧAĒpĢŗ€įõūd÷ C+ŦiDŊIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆_IDAT™]ËĄ €0„áŋA°ŽnÂ*lÁŒA°ÆCa+ åHPäōåÄåHÎ˜Ō˛™gžéĄ'ƒô_¯ÚNÉ֊‘Wģ4R=ˆ„ ‡,ú,č˙sUūi/…ĒoŠ IENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėTIDAT™cøĀüáƃ >0`hüÄ?Pé‡@ņ˙@ų@u?⏀á?HüƒÃķ@ĩ `ĖÄĖ0 ”cĒi`0`8T˛dßų­0ƒ/>OIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment36úėXIDAT™5Íą Ā DŅR¤Ė ŒÆ(D •’*kÜ”HŽ# x…}>ģDŨ„‚x˛(J”'Ļ1ŋÎ<7 ;E CGc_~Û`[ŧŋ/Šd"7Éão?ôHJ7á{Ė IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment36úėMIDAT™M1 ! G,RúåŊkü–?9Ÿ`yŽ`!aX™ #DOâETAiōE5sĶÄ|Äogd§Ŋ)cį;w1.ŧ—Cr˙žfĮ?ü%ø ņ›IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėNIDAT™]Íą€0 CQq.\˛Ŗ…*kiVđ)Š€ŸŖ‚â5˛lk¤Uayąē­ŦMQúčdnŖYŨsÚM†9ô?‰•ÉnĶûg„ŋQ,L0FôIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėYIDAT™MĖą €0 DŅ(X#Ŗe$ŠŦ•TŦqˆ\R Œ#RPŧžŗšfa“8ĢØ•)JKl?{p˸„ˇũ'îüСëŲčmķ°ÄŧôĄ­™JÆ÷¤ƒĨ6tÅõeĩIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėXIDAT™MÍą €0 DŅRP˛‚GcĸY+‹x„”)"™ Y¯ņųdžÃéɉš8)ŒŌüsËR˛37gČTīÛG.u@‘:ėRƒCÃtmtũQ˙ú˜2ˇø† IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úėZIDAT™]Íą Ā0Ā\x Fķ(‘\¸ĖJŽRd F ¤ˆDŪvĒ]Ā“bÔŲ Ē4ԟKÁŲ´+žM៰}ængž’cĘļÜo]Đ!üT`X7"ë L6†bŽ?IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment36úėXIDAT™-Íģ €0 Г\Pf%ĸ ĖJˇ+x„”H朠č)–ŋxFÔ;I\áh˛`úKånÉ R=y¯-ĪŧęŊæFÁĸí× ėp]ņy+d?,÷1ÜËQ¯ÖIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėTIDAT™]Œą Ā Q°ŖEJÁZŽR°Æđ%ŌcBĒčuÅËöĄ'Â@<,hTŽM„„qã ē§~[ŲîÔŽžHŲˇīuĘO­mæJ1}Ŧü66IENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėYIDAT™-ŒąĀ ÅQ¤d„d4vĄ ĖJĄb ā¸Rü,KÂ{ ĸ?ÄÍŒĘ Õ.”×]ŪÔo*31Ôaë固ŗŅ°8DŌ|O4dĐņ^áņŅ6ŽnødIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėUIDAT™EÍÁ Ā0…áWrp-7kƒkyëvƒ P0/)Ĩ„ī¤ŋAy Āz O…$ĐÆË6ÅE•ēÉO#vՉMqîܕņˇōá=ī@‡îrĩgLHS0TÃɡĖIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėSIDAT™]Ėą Ā0 Ā7*\fæQd˛˜7Č ?‚Ō”7I•âxôHBTbâ5ŧãdƒI‘ņŲ]Ύtbi/Š(oÍIõŅp`?UŽû§îĸ[!˜,ÎRŸEųIENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment36úė\IDAT™-ŒÁ € ‡ØĨP‚%Ņ‚áaYbl„îɃä\ĐĮä’ŨÃ/ŖŖaÔ=ķ´Äi‘Ō?q‹G™OÔ{Ë í‡ŧyŊfuĘįn9~6Q ũ„J\4’Ŧ<ũWņ4ėÔį``IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėOIDAT™UÍą Ā0 DŅ3*\f%fpáĩn Ōs"Äk>Â6"Q7é˜,ąw;á8$ĒÉĸn>ģŦēXūû.m8Š>Uwņ%+ĘbŲ īIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėXIDAT™MÍą €0 DŅ˛Ŗe•(EÖ ĘŦā\RD˜‹  x’uöÉÄix2l3†eĒī4ŠåįPļdĸˇî§zSs¸˛ĩŋ`H•"éĶü5Ôīdômõ×$6¨‚€éIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗIIDAT™-ĖŅ €0„áŋ8Š#Ú¸˜nb7¸GLņH!ųBÄq•Ŗ fųRo‘=6ėîâ´f8ÃÆĒė;áYôŌÖ?y——~”€4|CųĨ(IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗMIDAT™EĖA Ā Ā=æŲ^ú,ĄกŠ—ĸļÃ˛^ žC Jø ęËmxŲŠĖF…{a^ėI Āgëšƒāá͂g™~$@wŗ~)ŅIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗPIDAT™cø˙đÃ˙ƒ@|ˆ ˜ņÃ?(ūÅ? øCã†Ī@õø8ˇųí  ĸĪ70üo„š Â@ö†@š@ ¤ģ>8_*´ĪIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗHIDAT™cøđÃ˙F(f„āHø˙`ūĀđĄųÃG ~ へ8÷q;312øÂ@1d 2ëƒåÄ˙? ĨĖ9Ĩ2s†ģIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žyŗQIDAT™EĖģ €0 EŅGEF`ÜtŦDIÄ" p:ˆpƒŒ°u$Ë?ĩęj{X‘ƒ\7ŽĐĶׁfnFöĨ¤/2õûĢü\“Œž1īúE[Ō$<EIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗKIDAT™cø˙đÃ˙@ÜÅ ü‚˙ņ(ūÄ?0<âÃ?0´ƒ0ÍTĪ € úü˙@98™Š„á Iw4ˇûLĨIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment4¨žyŗSIDAT™=Ėą €0CQG,ĀČ €‘@”Ė@•ö)"H8éUg[é6ĨKŅÃ}ă)ŦĻŗ¸āÉnØ1ŌqjU¯ÃŋW7Éŋ,äˌ4ŊŗˆAĐ$$ IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗHIDAT™cø˙üÃ˙Ã@|ˆĄ˜‚˙Aņæ ?€øc3?†âãPÜÄė@u PĖĻÁf5#đ†@qūÁ#O8ÉaėvIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙ũÃ˙Ã@|ˆĄ˜ˆ™0üâ?Püˆ?ņįæ ø9â~ æęág@l@ 6Ģaî Ø$ü˙_]›6ûöIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment4¨žyŗSIDAT™MĘÁ €0DŅąˇKŒXˆ­X-¨'¯+šä ‰?! æĢDWš°53WîŧHxØ"îÚ,Ž+˙Lũí(­ųeMr™N6GĒÛ—Ø;žŠĩIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗJIDAT™cøøÃ˙ƒ@ÜŌūÁ0ķ†?@üŠ?4`xTķHa ģˆÛ`›3ķRņŠAė˙ Øw5n?ˆßIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment4¨žyŗGIDAT™cøøÃ˙ƒ@ÜŌ@Ėüá˙âPüąųÃg ~Ä၏ˆų40@ĖhFÂ@ū†@ų ø3žÂ>(IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙øÃ˙ƒPÜČü‚˙@ņ ūŲüá3?? TÃÍÜĀ Ā @üžaÄŦf¨™PsÕ|Ę˙â? !ŋ<‰ø IENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗKIDAT™5ĖË € E҇X2ŽhKâ‚:Œ ;†ņĸ8ÉIæ/?Mžą#bCøôéFƒĄ˛{á@A¸Y´ę§~å‰ŧĶ3fC“ƒõ8ƒ–IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗMIDAT™MĖą €@ CŅ_\ɐ BAĮZtŦq @¤čB\ ë5–eâqâZˆ.ģŦūÁR™ëÎ-g:Ō–[hB.›žü÷9UoÂxsų>~TĕIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ߙI%]IDAT™MĖĄ €0…áŸTÔvVčhŒ@ƒ`­KHVhÂ'ëĘ+‚ >uī~zËT2öY°ÉąŲ9ēsūXüŨËė5q:\Ō‡ˇlRDÂ+´ úYG_Ēc‹ū‚ļ3sæ;ķIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment5ߙI%PIDAT™MËą €` „Ņ‹”ŽdF X¤tW9'p…Œāņ„´xr|8é &+‘Mėú§ö-tĢ9ĘŅôũšÄdŦ^ŽER՗ņRH,œâÅŊØIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment5ߙI%TIDAT™UÍÁ €0Д\ãöG öčJ_\$ā@øæPAī’ oĮ†Ā˅ˆBIôm!Ö*ʝ†]rāį”&eR5 žÉÜęcT>'3ŲąŠęhIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%WIDAT™MĖģ €@ PŖ+2Æ­rŖņ)ŽdVqGÉ !%]°ÄI č5–cdDtE*q&Ņe—k˜X'åTîÄá é@ƧKųąh0õL?ÛōîģvîĘjÔ4­‡dIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%NIDAT™c8ĀāĀĐÆXūCûî‡b›ˆōĖ@u븁XūÃ˙ÜÄĖh˜(ĪÔÆŪ5hÆ ĀūĘb'ō…Yģ/IENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™cxü!á ?`8ĀÄõÎ˙GÃō˜˜ņCķ íæõū˙ Ä `|ˆ›˜ŽØA¨¤¤÷Ќ@;ūČ?ԕ6Th˜˜IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR#ą“gō pHYsb&2 tEXtComment5ߙI%PIDAT™MÍĢ Ā0ŅąĻ%—f˜ŌĘv—`æÜåiĩ ‰NAŽžDMÎÜķÃŽN ˛ KƒÕ›ËÎBģé“āÜņûPû¤CË)ŠDÔŨIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%TIDAT™MĖą €0CŅW¤¤ĨË* 2ĢxnØ \H¯°d›ĶÅÆĪQÛc­Y`!:&‘T¨^8ZwA )XäôŖ;SƖū?žu_›*25˙ÔĄIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ߙI%QIDAT™cx| áC213Ë70´˙o`čG 1 P P-;É€aū†˙PÜÄė@Ė Åė0|¤ bū ~4įŠõ%ÍģĄEŒIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ߙI%SIDAT™MÍĄĀ ƒáŸĢčo4Fy=˛+1JFĀUŌUņŠ$UņSIDĸ-Ņō´ĸ_YiŪv÷ ÖŨššfAÁa%ÃģīK›\˜§^Jž/¨r3<IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%OIDAT™EĖą €0CŅĨ`lÂ*ŒD‘’•˛ îha°tD¯°Î>n:Ą˛˜¨ŲfŅž_,)îîmŊĐl÷ū¸ÂyÁúIƒãŋƒ˛^[b)ĻT 8IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%WIDAT™EÍą €PĐ|ޏō¯tŖZū\%ā"Kģ3ĸ`ņš„Ô x5‚FEl2>ĢŠ<Õ/I¸v]ö ÔųâbŌÔŲC–Ą—@ęe*¸:oō,áōIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%VIDAT™5Ë­ Ā ā#lGa4V¨ęZMČŽđö$Ēôh@|æ~0Ū„Ęք°@ÔA´ĨLĘn'ÚdK(ú=<0úd9'^ũti[,ū_ķDü!K7E‚W›#IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%YIDAT™MĖą €0á‹”Žāho”ˆE!#8Š ĮđÁŌ.>AÅâëŽŖžBå#J+Ö*ōß.Ļ b#oR1˛ŒY=Ëõąšäڗ xĶš1ņūûCACv2ä'1IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%UIDAT™EĖģĀ PŨQ¤dFķ( JV"UÖĐ”é%—Oņ %Ã'1`ŋ ŧ›ģ4é˛F"ë–AÔah4ô™ā7|ę#ŧ˜PÕ-Ú\[ęĮywÁ2ęŲ¨ÎĸIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment6FŸWIDAT™]ÍÁ €0 @W]$Ŗe”J€•ZąˆGȓjqņāq¯Ä6F"NaRÂĐ_{8ęä§dQĻ(:’îYÜęO×kkęÕÆkoíĒknŧŸ53ÎūæIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸSIDAT™EÍģ Ā P# Ö`´%‹egƒ+)Āä#Š×ÜY6F"z  ž0ã–ķsšĄ nĘQŒPA˙čeiØū›ŋ=ĩølhK{=q~4ãNL0IENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸPIDAT™MÍą €@ CŅJqc‘Ņ@,–Qn„”W AņšDļ9,˜‰3€p Ø^ĻŖĨcg<–:JeÚĐ/šõŋņŠŽŊúV×RíhOųŲãc%ŧx…pIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment6FŸTIDAT™eÍą €0 DŅ‹R¤d%¯†˛ØąIFHIßBTΞÛ§UŦSÖThHt ėč#`ĩûUĄ†âoĄšĪ,ˇųׇƒi“AVf˛´¸um~Āŧ*“öĸī|IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸRIDAT™-ÍËĀ EŅëXH(ÍRbgĻ“W‚K6‰btq`ø0nņQpŒh‰¤…gqŖžĸŽŦ3UĀ ē‘b.ų–ŋŽ~=ÖŊ?{=ĸ'1.M*“+]Ū.K˙IENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸWIDAT™5Í1€ DŅoH¤äʓXPz%ˆo@IaĐ%JņŠŨĖîН¸Q%ÁUāøÅĄ‰ø?œbõģqŲæ2Aęg7q˛ũf™œDÖÕėGzÉ+ÉÖ§ŠŅIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment6FŸQIDAT™]Íą €0 DŅQdŒŦâҐXėØÄ#¤¤@Jė@õKwĮ¨â.âB8ļœ2'ØRģ¨ãÕ‘Ą<6ÅĪ“}đ=ŅšĮFĘķČöÜnšÁš,phr’IENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸEIDAT™c°cP`°â0NâH¸áCÇ ‡0001è*ˆ†ˈƒÄ€ø€Č, Î Đc€¤Áč'œIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸPIDAT™]Íą €0 DŅR°–Ga•(‹™M2BĘˆpļ(œÎŌéĖš0&0^ũW8“Q§S—Ķ„"›Leę•Ÿö‘;=Ē–FüÔÎŊû‘Ū*a›ēâkIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™UÍÁ €0DŅR€-liiEļąØÉ”°Gb\1(2ŧĶĀ 'â ącD3$c›V5<„5ņ(Ų×°‰~īuŖį2QōsŅĸŧ.n„‰,IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment6FŸXIDAT™EÍą€ ƒáŸc‘7Ŗ¨,Ļį"’ƒ_•KÂHâBt  E ĮԂĶj/ԡזÅâî Brž§ūŠßėÚę­}ōžŪŸâ?˙zįÎzF2WפŖIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸQIDAT™=Íą Ā DŅ(˛Ŗy bgJ $8+JŠ×ŋŲŨY8c”‚ģŒÂ#Mú4ęöY’č7’6!‡ ~ÆĢŠyG—`ĸjŦË:Ž2"Ô#:IENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸVIDAT™]Íģ €0 Ћ˛#d4Ā€•ˆXÄlā2Â\ŒDAņēû ÔpÃpAā ­ §ŋ:C aT*ÄLP˜ŠĶ@ԟîȝŨ’|ūq'6{'¤3:I$Æ_IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸOIDAT™eÍą Ā0CŅonæQŧ˜ŗ‰Fpé"8WRF…:KÎė|5á0’ōF^õĮh‹zˇū¸tÍНšų§ .ū­R–ÜIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment71—( DIDAT™cøŋƒáC#€˙ų ø!<Ā`øÃ˙f(fGāPü‡ Š˙`‡ĐČøPîŸü<ķ26p’ũœIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( FIDAT™cxĀ Āp€Ą 04˙0`h˙QĀĀ˙„?0ô?â‡ūâÃ@܌„™˜ũÃ?4ü†™11Hū˙Ķf9đœŌqIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment71—( EIDAT™cøß Āp€ĄŽ€8Ą˙AÃüäAøáûĮūâv$ĖÄüūAņ,ø:f‡ˆ˙īR7ÜĀ•ÕĨIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( IDAT™cxĀĀĀĐÅ Ä üä?<`Å0ü? ÄÍ@ÜÄėüŠ˙ áđ~ ų`v4žŊík4IENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( CIDAT™cxĀ Āp€ĄŠ!@ũƒƒü‡ ~Ā ˙ˆ>`øˆ›Ą˜ŠŲ0üƒâ?Høü‡¨GūU¸4Yę}0IENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( 8IDAT™c8ĀĀĀЀ‚?$0đƒņųP|đÃ˙Ã@Ü ÅĖ@ĖÁ˙Đđ\˜‚˙É?|†2ģæÕĄĒIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment71—( EIDAT™cøĀ Āp€ĄŽ˜ũƒ?Ë(`Âė~`øßÄÍPĖ Á˙ ø;&ū†‘åūņõĪ˙c–7ũpsΘIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment71—( OIDAT™cøÃū€áCn~ ĀĐ˙Caū†ų0Č?„āũ‡0üáã@ÜÄėü„ųø ŗCđ$ ûÅ˙ęūË?Wī=ąŖĘū>IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( DIDAT™c8ĀĀĀЀ†›(0´P`č˙Ā ˙áƒüà ö0ü? ÅÍ@Ė Äėü ˙AÃ?Đ0Lü?P¯übĮ7%âųĢæIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment71—( NIDAT™cø˙§€áÃ(n€c†æ í? Ú?0đøĀ0˙Á†˙ø âf(fFÂėū!c ØdŒ$÷ŸˆīXÉ=[klŗ4IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( =IDAT™c8ĀĀĀĐĀ€ ø80Čąũ‡ öøņ†úÃūˇ#a~ūÅ`XÁūÃÔũŗ?æ2ž”:xIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( ?IDAT™cx € @üų ü€Áū ~ĀPßü€á;ŗ1˙†Hø˙GÅ`˜ ÃäíˇE3n‹‡EâIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ;IDAT™cøÁĀĀĐĀ€ ĀXūÃû‡P|øC=˙o‡b~ūÃōū@ņ$üķC1LŪū$Ũ0ŽCÉéIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( HIDAT™cøa ĀĐĀĀÆ Ä ė0ČąũC ~ ć0üáv fb~ū‡„˙Č#đdĖÁ`(öˆ˙Û?Úä6t.;‡IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜PIDAT™-ËĄ Ā0 DŅ‹ģ’GKQaW:Š‹x„@ƒ€ž[ƒw’e}Ä ŧ$ņ,â ûÜrČHËĐô›íGq$ͧf¸ÔČ.ugßi˜¨ļķŸB):äšãIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8Ą(5˜TIDAT™=Ëą €@…ág,l…ŅÜÁÂĩ¸X¸†n@IAN90†|ä>)jV\`ÜÆ8œ~í#q ŖĢžpū5!Ėĸ]:aīH›Ҋ–ōĮb?§žn‹0 *fIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜^IDAT™-Ë!€0 @Ņŋ \ĄGÛ]HŽ42ä MH&+–…†Mŧ&múi“b(…čS¸‹đ˜đV¸Üų˛ß’))(:”Ņīrō?ƒ­v{ƒÅÍM|Vī$zgA?Ņ‹3­—PûÅIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8Ą(5˜TIDAT™EËą Ā DŅQPz„ŦÂhH)ŗŌe˛KJL("ëI'ëĪĸâ‘h../ÜÁƖ#§øķŠŊš„–Čû -Xs8ĮĪ–ĩīĸYųļÖŽ'FĸWxIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜XIDAT™UËą €0 DŅ‹R0ÍŖQd-" Ö¸RψNČ ˛^åûX;12ŅAŖuĮ= ÔpĘ1EŋĸÕ ahR ímūeõ‰ĻÖÕųWõDĖÅŧ•02Šŗ9IENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜TIDAT™MËą €0 DŅ‹(Rf%FDÁZ'Q°†ŲĀe œädŊÆú‡ėÄáō¸á ā^Āųs,Ô=ļâ­65TĢmW?ōĶŗ~3Lu]lDžĘ$-ū/ŋã*IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜[IDAT™]ą Ā0Τpé~´ŒbH‘2+9›h—.‰ ŽÂ#x„Nâ-ĸ'1¯ąs+8zpŽāZšļ—úN Qo‹‘f”a=?ŲËîØÜ]Ÿ;2?Š>šī+ĩMˇÚÖIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜[IDAT™-ą €0 Š’Ø!EJVŠDÁf—AŠáâ\ŧīõôŲ¨“áˇoœU´•Kä ‰ĸŧėF‘ká;›Ž~@rҐK‡#ȑĨ:ŧá˙Ũąų>öÅ`5Љ¤ IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜ZIDAT™MÍą €0 ĀG)Œ–Q‚(˛V‹ü.S āR ë*ŋũ¸WÂf‚QIœ–P\sqHØ%‘=7|“ēŖ*ĮˆĐ€Å]?ú,bĶžöŧ:ußÔûž„´5ŸnžĨIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8Ą(5˜TIDAT™MŒą Ā0 Τpé•4šC ¯ĨQ4‚J)ō„į@<÷"ĢÅY9øŌ͍“nuEt9+Ŋ80ē܄ĻMģė?G@—(MūÚ9Yüjá&ņæĀęhIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜XIDAT™cøĮ€áㆠp`8üÁĄũ nâF xC† ē õP=ž300œĀĀĐ˙‚ų˙ bv€újÁz™0í‘I-˙!jIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8Ą(5˜TIDAT™5‹ą €@G,Ā–Ž5#ÃkiÁāC[°„“ôß`XXf¨ŗˆIė%ŒR lƒĩ ]IzJ˙Ė :Æ-ãˆîƒ7XÚŋųĩŅķĩ‘íãzĮR25”ô†IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment8Ą(5˜WIDAT™Uą €0(R2Ģd´—R°–‹ü_~! ¤Iquļ‘+ á N¯¸ĸâș&,“cr9|Gũ Éq $°õ™Ō˙ŧi—¯‹ŅÕFčûŪųCÕ0žŊ1ŲIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜YIDAT™EËą €@ĐšĀas…ki\äF ¤°đƒ…—ø úDö ÅeŠ{ † Žø ÚCa+eļe>ŋ”„ŗp‚…6z€F=9ĒŦ˛ßO/iÃ%/ĪŖR˙IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8Ą(5˜VIDAT™EŒą Ā /ĸ dVũŽ2+!e؀’‚"ORPœeŋîÍĘbFŅ‚č—xĒ(CÜŌĸÜÁ„ĸĄĻH’$šāy]—IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/WIDAT™UÍą €0 DŅ‹(hŗ+0ZF°73›Db+)p&œܸΉ`!:ĸ78Wø‘*Ę?Î!0čÄ%7ëk×ĪĻŽe‹jf×ĶNh/fm.|Ȩ.1ÍÁƒIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment9Ö/\IDAT™UÍą €0CŅĨ „-›ˆÅ‚„áĘ‘ÂĐ ë•ļ—ĐŖ Á –D•DŅõbûÛõUœ@ëa}č Œļ2Ŧ{šÃw|Īe!‡}æÉūfĄmrŽX3ŗB5ŗĄIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/VIDAT™UÍą €0…áRX:‚Žæ&nąˆ…kŧlŌ"/(ŠÅ×Ũũ:‰2‘›DԂ•™đâĮQūuk~ÛÎĪQzG˜7-{w÷ž5ŠēęĮ^3ž–âāWIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment9Ö/UIDAT™Mą €0Č((!Ŗ%bą%mĘtpO„@/KWXoú*Ú,ę$Ū+5QĖúˇ b$xŌw¸Úā|œ4˙YĖ6stĸˇ˜hoēÃī/-ŧáLIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/VIDAT™MŅ €0CŸôÃ1\Áē™”.u‘ŽĐĪ~ę JxČ]B›EDAˇR‰äę@øĶ>Ÿ_va`}…afT'rzG҃æ$Ž`;žˇˆžé˸/É"ĨčIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/TIDAT™=Íą €0 DŅĨ`lŖ0 ˆÅ‚Xä$Hé"õ:۟DKâ™Ē™ĩ= [ō‹ßöi° 愝 aWt§Ö˙ˆU"yyqŖfW܋Q7ū0‡*8@IENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/OIDAT™mÍą €0 DŅ‹\0-ŖÄb1K,â\ŌÁ˛^ãĶŲ*K­ L ytY~$Ģėø=Ņ”.Üĩtpú-HƒÛíßö|­2'8Ξ)ÎIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/SIDAT™cøÃ€áû†Ė<ĀĐü‚Û?80°ƒ1VÜū€á0?<ĀĀđH˙˙Âp|˙Đ 9@í@sۛ04í9˛Oūy;2ŗå(âüIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™mĖą €0ÁĩŨĨ})ļhˈFŽ„ ÁHĐiÂ[Ž,zc͍͌ę Ķ_ëĢ Äz8ũŗĮtĒĸ׌RĸŸš…g]ŦM-ĻJVĸ IENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™uą €0ĨHÉJ…Q^JÁZåG LüôWX˛ĪŦ.˛ "SĸåøčÉ?‚xŽŦ öS ™iWų­ōû'ęīÔ öÉ'Geįĸ¤IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/JIDAT™eą €0žČŦ’Ņ’Šĩ<ʏđ€#!Ĩ 8šņŲTB‡˜CDŠ–}SüI°â>8(:Onno„>Ļ8ŊŊ„á/]zĢ~&]ņd?CIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/MIDAT™cøÁ~€áķ†ƒ0~p€ĄųƒC;ŗƒ1n‡âÃ1Éđ˙2v`8ÄÍ€fĖ;Á @;íú wK/Ē“7IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™mÍą€ DŅījR­(áØČ–p™$ŠąÁKnnwy7aŗĐ$ ]bˇHvĄō+wæĨā)°ŋˇ!r{ū=É˙D>ÅŅ7‚o-ĸ6}øÁ0ĐčavŦIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set05.pa000066400000000000000000000757571506303110300215740ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮü‡0Ô0|øaÃđā ÃAūĮÆÍ`ĖÂĀ Â˙ˆÂÍ`ĖÂĐÂ@}Á˜‡á!ƒĖ˙P!ÃđÃĀhk ÃÆ?ŲŦ0ü !IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cøüū`¨aøQcÃđ០Ã< ˙ķ0üĪƍ`ĖĮĖxp3ÃÔÂĖxÄ sÍ˙´į‡… ĐÖ†˙Œ€nŗ’6÷´3IENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøßū‡Ô0|¨°axđG†áá?†ƒ üŸ‡Ąų? fūĪ@ÃÔ6BņÁ<`üˆÍũđĮ†á‡… ØŪ˙Œeˆ3~}GÆļIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment0¯ķŊĒ8IDAT™cøÁđƒáƒ„Ã@üG‚áā0nâæ Ė`F¨9Áæ1Ў‡,~øĒn)ĸ­&đ/IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cø˙˙Ãæ? j~TÔ0|øcÃđ⟠ÃÃ< Ą¸ņ? C3300›ÁĒį ÜŦ‡@ŗü‘aøđÆá‡A ĐfũÜä6ŽŸėIIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøÃđƒáGEÇ ˙ņ? †Ã˙8ų?3€13‘¸ ūĮĀphƒĖ}đG‚áCÃƒ † ?šå/7ˆ5+wIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cø˙üÃÆ? ?j>üąaxÄ˙É0üĮÃpˆ›˙ƒ0 3˙g ÃÔ7ūc›ÂøĐė˙l~TÔ0mføĮøņ4ĘÔLŧIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cøĪü‡TÔ0|øcÃđā ÃÃ< Aø?Cķ8fūĪ@4nâF žƒ0 4dî‡2`{~Ô0üc¨aøßø‡á˙˙?z67ĖõŖIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĪü‡áã†5 ~Ø0<üÄ˙d˙ãah†cæ˙č˜F¨éáƒ@3@dîƒ?2`{@ömfÚw2G‚7),IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøßü‡$Ø0|øaÃđā Ãƒ2 ˙ņ€qã?†æ˙0ĖĀĀL4fah„b˜Y 2˙C ðŊ˙˙f´2‚ÆÂ\IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøßø‡Ô0|¨°aøđG†áÁ?†ƒ üŸ…ĄŠ›˙3€13 SׯŊ s@æ=c†52 ?,l€ļÖ0ücøŽ2˙zŖ×;IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒSIDAT™cøĪü‡Ô0|øaÃđđ ÃÁ?2 ˙É04˙ãcæ, ė üJ˙c@` Hžų?ŲÍ`ŒĐ2d.Č|= û@öūcū?2šŠ§DIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮü‡áÔ0|øaÃđā ÃC >øŒ˙ą04C1ķ?ėø?&nüĪĮ0ŗū“aø4ûC… É ­€öŽ2(ümīûIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøßū‡áㆠ5 *lüa†ƒ˙xˆ›˙ą00ƒđfĀ˙1€Õ7Cq#Ô,~4dĮ‡6`;˙íūøŖX3ū9˙æŋIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøß˙‡áķ† >0Ô0<øaÃđā ÃA nūĮĮĖ˙XP0û? gAS‹0ã Í}Ä {>ԀíũĮüŽā2aN >IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR !*ūœ pHYsb&2 tEXtComment1Øô<$IDAT™cxPÁĐ`ÁĀ`"X0| šs€ƒĄ„pÅŨ"YƒX8ūIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR !ÅEđ=>¸âxôÉyj–9ûB•y@ú˟IŽšX‡ĐßË3a…hN\R%9c•ÍéĄu1iŅž;bšæ…7Đô9ĄIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment2Aũ܆bIDAT™EĖģ €@„á ŊlÁlÉSK:ąí`à äÖņ˛|ėÐ ãž#vlÖ0§@yōË/”éa”˜ĀÕsõ{'†¯2IeäÚ8[# Zwí"QS7žīž\üS9 ģ/ 9IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aũ܆eIDAT™MĖĄƒ@Dá—Ap.ö’p´…ČLČDĐÖŅɕ€\qß ņšŨGŒBq°°_eļ–é[ĸ?˙¸t†­¯DąĒDxū\ęBÛÄųmp{vûm!Ē&ËŦ¤›ü17ĨuĮŌIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aũ܆dIDAT™MÍ!€0Dҟ ¨Ãâ¸F×Ē ‚āZp“rƒĘ¤Ë`⩙ŨĄvFÁČ$ÎŲŦgŋíĢōid•e‚c 厎[Äuį9á§áĢ´Æû÷d4lֆkCz ,?W ú8œŠ#ÁoIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆iIDAT™=Í!€0DŅ!ę°u\ŖŽkU HH,Įi͋ Š[Ņt™†ņĖdķĒ‚Ō 2<â尉Å^,Žb0ŌP?=­Íb¸gŪ¨4š= 4Rĸ&AŲ&Ꮗn pÄÎĪ"vô|rĖ?¸˜÷IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aũ܆eIDAT™MÍ!ƒ@DáGŦĢ]GčŅHK‚āZ^d@ŨˆÍūĒ*>÷2Cëʼn(÷‰C™ˇm51´ ?ŊuļđTæĨDüņÕųfJĖ÷D-‰ÍŊ8ų'ÖBTo[DģÚMh´‡÷ClVg˛yëįĖŅ,ō_ų8|GMĖIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆lIDAT™-Í1‚@„áßjˇŖĨķv\‹‚DŒ…W˛$ņ"pƒĩ1Slö9Š/Ķŧ™GëDA,Œ|ʍ—zRÍt§tēT`‚yĘ,öõ]ė܉2̈‡=-‰vuē{?Äfëo˙Ķ3“éfņūƒž:ŦHoũ?IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aũ܆eIDAT™-Í1 €0 Đŋĩ›kâ x¯ĶA´ĐÁkUŧHĐ1Ciü­!ü@7A¯ ”qˆÕâę`(ūÂA‹Eĸ˛[(w‡2Cŗ'ŪÉÚ$¨+ĶģSP´˙áũĀ,öđÍ/ƒí8šy<͝IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆eIDAT™=Í-ƒ@„á7Š`]-Ž×Āq­D¯TšÜdî›$­xÜü !8*™ũ˜ØbäŨÃĨ˙ĀÃÖ%ŨŠ‘ŗrGõ’Q ´™7û3h¯ f“?ŦZadŊĨ?uīčķÂJ;HlaS5IENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆eIDAT™]Í! €@„á nŗÚŧ†Ík ^KoaÜ#,X^ŸŖÁ Ã׆ŧ0ž$Zļ\3[ÍrʋO!Č4H„5˛:Žî+ˇxęņÍđYJãnjŗŅr'Ŗ‘]˛˜~ŽgË÷kĀ:ŒW¸CIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment2Aũ܆YIDAT™EĖĄ €0ŅC!Û XĄŖ!q XĢŨ¤lđeĄ| ˆį.GDE”š8”[$\/>Ŗ ÆŲĒ›ŽWĸ×ŲD/ļ[÷$.kĢP§Ë$6ĸGŋ-Į°4O ØÍIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment36úė_IDAT™uĖĄ €0EŅK؎ōGb„ŽA Y Â"áÉ6i(ŋ‰8îžGÛE„ˆ$w%ãV`ûdc‰]äœ#Jĸ]Î7÷#[@9P2´úīp“wŨ(c]üĶŌ$JĶ ¸ļ=‰¤ōIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úėaIDAT™]Íą €0 Ā(R’ X!Ŗe„HŦÄ"áé,>ĐQœ,Ŋõ6ÚDĐÄQļšā9ÄwbP–e/D_E[ I­ˆĘ€Ķ.zû™v‹ĖĻ›öŨu™Čã¯įÔą8QãØIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úė[IDAT™uĖą €0 DŅ‹(\⁑Á#„Šĩ,ąHFp¤ˆpY¯˛îŖĨĀ8wÃYVņš(›Á‹Ą{ īÄÍM†XQõ†Š™yŽ!ą•Ų(č9F_ &\IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėhIDAT™MÍą Â@ƒá?J“ŽöFšq!å•H”ŦtQy#¤´Ä‰‡ Å×X˛M>ŘÄA#ze?N…]§ĘŨzŗĩkã"7s'ŨTt-H  ųųū÷Ë6ÂėíÉ?ˇhtīÄEā=pj@ƒIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úė[IDAT™eÍą €0CQŖ”ŦŅnFˆDAÉŦĘ"áčR ‚# B§WŪ7ŧ#ÚåÍ0ͰxD˙šÜø ‰ēK .)úq|Œ8 P?įß*CQŗQ3¨íĻĀ5ã6„įČLŋIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėcIDAT™]Íą €0…á_Rč%+ĨL,\+āŽ7HyE0ŪĄ•ŪŨ 6ÄÕ‡6ĩ;Ģ5&ZFQYi§kGHōH_ˇáįÍO5w3vˇ%Ę$TûŋĘŲ‘>IõÄIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úėZIDAT™uÍą Ā …á_,,ãÁ‘2 d1!‹8ÂĨģ€`Î2Ex|åãgDe­7áę…Sŋę"…vwWfsÕųg ؞1Í<–™ƒ_ÛČ$[ Q…āŊŧ›ôë9ü€eÛpIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėaIDAT™]Í1@@„á_ļĶ:ĘKųJâbÄAŦlų ŦĄ‘ČËWMferžË{ŠŦ92ųg”Á"so¤l”ä”EÔģÔq"n~N)׃ŸĀĻŦyuÔÚŦĩ5¨=WúŨú ˙@=ĸ¤„æIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úė]IDAT™mĖš €0ŅąœŌ[pI”ā ĸ-K4â–l„ųČ^˛ĮāƒŅ‚`l­°Ú-_AĐlžtSžģKžĶQ,+vēUi(•H‰ROëÚŋÍoēŅ{Ģ ‹ˇ’˙ΓwL_UÖA~×XŒËIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úė]IDAT™uÍÁ € @ŅO8peW`´Ž qW‘¸HGč"–“'Ķŧ[ÛOÆE¨*\ZØíŗN2 ĒÆ¨n3ž`tŋiL2Ö2w‡ņãpŠg’īE˙ŧ…wĪŲ_ėc:rú™ÍIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úė]IDAT™mÍ!€0DŅOT"{” Y‹âZ%\¤G7bÃ˛Hē߄ BT:…ũ,ĘíĩúRšzśđUÜŅX4š3Ē Y üū“Øė•Ã?klĩøî“{5<¯šĮķŊIENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úėcIDAT™uĖą ƒ@DŅ.ô•˛¸—°%€h D#[Â8ģādŧW=M4CŸÅHāœa\i—QTŲ˛—ÁããDˆûLĢøåĻįFōʡÁŨŸŊzĨ´Á˜ķs g™ÄQD{ëŊ9:š>¸øIENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėdIDAT™]Ėą €0„á_,´ŗÍ(ĮRĻTĀ•".’R(ƗÆB_q÷xzŅŽ9˛į,ž­¸Īb9…&’įHMĸŽĻˇm„CÁÜ#—ŠOÃĪČnŨĐČŅËĶåČbëd4éû :ŧ$ŗ—5IENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úė_IDAT™]ÍÁ €0DŅ/<šlaK˛„”ąąˆ…˜Üc„`ܜ2ŧĶ0 õVĘ ´¤č9UØ‚‰^Ḩ&ĨfS^Û„,&;žâ¨…îí.ëf3åFÕ3D%´īE?@o=ņč;ƒIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment4¨žyŗTIDAT™cø˙Ŗ†á˙ Ō€øŨÄ 6 ˙@XÁ†áO‚ τ†@5ø!âf î`ÃĀÄČā˙ Y6PsĄøƒäX@Ŗō5Ū0ō€IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗQIDAT™cø˙§†á˙ūÄ€ø7@1ƒ Ã? ūÄ? jĀøÃ‡†‡@|ˆ›¸ˆųúX`ā˙ y5X0Č| Ų@ųŖ8ņâRŽIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗYIDAT™5Ėą € Fá?ÖNĀ NĀ\V†ÎĩL,\7¸’‚pž(’|—ģ'÷MŪ“ŧĄÂP†Jęķ§-Iuģ†'7v‹ú_†ķ{6Ú5ŽĘD?ĐÅ­:Œâ&IENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žyŗGIDAT™cø˙ãÃ˙@üˆq3`øÅ0üĘâ‡@üˆq?ķƒą2øĀbŪL|(ĪÆēų:õaVÖIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙ĪŽá˙$üˆ@q3Ø1ü°cø#Äv ?€øPŨC ~üÁŽá0ˇƒđ>h``bøÎå€fŗÍfaw’7ˇŪõÛIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗWIDAT™MĖ!€0DŅ ‰FqTĪ…l‚āZM¸„ €Ģhvų … ž›ųr7šyAÆYmHˆPõƒĘ”qąŨq`ÅÂgŪIbõĩ^˙~ęhˇˇ3ž>ŪZ˙~~IENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗSIDAT™cø˙Άá˙ ūÄ€øâ f€ā6 €øG àē@üˆq;7?ah``€ã˙d æũ@à ņ<@ķY€˜“‹9ĩ¯œIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗQIDAT™cø˙¯†á˙†˙?€ø?€â@ÜÄ 6 ˙@ØĀ†á˙(°aøT÷ˆņa nbv f``a€Ÿ <ķ°aų ,0 š7ĸ×ņ$IENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙ŋ†á˙ūÄ€øâ f°aøÄ l~1PÍG ~楸ˆ™d` ˆÁf|†e€æō1 ~‹8ŧįFKžIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗVIDAT™cø˙ŋ†á˙ūÄ€øâ fb †6 *l~ü€ā@üˆŸņq žæ†0>  1ū”{Ā4ˆÔEČ=Æ*”s:IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙ãÃ˙üˆ@q3@đ?… †? ?€ōø!?âÃ@ÜÄü@ĖŪ`Á€ ū°€˜‡â @s9@4—M9åĪ/Y+IENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗOIDAT™cø˙ĮŽá˙ ūÅ€ø71˙â? v ? €¨æ?âÃPÜūAށ•˜Ų˙bp3áX‚åĀæË5’Ķ;œIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙¯†á˙†˙?€ø?€â@ÜÅ6 ˙,lūØ0üĒųāø1âv(F˙Č@ĖÆÁæķÍfaø˙˙Đą<8#ČfIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙īÃ˙?6 ˙ņ ~Ä ¸ˆ ø˙1°aøQÄ@uø!âvęcęA`ŗ>`Á ņTņ8?BūƒKIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗOIDAT™cø˙ŋŽá˙?;†˙? ø?â@ÜÄ v ˙ øØ1üâ@ĩjņq nâF68ĀĀ1 ~ 4› †358<ŖkĪvIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%ZIDAT™]ÍĄ Ā EŅKtƨd´J6čJŒBƒĀR÷Eũ4UˆŖîKwä]qü„l”Ž!ÔÅ×Ņ}ô$ņŲ(ĪĩÃXi›NåtīšĮļ€IQ’ž!/ĄF@˛-­‰IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment5ߙI%YIDAT™]Í!€0ĀÄæ°{ O›Äņ­ßX21K‚ŠX6:$ˆSmZ\Õ#Rđ ⠆HČ?=ę8l”bąË!šíe?ĘÖâ`:ÎO%h§˙Lŧ'š?}`ÅAŠIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%^IDAT™mÍą € Đ#8Ŗ0…‰nāJPؒØü‚€‡ĨąxÕ]îpē:$LžI‘ä!(yæėöcĩˆmÁų.ũķƒLŗ0bĄĢƒJ;ˇú&Ÿ?P`d÷QIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%YIDAT™uĖ1 €0DŅ/6élSzŒ-Ĩ`áĩAÁÅáBá¨#yČŧ<#r+ŦąŠôŊ3ßSG,î„ô¨?6ßŨZVˇØĀî_ֈ2ë(Ž?åx/IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment5ߙI%XIDAT™]Í!€0DŅ!āj9J†„›q”%ĩM0#HË,ŠB<ą›Ÿ îļÁĒĀ6IHäN”Ÿ¯ņÖ.ŽČ[P¤7‡aÜūWeĻKÚ;vâÔV|ŪAUßyģIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ߙI%YIDAT™]Ėą € EŅK,h…‰ÜĀ•H,\ƒ„‚ö—?â'4ÆâTīæQ4R˜’Š3^¨Ch_MÖ>ģŨz Ô—ÂmÚãO—SžO‘M".'ûĘ^^Ŗ:ĮūūIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ߙI%TIDAT™}ÍĄ Ā á#H…Ņ:Ŗ‘ Xã%ĩŋŦ Ą[QņšK+'Æ&Zp‡°$Ž%ÆGۍˇÍ ]™ūdƄۭif’ˇņ): UTYÔ |:Ėõ`”7IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment5ߙI%ZIDAT™cøđ§€á `xĀÄĖ@l˙áņ˙ Ī‘qķˆ†ū``xüŠ˙10|â˙Xđ} <˙ö lĀĀüĄ€ĄhΠ=ä?Ū>=õĢĐšIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment5ߙI%]IDAT™MÍ!€0 …áG&†›ã=Ú$GApdÅÂxK ™øLû§Å^Š&‘Ar G5œŊļc“ŲfX,b-#ļĪõĩĮŲ/°õ&đˇĀiÂÜîđMö|i=RF2čŽIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸXIDAT™mÍĄ€0DŅĪ™RJe!"Ō&„Ą$âæÂ ņܟ]ڒP"Bāœxv ”ļ!ÂJk™›*`/Ŗ4—S×rüIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ_IDAT™MÍą €0 Ņ H)3Ŗ0Y؃YˆX6HIlL Dņ*[˙ĐMPF„+ę8ÄčĘŠBųY^9‘í$âqÚŅhœ™tūģõļéÛ~Ök]ëīōĒB93rŅŊžIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸZIDAT™uÍą €0 DŅ‘2#dŖpA”Å@,¤¤°b ‚’âu_wØĸ#Jæœ2M{w–YMÅÕĪ,ā=$ĐDč‘`0ü¨¯âV‹ŪßûMüĪw:‚mzĄ"4ĪÖ †ÚIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸ]IDAT™UÍą € „á3Ø8 8ĀĖ‚Æ8™a؀Ōâ…į6_÷_†ˆÁŊT (]$Ķáü¸îP€íĻŖŲūœ<ˇ¯Äæb_(ķŖn厭úyƒ2v{ŠŽIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸWIDAT™uĖą€ DŅĪ@H –Ba2´a3tb^7āŧėī˛gRp6ŦfĖ3×ˌuŠĶ¤n'˛ƒzČ 6ĖDX‰¸øÕĨŠķĨíŦL_Ž?ˆ:1Š [šIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment71—( QIDAT™]ČĄ €@ П Ā­ë7’„˜‰ ˜ã6@V\ú)Ą‚ žy8iX iz‰`Ŗ °BŊ‚>ƒ=ŲÃĀ+ĩ´‡#­aŖÁzųĐ8ĩ…CR¤ė¨ŨIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment71—( MIDAT™c8˙˙Cķû p  Ė˙øXūƒũŸ†˙ üŠ?|€ā‡P|Š›Ą˜‚˙Á0˙†?Hø‡<ļĘ׈uC!ãԒ¯IENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment71—( IIDAT™ch˙˙ĄAˆĀä˙0ØÃđŸ†˙? øÃ~Łø07C13ŗ`øÅøøË#a{ Ž˙kĶ>¸fĘTIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( ZIDAT™UÉĄ €0П í] ē@‚`.‚@2ŽâŌãJ⩇ŨÍ4?€‡Ë!wˇ¨L{X*&tŌQ-´ŌT5Ô ōË ô#ᡑ?ČyŒFØņH[#IENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( SIDAT™]Ãą €0Đ)“ ˛‚¸R6Pp1ÅÂ9ÜāėR„;ŋä°đÁƒ™āôđ]|°„¨ YGLlZ`+Ë[`7_~įƒW?pčÕˇø›{åkH.ãôIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment71—( ?IDAT™cč˙˙€ĄŽa€ųƒ<Û˙IãúūÃđG(~ć‘p;ŗ?`øĮÁđy,ØūJ9>ž#fĨIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( UIDAT™cø˙˙Ãq >ď ˇ˙c`č˙/Ā ˙O€aū?†˙ øGøÁ€ø!„âÃ@Ü ÅĖ@Ėūá˙a~(–‡āõcÕI Á IENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment71—( PIDAT™c8˙˙C3700€12ā˙ĮĀ ˙OÁ„˙$0üá@ü„0ü˙ÄĄø07Cq;ŗCđ?æĀđ ˙Gā?ö@uõŊAžW"ā IENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment71—( PIDAT™c8ū˙CƒCfū ĀĀ˙O€AūŸƒũ†˙ ū˙€á ˙?ņ ~Ä‘p#71ķ† ĖŽĀøŅ°<˙Æ?õ>3”PIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment71—( UIDAT™c8˙˙Ãq >Ā Ä P  ü˙ä˙@đ†˙ øĮ†˙€ø#?„âƒPÜ ÅĖ@Ėūá ķ`øƒ„€°< ÂöiBkÁ`8/IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment71—( QIDAT™c8˙˙Ãq >ĀĀĀЀ†ø˙ 0Č˙3cû? ˙˙@đ ūđ‚ņC >恸Š™!ø;˙a~$,Á˙ė?[ÃB/<Ŗ¤ōIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( NIDAT™cø˙˙Ã{ > Äā¸ŠÛ˙ 0ôCņü ˙AøO˙á ˙?@ņC(>ÅÍH˜ˆŲ?0üƒaū ąĀĀĀЀ†Û 0đ˙`bû ˙˙@đūĀđ˙?„âÃ@܌„Ų!øķCđ(ūÂōüĮūcŊDĶáîrIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment71—( SIDAT™MÃĄ €0П ¨Ģ­ë8ÖB’t1‚5`ä‰Ë•_Ú/yØŗ \ā0ėŪIŧDžYYĻV/>øäĩŨ8qĮ}mŋęk)ãWGšũEORd¨IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜YIDAT™mÍą € „áßJF`”W8ĨÄÂĩ0.”=4v_ņ’ww´ŠR¨äbœUšg;ņDY‡ÅH™ Ėgܞ#éˇHƒšËõĮ=Q)ؓ×ū ö‰/ ßδIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜_IDAT™UÍ!€0DŅjļGéŅ*!ŽApö•+eŠ AŧŦØŲYš3l0JM9¯Čz‡ŸEf™´ÛĸČõ•$RĻĀ‘•7ģä×`l}úĪ*ŊoWWÖ­~?ô02Ĩ4Z‹ˆIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜bIDAT™-Í1€ …áß8ĀæĘQ8ƒƒÆkaŧG`ė@Ôž¤i^_éŗĐjK\É=ī€ûŲ|¨]÷Û)!Q,ŨĨĄ9‹æĒ'‹ĮuuĢå?|]ÚŖŋŦC&y0˙14ũÜāIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8Ą(5˜bIDAT™EĖą €0Fá 6Al\ĀM‚3¸HÜ eАķ ‹Žƒ˙!]&ŗ—•Fžb¸+ųyuUVM#•¨›ÔÔÛčO…Ÿz\'04{Ķ)''‡j=ûujCæüMÔ4ŌÂSŌIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜fIDAT™EĖ1€ Đo`cå( Æc8j¸†Ákā ;đŖ‰ĻyiÚôÍd Ö%ąXœäëo§VîÃä° Qf&?Ũqļ8oŗ†/Ēj˜ ˜Öéĸū/fæ÷Gåy&3ÛxęUIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜^IDAT™-Íą €0 DŅŖ"#xWĖE”"k„°AĘQĖaĨxõu†= ci¨ØQšâí‚{—§DÅ!87‚ĸ°¯NI\‰WR§Ad‹X§äū;;c/ęü˙Į_5ĩÁr”õIENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment8Ą(5˜^IDAT™cøÃø~(`8üÀĄũ÷Cinâ†? 6  €øÃ°Ž 6˛`hūRĪĀĀÂ˙€ø?*f˙”˙2¨ĮĄlÂæ:0Ån•2ÚIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment8Ą(5˜[IDAT™EĖą € Fá—PPĘ(7#`(XKã"¸%Aī4Æ\ž\õ?†k؝-rt!Ģ2ÂÃĪ—Së’ ÂF¤ęĻ>KŅ/ė)+”~¨ ËõķmeëuÛE+ܤ~.-ãIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜ZIDAT™cøÃđƒáCà †‡$˙ƒāæ˙pÜÄę$ØI0<ą`xT˙ŽA| ø†ƒ€ę˙004˙c``˙‰›Á¨h΃s€ö×x0~ŸčŽIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜\IDAT™MÍą Ā ĀOĀ(.2%EÖeŗe y¨(N/Y~=ÚņĄ‚ŧĸ4‡ˇO‚¸š)đž.…Áŗ3)›Ęt°$ȕ˙ x:pŽ]X‡,™;æŨęs˙#0z÷RIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜[IDAT™UĖą € EŅ›PČŒBå\–ðn@ų ū¯•ÅI^ķ.à ÂAo‘{Ē™žlÖįTiĘŽˆ4Õõ#/ہV<ĩC5a[&ũ8eŊK[M‚ū"y7ų2Zŗ[-øIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜]IDAT™eĖą €0 ĀG)`„Œ’‚Á(‰(˛–Qa„”.ĸ˜w Š+Ūz?Ŧ(úĸh8đ´„ĒÔ#ĘpÛtQf>y—=AŧK퓘#naWŠë û æ{Ųˇæ¯b}&ė1ĖOO}IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜\IDAT™5Íģ €0 Г(ČƒŌŖQPQ°‹˜ (] „K˛^a?(ƒŖ–™ârEzgØģÖ..‚C†šš%aŒķ0f|Ę/vĖŠŪOΝIëī:0Oô–i7IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8Ą(5˜aIDAT™-Ėą € …á?‘’,H\Ä҈1ŅÁ$.PZ\<9¤øōŽxīĐI"*ōúƑÔqëŸæ2›'û@ļ.kgģßnGŠ­+^8ÔėLÃ1$=ûŋ,m3Û>ĸ‹|QC6‡–MyIENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜[IDAT™=Ėą € DŅo%#8 cYRX`,t, ‹0%Q ¯šäu(d )[BĩÄkbŋĖo“Uŧös, §ÆŠjŦL„ĶŗšŠ:īŌ˙BûšûOĄ<`ü1Í­ŽdIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/YIDAT™]Íą € @ŅO $q×°`(K âbē n@Iq9„N-^ũP+T„˛ėäš$Ôstļš>ŽA! œ+d ĐÉŅڛ§iāî˛ ‘ŧõoŧFYf—55ˇžG´IENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/[IDAT™uÍą € EŅ‹šØ0€Ŗ0Œ#8‰˛n‚XR_ ;‹ĶŊ—‹˜J!p/ž\§Ø.ļ‰ąã—ˆę¨6Č@@vhúmō˛ŸKIŠxŌt¯íš>%1ŗÍNŋØIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/]IDAT™MÍą €0ĐĪ –Á9ŦœËBÄD°u%ŗIFؤ÷=A$ÅĢØ)+Ę8!/’:Džxŗ34ļŸ˙D .¤*ČÃ3€|õ ‡Û$ĩŖšŲ>›‹ũ¤>ßĨ@đ$ÍbŽIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/WIDAT™eÍą € EŅk,`GaĮ %îe .Âŋüŋ$ÆÂâT7yAŠ1RZ ĩŖ{ÖÎäÆßÛĻI!īP1ã4ũá?ļ{™ĸ,‘\ísQÄé &0ƒŅüĶåIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/VIDAT™mÍĄ €0á#­$…ÁēŖ”°˛âĪ+¯5Ägī° â™WōžmätŠÆ.tüJÁ!8 dđX€Z›øņæí.ųCūÚ\ûB“^Q[4īÂôIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/dIDAT™UÍģ €PDŅĢ‚f¯ë0˛.?`]ÚÉ+A3Ųuü$˛œh†|2î;ĒšØ–D ,<L>“ųø“x¯ėĩ:,& DR6ą"ÅÕ{åŸĀŽßŅ´qJŖ=:ļÄ8 Sn>:lXIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/]IDAT™=Íą €0…áß)ãÎaå\"ˆ‹é&7BĀÆ"Üy(Iņu÷cRPō4#ëˆhâ˛Än‘ãčšŊR8 ČxØāŦŠ?˙Ŋ¨7Ў–Í÷Ęã}ôŌī6ŽųŖm­IENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/TIDAT™mÍą € …á?BÉŽÂh4ÄÅp܀ŌÄ˝§‘Îâëūŧ‡ œdFYéšhnˇDĩČfŧ:)4 ' ˜Mņ“¸|÷ĐįÕė}ņŪ߃ÜĘÁ3¯Đ´9ãIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/UIDAT™eÍą €0EŅĢl!Ŗ8”؈‹ÅM.2ÅįĮ§UĀâtwąÁ(ėäm%YäōČé‹ĻÖãĪá0А€,u 4ī-Ÿûũ–TÕ)‚i¯öl Å1ŧ\EŅęIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/YIDAT™eÍą €0@Ņ° âŽâPF\,â"!eŠãbÔÂâĩ˙cĸ”<’NėÍjž­sHuô•ąĪĒ3$ wPGĩ‡w&–f Äë+zHt1Īe ›ƒIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment9Ö/VIDAT™}Í!€0ƒáŸ ˜ÃrŽ…œ„pąq“—pÉŠe㍋øT› "1­\eáŦ]`ė˙*vAĖå šg­~Âëö힟ü'mŅûÂü[ŗâ20ũTƒˇIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment9Ö/VIDAT™]Í!€0ŅI*Z…Æq ކ„p1Áa+WlZ~Ķ`ĪÎ`7 ‡Íœ>˛{"”.ˆõ§tĄqØd58€,>@-ŸÔŠûČåz˜^YÚ7ę>Ų Ģ•1…Pļ ĪIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment9Ö/XIDAT™uÍ+Ā „áŋÁpŽŌc!Q$ Ŗ7ÁÕ"Wl Û—ŦøÔLfĐEč$Z\ŠØÕS†Į ķĮ›…M Ít3ŗĪ´ÍãŪTąŸ˜Ŧ/´ëÛÉ ›0-“^IENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment9Ö/]IDAT™UÍą € „á_M(9Ŧ˜ËÂĨ°u%Ų„(M$<_ˆ_ŽšÜ!2ŽKZGĸBåŲļĒû˛ W†8Cĸ׏œJšC‹îK\Ôä´¯ßCyfh<¸HķūIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/\IDAT™mÍŊ € †á7ÁĆHXÄĄ,)hˆ‹á&¸%Ååđ(´˛xēīuB's§&S†ƒ˙@˜Ą„˙31#3Ã1Œ™P0XԌƒ`Ė6dĮ‡ ; u`ģ˙3ūķĐ0âÄlÄIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒSIDAT™cøĪø‡XØ0|¨‘axđG†áĀ?†ƒ`ĖÂĐÂ˙YÁ˜ˆq`fĖÂĐü‚ÂÍã›˙āĐŽ †@{˙í˙ßū Ą2â0‰gĒIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøĪū‡áㆠ5 *lü°a8øG†áā?†F ncfdüŸ0†ĒmcˆY 3ÍŲ˛ d'Đv†˙ĖM1ūĘáĻIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøĪø0Ø1ü°‘cøP#ĮđāüĮÆpđ?314"aÆ˙ x0ĒZˆ~6°Y0s?ü‘cøQaĮđ‡Ąl÷˙æĖ[5[~ņRIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮøáCà ;†äüããƒ`ĖÆpđ?Cã&8fDÁ h|F¨gc ķū“ÛņĄFŽáGĐŪ @û92‡ũIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøĮø‡áC Æ2 ūđ0øĮÃpđ 7‚đF˜—Ü?ˆ^(>4ķĐėd€öíŲ ´h?ķt.ĢU=âŌIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĮđáƒÇ 9†5| ūAđl ˙ŗ14ūgBÁŒ˙đbtõ 3@øƒĖũP#Įđ„vūÚũŸņ1,‚wLIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøßüáCÛ1|¨â?r ūņ1Á˙l ¸ņ? füĪ€ŖĒ‡˜ 3Af¨‘cøQcļķĐî˙˙ūō4˜V)ĶIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøüū`¨cøQaĮđĄFŽáÁ?9†‡˙øūgãÆ˙L˜ŒĐ0DU-ܐ™€øCÏ;†? v`ģ˙3ūƒî5WyšˇIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøßü‡áㆠ>TÔ0<øcÃpđ ÃÁ<`Ü Â˙Y˜ŽˆĀ,p}Í˙y æÉ€ÍŲņáG ĐΠ­ūˇ˙$˛5NÅm7IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ķŊĒSIDAT™cøĮü‡áC Æ2 ūČ0øÃÃpđCã?8füĪĀŒ˙ÃÄÍ@}ÍPũ ķÍ™˙ā‡ Ã ÚüņÃ˙ū?Ų1ŸîšˇĢIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cøüÆ ?8ė>ÔČ1<á?| ū0Cãf‚cF fc"ĪĶ2ˆ€1ÃÚņĄÂŽáCØî˙Œ˙29ĀÚ ×IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøĪøáCÃ;†5r ūņ1<â˙Øū‡a&†Æ˙M`Ėøŋ/n„cz&¸@jö =?,ėū0Ø1ügø›Ŗ8]Áķ×IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĪüáÃ?† u *ėüácxđ‚ūcãÆ˙L`ĖÆ D`&¸†™sjî‡9†v`;˙áÆ—2›"wGIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøßø˙0Ø1ü°cøPÃĮđāŗ1á˙l ˙™ᘁ‘܈ĸjÖ?¨Ųø>TČ1üÚų‡ĄŽá?ã?Žã2–ˇāķIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR !ÅÃ+¯Ũ™Eˇˆkãe‘„_†īĸĪ{2ÚlØĻ)ŪD2~˛2÷øōŒ5ä1&øŦIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆dIDAT™=Ėą „@DágäfĻ›]‚m(ؘv˛%l8ø;{ā_2 uĸ˛PŲkĻW“蝆ŋÎøÂ6%Ž%Qü ˙ŖŽDiDœļÛ î¸fĄÕũÅN;Čl$Į^ųˇEäcS5ƒē[‹„IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aũ܆iIDAT™5Ė1 Ã0DŅo\H]Ú=Š‹@ŽĨ"$_LžÉAå›I Å+†Ī\ƒAÃŲ8‡q„QĸRæ?Ģ,Âö;ôVq}RßéŌyyH Ž[0AŧÕĪ kī˜TÅū Š“ödÚ4¤(ŨIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úė\IDAT™uÍą €0ÁE„PŠKĸ—`Ëm™N\‘=Â< Á„{‡ ĸ!ö)-˛)|ŠË.)R›8]ß]ˇ7FDk@ļpôëĪÂė&{FßKUÔŅŋ'qu=Ÿ?Õ„@IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úėYIDAT™uÍ1€ ƒáŸ‰•Ŗp´7:BŧƋp„ŽšņáîđĨS[FÂčdeN%öåJTĪb™ö1ԍŲÄŦâņÎđŽRBhĀíæ¸øæü'4Ŗøsz—5Ÿ‚CؐIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėcIDAT™uÍą „0DŅœ¸g´@č˛]@[ q n°’ ¸ā…3ŸXŖ1¨ÜVyŦđûxᐞWŽMö†ÆÎė‚ÚøV°–ąČĖāĖ)) IŸ‹:]_—Ú#9žú x:tN ŽIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úėaIDAT™uÍą „0DŅ" ģË"”MPMôbôėüĻ‘<#–\]x*ôöīl ŗwB&˙ĩŨąŋÚ ˙ß;îqĶIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment36úė`IDAT™}Íą ƒ@DŅBnáJģ@hk%7Œŗ N,c‰˜ā…†ÜD„¨QųĒđąíļÚbĄJė• ‘Ģš9Ũt ­Ė¨Á¯C>˜úĖĢũFī ģˆŅßooĨ.´?ÕBö ¤IENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment36úėaIDAT™MÍą €@DŅ/Ļ–˛%XŠ%\h¨ؖ‡…¸%lxxŽ` ˃If–‹Đ%܍ÆQz֟y2ödø˜¨Ô,KpĢU0é‰ Ęõīū(Ÿ˛IûŌfĢ?퐨›Āģxų8T¨ĖIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úėcIDAT™mĖą Ã0CҏPĸ ŧJFĐ Rd-y“@Ęĩ‹× ›DŖđŽĖG™¯%ی’ŠËĢMĖĶbxĶŊ™ĐNô_‡9n8ēO—õ[ ŠęŸ–„ũ°î7ÉķDÚIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment36úėmIDAT™MÍą Ã0 DŅo¤°Fā(*3ŠGpŠŌA ¯E#xĀ’…`å*ÅđpGNI\4ލ|äÆ.¯0ļÕđĩâK%ŧ1<ĘßĘwĒ.#[!zaü˙NŲõ›ģņPī¤íŲpm_s~yÎ6ūžáĶ1IENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėbIDAT™MÍą € FáG(¤ŗe:Wĸ¤ÄĘĩ°r F ŧD"ž11_ō7÷ŽË Ą’Økāhí'ĮW‰‰ZŖcUFčŊTŅĶÄqvĮøđێYMâUĀj×h+kŖ<˙šéŖ:ƒDuDIENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėfIDAT™uÍą „0DŅo‘8#u)[%\č€DcFp-ø:ØpOB6‹DŠF/œZ0î(™Ÿ ģ&KlÕ•,ԏ SĻWŖį†p’0‰Øų7č/ž-˛šáLÍߨ÷˙h ;ō2x.VIENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úėgIDAT™-Í+€0„០Āa+9r…Ŧ$A šR“ Ž7¨Ü„†˛<2ųĘĘĻ×īí-ĢYL“ĩ •mMŊjûîô ›=Ėâá3áIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úė^IDAT™mÍą€ Ņe  Ę0¤4BÛÂąJ ŧ€?Æ/Ü;†Ũ ‘Š$Ž–¸?‡ŲMY§D]3­fFc5Ũi9 czūÎX&ÛtöŗY_Ŧn^/iŽ8ŲĮņYIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žyŗ[IDAT™cø˙ŋ†á˙ ūaÁ€ø€â f°aøÂ6  j~|¨aøÄjņq nbv >`ęၘT‹‚Abd€fƒ0PŨƒ?đÂ>DS¨IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗVIDAT™]ĖÁ €0DŅS€X„lQ–°`c‚ÄrĖ!$ūEŊ¸đ.ËĖhtĶh¨(ȝ™z˜Mm5ÕÍTŲ 'vLt¤¤ī#/Īæ_ü=ąMÆu•c5ZËHļIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗSIDAT™cø˙ĪŽá˙ ūÄ€øâ fb;†v ,ė~TØ1|â@ĩ¸†z˜ € hÄĀļ8RšĐ\rIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗTIDAT™cø˙ĪŽá˙ ūÄ øâ(f°cø'`ĮđĮŽáG…ÃĒ{恸„Č10001€@?``C˜‡ŽđÍe‚ā r-?8‰g|ŒIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙Άá˙(ūÄ ø71ƒ Ã?†?@\aÃđˆ?Õ~âĮ@ĩ‡¸„Č0Ā@ Â, ,4›h6 ›V9ō-˛LIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙Į†á˙(ūÄ€ø7@1ƒ Ã? ū#Ä6 ?€j>|¨axāėÃ@ÜÄė@}Č⃠ÄÅ @ĖÁ˙€øA Ï ūPÃđˆņa nbvęA˙€ĖĢAÃ6ņ2@sY@ë::Ą˛ØIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗRIDAT™mĖą €0CQKd`”Š(Ōą‹„ ’.E”ã+@‡Ĩ×Ų–÷MŪL^‘‘^âŖ ŗŠ­ĻŠL¯ā‰)čKÄøû“~ƒ\à *‘6—CzûIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žyŗ\IDAT™MÍ1 €0 …á'.n]Ũr ˇ^ËąâÅ ^¤ā□4>J‡oKū÷o¯d¤CĄLiXmÔM`ģ@yûĐMü94 aę2õŽ}¸Ŗņ×ėÎÜ ÷)•<œ¨´TIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗUIDAT™eĖą €0 DŅ%b‚Ė‘ĘsQZb1‹d„”."ĖÜaé5–îÃ]āw˛ÔŌAJøŒ•jUAßÍ']]°nâ4Ŋ ū˙ĸŋ°=ąK:?§A8ččCøŦIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙OŽá˙(ūÄ€ø7@1ƒÃ? ū# ĮđÈ+ä>Õ>„âÃ@=í@ĖĀĀÄ @6Ø,\øĐl&.ú4ãöiūKIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙Άá˙ ūÅ€øâ f€ā6 €øGÕ}Ē{へ8ˇ12xāĀ1 ~ 4›h.?ā698[á–zIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙Į†Œņ ~Å€¸ˆlūAņ†6 €ęBņa nbv dĐÄpŗ0° Đl Ų@5 ,¯:5™ø`=ŽIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment5ߙI%ZIDAT™MÍĄ €0@ŅOí…Ņ*IX€‘J]Ŗ­…„xÖIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%WIDAT™]Íą € Ņ#ŌŅ2 ŖQ:JÁ&.@ų "ōcĸÅë.9Î+q¤ %dķđBBũŲĩ™m&˛ĩ@Gé ę4>ÜË÷Ā"*b[ÂdaՏúÍ?ēÂŦy”IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment5ߙI%RIDAT™cøøĪ‚áÁ fá ūÁđ€ˆŲ0<ū‰Áō`ĩ H0<ūÃÁ˙žņl(ßÄė$˜X00°`h\đƒáÄÚ˛>œ…Û2IENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment5ߙI%TIDAT™uÍą € Ņ3–2 ŖąŒ†aŒøí(ˆøŅB‹—\w§'WGĻĶFȃ2Âڄí#íB¤ķĘŞHõÕ~Lj,öfÄAđžO›åSx=}elēIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ߙI%cIDAT™UÍ!ƒ@á!ˆ]‡å(¸^k%Žcp”B*¸Æ6ĩ+ņÂc7i›T|9¸'ž–Č|‰ÜUAŧîâí˙ŽEl4{y¨˛ČҜ7đÖŗÖâĪj#C4JĸĪbū|ĘMf>AëQ\IENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment5ߙI%YIDAT™MÍą € EŅk(h…ҁ \ Cá$´?ąĄ âÆHqĒû’ĮŲĨ)>B1Ę ĮĒÚ'Y{Ō]Âŗ‰#7ČũU/ŗū[ģÃ*Ķ ­ŦIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment5ߙI%ZIDAT™eÍĄ Ā „០°ŒÂ] YŲ ēŖ@ĩO"ôŅÔ4ŸēģeōŽXĸ˛QN¨ķ/­üézJķÔĩŋ\j.ũëTŽ{ŦnŦLŽú“ŦĐ6š-C=ĶGA†?IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment5ߙI%YIDAT™eÍ1 Ā ĐĮzæz4‹ųĨƒëÄߨēuxH ¸F‚´ÁÄ …läˇ}ęR(ŗËÜeîĪPĻŽW%Ô˙öāÛá4Á‰âX?Ãôzy? ’­~KIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment5ߙI%RIDAT™mÍą € á3”˛+°+1"†‚5á•FüI¨ŒÅ×]rŒ'ŅēayڌeˆúåVCäjŌÍ=A5ãWā°n7^ß. ÖG§^ÅĻ>ĮJ‰â\IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment5ߙI%XIDAT™mÍą € Ņ3”°+0#Øš–†‚ŌH\ā—$øQ ‹×]rœ-˛1ČcRVÍBęBūZßFûŊ’xRõäÆíPũ—ĮÕ!`%bŠ€~#'\>kõ-ˇ6yĸJ§IENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ[IDAT™UÍą €0áĶ@ĘL ™DœL‚âÎ7qK Éī3ÚX|í–Fä"pv’G ėļJaû˟‰Aĸč=”–Æ^ÎøYdŽÚj3O–ũ鏑S­ ũ]šbū3¸ ÄŋÔIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸQIDAT™mÍš €0DŅpč€(ÅĨY‹ĘÜ %ŦvÁËæ (™SŽ*žŲĨ‡ŊÚc­ <Ę2%XÄalŌ>ē'mËũÃŦĪĸē]…T.|u’w‰IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸYIDAT™uÍĄ€0Á#â•R‚Ą´đ€§Ļ”’&ĪƒÂ ÖŪaš0"Â9 GvŗPmwōĄ5ŖL.ĸŊ S@ggĐŊ”åGąÕęĶ~Cä$ŅČØÖnĖ­7Ül=¸IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ^IDAT™mÍĄ €0…។s#ÜHƒ!.F7 —–ŖA">÷į=*+†’Gå^„Ķ„Ģ(ŠZ?áĩx÷ …Žô„~õDˇ!šÃ”sšš}+û{ėMÕ0IüxÖŪIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸYIDAT™UÍą€ DŅ/!%X ci XtB †Ėc ÁËūėĸ5Ąėwô\)ĐuÚG™r"[õXKr ŽmÉ?åՖĶ8ĒzēØĮü˛Áa˙ōæ6Iųę38IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ[IDAT™MĖą Ā Á$BJ GŽ YĐîÄ%:@˙~á„`tÉiŅ~"d&‰÷HŒ’xÄhĻĢp›ļМ`ėO‰ §ŋ ,nÛļøĨj¤K\ũqd†ĩ&ä‡C0×]áŗFIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ\IDAT™mÍģ€ EŅ+ÎRĨX—ÃøiL;ĄCf× Nö>č’"@W2(9Uēõŗ?˜ĀōXžäA<ƒēnT~8ë9ë;Ûō–/ōūTÛjdt“Š 1ˇSCMėIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment6FŸ]IDAT™5Íą €0 DŅH)SSe”L!RąVØ6 ¤@6ŽÅĶ5'}ô”ŒšģšĖ!‘ĻÉģŠŋ&ŦöĮžŽ‘A;ÜômWŨčvh8ëĖɚ™ĮęēÉ ¸4ōҧIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ[IDAT™mĖĄ€0 @Ņ΁Œ`€‚č`ˆ:+Į"°˛"—Ēˆįū}üRœŒ’h‹pá4á˛ÄîĘļą*DOôŦ61„Ņ_üÚēŠÛŖ­ņ?Kâž3‚ úa“2­NC ÎIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸWIDAT™]Ėą € EŅ %'1ŒFĐœ 7Ņ ,) ß c,N{°š0"6H œ9°Û*úQ!I”“˜pōš6[txēõŸS¤1Ōɘë7Ž 6a4×zIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ_IDAT™MĖą € EŅĢ&„ŠœÃÂ0ų,āLqJ Ã÷ca,NwßC÷ˆ2sû@]59Š:.ŨLãøÉĨ!ëÅ;ÄZtdx ĶOū`FÛwũפ@Yf*‘FBĪöiģ8Õ ZđIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸZIDAT™MÍÁ €0Dҟ9Ļ„`!)-ÅÆ´KČ҃ėēīö™A׊8‰9Ԋ‘ČŽ‘Må3ŋĻĘd=֓HĀŠī†ŽĪbæĮĻĄÛīũ’hãũ[Q'(´2⸋ÂeIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment6FŸZIDAT™uÍĄ €0EŅ ĸ˛éŒÂd¤Ia–ĸXŖ#T"š÷ų 0ˆãnŪÃē0Dd¤Hß\Ž49ÛŠ&ĘWx÷¤Ųif2~•×ĖáęCæŨw.V;u“i3éÖīŲIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸXIDAT™uÍą € EŅK dFq0 “¸ˆn`Iņķņ#ļ§ģyž !Ņrâ–ÄĨSíÂaĘĮ›€õXOŽ8 8 øĄķ#PtĒ_įj_ļĶėYŊÄ ˜ũ˙?ų`ü˙˙(€â ˙?@ņC >ҁ¸ˆ™Ą˜ũÃ?(ūÏĀ?@X‚˙Øåë?‰ņF͊ÁĀ8IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment71—( HIDAT™c8˙˙C?ˇq f```˙#Ā ˙Όí˙€pÃ˙ ø?„âƒP|ˆ›Ą˜‚˙0?˙AĮō` K8D…Œ—Õ˙IENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment71—( RIDAT™cx˙˙Ãa >ĀĀÄ `ÜĮ í˙8ø˙K0Ė˙ ˙Aø˙¨€ā üƒá˙ ~ÄĄ¸ˆ›Ą˜‚˙ąCđæGÃō?GîDÕÁ’ā%IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment71—( MIDAT™cxü˙Ã0n@Ãė˙9˜˙ŸÃ| ū˙Ī‚á˙ ū ˙?@ņūÁ€ø 7B13˙ƒâ? ĖÅüüOūŲ|?wÖķöŸIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( MIDAT™c8˙˙C;7qC€û?y06ãú? ˙€đ†˙ ø?âƒP|ˆ›Ą˜‚˙Aņ~,X‚˙ŲņˆEŸɤņIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment71—( MIDAT™cč˙˙€Ąˆ€˜Ža€˙ƒü?{ Ž˙“Āđ˙?`ø˙ŠBņA(> ÄÍ@ĖÁ˙`˜˙Ã(ūÂōHØŒÆ@ZŖ ÚđIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment71—( OIDAT™c8˙˙C;70€0#ū ō@l˙‚˙˙H€ā ø!âÃ@Ü ÅĖ@Ėū€áķ?`øÅ?`X‚?€h{ ޞš?đbۇIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment71—( QIDAT™c8˙˙Ãq >Ā`ĀĐĀĀ€‚ø˙ 0Č˙3`°‡â˙ øĮ†˙€ø#?Dø07C1;˙aū Đą<˙ŗ˙Ų"Cų„€QxIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( UIDAT™UÉą € ĐßYÂŦāŦäjœĖXX˛‚np%Åü0ŅâUŠ ĖI+-ĀāáŠGP3"ę„j˛TĄ‹nÚģƒļnhŠqR~…Č›åI‰ĻtiîIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( TIDAT™UÅą € ПPXÂŦāŽäš8ą°d78; rį'ĐPŧÔh™4’yŽâ9EŦŽõÃŗHīŗōțߓveoG4QPZŅÕEw“ŪūNõh'õonĸ4FŊėsI5ƒ­ßų IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8Ą(5˜^IDAT™MÍą € EŅk%#0 …‰kYb,X ã"ēå/Čc,N÷r52‰…39vąŲT1l‹W“#â8uߤ‡k,W4Šm3ŒåU•˙éŊĩõŖôŽū×Ynüˇ5E _Õ)IENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜cIDAT™=ģ €0 Dĸ ­ † ĖhAŦ•ˆE2BJ0_žt–îέrŠ0Õ“6aŨ‹1ŋL/aB'D<ŲōWGÍÄnGŠ–/°(4ģq|„ßׯŊibīŸJOEå/ËNčhIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜]IDAT™cøĪüƒ?0T0<ø!ÁpđCķ?0n‡Ō ÜÄ ˙$Ø1ƒÃ úp âõĒûT˙‡¨—ũ? 7Āqûˆy€ö<ęé˙ÃøÁ2>á1uĻIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8Ą(5˜]IDAT™MÎą Ā DŅ/…’P&É`)PĘbdF ¤° 6Å+,ßYf t"@Ŋ=Ÿ¨áțdO:=År\K[‚ō:;JÕ|‡,đ8æ.)ŨOģ§wĸuŦõų$0,ĩlĐŪIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜\IDAT™UÍą € EŅk,d aG°´2ƒMōüĸ'yÕģČ yq$ą„Ķęߥünņŗ#rÛČĒtVˇ!EU LUĩÁ؞¯C;quũCûØ$- ,—!0IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment8Ą(5˜VIDAT™eÍ!€0Dҟ čö(œ@*¸V.Yšĸ), ‚xîg†‚’ņl‡'a-ŽPŋf3fâŨ>Ôd¤ŲŖ#e K…ūüëĖģŗ´_E/Ŋ-ßRVIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/[IDAT™cøßū‡0Ô0|ø#ÃđāÃÁ˙< Í˙Y ˜7€éFūĮĀpāÃūĮÎĀđ˙?ŗ 0ĐÜß@üāЎ ްax´÷#Đvū?Rd6Īx ËVIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™uÍą €0EŅ+Ļ\ ƒX\Å,-,‹›Ä RĻøüø´ŗ8Ũ}<´ BŠxĸzví8ĒŖũđkWØâ ČF{Gĩ]ÕW÷¸ÄsJ .fZ­ˇßVĐQnųķ3uåëIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/UIDAT™mÍą €0áC!Ĩ:sX9YãdēIFl,Â{ūZˆÅ×ŪáÉ(g7˛Įžl ›‡[ōåcūĢAŽBÅ)ĨŽp„ץv6=Š ú1‰ū­]€›<üz—(IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/^IDAT™]Íą €0Ņ“l ā"Ę,K6 ¸@ĘŸÄ ‚ÅkīhŊPōäIÅÅqÔáfĒÅ´?>õą l–Ŧd´´öŌÎÃqj;Š'č',+Ą’Ņ˙,ķ´3œ¸´đIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™mÍą € EŅk( ˛vĮa K‹a\„(A‡ļ'ŋøÉģŒ7’­\uáׂ€ëāŧŋĄÂ!Š@t¨3ô6„ö†[.5vS+iR×Û#/Ä&‚_IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/aIDAT™5ÍÁ @@EŅk$ėč@ *P“Ĩ…*L ė,ä7&'ųķ.ą0Îą#Ė ŪĢØbâd˙ēŗUBfā™āÄq‹ÕŽUĻÍKÛÁRGú î]ĒßÚ m7ä3ōîIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/^IDAT™mÍą €0 DŅ‘2# Á”‘X,MÄba؀’²q¨)^÷u‡áĄpĪ™SFš&T‹ėn0~W;…&n…| tŗ.bÚĨĪåZ˙(™ļī…{t“+3ŊöL8ĄIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment9Ö/VIDAT™UÍą Ā …á?Ø8‚UæČ8ސŌÖÍtG°ŧâĐh$`x|<¸âz3åžHâČęˆÍb^üõÍv ŠBFŅNčíc]ŋŗÎ@ō2ļĢ‘ōÚ16Ė0IENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/aIDAT™UÍą €0„á_‹XŽā –’š,DŒ ¸’n’´ŗ/žäøē㎸ )7–ŗoņŌ°‹áˆ—­Ųōã>h_ā;8P”ÄZŗÉ.ŨNû~ԟÁâ™ĩ/„J98‹EF÷IENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/^IDAT™MÍą €0FᧅvâN"Îe!!Ų,k8BJAšøSČņ5÷Žŧīœ,$&Žu ÚĢ#äļĸhǐ}õíŊAÜdD Ԃ[˛n˙.5“Ú‡“YŋĘOGjŒģˇ˙ˆ6Š-„ŦŽIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/_IDAT™eÍą €0 DŅ ƌŒA˜ E0+e$ƒč(^uŌ}ėP”ÄÉL#’"Y[˛5l/¯õ§nUV—@(ĀílwV5Ÿ–ËEŊątČäjĶëgPŦ×ų.7†ˆīŦIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/ZIDAT™mÍŊ €0„á+G¸H†rqą¸IÜĀ2Åņé!ˆÅĶŨ҉†8ÉԖؕXcd‹žîzņ/pÖĨAÜ˙Œ#ÕûE™2/Îû×˙štŠ4(ÉŊcIIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/[IDAT™uÍŊ €0†á"Ú\ Ŗd(°‹›Ä R^q\ŧ€ØY<Ũ÷C_AidĒ$.9]čĶ‹_‡9…Ō ‚ī€ĖĐŊ×mˆŸÛÆ~ĸHĻlģįũ7(ēę3đcßđeIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™mÍą €0Fá´ čâP–6ŲL'p…¸Ĩ⑸G´“ãĢŽ{Gی2qėXĖŗ&OHõÃe¨~¸W(ē“uā”܈vYĪĨînå‡LK;qVv@22ú0LũIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™mÍĄ €0EŅÛPY!a…Ā` a1˜€Ę$ÄĪ/Ī€B÷^.u7ãfĸŒĢulž˜eŠ‘æÃ¯āh‹~P2œĀŨDj/úU%.9ŧĶVQŊl” vk‚"4™­/J IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set07.pa000066400000000000000000000727031506303110300215620ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøūÃæ ?0<`℆ƒ šņ†ö? ė ü†ā˜Š!|ˆ{+ņäUqÖIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment0¯ķŊĒEIDAT™cøÃøƒ?0T04d.Č|= ûūą˙Ãī,žč"ˇēIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøß˙ƒáㆠ €øƒÁ ˙H04ūã`há˙ ė˙HÂÍPŊ 3@fĖ|Ā ļdĐNž*ö9ĩŽ IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒPIDAT™…!€ ĮÍJô{4:ÁkÉM8quģaÚ˙3˜)cS:J#ĶáŌD‰2įŒ/ÁģņƒīžOyËUģ¸_ŧ“QīÍ 7W-DŽ’ĘúIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøĪüáㆠ €øAÃ ˙0ūĮĀĐ Ã˙˜Š›Ņ1Tíáũ€øA…Đ\°Ų?€ä?æj-—ŋ¸IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøūÃÆ ?*>0X0<``xP!ÁpāÃÁ Í˙A˜ 70´Ŗav(†đ‘ÕBĖ84ëÁ š`;@vũaøÅB3Įe21IENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮø‡áC Æ \!ÃpđÃÁ< ‡˙ķ04˙gAÁí@ĖūŸˆ€lncTĩ3@f=ø!4_lČŽ?Œ:0)W“ŌĖIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøÁøáCÆ@ÜđA€ĄņC33˙c``GĮ˙ņ`¨žf ™ĶđC€á@‚Øü@{~mûÃü5%-öŗ $IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cø˙˙Æ?@XÃđƒÁ†áƒ dž˙x‚đ†Ã`ÜÂĐ Æ íXp3ˇ a°^™õā Øl ģūÉ˙íë;ęĸIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøÃüƒ?0T0<`°`8P Ápđ‡Cķ ūĮÁĐÄė üfĀƒęéoü1ī@‚Đü  =?ūņ?æ?*ÛE 7ŨIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøÃüƒáW0<`°`8đC‚ĄņC톿 í@ĖÂ˙A˜Žų‘Øč¤§ŠÍ™ 2dĮ üÃøƒá˙ü^—,L/¯áIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøÁø00`0`8øÃ€Ąų304˙c``‡b~ūŗ˙CÅí˙ zAæ€Ė;đÁhžЖ†@ōûiē(ŦŽ€!IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøĮøƒáCà –`xP!ÁpāÃA >ü„š¸Œ˜ CÄ!ęb?ø4h6Ȑ]€ä˙ö42iĸ s‡IENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment0¯ķŊĒAIDAT™cø?˙Ãæ XĀđĀĄ€áā†ƒ š˙€qû?0f'ˇ˙€ë™2ëÁ‡°Ų?Āv@‰,y€á9‚IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR ģšĀ3 pHYsb&2 tEXtComment1Øô<IDAT™cøÃĀD?>0 €`q2‘ÃČ‘÷>ŠÜIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR TXĢ pHYsb&2 tEXtComment1Øô<IDAT™cøĮĀđŒ>0040 Ā˜8Šhā?öB+ԌųsIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR˜=¨ž pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ†¤@¤…ÁĨ֛ûIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ŌĖŲŖ pHYsb&2 tEXtComment1Øô< IDAT™cø¯Āđáũ``h`@€0qúGa5V"¯ĻIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<!IDAT™cøĮĀA0040@AXäL–Tô_rē#ūLžIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ŌĖŲŖ pHYsb&2 tEXtComment1Øô<IDAT™cø¯Āđá}`@`â$ĄP4ëŦƒJIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRÍH pHYsb&2 tEXtComment1Øô<IDAT™cā`ā` p0ĖHątđX%IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR ŌĖŲŖ pHYsb&2 tEXtComment1Øô<#IDAT™cø§ĀđáÆ đ,NúĮX8#ŋjuIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<IDAT™cøĪĀđŒū00|``h`@€0)2ĐV9IúļôîIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR `¤ pHYsb&2 tEXtComment1Øô<,IDAT™cø˙á˙†˙ ˙ū0ü`h`!0ų€áŲH€á˙ęĄįP:TIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<&IDAT™cø'ĀđáÆ PĐüG`øŋmbV8&ÅyIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRŋo pHYsb&2 tEXtComment1Øô<IDAT™c8Ā H‚ūgÅNQ1ūIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRjúķ pHYsb&2 tEXtComment1Øô<IDAT™chaha`ahB,°…á Ÿ”­q|ęäIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR…8˜& pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ@ø€6ĄEm}IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRÍH pHYsb&2 tEXtComment1Øô<IDAT™ch`€A0F H,dU Į‰ž0éžIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment2Aũ܆\IDAT™-Ėą €0 DŅhÜŅf”tŦE(%+Á&ŌŠ9ļ^qļt4\›Š¤×qg3Jƒ°ũv ŨC˙đDT92ÁDëÔŅ;×āÔQfį g•"‹zÁøÆ”íŖĸ.äQc ĀIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment2Aũ܆]IDAT™-Ėą €0„áßƌNĮČhv )\KqWČ)_<Ÿ˜âƒƒãFè$ ‘cŽœ-ČúíŨíôäŊ,ĸ’Đļ ߡÁ0˙Ē“qŦNÆérˇ ûō%{Č\4˛œ_IENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment2Aũ܆YIDAT™]Ėą €0…á_,,Í(ŲĀ•ÜÁ"Ĩ+%¸HĀŽ´9ŸX|ÅņāĮŨčƒaŦT"™@ipHęâŸ]ŋ?´ųp‹xŪF›Ô™ēYŨ"›$Oãw7D•37ÄÉiIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment2Aũ܆ZIDAT™MĖ1 Ā …á:Ô­ĢGqëĩÜZqčĩrā˜AL#tčƒ„<J'ĶHɁ2u.P žÅģ-~3u=b’0˙žĄ›īJ;šœ)åÃųį&ŧ[-™ä IENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment2Aũ܆JIDAT™c8ĀÜĀĐĀÄ@Ø Ä˙00ü˙€ƒÄåq#õũco`øÃßĀđCžáƒ}Ãú†˙Ą˜„‘Œ*D °÷‘IENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment2Aũ܆YIDAT™UĖą €0EŅkeFHįvŽd™2`áZēIFHų‹īƒhaqāÁƒ‹Ī†‘¨Ŧ"×.-pôátm˙č÷ņ"9ŅUh“:jÕÅ(›qšqËņ‚đ“C|§š1kâÛIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆RIDAT™EÍą €0CŅQP2ŖáˆAX%Ų$#¤L‹ qŌ+\ØĮÕEZ„& đD/ õķf ŲĸšsĪâtŋ­ĸnĸx/[´ŨB›˙ų_Đúą/BUûtõIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment2Aũ܆WIDAT™]Ėą Ā CŅQPÂ(l•!‹1JFpI¸\¤(ENz•íc1•NĄL›neâⓜ=<3ī˜ vTĖwk3 %˙ŗ‹nâtͅ×˙Ėt%10í4Â^mIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆MIDAT™mÍą €0ŅCŒÁ(d3`3#ɤLō1QQŧŌgÚ(r/Ô‰='Ž ņ§¤G![ÍÛ6ˆĶ2Ųėž)ÄöZāsDč\û7ˇä‡ŒIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment2Aũ܆YIDAT™=Ė+€0EŅK0ã°]JÛBļŠ@˛Ĩ.ĨK¨Ņ0 Ÿ ŽyÉģŒIQ6ŅĒ ųĘÍ`˙&˜o6œŦģ1˙>Yé‹ŌVĨÚ+ģⒷA~ šĘe/¤>ÛÃIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment2Aũ܆EIDAT™UČA Ā Ņ!{蹐‚´ŌTVĀÉJX¤ŋ=Â䝆ČtŖ&*´ŽÅî?ŨČxæÉĖDÁ/\ ņI,}Ļm"ē%JēIENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment2Aũ܆[IDAT™MĖĄ€0ƒáEG¨cdká(‡`­2+tä=AArŸ‰7ĻÎTĸĘ8Ŧ7lūŲÅ_ÚŊü’ņœx?Z§ŸŪ¨ƒLFYŒėÆ*9&ūÉrē=f06ÉŠ(IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment2Aũ܆QIDAT™MĖŅ €0ЈtG'3ŌA\ĨŨäFčį}HĪzáA~r°D”…ā ÜD›øÔˆ"U˛ŦD×ūŲ߉vD•Kr|?˙Íž1.Ũ ˛PåIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment2Aũ܆\IDAT™5ĖÁ €0 Fá=xl7pGp¤n`ŃkÕIt„{(ÆÔ‡Ŗa\dIÔ9ąvØî×î0HÔ~Šëæ-á&uÂKĻëŋŠcQŅ¨‹q¸ą}‚ ö?mė.ųâŽ4IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment2Aũ܆TIDAT™MĖą € „á?ą°” \ŅØ@ גMá•„ķ%šČ]žō­FÃŧ‰J䎁Ō!×ĨŸÆ§dŽFt&äëžøĪæ?ģQŖČČLyĘ0ÛņŦâIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėSIDAT™-Ėą Ā0Ā\¤´7đ -#DĘb…(),Š“<9Ƌ 7Y8÷HŊLgĖ3ęYÅ?ų>îŠ4K/ŅĶxdw ˙•Æí(íŊ†éˇIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR]ŗ w pHYsb&2 tEXtComment36úė?IDAT™5ŒÁ ÄB}vGŅՊ“uĮđ!TT„|Ž  BB:ŸN S ģ(ë9īŸ;›ŸÂé^7č,û˙įœIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėYIDAT™5ą Ā ¯ #0 ã!Q°TY##¤üņņGIq˛dûßx7ÆMá"3Ä\‰šÍ K]ž[Ƈ¨E„†‡2áAUˇr|ˇMYü¤w#ļbĶO{~6?ˆ^ĻČIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment36úėAIDAT™chāg``g``f``døßČđ˙ Ã˙`‚š>°3<`g8$™ū1‚eč*:Ā Ī2dPą=4 ¤)äķIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėVIDAT™MÍ!€0DŅO*Z‡íQ+…äJ= G@ŽhXĻI≝Ųdˆė œ‡ÆMĨ‹M^8F!I–S. åa•āoæC^Øō’t'åĻŪô×ׯÜķÍ?â)ė§)F^IENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment36úėYIDAT™EÍą €0 DŅ(R’Q‚((Y)Ŗd—)PĖYQŧÆgûđdôÉ06+•Lé™ã0K’K\s7ŅŪ/fĘ"â°HúŒ÷ĮŪĄhˇęĻŠ+:ũ´Ž-å_ęsIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment36úėAIDAT™cøSĪĐ ĪĀĀÎĀĀĖĀĮĖđŋ‘á˙A:Ėđŋ™á?;Ãv†ü ô€á\Í$t$8ŸdČ(y…| ‚Æ|ÛßIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR]ŗ w pHYsb&2 tEXtComment36úė?IDAT™chc`āc``c``bøßÄđ˙Ã˙`tĖmbøĮĮp‚Ø~Õ0Ā<@Bė@&€Đ(;ią_qÔIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėZIDAT™-Íą Ā DŅQPÆŖ0ZF@ĸH™•2 #PĻ@8GBņ û,=4ÚÖ¨Ü$rM”Į(Ũ8‡å×ėÚģr×ŨXœšGš qؗ8~AYnöũŸ=jDŊ/“Ā.^$Čģ5IENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėXIDAT™cøĪ˙áㆠ ĀØ€Ąņ‡Cķv$ÜÄ˙â˙?0üob‰ņ†˙˙ Xū??Ųė@Ė ”™ŲT2dĐN2,lŒ?IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėVIDAT™MÍË Ā EŅ ŗpKą4K0¤%Ką—.Äņ9Čü™Ąs^#SIšGÄf$ü<âĘ{K8GfŊŋr]&ø‡ëŖ8ˆŠVÔsvWÍ5ŨÖ7p+^ßXJšIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment36úėGIDAT™5ŒÁ €0 Ä\å‘'#ąZ™€•‚X¤l ŽĄR%?ü°LœtƒÆ}ĄEɃ^d 'i¨šØM‘[o˙¤Vũ 5`÷$׎ŽŸ¤IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment36úėRIDAT™MÍĄ€@ DŅ‡ŊR( ƒ  ZI)”p2‚š°â™ėÎīœ“c’‚yaģ¤ ė?ĄÛÃDŨ ŧjfŌ Ĩ˙äÎĒ|ÉmÉ_ŽßĘĩ,†YōÆ=IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment36úėJIDAT™cøaßĀĐĀÄĖ Œ ķūâhø`Ã? š@ĩ@ÄĒ˙ßSĪ€Ā`lˆČ\0ęiāo`øQßē1ãÆ%ÖûIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėYIDAT™=Íą Ā DŅOå6Č Œ–’I˛JFa—r(œ,ÛēŖ™ãÁ)87;™ŗfŦĨ_”K†öŖˆūú2gqŨŒūÚ$~Ŧ+Ŗ&BI+{vĖŽjūã,|Ē žōIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗIIDAT™MĖą Ā0 AĻËEŖąt6s6ņ*Uą D… \GIDAT™cø˙āÃ˙PÜÄ ūAņ ūĄđ€á?(âq#?H``btđ(ö(|U5™ũw;hIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRļx‰ pHYsb&2 tEXtComment4¨žyŗEIDAT™cø˙ņÃ˙@|ˆ ˜áÃ? ūÄ?@¸āà ~đáÃC > ÄÍ@ÜÔĮ|@ü1cR\90sõļIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗGIDAT™cø˙áÃ˙|ˆ ˜Ą€á˙a†  |€āƒ@Ü ÄĖ@ĖÄL  Č ˆ˙Åąâ{˜3šč?~˛IENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗNIDAT™=Ėą Ā0@•!Ŗh´/ŧ˜ŗ‰É.ŋ0ū(|ˆāj„ØŽpCLĻ!]ęĖUä œÄ´4œ¸ä”&E2oßŊč›ų˙Ķ^öuj3Ōã(ĢIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRIĄĸÍ pHYsb&2 tEXtComment4¨žyŗGIDAT™eĖą €0CŅĪ%ŖŨ°lr#¸L¸X"–^e˔DË/‚gš›](ĖÛTpŲa[ĐøŌ¨ė”ģ?˙MÅ<4ūØî0"IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRŸøAĐ pHYsb&2 tEXtComment4¨žyŗ?IDAT™]ÃÁ € EÁ—ĐĨm &6l ˙聸.ČÁ8É.ĸíGFÜûČW˛ˇKô|ŽFņĘWs#ô¯ų1 5EŨŅ•IENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment4¨žyŗHIDAT™MËą €@ CQ—ŒpŖd4—-ŖÜWĻ8aŒ@‚âũîCj¨ ­€æĢ, Ķöt‹ÄôS–¤{+S‹~6/Æâ3(H "IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙Ŗ†á˙~Ä€¸(Ö¤lūņ –°aøÄ,€¸Â†áÁ†‡@|ˆ›˜ų *`˜ų„kĐ1Âō1dŸĖÃ~IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗKIDAT™eĖÁ €@ DŅ´KIi9.ؘvĸä˜ÃbœuņdāÁ00ĄzRéTČ)ģMM™éV§›“.Ú\rČ6„ ß5)uīīŋUŗ6õfŧ2ŽIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment4¨žyŗDIDAT™cø˙§†á˙~Å€¸ˆ øKØ0üâ@\aÃđ¨ū„âF n``b(fA˜‹Ž˙ÔNũ3ŧ'Š­7IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗAIDAT™cø˙÷Ã˙@ü ‚q30üƒâ?Püà€áC(`xā¸Š™z1Đėėøį¸{6/o:„IENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗHIDAT™eĖą €0CQ—ŒĀ(Íe$ƒM2•WDR aé•ū¨!TZXˇ}jDA8ÁĮX‰¤Âē?Į´ÅøŽYÅōļ˙.õ+5žäRšÃIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment4¨žyŗQIDAT™=Ėą€0 CQŒ‚A–˙˙D’#ąŒÂŗ]IENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%TIDAT™UĖÁ €0DŅ/rtKIi– ¤ąˆØBJØcbœH..<fqœB$cƒrs9% [ēUĸģé†KÚķˇHčÔ͝}ģŦ}ҟ:ų Ö..Ųû™ąIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR{Ē| pHYsb&2 tEXtComment5ߙI%AIDAT™UČą €0ÁÕ)ÁĨPÛ!ÚúR\Ņ=’åĀH e2ËmžŋËčDjŧA‰Ęilr>Đ “ĻüÛ8&<&‘‘ĖIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR]ŗ w pHYsb&2 tEXtComment5ߙI%=IDAT™ch`c``‚!6ö ü0d3˙c`¨c`c`ācxĀÆđ‰áÃ˙†˙PPfPeƒ›d?–TĄIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment5ߙI%SIDAT™cøĀ`Áđ€AŽųū˙`8ˆ†01CCPž¨„p0ūÃÁđ˙Ã˙˙¨˜(Æ Â@ų ē°Ų ;,>0ü`øÃüø+/ŦĪLeØIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment5ߙI%3IDAT™c``a€ĸ? ō¨ˆũHÁ†A†áÃ?†˙ ˙`čŒÁ’bā#xŊs2égģIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%UIDAT™MĖą € „áßPXĘ(ŒÆ KW°#PRņ$_î%wy;$Ũ ĪÕ+yŠS0ÂĮ‹c¯–Øā¸Ą??Nå&Ģ:Ķ먆ųģH[ę 7.BĸŦIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%UIDAT™cøÁPĀđ€Áˆ ¸€áā˙ ‡Ņđæ \Ä š˙0œ˙ĮĀđ†˙#p?Ī€õÛķáã†˙öĩŗ3Y´ē€÷IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%LIDAT™cøĀ`Āđ€AŒ€ąÃÁ˙Ŗáf fá 6b†æ Į˙10üá˙¨˜(ÆÄĖ@ÜøCŦūØŽ )")-ÍėãyiIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ߙI%KIDAT™c8 € Í˙0´Ŗá&ö Œ@8ņû†ū? ˙Aø*–bū?ĖüCŦž¨īP˙æđ'*Ņ*ČļÉIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR GŌĄ pHYsb&2 tEXtComment5ߙI%2IDAT™ch0`Ą†ū Ä˙Ą€Á€A€á>à j!y~ Pņ—{ßô IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment6FŸYIDAT™eÍą €0 DŅĨHë!Ŗe”‚ĩÂ&Á%Šą˛^cŲwŦ¤\¨OcRMˇp.čKč&SĘĄ@¨ÁI~—]ąŋîûŨEŪÜä͏žčŗŦ´Ö'F‰õ$IENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸRIDAT™UÍą €0 Ņŗ(RâQ ZGÂM!ĨĪx(ŗ&w ã&kf:‰>āz øtŠQ§`Ā”%ĄAŲ¨lô_]Ęrhהiģî~?6Õ öÛ)ģ"éĪIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment6FŸZIDAT™EÍą Ā DŅRĀŒÂh´EÖJ6aJȎ­)^sōŅ$EcR™ŊrīŠ…aĄq™‡Ąģæ*ÉīÂĄ˛ũ"úí<⛱íŊå}ņŸ–å´8'žū+ōIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment6FŸUIDAT™%ÍąĀ ÁcL ”âŌHn‹R\‚C ō ›^¸3FãåäĄ2šŦJ_…˃m9¨EęBš…ŧ~‡ļ;ÄŊt5ôš÷ãO‹ŸĄˆ)Õeŗ ĮIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸPIDAT™-Íą Ā0 D҆¸Õ(Í#ŧX˛IFPéBؑ8^qÍŽEĘ#ĘëBßĻP—;ŽbĀւŠoPgZ){Ī­{Äöųhį͋ũôJ&@Mą{ IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment6FŸXIDAT™eÍą Ā DŅRĐzFČHŦ€ +1JFp™AÎJY¯8tf%įÁu•›Â]Œ1ļŒ“/B•"Ļh¤ ‡äõ׃ēĻŊqÚˇ/ņo&Ą@&Š-aIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment6FŸ[IDAT™51€ ×.Oā–<͆Æo1~Ä'PĻpˆĩØ&ˇwÁ˛rŗĄD+8]¨&d;(Ļ”SI "¸BÚ=w/îü¤÷^=Ÿ{ĢĖũæũņ¯/úmc.6|IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸXIDAT™]Ą€0Å57BGéh'0<+›0˛ĸ¯Į§8D\^B,ŽĶ(Üd.Œēį0ö0ŽI›Ŧr‘‹\äâÆŌ4 ÅĮņcWį”Sũmg=Š^ÎP+ĸ=i!+ Bžå”IENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment6FŸSIDAT™MĖą € EŅk,l…ŅÜ@ į".‚ü’â|D ‹sģ÷H“zDîaš>yĘFbÚ%’Z`ņĀę°v8rÕĻOmL\›=@Ö0:(úV´IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸXIDAT™EÍÁ €0 @Ņ_*xÍ(ÁQÁzč\â"!ĮJc*ĸ„w Ÿ‹JC}*‰Ú…s—Ë&ĶĪŧÃ;6!xŦ“ũĘ+û>Ī{Žîéų1õ 7}Ž*ÛlüČSIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment6FŸXIDAT™eÍą Ā Ņ‹Ō0Ŗx4Š‘(X‹(‹d„”.äC›âšąuĻã4’ĻņyŽHíknÉÃ)SqN&Ũ--°év,ųGíkS×ĸúĻBŌ?˙@đ*Å֚cøIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment6FŸRIDAT™5Ėą € „áßXØ2 Ŗą&ĖE\„^IAĀĩøŠģ\މŅņ41ŠQĻQä’ôËÆŠņĐ<{wKŽ<øŧ9Š/íęú´Í‡Ũč@.Ŧ‡¸ĖIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸPIDAT™MÍą Ā DŅ\°Ŗe æBYÄ#¸¤@$g)EŠ']á;spAS’Į™rK—!5U‡"ēM%ļĀ6ԟņé2wcFîæžū¨Ė_2Ÿ+–ųP7ˇIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸVIDAT™MĖą Ā DҟPĐzFķ EÖb”Œā2‚Tz–žŽNč9ekŨ¸†Q—iÜ3ČrĻ—ĸ¯q¨Męō@͏îēiKMSÛöžķjŖ§øU~'ŒŅcϰIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( 8IDAT™c`@€ø˙V`ø˙!á˙ƒ|Š›˜˙ņCđy(ļĀđŠ?ÔŖá˙` tß7>āģæIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment71—( SIDAT™=Íą €@DŅLlD°1ÅÆ´“+A0š`qũĮĸÁƒŸ #w“ßĻCIĢôËpKč0„2ɯEž+vNlØŅ  Oė3†RÍ4ø~>ëAMũĩ¨ÕIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR GŌĄ pHYsb&2 tEXtComment71—( (IDAT™ch` ųˆū€ĐŸúņáƏ0ô†žm K~hIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( @IDAT™ch`ā`@Į€ø˙ –b †˙?€øC˙`ø˙ˆņA n†bvūĮÁ@XØŖáúū#7Ũi8{”IENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( CIDAT™c``ā`€ û˙–b †˙?€øC˙`ø˙ˆņa nâv f‡āüP,˙ƒá˙°GÃõp ŽŒ9âS–MĸIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( >IDAT™ch`@ ū˙?üÈ ūâū„âÃ@Ü Äí@Ėūá?˙‘GāöH¸ ˙˙Žš:l?!ø\IENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment71—( CIDAT™ch`p`€ ūˆ80ü˙Âū?âƒ@Ü Åė@Ė€á˙‘‡āöüĄ‚üGāƒHøđ˙Wx6ûļĮ4”ĻĘIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( @IDAT™c``ā`@€ü˙@X‚á˙ †˙@¸‚á˙ƒ ˙Bq3ŗCđ?~ūÂōüÁ?€p=‰:6Ŗá>—.IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment71—( BIDAT™ch`@û˙˙ÃÅ ˙X0ü˙PÁ~@đA nâf fbvūĮ˙ƒáËCđļGā?õ?Î<9oG„N‡IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment71—( FIDAT™c`@g€ø˙(>Āđ˙âf fbö ˙€ø?Ë`øÂö>ņŽâ˙@ņA$|ø˙%q38 žKIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( 6IDAT™c`Āū˙a†˙ øÁ†˙ø 7C1;˙ã‡ā?ōüè‡â˙(û9bDŪIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( @IDAT™ch`0`@ @ü˙˙0`ø˙Ąˆ?0üÄĄ¸ŠŲ!ø?Ë`øÅ?ėø×#đ˙Á=:`OŠhIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR cLē: pHYsb&2 tEXtComment71—( /IDAT™c8ĀÁĐĀ@ō?Ã? ’`øgÁđĮ‚áGũ`øFačņ†ī?2]Kīû ÷IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜MIDAT™cøÃūá#30`0b†Æ? Í üŠĄüÆP5  4Xũæ ėČø?‚Íü‡Ą¨ˇĒd׿ęÕ&™s6‘ IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment8Ą(5˜VIDAT™5Ėą €0 ĀG”YÁŖe…×"ĸČÁĨ‹ņ&BÖÖۏ§|1ä\¨¸Ŗĸ“ŌsoδÎģŸQÛ Ũę‚2đŲH‡đ_p0ËŪėÕ^*Ģ0TeL´1IENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜RIDAT™=ÍÁ Ā Fá'ęŽâh=V瘪t„séo+>ɃЃcœ<Ō(4ËÜ.}JKĻjW­ü͖š¤Ē‰#ql,šu žžnš §G' ԗ|VIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment8Ą(5˜OIDAT™cøÁü€áà L`8ć(0ūƒĀü?€r@5ŒPĖüŦŦū€Cķö ėPq37å fęũĮūÄ,ąK%cÁIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜UIDAT™cøÃüáÆ @,ĀpāƒÃÁ? Íš˙A1ßÄ~1ƒPƒØ@r Ė@uė ü ˙ƒˆƒä @z!ú?!Đ^‚G(ÁDŽĖüIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8Ą(5˜SIDAT™cøĮ~€áㆠ€Đáđ†f(n‡Ō?80HĒŠc†bÆ`Í€ę00°``ā˙ƒŠŲ004õ6ÍŠŲķ‡˙lq+UZ>…IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜UIDAT™cøĪ˙€áķ† €0áƒ†Ã?š‘đÁ@ņ@ų :FÁ@=ÍÚ?(0°Õō˙acv(fŠ5å@ę@ęAvíū0,—ŊČIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜PIDAT™cøÃüƒáCà –`8Â8ūã`8 Å 6Hė@DĸĻžƒĄ(×øĄų?ŗ1ķ$TcÁ× ˛īķut)Ëžļ—˜IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8Ą(5˜LIDAT™Uą 1ũJAų+1ʏ’(‹1JF ¤|[T‘u2Æ ,p‚ ë8v’jVļ÷ʍFŗ´§ƒ°Ūē‘7x;!úOZüÕ(TuhbIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8Ą(5˜JIDAT™cøÃüáCÆ@ÜøA€ĄņC3:ū!Āp(RķŠAė<ķ?v,$ŪøƒŦĸˇ€áãGm%AršlIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8Ą(5˜YIDAT™cøß˙áÃ0|ĀPĀp Á€á↿?@ü ų ņ@u`ĩ`õ@v#Pœųû? ūÁü˙lūF ū `Ŋ ģū0`ø˙˙O.¸æ!â~IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8Ą(5˜SIDAT™5‹ą Ā QP†Q‰2B"ŠŦÅ(ŒāŌ…•DĤ8é˙ua°Ķ? M3Í2iq™÷S Ŋ–åšÛ™{&¤ļÉãų'š;ūä Ô%ĩš˙ú€IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜VIDAT™cøßūƒ?0T0<`°`8Ā Ápā‡ÃÁ ‡¸ŠøĀ† `u0 Rßđ(”cūĮĀĀū™Ą¤ŋ(R Ō˛ëÃūr*qUŗú%IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment8Ą(5˜OIDAT™UĖą €0 DŅC)˛FFķ(D,æˆEn—.(8 (õģįC6"6ĸÎaX1pæĀņļŌāĄė1e?ŋËO—#ĐC]˙ššÚ+WÛÔ_vŪ¨T+‘ā=IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜LIDAT™cø˙˙ÃÆ ø€Ą€áƒCÆÆ? ÍpĖĻ€å@jqƒãv :ö˜˜(’Ѓč)Ų¤Ē'ß3øIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/ZIDAT™UÍĄ€0DŅą)…h)%Ā ´¤„“'2Í0Äsûī¨ŅđÁ('™Å&ļšۇŋŠ6°jP‹jđîÖ%Ųk§{>q•ŦíûĮƒŅf{[Ū-pås'IENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/ZIDAT™5ą€0 ŸŖ Ė0Z6!TŦÅŦ RēāÎ8Šo,ëEÎ"&ĄAˆMbī•)*%ĘõÃGā Æ­ánO¤˙^⡒ö¤}į!šũmôFšęŖ6/ĖNAöIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment9Ö/\IDAT™EÍą €0 DŅ(R’Q‘ˆ‚ĩ˛+0‚Ë–Ŗ !ëUöņ$´Ičķ°RCi™SƒAęücŋž+ ĮFdˆ,ҚĀm¸-séč*mtWö¸Ÿŗā‹ŧĶ!,E!M#IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/RIDAT™=Íą €0 DŅ\¤„Q2#dVĘ(ÁĨ $¸Xˆâ5–īŽ´Āˇ`r2īXvÚ}”ŊđkKS@Yp҉G˙ËU9õ¨ËÔYŨŦíYŧĸŽ%dá^U+IENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™mą €0 RĐf”Œ”!Q ÖĘ(ŒāŌ…°E‹^WŊîۄČÍɤФ0,“ ŽõOtŨi‚;¸‹/€íđŦ sŲĮĐL×ÂŦą?‚&y6Ģ)3ÍdÂIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/YIDAT™=Íą €0 DŅ(č Ŗ0ZFJAÉJŒ’\RX — QŧÎ˙ŒĪFÁ¸‡ČņėœXēØ~‹ōŠ õ¨†ēšî›ÚËûŽh/[$iģ˙(“á›Ŋē*Y!\•!IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/ZIDAT™-Í;€0DŅG•hˆ$$ =ąX@–[äCHq›ũĖВ8›dꚱ˜9šÜP$ eøæÖ`¨ ?”€rāYDûŗßū9ĘuéŽOŽz_ļZ-$›­? IENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/OIDAT™cø/˙€áķ<āĀĐøCĄˆÛ˙00°cÁÍ@ÜøƒáPš ˙˙ a ~0ū Āpđ@P-ĐlF  @ģ~Č?dč-ú'įZûIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/XIDAT™]1€0—*Ä"I‘XB žLņ“p Š(ļ¸b÷čĢQ'ãÆ¸Č"Qj"xüh°üūQ*ėršøéMČ=Gãí–G__úķ`Õ/)ۈP#IENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment9Ö/NIDAT™]Ėą €0 DŅ(LĮ ÍŖDĸ`-r#¸L ĸ@Oráû¤‰XDG–ūØGû{­ĸū!Jä֘ã˙՘rÎ^íģ_Ŗ0]€|)˛_!€IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ŒŽŅ pHYsb&2 tEXtComment9Ö/7IDAT™cxPĀpĀ€ĄA€ŸAžŒĀl h``8ĀĀđ€áCŸ‹HeƒÃ!ō  —"uIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/WIDAT™cøÁü0ąCÆæ? ė üķÃØ€j€j€z Čd 1ü˙ ũ@ũí@Üüˆf6<0Ûņdã†üÎs*†ˇōüYIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/RIDAT™mą €0 š Í(‚(X‹QÁĨ‹(đ!-ÅIÖËOZp\lŠáY°VX;ŋX‰~QgĸEPÃĮp€lČŦ ˙ū7˙ī $؆Ћ-IENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR9[Ø pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøĮøáCÃ;† | jøūgchū߯í˙ņ8f‡bˆø! š6°ú˙ØĀú0ČÍŗcøÃđá˙?úÁ+øŒŠ,IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøÃø‡áC Æ 2 ūđ04ūgahbö˙ @|ŒųŅ0HŦ(ßüŋ…á P-HH?˙šõ˙ˇ˙CŨ'˛Tüī6IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRō[ˆ} pHYsb&2 tEXtComment0¯ķŊĒJIDAT™mĖą €0 DŅG #0 b4äŅ%#d€ČæBMņēģO–`r38čė<â4|e5Œ-˙UŅV;?Û÷]ŽŪāR;^ëČŦžn#DIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøĪø‡áC Æ 2 ,xūcahū í@Ėū˙?‰äšÁ˜…áPĪ 92`ŗūÍüĪüA~&œĄÚüIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRˤ90 pHYsb&2 tEXtComment0¯ķŊĒ>IDAT™cøĮüƒ0T0(°`8øG‚Ąũ˙f`˙߀ƒäûę@ęAú0X€Íų4īķs9#ˇÄæŗIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĮü‡áÆ 5 dTČ04ūãahūĪÃĀūŋŠ0đ˙?€Ų˙70´å›˙ŗ0ę9Ô˙€ÁlÖ ü˙üGģ'ÉLđIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR'“‚3 pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĮø‡áC Æ < jXūgahūĪĀĐÄė˙€øVĖ ”kâF ú€¨˙М 6 ūY…#ZˆÎTGIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRtĪúĶ pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cø˙ũÆ ė>0Č1à >PÃÆpāCã˙&0fūŒŲĄÆoc&†u@=ØIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô<IDAT™c`€ †  ¨ Y`G@Å$āšŪžq'=å¸IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR¯tPņ pHYsb&2 tEXtComment1Øô< IDAT™ch`a€ƒ2 lHA2 Āzä]kf!IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô<IDAT™c`€PôH$Áđ€ĄŠėš)ÁIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR æI!Į pHYsb&2 tEXtComment1Øô<IDAT™c`€† ô aŠ ČÂ53õÁp>eIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô<"IDAT™cØ˙ƒĄ00<°`øPA,zPRÔÕBųžđī`yžIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR Âי\ pHYsb&2 tEXtComment1Øô<IDAT™c`€† ĐP”å@čũ÷į•g!Ž2ŲIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR Âי\ pHYsb&2 tEXtComment1Øô<!IDAT™cø˙ƒĄ€ä †DĄ0ƨv$Ũȗå9IENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR Âי\ pHYsb&2 tEXtComment1Øô<'IDAT™cØ˙ƒƒ8X0<¨`ø€‰,°Ŗ PĐPŧvXæi{MIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Âי\ pHYsb&2 tEXtComment1Øô<&IDAT™chā`€€† ,°Ą †@dEpq z¸Ūã F¨:ĪĮIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRŸøAĐ pHYsb&2 tEXtComment2Aũ܆VIDAT™%Ėą€ DŅīJ´`ÖDZ™—Ņ%\hāˆ‹ÎÍËî/Ŋ:wpŽÉ×(˜ė,+DÉršĶ‡CôÛÕĸO"æAės†d7ŠNĐK´}ŗšBŦ*ęįŲĀĩPÛô7ûŨ‰ •%k{ˇDˇIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRû°( pHYsb&2 tEXtComment2Aũ܆NIDAT™Ëą€ CŅĪQX2lâ*lĸVŽÅ(qK O \îĨûôSŧAÜhnŸ*ąU’å&VëÃaŅņ%wY<ĢÛ­pŊĐĀmņÕA?OĻ%כufIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR}$ZŠ pHYsb&2 tEXtComment2Aũ܆QIDAT™%Ėą€ DŅoDH Љ­P 36†•¸%Pãšjđ6ēDˆØÄBLšˇ2Ŧ[•ŦJQcˇž=í°$îėŽ¸Û;3@ ˇ|ũīũįîŌ•e)Ɩ* VIENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRŌ0āÛ pHYsb&2 tEXtComment2Aũ܆SIDAT™Ėą €0 DŅ/Ĩ  °‚@Ė”’Éđ(Á%J¸ ëIWܙ‘‚—ø¯S¨ŌĒ‘ÜČ})Ü^˜Ė&ęĪ-ōd9 .č'8hŋ‹)Ųúõ#Ú"÷ßÎūIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRl3~ pHYsb&2 tEXtComment2Aũ܆VIDAT™ĖĄ€0DŅBB´’(!„’2C#WÂɆcA<ˇû‰pĸs2MŒD•Ëģ'Ī„}´Ģ˛Ę&Ŋ>ƒsON[Nü›Ņwü5Šzęŋ:I-.äī‚RIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRl3~ pHYsb&2 tEXtComment2Aũ܆QIDAT™-Ë1 €0Ņ#hÔ°Ô‘‰Ā„ ¤P%¤ūČ@(h.o<Ú)žA<ČeJwÔL°dW­ØŪ~‚x“ŋŲßŅüF6Ļ.Ķnũį*ŊúŧĢPIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRŌ0āÛ pHYsb&2 tEXtComment2Aũ܆PIDAT™Ė1€0Ņe(()8ˆĨ8&Āāä$\™‚áøCņĘ]btžÁé8Få’f•]’œæÄ-›4™œ7Š+ęʁ/`=ĢÍŦĖ?ô‘fx(Č#ĮSIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üņ pHYsb&2 tEXtComment36úėWIDAT™}ĖĄ €0Ņ#HF`TžĢėŦR‚@˛BŲ A(?xōŽ;ˆ Q­ŧ`É‹H6[;lĩ͒ nܝ}m4Į­ūģŅŋāŊ_EžôuV;ŠH6›IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úė\IDAT™MĖą €0 DŅ‹((Q9)EJV2ĘŦāRR Ė!"Aņ\ųĸW"M€IÕŲe5"ļŽŠūcR#į .ŊŨ#ԅšđŽũ8?Ú*’3‘ ļ8ļđÉH<ž.úIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úė[IDAT™uĖą €0ÁERĨr!-\-¸Bäįc‚I^K㸁ËĒ킲Ãf§…qØbĢeŅ’7Ãˇ“w}ßoũŖÎ­Í­ėVr‡Ņ&ĄY”Đ šË8•“ŗ%IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment36úėQIDAT™5Ėą €0 DŅR¤ô%Ģ9ĸ`-ŗIFH™aŦŌ+Žø:\˜‰ąŅÁ@— ĸԆīøA4ˇpE™‰žâޏ-ũûü”FNīŦ>¨T%9§c°IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úėVIDAT™mÍą €0 DŅ(RzFå¤ Â*A,’(Š0‡(Ō ëuö7YÄ5‹sŅė*QšÛv‘‡Uķ~†¸cܝ|RÍú î…÷pˇ´ø÷Ēķ=9ł-/IENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment36úėRIDAT™mĘĄ €0@ŅOȁQK•Q¸Ļ‹” *„ŖE“<ųđĀ=R*0ؔh믑đL đHŸ×7WÜđōįėbf čŒ.Øúąũ.œâĩ ^IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úėYIDAT™mÍą €0CŅR¤dFÅEJV‚IČ))‡JGņNēÂ6‘Ä5ˆŅŦ›->ÅĪZÅaąÛbYÜvå/×č œ gĸũ¨(îJ/oãFĄÉÛŗÕr7‰œ“{IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úė]IDAT™uĖŊ €0Dá,R:‚Ŗ¸Ú…Ĩ#¸JĀE".`)(Æķ§ĩø¸ęgbō' úCÖcœE™Ŧˇ(ÎZŪ-Üŋ×îOɟõ‡[ˇÁŊč^Õų䎑Zą]ū•:œWø‘įIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úė]IDAT™mĖĄ €0EŅG*QXí%ˆĘŽĀ*eF ÁTĘ-XÄÉ?īęŦ*ëĀ.ŠĀHĨŗ2ÖÍj FëŽÖÅ­Ũđm쯿ĩ˙éĐʈô Ņōd•Ų:›câ8o:ĸzIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment36úėZIDAT™mÍą@@EŅk6ØPIZ{FJĐĘędK 3Ãøž!ÎĪîûœYlXÕ øBošˆņ5Í"KânŽO÷€ŨÂqx$ęō˜,K$÷xOŪRëߝXCĘ4ŽŗŪ<IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR%gʄī pHYsb&2 tEXtComment36úė[IDAT™MÍą Ā0CQ….=‚WšŅ ^LО†GH™"pų`)jN:尞Íēe]˜°BÂŪCÅĄjĢ!pŸeųzĢd(éäÔrũĖøąNö:}{Žüo~‰$>ĖŦRĪIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment36úė]IDAT™]Ė­€0DáÍ ”Dk됴†BDF0…ønÎėSL֙Ŧ&ĢĸHĘX9Sļæbmģ VtčŲāāoéŨU6a° "Q?åĪOˇŖ—ØëF˃•Gzá Em:bŠė¯#IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment36úėYIDAT™}Í!€0DŅO*ĢNRäJ%Ž7¨ŦhXƒDŧŦšŋD} Q­›`)b=íņÚí°IÜÖŊkß_ã´úÃÍÃ˛Ÿ¤,4š{ev'ôēž fb@€4„y`\Gū‚ÁN(Ÿ×$EIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR&ö|fˆ pHYsb&2 tEXtComment4¨žyŗOIDAT™mĖÁ €0 @ŗ ›d•n’Œ›´b>û¨nHX:ÉōÃđŽđ6ŧė™Ž`™îĐĄh;%EÍKĄ“ ˜Ū6ūÉúüøÛÂåŸGÂīĀ,KIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR%pč& pHYsb&2 tEXtComment4¨žyŗHIDAT™•ËŅ Ā иYWqíf.rÅülAšŊšđūđ!8ă…ÔWf¸mXÁ%Ũ š~MŸĶ2*vŌŌĩáÎŊøMũÚų==IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR%pč& pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙§žá˙ ūÄ ø71C=Ã?(ūÄ?@ØĄžáPŨ ~āø07õ40 ‚öŒķˆÁęROEX?ˆŠIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR$Jŋœ pHYsb&2 tEXtComment4¨žyŗ@IDAT™cø˙ãÃ˙uüŠq3Ô1üƒâ?@ü„ę>Õ=â‡@|ˆzP;ƒÂLâ0$đC†Į%ņÁIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment4¨žyŗBIDAT™cø˙‘á˙C0:ČđŋŒū12üŖ@tác#ÃįF†ĮŽd8Ąˆø¤ Ž 5Ā v.įŅžŧ“IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR%pč& pHYsb&2 tEXtComment4¨žyŗCIDAT™cø˙ã?Ã˙õ ˙@ņ(n€būÄ€ø‡?€ā@üˆ?øĪpˆÛ$240 F„šÄâ˙c5JsãtIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙˙Ã˙Ÿ@üˆņ(n€b†pø„ū1üĘâ@õĄø8ˇÅ˜˜L˙?`1fö4{°áĮ˙ž˜Y¸–ŋ7TIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙ãÃ˙u ˙ á@ÜÄ ü˙€°BÏūT÷Š?øĮpˆ˜PÔĖ|  cá?ū•Iė.đÜvIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment4¨žyŗPIDAT™cø˙ņÃ˙@üˆ@q3@0ūa‡ ?€ō?ø3?âį@|ūā?†~ ŨßĀÆĀĀĀĀ ū7ÔAĖ:€ƒåĐ0Hüã?cRtĩ¸€œIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment4¨žyŗCIDAT™cø˙įÃ˙@üĄ‚Ų ¸ˆ ˙$ücøÂ@uÔ1<âĮ@|ŠPÁ˙P3Qpü<įQÆU$m0IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ߙI%OIDAT™uĖģ@`Dáķ@¨•[háę@(0Žõˆ Á—ėĖršÂNDŠųåÜĸąÚ*+Æmķ/‹Įō!t™FQüÅ ÜĸęuŊ4=6áĢŽtIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR&åĢ&| pHYsb&2 tEXtComment5ߙI%GIDAT™mĖą €@Ņ‘ ތ+õ>ؘb`kßĖlÅÃLá…Ã`cqņĘáôė¨ĄŠ šĐčxyΏ¯ė3Q B#:›o€62 Đ;2IENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ߙI%PIDAT™mĖ1 €0DŅ/–ÁŖ:×ÚŖä›Â:b„¯˜O6¸€6¨ŸåĪj‹Í6‰āUú/ŅyĖڕAˆC˙q7ĩšŗ‹3u†Č:pŧ“eIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ߙI%PIDAT™]Ėą €0CQ# JF`U3AV ›„  ŖĘ僐‘îUg[Q­¸$îqtÎđĪū*ˇF éXŧĨįĪfĨ• }ąŖŲ2›9Ü9b?šeü°7IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment5ߙI%TIDAT™]Ėą €@ƒá_,,ÁQ\-nvNā '.p`c!Db.üyĄÁĮųá#aŊtŌJ# ˛%ék•WÆ×.+ąĖõ@1i⠂Ļ?å˛ņīâIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR%gʄī pHYsb&2 tEXtComment5ߙI%UIDAT™MĖ1 €0ƒá_:ēēyŊ™õfī(zƒēU(ÔH_ÁáH(3šüSâF­ÆãnIŨ*“Œ2MF›owēä˛ë9õ2Âa ‚č/.ęw{ACKdŌ~IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR%c?TŌ pHYsb&2 tEXtComment5ߙI%GIDAT™UĘģ €0†Ņ/X¤ĖŽâj‚‹ŨLâ/.RĢ›Nyx |h¸^n˙Q“°ˆ-BĪŪŽĄLš2įŦėŲ+V0e[ĘmÄIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment5ߙI%OIDAT™cø˙ƒˆPđ(ūøŋá'Fà ņō@ĖÄĖ@ĖÁū7ņ†˙€ø6 ”Å€ú€æ0đŲö`ķ9?ŌFRnŋIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR%c?TŌ pHYsb&2 tEXtComment5ߙI%JIDAT™]ÂĄ €0†Ņ¯Š@vFélXëƒp [‰â'š/u.čāßĖŠ˙CxÅ 6`9&î„&dŅß-ŽhC s*ˆ]æč1Īáâ%ųIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment5ߙI%NIDAT™mĖą €0CŅ((™‡éb‰X1Ų %E¤‹9QĻx•åO ]ŧ@˙Õ$ę%ZŦÕb§ļÛĻü ™#Н|ģ5ņÜ˙q÷T4éz?q;{4IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸfIDAT™uÍą „@CŅ˜‰ô$Ą(*8͉ƖNļ„ Ŧ†āB‚X–l"œDKՈ˛ˆ>âšE{Ŧĸūe.Ų6œ˙Lø×đ0~cnž9˛?:œŨ(2ę>Ņxlų*bĐ §8<ŒšĀüIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment6FŸeIDAT™mÍŊ Ã0„áרāFY$Å QČbĘ&ęŌēTqčķŲuЧģb,Dˇf5EÄ$Æ,tũtûĶ^ĸ~ĸō°Lɉ2īX æ(}.\™¯ŗÕļ%votoųXu¤˙>NĘo°æIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment6FŸdIDAT™eÍą ƒ0ᓑœÎl›ĩ¨ˆÅ›x—ÖûcH:Нēâ"Ē•&'d ÚuŽŋœÚ;įøSŪÍĮɗ֌Ĩ°9aŲ. ė7č´>ė˙~xĀj$Ī‘BâdĸrŋŋÎ@J¤{.IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment6FŸfIDAT™mĖą €@ƒá_l\@pÁUÁ\L7š,¯÷|‚v_’`ĨÁ˛K;F, ĢEi…:‘qM"mÎÄņŠÔ )P‚ēĩ‚ę"ҜŒ%ÉGrY&íöJĒŗNÆA°ûJŒÂ[…S0{ķļü9°ÂĮũ:VZntī\æˇ/_M=côæ\ŽIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR$Jŋœ pHYsb&2 tEXtComment6FŸ`IDAT™]Íą@0@Ņ'ΉŽ XÁÖRą›dĨ"į?tŠÛž‡ĒGŗC“9z4,(‚4B6wgáš>iŽ‚ĸ'Œ-aņlZ8j&üÄ×ūrÆsŠ'™knš­“ąo%L=ƒgpË.IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸeIDAT™}Ėą ADŅ/ˇ°É ,؈`c‚ļĨl`n0Ü8׀ÁËf>öOļ˙ļIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment6FŸgIDAT™eÍ1 ƒPEŅ+ų`#d7"¸Ĩ, āH ˇõŨ‰K°´x8yąĩ8Ũ›;dRļudČg#ÔÚSŊØG›Äf5ŋāEŧ;â,4î<.XĐŪĀ÷R˜Ŋ_ũŗúvwãāãĸČE?w<#ōšŽIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment6FŸkIDAT™]Íą ƒ0EŅ HĻs6€M`˜, ‚Ŗ,f*Öđ.)Ŧ÷ķ“(MŠS]é=ĖÖzŦēą,ŦÜ(ÚEœķW]EŲÜUd7šHj¤ž‡ŊÁ`écüķôūŗ+ĪHšMTßĒÜņGėĐ †°@FßdÆCIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment6FŸaIDAT™eĖ!Ã0CŅ_tŦ´Ŧ×(ëĩƖiËQr„Bƒ(žĨ‚Įė]°Ā-ꁋđ$Æ,ú*´‹+Ú/QũS˛)ēŠ"DÍD› œŖs<9­wöQ&Yœē‰naŘ六vd>_Ia—ū‘ŽßÎŪOũâ™ú¨ÚØĩ×:˙N7č_ã$CIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment6FŸiIDAT™=ĖÁ ƒ0DŅ[27ŌtBZI%ā(uQŠKđŅk' ‰rxú‡‘iG= ęJByAŠFŒvwŗQn3Š÷8ųžYŨtĄ%n=-õ5(˙āÂßûd‰—;ÚHyNTš˙Y´4Ô9iž=*IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment6FŸ_IDAT™mĘą €0@Ņ/Ō\@p\,`ÄÅâ&!ĨőķÔÖâuU‡ŠŠĻ4 ē›^h^¸3 uĘöÉjx,$):öfúWÂ˙‚ãå8íg ”9Pšˆ´Nnßā=aJîæģIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment6FŸnIDAT™mÍ1 ƒ@„á_Ō,äB."xĨ@Č[e*¯ąGØŌⱓˇÚĻøĒf6¤y( åŲ„:§öŽ?ķu+sø89ė Ž1…[V:A1´lŋæũŨų(ąq˛PcS‡˙WÚ@€;7ĩIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment71—( [IDAT™5ÅÁ €0 Fá˙Pđ"tĄ‹.&XđāŽq‘¸āÅC0FĶ>øx¸TĀ ž? æ‰;ŦÜCc!ŽĖfv3›Å4î‰ų$Á] ‚ŗāÉQĨîPy6ĪI|wdIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( SIDAT™EÃ1€ ĐŋéÆĘÆ5ܸ–›&. ÂEØ\;v0VhIxÉÃ#Œ"7€S¯đpäxĶÂ;„z†Ô6ĨŊÆÅ~íëf–ĸ­ũa“Ø<˙zîKÁ4sUŖIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( OIDAT™cxūŋáCų ō? ę0üáū?€âƒPÜ ÅĖ@ĖÁ˙@˜‚˙ČCđ(ū`ÅõĀđ~Á2ƒI bģ1IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( ZIDAT™5Î1@0НQĐiuš†Îĩt“Ü$ÆčļČø6Dņú‡Ãˆũ"<𚠠‘męāRMŒãį$,Ę.AYĨ*jâ–ÔŽ`6įo"ĸøĖ>!_ŒƒJSÂÉčIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment71—( XIDAT™EÍĄ €0ĐA `$6€ÁZ%,ԁũ˛ĸá8čÄ͇Ąx3ŋÔšƒ3’ÆYDŗĢÅŦĒ"ŽÚ8"?z"Nz~¤đjSQÂô-PšR3-IENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( XIDAT™UÃĄ €0ĐīĀaëXĮZ8pHF`°@ë~…ãJ+ĘKT‰ËnĀī„Ú:,â°JũPƄú<ØĶîÅŲVéĶä-!qO0 _<4 öVžzzSaĸ­jŽIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( [IDAT™EÃą € ĐßYĘŦĀŦäšXXē„E0.p%áüŖ/yPÜ`Øžg5°ÍÁW­ ´°Č˜ųâȉw>ŪĪ‚Ö[AíŊ °Ŧ˙ŦcāøN*ė}Oú)ސIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( UIDAT™MÎą €0 Ņ(B—6kĐą0+e”Œ:!Ɩ-ÄI¯?ÜL(Ā'‹VhbO¸Z+ZĀUmāâ2™Ķ b4=˜ĻĸĄŲÔõgwōō0Ŋ,xG›nƒ—ÕIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( PIDAT™EÄą €0 Ā߀lØ +ątŦ”E@)h]ψ0ļ ¸ÃŠ‚ ŧ–Oāą4!‘61U*nuƒšQĐ]KFæßŽ&ĶæŠšVÖM'/GŅIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( RIDAT™EÃÁ € DŅņäQ; ;°%;PâÁ契 ė‘ƒq ?˙ÁoĪZ#ēs‚KffŠČĶ^ÔWƒāũ9ÁCÉĖ…ŦÍe´ˆtĢ|iļFEIúîIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment71—( VIDAT™UÃÁ €0 Đ<ļt\É ,8˜vKČą`1F’|đP˜P"pBG x ŗ‡k‚<ę î‰tļIîv´ŽđČtí}7}ņ–7Ķ Ņ MˆĪî˜KIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( YIDAT™EÃą €0ĐߙÎÖNĮ°ËZv öΤ¸H‚ ,ŧ"xūx‚.Ŧßéí°tmn¸‡gÍT8‰ yãgŽūwmskÅÛTŽ6”jã÷Ty@ņPGÖ~×0IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment71—( XIDAT™cxū˙Ãc ~ĀĀĀp 7q˙?y Ū˙Į€á˙.€ā ø?âƒ@Ü Åėü‚˙Č#đ{ūÂõ@ ´ûâ‡Püų˙^ÎP9ũû ‡IENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( SIDAT™cøū˙ÃC >ĀĀÄ pÜäƒp˙ ~ žÄ˙X@qÃ˙@üā„âf(f‡āüüG‚ØCđŽ˙Áđ„˙#đCųąOGĸåŗIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( VIDAT™5Æ!€0Āuā°¸~Įˇp x ž [šĸĄÜq‡˜dp"Š 5&ā9Đ"dÕaå€ĸÍåĸ›Å"*âiLVā¯'’ÍYĖîĸ; _a¸O?”Í|ŗIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment8Ą(5˜\IDAT™Mą €0 Ĩ dVÉ*l”‚ĩ^Ę"aƒ”.Â$Bĸ¸ę}gîUXuĨ‰l‘|ŊĀá,Î܉Lž%ŋI›P4÷ŒÁ™"E›ģöy˙ŊŊ{Guü´Y}3žNÕIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜]IDAT™eą €0 /J‘5ö+ÚiĖ÷O—yŒ5`˛fáIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜`IDAT™-Œą Ā0 ?¸p™4šF1¸p™•d˛ˆFPé„ŧ#N ĐfvÄáXsģĸ†ĸ Á5į&ķŽC?J8Œ˙–h¤ß ,”[Ѝŋ.lynž;l5ŌŲ1ĨOw$Ü4V&ęõiIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment8Ą(5˜\IDAT™Uą €0 ĨpÉd4ĸ`-K,ō#¸L‘‚)ÅɅĪg4#¸bĮE‡eÅÚūXs”$Ęū Š™˜Ž;*NĘOčNô{;ÚĢœSžņ V3‘k‘€5IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment8Ą(5˜^IDAT™Eą Ā0 ?¨đÍ#dYKŲÄŲ@Ĩ ō  ņĮã)ž ä*ē+Κ(I|đŌŧĸíĖĻ#„ÛéNēÅmŠË>I€îDū;Œ9Ãę/…2”>đ=IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜ZIDAT™=ĖÁ €0 Fá'9tŽ–Q”\Ģâ"ÁcEü+"áģ„ŧ0J„Æ9.įĖĘ>&(ŋŠiŋĨŗēčē/jäbōWPé1ī ‰Šĩ[ũĮô§Iן¨ęԧŰq0Ŋŧ¤ĩ*IENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR%ãOĢ pHYsb&2 tEXtComment9Ö/eIDAT™mÍą €0 DŅORÂa“ĖEˆÅÂ&!eŠČÆt¯9ëÎč%tH%P։Ü=ˇxNu.=ŧų{?ōlÃŲ–Cđh˙h“ h5%ĸ9ĄVÔÁūB›…ē˜]!š?A7D YIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/lIDAT™MÍÁ Â@Dáģ$—ØHŠą  )Ā–ö”:b{ĖaČī *>˜Ķâ!ÄDcdģ ÔŊ°¨ŽüÖĮîŋXlVĻ^ŗ;ÅŊBtļÚ>|ŒD›ˆÍĒˆŲ’ŋ{ŅNĸží&žĄK<Í7–†IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/gIDAT™-Íą Ä0ƒá˙ȃ4†[ p+d€Ā-æ"æķ(!e aŸR|THôˇ8™ÆB%Qsĸ((=˜ÆÛīœw×ágÅĒ ­áđZ0tI…qÚąYf41v{ MūžEûØW|b:Õz ĶIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/aIDAT™eĖą €@ƒá_lpÁUÄBq1ŨäF¸Ō"Ü3jiņ$ÄÅHf Šã, {|ę€öĩūėî[Cf5Dgūú Äey´…H"<ˆJ”ZäV¤^“3tÂî>ĩėYûIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/bIDAT™mÍĄ €@DŅO‡BŸŖ m!!4 G\X&!A!žŲėū%ZQ3…Ė^3GíØnhŌgų›­ŪŨ+žĮ܃čÍķp+”_×H”ųĩˆhÄí˙Jĸ 6‰3ôLĢ=éŒ}…IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment9Ö/jIDAT™MÍą Â@DŅn…$p)–h‹ā‚ŗÜؕrD¤ŒXF@@đ˛Ņō)t•…qŸéē°*X_AI~“•?ÛŪAŗ^aî„{AžÍ­¯™›ŦđqIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/aIDAT™uÍŊ € Eác°$q×°p0 1.†›ā”/<ņ¯´øē›sŅF<G,ŠXļŌ˛(7Ŗá×únbŠ&HP;Ô^‹ĘĮ>‡æËˆFáú.Fȝújv•Üp?ŲĢЕLIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment9Ö/gIDAT™=ĖÁ Â0ƒáŸT ˇ˛AG)kq@¨‹Ĩ›d„s¨ü0"BÖ'ųb‡øædĨŗĐ˜ŠLQæPbŸ)ļŋˇíÃ&(O¨āä¯„r&4œÖg[ˆļÕʋđPŅ'ŅŽvsŋëBj>Nö´ō˜IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/dIDAT™]Ė1 ƒPŅ?؈+d#‚Û˛°Ptaq'o –Ŋ†T)N3ÅPI.f‚ČGvl*?;Ú?OÛž`ĩŖBLpRü*Ôž j~ÉO]3ú$Z­I˛MâmŖ)oÍĒ@Ĩ×ā[ IENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment9Ö/fIDAT™mÎą ƒ0DᇑœŽČ"ˆš¨TŦåQ<‚ĶQ ˙r!mНŧ§CGpuÁÉJcĻ2R§™]™N‰ūļũÁÍs6+‹‘ÜHî%DF××đsZmFuE%ĐnŊ?<‚ö´WđV|Ŋ„>Õq™Ŧ×IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/gIDAT™UÍ1 1„á_|&¸ØŖ,x1Ae/ļŪ$āRZ yNė,žf`fĐItDcŖõ•—*û°Ŧ” –ėņ§8›öi„{áđV0.•ĶJĘ>ĶFvk7ų´ŗÅߋ]ÅqīÔØ@rÁ? ŪIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment9Ö/hIDAT™]Ė1 ƒ@Dá 6Brņ @đb) ^lSå{ˇü Vaøš)ūŠļ“•üœHeâŖ‘Ŗötn¸í Ú„w…¤°@ =žCąnŅõŲŦ8ŋp ģp'Ę ō#lÁâ˛~ŽŗAĻŠn:IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment9Ö/bIDAT™MĖą ƒ0DᇐbF c wYËeĸŦ›xĘ+,ŋ•†âkžN‡'Ņ(\dĒ2g[ųõ%@ōĶįáßö0vgƒ#CúkÁņá6ŦXCÆWÁ5Âß0‹ž„6QßÁēmž=˞ë&IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set09.pa000066400000000000000000000756361506303110300215740ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR'Îkk pHYsb&2 tEXtComment0¯ķŊĒOIDAT™mÍģ €0 EŅ+šHÉlÂlĪĘb%#¤¤@˜XBĸĄ9Õû¤8ŲŤ‰‰¸ž.zJ´ŒãĢH/ŧjǁ8ėlâĒŖē|sa0„¤ĐŗlIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRjĘ` pHYsb&2 tEXtComment0¯ķŊĒZIDAT™MÍą €0 DŅ‹((ŲFÉh9‰ÅąˆŲ %â°B4O×øę"ÄL\Xˆ#Ņ1–“SQeD“áaûŅ_Öoĩ` Sŧ7§({ôÄô>R-ŽÄž>ÂešIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRĨÍ pHYsb&2 tEXtComment0¯ķŊĒXIDAT™mą €0ČR¤dA"“Ą Öēl’()ĪĨ¤qugķ°ˆ›I\Dq2ˆ BĢ#[NlĻÄn‚`ĩ#ūāč;ų#ģĀ\Ĩųķ…fŽ­1ļš'­˜^OX4d˙dVIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRĸ–Î pHYsb&2 tEXtComment0¯ķŊĒHIDAT™uÍą€0 ÁBZ JÃĸ3•ĸų-yH 6ü{¤âf°ķ˛-ˆ7ÃXzÔyi‘œ8mmĢSŊÁė"ŋ&<¸3ĒŪ°A|IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRPĶđ pHYsb&2 tEXtComment0¯ķŊĒQIDAT™]Ėą €0Áĩ>øÉ%¸$Jˍ™NL„ˆã"‚‰î´(‰›…‹ÂIfLN—ŅÔ0U\{ä˙Xh:¨ņ۔čŗK´J4WôōX).DqŪIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRŧ_)} pHYsb&2 tEXtComment0¯ķŊĒUIDAT™uÎą€0 @q”ŒĀ&ŦåXĖlâ(S!ls”4_Y’!‰ƒ1°–d&ŧMÄ)&FtpŧøßIĪ3k{´xöUimԚ؂ú xHå?JĢ3š¯IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRė’¸Î pHYsb&2 tEXtComment0¯ķŊĒPIDAT™}Íą€ Ņu0Ķ,ÅÆ >c`[W %Xà Ļ&/ÜÅqQØÄÍ"2QØu§§Ž‰Ë3Äôaƒä-`GO­a”ßGaĩ}'81ũƒnvb`#:VĸĨh¨ĘÄŠâ4"8Qũ?|Å<ɓJ-F˛TƒE/Ī˙&Š/rÖ6&$ø:°IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRJmĸÆ pHYsb&2 tEXtComment0¯ķŊĒUIDAT™mÍģ€0 Pq)2ŖāÍāŽ‚ĩÄ&’"‡QbJšWéƒāL<¨ÄB\˜: ŧ‰3h {8’ŌŠ?_ĒŅelšZ5ę9?ŽDƒ~‹Pđ¤Ģ;ô|ĸIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRĄZÅ pHYsb&2 tEXtComment0¯ķŊĒRIDAT™eÎą Ā @G „Q1ĘbŒÂ”T1oŌ¤šęm?$j‰¸ˆŽĶDģAÔ\5€Ļ¨˙x>Ę> VbgŖĘ}Ģy˜×Cb⃠<sc˜IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRČ U pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĪđŸáƒ<Ã~† ė j˜ūgdhūˆņv0ūĮüPēˆAō ĩ˙72<¨gfø`Ã6ëƒ=Đä˙ôŨ+ b ŒTIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRŒ/$ pHYsb&2 tEXtComment0¯ķŊĒ\IDAT™MÍŊ € †á×8nĀ ”FVrQáĘ3!9cAķTßö˜`wpX…ī„äļҊ Ô1…j}ĻM蟓<ˆ^ÛCM8ĮhaņŖęGĻŲ1“¤8<4đ…KIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR…ÄĄ^ pHYsb&2 tEXtComment0¯ķŊĒQIDAT™Mą €0ÄRd Ab´ąX"ųRR Ž'ĸ ps–|HBÛĘÍĖIĸOˁĒBSåą:éGüx÷âž9U [nFëōĻČøĮ1Ļ1Āä:–ĸIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRJmĸÆ pHYsb&2 tEXtComment0¯ķŊĒTIDAT™uŽą €0 /JAÉHd3ÂfĪ&!%ÂäÉēĘž3ą‡¸XÄÁ,:“hd# 1ĻF-l!Ŗr4úŪ•BōE ÁŠUé3?Ķĩp×ܡ7ߏJ!RIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRy-ŗė pHYsb&2 tEXtComment1Øô<3IDAT™cø˙‡á C`axĀÃđ@Œl>€” A<T|Y/Æ˙QīĶ5žÃ×IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment1Øô<-IDAT™cø˙áC11<`bøĀF| ô/*Ē?ĀFL ˙˙Ęj_`}mjIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<IDAT™ch`@€† Ą$Ā€ĒĄųąÃ-ōIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ĪÉé pHYsb&2 tEXtComment1Øô<0IDAT™cøđ€A(0IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment1Øô<+IDAT™cxüĄ‰Ą„00<ācø G,zĀÆp€ Ŧ‰áÃ˙Ölu=Ö(IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR ŧūų] pHYsb&2 tEXtComment1Øô<IDAT™cxÜĀp°ĄŒ€ŲtÁĨ€*aë;!ŋjIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR •:ž pHYsb&2 tEXtComment1Øô<IDAT™c`@ Āč=@Bq°˛¸F@uúAIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<&IDAT™c8`ĀĐ ĀĀ "Čĸh¨Cˆ€ŠaāˆsķšIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR •:ž pHYsb&2 tEXtComment1Øô<IDAT™c8 Ā @îƒč5(€ÔCAʆÁb'(IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR Âי\ pHYsb&2 tEXtComment1Øô<(IDAT™cøhÁp€†$X€Đ‡ ˛@GPƒü``øĮāύR^§ûIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<#IDAT™c``€"† ô7‚Ë0`h`@€ ˙ /Æ0ĸ;~IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ëWQ€ pHYsb&2 tEXtComment1Øô<!IDAT™c8x€ĀčĀ(zF`$ĻxL#H¯Â|"ŦLĖšIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment2Aũ܆LIDAT™%Ëą €@DŅ/–a)^i†ļ4v˛ ëŽËđ`&܅ŸâE ŅJqŒâŋ†[ŠĪzXâģŠg6‹ĖžĻrģ>` +q”nŠRIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aũ܆KIDAT™%Ëą €0CŅ(RŒ­†€•D#¨0Č.×ęQ<–] R"oëŋÍņžĸî1~31-úVt0k(,ĒIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment2Aũ܆@IDAT™cøÁĪđ€™á#C°70đ`?Āđˆū72ügdøĮĖđ‡Ÿá‡=Çz†˙ŠAˆ‡Î%øØ‘IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aũ܆JIDAT™5Ėą €0 DŅoQPÂY%Ŗ‘Ín”Œ@™%Qõ\œ|Ļíĸ†øæ"„—cŽ%)3&1ŠmĸûāIĸY=q›ŲũÉŋîĐ Âđū¯¨ÎđIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR’æ1— pHYsb&2 tEXtComment2Aũ܆NIDAT™=ĖÁ €@ DŅ` –â–ļāaļ;ą{ãEÂ#CŸ‚cÁN&UX<šV寐äĻ\cpÚŅg;ÜĪT{^ß_Æ lĩ+‚ŌJČÎIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment2Aũ܆KIDAT™MĖą€ CŅoEÉŒJŦ\ ÎEœĀŖ¤āĀx6&÷ʄ™D âÚDąˇX(-YļUÄĒvÚ!fÃ۞Ŋ]ĸØŋ|?wв> ĶūŌŲÁIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment2Aũ܆JIDAT™EËĄ €0á#ˆŽÁ8V{I’•ÚM:BeáīÄįîˆĪ*nDˇĢ˛vY|šˆjŲ’ßMŒÃīūŋz•ÅMhČ&_ ōIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aũ܆NIDAT™-Ë1 €0DŅ/–Á›Ę KāUâMrƒ¤L!ރ¸đĻøôQ4Dą $ŋŊXƒÃN īČ".ÛlĪ,îÅíŠ[žVü7ˆzÄŪP…øIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aũ܆FIDAT™cøÃŪĀđąáCà ÉĀĐ d´?``čâų@ü†40üobf ęû#ßĀđˆØ0ĀõÂ@C¸¯ĀË7?[IENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment2Aũ܆GIDAT™-ĖÁ €0 ÁEy䙒9*Ą•”’( Â9p,%?ÖĖ*žC D˙áS}4ģħ‹¸ļ"Ū&æé>ÜGļYoūĢĸLN¤]9ÃHIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment2Aũ܆DIDAT™cøoĪđá3ÃFFæū ōę0üĸƒ`ÔĖđŋá??ßz†˙ūg8ü™ĄŦŠ˜ŸE/‡@>RIENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aũ܆>IDAT™]Ëą @< ˌā$îÆh)Ĩ•‘;S ÷ :áM@õĨ‹90K:‘íRû3ˆmDLũëųiŧq„Ū‚{>IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRû°( pHYsb&2 tEXtComment2Aũ܆QIDAT™UËĄ €@Ņ!$%p•P˕…¤ZšäؐÂgŠLžĸg#ä˛%ŠÕĢ`SbˇxeĸØ"ĸw'ŽÁīčoú>~23zÆŊ#UVEŸoIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment2Aũ܆?IDAT™-Ęą Ā ÅPSQ2Ŗ&ŌŦb‘!é!°^iFâ‹x ‚Ŋ”JöMGCJĖĖxø…kΎqēDë~dWIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRļx‰ pHYsb&2 tEXtComment2Aũ܆UIDAT™UĖą €@DŅ/†ÚWڕrb`hKWʀ \h ˇf.<˜e™%Ņ™FrâS­ØæeˇŖÁiĄDÔl"|ėŖģ“¸gŅVQ­,üĻøwŊô's%N–XŧËIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment36úėVIDAT™UĖą €0 DŅ“R¤d…ŒæQ`V‰Ä"Î.SÅ|”ŠâI.üOyš–\SĻPãB4 äü˜2|xPhĘî]Ōd?˜7vjlÅMĸ;ŅŲđę/…:w?ĘiIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úė_IDAT™UÎą Ā DŅRĀŒÂh”l•Č&ŌÂ9”&)ždŲ>Ëøe8Æĸ2)Ē ƒü˙玂÷­âM”[Ę,í;Is´+&ķīT/Ęa‰0ô Ę6Ũčrũí&Õ:íė’íIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment36úė\IDAT™EĖą € „á3”0ŠŖ1Nâ*ŒōŒ \Iax†Äâëū;x$ÆFtPėŗŖÉe;nq+ áMŽEģŠāQī5ĢœK˙’zFdFĐ'ĒhW'ũX ˜øĪ<’›<Ø˛IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment36úė[IDAT™eÍË € EŅgh€R(É(ãÂēė;˜å$ņÜš8Éd>oÔwĶ#SS–+QÅi…EŨč–>YŊšú…4Đ/Ė+ģŽŠũƒG-äūn+ėŪé>V2˛¸{IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment36úė]IDAT™EÍą€0 @)!Ŗd´æX *ր \ĻđE(Ā]Šo,[ā!VŅQX^ éã Ø†ü+RA×Í=o eĻŊ+)—öé”MķaU§y†éį.ŽĒęb7Nė˜éMŊ wôŦ†ú—ĩtl%ļf‡Ä‹čŽl”äré;ežũ|/IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment36úėbIDAT™=Íą € FáŸPв+0#°‰Ģ0 Vļgl(øŖš|ŧ;­`šŪ4œŠË˜ŦϤ֒KZŋ ĶēpãŨ¤›4“f•ČtŊÆ'jGčāŨŗÛÕ$ŅTŽ6võÍĒĶ@Ûüo,…IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment36úėdIDAT™EË €0GČŅ,Åĸ, ‡ØYĀF,!Į–<Ÿđ0,Ë2ŗHĘMf°,™Fĸmž}F}ųXQËč´S?īvdG5ųn‚—ņs˜}$öH7‹ÛÕ^õßĶ>šĨ¸ˆ‰A´geLhIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úė_IDAT™UÍą €0CŅĨa„Œ’ŅR"ąTŦbĐ]å0( ÅĢÎ>ã—áŗŅ)42FúÔWMܖpËCÁĢōį°Iu]y?&ŨÅųë°ËŌ ļ‰ č/ęĖÚ\Õ?´jŅ\×?Å?‡pÍIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment36úėXIDAT™UÍą €0 DŅCYÃŖy$`%:Ö°”BGžĄĸx’‹ģŗÆēęrĩ—)šŠb¤ËÜ8Qq {Svä"ķ"‹ūˇĄtû°77×ÂĪ~”xčz=ũ@ļŧ¨IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment36úėZIDAT™5Ëą Ā0Ā/=‚ĮHéŅ(Éf–˛RpILŪ‰#t ˙Žė ‰Š‰‚ø$ucĮ…Ø_ū•šą;œb›Ÿ›ÎWI…ĸĄ“AāŧŧüúÛ@līĢ)IENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úėaIDAT™UÍą €0 DŅ(HG›Q2ZJ:֊Ä"F,ŌÂé(ž\Øw&&įĄr‹SčbdĖ2gĪ\C!ŦЧ2˛ŽlŅÔMKÚK‡đŋ]OĖž™ÕE+lúŲÄÔŅŋŽÕ_1>0ČJT`IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment36úėYIDAT™EĖą € EŅG,(UŅž¸Â7ļØQžĪHbqĘ{1"ŅÃĮ@l…¨Fx“KŠrĘ>%â톚ĄÆ‘á& đ>ŨŋÔ3V‰˛čô, A=,ņ›‚?Æ,Æ|IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úė_IDAT™EÍš €0DŅoā\ åP!mA'σ 7°XƀDđ˛9ˆŨš˜hâŒLífąĖ)á]!l"ęBūJŊģ¨[D™U e?íˇÉđČ$í%+ ĪUũ]ĪU[mô ø:1TÃVIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úėaIDAT™EÍą€ FáĮYČŒÂh–:+9 n@g øį(,ž*y ~ƒ—ŠQčdZ°é–Į zÅÛ&†’ÔĻŲĩÁ¯Ŧ9Úû˛†žY$ĩWũŨÕīúŪtËû} ;į„:_ IENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙āÃ˙ÜÅ  ˙ øBτ †@uø!âã@ÜÄũØ0 €˙8ū?¨ €ĄA-kYõ°IENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗKIDAT™cø˙ĄŽá˙;†˙€ø7@1CÃ?¨cøcPĮđŖ ŽáÃ~楸ˆŲ˜™0AĖ|P‡Û!ä@ö˙øuÅ?ĀÅÜIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙÷Ã˙ \Įđ˙@ vlPĮđĪˆ+ęūÕũâĪ@üˆŸņq(nĀ€˜€æÚAĖĶ8đĪĨC.ÅIíIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment4¨žyŗSIDAT™UÍą€ DŅ?†Œ\ V`M–@iŌɕ@HĀpŽ#/üģD ĸD3ĸŠO—ä cL]ÚfÔ]NÃÕyMÉž’á§°h7ŊÚĮūž˙7åņ:FGfIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR%Ÿ* pHYsb&2 tEXtComment4¨žyŗYIDAT™UÎ!€@PƒŅjķļŊ’ŅČŅ8 G nØųp`˜~€OîÉĮô-0 ‰ŽPđ‚‘ô#°Éž@ā(ßļÎˏ.•ΐhÚø”FDų!ĢeIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗKIDAT™cø˙Ŗ†á˙†˙ ø7€0PŽĄ†áŸA à ލaøÄ>Ô0|â‡@|ˆq;Ŗˆšj° &ūQü[=GKŸĖˇIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR$Jŋœ pHYsb&2 tEXtComment4¨žyŗSIDAT™MÍą Ā @+eF`†L™˜ b4˛ #P~Ūą”—ĀŌ•ļA:8Đnpä_—&5 Ãà 㒒ŅÕiōŽIV*íĨĩŊŗÍÔ?ũœŽ:ÍEtķŌIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment4¨žyŗGIDAT™cø˙Āžá˙(n€b{†Püˆq=Çõ ø!ū`ĪĐÄÍ@ūb{üøG=-63ŠCōbQIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙ŖŽŒ?Ø1üÄ ¸ŠėūYÔ1ü̍cøSPĮđãCÃG ~ へ8ˇqķ%dđ˙ÄL¸ųXđ:zÖ>(øNöjIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR#Ļą÷; pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙Įžá˙y~Å€¸Šäū1؃ņV°gøÄ €¸ÂžáÁ{†‡ėqķE†Tp€hļ=¸]â8ōƒ3IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR#Isœ pHYsb&2 tEXtComment4¨žyŗ[IDAT™eÍÁ Ā Дā;ˆābŌÍÅ<æ Ú˙ M…đø$đ#ke•5#éÜ5§:JĖŒŒô‚ĒVÚ•\DmÂqôÜßođ§×Ŧ7‚iL%4ÂŪIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žyŗQIDAT™mÍą €0CŅ?]Ö ģĩ(ƒXŒŽ5‚Xē+ĸ†&Xz…›hFÔD¸œEVÉBĸaÔQ&Ãn\˛Ë!›,>0ČôdõwĪ>ēŠ;*Ī/L8IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žyŗRIDAT™5ÍĄĀ EŅĢ‹­ËuŦTYÉh…pā†ÄĩīÁ,Ã:/J°æjWc:ũdčĩ´‡Q•!ĶM(H?qoKĢģõ-žÃ˙fāP8†¯K IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR$Ŧ–WJ pHYsb&2 tEXtComment5ߙI%VIDAT™uĖ!€0DŅi**9WéÕ8WšŖ,A`×ĩĸÉ2¤ĻņÜĪGŒŠđ ʰD\A´Å#ˇØ&y6Ž6¨‡} ēŒg¯(’8Œ`š//DßųŪDE&ņ#8ĀIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR#ĩfˇĪ pHYsb&2 tEXtComment5ߙI%OIDAT™eËą €0ÁEē—j pKDîžÉ°D„4Úč5.#füŗŊĶEĶÛ*–‚'ÜÆ`B+rÃų䃴afx^™(7U,,tÜIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment5ߙI%VIDAT™mĖą €0 DŅC)Rf„ŦâŅ`VšQ‚XĀt."™ĸ  xŨ×GNCđ‡Ŋˆ+‰ķãŅĨI‘EÔ% 9DƒÔ(įÃ.- 5ˆâÄFbՃ•đÎâ›?` ÖIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment5ߙI%UIDAT™]Îą Ā @Ŗi… ˛# eQFp: $Įŧ¨Đë*˙[‰Đ,˜(Ą‚aķīĀÛ.Kô>ãFÍz˜ Đ8åČ^K,eĢhîéĢīņ?â,[DØĶÎxxIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment5ߙI%VIDAT™MĖŅ €0 Đ ũđŗ#8ŠŖyŖu”ˆ øYAˆWRČû8Čâ!âtđ“GįdäļI•"–ŋˇzŅDcë×'ĘU)NX# >-ˇ|%úÎ)&:ÕU@ŸIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR%ˆīŅ pHYsb&2 tEXtComment5ߙI%VIDAT™]Ėģ €0PG”ŦM˛Ę‰Åeo@ččŽË dŊÎ6ė"ZÔåt:F”I“[Ũ26oĮaęXũ‹Ũé #v ‚ āû&‡ņĮ¸)=å*¯ÅdIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment5ߙI%`IDAT™UĖą €0 DŅR¤Í(Ų€•!Ŗe,ą€ËHæh(ž,YēO„w!†XÁ)ØRébâ\ņgSvú&LĮÚDS§ŋ­Å'žû:õĪVÉŊ’ZmQĩZRKŨąûĶ(Bč(×AIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment5ߙI%RIDAT™uĖą €0 DŅ2+x4’ XÉŖ˜ BGd‘‚^wú\&ûpŽHŽzíS6YD{>Ս IQ¤Î?Æ&m8-ÂéjtĩBÍąæ €ģ<¯}'ÎIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR#ą“gō pHYsb&2 tEXtComment5ߙI%UIDAT™]ÍŊ Ā ā‹”!̏™n•n”)ŌZZĪ!BНģxO¨H°axœx,<%Š23ë%ÁMĒ´ [ßnũm‰F@Ũ֖]DËÆ?ųYrÔIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment5ߙI%KIDAT™cø˙¸á#3 a ˙á˙†ĮPüJâü@Ė ÄŒu˙ņūAŗÕ1?h```„āfˆ™ä~üoaĢ>ã˙ĒIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment5ߙI%`IDAT™UÍÁ €0 Fáŋ¸@7p…Žæ<¸–'įˆ˜cB|U<|$”ōĸ¸˛ĸIaC{äĢČf—ÅëčsÄu [ĻAĪ@čĶūV,ŧ'ūĨ-s­`RĨP“k§§ß#¸=ĩĸ\õ”IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR#ą“gō pHYsb&2 tEXtComment5ߙI%VIDAT™eĖą Ā Đ‡Œū’f>-ĐŠĐĄĢ›…ôŠB á.đbhb¨ø:6ÃéS_Y˧¸ƒÁ‘á•ācšūvŪ {Â~Ô å^Ãü7’Ũ›?•†|IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR%Œũ?ė pHYsb&2 tEXtComment5ߙI%XIDAT™eĖą €@ @Ŗ/žüoÂ*‘(X##|IŅPœRÄ6‚Ā`Š‹}[ˆC3ę&ÛdlõΜKá¯ųˇËŽ3ԃ6 -öÚŊW>ng4܁ĘIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment5ߙI%NIDAT™MĖÁ €0 @WyđĖJŨŒŽfÄ"!Īž*TY'cčŋúâ“$9gs“2)—î“ĸŒÅXD…Ë„uĸ4úoöéÎØ(7Ú¸Ī3IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR%ˆīŅ pHYsb&2 tEXtComment5ߙI%ZIDAT™UŒą Ā Qx ’QØ$Œ–Mâlā’á<‰}ÅÛ¯C E4€ ˙ЅÍ9 OėĖ› ÉĢÁnAgŸ/͎ŅnfiŠėŠä8 *5.ú\ė?Ņ ëÚIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment6FŸ^IDAT™=ÎÁ €@CҝÂÕ ,ÅĘDÆÎldKØŖ™8+âáA ‡ÉŅ=ĸšP™gįœkrę§t•}&a¯ۃ8d?ûAnĘÖSįÄÅÚÎŠÎø ĐČ8ũA„‹IENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment6FŸ_IDAT™uÍ!€0DŅOÔÕö(8Ž…„T šR9 pƒĘ›.K‚E<9ķ1ąš°â4Ú ™„jÂíŽĪz ¯™,‰MC ÄÆ¯Ũm Y‡oЎ.FĒ˙ŧ-ëåŋ8Ō8Î.ÕIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸcIDAT™mģ Ã@DŸá‰@ ܈‘čÔŲē“+᠍;Uđ惔čšĐ(¨YãN{Ī䚓|%cKúņ§ą,f"öBĒ*§âĮį–ę\Ĩ9Û×Bwwx#ŊĨ‡ŋ”_gšCœÉc¸IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment6FŸ`IDAT™EÍą €0CŅ/’.#ĀT°ąTŦ‘(Sœî8”‚âU–mLV– eFĸRGåYÜĻkN—Čr ėŌqhíÃOĄw_ļģKį”(Ū|§˛"ūfˇžŗž2yM‘ÜHIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment6FŸ]IDAT™-Ėą €0„á_ Ø8BĀEĮ˛Œ¸XFq„”ų~ŅÖât÷ņP´;´šlR ŗ ƒ ŖĐ&ŗ õaí1"™@ŽžlÛ]›Ļ_åsYwZ_›§âiŧ_ZäĮAŠ- ßIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment6FŸ^IDAT™eÍ!€0 DŅ*[Į5p\ ’+•á"ŅiØjěˆl˛xéņ,Djg”Á°ŅxgãYō,WŌdac"•ČŽģŖBÁ˙NiûæVöļČŖŽW?Ԁû *2b‡ėĖIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ^IDAT™mÍą@P„áF@ /Ŗ ™ļdžQˆVčäé@¸q–Xđ%7ģ{„ĸX6w-ŽVhįk%Äa;bc$;7ģˇÜ°TV˙xī_Ææ 6wJ—(ôœŪņbÕoė4âb÷›YĻ2†'Õ_ ,ŪĀڕ?z×lēũÎ{'ŒÄ÷Güm7ö]s{=Đk%IENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment6FŸaIDAT™MĖģ ƒ@„á_F"„p „ŽėΎ‡;:š.t`í0@Bđ´ŌĖĸPíPąųPDüŸAũØt)$Čtäą%'̓EĢÍ|oŽ{;qvJØĢĨzûķāœRė—u:đ~5IENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ\IDAT™uÍĄ €0áK*Āa; Žĩp@HV*a‘ŽPų‹ĻņÉËaeÄRĈ4WD™D^œ‰ä.ˇąōŲ ĩ§kÎ`øqēŖÁ^áVOʑė}aū^ôA4 AĀJWIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ^IDAT™MĖ!€0ƒá?A0‡ãs\  ‚kÁMv„ÉŠe7A|IE[Ŧ&,GlwD‰: Íĸ,nŲÄŨb§KĐ)2ÔĀØœņ™ŪÜ~ŧw(p•HömaĨúWô¨0úxoIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment6FŸeIDAT™%ÍÁ €0 Đ/^ . ¸ˆāJP°âĄkU\¤nĐcĄņ[ī’üŸĀÄ҃‚:*tVČĒ(ģ"ÛīĄOÂæphŗ’‘†&4ąųįßūfîb>‹Cfŋđđ–uúļÛ7iB€`IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üņ pHYsb&2 tEXtComment71—( MIDAT™UÍą €0ÁC„.ÁĨ¸4_æļ,Ņt`2Äķđ—°ŌċfĪ¯NäA”ƒ¨ÎvˇJ“îL\r–0jØ^ūčB7É,‹KÆ­R7tX)˛^IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#ą“gō pHYsb&2 tEXtComment71—( SIDAT™MÍÁ €0Dҁ<ĻK1IaŽX@ZØrô Ž6‚Ūųã4Č?_AbKØÉT`BĮP(ĐäžčîYpu‹kƒŽütæ2mCĄjō§Z>…Č˙PIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment71—( RIDAT™5Íą € Dá3”Œā(°™ZQēŌ%.ĸqė,ŒxČīKžú!bB”ŋøņ™'QvsČ*É8ņÄS ÄmŽĐäąŲ„UũČ,éÅÉRøP>X¨A‡"IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR$CT'E\Ąŧ:Ú Ĩča†nTķLNfĮÍ" Ž4I“—v{U^U>áÆ§ĘIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment71—( WIDAT™UÍą €0 DŅC”°+dVbLÅŦ)‹x„+)Æ!IÁ—^ũ!!?­C'œ`\aęĸ“ŒEįzâŠî¸˛‘`Ĩs—â{:4Fė._ŗž˙gD•˜ ]‹6÷DÂmaLŧģn UÔĻĨO/EĖAĩ@ĸ2,IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment71—( IIDAT™MÃÁ €0Āũåi –ĸ™`ļ´b#)!O’3˝āĀ€4˙~R[qŒV•ūŒ{LžOūŅ™¸u!ZŦA5Ÿc/ã >‚;ŦCtąOIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR%ˆīŅ pHYsb&2 tEXtComment71—( XIDAT™c8ū˙Ãá ¸Íaū†ũ@ų˙`ü€á˙ >ÅÍPĖÁ˙@˜˙Ã(ū!Áė0<€â \˙€ĄЁ‚q#7ņû˙™čF°†Ë~IENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR%ˆīŅ pHYsb&2 tEXtComment71—( YIDAT™UĖĄ €0„á#dG(›° ›PRd%‚5n„JáqĨ5\ō™?N#ĸĖĄG>ŋéwi„#‹Ŋ:$Ę"ņ¸âΨ|ęÔBŒë‹vØIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8Ą(5˜RIDAT™MÍą€0 CҟK‘Âh‹eā2r—âIfrrš1¨‹ũFdĻ3Kā5ŨEęb¸Ŗ ÜęĩôĀąißĻ~@Ōžē^âUr&īļé̘IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment8Ą(5˜bIDAT™Uą €0 /ĸHIFa$FČ ŦEĮH,āŌEņP\c˙ũĶĸáÁ02';‰XŠˆļ÷VLSvîŽÜđt¸:\žé)wT9blĸū‰žĀûÖ$˛vÕ3Ø ũ’0ۋŠw”IENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment8Ą(5˜cIDAT™UĄĀ 7$%PDdDDĘB ‚J[Đ % ?!*+nūöžžB â(ƒĶ’›!‹!~¸ÄN’w$í'ĐŅÜÔ­XĘf(ģ!XûŸøŒ-Ŋ{;˙Õéú-/N.Ļw'´IENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment8Ą(5˜\IDAT™]ą Ā /ĸHFÉhŒb1¤,ō#¸¤@QŌD)ޞ}flĸ“0N‘ėÔÎ" Ø?Ô):ÉJŪ„Ö^ wČf‘Kī~nŽûĮtyVŧ×ÖįüvOĐŲN/+ 2JIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜\IDAT™]ą €0 Q(ƒąRĻQ°VØ$#¤t> Ŧkėŋ7ÆLf$™#ÖąŨüHT6”ˇgE;“Ÿũëob¯0œ_úęÔįXĻÖĨŸˇkÔÎ.Û/|{į’;IENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment8Ą(5˜lIDAT™%Žą „0 E"%dĘ+2EŠC,›dĘ+Ŧø>Nņ$[ö6î†O†Qų‘yX‚öI\UôÄáƒÛG™æ{ĻmEģoŽFžSDÆ69öD3¸;ĘÂ)fu Ī÷u­rÅŨžŽ_ôĶ9ęĨ‘IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment8Ą(5˜`IDAT™MÍ1€ …á`ppptđ(ēŖ“×’›pF††Z`!Í×éŊ}% x +yq$o*$šá2įAŪ[^úÔÎÛ>(›Ũ–ˆv#Z÷Ņ{B÷Õņ'ˇNīTå9Ę:">œĢ IENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment8Ą(5˜jIDAT™%Žą €@ ¯x‰�ÅFņˆÅ@,ō#PRDĸXļ"œĀši\T:Æ> 7ާpDa}iIéSúԟ9×4QŨ۸æBw”‡SŲ-ûˇ´U,^ØIL]™Ģ_O ú'ü܀:ģÂ˙ŪIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8Ą(5˜]IDAT™Eą Ā0 ߸ˆGđ('#¤L™læQ<‚JFÉ?&q ÄëÖ*: .#¸E|ۈ3w(’C3ŅH…ņėtøúÍąØâßE’ËÕĨÎå’įÉūā).dÁIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment8Ą(5˜dIDAT™UĖą €0 DŅC”d”lĀJŪ€HY+‹DbĶšˆ˛^cų6*úÜ=š)ŌĘû…Õ¤¨ė+{K‚S=sØ+Øŧæö;ūĖü_ÄŗØ 7Ec8Y¯2×ĨIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment8Ą(5˜cIDAT™%ą Ā0?rAo)#dËEÖ"›0%…e›â¤ú{0Éā‡Aņ@„ņŖ{Å;’žY7Fŗč¨AVŋŦ¤ëˆž"|­Û'h$įL(ļJĐbKnŪ?—9/ûč5&ČI‚ųIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8Ą(5˜`IDAT™MÎą €0 DŅQ$#dJÆĸ bą°‰Gpé"BP@ņËį3g"Ί1Ķ—Ęæ**û¨Lŋļ˜ižŌ‰'{œŧlČ:ŗÂá…= yđv~MŖTĶF—1Ųû†ū¸ ¨1Ņå¸ĸIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment8Ą(5˜bIDAT™cøĪø $0ü Āpø‡CûdlĀĐüÃ(^”˙Āpā!P=ķ†@ü„füę˙øÁ€á1Pīaž üh¸$”oĒ;Thë^ö؜9¤KÕ`4IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment8Ą(5˜dIDAT™MÍą €0 DŅC”ÉŦŅ"1JAÉJD,’ŽÎ…•`%ŋąũdTGČD™ˇ$ 8Ô˙ŗ]".ąÛālÎRŗjVņ”`~˜SWŋÚhŠž—lŸúOšo+_%89éĩ9—IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment8Ą(5˜gIDAT™=Îą Ã0 ҤR#ž$€Öra$ņ^.2ŠFPŠ‚ũ)^EAÜ o†ņ “ūÚ­Č[\FĸN¯L-5=ÎÎlōŧnŦšo‰ī€]‚Úx ? t‡žųhŋĒëŗúÃíŅ85ˆAŋzIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/[IDAT™UÍĄĀ ƒáŋ –Qęēž‚š¸.Ԑ¯^Mŧ’K° ´‰Ž¸{Ąiį™:#áÉū§zvy§)r}#2ČØXvL닰æN1ũ¯'˙:œéŅÄ7å-úšeIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment9Ö/aIDAT™UÍą „@„á˙PØD°áŽĨ+ĀDlė•"\† ûnp#ƒ/û™ĄQŲ¸X –ÛĨšFæF—OĨuƒíîâkŒŪ™e]ēËŌÍDž„qú7f{ÛGüR@™40†\ŌIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/\IDAT™mĖŊ €0†á×b—t' !âbqGHiî<Ŧ,žęûÁ6Ĩ“iŦœĖT"%Š ƒ ã‡_ģ;ŧ[“ø^üGü/`ũąk~ĩ;3V˛įJŨäÅLoėÍ3†ŦRĮIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/`IDAT™MÎÁ €0Dҟĩąą4ŅÎb')Ác!ã<Čō.Ëė°H Ņ<;…•‡‰ŧŒ¤#r ;š>á3üvŨmÉŲŧáûčžčžˆÚˆj7؊ŠåĨƒęD 6ØėÔ^ >¯~2RIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/eIDAT™=ÍÍ €0 †áWZđ"¸€ā"­`Gs”ŽPoBãįBō #ĶHTöĮD9#ƒEB‡ņæ0û[š‡O1t‡2PVTfÄ넟ŌIę3^2]ÛĻŋ{YVŖnÆáv’=4„$ÛIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™UÍą €0EŅ+Ō.A,ŗ˛XÜ$#h—âá÷ƒZœōŊ‹+•Da ´Ŧ@žņÆWüČnž4šæ?Öv¸:ceÅ6¯uŪëE‰nu§é!ā3ãIÁ`UIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment9Ö/eIDAT™MÍ1@@„á_"ąVįŽĻCJW"ŽĄØ#H4SČ>(_ϚR!”‰ƒ–HÃĸŠáĒS °@ųâ—ũ—0ģÉm Ö ī”lwžaz4ØŅbQØâņ|ÆŌÕŽ§éΆ:˜î>č=IENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR$TvŦŊ pHYsb&2 tEXtComment9Ö/jIDAT™=Îą €@ @# JF`$C"ˆÅ~”gƒ/ŋ@ol4W$˛ đ Kā¨Ŋéi…h†öŸCŠgī"LÚĖ ˇˆbĒi.åÕT]cŅ]f“&á_*6ĮԚ;Q31n/kFtĐ;’¤IENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR$ģ´Įƒ pHYsb&2 tEXtComment9Ö/aIDAT™mÎģ €0 „á?rA6Č(´Lbŗ°IFHI8!:d}•Ī$ņÔÉÄAĄ“i Ô1¨K°]‰M~íVŨocō|ōžđž@ŗÃëȨT'_[Y-,‹^üƒt"9B>ŽIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment9Ö/UIDAT™}ÍĄĀ DҟA€H¸´—ļ° Q % O0G6 D<õggąÃ˜7}eĒ'š„ ņĮכC]ĐA{0ûĖl/ė%&S†tÞĸ1.yėS°0°"NIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment9Ö/^IDAT™MÍą € EŅ &Ø1‚nâLN`d3FaJŠđĄÅi~ōīÃ\§qQØČDîé ¤pæY:¯uŸå'é~úõjx*“Ņâ§nŒr0˛hĮčTmfEŗĸeīFˇ- P/ IENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/ZIDAT™uÍ!€0DŅOÔaqpŒ­Ž ŽUnŌ#TŽ ]<Ų<ˇųƒÆ{DŨ"å^¸úBîÉųuJîpH1¨5‚JWãco ¯†ëÉ-i¯Î˛Ęnņ 4qZpáIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/\IDAT™eÎŊ@@„áw˜!ŖƒĢÄ(Cctĸ„ /0ßZąā ÷)ÁÃL!ŲĀMĮš˜.ílv(˙l–įjÎ}Ē=îPļúPIčļ<{mņNPZëƒ:úƒâāØ;MJWãIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/YIDAT™]Í!€ @Ņī¤Yˇy"GŖ9Œã(¸Áa]Œ†W˙Į‚ĸ›2Pz*4ÍÔG¸§°/ø„šDĒkÉéˆw„™ķŽ × ÖĢĘ\/×wēK_ž'2wĀkIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment9Ö/_IDAT™]ÍĄ €@DŅOˇ{Ĩœƒ˛mĄJ8šbÃ˛AÄKFÍĮzĨuĘÅL §eļ;ŗßBzÁđ‘~6*‚× ŪÂ5ãUņUąč´čÕ¤,Ccģ>HØ46g˜–IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set10.pa000066400000000000000000000755661506303110300215660ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRtĪúĶ pHYsb&2 tEXtComment0¯ķŊĒGIDAT™uĖą €0 DŅ/ ؂QQ¤,f61¤LåËAŦ×ų>Š‹âd˛3ØH nAWŗāPūęŸđ˙Ģ‘ŪĨ;ÃŊénųôÔû.aQ˜yIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRė’¸Î pHYsb&2 tEXtComment0¯ķŊĒVIDAT™mÍą €0Dá')Rē€ā"‚ĢX¸–Ų$#¤´Īü`iķU;,‹‡Y\Œĸ‘ERĮâMė.A‡+dˇR°ģ‰-âœ1P—ĄCú>nVaŦXØ6yŠ&ŨIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR'Îkk pHYsb&2 tEXtComment0¯ķŊĒ\IDAT™=Íą €0EŅ )ÁEGķEÖR2‚ Ä RĻž‰ˆÍ)Ÿûą,n&QE!ˆėA>Dō.6įNņB'ēōoī]ōÕŠĨÖÖ+sč?ZŪ,Ķz÷K;Ū`šQIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR9Z˛€ pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøĪđŸáƒ=Ãy†ü ˙334˙ofh˙Ž á`Ė”c˙ßTßČĐđ™á€ ;PlÖ†zĄ%Û˜ ŦIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRN˜rû pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøßPĪđÁžá?Ãf† Œ @Üøų?70°˙?€„ aˆ8H]3P}ÃF° ŗ>0°ƒÍ™˙ŋņ?ø6&Āä:ˇˆIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRČ U pHYsb&2 tEXtComment0¯ķŊĒKIDAT™uĖą €0 DŅ/Ĩp™XƒŽÅōbņ&fƒ”H‡EOņē‡7Ä{#Ôp9Ļ(ųé?LWĩÁYũ¨]ŽÆdŠĪš^{)o,ā{IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRĄZÅ pHYsb&2 tEXtComment0¯ķŊĒ\IDAT™=Íą €0 DŅCiŲ€QØ .JÁZŽX$#PR  š'ö7´‰&âÄHėHĻ'ÚÜ!ÕdQ¸iĀjŌ;ÅGųy–ŗĪBŽ î9z8˙<–›ęį/˜p;­TãĶIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRSBC pHYsb&2 tEXtComment0¯ķŊĒIIDAT™uÍą€0Ác(€”ŒR;{:y:€Ė!œlĻ9! eĄŗĐ˜š†‰üŦ Kęp˙Úuzgå ˇ:Íē{ÛŠ‚ŋ^5eØũ&ãIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR…ÄĄ^ pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĮđŸáƒ=Ãy† ė@ĖĖpā#CãF†æ˙ í˙0°ãÁĖ@ RzÔ0ƒÍųĀĀ6ķ?Đė˙˙fÔ)Ŧ0s-.IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRčghķ pHYsb&2 tEXtComment0¯ķŊĒYIDAT™eĖą €0CŅ((ŗBAdÆ ;FË(!eŠHĮJšWØ˛ņáÂī°ŠÁ":œ´BĻ™2˛ōHëĮøĄhe/-ļ%ļWĒ™}ūcķŪëtĶr§9 eD;ļIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRWh’~ pHYsb&2 tEXtComment0¯ķŊĒ]IDAT™mŽą €0 ?JA e•lF¤,öˆE2BĘˆĮV(iŽzß’5GIčˆDG Úę‰S-zÆĨމ:1~`ģ:/˜ÁŖ˜e.Ž_žĐƒä]Û/ŠSEōŽĄƒZIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRĨÍ pHYsb&2 tEXtComment0¯ķŊĒUIDAT™eÍą €0ÁERĨāÂҨ҉K $@<~;$™č´‡ą‰‡IÜDq1ˆâhEė–Sį0Ačˆ?REm§J§yeiŊāåčŖx™…ÕáJĀ4JC[IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR1qc pHYsb&2 tEXtComment0¯ķŊĒSIDAT™]Ë € CáĀŅÜD 6ë(ŒĀ҃ą‚1ÆxyM“~0ĢØ™D#‰J"t¸kqîÆÚˆŽ/¤?ę7R,‘GWKŖá™ŋNfál]ē;6Õ÷k;“IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRė’¸Î pHYsb&2 tEXtComment0¯ķŊĒXIDAT™]Íą Ā CQK¤Ë%›EF,“„(SDį‚*Ík|úQ„á ėDG$Úˆ"§ĒY…jDœtüņu‘ĮIš$¯˜WÚVų 'Ą[ü4<5˙ˆŒ#‰IENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR…ÄĄ^ pHYsb&2 tEXtComment0¯ķŊĒJIDAT™}Ėą €0 DŅošH °(RŒX,lÂ)ŠrÄ @qŨŋ‡ĸ2ØxXčnœļ:×0NŽ ¨ũ,ž&Ûc~ÚîĶH'Ŋt+2Ŋ–}%¤û ķIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR I]›ĩ pHYsb&2 tEXtComment1Øô<)IDAT™cxĀ€ < „@¨ō€Cƒ˜ü Āđ/fÖŪkIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ãU pHYsb&2 tEXtComment1Øô<#IDAT™chp``p`’@Đ"P=C40ĮRam¤IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR ĪÉé pHYsb&2 tEXtComment1Øô<*IDAT™cøĀ <@A?0|€!Šj`€ée`ø“ž ļחÆâIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRy-ŗė pHYsb&2 tEXtComment1Øô<2IDAT™cø˙‡á C ą0axD6¨H$Ž‚xx@ęáz00|`aø˙˙{kž}IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô</IDAT™c8 Áp€ŠH0<°`xPÁđĄD‚*Bi``ā`‚†?UípæIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ́€Ė pHYsb&2 tEXtComment1Øô<'IDAT™cx ĀĐĀ@Ɔ  H  #J$Ŋ@đGũ”Hû˛OIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<"IDAT™cx ĀĐĀ  €¨Š ĄØP=1Č‘ļĖ[FIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR ĪÉé pHYsb&2 tEXtComment1Øô<+IDAT™cø˙€á€C ĸ*ĨĀđ€á}P`ø˙7ģī—B¯IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô<(IDAT™c`€ † ôĄŠĀˆX€Ô7p00p€ČŨŲ§81SIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<IDAT™c8ĀĀЀ„00Ą‘2hú‰Ą?5ŅUIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR@ļ;Ī pHYsb&2 tEXtComment1Øô<-IDAT™cø˙áC˜~°ÄÆđŒ€  â Pd˙ũåwōZ—IENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR Ņ]0đ pHYsb&2 tEXtComment1Øô< IDAT™c`p`€ @t=#4Á† @)OĄĮī°:IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR WÉB^ pHYsb&2 tEXtComment1Øô<IDAT™cøp€á  8ĀĐāĀÔLqéeIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR -ōb pHYsb&2 tEXtComment1Øô<"IDAT™ch0``€" û*`x€‰ @$ Ô˙äõ/0;ĩ™IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jų pHYsb&2 tEXtComment1Øô<-IDAT™cø ÁĐĀÁĐĀE$T€Đ˛!ˆ:`Áp€¤—h‚q9ņ §ŠIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR}$ZŠ pHYsb&2 tEXtComment2Aũ܆UIDAT™-ËÁ €0DŅoļNl%(xČŅl%žlcJČQ˛Ž"˃=Ė'NŅq!_ļDĩĨ&ÖÅļ–Ø-^ĘDqXąŅũä~­˙­ņÉūŊšõ*/+ŗČ úâIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment2Aũ܆KIDAT™cøÃ~€áㆠ08I† n2Ú00đņ| ū„ū71PÕæ ˙@zåzm€z!úPČŧĨËĄÛ°zIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRJī pHYsb&2 tEXtComment2Aũ܆;IDAT™cøĀØĀp€Ąā˜Hđ``b{ ū ˙˜šáPÁū†ōŊ6ú“čæIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@Ą pHYsb&2 tEXtComment2Aũ܆BIDAT™-Ęą Ā ŅC)(Qą”˛’‹x„”(Ÿ‚œ^yŦĖ{ ƒÛ(N t8ęh UžÆl„ūųd‰Ą åęŽãˆIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR˙Eø: pHYsb&2 tEXtComment2Aũ܆MIDAT™%Ėą €0ŅŖĸĖHŦE‡%ŠŒÁ*A,’RR >&‘õĘ3âÅ=‰Š(ėrƒd‡Å¯Š8í˛lI<‹ÛÍí::ucşū˙Öá'2ЖsIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR*ōt pHYsb&2 tEXtComment2Aũ܆@IDAT™=Ęą€ Ņu~@H –BiœũR,ÁĐĀáĀ„.w%ˆŋ§hI^.¸0*_ãí<&ÖÛŠ_(0)IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aũ܆DIDAT™cøÃÜĀđĄáâã@Æų ÷ø??ánbö†ü ėzøD_`l4Ģ?C$Ö´IENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÁēIw pHYsb&2 tEXtComment2Aũ܆MIDAT™Ëą €0CŅ€¸؀Un”H)(Y 6ņ”Q‚Eņ,7Ÿ†xIo\V|Ēœ6–&Æmŗč‹hĢÛ]hKwA1~ “>_!]$îŽIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment2Aũ܆;IDAT™cøÃÆđ€‰áCķū ō@č?`øŒÚūķ1ü“cøQĮđáÁ†$ĀWRÖ§Ĩ­IENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment2Aũ܆HIDAT™%Œš Ā0 /Há2#xÔ0“YŖh„”)ō–„ GŪ&îUœ‹äeâ[ŨŒ_˜Ãø9Ŋ.ŽŨî#2ĘĢqrŸK~žm~X°ĘIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRyҊ” pHYsb&2 tEXtComment2Aũ܆KIDAT™=Ëą €0 DŅ(Rf$6C‡„U< #¤¤@˜,=˅?™âĒâDCŧdĢWiPwØ,ŖšXųÚcr;ëīúØõÛ@ôÃôBLbæ[ø­ļG IENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment2Aũ܆GIDAT™cøÃßĀđšáCà ÉĀĐÄĖ@;÷ņnh`øßÄ@õ }?äzízëAzĀz! Œ˜›¤k‚ŽŦˇIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR’æ1— pHYsb&2 tEXtComment2Aũ܆JIDAT™cøĮ|€áㆠ @q79Ėøx>˙?āÁ@‰˙@Ŋ ũ?ø0|?Āđˆ끏€ °îūy‘X:IENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR"wŅÄ pHYsb&2 tEXtComment36úė^IDAT™UĖą € DŅ3´ŒÂHŽĀ$āJ'qƒ+I$ā7V¯ģ‡5”Õ”TaEyŖî5jú8ƒí…ëÛYļĶÂÖb‹öˇ!´¨ĀßĖ×ä¤BˇĶī“åāŌxæn™ø¸ä]–šëę&.íķL§Ŧƒ˛¤¯äŦPĩ¯ÉđÕ^ĸq9ī& ėsIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment36úėeIDAT™EÍ!€0 …á_Lr„ ÂÁˆMq­%\‡ŅŦŧe$ˆ/iŌ÷Zü6ŧl8 ˆ1ņ†5āĪ4X”Es§|íŊ¯›´KʔžëĀÛī’Cr dí“n–9ręoeĶ?ŨŲíÃūAI ŨŨ8IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úė[IDAT™MĖą € …áßX¸Ŗ1ŠTŽeâŽpná|`cņ—üīđd8F#R ä!J øņ<¨+ōČ%Úu†(ę ĩŌ~úį–C÷:’ūíڞ‹aĢQ7{ˇø?č$oIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment36úėbIDAT™EÍą€ DŅu ´JĄ4ŗ[Ā˜1!¸ņü˜ŧčv÷ä›éQ‘)k|’:Ú4V]¸á#É{F‘7“_ ëšũ î•\d'ÉíwZԎĀÖÂVeĢŌ;øŨĐŲą`/æ~> T=aIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úė`IDAT™=Ėą €0 DŅŅd’ŅRFbąlĀ Œ:KD˜$Š'7ūGt'Z%(L c¸qLãԍ_!†ėúoęxT.ĩĄîÕŗ~ÄųĖĪ&ĢgIÚbuíUéÚI{‹ßÖ~<õdy-¨IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment36úėZIDAT™eÍą€0 @å(˛†GķŒ&`Ĩ°‰ŠhM—"‡QŽƒ†â+Éâ0Äb¸0(ūšgÄGnļį6ĘĀŦ˛ã`úßJ™Ļ.HüWTQ¸[“ÁŗŨâ}AĪųÛwŊIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment36úėTIDAT™eĖą €0 DŅO•ĩ<RŗDÁd¨Hʼn‚âI.î›XœĀiUv :âa/mOY%ŽĢéÚĮMMÔŋ­AǟŦ_ŗ™j§LNM~Y9ØŅ& čIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment36úė[IDAT™eÎą Ā DŅCPfFa4 ēŦ•QČHi\XqžDY¯ą|ļrĒËÔ´TqhvØvãA,Ėē] Ž ä^rĄB_ĖÂūNäU”ØĨ ˛ƒÛĖä˛ėßH9é×åR‹IENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR$Ąˆ' pHYsb&2 tEXtComment36úėdIDAT™UÎą €0…á_,RšQ2ZF,\Ë \!âg!x>A‹Žxīîđ`xg\L%iJKl5á??•?d—IxēY"žˆĄÜĢ}V™%ÔH_"˛Ŗî,ęí0ũĐģm3A/ØØ8'IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úė_IDAT™UÍą €0CŅ(R2-ŖĐąką@ʇ%DAņ\}Ä*îAtDĨ8_ÛRØUˆúqÚe‡%÷Æˇ×}“ Y…hÖ˙枙Z&ĩBōÖ ąøīæ:éz@?T&jœIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment36úėZIDAT™EĖą €0 DŅC)É(-;°ƒ`6°D“""| $ŠWXį; šnUu4Ž—YŅ…áĢp;VLŅ äĘäâ ũw`iY)xÖĖŽĒ6úƎ'C;irA]ČIENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment36úėWIDAT™eÍ1Ā @#FžÄĶxšĢũL]32 RgîpC$ہb'b0a͈W<čö)—Üō'zY”?hp@9YUŠd ‰ ]ŊŽŋCVų=éáp!IENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úė`IDAT™5Íą €0@G)(ŒÂ(?J$`(q6ø2EÄc(Nߨ~ÄEÜ  ]Ü šD˙‰hĸ|’ÕKo×D™*ŽŠÆŧ§6VY´™Ũh¨úYÕ§vÆÆ ŋ= ØÁŽåIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR$CTÄ혐ACPÎĸŒí°ãŸ˙ČXBoŌ§ļ2IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙ĄŽá˙;>Ä c€āPü„ ę~Ô1|ęųāø0˙đĄũAûĐď€ĖGÆv˜øC7~<īw=IENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žyŗSIDAT™cø˙į?Ã˙õ@lĪđ˙a X3ąD=Ã? ūcÄõ ?~Ô3|„âĮ@|ˆÛú›?02 ˆÍĖ0˙<Äl~€„ab?ęi?>ąÔQRIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙ãÃ˙uüˆ@q3Ô1ü3¨cøÂu ?@¨î#?âĮ@|ˆû¸ũ üĀ4Ķa6VüFŽ@[_{IENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žyŗWIDAT™cø˙ãÃ˙5 ˙€° Ã˙5ÜÄ üO †áÔ0ü(b ú@üˆņq n˙`ÃĀėĀ€, ÷đÍĮ6h(öįRã@ŌķŊ/IENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment4¨žyŗSIDAT™mÍą €0 DŅ/ ʈ ,&a.ƌæQ"ą@Ę‘ĨXT¯ûēÃŨp||¤žZĐP‹…‰0NĄĄŊ z*|”G÷ĩÍŋ+žƒÛ >;_ĐIrIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žyŗTIDAT™UÍĄ €Pƒá †@0QÁXHk]Â"°ÁáNŽ’â5ųldŌeûĖ,@ܯ–¸$™â”C6Ye‰0TŗąŅ?kÎŌû&†8},œÅIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!r Ŋ pHYsb&2 tEXtComment4¨žyŗWIDAT™cø˙¯Žá˙;†˙ ø€â f€āv  ė~Ø1|Ē{āø 7qã9&h˛˙āš'5[a˜ å˙°õ8•ĩB!IENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR"‚/O  pHYsb&2 tEXtComment4¨žyŗTIDAT™cø˙ށá˙yņN ö0‚Fü“@âOø">€Lų"C Ūà ĸˆ€ĀŦ˙€ô˙ü BF \đ•€*ísJiøHmIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment4¨žyŗKIDAT™cø˙Ŗ†Œ?ņ >Ä @ĖPÃđŠ˙ņ…† @\PÃđ¨î 7?°a`~ĀÀ>0°Íą˜‡˙0ü˙øeļ4jąI˜ÕIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žyŗHIDAT™cø˙ņÃ˙@| ‚€˜‚˙ņ ū‘Ä*>Õ}â‡@|ˆq˙ƒ ü0Ā˙@\íüø×ę>„IENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙ãÃ˙ ˙ņ(n8Á ūņŸ„ ?`øđáÃG ~ d‡â~ æęef@€ ›”Ë?]ĮAÍ}éÚ3IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment4¨žyŗAIDAT™cø˙Āžá˙$ÜÄ üˆ˙€°=Ï ū`Īđˆņc > Ä͘P#Ã˙ō@l˙c-~3[4XėIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙Įžá˙y~Äė!¸ŠėūAņ ūĄ`ĪđĄˆ?Ø3<üPĪpŠÛ¸ų#02ô?`š 2Š`Á`š˙‹4;†Fč}tIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR$ģ´Įƒ pHYsb&2 tEXtComment4¨žyŗUIDAT™cø˙ã?Ã˙õ ˙?ØCđ >Å PĖ`ĪđĪ‚˙TØ3ü¨¨gøÔķŒíéį@|ˆû?020$0ĀA#Đ\f öüūųlDb!ˇúIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ė pHYsb&2 tEXtComment5ߙI%PIDAT™cø# ĀđƒAáC?`øĀÄĖ>ū‡ā‡PüAˆŲ!r 5?€j˙õü? Ā”fø˙7nb 6 P@ @ü€Ąl..L8’ÎÔW_IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment5ߙI%[IDAT™]Îą €@Đo¤ŧÅÂÁL<7ĶĘ5pĘ+ˆˆx•Å ˙ā7ŖĄ$í$q˜ néęSÖ0ÚˇË ÷Ák @DgØaP悊cĪ[Kü`đà ‰9žęĒ,ĀIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"‘øT pHYsb&2 tEXtComment5ߙI%LIDAT™eĖą€0 CQų\dŒŦ*&a•°‰ģ´)CethHņē/!ƒ âc’D˙š¤U)âbĢOJ2dŧæî”2 ŋ ;hO__QųmN9Ú%°&–IENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR$CTģZĄf|X›<ÂÎČŖIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment5ߙI%_IDAT™mÍģ €0PG)R&ŖÜhˇŲ€•X$ˆ‚öĘÁ|$(üäÎFßzzJ!ÅB[ˇËúéy4L<á¤Ü J¯úŖ bōĻpYųlČîŪ+ŅĐ;á´F؍ÏIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment5ߙI%[IDAT™eĖą Ā0Ž\¤eƒŦāŅ2‚ģŦ• ˛Q tGã.ÅIž‡W!)ÚráqÃģÄŦ;U*6ī‘Ė{—ŲÃH7÷'UĘ%˙BgGGvÚfÕŠ=­Ú'ķIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment5ߙI%HIDAT™UËģ €0 EŅ‹R¤ĖHYÍl61@IÅÃĻ B:Õû !į†ķŗāĄ°kōĐņšy´ąš@†FŪ6Ž+X}5FĪģô>08ž–ÚaIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üņ pHYsb&2 tEXtComment5ߙI%TIDAT™cøŧásà ~ˆĀ€üÇŽ˙GāÃ@|ĀˆŲ!ō@jūâ üŠ a¨x?ˇ?h``~ØĀĐĀ Á ķ>Č7¯;žĄW*IENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR!l}ú pHYsb&2 tEXtComment5ߙI%HIDAT™cøÁßĀđˆ0{ÃĮ˙üˆÔ1PŨ øfūä˙˙OĪ˙ÛĀĀūˆ0ACĐÎĖ`ģ[™9íV¯;YIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment5ߙI%^IDAT™EÍÁ €@ Dҁ=xMļ`iv Ĩ‰ ØBJˆˇ=ņ/+ëᓉō1e•2$†âãƒaQlĄ tÛj֞![‘ŧwõwąOa*nYq+:Úį'ŊyÅ ]<ÍāyQ IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment5ߙI%QIDAT™mÍą €0CŅR¤dVÉfŒÂ*å ¤L•āˆ$ŠWX:ûĩP)ć8‡¸^fŽŨ6KļČ=Ņ}?Â*öī°Õŋ˛ĨHhnxĢeŨÂŨ=€ˆŠWėIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment5ߙI%[IDAT™UĖģ€0 Pq €Gņhl@8KĮf—Šl”ƒãSŧƖ„LE† › p˛‡Ō GūŲD#Á¯ ŗŊ›āûÕ>îÛî‚ÍkW…ũÂví¸é܎ÅOŊ˛CÎ`Ņ„IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment5ߙI%LIDAT™uĖą Ā ÁC„”d:ÃĨD@X4đŧĪÉÁdĢ…EbÁīqbJߚ°JõTĪŨ: |`ą“‚,I" „åū^‰°‹/ķAŗęnũÚ˛r2rž3%2›ģ+]Âw7oڒyüŦhæp@ÄâÛĩ IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸaIDAT™MÍš €@ DŅ/Č(Z čŒCĐ֖B X6à ëIØcÂ:ĸ´D–U™×XãœŊS&Yœ#^™Û(-y¨I&^ąK°’ķėlVąžõs{čOQ1É/“-62ČæŠIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸdIDAT™UĖąƒ@CŅīcæBœ:‚Np[ŽđÎĐîäJ $¸YY ÁK´Ōĸ\P+(@@RéLœäxڜ´ˇ}“}0Â÷p/>Ճ‚Ģ ēÄÍælSág{¯´Wå`äôÎŠ<–ō`ˇ20^Ē”IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ\IDAT™}ÍĄ €0…á?Ap[ÉuŦ…l@ YФ‹t„Ę ĮÁäåSOüXXŒ@wúnRÚĸTS˛ģ\q›‰Hšƒ cĻ›_§;ēS(MČõëDī­ØŽįų1ÄáŖ–}IENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment6FŸeIDAT™eÍ1 ADŅ/˜4xacī x%CÁ/6{“9„4ĶÖnjđ蠊jŌÄ.ōbœƒží.ī Ļ\WæÜÄđgá…ã”äĪiģ“=˙¨ˇŽB}M?ē6†Líå7~U˛+uweūšIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment6FŸ`IDAT™MË!@PFá#Ŋ×TKŅlKcFm‰lƒ¤ŠxķŽkÂ×ÎÁTa{ÄúCä R)Ô¸N\&ŽĪrŠ™GÍâߐ"cŽ„ Á ü™ÜøČ¯ÍÛ՟ŠËŅ’ aA7C9ÃņĪIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸbIDAT™]ÍÁ €0DŅOąKQKą’¨x°­ˆÄ<æ ģŽ"2ŧÛĀGUĐdƀ{…pVBn…c0öIf71" cW3eĪ,%‹ē>âÛéXsIę= ĪAM~{:Ë?>ĪŧIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment6FŸ]IDAT™=Ėą €@DŅ&W‚`#‚ *ļĨ؆Á•pĄÁ˛ë¨`đ’af?‰-“Đāĩa­qõ2Er|6i$1[Åâ°ž&jY_~<vuŗ%˛ö…Ķ—c7ø—8ˆ3øÎöIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸ]IDAT™EÍ!€0ƒáŸ 6‡ã8Ž…c ‚kÁMvdŲã-! >Ķ´)Ļ + ˎDeáBŖ¸fˇŠbâl<Ī4¸N‰ūŽ„Úđ^ŲŊˇ)røWņíå?ęôä3/6ä'{xIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ`IDAT™=Í1„0 DŅO(ŗœ.АW{ą%GHIŲ ļxÅx42Nô…h™(bgĄŗĶGįø8muęEšč^ÔY&lNXOā‰!^Æ÷›Š/R7™'šöĮķ'~~š3Vh…ę”IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸ]IDAT™UĖÁ €0DŅŧ,h)E°ą€‘4–RR‚Į–Ŧo Ė0XOX‹X aQ}SžĶ]J3ĨNÅy—9\¤¨ÆB° ֟ü)ž§ÛwUŨ.4ĻH÷Ÿž’1Č0^"3IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸVIDAT™mĘą€ Á3‚ČlÃĖļĖÄĄ1ė°ÂŪ%4Øč­-&ēÚ,Č*ÔŨ¨p9{â8š'uHúq?Ū>œögņ‚Y¨l´I{!5Ų2. IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR%gʄī pHYsb&2 tEXtComment71—( UIDAT™]Ãą €0ĐRX:BFņ6SąČXūTŽ7HŠ ž'Dj?đÆIåEœHžoP…IENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR$CTÅL<ūâ q֙QŊl~Ÿaßŗņ:7°Š<ČIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment71—( RIDAT™MÃą € Đo,(6q7‘ŽĩH\äÜģ+ŒįGŽđ%U*đÍž šuƒŠĀ_ū䃋ŧž> î_]m…+g'?s1yĶMAĶB…ŨņIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment71—( [IDAT™MÎą € Đo,(uW`Wr1āJ0‰$.đK "xÅëžBáÆ5ŗ˛’…ÉWÚp“(UTAâŖ0Ä[MDVIq!ĸōÕJ¸Ūūķr‘ĶŅH9§ęHsIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR&ė@† pHYsb&2 tEXtComment71—( ZIDAT™EÃą €0Đoei6p7pĨL  KWJ*×P\ā:Sˆį— äÁ킋Į ˆ¨‚wXķ€5{¨ˆ=9•KŲڗŸŽÎŊ>8Ž60ū3ĢmxWųé|J“>!IåIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR&œ pHYsb&2 tEXtComment71—( VIDAT™EÃą €0 ĀG)(lÂ*Ų„H)X &`…!e „ąeKœt¸…8t9ūRĪXF†ôâi šb‹IĪÄkâą+1tˇ›įîOņUO1Å&ü’ŊH˙I÷ŲIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR$CTģÎCV2ĖåIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR''UŖ pHYsb&2 tEXtComment71—( ^IDAT™EÎą €0EŅ–fWpWĘFĀ•YÃBq/6â÷I>Ļ8ˇžPœę ?Į~:TŅŖYz˜vJ4Q=Mqˇ‚‹„Vû" FŗŅ$â× —eK‡r}'įIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR$GĄėI pHYsb&2 tEXtComment71—( UIDAT™MÍą €0Dá“)3‚Ŗd4,,]I°p¸AėÄxŋĻȃ¯~Ø 1 O›KDČDŧˆrČ.k5U^ņ˜ž¸å4‘Čfø%YŒŊ¤k8ņ2žķÕ9ixdAIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR&á^öA pHYsb&2 tEXtComment71—( PIDAT™MÎą €0CQSĨĖ6#(‹kĀWR ‚ŅYK¯öĮÖ *>˙%ŸŠ¸ĄītĐ*M’á–+‡ŗÃūšƒIå7dP ›_QA”ŸīIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment8Ą(5˜^IDAT™MŒą Ā OJÃŒÂX))ŌDYĖTYƒRē@ŠDÖ¯L#ņ¨lt(?gZžhŽ|YwüôÃ#§|[Ę6IĀPIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8Ą(5˜`IDAT™MÁ Ā 'øˆ%XŠå¤ Ÿ iĖR,ÁįD˛já˜ĮÁÎ.%*‘B ã9¸L4¸\÷ú§Č•K”ͨb]Až\ũô]ė?Ü×ĩ5íĖŊÕUe7g/#A.R uœIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8Ą(5˜bIDAT™MŽą €0 /ĸĀ#dÆaJĘ  ›d„”."āŖP ëdÉēˇM Na!oFvãp8ڟ>3RäUģ|§*7j‘*J5.š§rsįūxFŸn#hIōŗîåõà (2.xm-lIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment8Ą(5˜lIDAT™MA „@ KđâÁøķ0ƒ°ėĮüČ<ÁŖ‡Øŗ ,Ą „ŽF †“1.&ޜh;4‡#^tëøD+ mÍĘnY}\ģˡY›2–¨ōĢÜS|˙øô>OĢrrîßīBŒöxl8Ēy0„IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR$ģ´Įƒ pHYsb&2 tEXtComment8Ą(5˜jIDAT™EÎÁ „@ Fá'æ"N‚l,Å,@—mlļKđčAŒŋĸxø îŽĪ†Ķ˛XOUÉbˇôc~X¸,uTwöÆ~i%h/YŨ| õ9AöI˛æWgúøeP?ęΉø”Đ/°°45{˜6´IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR#ŧĩ pHYsb&2 tEXtComment8Ą(5˜`IDAT™]Íą €0 ÁG)É&d´ė@AÉJĄbH,āŌH`§ƒâ[öķĖ‚‚)$JM,Y[$|$‚ú.ŗ‹PFĄ1ęėÃU2§Ũvŋ5˜ÜũĶįą7ŧW­ëõ6Ę ķZ5 ~×˙IENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/^IDAT™EÍĄ Ā0 DŅĢ bÚQÂēRax@Öj6ņVÜSUŠā!ûôąvÃÜ Š Ղaš ú¤…WŽ_útjŧ ūŨ—p/˜ä8NV¨"&Š!ąå‰­L'ģa(Ę5ĶŋąŖŨIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment9Ö/aIDAT™=ÍA @P…á_^™Č ^؈Ĩ)Š2QļD6 nī¸Q_ũŖsĐb¤Ė¸0k8SdWdĐˤņUŧúßđƒMĩ ߤĒDÉYüÜ ēZ´ę;÷¯ÂÕŪ=é‹<ޏßō]IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™EÍĄ Ā @ҟ Āa; Ž+UbIE×ĸ›0ōá %iÅĶf„ŠPˆä#pļĀÕ7lw/¯ÛfH͑YęĐØP Kh4I˜WąBöÃ.Ü*F“2–ęčIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™eÍĄĀ DҟA€‹ÅĨ JÃ&Q % O0\ŽØˆ'÷/ķ™NĸI¤ÎČŗÎøM7~܂jʄļÖ LŖÖøHBGFģ EXûË ũ4—šå1kãmáCIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/hIDAT™MÍą Ã0„á?DāF#ŧˆ!‹Ĩ0¨đ GŪÄ#¨tņĐå°_ķxw‡čœ…ƒB‹Â>2u$Ēn“mZ¸TÛũ×"9›Ü‘Ũ•ҝ ÷č\nũ‹šˇ^Áđ^Ÿ‚cļoŠ?Ą{=Ŧj„BIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment9Ö/`IDAT™eÍą €0 DŅ) # ąƒ!Äb%#¤Laa.ĸ¤xráŗ†qĐŲ¨,2S$÷ČeHƒ˙˙öˇdeˎîĄõ3âMúŦš|ę†įƒŅØ&ŖĒģ$Yå´0Ô2qj„ōIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment9Ö/\IDAT™]Í!Ā DŅOājëz ×6ŊGáČ„í$¸Š'į#ŖQ¨ōô“wėDI3/ÛOš% ¸;ÚŖNfäŒÛž¨åŊāMĒáÁ˜úkɨ›r‰Û¨t5ŒĢũņËIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR$TvŦŊ pHYsb&2 tEXtComment9Ö/kIDAT™MÎ1 €0ДŽŽnŋ Ļ7ëQz„ŽÄo"]~“ "ˆĀEÜØ‰•čČDC"ęfn|D‰Ÿ<ƒ‰bžãz=‡&Į'ˇ)>ÆĮbTMåQÁÃw—hZKf}õRÍ}Ģ E4ļ  ÖIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR#WēŦļ pHYsb&2 tEXtComment9Ö/^IDAT™EĖą € EŅ+&Ø9‚n‚›Œ‹1Š#ü’‚||6Zœęå]œL#arŗQY%RzäôĀ%ķ,~ŗœRú5ĸZ‘ŽÎčŌ^ÃŖJÉÚ›DgSÄv§ūņ2=ö^ģIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/]IDAT™eÍą Ā Fá"ØY ŖYĖBÉb7Š#XZ^.mR|đ7÷Ũ”AĄ“2Mˇ‹ë‹Ÿ]ĄMŠ7‚ˇĶ™&Ė[6NŦgL V•õūķŖ9ÜåÛô33rōÎxIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™]Íą €@DŅ/Š&‚ XŠ`+rb`[Úɖ`xÁrëF2ŧlāĩķî&aLXšJĪVöxA-ŨĪ!ûgÕץ!Ķ­”‘pɓ$â–͉Ę15­“Af'‡?—Ę8cĪŅķŅIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/`IDAT™MÍą Ā „á?D°˛€5R8Z „,æ(Ž`iņМ¤IņÁ5wG[ŒĘI!‘§#r[āéß~L°ũøūYå6GnN}§@“QĨEIĘRNF6Æü’˛y“]ų˛s°2^LáŅ&IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment9Ö/fIDAT™-Ė1 …0„á ¤ xÁ‹^ˇ…×ĘQö)S,YG|ÅSĖ ‘ŽĶØ0Ē\gán…ėI`ņɯņ™ä§ÎiIÛ¤BO…đ…čŌÄ69ˆę„ĘcrLĮ6;u•]9üĀ5ÕÕN;ÂIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™mą €0Čx‰&# ąH†aˆDFûQ2%Å+áŌS¸:ŲGlÁCĐČ8;•D=ËkŦ“€mŌ˙™û"ę…|SĮÔ3ē:ãĪÎh™á…AŅ“ž$¸DWØqĮĨ-Vžp€IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/]IDAT™mÍą €0„á_ Ød„€+8€āb6!‹ŊQ2‚ĨÅÃį[9žōîˆÅš8éėØV0ĪÔ'Ņd‰_ŗ4Š؉úI;Ik™¸‡ōš¤ī„91ž&§ĪŽéģ¯rø ŋ>4VíČE°IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set11.pa000066400000000000000000000741011506303110300215470ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒVIDAT™cøüÃ?Æ? øƒĄ†áG… Ç?6 ūČ0<üÃÃpđŗ€q#7˙c€cf fâF(ÍU Á< dČĖ5; vūį˙j6įHŨ•ĪIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cøß˙ƒáû†?0|üųƒáᏠ†Į,ƒđ? †v0æcö Dáv nūÃÄ`s@æĖũøáÏD ]Ė?ūŗ˙AÖ5][ÄÄIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒSIDAT™cø?˙Ã?æ ?0ü0øĀđáCà 0ü#Āpˆ›Á˜‚˙A03 WÔĶÄÁ؀á!Đŧ@s?@ėŲųŋ˙æ*7ËuöIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮūáã†>0|øđáᏆÃ`lĀĐū„˜3``f 87Ã0P?Č y|`øÄ? v1`øĪū0\3ö füIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøĮüá‡ã†>0<øPĀđˆū0`hâæ?`Ė Æ ė03Ãôš2ë!Ô\??0üâė 12/rDo‘IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment0¯ķŊĒQIDAT™eÍą € EŅ‹$–Žā(ŒFÃdÆE$.đK ōâG-,NyßCQô ŽLĩÄŲ{_)ˇ…ĸÉA|M?Eķg4ŪŽÍUß3ËĪ‚.˜e1PØē3IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒOIDAT™•ą€0 ÄÄQ¤„Q2#d æâ2I6øt.|6P¨û—đUØ"tˆ)1ŦŅ­ŌŊrúÎõåšĪo:Ōu‡s¨Ą­čyĪĻOr2ÕÂ?kŖIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cøo˙áķ†?Œ>$~`øøŖ€á!ūaÅ Í ü‡†˙aÁPqķ0>üĮ€á!Í™ũáÆŒ;˙÷PM5Ēāá™ëIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒQIDAT™mĖą €0 DŅC.ŌfFc‡ –Eˆ˛ĀĨsa98‚‚‚âu_3&„^Ä Ņô@×ÕÅ2Šgœ!9~ÉĮj—úęņhaėņ׍pá GĮ3jôC;IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRĻcÉķ pHYsb&2 tEXtComment0¯ķŊĒTIDAT™MÍą €0 DŅC¤ŖÍ(‡1ŌĸY Ä"d—WX FB@ņÚ˙Ņ•čšpĒ`Ŗ`gÄʀlŸbĀÔūÂ̏|ŗˆãQMPŊĨLāBØ@´Ņ?3/ol0 fæ}”IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮ˙áķ†Œ>8|`xøĄ€áđ6`há? íØÁ˜(Ė TÛ Æ3ƒqÃÃ>>Ú´īûų<1áĐDÔ9IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment0¯ķŊĒAIDAT™cøĪ~€áķ†Œ@üđÃãņņ`Ü˙ƒķĀė Ô×ÅĮĄæ=šũņ0А}üר2įŽIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøĮüƒáãüđŖ‚áã †‡@X‚á07˙ã€b8f†âf ĖĮ‡ø P?ƒĖ™ũãĐ. =˙€öũī˙<*7¸õģČúIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøĮūá33~`øđáÃà 0ū íPĖū‡‚˙ĀPõÍ` 5h&Č\ų??0üÚ÷Ÿũ[†3EŪÄīIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment0¯ķŊĒKIDAT™UÍą ! CQ—ŒĀ(Œv=“˜1ÁuAŠLů´?ÜVs’ >}¨ kưŒR¨—ã°+ũŧÜlŨJ|OŗÁŪ­m;€ -íIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR ßŌŠä pHYsb&2 tEXtComment1Øô<+IDAT™cøWÁđĮ‚á€C}ŖD H*(ÁđA‚á4pø› +BœIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<$IDAT™cøSĪđÁžĄÁžŒ€ė ō Ŋ^ 4á^ĄIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yŲ pHYsb&2 tEXtComment1Øô<0IDAT™cøgĮđÁŽĄA„Č1ü°cø!Fpœ CĀSČũĀĮĐĀ/äšņ]IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<)IDAT™cøgĪđAžĄ†~؃Đ ’Į@öčč‡=B=ˆ!2 ϐ”|”ZIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cøgßĀđˆä Äū ķņčũĀЀ ´š,$‚‰aŠIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR{Ē| pHYsb&2 tEXtComment1Øô<%IDAT™cø/ĮđCŽá€ė~äđ1@Ā6ÉNFŋķõ§IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR ŽzA pHYsb&2 tEXtComment1Øô<'IDAT™cøcÁđA‚ =ЀҒ@EH,ō 1@Ņđ…%´ŲIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR–īØŌ pHYsb&2 tEXtComment1Øô<#IDAT™c8˙ĄĄ„Ô1| ؁Đ9†L L ˙ØY'$Ļ! ĩIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<0IDAT™cøĮßĀđˆ17@Ų?äūđ#ayūA™Í ´@ä†āü+Ą6¸dIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 3ōÅa pHYsb&2 tEXtComment1Øô<$IDAT™cøoĪđGžá< }gøA.ę}ĀÎ˙R˙[4ņIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment1Øô<2IDAT™cøŋŸáŸ<Ãyz ĪđŽėÁHžáŲ#!$.D}``8ĀĀĐœ´–ąÅIÉIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yŲ pHYsb&2 tEXtComment1Øô<"IDAT™cøaĮĀCėØ1| =@C ôá==˙üŌ™IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment1Øô</IDAT™cøoĪđGžá<=°gø ĪđÆäą!{lH¤ņ?C ÔĩŅžé]ô´IENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment1Øô<1IDAT™cø/ßĀđˆđ700@ņ†Šƒ1?–'ƒĖco`xĀÜĀ´Ąą4É+YķX&IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô< IDAT™cø'ĪđCžŒĀlԐ=’gø4„‚($šĢ×IENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆]IDAT™%Ėą € „á?ą°t™DWac´˛dW!a‘’ˆĖåëîŽgy-1Š$Ī•ÁÜfCįēC'Yˇ6§ąũ;ŠöUVû[ywhķ¨x"?:uĄę֔2ĪôÆIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆^IDAT™MËą ƒ@ŅA„.ÁĨpqTāÜĘR‡hāœ ž×%´zŲG'j+öIĖE,5ąZTxÛhų¯$dģDøŖš‡¸žâėmH—øØ–Åoų†FŧB_t’7ēh)9ŌIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment2Aũ܆YIDAT™MĖ!€0Ā.$Oā)ôaˆĀ—ęøÆđˆá Ŗ†4W×ĸnBé…; jY2ŅYhđIšˆ]D•PŖyķx[ũ1y&ŽB‘~"ĸûīėô”ū-ļģŖ§4IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆SIDAT™=Ėą €0Á(ƒQØ 90Ąb ]Šp"ë:Û´Y”Qd;vą&ąe1gē`üdŅËŪhƒxŧm“ųĢ.PÜÎ*ę!ü}ĸ*˜oIIÅIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment2Aũ܆MIDAT™MĖ1 Ā0@wĘX aR*aA)=ÃČöu’N˛dŲČFâfNMÍꆊ0. ŨQÛmÅNëßūĪ_Û0Bāaeu/v4<â5sīIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆UIDAT™MĖą € DáG,,ÁQd7;*KGPãØQđ‡ÄÄâĢîōH“HŖˆN‰íôąĄÛūlo.yju5ƒąN™E^ŦWčžėš“ũi§#€4œO͜’IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment2Aũ܆\IDAT™-Ėą „0ŅAŌÚJĨ¸ €čBZ˛D#ŋ„ fmŧl4܃đŸP'ō,NOüŨš#ā4ÛRY“e%JeŊxB}ŨŖqM†¯†*ĸéŖęnÁ-܄1iļIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆[IDAT™=Íģ@@…áß„Jp+Q˖ ŗ;m­Nn  Œu0_vŊS'ãD‹ËnŦHÂmzÅ`D7ļ¨Q’S[éœS[Į`”ōŦėŠl1?᧯ Ā 'dŋœaIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆VIDAT™-ĖÁ € ƒápG‘ÉŒLâ(ÖMpŽøc<|/yI[ĩÅĒŗÕo$äđ“.DüŸd=č&1ēl´•Í*ģ”™ŠB^ô¸ƒ†É:ģ_J6mАVIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆YIDAT™cø!ßĀđŊáņá†ū‡ ķ40ė˙ ėČøC;Pî?âF nbū†@3ūŲ70üųßĀđķâ˙@|ūG2 á÷ŸK‰3ē…ĢrOIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment2Aũ܆NIDAT™UĖÁ €0CŅ”<:‚Ŗ¸™D\ŦnŌ,^z(ę—âAÂģ%Ņ1X9Z÷ŽüŌOø¤nKtŒėŽ“ÕfĢ.hRÁYų•{‚wŽ~š|, “čl…IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆\IDAT™=ĖĄ €0Dá× ŒĀ(lFފ1XĨIk4A`‹Ģh(?! >÷îhŖČƒHN,^ŦA´Ä/÷ āM”5Ö7Ûĩ^\öQ'3‹RáŦb/âČbŗVîÅŖĶ į-š˙’âkIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment2Aũ܆NIDAT™5Ęą € áK€ÅŅ4Ą` WҊ5 ˛´°yŋŋX|ŨJ܅=ŖuÔ~k#Lų Ž4†‚"oÂ\˜xÄåȨ-Ādņė˜%OWĮŗIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆]IDAT™=Ėą € EŅk,,ÁQd28‚ĢüÎ5`ė(ˆøˆÆâ/˙æSgŖLFŒäĶ{t™_ßŗéžÔ5õ-Č(úq/˛uƒrÃU!õ8ü§¯nŋė͇29‘ŅIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment2Aũ܆RIDAT™=ĖÁ €0Ņ )Ā,ÅÎ䋍%D<äĒxBâT–w[†6m•M’?×%Xē1WÔĮ‰7ę jÔÉ(3ÜÎbė’Õû†{y{Éņ/7:™4IENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėYIDAT™MĖą €0 DŅC)RfĨŒÂ*‘;DÁĻJk‰&]¸H¯:cÂÁMa¯°¨hŸSēķ–C2j\īöĀĀ%&é'/ēÉúaęšÚ”-5#üCJMIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úė[IDAT™-Ėą €0CQŖ)3ŒvģP¤dĨ Ö0„."8'Š×œüīLÔH”‰8 ‘IŦÎ~ēK.9ˆGûÔqkĶë‚Ū¸,Á-.6CdžmüÚՌ6ņ{ķ<ãx$q§IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėUIDAT™MÍģ €0PŖ)!Ģd4¤ŦeD‘5Ž n¤Ã„(^į<–ˆ>+Íęg7"ļW#Ne] ÄÁа礟ėõV´1/ÚÖGŋđž33-ĶVIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėXIDAT™MË!€0Đ&HŽĀŅv’+ąLėMØ-˜aôŖ&žøŋ-,-'‰R#˛¤ßŊŊÉ-™đé÷xf‹āwÉ:2)ß-bSˇDÕöųu=Ô ÷[ĀIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėQIDAT™UĖą €0Á“]n 9p[GDčŅ€+™„`’Ķū+’åÉĒ<”ĪÎÖpŋ ĒuŅũÁv[äĄK ķO†•čũĘsß?ŋˇ7„šĢ\ÍIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėXIDAT™MÍ1 €0 Đ/{Ö›HppôJuōzŒŨꏈHx„OŸ NDĢÄÆō°ŸK‰qŠöz"\=ĒÅĖ—Īî@ę/åŊ 3‡éV?ûĘäū7TC aIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úėcIDAT™-Íą Ã0CŅo¨ĐŅh%† ¯%#EÖ ΕUIĄ¯8€GŌŗˆ$´ˆ†ø´ĘĻĘ•ãņķ=%æaÎ įƒĘŠÂ0ožļ>KŊĸŨŗģ§ŊŊå˙{wŧôõ…9†ã˙IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úė\IDAT™MĖą €0 ĀG)Rf…lÂ*YQd-EĘŦđ#˜Ž)ŧSQ\aŋßxWÂ"Á…hQ!ą˙ø<Ü)—uœ:÷Ė †åŠP%<.#h%YAŌmĶz7ņ§Ã<9*IENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úė\IDAT™Ėą €0@# Ö`´ė’‚2+R°†# ڔˆxœ×øũF›‰:Äĩœ ČuŽ!āWî…đ,ú1õMŲŖŽ[xnÉ;e‹n›:I‰_ä;•žŒéüIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėUIDAT™MÍą €0 DŅŖĸÍ(-+ Ė…ŧH \é"’9C“â5Ö?s'¸7 S]4ćˆG:1ÕģzĪģW)ŋY`r,秊S­ bhKũŒā €Ÿ?Yfæ\IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėYIDAT™-Ė!Ā Đ.äŽÄÍ&“ģRÉ×`7øÉ ‚„†xâįˇEÛ s7"‘¸ KøY˜w–ū,Yņc ~ÄįĄx>Ë3*0Ā@ƒÍB2÷Cà8‘5”`knîIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙đÃ˙H¸Š ø˙AÂ?>0|8øá3Píc ~ÄĮ¸ˆ  ˆá愚 Ö/Āđ$÷ĶŦÅ=é9jŲIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙˙Ã˙‡@|Šq#3"đ?ŠũâŸ@5ŋCÕ6C1}(×Ī ĀĐĀĀÄ3`æ‚Ø @3 ~0(0ü˙Sˇ˛DNęúÃIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗ;IDAT™cø˙đÃ˙ƒP܈„!ø˙â@üņ ?âãÍÚĄ˜¨ ˜×Ä  @ K9Žē¤¤ĪIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žyŗ9IDAT™cøüÃ˙v fbf( Ä˙ øū ğø9ŋgG¨‡á  0€lĖ|ü9–2 ģ=\IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙đ„âF$ĖøƒáūûTķˆ?ņg ~ÄĮA¸áp0|n@2„*~0H0€Tũ`°P¯>ÅŦč5ÂIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗ6IDAT™cø˙ņÃ˙‡@| 7"aF4 UķˆBņa(nf(`@˙ f€ô4@đ5š>O„ļHĶIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗDIDAT™cø˙üÃ˙ãPÜÅėūĄaHî'âį@üžĄg?Ë3>`€˙Ė ¸ųœũ!ˆū3$ú@9ē_­™ŖIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗ@IDAT™cøüÃ˙ÃPÜ ÅĖü ÃÄ?ŗ1PŨw ~¤vs00Ā0føĀđ‡ĄŒ˙7ą8d;oIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗCIDAT™cø˙üÃ˙Ã@Ü ÅĖüŠ˙@ņ ū TķĒö9Ÿâ~ æg`€„™ ÜÄ  ?€â‘Ė8õ‹đrIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙ķÃ˙H¸Šø˙â>0|âĪ?0<âį@|Čo>PĀĀ €ė˙@qÜPÄ ĀÄ<NúŧIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙øÃ˙Ã@܈†?0üƒa† €øųōA¸áÃa >Äí  @,Æ€ė˙@qdü(ķ‚Ĩ7x–ƒqĮIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙üÃ˙Į@|ˆ¸Š™ø˙âŒ@ Tķˆ?ņg ēį@|üđ†v ŨÄČn^#7|`øĀ Á `>šžœíIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%VIDAT™]Ė!€0DŅI**{ޞGƒ *šŌĸz:ė6˜Ē.C Ä“L>znúÍū:ŠeZh掊RŇūŗ~"˙‰ļØėI/.8ÁŒ@Ė€áķū ÄĖų0<ūāÆ˙0`āÃ@Ü ÄĖ@ØŒŲzø`h?|€á;Ø<E88Ļ…ŨŠIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ߙI%RIDAT™]Ėą €0 DŅ‹2#0 -‹DÁfG Î 4¯°Oúčap|/Re!ŽAÜ/_įŸÚFœnSãg—’<*uˆ-;ęĮÆ ú4QSÚÄYIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment5ߙI%PIDAT™UĖą Ā CQK”"ƒÆk(Xã"¸ ˆ J‘â5ļôa'aaķ%ĘEŒš™mE_­D3ĸ/NLĮO—$Aß'ŪԈ,)Ģwŧũm]3ö¸ä"1IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™EĖą €0 DŅC€2š7ATŦ‰‚5ĨHëŌ9GH¯°|úp8…nThWDüœˇņ—›ŪC+&E2|ęrĶ™Ø-–W§AĸeëXŨ>ŗRĩ\ĨIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%SIDAT™UĖą €0@Ŗ)3Ģd3R°–Gy”"íoˇ†â¤—e?ü& ˛}’dŲ‰>—÷Ž,­N§XÅđŠđĶ$)ęe#Š6W#Nũa!üā7ÔVQÉIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%LIDAT™cxđáÃ(f„bf –â˙ņ{ f‡ˆƒāáŽ?pã÷ūŖáv fĘ!đöƒ@Üx€Ąd?ØLŪA6 AÄõöIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%TIDAT™-ĖŅ €0 Đ+ũč§#¸Š›‰ÎuāG×Hq7¨—ďG —††_‘*MvbLâ™9c§ŒēšItÛÂ|‘,u9Ĩ(s5M?ËA\Ūá]+?.í6ž|PÚfIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%XIDAT™UĖą €0@G)(lÂ*Y%UÖb# Ú§{‰HÁ 4ר˛ŅáȰ° quâūø*ņívŠerzBđS”KCF”Ē]-ÄĻÎú[øe2<ŽgŅIIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%UIDAT™eĖą €0 ĀG)(Y)›!D‘ĩąˆ#0ĸĄ›ĐQ\ņ~ŊĄ7Ąøt.š8ŦŲ­å¸ËBT%6ͰķouSđ>Ŋ2ŠĨŗī%ū÷Ä5ō%<’ė´IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ߙI%TIDAT™cø˙ˇáC3"đv –o`xøŋá;?°bū†Į‡ø`Ãķ ī?00üĮ‚13?ávęáęmš}höƒúŊN5HåeޞIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%TIDAT™]Ė!€0ƒá™˜Ü•v,<‚k5Ap-\`37*Ā ž¤Ékc)t>ĸK6ÅeˇõlQTßZg/ķoĀaĢsxEwŖ7Љmōīšõė59ËŋĪIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ߙI%SIDAT™mĖģ €0PŖ+RŪŒ# Ö1+$ĸ€.X :ŠWųƒļŅåc⒉Ŗ§D/éÍęBŦ…ؤ~bÂÔKâÚųD úžõweŪ@Į4#ڔ‚ŨIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%QIDAT™mĖ1 €0ДŽÁŖØƒ "^,âE Žqû[ÍP7‡ „ B(s˛ÁņtZm˛ė.âRÁm-đë´M@ō&*ąũQG"fž{Ę9•19ļ¨IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%RIDAT™cøa€á#3@1ˆÍ Ä ņ˙@\ÄėPq ~đāÃà ?00<ūÁĀđ âFĒa„âv žæƒ‚ôƒĖæ?Ā´Ŗ8ģqpMFIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment6FŸPIDAT™UÂą € EŅK,~įQ\MBaÉJ KWĀ ´´0j(=9Üâ8šŖÖĀ2“B¯ŠŪ~œ@`¸ˆ,Ŗ†2žũjG…TØ"‡ņø Ģ Ŗc7ËIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸRIDAT™uÍ!€0DŅ•Ŋō¸^̤‚k@¸@q˜â‰ÉîÎrFq ĸ#ö"ļÕfËÎyņúŒI^ž…ÅÄųáīÕI,žkūŲ“n…Õ*l:ŌŠčIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸSIDAT™UĖą €0 DŅŗ2+x´Œ‚”*‹ą€é\ ĀŲÅĶÖ7–t„wÜEqqĶL¯•‘Ãۈ Ü ŧK(ĀĪ,ZÎā_r6ÁvmörJ8UMšä<IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸMIDAT™mĖ= €0Dá/–Ŗ){ą-ŧFd Û¤ (Ŧƒ?Å×=r"Nk522'đH–âŌËĢūlíĒsmĩIƒ~Gģdz?OĪļę|IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™EĖąĀ CQqYÃŖą “ą‰ØĀĨ‹\@qrIņĒV!N4„8 ķ5ØRĸ¯Ēhˆzq{„ĄR˙XęĶīÂĩ }\7‚Ū3NĒ •fIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸYIDAT™5Í1€ К?8z$šƒŖW*ađ$\ãâ`Ā qxSûŅvĸņ€¸ĨĐá”,ņ“|!|°Č,療$ÂÔąōS,[įēCĸdu¯0öĒū´•/‹b5æP ø*IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸQIDAT™cøĪ~€áㆠ>~8Āđø?âã k˙Š™™¸ˆ1Pžųƒŗ˙``hĮĀ@3€ø0Čl ~øhĐÎō9M:ũ Ž IENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸRIDAT™eÍ1 €0Đ@‡­z4§­ˆC¯Qé~7…‚Ļ “ÃÁXˆŗ]ZÍØ™Q&eWį—Ü„}œHĢS†~\ũT^MÛØô•ˆa|Ū}4ĄyJÚ\IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸWIDAT™UÍÁ €0ƒá_:€+t´Ž"=8—t‘ˆ Ô[AQcÁƒ‡ī^ÂãÎâBœ$ZMėŠŦļYq.‡(ˇČ6ŊfÁ`ŪāûĐ"Ąã'w‘åãŽ$ǎ-øį¨‘X5Úīŋ÷ĒIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸTIDAT™=ÍąĀ @Š”YÁŖą Įdl"6p: .‰p‘âŲ–ņ81ÅŊāvàĄ‡‚ĒŦž m;‰#€hž´ŸĻ!OüZ°PĨĢcÔŨz&ÖÅû4’´ŸgIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0ĀÁ{Z‚­ÄRŦ&O[Zđ‘6"i ĪbÜ`>îØå5Ī@”¸"qF‡Ôí>KũXŗĶH`ÕŦܲë€ųĮ āeAŨIęįöˈ{á ĩį5…öûüIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸOIDAT™MË1 €0DŅ‘€–^io—k ¤Økr@mŒãbņē˙1q/ÄEb†&E<>‰üŗĒĮK}ę?\J'šÔJtŊįÎÍî5†Įĸv†IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸYIDAT™UĖ1 €0DŅ/‚)=‚WÉíRzĨ‘^#’ Ä^ˆ#ÚX<–av—žŠžÅš‰Ŗˆ*‘Ų=“sĒÖEøLŗ Ø F÷c‹„>oNÉVŊ_|ÛüãZtŧT4ÍĪĪIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( ;IDAT™c8ĀÁĐĀBPĀČ ˙ŸÁū?Ã˙ķ ˙3üī#yúFĀč‡=}@Cō ˙cĪđ¯ėčaIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( ;IDAT™c8ĀĀĀ `ėÅú?B°<?>°˙đ†˙ ÜÅė@Ė€á˙Á‚ adšō˙ 2ÕĖĐIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( ÄíPĖÁ˙@XžáūaÁp`˜üûœ×-ŦŠ nųIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( :IDAT™c8x€ĄAHū1ƒũc†úã ˙¨á?Ã~ú'Bė~€Ņd$Fü`$ †đ•ã^RúIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( 4IDAT™ch``"F0bf°˙ĪPF˙č>Ígø/B˙ėAčũ€Ą0ô ũŠ#ķ!MĮÍKIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( IIDAT™cø˙΁áũ† (؁ĄųÁū@üņƒüà û`øŠ›¸ˆŲ0üa~ūÅ?Đđ4 T  5 ũŧ=IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( :IDAT™ch`@@Æū‡ ōė70ÔˇCđv æ‡ā@üG‚@ņ,øŦÖž”ą&Ú Ŋ"IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR]ŗ w pHYsb&2 tEXtComment71—( 3IDAT™c8ŪĀ€L üm öĪę1ԟcøD}`$ĮđĪŠūØ1üŖ8PęO¤ã<ÍáIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( AIDAT™c8ø‘Ą„@€„ä2Ø?f°Î`œá;Ã˙~0âgø/ĪđOžáŲ3ü€Ą¨č‡<Ų3üŠx´F͞ÚIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( 9IDAT™ch`€Fâ?ĖP˙˜á˙s†˙īūŸgøßĪđ>Ãy†`ôˆė~€Ņ"ûī?)!„:õĐwIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( @IDAT™ch`dh`€F†ųŸūŅc†˙‡ūgøßFü ˙åūŅy†ō ė !  PĘ„ūØ% &ŽRÚ@IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜\IDAT™Uą Ā Ĩ d„0Ŗ Qd-ĸ,ō#PR (†¤Iq–Ŧŋˇšƒh›gWK”9:‹ŌãÚŗQŨËô“h͜:=đÖ ãķžå=qęëÚĪąëûn2fÜŅV‡IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜[IDAT™5Í!€0DŅO*ŊRo†@ šŌD%W€ôÅU4Ā.ņĖd2CõBqB…XL`ūLjÔ|9qÍn}Lx%˜Ņ.ôŧš~ēS›ZuûHíīäo6ŋnĮæIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜WIDAT™UÍĄ €0„áŸT YŠŖ° AT˛ŌK*ŦĐ^‚yÁ0ˆ/g.wÄhø`4Œę™]ŽČ”Ī*‹6Kī%Q:]æ”jPϐëo{h7´ßŪ¯HvÉČ0õĢWˇIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8Ą(5˜SIDAT™-Íą Ā DŅ‹((UOJ‘’•ˆ˛ˆŗt.Rä)^åoŧ#–ˆķ%šÉX€˛e‹SčËĄé WWkŅW߾͉"mĒŊcK›?Ū*K̓GIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜YIDAT™UŒą €0R|ÉJa3PŠ”ŦäTŦ6øō‹8Bįˇ^ļFôD܍¸œ¨žq†ĐžˆC˙}#¨åņ‘Ĩ@‘$lĀ:ūÔxˇZWG}×Î0>J‹/˙ƒŽGÃIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜SIDAT™cøW€áû†˙ø˙āÆíPÜ ;”?Ā Á@˜†600~ĀTËĀĀÄü? Čîcy>ņīĮ@;Ž\ē6Ķ˚m*IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜^IDAT™=ģ €0C(R˛BFË(t)Y)ˆ‚5eŖģ"B8 Q<Oō=>‰f §âĪĄwĸČSf‚¤ Ę!ĄŽō0"›č›XÆŊ?{z{Ē6Ly|lƒ7‘éË •IENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜cIDAT™MÍĄ €0Đ#Ŧņ7a•Ž‚C˛¨JV8‚¨-ŠŠh(G@ ^.?šÜGkDí‰äˆc'b"BņØ>“<÷Zˆåõ(Š# ”đČŖ!Ō’Šo˜Ģ\ڐX‰Ŧâ۟mā š@@ûÜØGˇIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜YIDAT™-Íą Ā CŅR°Ŗ1Bļ`-"ŠŦqQ¸ō „r@Š'š°lF,ŠđXæuÍwßfž\= ›ū}%ģÄ[Ŋ§‰bP:Äile¤Ĩõŧö}aũõC>~5Ēēá%IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜]IDAT™-Ęą € FáĮŦĀhŒbgÉŽĸą°t…K@ŦÄĀ’ËWŧËOļB2BD8ĸįLŽ’`ī6íU˙KfķĢņĘĄîAwA#ŧ›=ļH3uĨzÔĨÆÖÖo<’Ŋ6ē¯IENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜`IDAT™5ÍĄ €0DáGȎĀ*­dĨCu&l Ļ$üĐ >÷rGuĸô"wb "&ąfßĪbæ,ĻS„]hÉúd}âå‰Á:ÁÁ•fŦ?˙YĢíŪâ¸ėË6ŠĶ˙Ŧ4!1¤5IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜XIDAT™MĖą €0 Ņ‹R°FFË.ŦJ‘5ą€K‘…E (žô û˜YШ ­ÜVč?-\V9U´(‚ÅŊQb†@SØ'žlūíîŅ #:īo4<ËN—5ĩl^ÖõIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜cIDAT™Eą €0((Y!Ŗũ*T”ŦDAÉ –˛@¨Hņ"˜‰âô/ŋßF­Ä=Ĩ'Ε¸2ąÃŅÚfą‰¨[ė~dčĻiHQžüzŅũgqénĘ"’2ĘD¸úÔũÂū=TūŠOIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜]IDAT™-ËĄ €0á#ˆJVęf ŦôP]Ŗ-Á@Ōū&ŸģŖ âéEęÄEHžđx–f6[ēuąI؇į›ŦØ‡õā2 UŠ1ÉĖ`…ˆŊøĪâ˜ÄÅ/†×āúdŨ)ôc.ļĖ}|‡8ĢĀ2ĻN ŽĐ´ŽŧĨ^ƒ‰åûî;˙°Rމ=ËĨīIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/OIDAT™UÍą€ CŅtŒá(ēkÅŖp 8€ŽNŋ…§¯Čå.Ņ\ŦŦ–­\­„Đۇ^EJȨäAū°…x`36k?,ķUøœĢ/ūŧ89a&šÎIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment9Ö/SIDAT™UĖĄ€0DŅī"I´€¤ŦôA]IwŠp âšŋKíbo"KlC"ØBĐ#ūd1w$Đ —Eē÷¯DuÅäÍĮŋK§5 ›uÚ8Ŗ]rIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/WIDAT™UÍ1@@†ŅOJnā:{ˇ-\ëą7˜D3B0‰(¯~\­đZX%Ę,ŲŲShœŸ)d{-ĄŦ`œÜūIlĄšĐū*G¸ãęÅ5ę¸_8 Ą=gIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™]Íą €@DŅCKpË0ŗ•ëå;šFæ:X¸dA6 ^ö‡Á}ąžã"úT—0,?ÕSåhÅ@â0<ņ™ÚSš3Ä.úŠ/nT:hļ"ÕIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment9Ö/XIDAT™eÍ1 €0ƒá€CG¯ãÖk9Ļ8x­J/ŌŌ yb|ėÃôÃÍ*˙ ;¤Z5ôĸ\•ĮŠ´éŠ!é¯-r/Ī:ēĪ]IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/WIDAT™MÍą € DáK,,Ĩ´cFŖ¤5,Fâ"°Á›ŋ0Á‹&jņ¯zž°…čhŒØ%3 ›Ãô“oxmę"59pu8S°O“bQøčru&¨Ÿy^^‰9ķamGIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set12.pa000066400000000000000000000666031506303110300215600ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 200, yres = 200 ‰PNG  IHDRØņ{B pHYsÂÂnĐu> tEXtComment0¯ķŊĒ%IDAT™cø Įp€Ąš‰ĄũC˙~Tl?Āp°‰á9+2z/ĀIENDŽB`‚ pix[1]: xres = 200, yres = 200 ‰PNG  IHDRØJŠō pHYsÂÂnĐu> tEXtComment0¯ķŊĒ6IDAT™cøÃßĀđšácÃÁ ‡000```GÃí@Üü¨æPm#õüāoÕ )œ9ĮAIENDŽB`‚ pix[2]: xres = 200, yres = 200 ‰PNG  IHDR7ˆÂĖ pHYsÂÂnĐu> tEXtComment0¯ķŊĒ*IDAT™cøgĪđá3ÃF†Ãš0´@AÍ@‚‚Ô|`ā cČe 8IENDŽB`‚ pix[3]: xres = 200, yres = 200 ‰PNG  IHDRüÔi pHYsÂÂnĐu> tEXtComment0¯ķŊĒ,IDAT™cø_Īđƒá3ÃF†ƒ˜0°@AĖ@‚€•ũ`˖”hr„žIENDŽB`‚ pix[4]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnĐu> tEXtComment0¯ķŊĒ6IDAT™cø˙ŋá{Ãæ†Œ 60~ĐĀĀüŒŲŅpķ  üõ؃ļŠū>+IENDŽB`‚ pix[5]: xres = 200, yres = 200 ‰PNG  IHDRÅr‚ pHYsÂÂnĐu> tEXtComment0¯ķŊĒ-IDAT™cøÁĪđ™áÁA†ÃÚ?€;ũ! ûøøÃ‡ ˜~°ļE™ŌM;íIENDŽB`‚ pix[6]: xres = 200, yres = 200 ‰PNG  IHDRüÔi pHYsÂÂnĐu> tEXtComment0¯ķŊĒ.IDAT™cø˙Ÿá?Ãf†Ė š0´?``˙€@@.P°ų!HPŲ~Oo}zōIENDŽB`‚ pix[7]: xres = 200, yres = 200 ‰PNG  IHDR7ˆÂĖ pHYsÂÂnĐu> tEXtComment0¯ķŊĒ1IDAT™cø˙Ÿá?Ãv†Ã‡Ú2´dh˙ĀĐFíôáøC†Ã0U"ĀV#ļĨČIENDŽB`‚ pix[8]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnĐu> tEXtComment0¯ķŊĒ6IDAT™cø˙ŋáÃæ†Œ 40~ĀĀpøC;nFŽ@5BÔ`oŅÖ‰ö•0ˇIENDŽB`‚ pix[9]: xres = 200, yres = 200 ‰PNG  IHDRØJŠō pHYsÂÂnĐu> tEXtComment0¯ķŊĒ6IDAT™cø?ŋá{ÃÆ† 40ūĀĀĐ Åė@ˌ„Ē9T T˙ŊAin'IENDŽB`‚ pix[10]: xres = 200, yres = 200 ‰PNG  IHDRÅr‚ pHYsÂÂnĐu> tEXtComment0¯ķŊĒ-IDAT™cøÃĪđ™áÁa†Ã`hĸ ėôųHđāC†Œ@e¸Ég8ušIENDŽB`‚ pix[11]: xres = 200, yres = 200 ‰PNG  IHDRá-Š pHYsÂÂnĐu> tEXtComment0¯ķŊĒ+IDAT™cø˙áÃ6†L ‡0´CĐū ũ`i>Rķ€ øûnwlŒIENDŽB`‚ pix[12]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnĐu> tEXtComment0¯ķŊĒ1IDAT™cø˙ŋá{ÃÆ†@|đAÃá Í013700>€¨ũĀ Ö ­BíYtbIENDŽB`‚ pix[13]: xres = 200, yres = 200 ‰PNG  IHDR­¨į pHYsÂÂnĐu> tEXtComment0¯ķŊĒ+IDAT™cø Įđ€á`Cķ†ö ė`Ä˙ĖhŖÃ‡0•r€F%‹IENDŽB`‚ pix[14]: xres = 200, yres = 200 ‰PNG  IHDRá-Š pHYsÂÂnĐu> tEXtComment0¯ķŊĒ-IDAT™cøWĮđ€á`Cķ!†ö ÄūŠø$Xäø#†ƒ‡>°1üÍ}+ąũ™IENDŽB`‚ pix[15]: xres = 200, yres = 200 ‰PNG  IHDRņĐ pHYsÂÂnĐu> tEXtComment1Øô<IDAT™ch`F†Ã°$…“^!ÔmČIENDŽB`‚ pix[16]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cø€Ą80<8Āđ7:VŲā-ŽIß!dôIENDŽB`‚ pix[17]: xres = 200, yres = 200 ‰PNG  IHDR JĖræ pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cø€áC=p`xpĒaŠhŸāŽsÅIENDŽB`‚ pix[18]: xres = 200, yres = 200 ‰PNG  IHDR 'oģK pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cxÜĀĐĀB4āCe ä¸d&VęĢIENDŽB`‚ pix[19]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô< IDAT™cø€áC=8€‚}ˆĀ1ÛŖ°aąaIENDŽB`‚ pix[20]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cx€ĄŒ‡€jĀ*_0™aˆIENDŽB`‚ pix[21]: xres = 200, yres = 200 ‰PNG  IHDR ė3hî pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cøĐĀĐĀBâF ĘČ~šĶ IENDŽB`‚ pix[22]: xres = 200, yres = 200 ‰PNG  IHDR 'oģK pHYsÂÂnĐu> tEXtComment1Øô<IDAT™ch``€  ô:ĐRÃR Îæ‰úE{ãIENDŽB`‚ pix[23]: xres = 200, yres = 200 ‰PNG  IHDRņĐ pHYsÂÂnĐu> tEXtComment1Øô<IDAT™ch```h`8Čpˆ!đ06e˜Ã š >IENDŽB`‚ pix[24]: xres = 200, yres = 200 ‰PNG  IHDR #škv pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cxÁĀĐF€(áCˆ„ŖH" P•šrų_Č <IENDŽB`‚ pix[25]: xres = 200, yres = 200 ‰PNG  IHDRņĐ pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cxĖЄÁđ!D‚ ē īÔv›DIENDŽB`‚ pix[26]: xres = 200, yres = 200 ‰PNG  IHDRņĐ pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cøĪĀĀĐĀpá0<”aŠô ŨõŪiķIENDŽB`‚ pix[27]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô<IDAT™cø€áC}8€@Ā™}Āĸ A/ .>žĮIENDŽB`‚ pix[28]: xres = 200, yres = 200 ‰PNG  IHDR ĖXH pHYsÂÂnĐu> tEXtComment1Øô<IDAT™c8ĀĀĐĀ@ō€Ã:€@ ĀŖ"aRöÚ5IENDŽB`‚ pix[29]: xres = 200, yres = 200 ‰PNG  IHDRzč pHYsÂÂnĐu> tEXtComment1Øô<IDAT™c8ĀĐĀp€á‰3ą~ !ą–gIENDŽB`‚ pix[30]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆4IDAT™cø˙áACƒCƒƒÃ†0ôĮ€á0|øĀđđÃá Í `îyĒėIENDŽB`‚ pix[31]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnĐu> tEXtComment2Aũ܆1IDAT™cøPĀp@„æ10üƒ úcĀđ§€áGÇ 0lŠa`ēĄiķM@0IENDŽB`‚ pix[32]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆2IDAT™cøųáÃ†††p$B ~0|ĒyĀđđÆŒ‘‹ĢéHIENDŽB`‚ pix[33]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆4IDAT™cø˙á@Cƒƒƒ„ƒÃ2Ą  >~`xx€ápC3âô<4ԁIENDŽB`‚ pix[34]: xres = 200, yres = 200 ‰PNG  IHDR cLē: pHYsÂÂnĐu> tEXtComment2Aũ܆5IDAT™cø˙ƒáÃ † †$B,~T0|øÁđđÃà  0Ā*ŲŖˆųIENDŽB`‚ pix[35]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆4IDAT™cø˙áAƆ= ˙‘߆ >0<üĀpøÃᆠH&=;Įü‚IENDŽB`‚ pix[36]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnĐu> tEXtComment2Aũ܆2IDAT™cø˙ƒáCƒqp0Ėá`øA ôĮ‚áGÇ †`hl`ėÃzBGc}IENDŽB`‚ pix[37]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆.IDAT™cxđá€CƒC‡ÃddĀđˆ >|`xøáđ†F(h`6 QĖéˆIENDŽB`‚ pix[38]: xres = 200, yres = 200 ‰PNG  IHDR cLē: pHYsÂÂnĐu> tEXtComment2Aũ܆:IDAT™%Â; @Á7VRÆXˆ*F8訁đI¸'đÂH˜ B:ėW؉õf"ãÁ4šĄü[6Y¯ƒEIENDŽB`‚ pix[39]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnĐu> tEXtComment2Aũ܆0IDAT™cø`Áđ@‚áCÆČH‚áÏ † 0<ĀĐĀAîā@Ĩ†ņIENDŽB`‚ pix[40]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnĐu> tEXtComment2Aũ܆2IDAT™cøPĀpĀ€ĄA€á‡Ã?$ôĮ€áOφ~`x|€áxCđ‘ŧ?ĻÛ/IENDŽB`‚ pix[41]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnĐu> tEXtComment2Aũ܆6IDAT™cøPĀpĀ€ĄA€ĄC€aŸÃ?† ôĮ„~0|øĀđņÃã ‡€ÍAHįsIENDŽB`‚ pix[42]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnĐu> tEXtComment2Aũ܆4IDAT™cø˙ƒáÃ ††>† ˙Á$I0üą`øQÁđ¨æÃÁ ŋ‚P눊IENDŽB`‚ pix[43]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnĐu> tEXtComment2Aũ܆,IDAT™cøđá€CƒCÃ?$ôĮ„~0<üĀpøCsëE,bįú^IENDŽB`‚ pix[44]: xres = 200, yres = 200 ‰PNG  IHDR GŌĄ pHYsÂÂnĐu> tEXtComment2Aũ܆3IDAT™cøđáÃ†††{ ˙ H„ū0ü(Ą?`8ČĀĐB K,v€˜IENDŽB`‚ pix[45]: xres = 200, yres = 200 ‰PNG  IHDRâŧņú pHYsÂÂnĐu> tEXtComment36úė>IDAT™c8ĀĀĐCM, įxūņ0ü‘aøaÃđŒČ0<āaøĀÂđá?5@Q?4°0āax`퀠ŸĘɤIENDŽB`‚ pix[46]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úė=IDAT™cøĮÁĐĀ2 $ūX0ü°`øPB~0<’ €R ˙!¨Œä€z€Ú%X˙Ā)õŲÛIENDŽB`‚ pix[47]: xres = 200, yres = 200 ‰PNG  IHDR øŨø, pHYsÂÂnĐu> tEXtComment36úė:IDAT™c8ÃÁĐĀE} ˙8ūH0üą`øaÁđĄ„X0<ā`øÁÁđŸŒ`ˆĄ¨ ¨]ëžbšŦJFIENDŽB`‚ pix[48]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úė8IDAT™cø˙ƒĄ„€ ƒáà †? ?€¨‚áI0|J10üo@AķÁ8X„ÛdɋLIENDŽB`‚ pix[49]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úė5IDAT™c8ĮÁĐĀ} ˙8ūH0ü°`øPE€l† ˙!¨ú@zpÕš`Ķuã—IENDŽB`‚ pix[50]: xres = 200, yres = 200 ‰PNG  IHDR)ā"_ pHYsÂÂnĐu> tEXtComment36úė9IDAT™cø†ĄÚYÎņ0ü‘aøD6  ˆ‡á Æ˙@Ԁ@ũ `], x؃ēËĄôIENDŽB`‚ pix[51]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úė>IDAT™cø˙ƒĄƒ8x8öI0ü" † *@čY0< r0ügŖ0b`ëj`8`ŗØA&üsIENDŽB`‚ pix[52]: xres = 200, yres = 200 ‰PNG  IHDR Âי\ pHYsÂÂnĐu> tEXtComment36úė:IDAT™cøūƒƒx8öH0ü°Ą ôˆ,9ū3€QŲ30đq€´7H0¨ö´ š%IENDŽB`‚ pix[53]: xres = 200, yres = 200 ‰PNG  IHDR øŨø, pHYsÂÂnĐu> tEXtComment36úė;IDAT™c8˙‚Ą€ä<†? ,~X0|¨Ą@dÁđ(ČÁđŸŒ`ˆƒĄƒá€Ը՘IENDŽB`‚ pix[54]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úė@IDAT™c¸˙ƒĄúæq0ü‘Ą ?*>T0<" †@q†˙ ˙HžĄƒá€P%h‘[wŦ!IENDŽB`‚ pix[55]: xres = 200, yres = 200 ‰PNG  IHDR “ pHYsÂÂnĐu> tEXtComment36úė5IDAT™c8 ĀĐĀ;ū‘φ@ôŒ >ūCPŲr   îŦA_€IENDŽB`‚ pix[56]: xres = 200, yres = 200 ‰PNG  IHDR æI!Į pHYsÂÂnĐu> tEXtComment36úė tEXtComment36úėAIDAT™c8ĀÂĐFm, ķxūņ0ü‘aøcÃđˆj>‘ à8 Ã˙†˙ ˙€QÃü–†2Ŋ‘´=FšIENDŽB`‚ pix[58]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment36úėAIDAT™5Ë1 €0@Ņ7ž„J9iŒU€´ Ĩ:24”BBōļŸo5T„#Üa#]ŠoŸÔB_‰šÔģ÷=‹–.˜ŖŪ{׋IENDŽB`‚ pix[59]: xres = 200, yres = 200 ‰PNG  IHDR)ā"_ pHYsÂÂnĐu> tEXtComment36úė>IDAT™cø˙‡ĄúXūņ0ü‘Ą6 ?j>Ø0<āaøg`øD 4Ÿ…áÝiör‘RĘIENDŽB`‚ pix[60]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment4¨žyŗđ0<æa8ÎÃĐÎÂĀÆ 5˙yū÷€ĩücHãÜS˅IENDŽB`‚ pix[61]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnĐu> tEXtComment4¨žyŗ:IDAT™-Ęģ ŅÃ"{̐Å÷pഐDü¯<ŧãW\°k SBSŠ’‘Ÿ…ŗŊųĪÜÖôIENDŽB`‚ pix[62]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ2IDAT™cø˙á˙1†˙m`ÄÆđ‡á}lcxÜÆpŧĄŊ`ʐÃęđ¨Ú~ī”IENDŽB`‚ pix[63]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@Ą pHYsÂÂnĐu> tEXtComment4¨žyŗ:IDAT™MÂÁ Ā DŅ?¤đ°¤ąˆ•lB.ÄQry<üāÄĮ[L1D?hĸ2¸ÅĮŽŋÁÉžQ’Wü¤IENDŽB`‚ pix[64]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ;IDAT™cø˙á˙#†úC ˙›@čÃ6†@ÔÆđąáqÃņ6†ö&†ŠiŖc0(ÂBYôp2‘ŠIENDŽB`‚ pix[65]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ tEXtComment4¨žyŗ:IDAT™5Ę;҉ÂēåÆJ(ÔJ…¸ŸÉ)5TQB†똎áéž)F6/qÎø‹kŠ5č‚p IENDŽB`‚ pix[67]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnĐu> tEXtComment4¨žyŗ:IDAT™cø˙á˙3†˙m`ÄÆđáÃ6†l Ûļ1fchcb€€&˜Ę6$-L ˙í ‚—ŊģIENDŽB`‚ pix[68]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment4¨žyŗ6IDAT™cø„á ą0ücaøÃÂđƒ…á ÃG†Į- Į[Ú[  ¤ĒŽ…ˆ„˙ščÆIENDŽB`‚ pix[69]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ6IDAT™cøŒáą1üccøF?Ø>ļ1 tEXtComment4¨žyŗ5IDAT™cøŒáą1üccøÃÆđŒ>°1<`c8ĖÆĐÎÆ˜@ʐŅ?&† @bëāŊ†IENDŽB`‚ pix[71]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment4¨žyŗ;IDAT™=Ę! Ņ {pςW2Å,ƒ¸Âá… ƒŧá Æ5ŽąÅK ŅE•xrøa86_ë.ÃK IENDŽB`‚ pix[72]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ9IDAT™cø˙Žá˙1†˙m`ÄÆđáÃ6†l Ûˇ1oc`fb€€ 0•pÄÄđÆ^Ņ(ŧ;IENDŽB`‚ pix[73]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnĐu> tEXtComment4¨žyŗ9IDAT™=ĘÁ €0ĀĐĐCFˇk ]Ãzô ˙ˇBixĮyūB>yĨË#MnŠ"ĢŗŦs‹B0 :å5˛Ĩ‘´IENDŽB`‚ pix[74]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment4¨žyŗ5IDAT™cøŒáÃ6úĮÆđ‡á}`cxØÆp˜Ąū3ˇ!´Eū15ĸĨ1ä.šIENDŽB`‚ pix[75]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cøÃĀđŒ>Ô0|øBū0<„ĄƒØ0axĀÃđŸ…á baøĮÂĐĀÃĐ hĖa،IENDŽB`‚ pix[76]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment5ߙI%6IDAT™cø˙ƒá=ĸ 0<ūÁpŒšÁ¨ņCCCƒÃ †¨(Â`B ?ž$WcasIENDŽB`‚ pix[77]: xres = 200, yres = 200 ‰PNG  IHDRâŧņú pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cøÃĀđƒáą0<¨axđ„ÂЁ? 6 dđ0ücaøŠúXx€˛61Ĩ‹%ė’IENDŽB`‚ pix[78]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cøÁĀđ‚TüaxF˙0ŖÆ? 5 2 xūņ0ü"0s€H†ĄÁ4ī7īWŧIENDŽB`‚ pix[79]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@Ą pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cø˙Ÿá#Ã02ę>ŅzđŸá!˜| Īđ€Ÿá;à jFBė @ÄĪp@¸xC˜čˇIENDŽB`‚ pix[80]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnĐu> tEXtComment5ߙI%8IDAT™cøÃÄđƒ„>QũcxC€¨Žá€Ã>†l ˙¨ †ØúŲø€˛vg?ĮGĩ ‰IENDŽB`‚ pix[81]: xres = 200, yres = 200 ‰PNG  IHDR õÈk pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™5ÆąEÁWʕĻ"u6ž„ã˜Ų`qcđHtQDũšČ"‰hLcķøwŋ#†:%oNaäIENDŽB`‚ pix[82]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%8IDAT™cøÃĀđ‚l>Ô0|øEÁčā†6 dūņ0ügaøß‚„XúXxČJëÖÛKÖ°IENDŽB`‚ pix[83]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment5ߙI%‘Ç ôāÃC0:øƒá€Ã † ˙†ú8$€j‚čBÔ¨›IENDŽB`‚ pix[84]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jų pHYsÂÂnĐu> tEXtComment5ߙI%7IDAT™cø˙ƒá=ĸ Áč0 5ƒQCCƒÃ † ôŒūI€„ƒÁ¤“qšKIENDŽB`‚ pix[85]: xres = 200, yres = 200 ‰PNG  IHDR)ā"_ pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cø˙‡á}"†5 ū€ĐÃ? ač€ Ã†?< ˙YĐCƒ ÃØNւœ[IENDŽB`‚ pix[86]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%:IDAT™cøÁĀđ‚ū€Đƒ? Áčā†Ã˙04Ø0aøD< ˙¨ŒĀl††5R$3§Ũ+IENDŽB`‚ pix[87]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment5ߙI%5IDAT™cøÃÄđƒŒę>Ņ?úøá! °c8 Įđá?Ã˙6ÔĪÆĐĀĮĐ d‚Á|ž#IENDŽB`‚ pix[88]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment5ߙI%6IDAT™cøÁÂđá Ã? Áčņ†ÃH¨Ą†á€ Ã?†˙<(识5QÖ5äMψIENDŽB`‚ pix[89]: xres = 200, yres = 200 ‰PNG  IHDRâŧņú pHYsÂÂnĐu> tEXtComment5ߙI%9IDAT™cøQÃđŠÔ0<øÃpāÃAjüÃĐ`ÃĐ Ãđƒ‡áÃsexd@˛j:ēx;IENDŽB`‚ pix[90]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnĐu> tEXtComment6FŸ=IDAT™5Âą €0ĀÃę;[Gq´” ×zp7°üBˆ"xœQFÜĄVWs–ŖlĨ7ÂÄÜŋųīvō8Ū¤Zļ6ģIENDŽB`‚ pix[91]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment6FŸ>IDAT™Æą Ā Á—)ŌyFEÍR!¸¤@‚tőƒtRXĘŦD#ßåŠ Ĩ˙žëä=œn„0t˛0Ŋļ]°ÉIENDŽB`‚ pix[92]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment6FŸEIDAT™Âą €0 EÁWDJÃ…Ņ(ž”"%+™MĖ.SX)§cK|yžŧ‰%j¨ čĸÕšąwã^ˆã¤–Œœîž IENDŽB`‚ pix[93]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment6FŸDIDAT™cø˙ƒá˙†˙ ˙ØūČ1ü°cøPĮđāÃà ęđ14014610?``‡Ąö ‡čÃ&†lĐ8cˆ/ÛŦIENDŽB`‚ pix[94]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnĐu> tEXtComment6FŸ?IDAT™cø˙€áÆ ,T0üBÍ?,8€€Ŋˆ@û†ö Í €ē$(ŪŒ-ĐJvIENDŽB`‚ pix[95]: xres = 200, yres = 200 ‰PNG  IHDR*ōt pHYsÂÂnĐu> tEXtComment6FŸ@IDAT™EÂą Ā Á\P2BFa4lą˜ŲÄ#Pē@rƜŽē”Rp!…|9ƒ˜øĀ;ÚPÁŒĩYņˇ?„pŲ?›0¤âílIENDŽB`‚ pix[96]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment6FŸBIDAT™-Âą €0†Ņ‹”7’Ŗ‰$EÖ:q‘Ë)-ä?Aōx¤H'A¯ņė˃C\ŗĐ*Ũ˙ąļāvF% Ķ>:•/ŦJ!:IENDŽB`‚ pix[97]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment6FŸDIDAT™Âą €0 EÁ'#….#0 Ŗ!KŦõŲÄ#¤Lp§#;)ŖWÚNċž^pc1Vũcž‚S܎Œ(´:Ĩ“ēúyAIENDŽB`‚ pix[98]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment6FŸ?IDAT™Âą Ā ÁtÁŖFY‹xF ¤@˜„Ķá Wf`ũĻ-ꩂ^h¤d’‘ę˙9‹ņÚ7n„1Ä0ÉŨôIENDŽB`‚ pix[99]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment6FŸBIDAT™%ÂÁ €@ EÁ‡BŧY‚ĨXšŦ^lëË6’RĀ’(8 ”(ÆØˆƒH tEXtComment6FŸ@IDAT™cø˙áÃ?†?< ?l>üaxđ‡áá†ÃČ0`ahl`h>ĀĐūE70<`aøĀūZ•xÉIENDŽB`‚ pix[101]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment6FŸAIDAT™cø˙€áÃ?†?l øØ1<¨c8øĄˆäؘ˜¨ũ5`hdb8ĀÄđ¤ ?´LxqđtIENDŽB`‚ pix[102]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment6FŸCIDAT™cø˙ˆáÃ?†?L ?ä>Ô1<ĸ ˙14Ø14đ14°14010``‡Ąv0j>Āp‰áÃ>¤ÁĀéžzIENDŽB`‚ pix[103]: xres = 200, yres = 200 ‰PNG  IHDR^"â$ pHYsÂÂnĐu> tEXtComment6FŸ=IDAT™-Æą @Ņ_(d4Å% Ĩ•.ąČŲ@Š„H^ņØĘ†Ķ3}ŌžQ@˛^ÅČö_ƒî\>6jė°“IENDŽB`‚ pix[104]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment6FŸBIDAT™ÂÁ Ā @Ņ…t Géh^<¸Vh‰ä(Ĩ$ÅĮ#_RIáĢŦ oX0­¨ …Ž ã0NßÛį–üĀ ņj+›IENDŽB`‚ pix[105]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( 8IDAT™cø˙Ą†ú1üĸ&†˙m ˙Ųūņ1ü“cøAv ?ę>€Ņƒ Á¨„°Yá“ä˜KIENDŽB`‚ pix[106]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment71—( BIDAT™cøĄŠæ`øˆáÃ6†˙| ˙€HŽáŲ1ü°cøPBū1<üĮpđÃá Í˙Ú˙^}âã3ÖIENDŽB`‚ pix[107]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( 8IDAT™c8ĀĀĐCķ1üĸ60âcøDr ôĮŽáÕ1|Ŗ˙@čā?†Ã˙š˙1´˙€ØÂWŌä3IENDŽB`‚ pix[108]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment71—( =IDAT™cø˙‡Ą øæ`øßĀđŋ…á? ũãaø'Ãđˆl~Ø0|¨Ą@čā†f0b˙?‘h°3€xIENDŽB`‚ pix[109]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( =IDAT™cøßÄĐĀEí ũ€" ÄÄđŸáũacø!Bė>Ô1<øB˙14ūchūĮĀüE•.ģŠÍâIENDŽB`‚ pix[110]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@Ą pHYsÂÂnĐu> tEXtComment71—( :IDAT™cø˙Ÿá#Cõ72üod¨gf¨"v0âg¨‘gøDö ôÞáC==øBÁčđ(ĢødIENDŽB`‚ pix[111]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment71—( @IDAT™ch`a€ū†ũ ˙[ˆ‡áÉ0ü‘aøaBj>üaxđ‡áᆃ˙04˙a`ūÃĀūĪöÔĀbP#IENDŽB`‚ pix[112]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment71—( >IDAT™c8˙‡Ą æ`ø„á Ã˙†˙< ˙d@č ÃŸ†5 €č=üÃpđÃá? í Sc‚Ę}bTIENDŽB`‚ pix[113]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment71—( =IDAT™cxđ€Ą„æĄ˙- ˙{ūķ0ü—aø'ÃđĮ„~ԀĐ úÃđŒ˙a8ü‡áø†ķĸ9cĮŊžIENDŽB`‚ pix[114]: xres = 200, yres = 200 ‰PNG  IHDR‡“ pHYsÂÂnĐu> tEXtComment71—( 9IDAT™cø˙Ÿá#C060ôdøDÍ`ÄB˙øAč<ũ°gøDõ €č?ÃA:üŨAfŽAIENDŽB`‚ pix[115]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment71—( 6IDAT™ch`ah`€ĸū ˙¨ŒXūķ0ü“aøF?l~Ô0|ĸ? ū0„Ąfk‚\p‡ŊIENDŽB`‚ pix[116]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( 9IDAT™cø˙Ą€äüC ˙¨ Œøū‘à ˛cøDu €čà Á¨ŒÚ˙ē–žWF´XIENDŽB`‚ pix[117]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment71—( @IDAT™cø˙‡áxCõ`˜€á?ĩ0üīaøĪÃđO„ūØ€ĐúPÃđāÃÃ? Á¨ųCû eö +MzIENDŽB`‚ pix[118]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment71—( AIDAT™c8øĄŠú0ü?Äđŋ‰áÃ6†˙| ˙€HŽáÃ;úPĮđˆū1ŖÆ Í˙Ú˙ŦCÃöK›?IENDŽB`‚ pix[119]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment71—( 8IDAT™cøßÃÜ ˙ūŗ€Đ?ú#ÃđĮ„~Ô0|ĸ? ū0Ŗæ? íØAāâö”%gIENDŽB`‚ pix[120]: xres = 200, yres = 200 ‰PNG  IHDR^"â$ pHYsÂÂnĐu> tEXtComment8Ą(5˜:IDAT™cøaÃđ€‡áp Ãņ í`d<Âđ€$DXÚ@âũø€Čö ‡€Äđ@>1°ėIENDŽB`‚ pix[121]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜8IDAT™cø`Ãp€‡á CsCû(:x€á ÃI10°70đŖ ė`5@õ@dĶ6Œ?›éIENDŽB`‚ pix[122]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜4IDAT™cø˙‡á Ææ†öä€Ņ†vūūPÔTĶĀœߋ• IENDŽB`‚ pix[123]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜5IDAT™cøSÃđ€‡á C3Cû(jn`hl K5°0°30đ70đ€"v°šœÔ~ÆÁXIENDŽB`‚ pix[124]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment8Ą(5˜7IDAT™%Šą Ã,úˇ1đVNá F(H^‡ŨX ‚îÄNŊcĻWo NĻFú‡‘ø¸ļBIENDŽB`‚ pix[125]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment8Ą(5˜6IDAT™cø!Įđ€áCsCķ(:x$ĸ Ę200``ĸ í@j› jČũī6aIENDŽB`‚ pix[126]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜;IDAT™cø˙‡áƒ Ɔæ†ö Ô|€ĄņCÃ(jc`ho`āĸ ÄVTđ€Ū‰a‰á‘9IENDŽB`‚ pix[127]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment8Ą(5˜9IDAT™cø˙áÃ6†L 0~E€D0AĨ€ˆšũû(j>Āp€¤āП—÷gĢIENDŽB`‚ pix[128]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment8Ą(5˜=IDAT™ŠÁ @!ÂŨZDŽUq‘ŽāōŸr(i¸•“qBeöO ëÉwe”"Š™‡i†QDđ´‡(€ĩ2IENDŽB`‚ pix[129]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment8Ą(5˜?IDAT™Šš Ā0È+’.3¸Âk)Č"ÁĨĢø?ũĄ‰×|ŪģXÆqŽ@…ˇ7Õ¤Q9Á5âŖ(Į62IENDŽB`‚ pix[130]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜7IDAT™cø Ãđ€…á CCķ†ö ˆ0€ÄĄR, í ė ü@ˆŒš@Rx“GūĀ^IENDŽB`‚ pix[131]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜9IDAT™-Ęą CŅ_6‚+Žp­¸‰ƒˆčđŠ gŗ.„S˜)Vų“ >ĸ;Ug(áūHR@xžIENDŽB`‚ pix[132]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment8Ą(5˜@IDAT™cø˙áƒÃ6†ÃL Í í@¨ųCã!†L Ø@(ÛĀĀĐŪĀĀ~€˙ĩ?`h†)øĀTT€ŅEÉUIENDŽB`‚ pix[133]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment8Ą(5˜8IDAT™cø˙áÃ6†L 0~ĀĐ D40<`‰C¤30´``EĖ5 NĢäsąrIENDŽB`‚ pix[134]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment8Ą(5˜;IDAT™Šą ÄR6‚ 8ėƒ…k›ü–ūAŠãrĄF4vpdļ¸ō™Å° čAŗHĘ.ŪúĨk[Jī0IENDŽB`‚ pix[135]: xres = 200, yres = 200 ‰PNG  IHDRęC/ pHYsÂÂnĐu> tEXtComment9Ö/CIDAT™cø÷‡áƒ Æ, Í í@ˆŒ 뿆 >00ügaøĪÃđ‡á Ã Ž†Æ? ėWā׋Ų(ŖIENDŽB`‚ pix[136]: xres = 200, yres = 200 ‰PNG  IHDR øŨø, pHYsÂÂnĐu> tEXtComment9Ö/CIDAT™EÂĄ €0†ŅĪĩŽöFa4dDq]éš.Â'A(AņōX"vÜ82í¤TŠ˙ģĶ*.XųûˇĄC$Ŋ,Ž,đ57IENDŽB`‚ pix[137]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/>IDAT™cø Ãđ€…áC#Cķ†v0b“@îÁ @čà baøĪÃđ‡‡áP— CC ãė@ËŦ`wIENDŽB`‚ pix[138]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnĐu> tEXtComment9Ö/?IDAT™Âą @EŅ…ŌF1šøÖz61‚R!üpr˜‘î‘C–l(PĶĢģˆ&ĻádŽŊˇcyF@‘o˙)ōĻkĒŖIENDŽB`‚ pix[139]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnĐu> tEXtComment9Ö/:IDAT™EËĄ €0ĀCņŽ–Q:Ū',֑*_BÉŲ3ģ2Ü´ÔÆīÜR2˜,Ū°.OW{•Ŗ´ú>Ã|JÆ%­IENDŽB`‚ pix[140]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/ tEXtComment9Ö/=IDAT™-Âą Ā Á >¤Jqi@nëJĄB‚ !›ņ  ­đéî˙&ė¸+ãĖ|‘Š>Mö^JajIENDŽB`‚ pix[142]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment9Ö/?IDAT™cø_ĮđAŽáÃ&†Ã‡Ú€Ņ(:ū€áđÔ&†?M ˙ÛūķĐ?9†?v ę˙Š­ĒGČDˇIENDŽB`‚ pix[143]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/@IDAT™cø`Ãđ€‡á C3C{˙ę?ĀĐ~€áÆ ˙Y@čÆ@]5 ˜˙§ųžK`úIENDŽB`‚ pix[144]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/Ø0<øÃĐüĸMIŠtKÔIENDŽB`‚ pix[145]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/=IDAT™cøcÃđ€‡á Ãá†æ Ôū†ĀÜ >00üa`øĪB˙xūČ0|°a8PÃĐđ? ĸ;WŅIENDŽB`‚ pix[146]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnĐu> tEXtComment9Ö/:IDAT™EÂą @Ņ_ę´F1žĶ¤´Rlbe '¨ŧ{¸12¨ …xëß…ŪXųF7ÄÍNÜļž“IENDŽB`‚ pix[147]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/EIDAT™Ëą Ā á…4BpT ÁÂŌ•^6qK‹Â_sĖDČS2õ$ņŠĻë">č0`{v`,2ΒĀpöüŨųæPV”IENDŽB`‚ pix[148]: xres = 200, yres = 200 ‰PNG  IHDRØļŠ pHYsÂÂnĐu> tEXtComment9Ö/>IDAT™cø˙‡áƒ Æöū(¨ŊĄ™áÆ˙, ˙x@č Ã†5 ˜˙¤Tbũę?ÆIENDŽB`‚ pix[149]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnĐu> tEXtComment9Ö/AIDAT™-ÂÁ Ā @ŅĄŖ8›xh× u‘Œā҃$ņņX…!XFũãÕŨÎŽ(ŒD4â!æĒsų[ONéĒ%IENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set13.pa000066400000000000000000000724471506303110300215640ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment0¯ķŊĒ>IDAT™cøĪū€áã<Æ üAĄų‡33@đ*ßTÛÄĀf=cˆØš$¤ģp?8IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment0¯ķŊĒ@IDAT™cøÁø€€đ†Æ Í@Ėü‡˙‘äAę›A¨÷ М `sAĻÚķ‡ũ˙!%ôŸĐ–IENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment0¯ķŊĒ8IDAT™cxĀx€á70qÆö`Ėū„âv(nęiâ†@“É Ėx„š!Ę(IéØIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cø˙˙Ã?æ ~aà †  *$üáãƒ˙8˙1€qķܸÕø1dØ\ ų€ö€ėÚ 2ęЌ_IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒ=IDAT™cøĪū€áķ<Æ?(04˙€`æ ėˆÅ í ÕÛ4į€ÄĖŒ{ūđ?ŪÂ'jŧŗ;YIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRļx‰ pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøÃü€áã<ĀpāAÃÁ Í? øķv$ˌ+04ՃôxÄ @Āæ‚Ė˙Ã˙8ž&ézëIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment0¯ķŊĒFIDAT™cøÃđƒáCà –`8` ÁĐđ‡ƒĄŒ˜˙!á˙Db ÚFęoüÁĀp ƒáØü@{~0Tw #€ė7âIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøĮø‡áC Æ 2@ĖÃpˆjXūAp#7˙g``&Ղp3Hß ~ū1ķØ|ļÚWÃđ‡ņļˆ&¨uIæ!IENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment0¯ķŊĒÔ{ĀbÖˆŲ@;í#"†ÕaVÃIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRļx‰ pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøÁü€á#ᆆ?(04ūP``cæ?¨˜„ 0X Pm3õ6D9dvQ¤ądĐt;\ŪoíY§_UîįČŽú•>Œ&æĄM¨ÄíȞđIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment36úėQIDAT™cøÁ~€áķ†Œ@°ņC3ˇâ ũ@ú??8Āđ˙gÉ1@đ~(fa 3М š ķAöü“?.ZņÆIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment36úėIIDAT™c8Āx€ĄÁŠ0001û†v ūd˙Ęüâ@50 â˙o``°?TÕĮ d3ÅPÃ |ĀxæZĄŨûIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėYIDAT™-Ėą € „áßXXĘ(ŒÆĐ \ÅÎ5á•<Đ\ž\Ū+ŽvS<n¸‚Į&éwgG3‰žFŪē)Đęg—EfũR†hŌ7Į~Ā&ŖŽöčî-ĩŠāGIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment36úėVIDAT™-Íą €0CŅ_¤dFa´A)XëØ„(Sœr8!œ,6q9Lãāe—G,KOĶŊ„KÛ“˛ŒlŖ‡čŋ*įRԗ FŌvšûãËõÕ?›Å3j*ĶĘmIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment36úėJIDAT™EĖą €0 DŅQx-FKĮZˇ !%EDr–‚°õäÂö1B4ä>Š–U.›™÷¯=ĶŦ˙Íũ@lųīPWæŠZD-ŪM#žîéIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR˛Y1 pHYsb&2 tEXtComment36úėMIDAT™-Œą €0Ĩ dV}*ÖĘ(!%E”äČ:Y˛ũOŲ‚L(WTá–ņČëf#Cˇoޚ7]ü]ũ8Ũú.ɜõSš/)&b"vö؅oIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment36úėXIDAT™=Íą €0 §KI™Ž52ĨŲ,ˆ‚52Ĩ äį˛Žx[ļÁĶpUAC–„:˝°Į‡2]Z­€LšYāwhgĶŽŠoēÛÕ÷ĮŠkrpņp!1ĶÚå PIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėXIDAT™-Íą€ CŅĪY@gË(ŒeI‰įbŒâtRp`PŠ×$w ÃT*‘Bā–Œ'GGnŽsšä‘Q<# SøĨ™Š›}ƒŅaģlĘLu¤Cpßūü)zíļžŋa-9ōåM:IENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėWIDAT™MÍą €0CŅRŽ–1(ōØ,k0BĘ+ĸ'B‚;ŊÆ˛d*Ž?ČėÜŦ¤n‹˜GÎōš¤eI+̈́SŽ~+Đ*,2ŋ‚˛āčâ`cŖoisōv)Kƒƒ)IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėUIDAT™EÍą €0 DŅQ¤ĖŦâŅŌ1Ģx”Œā’%œ˛^áŗtfîNTg'§'7ļ!aT9di_Ũ˜ē˙2ƒrÁ)íS“ō2Pg˛ˇ?ôįnūŗĪ+-xíĨIENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėXIDAT™5Íą Ā DŅ\@—–Q-%ŖąAV`J(äˆKOōöáæ œÆ)…ēLđŒ}ĸ\˛ēÔÂâ§Lb5q™ŧŽâĻŨ$8š¤ßI™ŽÛĄžiūâf)[oĐčIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úėWIDAT™MÍą Ā CŅh(S2JFŖd4˛ R ŧq1J‘¯š“mÜ †Qœt2D-2á’[|3é ¯ų'Ŋˇũ[Ÿ(APŽĸÎĻĄ­ĩëöŨĩ1´-´ŸœIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRĻcÉķ pHYsb&2 tEXtComment4¨žyŗJIDAT™-ÍĄ€@ Ņ•H䕒r(ãdJK))!2‚Į˛Į!žŲ`M0 ŒŸ ļGniŠSːĶŊyÉ5ā8ŸæPwQ§=Ø/4æ-ËZšÍ#IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment4¨žyŗKIDAT™MĖą Ā0ÁÃeFHÉX))=Ŗ0‚K +EDĘK×>™AŽâJZ›ánûĨÄĄŦSņb—`K˜^lđ5›3ę+düėúf
áŲ/„ė!IENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗNIDAT™5Íą Ā DŅ‹”’‘ƒĢ+c`~ĀĀĐūá?÷1ķˆ80€Ėo šņƒũĨÚ˛?€IENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%TIDAT™]ËĢ €0…០ÜQ­#´Š`­:Ö`„#M.ˇi‚@|æėĩ& pHYsb&2 tEXtComment6FŸVIDAT™-Íą€ DŅīHH b@aŌ‡ÅPŠ%܀ˇJđ’ öĶWãaį&s‘hDZqŠ2ätHvÉÅ_ >–îŦSßĨmáûVC-5;ö“ķ%pŠŒTĖIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment6FŸUIDAT™-Ėą€ DŅīØĨZĄTb+”b 0‡ ŧčn?ŊS1œD#b„é9äTũÔŨČ Iĸ„å„ėP~›äļTŨęhÍfäÕÖÕéˇ}Ėđ-e’IENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸSIDAT™eĖą€0 CŅOE›Q2Z ČHŒ`6a—)rvZŠw§B™NâAU*x-ŧ—DÁōĮakRéęuulÂ&ßĮūSh7•ō”ôę1"–,2ėIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ\IDAT™-Íą €0 Ņ+R2ƒPDĖ ( =Ce6€’Šų!)žÜØgÜ Į¨D^&ž_⊁˛JoNĘfĀ.ŗLē¨QÅģÃķy( ŽE]íˇ~ûe:tõüļ.j)į_öŲIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment6FŸ[IDAT™MÍą €0 DŅä2#0ŖĨ{Q€(X##¤¤°bhõēģ3q:×Í4ÆW›K—HėąŠS2EHŸÉ CK åõL;’Ē|“Kũį_ā7â(-lfÄ úIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment6FŸLIDAT™eĖą €0CŅĨČ0Ę햂ĩĖ&ŒpeŠHÁ¤Ĩxe}Ö!f‰x”Ám}×Ō֌fūÁ'(ūÔáyūuī=ũ<ŨÛ]÷‹^XW%BöĪIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment6FŸHIDAT™]ą ! /ĸøĩ2læQ~J $0č̎t.bËa†čˆ—´ƒ:´afŌ–Cš‰ÉËŊp¯ü8ˇęŦŪŊƒˇũc<ÚĐ<ØĘôūIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸMIDAT™-ŒÁ Ā@GŌHJI)WBJ0])–§#dåF…e– E0ĖâOxæŠ5šú{$˜r[pŦ} âĘüÚ}!§xå§ÅŊąÁ´†bYIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRIĄĸÍ pHYsb&2 tEXtComment6FŸMIDAT™MĖ1Ā DŅ$DÂICLŒ! W^Á@Ēī[,ûuN`Ē1Ȍ’é!ĶhÛ¯ĘQÄ$S™\mAúA[9_r~C]É?n&ŧ°žbIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment6FŸUIDAT™5Íą €0CŅOw#d „‹ąYFÉ)S _ÅĢlŲ¸wœ›™Nĸ…dÔCžDUĘ$ęåc[$‹3Ôß)ÚjÚŗąûņã—ūŧŋ˜y,՜sf˜IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment6FŸUIDAT™-Íą € EŅKX€QÉ()LĸŖ0Â/)Œø@‹Sũ›÷ÃxœŅIqij–]î@QSÔĻ$qÁNw/×īœú§n‘Ēž­mũđÆ8ė—ē*XRGôåIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment6FŸFIDAT™mĖą Ā@@#ŦÅh?Ŗ0%E¤Ä˙IYWŒaĸ,ąŗX°Pü’;ûčfcU?دŗ'ĨíÖīx>čÁ’H‚ŧIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( NIDAT™c8 ˙A€€ø˙†˙?€øƒ0üÄ>0üoâf fūĀđ‚˙đC1Мöü„ë!ø˙ĮŽ˙˙ÝA¯†ßõEIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment71—( @IDAT™c``p`@˙ü˙@øÃ˙F(f†āėūđ`øÂōPl€á?¨‡â˙|Š"áĮ˙H3‰´DoIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( JIDAT™5Í1€0Ņ›Ą Dq‚œœ!å$„.ÃgĄxíŽ"Ŧ
°ũ†ȸ ˙V‘4–‰ûîIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment71—( NIDAT™cø˙˙Ã˙X€˜Šũ˙Â< ˙?Č@đ†˙j ¸á3Bđ?fūÃÅü~ áōH؁Ôõ˙˙ĨŌBŲZJīIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( EIDAT™cø˙˙`P`@ @ü˙˙Ņ ü ‚€đn„bF f~Āđ„Ų!øķCđyū`¤ëĶ';lDeŪNIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR˛Y1 pHYsb&2 tEXtComment71—( 6IDAT™c`@˙ņn`øßÅĖ@ĖŪĀđ„ųūņy(ļo`øÃõü„˙c`r\+^&6IENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment71—( ?IDAT™cøĀØĀ€ū?@Æ ˙q#fFāė@ĖßĀđˆ€°<Û70|âõ €øÁ˙†˙?¨+XxGī!IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment71—( ;IDAT™cø˙˙ÃdĐÄ˙€°>Á‘p#713ŗCđ?~ūÂōPlÄõ@ų˙Īw4Ú÷ōōlIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRIĄĸÍ pHYsb&2 tEXtComment71—( CIDAT™ch`Ā|``8ÄĖ ü€˙€ķ憆b ūĖPĀ`Ė”d„`(ŪĸŲĄ˜?ČRI%ĄŗIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment71—( >IDAT™ch`8ĀĐĀ€ ö˙ ė€Ā0ü?čPÜ ÄĖūąC1˙†?@üC‚?ØCđƒz(ūÆËF0*`kc’IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( EIDAT™c8Āū€ĄA€ø˙˙ €Ā@8á˙~ÁH˜‚˙0Đŧ? Ė˙€áËCđ{ Ä˙˙?nė4Á E…ÅIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment71—( ?IDAT™c```@ @ü˙ƒ@đƒ†˙@øÃ˙F(fbö ˙ ø?˙GÂöü×Åë?—8Ch<7’IENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRyҊ” pHYsb&2 tEXtComment71—( 2IDAT™c`@ũū?€á>ÅÍPĖÁ˙ø!ø<˙°‡āõüā?„`ښ,6sœ ŲIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment8Ą(5˜GIDAT™cøĀ|€?804˙€a†f ŋá€PÖE3<```Ēaá? üP â3```ʃ@T/Đ.!‚‚õËIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment8Ą(5˜_IDAT™EŽÍ €0 FŸĐcGp”"Žâ ŌŅ:JGčŅC!~ ‚„wų~‚Ųƚ•‡Ė Ņ’h74ûéÚû–8t?Å}ũ.(€4 d jā{u.åHמ÷N™ŧ_ŧÁX)ŔœUqIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment8Ą(5˜NIDAT™cøøÃ† †  $0p0<¨ā`8đˆ˙1@0ũˆōĀI­BŨA˜zŽá€Č1H-ČüĖ?ū˙˙v)Õ2ÎAIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR#¸xĮˆ pHYsb&2 tEXtComment8Ą(5˜[IDAT™UÎą€ …ៃ’,ÅÁ,,`3ÜÄ,)rÁ€wx_“ŧ{ ­ ꅊpŗqąRē=R$rę_І8rŸw–Ž@Ō@6ž19“•ąKK°l˜ũĻ:ÁūxŲũ/šČ@^IENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment8Ą(5˜BIDAT™cøÁü€0$ąCã†æ¨ø P $˙ŠAė Ú† Ė?Ø˙`bf nüĀVĶûņJĐ#uųŠš§IENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜SIDAT™cø#˙€áķ† ?(00ƒđ( čĀō uœÆ @š @ĩ¨¸ˆ(õ(€Õ=Â@{ūĪâ˙K!)d':íIENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment8Ą(5˜OIDAT™cøÃū€áã<ĀpđCCķ0n‡ŌÍ@ą† `ų`uĩ  Œ˜˙00°Ŗaæ Œ@ĸīķ.á&™’ŖIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8Ą(5˜JIDAT™cøÁ~€áãl`p`hüāĀĐüÁĄ 7Å@Ô Ã† Ė?Ø˙ 0?Œ gūĀ4“l.H=Ȟ?ō¯Į'ŊC6pIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment8Ą(5˜AIDAT™cøĀđáCCƒ3~``ūŠAb ĀōP0DŧņķLĖoHéĢ´įãû‘å@‡'IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR}$ZŠ pHYsb&2 tEXtComment8Ą(5˜EIDAT™MŠą ! ȲȍÆ(yũbŒ’RRP<<čäâd“Ŧ5*­ OQē°Ã3ŋ‡ļįjŲÎ:ظ˜˙Mpô7Ģ: ŧt*ē IENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment8Ą(5˜UIDAT™]Œą Ā OJĀ(ŒF”ÅČ&Œ@é™§Kq’õžVU&…Aĸ#ô,4ƒgũđŦM gģƒtŋ›&Ē˙nŽ%œîöe—úæöĸWPôA§)ˆüš:ŗIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment8Ą(5˜MIDAT™EÁ Ā0 ĪôŅ52JGÉ(Ū¤Ģtg…F&$t`žS(ăHēip5™ŅƒķÚēŊMš™Ø3ī&Üëj_Žūņߚ˜˙Á*nsIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8Ą(5˜RIDAT™mģ Ā0 DŸHã4Fƌ–R&‹eāR…1‘LǐâÁq܇!Nį¤qpŖXâJĘõ’ē†g]Wæ‹í ļŌĮ‰í˛öŗĶâĶÅÃ%$LMéAIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜RIDAT™Uą Ā0šHFa„Œ”Å a 4Ã˙Ü h↠:°™@6íųĀūLõ íÔé‚IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment9Ö/XIDAT™=Íą €0 DŅ”2dFKÃfff@bĘVĖÅkŦģ3NLNcáĸpķ„õÄ&kįgPu^:ģDNõÆFĶ֜ŋŨĸlUV?Ãojĸ/#9žÕNIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment9Ö/NIDAT™-ÍÁ Ā0…á:@Wp´ŽēX˛‰#xôH_cī ę“u;y9Ģ1ē#–đíč! Ŋĸ–)Kŗ5ËHö}ųķvnũŅŋî€+ČbXIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment9Ö/JIDAT™UģĀ CÅQP˛’Gc4â(Ķ‘gRĨxw:ëcínšYKE¨e¨oi<ęFŒĖR X:x1ĢG˜7UģæGNŋ%—LHQÉIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment9Ö/UIDAT™-Íą €0 DŅĨ õ(€Ą<Ų 6ĄŖué"B„âɲ|ō‘58 v\Ú§‡Ņ͍cZšSIt‡ ”´’÷j\ĘųŌ¯h˙OW‡%Pß,%bjIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment9Ö/QIDAT™UĖą €0 DŅĨČ-ŖXb1wŦá\ē@ĀœN֝ŠD œĀX4_ôœŒGņĶ,ÔG ЉSá:>ģz›˜öÆ|ē¤ÚÕãŸĨ#˛ÆŽ_’IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment9Ö/QIDAT™=Íą €0 DŅO—؂ŒG›Íœ XRēˆbd!ëuwg"œ…ëN;ˇ›˛ KK=Ų”* <ęĄ>Ä!‘ūŦvjųv_CææÄåo×.˟ŠŨāIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/KIDAT™mąĀ0Ĕsá2+y46ČJ? #¸t—<ԁSÁsöy‰ę`cÃ,ÎÎGŌFĻFĮŧŪ?}kGģĸŊļûGqn}Ų Ļ¯ õ˜IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/TIDAT™eą Ā0ĪĸČaŒŒãQŧAVbFpéÂ’ķŽ”*ŧŽųžĩ’iÉVPi›pŦ;Įā‡u(É;M„Åŧ`įÖŊĨSĸ*Míę˙î9u>ø'ŒĪ§4‰IENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/VIDAT™=Íģ € …័#8 ŖYb\Ė \(oAĐsŖąøēķĀ‚ŅŲhNVĒËÄņ™™4ųE7PjPīÕe.pĢsŠ{ČîLģÍ÷ū;’=2'W4īÍIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRDŋԊ pHYsb&2 tEXtComment9Ö/GIDAT™MĖą Ā0DŅoQPf%æŅnF L—›"H¯āGēĐ‹châŲn¸ū’ĘÁ‚=̍|kÅ<ûĻcbęŪꗉpŊŨũįÍaČIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set14.pa000066400000000000000000000543611506303110300215600ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 121 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment36úėBIDAT™cøXÃđ†áCC; Ãņ†˙, ô…áÆ2 oxĀ‚ 4ŋˆZúyŽČ0|ĒyTŋDŦ<|IENDŽB`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment36úė?IDAT™cøøƒá€Ã †6†v†ķ ˙ˆƒáà † dEū3 <ņq00p04X0|ü>EøŌÃãIENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment36úė:IDAT™c8ôƒĄÁ‚A‚‡ƒƒĄƒáI0üą`8A ˙@č?’"°z †† †ī?ŖeÂĸ!ßĶIENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment36úė3IDAT™c8`ÁĐ F Í ũ ˙9ūŅ †@d1< X¯Â#OēÖIENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDR øŨø, pHYs.#.#xĨ?v tEXtComment36úė š?¸ČiV˜íIENDŽB`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR æI!Į pHYs.#.#xĨ?v tEXtComment36úė6IDAT™c8đÁ€Į€AF„ö0üŖ  €@î?tTĮRÔËPĀp˙Đ.B+äšöIENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment36úėÁl×IENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR 3ōÅa pHYs.#.#xĨ?v tEXtComment4¨žyŗGIDAT™cøŸá;Ãv†@ÄĪđG„~؃Q=Ç˙ ¨á3;Ãcv†ã`tžĄŸa>ąą3002PûLÄŲ§ l9nĢIENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR ŽzA pHYs.#.#xĨ?v tEXtComment4¨žyŗBIDAT™cø/ÁđŸƒáà úaÁđŖ„>ü`øF9@č8Ã1†s } ķˆƒūAküēšâ{šÎIENDŽB`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR˙šÁB pHYs.#.#xĨ?v tEXtComment4¨žyŗCIDAT™cøßÃđ„ū‘ Ã0Ēaøđ‡áã†Į@ÄÃđŒ‡áÃ90šCv< 2< , @đ‡jÉ/‘ĒրIENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR áĸĪ9 pHYs.#.#xĨ?v tEXtComment4¨žyŗKIDAT™cøßÁđŸŒ8ū‘à †/ *~ü`øųƒáã†Ī;s0€ŅÃ? Áč˜ Ã††9`´‡‡aƒœ   t00üáÁ@2@“€!(Æ˙šÎIENDŽB`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR{Ē| pHYs.#.#xĨ?v tEXtComment4¨žyŗ@IDAT™cøßĮđŸáũ‘cøcĮđŖŽáĮ?úøá3ņ1<âc8CįøæÁüaƒš€‚䇨 MÄuIENDŽB`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR ŽzA pHYs.#.#xĨ?v tEXtComment4¨žyŗLIDAT™5ÂĢ €@DŅ+§„Wʖ†BŖ(RE$`ÁØėBøœjGåäĀ 7Øæ4Ģ؃MLbũsŖhE¯˛ūņ-qWČŝ˙ĸIENDŽB`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR ŽzA pHYs.#.#xĨ?v tEXtComment4¨žyŗFIDAT™cø'ÁD€Č‚áU0üøÁđŒ>ƒŅs †s0tO‚aŽÃ †    @đ‡lšųߡÆ!A×A0´IENDŽB`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDRęC/ pHYs.#.#xĨ?v tEXtComment5ߙI%9IDAT™cøq„á Æ2 Ī˙€Đq0:PÃp@†á| Ãũ†˙Đ?ĩ0°ˇ04đ0<°rŽâQēû1IENDŽB`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment5ߙI%7IDAT™cxø‚áI0<øÁp†˙`8`ÁĐ&Á0Ÿƒá:šßĀĀĪĀĀÂÁĐĀRöãv[x'UđIENDŽB`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment5ߙI%Í˙ÁĐD ķ9ū3€Qb`°g`"†>F4Ÿy3rƒãIENDŽB`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDRÆ"Ia pHYs.#.#xĨ?v tEXtComment5ߙI%DIDAT™cøûáą1<cxūŠūc8`Įp€áxÃų&†˙‡ūŖęo`āob`ob``chā)ûņ˙|ŠiøŦgIENDŽB`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment5ߙI%CIDAT™cøũ‡áƒÃ†< dū˙a¸˙‡ĄŒlÚdæķ0ügaøßÂđŋɡ0Čŗ0đņ0´Č0|øVĀ‚ķDhĸIENDŽB`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment5ߙI%6IDAT™cøÂđ€…áÆãÎ#Ą††~†ų ˙Q‘<ņŗ00°€”=¨.˛ljIENDŽB`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR Âי\ pHYs.#.#xĨ?v tEXtComment5ߙI%AIDAT™%Æą € °N†Í•Í7šĀxÅ<NĀI#&ęęš)hÃ9Õ)'9ڃĮ§d…úŸ•%É=^SûdæõėIENDŽB`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDR ~šÄ pHYs.#.#xĨ?v tEXtComment6FŸBIDAT™cøÃĮđƒ‰áÃÁ tøCû?b˙ĮĀ,ĮĀĖÆĀ~ˆ˙˙Ô˙€ĄũÃņC 1|8ĮđķžŠ§1jûIENDŽB`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸIIDAT™=Ëą € Ņo,(ÁUĪX0—aÂĐQņcaņĒËiDt/¨f”§f]–ė46t$´ē‡ŠNRüņI~‹ĩ‚z@ĪÎ ŠŨ,.ãāÉĢIENDŽB`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR ~šÄ pHYs.#.#xĨ?v tEXtComment6FŸ:IDAT™cøĮÆđƒ‰á50<ĀĐ|ˆĄųąØ10Č1001đ70đĀ‚ÚčC#Ã>†r,Ö–.5ÅÃIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR ~šÄ pHYs.#.#xĨ?v tEXtComment6FŸDIDAT™cøĮÆđƒ‰áÆ1´˙!ö Ėr Œl 뇨0đ?Ŗ`ô€Œš1<ÄđhsƒVm›MâIENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸGIDAT™cøßØĀđĄáOAÃ(~đŗáá˙†ƒPÜøˆ600h`hūÁĮ‡Ņđà j~Íco`øoߖĨ,â `ŊrIENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment6FŸEIDAT™Ëą €0 Á—\¸ôŒŒ‚(2ŗD^Ä Ҥ"„H×ãäēĐ6"šnüÁĮdėŠT4ŅĀÚO—˛x’•˜Ũ>l`xüŋá07Û704°i šv <ûæâū P ”ƒâà 3Íęųoßüŧ)ŧ€c &IENDŽB`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸGIDAT™cøĪØĀđ‡Ąá00<øĐĀđđgÃÁ˙Ü8ˆÛø@ķf``˙ÁíPÜ Å‡AzAø!Đ,f šü €Ĩ'Ŧ3KIENDŽB`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDR˙Eø: pHYs.#.#xĨ?v tEXtComment6FŸTIDAT™=Ėą €0CŅ1+° Ģ0ŠĨŦĸ`cƒ”AB .Å+,ߙ~Š–Äƒ¨“(‹ˆ×-RƒĨQ0Øæė.ÛZøåĪaģģđ]xŗú§ÍzÚû'ˇ%Ë"IENDŽB`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸJIDAT™MĖą Ā0CŅo\¸Ė%Ģ ˛ØyāŌEHĸ#MŠ!ņTqą͆s¤C(mÖDéĸŽí§N8“swņ},oî]/ã´ 6T§ĩIENDŽB`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment6FŸJIDAT™UĖą €0Q# JF`Fŗ”‚šĸ ƒĐQD„KIņĒŗŦ~Zīd=˛ęŽËŠÛĘŨ*HÆôc¨ŌōCCA?ėÛę ˛)n_HIENDŽB`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDRrC9 pHYs.#.#xĨ?v tEXtComment6FŸKIDAT™mĖą€0 ÁķĐĨ¨Ją#ĘâéD%($đ DN°ŅÍ?9ă˜÷fÄ^Bx }Ņ[éb¸Ņ–øwUw•ú‹ÚĖUäŠ2S(p}gÕŨIENDŽB`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment71—( BIDAT™chah`ah`#†ū# üGæŸaøDs`H†áŋ Ã?†?@TÃđŖ†áC Æ@čā†ÃŸęBWĢŸIENDŽB`‚ pix[45]: xres = 300, yres = 300 ‰PNG  IHDR øŨø, pHYs.#.#xĨ?v tEXtComment71—( :IDAT™c8ĀÁĐĀB@ĀĪÁ0˙Ãū ˙h Y€Đ? †? ?*@čÆ?ü`hŖæPį÷ˇ|ĢIENDŽB`‚ pix[46]: xres = 300, yres = 300 ‰PNG  IHDR õÈk pHYs.#.#xĨ?v tEXtComment71—( `8ø€ĄŒÚ0œá›ú;ŅpúIENDŽB`‚ pix[47]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( >IDAT™ch``€ āį`ī`°ī`øD3ĀH‚áŋũŗ`øSB?*>ü`xđƒá†F0jūÁpū,ZzRnŊIENDŽB`‚ pix[48]: xres = 300, yres = 300 ‰PNG  IHDR ÜC@ˇ pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™ch``"˜ß°˙Ã˙ ˙'Ã†`ô§€á}`øđáᆃ`h˙9ũo>ԚIENDŽB`‚ pix[49]: xres = 300, yres = 300 ‰PNG  IHDR “ pHYs.#.#xĨ?v tEXtComment71—( 7IDAT™ch0`@r öū‘ũ"úD ? >|`xF?04~`hūĀĐū_-Q4JÛIENDŽB`‚ pix[50]: xres = 300, yres = 300 ‰PNG  IHDR æI!Į pHYs.#.#xĨ?v tEXtComment71—( 7IDAT™cxøĄA€äė'€Đ02Ą`ô§€á}øĀđāÁ `ÄüĄũđŌßä\žFIENDŽB`‚ pix[51]: xres = 300, yres = 300 ‰PNG  IHDR “ pHYs.#.#xĨ?v tEXtComment71—( 6IDAT™ch`h`€>ų ´˙Ã˙ HȀáũ)`øQĀđĄ€áÁ†ƒ`ÔüáđÔ}¯Ž@΁IENDŽB`‚ pix[52]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( 9IDAT™ch`h`€" čc`˜„öŸ`øßÁđ_†,ūŅ †@ôƒáÁ†`tđÃãF§-<IENDŽB`‚ pix[53]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™c8ĀĀĐĀ€ü ō ö ˙!HŠū‘à † *@čÁ†?04˙`8ūœEÜ;õIENDŽB`‚ pix[54]: xres = 300, yres = 300 ‰PNG  IHDR “ pHYs.#.#xĨ?v tEXtComment71—( 7IDAT™ch`@yûû ˙!Ȍ ū0üŖ>|`xđáĀ†Æ Ė`Ôū­ŗuˆĢŅ0IENDŽB`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( 7IDAT™c8đƒĄƒø;ä;öw0üŸC ˙-@čŸß †`ôāÃ0jüÁĐ BI”QËąœfIENDŽB`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDR  ‹Jų pHYs.#.#xĨ?v tEXtComment71—( =IDAT™c8&ÁĐĀÁĐĀō ö T?ƒá?I€Đ? úSB?~0|øÁđāÃÁ ?šÁ¨˙đs+iÄėIENDŽB`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment8Ą(5˜@IDAT™5Ë1 Ā0 Ņ‹<ü1J­•‰92—A!Ä*ŊņŽēˆIw<ŅÂZBrëŖŒøƒÕī=q_ũ~sä&ˆĻB\[IENDŽB`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDRü(( pHYs.#.#xĨ?v tEXtComment8Ą(5˜>IDAT™cø!Įđ€á`ÃņC íÚ14ƒŅc ø@RØ01´7€dų@Q;=i9ČÆđAšØB uÍ IENDŽB`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDRęC/ pHYs.#.#xĨ?v tEXtComment8Ą(5˜:IDAT™cø`Ãp@†ĄŊ‡ĄŊ„ØÁdsHˆđ0<`a8ÆÂĐßĀĀAĀd C CHÍÔ|ôהwcIENDŽB`‚ pix[60]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment8Ą(5˜8IDAT™cx`Ãp€‡Ą‡ŋ1÷00Č04€e°0ô30ô70ČŅ(âo)j< ÃđÁEÛôYIENDŽB`‚ pix[61]: xres = 300, yres = 300 ‰PNG  IHDR)ā"_ pHYs.#.#xĨ?v tEXtComment8Ą(5˜@IDAT™cøaÃđ@†á C3 C;C{CsCĨ00``hJ@ v0jnŠšđãé,vY9IENDŽB`‚ pix[62]: xres = 300, yres = 300 ‰PNG  IHDR‡“ pHYs.#.#xĨ?v tEXtComment8Ą(5˜CIDAT™-Ęą Ā ÁG.\f$†Ŗ`-G^Ä.S…X(ŌéĢgW%„éøüŨia‚)C7ZĐ=Míœ9ÄÅ[?ŗ,Œ4ÚúIENDŽB`‚ pix[63]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment8Ą(5˜>IDAT™cøķ‡á Ãq†ū†ū#PÔŪÃĐÜÃp@„đ0|`ačcaāo`ĸ0t„ŋ…ĄŦĻŖąd ų…cIENDŽB`‚ pix[64]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment8Ą(5˜?IDAT™cø Ãp€‡á C{ ņˇ0°ˇ00ˇ00đ00Č04€Ĩ00´30ô70đ@ ö Í-`2 jkFôqßÛ8IENDŽB`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment8Ą(5˜@IDAT™cøPÃđĀ†á€ C?ĩ€;3ƒ Cƒ Æ, -, ü, ō 0ÔBü= ]@Ŋj ůĶvIENDŽB`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDRÆ"Ia pHYs.#.#xĨ?v tEXtComment8Ą(5˜JIDAT™Œą €0 ĀŦéV>āX†fäĨRûFtdĒ ’åÉ2īĘnĄo¨ązGà &xb$čAvĢGvUŧđOæü‘ģ8ayIENDŽB`‚ pix[67]: xres = 300, yres = 300 ‰PNG  IHDRÆ"Ia pHYs.#.#xĨ?v tEXtComment8Ą(5˜CIDAT™cø÷áƒÃ>†Ãm í‡úÁ¨Ŋ‰ĄšĄĄáL ė üøĀĐ#j?ÆpdÂßÛ“˙2\LIENDŽB`‚ pix[68]: xres = 300, yres = 300 ‰PNG  IHDR ~šÄ pHYs.#.#xĨ?v tEXtComment8Ą(5˜?IDAT™cøaĮp€áC{C˙!(j?ÄĐ|ŒĄ$õ€áÃ#&†öö ü`čHŲáC 5ä|—ŦÛ°SIENDŽB`‚ pix[69]: xres = 300, yres = 300 ‰PNG  IHDRâŧņú pHYs.#.#xĨ?v tEXtComment8Ą(5˜9IDAT™cø Ãp€‡á C 50đ70°ˇ04÷04đ€¤°€PXęą)k`Šų`Ôq€ĸ$;ŨIENDŽB`‚ pix[70]: xres = 300, yres = 300 ‰PNG  IHDR*ōt pHYs.#.#xĨ?v tEXtComment9Ö/CIDAT™-Âą €@DҟZ’Åm0Ą%ØĘÁÖą\cvpŠøxÜ^ɓčDĄ‹åíŋL˜4ՍYߎ íÄAÎ=Η¯ĸMIENDŽB`‚ pix[71]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment9Ö/LIDAT™]Œą €0Ä,Q¤dFa4Nú"kå'!#üHáh)ÜXįã9Eíb6‘!"EĸÍe_ŌXQˆåírsûž ųK‡—^Å%gšIVČIENDŽB`‚ pix[72]: xres = 300, yres = 300 ‰PNG  IHDRü(( pHYs.#.#xĨ?v tEXtComment9Ö/BIDAT™cøaĮđ@ŽáCsCû!~ :F ¨˙Cû†Ã ~61üĸ6†ųm ü| ür |v u/Ģœŋ…ÅVIENDŽB`‚ pix[73]: xres = 300, yres = 300 ‰PNG  IHDR˙Eø: pHYs.#.#xĨ?v tEXtComment9Ö/LIDAT™MĖą € áë(ÁQ\í%”ޤa‘Ÿ ƒĪÄÂâ+ī˜›ˆdM´.ŠÕņ‚ôS?ÅzĀ@L[anÖ%?ru›…ü=wq/=éÅ(ĻN×ŌîIENDŽB`‚ pix[74]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/BIDAT™UÂą €0 EÁ'Ĩ ĖŒ’Ņpäâ¯ålâl@I”Đr:žJFĮšųĢÄŋAĀ ¯ą‚Õ‘#ĄŠX#¯ ēJ?+qc.IENDŽB`‚ pix[75]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/BIDAT™EÂą €@DŅlx%XĒ\[62v°á‚‚‰Gu(IŅ.Âßú7“Fƒ‚ˇxÄ<™IŖslxˆ§úf†1IENDŽB`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR4+Ÿ pHYs.#.#xĨ?v tEXtComment9Ö/JIDAT™%ĘĄĀ EÁį(#Ĩ¤ĩ?ƒ@Ļ%˜i& `c Gë–qˆDĸaM¤ē…žđK.:Ģđ¸7Ãđ3—ļ%sˇģ„N‘§>Å/*ƒ5NCIENDŽB`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDR*ōt pHYs.#.#xĨ?v tEXtComment9Ö/BIDAT™%Âģ € †Ņ¯ŗdG5ÆÄŋtĨKnÁ ĩR'‡¨Â/<’ ĘãÖ7´fܨÆ{ōÅŲy Ü;vü8)-q1IENDŽB`‚ pix[78]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/AIDAT™%Æą Ā0 ÁīTzš@ *Ŋ’Q*ˇÚ@AŽ8ĸã‚úņŌĸœĢķLÖM@.ŌĘPT‘ÆÛ™;åŨ ļbĢūIENDŽB`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/DIDAT™cøgĪđ€Ÿá;ÃÁf†æƒ íØ€ŅzĀĐū€áđ† ūĄ~ Ęf†vv†~†y†õŋļMÎ,)ZIENDŽB`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDRÛÛ@Ą pHYs.#.#xĨ?v tEXtComment9Ö/?IDAT™cøÃĪđáa3Ãáà íAˆũ j~ĀpđÆ 2üŖv âv†f~†y†ö ˙ęūœV°|„IENDŽB`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDRzč pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c`ƒ†&0lƒŌM`Ņ6E@Üë¸&IENDŽB`‚ pix[82]: xres = 300, yres = 300 ‰PNG  IHDRņĐ pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™ch```h`8ˆ$ÎĀđ÷ČU íŲIENDŽB`‚ pix[83]: xres = 300, yres = 300 ‰PNG  IHDRņĐ pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cčg`ÂF†f4ØČcĘ-‡‡IENDŽB`‚ pix[84]: xres = 300, yres = 300 ‰PNG  IHDRņqŗž pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™ch````dhFƒ ņ‡W|>ōkIENDŽB`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDRzč pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c8ÆL l mPȆM =ä{gi$āIENDŽB`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDRņĐ pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cxČp€Ąá F‚ `ČĀĐļđ 7ü\™’IENDŽB`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR ŗØ  pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c`h`†††ƒ8PǤ)h Į˛ëIENDŽB`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDRņqŗž pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c8Ā PxĄ !ŧbE bŗęIENDŽB`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDRņqŗž pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™chd```dhƀ qVnŸÚEqžIENDŽB`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDRņqŗž pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™chf`dhdh†ÂÃpxáÃCud C,uŅ`IENDŽB`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDRzč pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™ch```h`8†MH°?t^E#VfMIENDŽB`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDRņqŗž pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cxĖІÍ(°‘ xâ}÷€1IENDŽB`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDR ŗØ  pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™chh` y7:ĐĀTÕĀ]KŠüđIENDŽB`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR:-`; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c`F lF‚Ė@+lŽ 6YIENDŽB`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDRzč pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™c`&†64ČfhCŪĩEWĩ3IENDŽB`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR XxÚ pHYs.#.#xĨ?v tEXtComment2Aũ܆&IDAT™ch°```āá`ã`øC$@čÆ 0ĀØíũģ 9ÕIENDŽB`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDR åØČ” pHYs.#.#xĨ?v tEXtComment2Aũ܆3IDAT™cøPÁĐ ÁĀÂÁĀĮĀĀĪĀ ĪÁ0Ÿƒá?Ã? †?@dÁđ#áAC˙l •&#fIENDŽB`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDR XxÚ pHYs.#.#xĨ?v tEXtComment2Aũ܆-IDAT™ch°```ā"y0úF$~H0|ā`xØĀĐÜĀĐĀĀĐĀĩī īEĻā™IENDŽB`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDR­¨į pHYs.#.#xĨ?v tEXtComment2Aũ܆4IDAT™cø`ĮĐ&ĮĐŪÆĀŪÆĐÜÆĐŪÄđž‰áÃ6†| ˙ä~1Û2žŽIENDŽB`‚ pix[109]: xres = 300, yres = 300 ‰PNG  IHDRá-Š pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ+IDAT™cøcĮđáÃá&†æ ėôŠÚčCû!ė>†v”šBū“˜IENDŽB`‚ pix[110]: xres = 300, yres = 300 ‰PNG  IHDR*qË pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ2IDAT™cøaĮđ€áCsCû!ö üČčC?C;Ã16†l ø~ȍųƒVzũIENDŽB`‚ pix[111]: xres = 300, yres = 300 ‰PNG  IHDRīs— pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ$IDAT™ch°ahāahbahoaāo†Z@R< d~ÔöŠ >ŗØžBIENDŽB`‚ pix[112]: xres = 300, yres = 300 ‰PNG  IHDRÅr‚ pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ0IDAT™cøĀĪđ€á`3CķA†öƒ ė@t€ˆ‚P°ų0Ãáã ûØ[ >]â)IENDŽB`‚ pix[113]: xres = 300, yres = 300 ‰PNG  IHDRīs— pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ'IDAT™cøSÃđ@†Ą‡ĄŊ…ũ˙,¨ŊĄš…áÃ]Öfw¨§ŲIENDŽB`‚ pix[114]: xres = 300, yres = 300 ‰PNG  IHDR*qË pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ0IDAT™cø÷áƒÃ>†l ím íM ė‡Āčˆä‡ĄöC ‡Ųđ1<ļĩHĨļáĄIENDŽB`‚ pix[115]: xres = 300, yres = 300 ‰PNG  IHDRīs— pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ&IDAT™cøaÃđ€‡áp CûâĮ@ũ@ņ†C< d~ԍ1háŗÍIENDŽB`‚ pix[116]: xres = 300, yres = 300 ‰PNG  IHDRá-Š pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ%IDAT™cøĀĮp€ „š›Ø1°@Gí‡@R@ø~ØH ;ģ|IENDŽB`‚ pix[117]: xres = 300, yres = 300 ‰PNG  IHDRá-Š pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ+IDAT™cxđá€Ã6†æ6†ö&â?āØÁ‚Íl ø>Č}nĸRŧŖkIENDŽB`‚ pix[118]: xres = 300, yres = 300 ‰PNG  IHDRá-Š pHYs.#.#xĨ?v tEXtComment0¯ķŊĒ2IDAT™cøaĮđ€áC3C{ŖC ė‡ÚÛšÛČ1|ø†r~æ&éō{ÍIENDŽB`‚leptonica-1.86.0/prog/recog/digits/digit_set15.pa000066400000000000000000000221731506303110300215550ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 40 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDR$CT€ŠQņ?fFÅ@˜@ņ xP}ÆŒCē?HŋĻ4{IENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR%y´\ pHYs.#.#xĨ?v tEXtComment2Aũ܆uIDAT™UĖÁ „0…á'9äčvė -ŲAfÄF"60ĮBÆ7 .ėåƒx?TwŠ#X1\YĐ}ũ Ī¤} vF2R] Z~䕨v}z{uļh 9 ŋčÎđ¤"‘Ôd(9ôlz§p†˙‡ŅÜĸ<Õū]ö‰TDIENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment2Aũ܆qIDAT™5Îģ€0 På(RfØ$̰ a3ØÄl:Š\„˧ywÎYrĀk0Đ f0lēžĐĸ“ę΍ągA>hīŖ(F/hA<}5zi›rÄbčAš>ˆ–Ä5Ššũōâđ4ė<œŨ°RUū—øQė -XW˙o':IENDŽB`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR$TvŦŊ pHYs.#.#xĨ?v tEXtComment5ߙI%`IDAT™uÎą Ā DŅC.(E"ąW<*# ĨĄ@8ˆ"EšW¸ø>˜uĀlcx‘ôôĄåÉ=ATT„‰'—Ažáö:ņ¤-Ø“Ę˛+iîĘĘ5üVÄôĩJķŠŅ= IENDŽB`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment2Aũ܆lIDAT™=Íą€ …áįQP2nâ*nn†›Ä °ŗā_<ĩųŠ\ō6‚Ā+Ŧb†M ĐĐI$ã!}h&ÆíÆ ĢŽL‰ô'šHˤâ_4ɕI_œBÄΗŨÁĻŦT üDŸ%šųW”×åHÃIENDŽB`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment71—( TIDAT™EÃģ € EŅK((ÁQ Œ…c¸ Ŗ0%á‰ÁĪIH_CIJËrt‡ožŗ-¨ŽeE9ĖI(ŽÛhDˇĸššúš,sž¯"ŊƒˆOô7ŌŲ@ģ˙­ežIENDŽB`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment36úėmIDAT™MÎÁ € DŅ!8R‚ĨH)v"ØŌ–B 9֍ŅË Øā#Ü 3 `$ÃCĪ,bÕ¸w+¤ nøÔ%ĨÔĢ‹N{|Ÿøū"é"ÎnDõBg œėՍŊ ~Ą1{5ĖQĶ„‰JIENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment71—( SIDAT™MÃą †ŅOJ#åFãrÅ­e#(â?Bq/yT NCÂō Ë;ž{B¨ÍõB%ĸ<'Ą{ļû˜ģۛu ĸŦ—ČgЧŋf˙Ž?™=~P'IENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR#ĸD' pHYs.#.#xĨ?v tEXtComment36úėhIDAT™=Ėą€ DŅu -ÁR ;ņ2Ûēl Î]MŪĮ}Da @Á˜čĸ-•Ŧ"‹o/…˜ĐZOäâJøōŖkĶ +?Äķ9ė?‘SÁi“zhŦØÆž!;*ŗ7Q2ĮŒŽIENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR$TvŦŊ pHYs.#.#xĨ?v tEXtComment9Ö/jIDAT™]Îą Ā ĀG.Y RFÉhų ˛Ŗ0%Âų „"…O.^oËÎ@ €č1͊HĸNvQ&‡Č?Îüqp…ˇ ęĶÜ"učŌæ> /׈„ Ŋûĸ%"Ô]'‘ƒĢŜ7ûAcøƒNIENDŽB`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR'Ö. pHYs.#.#xĨ?v tEXtComment36úėwIDAT™UŽą „0}āū;Ą Aâč ‰F,Ņ€CËËŽŅ$ŖĶŨíhA2ƒ×GȘÁĀDMĢ5aôôõnœv=3Ŗŗ ˛”ŽJ†§2ÕvDū'^8Ã×ÍŅŅC–XäÛĄ ĒP°Ę’\\=n.c@:‘ÕfIENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR&ž ļ pHYs.#.#xĨ?v tEXtComment4¨žyŗfIDAT™eÎą €0ĐŌ. ¸ˆ…ƒY|pąŅ ~™"ä{g‘ÆæqÍ'îŽâž‰­S(#7ID0’ ´ԏ-Ē”XÉä˛Yå4$‘ĐA#í‘ËëŸD”ē|‰Į_EP¨[Íš˜IENDŽB`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR&ž ļ pHYs.#.#xĨ?v tEXtComment4¨žyŗlIDAT™=Î1 €@ Ā=,l? ø ÁoYüØŨOôgw…\Üĩ² ģܓ0RšDYė?ą!&@j'†ÖpͤL$¯ĸŖô†$ļLÂÎ ZÂ;ąÕåņgųˆÂ˜Uô/Uøī )Q•A šIENDŽB`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR&KŨ‹ pHYs.#.#xĨ?v tEXtComment5ߙI%kIDAT™mÎą €@ ĐXØ7š‰+šgåXę&—°8üū(ˆ‚ÍK‘ä' i  *–›Ė7ęN>?éĄé ĩS9A$­•Áaöø?đfŖÖVg<”’/ŠBķîôҰ ™&umūÆL;ĩIbũA‘ũIENDŽB`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment4¨žyŗYIDAT™MĖą € á3$ŌÉ&.âhčd¸ #PR~ŸhaņåēÃ,aŦÉõŠV$’m’Ųq­žēyJõd9ģĀ^<ādč"Ī#表?I´× ž6XHlņIENDŽB`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDR$Jŋœ pHYs.#.#xĨ?v tEXtComment71—( XIDAT™MÃŨ @0†Ņ wē›°‹u”ŽāŌEķ~Z?‰“"Ūū^ŗ§–N-.õŒįšÛ1aqÁ‚0Ÿoy%Ô/Xũæģģ|íũ[´AävŠ]Eü5Á߇īL'žC@VÂÀ–IENDŽB`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR$TvŦŊ pHYs.#.#xĨ?v tEXtComment5ߙI%^IDAT™…Îģ Ā „áC.(5Ō1Z<ŖdŌQ “s´i>Y.~f0uÅL|Xūeą“îWGvĸĸAČæ9-0đƒŧ¤Aâ`EúM"åp8ĩ¨¯QT!Ģ.u+JŖ ÔØåIENDŽB`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™]Îą €0 DŅŗ(Ō‘2 ،HŦåŽ5ŒSIENDŽB`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDR%tÄ pHYs.#.#xĨ?v tEXtComment6FŸkIDAT™mÍŊ € EáK(hLœ@L`ŗ7 #PRž—ÄŸÆæ+΁ę.ĐbIVtGš/$ęĒ ėz#ņeõNĀTZ6CÎIœ(1ã‡nSš1šĢŸŅ0ķ‘_đ֝Ę,ųJÅzšgxIENDŽB`‚ pix[26]: xres = 300, yres = 300 ‰PNG  IHDR$TvŦŊ pHYs.#.#xĨ?v tEXtComment6FŸiIDAT™MÍģ €0 Đŗ(RfØ )f3FÉ.ƒ„Έ_ķäÂw‡fAҞ…ĸō@ 8œ/ °äiWÂĪíE—‰ĖŅĶÁéHī5Ŗ“œ†ų!õ‚19>Xĩ/ĩCāFFR˜4=ø>‰jʍÔIENDŽB`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDR#Ļą÷; pHYs.#.#xĨ?v tEXtComment71—( SIDAT™5Ãą € EŅK(,QM0’ŒÂ”„'úå$‡ŧ3Žũë9ûBęÔW‹č^Qˆ˛ė1ēŅ‹>ļÅŪÁÖhË*ōŧ‰}–āīėRÅAĶģΞéIENDŽB`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDR&KŨ‹ pHYs.#.#xĨ?v tEXtComment6FŸoIDAT™UÎą… DŅŲC`h_Ë0Ŗ:;Ŗ”-]gŅ˜ÜđÍĀĖV)  &%á ēĸO¤ÍõĨ.5‘SĄŅ^Ę`[&EFp„üœČhŪ öAäĪ5`@:9ē÷ÚĖrr9‰]ŅÄ?ķø qRņŠíģ3IENDŽB`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDR&KŨ‹ pHYs.#.#xĨ?v tEXtComment9Ö/sIDAT™MÎą Ã0 DŅ T¨ÔÖ&Y%#d͛ɛ°KËR… ú($ˆ›îÃŨn‰(ˆā‡VĖd#02é‹BėĪFô†~ą­Å‹¨čø1?„Ū‚u‰âœūP‹É ™™tŌŪ…ā…ģĸ§hføwbTvĪiĈIENDŽB`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR$Ŧ–WJ pHYs.#.#xĨ?v tEXtComment1Øô<AIDAT™eË1€ Ņ1\ËŖũŖũ#YRÖ%ĩxÍ$ƒtĄ JúĸpĪŅ"ß°cëį_ĘV—Û=ü“”ī?â[+rIENDŽB`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDR%pč& pHYs.#.#xĨ?v tEXtComment71—( VIDAT™-Ã1Ā EÁĮP¤< H‰4p+HA%ÃΞ3‹$ >Pž‘¸.l647ę5_…Š>Šĩ_búagOgģĪēgQvüÃ?úGzû ERdîIENDŽB`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDR&KŨ‹ pHYs.#.#xĨ?v tEXtComment36úėwIDAT™5ÎÁ Â@ Āĩx𤄤: •TBNĸ1K4˛%đĖ#ēe}Ÿ‘lkmCZˆũÄ#a€ ĪČũJā܊åOßšBĘÁfšéÎę¸:ĸ,XåáÍŋŠ31™ŊwM_EȉčQįŧ Õ ínžî_‰3T1ņ Į]ÎNĸųķIENDŽB`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR&ž ļ pHYs.#.#xĨ?v tEXtComment71—( mIDAT™EÎą €0 Ā((3Ŗd4^ĸ dĨH,’RR ›wÂÅIūÂo¸;ŅĸA3¨ąV$‚6›‹Ũfâ°LøŊˆ+čE´UԁN9ƒôaS0‹;¸ōG,ĸ ЍÅU^Lõë2ø _Î ÷XvPLšdIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR#Isœ pHYs.#.#xĨ?v tEXtComment5ߙI%aIDAT™uÎą €0 ĀR¤ĖY ˛rĮZ‘X„(SD6o„‚(hŽxÉ˙†5&8qXf eRÉxYĒ #;ɉd D‰ŲúaSžÅq“Bgi8 Ž"p¨ųsg2šāG×Ú+GžIENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment8Ą(5˜lIDAT™MĖą Ä Fá‡((ŗÂq]VÉ$Ŗ1ŠGpI ŋ•ätÍ'íĮōdŦ†€3›(#čۋ˙Ą/AnŨv˛1(ķūæ(īąb_ŅNQéĻZŧ~č"Í`(PģzMöH-ģėųF€jŖ_øIENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR#WēŦļ pHYs.#.#xĨ?v tEXtComment71—( SIDAT™UÃË € §&zƒ¤éĖOlŒR(#ōV`õā$ƒ Ôg?ö7gX¸bāķ I$î:rŊ'‚íB”:[œŽ^‡ö ί¨‡˙{l?ėbĐ8IENDŽB`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR#M†L8 pHYs.#.#xĨ?v tEXtComment8Ą(5˜iIDAT™MĖąÃ0 CҝSĄŌmēx4Os4ŽÂT˛ĐI!í$—æĀ,ÅXÂÎDaÖŖ%›ƒ˙YO|ŗozāUŒčŒAĩ8h?jfåĶÚ#ĐWrr +(7ra_HbVfČHōOyĶŪ‰ÂDK$Ē^ÕIENDŽB`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDR$Pƒ|€ pHYs.#.#xĨ?v tEXtComment8Ą(5˜lIDAT™MÎÁ €0 …áŋôĐŖ+8ˆā*Žā’Ņ%#ôØC1&XÅËGā…—`Šb†ÁĖ•zЃ6ŊÔžR‹Î´, /h$ĨS9ϤOZ]œķđCbA2ųđtto‘ŨûNĻxs>Ķų•D4ĩIENDŽB`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDR$ŋAž pHYs.#.#xĨ?v tEXtComment9Ö/fIDAT™]Íą €0 ŅC)(ŗŒBFŗÄbîXÃ#¤Laė”4¯ų–ˇĸ¸l(oŅÆÜ FŌëĸƒ?b°ë‡&’+ÁA#N#™HÃĢDČ$Ņ}’;”Åܕm1Ē"vÄkÕ^\?Į°G´œd‰IENDŽB`‚leptonica-1.86.0/prog/recog/digits/page.306.png000066400000000000000000000032111506303110300210330ustar00rootroot00000000000000‰PNG  IHDRTI†H^X pHYsb&2 tEXtComment306˛[;m$IDATX…í˜ŲsĮÆŋžŨv A@ EŌ¤ĖËbbŲ‘"Yår^ōāäŸMĨ*UI9%Ë%GŒ.›’(Q<@A‚¸Ī=f:Œd0™'UIúifĶũõôtīã?oâŋĀB‡Đ!tB‡Đ!tũyĻ÷=3€ģë6Į*2ŽyĻ %aøĐëŽĢú(š†ŌøÂ?0E;§wėvPb ôŸĻēŊũˇ‡zŌF"Ų)M@'ččŧŪŽģÖøl.D¤‘ĒŊx,u'ˇą \Ĩŗa­Z8xŧ™÷!+9ĩz{ŽXų›ß}_wG˛2ˇÁLäåŸŨ}ŅLūn% 48ü3 ¸ōâÛŋī— ˜|ÕUéĐ.î=Ũ1Lį r˛˛6kHBw믏ļpiw_ÆR @ģzļYmëŪļ zĪ)4ƒŖŋeŖ¸ū⁓™īínåít„¤ŗû§?”s7Åũގ”ų"Ņũ OĢow\hœÍÖ÷ëĩ'é4‰Íoîå¯~ūiēĐ}rT_X0õvūáŋO¯üĻüv÷VÁ~ā(Āž ’æÜBŖŽãW'uÃ}úˇm˙h%ØÛÎ˙pUŸ<}p˙‘ &“æŌf^Å#:L—AG–t`Í^Ķ×P-nۍŊ}eÄík45Žuˇ_ĮcÕ͗`ūøgģĀl.ę}ĸ™X} ûÎÍā˜ĨĮ­îîN+×íÆ=K-•üÚ38S 8õؗášL–”4. ˙#ˇ3åØKŠvĄ?ŗ6ÚĢk ēm[ Tų4zp䕪“ŠÅšķĨžąymY:¨6ZÂüôˇšvc¯fĀR2HÃÛģ>‰ŨVB¯¨¤œė´&]FĶĩÆŪ˝G?TiōęŒa{€Ø—žë),5ęĮEĮ /R/žxyė^ĪÚe‡đuÃ=X˙6ßlĀŧš1’+ˆ]ÉŦ ā°īuEŲÛķ'wî{f"Åž~iöu¯VĒv —jU´É‡&YBčšĐĀē/¤Ōˇž^,67œâÆĘbÂ8GøĀē˛\įØęŌ^žî­—ŨtĀՄdxŠ4]DÚĖæ~ŊucA_îŋ*^ÁåPŨŖČÜčgc{yũø¤9w GCާ¨ëJēŽ„Îm€1ŗ<Ū“Ąhíã˛gu­P%ĀīÍîķ^XŪĐfŋ:u˙ŧÕg2›Â%”œ”Vj1mļR*8ÕėqOI]ĶščB!€ ŨōķoĘļ96ņƉ˜%™ą¸Ąûæ¨Ö¨H#I„Ú#e]É.™šS…qAí˜ĄZÅgßUÉ^ŠÎ„MRč9ŊXrb¤"[„[ĢK“ļ>Y֝FG:øšIËę+ũūĨfp¯]k‚Û-yZŦCƒfûöÔlĒęKßuô™kI{bj _)8ŽžÍĻĐ˙5> Q’ußTp_˙¸ŖĨĻFãÖĘ^‘ĢĨ1SU]#{m9Zą ’O;oŽ0–2“J n' ™Âz8ŲŦ­ŋ‚ŠÎOÆ,sáÆqšũ¸ķÖŨ¨§¯>MmíÚöũâéŖV|oÃÁôZnÄ\pI3A„“Ķš;oĘÎχÄ/žČ†ėÆÖVžŠŅajá÷+!/†_ēĄuį¨fåۉų7?Öúr˙¯P`]YΏt›ųo22ņåi—e,U VŒŌiØZēõu—)‚°đ“NŊS[ŧ~{ኯ{}%Eūîā'›GÕjËŗÆįW—§"‚AūŅVáĮNÛČ|˛6`ĨA֚Īw ŨžËŪŸ0!û]…[Ž6Ú­ž§ŲņTbDgEnĢĶp=XąxŠ5Āíõji´s] ÔĶ„r{Ž´ ‚gĒ0AŠYg ÕģĸXô_§ƒ R”OBé ¤LīßdkŦHą&Î5žAáŸ[Š…ĀJ{ˇ”""‚¤÷Q+ūIÕA‰’LZ'c&A1@īgO'ĨHâß%ęL)ˆčlhaĀÚāugsĸ€*‚bô.ĄžÖ¯% Š,$ëPī„fųĶ‘ŋĐ͟c˙?ãų:„Ą˙ķĐ Į#¯éü›"IENDŽB`‚leptonica-1.86.0/prog/recog/digits/page.590.png000066400000000000000000000101251506303110300210420ustar00rootroot00000000000000‰PNG  IHDRi>§kĸ" pHYsb&2 tEXtComment590ŽwYŖđIDATxœíZiwŚ~ĢĒĢ[-Y-Û˛-9^ãx‰-H$𐄠1ˆųķKøĘŋ˜9ķ†œš “.!šœ`g!ÄNė86ņžĘ’lkëŊĢj>Öņ$áC18~ŽOĢēĒēëé§ĒŪĨž OU=]ßŋ-ā§nņģĻ㊠TĶhŸ>¨FwûØÅ>wÕcŸģęąĪ]õØįŽzԒģ ¤ĩČ ‚@rÎ}ߤį<Ī“˛„sîēŽü)„đ<¯Ō‰ėŗRM–Čnc˛O!„ŧBpÎe}YūH“Z=ĩmü3ŖRdŸ=jËpÎ1Æ{"„8įA¨Ē*ë !ohÛļŽë°;xJ)xžĒĒ>ū2AČgÉū…Šĸė}tMPwüÉĨ{x‘ß\ž7Ɗįy!9`)%ŒąīûĄPHÖaŒIŌ=Ī#„øž/™*•JĒĒjšæû>!Äķ<Œ1!!´—Ûļ)Ĩ„Ķ4UUUU5ŲĄ„”$ƸļôUe? •×ō}cĖŗm›1æ8c !¤išb{{[Š(‘Hhš&š“´–Ë坝UU‹ÅĸĻi”RĮqęëëe5ŒąŧĶ4)ĨĒĒ BH:ÆëēÎ3 CQÛļŖŅ¨œĒR}„)ÆŊœ>#j֑īû”Ršâøžŋžž>??oY–ī3ÎyEPétš1ÖŅŅņÎ;ī „|ßw]W×uĪķÖÖÖ˛ŲėââbĄP\čēŪŪŪŪŲŲŠiZ}}=cLęQĒŦT*---ĨĶ鍍 ß÷ëęę"‘H"‘H$„H$"×SJ)ĨT ŋV ”D͸ĢŦqžįmll\ž|ųęÕĢų|!Â9ˇ, !„*‹­­­üãKĨR,Ŗ”ÚļN§īßŋķæÍÍÍÍŲŲŲ ĮB†ŅŨŨ}ôčҁĄĄ!UU !”REQL͜œœŧuë֍7,Ë2MbąXggįącĮRŠÔ4M“ģį\ާ¯¤Ī‚ę¸{’‡°ā\ĻUš_˜Ŋrõōŋ}qãĘô‘ûĨ´X,JēˇļļîÜšķųįŸ_ģvÍuŨŽŽŽÎÎN!D&“Y[[›™™šwīŪɓ')Ĩ}}}†aX–•ÍfĮĮĮ/]ē4::ēąąŅßßo†ã8ËËËĶĶĶ333¯ŋūz<O&“ēŽË…RnAlVΈĒu‡øîÆU¨”LĄPČd2ŽËB!ÅąJŠįē€A˜×4ÚØXOBH˜fivvöÚĩkß|ķÍúúz,{ņÅĪŋ9ܚHÎ/.\ũķ}6::ēžŪđ}˙Ũ÷ūņؑL˚}øpôúÍŅŅ<ĀžúęĢŒą‰‰‰‹/JŊK ČĩR*îīÎ~ė?FŠˆRęēŽëēų|> Ĩc͚Ļ3ßÕ#‘b~ģ­ŗ-•J $M›éĩ˛eũđÃ÷.\ØÚÚ"ŠzöÜų˙åŖļŽ‚ÖÃzŨâęڗš´˛ļņ͕ŋõ õõ&nofrB ã/ŊđÆš×OŸ>íēncClöáĖâââŊ{÷.\¸ iZ˛ĩ-‹úW(žĪūî{Å#ôqP!„1Æ|߇ÊTęüųá7^;Ŧ…äŒŪŲŲQ4’H$ötQJ‹åBĄPøņáôööļø MŠTĒ­ŖŖŊŊŨ˛,M×=/čéé EÂvš<ŋ´<99õō˧Ęåō7W˙vį‡ąÂövHttt´ļ4'“I`Œõ÷÷_ŋqĢT*ĨRŠžūÃĒÚB€@@CZmh€šÛ(aΚmۊĸôô<{ölĪÁnBh(¤zžĶŅŨĀâņ8U([æÖööôˌã:€ą^ééë …B*U! ‘H$ŸĪwvļĮb1Û4ƒ Z˛,k||ŧ°ŗœķÎÎΆ†]ץÎÎΞžžx<žĪįWVVPŌÚvˆÆLĮžŸžžūáöíĀõgĻūÛŋūûĮÜŪÖŲÜÜ|ōäÉ?üđâŋ3§‹Ų+__žē?ņĘ+¯˜Ļ9>~/ŸĪƒ‚xāĶP¨ŖŖ­ģģģP(H„ÂaÛ1EĄ”Ú–Ĩ‡ÃÖÎNš\V…sNQĨ\.‡B!×õ5ÚĶTR Ō~B-crÚ677ŋöÚk'NœĐ45‰$[Íōėėüˇß~‹1ūūÆ­­\Î4Í|žČ QĩŊŊũ7Ūéęøøøôôtzm=Ŋžņå—_bŒ-Ë&@¯ ˇčxîšįĸŅh8–ĸs]WzûŒ1UUAƘiš…Bd\KQ!„ĒRø–ŧÚ؊‚ōF ÃĐCēÔcĀ-ÔX5DĀĖbięū´Y.{–ģ0ˇhv0Vęb'_8ŪŌÔ84pxyyéūÄ}iåÜŊ{wqqŅ4M×ōė˛uúĖ+§NŋÖëZ[uą¨m۔jžī !!DQ|Ī“Î|> …Į1 # !$iŠ‚kkĨԌ; SĘd2Šĸ`Œ$„pH?p 9t8Õ‹Y%Klooc &÷Ŧ455Š*<|æÔ]×'''×ÖÖ&&&|' ĒŌĶĶsäȑ††ŗlĢĒÚĶĶ399éØöúúēišœsšÉĘxI:–sļ­­-‘HČ­ƒ1É¯UwŽã`Œ …B6›ŊzõjŠTJ&§Njin’xāû &aŒÜÔĐX5 ËuA &ą¨ 4Į›ÆÆÆFGGææf}7 *:üūûī?~ŧžž^Ĩ!Ã0žūų{wīįžĮˇļļ|ß/•JQÃ(‹–e­ŽŽĘpaGGGkkk}}}­Æøj9g X,ÎĖĖ|öŲgĢĢĢũšĻ575†@a~`š&ķÎXÔ0:ÚÛ ! (&Ą”`ŸųÛ;šÕ•õ‘‘‘‘‘‘š‡ €āȑ#įΟ>vė˜ŽëˆīûGũę̝r››uuáÍÍM™¸€……i †ÃáŪŪŪĻĻĻxŧAŦVCŨEÍ|2žu]7NOLL,,Ŧ|÷Ũw—/_^YY \Īw\Į´ÖVVŠÅ"ÁäĐÁŪÉ6Āü@Ápä2™“÷¯^Ŋ:22277ɖ3gÎ 9rDĶ´ ˆæ–x˙K/ŊKßvqqŅuŨĖææüüü•+WcĄPhhhčØącąX lÛÆ ĻaãÚéÎķ˜žqc´T.hm?{öĩDĸš.Ņ4Í÷ŨL&“ÍmŽŦ­ÜŊ{÷Ë/ūįÛoŋCÎ Ÿ}{øÍ?œzĨ˙P4œœ#MMΧRožųæÛˇŗŲėõë×ĮîM´wu§ĶéŠŠŠ¯ŋūÚqúčŖööödĸcLŠ"„ TŠífQ3ŨÉ\W]]ŨÁƒ‡N:eÛöüü|ˇoߎD"†aD"‘ŪžžT*uîÜš“'O†ÃaŲcœÍf'''Ë%ëČķĮŽ?ŲÖÖ600pčĐĄæææJ5 É Î9Ō”îÎŽááᆆ†‘‘‘BĄđã?BZZZēēēŽ=zâĉT*Įå[B0ÆŌã&¤fæq rەTŧ4ĩ8įš\nnnnyyšT*-,Ė@8N&“]]]‘H„1&§šB&zcÔõH<O$Ō¸‘y†ŊNĢīûŌ–´,+—ËMMMMMMe2™ÆÆFŲĒŊŊŊˇˇ7Ęíko:ü‰‰ķĒQ3îđnNžqŠTĘįķļmooįdÂĐ0 ]ו]hš&%Ā9—ļPJ9‡P(‰Dd?27$ŗ‘˛$é˙ÁŽ9™Ëå\×5 ŖA1 CėZ|AČėÚ3ķqԒ;™~—‡+¤gŽ1Öu­’$ÛÛĘu]MĶĀqœĘØ …B,Öđø#* Vžģ§8¤* yč@~Øã„UäVÛ\O͸ķ jšŪUˆ“!Ü]ĨpÆØŪY#OFI.*p]cL)Ā!?ō y6C–Ë“2÷ZYū+‹€ã8’DYį§ĄÖ:PË9 {ä oqÎ+ Tf´ TVe+¨ôƘ¨ü”Ÿä§Čāî^$oí=´÷–<ŗSĄŠrǍRōëÚ+$~Ž„ž\ūķõkbûEąîŗzėsW=j6gO›4øÍ|ÎßĖ‹ū ąĪ]õØįŽzėsW=jœëy~ˇŸįw;°˙ėsW=öšĢûÜU}îĒĮ>wÕcŸģęąĪ]õØįŽzėsW=öšĢûÜU}îĒĮ˙Ō°:pfū°$IENDŽB`‚leptonica-1.86.0/prog/recog/sets/000077500000000000000000000000001506303110300166005ustar00rootroot00000000000000leptonica-1.86.0/prog/recog/sets/samples06.png000066400000000000000000000415331506303110300211260ustar00rootroot00000000000000‰PNG  IHDRŖŗ˛ëJÜ pHYsb&2ŊtEXtComment Boxa Version 2 Number of boxes = 9 Box[0]: x = 27, y = 27, w = 306, h = 304 Box[1]: x = 362, y = 27, w = 305, h = 304 Box[2]: x = 696, y = 27, w = 306, h = 304 Box[3]: x = 1031, y = 27, w = 308, h = 303 Box[4]: x = 1368, y = 27, w = 304, h = 303 Box[5]: x = 27, y = 360, w = 305, h = 304 Box[6]: x = 361, y = 360, w = 302, h = 303 Box[7]: x = 692, y = 360, w = 304, h = 304 Box[8]: x = 1025, y = 360, w = 306, h = 304 ī"˜f IDATxœíŨĪãʝ øācuE56Qƒ9L-ŦV”á|įà ĐXŖ(oãc˙ ųözoփ–H™Æã,`XėŇÆĢãū >4ú‘Ļ×ÚŽ>ÎaĐ/Ø&÷4Ú\Ė‹ęŠbė÷ÔJĸ”ĘŦTŊRÂŽ|J%EÆGAF|ƒ ‰ũ“$ßt‘NĒãI'Õņ¤“ęxŌIu<é¤:žtRO:ŠŽ'TĮ“NĒãI'Õņ¤“ęxŌŦ É>Ƀ%÷ZPkÍ~K2kõ}¯S|ĐĒį{ë+ø'öZō r°ßŽōĸ\íŊŽSœT'ÕIuXŊiéšęõ=æāÖĒÉ ‹ąĸŌ¤|o[ĘĒÉ5.l[°`ˇSi˙†e ÷}Ī֙n_nl-ŗŠmĒ4ßō‰Ø†Á\•MᇠędÖø÷Ēâđmߨ27Đ•ė;UDĖU‘˛ÛU„)ī–*ąk‚°ÂĪ×m]R“@'ösoE•âŪ§ų–ĐâœĪUū *uKՖ5•Éh‘kKĒlë’ęRLU0"+Ǎ;UœÍTÃ|lUņ\÷¨zmxσeY]m]rĒyŽލ ßÛ÷†‚š…ĘpĖĮļŧøjÅíT;¸6|lÅo.˙‰æ™ hRU7¨´ˆg*-v $€]ųUWĒôĒ+Í2%¨ŦĒ CÕļd@ÍTj§ĘˇYŠÚ] ”éë›ÛĢĢ‚u`öPŊtĒ8¯Ē4‡vfkĒĒd°+ÃÜF†WUrû˛ã|/UļŸ*éÁ’bt •ŽĒvÖÅb_Um‹wŗJvöU…-i•¤XĒ”¸I5œŠ’*:WŠŲBɖ ´Bû¨Ú,QvĄBؖC%|âTãĒJÎTŌ~Uķ UQĨ _ž€Fŋ&AŖšVVÛT*ą‰_njM‚]*oŽzãÖĒãÚ%“',ƒåF+ǰ˜FҚFRÍį*a:įŒZMXJd3Õ,ŖÛöĀŠ ēA•îIđõ–PH6˜ôį*Ųír“Më㋤ÅQÅÖTį”-é¸ķk)_QŠöŲšoH˙l3Ė/š<Õly ˜ ßĸš€Š9•"ĸ)&_ŋ˜jqˆ˜fqāßĩūŠëčē^%{<5ŧX‰Pß+HģN•A+ėÍT‘U=ræëv˙ÁfŠÁōĒJ_oWŁSÉMÁ§[š-Ķãw/T˙’įҤ^Ĩ!ļ‚&;]QY}–ĮĻŲ Ÿl~"φÍU>¨†>ÕũK7ƒ2#¨R+Ē-(›É`Tö¯ūËŲ6$˜ŠūskĀ'Q^\A'aįOÖTßJH×tÎH͑0ĸÅڊZ9ūˇL™רĒ.+Ēmá"|QŌÎT vĒ 7ĸøŗ,7f¸ž$vą{Ni?‡NYÁĄab5eå/UVÁá˛EĨ‹@—gNS,Ģãõ*Ē‚įU•˛YŌUN.Ej4Û3¨úíAUM~Ļ)¨â UfĄŠ'ŋ53UĨf×XVyE…¯ĩ€æfĩŦž¸VÛĢ|”Įiü*SpģyÛ@XÍŪlbvĄfŖė9sīFžáĢ8kAc†Ēū" ģ b °tĻÂe Ē ļ•:đįsŽ‹@qŖ|%9„¨Ō?ŗ†éF‹x =”Ēß$äŸ@%…Ī“ŽŅmá%OĄIŽÃV§sîkĄZKÕÅ%M¸§|AÕaCĨĖ`mĄē40*§ †ŧķ&4ĘBč‹$ž[ƈ=y°čö ķ†ē:„‡Bv|I BuÖ[đžŸ0ŗœī6|L¨ėxƒķĀEˇŊZ`§CC¨ßqķî;U¸šĄ)Pā Šb‰_Æ„čĨAĪ@ņCŠzAüRēoÕMëāæųHÍ$OÔiÃH~ß~{Šj7™x83Ô\=ŽRU|ä‡íĨjļ ũī-6QĐOvķ@9ö,ŗ‚Ņ"8d_ēūŨjŌåũģŗ3EsÕskŋ\_sZŪgūS÷{°Ē ֗/UĢ9¸9Ũ^5Пŗ¤’ĝ¯‰Ô¨Äō|Î!U/ˍw$q*,ĪŊRõâŨĒėõFnNī™JŦ˙UÛ ŦÄú_ßÕ8ޟ ¨’ĝU›ķ-jž<›zК}sį_KâÎ*š1QA–oRUžRŨ•Ä=ĒlĨu<čyömãIÜYúzĒLAy™pRíˇ¤8ŠNĒ“ę¤Ú+‰ˇPmÉpĢÜZĩû1%ŽĢ*ÍvÆXĢĒyL+ÊŠâŠŧåÂSąĻĸÛ§Sˇë*˛žheÔ{Ĩ2tūÚ´ŠēŽūš2 ępǝŨųŸÕd–1Š;§!VUÅ-ĘĒ@Õ´úg§šTr°Oē­ęĒĻΏ|ŧË gkĩģ…ę‰]Sš“1߄jųÖÕÎõŽĒđķī‰j‘íŅI5Kīƒjŧsd÷ĸZi‰ŗÅĒâ;ĢžÚ˛^Ü|g>âΰ78NíËåŸß‰ŠēâËwß)ŸŋXS%eŊĖ܀$lN%ĪãBŦ†}¸ų§bõđsōR„ƒ‡žēđk(m6˛ 4ʼn8  ړ&ÚĒåe‹‡AŌss™rÍāXЃŽ_4EEEÄggIŸ07Î@âKæÎįHĄ¸Ąp áæIûiŸ|Dp6xI89āá`„§OpRT"B~P•=§æ"°˛ÛbM>c¸9.Šŧ„,Ÿ‘žčšĢž€Ėā™ė_ÇŦú–%ÔŠpT…ö“ËĀŠžô;ä,a˜nsÂâĄ&†°ážäE‡~Îģ˛ąîƒJˇ;MŽúns<Ë$ ōˆ (­¨Îy‚ąSŠ^€‡ ŗČ ‘Į‰¯ō„pÜüŲã‚û–(¸đ!Ž"ž°ĒÉĶŠĖ38ėķĩ˔íéö€ƒ*ĀËĄ|ĮkúŠŌÜ´ÃĢ4ǘxÆGôK8ÛTÁĄ'B'NeK•ģô?ŽĶ‰ŌM§j| Ē|ޚØxb3UĒ86":ŧ ļ×ë ęĪUTR@XQ}ŅÄg˛ÎTŌuĖÎéķō‰Ē¯ižáĀ.Ü<Ÿ,žĢNJæĒ‚R5~*Ü^ fúfŽ€ĘŽĒž?fîō1끠r—“ĪũįY¤pđshi’.TyU•ĄŠ+‚Ē8S T:ČqĐV8Ãí™l“Įbš7ԅ`9ǯ՚}ĻŌ UHxR& 9ņĸå“7ÖUŲĻ*<Ø5|P}…pũԚīûö×Ŧø4ž$€ ĸj˛]Å&˛īT—BúeÍÎ*Ēĩ˛ē•Āî |N•ũ§ÃĢ\¨Ā|˚ âĐHBĩ‹Ē˞/DUõ°ĸ*‘PiÖ,Û+˙UZÔ¨úĨŠ+ˆ¸–*qø˛‚8 To>ÔlPV1Ēâ1¨ĒeĩÅtĄrīÁ'ŧD؟ãš_Qú*[¨”ĶTĒø¤T3ÖėŋãđĢåéĄĒJ€*6FA¸úĘō‘U…évWîeŠ_üwqįE 2P×¨Æņ^‹:ęļíŽĮIqāĘÎ4+˙øyОNeŠAß ŠÃ>‰õЍu`ŽĨĘŌßyøUą .U°ß ŋ,Ũâ“ņšÍÚ+ƒ*~Õi66*ū[ŽãžQbšgøë1|ÁņkPĩ-ĒĸåSŊžhøûž›ix+UøUņ$žæzļRĶxIžÆø7$}ws‰n˛HBu›}ÁoŪJ•ü-Ôw܁ĒáAį—ÅŨeÕĮhuX¤ÄBE|Œ}ĩ'›8.+˜ŠČSÜqĜœˇWøøSÜÄėU š€ˇ@uÆIR@kĀōƒĒڄ¸ažüEņTö#f •~=jŊVĘjU…›ģÖĐd=ŗŪ8ô•'nÔ#|˛ ä)¨ŧ‚úŠKyáãí@:!Ī :JŪōs8æĄ˜=¨•F  ą5V,iAÎmØķũĘĶōĸĖî×k´×¯lrŲs­0s=âo^=˜ô†°~VžSžz;œj#šGå¸Ėƒ {âËÚâyũ&ĩ›fŦb†ÕĒ*‹Õß ēy|()ΑߍZK;U+ŋ}#*Z>áHßãõĢo^…íf™ņЌ(U¯îSTû&U÷yuõ˛Ã7´Î^‰ãQų7ĒØüqxâŪTÉĘÉėoBeOQ’*™_Â÷Ļ’ßŧj‘Äû0Ūâ¤Ú+‰“ę¤:Šôņō&ĩD(˛]xl*\­!ä ų-Î0qÕęė0â}P­”ĪÛŠ„}i×Uˆt\ûŲwĄzļŸĒpܘ2ûiiŧ—ŲēĒX…[›ojâŋGĒōAʋ|fvŠ*EÜ|UÕue€ßÚsąÕēę+ģ6Ūl%}ũv*?ŦSŅՋų؄¸œĪLĒÖTų6UĖ,KÕh§ęúíjvZĢZ;ŽÜ‹įķžĮŽŠSPÜ­ĒĒIe†Ŗ•YŒ@ekT[gĨēí|Lë*ļĘų_Î{uÖCq‡¤æÃQ GžlU­äøÖĒÉÛŠÄ­UF@iQ<ąė†9Ŋ—ĒÕĒhŠĪU¸(6MãuUžMĩ¸)iŠ‚nŸÍŪr†•ģĢæj5æ‘âHÕ+¤TUiEĩ’ãM•čš-fp\7~+•GëPĨJ°ãp §ōgĒiE5ZU…x9ÍUéŌf8yN[œę+UoЇîR I˜"ĖĩxÖ ¯¨ŠŪFåŗí*É57gžņlŒÃ üŲlK•­Ēđ8!<ÎĘAęĄČBķČc ŪĐBąÜ&Áw3[^kÔ8/B€S$6Ą Rž~BqšC|íĪÉíŽ ¯ŠčÕht­‹3Z+(€hÖ Ođ›gĨĒr]8ve5Œ 7Ԃp ]‚é>i7ũ„)?Á!rÄŠ˜Ōũ^Ÿ ĄyŪ$ž"T* ?†ø–§ēy0ŋ†{7ÛĄbņ•ÂÁ1Ŋ ÆĄ84Ė+UļF…ņT tĶæđŲ&“Ũžę7Z@Rõ?$ ÜUš\÷úüø°āl˜īôŸP7ža(a{äáەUs‡ŠĮʎP5žÂ fĘŠÆĨęļ¨tU‚IũąîĩÛ ĸqŦ5@čLezƒ€ãa9ø8Ëô€Į7Ų‰Â9¸âˇ;Ž;UņB…ŒKÕ§ģ`ö‹˛[QeNÅÜd_šųXëAãQ‡ķ(U_IJ'fĒVgŽĸQ^đQĻs§ŌŨ^Åņ[EˇÍ]ĒŅ\å6ČϟsWīíPáČ-æĻZ‚Ŧ÷Õ ņ¤ĒŌĨjbÚ´l¯4$¨ÎwËW ÕčíTĪvŠ2TMt7Ë`¤tũEāZŪ)MŦŲ×U/AEĒ3Õn4įUē'ĸš*3m2SP™R5V˙wŨSÁØžĒģSEčHƒĒ  ĸn Ę ö+U´F5†ō˜Š&Ļá)Ōö\ŒũMUĀŋ„å%a•īTAՋ;ĢÎā—]eeĘ< bÜāĢ"økhĄeV ÕZm‘]aYņ™ĒMJU }ŨW ĘǍĒÄËr'ÜŨ´t1Ԇ?ÕíæcZQõéėTáqĨ[AŒÃŽ‹āo°2v*†ŊŽ7TcŸôbĻúéÚļ°aŦŠ,ÅLõbĻę@XRĒēŊOA5ēŗĒAnPÍęĀīĮ]ƒ64¯Æî­Jēā‡6ËzŊUUK—ĒdŽ‚ö žJJ•~+•¯oP}]ĒôĮã)Nu1hčÕ\šNqj4Ģ->ÖŽŦlœ´VTĐ^sÕęĀ&ÅöŠŽŨ™oŠúįîu{‡ę Tq¤ô÷œ*$U?+UĻN•žĀÚÛĩW TĻĀq•Xļ~ĒxޚęŪ@āH¨ė—|KPåĘ~Œ§"ÕU?ŠīŦ˛xGÃ6•ë52¨Ņli’Ļ— ˆ}âãF0L{ËĒ3Ŧō˙!$Į°zĢ*áš´É3Õf!^/%Ä@hœ ÖÂåc•äbďSq\O„ õzAz :Č?'}_btûԍz$ŅŪ+,×ņ OEŧčã‚ŋßQ%lņēŒĐļīØU‡ûtĒ›<ü#uãąlyâPáĀ‘ZW¨ŌAąyā~{ PEA’•8]yŸˆ@Ë*ĪDÅCčsŗ˙Š­pH!Ū‚÷ö*VSvëPÕųŲĩą čāÎúëxö™ŋŲrõ`‚ņüÄFæ/-ÎՇo%ÁÕõBĩ5Å_âthög¤Šģ,Bö¸z°K…‰ßû5‘ʼn[Ģ„+)RžŊą[…yZĖŅ´~>đæt8•;FÖUų‹ā•­Ē‚÷Få-Pĩ*{ŗjqkŖąī‹Ē@.đŽz•ˇj4ûīú5‘›ĶT¯ ĢƒŲ–s_Ģ'>ßC5ŋŽ8ąī‹JšÂ`s•­I5•g=įĒ„×Žg~ļyãZãé&Uą˜ėvĒŠĢ˙¸ŧ˜••X-+ļĸ yízæ×įÆöžUæŽ*厨'˛;S­u†ĪWT;ō†é+ûž¨ôŸ:U‹¨™ęIę3‹÷bd‚įŽŖž7W­ĨÆqĒĘĖã4ī ‘åĄDņōp+ÃNx´*,& ÁŋôsØ˙5ŪaB“6ÖŊ¤}Ŧ*z *_SéO °>",Ž TŠgGĢbŖĐ“~Č~ã_AYųx{?¨Ú°zP„GĢbĐᤄ=ö˙?ŦÄCFũ:áį¨ōËFųUMF¨a¤ŲĨĘŠÎü#=¨'|œ_âHUP/Đäœt6ҰqîCÕ×m¸á?rS5ŨĩĘuU9ØI[ž„¸Kĩ:ûč­UM 4Iģ )i4áéļļŠäŽ5ëU*ĐëOn,¯ƒīR­Nw[U U'-ÂĄ˛¸`¤Õ8‡Ê"oCUėTyÛTf]E­j@ ûäĸįBĀ.¨ ĸh ˙įeŋĢĒ2ÛTW;Uņƨt§ŠŋĒwvõ]ˇëΚu;äĸÅHTPūŪ¯Qm9ŽÜXŠ|ëqĩū”ÍØUuĪž5ɓË.iAøt@..˜ėä'ĐZÉŲpÁՖT¯Z¤g‡š ß­ZũõļĒĮ߂炇-§ōÜŠ48ŽÂjŠgôhUNāž×&ŸÍO`¸0ŪqČēJo[Ų Ē‘WÆîV­Ŋ}‡˜Ŋū<4™w…ĸŌģUëÁßAÕ+3˙lCÅ÷W×UĢîv*ĩ[ĩū0ŒģĢ.7T͊Jē mm­âu•ö Ī ‰Ķđ9™ÍŖ‹ë*Žđi‡?ļ…§zÂōįē7đ ĸ}eWø¤ÃėypUyFzÖäVSģĸ"}ˆ>lB‡vX0ęÎ(hū>2ĐøØ$O5UUøØĪž/‰4 BßxæB›cŧ0ÄBš§NEU“)BáŨîSŽĪYBÚđI¨€ƒ„%Īđã ˇWŅō<“ŨTõĒĒ6‰C‘Đ´x4xāã…F‹Ķ6đ3Čvdņ‘§ĸ’—ĒÕņÕG<’āĖח†p…ÜŦ"œ†T’™ę^‚ęĸû”АF¤ÕÕŨKPÅÔM„ũĄ[Ē}ÎaĮŅũŽ—žÂ3žãqr)š<ËPuÎų(­Ē”ę _?äQĒÜ×ĒΘ”8õ”T=PAØéFgų‹Õf•îĩY.) /tOõš X¤š°sĘ\÷îRVrËq%’ŠjĀcʝĒQūǜŲKw ÁâTʁgšœW÷ĀTu áŗē@%"Ĩûl”ÉiŠ bȞS}T82M™~‡eę!OžęŽ6įq#ÖRŠõ]TŗĖ?ŨP‘Š*` bĘN5dvú ˇÁ2ķ3§ĘuÁVTCy‰ĶæpFSŨø D*œöFŠv+;söË"ĶsÕ9O>Ņ}7wLZĒ”6wPÍ/Šl¨U•eņČŠpNžŠvĒÜü °t*ønų¤ĸŠ”, ŋbĻ‘‚Ŗhޞc¨âĘkø^ÁĮĻ ī6püėŦ™Ôm§?ŋ¯ IDAT*ĮáåRˇo_zÕŗuXU5˛_ jjŲxǍJ j:”eNÕaĸVÅ𱁑 ;8š"WÂęn ĮŲLg*Ëŗĸ@V*č3ĖT8OJMî *0j*Urˇ īLŸæNå5{ĐŖ ”]á¨ŦŠė\eŠ j U¨>ŪPŲš JNBŨ;WqüÃ]TÄĖžu•ˇĄúŋ™zĒxŠíUņŽxacMvĒ9ŖØ:ÕCT¯ĢĒ'N…Į•åąt¯{s•ē›ŠĖž§k ņ⟅ęųB…×`p15ˆUĸØĨĘ!´‹ãō9ßũĒęKžŲGÖN Ô)Ŧœåö5ŧ^¨¤|rĮ1Ō.4z*W›,ž‘ō~Ž‚ÚâuŽŗN_ËUn˛3T›ĒbŽzåTÅĀŠŠB TMgĒīü-¨ mž*Pɉ%,/>ƒ×ũųq•J’Üō€zŠō¤ō˙ú[-÷ÎcčûĮIĢ%’ĪB§ ø¨ß•Ģ_cWTĒ^•Ē?ŽÔŠ‘Đ`8Õ§âqf6Udž ‚֝%?ļD€Ę´Û š8Ôú–Ē÷†‰'Åc AÂ}ŽŨ>ķō¤ ļ“íūĪ’iŠ”ĒëR5Å ‹ØkˆyˇĢ fÄÛōHPéÜā„f´ĸ"p4Ą ÚĢ6‹mņ/Ŧ*ēĻŨča+ÔOĐ aš¨Ö€(1u!~>nŨ2FQ†]šhāģ˛j2:” Ō틎ŸĀ^šPOŗ¤ũx@ČETé8InͰCø(K•ÆG‡Šā÷UŽ!PõÉO\;ĮcčLám.¨zzQNŧ…cŌ`[Ž‡"֓ø|KT%pŒß6fĪŖ2ŽX¨hž`ĨŅęĩĪ™Ÿ(ō'úâ)”!ûOĨ ĮēyöŧŊâÛrŠr=‘z"bɇUTĐŲķĄ“YøŠŲį2q7’(ęNwōÖ7P$Nu1°Ž'}=´t”ā@:øÜB†‚€Î¨l=žm{åĨ4KüPrøJ' ~ŊnĢÁāÂT—tũm\ížwgËSáSĢÄëХġ–ĒēŌų ÷úsË1gķ!ĨjũS˙>ŧeßĪhúŠl‚ĘņZwˇÛmœSh=Ų%P+žŋ‹ŲæÃk¨kO"ÜRŗÉŌäÜOÎ)ÁĻJIÕjP/qgŅ$%įū;¸Ō3W z¯s;}ČÎI–…į~Ø|čTš”­6õĘC=ŧęå\ŊvP{ë–Ēķf“DYxFIã"]ˆ0ō" ŦÛėáŖķŗÃ̞ųí™÷ŖzEĪđúUö Â>jük§Jŗ¤ÕŖ TPĨ'5˜|rpÕb(ƒ=°öōÄíTņĒ‹„žˇžįTQ„eÅüREZPˆ¯-ĒHõyíÍСŦ-T T^‹<ŧhyäŠūžE>âëLž •˜Ŋ‘YŋÔåŌm{"O›äĖģŦv“2ˆ_ΟppNÃė|6ŦŊ„|§ūv$Uk>6đčUōÃQ…„<,ķžrM¤[Ķ~„ĒeúŪĒĒõa¨ĒĮÕ3IzíCõ´rˆĒõa¨–É›&8ZæíTōæüÖĒLŨįîCEŽÃj•xoĒÕ!YQÍŽōKĄ]ˇ$9€ DŽĒâ[Ēž×Š‚íĒhŽR¨re҃ÍŪļ1fĮ֍žXĒF5Ī‚UÁ‹Ęo2XQ•G´øG§r_Ār?ąÅ~ĒĘw?{tĀmTjVVĪŨoYŠ2§ī-„vĒÅúŋ!Õė–ŽĨŠÕ¨ôâ´Kų[UeįĒ|—ĒēãJW UwMÅuPķ Vy=/+žĒĘŪĨĒn z93ĨVëĒÕáĀŗÄ÷PŲ…jųÅŧK•ŨŽ*ØmUĻĸ2÷§zvŸ*ŗˇĒ˜Ŋ§+*=S-–ũĻĘęÍĒJĶ \ƒęËĄg/]ÍuG(Š÷&âśn Šōs¨)ņdK"äe g3‚/˙TúĘ3ÔĘDD‚CŅ>k˜*œ"é؁U^_ĮgRKŽQ•ájDēŠj,~5/+§ōtŅü!Îí1|ØĢ¨šRՖ^:˜ú öĀ?qĒK‘‡Ģ-,+ŧČŠRTi>rũĨl´P}-×UU|ϞN…[ϟ¯¨Ü7A5ŗŠĒÉ *•9¨ĘÅsÂÆ Tŋ,U_fĪ*ģŽŠôŧf f‘ĪĘĒ`¨Š*÷ĀMTÉÔĖŽĢԁŧTŠÃĒb‡‚Šk{ۜŠōŠĒēžĩ84ĶB *¨ŲķąSšáY—ǧEãģÚŠZ™BUęTPËr‚T€é!UQÁ^c̀‚ļįRõ\rTšÚâēĒ"=74#Ļ!´ÂŖ8O!̟¸V˜€j\žÕ'ĨęãLåF—Ē X´éTTú-T—7Š,ģ.U đøS‰JøĸĸR \…M< ÂÜ03P‘.:;'Ũ6„S嘺šDUhŧDÉŽb8í–ņTŖųˆ¨ŋ°8Nô­â@šSEmfŲãˆāÚĢÁˇĮ¯ėņB@䂞ŠĘÛŽ'bCß|Ä%K<%ˆ{4ŪpCå›Ģ\ŦīÃ8nWčIŧŌ„Se‚ęÖ1ģoöUáp7lq ‡ą4ú<ģVAėNÜsUåŧ|ækws“o?§ba|žĩēAg$QÄW3U@¤“Zú{_ûŠĄĒ€XZx)Nyâ­ûW^%ķģ÷@ũŪ+AŌųŅvÃĪ'ЇŽ+A¸\WURlŨ-@ËL8¤g-/Ī[ }OVyVôŗ'894Š?Øy *ŦlxCMúÔW?’< Ü †Ŗ*_Ί¸Žĩ9x×DvĢđķ,ũ Ė-`œ*qŊÆë-WzžQÕî=påŖ•ėî¯įŋ‰÷Nĩ=QkÍÍKašĢÂŊ–.ëÃûÍûPU‡H’ÜŧĖņĨ“ęxŌIu<é¤:žtRO:ŠŽ'TĮ“NĒãI'Õņ¤“ęxŌIu<é¤:žtROēÅš[¯Æí•ŧ?õ~WY{WčĒį{-z]y.ô΄KŊ¸qŠ[­Ō^ŨŧH%Tŧęå–e27īSp¤Ēڃˇ…oõû¤ÚrÕt–T˙ŋQe¸ŲT}še•îũCĢjîéY$†ĪüIø~ĒdMU{5Ņ_°ĶÃĢøöe(ŨY5 ŦnÃ7÷ĀĸÖ¯pâßĐû&ËęĨoylĪWTŧnÍ­īæž nVŠoZ5<*xŧ’…-ĒhCUģJ\6ôŋQ•,Dfx´’…ēy˜āûߍ؎Š`L¯š ¤Ų˜R$¨ĘV˛×,X§˛ĩ3Ë$Žļ/TÅú†Ėû¸ᓎk¯ęTC§7̤XĒūnąä>Ēû œT“ģ˙&›˛ˇRÕŨå9T Ō"eīúēV•ÔĒꞨЊ^ĖT|SeįQē.2ũvĒēģ<‡8­í\ĨÜ}ܲ  †ëy­¨ū¯[¨X* Ę؃nndŪNUWgj@ã™JȀˆ8Nú_­-ø~;ÕhĻĸkˇ‘ģ|Ųō;s÷EąâNĒÅ(´úÖĨ |ŽJįÂ÷˙ÀI§ĩ–—öšĒlŠ#8˛Fkk,+VĒ TÜ­bĩĒü-TJāM@vÔōÁĩą…Ünf{`cĐi˙IŲĪwĒp(ŋ{lqáAÉŦĪEUU p˛ŨUZn`fÜ× V<ŧđoš|m™Ô†ÜđaŠęƒę˛@°Ņ^SĨŠÎTB‘[Ų'ļŧ‘°ēä%Ēā˙ģTå< ųk§ŨEõ‡sO=bæōÂןomYéL5h÷‚æåe/ˆ‹æēĘŦ–Õ㊅#°xlžŽŽĐ”*áT};ÜĨÂônĒT~ŦU‡OÕkļVb N‹RÕouƒÆå3mGEŖ|veš~U%~Ųa\N˙> E +IËNJ ąMØĸrûĄo_ÜMõÉ×4Æšæ§úz]Ĩ< ؘį˛Đí é)ËLk°ļ_é^UeÎTū›–ÔkĒŠS™™Š—S§UTéRčTgŸnZb1Ņv]yāž ]Yõ.UņgéTúi°V¨žŋ<ŽŌĸҍpŨÕßY]ōēTK•Ø­âwR…<-Íu‚ˆ Õ5`‡6wu`ĪĪ 8ZĻ "v­Ŧņ–ĒŦhõQ-¸úD¯-9‘ļ (œĘßĸJĻâ(Z8jÛTIŒeڈXë*ĢÛx“‹Suin@4E§á.•šĐSרōÍZũ“É`ŠĐúö* “ĸ?pá dōN*‘T8o6N‡ŊšLĒč™J€*˛éæJ¨õŪtƒĒąöP핐žY[cū%ėjˇŠĘgũ~Į••"Á]TJDnn|P)ā­.ōŌ4đAQ.fīÚĘĶfŋl¨@ĒĩS8ēŌ^Õ_¨€A{eT kG`BčRœĶšŪ,˜zÚÃŊWė&˛ŋ­ę‹'c‹XiãŨĢ‹DēLís§úĖä: 6ûëÕ=ÁáR¨bĻ×k]I*eÔÔ¨ |ž€JЌ"īĻjp mhŦ”) V’¯qĒT6SMKUK™Ī^ÕŠŠŠ zŒšū7 Ô4ë[ **ÃęT°ß}6Ģ’ģDL_49ë9Õõ(¯U]tėTz E`ŗæ?Súŗéš Ž+baos}a…÷Hf6ûÍĪŌWyž6ŦĢŲ*ŽëU°ßS÷}Eīĸâüŧ×˙Aœƒ*3ƒĩMĖT/œJ)TŋëxēĢü5Uâ+ÂNuaÜ]úŲo>ËĻiž6šÖŠJĒŽļpĒØŠxq'•įŨūŋįęj”éūVWáëŽøzĻęåÚô頎ŖkĒTlĻúcWë™j2L6TfŠ‚RŊÜč­ĒŦUG<ęöũ™bŨ˙öęÁMu Ž,ûĒl… ƒ¯YB÷ĘlŊ„Ē.(އ*¨QAõéäz’­…D î­sÕÔĩt5*;W1Ũ%ļ8 ˆ2ôeĻؘë[íēĮPąyg¨üR_át$[×éz=eCÛ)[~>ÆG…­,A(„&ŗV8˜ŧžY•Ũ)b˛C¨ ŋāR@3ŧZVqnĮĄëˇvōnŊģĒJô§āfĐŋĸ öÔÕ=ĐfąE0~]<ŨøŠîCåÎ.<{üO˜īՆ\úx7Ų-Nõ;ÄV ߑ‚=5Š_Ō­rt]TôŽ*—Æĩ‹(ZÉÂ>ëtq`åWaˇĖa\ŽvúšūĮRŧ¨âÛņŊĢV˛°Ī:owUgØŪRV¨ÂSÚŪŨúÂŗ_žUU|#_xŸ€†‘1y+ÕîŦHÕ#Ôʍö z\Ux|dp—8đy™öüÆ,ûŦķöĒ ŅĄ–Ä[퀴AÕ b÷n´žVTâÆ,ûŦķļ*ļYVĨʒUļC‚;ĢĖš¸1 Á>ëŧŋkøCpš9åî~ĨĮœīÚĀ76Šäšûy÷ãęŅÛgĄ\Q𾌷ĀĖlcwĖÂ{ĨZ?vį,ŧ_ĒûĘÂIuRíŸNĒ“ę¤Ú'T'ÕIuRíĩʓʞT'ÕIĩ×*O*{RT'Õ^Ģ<ŠėIuRT{­ō¤˛'ÕIuRíĩʓʞT'ÕqĒvoãøTåuw`.ĶņŠ<7”o}Ôũj:>qĒēģđ—éøTšLZ7cÂ2Ÿjj„­šo~%Tī‰Ę=XØŅļĻ“ę}R͟Į[ŸŽNÕûŦ‰ųøPĒãUÍīÛ;¨Ē{Qˆ°O|ׂwQ…bųŗš=fŒ7æTõI^ˆF›|ׂ÷­2‡Vũ…,DŗC‚Īך‹ĒŧSdãÎ wJqhՏdŅéėŖZÎErĶ*ËËZusVˇĄčĐ*UtÚÍG7Ģ6īAßļĘĀŊ*=[TŲáUmŌäõs˛-˛Üŗj|p•iq0ÕFÔ\6!ņ;(+aĄr?ŋ)•՗û¨‚}WY.¸Eåž!‰3^…{āŽ>ūjö@ššÎÔm}Si ËĒņĐ*h¯ÚŧËûT›6W#FęŠę<Õá˙īCķ1* kū>ôųÎw*퓅OĶlļqnœ ŪRõß<ŨáęSÍG’¨ËŪg˛ÉĨ°šF Á–Š™Dv§ÛƁ¤ÅHë~UWCÍšüDq6ūãĶŽÕ¸U—ƒ‡ž†`C’‚ɍ™Dv§ÛĒ?ĻaĪ7|×YĻ[ĒÆŠe\~Ļ‹Ķß=ūL˙—&˙¨T˙Ų§J6M >9?¨Ē/ú,ĩWåķēˇ%§Ē›Ž´v•Á8CÕô˙åŒehäÚ4Å9ˇšę‘,GU^đė°Ē |šG_xsššm̌3Ûä˜wÎ"(mÚĨJ*BÕŲ÷öĘâ<J5–ÁžĢ¤YáTÍ&‹a'ĐĻ%|a3ĨŖqĒ83"iŧ ÕîtKˊ†Č&E§ÉįĒ"ÚüUãŖ¸)Ēzī‡ę{`ŠĘL§)@5Vú"qĮŗqɗ3Õ_í•Åy:˜jzãbŗUØøoÚbœ™vGœ÷‚ņTw?Uœ[Æĸ| aŒū8iŊ'ĒŊW9`qģ˙ĶqlúĨ*ח˙ķ¨Ō¯Ø#šŽ ëĪȓcSV•Úy>øhU|גĮĒ2;—zÎ˙Tf"(AgųäúU6OAĨԋĪ;Ío,˙meUP‚*§ŲäčTОqœŖJZÖo|{T@E˜õDøîŸĮyvutĒ U yņ,3DЊņųn÷KÎōqũC͡Ļ÷@åv4r*ŠĒ€Î…Š­ŠMÔ>ķ”›dÁÔÆ#Tá~Š)›Œ¯Žķ¯øYæTDü›ž1Ŧ? "ą˙HYĄ*{Ū|”É1¨~uzÁõOōĖŠ°ŗUīÉXÎũWgÍĻ7‘/đéĖÍvĐįú:ÁÁ¤@Ö,cãŖU%#›ŋ&Íū  5`ÎųŸâģҚGqt|Ē1iwŧ D|Ķ iŊžĐäÜ•X;M˜ÍF1 O%ģ}áË'Ņ(ąÄ͕ā‘NĄÜâVō„§ĮWŗãcGēXÃÆ™ >–2ÜÔ ē ą—";>Õļ?ތ:žžđ–´2vüƒQ­Œk:ŠŪgUžrVđCQÉSĩr™îƒQņęoŒjåŠj5T'ÕIuRíĩʓʞT'ÕíUøhúųĮE͒GŠ*¸%ķuãbkŗÕ™gŽSŖq_9N´t†•āÆĨė]U‹ĻfĒræŗŲSĮÕR%đgTGËŠjc6°—ĢĒŖ<ŽėægĻĘT~?bÕÚßĒ*ũÁ¨Ēew„ĒōlĻy ¯i™™øéš*ƒĒ^ßøĀlT.Ÿ†ådІ(úIAuIŽ3*˙Āsgû,xÛkąiˇøDâā))BBÔD$hÉcTŅL÷Û|Ŧ7æ•Ö"Q-á›A“Kg<ËĨ8F•iōxĻŌڈTõEdœŠ§Aq*u|ąÅĒJõ+*Ũ ÎĸüG¨Æ‘2‚ĮnĐük—*s*[œŗøUc_ÖŠ4ÔÚCU! ēí0ŨŗÅ‹'G¨Ę}¨úœĘ@ĪQ#˛R%ļYŋ€úīÛĢ4šĢôŊ*t*rœĒ(ē˜ŠTī§öuØįh ĸNõđ[GŠĸĨĘՁe§jŽđoá„?Œ§ęįV¸VXĸJ—ĒZáGxŦ5 }s”ĒÖ@0§Âō2sUŽō_ŖŠô;†q TĖŠRՃ=°Ũ$Ĩ*{Ĩ~zt*eIĪW@ԅ=Í ēCŨ8ĮG™I'Š]Ä^<åëˆđĪS4!—Ō='žÄ›*ŽAų‡RAũĀæOrXytö[ĒžīŸ…}ŧĨJ3ˤxD™an$qš‘¯QĨú¸>q„*郊į7TT{I xø ÖâÄY „*ĻčŅŠ’!ĒÆpä‘ö¤HhH„ĩ¤*I8ņ*īĒ\šÂqÄV^fŠaJŧˆ°Ļɇ_â?ċÆ/âŖģ~•JŦ-˜•2Ë nÄ(SmQ.›āˆũ8ņâėÅøíT_ې…}Öy7ÕdŽâšęā ũš*ĨŲøęíTΎ,g¯Ę§“´Tš)΂QæTiFĶôøTŌŠü,ˇ×ÃYY9UŒ*įÖO“ŋ<:•z *íJ{ ę”eĨæĒÔ/aoW>߲ÜŖ[u *EmnÕK•ZĒPyų–íßēäÁTRrP1PåųLUTTšĨVųG§JĒ,˙bĄšÕx\1küˇ;ŽøÖ%̚˛¯×UlĄēŽŖ{T­ûaUzǤŲÄÖwME¯ÃėíFüđęߑ*iRåG/T5\l҇ØĸÝj”Ûxr„Ē„4|MŠ,éxšĮą$â@1Äڂ'6‡÷y\Ŋ#Õ˙ß5K8IWø| ņ!fāžPI–ĐŖSIwÚ įPčī+ņŸÆ–Ú"÷~ZÅģĮšũŨ¨v-0ģ ĢxË'đęßÕÛöđyõ'U%ŨŖjqĻúƒR}˜eõaĒ”¨Ëʍé=W-.öœTīŊęē6+7Ļ÷\UŸ•ĶIõ!ĒŪ|ĒŗŦNĒ“j¯UŖJ/ļ:Â̤ŦÉʍéũPÍ…‡?× „—ĀPUėV!úU‹­ŨĪu=rUę~ŽüSĮŠZnõÃT•Ī:XSMãQ•¯gåÆôžŠĘy´NĒÚ´T}å~Ÿ­ŋ|ęÅģQ)Vđėë‚CMøfâæ:‹ŋŋšĮõŦܘ–Ēō âåÛe]ônTyVđ0Õ>4K‰¯đ"ĪĪ}CíPw„-ü‘æ’ã0§Û¤ĨĒlúxųvâ~Ž r8ÜĩÆĖō„¨\fvTĒÂ\ûÅcũgLđ% yÂīz­ņ›Så–ËË|šį–Eē ų*55ũ—ÄKi"âŅ=–Õ;ē. *u9Qš˛<5MČA¤rmúAFŧq&-‹ī:6ÆuæĒ˛.zweĨē™JÔĻ)āWŸčžéāE|ųÃ8›Z]͞æW¯28°@U”ĒęŽN•Ņ|ZĄJzPV6!RTNĨz}§Ę¯hzÕ\r8Õ'PV6ôô3PŲsøpŦŸ]tKUjũa^<ēķčŦō âåÛ¯ŨOˇĒųåžÃLĀ=zVúö@{fQå5pƒcr¨ķ‚ÜMeÄj+\‰-æÆĻƜ*˛ j‹Ô>°¨úĄU֖eE|)¯j",IDATøûŨb MHĨf'Äõ´qU ™Ī›~0UäT™•N…“ĪŖj:WQ{?Ēĸĸ ߁*)UŠú#끨ĮUjģž>BU‡É ĩŠü#œ ZaĶĩ™ęÔøWwSõHyž‡[§ōŨ/¨ ÉlÉƒŠ†a‹I!§Šdlčâęa.ĩtXęTSˆ-î¨ę‹elQđQy;ÍKˆ8^Îo":˜*$-špé%ΘO܍Ķí> 1t‹rĐģELÚTjöBĖŽ\ĸęÅü66§ÚëF-r;UŌE•ō%á! œĘ‡ĒôpE$ũ‡w#Ŋß]eūmTÉ=¯ō=‘pß,ėŸŪÕ—NĒãI'Õņ¤“ęxŌIu<é¤:žtRO:ŠŽ'TĮ“NĒãI'Õņ¤“ęxŌIu ˙­WÚ÷ôÛf“]ęv ūŨÛÜ˙štx@mWībŨū­ôūpĄâ>ößúÚ}g莇7ē?3ŗ„;ÄËwcIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1335b8īįRIDATH‰cø40ā8ĀĀĖpū†˙“ĐPüÁ÷ÂÃ0?ū'߀*d˙˙˙īĪ?QB¤đ ‚<Žp~OF,ŒĘŽĘŽĘŽĘŽĘŽĘŽĘāķOeč€^IENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR\&a-ÁR pHYsb&2 tEXtComment1331eU+ū}IDAT•Ī1€ ĐGŽāQ8nÃŖˆ'đ Ũ\ë$&FEjj x!đáú†āŖÆ ŅgŅ”Á(ė:tÍb+l-ƒŖ†x'č"$¨"8Ąæķā}F耗ĀúÉ ü 6)Ô§+4 Ŗå:ŗČbŌXlŲϏOeŖļ´…ŽgIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRp*CŽâw pHYsb&2 tEXtComment1330Rh%IDAT(‘Ņ=NÃ0đu(C€„¨‰käHšUā•-Љ2tėę¨#îG¸ūã´ļĶnx°ôĶŗũ>L¸Xô_ĘK Ͳ3V*šÆBR ™b"FꉙV”xĘ)Å˅r‘R’U>¯æ”ŧ{Žâ…ĄŒ-ŗ‡ķUvAė=ĩĄm¨Yš§k™8ļ:w Vč|‰ØQĪ&*/FĻ” ŽâČjFiÍŅ)3É"4%:GÅ ėüčÄl`˜¤H_í`ãūëŅĻž˙ösūxÛāî:đÛkø…O{ÖR;ļ[čĢ ęÄmˇÔ ú9jËØßøƒĀĩI˜Ĩ}:u™h‡•åÜG›Ķųģ5‡Đ¨ĀoÆĄvŇM…čc/đ:ĶǏØIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR`K§ˆŋ` pHYsb&2 tEXtComment1329r•’\IDAT(‘íĐą Ā DQ[.3BFņhŦJş‚2.,ŊæNļ4ŒllüŒ‹(NP•'Nâ@(!™đ:ŒH ´2A‰/nĀuFZBøA_uB&Ū‹nëëZęiˇŒ#IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1327•-ŋŠÚIDATH‰íÕÍ ‚0ĀņG0éńL…ŅÚ dW)8‚%8{RcíŗĘg%FųHĶ4Ф.°bI9F`4(€ZˇŅ@ŠrB‡&NŖrąôFƞ.€W*Ō5s×âQÖCĖi1ØDŠMøĖ„Č;ڔ6G bJiąpDwÍ@Į#ÚjŅEũw5ü}ũŪ]ĩS^•ŗuOƒb\[2ŧOk+ûq÷čīĮs÷ãë…ēzōÔn„f z:čZíƒ×ĻBûôsoÎągĻŖY_ų|ÍŊzöę°úá.,ū~ū IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRp4zRœ pHYsb&2 tEXtComment1326â*4IDAT(‘Ō;n!āQĐDÂĨ‹Hø>@Žâ#¤Lai9ÚHšG ¤y2$ë-šŨ]˜@ã#ČQēחdHB:‰(ĘĨ`kđ:ģĄ!>€Tát6ˆũ u0€ü\ė ÷ŽB7ũ%Ą›˛\Œw0Ũ>úÉTˇē‘Œ$94g|É3įX-FŸōåŽt‹%M͂ áĢķĸvĘVųIÚ3ŗT§Œëį,J,?LĸH4Y-\Räŗh…ŲxĶ4ēcČNvŨ-jE‰]ķŒAŠ=˛ĶĒ‘&[`GŠíėЅĪDÖ:hŌüq]}&œ<™.Ŗü†“¯ƒŒķ™öJhņn'.Ō^'y4VXā<šæ­+x3RœŦļnûŊ“Í˙ķÆ7'{Jp“Š}IENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1324 $î0LIDATH‰íÔąQ!āE2iĀņÚxķhÅ2Ė ŗ K‘ ,ÁĄĖ˜]î^ sË͘!°üÉAKtꊧūMßÕiˇÂvĒÍJĨ(ŲkĘd%SÂ_;íP"ßɈMZ =9ęęĘФĖuž]&ėŒvĘCĢÍ ŪĢh79¤Đ­7ÍeâĄKĶÕŦtģ}šęúēiŅUļ=į™Ú§Ú.ļ …¤Š—‚ëcŠ4Sz˸DE3-ØO´@›íwŠ–ĄƒšĶĩyŒXš×ud…\&Š@§8Wܒ”G]ßŲāEä-9žûĶú°õŊ6÷iĒGnqlMŲā@P¯hĩ#9U͆W2’U­dQb“â˜Ŋ[čމĄíĪۉ.CđŽE(žhmQˤđõĻZŽÖĩīĄĸÕj=ÖõHņS@¨’Rɟ Ėæūj˙¨ß­FA‹TGŧIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1323’@{“cIDATH‰íÔ1R!āŸĄĀJ,-2â<\Å#¤´rš‰Gq‚7ĀŽ‚vŗf^ŌŲ…Lf–|ayĀ{ ]i7ŊéMOõkíû–ܨÅĩĸ[…nAš]‹hĒŖÎ–Ī>˜Î5Ãr‹Āđįa9ČÎĀ3˙$Ģ číĸz@1„A]4|€ŽƒĻĢÚ¨*.j]ÕEĩE§ëēŧŲŽ1SĢÉTėŧ¨ \‡øĪ k4ßeyˇ¤ũ; ;ÉõŨäY5áŒēΔ•¨ķĒI7áô7ĻIķr‘3į]ČČʄäÔ˛Ļ7Nęû˛%eĀĩw“ŦEņ3IĘõrŖ˛.w>KZ™ŅÉ0ąEŠŅ^Ō`*f—`dՁÕ`ĨЕ•`ĸõ~¯ķR'FÚ lĒà,ܝ°6IU8¨PGØakî\˟>H™ĶÂëĒīRæ´ČÂ~BŋU„Šũđyb¯C>š ;˜ŧ¨õøŗ cûGũL¯÷*$EIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1322åGKČIDATH‰ĩÖ1nc!Đ!?Zēp„šBn09JŽm•RĨĖrŗ•ËŊĢmR"ĨX ô'ķŋíØßĖgŖ(ArĪ|˜?6p§øzũŊŽĪ˙Ķ¯Ø•4ŋŽ=—'?~~ŨĶŪˇįŽĶ~֟ü}ZēʉˇPWQ%ŋW×ĶQWÚīĘvu;÷FŌu—€į[§Eŧ8˝'_8jâ(ŊĶ,ZĒ$XääEšpĘā8¸ÅļÂĐ(Ö!aŧ ˜V“hqÕä÷ü>UĒļ8ÐܚZÃ!QœfŖkÜiŗŽ- AcĀûs8ÚōcV@j•7{ ¸Q”ŗŨkŗîŦΌŗn%ūÜPå°5õŌç ‘›Š´SÎ& Ä;õˆÃĀĒNsåcš*į§Ėņ,ˇ_tMג=’|‡ÁĨrÆiͤܞėY^ŠiÍh[ “Ú"J։_lļĮ€–š¨Øä$ Ö4bą_‹QDåéOÖÕ˙ĘļÕ$*š’ĢÍYI˜. ›H‡WyĄ7Ĩŧ™@šQŋqķĪPR­¯ÍŽdė~]˜ō>ŊQ†!wT#!]‹öâöoA˛|ôĒnų'ėĘ^RNJį|Öžã_AŖØĶQĶ7=8ņŒ”PIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1321|NŋTIDATH‰íÕ;NÄ0āßrန+PĻX‘+Qn¯ö†Â(נȊ`*R˜ ãŦ6,ąĮ-ÚŠŠĮ¯q´¸ƒúđ°í~GG@SĶYŒ‹øÍbĶŌ:|ĪíņaāīsqTÚeņ¤}Q…¸čE˙ŠžuOôƕ§ķĒ( &ĮåčRõŠ‹ēâBoÉĻ Åel& ž°Ō×Ŧ*Ö¯’¨āÃĘw×NÔ{<¯úužWEmYĮTô¸č°î™ kgŖŽ‰ŌūG“ųōO<#’”XQŊ¤œ~k“SÎËC4NTžéĢ­ ˜wą O™<ŠĻ+´ŊEWĐgE…1ķ™””@C•Õy­lįŠjkšgŪ˙NŌ>ž,ęĩä6Šôœ#U°ę)Ģ܆Î5:Čjåu•+%dFE1¯ŨJúÉŌ— 7U€Iu‰ ē TV_Ô%ūLŋ×<›Î(_ąIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1320 I*)cIDATH‰íÔ1RÃ0Đ¯3ĸЏsĘ|ސ2Ō ¸’:JŽ`n R…FĘŽ Ė€Vî¨Čθˆ_ä•ĩģFŨ ›Ūô?ęûŽę=-Š~ē¨P5ÂÖ $ͤ+LjV&Ō]€%ÂIęĄ20­X$0IyņĀjëęī‡JOĮH#0NÃĩ†r_Œ¤Ļ=9# ´ĐŽ’)%­Ņė¨ vŦŪųe¤¯\a'j44Iū‰3 Uh7ũL—TŖh¨č˜ŠģÆzĸ¤ēīÔnRŗfIšUÁQs_u=I:ƒĘOĄ’¤\īTęfĄi‹ĸ¤–ÚôØ)އö4Ũč'”‡>đėbōũtsŦ<÷XB˙eØÖģZƒ[û¯J‹ˇĪ VQˇ(zOŋãõ Ęŧ+"ēŧ>IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1319Y¸ÁNÍIDATH‰ÅÕAN#1Đjyaą2707–ė|nĀ`¤öM¸ŠG,8–昝=ŽŠ˛ŌIWŠ‘ÂËŧ¸ŨUõ*+‚Ž÷ŸĐsōGÕU#. í­įõQŨ‹é‡ŊúũĢęË˙iSĪÕU\¯ĒÖ ĒĶtQĩyĩ“ęšxæĢ×4Ú#}îī°Ä<#LÛŊÅc†Ķ|ˆĶJWāf j8Յ\‚šøS­āé‘6BP”žšm””4wÉ%Q§Lú#ųėÆg°~Ģ:CįtU+9xQsWäŊEŌÅTĀ(é#õŠ”÷F_Ŧ MUtۆŌč°l„Ŋ¯;-`ßõđ{EīšÁҪΤÉŧkš†:ŽNšļĘĶ4*ÖRFŸË‘ĻŊÂĐĘŖŠÆ“sW|ÛkÛiLj“Ķ+ĒĶŽŪ§Ąåį4RˇĸBNŦ ĄG€" Â|IŸíĨ/ ķMaņ æŽ^ĐęPŸ›Ī’Ûĩ:Ay4 kąÛ<Ĩz=Å6lÕeJÎY¸ƒÔÔ[S¨y@œŊ2y‚ŽxĒ´é˛ß2¨Â/éuŋĄ°Đ¤ŊĄö“ļũVJ‰øE—>ĩŅĖ}âØXūƒÜԋ#‡ëuŦÍjzēžM˙ųdö8#úÛēIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1318.ŋņØ^IDATH‰íÔAJ1Đß!1s1Wņ.]•×đ&’Ŋ—¨#ô˛…&åOfg*ƒwhōH“Ē_ĶĐ +ãĒWŊęßtúîUŋmΟ¤’ë ^¨9pƒnđĩ"mĀ ŋĄt]kįv’đąõD)†JWŽ”īđ0Ū*lČÔ5§<¨æ ‹œÎ-Aœ¸L]‹ĄqŖJ;;Ճ Íq÷â*5äĄ"ęJW7ÖK­ąøjwC[ Æbôšié*FFM3Â\+3:æg™ūŅœé'V™Ü*wUÔoĩæ6|†JĢhĒÚúŦ¸ŸčƌÉÔēîÔönK÷xV5ķŨžĖU¨ĩŠC‹ßŨY‡ŗ…˙!~ŗ1“Kņ››*ŠoķüÄz“ĄĪŽÜF M úŌuÉFžÜ{nŠÅ˜ îŊņ`,ƒr˜ųUy¤îüúŒJg#Á’ŖŠėīĮáõKMŦÔØûėî$'ƒIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1317žėIIDATH‰íÔŊqÅ ` ē0Ŗh4˜ +d”0ŠrY€î‘;‚"ėKė{ü4)^ ĢâüH6đ"\zéĨ˙_ŗ_i…~äĪŠF@jĨ]îC ČīLf{āzu 2‚N 0‹†MũũĘeĶg™Z‚ûķĻ…FLO !;ĢūŅ./ˆ–štVtĒÚ¯úb“ŠĒęĒFĘoÔÔT=TŪĩL4ZYÕ3ÖāD_ķX4ål‡*—Ô4š‰ú2S)pSÂ^a6cĨ]Ûî*ŗVJŽ)ôZŋ8YŅÛųÃ:4īZĮJ^TK˙õÚwUKÕŊžHĢ"ŲŦ9÷Z厃5ĩ7MĻSŠ€‰˜ąŒõˆŋčšq÷'ü%䃭€N#IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1316ÉÜßšIDATH‰íÕKNÃ0āą˛0+ÂA|ŽŅEU›׊Ăe@$€+ayø'mĨ*žx…XQĩnä/~Ä3މOŸÉįķ%æ˛˜@įšäŖ[(‘Ē\)sZšm9\jņ\ņ˛æWÔˇ´4ĩÕķģû5}“⊊/kúŲˇ=ĢmčGSĮ–üˇĻ#ᆞųUUd}"ˌī藊-Ñ:.P4ÉđÔq–ꞡÍ~І[ʐ¨h‚´ČĘķG[Ņ› ĸaģĻ;Ņĸ¨áŅ-“Ž“>Y\ÔsFåĶQ÷•féî¤ŦĩÅĖ šSTÚbE"Ô¨šiV"§Ģ9jŖY›H’ Ąõķf ģm(ŒÛ'ēĢWR‘€šŦ+# }ęÚZhE]ÖôYÔŠŠJsTĢj–܉<ˇ[ŠĖúÍÚ¸Xŋ{b‰]ÖõšväEëՀöØ IĄ¤ŠÅŠ7Ą1Ĩ*FČD ĶCũrE=6߄S6(™ÃŅMÔM8eU…“…ēą~oĮv‡š ¯)?Ęä}ē¨QŪĸļŠü'ú‚4<ÔX¯÷IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1314' Ŋķ8IDATH‰íÔKj!āj\ô&`Ækd1Äke§GķšBÁė„ˆæ×žEˆUCČnúAXĨ…%uåŠ$ŌĮTüĐ‡Ū§ÕkZœĒVŦŽ•ōž![Xõŋ÷ßa"•0į‘xÍžĮ HhVMž…Jŧ’¯¸#^]!ē`x/’ÚĄ™×-M=x5ĮEÍ&ī šDíĐČ­‘UŨO%VĢĒŨeÛéĢ Ú(JÍčMĸbl#-‚&ōzyŌ4ŋ(ōUŌ‘÷Õ*š ĩęéyãĢ1+Įā;jĒ[tÔĒĒÚ6YĢƒÆx-ļÅÔ=§ûŠeéåĄyččfŊPSĻfIMC1×SˀeC´ņJīčŧf“¯úJt*×)t ĩœžĄHySā4Ė“a {Sė FNÅc=~ĒxũŖ~XŸ?g‡YĖ„IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1313šm(PEIDATH‰íÔ;NÄ0ā?Š„Šđ 67ÁWĸ¤@˛šČžÅÜÄGđŠ&…ņ0v€%xlhļØ))_<Ɍ ]dŗŨXøę@baJÁŽ´ÆHßū1öĒWŊ }•5YZŅ ?4­FC~&zĻ Ũj00QÄÜč “ëASŖ&EŅh¨ē°xN!č:ģ‘Ē Yų•Fųģ‘Õũ,ø[EŽ5ęÜQĪ™˙ ŪˆštĐyęi^Ē•Ë*JYũR4wÔ͡m7Šzž§‰’ĐÉĸîCÛÜÔVmgËŧŠęhÉ,Ž+ֈZ‘“•âÖ ę¨é:Ô4÷5ŲĒ^ÖuŠęŦ¨Q4čõ7ÅyƒūÔ¨’ŦÜÅ ƒrP’ōî ĘßsG&ÜązY0yáŸYŸ€{Ö@­ōŽ/'g> zâ͆—›ûZ6ûzËxM쏜3v§īœ8U[ąė IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1310 dyęeIDATH‰íÔ1nà āŊÁĒzÍ…kd*=J‘Ą ĒC¯Á<:ĒåׇSW‰yĻc;„ÁFū ؈˙™Į–ß"w\´š -ŋ—ôŖ–?֕jŗŽĩģŪõßĒ’“+Ōˇ<’ŽÁ îôJđ 'ČKŽĐߋF¸VĶÛžCĢi|Āîļnjā€Í3hĄwĸmØCĻß.U~"kܛžđdnuĤ6îĖ@8-´ŖŧŗzÜjjf%Ec›ĩsYü´ŋŅķåÃ8ėhDĄ<ëĄĻXWĪĀĄŠéQÔč*ÃúššIŨ/ęÔuÍ÷ĖĨÂK˙XQއĩ¯ĘšļUŨŦëšĒÉW”Ŗ›TŨgy˜u¨+'į˛n°ét Yã#õMXžēéNÁ9íM8• ˜h!IiÃĢQÆÉ ¤ŦEĘfõëzIˇMJ~9R/*•AË>į$RŽ*ZŨ˜†; 9JÍÉíSŠņÕVũ}Öõ !€ķV¤PlIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment13087¤Ā™hIDATH‰íÔAjÃ0Đīâ,JŊÍ"ā+ä!ēROPŠĢ^knĐ+čZĒÔx:˛KՏ]…RCHä'ŃG_ȀKî]Ų`ꓧhĒÉéĮĸ+×ŋūAõwYÕ¯ôsUãų×Qņ;0Ôü„VcŖ ]Ĩ>ŖQ6é§ÚíØ'6‰h´´ZœÃU}LeƒĐÛĒ=Žˆ=´ÖX4›Ô5Dĩ¨ėÛŧakohđq]›¨ŠNvŨØZáĩFŸ]0m°Ĩk'Ļė]YUöY´îBQāŲT¸N‹FŌ_ĶHŗŌĩßĘú{Ņ@:x~Žĩˇ”Īj>Ŧ¨×Tfá* žlĸSËĘŦ†ZĨôđĒĻŌ˙EĨVš[ÚfūĪ6dkŠš|ĻmÚX˜˜Ęöé‘ëö°¸°•7ĩ¤ŒĢĨÛYBéžTÍKē…íĢYËÉŲ™Ŗ:–3öå™*zMöĖWĨNŨexį3Ņ/jÁŖcK€IENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1307§ŨŽIDATH‰íÕAN!āG0ÁŨ\ ‘k¸0ÁŖx’Æx%’D\šw$â<:ԎíŖSŨČĒô+Û7üSâå ĸņk’1;ÔõøÚ&åPãÅåzŋØč÷Oj9Š|ZũoëÃôõlUũëęĀĨ¯ÅpÖ]Má9¸ŠEqŠ… rL˛9j&šČČjœĄN„ĮŠ ąPIZĒ&Š‚NUŗNFTÎĐĸŖõwBUUÔųÛ!؎įÉÅcMMŅIÔŗr8ędÕĮĸŊ ŠŊ (´hl eQŗŪ–¤dMƏ]õ´ÕI‹Š&U-=ĩ[5+;´ÂfYŲĒiõÆT˛žCÜQ‹^ŠĒĄŖ8Yėüx;ęúžSôČÎę÷úŧ×24u_úƛÖsW=U}jûn>–:úY}Ķ{fxŽZ”o:Ņní\2Â7+׀)e“qŽhj˙¤ËûE>Žu™ėéJEVJR\y…ŗIT$ūjĢZR°#rŠUP D¨ĐĐĶŦpŸ–ÛˇŌ›ēīëâwįĶOõ"äČO¸IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1306Đíž IDATH‰ŨÕąnÛ0ācY„›é҃öë¸ë ×čuo܍LŖJÆ|QEŒ[ËXVÂíhīÅXŅ5ÆĸĊî)Œ×ûđÂ_JĢĀš‘ú >Ūûš\¸ŽĄļĐuœ›ŊíĐŽš’æĀ¨žĐĪīšž(äø~žTūGú áŌļ~VãĻŊIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1305Iŧ$ÂIDATH‰ĩÕÍnÛ0 ` * KŊ@PízėĄ¨÷(y"ōN{Ŧę ú vؕA/*˜Ĩ\gM#Z—,‚ū ›” đ50ō¸¤nÎn`ã8Ŧ†ķÉ66‹2F˜ķĀø’ÔČ[öøsVš/”ȝ|Œ2°¯˙ĸoŦÅķĸXÕŋ]=\ ¯ėǝ/čp5ŊĘũūGũŨÕ]5=-ĸ×4Î֔ #xÎaMå,1Z]­ärę˚ԏڞEîÍ$zRÔ/ē7`āDŖÉ6íëĄ×ÆFCWtŒ@~E' ¤jvükZ´Ũ•(ĪzksTĩčößŧgšMõē–í(MąŖnŒĢëø:öķvU5ŠJ×,z^ÁˇYyįDˇp|ĶžédGŽĨĒĻĒOgzøPÅ­G¯ ¨­ųÉՆÃs[_ōĨjāE_ė´ĻōœĒŽē"¸b ¤˜”uåõd‹T?ŨUŦôú0î%QCUŋ{Uá›ÃčIév¤Íi#Š­ĘįPڜĀ`ķœyČ`ŅAS‚˜eōĻžËŌFV÷šéĪ€P´7ÃIŽšŌ“'›ŗ=ÍCOO§šžžĒ_J˜´IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1304>Œ˛‰IDATH‰íÕÁN!Đ!$âIü#~‚Đ?Ģ0ü-=ú üxã@‡]wÛĘPãĨsXÚ}ĨËÎ2ŗlH€ SéÃöāäŨ<ØWôz€Ōž‹Ēlž‹Ŗ[ėÚÁÃŽZ,J~ ĻAsļę ÎzÖ?͎“ĒNi•ëôŌk˜Ûā“ûŽTiÁb0ˆąĶLĀ §ËFč ’WIĒ ũũ—VˇhĄŠ…{RØk1ëšéVeåĄ×LZdÖtҁV™LpuQęG*’‰ļ,z˜+…OUDû“f^ߛ&3P,˛ih–ÁŅēš& ŧfP'4ÍęGJyLZø_hžôJōZ{ĩGŲ ŊQ{­fQŨö4éĨ( RĐĐkšÕ&z?h~.Ė*WĩûšĒĶõŽ’Ļ:ƒۛ‡Ņ2ë5ĢĒP­ĐÎŲ°˙ ĸB4Á"(FoW5Ō"RKŖô ‰L‰JŒRÕĶrōÔt¯mËLõ™UaqôPŠ›€ia ­ŧ`Ú^œâK×Q•ĶO 6ųˇ P¨IENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1303 v‰IDATH‰íÕANC!ĐA’˛1rš† S<ŠĮčĸÉįhÜĀ+Œqáã†&ߎØÚ–ųlgķķûČ´3 āĒĄb{>_ÂŖ}ĄL4{zŨ% įøAįŅXaËGrėũŽŦ\Đ_CŨ uœų_˙šN#åŠhv4ĢEŽ"ŋ/iĮ¯žĀĒN¸=€ßƒĄÃ”wę2č™ ĘÛŠNÔ`X3/ēԙUĄÁ°ĄĸŦ’AYGŨ)˛2xØUgϰŅéWߏ: úvTĒ7FVĘ(nO•N4]۟F_*VO˛~[UŦ—÷׍ jh„NVõMģ]hēVUŊüŊ÷E¸(áĒ(öŗŅzuŖKŊAüU”›ĸXOUq2ĪZV[õa’Ô';ķr=š×č’ięzũŦ<9OŽĪĖ-¨:‰Ę˙/‰*Ŧe-c^ĩīFQ&Ū*´QŌ->žšdúŨĮĻZ:ĄÜãr3$0Y8ŨDŽ\ ¸0õĘŲ5gđŌ­rˆĀ3`õtáĩôŧ{ ~ęIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1302×q)‡XIDATH‰ŨÕ1Ž!Đ?!2[DĄŨĘ(7p™Â2WÉļtá,HYiKabļÚ2ˆĸ ŦŌ‰ĖĪ˙Ėx=6ØEŠAļxÃøüa´īđP~8Āôô)åãWę˙œVō)tH=:¤Q×ôU÷¤W c¨%#@•R’ž‘‹ōĪ žüƒÜ’žŅË0Žą wņEĀ;Ôû+Z:r¨Ë=Ū-w{帇éYŖu °ģgå‹ęÅG|=ķükâ ß{Đ%œU´¯ŽI#ũã¯ĖÁå × D›^¨”÷“z„åõ´š€ŋ,ÚM[3¸áÃŨˆ‰O^Œ4‡žO°4Ē(Ղt3ā rôæ%ĪF”^}ŦKҤƒÆOįôlų˙õą­Ų`¤eq–æĩÖh0RęĄëj †ę”ũšž@{ĒądžI úa-kõ&‚LāZšEPa%“ĸåŦT'R?īčulj5J§;¯cĨčIŠ;Ņ!ūPƂqN%9Q3j–Iu´ĩ—ņ‚ræmDÅfŨõoI?čú~‹:RŋļŽŠ椴VÕLNĩ^ŖAWƒÚ ÚR­qåÜĘMĢČ1›$šZfƒōŖ‘“ŦŠč!5Nôë!­Ž•wkomiÖŦÎNž‰&NetŪĮ[ZÆŽĘJ)ŲdîXUßÖD 7*ŸSŠ)¨uĨ‘“- wËÛĨ^Š2ˇd­r#”WĨôWkë†ē=ˆ3zKŨĄ¨n¨Ĩ‡žžî–ĻüŽë´oøÆÎPÆ+ÚsL€F^íÛö¨uĸŋņ’âŋŌ?ĮŌÎø”ŊŊUIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment13009HĢ´IDATH‰íÕMj1đŋĸRíĒ.ģ͞ë"xr”ÁK/Jg Û@āŖD9A¯ “ (dŖ‚Ē×§ņŖ™gCC ›ŒmũxūŪ_-Ž Ž<ę`Q‰ “õÎ;Ā ×ägēŖdÃ}îˆ(=ú!ėwˇWĸbųAĮ1tûįümã KŌpũ%*ôĖx×w}=EsVŊŖ ŨũæÔXŽĘR9T yĒ_h6ĐeV [h0ü‘.AĀÍ5Ãp‘@Q~ĄiT,žë`-¸ÕÁ eÚw~c’™kޚĒ~”ĒęÆ ĢVŗŧleGA÷ũĻÄĖú°¨ĄĶP0%uÖ?įUCæ'-mvųDƒ)æTLōĒĘ.O&:^ŨF“´Į[m]휆$úÚÄ+­æ0z—ÍÁ-löÕĒK˛VkÆŨ¸û|.‹įíĨÁø#ŊZëã5\{ģZdˇ§ëxFũ Vā=û–IENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1297w vWIDATH‰íÔANÅ āŸ°Ā… .ßâE<Æ[˜ĮŌ%q¯W"ņ"a–$’ŽĶę‹I;ā¸RŌMų L‡đ %l{^†ú4Ô4ԞʊĀē MÔn$—#kS´×Ļ$å|]'LGīŌ'kļ…FeM.J—ĮÔį;V#×CúîĶí›6,!Ū¸XĖá$ëJ‹ĸ]¨ËŲ`ÍgâW6æjčî ukm×āĄPã!ŋV^qÆZ`9AX+7‡ƒ“:æy¯ēķēd&ŨŋŲĐŊĮ‡]…˛5´Œ˙Ģîé„Îņõ…Đ<ĀFô…IENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1294î]ĖbIDATH‰íÔKN!āB{'7<Â,]ÉU<‚ËY˜ĀœÄĢ”'‘# .$¤,ÚŒÎŖ@“YŲt‡¯( 4Đ 8ėņ'čGیõy¤ũHĶ0û4ÔÍPé;}=!û¯Q‹iîj“lEMžĸ懠/D`æwI¨€&Î ēfUĀIZ%€;–đXƒâLXMąĢ¯LâĘDEK“ûÁæ‰āXŖĸĐ´LUPbu?Đ"i œUįÖžFM“¤Ā? °ä‘ĶĨ˜å/VĻčxÛĶlrWĢĘSÔ(~SuĐëŽļ­:šyûĘg pa5:B8QŅSēîj[ríęēéÔS=+%Ą*l`ИVúļŊ}i1ÕÜī+ŅãväbĢŅŲîëįŧŲ• ŊZT›Ôķ-[ĀĢԊĀÍ ž YlË‰Ē¯vØĢhGĄ)šžž4{Q#Ēhև´ÕvVô úÛ ]¯áLî$IENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1293pvČo˜IDATH‰íÕ1jÃ0ā_xđV¯Jԃt•Ąc‡Š7{ĨCŽĄŌT!‹ Âę“íŲ–L—B‡BŸũ~Ōs6†ÁMoú+í6ÕëMU•jĨfS!7ĩ F­Ž_ŽZža9ÎWßāEAŅB‚ÎŽģgEÖkGÕxŽųč\ sD&Y¯’^JĒ ”Ũƒę9t“j{/ÜB[=Ķ*¯ˆZĩy QV:Ļę@Úí6UÖËTŖz5ÔUŊÚŧښ´•2ĩú2\$R$)WÉĢ$e¤ÉíĪ5ĘہUM/Éē\ Ėõœ¨Ž5=9qîGpŊVOŽ´‹“CŖ6Áŗú>ž}•¯€Thų‰:ވô}\WqˆQ}RÛ$–•įyčOxI:Ņ7žđŦåėņh[•ę“´!úēŽ°Úä bŠVÛk8{Õ×įŠJ Ŗr>ĖMę,h'ŦœÎF—-v7ĄJ4Q-j×,;eŽ….c‚tōl‹ŨÍ{7Q•”…ˇĘø-28ŠË…ú/˙8Kũ4Nr p~&IENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1292qøųÂIDATH‰íÔËmÜ0āŸúÆëĐ%¤ÁL))$0™ R‚[‘‘\‚铏aN!‚ĖŒ¤}H%€}õ\vvŋ•øš!˛{icŨæHvúŦ@;…:&Ųļę9 ũQŨœˆZŧ ÉˇU\ę¯5.tīúޝÖûĒyƒ~Ÿ˛ûVŠÍžQK˜Kĸš–uoAmĩ˜á2,ĩĨOî¨OS’4å6ÁĀu~ē:BgПVšGít‰Õo”T*ępšô…•UčM”•&t‡/‚ÖYip“ôYÍqE“QŗÎĒBí+X˜¸Ö'Ō‚2ëzV?Y՞ļQ3ë$­køä‚”VÅ+ęũŽÆ+ڍŪÉ:|`åú4XÚįžœK|Ąp8PõuÅÛ¸l´¨•ĪNĒXŌĖ;7XQSĮ+vÁm•fųņāĪ Z*îNŊŗÔÁ=Ķ_ģĻ% ~ĩŠŠÆJ‡ĩŖ!z$S$ĨÍĀāđyĢTąÂ­ŠÔlkĨ,ÜGj4BĮÃ]ļ§×Ŗę hš”ęUÔk7ŠŨŧų#ÛŅÅÂGŧ™ŗCž4čˆO¸žEkˇøĘúŖíÅ˙õĄ=RögGŖ=Kúģ¸LûBIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1291žxŠC?IDATH‰íÔÍM!ā—pāæ^Ŋ҆7žR,Äd7ąK°1` ”0ƃ{ ŒÃú™Ũ/jâdĀÃĪ,ɖ(˜y‰ŗY°5í%˛=ëŗĻŝĩ˙ú'´„Ąúī+wgõû5OĖ“Žkād™ŒŽÉ×n’z|=j/@ˆüY°|üO2a¯éCåKŠFøĩ*Í2OS˛Ņ?lgh;“[ŨÖ<î,+’#4—ŅjĩĢĢÜÆWô~¨FÕ¸ee%—š§¸éŖĒĩoåI]Æ:ë ØÜՂ+CŊĀÍ&”$§ž&Į#dÄô´NđO=]SāžbžĢ­¤jA[c; Ų Õ–éļŖKXÍ%°NĒ"HĨÉiZkĄęIÕE–UEOO›†ŽJ\´ĪĖA}į#pŨœyČ´{Û}á7æŽ*ņcúßm_õãL ĻIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1290é™ÕĄIDATH‰íÕąN^!đ?ň/`ÄWčÖĄ‘>’ŖI0Ž>BEœ}„Ō'(MÂņpũbŒžč`ŌĄ'$7šŋāŸ ė-ĸ Ÿ5U•‰ČĶˊŦ•ŽhĒҎ‚˛"ēŸđdhWTXéįܕ•îˆnøņCÖ?ķˆ[Š1Ģe=ėÔËü&]ԇkų'gõ_߯ŨSŗÔ87IĐęFhF2āg-Žß„ŒĐa'mp—ā*ˤŽ6ÂhI`¸eYĢN‡8eUĸšr ĒÎ'ŗV¸b*tĶÉÍÚ_(æõæMMĶŅEákØMģ‚‹aŠ@XháĪ´ĐąĸM)‰jķNŊ Ũ§=Ęû~4fĩÔcŨÖŋęēV4äĨvÕˇK]V>{´~šÔb) ĸfn‡Oú[ЇĨÆđ@Ë] KēæUÉęI“ĄŽãĐÛY™ĢĄ1t7i÷]+>u|6ēÆmg_4.L úÚú į&ypÔ_'%áĮ0Ģqø_ëy:Õa)eŧëŸĶ'ÔKųeũžšáËAԊđĢķÍ@ŌͰûšđs}Ž”ĩūĨ}JŦäiˇlĻH,IENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1289‰¸0†IDATH‰åÔ=J1đH1BļÜb0Ár 1e`i!&žÄĢä(`ÄÂ!ņewQÜ|ŠXøē™ßL>ß{ȃ0øļŪUŽ4ũ@ŖĒiëpŋc}ũÉI~­ĪC}úĩy˙šŨUŖŗ™rM <{ÖT4ūŦĖ“ēVž-˜.čƒJ#§'ž˛ŌĀ2n@1ĸRZ)4°ÂššZKČĀršâžŖĻčĻJoIŠę‹–&žĘŧk ģƊōZwkf8íi*ûm+Īw`Ķ҇PÔu4øŽ–WžĀ‹°Õ—J9éÕäˇúx¨nĸ‘Ī&×Ų ēßhĢQ–β§ČĨã2˛äFS)yhl ÔwT”g(GMģŠžJA{á—Ļ:ŠæFnPBXåGĒ-Š”žŠĻ¨›E#ciŪ’Ú­§:ÛĶĖbQenåĄÆš”•Ž5ąŌ-„Fu‡Rų“æęߥtjuWIz{ua×vĒũR ĘĻŨ¯öáÕHßãĪô æđ÷(iIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1288ūŋ ĻuIDATH‰íÔKN!⟐XŗcëÂL_a`ė+št%ÜL0Wā¸#§,æĄv(ƅ‰ã$ēû MQTøĖ/āô哚Û‰ę_˙°>†­Žų0X]sõ\E“W5g#ä* 'š‹N‹yČŨĖAÕx`Ē Ķ“į7-œŅ ÛĪœŽ‘\Ō4pšâĨÍ%¸NáãœVT(lt¨vĐ5ÃÕ #‹ į”ŋĸiJ+SŦEÕöģ­“tjZ}ŧfUåz-yÆZËFûË)ĖAËŗiėĪh5,ßĪwĄ…¤<ÚĻUMRp#“ŪæLÁjQíšúLÉ@Š Q9õė¤ôJŸ+QŲP’•mUĩĐ>jR*G4Ëķ}­Ģš\9hú˛hĢēĘ6"Â@[‚$e ´×ŦEÕTļi—ÉŖn€ĩåîë>ę]Ģ+~PÔ‰ŪˇĪæNįvÕúÆĸm|PæGŽfҐNŲ8ž.ģE3ëģčŸSūú %a$bĖ)IENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1287n=7:IDATH‰ĩÕąnÛ0ā#”ŠhíTõ1ēɏ’ĮčPTgdđ˜ĩ[_Ey„ĐČЕ…‡˛ĄëOÚ2ú$d)'6?J<‘Į}¤ŌŪĶ|{į„WŗęÄûÕŨŒ6?E‚u÷ŠÃIiĨōÅūĶ(5ģ‡đÖēúzĨÜtA•]=–@kwĻÁR­šŊ¤™ĖĪĄũE—h§ęąĸ§šNdųúûf*ĖģœiļŖŽ/ß،Zļņ2VŖnĮSPO$*:1ĸi”}ĢDrxŒšr` d(ū¨™š‘)x5‘Cķ¤˚۟ kV˛ęDzUl‚¤l¸Ģ3UĢJ6Ikf›ģē<Æ*ĸīŽUŌĨĸĸ¤Éˇžô]Į{-h_ĸI8#,ÆĻwˆd ņŠ‹fģ׆ĩ3ĒÔtˆÆŽ8ߊˇŠĩŸ~°qŽ IKģ@0k5ë~ųø$Žœ‘q—gQŲŽĒe$‹ŅˆŽ¨Ú´Šƒ‹žh|ģŽÅ•†…O”j˜ëĒΓ~đ0Sl§Ōƒ5ˇ@ũ ´lŋá?ĢWŲŧ+čÛöbŠ‚âÅņŠŋĩ¤ąwDBš‰ĸ¯‰¯˛æ¨|ˆÅe^ŦĘŽÃē­š>×?GšėwVn¨ÅoĪ"#¯IENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1285€\˛IDATH‰íÕ;nÜ0ā˜[…)]æEķZé¨ Å–žƒĀW`—v Ą…㟒_˛†\šÉ@´úVā,9;$úÄ8Ķ¸Ū ĶŨ9])D–÷ęox$#2AãömŧáNĐLŽāô6DRđō§Ŧú [–§øģčČАJŪ*â^äŽâ:û[œ– e÷o?|}¯›(‡Zđ_?Ž˙ĩ*Į#ÍQ؋]§(É“ÔŅė4S$Q,¸ŧW<žQ DU•b§8Ÿŀėķĩ)­’•Ŧ„_ŲY×$9đčj_ËiŅũ¸ĢRĶoV÷YŖ6W’}Ą–•t”Ét•C> ]­1Ä>éŠŧ¯ŅDē:EŦÖCWB?ЉBGeQ§j5ĢĒs…6#˸ûĘiZ\m9We f“ė/Ņ5ĮâØū^Ü+ŅalM´#ûjÛˇ4ĩĐögHQŅŲÉ:: ĩ õĩøÚôŦ+C1îĐĶ™|Ŋ Eq͚ũĸûߋŊÛÁĨŋôu4ėH™glHPԕ#eĻåŨ€cúŽŦoõPԕ¨ĩ!­wH6mĪRu Öjō%ęë#­‹ūeÕV´+냌ÚAj* N-PQųО—‰šĻÎŧšT{Tz¨N ĘnP;Ņb¯]Ē-D¨Å›Œ–Q›6¯ˇŒv(cųKÅÆŦpÆEĒ6*ŧĻ™Œã†Ŗ…Ķv<‘Q ŖvĖUFíŲūd´¤u¤:Ģ>#+>fĘH—‰SŊ ‚r}ĩ -­Pžį–˛xņÄ=PUôáGÅ(MĘĀN‡ū\iĶļEPÁjŧ šČöŦiÛdĮVpƒZ§1Û¸7.Ņh_ÃsĨŒûĒéRíÆšd˛1ŊîÕ21Zp:lׂŠÍ1=Q ?•ÆëZ0 čŨŠŗb1E36^ßN4ÅâÏy<ĄąW"+ęĘ)Ō¸T$ĮˆRēX× ÚÆ"^öų WČ/Ũö•ŗ˙_Š:Rjãž8y)áŖ­_–ōÉļĶg˙ÅsVv•cTY̊"øNųõ gķūOįđ”IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1282jɸŽIDATH‰ÕÕAnã āį˛p•ŧÅh¸HUŽÕĖÍ8 ģYģRɂ>ėtė„iU‘’(|ÆĀĪs‚2hįoĢ9ąˇĒīÖüīÎī—+ΛîYÕÖū× úV’é+įŅ#ÍC-%Â4Ā Ô˙‡;ZÕĨ}kMv¤qŦf¤Á\§ųZŊ)a.y5ņP0ņÔˑĒCyÜ+`ëÉyŨ(ģ`tÆ"T`I˜% ĀOjāôˇŠ‹{f/h†ņuX˜ĐhqÆë•ÕvtĻ>KjŽUņ"ë˛Ģíh÷jŨÖÜÕ ={b5:Ę×Pņ‹uF”ÛČÜ*ôīĩ§–‡ø7 ûeWBáØú!iœrÕØž`Õ03 Ö ę˜ &Ų‰Z\†B–‹Ŧ‘ú„ ”4õ˜~‘4Ņî5ô¨w#™L{ÍČ8d[(É:’Ö‡'AÔ`°ĻÅLUŸ5åĒ> 1/ęƒĪ‚Æ>t ŸĨҰ™Đ¯Ķ´Đŧü’¨“i_Ŧ(cSHgEߊŠs¤(ö¨| Ēž3›õ¨8؄ŅRÕU•GŖ.ītĸAŅ =¨Z:Î~tŠæē%FM[°ĒF÷Ĩ*˛}ˆüč”ĢĘ_„ĩĀ” ŌHF[ķ&ã‘"ë„lG˛ŪWÅŅ€ÄüИØÖ 4/ĀĨĻų ;ÖTĒbWQũvؑ˛•ģŋyåOžø\V->ķžüūū,ę77R+Û°q,IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1280đd¨”ēIDATH‰íÕ1nà ⇐âĨ ;TĄGȘĄ*Wé2vˆ‚;õZÜ =G`d ~ũ1‘*đPŠKU¤H„Ī€÷0Ņzy^CéהšRĶWΉŖ$8˙ ģoRÎ0CQ‚eô7یnæĐvŅOüÆŊuEõɎ†!fíŒėUXéët}WžĢˆV…ĀäÖ>ãŒ1sęõMX†6Έ#Ô×ŧ\ĶV4yHGéęŒGÔm¨u͜)ˆē Jŗ"féĨĨųuŠÎ… ár\閖¯æãœûU†^ÔÎ÷†ŽTuųÎ1•Ę1;įĖnÜfƒ–÷ÔBģåõ ´ņPū:”AĒIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1279 ˙„IDATH‰íÕANÅ āAYö\ã-^äbƒŧx%v^O ‰ČøCõ%ī14&ÆčÂY4Ĩ_č40C‰ūL,ũēž°':áÎŧĨŗŨX>‡'ö‘VæŌÉų•ųB?ĸąåËčúĖ“ø‚†oĖŨ×iüëéëŽŌž–]õ´V+čcģDTyԂ 8@Z g˛ž|+ū+-†™MŨ Ų ŠŪÔJIt=…åZ ԓjÉqĐ ĨCkCž)Úđãd­TIąĒnTäÅ7-vTŪTW]lփfh%]LU75Å[$m_ĩäš"sĶŦe•‰Ķ’YŸđxޜ 6›8QÍYƒŦ{ė°Ø˛bcƒĢ3õvOąķ8cEUŊK ^ž[U×tV’Ëör÷¨íŽb+ņLã’0\ōX9Hl<W-(æēĻĄžûÜÕi-jŦöŽD÷h}ē oösõdčSŨ ÛOĘ$œ žkiĒF]ÛZy3jmˆ&CuŲQ9ßâŋŧZ‚Jņkúž9"Ō“IENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1278y'Œ­˙ú›tž–ĩ’ÕˇUáq›ĻŲÕYaE5ēQ“ĢLž ¤Mä0ŨAI ĘPĸčŅ ‘\Ą> Ķ¨v^ô^ÖüŠ~üŽM*5eMPIeußĩļØLzVė]ÍŦˇXŽÜÕfWu‚&ÃVؙ{V6Y6’ēŦyļŦÆķB‘ÂÄB5pĢÅE‰…Jö;oęĶžs¨ļ†IT†ļ°ĢÉv•NTgšJģK’ĒQŗB8ŪYI“Fx ˇ˛˛íꂨĄoŽZQũëĸkė˅Ō“jgZõtŽ-_$öĨ;´ CŊ ÷[4úzaQ´õÂĒ. Ú¨Ģđ&šwXĶ(ÜÂĸzQŋ¯ŌĢÛÔ Į?CęY™djū*Ĩ>ãĪ`ŗÅ0ƒnã 5õģ*ŒÔë `žį@IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1277é˜!ø‘IDATH‰ÕÕ]JÄ0đ ˜7s!GđB<˜øäĩōļ׈'Øød`kÆIģģnÍĮƒ"â@ĄôGKf:™€(kĸ ‰ˆ¯`2pKôĖh‰EˇČĐ{2m%EPģ­ĒO}ÛA=-wgÕ[ut;ho/u{§Žrj/=ÅĐÃPãPƒũžFĶŌ|ÖĐĐtübÔÎÖēž;˘J×DŖÆđhŨũ×ŋĨoĮKKŲÖú4ŽP2ĩūØ,ÁÆėŊ,ÔA'Ņ ke¨Đä•\?Ī5‚¸Pt€Ēj~"\˛ Ĩ¸ØĐ4‹ö“žÎ•OÁŽ­„+ÕT`ƒA{đaŽ <‰.ėQt5WE4˛ŨÖ39Ւ?(ĸuÍ+lP„ Ŧ¨×¤Xm[a‹Ę‹Ũã¤īŽtékĪY*ŋ•ËĸĒŠ™WQ€Ļ&ĩĨCĮ™JĸģĨQ-Ē}îm3 =E“ēŌVoNZŗwF­žJnaK ĪÂēJbŧ]ͤŗõ6¯(ŋĢŲP“ lVmv0Ķ ˇ”[dĮŠëz=‡uTj­ŅÔ@ûļÎËQųäjU\Ě㟯RWĻ˙2Ëeą‘IŽõĸŌoļĄ4ũ ‹qŽr¸§ķņ“{Ŧûž~†Ū?šIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1275–@Ô}IDATH‰íÕąnà āŗ2žŦųĸ9ųāôÚ[1)´k)>^1˛ąÎYD =\ƒŪĢ.ĸĻÎŊ΃ž5xK§!ëÛzŧך8˙A*îē Ĩ5ĩąūĻečŗ­K§'᜖bē,nič4,ËiŦ”įĢ’Ĩ Ɍ÷O/Æ[ČIAEŸJ?jė˛ yė"ÆąĖ]†Ë’r'™ƒūpáēč˜\U<6šˇz†úéÔRŒ‹ŦŨ´lf$õåũŸÎį~ÔLSÖ}œôIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1274p‘pBIDATH‰íÕąmD! P# J˛+ÜŒUnƒ”Á‚”E<%Â1äŸôuØtWåÜP<û#ƒŅøgAyĢҎznuDÚę5IՙđÖˇžVģWĩ:jnUˆŧ|ؑ°jhŽÁ^ Z*ĸVÛĀq! š§úę) Š[-SkRkCņĒF Š6[-aė˛vĪfMé{čŅįIÕĖíPá‡Ļ@†ŠĒ‘?…ŖŗŪä}›!Ö|—kų0šÕÕ MʗK—xx$Å8ĘyļIĶqj”č§čjč̏Įh?kˇdqŖ}(˙V͞_ÂÔb֎’ĢnĒĐ/ĀũTé-ÜN•ĻũTž|Ƈz\îį˛oč]ú¸Ēn/Õ_ MûZ¨IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1273îõåá­IDATH‰ŨÕ?ŽÔ0đ/JáæIžÂ%W Ë•č_ĖI8 ~%Gˆ‚ÖÅ3’ņđŲŲ÷gãIh@XZi×ŋõ8™'mÜŨŋK¯äjDëqųž"}ŧÖđ¤ņ-äķNM×/œŽ+d7´ŠÉ{ãtŊˇßGよīŊ†" Ãn_+ü™Ú?WųpĒōčSũų›Ču9TĶ:UÕ¸J†ŗ”uT. ¸&ņnĐ Ãß/ŠvĐSj†4´1%n=Ē͛Fn=F~ĐpiÆįšá—ņŽ4•ā✚úXÔdãŨ‰Zę2Ēmj“ŽŅFŪĒÎ/‡ęĸ šn‘iņVÕd" ´° Ę5ÛbYEŋJQÔÛūĄ¤EĶĒe’Zá*˜qMué:V°)/§L‡Ęž¤–M\81žŽq–ŊfÃvPvZūŅt•ĢņīŧŽôßúđnX6ŠIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1272™ōÕwŋIDATH‰ÕÔ=nà đg1x‰ĘØĨ 7)Wéz€*PõbH2ö D=@\uA*âõN`YĒ X2ūx†÷Bt—MhföŌiŪķ›ĨaīĀ|ŗžVuÔĸ^UuûX6ĢēÕũé÷ĒvĢJ7h4Uũ>¯§ĒęšīKö:ߌÕá'#Q›đBé/Û&@#‰ËTW%“ˆ:hW”GęČ`ā+ÔS3SK_ ŽhĻDƗēi-n9˜ŠöU%)ĢĶSĩŌŨrUM×ĩʑ°[zƒŌX}¯Ú=c Å4ž9å™/ĒûmíFQģƒ>ōGUMQņËuĨ”uēP‡¨ē램WV¤†)VĩÃ7AßCUqé(øúj*Ę™šFœąČÛÆ5 ÄĄE"ĖO?k×p­dNVßöÚVÕI%cįŠ#÷YuUņÃĶĩ´Æų\&Í‚˛†k{›$m,¨Š†6Ę\‚ *ÃCVÕ×đir‚2l NųĸŸŖ ÕAúŦHųĸ‡m‹ĖJgÎėœ€>‘DĪOßš\øÛõžAũ*RąĻėÔ¯ļEÍLųXT/(ō o–Qá/GÅ-‰öŗ¯ęŦũ›ūĢŗFø…šIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1271û„ÍoIDATH‰íÕąnÄ PSÆ|‚?…OÃR?ä>Ĩl7ö:tåĻĸ^„kBR]uévN/’Ø9`‰ˇbīÉ%Āė‹œĀD°d™ xoÎās¨.SS€J” ‡éžVŊîu æƒD_‡Ęxáæ:žģ9>Ņ~ÉSŸúũęe§~ZĒúWg\ĮQ„š>jŲ~Qāä*Ā´S߇3&[ßtK A&RĶxÜ3A‰ (@Č]gję*™Ķ´( Tvąĩĩ\rÔÜ4iZģbÂąrSŸp´.oꋮ!zÖTnU^†ĸ>&V4ÂFã='–Wo4ŊUđUÕV՞(ĪēÃÅŠší™&wĻ9ëJžŗ”ŗkKŽšÎfI^ĩŒēWQ–V4Oķ‰&TunĩQ4•j' „ąRkĐTūÛt•ÎļŌ&^”ļOĮNĄkm ~ĖürĒ-sXÔîh’]I+ u‰OųĸčēŽq\÷!ŪOc˙¨?ã4õ}IENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1270wü´[VIDATH‰íÔąqC! `q”Œđ2B&Ģd„Lã ˛šYƒ.e()8”Įg?].UžīĐ!AüÉjDâīĨ.âŽwũGõ+ínĨÕqŖƒĸ Ų‰ZĄ™|ĻÛõ;dQPÕDhq“Ž˙Ō MfŪsvÚI÷õšž¨™Nˆ§ũÆ.ę›áĄ¯ûíÖ”#ŌoŠ¨ÍšZ>VWõŋj ^Ў=ģn‹ĸļ‘o0Aņ魏ŧUT.)VZ|öÕ͊cdËy˛ĸÉ­%LAĶŽōGUQ,ŽQQúŠĻ C ˛Ž†R™ŗĮ¯ą¯"ŽģŅõ°RâfeMÖĄYPĖzŌԓNw”ČVĶLŅsB }$˛ãÃܱЇŗnēŽN“æĢú}&rĐâ„üz/g•&QđĒ8ŧÂt¨ã¨ĒG˙īÆ%:QWŽķ‹´‹Vz“įīô…;ē´ÅIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1269;=ž‘IDATH‰íÔMN!đ?Ž‘MS.`Ę\ēhʕ\ēh2$¤Wá^ãp%&SđŊqb?€Yhb7ÎjČxĀ{€<ķYü­î.÷_/¨ŗfÕõ3ęĐg¯í÷ĩ¤čí×úÔ~šÚ/įÆSøˇķ™=`"ĖéĒxŖûėGÕ:âX÷ã?Mé´ƒ Ķđ㙊vPĒ< Vŋ¤ƒlĒ—vÚvŠ $ ĒJ!ģxƒûšf‹nXb‹–ĘŧBĒĒ7ŧÜDÚW4ör—DŽ*§‚ˇ4‘ŠĒĻIąmid]ˇ4ÜļÔS°•ą:ÕT:\Ģô×b¨júJBU>ępEëŽiėXģ†9§^%č@•ShÚYŠüRdkĢ/5vÎĀxV^ûšŠ 8ÚĢņ`ÎkFē u‡Ū)§š: åĩâĄŗ+QęI—ĀFÄōĻ8M¨:Ö•[6V$õØĸvCųQĸÔr‡ĒæLJ•]W*IjšƒÉSŠ/°yFŊœĶĄŸĶī?ÖįßÍü ų1-“Ø#œIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1268`< (ŋIDATH‰íÔ=˛Û ā%ŧēËî"Āá`_§Mģî*¯ĩ˙°īSŸúcWåžfŌÁŗ‚Ä4čÎĻ…4‚Á¨ˇ4€B/1ÛNųÉî›D<ĄSúĪeY–  ?[Ėĸˆ @Ļ…šĒE HŸā Ą;(w…¨á,œ­„`ÜI…ĨōȊÔë:ĒN+x{‹& ”žüÎ~ÄáZŌÂán(§Ēë{ĘDTa¨ČĒŖh'ēüՂh •4e­xWۜŗƒˇĩúĪÄi•įúÁēWŌ\P;¯…é™+M§™Ōqhšj`ɲ~đ7I˜āÄOnŠö†õ6k-Ķ‘5üEĮ¯k/MƒfũĘ'*éô Ū°BËFQ5}N¤ŅŲĖúŌT/ÎĢéyVĶúęēĘÆŦļ¯QE=éĒöõ@NКj…×Jåų°Ŗ_¨|uųPš¸@U˛ąëöXUR.œíīBjęA8ã;-g Ë@$ô÷ÃqÖš¯–JÅEI ŖžâáIÍĻM¯Ŧ¸~3<  čn)ŋšÔŽĸˇ{ē˙MÁ}õŗöƒÚ›IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1267đƒškIDATH‰íÕMnà āgš ›JÜ Ü¤\%GČ2ĢĀŅ8 ŊUõÂbúp~äØāMUŠ‹Ė"Žøl4ž üYˆH€É0-E ÕJ¯9Ūe+žĒ÷xéKĨYoéHUŧÉUuĐ2ĀITšĢhÔ\ÃF|?zŠ#ˇ‹ĘčđīBy”SCšøāąĒ:ãTĻ=Tt,:viWUģÜE]t•ŗ$=tÁøƒ Mĩ!ēhęí%J[YK ļĸĖ Ŧô§øē˛RGwN°Ö\*ÅFČ|9›K p“ķŦ˛tË˙WŌ™V?˰Ũ!U&ˇ×Í;Ėr*NJiÔ\ŧĸŨˆŠą$ÛŠëpš†OM<ŌMŲwĒÉŦÜwMYŅTϧTÄKm'+ŋ•/ßēÍH+•Í~­p ^×Û`u­TĶ tpjŽ*”NÅ@šz^/•ĮÉ“ƒĻŨMŊ UÕÆņ FĨG\PãT,´¤ĩFÉrIŧ)]9uĪŗ"MKėVîZ¨†Z-°”y’ņ´Ã_Š6õÖ,ôŠ­/×ļU1•øķsŽĮĩp›+q¯8pä*|ˇJ÷ŲĨ9,L›ƆĐŒĒ’SįWĩ™<Æ=ĶwKé+Ķžˆ_ĶžW9™"Ž„IENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1265q•YIDATH‰íÔAn„ ⟏`3)0Å#ôMíQæŗt1ŠŪ„]ˇ,YPčã™&<']6éhŒŸ">~@ŊŅîzפš/Ę jģ [“5ĢaĒĮú!č“Ēš.VĐC{…ĸ÷T^-)HũČ\ģ⠌˛,X†c-¸ ū@3*Î:Œâ¨HWœM|–ū(ąžÚtíkų­TËŧī÷7ZšŽú@+Ū¨*Ëß­Žęäîw7}ĪMŠQ++ÍŅ,jRŽÕŠĮ3(ՊToÚךŠ7Îø“4GMu6œtsS÷Še-¨nļË4+ՐÔô‰gzĶÜk$5¤VÖ`)´Ŧ~ްĮēVaT¤nõ0ūH)9SĶ(¤s3 TeQ[ģĐ1ø:‰+…ÛDqíc $ŌąĘŗ”+nĒļe,d’ÃHõ˛´AŦļú$îŌw éį>ųšĮŋē{. õ‚W“sŠIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1264iŠAhIDATH‰íÕ1N!ā)°0bš… 7qö(Ū°Gđ*ÜD [Ŧv ÂķÁT.ŠÜD_2É$_˜ax? čŅûŠzú^DöüJt~ŖËj:¯ũ­Ëž–ĢiO¯[ŋ Ÿģšv5xJŽčEÔ_Ą¨`Ąâ đ+@ŽV+i|„Ĩ,j–Āšfę#)Ī*ÚMã¨>¸p$*5w* MˇzŨQhūXLÕT'+ņ{yÆíl“4ēíD­MųĀlp’æ…ĩ5CTž¸Ü\€Í-xæuN]Ám2qĸYíiŌ‰ģ&M2Yã(+\2Ŋ(jÅŌTÍÔ'Ëcåu.Šú“[Ŗ.UŅĒ+ēĒAy`6eSŒĘ=â—Î5q&ēr÷m|ĐYTŽ˙KēåyTŽ:¨ļÆ/B¯Gđūī'ŗ¤Oœ*ãZmētÕ‚Ū īîEŌ Ûâʛ\Ō~Ëķmá•>8Jƒ)~$Áo‚aaÄŖ+,›ģ´…R_˛ą Ŧzˆž^Κģmayṳ̈/‹ęĮßŌũb^iũaÕKZՒĻ%­P´ŨŒŌŨ §ŋÔLIà )ĮúiĪŨh‚>ŌGŌ¨;mYWTdĀ’4$å7į7?SĘēĶūgũUĢ)vgÂ`gtkYÍŒÂÆEå§uû,k*(Ģ$¨iŠjqíæ”ZA‰‹NZÔDĒĒ~’5‚agbøČŌ™YoĀEö˛bÅZĨZšē œwR)YĄŗšŠXÕIšipB÷ëÚĐ&õŊŌpĐÔĪUŲ™æí++˙.5Z Œ“Ļîˉš3´āe0…Ū?úۖģZФ¯@ē–uMí#ŨŽŊrkIŠ[×OÎQã AĐtTĻ.NyTtÂl´Lá*CËJíŊ-&ŲĐUãĀļÁ&#t˙t9æžŋ§Ë7~!څž­‚aA+„oÎ÷ fIō÷ôŖĀĐ˙<(IENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1262€éä6MIDATH‰åÔ1nÛ0āĮ2¨2fĮx…ŽĶGÉz€"$]rĨQŅKt(P˛rjU€āë˙(Ëļl:Y ”ƒDņÉ'ę‘D˙Yą_Âę‹vį”qŅũø°hqyq N´ 𗏎W¤ÉÎË*ĐōŌ°ŧå"ŲĐb?аn—†7„7zr3Ũ,Ôį~e6ŽÅ0‰fē@L1›L+ÍĖԄŌZĘbn)Ņ5æ,sÛ}w=,hEˇvŌģ¸Sď qķz/-‡äļŠ×•|ąDĖ|!UŽĖÛȘS(¤/˙§¸EõÕԗŋûQî<õ­—VąāgUɒLOŽ\“Ÿžƒ™ôÍãbDÃyŦ}u“ĸ2NĢkģŅwŠNČ)™-Đ8 ?îįÅ2w„ !–Dœõ•|2¨7ø]y§Ųh–#¤Đöo!ŧ™Ž‹ĒPͤÕ7ôžé›cD“ę\H&6ĮQe2ƒÎĐ.ÛSåžhđ?1NUUĻPfŠ+‹æĘŧŖ*ŅæŒfE76Õ5iIû&™žĻYc{’JĻ3‡ú0jŲڒgÁVúĘąPΠāęúr<Ą|U;9”|>Μ­,ä˛Ē+Ž\ŌUÍČßŲũ2Ī4Šĸ}]ŖF@Ũ/ÆLŅIúîcĻč$JūąĻÁū‚ļäīj Â])Ö• ou>Ŗ!¸đF§SíL–ŧrᝎ'šĘSˆø†č$7ÆíĨđ‡ûŠĸíúI•¤Šüŧ¤ģŨū=VälSSDõZ†$s¤ƒ—/ZĶ­4GßĪO•ĸõōŦÎËėŨgô/ÛęŌ˛EįIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1261āĩŒŧIDATH‰ÍÕąnÛ0ĐS„ãeėP„ũ„Ž‚ōWü ;& û ų• ō#üB ‚ŽGI–í˜Į ”ƒdę‘GšG‰˙kéCK1čM6.ėâڕ \āÁ•˜T§K>×™īfËøyŅ S›Š„\uĄÜĮĄįŗ˛č¯UíšæįUî˛zŠOÜŌu&ä?īOŨ7ÔŽúžĻLhŽÆ=•7îÉĢ*K]C9ŲÛ57uhŽÛøGПUŌ–ûjŅ '¸ĘŪĸzŲv~ėĒ*ģ\nn¨Ģėë˛C]éö|E}ØõŌ¤ŽÁĶOUeÚ`rŠ‚§o˜}TõŽœu´ĩ’¯›Ô‡íÔ4xØĘ„}EÁ+*)”ĨÖ˛ 1cųiÚSCŗEMF*[Ģh´du%G6-˛$¸Ą˛=t•Į •÷ Š#čšp˜´ūĸ̀I[+r ôĩ"īMÔúĘéą1žĒNžāŲú[VÎĨGˇ °ĸŸD÷ ’|ęę䚞ôŲS×PŽFQÉ~y<ÖĮ]’miĨüCũ p;ĸIK9ÛIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1260nį…ĸIDATH‰íÕ1n!āMAŠH¤L Áe Ë\e‘ H)Ræ{ŽB” āŽņō3^E^ĶYqáWŒvø–Ņ ū7{=$ŦËJ>P/GsM;Ā×*ķrāãķ›Ī׿e_€Ũ¯Ņ”>ŋ˙Ŧ€“§ ~ŋB~U˜Ÿō(¤BÉUQų ËŒ†mĸ˙Ēč#•ķĄĘģžy5GÚ4ķÁŽŅRũ¨UŗÛŒÕ˙đRÛ­–-€„mĐB Ø\LPĖ÷÷=ôŊ_i…ndļ膷ĸ*A˛á›NƒrԐ\ĸÚA‹ŽÔč~“§ĘĨ'ŲdŗR/Ų–…‚šæÚĐîÜBEQĄWúŖPÕJĨ¨$ˇ7ú¨yŖžVš4ŋ>73Í ]ąR~ú\XĢ…+e&ģÚšr“āĶT9Tļ#åôšļŽÉŦÔwĩ9Lĩv.ÁMĩ/˛Otņ͏G­+ØI.ۚÉæžöp˛ÔIę2sÅÍ5áë$ąl ;jŪ0K;ĪŅ]yēLúčrĘōhi*Ŧuk“}Rfļ7ų |Ģ/ā™íeüēMôr>KeöÔ Ī3~‘†úoúžhâIë–IENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1259<n}>IDATH‰íÔąj„@ā_öČĻŌ6Õík¤į+]yŁBŠ”y%ÅG˜r q@āfRAņÃÕũwfĄOŽĪžøx샪YWô 0ˆŖKԊ\~rT’ÎHÔ2>ꂤSøĘ—¨ĮH¯HŗBM?šĮųŽ›ž_qMNS^ĄŖ­ž.›öZķ3•ŋëúķŨXqNŅČÚPŅEúЏp!e$FébzņĶP.?s~T’´xsVáŽS™­2ŧēĸŽũlU(ëq˜#eXUcmx•C ,ijöę™ZyRş‘”Š^˛×eÔš”P§Á´û”Ķ)sä<˛“ĘÔz9ķ‡-‡n<:Ęļ^M[œājKdŽ''+ļĻE(ÛŽžāŪŨęv¨ÜX{z°-dQ9; v`ņ ęíHŋo¯Ûu×]˙‰ŪįU„›ĘIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1258K^ëmIDATH‰íÕ;NÄ0ā?D"T˜’ _’aŽÂ(ˇ@˛Wd¯bN‚%.`i–‡ņ>¤Õzl*$ ,%Qōi’ÉŒã€NÆoŸfs8ې Æŋūk_įĄžu{~Ávž[LŖX(¤%eöVŸæŧЍ%]SÕ¤SŖõÎMSŌY5)†ĒëhHÔ\ÕGÛčū]~RĩÍĒĖŦŽĒrÎŦ¯œÂN?…ærít{ŽK–ęĖēÎŦ37ÂJJŠÖǝĩÎbĢÆ%pā!ĢFƒ O@[ĢĒ^ëÁí’Ô™`ũCOA‘ÂíâE-͊ŗ¤5œT5-;ÕYÔ¨ŌKÕ"jāūØŽzaēę8ĐtŸëČÃx(AĶDā"jw¯RS îĒęn5I¯Ÿ¯°ęĖŗé’•û›…rėë~æčŽ&^bÄoŋŪyÚ}ä§KÅqŨˆdÉiž]‚Ęã7ĩؑf3ŒÕ#ŊĒę ŠŋúĮųÔp>N–[ēƒIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1257ÛŽCz IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1256ŦŠsėdIDATH‰íÔŋMÄ0đĪ‘Ō#x3 #0žŠōVrEË ž "ҏˆōøœøų(B ,šû)Éûį@NŦ„_Ŗ‡/č÷Eõ¯UgJķÔkåM“ßļ×%ƒ{˜^s $ØčqŖ‹[6E3ĩ~ĸ­Ėŗén/éRéBnųN 1é]¨!ŗ,ĻŌ…–HSnD][¨AÕÔúËg4âÚ0.]!†#ŗ×t5ŌæFÕ Õ gŽĩCS–đaŦÛŋi¨a¨LƒŨIJĒFIro%åPÔ|M;BÔŦéJ2‚.–lEņš†……2‹áČGE+n¨ļžõũ­đ3¸f[•Ų(ā<ĄĘ\e⠘¸Wô3™ÛcÁ™t’ú¯ĘQ]Æsš5õõ}ŧ¯Q×rËëũG|ųš=vđVëĮô ƒD<‡YâIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment12555 "VĢIDATH‰íÖŊnÛ0đ?ÁŲ0ĀáxĒĘg~EOĒ´ī}cũÁ?\‹˛Yę ˇ›):Đ-UŅ=IŗâFV ¸–4(~ ā˜BqŒuĶåŠĒnN*y֌éMq üúYw:īwibuáŧŸÕbĻĨjd-’r5ĐÕqîú”†ĩĨōʼnęgd Ÿ^ŌP¸]œ¤÷…ëŦX­¤ŋsŊ#’*ÉQÖŠŨīRy. U/UŸ J&Yŋ2IÖhSWvĐâĘž_čā&Í\ŦÁĨUŸg§ÜÕ_Ēë$C{ũ ė>GĒ-Ū´•’gŨbv*ž“Ũ^ƒŖģg§›Īúģ×G?ĶÔ ° fÔô"_VÃŅåežŧoŦ#´ŦÁ†ĻR­ęĮ”¯'|ÕB3jĄŖĐeĐ<õø&öQc—ŲC-Ŗ^Eč˛I7­ Ú×GŽÛũ8Øˇûî˙P44˜ĨŠãõÜŅ ø˛IũIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1254B§Ā†IDATH‰ŨÔąNÃ0ā‹,áNxí€đkt"<öÆČ#đ*ˇõ1‰‘H x°|ü& hrލ„8eHûÕgû|.ÉJDúúĐÆ}¤C[ÍjfûW÷ûË:Žę֔=üDA eÉDŊDE÷"d‘ü`ĄwhĒMŒÔU͊#´×4aĸ›†F#ņĒjP´4ĝQĩ’¸ķ˜ŖĨÜÖBˇĐQYÕ¤uė číyGNÕ<ÅôšŦ ;Â~Y×xKPßVÔĘĮkU_rUGŦ*jˆ3˛{]ģ䆺–Ž&ųD†]ũŽoƒ­J8.ÄR}ÂŲ*˛ČŒ7îKíY"Uk#ëŠĶ­OĐ3ƒ0žČūHAxzūŦqĐ4ųŠš~ˇ™˛iĒ}•Ļâīīą­ˆĶéĶĒ>¯ę"N¨oÁŋ +ęzVIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1252Ģġõ•IDATH‰ÕÖAN!āŸ’Č’…ā(ãQ<‚KÃ <‚G‘Į#āŽDū”Fہ™˜c|™¤ _‡×÷Č l„ÅšõâøÖoũOúĮÖgöũĘPÉX }âGΌ­ u24¯ym āš2k]#™×Š8)œ4`Ĩf„sœWUAõ–ŪuĨVf|ŽĘį=áĄY'ŌāQ¤›G4t˙P˙”ˆÚÎŗ\IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1248R oĒ—IDATH‰íÕANÄ0 Đ_"‘e8š+r-#b¸Gā*AbĪ‚8‘ØŠĒৃ—-›‰4Ŗ6OMÛM€˙jgĀşzeõgÜË˙9°*p-7W /Õ?•ČīĪÚĘĀ<éåøģo7ÂxŌ“ūnsŨ֖ĄWyĸIwM|¯eš-ąÁõJy–/€ItčtFž€$Z %äˆĸåÜT‘(Ûh¯2Ck,aF‚ĄrYb “­MĩŠZ#Ī‹ŽH%÷ĘGMũœUC š„-•@eŲCLeŅ>’ljRA6s$ŅĐ@miÖß>ļƚ‰$‘Ö{EŠĻŲz/OnvEĶlŊG7ûŊ&íxXŠ$ÁSnģEÃJk=ĨÆļ–$ŖúO šv<Ž”´´œŽaÍJ7o]ŦŠŗclĢėíĒoĻæQ*RôÕ~V– ų-rdPLJ­ķ{­öš)­õŽČųĶęeŸ™ŽžNŪ¨ēy9ßDQuŋ´ĢœƒęĻŅú]å¨~B4t€ÅMā;^ĢĖŲ~,žũ›~ŋ`<ø›p…IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1247Âĩr;:IDATH‰íĶAnÄ ЏX¤;ŽĀQܛ‘Ŗ!õ•į,YPčgF™EâdQU]Tc)R’ÛŒ‹XņŌ?ԝ߸sŊTMŖĮSÍi¨?ÕUøXÅŌ é€Œ"jč iSUøĨˆ#Ë $C‹Cx¨ëjȁÉYĒH9hŽSKčÔˇŖŽ§ēŖwmŠKwgZ Ą{K5ę]Ûbi:k­Ļļ”,å3k-–ΚŲFAüv$p,Ļ6×ŨÔdjYē§Žļ*1u•ˇYęTØĘvyvÃ؊Q€į픯đÛí´qߡmŅN+į†ēĩy§s2¨[#wĒą.īđšŽúšÍs´NKÉķAnGe>ŽG$ļí”)ł`ë ÎÕrŽbëxŦ{Ļę™s:ŅÍ ;ĢgtĢ"+^úĪõåäKh0OĸIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1246ĩ˛B­{IDATH‰íĶ;N1ā1+ątÛRዠųfØŠ¸GpĮ5&ĸ ÄE\X;ųŊynvÖ bšXųۙŅüũ0"˛yķr.ët‹3åĻF/lE˛Ē‰ŧ„Ÿ^ĶH~ŦĪc/ŅjZˆĻ ¨Ķ4S=›ŒĻ‰ČAŗĸ ĩÁĘ´iųČŗ‹UYĶe;BŸT–‡B>ēĻú°Ļ™`›5EBI>”7#ƒl™Äœ÷Ī”m´‘ÆMŽ\UVUFrÆšĪŨTŽõûĸŪh­Û“’Žj§j6ã¤FÕԕ÷>jDØËŽÉ1=ņ‡uæŨžČΒɎ€'7fdSáųķ×dEŗĄ…đäë'îK˛ ߘųågņĖߙ KhŸev×ŋŽad×ų>ĖqØĒŅí1Ō´¸Šú™ö0͎ø¯˙Šūšj–ŸTŅ•"ÃČQĢĢ‚ØUÛš& ąBVLŠ\ΠĞĢRĪĸŲĘZ¤Kõ)0âšúųž)ČŧŽyĶ.š”uD‘v%]}ņmĸŲWQĖ´ãü$E“hšĐ‘ŗdØtÍ!Į­Ēl3•o—qĨqĸ l(æ ­Ļ[â+-ļ9âôŦkvC)_h¨Œ ĨĨ8DŖę8@ ī‹IĒvHžx/Må^¯Úėh$#îĩnę*—­ŌĀļˆ÷UĩÅGEĨnüvöíQå $[B‡ŋŅÃ}GRp$ O¯všĸí°Ēõŧg+Uˇôs=īēdHâ§nuhj”Ŧ­Š~“n+ås‰ŗjžõÉ8ŋ'uri7ĮļFo\UFôúõ’NƒēTUŽzÕĢūcũLB˙čÛŽIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1242˛ß†´ŊIDATH‰åÕąNÃ0ĐŗŒd&ŧ2Täø€JáSøŒ"!lԁ߲ÄĀo˜‰ÕŒ;'”ļ>*6¸ Nōd;qÎ9ģFēĀĩ‹ųrÍWiÆÅ°¯ 7ļąÕÛÕŦĪMķõ9Ŧāb$ÍĒTG3˜6ĒB,ĒwE|Ũ`ĄÆƒĘļŠFŦŋâŊŠiqŗ“ōĒEš7ŸÜ9&IĒäĮ(Ŧ•Á‡ĸXųÕĨī^šĸ&OŠņŖŦ6/X¨qHŦBæ4ĶŌl‰‡ę]ŧ5íŦ_+äĀj{åĐV Ķ *MHė1ŽĸÎe‚•Ôãc¯–&äĘ3(\wJÃÆ1_‘jAé-ŖK.í-i Īēš**åkĢ0ŊRšrIÉʝ€Ęœ¤õîX=,ÍSŨ¤[—ŸÅk_á‡:zÂĨ4ÂÍÛ´ĖģJ+|vP-wŸŲtÅđ/ũcŦiŠëT@ŋÂIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1241+Ö×+IDATH‰íÔMJ1ā×´ÍĀ\@ėk¸ėkšHvˀđ /Y)+=ābR•Ų¨zŅÔGå× > ĸ…ģĐ×ūõgčŗŠiĪü°=:ŽšÎŊVĮŽ)ZglYŅä8Ą5V(*ŗL\T­MÉR*dQCëğ¨O3kģĘN慏ŗ,Ũ+4čˇņ%…­ÍŧiĘ T[ŸĘ4P.tĻ+[ŗ+ģîķĩ­iÉ[㚎ļī]K˜ĒāxkĒg‹–ŽĨĢĨ{°š–2RŸ}‚ŊnnŌ÷,5Ču=“R“i}VUž€*ĘQâõ\ ¸i$\XŨí*h?ˆNņĄîÛŊĸ3GEų1ŪmåÂĄ?īųøú6Ô× z/ŲÕ¯×wXyKãîžĩ.IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1240\Ņį˜šIDATH‰ÕÕ=NÃ0đŋ1"*ÂȄ¯€ÄޝÂ1ąÄĀȕrŽ€Œ8–XŒdŲŧ—4m Ī#<ĩąãŸœ:ūxUV‚T×ĩ‹hW:GœŽ={ …3āxŦo?ß×6ŋyÜ˙u¨^âv(ˇúejjߥÜX-Ą 7mÉMĪ-])Ų|8h?*E,†Žŧ’vlxF›öē‹ŲũÃˇģ!ŋŨšZū“ž­jO[ĘëĖâAŠt }gēI#ŸUSšŅĀŗŠ.)Q=¯ē°‹8iÕ.ēĻ2SZy›š°‹7b5Î$P‹Y(•Îö††AŠŲ?jģĐ4¨Ļ#4 ͓fĚ6Y%-kßz$]QK^UoaĸÎĸ† V%iaUĸōē%ܯj&m*UZŅ âIEé5‚§uí¯ÂļŽŽķuv<¤40Ō’•z IHÖĐÄõí¨IÔŪ„! VÔŌiĀĻ4jŪ96a+(-Ná$˜p×ÄÅŪ Œh8ŌžÔĸž°:Üëån?čĩō’zQšo~~qĘHųo’¯t‹§*/Ą‘N÷.Ŧ”Ļøœe)‹ÆÃDJ9öiUËĐ/:U‚ާzIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1239jLÉûĶIDATH‰íÕAnŨ āAHaɸFVĄGéAĸB”E7‘z„\ŠûöAęʒbúCėöÅĖķ&ĒÔEG~ö3ŸøÁŒ!“ˆĖCŧQ\i†â6¯ļ@š[æHŅh"Z53ČázáNMÍØĄ_×P§2wũc¨uiWôÆíöUyžŸsVüeSŒĩéŒo§Įí&Ō¸{a9âåī5§Ē˙š~>Õ<Ņįwč{Æũ¯{uĻ™EŠã69N#ˏjPž#K_ŗü­vƒ˛3™†Ú[´ ¨ jWgģ(ēL¤3JÜÔEį€÷*9b[ÍQQõxd•| ĪMTÅq(*ũŠ~đŲ Š§ę›zAĢéÄņŖOŪ ÚĻŸî,+i6ˆŠ†EũEÛ'Ûߨû­hĻûƒî=?ĸšC›¨ã6jĻĘ:z‡YĢí¤eY‹ƒöņ~>*rƒ1ĮWyÅXŸīDũ‰{\°†7‚"đÉŽ:YõTVa{0.–…™ĘnēŽ/ĸē–ÃU-žô뚓#˛/Cõ ™|ļj­…)$¨ŖrÔąōØÆ†.58%†Œ…úŖÎ‰€:ōqŠũ]q„´ŧUĻb?ÅÁE/:ÆÅ†ŨļĩiÃ{߅ē}Fœ RüŖú E“"rŨIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1238Kųm4IDATH‰íÕąnÛ0Đc˜KPvôXų ̟ŌOČč†IŖC‹F†Œũƒ‚A‡Ŧ,:”AY^ī$ģąEĘ@ˇ%lËē'Ry¤ŽĨA×˙™ô‡á¤čƒj <ˆ_qzĸ,ĀęF‚‰ 0.ēøáÅjžŠÆ¸äčõíĄōŽŗ~ ŋZ oģđíIû˜ߞÕBQLV}Tûa>“•:ËÕHŪ­aaFô9­#lÆņ%‰ŒŖŠéėl¨ø_˙VwŨĶiCųŒ‰ŌĩĐfZ.Nb W(P%ôņ Îô;}P‚AĻLŗĶR)f°Ąå`“,Z&õÆn¤keލ@gÜB…F"%揊ú…Šoëˇsĩ-kĒjúŖ˛ĸšW{ÅR[ŋ$yDŨljø‰Ōļ-Zv´™hģ$Ë3Ĩ›yrVg?*M’AßXÚŦh*ĒęĮ3XUšĒÖ÷*†Ę#ÂĘ-ĪĄPEã¸WaQԍŧ SŸh+Ī‹ĄÅkā7ŗm†ę ]ąžG2Į ãL&Žæá8wio$B1 ÔĢ.ŸŌĩęÚ(4ŠKJ´Ļ”¯ęc“æmēĒę>‡6ŽęSö&Λ4‘hKũIsîÆ”Ī`ŪÄI-뎤š>’Ūk¯aQŽ2ď´ņß+×įUĄô„5Ŋˆ]mgĀGŌœ9mŊW‚vsėTeŋ˛âôęĄú撞ßéŸÔß'ŧŪQĩÅTIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1237ôäüIDATH‰íŌąn! ā˙t*ŅąyŒ•xĨŽŨ@ę‹QučkXę 02PsJršœ/{Ĩķ‚ā“Ÿ#†č †>Ûë–jķ!SÕĨŽŦ*'—ž-IŽ×5ž:’\UÉĮ7O/œ‚ŽđR@:X+ø¯!peMYôWŌĄk…ė=疁ßļt mÔ5™ŽuCŖí÷–Ę2MŨčYÆ-wZÂŦ˛$ˇ¨|ysđ4 š|ە<ėYëØ˜ŗ%s›{ÕbęŅgCöFÛŦļĀes)v×svޘä×úŪДÖŌ&åĩc„(™/UtMæGÕGįyÖjātí•ߥkœēúŸŖ)WK@•ŋĄjĪ†Å~ŠrũđHsx¤ËØu×]wũ7zԆN—KaIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1236úķÔj IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1235cú…ĐļIDATH‰ÕÕMN$!đ?Öš€‘kĖJŽ2'0Ŋpé&ņ"ŗĀ¸p醚KKžŽļÛi•IfŖ$TøĨxh8 €Ķš_ĮĮƒnS?ũQÃ^$Ŋߊ#ЇšãQĶęæsÔkvī3ˇ'J*ųõît]ģė{ŋOÕĐ`ėT5øUĩ´ĸ°ô´úîp<¯ęØ$õ˙ņî—Ō—UMDY•K:L”eLxn+Šđ ĒĶ7pņИ)7ė5Wƒ¤>O¸Ė@“I—øŽŖ¸ŽO6oT5ÁĮĻEáDtT)ÁG“7Ķ<Ũ õbŦÉäĢUĩ÷E4ÛdŠč¨D-.Zjįu’ōĪQâHš‘æg-kK.įHˆkÔ!Î;UŦ.Y ×ÜMíķ۔kr†Ũ4ņAgķL˛ļ{xÖËö{m™mˇWp’ļø×i¤ ļNO˛ō’S•¨i QዩįšÛ… i6ķ^ģU¸ėÔ÷ĘYMË~H}¤X/§|†oŊb¯ICČ/NYšCÅ>ZŪŊ†\WŧnZn†$ÔäãŸí˛už_\§īĮVT?ü­ŒOĒo”‘ú2i\IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1234ũĩFHIDATH‰íÔ;nÄ ā‰.äË’ Ø‹bRåZ('ĄÛ) ‘FL{‹H [ĨHad‹Į'ß)§žzę*mÜüŅüĩŽ\ ķ—4Ũ¨%pÂFØ˜í  Azk‘ĒÚ‡á4Í đ –IU˛ÕÅÅp(š¸‰ŽkŽՒ…hQ"ŠĄ¸& UķŽ‘#gUĢ=4M5‰FUÉõH1SO2nĒrHÛTšx&Ķf*7l{˜hZ ŽīęeĸQrÃ×eĸ`yļL´'ŲüĻkߌffZ{>#-cnpYûՇ€UĶŧIDƒĻ‰¯×]ŊĻīüiįj9N/Yys^%\˜}ŋ6EÉļCÍQ $3ʡįĒ(LėšF•#ö XHæDeŪ]]|í:îUßA¸~B5Mxē_M .ûŲ÷ũ÷1čQj—ī1ĸÛŌí¯Î?ø‹júĒžWĨîˆ~îIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1233Š™ åuIDATH‰íÔ1NÄ0ĐoŒHˇæHž’¯E”PQr$|Á ËÃwIJ‡‚‚\DVž7šĖŸ,Ę,ÃĩāG:Æou˙õ/i›÷´„=MģŠ;Én¤ÍXƒķX+ FZ4„ ¸žŊøĸKČS<đ@StN.Q§Ģkž¤F˜ŲF@ՉZ˞ŖÕ,‡cSļOžčę5ę•Y5lģ!Ų§iÕEĶĸ{*&õˇŧá¤Ø4^˛-ĸkëIXi##&ŠĘq_!Ô]ŗĄ2AĨ“Ü'KõEˈûč%ę˧yeJW%}#šWŨHûËÔÚīV+e[UŖēv¨˛yŖÆB“¯đĢžwŖą‘ęĒy昜ií_ 3p•5i:qģŲĖÕ{Šļ]åū¨™Ē¤ģ^ÛĶ”|ŋ]ÜpāeŧĀ=pŋĻŦėā'ŦĖF_< ÍÆqqâ–ąŽŖĨä{Rœō¯rR\ØŅõkúŽ+?*“IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1232ũžssIDATH‰íÔ=ND!đ?RPbiad˛˛GØr “7×"ņ^#ĐIAΐŨÄ,ķļ°1&ŌđȏĮ×  ß(„ũ×?Šņ–ļЛÛÔâ{™'šhō=!v,šxūôĄį0i†_Wā:YM`,wÚR‚ájšVžˇšbT ^keĩUô„kíä‹iĸ^ŲīĐ'͚EyP|rēšĄyK)˛MĢŠ&Eė6Ô›U Íe[VVeŪzäÅ6œ´5ŗöäę=NAŲ¯(q|ŅĸvVŦE§ë*j¤Ō´aŠCŖĻÕp ­tŌ´ˆHŽŠė“›yÎ:ŅąO,Éë†RД×úūÖiAüP´AžŅgĨĐLįĶŪôéŦ>)T#׀öv4É)>°âäÚ¤ËęÛ_ĸœnÎÖp'Ē܅‹žĘ› ŧ(š†:ŒŽĩ¤1$éÚå #$Rn÷šdy6ĩĘīJæœ ˇōˇæ¯ŋŪ?Ņ/zaT~×—IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1229sWøēhIDATH‰íÕANÃ0Đo)ŦđP}€đU8B—] lŠ ŽÁU,q,qĖ /,ã”VĨwŗˆŋL$ĪLĐ>Œ_N^K‡Ķ ûF?ãHé“NãXûø×ũ“úžŗ%Ō‚n‰`(N”• Lm!ĸ×ĖIP¸×П8IUĀzØNųŠŅĸĖÁ`m$ ίuZŠŦEĨpoōÕ\z-‹‚UךĶĘģq‘õBRÚ+4ß8PÍJ 7guc†*lēÔ¤$ũ¨¨6^”*_…ÛĄōr¸“´m˛đ˛œë@šHžJJ,­9ĒNEÖdˆkŦĸŦŅļt@Öā(nŖŦü×H–ĮK¨äŧl9ļtQ[×Ãwaz-†Üv¨Ų;Ķ3Éŗ‘lá"/{4ē|kĒ~ijú$Ės› 7&éIĐ6ĪĀXM\¯å—ĪíÔ(Q5€ČęšŊÎ;å÷×Iš~§QúndícuIúæĸŌ9Ĩߎ_õHZdJŸ™VIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1228PČ,}IDATH‰íÕKNÃ0ā1^˜ÂÛ,P}…‘›á‘8WōŽk˜D‰,Ü ŋ1Mķp*ą@ÕĒmžÄöŒĮ.əÆô՟ÕöÛÆũ×?¤ŧ­O’ČU5ĩŌ^&˙xœéŗH0ČGŌųĸ)Ë@ _]ĀĮRŅeO$D–‹ÎÆå< ŨžŖ Ŋ%6č ĻĒ;ŊĨŽŨ+Z¤#k mhLĸšžfE¨uÅ`ÁõëqĄüŠģmÅŦ*Ųøč9FĐ%Ī_QƜųÆÄ‹ žv.˜PÖˇ´fėīVØÆéŗ—~Ô!+&>™ķÕT=ĮbœÔzN*wĻęgŠĮ™æãQ;“oā}]Ŗ•^ ʧ­hÂÕÎæ„×ÕŖ>†ŧĐUE‰´/(ĄĒ" öAm¨‹ĩ¨*Ko‹€ļÔĻkT#šžô€LU5ē\ŠÚu6ŪōÆÍMsŗÎ$*"­‘÷‘ĩļĶē•ŠšžėM‹˙Ŋ2Ģ<îžpX=ČJąôˆč ëöCNāĨžĮŋ-+sLIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1227”īÕŊCIDATH‰íÔAN! āŸÔd–\Ābä*ī$BâÅpå1ä,YjÁŲQƸĶäÍf&ų€RĻ|ņDÜõŽ˙[Ũ•6{ĨÅr5;-°œ8zMŗh„ë †[ĐæļÂĀ)ځ#OĩŠ6S(YŅ.J•âŗĒœE›‰7]+uŅø¤iųVNpëžOMĸ!ųU]8-§ņƒf׎F‰Ŗá¸ūŖėē=Õh*ĢĶ;ƒvš93î´QË Ü]“ãfļ*…!ÕS­ŽĻi7scÅŠÚh†VÕs9fhųŌæJB#ôF“ ×ĸ0Ž4_ÕĪ„dq¤¨$ô1ŗVUzKž¨‡R %@ģeNĒŽbȝŠ&\ ’‚ÔĸrũĐuŊa>×ÚÔ]j4–;•ž<5z¯+x‘¤vĘŗtēė“ĮĨ~ūĨîũ ũ˙‚QyØķ3IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1226ãčå+hIDATH‰íĶAnà ĐOŠÂ&*ˆâ‹TqVĸ.˛Ėzz‚^Ū€îJ™Nė*QĖ8ËfSdK†§ÁĪē2<ūõôõFīũכč(:Q“Ą¤xŅ(ĀU˜V=/ÃytēŅW€°™ˇ˜Ē‡ËĀ0IPŪ5YŋÖŲÄG16vaiЉÛŦ:P̜JčŌRWíéĨÍhĐ{ÖŊKų›ē*u^ēÔĊkZæ5 ')gdMž:Is,åäņŨQbmk4(zŠĒ0ĒŖ° jå™ßāYÖÂ[b õ+kNJ+䇄ķ$–{˛č“&wŠĮtÍY'ąĶíNú=QžâY§ßĖ“ØĪĒĸC ­šŒ§7ČZL5;ÚÍhîĒŲĶÎ$M6›}UŪ‰2qŨ=tØŠ>ūęĒ­/węQš1ĸP}>ÚXÚvë͍Yčē1vśĄcYãpö-IŨUڏOŸÔĒ0nĻ?9Ä=š‘vÕIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1224 æ„5IDATH‰íĶąnÄ ā1°œĘz¯pc‡Jécu85ôÍÜ7á<2 \“ëP]Ė •Ē.aIĸĪ€c0äÁČ8ôĐC˙@ëē×O‘Ĩ8^öúĄī^H?‹Ą°XJN*đ$KᄁëP2ĩĪžâD)âJlkʈljJˆ5öĘNōMģĄ}h™ŠÜ4ÔĐ(‡j+Íĩo9Ÿc lĪå%ŋ$Š­‚uÛÜT=BՅĻĒ]čÕČJŸM#°fãŒ4gi~š‰V/ÕM•ã˜iIÂĄ;JfÎ:ФDSķЛé,‹į•gę%eí[[čQOyĸ56UL”S{ōĸfä U>šÄø_-p9ãč}ŪkÃĒŲęĐģ_đßÚā uyĶø[ŊĖU÷}ĶŪīšöŊ’ļЏ"ŨWÃ˙Ļ_UT5ÛęÉīIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1223“‚¤†IDATH‰ŨĶąNÃ0ĐŗŒęa6Øō |Âŋń¯b`ė/1t„?ˆĄ#fĒ+Į9mĨÛAjĀJ¤ÄOįœ; ‰p žOęÛąĢ#˛úī'5XŠēŠÎ’ԋē‚á7ĀR*ՃéŒ‡ŽøúŽLbu "čšF‰‚ō k”×ŌUÔsF:ĖDĸPBÖ˛x ĨēAë īĒTŋUÛT8P9įŦÎVŗŠ]Ū‘¯k2áŒõ“Ēʡž‘Ô7; ĩ„ŠRõ$)uĒü…Ŧšl°kiâi° ŋ>UÎhŖ‹BƒÎ‹÷ƒ–+{3,ëßuÃâDÛqŽš#˛âf&ė+ĮxŨŌ^’rŨzs0” qŦI“Â×ĮųN÷cŖî•X8AhŠœs=§™\đTŠÜü‰|€ē^p§ĀƒĘĒãūp™@ū •Šé]KĪYņ˛ŦĢt+8Ģ+åjJKŽžKũ˜ÔcbWPדJŋAŋéü;”,wGIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1222ä…!2YIDATH‰íÔAN1 Đ?DÂ,ĒĻ'hŽÁnnF‚zŽDXqH\ Ë,ĸ'ŠęxfĶ ŧĖSl'ã x#~ģæmõ7č ]ũë_Õ˛Š2Qe^Õä9Ž“ŦøĨÂ3ĀžÁ.4õeøˆ9ƒá+0ØŖiĄāŠ˜4Í6‘) ĒË{Ēžā¯UzN.ĸA´ė¨é}˛CÊ>lĒdĻÍŖ+ zŨ2§Ŗ]Ņā›îĩĐ[[ŪÆ(f.ôQ×Ôsļãk*“ã˛üF]{Áؓë:õÖ{rM̤ ܓkZdĶ4’k*›Æv¯ęWG—ãBĪĮm“ޞœfnFWÃ/r JĒ6ËåAšĸ(WŅg~OsVÕ5:ņI†Ä+Z\ĩF”í/%ī§fBŋë+°Ø&`99SDålœõÜ銈ĒÆīŊ÷šĻĄC•Š!ŋyūĘÔéņCõŲŽQ ē}ˇļIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1221}Œpˆ0IDATH‰íĶ1R! ā v´Îpgđ(Á8ÂͤķģĖū†}V’ŧĘÂâ1[ņM˛$•UéĻ7ŊéëO`–]„I8(ƒķޜ0(1Œ´khy´]™ĸl„NŽi×Aņ įĐČuCŨđíŨŌé§o MyéáD_EûŅúĻé8ĩŖĨ"QĨ–nÆ^ĶéēĨiUÔA†"đRЇžM=œËéŧÅyE؛˙my%ˇ´–•\Í,)ŌdŊWëŧg¸Ž3œáFfųub…d{…k*™Ĩ…3šąĩ|qâb¨\ĪHœS9´ž‡ĄRnmĨĢ:äĨd×|Õtļ0‰\%ur˜čéĸ¯ōĀ}ĨĨeĶAtŅaĒ?ZæĮuģâŽgĸXÉËdíú{ũSũĶĨb‹%#“IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1220 ‹@qIDATH‰íÔ1NÄ0Đo\˜)[RŦ0GؒÉ…#pâŽ+p#Š-š‚š)L†q­–xZÖŠ’(O™Œ=〆ĮQúOõeAŸiģ šļĄŠŠFXʲBQ‚!o$Y#tš$#j€ JT$ ÷č‰>+Å 7€ãCĘ ÷@CŖA€ÅŸ*Í;u~­|­§ßÖ:võwyŽ= įĻĄœ•+“jõ{íæú@ô4#Đ,多(iōcÉšŌ‘uĐô”‹ōíwyŨŗĻŦRI{ޝ“ŌP:āļŌi­øÛŠr[ŖfĸōŖĐ҉5”‹“´¨ƒáŒEĶԌŧĨ ‚yĖÄ Œdų8ģ€Ōú:"„KÖũōuž\@ Ãá_˙õéÃĸž„n‰Ô\Ÿž%ōԔ`gzŋ_ķI^Si‚™énŋöD(Ž gúöšĻ Fō<›Œ@H,î|hԃˆmŅÔ*/°fUY‰j\UÕoü cîj0IÖĀjĒœœ‘;AĶjõƟ¤ŌƒÁĻž¤k‡kžŽåEî)Ĩ‘p-jŪĒĒ”ŋõPÔɚ.ÆĸmõëwĨ‹†¯āÚŒMҍE-GŌŗČĄõܑĒ%å6Ųô”wQķ[=ĶŖ¤Q'Í}´#)_;éXÔåŽN{ēĖYî”3ŪEwc}EŅK wneåŊ¯ íŅǃōK _:zjÄĘwžLT=ĩ:R*čĄBŋF/Ԍ_ü÷îëđūXĪ9 q„IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1218/}›ī[IDATH‰íÔąNÃ0āßd0’×ŋ#R^ĨŅ)æÉ0OĀ+¤ĢĢxˆl~§ĒÜ –F,}˛îÎw6ę_ĀU¯zÕßéÄõņ¸Ļ#6õ°Wuō\ŖîuÍŽ‚uļ4 īŠ† 6ŦiÁŽ„DBķ3‰]F}•}˜•[ŠÁ‡ÍIKŋŒ{ Æ‡Ļ‰ZĒÉ#ŠWÔE—°ŒTô'åîî/|2°šF‡>™ pUäŒ~š˛ ļVŠ<į!u­ƒƒĻ™j›zM؜4÷× TsÖ^Ņ/MvRã†>m-5›QÍ*1^Ķŧ,) 0XKĖfÖÔŠ:P“Žžp@f "įG}ŖZļZŅlŠËŗVŠ–÷Ā˛RÕM'5B'tÁæĻĻtBL;ūąMŗÚF¸k˙"ãĻqÖ[āf]yS:ųĀ\ęĮĒ>ɑģ͘šËœ_î—Ssގø¸öāũûûŠę7GŨģŨIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1217ŋ†~1IDATH‰íÔ1nÃ0 Đohđčĩ›zęÉjŊ˜‚Ŋ†r ąŸFÜ&% C§†đb>@&aRND<ôĄ˙U?ģú.rjjuRáe Ļ–A F)~ÂQ+Ép’ĻqЕš€‚†:f1-†V*žđÚŅ7P,•HÕliqŸ7ŊëHÖMįčŗOMM!ĪŲÖųĸŗĄ‚Ē’ú*–F~9…ŗDSO+•ŊĻōŠvĶĐeP­-u›ē{-ĖåQu e.OĒĨĄŅo:54¨. ÅÜQm…šmÕbUŊŠz$5ؚũŠŖ)D-›ĨœĒŽrŽ”đk]8u@CI\\n™¯†*1\[.鍞¯ÕU˙ ķ.a¯ęy9ČĩV˙]ö˜ü™×Į–ß̚nÚæëGG/ąĢīǍ_XčLŒc.IENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1216ČÅļč\IDATH‰íÕ1jÄ0ĐoĐ!jˇXđ5ļ˛öX)ÂJ7ȕÔĨĖÔĨŒ  ą“/;$!ģ !°ÂfĀĪhfdŋ9ŽKčä2G' " ãĒWũ÷úĻëäEžųČļšDĸᅾÕā…ŠôR~j†įķĄ—IŅ_€UŅ(ŋˁšWuOMU“ ;j[ UĶ]Ußj„C˛S/AÔÅ!ÛRUĒ]×@MUą­'¯Īg…Ķ4 aŅĻ‚¯U†ŌŗM_¨“‡›ĩYoũ–ŗ/ÚæŠZÎŧŠ7đŠNgHU§ëC7̧é}ŋĄ—l6T’­Ú­ht[ʖf&U%1GëĘ9įúĒJąë:™Ë‡ļš >›2÷•×2ér?wN[Íp‰]qdˇ+;%  Āír6ēœ“;Ā$e˙~ž§&+†…öÔ fEÔŌv,ccmfĨÛ# _āBŋč{6Ôņgú‡ˇ’‹?"IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1215QĖįR:IDATH‰cø40ŒĘŽĘŽĘŽDY†Á(ûo€d˙ JŲƒRöÍdĐLöĀÉ6 JY†Á(û,×2ņßmßIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1214&Ë×ćIDATH‰ÅÔËmÄ āąâŖK †TāVRI ƒmÉŠ -ĨKš A†—×Éüø˛‡xĨe­Īcv"RŠ^‘ęĩĻ~Y:~Ļ­iBÚC'¨N„žÔŌˇ„4Ô@“F9í];*¨ļŠFęÎ i]‘F _—:žūM$-ā3Xâq’IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1213¸¯BgŅIDATH‰ĩÕMJÅ0ā ëBČօP¯ā^ČĩÄŧ‡W1đbą; ¸°bĖ8išžūLƒ(Ú÷Č×üt2iūĩÂņ…l•GŖ^7ˆ;ŠŖË* O&éy }ÆUIŨ]ĐkËúi@ņzö7UáDģÕķđËᨏEåËßô˛ŦÍīĩ“Lĩž4°šÛ&UĐPT_ŌpYĐO,é~ĮÕ3ífvßß÷ę4: Ėíô™Ŋ”~(ЏčaTP@rlè”ŗô¨ĸæ6v1´ČJŠÛœ’´ŠnöFÔÎ'ÕËYE­iĶôĒĩŌD=eÕH•ĻļRÚIFēÚQ[F1ŠßĐögjļÔJh5ĢôF¤ĘVlŖ"¯^AãAûI?͏Š4n—WfĒ}—ÚĮõŨˇ˜*5ėUđ*ŽB_ҏ }OŗruTŋ÷-Š•QqšúIuĢzĨuXGã&ÆˇëĩĄÛë"VH˙ŊČú°Œ¤@I×MÃŧQW…¸žĸ¤xĨĖčUˇ+ĨJ[ģ-m)'8ĨÍ(Ōų"AŖCŠáz•9{­˜]6WŊ­†Éœ4Ĩ“^ĢOgęÎ pCŗ˛PÍuv úņ›“ĩ™č䃯)ūDŋ˛ōgäĪÁo_ĻlŸ7@ŋIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1212΍rņŸIDATH‰íÕ;N1āYŒä.>ÅÜ_…#P"!áE€+qäŽÖĨ‘,ŋlČÆŗQ!Ä‘œO~wČGÎęÅ˜h–_i\Õ*[.Žeã‚3Ņ]íûĄÂ)åd1ųæ¨KŦŋÃDumX*3ē%ēl˙\G4[mņÄĪÅ=p>'ŌĖ Ûąƌ{áb9ØÖ nĄsäĪ͐Oø_˙’Žsŗ%ؑƒÜwHNĒ×Ŧ9‘á0OT› 9č k2-ßáŦíĩé„–´Ŋ“ÎD-t]5ßi†õŒŅDŨ­9ęLMƒ¤ Š ŸĐ{r“ ZÔôĩú5­ķ2úbO’y€F$e•Ē&۟FUŽU™ũ(ĢâÉĄ-kĐ[ĩĸbBEŠˆ:˛ĮļĪĻŠ}‰Š!ĄIČ:hA'čō¨öšuĶ0ŠšvjÅŗĒCB''Ũ†|oĘJRÜmÕaE]Ā헝œ‡æĄˆŠī84Qę4ߨZ˜uxGĻ}I‰­$,5֚Ÿé$kĸ]ájoXVåi[Ŏ÷ËųŠ6ĩ톄ŧšŖĢūŋųģĒ}K{‰ŸO&6IENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1210!ĻŨLIDATH‰ÕÕËmÄ āą,…Üh Š$¤¤ :I+”2%pä@˜üØÎÆZR"Eڝō‡Ėc` úˇĐR&*§($=‚ÍãD/áīU?orV7Ļ=Íöh˜ž˛>ļŅ(Öî¸YœĐŌÕD WNņĸŲ“-ä2ĄĶĩ&#´'—ÖŽrŋĒĒ‚m÷‰vÕ­FŌeá5~sĨL:¯iŠjúĒōĒÆFņįīØDŨÕ2Ō]‡*ņ[ÃHķĄę׊õŽ›Ļž'Š-Qâí_UK+R7Q?U™`y ¨Ą#MZ°U­_GĒj(6ŧÍ4š´i'ƒPļBĘD˛ŒôĘW<‰ĩ\øš ŠRæ X.R†ˈņŸ÷áäíÎâĘE¤ mąûͰÃ0ËÆDī­ŋGús¨÷CŊž÷~œÕũ§ô׃¨MãQ`"ŋĐæ9ShäǤÕqędEÍˇļ‘SâÖäOZŌ ĨŦŗīmēęäo‘ĀbEȨčĒRˆÕ/ąÅTe­‡ØČĸrrY55­hvE5"N;!+Îö¤VVŨ5îȊ3›Ŋ^‘’´ÚĻ÷J’ļPęe.Y}1҉š-ôĘ&Y“ëę˛jÅô:Y'†zŧ~Ą=uĐēTÄ6#jëjåXĩ\ēFQąŒėk_‘—5…ũė„œĄą+éŌƊ@ō‘fڎ•TÉãs9¯d ' ›šb mąĩ´•v0ÚLD7T?,wCHųcoĖ0WÚUĐrB_ĩ’æÉŦ(:E s­EGû׀?š÷ø[łĻŸŋ‡Øü¯uvÖ}ãÅŋô-ũžŽüzŧŽč`æ5ũ5ÔĮĄ>‰ú*Ž8ÉIņųIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1204?Đæ…CIDATH‰íÔ1NÅ0 `GAdAôč•#02 WnVŋ‰cn‰&2D5ŋûļW'‰ûEŠíØ!é,ĻßĨķŒę_˙”>ŅÅ5uņRh’b+yÉ4O"¯] ‰‚nS#ųHŸLåę:ę¨GÛ¨Ø#!/6nĩulh¨N(N,ĩ­3Kq–.ĢÆš­Í]MĻ"_bię[uĒŅV)ž%QnhЉš†COQå´ å úpŨPšÄû†ĸ-UwŪT-—Ä솖AõvokŅR‘vÆK@ĒīǏ¨æ ×ÃĢ–ĸŒĐGKqōA"46ËÂŲЊ!rkOŌxĒ…hˇ*IŨfŊ"ō •î(Jat]=jžĐ1ļôFUĮĪĮiFĪi& Ą[*:ácՇÅÖuÃÔQ}3’qGöúē~|C“?f€QžŠˇIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1203Ą´s&—IDATH‰íÕŊNÃ0āŗ,á 3v@MƒÉ}”>BĮnņÆKđ0–x‘Cŧ€%WbP}öÂ7´Šžäüsā@c[ķ@jëWÄŽ.|OßøĮˇôŌÕü¯UĪ]ÅŽúœS[éŌ›sCŸ Ī bCŠ ŠŠcÔ˛*nįãA-mwĨ^ezmKŠZŖĘa(Šā*I'= ĩBö.lœ++‚B`¤Ũ`Õq  kU\,z•Ÿ5éĻ–ŪYV%ęHo`3ė†d”Ŧ—š§tøl2/ō¸ĢfA9]RH™é¯§ą^/k4Ŧi_ī3k°Ŧ(TaætĢPARƒKĨęk.ņĸŽVZ‰.*uŨD+ąEķk™‡iīčJķ~Ĩ”–& Ģb­aŒŸ¯Noj?ŌtãÖÍõNŌ¸´Ü‹÷ƒ Ü҇+UŋčqĀ#UÕĐĐgŌdÃÉHũ˟4HN&ĩfÅ=#ôFæŖCąjŪAÚ.ĐsšAÔōŧ&­{c oiøĄĨĶHā:'0 ŊņmrĻ§ËøŋĨø8Ę~ŽšIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1202ÖŗC°pIDATH‰íÔŋJC1đ/ĖfVi|„ŽJ¯ŌGčØAŧ§ô|Ĩˆbœ\/tÉrLnŖæ´8Š4C ü ˙Η€/4ÂU¯úŋÕ]Ō¨dõ=‡Ž=zQᘠ]ĢoœPHgĀĩēå•Ą’‚m4+€M0zÅáÉ ÚØ*û֖Ög”zZ9ŋ6I‹ĘUggUIT*ÚĶŌAÔŧ×ĖMl•Ģb ÜaĪUŸQÚÄĸŌ¨ŽãMžŸj•ŊĢã—}MßÚIZJˆ‡R ęĨu9)?­ĘĸF=Ē”ĢĒĻjÖ˛ÖOg6YCŠP)¯=ÖŨú.ĖŖœŦTâmčä™Õ¨žß‰Ēyčĸ#ū4›ŧrŅmøUŌdĶÔ NķĻÕ GWuĸ—uŦeŅĸ ­Į 3€Ŧ‹H˙ŠŖōŦ1×´ĩäĩDNĶJR]xÚLT ÕmMÖYuØO֎JĪ|FŲÛ- ę;ôŗĩŋõ?˙Zŋû*Ÿē‚EIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1201Oē IDATH‰íÔąmÄ0 @ .”"€Ú×&ŅJŲ@MdMđ`ŠG1$žûDēoLĀvq0AS¤œhpꊧūKīŽ"Ņ(ĻöJ-ŌJēBŨ4I–gPĢ”7ūjƒ:*H U1B(ĒĻ#ˇĪ€Ĩ)Šĸũz`֔kîe\Ž™ĩĖÔjĪãgZ–âGäv(5?Ū…Äڍ†W‘aĢ<Ō>L_ŋŨ€žSšëđtFK7+&[ebíĖ$íō”ė/" ž2 y ´âļΈd¤lÅŧŪ<ī<“ÖäD4u¤p3Ģ;CcåMšiĶÎkāe‚ĸčU6´ÁĄ(õĮō6š’ė°ütĨŽS¨™%väÛˇĨjŧLĒrļÛ­ōIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment12008Ŋ"œRIDATH‰íÔ1N!āy‘ÆHŠ…‘+XÚq- Æx%:K¯@g)%aœ}/ZȰĩ1oŗÉnöÛea˜đÎA8ëY˙¯ö¸§5pķĖīē–ĀÅ0ŋĒZäQęPĩˆąÉĨ˚ ˇÔ›v$)'֗R—“Cü&ô*6•pŌīyå špвæA—ŠĻE9u-3ōw“VzŗÆŽûq.'į˙Õã^Ëé/ĒüSíæ$EāžkĘŠ¸gžņüԔb˛ĩĐ.ëāĘûĖíWŦ/Ü)/ĒáĨyl4Ė:¸ĩĩŊHĐÎßīÛdū6´­›Öę¯õĢŠŸMŊ6õ7ŠvŨuץ?ׂjLņˆIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1194ėTã•6IDATH‰íÔąNÄ0 P‡ aëĘ-ä7Øō+ũ ¤fģĪ"Ā'pŸÄ¤ČÆž‹¸–&ŅQ„ÄpUÚ ¯‰×*Pįō°Mqú3ũEVWŊęĨúÜĶlOsrD¯ MrŦÃqÔ48BCINúqÖ8І"OßãN\Ã/ŲĨ:yēĸĘ3ÅŖr,Yũ(ągk§šĒ´Ô¯ ČΨ˛dļRI6Ô¨9ŗuųŧiČUGyoÎģŠ¤8…ĩú‹øpÅíĒōJ5ŌíRßæ ņnŠīEãĀ+áđĐTŽëqã@}å*Båë -uĸņ Q Ölz*íˇYQwt:´ĩŅĪģ4ļK€×¯ûY”×ÜÃh+]WÔō¨ôÕY]­ëŠz˜j柏-ĀEՎ•+QÔmåø–čå?üŦŸņīP3BēûûIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1193r0v6 IDATH‰ŨÕÍMÃ0đĨĒ/UŨY ÂH€ ‰+t#Öā`Ä>úüį9NÚR?§Nđ.•ōĢŋ8D×ŖöEz xH¤˙Ōāč[ +ĩģŧ+’: č—ãe~:Pƒc¸^[ĒßЏŠzŠQ?Æ'æĻĨ0’úŖv‚ēY­ôØãZ9ˆü‚z44œTQ˙Ž đÉåīdåzgÁVšŠ[ށ_í2í÷…ĩhšĨ3åEą)Ž*TŸÔŽ}UøÕíŖĘk͖öUŸéô\ĶĐ]eëlĪ6ĻÂÃM;Iũ˜/+••Žhŋ¨†ę˛vvY7­Éō=ŠF^̤:Ŗûŧ pŗn…ÍÚöëĸ‚nh-tR>LÔĸōŽJĘŨ×FȈuˆsÅ[ĸŧVIĮ‘“+ÉĸēĒ 0÷›ļŦŧ¯Æ—•Ģ,+gäųš’īĖjyŽ$Mī Īŗ¨xFŦ"÷OYAÃíüŠǁ°IhI¨$ÂjI‘´rÂĘņÄÆŗî¤ÉŪĮ…Z:7bƏ”†kE<Ņ8U#œW“žEĻzIÃ/‡EÅĐou&{Ra@ę.IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment11927F ĶIDATH‰ŨÕ;Ž!āB„Ā’š‚Cg\Åž…ƒ•ēVöZXøŊŅĻ„ˆÚŸîžžŲáa9ŗ\š€éOMķ( 1¤ĖJŸD؉d#[0IQDN^„TĀÃBD6Ũ4Q ‰~áAŪÚ§žíZãíĐģw/ņÔú=kÉ-ZĐūyS6 NíīI¨ũüžõ /r•ŦWš|ŖåüîÚŅŖQģV2P_GįēĪT†*ėDĶw™h ;Ķ´Ėô2íŲNõŖúŸ5ڙ˛iÖ5ŲēZœDZ)žŅģ萛.õ4,ÂļæPüŒ|Tö ŲÅ_ėęšQ¤{„R2Á¯†M‹Ęš4īŠž‹.ĐøAkÆA3YLWõ4bŅA1Ÿöģ<拒ƒ#ÕĶE’…2šĐęzĒįÎJ^õ›ôW2nŠ‚ŗŒÕ4ŲbļbÕîīŽ˜ī’;šq(^ŦÕ°ĢĸԍåIĸŸ)f>Đ 2RTNyj˛,úAũŠ"ĪX×Ē?4ÛŌßũĒ*š‰jdHg÷¯]ė*.”×ĸW꜔]C1a u%Ÿ ÷ŖÂ5‡SÖW‡Cī¸ūZǺCoq`¸sē1ŌPTîÔ č×z‡*y­[}"īËQÅÛīŪ˙ũĢ[ã!ūQ}ĮdÛō ØÁáIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1190ë9'Œ IDATH‰íÔąm!ĐŋYdĻ:ņļâܜܒˇA „ˆīŲģÄöHÖ%nŌ'$f渨„‡>ôĄŌ}Ē•žCČlh‰lž ‘gM‘Åŗ`īp'Mˆ žĄŲZU|…ĖoŽ`›čØē+ĪS•.9œ•ÚJö]†ęÅė¨ēå}ŽDŠ3uîQ~ÚîŅqUÎTÖ:lÕŠnŨÔĄ;/aāuИ¨†*pĸĮUĶD-ø‘›_ZũJ;WJĘJ‡\–šæ*Ũ™ŠC´Û¯Ú|ŽgMO%äpV‘ÎéúŠ ÅM÷"3Ũ5ÍuŗtģŠ~–JՃY؍ŗīÔË4VĮačˇZ+˙…~ôĩbŧ0B­ŠIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1189‹ūŽi}IDATH‰íÔ=NÃ0đŋ„DŽā+02TōU8#’Ãԑ#p,1tä –z–0y<;I7N*!†fôOļŪg@'ž-u{RåúzFTũSí ‘ĸSÕ ŠoÉCQ¨¨įcI-A/Õ*ō’d„\¨ƒJĮ€ hjĘĮ=ĐøŠÚQCã VîÆ& {…Uí…ÕKĨUX;3U¤ĖˆãÍÚ-ÕĨ|}VģŽ`Õu"ĸŖŠō+žN*’ĒēĻJÂŦi꩚:ØÖuŖGÕsũõ>ŠÅuŠnˆßŪ wÕÍUjrTĀ j:d”ž™zSä{¤E­„ĮōČōĨc MĒtVWQ~ûš nxų}Ļ)j#ŗú¤ßōíX)ĪFČw%Õuˆy7j7i¤:(Í´õ Á›Ī…îĄrFŊë^h‘vAđύš"žĢv5}äķäXŊ]Ņ–gcʧÜßŦŧÆûŠzņÂķˎ;Đë…Ŋ„۴dž×ūuō0†˙âû‹šĨūZŖ!>?ƒIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1188üųž˙lIDATH‰íĶ=N!đ?™ #0™kXį*Ár ØĘcėQ¤ķ$ļ”dž–Õ™ļ1Æh¤!Ã/Ėû@g†ÁĐÃôųÛ˛ú×_Ģjąˇ%Ņ+‘ËaÚhˆö4CQ+`O’ė@A¯5°:ä ¨âzŪÄËbô6gV^æíˆĀÔQ;" fÜj(ĒÍNšJįW°Ú‡ŅWJ^’d´ŊīčĖJŦAõ4īíędÎéˆ{ÕU{/ëŠN øĄĢ"4:IŽč§PÔcāS •Ng5īUGM'Øøŗĸ˜âⱙUVŽhÔÕ žâ&iéäSĨší¤ĸRŽëŦę0šŒ?U,õ°ũķ‡ZŨĒč¤fĨé•Ŧ˛ Z+č"ÕkoŨËJšũwÜBž“hÜIÖ[@šK8Yŋ2ÖkV á§P”ī•ožßŦœzhŨrœ•ŒP3DCĶP\0™ĄŖDošk=]ĶwÉ× 53"ĢîIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1187lFƒn8IDATH‰íÔAN!ĐOz #7+xņf¸õP^ƒ‰‰.eŲ‰jŠéVgė‚Yiz!Ë˙’ĻŠĸuVĀŋūŽ~l˛Ē-+ūNŖ/7°+-=q`GĀ,ŲwͅŖ{š E͆Šĸ •ŊRŽ‚ĸ$AGč‚ĻæYŖÃ°o†Š|ž:Zk„KŽŖ>V-ū¤*CņS}MÜqGÉĐ´hđŌiTĩœjŠæ“GSŠ–Æ:´Ž**CKĶYtKy¸4 šôĸž­<\—¨å VÔÃŊâ~mjj¸€VTŪ6˜ŽēØSŸt4ëYŗFK_ģúÂjzšÚúŦ¨†đ^­ĄĀĀ÷ĘI:âPąŠ×Ŧ<#/iÁÕŦ|šk%\˛Ž(HĢNUŊ ‰ŋ<˙Š;4[đœéhŧąĪôcmķå?Ŗ{ēS3¤œp6uIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1186AŗøkIDATH‰ŨÕKnà āŸRÕ]TōĒpŽfz3īēėBNP¤nXPĻŽĨĘ Tj‘Š”å“y 3$ļ¨ˆÂ ôÆ2ķ’fũšaģĒŪ–Ōs‚&EAĶ@Ŗi*_ŧ4/kũņōŽ>ę÷'Éēˇ0TqUˇŌķu#Ÿš3ĐxÕŧ˙F“ å?C‰{ĢiÕ[Š3y.čVWK~âô4ĒŅ Cn"`ŽĮ eõ0:“¤ÆoĘŲŊ0+4?§}WC_=Ē‚Z[ÍßǃrÂŗŧĒ´is‹°†ēßĒęĨŅÄēÖyĄÚcÅ ázúĄĨŲĄÎåXŨĄsFU¤mš€'ŅØ”Cö8ÔvŅŋ*íķ'.’Ú=֒sާ*ÔëÔU?…˛cÛWęëĖo Ą–‘ĨHZ STî$¨cÕQEĩŪˇ'XĒ;ā™ĶFĒŖŌ"O­4’”ĪŠÖ¯poėŊ™ËЧ6 ųŧˇ ¯oéĒĐnĻ_‡sđm~&đvIENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1185‚HâBJIDATH‰ŨĶģM1āåĀ.aA2ĨPbŽJ V" E¤&:ÆÃxīgĪ$—ŽVūäŅė<@ũķHųDŊõ˛>Ņ%ÉJôŠ*ũ};CŸĪxûĒjœTuš&]GMĪŋ×QĶD3ĻĻÕ~XĮĪZŨ͞€ąĢžŦŠFķĀųl:oųjO6ö´đÕĖę’ m΅¯­ ‘õž­FÕm¨ę:Zsæ˙•´ė”s–5Uq5†IķZI/+÷Č ZVmûģSî īua¯Üũp­¨ šíīwd;LbVƐ¤ŲĀX ‚ōl˜E3˙Ŧ¤Ņ]UšŽĸŽu85…b5ĸËUŠĢc˛ (’ō–]āĻÛÁp\‡ÎlظãŠã¯FųĢĻn¯ķēÆ]5aâí<œētrēYÆS:ŌūųĨúNˆBQ* bIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1184õOŌÔ@IDATH‰íÕ;NÄ0ā?ráą-/‚ä‹!؜`ĀQvĐ€+DĸĄÃˆ‚-ĸ cƒ–Dņ ĸ 7‘üœŋ6ZÆŋūuŊĶqvōx1õ^\•T=˜cų[=šúlĒÖ~ŽoĒR\V°ŌW™;ß×Ö=ÁIßVgŅ[>a`ÆV'Įķčíí•JH˜Ōŧ[?(Q)æ4КECeôiĢOĸYÕGŅōštT*bÉ*Qę(j¤4ę$ļĒŖwÕ7•™ĖĒ–ZŗšŽES§ęĖēž€oéĩޞ7ŽvĒŽr ‘•ŊKEs$ îéžĘ Y*yĩËB×hĒVQSghāM)Žįb;(vĩÍ4úÜU œä”:*׊ĪĘĸ^ž˛ĻíėĢ:}ÍqG9‡žÖküX¯Û9į=xĶ~ëŋĖÔwF\f@)†XIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1183k+GwrIDATH‰íÔ1NÄ0ĐoŒ6ˆŊšÂŌm…9@sŽĀU\ q Út)døąWM&nļAˆ¤ˆvŸėˌgÉ\\?˛ú’Õ×#4Õŋ­"īüUęjEîĨGĄjkD -ŒÔvŽÁpaÕüŖœę°¨j`U{jî€õT›¨BŨbYԐÔ_bØ%uÔįG§)÷†ņĢō@ģsŌڄ“Cō풚3­‡jʰĄÖ+§ęQŋ3ŪkÕ¯°ĩ~AYĢÂãɊʈwįĀMĩ¤’Ķ7]ë¤Ķ:˙¨c%5íâÎkåŒöęŖŽxĻ~Q‘´T•GŒbČjĒmŌkŽ=Õŗ¨ŨĐŅgšÚ¸vč÷ŧ֋QQĸûŒ8+ĻQt8‚*ö¤ĸ`Ē(yÃ*;ŦNŠASö“õqN4MËpĢL(T&ƒV™nvßk[ØNų20#†Ëķ)xŠnĻņ*9„2.ķüKF-9×ū*§ō™Uųũú„kŨāo€ŦIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1182,wá IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1181…%&[—IDATH‰íÕŊNÃ0đŋ ’Ų˛v@Ę+0v€šĮb¨j3uä•ü&Xęā ,wiHą#č œTÕí¯ĩã;ĘŨá|ĶŪrŗq†(kōÚágĘoWu^ÔŗŌ3ãGmālnŠĻ‡õI$FåNŒhoä[:F\Ōģ0ÔŅC2ä(Lš6GmšūøČ¯{ŠzÔŧø7†>â@´ŸÚY´ËJî'ôđKãūëwtŋ¨Jr ĻIɁĨhKšĐ§B†.iĪę1ŧŅSQųGđē¤rŧ9ķ$} ãŠrÖæĢšrļKĪÎ`‹‚rō9EÎr•(h¯eĘÎúuEķôē¨Í¨6ÖÕxÛ/¨ŗ}[S¯ą¤ŧ"u ÃŒdNĐFVR4–˙›ŽOuš6ü l]QŅ šųd˜šĒŒŨĸō>„õ]]UEũ¤&t3•LéÕ°˙å­ËŸĒ¨+đ|lM9:˜÷ËnŽÚ]âeA >× VĪwėtK}ŌØc=\˜ē¤\pßâ­—â0SÎ˙íM‚ (ŦäR:lU‰^§ÆŸ¨Īs}_ öģÚg_IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1180ō"ÍÔIDATH‰íÕ1 āŋaĀIVc/bÂāĩLĘ z%āėæĘČĐđ|T‡–R;“˛<’/īņ˜~Prœ¤2ēÛIŒåU°6Ŧ‡TīD‚e•9ŠnĒą8ÂįĘætTÜv–”KXVŠ2ęßx93מF$E&Uj{}#E^ķĪį:ŖKJ´éĻ›núßú(jģB×lõ†Ļ¤ĐuEí >7¯3*äP9˙dNķ¨ëĖdÎ1Äģdßú8ķ[õJ5Fã˛’kJšžŸé „hŌK!ˇnIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1176œŲ¯7 IDATH‰ĨÕÁŠÔ@ājŽ‚< B|„Ŋ b|_eÄ´ėa/ žû&ØÃ}aúæŅA{ØL—w˛3J§]°/™Î7UŠT§âŸ9üŌ´Ô]QÕHmJęëTŸËØTûĄí6Q÷BčM‚<4BĪS}V—Ôm„~Mĩ—ēŊģjYU}ŲKĻvŽžūØâŌûI;ĄWm…bã™oRؘ÷PˎΈĖŧ38Í}g‰Z([RžĶj’5G%šTv2ŅZ“믭öDMÕēb¨Œ~^ŅĄ ú Ē—ēĩ-Ú3ëā'3Ŋ„z8(ætJŗĖPÖ*´˙CСĮfu˜õ ņŖž;6KĶ9ûƒž1ŠęREđdG)P”FĩKõI8ē ĄvŒôiÁCsĢ÷0*ĩžÔm0˜ĒJĩļķ^ÅßA}T“Y…nR›SßŲxŋlšœļϊÚ7}.ÖMÚötē¸.OĒĨîfŠoĻN¨Z%oSŨ5,“­ėJU!ÜV.Õņm4Tšôi˙qÔ!¯^ÆĀ8§XÕæ5PGfĄčîcė°!$îÁ?ပšOT !ųr‡ŽĒ°đTfv÷?×ĨQŠQ9ķF ˇÔTŖö‹ˇ†GújP|m’oømøĘŽkûûŦ Ė׎¤ė^Õ•˙Cŋõ͚†¯–īJšŽšū(ĒKŨįt/˙u‡Ė|ČÅšŪSIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1174r×Î IDATH‰íÔģmÄ0 P:*Trā´B6¸lfRd-uYC#¨TAĄ|ž| ŌŌ¤ą\’I™4ČÎZāÔSOũ“~¸Ú&‘7O3hxŗõ]# §Q9‰ÄUŲPBá āhEÉ]'ĄQ ÁÕ H]_ÂZ”­Aß]Mí'G}j°T–Ā‘Ŗ”Q ’P`´UjŌzi-ĖҤēXˇŅUŋQ˛ žÖĢ­iS~ōĩĖw mwÍļn{ŗ´‹Ÿķž.R/āęM ĀÕĶŠkô5[Ú°ˇ*Šyō—ÖgmW…ŠÚš9JéHīSRÛøÖbdu ÚĒģfCuö7ĩö Í ęÍķ:Ęs†>dŋÖĪN‰‚žŽëßô D€ÛˆEÁIENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1173ėŗ[¸æIDATH‰ÍÕ1ŽÜ Đošpé`ŠŊÄĻ I‘#¤Lą–r€ŊJʔH[¤Ü+M¤)‡ÕËj?˙Û;x§Š4‚'Ėį@*ĸ}Ãˇņ^jœ`Q§œō¤P*UV9íĮéî8Vԍđ4bÂįRU Y_KĻ­ĶŌ3NĻĒ+‡>a[X‰™tRōHŗūĖ4ąjŒ=bœŗQ× Ų´ z¨h?ëˆnŲ…ŠzÖ~G= -u=UTa€QēJåtŲyė]ރ(ũ$#T™Ū˛Ų€$+ ęĸ 2•løL#/L"U‹ę‹eÁDĐq(5’NŦ&ôķ~×ųŧ †@ÚÍ ™âkĮ ąTĘiléĨpvļĘĪ^Ôs;ˇëĸ”ÂÄaæļ;%‰´6n;¸.{^įŲŽ'$WÚTāūāj*ÍA2[W Jt¨j]LˇcU—<$UUēāÛ06Cņ÷ŽĘå;ÕYĶCCĪ|écãÍëû÷´UÚÕ`ūŽfl(W‡ÔĐŗčUW)GovôäQQųvĀĮļÂũ<{U§§ĻF:Oå×l7€Jå—p)ŋ膴Õ}pz=oĨzęĻŪ|ڌÜjøzeښžŧßŅ×ĪT]Ũžš=]˙Âūž-˙ŠūŲū:‚WŋōIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1172›´k.ļIDATH‰ÍÕ=nà āg1°• TōQÜŖô;D…6C–J=R,učØ#”*CĮy(R¯@ ›Ÿū-E>ī=0\6ŲM}ŚUÅĒžWõ­ĸCü'ŅŨŽCUwUũîēēdž˙~æĢļ+ë#*ZTØCIwŋDmčęnrjZÄ'¯+€.QÍ×^¯sę#%ŽŽāĸMTRTŖ*ļT !čåYĒú¨ˇ$͉* ~øÚ€¤ąļŨ¨ ŽíRY¤nĢa›P §÷NM#h•ĄSžÖ+,R;ĶM%“Q5fę ĒÚ>ĒäfLxTzĀž§ģ@|ė(0ŗ  Ę1s6|ˇ„Î’TĨëķzŪ™QˇŗąAûŽÕ™3éĩņęRJUĘ7ĶœŽ%/*Ŧ°Į˛ēÎSų˛ÚT• )Ģ=ŠM2raH(ĮK4v;é^Đ´MUÁīž›YåT šŧ ^%đ’öĐö@ j\Ÿ8i›Q Є¨:,iƒú„ŗˇÛ+™N\ĒÂ%ʲę™ 8kqž.ŖĢΊ;oĶåzlĪķ{rĄw0ŋEųbŲÜíŊ­ęžĒS˜_|5>Ũŗ:1f—nIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1168bzŗq:IDATH‰íÔ=N!đ˙†‚N<€‘+XZläJ–Fđ^‰›Hâļ\#œyžgô1 ÆF[,ėū’ácPOĀīÖ§9Ģũz'čũöŊšš&Au­•)Â7ZT­ˇÛ¯×hVĩPđ€mŠ{¸ĖĄfR€ĖjŅ]5fŊ ĒYfĶWg“­¤yĒÉĨkI)\a}ĖZPūÅJ ījômÖˑwŠĨĢ—& {ĩĶU¤}Ū+H]_ũXĨüžĒ ũqm°ƒ9ģx ˆûĖęŠę뉊#Õë4P“‡Zz?R ԍ”Ēîx¤ņŦ?įdãšÎh”OájWĒŨŨ9Z42RŖ+ĀÉĄ& YxQ•1IUGz.HĀ j8$eūŨĩŸ,E°5ŠV/āŪŪbëí<_ÖÍ7ôķã>ĸ:÷žŸ9IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1165ËĪĖâIDATH‰ŊÔ=n!đ7ɸ°B›b”)r Ģá*9‚`eæ9Bސ#`ĨH™+ mąep‡%Ä˟ųōėō‘.ËhzđāÄh/ö3įÚDņWûĻĻĪС‚žBg™ĖŠ#Äę‘M“Su4˛Ļņ%ŅsT%'RˇYEE\ RDōVÃĸž âVyUĄŗæy4š‘Ŗmo†‚ōĩĐ>¯l”Zģ^hģh9%Ę!§~V}Ē*‰ĸ”ęúõ¸ÜDjJ:EE! ÚŌ'JëģŠÔ]n'WíM'Ļ´ Ģ*s/mĒn×ŪĨÕßõĄĒTœ¤¤r,éEC‹ąŨcیÚMIĻhž×ôš¤KÔCGręP\a#K*Q{‡{b% Đ_%ŊÃŖ5ō7—ÕûyĪ{uļ˔Ņzį˛6Û_tdĩcčwĨAB}GžŦŽ{–‘¯cn¯ôØÂI "Ŝ}˙=WõRÖĐīŸ]ŽRQšĻõ‘]UmUTõcUYĶ ĮŠr5–˙T•˙‡ūoƒÔŋžœ(IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1164kĖ˙ZIDATH‰ÕÔąNÃ0ā?Š„á~ 6ķ&<Š=!Ū*fęØW0 °ē‚!QŽģhã8F0•SZUũęģK|.¨GĨ¯ŋX‹,õ|éŧz&CąÎǃĨ7CáâģŸCl=ū(d×VĀHyā¸öTˇ;}‚j¯Š›¯õ°Ī0ŊĘk`:LN‰ßéšhyõ&ęΕŸēI•ĢR÷ĨaûŠ6§ąK×^7ŋt;ÉYĄ(äģ 7ÆŦō¸—ÔA^s@7*ōĘ=ģÆëĘŅ‚zŽęûE5áJe´¯vĪT&ŗ¨=mruY! •ëYԊˇÔTqéŗjEĩhŨ:hÕōP„QҜ¤ZËæDDq>×G'zš āŠķ|Z,f™+ūĀķĖŨ6|0.ÍD[ŲØēĢø,)Zč‰*§*ūÚōÔ rĪõŦ`%9Æ!ŅUPąČÔN•ú†GŽP:$u9‚¤UŖîc˙_wĮ;aÖM•Íâ@×E]ũ íŸõĨ˜9˙AߋZ5-3UWÔД´/j:‰Ž‹Zėęhô˜ĸ-9'ËĶIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1163õ¨jųžIDATH‰íÕËM$1ā˛,á Z'€h‘´M(„Áē7‚ aBÁD°)´DFs1ÂrņÛŨÍ<\žŨ œļ¤9ØßxüĒō—ˆDĶY>ģb¤­˜Į ÚÅ5ũũĐc“”ī6uN n˛åØ˙đĸƒ#›iKô“ø3ĻY9*Ūĸų:›úE׿¨x/âŦũŌ|wēNOæ@1ņ€õܯŖŸŽYেáÍŦƒ¨9 M„ļí+ô÷)M¸¨rFGú‚OĪ[ ]­ĪÔĄö‚ĸ…nĢkÍ-tOÔ{ǎģ2ˆŦ¤H8t"—DÅ8Ļ[KdZc•˙!Š+štV]iD†RM5ī×Aã%jBÔŠ–=ļ4`3”¨VĩĒ:ĄšÅĻæ5Õįâ ÂĒVíOkōÂiE}uA8įEĩˇ^¸ÁEM0Rn,jƒ u˙ é\žwVfyÍŽ÷EåũŽ*ŸÕß4Ø 7,ßQQœc­iV“ĩūåœ.cQ-č˜+ĨÚ_HŠú@%rĐjŋŠ¨Â—nTĒÎjV‚>ĒĐTMRũ4úģJņ’įE1¸ōæW¯Y~oR~XI—(éÜ~E7'•ŋYßôŲ„Ác¸ƒa’IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1162‚¯Zo!IDATH‰íĶ1n! Đ?ĸ  푸BĘ-ĸĖ•r€•p—+Ĩ$7áĄ$ĮLíJØS§XĘyúŒŧ¯÷ÄĘ"h_īz×ģęÚ"w¯č'ķsq\æmN(=2VU)1QĶŽu‚Ļ„ĩ/ļ6āyĄŠčĄutvÕĐT}~ōMU E×eh‰õÕ·5´íÕéē eK)ŸbuMíw(\ŗ”DŅ}ĩŗH![Jr^|Ŧmꅐ,•’6í^ų]c}ąĩ„æŽtūU̝SÉģn{֗ÕĖŽÅįŠĄ 4á>Ė ũiŽļŌĐĮš]Ņ7Ér ų¤fyhõt6ôIŪŅEÕm•9ÉœmhĀrŦ”Н:Īį÷ŋôāÆœĸŠügũr˙_ˆų<ĘIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1160lĄ;CIDATH‰cø~€40`Ę~¨!ÚČ~˙`SöĮ˙ī?pËū*Ë~Æ& Rļ÷!Y Cb,.{ĀdąûˆYY˛Í4“=>(ũ;Te!€ššá˙0‹$üˆ?üƒËŽ‚á ū?`°˙ĀĀūĖcüUüŠg‡[–v)öÍL•Ĩŋ,‚ÚRž‰ˇ)IENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1159>PĐ$wIDATH‰íÔ;NÄ0āßĖjĄ@¤Ĩ@ä œ_…#pƒ¸ŖÜ+Yĸā–ļ Ä%ŒÍäąh•ą-„´–R$_33F.Ž=_ģlP×\ÕįĻž55˙TãĐŌ OĨūdęÚQ -­Žũ~655ôåĢDĨ)Ī Ú+Š‘ŸŪb •t:ŊÖÄjfåék E¯ø…ē^×ŋ|Ŗ<­5Īę; Rã3̧¨JXģ\Ķ<ëy‚T˙UKĮuwŽĨÔTUÔq“xGm}¤Ē>×kę€ åĨúo*Ē2-íėϤaÖŪSĩ5X#¯`ĒsĮõíVæ7¨é_ žÂŊĐWÖÄûՎ˛Ŧ=— Ģé=I}_´sDQÔ¤?(Į$+–SĮ ¨ ÷ŧčÖ[n/Ķa'úȎ Å37….c‡™^ę×jfĩS‡ę•~,s9ûۂΏÁÁRG1ķ‘ 7š-œHˇ•8ŪĐK]†ÕĮwá|.čŋĪŒ’äAIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1158IWā˛IIDATH‰íÕ;NÄ0ā?J‘SR Â(ˇXÉWâgOF×0ڂ6Ũ­ņ0ļ7ËÃcˆb§p‘OžÄ™_ÅĄGKNŊŅ€\ÍfK)žkCsž(WC-‘J™^Ę#)ÍZ° ĪâķE+xŌ“ū*ĸ}QĮŽčĨ¨`ŨpEYIgÖĄŪLAšx&VüÔ× >é:ĶíAV‚ē˜YÖ]\ŅÙo2å°Ų¨ˇ’NŋÛXũ6ԁŦ&AĒzœÛ ęQW52{ΌŽĒ+ëÜUõž°“Iķ<ęp&œQPįjœWÔÄî[ĐĮ؝Kēß%­H…¤Š6d jŖÂüB‚zhQíĸâŠø`ũ TĐ´ũZÜ+ÖK@áĒĸįŊß´äJI…Ûr éÖšõAå[G3_¨vJ-@Œp™ûZ¯ãŸųŋ걟úŊ ŪÉĩØIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1157Ųčũ#ĄIDATH‰íÕ1NÃ0ĐÉ HžfceDbȕ*âĒCĮŪŽ‚ā$c-j$+Ÿ7iœÚ1cœ*Júäīoį;›b ēvĩŋ‚@5×ũ’ˇpÃՕĀ:ŌÃ÷2§ļĘh×NĨî3Ģ*J~NŸ˛z!p^[(3ĒģĀŗúîĪŗãūëi´Dü˜U+ģz Š’Im96†Yąj‰†ãĢaÎ"5Ī\“mĸo ŌQ_]g P3(Ŋ;âœ-øŦ4ũÕäqΖãé÷k]öēúCWĮēÅ{]Ķõũtƒ‰•ÜzUbF鞍įÛGV´oS:ôžŌ3RĀ_ę×JŅjŽíX—Že”ĩ9Ũ´EFįtíŌZ2¯j|-ŧ.ƒØ *UĐn •ûĮŌé›åí4/ŌúŅ_én%ģĩfLãšP‹cuU¯ģŊē‰îÛNËo\;ÖĘ@߅F +ôB8ኸ¯ŽÁ2})÷Ņ#5đĀ”āvF %¨rjlj cV6Øŋ˛Ļ¯Å ?Áūõɔ–Ş|›=gO¯ŋÔw@‘J‰IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment11557æœ:IDATH‰íÕANÃ0ĐÉģšø  Â×ęĸĒ-qŽdV\#;ļfE$,cW)¨h7•Ā‹(ÎĶXãL&~3t.×xúØĐrxŧO?u˙šæĢĖę_ĪÕgĸŅŊĶŖ¤U ösß|ÕÜķÜMĀ=7ÛBSOEA3zžēxŽĻŖî„Ŧf5OI''­@ŅRŌÂ~=uŋߊģ@×W†MPmU hkĪēxGíRŗžoú ֗u´ØŠČiŊÉ=ŠVŦ ƒ)ˇ˛Ō8ØĻžÖˇÕRĸh.ĐÍJVüŨéĻ;r:QAŪ=”aëM€šdÅŦŌĘŽõŽVáTģԃaƒ­PA>G7[ąË P•īŦŦ|¸v$|WĶ!vĒ­HRŦ/šB/ŠöˇÜĨÜ*nĄŲĐ鸊ŋhŲũ\?¸Té‹Á¨éIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1152Š‚ ŦPIDATH‰íÕ=N!đ˙f‹­” šÂ+-L¸’åĢ„ÄÂcxé,Ŋ/@J Â8ûáĶ};PhŒ1q˛ßŋĀÃ. 1Έv(Ѝ˜ņúņč@ĮČŨ¨sttĒôôqyˇÕMü5UMm•}xnęwZõU-mĩ?õŪ# ˛xĄ+ǧX#*&´¤ \+n%Š›t?xQ1̊C]ŖJĸēŽÂeU5°ZŠƒŦÜŖĒž6õū¨BĢʰh’4Ī ĘRĶĸē˜PW>Í#™­ üīôzjˆT–oœŠÔė9ŋ ÕŦĢyļRëLéĒĘĨŗ0'g=PĐQՔ͍ƒnĒŠkԞZę>/,'=Šē[֚­:ÃķŽĨ=õ5ÕūēĪ Ŋęęv‚fN;|î7‚&& ãüÆē†I7ŗnŅ8nUMčŖđg`ÕŦĒŦ’˙ŪfĮÃā-ŅVĢņkúŽQSZ˙’€?IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1150GŒh€ŖIDATH‰íĪÁ Ã0 Đo\Đ-ÁŖx4ģ›yāŪ V•JŌ8éŠôⓈ/Č;V$ÆXí牸ĐėųF-5‹ē/:\ihš•wZUŖjv4‘Îy§€døâ’ˇŦĘØj(Á‡`Ë(RZĘzâžÜĄÕĒŒ.ũA#(ÃTXI qķWqÔrĄĄKJ6rĻsčRĨë6K}ūŠU׎]ģvũŊž ú}dÆ5ŽIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1146ˇôüôcIDATH‰íÕŊN!đ?’HįļÆõ1ŽãÅ.•÷Z$žž‰…„qØsOoųh,ŧBŠMv>† šÅŋ^ƒš_čaĀI4u0ė_k4#õēŠXÔCSž{ąŽ5MMPÜGOCQgZęaVĩĻŌPt*šĄ+åˆE­I˜kuü™´ P+Ų™28?Ųę™üL dwCŨw5˛Ļ–RŅšĢ$ŠŖš5+:öԉüsļgå§Ķde(X=ÍŦ8×äûˇŠĸéF°Î_úļŅx[t=^/ ‹ŽYlÔßÉ€ØØß“>Ę ģędPą^įĖjĩkcWE˜zjXŸ†Š†æR‰Ö¸ļ&p¤˛RuÎŦSšîÛĒJxÂNÕĢqRE‘WĒVÎJ‚÷Ŋœœ0m•žĄx:‘dCÉsV0ĀA¸šÖr9ž€hUw —´„›ĻŌkų \ی—o\Ũ­{nAô˛]Š~õ Lķ6€wÔIENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1145.ũ­NLIDATH‰íÕKN!ā"Ŋ`É Ä#¸t1I{o/†7áėdA(ĢčˌÚãvbdҝ¯UĸŋŨ–"_Ér}Ĩ'yæI‹˙zWÚי֩&?ŅBĸvĻ}ĒRNÜÖĩŠ~ îĒMÕÉ_P9nšąĻĐ7­ä÷šgŅ´Z §2PĢ(¨IÔ˙ĸBFãŠ/ĶšÚ#­ĸxžĒ…Â;Ō84Īõå@WՔ5{>G `¯4ÔįEüCûĐëÚU4¨ZUw Õ™Ŧ$Ė;ÃĻ‚,Õü`ØļC•ŅõŊvUÉ­„Ū÷ŲŋĒCĒåU-ĐžiĶŲi“Ī2ĻÜ=T7ĩûžÛØøĩ&öíXāfʂbÖf8‰ĸĩŠ6ŠF* ZgYŒĄĪ ĒvåM ȝļ7y?ĘūĨ÷ĄĘšp'Tu|û&š Oôōœ P?‡›‚~õ^…øIENDŽB`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1144YúØIDATH‰ŨÕÁNÃ0 PWA*DޜÖßā€Č> Šá öHüŠ˙d™öÛ-‡(ÆN‡(mÄi"‡u雝f@ˆ›‰`wL†¯æĄEĮڋŽäg ŨNtˆōũî ¸؃ÜčŊc¤c’(;8ĸßphE/‰RWôp”O‰öT"-a¤Yã Ŗh”'čLK՛ßÔCSxēoĒmĒģĘũ'=ëĘEę*AĻŽī\LDŲ”ËRŗŧíIũZ“åŠäKU3 ŋ(Ŧ4Íu\jäíC:ŅpUO†ĶŦ4ąî„Ē’lLžhŦhœ O뎚&õĻ ¯(ü¤¸Õ4‹VŪŅEo Ŋǚšī Ôf7ĸZėicr¯Æ†g“úÔÅŪkŠŸN͞ũˇUÍ\Ž õŒō§ŪNĮ×BË2įŖe Ōbg c­#ŎjZ h¤ jāŦU}ėȗz¨›ø?đ ŋpuĩrėĩĩĖV2ןYyš~kŗ‹?9EĢíõZ÷,¤øĢJIENDŽB`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1143Įž{ÄIDATH‰­ÕKNÃ0Đ1•Ģæä,š Į@)Žē`ɑpÅApÕEˇFl\5˛™ą4‰?Hˆ,Úf^üÉdρĢ;h­íZ vqp¨Ė ŋ ā'‹uk˛í’œîŊV D=YuZ49ĩŋĒiKÚUUEzžjWœš¨éƒÃš¨ēŦÉGm˙¤§âˊ´Oŋz9ŨUÎu_{˜ë"kÅ<ŋĩūoũ~43=øĘÜaO-”Úaįkoc%ts}ˇļŠ€†bítfœORŸ3ŒÕ‘r†ƒZē Š5AíDMĐõiĩT+ƒöIU¨Õ°H†PUZ)$‚B¤ÖĢËō*ĀnŠŠ‹9Ĩ€Žw0 ˛{Fí!ΆWL2&%Ęķ +Ō:Ŗ}•Q Õe­ÁęÔŽœĒ5e#wGō 2dōĢ+›œ  E}đ­KÚX_îsíŧâÔ)mũēX`^ŅX Œ:{‚n]ŧčž ^˜‰÷|æ &9Š7ĐIס,Ž+ę-ŧNĀTJW^kÚuŦŒ{å“'¨ęQÅ —ē’0SėR9Š ĪîR\WS1ŋšFŊčŖSūĐ 77žåIUō´˛Ÿy5]Î~}KūZŪŲ&Ė IENDŽB`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1138 G4kIDATH‰ŨÕANÃ0Đą˛Č2@ø Uä*ƒ"z€^)œ€+Xꂭ%Õõđ´`ƨH‰‘ĩ~NlĪ8 ŅÉŖĻÖOŋøCûGÃÜ3/‰jųžŨ ‘ģ@ûe¸‘F gįøwgė'Z_ąÉžO•IENDŽB`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1130ÖĪOIDATH‰íÔ1NÅ0 ā?D"áO Į`x¨×b@¯A\,ˆk„DbÉÕ¸ícx“…åYúÉŽÕØuÂãĒWŨĸ¨ž&45YŠ˜Zę5Œĸ–‰ X]­ß\všō‚~…ą˛­5Ќ1ŖĘĻVĪÍēŦũ¨K­‹&]tĨ~S›=̆F“#kZ*7ĩ°*Y˙Ũā2ō ŠVbŽ ÉęĨ§tЄZÃĒeŨr#zpė¨˙“†qSūŽoë]S-wuĢĘãJŠĢųF5ēZUËęV-]ҐÎhÕb‹öM͆U˜ŗō¸úS[ŗĮzžW5‹Æ{aSΚt„ |iŠk„ŒŽ—÷˜,iā×[„›!ĪLüpĢÄM='~¤Ŧa—xĄŧü{üÕėîĸ‹ŽNŽ>›ēÔ|kč}}íę{WCWcWsWĨø7ũ]DŗAoIENDŽB`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1129qFãjIDATH‰íÕ1VÄ ā?Ļ “,aKĢåJ–V 6z "ĨW ŗĨ[|Į8ס.K-vĒ$_††I@_‘4i2"j>xÔ|͂Nc?'L9BG鉨ŅŅī€ZĶgZSēčE˙ŋVf過žQ‚ʐ­&Î cíŽ3ŠŌL"`nÕ+ 39ĖSŖ 2s’Åä7h4”éĖ„=œļC%X3Ō >5ΜküMy΋úFËĨEÉëFƒĸ\Ô­ęJ.-ĒúÁŗé!ōj •â4ŌTtvڍU8…ĄéĐ×ō\¯üŠ:ē*ĢZŽĮX'ʸiŊ!´ęĢ&ŪËīuUŖLu‚įjUŅô*Xtâ´ {ęĒznUG}U.ÁVļ{˛žŅDv‡­lwûQ­hûˆ‚ā5ä˙&î:=ȝËtUĩí_^ûjÜwzŸëļ9jûŨ`Ŋ^FÎЃ\ÁŊOŽ-5Į1O5úõĨÁŋûĢĮ8ģ6ë IENDŽB`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1128vu:IDATH‰íÔ1nÄ Џ((iSÅ×H‰+å‘Ėی­ļːr‘Ō¸@LÆfHËā*éLeųŲ30ø`EœzęŠŦ_Š–v}cFč•WĪ\1õšĮ„°Āu*ˇ™gLÛiF(ōR„Īc\z6C]lœŅ)mZm1‘c§Ev%ęĒ1Šr ŧ¸˛iRëĩŒĄúĻʗ›š ŒÔ‰š+*w­ĢNŨøQŠ7)lĘdĩ>ˇzĨgĸ}‚ģfGđĒĨŋkōZúģÆ)ŖĪwWĖ }žw­ŌĮąŽ1ŧcVÕ¯€‡JžJž#ÍS9Đh¤$:g]įU/<Đí]!Uch†Ļrø8û¨S'ķ"ŅmǜŖCĀ `Ŗ’‘$#ú$ĒMč˛ŠĶæęWÕš’Q~Ã+ā폴ŽĖŸ2ÖWÖU]˙¨ßBTœ AĀkIENDŽB`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1127–Škä@IDATH‰íÕ1NÅ0 āŋęĐ1G'!WáÜĀAėEâ t{#A,ĸ'đ:ŧØAB /C—/QģN@|56,ō]pÄ5rks0iĘu)`VĩĀŅÛęšĐHeüROCå›ŪôOôŦé+ķģ4•/@čUē&1ÃI[yU#Ė­÷Žtæ´a˛4„  éô‡úx§FÕ4…S9…÷ÚykTCôÉ‘ą÷)¯ĘņG]§2 tą5ųäˇYWđR°4ōF‘l­UĖ‹ŠrS‰%āĩ+ŅĄ˛é@ŗ¤ÛVY˜ŧŠB)˜ƒ­’.Ēs ­Õ‹*õy6\æŨ[*UXvßáĸŲ×§ų¨¯ËæZÔ7QßwjŊ ­­*ŧŧ‡ŅT‡6čEÕåKŲÖÜĮ@ûŌīû„)õŨy‰ų,?ƛ†˙áŽÕôBÚZjÄųô^IENDŽB`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1126áŽ[rŖIDATH‰íÕ;NÄ0āß Â "ÜĀÜĉ’ɖ8GØŖŦ)ĐvpŌŅҏ°<Ėd—‡Č84t0RŧQžÄNlĪ,ˆ¨öqW0ŧV[1ÃIK›Šđ´}ŽpDÛw-‘ÛąąÆQ¸9ųyĄKžDĘ!žFņ܈‚2ą^úėaÖ+¯hãá“hՔ%Sĩž‰’ÃÍÂöJ6)ōĄŨø×?¨ķ^îiMk:I2Y"ã5MŦÕRÁ¨i„kœ\“ĻA”ķ˜ģ°zĪ>ŗF šfxyYÕ_14SŒ:Ņ7ØfĒŽ<“­Ļu5ŗ~]ã:6ĶV”†&ÅǧģÚŅ ĘsļĻyXęnÖÂ:)š>4ĒÂĪ}oÜYڂV´ ]å/âV4;M7ŧώMĄ-ÔsĮŦ‘ˇîwuÅ>ėU˛aĄų˜W_˛a1Ž(§ØXåsZŽøâ[L^j;;å‹ †×~šÛ+xep\BËAp=āg%ŽģíęäōÉ0˙;Ģšī¤I8×õĐŋŗRU?O•zu+‹đū†ŠrĸtuC÷Ûžnééĩ¯_#žxŧ,sčŌiIENDŽB`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1125x§ Č—IDATH‰íÔMRà đ?GvÆěp­î‚ēđZt<ˆ8]tYÜŅÁ!í^˛q[&3%ųQx<>jÁ0×Ŧ¨•ĖßĖpœ­FuĒ5‡ąÖôE¯ÅCmh|ÜŌ›ž˜VWõ˙PļÜôĻS‰›ęՖ:•bŸ’äÕ¨$"V-ČüwĒQH ‹ŽSO ô‚ë™4rUû Ģ1ÛûÎŗšgdICˇĻŽjķ¤Ž‹B|ŽĒ2šš{ŽâyKģu ßķHĨ—Zņji}­ÔķU¸Pķ[čųž]¨žŖ| =¯RŅUŦ![Ĩiú“Vā2IjH1bĮŦ‚.1‘DāÕõÉËDÉĖīGFéųHåëĄéyČUķûg“Ģ!g›Õ)ǞôEŋEz{Æ=ˇJឈˆ•ų†ŽNŖã´cY5čív€U aW´Í¤,Jáō|Ņ{áÚŧ¨ŗúόûD§{Ū9‡?ˇŲ‘ŪƒŠĒ—wŨ}eëžÔXh)žîg^c7G2éū›iDšÍzJû3§ĶŒ ŪYœÔđFú ĪĒ;÷Œöú÷IENDŽB`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1124 :^ŽIDATH‰íÕMN!đG0˛äô^@éQ!ŖjįäöåqîĢqpuĶīhœ*^ú‘ÖkØPKû‰˜†Žéû„Q…ŗJ4ä0îÍiĐͤ\%ˆ Eˇw ÍMÅįĻž6˙•×bĄ—9ėŖ>RŗÅ éŖĢUPĒėđ=Ö€Â`)Â]Đ\)$ ŨövŌlOU ›¤7čMĻV :V)ęQGÍŠŖ>O ĩĸCē`ĐI—IÕŠúĻŽŋUIį†F&Ũ*ôIã¨īXĢūRŦ5¯ õLģQŠÁ0ŠGõëeģõ ín—ĩĘeÍĸĨIÅŠ4šÜĐ`ŗgŸSoiÍPKę:Rą¤}nĩˆūĄĖč8G˛ /i’…ËôjŌLĒ+ĨϘGčĶn*ĨÛËå(“œ*?,R”ÉúĖ´Kˆ‰ĖXũLUÖwË)>ā[4]azÅÖ/ę ë”ÜiÛCIENDŽB`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1123‘įũ•IDATH‰ÕÕAN!ĐO0Á… [Mįî8ŠžDƕĮčUh\ô’x7,ßĶ6íđacãĪ´ÃđR ŸŌĐ ûšéT œ‰Ú= bĢKLÁTõĨ녚jŨ=ãeː'˛ļĶlėJËģ:>‡]éûņéGēŽECũj/ū“~ūBo7ĢŋR=Ō ģ&tĐUP`YũÆ 2ŽËZ÷ADéĻVwˆoĸ ­fY ×TЍ&^ 3sPąUęĸķîŦ‹œ–Ĩœ­į4>ŠŽĒ§Æ'X U_M;į uE¤™‘":‹žÍFŦJëĩČd2Uõ–^Ė.$U”žŸöwŦ柳vBōŸé&Ņo™Y-Zō”›\U•FͲ§”Č’ŅŽēĄŌeQYI””ö”&ŠyQ5P›thÔ TęiĐdlŗ‘¸—Ą§T˛Á1y.jĀ€9e¤ ¨0nĻVéˆ-u’ũå€]*Ēáūs¨ô.zîatRœæĒâĒ(^Ģ+•øĀ)Ŧŋņ:.tļ;ė+7Ôä)˜yä IENDŽB`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1122æÃŸk\IDATH‰íÔ=NÄ0ā1FJé=𒝞G ¤@ØTc¯âŽc`‰ ¸ôJ–“ÍŲØŪf `)R>%~3‰C¸P–ū ~\ÔÃ÷^“ę_H]ßÔW€T]Hd2ÉR3 T$Qj4ˆu¨T¯á;žŌųšZ¨í¤ëÉl5Žƒ> gœŪĒ?iĻ,l[E&2Ķ8 MDÚĘëĸ­Ņjî7ŅI‹uážĩL5L#ŽŠ´m+÷k‹iŒ ™…G9ĢIß8un*ĸdEKC‡Tyŋŗ*¤ĘˇÁt:5”'*_Ũ¤Üë4Č­&VžâLK3įĩhéW4T"*d ]M%úc’š_éûJŊü–ëĘ{Á„GuĻ8SŋWąĒœŲÂ텭ß+AOÄÕTjiŪŅŨ¨eŋV%ĸۆōžž§š õk5uå' [Ųû‹ĘĪ%ə>p+ķŋĒԗu­3ë#6õģūĪ‹~đĖ?1 1t§IENDŽB`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1121ĘÎŅIDATH‰íÔ1nÄ Đī Å%ˆÖ7 9Jްe:öbÜ W KKIü3öf•Â3”Ic[<afĀā`$œzęŠĢ_d!{8ęęɉ…m9juė˜YmžÕąÁuu…gr,˜Ēĸ ~…c~AQ´Ū5UbSLW])Š˜>ĨheZFÕŗÛ*ųŽÛ—s¨†NÛēĒևF[Gš%ÚVŠ7-uŌČi¨n{ŗ´Í#•Į@ĨŒÍa¨q¤ēoĖˎĪ#•>Žtéf¤ŠĄYįJ´„mÍąš*g#dM×7ŋõ6Úi¯ÛE€pEP¯Ā,úŽhčĶŽÔô‚}”IU‰}†Ü}wÔöX×5Tļ}/Ÿŋ˙÷ũ}Ķj-ũžø'IENDŽB`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1120ÍūG"IDATH‰íÔANÅ āŋ˛Ā7+¸tŖ\Ė<úâÅxy ¯ņ,1!ŒSŪŽ0˜Ũ•tŅä Ķf(h˛VzčĄЉ(šąžķģĄU ÔŊQ",ŊKUQ4*›.č5čĘûÂũRÔę÷šŅtuKÖATÎ&:AAįd‡JM/ÉĻN Ú1Ā_ŖMļË9ļŠā?†š UŽ•ÕMô\2æM9ōgpYŌ•MÖK5ĨT˙^ķ4rÚr֒†YE\đL1S~fĘc)kŅŦb˛Šu˙Ļɖ‰ōG'ʃ#ësx4q ēÍđÄ]*šĒĩSž&|55€WĀīĩ/€b= îoЖŦwŦũ_åĻ™ĢŌfĀqV_[öŽĶ˛ËtW¯¸ūQŋĨQ*ą9m€IENDŽB`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1118-;%ļ(IDATH‰íÔ;NÄ0āßJá2”tžBJ*r%J*âŽ+pö(9‚‘,Ã&Z'žYƒÄĢY–ĸOĪxbƒÃã‡õõú{Y]ôĸĒFŅ—åÃRÄ(u&J#%K3œTžæ‘ž,Đ 1e¸KūĘ õ˜Âĸ&uBqÔ›ģÜRģ/iUZ"ķJŠkŖ‰ČÍģj@Ô|TĶŅÂô t6Xôĩm˙¨_ —ĸāæČIENDŽB`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1111Tį?IDATH‰ÍÕANÃ0ĐYąĄ7 AÂWá&IW qŗb‰%6Žäx˜¤%¤õdZ*áMœ<ÍxĮhÚļwÔâ7š4íœU4CЏĄJÕsŠ5Ņ‘o(˜rÜĖĪ6ܡ䍆䎍¨ Í0ũ•5a2@€õ¸Rĩ*4Lt6ķü¸Ä)=lÂJŦŲķ€mCŽTŠ5ŋÂAŊŦų"ũ¤NQ¯jP3wįT…a}PZ\Ëõ=­ß5ŖQ4@‹ eæm2Ŗ–5Ÿ­â|GuԌ %Ã*ĸÜûûmâ€Ü5Gʡ€iGA9â¨vē>ÎĖ)1¯~ëd ŖAPsUũ&N3ŽxŲ//߯lû+­4Í7ũ)<{OqĄĒNĒU4`ņĮžÉI{RU}WõUØ)?Í­5õēZMų ŊX7¤)ũũG?•–%7vIENDŽB`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1109C'$a]IDATH‰ÕÔÍNÄ đ!˜räęÁl_Äl_Å1‚zđč#ÉÍ×ĀxØãâ­F˙íŽģÛō‘¨ņ‹¤!åW&Ķ ÅqÜĮÜДĶÕL×ÕŊųņÃúümú•ŦūŗžūĨŦîĒ*ĒĘņÜTõǍ×Û/ōzc((ΔVągELĢĸ–Ņ’JtˆgT$ uS}Ä â‘ Äąœh †MĘc"j§ú°W D˛ =ĶÕPi bŽé`¯kíųŅ\ŸđÂŖõ´!žü¯įCĄ\įNDF7ÕTÕvîX++•TÕīTčǚZdakʋj ŦĒTü#ĶõMMŨ§9 ]Ģŗ°MQ['úeEe VļQ+Wa6‚:Tœ:Éũ^ũâÔIģ`ŊH"û’K%pÔĄt&įŠŪj 1/ô2éÁQQBBV“ĸywOT§÷ÆVŅøīË͜IšĄ‡Ņ¨™ûęÖˇ/˜ŦŒŽM5ŋĻo7Ŋ.ŗf&IENDŽB`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1107¤Ÿ f7IDATH‰íÔ=N!ā![PO€7á*ĝ×"ą°ô ĶŲRb\‡õũd ĢoMlœbŗđe† 4ˆŋŽ’–ú˜ũ(ˇ uOW{ôy¨;r_d}ßęę_Īād-zyą­ĸ›új.ôĢ™|ЧË\ä˛ú¤ĢuųŖFšaJĮuWĘSUuĩL„@\ļĢiĒŖŦ˜FÃĸÉÄ;‹ļQ¨ęĢ:QŅâ­C×ĶøĨžŖŧnŪČ}ÛŗâüĒ7=Yƒ.YŪ”j9Ē!uŊōŽ÷Ս5°ÎZčYÔsnhŪR#÷œMēJã–Úd°Ŗô EÖ(ĢIVVŽ{Ĩ›4w&Šâ[ÖW>Žü[đ=-`"Ā}UÛ*ßkÖ¨'žU\ÔEɡĨ¨O3*ĘVĐ 'ZÅJ5‘¨ ü@;ņgú \ÜUöãíä“IENDŽB`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1102ÔõũéļIDATH‰­ÕMjŨ0đŋâ€˛ĒˇŲŠĮH A×*j­r.CĐ+¨ôdņĒx:ō{1ą4”dļy?4úžîDĀG5ûž&Į<ęėxąœÍúUk‚c˛ōšļŅnÁĀ>ÃhJĸōJ€ĸžh€‹ėZ[+ßãŦh„Ëĸ€Õ4•Q‰~ŗÁ_ëßā8ÚYt7áU_¤A˛ŲäŠūščŌĶa\Ģ?ÃŖ(­åpwVTŊSEKŋ$ã ?ZŠŽeÔŋ3šÕāM™tE!:Šj“MāÔî>‡iUĮA×1–ĖŗŽŠ¨á0jzŠgŨMˇÖe7ä÷ũŽ;ŧŋV•ŌĐĶh{:YYĢĸdIö—|­O(ëL~ˇXĢʏ¯ŗė~ē–SgZäzŨy@Ž×Myč:c‹Zį÷úŊÖ#Iŋœĩ™/­:6‰ˇj&Ãõ*é'™*”Ēr‰´ß‚JÛøzēønÛžöûĨēFī4™_ũ‘ž¸lÅķa[ŠHJmßôĄ§œ{ú*Š•û{ š’v7Uoč9rųöPå_#šžF¨TæŊæŽĘyŊ:ÎĖņĢÕęÆ[TCūŧķüšúƝė$"¯ÚĪIENDŽB`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1101MüŦSæIDATH‰íÔ= 1ā [¤Ė ÜŖėŅ’Åx¯˛âE Ûĩ‹ōL´ąx™E4å|dōoĘ ō×ŋū‚f]ŊÚYW­sņHŽčØ#KĶR3HâĸpMQėLuƒ`0¯:ŽåF‡AU?&á/ 7ÅĖ5LØ!rEÕŠĩwQC9š­cQvnršF]í§4-j÷úŪüŪë?Įj~J=Qw× M/MtÄš­~#S[SV“b‰–bžĻŒh¤ÆĶ6´éJ´ÛjcieH ęƒØō`­Ķīq}ßôžéĀqĨ›ĘIENDŽB`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1100:ûœÅ*IDATH‰íÔANÅ ĐAŒ,9GáJųwåߌāæbܰ;BÛT-&Eix)xūõˇéķPŸ†šũHiŦĶH_†˙=ƟÕZËŗbÆV <“å ƒk4[›š4GÅĩÁ‘Ŧĩ;‚Í`zÎ6Ũ鮒IN5š×ŦÔlĐ_ÚųĸįTUãtm5yÎļ,†ŽĨMcī[Í:° X•ÅžĒą*ÆŠŖ†ĩ¨ņ† ›Ū|ĻņŖ>2Ī}}x§ <Ö}FuÃÕ°›^ŽYÕ@ŗWPǝYĒ?IíĒFԒsŨądĸ åxÕTuĪøM#¨ āCļ˛BpádË’ôT4‚KJÔsQ”W-7C†V“ t[i"A™īëƒĘ°ÂČË9ŧˆĘ’Jņƒú ›q`Ŗõm–IENDŽB`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1097tŸØ_IDATH‰ÍÕ1nÄ ĐAHĄ Gā 9AØ(—J V9HŽ2]ŽA—) b2X›]īz Å*ʎd7O0ȞoQĻmÁr Ģ:ĒPÍNÕ]ĄķÍTõ_)Mûę&ÔĪ´]Ąķ9Õ kđ#Tœ¤<. \õWQ›$åųÎ QĢĨ>4YBpéžëæĖÜpQ§ėÂĨÖøb1ŧĄO‚‚jbˆ$U]qG[­`šj:>Ņ~Ŗ„‹%%i1M7ÅúÎųÕ7ÚšFjžiė܆ڃ0PÍIØ'cå'‰^ŌūŽĻĒēÆĄ i]4û‘’j*ģHCÕɝBļîKąęt§( š5á+PÖL-ö°–Ķ=Ōļƒ¨\ãܯ~Öįę)žž+/¤‹:ę'_CëßôŽË<8Ō™ƒIENDŽB`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRl/.Ņĸ pHYsb&2 tEXtComment1094행ĸ'IDAT(‘uŌÁM!āIäbdŽŒX‚˜ĨKØ „hI$6‚øŽČ<°Ãއå4_āÍ~Ā—QK6Q×ŋJDeéTΕ>đÅ:›uõėzŊØķ^åąvë!ũÚHûîŧ8*IENDŽB`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1088ũ;ôČGIDATH‰íÔ;n!āAĶeRēã&Ų+E¤eO’+Á7 Ũˆ °ÖÆ1ãRĨ1í'Đ?˛s<ÜõŽwU5Îđ– ņFҎJ€0Z°Ō”ĀfM3J— Lךë“\œĻčT=P˜ÉĨA[œđŠAĒ˛ĒžtFÍ]m“ĻōޞHWåeaĶô˜hLÕę5bZf+ĒZšē%Y]­˜ˆ†zĩ*D°Ŧ÷šĒ_§ ŖRîŠúŒē2PŲS,ĘĢ–UëËJEtNŎõlŌ”ģ“M¨tãŦķ1™šwäsë˛Ļĸ+5LÖü‹JāŽšĻzæŽæS$Mû>ûÖ ĩ^ņŲúiIŠæG#ūMÛÜPÛēËT߁Ú^ÍēlZ/ēö̈~7ՅÚvęgĒĒŧ-ãP•ö#ŨŌvÜŽ^ŸĶ/&yV͌DIENDŽB`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1102ÔõũéGIDATH‰íÔ;n!āAĶeRēã&Ų+E¤eO’+Á7 Ũˆ °ÖÆ1ãRĨ1í'Đ?˛s<ÜõŽwU5Îđ– ņFҎJ€0Z°Ō”ĀfM3J— Lךë“\œĻčT=P˜ÉĨA[œđŠAĒ˛ĒžtFÍ]m“ĻōޞHWåeaĶô˜hLÕę5bZf+ĒZšē%Y]­˜ˆ†zĩ*D°Ŧ÷šĒ_§ ŖRîŠúŒē2PŲS,ĘĢ–UëËJEtNŎõlŌ”ģ“M¨tãŦķ1™šwäsë˛Ļĸ+5LÖü‹JāŽšĻzæŽæS$Mû>ûÖ ĩ^ņŲúiIŠæG#ūMÛÜPÛēËT߁Ú^ÍēlZ/ēö̈~7ՅÚvęgĒĒŧ-ãP•ö#ŨŌvÜŽ^ŸĶ/&yV͌DIENDŽB`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1087m„éYTIDATH‰íÔ;NÄ0āß1ÂÍ _)AäZTĜ€#pw{ ÜŅZP` ËÃXbW!™Y!(vJŌ$ķ°A‹xŖīđcm/Ī'´îŸNe^ĮYĪú?´9Ē0šĖqĄmZØH SD͖"Fķ&s%ІĪŧ¨yĻ`pXd>FœŖˆúŠŽ÷ļZÜl+Š˜*pkë’ÕĻk×KVŌâēÂišw–•ģšVnRöygęāëVÛA¯^Ē7ûr;GEĶKĀSE{ŖFœŖˆúŠŽ÷ļZÜl+Š˜*pkë’ÕĻk×KVŌâēÂišw–•ģšVnRöygęāëVÛA¯^Ē7ûr;GEĶKĀSE{ŖŧĀzT\./¨‰¯:bbu‚ÚŌúW÷ÕrƒwÔU¸ ›--SøĘ~ŧQ›×,ØËĪKÍn¤›ąŅĪĄ~ uų Z‡>í™W?kIENDŽB`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1099“'õ/IDATH‰íÔ1nÄ ĐĪē ‰– DâéČQrŒ+An†”äĄK—ˆŲÁn˛öĀ&Ú2Kgžh0îz×ĸ_7č÷ī˙ûF‘TSULT­š2\ĸŦ÷Ęs3ė U°×Ęs &AeAۊY …'ŽŦûŦZäp:Šk›ĸāp”’&Uü,ī¨)E/íˇ,¸”˛VE‹J‘Y'BŧĸéíE.ŦđŅū]ķĒ#}ė¨Y#}n*Üē5ōKGלįŽļjÔĄŌûč¨SÉ|Mųôķ@+’ƒ[—\÷NĸĒč ÚZeŠ­Ļf>ŧĀzT\./¨‰¯:bbu‚ÚŌúW÷ÕrƒwÔU¸ ›--SøĘ~ŧQ›×,ØËĪKÍn¤›ąŅĪĄ~ uų Z‡>í™W?kIENDŽB`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1084ô¸ãPIDATH‰íÔ;nÃ0 āŸp-Et"î2fķUrŒ ¤ŪŖwŠ€Ŋ†ļŽÕčA0CšŒˆV™Z-2đAS$Ááņ¯7é÷ zŋ[ũÍ=O¤k`ކG¸Z?˜1°'N2UúĘ–č+•ĶF˜ pĻR™ē tޞH”F ‡ĻÄHēæ=tqƒ#ąĢ5XŒč ņ hīŸMz@Voå‡+'O•ōÛ¯Ž  •NKuŠâ*e]ŨĒæËaRk-…–Ę ×TíÎtĨjŅ 9—5¯éĻŠÖˇvļ>­Ŋ‘ŧooZúT2'¯åÆž‹Ģę÷$[įdŅĐcG^˛ŊĢTļ [ė€- Š•Híæ:˛•Žč¤ŽŽs…jJĸRĄƒVû4˙jIŽAĶqVųr•†ō6ÄNÎ`mm!oÔn…¤Ų¤ÅŽ e~/î|,:an*6õĢŠõ¸ŖžEzīx°¯wTIENDŽB`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1098ä ʼnPIDATH‰íÔ;nÃ0 āŸp-Et"î2fķUrŒ ¤ŪŖwŠ€Ŋ†ļŽÕčA0CšŒˆV™Z-2đAS$Ááņ¯7é÷ zŋ[ũÍ=O¤k`ކG¸Z?˜1°'N2UúĘ–č+•ĶF˜ pĻR™ē tޞH”F ‡ĻÄHēæ=tqƒ#ąĢ5XŒč ņ hīŸMz@Voå‡+'O•ōÛ¯Ž  •NKuŠâ*e]ŨĒæËaRk-…–Ę ×TíÎtĨjŅ 9—5¯éĻŠÖˇvļ>­Ŋ‘ŧooZúT2'¯åÆž‹Ģę÷$[įdŅĐcG^˛ŊĢTļ [ė€- Š•Híæ:˛•Žč¤ŽŽs…jJĸRĄƒVû4˙jIŽAĶqVųr•†ō6ÄNÎ`mm!oÔn…¤Ų¤ÅŽ e~/î|,:an*6õĢŠõ¸ŖžEzīx°¯wTIENDŽB`‚ pix[185]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1083jé-@BIDATH‰íĶ1nÄ Џ°LŗZ|€(ÎRψäĢä)ˇ)ã(aēPXĖŽ­‘H™f‘ėÂΆ1ĖFÄCúĐVW§+1'Ī]cāh9aĶtG¨0 l­&„¨Āšą6 /øßҞŠĘĖäâ͑\ŖL>ŊųâPlŖœ×üęËlöVųÔŕÉTŖėÆšļŧØ2YV‡ÂĐHņ1иXYDĶ@āŠŖ1ĐõTôõŊĢyøíĄS{ Q9äžNruĒ™j“¨#ûę‹MĐ÷YĒZwKCŨÃHšs‚!ĒuŽtŨvęWíô¤„¤8­c§Cã‹ĨŲ(Ũ.ųČŸH3¨Q‰Ļü($hW%GĸĻĀHBŸ‡ēAI¨ĖŧCšJöqįhäŅÖčwZ9;É97zŒŽ;] ô#ũ5ūMīΊ•#ŲĐnIENDŽB`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1097tŸØBIDATH‰íĶ1nÄ Џ°LŗZ|€(ÎRψäĢä)ˇ)ã(aēPXĖŽ­‘H™f‘ėÂΆ1ĖFÄCúĐVW§+1'Ī]cāh9aĶtG¨0 l­&„¨Āšą6 /øßҞŠĘĖäâ͑\ŖL>ŊųâPlŖœ×üęËlöVųÔŕÉTŖėÆšļŧØ2YV‡ÂĐHņ1иXYDĶ@āŠŖ1ĐõTôõŊĢyøíĄS{ Q9äžNruĒ™j“¨#ûę‹MĐ÷YĒZwKCŨÃHšs‚!ĒuŽtŨvęWíô¤„¤8­c§Cã‹ĨŲ(Ũ.ųČŸH3¨Q‰Ļü($hW%GĸĻĀHBŸ‡ēAI¨ĖŧCšJöqįhäŅÖčwZ9;É97zŒŽ;] ô#ũ5ūMīΊ•#ŲĐnIENDŽB`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1082îÖIIDATH‰íÕ=nà đ?ĸ[ÜDáĸrą¨ŠĮčU¸IŲēRua ŧ<×rc °Ēv ÂúÉz€ šÆ;}ņü9./ãT ß<@ÃŨõŽwíęšĢIR†ij"  ˆĄÖȤøŲ¨Zƒ%' 0žĨ°QDĐîQVęa ĢLÚQ)ĖŌg•5¨­ĘŸ†ŦÅ­āĨĻ!œ†ŌTŽ›tMYš°V;/D^xÎK5ķ…ՀũXĒ^¨āËFÔ|W¨$×:—;ž¨h=VßĢ ˇôB[Zé“TŅbņIENDŽB`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1096˜čŽIIDATH‰íÕ=nà đ?ĸ[ÜDáĸrą¨ŠĮčU¸IŲēRua ŧ<×rc °Ēv ÂúÉz€ šÆ;}ņü9./ãT ß<@ÃŨõŽwíęšĢIR†ij"  ˆĄÖȤøŲ¨Zƒ%' 0žĨ°QDĐîQVęa ĢLÚQ)ĖŌg•5¨­ĘŸ†ŦÅ­āĨĻ!œ†ŌTŽ›tMYš°V;/D^xÎK5ķ…ՀũXĒ^¨āËFÔ|W¨$×:—;ž¨h=VßĢ ˇôB[Zé“TŅbņIENDŽB`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1081„įLl[IDATH‰íÔMND! āYrn"sŦ؁ĮrGâÂkpI\ČŠíŧy“÷S^Œ ãbēäK ”ĀE´€Ģˆ°R<Ō—Ī#ũ8ĖŨÆ]īú§Z‡ Žø›ž¯°%u7}[˜Â &/u‘[ č•ÎŅQČ D­øôIŌĖęR`õ[­`iÁFŒ'ŸD…ŗ‰˜N!‡­ÖÆ ˜vĩbUM“*AiįÎĸ¸S*a×]‘žâķNąØÆę€ *TãĸDZVT vY RĄ4v3ŌLÚŦ¤•´ĐÎG XŨ†ąŌ͇2ÔH+k!…GđŲ j.âH5kšZcŋ3+f'kũEm×Ü_¨ĄÎĄ3g?PEJ÷ĩ~ÍÚh„âV¯šÔíŠę$Ĩ:ÆŗĻCA5EÃ]'hååž‚ Š%Ĩc”í”qĸë4÷Š Ôc™o¸Ûš.v§šÆKRt¸Ž÷{Oú -Ô7e CčIENDŽB`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1095š‘š4[IDATH‰íÔMND! āYrn"sŦ؁ĮrGâÂkpI\ČŠíŧy“÷S^Œ ãbēäK ”ĀE´€Ģˆ°R<Ō—Ī#ũ8ĖŨÆ]īú§Z‡ Žø›ž¯°%u7}[˜Â &/u‘[ č•ÎŅQČ D­øôIŌĖęR`õ[­`iÁFŒ'ŸD…ŗ‰˜N!‡­ÖÆ ˜vĩbUM“*AiįÎĸ¸S*a×]‘žâķNąØÆę€ *TãĸDZVT vY RĄ4v3ŌLÚŦ¤•´ĐÎG XŨ†ąŌ͇2ÔH+k!…GđŲ j.âH5kšZcŋ3+f'kũEm×Ü_¨ĄÎĄ3g?PEJ÷ĩ~ÍÚh„âV¯šÔíŠę$Ĩ:ÆŗĻCA5EÃ]'hååž‚ Š%Ĩc”í”qĸë4÷Š Ôc™o¸Ûš.v§šÆKRt¸Ž÷{Oú -Ô7e CčIENDŽB`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1080ķā|úŸIDATH‰íÔ1n!Đ!¤2šÁæ.]e¯’#¤taĸ>†¯‚”‹pœŠHˆÉg׎ėÛ&EF˛dxB,03´WĖi`æ¸O/2P ‰á?Kû2,ʙƒÄÄx˚į°ô\ ķÎĪĘeéņŦŠŖšUG4žGy䛀õΝ€ÆĄ‡E“YŌ…ø×ũ Z*î­Ą΂3iNÔP”™ˆâ —ÂēŌ4M¨ŸëųZĶ<íī&›ęHûÁ˛pēĨvŖŊqYú†*ļ;åŒĪ*TšĄ”ĨãSRąÚ—b‘ĨåΤRãDŗšSŧ4¤[ÅU ėÛÔŦ˛„Ž.tÖÕvAŊĸp/:j= tRĶUéŠõF“RžęW€âÄ6NZŨäˇĘžž^ĸˇ ŊŽ=u“ĘΞö‰žuĒ5NJfAqMîqAŲw4O õ7Įr“E×]Kš‹nZˇqQŋUąÎö-r2IœhÛČöø€/Nʎvר”ˆŒ°ĐåÆëCģ֎72§hŠĐRŠuÖAAC(ĨX÷˛!!kŧŦ4aˇˆ‘5|)Áũ*Kž‰_ëĸ_ˇ šîIENDŽB`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1094행ĸŸIDATH‰íÔ1n!Đ!¤2šÁæ.]e¯’#¤taĸ>†¯‚”‹pœŠHˆÉg׎ėÛ&EF˛dxB,03´WĖi`æ¸O/2P ‰á?Kû2,ʙƒÄÄx˚į°ô\ ķÎĪĘeéņŦŠŖšUG4žGy䛀õΝ€ÆĄ‡E“YŌ…ø×ũ Z*î­Ą΂3iNÔP”™ˆâ —ÂēŌ4M¨ŸëųZĶ<íī&›ęHûÁ˛pēĨvŖŊqYú†*ļ;åŒĪ*TšĄ”ĨãSRąÚ—b‘ĨåΤRãDŗšSŧ4¤[ÅU ėÛÔŦ˛„Ž.tÖÕvAŊĸp/:j= tRĶUéŠõF“RžęW€âÄ6NZŨäˇĘžž^ĸˇ ŊŽ=u“ĘΞö‰žuĒ5NJfAqMîqAŲw4O õ7Įr“E×]Kš‹nZˇqQŋUąÎö-r2IœhÛČöø€/Nʎvר”ˆŒ°ĐåÆëCģ֎72§hŠĐRŠuÖAAC(ĨX÷˛!!kŧŦ4aˇˆ‘5|)Áũ*Kž‰_ëĸ_ˇ šîIENDŽB`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1079 ¤Ø‘zIDATH‰åÕ=N!ā!XÉL¸ˆ Å#Xžbč<Æģ žDŒ ąÂ8ŧ]Ís°0¯rš-žđ7ð€-Â2N_1lúō}›ę+ĢuĒčW}Ÿ*§ęĻ:ŸųrzœĒ›ijš˜Î×Ä˙ЏŊ>Ÿ+~ė#ĸĀŠÕ*‰\I-b;ÍØĸĀ:ûšVÔî&^ŠŪk!  ƒõŧ*ôˇ*¸ĀÍ|ŌĨéÂŽĢĒô•]ŋg…bU͜ˇĸô..†Õ*PxĘ@%Švĸ‰jhiJ™*D_eb4Ę Ļ }6VÍ'ĩæmŦĖLž7 ’]7ĨH&˛JU‚8Ø4T —ˇįĻ.8+Æß´°J{˜S}°ŦVjŌ{3TZ÷ŽĶü­:sŲ@Q$84—+ē7YyQ÷yĻîą>ëp%ĸ f¯­Ē­Š‚Ō[F‰ ŨēÄܜĻÔŨ tŪ~žģuImÛ^FM†öė ×ļ¨ëEŽŽÕŸqAũFč/ũ§ŒIENDŽB`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1093sōzIDATH‰åÕ=N!ā!XÉL¸ˆ Å#Xžbč<Æģ žDŒ ąÂ8ŧ]Ís°0¯rš-žđ7ð€-Â2N_1lúō}›ę+ĢuĒčW}Ÿ*§ęĻ:ŸųrzœĒ›ijš˜Î×Ä˙ЏŊ>Ÿ+~ė#ĸĀŠÕ*‰\I-b;ÍØĸĀ:ûšVÔî&^ŠŪk!  ƒõŧ*ôˇ*¸ĀÍ|ŌĨéÂŽĢĒô•]ŋg…bU͜ˇĸô..†Õ*PxĘ@%Švĸ‰jhiJ™*D_eb4Ę Ļ }6VÍ'ĩæmŦĖLž7 ’]7ĨH&˛JU‚8Ø4T —ˇįĻ.8+Æß´°J{˜S}°ŦVjŌ{3TZ÷ŽĶü­:sŲ@Q$84—+ē7YyQ÷yĻîą>ëp%ĸ f¯­Ē­Š‚Ō[F‰ ŨēÄܜĻÔŨ tŪ~žģuImÛ^FM†öė ×ļ¨ëEŽŽÕŸqAũFč/ũ§ŒIENDŽB`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1078zŖčÉIDATH‰­ÕKNä0āĘX"ėŧeŅ"ėf;KHš Gč lÄæJ–æ ã#Vn)¸øŨG—3‚ž’z“¯]厉™–ã`Š!ŗšļžYjĨÍaII•ĻĸĢĖɄž9ŽŗŽkÍÃEW•Œ!4đC­˜I%B1§k}â‰čŦfG’Fĸ}ī5ÛËJcĮáŨktÚîĖZ‰8 t3@IKęŗÆŦëĖč,ģŅBuĒ•Š+: jŗēDMĻĘFŠžĢY;7„ļb&E%ļœuôr]Œx‡ļ(ŪĐk"mI‰jfí¤ē'튊ģMEŸ/đ3’ŽYsˆmĄĘ7™ûU7+„PßĶ”ĩÔõ2¯„0“6/OŌåsĨu{võ*pŪ“X<¨ÎŅQƒŠJ:eč•l¤ &qž×ĸ‚ÔgqĘîŠQî騹^…tŌŧsĸ°¯ ˇØ¸ūŌ0Hú˜Oiŋ|ųŦ˜ŦO—ÛGÍ{ܛ–Ö!ęaS_ÎĐ`ļôuS—øīzøŊĨAmf>GŸĪĐōtVúŋŠVڅr-,–\‘,í—˙Îmqg˙´ãtõ ÷žáĩžNŅՇ¤ëēŽÜ4ĸ ņ}—rŅŦvRoIENDŽB`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1092õ,—ÉIDATH‰­ÕKNä0āĘX"ėŧeŅ"ėf;KHš Gč lÄæJ–æ ã#Vn)¸øŨG—3‚ž’z“¯]厉™–ã`Š!ŗšļžYjĨÍaII•ĻĸĢĖɄž9ŽŗŽkÍÃEW•Œ!4đC­˜I%B1§k}â‰čŦfG’Fĸ}ī5ÛËJcĮáŨktÚîĖZ‰8 t3@IKęŗÆŦëĖč,ģŅBuĒ•Š+: jŗēDMĻĘFŠžĢY;7„ļb&E%ļœuôr]Œx‡ļ(ŪĐk"mI‰jfí¤ē'튊ģMEŸ/đ3’ŽYsˆmĄĘ7™ûU7+„PßĶ”ĩÔõ2¯„0“6/OŌåsĨu{võ*pŪ“X<¨ÎŅQƒŠJ:eč•l¤ &qž×ĸ‚ÔgqĘîŠQî騹^…tŌŧsĸ°¯ ˇØ¸ūŌ0Hú˜Oiŋ|ųŦ˜ŦO—ÛGÍ{ܛ–Ö!ęaS_ÎĐ`ļôuS—øīzøŊĨAmf>GŸĪĐōtVúŋŠVڅr-,–\‘,í—˙Îmqg˙´ãtõ ÷žáĩžNŅՇ¤ëēŽÜ4ĸ ņ}—rŅŦvRoIENDŽB`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1077ęõ–TIDATH‰íÔ;n! P# §ãs-ĸåZ[D=IŽ‚”‹ å¤C Â1lŠėÚL—Oą43â  áŽŋ /˙rUwũ3}%JNW¤ĀRŗRRßĀPŠ€ÜŊUÖČSÜhcÍā Ø4Mā˛ëNÕ'ˁēɨi똸ÍTĄcUĻÛĄļIå†X‹Ēm¨Iĩ[Eš“5?-õœ|zÆĨfÉ­4fēírg,į=ĩssBŨĐĘúQEœŋi~XĢáƒÜd$ŨåŋĀę5ÅšŖP0,Æ&ßi5s<ŽiåĒĻōČäGō.4VĢ:‚ĪZyIF*~éŅīéŖÛ̓ޜ“&úrĀ•Z֓–9é<4ąĒ•Ļ NØD$ëSE>…ŠÕ+ēhļĻŖ~Át7ÃĐYûŧi'´MõiĻÆĩvŸ}å #JAčüÂĖĮ;ŠzÕ~P?riJË9Æg…IENDŽB`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1091ü}-TIDATH‰íÔ;n! P# §ãs-ĸåZ[D=IŽ‚”‹ å¤C Â1lŠėÚL—Oą43â  áŽŋ /˙rUwũ3}%JNW¤ĀRŗRRßĀPŠ€ÜŊUÖČSÜhcÍā Ø4Mā˛ëNÕ'ˁēɨi똸ÍTĄcUĻÛĄļIå†X‹Ēm¨Iĩ[Eš“5?-õœ|zÆĨfÉ­4fēírg,į=ĩssBŨĐĘúQEœŋi~XĢáƒÜd$ŨåŋĀę5ÅšŖP0,Æ&ßi5s<ŽiåĒĻōČäGō.4VĢ:‚ĪZyIF*~éŅīéŖÛ̓ޜ“&úrĀ•Z֓–9é<4ąĒ•Ļ NØD$ëSE>…ŠÕ+ēhļĻŖ~Át7ÃĐYûŧi'´MõiĻÆĩvŸ}å #JAčüÂĖĮ;ŠzÕ~P?riJË9Æg…IENDŽB`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1076ÅdIDATH‰íÔ1N!ā1Á„ ņ–fÆcY-t–^‰Îr¯Ā()ĪĮÄÄuyŦ‰[Øė4“Ė7ĖA0haX#Tŧ¤.ŪĒrUR†ų~ĸÅÂ#šāŽĩÂ6U (ŧ¸8(΍ŠÚ.ŲA‹­ē^uĩ3åÉpiYÖö›.ˆSU¸c˙[LS*I5įM#t^ĮÕøRîQŖŠfî aފ[ŊNŋÜÕOĢ7„dEāÕĘzĻ|ų$eŌmúŠŨAÉĮÚxĨ׊'ËĪTQ\7ÖĪĒXŸIkUMíú¤›ÔŖžÖG#húÖ*iĶĨ×ü ĮäVĶSĮš;Ö ėT6¸™éŌwYĮąû‰Ÿ&ĘĘc]€á\P>7$åÉŦ kéīšÚÆ{ę›PČUp*Ļ˙vō`Ū đ‹ 4ŽIENDŽB`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1090ęûMģdIDATH‰íÔ1N!ā1Á„ ņ–fÆcY-t–^‰Îr¯Ā()ĪĮÄÄuyŦ‰[Øė4“Ė7ĖA0haX#Tŧ¤.ŪĒrUR†ų~ĸÅÂ#šāŽĩÂ6U (ŧ¸8(΍ŠÚ.ŲA‹­ē^uĩ3åÉpiYÖö›.ˆSU¸c˙[LS*I5įM#t^ĮÕøRîQŖŠfî aފ[ŊNŋÜÕOĢ7„dEāÕĘzĻ|ų$eŌmúŠŨAÉĮÚxĨ׊'ËĪTQ\7ÖĪĒXŸIkUMíú¤›ÔŖžÖG#húÖ*iĶĨ×ü ĮäVĶSĮš;Ö ėT6¸™éŌwYĮąû‰Ÿ&ĘĘc]€á\P>7$åÉŦ kéīšÚÆ{ę›PČUp*Ļ˙vō`Ū đ‹ 4ŽIENDŽB`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1075”ē>IDATH‰íÔ1n!Đļ  MúÍ1\D&GÉRē° ]Žnā+pJ¤ ÆÃŽdÅņ€ĨHQR˜j5O; ŗË€>¨ģ<úv×Ĩe¨Ų ÕūVUw•5YĸwAD ‘TS+PT§5đųEĢĻ›J‚r,aN@Át•šr,ÂDƒ íđ¨ƒ ›žĻāēękĶmg_OŠÕÆkĨxÖ,(ĮyŽĘ–hmjŧë(īD-‹žpŸûúÚTø‚Ģžu•3ú]OõYĨ}åĖšËZ•؍UĖ}Ēõ­‹F3P—dÕ7T”n) ‚wšWĩQIDATH‰íÔ1n!Đļ  MúÍ1\D&GÉRē° ]Žnā+pJ¤ ÆÃŽdÅņ€ĨHQR˜j5O; ŗË€>¨ģ<úv×Ĩe¨Ų ÕūVUw•5YĸwAD ‘TS+PT§5đųEĢĻ›J‚r,aN@Át•šr,ÂDƒ íđ¨ƒ ›žĻāēękĶmg_OŠÕÆkĨxÖ,(ĮyŽĘ–hmjŧë(īD-‹žpŸûúÚTø‚Ģžu•3ú]OõYĨ}åĖšËZ•؍UĖ}Ēõ­‹F3P—dÕ7T”n) ‚wšWĩQô¯•tm‹åŠĀy›ĩNÄžc˜5ûņœā:ܤģF¸;i‘‚ĀfĒ­ E}79P#]C§|ąŠ3JŨĐlyęãüĪCëĐ’˛ĸPŨUˇ´MZ†ž¨S:PßNFôŽ•wZ|sh6JĨîŽī+•Nū¤åHüąZQŦÔ-4Âb]ąŌg€j’9Ö'Ę …í+u|¤uWyĄôyėoˇ_ëør}•“ŖĒ̝Ž?´šrļl4-QēœĪ4â'ͰŌÅ4Ō]2({”=6EGBå\ÜŽ’{Ũŗ/‹žĩŒā™æ„î3H‚Ę]šÆhžųS˛ęUũˇūßû¤°DĒ_ÎÞIENDŽB`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1088ũ;ôČ6IDATH‰íÔAj!Đ/ânÜfâ5˛ÆŖĩš™GņîâBŦ”=°Úd3ޚ~ŌՖ~Á‹ņЇ>ô¯•tm‹åŠĀy›ĩNÄžc˜5ûņœā:ܤģF¸;i‘‚ĀfĒ­ E}79P#]C§|ąŠ3JŨĐlyęãüĪCëĐ’˛ĸPŨUˇ´MZ†ž¨S:PßNFôŽ•wZ|sh6JĨîŽī+•Nū¤åHüąZQŦÔ-4Âb]ąŌg€j’9Ö'Ę …í+u|¤uWyĄôyėoˇ_ëør}•“ŖĒ̝Ž?´šrļl4-QēœĪ4â'ͰŌÅ4Ō]2({”=6EGBå\ÜŽ’{Ũŗ/‹žĩŒā™æ„î3H‚Ę]šÆhžųS˛ęUũˇūßû¤°DĒ_ÎÞIENDŽB`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1073íq1=IDATH‰íÔAjÄ0 ĐīęMÁŊ/Rđĩf14† WōQ|„,ŊpĨʓb9]”ÂPšUĖCąe)<˙ú•~ ŋwĒ;ĶwNn¤ Āqi…Q•Œ,đ (ęš`=kZlœ€šĶâdĶĻ‹ĄS4õM}î´Āʛ[Õīuiz˛ “Ãĸ*Ē.ę´/z´4åP4%C–ŦϜ$Œ`ĢMĄØ>_QIëP}qy¨FŽ,{UkĶv#]†š}vyŦAjÔį[oZ€>öĒi>Öz q&<(§—ąōĨБԎJmĄT˙KŽ†!JļīIQПŠā:õũŧQ“B¯Ō7ĢĒFšV;-ĸįĢr§>=7%e2Ô-Iŗ‹ Ÿ*­ĒNræäU]ä—â}°ĒÛ¨:ÚϞ?Uāˇīe>īõ8D(`ûĖIENDŽB`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1087m„éY=IDATH‰íÔAjÄ0 ĐīęMÁŊ/Rđĩf14† WōQ|„,ŊpĨʓb9]”ÂPšUĖCąe)<˙ú•~ ŋwĒ;ĶwNn¤ Āqi…Q•Œ,đ (ęš`=kZlœ€šĶâdĶĻ‹ĄS4õM}î´Āʛ[Õīuiz˛ “Ãĸ*Ē.ę´/z´4åP4%C–ŦϜ$Œ`ĢMĄØ>_QIëP}qy¨FŽ,{UkĶv#]†š}vyŦAjÔį[oZ€>öĒi>Öz q&<(§—ąōĨБԎJmĄT˙KŽ†!JļīIQПŠā:õũŧQ“B¯Ō7ĢĒFšV;-ĸįĢr§>=7%e2Ô-Iŗ‹ Ÿ*­ĒNræäU]ä—â}°ĒÛ¨:ÚϞ?Uāˇīe>īõ8D(`ûĖIENDŽB`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1072švhIDATH‰íÕMJÅ0đ)˛r‡š‰s3›‡ ¯•x…€Č2‹ņ_Q0Ķ؈¸1›öņkÚÉ|đHŒ•č_ílicéáLEŠN2.ŠbÉ~:)QUÜá ¯*Ņt`ģŽĐŽíßĩ­NmD‹JâîęÃTNûĸ™ģo×\ŨķĒ…4 Wöš†v‰ÃŸë=4īUĶû=÷ ëŊã3+oÎSŊTÎQÕrhPNt("öZ6EƕLš‘ņĩ S‘KšĸKÖ ~i7t3÷:čéw‡;5ˆšH=/tžérĻĄy´ĸ …ƒÜ(yži…"×ĒÖ%ІnŠž´pŅ5ˇxĒD~ļTŽęwįx&"€5æáŖ›Žįũ\’Šq­BBŨnšĩu'i›ĒV+Ŗ%yvŨĢĻ5Î7ōWME1ú&–Ę/ęŗŠÎŌá-íļSãÔ~ķfęį˜éʆSÅÖĪaøŗįw$ü?ž0 Ņ)IENDŽB`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1086ƒŲĪhIDATH‰íÕMJÅ0đ)˛r‡š‰s3›‡ ¯•x…€Č2‹ņ_Q0Ķ؈¸1›öņkÚÉ|đHŒ•č_ílicéáLEŠN2.ŠbÉ~:)QUÜá ¯*Ņt`ģŽĐŽíßĩ­NmD‹JâîęÃTNûĸ™ģo×\ŨķĒ…4 Wöš†v‰ÃŸë=4īUĶû=÷ ëŊã3+oÎSŊTÎQÕrhPNt("öZ6EƕLš‘ņĩ S‘KšĸKÖ ~i7t3÷:čéw‡;5ˆšH=/tžérĻĄy´ĸ …ƒÜ(yži…"×ĒÖ%ІnŠž´pŅ5ˇxĒD~ļTŽęwįx&"€5æáŖ›Žįũ\’Šq­BBŨnšĩu'i›ĒV+Ŗ%yvŨĢĻ5Î7ōWME1ú&–Ę/ęŗŠÎŌá-íļSãÔ~ķfęį˜éʆSÅÖĪaøŗįw$ü?ž0 Ņ)IENDŽB`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1071PŖ|IDATH‰åĶąjÃ0ā3ÔĄ 5CÁŅ5p/C†Ž}„ŧŠB ¯ ĐĄĢB†Ē ęzJBpđI…´ĨCƒ->K˛dũŋV&€Ū wڕFOé ÷k€Ķ­”ÚŊ#=€3zŋR×jü†ž7ußÔ]SˇMŨü€n%|{jęķI_DĨæŧ˙Bw€:QsĪ͒ QŖĘœAŌdÉwUHŽãˆéAš7 ?ŗI ‡k€đĄ&X•_˜„ŠVõ€Y‡9fÔô õÍ:Î1Ą!3Ņ ˜Lša´&O•Ļ>Íl´kŪ˛‰zŒ}ēąÁŽ“¤–õ–/Eå™Év­Ļ|ōŖ•4åôI1 ¯eIejQš/īĸ—ô8˛jĒžˆ¤ Q=kf]֕˙ĀJÔ22MęJ†˛¤á GMí“ }MũAŊáŦIʧ."k¨¨‰čǚM@ßËęJRlE=gZšĸŌWåË#%-ëЕŒ‚rĄn4æĨÖhjZ*ۖNëĪô4Ģ<’IENDŽB`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1085ƒŠˆu|IDATH‰åĶąjÃ0ā3ÔĄ 5CÁŅ5p/C†Ž}„ŧŠB ¯ ĐĄĢB†Ē ęzJBpđI…´ĨCƒ->K˛dũŋV&€Ū wڕFOé ÷k€Ķ­”ÚŊ#=€3zŋR×jü†ž7ußÔ]SˇMŨü€n%|{jęķI_DĨæŧ˙Bw€:QsĪ͒ QŖĘœAŌdÉwUHŽãˆéAš7 ?ŗI ‡k€đĄ&X•_˜„ŠVõ€Y‡9fÔô õÍ:Î1Ą!3Ņ ˜Lša´&O•Ļ>Íl´kŪ˛‰zŒ}ēąÁŽ“¤–õ–/Eå™Év­Ļ|ōŖ•4åôI1 ¯eIejQš/īĸ—ô8˛jĒžˆ¤ Q=kf]֕˙ĀJÔ22MęJ†˛¤á GMí“ }MũAŊáŦIʧ."k¨¨‰čǚM@ßËęJRlE=gZšĸŌWåË#%-ëЕŒ‚rĄn4æĨÖhjZ*ۖNëĪô4Ģ<’IENDŽB`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1070tx`5ĻIDATH‰ÍÔ;nã0ā!T°äx‘`ĩ'[‰Pár .Ü,ā#,‘-R†é€áŸĄâ–ø(ØidÍgB| ‡( ų@}g€q“‡ĶēSˆ˜pÜŠ°úŒ¨Ŗæü\T)áUÔO)—^æÖ\ŠūĒ/éīÃHĪĀ›¸ŋ<“ōã„JŦznj5ž]_˙ŸY=6õ_SíĐÔžĨsSŠųŨ¯¨ZtKŖlîŗ¨č{Ne âã×^=ß GCŽOéöXVKũš¸ŋUž4$Iįc%õ3ĢąšzÉÕI;—+_cwĮ* ]ŋ×ČjŠ&*_ÔrJzĘNģ SĐšb”XĐp(*Ÿ‰9@úēū†j(xÆZUŧ+QE.G”­7iĮk =ĢŽŠoëā„S •žĒnp*ȆęēZ8?Š<¯OĒMĒęjXËs6<Ō 4T ČPÜ+Ã'HŦå\°DBėjj’VÎhÆÄ úŠsMë钎…Ę ŦÃĒs~÷#׋û!“Úŧo°JO*õĄ×ķ^ã´Qî kÃĪÄwíéīMWqہÛ•â úØÔãørō7 ;Ų“IENDŽB`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1084ô¸ãĻIDATH‰ÍÔ;nã0ā!T°äx‘`ĩ'[‰Pár .Ü,ā#,‘-R†é€áŸĄâ–ø(ØidÍgB| ‡( ų@}g€q“‡ĶēSˆ˜pÜŠ°úŒ¨Ŗæü\T)áUÔO)—^æÖ\ŠūĒ/éīÃHĪĀ›¸ŋ<“ōã„JŦznj5ž]_˙ŸY=6õ_SíĐÔžĨsSŠųŨ¯¨ZtKŖlîŗ¨č{Ne âã×^=ß GCŽOéöXVKũš¸ŋUž4$Iįc%õ3ĢąšzÉÕI;—+_cwĮ* ]ŋ×ČjŠ&*_ÔrJzĘNģ SĐšb”XĐp(*Ÿ‰9@úēū†j(xÆZUŧ+QE.G”­7iĮk =ĢŽŠoëā„S •žĒnp*ȆęēZ8?Š<¯OĒMĒęjXËs6<Ō 4T ČPÜ+Ã'HŦå\°DBėjj’VÎhÆÄ úŠsMë钎…Ę ŦÃĒs~÷#׋û!“Úŧo°JO*õĄ×ķ^ã´Qî kÃĪÄwíéīMWqہÛ•â úØÔãørō7 ;Ų“IENDŽB`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1069ŋéĐ9IDATH‰íÔŊmÅ āŗ(čÂlVIĻHyŧæ­2AV Žq9°Ÿ™ƒ*éŒ,ųãOÜĐĸx¸ôŌK˙Tŋ—ųÁZVO6XIPÍjĸ•ëe×pŒ~Ō *ązP’ϧÕJĘķ&{›iŠÎ' „yŠiˆ˜PTĪ›^øĩŅû¨7 ›*i¯ēžR =QbũXčDŨúēH-Ôą>ĸ$hÕÛRgZ =āˇâĄ–ÕĖúf[U\ŠNBvMļšĸ$hÕÛRgZ =āˇâĄ–ÕĖúf[U\ŠNBvMļšjpÃ/6‚!Âwč‰ãQĸdų=ÜM:Á=Ŋ‰ėú3BøÆzŖhŽ'üĘŨQ hūl*Pp¨"˛æŽŌO/ú<ķ—4ā&)VÕ6IҘÁC劗qôLMhh› õÍmU%ŋąŽOõHˇô/5üyÛŋÉęsFm-ĄĄą‡-–Šâ%×vŅÆß2°*|mūV+k„GÖ zŅ2ô–5ƒÛÂĢ‚Ŧ™÷žâ‚6UΜsrqQGĶxÖhXũĸŲĸÁĪmriÕ2ÔU›EuhÚŲUˇŅĘęYŊŦļBņ5Y 5TX$ĩC3ļšĩuŽĻjŠ}[oõ;7]WácĒX×õŠW´Ÿ"ģžQc¯Š,į|Qy6ލпŠūü}k,ʇuÚ¨ƒ ŖęėNSĪxjZ´€AÍšSxTÅ ’ŪBęARĐ5}Y•×ÜGđYSĄęęTĶ/Ū°(×i‚Ā#*ŌúōĒfE•OŠ68øŧjĄ|ö%ž„m&ÕdŊÄŧ^ÆėšĄĢ97IENDŽB`‚ pix[218]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1081„įLlÄIDATH‰ĩÕMn! `#ĒGOâUč1ē WɲË*ĐäJô&ôtĮÂÁ1W%ÂĖ‹úãÅh4Ÿ` Øĩ‡÷>jpÃ/6‚!Âwč‰ãQĸdų=ÜM:Á=Ŋ‰ėú3BøÆzŖhŽ'üĘŨQ hūl*Pp¨"˛æŽŌO/ú<ķ—4ā&)VÕ6IҘÁC劗qôLMhh› õÍmU%ŋąŽOõHˇô/5üyÛŋÉęsFm-ĄĄą‡-–Šâ%×vŅÆß2°*|mūV+k„GÖ zŅ2ô–5ƒÛÂĢ‚Ŧ™÷žâ‚6UΜsrqQGĶxÖhXũĸŲĸÁĪmriÕ2ÔU›EuhÚŲUˇŅĘęYŊŦļBņ5Y 5TX$ĩC3ļšĩuŽĻjŠ}[oõ;7]WácĒX×õŠW´Ÿ"ģžQc¯Š,į|Qy6ލпŠūü}k,ʇuÚ¨ƒ ŖęėNSĪxjZ´€AÍšSxTÅ ’ŪBęARĐ5}Y•×ÜGđYSĄęęTĶ/Ū°(×i‚Ā#*ŌúōĒfE•OŠ68øŧjĄ|ö%ž„m&ÕdŊÄŧ^ÆėšĄĢ97IENDŽB`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1066„ôA`IDATH‰íÔAj!Đ2BjéŧBN/Ɔ,˛Ėr•†\¤wYFČÆ€ąōĩ™a&–ŗÎb„h_—hYÕ$m$'ÚXHžéMo*5HļēžČF„_õU ÉJ ƒV'š "?hv’(ėę]ËzčŖĸ™OzāU}`č“Kƒ&(eĻw<đeŦ)֊ĒĨ띓š *ÄÕÖö—šÅ~^jrM]…5ũøĢę īąCޚ öÄã‰zŦ^ĘnĖÆI=’:æ9ŨwMm›Ėú™nPåöĄÜ4BãL×(Ո˛įŖžę[ )šęЉä¯éĻ+cb‰šb7„{Ā īįúvRĶÔČŗkĢ)FĒŊϏŒņöģZ¨Zu­ŽJW"EëÚlP÷ŠnŊ”ĄhpĨ(ŌTąÚĶ]U_ēuÕŨÃĖtŖ€D%åģ]…„‚BØ÷qîŧCŅ%{AũŒ*_2Œ˙ķžĐ_T]=Åį†ÛãIENDŽB`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1080ķā|ú`IDATH‰íÔAj!Đ2BjéŧBN/Ɔ,˛Ėr•†\¤wYFČÆ€ąōĩ™a&–ŗÎb„h_—hYÕ$m$'ÚXHžéMo*5HļēžČF„_õU ÉJ ƒV'š "?hv’(ėę]ËzčŖĸ™OzāU}`č“Kƒ&(eĻw<đeŦ)֊ĒĨ띓š *ÄÕÖö—šÅ~^jrM]…5ũøĢę īąCޚ öÄã‰zŦ^ĘnĖÆI=’:æ9ŨwMm›Ėú™nPåöĄÜ4BãL×(Ո˛įŖžę[ )šęЉä¯éĻ+cb‰šb7„{Ā īįúvRĶÔČŗkĢ)FĒŊϏŒņöģZ¨Zu­ŽJW"EëÚlP÷ŠnŊ”ĄhpĨ(ŌTąÚĶ]U_ēuÕŨÃĖtŖ€D%åģ]…„‚BØ÷qîŧCŅ%{AũŒ*_2Œ˙ķžĐ_T]=Åį†ÛãIENDŽB`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1065 ĨûQIDATH‰íÔ;NÄ0āßJ‘r8žÆˆ\lEŧڂcp• ŽáāŌ…ņ0ãMöĄØAĸBQėOžø1đFsø×ũë:lĒmëKU“Œ}pDWÕHœÁ˜Öę‰FÕܯÕØ °ą[+HÂǍë}léŽ}j¨ÛwĶžŽ1r÷ʎkęÚėot(Ī@lØESen l4hĮŠr'í[jEÉ16´“okĸŸk´ MßkØŌ1 Ķ(ę7u7”íĢęN*é9+ÍZöë¸h”ä+šéķJąč=pÔqË5%#_rC‹&ępwĩ*Q#ĨÄQ×<¨tžÕŧĘķܲ_˜ŗúŗÆŗĘË{yšíųVíåŗR^R I4Ŧ3VÔN;Õ¤^Sôš¨­Š‡ætMŖÄ“ę>é*˛ød¸čjUÚäÚøųĄrûÚĖuįˇũŸgũÔ,KÚ6ō•IENDŽB`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1079 ¤Ø‘QIDATH‰íÔ;NÄ0āßJ‘r8žÆˆ\lEŧڂcp• ŽáāŌ…ņ0ãMöĄØAĸBQėOžø1đFsø×ũë:lĒmëKU“Œ}pDWÕHœÁ˜Öę‰FÕܯÕØ °ą[+HÂǍë}léŽ}j¨ÛwĶžŽ1r÷ʎkęÚėot(Ī@lØESen l4hĮŠr'í[jEÉ16´“okĸŸk´ MßkØŌ1 Ķ(ę7u7”íĢęN*é9+ÍZöë¸h”ä+šéķJąč=pÔqË5%#_rC‹&ępwĩ*Q#ĨÄQ×<¨tžÕŧĘķܲ_˜ŗúŗÆŗĘË{yšíųVíåŗR^R I4Ŧ3VÔN;Õ¤^Sôš¨­Š‡ætMŖÄ“ę>é*˛ød¸čjUÚäÚøųĄrûÚĖuįˇũŸgũÔ,KÚ6ō•IENDŽB`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1064j•m.IDATH‰íÔËmÄ ā!Hˑ(…VŌ ”F)”Āq"!ȏ­3f••Vņ!s3`^3ÔG|t1"ÉíWVz™^sŋ˙zQ5˛6?(“ĩē^Z¨?kq¸i˛“2šž( zŌBŸžˆŠI3”Ū´Ūsā Ē@UÕQššiļĒ+ļ)ĩ’Ģšîč’'íyčÍ4]\ö’šzŗÍœ(›úfĢÍ#*9>UŦ:°[(Ž;ÉZŠÂõ­4‡•ϐÂBûJãBu‡?Ģm­zĨuĄuč}Í_¯oW†ōĐŧ)˙RÍŽ^RÃĻčžqKÂ1Ō~ĶYĮ‹ĩÅ GEZã)oęĸ Hžä ÅJYFČs|ܔÅü%Ü?QĖP7ØbŸseØzčQyÍUeDs{ĢõϟcæK{č‘'IENDŽB`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1078zŖč.IDATH‰íÔËmÄ ā!Hˑ(…VŌ ”F)”Āq"!ȏ­3f••Vņ!s3`^3ÔG|t1"ÉíWVz™^sŋ˙zQ5˛6?(“ĩē^Z¨?kq¸i˛“2šž( zŌBŸžˆŠI3”Ū´Ūsā Ē@UÕQššiļĒ+ļ)ĩ’Ģšîč’'íyčÍ4]\ö’šzŗÍœ(›úfĢÍ#*9>UŦ:°[(Ž;ÉZŠÂõ­4‡•ϐÂBûJãBu‡?Ģm­zĨuĄuč}Í_¯oW†ōĐŧ)˙RÍŽ^RÃĻčžqKÂ1Ō~ĶYĮ‹ĩÅ GEZã)oęĸ Hžä ÅJYFČs|ܔÅü%Ü?QĖP7ØbŸseØzčQyÍUeDs{ĢõϟcæK{č‘'IENDŽB`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1063ôjÎ_IDATH‰íÔ;N1 PG‘Hƒ6íV¤äæ(’iBEɸJ:ŽA$ ÚP‰(ÆÉ~ĐŽ3Ķņ)vKyã™ØV´đx8éIWŸÕ.iũ1%üŊĒH؁Ŗ×f¤¨Š€%@Š)e0í…cÍüIJ 3hĄąëAĨąVÖŦj X!:§âM€E%į‹č…V“,ÔĻ“¨(`6yĨČú)Ė+ÁŒÚ|ļ¤6ŠBŖKŦĖK ŽæfՌ“kĒųË}H8RĩÕj5n}ĶŦēVŪuMŖÜamWÉvŖŠâ1ÂFIĒŪëq'“ĢĶ35•ŊjÚ"܌rãNoázA§—`į•2Ģ•ŧė*wåų{™ģ×wōŽ>ĨöŅčx9¨×cŲh0˛Ūēk1á\æ€ÚĮjà“ŧ6õą˛Ę3¸S>¤ƒķËJ-N ŒĐxôÆņžßĸ"z¤ë÷ԟŨ“_3ļBeīīÁIENDŽB`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1077ęõ–_IDATH‰íÔ;N1 PG‘Hƒ6íV¤äæ(’iBEɸJ:ŽA$ ÚP‰(ÆÉ~ĐŽ3Ķņ)vKyã™ØV´đx8éIWŸÕ.iũ1%üŊĒH؁Ŗ×f¤¨Š€%@Š)e0í…cÍüIJ 3hĄąëAĨąVÖŦj X!:§âM€E%į‹č…V“,ÔĻ“¨(`6yĨČú)Ė+ÁŒÚ|ļ¤6ŠBŖKŦĖK ŽæfՌ“kĒųË}H8RĩÕj5n}ĶŦēVŪuMŖÜamWÉvŖŠâ1ÂFIĒŪëq'“ĢĶ35•ŊjÚ"܌rãNoázA§—`į•2Ģ•ŧė*wåų{™ģ×wōŽ>ĨöŅčx9¨×cŲh0˛Ūēk1á\æ€ÚĮjà“ŧ6õą˛Ę3¸S>¤ƒķËJ-N ŒĐxôÆņžßĸ"z¤ë÷ԟŨ“_3ļBeīīÁIENDŽB`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1062ƒm0XcIDATH‰íÔ1N!ā!4&{ã\Áōux, ØĘkņ*¯ÁÖØLA‡}Fߓâ+j—/ģÃūĀËs„!Ō\qĻR×(…ëõ'}˙õéÛTS]å:Œ4fđ#Ã.nŦŽŗÜU Ŧ܂ЊôŨn,ø °S2œŊ­}’ößĩNÁ›PU+ē’Ëør6ī =Ō’}ģT4rÚp›Š—s­ëĘIŪ+ĨĒĖ:‰>õAÔęo…{d3V‰ôīŨÕ0<öY•QÕîĸ˛FÅՓĘų‘bœŠĪ>Ž5dĩ/īģ*߁2gúTû4žÔ呯oęsŪÕ4Å2ŌÔ´_Ŗ"jĒhŌ´’u×ö{ƒZüÕf/Ē=+?9Éņk÷EMĶAN‚Ŧ}í˛*MaŲh)J΀pCŽz•ķIā ØbN[ūRÛãĄ‚“AĶöÈXG*õz9Ō˙'ŗ)ų™ž×/ę;SkDÜúhõIENDŽB`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1076ÅcIDATH‰íÔ1N!ā!4&{ã\Áōux, ØĘkņ*¯ÁÖØLA‡}Fߓâ+j—/ģÃūĀËs„!Ō\qĻR×(…ëõ'}˙õéÛTS]å:Œ4fđ#Ã.nŦŽŗÜU Ŧ܂ЊôŨn,ø °S2œŊ­}’ößĩNÁ›PU+ē’Ëør6ī =Ō’}ģT4rÚp›Š—s­ëĘIŪ+ĨĒĖ:‰>õAÔęo…{d3V‰ôīŨÕ0<öY•QÕîĸ˛FÅՓĘų‘bœŠĪ>Ž5dĩ/īģ*߁2gúTû4žÔ呯oęsŪÕ4Å2ŌÔ´_Ŗ"jĒhŌ´’u×ö{ƒZüÕf/Ē=+?9Éņk÷EMĶAN‚Ŧ}í˛*MaŲh)J΀pCŽz•ķIā ØbN[ūRÛãĄ‚“AĶöÈXG*õz9Ō˙'ŗ)ų™ž×/ę;SkDÜúhõIENDŽB`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1061daâ3IDATH‰íÔ=J1ā §Œ7ˆG°´ËUž#XZ™=WĘQâ "6Bæ›,*,ų´ąØm–đÂLōđâ#8õÔSĢnĻ €éõ…Ģ,ƒĘ#­Č<ˆb§Es[ž{+hN`åĐĮŅ&#Ũ4‹†Ėîl¯ČT0™xąŠĢˇ4­˜lŧ¸^YtĢ:ēčŖī4#+ÖÁqä0Q%đƁûn kŪDߙFZ5S¸•Zˇ^ķŽ$eĪ@ąœ0UX̝¸PW†Zš"­ÔEWĖBmžĢ˙I“]iü‹ēi7DÃpī~ƒnNJ!NĩŊQGsĩaĻPU2äZs{í:ŨĀH%ĩLĪz˙ ÕhcŠīFĶØTÍÕ´å˜A0’}&ķ”cE|T¯,QéĩUu\ū¯û­WmžNVu{[VIENDŽB`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1075”ē3IDATH‰íÔ=J1ā §Œ7ˆG°´ËUž#XZ™=WĘQâ "6Bæ›,*,ų´ąØm–đÂLōđâ#8õÔSĢnĻ €éõ…Ģ,ƒĘ#­Č<ˆb§Es[ž{+hN`åĐĮŅ&#Ũ4‹†Ėîl¯ČT0™xąŠĢˇ4­˜lŧ¸^YtĢ:ēčŖī4#+ÖÁqä0Q%đƁûn kŪDߙFZ5S¸•Zˇ^ķŽ$eĪ@ąœ0UX̝¸PW†Zš"­ÔEWĖBmžĢ˙I“]iü‹ēi7DÃpī~ƒnNJ!NĩŊQGsĩaĻPU2äZs{í:ŨĀH%ĩLĪz˙ ÕhcŠīFĶØTÍÕ´å˜A0’}&ķ”cE|T¯,QéĩUu\ū¯û­WmžNVu{[VIENDŽB`‚ pix[231]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1060mcQtQIDATH‰íÔ=NÅ0 `[Aę‚ČúôrF&z•w„”0q­p“H\ c†(Æé(ØŠž Cō)v] QĢžŒuŪÕũąģĘíīŠŋ@/Y÷_6ŖëQôTø5ÎR_‰ĀQßĀ mH•ģ#¸“Đ€Ôģ¸Ŧ(t5āMķ 6Œ.TMĢI6>JåuĶ eĘ.4Š ųœĄØâPQ>QđaąÕ#ŊČht‹ũËī+ÅĶÍ\Į `ę&TÛ]AW(°ŠYĄ÷Ėą@ĪāYšÉmUUWĖwCX+jĘy[€“ŧŖfŦîR]ÃÉõškŪŅeUe]Ãų=ĢU픝P×čų{N×Xeœ¸Ē‰Gž|ÕÖËë+ß`ųeŌ-fåÛāAœŧ^Ą>Œ´Ww'ĩ'1séCfąg^­ō âx/t}ūčVTļÔw­.qÍQ=IENDŽB`‚ pix[232]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1074s¤,QIDATH‰íÔ=NÅ0 `[Aę‚ČúôrF&z•w„”0q­p“H\ c†(Æé(ØŠž Cō)v] QĢžŒuŪÕũąģĘíīŠŋ@/Y÷_6ŖëQôTø5ÎR_‰ĀQßĀ mH•ģ#¸“Đ€Ôģ¸Ŧ(t5āMķ 6Œ.TMĢI6>JåuĶ eĘ.4Š ųœĄØâPQ>QđaąÕ#ŊČht‹ũËī+ÅĶÍ\Į `ę&TÛ]AW(°ŠYĄ÷Ėą@ĪāYšÉmUUWĖwCX+jĘy[€“ŧŖfŦîR]ÃÉõškŪŅeUe]Ãų=ĢU픝P×čų{N×Xeœ¸Ē‰Gž|ÕÖËë+ß`ųeŌ-fåÛāAœŧ^Ą>Œ´Ww'ĩ'1séCfąg^­ō âx/t}ūčVTļÔw­.qÍQ=IENDŽB`‚ pix[233]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1059?’ēhIDATH‰íĶŋNÃ0đ/˛Tw"+CÕŧF'üJŒ Umăđ(u'Æ>îÔÕcŒsËŋĻį,°pS”ŸbŸī‹A#åđ¯5Ũūöž/?ļō_ézT͘æQŊ¨Ģ õUhîKŖĨĐVÕ[ōēĒΒS”ŦŦ° …e'i†Mų…îQĩˇîNEYû6X—Dåžû.š&ë kdUEA)šxŖ¨ Vk(:×åA8o `âlLûY[QĐÚˇ›ĸĶ h7ÔįŖÚ~ ØÍPŋŠņ°įęË´X[sĒë =ÚĒFV}ĒôŠ*)a’GÕYš,¤āÚfuObFīú@Rž‡ąîyQcQ’”3bÕE}E¯j%5qÁē•tĮ:)%k4aŠ’nʕę†ÕŗNŠgPėüJõW5mŨljŦÂŦâž× `iÎô”øŠ’¨™ƒu0¸ō-[k āWÂŋQĘRߐG'ëĄÂđŸ<-GcJ¯oʏŽO3R´IENDŽB`‚ pix[234]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1073íq1hIDATH‰íĶŋNÃ0đ/˛Tw"+CÕŧF'üJŒ Umăđ(u'Æ>îÔÕcŒsËŋĻį,°pS”ŸbŸī‹A#åđ¯5Ũūöž/?ļō_ézT͘æQŊ¨Ģ õUhîKŖĨĐVÕ[ōēĒΒS”ŦŦ° …e'i†Mų…îQĩˇîNEYû6X—Dåžû.š&ë kdUEA)šxŖ¨ Vk(:×åA8o `âlLûY[QĐÚˇ›ĸĶ h7ÔįŖÚ~ ØÍPŋŠņ°įęË´X[sĒë =ÚĒFV}ĒôŠ*)a’GÕYš,¤āÚfuObFīú@Rž‡ąîyQcQ’”3bÕE}E¯j%5qÁē•tĮ:)%k4aŠ’nʕę†ÕŗNŠgPėüJõW5mŨljŦÂŦâž× `iÎô”øŠ’¨™ƒu0¸ō-[k āWÂŋQĘRߐG'ëĄÂđŸ<-GcJ¯oʏŽO3R´IENDŽB`‚ pix[235]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1058H•Š…dIDATH‰íÔąN!Đ!ØaiĮ/XZ\¯øaãø ū  ƒÎ–’‚07ėžņ<sąq“Ũlōv`–d¯äÚĶÃ@ņj:ŸwŽvĒæZšõLËTëTqޝSÅũĩ~Nõ}¨­%^†ÕP%"Đ-X̀¯¸ôŖÔel–ŧæĻ&i×čīu2s¯H÷:Ú§™NJŽv¯b¨4rUŌČdÕe@^sS០^%.ūQãaŦ pŠ÷TÉj!Ē‚ZU'}ž¨ö;=VvÚsÚ˛ī ôZļØU]§u‹un@wŠ[,)ЊtúQgЛϓž]ĒhY}Šf4Øt `†-Žd{]bSß˙/ļũŗDC}–W‘LpyˇS@™¨‰[+z­2SõGē—eŦáAļŨÍĢ ´Ht2d6g)(|Wā‡VՆ,8Ōr6d¯õŦeúyŅ_âߝŪGbhVÂxhGIENDŽB`‚ pix[236]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1072švdIDATH‰íÔąN!Đ!ØaiĮ/XZ\¯øaãø ū  ƒÎ–’‚07ėžņ<sąq“Ũlōv`–d¯äÚĶÃ@ņj:ŸwŽvĒæZšõLËTëTqޝSÅũĩ~Nõ}¨­%^†ÕP%"Đ-X̀¯¸ôŖÔel–ŧæĻ&i×čīu2s¯H÷:Ú§™NJŽv¯b¨4rUŌČdÕe@^sS០^%.ūQãaŦ pŠ÷TÉj!Ē‚ZU'}ž¨ö;=VvÚsÚ˛ī ôZļØU]§u‹un@wŠ[,)ЊtúQgЛϓž]ĒhY}Šf4Øt `†-Žd{]bSß˙/ļũŗDC}–W‘LpyˇS@™¨‰[+z­2SõGē—eŦáAļŨÍĢ ´Ht2d6g)(|Wā‡VՆ,8Ōr6d¯õŦeúyŅ_âߝŪGbhVÂxhGIENDŽB`‚ pix[237]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1057Ø*— IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[238]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1071PŖ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1056¯-§‚RIDATH‰íÔ=NÅ0 đU‰,HššÂWbdK8‘8WČ2zˆbÜōB/N%>†—­ūÉmہŦ„ĢūĄžũË]]õ÷Úŋ[HĒ1§!'ōÚŊ0¤c•´ŒÚŧĆĨqĐę%ƒxWēT†×GǎhÁÔĘ8äAĢęÂĄ˜ŠˇrWö9>×Pmđ}mǝ–JŲÔ%ũ†ĨÕˇ“z[]_Ķö’ŠĸÎrŲõđ5ä‰X™Ōp›ú]5lh`/ĒZžDSÕĐXŖŗŪl*3%ÄnôÆIcŠŧNURŦF׊ē-áH3ŲÚ7Ĩô4õa‘C÷ ÆtŋŠQŖ]SLOŽjs†v×ęŖ–rĐļžĖ„GíSŲé¤CyŸ¯” ­úĢĐvÄbŠ&QB`Ŧ3ÕénpĒÁŌę–Ö]Er,ÆŊÁãEžŽ‹ÛėtžŊX?P:ÔøŠīi1¸Yr]oIENDŽB`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1070tx`5RIDATH‰íÔ=NÅ0 đU‰,HššÂWbdK8‘8WČ2zˆbÜōB/N%>†—­ūÉmہŦ„ĢūĄžũË]]õ÷Úŋ[HĒ1§!'ōÚŊ0¤c•´ŒÚŧĆĨqĐę%ƒxWēT†×GǎhÁÔĘ8äAĢęÂĄ˜ŠˇrWö9>×Pmđ}mǝ–JŲÔ%ũ†ĨÕˇ“z[]_Ķö’ŠĸÎrŲõđ5ä‰X™Ōp›ú]5lh`/ĒZžDSÕĐXŖŗŪl*3%ÄnôÆIcŠŧNURŦF׊ē-áH3ŲÚ7Ĩô4õa‘C÷ ÆtŋŠQŖ]SLOŽjs†v×ęŖ–rĐļžĖ„GíSŲé¤CyŸ¯” ­úĢĐvÄbŠ&QB`Ŧ3ÕénpĒÁŌę–Ö]Er,ÆŊÁãEžŽ‹ÛėtžŊX?P:ÔøŠīi1¸Yr]oIENDŽB`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10556$ö8-IDATH‰íÔ=nÅ `G ^*qnō¸JŅĄ*DŪĩčÔąWātc@¸Nx•ž‚Ąj—.aIĸOæĮØš §žzę¯ôcĒWĒü‘ĩ¨Š€Ŗ¨DMH ų…HwZ)ąPÁN (Šē¸Øke Ŧ ^ WÚÔaŅáYԤȓĘFÖĒhĨ×lbiĄ5ŲO åt ZvŽßúlõí¨ŧ/fÂŖn×ô.Å'%‹ë6]šw…–Ļn23z+injÂLŨ\ŖŦzĻå[Í_Õģ4PÚīhËēü v´gŽ í šÖ:ŌĖUė+&ãĨ;Ę6LšĪ$Ē Oȏ˛FĐ–ĖÅsÔÂĘŨ͍ē­qÔzģũ`›Üt'Úã-=RnŅÛîEmk´.čŨø7ũž}a¯yØ:IENDŽB`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1069ŋéĐ-IDATH‰íÔ=nÅ `G ^*qnō¸JŅĄ*DŪĩčÔąWātc@¸Nx•ž‚Ąj—.aIĸOæĮØš §žzę¯ôcĒWĒü‘ĩ¨Š€Ŗ¨DMH ų…HwZ)ąPÁN (Šē¸Øke Ŧ ^ WÚÔaŅáYԤȓĘFÖĒhĨ×lbiĄ5ŲO åt ZvŽßúlõí¨ŧ/fÂŖn×ô.Å'%‹ë6]šw…–Ļn23z+injÂLŨ\ŖŦzĻå[Í_Õģ4PÚīhËēü v´gŽ í šÖ:ŌĖUė+&ãĨ;Ę6LšĪ$Ē Oȏ˛FĐ–ĖÅsÔÂĘŨ͍ē­qÔzģũ`›Üt'Úã-=RnŅÛîEmk´.čŨø7ũž}a¯yØ:IENDŽB`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1054A#ÆŽIDATH‰íÕMNÄ đ?’؍ 0yŪ„9ƜD:qá1ŧJÍĀ+`\¸”Ųa‚āƒ™ŒNŽ;cĶôëׯ}R *íBĒļåJîÆt4BķēŖAōÁÉ^Ëwų°ééöŧn{Zčû˜—Õ,ioû×?¨Ą¯V§‘æúvŧWšĻNôc¯aā’xoļėDō˛VNZ‹ä ëšĻ[iõ4×GŠp4Ļ{VŨRáÕ&­ĻéfŌvŽ[Ÿ5”æĘ…Õļ”?cÖ €FíZę‡`XT‰ZwGEC_ŠÆƒĒ5•ûĨE5‹Ęz9iÎi5fŗ¤ņ‡Š-c^ĩ˙ā>ŪqEm•A˛ŽŠĘVŠÂR•u{õüëáÔØÕ+ᘆÆŦĨƚ*œ˛YŸŌëŠZÉUĻJĐ3åg獊ęö9“AĨë™ÁՑo'jęÄë3O>īŠĨÚ~…R÷̃H —hŦŗŋ6{J÷įĒ%lÅIENDŽB`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1068c¸ŲFIDATH‰íÕMNÄ đ?’؍ 0yŪ„9ƜD:qá1ŧJÍĀ+`\¸”Ųa‚āƒ™ŒNŽ;cĶôëׯ}R *íBĒļåJîÆt4BķēŖAōÁÉ^Ëwų°ééöŧn{Zčû˜—Õ,ioû×?¨Ą¯V§‘æúvŧWšĻNôc¯aā’xoļėDō˛VNZ‹ä ëšĻ[iõ4×GŠp4Ļ{VŨRáÕ&­ĻéfŌvŽ[Ÿ5”æĘ…Õļ”?cÖ €FíZę‡`XT‰ZwGEC_ŠÆƒĒ5•ûĨE5‹Ęz9iÎi5fŗ¤ņ‡Š-c^ĩ˙ā>ŪqEm•A˛ŽŠĘVŠÂR•u{õüëáÔØÕ+ᘆÆŦĨƚ*œ˛YŸŌëŠZÉUĻJĐ3åg獊ęö9“AĨë™ÁՑo'jęÄë3O>īŠĨÚ~…R÷̃H —hŦŗŋ6{J÷įĒ%lÅIENDŽB`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1053ßGS ”IDATH‰ŨÔąNÃ0āßōāĨ’;Tõ+0vËĢđŒ •âĮÂĀ+1°ZbĀUƒsĶĻ;¨%Ÿ|gĮwÆ=ՆE×čÃŦR¸@÷ŗ:Ÿ÷ĮZMú y˙‹î]ŊÉ×Ũ #…œV‘€ąžGē íy` ´5 hp'Ņkî OlXoĩkŽīÎ59Ö`ú-Ôj~ĐÂW4BS éM(4dŠS:tME§\Kމ5M"É åŧIžTköē“Id5 õķĘ[žR‚‡p:L+œö˛ĐxŌåfôZĸÔ>˛[⠘Ęëš9ĩ­]ÎĖ%ˇĒiԑõ™?6UY_¸\FžiŽ|č“^]UõQmŠ>k_9oT¨mũZ•uŚXšŪWŌĪčR8SSÁjėŧžA;uVūĀĨ§Ŗ’°ëS‡~Lč¤]dĨR%Ų­äLĨ.yAP\u4ŅYųoÁ ¨"W5…FV.掛mG5U†F˙ ‘ÆaŖĩČiØhE =Ō„RúN¯ZϟSôYö`į‡IENDŽB`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1067ķÄ×”IDATH‰ŨÔąNÃ0āßōāĨ’;Tõ+0vËĢđŒ •âĮÂĀ+1°ZbĀUƒsĶĻ;¨%Ÿ|gĮwÆ=ՆE×čÃŦR¸@÷ŗ:Ÿ÷ĮZMú y˙‹î]ŊÉ×Ũ #…œV‘€ąžGē íy` ´5 hp'Ņkî OlXoĩkŽīÎ59Ö`ú-Ôj~ĐÂW4BS éM(4dŠS:tME§\Kމ5M"É åŧIžTköē“Id5 õķĘ[žR‚‡p:L+œö˛ĐxŌåfôZĸÔ>˛[⠘Ęëš9ĩ­]ÎĖ%ˇĒiԑõ™?6UY_¸\FžiŽ|č“^]UõQmŠ>k_9oT¨mũZ•uŚXšŪWŌĪčR8SSÁjėŧžA;uVūĀĨ§Ŗ’°ëS‡~Lč¤]dĨR%Ų­äLĨ.yAP\u4ŅYųoÁ ¨"W5…FV.掛mG5U†F˙ ‘ÆaŖĩČiØhE =Ō„RúN¯ZϟSôYö`į‡IENDŽB`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1052¨@c›ČIDATH‰íÔąnÛ0āŸ*.I´f( W𘥰^Ĩā1C Čä• äüaáÁcXdQš×;)J%’Ö` h‡ļaøĶÎĮŖ@ ĢÅßÕˇRķëŋūq}=Ĩ‡|Ŧ}høŗƒIõ™ô0MNJ<Ô Ūĸĸ§H8%n€Š_ô)qu hz|™+FŊ„Ķ´ŸĮVÛgžTžā~FPâ–/(zufžŲsAāVŅ.ĒęUÛUĄt–™S¯pÕnjōCæcFWŦCUq7ęŦčtFŋ‹ÂxŦrzŖōŌĢTwŊĒ.Q#ZŖa•ŋ\ebŅÕ9jp/z“ĢʃDĩėoÚ QÎ\Yž uZ¯å2ŧ"<+ąEĒčÕ¸’û1×Z´†i?‘+‹)?ĖOß׸‹‚bŨZmËŧjésŅ^čQŖūĄä@¨vĖÜ5~ÚIîQ eņŽVQ¤üæäCÍô6éGöKy5ÄLĻ}TlÔXčä¤(Ūŋ¯rĘŌ=’ÛÚ~lÖ'Tw:ŗûīú™jfrDī$­ĸmæŠÂúMŌjr›˙[y¤ø c MĒũ–ækū$tËjΏí5^S}YÔŨbæeÍÜ÷åČĮ“)"âIENDŽB`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1066„ôAČIDATH‰íÔąnÛ0āŸ*.I´f( W𘥰^Ĩā1C Čä• äüaáÁcXdQš×;)J%’Ö` h‡ļaøĶÎĮŖ@ ĢÅßÕˇRķëŋūq}=Ĩ‡|Ŧ}høŗƒIõ™ô0MNJ<Ô Ūĸĸ§H8%n€Š_ô)qu hz|™+FŊ„Ķ´ŸĮVÛgžTžā~FPâ–/(zufžŲsAāVŅ.ĒęUÛUĄt–™S¯pÕnjōCæcFWŦCUq7ęŦčtFŋ‹ÂxŦrzŖōŌĢTwŊĒ.Q#ZŖa•ŋ\ebŅÕ9jp/z“ĢʃDĩėoÚ QÎ\Yž uZ¯å2ŧ"<+ąEĒčÕ¸’û1×Z´†i?‘+‹)?ĖOß׸‹‚bŨZmËŧjésŅ^čQŖūĄä@¨vĖÜ5~ÚIîQ eņŽVQ¤üæäCÍô6éGöKy5ÄLĻ}TlÔXčä¤(Ūŋ¯rĘŌ=’ÛÚ~lÖ'Tw:ŗûīú™jfrDī$­ĸmæŠÂúMŌjr›˙[y¤ø c MĒũ–ækū$tËjΏí5^S}YÔŨbæeÍÜ÷åČĮ“)"âIENDŽB`‚ pix[249]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10511I2!RIDATH‰íÕąnà ā1xäxn¨ī ōd%ęĐą/Đ)CVGBÄõâĘImC:tÉ­ŸĀĮ‡ApxęS˙ĸĮKKûáØŌË{KéŖĨöŗšöW|ÁÔ5ĸĨ= į:Æ@[^(ĘĒö–)”4Ë}„ MōÔC—õLA’‡bō͸ŠpfšsDGîĨ Ūx[RÄ.l”'OEM2Xڑ+iųGˇ+MW%1Ē\)õ“îKģ,GĨ†r÷rWŌ$‰Ë¨(5TRRu\+Š =wE=× &øÔÕĀŦTNYÁ:zĪät]yíMíD†ÂÃjY]MņZUî/Ÿ(čë õõĩƛG”yH\]4lM“äRQšéšŌM€ōč<Ƃ•U…˛ō;Ĥ"ߨqßč´P~ōíŖ<1ķ,niæĒIĐ,îš5­âŋ˙)ũ÷Á7ׅĪĒIENDŽB`‚ pix[250]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1065 ĨûRIDATH‰íÕąnà ā1xäxn¨ī ōd%ęĐą/Đ)CVGBÄõâĘImC:tÉ­ŸĀĮ‡ApxęS˙ĸĮKKûáØŌË{KéŖĨöŗšöW|ÁÔ5ĸĨ= į:Æ@[^(ĘĒö–)”4Ë}„ MōÔC—õLA’‡bō͸ŠpfšsDGîĨ Ūx[RÄ.l”'OEM2Xڑ+iųGˇ+MW%1Ē\)õ“îKģ,GĨ†r÷rWŌ$‰Ë¨(5TRRu\+Š =wE=× &øÔÕĀŦTNYÁ:zĪät]yíMíD†ÂÃjY]MņZUî/Ÿ(čë õõĩƛG”yH\]4lM“äRQšéšŌM€ōč<Ƃ•U…˛ō;Ĥ"ߨqßč´P~ōíŖ<1ķ,niæĒIĐ,îš5­âŋ˙)ũ÷Á7ׅĪĒIENDŽB`‚ pix[251]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1050FNˇfIDATH‰íÔ;NÄ0āßD"CšÅJŪ#p„¯˛G ¤@ÄTc¯bn’`:V†ąÃc7ļĶ!´VŠ$Ÿ”Œįađʲ8ëY˙¯NæûŽVĩ/5Îjë:f`Jõō¤'@hæåGfP!tX(†ˆ^”úbG.i×R‹!@Ĩ/ÛûĒúYjʞŦ蝊Iߖ:jz÷¤"ę˛>OË~yXėˆvô™Ļ\†#ĩĸã­æ8k_SâĐg~)ÔdÅq¤G:Œ[¨ŠŠMĒDuS!JmŊAĨ ŗn€k k+[šĒĢĸ*YĨoēŠĨíŅ7ukÖTK"A]Š9´bvƒ[ם°ĢgÙŦĒ–IéIcwä/ęĒížÆ+øRsˇcO–jõ•Ēz‚ŋ9*{CHųtÁØ˛¯’†Ür˛iŗTy-ã™&”G uíäTáđ•ŒĶ¨& 6 ÂĄÔgGlMԟuzšŊ§ŖŦŠiŊŽ*˙ũįõ!MgĶ}IENDŽB`‚ pix[252]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1064j•mfIDATH‰íÔ;NÄ0āßD"CšÅJŪ#p„¯˛G ¤@ÄTc¯bn’`:V†ąÃc7ļĶ!´VŠ$Ÿ”Œįađʲ8ëY˙¯NæûŽVĩ/5Îjë:f`Jõō¤'@hæåGfP!tX(†ˆ^”úbG.i×R‹!@Ĩ/ÛûĒúYjʞŦ蝊Iߖ:jz÷¤"ę˛>OË~yXėˆvô™Ļ\†#ĩĸã­æ8k_SâĐg~)ÔdÅq¤G:Œ[¨ŠŠMĒDuS!JmŊAĨ ŗn€k k+[šĒĢĸ*YĨoēŠĨíŅ7ukÖTK"A]Š9´bvƒ[ם°ĢgÙŦĒ–IéIcwä/ęĒížÆ+øRsˇcO–jõ•Ēz‚ŋ9*{CHųtÁØ˛¯’†Ür˛iŗTy-ã™&”G uíäTáđ•ŒĶ¨& 6 ÂĄÔgGlMԟuzšŊ§ŖŦŠiŊŽ*˙ũįõ!MgĶ}IENDŽB`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1049&‰‹R…IDATH‰íÔÍJÄ0đ ëÉ\=ņöÄŧ˜ŧ‰¯đEŧæ°tvĻévˇų¨ĸāAœÃ.ô×ŌÉäŸũĄ­ÉÎŋ?PėčWēú#úŌÕÉ`U[“F/҃Š j  kŌį o4‚æÁÃ\•Đ€ÍjJq0ŸŠl)Ŋ7×Y[]%HjģŌt‚ĸĨ:ۘ†×AÅ[RߚU`Ŋ–{zĩû,Ø™Ž&^›—[Š×ŦƁ*4Ōö-Ē= …:ĩĒǧAˇŸ”fUėūHˇŸ´žsĸÛ}p_hXUDŽ€í¨äSíļĘAËĒø%…ēU) ¯č+ĩŗ j˙ Ŋ騚…–îŠŋS…úUĢk*ī/ŠmjÜQGzz˜ "ņ¨ÖKuāÞŠ]Č:ŨÆfŊ¸kíūĒ”_&ĮÃRĪ”ēPĻ.œ”?#6¤#S)=ŽÄ¤p¸UD3<×Y'ŌQáĻ.Ō$ŽļĢ(ąŦK}Īm­ëû:Ų]5îßāļŽQĢaIENDŽB`‚ pix[254]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1063ôjÎ…IDATH‰íÔÍJÄ0đ ëÉ\=ņöÄŧ˜ŧ‰¯đEŧæ°tvĻévˇų¨ĸāAœÃ.ô×ŌÉäŸũĄ­ÉÎŋ?PėčWēú#úŌÕÉ`U[“F/҃Š j  kŌį o4‚æÁÃ\•Đ€ÍjJq0ŸŠl)Ŋ7×Y[]%HjģŌt‚ĸĨ:ۘ†×AÅ[RߚU`Ŋ–{zĩû,Ø™Ž&^›—[Š×ŦƁ*4Ōö-Ē= …:ĩĒǧAˇŸ”fUėūHˇŸ´žsĸÛ}p_hXUDŽ€í¨äSíļĘAËĒø%…ēU) ¯č+ĩŗ j˙ Ŋ騚…–îŠŋS…úUĢk*ī/ŠmjÜQGzz˜ "ņ¨ÖKuāÞŠ]Č:ŨÆfŊ¸kíūĒ”_&ĮÃRĪ”ēPĻ.œ”?#6¤#S)=ŽÄ¤p¸UD3<×Y'ŌQáĻ.Ō$ŽļĢ(ąŦK}Īm­ëû:Ų]5îßāļŽQĢaIENDŽB`‚ pix[255]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1048QŽģÄgIDATH‰åĶ;nÃ0 PÔĄ¨zõšŽÔ1›XdčĩtČ1Ēĸˇ¨`–Š ‰>C3tˆÃždJ Ü÷¤ä{šēú÷¸ß]ũ¸A77čŽĢ|Ž?]í¯Ŋ?žÉ˟ļTō<*`xZ&W]pŒƒLWœtą6€›ę:ÕgUM‹RŠ(ĒG×PYMVÍĄÔŽL°*O,•Ņ“ĄžÚYąĒÁ’É M˜ÚĒŪ[:ŠÂĀŠĄr&Á´ÕQ[LSã“d2´ÕVmz\Ųļ*|Íz¨jRH-5œ¤V\)W€—œ+yÆâŧY%›rQöđVWđYˇ›k}4'%ˇũŧŧAGú¤ézWÁĐiŅbĪĸĪ*æNĢ(ØEUŠ 59Ž”4B(˛ąGēÁĩ’FĀR%`-ˇ?AņgQ•ÛtĖÕe\8’œ67j]yųš" 9 æz.u˙ĩášw§ŠæAn~īĒz=ūM‰ô)&`ʙIENDŽB`‚ pix[256]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1062ƒm0XgIDATH‰åĶ;nÃ0 PÔĄ¨zõšŽÔ1›XdčĩtČ1Ēĸˇ¨`–Š ‰>C3tˆÃždJ Ü÷¤ä{šēú÷¸ß]ũ¸A77čŽĢ|Ž?]í¯Ŋ?žÉ˟ļTō<*`xZ&W]pŒƒLWœtą6€›ę:ÕgUM‹RŠ(ĒG×PYMVÍĄÔŽL°*O,•Ņ“ĄžÚYąĒÁ’É M˜ÚĒŪ[:ŠÂĀŠĄr&Á´ÕQ[LSã“d2´ÕVmz\Ųļ*|Íz¨jRH-5œ¤V\)W€—œ+yÆâŧY%›rQöđVWđYˇ›k}4'%ˇũŧŧAGú¤ézWÁĐiŅbĪĸĪ*æNĢ(ØEUŠ 59Ž”4B(˛ąGēÁĩ’FĀR%`-ˇ?AņgQ•ÛtĖÕe\8’œ67j]yųš" 9 æz.u˙ĩášw§ŠæAn~īĒz=ūM‰ô)&`ʙIENDŽB`‚ pix[257]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1047Á1ĻUkIDATH‰íÔ;ND!⟐ ´&lÎmMf —1[ÁĘmĐŲ’XHAîņ03>" •Ūęæ~ŧîųĐâ‰øãēų•ÖĨļĨRøūĒū•čég#÷pŽS-žĒ™i…§ŦWš@YÖG€OP”¤žnĶškãvÃĒ"kqĒŒš]3]uĩ°V˚yęą¯¯ļÚģl20UĸäD-ļ5IyæĢ~ĨIŌÄúpz‘4˛&ĮaÍUQ ‚&ßĢ•ĀëVuÖØ#ĀLKÆ˙=éN%ŗaĒē˜&Õ™Õˇ­zĸÅWslŦB‚ŦŽZjŧs„ô/ē)5ŧ)–e-7vŽļ\›Ži¨ÆKdÍ]īiĖ(÷Už5MiQšˆ]šc‚ ¨&íu*°įs")ŸŽŽŠ´ öķÁ \IJ•GTÜŨq“đōUûÜēėž-Ž_ŌŋL¯ųĶTI÷ēLõ‘oáŪxoéš~”JÔVúi”ßĶWÂëI oIĄIENDŽB`‚ pix[258]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1061daâkIDATH‰íÔ;ND!⟐ ´&lÎmMf —1[ÁĘmĐŲ’XHAîņ03>" •Ūęæ~ŧîųĐâ‰øãēų•ÖĨļĨRøūĒū•čég#÷pŽS-žĒ™i…§ŦWš@YÖG€OP”¤žnĶškãvÃĒ"kqĒŒš]3]uĩ°V˚yęą¯¯ļÚģl20UĸäD-ļ5IyæĢ~ĨIŌÄúpz‘4˛&ĮaÍUQ ‚&ßĢ•ĀëVuÖØ#ĀLKÆ˙=éN%ŗaĒē˜&Õ™Õˇ­zĸÅWslŦB‚ŦŽZjŧs„ô/ē)5ŧ)–e-7vŽļ\›Ži¨ÆKdÍ]īiĖ(÷Už5MiQšˆ]šc‚ ¨&íu*°įs")ŸŽŽŠ´ öķÁ \IJ•GTÜŨq“đōUûÜēėž-Ž_ŌŋL¯ųĶTI÷ēLõ‘oáŪxoéš~”JÔVúi”ßĶWÂëI oIĄIENDŽB`‚ pix[259]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1046ļ6–ÃsIDATH‰íÔANÄ āŸÁ„ņyŽáj¸˜ąÜĀ#ĖU8 ‰Ā‰¤ø N+´+Ũ ģöƒöŊŋPäƒaq×ģŪuĢÉiĐ9ŅŽ:Ę^ėi• Ī˝iÔŗƒƒĘ =ĩ ˛§#`,DvTŗžô[#t^Âķ¤Ļ#Ģ“ŦꞖ˛nęuTéĖŽFBÖÖØöÉ^VN Æu•ĸ*Ē˙\=%É)r$}˛D­ģMĒŨš“UÕ@ߊÍ9;Íyü}ãJÖaĨ_k ’7Q^i07•Qä 6ZKt†õ¤’Č^­5Ō˛VĢŨėē‘F3ĢĘ#ōŌîTķĮŦT5-%ĪC}/u)šˇ:WEáAˆbG=äȧV­ EŧŠm’E]Q§CŖ:’{E}GETŦ5šF¸ŧ–S„Í7ēę;+Ā =ƒ“žU=åĶ͇ôয় <áŗ_×Kž>—­ÕĶĀ?Ĩōöö¯ržĩ¯åÃ‘ŪÆ?ęBƒI' ŠIENDŽB`‚ pix[260]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1060mcQtsIDATH‰íÔANÄ āŸÁ„ņyŽáj¸˜ąÜĀ#ĖU8 ‰Ā‰¤ø N+´+Ũ ģöƒöŊŋPäƒaq×ģŪuĢÉiĐ9ŅŽ:Ę^ėi• Ī˝iÔŗƒƒĘ =ĩ ˛§#`,DvTŗžô[#t^Âķ¤Ļ#Ģ“ŦꞖ˛nęuTéĖŽFBÖÖØöÉ^VN Æu•ĸ*Ē˙\=%É)r$}˛D­ģMĒŨš“UÕ@ߊÍ9;Íyü}ãJÖaĨ_k ’7Q^i07•Qä 6ZKt†õ¤’Č^­5Ō˛VĢŨėē‘F3ĢĘ#ōŌîTķĮŦT5-%ĪC}/u)šˇ:WEáAˆbG=äȧV­ EŧŠm’E]Q§CŖ:’{E}GETŦ5šF¸ŧ–S„Í7ēę;+Ā =ƒ“žU=åĶ͇ôয় <áŗ_×Kž>—­ÕĶĀ?Ĩōöö¯ržĩ¯åÃ‘ŪÆ?ęBƒI' ŠIENDŽB`‚ pix[261]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1045/?ĮyeIDATH‰íÕ;N1ĐYšp‡/€đ()†#åģŅ)s„\ÅEJn@\Aw¸0Æ@B™1ĸĸ‰ˇđŦžíõ–”<}ĨųøNpĘŖĢTĄyÛŌ™ž yĖ‹žŌšŌ\*Ü7ŨKJÜpEΞdũL‡ŽŌE/ú›ž˙E—-Šļœ‘ę¨i; ÉjšXã +ļ×ėT#8I3`…‡1€Ą‚į}ž°š„J‚F,6/ 5IÖ랟:Zü:Ų(iĀäŗ›Ocĩ4-]åHĐ1žZÖŗíiąY§Ĩn€žōbčę o‚0júĖëĢę• š†ĻŲö´XŽuŽYąõjWõ“Ŗ:ČęX}WoPQ° ãĩkJgēĮzgeē MíåņŽ%ĩŲ‡UĶYRSÜ´˛<ĪéģĻXČMˇĸVЉâųĨÄj €?HĘŋO°¨m2Ûå iä‹e Ģh+`ČéJ;~d=ū,øo7˙čj^?Į_ˇžIENDŽB`‚ pix[262]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1059?’ēeIDATH‰íÕ;N1ĐYšp‡/€đ()†#åģŅ)s„\ÅEJn@\Aw¸0Æ@B™1ĸĸ‰ˇđŦžíõ–”<}ĨųøNpĘŖĢTĄyÛŌ™ž yĖ‹žŌšŌ\*Ü7ŨKJÜpEΞdũL‡ŽŌE/ú›ž˙E—-Šļœ‘ę¨i; ÉjšXã +ļ×ėT#8I3`…‡1€Ą‚į}ž°š„J‚F,6/ 5IÖ랟:Zü:Ų(iĀäŗ›Ocĩ4-]åHĐ1žZÖŗíiąY§Ĩn€žōbčę o‚0júĖëĢę• š†ĻŲö´XŽuŽYąõjWõ“Ŗ:ČęX}WoPQ° ãĩkJgēĮzgeē MíåņŽ%ĩŲ‡UĶYRSÜ´˛<ĪéģĻXČMˇĸVЉâųĨÄj €?HĘŋO°¨m2Ûå iä‹e Ģh+`ČéJ;~d=ū,øo7˙čj^?Į_ˇžIENDŽB`‚ pix[263]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1044X8÷īIDATH‰ŨÕMNÄ āGH†]™­+ŽāL¸’'°$^ ãŧŗrK2 1Á>ßcĖĖ´ülŒÆH2͝@áÁ+Āŋ(š/ˆW™xÁsŲęŒ×…Ô"FƒYŲÆãFšÎļüy,õÛVWå8ÔĒį_×ãPßhû7įģŅ<4ZDÛÕ`1ĒžÚEAôÔ“Ō ÃZ?ž”ļĨ‰Î´Ú.¤äē5nŪ:TĨ‘TCš¨ķjFÎ&Ie,įhŖŪ& € SSŖŽFfí tTKūáښXŨÜÔ`’VEį‘úļ–qią;Ēh%šęæĸĀjęMRė@9!uu°ëë$<Ģî(EˆTĩÔĻIĨ‘ęLŅmj 8ØĸĻŖ¸°ļŪy¤Ā:™ ˇjFÔPŦuô_‡J™<e5Z*ĸö{•GxŖ Ģrˇ*JÖcĨ@ŪË ŨƒĀ÷ĒgČåÅÚ÷¤Úß]ë{П#k~ĀøÕ Ũ_ÚĢ2ąŽŌŽq´(ĢŗsÖ4c”ęŧq)‰’R_—ĶភcŸp¤øĶú Ģ\<”‚;ÍĪIENDŽB`‚ pix[264]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1058H•Š…IDATH‰ŨÕMNÄ āGH†]™­+ŽāL¸’'°$^ ãŧŗrK2 1Á>ßcĖĖ´ülŒÆH2͝@áÁ+Āŋ(š/ˆW™xÁsŲęŒ×…Ô"FƒYŲÆãFšÎļüy,õÛVWå8ÔĒį_×ãPßhû7įģŅ<4ZDÛÕ`1ĒžÚEAôÔ“Ō ÃZ?ž”ļĨ‰Î´Ú.¤äē5nŪ:TĨ‘TCš¨ķjFÎ&Ie,įhŖŪ& € SSŖŽFfí tTKūáښXŨÜÔ`’VEį‘úļ–qią;Ēh%šęæĸĀjęMRė@9!uu°ëë$<Ģî(EˆTĩÔĻIĨ‘ęLŅmj 8ØĸĻŖ¸°ļŪy¤Ā:™ ˇjFÔPŦuô_‡J™<e5Z*ĸö{•GxŖ Ģrˇ*JÖcĨ@ŪË ŨƒĀ÷ĒgČåÅÚ÷¤Úß]ë{П#k~ĀøÕ Ũ_ÚĢ2ąŽŌŽq´(ĢŗsÖ4c”ęŧq)‰’R_—ĶភcŸp¤øĶú Ģ\<”‚;ÍĪIENDŽB`‚ pix[265]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1043Æ\bLEIDATH‰íÕ1nÄ Џ‰.´Ûq“åhŒ”"ĮČU&'Č8](Ŧ ŪbWb@QRlŠ ‚ÁcƆXíĩ%íwĀTš=MT§ooUSmy5v_ęoWõ¯Ņ&RƒžYG­"ŧuŨG-YČé%5„A›Î×Ģ•S…´ _ŽZ° ĘČģ#=ķÉVĪ}Á|v–6_R׌A5n %^HFՀ]÷Ž”å\Bíę&k8”gÚ +ædÄíZWęËr,/•æš…­- +&ú $õ‰>uÅLJôsŧPhēęôG’í\ŠBŧņo*$†Öī鋭%ËX)rŨą‚@yŦ2éģŖ ã ŒØ6ŌȞNÉО-ĪŒÚ×Üw-pÕúÍĒ|÷šSšjqļęŊÆ­†žë=ô‰Ú6Ēȧ´# ģˇÔjĶ/ë›-Î}\ęÎIENDŽB`‚ pix[266]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1057Ø*—EIDATH‰íÕ1nÄ Џ‰.´Ûq“åhŒ”"ĮČU&'Č8](Ŧ ŪbWb@QRlŠ ‚ÁcƆXíĩ%íwĀTš=MT§ooUSmy5v_ęoWõ¯Ņ&RƒžYG­"ŧuŨG-YČé%5„A›Î×Ģ•S…´ _ŽZ° ĘČģ#=ķÉVĪ}Á|v–6_R׌A5n %^HFՀ]÷Ž”å\Bíę&k8”gÚ +ædÄíZWęËr,/•æš…­- +&ú $õ‰>uÅLJôsŧPhēęôG’í\ŠBŧņo*$†Öī鋭%ËX)rŨą‚@yŦ2éģŖ ã ŒØ6ŌȞNÉО-ĪŒÚ×Üw-pÕúÍĒ|÷šSšjqļęŊÆ­†žë=ô‰Ú6Ēȧ´# ģˇÔjĶ/ë›-Î}\ęÎIENDŽB`‚ pix[267]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1042ą[RÚiIDATH‰íÕÁmÃ0 @ zøŠl :@Q¯’ōėĪîdÕ]A|ōĄŠ%íĻuB:@_í#:ˆĄ$ĘÖˆėÆ ūø]7ņŅĮ›s§?ŠęŽŋŌ>9ZÃYíÜ×ˁKmšLŽ&fJ `ô”‚*ÅjĩgŽ’S˘Ræ˛ęčhÍō4rM4‘Ņ™A~ĸl•T1qI8QēV„Ôƒ ĪĒfŽjlƒj˛UIæE!áāÔ š }ŅPėn jėĸŪ>ĶFyG$ō•†D›—%Y˜w‚:—TíŠVŃf6;ųĨõA̞ ‹–E‡k•…ŠB9 8ŖīĢÎĸ ãÎ\8Á1ĶŽJäf”7ڭ֛Š›ĖĻfÕxKÛYiO_ “íXš^ԁ1bŦŽjßDši螠v†ūķŗwúRhÎxô:Gzy&Õ'¯ëxÎķÚTstsYtÚ^”oĨT–;ĖņŖ(Åžą¯-ĶļØ+•/[0øßŪ‹~ž")û„<æ*IENDŽB`‚ pix[268]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1056¯-§‚iIDATH‰íÕÁmÃ0 @ zøŠl :@Q¯’ōėĪîdÕ]A|ōĄŠ%íĻuB:@_í#:ˆĄ$ĘÖˆėÆ ūø]7ņŅĮ›s§?ŠęŽŋŌ>9ZÃYíÜ×ˁKmšLŽ&fJ `ô”‚*ÅjĩgŽ’S˘Ræ˛ęčhÍō4rM4‘Ņ™A~ĸl•T1qI8QēV„Ôƒ ĪĒfŽjlƒj˛UIæE!áāÔ š }ŅPėn jėĸŪ>ĶFyG$ō•†D›—%Y˜w‚:—TíŠVŃf6;ųĨõA̞ ‹–E‡k•…ŠB9 8ŖīĢÎĸ ãÎ\8Á1ĶŽJäf”7ڭ֛Š›ĖĻfÕxKÛYiO_ “íXš^ԁ1bŦŽjßDši螠v†ūķŗwúRhÎxô:Gzy&Õ'¯ëxÎķÚTstsYtÚ^”oĨT–;ĖņŖ(Åžą¯-ĶļØ+•/[0øßŪ‹~ž")û„<æ*IENDŽB`‚ pix[269]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1041(R`/IDATH‰íÔąnÄ P#tcí–û„ގņ[ˇÁÖßâîØēŌJ×ŽŽ­tą‘:učeŠx$`c´x2<ôĄ˙W¯K}5m 4 Ɍ’Ž:=5ˆŦ`ģ× ž*Oėw:v -/ŧļŠųâŠcStō_ķ@jĒRõä&R _ZˇĒétä¨`Mí/uĪ_Ū4ę ”}ĨšĸĀZ,儞S!]¤›˛Ĩ’2Ū›ĸŨß ĸũÉķ1 íŲKXz^ieÁŌrYé^ĻĘÉ‘ĸ¸TˆuĨ[šruėZ,Å˚maāÄÂëę:qH§‘ĸķÄ5)ĘrÔ΁:ŪuV•; B ÎĐ-C☠6ÖôkígN!DQ-^îû@NŠ’\JD?ÅŽŪ“oKĨŋ×OŒG9å6ņIENDŽB`‚ pix[270]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10556$ö8/IDATH‰íÔąnÄ P#tcí–û„ގņ[ˇÁÖßâîØēŌJ×ŽŽ­tą‘:učeŠx$`c´x2<ôĄ˙W¯K}5m 4 Ɍ’Ž:=5ˆŦ`ģ× ž*Oėw:v -/ŧļŠųâŠcStō_ķ@jĒRõä&R _ZˇĒétä¨`Mí/uĪ_Ū4ę ”}ĨšĸĀZ,儞S!]¤›˛Ĩ’2Ū›ĸŨß ĸũÉķ1 íŲKXz^ieÁŌrYé^ĻĘÉ‘ĸ¸TˆuĨ[šruėZ,Å˚maāÄÂëę:qH§‘ĸķÄ5)ĘrÔ΁:ŪuV•; B ÎĐ-C☠6ÖôkígN!DQ-^îû@NŠ’\JD?ÅŽŪ“oKĨŋ×OŒG9å6ņIENDŽB`‚ pix[271]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1040_U3öKIDATH‰íÕÁnƒ0 `#šLbĮ&x“eOVģo–Û^#ācĻĄz Ŗšb8ė2ij¤ ”Oā8ą)Y;>ŋo„-ü{ŨÆCúŸõÃWLkďMBĢj–0Ų¨o5­Ķ™¯Ô5šhN\•ĒTUŸČĶš\YGWK@lá[EÜ2ÔsâV•X§¯U/mF˛čL,öîåģŠyšŖÆBLģ:!<ŠŖ˛h†ŌäiŠ:d: Ž"ãô†g3ē)öÂ9…U§K:hWĩŨÉeUeęĄÎ)Ŧ:Veb˙Í/A΄[WĩjˇĢ§ ¯ûúŒ:Tډ›5k†vûz ԓšģ‘QW&ƒ8kkŚDOQČ:¤hĶčvÎ ˆŌjkõR‚ %PZmī#•Š‚ÔŠ:hínhq*öĻJaĻčŦĒĢߍúÚûfüø^Ĩ{@Gˇ?tWÛņgú-ĮCōÍī×IENDŽB`‚ pix[272]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1054A#ÆŽKIDATH‰íÕÁnƒ0 `#šLbĮ&x“eOVģo–Û^#ācĻĄz Ŗšb8ė2ij¤ ”Oā8ą)Y;>ŋo„-ü{ŨÆCúŸõÃWLkďMBĢj–0Ų¨o5­Ķ™¯Ô5šhN\•ĒTUŸČĶš\YGWK@lá[EÜ2ÔsâV•X§¯U/mF˛čL,öîåģŠyšŖÆBLģ:!<ŠŖ˛h†ŌäiŠ:d: Ž"ãô†g3ē)öÂ9…U§K:hWĩŨÉeUeęĄÎ)Ŧ:Veb˙Í/A΄[WĩjˇĢ§ ¯ûúŒ:Tډ›5k†vûz ԓšģ‘QW&ƒ8kkŚDOQČ:¤hĶčvÎ ˆŌjkõR‚ %PZmī#•Š‚ÔŠ:hínhq*öĻJaĻčŦĒĢߍúÚûfüø^Ĩ{@Gˇ?tWÛņgú-ĮCōÍī×IENDŽB`‚ pix[273]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1039iČ•NIDATH‰íĶAj!Вpđ},†xŗŅės%Cî<‚KŌ•oĪ&é߆,˛Œé~ĸeU):Qîz×˙¨‹iiɞ-¸j¯Å4Ų‘Ę„āøš] ‚ Lņ‹IXEU“o6Í{Z/Z ĶPļM!‹eZæâ5BÍī5{¤R¸ÆUŅ\Ļ=mĸ¯JĸŠwškWr#h¨sŠĪĸoTõgM{;kŌâM鄉UaÕ'‹IöôhĪPŋ§îŦ"ķVĪ]Ņéļqŋ¨@m%yžčƒčK#jV|-¤‚F3Z^zĀÛęŋwM˛,áģ>ĒcŠ3j{ģ2õ%Dmr@įmÎąÅw­ŽD…-ël´äbĢ z@dЅôsq ¯;u%ŲčOØáĢÚFU‘‰(GZ…~6™œĻĖu î´Ļ‹+šžöÆÍ?Đ|“æ­VÖĪ|üĄ~H‡y.3ŸˆŌIENDŽB`‚ pix[274]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1053ßGS NIDATH‰íĶAj!Вpđ},†xŗŅės%Cî<‚KŌ•oĪ&é߆,˛Œé~ĸeU):Qîz×˙¨‹iiɞ-¸j¯Å4Ų‘Ę„āøš] ‚ Lņ‹IXEU“o6Í{Z/Z ĶPļM!‹eZæâ5BÍī5{¤R¸ÆUŅ\Ļ=mĸ¯JĸŠwškWr#h¨sŠĪĸoTõgM{;kŌâM鄉UaÕ'‹IöôhĪPŋ§îŦ"ķVĪ]Ņéļqŋ¨@m%yžčƒčK#jV|-¤‚F3Z^zĀÛęŋwM˛,áģ>ĒcŠ3j{ģ2õ%Dmr@įmÎąÅw­ŽD…-ël´äbĢ z@dЅôsq ¯;u%ŲčOØáĢÚFU‘‰(GZ…~6™œĻĖu î´Ļ‹+šžöÆÍ?Đ|“æ­VÖĪ|üĄ~H‡y.3ŸˆŌIENDŽB`‚ pix[275]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1038Ī-ƒIDATH‰íÕŊNÃ0đŗ\á­aei^Ą#RxŦ•â¨ÂŖ`ÄĀ[€û–X<„ģ_JsΆā¤ĒQ~ŽsļĪqG•§šŲ6ŧf7ŲŌņ‚´%ƒ?ĸÛÔĻëËŠ5ô–Wz ĸ;üÍ͇¤‡g­üė¸Õŋūm}ÕŨggu?ĢØ)ļŦŠj˜ß./ę÷i‡bxá¤íY­âHŗföS%ÍáJûKĪē2<@Ũ4+¯Ų¯4÷z”ú9gÍŽ…šĸrĮ1s:ČjĄÁ`Øĩė‹ÚĄoh,Ģ3”¨ jeÅ$ĨŦqúĸ7sÚ/MZ˂ną]WŌ t'*܅Ã:ëŗ ~k“ĩĢ9j_•Ô>Bk)įŦ´1QÖ´JD:Ė)……°FP•ŅLåÖqį˛V˛îPņëĸĸ0T/iBk)įŦ´1QÖ´JD:Ė)……°FP•ŅLåÖqį˛V˛îPņëĸĸ0T/iŽRye"ž‰ĸ¨œī ė7 7øÆZy¨o•qí§ō;Y/ÖęEí/ä¨÷IENDŽB`‚ pix[278]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10511I2!¨IDATH‰åÔąNÃ0ā‹2xAĘĘPÉŽRye"ž‰ĸ¨œī ė7 7øÆZy¨o•qí§ō;Y/ÖęEí/ä¨÷IENDŽB`‚ pix[279]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1036ųw”IDATH‰íÕ1jÃ0Đ˙Ô[ÔąCˆr„ŽJt•ŖCAĘIz”Ē'čē:ÄĄß/;vcKĘVčAÖãËßō— ´h-čŠoaęv|}Ņ7Ф )<ÉŲ<įąjųs-´Ģ^õ˙ęĮØų¤ˆõØwęĀĩíՃĘôíŽ<ŧ'2×=Å4Œ<ØdúŠŌ0ļšZät'E™ë ĮchrÔĘAĮžĢW–:ėÄLŖîgfՖO•Ĩ*3tļ&×u ŦŌĪ:Ī*čūÁdV\ę)-˛Ō‡Ate՜ÆĻ°V4*‘/*¯ųÅ8ģŠî.(šG^nr*WœÔšŠ>4˜fŠč=ĻbMēá(rŊn×\˛Ļ ZUTÛĢôúxA9”˛:ŠåũPWäũPÖ-ĀNPV“i…œq&ByÅjMĐ×Ģ7`t%Šžų‚įšnŌjŨ–”ĮZ. [TŪGØšU]Ō´-ÜA~2$M{ßÃËjĨ *"ÔūÎIi<ŠŌũ4˜fŠč=ĻbMēá(rŊn×\˛Ļ ZUTÛĢôúxA9”˛:ŠåũPWäũPÖ-ĀNPV“i…œq&ByÅjMĐ×Ģ7`t%Šžų‚įšnŌjŨ–”ĮZ. [TŪGØšU]Ō´-ÜA~2$M{ßÃËjĨ *"ÔūÎIi<ŠŌũ¯3^V[ôƒoßE}¯O5VUÍŦųūž•vízŨåûaŌ -DŅĖŧéTŨąšgĻ䊁Š“z%Ļ(¯ë°(ŨwzŊá…>V¨z%ų„nĄę¨\RĪÍyË"¤Æs1ˆs¨DŨyŊ5\z5VŊĒČ 9G\g”ÎYaŠS~ŖA`j]%ĶhĐRŖĒč'eAÛíĒRuZ¨ŦĒ8˛í˛9a÷ÔC´!jĪ5îĐÜŧš^8ŽKD& pz"Ђ{Ÿr86Ķô4D‘¨Œ¨´ōĪŲqO{˜?m#eNC{ũÛ?öz×OG8ÖūIENDŽB`‚ pix[284]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1048QŽģÄ—IDATH‰íÔ;NÄ0Љ\lé–ákĐųb+Ų@ąåĢxEAÉ0âXĸ Âō0ãlüÉfАh6M"ŋğųđ—ËÂE/zŅŋ×7DXWoFЧJYÉ:‚*:ŋGà `Yt~V‹Ŧ€6'ęĻXŋÔéHO&ĐėhˇŦ/­ •<;ÚÄēĪúXÕ+Ë:¤Ą(E¯­)úZ5ōēč´3# }4FäíęŦĐëW>¯3^V[ôƒoßE}¯O5VUÍŦųūž•vízŨåûaŌ -DŅĖŧéTŨąšgĻ䊁Š“z%Ļ(¯ë°(ŨwzŊá…>V¨z%ų„nĄę¨\RĪÍyË"¤Æs1ˆs¨DŨyŊ5\z5VŊĒČ 9G\g”ÎYaŠS~ŖA`j]%ĶhĐRŖĒč'eAÛíĒRuZ¨ŦĒ8˛í˛9a÷ÔC´!jĪ5îĐÜŧš^8ŽKD& pz"Ђ{Ÿr86Ķô4D‘¨Œ¨´ōĪŲqO{˜?m#eNC{ũÛ?öz×OG8ÖūIENDŽB`‚ pix[285]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1033‰ô‹€IDATH‰ÍÔąj1 Pŧüõü[Ũ|7õ3ú)qčĐąŸC‡Ž5Íâ#UéМä!´´>đq<Œå“, qč™įdmô6PŒûĢ•âa¤ŧķHi¤;ÚD]ßčq {Ú]C吊‘6ƒEēúŧŋĒûĄ˙eĖ?̜¸Ö@äUMĒŅ´B <UPƒĻéR¨đKŲז˜ĀŸbģÔĐÖ0W‡N<ēę§fĢĩšæ'´E\›oˇSß\SoĐd)æëXCķh’Ŧ…õŊ닲ÖQ×'em×-mךĪjĘĒ67Đ ŦeŨsrĖŦüÂ?FVĪųMĸR× 1҇ĻČʏĸ\Ö9€ķY}ž1’–“ö°eåûĀÅÕËrU“_ŠIZY#ÚĶ—¤åÎw=Žu>ĢéíęRpöËŊëēÎ>k šĒjšOŦöU¨+Vt _ģ4ŗōrWŦXą|šfƒ6ŗîϔ,8Ο¨Å@āYëfÜ:NGÖfŠéĘĨģ˙}ü™~hŽ•ô^Ä7IENDŽB`‚ pix[286]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1047Á1ĻU€IDATH‰ÍÔąj1 Pŧüõü[Ũ|7õ3ú)qčĐąŸC‡Ž5Íâ#UéМä!´´>đq<Œå“, qč™įdmô6PŒûĢ•âa¤ŧķHi¤;ÚD]ßčq {Ú]C吊‘6ƒEēúŧŋĒûĄ˙eĖ?̜¸Ö@äUMĒŅ´B <UPƒĻéR¨đKŲז˜ĀŸbģÔĐÖ0W‡N<ēę§fĢĩšæ'´E\›oˇSß\SoĐd)æëXCķh’Ŧ…õŊ닲ÖQ×'em×-mךĪjĘĒ67Đ ŦeŨsrĖŦüÂ?FVĪųMĸR× 1҇ĻČʏĸ\Ö9€ķY}ž1’–“ö°eåûĀÅÕËrU“_ŠIZY#ÚĶ—¤åÎw=Žu>ĢéíęRpöËŊëēÎ>k šĒjšOŦöU¨+Vt _ģ4ŗōrWŦXą|šfƒ6ŗîϔ,8Ο¨Å@āYëfÜ:NGÖfŠéĘĨģ˙}ü™~hŽ•ô^Ä7IENDŽB`‚ pix[287]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1032ūÄlIDATH‰åÔąjÃ0ā_hĐRPĮ!z…Œ™ĸWę˜!Ô÷hęÔą¯ č ¨S=_O íŸ2 x1čsŦģû¯\„ģŌĪĶÛė÷ÎõëĒž^U# ĶHÉđ‚0Ržá89æ j[ú-ޞlĢh>opŠųÁÎr#øuUĸS€ ŠVÃ)šb!Å]ęb¤]dOSJŲ§­–ß֊ĻyãE-Kše ĩëŗ/]ßU=†ŧĩĸëŽp:MikęH'Ļ-t5M°[÷[mWB$eV]eZM•9w}‘HI°ļFšĘrü“ĘžōŒŪ,›.júge:i韕9í-)ŗr=ÃĻIUÉ˙ƒķŖ+#Mĸ^Iaļ,9Дá•|sWčZÛDãHUŅ„ Ē§ŖÅ” UÕtįd”Ošrņō3:`īæõ$ynš€ŖÉŠÖ ë œ´Œx‰Ĩu‹ĒåÛë–ÃĄå5e'؟eíœ$ĪįUMá÷š›8ŊWú .z'˛mmĶIENDŽB`‚ pix[288]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1046ļ6–ÃlIDATH‰åÔąjÃ0ā_hĐRPĮ!z…Œ™ĸWę˜!Ô÷hęÔą¯ č ¨S=_O íŸ2 x1čsŦģû¯\„ģŌĪĶÛė÷ÎõëĒž^U# ĶHÉđ‚0Ržá89æ j[ú-ޞlĢh>opŠųÁÎr#øuUĸS€ ŠVÃ)šb!Å]ęb¤]dOSJŲ§­–ß֊ĻyãE-Kše ĩëŗ/]ßU=†ŧĩĸëŽp:MikęH'Ļ-t5M°[÷[mWB$eV]eZM•9w}‘HI°ļFšĘrü“ĘžōŒŪ,›.júge:i韕9í-)ŗr=ÃĻIUÉ˙ƒķŖ+#Mĸ^Iaļ,9Дá•|sWčZÛDãHUŅ„ Ē§ŖÅ” UÕtįd”Ošrņō3:`īæõ$ynš€ŖÉŠÖ ë œ´Œx‰Ĩu‹ĒåÛë–ÃĄå5e'؟eíœ$ĪįUMá÷š›8ŊWú .z'˛mmĶIENDŽB`‚ pix[289]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1031g•§„IDATH‰íÕ=rà ā§0ĨŖuá1×HĮUrßRåX!'ČÂčÂL4"ųO6k)âQ#¤o`veŖ,\˙úÛúņ'ŗē‰ŽvIŗYĐôdJnĻ4”Ø_Ķ@õjIŅ•‹Õg+ā8]ĶpW4ÃđŽD›\Ģ6ĢhK°ēUosŋ׎Õ`SĪ Ū@T¸ĢŸ¨ˇŅ$îyAõ@Ũ Yy¨.”÷sũŦû՞šĒQ™W„{ģÔ¯)nÕ÷|ŠĶĀQ_T–ivēŠĘ: ĘĶÚtŧÁŠęŌZq ą‚UW=¨}Ģ|íŌC_ã*A įâN%áœĢF0a•eĩ“ž ķ îv7ÔphOjOĘÂׄ[Ŋ;¨:Wŗ 6ē§v¯gĒw ƒŨė-Y—ĶAīįR+䆸ÉyR]uĢÆļ'ĢÖØHjlOÃCeĒGVƒÔąj`Wx<Š'Yc+>Ž:Š 5ļæãA¨`ķÅFŦo™Úš?zã8R_ÍۘR?¯ažį­˙dũ9ä$Üč -ŲIENDŽB`‚ pix[290]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1045/?Įy„IDATH‰íÕ=rà ā§0ĨŖuá1×HĮUrßRåX!'ČÂčÂL4"ųO6k)âQ#¤o`veŖ,\˙úÛúņ'ŗē‰ŽvIŗYĐôdJnĻ4”Ø_Ķ@õjIŅ•‹Õg+ā8]ĶpW4ÃđŽD›\Ģ6ĢhK°ēUosŋ׎Õ`SĪ Ū@T¸ĢŸ¨ˇŅ$îyAõ@Ũ Yy¨.”÷sũŦû՞šĒQ™W„{ģÔ¯)nÕ÷|ŠĶĀQ_T–ivēŠĘ: ĘĶÚtŧÁŠęŌZq ą‚UW=¨}Ģ|íŌC_ã*A įâN%áœĢF0a•eĩ“ž ķ îv7ÔphOjOĘÂׄ[Ŋ;¨:Wŗ 6ē§v¯gĒw ƒŨė-Y—ĶAīįR+䆸ÉyR]uĢÆļ'ĢÖØHjlOÃCeĒGVƒÔąj`Wx<Š'Yc+>Ž:Š 5ļæãA¨`ķÅFŦo™Úš?zã8R_ÍۘR?¯ažį­˙dũ9ä$Üč -ŲIENDŽB`‚ pix[291]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1030Ĩ1žIDATH‰íÕ?NÃ0đyž’ĀÚĄ"‰‘Ą") Įā(¸â\!ˆÕAD~|vÚüi^"bĢŠQ~ßkęĪ%fʓ-הی™ß˜/x? b~|Ų”D”Ųöj î–Čā`cēU_—Ŗ,ĒB™åP9mŪlBī~A'Œ&>:ŒJÜ+Ŗõ÷z˙ũIŨíŦ>lÛSōĮüĐŠëĨLqE93"ō:V$/faیgĻ”Ë_ŨéWĢ>čÂp ]{†ÚĨŽŅLÆjĄĢąšæ¤Nš@KNwŊ+œĸž Z÷õšÕZ(ˇĒđ˛(-ŠŪĢ´ÖqîBs9ĨkF“VV5̏×C‹I­Ī4ßMj5ĢnĄ9ÔōÆøFsYkÔ ZØĘT§“ē†^ uĢø$ĄnRņ§ÎĒ*—3JWDųXM¨KqIņëÛ9 y(eeÕŦØZĐkŦ+Ä$ŦgĄ+J8ŲŠđ Ęņ ÂʑÔâ˙—Lˆĸ´bKĘpx„Ü tAsōŊMĒ;ũÄž›+„ž9n,ašZYÛ„™Ĩņú L";˜$ˇęvIENDŽB`‚ pix[292]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1044X8÷īžIDATH‰íÕ?NÃ0đyž’ĀÚĄ"‰‘Ą") Įā(¸â\!ˆÕAD~|vÚüi^"bĢŠQ~ßkęĪ%fʓ-הی™ß˜/x? b~|Ų”D”Ųöj î–Čā`cēU_—Ŗ,ĒB™åP9mŪlBī~A'Œ&>:ŒJÜ+Ŗõ÷z˙ũIŨíŦ>lÛSōĮüĐŠëĨLqE93"ō:V$/faیgĻ”Ë_ŨéWĢ>čÂp ]{†ÚĨŽŅLÆjĄĢąšæ¤Nš@KNwŊ+œĸž Z÷õšÕZ(ˇĒđ˛(-ŠŪĢ´ÖqîBs9ĨkF“VV5̏×C‹I­Ī4ßMj5ĢnĄ9ÔōÆøFsYkÔ ZØĘT§“ē†^ uĢø$ĄnRņ§ÎĒ*—3JWDųXM¨KqIņëÛ9 y(eeÕŦØZĐkŦ+Ä$ŦgĄ+J8ŲŠđ Ęņ ÂʑÔâ˙—Lˆĸ´bKĘpx„Ü tAsōŊMĒ;ũÄž›+„ž9n,ašZYÛ„™Ĩņú L";˜$ˇęvIENDŽB`‚ pix[293]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1029pĶ,ÔĻIDATH‰ÅÔANÃ0ĀĩŒđü ÂOā! qč‘'đĖ‘SŸ@‡1ęH5YÖnAĸģ6HÂ7;Ífc¯Øļ/u,.ę:v-ĻõÜļ;h5ķjSsC“meūŗĻ.šúļƒļĢúG]í–ųq­gv?<÷ŊŽwBæč0öåŽA‡Zk@|Ô;ô:˙)¯*P Ín„žŠ7ÅVŌQš)‹ÕPež~)Ļ@ڑúsØÖ‘4Úĸ˜úĸąŸ ûļ‚7ôąOŲUÕ]LßĢ*˙Ž/š"§¨“ˆ^b“ŽB9ļA'ĄIGĄž %$=ܒ•cpŧÉgĩĮšÆĀsĻÚbîĸ›o•žĐ•é R(“ŸyO5,j¨QQ& )ĩöŧŅDü XU˙ Št¯Ö¨žĸ‚šĒUŨŪÔôîvM}MMRĸ˛ģSÄ<{Uĩ¸ î%$ ŌIENDŽB`‚ pix[298]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1041(R`DIDATH‰íÔ1RÃ0Đ¯Qa:Ĩ¤3G ¤ķUrĘtö 8W1CÅ)đÜĄBŖÍ—E ‰ÖbH—{&Öŗ˛kkeČqŧŊž\J\õĒŋĐįĒ>UÕ]LßĢ*˙Ž/š"§¨“ˆ^b“ŽB9ļA'ĄIGĄž %$=ܒ•cpŧÉgĩĮšÆĀsĻÚbîĸ›o•žĐ•é R(“ŸyO5,j¨QQ& )ĩöŧŅDü XU˙ Št¯Ö¨žĸ‚šĒUŨŪÔôîvM}MMRĸ˛ģSÄ<{Uĩ¸ î%$ ŌIENDŽB`‚ pix[299]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1026āl1EIDATH‰íÔŊNÃ0đŗ*Ũnlčr §Ø›m3o]-Öīļ.ąú¸éH­+^ĘõžÔĶĒ> z0ËĄäld@hM_R}ĄÔŦU?ŠÍOŽĢ? —öu=wÁđŠJœuĒęf=ÛŅåĘč°q¯ģuOũR?S(ēS{ĐS‡įąZdm´y ¯šZnĩģĄžTvŖ›đ5ėKé[ŊUzĒŪ92uLß+/ĪģäĪŋŨą_¸,IûĪ*Ũnlčr §Ø›m3o]-Öīļ.ąú¸éH­+^ĘõžÔĶĒ> z0ËĄäld@hM_R}ĄÔŦU?ŠÍOŽĢ? —öu=wÁđŠJœuĒęf=ÛŅåĘč°q¯ģuOũR?S(ēS{ĐS‡įąZdm´y ¯šZnĩģĄžTvŖ›đ5ėKé[ŊUzĒŪ92uLß+/ĪģäĪŋŨą_¸,IûĪ™ŽZDsSŠQ__žCYíĸĄ×ļ Kû7&MųY^°ílœ„č8ģĄ~ŋöúq-O6w2”IENDŽB`‚ pix[304]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1023ÅĘhIDATH‰íÕ=N!đ?Ą˜r.`äV˛GōF¸™t–aé,d‹#}o>6;Œ&&Ģ…üŧŧ$j&•š÷A/G÷ ]ˇmMß×įĖŊ–+ēú÷_Šę_¯Ą/ÜEŒĨŗÔ׍éPš6Ї hIÛLƒL“ôÉĄõ% ƒJl¨vĩÛz'ŦÂNæąâ‘ÔB9]ŠqPãōŗęΚl*(¤pڊēzÃ;ä֏DEAŅ™( +ÚÁ„ĸŽ UŠĘ9‘öí¤Yi€HŨŦVgJ@ÕU\hi_?kÅl649=^ ¯2ļã ũ¨Ķõ†ŗ.į*ģŌĪŗ(Ļ)‘lßWSē_.0§PSņĨŪÖ4h[V(ô˛ĸP‹i5î JɡŊÁS]ŠBKړēAãô?Εkzė™z¨Ž 5WŪ—ß2Õî[Ž”‘ĸŧ™G–ßĢõ˙˙Ī|—z´ÚCūŸĐcIENDŽB`‚ pix[305]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1037Žp0’hIDATH‰íÕ=N!đ?Ą˜r.`äV˛GōF¸™t–aé,d‹#}o>6;Œ&&Ģ…üŧŧ$j&•š÷A/G÷ ]ˇmMß×įĖŊ–+ēú÷_Šę_¯Ą/ÜEŒĨŗÔ׍éPš6Ї hIÛLƒL“ôÉĄõ% ƒJl¨vĩÛz'ŦÂNæąâ‘ÔB9]ŠqPãōŗęΚl*(¤pڊēzÃ;ä֏DEAŅ™( +ÚÁ„ĸŽ UŠĘ9‘öí¤Yi€HŨŦVgJ@ÕU\hi_?kÅl649=^ ¯2ļã ũ¨Ķõ†ŗ.į*ģŌĪŗ(Ļ)‘lßWSē_.0§PSņĨŪÖ4h[V(ô˛ĸP‹i5î JɡŊÁS]ŠBKړēAãô?Εkzė™z¨Ž 5WŪ—ß2Õî[Ž”‘ĸŧ™G–ßĢõ˙˙Ī|—z´ÚCūŸĐcIENDŽB`‚ pix[306]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1022įõ\ŠIDATH‰íĶŊN!đAŠíŽÖâr<ƒąą0ĮĢø áM|ŪD KąÃÁ˙ėy1ģ°ãGc$—l2ŋ›]f¨Ž,GQ‹]ĶlVu5ˇ|cW˙ú)}]Õô ôĶzj´žæž&DĻfŨjÄņȚÉT/ųĪSõļ’¨žtÆcĻ÷žlAĀ‘>ƧšŽlF€H-htK4 n{:ø=ETĢønÂĩČ2h×h€Ē°…úQgõ:uduÆsųnIø]s :îDî˛.čFfAĮ}´ĒŽ„ B s5IŨĄzęĄ\'ņQWƒ$žŖŌÕHÃO3ĨQmÆmĨÁuuwTĩ¤šÕôuCÖtYOĶÍÚgIĮ{…>w ]žĸޞrÛÚŽwjA‰õ|ČKMxWÛSŽĐÎŌ\Oš„gmNęGŨˇĘçüļT[•¸Ķƒ 2po¤Šĸ_pÄØąŒŦ/ķ\Ą/ã„Ęc`ĒI˜îLĒQ ü™BēҧŦĒW<¨5ÔFy%ô“üøT]Yŋ¨oj˜üOûIENDŽB`‚ pix[307]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1036ųwŠIDATH‰íĶŊN!đAŠíŽÖâr<ƒąą0ĮĢø áM|ŪD KąÃÁ˙ėy1ģ°ãGc$—l2ŋ›]f¨Ž,GQ‹]ĶlVu5ˇ|cW˙ú)}]Õô ôĶzj´žæž&DĻfŨjÄņȚÉT/ųĪSõļ’¨žtÆcĻ÷žlAĀ‘>ƧšŽlF€H-htK4 n{:ø=ETĢønÂĩČ2h×h€Ē°…úQgõ:uduÆsųnIø]s :îDî˛.čFfAĮ}´ĒŽ„ B s5IŨĄzęĄ\'ņQWƒ$žŖŌÕHÃO3ĨQmÆmĨÁuuwTĩ¤šÕôuCÖtYOĶÍÚgIĮ{…>w ]žĸޞrÛÚŽwjA‰õ|ČKMxWÛSŽĐÎŌ\Oš„gmNęGŨˇĘçüļT[•¸Ķƒ 2po¤Šĸ_pÄØąŒŦ/ķ\Ą/ã„Ęc`ĒI˜îLĒQ ü™BēҧŦĒW<¨5ÔFy%ô“üøT]Yŋ¨oj˜üOûIENDŽB`‚ pix[308]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1021~¤ætIDATH‰ÕÕAN!ā1eɸ‚KĻ\ÅchL.{%7ŪBŧÆ ‰“Áĩĩņ.jbJfŅ™¯ķā=x ÷‡ÃĶPø×j†ĒĐqäņĒNTãú6Ô÷#VubúŌ×Ķ&įMK“Ė öĐL“Íté(ĻŅŌĪÉCŖ:C'ŲŌ€ĸUŲŧžĒÆĨ(âjSŅĢĸSKEXáQ?˛jRΰFøŽģ×DķĘxFīļ´d$gŲS_Õ/˛ĄÁD5ËWԃ„~hžIWŠŦį˛I˛Ŗb =jǚEĒĘjĩWéÛ^ų7UmÕu^¯é*ŧõ=ÍĀuüL~iÆmGUÕģø™ÜŠģČą§toZkA÷ĻyĢčjR”-Ĩ4VíyF¤’t!u\i\m•Wf.Ŋpœķ= %¨×¨ŖĨë”ö¨Ųe°”ŒkŸēĸTD_ē[0 U':Ė ü;XÎiÔ &,j§Ôņ9m_úČL;ãßôT$ ]ÍŪÂÛIENDŽB`‚ pix[309]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1020 ”pbIDATH‰íÕąNÃ0āßōā0˛ų5Ø,ž„Šjŗđ\æIđÆHØ2X>~§”Ļ ‰ĄxiÔOvî.w dcüëßRw•Q]hŲÔėUßēŪķrŌËĶŦČS[•˜ļž“ü-‚†™`TSŗ‘CëĶĐÉHÂÛZÉ0q€ĪkÍÔpk‚ ]ŨiĒëiQŅF7ĩTŨ؈9RE%jjæ[Õ{ŠIāûĘ2úĐĶPŸD_=+‰f3uĻÕÕTSķˇęŽîĄ˛ŲPl¨—tß×[Ôž\įĢgj_ūTį“ĮĻNŗ>l*|ÕuT_ęÆĄĀ5”C¸4H3_ÁŦvĩ÷õ ė*›ag-•ŲîŲąÁrØøô3÷ĨîØíŒĢÆ\ qŌĖËx§SŊķœt9Sާaļūprp‹˜'րķËVË^fT•›r}3×rĘ`øŪ(Į*Ž”%ôō!-e™9 gëJŋ Ÿ–,Dž—ŅIENDŽB`‚ pix[310]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1034ya(bIDATH‰íÕąNÃ0āßōā0˛ų5Ø,ž„Šjŗđ\æIđÆHØ2X>~§”Ļ ‰ĄxiÔOvî.w dcüëßRw•Q]hŲÔėUßēŪķrŌËĶŦČS[•˜ļž“ü-‚†™`TSŗ‘CëĶĐÉHÂÛZÉ0q€ĪkÍÔpk‚ ]ŨiĒëiQŅF7ĩTŨ؈9RE%jjæ[Õ{ŠIāûĘ2úĐĶPŸD_=+‰f3uĻÕÕTSķˇęŽîĄ˛ŲPl¨—tß×[Ôž\įĢgj_ūTį“ĮĻNŗ>l*|ÕuT_ęÆĄĀ5”C¸4H3_ÁŦvĩ÷õ ė*›ag-•ŲîŲąÁrØøô3÷ĨîØíŒĢÆ\ qŌĖËx§SŊķœt9Sާaļūprp‹˜'րķËVË^fT•›r}3×rĘ`øŪ(Į*Ž”%ôō!-e™9 gëJŋ Ÿ–,Dž—ŅIENDŽB`‚ pix[311]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1019[ū‹IDATH‰íÔ=n!āˇ" %m Ë\#…åMn’“xš™‘|šp‹”"ˆÉ°˙ļ”22Wū¤]x3 čÆ2xčC˙ŗę[Õ- Š’li€"ßĩÔŗ:PBS †ŨÖ>˙ ¯~Đ2B”{†J°Ŧ" +ÕęÔyeĐy T§c”™ÁCME”`č+˛.á”­ĒŒbTWĒ՞ÕŦ˛ę?ŠMđēŠ\†ĐWÕMškĒ‚ Č˙›–Žq‹ŠöY=—•Ŧ&uŠ–3Ģž§2Õ*8iČZĢūā´d%ŨPÄŋ•j˛JJÜņŽÜÕš–įõ™ÛļĄ^û'‘÷TŠQV΂sŦ¨Åā•C—“*Õđ%8hY_žAŲ—.r…jŠ Ė먧ęŸ”aŅ… Ũw•u…ÖSol~•īVĘĘk1õFNJî=g{Ö9GŨķÛķĨ—öØą?ę–g‡âĪķĄĮŪXĶÎë=}žŒ§ŠįÆRąōøģPëÉ:S´ šč‹ŽÖ8‘æŠöQ_Ķ!›yC&íÛxoļ˙„˜|›ķ IENDŽB`‚ pix[312]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1033‰ô‹‹IDATH‰íÔ=n!āˇ" %m Ë\#…åMn’“xš™‘|šp‹”"ˆÉ°˙ļ”22Wū¤]x3 čÆ2xčC˙ŗę[Õ- Š’li€"ßĩÔŗ:PBS †ŨÖ>˙ ¯~Đ2B”{†J°Ŧ" +ÕęÔyeĐy T§c”™ÁCME”`č+˛.á”­ĒŒbTWĒ՞ÕŦ˛ę?ŠMđēŠ\†ĐWÕMškĒ‚ Č˙›–Žq‹ŠöY=—•Ŧ&uŠ–3Ģž§2Õ*8iČZĢūā´d%ŨPÄŋ•j˛JJÜņŽÜÕš–įõ™ÛļĄ^û'‘÷TŠQV΂sŦ¨Åā•C—“*Õđ%8hY_žAŲ—.r…jŠ Ė먧ęŸ”aŅ… Ũw•u…ÖSol~•īVĘĘk1õFNJî=g{Ö9GŨķÛķĨ—öØą?ę–g‡âĪķĄĮŪXĶÎë=}žŒ§ŠįÆRąōøģPëÉ:S´ šč‹ŽÖ8‘æŠöQ_Ķ!›yC&íÛxoļ˙„˜|›ķ IENDŽB`‚ pix[313]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1018,ųOlIDATH‰íÔ1n!Đ?ĸ $eŠČ\Áˆ´9Jސԅˆ|\….× 7 b2Ŧ•fÖ]”ÆĢ-V<ÁĖ ā+OÄMozĶŋĶEŅ÷úje”šĐŦŨ•¸ÃqÂ2iŗõĄÂ0ā'-vL* ™Ą C}5Ā^j•Ą8šYĪ.íp0Õ¨Zm\T­pÚYÛ¤íGã^QŽŽ™nﴈ˛IהRĀ^‰JTé‹q°ÚIŌp´eC!ą}žÎj¨'UeŽ2sšrôĢRŅĢÚD%"Ĩ6Š-ČëÜ.ŋž5c- îJÕ‚(gŠ-ŗŠŒ 6ĢÅ);EíYã’ŧĻqÕäĮ†æũ&“č4”?Ô͍DœvħIŗdŋĘŌ選MÕfDī‰IS Ō rÖ—ÚŠZ„¸ęįÔGCąęÔ)Xđâđ¸­pc]ĩáãxņ´ĄŌûqVzŦœ${0Yš7ęŨ Ņ¨uŨę|›õQqáüũowė7Ŧ>÷7{ŖIENDŽB`‚ pix[314]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1017ŧFRMIDATH‰ÕÔÁN!āŸė‹ GŊņ =zh˛¯â#xôT¸ųZŧ‰øx*Ļ”qĻMÔîšÔh•MvŋĀ ,hĄyü†n/wQŸ.÷ojõú2Yũk­Æõ4:*-}¤ >՝<Ę3‚>û˛įh%Øä‰ũĘS*Š0x˜ŽĨL…5t´ôˇ:č†îē‚ņë™ōhIvŖ‚ c˜kuÍsĨ, VÛVŪ*P3×"Š0ú1ĩUeD×T+ų -ęYÔĨyV;Ņ-g j(˙Šĸ*6_¨ĸfÎŦôõ‡ŦúšyE}ĨĐŲI‰ËjĪP}Ôhúzį–4t4ëĘęĮpŽōŠĢJ4vÎdaõWā˧š¤Roq˜ŠfĀúÕ€U[M€fŊoĢŽŌ‘ēj”ÄhÍĖ7C†*īËũ\ƒ0Ž|īɊäâQüÚÚh?¨oH3ŋ…(gIIENDŽB`‚ pix[315]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1016ËAb†QIDATH‰íÔąNÃ0āß2"fd@ø;Tō+udËIŧ˜7F^áĢ7“í(Ÿ4†ēŸĩc=¤¯ĸ¯u‚œ2¤cųĻN ÁĻ+$IJjd`2 _—5ŋž,Ņú* ī’_Õ<”ˇô]gX͞΍d^b^Š•j20ä”ĩevÄuŨWļ%zH%­ûūsĒdųcnu>˙n>/zAa7ĻotIENDŽB`‚ pix[316]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1015RH3<IDATH‰ÅÕ=nà đ?ĸ#7(9BĮLEŊI1SĄęAr÷&lŨ*ē1 ^Q•DæcHTŒ%Ė ~đ0hryÜEÍL‹ū/͡č|ÎöN‘dMîzķž7Ėę ÍSMSsu7čôÍ?k=}Ŧ´h*\ö†.–å¤YS‚+PĩÁZ 4EØI\Zkæē!2ÚžU—­Ȱ]õY-{Õʎû^”w~§[Ĩ¤IéŨōj:Ę_$¨**I`¨ĨĒŠ¯šmŖéO=Lęiæ .ÎÃ%3R(TpT^*X3>ĒX“øšŠüļa¨Qeŗčž‚‚N´đæĢw}5Gåyáŧ+åX—ąōM~××"S˛xÔ#DÛŅ"‹ ϐ UÁĻ75PŪí.îepkMŪ“Ŧ:ėäŌhäÔ‰ˆŧŠ[…ķQŖęų°¸Pģl'NŌž‚u9Á{đŒšūĒŅĖÉáXsįd8ļ?ōÁbēJŠJ­r}mŽĒ‡ŠÎû^­ŋ‰Đ@tũZŸIENDŽB`‚ pix[317]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1029pĶ,ÔIDATH‰ÅÕ=nà đ?ĸ#7(9BĮLEŊI1SĄęAr÷&lŨ*ē1 ^Q•DæcHTŒ%Ė ~đ0hryÜEÍL‹ū/͡č|ÎöN‘dMîzķž7Ėę ÍSMSsu7čôÍ?k=}Ŧ´h*\ö†.–å¤YS‚+PĩÁZ 4EØI\Zkæē!2ÚžU—­Ȱ]õY-{Õʎû^”w~§[Ĩ¤IéŨōj:Ę_$¨**I`¨ĨĒŠ¯šmŖéO=Lęiæ .ÎÃ%3R(TpT^*X3>ĒX“øšŠüļa¨Qeŗčž‚‚N´đæĢw}5Gåyáŧ+åX—ąōM~××"S˛xÔ#DÛŅ"‹ ϐ UÁĻ75PŪí.îepkMŪ“Ŧ:ėäŌhäÔ‰ˆŧŠ[…ķQŖęų°¸Pģl'NŌž‚u9Á{đŒšūĒŅĖÉáXsįd8ļ?ōÁbēJŠJ­r}mŽĒ‡ŠÎû^­ŋ‰Đ@tũZŸIENDŽB`‚ pix[318]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1014%OĒ€IDATH‰íÕ1RC!ĐÅ?##7psK+ņH)­„ÜŒŖp:™Y—'ū|:ĮÆ-’ŸŧaūÂ.° `.Nu:ÖÎî§z;U3}¯‰?ĪŽČī4­_šÎąS—h[]h^úsŖcû×_VœĒũŖŦæšM¯‰QDōĒũū¸Ō‚”šÅAW€~l2”ĀXĘēŽĩ€Ą6ƒĘŧS÷šYÃōVI:Šz*˜L괒*&ēpĀ„}VHKÕŦ`ÍϞ†ĻYPŦē.~Ļ7íPŌzd 9ŗ–oæÛÔŦú¸„Ē@á(Ŧ3+×UŊ“•jtV"ȗŖ¤× eĸEÍ4ˇę5Ž>všÎ1Ũ´Í—‚˜‡ĘE˛cmŖE­ŦĨ.˛Ö%/cåΉF,C-šS'gĨ‹ö.ąJkE:Ī—ŽĐΟÁВ ß/Ø÷o/:ÅÖŖé;‡Õzhš„ 6 đĖ*Uŋi„7Öēšé.9ķ*$Å Í m{åȚÂönû“s2ē™Ö/‹@90”ķoëIENDŽB`‚ pix[319]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1028ÔB€IDATH‰íÕ1RC!ĐÅ?##7psK+ņH)­„ÜŒŖp:™Y—'ū|:ĮÆ-’ŸŧaūÂ.° `.Nu:ÖÎî§z;U3}¯‰?ĪŽČī4­_šÎąS—h[]h^úsŖcû×_VœĒũŖŦæšM¯‰QDōĒũū¸Ō‚”šÅAW€~l2”ĀXĘēŽĩ€Ą6ƒĘŧS÷šYÃōVI:Šz*˜L괒*&ēpĀ„}VHKÕŦ`ÍϞ†ĻYPŦē.~Ļ7íPŌzd 9ŗ–oæÛÔŦú¸„Ē@á(Ŧ3+×UŊ“•jtV"ȗŖ¤× eĸEÍ4ˇę5Ž>všÎ1Ũ´Í—‚˜‡ĘE˛cmŖE­ŦĨ.˛Ö%/cåΉF,C-šS'gĨ‹ö.ąJkE:Ī—ŽĐΟÁВ ß/Ø÷o/:ÅÖŖé;‡Õzhš„ 6 đĖ*Uŋi„7Öēšé.9ķ*$Å Í m{åȚÂönû“s2ē™Ö/‹@90”ķoëIENDŽB`‚ pix[320]: xres = 0, yres = 0 ‰PNG  IHDRg':bk8 pHYsb&2 tEXtComment1027—kĶķIDAT(‘MŅ1nÄ Đa-….\`r•šJސr‹UĖVšFŽB—k>](“ÍÚüŠ'Īč#îãqB?fKtEĮ8UČđG2†ˇUž„–Ø&° Å.­÷ fLeũv‚TÖŠLåŠe“A2ĖĻ<7EëßŦlĖ]áĩKzÁ4ĨD‘ žK3ę&-ŠsÛî›ęy‰ĢQ˛ ģL4ģâŲC_ģ$fGyK5ȍëĄĒX§]EŗĘf”\e•Z%ŋ4ëCË Ȥ=wį÷ ÅĪŽ°Äy:äÂEWw]ņĩIÉ퉰é.ōīÉ"įĶ!ō/&™ S˙‰ ![gĩŠ2IENDŽB`‚ pix[321]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1026āl1EÂIDATH‰íÔąn#!āYq)Ŧ#eŠČû.NæĩRX‚(’WAēâ^cĸŧR ÷ŗ6›ĩaˇKs:dŲÖ~b†a)×už–æŋaSŖŲŌÔāR;ãŋū;ú˛Ĩžô†ZüŦšˆTŖžjØTIŽĢ•­Ģ ¤fuúVąŸ0åÅ×bå!‘ÂU d"‰[u„5ŗĘŒ4ôt´˛ÔÄ÷U#$"xĸ[e"dƇ$īĻG¯×*"QXēc3á°: /Ŧiōbž<É­'ũ<Ÿ …J{QPūS‹&Ē:2ŦÜĄ$Ÿã~)JɊīĄsVÃŗfčČwôķü i¤š;GģŗÖ6HzŲWÚi(ļUOÁ,Õ8íī6ŪÖųĸ;É?ÎúûZ]QĨ‹–G/š*ģԔ:uõ‘öEûsí/œķēžČXĶ_ŗJ”(÷Tb]ƒŠrKKė WtZë5åŅ+§ŨʎŠ"†Ri?Zҟ”é\ÉFũČ{:’Ũ7waRŏ8>×Ū˛˛_čƒģ3éPßŪ}\Â! [4lŲĐĘOh×ÔžUđ‹“tQČĨbĢču™ßrŖevH|ũ˛\ĒkŪ…U?ō{özMûãõ/_ĀņŽ.ŒIENDŽB`‚ pix[322]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1024bPibIDATH‰ÕÕŊNÄ0 `—ŗ2  Á€”Wbŧ-=ŨĀcđ*AŧˆaaĩĉPãÜQÛ ē/mú5ķ[ČlĮÉÕ{WŸ\}sÕÁĢŽÚcščūlúęĒgUgqˆ’Ģø‡ēīŋŸõc]E+ž’Š]ʔUÅĖešh:E)gUŸ™aœAvlU´ō ÃgÍbēŠž@×HŠM;ŪŲn ņØđƒÆƒĸ“eĄņē×§†ßŧ*mjĩÁwęd4ä)ŅÆË$mWQjmG^%iøŗÜ™”[ ü^U‚ŌBđëšĸČôēÍ4fAaø +ēĒLJÎLA—T›˛ģEÜÛ E?9ĸ;ęįˇÔ]NũaJķr¨KŲÃJŗŠđeįT×ÅôCÆJ{ĸí+ŅIENDŽB`‚ pix[324]: xres = 0, yres = 0 ‰PNG  IHDR*˛…šú pHYsb&2 tEXtComment1020 ”pBIDAT(‘}Ō=n!āG(h,‘Ō…•Ŋ‚KV¸RŌ9’%H“c$WáÉ8åJA;yÃzŊv$ú4Ėđ)A˛“‘w™ )H˛R04…ĖF_á/Ѐ‰PāR‡3ā2Üo‡8št2ÅfØyIŦ.\ĩi†ĒPöŽaGĶË|ytLôõÄubŽ;ę˜šDží¨ÍrAā͍°<ÃB­ĸnF¨ēfŧĻéÍv5I×ÖĩØQ9[žš)‹ēUÛUI” w͛~\Sģfē(š!ķEs(Žė ´)9%–\ĩ‹Ö°§čuæ˛¯‘y>Ô´Ģ)JšĮZ‘Ũ4w´ę´jŧWŨī4ŋ*ßũVĻ?čŌņú-ÄË~Ô֕ĸĒÍ,:‡=5]ũŽR×Ŧiąl¤Ą’+:IËčJxa—ģÕ!Á'˜ŗrŪ>yĢjÕčš{¸ĶT&ŪΈi Ŋũg™/đ'ë*̚›y'oõ ΘlWŠ’éIENDŽB`‚ pix[326]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1012Ė,ϟNIDATH‰åÕ;n! `# JÚt\#U¸X$&ĘŐr åa; „c4ŗ-ļSE[„éæ2ŋ@„¯Š'äÆˆA°]QŌĶŽÂ¨ iSu¨ŠŌ_vĨVãĐ5má¯´ĢŠē ãŋh÷ĸöD1ĩEĖY5Ô‘ŌVũÄ ˇHiķĢzęœĐ vˇčp´_Hm]ĩ9,āH›kvQZ.ŋJ:Ļ[!V×í¤Z$ĩ’ĖŦΕßč)ĄZfWÅŅĖMŌ~ÖæĒĸŨ•ĩÅĀę8ķz ˇ4ŨTe˛ąk"LŽŽzrÕ<ĩ9M+“į š–Ä)ž?ũVÕá;¯ŗVÃ"{ž°ĢŒZ2ROĸh“4ũĀ$ÍÉ€'AËËTā´ęAģë’ēŲņuvč\yIŠkķxē îtŪBsyu7wqcÕS1ÅÍãŨxØũü;ČL˞žIENDŽB`‚ pix[327]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1009BåNVgIDATH‰ŨÔÁNÄ Đ!¸l‚GÆų?ˆŸâ'ėŅ$ü-~†€Ŋ‘ˆŒCˇ›@ˇíE›iûBčLÎ0tâaS¯ČkjíÄ?ëĮIŽęL´œäĒ~Iŗ]Ķbšg\dcOیí K ;mú§>č ĐéË@DlÅMi[}¯ƒ7äÁQ:ĶęnHhøŪøŒÚwš†œHčīDĀ‰Úš“[§ [-ŦžU$í,xĶ+í5ˤœu÷SĨáÍYf Ö=˜¨;}#út˜„uÛŠžÖũbĒJĮsèĨ*iŨŌĸÆuĨƒ ~ˆĄ×¯NĩīuȍqTk +ę/~ —ËĘøĢUE¸™Ķ4*Õŗ* j¨?ÉĄ‘5a̎“Ē;¨,’ŋŅŖžUŽ+ļ*˜™ŧûǃ¨"īHg‘¸… Ž ÛiÔ\íŠ;%ҌrrU¸V4§Oq\îŦRÆBËÚÅę7ĻOxxuĶOIENDŽB`‚ pix[328]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10085â~Ā:IDATH‰íÔŊnà đ?Ą*™ĘšĄ/b•1¯ÔĄ <Â#02X\Ī$ęG8ģęÍÉŌũdt>î ÚXģîēëÃ4QĢ§ĻŠÂŽZø%Kŧõ¨™#†2B’4‚ĸŸøq¯Ąq8ÂĮ M3@(.Ō¨‘Õ¤ ĒU˛V›/ZÖÜuŌķŗ¤„P\YÕØÕĖȚ}9™v€đE?tĢA‘˛¯GĶ4„Z]ĻŠ(֙ŌUĖŋ5,j›Ę¨”UHĄĢtŋß!VãĻÂĒī˛úĢļ-åæōb%ËĸzU]“prW3očiU—ÛŨP—'S—œ×õ‰ģNĐsqéM—|HũlĒMUŦÔW<ĩÕĀlŖ ë3'uÎMy~3œ¤­Ī>_Ŗté&.D5Иs2ËŽęë,ē[…˙WnUįņ0ũoö7Š äKČIENDŽB`‚ pix[329]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1007Ĩ]cQIDATH‰íĶAjD! āˆŲ”zĄ^¤Ô‹•ęЋyā2 1o–M,”Ųŧl?P‰˙ŧ™§žzętƝ6Üiq<“×€ rgi‡TAy_é[n-Ŗęg(ēėŠ SCˇi)Šnĸã›Ē‘Ū<{¯kô*ŠümčåPeĄKĮŲ‡šĶ8‚Ļ-Ę#î”ļÚ-…C“­Ž[ūŋÖ߸4roŲĒō ‡ŌËR%tk“éŽzbE¯ĸĶŌ~ ķēRęī(ĒĩiåĒāD˛´}áØĒÄV×jörŧĄXؙ:Ĩ"Ĩ[ĘRëÉŌ‚\![Ú7ŠŋįĨ”š;S× S˛Õ˜§éšÂ˜.ÄY}ÎIENDŽB`‚ pix[330]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1006ŌZSĮ‰IDATH‰íÕąNÃ0Đs-Õfd¨ä_`d¨đo1TØLûI¸_Ā/10&2X9ÎM$>!„V%yJī|ÎŀõŅ|ĸģYUUM#uSöƒ¸ÉÎi7Ģåø‚ŪūØ?˙ëŸŅÖÍŠ×5í vPÕFRHVŖÅ(¨{}8¤ëDŠ{DPtíâšQAéHÁ†ëRS(:­ĮR=ŠöI5ÆãļPČ6Ē5īOŽĩ1aŖ[ÍižŠ Wē=Šh´áB§Ĩd´ËĪŗRɊųOMZPC_Ąˇ:ßM´éõ˜×nŦî¨Į{f ž×î Ot#9VWā%–UGĢ('9÷ĒIé4ęš :}œÎw¤E5zUßŌEÖįZÜeÖ{FŠÎ´‚yFûRŖmÎtRYˇŧ*RwC‹ĮéZ%íI™œRI/ĩe:…ÔÄŦaUĶKAŽ}î‘”é_īZ均<éBHÚ2ŗ&0…zyË ā~ĨB^únā rĪ"ĨĶēhW`˜nÔēWTŦš˛ã×ôž)C‡Ÿ…čIENDŽB`‚ pix[331]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1005KS}5IDATH‰íÔ1NÄ0ĐoYZw„r ´šÚ\iO@Œöb^Qp |Ķš°ō™8‹@Ę8ˆš\D~öD™Üx†wĢÃv7gåÚĢ­ÖĄäģ&:ˆR˜}{ÅøŖ¨\#<ųęeŲTÉg.šRÄŗ#šfI]ųXu8I{Ŧĸß4• įnņ dL}nĘL›ŧ8M´¯zU5 I. JŖŌ™MUy`XōX´ŋĘ}náŋlUÔ_aTmīzîIENDŽB`‚ pix[334]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1001L>Æd(IDATH‰íÕAnÄ PSt1ļ]TÃz€j¸RO0áh…Ēđ’E÷“ĒJ+FŠ4ę,ęEō‚QŒ‰ļxųl(NÖH?Đ.“,AžcSa/ō.ŋ"ᮑ^@ņw:ŨLĮëūëęGĘQjčjŠŌ*ÉĒĘ$™IÕBQ’ÁCQ͌š¨ēŌÕĨŠAĪÜ}GgjU­ĒÍŪœūžļērĸĒk†ō‘fĢk`ĪĶĶČžė2PÚĢ%45#•‘ēą3īÕ|+V÷i ÜÕ¯išĻĩ§ėËŖĢę˙Å~fŸŸŦŽ™ ôŲčšČ`+ŋV÷3ē_} ‹)=E]ˆô¨i&B…ĸĀOš~`šĩŸ5mN˛HĄkËîņQĻž"Đĩįäâîë|ŪôķT=sˇ ŋIENDŽB`‚ pix[335]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1000;9öōEIDATH‰íÔ;n!ЋB…6…eļxļâe¸°Ël )ĄKK yLĮ>Vl)•Í舧;|ō`ü›~õã†ĩˇ¤ēë<M6ZĄ{ęeöP=u";ČĻš,Ûļ&* Ї¨õ@qdš•×Ęs€ˆ€ÆžÖČ(,0b­–QX¸]#Õ Ōgæ…[ŗÜTģ)ēb™-5Í 'ÜcG&õčT&ŨĘļŌBt”ūˇl“ ´[WĒ Tš>…ČŌe•E•Ļĸv¤ú¨uås}ģBR]Ŗú¨õũU45ŸTõT„‡ úÚW/°¨ÄjjŠ™Ė ÷Ō4Ūīˇî˜ëĒÂVŲ–Ōé>a(×ĐXNˆ.=TĢop7ëPgĻŨ/^wZļ6R-]āŊĨŒŠgˇlt'MÔl‚ė(Ī˰įŠDļ秃q×?čõ?ßB,­IENDŽB`‚ pix[336]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment999ūącVIDATH‰íÔKn! ā…ŽĘĸЃTåf¤\ŒĒ!ęčnh›ž`ŌvÕMØĖ7blcčĘ ¸éMoúG͞Gô:ÖhiVDđC…ĸ*p#]ŠđĻՙwa °Š×7y8@Tˇz5á ŲĝjõY˛q¯Š S§/ŧ“K;]4­ŋTqh­ęĒųÎHZápŠ‹$%ՅK¯jÖUg.„¨oTjģĒé׊ū䭓ŒfԌZ-eÚgčšoŖīĮīãFķE}7Į…•i¨ [Ô5R>ÔŦ+wŽ@ëRÛFĨąRx°×POŲ–{ĩčö~?Ŗļ´đm­ŠûA˚Î.ûc1§žëĒÚäÕlâĄëØzމę@Œ5LČ6ô3XŖâĮ<¤ĄŸ_YåŖįÖū –‚’ŸÃHĨےáĪĶPåÛžÖrEešĢJ˙¯gÖžS}á°ŋIENDŽB`‚ pix[337]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment998‰ļ(õIDATH‰íÔAj!Đ/BÜĩG0GČ2;¯”åŦĸ‹ šˆšĢP ąR2Ė03”M–´imQ~ģÁ;#ãĐCũ7ÚÖúÁ ¯*yîHFÕjš! jAĒđ+Rk2):€˜áĒWĩ!ŋÚKŧŅĪ‹ÚĐmIĒ’kŪ SR ĘÎäh3ŧŌæû“a”¸RL wu֚ĄŸÆo•×úŧ§xÛÕĶĸŽ“hĮTĩ#+Ņžđ"QiŠËДŽę•ôÍėvSUnŽ)˜×GS ĀÔŠEÕKVē­Ēō°s!5§j?+éīN•ÛJŋÖęÉåauuäķģÉą…ĨʗBI­Ëü}÷ô—ūWˇúÕBÆ V‚]„@đ&3Ã×!jõ´ą¸Ąšš ŨôĻ7ũĄšv*ŧĶjˇaŠ…NĨsj†Jt4ĘSŌA˙ŗPēüV -UŠ)wSö@{ÔXžyŦ•+ŦƒÃ 6=Ô4(Ė—–d­ĨeA97SžUrCõ~ę×ŧ@ëVīĪ’-&ŦW=g"ÆÚ?îQb@ Õ |8‡ öģ%¸Gv˞ĶQ3Rk q¨í.6Ī ëÔ¨[õÔVÚ7ĒŠÛOĘ sîąĨ7S\QgɯƒëBƒdZ+•ƒ4J.0+K—ž\Ŧ“ū%I‹ôÎH īī,lOšãۘļFՏx2\/…‡=yUÅöķuYŠßĘũ '0Ōw b§ĻĨ>IENDŽB`‚ pix[339]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment994€dŪ,IDATH‰íÔąmD! ⟠…QØ ÜŲ€Un„LpĐĨĖJŒÂ”HA8~—âŨ{ą_)ŨšCŸĀÆÂ€"ãŽwŊĢŦ#išvOÔT-–¨ĘšÃu%éM8QÜĸ¨\ė°Lœ@Đ3\ ŠÖ€î[ Čķģī~ĘZXƒŽŠœCwCĶz ã@ÁÚeÍWĩĒļEÛĄÖŋĒīļœdŦÍrKd­pÕäĒhy2Ų*Z<žc^Ā\ i<Žņŗqû6āķãĸIĐ„ōēęLˇ:ņÆ\u›—2?ĒšæŨ)ą÷Q܁RõŠÆĪᝊFË#ēĖáoíĄ^Lķ#iķå‚Ļ\ssų Ņô˄NådŪÄ}RÕPž‘­ØÍmv÷…įē5%ū3öqŖ5Š˙¨ßĸm™ĮũĄĒIENDŽB`‚ pix[340]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment993dņ}:IDATH‰íÔŊmÄ đ?Į)nĸ#e:VČ'ŗVŠ( e€[‰ ˛Ų€’ųåAŽ8]ŠR؅-ņŗŧ/Đä Øu×]˙ĻÅŅ/jr”4eXQa(*Šü´Bā#I ô8đOĸĒ X<‹šPu:áŦ$M¯K>áĸÚđ˛đ˛FĮ—)‡™ōšŧ¨Á§Ž4Qļ™Ō\ĢŦ.w-b4ŽēaĻEÎBp Ka3,kVYÖhG;G´‡s,žęǃû&⨔zÉūĒ ĀŒ•ĶcÂŖj!” Ō¤ĩŠ”ž’ĄĒ?J]ÕP-ÕÆzé•#iuqÕå8ĐlâĒzĩKš–pwʛ¤¸ËždESîБr¸<'™¤SqX¨ģy2(Ūb07xĒ´™ãîôŗŋy™į]čNâíN˙iÆŪč7ûRÔ>\ĶŦIENDŽB`‚ pix[341]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment992icÁë‡IDATH‰íÕŊN1 `‡ …ĄRVÔŧR^‹-é›1đé‰%Ccߤ"ûøŽí}ēôîlĮ p`Åk|œā3„ĘgRXßãĸq&ː*úΊņˆ˜Mü›–ÜšbÄÃúqŽĄøõėũIąÅüĒ×ņ¸.Œx¤x“P V=ūõOéØÔžžíOî Ÿ7õ}Ŋ~EŸ>yWqZFQН:āYŗÁ Š+JũY 4YiɔÁWY‡-î<$íŽîa¸’Ä'ęžíÍtYÖúÎNĢëĨE QSÚŒĸõ¤‡ŦhdÍĘ]´$ņmœô8eĨ˙ĩ´ĨjÚy/æÍTP~^;Uõ ĖŪė%u4 *`“3pąŒ 9û4'X‹Ē\­JÅ•ãUAŽörëšĘŋÜĄƒæ“nKģW´Ķ2-l¨mrögčūm•uøˤ†ĢŨÕĀŊ ÷Q_úˆ_—¨&SIyP”:”†ˇĸcÉ@TÕđPWŠ^˒@9G›Å*÷Â[üĸž:IŗelÔ¯IENDŽB`‚ pix[342]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment991đjQIDATH‰íĶÍIE1ā3ĖÎ[BZ°áZŠ%XƒÄJl%`#SB–Y„ŒŖá⛉ŨŨėÂG~f˜YŦ‚SO=Õ՞WÚ| "ėęĀ6ą›:6éˆÍŅFŌØŅ a_ r}pHõâéÄS*“¤ØÚFBRMĄG’Wa[cŋ Ríq¨VOĩ‰ŋjæô÷*+íÔBąĐ d8:HõŅUt*ĀŪLxĻēP/ĩéŋlÕzh„ęi!’7WYGC\ųKĩߖŠ\Ī::Cךj1;ÚrŅĀė–žĪ‰ēFÂŦhDžÍQ\ĸfPÕŧ/ĻÛQ¨núŽY‘>ؐÆwš7éNų¸?jEŌøzĘGēŅWúsũŖ~Ŧä…Ëd7˙IENDŽB`‚ pix[343]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment990‡m ĮCIDATH‰íÔąmÄ0 Đ/¨P:mg„l Un„”é$ãã!‹Č*Uf(p)Žt€Šr,dpAęĖ# ‘Ĩjæ‘ųZKæ^ ųc$ūޞk°đ}]ĩ?ÉTųéĒāMõzčC˙ŸŽũ” ’¤*Ũiž‡c–´‘W˙,ųķâT­H]P•°t„ÍĐĩĮšü¤ĒĄæķˆēú-PžôĨfMà ‹6MˇĀ~åÚSKļ6SWw¤ŌĻúf*‰žR_~Ģ8ÖlŠ|šęįđH4Ē:‡W e×Q2,• ?ˇŧĄåP ŽáÅŌ7PO†Žā8ĖNĒ*÷ŽÍ>ķ•Z”ÚÚTũÜBËk[tŊlrÛ§&M‹Ä ųUß#=‹RVõu!„á ELjÃH¨ žbąō[!ƒH }34ĮŲÚ*#ėŨjQÕģúCũ÷e|=uÆIENDŽB`‚ pix[344]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment986w4ŗņIDATH‰ÅÔ=ŽÜ đ?! […6Å(\d%Ž´mš1Ģ)æš QŠmĸė,m‘2–ļR/{MĶ—cŅaĨö2?°5NË´’úVL˛Ŋˆž\t>ŲĖĸ_õŪ°Rtt>+Ŧ6ōížžëėį“>-t—]_Nz\lö°Ã¨‡YWÛ¯õiŠŊíĮoyüzũU5•i\‹ZŌâīQS1˜kũĖŧSUIˆ×OJ˛ōøļ37ôÍŊmkŅ_iîšÕe>jō -Węˆ^ĪK[Š"ŒQ‹ŋĨÍņī4ŨĐė›{ų ÔfMZÔAŗō ƒ¨QąŠsŗ¯5ĀGhŧ¤ŧšZ¨"k,ž#˚ToAH:8IõđNąš(ĒIPÛK'g•âLŽÚģß$ŠåĪ%ôîĩŠ{īÄ*Œz§z˜†*@×T74ĀDˆŦaY¯#ęjDõŌ(å™UsĻëŊ*D>Y-ᙋ€ųgĩQŽ–#âĩ`n”*}¨j%åKQ{NÖĩ‚-ĨtSkõų%ôíŊMĩ§“åxõ¤r6˛Ū‚ÂCCë6zIŪc‡Ô|e9IęQ=k–ûŠkÔq×(IšwąŸ)ÔŋŠŖU@‹ž›6ãŦÉmiŠâøoú5k x˜ĪIENDŽB`‚ pix[345]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment984™UŸ8IDATH‰íÔ1N1 ĐEÂ͊ĖVĖ5ļÚ\‰rģ Įā*9J¸Ač\D Î"°G4Šu1éÉąåxc'núsíq7wû›Žnú¯´‡=e'U_Į(ØžæjŠ#cĩ$¯ÁĐ7 ÚTeÂæ9 Ö5¤35U×5ŸƒhQĩÆōš7´ÄzœšuŨö•ŗĢdéÁ‹Â¨ËĮ–æČ÷x ŨTÖfž<•-­”yŅuŊj=ZDƒĨ!K]*ũ€;Āg]3\6n_Ė÷¤k%†Ķwc¤ĶÚ<\ÕˇQ×y€lŧĸ˛ŗU#ļĩîjÜēe Ũę՞G>Q%U)]<ËļĢÚÍI"ԓeˆ2)ęúŦX’0ģ†ĻíúíĮŽO˛Ë?#c3re)eZōûĐuÆŗTXMũŋ¨īD"k~fEŋIENDŽB`‚ pix[346]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment983Ā<pIDATH‰ĩÔ;RÃ0ā_cfDÁD”T1ˇ ž G♑ē” Ũ G@ž24*4+ĮĻģjBÔ~ÖėzBi‡cSÍÚ7ĩÕô¸ę'§‡Eķ §Ģœ~­j[YĩU8˙¨ã5šlÉFŌo† $ÍčŠĮ Ē*@?-\h&ĀÄež.4{ŧÍĒqû.iOá ŊßuY;(Nũv:wõŠę+Ŋ¯:đjcC]Õ¤ŦŠÔŠŠ¨Ŋ¨TÉą4´/“ aS5Kj€aÚņ:8Ō>ņ•Ä›YŲy€˛Ō‚R÷1+Ûũ4k—ųģšŪô]yŦY…KđL3§Î˙;ūŲ˛1Ā$ēËi čŗĒeaâÎ:I𭝛 y ÃŦJRztŗ¨Ŋ{3ķĒąjt*Ēp§&ISmSTSŠ7HŦFÚî-õĸ0šhâ+ė`įčoųū–ÅŽĪ;ŋə†.) šĪaođzŸšÚj[¯ĐÔÔõÜP7TDEãoÄIENDŽB`‚ pix[347]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment981éqĄ.IDATH‰íÔ;N1 `R¤Ã‘‹Ŧ˜+q€ÕN$ Ž•Žk˜Š’ĐM1ŠųwV4+Ûˆ‘&R>)?BŒJ´*‡šCM‘Ęéîŧoę{¨oĄžü`įøVŋ #슜¯´xZ“ ÍÚKMX)*ĻnDXa­ĻŽD uîdjĪõ”ļÜåvĘÃS)ōę=T{[ÛE1;Ę΁ŽüjC7į\("é*[\íĐŲQŲuņ´ÎUG;×āÜN”+yīŊhŌj*jƒ'ü vå hZ=Uēåŧš*7ŦŽjõîŦM#}ĩuhŌSˇ"‡ S‘ûÃ^uĻĸSŽ jßš':ŌĘĢ]Έ3š”^XiB¨KûZŧîî¤Dŗ$SĮ9ķū¯‚Ēé“zŠ võjüë×OeDа V¤eIENDŽB`‚ pix[348]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment9785{OIDATH‰íÕANÄ0 Đ_EĸËÁAä*s–ŦHæ\É17čŽ E1nG ™Á)6“EĶčŠibģ)ô˛U:\)Į­{ŲÕy ÛĖ}¤iWķĻņ[?Îõíԑ˙ėEģéM˙[ƒ¯%ĢŨ4$O;bâ‚čiCXU0{Z`fOLĻą`ōTî°iķ•đhzėđ”’PБ"Ki¨<üI‹Ę¤ü<íhéčîŽLÉ.¸÷5›~ŦL“ÚÜ~œ7 6ps´jĘMœÚŦâĪĖjŅžuWÅÕ¨ŖüžpceЧ…:ȎZɑPCuUqXÕ˛āęĢS kÕ;Ēb;Žŋ)ûĘ;Z3į2TIÅt´*Ąb™hƒē’ˆMũoA,ü%u< Ô^™FuĩœtPW‹•Œ)û'C­›ëívؘ.W)úФũWŲēŖējí]ļ;c?û~oe6{äIENDŽB`‚ pix[349]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment977‡ŠęIDATH‰íÔQJ1 āûĐĮ^@ČE„\É,´žĀ#ėQoŌ#|ŠP“]ÅqH Ž>l_fčG§Íß0'Ŗ„›ŪÔ§ ×ë˜~ųĻņC}›ęš"ŖĢ ŅĶ–B6´']ŦІ6U~q”R͇¯GÔƒŲ í˛}NJí†ø×Ô^õāÅÖ~‡->ķŖ§šÁ‰—‰×>ƒŗ¸æSˇ$­šš›ˇpÖU v”’VsÉ{¯”jŌ$L=”¨ÕZ*G­ĻšÚ?5[:DĩšÕTy?kaSëCš¨v‡Ôē\§šÖ°ĩ#¤ĩšĸoi@Å žŦ¸úšŠjs4†ė+§ĀE:ËQŠtĻü+]qĻuĒ”ˇ küÍ6 kčĀ™nĮę;=Xē*6&BIENDŽB`‚ pix[350]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment976đ(|IDATH‰íÔ1NÄ0Đoš]Žākl…9Ø ›ŠŖp #.bn2…åa&í˛úŪ ‰&îŦ§$žü/CîŦŒC=ôĩęļpũ„Ž@iQm˜˜6Õy…gē`2]¸VøĒoŽpTœi9Q-qĶ|æšPchTsĘOIĩĶSe۔g'tŪ,Åôōä/}‘â$÷:)^rķī#  "r­Qœę<ŌîWđŒLÛ¤Jį…ŠČSĐaÃj Ļú'7=s}ÔrĖĢžš*6õjąbĶDTŖc]MãH;J,ą ž+¯5æąJMĒnŦ¸ŖÚĘØĮ*Ēč4‘OUoģ-ĶÍ÷Gyúģfۜ] oŨŽupo|ëÂûŧm“\UãVíŽzęÍú7ũŊw„Šæ*§âIENDŽB`‚ pix[351]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment975i„yÆ8IDATH‰íĶANÄ0 PWA +rr V“Ŗ%Ŧ8WɎ%WđÜ ė‚dbœÎ ƒŨU7ékR×ųŪ¸ üëßÔüũžĒ~‡RØRt\ŊŠu‘ŗ´@X(é SüŨ<œ)AŨÉÜëƒĮsuíú YYšûvĩĨũ¨IŅú…Θ;5 ßoN[ûAOfž(‚HÁŌHúļFSĮÂ-uVĩ…á[Jĸ™k4ĩf¯Ēīĸ˛‘‹ĒW-j¯¤ÁŽoų UĨŠ īIŨ…qPäĸŠäĘÍ?æ’4­—S÷\U•dҌŗĄ’Ų üœ6SGhAõī’_ĩčÚFִ͆ĄrV-ų^Õ|T­*9š¸ėÔ ŅĒgcjUĮ/Š–ČMnyéYQÉyOR\TW~+.hĒ„g$[ß]?ϝ/hŒžšę—§IENDŽB`‚ pix[352]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment974ƒIP@IDATH‰íÔ1nÄ Џ((}ƒø )ˇķĩRDœ WrĒ\ƒŊ%b2ØĢdŊú°R¤TÉļā{€Á›8v øęÖvÉNŪ¯ž#døā;ĒéŽŦGšfú]]$ŧ@ŌwĶ ė%m™–éĸ†iĢŦ‘šrOSGĪĩŠŽÍ*TÛ´`ĸúŧŠEĻ8šĻ‘Ļ]éZ]tå0kõôT y  í´ô˛Ō’•īaˇÚbiö#Ŋú1ž9N?×$#Ŋ_ÔOh%dy}Ô­IENDŽB`‚ pix[353]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment973€įÜķVIDATH‰íÕ;NÄ0ā‰R¤ôĐú´+|:Ž@°W”\in‚%.2ŌZÆÉ 6ėūŗ4Ûá|Jœ8cŨŊøJZŧČ~ôRI~JjWĢSu:b¤•ēšåšMZq<ÕišˇépĒĩÍ :īY Z¯Vú~čĖôõÔXoU=txÖ'9ūÜo ‹ŽŦiÖymUŲūVŠ­Ũŋə’VīxĒ)ZŠí_˙ ņĘķІjØ`tãÔŅPŠ™hTˇ•ę ĐBƒęčH}îŌ3ĐL])ßwąŪ W éQ—‰égęôô+™„;Ų!ÕĮöŌcÍÎÔ`k õļ[ņE~“ĄiC–jȍPŲÔÜÔ#mÁœ=úŋ… ­ũhhK ėQ\ŠKķEEķNuĨ‘ŽnV´Cj *YJŨ՘:-éhY/Đēä0tšíÄRšļ~Ŗ ˆõ €r¤IENDŽB`‚ pix[354]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment972÷āėeˇIDATH‰­Õģq!Đe. ÄāNp).AxŠT†K13 Ü™S2Ŗ1bŊ ßŨi9ÆŪ@žĐņY8Ļ1ĖĻąŦÅëŠĐ-ŅÉŠÆk]ũÍäŠĩ¤[Õeeķ€DN-îąŦAQ=sJŅ>0™¯ē-/õ÷xŠīÚļ™šÖđįÂ8ÜĨ1,*ŦūüĄo_‹:>ī¨fT/)ĸ9XŊÄGOß;cŪ+˙ļÅ  ĖčhŌ4xõ ¨Ņ¯ĮJФBMIFƒĨ,RVAŅ P§dU‘YÍ0jQ€Ķĸ)˛DLGƒqŅÄõ­~Õ¯lXß×[˙ŒĄt5ú;ڙ‘ŗAā;ĢálHˇ‰WŒiģ Ôˇidw°j‘u͖4čΘu=`Ū°jŧÎĒŽŽUíšnj%ĪÕ+JHŌ6ĄÃ\é’Õ¤e2Ũ‰ŌŒŗLœÆŖ&•,Ŗ”ęšæu4ŒXU †UÜECęM`#­GM îšMUŊĮ×L$^“ĻŧSĨŖQš“"§ŌŅNäžŌąĻūt_ÔpJ/AZÆ2ÉšąJŒ‘×<ŊÆfJIyc˙üÆyDÖYo€ØôHSIENDŽB`‚ pix[355]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment970îIķIDATH‰íÔAj! Đ .˛ô^¤0=Xų:ü‹eNĐ+Ŋ€ģf!Ļ™Ą›ŌÄũZøâFŖ “Qā_ęÛú{§zčCīVFO{…\[_ĨŦϐĒZ [ĘĮ>XuZÚ ēP˛´BTŊ„jëUlŅÔ Ąî(å°ŠFļUļĢėģŖ%Čϊ–î‡^}%”0Ņ(8Ņ<ĶpUķI#øÚ&ĘÉ×2QČmmŅŅ1Õm9_á–Rö´žĘŽ2<įâęX(ņnáĖø†vü™îZËėžTÕZWß5ōXĒŖĸ*ÉĶs5×uĸdŋũĪÁ_˙‘Ÿđ›~P•¯â“IENDŽB`‚ pix[356]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment969y)Ŧ_IDATH‰íÕąNÄ0 PGAʆ‘ûF†šObd8]#1đYäø…lŦŪR¨q¯œÄõėÂKÕŧ8j긞ĸ'Ö"Ãū2ĒxP#ūõ_˙€VojG.`*y,•D€¤Ē›FvŽDMģ, °ķUÕqt°5%ĀŽeēV-ÖCËÖˇHĸAĶļęP÷Ãv¯ĸûT#+™l=c ›œ '÷’Ļ–/5ۃŌÔĢ6mÕ*ü¤(hŨg€QIĒ<¨ŦčÕ´æze5/Z€.7(­™•¤a\×ŊōJé´ÄjAį3ĩũų{Íĸ52홋Lŧf dL†W FL–×Ú6ôļ­Z<A)@}Ŧ¤IQˇmįFąžũŠš’ļwŽY›ąUKYÖÚæE­Ŗ˜žR_ŸēúØU –h˙ĸ>X‚ƒÖIENDŽB`‚ pix[359]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment966é–=IDATH‰íĶ;nÄ āYš ô¸HŽfŽFnÂVi§¤™ `pc7ÉŽVJĐJ|ūgy",‘Ĩy÷f!ŠáG Ôė R'ŌséģöUUĐ j:g-{¨¯Y; 4€ÚúJĒFjA'ŗČJ5âęMØċ?¨[š’\/jģk”{ÅûwuRßo<ī:€z -¤žŠoJs¯žĪÛLIIÕE?ĶĀzĻ÷ąšĸ~TŲņ ėŠRį¤÷M­TÎĄá~Iû,VdS=˜Š:Đ#傘.ėHCÄXž‹ƒRRJ…åéį+ĩEúhĶÜ#čŽsĶŌōÔĪĩģÍYû×Qן¨ú[Ú}VĪTũ’jŽ4\ërYųqzŽŅÂūëkčė­'úē"IENDŽB`‚ pix[360]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment965pŸH‡ĻIDATH‰íŌ1 ĐÍPXr„˜“p4ãIŧJfŧÚXŠ•Š\ hL\ø6:Î(ŋ ČûLb–>ǍĮ/MU´čÛÕgeÚ:¯1zô–jŽNÆĘ8ՙEEų}Ķ˙ôĸ!F顆\ęķ>§÷ŠŌ÷đ|^Õ§é4ĐĮĨB•-ŌÍ*[ų"&ã¨˛y ÃŨđ%­CN1“&Å) Ų„ug_ŊĢĸŦW\ÆcwzIENDŽB`‚ pix[361]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment964˜x˜IDATH‰íĐ1!Đo(,š€ GĄđ`ėÅđ&{:ˇ ‹7Fũ…Ŗŋ!?/™™€Lâ1tčĐīiXPŌ<ĶԊ×ŧī"šĀ4ÔSĶĮQ'čmP­ą˜+\Wg¨ûsÍ]õ°Ukuŋ•OVD UKtŠkĢĻQ15U#PG5ŽĒgĒÕ#UÍt•¨¨¨û‘æ?ҭčŠÅ*IENDŽB`‚leptonica-1.86.0/prog/recog/sets/test02.pa000066400000000000000000004752771506303110300202710ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 463 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1Øô<ÂIDATH‰íĶ1Â0 PWEę‚Čʀ”Ŗ”Ŗp“ô\)G 7([Ë&ˆ%­ä 10Äë“b'?&ĩP×ßivH͈4HŦæd- ¯H)}BM7[Ŋ&˛Õi3;x#§„T¤āų<ŲĒ|A æ#Ęh=ĄŒŠÎāäT*¯ųĨ2E¨k՗w*CŽ5lUąŽ\鞯N ƞ}úŠ­BYŒ KúBž˙FCG[g!Įf߲ƒĖŦĢGšƒ-u‡jT׎§/xSûUQ‡P IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment2Aũ܆ƒIDATH‰íĶą € Pc8Š‹ÁĘ1\Å \ba)%Š&jW v˙ÚW].Į"ˆfoĩwjĘjāē•Yõœ5@Åō„E*g ģ\Š5Šę”RU]Úaę*ĨæÖąö ĩéĶČÔ^@åĨꔃjF¤Ôsâ~đRRRRŌ_ô"ā!Ķk“bIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment36úė IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment5ߙI%:IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŌ^ö7^ŲĪxeã•=Nl?^ŲũxeąQYbe˙ JW ZYæ”Px& >IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment6FŸ|IDATH‰íŅŊ €0†á‹+ÁQ2Z)\+â"q;-‚Qėķ Ŧōĩ÷Ýdˆ“OšÄĸšj=P7VGQWÖ@:Ŗ.¨įz7‚NĄ^ˇŌ`ATŦ=ՑŠô¨]YĶ›Bį[ĩ^ņÎ9šzÅeüB%|tG-§iĶĻMÕ ôķdbû!IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment71—( IDATH‰íĶą€ …áx”ŒĀ(Žä„I\EĪEA;*°Ļų9OéHûŨå./‰(•>š=čĐ(to(un)M´O¨ļÖ­VOzŌķ•ÖĨĶPĖYŒޤ!‘–nęHŗŊž(d• i™#mA„ūˆ/6ŌäģũūĐĄC‡ūŽę"Ĩ œĮ§IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment8Ą(5˜‰IDATH‰íÔM € ≠—aŽŌŅôhBņ-]„fîß ’h‘ŗũx0?RHyéԍi†ũ—&Ē‘j˜ŠZĻ^ŠŽLÅÍÂĻ0ōŊĻCrÕ$0tS6…4‡u7q}Ŧ–ëŽD5ūJĶkz(›BU‡5[°ŨŅÂļŽxļą%(͌Bõ˙ēĄC‡~§'|ŪŽÍĪsIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment9Ö/rIDATH‰íĶ1 Ā @҈CĮĄGņhz4{Ąē8„ĻC÷?(ŗ>ū1˜$T%€Vņ E\ˇæ!ĨĒ=uëÖKwĐģ‘Z;H+k -Ŧ‘4Ŗ&#ŌĮ‘ĒŸĻXĨŠ?ÅX]ļLUßūŌĨK—ūE_˛ā(z’sdiIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment10ÛlW+CIDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŲ?ōød?āÕ{ŸfŽОđĘūĀ/+×d~ōeP"‹×U˙đĘĸA* ú(J&ŒlÄIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment11ŦkgŊˆIDATH‰íÔą € …á3&ؘ8ŖÜh8šŖ0ÂŲQÎĖoĸ&4Đ~ĄāxīÄáėŌA3ꥤA›l u]@KDÕÔtÍēŗĻĒ=ôāģéAéEOúzÎ…4Đ!­BŲđ€ęŦ”IwJģ7Vę‘WԂ ÍÜ߄s&5ĄŊaS§m6tčĐŋõŧŅ |6ŊUÄÎÅIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment125b6¤IDATH‰íĶ!à Đ͋ˆ_Ãzƒ­Č‹ƒTpęVôąIËĢcV4`ßđf1įD9ŦēxZfĒēZš¨fX’Ķ„ũZ™F؜×ēĒ‚ŠĸU ęjéÆņQøĒG4ôƒnI*ôgŊzzū*KÁUÜ]}8šá´`Ųë¨iāZšî9_N1Ą›|k¤{nÚïfĒ&OëWtÆī:tčĐĐ hxëŨsŧKIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment13Be‘—IDATH‰íĶA à ĐŋË2Gđ(Í­G‰7˛qa*¤Ģö14 ÅĮ8㠐īá>‹~¨té"˛SMeT#$Ã1 pŠĄ–é†røI}VĨy‹†JĢōĩWTk“šæļŌĒtMÃ4Ē5ëę2 W›°ō—c"ģĒĒÅF%īë˜üßkÔwč>ŦĒŠSoŖčĐ˙ŧQCßëŦûéŲrfIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment14Ü“2 IDATH‰íŌą Â0Đš Ėf ēŦÂtx´Œ’\ét&)ũ?Aĸ ŋ}ÖŲž;T‘„ŨJÎ4MŅ0RE,8 ÍLũŊL qšõŊŠ}¨EëYVžÆĖĩÎņ!ĩũoĶÂûܔĪ(M5kTåå.ÕģŧéŒné—:¸Ļҏ:BØŊ†a‡ģđ­Ģ.f´Æé>‹úu5Šū#íæĐC˙HŸ,Ęú˙bXIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment15ĢŖ¤ŸIDATH‰íĶÁ 1Đöāqí v’–ė`Gllí$b9FŽI˙ ‚ā!s}dH&āĸ ?ĐŠļÕ3"ĶēøÎĩ„ī5ÖÄtē Ŋ™ }\ŠZp—ú Ēsãˇę͍üEmč*´h=Tįĸô)õ.neŠŗ:‹#Ռ  Úƒ!5‚ĪĒĢ)M&2‰$2Ų7%ķßīUđũŊHõŠS§Nũ/}“ûôŸô\.ĻIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment162ōŽIDATH‰íŅ1 1ĐQ íl-¯ą…Ģx !éŧVŽ"xt&2ÆÂŨ%æĪĸb—ßžb>ˆ…úY¯g¨Ų. QIŗš&• FQ=é„Õe]ũM7¸•ÕąÃ[Mę^Rß-%=ŠęE’ē^o5=Í íų‹P/D Ģíõ^j 5h(ÕĶzP_ĒkŦhnĨ‘Ε۞ÖxĶįŠ•ĮšDå/t')+QëiÚ´iĶõBĖķímzUIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment17Eˆ¯IDATH‰íĶÁ ā’8ō<Š&ÆÄ=–< 7zÄlĄ–dQÆhM4Ų‰^ŋZ (”ƒŨÕĮcŠSAŅ ‡•> ēÖōŦײ˛ˇr¤JTÍ*ZNé 9Iõ:^ĨÜ ˙ĸ¨ÖŊÚčĶGVģč­Ą*HzfŅ{CĮˇļrķ`4|S+i˛|Ž’T%åYHŸ^5VԌæĄŪ…Ē<ŋ š&Qąk׎]÷Ö_Œņ˛ÎėÎIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment18ÕˇßÄIDATH‰íŌ1 ĐÍP¤ô…ŖčMˆÃ<’Tļ^!]ÚtR0 ÁX8æG+ÃėĐŧY؅•DV'Õ捊zÉ{MÔC=æ}TčŪĸ[¤ôËĪę Ō) ´;÷{ ēcęÛdąæfÕ@ĩa*ājö*ŠĶHŠ xčģ*˙Ĩv<ˇezΠÆ:mÆ*Ė o4=é•ęđĸžžLT%‹ÕK˛ŖFęr뉇įĒč"–ŠËįŲ§Šl¤dũ§ž*ôwU­ēęĮzėvôuĘō IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment19ĸ°īŸIDATH‰íĶą Ã@ Đo\¸ô!#x4]—ĩ )˛†! ¤° ‡”3Š˙O\œ¸îĄ|!„¨„ë!u ŸŽļÆtą,4ũV:ˇŒŽĢmĨgęU}`Z`ÁÕOÅÜÕdQ´Îęg­ģ)ÍZųöĢŽR_Ts<¤>ŠLqŊcôR;Š ix ™sâēÔĮõ}žƒēPą…o5mÚ´é…ôŒĄ ļi›!IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment20đAč´IDATH‰íĶM Â0ā .ēėŧ†ģ^ɤÁ‹Å›LoPpaĀĄcB°đ& â*Ų~ŧų ŠqfúVŲCŊ¨Đéæ4Ņ€THWr–ž-ey×GÕdĢ͏Ķ[ÕĩĨû›īUščeæœ*ÁnhéÆÕY}ÖĐŌ~7č˛ÁĖY¯†ÎYáŒrEĄĄ`÷ŠĢĐhŧ+4šŠÂzŗÆhėŗÆU#M†2yCˆüúĄ Ôū~׎]ģūIŸ2x“Y"˜™IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment21‡F4~ļIDATH‰íĶ=Â0 ā‡ĘÆ ڋ r4wãZŲ¸F$@˜ČÕ¤Ēį"B¤zÉđ)Nä¨=V×ĢŠå|P ÚwLsQ™FHFÃ4@ö–ļ;CŖŠĄUæ]ĪTŸī¨ę¤BUŊTŠûJ‡”Ŋ[ŖyA%pMpádęj„‹ =*w×<Î$īoŖ–^Jv:uz7U—4Ō]¨Õ@wp O÷wŌÎĖė,Íbé<6ũŊ­Ļ5ŋÚôGúĩŨéJ[ŗ!IENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment22OeÄĮIDATH‰íĶ1Â0 PŖ s¤\‹!Ĩˆ‹1pnŒ„­H‘é‚|wąĐl֋l'qHŒÕŌGzÉŅŌ.X™[•“ƒJą2yC ųļHj†Ø!Í+S7N5!e—V™R#ŗ4ĒčÅÔ+ĢöHEž5ž*û‡rĒ)Ŧ+ŒI‰ßķ„ÁŌŦē‡Úë އ1u:ZÍßĩncp¨čr!Įā\ÉŧvŌ&X7úûGC=ë+ZíëuguÖ˙Ō×ĐũQ´u˜“IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment23iHUR–IDATH‰íĶą ! PG)ŽdFa48Ĩȡ QaKi¨p`€˙#ĘUиx–ea[Œŧ$k•hO¨ÚõĩH0šÅ})Ķ]Ķę,Mh†ú¨žč›Ē鄖p^sdšâH@Úį› 6ĒÚ§5ËFõūCûōāĘm?§Ž‰ƒû\ŧđ'?FøÃ zĒnB‰Ž–.]ēëęa…5w”IENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment24÷,ĀņˇIDATH‰íŅ1Â0 Đ_:tĖr”ŪŦ â ĨFŊHĐ †¨Æ-ęD~ Š•(RžėD6´ŋÔÔëÜR]:•†Ēy`ģļ „Ī€ž 'Ž Guídp‘ĒûJƒ§Ē~ŖPŊJPžĢbg()Ÿ‚ŪŦ#\ĪēōéëE“ģSm55“cN­ė[i—Ķ]¸.đ‚ŽŠĀÅ]ŗŋÚõ-īĐo‹įÚģ=ĶÉÆ'9|ucÎŌĄ4ĒV­ZõOô ŽwôÖ\W.IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment25€+đgŽIDATH‰íĶą 1 PŸR¤ĖY Âf”Å1#āŽ’H4‘8 |ĶqMÜ>ÉJžmRŖ2ũ[÷ oŦŨiŖ„´‘ E¤BĢĄLIpįüCãhŽtá( ü‘ãđxAõž8ĄzÃ*Q=Ô0ŋę.i'„ČÔFņA§ûB5}`o,ēč_ës†~¯ĒÖ7~(ûBÁœqDIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment27n%‘KĩIDATH‰íĶ1 Ã0 PŪę r“ęh–éĐ1Wō–ąWHOЌ‚U'”R_K‡R°&ÃÃÆ_–IúŽ7¨^ iö*Tq–R%´Ŧ ę•jO:Āŧ ËW°FQ7ėõú^ÉiR’ŊŪ?4å_ĐéyÂęõbĒNŒ´Sšjt‰–Î^ŸœģĒ'B“C\÷-U„ōŽJP5l{•ŦyÖQŗŗ~Ų §ũUM›6mú7úbĶĮŠd0ßIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment28ūšŒÚĐIDATH‰íÔM āiēĀÄGā(­.õ÷fˇrŽÚŽģîúįúņ*đd˙ ŦIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment32TT…ÂIDATH‰íŌ=!āI(°ã›āM¸Š1ÖŊØx %‚hcŗoŨŌ%Tķ…áīQWF¤mÚė­FZČtņH3™JNU‹ÕļÉ(ZƒĸŽōŒ4Mž(z™¯ĒŠĸ ë=ŋ”ŽgԔœ°¨VŅfMĝ›_ˆ#Ü7\4íCá}u-}ŽH3Ī k tÂ?(ž(¨Ę TGGœ+9¸‚3™Č-Īž’GZ‰û˜ëúŽ?Öph[­:īúZļ(˙žV?ÕŽģ~§OM/đ@1ÃûõIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment33pSd‘IDATH‰íĶÁ à …aW–Ę‘ šQXŦ-Ŗ°As$Â%ø?$R{Á×īđŒõƒYåĮÚiSŌĒ_%tɞîĸM’¯´ÜŌ5UØųAk%ĩ‚ēåtM¨Ņ@%˜˙ŪūD jö ÜZNusˇ<ļZ.jŌú͉Ø+Ww‰ ŖrÍĪ=OaøûS§NzUŋÅķevį­MIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment34î7ņ°¯IDATH‰íĶ-Ã0 `G ë5Ær´fĘÅ´k´ę2`õmŌđ3h5RÕô#ūy•å˜L#Uq›$Ļ*N%rõŨŌĐæ`čģyŽqéŽë°_oÃĘ=ŽJģB3uŠP:/r€Ō]!{ôĒ/č‰jyĸq}UKQ1›:ņyŋ*${YļT•ĢÆÚ Ļēĸwãú^FŽ‚ōҍã÷)ÉŌ…âá˙ŊôŌKwč6ūKtunũ@rúÅ­ĩIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment35™0Á&ąIDATH‰íĶÁ 1…áĖÍt°)e-LĖVb-#6ą=*„Y%åä'íWL;ąĒi#ļC´Ã:†cÍ^ŖArŽkíõļNzPmąú¤ę…öĒQu(™öšz<7Žõˆ5ė,Ņ6ÚV†kUĪWƒĩˆÛ uĐĄčö)ˆ Ԕ<ÍS—'-‘†tßķWüüAŽ UōF“ ę­×ņŧĶ^ŽYs]tŅĶ'p[´×&;wIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment37w>  ĩIDATH‰íĶą à ā“@\ Ž žHÉŊVˇ\Ÿ ¯Ôŧ‘c{WĶŦū…@ÅAüôü%k4Ąt]‘* &i.Z:ĐmWßԀÕ1Ö`ßųē^ĸEŦ7>õŨŲĒĨEgxfKŦÖWĐ ÖĘdĐÖŲČiĀę‹ Ô§X”ž~ŲøŖž›ēqKS”ÜŌG^°—įę:ų ĩ¤.S#Ī^qž÷¸â<›°Q„z,8é˙víÚĩëŋéšûLĢŨˇĨIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment38įŊ›ÅIDATH‰íÔŊ Â0`G)Üáŧ ͉((ÁОFØĀĨ 댃 ķ{H¤ĄČkŋæūtǐ jģÎLĨgš4Ķč™>hUíĸ>zŲ †Ēe*DīšŠŌĢT=zĻ ÎY”ÉîHN&™ VUnÉļ×đR—ėU|rXŗnņH“‹k4UÔ3ĶybzĨZĻÚÖđU=Öü̊ Ī*ÛU[øVąëXôõĐÕ!՗†zކzŅB]Ãĩ]wŨõ¯õ Ŧ–ÚÉIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment39† ĒIDATH‰íĶą ! PK)R2Ŗx4e€Ŧ“’(ŕˇ( ]s:Ō˙_D:é \ōdËØ Fâ"ģč‚ĩŠfŦE| PSSQĒĢFq˙j •‹éĘŽũĘPŸf1\KXÛyÁ[@tĩŒsŪŪX+WgՙęęÔÔCŊq]ŨĻD=׊ßäkUĸ9õiÁ-œúá4œÕ3ûe\TūÅĐĄC÷Յęį=VŋöOÛÂ->IENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment40ĻŖnÂIDATH‰íĶŊ à āŗ(\fB6äÂkšđÁJ‘+ Q.x€÷”ÆULAķīø%ÍËÁ:bõފCÅąHŊØ,Ņ$Ŧ.bĸ!aí4dŦ†éōd+/ĘTwĩP'ŊE5h7Õôí]ƚ};g˜ģe얁č\𮲝jOt¤j°.…éHÕpĨš&ģ@r“ķŋÉk뤊۟%ŌŌīļŠ:ūī˙ĸõčÜŪ‰Žt.×ĮFĢâúĸJsO=õ/õ @˛}|KdIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment41Ņ“ø¯IDATH‰íÔ1Â0 PG2æå$äZL‰Ąc¯bč5‚X3zˆbÜø­ ņ˜Y˛ômPúļBš)ĩTx@ĒÍMuō,ĻžDœĀDG čŦ:nT'žšÚ¨­§s¨ÁėĖĮ]Ę@G¨čuZ՜WuŪ¨ÍsZŠ­YŪļ’ž›*§jf#HKÔ(u’Qb%à ŊAŊīĐ+ŌęĄÚģ/kv~p¯ēvíúúđ0 (+(øIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment42HÂBžIDATH‰íŌ1Â0 P#†ŽŊá)×b¨hšÜ$LŦf"Ø˙(C‘jEYž,[?'5Č5iũ‘ĻĒõ`-Ō` & ¤*A™FŨí‰^×=ÔģšvPŸÎÔßē„zöŧƒYyŠ&iY‡"Šmjΰ×ö­­đVĨÉ~ Ē>|­ kĒÚcõZZފUģ j–˜ĖĒHŸņo÷““÷ũÜ=ST —InõÍ~ŖĘz…ÎÍT*;ëŦÖĸÄbOšŠ)IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment43?ōÔ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment44ĄvgwÁIDATH‰íĶģ à āC.\f{ŗR&ČšđYÅdpR¤ .ÄrÉ)â4‘‘¨>Į=HčK]XNPgōs 5ĄLÎĐ<ԃ[ÕĨj“øƒz¤ã šhÜŦĻ&—˙(–T`]ĘžbíUßUxÔõĖĢ>Ģ*ÂW0ŠO¸ú*>âŗEgã.~6ō,¨CęäB–˛ĄÔk‹ß%ŌĮ\Úõj¸õU•6C¤;L衇ēŋ˛ĨŲÔFõĪúYŪũ`ŖL”]IENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment45ÖqWáŽIDATH‰íĶŊ Â0ā‹R¸ĖÅĢ0Ø…$VJ—’n„Ŗsy8ĸ~Ļ!’­Ģü]qēAã%ųŊ~ūšF•ĐĐEü1ē'4•ÖœgäDu÷Ļ÷ n\1WĒÛđšŸRƒv˛H,\íėÄÕB Ļ/ķŖ}†yŽ`S¯žĄ“†LusÜeUU\á–8*íF] ItFëĐÚĢ:}¸f˜;äBģvíÚõĪô ĪAC5IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment46Ox[´IDATH‰íÔA Â@ ĐHÁn„š€0r1ĄfĄˇđ*í ŧBÁ LwS“v+˜_°¸‘fûāH ¤`ZúĄž vRĒ4,-‹@kí°Õ- 9¨^īĻĪzĒMeÕŗ­ R &-[´såjkŒ´Ž"ļ>RíĄ†,î;“­™Ãhkâ~ĖÄĻÆDĻæŊ•Ŗ[´1´įļĄēIÁV'Æ÷ŋņÜ 8y×]wũ'Üų’::ÕIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4786͡IDATH‰íŌ1à PĶ 9‚¯Ņ!*Ģdr’\Ĩ[¯QŠ(cä_’ũ3V`}Ø o :'ËīõMõķDž˜V™ T÷CįŽFŽ3DšFˆqU‰.ŠÄõž`Tënn‰)ŠųB˙Œ—ú•ρGtžd ŲcGƒĮ@uŽBuËč(rëŪWcYYĶĖ´¤|–Õĩōw‹†Ũ¸ÆPo4r™ĒPm[Wų\ڌøEīķy!õtEO1tčĐĄĻ_&AúeÂˆÃIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment48¨Ā+\ÄIDATH‰íÔ1Â0 Đ ŲČĖIČŅŌNŒĢ$ęĀ5Ę 2fˆlZĄnųFj‘Xšõ)˛Ĩoۈōzŗ_մ8M'ĩnRõŠęMÕvSĢŌveEŗ­*›oz š˜W\õB…FØŗøBí>šŠáĸ˛ĮZEĶâg Hŗ›ëB}Yíī8júHÛURŅ4îҊĩúE[¸hĄX)Bõ‰qžÕl¨įNĖ Ē餇S'ķ¸F|7ú A¸fŋ¸u‡zčŸô XsíœÔw†IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment49ßĮĘŗIDATH‰íÔą ! PK)ŽdÂhDē˛RN)n;eŌáĨūŋˆtJ ,*žËÄHœå}Q}`-wŦYôĒTE‘n]ÖH5Q5rn–~4ŦÆbM"T¯Å–ČZËX}>ã.H"ÚDŊIpmUO j v§ē’ƒ]žÔÕ5@]ņ͙KhLĩE˛ŗļõVbÅē/Ŋ–° 'ĢÖŠōʸ’Z}bčĐĄĮ*ųc=ž™ķõ Ũđí›s–IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment50ŋ’/ÔIDATH‰íĶ1Â0 PG2r„Ū„\…c°%UŽ• FސŠÔĨˆ‚Iģ€ߨíÚŦ/qÛ!–ŖyÚŲNAõd[˛HŲ@9RužTyŦŠ‹€5ãĢ×úüÖÅKs>qRƒ”{ũ‰ƒ–éŊPoÄwáÚWjílØĀœë`Ž-ŦGŗU˙Q=Mu\ ‘u4™¤6“"[él`…ĩ¨Øms¤ięū QŗĮäŧß5Mĸ‘­zõ&ęc~V¨gQ+Q÷¤īĐTŧwŅEŠ/cōü˜O5U}IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment51ČĸšÁIDATH‰íÔĄÂ0ā.•ŗ¸=JÃ{‘”db–7B ö[*f› č’ŌŖCķ˙0ÅNöËß4—ģ*!uVŋ×§f”%ę•MÔÆŠiž鸈Š™"ԇČ-ļ°ŗtDéRĩŖĒ¤ĮšļOfOFífÚčȲ=VWŌĄ °Wu43Ņ`\ĀęíŨCUyžqö’ĪœP1]„éZNė[á.”u¤ģ?Q=2M5UŧûĢļ›üWģîúQ¯_čv¯ú_}0á ĨkņUķIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment52QķĢIDATH‰íŌ!1Đ!ˆĘá{’^ ‰Ø°Å!8TR‡­\Ņ´L$˙/āúíK&“™/$ČõA5`MZÅCZD‰Ž5čzÂzĶLôŽų˛‡:iZŽŋ+:G:i$zėē] ŽsWtŨPG&ȯšģF¨Å%ĸķÎô-š&‘ėáLĪ~ßtްWĻkž\%m/Ž|)Ši ĸN&:tčĐ¯õ Žļō! ĩ0IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment53& ՍIDATH‰íĶą 1 …a# —áFÍrkEbŖŖ¤H™â“ü#qqûÉ~˛%‹C­2uęŋh;ĄŠˇ…´&Đ\5Ô:zQ ´¸ÅšâOÔęëV2čũ€ŪPõ{í:6 /ŲíûAuĨ\‘%Ö]$5RuLV;ŖJx+ģæĢ›÷ ŠÃ—҆ęS§ūHߊÉ…dŨâIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment54¸mV6ÆIDATH‰íÔą Â0ā+â ô }‘B_ËAl­āāč 8Dô]2„œŠtōhɖ,>Âũw!ÎH9õÕJ:Õ<Xu ę¨=Ղ:Q-i¨U j֝~x¨áđŋúf“ÎX]§ŲÃn,ę`'?ÚB=Eí‘Úŗf;@ĩëQąš'yQĒx"¤†(^Ég­JR­—´rXãPš}za–^5ĘwP9ÆđԁøV ˛ĻÃåÜ?ï:‹úõ"ę5›Ū6(-Zô[ß2 ķ.Úv0IENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment55Ījf ¨IDATH‰íŌą 1 P.=‚Gņ*!čā3dÁ)ãërXqrõW⊤ą*Ãņ?2Š1ũVĻN\(A%Ώi{+ÜüQ6fۈo+Ö3īZ囨ĢpÙģn¸o×zIHáĩDCŸ5 ŊöĖGu6Õå°ESŊ¯¨Q#röŨ5áÍn¨BŪøušYđU¸œ°ÖģŠj¨ZĒC‡ú}dˍ%iIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment56Vc7ŠIDATH‰íŌą à ĐŗR¸$e:¯āŌŖšJ(3–7đą”pGLNŠ\…˙‘ IÁoŸ>â$’XŠ×§ajŠJ_¨v8ˆŠ*ž+&ŖW¨ZžtĻzŖ ŠąiîŽĢ:Ŧ‰j5¸GAR‹ëD”c‹í@)WŊJrq<ĻmU4ˇ,6_¸Zōŗ~ĸ=Ķ4PõVą.\GĢĖ÷>،5úĒģXĩoŠĀūFcŠ…ŗąĒŸā\U L]„[uqPíė÷íŠpˇˇ-㠎Õ[ ’-?¸Ī§žú/úH;éŰ(IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment59ÆÜ*‹šIDATH‰íŅą Â0ĐošHŲĀ+dƒŋR60ˆA˛ ŲÄlā2H–?ũ]¤”Æ×žâN:1’›ü\%&‰HĢčSÂ?´p›*ŌmŌ…čŦˏk†šg5ĻÁÖÜԐ&ĒkĶÔ{V[Š> úĻŌēĢõ ÕĨPT‘kq…+\õUGz™^Fĩ]¨Õ35ŽvX#͎1ĩŽ]ģv=A?Yũ‹2lküIENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment60”-ÁėŅIDATH‰íÔ;Â0 `W{„^)= ˇ€)01rޒЁ‘+¸#éD‡(! Cã b¨×/;ļBĆÆĐÔ˛ˇ:R@-•ĸr°žÔ“nduIÚ‘ŽĄn}.ŠÅZ}¯l 2ĘšaŨB N|Ģ:ęBIzdååūFuŌ.qíKOŦíŧ”tĮš×bÎX÷Qåz VFVĸÜŦ2Ԍ+¤`ڟĒd]Æą”4°]œ8öÚ&q¤?gŌIŪ ^ žča€*¨ŊøWŊØÛk[ĐŊl÷—¸âIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment61ã*ņzÃIDATH‰íÔ1Â0 PW2ö9J8JÁ–".–(IoŅCHHŠā/K˙údKQlS™é×ęR2@+ÔBĻ’“uä^.k†šhDzԒr×ÔøēÕjŸĒu2§-ŸižĖP‡­ē‡Ļ7ziH×,Ų"MHC˛J֘ėÔúŽÛ÷Ž™ ̉Hu,@U`¤KŋwÎQƒ×,O]ËĻ1P‹”ģŠĶŪØ!-÷r°ûj7ô¯ĘUAÕ˙¸uģîēë×ô é–ë?Y^IENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment62z# ĀēIDATH‰íĶ=Â0 `W2rrĖÉ(CGŽÔЁ‘+Db`͘!Ē!cßC¨Bbč[?–ÄHޞL‹¨Š5K‡4I—D‘ÆZĀ4m,$ĩĩSÚ@uÖgŦŪ\vPÍ\lrĨE:RŊrm™^„é Ē;ĻĶ{ܒi<S[¤Ū¸ÁÕ>ųūƒzŦ:fEĸFü Ãūõ ŗøžöƒĒ?iÄ­Ę{ügĩŠS§Nũ/}ZĖūJī ‘ÃIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment64“@õŨIDATH‰íĶK Â0ā)ŗŗĖQro2qåŌ#x•Ū W¨Ģ.-t!…˜1ĨuF0 ]øH&™Ÿ å IO^Ō"û •æU‘S’sx¯yÔ„ ķŽ^É ē#oEE‡ßŠĶĸǍl_O‚n)öæTUHüŦö ŸÂĄąOĸæŧ: ¯`=¯G°ÕšU,§+°¯K@ĮëPr @úŠ8V—‘ydĻĒ_žTÔ&Žņ|_vĨÁ}ßč Ú­E-EĨY˙HCÂŪ̍¨m‚^D­E-”fũĄŪ>ī˙ņAIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment65äG5c¤IDATH‰íŌ= Ã0 `}„EWę ČĐkštČ1jčÔ͐‚kJ×÷Š ´čÃōŸ\%ą¸kæęĢ9ĻŲéI TcS¸īí›Hī-ŸTņ}šn\WÚšÕjēčû…ī[¤î\d7ø’[™Ģ œcĄ[T¸ ÖÉ$f¨Á”¨Ī|ĢVŋâŠ[|M˙`¨e‚jņןÄĐîôŅ劆íA?øKėÚ'ëIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment66}NdŲ'IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽPŲ߃ŅU÷ČŪA, P+QĄėÁŒãIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment67 ITOŧIDATH‰íĶ1!P%Go•ŧÁbö{˛l,,ŊíXI#Ũšø1Ųhl Sņf2ɈÜ8N|_oM Ē& õĒ&lS§sĐXmöęĄ(]E˛ėwŠLhkQŗcļÚŠIENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment69íņyHÆIDATH‰íŌ? ÂP đ<:t{ßQr´tķXVŧHÅÁ5nK?_ApéAÍú#ä¯ ˆV>ŦéØ]ÍtsИēd—ÄUû(7Vë…våŽę NķT‹jžqžˆNæZ6’—u„ץŠbĐeŊm¨ÎÕ/ԍęē‚ƒjŽĐšp¤:Zž*p z)ēĨÚZ¨ę&ĄæēĒ \Ëˉ1ífÕč -ÍĘ}ģ@ķŖū’>ģûë_^¯ĄočhĄj¤ĶŠę.T|SīTŧúiÂ*āIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment706đ­ĐIDATH‰íĶ1 Ã0 PC5ú…\$Ä7kĶŠ×ōMbčŌ-ā_‡ŽūĸtčPbŒ—‡dqFųX§¯b;Ēŗ§šęuTGWßĢĄ.qõĐ™ŠÍíĸw ĻFC‹‡Ĩ h˛•Õ\Ôã~kâŽâhŸ‹Č•÷šjLdĘŖlU}Tķ T‹Ģ:3­:ķX ÷:ĢŠ´ĒzÍ,v ŲÔ4đŧ›šęÆ‹Ņ:…“ ‘Ž(d˙ ‘iŨv>A$EnėÆúÖ%ĸ4Ō>aũũÕTzčĄĨ͝ōžģáÍÅSIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment71ú1Ā;ģIDATH‰íÔĄ!Đá@žŖ¸k%%DÆ×鄐(`&"9wcŋ–Ũ…‰Dü]sP~ŌˇŌŽëÖ°qŨĢRËX™ÂYzxĨ•iėh ×ũčBƒÔÕuwŽz׏ۅ^J]]”6uîW=¨6T+ĢdÃͧÂ>A蚩Î:Ē6ūˇrũÜoTĶÚu6Ūj…ęLĄŨ>“ĨĻ 4Ō)›á38RųtĪKAí+­ŖglÂK/Ŋôú#dËĒ’YĖ’IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment72c8‘ŋIDATH‰íĶ1!P6[PîŒxšŠ'Š-Ŋ†D!í”[e ˙K´b2ŨK0ķ uQŋÔŲąĮJ6ƒŠ’rĨEĩHĶڒ†ƒÚŗ'ŦšĮi@֓†ę$ŊņŦs4VčÃKzī$ ę,ęqŗÆ´ĶūÆ+íeYŠFÎpžWQG2c6X­Ÿ,ŌH6œԐ\ÂII% TR –nÕu>ßôN÷STPM?uŽQˇ]ŲV¨xĢĻM˙Ž rą÷@†@kŅIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment73?Ą—IDATH‰íŌ1Ã0…a,}…ŖÅcˇ\ÉGá‘ēdˆLŨŠ˙”Ĩ’ųˆC5yZߤ]H›ėŽ ~m¤'ĒåX“÷X%{-¤ÉI3jRܛũ*~‡:Dö‹5LōQĐd¤ŲjŦÕĢp_%ĩ˜‚nSãŦR×SBYõųŌqÎ-ÔīAgŗ‡{ŨĘo jéŌĨK˙F?.–øĻ ktIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment74Š[4´éIDATH‰íŌA‚0КšÔ7īáĸÉX.9GQâ8åŒeŒUÄp&Câ‚Ųũŧ¤ųéŒ@fļbHM-¤Īh.tI=˙T†Vc…Ļ9`t$Š9Ux˛´jÜ[ŅH^—ä´ ^udg˜úČčÜC×ŒŌBkH-~ÆĮo8Hŋä$îX•dĢŗU…P”ĻŦZĢrFW,jÍ::ķ`]ī(n+?}o?éĒžæū+†mu÷ŒEmEŲˆēŖ) §ö×ĢíupÍ~Đ˜ÕUŨ_Ģëė§ÕuūŨFũVī)Y°[:ŲIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment75ũ\"ĄIDATH‰íŌ1à Pĸ 9BŽâŖ‘N{„%‰8H:teôÕ%Q×˙‡´S <Œą32÷MBĩąėŅä„*ŽmŠúr/Ėj9&ŌxŦįôųClŧ™M8gŪ‚UeSϚa­ĸö–á/ŧ¨ÚŽũ9]ŠzĒĘD4˃ęŋ¨-š )Œ3ŦdŲqOÎÍŪŌ¤ŸˇĒúīųdT­ZĩęEôįfÄûžķ˜IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment76dUU˜+IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŌSv>~ŊßņÉŪ§™Ģą,ߌQ=Ļ-ĨsIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment77ReŗIDATH‰íĶģ ! `%#0 Ŗ™SȡŠģŒF Ī Į'ĨHŠß‘PšHPōIŋœ§ēß+“Ĩ5HKXŖpœT—…qdŊŽjP%¨Qä 3IdŸÖhŠķ˛ßqFî,&TĻ­ÁČžŅÖ ičåŌ ŦU/ˇO}ŧŠ’`U’†"lé‘Ú--ĪidĘP‡¯”ūYģ*Ŧ¤ęŲ&4Ī^´Åp‚ÕßnOûëõĨK—.ũ}sŖ1›]IIENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment78ƒíxŸËIDATH‰íĶŊ Â0āÔëä5œĖ›YĄƒ¯ÕŌĄ‹ā+$tuˆ[†JuĘ9‚ 8ôŽßpš?G$RgņkõTĪTË VĶ ™zÍÔņĨ–ę@uüVLV#SMuWæUŪŗi˛ļHmŠb¯‘ÎY é”50­BC´&:FY>˙ĸ=Us":zŽGĸCĐ2Bŗâ‰ōŋ~Đ+ÕģÂĒ.ø 7¯ē Ą:ÕųédôPŌ˛Ģ^üuļoNˇ,Ũ:E5•)Ŋ3¸éĻ›ū§>wGÅĮ$AžIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment79ôęH ÍIDATH‰íŅA Â0Đ)˛ėÄ^DĖŅRqáŌ+)]xx#n*†|SWũŗP(.f÷`ū„/P^+ĶjßGĒąBKU|Ã4ˆûAËfš¤LMÔ‹.Í>8œS3Ž E¯LƒĸwTÅSŊm=˙Q­ĒÕta@uepĄ7'ŽŪ Ŗ ė¨>ŗÁžęļčĒ­šŽU]š\q“KMD[ąŠ}Ģą´Ī[@rīüQũ\7ëŦ˙Ĩ2}îMÕ¨j¯Ģ×4éę4ÍĒBWü¯žmČúCđëœļIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment80 ŽėbēIDATH‰íĶÁ Â0 PG•đ1 ˛IËd¤ŒlĀ  U1)Ŋæ$$n‰r{˛Û˛9ŗüWW…šœĨęė`ū]]ŠPĶ4!-šąúĒj Z$’ĖĨ֊U”ëÍtiâĻÖÉ"Âuǃ ē¤ĐÂëĻįIŗ‡ąyÔ;RōÉÃX{Pĩ|$īĻĢ˙ĸ#Qe­.ąX™/*¸WEP“íBũlJDZGįkY­UĐĶØvs}QĩŽ]ģvũEß]āîž úIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment81}ŠÜôÍIDATH‰íÔą Â0ĐŗŽpG@ņ L@Va›e<‚K&‡“!¤ü_¤€&WYz:'ļî[ŒT/?Öžc*rÛĒ㤎iĸ–ˆ:‹us¤jƒtPŊŨ‡´Ô^M ĐVTioķ‡wr×]wũÖДˑBAĐĮIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment82䠍NÔIDATH‰íÔ=!āŲlAŗ‘ ˜pK+šÖv˛7Ûx§ŗĨ܂€Cbé{…Z,%đ3 ´$ßéƒęČ´R-ŽiL×Č4AėēPÅKîjKÎi5U°)SË%0{’b*T§é6ųzÄ*cŊ€[N’e(ë¨[”ˆÔé% õy‰ęJôD4(U–U͍,Ë5@Ũē‚Ē})˞‰öŗ"ĒD‹×Bԙ‚ˇÔëyŠxûM†*r…:6uՒŗ8ÔÕ÷H3{ƒīûŽwĒ7Ēøūßũîēë'ú`&áŒTCÚIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment83“§ŊذIDATH‰íÔŊ ! `ŸRP2+dVJyŨąAF¸Uî6ÉHiPbŲ!éßK•ŸJ>Ųų8YEžŽ-0Ũ¨ SŖĒ‰ļ×>Ō˜^zã+Ô-šīPKv›ŪËŅlj,iϚ*Ōĩk„z6™ąöZ Pû]5܈ZđŠ œÂ[uŽđÜŽ‘¨hÄĶ÷Bu›ĶSļNŦdV˜vYTy) kkÅęęŗyūÁ4tčĐ˙×Į]ķ/›ĶIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment84 Ã({äIDATH‰íĶą Â0Ћ‚ä2(S%+1ÁŦ61¤´„ņqĻ!üC  7OļŋîÎÄĘZĶ”zPuŖiČ5íJMÕ´…˜‡JēUG†ų¨ęēД ŌPp$đļ(™@Ô,3ĐGŅÜų9Y Ū8_c-ÜrE͋Ú-T­ŦvsÅPģō‰6 Ģ‘4Â:_ö(i¸×ho™ΊÚn(Dų¯? §ÉôTßĢžŸęYŋd9´IENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment85zÄíČIDATH‰íÔ1Â0 PW2æí5XPŽ–V\ŦG17ˆÄ¤Pã˛˙?€͐å)JâoYŒŦYž­Ēkf:3í´I!Z…ŊĒL5RMčä[„šÍ$ õBvĒčŲ u–LuĸšĒ$¨Ŗë„TrŦ1ÔPĩ@-—›ĸ:oR[‰{ã…?ÚĆMP‚ŽŌĄšŸ%ízbÚŅŰŽļÜąĒ­Pk‰ok]a5š$U¨]&Å}åņ“ž˛Ģ‘žz]Íf]ŋ˜ĸ‡úwú~ūã ] ’ãIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment86ãÍIWŨIDATH‰íÔ1 `L:rn"wņFęäč•ęä5ˆ^€Nb$E¨ŽüMŒIßÂđåŊĀãH$:1-ëƒæē/´gĻA1õšioŠB,ē§*™ŽíœŪHc>ŽÕguĨŌ43ĢhĶjM:cmĻ­gĒŧ-:ÖU;{Äš\•3ǟUC+Õnm‰zÃMΤkÔ~WÕĮKŨ6É+“ãâFh Ŗęƒõ—V&ö”ĩ^:ŋ!Šļ¤ręT´Ē3)ÉŌ°WĶoáƒ\đíŧÄĸ‹ĒÏvõgúØĐīĒ\ąģIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment87”ĘyÁšIDATH‰íÔĄ Ã0Đz¯Qæ•:@Ĩ¸¨°+šĘ õ†‘¯)û¤QQŽ>p˙t§ƒ‰Š8X“T(mR×Ai•–IĒSšũ~MĄO˜Æ.…ĢŗރR dĖ\}ÍŧéČ´áâ“ãzs‹qmZ§_4‰Ė]éŧmØtVJw´éĢú]j]ĄëdÕ1Å愯NEé›kēú§PøGϚ´Ū“gZ0GP­č­SMÜŗ}ŸÃáŋîÔSOũŸ~FØė u8ØÜIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment88udPōIDATH‰íÔQ āLxäÆ]Ą‹Ũ˛xĨí&xŒ6qRaņÉđ×čæ›„ˇ/MĄĨT,ŦϚ­ë‰cu€Úō(¨bŲ“Žšƒ…J–ƒƒšČ—ĶfMˇéËøÔëĀÜ‰ĒąĻ@ķ­Ž+…õ+\gŖ“: QĨík¤šö:@5´ŗ I“nąŽYŠ|ãŦãÚŦ´ąĄ\é)VÔK‚ŽßŠp*Aã”w†JuŽÕä !åŦ°ŋŦƒëz‡´k ~ui÷X{ÅĪžW 8MˇaĐĸŦ÷ēLŧČOø×…õúëŧ¨­¨ƒ¨įOuõō3}-ņrZ\ŗôÃĢŪĸ]‰bIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment89srTÆÂIDATH‰íÔ=!` %Gā({4Øx16^o0ÆB ŲŨhå{…ąXÚ/Āc`PŒ >Ž{ĻuĮ´PĒI3†i˜*OĩŊ¨fZæČWĻĸf͊šs#ÍD•%*ĘSÍԌ]QfąÕxZžĮsué\ąÚä—Zŋ¨ËM`ĩ$3ŅÜ5;¨.zÁÚįĘ@Õ3Mh;B-]PĢ˜šqũ@éĩ A‡ÚÔ^¨ˆĩ-á•;lú;Ŋ|MßIĩéë |—úaī)ZŲIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment90ĩŨ#ëIDATH‰íÔ1B! P~9Ūo††ÁŅ+a<€WāoŽ$b$Ԛhōûĩ]~~ĸ‰lđŌĐR@0ÖjšötéLu~#Ú:ĒWĸu¤…hYHš ÕꇚėHŨPŖ)‰Ą¤@t#jĀ"˜ĶFÕYÔ¤<ŖMiˆĘ1ZĻ-¯~#čĘA‹ŨōĒQ‹¤;IÍąxVąũé5ŋŧi2§Ž×l’¨|šŽĻgs~čĄJĒt+Š]° S4TĢ%uØ&N÷EŌ¸„P§ Kd5wxŸ=§MKŠ#uņŠísš“˙Éŋ~ēŲ÷ŊMĐų˛ú]Ŋ˜Öë˙¯&-ĢIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment91d˛íĩÎIDATH‰íÔ;à `Ŗ ŒôžIšV§¨#7Ą7`d@¸QĻ$Ē˙J‰Ú)^?![~@b iōH#T PQŪÖ!­ia¤Ų#M'4B°˛ˆŅÕH]5s¯ä y]9ĢzįôĐĩwŠ:Uƒ‹MWąSŗ@ĮՌw:žP#ļCÚuÍčjÎyŸ_T¯šךÉH{7U]‰ąžŠĒ‰|JĒf ™Ôų’zSĩšÍ īoß"]ŪĢ[ˇäÆĘH3ÔÕũĐŽë @›ū3ĖQ,TFē)áŌKĄo›įéÜ0IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment92ũģŧŋIDATH‰íŌ1Â0 PWĘ֕‘ƒ€q˛TbāXq‘J\ Ũ2Tū$°ö{ BО<ĮąėŒčd‘ę É1DĐĩ–JÍ4‰¨×‹V9Áē5´NGĒņPGåÎYS\"hĪ#š„Š)´ĩtrUQmxeŸ‹ķģūUü#MSāŠ’Āt,ę \°§z/įüÃYo0ūú CŊîøŽú¯hŠ6U-•&9`VO7ĄgGĩ^šļ“fToH#×zŒĒŗtôč¸öOŽ)Ÿ”žČVõˆš¤fˆ'Žž#ÄYû9“&)Xo#觑õ&ûœ–´Ft–Ļ`鷖ônjģB;SąëŽģūč°ŲÍå†S­Đ7ËÍųÆ béIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment96úÖxËIDATH‰íÔ1‚@Đ!”+Ø[ĖŅvŠ,=‚W!ą°ņ/°ÄfMÖbL’ßžęĪL†D‰ĨMôÕņP#ąŧ †¤Ŋĸĸ¨/4u•Ļ-Ģj~iĩ‘õjąŪ‰ĩÄuš$Vĸ )ZĘŠĄCš´¨G+Y(˛“<"Ü+*fÔj§ŠŠÖ"Ž•Ē ęĀHĮ ‘MĸŽ<ƒŠš%ןË!sÆ@_kč&jlh‘.ÔhY4V= ÔäŖŖmæ×ŅWMž ÔÉēw: ĩK|ÆĘ™a­,s>Á:[%†šÄ<í}U™m铨ąÜz¤7[Ģ“'‹Ž^]m‹ŽHĩ*|¯–Ļ•ËV-ĩ‚ŨŽëgA™É2áŪ¸—í¸7ęäęĖž‚ąëŽģūĨĘF}ü4Õ'úųĒü:”|hOIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment99jie‡ļIDATH‰íÔ1!Đ1”{nâ Œ…×›ā čĄ0.Û˙Ÿ¨‰6;ík&0˙‹‘IōcmâˆV9ؓjQ¤eÕ°:“…či?ôõäģžĄšoXoļTÍHī#}ôPcŽčēĸí ­T ÕŠĶ´j‚:OĢ[ˇfÚT˜ąJėBT‡LŠlĮLÔ°&Ē9Îa Ĩ:Üįڹ”ͩT3Ėī\J`3lJûęú‡&Üu×]ßŅHUöɰŖ°ŠIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment100XŧJ6ØIDATH‰íÔM ƒ0āHîš#ä"‚×rQj KV^#ŌmŗLipíÖ7B-”Ōēũ˜ÉsōŖXøœÚĢYÖ^Ō$ĢØYŽĨeSy#džzØWP΁]@:U-ˆUT%Ŧ~˛`NeíŗĨi7Õž¤“¨ŦĮÜŌú gõGĄ6 ÉâZYĪc˛ §Š‚–˙4™ØáĖÉP×Â9SM Ū… 5Ô¸û%ÕÉ8Ixí<Īų Øa-mņM™õēŽķÉA‹.Ę´}j——ßņNūõ›õ.ęíCŠ~LĸÖöû[Z˛ŊIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment101/ģz IDATH‰íŌą ! @QŖ+(Qí.›1 #¸¤@&—HQšøGJ¤Ģ }ū˄sČĩjTemRæšGpĩ*jOũUšûģ6ͤ-C•J1ŨAjśošI{2ŋ9|ŅčĢąn¤ķÔá7‡‡fhũ× =„´žûLZ@Ÿ˙›<íōš˙I-’žÛ—.]ēôBŊÉûœ;7ŪIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment102ļ˛+ÎIDATH‰íŅą Â0P‡)ÁŖ˜Žą.cq°‚3(‡“ „„˙5ĄˆK?ųüõΈrjķ›E.Pc!ŪB F¸„ęÂTfBŲŌ}ãŠÂZx˛5!-ÇöuŦĢÃ*ęHzęDŪ“ŋ´UÕ§9‹sĪŠÆj—6P¯īčTHĮ*Úqt˜Ôj:8mrt7¨Á“˙xQ¯*c-ƒģ›|čYIę|čÔÕÎh;2iG¨ J^ԃ’ųD/UÎĻëk˙—Š6Ũt}cž:⃒\IENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment103ÁĩŒĐIDATH‰íĶA ĐOšČN.ФiähĨ'đHâĘkÔāJ„‘…qS˙˜čΔÉK>3@VëōÚŦõ¨ęIUų¤7UŖ×VbĮ´ĸĢĶĸj†ŅÔjš WĶŽæ:×ŪŅs‡ĻW#ŲĶŧŽ“DUöVZY‚“hŠîšŌŧĨUæÚĩ>Ņ×đsë1ĶŇĻŅø›–‰jđ!{ŽcHšštāڛ4Ōŧ&ķŠ‹č2Ÿēļ€v0ÁUđŠÃ iâ˙Č?o÷Nå,šĘĻ›nú˙zWõú­>MQå!fIČIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment104_ŅŽ/ŗIDATH‰íĶ1Â0 PŖJÍØ•q&|-ļõbå&=BØ<˜˜˛ķ?H$¤z}˛Įļ‰"ŸĒwPMcÆ: 1m –j“.Ēs=. ú*bÚ5œû†Â~ē%šÚĒkōįÚtŅũā§„r›0 Ž}b•u4ƒęz!j™iÍSĩ>C-W:įRå+Zķ™ęčXķÉHw)ČOĘNæĢė ŊĐxĨwƒÄĒĢŽú÷Ú¨Ū~ūĒ;GęlkĒIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment105(ÖžšÄIDATH‰íĶ1Â0 PG Ķä ŒlŊ Gā‰ÄĐąWęQ1tĩÄb¤¨ĻCųf@0ÕëS먖IHôwmMŨXʤë@QjO‘ąĻCc)vPIÂ˙jV]ę™%œ—Z^š-mŪč3z‰yēܯŒ;âZ‡]„sŽc–× YR'áurâGC‹×⁖Ú*ž•oÔęčČPiÃI…ž Ļ›ÂÍŧßųR¸ÂÛwĒžĐę^¨ŽēęĒĢū@¯īHūŋ~K"ŲIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment106ąßīÚIDATH‰íÔK ā!˜°œ#p¯Õ…ąôIŧ ۀą,X´ŽäŸ&&Ũ•ųx ĖUĄ9ÚX/’f%iŌ’Fķŋ+Š%u}\túvŋz­̎„Ü”LÁZH šI­(1ŌDmV— ÔĀŦĘe Ÿ8Œ(ǎ‘ōMĐbt˛Ņ­NTß­Üæ2V5 s {A“¨‘}Æ1GNX¯j÷&ŸMmúēė;ā,DëĪ Ō|^ë ;¨ėĒPWžV“jN"Ō:ëŊīėƒR˙h‚¸ũ/ēëŽģžü÷čĸ%į˜IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment107ÆØß•AIDATH‰cø ö˙1A”ņ‹$B+‚˛˙đĘūaĀ̝,ũ}TOö˛šjTvTvTvTvTvT–Ú˛€ãMā-ģũĐIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment109!`ō’%IDATH‰cø40ŒĘŽĘŽĘŽĘ!Ų߃ŌUŖ˛Ŗ˛Ŗ˛´”iKQÁuĘĪIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment110A§{wãIDATH‰íĶK Â0āˆ‹.{!ÃE!Wņ.]Hņbõ$Fŧ‹Ģ´nĖü-– ‚ŗ 摈ˆąT4ęē[åP3V)‡Ģ6‹Ę˛jvhvôŧ†ŧVbUžkÕŦ’ͤõĩœēZT>ŗS´æ•­°*¤ ^ëĒ:U¤ÔĨ…˛ sÁī×KģiÔŋkČL)÷Īã-ĄSQÎ&\æ(æZLY5Kmø×­F?ĨŠÉv_šŽ>ē…šlļÕÕ'GŅ*%GŅjz=UÂĒ4R6ūú{ĒĮŌ0@ũu)AŊ@ŊB_Ķ;¨'úúv>ĪnIENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1116 KáŽIDATH‰íĶģ 1 āœ(Rf„ŒâŅbČĀ*FŦá\^a.ĸķ_Üq :ˇŸ_…§Ôb5riĄJuĄPsqĩ×§ktŽ1:P#¤Jw¨T°6ĘMPŌĻĢÕ–Ū°vĨĘ~Z\ŽĨH­°s‰´OÉ9Gę ĒŖÎCÁ/øų“´F/POH_P{Fjéōŋąö„ÔAu ķ„ô?×ÔëŨ˛ÕĄ‡ū§ž.; )—°bIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment112¯Š[ŨIDATH‰íĶģ Â0āC)RŪ^É+ŅԐ `fq&Ál:KįEå˙@‰h"NrõÉw>ûLQˆš~Ŧ7Qk5Ä@ Õ˛§Ē)<P…Ûb-wØ@eëԐ4BõÜîįĒãVcm;…uā]õ īųƒĒ¤JÚë5ŌԑōYœúuųÔŖŪ­¤–˛…G5P=[]C l4Q4-}ɉ~&IxŖxˇUß(y“ųƒæH´!š‰Š&ŦÍõH̐sM1xo:‡åuĒūŠPmõ ĩÛæõNTē0mđĸU+ĖĒŲ>åüÕ QW+ÖæjwMˆZŽUPGÎ2-L—Ua¯R–š^ųéu|i];øŒ[§ÍÂc ëÜĻ5n×reš•iĸzŖę˜&Ą¨FĻoĨ[íēëŽ?čúĸņŖC*IENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment114FĘŋnđIDATH‰íÕģ Â0`#¤¤Ã#c¤ķJ))"bÄ ŦâL‚7ĀåQĖá@—˙$eÜYŸŨÃ>›Ŧ,oVë^Ķq§iRŋĩĻÁięû˛y,+JkV˛¨üt!‹J@Yô&ŰPīĒf]Ŗã`Ņ`Ųā:ûš îQĩgŠåÍd/\‡) lA“ŧ)2E¤B‰"amuąušž°&—ÖhķŗRjpFērQ‡ĩÃ*]čHëQg•ū†ŗõ‹XÎFčąæĘôŸÉpĖAšû1'Ō4/‡üQ°^:ŦĐë ESŖč„n~Q&MҐœõ=$ât˙ņjlēéˇú#ÉéW1gäIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1151͏ø­IDATH‰íŌŊ Â0ā‹R¸ôxĖd8°’% :VĀlpt–ˆ|„ôīABBĘ×|ÅũŠ‘ä÷:x¨Õ™HDĒŨŦi‘F4ˑč¨{Rˇ¯\w)'ĻÍÛ\ öøB/H§^Šž‰zƒ7Z4ŦÔžúŠ&2¯oFˇ՜2=Q͇đÂZ$>ąĒĂŋ}RĻωĢ-iŠXķ’‘ŽT;Ē=Ķæ˜ŪüzŊíjĶM7ũ{}Ũ˙J ūˆáIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment116¨ÄŪBÔIDATH‰íĶ1 `šŒīF.bĘͤN=†WÁ8x ŧcB­…‘˙‰‹1}aûü/ÔBjTßjė™zpBŅQ9¤É,‡:KÖŪ" :ëÕwL§'S‰Y˜ž% ĖyĶ&ĩú†4™h§;S/LAäUgÍŖU¯ąŊščē°‰J„éIbģĨMD ۛ6E÷&aēŽ~Íl.ŊđôßOĪw Ę)ōĸķkp rÕļUEøzĒĒ Ųĸ4[4QÁG¨ji*\ģîÚ¨ė~1Õŋę Æņš_BIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment117ßÃîÔIDATH‰ÅÕ=nÛ0` ´eN^ŖCQ^ĨGč‚P…:‚Žb )ĐŅG0 C"CX˜åë#)ų'& mŅ7ˆ>ū<ņYt™¨‹Ēô/éķ•nâúËęé8’EtģÜÜЌÚģ˜6‹~öj¨ā->NtøTÍjœŪSTļāÃ70ėQ—†eŧ.ˆĄ’5ĀŠ(¨Ļŧ/ 4Ã7â­Ĩšī tbT†@lQSč™\Ôp0Đ Ĩ,› …R0(ˆđÚXjhT˜fļ–˜iÆnÁ+'#H獯ÂĖX ōKĨ@–^v.ôë…J>ž´Å%÷ŗļ0=Ÿô‡SŽa?bų:§ã v NŋŸënÜ_jē•tj{œkB ÃÛTPIN뎭SËé€›Û @6gúPbÍքö€Û3@ŗŅô¸7NGW˛T—5÷ēÖsV‡šâ;øår``>T¸­Ņ/ÕՈ$”ã2LTQĩŸ¸kD|fķqš‹ŽŊÍ)°ŦÂ˙Öâũjŗjū@õ›ęjųĻę¤ÖqåĄ)ōŠûŦų”ĐĒ‚+ŨøĢuú‚z1ųaŅĘWp˛¯–j‚âx•†&9•YķŲnc‚5Ų,Ņuįˇ`ÖųĨ>˙MžÖVĄ)Ī•ŊRģŠũé¯ĻŠk“8BčÄŠŸüI˛_Y•R÷Jxz&T†¤Ē]–RW•žį˛rP˙ÚP#žĶ'IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment118O|ķEIDATH‰íĶ;NA `G+ąeZ ¤Í1R †›Ž€hP­÷&\„"Q#0šÁĐMaņjÅÆ6EŠÛoĮšõīvǃShœzÚÕŧ5´C†ē@Ŗ+„rS7´@ °%¨mŨd¨,͸Īs]I´}LoC1­‰_4Ü yÖësŅ•1žĘņo}mõ[ũœũ0tŨë’ôi Úf=…A17ŽrBWŲĶČÁĐ"¯ŠQĩŨ3ŒëWsØK%ũ~¯t•]ĨģJTŊÁTR •eĻ[#}ŋ|podÔ˙r(FFR™ë4¯ûúîęįũŗž>­ķÎUžęU˙âĒuūˇĒܝîWbIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1198{ÃĶZIDATH‰cø40P(ۀ_ļ¯Ŧ=˛ōäËĀ/‹×Ūxe?Ôã“Å †ģėŋzŦ˛ß!ŧ?öød?ā•E,T{Ņˆ*ˌWļ¯,:•••••ĨĄ,9ČAę6ū(×IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment120jŠ(´\IDATH‰cø40P.ûdŊėød˙1ԓ-û‡Áėŧ˛øõū# ‹ĪU˙đ†~Ŋđęũ@••pŲ߃ŌUCKvæ tÕ¨ė¨ė@ÉړĢ÷;˛]EŽ,ĘA<܈3ûIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment121"ÍIDATH‰íĶģ ! P# —7s¤b•LPšŦÅéŠk"Ũ Œ@I$‚iŌ`"”O…hž,°Á@°đe͊nŒFM ÉC[RŦ:¤ȋļZ¤K0^vÛ ’0šE÷te*™1émæwš “Ú˜ŠĢ^ŲNVuGĶŅ9čŽ.AąÕĘj,JajĢLģÕË$ĢļĪuUĩbÔv Ëh&ĪéIƒŦjSv^‹´_Ą$Z^Ξâ)Ė”9Q§åĢsŗđŠĄC?ĒŠĢ÷Ũjč˙ęƒčĪß 4îIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment122„„I˜ņIDATH‰íĶÍ Â0 ⌠=ÆŖˇŊ†e/&ŽžYĨņ˛CiLa°&ĘŠ`Øađą5Ͱ>Ą4šÁŌdę8Oaĸą1ĩˇ4ĖpĒS[]Sg)9Kc›5ûFՀEAІGncĨ’3íĢ ĸtjäøē&QąĻY´Ŗƒ#KQ*R×ņ•î5ŨZĘTtˇTÉüķrEĩûŠÕxälë ë=•.œ7Jƒô7žǚÁ% ŦLŽLcF¯+Č#¯ƒĒ Uš¨6íGö-Ķ|Už[\YRMi–īTëņļŽĻŌ—ôēBo+žĩŗŠÃōs+ņ×Đ;ū ą™›jŗIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment123ķƒyåIDATH‰íĶ;Â0 `GĘØ#ôlŊ-b`äJF\$kÆJT1NÛáßCŊDʗÄy8$NŒ´ëŽģū“ž<-„õ!3 ‰:SK‰úDŠ3IĻŽNU[Ļ`j&I§­œT‹§,QØV&šĢNŅUûŧ‹6ŽžĢöčŧŽÎĢf aŅ4` Âļ.yUÅĶŅŅi^õėj°5UBļ2 ĒĖeęĢF[GęFÕT.myĢ[-x”W?Vũ&=ŌõB†T–p´h-ƒ=oqĩõæęõcPpĪ—ĩoôØēl}ŽMļõ;~¨oô‰Ō‚†ÄÕIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment124mįė­ IDATH‰íÔÁnà PW™”K'z܍_ØøĮĒ‚ÔëūĄŸ2öû…ô˛›ĨYЀš4v›*íŽ<6Æ@ē3<ŖŪWŗHíËÖ5Œ~OĨ{ĘúũJ›>Ą‡(ÁĶhĖūAwãôÁM˙•~¸úîę‹Ģ¯Pŋ*-nz5ũX@Į@ŋ%ėŪIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment126ƒé×IDATH‰íĶË Ã PG9øH7Č(-H #t6čaƒrĖáb’¨JdœC/=āâÉØü€”°@oU_ĒÎëč!ë Ęú,ƒšz˜DŊ 9Eĩ†‚!{ĶðMÍGEōŦFĖքKEsKŦ†-$UãĨæēĻžō’sŖ¨T4bėE |’u5Ŧ•ēŦyedõĨ+UõÜ_4וīčBą¨DuHĄOhe…ž|G ŋÉšîû)DuģŽ'íYũvEé¨ü&s뇑N]­˙7Nb]a˛iĶĻM˙Q?Î@Ō÷ĀĮ•oIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment127ôîŊ–IDATH‰íŌąà På<€Gđ( Fc”x—X˛āH§/įœt†Ŗâ!ĐI"qV¤?ë$˛A-zĻ;Úē“pŊL}S /ēb kƚēÚ˙6•{ē)E¨­Jr íe´•ĐōM,ČęŖv/ôÕč–îîËIŗÅąIûî阤:r…f0WU3PŠĨö”Wq´¯ĄC‡}„žOķīÅ:SIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment128dQ †ČIDATH‰íĶ1 Ã0 @… õ„<%O‹!ų@㭟(ÔOt ÔD•S0JÚnĩ'ãCF’e cyø&§čL )´ĮãGŅÕŅ‚ģ8ŠŦRŦ1ë0| ÁQĀ„ĐÚA'Ēßĩ÷Ēž EšXƒŦŌU×3r'ˇAŅ”•w_čøŽme]_ĒŧūK7´4uK!­’Õ BZ%vŅÔí3iĒĄ¤<“-_K#%åÉi(ÍJŸųÜoDĄ5J]*jŦĒUĢVũ }Zį8ŒĄÉ#IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment129V¸IDATH‰íĶ!!ĐŲT`šė¸Bm˛Į×k‘TTöåHa:ėZū4ŠØc^ dæąrŠÕoՍ5Û^ik´œ]#‚šDÁŨ`9Šž W‘R×v5PÉ5˙jŊ8.OMķ v#‹‚_íštŨØõĄę=hú~¨iSūIãw­^Ķ U4[ d6ĨĄöˤULpá`Ę+™2Ų_&SĮFbŲhÕļ,ōŅû;uęÔŠŌlæŦ…ųxŒIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment130s‘õÁIDATH‰íĶÁ Â0 āČzúB_Dč‹ Ú›åĨ0ņRXilĐÛōwâ<,”Rú‘JüŠ;Ī#rų].-ģ–XcÕN×[Ũ= ™°RK qŠzĐ5“=ę=W­‹OPknÁĘ—3R^ÖL2ˆæÍƝSß֔?VN ŊHrĮDipcDęD‰ŦĒd Y¤YÔ`5K +'2ŌvęŽ W`VųY17šķ;Zö-UãOtZĄŋëjĶM7ÕõE;āÍyA IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment131–)cÁIDATH‰íĶ;Â0 PKĘÖ#ä(>F„k°‘ŖTb`,"‡Âf{RU/žōņ' Aü^ĪŽV‘‚B­#ʘÍĄJVíMeĐKUGĶCŅÔ:k˛3z*ŪEŲ„zTĩOndœœjlĨ$î÷Ž^UwĄæH‡P“.ŽJŦ­‘īę!RFGŠMNõT;ؔ„zOYēš Rģ:6Ô1@đØ›ö9˛=í¯Í§˙üũUW]Ŧ^>Đék¯ZŽŪŗPãՋâFiIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment132ŸxŲÕIDATH‰íĶA Â0Д,˛Ėz”^LšáQ\¸ôVŧ@čÆ !cšJ;3 ē’†Ŧōø“aH0ˊ¨Ģ8ĩŦ Ãh(š{=VxT‡~*†ŖžŋĐ Ģ{J KZŊ†æˆkČYģÂÕįŦm Ŗ :h+œ‚›Ik×ĢFĩËĒhZ¯ŦĻi¤ũN§×ø‰•y N’Ķ ¯ ֎ÔJ&ŧáŗ&MÖ"ÖĻ9ëD\hwÕkŲí uāĻ˙÷ĄÆŗÚ?Úišīj•¸b§ŗÎ:ëßëÃ2įū‰)ÄđIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment133ę˜HOŅIDATH‰íŅ1 Â0─s„ĨGk'=’ĮÁˆƒŖúčobq˟EtfIāË{äũQ(ŦN}EĸĄjlU“Uo!ŠŠA0TI˜ö&5īTKÕ@¸ÆæŗĘO´ÔÂå5FŊ4ŊæUĸZāXŦ=u—W¯SsĻNA4`Čŧ›¨Xš†čq.kMŗŠ* sԖĖ[% D}… 'Ļ}ĢŽåSāųjdę×ך¤¤`Iž—í×ũûđcŠŠĸŪ‹zû ķĒĢŽúúálü*1+KIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment134tüŨėÛIDATH‰íĶ;Â0 `—Ųđ|Ô-fâZ•zŽĐ‘ldˆj\Šbil–Žõ’áË;@œb8BK4uÉÁTFûļęœēļÎ(Đ 4öˇę¨Ú-ČÉĐE•æļ2V€Jy¤M¯ž‚b)`‰Pb&kläBŗĨ5r&clƚ<ÕÖÕģ*šÚ{ē„ŒÔ\ˇĸˇĢJÅŅ’Ė{VÍŽŽpŖœšĒšbĐČÆš:ÂŧÃ_ę Y‰ƒ\@ØR’gˇöi¯Ģí}ûGŸŽ5éUÛúŌGlĪŧÕÃÕˇĢ:õÔSO=Xŋč×PŊ@IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment135ûíz IDATH‰íŌģ ! `# JFČ(Œ]Ö"J‘2+0%Âgt‘Ōā?Ō)%.ũɁ‰A$úˇ6‡´~­=pĻŗ|ĄÍ‹Æj×ZdU-–_Pß)M sĒÚŠ`+.ĒöŠq\Ōņ[i†úĐUōO¨w¨^Õnįh Ũ m¤ŋ¤åJhĄ[§ĩļÆĩ:éŦęüÁ†ĸä>¤…ĸߨēuëÖ­éÍŖūxFš6†IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment136šōŧĀÛIDATH‰íÔ1Â0 PG {„r“­A ƒĢ1p #Ö"–J@?IAbĀŋ,í€T+Ęōâ$’"ČtÚ]ЕTĄ)lmŅAÍ^*I=Ķ udę˛ĸę° žĶ2ú2rU_*ÕJ}Eôä°åŠŦuJĻâ­CIĶđlįŦ‘ëŽj÷S×ĀĘĀ\ũ—’ę'Mé×ŧ 83m÷å‚i#ž[[ņ*•Õ^ŖX×ú¨Õņ}OžbŊ'}•gŁU!Å 88éûuÖYGĶë ŋî¯}´[ũ“>)Îé“+9÷ÅIENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment137íõŒVĪIDATH‰íĶA à Đ Y¸)õĄŪ¤^ŦT{ŗÅ#¸ĖÂ:…BūR’ĨÍwf$VžH{ké4ÔÕr´L’Áj*ÍPŖč$:ūo´Ĩé4V˛e!^f¨âjĄzYĮd¯ƒŠÂƒ‹kęēTÉ2‹‚åŽYŅY ŠÕˆŽëÜÔj*—åä‘U7ĪAĶę€J5˛Ģn…ščæ@æØĒtuqŦ2QÔôˇéũŒæjⓠ$čāÚģÁlláo÷÷{č?h ĒúT=YOučĄßéķS_jjÜ8[TNoIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment138}J‘ĮËIDATH‰íŌA Â0ĐŨrĄ×p!ä*ÁéŌcõ&ĻxŠ›ˆÃŒ)ŨæbģúˇŸ„OH´´„ÆĒŦ]rÚĨĀĻĻŦmY…Â`ëÉéjĪNë˛ō¨•î Ū°ĻŦ‚ģĮQ¨D˙'´¤×ŦgŦÜđīꙁļ^“OHs7…§ĄƒŪķÔHûJĄ¨Ņk× 5yÔĨM¤˛æɖVÉÖũ6Ōļøæņäŗ{Ą5ŽĒŌ¨‚ē_)XrJžÚĐR–U6UfčœW­ēęĒŖoŨ6ŪŽ9ôđIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment139 MĄQŨIDATH‰íĶ=j1⎏Ø& #č >@@š™Ö'ŗ;_c—\@]Ļ4™]b7ÖSc‚]ėBđ!˜?Á:1ᚎUÚz2\ĮĻV8åģū<¨ bķ­ÂĘWT$Ē%øŲT-ęČ4ģŽ7Ļ„롎’ÛĒ›’•MŽĄz]mÕv'oJĻ€l ŽI>¸–¤Ÿ :įĩŨL/Û ™žē:ØRÛYUäŠ8+Ķä 9“zQ0ˤWoc_l Ģ}žü”ŗH`ûŧeF÷ų/ØæÜc×÷ÕsWĶúLVģîú¯ú `ŧۈ*¯Č~IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment140<Џ2IDATH‰íĶ1NÄ0Љ\¤LKįŖøh1iKZ $Žâ(Įˆ% $mA +ŸŨ‚ŨxF‚†fG˛ ?%ļūØ`Ĩ"ÉôfĒZŋĐâ-åÎŌd*YēnNøSËų§'ēxKŲÖ`iîM=ĮMŌŌĸ4ˆŠ.L•nVØ!i¨jvc¯ę]ŨĨ7A49Üe­k—ũ GהE]UožÕ)z{ÔĻǝĻĘ/=Cšot3 …Ž,1ŒĐöÍĸE“č-Ģ(ÚÍĒ:Ŧí<,u}p(ô4qŊG÷ ĩŖō~eÎÔ&åũ!Q›-í2ySC]LÉŗrÛ%—6AõY÷ø¨ĢVŊ¨Š{SßM]L-ŊĨĢŠjũ›~ūøË_xđUIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment141K×ŋ¤ÉIDATH‰íŌą ! P# J2@$ÖHĮbŅ،lr#ŽHĮÜĩ|W)Rœ$ž ›X‰DŋÔnö…ĖT›ė¤Øˆ€ŽB%Zį*‰ię PĻX/ļ€{Ĩ¤zSõnJžŋH´,æÕąvQ;×<ôtäZnh¨Ē~†úšR‰iZĒj$**T"PĪ[ämęve¨9đk˛üĀ*ÍÅÚEĒŲqMAUđ“Ékšeb 蠌ôÕ*ʋg'ąŠÚ‚ĻGų§žzęŠ˙Ŗ_*›ÖM*ENŽIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment142ŌŪîüIDATH‰íĶ1nÃ0 P<Ē(ā+ät„^!7‘…"Č1|”*' ƒ ]5ǰęĒEQÔ Õ!ÍÁË3EšĻ 1˜ûuî[ZŒ×´tĒÎyƒü =NdMŲjŠR4oÂĨČJUŊ–û‡rŨäbâžĪĒîd;œŗ#ã€WQĮäRÕ§ÎKEōšNTÎåž5­ŗ"äŊWõdîjÔôZ')h­{D¨*/lKyІĮnI_uˇāˇTŽUW]uÕ˙Ņ…NŋôŊ™ûũîpå`īŨ0DéIENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment143ĨŲۈķIDATH‰íÔAJ1 ā”,ēœ#ĖE„^LlÄĢD<Č+zē˛‹áÅ<|îæ˙yˆ‚‚Yö›ļ!“TœD“īօéĖ>˛ûq_ģē%ßjŦĪ´¯–]¤vajR‘jĢ+HĢŠC]­ęĀÚītŦD3ОŊô[¤į2ö-ĪíuŖú5˛ōÕ{ĒĘô”™nĄę$Ē>ŌĻ@[ō.›öũJÆĸɍŌh›B5š žüdq5č ŋāč9^â#Ŧ '?uŋÛ¯RŖÚØËp3øh~/IŲŋ$•™ļ…î-L_â%ü×/ę͎•é3ÕNuĒ•éDø›ëü×ôÕLĖä ˆ*õIENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment144;ŊK+ģIDATH‰íĶą ! P# J˛Ga4ˆ˛О#î îZÛE”&.y ų6Ēõ͔eįb˛–Äā¸xYáRgiŧ‹:–zÆjč0ôļ,)MM‘,Å#ĩ¤)%K;vEW¯z˜ŠĸÖÄÍ[ZĒķÂĮĶ:ûj•WMe[ë÷š–fE EK §˛¤Hąt%KÁĘŠ›:Ļ‚œįąÔEyŽeRøüĻ‚ĒŽ ŲŌĢļnŨēõoôeŽÖ›sŽIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment145Lē{ŊŠIDATH‰íĶ1 !ĐßŲŧÁzTņbr1s“Í ﴐ™“6Ē ¤ĐFđųuęŒgëC5q…6DĻōŅ'ÕŨßĩŖ˜ Ņ64šš;Ņ}Ü[UË*Ķít˛ēēĘŗ24[œõY<ŊDO—āéÍSGˏÔēņ2åī[īTíéë5Ø T:2ŅX;Ķ ąmCËÚē•ÍĒRą c>˙˙N:uęę% āDŽúV6IENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment146Õŗ*ķIDATH‰íŌ1j1Đ1[¨t›NWđ 2šJnáĘŌ’bž†Āˆ‚›/ķ3N &k*ƒ!ņ4*Ōh˜OhT¤+k!–PWaqéę::$âŧhhHÔPô1TU;æg s=~Y˙ŗĮøˇÎē…›+Îú—ëšĐcŲP‚7´8KÅĄŦš>īI×Ē0uôH†ęD“ץ~ôũRˇÍģCS]]§ģɋ‘ ՗É#ēß~ô™ŧĨq͙–UÕ Æ‡Į'C5T‘6dŧŦŒ$ #§¸vâŒ-|hh!a_ׯFCŅVÜõëëŸSܨ/ߨ/îzПÁųę0ūwŪIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment147ĸ´‘ÜIDATH‰íÔ1 Ã0 P… ^ >Bz„ ā‹;ŊYĄC¯á#˛¸`ü+ˇĢälb ^~daÂ`­ôW} õž§ėFJŽ?T]QÉ5štĨ$Zm-ļļŽžĐ=Œ^a•Ā'CĨ3šyFĀdiŖ°ŖÍTP(m~ÛĘqædĻâ貥ŌÉ}Žú˙V ųæsĶ'GƆo GŊĪR[xáĢqFōB–ąÔįǝ Õ˙ũf8ôĐCélÜ=g~2IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1482  IDATH‰åÔÁJÄ0ā sĖ#ġØËžV‹ xõ6°>‚ˆ‡6dœnE„æqœC/“v2?%V*Đ%4hZiP´¨šUMN{oōšÆÕÁ_u=Їž1Ü¸—EGæ#VŠ[Ļg¨ÅTz‚JTéĩ­ŲWĸ‚zĶĸĻ­QÔLP]ĨnĸõHg ĸVtĘä&wŠēĐVš5;Đ+mvjŌÕ@•¯ŠÔģė›*y‹ąwë`-[p|ŒŊĮzŸzĄręĐ9įinōŦ[›¯¨-&l¯Ž‘Ęr÷D°—čm?veN,ʆ‘@V˜ĢY剔ГķĄËiĶÖdųn5ͧJ=´đBŅŋĄÃt÷kĘHË?SūļžTU}QõQՃĒJ…wmŅĩxŖ|´ëIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment149E 7–ĪIDATH‰íĶģ ! ` ĘáFa•LNē"eVbƒŦĀ)ŌPXvŒ”’Ÿ*Q(ũ #üp:9‡ûēf—ļ`átøąVęę\jųčŽU‘f2’™zAīšŪNž¨ŪsB*cëĶ+“$ ėĩYdŌjác\I&-օ‰^’žXKT‚ú2 PĩDÁz7Ũ n%ō5”Ø"˜+’Ž Ė•šø›"ŊZë+¸[ēĻ ū[û@Ļ *ŠwĩE¨`zō`˙ší OU?ŲîĨK—.ũ‡ž"Üá, ČŒIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment150%ËžsëIDATH‰íŌ1Ž1 Đ?Ú:ˇtŗĮØ.WáTËm¸IFSĐQ`Do˛Xmâ !Ļ›HVŠ'Ų–ü!•×ajuۚö¤ę’FQ$ 0E ą@Œļ¨>֒Üg>úĄÖéēĸEeHXŅČĒ~ÕÔohô¯¨tI÷ūßV§ģō†„IU~Ēmy.äÕ)ÚÉ!Š)kķĢvĢuNÚgxĶÁ-d§kü;e.Äy°ę‘GûzĶŦ¨CkŸhÃĘܘU^ÛrŽžĶ”LĘQ¤r#‘ė¸ÕWUŒ7UŪŦŗÎú6=Uõ8áVa˛Î—ĒŽEũx0ãFėtØDIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment151RĖŽåėIDATH‰íŌÁmA PG8n nļ•”cn€ŌˆRB@[^qĀŖ5ždūF|ôĶhfėO–Ô‚ü¤úę>ŅĄ…ēö6ÃWy‹X‰CĒ6B VŪŌ4Ô2j|Öu˜šÆ÷ę¨s¤eƇmü#YZų`ëcí˙uëÉUŲžbĩ…Šdú+\gæÜ jŅ$/ë'ØÂ›uū*ÕFwô§Mĸ;™&ēōÕKĸ“)U] ĘÆÜuTŠ­úž*HëF”:ë<=, uvŦĒhŋVÕ&ŠVMuŦĢ>IË ëĨwÔÃÃôtƒ&õŌ+ô Ĩáû*|4IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment152ËÅß_ęIDATH‰íŌ1n1Đ!Slm ¤å”Š2WâŗŌJPr„\„‚(%WQĐn™Âx/ Rü]@’jGļléé[cËd…jčWTķúyÛJ^ˇf§‘ÕFF(‰ŲžĀÉŽ'¨ŅõĖļ:ëu™×āYސĒíŲÖ@įjëęBíęĨëuîۉÕl5xĢCŌXP)it}/+čĘU9Vkƒ˛Ž/ 4ČhCTgu+hŠ´‘oĸW¤Tßt’×Ęõ fĢxä0FŋŨWîGNSĩEe‹O¨UX÷?éNķ5čŠ ij)[Ö§ētĐ˙Đ+TĪæúIENDŽB`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment153ŧÂīÉÉIDATH‰íŌ=à `Ŗ ŒŖp4@9@z$ļ\ƒĒ`k×ôgãĨR¤Ē X>ÉĀŗ‰*Đôž÷ĩ˜v&ō]͚k„š4íw~ĢękМE'ŦĒuč*ŊÔ5|UAĸˇų‹ ÃëĖä`’kd?]DAVíį,j#ĢätĘHwŅĨX¤N˛8ĨŲėūŧV')ƒ7S% T‹Z—ûY‘ŪˆŒ=T“ĐÖ5 `FĖ›&‡ö™šzÅLŋ•z^tū™ōĐĄC‡žŌĻmŨ ôŠi¯IENDŽB`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment154"ĻzjåIDATH‰íĶą 1 ā7tŗpob­=]}œ8Ũč+| äbZ“ ‚pÃuũųI Æ đ=ˇ4õĒÎÅNÕ „R֛+:ĸ5ZJ@ģčDÅozęČ´5É,]FV93TŨGU§@Süġj“<>U™dފ ÷M†ö¨ĻziTåidYŖĄƒŽ\kÃl9Üo ĒfC[Ģô­ē1Ųəûš¨ōŋØąZíX‡^ŲØĒ^<ˇĒœĘkˇĀ{Ečĩ++Kū>ČjĒ Vt.DKm);ŠÚxĢŽēę‚Ô-&ÕDļÕāōÎ[IENDŽB`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment155UĄJüŅIDATH‰íĶ; Ã0 `™ s÷&žJo’” ŊT‡” {…^ĀĐEƒ‰ęxö¯@‡Ō!Fāᓌü"5Æ@?TéĘôŦktĒ7UuĨ(T•iS!oh¤ŽŽNÖŠ( ÖSāÔ"•s¸›z1”ĄæĶˆPqʛ6UMN—iGŦ¯MŌkîęņĩ’^ąFōWŖ 횩ĨžŖ\Käf¨!ë(Uwdjĸ~ FÁģ*Ģ÷{ęĄÆ] –æ@*9A­ŋŋ˜:›:šÚZēzŗļ7U=ôĐ×Ã&ĐÕģķĐĐIENDŽB`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment156ˍFŲIDATH‰íĶ1Ã0PŦ ŒÁWčØ-Wę˜!R8š’#Tęâ™bučn—v2ʔ',~@Åđc}č™C夅FjĢįǐx˜–üŌÃWRX`u•Q„ØÚ°%­š¸Ú 7ėę\éŧįĶUéē˜b؛"UČvŲP9W€[Ŧ2R’…/ÁĖÖÛp öš¯#-•ƒˇ` ĻuåŦÄ;úûĩØ×؃l|ŌÅT‚ÔIī 3i'Ë Ī@v¸EÚ×b˙jqVÔUŽøš}ĩĒÎDojęÔŠS˙ĒOq%¯F‰õŦIENDŽB`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment157ģ¯+ĐžIDATH‰íŌą ! P# Ę!k¤c•Œ @Ęb—IÂ.]D8@š|_—(”<>¤ÆĘôe­IT>Į'ĐĩPšĢxŨąōPZ\×úîŊ6™ĒHsS•šFS“˛ĄŦŲ)zÉŽ”æŽ'¨ÁŌũP/ŌŌú^ĄrĐģXz;T”ž× ĒS/A(ÍoDÕs͈”°ļ-ĸ <§0Tũ\ۗŖŪtŽ<ŌGú.7”7K?\ēôĩūH튖}íÂĪę!zžIENDŽB`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment158+6A÷IDATH‰íĶAN!Đęt"Ëö\ÁĨ+šØDúf3f.įbŧ@í,“–oõ˜:-ÅBWMXņ ø 4ÚHUßPÁ°•…˛ō˛âc_tČ=2 x)z*ęs‡‰ŧÖ\W~_¤úVĄXÍ<͘B]I{L´8X,*éh}°ĸOÉĐâqdg){<Ëo”U)ļæ’ˇ¤:œ¤ž9ĢŪ8°­nNVUŨ÷ąs_Õ-ŊŨ´ÆĢBõĐÔŅ\ųM•îë:âuÖ[kŽęD?ūÅåå¤]/† …´slĒOÔRŊ#ž3Uû'×õ,BzKŅiE0ĩÚ6ŨtĶM˙UŋHFŲN˛Ú™lIENDŽB`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment159\×ÍIDATH‰íÔ;Â0 PW•ČFŽĐ+025Wbd"eâZ­¸ˆ ˜-CdãF; ,€šõIqü på °čĸ‹ū™R¨i^ŊĒÔp†.S5Ã{E[=n*ĘŠhTE#ķEĪ÷Ĩ×ĒNē–¸ûh)Īņ¨ŋjVIGĪHמŒjímôJ–›{ĮŠ5õĐr65“hc)Ļ7C âÚÉÔ z6Ū,CUՀŲMؚē€[Ųu¤GۚēgčŌbkË Øzd>}ŨĪđËúcÃæ GĸhIENDŽB`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment160æí°IDATH‰íÔAjÄ0 P/ēô|îrŗI WJčvÎ08Ė\ē¨Ą"ŋšibiUč&^VėÁ8ũ‘rkij,í,ÉĒĖAīęÅĐwä']ė-Mļę•KŗãAŠļ¸({S˛¨ōŨrW ģiŽęäžmkU/÷XUy˜ēaôĻô—m[‹zL@­ëtFÜuôˇŪDÜŦ¨GĸVĶģ6šBzĻhésô†–x֔0qĐt&ŧqč5u2‰ĐąŽōVQéęÆaäz΋Îu•Ɲ%Œ—ú|e!Į’ĸ™š!Į¤mŽ(ÅŦĢˍ(;ɧVļõ?ƒlû.ČUw9ũŌę9ôĐC˙YŋāÖëą\%ŅIENDŽB`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment161yáŨ&ÂIDATH‰íŌ1Â0 PW2æH=J8 A*œ‘#@ՁՈ FųuY‰=10äYže9– FôkM!ZJĒf':0y]q3´ UMė-}B´¯*;Ėōn-EŠuíđ6•_ĸCũGĸ¤*VíÁēnĒîFUŲŌšLĒBôlęÅP¯ęQ6âqUõ. E “hŦkĻaĘĄ(*į:ĻŪPŪÅâ´ÎQîštĘTk •ļ†Ž‹2Tr2M›~2˙åTM›~éčM[áUŖĮIENDŽB`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment162ā茜ŪIDATH‰íĶą à P" JĀ(ŒfG.\f%[.\f¤ Ę+P~'J îė*R #䂇ÅņulŒÎüX3'UŖA2­Ŧžh4AÔėO•F‹)5ĸ&V‡^ŅČÚčĘX’ĪåY¯튞QŅŽÁšÚJī_ĩŽ÷eŊq5ŽY5˜"ĸՕZD×0į翎ÎŲ/ä5]˛HN’´ŖŽ„˛v•ļÕᒂĻÉÂU:ĮÂĻ`ˇ´Õz#––ãäĒ|ųžĩˇ€ŌĪâs{-&_6hа&ĻŠ2=ôĐC˙HŸø÷ęÚō? ÕIENDŽB`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment163—īŧ ôIDATH‰íÔÁB!āßŧÃģld+ļ‚–ė ą•wØ:ô•@˛L‘įęųŗņĸ'áÂG€ 3@ID\y×QLĒųīIENDŽB`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment166į…H…ũIDATH‰íÔAjÄ0 P™,ŧĖ ęCô>Z ŗč1z…Yôî ˛ĢĄÆĒŌ˜.žÔaÚE)H<$ÛŅ'$ÎUč§úęj¸]Gô´ÍŽfOˇÅĶjāIŲ­-ŽС¯Úá)Ôg)Y*œFĄĨaÔ]u‹{û[Š/Ī”ĄÖ(aäÄĻNģ&Ŧ“jr4އÄhŠ…ø¤ëšļâÎ}’§1[:vRņ‰Tz3‹ކNĒķ7zđTŸÖēGUøO]GęF6´įÚRŖGŦAVÎĄ…5¤‘Ë•P(u ģ.lÔĒj9ŖsähäJO¤C”ē@=ŋŧü…ŋŲ]¯×‘ūâŽîúoõ–9߯uץĮIENDŽB`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment167‚xäIDATH‰íŌ1Ž! P# 7‘¸ÁÎMÂÅĸ 7[r“É \ áõN”Žī&RԌEÅ`c“:QčŗJĢŖã ÕüFVŽ6WÅÕģĢ7Ŧ#éíW唧ÚX ëFËT%j ZnQ‰ VĶËZiūneĨžëŪˆŠ†ąTšWTyđėūŠ–§˛s–ĐöTpsįa.ÁUķKįõöũ]‘ėčC'g•ĩCÖmsĩūƞĐYû˙Đ# 6 RÛ)ô7GĪą"ĩĄēš:˛a^ LõÎVja­/ ƒŊ.¤[öô•˙Ą‡úUũ&aĘĪŽkáQIENDŽB`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment168=e‚úIDATH‰íÔ1n1ЉVhKÁ9}"ų*œ„õۊP JŽ`‰‚Öˆf‘Ė:cUæļŲTüĘŌŗ5ÉcĘJ<ÍĢQÕ^ÕVĶdTĩĒē˛ŧ:íŦŽĩŨ­ĻéfUCÎ#É:6•zö”XŠĢú§'֏ŧûti%ëĀēļ)@õkSU¨Yŗšcís‹4]ܐöå,ŌËS­¨šhĩÔmNŗéYÕCpH÷š=DMH‰ÕãęhöQÕĒa´žváę@.’CĘÄkĸÎĮ/šŽá§ÎĶâdåüđ´X¨đr&iz}¨ZWĖT•ūĘŠ:Ėv̎žõ•íŋÔ=#ũ^ŠŪ8”‚ ĻIENDŽB`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment169w:UÚIDATH‰íŌ=!`偪ā‘ŧÁbļ°ôJ˜Ø{ŧvdŸ … o M´YڏŸ™Į(+¨Ÿë]Ô éĒ$­ZŌb$ÍVŌä$^THzūBĀ­Ž5;,­l5ÖÖN‹*”AÔ\5ĸk˜Vĩë{˜ę<ˇ¸†ĒĻÕ!ũļŗĻú+WËĩvu˛F+*IãĨ’dyęfĻSuĮäŇ ÛÕIššOÕâØ•ŧÛufÚff)điœFh#ˇ‡‹D-’Æ)™ôHírōGŊ0öŋ¯•ÉLž ØtĶM˙ĢLĖæøV ņ˛IENDŽB`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment170ũÜņ IDATH‰íŌŅm! PGTēŋ˛@%6 %#ts“•LFā“(jˆŌžíVUĨJUüNŧķ †~‹KßD€íŪojušæåįš–ŪE ļW@IÁ÷ĸ(öLođÚh‰bnŨQŠ!ØI5; “ĩąįM 8”ûđT?Ԝ¤ÜüāęōĘjL` 8YMîšnš…~ér’Y5]ޏ†§F“ ŧ0‘:^[Âä‡"§=Nõš>û¨čAÍU4ëŠņEŌ0rķ*ĖdđC÷ü9“,{abƒ+n­OFŌjÖĘĖÆÛu&+NĪsrė °Ŋ\ĩ‘Ī˙×õ‘xfp(Ōę>6NŸT‰ģū­^͆SÕ]ŋĨī5{ēs'¸IENDŽB`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment171`úėgÖIDATH‰íÔą à Đŗ((Œ"yĨl€­ •lĨČti))—ÃIÉ?EŠÜ™öÁđÄʘh šf¯iTuR•Ôž+Z­ĒNĶĸjö{iōœhėëĶĀ‘LWKŖ€47õ‘Ŧ­ŨšZM/Ļ’Eēię4]T•ĮĶĶ*Ę3Rū*¸ÉYT*‡?$8mē¨ēũT~•ĒÕđ(q,†īĒ:¤!eÞ¯•Æ|ĩH ų|rTÎäe‚$Ĩ)A•Ö•ú)”sÛ6Ō6Övj¨¯–Å>˙䡇úģž‘BßåƒęųÂIENDŽB`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment172ųķŊŨŲIDATH‰íŌ1Â0 PW:ö\Ŗš#WĸĮ U/­Ú|’JDm/,H4“Ĩ'G–ũ Æëč[]ÖÚ+:Ŧ59U'$:ČÚ#R3S+k‡@uԔØmDMāšxĒ ,ë\~n*Qc҃Ąc2ļNÉyl.ōTčētynUķ&ųjh€Ž\”uĖ^[ĮŦō6ĘT7CšhŌÔáoë,_W‡V՘“\!åԅœUb-“9rĢĘyöĨ7gĪ)Ŋ([$–gÆēŽķ'ž´ßĐģŠo×]˙Oī?9ÕßčđčˇN˔IENDŽB`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment173ŽôK¸IDATH‰íĶą ! P#Š”,‰QD +eƒŦĀ”HAvĖRåžOēHŠpCņØØqĄj~NHģ—JAüļ6'…ĶļV' ũ¨Š éČ jņÂ%{ĨBmC3R6uŧRTŅĒbčK̆ûA¯¸"ŧwGOûƿɍv3T Žđu&õęFeĨW7J觨Â.å,u_æÖčÍT™:uę'žĻŪM–ölĒÕÔ/}ũ&{ŽéŲNIENDŽB`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment174čIDATH‰íĶ;ŽÂ@ `ŗS¤Y)G˜+pŒb‚ļ äJ”H\ Ģ-vaŒ'QĞ]ŌJ+ÜDʗxŦä7×7ÉUÁĪĒU¯ `SČKž É  tFē×ôŠĸ֝N+UßĀ^ÕųØ•ŪŠę OælQĘéįēdŨņpōĖIW܉Y×Ŧė´=ëBÖôîœčCגhĻwļŨŠF›2 uŽH­ŨiÚ"…÷•ĒŽƒ7 V¯Á‘W´5‡€ĒÖ0 )´FT šVēZ+šĒÁąj˙¨)Ķ:Đđc\ļ, +FŋÜĐ˙Ĩ›[õ˜Õũst;Ô¯Ģ õˆŌK_ú×]VmļŗŽ¨Ÿ{&!įûļõIENDŽB`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment175g—(~ÛIDATH‰íĶą Â0Ћ(\fD֠›aK”Ŧĸ`0F)ōįL Rø§DB˛›Oņ}ßŲ‚™åå§ztQĀŽŦŪiiĘ*ŖJQSÖE¤ÚÍĒūk"ŠĢú€ÉąIĒ'ÚZrŪŦ¯Ø1:DĮz…¤J;‰dįt°ŦŽĒKkC5ē´$įÕĖĒ+2#ÕØrŸŗŪõÃõšÕ1=sõ­\V öTiq@īĘŠ1z[û-WAŋ™čmZWÕvŸũ¨ŦĪYŖiŖügöOē™ū7@ÕĒUĢū‹žJ1ãĀîʝÉIENDŽB`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment181įbđ¨ĐIDATH‰íĶ1Â0 ĐTÂæ#ä(9ZƒšR¸c¸AK†ãĸ"1Ô_PÆ6Ęé)ŽcŲ†Á æŊCŊũϧqŋõņ)Ísë8Ķ|VŅņąãdUĩAÕ@l#'%r Fiˆ‹Ôŧ4,Wž(9ī^Z-ĸW L¤ōĒ¨ÔߐzW´jÕA×*Õ(J5r_œŽåĩPiT­ë˛ĢĸŅĖkštPz˛šÄĒzv‘ã~>˛ Įƒ6ĄĄG*ƒ4{¤Sü5*!mĒcŪ­iƒŠŪŨt͕蛿%0Ŧ2áIENDŽB`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment182~kĄøIDATH‰íĶŊŽ!āY)°0á.rb\ŸLŧĘĮã‹`ŦMĻĄ0Înî4Ņ›+–‚æ ķPcíāS=ļ´‚WBW7AÔ !ƒ-ЋZFÍbđQ ‚5ŗ. ~ëē4 ­¨Čē6įÜP{lčܞî§) ųēKK=隸YÎwĐ/Kčé*k\JžN‚rcõĸčÖP doĘŲŽ~¨:]gTŪ_=Îk…UņĸöqË ĘŲ>Ž8žŦ>Îy127(BĮúfŋštå%žÉM'j!Bžg4ĸōV¸ŋøúĻB_ˆ/šÃßŨ QŸĒ­I'tŌ¤wņ2žÅ˜øtIENDŽB`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment184—'IDATH‰íĶAJ1Đj[ČBĄˇ.„ö BŽädÁāē8ŪdŧAz5ķ­–›vĒ‚čŋĖŖŠđCĮ¤€ŋ‰4é J˜ëPÕĪ“Å倝­ąÃ֙J]KƒB-ĸ4̈́܉ļ–rßāQW>ęū÷đõDŸÛiÄOšF]ĪôŊǘiîŸp­ëE]EËeWnuE”&{SIšėËŊSulōÂ啎?mŦķĘÜĖūÚM~SW.ĻnEsE#ßQ°5Ũˇ4ÄDē~QeC™| –&Qßđų™z+QžjŲh’)°ü…bôü‚LŠ_ŋĻo¨)`ô|P-˙S=‹.ēčĸŠ~5gËü_ņŽŋIENDŽB`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment187UÂIDATH‰íŅ1Â0 PW:æä ŒLä*Ü$EŊXKÁšr‚ŒŦš¤, ųžXâõÉúņ‰2#ũZŸš2išČōUåAš‘lUS_”°Î7‹4ö˛D¨Ąč‰Č)jTĩĄ~ŅGĐWŅ̟ë*ŊlŅË,UŨsg‘jŧˆÜUí nėr:Ō•íŽubŗ@‡CM]åPZv“aĢirøUŠvEŖŽ 7š@Y×hčY&yƒšŖÉ3Öü} rŋ§iĶĻM˙F߀Ęę¤d<@ŧIENDŽB`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment189éšxšIDATH‰íÔ1ŽÂ0 `GXĐ+' 7!WáŒL´¨#œ„ÁŖŸ58€:Ų$:üĒôŠIœ8…j<|BK´5Z`P” įÕWĩt’’ĢB=UM΋¤čę° ØĻVCĄ ÖėęCĘ’g=KåÎ:ęĘķŽ$ÔÔ×Ôt)||×]\•x'WŊĻŎS0á`hŪoXŖĸgZz,ÆČŖŠū-íÔŊr“+'YnŠrEÜQŽ:'ļŸŅMP2w62G$E9 .{E3‡ŌWčå+x×v핎}ŧØĒܔ§4™:X:ygĨ…ĨbAŗæhéŋ„ú˙ô§_Š—ô ŽëzפPIENDŽB`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment190‰~ņIDATH‰íÔģqÃ0 `0,”&§¸‚7đb>[šĀ+IUÆ0ŊK<  _JņƒráÜĨ°Ä‚§O€IãčĘĄĨĨ˙+ÍÍyĶÖĶĩfčąV˜ÖËįBjŅŖdCsmpHÆČš–6 âĒŠ–‹Š‘ú3ĶÁĐ麟÷Ēģn6úĒûnl¨xKĶEcŪ'ÔYĒąŌ×Ękęš:ŠÅČ~UŋĻ8ûĢ:‹ŸĨŗt˛U×<ą‚oŠ&'î|*ÁĐÉ'ÚB-z ÉgŪ›æɛŠ.„ę—~ceŨ ƒÍĘãv3ØėŗŠBąhnę´m) ÔC҉[´ @-Šƒq/ęE˙öˇžõŸč:žĀģw¨}JIENDŽB`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment204]—0vūIDATH‰íŌ=NC1 pG¯Ōŗ2 å (ž@M*†Ž=K¯&F2f°büŠ@Åú¨ÄĐ˙ú“•øx봅‘^NÉ2U͆ĢQ5.ŊÖDķ-FÃYҏAUaڞ4ô´iĸН†æ4Ŋ1dsxQ#šŒēVWđØ×ŠiŅ}ŋ# R›ŨáL-ē6>ŠĶv´Ģ#Dmŗ¨÷ʎČJŋūž?EmņwŠV}|ûŪŋ•Dænmąĸ¤i6#Māį× ŋŪũR?í¤Öi*§ĨŠ]Žļm”I>?q”i[xãätũĖŨĩ—­n…v6˙Gz¸˜*šęUĪÔFK´LKŽÜIENDŽB`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRI)Qü9+ pHYsb&2 tEXtComment209#&LËĐIDAT•uĐŊQE!āƒ7 q†–`hāˆĨX‚xˇ[Ąfl€†}gáž7`ŋdPV <FøÅoØ&ö7Ų‘úƒĶŸ$¨ˆ-ˆ>A&Ŗ|üÁü–6c _ø 5æ—Ũũ¤Õø|°üáo€ģņˇaÔÉ÷Å@~$ŽŨ3ĮdQH,ÂX,7Ŗž`P7f!Ŧ7cąî.ėØúĸļđžûÔØzPIšIíėǃ‰uėö™“ĢîØũ•íFžųB‰WZäcÁ?Üå ¯ˇßI~dáŪIENDŽB`‚ pix[181]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment213Ú蔔IDATH‰íĶ1NÅ0 `W•ČÛr„ށ=ßė=+7"\Ž@$F2fˆōãôu´`j‡ųäڎ]‚ķÜŅŋę‹ĢÄãũ4ĢÚ("Ÿ;MĒV HliųA%Ŗ¨ž7.tŊFŲR›ĒĮUÛĸëÉĶrŅĘzŋ]za=ĸ™‘õdžFŌûEŸ‘×ĪĒÚDĮUœu (3^‰U­2A9§¨j‰īĢW¯UÍá9OíD7Ē&âëҍŠ6U;ęĸ)XÚHÎC=čwĩŠąuë6†flå&ƒĩ“čq œ đ`ë=đič˛ũĨV^|¸ Se7Íŗ§‰/ö*âËÎߜXŋf,ĻØu×]Ŗß&O‡ēÃIENDŽB`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment2153‹1ĄņIDATH‰íÔ1nÃ0 P<ę:ŠzŗČĐ1GčU”)Įˆ€^@@‡Ē€ öĶYIH–ö@I“0ąķlô´ō´zŲc34z:úŖw5ĶãũŒŽėǟëjĪRyfU'åš’Ž ērĄ“ĒČęĐE¯[(7hĐuƒ.QWzÛ5Ģ:CMĐw}^¨Ôĩtm(æ=ë=Ώ+Hí:Eõ/ÉģKëI´%G¯ĻĸoūlQ×ĢčˇĨgQļ4x: ī–R‚^ m‘žV]7Š}áPôy *+0ĩyš†¨~Ī î†û­Ģqí_ûúĘßėĐCũßú §qÕ͇o.ĨIENDŽB`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment216Ē‚` IDATH‰íÔ;Â0 `G2r„\kąÕœ„Ģ„‰k䔉Q‚ĒĮb *­*UúÔÖūm˛p |E¯GIŅJ ’&Q# ‚NĒÁšjIĮ¤Ą-jŽmQ3õ‚^2 j2ļXu49’vŌĒ4‹āXõđPË*]ŖÎmE†ĸ[Ãizęž§Ž(3†ĒčBŅv„Eĩˇ¤ŠQ#k°ŠĒã:˛/eûuŪ&E'¯Ų;IąjįÍ4øX•Ģ™‚ÎQxV‘ÆžR;QųžFRØ)>g"C9õtNJ#;Á@“zāÁLā°ģņVÛŅÍDKÛŲįCŨUĻŨĒįSš‹âŸ;–ÖÛJßũ]åųT—Ģę¯+ę ¸L"hSˇIENDŽB`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment227ö¨N IDATH‰íÔKjÄ0 P/ŧôļ;_Ą7đUæ=@aRzą„šˆ†.ēU˜E]ęą*‘Âl¤ĘĐU‚ķgÉv, ŧqp_™ŅÕ…ĄtĻ6ČR…ÁT‚ÔTÁŅX!’Ŗ(ô jgƧ@ĪĸöŦ& Ô†ž[øhŅÖĒĘŨÖyU'ö\ÃE5™ēÔ¨ŽōĒÕͤ5ÛJI;Pą3“´ŖŠ_SŅhë2 OlĢTŽ„Īļ’TÎXøÅV„Đ!ķ̧C“틎jÉ [ÚÁ—th{ŊxštuĄÔŖ§—še<}“ģgvfuZ_ÎßøŅw[įÛį×ëÕŅĻO-:÷DĒ^æ[‚?jßTŪu×]˙Gŋ™Ųęø‹ĻIENDŽB`‚ pix[185]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment228fß"IDATH‰íÔąN1 `ŸN"•˛v@͋Tõ+12 .<¯T‰ĄÁĄŽRąx06Î r2u`č÷%Ņoûr 'Ã4v5ôTúÚ=™7“Ģ‚Ēo* ­i_L“¯–į ˛ōb™T_U ĄGUPšičlQâč+ CâôėW‰L1ģĘ DÚÁä)Ũ‡Ēčká0?„–ž9 ´ņõG[@kī#Ép\”Á¯×ö–Ē~¯žUĀM5žOļ××zŠ ~*å¨Ô놑R"Ė MZ°`ÆŽ&W ęü̟žî“i-IĻŋ:ŖæÛæÉ{˜`h*ĀSUp3 ĀŖéĘī†õa F'éG_ī^­éķvāmlM9Ę.ŠyšûË{īĸ\æovÕĢ^õ?ęōĐĩU%´ÃéIENDŽB`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment229.I7IDATH‰cø îà Xd˙ĘŽĘâ‘Ŋ?(]5*;*‹[v˙ t}eë)ĨĢFeGe‰“ņPEÅ?ëČIENDŽB`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment231З:%IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘ%ŲũƒŌUŖ˛Ŗ˛4”ģÜQ…;]Ä IENDŽB`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment233čŪöūIDATH‰íŌ;ŽÃ ĐAHĄäËMÂÍŅ)÷J$MĘŊŌ^€’1Ŧĩ•Áåj ,Šyh>€;ááOUc–Cõ`ˇjq‹‚ ´ `WÍzÆ2ĢéTΚĀųŠNũā77ŋĢãnNMÅ$œžĀŨîčE§E-ĒéÎ|¨NëRQ2Đj˙Öl¯šVÛúÉi6€Å`UŧZR1•Čh!ÍĶĮOPPÍ.õŨØjnjy•4'›ĸaĩRۂōCÍģš$šhŋĸf5ŠĒŖUõpŅņ2R€ŗ¤ėģāƒT†ąz:ų^QŪ\ÛŌ˛Ē(÷šŨē>žíü|#ķģŅÅĄ‡zč?Ō˜ãŧ_ķļ@oIENDŽB`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment240>–1k"IDATH‰íĶ1JD1āYVHķ ­…+lŠ ÆŖxK‹…¤ō^剭‡ˆxØÍBHœŧ-ü'ģ  i^ņ1ɟĖ_°”BR=– UŨæ:Ry҇\_ÚōSo/ŒWÕįüíP3v“ Ū8ŧģúčëũ¤NfĨÚŠ*tؖIĨpuÁŗaĒÆKN*}Ž(ņÄXŲ[8Ąk[!ĒŒÎ~ĮŗŠ­˛)ŗ8Û_Å´ģŧŲ)ķ ÚFP4uiAúŊ,m+ tį)ąÔIŗ**dYxŠ[­ļ;zÚčđ;Āé(…濝ēKÃtuz~EŗņM­˜uÖYgũĩ~r_ŌR<ϰIENDŽB`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment247 ō¤ČįIDATH‰íŌ1Â0 P‡Hx#=š#RŽÅ€ÔŪ€#p•"$¸FY˜;vˆbœ”ŅÎĀĀB-uéSÚoĮ@•ęā÷ FցŸGĩķ4Ú¨)`EXˤhü¨œ*ŋīĢÚ>.긁ÜėKQ_ôŽh(Úëē*ŋSCČgQî—Õą:yV­-ę•œ5Č‘œUu‡‰uhåT Ļ­-; uÔ¸ŠŽ€É[zj 'žÆUՃ… ëĀ÷ræYŌ/ë1Ģ×tĘ_–uZįeŠF‡‰wc5qœĩŅæœ‹o0—ĸįēŪĒJßëĨĒ´čĸ‹ūĩžąEŊ7™'IENDŽB`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment250'*IDATH‰íĶ1N„!ā1trš‰ÜL0[lé•Hļąŗĩ“ģI$Œ ÛėŸ™iV‹ö ä`c üšž\ ŪŌn*KŅÖhiK–Öl*[úh):KĢ×õi€ĒBWtĀÔH'}Ûč+$Z*§j‹2>ČZ—rãm~´` §ęŽĨĨYŌũÔuËÅTHšĸĒžÖT …P¸ČŠQ×á1á­W•Ūš’e ˜1ģšåTąņR%3™†Ž‡šŊŽ;~˙Ö,*äãpÚupKŗŦmŠĮ{U[÷ē‚'¸aYįÂŲvš“ˆõŋđAŗąQũG}*q˛ÎyŪä=Wiū~^ —ęĒW=×/Rž-[˛o›IENDŽB`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment254 āÄ3IDATH‰íÔ1nC! P10rƒr„ŽJÕŠĐüáŖWqÕĄã?BųĘˆ˛0|}Įd­ZĨ•21 =ŒeęŒ—j…ĐŅ^ĶęXmQÔlXã&mÎĘŗ­ Į&ˆe`•cÕhē™Dë“ŦÃÂWFEsĶĸ¨ËaąŖÂŊĸ1ƒ_ÔØĻ˛ŌëƒĶ”2åg]ZĒŽī´¯nÂ(ëȕ˛VSÛZĮ)ēšĪšŠuĩĶØtĩ€‹57uš"ØWŧĶ4MĀ*ŧŠŗ„GMwéáEĶ Ci)Ÿ;#ՁŧR :žWčdĨŸ¨īiîęņ;ūÁ¯rÍúuū_V7ŊéoužĘŦT=8=Č21 XIENDŽB`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment260  SéIDATH‰íÔ1nÅ P#ļŌŠúÃW}…Žžš‹}ĸ GčUrļŽH]ęâ’äĢKŒ—v Ō“  °2"üYŖĒ ›’Ņ´XM͍jĐtEŒŪ4˛Ļŗĸ–ëā5×U×T*ČĒÕÕ R1›Ļąē‡ĻAÔč L5 ėē)8 3‹ZÁ6ē ¤tļdsWŸMqy8PŽ%˜âķpŪ)ŽĘ‹>=Ęą™§E1u2OäķŊǧžōĻYTâ×_ĨļÛUÕ5ŊŦú)¨'Ė—qŅŊ֛"ķÛ^ Ģŋé{G¯˜P:ŅĒéĨ^jZ<ģTqĸf6ö_ŒŅpī=ˇ¨Ų2H ŪôBrcqyÜXæÎŲδß:Ä?JÆĢ™ę,WĻ˙ęŋéĨ—^úú kš iķöIENDŽB`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment290‹8O&IDATH‰íĶ?jÃ0p }‚ŽŅM=XA*2æŊJŒ_CÂCĮ*tQ¨Ē/r 鐧GÁ í‡đōãéīŗ'~@áô i­>…Ö,,„=Ą#5 “īÍ’T˙¨“ÕGô´zŅ<“bÕ}KįÔyėŖCC_s]”×i¨gnëÜPdũŽiliŌ3§fl¯[u@ßÔhÃĸŽVĀԆę„~Ŧ:,nôsՑÖuæ"lD ÕēK_ŠXdĘw¤&!Ķ“LžÖ,äe´Ta§Jũ’ģzЀ‚ ûŲ,ę4­5EÕ;á”ĖĒ™úMžŠ‰9RžĒ7œXĨŪöĒ…z¯Ú=Ģ­ÜčۆÚŋ –ĶbØÚ-ĒY}Ų Íüë¯Đ3ˇ葇WhIENDŽB`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment294ŒU‹?IDATH‰íĶ?jÃ0p }‚ŽŅM=XA*2æŊJŒ_CÂCĮ*tQ¨Ē/r 鐧GÁ í‡đōãéīŗ'~@áô i­>…Ö,,„=Ą#5 “īÍ’T˙¨“ÕGô´zŅ<“bÕ}KįÔyėŖCC_s]”×i¨gnëÜPdũŽiliŌ3§fl¯[u@ßÔhÃĸŽVĀԆę„~Ŧ:,nôsՑÖuæ"lD ÕēK_ŠXdĘw¤&!Ķ“LžÖ,äe´Ta§Jũ’ģzЀ‚ ûŲ,ę4­5EÕ;á”ĖĒ™úMžŠ‰9RžĒ7œXĨŪöĒ…z¯Ú=Ģ­ÜčۆÚŋ –ĶbØÚ-ĒY}Ų Íüë¯Đ3ˇ葇WhIENDŽB`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment295ûRģŠķIDATH‰íŌAjD! ∠—Á+tŲ=VôJB/âRēq‘žT Ũ˜ŋ00]>1QC FĨTų:§Ŋ2%=Ü^;Yą×FyŦØkĨĖ”lML‘ %Jũ9ŽÚvęZloÁÔÛaĒīąåŠŪŌĀņō‡:ëžīœ.ęCĩcͧîķjË3¯ZZKEĒHŌyĶ*fULĄ!õíuj6ēÎ÷''”ŒŽķsÖa+C•ûĒZ *á\îۊ#RÉ:l=ŠŽhë| e6RBz~ĄĶ×÷ŨŦ TTŊ›~ũTÚŅÉëK*WŧAĮCzũ-P¸PÁ IENDŽB`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment296b[ęōIDATH‰íŌ1nÃ0 P”Í(‹ҕ:ļ@`+Črõ&ŪējTŒäÎÂī%Ųj.@|‘$Ũ¨@oЙm õ™”œŠBŦqęMÍU¯ŽPtPî Yņš:á.mMG'žËčÉ’Đ5Bõ}öņS@įm›~‹ũßT\ōqú÷ĐbORːk^4#åĻŗŊAMe¤šj´gĨŗĢ˙…čĢj ôĖa"[…č| k%Ú.jQ3UųčZpWrrúe´w¤ĘĒ?Ē`’­.Ē7ŦVÛUÅZßĒæęWÍV¤§/(oĻō[Šj×]wũ§z2œĘ#žx%7IENDŽB`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment297\څ÷IDATH‰íĶAj1 @-unūÁú#e÷c…UČÃâŌô ~‚>+ōî) é(ô°>ø Y2qūFŊĨdÍĩH (z*AUp”\Wu"œú¸q`uĸ6V—úUî¨zč>Ķd ØBŲ¸Š74b e-˛ļm×,WÕ kd•;ĸC“ōWCp“ubŋIÖĸíP\E-ĄņģĢĸyčMĄ…üŠ*,~¨\ÂėōWYfVervũPæę +ĪH™9'ĮÁwQéN˜ŖĸŖ+ĒĢĨdl衊7S'Kģŗ´zKyģßÖ-=Ί§žúĒY•ĸOōÄ÷öĸöIENDŽB`‚ pix[202]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment298…ãĮIDATH‰íÔQJÄ0āŋ6oæö >ú í•|ėÃŌ¯áQŒ'đ›˜Į,„ŒI  .3\|r‡B_Ą“™a@Xq‘~ÖC2ŧb¤Ø“SŦ&˜h ŲŽÕMųą\+BQŧˇÂC't’:¨¤qŽo›ŪŠhėšžn:]ž;^÷*ônyųއMcÕūž?ĒĪzË̝: z ē*ß Ən~ĨžĪú ęXtæŗ"ˇ´Ô.š÷3ßAZMč­¨@Öi@ĪiöYwĸ&ŗ>Ė@—ŠiČZFNVEÎNū;hĘ!žŠL˜¨õe›úN-}":XBÕMY?dåÖÂIķfh¨oëØŌ°´TŠĢ^õ?ęáũģŦXũ7Ŋļ A˜@IENDŽB`‚ pix[203]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment299ōä÷‚ėIDATH‰íĶ;nÃ0 `4ę< oV)Č ŅGĒ 9FäĘĻÁK§č&r(:t°-ôāO ØūXŸĻ^L…ų˜_]҉›ãaŦĀu˛T(Ãxg…(OcÅÖByjĮRŖŒŠÖCˇqŊߊ7% QˇĢJĻr ~ĮÍiú!ĒĨņŖã$yíža.4ÖMÔ¯UŅÄĸ\qŦŪŌŽ–îd*ōŌPSy6ĸwE#„TqQ*Š@ˇ‚‹’†Ŧ}dJŠĻČ čš•œr3RģpܛŠÖÁCCÕē˙V6~wáßëjęÅŌ>[ē;SŊyî§Š|ꊧū{ũ{yãwÆ÷p]IENDŽB`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment296b[ę IDATH‰íÔąj1 `™ x‹× ŊIũJ3”ŗ }-åMî<jėęBš%’h -rÜđáß:Ë6 ãÉđëJŅR†vđĒ–ÔÁɚà lšrfö¤â3t˜ø­AVÎÜe­;×ŧSõÉÕ°¨úĖIÕ´iCųJZ6ŨËkÅZfe9šÄ5ŠÚŽ*'÷1ąÎnuô‰į}ÅŦ¨/¸#)X_"Ĩ{åÆ5T•ĮÖXŖĄÉŌbęęŌQSr sYV€9ë=^v$­ŋW=L˛îyjjZ"g’~ŽŪÆ8Ĩû—Ī2Š€Ÿz’ė‹*•tĶnj•6ķMWS M–žeü‹[ô§úū/ĢzčCŋ¯ėlĀĀÚ]#ąIENDŽB`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment300[8žX IDATH‰íÔąj1 `™ x‹× ŊIũJ3”ŗ }-åMî<jėęBš%’h -rÜđáß:Ë6 ãÉđëJŅR†vđĒ–ÔÁɚà lšrfö¤â3t˜ø­AVÎÜe­;×ŧSõÉÕ°¨úĖIÕ´iCųJZ6ŨËkÅZfe9šÄ5ŠÚŽ*'÷1ąÎnuô‰į}ÅŦ¨/¸#)X_"Ĩ{åÆ5T•ĮÖXŖĄÉŌbęęŌQSr sYV€9ë=^v$­ŋW=L˛îyjjZ"g’~ŽŪÆ8Ĩû—Ī2Š€Ÿz’ė‹*•tĶnj•6ķMWS M–žeü‹[ô§úū/ĢzčCŋ¯ėlĀĀÚ]#ąIENDŽB`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment297\څIDATH‰íÔ1jC1 P}4x)øõ52Å×úCéwčÅ 2æ >‚FæģrČĐ&’-?¨đbžŒ- ē ļ֓Ą- ­x\§ŪQV×` ’đ'ˆš!ĐHˆĸĻĄŽ (ęËyš¨Āú†eįD˛Ī ķ,+’Ī+r‚Ŧ•uúĩ&Ūüæ˛ž)&E?Îk5íîĒļo§hi‰‰oCĶÜŗĄ‡;Ęo¤é KyÁŌdåĸ"Ö*ë(›W¤YÖŽîšrä7bmīXUõ}uäĘĄ9 m˛ŽhĻVSÉVßĢüÎįļ5ŒĄiæUũäÉĸ*ĮMwúĄJ߸Äõ‘Đ'˙õ9ĩKëfJÛiüƒ.ęSŗuI÷(&IENDŽB`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment301,?ŽÎIDATH‰íÔ1jC1 P}4x)øõ52Å×úCéwčÅ 2æ >‚FæģrČĐ&’-?¨đbžŒ- ē ļ֓Ą- ­x\§ŪQV×` ’đ'ˆš!ĐHˆĸĻĄŽ (ęËyš¨Āú†eįD˛Ī ķ,+’Ī+r‚Ŧ•uúĩ&Ūüæ˛ž)&E?Îk5íîĒļo§hi‰‰oCĶÜŗĄ‡;Ęo¤é KyÁŌdåĸ"Ö*ë(›W¤YÖŽîšrä7bmīXUõ}uäĘĄ9 m˛ŽhĻVSÉVßĢüÎįļ5ŒĄiæUũäÉĸ*ĮMwúĄJ߸Äõ‘Đ'˙õ9ĩKëfJÛiüƒ.ęSŗuI÷(&IENDŽB`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment298…ãĮõIDATH‰íĶ1j1 @Ã:žā2í•[öK)¯ģ†<$O9uyFō—.ŒųŽKÉM¸nVáÁ6H2đ <^ šZŪ=ķ—Ļߜ“cž(*+;ÉoŠpēŠöŽč“cG‹Ą S ģĄŽ"5´ÔWÜß0ë:u=[CšjTĩĄč -˜1Ī’tõ#Í0Ō}¨¯M4Ō÷Ž'K?édŸmą—b6j% ēéĸi tŽųe ˜WŖŋ“4w úäTҐ›×§ŽN°NĐgOUŲׇVWוŧĒ­ôLAUųDČ5ęJŦTâŽvüéķPˇÜ|衇úĢ?[¸:´]IENDŽB`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment302ĩ6˙tõIDATH‰íĶ1j1 @Ã:žā2í•[öK)¯ģ†<$O9uyFō—.ŒųŽKÉM¸nVáÁ6H2đ <^ šZŪ=ķ—Ļߜ“cž(*+;ÉoŠpēŠöŽč“cG‹Ą S ģĄŽ"5´ÔWÜß0ë:u=[CšjTĩĄč -˜1Ī’tõ#Í0Ō}¨¯M4Ō÷Ž'K?édŸmą—b6j% ēéĸi tŽųe ˜WŖŋ“4w úäTҐ›×§ŽN°NĐgOUŲׇVWוŧĒ­ôLAUųDČ5ęJŦTâŽvüéķPˇÜ|衇úĢ?[¸:´]IENDŽB`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment299ōä÷‚ÍIDATH‰íĶą ! P# JF`'ąVĒ@•šČ&–˛åE:cŠt|7—H)Î%K_“Uéûēf¨ÍKP+Ŋ íHĢNPé!‘JlŌ î‘ T7´"õĒé=l†nqKœ hkâ„zģŠ2ŗځ6: |5ôŠÚĄ _RĪhFĻîÉR}䋾3ŌЖĄh]boŽ´„Zš›§"牭uŽĸDõŽsōÂķT:}Šx$E€úŠS˙W÷béú;5SŲú2UN=õ˜ž3ZÎŌ*ōĸIENDŽB`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment303Â1ĪâÍIDATH‰íĶą ! P# JF`'ąVĒ@•šČ&–˛åE:cŠt|7—H)Î%K_“Uéûēf¨ÍKP+Ŋ íHĢNPé!‘JlŌ î‘ T7´"õĒé=l†nqKœ hkâ„zģŠ2ŗځ6: |5ôŠÚĄ _RĪhFĻîÉR}䋾3ŌЖĄh]boŽ´„Zš›§"牭uŽĸDõŽsōÂķT:}Šx$E€úŠS˙W÷béú;5SŲú2UN=õ˜ž3ZÎŌ*ōĸIENDŽB`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment300[8žXIDATH‰íŌ1N1 PR¤c(éÂ1ļ"Įá+’Õô\Ž2+°G Ō€Pa¤cCk§›n~áæ)–bh ęë#­ŅŌŽr°YÁĶdjžC2Ôˇ¸4К‹Î˜Ū¸ęz­÷^×§ˆéüY =Š^ŅŠÚ[ĒiŊ6] i¤5ūŠ6Ö ŲoW?Rˇ”´~Y:‹RĶ˙K/'QÔ'Iô¯ÁĐ,ZŖĒHšŠ&Ukd=SŅĩÄĶP'Ņ|Ģ0wĻĨƒvXŦ7>¸f)¸vįŅPšIđÕPĻŗĨLĄŒí_¸&<;âüõ`Ē•íõcŦßĻ&V´´ŗ^0ú,ÚŦ‹•ŧ÷‘ęŲu×]7×_öŲÛĢäIENDŽB`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment304\UZAIDATH‰íŌ1N1 PR¤c(éÂ1ļ"Įá+’Õô\Ž2+°G Ō€Pa¤cCk§›n~áæ)–bh ęë#­ŅŌŽr°YÁĶdjžC2Ôˇ¸4К‹Î˜Ū¸ęz­÷^×§ˆéüY =Š^ŅŠÚ[ĒiŊ6] i¤5ūŠ6Ö ŲoW?Rˇ”´~Y:‹RĶ˙K/'QÔ'Iô¯ÁĐ,ZŖĒHšŠ&Ukd=SŅĩÄĶP'Ņ|Ģ0wĻĨƒvXŦ7>¸f)¸vįŅPšIđÕPĻŗĨLĄŒí_¸&<;âüõ`Ē•íõcŦßĻ&V´´ŗ^0ú,ÚŦ‹•ŧ÷‘ęŲu×]7×_öŲÛĢäIENDŽB`‚ pix[214]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment301,?ŽÎęIDATH‰íÔ=Ō! ā0ˏ#­Ũ^ÁōĢäbΰĢņ*{é,ŋ”)0Ą5Ą´Z šg/@´~­˜L-ž-s¯j× î ­0‘Ą<Ē€'Ŗ2ĶP'ŠŽ ¨Jĸ+ÁlhĀ´Ņ_4*ĪŦå–tŊDÖFē6Œ™ ́5aŸ÷õĨË$ēõ=ŋՋ.^×ģĪqK§ëŋ  kíúũŦŽ]$Mņ$Ú Í]ËP1Zęq āqŪrÔ׌ĸë@éčōYΤ$‡‡Š#‰údi \Aŋũ•ŸC¨F&ۛO1ĘíX/ôŅûß˙ ģîēëŽĻ~ÅĪŋė[`IENDŽB`‚ pix[215]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment305+Rj×ęIDATH‰íÔ=Ō! ā0ˏ#­Ũ^ÁōĢäbΰĢņ*{é,ŋ”)0Ą5Ą´Z šg/@´~­˜L-ž-s¯j× î ­0‘Ą<Ē€'Ŗ2ĶP'ŠŽ ¨Jĸ+ÁlhĀ´Ņ_4*ĪŦå–tŊDÖFē6Œ™ ́5aŸ÷õĨË$ēõ=ŋՋ.^×ģĪqK§ëŋ  kíúũŦŽ]$Mņ$Ú Í]ËP1Zęq āqŪrÔ׌ĸë@éčōYΤ$‡‡Š#‰údi \Aŋũ•ŸC¨F&ۛO1ĘíX/ôŅûß˙ ģîēëŽĻ~ÅĪŋė[`IENDŽB`‚ pix[216]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment302ĩ6˙tëIDATH‰íŌ;N1 `ŖE ]¸AŽ@šÅŠš' ŗšbJŽĀQv¸I$.:¯ōcSÛiĐHcEn>ɏȄAĖôWũpĩQĀ<ÉTVMØĸ§"f[+…ö<ĐČ9@ęەįÅÕûŠæĨ{zĘĒŽ˛čšmũŽ(-šāÜ_l•omžRÜDĢ­˛‹*;TŲͤzuÕ/Oqذ ´¨L­ŋúÉwĻ– ցVŦåÉ:]ŅIô­Ŗ§Āˆ›ŖõųU5›*WGÉĶF“ÉČ„AĖôWũpĩQĀ<ÉTVMØĸ§"f[+…ö<ĐČ9@ęەįÅÕûŠæĨ{zĘĒŽ˛čšmũŽ(-šāÜ_l•omžRÜDĢ­˛‹*;TŲͤzuÕ/Oqذ ´¨L­ŋúÉwĻ– ցVŦåÉ:]ŅIô­Ŗ§Āˆ›ŖõųU5›*WGÉĶF“/Ҋ$ąqSĪ4ma‘æÁØû.bu°BkØđc‹'úWኧžzjGũĄûū}Ų§KžĶIENDŽB`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment307Å\ ûßIDATH‰íĶą à ĐŗR¸ŧX#)e:°Rd-2AVĀ ĨĄ°|ųv‰Oéʉâ!8ā#ÖiQŽĶ"~Ŋ`đMÍĸU0Įq ÅâYØĘnīĄŠI\Z í𓸴j¨žĄJôĻuĖÖ֜ :36Ŧ—7Q\4Ļ~SrŪ*nWßĶĢ#ĒĐü zŨĩļĩTč8Wmj.›~‰Æ2B¨ÅMZéé‡i…ę‹é]§EŸLÅA§Ü>/Ҋ$ąqSĪ4ma‘æÁØû.bu°BkØđc‹'úWኧžzjGũĄûū}Ų§KžĶIENDŽB`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment304\UZA IDATH‰íÔ1nÃ0 PĒ­Z;Õ=F‡"ēRPD.z1…Gā¨ĸ‚*.2‘Z (~MédrmpmqĻŧĖÔ|Åå&Ė´Cšh3gߕ¤_Ą¸ÚR‡ĖÖvU;Ä +[CŠV ‰ŦÃ8käC$Ȏ&:DtöĢ/Ĩė~õÉڒęKF øjgT?ĘĐwOe¨“ī7Ÿĩ9é“>yÁęä‹y(;ēĨĄdĢļåŅÖö'ÚSęMĩĒ~áŗ×É]Ŋļ/Ēôæi UpΚ¨F;A΁‹ĪVR=ĒÚŨ GĨԜ^ņčķ(ŧ=ÕX¸ĘfāŪ:{ĄėeũĘ<•­Čˇų_ũĄļŠö+ôšŠîz× 'nOÄ=¸ TIENDŽB`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment308Uãj IDATH‰íÔ1nÃ0 PĒ­Z;Õ=F‡"ēRPD.z1…Gā¨ĸ‚*.2‘Z (~MédrmpmqĻŧĖÔ|Åå&Ė´Cšh3gߕ¤_Ą¸ÚR‡ĖÖvU;Ä +[CŠV ‰ŦÃ8käC$Ȏ&:DtöĢ/Ĩė~õÉڒęKF øjgT?ĘĐwOe¨“ī7Ÿĩ9é“>yÁęä‹y(;ēĨĄdĢļåŅÖö'ÚSęMĩĒ~áŗ×É]Ŋļ/Ēôæi UpΚ¨F;A΁‹ĪVR=ĒÚŨ GĨԜ^ņčķ(ŧ=ÕX¸ĘfāŪ:{ĄėeũĘ<•­Čˇų_ũĄļŠö+ôšŠîz× 'nOÄ=¸ TIENDŽB`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment305+Rj×ÚIDATH‰íĶ=nÄ āĮ­›ČÜ \aoĀ•\nČÍæ(>é\XĖŽŊ-*RO1Í'ķtĻŋĒČT‘ĸļØÕ q7EčjÅ´!Xîę od™čTᅨØÁO_¸ĘŨr¯ 5ĘlÚ¯hE’/÷A5—„ŲŌĶíÔđčkC*ZŅĶ5wuG8T”č4ԛiS ™öë=4S­ĻßNéôG*ĻOĒ(‹kT,žŊĘÔV‹ëą“;™ œûŧ;%Žī@´"6dĻ’ū(Ķw4?R†Ē—^zéĨ˙ĸ/FƝ–Ks÷IENDŽB`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment309"ä&üÚIDATH‰íĶ=nÄ āĮ­›ČÜ \aoĀ•\nČÍæ(>é\XĖŽŊ-*RO1Í'ķtĻŋĒČT‘ĸļØÕ q7EčjÅ´!Xîę od™čTᅨØÁO_¸ĘŨr¯ 5ĘlÚ¯hE’/÷A5—„ŲŌĶíÔđčkC*ZŅĶ5wuG8T”č4ԛiS ™öë=4S­ĻßNéôG*ĻOĒ(‹kT,žŊĘÔV‹ëą“;™ œûŧ;%Žī@´"6dĻ’ū(Ķw4?R†Ē—^zéĨ˙ĸ/FƝ–Ks÷IENDŽB`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment306˛[;mųIDATH‰íÔÁq1 PyĖÄĮĨ\Š)%eäÄ:C”Vļ€ą™4āãf˛XČ. ¯K¸0āņėåd[˛—Ø™n ëØķT­KĪ9qŽē’¯ÔÉTu&?S/Đ0ĩi¨/ä Žü՗$ąßkē=ëīuæßE{-sĨ0FwŽŊTM„NÔ´ @ũСÕU­G…ąÎ ÆēŪÉŽĘŌŌ×7PÉ šķÆRÚč՘-ķzĨĢtV”^°FZƒ:‹K[ëM #Đã… ø^‰vöˇ›)BũŒL õ—ųŖŊ2đŽ˜wüÅü­ā)›ü7ILLŨ›úŸ]=õŠ÷Ŗ$´ŸŅߌIENDŽB`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment310B#¯ųIDATH‰íÔÁq1 PyĖÄĮĨ\Š)%eäÄ:C”Vļ€ą™4āãf˛XČ. ¯K¸0āņėåd[˛—Ø™n ëØķT­KĪ9qŽē’¯ÔÉTu&?S/Đ0ĩi¨/ä Žü՗$ąßkē=ëīuæßE{-sĨ0FwŽŊTM„NÔ´ @ũСÕU­G…ąÎ ÆēŪÉŽĘŌŌ×7PÉ šķÆRÚč՘-ķzĨĢtV”^°FZƒ:‹K[ëM #Đã… ø^‰vöˇ›)BũŒL õ—ųŖŊ2đŽ˜wüÅü­ā)›ü7ILLŨ›úŸ]=õŠ÷Ŗ$´ŸŅߌIENDŽB`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment307Å\ ûĶIDATH‰íÔ1Ž! ĐĻ˜’ŦÂ•ļÜ.H{°Ü„#Léá˜lJžĨ¤Ú'?Ā‚Uņļū…ŠÍZf:Ŧî6nTgšŨ^åzųZ÷‘ë ڑUŽgķĨĘ)­¤ķTũZĢ!ģž‚ÛZw×oŠ‘ĻÉõ§Ôōž`ĒŸhĒ˙ēˆĒįJ~Y6Ļb7š§l•eŌI˜Šĩâ /T-ŌWĒžę@Õw4ú7zūčWšôŌK/ô"kŗÕš+ĖIENDŽB`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3115$ŸĶIDATH‰íÔ1Ž! ĐĻ˜’ŦÂ•ļÜ.H{°Ü„#Léá˜lJžĨ¤Ú'?Ā‚Uņļū…ŠÍZf:Ŧî6nTgšŨ^åzųZ÷‘ë ڑUŽgķĨĘ)­¤ķTũZĢ!ģž‚ÛZw×oŠ‘ĻÉõ§Ôōž`ĒŸhĒ˙ēˆĒįJ~Y6Ļb7š§l•eŌI˜Šĩâ /T-ŌWĒžę@Õw4ú7zūčWšôŌK/ô"kŗÕš+ĖIENDŽB`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment308UãjäIDATH‰íÔą à Đs(衉=š,RØ #„(RP “ģË?¤Č­ŠŸÎF_S,O§ôÕ7ąŌÔ7ęFT#odĄĸ5ˆ¨™õ\ö÷˙hŪÕĸÃ7*qfŋ"MōEriQuëē@ĩV4*šīĸŨf7К]m5’¤×4NĸęŦdš2Tã‡FęöYUeŦ……gÎN´åŧ"MvWÂj¨éŒģEŊKJ¯âMÔjš$I2Yil>ˇŊwŌÂ7åŅ:ŲĘõú-P§y¨õ=T´Nū7.ŊôŌK˙Ķ/2†ŽåWG6IENDŽB`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment312Ŧ-Î5äIDATH‰íÔą à Đs(衉=š,RØ #„(RP “ģË?¤Č­ŠŸÎF_S,O§ôÕ7ąŌÔ7ęFT#odĄĸ5ˆ¨™õ\ö÷˙hŪÕĸÃ7*qfŋ"MōEriQuëē@ĩV4*šīĸŨf7К]m5’¤×4NĸęŦdš2Tã‡FęöYUeŦ……gÎN´åŧ"MvWÂj¨éŒģEŊKJ¯âMÔjš$I2Yil>ˇŊwŌÂ7åŅ:ŲĘõú-P§y¨õ=T´Nū7.ŊôŌK˙Ķ/2†ŽåWG6IENDŽB`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment309"ä&üŖIDATH‰íĶ1à P#Ɓ›”ŖÅQ†Ž=U‡^)`d@qA]ņŸŌĨÂë“íÁß$ ˜.Ö㍔ŦUĪĻ) ArPÔ I^ŅEØKkučé׎JV°•=ôĐC˙GŸ,×Í˙(nB—IENDŽB`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment317ÜG:ēŌIDATH‰íŌą ! P ʁQX)pRȡ Ŗ°A(It9Į&RŠÄ˙Ę(ÅQ¸āÉØvŧsf÷c}ØZ'å”M]îQ#ĐÔ&¨ÎĨێߚU )ŅÔŗæ& ¤ØÖsā†õ:í鸋.ļvZDøQwCA7Ē‹C3Đ44aŨ|‰ļVÍĨjë­ÄN€rUŊĨĄ“­Ģj⏪´í^ŪL¨ŦÚv´äæE“ŠŌáæ9SW™Ž(˜Â&[×NđĩĢŗˇõ>JV°•=ôĐC˙GŸ,×Í˙(nB—IENDŽB`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment314ENkäIDATH‰íĶą à Đošp˛Ŗ°RĘ‘@Ę %Œâ\‰@îlĨģ;šˆ”Æ4H~âwŨ ?Đâ-MMĻ"ÚëTe2ÕYēH‡ÚŠâuw蓿ŦhëcĪb7X'*ERjEZYĨč5yUŠ <ëY*%é9Ō›ĸ×HŠ6ĘûK{‰/CįđĻ}5ÍI|¤ €SŦP´ązC=ÅkÉ' īŠ*zX‹rŖM/–f(],1Ž*wŸ´!ΊRfeõĘZŌ°¨ęH ‚ĸžąFQˇUUųäī_íSq衇ūY?´&ŊŠņj§IENDŽB`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment318Lø'+äIDATH‰íĶą à Đošp˛Ŗ°RĘ‘@Ę %Œâ\‰@îlĨģ;šˆ”Æ4H~âwŨ ?Đâ-MMĻ"ÚëTe2ÕYēH‡ÚŠâuw蓿ŦhëcĪb7X'*ERjEZYĨč5yUŠ <ëY*%é9Ō›ĸ×HŠ6ĘûK{‰/CįđĻ}5ÍI|¤ €SŦP´ązC=ÅkÉ' īŠ*zX‹rŖM/–f(],1Ž*wŸ´!ΊRfeõĘZŌ°¨ęH ‚ĸžąFQˇUUųäī_íSq衇ūY?´&ŊŠņj§IENDŽB`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3152I[–ĪIDATH‰íŌ;! Đ8”ë ¸‰\ÉŌJ¸G’Ŗp„Øą3 °p×!ąōSl š7!ÂÃW5kIl™X `’&¯WZŠĒ’]Š{jT/J’.ęÚ Š¨™W×Õ1JoÕ0Š]-Œw•ĀE•Œ"8TåĖh›íY5ŠíŠĶIŌ“¤3vÕcŊ%I}ĪõĶXáØ4ŒĩžlS4ĸZN î(ŽĩNjbÕņÍí¯6eznZë2ķÖ5Ģ5q&VéŌŽÄÔ}Dfz^´÷sŊūeW›nēégôŦJÆõ64”‡IENDŽB`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment319;˙ŊĪIDATH‰íŌ;! Đ8”ë ¸‰\ÉŌJ¸G’Ŗp„Øą3 °p×!ąōSl š7!ÂÃW5kIl™X `’&¯WZŠĒ’]Š{jT/J’.ęÚ Š¨™W×Õ1JoÕ0Š]-Œw•ĀE•Œ"8TåĖh›íY5ŠíŠĶIŌ“¤3vÕcŊ%I}ĪõĶXáØ4ŒĩžlS4ĸZN î(ŽĩNjbÕņÍí¯6eznZë2ķÖ5Ģ5q&VéŌŽÄÔ}Dfz^´÷sŊūeW›nēégôŦJÆõ64”‡IENDŽB`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment316Ģ@ ,ÚIDATH‰íÔ1Â0 Đ_:t #7!œ„302ĩ9ZŽn1uˆė˛úgęØ ņđÔĘõˇŠÖ9;h^zŅIjÅdjÁØâR:Ŋ-]UũЁ*:ęD3Õ[ŊõKOī›^ėžËÛWíĘÖör›ÚĶhqjҐ9ë$;:ˆŽD+°ŠŨUƒhvö÷ļI5Ũ­Ōô!Ĩ™jÕėņ.’7§WāÄ5Īîŗ3\:3Ē(؜Ŧ[GU“…ËdΚ]$éã&uŨnC?ZŋL˙'¸ĪŸáĐC=tũąĩĸ._î’IENDŽB`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment320iüÚÚIDATH‰íÔ1Â0 Đ_:t #7!œ„302ĩ9ZŽn1uˆė˛úgęØ ņđÔĘõˇŠÖ9;h^zŅIjÅdjÁØâR:Ŋ-]UũЁ*:ęD3Õ[ŊõKOī›^ėžËÛWíĘÖör›ÚĶhqjҐ9ë$;:ˆŽD+°ŠŨUƒhvö÷ļI5Ũ­Ōô!Ĩ™jÕėņ.’7§WāÄ5Īîŗ3\:3Ē(؜Ŧ[GU“…ËdΚ]$éã&uŨnC?ZŋL˙'¸ĪŸáĐC=tũąĩĸ._î’IENDŽB`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment317ÜG:ēíIDATH‰íÔ1‚0Đe(°’Ö™\Ä!73Xq ¯˛Ūo2E&˜ tģ g”‚æe–ÍōšĀĶĶž¨ęŠŪP†JN͑攕Z]mĘŊÉÚD˛LJšë+Ú¤fÖJŲoQV4Ė•ų$kœģâ‹ĻeܑR9wkŲĘK?–P§i:.ęÄ\ŨßڋúœPevP¯P;´Ŗ =T‰Ė¨L’Ëœ?Ë:'Įx’ÕS›J´ŋŸÃėĸĸS_^IĶeœÉõPŖ|V•ĪāG Ru´HŲÁiĀģîą˙=ų×_Đij‘z¨9Í@o°ĢęôÅúXĢnÂĮzIENDŽB`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment321 ĖLíIDATH‰íÔ1‚0Đe(°’Ö™\Ä!73Xq ¯˛Ūo2E&˜ tģ g”‚æe–ÍōšĀĶĶž¨ęŠŪP†JN͑攕Z]mĘŊÉÚD˛LJšë+Ú¤fÖJŲoQV4Ė•ų$kœģâ‹ĻeܑR9wkŲĘK?–P§i:.ęÄ\ŨßڋúœPevP¯P;´Ŗ =T‰Ė¨L’Ëœ?Ë:'Įx’ÕS›J´ŋŸÃėĸĸS_^IĶeœÉõPŖ|V•ĪāG Ru´HŲÁiĀģîą˙=ų×_Đij‘z¨9Í@o°ĢęôÅúXĢnÂĮzIENDŽB`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment318Lø'+ōIDATH‰íĶąi1 ā˙pá&6îˇ!3§ ëwÔųÂYš’Ôí…6}Ũ‡zčĄ˙E¯î°ÃîÅ{ öIENDŽB`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment324nc8ÃüIDATH‰íĶ1nÄ ĐOBÉČM¸ŌŪĀļr\ÉEĘ!D)ļ.ŗō,Ž‹Õ*3nļIaČâ10ĀŲųF<¤%ˆ5dÃ7 2[ĮĪe䆴uœī•ā ‰ÕXB¨ˆŊU×íąąKŨTãW5c'Š3Y^)ĖäUmXgÖuŲUAŸ6Úęŋ)žŗžÕ/”ÎwTĒĄĪ^j–’ u;*č:HŒuą”ŸœLũįãSSÂēeƒĒŋ“oļ.@6´Á1 ¤ĩj¯É^x–†MÕõZĨ—@'§*÷b>6îˇ!3§ ëwÔųÂYš’Ôí…6}Ũ‡zčĄ˙E¯î°ÃîÅ{ öIENDŽB`‚ pix[254]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment321 ĖLīIDATH‰íĶąj1 `• ĩfķ‹üJ;ė㆞– ĐGˆC_@%CzAŅ]Ą“tCÉPčy¸AŸmūŗeЕŅāž*í{‘âj_´Š 5R´å+ēLøĨļyį+ƚ‡Ž§ŠŒī­˙Ģ#ãg ēcÔV] ŒbǁæÎ6ĮŅŖíŒĘY^æˇo-ō䝕é>i¯2ų')ŗ^§äësR˛pž˛Õ‡PÉęúh“$;bĩž •S‡4FÚíę“]ĸŸŠĨHįvĨ s>¨œš-/Ž*Õ3^ęūäĒ—XōozOũú“Š6Ũôč h2Í>‡(‹8IENDŽB`‚ pix[255]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment325dUīIDATH‰íĶąj1 `• ĩfķ‹üJ;ė㆞– ĐGˆC_@%CzAŅ]Ą“tCÉPčy¸AŸmūŗeЕŅāž*í{‘âj_´Š 5R´å+ēLøĨļyį+ƚ‡Ž§ŠŒī­˙Ģ#ãg ēcÔV] ŒbǁæÎ6ĮŅŖíŒĘY^æˇo-ō䝕é>i¯2ų')ŗ^§äësR˛pž˛Õ‡PÉęúh“$;bĩž •S‡4FÚíę“]ĸŸŠĨHįvĨ s>¨œš-/Ž*Õ3^ęūäĒ—XōozOũú“Š6Ũôč h2Í>‡(‹8IENDŽB`‚ pix[256]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment322‡öëIDATH‰íÔ1n!Đŋĸ˜rÛ‘ö )]e}”!Ĩ;“äJ{:—!r3ÅhĮŗNJ>)\f ¤'ÄđNÉxLĨŖ+’gdž´bōedĒ=‹1•M/M•ŠVlēiō¨DË)­UĒö$Ÿ~´•׎–Mé’Bõ…(Ōˇ‰žˆĘā*úŪ҉ÎũüđĘ5îžĖ=]æJÖÕ965Ö7ĸ’¨Ĩ}Αx(ĮŠ…gĸzך­Ã_:pŒMLõžĪL cŧŗcŌįéZÛ§Ŋž#ģ˜ŽŅ¸nEûÚ~ŋŋk„üđŸŗëŽģūCŊųt°÷đ×IENDŽB`‚ pix[257]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment326€mYīëIDATH‰íÔ1n!Đŋĸ˜rÛ‘ö )]e}”!Ĩ;“äJ{:—!r3ÅhĮŗNJ>)\f ¤'ÄđNÉxLĨŖ+’gdž´bōedĒ=‹1•M/M•ŠVlēiō¨DË)­UĒö$Ÿ~´•׎–Mé’Bõ…(Ōˇ‰žˆĘā*úŪ҉ÎũüđĘ5îžĖ=]æJÖÕ965Ö7ĸ’¨Ĩ}Αx(ĮŠ…gĸzך­Ã_:pŒMLõžĪL cŧŗcŌįéZÛ§Ŋž#ģ˜ŽŅ¸nEûÚ~ŋŋk„üđŸŗëŽģūCŊųt°÷đ×IENDŽB`‚ pix[258]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment323đ­`ÜIDATH‰íŌŊ Ã0ā3*\Ēuw‹´J H&‹Édi n\(žœMŠ@ôTĻVĄBˆûy$•č§ēĶ{:/FbSÖDœvę"Õt#øŗ'ōÁ ĒdĶļŦĪYLtÁ‚iŒkĢęģĸI6U%ąŅé8‹ē’gUĐo&–¨-ƒuĒJžŦģéäĘUe+ƒôŊĘ01T# ŖjĢË(kŸíÚĘ k6r˛ČĄšÃ‰5xP;ŽÄá tË$ŖIFō÷đí÷Iú%L.,2Ë 2ųQĀĄ‡zč_č ŌŪÔbloIENDŽB`‚ pix[259]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment327÷jiyÜIDATH‰íŌŊ Ã0ā3*\Ēuw‹´J H&‹Édi n\(žœMŠ@ôTĻVĄBˆûy$•č§ēĶ{:/FbSÖDœvę"Õt#øŗ'ōÁ ĒdĶļŦĪYLtÁ‚iŒkĢęģĸI6U%ąŅé8‹ē’gUĐo&–¨-ƒuĒJžŦģéäĘUe+ƒôŊĘ01T# ŖjĢË(kŸíÚĘ k6r˛ČĄšÃ‰5xP;ŽÄá tË$ŖIFō÷đí÷Iú%L.,2Ë 2ųQĀĄ‡zč_č ŌŪÔbloIENDŽB`‚ pix[260]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment324nc8ÃúIDATH‰íŌ=n! `;4‘¸Áp‘hįZ)ĸŖqŽ@Ia™xG›Ũ"ļĢHi†öĪ–ŗ*üÎäéžvW›ĢÕŊŠĢ >•ŅSŌõŌčŠÕ]'.˛põ<{@ĸ˜ §Aĸ'čI C }øĄ8@ 뎁ŪqÄZt´áH†žEēaOMU†D;öÜv]ŖŖĢŪlmČ[ÍĒvāOeē=WK %SW-3{:öfŊY´ŲĢ*īõ¨Ĩ']g‚Ė)Œ7ĀiLPæ~œúŸJF7DŋÎōX*åaŖ“SŽũŒlôYtq^U}œŲ<ģąkđŖÎēôŌK˙Yŋú­5$ü~IENDŽB`‚ pix[261]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment328gÕtčúIDATH‰íŌ=n! `;4‘¸Áp‘hįZ)ĸŖqŽ@Ia™xG›Ũ"ļĢHi†öĪ–ŗ*üÎäéžvW›ĢÕŊŠĢ >•ŅSŌõŌčŠÕ]'.˛põ<{@ĸ˜ §Aĸ'čI C }øĄ8@ 뎁ŪqÄZt´áH†žEēaOMU†D;öÜv]ŖŖĢŪlmČ[ÍĒvāOeē=WK %SW-3{:öfŊY´ŲĢ*īõ¨Ĩ']g‚Ė)Œ7ĀiLPæ~œúŸJF7DŋÎōX*åaŖ“SŽũŒlôYtq^U}œŲ<ģąkđŖÎēôŌK˙Yŋú­5$ü~IENDŽB`‚ pix[262]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment325dUßIDATH‰íŌ+! āė Vbë¸Be×ǃÎ`¯Äž G(Ž–™CšmE ?Ļ/ŗ>’âNxú°Ū|O#šbäP[Ų¤äŒE‡uEęÉ2@]_iUt3Ģ`QVQņ-{×Ô4=4€N*ÖĸK[+õ´›E§ļf˛Ņą­‰ GW‘î5¨9‹rŅ "ŅgƒuâlÛęē*¨tĐEÔŨ™’âNxú°Ū|O#šbäP[Ų¤äŒE‡uEęÉ2@]_iUt3Ģ`QVQņ-{×Ô4=4€N*ÖĸK[+õ´›E§ļf˛Ņą­‰ GW‘î5¨9‹rŅ "ŅgƒuâlÛęē*¨tĐEÔŨ™liđteO:õÔS˙@ŋ„Č>ņAöiIENDŽB`‚ pix[267]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment331ũ ÷IDATH‰íĶģQ1 `é8aÆ1 .‚7vƒˇJÂĨˆ p†…önÉ$%0DĢПßķ ØŠ ūO):ē đV-dū4uBZhi'CSß'dUG~ī:$}meĸQWyņ ô +÷Bé)čJY´ŊÚĸėÜ^Q×-|8*˙lëē Ø–ą6ŠĻÆ ërˇ•Eŗ§T\­õ[õ/äV­;÷gŅb)ɋ Ĩ\€ĻîŠÃ~5ÎŊé0ôH”ÜĒē‡ų*í ë’$ĪÄËČÆã}’ĄĮF&¯SFö´šjôīVG§Ģã>liđteO:õÔS˙@ŋ„Č>ņAöiIENDŽB`‚ pix[268]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment328gÕtčäIDATH‰íĶ1n!ĐŋÂ%mRqtø(9‚ËTY:+D)|9–ˆ Ø]2Ë(ŎčH0üîTÆčļÚē‰Ē×lV, ĮôK,íĀ ļ§Ž…LÔ)|å×Ĩꁊú›†´1 Wũ˜šL­h‘jZš6§›§ZĄ˛P•ķZ L‹¤ũ”ô•_é‹$Ūʞjš$ǧ5_Ø/DA¤ZŊ<ÅBՕ—0Īūć.yhe ŧ }ļsUqŽn¤ÎNlģ’iŸav3]–ę=“dRJœ+G[GÕ1k‰Ē]‡zčĄ˙HŋxÂļhĪÎ IENDŽB`‚ pix[269]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment332žŦˇäIDATH‰íĶ1n!ĐŋÂ%mRqtø(9‚ËTY:+D)|9–ˆ Ø]2Ë(ŎčH0üîTÆčļÚē‰Ē×lV, ĮôK,íĀ ļ§Ž…LÔ)|å×Ĩꁊú›†´1 Wũ˜šL­h‘jZš6§›§ZĄ˛P•ķZ L‹¤ũ”ô•_é‹$Ūʞjš$ǧ5_Ø/DA¤ZŊ<ÅBՕ—0Īūć.yhe ŧ }ļsUqŽn¤ÎNlģ’iŸav3]–ę=“dRJœ+G[GÕ1k‰Ē]‡zčĄ˙HŋxÂļhĪÎ IENDŽB`‚ pix[270]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment329ŌD~ÆIDATH‰íĶ1 ā×0°Éڍ+8:9M<†G‘Ū„Æ āF"ቍc˙78t‚/?ü@,Œ‰öT#i‚fŌ™Ŧ ‰ ßļ5­Z‡˙Ô$˛Ē•tl摿“E†šũ{a”Š“ã'ÖhyfF OžĐI39¨¤kká ô ęŲ@Ŋ+.*¯Š2‹šD ^-X'§gQC1P/’†ãWQG‘tm%¤&’CēžINn•ļęļĩ]UUŋøģūũŽ]ģvmS•÷z¤[‘á&Y‹IENDŽB`‚ pix[271]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment333éœ!ÆIDATH‰íĶ1 ā×0°Éڍ+8:9M<†G‘Ū„Æ āF"ቍc˙78t‚/?ü@,Œ‰öT#i‚fŌ™Ŧ ‰ ßļ5­Z‡˙Ô$˛Ē•tl摿“E†šũ{a”Š“ã'ÖhyfF OžĐI39¨¤kká ô ęŲ@Ŋ+.*¯Š2‹šD ^-X'§gQC1P/’†ãWQG‘tm%¤&’CēžINn•ļęļĩ]UUŋøģūũŽ]ģvmS•÷z¤[‘á&Y‹IENDŽB`‚ pix[272]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment330p͛ÜIDATH‰íŌ1ŠÃ0Đ *Tę ēȂŽĩE )|Ŧđ|„•+—1l3Å 9igLš4ÁSÁƒFú„ęčŊĘŗ­t-Ą’ĢU­ä…œ*ĢzĻ`hëō†Ļ6ÔÔ6°ĻōŖëz6egǤ"ļrœ6t “Øs‹˙7õš‡Š#Æ D+Ė=ƌumMoā NFį´œ ÍĢ^|ǤŒNWN™Ķš’Ύ–Ļá,ĻėĻÆŗ”c˙ČäAUų ĪĐę}G´¸?ĒĀĐnŋēnÔŽģîēë‡čCžô aR%IENDŽB`‚ pix[273]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment334wx ‚ÜIDATH‰íŌ1ŠÃ0Đ *Tę ēȂŽĩE )|Ŧđ|„•+—1l3Å 9igLš4ÁSÁƒFú„ęčŊĘŗ­t-Ą’ĢU­ä…œ*ĢzĻ`hëō†Ļ6ÔÔ6°ĻōŖëz6egǤ"ļrœ6t “Øs‹˙7õš‡Š#Æ D+Ė=ƌumMoā NFį´œ ÍĢ^|ǤŒNWN™Ķš’Ύ–Ļá,ĻėĻÆŗ”c˙ČäAUų ĪĐę}G´¸?ĒĀĐnŋēnÔŽģîēë‡čCžô aR%IENDŽB`‚ pix[274]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment331ũ éIDATH‰íĶ=ND!đ!$ŌIkĩī vvr%K‹M˜ÎcÉÆƒønā+§ ˞˜X͟fŨb“7Ąû…0_N‚éŸĩy-/Pɍ“MmD\ŖeĒi%WšĢ¯āŨAkč)ÕgTQlOQ7ģ—ZŪĸŽö]• k?ÉÖ­÷9hąŗŌÕ){eģ^-4Ļl=u%¨_œ?XÉÛúÃŊ¨:”‘–ލ,å˜8¯@#ŋ'–Ŗ­[dI$¯Hi›ëÁÉŧû@BN@¯y[7ÛĢvŲĢĨ˜ūãĸĨ˙& ŋöę/vŨõ>õ{ǟSMSÍWdĩëõ č ŋÜ !6IENDŽB`‚ pix[275]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3359éIDATH‰íĶ=ND!đ!$ŌIkĩī vvr%K‹M˜ÎcÉÆƒønā+§ ˞˜X͟fŨb“7Ąû…0_N‚éŸĩy-/Pɍ“MmD\ŖeĒi%WšĢ¯āŨAkč)ÕgTQlOQ7ģ—ZŪĸŽö]• k?ÉÖ­÷9hąŗŌÕ){eģ^-4Ļl=u%¨_œ?XÉÛúÃŊ¨:”‘–ލ,å˜8¯@#ŋ'–Ŗ­[dI$¯Hi›ëÁÉŧû@BN@¯y[7ÛĢvŲĢĨ˜ūãĸĨ˙& ŋöę/vŨõ>õ{ǟSMSÍWdĩëõ č ŋÜ !6IENDŽB`‚ pix[276]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment332žŦˇōIDATH‰íŅ1nÃ0 P ­ž@_$pŽÕÁˆ”ɖ\ @Rĩ=HUäēh0ÄJÎƝ%Ģ9hy"A’4ĘĶŖz#‡Ô“ķX‰Ņ^ūę’o餍ˇh D­uUSPm e+Ī,_ ī;K5ŗäN^&–š“Љ%Yš]c ¨!”UČĐĪč~Ãa ô;ēV‰{ CSwƒÕõ\4Ž@ĮĄã¨ ģĢ)ÆAŸ*‘/ú˛Ņ÷œˆFöåíÎ‹všÎD™ũ4“É|D*Ū ŅĪõúįk~ŗĒĘ2ė ö|¯G47UÚúĶT­V]uÕUũbfŊPŽ=Ā{IENDŽB`‚ pix[277]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment336™vhŽōIDATH‰íŅ1nÃ0 P ­ž@_$pŽÕÁˆ”ɖ\ @Rĩ=HUäēh0ÄJÎƝ%Ģ9hy"A’4ĘĶŖz#‡Ô“ķX‰Ņ^ūę’o餍ˇh D­uUSPm e+Ī,_ ī;K5ŗäN^&–š“Љ%Yš]c ¨!”UČĐĪč~Ãa ô;ēV‰{ CSwƒÕõ\4Ž@ĮĄã¨ ģĢ)ÆAŸ*‘/ú˛Ņ÷œˆFöåíÎ‹všÎD™ũ4“É|D*Ū ŅĪõúįk~ŗĒĘ2ė ö|¯G47UÚúĶT­V]uÕUũbfŊPŽ=Ā{IENDŽB`‚ pix[278]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment333éœ!æIDATH‰íĶą 1 P)R†˛R†a DŒ„M™€ÂH4WD1ÎAi_ ģ(UžŦ\ž}Ā3 áĮ:îæ”äĐķĶP9Äaښd†/ĩõ=¯NÕwaoĢkt]õÂYŋ׋S/Ž×ŅÔęø­¯âqāĒõŪLÎT‚ŒC•0uĨŒ=ŽŦęŊ¤#6‡ērI'ą3cdk6d]Ĩé÷˙ūĸ‹.ēčŋôķĩÃ2, IENDŽB`‚ pix[279]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment337îqX8æIDATH‰íĶą 1 P)R†˛R†a DŒ„M™€ÂH4WD1ÎAi_ ģ(UžŦ\ž}Ā3 áĮ:îæ”äĐķĶP9Äaښd†/ĩõ=¯NÕwaoĢkt]õÂYŋ׋S/Ž×ŅÔęø­¯âqāĒõŪLÎT‚ŒC•0uĨŒ=ŽŦęŊ¤#6‡ērI'ą3cdk6d]Ĩé÷˙ūĸ‹.ēčŋôķĩÃ2, IENDŽB`‚ pix[280]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment334wx ‚øIDATH‰íÔąm1 Đ/¨PgĨLaX‹ž•2OxĨÛ +Č*U’)ÃvE˛TwíÁÔ'% ãËøsmŅR –fSai‡Uˇ‰ŊŋÕYZŊŠRSo-ĒŪĻJ-ŗvø†¨iƒ¯¤hęI9SAؐ•s.SãKŋE͐ÂzjĘ'Š-Žû+–|‘ĩ}ņUSąķŋWiĀŦ[č\WSÎYי¤ŽŽÂåUŅāÚAׁ~˛ttˇiuM- ʕUΊčâČÖŗĸGGVmžŽāʇļ9žf˜ō ëŠ iC(sLIԁÄĢ5°ĘJkÃ2~ü—p×]wũŊŪˇĨ럱בIENDŽB`‚ pix[281]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment338~ÎEŠøIDATH‰íÔąm1 Đ/¨PgĨLaX‹ž•2OxĨÛ +Č*U’)ÃvE˛TwíÁÔ'% ãËøsmŅR –fSai‡Uˇ‰ŊŋÕYZŊŠRSo-ĒŪĻJ-ŗvø†¨iƒ¯¤hęI9SAؐ•s.SãKŋE͐ÂzjĘ'Š-Žû+–|‘ĩ}ņUSąķŋWiĀŦ[č\WSÎYי¤ŽŽÂåUŅāÚAׁ~˛ttˇiuM- ʕUΊčâČÖŗĸGGVmžŽāʇļ9žf˜ō ëŠ iC(sLIԁÄĢ5°ĘJkÃ2~ü—p×]wũŊŪˇĨ럱בIENDŽB`‚ pix[282]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3359čIDATH‰íĶ1nÃ0 @ 4Ļ?đGŠđgļ2åYÕSøƒht‡,åŦ$&KÚ04đ,™”(āŠđkåPé#Ō ÁŌW ŽĻÖGtTßķk CŲ×Ĩ&'+_2‚]‘æÜŠĖŽjĨkNŽö)%Wiė¤pļĩī›ĖÅ9ũŠčiQ%䓩œ+ Mž&ēMĻnē˙×PK›VôtÎĒv_ŠrĒØŨšcņn˙—aŊ¯y4Ųõ ”ŅZžŌžĻĢ(-Kwô&˛N˛ú*ûŅíūzåî˙I}„ēŊ1÷Ŧ=ôßę=ÔīPFü9ūŸIÂ6‹ôĄIENDŽB`‚ pix[283]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment339 Éu?čIDATH‰íĶ1nÃ0 @ 4Ļ?đGŠđgļ2åYÕSøƒht‡,åŦ$&KÚ04đ,™”(āŠđkåPé#Ō ÁŌW ŽĻÖGtTßķk CŲ×Ĩ&'+_2‚]‘æÜŠĖŽjĨkNŽö)%Wiė¤pļĩī›ĖÅ9ũŠčiQ%䓩œ+ Mž&ēMĻnē˙×PK›VôtÎĒv_ŠrĒØŨšcņn˙—aŊ¯y4Ųõ ”ŅZžŌžĻĢ(-Kwô&˛N˛ú*ûŅíūzåî˙I}„ēŊ1÷Ŧ=ôßę=ÔīPFü9ūŸIÂ6‹ôĄIENDŽB`‚ pix[284]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment336™vhŽųIDATH‰íĶQnà PGLåo\`WØĒp­~D!ģYoRO;œ?&exŨ_ėJ“Ē~~B`æÄÆ˜Ā’˙hUö5ũ–y)T­B¯jiJ†ŌU_œ­ŅÖ¸ęŅŌ„lÍ7!Ķ[ļt&&Ė4č12Ÿs9ęo%ÄS*uĸÄYWy–J–C(Oú­–gŋôžF=Ŗúękī(wēörĻC~×oU¯:ęnč\5Ũ¤ÔĒP=˛Äļ)W=žmūąuž5Dž:ūÔôpÆëøKSiš5ŦÎI´†ÕíBŲūG™?dĒūmîô÷wŨu×] ŋÔúĮ™bĮôŸIENDŽB`‚ pix[285]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment340?T[\ųIDATH‰íĶQnà PGLåo\`WØĒp­~D!ģYoRO;œ?&exŨ_ėJ“Ē~~B`æÄÆ˜Ā’˙hUö5ũ–y)T­B¯jiJ†ŌU_œ­ŅÖ¸ęŅŌ„lÍ7!Ķ[ļt&&Ė4č12Ÿs9ęo%ÄS*uĸÄYWy–J–C(Oú­–gŋôžF=Ŗúękī(wēörĻC~×oU¯:ęnč\5Ũ¤ÔĒP=˛Äļ)W=žmūąuž5Dž:ūÔôpÆëøKSiš5ŦÎI´†ÕíBŲūG™?dĒūmîô÷wŨu×] ŋÔúĮ™bĮôŸIENDŽB`‚ pix[286]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment337îqX8IDATH‰íÔąNÄ0 `W˛á@]Ūė’Ķ ŒŧRFŪ#V†H,ĸ˜\zˆ؆Ĩŋ*5ę×DVäØH‚ß´ŽQ5õ*oūJ[ü1% ōøaT%húŌoiCC5}n™D­Ģhz.;kÚלøHQ֙O|*AŦĘ9~~`'+ß ķYŊ¨O]ąiš'Žēö  Ü"+Ü‚{ԔÂKžÅEíûđŽ+—Āy‡EÔæ“gÚ9Y+Ž*¯ŧ¸œ:ˇëŪ•ŊŠa&])ĖIV€ÃL@Ž`mKq'ÛPβrīēūĸПär_ä×ūʲ^BļŠŨū™lj2ŠōųŊ¤9K+šę˙pnēéĻ˙¨yeŦŦķßNIENDŽB`‚ pix[287]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment341HSkĘIDATH‰íÔąNÄ0 `W˛á@]Ūė’Ķ ŒŧRFŪ#V†H,ĸ˜\zˆ؆Ĩŋ*5ę×DVäØH‚ß´ŽQ5õ*oūJ[ü1% ōøaT%húŌoiCC5}n™D­Ģhz.;kÚלøHQ֙O|*AŦĘ9~~`'+ß ķYŊ¨O]ąiš'Žēö  Ü"+Ü‚{ԔÂKžÅEíûđŽ+—Āy‡EÔæ“gÚ9Y+Ž*¯ŧ¸œ:ˇëŪ•ŊŠa&])ĖIV€ÃL@Ž`mKq'ÛPβrīēūĸПär_ä×ūʲ^BļŠŨū™lj2ŠōųŊ¤9K+šę˙pnēéĻ˙¨yeŦŦķßNIENDŽB`‚ pix[288]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment338~ÎEŠ IDATH‰íĶģm1 ` g@ĨRĻĶî´RĘF¤ 2‚WšQ” ؅…"†9bS<‡ĀMÔ~ôƒ`ãøsÅdiņ–¤jßyS•Āķhņ  h d(ːīŅ ZĪÚo4ž4 ´ƒŸĪúuŖÉPzIíI´$-WSĨPû0Tđ†v˜hŦMô0VīŖĒAÔ×QĒãĸi֕´d5sv؆ŠÉ!M˜ôūÖčŸõÉŠ0U€×Á\­Š=€ž '}“éR3/š‡äk.QU‚DmâšUmR†Ļ-āĸ,OĘĢĒž('S/įz~+™ZMũØ ŸĻōŋ>RĻžo¸ģ%ÕĒRļMĨk||îŅoĪĄÕ—]IENDŽB`‚ pix[289]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment342ŅZ:p IDATH‰íĶģm1 ` g@ĨRĻĶî´RĘF¤ 2‚WšQ” ؅…"†9bS<‡ĀMÔ~ôƒ`ãøsÅdiņ–¤jßyS•Āķhņ  h d(ːīŅ ZĪÚo4ž4 ´ƒŸĪúuŖÉPzIíI´$-WSĨPû0Tđ†v˜hŦMô0VīŖĒAÔ×QĒãĸi֕´d5sv؆ŠÉ!M˜ôūÖčŸõÉŠ0U€×Á\­Š=€ž '}“éR3/š‡äk.QU‚DmâšUmR†Ļ-āĸ,OĘĢĒž('S/įz~+™ZMũØ ŸĻōŋ>RĻžo¸ģ%ÕĒRļMĨk||îŅoĪĄÕ—]IENDŽB`‚ pix[290]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment339 Éu?ØIDATH‰íĶA 1 Đ/vgĐŖô*Ū¤ÃŖØÁ‹Dŧ@a6ŗŒÜ&‹‚‹éĻĨ4iiĀ‘ņ]͈ëuâ˛ãęT}ŠÎ`ęÕ .ĻĻϞh֕1ˆ&S“­˛O9yš <–dŧËeĮÂŗĄRŌMt0NF<喞sęT nÕIՉ‚_õŽ˙œ*jVÅtv^OûŖĄ‹#xxã%—¸ĒĮÎx+ôX [å_Eg]Ĩ$ÜK;¨J;žÖ•Õƒš­Ü¯ĨŠĻōĻ›nú‡zmęågÚŽę#}hâÆJlžfyIENDŽB`‚ pix[291]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment343Ļ] æØIDATH‰íĶA 1 Đ/vgĐŖô*Ū¤ÃŖØÁ‹Dŧ@a6ŗŒÜ&‹‚‹éĻĨ4iiĀ‘ņ]͈ëuâ˛ãęT}ŠÎ`ęÕ .ĻĻϞh֕1ˆ&S“­˛O9yš <–dŧËeĮÂŗĄRŌMt0NF<喞sęT nÕIՉ‚_õŽ˙œ*jVÅtv^OûŖĄ‹#xxã%—¸ĒĮÎx+ôX [å_Eg]Ĩ$ÜK;¨J;žÖ•Õƒš­Ü¯ĨŠĻōĻ›nú‡zmęågÚŽę#}hâÆJlžfyIENDŽB`‚ pix[292]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment340?T[\IDATH‰íĶ1J1ā S¤Y6Í,-äå*ī–âŽXx â‚ÉRFŒ;NPąx3 ›‡ŧbÉ–$˙ đáøøų 8Zų}bJēĮx]ÁqÆ ¨ę*ë‹+˛GĶ&JX@;^W˙ĨŗŽŗŠ‘=æ+C¯ˎ†ŪͯĶIDATH‰íÔŊM1`¯Éî`ŨLK„Dį%!§‚+……€6néĀŦyįÛˌ.A$įČŌgųįyė§-áJWûOīäęŅ]÷ŽPŗĨ&l„@Ēö]/ct%ŦŽ~P7gŽģF]S§­|Ä õ9ëZx¨đ›ž†$Yõ‚{ēŒQĩeĖ„ÆēnQf’Mß–IōČJ?hŽbdUŌڙŸ5ÆĐˆ´šzˆ€Ē(Žļâiåĩ¨•E×ŧÖ*ëēíúhhÍËĐVëJjš< ÔÆĖF’-ŒÃSH†f´QuÆũ†7hŋn!ŧēzr†wWŋTõz…~ģ UåŸôWģéMoúįz–}Éá$~âIENDŽB`‚ pix[296]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment342ŅZ:pîIDATH‰íÔąn1 ā‚.Ku÷܋ ãĩ*%´¯OÂ1ąfĖpŠq@ˆÛ*:TdŠôÅQÛ#âõē“5u2a-jD(gĘč%-@Č3Jē&U'Ö4ĒJ?ę^SĮ¤Ģ7´ ŖCŊu'kOßUÅXŠ}(ęhrš‚]CcÅŽMM÷Z¯č!Z\–UÅˇĘž*gʋęâĒĮ§ĸ Xĩø'RÖ °0ē&KgYß9_ĩQÎĖUĮÚ)ĩQā§“ÖeÄ}Š ę‰,Ĩ›F[ŸņŽ[z´´Čø'ŋŲ[˙‘†_čëNõVY/ŊÄüöļo‘IENDŽB`‚ pix[297]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment346Ö7ūiîIDATH‰íÔąn1 ā‚.Ku÷܋ ãĩ*%´¯OÂ1ąfĖpŠq@ˆÛ*:TdŠôÅQÛ#âõē“5u2a-jD(gĘč%-@Č3Jē&U'Ö4ĒJ?ę^SĮ¤Ģ7´ ŖCŊu'kOßUÅXŠ}(ęhrš‚]CcÅŽMM÷Z¯č!Z\–UÅˇĘž*gʋęâĒĮ§ĸ Xĩø'RÖ °0ē&KgYß9_ĩQÎĖUĮÚ)ĩQā§“ÖeÄ}Š ę‰,Ĩ›F[ŸņŽ[z´´Čø'ŋŲ[˙‘†_čëNõVY/ŊÄüöļo‘IENDŽB`‚ pix[298]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment343Ļ] æîIDATH‰íĶ1nÃ0 P4jÍÆĄ7ĐU|Œnrof#‘‘Ą+GpÃ2NēņĢēZŖ ü_d5ŅĄ‡ū]ŋĖnÅŦÆ:ŗ5ļs U(eĨS¨ō˛wmŋh|īLŧŨ5w•–] ĐēĢÅ:šēĻX—Õô%ˇĢ-]ĒŒšŊÆēËČčÍúTFíĪęGã9ë9‰@5MĢë[œāCEcũĐtūúŽiņÖ$y=Ž@‰\OXķLÃčDyĸa¤ėē6ÔÉâ'ãÆV'ŠoųŦ@žvšĢR…ŋ[x ky>?Tíęf=ĩCũ—~syŗL˛ Z]IENDŽB`‚ pix[299]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment347Ą0Î˙îIDATH‰íĶ1nÃ0 P4jÍÆĄ7ĐU|Œnrof#‘‘Ą+GpÃ2NēņĢēZŖ ü_d5ŅĄ‡ū]ŋĖnÅŦÆ:ŗ5ļs U(eĨS¨ō˛wmŋh|īLŧŨ5w•–] ĐēĢÅ:šēĻX—Õô%ˇĢ-]ĒŒšŊÆēËČčÍúTFíĪęGã9ë9‰@5MĢë[œāCEcũĐtūúŽiņÖ$y=Ž@‰\OXķLÃčDyĸa¤ėē6ÔÉâ'ãÆV'ŠoųŦ@žvšĢR…ŋ[x ky>?Tíęf=ĩCũ—~syŗL˛ Z]IENDŽB`‚ pix[300]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment34489ŸE IDATH‰íÔąmÃ0Đ#T¸42=I¸JFČ! %c„F aziXŧđ$ ĀģĢ’Nl(J÷?¨ŦŖŖĻÕh:÷‡üŌĸî̓Ļé¨ĒSÕkuípÕ|rŠF =t¯ĩhh >€•´’vüŖ.ĀAP?ŸˆŠMCéŊę–'žģ_I ĶUSœ0'FoĢ4­ĐÔI:ƒO˛p‰žÜ•rŅöΝģiļY?ķņ]V,¤Ō$ąØĢŦSą)›Q2é…O°Ŏāâ3›>í0‘īÆĻ‰o]5éąi: @Z–ÎsúŌ´%%ë ũUĸÁ{ģÛ7^i ĖÍ˙žķ›ĒøŸĘŽ]wŨuĶ/`ŗL­¨ŋIENDŽB`‚ pix[301]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3481Ķn IDATH‰íÔąmÃ0Đ#T¸42=I¸JFČ! %c„F aziXŧđ$ ĀģĢ’Nl(J÷?¨ŦŖŖĻÕh:÷‡üŌĸî̓Ļé¨ĒSÕkuípÕ|rŠF =t¯ĩhh >€•´’vüŖ.ĀAP?ŸˆŠMCéŊę–'žģ_I ĶUSœ0'FoĢ4­ĐÔI:ƒO˛p‰žÜ•rŅöΝģiļY?ķņ]V,¤Ō$ąØĢŦSą)›Q2é…O°Ŏāâ3›>í0‘īÆĻ‰o]5éąi: @Z–ÎsúŌ´%%ë ũUĸÁ{ģÛ7^i ĖÍ˙žķ›ĒøŸĘŽ]wŨuĶ/`ŗL­¨ŋIENDŽB`‚ pix[302]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment345O>¯ĶIDATH‰íÔąNÃ0ās-á­éÔ¯ĀČD^Ģ’Í›™Š#¯‰!#‘X‚0žžS54åZC=8V>Ywō0<]VMI#in”,’ƒĒ˛v:"í‰8¨Ht7¯2¯PŨQ i'uUX5{ÕQ~ 5E­öj`Wˇ–Y֚oÔ{ÂĘ]VfÂ)›–Š“ÂęÍ j"•ÖšŖ™IđDŸ'{׊û Ģ))W{ĩŨž´õ uģQÛclîi#ÚÔPÒ6ųjšƒžLԈ’ûŌˇ‰j’€ęĀX)Ģ}ÂÚP×>ŽúÔ×đœåÖåēŪBíÉȇāf4’ÍŅûŠ[”žŧ xo?čņ9z˜/ũWi‹ē=C_Īčęõķ_vuÕĢūĻî5˙ĻsĀĐîØIENDŽB`‚ pix[303]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment349FˆãøIDATH‰íÔąNÃ0ās-á­éÔ¯ĀČD^Ģ’Í›™Š#¯‰!#‘X‚0žžS54åZC=8V>Ywō0<]VMI#in”,’ƒĒ˛v:"í‰8¨Ht7¯2¯PŨQ i'uUX5{ÕQ~ 5E­öj`Wˇ–Y֚oÔ{ÂĘ]VfÂ)›–Š“ÂęÍ j"•ÖšŖ™IđDŸ'{׊û Ģ))W{ĩŨž´õ uģQÛclîi#ÚÔPÒ6ųjšƒžLԈ’ûŌˇ‰j’€ęĀX)Ģ}ÂÚP×>ŽúÔ×đœåÖåēŪBíÉȇāf4’ÍŅûŠ[”žŧ xo?čņ9z˜/ũWi‹ē=C_Īčęõķ_vuÕĢūĻî5˙ĻsĀĐîØIENDŽB`‚ pix[304]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment346Ö7ūiđIDATH‰íÔģm1 ` *ŽÔ…Ģd w”‘"kdˇ[@éā`Fw0܄T .ŒSĄæcAūz€VכUöĐdjÔ¤ĩī– ā H ›Ę€+;Z€†ēĩĐūĸa×b+­L—OWŋ/bë˛+ŋŲ=kĐ+÷4ĐԞ˙ÂTœ{Œ]gvsŽģOOy:7{ĸvĘīBĄMöD-}Ž5ļči’ėé\ķÄÉĶ>K(SŦŽÄā(ėzOąk{ĸrWįnlŅģuTŊĶß"ôŪŅļWŖååĄŋMõ:ÔīģV˛ôÎĄ‡újú銸m‰øĶˇIENDŽB`‚ pix[305]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment350&OjđIDATH‰íÔģm1 ` *ŽÔ…Ģd w”‘"kdˇ[@éā`Fw0܄T .ŒSĄæcAūz€VכUöĐdjÔ¤ĩī– ā H ›Ę€+;Z€†ēĩĐūĸa×b+­L—OWŋ/bë˛+ŋŲ=kĐ+÷4ĐԞ˙ÂTœ{Œ]gvsŽģOOy:7{ĸvĘīBĄMöD-}Ž5ļči’ėé\ķÄÉĶ>K(SŦŽÄā(ėzOąk{ĸrWįnlŅģuTŊĶß"ôŪŅļWŖååĄŋMõ:ÔīģV˛ôÎĄ‡újú銸m‰øĶˇIENDŽB`‚ pix[306]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment347Ą0Î˙öIDATH‰íÔ1nÅ āßBjÆÜ éIJö¨ŪŪ3š7É22DPÃĢ*U˛ũ–ŒąØ>„ŲFs"ã\eĖ<­Ô隤O7$K  ¤Iöچ.–JRXJŽy˛čŦęWוxRõ ÆųF›Ž’ôÛVųįOž…Ũ×`œŧ8ēŋ -ēļí‰Ūyu4˜ZgîJE}ŅōBųÕø ŅwāŲPˆ@Wt%_ŗŽuh°ueSeÅí¯rę?–Ēģs,ēr~ˆõĒĢĶĐŦkŽz=ĶS3ĒŊĮ.W×ģė‡ŅĄ(OԛHŘ*ŋy'wšÍįOÂK/ŊôTũsåŒā [¤IENDŽB`‚ pix[307]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment351QHZ‹öIDATH‰íÔ1nÅ āßBjÆÜ éIJö¨ŪŪ3š7É22DPÃĢ*U˛ũ–ŒąØ>„ŲFs"ã\eĖ<­Ô隤O7$K  ¤Iöچ.–JRXJŽy˛čŦęWוxRõ ÆųF›Ž’ôÛVųįOž…Ũ×`œŧ8ēŋ -ēļí‰Ūyu4˜ZgîJE}ŅōBųÕø ŅwāŲPˆ@Wt%_ŗŽuh°ueSeÅí¯rę?–Ēģs,ēr~ˆõĒĢĶĐŦkŽz=ĶS3ĒŊĮ.W×ģė‡ŅĄ(OԛHŘ*ŋy'wšÍįOÂK/ŊôTũsåŒā [¤IENDŽB`‚ pix[308]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment3481Ķn IDATH‰íÔ1J1ā?<0š)ŧ€v{ā 6af^aí"öē`3`Č8‹āL„Į+,6íŗŗ™œ„ŗčûHŋėņ‡æAå‰ĩž•ŽbĮŦębE$LĒ&„ŠiEhEǎu.7–Æę¸´ƒĒ˛žŗŠķ ķb*‹æîT=~ev'iH\aĒLGnÃueHĸ}ģ(Se@ŅŌ_,-ĸ—ve_éÂęšŪ‰zKŸČŠ6]ųSģčB>wuFjX(äŽ&§š5d GR3Ųp–5‰m@Ėi[õģ’ē˛íÂdŠä™Œ-“LŽāfl¨Éŋ^ëÚnˇG@=gz‘vŨ•Ÿ˙eWģž¨_ądĒ íG/ŦIENDŽB`‚ pix[309]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment352ČA 1 IDATH‰íÔ1J1ā?<0š)ŧ€v{ā 6af^aí"öē`3`Č8‹āL„Į+,6íŗŗ™œ„ŗčûHŋėņ‡æAå‰ĩž•ŽbĮŦębE$LĒ&„ŠiEhEǎu.7–Æę¸´ƒĒ˛žŗŠķ ķb*‹æîT=~ev'iH\aĒLGnÃueHĸ}ģ(Se@ŅŌ_,-ĸ—ve_éÂęšŪ‰zKŸČŠ6]ųSģčB>wuFjX(äŽ&§š5d GR3Ųp–5‰m@Ėi[õģ’ē˛íÂdŠä™Œ-“LŽāfl¨Éŋ^ëÚnˇG@=gz‘vŨ•Ÿ˙eWģž¨_ądĒ íG/ŦIENDŽB`‚ pix[310]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment349Fˆãø×IDATH‰íŌą Â0Đŗ\\é’&R˛ ‘Ž1X%Ā"–Xāč\˜—Đ áoDKŽžtļîŌĘé鷚힎Hj1Ö Ļt(j?kŽiČÔU4Q‹ĩK€ļBŠĩu ƒ¨ TŊWÔÕôbz6õEÆéÛeĩF T¨S HÃmŧŌĒŦŽ{ĶrFiĮ’Ą>„k¨éčĒJ¡-Ö5_?"%ŸËۘ•|‚°ęŦŒÕ2 (_ëd%ũhœÚÎånøŠ<¯)ŸúūÆĸ‹.ēčõ ęf¤ķ;#xąIENDŽB`‚ pix[311]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment353ŋF;§×IDATH‰íŌą Â0Đŗ\\é’&R˛ ‘Ž1X%Ā"–Xāč\˜—Đ áoDKŽžtļîŌĘé鷚힎Hj1Ö Ļt(j?kŽiČÔU4Q‹ĩK€ļBŠĩu ƒ¨ TŊWÔÕôbz6õEÆéÛeĩF T¨S HÃmŧŌĒŦŽ{ĶrFiĮ’Ą>„k¨éčĒJ¡-Ö5_?"%ŸËۘ•|‚°ęŦŒÕ2 (_ëd%ũhœÚÎånøŠ<¯)ŸúūÆĸ‹.ēčõ ęf¤ķ;#xąIENDŽB`‚ pix[312]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment350&Oj IDATH‰íĶKj1 P ŧĢā¤ÄWęŽŨyB–@/âŨ,ëîT0V뙐•ŧ+-4ÂĢyŒŦĪ đ &ø9­Ŗ_ą§|C@‡Ž2D\3”S$H$ks 3%K¤@.ņ+FxJ͸ęr!ĪQÚ ™šĒ ĨBŧ×|[.qĐoĸ™[ ?PTĩ÷Õ)úúļ9ūĄûų™&[Ģöļ v•ÁÖå ]m Į‘meČũĒfHe—d[_ ąsW)¨žŲ*-N~š]Փ’­3­ôé(Ž =‘GA™­4Ԉlžhčl€„c 59š5œžŌ âUĄ7sƒxŊĄåĢŅÖī—áÉēéĻ›núŋõ NÚÍdn‡`IENDŽB`‚ pix[315]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment355V%ž’ũIDATH‰íĶ1nÃ0 @ <ęø…ū@_É3ēIE†>Ŗ_ą§|C@‡Ž2D\3”S$H$ks 3%K¤@.ņ+FxJ͸ęr!ĪQÚ ™šĒ ĨBŧ×|[.qĐoĸ™[ ?PTĩ÷Õ)úúļ9ūĄûų™&[Ģöļ v•ÁÖå ]m Į‘meČũĒfHe—d[_ ąsW)¨žŲ*-N~š]Փ’­3­ôé(Ž =‘GA™­4Ԉlžhčl€„c 59š5œžŌ âUĄ7sƒxŊĄåĢŅÖī—áÉēéĻ›núŋõ NÚÍdn‡`IENDŽB`‚ pix[316]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment352ČA 1÷IDATH‰íŌ1nÃ0 P:Ē7`nÂĢôŗIFÖʀ‡\ƒB†ŦęÆA0+ģȐ€T;e2' (~‚>T|¸%ĐNũOŠŖ¤€ļ~QZ ˜:ņx75mZ;:¨¯‘CkÛSÍë§ėŽFÖk̓­įŧé§­—YįäĒŽë—…mŗ*Ž.'@O[|ÂĖhëąWOČ5äbĢæŽŽĒ 6}zųûŽoĢÚ)\*Î5ÜøÍÔs MSÁQÂÆf'X†‚éØU@Oá@ž*mKkwkFQ‹ģuÜ^u´ IÚ$ŠoĨíäĨđ[B=ĩj×]wŨõĨúķÄČ ™Q…IENDŽB`‚ pix[317]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment356Ī,Ī(÷IDATH‰íŌ1nÃ0 P:Ē7`nÂĢôŗIFÖʀ‡\ƒB†ŦęÆA0+ģȐ€T;e2' (~‚>T|¸%ĐNũOŠŖ¤€ļ~QZ ˜:ņx75mZ;:¨¯‘CkÛSÍë§ėŽFÖk̓­įŧé§­—YįäĒŽë—…mŗ*Ž.'@O[|ÂĖhëąWOČ5äbĢæŽŽĒ 6}zųûŽoĢÚ)\*Î5ÜøÍÔs MSÁQÂÆf'X†‚éØU@Oá@ž*mKkwkFQ‹ģuÜ^u´ IÚ$ŠoĨíäĨđ[B=ĩj×]wŨõĨúķÄČ ™Q…IENDŽB`‚ pix[318]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment353ŋF;§ôIDATH‰íÔ;nÃ0 āßĐ QGĐEŠčf‘ s%mšˇŒÕ YĘh7RC‡.ąĄí# >dƒ'OÁŋjAž+-˝l*ø‰¤*˜&ēpƒūæĄNT¯ āæYŌUuā5˛¤ĢzĢ|gnÖŦocčkĒ2¨ZG€ĒŌ‹”]ŒšԘ†Li¤O’(זWŠĒ~QŪZĒē>¸§;Ĩ­ĢJĸŸ”n=¨{âqt Sõt(ŠÚE#]ĸŽäÚ%Ї­×CՎ:põĐT}ģ—€ĸÎyĮ2Ž%Œ-76cƒ{8VolTæÍûÛØôëû3ėyĻķÜSO=õŊõ ˙ɸ ņ@œIENDŽB`‚ pix[319]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment357¸+˙žôIDATH‰íÔ;nÃ0 āßĐ QGĐEŠčf‘ s%mšˇŒÕ YĘh7RC‡.ąĄí# >dƒ'OÁŋjAž+-˝l*ø‰¤*˜&ēpƒūæĄNT¯ āæYŌUuā5˛¤ĢzĢ|gnÖŦocčkĒ2¨ZG€ĒŌ‹”]ŒšԘ†Li¤O’(זWŠĒ~QŪZĒē>¸§;Ĩ­ĢJĸŸ”n=¨{âqt Sõt(ŠÚE#]ĸŽäÚ%Ї­×CՎ:põĐT}ģ—€ĸÎyĮ2Ž%Œ-76cƒ{8VolTæÍûÛØôëû3ėyĻķÜSO=õŊõ ˙ɸ ņ@œIENDŽB`‚ pix[320]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment354!"Ž"IDATH‰íÔąmD! P# Ō‘ Ø$Œ†˙!ĢüQ~6@ē"Dr †ģkrļ›‹ŽˆBķ‹÷m,€ĶĐ‚ŋ¤ÁRr–6SSwo)DYßĪZdÅųíŌļSWîžļũR2S¸č釮E×ĸ>nB“šĒōŧĻKÅY!4đęAžŅUåN.¤ÔSAĒšÆŊȚ¸5YÔ§DIUz>ë.ęhŧo¨Y҃ÕĢēK‘ģáTgiØ(8ĩæ„7-ös`ØtYÕöĘĶÁ–ä)đėzÖ[œę‘ P”õđŧŠŖ°ÉąÎĩ×Ažŋ\cRN]‡™U;ąsFåÛŨ!v”šą&˜æŗP‹ŦÅ?ˆë¯čôXÚīĐģĒú×?ŖoĻf]ŋœŌĢ´FIENDŽB`‚ pix[321]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment358(”â/"IDATH‰íÔąmD! P# Ō‘ Ø$Œ†˙!ĢüQ~6@ē"Dr †ģkrļ›‹ŽˆBķ‹÷m,€ĶĐ‚ŋ¤ÁRr–6SSwo)DYßĪZdÅųíŌļSWîžļũR2S¸č釮E×ĸ>nB“šĒōŧĻKÅY!4đęAžŅUåN.¤ÔSAĒšÆŊȚ¸5YÔ§DIUz>ë.ęhŧo¨Y҃ÕĢēK‘ģáTgiØ(8ĩæ„7-ös`ØtYÕöĘĶÁ–ä)đėzÖ[œę‘ P”õđŧŠŖ°ÉąÎĩ×Ažŋ\cRN]‡™U;ąsFåÛŨ!v”šą&˜æŗP‹ŦÅ?ˆë¯čôXÚīĐģĒú×?ŖoĻf]ŋœŌĢ´FIENDŽB`‚ pix[322]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment355V%ž’÷IDATH‰íĶAjÃ0Đ^hŠ#č(žVWA]æ=Jzå ŨĒúwœngˆKč"Æ`ĐÃŖŅø›0¸=TŗĮĮĄéJ„äV"6uĒī†ŽäÂPcß*¨:á€ūbiũ^ĄQž¯úy{@°ĩyĐx3tyĀëZäPR]UY¤ķ@ŲŦ–&ö…{Ôõ”ų`ë%3 ˇų]OÎH[­\ õy‰eŽ8jZ§ĢžõLŪPG‹lumDKH,­*qEÖ§!ē}ŖŦĪyKŖ¯čēūžXŒ9'‡6o÷ƒ˙î}Ę˙˛ĢûtijVūÚĶÕSŸúWúšCīŨ÷ĻŊÕí%-îIENDŽB`‚ pix[323]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment359_“Ōš÷IDATH‰íĶAjÃ0Đ^hŠ#č(žVWA]æ=Jzå ŨĒúwœngˆKč"Æ`ĐÃŖŅø›0¸=TŗĮĮĄéJ„äV"6uĒī†ŽäÂPcß*¨:á€ūbiũ^ĄQž¯úy{@°ĩyĐx3tyĀëZäPR]UY¤ķ@ŲŦ–&ö…{Ôõ”ų`ë%3 ˇų]OÎH[­\ õy‰eŽ8jZ§ĢžõLŪPG‹lumDKH,­*qEÖ§!ē}ŖŦĪyKŖ¯čēūžXŒ9'‡6o÷ƒ˙î}Ę˙˛ĢûtijVūÚĶÕSŸúWúšCīŨ÷ĻŊÕí%-îIENDŽB`‚ pix[324]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment356Ī,Ī( IDATH‰íÔ;NÄ0āßÉŨæ+\ŌrĀ7[Ĩā\Ŏ`}B¤(Ãx „ä#­ŅÄrĒΝ{괄‹čģŦK¤ō@ŗ•5ƒ˛Ą"ėQ•ŋdxLŦ–Rö5EWGfd5”†ž>̞˛­ú¤ė;ÂŗŽ™#úhõ >ŨԘ"ŅgĢ+3ĸ¸ō*LŠÎˆŋhZžg“Ã¨ä™˜ŠˇJލ„×ĒNQOåæ< ŲQŲŲŠ}XŦĢÉW>ī”š pí°×•Û}Wmã];ā`á= ^„¨õMžzĩ>uîĘ –ŠĢÕ$*ˇÅ“Ēīú4ˇũ¨îĩ=ÔĨū›nēéKW˙tĒ?Ōãųsŋw Ŧ2*z/€IENDŽB`‚ pix[325]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment360 b9Ū IDATH‰íÔ;NÄ0āßÉŨæ+\ŌrĀ7[Ĩā\Ŏ`}B¤(Ãx „ä#­ŅÄrĒΝ{괄‹čģŦK¤ō@ŗ•5ƒ˛Ą"ėQ•ŋdxLŦ–Rö5EWGfd5”†ž>̞˛­ú¤ė;ÂŗŽ™#úhõ >ŨԘ"ŅgĢ+3ĸ¸ō*LŠÎˆŋhZžg“Ã¨ä™˜ŠˇJލ„×ĒNQOåæ< ŲQŲŲŠ}XŦĢÉW>ī”š pí°×•Û}Wmã];ā`á= ^„¨õMžzĩ>uîĘ –ŠĢÕ$*ˇÅ“Ēīú4ˇũ¨îĩ=ÔĨū›nēéKW˙tĒ?Ōãųsŋw Ŧ2*z/€IENDŽB`‚ pix[326]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment357¸+˙žIDATH‰íÔ1ND!`‚’ š†…‘‹™đ^,<–˜-lĖ^aĮ˜ØJbŗ&„Œâ&ĖL§ÕŖ ų’a?ŖPX‹úW­QŌl0_FN“BPŦ.]ąZUS`x5Ŋ>ĢŽi¤Õ x\!zfqīŅfZo’Ū܇ę}õøÔՓ “­îČ¨Æ¤Yũē‡I3¯×|Åé3Ä]WGę Däu÷­dåjēž3Z „{¸˜õСŖIÁÃõ|“?-´ļl´âvRēčޚę*FuOcRãõË)ˇÔ--xŒ.ļįų h}lŲĻ#Ī%ÎįJš†Öņá÷ŊĪēŠj$-'ú1ˇl%MNšWÉK ĖTkĶM7ũsũ!Åîn};^IENDŽB`‚ pix[327]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment361ze HIDATH‰íÔ1ND!`‚’ š†…‘‹™đ^,<–˜-lĖ^aĮ˜ØJbŗ&„Œâ&ĖL§ÕŖ ų’a?ŖPX‹úW­QŌl0_FN“BPŦ.]ąZUS`x5Ŋ>ĢŽi¤Õ x\!zfqīŅfZo’Ū܇ę}õøÔՓ “­îČ¨Æ¤Yũē‡I3¯×|Åé3Ä]WGę Däu÷­dåjēž3Z „{¸˜õСŖIÁÃõ|“?-´ļl´âvRēčޚę*FuOcRãõË)ˇÔ--xŒ.ļįų h}lŲĻ#Ī%ÎįJš†Öņá÷ŊĪēŠj$-'ú1ˇl%MNšWÉK ĖTkĶM7ũsũ!Åîn};^IENDŽB`‚ pix[328]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment358(”â/IDATH‰íÔŊmÄ0 ` RmŠ Z! ˛B˛E ã¨Ņx›(Č*UVčûIp6Éî:ģ`† >?ēq%xŧļ`iö–&SÁÜY:ŪŸÎƒĨÍYZ…Cũką5XšYŗĸ-æČ7QÔ >cŸ7\´°~D~GÔ ž TXĪ|Ķ@āË4* \>ŽĶŧ)Ō“Ë¨kt¤j' “ŦŸ–öS§ÎēnĀU.ēéĮEgžM§CRvæ„-}ž×ų~įÃYŖrĒÉS((5ˇ¨6īĸjßŦGUék¤i¤wųŅ›+“#/wƒ‹Q.ŋję9ō"ˇŽ•Ŗ.JcšŽ3`…(jáဠPÔļŦ¸ũ9\ŗú9¯'E•k×]w}¸ū7ņˇZĄŅŊIENDŽB`‚ pix[329]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment362ãlXōIDATH‰íÔŊmÄ0 ` RmŠ Z! ˛B˛E ã¨Ņx›(Č*UVčûIp6Éî:ģ`† >?ēq%xŧļ`iö–&SÁÜY:ŪŸÎƒĨÍYZ…Cũką5XšYŗĸ-æČ7QÔ >cŸ7\´°~D~GÔ ž TXĪ|Ķ@āË4* \>ŽĶŧ)Ō“Ë¨kt¤j' “ŦŸ–öS§ÎēnĀU.ēéĮEgžM§CRvæ„-}ž×ų~įÃYŖrĒÉS((5ˇ¨6īĸjßŦGUék¤i¤wųŅ›+“#/wƒ‹Q.ŋję9ō"ˇŽ•Ŗ.JcšŽ3`…(jáဠPÔļŦ¸ũ9\ŗú9¯'E•k×]w}¸ū7ņˇZĄŅŊIENDŽB`‚ pix[330]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment359_“ŌšéIDATH‰íŌAjC!ā .=‚=Iį*9IÆŌEr‹ô(B.â\ ĩcM….ü-”.˛x"¸øtfŸúbEúw-˛Rúģ*­úVˇŌVšyĨi­Û!s}ÅZŌˇÎ*G’7Ŧ´Š‡jG}‹´Ķ3RŖãB6PMøÖĒ-œ€FV[ĄžE]ã´õ-ŊTwSP9TsĶųĖ НžÎ•ķĻnŽépÄ*9 síũshƒÚË Ō_T}a\šųwÆS5÷˧ĘPãRINE€ęÉ5áä$‚™Œ÷¸ĸL&×ķ}Ī2ŒđôĘ@4Ųu×]Yŋ™ˇĘS"v2ĄIENDŽB`‚ pix[331]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment363”khdéIDATH‰íŌAjC!ā .=‚=Iį*9IÆŌEr‹ô(B.â\ ĩcM….ü-”.˛x"¸øtfŸúbEúw-˛Rúģ*­úVˇŌVšyĨi­Û!s}ÅZŌˇÎ*G’7Ŧ´Š‡jG}‹´Ķ3RŖãB6PMøÖĒ-œ€FV[ĄžE]ã´õ-ŊTwSP9TsĶųĖ НžÎ•ķĻnŽépÄ*9 síũshƒÚË Ō_T}a\šųwÆS5÷˧ĘPãRINE€ęÉ5áä$‚™Œ÷¸ĸL&×ķ}Ī2ŒđôĘ@4Ųu×]Yŋ™ˇĘS"v2ĄIENDŽB`‚ pix[332]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment360 b9ŪIDATH‰íĶŊJ1ā‘Sæō >€É8ČŠÅ•>’ [\é#8‡…mļ ŗ.îæn'S7Åų˜0“ČLôpqŠĶ 9EļÖ˛ †UMTS‹FVÕÔǚSoښô¤o´Pž4vC+‚²ųö@}4%7´…ÍĖĢJk[ĒņN (h}06‹ÁĶ:–ëÍbh-árwĸ‡J?6ę*}žôĨÖãĒŠ›ĩšhŦõՕzOĪoՏjZī9M;9)zŪ8ë9ž¨cõ@ëį¤]ŪĶúå1‹,7ŋåW1Ém2ļÕī”oh i„̓žUƒ—ĶƒNĮÆaICų0á|šÖf\õĒĐ/V‘U{1u˙ōŦ&ũ„PŪå¤į{IENDŽB`‚ pix[333]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment364 ũĮIDATH‰íĶŊJ1ā‘Sæō >€É8ČŠÅ•>’ [\é#8‡…mļ ŗ.îæn'S7Åų˜0“ČLôpqŠĶ 9EļÖ˛ †UMTS‹FVÕÔǚSoښô¤o´Pž4vC+‚²ųö@}4%7´…ÍĖĢJk[ĒņN (h}06‹ÁĶ:–ëÍbh-árwĸ‡J?6ę*}žôĨÖãĒŠ›ĩšhŦõՕzOĪoՏjZī9M;9)zŪ8ë9ž¨cõ@ëį¤]ŪĶúå1‹,7ŋåW1Ém2ļÕī”oh i„̓žUƒ—ĶƒNĮÆaICų0á|šÖf\õĒĐ/V‘U{1u˙ōŦ&ũ„PŪå¤į{IENDŽB`‚ pix[334]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment361ze H IDATH‰íŌKnÄ `G,Xæå"ÕpąĒDĘbz,æŊBå^"•âšQgÔĒļģčC] ˆøpœČ ü¸.ÉR°´›Z'ë^ô––`j´4'SIÕÃt孕” ąļ5u‚ĸäžxVt"p]UĮ/˛Ę÷ē}‡’`’k^}w¨ę#k|ž¨Õw_c E]÷턒âdiĄ-jzĪZ•ĒŽ…uFuÃkQzE'ÍĘZÃ6r)ę +ÉĘí õŋŌhęmĐ´Ä=ŪÍō5Čiũ¤/o+'Šäv¤÷ÚĪœ™ @ÖÅrb?æęĸwkîZŽFe–YUG˛”ūPŸMŋSÕU¯úôėøÃˆâMŠIENDŽB`‚ pix[335]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment365}ÍQ IDATH‰íŌKnÄ `G,Xæå"ÕpąĒDĘbz,æŊBå^"•âšQgÔĒļģčC] ˆøpœČ ü¸.ÉR°´›Z'ë^ô––`j´4'SIÕÃt孕” ąļ5u‚ĸäžxVt"p]UĮ/˛Ę÷ē}‡’`’k^}w¨ę#k|ž¨Õw_c E]÷턒âdiĄ-jzĪZ•ĒŽ…uFuÃkQzE'ÍĘZÃ6r)ę +ÉĘí õŋŌhęmĐ´Ä=ŪÍō5Čiũ¤/o+'Šäv¤÷ÚĪœ™ @ÖÅrb?æęĸwkîZŽFe–YUG˛”ūPŸMŋSÕU¯úôėøÃˆâMŠIENDŽB`‚ pix[336]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment362ãlXō IDATH‰íÔąJ1ā‘Eļœ{1¯`aŸW˛ÔÆėrÅžÖú–9ļ°Ír…#„ü&ĮÂfR(ZČM>H&3„F ôëj[šĨĄ¨Ķt6-ĐŌĢŧ“ĻŠ+™iYRÖÕl䋊ũž†† MÛˇ‹ qpĀëļÔEąĘG]wļĨˇFSOÎi ī&Ü)7ßÃcĮú‚MŠŽkҍ(yņAŅŲĩt°Y%(JœõCŅH}ÖU暏ŅŽ÷R¯ĐÖî€ũĸč{ŅéMQ.`ZäēĒsQ^*cā¤Ž°'Em/ĪfÖô†ãNWâHVSOä Ļǁ,FhšÎV×süD+ūøĸũú ē…Øę2ô§IENDŽB`‚ pix[337]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment366äœë IDATH‰íÔąJ1ā‘Eļœ{1¯`aŸW˛ÔÆėrÅžÖú–9ļ°Ír…#„ü&ĮÂfR(ZČM>H&3„F ôëj[šĨĄ¨Ķt6-ĐŌĢŧ“ĻŠ+™iYRÖÕl䋊ũž†† MÛˇ‹ qpĀëļÔEąĘG]wļĨˇFSOÎi ī&Ü)7ßÃcĮú‚MŠŽkҍ(yņAŅŲĩt°Y%(JœõCŅH}ÖU暏ŅŽ÷R¯ĐÖî€ũĸč{ŅéMQ.`ZäēĒsQ^*cā¤Ž°'Em/ĪfÖô†ãNWâHVSOä Ļǁ,FhšÎV×süD+ūøĸũú ē…Øę2ô§IENDŽB`‚ pix[338]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment363”khdIDATH‰íÔ1n! P#"št›"Z.‰kä0́h‹)sĨ‰rŽ€”"Ö3ĩíf“lŠĐ>Æ|Ļą2üē~šš“Ĩ mÎÚ[ÉēˇFKK˛ô}ZzšAW]ŗ›x¨Ŧ T~VCUpĸp|TÔ÷Úø—Ä“iíž´åEaíX— ëojR”7ŗFT´Sc… kÃF-‚—ĩúCånĖÍ'C’ĩŧėUmQԏōČJEÖ¯úĝå™uÚ*ß;‚ĨĘŲÔ˒˛ĄgM1/~S•Ķޟ@ÔÎũ߃'÷™S7‡šgÎ*Ní3í“Țf<“î0'˙õûoПĢę~:ūdUš^ŽkēΏĖä IENDŽB`‚ pix[339]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment367“Ŧ}IDATH‰íÔ1n! P#"št›"Z.‰kä0́h‹)sĨ‰rŽ€”"Ö3ĩíf“lŠĐ>Æ|Ļą2üē~šš“Ĩ mÎÚ[ÉēˇFKK˛ô}ZzšAW]ŗ›x¨Ŧ T~VCUpĸp|TÔ÷Úø—Ä“iíž´åEaíX— ëojR”7ŗFT´Sc… kÃF-‚—ĩúCånĖÍ'C’ĩŧėUmQԏōČJEÖ¯úĝå™uÚ*ß;‚ĨĘŲÔ˒˛ĄgM1/~S•Ķޟ@ÔÎũ߃'÷™S7‡šgÎ*Ní3í“Țf<“î0'˙õûoПĢę~:ūdUš^ŽkēΏĖä IENDŽB`‚ pix[340]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment364 ũĮIDATH‰íŌ=N1ā‰R¸Aņ ˛|ĘÜ 6ڂk â"KE‰KŽ'c#D‘yKƒ¨ÖšųöĮžy$++Ņ?¨ƒšŖŦė%cMž?´Ņ$ô€´’´ŨĒ“ēŋÅoõŊ–I Ōyčdk!ÉA2ĐLaÁēĐÔüˇkß#Ö ;P%Īd÷™)ōA՞ŅëE88ž7ZŲUĮ_8Žč˞3õmU•Sœ“éėšúģPõF§R ?A-Ú¨ĄŅÔŖį͌´>:xĒvvãžāĖíWŨs´õŖē%@}îęølöš‘ęQ˜`ŖâōÁ-wv6(;mWÉ!ōe”ЉĻ: Šö¸R0U+ī:Į[i˙ēč§­ÍøäŽŦM7Ũôô O”°˛ŲŪøIENDŽB`‚ pix[341]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment368šąėIDATH‰íŌ=N1ā‰R¸Aņ ˛|ĘÜ 6ڂk â"KE‰KŽ'c#D‘yKƒ¨ÖšųöĮžy$++Ņ?¨ƒšŖŦė%cMž?´Ņ$ô€´’´ŨĒ“ēŋÅoõŊ–I Ōyčdk!ÉA2ĐLaÁēĐÔüˇkß#Ö ;P%Īd÷™)ōA՞ŅëE88ž7ZŲUĮ_8Žč˞3õmU•Sœ“éėšúģPõF§R ?A-Ú¨ĄŅÔŖį͌´>:xĒvvãžāĖíWŨs´õŖē%@}îęølöš‘ęQ˜`ŖâōÁ-wv6(;mWÉ!ōe”ЉĻ: Šö¸R0U+ī:Į[i˙ēč§­ÍøäŽŦM7Ũôô O”°˛ŲŪøIENDŽB`‚ pix[342]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment365}ÍQ&IDATH‰íÔąJ1 ā”oũˇž‚ ôąüˇœÜøJ_Ŗāāø\:”Ôܯ =’€ƒâ`8˛|´¤iz0ŒXá÷õÁŌžXڂĨõN×6˛QUGgém°ô %H†Ž-ÍļU+XšY DU‘ŗŦ+āę8ëēĒÂ9Ļ~Å$YŸ‡Ŗ%UYŸ6K/ž5ŒŠĸ’ŗ´îZ´>ŗzîĩĸi×GYËMō=ŒMŅķUŊ˛s‹ž×%ĪÆ‡.Ēn´P”5\ĩ+ękŧgMĸŌŽ][Kž°UsĖuérÍäÖÄŲ`MMî+@EĀūXšŌįė_‚ļļ‡Īlũ å^}Åŋū„ž™úz°6éå ķë&œ°ÚfíķÆuÖC°Î[ĖŠ+f¯^ūÆ}[ߎjŧRLxœ˜IENDŽB`‚ pix[343]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment369tžz&IDATH‰íÔąJ1 ā”oũˇž‚ ôąüˇœÜøJ_Ŗāāø\:”Ôܯ =’€ƒâ`8˛|´¤iz0ŒXá÷õÁŌžXڂĨõN×6˛QUGgém°ô %H†Ž-ÍļU+XšY DU‘ŗŦ+āę8ëēĒÂ9Ļ~Å$YŸ‡Ŗ%UYŸ6K/ž5ŒŠĸ’ŗ´îZ´>ŗzîĩĸi×GYËMō=ŒMŅķUŊ˛s‹ž×%ĪÆ‡.Ēn´P”5\ĩ+ękŧgMĸŌŽ][Kž°UsĖuérÍäÖÄŲ`MMî+@EĀūXšŌįė_‚ļļ‡Īlũ å^}Åŋū„ž™úz°6éå ķë&œ°ÚfíķÆuÖC°Î[ĖŠ+f¯^ūÆ}[ߎjŧRLxœ˜IENDŽB`‚ pix[344]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment366äœë%IDATH‰íÔKnà āA,fÉĒp‘¨žJr‚ĄWAĘĸĮG`WKE¸3ŽĢŧ†Y¤]ÚK>cĖ0)O„?ëQUŖiUu´šÔ4{MSPUÆEĒrɧž6*9K‹bõŦņwCę60ŦWú}§ ôæ6ˆá2úu­•^0iĒj`́f{Šķ;ęŪ5õՕW”:Aģü8ë#˛6G: Ô Ō:kėėķhI}’ÂCš k–bIšŪH7ĐŠųwnܸ<,CáF?õĸN¤åÅe'~yÖíSZ=ĩ lQÖŅå=Š•ĩœĨŗÄsĶžûÛQ›‚ÍFY)̜Ě)įŅ\ō|¯fĸöutäŗŌÅÅũØËÆųH%Ąä˙¸'W]uÕ'õÄúô ą–×ĘIENDŽB`‚ pix[345]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment370yŸ%IDATH‰íÔKnà āA,fÉĒp‘¨žJr‚ĄWAĘĸĮG`WKE¸3ŽĢŧ†Y¤]ÚK>cĖ0)O„?ëQUŖiUu´šÔ4{MSPUÆEĒrɧž6*9K‹bõŦņwCę60ŦWú}§ ôæ6ˆá2úu­•^0iĒj`́f{Šķ;ęŪ5õՕW”:Aģü8ë#˛6G: Ô Ō:kėėķhI}’ÂCš k–bIšŪH7ĐŠųwnܸ<,CáF?õĸN¤åÅe'~yÖíSZ=ĩ lQÖŅå=Š•ĩœĨŗÄsĶžûÛQ›‚ÍFY)̜Ě)įŅ\ō|¯fĸöutäŗŌÅÅũØËÆųH%Ąä˙¸'W]uÕ'õÄúô ą–×ĘIENDŽB`‚ pix[346]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment367“Ŧ}÷IDATH‰íÔ1nC! P#ôũ7ų\ĢCôĄĘkų(nž ūŋĘf;]2D ëCƀm˜ÎĒđmÅSȎWŲՎ^V-™ZÃ$[&Éą?ļ‰Žę­(i› av(ĻBiY×  }Eķ•míųÖũF8/hh‹#š Ũ#"ëJÁĶ ‡&S/Ž\đ‘bG=gXjŌu] e¤5ōjD>ĩoĻB´īĖōšļØTŨÂ€ĒŠ-ʛ¨˙{Tô‘ŠáīxĩŽ& 8ĢŽįTMēŪC¨ŊđOuįÕˇĢWWŖ§=Ũ“§}ņ”Ësæķ[ßúŠú ‚aĒõ„ ß#IENDŽB`‚ pix[347]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment371c~8 ÷IDATH‰íÔ1nC! P#ôũ7ų\ĢCôĄĘkų(nž ūŋĘf;]2D ëCƀm˜ÎĒđmÅSȎWŲՎ^V-™ZÃ$[&Éą?ļ‰Žę­(i› av(ĻBiY×  }Eķ•míųÖũF8/hh‹#š Ũ#"ëJÁĶ ‡&S/Ž\đ‘bG=gXjŌu] e¤5ōjD>ĩoĻB´īĖōšļØTŨÂ€ĒŠ-ʛ¨˙{Tô‘ŠáīxĩŽ& 8ĢŽįTMēŪC¨ŊđOuįÕˇĢWWŖ§=Ũ“§}ņ”Ësæķ[ßúŠú ‚aĒõ„ ß#IENDŽB`‚ pix[348]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment368šąėŠIDATH‰íÔA Â@ Đ_ģp9Ū`."xoā¤SW]öP.ŧFÁ "dč0qǤd˛t!“íK ‘€•jQ´hŅč]U¯jpšFĢneTíUUˇ*Zôo4ė;æNV€ Üڜ6€ÃōŌÆ§†zĄūK*Q#Ē é8kũR)Ú¤†6'Úfte‰¯Ô@üžå39Yųô’Õ›ņI9§ëôt’îDRŌ>DXAŸŽ; ĨÚ;žIENDŽB`‚ pix[349]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment372úwiŗŠIDATH‰íÔA Â@ Đ_ģp9Ū`."xoā¤SW]öP.ŧFÁ "dč0qǤd˛t!“íK ‘€•jQ´hŅč]U¯jpšFĢneTíUUˇ*Zôo4ė;æNV€ Üڜ6€ÃōŌÆ§†zĄūK*Q#Ē é8kũR)Ú¤†6'Úfte‰¯Ô@üžå39Yųô’Õ›ņI9§ëôt’îDRŌ>DXAŸŽ; ĨÚ;žIENDŽB`‚ pix[350]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment369tžz IDATH‰íÔŊJ1đ˙rJa_@6>ÉÍk]u¸ÂŌGrÅÆÎÖ2ā äØÂ„Œŗë!"3Wø…ÅN‘"ŋ23IĀ'"`ŅE?D…“ą Q5ølkštuRĄ­čZK#Ü`ĒOh6^× íK›3éšiŦūzŊV‰^Ēįhčāšxô9ˆC?K.…Ē‘ŅԅÜ× ŊVGíô:ŗĖ'fŌ{Äĩ™”mĻFŅģyĻÃļá{Ž[C× _QƒÜ¨ĮĩŽm4Íŗĸ hĒŗvW8ŗUŽåšĸc÷ĻYīī*é¯Ēģ„KâpĢéMAĄĐS˙Ŧō:éĀļžĮ?úUũ9}ū†ŽŋvĒŋĐWåŧĻß5-‘IENDŽB`‚ pix[351]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment373pY% IDATH‰íÔŊJ1đ˙rJa_@6>ÉÍk]u¸ÂŌGrÅÆÎÖ2ā äØÂ„Œŗë!"3Wø…ÅN‘"ŋ23IĀ'"`ŅE?D…“ą Q5ølkštuRĄ­čZK#Ü`ĒOh6^× íK›3éšiŦūzŊV‰^Ēįhčāšxô9ˆC?K.…Ē‘ŅԅÜ× ŊVGíô:ŗĖ'fŌ{Äĩ™”mĻFŅģyĻÃļá{Ž[C× _QƒÜ¨ĮĩŽm4Íŗĸ hĒŗvW8ŗUŽåšĸc÷ĻYīī*é¯Ēģ„KâpĢéMAĄĐS˙Ŧō:éĀļžĮ?úUũ9}ū†ŽŋvĒŋĐWåŧĻß5-‘IENDŽB`‚ pix[352]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment370yŸōIDATH‰íŌ=j1āYļPŠ#č(›Ŗø$™)}%‹”šÂBŠ´Ûe E/o Ī(Uš°SÁú™7¯>€,Ž~vwڞÔŌ&N'ŦâĒHGu}äMĮękũŅŲ;9ŦÔ÷ėꥧõ8¸zĀ€‹­˜Gā¯Ž–á7 xķ”ADœ­°¨™} f[E´%Ēũ#)ZŠv'1]bNĻžP'D‰ĻžŠŠ ÁžWtWSŸÎ¨]]]n::Šâę66eōtš’ŧWqbQb;Ú 6Š$~ø¯ N›ÂQÖÜUöNúˇ]W­Úu×]˙§jO[WŋūôÍߛJĀŖ ŧIENDŽB`‚ pix[353]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment371c~8 ķIDATH‰íĶ=N1 `Ļpnn’ĢpJŠ•f$ ĘŊŌĖ 8YQĐZÚ&HŅ<ėŨ‚Æ^$Dƒ4)Räˏķĸn´™ūRå!/”6NŽVJ3qŖßčōƒæ™RŖhŅåBS ļ\ČŋŅŧļŌØ×ĶGUøz>á­ +pCuD&ųđĩSA…hīŠå`ęgeŽ–ļ¯wlzĪž΍‡Ņ¯š3FHtã3З>n|™ãé ĒõļHyËx”÷Œ5ؙžŽ:øJIī´ļHŗžYŠ˜>úį.4Š ųZK"zAĄYEÁZ†>S¨ßîēëŽģūũūŪÕá,7uIENDŽB`‚ pix[354]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment372úwiŗúIDATH‰íĶąmD! PŸB…2]…˛BFČpēň˛ˆĨ[€ŌúŽųwJÛJĨųŅ<ÆØĀÎhđįJŅS žvW›{2TGˇ“‚ß:ĩkŠ” +ZʆĘK!C'‚4ŠŽqˆÂĢĨIĻĄiW=Īy铖Ŧr͆ž•ūž°4]ą\ˇÜĢŽÔËu.­šr-Ž29š™Ē­‘GEC7eSSØĩëZãÚû÷Ę9qwõĶÕ rVuÔā(ŪU˙A”˜SÖkŸGĻŊņ!20UwĶičxLŌŧdUĨ&Wkũģ iyēéZ?\ĩÆĄ‡úĪúzõĖ'xQdIENDŽB`‚ pix[355]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment373pY%ßIDATH‰íĶ1Ž! P#¤PrŽąE$.ļ ĨØk%Ją×`4EZĘY ņƒ“Ö&ÅN9Č ›0gÚV+ŲąÖâZŧkZČ"EŨ@×ę '×2‡L6“‘5ÆåėT=ĨĒĸĻÜÜŦŦkz4ŋhš#ZXĒ“õúÍPŊŦäXWYÛÁöŖQ‚Ŧū­QÎ P’RkÖ*g ņŌ„;8$ÍņĨM/L?ēvrŠ& IËɍôčaÔĖë1 OĨž"+ÉÚžû ĢĘcŦˇ×‚A˙ūnŨû˙ØģëŽģîúAŸœđë1§x IENDŽB`‚ pix[356]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment374ˆõIDATH‰íĶ1nÃ0 P4ú< {¤ž Rā!cŽdOí1ôÚĸA%+%ÍŌčP ‹5xyE~‰ ;+Ãh ļ^?(1$SW d ]} ĪŽĘĐbkš<=mwĻ.Ÿ 9gīåŊk(vÍz–Äē0Ų%mēådĒLĒKīë‡6¸édkí Ÿ]åW’¨ųÅŽĒ”Ųī¨b›5:i E‰N’û+Ö^—ũg  ‰s mhōöļX¨¨¯Llž{ũy6e–ĀhVu×)“Ųô0ãøšĘ7ÍÎĩ/í­Î”éČR­ š Ō_O÷Ą‡zč˙ë7ŅģĐĀĀRZIENDŽB`‚ pix[357]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment375düIDATH‰íÔąjÄ0 P<æüŨü[ŨėĐĄŋ•ŌIépĢnķ Ŧ*N‡‚%ĩÜA)ôDĐō0˛‘`' üŽ’¯ųz­žēuŅÕˇôŨÕŗĢ|×oĩõ“|šfIS…SŸEëĄk44 (ĖŽöŌĒÎÉq]cWĐõ!!„ }ĖH#dõŊ5_ZĀTíyKÜæ-•¤ę:3izÄ<-S4uo­Ī c2• cötãësá[Sרë–~ĩ5žø‰ŅRØĩ†ĄƒG]™¨E&ÄŌ o"Ceę¸ä6ÎU‚ČŸsĄöˆw=sEåf–ŽėéÃĻü\[𔆠ũõÅčŪ9˙•?á?ĐÃ'ÁfbŠßĶIENDŽB`‚ pix[358]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment376ũ­ĒæIDATH‰íÔ1n„0P# wŲ„›d”ĨLƒ((s%# Žá(đ*Eϰvvŧ¤œŌĐ1˛Ü<<āNvĒw벧Ŧ{´ÉnmŽŌek€M#“ļ#˜æD@ÃČ4fcŦ‡ŠęÄļ?U=_LõeTõĻŽŋ{*Ģ|sh‘NrÍ7¤ˇFx†ZœäW¨ų=|ņŌTháØ[h*Īđ‰Jˇ¯ž<ų‚•Ą~n nĄeÕjŌsą:Rš3ÕŠrКĢ>¨9DØžŠÁ‹ íÉKję2U+{AßŅ_#˙g8õÔSOũŋŪÕŊĢcøIENDŽB`‚ pix[359]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment377Š<ŅIDATH‰íĶą ! P#¤ĐÄŖÍā”A2Jn”ëŌRR “ "|RŽJKž,KæčSU€áķīúĸā%Í  PŌē€iņŲkmßŧ &_u7ēS›GŸŅŧ k”ŠKî.jöŦYŌÄŊZԈ¨ģɋĩnËmŦTÛn˛Ķ‹Ēŋ (!dw•BōëÆķēF'ęæ×ũPÃiuzcrÅZįō2‡ :ĸę"Ũč&ÖoRC€iIđ)Y)uÅŗ"ĩõuŋŠŽ”ĻN:õoõ ŖĐ„# ū‰IENDŽB`‚ pix[360]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment378ĸ€­IDATH‰íÔ1NÄ0ĐoĨp‡[ DŽĀr%Ę-"<[mɕŌqPQ‰–‡™HÛ͸`)“ÂÍŗe{ū8āÎG¸UˇŅU€)2MĻ6Q Œdj…NhˆŽ†d\$ŖŖCIË ÖÕTŖęŊŖéĸúā菝}Fļ´=ƚ¨8Ęu¨)”ŲҤVŽŽĸQÔ<“Ž­ÕQKĄĒ]+>/s"Wߗ͏pĩdVÍf{ėúĸ:™ZĻ]WGŖę´>LØR%ÖH›(zúę)BIÔ͈°O%ņAģ:›7’€ڝQAjÚĖ^ˇgÖgōf*K8dÄ×÷ûaã?ü=ôĐ?éOWŋģēuĩtĩæžļ”¯û~uõŗ§ŋv¯ŋÜęIENDŽB`‚ pix[361]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment379mĨ°;ęIDATH‰íĶ;Â0 PGFĘČ čM'#A\ ß!lĒ1ڝĘÖLQ^ę֟‚ŦŦ›j+ ʀÉÕ…“](zim\[Y{ŅøŽ¯Ö…ägéĢ(ŠEΞL+}} ÜšÎ.In$sđ^UJ2ųv¨Ē=¨$Y+_˛Ģ V(æ@šhžīŽŽžšä^¤'W…ĪĻėë“OąŽl:e_´ČzaUũgįDĻČnF 4Õsĸ@áĒ āÖjØ\Qŋ CįÍF:šg´C úĢÍiÖ_qU—}ī+Ô>ũ6˙ûģîēëŽ˙ĶĪ<˛ëÛįüˇIENDŽB`‚ pix[362]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment383 čEęęIDATH‰íĶ;Â0 PGFĘČ čM'#A\ ß!lĒ1ڝĘÖLQ^ę֟‚ŦŦ›j+ ʀÉÕ…“](zim\[Y{ŅøŽ¯Ö…ägéĢ(ŠEΞL+}} ÜšÎ.In$sđ^UJ2ųv¨Ē=¨$Y+_˛Ģ V(æ@šhžīŽŽžšä^¤'W…ĪĻėë“OąŽl:e_´ČzaUũgįDĻČnF 4Õsĸ@áĒ āÖjØ\Qŋ CįÍF:šg´C úĢÍiÖ_qU—}ī+Ô>ũ6˙ûģîēëŽ˙ĶĪ<˛ëÛįüˇIENDŽB`‚ pix[363]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment380“áPIDATH‰íĶÁJÄ0ā?æOæęÉ<‚W˛y-BŗėÁ×Ē ėk´O` §-lãnĻ"x聝ĶL“ÄyŖzÆņsUĨüD;ĮC#i°”á%…ĻŽĒĐ替EĢŨS[ÖÚŗFčäkņÆCŠņRûBͨ(žh8ë;j(56‹ēčö›æõéJ—uo}˛ZÔ'Ÿa莎9:‚Ĩ‡ēŌ`ĸļšL/*Tļ}–5Ų.īÕ*:VU×#kûēĶu% Ŗ ĩŗ> 7gŌ—{ؚF?)ę:ÜŦipĪQĒ…ŠvEuâdÍü/dĄg˜I暸bĪzĶ5t䙰“īķL:…9‡U­eĶM7ũS=ũËŽ~Ģ_K­ũ…&kIENDŽB`‚ pix[364]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment384”ŒĐIIDATH‰íĶÁJÄ0ā?æOæęÉ<‚W˛y-BŗėÁ×Ē ėk´O` §-lãnĻ"x聝ĶL“ÄyŖzÆņsUĨüD;ĮC#i°”á%…ĻŽĒĐ替EĢŨS[ÖÚŗFčäkņÆCŠņRûBͨ(žh8ë;j(56‹ēčö›æõéJ—uo}˛ZÔ'Ÿa莎9:‚Ĩ‡ēŌ`ĸļšL/*Tļ}–5Ų.īÕ*:VU×#kûēĶu% Ŗ ĩŗ> 7gŌ—{ؚF?)ę:ÜŦipĪQĒ…ŠvEuâdÍü/dĄg˜I暸bĪzĶ5t䙰“īķL:…9‡U­eĶM7ũS=ũËŽ~Ģ_K­ũ…&kIENDŽB`‚ pix[365]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment381äæ$Æ IDATH‰íÔ1nÃ0 P ʑ7¨zŒEsĨŽK@/Õ­Üz ÁŖ bČ´@RK˛ˆF?Ņ0Š/ƒLV…Ģë–Cũ,Â(ōã+€ÔE\Ēļ!šÚÆoy Ą„š:ÖR1ĐĨ#—Jĸ)|%:Ģøúh*ÉWéy „ÚH øß,Ú(Ÿ•ÍP›Îö f tMu\ũā•´Ŗ@ŋųH[AÎ~rø´Đ×!üL[¤-ķ“Ö~ųē“ékõø…ĻŠÕíh§Úˆž>@Ãē“lšēsh]ĩÔŲųFwčųúyĸ#HŦ-íf/ņũũÛtũ?Ã]īzC:ōLûrĻ túæA3ũ_7Š'$ާ}ãėßIENDŽB`‚ pix[366]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment382}īu|$IDATH‰íÔ1NÅ0 `W‘9BŽÁč+1žĩŠ8ĀģR6Vn@ !E"rpZôŪb›…éuũÔ$ļ˙ēņ%ø ũ4UZäĸdj,Ũ‚ŠhiđĒĢŠÎRōē﨤#˙č›×Õ÷äTMŽÃÔÂYSrŠŨKĮbG>7JĘGĘ”)@z‹¤ãАQTŒ4TŌP¤°˛FqßŲԆ\ÔĻi Ŧ%HŅa-žKVu›¸Ī%*ēW¤ęKânœ4}Í'CûīúŦ(a~bUēQ--1—ĄŋT=⇤!ņčg€EŌúĀqM @•Ãė÷TKûrV‰™Ŋ¨ž8ĖRAû]āé‹÷sWžÅ;vôšbA]‹ø*\T}IU>^†ÍúW˙nz͍īĒ~D¯ˇv)ĀIENDŽB`‚ pix[367]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment383 čEęßIDATH‰íŌ1! Đ Å–O"ÉĀē3ëĩ؛¤ŗĨ“Â!+‹ ‹Ĩa†7LČ'@ƒ•āįÚŦĒ|VAÖ@,ī(ßeEđ+8M3øĢŽéâ0)JО*w ÍՏu/Ē]ēR ĸŪ&ÚXQÖæh+0ŠúœĒCœ$eY3°ō&įœ{Α6U3ŋj–ĪĄ÷ģ(ŗÁVGv¤Ü—¤ÍŊĩ8QŸžž*ŋk¤AV›{Ũe5umЧg•Ō3ļÛp÷ŌyĨ™Ēo7éhŅŲËŅÖääØ:wēŽāXN´V§Š)¨ŠąPb2TR /ô@mz %SK˜ ÍÅč\°Ąų…v'ĘÁ-úĻĪs~wLƒŽĨÍä2ŌZ—iĮKœĒŌ"Ō’bũ_š¤l#ƒŠWčĄÖÚu×]wũŗ~`įŧâ?“U!IENDŽB`‚ pix[370]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment388:œbIDATH‰íĶ;nÃ0 `´•7(ĸkeĒe8@Ž%Ÿ$î ÔM!VÎĢ1J:čĐ͂ƒLH2áõkSg‘LM$ MØ^”#Tp^ČĐåq ´ŽĀā‡ŠŅPĪ40Fĩ3^õžĢĪĩŌUû[iZéG`ŸtTU4­Ü3*>Чg•Ō3ļÛp÷ŌyĨ™Ēo7éhŅŲËŅÖääØ:wēŽāXN´V§Š)¨ŠąPb2TR /ô@mz %SK˜ ÍÅč\°Ąų…v'ĘÁ-úĻĪs~wLƒŽĨÍä2ŌZ—iĮKœĒŌ"Ō’bũ_š¤l#ƒŠWčĄÖÚu×]wũŗ~`įŧâ?“U!IENDŽB`‚ pix[371]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment385ã‹āßIIDATH‰åÔąNÃ0`G<ö ÁæWáŲÜ*/Äk0:ęÂĀC¸b`uÅPKwMIh}g‰üC–/į8öŲ |–ŠTUw“ÂKš™õ$QŲ¤D Ęå$õŖļĸú+›´¤ÎG•¤Đ'ŧÔ;€~+ԍX?‘byĄ˙dũLÚĨļЁ7ôŨ.- MT¯aftKõ ‚w&™BiCĸrąķPęn¯VPJ<ˇžĸ×m?XķČë[j;Ô[^5ŸÍjOUįvŌ|ŦzÔ{Vs3j’uUG‹ĒyHWácܑ*E›Û‡r(Kė¨ ë/yõԍؓ‚6Ô´)ō \m^1QĶzJ:X|CÔ}}ŲΟ?_UΜ”9Kū ŌTU8ŨcđŽĢhŦjXTU¸s# ÷ՔŋĸēĒÛšÕ˙Ņ×_9ĢoÔw,ÕšÍ_8ÆIENDŽB`‚ pix[372]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment389ę=ŦôIIDATH‰åÔąNÃ0`G<ö ÁæWáŲÜ*/Äk0:ęÂĀC¸b`uÅPKwMIh}g‰üC–/į8öŲ |–ŠTUw“ÂKš™õ$QŲ¤D Ęå$õŖļĸú+›´¤ÎG•¤Đ'ŧÔ;€~+ԍX?‘byĄ˙dũLÚĨļЁ7ôŨ.- MT¯aftKõ ‚w&™BiCĸrąķPęn¯VPJ<ˇžĸ×m?XķČë[j;Ô[^5ŸÍjOUįvŌ|ŦzÔ{Vs3j’uUG‹ĒyHWácܑ*E›Û‡r(Kė¨ ë/yõԍؓ‚6Ô´)ō \m^1QĶzJ:X|CÔ}}ŲΟ?_UΜ”9Kū ŌTU8ŨcđŽĢhŦjXTU¸s# ÷ՔŋĸēĒÛšÕ˙Ņ×_9ĢoÔw,ÕšÍ_8ÆIENDŽB`‚ pix[373]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment386z‚ąeIDATH‰íÔ1nÃ0 @´q_ũÄĘSú’ČFũ’Š}FÜpä`XĨÜ PRž‚,æ$ā$ĸ(AŽDw×Å:—7†Ļ ‚¨j‚°´y‚ jQæxC#5y ÖŌ 2 E#˛ĄM~§ŗĨø!ÛvŽ•rˆŽŸšCCߊ-ŊŒ5]Pôā¤"šÎ’?YJpvļNĢĸĨ/ŨĒzV_tt|°4˙Ē^É å­ĩÔ"{UųM}å é":’Ļhhč“Oũ,ŠĨ]“ņā$]įÉŌ&ķs˜•”×—"—Ŗ%üŖ$ĢČÔuÕ{Ŗ*ūiĒęPUĨãŽĒ~8WUúâfg#vŨu×ë7)Ržu{vāIENDŽB`‚ pix[374]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment387 …ķĐIDATH‰íŌą ! PN”^ Ŗ0šītKdPqĒ´”‡KÚ|QšHį‚‚§–l§F­îĮēzC‡[tD¤}j%m jö*u~‘zuŌáÂjĸAĸëgU„‘S{lTĄV˛TüÔԀfSˇ­Åš*ĐŊОbe5­-­ņ­i‚ĩLåuΗAļÅ}PfÔķÅĢĪ,l]˜÷œ ¤" T¯úÕ¯S}›ęyĒcÁVî ÂR4ãLĶTŗŸŠwŊ1ũžÉĒîúĪÚŧĒn)Ë~˛qáaIENDŽB`‚ pix[376]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment389ę=Ŧô IDATH‰íĶAJÅ0ā”€ŲˆŲē››´Wņ ¤¯áQœŽ\z…ė\ZpS!d^’‡ōŠ“Q\5‹æk“IøkXÁüŠ.ššV"ƒńežzßF_ߑu`r}ĩėy÷īšc;×dõŲuō‰Ž!û€ÆËzÉŪ‚ŦšhÄ­ŖÉiēÚ×Ξ4l°NQ>‡ĨŠ|}u†-Ą˜?”ęØI_Ųú#tRĮžã–ĐŠúVډH kņüččō Uĩšf§iōšŽĒ†IUÔôŗ(ëģĒ|衇ū—žl_ÃąXlˇöIENDŽB`‚ pix[377]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment390Šú% IDATH‰íĶŊNÄ0 pW2–‘ ŋO@x,&ÔáF^)§y… XƒX"/&=$>T; ˆŠ˙1?Ųq,¸ 'æ7Y˅ã#—u›ŗ°Ĩ̊šf`‚AT6ų†ēkšĻŧĪ6ß*睊)ČSMO¤ę<ķHøĒ(ĪÜWŠîØ>kjjípP´@i(]ß]ķŨMÕIŅcž2dfmnjŋĶá)ZQ_>4ČڟõŅ÷ĸv w4xÕ$sÕNQ;fÔÕM ĩ΃ĸžã|‰/ŋ(˜e!Ŧlƒęqļš.ŠĒėjIjĢãčZēΧFŋôĄŠĢ=}×bZJĢŋûCmķ^1›nēé˙芊¤é;Ž0Í ˇ5NIENDŽB`‚ pix[378]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment391ũũ‡÷IDATH‰íŌąm! `¤wMF`‡ÔQŧVŠHpŧ•n”Û ”.,Œ^iSDJņ¤sƒÄČ2?Čĸ*ü‹ö˛Đh)Cœh+AĀ|YĩæĄfWǐ|6glŨúKdHŽ&ž Íļ~dʁLEĘ;g[™°2Ú*TÚBOT}G[¤ĒĶļ´nSíY „†‡ĢQõûf˙‘ܧfGeWEOįŨb+Õ"vrŽôÄ@žĒõkĄHĒŲÕųø Čéšię€ĐždЃ^b“Āîũ f†nĻöą-{wō<+Ę.Žö8GiŠmûģžiy7¯ôQ—^zéë/,˛´p/õzÄIENDŽB`‚ pix[379]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment392dôD=-IDATH‰íÔAjÅ PŅģz¯Đ$7ûINVË?Āŋ‚ĐÅ_v ‹ÎB´ū~g†ļŋ….*GQa,ęG&Iƒ¨JŌ,*j)+pĸzIc?mŖaūŽ>ī_=nÔ%leuJŽËŨtQ˜ĸ‰ā]ፋR}ZûŸ/Zh­+4zRËąuę7zĶsą8šdi}õ”-ŦÚėđŪ$CjÖŲ%VQU8…‡ƒKw…QPĩĀ`Ģr+NJŽ×Ņņę6ÕHžBļ0ZI' ~EĪčlŖ_éîÎfŗøĀԕ‰õå#qƒė5YĢÎGĻƒ.IMÄFî§`ˇūėSžö ô)5O)ŧꓨÄb?”¨ÖFĄ¯‹F#q 6ą^ˊ˙ú}ŊAßD=ߐÕôņé;‰žž+åŦĐIENDŽB`‚ pix[380]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment393ķtĢ˙IDATH‰íŌŊJ1āRL™ÖBĖ›x_LHÁy,g°÷œe_ `“…Ë^ŗi,Ėš…?`ąâã„üRcdúU=ũ™ ĻN}e ^ W"¨9"­mg ë™&ŦQT!–¸žÜXRå—ŖNã_­ŧ5Œĩ´ënGē6]ĄæĐô]"PßT+PęZxŦËÜ5^Í{ĶũSų‹Ļ]QļpN‡ąĘŗkĒÛX w}ëMŊs•I ˇžŪcŊņ—ĘÍāT䅜ŌÖēĻ 6ÖÍg Bą=ĘöT}kĶizÉûž|Ke˛´KWSs´”leK_ÕRŊęUGz2ĩūD“ĨbfõŋëŋŌQ§@ŦÚIENDŽB`‚ pix[381]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment394—áIDATH‰íÔAjÄ0 P ^xWß`<)čJíž`=@Žäî sÁK/‚UÛĶi"šPf™,LČ Ž¤ <š"YE}×Ŗ%QĢÍĮĄVŌÕĖ´˜Œ3%4¤kÂZU+Äö×!€—uEą#čŗn›I-'LJžũ9aŲ–|s+V÷Ļü—ĻŠF T>\žĩfZ„f5m¸Ķˆ3Ŋˆø¨sr×]wũ¯~ΜŗŖ—XÕIENDŽB`‚ pix[382]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment395úŅž(IDATH‰íÔ1nÅ PŖ tŖ7ā ˙•¸Ö*AôĐ+ŅŠc¯@ÕĄ+ŌJõQ\Ã¯Ō 6ũę+‘"=Œ€Ø ņIo€˙éy¨AĪi¤ėΝ_†ĒŸx `+ø ĸfp4@P—Áp‚úÔŌ-¯Ņ§“Ēaõô†ņŅĪŠŖÅÔû‘†îoęWĶYU×ôa¨­ÁëēyԞ’č:ZLu´hFxMWGōāT.Ą\m}_ķÍĐ |¸dМ ĀãÎģĸA}ī'frMeÅ丐­ŌÕT.{Š–ļôŠMSKŋ†ÚuꊧžĒčę“üŠ$´IENDŽB`‚ pix[388]: xres = 0, yres = 0 ‰PNG  IHDRG#îŽ*ū pHYsb&2 tEXtComment407Ā~ËIDAT•EĐAjÃ0ПT›âlŗ(özc_Ĩ ‘Œ/ĻŖŧčVĨŒĻb…Ėęņų‹™rŌŦ¸Á†‚š\ÅšĐ(;\nę¤ŠĖ’LAŠ_›˛_ˇđFšė—­PpÉ/?õũPPĒžôņĐŪa˙tŅÔ?U¨ŅäsŌ4QįāĶ„|•dē!ŽŌX‘ŽTԅ˛lŅĩ"ßŗ|Q84œė^ęԟ4LÜHĶwHø“Q 'œw–fŊW TôĒJũęSÛĄęôĪôāŽĻ‰Y5ƒIENDŽB`‚ pix[389]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment408PŦīIDATH‰íÔ1NÄ0Đīĩ„ÄDĸĄ@É8"WڒbEĖ 8ž –8)SXėŦ„™ņ‚ŌPŦĢČĪcΌė€WããëËc­ãPĶôCSĮázŊlŅwVܤLN†Ŋa`uDĻču}:Qc <蚞ZE’õĒzLZVEã}U´za˛ļPzŒ;˜ĒZQįjėŧ+Ú*Yc[Ĩĸ´Ãžâ­“{•lŅōu%I'‹;Š QG‹†"4PTŪ9ë%…ÆAUį÷ēĘŊĘzuJ'EËËÄōãŦgũú˛Aĩ—rŨ†Ŧ~Ĩ¯tÚiƒž8÷íú å|LF;ŠIENDŽB`‚ pix[390]: xres = 0, yres = 0 ‰PNG  IHDRH)ž>R pHYsb&2 tEXtComment409'Ģ0yąIDAT•uĐ1Ã0ĐoeČčĩŠ’Ĩ‰jz3ÅGČčÁ ܤęô$ œ4Aĸė˜M Tģâ†Qk¨ĻĄaÆæĒ SAĐėš\E5ŖÜFSNČ÷AEĒe9k¸ąO ?\ûŸ qâ+1\Íd{MĀč FNĢ S`¸„ÜU´õTéōCƒÍëĮC í w3Ey‰˜6{”´ņPUU2mĒá'új?%H§ä˙°Ģ´čũüIENDŽB`‚ pix[391]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4110k‰ ÎIDATH‰íÔ1 1Đ,ļô{”x27āÁŒx¯B°‰X˜"dŒ !lļÜ)BāÁ™dQÂafÅ$Ē6Ķ×›P׉čX)#,ĶđWxĸ،ASĢi°ZæĻėT.ØÄÕ7=s­}ž=4-DM3Ņ]Ķ+×ÄëÕÕ4uŦWNŅŦšf`Åo!&bë1pĩĒŽĢU#CzŋIĶ­¨vŖ˜šĸ̞VN%÷g°ĒČŊ‡ëCČü6}Rũnf˙7]tŅE5}žuÎ-IENDŽB`‚ pix[392]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4110k‰ ÎIDATH‰íÔ1 1Đ,ļô{”x27āÁŒx¯B°‰X˜"dŒ !lļÜ)BāÁ™dQÂafÅ$Ē6Ķ×›P׉čX)#,ĶđWxĸ،ASĢi°ZæĻėT.ØÄÕ7=s­}ž=4-DM3Ņ]Ķ+×ÄëÕÕ4uŦWNŅŦšf`Åo!&bë1pĩĒŽĢU#CzŋIĶ­¨vŖ˜šĸ̞VN%÷g°ĒČŊ‡ëCČü6}Rũnf˙7]tŅE5}žuÎ-IENDŽB`‚ pix[393]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment413Ūeč&ƒIDATH‰íÕANÄ ĐO0a'7°WpéÂL¯å $^Œ‰ ¯ĢŲâƚÚ|haL\*Ũ }…ōįķ)øN“đ¯Dŋ 0•ĒpåĻEŠ2\šŠąR×ŧPG>÷XĄžađšG7ʐ’YEę?ĖĪ/m˜uLzÔ@™ŪåæŲÖpWåģĒ Ëę!•ĢĻ(€+ēŅ1Ũā:GĢ^"ō ŠįhČj‰Ų¨J+œČ´üģjˆí)ëŠfŊ™ƒ’RåUũbėUĨWôŗŌ!) úÖVKũ VĀJ,ņ¤56d¸ZS~'˜ˆƒAæũ”f5AyŠiOÚ°¯lÔËķáŅZYCÜÔcÖÛEŲžzyOxÍQQ-bąã*ã9^¯Žđ#ŽŖ̇CÔ1é˜3øq ŨRĘīkP)P•I¯Ķ[ô9N%PN^§y”ˆSáŊ…ž—'đ”4ĖRUh9ũԃÛhnš›ĒĘp3¤Ģ´ĢŦ­áåmĩķqÕQŅV7ĪÍ¯Õ˛ŨŽ|Ëž0—*ŅHÖûôIENDŽB`‚ pix[394]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment413Ūeč&ƒIDATH‰íÕANÄ ĐO0a'7°WpéÂL¯å $^Œ‰ ¯ĢŲâƚÚ|haL\*Ũ }…ōįķ)øN“đ¯Dŋ 0•ĒpåĻEŠ2\šŠąR×ŧPG>÷XĄžađšG7ʐ’YEę?ĖĪ/m˜uLzÔ@™ŪåæŲÖpWåģĒ Ëę!•ĢĻ(€+ēŅ1Ũā:GĢ^"ō ŠįhČj‰Ų¨J+œČ´üģjˆí)ëŠfŊ™ƒ’RåUũbėUĨWôŗŌ!) úÖVKũ VĀJ,ņ¤56d¸ZS~'˜ˆƒAæũ”f5AyŠiOÚ°¯lÔËķáŅZYCÜÔcÖÛEŲžzyOxÍQQ-bąã*ã9^¯Žđ#ŽŖ̇CÔ1é˜3øq ŨRĘīkP)P•I¯Ķ[ô9N%PN^§y”ˆSáŊ…ž—'đ”4ĖRUh9ũԃÛhnš›ĒĘp3¤Ģ´ĢŦ­áåmĩķqÕQŅV7ĪÍ¯Õ˛ŨŽ|Ëž0—*ŅHÖûôIENDŽB`‚ pix[395]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4157M2IDATH‰cø40ŒĘŽĘŽĘŽĘ7Y{|˛˙h&KĀUāū`ĢQŲA(ûgPēj eNŸūS„ŅIENDŽB`‚ pix[396]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4157M2IDATH‰cø40ŒĘŽĘŽĘŽĘ7Y{|˛˙h&KĀUāū`ĢQŲA(ûgPēj eNŸūS„ŅIENDŽB`‚ pix[397]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment416ŽŠ\IDATH‰cø40PSö0^ŲÆQY$€?ŦūĘŽĘŽĘŽĘŽĘ%ŲxeėņČūcĀ/+Gö?ŲĖũxd?°ã3ų;>W°Ã+[WGļCY[€7eGW°Ã+[WGļCY[€7eGØ*;ŸŒ™ė:™[ä9#['Ņ —ŗŽOøŊRëÜ<í­÷4z*˙ž§ėh[\͞˛ë÷Ļ7ũ?úéęĮę—~é*Ŗn:ĀFIENDŽB`‚ pix[400]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment433ėSФÎIDATH‰íĶą Â@ āœ:ú}ŒķÍrāāč+\|ķ+”ÆÔâv†âØã†ĀG—KȂSh…J¤aí\ÅuH ÉĐDÚs]ûEAîW Šē&SPyVŽôvÔ.ö:ˇĸąĐRdbąŽ5yũ& E”2R&ŅԝĢFú†:qĶčØÄJr…:ėIÎX‰r¨Öļ§ ´ņtĨ(Įę3а2Ī3é3P{/ŅąKvaĘūƒŧÄÕ-“ūé/úˇĒEj›nēéĻëõŒÄD,åIENDŽB`‚ pix[401]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment432›Tē2 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[402]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment434r7 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[403]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment433ėSФIDATH‰íÔąm!ā˙’âJ6+¸LGFņŪŦ ➠–‹”^éQ”ā{ģS$,]cڏŪPcŦ ˛ŠŒjōĪ*BUu9(Y՝ô…ŅmĄl}åqRÍé.æ ŧNRÛ7ĨdtÚŗ: ô~ĒkÎg ķëŦ—k5ŠŌ˛ŨŦąÄ¸ˇ:]H\tÔĨvV(V}ÖåŧĒЀŦō¯ o…~#n¤Û.z(tĖ„wbÖķĩĘKäEí6" ¨ŠĮ >x5Ąī§2)xÅŽĮ–Smđ”sĢÖ×ļ”\R Ļc“Ļ0Ė[˜”˜žĖęÉvėŒ’ŧ\ég¸ë]×Ô¯ĻūŦ”Õ˙jlj¸A?oĐJ%Ė/#īē)¸+1IENDŽB`‚ pix[404]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment4350/‘IDATH‰íÔąm!ā˙’âJ6+¸LGFņŪŦ ➠–‹”^éQ”ā{ģS$,]cڏŪPcŦ ˛ŠŒjōĪ*BUu9(Y՝ô…ŅmĄl}åqRÍé.æ ŧNRÛ7ĨdtÚŗ: ô~ĒkÎg ķëŦ—k5ŠŌ˛ŨŦąÄ¸ˇ:]H\tÔĨvV(V}ÖåŧĒЀŦō¯ o…~#n¤Û.z(tĖ„wbÖķĩĘKäEí6" ¨ŠĮ >x5Ąī§2)xÅŽĮ–Smđ”sĢÖ×ļ”\R Ļc“Ļ0Ė[˜”˜žĖęÉvėŒ’ŧ\ég¸ë]×Ô¯ĻūŦ”Õ˙jlj¸A?oĐJ%Ė/#īē)¸+1IENDŽB`‚ pix[405]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment434r7ōIDATH‰íŅ1nÃ0 Đ¯¨°Š Ņ û"ArĻn‚ŠS;ö:]ô ÕÔ̓ V‚ĶÔÔŅ„&= >Á"üƒŖkä$ Ų4ĸ=QWËĐ5šĻ‹ĸKUĶUÛU×Õ7Uɰ}—CÛt˜øUQkøcâAÖlk žt4šY‹ĢjŗĸėZČkGZŠzđgœ˛ÅyTļĒĘMÅŪMoO˜$͞Įķ#ŧĸ/>ž!ëzÂ薛ĻĀø€žĒ&āä0wÔP4%å õ˙ŖõFK†ŧnjįčķEÖĻkšrP5”ĒßâVÜôZģ+aęŸęĩëŽģî*č/Žĩĸ†rÜIENDŽB`‚ pix[406]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment436œ9~+ōIDATH‰íŅ1nÃ0 Đ¯¨°Š Ņ û"ArĻn‚ŠS;ö:]ô ÕÔ̓ V‚ĶÔÔŅ„&= >Á"üƒŖkä$ Ų4ĸ=QWËĐ5šĻ‹ĸKUĶUÛU×Õ7Uɰ}—CÛt˜øUQkøcâAÖlk žt4šY‹ĢjŗĸėZČkGZŠzđgœ˛ÅyTļĒĘMÅŪMoO˜$͞Įķ#ŧĸ/>ž!ëzÂ薛ĻĀø€žĒ&āä0wÔP4%å õ˙ŖõFK†ŧnjįčķEÖĻkšrP5”ĒßâVÜôZģ+aęŸęĩëŽģî*č/Žĩĸ†rÜIENDŽB`‚ pix[407]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment437ë>NŊôIDATH‰íĶ1nÃ0 P<ęØcdķUz…l Ø>AŽ$#CĮ\†/Ān˜Ĩd#dČf Ōđ‘Ÿheđ&Ŋú:?ŽŗĢ ĘGrUŠ& 4U”‹"C_ÕÁU*Úsã÷{ׁÚPķQ— +ģtųÕ5ŌO\—PķęTÕF×)PÂÍjŌ oĐS¤Š "üŒrHų;ÖSšĨsubܤ[cUéūmŠ& /ˇŠĻ)Ô  3ŊŠÛ‘ikúÃąJēd7Éĸ™qösžĢåė΍TEņ•[ûÁ%´M‚̌3ĐžĒCMŸk×]wŨõeũ jÃl ˆš IENDŽB`‚ pix[408]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment438{S,üIDATH‰íĶ=NÅ0 p—HxyR.€čEžč•߀h8XŽ’#˜-CdãV¨oą [Ŋūũ€Uāߕ1Ōž"Ĩ)Ōž-a.Ŧ‘Zą‡˛{W+öБ}m8fG93`÷ŪVĄvU°øŽN¯ĘöĀ™ÂĻ3aĩõs×ėčEuĄšŽŽX›Ŗ|Ai›.Ļ>ĄTտ̚­ãŠRr¤€´ØšĒü<íoȏ‘Ę<Ņ‹ŖC§3Ņs¤ŨéFį]Ņî$m̏Ǩ6@KIENDŽB`‚ pix[409]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment439 †cēIDATH‰íÔ1jC1 PC=úÎ1ē9Gé1ēɟ š–;eĖTz€ūŌĄĢJÚüüäO–ĐBãł'l ĪŦWĐ>´´' ŧĒP4‚ktĄh9ų# Lu7tôŖz]ŅJ¸~eßU‰pģ™S^‹ĸĒIÔJ’ŽĪ„t'Iēvĸ€œô{ŪëCāŽ­OWēŽûėŲčjwŲWĢĢ•5ĩŠnŗ+NWGhD}CĶAƒŽhz—›Ŧ¨>“EŪŨRhĢŊ˜õŽö*ĨķôDŸG]&*Ooãcˆ(DsŽī#M–ËTķHÉsõ-Åīũr=-â9å ´\įWšé?Ҏ?ŲÕM]ŋĩ}Öúųč+ÉIENDŽB`‚ pix[410]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment440:MŲķIDATH‰íÔą Â0ЋŽ0"”(Yƒ%Ģ0 ĀPlĀ ÁWX>Î@éŸ $Ü>ë|>™tb4ŗö:Ŋiĸ6Q]Vī„ęˆô’Uˆąļ˛:>tWaíÃčŲI .ˆN¨•teęĄĻUV4Ô°^úH=ÔąžP+É5Z? KSî*vN[–Ą|_1UZ ‰ééĄ oiTö@CĮáÄžēΠ°zĶ-ûmųFĻĮ…ķ ŦäŦ>ĐĘō¨Đųēú]ŊäÕ´0Ø )íIENDŽB`‚ pix[411]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment441M}OčIDATH‰íÔ=J1đ )ļ370W°ĶĘŧ“™ˆÅ^kā^#7pĘ’yÉj™˙TZ;„i~0æƒÔˆBŋ­qĻÖڝ*kķkũĸĖ…,­”&>Ö\.kmSÕÉZeÔtę%"Ŋ^ģok­ôøŽuüöcj@Ē;ÔR’úž!åÔĒģÄF/P9ĘÃ3R?´Ũú‰uã¤PûĄwĻC÷v Da´āMnC™,­†J’§e§g]OÎÔB–Ž™Ô f’cuP•“L]oĘЙ+Øßz(#Í3ŋš—l÷w´ÍRwãGãÜĢSO=õ_č Ã˛Į41IENDŽB`‚ pix[412]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment440:MŲÚIDATH‰íĶą Â0Đ W8^ J‰’•()lha<ŠG0‘,›8ĄãΑPĘ|š°ôtÕũƒTˆ† ÔUŒĘüIĢÉĘ‚V#’‘° žå'ucEë ĶC:u-ĒĻõˆé)­2Ŧ6‹*R[ŒũŠFc‹ĄFiZ‡’†EG^/˙ĢĪ ¤NģķAhfÖ7øyöŗBV;Đę zázûā4=Ļ‹ž;ēW‹ö5Ũد2m÷]}PБš"Ļ(ų;šÕ8ĢČJ&ëŊ¨iEšėēëŽģnŦHâŊqŲ _IENDŽB`‚ pix[413]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment442Ô,õÚIDATH‰íĶą Â0Đ W8^ J‰’•()lha<ŠG0‘,›8ĄãΑPĘ|š°ôtÕũƒTˆ† ÔUŒĘüIĢÉĘ‚V#’‘° žå'ucEë ĶC:u-ĒĻõˆé)­2Ŧ6‹*R[ŒũŠFc‹ĄFiZ‡’†EG^/˙ĢĪ ¤NģķAhfÖ7øyöŗBV;Đę zázûā4=Ļ‹ž;ēW‹ö5Ũد2m÷]}PБš"Ļ(ų;šÕ8ĢČJ&ëŊ¨iEšėēëŽģnŦHâŊqŲ _IENDŽB`‚ pix[414]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment443ŖcŊIDATH‰íĶą 1 PKH\™n ēŦÄņ7­’Ž’ˆDAēC ‡kī!įöŲąlÅb$TžŦID'‰žP{¨“¤Ō-k}C3ĐâĒLoj~ŠbŊēn€*SÕtöžHĨéôŊP=d#z¤:`•YÁ&E"Õ~dzMX;/§ îļžP%-Īģoę˙gQ‡Ú^. Öjįë*ŽŦķ‰"SCÚ,BŊŅ“1āžÁ>ׁǭēęĒŦOĮÆĩƒ |ãIENDŽB`‚ pix[415]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment442Ô,õIDATH‰íÔŊjÃ0āģzđf¯Lô&Ņ+e,%$fë#äYR2xė#ÔĨCÆĒS4]Īíz§ęn>4>$Ũ¨&ĐdK:EĪãæXËúâ)UäuH2T˛zĪēToŽđĐIĨũj€ÕRŅŌŦ6°ÕôŨU=}¸đ¨č~Ôt=9Ō´öÔ{”œY÷ČgEÍŦOŦr¯rëé_ŖÜįlvÔāg”gĚėƒQuQõƒPk˛ģÔV—c-Õ§yc.ĸēt = :€…ކUz7ühûmåwīČõŽa›‘6`%ĨĖ‹ĮįŠ*ÅU%,Ē'’FOũ*ŗÎ:ë úVTSŌl˙-Ģ õ<Ēŗj^ÔIENDŽB`‚ pix[416]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment444=v‰ĀIDATH‰íÔŊjÃ0āģzđf¯Lô&Ņ+e,%$fë#äYR2xė#ÔĨCÆĒS4]Īíz§ęn>4>$Ũ¨&ĐdK:EĪãæXËúâ)UäuH2T˛zĪēToŽđĐIĨũj€ÕRŅŌŦ6°ÕôŨU=}¸đ¨č~Ôt=9Ō´öÔ{”œY÷ČgEÍŦOŦr¯rëé_ŖÜįlvÔāg”gĚėƒQuQõƒPk˛ģÔV—c-Õ§yc.ĸēt = :€…ކUz7ühûmåwīČõŽa›‘6`%ĨĖ‹ĮįŠ*ÅU%,Ē'’FOũ*ŗÎ:ë úVTSŌl˙-Ģ õ<Ēŗj^ÔIENDŽB`‚ pix[417]: xres = 0, yres = 0 ‰PNG  IHDRH"ÔųĸÖ pHYsb&2 tEXtComment445JqšVšIDAT•=Đ= Ã0 ā<(CÁkĻöJn’cd(mŽ–Ŗ¤ôîĻ‚ąúė8>$0O‚ÍbfŠl›|`Ø”Ēš"H€CŦÄVRKvb'ŠÛħ”RŊO¸RžČCûĩ'Ôč#Ŗ(uhŠ>…Š>](•Ŋ%`ĻtĶwÕÔ5o•Op_ÜBąnĀđD­áŧ÷úĸ™ânSįŠŪę īf*Ö;ÍI)u9ũ¯ˆį*Ķ*FĒbÅ|Ė?% Š*uƒŋdIENDŽB`‚ pix[418]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment446ĶxčėŅIDATH‰íÔ;Â0 `ƒ‘ÂPЍÄEĒr%Æ:0rŽŌc Qq‚Œĸ§]ķAEōŲ‘ō$™i-ĶۜZ–W ĩgé ;ŦcBR;–;Įˆô‚•fuÃR°\Ķ&-€ęxÅa ´R5Õ*Å´6Ąę›QkŦ'¨nTLĢm”°jĄ‡:D-VŒõéķũ kjŊ*˜™¨Ĩ•%:=PŒû˙+;ZA Fœą@EWwÜvÕGLHk0SųOZƎ4ļ§øÔ^úod͚5ëWúžˇbĻ…X=IENDŽB`‚ pix[419]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment447¤ØzîIDATH‰íĶ1Â0 P[ÚŠ]šjGŽ•$8WÉQē1ÂX¤`“6€ØaaŦ×'[˛ķœ)˙ÕkVũ†o^VjØ `EŊėQÕ~T'÷8)Ēęĸ˛ú¤ĨĸĀ[ ĐČēE>Dí^z|×ũ¤Šõģ7j‰Á(Z'ĩ9U6ĸiTųO•/ R¨Õt…Ą”uč&mŌą +$#ëŎĘVÕĄ˛`DmqXwNîX,ķjT­ĸÖōžUō×üxMŦYVūV8‰×w?bNoRfa\žoEŨÔO/JsƒĒ_cŧĄ7ˇŠzVģŪõŸéÖéä)Œ~įIENDŽB`‚ pix[421]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment449CĮõ}IDATH‰íÔ?jÃ0đOhP6eôæ+äîQz„ŽŲäŖȘ+:tŦŠ)OöĒO-Ą… -?ëņéFnŒ¯cOuĘ6ÁÕu´&Ā5ĸēŠĒŽøÖ;'Ņ9ČL4qĸ=íë;=GŽs™ûĒÎ0R9 U Ģú–&ÜŖžĶōAdē]ĩžy]›˜nWeTŌõwååúvTEu2LáĻ#đÄô“é̍ú`¸JĒ*ĸŪ9@'hĒ;UT}+ĘÎ*ė—ĩdŋĸY´'ęôÔéČ:ģ÷¯áČÎyv“ŧeĻŅå$j‰‹’T%í°TãoöšŸúÔĶkSŋ2sŅX]‹~DŖá$IENDŽB`‚ pix[422]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment450#|˜IDATH‰íĶÍ1āi*8ˆõÂ+ėŅAx-7Ŋ9z%77qp´âRŅt´ĩ˛‹™JˆMo_Ļ3S@Ä2C'….#ēÁyTw=ā>ĸĮQŊÔEDį¨Z7ÔĄFëLāZZ÷0-t& <„ˇÍU 7ŸÔ”UW`LŪ ÂM]iքá[jƒ’'Û šĶĒSÉETæEļô1“…5]Ķž*Õ7}ĘsIël&u_čļĖēŒ>ĐÎUŠ™ĶžČFļ åö¤āuČkë]íų“é9…¤šĻ@+š* õĘU0¨oژ*æ‡bP$‚ ęvQ-—ë2˙Ë´ōã¯ũ=Eõüͨ.ģģ‰Ŧ%›oIENDŽB`‚ pix[423]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment451TL.IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘ’/û§Ÿė{ŧzņĘū‡ČôĩNø†×ė?IENDŽB`‚ pix[424]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment452Í´ãIDATH‰íĶ1 B1 ā<:>G!Wpt{-'ëMŧ‚7đĨā*.JcÔ§&ÅņeėGi›ūŽÔūŦÛOMáĄūM‹įÎëšC_ Õuį |÷ĐĐ×1Čö‘~į™(͞ŅuŽ4â´ļ9˛ōrҞB Ueî‚Ē„ÉÖL×sk ^ÔkJWm-=‹NĒēhģ ë‘0gęŲÖTÕũއģ]›”MíšXŅäâŌTésœęŋSL`i#i'+ąŲÔKûĢļ’ŒÜ›”w•9Ģ*G4TYjŲ×ÔŽAtĐ¯õ0ÆAo›­vIENDŽB`‚ pix[425]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment453ē -"ęIDATH‰íĶAŠB1 ĐHaēėzŲõbũ2˜#MąË9‚ũ'đģ+X~LūI**ÂĪĻ…GŌĐĻ@čā՚?ŧĻ#Ä<õ˛fęNē“•+TŨˆ‹ĸÃ-M ŽÅsĢŊčŋ¨JĒ"„ūaÅĐ/U]Ĩ ’ĸKŒÜXSŊĻßņĶij8÷ËjjYKK÷ĒŽåĮ´ô]ÜēĨ†u”5,ÖŲ`5ÅÁ•†‚×ÕđpZWŠNģ—oŖĢķL‡É?:œ‡!›ē_á‡o’TŨb”ôō+Iú7)rNãZŸČuÖYßJŊãĘWPIENDŽB`‚ pix[426]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment454$m¸IDATH‰íŌ1NÅ0 `?eȘ#„k0•Ŗp ļ10rŽÄĐk8ęĀHĨˇdˆŪ[¤"ņėš)ę'ģVüŦķd25˙_Į=m›Ū‚OZķUgBąô LúxōąŅŌ–h0ՉFUå§ėåL RĢ̌ÄŨšQEĨģĄpbŖļüĄõ ÎĐZP^9Ē:q*ōP;úÁƒĒœ¸E”¤ęČŠ.z›–Ŋ‰ĩčšÉ3 “ąÉĒÄœT•ŧ6í7íJj6ē}ëŧ¯Ę´?jŸC=ôPEŋkÕĮž< IENDŽB`‚ pix[427]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment456ĘcŲ­ãIDATH‰íĶ;Â0 `G‘čF.€šk0TåZ ΕŖp„ŒĒ§ŦūŊą zȐOy؉‰Hô[Ü 6rüöēŋŠĶ5‹zÎPW°ē•‚ĄîP“kų ôéZd~ŲĒMôåրõ°Ũųh¨ŊhڎĸéEúÎ]}jŖžQאn@ë(ĩ‚Zd>ĻeÖ_ŋ˞*/Ö{žžĄÖ‹¨žo9ŅU”(ĒJtŽ éģ+UCÉŌ‰¤Ôđ\[o$_ZĪHēˆåõû¯šB‘Vļ” uĻ›‚^øFī%ŦMÕb×]wũ[ũŪ$¤T"rÁIENDŽB`‚ pix[428]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment457Ŋdé; IDATH‰íĶ1nÃ0 Pē4jíĻŖCå`œž, z€^@.Ā ‹Š2fie+HeH[tˆđ“lúSŒ-üŧrŪ ´A–āčŧ*C6uy‚Ō ˜Ę…`öTīč<ģtļĢŌ—R‘æÔŧĒ>Ą õ{īį Ē…œŦTą:ŲZU!“ķE]9iÔÍY휷Xđ>éWŸ">GO‰#˛­/X>8Ōbë„E8Šŗ7¨6O—€ųākėz°•CÍû_›­aߒŖ `BJēĀÕMŽv’]{=ÕæĸŨÁUõ¸:Ũį;Hj,}ÉQ!Õâ釔žlu¯¸{g`¸ĄûĖ=ąŠĶĸåÆŅØ%V5ŋwQâ[‚§û+ÜÁWhiŲēœ úmÕûYĢÕzå(/lוjIÚEŽž-/°+ļb_%lĪ4&CuúhŠŠŖĶĄk”ŽĨLMuæÆ–9ŸsNūąžūåŠ.zŅ_ëãAšƒk9Ŧ*IENDŽB`‚ pix[433]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment462æ#NwIDATH‰íÔ1ŽÂ0 `[2Ļc'|čõ ‰V Œ\)ˆ‹ä3D 0Ú^`lÖ/–jįwĄg¯õn*ZZMÍŪŌ,MŗĨQƏ* }t5”šĶuķ]s5šŽIjš+6–¨hÄĘĩ‹4ĖŽŽBh =%ëŨā põÁŠâ,ęÅeø¯Aš5ëŠŲĨSH$×b ›ĒוuŌ5zé:†$ šÕaiô–šzĖ”'k Xh@ŅC×ĸøÍõøR”ĩL]'/÷[øŖ¤MŖ¨ŋÂl(ŠJÁĒĨ[Ŧ>žmWTsņK%“­k%Īŧ'$ũ¯ĻkĻnIENDŽB`‚ pix[434]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment463‘$~áIDATH‰åĶ=NÃ@āYļp…|„Ŋ%š G LaÅkq1į$Q¤ĖReŠÁÃQî{  !$Ļũ4ŌüŠ“ČōË:15aĒ2-4wᚘÎ#ĶėL§KՂ÷5ĩUÅcmšokE<ŨIđę ō…Î@—īŒŊķm°°‚ųˇžĨ­Æė^N˛Ļ +xƒ¨ÃEŊŦļü¤U­Ėj[qQŖ-8WŗŅõŠ^me ŦGÜ8Y8á‘d=˛> )ēeu:å{^”ģ3§ĻõzR;×8Ēŗ¨$LúK‹gŨ‰•É"{S˜ßwœÂ¨”œĢI‹’ĢÖ7:žĻœ–ērk[0‚’+đ& ũĄF­BĮß*–Ux×ßT]ĢŽēęĒÖē§Ŋ—)ļžIENDŽB`‚ pix[437]: xres = 0, yres = 0 ‰PNG  IHDRI!Ŋ¯ģF pHYsb&2 tEXtComment474[ÚĩIDAT•eĪ1Â0 @G*&øAx#’ycˇDbā|Ĩ#_(b`MŒJ‘ŨTi%ŧølY– \ĸw$å9l…ä38å +JRR‹ÜáLĪ„´›ģé ĖJŸ'Ļʔ‘¯˜Zá˜*áČ1Nô<ž…ß…~EWøüãCx_踃M€Ģė•‹”–äKe¸rJ- 5Ĩ B[fÃŲ’ánoäųč„%Ži+ųļPBī™0ü ¤ĖûË뮙IENDŽB`‚ pix[438]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment483§So÷IDATH‰íĶ=N!ā‹iŒ´æąK #ëy+p˜¸ ;ˇ2o'ŗJ äzüÉË ĢĄšäK˜ûsœ$˙­9R%¯ož¯ĢSqMl_ Ēb˜ÖŽÉVo ģ9Ųæ"ޝōŖ¤æ_ #=Æž^šĖG™ēÚŽQŗÕLôĶpēn´Mg­Ģ(xŲüˇ…ĸSŧí÷ũŦŠvŽú“ĖOŽÆWõ´ÄYŅč C!jsLTŸGē^|i™ˆŠæČTŽĐÕ{čã@Oų–ęCœ3Éd†zK3YMG3Ų°}_Y&ļÕ“7؜.ßL•ĢŽUwŨu×]˙ǟ‰9ˇ§_WâIENDŽB`‚ pix[439]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment487ʗv IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[440]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment490ĩ3”üIDATH‰íÔ1Ē1ā‘Ûšņ–¯âILÁö]á%ī&ņ)S„ÄŲÁ™ØXXlڏ’aū@mP‡ŧ&]c­ yæuĮkč¨0™‹ Ēč.á?¯^e­zQÍ­ˇ‚φ:T@ŦGNˤ'AķFũÉĩy kڒ:jŪĐŖ ą­ũŨ‘ ͈įQO˛îe gø!EĮ+ŒzD÷Š= 4´7¤ƒ¤4Ô¯$Eš'¨†fā÷9Ž=WW0ŦÖB:üJ9L`pRēX§„ęZ„?ō[¸į˚¸įĖšhĪLKšzRÛŌŸųÍ]tŅoÔ;DöŽÜ˜däœIENDŽB`‚ pix[441]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment494ˆØ÷ IDATH‰íÔ=n!āG(čB‰+¸tą Wō `å‹Ņåá”h7ģxmŠĖŒŌ¸3ÕĮŋæUhĪ՟­KZĩ´r–ÕHšœ¤Ņ‹$ JųĄ‹ŦԅÚ8-zM–ÕŦVA¨ æ%3ÚŽŠÖ„ĻcU‰U“ŠÎŅjĶÅdOę,ęĩĢeTošOœšC§.0ēôšāÔj)meS'é‰S×Īėč}ozf´úC=Ĩe×4qzø´qr)Pš÷7L6ūśZā‹ŠĢ]#<čėoûēŒéŠm nMÍūŧgģęǘä%ņzí8åū…ģŌéŊk!Ēf(USC“—”úš‡ríĨ/}ŠūF*ĸūRüŧDIENDŽB`‚ pix[442]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment496f֖Ą IDATH‰íÔ=n!āG(čB‰+¸tą Wō `å‹Ņåá”h7ģxmŠĖŒŌ¸3ÕĮŋæUhĪ՟­KZĩ´r–ÕHšœ¤Ņ‹$ JųĄ‹ŦԅÚ8-zM–ÕŦVA¨ æ%3ÚŽŠÖ„ĻcU‰U“ŠÎŅjĶÅdOę,ęĩĢeTošOœšC§.0ēôšāÔj)meS'é‰S×Īėč}ozf´úC=Ĩe×4qzø´qr)Pš÷7L6ūśZā‹ŠĢ]#<čėoûēŒéŠm nMÍūŧgģęǘä%ņzí8åū…ģŌéŊk!Ēf(USC“—”úš‡ríĨ/}ŠūF*ĸūRüŧDIENDŽB`‚ pix[443]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment495˙ßĮīIDATH‰íĶ1N!āŗ‰ķ #–¯ã"/îĩ,^/†ņ"xƒ-y‘0kį …ÚšSĐ|a`†<?Ķ[_Ŗá÷ē:Yąˇŗœ9PI€Ŧž2HUPž›Gjρ&ģjZN´YŸx5W]üMŅtŽ>Š\īŽŦécSWHVPŦšÍt;wMVÖK×MŅ뮋¨ņÚēĄjîú}6z„/•§.lõŧ{UxļpoĒ^ā^t=õĀS ¨{—ĻrEņžē2änp&æ•ŊŽeR5įy¤iæ ßĒeŽ´×&h1í“jZ#˜_¨*”=ôĐ˙ŦŸGŋ•_žzÕIENDŽB`‚ pix[444]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment496f֖ĄūIDATH‰íĶ1nC! PW_ [š@_!c†(žÖĸ˙Š:dérĸV=Gøã„ @Zuą=DUĻĪ€Û`ČĘpđPS× jë^x &‡s˛NÔĶ)ĸYũ2Ų~Šúm2^"¯]R5ĸXg ƒåJZôĩéJ¨FĶøJĻM7Uĩh pHYsb&2 tEXtComment500_ĩâęŽIDAT•eĐA ƒ0…á—ĖÎÜĀÜÄÜŦ*.ė˜í@Ttš>Õ\č}_Ú ‰E-ztq/ā(߸"iNŠ Û뀔X“Ú?IENDŽB`‚ pix[447]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment513ß§‚gIDATH‰cø40ĐHö;^ŲįxeßS`ī}ė_\˛ōxeą›üYāĮ'û—ėo²?đšü¯Ģã•=ŽWö˙ˆ‘ũWOžė{Ųįxí(Yœ`T§ėū’ÅīĒQŲQŲá- pfHâãXuÔIENDŽB`‚ pix[448]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment518Hu[™IDATH‰íÔąNÄ0 P[7t €”_¸‘­ü ?҉ætÃũV6–“îĘÄZļHTņšÉ!q,&šĄRõĮNœ#Ā_ëhi6uyVųĻ3ôk™ÄM'é@Š|Ŗ)eä]KäįN×]ŅAרQBŠęęMåĸX[ëŊŗ&ŊĸøDÎŲéZöjŪû†ö„ŧ“cCŊĨwŽčŊŽUÅäO:ŽW××Ôņ҇†RÕs[‘`2uÖõRsOUåvüJŗK@¸Ŧoš—g„qíėĨō)đuP:ĮIžęI*Gõ.ŧHMP㗠oRsiÆ(öûŸaō–f˛ôĮØtĶM˙Š^„-Į_‹i +IENDŽB`‚ pix[449]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment519?rkIDATH‰íÔ1NÄ0Đą\¸tA Úp´)¸'ÁF[PŖ=Ā^€Â%.]XÆYŅÍ7 4hĶXōËä[™IˆW¤ß׌50'¨Môj}ęj}ƒšÃqĶŗĒiįŲb%ŋY?ŪļžũôFt5ēF˛Íp%ôPjÅpAĘ'ŅLNUÚ4Ũ!]$7=X]—“Ü÷ēFzd qoôZ˛]ŸĄŽ4cu?é„rãũĻ; RÛEWÎ]SZē.īēúēiĶÕUĮōäĻŋIÛļÜŦĢiNæ*?Uß(ĐũHžR¨P'ŅhĸšO{Ņ5SčKÕg˛\öō¤Ũî ë÷áæž%kŦŌüQ­ę4Ō…˙æ|ÕĢūCũ;æą`Ú¯V-IENDŽB`‚ pix[450]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment520mƒ€hIDATH‰íÔ1n! @[tá |#Et|+Õa)[éŠûÆF)Ōnéáx7JqČ&E):…‚fƒ 2ŋĢŊū@ËôÜšæˇc‹l+ŲĒŦŅÕ% ;*UŠč¨Rč0ĻæS¤~hĩ5wĀ–ČŅŌTķRL ŌNžFár^]=īšMEáŠ[^l…ĀĸJŽ"÷ šl[wžęøH_J•}EÕčj¤ē%Uķܞ¨lyĻĢĢ-Ģ&Nv&5e ėLîJđŒŽV€GOœžŠĨ ßh?TķFǏ˙y[Qz°ëh¯ÉÉTŲÃ)BÅ֗cžŒU~ĶsŽc‡¸íHsmSåŠjī˜čĢĖtwĻī2ĒŊũR؟ĀíŊÔōIENDŽB`‚ pix[451]: xres = 0, yres = 0 ‰PNG  IHDRF"Ę0’e pHYsb&2 tEXtComment524jîDqČIDAT•mĐ1NÃ@Đ%RJSRXi.†´‹RPr„\eQŠĐų,JáƝ#YųĖŽm*ĻzŨü˙1rž ļĢČĪČږŒ‡ĸŒY[&&מq֕|‹áæę]i•¤0¤]‘ũšuČ-øâøFŅÕõņ¤‹Ōčbī:ģŪyņ,Ŋë\EׅŨĸ†]r™Rxr}šÜĩęd2šb‹Æd„>h˛äÁõš4C8Æ0D‰ŽZL-îPĘ~Õ lŗŽ1íW-Sũ'ûĶ}úė6Ņ—XrËIENDŽB`‚ pix[452]: xres = 0, yres = 0 ‰PNG  IHDRI#đgM pHYsb&2 tEXtComment535ōEĻËIDAT•uĐÁiC1 `?đ%ÔDŖ¸‹5ö-cd…˛† ´Įú#='ôŌęôYIáōƒ/x ÂH }'gų‹Æ‹#;Šn,AåÉPÁā'ëdØkú$KŒØ1Ŧy":dÜö^kŪôģb—ƒ->ř´KBVgŅ~9[ÕhĻũķŒĐ† M Žŋŧ9WۈÉ‹}ŅŊĒąÚarõl‚*æl2hÍÃŪ’ŋļÍlIVŌÜwņSÄFÁÕ˙PŌâxڝđŒ˙ČņÍÍÖũâ áIENDŽB`‚ pix[453]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment543ĸĐvTßIDATH‰íĶ1ŽÃ Џ,…fĩ(0Y…=V:cå žJĸ)s„ í"m“Âō¨įĶDîL1B<†a€4FÄ*ē ē>æŸVטJˆæÅĒ02›ŦƒŽŧĐŌ'øÉļĒĄšPĸĒFĒ>tĩ"‰TŌeeÂôe DÜĸĖŽ_¨Ęî‹áŽŦ¤Vŋá>R5i˜F‘sĐtą-•ŦžĢ¤CøH—@˛ ŠĪę‰úķažëđíŖŽŽčŽŠĮŧ׹:㸎vû øyߨÕΛtMŽjã˙ŽĢéĨОéĻ›nJô šuËeˇÖFIENDŽB`‚ pix[454]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment546Ōē‚Û IDATH‰íĶąmÄ0 P* ātj¯0ĸlâU˛‰ed€áVŅ(Ū *€Cž‘ĢH6šŌjDIÔ'ŗ _é´É¤ŠbS4ž/Ņ'Y4(“dž95tŗbV\Š4č˙TÅ*đí9kâ͟ø§jkÔQ ķ{ŊJRpũ(šÔZ8Ģâ>kÍH˜ûŦą%í$W:ė„œxÖ$,WŌ7ņŽę–Ģ€ˇ‘Hąnd ‚¯•ÄÁ|j0˛Ū+/ĶNōc|[;x4\Éq9=iĸƒW5æ;ÂTzWëÜõ0°^Éē‘Š`LÉ7ĘV@d¤?žĶ({€ã҃đ:HaĨœ˙ģh7ŠÛÎڞĢ<éŽęWšÖūKŅ8”Ī4œT_Ē.yn֘U—Úa˜2rųŊ-+Gĩ¯jŽĨŦBOZgŽÉõŠq*p Tlš°u6r/9cĢō(i;w?ЇîLuh­vs÷ņ6žKÂŗr3#Ģ',Ē8—\+ŽTî‚Ëŧ¨æķ‚§Ā'ŽLŨĪé(”.XŽZ<A…āû3đ8kœë¯å(­ŋWŦøŸ_H˙,ĒoÅ|yŊ雾€ūŽ„Vž!IENDŽB`‚ pix[459]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment564‚ubIDATH‰ŨÔMŠÛ0āg Õ&Ô]ĻFô=@AW™#ēéĐ!rꅗ>BnŌąÉ"ˇč(šå(d1‚Qũúžķc)“d=ÔœįĪ’õķô¯\9ŧq­Ži'>ōmėžQ¨#uđ­ĀU¯NFjwšā ģg c5î4ŲŊk Ų́ã.Åž üŖ"ā˜†ZöáS4ŖŽU.ŽēÄ6ÔtĩlEãõKŠxÖK{ Â˜ye@vrQÍB͌¨IĨĖ‹&˧'Ęîe ÂĨĩČīcĩŌsĐ,÷ˇŅwIõÆËßBĐpæL¤N$ ŊŽĸži@¸õRŠâą4ظ$jû‹´ÔĻ‘"iÃēØŠ×9eÍ;ŌåcÅ*Ŋ U´ĘXĩ“ƒÎ^(gęŖ.Ü]¨9öĒ2ą,ëįH5i>UåĪ^“Pë †^ëÔčÖ'.•IĐ(Ō*RÕú4T ´ÎĻĒNH­jģĖé0ÛĨEŌf9_ŽōF†Ģá9'Šįõ“l×ČY2š+rŖ×Ęt éwIņ ĪgtÆģĨ†ÅēˆĸˇPsūwĩ—•6×č j¸8]QzX_ęŲŌ1BsI=Ĩ.š‹ęö˙KÜ×{/˙žŌV§z}āĪaŨqņÎwĒpĩĄĶ*‚ LUû îoä&7|IN•; etō)PŽøŖŊ0~<ūqĸīÄą­ŸŒõY}/íWŌÉŠŠ^3iīŒM‚Ē’Ŧe¯V[“ôŧŌ˜īi7Ė‹bkÖA¨ i5¨Ä:TÚđrĐ{™˜PŠŠjģS]ß߀ W’4­V\šX§ˇ' ˛áŧŌĩ"CūƒĀö‰hÛöIENDŽB`‚ pix[460]: xres = 0, yres = 0 ‰PNG  IHDRD.š‚# pHYsb&2 tEXtComment565y…ąãXIDAT•ŅA Ā DŅ9ēGËQ<Â,…ŠíÆüB+ļY=2„@ĸs–õ”EEƚJRĒ#Ŗ@J ԐQ,ԊĘVzk Ž2Ē(PųŠØÍh.ģ/žøĮ§.ÍķÜo.ëϰIENDŽB`‚ pix[461]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment5684Í^OIDATH‰ÕÔ1rÄ P9΄.nˇČ Wؐ›á-r-ēŊG ¤ĐˆHxŌņՇ‚Âo0BŅXūÜ$žt„s Ŧ’-5ŽU˛NõÖÚŖMˇ}­í° ßi­ÕtĨĩ›OZŸ÷Ōō­´á¨F#+6ķžÖžlũ1Č$g Š-¯_Puëö˙ŦaķúDĻzdûō6fX`_ʖ-¨É& ÍTVSXue^Ō3z:Œ5;*×g ŦŸ vMäŠÜwĨ ”I¯žAĻcÖ-Ō¨k‘Š%Ŗ€7xĨ Ž%[ĖO 5Ŋ†>_ ->MÁí3í˛A•ŠUÎxĮZްVW[Ô€ßB2Å}ŌÚ$T)ž˛^|ŋĻBžĸ˜­Õ`GkęoX[ęë;GOũĀĘš9Ēqy* ķ˙­õÕŨˇîøŧ–jO‡¯°ęæ€]ô^Ė˙TD˙ŗõąĀ0IENDŽB`‚ pix[462]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment569p3ũČ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚leptonica-1.86.0/prog/recog/sets/test03.pa000066400000000000000000000266651506303110300202630ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 28 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1Øô<lIDATH‰íÕ1n1`Å[ =Š9E´ž GHI­g•" RZ DnBQĐÁŒ¸€‘Œ˙{ödgW  MfWŗ˛?×c??+ĘöUå ĩq%U|é'eĨ jwšÕ+ĄĸëSÃēîzļĐĢžĻōęŨBÃsÖęE•%z9BΟ4]ņguÖŗ=ŸŸ4M\ÕÕŗŽ•ĄüZuUP ŦčĒkšuŖī pÖO ÍJŲhŧŪčäg ]UķƒhËéÉlÖŠĢ .›ÚYß . ĩŧUŋtŊFŨ÷{)Cßꮚëž]îëģąĢŨîë‡ŋę­ZęĮa_oP+zÂuAčÔÕ‰^ ŊĶ į7ē=ĸņ^QŌņ@ĶŦŸQ2ČŽM™Ģ›<+âĸÚ4k[…bm‹åDÛ šŌ†Ôm‘ûIĮĀšĮUĶ 9e›ČËĪS‘Ö1E¤įxæÔOĪQ'ŲuYN3IëŦWKf•y/ĒīŖ°BQsjÜ3Ÿģ]#׃ëŋéo%ēĄš4ˆIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment2Aũ܆IDATH‰íÔąŽĶ0ā?¤j:TņĀ’ÁJ@ŧˇŠĒŠx 8ņ7f¨..HdAę#ܛpx[70‰ÅÁæw{msNī$t D‰õ'Ÿ~;Éoė‡˙úwõ§5l ˛m ­!Õ@vÚEm)9äæŠ<ŋV…ÚežŠ’ė_áˆÚ‹}|›~sg5ZOWÖD‚Ŧ¨ey4Đ.!¯a!BH†ĒA˜ë”úãŽl{öŧŽ?JDcę¯Ķ…Tëwę‰ĶĄĘb![RŠ†ÄƒÜÚJ}*ÛŦR"‹ã֖kÕn” UZ(”jY¤8ę3ŋFæiĄŽ´Ķyœ†āÕwYœČĢŽŒ'ičĪÄ<”/u N˛ríĪĢK{)_0¨*{tÖI`ģūz§~Į†Ē6úÅĪU‡đ_[e÷ĸ돊Ōĩ&ķUÎîÔÜA{‹ę™ŦŨčkļĪũseÅVãU›ž~ĖPɏ æÎJˋŨĖŅųŒĸ._pé ˜”rO‹ ĨĶüæŽf{Åū.ŪĮM5ާ4 Ĩé´D œÆ4?Å߯:ĪĀiˆŠë:#X?wNwØŗōZŸ8Ĩ=å} ?0Ķ^Ώ“Aátėô=*ô´FÕ'Mˆš$ÁÛ:Ûhō0ácŽ_”ė´MXcqyáæc îgØuˇS ]ŗ.6ˇÛzėĒđËę¨WēVߨ õ|%=Ձ§늹ž;îMifļ°Ô IENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment36úėžIDATH‰íÔ=NÃ0āg:¤†­CUs„ŒŽÂ:v¨W9×`tԁ‘+¸ę0›ˏ÷œ&˛ÄC-9ąķŲÎs^ĀLŅpÖŗžõ×5V9 Yõ?PWįÔâ÷ĩÍę.ĢĪYÅ/ŠČŠĨŲ‘Fđˆ‡7ŧ§‡ ŠwæĘ Ô4neĄÍüĩIWĐąŪ§67¤0§Õ\r<6ŠqImŧ$-á–t6Bž€h ˆ mœI=- ŅĶĸĶąj-'† 3é&e ŊX‹NƒÚZWQUË:/ëĻÅÂŗž°6ÖÉAWĨ”bņUc|Ņé”tY$å¨âQëÖOĨ]ŽF͖TuęĒF‡¤úi¤ĸŅ‘4đ##ŨiIĮ´gˇF/ _P¤I (ŨĢqE€Ĩęu–æš+Æ"˜Ne§vŧ`­íh÷………ŒGõ5FΠGki&Pĸ!Ĩ˜y×q”’í¨ļĮ6z9ŧ9éČoi^*AžŧWŦÛžŗšŸԉúŽ?Uū†šžÃ9˙ Ē÷ƒÖŸ| ¯ÃĘøūuĨīąTozˇéÚIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR(Ŋú˛Õ pHYsb&2 tEXtComment29‰ŧL„IDAT™]Î1Â0DŅoYÂĄa[Vr Š(šŠlq1ÅGpIąl€Šæ5;ššĶ:QŅ,d6°āĄÎĻo)8Bâđ}Œë˜ôaú7šĨ]M­ŗŪë}YŖ:5w¯|†sĩøh'ÚrY u§BŪ“<āÅžķķtėI|•ĪļÕ\Ņ7lz.Vā-ƝIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR( HÖ­ pHYsb&2 tEXtComment64“@õŠIDAT™5Íą Ã0…á'\¤ ØeŠĀ­2…AĢd—.B$‘ÅäM4‚Ę+DžO‚4_q÷ā'6ACWˊ 3ĘæUPǝ‚<<4ŗŅLdūû%Ŗ :^īŨĪjnëÛÔį.pēėŗų°ŸS —áÍL*VLڋĮЊvÉ/Ÿ/(ļ) Y]ˇMŒĀĪ“zĪöJÛdŊIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment126ƒéĐIDATH‰íÔA ƒ0БĶUįz.D/VˆŌE¯ņ"ņYĻPœNéJętQčÂY=†„™$$™ô´ëŽģîú;]ë]ĸ‘d …Äh/Ŗ4’Ü‚úm $:Tk9v¨îkcËHŊ˜Xą‡Z¨ÎmVŨúF‡ØœÔ)\ˆĄŠ*š‚ĒOæŠuHvÄjc]lĘôęÁĒirįŒFÉéŧ45Öqi2ĩÃKᙉđŨ ’¨bÚÖ@šã¨§w˛ Ū‚j[Toë¤Ģ“UūãßøĐ'cĻâCBHžIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment140<Џ2 IDATH‰íÕÁŽĶ0ĐY%ŠYО9rˆâ_ØãVõoíaĩ6T*—ũn| Ž8ė_ˆœp‘É0“¤ģ[G\pĨTōë¤Ī8Ä$ ¤pũô3i:RņDņ y.–5Í>Õũ‰~|Ѐ‘ÔÛ é9~Ŗš/ŊFüŪßZRgëúŒŦįˆZBŽĀ°ęWŦ°°ˆĀę[ФwZĐ߅|ią¯õ3ēŽ­@‘nĩ"ũ”n ĸėZƒ}+TĨļ˛fuŨŖ*9¨VŨHÉęĒYi)Øĩë@*YÃKJ+W~=éļô ĢYõ RȃöĒĶŖ†+õvĐFԔoh¯i^˛fV#> ÎX/8ĶŽc]‹`7w uŦíīk[E†Šķž4ŽĮt–tÅú‚né`§WĐĐOĐ͇T’úË!vę)ŧŸjŠŠS¸Įp=é/#ĩ‡&˜ĶLĨûSEîqIņŋūžîKšø{]Đh1 õ†”úeVuĢŋåæžĶȚUQé1’5ĖkÕVEįHíŧŌ¤Jmŋ¨˛đ‹ZŽM‹}¯JEûÕãģ— ö3îBHßûĮwŠŪû‡wÌžö6éĸ:PŅ,¨i)vWŌHk֛r,=ĖD,Æ"í$]ËÚĀ‚f(hzN]wŞŦĀ_hŊ }՗ÎŅQeO3:˙Lķaŧ7ÁˇIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment141K×ŋ¤ŸIDATH‰íÕąN„0đ49r‡“ „ú7:4°ø(>€ã  a¸ŅWâÂāč+ts­[‡ÚΝpšųX‰M 4ŋ–ūiS čwÃiLAPGđ E8€@/ĪcõĒ*ËT(!}cBė5SÄ0„8ŊxÃ;ÁĀt+Ãĩ!’/Đ^ƒûƒBÃ}ĮŅ}Ų §Ĩš!Ny& vO*đ8hץgÃė|CZjavŦ;dÃ'o¨Hä <[†ąņKNÂX?Ä+ėn†EąÉŠIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment144;ŊK+šIDAT•]ÎŊ Â@ †á/ÕĨËHf CčŠÔ0Ģ\*JVmčŒtōĮÉĮOD÷Hļå<‘g>HáŦ˜M8)˜…i¨Âč;ŗŠ89l$öAŽD׎•hrôōpX/ˇŠƒÜËSëō^.ŨĘĩMDë@*āțföŅģđcEįņ`ęÛrˇ‹%ë üplȑ־2ŗS&öœIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment204]—0v°IDAT•eÎŊ Â@ ā]qeˆâ‚5N:Fač("’0…GņWēˆ06× áę“ä‡#™’i &ŖĩÆĘŲ¤`Cå€Ôį`\ZÍ{ +üíč<ŠmƒÎ$_Öé?,—‚Ŋ’ģ˙˛Ā5 É­-0>HN]IR 9< Ū9āuЋäėĐ:õN['bsŠÍĖ¯Øą6ĖžYÔАŪqÚōŅÁŖvuT]}ô!)s‡!p(IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment224oĄRô°IDAT•mÎą Â0Đoš0RRFŌ‘…ĩR ÄVa#1ŨV;.h螾îë’‘°3ĸ4BŒ€Fâ‡ûQK˜ ã0î0Ô-J\A[ĄŠĩ^0AQÛøíŽH;ēFq…Õ|aŦņ:j ŒŧŊ™O,ÔŧKâ…í+cŅBˇ5Îæ Ų“ãĩ§‚8[Sąõ†Ę‡Īԛ(šîp†Ē Ļ|ĩãPÁĀ_$čŒ/Öp–Œc…IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment2449ûõr°IDAT•=Đą 1 Џ(Žôˆ,r"7Dܝ ƒ–qÂ&š LįŠIB„Ģ'˲ž Ų›=M Ëd<"bî˜ŧ’ĨWî¸ŗ“†ŊTÄ;!n@à \"CGū!6Ŧâo¤ûé9Āx>’pAē‰+b>ҧbÕ mƒz§€LLÔŊĐJüá×áŲÉ` ĖÕđ1w,čœū1Ô+ âNÛ&ˇÔ eØGäŠō3ÅŲ4€kFü˜›IENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment245NüÅäÅIDAT•eĐˍÂ@ ā%’/ˆi ĘPÂ1ĨĐ€6a‘ˇmič‚ãЁŖŊø`q˛ÜÖ§OōCļQÉ<´ÃėGĐĄ`4bGŪ§?œ9VĮ€‹D%ŪčGÅF‚Đl Hā(4_VäP ˜$~;Ü9^Cųė`œvTd +cžęČĩ§_mag=-h|„U †oĀŪ!ɏģžÉ^WÆPiAƊö i19š;o°_ŲykČøđ}V 8y*f|ųŌú—ã z˙ vœIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment250'*IDATH‰íÕąnÜ0 P”ŖÖlėgtâĪéšN:ÜāΊ ŲÚ_PĐāĸŠĨ8wĀ™Šv  öƒEY4mâKŖčŸK'2ÖnáBÖ3‘ß%\4ÍÚ/šo°_jšíđŦžŅģœÂYŋQ#:ž+Í*ČáBũxĄĨ_”oŠz|ĶáĒ"ĮŧčƒĒ‡YúŖ*„ņC÷T<#ͤ=NJƒ.}Ö˛īxŗ×ë”ü´*Ÿw‹ļŽŨ Fž5ĶŦėM(šFãUN2)V|×ëČĄ—GãĒ>ËĶ<ūféˇü†ōĻč6´BØĐ%>õS˙&ŌŽ+d¨žÅ%d\×N8$ˇŽúņĐŪCģÃÔšy]‹jojš” Ĩ$QČRŸė{qV+¯OíĢ ŠCģg=¯?ÔûÆ^ĩp(,ŅPwâw†6|Õ*XZũ‹*XJŋ6´(ĄOa]ųwįŗĄÃ)ÁbCû“äŊ­E¸uÅPdU2´iyT™ĢūBōŪohēsV}{ĨZÁY5*°ĢĐeKŨųx­×ņõøÍr°`"MPIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment246×õ”^IDATH‰íÕąnÜ0 P”ŖÖlėgtâĪéšN:ÜāΊ ŲÚ_PĐāĸŠĨ8wĀ™Šv  öƒEY4mâKŖčŸK'2ÖnáBÖ3‘ß%\4ÍÚ/šo°_jšíđŦžŅģœÂYŋQ#:ž+Í*ČáBũxĄĨ_”oŠz|ĶáĒ"ĮŧčƒĒ‡YúŖ*„ņC÷T<#ͤ=NJƒ.}Ö˛īxŗ×ë”ü´*Ÿw‹ļŽŨ Fž5ĶŦėM(šFãUN2)V|×ëČĄ—GãĒ>ËĶ<ūféˇü†ōĻč6´BØĐ%>õS˙&ŌŽ+d¨žÅ%d\×N8$ˇŽúņĐŪCģÃÔšy]‹jojš” Ĩ$QČRŸė{qV+¯OíĢ ŠCģg=¯?ÔûÆ^ĩp(,ŅPwâw†6|Õ*XZũ‹*XJŋ6´(ĄOa]ųwįŗĄÃ)ÁbCû“äŊ­E¸uÅPdU2´iyT™ĢūBōŪohēsV}{ĨZÁY5*°ĢĐeKŨųx­×ņõøÍr°`"MPIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment251PŠ0ŧņIDATH‰íÕŊĒÛ0āc<ØP¨é–Á ąk C3„Ģ ēö ÷V”ÎzŠĪTŅ–UŸû†ÅZíũÛvk‹oAģœUųZ}Ā5$­Ū´š…ÜŨ/\ÉZŽ–IŸ×Ģģö€Íö}yæYÃle@'ŋęzlNØbTËûZŗz1ĒP.rV†ĶņŦ†xŗI gĩŸwQך;EŨGõŖƒ-.u=jP.ë:ցŽ—ĒĩMŠŖ.õë|Ą7&i3t-ÚiŒŲ´ŦŗÅMZŅ}Ųd6ŗˇīņ{ZīÂpĻNģa3 ĀŊDžŅ%—PEŨ`ŽpËĒܨĮU3*õŽp¯%í…"ĒĢGũŗ¸Šĩ{Ėī5ũũ'Ē&UO)™IĨ˙új5ĨņģĄ(Ôf”A÷ĀęĀ\ם5žBôŖÕNYéÄVČÚy%*ĒVŌ|JC†Ę˛ ˇ,C=­_dåy?ÉēC3Ąd͒×+jXķ^IÚz¯%ŨąēFŌĘņF-åŋ ä$E千Œ¤,8nPˆ:đāJԎLP'¯¯kX;éälŪĪjÍ*Ií*kIÔ}ÎBÖg(ŨŖmŦxÅ×õIųKõ'|XU[ 9IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment247 ō¤ČņIDATH‰íÕŊĒÛ0āc<ØP¨é–Á ąk C3„Ģ ēö ÷V”ÎzŠĪTŅ–UŸû†ÅZíũÛvk‹oAģœUųZ}Ā5$­Ū´š…ÜŨ/\ÉZŽ–IŸ×Ģģö€Íö}yæYÃle@'ŋęzlNØbTËûZŗz1ĒP.rV†ĶņŦ†xŗI gĩŸwQך;EŨGõŖƒ-.u=jP.ë:ցŽ—ĒĩMŠŖ.õë|Ą7&i3t-ÚiŒŲ´ŦŗÅMZŅ}Ųd6ŗˇīņ{ZīÂpĻNģa3 ĀŊDžŅ%—PEŨ`ŽpËĒܨĮU3*õŽp¯%í…"ĒĢGũŗ¸Šĩ{Ėī5ũũ'Ē&UO)™IĨ˙új5ĨņģĄ(Ôf”A÷ĀęĀ\ם5žBôŖÕNYéÄVČÚy%*ĒVŌ|JC†Ę˛ ˇ,C=­_dåy?ÉēC3Ąd͒×+jXķ^IÚz¯%ŨąēFŌĘņF-åŋ ä$E千Œ¤,8nPˆ:đāJԎLP'¯¯kX;éälŪĪjÍ*Ií*kIÔ}ÎBÖg(ŨŖmŦxÅ×õIųKõ'|XU[ 9IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR="ęė pHYsb&2 tEXtComment287 GëÄÃIDAT•MĐ1ŠÃ0Đo‘‹€ZÆēÆVĢ+ĨLĩRđ5飯H¤H™+ĖŪ`Ę)ŒgĨȁũÕãÃĀđąGm°QQũ™ĄŲ3P“ĨŠ['Ķ`xqkƒåÅÂ+įđK—CÃ}›€đå! îū+Āŗ]Ÿ|EâVYPčŗ‚J_r„Ņ\qĶfĮ E°Ûí\kÁæž}j`?ŌA@qėČúFDↄ)đŪኘ]9€Ącéđ°!95õęĩĪZßxå)—ŒW}´”IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR>!Š:%§ pHYsb&2 tEXtComment304\UZAžIDAT•5Đ=!āG؄’ ņ Æ5ņ"A; "˜M<ÆÂkŒ7 ¤ ;θJõ˜Ÿ<4Īz:ČršwÃäšF”œŠSL”î–IPG?q‰°uį Ķy1"nmž˜ę¯]Ŧˆõ@—cÄlš@:7ÅIÁ™ôĪ%Ё~U–:X;žŠ ĀļU "0čÍ[Wĩm2GW]āžË˓ĄŅ9ŪGd¤ėēTpņ Ą…ÄRĶ,ā%žá{D‘´&WYÚIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment343Ļ] æ~IDATH‰íÕ1nÃ0 @*ŧÕ‚č 3Ņ—:f(,ōŒ~ه~ƇŽĖT‚XÚIĶ5 tëBƒ “II€,ˆŽģ¸ĩ,qHÖ9­¤‹Ëœ W­F7j _zÕێ‹ĨgϕŗA-wäŋ5u+ē Ë5šŧ͆ąX<\tԆËg[eÄĕÁuRWj!H”Āy‰ÂÆ‚4ĒwtŅōÉļĸŠŧJ†G ..$si†™˜[bûÆ—ŌIŌō×0†Éķ5ēkOōÎÄ]īz×?+åœŧ\Ņim GšÔŠ[ŅSĻĩÁ@ŽŋšĘ?ôpV7­yrŨŒĸīĸĸûYmȡēöĸ˙Đę2†äYÛŖœ$ŖĻŨ¨AŅFū‰Üō´ĻlPÔô4§ŒqXŗV—vĸQ[3íë'švēV´ î]U)é›h§5“#öĮYUŋ=OŽ!MŅG×ŖĸU0ī[eÍ5pm45Ōü´ĘsMžÁ)McÎ=Oë¯ø§ú ͇‘ĘĪK‰IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment34489ŸEģIDAT•=ĐA Â0Đ_Zp9ë1\Hsā˛‹@S .=‚g‰ô"nã.ÂĐq’ĒŗzdfāO Ĩی´!‰˛ aÅ= Lâ-ĻhūH$ÎĸN&T°“ ´Ŧđs4âŊ…ÄáJ|bHĨ eWĀÕŌŅK‘2šø‹Øw4{E: žšĻĒ´Eí ZÍėŦ]Ã׹€9|~ FÕįÖ-zE¨Åäß>7ˆ€o%ē¯ÃIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment350&OjĩIDAT•=ĐĄ Ã0ĐoÚ°Ė+dKYĨ#DuĢ,–( °+$<`õzįT=ôĀ˙$Hz‹'û TGØQ„uŸø:bĻ …¸Wä$‡sQDĀƒØŅŠę…#z¸IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment358(”â/äIDATH‰íÔ=nÄ āgY %[ēZŽ) dŽ’#ä+`勑›p„)),ŗ¤KÁŖŨÆĶĄoŌü€:ˆˆK/ŊôŌ7ę^ŗëë‰pĸ&ĶW+Q÷5ô(Ļ:cŖē6ĩs_“U VtÕOĸ۟ÎDķĻžKųŠDŊŽĩ8ĸåĐQ Ķz˜8KˆĄ¯Åĉk+#€ŸĀŪmwŋ?ŠÂõÔCU(TŗW“ܘ&¯všąZ%?ī˛ uuŅÖAąTŊú{§“ŖS~0͋Nđlb&Ŗ‚ėB“ŠFĶ×õP5…žļ8Í˙ĶÛūMŨÄzä¯ÅBIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment359_“ŌšáIDATH‰íÔąŽÜ ĐA¤ãŌmq ŋpŠâbĩ(tĨ ´ļå‚߲Cąe~U~€tH!&cėŨK”Š4Q¤P z<ĖȆėuÆ%’žßBŲ—¸‡ŧíD<ÃĮ5øË~Ü5îĒĮë\ˇŊÛ5m'ĄúĸéWU7 9/ŨŧéŒačÜs ĒOī3÷|’Qy0Đí:æ%$XĒđōĶĒ]šQ7f;'0‡Ā&ëŦxcåEX‹āœKGĶF>_œ“=æŪtœŗĢļĪņƒsvĶfWë“ļî ęSÛŨõØíŠ.Ļ…øĸæĻŅ :TzŲôØŪsM9Ų´Ũ=÷ąiÚŊüŦĸ‡wMķ´•%ŧŅÎĸ­ĀûÂlē@õÕúļ1¯‡aS҇ĸ 8ļVú؞¸W ›ēę3ė9â°ŋ¯¤îŗ‹ gô6īķeõëøęē?×HāĻäú¯˙ž.šÔ rŲ:ņ<‰E: øĀÄ §<ĐĘ}'Oj8‹!Ņz’cŽäǚ•I‹R÷ŊøTŅėĶŖĻ˙ ’Ô…'¤FEUątUU Q mÕLęÚ+ZyMŽu•5=ɁšāÂ}M™? žQ3@îAĘrŋ{ųēö,OŌSŠŸ˜× uōoë¯éÉÎ#ĀĢąfÍIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRC",Y! pHYsb&2 tEXtComment4110k‰ IDAT•mĪą ! Џ(ŽĖ7J˛\•ĩœ*k0ÂIi\ û18‰Ē’˙Į`%_äŗ€{⃌]Đ¨]˜Ĩ)‘â*Á.§lļēKŽ×)5mŽūļģĘmJJĘâB—âõŽ ič.ŗ—žĮÜTÛ_°Ē­…ĻĨ`ËPDq\>j Ë9„sK;Š7"ĘšK’č"IENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR–áĒ pHYsb&2 tEXtComment418Iˇ1Ž7IDAT™cø˙Ÿ‚ūūgøPĪđÁLūgøCę؃Pę‡=Ã{†@Ržá?ˆ„k#uK)uƒi?ƒIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment419>°8qIDATH‰íÔĄ €0…ákHē+ ëX‰ aVb¤“¤HHôÎaā~ûŠgŅUg#Ŋ¯•ŠŠéī4¨šUĒöĢĻĶ ĢKÄĘĸÍqųÍüИ Ô:s[T,ŲSDČHQR4šUĘÔôSēÆA´“ō:IENDŽB`‚leptonica-1.86.0/prog/recog/sets/test05.pa000066400000000000000000003050721506303110300202550ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 254 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1Øô< IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment36úė”IDATH‰íÔą ƒ0…a[.\2Ŗd•l‚QŠ”Y äE.b—.—¸įū‚†ÆnŋÂīŪIį^rwč@ZŠxŌ5‘f!}ÉšX éŒēĸn¨Z°įLz`Ī{‡ú¤Ėßō ĖuŧŦī:€TOzøöī5ZęŪ`ĻjûĩUHĶĸ KÛ¯•J%Ē=‘îņĻËĐĩk׎§ú°7'mhųIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/VIDAT™=Íą €0 DŅ벆GËôŦ•TŦሂ# c'‚âIŋ9ĖaŋëÉXdHš‘äCŋYĐUīÆ!‚NSw‡ŒÍˇÕe”‡Qmháč/î> r%}ÄIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR( HÖ­ pHYsb&2 tEXtComment19ĸ°īlIDAT™UÎģ„@ P]Dč\ ­Ar„”ÄîR[…ĖęlÃGÁ z@uÂŌĸ~ÕU1ĢØÃCĢΨ—ų­mú°{t˜”pü¸Ų—dÆq9ßnĄ„Írē›+RC‘ĀaB&ûėųŲbŦ͌kgIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR* L#א pHYsb&2 tEXtComment24÷,Āņ„IDAT™EĪą Â@ P# ¤Û€ŒrŒÄ8ƒdė‘D €éRœlžĪHüæéKļ%“#‹PPĀ+Ų’Õ ŧWļ“ĐĸÜūĖZƒIëFP’hˇŽäŪM܁‹ĪÁ”<|Š]€ v&PÆ÷`w~Ō•>–W”ãŠPo#8 †ŧQGƒCoņ‘˘¤v‡c7IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR*šbč pHYsb&2 tEXtComment25€+đg’IDAT™%Íą‚@ĐEƒ )RŽ’ ÜãY€- Ī€KXé™(ãŪũ`ŪĖČwcn yĄ9KŽŦY ķŽ Ņ:Čc+!ÃŪmNēÆå<Ã%"Ū3Ķ' 4 ādŊpā\¸“&ÂļrtbåC N>ôėŧô2žnÁW •äŒm‡O~›Ļ֏HĊ?ß tō‡ĩÁIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR*šbč pHYsb&2 tEXtComment26"ĄŨ’IDAT™EÍą ƒ@ĀEHū(å)‰GR‚[9‹€6}īŒą^Cāhtˇē=9;ö–\šáįí(™[vŦՊ;æŨđÚãĒI$eIĶÃãŖŲ›htļēã“mĀ–AœŨMqDĄJģ9íˇŦ7šZKyĀ[`E"‡‹Ēˇ$ŪŋĨ7n;°ĸöIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR)đxā pHYsb&2 tEXtComment29‰ŧLIDAT™]ÍŊ à āŗR¸d„lFãYŒ‘U°( pHYsb&2 tEXtComment61ã*ņz–IDAT••ÎA Â@ Đ ‚uŅ;Ô+čzčā^đBPīâ<@A2;ˇĶŨ­ßĄ6ķģpc đō $–¤~ŌˇŸîĐdˇXÔÍIímšĘš]ķ‰kúU‹ í’ã¸ãĨ/Ќ‰ÃŸīađŲÅzC?,wv%=ZļøŪŋ'ĄŋÄtQfBĄRˇ—+ķ=hqŲ8O üíĪ)(úscĻIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRX"ķW#> pHYsb&2 tEXtComment57!dŒ–IDAT••ÎA Â@ Đ ‚uŅ;Ô+čzčā^đBPīâ<@A2;ˇĶŨ­ßĄ6ķģpc đō $–¤~ŌˇŸîĐdˇXÔÍIímšĘš]ķ‰kúU‹ í’ã¸ãĨ/Ќ‰ÃŸīađŲÅzC?,wv%=ZļøŪŋ'ĄŋÄtQfBĄRˇ—+ķ=hqŲ8O üíĪ)(úscĻIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment62z# ĀōIDATH‰íÔ1n! PGSLĒu“:Ü$‰RL™+ Ú"×`5@JCđÚŖ-?¤ŨHCûddž-HgĄ'Ô_Õ&’B§”¤Î˛x¨d: 9„õM5ŋ´w¨ÅĢî[û`¤9hW?[õP“ŊhŨJX‘FĶoÕ/¤×CcG'SŪ3V́ksŸÛP-CĒŦ1CeĶ‹éëœBZœjĄi¤Sė*Q™o¸įlZ9uÔ[m_ÛCQ’c-AĩqÂ3*Ą>M˙/-‡âŊĒ!ëNō­aõų؜vq@›‹ĻW!”'Õ}•%bÕ˞!”ÅŠt­žōW9õÔS˙ŗŪų ėLk—ÍbIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment58ąÛōIDATH‰íÔ1n! PGSLĒu“:Ü$‰RL™+ Ú"×`5@JCđÚŖ-?¤ŨHCûddž-HgĄ'Ô_Õ&’B§”¤Î˛x¨d: 9„õM5ŋ´w¨ÅĢî[û`¤9hW?[õP“ŊhŨJX‘FĶoÕ/¤×CcG'SŪ3V́ksŸÛP-CĒŦ1CeĶ‹éëœBZœjĄi¤Sė*Q™o¸įlZ9uÔ[m_ÛCQ’c-AĩqÂ3*Ą>M˙/-‡âŊĒ!ëNō­aõų؜vq@›‹ĻW!”'Õ}•%bÕ˞!”ÅŠt­žōW9õÔS˙ŗŪų ėLk—ÍbIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR,}W´A pHYsb&2 tEXtComment63 $V3IDAT™cø˙‡‚~ūaøC ¨„āG6 j.Ņ 4äÜ´?Pî°]˙[HGŠÜTIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR,}W´A pHYsb&2 tEXtComment59ÆÜ*‹3IDAT™cø˙‡‚~ūaøC ¨„āG6 j.Ņ 4äÜ´?Pî°]˙[HGŠÜTIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR)R8Ųë pHYsb&2 tEXtComment63 $V“IDAT™EÎÁ !ĐŲėAo”@#FbG@Ö1ļ-6lcÃĘøO„™˙‡D$ĻzVLûUŽĻ’=3å´(ĮôwĻ× ¤ÚųÔö°Xŧeo‰Čœ˛xdNE˜œËMļĮČ#‘i-gŨ9Š?nŠÕžĩ[Ŋĩ“ŦqíĀĒŗŠPÎσĮŦ9sŦü~IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment66}NdŲĖIDATH‰íŅ1Â0 PKEdAĘĘPÕW`ė€ÔkąÅˆ p¤´ēr„rƒ°ŠRpZF'Ŧ ņúô•oBfŠ-Z´čß)†Iõ`\Zt3ëlB/fWĩŦ‘*­JæNPÛYփ.ŠK­ß3ú’Ŗžõ3Ą⪊īnŠO'md5+įFÁĸ>XMRī|ț¨ƒúęUÖkkäOTËzäæRįia­5‰ûNģ˜my”bļŠČkI)*VUZdõ?ĩKŠŨÔæTõĸŽŊ‡āq)Š=˛IENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment64“@õĖIDATH‰íŅ1Â0 PKEdAĘĘPÕW`ė€ÔkąÅˆ p¤´ēr„rƒ°ŠRpZF'Ŧ ņúô•oBfŠ-Z´čß)†Iõ`\Zt3ëlB/fWĩŦ‘*­JæNPÛYփ.ŠK­ß3ú’Ŗžõ3Ą⪊īnŠO'md5+įFÁĸ>XMRī|ț¨ƒúęUÖkkäOTËzäæRįia­5‰ûNģ˜my”bļŠČkI)*VUZdõ?ĩKŠŨÔæTõĸŽŊ‡āq)Š=˛IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment67 ITOUIDATH‰cø40 NŲ õxdņéŦ>••‚įØe˙؃X˙˜ąĘ6¨ąū0b“=ĀÉ*?°Ę„ɏ]ļ›ąhAqķ¨ė¨ė¨ė¨,Ũd5I?ŠIŋKIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment65äG5cUIDATH‰cø40 NŲ õxdņéŦ>••‚įØe˙؃X˙˜ąĘ6¨ąū0b“=ĀÉ*?°Ę„ɏ]ļ›ąhAqķ¨ė¨ė¨ė¨,Ũd5I?ŠIŋKIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment69íņyHŽIDATH‰íÔą ƒ@@$‚)á7ā |m9‚ˇ(Ë oÂ!ˆžė-|@ģ–!‹M';í^a$Ą8õ°új˜fIžéXAÕ,m 5%qę˛éuĘ7ĒĩĄöаÆ]ĸŽhdĒ÷šiĻĒâz¨•6õ}ÁtŧBÔį5ǎ/jŋéŦŌaTJ܍%7DߛÎPuą7Ö.ÖvXŸđRļôT÷Cíoœzę?ę čĢäû×.IENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR) §l“ pHYsb&2 tEXtComment79ôęH €IDAT™UĪą Â@ ĐOÕÁŖx1FH¤ĖJ‰Rd‹4,]ŠĶû Ē×|}ÃĖ6Q8OVL°3)W*Á…AåģĸŧĢĖ ūTNdr^/-ɚ ­36 ČNžldsbN ôĮÎÕ;5Z:å`øcĖ÷;HGoąŌŸQ4 žģéhm1ą!3IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR(!ƒŠÔ pHYsb&2 tEXtComment86ãÍIW‡IDAT™MÎą à „áCtaƒx{ŗ8%#dk€2@HGxܸН¸ęĄ.T%˛ ĖũĐ'ú™Â]v=57Ĩ‡ęŪš ŲĐō&X֍ĢîK¸î*,œ]e„ĘĶōėŠzŗ]n—fü›IĐuמPđHúdFôAŖ|öŸŗãcį`ĪrŠIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR) §l“ pHYsb&2 tEXtComment95cß)ŦIDAT™=Ī1Â0 PW sŽĀČæ{ŖšRŦ„T\ĀcĒ~œ1=Éō—ũ €nB{Dž„,tĘ ų$¤[gv‚cČ,´XR…šÖANƒčˇÍ“ąLåŅrüĖVãW!ŌÂpėŌŠ×jú;÷ā÷@šAĪg:íO€üläėÚK{ōjōŗˆrûcōûīIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR* L#א pHYsb&2 tEXtComment99jie‡–IDAT™eĪą ƒ0…á“\PēMk¤ˆbFÉ$1‘ ‘UQPfŖ,Ũ!YŧœM™ę+^ķ~::LŌ!{ĻÕ#9Ļ˜#Ķđ)do+OËLQî6õÔČíŸpnĸ°ļ…éd\ÛFˇ48ŖČÅŊ”ãęøŅ˛ÛPĘ"žĀâcf9ų*[%)ŗ˜žcč˜víŅÍJžAĸz%›.ÁIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment107ÆØß••IDAT•…Đ1 ÂP ā_\„^@čEÄ\Lˆ[Į^ ‡Q:tô -ēˇW‰¯.v0Cø$!E$ė d= Ö8“5$đ ;”‚­cĸĸĮ'RĒ=BHųz7ErtO $n-ŠĪ™‘+c@øb¯ŒÁn ´ TߎÍøŠé]†r5ƒę ŋ"ē¤0*XųĨĀū…§1đ[1¨ën8Ø!IENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1116 KáIDATH‰íŌŊjÃ0ā´„ęBô ;û•JV]Co6ėĒĢž5īÖīęáøSķ6BkÎIõągõųǧ‰öÕĘáFM4BVĖú”ÎÚÁZžAåƒ_åyŠ3¸~5LÕĨįŦļ õäڔívuåXtŅEũcũ8Š\¤^úIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment113ØŽ*͕IDAT•]Íģ Ã0 Đl F0āEx•Œ2…z´Œĸ¤aÁčĸ_Š„Õ4ߙĨ {Ø=V8¨ļMøŨų¤ĻĢËÔGčWۀĨyû=öeŠŗ‰œÚHkč@ ņ{UÂTČõF´‡**‰,šáčXg§Ŧ#]=āŧ‹ZP°ø-”k{ŊüĶĸ“'WwôIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR:! Ņ…Ũ pHYsb&2 tEXtComment1198{Ã͈IDAT•}Đ1 B1 ā€CáQęąŪd†7ŧŅ+õáĐkŧâ".¤ŋMDPė’$”$„ņ‰#ihûÆ ˇŦx\ŠĸäĢĸ,’h–ÔÃ@øōž/ˆaČ8{РːÉ2m˛Q˙ĀæY߸w°ĄīĩÃÚ7Ĩ(ĎX\Q8ŅëÕŅĪō]öĘãA…úĶIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment123ķƒyĻIDAT•]Ī1Â0 PK aËډ\#[¯ÅP‘ĸŒ=TŽÄ‚ēx°üqŌ°āéÉqüÂĢ;“ä¤tĨ9€S$ ¸xŽƒAGĮĶ`G’e:Û°`ųa+ˇŪŠ3ˇ°t@â?¸fŠ?!ˇĐā`Ąu:Ô[¯m!jŗ@/đ %5<÷ŽuĪü;ˇ%—m{!W sÅGí;žÉŗ=ė@dBĢ•ŋËc“¸ŠoIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment131–)cWIDATH‰íĶąJÄ@ā‡\§`-CD整S,V°Đî!/"Üui„}„R¤3‰)’ā¸ãl6{ŲÜÁ*C&ų˜Û˙vsũROÁß4T‚øâÚĖÍEĀ •§đLj=Qū°ŠĒÖmM¸jĒYe´Cái)â^‰*žĻ$+ĶeäëžĸÚtųŒn Ģ;OohČ25ՃÍ2Ģw8n•8ÖŽÆÕœrÖöÂĸĸc­ķ­~O•Až—Ę†ĻŠę*.Y›!´§kÖˇ[OwīZĶn<…רŦ+ø,S)ZyŠÔų*ļ™c?ķįZZ•ũęÛPÚ-Šf¤Ũ+pU uÃCá¨ŌĒßččÕQôÕŲI4ëĸ0/ž)FVc5#øHɨ|˜Ņ—ūØņĘ]W‡D’-Č33{MIá*Ī'ûpų› īí“wJE˙͡ˍ_‹.ēčĸ˙Ē?❷2pˆ’IENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment129VWIDATH‰íĶąJÄ@ā‡\§`-CD整S,V°Đî!/"Üui„}„R¤3‰)’ā¸ãl6{ŲÜÁ*C&ų˜Û˙vsũROÁß4T‚øâÚĖÍEĀ •§đLj=Qū°ŠĒÖmM¸jĒYe´Cái)â^‰*žĻ$+ĶeäëžĸÚtųŒn Ģ;OohČ25ՃÍ2Ģw8n•8ÖŽÆÕœrÖöÂĸĸc­ķ­~O•Až—Ę†ĻŠę*.Y›!´§kÖˇ[OwīZĶn<…רŦ+ø,S)ZyŠÔų*ļ™c?ķįZZ•ũęÛPÚ-Šf¤Ũ+pU uÃCá¨ŌĒßččÕQôÕŲI4ëĸ0/ž)FVc5#øHɨ|˜Ņ—ūØņĘ]W‡D’-Č33{MIá*Ī'ûpų› īí“wJE˙͡ˍ_‹.ēčĸ˙Ē?❷2pˆ’IENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment136šōŧĀŽIDAT•EĪÁ Ã0 P•Ō›3AŊB&ˆWĘ1‡P§t€Ždč"ĘĘÍ!UrSz<„ôáƒĒžlĒ $%‚’ų•&€ĖK”i0Ô%đÜ;ÆtÔÚ9ö6đ`[Üe2¨Ä͒ œ`ŪŪ 7$ËQˆˆ~,׀ķā›1nĐŽHßpūáQ ”øE:€t˛ÁŋPƒŖdâ@–ŧĻ:ĮZ­WdH՛9Y}‚5čSõNQ›KŠļųšIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR;qcˆ> pHYsb&2 tEXtComment137íõŒV“IDAT•]Īą Ã0 @)TjfŽ’Iĸ*˛– d)ĸBāG4ĨÆ_]ķԁĄŲ\ĄŽŦ(Ž…pYÁb˜YĸĪîę W ŋ‹BČåĻ`˙“6ؖǁPČ@eėæ8@xx|ŦõÄjH+’a9Ąō‚‹aHŅ@9´/´õ˜$…›ĐŪo¨Đ{°ũšŪĻA’ž øIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment139 MĄQŽIDAT•MĐÍ Â0 ā@%rk@õ €ŌÍŌV=pd$ŌIČ=ú`ųá´qû$[Ī?€ €:ŧŠBcAŨH¸zNŅ9Rōkę BÍĒ•„æU[k–0\čįš34ā(`Z“ĢČ_Œã†G#í†į¤~ŧ÷œŒmÖ °¯Qd¨āP¸ī*(sÜąT0q?qŒégž'ĮA{/7īÔn<ŠvucßČ(õ-š•jĐd,3IENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment151RĖŽå‹IDAT•eĐą 1 PŸ((3‚W`oF"Ĩ¸’…EÖqi¤ČƗ‹AW¯ų–ŋÁŽaP˛ļZc`˛rļĘP‰O āĀî¸;HBļ™9:íéę/ZāF)M` ¯‘ǁg`ĀũCqĸãŒËĮfu%§ũTÁžQ†GŌ+y=(‹ŠíŋxŲå p<­/ÚßEIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment153ŧÂīɧIDATH‰íŅģ 1 `GW¤ĖYÉk!%c°J¤+ŽA0'ąT\qŠqR˙ĄĻ°ÛO~“üˆLĻĻĻĻĻĻ˙ĸ—ˇTÆē:!’×4PĒĒ…žmššĄVJĢŋ9<ĨkØAãĻ™wÕ:ĐŌU &)ąëy ag ˛`ŊzÕVîĒ•g¤Qn“æzˇRuĒn¤wRĨøÁēäĻāĒēJ>qk9°~0ũ'" Ũk—›IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment147ĸ´‘§IDATH‰íŅģ 1 `GW¤ĖYÉk!%c°J¤+ŽA0'ąT\qŠqR˙ĄĻ°ÛO~“üˆLĻĻĻĻĻĻ˙ĸ—ˇTÆē:!’×4PĒĒ…žmššĄVJĢŋ9<ĨkØAãĻ™wÕ:ĐŌU &)ąëy ag ˛`ŊzÕVîĒ•g¤Qn“æzˇRuĒn¤wRĨøÁēäĻāĒēJ>qk9°~0ũ'" Ũk—›IENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment154"ĻzjĩIDATH‰U•ÁnÛF†—fáU#DOu7›ĸ‡\S 1ĨšõLJ(€íĨāƒR´€¯=ĐŖ˜ēå ´YÕĨ@ÖQŽĐ%˙Î %*åA‚öĶėūķīĖP)M˛ķVŠo~Rf 1s‰KĻ^ ĄUψBŊƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%āOL ×@ ˛ î™97åŋāĐÄaĶĶ[^$­qWåŅGēĩ ļôLŲō…öé ҆čąĩ~öBÕšŽ<6ˆá|¸ g#Ļ­fztJ4{Ü5Jë94čL¨[Ī‘9TÁ؊č č뎞úī ’`6Ū§vObĄQ{lĻ4ŧOf@ŊŖQG›ōd^cũ)ŊƒíRē#Æ!Aí“yēAƒkXNxHFŋĢ*Œ} Œ’âšb}@ŅQ¯T2ŽfKô"AÄô™EģŖz|7G…)pÎô˜ĐJÅŲ]AFM(GŅŗi™ļ)Ņ3–5œ"0]2Ž+˛Wt¨zLtAT]ŌÚĒ„&ē Yįo J‚čŠnž€é_BuŽ‚ūvÂ)VDô€é+ũn3§ƒ‰ę˜6”ÖĸēÖcˇĸ{ų HjĖāĸĒŠkLĩŒ‰Æ_6Td’W‘xŨ3rrõGl`JîįZŌūh”:¤ø—”;YײQ9ļÕŨq°DŲj8ū V˙Ŗ {#Ô ė¤:PņÍĒ}ŪĻ6œPžuZđ}Õ7u{:J­{ųŽØ‹Ž*eˆR7ĄÔ´ÖPIĸNLdgĒ6Ļ)ÁLŦ¸ÁXT 8ɖB'Č ūĸøL‰+ãmP÷IĪێfą7ž7]ۊŨītÕīyįø­ŠÜËRņBķ7QË­G_KÍ2zõϤ*ĒQģŖ%c(6SAmĒŽŽėzÚeĖą‰L•ų% ß ĸNzY.‹(ΜT”OeW~>ô”ę?WÜŗĩíã˜läˎ’IĢTrqN˜^"ÚdŠĨÖˇ I ]p—Oxį+“ŨĪcūĩ=ô%EĪvąWIŽßëĄé‚ĢÃv4Ē[ ]ĐÂÂ[*SsKę¤'h6cƒ-ås/4ŒŠį5ÃÍV_´Đ‘Î4X3Ų´špkÎÛwt¨U"”v]ÎdKŋߙ葍;ķ—Z>ŲŊ–ãĨęˆ>`ķ῎ė•ÛĮ&5ІĒ)ˆÖ´ŲS’4Đ!ÅÁwŪĶęXķ¯MnĸÅ'4N]čãFčnŅĶ)2‹qÍĶĒ Ŗô7ĸ~ēŖÔLį<¯ŋnG$ūáÛ%×R\ĪšũžÃPsFíž.ÚCŨWŒ7ģ§æ}{Ë šŠgũš&ŋ:ŠûØ`Ŗ),ĸ ŅÔĶ’ŧ0Â=īĖ‚Ž+ī葲'ÖĶŋłöŪڝô^E4ĮŨö%„÷Öá{:`Áî’į7ßq$ë×;zl„ūz†ĮũúŦ§éŒŒm|3Ã0•aW^häl4õ§´īLŦčž"øKĄeĒNF‘Đđe?6|+ôķō@hÃg…zįŠīÎ}îœöt ›­Ē7îŅ™ēˆüO¤ĸ‰ŽĘĨBėvj%’kë_ĻΏfƒvøäiøÆ¨.ŗ˙ŗ™æ´áOÄIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1482 ĩIDATH‰U•ÁnÛF†—fáU#DOu7›ĸ‡\S 1ĨšõLJ(€íĨāƒR´€¯=ĐŖ˜ēå ´YÕĨ@ÖQŽĐ%˙Î %*åA‚öĶėūķīĖP)M˛ķVŠo~Rf 1s‰KĻ^ ĄUψBŊƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%āOL ×@ ˛ î™97åŋāĐÄaĶĶ[^$­qWåŅGēĩ ļôLŲō…öé ҆čąĩ~öBÕšŽ<6ˆá|¸ g#Ļ­fztJ4{Ü5Jë94čL¨[Ī‘9TÁ؊č č뎞úī ’`6Ū§vObĄQ{lĻ4ŧOf@ŊŖQG›ōd^cũ)ŊƒíRē#Æ!Aí“yēAƒkXNxHFŋĢ*Œ} Œ’âšb}@ŅQ¯T2ŽfKô"AÄô™EģŖz|7G…)pÎô˜ĐJÅŲ]AFM(GŅŗi™ļ)Ņ3–5œ"0]2Ž+˛Wt¨zLtAT]ŌÚĒ„&ē Yįo J‚čŠnž€é_BuŽ‚ūvÂ)VDô€é+ũn3§ƒ‰ę˜6”ÖĸēÖcˇĸ{ų HjĖāĸĒŠkLĩŒ‰Æ_6Td’W‘xŨ3rrõGl`JîįZŌūh”:¤ø—”;YײQ9ļÕŨq°DŲj8ū V˙Ŗ {#Ô ė¤:PņÍĒ}ŪĻ6œPžuZđ}Õ7u{:J­{ųŽØ‹Ž*eˆR7ĄÔ´ÖPIĸNLdgĒ6Ļ)ÁLŦ¸ÁXT 8ɖB'Č ūĸøL‰+ãmP÷IĪێfą7ž7]ۊŨītÕīyįø­ŠÜËRņBķ7QË­G_KÍ2zõϤ*ĒQģŖ%c(6SAmĒŽŽėzÚeĖą‰L•ų% ß ĸNzY.‹(ΜT”OeW~>ô”ę?WÜŗĩíã˜läˎ’IĢTrqN˜^"ÚdŠĨÖˇ I ]p—Oxį+“ŨĪcūĩ=ô%EĪvąWIŽßëĄé‚ĢÃv4Ē[ ]ĐÂÂ[*SsKę¤'h6cƒ-ås/4ŒŠį5ÃÍV_´Đ‘Î4X3Ų´špkÎÛwt¨U"”v]ÎdKŋߙ葍;ķ—Z>ŲŊ–ãĨęˆ>`ķ῎ė•ÛĮ&5ІĒ)ˆÖ´ŲS’4Đ!ÅÁwŪĶęXķ¯MnĸÅ'4N]čãFčnŅĶ)2‹qÍĶĒ Ŗô7ĸ~ēŖÔLį<¯ŋnG$ūáÛ%×R\ĪšũžÃPsFíž.ÚCŨWŒ7ģ§æ}{Ë šŠgũš&ŋ:ŠûØ`Ŗ),ĸ ŅÔĶ’ŧ0Â=īĖ‚Ž+ī葲'ÖĶŋłöŪڝô^E4ĮŨö%„÷Öá{:`Áî’į7ßq$ë×;zl„ūz†ĮũúŦ§éŒŒm|3Ã0•aW^häl4õ§´īLŦčž"øKĄeĒNF‘Đđe?6|+ôķō@hÃg…zįŠīÎ}îœöt ›­Ē7îŅ™ēˆüO¤ĸ‰ŽĘĨBėvj%’kë_ĻΏfƒvøäiøÆ¨.ŗ˙ŗ™æ´áOÄIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment155UĄJü IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment149E 7– IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment156ˍF(IDATH‰]ÕŊnãFāĨ„ p6[˛ÖÁnęRZäM¤H Å5‚—ÁB€ |$|”ŖĄBŊ@r¤Ā‚eVQÁ°ÚÉĖ,tGĀ?âįágf×BQĮ) €ÜWĐÁļVgˆb˙ĸŨėQĩר@_A7/ [čļ†ŧІ‹õÛæ Í$tFį ũžå<¨„ŋv>-qeĢ~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzsĄ ™ä^:…ÚuŦ1‰}™$9¨^ļxĪß×)¯{ĘD-„Š“¨.%ũ;Ž%§‘u“āG/éÉôŧČđ+{T‹ÚŦ1SŽÉĸ# úoFå˜2 •ōˇ™˜ŖnōBMÁ)VņĢ“Ŧ"Ūę,Ģ÷A5ëCœįŦ†´…—Š ¨?Æë\UŨŽáØÍØ"ŌČ>$ë\° ąû î NˆyÂj%)ål9qíœFQ%×ÅŠ $ĢŖvÜ%SX iį{ũÎAĢÔ_Ķ$9ú†Ž•:hQÁΰˆ{VĐGXÁjĨXŊЅļ%FÔ3ZŪh˜+Dv‘Úgj:¸`fģįK508ÅNÔĸĻWŧeͧՅrŒĒ¤ŖūqĄŧSRu€ ¸č?S•Ŋ"ũ,nāģĐņu9ÆQâEM‡<×`“ķ ÔũH\˙÷ē‰đ}i_GîNNT^û¸ød}XįÃ-ĸŧĨuo}|œÕļč/+I}"ĄO›*(.Wœ•+Ô_Š&І 'v ģĖy)}Ä?÷ųB#ˇL%%Œ/Åú!rS"§Ž°šp0؎%ūÕīŠ{;č6đJŌkâD’jŦˇSŦ™ å(g õĒ?‘z­gBų˜Õ?Ũr9ŽŖ~YöJ™ęˆĢAŋĀØ7̏OķšĮ ~†ÉP{ŌfŌ6q†ĢU| ÷ sô ë9ŖŠĢBŽøv›Q_-Uv7˙™ĩĨÄ!…įIc™e˜œwPk¯zÔ՜,Ũô÷ͅΧpá4ėaRŧ_Ržp…Ŋڍ*4 —…Ȟ‚mPƒ‘?ŗEÅSąę5õ¯ä¨Fĩ'ĀķxXõfŦÜÉöĀ'j¯*ņ =TĮ ŲÎtœēž’ÉŸ m˛øĨŗĻršū˙ŨÚ¨Bu\(É/ģ;YTȎî=TĒ9Ĩ¯ NŠe87ÖjŠfBVqéSÚ|ÃņŠÂf9LēĻķ„Õ? %CáXoĸA[Néũ…Ö•¸ĨƒÎ?žĸ?ĄÆ&ęčĐ+FWC ĩø<ąQÛߙļ7Ÿĸ]6Š‹.ŖÂõš×ÍąÅysîˇļôĢIņ™ÛObīƒ.ÄLõ__¨ĸŗ=.ņ\‰ûØũĮá™Hjq÷$dČĒūTS#´eíHõĮjÅŖöƒĒIqĨėČ 3–kYĢIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment150%Ëžs(IDATH‰]ÕŊnãFāĨ„ p6[˛ÖÁnęRZäM¤H Å5‚—ÁB€ |$|”ŖĄBŊ@r¤Ā‚eVQÁ°ÚÉĖ,tGĀ?âįágf×BQĮ) €ÜWĐÁļVgˆb˙ĸŨėQĩר@_A7/ [čļ†ŧІ‹õÛæ Í$tFį ũžå<¨„ŋv>-qeĢ~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzsĄ ™ä^:…ÚuŦ1‰}™$9¨^ļxĪß×)¯{ĘD-„Š“¨.%ũ;Ž%§‘u“āG/éÉôŧČđ+{T‹ÚŦ1SŽÉĸ# úoFå˜2 •ōˇ™˜ŖnōBMÁ)VņĢ“Ŧ"Ūę,Ģ÷A5ëCœįŦ†´…—Š ¨?Æë\UŨŽáØÍØ"ŌČ>$ë\° ąû î NˆyÂj%)ål9qíœFQ%×ÅŠ $ĢŖvÜ%SX iį{ũÎAĢÔ_Ķ$9ú†Ž•:hQÁΰˆ{VĐGXÁjĨXŊЅļ%FÔ3ZŪh˜+Dv‘Úgj:¸`fģįK508ÅNÔĸĻWŧeͧՅrŒĒ¤ŖūqĄŧSRu€ ¸č?S•Ŋ"ũ,nāģĐņu9ÆQâEM‡<×`“ķ ÔũH\˙÷ē‰đ}i_GîNNT^û¸ød}XįÃ-ĸŧĨuo}|œÕļč/+I}"ĄO›*(.Wœ•+Ô_Š&І 'v ģĖy)}Ä?÷ųB#ˇL%%Œ/Åú!rS"§Ž°šp0؎%ūÕīŠ{;č6đJŌkâD’jŦˇSŦ™ å(g õĒ?‘z­gBų˜Õ?Ũr9ŽŖ~YöJ™ęˆĢAŋĀØ7̏OķšĮ ~†ÉP{ŌfŌ6q†ĢU| ÷ sô ë9ŖŠĢBŽøv›Q_-Uv7˙™ĩĨÄ!…įIc™e˜œwPk¯zÔ՜,Ũô÷ͅΧpá4ėaRŧ_Ržp…Ŋڍ*4 —…Ȟ‚mPƒ‘?ŗEÅSąę5õ¯ä¨Fĩ'ĀķxXõfŦÜÉöĀ'j¯*ņ =TĮ ŲÎtœēž’ÉŸ m˛øĨŗĻršū˙ŨÚ¨Bu\(É/ģ;YTȎî=TĒ9Ĩ¯ NŠe87ÖjŠfBVqéSÚ|ÃņŠÂf9LēĻķ„Õ? %CáXoĸA[Néũ…Ö•¸ĨƒÎ?žĸ?ĄÆ&ęčĐ+FWC ĩø<ąQÛߙļ7Ÿĸ]6Š‹.ŖÂõš×ÍąÅysîˇļôĢIņ™ÛObīƒ.ÄLõ__¨ĸŗ=.ņ\‰ûØũĮá™Hjq÷$dČĒūTS#´eíHõĮjÅŖöƒĒIqĨėČ 3–kYĢIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment157ģ¯+Đ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment151RĖŽå IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment158+6A IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment152ËÅß_ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR=!B ž¤ pHYsb&2 tEXtComment155UĄJüąIDAT•mĐ!ƒP ā.pĪâz ÄÂģŌ$ba/A0Į¸ /ˆÉ]aGxs/íZØÉjúĨųĶ4Ų‹`īå%>*xĄ,Ĩ! E  @†Æ&‹į‚€ÂnÃSØdÔ5Œ?œ6h:Ã:sŨƉĪĩa…+Ã<|!ĢĻˆ˙A†ÜoĀH­]L­e˛Ro 3éēcLšÖLöe"…cīčŌA(Äc‚p’ųf7ŋoú¨7̐ä‘[(IENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR<Xã@â pHYsb&2 tEXtComment157ģ¯+ЗIDAT•eĪÁ B1Đ <Æ„mÁ LKv%‡-ÁF °+0âÁ|X2fķŖˆÃ˛0$§›Ė‰ˆąļ™:Ō/8Ҍ˛ÃŅ+„ÜËbÄcÄOY)ĐÁČ ą"‘8l-RÃ.vŽ ø`ƒķáEqÂA‘9Ã4¸¨HœũTw°xֆLY:=&ƒŊĶĪuÃP“^ i˜P1˙’†IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment159\×§IDAT•UĪ1 Â@Đ ˇÜ@Ü+ļ’šRĘ’ XXæL’‹$x)§XwœÍÁî5Ÿ˙?d”0ÉDP§š`,āŠČ€+w@ЏōXSō6 ĖÜüÁ˜6€ų€;NáÅŠõĢ!:ƒˆŖOę >îČׯ š ĮÚĀøƒûl āh(Ãũbhũr×ņ†P0zîqéõW• Ō­ ƒđ…@´\2ԐŠhˇļōIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment163—īŧ ēIDATH‰íÔ1 Ã0 P‡ }„Ü$>š’vČĩb(ôöÔÕŪTPĢ&Đ1_C§ļÄ/­/ėÔXŖû1•hŨvę€FÕB—hŗé<íkiT8tj)ĄMû*V†Ē“ŠQ3ĶŲPÕkļTÁß:›ę-C‹&Ô፠SĄFĄ["ŦaÉÔđąÎĻvXŗ –>MŨjá‹Ē wŖ y<w&Ōg§ÖȨ¸~=oq~Ļoü=ôĐÖ’ŊŸ‚œXSÚ´' énpE1°5Q ’´d ļåƒW3ļČô'ļŠĩ^ÍÃptø;QIp ĘfåLQ­š­ŗĖÔIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment175g—(~ĒIDATH‰íŅ1à PG Œ\ 7)ĢDˇ^‹N\ƒŪ€lŽŠōëˆ1Ļc&›v“ÖŌâã÷üü}?āƒ•CĮkĻŗ.tāŋ+Ô¤Ÿ°˙C}N”kÂ}÷wŊÕd@$gŽDāā[ĐÔ6$ĨįeøÁ=|—AKīsĶĐ=1Dá; Åŋā/ųŅkvøŌDûļDĢۊ6÷¨ ¸Ĩc…&WÚēøų9ŨC÷™Ą…î ’æŽvH!ŽLŸb”Zœ•réjJÁwģä+A‚SFđōbYÖt Đ1î/Ü9ûĩŋŖGÃEü­<‡yU¨Y˛éZÀäK<Īį÷,#ås’įņ|ęsßēGģDßĐ&>¯ātŠÉÚw0%*Ū€čđ3ŖBL&š r?)/IĢĮS ›¨ÎÚEMEô-IÉöã)Žŋ }Ūäa#&yÔūlú;QŠ~kN}N&ņ%’ŗŠ(؇ņî,hU‚mŖ$%& r!ĸ¨Fš‡;3 ˜´Ŋ¨$Qō$Ē:\€ Cˇ`G¸X˜ĄN9’„F' u8ÛãUÉPUō˛ÎPŸaŧ{éɄl‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Đ(7C¯siŊÍ tMęZįšáÎ Ĩ.sŧOÉxËļs7’–­~ 4Æ)u]īŌĩ'ŌÂĘč’LKibáęĖ ¨V.Wĩg I˛/‡$ë•Ëž9Æ|!%*<ĢFĨWnpR~L LxĨŒƒ§&dž)y”aB ~OMđ˛Ō5ͨŨ\˜Tؘ2}ĻŨ Ą!ÆDOĶ ąąÕ 0~Üoh:ˆiluyÄf\žŲB̟×iœ3ĸ#‡¸Ôŗ•Sē†B¤íN’ˇ°RZi+P(ŋp4D“û”4kÃé$Á<̓í‹dįY¤lÖæåŠÂɘj§ToŅFJŨ6§ĄņJ”•Ē ‹Sĸ%F+χĐĨ<(œ­đQ‡7X}Õ4Jp€^.’w§kÜ`•áęŽŌÎ/Ņ,=ČķÉë-–ŽˆírX4ŸLĖŌfōyAŽgģŋ <6a(.žÃŌdęĪ@Īv•BŧŖl+¸ŧv ‹Ũ§˙`QĶ“HYđ”ÅõSÄeMGTYŒîX1#oî֛ÕˇĢũ*ĒJŽĶY%lME†ËUYDšPE[ef#QJK1íŪ KļĩgIÃÚ)û0‘¯‹xãoÉ žcČQ7n›8še o„]ԔęŦĶ™éäžOžŅhI›f ˛•ū:Ré{–ãN?”7Ŋ'HC‰×&Œ}ųGžqô¯FršĒi ¯,]Ŧ‚^îi ŊV¸>RĒĮ] ¤U¯đ|áĘäHe3ˇ¤V5ė)/ö^ā&Đ́ŌëĮĮ~Ū> ē'¸Ų)ŗ’†MĮōSē1Ņ%¸[GĘ]B{žo¨&ēߥ­ŠEai–=<]âEĨÛi°H\#l¨:öĨ;Ä,΂-ŗXvf>šÄېzô5åČ#ũ‹],(âĸĻü–^äZ\ŗ Ē›@Ã*ƒV”c=u=%ēÃnąÆ¨˙ ņ-œ…ÜIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment170ũÜņÉIDATH‰m•Ī7ĮŸq„9иG*Ņˤ9ôJOå°Å˙ UšŽÔCĻŨ1Z)›CūHû§Ô[¤ėĄU÷ÚCŧ‹TŽ&HÅ´Ãŧ>›v“ÖŌâã÷üü}?āƒ•CĮkĻŗ.tāŋ+Ô¤Ÿ°˙C}N”kÂ}÷wŊÕd@$gŽDāā[ĐÔ6$ĨįeøÁ=|—AKīsĶĐ=1Dá; Åŋā/ųŅkvøŌDûļDĢۊ6÷¨ ¸Ĩc…&WÚēøų9ŨC÷™Ą…î ’æŽvH!ŽLŸb”Zœ•réjJÁwģä+A‚SFđōbYÖt Đ1î/Ü9ûĩŋŖGÃEü­<‡yU¨Y˛éZÀäK<Īį÷,#ås’įņ|ęsßēGģDßĐ&>¯ātŠÉÚw0%*Ū€čđ3ŖBL&š r?)/IĢĮS ›¨ÎÚEMEô-IÉöã)Žŋ }Ūäa#&yÔūlú;QŠ~kN}N&ņ%’ŗŠ(؇ņî,hU‚mŖ$%& r!ĸ¨Fš‡;3 ˜´Ŋ¨$Qō$Ē:\€ Cˇ`G¸X˜ĄN9’„F' u8ÛãUÉPUō˛ÎPŸaŧ{éɄl‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Đ(7C¯siŊÍ tMęZįšáÎ Ĩ.sŧOÉxËļs7’–­~ 4Æ)u]īŌĩ'ŌÂĘč’LKibáęĖ ¨V.Wĩg I˛/‡$ë•Ëž9Æ|!%*<ĢFĨWnpR~L LxĨŒƒ§&dž)y”aB ~OMđ˛Ō5ͨŨ\˜Tؘ2}ĻŨ Ą!ÆDOĶ ąąÕ 0~Üoh:ˆiluyÄf\žŲB̟×iœ3ĸ#‡¸Ôŗ•Sē†B¤íN’ˇ°RZi+P(ŋp4D“û”4kÃé$Á<̓í‹dįY¤lÖæåŠÂɘj§ToŅFJŨ6§ĄņJ”•Ē ‹Sĸ%F+χĐĨ<(œ­đQ‡7X}Õ4Jp€^.’w§kÜ`•áęŽŌÎ/Ņ,=ČķÉë-–ŽˆírX4ŸLĖŌfōyAŽgģŋ <6a(.žÃŌdęĪ@Īv•BŧŖl+¸ŧv ‹Ũ§˙`QĶ“HYđ”ÅõSÄeMGTYŒîX1#oî֛ÕˇĢũ*ĒJŽĶY%lME†ËUYDšPE[ef#QJK1íŪ KļĩgIÃÚ)û0‘¯‹xãoÉ žcČQ7n›8še o„]ԔęŦĶ™éäžOžŅhI›f ˛•ū:Ré{–ãN?”7Ŋ'HC‰×&Œ}ųGžqô¯FršĒi ¯,]Ŧ‚^îi ŊV¸>RĒĮ] ¤U¯đ|áĘäHe3ˇ¤V5ė)/ö^ā&Đ́ŌëĮĮ~Ū> ē'¸Ų)ŗ’†MĮōSē1Ņ%¸[GĘ]B{žo¨&ēߥ­ŠEai–=<]âEĨÛi°H\#l¨:öĨ;Ä,΂-ŗXvf>šÄېzô5åČ#ũ‹],(âĸĻü–^äZ\ŗ Ē›@Ã*ƒV”c=u=%ēÃnąÆ¨˙ ņ-œ…ÜIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment179n!dUIDATH‰ÕÔ=nƒ0p$†Ž¨'đQ8W'gËV.P5įčDļŽ9‰2d+â(Ưøųl'ĘP†đãŲp‰ļĘđ ŪRĘãzø@åÔŗuKᝎz-ĩŽQWŸ;[[ÚjŠÅ ēvY˛ë”’NĒ;#‘ŨMgbųę­č,ŗØ U 1 ŊŅĘQ5+Ŋ1kGaĸßcíNiáúÕÚ`"žˇzŲ~ÄVgVĩŊ)j|ŚR†ŊŧdR53Ĩ…“yĸõžV!U16ŒĀLksBXŪ…ją‰’“uBAŧD•—ø ĔĘūQŽ+ޜ„´ÖGŦu˙ČÄŧwôˇdíLŠsŪĨkcĪęŋé?ÖÖQá*ö•Ŗî^$õčéŦļsĻzĀŗHæ#Ɗ­¨Å/&ē^áÕ ëá7w”zЈČŊZĢ'ŲŊ‚§cÃíčkĻēŧ¯„2÷öÖ°öúɇ×ËpW5:ŨœĪxÝwC,P9r™ÔtíÃÚ/ĐįĨzPÅĶtI*Ŗ$zēáH™IENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment171`úėgIDATH‰ÕÔ=nƒ0p$†Ž¨'đQ8W'gËV.P5įčDļŽ9‰2d+â(Ưøųl'ĘP†đãŲp‰ļĘđ ŪRĘãzø@åÔŗuKᝎz-ĩŽQWŸ;[[ÚjŠÅ ēvY˛ë”’NĒ;#‘ŨMgbųę­č,ŗØ U 1 ŊŅĘQ5+Ŋ1kGaĸßcíNiáúÕÚ`"žˇzŲ~ÄVgVĩŊ)j|ŚR†ŊŧdR53Ĩ…“yĸõžV!U16ŒĀLksBXŪ…ją‰’“uBAŧD•—ø ĔĘūQŽ+ޜ„´ÖGŦu˙ČÄŧwôˇdíLŠsŪĨkcĪęŋé?ÖÖQá*ö•Ŗî^$õčéŦļsĻzĀŗHæ#Ɗ­¨Å/&ē^áÕ ëá7w”zЈČŊZĢ'ŲŊ‚§cÃíčkĻēŧ¯„2÷öÖ°öúɇ×ËpW5:ŨœĪxÝwC,P9r™ÔtíÃÚ/ĐįĨzPÅĶtI*Ŗ$zēáH™IENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment180eĀ> IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment172ųķŊŨ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment181įbđ¨ÅIDATH‰íÔģ Â0ЇR¸##d¯ERa• Á Xĸq¤‡/vBék @qãâčųsũTÚQ~GÃŌĘęāĨ‹Ûލ*ŗJYÃŦ*ļZÛķym˛f—ˇąĄ í#ÛoVPõĀ#UķÚ ēŠ*_3îĐŨ/nZÎjŅIË9ŋ4ļT/@E‡ÕP5oÔqItŪ¤ãžk“”f••%9f=vc[4¸ųō ǘŦŽ|úYxvsRŒW¨Šž_ûe˙ÆĒĢŽúúX ųŅbIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment173ŽôKÅIDATH‰íÔģ Â0ЇR¸##d¯ERa• Á Xĸq¤‡/vBék @qãâčųsũTÚQ~GÃŌĘęāĨ‹Ûލ*ŗJYÃŦ*ļZÛķym˛f—ˇąĄ í#ÛoVPõĀ#UķÚ ēŠ*_3îĐŨ/nZÎjŅIË9ŋ4ļT/@E‡ÕP5oÔqItŪ¤ãžk“”f••%9f=vc[4¸ųō ǘŦŽ|úYxvsRŒW¨Šž_ûe˙ÆĒĢŽúúX ųŅbIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment182~kĄŗIDATH‰íŅ; Ã0 `… s„ö&>š]2tė•<ô1ž@LLUģMR PēX‹‡ ũ2 PūŦŅTß|d4`2*-šÖ+.p¸3Ą¨ât}ŠՊ“íĘė<#F}ŖđĢxu4á‰l~k@Ķ‹ÚņęąUÕŦZėŖĸÕaIģSįĒ“Đ;ė×Į–Ú ՂzQįĸÁҚa,™˙0”ŧy䕤ĪdVhÚ´iĶ_čuģ0)ß­IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment174čŗIDATH‰íŅ; Ã0 `… s„ö&>š]2tė•<ô1ž@LLUģMR PēX‹‡ ũ2 PūŦŅTß|d4`2*-šÖ+.p¸3Ą¨ât}ŠՊ“íĘė<#F}ŖđĢxu4á‰l~k@Ķ‹ÚņęąUÕŦZėŖĸÕaIģSįĒ“Đ;ė×Į–Ú ՂzQįĸÁҚa,™˙0”ŧy䕤ĪdVhÚ´iĶ_čuģ0)ß­IENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment183 l‘„ÆIDATH‰íÔą 1 Đ8Ũ"Üũ!ŸÖÁ_Rü ‡ŽV\:”Æ\īļ6Ep9ä2dyiI-p%:˜•Úš”äÁ”ĄqŠFĀXÕ i7;Ņ–ËꓮUxēGĢŠ¤‡6oŌįʃ:U_ĸd‹,÷UŊІ˛úIQĶŊ~VšÔĢÚčJŖē˛öŋĐŊŒJUíoXŌŨ¤ĮļĻ›\áNW2|žt›+ŦDĶ6¨Ē.šL;#Ûāƒū~ߊj^˙Æĸ‹.úīúÕøÁ§íņ IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment175g—(~ÆIDATH‰íÔą 1 Đ8Ũ"Üũ!ŸÖÁ_Rü ‡ŽV\:”Æ\īļ6Ep9ä2dyiI-p%:˜•Úš”äÁ”ĄqŠFĀXÕ i7;Ņ–ËꓮUxēGĢŠ¤‡6oŌįʃ:U_ĸd‹,÷UŊІ˛úIQĶŊ~VšÔĢÚčJŖē˛öŋĐŊŒJUíoXŌŨ¤ĮļĻ›\áNW2|žt›+ŦDĶ6¨Ē.šL;#Ûāƒū~ߊj^˙Æĸ‹.úīúÕøÁ§íņ IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment184—'ŋIDATH‰íŅą Â0ЋR¸ô7J6#ĻrÉŦbD‘10ĘF4‘ˆüqRûŽAå_Yz:uŸ ÄŅõž?N‚$bô‚"ņ­Ģë˛ëŲÕ5m:pf;MqD GA/˜íį Ŗč ũUT˛ēøÔh´“ŽyŸŨˆÂ‚ûE˜ļũˆMÍŦ—K)ūV?‰žIŊ˛ë˙ŗÎ:ëŦ­ūGoÚįî?1IENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment177‰™IRķIDATH‰íĶ1NC1 PW˛5@ G`ė€š+ud@$¨CĮŽō+FŽÔ d´DˆņoĢĀ÷˜'9ļlu"ÂŌEŅWXŌBŅčX ( “â6čjŊ–š€Éč”Ē\ CG‘†TŦŦÅũĐ[Ēu'Ž=5¯’RõКKAņĒ÷ĸ–pŌ´U4Oú•EŀĪŦY35)ZWŦī˛ōĢeŨ4%û—î%õ4žÕė\Oã]Üy$|áéÛ¸ļ˛n:ōÆĢš>˛ēøÔh´“ŽyŸŨˆÂ‚ûE˜ļũˆMÍŦ—K)ūV?‰žIŊ˛ë˙ŗÎ:ëŦ­ūGoÚįî?1IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment186ye ČIDATH‰íĶ!Ã0 ĐD=Bn˛jd jÆ{ĨN…ģBĒ`†™å/ÛhlRi(ĻØō˙ ÂÜÔA}Šę‘ ĸ­k6 ęę ‚Âîë:l„ĮÂęJnÚęJEŖë…ÎAGK‚fKŽĶ;%AውĻhĪiõ$)é(Š’õ*č>‚.4÷ú(j’tJŖ¤ųÜņœ˛ã4˙”IN:ÁgpŠ‹ēė ŋ×5¨~yaeō\4hĻ)¤>=Š–ščģXmwŋiĶĻM˙Ĩo]zķßę~5IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment178&TÃČIDATH‰íĶ!Ã0 ĐD=Bn˛jd jÆ{ĨN…ģBĒ`†™å/ÛhlRi(ĻØō˙ ÂÜÔA}Šę‘ ĸ­k6 ęę ‚Âîë:l„ĮÂęJnÚęJEŖë…ÎAGK‚fKŽĶ;%AውĻhĪiõ$)é(Š’õ*č>‚.4÷ú(j’tJŖ¤ųÜņœ˛ã4˙”IN:ÁgpŠ‹ēė ŋ×5¨~yaeō\4hĻ)¤>=Š–ščģXmwŋiĶĻM˙Ĩo]zķßę~5IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment187UįIDATH‰íÔą Â0┺ēå!\Åž–ƒpGÁW‰tđ5R|ˆƒBÎ4i{ÉŦŌ[?ŽÜũ$a˜Š†ũŽjp%ĸH¨S ã´ڀJ*>,4iŊŲ:Ĩ({Õ)UŊÚŦĻföÚyMíĢPČé ƒŠēˆē9]pJ} aæōDŠeqĒ*Ąq_NęKJžÛiTÚšŦÚ¨[RnPAéŖŌYē¯;B¯ŖŽ/Ũ-%Ĩ.ĻaĢŠJ¸9÷Ęōæ}ČwĻ :é5Œû—ĸ4ĖņvÚ{ö+E|Nęģ~†Ygõīõ čÂėl;xęIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment179n!dUįIDATH‰íÔą Â0┺ēå!\Åž–ƒpGÁW‰tđ5R|ˆƒBÎ4i{ÉŦŌ[?ŽÜũ$a˜Š†ũŽjp%ĸH¨S ã´ڀJ*>,4iŊŲ:Ĩ({Õ)UŊÚŦĻföÚyMíĢPČé ƒŠēˆē9]pJ} aæōDŠeqĒ*Ąq_NęKJžÛiTÚšŦÚ¨[RnPAéŖŌYē¯;B¯ŖŽ/Ũ-%Ĩ.ĻaĢŠJ¸9÷Ęōæ}ČwĻ :é5Œû—ĸ4ĖņvÚ{ö+E|Nęģ~†Ygõīõ čÂėl;xęIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment181įbđ¨IDATH‰íÔ;nÃ0 `4jí^Ą[— ŧ–‡"琉šRŠŊ†r‚ĘčB„X:ɔ’ē´@-hû ×/QAZVũ=e”AäĶŅ‚5t’m­y‡’;SYĩÂXĐ; ŒŪ瓤ė)á¨ÚūP‹¤âĪ\öpŅXJ[Ōķ>$S5ĢYƒŠŦZ4Éhč5įA59Ē]MÛS~L<§ą5•Ú(œúđ –žĒ•FÁ,QęE? =ËaĒą/x°5ĪÚbcëiVę6Kúdëņ4ī™ĸĨãM9ߴס¯ŦYqzģG íáLö{VÕ+Čn-lô~Kđ+ô]¸YŦßãû7V]õęG6ŌÍÃVÁ^IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment183 l‘„ˇIDAT•5Ī9Â0ĐĪĸĐÅ7°¯Aė›%†’–’›ĸāA”PēÍgƒ5ÅĶŦ2č8&Jqŧæ8ēמ ėeĶbpšîëŅū–SubŌ-û¤–l*čę@m ¨Ū@CŊeËĮ ƒEœ°Đe[p\ĐOˇüŒįšA–ÜrēūĐ?ČĄ"'CøŖd>Šö<+¤`ŽĶJŌëĶ7ĀLÃ=w-€.—Ÿ‚CDŠĐ{oũŽË?qą~‡IENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment186ye ēIDAT•]Đ;nÃ0 `ÚÜÍžAxÔƒĸ€ sĨzē*)GYB€Ā7|€›§"˛ā¨2ˆņ5Sf‹ ōDÄUVĮŦF*Ŧ¸ZŊXqޟŽEå\Ķ´cÕ4;*/ę+י;(îˆFąhr€ŪĘGč8;‚÷a{?i#jrP›%ƒ6Ä"[ļŌņķÄī *UŋÔĪšT™(LØd&ØB <ād˙Æ›ũŊl˜ÛãāŋIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment192gpS°IDAT•=Ī!Â@Đ_Uk {d{-mHŽTRQÉčļÁŒØĖgvĄMF<1ų$į+)``Ø ’'lŗ×ŊS´€WīŌé`Hū.˛Ãą¤Äpû( ōC2ŒâyÅŅl'6É÷¤É9ęúÔf°~2ō7C œFΗ äqÅ´â1”œ‰ž ž4t¯PđX…ĶšŅV¨ΰÁޠ̏pŅö ÷4•ufy‹įIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment194Ž5fŖIDAT•UĐą 1 Pį hŽ`€0 Y…IBĸ)UnfbŖ"E”ģčt–lŊ²-€g%.Ķ]P œAŠ”5NŲŌ¤Ģ1["]6D$KIg1YnÎ&Ęnß@‚bN“VÅŌ—ždSv€O( n.’€Ĩ" kÃX%9ÃĨbZ+ēáģiĮĩ!ęIz,ˇ#^ā ÁØcZ1O ˜1Ŧ7GœļU7d~ū!îč*Äų,åČcV ‚ĮG ĀÛĸ?Īĸž ôJlŲIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment201-ũÄųäIDATH‰íÔ!n1PW }„šIæJ…UŊRAá!GIĒ‚…Ŋ‚ŖĄ^•L¤‘gUę1Ø ü$ƒ?t2†]wŨu×˙ÔÃvū:*J¸r[KH¨­Ģ¤üclëĸŧ,•‡ļŪ•į›’ŖŗéĒôŲÖ“âęõ­Ģ'ĶÚŅĄS[퉪)9úz4Uvē*īą$qyĶŅyššNNĪøĒTŌŲiƒ)đáhėiĨޞОŖŠ ņôD7WWMŅ×R\$œ LŗĀicģëë$Õéy|zķĩגzzĮsũ O úîČ5ņ™IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment203ÃķĨÕŊIDAT•UĐ1 Ã0 ĐčđžˆŠ¯Ōƒ'ĨCÆĄWąÉĐk¸7p7 ÂĒ’’ĄÁ[ô%˛ĸugäVНpˆd˰%‰†Æk–uĄą‡Íbē*J°ÛÚˁ&“8 @í[ę r˜”)˛":HbÍÔ] ŸëĐC Ēa¯ã ģC:°?đ¤ã4TŲnÅŸoŽ?Dė˜:ˊĨhyŽĨö;Äëa­°ev¸ŧ„|Ŋ1ôŧ÷UB“v­‰ÜIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment205*āÃIDAT•5Ī1jÃ@Đ 1¸YP›€a/bŧ×JąH6 ¸Ü#ä*.|ēĀw÷!MūĘÉT¯$5‘ŲS"Ëę+ĮŽØaŧ°\‰€keųl(•Ũ8â[ú8Ņ13šãkÛy—cڇ0Β“ o—úŅpĀTĩ!āgl8prä~÷‡Áąwô°v­CGÔļ X˛'”7<ŗĻ†õ‰ŲÖ¸hō`ˇˆã –›ôĄá~—5āRÔĀ‹WÍā–úŲ~Énž|ՆŨ"IENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment208T!|]ĘIDAT•5ĪąmÃ0Đŗ Ģ37×H!ˆkšHĘ\F#xÚ.RjĘ „%ŧ|:ȝŽ8ÜGÕlW‘;&Ã`‘vŒš~Dƒ"z<#įŽöGŦŅ-—jX’SĪâŽĢîYpKŖŪfAĖæ Ÿ‹ž >LšÔ§ā$B#î N†Üpį/īDĐ ė°UƒŲŖÁäÎ(Npr™E§Ė~ūą•Šá…Ģļ?Pāđ‚÷x€ëW{;~¯z,dš1Ɂc­ŋûr›$E×ZøIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR@!A琌 pHYsb&2 tEXtComment220hĖ–íŊIDAT•EĐ=j1 ā7¸p9ø"!:š=Lą×ō’bËaR¤UǍ0~k™„}ÕúA$ŠÄ„&6qÔȒĐk včFãeG›ÅkOī-ŗv9qę?L¤š8Lâė-TËĐ\&ÄQŊ'\T.‡ãĻÂāāÜjģOąp${¸ą‹cDZÖ|b$ęp˜đŗ›#˗ŲŧG‡|kĪ´W)črG…”­ Q Ø8ä'ī ‘øĨ§­ˇĖüđÎĻ>‹IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment222†Â÷ÁīIDATH‰íĶ1nÃ0 @4ō üF‡ úRĮE•ĀƒG)…Đ/¸đd(¨b-g%U c`. %’mÄ MaĶOUôĩĶÜĖ’<9zI"›õWēIœ/ļ@Z8™šA3NM•Tĩ÷4ö›’­ÔķŽ2žųāĒāy>`øŸRĮĪÔPyõõ=(GO5SČ UWõCŨĖL:54é°j´õK•FW§īBŖ7AŽ9Žƒ§¸ä´îF2ĩ„I§ë^AĮ@‹…ĩĪūŌxu”7Ŋ™ Uå%eķŽ/Šõ,žŪclĒsĢ]wŨõAõqŪŪ›ūwģđIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment218M:MīIDATH‰íĶ1nÃ0 @4ō üF‡ úRĮE•ĀƒG)…Đ/¸đd(¨b-g%U c`. %’mÄ MaĶOUôĩĶÜĖ’<9zI"›õWēIœ/ļ@Z8™šA3NM•Tĩ÷4ö›’­ÔķŽ2žųāĒāy>`øŸRĮĪÔPyõõ=(GO5SČ UWõCŨĖL:54é°j´õK•FW§īBŖ7AŽ9Žƒ§¸ä´îF2ĩ„I§ë^AĮ@‹…ĩĪūŌxu”7Ŋ™ Uå%eķŽ/Šõ,žŪclĒsĢ]wŨõAõqŪŪ›ūwģđIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment223ņÅĮWÎIDATH‰íĶ1!Đ1trį"›ėÍÄÕÂŌ#š K¯ 'pėØHøŽÖ~*›%„æ…ágAeläĮZbMMą‰8íD‹#ēuĨQcĒģŧWĻm—@ĩ´ÃĪÎÍqxƒj?NÆÔ÷ĻŽVvŊ…šĻ@+×Ĩ%MõÖUøŽ4;vŋ™ë7)W‹TŗÂ@5ĩ¸fNŸgÃöڈ×[‚r=?ŠŪŠîšŊP•EÚĢ"ŽĸYœM獍f‰æwÕ÷jrüũīžuÖYgũž;ņj¨d¨ŨIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment219:=}ŠÎIDATH‰íĶ1!Đ1trį"›ėÍÄÕÂŌ#š K¯ 'pėØHøŽÖ~*›%„æ…ágAeläĮZbMMą‰8íD‹#ēuĨQcĒģŧWĻm—@ĩ´ÃĪÎÍqxƒj?NÆÔ÷ĻŽVvŊ…šĻ@+×Ĩ%MõÖUøŽ4;vŋ™ë7)W‹TŗÂ@5ĩ¸fNŸgÃöڈ×[‚r=?ŠŪŠîšŊP•EÚĢ"ŽĸYœM獍f‰æwÕ÷jrüũīžuÖYgũž;ņj¨d¨ŨIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment221ËĻ{|IDATH‰íŌŊ € €QŦ,ÜĀĩ,Lp7 ×Đ ¤ƒˆ  ĀGĸĄ0áڗģËũˆ1‹‚ē’:Č~´W Ö  Ú‘_t’ sCFjŖž¨ ŠÔ׏Uöĩ# íkÕ¨[1ŨM”QܕÅ߸LãŌ´U­Zĩęô-C8q“Ņ3zIENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment223ņÅĮWPIDATH‰íĶ=nƒ0po}ƒú•:øZ"ŒÔ‘#ä0 ŒĄAé[ 5ʋ˙}n ÅųčZU7ķÃđž,đÃ*Åŋԭ͞ē´%1k0™žk”ŦvRĘ5„ ᎚ +íÉÜVÛ jGzÖ<*ėåâmč“Žg ¸RyWmŌã9Ē1WŲ-qV­ „;ÚĖÚqôp\˛lčIqhĨh,ŋą^jWÅB#uĄŖh7M\eߎ@:>skVŨ^¨JĩMųցŽ4j‹¨JĄĻå}V8Ėē6]”KĨSŽ’ÕVd:Ļ. _ęųĮ5^—zZl“Vž”ų:ëHPŪ_h5éδĪēôÆŖĩīÁ1ÛIŨōāG|Q}ĘČ6ë€Ĩ IBíŌ\ŲÖvs8Í˙T !ƒĐCäîĢĘļĻũâėIĮ4íē Ø´—jžīŅÍ%ûî?ôĄũ‹ú ~ō×劋ԧIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment226¯3ØÄIDAT•5ĪÁiÄ0…á' Ŧ[´x ë–RĀ"É1ė5-MH#rÎ)P4-ėíƒÃ?h¤ŋǞ@‚VR™QrĐ6ĄÅë2aį.@¨‰J7Ä3w›ây%n4ÁÜčœ¯ÁĐŧM†ˇ'ęÍŗ\JM~ŧ€9‡MŒÖ/ņēiB†]{˛‹Ąnyë€5Ÿ: 9m ¯Ÿ2đŨׯY÷ŖQą/2\ŗƒe Į@‡ĶŧŪí7ĀWplzĻ)vW.ŠKāIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment235ŊS#ĖIDAT•5Í!n1Đŋ2hZækŦ2WĘĒĩ#ƒe͕lô¨ 0†Ņūڑ:Ÿ<4pšįƒhŽE˜ļđ–'jĄ¯šE_˜öءŽn€]åÎL,]÷;w]ŋëÜāĸüdŠ/ėķ< ?<’i†ņĢDsԌŅõSÉ+¸đadiqāđ˙d́§FiįĪŌÖPĐļ7)°c•w…]ŪÅā2 ļ`æ ›¯}ôޝ~"É퀅%Pä_ļHŒŧ拯q“ÅÛļBĻIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment238 /žÂIDAT•EĪąm1 …áŸPĄ&ˆn€Zá&Če”xƒ €eÜYIŽn uiYǤP wđ=’ž ŽM •XQ˛WBa'9ÅgV~Eß\Ž ņV?ÜŊÁ–ëûáX~‚+Ü,ˆÁ[7D?Ĩt‚Nä‘âÄqÉzWÎcā'†¸jëŨ˙Ņ-žƒKŨΎXWšæO¤ZŽ8Cn_‹ā^ŋƒ6I{‰bįD'ú‚Ŋļ2ÃŦtgf„fŋĪĒ8D˙FŖe“žqeIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRA[TNĘ pHYsb&2 tEXtComment240>–1kžIDAT•5Đąm1 …áwuž°ÍWVé52† Ãb*—^ĀÃđ"ō*YĮP:_÷‚ø“Đd–ŒŅĸ­dȌLiEbŧ&—.Äx—\g•$$kW5‹ŒTcŖÚ…Ģ+t….vũn‚ë\¨ !~ĈĪ.Ÿ‹û÷&ģéG_i×aQ˙īĪu’ŸMrģ ĩëTŊ ŽĒˇŋßJ H¨e—Wûˇš+ËŦGęYY‚öÍ1™LãđkãĖ˙3V‡Ļũ™É‰IENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment250'*¸IDAT•5Đ1Â0 ĐHd#@ÍMڛ‘@FŽĀURu`ä E Ŧ•X:DųØVądë-–ėZ}+t~˜NøŒĖ;ĸÅcT4xÁÄėJ{Ā}Ž9,q čVŒœã/Ā3'&E Š$p†Ė´SŒ¯Ŋ‚gŪΆžˇÁāČŦ¨~E t+–Čģā‚šVox•â†9 –ąBöüXēŌĻøž´"¸zl oz}YB@`˛4RäÛđ’Ž?ZŊŽĘĒą)IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment253ž„QĸIDATH‰Õ1nƒ0P:uk† ×čTĄ7*ɔ‘Ū WčĒĸ*#GQ†ŒNÄBd‡_Ûü¤~ pxØūØ?I ˆ~h´ ú,(!­SĶ!7§zĸ‡A5jÅęv¸­Ė! ķ9Ų×̌TFã˜NUeZƒ÷ 48T˜M{G?û›gēŅQßi4ƒŠ”fķžĩ[)œëaPģT6Ė ŠÖļļk“ČDq•-Ãžō:}Mģ:Ē‚~•ųAhŅ 3¨2Ög-°ë˜ķ´¯ģA(ÄgeT'´[ŋŦŽHÅŨZ“Zø#™U˙8<÷“Ęy1ļÜ.˟´cõ„-Eée–¸ģéĒŗ‰œrVQąV;JũŧLĩī[NŠĶ-û=2U'i­ÕĻ ēEÍé’X+Œo33Ĩ;xÉ÷&Ģ<Š|ACÎģ3›ŪŧŅķvĐå„^AkŲŊzÁMÔ¯„žqõŠ83Ũ×ÄĮdŪÛß žVOŗ‘Ŋ+V!­aĢᔩ+ŦyNššÄø¯^YŊÜŅ#Š’U\jBKw9ĻßW¸KĨSÚ.Ũ/Ąž¯LŽŦŧšuū^ˆøŗiâIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment249GJ‰ĪĸIDATH‰Õ1nƒ0P:uk† ×čTĄ7*ɔ‘Ū WčĒĸ*#GQ†ŒNÄBd‡_Ûü¤~ pxØūØ?I ˆ~h´ ú,(!­SĶ!7§zĸ‡A5jÅęv¸­Ė! ķ9Ų×̌TFã˜NUeZƒ÷ 48T˜M{G?û›gēŅQßi4ƒŠ”fķžĩ[)œëaPģT6Ė ŠÖļļk“ČDq•-Ãžō:}Mģ:Ē‚~•ųAhŅ 3¨2Ög-°ë˜ķ´¯ģA(ÄgeT'´[ŋŦŽHÅŨZ“Zø#™U˙8<÷“Ęy1ļÜ.˟´cõ„-Eée–¸ģéĒŗ‰œrVQąV;JũŧLĩī[NŠĶ-û=2U'i­ÕĻ ēEÍé’X+Œo33Ĩ;xÉ÷&Ģ<Š|ACÎģ3›ŪŧŅķvĐå„^AkŲŊzÁMÔ¯„žqõŠ83Ũ×ÄĮdŪÛß žVOŗ‘Ŋ+V!­aĢᔩ+ŦyNššÄø¯^YŊÜŅ#Š’U\jBKw9ĻßW¸KĨSÚ.Ũ/Ąž¯LŽŦŧšuū^ˆøŗiâIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment254 āÄ3×IDATH‰mÔŋoã6đ§Ķ AŲ1ƒ)ŊĄĢoK&üWŌŠĢÛĨ>ĀgÉ0Pĩ“Ö9äoč_PĨšŅë¸BĘeđx <ˆF)Ŋ~ŠŽ,›Āá~ôH>>’ÄĖ9Qę)JiL¯iNKöČßfŧäˆ:ÍĄsw­æ”° oÁüÔ¨‚ē9ũuZIVSJĖŲ‰į”"6Gėß3脄™Ÿ¸w#§h‘Ķ—ŸŠëÉĪĨšKN˛ÕąņķčlLūz§&R‡ŋxÔĩFti¤JĄâFI=ņtXyė(jUjŠs¨|¯¤ųIh†>˜ąUMtŠåī}u^…‚šÂ?ž[UÉÜ=~p+I“€Y˜žãŠ )F$mROģéøqZÚĩ†l5˙ŠÆA0Ú|ō‘8i#„A<ëV‰&ĶÉ(üŒÔČe("=Æ'øöYĐTkĐOčõn[Dųĩ9ą Į@؞ĮڋûZ6UąĪĨr ‘W/Ē)!$Gī8ąę7T՛éÄņŨķ”ųAđŽ5ē\ëg肃oxÕSˇų•ˇŨV„E?0ßî+†û™ t•ĖŲPOŨ‡’‘ÔŌYsŋ=ڑŨä*yõTCĢĪČÎĘŅyąëgNę|Ą>yøųœūØEŠ:ŸFķ+ōësĢZ´Ũ6ZĄĻXRÉÚŲ͏­U…Ęŗ…@ËđßúFtzņĘãĢWaÕięw*ņ#į­ō?ëĨaS#7’/9"íú lE­ŠKvČ^ەŠļ+é°ĩÚÔ­<ĻkĢEyLÔŠc7ĮFÆ&UvŪ§eĶ• ”ę5ßŨ7]I_ŋg}=ļēx:ĸŦōą §hJˇ7onŠ?ķŪ˛˙kįNüËWįčQ=Ũ°Ŧ¯É?|õ=۝V¸tV35ŗķÎŋŨ›ŌęŸĐUaprĒųåÁfÜB“ĩ!ÁųÜmēz§vŅÔ]s:ŗšu¯ãr:Å­—ûųÖZTx-ōŠ˙„'­Ģĸa Mŧ‚#××rmđ@n_Bˇö?˙ZčS‰ī͛VMģ“,rYkˆķm稞ÕJ¤ŗSĪ×Ķ$îBzU€†ŋz˜ņ!>8Y¨žˆÂHŧÕŧŒÃr°ÍĢå´äEšÅČx0ņ-˛//Zą§eĢí›ŊkØš {Ĩ&Ėŋ uSĪk¯'Öķ ÉaėwxVöLŨr8ŧ ’o„ÕŒíF™}ũ‚hæ;Y}î”čÕĖŖUˇMåP}ãQfƒ˛n5}•|o3 9žÖĢ]/5ĀŲÜžb1H:Ū)Ņ)íē¨=ĮNĢĢŖÚQânŪæ•Ėģ[Õ^­ĒVQ‚8Ü;ú–ŗ‰8ŒIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment250'*×IDATH‰mÔŋoã6đ§Ķ AŲ1ƒ)ŊĄĢoK&üWŌŠĢÛĨ>ĀgÉ0Pĩ“Ö9äoč_PĨšŅë¸BĘeđx <ˆF)Ŋ~ŠŽ,›Āá~ôH>>’ÄĖ9Qę)JiL¯iNKöČßfŧäˆ:ÍĄsw­æ”° oÁüÔ¨‚ē9ũuZIVSJĖŲ‰į”"6Gėß3脄™Ÿ¸w#§h‘Ķ—ŸŠëÉĪĨšKN˛ÕąņķčlLūz§&R‡ŋxÔĩFti¤JĄâFI=ņtXyė(jUjŠs¨|¯¤ųIh†>˜ąUMtŠåī}u^…‚šÂ?ž[UÉÜ=~p+I“€Y˜žãŠ )F$mROģéøqZÚĩ†l5˙ŠÆA0Ú|ō‘8i#„A<ëV‰&ĶÉ(üŒÔČe("=Æ'øöYĐTkĐOčõn[Dųĩ9ą Į@؞ĮڋûZ6UąĪĨr ‘W/Ē)!$Gī8ąę7T՛éÄņŨķ”ųAđŽ5ē\ëg肃oxÕSˇų•ˇŨV„E?0ßî+†û™ t•ĖŲPOŨ‡’‘ÔŌYsŋ=ڑŨä*yõTCĢĪČÎĘŅyąëgNę|Ą>yøųœūØEŠ:ŸFķ+ōësĢZ´Ũ6ZĄĻXRÉÚŲ͏­U…Ęŗ…@ËđßúFtzņĘãĢWaÕięw*ņ#į­ō?ëĨaS#7’/9"íú lE­ŠKvČ^ەŠļ+é°ĩÚÔ­<ĻkĢEyLÔŠc7ĮFÆ&UvŪ§eĶ• ”ę5ßŨ7]I_ŋg}=ļēx:ĸŦōą §hJˇ7onŠ?ķŪ˛˙kįNüËWįčQ=Ũ°Ŧ¯É?|õ=۝V¸tV35ŗķÎŋŨ›ŌęŸĐUaprĒųåÁfÜB“ĩ!ÁųÜmēz§vŅÔ]s:ŗšu¯ãr:Å­—ûųÖZTx-ōŠ˙„'­Ģĸa Mŧ‚#××rmđ@n_Bˇö?˙ZčS‰ī͛VMģ“,rYkˆķm稞ÕJ¤ŗSĪ×Ķ$îBzU€†ŋz˜ņ!>8Y¨žˆÂHŧÕŧŒÃr°ÍĢå´äEšÅČx0ņ-˛//Zą§eĢí›ŊkØš {Ĩ&Ėŋ uSĪk¯'Öķ ÉaėwxVöLŨr8ŧ ’o„ÕŒíF™}ũ‚hæ;Y}î”čÕĖŖUˇMåP}ãQfƒ˛n5}•|o3 9žÖĢ]/5ĀŲÜžb1H:Ū)Ņ)íē¨=ĮNĢĢŖÚQânŪæ•Ėģ[Õ^­ĒVQ‚8Ü;ú–ŗ‰8ŒIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment255WįôĨIDATH‰]•ąnG†į˛ŒŽÁŖ‘FŽ nAę„āĘp‘Î~\¤´‚44LøV 6AčہåGH&Ė#h€"o°Ú¸Æđ.ŖGpŗ“Ų=QĸŊAņÃÎÎ?˙ĖfŗūÅĩ™cÉLŠŽ.Mēˆ‘č?`Ū<œÉŪ-ŒĐDĖĩČ~˜“N¤ ’°îۚ ´Dęīî3s?ötęétYŪfŗiŅöû'ˍ Me Ā–|ū~FŅÛč\/žÚÚ>|å˛PŪ4QĨŽŪ>%œ6"÷f?’,‡>ĀôHŽâxęRiĶÍĶģk÷Ļg,—GuHg†cöDČRŦ ØHčjįOIQb)đĀ$8°ÂtŌč5Q”LÂ.åĨ0Âļ™XI ˇĄĸyXrä†ĢÔÆ Ždî\S,ų†į#åár 7å÷^.ø›qîr‹ėi´†Ã ÂÃ@Ŗ@ĪÅĢņmˇT؁¨„k!ßzúgEŸ™]Ē;ˆKˆV8iØ?D‡xô ˙›Ŋ{ Ŗsht` Ž+ŸĄ=Á&aŠhyŌčË`K{hīûnˆęĮL˛˛ˇ'v(eo՛ũkY‹ŅJ.ÜôôIú˛ķ`ˏMô cÅ<ƒøč5āDánaz÷^°‘m#ÅĐĶ×äĀ™§I16bkÛ-&TlžË6÷‚W›ã˚”%ēLpd„âų ÷/égÎ =â,…LŧKÁÁ@'348 r'žEæ}üNg.6Ŗ™08¤ ʁ J+*ĘqŽ“ _ã‚(ˇž‘ˆŽTŲÍ)xûŌHįŠâŽL.)ÎeJÉÚ wũ [iN_ž OcÔĶfvĒŅN•4!ēÁŦŲ†JļixhŠq;`kĖ ûCØĸ[ą*Ė‚‰q*{DEī-uÃŅNYĘN ūîb{×UBái tŽš˛ĸQrŠ9ÔRSĩāVmGAÜI| Dž×øJ†muEÉŨ÷ž6Ad{m¨Ān%Ņņõ@Ė÷EwZՌí:¸ĸZņh˛PÉX ņŠękš,Ä0OTzа˙9-˛ämwo5R4m˛õyä"ãžÔ‘¨Š!`Y­¤@˙€öáoĮôWŊĸĶe K\(Ž.œū•<ÃKW˜\„ÆōT¨|ĄŸĶ*ēŪęõ>ņu^āķĐ,ÍOĒᗍ˙Ę+gŽsĩœã&Ęp>ú(x›æûšnđlU,JOíyú?€˙^yT­IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment251PŠ0ŧIDATH‰]•ąnG†į˛ŒŽÁŖ‘FŽ nAę„āĘp‘Î~\¤´‚44LøV 6AčہåGH&Ė#h€"o°Ú¸Æđ.ŖGpŗ“Ų=QĸŊAņÃÎÎ?˙ĖfŗūÅĩ™cÉLŠŽ.Mēˆ‘č?`Ū<œÉŪ-ŒĐDĖĩČ~˜“N¤ ’°îۚ ´Dęīî3s?ötęétYŪfŗiŅöû'ˍ Me Ā–|ū~FŅÛč\/žÚÚ>|å˛PŪ4QĨŽŪ>%œ6"÷f?’,‡>ĀôHŽâxęRiĶÍĶģk÷Ļg,—GuHg†cöDČRŦ ØHčjįOIQb)đĀ$8°ÂtŌč5Q”LÂ.åĨ0Âļ™XI ˇĄĸyXrä†ĢÔÆ Ždî\S,ų†į#åár 7å÷^.ø›qîr‹ėi´†Ã ÂÃ@Ŗ@ĪÅĢņmˇT؁¨„k!ßzúgEŸ™]Ē;ˆKˆV8iØ?D‡xô ˙›Ŋ{ Ŗsht` Ž+ŸĄ=Á&aŠhyŌčË`K{hīûnˆęĮL˛˛ˇ'v(eo՛ũkY‹ŅJ.ÜôôIú˛ķ`ˏMô cÅ<ƒøč5āDánaz÷^°‘m#ÅĐĶ×äĀ™§I16bkÛ-&TlžË6÷‚W›ã˚”%ēLpd„âų ÷/égÎ =â,…LŧKÁÁ@'348 r'žEæ}üNg.6Ŗ™08¤ ʁ J+*ĘqŽ“ _ã‚(ˇž‘ˆŽTŲÍ)xûŌHįŠâŽL.)ÎeJÉÚ wũ [iN_ž OcÔĶfvĒŅN•4!ēÁŦŲ†JļixhŠq;`kĖ ûCØĸ[ą*Ė‚‰q*{DEī-uÃŅNYĘN ūîb{×UBái tŽš˛ĸQrŠ9ÔRSĩāVmGAÜI| Dž×øJ†muEÉŨ÷ž6Ad{m¨Ān%Ņņõ@Ė÷EwZՌí:¸ĸZņh˛PÉX ņŠękš,Ä0OTzа˙9-˛ämwo5R4m˛õyä"ãžÔ‘¨Š!`Y­¤@˙€öáoĮôWŊĸĶe K\(Ž.œū•<ÃKW˜\„ÆōT¨|ĄŸĶ*ēŪęõ>ņu^āķĐ,ÍOĒᗍ˙Ę+gŽsĩœã&Ęp>ú(x›æûšnđlU,JOíyú?€˙^yT­IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment256ÎîĨ$IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ/[?@öŽĘŽ`Y>œQEeh;'IENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment252Ƀa$IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ/[?@öŽĘŽ`Y>œQEeh;'IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment261{§c÷IDATH‰í’Í à …zāH'hFĄŖt“d´t“lP¤^r@P61=WU|IĖ—÷ €˙R œô¤?KŸcj!”Đ=R5 ŽĨæ<×ÔÎé{ęVöŽļl%ėkR‡ÎVöčŸēšģ]ŪąI2•r=ЂQe‰Ŧ¨´ˇLMEķā# V  ŲÚzm’l‹hŧCš (%gú”nÉôŠßõaŌR×îQ#›d˜qj‚ôâ_ļĸ~ˆ´H5. v琍‰ŽŠ6P§|œĶãRĒÉZFîpUĮ´*Ą‹kÁ˜f†ß- ŦO)ėÅcŒhš}ŌŋĻŽ–Ž=ŸIENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment269u|ëMÉIDAT•-ĐąjÄ0 ā˙đCĄ^3į׸ĄÄ¯tc‡#vό÷J 7ô5:tÕ¨ÁXUB4}Ä/ jõ§“@ĸĘĻø;åĩõwĐEˇĨ=ÖÅ c™ōÛāņâüŗpöˆœæõDøå |t8žxœ(ôPōĀD#œ °ˆŅmōčŌ:Ē6¤“Ąšu-Î­3d-¨ņ„ i‡‡W\yŪĩ—5d͡ã,PØÆ$•üjĢV­Zõ×úÛD"ģšTe­IENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment292e6. ŅIDAT•=Đ1NÄ0„áA[8Âm „Å-R ÍY¸e ”˜†”\ÉQŠŊÆŗ¸€#š'ay°‰îëūŅ€¤,¤";GU¤ ?-u‚ÜŅŽÔ›ģS{ėŠ¸šÃWšOX}w‘ĨƒĶ N¤+€Š-=UL €ûĮՅtß!ČbŊ>vˆÖ—Ąũskņƒá•i/ü” 4ddPÛ°ĩÍKÅ*Čãh#@ËhžiŽ2›Ŋ8ÉŗšeÔfŗj…ĮblĒ—Đ7„QNĖQ98üĄ‘ßų’ČęIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment2931œČIDAT•%ÎąmÃ0…á'¸P€äVđˇ’ËTĻ*5’E°péÂ@ œē đ…Rūę+đĖ#8ŗ ‹Ā;zĪ!ĀĀmäĮe‰kág‡Õ4—*^ĻSŠaÄÛd*÷đ} †ŒĄÁĸdā&Ŋ)'āzbÆp•É•‚áĻ U°˜>\÷€Íbv`ar}`bųR.`Ļ7pbõŌŽT}ļõP°Į†{ƒSVßTMžËĖhÆMŋ˙ˆiÛõ…Ąa­2ˆĨįåŲ@ ųmœ,ë7ĐIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment297\څˇIDAT•=Í1NÄ@DŅ÷Ė5ˆ˜+ ÷ސpÆ8 ƒVÂ\aV6m‹¤…Œ‹nĖRŅ‹ęƒ/ä‰ü‚]’(8WĮQe˜“Iį¸Āhy§KŽô¸AøvÆ;ö˙¸Nã uÃę]6ÜæĄÉzƒšåƒØÄs‹ŖŌTĖQHëÁ‡3ē€öXw:–ô|0ļ–SŅ€J*ķ/îsų 4ä2*ōëØCj÷MņãX$P…žīõdīĄ¤ü‚åIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment298…ãĮŲIDATH‰íĶŊ Â0`##Aįŧ -A.R2Ŗ@”"%+QЂ(ˆEâ‡M•_(Ąđé$ŸNįķĀDâwēÅ}BK´€Ë‰ÖØhŽ´WMô貍ĶÖëŠiŸ•“Z_Q9*é;ęŠčėĨķžĩęĸįíÕT}ļîDNöėÕ8AúÂ8mP°yË -S…EnATÜl/ãnödAtđK}…‰Ģ zcz˙Ļ;Žg ÕÜĐÄĩ˜š ‡¸ éÔᱏnĸNHxíIíR…÷¸'ŠđB2e‘4iŌ¤¤O֛ ŌņĖΎIENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment300[8žXŽIDAT•MĐA à Đ)]¸ô^¤ā•z€P…féz•ˆ‹\CÉĻĢēüŽ1„ęæ1ÎĀŠjČIŽ’Bĩ-Í$ŅP ĸÖ4%,q3)†_7ûlĐšÚ¸ƒĢ ­Įpqˇ?°› K=āw$ÚT5Ĩ¯‚ģ`ÍĀ'†ečS(ˇßHĩ§rBb(~4DŌėĖžP÷¨ÁÚļxgøoÛ ‹\ŧ É|€Ų6°ģŽĻQJ¤IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment304\UZAˇIDAT•5Đ=‚0đ'&tŗ7°×pŽ$0008r%HŽQÂāZâ` ßĢ:4ųĨ/ī“~;ų\‰X“›Ņk„‚† Ŗ‚/Č:t6ÁC' Œé‹Ũ,pŒ5Ÿ° ú‚ h/‡đƗō3 8=(÷ æŋū°ũÁUÎzF.XUĩ DtˆQ32Æ]{„3ŖÖNļ8†FMŘeæG@;h\`;ô9Ų΀rrŧxÃ×øÅ>Ĩpĩ‘ū8IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment305+Rj×ŊIDAT•MĪ1nƒPĐA. ŗKēŸ#¤¤°øWré"Ŧ”ÁW1ú…¯ōļ\)čOvM‘lõŠŧĶOĄJĪŠÆRp D…´ō>9ž…a$COĮMē8(ųŠÉëŗauŧäēƒĸqá˰:,ĖY §ųāhkHáČCˆ8üčįūá´#mĩOˇ7ŦUf˙Ąį˜´JmCŌŽB)}Õ﯅aŌ­~?T,%1\!Gæ>CB⚁.ÅôIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR>!Š:%§ pHYsb&2 tEXtComment306˛[;mČIDAT•UĐ1jÄ0…áˇØāÆ v ƒŽ‘ÂŦ¯’cl!V ¸ äJZ|€\AKŠ´ŗŨ"/#%)2Õ× ü3ā;mîÚQĻr`v|ņqer|ągžmœ{lŨúeX%úk =žåō‡āSšôØâ+˜Ë’K,āÍ*>õCÅ9@a‚<Χ"=ذ´"J ĮŦzô N>ëĖ>Šmuz˛BàŅí BģÂRסķˆûÎ40M cö+dũJÅ7ÍuœiëũŸ”IENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment308UãjČIDAT•EĐ1ŠÃ0ĐoR8[wÎRĒčJ[ē0IĀ…ˇË•"Rä{€t+4ûåĸę!Ąá·yĢG!;“‹5ŠØX F<îvíōÁaŽÖĩ:õÄĨ›Ĩė‰ķđ̘|x­7Ų‡údÄ]ÎDRåÔÃ~*ööŦāäԊJHCd8H$&ôø“¯ ~—ã%ÆoHu>Æė*’m+N>$ģ~Đ Ŗ&ûÆB<3/\g‘Ōã7ØíĻ“c+Cf6Q,Cą–Â6ūWڜ}Š IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment312Ŧ-Î5ĨIDAT•5Đ1Â0 Đ_uȘ•-GÉÅ*‰ƒÔp…0ą†Í“]ŌLOqä˙pô0 ’mfM܈:ŗ¤> ø¨‚%“å”ũņŒ‡dĩ› OÉŧ:øĨA o*; /ƒ:n6TĖāÅļébØĶ5@ĶĀŋÆɆd+e{TōÃīŗ ”gŪĮ‘ŧaĀļŖX–Ŧģ§Wļ¨Ū§…eŨŲ˛"ãø– eŊÆēqpˇIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment318Lø'+ŗIDAT•EÎą Â@ ĐQ„‰6Ŧ‘.kQ H‘’–q‚RĀF,pé\œîãK¸z˛eû#îéõ6„’F I¨1„Äc~HKzõŽqNĨ•‰@dX ĸ|4*ƒYƒ3NøĘØÔāč0Āū +Ņ…ŗ#ĄÂ¤3|=_‰Ā;:ŦqĻ/< úŒ[Ŧ ”yë‡ÉąÍ|bĢT‰ŧáz§6Qj<:ļ%wžpŸqąķÕŖáuN°IENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment320iüÚĩIDAT•UĪąMD1Đą8t¸ÄvƞųHŋ-Ÿ. ¤Ÿh`‰đ ˃ũ9&zÉĖjŅMh s,q| |L¸ž4mC".U%w ØĒ°t ČŗSšn˙°OdœMü¯Ē g°Ō᯿;†ãî ä:“žMē­–šŽÁ ãÂĨÅĪÛBnņãļŽģßūđ~íēO¤“ë˛Ãˇ„_ØüzgĢĪđ|HČe đUPg*Qü˛cš*kyž IENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment329ŌD~ģIDAT•=Đ1n! Đ?bJŖpĨ܀ASl)W´EŽÁhŠ´¤#’Å_`Vą\ŧâÛ˛ ÎB]X=›Gwá§CÎaĩŧ R Æđ}ĀģØÄbīҤîfbWŋá¨>â,a›`ŋųÂB+*Â}QQ?<̀V×l“ĒëGž]pŒ §J dBR)ˆ*ĮÄĒîü#čË~~)ŖŲolÕÃ4{ĮVÂĀRn‚ŧ ˆCĩDī€ë)+Ÿ´(šZ“WëIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment331ũ ¸IDAT•=Î=Â0 `ŖŒšš"×ā4MĒŒ\ŠQ‡^##ĶC <âđã铟mYŠav|BrĮŠ’„a˙&žģ"˜ŧP1doĸvôÛȊĐ0)üŪĖL ș+„™\VŌhđ° tĖ­“…qԙ ŋDÅîļļ-8φâꩊšØŠē5kBŲ™mĘá‡ũvՙú/rog}uI´'†Ŗ¤ ¯ļˆ īîUņōÔÂ.ܸî|ŊĶąIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment332žŦˇÁIDAT•MĐÁiÃ@…á'$؋ˆV#ÆN).$°:č˜Ԋ– ¤UÉaƒŸGŠ š}—a~HĘ@,°.­¸ÔŧQĀi$zäÂ.ņÖ:ĸƒ F‰a!÷˙H’ďE"ŗvĀíBŽ;^ÉI_5ŲmКŋÁ ¤âšiŽ ŋWZ ņķBíA=S(oˆbŦæįIcūņīCĐøUPé!xĀķ'j=uB4;Š9&‰C2´ÎYÉƒį žĀļEûš›ž÷ą*IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR?# 0ī’ pHYsb&2 tEXtComment334wx ‚ÎIDAT•MĐąmÃ0Đ¯0ģh@Z$3Afđ é °dh¯DĻq¯pŲā€4Wū9R6œĢ^qü÷AĐĮ&~ƒë|9ÎŅqԁœaí9ļĖ€6œæ 䅡ĄõH2u‡ ēDíqĐ}H”ņ?ĻžÃ…q+f‡Ąâ‡—ŽbĄ ĈÜ2ęãR ģí)]ŋ^+f-9ĨÂßȇĸā(o$ëƒė4w<y_ŅIŠÚÚķJr°Ī+tŋ­ˇŽĘ( 7÷>žh$nõú#ūŗIŒPIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment336™vhŽÂIDAT•EĐ1N1 Đ?ĸHGn@.‚íŊQ”bĘŊRĸsŒ@l‰éR„ų8ŗ[øëū… ’Ãkā0Ëķ?BÜrķká5ĸˆ_í‚xÂ)ēKŠxĮáJ÷Û~¸Û\ūVģÖĄ`&ˇ‘4ãÅa€Ÿf<Eøē ģ‚âoû°ėŽ2lĩ!o.cVûDœxŊc;ą gxwéŨ ŠUŧ*j vįĩęĨAīĒ}a6lœIqЏüęđß᠔—ęÄIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment338~ÎEŠģIDAT•=ĪM ƒ0ā Ų^@HRôbE…\z„^Å`Ák¤'h\u!¯“ļ¸ûæį HË1"ÃgHAŠj°;۝Н°yÖkd…Iá"K\“ęĢ _PĄSŠMlîä,ē™o&qɡbr…ÔsОéˆ Ô)ŸNåņPzé3:Å0fĖ>pÄ&Q,˜¤Íđ(¤­˙čاđ’Õ`7LOÚ) ũtΟzŖA¨ÁB—áâ䨂ÉĨbIENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment339 Éu?ÃIDAT•MĐAjÃ0Đ*hĐL|]Ė ŧ)ä9ŒYö ō ĻĢj1čwäČ_ŊÅg>ÔŗE‘…Åē0v#ļĖėëeĀ$ŧ9!…Ф_†­¤Ķ X…~Ã. ˜y{b'gI'Ō7ˆcõĨÔ ø•”}Ã_‰‹Ģg+—øXé؅Ÿ+†L^áŪ_™ąá˛ö߆á /cÃŗhŋjßaŪ °GũTĪ#$đä EMü Ü6Ém–ĩĶß;LkIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR?ŗÔûá pHYsb&2 tEXtComment340?T[\°IDAT•5Î=‚@ā!4.`؛°žĖ]( ķ ^ECá5H,,]bŗÅ8ĪŲĢų2™ŸGxžŖP@ --¤ŽĨyQ°­év5õ Ņ ŅD(ĸ"` 9ėxlĀ 6 <á ļ$ƒĢŒņI_¤Î7ė@tØmX—úh“ĐkÉ/ 6^1&lÁJV\¨ÔõœšJÅļ4EÍ#ļŖĮŠØāxĻĨLđBĄ\ųöš ëS…| IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR< f“&? pHYsb&2 tEXtComment341HSkĘĸIDAT•=Đ1Â0 PW2–ąginFZõpԊ3Tępŀ‡¨ŸÄ&dz˛ø+„ĘazOĀ­`;Ķ2ŒLG+ ĶÄŅ0rLÚ2, Q,+°Ãf°åwîqx*ríĒX9Ūíē„Ū†%\ Нč SęˆbF“ÎáđĨå$؊?| ¯•ĩf ĶÜ`vˆ}Žšˆ(û–/ŋR°MæÅšŽIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment360 b9ŪšIDAT•MĪąmÄ0 Đo¨Pé4 WÉ)¯ .”Î+IPqkØđL§Bđ?ʗ"løŠO­66ÂzwĖ‚SŲ&ūT †€ĸņ7_˛äĖ]•š{\‘5>÷ëČ<›JÔX@åŽŦô7.GŸvCáô#ēõ†Š;ØÄëŧꔁOÃ÷ĶĀ㍤ИšáKV¸& ĢŨŦWØ`{ęÁyF^x.ģãiŋGô™œšķgËĄp:փēIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment361ze HUIDATH‰íÔ=NÃ0ā,፷‚„ęc ¤*>,qĒeãHÄęĀ5lqw3’ÉÃNRÕi“Εh&+Ÿ_Ū“šj¸ mãÍíUä´qƒ™QŋūUÕŗŠŪ—twĒŽDīd§vB¸s˛™SÖK7Ŗ>ŠōIõDGcL§ÛSmIčAÅÕįņ†í @5ŨrcŨĮ‚‚ ¸ãšÕJë^oÂc ĖŽķŧ Ķ+†r ė{Ŧĸ‰ФžēoŽt:<õąŽzX1ģÉķ*ž bĐVŦ7f\3̓ õˈĖ~i=Ō8øL‘ž ŧ)´‡ēFQ€Uu xYWēšcŗĢĢŋW´ÆĻĢĢ[*¯ĢY*7Ē=mĨĢë+kŠ—ô-ÎV)*§ëĩ ŗĮũJ€…bˇ?ĒmoÕPŊš(Ôĸ[iYÅĸPî‚]ëŖÎ+Ē,áA§sSčRZ‚Î°Ū­Ę{“ėœ`]<Ũ”Ú°zŸī}–PčŽ ĐĪuņ‡ļ~w„ōWį f:IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR?# 0ī’ pHYsb&2 tEXtComment373pY%ÄIDAT•}ĐąmÃ@ Đo °:šM%mĸ[%ƒĮ*Tz„Ŧ"ONUÚ+YĐüáYŽÃ†w$A?|…ãlז8ņĢ7ĖXDg(ŽNm|ã6`ŠŊæ7ę(7šëŪÛ×o!ŋi¸ŋ0‚21˛kˆVīč‰[†!āaŸbbŅU“ŠįKCz@§†3VŠ<‹N›Ô|ŽĨĻÂ*gœJj/) —€čĢ)>`­ŒbąîĩÛ0ͨW*š;,gųŗŠŊ´•SÃuIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRA e$( pHYsb&2 tEXtComment376ũ­ĒĀIDAT•UĐą ā3XLÎŅÁ„7)oVH:ö•ęÄč+Đtp´n4AÎ˙p02}ä yŠHHQL Bn#ŸōÉ%\ ílĄ%ĸ ĪäV(¨|„RĶm=Į]Æo{žībäU+/1‚?e/k%Ũ›šXx‰•ШģBG–ąv7h`™Ē™5Ũ„,nz‹Š*ĸä;ˆU’¯LQš‡MPĒ ĒĸŠØļe =Đ “CJi­DĨÛ¯U>ŨŲ¨]´ąĖlIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment382}īu|ĘIDAT•UÍ1NÃ@„á‰ļ°ģ´."›c¤@<Ž•eą(œ.GČQXk‹Đq…uåŗ(xËÃ:rÃT_3úa—’[@^C ä™8ā%y^M÷h“—ø3•G‰_˙2žgä×ÜDÍ`˜‹¨õ ŽģĄ%Ũ“[Ą>o­*‘ŠŠĒ0$ĮÜĸúSÆ!Cę “öĐ´ė ÕŌ3œíd`÷™qīGnßVȊYN(ôɏĶ]‰ŗe0”čåCQ!ö|}_0\9^ü2×û?Îe—õČR›"IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment383 čEęIDATH‰íŅ=NÃ0āu’9ßĀ; ų*pX< Ø¨H{ĨT| GšĀƒ.,;IÛ4 ŽLöâŸī=?˙@¸Ō4d͚5kÖŦ˙ŖŽ…MŅU­īD“6C\ąĐZ¤ē“˛_ŠIqTÜ—ŨØ}ÎU4 ÕÚĩŸrįuqŠÛá5n”I“ōoazBqh­“qŸÍT*C€7kåƒĐne•Ž÷ņÅ Œ™.ŕÔK@…EPAW0ęÎtņ\uÔwŽkŲZ§ü­˜tkš¨´ĸžâüņ•ČKå9Žu1ę>ø*)rN–üZ9qÖø^}DČCp‚tĶ/ÚQŸ.ô%ęöõkP=¨ęÕ97)FõíŗĨī“ūƒ^ČKļZš9IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment369tžzIDATH‰íŅ=NÃ0āu’9ßĀ; ų*pX< Ø¨H{ĨT| GšĀƒ.,;IÛ4 ŽLöâŸī=?˙@¸Ō4d͚5kÖŦ˙ŖŽ…MŅU­īD“6C\ąĐZ¤ē“˛_ŠIqTÜ—ŨØ}ÎU4 ÕÚĩŸrįuqŠÛá5n”I“ōoazBqh­“qŸÍT*C€7kåƒĐne•Ž÷ņÅ Œ™.ŕÔK@…EPAW0ęÎtņ\uÔwŽkŲZ§ü­˜tkš¨´ĸžâüņ•ČKå9Žu1ę>ø*)rN–üZ9qÖø^}DČCp‚tĶ/ÚQŸ.ô%ęöõkP=¨ęÕ97)FõíŗĨī“ūƒ^ČKļZš9IENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment384”ŒĐIûIDATH‰]–?o7Āß‰ŠŠ‚™­Wā**Ȑą˛h¸ûI :6A{Pu”op ¸Ņš¯@E@íÍk‡Ļ, {­€ˆÎ÷úHJqR¤¨ŸŪ˙÷„Å@—Î,ŅJĶší¯ūˇ-4@Z¨ū‚r š§-°îG’z¨{āe“IŊÅ#ķ4˜‡ũD۝Ę&ęOãí`g#ÎßĖ ē ÃĪ(ė(­NØķ°wwÎîoí‚ōīŨʡaņsúQ4˛ v‘§đ 0ŖŌėËĪŧ=n˜ųe˜ī¤éčšXe–™ŸŨŌŪŽÂa¤3ÃôĒí\ķ”2ĶšŸ,\ ÎëQž Đ¯C˛—˛EËâ•ßQĸbrČ-īzkŒ×ų8Rō…Îáų´ ĮÎúŪm^g-ŧ쪃ķSĸ–Ŋ–Y?å\gøĩũŒōĶŧ—–)‰yGéîQˆo@ūv˜9äĐĨĖ۞8õXbéˇ‡‡đ ‰ ”/Š="MtGا:ÁÁ W-”gäøÅļŦL˜§úa̘aeūč°û Jj Ŗg-¨6ë2lîč K& #yՀú˜uv´ÃēLuģ6Ĩ§üš”#jØļ ûĨá7ë ōęŧģ#õŽSĀPÎõŧ–XUą ˍír(€œk•ĖsÉ;¨WA3ˆK^Ŋ§ĪæĮW‰›@ Ä|Ÿ^ŌŽ š4b8Åķ-}K>%3%0PŽéōwä1U0ÃČOŗ‰Ļd3tÔŗxę˜ Tâ„ŌÉVDĨ)/"Ũ;ŒŖĀN(H&fKŖŪÍ)ŖIîÐJZN,Ÿz 1Ļ>$XgŲ$KŌQj&ĖŅ@Åg‰ēâ16ÉĻTš(뙹Tˇâ˜× ˙Ņ€žîĸ 6Ô6å19ˆhĸBīÅö(čøßu ZĮbīčkœˇJ9xn[čVÖį,ÃU+)>l‘ō@;”ČAŖ,[ã4ÔWlĩ 8‰ŽSŪŧĶT¤@ũŦŅ sÍj(_-/=Í$õxcš[Ō,AãŌ }•KŸ/z eW,EC1ĶėēDĘŒH ę>Ãŧ(§*ÂĨ-[?WT ĸ…š\uŲA•o,Õ‰ŌÃ2Pžzđx2šJ÷ĀĶ+ |‰õ’ė@hM/Ķ­Ŋ`}uuj†¸AŌjˆv3Oķfãä•ú#5Gŧ ”ëãđpžädHą?•[Ą§m c WČtž-؉ĸßzŊ /;­|“&ēa˛ÍSY¤ūŽębLŋūĒWFĘk„ĖzljdžBN\ÕDWzÔś .=}EũĄh<–ÔîßâÍ%J\yzyŌÉ@oĢö šģ摞„~ŲPļâī†úŠŠ|q0nT…Tļ‡)Ȗ/[jEĸ~ĩžŽ5 7>ū6Y×ûÔ¯UéS§Aö)Í*dlS͕ oO¤O”ë3ŦŠžĪ›@×Ö¸ZDû’„]ö(ČžhĩãųlfâkܜôûDëTEÍūEë‹ĨIjīÎrh3,}@ô^_ltb¤/ŽÅOÛ-ĒĶž 33žpFĸđ:vôHŽß›%ŊJDĩ¤ Á[<ŪŌįZŅŨĨÂyYëeŨ–>3ętI´N*ŦčoÚņ€ÜúDĨ°Ōb›Ė7 ˙%ēŽąĒ ÍŅ1[^“‰7¤ÆaéTąū‰Ė…œIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment370yŸûIDATH‰]–?o7Āß‰ŠŠ‚™­Wā**Ȑą˛h¸ûI :6A{Pu”op ¸Ņš¯@E@íÍk‡Ļ, {­€ˆÎ÷úHJqR¤¨ŸŪ˙÷„Å@—Î,ŅJĶší¯ūˇ-4@Z¨ū‚r š§-°îG’z¨{āe“IŊÅ#ķ4˜‡ũD۝Ę&ęOãí`g#ÎßĖ ē ÃĪ(ė(­NØķ°wwÎîoí‚ōīŨʡaņsúQ4˛ v‘§đ 0ŖŌėËĪŧ=n˜ųe˜ī¤éčšXe–™ŸŨŌŪŽÂa¤3ÃôĒí\ķ”2ĶšŸ,\ ÎëQž Đ¯C˛—˛EËâ•ßQĸbrČ-īzkŒ×ų8Rō…Îáų´ ĮÎúŪm^g-ŧ쪃ķSĸ–Ŋ–Y?å\gøĩũŒōĶŧ—–)‰yGéîQˆo@ūv˜9äĐĨĖ۞8õXbéˇ‡‡đ ‰ ”/Š="MtGا:ÁÁ W-”gäøÅļŦL˜§úa̘aeūč°û Jj Ŗg-¨6ë2lîč K& #yՀú˜uv´ÃēLuģ6Ĩ§üš”#jØļ ûĨá7ë ōęŧģ#õŽSĀPÎõŧ–XUą ˍír(€œk•ĖsÉ;¨WA3ˆK^Ŋ§ĪæĮW‰›@ Ä|Ÿ^ŌŽ š4b8Åķ-}K>%3%0PŽéōwä1U0ÃČOŗ‰Ļd3tÔŗxę˜ Tâ„ŌÉVDĨ)/"Ũ;ŒŖĀN(H&fKŖŪÍ)ŖIîÐJZN,Ÿz 1Ļ>$XgŲ$KŌQj&ĖŅ@Åg‰ēâ16ÉĻTš(뙹Tˇâ˜× ˙Ņ€žîĸ 6Ô6å19ˆhĸBīÅö(čøßu ZĮbīčkœˇJ9xn[čVÖį,ÃU+)>l‘ō@;”ČAŖ,[ã4ÔWlĩ 8‰ŽSŪŧĶT¤@ũŦŅ sÍj(_-/=Í$õxcš[Ō,AãŌ }•KŸ/z eW,EC1ĶėēDĘŒH ę>Ãŧ(§*ÂĨ-[?WT ĸ…š\uŲA•o,Õ‰ŌÃ2Pžzđx2šJ÷ĀĶ+ |‰õ’ė@hM/Ķ­Ŋ`}uuj†¸AŌjˆv3Oķfãä•ú#5Gŧ ”ëãđpžädHą?•[Ą§m c WČtž-؉ĸßzŊ /;­|“&ēa˛ÍSY¤ūŽębLŋūĒWFĘk„ĖzljdžBN\ÕDWzÔś .=}EũĄh<–ÔîßâÍ%J\yzyŌÉ@oĢö šģ摞„~ŲPļâī†úŠŠ|q0nT…Tļ‡)Ȗ/[jEĸ~ĩžŽ5 7>ū6Y×ûÔ¯UéS§Aö)Í*dlS͕ oO¤O”ë3ŦŠžĪ›@×Ö¸ZDû’„]ö(ČžhĩãųlfâkܜôûDëTEÍūEë‹ĨIjīÎrh3,}@ô^_ltb¤/ŽÅOÛ-ĒĶž 33žpFĸđ:vôHŽß›%ŊJDĩ¤ Á[<ŪŌįZŅŨĨÂyYëeŨ–>3ętI´N*ŦčoÚņ€ÜúDĨ°Ōb›Ė7 ˙%ēŽąĒ ÍŅ1[^“‰7¤ÆaéTąū‰Ė…œIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment385ã‹āß IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment371c~8 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment386z‚ąe IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment372úwiŗ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment387 …ķęIDATH‰íĶąmÃ0P".Xrƒ0ƒ¸ĩR…6T¸ô^…‚ •!˛€Ô‚?'×úA"iĂÍÉģçÃ7ëäū^Ds´­9ĸ'•Š?Ô–9mj‹é¤DÃYq)LũOTˆöš¸Úģ)܉âÖésS\ôI@ǞÃÕ ļĩÅfš‰–Ģ#7gę ŠjėV}ÛúŪˇŖG%ŠIßLŅ2[nQ1íĸ-– C!ZÃĒ™ë‚‘Š>´'5kĖĻ鎯~Æu¨˛­2(nŸ,926‘Ĩ$2Ģ+œčD?,kC˙ō÷wŨu×]Ĩ_ŅēųĒ2m9IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment373pY%ęIDATH‰íĶąmÃ0P".Xrƒ0ƒ¸ĩR…6T¸ô^…‚ •!˛€Ô‚?'×úA"iĂÍÉģçÃ7ëäū^Ds´­9ĸ'•Š?Ô–9mj‹é¤DÃYq)LũOTˆöš¸Úģ)܉âÖésS\ôI@ǞÃÕ ļĩÅfš‰–Ģ#7gę ŠjėV}ÛúŪˇŖG%ŠIßLŅ2[nQ1íĸ-– C!ZÃĒ™ë‚‘Š>´'5kĖĻ鎯~Æu¨˛­2(nŸ,926‘Ĩ$2Ģ+œčD?,kC˙ō÷wŨu×]Ĩ_ŅēųĒ2m9IENDŽB`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment388:œbģIDATH‰uÕÁnã6⑏0{؆č­@ŅŊnO^ 0ķ}{č5ˇæ`˜ôĻ@Žy÷MVn=æÖcÍĸ/ 6B˛f˙Ąd˖ˇlú4ÔpČĄ‰N¯Ėã+/ˆ*ĸ’†WRbē=×/öÚĐúۙî‡āę‚~ęŊZ˙ķŲ{ģKqtūŊ˙Tŧcúö3ú Ÿ\1×´üŒŽ$vÃi€ŗŊę-s5 K7rŅʝiSFI-T ՄtOÕ§ÁPd‚›&PsĒc礐ã Kųũå0¯KĒríņŗČøĨ9×HĘįo‚ę[š’äŋQ!ãįN:Õ푴ķ':ŸŲVƒ!hŅk†ĢTp8R•t"ÕĖu°9ԞŽė~IĩŠ`Uą+8MŲŨcrēPeŖW‘nēûē”ī‡"δú“˛Fķ‰f%Ũ\AƒÖLZ4ģ&UŌ-!ĢôĐPą¯’ (EáUÔū]×fÃUŨ§ÅĘx]#ŠUm7ŧå“";‰mČ}ä%žāŽŊåQĻąY{—TĒqŊOK,ŧÜÖŪBŸų¸VßpŒ,té‹ŊžJ„öû*ŠÃŒ—%tĶŚ˛mN UʂYbKÖæīVm§ļҤbĖēBŠtĢĒF^¯E9—}^1;hZđVéÂDy]7úąĪ9醊æ5jôī‚Œ1G*g õ—čÜ˙,ĄžwÕTT:ˇíí{•žŧÂNÄ\8.ėŖØĮĩÂÄs0dœZ†f;/QãƒNuÁܨÚËe‡¤A §DKķ€FˆJVœbõąXq|M~܏9-Ŧ*ĄOŧáø}´ŌeiįĄgŅķWPb^aųĒ,ēÃŪ0Ō‰Pdå­­eécųLé:ÚXœé]{šĐ,Ú:ŠŨōũ^õŽ™Ũst5ĘĩŠ^4Jú> é1Žúāe…œøA•ŠŽ”ĸX]\/’6‹Ĩ,ĻšŲmyÕĸļ2Æėŋsą¨:čÔ­EŸDŨë\3vļncŸ’+) ŽZüĖåK6Œ¨OšVƉŊMoWĻwßyęŌ “Ŋb2O­Ū”~í´‘:–IŸ’–Š&y* j•Z—ˇŨ‹­lœFØ`Zj;ĘfEœĄ‰ÖŊ:N'đU?˛ĄVŊÖ]ėŧ}w.÷ʝbĻšĢ¤šIŸ:ĶEũ' 6ė@ƒ**E~íÔ'#“ŠZnĒĨH›”đn_hŅđø{jĮ…Æ#•ũ^x,(—œÂĐfũČ)žü]ģŒĒN÷Į° īäXvÜįü sā@à \lIENDŽB`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment374ˆģIDATH‰uÕÁnã6⑏0{؆č­@ŅŊnO^ 0ķ}{č5ˇæ`˜ôĻ@Žy÷MVn=æÖcÍĸ/ 6B˛f˙Ąd˖ˇlú4ÔpČĄ‰N¯Ėã+/ˆ*ĸ’†WRbē=×/öÚĐúۙî‡āę‚~ęŊZ˙ķŲ{ģKqtūŊ˙Tŧcúö3ú Ÿ\1×´üŒŽ$vÃi€ŗŊę-s5 K7rŅʝiSFI-T ՄtOÕ§ÁPd‚›&PsĒc礐ã Kųũå0¯KĒríņŗČøĨ9×HĘįo‚ę[š’äŋQ!ãįN:Õ푴ķ':ŸŲVƒ!hŅk†ĢTp8R•t"ÕĖu°9ԞŽė~IĩŠ`Uą+8MŲŨcrēPeŖW‘nēûē”ī‡"δú“˛Fķ‰f%Ũ\AƒÖLZ4ģ&UŌ-!ĢôĐPą¯’ (EáUÔū]×fÃUŨ§ÅĘx]#ŠUm7ŧå“";‰mČ}ä%žāŽŊåQĻąY{—TĒqŊOK,ŧÜÖŪBŸų¸VßpŒ,té‹ŊžJ„öû*ŠÃŒ—%tĶŚ˛mN UʂYbKÖæīVm§ļҤbĖēBŠtĢĒF^¯E9—}^1;hZđVéÂDy]7úąĪ9醊æ5jôī‚Œ1G*g õ—čÜ˙,ĄžwÕTT:ˇíí{•žŧÂNÄ\8.ėŖØĮĩÂÄs0dœZ†f;/QãƒNuÁܨÚËe‡¤A §DKķ€FˆJVœbõąXq|M~܏9-Ŧ*ĄOŧáø}´ŌeiįĄgŅķWPb^aųĒ,ēÃŪ0Ō‰Pdå­­eécųLé:ÚXœé]{šĐ,Ú:ŠŨōũ^õŽ™Ũst5ĘĩŠ^4Jú> é1Žúāe…œøA•ŠŽ”ĸX]\/’6‹Ĩ,ĻšŲmyÕĸļ2Æėŋsą¨:čÔ­EŸDŨë\3vļncŸ’+) ŽZüĖåK6Œ¨OšVƉŊMoWĻwßyęŌ “Ŋb2O­Ū”~í´‘:–IŸ’–Š&y* j•Z—ˇŨ‹­lœFØ`Zj;ĘfEœĄ‰ÖŊ:N'đU?˛ĄVŊÖ]ėŧ}w.÷ʝbĻšĢ¤šIŸ:ĶEũ' 6ė@ƒ**E~íÔ'#“ŠZnĒĨH›”đn_hŅđø{jĮ…Æ#•ũ^x,(—œÂĐfũČ)žü]ģŒĒN÷Į° īäXvÜįü sā@à \lIENDŽB`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment389ę=Ŧô IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment375dü IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment390Šú%BIDATH‰•Kn9†‹ajĄ™že†æ^zAŧĘš€wņÂPĶĐ"K_ HŽBÁ‹C ŧđļ,ÜÚŦüÅ~¨%ËÂÔĸüšõøYdũģ8|-Š‘Ë+tĄZĸåëΚŗļüīäp ˇŲ}<U "§v’ÂægCž1ßßO'5ĐĢŗ>^RĖ› ĪŽ!ŠĄËW’AKSŸ ˇTņä¸r-q-üKZd*YŲ8ä¸7ģ Ãw™Ē ũkBģÄĻôšôfČÖ 5čËH=Šfp cāë@UGûdčJ¨æ‰gé3×ĮŊÄM&1×tÃĶ‚*ŽN‚wnWäī9œ¤ŠÛŋ)PÍ­ĪÔpcHmGú†č)Y/éh-Gíuāžz‡jšŪG=S’Oė * øqOķžZĄ°dÅŗ•ėŒĸĻu[„ĒâXÉĘö5cYVøÆHĸÕŌzĄž×VyP”kķB\­]ŧą|ģ§:ŌÔÉëÅÚÕ76ÉÚ EēTŅ:YâËĩk’ķẢØq•i™\ˎ Čj@˛œ7N +[ˇcöÅ1ŊčiuĮ-ũ)Aú“g.íüÁ%<žü™›Lq.åĶen%=‡$gģ-SÕt2.@ô4–sŪ&Ą ÉŗDûīŠŠË?xÛöT ęwÛhfĐĐ6ĪMgÕ4˙{Į?ôÖr9=+ÖaēŊcŽAĢö`nM6Ū‚F´Ų@ßĘĶ"SuĮŋ¨`æ4Ę$Ã-™nžk|ķeģÅŪĶL˙4AīčĩŨ Žneƒ|lŊæŠÍ[Ám2 ŸÄ˙„Ę›ĨI:!@pŦîGŠ]'ŋ…7Ĩf“Ü=ļ~xįĒŅĸ›KÆ+Pæī?ĻžkKæûuÁ–9ĶĮ)Eˇa¤)’cŪríø1ö4Ė$2čSkÚ)Ķ'ĄađŒ9üĀķžŧÕ2đØSLÅ$f„{âTqg ų°.2MEcŪĶîį˛Bˇqkdė~Jģƒ~‘iÖo;ŌŊ’™*æoŦéŦË+V ĀmGwFЄ…ß”éˇCęzĘIĖE û Ĩ…šŖ¸…—*’ëĻQ,:ŠÅQj¤å<ķąõõĸÅEŪcŪ×ĢQGÛÉ˙ķ…ĪīGŽ{ú%e΄ˆ„–IENDŽB`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment376ũ­ĒBIDATH‰•Kn9†‹ajĄ™že†æ^zAŧĘš€wņÂPĶĐ"K_ HŽBÁ‹C ŧđļ,ÜÚŦüÅ~¨%ËÂÔĸüšõøYdũģ8|-Š‘Ë+tĄZĸåëΚŗļüīäp ˇŲ}<U "§v’ÂægCž1ßßO'5ĐĢŗ>^RĖ› ĪŽ!ŠĄËW’AKSŸ ˇTņä¸r-q-üKZd*YŲ8ä¸7ģ Ãw™Ē ũkBģÄĻôšôfČÖ 5čËH=Šfp cāë@UGûdčJ¨æ‰gé3×ĮŊÄM&1×tÃĶ‚*ŽN‚wnWäī9œ¤ŠÛŋ)PÍ­ĪÔpcHmGú†č)Y/éh-Gíuāžz‡jšŪG=S’Oė * øqOķžZĄ°dÅŗ•ėŒĸĻu[„ĒâXÉĘö5cYVøÆHĸÕŌzĄž×VyP”kķB\­]ŧą|ģ§:ŌÔÉëÅÚÕ76ÉÚ EēTŅ:YâËĩk’ķẢØq•i™\ˎ Čj@˛œ7N +[ˇcöÅ1ŊčiuĮ-ũ)Aú“g.íüÁ%<žü™›Lq.åĶen%=‡$gģ-SÕt2.@ô4–sŪ&Ą ÉŗDûīŠŠË?xÛöT ęwÛhfĐĐ6ĪMgÕ4˙{Į?ôÖr9=+ÖaēŊcŽAĢö`nM6Ū‚F´Ų@ßĘĶ"SuĮŋ¨`æ4Ę$Ã-™nžk|ķeģÅŪĶL˙4AīčĩŨ Žneƒ|lŊæŠÍ[Ám2 ŸÄ˙„Ę›ĨI:!@pŦîGŠ]'ŋ…7Ĩf“Ü=ļ~xįĒŅĸ›KÆ+Pæī?ĻžkKæûuÁ–9ĶĮ)Eˇa¤)’cŪríø1ö4Ė$2čSkÚ)Ķ'ĄađŒ9üĀķžŧÕ2đØSLÅ$f„{âTqg ų°.2MEcŪĶîį˛Bˇqkdė~Jģƒ~‘iÖo;ŌŊ’™*æoŦéŦË+V ĀmGwFЄ…ß”éˇCęzĘIĖE û Ĩ…šŖ¸…—*’ëĻQ,:ŠÅQj¤å<ķąõõĸÅEŪcŪ×ĢQGÛÉ˙ķ…ĪīGŽ{ú%e΄ˆ„–IENDŽB`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment391ũũ‡éIDATH‰íÔ1ND!`ԂNŽ0×ØÂ„+­ŊYžyÅ+ŊŌžPlé„ĐÉ&~yąåw[Š/™aĀā‡1™ŋĸIúÔ ŅÉ^™ŪÛ¤ÂXeÖāJõCmîUÃÂu­XĘ Q{KUljŠ~ŦU”(ĸ>:˜EM@ D]3gĸU`¤ĸÉÂ85äÜ8oú$cŊŦí`›:U֓íå&šjxāZŽ˜¯D›¤#b9UŨωë3â™ėÜĩÜО3QÉ—Ŧ2Vßûę-ŗžôQŊËeŦŊĐũ~+{)xĮÚSāķ{ųM?ÃŽģîúô :€ķ‹hÖFIENDŽB`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment377Š<éIDATH‰íÔ1ND!`ԂNŽ0×ØÂ„+­ŊYžyÅ+ŊŌžPlé„ĐÉ&~yąåw[Š/™aĀā‡1™ŋĸIúÔ ŅÉ^™ŪÛ¤ÂXeÖāJõCmîUÃÂu­XĘ Q{KUljŠ~ŦU”(ĸ>:˜EM@ D]3gĸU`¤ĸÉÂ85äÜ8oú$cŊŦí`›:U֓íå&šjxāZŽ˜¯D›¤#b9UŨωë3â™ėÜĩÜО3QÉ—Ŧ2Vßûę-ŗžôQŊËeŦŊĐũ~+{)xĮÚSāķ{ųM?ÃŽģîúô :€ķ‹hÖFIENDŽB`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment392dôD= IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment378ĸ€­ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment393ķtĢęIDATH‰íÔ1nÄ P" wᙋŦĖUrČöj‹-÷{"žVŠ´XiĻ@ū1[ķ6QL1O€˜a0؃ų+ĒŽÄĐ×5Ų¯k|Â}ZÔu 1ˇD/ą“™kęüŦ­ĢëųĄ/ģ*\å=ŗĮÔš+QÄÕ^šÎØR‘ɍđ‰ÁA=ŅĄÁ@ÖĒE°0äÜôZôšŠëļ2Eęå XĸÚJ؊Áôä#ÕŠhöD/zę“2ĩEĶž.?hO´ŅÎ/ $n{9ĘęëdŌ7ŠëmÁÕeÖ)øBĩéĐÜ?Ļßô3zčĄ˙@ŋūņņ›ZXģIENDŽB`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment379mĨ°;ęIDATH‰íÔ1nÄ P" wᙋŦĖUrČöj‹-÷{"žVŠ´XiĻ@ū1[ķ6QL1O€˜a0؃ų+ĒŽÄĐ×5Ų¯k|Â}ZÔu 1ˇD/ą“™kęüŦ­ĢëųĄ/ģ*\å=ŗĮÔš+QÄÕ^šÎØR‘ɍđ‰ÁA=ŅĄÁ@ÖĒE°0äÜôZôšŠëļ2Eęå XĸÚJ؊Áôä#ÕŠhöD/zę“2ĩEĶž.?hO´ŅÎ/ $n{9ĘęëdŌ7ŠëmÁÕeÖ)øBĩéĐÜ?Ļßô3zčĄ˙@ŋūņņ›ZXģIENDŽB`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment394—á IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment380“áP IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment395úŅžėIDATH‰íĶ!nÄ0PKž@%_Ŗ Ē¯U°Ēŗ*Ė•Ö Č5ŧZ°°^f0š_GĨūŠTВ˜<ĪHã™1Ø9Ŗų{Ŋ-nģ Ņ‹f1ą¯Ķ~’ú:$ Sĸ.KXę‰Åf‰Ky÷}ĩ[lyŨĶĘtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ōŽĻ„Ņę“ëë=ãÅB‰ĸhh:0=…sk͎˜„éĐôZB_õ'}ގwbŠĘˇĸ_¯ē"ņö ŋĄžMŨú`Ũ÷Iũ\Ų´cÁčéĻā—ĐžüĪîz衇ūJŋ'ķ#' %ŲIENDŽB`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment381äæ$ÆėIDATH‰íĶ!nÄ0PKž@%_Ŗ Ē¯U°Ēŗ*Ė•Ö Č5ŧZ°°^f0š_GĨūŠTВ˜<ĪHã™1Ø9Ŗų{Ŋ-nģ Ņ‹f1ą¯Ķ~’ú:$ Sĸ.KXę‰Åf‰Ky÷}ĩ[lyŨĶĘtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ōŽĻ„Ņę“ëë=ãÅB‰ĸhh:0=…sk͎˜„éĐôZB_õ'}ގwbŠĘˇĸ_¯ē"ņö ŋĄžMŨú`Ũ÷Iũ\Ų´cÁčéĻā—ĐžüĪîz衇ūJŋ'ķ#' %ŲIENDŽB`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment396c™€$ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment382}īu| IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment386z‚ąe\IDATH‰íÔąnÂ0ĐCũõ/ôücˆkÕÁc>Š é'8bȈ#†ÂōõÄvˆÔМ"%ŌËYžs.ĀÄ<ŠÆSu} 0Ķėoēw‡Ø§\@¯RnxE>3ˇ)yƒŪ$Ĩ•áĀė’:3j 3ĨŦ>jX¨ŸčZ˛Ō\wyW¤ %҈ģĸā‰FĶEŽŗÆR9YõNÛ>);œ¨"ŗuŖJ ŠíT/tÁvŸYÔ'ũ`ŽrEŧ,õÅ`ÕO”hÔĩ–cYúŦV4UÄúĮ™%JU‰bŌQĖÚc ŨzbeŖŠ§ęGõlëšw?(ښg+_t ā°žĶvĸJŽ ÉÚ]ôtSV;Æ&×{Q”}ų@uyŸ;ųÕJŸŅ]ĩē“Q8&}īI;=¨|íį`Žg–k 8zuU’^‡O.ø[æH”2Ą’exŌX=ÎãŠO}ęŋĐ_”Čŗ’Ë IENDŽB`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment387 …ķ3IDATH‰íĶ1nà `wōČ^Đ1C%ŽÔnĒâNŪĘ|NM*9BmyđXĸ,X"ŧ>돒1î–ÍHˆá?īHđŸ‘'7Đ~]€ąĒ2EĮuÂã M@TWšŽĘzĨdQĻ.WåQ5(ĪVD:Š$ãž2ĸ\UŦ,ė×UÚ;ÕDܰ‹ĒŌ\5Z@Ō3)á-Ô0Ė[Ÿ\–÷Y ]9ÃÎŋȇÅŅ MŠ•WŅÆšQZĒÁ)>ąŧĐ:ԓ!“^…ltØ/i…Txb–ꀴģ*ûĒe§~Rz¯fąwŌ„Ĩļ=ū ēsP)3å텖”ôÅņB}Úá¤Vę‘ÍĸųqŌ× eŊ›ë8ŧēgduS_]Ķ"úũ÷ËDDoô÷7ŨtĶMoĄŋ׿ŦĖKIENDŽB`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment388:œbČIDAT•5Đ1‚@ĐI(°1ÛŌq +÷J–F4x;¯a‰Ą ô  J—Ø|âúĮõW/ĶĖäƒá,ÆdĘ$āJŨfh*˛TŋBŲ’õ› Įŧ{qB~8ˆÚn ¨]€ôŽĻMĀ‘ŅCl†Đ°ˇ˛”ЇĀVF‘A ÛXą‚SēˆH0¸\#n „YŪĪȝĸ_܁FÖų0phÂķŽÕßä9đˆXvvF)´ũČJĮķÍķ‚ēf•ę:´Įl-§aéôB>ÚģĢĸëÛč§IENDŽB`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment389ę=ŦôĮIDAT•5ËąmÃ0EҰ`'.`ä/"„›ITXcdYâ.#R•Ō\„ņŸIšÕi.Hƞągáü ZĮĐān(›ˇAeT9ãļĒŋfyĮ¸v †ž $?WȁkėėTÁ¨!šâ Yh8ۊ\Ąņ…ÁĐûJ1 Ôų[šRë/dAnũVqΧž`Á˜NũΏ&ĩîĩŸ˙ø*xķŋ6õū‡îS¤stŠiã" ŠÕžģ"ZÖô UĢ n$M“˛IENDŽB`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment390Šú%^IDATH‰íÔ=nà pĒ låUéēûĻȖ ‘ą”!ĮčЋehސŠKļ7 (4|ØnŌ9Ē„üŗdŪûķLüĢ#×ĸŽzûvÚJ’˛Z"Ė]ÕFÄgôŒ"!îÜÂã¤~ Ë/ÛÎũQ• x:!ØpD؛ĸ Tn,lP\PĻŨeåAųʖ’īŠ…_ē­ęDTjyÕ]UīFúÁļ}åCũd;XëŦcEčdVô‘Y–õTvY WCĨę)ë=éjfš¨i‡Š=õŒZNõĩ *Š.Ũ@ŨPCÉc-)ˆąĘ¤6¨¨ôŒš6)ô2ĒÚü(ŋjÚ ĸč:ĒN*B7ú7į]G•I3­ØcFŋ)ēEõúXtĸ W"Š]ÄΘ—Œ–ė “<(NcžŸ{“bÉLQÉT܅ =ø+…y3Š3ËĶüžúķëzū*7ŊéM˙‰~ëȒäÄØÂëIENDŽB`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment391ũũ‡ŠIDAT•=Ī1 Ã0 P… }ŸŖ“)ŊT‡Ō´š1WJđāąWpČÜMPã_ŎĢéÁ—>ˆ’‚īņeâŗÁĖL:Ķ6COķw=rÃ4Aʸ‡…é)°;– b|Å͒aŖ.hSˇ(įŸWv¸ßüQ Y ĀP-›ŽBŊ÷ŋ:îՄĮ•ÆĨADvÅËDŋČ5 Xˆ§%äáÁĩ§ŊE--IENDŽB`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment393ķtĢHIDATH‰íĶ1NÄ0P¯V"tîiæ 1WĸÜ"b˛ RčŌrŠŦ\ä ”‰öF¸y°(â$K…h2e=Yžų–•\¨BũîÅgĢꕸŨŠĊŦĸEõ ܁ú•XƓ]Ņ{mįę0ëü¨° đ›Šî.ęûÚŊƒŠŖEeŦŖÚú…™$ę9Ē…ž›ŠõZʨMb^,k§ĸšēxĸ¤-ršvˇĄ+ĒęįģD āíâDĸÛCĒWÚk- …ōĐ>¸D!ǃbkS•JdTÆųŲ0ŒĀé[­MÕü¨ŖĒˇSc4Lp\Q '‡Ŗž‘IâTC<Ɖ^H›ž!Q‹Rú&40QlЉYŊæXšDŠ4äĖ9V‰:ʘäÜõ×2WíQx^Đī¤ūœvÅų°…øË2™UCãēü?ä’ĘĻ›nēéčŊ {…¯IENDŽB`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment394—á¸IDAT•MĐą Â0ЃnĖx *˛V ä$rA dˆ\¤Ė ļh(Mį"ōį§ {ŌŨ××E  ‘0O,šÜb@Ôd]’wMÆ%u[Ž}¸ÖŽĀ4ŒWNÅ0Æ>ãÁ° ãȨÕ§ŗĻX%FŖéCIö‰K}hEŸ+ënÜā}‚˙2&Æ;ОĒ?¨ iķ2CLų Á˜3dĐrÎ#Áw p'2# œrē6QØžņ.­ž“‚ CqIENDŽB`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment397ž°˛DIDATH‰íÔąnà `*îT†ŽQŽ¯Đ­Cd^+Cey`ė+5ō×0ĘOe8q=œ:˛)ÉŠaCŸî~ ]Y¸%íÕ5m$íČ Č+”ôĸY PāFš ĩZŦO:dTļ^ƒĒ}N;¯å7ęKęHRT›=yŌcn$֒<§ŅåÔLēËŠœTč#É2šĸQŠAŲ.ĩ§K˛Ŧ%­´I.˙,ũ¤ĄR&iÜdíX%GšÖ~u¨~Õ×ĪŠŌ>ĀIÁøŖ`ImÔ!@Ú3õgĩŦ&—U˛7BY\'i <ëÆb•¨5Lē–‰ZT Ö7ëß×O[=WØŗRÔ­õX­œšĢÚ{ĨF}ĩVũ\Qĩ“ƒÅúaŠ`÷ŖēuąĐĀáķŪ°~xįāæ]‘P§8ÄW†Yh¯i<ëļ~†ģŪõŽ˙\רšæ`wIENDŽB`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment398„!­#ŌIDAT•=ÎAJÄ@Đ?L ›`_ k¸äZ.Ât$Bo/āaŌDđ.:¸˜Ĩ5ģĘūV"øWǍúā@ˡ"×,eD:ņÃņžGŒ|qĨoą&ē žAīVeƒY.nũá3åŌÅ˧[f…UFƒ-_E씇$>T`âĻãÚ €jN˜ĩÛąüáf8Ûčķ@Â?Ž™opŲ×_Ų:;aMå+Âf(žEœH+&Žī䤰{{ôƒÛĒĶųx´‡IENDŽB`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment399ķ&ĩ¨IDATH‰íÔ1Â0 ĐJAbėr”\Ģj*1ô\NŦÎ$7&Đ ņ˙ĐĨKŧžÁļôíÎHMŨaú¤:1-c´T}ÎXŖO‘fëS T=ÖķÂU‰Î‹öH×Ēy§ZíËÔ%ܡDĒÁeŦæ]žbŊÍza3ۉĒíMü>-ŠúšĢ@TĸA†ˆ5ŠūĮ¯Úc…Z'?ûŪMĀPۅĸĀųš6mÚôWßd€õ…ČƖIENDŽB`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRD ƒ ãS pHYsb&2 tEXtComment400^wˆŨŋIDAT•MĐ1ƒ0 P#Ǟ5܀+ôTę…:˛%c¯DÅĀ5‚¸€Ų2Xųu­ęÁzÛ˙6ˆĨ.&lbTîYĖv[˛–ĐŽŦņíĖ¤Iš!¨zi^áJ •1ĄN*wEB/Fū%7ÕÉíĸ¤đû¯6­‡jš|,wõŖfd”ĨiDĻ”ķĄB*Ŗ­™gęĸũFëTšŊu]3ė“ô6g}ggU$ë “^.dš€¯’ 8}H§Eløî¨¨?áėIENDŽB`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment406ˇ-čĪIDATH‰íŌ= !`a ģx¯2EĀ+ĨĪĪ ),÷JRė5”\@HŠ-ĉŌųRœöįɰ8•IDAT•]ĐM Â@ ā'‚Kįæ&æhļ]ŒŽ<‚Wqô$/PWŠ-yΏÕ,ÂI X˛fÜ8e›Äd^Ôd0¨é lųǘtŌn†Å?ėĻ Ļ VŒiœŒsƒ{CÅûŠ)h <˜KâË>æüwUwːNąy78:ÃÚ;âíK>Éž|#ŊåYŽŗĸŧn$IENDŽB`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRA[TNĘ pHYsb&2 tEXtComment420lAę_ĒIDAT•=Đ1 Æņ×8tôoâ5Œ}MÁU Ž^á5:âÖĄáķAąL?BīĄ-&|w ņą›œSyčÆ=7%˜GĶ`ĸŠU7ū˛ŗŠĶĩiT SŪĩĒäRuBĨhŧũbQ*īVÍĒIO‰‚ę^5ŠŽõÆ(ČļŠÉM}Sd ŦĻL†]š˜ÍĢļI‡:ŊĀw­h`•Vf6|´<û3÷å_~ī ŋĸĖObIENDŽB`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment425+ĐcIDATH‰íĶ1nà `"ēąv¨ÂMÂ͂#Wbô|•F<öq•ĨŖŖ,HAī/ā¤*&ņŌ!KŪdņIū÷`˜ŠŠ=Bģ¤ĸX? ×xQ=/t‡J‚ɨnQh .ŽúuCe ĻĸĮRIīĀLÔcМĖ÷ÔÕŖûRЏøõpCÅöĒŨT}Ō6éĐZ{žA•ÎvĐŠ0Øë\™g‡¸‚.,*Ę´J.Nņ_ųKûf‚ÜŽ/´˜Ģßú¯Ē9ĨyÕs:˜9ŨÜŨõŦÎÔSŸúÔë_ĀĩÆĐŠ IENDŽB`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDR?ŗÔûá pHYsb&2 tEXtComment429RûąIDAT•=ĪAN…0F័ČLv`w".ˁ š%Ëc#4nâ„Aíņ–ŧŖ/šI{ްiYŗØĄÁVˆ4†Pā>Å [vīb0ŧu˙/xQ1]ļ×.ȸ# ŋ/Ė19¯cåįÄaɆŨđAôKĪ´sĐČÕĄO}Ô& ŧÜ/|Ũ,ĩ/wŒg|ĸąÂhû+žĸą+|_đ(ÔžtČų=[Ą}˙]¤į0Į…ÆIENDŽB`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment4350/‘ÉIDAT•MĪ1nÂ@…áGėÎ{义sĨ”),Ļ  G 7‰V.(9–R¤ĩ”"&röĪ8JÁH3úŠWĖ>[./âī@,DĮĩ$V3Nû?$,ką'$´™Q&Ę,–3ėyÉąCŽSŖŧ‡ĒõĶA`UéÖ1Vč–čK[}&’ĮZ}$Î ĸ.~ûĮ{ [‡dáUÖĩ Ãŗĩb7•ũhūķÅ ëĮÆ[ė˛ĨqãX`Ũ´Ž5‰ˇC~j4Šķ‰Wo_žųsĸĄá1ŨŲöIENDŽB`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment449CĮõ}ŋIDATH‰íĶ1 Â@Ёi„š@Hnbn–([¤37Đŗˆ Įˆ"X§Üb™īšz˙66 ™rĒ?‚ĖėdU⠌\Ī€ÂZĒĻf Ņ}ÔĐiF=ÕĄô}ÉUsęŖiĩŦ†ŦúķúRŋ%:;\50}8¸žŽjŅ›C­‰‹N.­ę,*†¤ZÔMIU¤éŗÚ5iËúŖ#oNiT/QCsĘfYÛ­‰š`̈ziīŌŗË&MÔé×~ÕUWũ }^}éÅ­Ĩi IENDŽB`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment450#|˜­IDAT•eĪ1 †áŸt`1rƒrŽä (6ąŖWjĶĄŖGBâj & Ÿü¨“Ë›g} @ˆ%„ßTLdMp%˛ĒP[++lŌÉ4;V#ž°Ž˛€×?HÆ&0+:Æ2{Œôšp‰Œ‡Ã50žđÅ?,ŒCÁQ0ėDDú\ĐėĨOípYúÍ å"˰ÉPsÖ|‘uĻLV č %2'UŽ7ƒ€7ĒØŸüŊŒhŧIENDŽB`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment458-ÛôĒ&IDATH‰cø40%ģŸŊŖ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛ÄË[Q…Ķ]?āIENDŽB`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment460-/[×IDATH‰íĶ1Â0 Đ  lÍž ž7H¸YÁU/Š%HQÉœß ‰Ą^<<ɊÛéF$÷C-ĒĢFÍ$ e@3¯Ž“ßĐnXî@%Z&¤ŖéJĶ–¤Š)ĒÜÔ#uQ'u¨_S‰ĖjŊ~5­Ļ™GPšæĻŦ•ž›öw$šĨiH}2kÂwžkĩ$HŊÖ3åžfį_õÄ@­ŲĨžš@Ši˙ÍĻsšTŌi*^Eá^ÉŅ~˙ųjG2ĢĸK˛ op#vŨu×]˙H?āúĀ6-•+IENDŽB`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment458-ÛôĒ×IDATH‰íĶ1Â0 Đ  lÍž ž7H¸YÁU/Š%HQÉœß ‰Ą^<<ɊÛéF$÷C-ĒĢFÍ$ e@3¯Ž“ßĐnXî@%Z&¤ŖéJĶ–¤Š)ĒÜÔ#uQ'u¨_S‰ĖjŊ~5­Ļ™GPšæĻŦ•ž›öw$šĨiH}2kÂwžkĩ$HŊÖ3åžfį_õÄ@­ŲĨžš@Ši˙ÍĻsšTŌi*^Eá^ÉŅ~˙ųjG2ĢĸK˛ op#vŨu×]˙H?āúĀ6-•+IENDŽB`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment460-/[ŌIDATH‰íŌąmÃ0…aēré ŦE \ÆJaČT¨ 2Zã/@"…YČ|Ąz>Vn čĩ_w÷4fÍË40Ā'Dų€¯Žęúķ‰jŌ,GĸQ{™¨Ūõ*#QģéÍ5đēŪ~¸†Ä4EKĮĸŽŽëĻA´ŽÉ`h¨ÃāŠ…]¨Fōۛę‹ĻOĻŗÃXtŠë`Å%ˇ˛æčĶ…Š3§MŲ-ZęŠ^e&ĒEûŽuĩiĻZĒ čXĪF–ˆoŠk6]üÃ/ęŠĪĀ´ļ]wŨuסŅyõ ŒĩÖEöIENDŽB`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment464@ëBĪIDATH‰íĶą āk:tkW^ŖC“{%GĶÖ¸øVšø"8𞉠šŒ#?›ƒ 7‘|Ž -ÔJŋUaŊa FOPå€Õk(¨[|ÔkĀjŲ‰¤Wvąąĸ¤kQĪ|aŨ°“ĘČv\ îŲø 4DÍ$éŖ.0gīŲ*T—t€ēëŦ —&¯–š¨=1֞hČwEíGMVÕ§ûU°rŌŲč1ߕz“ŪRgüdœHm&F*ÔĘV%ûŸ’61H¤ßÚˇPUĢV­ú7újđö—<ŗĸIENDŽB`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment465xGÛÔ¸IDAT•UĪ;Â0 `Wš-S'r•¸ Į`J‡ {Ž‚ÔĄc@*Fē‘!ō“ $&ļ,?OāŖ \ƒš Ė_L –  bÆâ1Gb…q ėČH­4{tíîō@>ZvnčíYÍ€Ļ—įZæ-žÍ#ã:$ŗfXŠčŠmˆ"gÃÖKTŧCNĩ!¸kpúã’,­0>ļØR" S<_äĄūV§ü—n` ŌI’˜ÛŸøģšDíIENDŽB`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment467–Iēø˛IDAT•EÎA ƒ0…á îšxŠ‹^¨Ŧ´MÁ uĄdá5"ēUܤō:ĩÍęƒĖ ?a}/¨@Dč€ķŽÎ jŒí†žqØPÜ tëņˆ€§ Y!âËų>"ää 2ŸĶĮ„c _Ōb‚ēÁE$Ļ’Ū&¤VĐīĐuPļ䐓@Š2e+†ž Nã05ÉŖų!n1ô B?ÃȌŖjԘxNä-î,_œĩŧ ōžüIENDŽB`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment468ö§iŲIDATH‰íĶą ƒ@ P" J6ˆË X%›˜tŲ‚5RĨ d„ĸH{(..į=ßĸI‡Û'ßYōwĻFÕŲŽu6u4õķī™FX=Pa•Ē{Zڏ@=Ąf°”TIę:žîMšD˙ļ<ŠhæzŅëčĶĢu ôžh‹TxmsCŲØ ­t5uöMéÕZÚ8Z ņH~]UÎVwÉ ŲÉĐ*[}$C%Pƒ’ŗhÕŖl…ĀŨ¨§hė(-ŪĢĀ;"5ĸlĩëŽģnŌF„~{ģIENDŽB`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment472˙86ĸIDATH‰íŅ1„ ĐIļØŌ#pŽ‹-Ŋ’Gá”ÄlVŅ˙­6L1 y™0|DIyyJßLƒ¸h Îb<Ö &: KUxopL}Q‹Uyҧļd™tÜÎHŋ7tĒ æ<Ņ‡Ú˛^ë2čŠ~šÛ šÚ/hô<ŧۊÎ^Փ-PīJ$ĮÅwYI +#U)ŗQ^äŪgˇšéÎÚĩk׎˙¨+áÆF¯‡ø?IENDŽB`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment474[ÚšIDATH‰íÔÁŠ1Њr,Á‹‡fę7æ°lü”ũ„=z23ĖÂÜôüŊ ėo˜Áƒ×/9)ĶŖ°lo`/jAŌtIŠĸh'ļđw+=ŽĀvÕôNļێ2ÆĐSöĨJS̉æŋPiô}åšÆFÃS´Îj ņWÎiIË͙$ã”ßTØFĮĀŽ/ŦŽžß n4ē¸1 7ĢVÅčíq„>Įņå‹Fœîw&fÄĀ]ÛAŨūŊcĄ7Īh_ĢáqŌä+$[ĢMAĐ}D~ë’Ģ;ĮŠ—õ¤×ÁmHjđōUpiA‰¤¨ÍXЏIC™~*5šˆ&ŠWŲņÅĸ¨ÉĮ7šôŸPUĢ4iøZôtÖuŖŧž_’ŋ=IéėViŌãY)Ē •–v8Øīŋ•ĶU.*Č¯S@&ĮėG•Í bfö pHYsb&2 tEXtComment477R‹š–IDAT•mÍ1 Â@ĐXîr‘€[LŦl„\@đ*ŲŪ;+ۀ…[ŒķŨMDÁßĖ+fæƒN ŧqD÷P°K-č;IØķ`Ģõ‚&ãLō˛âVŧNЊ)-4¤Š-^+ø iņ,đ¸gÄ ŨröŐú]l 6†é š 0ēđ`OÉP8͘ᘯbíŦÔ>ŗDŪÄĒŧæƒōšöIENDŽB`‚ pix[203]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment484‘ÃÆĖ´IDAT•EĐą Ã0Đ *ÔY)]´HĀd”láÂ`Rf%/"“”N…đåËIķyŨŨ}đÍdI‚+ŖáfÁĀ žXFnô|xæĪ¸Ã †ôƒū" ĀiĮŽ‘܉A#_éŊAēÜsÉrQŌÁÆ`-.ļā…V0¯œ|Ķ[Œž*ÔŊsƒJįN¨t’ 'Čĩ ĸ2šË(sl˛Ŧ˜i üĮŠ„vY•Ā-% ä œ?ō— />IENDŽB`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDR>\ß pHYsb&2 tEXtComment487ʗvĒIDAT•mÉ1 ƒ0†á/¤āRČ šˆ‹Ē8t)x“âā5PŨR˙×DÚN}§^pe0|dÜ&Āû5´dÆŠĀ-ą@Év‰×;D‰Y6&$%Õ¸s@Ôĸ§— ÂŧX#ļL5öŽÍĄbōX34ŖĮ˜—âV æ@׉m9{čŒP nf(8ģíjqûŽ °ëE;}Л‚-įŽĖmé |–‹,ŌēIENDŽB`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment490ĩ3”ŽIDAT•MĐ1Â0 P31ve‹8IΠŲRÄĐąGčU :–#4ęĀHĸ.Šõc§¨ęödŲņw@2ˆ D…AÆ/%č>hęŒ ŠņDŨípGå3(|2nEd,‚›āœ1Pēā˜O]÷đŧ"#đöˇĀ:øĶˆ2õČËDŠ%WæÄ1¸Ųfpfģ&dL zB Ëw5„ŌŒ_ôšŠIŖåÛķoxü@ēØŊü¤ŌIENDŽB`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment495˙ßĮ‹IDATH‰Å•ÍŠÛ0€GS_Œ˛‚ŨGHo.5ąaĄ}…žD!VHŲcÛcŸĻQéué3¸ėa/ qČĄ†5VGvKą7ĐĨĨC‚e}iFķc€˙!éYzuĪŽ €=ŲĨ9z’VOFgi§Ë˙ø¸ŋ úÅęÍ`ŪŨöĄŨ1=Ē ;Ąhâ+úķvčéÔ9î.Ú§Ŋ_•Ft¸;@ąYāę õSVĮēe zft4˛Zo}OŽŖ!Ú]sÁÍ ]ØÍ…p'õ$ŧG`GŲĩNŊsƒqŗ+\WÃ;ÛB$^9{¤Pėoy‚åüđfBoĩĖc¯ˆ‡i¸ZŠIČŖáCÆrŌđ‡ØKˆU&ŠäÍō eŋj=BJeéx¨¤}ĸÕč9ĩEO¯$”•Of“.ëŅ ŅÚW)îĶé´ õŖ}vj"ĸŽOIXEF5R&€ĩåŋįŦu7ĻĖc¨$Éąp6Šaž×Š6ĩ`ô™xSx’Ë18*g^h?ƒĸū,ĻíŒNo9Ä3ēŖˇ˜/úįîx*{Ū=ĸėŪ¤[˜‡ÅāŌWû4)(~,PôōÆüD”0•ĒuØG€ŠF%OÔ!ú)˛žʏŠã g–ŠüDŖļTŲ0Š.ōô¤ÕW`×dëˆōüÄßĘÃ\{ ķLŽô6×Z•­mÉĢLŠ#=Ô¨,iį×@”÷>DIB˜e?Õģi•ŦÉŖ’œœeI¯ õB†ŠĻ™r^4o¨MzIŖûÆ B~’b’ÜŽsÕS[ēŲqH6éēSÛJZļˇžË͖yC)Zû–ēo˛ßåŨv Õ÷WIÆŠŽ+åíΓEgĻ*ā$NK‰æŪę,'{IENDŽB`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment491ø˛‹IDATH‰Å•ÍŠÛ0€GS_Œ˛‚ŨGHo.5ąaĄ}…žD!VHŲcÛcŸĻQéué3¸ėa/ qČĄ†5VGvKą7ĐĨĨC‚e}iFķc€˙!éYzuĪŽ €=ŲĨ9z’VOFgi§Ë˙ø¸ŋ úÅęÍ`ŪŨöĄŨ1=Ē ;Ąhâ+úķvčéÔ9î.Ú§Ŋ_•Ft¸;@ąYāę õSVĮēe zft4˛Zo}OŽŖ!Ú]sÁÍ ]ØÍ…p'õ$ŧG`GŲĩNŊsƒqŗ+\WÃ;ÛB$^9{¤Pėoy‚åüđfBoĩĖc¯ˆ‡i¸ZŠIČŖáCÆrŌđ‡ØKˆU&ŠäÍō eŋj=BJeéx¨¤}ĸÕč9ĩEO¯$”•Of“.ëŅ ŅÚW)îĶé´ õŖ}vj"ĸŽOIXEF5R&€ĩåŋįŦu7ĻĖc¨$Éąp6Šaž×Š6ĩ`ô™xSx’Ë18*g^h?ƒĸū,ĻíŒNo9Ä3ēŖˇ˜/úįîx*{Ū=ĸėŪ¤[˜‡ÅāŌWû4)(~,PôōÆüD”0•ĒuØG€ŠF%OÔ!ú)˛žʏŠã g–ŠüDŖļTŲ0Š.ōô¤ÕW`×dëˆōüÄßĘÃ\{ ķLŽô6×Z•­mÉĢLŠ#=Ô¨,iį×@”÷>DIB˜e?Õģi•ŦÉŖ’œœeI¯ õB†ŠĻ™r^4o¨MzIŖûÆ B~’b’ÜŽsÕS[ēŲqH6éēSÛJZļˇžË͖yC)Zû–ēo˛ßåŨv Õ÷WIÆŠŽ+åíΓEgĻ*ā$NK‰æŪę,'{IENDŽB`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment496f֖ĄLIDATH‰­Õ1sÛ6đąœ;ÖėČAt—ĄĢļjPįōr×ECb§ģzÉ]>BúQ ËāąũšŠ¯Ėi0Н˙Gē6Iq,’æOđ`ĸ˙õ:—›Ÿũxj+Ęäá Û]˜”\ķZęvcđŦ܈žŊ‚*į’qK[rZų8ĸčfŖē¤Ļ-:Qŗ ķE^­ËŪžļ%ŋÍĘ3Qŗž*ŽYœåTøųf ŗVĨ-ôj øõâÛīY Ņ´čz9͂'b6ĸ˅†zŞzšĨ’­ōdc? ‰k5›RâŖĒ(ÚâZSæ ækėĢ~Ōŋ´7wDgôŊ[é`8tƒ…V•ŗRDēĒĘæEԓŽT_ŖBÔÔÅ/ŒųÖ?ë„T Î't~cäãļ”EŅGũŠ1|ĶnČ ;”„Ϥ¤B>DĶŅĢdL ØßŅĒpĪēmbLuŠKY?ŗ]´;ãįr{)š*Â@›Ņ^Ö[ZXŅĒĢø -­h =P+Ķ_nļ9"ŦksĒ´yƒ4íJžaŨīŲS.úĢWģČ7–ûšŖXŌõō§Fwϝëå’æĸ÷om‘˜ S]ūpøĘx¨:ĘBŧ⇂ŸtņŸ–déü ˛|ÚVŌ3=ãĮĢŖ3ō„Ä4Í*mo­#PzUđË˙ØÎNYIÕĩ­ũ<ˇwEOé‚,4×ҍ÷–īŸÆE1.ņČ{/B˙ Ë'1Ëö¸ÃÁ`ü¨VtČ{ÕcZCŊ{wßÕĻ´÷œã›h}NędĐÖË­øTAųČģžĒVīj™Ø‘÷=U×AîlЏüg_?GyÖhņųīgŊhzV´i&zāŦ7ßvgŠŌJÖd˛]]ĩ—k ?QčbáɯÎs}Ēō/ęU3#’!ëū:ãĖMՈG.z3J_ģöP*\ŋy7ČŅäĩTŽēâŽëËĄ&hVfČŪ-—CÅąƒĨŠĸ;Ž×CŌĒQ˜ŌąŖÍS¯4 Q–ĢĢ’ģsŌ(9TėÄ ö‚ĖdNúškzÔCG卞¤÷ĖÄąÕÁ¸eûē@<ÍbĒ~Ėė1Ų—ąŠå‡X fdBČQåĩĢÎėKtŠŠU›”Č^lŠĻÕēHDBŗ—aIENDŽB`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment492aģR¸LIDATH‰­Õ1sÛ6đąœ;ÖėČAt—ĄĢļjPįōr×ECb§ģzÉ]>BúQ ËāąũšŠ¯Ėi0Н˙Gē6Iq,’æOđ`ĸ˙õ:—›Ÿũxj+Ęäá Û]˜”\ķZęvcđŦ܈žŊ‚*į’qK[rZų8ĸčfŖē¤Ļ-:Qŗ ķE^­ËŪžļ%ŋÍĘ3Qŗž*ŽYœåTøųf ŗVĨ-ôj øõâÛīY Ņ´čz9͂'b6ĸ˅†zŞzšĨ’­ōdc? ‰k5›RâŖĒ(ÚâZSæ ækėĢ~Ōŋ´7wDgôŊ[é`8tƒ…V•ŗRDēĒĘæEԓŽT_ŖBÔÔÅ/ŒųÖ?ë„T Î't~cäãļ”EŅGũŠ1|ĶnČ ;”„Ϥ¤B>DĶŅĢdL ØßŅĒpĪēmbLuŠKY?ŗ]´;ãįr{)š*Â@›Ņ^Ö[ZXŅĒĢø -­h =P+Ķ_nļ9"ŦksĒ´yƒ4íJžaŨīŲS.úĢWģČ7–ûšŖXŌõō§Fwϝëå’æĸ÷om‘˜ S]ūpøĘx¨:ĘBŧ⇂ŸtņŸ–déü ˛|ÚVŌ3=ãĮĢŖ3ō„Ä4Í*mo­#PzUđË˙ØÎNYIÕĩ­ũ<ˇwEOé‚,4×ҍ÷–īŸÆE1.ņČ{/B˙ Ë'1Ëö¸ÃÁ`ü¨VtČ{ÕcZCŊ{wßÕĻ´÷œã›h}NędĐÖË­øTAųČģžĒVīj™Ø‘÷=U×AîlЏüg_?GyÖhņųīgŊhzV´i&zāŦ7ßvgŠŌJÖd˛]]ĩ—k ?QčbáɯÎs}Ēō/ęU3#’!ëū:ãĖMՈG.z3J_ģöP*\ŋy7ČŅäĩTŽēâŽëËĄ&hVfČŪ-—CÅąƒĨŠĸ;Ž×CŌĒQ˜ŌąŖÍS¯4 Q–ĢĢ’ģsŌ(9TėÄ ö‚ĖdNúškzÔCG卞¤÷ĖÄąÕÁ¸eûē@<ÍbĒ~Ėė1Ų—ąŠå‡X fdBČQåĩĢÎėKtŠŠU›”Č^lŠĻÕēHDBŗ—aIENDŽB`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment497ŅĻ7ĐIDATH‰]–Īj#GÆkļ…;ŖV؋`Úā%— <žå–gäãę(XáiEM^ Î;䲐ĩЂ/=BÆņÁ—ˇņĨ†Š|Õ#y흃%ô›Ž?_}]˜¨{˛îCÕDûdŊ|2÷D Y˙9•?ʄēōsúUGqvÜŖãú3š“–ØÚĶ„čõs:H‘•„ë2fĪ#įEúŸ*?N_OŸá“íįôčÍĐ_‘ŅíéHÕ?4”ôŸŪĪËVúčĢH†IŌčOqŠ’ŠWē>RėŠ—Íė;DŨ':UŨŲį4'Ž:äøz¨Û”÷yÉ2­Z톤ŠÕúÅqŨfėu]ĒÎ뮛íS2ĘQ\PyéEÎ'­ŌĪõ~ ęā؈Twv)¯1dVĸŠ’š[^{Š\ƒfuž¨Ĩ˜¨|õk—5ŧĸŠtMĮBĢĨÄ%ķ2îŠĒ5&„žÍøĻ‹ˇ¯Üûŋõt„‚SĄåMW[YŖĻé҉§,*Ō¯ö᝜ø<ķHÉŒėĩPGÔMh2:;åĖA4U/ųHü2€Žéũa„’#ôÚt‚h ´ú…Æ ŗz‹Å@^ĘÍ,ĐņB "ũаO[=c&tĘÉŅŊŖFhCMoj9ĐknČDR.ËBļÖnhĒ›’ņ37ŗņ:îhŅkK āuhĮjÖ¤î{0—•–ĻĸxSēÜÖUmۀ{ÖߛŌŅč{” ŦږÎĘēō%œí— “Qj˜ 5įZĩ•į h4§h;Úhh̚ęŽÛŠųĘĄí/hZūöV1ĢPfąbĄŧšŲ{T$‡|íuBåŲ\…´UŦ´â/ƒ­' -¨/É@|äFÁröqŪ҆ų>ęŖUŧqš\Ā–—ž@Ô6ōOYŖŠwØ#ũkĸ=:ŗ6ëú…ĪØÛ{,”ĩ\?˜˜ĢēUOũÚPSy jëņÔÜÖüDīĄ˛yÄąÛ”līyŗĨÕ/ÜwĖÁ *č*ô´Ŗ¸‰å†ī–°jĢ!X&žRŧ\Ü í'z›Œ,Úßņo˛ËÅR¨Ŧ ž¸MČ@Ģ9ķėwâųÂmiÁT ũPAÎŲ›ŸAOˇä:Ņ Œjąâe9sę2m´ĐÍų’ąÚAørÅ5ŨlŠ™Īa*%”Ų^Š2Č{˜œ5æŽ˙ŗŠ°Xˆŧö&„­Vķcq€Žã°„ŋŽuģŖ›Ģ+Đļ2|Ņޤ…'ũŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­Ûڌ;OÂ:j{ÃūôÄڙHĨ›|KŖiEfW reM2‰‰ūÍmĐë5čļ lüׁ a•!'ˇc}ÕJŒ`ã;žėgœ =Ą˙†āHPĄF:IENDŽB`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment493ŧb.ĐIDATH‰]–Īj#GÆkļ…;ŖV؋`Úā%— <žå–gäãę(XáiEM^ Î;䲐ĩЂ/=BÆņÁ—ˇņĨ†Š|Õ#y흃%ô›Ž?_}]˜¨{˛îCÕDûdŊ|2÷D Y˙9•?ʄēōsúUGqvÜŖãú3š“–ØÚĶ„čõs:H‘•„ë2fĪ#įEúŸ*?N_OŸá“íįôčÍĐ_‘ŅíéHÕ?4”ôŸŪĪËVúčĢH†IŌčOqŠ’ŠWē>RėŠ—Íė;DŨ':UŨŲį4'Ž:äøz¨Û”÷yÉ2­Z톤ŠÕúÅqŨfėu]ĒÎ뮛íS2ĘQ\PyéEÎ'­ŌĪõ~ ęā؈Twv)¯1dVĸŠ’š[^{Š\ƒfuž¨Ĩ˜¨|õk—5ŧĸŠtMĮBĢĨÄ%ķ2îŠĒ5&„žÍøĻ‹ˇ¯Üûŋõt„‚SĄåMW[YŖĻé҉§,*Ō¯ö᝜ø<ķHÉŒėĩPGÔMh2:;åĖA4U/ųHü2€Žéũa„’#ôÚt‚h ´ú…Æ ŗz‹Å@^ĘÍ,ĐņB "ũаO[=c&tĘÉŅŊŖFhCMoj9ĐknČDR.ËBļÖnhĒ›’ņ37ŗņ:îhŅkK āuhĮjÖ¤î{0—•–ĻĸxSēÜÖUmۀ{ÖߛŌŅč{” ŦږÎĘēō%œí— “Qj˜ 5įZĩ•į h4§h;Úhh̚ęŽÛŠųĘĄí/hZūöV1ĢPfąbĄŧšŲ{T$‡|íuBåŲ\…´UŦ´â/ƒ­' -¨/É@|äFÁröqŪ҆ų>ęŖUŧqš\Ā–—ž@Ô6ōOYŖŠwØ#ũkĸ=:ŗ6ëú…ĪØÛ{,”ĩ\?˜˜ĢēUOũÚPSy jëņÔÜÖüDīĄ˛yÄąÛ”līyŗĨÕ/ÜwĖÁ *č*ô´Ŗ¸‰å†ī–°jĢ!X&žRŧ\Ü í'z›Œ,Úßņo˛ËÅR¨Ŧ ž¸MČ@Ģ9ķėwâųÂmiÁT ũPAÎŲ›ŸAOˇä:Ņ Œjąâe9sę2m´ĐÍų’ąÚAørÅ5ŨlŠ™Īa*%”Ų^Š2Č{˜œ5æŽ˙ŗŠ°Xˆŧö&„­Vķcq€Žã°„ŋŽuģŖ›Ģ+Đļ2|Ņޤ…'ũŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­Ûڌ;OÂ:j{ÃūôÄڙHĨ›|KŖiEfW reM2‰‰ūÍmĐë5čļ lüׁ a•!'ˇc}ÕJŒ`ã;žėgœ =Ą˙†āHPĄF:IENDŽB`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment498nģĻƒIDATH‰ĨÕŊnÛ0`4jíĻēvk‡4|”ö šąšREz?G§¨Čø *2VFSÉëŨ‘%Kjö ˙ˆŸx:R¤,Ā Ŗ,€­Qî ~Wø*¸•Qāu‹o­•“ø]]k X¯Č ZČ h('h,ÔĻęXo2¸Â.ĪžĨãšģ ­¸Î@|: †3Rņž/û„UĖ2¯![×ڗĒ;¸n‹šßƒæ6ãPõ@kŌ č[:ÔNnFē+ĒÃŊV|šIæ09ĪHēAC-x įT†ž3Ē“NÂ뎕m9ėĢ2°GR5VãõʲļA]RjÁĩ0Ōw^(e´p& ‰ŨĩWegûjQ_-ī;ž_ôņëRlē4ŗMÜæoÃuŋoúuÁŅŠĮ+7?ēœč<§uüqėĩŠcõ)¨ÁûũŗÆOŸŲĐĻō‘ĘéĢ2ļ‰ĩČŠâÕHÕXĒpłZđîØQßXDÔ–žWŠÄ-5u0ƒÚf&ē‹zęu—žP3}+tãwusŠáŪW0 Ô:¨.æ4.G3ŨJ¨ũŦnįĢ ąƒÁļšō5Ķifū¯šœį¨vŽŨDm/ā<ŌZÍŠ J[g2Ģžī &aX÷¤Ũ’ę)ÄäK#‚Xķõø}-ũņ6S˛q]}]XĐ<ĪN-eū ˇ’ĸpã 7sIENDŽB`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment494ˆØ÷ƒIDATH‰ĨÕŊnÛ0`4jíĻēvk‡4|”ö šąšREz?G§¨Čø *2VFSÉëŨ‘%Kjö ˙ˆŸx:R¤,Ā Ŗ,€­Qî ~Wø*¸•Qāu‹o­•“ø]]k X¯Č ZČ h('h,ÔĻęXo2¸Â.ĪžĨãšģ ­¸Î@|: †3Rņž/û„UĖ2¯![×ڗĒ;¸n‹šßƒæ6ãPõ@kŌ č[:ÔNnFē+ĒÃŊV|šIæ09ĪHēAC-x įT†ž3Ē“NÂ뎕m9ėĢ2°GR5VãõʲļA]RjÁĩ0Ōw^(e´p& ‰ŨĩWegûjQ_-ī;ž_ôņëRlē4ŗMÜæoÃuŋoúuÁŅŠĮ+7?ēœč<§uüqėĩŠcõ)¨ÁûũŗÆOŸŲĐĻō‘ĘéĢ2ļ‰ĩČŠâÕHÕXĒpłZđîØQßXDÔ–žWŠÄ-5u0ƒÚf&ē‹zęu—žP3}+tãwusŠáŪW0 Ô:¨.æ4.G3ŨJ¨ũŦnįĢ ąƒÁļšō5Ķifū¯šœį¨vŽŨDm/ā<ŌZÍŠ J[g2Ģžī &aX÷¤Ũ’ę)ÄäK#‚Xķõø}-ũņ6S˛q]}]XĐ<ĪN-eū ˇ’ĸpã 7sIENDŽB`‚ pix[214]: xres = 0, yres = 0 ‰PNG  IHDR?"Āl<7 pHYsb&2 tEXtComment495˙ßĮÂIDAT•UĐą Â0Џ"‘.Ų/‚°Ø„˜ 6X‚’X%ŽXÃEÚD4FŠ|œ ŋzŨŋ;°h ڂúî"āė:ã捨ĀŖ%v‚SĘč né‡;ąúC•$Ȏ@Lŗ‘eŸĄ‰.tz-3ŅÜåå@ÁtŦŒ˜2ĜáŦųB¤} I¸!*ÂĒęÕY´ĮĖ\‘/Đg˜&ã„ØV÷:n™GÚ`&$ŪÜ"\‡ ØųŌ¸ŗÎņJ— IENDŽB`‚ pix[215]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment502ąģƒÆŋIDAT•UĐ!n1Đ,Ln°W0 ¨â+-ÜĸÛä*k,ËåĨ –gTdĐc˙˙žĶîĄ(;Ū„:9Ž‘-@÷=.lGčā膨âÆ|ŗI~ÁƒUR9etŧƒ:˛ãä{eǧ#˛ú°V–€¯:;&°N†¤Y™Aˇ,+.ęˆ+ö:KîņķMMļf‡ŌâEa¸[yĮ!qŧ,ŖŖø”›<ōi_°ōĮņ adĻzĒeŽIENDŽB`‚ pix[216]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment503ÆŧŗPÆIDAT•MĪ1ŠÃ@ ĐŋØ0a.`21öĩRÁ…Ë\ÉÁEŽ1CŠm•n á9)vU=郟YTr F˜ÃîÄîĩk!?\×25ŠˇŊL5’ŖĪŌâr1ÆüäĖ;3…VKŋ¯•œŧ ?ÉIENDŽB`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment524jîDq]IDATH‰íÔ=N!đˇRPRØX-WØŌb2ĪŖx„-­d6[l§7đ$lļ°ķ ˜5ąĨ¤ <ŲĖNaŖÅR@Â/˙G ĐLkāĸ¨~NõœŅĻâsYd3jÔfF­ŌķĒ~¯æŦã˜ģŽšN įäeA€´lĸš6mVs7ÍXK“*ĢŖ™č>ĀJėŖ.čÍ*7T<žÛ¨GZ?“ŠĒ’ځúëxÖ(y›uc•I)Š íĐ ;Ō#uQíIQ¯ņs’=i%Ŗž‹˛úZ˜{õô“*nz))ËJ†–%ŨÄu‰Ķ~Ŧ2ĢNwƒŅ!ÔS•d ë.ÔW“ŗâd[@õ5VŌ@qÖ+äëP]Ė4‹t¯œÜ\ëW6Q ĩēķJīĢ^´cRîGz¤ŗÚ¨+*uęjaûIĨ‰Z~åā̤f°Ŗžfú*Eķ;ĸr0+méŖl˙îŸŧčEŠų‡§žĩĩHƒ IENDŽB`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment525étįšIDATH‰íÔąnÛ0P*ĘFŽc‡”÷ 3&ŠūH?Ą@ FhÃ6ûú+rY KŅ_0… ^/čP%Ȓ–d+@tĘdŌō¨;ī ŸY ö˛ú+ŋüĩúˇÚqĄ=SXR=ĸ…›ã¸ Āķ‘SY8$Å'ū' ?¨(Āë>>FáÆôw$:ĖkŽ„ãOT *Ęú)×{ĐÉĸG‡û}§Æ8 䲒ž }IÁĀ,;Ŋoŧ„G—īŲ"Ú[aayR<ŽZã\rÂfķ–wēĄčUJÖ*T+Ōf}ĶkĘætĢßåaåtĩūüáŦ”ÚIH)!}ûúĘ6gmZe~†+Нp¨ĻS7UĶŦlvÂé*ÚVįjĒDX<Š ŊŲ×ųTŒJuĢ  Eܞ5b̜ĘŲ­†Æc4ũ Ô}í’*ĸģōļwĢĄÂöxWDķrūŪüįĢ.v[ĪĀ´]°Ĩ+ߙ5ĒĒ×$Ié¤ü›”* aǤuî>M¸gÜJĻΠŠŦîēđEaĶĐk@bčŽķė¤"ÕŋH#Ũ7Xį-*kĐģˆ›bû ÖK˙.zŅ‹^ôũ “lyõä­ŌIENDŽB`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment526„ā%]ĀIDAT•-Îąj1 ā?ęÛŧz8’×čPâ>V6_č×ŠšĄ¯aĪ]T˛h§Ęw•@| ! ļ ØĢŲ3ƒ=ŗ-Ž“-Ņ0 lŗƒļŗ>ŖŌ ]´| tĶr—ëô’Đĸ„;A BHé´Ŗ|ŪĐÛVļ7bŋĩrŅĀį æˆ-Ñ%ōĪr  <87 .õwĀׯ}GŗG—Ņj뎾$OUAzMߎmN¨Ļ†w^Ë /Ķ9ڏüÚZŽĐ<ySIENDŽB`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDR<"+[‡4 pHYsb&2 tEXtComment527ķįËŽIDAT•5Đą Â@ …aŖ) n&€•ØĀ ײŖ ”"eVH”‚2/WœÎœÄÕ×üŌ“Iցwd)x(ž—HD¨„=u:ŧH0”* tĸīpâæ§đŅ5¯ĨÚ°ŧ“4 ÉՊnČ č>;…€ŗ—Ґŧ´†Č ŌCO"5¨ΆJå/ÃŲ÷†1“3LiCģáÖh%‘WŦ_ ;ú3ūōqžÃS¨`„IENDŽB`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDR<Xã@â pHYsb&2 tEXtComment531ŸŋĸIDAT•UĪą ƒ@ PG”d¯"ŨZ).č JVQd PˆQ§û9BI~ã'ëģ0ЃEHNy$oHŽUF8pj26‚Đû\°åëÚ Í*— ë„Č†į‚ąl^âī?”2Ô#ėp˜,xhËAÛf4tzûĸ\UĸÜĄĒWuÁ0ĖŅõ CrčLs+ĮŒ…Ąųõ a|;ŠŠŅžĀœIENDŽB`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment534sõu0IIDATH‰íĶ;n„0Đąļp‡s€HžFŠ(žĘd%@Û%WĄô9‚Ņ ¤s¤‰'c`ŅÚ°(U*ĻB<äųxڈ>7õ}S_7UŊ-ß"ˆĢĘáá|Ģ 5guyŦT8=ëˇMĩôjÖūhmiR’dšdĸrREö´Ôä:¨ĩųŗöhčžũ➿Y aÚīPŗ?āN&I•—eë€5SôąTÂ9¯Ĩ‡T ԅčÕTøVUƒŠg}ŌŠ ˛]ËĘIđ¤mˆėeRōkĘĨ͚Ū¤>gÍEÜQ7(ęĘú x&kę‚*āyŪDy=™ĩæŧZhËڏz^Q *¯CĻXģQl×ÔRôE]œĄ¸Ŗ"¨å;rĪúĢĪqü5Ļ@î Î{ā~Á8ū.ę¨ÅK"ė¯ÅÁJĀ{Ę{%čn°nÄŽģîēëŋę/w ¯ÜápöIENDŽB`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment528cXZIIDATH‰íĶ;n„0Đąļp‡s€HžFŠ(žĘd%@Û%WĄô9‚Ņ ¤s¤‰'c`ŅÚ°(U*ĻB<äųxڈ>7õ}S_7UŊ-ß"ˆĢĘáá|Ģ 5guyŦT8=ëˇMĩôjÖūhmiR’dšdĸrREö´Ôä:¨ĩųŗöhčžũ➿Y aÚīPŗ?āN&I•—eë€5SôąTÂ9¯Ĩ‡T ԅčÕTøVUƒŠg}ŌŠ ˛]ËĘIđ¤mˆėeRōkĘĨ͚Ū¤>gÍEÜQ7(ęĘú x&kę‚*āyŪDy=™ĩæŧZhËڏz^Q *¯CĻXģQl×ÔRôE]œĄ¸Ŗ"¨å;rĪúĢĪqü5Ļ@î Î{ā~Á8ū.ę¨ÅK"ė¯ÅÁJĀ{Ę{%čn°nÄŽģîēëŋę/w ¯ÜápöIENDŽB`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment536û IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment530t˜ą) IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment537ęü$Š(IDATH‰íŌąnà `"éØĄŅ%C%^+SŽŅGąĢŒ~, ʂ%ä+āĨĮ[§ší÷‡Íq>‚;KŋS{Ęv•ÚėÁ´Ģ*W™kĢē˙Ξæ:­ kž›Måkûâ˩ʅcŗĨũ„žĄĢü)fų¨Ž†ŽrЧô–kĶŖ&Đqs‰°Bo=* 3Z—Ž/”5Ø´8ÎņēĀr ģ[ƒwTQđ\Ą]¸ÁÕWˆv)ŲÂmhž”!Ę= AũFÔūí‰Æˇ4!Ĩē SĢ yĪ5ÔŸ(Šm*ēPĐAë§Úđuøí|Kš€ŗWVų e¯×ŗåpC‘|ŧ\NēęŌŧéRŕøÚPæmČf6čŽJw,æąÔu衇ú/ô­\öymÜûIENDŽB`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment531Ÿŋ(IDATH‰íŌąnà `"éØĄŅ%C%^+SŽŅGąĢŒ~, ʂ%ä+āĨĮ[§ší÷‡Íq>‚;KŋS{Ęv•ÚėÁ´Ģ*W™kĢē˙Ξæ:­ kž›Måkûâ˩ʅcŗĨũ„žĄĢü)fų¨Ž†ŽrЧô–kĶŖ&Đqs‰°Bo=* 3Z—Ž/”5Ø´8ÎņēĀr ģ[ƒwTQđ\Ą]¸ÁÕWˆv)ŲÂmhž”!Ę= AũFÔūí‰Æˇ4!Ĩē SĢ yĪ5ÔŸ(Šm*ēPĐAë§Úđuøí|Kš€ŗWVų e¯×ŗåpC‘|ŧ\NēęŌŧéRŕøÚPæmČf6čŽJw,æąÔu衇ú/ô­\öymÜûIENDŽB`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment538zC9 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[231]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment532š–Đ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[232]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment539 D 2IDATH‰íŌ=nƒ0`G ŪJÉ×čÕįęR“‰‘#p”&b`ä1dŒQ†ē’åˇ6”Á†˛t,zy„ũų‡`Ŗ2ōį-eŲ–ĻCđĄßÔ:Ôâ( ĩÔ¤Ģ*ĻŦ›P›Š>å!֛Û­Š…“˜ƒĪyéę 2ŅŖĻ‘-$ĻŪ|f‘–-j)t_ãô,T^ PĐ{5"ÖLáÚī¨žW6Ģ(-wĸŽ\T6R|X7k…ÜīpˇPnDįŽ&Kī€4¯ĄÚYy딐XĩĶ8U$‰U9Ĩîi}ĶbŠWKmŠr\RŦqļÔ;_ÕL¸ŗN+ˇTĻšf>ßb ęh~×°vŨu×]˙…~Lãõ@;@ĨIENDŽB`‚ pix[233]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment533í‘ā“2IDATH‰íŌ=nƒ0`G ŪJÉ×čÕįęR“‰‘#p”&b`ä1dŒQ†ē’åˇ6”Á†˛t,zy„ũų‡`Ŗ2ōį-eŲ–ĻCđĄßÔ:Ôâ( ĩÔ¤Ģ*ĻŦ›P›Š>å!֛Û­Š…“˜ƒĪyéę 2ŅŖĻ‘-$ĻŪ|f‘–-j)t_ãô,T^ PĐ{5"ÖLáÚī¨žW6Ģ(-wĸŽ\T6R|X7k…ÜīpˇPnDįŽ&Kī€4¯ĄÚYy딐XĩĶ8U$‰U9Ĩîi}ĶbŠWKmŠr\RŦqļÔ;_ÕL¸ŗN+ˇTĻšf>ßb ęh~×°vŨu×]˙…~Lãõ@;@ĨIENDŽB`‚ pix[234]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment537ęü$ŠõIDATH‰íŌ-nÃ0`3ŗš°hžBPÉWŲ6>åš ˆŠ {”Ĩ ÜŌX~}NՂę=ŗi$~ŌûWX ¯ūC[YÛßŦdõ&m]Ec´˛Ú* áۈÚchd=“Ę™ëzDŦuE*Ī{øŠŠí1ʛ$Ā+sŊręēŦ(ŗNaĘ{ęY{OšėĒUŠÕŗöĒ‹nĒēûd,ËžížMv @úūÁ%Nvš‹ē™Ģmˇ(đęîŠVÁĖŲ,ĘøSGdúØrßļüÁkäÆÅ@ėYÅĻ@סšÕ%h^ÍÕ}(œų™î*ÉĒĢŽēęč ĩ°øŒė˙ ŪIENDŽB`‚ pix[235]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment539 D éIDATH‰íÔ1jC1 `“7x‹Ž 3tčZBœâ!×ōģIC/āQƒ°b§ĐåIÎčĶúõ# Ô5üÍ?3Ŋ./U\’ÅW‚*ÉQä™*#܅lŊ=ĩÍtmčŧœz*_ą%\Å͍V[‹ Ũ‡&CcÖBßCÉPX5PŠŽĸĢX/Žj鑊övĒ_õfE({ÚbtUbaĖâ(Į¯Š™/ö~9æJšåmh†ĨŌ­žû]UÜö=ÆquOCOP?ÕÔ@ō‡­}}-/]yÛWKŌ  ēĘ6ķ_Ŋ×ŋąëŽģž‰>VŠŪVõÜgãIENDŽB`‚ pix[236]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment540;Ų'îĶIDATH‰íĶ1Â0 ĐH2öš@ GBb'•:tä= zRqt+’Š1{žGÄ/ždŲąmX‰ÎüŠ&ËÄt:YŪB^‘ļĸKF™gŅPVōĸķTâĢj ŊŽä NĒvĄAúŲKmYĮ÷3Öûŧį+TŽŦéōÎ83//U×,ũB}&kŽ“ąüÕî4Ĩ6Ļ“í7¤ŗL͗\¯ėšA4f ~āä—Ę5ûV–6/Fú=:6ÍÖí‚čn&y,@•¨Zĩj՟ęÖnųŊQĪ×"IENDŽB`‚ pix[237]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment545KŗĶaŗIDAT•MÎA Â0ĐčĻ0(æ"ĨŊ˜BAwzĪR÷Bowų&UÁˇøÃ|ØIoPDž ŋĄ­H …č Žš ‡6öĐHŠAYūŅR…­ÕĢ$t¨Ā€”âŊd:Ņ_‡6šë¯õÂtę‘43uUīTQ×ĮŽfϊÅTÛú‰Ē…¨ØL}[}ÕĀ´ĢĨCnëfƒ!K[?Ä&ŦLĨßŦ‰¨?•AšÎyĐS;īŠ „5SŊE”‘ÜÂOT°ģB¸p->,ĸYLO /˜ū4R-9ą´““¤f’ĒīëZ’Øt–ÍŖĮâŅât›äAtël‚€ũ”ĢíŽT˙ÛĄ‡zčéƆûYëqRIENDŽB`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment550"¯´IDAT•mĐą Â0Г"áooB6KPH™X%‘‹”X)h(Œh‚düšs@āę5ū÷īë‹ôæŸĄS‚)!” aG^Ą3ˆ ƒŠ1§ģ|^°Ĩ”âąYqûâH‹Áĩr¨É7[s‡ž13Ŧāâqžœ7*¸ûÔĐøR;IV ëxz&jŠÚzn¨\0vąhät˛@Ɯ0&ō^Ĩ4¯ŧ^åésŸ%ĖĢëg{IENDŽB`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment552ĖĖwƒÔIDAT•-ĪMjÃ0āgdĒŠģėÂT ņ•zÕŨdŲ+É84ËĄ äēˆ B¯#ĶŨķķföžä=C†ņ‡ chˆÂ‡Ļ< †&OÄ0˜TŅ3ØßŌB<ׯ[šR jiĄŧ`kĻ<QĮ{yPŧú`¤U¤Q÷ Å%ëœŸ:ܒ;kwVx*¨Ømˆ>N˙¸dÜ7ŦWŧ%÷ũņĒaî}RėM<¸šŠâZÅÁÄŦYŗ:,ąØEú+ôTk"4”|ˇō‘+>{2˙ÖĨ–^VË-IENDŽB`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment555R¨â IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment556ËĄŗš9"{ú×(IENDŽB`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment557ŧσ 0IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ’,ûŋŦ=>Ų4sÕ “ĩŠ{‡,|´O}§œm}IENDŽB`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment558,žFIDATH‰cø`˙'h`Ā/ûŋl=˛”ØK;W ”Ŧ=˛´sÕā”ĩĮ'K ĩķã•eĮk/^YÜrŖ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛ĘaĨ>ryÜIENDŽB`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment559[Ž bIDATH‰íĶ=Ā €QˆCG/ÔŖ9ô&=‹ˇr0P“î_—`}!üqˆKūמPÕ3ęuÕhÅÜ/…ކú–z“6œˆĩŖīj•Îģū"5ęY ü‚ÉФôĐĐĐЍôāË*¨öœž…IENDŽB`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment560 īElwIDATH‰cø40P$û/¯,ûŸúvܲĖė™qۋ_ļ¯lûŧ˛ė›ņČb—hŲxeTāķī |˛đĘ gÜņ;`˛ėÃMöķ;Üąđ‡ų€ Ž| Ö{€ˇė˙˙ė?ā‘Å FeGeGeGeé* ˜Í/ĸŽ ‹IENDŽB`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment561~čuú€IDATH‰íŌ1 €0 ЊCĮÜĀ^ĶIôfŠŠ7čXĄ$ę*ū VDĄY$!?F”ęÍ#°›‘& ‰&¤L>Ņp[™ā\ĄĀîĖ´Š(zÆ×4t5ÖÁ7ŠöēU•;į(Î(ˇķuš}t|{…4Úąĩ)ĶŽ‚ôĸŠ-Zô7ēŠŖ Κ3syIENDŽB`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment562įá$@šIDATH‰íĶ;ƒ0 `CÆ!AäheāX 10öåéÖÕM`å˙+ĩĒÚ!^?Ų˛ü(„D_|O׎i°3Ņģq¨gjĒŖnæGĘģjë J¨M*°Š#WcĩŽ:éŧ0Ė]úBõJTVķJ‡‘Uö–Šë˜Nījė ũC稍į˜>E; XU/7¨"Ž*ŽŦYŗfũ#}›?nĢIENDŽB`‚ pix[249]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment563æÖxIDATH‰íÔą €0Đ/–!ŖÄÍ XXēRŦ,]!Á´KüNđ¯0  ˙ÚĮUG âém=ĄÆ šū§ĨõNÖLdŸjéhžLD›M‚ē#V¤#ÔjؐÆĒEzThv˛öPÉåAֆ PæÂ_<ƒĒĒĒǍ7ŗĀ5QãH‰Á–Ņ)éķ…Đá”č!’î"Õ°•Ķ kēvķ bĄ€b˜ĪDv 9b~ĩ§­šĪ.ž˛…P1ĩYDĶšS}QwVRü™'9ífÔÚíũ~ĘSu†ķė­ŅŽ_’7ŪTækĄ>&nĀĖ,•Ķ‹žĐî¤Ū}5E­ŋˇõJåWņ3ē>„ęŌíˇí$_;Ŗzé>%tŌJ3Ōŧč-2ÃkëkibŸ´Ę8ȤŊ[Ķ€U8" ™ŖCXusĸT?<Ķŗë jč‘6%Į’ÃûŋØÚčÛAͨ$M)”ÉHw¤`ļ5™SN™Œ•‡ąĘ(×9Žr>ô7]Ļ#m}ŊĢk\A~ŸS&ŋîõkĪh|ØĒSĩ›BNÅ^žžuF; ž(X]Š=Džę(}4QËEč¸U°ČÎkŊĸ#ęŒÖ8“gTRĮĄ˛aŅAÕëŋ7Ąg=B Y{”érn%ũ{sÚyųbWą¯ník]čÍG­˙ũ ‹gÎÕV¤IENDŽB`‚ pix[251]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment566āŒāY…IDATH‰]ÕAoÛ6ā's0] {rĐLûîÍŒ0?Åûvq/TÚî€ažö0ÔEAš í5‡ma—Ŋ2ë!4@éí=ĘJ”č`ÁúDō‘||āk < Ąˆĸ¨´ģÖĐ^“)+€ŋā{‰´wZė5 |[œJūŪâķũK0ž~…;Ģ€ô}ûpÖ)ˆŸš—‘ŠŊÎ÷Ļ@ GG#uĶęļėĢDԃw#õ™u&°„ūeHŸ]åŠ{žÎŗžŌŦŽ)ŽėjNęčÕ,’ŠũÅ žâûÛcå^(ė-ĪNT­Z”iÕۚĩõ+áí.ôũŠiC‹fW“:ÄØĶIĢ›æÛ]đĮjø(æ˙d/vžĐ2Š|ĸՉؚį*ĒEĢ“ģ äûV׎ËQŌb!.Ü*Ī*ö˜•p”Ô8šqbĢ\ŧģ× -^R§“ĸúŧy"Z‡^J'ņ â—G:ŌŋAvŊZ{…a4īĢ[—æo€ā—ēRˆá Û#V|Úŧ6´\ ĖrjÚŦú;˜Ũtz”/Šé úúŨyĢ˙ņv忐ņ¸“V_•ōĩų@:$u‚˛éŲ?Đę”ĸĄÍQ.čXz”Oe…ARNdŨ¤`éÍņË?:Ĩ„>áoø<Š ieš—5…PŌŅ‚™Oc‹¤ąĘw_(æ ImbjĚ5Íišĩm§ww÷™3Îŋ“ĨvQZR‹ūŌt:%o ŦDšĸF'R?Ŧ)õ.q#Ē@K†O”zWIiÚ+<ęk€Ņ`×ĸ\ęKœiũ°ƒasRŲjaŖÁ{͂Ķd¤€Ĩ 0ĩ}PđĢņaîL#ŨPXN%ÚūI cМ ō^+Ŧf”ė7uO Ģ“šÜ`uĘx öj×Ō¯č€žŖãįVĪĒĢV+é V)tRwÆqŅ Ö*ƒĒ9°nZ=aĨm.Ŧˇ˔‚Ž…|“bļŽŌŖŌÍØf”Ļ{÷m”:ĢEÁÅb¯Ÿ#Ģ×SģS-"kÖęõLĨ–ŽŠãaĨe]*h5Fš´M(ĮŖ/ĮĒĻ"5„ Â^9ā!+–ŗąÚQ[.vĘQ NҊÔ×^UĘ/˞jQŌ‰uķ|ŧĀJũ+›Y§|™§Š3ÎiĩD3;GTÚTX3Z*„æh‡ŧ–­ō‹´fģ4]3jžŠzφTôĄ0Û (dJ§jꌒÖnŊ é’ôn¯\aΐuSŠP¸AnzĘ=ÄjXũ"@nļIuɇ;íįmˆfS*˙}„\'ĒYĨXĩ˙Ąņ#åļô?ÚmiümÚnņŦÕAŌ¨Ō éËJĢĸqyuĒí•Wtnŧ-›Wü˙ Y;_•´’Q’ūâYņÚŲuŌmęš‘CëôÂīÛŌ2@A÷hY]ÍmŽßŅéœkͤæ°ÎÎSp[e§+ū/l¤qĪĪwœJ6ĒÕČm4eŖē@Õå$ÉSū„jo.Ī‘ÎĐĨôVâu—“œTŧARC•ÅŅæF•ļŸöah°ĸīMPĸŌ×hË˙cž\ÃĸhIENDŽB`‚ pix[252]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment570ôt-LIDATH‰ŨÕ;rƒ0PORPú*Rä:W*1“"ĨŖÄ>†CR¸4Šˆ1bƒ ín>ž4Q<ŧŲČ+€3ģ °‘¯N ‹šÔwĐĩå5¯ŒēhJŗ~n ŊQnĻēĘg}ūŽ™ôvīf˙ŧ%QˇŽĄŠe1ËjĒdUE¯éRˆëÆiÛ5§ņ`U"=ĪUä¸VAĀôĢî2ßazŽHŌ^5ÛUåßz¸æyí7õƒü:vŽĢĀ}‹?éęˇj1}IbĪŦöCQu7aĨDŸ}N\Éíë?‹ĢGĩn‰/Cũq4ŖwÜ-uĘ\:MĘå{ÖNĶ֕_+míÜ9xĸõĀŠ<4°'5Όz"u+FßTû°!õŖ;=qŪ üåoŪį˙Ģę •č}Ëj)9-¸ēíũ hhŗfUÚub$§Ĩī&˙qķ$Ãbø5IENDŽB`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment571gķDģģIDATH‰åÔ1Â0 ĐH Gā0å(ÅŊWac¤ŽZlH$Žä/”PОŧú;m“õĮ­@/ Š“‘Ļ}Ž%t"¤ŧXßuęj÷{?ÔũûÍZųžÚ¤õô.$H#VœĘ\§cƒęßęu5̍Ķ7Éõ7ŋvPÉĶ|=Kô”)?áĒ"Í–ŨäŌ;¯´WT†:ečæArNFļ8˜ZŲ•™îȰÕ÷N{5.ú å0Ii>IENDŽB`‚leptonica-1.86.0/prog/recog/sets/test06.pa000066400000000000000000002413511506303110300202550ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 202 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment9Ö/VIDAT™=Íą €0 DŅ벆GËôŦ•TŦሂ# c'‚âIŋ9ĖaŋëÉXdHš‘äCŋYĐUīÆ!‚NSw‡ŒÍˇÕe”‡Qmháč/î> r%}ÄIENDŽB`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDR'LņéX pHYs.#.#xĨ?v tEXtComment17EˆQIDAT™eËÁ €0 @Ã5ē ŖŅN†…xæÅ4¨‘ú9Y– +¤AÃĢ@û4ŦPģ›[}iūß3šģ–Ôc(Égōžė=ˇ!ŒLRė/¨gj\z‘IENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR*šbč pHYs.#.#xĨ?v tEXtComment20đAčƒIDAT™5Īą 1PĸĀ#x”ËdņuWf„Ŧ‚äÂkØōDiވ ŦĐŧŠĪ‡Ė‡Év“ N›OP­50, ĐRR˛0Ŋœ;mōpčæ‹č¯Ã=¨#°ēh‹Sŗ€莞ŽE“cz9‡i‚7î{Đ&́Tô¤›õļõƒŲUøũPyMK‹{IENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR'9HS pHYs.#.#xĨ?v tEXtComment22OeĆIDAT™EÄM ‚P†Ņםél'ĩąčŪ jØZJZƒ–Ņß Š&„Đí{ :ƒ#ĀLí+t?ā.°ŌļRüvxí†ãfžņŠšYęĨaiŠē"éVc‰X`™X ‘&bLo˛)­)8:ĶÛāŠ×÷‡ēW{ØĢ’)‘VūĮAŲWŗ`24}šIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment61ã*ņz_IDATH‰cø40ĐHÖŸė?ÚÉĘS ËOžėŸQYâeŲņÉūĀĢ—v˛´ķ/%é ŠũOIj§™,~WÅ›ģiX^ĘŲũ¤ šÉū̧ĀGxõŌ°‚˛ãG¯#ŋ.ję1IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment59ÆÜ*‹_IDATH‰cø40ĐHÖŸė?ÚÉĘS ËOžėŸQYâeŲņÉūĀĢ—v˛´ķ/%é ŠũOIj§™,~WÅ›ģiX^ĘŲũ¤ šÉū̧ĀGxõŌ°‚˛ãG¯#ŋ.ję1IENDŽB`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR( HÖ­ pHYs.#.#xĨ?v tEXtComment62z# ĀIDAT™ÎÁ Ã0 Đotđ1#d“j•ŽĐ âĐēJC& YĀ&„UŲ:<ūáķŦ,XIh°ī EZ'ȋ§ˆR˜3jy¤ŒĶŨq”Å\mžŗiŌr75ĄÅ<íMX%ĩˆMX§áŒŦ,@“Qž ø¯įXC1Ÿ ˇĻ׆%_°ã†Ag^ˇûč)=­ŠxČŠîUVĻ:Ē”#8újėšZüÍŽ5IENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR=|}øy pHYs.#.#xĨ?v tEXtComment1151͏øIDAT•Ī!„0 Đŋ ļŽ×¨ØƒĄ€c!q\ŖÜ ¸ˆNūR:ƒÛ¨7™äOzf’+’gš ‡Åá…Ĩ`„xƙAžÁ7Ō }:jú 6Ŗ“3díëVņ?D LSC͉ ęėÂ#ČpA6Ã)cĸã!ˆ¸>Ũ´’Ō§rŗîųIENDŽB`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR< f“&? pHYs.#.#xĨ?v tEXtComment116¨ÄŪB‰IDAT•}ĐŊà `yw)YÁd•Œ@™r™ Á&°ÜŠāxáGváÜEÕ×ŧ'cvĻ␁`)9,mä;ęsUČJėđBi‡ų—­#cOä "Ō‰Īļ Ņx˜=ąA›CÛ;č‚ôšâ‰0.ä;ŧ“oāMyXĸ›xSĻų÷đdyÄŌXŽ IENDŽB`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR:! Ņ…Ũ pHYs.#.#xĨ?v tEXtComment1198{Ã͈IDAT•}Đ1 B1 ā€CáQęąŪd†7ŧŅ+õáĐkŧâ".¤ŋMDPė’$”$„ņ‰#ihûÆ ˇŦx\ŠĸäĢĸ,’h–ÔÃ@øōž/ˆaČ8{РːÉ2m˛Q˙ĀæY߸w°ĄīĩÃÚ7Ĩ(ĎX\Q8ŅëÕŅĪō]öĘãA…úĶIENDŽB`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR<“ŋ“G pHYs.#.#xĨ?v tEXtComment125āÜ;ŸIDAT•EĐģÂ0 `å\¸‹3^!xĨ”)rĀHŒĀŦā ¸T!$ô'øPõŦיėŒŨŗYŅq"ĘĻYi$ū¤`@¨%ČA  )¨rB˛ŒQbĮĐą.(ž$Y}`1OĘpų(íf@ļjvföŽw‡ũÁõ hyÕ íJŠnîqøŠ–ØÁ3ÕāØyĄį TZmt|‡$ĩ/’€š|Ķ-IENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment131–)cWIDATH‰íĶąJÄ@ā‡\§`-CD整S,V°Đî!/"Üui„}„R¤3‰)’ā¸ãl6{ŲÜÁ*C&ų˜Û˙vsũROÁß4T‚øâÚĖÍEĀ •§đLj=Qū°ŠĒÖmM¸jĒYe´Cái)â^‰*žĻ$+ĶeäëžĸÚtųŒn Ģ;OohČ25ՃÍ2Ģw8n•8ÖŽÆÕœrÖöÂĸĸc­ķ­~O•Až—Ę†ĻŠę*.Y›!´§kÖˇ[OwīZĶn<…רŦ+ø,S)ZyŠÔų*ļ™c?ķįZZ•ũęÛPÚ-Šf¤Ũ+pU uÃCá¨ŌĒßččÕQôÕŲI4ëĸ0/ž)FVc5#øHɨ|˜Ņ—ūØņĘ]W‡D’-Č33{MIá*Ī'ûpų› īí“wJE˙͡ˍ_‹.ēčĸ˙Ē?❷2pˆ’IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment129VWIDATH‰íĶąJÄ@ā‡\§`-CD整S,V°Đî!/"Üui„}„R¤3‰)’ā¸ãl6{ŲÜÁ*C&ų˜Û˙vsũROÁß4T‚øâÚĖÍEĀ •§đLj=Qū°ŠĒÖmM¸jĒYe´Cái)â^‰*žĻ$+ĶeäëžĸÚtųŒn Ģ;OohČ25ՃÍ2Ģw8n•8ÖŽÆÕœrÖöÂĸĸc­ķ­~O•Až—Ę†ĻŠę*.Y›!´§kÖˇ[OwīZĶn<…רŦ+ø,S)ZyŠÔų*ļ™c?ķįZZ•ũęÛPÚ-Šf¤Ũ+pU uÃCá¨ŌĒßččÕQôÕŲI4ëĸ0/ž)FVc5#øHɨ|˜Ņ—ūØņĘ]W‡D’-Č33{MIá*Ī'ûpų› īí“wJE˙͡ˍ_‹.ēčĸ˙Ē?❷2pˆ’IENDŽB`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDR: kVx pHYs.#.#xĨ?v tEXtComment131–)c’IDAT•EĪÁ Ã0PĒrôŒâNÖ$Ę!ctŦ’dƒJŊp°ü ąrá „ž lđ*ŒOÄWH ŒCˆ Cš9ĘxĪŧ8”sX0 eÃüGr[ĀĢkGhĐØ Ɔ [ęWöŠĄ…÷ž~ThCp¤Šķ\ƒÆ7Ä0ä¸`˛wčÉčá  Ö&qļ <ĘR~•§3Xlú!IENDŽB`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR;qcˆ> pHYs.#.#xĨ?v tEXtComment137íõŒV“IDAT•]Īą Ã0 @)TjfŽ’Iĸ*˛– d)ĸBāG4ĨÆ_]ķԁĄŲ\ĄŽŦ(Ž…pYÁb˜YĸĪîę W ŋ‹BČåĻ`˙“6ؖǁPČ@eėæ8@xx|ŦõÄjH+’a9Ąō‚‹aHŅ@9´/´õ˜$…›ĐŪo¨Đ{°ũšŪĻA’ž øIENDŽB`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR<“ŋ“G pHYs.#.#xĨ?v tEXtComment151RĖŽå‹IDAT•eĐą 1 PŸ((3‚W`oF"Ĩ¸’…EÖqi¤ČƗ‹AW¯ų–ŋÁŽaP˛ļZc`˛rļĘP‰O āĀî¸;HBļ™9:íéę/ZāF)M` ¯‘ǁg`ĀũCqĸãŒËĮfu%§ũTÁžQ†GŌ+y=(‹ŠíŋxŲå p<­/ÚßEIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment153ŧÂīɧIDATH‰íŅģ 1 `GW¤ĖYÉk!%c°J¤+ŽA0'ąT\qŠqR˙ĄĻ°ÛO~“üˆLĻĻĻĻĻĻ˙ĸ—ˇTÆē:!’×4PĒĒ…žmššĄVJĢŋ9<ĨkØAãĻ™wÕ:ĐŌU &)ąëy ag ˛`ŊzÕVîĒ•g¤Qn“æzˇRuĒn¤wRĨøÁēäĻāĒēJ>qk9°~0ũ'" Ũk—›IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment147ĸ´‘§IDATH‰íŅģ 1 `GW¤ĖYÉk!%c°J¤+ŽA0'ąT\qŠqR˙ĄĻ°ÛO~“üˆLĻĻĻĻĻĻ˙ĸ—ˇTÆē:!’×4PĒĒ…žmššĄVJĢŋ9<ĨkØAãĻ™wÕ:ĐŌU &)ąëy ag ˛`ŊzÕVîĒ•g¤Qn“æzˇRuĒn¤wRĨøÁēäĻāĒēJ>qk9°~0ũ'" Ũk—›IENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment154"ĻzjĩIDATH‰U•ÁnÛF†—fáU#DOu7›ĸ‡\S 1ĨšõLJ(€íĨāƒR´€¯=ĐŖ˜ēå ´YÕĨ@ÖQŽĐ%˙Î %*åA‚öĶėūķīĖP)M˛ķVŠo~Rf 1s‰KĻ^ ĄUψBŊƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%āOL ×@ ˛ î™97åŋāĐÄaĶĶ[^$­qWåŅGēĩ ļôLŲō…öé ҆čąĩ~öBÕšŽ<6ˆá|¸ g#Ļ­fztJ4{Ü5Jë94čL¨[Ī‘9TÁ؊č č뎞úī ’`6Ū§vObĄQ{lĻ4ŧOf@ŊŖQG›ōd^cũ)ŊƒíRē#Æ!Aí“yēAƒkXNxHFŋĢ*Œ} Œ’âšb}@ŅQ¯T2ŽfKô"AÄô™EģŖz|7G…)pÎô˜ĐJÅŲ]AFM(GŅŗi™ļ)Ņ3–5œ"0]2Ž+˛Wt¨zLtAT]ŌÚĒ„&ē Yįo J‚čŠnž€é_BuŽ‚ūvÂ)VDô€é+ũn3§ƒ‰ę˜6”ÖĸēÖcˇĸ{ų HjĖāĸĒŠkLĩŒ‰Æ_6Td’W‘xŨ3rrõGl`JîįZŌūh”:¤ø—”;YײQ9ļÕŨq°DŲj8ū V˙Ŗ {#Ô ė¤:PņÍĒ}ŪĻ6œPžuZđ}Õ7u{:J­{ųŽØ‹Ž*eˆR7ĄÔ´ÖPIĸNLdgĒ6Ļ)ÁLŦ¸ÁXT 8ɖB'Č ūĸøL‰+ãmP÷IĪێfą7ž7]ۊŨītÕīyįø­ŠÜËRņBķ7QË­G_KÍ2zõϤ*ĒQģŖ%c(6SAmĒŽŽėzÚeĖą‰L•ų% ß ĸNzY.‹(ΜT”OeW~>ô”ę?WÜŗĩíã˜läˎ’IĢTrqN˜^"ÚdŠĨÖˇ I ]p—Oxį+“ŨĪcūĩ=ô%EĪvąWIŽßëĄé‚ĢÃv4Ē[ ]ĐÂÂ[*SsKę¤'h6cƒ-ås/4ŒŠį5ÃÍV_´Đ‘Î4X3Ų´špkÎÛwt¨U"”v]ÎdKŋߙ葍;ķ—Z>ŲŊ–ãĨęˆ>`ķ῎ė•ÛĮ&5ІĒ)ˆÖ´ŲS’4Đ!ÅÁwŪĶęXķ¯MnĸÅ'4N]čãFčnŅĶ)2‹qÍĶĒ Ŗô7ĸ~ēŖÔLį<¯ŋnG$ūáÛ%×R\ĪšũžÃPsFíž.ÚCŨWŒ7ģ§æ}{Ë šŠgũš&ŋ:ŠûØ`Ŗ),ĸ ŅÔĶ’ŧ0Â=īĖ‚Ž+ī葲'ÖĶŋłöŪڝô^E4ĮŨö%„÷Öá{:`Áî’į7ßq$ë×;zl„ūz†ĮũúŦ§éŒŒm|3Ã0•aW^häl4õ§´īLŦčž"øKĄeĒNF‘Đđe?6|+ôķō@hÃg…zįŠīÎ}îœöt ›­Ē7îŅ™ēˆüO¤ĸ‰ŽĘĨBėvj%’kë_ĻΏfƒvøäiøÆ¨.ŗ˙ŗ™æ´áOÄIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment1482 ĩIDATH‰U•ÁnÛF†—fáU#DOu7›ĸ‡\S 1ĨšõLJ(€íĨāƒR´€¯=ĐŖ˜ēå ´YÕĨ@ÖQŽĐ%˙Î %*åA‚öĶėūķīĖP)M˛ķVŠo~Rf 1s‰KĻ^ ĄUψBŊƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%āOL ×@ ˛ î™97åŋāĐÄaĶĶ[^$­qWåŅGēĩ ļôLŲō…öé ҆čąĩ~öBÕšŽ<6ˆá|¸ g#Ļ­fztJ4{Ü5Jë94čL¨[Ī‘9TÁ؊č č뎞úī ’`6Ū§vObĄQ{lĻ4ŧOf@ŊŖQG›ōd^cũ)ŊƒíRē#Æ!Aí“yēAƒkXNxHFŋĢ*Œ} Œ’âšb}@ŅQ¯T2ŽfKô"AÄô™EģŖz|7G…)pÎô˜ĐJÅŲ]AFM(GŅŗi™ļ)Ņ3–5œ"0]2Ž+˛Wt¨zLtAT]ŌÚĒ„&ē Yįo J‚čŠnž€é_BuŽ‚ūvÂ)VDô€é+ũn3§ƒ‰ę˜6”ÖĸēÖcˇĸ{ų HjĖāĸĒŠkLĩŒ‰Æ_6Td’W‘xŨ3rrõGl`JîįZŌūh”:¤ø—”;YײQ9ļÕŨq°DŲj8ū V˙Ŗ {#Ô ė¤:PņÍĒ}ŪĻ6œPžuZđ}Õ7u{:J­{ųŽØ‹Ž*eˆR7ĄÔ´ÖPIĸNLdgĒ6Ļ)ÁLŦ¸ÁXT 8ɖB'Č ūĸøL‰+ãmP÷IĪێfą7ž7]ۊŨītÕīyįø­ŠÜËRņBķ7QË­G_KÍ2zõϤ*ĒQģŖ%c(6SAmĒŽŽėzÚeĖą‰L•ų% ß ĸNzY.‹(ΜT”OeW~>ô”ę?WÜŗĩíã˜läˎ’IĢTrqN˜^"ÚdŠĨÖˇ I ]p—Oxį+“ŨĪcūĩ=ô%EĪvąWIŽßëĄé‚ĢÃv4Ē[ ]ĐÂÂ[*SsKę¤'h6cƒ-ås/4ŒŠį5ÃÍV_´Đ‘Î4X3Ų´špkÎÛwt¨U"”v]ÎdKŋߙ葍;ķ—Z>ŲŊ–ãĨęˆ>`ķ῎ė•ÛĮ&5ІĒ)ˆÖ´ŲS’4Đ!ÅÁwŪĶęXķ¯MnĸÅ'4N]čãFčnŅĶ)2‹qÍĶĒ Ŗô7ĸ~ēŖÔLį<¯ŋnG$ūáÛ%×R\ĪšũžÃPsFíž.ÚCŨWŒ7ģ§æ}{Ë šŠgũš&ŋ:ŠûØ`Ŗ),ĸ ŅÔĶ’ŧ0Â=īĖ‚Ž+ī葲'ÖĶŋłöŪڝô^E4ĮŨö%„÷Öá{:`Áî’į7ßq$ë×;zl„ūz†ĮũúŦ§éŒŒm|3Ã0•aW^häl4õ§´īLŦčž"øKĄeĒNF‘Đđe?6|+ôķō@hÃg…zįŠīÎ}îœöt ›­Ē7îŅ™ēˆüO¤ĸ‰ŽĘĨBėvj%’kë_ĻΏfƒvøäiøÆ¨.ŗ˙ŗ™æ´áOÄIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment155UĄJü IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment149E 7– IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment156ˍF(IDATH‰]ÕŊnãFāĨ„ p6[˛ÖÁnęRZäM¤H Å5‚—ÁB€ |$|”ŖĄBŊ@r¤Ā‚eVQÁ°ÚÉĖ,tGĀ?âįágf×BQĮ) €ÜWĐÁļVgˆb˙ĸŨėQĩר@_A7/ [čļ†ŧІ‹õÛæ Í$tFį ũžå<¨„ŋv>-qeĢ~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzsĄ ™ä^:…ÚuŦ1‰}™$9¨^ļxĪß×)¯{ĘD-„Š“¨.%ũ;Ž%§‘u“āG/éÉôŧČđ+{T‹ÚŦ1SŽÉĸ# úoFå˜2 •ōˇ™˜ŖnōBMÁ)VņĢ“Ŧ"Ūę,Ģ÷A5ëCœįŦ†´…—Š ¨?Æë\UŨŽáØÍØ"ŌČ>$ë\° ąû î NˆyÂj%)ål9qíœFQ%×ÅŠ $ĢŖvÜ%SX iį{ũÎAĢÔ_Ķ$9ú†Ž•:hQÁΰˆ{VĐGXÁjĨXŊЅļ%FÔ3ZŪh˜+Dv‘Úgj:¸`fģįK508ÅNÔĸĻWŧeͧՅrŒĒ¤ŖūqĄŧSRu€ ¸č?S•Ŋ"ũ,nāģĐņu9ÆQâEM‡<×`“ķ ÔũH\˙÷ē‰đ}i_GîNNT^û¸ød}XįÃ-ĸŧĨuo}|œÕļč/+I}"ĄO›*(.Wœ•+Ô_Š&І 'v ģĖy)}Ä?÷ųB#ˇL%%Œ/Åú!rS"§Ž°šp0؎%ūÕīŠ{;č6đJŌkâD’jŦˇSŦ™ å(g õĒ?‘z­gBų˜Õ?Ũr9ŽŖ~YöJ™ęˆĢAŋĀØ7̏OķšĮ ~†ÉP{ŌfŌ6q†ĢU| ÷ sô ë9ŖŠĢBŽøv›Q_-Uv7˙™ĩĨÄ!…įIc™e˜œwPk¯zÔ՜,Ũô÷ͅΧpá4ėaRŧ_Ržp…Ŋڍ*4 —…Ȟ‚mPƒ‘?ŗEÅSąę5õ¯ä¨Fĩ'ĀķxXõfŦÜÉöĀ'j¯*ņ =TĮ ŲÎtœēž’ÉŸ m˛øĨŗĻršū˙ŨÚ¨Bu\(É/ģ;YTȎî=TĒ9Ĩ¯ NŠe87ÖjŠfBVqéSÚ|ÃņŠÂf9LēĻķ„Õ? %CáXoĸA[Néũ…Ö•¸ĨƒÎ?žĸ?ĄÆ&ęčĐ+FWC ĩø<ąQÛߙļ7Ÿĸ]6Š‹.ŖÂõš×ÍąÅysîˇļôĢIņ™ÛObīƒ.ÄLõ__¨ĸŗ=.ņ\‰ûØũĮá™Hjq÷$dČĒūTS#´eíHõĮjÅŖöƒĒIqĨėČ 3–kYĢIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment150%Ëžs(IDATH‰]ÕŊnãFāĨ„ p6[˛ÖÁnęRZäM¤H Å5‚—ÁB€ |$|”ŖĄBŊ@r¤Ā‚eVQÁ°ÚÉĖ,tGĀ?âįágf×BQĮ) €ÜWĐÁļVgˆb˙ĸŨėQĩר@_A7/ [čļ†ŧІ‹õÛæ Í$tFį ũžå<¨„ŋv>-qeĢ~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzsĄ ™ä^:…ÚuŦ1‰}™$9¨^ļxĪß×)¯{ĘD-„Š“¨.%ũ;Ž%§‘u“āG/éÉôŧČđ+{T‹ÚŦ1SŽÉĸ# úoFå˜2 •ōˇ™˜ŖnōBMÁ)VņĢ“Ŧ"Ūę,Ģ÷A5ëCœįŦ†´…—Š ¨?Æë\UŨŽáØÍØ"ŌČ>$ë\° ąû î NˆyÂj%)ål9qíœFQ%×ÅŠ $ĢŖvÜ%SX iį{ũÎAĢÔ_Ķ$9ú†Ž•:hQÁΰˆ{VĐGXÁjĨXŊЅļ%FÔ3ZŪh˜+Dv‘Úgj:¸`fģįK508ÅNÔĸĻWŧeͧՅrŒĒ¤ŖūqĄŧSRu€ ¸č?S•Ŋ"ũ,nāģĐņu9ÆQâEM‡<×`“ķ ÔũH\˙÷ē‰đ}i_GîNNT^û¸ød}XįÃ-ĸŧĨuo}|œÕļč/+I}"ĄO›*(.Wœ•+Ô_Š&І 'v ģĖy)}Ä?÷ųB#ˇL%%Œ/Åú!rS"§Ž°šp0؎%ūÕīŠ{;č6đJŌkâD’jŦˇSŦ™ å(g õĒ?‘z­gBų˜Õ?Ũr9ŽŖ~YöJ™ęˆĢAŋĀØ7̏OķšĮ ~†ÉP{ŌfŌ6q†ĢU| ÷ sô ë9ŖŠĢBŽøv›Q_-Uv7˙™ĩĨÄ!…įIc™e˜œwPk¯zÔ՜,Ũô÷ͅΧpá4ėaRŧ_Ržp…Ŋڍ*4 —…Ȟ‚mPƒ‘?ŗEÅSąę5õ¯ä¨Fĩ'ĀķxXõfŦÜÉöĀ'j¯*ņ =TĮ ŲÎtœēž’ÉŸ m˛øĨŗĻršū˙ŨÚ¨Bu\(É/ģ;YTȎî=TĒ9Ĩ¯ NŠe87ÖjŠfBVqéSÚ|ÃņŠÂf9LēĻķ„Õ? %CáXoĸA[Néũ…Ö•¸ĨƒÎ?žĸ?ĄÆ&ęčĐ+FWC ĩø<ąQÛߙļ7Ÿĸ]6Š‹.ŖÂõš×ÍąÅysîˇļôĢIņ™ÛObīƒ.ÄLõ__¨ĸŗ=.ņ\‰ûØũĮá™Hjq÷$dČĒūTS#´eíHõĮjÅŖöƒĒIqĨėČ 3–kYĢIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment157ģ¯+Đ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment151RĖŽå IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment158+6A IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment152ËÅß_ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#xĨ?v tEXtComment153ŧÂīɨIDAT•eĐ1 Ã0 PA p`ĐELBīeC {„\Å!čQ ]4̞ ]Ēé ú!$A9Ž  J>ņÕCj 8(Z:M#5˙^ Yå´ŠƒÁ Å†× Ų°ŨlgÛĢīņŊ.į‘Ā Šƒ:0ĶÚĀn/ķևá(ÖÃø,ĸĮ;žUīK\ˆG ŌMŌĒGƒ}Eņ(B °ÉX+€IENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR>—JCz pHYs.#.#xĨ?v tEXtComment154"Ļzj IDAT•UĐ1Â0 P•˛ ˛˛ų"Há`M•ƒpÂÄČ‚¸@Į Ü|Ü4*yx’õ-}€į Y¨0ŧÁÔĶT‘zō ģDŀ(”#î€ßãļtdŽļ\6%U83+ĕ!|+€đہņ“ęA„GęVÄD q ™ę*ŗÁ[j*;Ûpĩˆũ‚ŗéČ[9š…äé7´äB¤öP,uIENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR=!B ž¤ pHYs.#.#xĨ?v tEXtComment155UĄJüąIDAT•mĐ!ƒP ā.pĪâz ÄÂģŌ$ba/A0Į¸ /ˆÉ]aGxs/íZØÉjúĨųĶ4Ų‹`īå%>*xĄ,Ĩ! E  @†Æ&‹į‚€ÂnÃSØdÔ5Œ?œ6h:Ã:sŨƉĪĩa…+Ã<|!ĢĻˆ˙A†ÜoĀH­]L­e˛Ro 3éēcLšÖLöe"…cīčŌA(Äc‚p’ųf7ŋoú¨7̐ä‘[(IENDŽB`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR<Xã@â pHYs.#.#xĨ?v tEXtComment157ģ¯+ЗIDAT•eĪÁ B1Đ <Æ„mÁ LKv%‡-ÁF °+0âÁ|X2fķŖˆÃ˛0$§›Ė‰ˆąļ™:Ō/8Ҍ˛ÃŅ+„ÜËbÄcÄOY)ĐÁČ ą"‘8l-RÃ.vŽ ø`ƒķáEqÂA‘9Ã4¸¨HœũTw°xֆLY:=&ƒŊĶĪuÃP“^ i˜P1˙’†IENDŽB`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#xĨ?v tEXtComment158+6AŽIDAT•MĐ1 Ã0 PA YLŊvø"\ĢC¨ -ä=LBJ§B¯āÜ Ų<˙ÚrSĒé!}„Ą4Æ #S¸–V5äj>)á‹’‘ 8ä0đ‡ÛVĀ]čT†7Á4OŽmÆ{`ę%š’vČĩb(ôöÔÕŪTPĢ&Đ1_C§ļÄ/­/ėÔXŖû1•hŨvę€FÕB—hŗé<íkiT8tj)ĄMû*V†Ē“ŠQ3ĶŲPÕkļTÁß:›ę-C‹&Ô፠SĄFĄ["ŦaÉÔđąÎĻvXŗ –>MŨjá‹Ē wŖ y<w&Ōg§ÖȨ¸~=oq~Ļoü=ôĐÖ’ŊŸ‚œXSÚ´' énpE1°5Q ’´d ļåƒW3ļČô'ļŠĩ^ÍÃptø;QIp ĘfåLQ­š­ŗĖÔIENDŽB`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR<Xã@â pHYs.#.#xĨ?v tEXtComment173ŽôK›IDAT•EĪą ƒ@ Đ1Ų€Øā”ØĸL†((ŗ'Š´FiŽpøąī é^aC{ōš_)ė¨ŠZ†čęmi ViąCLWHĐĻq$[įōG[đ9AÉPƒˆ~ËqĪHTtŽÚåáH-‘ÔāXÉ><ņ}"ž FŽzāĄ^Õ0Ĩŗ œÅŦ<Њ _äMž_°Ē6Xy•FIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment175g—(~ĒIDATH‰íŅ1à PG Œ\ 7)ĢDˇ^‹N\ƒŪ€lŽŠōëˆ1Ļc&›v“ÖŌâã÷üü}?āƒ•CĮkĻŗ.tāŋ+Ô¤Ÿ°˙C}N”kÂ}÷wŊÕd@$gŽDāā[ĐÔ6$ĨįeøÁ=|—AKīsĶĐ=1Dá; Åŋā/ųŅkvøŌDûļDĢۊ6÷¨ ¸Ĩc…&WÚēøų9ŨC÷™Ą…î ’æŽvH!ŽLŸb”Zœ•réjJÁwģä+A‚SFđōbYÖt Đ1î/Ü9ûĩŋŖGÃEü­<‡yU¨Y˛éZÀäK<Īį÷,#ås’įņ|ęsßēGģDßĐ&>¯ātŠÉÚw0%*Ū€čđ3ŖBL&š r?)/IĢĮS ›¨ÎÚEMEô-IÉöã)Žŋ }Ūäa#&yÔūlú;QŠ~kN}N&ņ%’ŗŠ(؇ņî,hU‚mŖ$%& r!ĸ¨Fš‡;3 ˜´Ŋ¨$Qō$Ē:\€ Cˇ`G¸X˜ĄN9’„F' u8ÛãUÉPUō˛ÎPŸaŧ{éɄl‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Đ(7C¯siŊÍ tMęZįšáÎ Ĩ.sŧOÉxËļs7’–­~ 4Æ)u]īŌĩ'ŌÂĘč’LKibáęĖ ¨V.Wĩg I˛/‡$ë•Ëž9Æ|!%*<ĢFĨWnpR~L LxĨŒƒ§&dž)y”aB ~OMđ˛Ō5ͨŨ\˜Tؘ2}ĻŨ Ą!ÆDOĶ ąąÕ 0~Üoh:ˆiluyÄf\žŲB̟×iœ3ĸ#‡¸Ôŗ•Sē†B¤íN’ˇ°RZi+P(ŋp4D“û”4kÃé$Á<̓í‹dįY¤lÖæåŠÂɘj§ToŅFJŨ6§ĄņJ”•Ē ‹Sĸ%F+χĐĨ<(œ­đQ‡7X}Õ4Jp€^.’w§kÜ`•áęŽŌÎ/Ņ,=ČķÉë-–ŽˆírX4ŸLĖŌfōyAŽgģŋ <6a(.žÃŌdęĪ@Īv•BŧŖl+¸ŧv ‹Ũ§˙`QĶ“HYđ”ÅõSÄeMGTYŒîX1#oî֛ÕˇĢũ*ĒJŽĶY%lME†ËUYDšPE[ef#QJK1íŪ KļĩgIÃÚ)û0‘¯‹xãoÉ žcČQ7n›8še o„]ԔęŦĶ™éäžOžŅhI›f ˛•ū:Ré{–ãN?”7Ŋ'HC‰×&Œ}ųGžqô¯FršĒi ¯,]Ŧ‚^îi ŊV¸>RĒĮ] ¤U¯đ|áĘäHe3ˇ¤V5ė)/ö^ā&Đ́ŌëĮĮ~Ū> ē'¸Ų)ŗ’†MĮōSē1Ņ%¸[GĘ]B{žo¨&ēߥ­ŠEai–=<]âEĨÛi°H\#l¨:öĨ;Ä,΂-ŗXvf>šÄېzô5åČ#ũ‹],(âĸĻü–^äZ\ŗ Ē›@Ã*ƒV”c=u=%ēÃnąÆ¨˙ ņ-œ…ÜIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment172ųķŊŨÉIDATH‰m•Ī7ĮŸq„9иG*Ņˤ9ôJOå°Å˙ UšŽÔCĻŨ1Z)›CūHû§Ô[¤ėĄU÷ÚCŧ‹TŽ&HÅ´Ãŧ>›v“ÖŌâã÷üü}?āƒ•CĮkĻŗ.tāŋ+Ô¤Ÿ°˙C}N”kÂ}÷wŊÕd@$gŽDāā[ĐÔ6$ĨįeøÁ=|—AKīsĶĐ=1Dá; Åŋā/ųŅkvøŌDûļDĢۊ6÷¨ ¸Ĩc…&WÚēøų9ŨC÷™Ą…î ’æŽvH!ŽLŸb”Zœ•réjJÁwģä+A‚SFđōbYÖt Đ1î/Ü9ûĩŋŖGÃEü­<‡yU¨Y˛éZÀäK<Īį÷,#ås’įņ|ęsßēGģDßĐ&>¯ātŠÉÚw0%*Ū€čđ3ŖBL&š r?)/IĢĮS ›¨ÎÚEMEô-IÉöã)Žŋ }Ūäa#&yÔūlú;QŠ~kN}N&ņ%’ŗŠ(؇ņî,hU‚mŖ$%& r!ĸ¨Fš‡;3 ˜´Ŋ¨$Qō$Ē:\€ Cˇ`G¸X˜ĄN9’„F' u8ÛãUÉPUō˛ÎPŸaŧ{éɄl‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Đ(7C¯siŊÍ tMęZįšáÎ Ĩ.sŧOÉxËļs7’–­~ 4Æ)u]īŌĩ'ŌÂĘč’LKibáęĖ ¨V.Wĩg I˛/‡$ë•Ëž9Æ|!%*<ĢFĨWnpR~L LxĨŒƒ§&dž)y”aB ~OMđ˛Ō5ͨŨ\˜Tؘ2}ĻŨ Ą!ÆDOĶ ąąÕ 0~Üoh:ˆiluyÄf\žŲB̟×iœ3ĸ#‡¸Ôŗ•Sē†B¤íN’ˇ°RZi+P(ŋp4D“û”4kÃé$Á<̓í‹dįY¤lÖæåŠÂɘj§ToŅFJŨ6§ĄņJ”•Ē ‹Sĸ%F+χĐĨ<(œ­đQ‡7X}Õ4Jp€^.’w§kÜ`•áęŽŌÎ/Ņ,=ČķÉë-–ŽˆírX4ŸLĖŌfōyAŽgģŋ <6a(.žÃŌdęĪ@Īv•BŧŖl+¸ŧv ‹Ũ§˙`QĶ“HYđ”ÅõSÄeMGTYŒîX1#oî֛ÕˇĢũ*ĒJŽĶY%lME†ËUYDšPE[ef#QJK1íŪ KļĩgIÃÚ)û0‘¯‹xãoÉ žcČQ7n›8še o„]ԔęŦĶ™éäžOžŅhI›f ˛•ū:Ré{–ãN?”7Ŋ'HC‰×&Œ}ųGžqô¯FršĒi ¯,]Ŧ‚^îi ŊV¸>RĒĮ] ¤U¯đ|áĘäHe3ˇ¤V5ė)/ö^ā&Đ́ŌëĮĮ~Ū> ē'¸Ų)ŗ’†MĮōSē1Ņ%¸[GĘ]B{žo¨&ēߥ­ŠEai–=<]âEĨÛi°H\#l¨:öĨ;Ä,΂-ŗXvf>šÄېzô5åČ#ũ‹],(âĸĻü–^äZ\ŗ Ē›@Ã*ƒV”c=u=%ēÃnąÆ¨˙ ņ-œ…ÜIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment179n!dUIDATH‰ÕÔ=nƒ0p$†Ž¨'đQ8W'gËV.P5įčDļŽ9‰2d+â(Ưøųl'ĘP†đãŲp‰ļĘđ ŪRĘãzø@åÔŗuKᝎz-ĩŽQWŸ;[[ÚjŠÅ ēvY˛ë”’NĒ;#‘ŨMgbųę­č,ŗØ U 1 ŊŅĘQ5+Ŋ1kGaĸßcíNiáúÕÚ`"žˇzŲ~ÄVgVĩŊ)j|ŚR†ŊŧdR53Ĩ…“yĸõžV!U16ŒĀLksBXŪ…ją‰’“uBAŧD•—ø ĔĘūQŽ+ޜ„´ÖGŦu˙ČÄŧwôˇdíLŠsŪĨkcĪęŋé?ÖÖQá*ö•Ŗî^$õčéŦļsĻzĀŗHæ#Ɗ­¨Å/&ē^áÕ ëá7w”zЈČŊZĢ'ŲŊ‚§cÃíčkĻēŧ¯„2÷öÖ°öúɇ×ËpW5:ŨœĪxÝwC,P9r™ÔtíÃÚ/ĐįĨzPÅĶtI*Ŗ$zēáH™IENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment173ŽôKIDATH‰ÕÔ=nƒ0p$†Ž¨'đQ8W'gËV.P5įčDļŽ9‰2d+â(Ưøųl'ĘP†đãŲp‰ļĘđ ŪRĘãzø@åÔŗuKᝎz-ĩŽQWŸ;[[ÚjŠÅ ēvY˛ë”’NĒ;#‘ŨMgbųę­č,ŗØ U 1 ŊŅĘQ5+Ŋ1kGaĸßcíNiáúÕÚ`"žˇzŲ~ÄVgVĩŊ)j|ŚR†ŊŧdR53Ĩ…“yĸõžV!U16ŒĀLksBXŪ…ją‰’“uBAŧD•—ø ĔĘūQŽ+ޜ„´ÖGŦu˙ČÄŧwôˇdíLŠsŪĨkcĪęŋé?ÖÖQá*ö•Ŗî^$õčéŦļsĻzĀŗHæ#Ɗ­¨Å/&ē^áÕ ëá7w”zЈČŊZĢ'ŲŊ‚§cÃíčkĻēŧ¯„2÷öÖ°öúɇ×ËpW5:ŨœĪxÝwC,P9r™ÔtíÃÚ/ĐįĨzPÅĶtI*Ŗ$zēáH™IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment180eĀ> IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment174č IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[54]: xres = 300, yres = 300 ‰PNG  IHDR< f“&? pHYs.#.#xĨ?v tEXtComment177‰™IRƒIDAT•eÎÁ 1Ё€ciÁ,m[˜ļąvđŃBÆ˙?ēî˛s™w<Ķ"čIĢȉ9TņEGíĒØ hŽéöāŅ@>uĮņڀ3ĒŖŸ(?Üm‹ŖŒ™A†5Ļ Ę5˛ ‰œ†qmđ*ПoûüŅ/ŗ˙V#äIENDŽB`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDR= ‰QM pHYs.#.#xĨ?v tEXtComment178&TÝIDAT•mÎĄÂ@ĐiœĢ­ģߨ ᗐ§¸Jū ?ԁŨē%YnģŊ- F=1™ JT 3¤U4J=¨-h>ÔaXņævŗ qGÁ~*%ëø:;Žtč ĒGBr0xE1$‡ v$ ēl>UP&†c*cžë†Į\Ī/&ĩĪ­aÖÎAŌc€S`ËbĮn- Ck^ŧ ßØ ßYIENDŽB`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDR@!A琌 pHYs.#.#xĨ?v tEXtComment190‰~ņ¤IDAT•]Đą Â0ĐQ¸ŧŧ y%ˆD"ŠŒÁ*‰Rd‹"­;\X÷qWœ^q§Ķ}°ÔLäÉž`tÄ j9ˆÂ!Xʐ.ĩKlĨ`Ž­ÉHnjĐí8!Ųä&ĪLl~`3đ ĩ}…TĐ|°ÔžüžNxđZđČČGEeõŠĀŦ!š†kEIENDŽB`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#xĨ?v tEXtComment205*āÃIDAT•5Ī1jÃ@Đ 1¸YP›€a/bŧ×JąH6 ¸Ü#ä*.|ēĀw÷!MūĘÉT¯$5‘ŲS"Ëę+ĮŽØaŧ°\‰€keųl(•Ũ8â[ú8Ņ13šãkÛy—cڇ0Β“ o—úŅpĀTĩ!āgl8prä~÷‡Áąwô°v­CGÔļ X˛'”7<ŗĻ†õ‰ŲÖ¸hō`ˇˆã –›ôĄá~—5āRÔĀ‹WÍā–úŲ~Énž|ՆŨ"IENDŽB`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#xĨ?v tEXtComment2114æõ¸ŒIDAT•eĐą 1 Đ #d”,†Č!`ĨœX$ˇAN4)Ŧ|œ‹]Ņ=Y–ŋõA˛GR 0°™›āŗs ,ŠBÄÁģ2Įv"Õ9iŠEfA¨QĄË‹Xk2ÃV8Áėx:^Ž‹Ąß  ÍQqtģ|ˆ!ÃCaËk?+ ¸OŽĀrŖŅ~3K´ōlž–IENDŽB`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDR?ŗÔûá pHYs.#.#xĨ?v tEXtComment219:=}ŠŖIDAT•MÎŊ Â0ā!QÆāMâͰ•"tŒĀ, )YÁR0 ëįü ŽšO¯¸{ȆŲ3â‰ÉąíđštĖ‘Ņ×â*üL>ųėØēūĐŖInŽä‡W„Xĸ>- ŽV1)Äöā­ö9)Öbķb+ØŖ¸ܑŽđŊ+vĀR4)æŽ;†ôIļÅ*f#æēpIž˙KŸ^ļëäŲIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment222†Â÷ÁīIDATH‰íĶ1nÃ0 @4ō üF‡ úRĮE•ĀƒG)…Đ/¸đd(¨b-g%U c`. %’mÄ MaĶOUôĩĶÜĖ’<9zI"›õWēIœ/ļ@Z8™šA3NM•Tĩ÷4ö›’­ÔķŽ2žųāĒāy>`øŸRĮĪÔPyõõ=(GO5SČ UWõCŨĖL:54é°j´õK•FW§īBŖ7AŽ9Žƒ§¸ä´îF2ĩ„I§ë^AĮ@‹…ĩĪūŌxu”7Ŋ™ Uå%eķŽ/Šõ,žŪclĒsĢ]wŨõAõqŪŪ›ūwģđIENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment218M:MīIDATH‰íĶ1nÃ0 @4ō üF‡ úRĮE•ĀƒG)…Đ/¸đd(¨b-g%U c`. %’mÄ MaĶOUôĩĶÜĖ’<9zI"›õWēIœ/ļ@Z8™šA3NM•Tĩ÷4ö›’­ÔķŽ2žųāĒāy>`øŸRĮĪÔPyõõ=(GO5SČ UWõCŨĖL:54é°j´õK•FW§īBŖ7AŽ9Žƒ§¸ä´îF2ĩ„I§ë^AĮ@‹…ĩĪūŌxu”7Ŋ™ Uå%eķŽ/Šõ,žŪclĒsĢ]wŨõAõqŪŪ›ūwģđIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment223ņÅĮWÎIDATH‰íĶ1!Đ1trį"›ėÍÄÕÂŌ#š K¯ 'pėØHøŽÖ~*›%„æ…ágAeläĮZbMMą‰8íD‹#ēuĨQcĒģŧWĻm—@ĩ´ÃĪÎÍqxƒj?NÆÔ÷ĻŽVvŊ…šĻ@+×Ĩ%MõÖUøŽ4;vŋ™ë7)W‹TŗÂ@5ĩ¸fNŸgÃöڈ×[‚r=?ŠŪŠîšŊP•EÚĢ"ŽĸYœM獍f‰æwÕ÷jrüũīžuÖYgũž;ņj¨d¨ŨIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment219:=}ŠÎIDATH‰íĶ1!Đ1trį"›ėÍÄÕÂŌ#š K¯ 'pėØHøŽÖ~*›%„æ…ágAeläĮZbMMą‰8íD‹#ēuĨQcĒģŧWĻm—@ĩ´ÃĪÎÍqxƒj?NÆÔ÷ĻŽVvŊ…šĻ@+×Ĩ%MõÖUøŽ4;vŋ™ë7)W‹TŗÂ@5ĩ¸fNŸgÃöڈ×[‚r=?ŠŪŠîšŊP•EÚĢ"ŽĸYœM獍f‰æwÕ÷jrüũīžuÖYgũž;ņj¨d¨ŨIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment221ËĻ{|IDATH‰íŌŊ € €QŦ,ÜĀĩ,Lp7 ×Đ ¤ƒˆ  ĀGĸĄ0áڗģËũˆ1‹‚ē’:Č~´W Ö  Ú‘_t’ sCFjŖž¨ ŠÔ׏Uöĩ# íkÕ¨[1ŨM”QܕÅ߸LãŌ´U­Zĩęô-C8q“Ņ3zIENDŽB`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#xĨ?v tEXtComment223ņÅĮWĀIDAT•MĐÁmÃ0 …áˆnõÎ&ÖfV“ņÍ+x”ÚõŲ Š‘\ôUõW˛.å…߁Ā#)JE…Cîjômø°¨wÆ*6ĩŽ ī&¸gŨVč‚Ũ s°Ŋz—pØo˜2† ŌđҎf‚‚×X0­˜3žÕ×ÂĐ16bCŸBĶ@Å-EtÄ´ŌI ģÁŒŠ.å‡ øÄÛQüÃ˛á×īŪ´üŌĪŪ4îГįĸ—]” ôą­7TųöōŒ)ūĩ¯?âĨ§‘IENDŽB`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#xĨ?v tEXtComment229.IŊIDAT•MĪ1N1ĐoŦār/€˛YeŽEÖ+…Žäˆ‹q§saÍgĖĻH÷~1úĐ IEņĖĸĸȎiî†k&B—Ol%C“g|ÔuöĄždĢōdXâyĀÕeúęâ Ü‘ĘiGÎĢwÍđ›cpí0Q}18ö vDĪ>1%h`›É‹UÚK$ßa+Ž7Ã*ߡ>]P^ãöĶ'ûn aŨŧÁīč†Ã@3ĀāŦTņÅŽĀŗūUL{›Û’#IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment247 ō¤ČŋIDATH‰íŅ=Â0 ā †Ž9BoŌ\Š#)b`ė•ĘÄČŌd ’eã 1 úŠĖŌMĪŽÛÖuQ%¤ë3Ôoë\‚j[ŠŌ÷¨Ŋ™:•P =™:ÆēŒAŧpÜ֔ĒĐWŠĒt–š3ÖKՌô*ú]¨D/ (÷4xYą:• zZ΁:¨™kÎH“ĢY!]L\dĀgÉ0Pĩ“Ö9äoč_PĨšŅë¸BĘeđx <ˆF)Ŋ~ŠŽ,›Āá~ôH>>’ÄĖ9Qę)JiL¯iNKöČßfŧäˆ:ÍĄsw­æ”° oÁüÔ¨‚ē9ũuZIVSJĖŲ‰į”"6Gėß3脄™Ÿ¸w#§h‘Ķ—ŸŠëÉĪĨšKN˛ÕąņķčlLūz§&R‡ŋxÔĩFti¤JĄâFI=ņtXyė(jUjŠs¨|¯¤ųIh†>˜ąUMtŠåī}u^…‚šÂ?ž[UÉÜ=~p+I“€Y˜žãŠ )F$mROģéøqZÚĩ†l5˙ŠÆA0Ú|ō‘8i#„A<ëV‰&ĶÉ(üŒÔČe("=Æ'øöYĐTkĐOčõn[Dųĩ9ą Į@؞ĮڋûZ6UąĪĨr ‘W/Ē)!$Gī8ąę7T՛éÄņŨķ”ųAđŽ5ē\ëg肃oxÕSˇų•ˇŨV„E?0ßî+†û™ t•ĖŲPOŨ‡’‘ÔŌYsŋ=ڑŨä*yõTCĢĪČÎĘŅyąëgNę|Ą>yøųœūØEŠ:ŸFķ+ōësĢZ´Ũ6ZĄĻXRÉÚŲ͏­U…Ęŗ…@ËđßúFtzņĘãĢWaÕięw*ņ#į­ō?ëĨaS#7’/9"íú lE­ŠKvČ^ەŠļ+é°ĩÚÔ­<ĻkĢEyLÔŠc7ĮFÆ&UvŪ§eĶ• ”ę5ßŨ7]I_ŋg}=ļēx:ĸŦōą §hJˇ7onŠ?ķŪ˛˙kįNüËWįčQ=Ũ°Ŧ¯É?|õ=۝V¸tV35ŗķÎŋŨ›ŌęŸĐUaprĒųåÁfÜB“ĩ!ÁųÜmēz§vŅÔ]s:ŗšu¯ãr:Å­—ûųÖZTx-ōŠ˙„'­Ģĸa Mŧ‚#××rmđ@n_Bˇö?˙ZčS‰ī͛VMģ“,rYkˆķm稞ÕJ¤ŗSĪ×Ķ$îBzU€†ŋz˜ņ!>8Y¨žˆÂHŧÕŧŒÃr°ÍĢå´äEšÅČx0ņ-˛//Zą§eĢí›ŊkØš {Ĩ&Ėŋ uSĪk¯'Öķ ÉaėwxVöLŨr8ŧ ’o„ÕŒíF™}ũ‚hæ;Y}î”čÕĖŖUˇMåP}ãQfƒ˛n5}•|o3 9žÖĢ]/5ĀŲÜžb1H:Ū)Ņ)íē¨=ĮNĢĢŖÚQânŪæ•Ėģ[Õ^­ĒVQ‚8Ü;ú–ŗ‰8ŒIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment250'*×IDATH‰mÔŋoã6đ§Ķ AŲ1ƒ)ŊĄĢoK&üWŌŠĢÛĨ>ĀgÉ0Pĩ“Ö9äoč_PĨšŅë¸BĘeđx <ˆF)Ŋ~ŠŽ,›Āá~ôH>>’ÄĖ9Qę)JiL¯iNKöČßfŧäˆ:ÍĄsw­æ”° oÁüÔ¨‚ē9ũuZIVSJĖŲ‰į”"6Gėß3脄™Ÿ¸w#§h‘Ķ—ŸŠëÉĪĨšKN˛ÕąņķčlLūz§&R‡ŋxÔĩFti¤JĄâFI=ņtXyė(jUjŠs¨|¯¤ųIh†>˜ąUMtŠåī}u^…‚šÂ?ž[UÉÜ=~p+I“€Y˜žãŠ )F$mROģéøqZÚĩ†l5˙ŠÆA0Ú|ō‘8i#„A<ëV‰&ĶÉ(üŒÔČe("=Æ'øöYĐTkĐOčõn[Dųĩ9ą Į@؞ĮڋûZ6UąĪĨr ‘W/Ē)!$Gī8ąę7T՛éÄņŨķ”ųAđŽ5ē\ëg肃oxÕSˇų•ˇŨV„E?0ßî+†û™ t•ĖŲPOŨ‡’‘ÔŌYsŋ=ڑŨä*yõTCĢĪČÎĘŅyąëgNę|Ą>yøųœūØEŠ:ŸFķ+ōësĢZ´Ũ6ZĄĻXRÉÚŲ͏­U…Ęŗ…@ËđßúFtzņĘãĢWaÕięw*ņ#į­ō?ëĨaS#7’/9"íú lE­ŠKvČ^ەŠļ+é°ĩÚÔ­<ĻkĢEyLÔŠc7ĮFÆ&UvŪ§eĶ• ”ę5ßŨ7]I_ŋg}=ļēx:ĸŦōą §hJˇ7onŠ?ķŪ˛˙kįNüËWįčQ=Ũ°Ŧ¯É?|õ=۝V¸tV35ŗķÎŋŨ›ŌęŸĐUaprĒųåÁfÜB“ĩ!ÁųÜmēz§vŅÔ]s:ŗšu¯ãr:Å­—ûųÖZTx-ōŠ˙„'­Ģĸa Mŧ‚#××rmđ@n_Bˇö?˙ZčS‰ī͛VMģ“,rYkˆķm稞ÕJ¤ŗSĪ×Ķ$îBzU€†ŋz˜ņ!>8Y¨žˆÂHŧÕŧŒÃr°ÍĢå´äEšÅČx0ņ-˛//Zą§eĢí›ŊkØš {Ĩ&Ėŋ uSĪk¯'Öķ ÉaėwxVöLŨr8ŧ ’o„ÕŒíF™}ũ‚hæ;Y}î”čÕĖŖUˇMåP}ãQfƒ˛n5}•|o3 9žÖĢ]/5ĀŲÜžb1H:Ū)Ņ)íē¨=ĮNĢĢŖÚQânŪæ•Ėģ[Õ^­ĒVQ‚8Ü;ú–ŗ‰8ŒIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment255WįôĨIDATH‰]•ąnG†į˛ŒŽÁŖ‘FŽ nAę„āĘp‘Î~\¤´‚44LøV 6AčہåGH&Ė#h€"o°Ú¸Æđ.ŖGpŗ“Ų=QĸŊAņÃÎÎ?˙ĖfŗūÅĩ™cÉLŠŽ.Mēˆ‘č?`Ū<œÉŪ-ŒĐDĖĩČ~˜“N¤ ’°îۚ ´Dęīî3s?ötęétYŪfŗiŅöû'ˍ Me Ā–|ū~FŅÛč\/žÚÚ>|å˛PŪ4QĨŽŪ>%œ6"÷f?’,‡>ĀôHŽâxęRiĶÍĶģk÷Ļg,—GuHg†cöDČRŦ ØHčjįOIQb)đĀ$8°ÂtŌč5Q”LÂ.åĨ0Âļ™XI ˇĄĸyXrä†ĢÔÆ Ždî\S,ų†į#åár 7å÷^.ø›qîr‹ėi´†Ã ÂÃ@Ŗ@ĪÅĢņmˇT؁¨„k!ßzúgEŸ™]Ē;ˆKˆV8iØ?D‡xô ˙›Ŋ{ Ŗsht` Ž+ŸĄ=Á&aŠhyŌčË`K{hīûnˆęĮL˛˛ˇ'v(eo՛ũkY‹ŅJ.ÜôôIú˛ķ`ˏMô cÅ<ƒøč5āDánaz÷^°‘m#ÅĐĶ×äĀ™§I16bkÛ-&TlžË6÷‚W›ã˚”%ēLpd„âų ÷/égÎ =â,…LŧKÁÁ@'348 r'žEæ}üNg.6Ŗ™08¤ ʁ J+*ĘqŽ“ _ã‚(ˇž‘ˆŽTŲÍ)xûŌHįŠâŽL.)ÎeJÉÚ wũ [iN_ž OcÔĶfvĒŅN•4!ēÁŦŲ†JļixhŠq;`kĖ ûCØĸ[ą*Ė‚‰q*{DEī-uÃŅNYĘN ūîb{×UBái tŽš˛ĸQrŠ9ÔRSĩāVmGAÜI| Dž×øJ†muEÉŨ÷ž6Ad{m¨Ān%Ņņõ@Ė÷EwZՌí:¸ĸZņh˛PÉX ņŠękš,Ä0OTzа˙9-˛ämwo5R4m˛õyä"ãžÔ‘¨Š!`Y­¤@˙€öáoĮôWŊĸĶe K\(Ž.œū•<ÃKW˜\„ÆōT¨|ĄŸĶ*ēŪęõ>ņu^āķĐ,ÍOĒᗍ˙Ę+gŽsĩœã&Ęp>ú(x›æûšnđlU,JOíyú?€˙^yT­IENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment251PŠ0ŧIDATH‰]•ąnG†į˛ŒŽÁŖ‘FŽ nAę„āĘp‘Î~\¤´‚44LøV 6AčہåGH&Ė#h€"o°Ú¸Æđ.ŖGpŗ“Ų=QĸŊAņÃÎÎ?˙ĖfŗūÅĩ™cÉLŠŽ.Mēˆ‘č?`Ū<œÉŪ-ŒĐDĖĩČ~˜“N¤ ’°îۚ ´Dęīî3s?ötęétYŪfŗiŅöû'ˍ Me Ā–|ū~FŅÛč\/žÚÚ>|å˛PŪ4QĨŽŪ>%œ6"÷f?’,‡>ĀôHŽâxęRiĶÍĶģk÷Ļg,—GuHg†cöDČRŦ ØHčjįOIQb)đĀ$8°ÂtŌč5Q”LÂ.åĨ0Âļ™XI ˇĄĸyXrä†ĢÔÆ Ždî\S,ų†į#åár 7å÷^.ø›qîr‹ėi´†Ã ÂÃ@Ŗ@ĪÅĢņmˇT؁¨„k!ßzúgEŸ™]Ē;ˆKˆV8iØ?D‡xô ˙›Ŋ{ Ŗsht` Ž+ŸĄ=Á&aŠhyŌčË`K{hīûnˆęĮL˛˛ˇ'v(eo՛ũkY‹ŅJ.ÜôôIú˛ķ`ˏMô cÅ<ƒøč5āDánaz÷^°‘m#ÅĐĶ×äĀ™§I16bkÛ-&TlžË6÷‚W›ã˚”%ēLpd„âų ÷/égÎ =â,…LŧKÁÁ@'348 r'žEæ}üNg.6Ŗ™08¤ ʁ J+*ĘqŽ“ _ã‚(ˇž‘ˆŽTŲÍ)xûŌHįŠâŽL.)ÎeJÉÚ wũ [iN_ž OcÔĶfvĒŅN•4!ēÁŦŲ†JļixhŠq;`kĖ ûCØĸ[ą*Ė‚‰q*{DEī-uÃŅNYĘN ūîb{×UBái tŽš˛ĸQrŠ9ÔRSĩāVmGAÜI| Dž×øJ†muEÉŨ÷ž6Ad{m¨Ān%Ņņõ@Ė÷EwZՌí:¸ĸZņh˛PÉX ņŠękš,Ä0OTzа˙9-˛ämwo5R4m˛õyä"ãžÔ‘¨Š!`Y­¤@˙€öáoĮôWŊĸĶe K\(Ž.œū•<ÃKW˜\„ÆōT¨|ĄŸĶ*ēŪęõ>ņu^āķĐ,ÍOĒᗍ˙Ę+gŽsĩœã&Ęp>ú(x›æûšnđlU,JOíyú?€˙^yT­IENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment256ÎîĨ$IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ/[?@öŽĘŽ`Y>œQEeh;'IENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment252Ƀa$IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ/[?@öŽĘŽ`Y>œQEeh;'IENDŽB`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR?ŗÔûá pHYs.#.#xĨ?v tEXtComment253ž„QÃIDAT•-Î1ŠÃ0ĐqЏŗn`]$äß,Ū"å! DÆEšB‹‹-WāF MdíūęÁ‡™ÛŊ 踎ôgđÉЗĶ~Učų&Ŗ—†hU`vßTÛ@Ēė/ųC—ä‡Å @’āXøäŧŖŽÉ]ŸL#–Hŗ0ÔŽ™v&†ˇ™}Íų #5šßÁ ´˙(Ž!@ëâ¨đKš†ÅÄ,›3'™°únB@‘%ķßšfŽöS밊Qô>‚=™/oÛTŖ9vPŧ\IENDŽB`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDR>\ß pHYs.#.#xĨ?v tEXtComment254 āÄ3ĻIDAT•MÎą Ã@ P™.o„[#EĀkĨ0ؐÂĨGČ*w¸H™td )bƒŅtąÁĒŌa„ÖÚnāæ !î`CVd°ûŖãܞؠëá€ū€Ü Wpkœ ƒ!<'šęV’Ė% ;ƒĶƒxÅÛĐ(R&Z5™ˆĀą6čqÉ>|‰ÔŠ–‰‹†ž7ŲHáUđãÜõa=žūú‹­g‚ЉIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment261{§c÷IDATH‰í’Í à …zāH'hFĄŖt“d´t“lP¤^r@P61=WU|IĖ—÷ €˙R œô¤?KŸcj!”Đ=R5 ŽĨæ<×ÔÎé{ęVöŽļl%ėkR‡ÎVöčŸēšģ]ŪąI2•r=ЂQe‰Ŧ¨´ˇLMEķā# V  ŲÚzm’l‹hŧCš (%gú”nÉôŠßõaŌR×îQ#›d˜qj‚ôâ_ļĸ~ˆ´H5. v琍‰ŽŠ6P§|œĶãRĒÉZFîpUĮ´*Ą‹kÁ˜f†ß- ŦO)ėÅcŒhš}ŌŋĻŽ–Ž=ŸIENDŽB`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#xĨ?v tEXtComment265|ʧfÅIDAT•-Ī1Š1 Đ?ÖĨā‹,Ņ•RN5ö0Å4\É!EŽĄTÛļņÂāś_=|I Å“?hŽ}âļĄN$‡R“áĻé G–”ö&š˛āÚâ]šķíÉ+qiq'‘įhÅHČį8`ƒ€r8~yLŒŋēLÚ㠖îjÃjH48úøŒ>8ĸøēHF“čëV´åƒzČ> H:ĮÍŪIwmļ+#Ũžíä$uí;XũaZčp$ķPä‹mrIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment274ÖĻąÆIDATH‰íŌ1Â0 Đ0uĖr”­Ar ŽRÔp@ Œ S[‘ÆÄ­Ä䟉)™,=ŲŽl+*<§ūRC•†Ú[ÖĒlXīHuTĢ9ē’_spFša}ĶPĐe×ŖŦA”ˆ˛ÎēcfPŖn šlC TJē¤Ņđ‚ ļ%™F¤[âéÄCöŊ‘uduN:­Ŧ׉t;ÉJ›ĸžöÉú5Y_P>W\yŪĩ—5d͡ã,PØÆ$•üjĢV­Zõ×úÛD"ģšTe­IENDŽB`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDR@ĘöQ pHYs.#.#xĨ?v tEXtComment275eŅ–'ēIDAT•%Ī1Â0 Đ_u`#GđMđ•Ų’ĒcĐŖ‰Ą#WhÅĀZļ ĸ|œāÅO‰lëƒV‘ËĩÃĮŠg€ė0Īč+ËŽãFx\“N_›Ā”tŽ+0gåĢŊ4DÅpQ.´…{āŦœ(Âîé¨Ūk;pc1ØŊ'‹4Œ 83˙!†"О}Ùˇ,IF¤ĸWŧwo_ę°ĸAN ‹Y´XœPĶÛ„[ũlžŸÔŊųiIENDŽB`‚ pix[82]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#xĨ?v tEXtComment279lgÚ ŽIDAT•]ÎĄ Ã0ĐzâŅl) °#dGĄq ›2Ëŋw¨Ô“NzúāîƒäV˜hÁčņpxí‚f-ŪãP0ŽÕO` 3K‡§ėōū:nŠXgE:Õɛƒtģ Y€ ›ŖLl^ €WVĪŧCr=™!ų‰‰B…Íø(š 7…y"!×ĖǍ‚ QÁņŌá9Z)ŋîŌ‡L<'|ôŗŠIR'´EIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment298…ãĮŲIDATH‰íĶŊ Â0`##Aįŧ -A.R2Ŗ@”"%+QЂ(ˆEâ‡M•_(Ąđé$ŸNįķĀDâwēÅ}BK´€Ë‰ÖØhŽ´WMô貍ĶÖëŠiŸ•“Z_Q9*é;ęŠčėĨķžĩęĸįíÕT}ļîDNöėÕ8AúÂ8mP°yË -S…EnATÜl/ãnödAtđK}…‰Ģ zcz˙Ļ;Žg ÕÜĐÄĩ˜š ‡¸ éÔᱏnĸNHxíIíR…÷¸'ŠđB2e‘4iŌ¤¤O֛ ŌņĖΎIENDŽB`‚ pix[84]: xres = 300, yres = 300 ‰PNG  IHDRC”ũMR pHYs.#.#xĨ?v tEXtComment299ōä÷‚ĐIDAT•=ĪÁiÃP `•rôyŒ¯›4Đ%zŧ€>v„Ŧâ➂BéEņūJvéE|é×OŖĄö û€vBö] !Õz7Ė‹ĐŨĘluPĄGČëhGē9Ī^ö›†TO_Ū Î{īi÷/:lĸ§Œčüģ<†ĻOž‡jš†”™Ëŗ„zbI]áļ—Đ˜O{ÜCˇžję)fôIyŊ,­|§p‘V&?’FÕV'šŪŠŠ3­úYĨ!lĒžĒÖÁŪ…n¨ų´ŋaZBIENDŽB`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#xĨ?v tEXtComment304\UZAˇIDAT•5Đ=‚0đ'&tŗ7°×pŽ$0008r%HŽQÂāZâ` ßĢ:4ųĨ/ī“~;ų\‰X“›Ņk„‚† Ŗ‚/Č:t6ÁC' Œé‹Ũ,pŒ5Ÿ° ú‚ h/‡đƗō3 8=(÷ æŋū°ũÁUÎzF.XUĩ DtˆQ32Æ]{„3ŖÖNļ8†FMŘeæG@;h\`;ô9Ų΀rrŧxÃ×øÅ>Ĩpĩ‘ū8IENDŽB`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR=|}øy pHYs.#.#xĨ?v tEXtComment305+Rj×ŊIDAT•MĪ1nƒPĐA. ŗKēŸ#¤¤°øWré"Ŧ”ÁW1ú…¯ōļ\)čOvM‘lõŠŧĶOĄJĪŠÆRp D…´ō>9ž…a$COĮMē8(ųŠÉëŗauŧäēƒĸqá˰:,ĖY §ųāhkHáČCˆ8üčįūá´#mĩOˇ7ŦUf˙Ąį˜´JmCŌŽB)}Õ﯅aŌ­~?T,%1\!Gæ>CB⚁.ÅôIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment312Ŧ-Î5ÉIDATH‰íĶ1 !ĐY„XzâÍâ†\lSå{ƒ ¤1 ū(KHãˇJp*Ų‡îøUÁ VųOŊ uAąTŗ Y(Ņ$P‹5Ž”­œ$¨n}Փk]mdîŲĄÎŨ:?Žú*Ē@ŦZ„h‰u@47ĻëÚŌ;ŽĻ{xĻG Q;ÔŖĖHk$Dīĩįâ™^ë~KŋÚ­vFŪ T‡ēƒ^Ãĩín°›ƒĻĘr.ž˜ū“iSČÂr֘Ëų‰ė 4gZS§Núc}! î‹ņ%[IENDŽB`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#xĨ?v tEXtComment314ENk‘IDAT•MĐą ! Џ((3Ŗx4Ø ŖdŽĘŒ`) ¤‡tTË[€Ž‹74pä‰vá\Ŋ4ĄMČFSQĄ ę&ŪīĩÜčas\ņÆ80p7˙Vܤ僗­ĄO˜f\Šˆē€‘w%ŦxOˆ –‘öĒī^6|1Gw„‰Aŋքũ•:(Ē@ã n"IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment3152I[–­IDAT•eÎ1Â0 Џ:$[×n=k¤\…c05 †^•›€:pôF )Љ•…?=éÛ˛äô 2Ŋô„FØ't˜or,xAÁšbĀ)øāŦ /ÂZUĖ+ä‡%#åa™v@2Š]n2âhAE˛xÖ-āEžBØũĄ¯˜V4 ö §{+FĀPEĢĨS>á(fÜ%l?<`iōKP›öFŽųՒ7wŗĢ‡;(ÍIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR;ē?[› pHYsb&2 tEXtComment321 ĖLŸIDAT•UĪģ ƒ@ `Ÿ\\™nVÉ$9kXä"ˆQG"÷ĮæQÄÕ'ë—¤ i°Z;hÂXh)¨ŒŠĐ,áBį˜v<´X$Ŗ‚žE1Ŧā38ød°Ã:`ļ°jÜ;’ë bmļtĄqŧ4iö {Mō=ņū8‚]|Â~đŦÍNЎ¨™Øˇō0°:î$Œ-B‰áU~BąŽ‡Éä€IENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment3359ČIDAT•5Î1jÅ0Đ1ßD) Ę ēˆ‰/f,Œ.˙rir™_¤Ũt*M$‘?Õ[˜…:–|Cn ŽöŌp7D‹cįŊâ ´+Ņa_Đc‘ŲĄ%Îæâ§fø *ŽčíYđ#d3žJ™rãk|ŌĨ÷ŅäŅäģ:jÉAxžŋâyãČë‰PĄ˙Xu´A}‹FâR{Üâā.™;˜8šCR‡MĻņíą†äļė _Ŧž)ÄpwŠÉ?×Üõ\†ŖLkxRIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment338~ÎEŠģIDAT•=ĪM ƒ0ā Ų^@HRôbE…\z„^Å`Ák¤'h\u!¯“ļ¸ûæį HË1"ÃgHAŠj°;۝Н°yÖkd…Iá"K\“ęĢ _PĄSŠMlîä,ē™o&qɡbr…ÔsОéˆ Ô)ŸNåņPzé3:Å0fĖ>pÄ&Q,˜¤Íđ(¤­˙čاđ’Õ`7LOÚ) ũtΟzŖA¨ÁB—áâ䨂ÉĨbIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR?ŗÔûá pHYsb&2 tEXtComment340?T[\°IDAT•5Î=‚@ā!4.`؛°žĖ]( ķ ^ECá5H,,]bŗÅ8ĪŲĢų2™ŸGxžŖP@ --¤ŽĨyQ°­év5õ Ņ ŅD(ĸ"` 9ėxlĀ 6 <á ļ$ƒĢŒņI_¤Î7ė@tØmX—úh“ĐkÉ/ 6^1&lÁJV\¨ÔõœšJÅļ4EÍ#ļŖĮŠØāxĻĨLđBĄ\ųöš ëS…| IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment350&Oj˛IDAT•EĪ= ƒ@ā'ļŊ€d/"z1É[ąČĩ"–šÂJ.đĀf'ëO’îk†™!,  øŌ’ĐW‘wė/ ’^ÂŪ /i/Ö&ÛÁņM súĮ°!'ā͎7Æ~Į„i”Ŋā9ėH€y„áåˆҜĐė^­ņŽē)%z5sˆč´>j3(g4ĘÍŽÛæØlīk]Rŧ™(+gA-­ąáô@°Ĩ“,85IENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment358(”â/ČIDAT•UÎ1nÃ0 Pēāŀ.`D1â‹‘=F¯"AŲ{„0čĐUA ‚~ŋŒ.åô~ōK3øúŋJÆ&Ģč€05™%zĸ^fI 5՝dW§[‘Đ˙ƒ;éĀ6 ˜ÚĘy<§ĘËHø|?0⑚,R<"ø+ @œäÅxl­ĢAËíŲyÂ~hFīr6ĪŽˆJ e11XMęķj÷‚;q!Ü]&ŊŲŠ˛áîņf{0Āo`ą<˛ÂUĒEŸú +I HÁcčIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment367“Ŧ}āIDATH‰íÔ1nÃ0 P4úžBn ŊHNR9čāąGĒsŧŌđPĖĘmG}M2¨ PË(ˆ¤Œfĸ6˙C_sŠœĘAõQšHëÔjxX Ёŧœ vė…2濍6­­¸wzĘčHĢž¤•ÄõŦHgvũUŲ7ņŦ€ŌĻ+ŌZ7u@Z̍o ¨|tE§âĶēHe)^ԍĘĘhrBTO@?B™Ņ.ĢįP6ėÛ+ĩēühų[}Ūēĩųš ¤oėGR: 1ĄJܲQŅk|ĮtĶî/ëĪŲu×]Wweß ĩļIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRJ"Đ rë pHYsb&2 tEXtComment372úwiŗŌIDAT•mĐ1NÄ@ PGS¤#@;ר.k‹#”‚cp•DK[Đē´ÆÛA ĶĖ“eÉß&›°ŋ•z‰ Ę) āe Fŗķ•AEÕšÉ#•~ž’g§MsđDcˇ’ÕŪ?­čN i€vzQîĸ—_.7ęāė÷c$ķ$ĐcLžŖŧJP"z5g„„ÖŪĀ=™ mZ}ôōá|ŌĘ ĶÛ?´úė\úĖMãĶiÜzŌīĀM’\œœ”ŅWĒæž<ڋ>ĐĪuņ‡ļ~w„ōWį f:IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment379mĨ°;ĒIDAT•5ĪÁ Ã0 ĐohĄé,bĒU:HÁ1YŦĨ‹¸¨7„U)Iuz !}ANj•t Š ī’– į /vÄaCWozv•z<™T9õŪÚņŲ(ëâ†ė¸ĩsD´OßSŖjø25Øp…ÚŽšt1ˆCíÖYfŪĒĄŅ™‡ã‹É$—+o˜ü/GDÉj×ėSËc !Q%é*?y’—r,ÆIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment383 čEęIDATH‰íŅ=NÃ0āu’9ßĀ; ų*pX< Ø¨H{ĨT| GšĀƒ.,;IÛ4 ŽLöâŸī=?˙@¸Ō4d͚5kÖŦ˙ŖŽ…MŅU­īD“6C\ąĐZ¤ē“˛_ŠIqTÜ—ŨØ}ÎU4 ÕÚĩŸrįuqŠÛá5n”I“ōoazBqh­“qŸÍT*C€7kåƒĐne•Ž÷ņÅ Œ™.ŕÔK@…EPAW0ęÎtņ\uÔwŽkŲZ§ü­˜tkš¨´ĸžâüņ•ČKå9Žu1ę>ø*)rN–üZ9qÖø^}DČCp‚tĶ/ÚQŸ.ô%ęöõkP=¨ęÕ97)FõíŗĨī“ūƒ^ČKļZš9IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment369tžzIDATH‰íŅ=NÃ0āu’9ßĀ; ų*pX< Ø¨H{ĨT| GšĀƒ.,;IÛ4 ŽLöâŸī=?˙@¸Ō4d͚5kÖŦ˙ŖŽ…MŅU­īD“6C\ąĐZ¤ē“˛_ŠIqTÜ—ŨØ}ÎU4 ÕÚĩŸrįuqŠÛá5n”I“ōoazBqh­“qŸÍT*C€7kåƒĐne•Ž÷ņÅ Œ™.ŕÔK@…EPAW0ęÎtņ\uÔwŽkŲZ§ü­˜tkš¨´ĸžâüņ•ČKå9Žu1ę>ø*)rN–üZ9qÖø^}DČCp‚tĶ/ÚQŸ.ô%ęöõkP=¨ęÕ97)FõíŗĨī“ūƒ^ČKļZš9IENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment384”ŒĐIûIDATH‰]–?o7Āß‰ŠŠ‚™­Wā**Ȑą˛h¸ûI :6A{Pu”op ¸Ņš¯@E@íÍk‡Ļ, {­€ˆÎ÷úHJqR¤¨ŸŪ˙÷„Å@—Î,ŅJĶší¯ūˇ-4@Z¨ū‚r š§-°îG’z¨{āe“IŊÅ#ķ4˜‡ũD۝Ę&ęOãí`g#ÎßĖ ē ÃĪ(ė(­NØķ°wwÎîoí‚ōīŨʡaņsúQ4˛ v‘§đ 0ŖŌėËĪŧ=n˜ųe˜ī¤éčšXe–™ŸŨŌŪŽÂa¤3ÃôĒí\ķ”2ĶšŸ,\ ÎëQž Đ¯C˛—˛EËâ•ßQĸbrČ-īzkŒ×ų8Rō…Îáų´ ĮÎúŪm^g-ŧ쪃ķSĸ–Ŋ–Y?å\gøĩũŒōĶŧ—–)‰yGéîQˆo@ūv˜9äĐĨĖ۞8õXbéˇ‡‡đ ‰ ”/Š="MtGا:ÁÁ W-”gäøÅļŦL˜§úa̘aeūč°û Jj Ŗg-¨6ë2lîč K& #yՀú˜uv´ÃēLuģ6Ĩ§üš”#jØļ ûĨá7ë ōęŧģ#õŽSĀPÎõŧ–XUą ˍír(€œk•ĖsÉ;¨WA3ˆK^Ŋ§ĪæĮW‰›@ Ä|Ÿ^ŌŽ š4b8Åķ-}K>%3%0PŽéōwä1U0ÃČOŗ‰Ļd3tÔŗxę˜ Tâ„ŌÉVDĨ)/"Ũ;ŒŖĀN(H&fKŖŪÍ)ŖIîÐJZN,Ÿz 1Ļ>$XgŲ$KŌQj&ĖŅ@Åg‰ēâ16ÉĻTš(뙹Tˇâ˜× ˙Ņ€žîĸ 6Ô6å19ˆhĸBīÅö(čøßu ZĮbīčkœˇJ9xn[čVÖį,ÃU+)>l‘ō@;”ČAŖ,[ã4ÔWlĩ 8‰ŽSŪŧĶT¤@ũŦŅ sÍj(_-/=Í$õxcš[Ō,AãŌ }•KŸ/z eW,EC1ĶėēDĘŒH ę>Ãŧ(§*ÂĨ-[?WT ĸ…š\uŲA•o,Õ‰ŌÃ2Pžzđx2šJ÷ĀĶ+ |‰õ’ė@hM/Ķ­Ŋ`}uuj†¸AŌjˆv3Oķfãä•ú#5Gŧ ”ëãđpžädHą?•[Ą§m c WČtž-؉ĸßzŊ /;­|“&ēa˛ÍSY¤ūŽębLŋūĒWFĘk„ĖzljdžBN\ÕDWzÔś .=}EũĄh<–ÔîßâÍ%J\yzyŌÉ@oĢö šģ摞„~ŲPļâī†úŠŠ|q0nT…Tļ‡)Ȗ/[jEĸ~ĩžŽ5 7>ū6Y×ûÔ¯UéS§Aö)Í*dlS͕ oO¤O”ë3ŦŠžĪ›@×Ö¸ZDû’„]ö(ČžhĩãųlfâkܜôûDëTEÍūEë‹ĨIjīÎrh3,}@ô^_ltb¤/ŽÅOÛ-ĒĶž 33žpFĸđ:vôHŽß›%ŊJDĩ¤ Á[<ŪŌįZŅŨĨÂyYëeŨ–>3ętI´N*ŦčoÚņ€ÜúDĨ°Ōb›Ė7 ˙%ēŽąĒ ÍŅ1[^“‰7¤ÆaéTąū‰Ė…œIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment370yŸûIDATH‰]–?o7Āß‰ŠŠ‚™­Wā**Ȑą˛h¸ûI :6A{Pu”op ¸Ņš¯@E@íÍk‡Ļ, {­€ˆÎ÷úHJqR¤¨ŸŪ˙÷„Å@—Î,ŅJĶší¯ūˇ-4@Z¨ū‚r š§-°îG’z¨{āe“IŊÅ#ķ4˜‡ũD۝Ę&ęOãí`g#ÎßĖ ē ÃĪ(ė(­NØķ°wwÎîoí‚ōīŨʡaņsúQ4˛ v‘§đ 0ŖŌėËĪŧ=n˜ųe˜ī¤éčšXe–™ŸŨŌŪŽÂa¤3ÃôĒí\ķ”2ĶšŸ,\ ÎëQž Đ¯C˛—˛EËâ•ßQĸbrČ-īzkŒ×ų8Rō…Îáų´ ĮÎúŪm^g-ŧ쪃ķSĸ–Ŋ–Y?å\gøĩũŒōĶŧ—–)‰yGéîQˆo@ūv˜9äĐĨĖ۞8õXbéˇ‡‡đ ‰ ”/Š="MtGا:ÁÁ W-”gäøÅļŦL˜§úa̘aeūč°û Jj Ŗg-¨6ë2lîč K& #yՀú˜uv´ÃēLuģ6Ĩ§üš”#jØļ ûĨá7ë ōęŧģ#õŽSĀPÎõŧ–XUą ˍír(€œk•ĖsÉ;¨WA3ˆK^Ŋ§ĪæĮW‰›@ Ä|Ÿ^ŌŽ š4b8Åķ-}K>%3%0PŽéōwä1U0ÃČOŗ‰Ļd3tÔŗxę˜ Tâ„ŌÉVDĨ)/"Ũ;ŒŖĀN(H&fKŖŪÍ)ŖIîÐJZN,Ÿz 1Ļ>$XgŲ$KŌQj&ĖŅ@Åg‰ēâ16ÉĻTš(뙹Tˇâ˜× ˙Ņ€žîĸ 6Ô6å19ˆhĸBīÅö(čøßu ZĮbīčkœˇJ9xn[čVÖį,ÃU+)>l‘ō@;”ČAŖ,[ã4ÔWlĩ 8‰ŽSŪŧĶT¤@ũŦŅ sÍj(_-/=Í$õxcš[Ō,AãŌ }•KŸ/z eW,EC1ĶėēDĘŒH ę>Ãŧ(§*ÂĨ-[?WT ĸ…š\uŲA•o,Õ‰ŌÃ2Pžzđx2šJ÷ĀĶ+ |‰õ’ė@hM/Ķ­Ŋ`}uuj†¸AŌjˆv3Oķfãä•ú#5Gŧ ”ëãđpžädHą?•[Ą§m c WČtž-؉ĸßzŊ /;­|“&ēa˛ÍSY¤ūŽębLŋūĒWFĘk„ĖzljdžBN\ÕDWzÔś .=}EũĄh<–ÔîßâÍ%J\yzyŌÉ@oĢö šģ摞„~ŲPļâī†úŠŠ|q0nT…Tļ‡)Ȗ/[jEĸ~ĩžŽ5 7>ū6Y×ûÔ¯UéS§Aö)Í*dlS͕ oO¤O”ë3ŦŠžĪ›@×Ö¸ZDû’„]ö(ČžhĩãųlfâkܜôûDëTEÍūEë‹ĨIjīÎrh3,}@ô^_ltb¤/ŽÅOÛ-ĒĶž 33žpFĸđ:vôHŽß›%ŊJDĩ¤ Á[<ŪŌįZŅŨĨÂyYëeŨ–>3ętI´N*ŦčoÚņ€ÜúDĨ°Ōb›Ė7 ˙%ēŽąĒ ÍŅ1[^“‰7¤ÆaéTąū‰Ė…œIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment385ã‹āß IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment371c~8 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment386z‚ąe IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment372úwiŗ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment387 …ķęIDATH‰íĶąmÃ0P".Xrƒ0ƒ¸ĩR…6T¸ô^…‚ •!˛€Ô‚?'×úA"iĂÍÉģçÃ7ëäū^Ds´­9ĸ'•Š?Ô–9mj‹é¤DÃYq)LũOTˆöš¸Úģ)܉âÖésS\ôI@ǞÃÕ ļĩÅfš‰–Ģ#7gę ŠjėV}ÛúŪˇŖG%ŠIßLŅ2[nQ1íĸ-– C!ZÃĒ™ë‚‘Š>´'5kĖĻ鎯~Æu¨˛­2(nŸ,926‘Ĩ$2Ģ+œčD?,kC˙ō÷wŨu×]Ĩ_ŅēųĒ2m9IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment373pY%ęIDATH‰íĶąmÃ0P".Xrƒ0ƒ¸ĩR…6T¸ô^…‚ •!˛€Ô‚?'×úA"iĂÍÉģçÃ7ëäū^Ds´­9ĸ'•Š?Ô–9mj‹é¤DÃYq)LũOTˆöš¸Úģ)܉âÖésS\ôI@ǞÃÕ ļĩÅfš‰–Ģ#7gę ŠjėV}ÛúŪˇŖG%ŠIßLŅ2[nQ1íĸ-– C!ZÃĒ™ë‚‘Š>´'5kĖĻ鎯~Æu¨˛­2(nŸ,926‘Ĩ$2Ģ+œčD?,kC˙ō÷wŨu×]Ĩ_ŅēųĒ2m9IENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment388:œbģIDATH‰uÕÁnã6⑏0{؆č­@ŅŊnO^ 0ķ}{č5ˇæ`˜ôĻ@Žy÷MVn=æÖcÍĸ/ 6B˛f˙Ąd˖ˇlú4ÔpČĄ‰N¯Ėã+/ˆ*ĸ’†WRbē=×/öÚĐúۙî‡āę‚~ęŊZ˙ķŲ{ģKqtūŊ˙Tŧcúö3ú Ÿ\1×´üŒŽ$vÃi€ŗŊę-s5 K7rŅʝiSFI-T ՄtOÕ§ÁPd‚›&PsĒc礐ã Kųũå0¯KĒríņŗČøĨ9×HĘįo‚ę[š’äŋQ!ãįN:Õ푴ķ':ŸŲVƒ!hŅk†ĢTp8R•t"ÕĖu°9ԞŽė~IĩŠ`Uą+8MŲŨcrēPeŖW‘nēûē”ī‡"δú“˛Fķ‰f%Ũ\AƒÖLZ4ģ&UŌ-!ĢôĐPą¯’ (EáUÔū]×fÃUŨ§ÅĘx]#ŠUm7ŧå“";‰mČ}ä%žāŽŊåQĻąY{—TĒqŊOK,ŧÜÖŪBŸų¸VßpŒ,té‹ŊžJ„öû*ŠÃŒ—%tĶŚ˛mN UʂYbKÖæīVm§ļҤbĖēBŠtĢĒF^¯E9—}^1;hZđVéÂDy]7úąĪ9醊æ5jôī‚Œ1G*g õ—čÜ˙,ĄžwÕTT:ˇíí{•žŧÂNÄ\8.ėŖØĮĩÂÄs0dœZ†f;/QãƒNuÁܨÚËe‡¤A §DKķ€FˆJVœbõąXq|M~܏9-Ŧ*ĄOŧáø}´ŌeiįĄgŅķWPb^aųĒ,ēÃŪ0Ō‰Pdå­­eécųLé:ÚXœé]{šĐ,Ú:ŠŨōũ^õŽ™Ũst5ĘĩŠ^4Jú> é1Žúāe…œøA•ŠŽ”ĸX]\/’6‹Ĩ,ĻšŲmyÕĸļ2Æėŋsą¨:čÔ­EŸDŨë\3vļncŸ’+) ŽZüĖåK6Œ¨OšVƉŊMoWĻwßyęŌ “Ŋb2O­Ū”~í´‘:–IŸ’–Š&y* j•Z—ˇŨ‹­lœFØ`Zj;ĘfEœĄ‰ÖŊ:N'đU?˛ĄVŊÖ]ėŧ}w.÷ʝbĻšĢ¤šIŸ:ĶEũ' 6ė@ƒ**E~íÔ'#“ŠZnĒĨH›”đn_hŅđø{jĮ…Æ#•ũ^x,(—œÂĐfũČ)žü]ģŒĒN÷Į° īäXvÜįü sā@à \lIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment374ˆģIDATH‰uÕÁnã6⑏0{؆č­@ŅŊnO^ 0ķ}{č5ˇæ`˜ôĻ@Žy÷MVn=æÖcÍĸ/ 6B˛f˙Ąd˖ˇlú4ÔpČĄ‰N¯Ėã+/ˆ*ĸ’†WRbē=×/öÚĐúۙî‡āę‚~ęŊZ˙ķŲ{ģKqtūŊ˙Tŧcúö3ú Ÿ\1×´üŒŽ$vÃi€ŗŊę-s5 K7rŅʝiSFI-T ՄtOÕ§ÁPd‚›&PsĒc礐ã Kųũå0¯KĒríņŗČøĨ9×HĘįo‚ę[š’äŋQ!ãįN:Õ푴ķ':ŸŲVƒ!hŅk†ĢTp8R•t"ÕĖu°9ԞŽė~IĩŠ`Uą+8MŲŨcrēPeŖW‘nēûē”ī‡"δú“˛Fķ‰f%Ũ\AƒÖLZ4ģ&UŌ-!ĢôĐPą¯’ (EáUÔū]×fÃUŨ§ÅĘx]#ŠUm7ŧå“";‰mČ}ä%žāŽŊåQĻąY{—TĒqŊOK,ŧÜÖŪBŸų¸VßpŒ,té‹ŊžJ„öû*ŠÃŒ—%tĶŚ˛mN UʂYbKÖæīVm§ļҤbĖēBŠtĢĒF^¯E9—}^1;hZđVéÂDy]7úąĪ9醊æ5jôī‚Œ1G*g õ—čÜ˙,ĄžwÕTT:ˇíí{•žŧÂNÄ\8.ėŖØĮĩÂÄs0dœZ†f;/QãƒNuÁܨÚËe‡¤A §DKķ€FˆJVœbõąXq|M~܏9-Ŧ*ĄOŧáø}´ŌeiįĄgŅķWPb^aųĒ,ēÃŪ0Ō‰Pdå­­eécųLé:ÚXœé]{šĐ,Ú:ŠŨōũ^õŽ™Ũst5ĘĩŠ^4Jú> é1Žúāe…œøA•ŠŽ”ĸX]\/’6‹Ĩ,ĻšŲmyÕĸļ2Æėŋsą¨:čÔ­EŸDŨë\3vļncŸ’+) ŽZüĖåK6Œ¨OšVƉŊMoWĻwßyęŌ “Ŋb2O­Ū”~í´‘:–IŸ’–Š&y* j•Z—ˇŨ‹­lœFØ`Zj;ĘfEœĄ‰ÖŊ:N'đU?˛ĄVŊÖ]ėŧ}w.÷ʝbĻšĢ¤šIŸ:ĶEũ' 6ė@ƒ**E~íÔ'#“ŠZnĒĨH›”đn_hŅđø{jĮ…Æ#•ũ^x,(—œÂĐfũČ)žü]ģŒĒN÷Į° īäXvÜįü sā@à \lIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment389ę=Ŧô IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment375dü IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment390Šú%BIDATH‰•Kn9†‹ajĄ™že†æ^zAŧĘš€wņÂPĶĐ"K_ HŽBÁ‹C ŧđļ,ÜÚŦüÅ~¨%ËÂÔĸüšõøYdũģ8|-Š‘Ë+tĄZĸåëΚŗļüīäp ˇŲ}<U "§v’ÂægCž1ßßO'5ĐĢŗ>^RĖ› ĪŽ!ŠĄËW’AKSŸ ˇTņä¸r-q-üKZd*YŲ8ä¸7ģ Ãw™Ē ũkBģÄĻôšôfČÖ 5čËH=Šfp cāë@UGûdčJ¨æ‰gé3×ĮŊÄM&1×tÃĶ‚*ŽN‚wnWäī9œ¤ŠÛŋ)PÍ­ĪÔpcHmGú†č)Y/éh-Gíuāžz‡jšŪG=S’Oė * øqOķžZĄ°dÅŗ•ėŒĸĻu[„ĒâXÉĘö5cYVøÆHĸÕŌzĄž×VyP”kķB\­]ŧą|ģ§:ŌÔÉëÅÚÕ76ÉÚ EēTŅ:YâËĩk’ķẢØq•i™\ˎ Čj@˛œ7N +[ˇcöÅ1ŊčiuĮ-ũ)Aú“g.íüÁ%<žü™›Lq.åĶen%=‡$gģ-SÕt2.@ô4–sŪ&Ą ÉŗDûīŠŠË?xÛöT ęwÛhfĐĐ6ĪMgÕ4˙{Į?ôÖr9=+ÖaēŊcŽAĢö`nM6Ū‚F´Ų@ßĘĶ"SuĮŋ¨`æ4Ę$Ã-™nžk|ķeģÅŪĶL˙4AīčĩŨ Žneƒ|lŊæŠÍ[Ám2 ŸÄ˙„Ę›ĨI:!@pŦîGŠ]'ŋ…7Ĩf“Ü=ļ~xįĒŅĸ›KÆ+Pæī?ĻžkKæûuÁ–9ĶĮ)Eˇa¤)’cŪríø1ö4Ė$2čSkÚ)Ķ'ĄađŒ9üĀķžŧÕ2đØSLÅ$f„{âTqg ų°.2MEcŪĶîį˛Bˇqkdė~Jģƒ~‘iÖo;ŌŊ’™*æoŦéŦË+V ĀmGwFЄ…ß”éˇCęzĘIĖE û Ĩ…šŖ¸…—*’ëĻQ,:ŠÅQj¤å<ķąõõĸÅEŪcŪ×ĢQGÛÉ˙ķ…ĪīGŽ{ú%e΄ˆ„–IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment376ũ­ĒBIDATH‰•Kn9†‹ajĄ™že†æ^zAŧĘš€wņÂPĶĐ"K_ HŽBÁ‹C ŧđļ,ÜÚŦüÅ~¨%ËÂÔĸüšõøYdũģ8|-Š‘Ë+tĄZĸåëΚŗļüīäp ˇŲ}<U "§v’ÂægCž1ßßO'5ĐĢŗ>^RĖ› ĪŽ!ŠĄËW’AKSŸ ˇTņä¸r-q-üKZd*YŲ8ä¸7ģ Ãw™Ē ũkBģÄĻôšôfČÖ 5čËH=Šfp cāë@UGûdčJ¨æ‰gé3×ĮŊÄM&1×tÃĶ‚*ŽN‚wnWäī9œ¤ŠÛŋ)PÍ­ĪÔpcHmGú†č)Y/éh-Gíuāžz‡jšŪG=S’Oė * øqOķžZĄ°dÅŗ•ėŒĸĻu[„ĒâXÉĘö5cYVøÆHĸÕŌzĄž×VyP”kķB\­]ŧą|ģ§:ŌÔÉëÅÚÕ76ÉÚ EēTŅ:YâËĩk’ķẢØq•i™\ˎ Čj@˛œ7N +[ˇcöÅ1ŊčiuĮ-ũ)Aú“g.íüÁ%<žü™›Lq.åĶen%=‡$gģ-SÕt2.@ô4–sŪ&Ą ÉŗDûīŠŠË?xÛöT ęwÛhfĐĐ6ĪMgÕ4˙{Į?ôÖr9=+ÖaēŊcŽAĢö`nM6Ū‚F´Ų@ßĘĶ"SuĮŋ¨`æ4Ę$Ã-™nžk|ķeģÅŪĶL˙4AīčĩŨ Žneƒ|lŊæŠÍ[Ám2 ŸÄ˙„Ę›ĨI:!@pŦîGŠ]'ŋ…7Ĩf“Ü=ļ~xįĒŅĸ›KÆ+Pæī?ĻžkKæûuÁ–9ĶĮ)Eˇa¤)’cŪríø1ö4Ė$2čSkÚ)Ķ'ĄađŒ9üĀķžŧÕ2đØSLÅ$f„{âTqg ų°.2MEcŪĶîį˛Bˇqkdė~Jģƒ~‘iÖo;ŌŊ’™*æoŦéŦË+V ĀmGwFЄ…ß”éˇCęzĘIĖE û Ĩ…šŖ¸…—*’ëĻQ,:ŠÅQj¤å<ķąõõĸÅEŪcŪ×ĢQGÛÉ˙ķ…ĪīGŽ{ú%e΄ˆ„–IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment391ũũ‡éIDATH‰íÔ1ND!`ԂNŽ0×ØÂ„+­ŊYžyÅ+ŊŌžPlé„ĐÉ&~yąåw[Š/™aĀā‡1™ŋĸIúÔ ŅÉ^™ŪÛ¤ÂXeÖāJõCmîUÃÂu­XĘ Q{KUljŠ~ŦU”(ĸ>:˜EM@ D]3gĸU`¤ĸÉÂ85äÜ8oú$cŊŦí`›:U֓íå&šjxāZŽ˜¯D›¤#b9UŨωë3â™ėÜĩÜО3QÉ—Ŧ2Vßûę-ŗžôQŊËeŦŊĐũ~+{)xĮÚSāķ{ųM?ÃŽģîúô :€ķ‹hÖFIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment377Š<éIDATH‰íÔ1ND!`ԂNŽ0×ØÂ„+­ŊYžyÅ+ŊŌžPlé„ĐÉ&~yąåw[Š/™aĀā‡1™ŋĸIúÔ ŅÉ^™ŪÛ¤ÂXeÖāJõCmîUÃÂu­XĘ Q{KUljŠ~ŦU”(ĸ>:˜EM@ D]3gĸU`¤ĸÉÂ85äÜ8oú$cŊŦí`›:U֓íå&šjxāZŽ˜¯D›¤#b9UŨωë3â™ėÜĩÜО3QÉ—Ŧ2Vßûę-ŗžôQŊËeŦŊĐũ~+{)xĮÚSāķ{ųM?ÃŽģîúô :€ķ‹hÖFIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment392dôD= IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment378ĸ€­ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment393ķtĢęIDATH‰íÔ1nÄ P" wᙋŦĖUrČöj‹-÷{"žVŠ´XiĻ@ū1[ķ6QL1O€˜a0؃ų+ĒŽÄĐ×5Ų¯k|Â}ZÔu 1ˇD/ą“™kęüŦ­ĢëųĄ/ģ*\å=ŗĮÔš+QÄÕ^šÎØR‘ɍđ‰ÁA=ŅĄÁ@ÖĒE°0äÜôZôšŠëļ2Eęå XĸÚJ؊Áôä#ÕŠhöD/zę“2ĩEĶž.?hO´ŅÎ/ $n{9ĘęëdŌ7ŠëmÁÕeÖ)øBĩéĐÜ?Ļßô3zčĄ˙@ŋūņņ›ZXģIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment379mĨ°;ęIDATH‰íÔ1nÄ P" wᙋŦĖUrČöj‹-÷{"žVŠ´XiĻ@ū1[ķ6QL1O€˜a0؃ų+ĒŽÄĐ×5Ų¯k|Â}ZÔu 1ˇD/ą“™kęüŦ­ĢëųĄ/ģ*\å=ŗĮÔš+QÄÕ^šÎØR‘ɍđ‰ÁA=ŅĄÁ@ÖĒE°0äÜôZôšŠëļ2Eęå XĸÚJ؊Áôä#ÕŠhöD/zę“2ĩEĶž.?hO´ŅÎ/ $n{9ĘęëdŌ7ŠëmÁÕeÖ)øBĩéĐÜ?Ļßô3zčĄ˙@ŋūņņ›ZXģIENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment394—á IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment380“áP IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment395úŅžėIDATH‰íĶ!nÄ0PKž@%_Ŗ Ē¯U°Ēŗ*Ė•Ö Č5ŧZ°°^f0š_GĨūŠTВ˜<ĪHã™1Ø9Ŗų{Ŋ-nģ Ņ‹f1ą¯Ķ~’ú:$ Sĸ.KXę‰Åf‰Ky÷}ĩ[lyŨĶĘtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ōŽĻ„Ņę“ëë=ãÅB‰ĸhh:0=…sk͎˜„éĐôZB_õ'}ގwbŠĘˇĸ_¯ē"ņö ŋĄžMŨú`Ũ÷Iũ\Ų´cÁčéĻā—ĐžüĪîz衇ūJŋ'ķ#' %ŲIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment381äæ$ÆėIDATH‰íĶ!nÄ0PKž@%_Ŗ Ē¯U°Ēŗ*Ė•Ö Č5ŧZ°°^f0š_GĨūŠTВ˜<ĪHã™1Ø9Ŗų{Ŋ-nģ Ņ‹f1ą¯Ķ~’ú:$ Sĸ.KXę‰Åf‰Ky÷}ĩ[lyŨĶĘtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ōŽĻ„Ņę“ëë=ãÅB‰ĸhh:0=…sk͎˜„éĐôZB_õ'}ގwbŠĘˇĸ_¯ē"ņö ŋĄžMŨú`Ũ÷Iũ\Ų´cÁčéĻā—ĐžüĪîz衇ūJŋ'ķ#' %ŲIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment396c™€$ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment382}īu| IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment385ã‹āßĪIDAT•-Đ1j1…á +ØfAXĸ‹t1ƒ61$eސk¤ō)s…5)ÜĸÅEd,ôg¤xĒ=ŪHØQd‰=Åņų-K–'#ûNLF>83 ōōQļŋ2=T¸•÷ÜpŽ9‡ˆm Ō5y<ņļL3 =ŗ+÷ƒ¤ŽŲo$Ūąt%Y#Š+}Đ&"$Īū†Ũϊ°Vl“÷—ŠN7—nHAŽQ“ûMļ¨Äę×TyÕ´ß\Æv˛6ŨHvõ7žĩs›Ÿü-‰´ ›)ž÷IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment386z‚ąe\IDATH‰íÔąnÂ0ĐCũõ/ôücˆkÕÁc>Š é'8bȈ#†ÂōõÄvˆÔМ"%ŌËYžs.ĀÄ<ŠÆSu} 0Ķėoēw‡Ø§\@¯RnxE>3ˇ)yƒŪ$Ĩ•áĀė’:3j 3ĨŦ>jX¨ŸčZ˛Ō\wyW¤ %҈ģĸā‰FĶEŽŗÆR9YõNÛ>);œ¨"ŗuŖJ ŠíT/tÁvŸYÔ'ũ`ŽrEŧ,õÅ`ÕO”hÔĩ–cYúŦV4UÄúĮ™%JU‰bŌQĖÚc ŨzbeŖŠ§ęGõlëšw?(ښg+_t ā°žĶvĸJŽ ÉÚ]ôtSV;Æ&×{Q”}ų@uyŸ;ųÕJŸŅ]ĩē“Q8&}īI;=¨|íį`Žg–k 8zuU’^‡O.ø[æH”2Ą’exŌX=ÎãŠO}ęŋĐ_”Čŗ’Ë IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment387 …ķ3IDATH‰íĶ1nà `wōČ^Đ1C%ŽÔnĒâNŪĘ|NM*9BmyđXĸ,X"ŧ>돒1î–ÍHˆá?īHđŸ‘'7Đ~]€ąĒ2EĮuÂã M@TWšŽĘzĨdQĻ.WåQ5(ĪVD:Š$ãž2ĸ\UŦ,ė×UÚ;ÕDܰ‹ĒŌ\5Z@Ō3)á-Ô0Ė[Ÿ\–÷Y ]9ÃÎŋȇÅŅ MŠ•WŅÆšQZĒÁ)>ąŧĐ:ԓ!“^…ltØ/i…Txb–ꀴģ*ûĒe§~Rz¯fąwŌ„Ĩļ=ū ēsP)3å텖”ôÅņB}Úá¤Vę‘ÍĸųqŌ× eŊ›ë8ŧēgduS_]Ķ"úũ÷ËDDoô÷7ŨtĶMoĄŋ׿ŦĖKIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment388:œbČIDAT•5Đ1‚@ĐI(°1ÛŌq +÷J–F4x;¯a‰Ą ô  J—Ø|âúĮõW/ĶĖäƒá,ÆdĘ$āJŨfh*˛TŋBŲ’õ› Įŧ{qB~8ˆÚn ¨]€ôŽĻMĀ‘ŅCl†Đ°ˇ˛”ЇĀVF‘A ÛXą‚SēˆH0¸\#n „YŪĪȝĸ_܁FÖų0phÂķŽÕßä9đˆXvvF)´ũČJĮķÍķ‚ēf•ę:´Įl-§aéôB>ÚģĢĸëÛč§IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment390Šú%^IDATH‰íÔ=nà pĒ låUéēûĻȖ ‘ą”!ĮčЋehސŠKļ7 (4|ØnŌ9Ē„üŗdŪûķLüĢ#×ĸŽzûvÚJ’˛Z"Ė]ÕFÄgôŒ"!îÜÂã¤~ Ë/ÛÎũQ• x:!ØpD؛ĸ Tn,lP\PĻŨeåAųʖ’īŠ…_ē­ęDTjyÕ]UīFúÁļ}åCũd;XëŦcEčdVô‘Y–õTvY WCĨę)ë=éjfš¨i‡Š=õŒZNõĩ *Š.Ũ@ŨPCÉc-)ˆąĘ¤6¨¨ôŒš6)ô2ĒÚü(ŋjÚ ĸč:ĒN*B7ú7į]G•I3­ØcFŋ)ēEõúXtĸ W"Š]ÄΘ—Œ–ė “<(NcžŸ{“bÉLQÉT܅ =ø+…y3Š3ËĶüžúķëzū*7ŊéM˙‰~ëȒäÄØÂëIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment393ķtĢHIDATH‰íĶ1NÄ0P¯V"tîiæ 1WĸÜ"b˛ RčŌrŠŦ\ä ”‰öF¸y°(â$K…h2e=Yžų–•\¨BũîÅgĢꕸŨŠĊŦĸEõ ܁ú•XƓ]Ņ{mįę0ëü¨° đ›Šî.ęûÚŊƒŠŖEeŦŖÚú…™$ę9Ē…ž›ŠõZʨMb^,k§ĸšēxĸ¤-ršvˇĄ+ĒęįģD āíâDĸÛCĒWÚk- …ōĐ>¸D!ǃbkS•JdTÆųŲ0ŒĀé[­MÕü¨ŖĒˇSc4Lp\Q '‡Ŗž‘IâTC<Ɖ^H›ž!Q‹Rú&40QlЉYŊæXšDŠ4äĖ9V‰:ʘäÜõ×2WíQx^Đī¤ūœvÅų°…øË2™UCãēü?ä’ĘĻ›nēéčŊ {…¯IENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment398„!­#ŌIDAT•=ÎAJÄ@Đ?L ›`_ k¸äZ.Ât$Bo/āaŌDđ.:¸˜Ĩ5ģĘūV"øWǍúā@ˡ"×,eD:ņÃņžGŒ|qĨoą&ē žAīVeƒY.nũá3åŌÅ˧[f…UFƒ-_E씇$>T`âĻãÚ €jN˜ĩÛąüáf8Ûčķ@Â?Ž™opŲ×_Ų:;aMå+Âf(žEœH+&Žī䤰{{ôƒÛĒĶųx´‡IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment399ķ&ĩ¨IDATH‰íÔ1Â0 ĐJAbėr”\Ģj*1ô\NŦÎ$7&Đ ņ˙ĐĨKŧžÁļôíÎHMŨaú¤:1-c´T}ÎXŖO‘fëS T=ÖķÂU‰Î‹öH×Ēy§ZíËÔ%ܡDĒÁeŦæ]žbŊÍza3ۉĒíMü>-ŠúšĢ@TĸA†ˆ5ŠūĮ¯Úc…Z'?ûŪMĀPۅĸĀųš6mÚôWßd€õ…ČƖIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR=ˇ!+Ü pHYsb&2 tEXtComment402°yéņ¯IDAT•5Đ1 ƒP ā:ÔÍÕŠīNučĨ:=€Gđ*ŠƒŖW°88VqhĀĮû› ZIGÃEÔ>˙B˛äبč~̃ĄP:fR4CŽOd%  ƒĻ8Uđ\Õ˚ ¯f܊ŋ“Ž<ŽRC†,<.ĒrĶ‹ĄCėL˙*ē2Ŋõĸæ*ũæSĶ…ŧ¨–"ŋ;ƞϖŖĻÎĖ6õš>¯ėWEëŦlŨŠĄusÂĻíFŨÉ ŠET 4ĸ€M¯!˜zY‹ƒŌs•l­‡DüŨũîēëŽģū…žŌ? }´IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment409'Ģ0y­IDAT•UĪA Â0Đ„.sį"bÎâ=¤U\dŲ+EēČŌ+4dá˛)ŨD(ųNĸ".|øü!IcÉÅžÂ#ônß 7vĘg¨˜92Įļ`#8ąŦodAÚķøÃzØRō< ´˛´üã:ŌT1xę+āÉXiÖ´Ĩ–c' ÚŠŠ3ĩ*B-+ÃĐ<Ęx5áŅL%2üu†s‰ô¨`*R‡WĒ kh`FQIENDŽB`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRB{?&l pHYsb&2 tEXtComment410Glšœ—IDAT•EĐģ Â@ `w”ÁŖ8›%T)ŗŌĄ î„DË! ‚dņ=qõé/ü-%ŗƒĒČĻ—&Ôš‚zÔíčÂŊ(ĸR0ŨT05%J›„ŗŽUĶȚNސģ4Ĩ{×iâĸīČŪCŸĄgPŠ:†V×ĩIž–…&ōø’‘¯;SßYH˙*ˇmĢiŅxŅ=˙f“'YOv?‰Xžæ‘§üRIENDŽB`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment418Iˇ1ŽŖIDAT•eĐą Â0А’6ˆGšĩ¨“ ĀŦBD Öp­K#YūÜE˜WOļīßŲāļBĶH߃ ŖC"­aq…čšé Q˛ “äqúÂĒ68Í9 ÉĢļøĄX ŅVėđÚāĮĘ,<)fE€n¯HvÖܒâĀ%‰|ę úŠšBsäũtG^ ņHöV;ĻöŊķÚúŽø%‡BĄIENDŽB`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment419>°8•IDAT•]ĐM Â@ ā'‚Kįæ&æhļ]ŒŽ<‚Wqô$/PWŠ-yΏÕ,ÂI X˛fÜ8e›Äd^Ôd0¨é lųǘtŌn†Å?ėĻ Ļ VŒiœŒsƒ{CÅûŠ)h <˜KâË>æüwUwːNąy78:ÃÚ;âíK>Éž|#ŊåYŽŗĸŧn$IENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRA[TNĘ pHYsb&2 tEXtComment420lAę_ĒIDAT•=Đ1 Æņ×8tôoâ5Œ}MÁU Ž^á5:âÖĄáķAąL?BīĄ-&|w ņą›œSyčÆ=7%˜GĶ`ĸŠU7ū˛ŗŠĶĩiT SŪĩĒäRuBĨhŧũbQ*īVÍĒIO‰‚ę^5ŠŽõÆ(ČļŠÉM}Sd ŦĻL†]š˜ÍĢļI‡:ŊĀw­h`•Vf6|´<û3÷å_~ī ŋĸĖObIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR=ˇ!+Ü pHYsb&2 tEXtComment421FÚɏIDAT•MÎą Â0Đoš0]FČTd´ÄĘ Ŧ‹"ką€FJ|ų˙Û@Žz:]q„;$‰[,ŠÉaR\G…GwĢčƒÂ‹ŽŋČXÅj˛ P~Ŋā0{ÄDXif†“†‘ctĸvEAŗAÆ l‚÷|ęų?žƒQ {Ā™qaDbôäN;_!ļ2é?IENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR@ĘöQ pHYsb&2 tEXtComment424k,.FĨIDAT•MĪ1Â0 ĐučFŽāŖôh1p Ž‚ÔD ,H\Ą ŨŠúqL…ęé)ūrlđWŽ,äbȞE[_ņ8ÚK`Ÿ ög…#7Ȃå°1mnđˉ.ō.ȉ§Äŗ`JԙÁSa]mÅMaûh’Rt˞ƒSx˛ –Fˆ^SwÖđĮVUL+‚[LčĐÔ9 ;ETDVņ`Ĩ´sĘ/ IENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment449CĮõ}ŋIDATH‰íĶ1 Â@Ёi„š@Hnbn–([¤37Đŗˆ Įˆ"X§Üb™īšz˙66 ™rĒ?‚ĖėdU⠌\Ī€ÂZĒĻf Ņ}ÔĐiF=ÕĄô}ÉUsęŖiĩŦ†ŦúķúRŋ%:;\50}8¸žŽjŅ›C­‰‹N.­ę,*†¤ZÔMIU¤éŗÚ5iËúŖ#oNiT/QCsĘfYÛ­‰š`̈ziīŌŗË&MÔé×~ÕUWũ }^}éÅ­Ĩi IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment454$m¸¤IDAT•UĪ1Â0 PGSŽPŽÁPŠâV •Zԁ‘3uâHučęŠQ?všJ%/‘ã|fH@x ( Á°(°ÛP Žđ p Q8|đ‡%KŠÎj2Ōs9á sĀÄxü`4´U¸mJē+¤ÖâëŅi<Šd8ęĻ7ŊœíÜĄįæ@žā6ú9ķnƒOŋëŦˇâ-ęsŌĩ-Ų¨—Ēko>ŧIENDŽB`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment458-ÛôĒ×IDATH‰íĶ1Â0 Đ  lÍž ž7H¸YÁU/Š%HQÉœß ‰Ą^<<ɊÛéF$÷C-ĒĢFÍ$ e@3¯Ž“ßĐnXî@%Z&¤ŖéJĶ–¤Š)ĒÜÔ#uQ'u¨_S‰ĖjŊ~5­Ļ™GPšæĻŦ•ž›öw$šĨiH}2kÂwžkĩ$HŊÖ3åžfį_õÄ@­ŲĨžš@Ši˙ÍĻsšTŌi*^Eá^ÉŅ~˙ųjG2ĢĸK˛ op#vŨu×]˙H?āúĀ6-•+IENDŽB`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment464@ëBĪIDATH‰íĶą āk:tkW^ŖC“{%GĶÖ¸øVšø"8𞉠šŒ#?›ƒ 7‘|Ž -ÔJŋUaŊa FOPå€Õk(¨[|ÔkĀjŲ‰¤Wvąąĸ¤kQĪ|aŨ°“ĘČv\ îŲø 4DÍ$éŖ.0gīŲ*T—t€ēëŦ —&¯–š¨=1֞hČwEíGMVÕ§ûU°rŌŲč1ߕz“ŪRgüdœHm&F*ÔĘV%ûŸ’61H¤ßÚˇPUĢV­ú7újđö—<ŗĸIENDŽB`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment465xGÛÔ¸IDAT•UĪ;Â0 `Wš-S'r•¸ Į`J‡ {Ž‚ÔĄc@*Fē‘!ō“ $&ļ,?OāŖ \ƒš Ė_L –  bÆâ1Gb…q ėČH­4{tíîō@>ZvnčíYÍ€Ļ—įZæ-žÍ#ã:$ŗfXŠčŠmˆ"gÃÖKTŧCNĩ!¸kpúã’,­0>ļØR" S<_äĄūV§ü—n` ŌI’˜ÛŸøģšDíIENDŽB`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment468ö§iŲIDATH‰íĶą ƒ@ P" J6ˆË X%›˜tŲ‚5RĨ d„ĸH{(..į=ßĸI‡Û'ßYōwĻFÕŲŽu6u4õķī™FX=Pa•Ē{Zڏ@=Ąf°”TIę:žîMšD˙ļ<ŠhæzŅëčĶĢu ôžh‹TxmsCŲØ ­t5uöMéÕZÚ8Z ņH~]UÎVwÉ ŲÉĐ*[}$C%Pƒ’ŗhÕŖl…ĀŨ¨§hė(-ŪĢĀ;"5ĸlĩëŽģnŌF„~{ģIENDŽB`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment4706ĄIDAT•eĐ;Â0Љ\¸¤Ĩ@ĘMđͲ‰r0@\ÃT´–hŒ0žėƸzڏ4kđÎõ˛Û06LÄC§ČŌö. Ū@o¨6™‡bˆ_°CqŠŗâ5“'Ã[ Ī™U1â1ŗ(&Üūā'æ@ČWôIáŦŌĀ‘Qĸ8‹%mĐĻoČĮ4~C¤P=˛Ž‡Š€ĸŅĨB AŗØšíSŽ\j!Н$ÉÄ´IENDŽB`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDR: kVx pHYsb&2 tEXtComment471f1.Œ˜IDAT•UĐÁ Â0 Đ1@Fč(-‰ #t‰€8´'Ž•¸äPåc')_ü߲eđM­ŽÚ× zA*0‚Đ1¸™ŽĢāDq1ex14Pņ4őI€ÂYą‚ąÄŽ5‘ƒâĻŌā§}TœŊČ`ķîvsf˜<W˙čØá2F[Å~@^!+">™KĻ DžwIENDŽB`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment472˙86ĸIDATH‰íŅ1„ ĐIļØŌ#pŽ‹-Ŋ’Gá”ÄlVŅ˙­6L1 y™0|DIyyJßLƒ¸h Îb<Ö &: KUxopL}Q‹Uyҧļd™tÜÎHŋ7tĒ æ<Ņ‡Ú˛^ë2čŠ~šÛ šÚ/hô<ŧۊÎ^Փ-PīJ$ĮÅwYI +#U)ŗQ^äŪgˇšéÎÚĩk׎˙¨+áÆF¯‡ø?IENDŽB`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment474[ÚšIDATH‰íÔÁŠ1Њr,Á‹‡fę7æ°lü”ũ„=z23ĖÂÜôüŊ ėo˜Áƒ×/9)ĶŖ°lo`/jAŌtIŠĸh'ļđw+=ŽĀvÕôNļێ2ÆĐSöĨJS̉æŋPiô}åšÆFÃS´Îj ņWÎiIË͙$ã”ßTØFĮĀŽ/ŦŽžß n4ē¸1 7ĢVÅčíq„>Įņå‹Fœîw&fÄĀ]ÛAŨūŊcĄ7Īh_ĢáqŌä+$[ĢMAĐ}D~ë’Ģ;ĮŠ—õ¤×ÁmHjđōUpiA‰¤¨ÍXЏIC™~*5šˆ&ŠWŲņÅĸ¨ÉĮ7šôŸPUĢ4iøZôtÖuŖŧž_’ŋ=IéėViŌãY)Ē •–v8Øīŋ•ĶU.*Č¯S@&ĮėG•Í bfö pHYsb&2 tEXtComment477R‹š–IDAT•mÍ1 Â@ĐXîr‘€[LŦl„\@đ*ŲŪ;+ۀ…[ŒķŨMDÁßĖ+fæƒN ŧqD÷P°K-č;IØķ`Ģõ‚&ãLō˛âVŧNЊ)-4¤Š-^+ø iņ,đ¸gÄ ŨröŐú]l 6†é š 0ēđ`OÉP8͘ᘯbíŦÔ>ŗDŪÄĒŧæƒōšöIENDŽB`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDR=!B ž¤ pHYsb&2 tEXtComment491ø˛ĄIDAT•MĪ1Â0 …ao9B¯Á–…#0fKQŽ•Ē×p&Öt RԇíĒ”H–žÉūC6™FXQƒzPĖ M‘ &ÃŗtLpk§ĢĄ"¨Úūk í@?m„cEŊ!˜ądE‘ŒQąđ]! ŊˆâaĮD>^cL…üâC>‘~xƒ5Õį 2I˜gY×ȡ¨Āūø 5÷š9Æ IENDŽB`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment495˙ßĮ‹IDATH‰Å•ÍŠÛ0€GS_Œ˛‚ŨGHo.5ąaĄ}…žD!VHŲcÛcŸĻQéué3¸ėa/ qČĄ†5VGvKą7ĐĨĨC‚e}iFķc€˙!éYzuĪŽ €=ŲĨ9z’VOFgi§Ë˙ø¸ŋ úÅęÍ`ŪŨöĄŨ1=Ē ;Ąhâ+úķvčéÔ9î.Ú§Ŋ_•Ft¸;@ąYāę õSVĮēe zft4˛Zo}OŽŖ!Ú]sÁÍ ]ØÍ…p'õ$ŧG`GŲĩNŊsƒqŗ+\WÃ;ÛB$^9{¤Pėoy‚åüđfBoĩĖc¯ˆ‡i¸ZŠIČŖáCÆrŌđ‡ØKˆU&ŠäÍō eŋj=BJeéx¨¤}ĸÕč9ĩEO¯$”•Of“.ëŅ ŅÚW)îĶé´ õŖ}vj"ĸŽOIXEF5R&€ĩåŋįŦu7ĻĖc¨$Éąp6Šaž×Š6ĩ`ô™xSx’Ë18*g^h?ƒĸū,ĻíŒNo9Ä3ēŖˇ˜/úįîx*{Ū=ĸėŪ¤[˜‡ÅāŌWû4)(~,PôōÆüD”0•ĒuØG€ŠF%OÔ!ú)˛žʏŠã g–ŠüDŖļTŲ0Š.ōô¤ÕW`×dëˆōüÄßĘÃ\{ ķLŽô6×Z•­mÉĢLŠ#=Ô¨,iį×@”÷>DIB˜e?Õģi•ŦÉŖ’œœeI¯ õB†ŠĻ™r^4o¨MzIŖûÆ B~’b’ÜŽsÕS[ēŲqH6éēSÛJZļˇžË͖yC)Zû–ēo˛ßåŨv Õ÷WIÆŠŽ+åíΓEgĻ*ā$NK‰æŪę,'{IENDŽB`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment491ø˛‹IDATH‰Å•ÍŠÛ0€GS_Œ˛‚ŨGHo.5ąaĄ}…žD!VHŲcÛcŸĻQéué3¸ėa/ qČĄ†5VGvKą7ĐĨĨC‚e}iFķc€˙!éYzuĪŽ €=ŲĨ9z’VOFgi§Ë˙ø¸ŋ úÅęÍ`ŪŨöĄŨ1=Ē ;Ąhâ+úķvčéÔ9î.Ú§Ŋ_•Ft¸;@ąYāę õSVĮēe zft4˛Zo}OŽŖ!Ú]sÁÍ ]ØÍ…p'õ$ŧG`GŲĩNŊsƒqŗ+\WÃ;ÛB$^9{¤Pėoy‚åüđfBoĩĖc¯ˆ‡i¸ZŠIČŖáCÆrŌđ‡ØKˆU&ŠäÍō eŋj=BJeéx¨¤}ĸÕč9ĩEO¯$”•Of“.ëŅ ŅÚW)îĶé´ õŖ}vj"ĸŽOIXEF5R&€ĩåŋįŦu7ĻĖc¨$Éąp6Šaž×Š6ĩ`ô™xSx’Ë18*g^h?ƒĸū,ĻíŒNo9Ä3ēŖˇ˜/úįîx*{Ū=ĸėŪ¤[˜‡ÅāŌWû4)(~,PôōÆüD”0•ĒuØG€ŠF%OÔ!ú)˛žʏŠã g–ŠüDŖļTŲ0Š.ōô¤ÕW`×dëˆōüÄßĘÃ\{ ķLŽô6×Z•­mÉĢLŠ#=Ô¨,iį×@”÷>DIB˜e?Õģi•ŦÉŖ’œœeI¯ õB†ŠĻ™r^4o¨MzIŖûÆ B~’b’ÜŽsÕS[ēŲqH6éēSÛJZļˇžË͖yC)Zû–ēo˛ßåŨv Õ÷WIÆŠŽ+åíΓEgĻ*ā$NK‰æŪę,'{IENDŽB`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment496f֖ĄLIDATH‰­Õ1sÛ6đąœ;ÖėČAt—ĄĢļjPįōr×ECb§ģzÉ]>BúQ ËāąũšŠ¯Ėi0Н˙Gē6Iq,’æOđ`ĸ˙õ:—›Ÿũxj+Ęäá Û]˜”\ķZęvcđŦ܈žŊ‚*į’qK[rZų8ĸčfŖē¤Ļ-:Qŗ ķE^­ËŪžļ%ŋÍĘ3Qŗž*ŽYœåTøųf ŗVĨ-ôj øõâÛīY Ņ´čz9͂'b6ĸ˅†zŞzšĨ’­ōdc? ‰k5›RâŖĒ(ÚâZSæ ækėĢ~Ōŋ´7wDgôŊ[é`8tƒ…V•ŗRDēĒĘæEԓŽT_ŖBÔÔÅ/ŒųÖ?ë„T Î't~cäãļ”EŅGũŠ1|ĶnČ ;”„Ϥ¤B>DĶŅĢdL ØßŅĒpĪēmbLuŠKY?ŗ]´;ãįr{)š*Â@›Ņ^Ö[ZXŅĒĢø -­h =P+Ķ_nļ9"ŦksĒ´yƒ4íJžaŨīŲS.úĢWģČ7–ûšŖXŌõō§Fwϝëå’æĸ÷om‘˜ S]ūpøĘx¨:ĘBŧ⇂ŸtņŸ–déü ˛|ÚVŌ3=ãĮĢŖ3ō„Ä4Í*mo­#PzUđË˙ØÎNYIÕĩ­ũ<ˇwEOé‚,4×ҍ÷–īŸÆE1.ņČ{/B˙ Ë'1Ëö¸ÃÁ`ü¨VtČ{ÕcZCŊ{wßÕĻ´÷œã›h}NędĐÖË­øTAųČģžĒVīj™Ø‘÷=U×AîlЏüg_?GyÖhņųīgŊhzV´i&zāŦ7ßvgŠŌJÖd˛]]ĩ—k ?QčbáɯÎs}Ēō/ęU3#’!ëū:ãĖMՈG.z3J_ģöP*\ŋy7ČŅäĩTŽēâŽëËĄ&hVfČŪ-—CÅąƒĨŠĸ;Ž×CŌĒQ˜ŌąŖÍS¯4 Q–ĢĢ’ģsŌ(9TėÄ ö‚ĖdNúškzÔCG卞¤÷ĖÄąÕÁ¸eûē@<ÍbĒ~Ėė1Ų—ąŠå‡X fdBČQåĩĢÎėKtŠŠU›”Č^lŠĻÕēHDBŗ—aIENDŽB`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment492aģR¸LIDATH‰­Õ1sÛ6đąœ;ÖėČAt—ĄĢļjPįōr×ECb§ģzÉ]>BúQ ËāąũšŠ¯Ėi0Н˙Gē6Iq,’æOđ`ĸ˙õ:—›Ÿũxj+Ęäá Û]˜”\ķZęvcđŦ܈žŊ‚*į’qK[rZų8ĸčfŖē¤Ļ-:Qŗ ķE^­ËŪžļ%ŋÍĘ3Qŗž*ŽYœåTøųf ŗVĨ-ôj øõâÛīY Ņ´čz9͂'b6ĸ˅†zŞzšĨ’­ōdc? ‰k5›RâŖĒ(ÚâZSæ ækėĢ~Ōŋ´7wDgôŊ[é`8tƒ…V•ŗRDēĒĘæEԓŽT_ŖBÔÔÅ/ŒųÖ?ë„T Î't~cäãļ”EŅGũŠ1|ĶnČ ;”„Ϥ¤B>DĶŅĢdL ØßŅĒpĪēmbLuŠKY?ŗ]´;ãįr{)š*Â@›Ņ^Ö[ZXŅĒĢø -­h =P+Ķ_nļ9"ŦksĒ´yƒ4íJžaŨīŲS.úĢWģČ7–ûšŖXŌõō§Fwϝëå’æĸ÷om‘˜ S]ūpøĘx¨:ĘBŧ⇂ŸtņŸ–déü ˛|ÚVŌ3=ãĮĢŖ3ō„Ä4Í*mo­#PzUđË˙ØÎNYIÕĩ­ũ<ˇwEOé‚,4×ҍ÷–īŸÆE1.ņČ{/B˙ Ë'1Ëö¸ÃÁ`ü¨VtČ{ÕcZCŊ{wßÕĻ´÷œã›h}NędĐÖË­øTAųČģžĒVīj™Ø‘÷=U×AîlЏüg_?GyÖhņųīgŊhzV´i&zāŦ7ßvgŠŌJÖd˛]]ĩ—k ?QčbáɯÎs}Ēō/ęU3#’!ëū:ãĖMՈG.z3J_ģöP*\ŋy7ČŅäĩTŽēâŽëËĄ&hVfČŪ-—CÅąƒĨŠĸ;Ž×CŌĒQ˜ŌąŖÍS¯4 Q–ĢĢ’ģsŌ(9TėÄ ö‚ĖdNúškzÔCG卞¤÷ĖÄąÕÁ¸eûē@<ÍbĒ~Ėė1Ų—ąŠå‡X fdBČQåĩĢÎėKtŠŠU›”Č^lŠĻÕēHDBŗ—aIENDŽB`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment497ŅĻ7ĐIDATH‰]–Īj#GÆkļ…;ŖV؋`Úā%— <žå–gäãę(XáiEM^ Î;䲐ĩЂ/=BÆņÁ—ˇņĨ†Š|Õ#y흃%ô›Ž?_}]˜¨{˛îCÕDûdŊ|2÷D Y˙9•?ʄēōsúUGqvÜŖãú3š“–ØÚĶ„čõs:H‘•„ë2fĪ#įEúŸ*?N_OŸá“íįôčÍĐ_‘ŅíéHÕ?4”ôŸŪĪËVúčĢH†IŌčOqŠ’ŠWē>RėŠ—Íė;DŨ':UŨŲį4'Ž:äøz¨Û”÷yÉ2­Z톤ŠÕúÅqŨfėu]ĒÎ뮛íS2ĘQ\PyéEÎ'­ŌĪõ~ ęā؈Twv)¯1dVĸŠ’š[^{Š\ƒfuž¨Ĩ˜¨|õk—5ŧĸŠtMĮBĢĨÄ%ķ2îŠĒ5&„žÍøĻ‹ˇ¯Üûŋõt„‚SĄåMW[YŖĻé҉§,*Ō¯ö᝜ø<ķHÉŒėĩPGÔMh2:;åĖA4U/ųHü2€Žéũa„’#ôÚt‚h ´ú…Æ ŗz‹Å@^ĘÍ,ĐņB "ũаO[=c&tĘÉŅŊŖFhCMoj9ĐknČDR.ËBļÖnhĒ›’ņ37ŗņ:îhŅkK āuhĮjÖ¤î{0—•–ĻĸxSēÜÖUmۀ{ÖߛŌŅč{” ŦږÎĘēō%œí— “Qj˜ 5įZĩ•į h4§h;Úhh̚ęŽÛŠųĘĄí/hZūöV1ĢPfąbĄŧšŲ{T$‡|íuBåŲ\…´UŦ´â/ƒ­' -¨/É@|äFÁröqŪ҆ų>ęŖUŧqš\Ā–—ž@Ô6ōOYŖŠwØ#ũkĸ=:ŗ6ëú…ĪØÛ{,”ĩ\?˜˜ĢēUOũÚPSy jëņÔÜÖüDīĄ˛yÄąÛ”līyŗĨÕ/ÜwĖÁ *č*ô´Ŗ¸‰å†ī–°jĢ!X&žRŧ\Ü í'z›Œ,Úßņo˛ËÅR¨Ŧ ž¸MČ@Ģ9ķėwâųÂmiÁT ũPAÎŲ›ŸAOˇä:Ņ Œjąâe9sę2m´ĐÍų’ąÚAørÅ5ŨlŠ™Īa*%”Ų^Š2Č{˜œ5æŽ˙ŗŠ°Xˆŧö&„­Vķcq€Žã°„ŋŽuģŖ›Ģ+Đļ2|Ņޤ…'ũŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­Ûڌ;OÂ:j{ÃūôÄڙHĨ›|KŖiEfW reM2‰‰ūÍmĐë5čļ lüׁ a•!'ˇc}ÕJŒ`ã;žėgœ =Ą˙†āHPĄF:IENDŽB`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment493ŧb.ĐIDATH‰]–Īj#GÆkļ…;ŖV؋`Úā%— <žå–gäãę(XáiEM^ Î;䲐ĩЂ/=BÆņÁ—ˇņĨ†Š|Õ#y흃%ô›Ž?_}]˜¨{˛îCÕDûdŊ|2÷D Y˙9•?ʄēōsúUGqvÜŖãú3š“–ØÚĶ„čõs:H‘•„ë2fĪ#įEúŸ*?N_OŸá“íįôčÍĐ_‘ŅíéHÕ?4”ôŸŪĪËVúčĢH†IŌčOqŠ’ŠWē>RėŠ—Íė;DŨ':UŨŲį4'Ž:äøz¨Û”÷yÉ2­Z톤ŠÕúÅqŨfėu]ĒÎ뮛íS2ĘQ\PyéEÎ'­ŌĪõ~ ęā؈Twv)¯1dVĸŠ’š[^{Š\ƒfuž¨Ĩ˜¨|õk—5ŧĸŠtMĮBĢĨÄ%ķ2îŠĒ5&„žÍøĻ‹ˇ¯Üûŋõt„‚SĄåMW[YŖĻé҉§,*Ō¯ö᝜ø<ķHÉŒėĩPGÔMh2:;åĖA4U/ųHü2€Žéũa„’#ôÚt‚h ´ú…Æ ŗz‹Å@^ĘÍ,ĐņB "ũаO[=c&tĘÉŅŊŖFhCMoj9ĐknČDR.ËBļÖnhĒ›’ņ37ŗņ:îhŅkK āuhĮjÖ¤î{0—•–ĻĸxSēÜÖUmۀ{ÖߛŌŅč{” ŦږÎĘēō%œí— “Qj˜ 5įZĩ•į h4§h;Úhh̚ęŽÛŠųĘĄí/hZūöV1ĢPfąbĄŧšŲ{T$‡|íuBåŲ\…´UŦ´â/ƒ­' -¨/É@|äFÁröqŪ҆ų>ęŖUŧqš\Ā–—ž@Ô6ōOYŖŠwØ#ũkĸ=:ŗ6ëú…ĪØÛ{,”ĩ\?˜˜ĢēUOũÚPSy jëņÔÜÖüDīĄ˛yÄąÛ”līyŗĨÕ/ÜwĖÁ *č*ô´Ŗ¸‰å†ī–°jĢ!X&žRŧ\Ü í'z›Œ,Úßņo˛ËÅR¨Ŧ ž¸MČ@Ģ9ķėwâųÂmiÁT ũPAÎŲ›ŸAOˇä:Ņ Œjąâe9sę2m´ĐÍų’ąÚAørÅ5ŨlŠ™Īa*%”Ų^Š2Č{˜œ5æŽ˙ŗŠ°Xˆŧö&„­Vķcq€Žã°„ŋŽuģŖ›Ģ+Đļ2|Ņޤ…'ũŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­Ûڌ;OÂ:j{ÃūôÄڙHĨ›|KŖiEfW reM2‰‰ūÍmĐë5čļ lüׁ a•!'ˇc}ÕJŒ`ã;žėgœ =Ą˙†āHPĄF:IENDŽB`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment498nģĻƒIDATH‰ĨÕŊnÛ0`4jíĻēvk‡4|”ö šąšREz?G§¨Čø *2VFSÉëŨ‘%Kjö ˙ˆŸx:R¤,Ā Ŗ,€­Qî ~Wø*¸•Qāu‹o­•“ø]]k X¯Č ZČ h('h,ÔĻęXo2¸Â.ĪžĨãšģ ­¸Î@|: †3Rņž/û„UĖ2¯![×ڗĒ;¸n‹šßƒæ6ãPõ@kŌ č[:ÔNnFē+ĒÃŊV|šIæ09ĪHēAC-x įT†ž3Ē“NÂ뎕m9ėĢ2°GR5VãõʲļA]RjÁĩ0Ōw^(e´p& ‰ŨĩWegûjQ_-ī;ž_ôņëRlē4ŗMÜæoÃuŋoúuÁŅŠĮ+7?ēœč<§uüqėĩŠcõ)¨ÁûũŗÆOŸŲĐĻō‘ĘéĢ2ļ‰ĩČŠâÕHÕXĒpłZđîØQßXDÔ–žWŠÄ-5u0ƒÚf&ē‹zęu—žP3}+tãwusŠáŪW0 Ô:¨.æ4.G3ŨJ¨ũŦnįĢ ąƒÁļšō5Ķifū¯šœį¨vŽŨDm/ā<ŌZÍŠ J[g2Ģžī &aX÷¤Ũ’ę)ÄäK#‚Xķõø}-ũņ6S˛q]}]XĐ<ĪN-eū ˇ’ĸpã 7sIENDŽB`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment494ˆØ÷ƒIDATH‰ĨÕŊnÛ0`4jíĻēvk‡4|”ö šąšREz?G§¨Čø *2VFSÉëŨ‘%Kjö ˙ˆŸx:R¤,Ā Ŗ,€­Qî ~Wø*¸•Qāu‹o­•“ø]]k X¯Č ZČ h('h,ÔĻęXo2¸Â.ĪžĨãšģ ­¸Î@|: †3Rņž/û„UĖ2¯![×ڗĒ;¸n‹šßƒæ6ãPõ@kŌ č[:ÔNnFē+ĒÃŊV|šIæ09ĪHēAC-x įT†ž3Ē“NÂ뎕m9ėĢ2°GR5VãõʲļA]RjÁĩ0Ōw^(e´p& ‰ŨĩWegûjQ_-ī;ž_ôņëRlē4ŗMÜæoÃuŋoúuÁŅŠĮ+7?ēœč<§uüqėĩŠcõ)¨ÁûũŗÆOŸŲĐĻō‘ĘéĢ2ļ‰ĩČŠâÕHÕXĒpłZđîØQßXDÔ–žWŠÄ-5u0ƒÚf&ē‹zęu—žP3}+tãwusŠáŪW0 Ô:¨.æ4.G3ŨJ¨ũŦnįĢ ąƒÁļšō5Ķifū¯šœį¨vŽŨDm/ā<ŌZÍŠ J[g2Ģžī &aX÷¤Ũ’ę)ÄäK#‚Xķõø}-ũņ6S˛q]}]XĐ<ĪN-eū ˇ’ĸpã 7sIENDŽB`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDR<“ŋ“G pHYsb&2 tEXtComment502ąģƒÆŋIDAT•UĐ!n1Đ,Ln°W0 ¨â+-ÜĸÛä*k,ËåĨ –gTdĐc˙˙žĶîĄ(;Ū„:9Ž‘-@÷=.lGčā膨âÆ|ŗI~ÁƒUR9etŧƒ:˛ãä{eǧ#˛ú°V–€¯:;&°N†¤Y™Aˇ,+.ęˆ+ö:KîņķMMļf‡ŌâEa¸[yĮ!qŧ,ŖŖø”›<ōi_°ōĮņ adĻzĒeŽIENDŽB`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment513ß§‚ĒIDAT•EĪA à Đ/ d“#„ä"R¯Ōƒ”Œ‹%Ģ^Ò ؝ qú5ēņÎŸ¤U‹č‘!IļbwĄŪeK"=FÄŽĄG\46|ĩbnHד#ōĘĪĄeD0yBxV$‹O"Xœ,vĘ^'‹ŲtDMeāą0SũīäX'[ƒķ0ņ†4đ"€ŽA€!pÔ(=ļCw—8áŅŨ †(xÕŊxLūVö”tY^Ē3IENDŽB`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDR<"+[‡4 pHYsb&2 tEXtComment527ķįËŽIDAT•5Đą Â@ …aŖ) n&€•ØĀ ײŖ ”"eVH”‚2/WœÎœÄÕ×üŌ“Iցwd)x(ž—HD¨„=u:ŧH0”* tĸīpâæ§đŅ5¯ĨÚ°ŧ“4 ÉՊnČ č>;…€ŗ—Ґŧ´†Č ŌCO"5¨ΆJå/ÃŲ÷†1“3LiCģáÖh%‘WŦ_ ;ú3ūōqžÃS¨`„IENDŽB`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDR>!Š:%§ pHYsb&2 tEXtComment533í‘ā“ŌIDAT•=Đ1jÃ@Đo$P Á^`ɖšB EēØT¨Ė‘â ÂeŽ-*ÜŽģ Œõŗ’MĻ^õ?|đ~†íZa¸‘ŗ3Dč•ĸ€ŽPī!ēaG‘!Ī5´bņĩƒü’㤭ßđ=YãqÍÉ-įtä5ã…tœ#ŽBs7õ}S_7UŊ-ß"ˆĢĘáá|Ģ 5guyŦT8=ëˇMĩôjÖūhmiR’dšdĸrREö´Ôä:¨ĩųŗöhčžũ➿Y aÚīPŗ?āN&I•—eë€5SôąTÂ9¯Ĩ‡T ԅčÕTøVUƒŠg}ŌŠ ˛]ËĘIđ¤mˆėeRōkĘĨ͚Ū¤>gÍEÜQ7(ęĘú x&kę‚*āyŪDy=™ĩæŧZhËڏz^Q *¯CĻXģQl×ÔRôE]œĄ¸Ŗ"¨å;rĪúĢĪqü5Ļ@î Î{ā~Á8ū.ę¨ÅK"ė¯ÅÁJĀ{Ę{%čn°nÄŽģîēëŋę/w ¯ÜápöIENDŽB`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment536û IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment530t˜ą) IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment537ęü$Š(IDATH‰íŌąnà `"éØĄŅ%C%^+SŽŅGąĢŒ~, ʂ%ä+āĨĮ[§ší÷‡Íq>‚;KŋS{Ęv•ÚėÁ´Ģ*W™kĢē˙Ξæ:­ kž›Måkûâ˩ʅcŗĨũ„žĄĢü)fų¨Ž†ŽrЧô–kĶŖ&Đqs‰°Bo=* 3Z—Ž/”5Ø´8ÎņēĀr ģ[ƒwTQđ\Ą]¸ÁÕWˆv)ŲÂmhž”!Ę= AũFÔūí‰Æˇ4!Ĩē SĢ yĪ5ÔŸ(Šm*ēPĐAë§Úđuøí|Kš€ŗWVų e¯×ŗåpC‘|ŧ\NēęŌŧéRŕøÚPæmČf6čŽJw,æąÔu衇ú/ô­\öymÜûIENDŽB`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment531Ÿŋ(IDATH‰íŌąnà `"éØĄŅ%C%^+SŽŅGąĢŒ~, ʂ%ä+āĨĮ[§ší÷‡Íq>‚;KŋS{Ęv•ÚėÁ´Ģ*W™kĢē˙Ξæ:­ kž›Måkûâ˩ʅcŗĨũ„žĄĢü)fų¨Ž†ŽrЧô–kĶŖ&Đqs‰°Bo=* 3Z—Ž/”5Ø´8ÎņēĀr ģ[ƒwTQđ\Ą]¸ÁÕWˆv)ŲÂmhž”!Ę= AũFÔūí‰Æˇ4!Ĩē SĢ yĪ5ÔŸ(Šm*ēPĐAë§Úđuøí|Kš€ŗWVų e¯×ŗåpC‘|ŧ\NēęŌŧéRŕøÚPæmČf6čŽJw,æąÔu衇ú/ô­\öymÜûIENDŽB`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment538zC9 IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment532š–Đ IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment539 D 2IDATH‰íŌ=nƒ0`G ŪJÉ×čÕįęR“‰‘#p”&b`ä1dŒQ†ē’åˇ6”Á†˛t,zy„ũų‡`Ŗ2ōį-eŲ–ĻCđĄßÔ:Ôâ( ĩÔ¤Ģ*ĻŦ›P›Š>å!֛Û­Š…“˜ƒĪyéę 2ŅŖĻ‘-$ĻŪ|f‘–-j)t_ãô,T^ PĐ{5"ÖLáÚī¨žW6Ģ(-wĸŽ\T6R|X7k…ÜīpˇPnDįŽ&Kī€4¯ĄÚYy딐XĩĶ8U$‰U9Ĩîi}ĶbŠWKmŠr\RŦqļÔ;_ÕL¸ŗN+ˇTĻšf>ßb ęh~×°vŨu×]˙…~Lãõ@;@ĨIENDŽB`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment533í‘ā“2IDATH‰íŌ=nƒ0`G ŪJÉ×čÕįęR“‰‘#p”&b`ä1dŒQ†ē’åˇ6”Á†˛t,zy„ũų‡`Ŗ2ōį-eŲ–ĻCđĄßÔ:Ôâ( ĩÔ¤Ģ*ĻŦ›P›Š>å!֛Û­Š…“˜ƒĪyéę 2ŅŖĻ‘-$ĻŪ|f‘–-j)t_ãô,T^ PĐ{5"ÖLáÚī¨žW6Ģ(-wĸŽ\T6R|X7k…ÜīpˇPnDįŽ&Kī€4¯ĄÚYy딐XĩĶ8U$‰U9Ĩîi}ĶbŠWKmŠr\RŦqļÔ;_ÕL¸ŗN+ˇTĻšf>ßb ęh~×°vŨu×]˙…~Lãõ@;@ĨIENDŽB`‚ pix[181]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment536ûÅIDAT•MÎ1ĒÂ@āy¤Ø-„mS{ ‹`Že!YAx)=‚WIHĄˇpƒ˜r„u˙7›(ŧŋúøf†°ä-_HCMņÃŠ īČ*RkōFQ%oō–(:Ejˆf|đDV­6€“N‡Û‚ › āš ‚´ ĄiD\ņëXvtc\ §šŽ=gK ģ#úŖ_ĐQņÁOŒŅfE{^0§ĐK°dÆ.Šāœ;—÷5ƒģĪMM'‡!ĀAHOižōꝴa6IENDŽB`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment537ęü$ŠõIDATH‰íŌ-nÃ0`3ŗš°hžBPÉWŲ6>åš ˆŠ {”Ĩ ÜŌX~}NՂę=ŗi$~ŌûWX ¯ūC[YÛßŦdõ&m]Ec´˛Ú* áۈÚchd=“Ę™ëzDŦuE*Ī{øŠŠí1ʛ$Ā+sŊręēŦ(ŗNaĘ{ęY{OšėĒUŠÕŗöĒ‹nĒēûd,ËžížMv @úūÁ%Nvš‹ē™Ģmˇ(đęîŠVÁĖŲ,ĘøSGdúØrßļüÁkäÆÅ@ėYÅĻ@סšÕ%h^ÍÕ}(œų™î*ÉĒĢŽēęč ĩ°øŒė˙ ŪIENDŽB`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment540;Ų'îĶIDATH‰íĶ1Â0 ĐH2öš@ GBb'•:tä= zRqt+’Š1{žGÄ/ždŲąmX‰ÎüŠ&ËÄt:YŪB^‘ļĸKF™gŅPVōĸķTâĢj ŊŽä NĒvĄAúŲKmYĮ÷3Öûŧį+TŽŦéōÎ83//U×,ũB}&kŽ“ąüÕî4Ĩ6Ļ“í7¤ŗL͗\¯ėšA4f ~āä—Ę5ûV–6/Fú=:6ÍÖí‚čn&y,@•¨Zĩj՟ęÖnųŊQĪ×"IENDŽB`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDR;qcˆ> pHYsb&2 tEXtComment541LŪx›IDAT•mĐ= 1āYR¤ĖâM<‹ˇØ"¨ÂKY,Xx R¤tʀ‹ĪÉĪ ‚S}ĘIzvā3Je\įÅö´ÚMɁØfÍeRī´j %bĮ!‹ą?JΚäØ0Ē‹Ŗ^ā_‡:ķ¯ÂIENDŽB`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment549BŸJāIDATH‰íĶAŠÃ `]æÃËMŧĘ`Žú.r­”¤–9ĀØÉßįĀėüŗ,]Dpã§>Ņ_‡6šë¯õÂtę‘43uUīTQ×ĮŽfϊÅTÛú‰Ē…¨ØL}[}ÕĀ´ĢĨCnëfƒ!K[?Ä&ŦLĨßŦ‰¨?•AšÎyĐS;īŠ „5SŊE”‘ÜÂOT°ģB¸p->,ĸYLO /˜ū4R-9ą´““¤f’ĒīëZ’Øt–ÍŖĮâŅât›äAtël‚€ũ”ĢíŽT˙ÛĄ‡zčéƆûYëqRIENDŽB`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment550"¯´IDAT•mĐą Â0Г"áooB6KPH™X%‘‹”X)h(Œh‚düšs@āę5ū÷īë‹ôæŸĄS‚)!” aG^Ą3ˆ ƒŠ1§ģ|^°Ĩ”âąYqûâH‹Áĩr¨É7[s‡ž13Ŧāâqžœ7*¸ûÔĐøR;IV ëxz&jŠÚzn¨\0vąhät˛@Ɯ0&ō^Ĩ4¯ŧ^åésŸ%ĖĢëg{IENDŽB`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDR< f“&? pHYsb&2 tEXtComment551UÅ&9­IDAT•MĐ1Â0 PŖ {„\ĀÅ*R)ˇh¯Ō(#G XÍD$Ē~ė”Hdzúą;„z>LØü ČLÜûl00eŦ¤@6E UŲjÂŲiÍ{Cą÷™%ix6$€b°˜mÅ)(ˆpK5!ÜŖ"˛,ŠP<*ŽåŒŦ˜ĐūĐÍ SNö‡ŪÆũĒīâŪįâę[‰7tæ¸ĀY G’}GˇĘ4,ãyMVų đĆģ{‡ĩ)IENDŽB`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment555R¨â IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘŽĘŽĘbYy+QÅõĀÅIENDŽB`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment556ËĄŗš9"{ú×(IENDŽB`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment557ŧσ 0IDATH‰cø40ŒĘŽĘŽĘŽĘŽĘŽĘ’,ûŋŦ=>Ų4sÕ “ĩŠ{‡,|´O}§œm}IENDŽB`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment558,žFIDATH‰cø`˙'h`Ā/ûŋl=˛”ØK;W ”Ŧ=˛´sÕā”ĩĮ'K ĩķã•eĮk/^YÜrŖ˛Ŗ˛Ŗ˛Ŗ˛Ŗ˛ĘaĨ>ryÜIENDŽB`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment559[Ž bIDATH‰íĶ=Ā €QˆCG/ÔŖ9ô&=‹ˇr0P“î_—`}!üqˆKūמPÕ3ęuÕhÅÜ/…ކú–z“6œˆĩŖīj•Îģū"5ęY ü‚ÉФôĐĐĐЍôāË*¨öœž…IENDŽB`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment560 īElwIDATH‰cø40P$û/¯,ûŸúvܲĖė™qۋ_ļ¯lûŧ˛ė›ņČb—hŲxeTāķī |˛đĘ gÜņ;`˛ėÃMöķ;Üąđ‡ų€ Ž| Ö{€ˇė˙˙ė?ā‘Å FeGeGeGeé* ˜Í/ĸŽ ‹IENDŽB`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment561~čuú€IDATH‰íŌ1 €0 ЊCĮÜĀ^ĶIôfŠŠ7čXĄ$ę*ū VDĄY$!?F”ęÍ#°›‘& ‰&¤L>Ņp[™ā\ĄĀîĖ´Š(zÆ×4t5ÖÁ7ŠöēU•;į(Î(ˇķuš}t|{…4Úąĩ)ĶŽ‚ôĸŠ-Zô7ēŠŖ Κ3syIENDŽB`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment562įá$@šIDATH‰íĶ;ƒ0 `CÆ!AäheāX 10öåéÖÕM`å˙+ĩĒÚ!^?Ų˛ü(„D_|O׎i°3Ņģq¨gjĒŖnæGĘģjë J¨M*°Š#WcĩŽ:éŧ0Ė]úBõJTVķJ‡‘Uö–Šë˜Nījė ũC稍į˜>E; XU/7¨"Ž*ŽŦYŗfũ#}›?nĢIENDŽB`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment563æÖxIDATH‰íÔą €0Đ/–!ŖÄÍ XXēRŦ,]!Á´KüNđ¯0  ˙ÚĮUG âém=ĄÆ šū§ĨõNÖLdŸjéhžLD›M‚ē#V¤#ÔjؐÆĒEzThv˛öPÉåAֆ PæÂ_<ƒĒĒĒǍ7ŗĀ5QãH‰Á–Ņ)éķ…Đá”č!’î"Õ°•Ķ kēvķ bĄ€b˜ĪDv 9b~ĩ§­šĪ.ž˛…P1ĩYDĶšS}QwVRü™'9ífÔÚíũ~ĘSu†ķė­ŅŽ_’7ŪTækĄ>&nĀĖ,•Ķ‹žĐî¤Ū}5E­ŋˇõJåWņ3ē>„ęŌíˇí$_;Ŗzé>%tŌJ3Ōŧč-2ÃkëkibŸ´Ę8ȤŊ[Ķ€U8" ™ŖCXusĸT?<Ķŗë jč‘6%Į’ÃûŋØÚčÛAͨ$M)”ÉHw¤`ļ5™SN™Œ•‡ąĘ(×9Žr>ô7]Ļ#m}ŊĢk\A~ŸS&ŋîõkĪh|ØĒSĩ›BNÅ^žžuF; ž(X]Š=Džę(}4QËEč¸U°ČÎkŊĸ#ęŒÖ8“gTRĮĄ˛aŅAÕëŋ7Ąg=B Y{”érn%ũ{sÚyųbWą¯ník]čÍG­˙ũ ‹gÎÕV¤IENDŽB`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment566āŒāY…IDATH‰]ÕAoÛ6ā's0] {rĐLûîÍŒ0?Åûvq/TÚî€ažö0ÔEAš í5‡ma—Ŋ2ë!4@éí=ĘJ”č`ÁúDō‘||āk < Ąˆĸ¨´ģÖĐ^“)+€ŋā{‰´wZė5 |[œJūŪâķũK0ž~…;Ģ€ô}ûpÖ)ˆŸš—‘ŠŊÎ÷Ļ@ GG#uĶęļėĢDԃw#õ™u&°„ūeHŸ]åŠ{žÎŗžŌŦŽ)ŽėjNęčÕ,’ŠũÅ žâûÛcå^(ė-ĪNT­Z”iÕۚĩõ+áí.ôũŠiC‹fW“:ÄØĶIĢ›æÛ]đĮjø(æ˙d/vžĐ2Š|ĸՉؚį*ĒEĢ“ģ äûV׎ËQŌb!.Ü*Ī*ö˜•p”Ô8šqbĢ\ŧģ× -^R§“ĸúŧy"Z‡^J'ņ â—G:ŌŋAvŊZ{…a4īĢ[—æo€ā—ēRˆá Û#V|Úŧ6´\ ĖrjÚŦú;˜Ũtz”/Šé úúŨyĢ˙ņv忐ņ¸“V_•ōĩų@:$u‚˛éŲ?Đę”ĸĄÍQ.čXz”Oe…ARNdŨ¤`éÍņË?:Ĩ„>áoø<Š ieš—5…PŌŅ‚™Oc‹¤ąĘw_(æ ImbjĚ5Íišĩm§ww÷™3Îŋ“ĨvQZR‹ūŌt:%o ŦDšĸF'R?Ŧ)õ.q#Ē@K†O”zWIiÚ+<ęk€Ņ`×ĸ\ęKœiũ°ƒasRŲjaŖÁ{͂Ķd¤€Ĩ 0ĩ}PđĢņaîL#ŨPXN%ÚūI cМ ō^+Ŧf”ė7uO Ģ“šÜ`uĘx öj×Ō¯č€žŖãįVĪĒĢV+é V)tRwÆqŅ Ö*ƒĒ9°nZ=aĨm.Ŧˇ˔‚Ž…|“bļŽŌŖŌÍØf”Ļ{÷m”:ĢEÁÅb¯Ÿ#Ģ×SģS-"kÖęõLĨ–ŽŠãaĨe]*h5Fš´M(ĮŖ/ĮĒĻ"5„ Â^9ā!+–ŗąÚQ[.vĘQ NҊÔ×^UĘ/˞jQŌ‰uķ|ŧĀJũ+›Y§|™§Š3ÎiĩD3;GTÚTX3Z*„æh‡ŧ–­ō‹´fģ4]3jžŠzφTôĄ0Û (dJ§jꌒÖnŊ é’ôn¯\aΐuSŠP¸AnzĘ=ÄjXũ"@nļIuɇ;íįmˆfS*˙}„\'ĒYĨXĩ˙Ąņ#åļô?ÚmiümÚnņŦÕAŌ¨Ō éËJĢĸqyuĒí•Wtnŧ-›Wü˙ Y;_•´’Q’ūâYņÚŲuŌmęš‘CëôÂīÛŌ2@A÷hY]ÍmŽßŅéœkͤæ°ÎÎSp[e§+ū/l¤qĪĪwœJ6ĒÕČm4eŖē@Õå$ÉSū„jo.Ī‘ÎĐĨôVâu—“œTŧARC•ÅŅæF•ļŸöah°ĸīMPĸŌ×hË˙cž\ÃĸhIENDŽB`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment570ôt-LIDATH‰ŨÕ;rƒ0PORPú*Rä:W*1“"ĨŖÄ>†CR¸4Šˆ1bƒ ín>ž4Q<ŧŲČ+€3ģ °‘¯N ‹šÔwĐĩå5¯ŒēhJŗ~n ŊQnĻēĘg}ūŽ™ôvīf˙ŧ%QˇŽĄŠe1ËjĒdUE¯éRˆëÆiÛ5§ņ`U"=ĪUä¸VAĀôĢî2ßazŽHŌ^5ÛUåßz¸æyí7õƒü:vŽĢĀ}‹?éęˇj1}IbĪŦöCQu7aĨDŸ}N\Éíë?‹ĢGĩn‰/Cũq4ŖwÜ-uĘ\:MĘå{ÖNĶ֕_+míÜ9xĸõĀŠ<4°'5Όz"u+FßTû°!õŖ;=qŪ üåoŪį˙Ģę •č}Ëj)9-¸ēíũ hhŗfUÚub$§Ĩī&˙qķ$Ãbø5IENDŽB`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáKŽOŨ_ pHYsb&2 tEXtComment571gķDģģIDATH‰åÔ1Â0 ĐH Gā0å(ÅŊWac¤ŽZlH$Žä/”PОŧú;m“õĮ­@/ Š“‘Ļ}Ž%t"¤ŧXßuęj÷{?ÔũûÍZųžÚ¤õô.$H#VœĘ\§cƒęßęu5̍Ķ7Éõ7ŋvPÉĶ|=Kô”)?áĒ"Í–ŨäŌ;¯´WT†:ečæArNFļ8˜ZŲ•™îȰÕ÷N{5.ú å0Ii>IENDŽB`‚leptonica-1.86.0/prog/recog/sets/train01.pa000066400000000000000000000160371506303110300204070ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 32 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment0¯ķŊĒ`IDAT™mÎģ €0 „áŗ((ŲF ›áŅn”Œ@IÉøD„Ņ|•?&âĀHėĸbHf#XÄæīŦđāÜX/j?ø—Üđ-¯đ"ŋÕĩ˜úLĨŲ×TX’œFDđY¯Rvwu IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR )|‘ pHYsb&2 tEXtComment0¯ķŊĒiIDAT™eÎą Â0Dágš Ã  d¯Âl`–M’Rψ8ūs „8é}õ!Š8É⠉ô›y”Ô ˇeP/¸ØūŅ—e6“y˜ģɆ ˙ĐÕLŒ%“y™Ũæ„[īÅhÕØP>ąsSIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment0¯ķŊĒ_IDAT™•ÎĄ€0ƒáÃ{l@G)›ĩŖ…M:Å‘ģ °˜O&?nŦÄ…Ų™ˆƒEKpĒČu3EĩĶđũ‚/Ú J ¨#3;›ˇ,^Õûĸ4ša(âЌ™ņ¯P~(ōrIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR)ččŋc pHYsb&2 tEXtComment0¯ķŊĒgIDAT™}Î1 €0 …á'ŽŊ€ĐŖôh}Ū,āEēšV\„úBApĐå[B’‰hą‘8;Q#D"Q’‰l€åōĸ ū@ ŗ?NŖĻŸlÔųÕYüšZĘėAžV{ßäšÁÃŖ°,´{äQ[å ‹G IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR(#´lÆ pHYsb&2 tEXtComment0¯ķŊĒ]IDAT™•ÎĄ €@DŅA é!Ą3nčėJĄä ²  ķÜL>Æ :ąĶŠÆéuJN^DÉrŦŊžHĀ„˙)Ny(G0GÁ\UAŌz7OÂblf:ĩLkíđKôIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment1Øô<6IDAT™cø˙đÃ˙Æ ˙1âf@ā@üŸ†ø CĐ& FûĀ6†˙˙˙×kF'3ŲÁ2IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR)*Ô] pHYsb&2 tEXtComment1Øô< fb€ ū€‰á˙˙{´CÜũY‰IENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment1Øô<EIDAT™}ĖŅ Ā ĐЏŽ}¤›Ũ(ŽāÅŠ?öāABā P šũ5qíĖ­-Ά?üŸĶ āÂ8Z:̚Z6PJ‹R:õIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR'#酞 pHYsb&2 tEXtComment1Øô<5IDAT™cø˙ †áC ƆHøÃ†@üŋLĖ@71:hN`aø˙GFķ×3S+IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment1Øô<4IDAT™cøĪü‡á71#7ņ ˙?)˜‘nDà î1Č0 ƒæ, ˙˙˙ŒįB?ˇ.Ũ5IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR'Ė+î  pHYsb&2 tEXtComment1Øô<:IDAT™Įą ÁÕžåKŗK06øķA#ÁƒáXd•AĨ‡vžãČø6%&÷ŒŒŧ ų D}ÜčʑIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment1Øô<IIDAT™cø˙ā˙†˙@Cũ† ĸ•‹ũ˙@Ä’‰ü„=œĀûĀĀrČ- HÄ(q€áû˙ķ@Å˙˙mGd–u~…ŲIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR('Aŧû pHYsb&2 tEXtComment2Aũ܆uIDAT™uÎÁ …0„á?(x´„g'ļb'Iiû:ŲrTŦÁƒ{ø›e&8;lԎẦ­Ęjŋá÷Ļī,ëäP  ČMš%qbŸœ¨ŗ0]GÉŅRgŠBTī“°QPšÚ>f鯛*˙ʋ𠕸@gŦgũIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR%tÄ pHYsb&2 tEXtComment2Aũ܆oIDAT™UÎģ Ã0 EŅkKāQ”ÍŦ.kq R…@æQE€< đCpÎiĖdp=3ĢŖ=a˙ė^ŨŒ¤e7ŨE8FŦVÅŧÄ(ĸWahš#9…_b‡YŒ[ô:Ā^í‡JŨĐ_gÕNę%LãIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment2Aũ܆tIDAT™MÎË Ä0 Đ1>ä˜3Ģ4•ĸ{ņÁd2N Dˆũ0ą9Õ(‡Ōģ°n FoCô•ļđĩŅđ?5ÁySÚĮĄÍĖ]Ä!4‚ŽŗˆYÅØDîČßâH_X5O´°õ.IŋÔVKåįÄĩįIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR)ėo^ pHYsb&2 tEXtComment36úė{IDAT™=ÎÁ Ã0 …áWrč1Į\ ņ&YÅ›ØŖ :H߁^VŸâ¤`>Ŧƒ~ĮLx+‚xz6‹å?I0ÁZ4î.ŧSķÅ ĩ•Ŋ†)(„žÂy’ī5ĨŪņĢnNJ'Ũ(Z‹zöRĪâRösņQ=,uū¯Z0đ„ídIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR('Aŧû pHYsb&2 tEXtComment36úėvIDAT™MÎ1Â0ĀE”´ŠĀ?ņWō“ÜĶî)Į"ŅP /ģ$ 4cÉ>ī^¸ gs*$tæŨôœÚFõjXAę ŖaNb8`8ęCw6åáī_ņdibø#wĸ‡zohŪjVXŨņöÎW…>čdÖRU^ąâNĘIENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment4¨žyŗ\IDAT™]Íą € „á3X8‚ŖX8–…ŖŊQ’‚đŧ‹D¯øĘûá ŪàMj‘…‰4é“&ęJĘ&v’bˇh$]ŧįNüæET¨F÷ -’pˇSnOO$ŠIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR&ž ļ pHYsb&2 tEXtComment4¨žyŗWIDAT™UÎą €@PŒÅ•įŽáh–¸Ŗ0å‘oŅōŠ_äsgōQĐB ”Ü`cG`gĸØ'Å5z`)ōō c\>č‰Ŧ¸ļúƒÎNÃG^1âŊIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR)á pHYsb&2 tEXtComment4¨žyŗbIDAT™UÎĄ Ā0 @W -ëÍĐŖvŒŽhÕõ[i¤œūĨ&뗒éJ ˛ķ¨Ȅōāt ArÚųķĀN ԑļ)ų1(+LRvür$Œč 0Ё`gĻČXúJŗIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR'ŌâŪ pHYsb&2 tEXtComment5ߙI%`IDAT™uÎą €PĐ3–Žā"FG7ĶĘ1ü‰ 8€ ŪQühaķB Žd}҈–ØA"~Ā,zŅÕ5ø( Ŧ9†MœÁV|ŲÅ"Xₘ2Ēū"ŠŽ]ˇƒo<˜I>‹vŽNIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment5ߙI%hIDAT™mÍÁ € …ág<¸„‰ŖČH`nV6ҏGNÖW †ƒ—/ihAœטíÕĢāü!Ą°pÄdŒÄ ‚˜yr)+ˇ­HĪa #(ÂÎTØ•š_^¸ÁĪ•™ÚTXNP9IENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR'4ËW pHYsb&2 tEXtComment5ߙI%pIDAT™mÍšÃ0 DŅīQāPŦ@l°%u –†Rā2Đ< 8yŽ]ŪиĄ$ü0s6wmĖęözō4Œ-áˉĒ]vIÁ\ ž ˆŖW"W0zlņ1ęhA¤HæI&+UtgĨSsûĒĒLĻ[^3IENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR('Aŧû pHYsb&2 tEXtComment6FŸoIDAT™]ÍąÃ0 CQäT¤ôŌŪ@Ģhs4Ž‚\ēđ…&Ø$¯âá#؈0$ÅÕlā|û7_`'á3~ąbī šxyÅØrS,đ}™‰ëš`7ÅsŠÚ;ĩ|ŠqĢ…g<"øh2F]j=IENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR('Aŧû pHYsb&2 tEXtComment6FŸsIDAT™eÎą ƒP Ћ((3Âg“Ī( é{4ŗÉ2Â9›‰æI–ėķ!|&/⊠Gō›Åˇ%Ũ6°īGžXņb} L2™‚ ¸hļŨ5Œ‚ė†V,—Ŋų"tËĒQ…2ų¸šVgũ ī"‚ EqhŊŌIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment71—( ZIDAT™uËą € „á#”Žā(˛8+Ũ(Œ@iAŪķĄb4Ņ+žâ’Č Â–ž„‹˜§ 1¨ëČ@xņF5Ö:ēŨ”Š“įĸ‘ŪØ{"Ô?ÄĩL•;;[XˇwŊIENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR*ˆU‰ pHYsb&2 tEXtComment8Ą(5˜zIDAT™EÎÁ Ä Āō¸ß‘hh)ÄĨšJđ“Gn7 „F›ĩ1ėx°:ļ@€'’hÕÉՊ8&ŽĢW'ŲXH Ā)ôw[)/ˇŪēĒ }ûđŲXurą´čT ’52ą¯­€˛ö›3vÍāöÃ2cōõ¯Obŗ˙ĸfIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment8Ą(5˜pIDAT™MÎą Ã0 DŅo$pĘ,`@ŖX›IŖ]6ņ.S`Žra5O€HŽā%~<ÄÉ"0+•nš*Ŋ‰™ŨPēy{ÕuœeĀ91ūrvŗåģ'-ÂQK3܌•âŗūL2OWI×ũ^ŋˆc"Bž;q@ÂIENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment9Ö/iIDAT™UÎą €0@GĐ1‹Pd2ōŖy”Œ@‰ây‡4)ri^ļņ`%.ĖDÅDp{"Ŧ@o0ԑ¸čXPÄO?ØÉŅœÂ“ŠrÅ߂âī=D›†Vi$5ˇbĶæBŧ):=b>dŲHōšÃūRIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR('Aŧû pHYsb&2 tEXtComment9Ö/wIDAT™UÎą …0 EŅ‹((ŲØ„U2$3âRR Ė3Í)Ž'ļ7Ģs2;ÉqFą ŽíMTŅĒZÂ6á_:u$ģ-*éųĻE:7‡žũTˆøŖQ/WՎs}nEP˛7ķ ™tL”ô š)Ô÷ˇJP˙ģ–W°IENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment9Ö/oIDAT™eÎ;„0 ЉRĐą-7Yrŗ 7›Ŗø”[ ˜1ŋš§ą%˃#ąāsbč~3Q["ā"yŊáƒōĻBg¸P Mc˛āšeew+‚;ĢŲŅTWLDƒĮ™s§ŒOCYĀ„ IENDŽB`‚leptonica-1.86.0/prog/recog/sets/train02.pa000066400000000000000000000622751506303110300204150ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 124 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment0¯ķŊĒLIDAT™UÍą €0 DŅO"Q2BFÉd(Ęh… ˛qLA(^wú‡Ą 7…‹ÃíAHČét}ਨߎOā>[Ū–č—øT,ëÎ#KÔiãIIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒMIDAT™mÍą €0 Á\%cĨ¤E,6ņ)]XRPP\ųzÆbx2ŒNAkĄŲĘé™cJÎ/“eÄĸ {‡Ļ—>îO<Å.$'ؐEĢIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment0¯ķŊĒJIDAT™}Íą Ā ÁGĸô"d46#›„ (SX)RĒWž Ŗ08ˇĨ!´"T ™ôr~Õ0CæúčS讌C÷ņ§-~ˇ)ęžRåÅIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment0¯ķŊĒUIDAT™]Íą €0 ŅŗR¤ôFbÄfa“Œ@™Âr0 Dņ:û&ƒƒ5L4 mVĒ)ģe6KA.HĀyÉĪuķI÷í™ēhlk4 =:=—q)ã)x˛ąd$IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment0¯ķŊĒOIDAT™cøßūáã?† \Į𠆏áĀ6†ÃPÜū„™Ā˜ų&ū‡ĀŒ0 oc&†ƒ?€øÃæÚ!Äv`ģ~0üĐ(+ôo ĒIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRœĶû pHYsb&2 tEXtComment0¯ķŊĒGIDAT™cøĮø‡áƒ `ax Ä5< ūą04qã?8f„b$6.Ėđ¤Ÿˆe€fÍš˙€ĄhĮ†?Œ –'õWĨIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøßøƒáà Ŧ`øĀ`ÁđŒ%(H0üÁÁĐü™10 ‘g˙#ÁĐŇX0ÚņlOÃF Ŋü?¯û*ˇ=Ú ßIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment0¯ķŊĒLIDAT™cøĮøƒáà Ŧ`øĀ`Áđ€A‚áĀ †Æ? Í˙8˜aø^ĖÆ uP Ö#ÁĐćX0øP4hĐžĖ?&(l bIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒTIDAT™cøĪø‡?0Ô0<`°axP Ãpđ‡ Ãá?2 Í`ĖÃĀ Æ,X03Â1 ã? ĒáF nøÁÃpā3ȀÍŲķd#PÃ?æ?Ú*ū‘\ĒMIENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment0¯ķŊĒSIDAT™mÍą€ DŅī@h WŠEY€‰Ce@„7‡‘Á w?Ŗ*ĘEwƒv E…jBļŨEōˆ¤„ÉūĨ%rģĮ÷Ķü*ÍŋWĮ{›2‚žÛU0ĪR{:nIENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒEIDAT™cøĪđ„?30‘ô@‚áC40ņņ‘ũķ5IENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<&IDAT™cøPÃp†R°ax F6`$ƒahāa@Ķ[éJE÷ĒIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR `ŨSi pHYsb&2 tEXtComment1Øô<)IDAT™cx`Āp@€ĄŒ€ƒÃTô0`h#8xPČĪQؙTIENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR‹ęčj pHYsb&2 tEXtComment1Øô<&IDAT™cxĀĮDŒ`ˆƒaï(Äqī]l0*F!‘Æ-Ē´Č*‡xKxí /rĘ.“ã‘TCÍnū\yŅ>öī Įā-äŞ&IENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRYēâ2 pHYsb&2 tEXtComment2Aũ܆KIDAT™=Ėą € áŗ˛dFŅ0Žås#Ëŋ ā3&_yG$ĄU´ÅX˛Ü^•ĸĘiķ§ĪfģæĮČĸ~ŨîƒjĐmú3/=~,ßÁl:øIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment2Aũ܆RIDAT™eĖ1 €0Dá—00V8ÁJĨ4逭ŋANåĘĘđ%ˇÜCŗˆID-™™E™íGô!ŦŲaÕüīI|* ĘRįIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRUãH pHYsb&2 tEXtComment2Aũ܆ZIDAT™5Ėą€ DŅĪRĨhgŲÖu` įØ!ãy cđ‚ ö3‚Ą lŽ,’ ’ˆē$¤9ÜéÛ4cR°Vũ=¯ˇ7t¯¨“߸$rĪo/1A%ŲsũÍ4IENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment2Aũ܆XIDAT™MĖą €0…á…+3BFŅUœ$X¸VĀŪŽŗMiOP°ø~xÍŖÎ‹F!aLdĸ (‹0Ú'üDVKôėôĩtü Ē+.ŋôáQ{N‹7ÂÔ%ĸabIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR}$ZŠ pHYsb&2 tEXtComment2Aũ܆PIDAT™MĖ1 €0áK€„Ö V*Ĩ°T€‡ƒ˛1~Läō­GÄ[ŖPmŽÖ 铙” •‹­ļŲhIܓ¸ė$ĶÁG8*„ąë'Ū.¯Ŗ ĪIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment36úėPIDAT™MĖą Ā CŅ(ŽĖJŒÆYÉ]Ö¸l@™*`% œNgË }‚bU”KħŊ!˙†ķt/ŨL×nssX|ĄFíú7­{WĄ7ü%:ÚVIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRĢ}š´ pHYsb&2 tEXtComment36úėLIDAT™cøĀ ĀđŠ€qüđ€áņį ˙ņq f~Āđˆr€ęū˙aÜÄėH˜ųƒã†°™0?ã—+éXė'™IENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėVIDAT™eĖą € „áßhbÉŽÂhlāŦr‰k0tFŧ‚ÎâËŊâî!"éG”KŒb§eņâą{͝V#ŊÂh“īlÁö™A‘āî6&oë*úĐ[s+ļOŒNWIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėRIDAT™UĖą €0CŅĨ ŊŅ‰‚ĩŽcŒā2]0( œ,ëΌ!iĮĪ>‰,ĸ×ÉYîåh ē`Lˇ]vZ}5(Ū‰o7ũÛ=‡’'´Ŋ8?IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment36úėUIDAT™MĖą €0DŅ/Y Ŗd7r„tްȂ…í•ÄxŠ…Åkî¸C]Ŧqĸđ'Ę`ŖX6Q­W›Íųåž‘âëhĐ'ė^‘Đ>Jd˙fīÖ 1¤×¯€xIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėXIDAT™-Ėą €0CŅ)YáFË(‘((Y)kxŌ"Ą„ƒ¤x˛t˛: aä!ũĸÛ$Î]\‡h̍A<~+ôĸQ ÜŽ}^ad„lā˙:‘|¯ åą(OžW˙IENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment36úėVIDAT™5Ėą€ DŅīJļ@i”@f[ĖŌvp!‘¸Ŗŧdo÷hĘ/%‘c?>õ4FoÜĘģîĻnKpŒŠÃ*~˛đrAŅļ8í7{Ŧ)Žø¨›•IENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėUIDAT™=Ėą €0CŅR0Ģ0]ĘŦäŽ5‚X éR ‚#ÅĶŨé,“Y‘m?ŊO‘vŅŖ%qqų×Ŧ8[ TëC6Aôœ}‡Áûd8Ë×-w´EŽI*øÉžųIENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment36úėJIDAT™cxĀØĀ€A|f fo`čīo`øÂō €øPėPîPŨà ø?3Ā1?€Ō@ĖTËÄM@są7L&s5:qIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment36úėYIDAT™cx`˙ƒáƒÃ$,Æ @üƒĄ™ņÃyæ ˙€ô†  z †@ų ˙0Āņq nbæpĖøƒĄÁdžP_PĐæä§'k EÄ´IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment36úėYIDAT™=ĖĄ €0Dá—TĐ:Á`•$ŦATv…ŽPy‚P~*Čå3'•Āįø-&rm"ŸĸdŅw3'd höHžūƒŌ g&û†HuŨj´FîŽōÜ/?Ėö+wIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment36úėWIDAT™=Ėą € „áŸPPēŖ1 ÆXÉÄEÎ Hl,ŒxบwwQ •<•IDZÅrˆļ‰ÅkŗÛš*sõĖčüš%ߒŗ8…Ŋ€Õ?õ %(ĐŠ™6IENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment36úėYIDAT™5Í1 €0 …áŋ¸ttėQz´Œ…^KčE/ ¸d(ćčđō /•ƒĖ’?EĒ8ãvÎpbHeĶ,øšqƒéŋ ›tIÚĶMíí4ũŌũâk,ŸüņOéIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úėPIDAT™-Ėą€ ƒáŸŖ°eWp4F`4Fa„tRxb‹¯x—ŧĐO!2´Ôå˛LqR§ nöú~œu÷[†Ąí°8ĩ_…P’ˇöfķ‡ĸ>ss&øj]ĐnIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment36úėSIDAT™MĖĄ€0ƒáp5QpŦUY×ĩęŦđØ ō Žō_‹@|"—\ÔU?yXą!Á‡\:ōMߨ{kŌ…ūsĸ˜,N•Ī<ëâ˛Ũ_ Z'†žĮ5ûIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗPIDAT™cøĮ Įđá˙``b í Įđã€Ç;† ø!?FÂĮ đy îPĮĐ€‰øĀ`Įđ(˙˙˙˛˙ÕBÎ. ËxĒIENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗGIDAT™cøÃPÃÃ?lĀøƒ°axÄÔĀņc > ÂjŽq;ųũ@ĖTËĪ Ã€°0ü< Ãđ?°ÍV./Š:”IENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR!ëyV0 pHYsb&2 tEXtComment4¨žyŗ[IDAT™UĘą €0 DŅ‹R¤Ė…UØ:JV˛DÁF,ā’"ÂØ†“ž~s0`pw„öšœ:a„pē-đÛ]jˇHÁ*Ų›Pūã1ÁüĶ8ÃÂ\ŧĻôˇ?+Mø6fôIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žyŗLIDAT™cøĮđ‡áC ´AÁ?@Ø‚?€āPüˆņÁnĒmâ6 æblāPüƒ àž˙`¸†á˙ƒ?ˇ™)åäšËÁIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žyŗIIDAT™cøĪ`Īđˆ˙0ČÃņ ūāÄėĄXžá!ķ3<Ō |(wŽåÚ034002`‡€vü?Ä@u d°d˛,:„qįšIENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žyŗHIDAT™cøĪĀĪĮü ˙ øĪū Å??€°<ÃG~ Īđ(öH˙ÁíØÚ024002`ę˙ÕŖāöËú-’Û÷öäIENDŽB`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗIIDAT™cøßđ‡á?C Ã? ūƒ„@ālĀø3ũ„Ô0âãPÜÂ@ņv f`°bdĐĀĀÂđ¨˙?P*ūō¤5ØÎ lIENDŽB`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment4¨žyŗ?IDAT™cøĮPÃđ‡ÁŒ cūđ Ž<°axĮ5 ‡Ą¸†Ô007Ø000°0 ƒ@{ū?@Ãji1SļRčIENDŽB`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR Ņ.Ū pHYsb&2 tEXtComment4¨žyŗBIDAT™cøÃPĮđ‡ÁŽáō‘ņ 7@đÁ†:0nâf(f?Âv Ė L Œ å˙?¨b;ę&Ņ–ˆ…éIENDŽB`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žyŗLIDAT™cø˙ †áƒ €āŸPüņ€ ?a†ĮPüˆõđy>PÃ0†d$  ˆ?4°0€íAĮ€øß ™;ûwP“įIENDŽB`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!ëyV0 pHYsb&2 tEXtComment4¨žyŗFIDAT™cøĀžá?ƒ<Ã?(ūà @œ Īđ øÁ đáö(¸Aˆ˜Lƒø Ė ˙đŖay†˙ę÷~.LžeđIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗMIDAT™cøoSĮđÁŽáƒķ1üPâūđ‚@ņC(>Â`XŽĄČop``h`€`TĀÄĐĀÆđ˙ļâ:†˙˙:.O,KÃˇIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žyŗSIDAT™cø@ŽáÃ>†Pü ˙P€ā Püˆ?đ1r u06ˇšųWyS|P\&MĪsG–IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ߙI%[IDAT™MĖą € Dág,(aW`4FĀÆĩ4ą°táJ ü%_ušGģ…Ä։mÅ/Žös‰ÅļĖ+’S +0›ŊÂišYÍTCįkÄ)2–øũŦk 9=j;1ÚB)DIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%KIDAT™=Ëš Ā ŅA„”`:q+tb$7ļ™ÛØNāsČÁËfp+…ösZ(YnéĮ#ÉwC==´ ¯Ã'})Ë%Y’„ąÍßĸŗ(3ä_IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment5ߙI%UIDAT™MËą Ā DŅQ¤„QØ +ąA((a$Âl☐"–žŽ¸3ÂdÉËaœņ“Ē“Ļ;‹Éį×ŊÛD‘D•Ha“Ām.ã\æwÁū;âûĪŽ)˜’ą IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%RIDAT™=ĖŅ Ā Đ?úŠĐE2šÔŅũčvƒ8AzQiāqp$ÁđЁū*4Ņe¸ŨđøĘÆŽ!îQĮôŌ “ŌvD*ö’yŋ-ÛHˆ)§ęāžIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment5ߙI%[IDAT™-Ėģ €0CŅ‹((&ŒÂ& R˛’%‰ÄŲ˧8’Ÿd?J™€*Ąú×~â(ÖY¤Kėž7w"b)ÆŌ ;í˛!Ã8™s—­ÕŅģį#J§Ĩ*Íā#IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ߙI%NIDAT™-ĖÁ € DŅo`8Ā Äė@\˙€Ąų?ˇ#á š .H`hü ĀĐüCá8ūÆ ˙|y æáĖū!ĄųĐL >?ø(c3b]4üIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%UIDAT™cxĀPĀp`8Ā Á üÚė?0´˙‡ā6 ŋˆę 04qķ†Ã@üŠíXˆų˜Šę@z@æÍøĀ˙ôķ*ū˛|š\IENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸ_IDAT™eĖŊ € áėp]Á t%0ūlæ(Œ@IA>Bcbņu—ŖDOš#ŲŠSŊ!Ljžęlފ´ŗƒ]‰…l1™Fūî¯\Yž*9Âæ úŒ,$䊙4n*5IENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR)ö!Đ pHYsb&2 tEXtComment6FŸ_IDAT™mËą €0Á$BčĀt-Q˜ÎL'”@čĀ:ķO†D0Ō{Ô4Sc 2 ‚Ų(ČŖ¸Ũ$.ˇˆävuŅz‡}É=”–Fü+_Gvíë4iíšp÷+ØęôĐQ6ėÃ~ÁIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR'ČŪ> pHYsb&2 tEXtComment6FŸ_IDAT™]Ėą ƒ0EŅ‹(âŽÖkx4Hq6ƒ*kx—¯°øųXĸ ÅiÖ"VFä$šLŸ…ŅV÷õbbŋ}Eá’]ĸlzp0Oķ­˙ ÃgˆJėĘTÛKØĒˆ,<lo IENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment6FŸ^IDAT™uÍą €0„á_,Ėé\ÃΕ,Ķp1Ũ$#X^ņ0> –ĮÁÁQKĸææ"a âE™Ũ*öÚdīšwžk&rŒ`‘ÎÂĢ7 pHYsb&2 tEXtComment6FŸZIDAT™}ÎĄ €0á#˜:,Ž5ę`Ŧ: ,öؤ#Tū‚P^B|örT%ĒšEœ­8:ĄÁĸĖ"×Įū2ˇ4’;zÚ[øāŸ›zVgSÄŧ•Iīęų¸q>2 l&vIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( CIDAT™c8ĀĀĀĐĀ€$ėĀđ†˙ø0ˇ1;ķCđ?ų ė!øG=Ę}ĒûĀ Á?ØÁ´Ö/ThYĮxIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment71—( QIDAT™cxĀ Āp€Œ äōė0ėPĀđ„|€āƒ@Ü Äėüˆå?0üą‡âú ?@(ū(˙ƒ‚˙ņ?ö¤č2JÆMķˇIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( NIDAT™UĮą €0CQG)ŽL6`Fc˜„Un”Œā2âp”4ī[FārūTĩÂ|GiÁ[bp".I’‰w°é)˛}Ą>ķ’æv ãN™/žōÕEIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR ßŌŠä pHYsb&2 tEXtComment71—( EIDAT™c°ā`€ƒ ˙;ūI úgC €čÃĪ ŸÁčų†ã?Î˙`č˙ÁĐūƒĄņCUĀІ‡?Š%ŅbŖHIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( NIDAT™cxĀ~€ĄÁˆĀä€böū?8Áø07q;æbų ˙@Øūßzūņ˙à ũ(˙‚ņˆzŗŽ3đƒ‰xIIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( GIDAT™ch```a$ø80Č?8°ˆ˙âF(fbvūĮ€á<˙°‡âú €ô ÜvūÂõaŅ.Ū75j…IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( OIDAT™EĘĄ €0@ŅīZ‡ÅŨu]  ‚ĩĘ&áä B9JÄ3?ŸJ¤ĀŲē) ŅDօĻFĢîöáp“qģK\6ėĩ~Ôģ†Ÿ…ū=Âģ6"(,×$IENDŽB`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( DIDAT™ch`@ ĖØĀ °á˙a(>Äí@ĖÁ˙@X‚˙ņ{ Žo`ø¤?ų€ōؑ0?˙Ўo#Å(Đi¯6ĖIENDŽB`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( @IDAT™c8ĀĀĀĐĀ€ øō끸˙C >čPÜ Åė ˙@˜ˆåØžá ų?ØĄ˜ CÔXĸ)PKÎŲļIENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment71—( GIDAT™ch`P`h`@ PœĀ ˙ˆ<Ōūâ‡@|ˆ›˜ˆŲ!ø?˙‘bû ?`Č˙ÁŽŠ˙€ÔË?jk0Į™ō gIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( GIDAT™mËą !ĐĀŋtWq´3#YZČi>|ģ ŧ"`<Qđâ?‰Y:‰íjhĸīgÄr)db^ęĶ‚ļ+øg*-T –ũŪIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( NIDAT™EËÁ € DŅ!8RĨ¸Ĩ‘ØØ&Vbį`ÄeAä%sųčTĀũ—›ērN}8ĖžD“÷×Ģ(¸ûLŒ0‚ôÃŲ> ŋ0îåMâÜIENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment71—( JIDAT™cøØūƒáƒC.đ(÷ŋA‚á˙ļâ ˙313ŗ˙`øĮÄō?ūņōå>0@02‚Å$S/"l#ÖIENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( LIDAT™c8ø˙Cƒcø ūāÃ˙‡@üˆq3ˇ1;ķ`øÄä0üaû 1Pė?Õ€â=ET3ĪgRSIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( EIDAT™ch`<Ā€ ė'`¨˙Á˙?ņC > ÅÍ@ÜÄüüO‚˙Øqũ†˙ĄÄĘ˙`bfūÃÖ‚~4 _¸÷IENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRËĀ^ pHYsb&2 tEXtComment8Ą(5˜VIDAT™cøĪø‡áÆ 6 €¸AA†Ąáķ€q#”>{P`TWĮ õ@ņæ2 Ė?x€˜Š ø #6〠PŊ XĪ ^ l) ÜÃŊ,IENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜RIDAT™cøÃøáƒÃ >   ?¸ņ‡ÃÁ Õ0|àZ°\ķftü‚Ą¸¨ŋlGĐ. ~æŋ(ĀŪķQÕIENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜SIDAT™cøŖđ€áCÆ`ĖĀАÄ@üŠAė0>` T›Å@žPî#3#ąáhã : Ų ;0@Ėø$˙1?€$>o×IENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜QIDAT™cøÁüƒáÆ  ,$€˜ƒĄáC# –ãƒ,€jz€Ä~p04qûv(fFŒ@ÜøjļĐ ]Œ?k)?đįIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8Ą(5˜JIDAT™cøÃøáCÆü€āƒhøÁ°ē@ōT=Hŧų3€13˙@ÅÍ@5@s €ėégūt,ē!˙ėRIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜VIDAT™MÍÁ €0 …á'.!ŖuŨŦâ"!ĮŠú[zōA¯J¯¨ÉaĒBĒųĶM-MQLIĻ“Ŋņ0_ÜO2–iÆN—ši˙ēį?§#^cĒ'Áy´‘IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment8Ą(5˜VIDAT™mÍą €0CŅX °BFˉ„U’M2‚KR`(ŅéuļįڌÂ$…^ ßP­Ų)Leg ún’+Ņa˙ãūén•ˇīņËí]ŦC/ī 0””< /IENDŽB`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8Ą(5˜SIDAT™cøÃüƒáƒÃ æ`8Ä `ĖĀĐ Ä  @(W V÷¤§Ė>đƒƒĄņ3‚đøČL ļÚŌ 4ƒųŊÆ#át`ÁsIENDŽB`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8Ą(5˜NIDAT™-Íą €0 Dҟ 2#d´””Éf°IFpé!|Áœ%ëÎÆéuV.y„TYâ ;Bd˙|ßû;ĖČI‘7gBqS?v×đbfL)Ø ČƒIENDŽB`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment8Ą(5˜KIDAT™c``¨c8Ā ÄlPĖÄĐPÅ? ø”+cx `ĮđƒáéûÁVðcP?CØ.;†Œ˙9ä!˜YīÃļIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRMTrđ pHYsb&2 tEXtComment8Ą(5˜OIDAT™-Ëą €0 DŅo)eFpÁ †A(ĖfŒâRRD G”“^wŸiƒ—Ɓu+Đ ļŨŊéĪâRĶ×BRŲ¯ËÉ^QŖvũ3ĮęĒĒėÄ_"IENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment8Ą(5˜MIDAT™cøĀđƒáCÃ0ļ`8 ÁĐđ„9`ø@(/TkU[æƒÔ11ķ Ė Ä P T Ô ˛ dᯕ~ žČ8ĶIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR(9ˆŒH pHYsb&2 tEXtComment9Ö/bIDAT™…ÎĄ €0„០¨ÃÖąŽ•XŌÅč&ĄōH¯aėSw9žIh•ƒÂJŲ#Y‘¤ĀØŠõäŸ>ŠÂYāß žhÎÔEŦޟŌØ%,;/7˙Rgˇ¸MÜĻ+p>až IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment9Ö/YIDAT™mÎą €0 DŅ‹ˆD“2 ŖQ$b1ŗ‰GpéÂJ8)4H¯ū#'UˆUÜ^Đ)EūØ˙|š¨[FSB†’ĶÔ˛ČĢULöģFÂA@ųc{<+|1^#TbIENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment9Ö/\IDAT™UÎ1€ ĐØ\= GcÔx1ŒÁ0ūáįcĶŧąMa^ ‹ §$ÁŖ—n¸é$×Y& đ~܇SØ+ČT†MZíâTZ–é Í˙Ø*/ąÕ;k>T^IENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment9Ö/^IDAT™uÎĄ Ã0áŗ šÂēFÆé†Ž˛–ŗ‰GøáVÚW|ôt(‰ ĶÖLÕÂĄ™&ļ>ėöėÜĶeˇ- ŧĄō7Ņ,ėŗ-Cŗj%s"zôđ‹CņŌ͒8l8˛ŠIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/TIDAT™…Îą € á36ŒĀ–ŽFŠa1Ü7 |Å ø'bmņĩ—ÃWŖ![ĸĻâ‘KN¯X:ŋ˛œ—Ü jAŨ€Ë°Oœv†‹%F•cŌĮČö=;ü ‹rIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR'#酞 pHYsb&2 tEXtComment9Ö/^IDAT™uÎą € …áŸÄĆÄ(„ĄĀBãbŒÂ”đjl,žę]Ū;Ú,T#…@ƑVK,ûC⏙=;?wą@ō ´šöŧ˛’SĻÛUõ/Ä u‘ *B;•b5<ÃIENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR&čĩV; pHYsb&2 tEXtComment9Ö/bIDAT™mÎĢ €@Ņ!€ „-…Â+ 4] [ÂĘ/<.‰8ÉČÁŖ`$ĸŌX­g;{æGÃ"õĒķͤŧVI@%ցÛįŊÁKĀ퀧ˆO‘SĨŌGmäÖ.ŽB:Ų*´-IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR%pč& pHYsb&2 tEXtComment9Ö/WIDAT™mĖą € Ņ#ŋ ¤ĩcŒ(Ŗ1 #PR ø%‹—ëŽÆBÅSpCž,iÖ ĖgÎíeˆUaHŦĘ MčƒĨWUTttn^W^ģĢ~{û)rĒ[ IENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR$Ĩ}÷0 pHYsb&2 tEXtComment9Ö/VIDAT™]Ėą €0…á'^™2J†q‚‹˛HÜāŌ]q_åįkؖĄšĐ-â¤jÕĮ´8~äËģej¤0ēhh|ĩ„QΌS}Ŧ~>ģ4Fgƒü1IENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR'ČŪ> pHYsb&2 tEXtComment9Ö/_IDAT™mÎą ƒ@DŅ „+…Ė­P!ˆÆŽJØpë–aÉÁ įkȏhŊa…:› ›ÆÛnũ÷¯ē‹đրZ ÜÄí‘ÔO!ãqLäē,4ŋá?1č 8t…ë´ŠIENDŽB`‚leptonica-1.86.0/prog/recog/sets/train03.pa000066400000000000000000000741651506303110300204170ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĪūáㆠ>$0<üaƇ0ūÁíPp331;ŖĘ @0H?Íû`ĀđāCĐÚ´īûĢ'3Ūc$@IENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cø?˙Ãæ ?0|`ᆇ~P`8üCĄŒ˜ˆŲ˙`Á? ¸ Cô@Ė8übæÃ;@víđã1¨éšˆIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒNIDAT™cøĪūáã0LøĀđđCÃÁ ‡¸ŒØAø 3āÆPĩíP Ö˙h|PĀđ€„öíû´÷˙Ÿ˙-&3„ē(IENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒJIDAT™cøĮū€áķ†Ž>~xĀđđCÃã ‡(0˙ŖĀĐū‡+fGÂq8>ÔøÄŦ‡@s?Ú´hĖ*4 rģä*IENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cøĪūáㆠ€°€á'0ø Āpā‡Cㆆ Í ü‡f‡ąaęúÍ9øÁ€áÁ°ŲĀh'ķĐB,.1):OIENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment0¯ķŊĒCIDAT™cøÃü€áã0|ĀpđCÃa nūĄÆí?˜„˙ á¸0H7˙€˜uđÄ|=?€öũãÄD.s­ĀIENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment0¯ķŊĒCIDAT™cøĮū€áķ†Œ@|āÃà ‡ÁXĄ„00´C1;QXŒÁzAæ`øĀđ€áÁ†ĮPãæ í?˜DÜÖĢĀpüČŦ†‡€l`øĀąh7Né1t?ņčIENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒIIDAT™cøĮūáķ†ŒĀđAÃà ‡°C3ˇ˙a``Įƒ™‘p3Cõôū 6ķÁ° ģ@vūį˙É 2šŨ‚.IENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ķŊĒUIDAT™cø˙ūÃ?æ 0€ā‡ øđ –`8üG‚Ąs0´C1;3 af Šięa°@ŗ~â @ļ0BėûĮ˙< 7}NķZIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ķŊĒAIDAT™cøÁü€áã0üđ€á⇆Ã?šĄ˜ŒˆÂí`ŦÆÍņÁ Íf„Øķ‡ũ ,mx$WÎIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment0¯ķŊĒXIDAT™]Íą €0@#Š”dFË)Uˆ˛Čāō‹ˆđ˛Ž´žm&t"<‚‘„ÂE#ĒŲ\Ã'áO]DŧWmįa›rž´/ Äĩũā -M7ĄrĪ#IENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment1Øô<.IDAT™cøß€áû†@܀„ņvˆĨø3ІL `ŖņĮ ĖdIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<+IDAT™cø'ßĀđˆđ700ČCp€ŠS˙šŨĀ4 üohą¯)áŽ`IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cø#ßĀđˆøQņ~ˆøj`YŒ@s‘Āķ'$ĒĀkúIENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<-IDAT™cø/ßĀđ‡ŋá7 á?Hø.†Œ˙āĀØ`Äú€ŨN*eÕÚ´§IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Ü0Ž_ pHYsb&2 tEXtComment1Øô<9IDAT™cø˙ŋáŋ|Ãū†@ĖÄ @ü"Â˙äņã?Ä`šė@ķ€4|Ä˙6Dú/6Sœ˜OIENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment2Aũ܆[IDAT™-ËÁ €@ DŅ/`JŲlÉT<ØVėdí Į=ˆq$<fmú9 î…#Œŗu0Ę ČĻÎå֞QČēä.cđNÁ3m5"*×ĢŒíĮ¯įlå#.*-Ą8čIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment2Aũ܆hIDAT™-Ėģ ƒP …áQĐzV¸d%6‰‚FJ”E.­KWqQd}’uü õÎ]•‰'…w-lnė˛ŦŌ ˛„ą8ŧ4ģ$ĩ›u"æ*ƒĶƃx1ƒ§q~ālčˇîąūî>(_†Ü/•å{u‰IENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆]IDAT™EĖą €0„á?Xh—˛‰Ģd KWR\äšAĘâķ,ă¯88ŽÚ%Fæ°ĖRk…(™>qm\[ß ŸEW4ju€âpĘ~ÃÖÁČ+ņ'ŠįíĖ+gS¯“ėIENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆XIDAT™eËą €0á –ÁŒö&‘H ¸Čoe›ŌBŸ`gņ5GĸQŖT#*}`n0šĐÁ[q§ŒQ_bln}÷"ŽÕhwâpģ+ūeüØ:H*FĀ ,IENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™MĖą € „áŸXX2‚ŖČh ×zÆE0.@IAĀ‹6ŧËW\.yTog$L ėŽ>˙&qƒM.í=ē=Ęd´Ų¨K¤ŽÜōČY@/?ãŠŋŽŲ'ˆMôëõIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™MĖą € …áŸXX:‚›&3 ×:7aJ >…wųŠ—ŧ;ōb$gôŊÍķDØŌ°Ę"nēĻW=MũŒĻûĒ?e7ōé„XÕë †˙(¤…'[à ~ŠIENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆XIDAT™]Ëą € EŅk((Qü“ˆ‹}ãŽđG ¤ (ÄÆ˜—“[=ŠSlQæö$…`í­ûņ&\ĻÜ:äaüģWZTęĒ”M°.ÃŲ„\˜øō]ˇ'Áu=ÖéIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆WIDAT™eÉą €0CŅQ¤Ė…Û ¤ŦuˆEÂ)S ‰[O.Ė•”ŲC…T!5Č.ēŅoËäŋUÁTąĶ—”‘•ž }ƒ6āv—+vū1äÔK(ÎPNIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆[IDAT™]Ėą €0EŅ+),]!›¸J6Ņābų`aûīŦ,Nu6u0 F.‰Í"S}Á(Aɟ]íŌÆ-áÅđ,Áčúésĸ-‘Ú#ˇœrH!˛ūtqO¤Á1$Ļ͉ÄIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aũ܆UIDAT™mĖģ €0 EŅQ¤ƒ ˜%“Ą 3b‘Œā2Jx ļNķüĄFÃ1:§ÄQ Ę"“ŋÂĮ.—f}°DĪF×}͟:ƒ¯P6ipŪÚ¯ų/åsÜ$ጧIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment2Aũ܆]IDAT™eĖą €0 ŅC)R2ž„Y%‹…MŒX %E”đ鐰ô[>ÆâÜÁņÉ)l$ŲŨˆõAĻŦ}ÖũōQ$9Cŋ]6÷jÔnœކē¨ûŽũ$ė°(ö%Vƒ-IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aũ܆VIDAT™UÃą €0EŅ+),Á?Z&!…Ĩ+).ōÜ v!ņWĸe9ubC,[d•1dŖĪ|÷k$ßŊhģOžue2îj\ūôG™/{ĪÄcJ+öö°IENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆VIDAT™MĖą € „áßPX:‚ŒÆ$F*׸ȍ@IA‡6ŧËW\ry'F˜<—IrŗB–>S=ĻxŠeáöÔakvœ¸ņāB2•Ĩķ7č6k?6+ģ_uU)Ũ-”BIENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėYIDAT™5Ņ €0 O:€+t´Ž"ũp-ƒ‹d„~öCˆ/E G ÉåŸĒaŪ8FĨ8ĻXŊbâÖH¤I=L?;7ÍnĒ?Ô÷€ũU.¯–§ŠIENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėVIDAT™-Íą €0 DŅ(X#ŖeP Ö Ę"ĻĸMéŠp)ž,Ų>ĮčdnK´e:.iōôÄ–ģņ.ĸܨŗ?÷Š˙š¨ĢœAķĻÛU?,~EvŗH^3jd#đIENDŽB`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment36úėWIDAT™Mą Ā ąŖ1J‹ewi]R RDÖÉ/ŋ_Á§‘)’¨Ęĸü8[ĶüŲ2Ãū‡å|¯›ųÎåŲá#ęĻ `!ĄÖ×M=Q^Á1‘Ɉ<IENDŽB`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėVIDAT™MŒą Ā /rÁXa´H”Yé7Č ’ŽüÁđˆŸņy žßÂ7ø8€ƒá?åū7C1H?ƒÃ 8 ˙_Ä˙-Ĩ÷<¨ŽøēüIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗNIDAT™UĖ1 €@CŅx<‹…­W˛ōbaģ`ą#ˆã_A‹(JVŦ˜‘>翯Į™šcČÚ°ĶŒĒ^FVaĶ˙ĪøbwļW¸B=/¸‚IENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment4¨žyŗRIDAT™=Ė!€0CŅÔõØåXW‡ã $¸L—_ÚA<“L"ßL>!ĄC¨r8aŸ§ąŲtcĮc#ÅFęS”“ũƝ]ô•Tžá Ë ņ[BtˡÜÕIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ũ€ pHYsb&2 tEXtComment4¨žyŗRIDAT™-Ėą@@„áŊL ׎Îļ¤Fd/0žŸ{;ķeģ+ßM>…‚Šz k1›.aÁŠ‘Ō&ŠŅ—^rũâĻü;éÜāÍ >h?Âņ”ƒ1IENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žyŗMIDAT™cøøÃ˙ƒ@ÜČüŠ˙ņ(ūÅ€ø1Píqn~ĀĐÄü@1T0ŋá?PŽAf3$0|Ę=bũ˙z3Ō,˛r‰IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗMIDAT™cø˙ųÃ˙‡@|ˆĄ˜ņÃ?$üˆņĮ ōø0Ÿęéâų@Ė €l¸YÍP(öŒĀø˙­W9­_õ:ãIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙üÃ˙Ã@ÜŌ@Ėüá˙â@üąųÃc ~Ä၏ˆįą<#ƒ ™ņŋŠ™!æ~`ã X5:ę—IENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment4¨žyŗTIDAT™MËą €0 DŅŖc„ŦÃV”éX‹T”ŦbčŽ@˜Ÿˆ‚âŲ–ĪVėVl˜ĢQ‘+f}:ëÁ ÖYŦ Ŧ˜¸—zejĻõ/Ę[+ĩŦå‘^<Ž=R0ú­7IENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žyŗ8IDAT™cøđ7B1#˙â?Püˆ?@ņC šÃPÜÅč ˆ˙7 ™ Ä?€b0ä¯1ũ„9ėOIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žyŗDIDAT™cøßø€Œø˙a~Āđˆ?@ņ ~Üü€á8ˇq?ķƒ0Püâ˙@q 4¤ „?€ä0`ö2å\՞~IENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗRIDAT™cø˙ũÃ˙Ã@|ˆ˜˙ņfüĀđˆ?åņãæ Įø<÷ƒ0PŒŊA€ f5C1ˆÍ`Āđ(÷Š?0\ä7–č˜tIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗ2IDAT™cø˙ũÃ˙ÃPÜ ÄĖü ƒÅ›qcūøĪ€)˙ƒ„>€ä)ģw: –öBĢIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žyŗOIDAT™cø˙ũÃ˙ƒ@ÜŌū!á?Püƒ‚?ņC ēĮ@|ŧųC?Ų|    Āđ†b ˙Š}Ę<€bû˙m—5ZŪ;qIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™cxĀpŽ0`bų Į˙Cp;7đ1PލĻų@Cû†~ ž˙á?ūÁĀĐ ¤™‘1P ķ ų Pķ0?`ø#˙Kß/û9B-IENDŽB`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!ņEļž pHYsb&2 tEXtComment5ߙI%ZIDAT™cø˙ÀáƒÃ8.â ?0ū˙á8>ĀŠi~PĀĐūÁ€áü†˙Høų†Ã@ÜŌ úC톆„€v|Jū`ūžb7hũĖ÷IENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™UĖą€ ĐpŽÁ&: ŖčQXēwŦ‘~iå7@eņš$¸e uČBÔ(+ŅüoäŊß2 NK¸Ä đgēĨHhSŅĻī}ū3īÂĘ4øĶ‘sIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR Ü0Ž_ pHYsb&2 tEXtComment5ߙI%LIDAT™cø˙°2700đ70´˙o`āGÂ<ō@qv Ę33Åä40ėĐĀđ˙ķ1;æ?QĪĀ1˙Мė Įô&1‰ËÛqIENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ߙI%\IDAT™cøøÁ€áƒƒØ ?04°`8$˙áø˙ í˙!ü8ąCûîc``øÄ€¸ 9Œ@X€¨ŽąÁ(X6dĮöA$]/ō įIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%WIDAT™MĖĄ €0„ák*Œ@G{ŖT Yé%HFāFh‚Á•ŖŠ@|îŋÃũƒw„GYˆŌˆã§ĖÄDMĻaĢ {.iÃ)YÂģ¤>õ͡u}ԉ/¤2s}$ĸpIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment5ߙI%WIDAT™-Ėą Ā0 DŅ .TfĻQ +šJJƒ,  œ‹pņ@ˆãã áč‰č&;qOb,˙}éwŅĻ‘8éxĸb&¤!m)ŠÂÔ7m[Ww#¨F?ûŗ5?" بIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ߙI%RIDAT™MĖÁ Ā0 @• ŌQšŨúČZ‚<ōôõ}æį(¤-ElG?J’¨A4ą×ąnU?æ× Ä_ŠœęéQ&Ž}Ÿ6ĸk+ŒŸÆ6Km%špIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ߙI%YIDAT™MÍ1 €0ƒá_:tô =šG:x­ŠƒŖG0›kŨ:YĄ„o !ÔGܚHüDōb­b7Gg­s"ÎbąÍ‘§Š ÍU æëDb íC–<ˆâõ—89´yŨĘ9IENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%NIDAT™]Ėą €@ CQŖ)ŗRF %#°ŠGÉt‡((ž”Âų õ"ʈ}įO9M´q&BŽNŒÆį[ækkŗ­ĒßjŨÁEŸ*œķ(øIENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment5ߙI%WIDAT™EĖą € DŅo((eFc5Ž…–ŽĀWŌ!hÔâU?wT2ôɊmGũíŖ˜MĶú’1{VyN9jW¸ÅÆtz9LvØäÛöų× ŠÕ02ŅlÇ|IENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%IIDAT™c8ĀāĀÁPČÄōÚ˙Ŗâ x#Õ4780´p`˜˙€á?€āv fFÆ@9v fĒm€ÚņhÆæÍķ+ÆR6ŊIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ߙI%ZIDAT™MÍą €0ዌaFË(‘YK°Đ.+ŧ Li!Æ_T°øēƒŖB„—˜:ãÄÜÄōSŠX{­%’šzļ íļ?f“L_?g˛<)Ļ÷QíqēA,9Ã0y!IENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment5ߙI%aIDAT™MÍ; €0Đ ),ŊBŽ–ŖRXzĨ K¯0mJ‹@œ Y,ûÅč‘aH偰™Øqüœb‘X´Q,Ŗ2cm ›Œ†×uUЧZTŸ÷]Ļ]ˇÆÁĖ9)Ũ–ŒIENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%KIDAT™MĖģ Ā EŅ‹\P2BVņhf‚ŦôēŦÁŲ€!$§z„YŅDŸâNĸjg gU¸ĖäyÁŽq8UNYßü{júd &R§×]7IENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸSIDAT™]Ėą €0CQG)˛Ö†tEÆ`#96¸2˜ ŠW}Ų8A Ō G`ÚÃ&OÂ/ĸK] 4ŠĸMQ¯ųQúéâņÚĶâAD!RŖņ)+ģ—ąŧIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸXIDAT™uÍģ €0 „áĨ e„Œ–Q@)X+ˆEŽ RRD į(>Ų’Į<Å@ŧúV2]‚ÛĩöBĸN‘Bō`1ß â6“zā×áŊeš3‚"Ī?ÆĒS-ĶsÁ>IENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸGIDAT™c°aH`°```(â ~ĐpƆ›2Ė *@* ÔFløPī>2K¨S¨<nDj`(ÃjIENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸOIDAT™uÍą €0CŅĨ`-Â( [ėØäFH™ŅQ…ęFÚꉤ7)#Å>y!;[ûąn,Ŋ[´,ūĪbš,\15ũIENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸRIDAT™mÍą €0 DŅRdŒŦâŨRd-K,b6p™‚ĨĨxWųÎ܇3qãŠí”ūIc,g0ĖÄ?0ü?ÅÍPÜÄėü ˙Áƒ˙ņõČ×9nöČÉ.IENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( 9IDAT™ch`@ ė0ȃđCļ?|€á?ˇC1;ķ`øÅđ4ü ËÉõÚøD2xSAÔIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( @IDAT™cøĪĀĐĀĀ€Ø$0đá ō!xūÁ ˙q3ˇ1;˙C°af(†ō˙ņ?–95E*]+.IENDŽB`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"zĪ´W pHYsb&2 tEXtComment71—( `øˆ›Ą˜‚˙!á?üPĖŽĀ?Đ1H^¨ū˙×`45R (IENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( BIDAT™cøÃĀĀĐĀ€ `Äøđ{n>ĀPß~€á?;ķ`ø‡„˙Č#đ4ü #‹˙ą? @0= J ĶIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment71—( GIDAT™cxĀßĀp€Ą+00üP``˙‘ĀĀ˙„0đ?â‡ä>`øÂÍPĖ Á˙ øüŗCđ~ ųs÷6ģ*Q…'IENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( GIDAT™cø˙Ą€áƒÃ†8`hâū@\Äø|`˜˙đÃ˙ƒPÜ Äˍø;*ūÃĖHl(É˙į˙)ģ9ŲW'IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ?IDAT™c8ĀĀĀĐĀ€Ø80Č?8Ā`˙ˆCđ˙f nbv æ?ĀđŠ˙ cų ?Đđ$ ˇ?z/ •K6IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ÅÍ@ÜÄėü„ųøøŸ3PaĐ|M˜āĄ$‰” ĢIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜WIDAT™E‹1 €0GR¤ĖüJž&XXúĨ ŋ‘'œŨ)ŧ`@–a›zžD[Ä%q[åôĘá˙vÛ„§é74NĢƒâA‡ĩ?ČŖˇh‡%ŊΜ.åčË@IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment8Ą(5˜dIDAT™EËą € Đo(dư¤t,J;W‚¸#PR\Äcņršģ˙!ĻŖATxäŨŖt‡‹’ü"÷¸ņĪ\fžž{žĶņFŅ"5 #ë=‰î‹ö+}ŲŲë†:i¨ã Õ1‰yXņkIENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment8Ą(5˜`IDAT™%ą Ā Ĩ d„Ŧ(kŊ”"k0%B1PœŪzeúaTg Ģ‘ˇEžY7wrš\rÜfú…(Ā’œ2;āEP'ŒW>ôģĢ<ųļ:{ŗi{œö `/Ŗuŧ}IENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8Ą(5˜QIDAT™Uą Ā0/•ËŦÄhŽ\d-¤,”.RøQŌ¸8é{ÁlNNāxĪ4îÉÆWBŪ%9Z šįģSģĄ[÷Ī-ĒĢŋ VG)J Ō„IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜RIDAT™Eą €0/ú‚52Ŗ Ĩ`-ØÄ#¤ü"Nĸ8Éoõô"ÄÎenUZÂ9`31*‘•Ŗ›åh1}QgMöģÉw÷ž‹{ø÷ōŋ =Ųä$A‰GIENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment8Ą(5˜TIDAT™E‹Á Ā R@,ÅŌ, IcĻK¸į=͊° ,Ë,)…^2ŨOˆÁO@ĶÖŽLCŽÜåģē“ÔŅļŊ*˙^L8æ×E]ō÷ß§Ŋx^-áøDŌIENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜_IDAT™-Ėą €0 ĀG)(Y1ĮŖQ0ĢXJ‘5^bč\D€“ ëôÍûņD „¸Up^3’ËÖíÅyn&X]\Ví¤Ię=Ö.0•ßĶsôā‘E˙ĩĀ2 Nf´IENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!™­Į pHYsb&2 tEXtComment8Ą(5˜YIDAT™MÍÍ €0 †áW<ôčv´ŒŌâĄkU\$#ôØC?Ŧ„'FpÚâŧaœšz¤ü’š‘ˍšĒĖy'džŦTļ.c ˛Ē—u7aßn“Ąŋ÷îßo0ūˇ~SIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜RIDAT™cxĀø€0$04P`hū ĀĀū7qCACP]#H-HG`Ę10€1Hą ˙a``bæ@úDLHĨlÅ -ÅHĩ!IENDŽB`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜ZIDAT™Mģ € EqGŅØÅ‚Ō•H,,]áŽ@IAĸ—`aq^ņîgm5IœU\-q÷Äņ‘Íî_ąV†/LÅY’o$Ë´ČÚüˆîš;Š;˜yožl5­€íœIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™UÍą Ā DŅ/QPf„ŦÂhDŦuŲÄ#¤¤#‡R Ovq>3IČÚ%ēDŽĨlĪ‚÷Íq* ÃfüõøzŌęģ=›˛¨ū§S/á‚*ƒŠá”kIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment9Ö/PIDAT™cøÃßĀđŊásÃAƆæ í@Ėū'nâæ ‡00)† ˙? âã f5?âƒ@ 4ŋhĪ }돧+-ėˆ/IENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/NIDAT™cøĀ~€áķ†ƒ˜€°ķfĀŽ@0P91™ ? ūõĀp;H?ČŦĖTÜĀx€áČ.ū ?ėN)´ÂŅ”IENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/GIDAT™cøĀ~€áķ†Œš@0û4Ė€‚Ę€ČdxĀāĀđ˙ˇ?8ÆĖĄ¨Ą„v?Î@'`F< IENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™EÍÁ €0DŅlĀRė@KĘŅĢ•™t;˜cbƒ"˃]fi썃xĻ‘Éu˛‘í:ŧ˙˛Āq´€OŽšsŸÃzŦ¸3š;ø‡ŗn˜ũ5“1Ŧ!4IENDŽB`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/WIDAT™%Íą €0CŅ((a2ZF!bą ņב ŅéUļu´YÄ(žĢUeöȌ‘ēöĄ œuE¸W‰°{I<î_vz_~b.bķŸ:‰ļęē".,lēČ)IENDŽB`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment9Ö/GIDAT™uÍą Ā0 Ņ*3’Wû"kÉx€Ŧ ŧA"ƒ!UŠĮ•Į[fV1™SeÔŲ~đR„;¸ Ū‚cV6–>.;Oė$ExūĘÍģnãä++ČôĩIENDŽB`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™mģ Ā D_Dá52ŠGQd­Å#PŌ']tzŌ÷aš‡Øjrz8eđb™VɤežpsŎĶCån&ëķ“aZCg(ūØáŧIENDŽB`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æų pHYsb&2 tEXtComment9Ö/RIDAT™mÍą Ā0 DŅo\¤ôJÍÁ‹dāŌE 9ƒ!M„ĐqĖ"" %ķœ=DuãWü‹āŸxÆįrļĮĻJjĸ­ŽÕu¸ĶĻŨE/âé/"Į_áIENDŽB`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™mÍą €0CŅĨ`Œd ÆÉ(dŗHŦáޤÄ-œ|…}ÜUD‹48’:%¯úc&án‚OvkWtN›1ŧķaÉۖŋ6ĄĻ!I&üU”_ÉIENDŽB`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/OIDAT™eÍĄ€0ƒáŸĢ` :ŖĀŊÅÚM2B%‚ōÄ'"’pĖbĄI4D×JŒT)~ÂēpˇĀ‘“Ęeˇ*aģˇ^-‰-?Lųšč­,ŧLtí˜IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment9Ö/MIDAT™uÁ ! G,Ā,ÍRbg–¸ōŧŸˇ9ßËėÕÉ[ÂLī”$ ^Čl:˜!™đŠ­g+{䟞ņƒeˇ(ÚŅ^4˙§&zxx‹öIENDŽB`‚leptonica-1.86.0/prog/recog/sets/train04.pa000066400000000000000000001216571506303110300204170ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 196 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cø˙˙5‰F ņĄžáƒ}Ãų† ü@ÂH<¨c˙Ä˙Ė ˙7#Í˙’H 6l<Ø"°•`ËÁÎ;ė4#™]ˆ+ŽŲ1/IENDŽB`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment0¯ķŊĒUIDAT™cø˙˙5 f ņ‡Hü`¨o`øĀ`ßĀđ€AHT‰øū˙Øš˙Ŗė˙›I$Đ  6lØJ°å`g€vȑū}Ī4œûĖIENDŽB`‚ pix[18]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[26]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰ƒC„”ĩĻ/^ŸÍIENDŽB`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cø˙˙5‰æ!BÔ~ķĀQTÕIENDŽB`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment2Aũ܆eIDAT™­Îą€0 @§ĸĖ%Ŗáģ”ŒĀ*aFH™"#ų Ŗ¤ųʖ$fĻō#c-€*̊J~(-Šė#âØ™_¤—áā×ēƒÔ‰ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[82]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗNIDAT™cø˙˙U yņDü?@ÄņN ‚Hüã2@⏠ø">ԉ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[83]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[84]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗNIDAT™cø˙˙U yņDü?@ÄņN ‚Hüã2@⏠ø">ԉ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗNIDAT™cø˙˙U yņDü?@ÄņN ‚Hüã2@⏠ø">ԉ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗNIDAT™cø˙˙U yņDü?@ÄņN ‚Hüã2@⏠ø">ԉ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗNIDAT™cø˙˙U yņDü?@ÄņN ‚Hüã2@⏠ø">ԉ ‚ˆ Œ ‚•€ØA*Xĩ€đ¯ bIENDŽB`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment4¨žyŗMIDAT™cø˙˙U‰~8Á$ūˆ? âˆø'€ˆ ĸ D°> ņOHü?ė€Ä‡:2åCÃŅ€J@ė • ԂC ´trIENDŽB`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment5ߙI%LIDAT™cø˙˙‰ ō8°,;Ø0aÕûũø˙‡Hüė Û°` ’ũ Åũ m `ÂDÔ70`šühøŪ‰vŠH<IENDŽB`‚ pix[100]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment5ߙI%LIDAT™cø˙˙‰ ō8°,;Ø0aÕûũø˙‡Hüė Û°` ’ũ Åũ m `ÂDÔ70`šühøŪ‰vŠH<IENDŽB`‚ pix[101]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment5ߙI%MIDAT™cø˙˙‰ ü8ˆú˙ÄĖ`SęA„KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[177]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[178]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[179]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[180]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[182]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[183]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[185]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[186]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[188]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[191]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/mIDAT™­Îą €@ @Ŗ/ždFa1AŦ›0%zcŋ„Ä4×$q ’?Iâ†8ŅtĻ lƒØK,ŦŦfų23io4H>KNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[192]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚ pix[194]: xres = 300, yres = 300 ‰PNG  IHDR2ųM; pHYs.#.#xĨ?v tEXtComment9Ö/nIDAT™­Îą €0 ĀRPf6!ŖáˆÁHÄ"!%âņH @sráˇ$ RœĢáÄlHb2ôE07qˆöĨ˛øJ‚bAWKNŅōeJ,Eņ6W÷ręIl&ÜĨq—Z(‹ŌšŪƒ‰ņ¤.„Z’Ęr}IENDŽB`‚leptonica-1.86.0/prog/recog/sets/train05.pa000066400000000000000000000741011506303110300204070ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR >ėĩ& pHYsb&2 tEXtComment0¯ķŊĒVIDAT™cøüÃ?Æ? øƒĄ†áG… Ç?6 ūČ0<üÃÃpđŗ€q#7˙c€cf fâF(ÍU Á< dČĖ5; vūį˙j6įHŨ•ĪIENDŽB`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒPIDAT™cøß˙ƒáû†?0|üųƒáᏠ†Į,ƒđ? †v0æcö Dáv nūÃÄ`s@æĖũøáÏD ]Ė?ūŗ˙AÖ5][ÄÄIENDŽB`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒSIDAT™cø?˙Ã?æ ?0ü0øĀđáCà 0ü#Āpˆ›Á˜‚˙A03 WÔĶÄÁ؀á!Đŧ@s?@ėŲųŋ˙æ*7ËuöIENDŽB`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮūáã†>0|øđáᏆÃ`lĀĐū„˜3``f 87Ã0P?Č y|`øÄ? v1`øĪū0\3ö füIENDŽB`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøĮüá‡ã†>0<øPĀđˆū0`hâæ?`Ė Æ ė03Ãôš2ë!Ô\??0üâė 12/rDo‘IENDŽB`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRī^¸Å pHYsb&2 tEXtComment0¯ķŊĒQIDAT™eÍą € EŅ‹$–Žā(ŒFÃdÆE$.đK ōâG-,NyßCQô ŽLĩÄŲ{_)ˇ…ĸÉA|M?Eķg4ŪŽÍUß3ËĪ‚.˜e1PØē3IENDŽB`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒOIDAT™•ą€0 ÄÄQ¤„Q2#d æâ2I6øt.|6P¨û—đUØ"tˆ)1ŦŅ­ŌŊrúÎõåšĪo:Ōu‡s¨Ą­čyĪĻOr2ÕÂ?kŖIENDŽB`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ķŊĒQIDAT™cøo˙áķ†?Œ>$~`øøŖ€á!ūaÅ Í ü‡†˙aÁPqķ0>üĮ€á!Í™ũáÆŒ;˙÷PM5Ēāá™ëIENDŽB`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ķŊĒQIDAT™mĖą €0 DŅC.ŌfFc‡ –Eˆ˛ĀĨsa98‚‚‚âu_3&„^Ä Ņô@×ÕÅ2Šgœ!9~ÉĮj—úęņhaėņ׍pá GĮ3jôC;IENDŽB`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRĻcÉķ pHYsb&2 tEXtComment0¯ķŊĒTIDAT™MÍą €0 DŅC¤ŖÍ(‡1ŌĸY Ä"d—WX FB@ņÚ˙Ņ•čšpĒ`Ŗ`gÄʀlŸbĀÔūÂ̏|ŗˆãQMPŊĨLāBØ@´Ņ?3/ol0 fæ}”IENDŽB`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒMIDAT™cøĮ˙áķ†Œ>8|`xøĄ€áđ6`há? íØÁ˜(Ė TÛ Æ3ƒqÃÃ>>Ú´īûų<1áĐDÔ9IENDŽB`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment0¯ķŊĒAIDAT™cøĪ~€áķ†Œ@üđÃãņņ`Ü˙ƒķĀė Ô×ÅĮĄæ=šũņ0А}üר2įŽIENDŽB`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷ģ] pHYsb&2 tEXtComment0¯ķŊĒKIDAT™cøĮüƒáãüđŖ‚áã †‡@X‚á07˙ã€b8f†âf ĖĮ‡ø P?ƒĖ™ũãĐ. =˙€öũī˙<*7¸õģČúIENDŽB`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment0¯ķŊĒHIDAT™cøĮūá33~`øđáÃà 0ū íPĖū‡‚˙ĀPõÍ` 5h&Č\ų??0üÚ÷Ÿũ[†3EŪÄīIENDŽB`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment0¯ķŊĒKIDAT™UÍą ! CQ—ŒĀ(Œv=“˜1ÁuAŠLů´?ÜVs’ >}¨ kưŒR¨—ã°+ũŧÜlŨJ|OŗÁŪ­m;€ -íIENDŽB`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR ßŌŠä pHYsb&2 tEXtComment1Øô<+IDAT™cøWÁđĮ‚á€C}ŖD H*(ÁđA‚á4pø› +BœIENDŽB`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<$IDAT™cøSĪđÁžĄÁžŒ€ė ō Ŋ^ 4á^ĄIENDŽB`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yŲ pHYsb&2 tEXtComment1Øô<0IDAT™cøgĮđÁŽĄA„Č1ü°cø!Fpœ CĀSČũĀĮĐĀ/äšņ]IENDŽB`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô<)IDAT™cøgĪđAžĄ†~؃Đ ’Į@öčč‡=B=ˆ!2 ϐ”|”ZIENDŽB`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cøgßĀđˆä Äū ķņčũĀЀ ´š,$‚‰aŠIENDŽB`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR{Ē| pHYsb&2 tEXtComment1Øô<%IDAT™cø/ĮđCŽá€ė~äđ1@Ā6ÉNFŋķõ§IENDŽB`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR ŽzA pHYsb&2 tEXtComment1Øô<'IDAT™cøcÁđA‚ =ЀҒ@EH,ō 1@Ņđ…%´ŲIENDŽB`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR–īØŌ pHYsb&2 tEXtComment1Øô<#IDAT™c8˙ĄĄ„Ô1| ؁Đ9†L L ˙ØY'$Ļ! ĩIENDŽB`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<0IDAT™cøĮßĀđˆ17@Ų?äūđ#ayūA™Í ´@ä†āü+Ą6¸dIENDŽB`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 3ōÅa pHYsb&2 tEXtComment1Øô<$IDAT™cøoĪđGžá< }gøA.ę}ĀÎ˙R˙[4ņIENDŽB`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment1Øô<2IDAT™cøŋŸáŸ<Ãyz ĪđŽėÁHžáŲ#!$.D}``8ĀĀĐœ´–ąÅIÉIENDŽB`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yŲ pHYsb&2 tEXtComment1Øô<"IDAT™cøaĮĀCėØ1| =@C ôá==˙üŌ™IENDŽB`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment1Øô</IDAT™cøoĪđGžá<=°gø ĪđÆäą!{lH¤ņ?C ÔĩŅžé]ô´IENDŽB`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment1Øô<1IDAT™cø/ßĀđˆđ700@ņ†Šƒ1?–'ƒĖco`xĀÜĀ´Ąą4É+YķX&IENDŽB`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment1Øô< IDAT™cø'ĪđCžŒĀlԐ=’gø4„‚($šĢ×IENDŽB`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆]IDAT™%Ėą € „á?ą°t™DWac´˛dW!a‘’ˆĖåëîŽgy-1Š$Ī•ÁÜfCįēC'Yˇ6§ąũ;ŠöUVû[ywhķ¨x"?:uĄę֔2ĪôÆIENDŽB`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆^IDAT™MËą ƒ@ŅA„.ÁĨpqTāÜĘR‡hāœ ž×%´zŲG'j+öIĖE,5ąZTxÛhų¯$dģDøŖš‡¸žâėmH—øØ–Åoų†FŧB_t’7ēh)9ŌIENDŽB`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment2Aũ܆YIDAT™MĖ!€0Ā.$Oā)ôaˆĀ—ęøÆđˆá Ŗ†4W×ĸnBé…; jY2ŅYhđIšˆ]D•PŖyķx[ũ1y&ŽB‘~"ĸûīėô”ū-ļģŖ§4IENDŽB`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆SIDAT™=Ėą €0Á(ƒQØ 90Ąb ]Šp"ë:Û´Y”Qd;vą&ąe1gē`üdŅËŪhƒxŧm“ųĢ.PÜÎ*ę!ü}ĸ*˜oIIÅIENDŽB`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment2Aũ܆MIDAT™MĖ1 Ā0@wĘX aR*aA)=ÃČöu’N˛dŲČFâfNMÍꆊ0. ŨQÛmÅNëßūĪ_Û0Bāaeu/v4<â5sīIENDŽB`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆UIDAT™MĖą € DáG,,ÁQd7;*KGPãØQđ‡ÄÄâĢîōH“HŖˆN‰íôąĄÛūlo.yju5ƒąN™E^ŦWčžėš“ũi§#€4œO͜’IENDŽB`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment2Aũ܆\IDAT™-Ėą „0ŅAŌÚJĨ¸ €čBZ˛D#ŋ„ fmŧl4܃đŸP'ō,NOüŨš#ā4ÛRY“e%JeŊxB}ŨŖqM†¯†*ĸéŖęnÁ-܄1iļIENDŽB`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aũ܆[IDAT™=Íģ@@…áß„Jp+Q˖ ŗ;m­Nn  Œu0_vŊS'ãD‹ËnŦHÂmzÅ`D7ļ¨Q’S[éœS[Į`”ōŦėŠl1?᧯ Ā 'dŋœaIENDŽB`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aũ܆VIDAT™-ĖÁ € ƒápG‘ÉŒLâ(ÖMpŽøc<|/yI[ĩÅĒŗÕo$äđ“.DüŸd=č&1ēl´•Í*ģ”™ŠB^ô¸ƒ†É:ģ_J6mАVIENDŽB`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆YIDAT™cø!ßĀđŊáņá†ū‡ ķ40ė˙ ėČøC;Pî?âF nbū†@3ūŲ70üųßĀđķâ˙@|ūG2 á÷ŸK‰3ē…ĢrOIENDŽB`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment2Aũ܆NIDAT™UĖÁ €0CŅ”<:‚Ŗ¸™D\ŦnŌ,^z(ę—âAÂģ%Ņ1X9Z÷ŽüŌOø¤nKtŒėŽ“ÕfĢ.hRÁYų•{‚wŽ~š|, “čl…IENDŽB`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment2Aũ܆\IDAT™=ĖĄ €0Dá× ŒĀ(lFފ1XĨIk4A`‹Ģh(?! >÷îhŖČƒHN,^ŦA´Ä/÷ āM”5Ö7Ûĩ^\öQ'3‹RáŦb/âČbŗVîÅŖĶ į-š˙’âkIENDŽB`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment2Aũ܆NIDAT™5Ęą € áK€ÅŅ4Ą` WҊ5 ˛´°yŋŋX|ŨJ܅=ŖuÔ~k#Lų Ž4†‚"oÂ\˜xÄåȨ-Ādņė˜%OWĮŗIENDŽB`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aũ܆]IDAT™=Ėą € EŅk,,ÁQd28‚ĢüÎ5`ė(ˆøˆÆâ/˙æSgŖLFŒäĶ{t™_ßŗéžÔ5õ-Č(úq/˛uƒrÃU!õ8ü§¯nŋė͇29‘ŅIENDŽB`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRdÔē, pHYsb&2 tEXtComment2Aũ܆RIDAT™=ĖÁ €0Ņ )Ā,ÅÎ䋍%D<äĒxBâT–w[†6m•M’?×%Xē1WÔĮ‰7ę jÔÉ(3ÜÎbė’Õû†{y{Éņ/7:™4IENDŽB`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėYIDAT™MĖą €0 DŅC)RfĨŒÂ*‘;DÁĻJk‰&]¸H¯:cÂÁMa¯°¨hŸSēķ–C2j\īöĀĀ%&é'/ēÉúaęšÚ”-5#üCJMIENDŽB`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úė[IDAT™-Ėą €0CQŖ)3ŒvģP¤dĨ Ö0„."8'Š×œüīLÔH”‰8 ‘IŦÎ~ēK.9ˆGûÔqkĶë‚Ū¸,Á-.6CdžmüÚՌ6ņ{ķ<ãx$q§IENDŽB`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėUIDAT™MÍģ €0PŖ)!Ģd4¤ŦeD‘5Ž n¤Ã„(^į<–ˆ>+Íęg7"ļW#Ne] ÄÁа礟ėõV´1/ÚÖGŋđž33-ĶVIENDŽB`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úėXIDAT™MË!€0Đ&HŽĀŅv’+ąLėMØ-˜aôŖ&žøŋ-,-'‰R#˛¤ßŊŊÉ-™đé÷xf‹āwÉ:2)ß-bSˇDÕöųu=Ô ÷[ĀIENDŽB`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úėQIDAT™UĖą €0Á“]n 9p[GDčŅ€+™„`’Ķū+’åÉĒ<”ĪÎÖpŋ ĒuŅũÁv[äĄK ķO†•čũĘsß?ŋˇ7„šĢ\ÍIENDŽB`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úėXIDAT™MÍ1 €0 Đ/{Ö›HppôJuōzŒŨꏈHx„OŸ NDĢÄÆō°ŸK‰qŠöz"\=ĒÅĖ—Īî@ę/åŊ 3‡éV?ûĘäū7TC aIENDŽB`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úėcIDAT™-Íą Ã0CŅo¨ĐŅh%† ¯%#EÖ ΕUIĄ¯8€GŌŗˆ$´ˆ†ø´ĘĻĘ•ãņķ=%æaÎ įƒĘŠÂ0ožļ>KŊĸŨŗģ§ŊŊå˙{wŧôõ…9†ã˙IENDŽB`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úė\IDAT™MĖą €0 ĀG)Rf…lÂ*YQd-EĘŦđ#˜Ž)ŧSQ\aŋßxWÂ"Á…hQ!ą˙ø<Ü)—uœ:÷Ė †åŠP%<.#h%YAŌmĶz7ņ§Ã<9*IENDŽB`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment36úė\IDAT™Ėą €0@# Ö`´ė’‚2+R°†# ڔˆxœ×øũF›‰:Äĩœ ČuŽ!āWî…đ,ú1õMŲŖŽ[xnÉ;e‹n›:I‰_ä;•žŒéüIENDŽB`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment36úėUIDAT™MÍą €0 DŅŖĸÍ(-+ Ė…ŧH \é"’9C“â5Ö?s'¸7 S]4ćˆG:1ÕģzĪģW)ŋY`r,秊S­ bhKũŒā €Ÿ?Yfæ\IENDŽB`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úėYIDAT™-Ė!Ā Đ.äŽÄÍ&“ģRÉ×`7øÉ ‚„†xâįˇEÛ s7"‘¸ KøY˜w–ū,Yņc ~ÄįĄx>Ë3*0Ā@ƒÍB2÷Cà8‘5”`knîIENDŽB`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙đÃ˙H¸Š ø˙AÂ?>0|8øá3Píc ~ÄĮ¸ˆ  ˆá愚 Ö/Āđ$÷ĶŦÅ=é9jŲIENDŽB`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗNIDAT™cø˙˙Ã˙‡@|Šq#3"đ?ŠũâŸ@5ŋCÕ6C1}(×Ī ĀĐĀĀÄ3`æ‚Ø @3 ~0(0ü˙Sˇ˛DNęúÃIENDŽB`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗ;IDAT™cø˙đÃ˙ƒP܈„!ø˙â@üņ ?âãÍÚĄ˜¨ ˜×Ä  @ K9Žē¤¤ĪIENDŽB`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žyŗ9IDAT™cøüÃ˙v fbf( Ä˙ øū ğø9ŋgG¨‡á  0€lĖ|ü9–2 ģ=\IENDŽB`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRëĢhø pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙đ„âF$ĖøƒáūûTķˆ?ņg ~ÄĮA¸áp0|n@2„*~0H0€Tũ`°P¯>ÅŦč5ÂIENDŽB`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗ6IDAT™cø˙ņÃ˙‡@| 7"aF4 UķˆBņa(nf(`@˙ f€ô4@đ5š>O„ļHĶIENDŽB`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment4¨žyŗDIDAT™cø˙üÃ˙ãPÜÅėūĄaHî'âį@üžĄg?Ë3>`€˙Ė ¸ųœũ!ˆū3$ú@9ē_­™ŖIENDŽB`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗ@IDAT™cøüÃ˙ÃPÜ ÅĖü ÃÄ?ŗ1PŨw ~¤vs00Ā0føĀđ‡ĄŒ˙7ą8d;oIENDŽB`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗCIDAT™cø˙üÃ˙Ã@Ü ÅĖüŠ˙@ņ ū TķĒö9Ÿâ~ æg`€„™ ÜÄ  ?€â‘Ė8õ‹đrIENDŽB`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment4¨žyŗFIDAT™cø˙ķÃ˙H¸Šø˙â>0|âĪ?0<âį@|Čo>PĀĀ €ė˙@qÜPÄ ĀÄ<NúŧIENDŽB`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žyŗIIDAT™cø˙øÃ˙Ã@܈†?0üƒa† €øųōA¸áÃa >Äí  @,Æ€ė˙@qdü(ķ‚Ĩ7x–ƒqĮIENDŽB`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment4¨žyŗJIDAT™cø˙üÃ˙Į@|ˆ¸Š™ø˙âŒ@ Tķˆ?ņg ēį@|üđ†v ŨÄČn^#7|`øĀ Á `>šžœíIENDŽB`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%VIDAT™]Ė!€0DŅI**{ޞGƒ *šŌĸz:ė6˜Ē.C Ä“L>znúÍū:ŠeZh掊RŇūŗ~"˙‰ļØėI/.8ÁŒ@Ė€áķū ÄĖų0<ūāÆ˙0`āÃ@Ü ÄĖ@ØŒŲzø`h?|€á;Ø<E88Ļ…ŨŠIENDŽB`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ߙI%RIDAT™]Ėą €0 DŅ‹2#0 -‹DÁfG Î 4¯°Oúčap|/Re!ŽAÜ/_įŸÚFœnSãg—’<*uˆ-;ęĮÆ ú4QSÚÄYIENDŽB`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment5ߙI%PIDAT™UĖą Ā CQK”"ƒÆk(Xã"¸ ˆ J‘â5ļôa'aaķ%ĘEŒš™mE_­D3ĸ/NLĮO—$Aß'ŪԈ,)Ģwŧũm]3ö¸ä"1IENDŽB`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%VIDAT™EĖą €0 DŅC€2š7ATŦ‰‚5ĨHëŌ9GH¯°|úp8…nThWDüœˇņ—›ŪC+&E2|ęrĶ™Ø-–W§AĸeëXŨ>ŗRĩ\ĨIENDŽB`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%SIDAT™UĖą €0@Ŗ)3Ģd3R°–Gy”"íoˇ†â¤—e?ü& ˛}’dŲ‰>—÷Ž,­N§XÅđŠđĶ$)ęe#Š6W#Nũa!üā7ÔVQÉIENDŽB`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%LIDAT™cxđáÃ(f„bf –â˙ņ{ f‡ˆƒāáŽ?pã÷ūŖáv fĘ!đöƒ@Üx€Ąd?ØLŪA6 AÄõöIENDŽB`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%TIDAT™-ĖŅ €0 Đ+ũč§#¸Š›‰ÎuāG×Hq7¨—ďG —††_‘*MvbLâ™9c§ŒēšItÛÂ|‘,u9Ĩ(s5M?ËA\Ūá]+?.í6ž|PÚfIENDŽB`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ߙI%XIDAT™UĖą €0@G)(lÂ*Y%UÖb# Ú§{‰HÁ 4ר˛ŅáȰ° quâūø*ņívŠerzBđS”KCF”Ē]-ÄĻÎú[øe2<ŽgŅIIENDŽB`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%UIDAT™eĖą €0 ĀG)(Y)›!D‘ĩąˆ#0ĸĄ›ĐQ\ņ~ŊĄ7Ąøt.š8ŦŲ­å¸ËBT%6ͰķouSđ>Ŋ2ŠĨŗī%ū÷Ä5ō%<’ė´IENDŽB`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ߙI%TIDAT™cø˙ˇáC3"đv –o`xøŋá;?°bū†Į‡ø`Ãķ ī?00üĮ‚13?ávęáęmš}höƒúŊN5HåeޞIENDŽB`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ߙI%TIDAT™]Ė!€0ƒá™˜Ü•v,<‚k5Ap-\`37*Ā ž¤Ékc)t>ĸK6ÅeˇõlQTßZg/ķoĀaĢsxEwŖ7Љmōīšõė59ËŋĪIENDŽB`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ߙI%SIDAT™mĖģ €0PŖ+RŪŒ# Ö1+$ĸ€.X :ŠWųƒļŅåc⒉Ŗ§D/éÍęBŦ…ؤ~bÂÔKâÚųD úžõweŪ@Į4#ڔ‚ŨIENDŽB`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%QIDAT™mĖ1 €0ДŽÁŖØƒ "^,âE Žqû[ÍP7‡ „ B(s˛ÁņtZm˛ė.âRÁm-đë´M@ō&*ąũQG"fž{Ę9•19ļ¨IENDŽB`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ߙI%RIDAT™cøa€á#3@1ˆÍ Ä ņ˙@\ÄėPq ~đāÃà ?00<ūÁĀđ âFĒa„âv žæƒ‚ôƒĖæ?Ā´Ŗ8ģqpMFIENDŽB`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÆŪp pHYsb&2 tEXtComment6FŸPIDAT™UÂą € EŅK,~įQ\MBaÉJ KWĀ ´´0j(=9Üâ8šŖÖĀ2“B¯ŠŪ~œ@`¸ˆ,Ŗ†2žũjG…TØ"‡ņø Ģ Ŗc7ËIENDŽB`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸRIDAT™uÍ!€0DŅ•Ŋō¸^̤‚k@¸@q˜â‰ÉîÎrFq ĸ#ö"ļÕfËÎyņúŒI^ž…ÅÄųáīÕI,žkūŲ“n…Õ*l:ŌŠčIENDŽB`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸSIDAT™UĖą €0 DŅŗ2+x´Œ‚”*‹ą€é\ ĀŲÅĶÖ7–t„wÜEqqĶL¯•‘Ãۈ Ü ŧK(ĀĪ,ZÎā_r6ÁvmörJ8UMšä<IENDŽB`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸMIDAT™mĖ= €0Dá/–Ŗ){ą-ŧFd Û¤ (Ŧƒ?Å×=r"Nk522'đH–âŌËĢūlíĒsmĩIƒ~Gģdz?OĪļę|IENDŽB`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™EĖąĀ CQqYÃŖą “ą‰ØĀĨ‹\@qrIņĒV!N4„8 ķ5ØRĸ¯Ēhˆzq{„ĄR˙XęĶīÂĩ }\7‚Ū3NĒ •fIENDŽB`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸYIDAT™5Í1€ К?8z$šƒŖW*ađ$\ãâ`Ā qxSûŅvĸņ€¸ĨĐá”,ņ“|!|°Č,療$ÂÔąōS,[įēCĸdu¯0öĒū´•/‹b5æP ø*IENDŽB`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸQIDAT™cøĪ~€áㆠ>~8Āđø?âã k˙Š™™¸ˆ1Pžųƒŗ˙``hĮĀ@3€ø0Čl ~øhĐÎō9M:ũ Ž IENDŽB`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸRIDAT™eÍ1 €0Đ@‡­z4§­ˆC¯Qé~7…‚Ļ “ÃÁXˆŗ]ZÍØ™Q&eWį—Ü„}œHĢS†~\ũT^MÛØô•ˆa|Ū}4ĄyJÚ\IENDŽB`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸWIDAT™UÍÁ €0ƒá_:€+t´Ž"=8—t‘ˆ Ô[AQcÁƒ‡ī^ÂãÎâBœ$ZMėŠŦļYq.‡(ˇČ6ŊfÁ`ŪāûĐ"Ąã'w‘åãŽ$ǎ-øį¨‘X5Úīŋ÷ĒIENDŽB`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment6FŸTIDAT™=ÍąĀ @Š”YÁŖą Įdl"6p: .‰p‘âŲ–ņ81ÅŊāvàĄ‡‚ĒŦž m;‰#€hž´ŸĻ!OüZ°PĨĢcÔŨz&ÖÅû4’´ŸgIENDŽB`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0ĀÁ{Z‚­ÄRŦ&O[Zđ‘6"i ĪbÜ`>îØå5Ī@”¸"qF‡Ôí>KũXŗĶH`ÕŦܲë€ųĮ āeAŨIęįöˈ{á ĩį5…öûüIENDŽB`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸOIDAT™MË1 €0DŅ‘€–^io—k ¤Økr@mŒãbņē˙1q/ÄEb†&E<>‰üŗĒĮK}ę?\J'šÔJtŊįÎÍî5†Įĸv†IENDŽB`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸYIDAT™UĖ1 €0DŅ/‚)=‚WÉíRzĨ‘^#’ Ä^ˆ#ÚX<–av—žŠžÅš‰Ŗˆ*‘Ų=“sĒÖEøLŗ Ø F÷c‹„>oNÉVŊ_|ÛüãZtŧT4ÍĪĪIENDŽB`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( ;IDAT™c8ĀÁĐĀBPĀČ ˙ŸÁū?Ã˙ķ ˙3üī#yúFĀč‡=}@Cō ˙cĪđ¯ėčaIENDŽB`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( ;IDAT™c8ĀĀĀ `ėÅú?B°<?>°˙đ†˙ ÜÅė@Ė€á˙Á‚ adšō˙ 2ÕĖĐIENDŽB`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( ÄíPĖÁ˙@XžáūaÁp`˜üûœ×-ŦŠ nųIENDŽB`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( :IDAT™c8x€ĄAHū1ƒũc†úã ˙¨á?Ã~ú'Bė~€Ņd$Fü`$ †đ•ã^RúIENDŽB`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( 4IDAT™ch``"F0bf°˙ĪPF˙č>Ígø/B˙ėAčũ€Ą0ô ũŠ#ķ!MĮÍKIENDŽB`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( IIDAT™cø˙΁áũ† (؁ĄųÁū@üņƒüà û`øŠ›¸ˆŲ0üa~ūÅ?Đđ4 T  5 ũŧ=IENDŽB`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRâ@Ȃ pHYsb&2 tEXtComment71—( :IDAT™ch`@@Æū‡ ōė70ÔˇCđv æ‡ā@üG‚@ņ,øŦÖž”ą&Ú Ŋ"IENDŽB`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR]ŗ w pHYsb&2 tEXtComment71—( 3IDAT™c8ŪĀ€L üm öĪę1ԟcøD}`$ĮđĪŠūØ1üŖ8PęO¤ã<ÍáIENDŽB`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( AIDAT™c8ø‘Ą„@€„ä2Ø?f°Î`œá;Ã˙~0âgø/ĪđOžáŲ3ü€Ą¨č‡<Ų3üŠx´F͞ÚIENDŽB`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ‚Ŗŧ pHYsb&2 tEXtComment71—( 9IDAT™ch`€Fâ?ĖP˙˜á˙s†˙īūŸgøßĪđ>Ãy†`ôˆė~€Ņ"ûī?)!„:õĐwIENDŽB`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR‹Ņ pHYsb&2 tEXtComment71—( @IDAT™ch`dh`€F†ųŸūŅc†˙‡ūgøßFü ˙åūŅy†ō ė !  PĘ„ūØ% &ŽRÚ@IENDŽB`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜\IDAT™Uą Ā Ĩ d„0Ŗ Qd-ĸ,ō#PR (†¤Iq–Ŧŋˇšƒh›gWK”9:‹ŌãÚŗQŨËô“h͜:=đÖ ãķžå=qęëÚĪąëûn2fÜŅV‡IENDŽB`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜[IDAT™5Í!€0DŅO*ŊRo†@ šŌD%W€ôÅU4Ā.ņĖd2CõBqB…XL`ūLjÔ|9qÍn}Lx%˜Ņ.ôŧš~ēS›ZuûHíīäo6ŋnĮæIENDŽB`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜WIDAT™UÍĄ €0„áŸT YŠŖ° AT˛ŌK*ŦĐ^‚yÁ0ˆ/g.wÄhø`4Œę™]ŽČ”Ī*‹6Kī%Q:]æ”jPϐëo{h7´ßŪ¯HvÉČ0õĢWˇIENDŽB`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8Ą(5˜SIDAT™-Íą Ā DŅ‹((UOJ‘’•ˆ˛ˆŗt.Rä)^åoŧ#–ˆķ%šÉX€˛e‹SčËĄé WWkŅW߾͉"mĒŊcK›?Ū*K̓GIENDŽB`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜YIDAT™UŒą €0R|ÉJa3PŠ”ŦäTŦ6øō‹8Bįˇ^ļFôD܍¸œ¨žq†ĐžˆC˙}#¨åņ‘Ĩ@‘$lĀ:ūÔxˇZWG}×Î0>J‹/˙ƒŽGÃIENDŽB`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8Ą(5˜SIDAT™cøW€áû†˙ø˙āÆíPÜ ;”?Ā Á@˜†600~ĀTËĀĀÄü? Čîcy>ņīĮ@;Ž\ē6Ķ˚m*IENDŽB`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRæĩŋ pHYsb&2 tEXtComment8Ą(5˜^IDAT™=ģ €0C(R˛BFË(t)Y)ˆ‚5eŖģ"B8 Q<Oō=>‰f §âĪĄwĸČSf‚¤ Ę!ĄŽō0"›č›XÆŊ?{z{Ē6Ly|lƒ7‘éË •IENDŽB`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜cIDAT™MÍĄ €0Đ#Ŧņ7a•Ž‚C˛¨JV8‚¨-ŠŠh(G@ ^.?šÜGkDí‰äˆc'b"BņØ>“<÷Zˆåõ(Š# ”đČŖ!Ō’Šo˜Ģ\ڐX‰Ŧâ۟mā š@@ûÜØGˇIENDŽB`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜YIDAT™-Íą Ā CŅR°Ŗ1Bļ`-"ŠŦqQ¸ō „r@Š'š°lF,ŠđXæuÍwßfž\= ›ū}%ģÄ[Ŋ§‰bP:Äile¤Ĩõŧö}aũõC>~5Ēēá%IENDŽB`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜]IDAT™-Ęą € FáĮŦĀhŒbgÉŽĸą°t…K@ŦÄĀ’ËWŧËOļB2BD8ĸįLŽ’`ī6íU˙KfķĢņĘĄîAwA#ŧ›=ļH3uĨzÔĨÆÖÖo<’Ŋ6ē¯IENDŽB`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜`IDAT™5ÍĄ €0DáGȎĀ*­dĨCu&l Ļ$üĐ >÷rGuĸô"wb "&ąfßĪbæ,ĻS„]hÉúd}âå‰Á:ÁÁ•fŦ?˙YĢíŪâ¸ėË6ŠĶ˙Ŧ4!1¤5IENDŽB`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8Ą(5˜XIDAT™MĖą €0 Ņ‹R°FFË.ŦJ‘5ą€K‘…E (žô û˜YШ ­ÜVč?-\V9U´(‚ÅŊQb†@SØ'žlūíîŅ #:īo4<ËN—5ĩl^ÖõIENDŽB`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8Ą(5˜cIDAT™Eą €0((Y!Ŗũ*T”ŦDAÉ –˛@¨Hņ"˜‰âô/ŋßF­Ä=Ĩ'Ε¸2ąÃŅÚfą‰¨[ė~dčĻiHQžüzŅũgqénĘ"’2ĘD¸úÔũÂū=TūŠOIENDŽB`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8Ą(5˜]IDAT™-ËĄ €0á#ˆJVęf ŦôP]Ŗ-Á@Ōū&ŸģŖ âéEęÄEHžđx–f6[ēuąI؇į›ŦØ‡õā2 UŠ1ÉĖ`…ˆŊøĪâ˜ÄÅ/†×āúdŨ)ôc.ļĖ}|‡8ĢĀ2ĻN ŽĐ´ŽŧĨ^ƒ‰åûî;˙°Rމ=ËĨīIENDŽB`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/OIDAT™UÍą€ CŅtŒá(ēkÅŖp 8€ŽNŋ…§¯Čå.Ņ\ŦŦ–­\­„Đۇ^EJȨäAū°…x`36k?,ķUøœĢ/ūŧ89a&šÎIENDŽB`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR‚ũqh pHYsb&2 tEXtComment9Ö/SIDAT™UĖĄ€0DŅī"I´€¤ŦôA]IwŠp âšŋKíbo"KlC"ØBĐ#ūd1w$Đ —Eē÷¯DuÅäÍĮŋK§5 ›uÚ8Ŗ]rIENDŽB`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/WIDAT™UÍ1@@†ŅOJnā:{ˇ-\ëą7˜D3B0‰(¯~\­đZX%Ę,ŲŲShœŸ)d{-ĄŦ`œÜūIlĄšĐū*G¸ãęÅ5ę¸_8 Ą=gIENDŽB`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™]Íą €@DŅCKpË0ŗ•ëå;šFæ:X¸dA6 ^ö‡Á}ąžã"úT—0,?ÕSåhÅ@â0<ņ™ÚSš3Ä.úŠ/nT:hļ"ÕIENDŽB`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment9Ö/XIDAT™eÍ1 €0ƒá€CG¯ãÖk9Ļ8x­J/ŌŌ yb|ėÃôÃÍ*˙ ;¤Z5ôĸ\•ĮŠ´éŠ!é¯-r/Ī:ēĪ]IENDŽB`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRĪ5Đc pHYsb&2 tEXtComment9Ö/WIDAT™MÍą € DáK,,Ĩ´cFŖ¤5,Fâ"°Á›ŋ0Á‹&jņ¯zž°…čhŒØ%3 ›Ãô“oxmę"59pu8S°O“bQøčru&¨Ÿy^^‰9ķamGIENDŽB`‚leptonica-1.86.0/prog/recog/sets/train06.pa000066400000000000000000000752771506303110300204270ustar00rootroot00000000000000 Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment2Aũ܆cIDAT™-Íģ „0DŅ‹6 ¤:Y\ …@´4Ō°-XĸK$Íđ Îŧd42ˆÜŠÔˆˆø)đX_s˛ëŽWˆŽ*QûˆâŌ‰Ŗˇo OØ˛û„ÛėŧųWŨu=œ1Ķ‹*_ĀIENDŽB`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDRëĢhø pHYs.#.#xĨ?v tEXtComment4¨žyŗGIDAT™cø˙āÃ˙0\ÁđŋH3@đ?(ūÄ0øŠÕ?âƒPÜÔĮĀĀÁ‡*æ‚Ėō˙0XuJ0üą˙Ū¸:¤Đ!gKIENDŽB`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#xĨ?v tEXtComment5ߙI%WIDAT™UÍą Ā0 DŅ3)ŌfƒŦā ˛’G°7Ķ(2YāJwĘ !ˆW ū!‚Xā˙69%^ģÂõsk˜^1Yqķ@¤õŌLÅSÃ0ĸĢajģzë"´ũ=|÷šęIENDŽB`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment6FŸTIDAT™=ÍąĀ @Š”YÁŖą Įdl"6p: .‰p‘âŲ–ņ81ÅŊāvàĄ‡‚ĒŦž m;‰#€hž´ŸĻ!OüZ°PĨĢcÔŨz&ÖÅû4’´ŸgIENDŽB`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( =IDAT™c8ĀĀĀ HD˛˙h`ā˙Äæ?l`ø˙ˆCq3ŗCđ?$ü‡ ŗcâüü_žRÔ+jtmˆÚIENDŽB`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment8Ą(5˜SIDAT™cøW€áû†˙ø˙āÆíPÜ ;”?Ā Á@˜†600~ĀTËĀĀÄü? Čîcy>ņīĮ@;Ž\ē6Ķ˚m*IENDŽB`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment9Ö/VIDAT™=Íą €0 DŅ벆GËôŦ•TŦሂ# c'‚âIŋ9ĖaŋëÉXdHš‘äCŋYĐUīÆ!‚NSw‡ŒÍˇÕe”‡Qmháč/î> r%}ÄIENDŽB`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR ÷ģ] pHYs.#.#xĨ?v tEXtComment0¯ķŊĒOIDAT™cøo˙ƒáķ†Œ?>ņ‡ †‡?,ūą`8øG‚Ą†˙q€1ķ?,˜Œ›áĸį [€ÍûđŖh~ؐ}˙øß 4cq=%IENDŽB`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR ļ„°t pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™chüĀĀC@öAŌŅ0j#h`[ŋ)7&4ŽfIENDŽB`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment2Aũ܆SIDAT™=Ėą €0Á(ƒQØ 90Ąb ]Šp"ë:Û´Y”Qd;vą&ąe1gē`üdŅËŪhƒxŧm“ųĢ.PÜÎ*ę!ü}ĸ*˜oIIÅIENDŽB`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR‚ũqh pHYs.#.#xĨ?v tEXtComment36úėXIDAT™EĖģ€ DŅeH-ÅŌlÁ!°- °…g’á%28ÁžĪĘŲjÉęÍēÃĒqčôī&OæŗƒÛs˛ŪĩķŽ96=CĒČHäŒÂŽĐą\t4~Ŗøš5­i“mŪIENDŽB`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#xĨ?v tEXtComment4¨žyŗKIDAT™cø˙˙Ã˙‡@|ŠĄ˜‚˙ņ$üŠ?Õ<âà ÜüĄŊ‚` Ȇ› @3 ~Åé˙÷?Ę><}:y5IENDŽB`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment5ߙI%RIDAT™]Ėą €0@G)žd$˛°™‹<ĘO—.8 ÅÉzY~´•á”Äd#žŽėķö,ęnÕ j€ūsÉ@úä(0'ė$ví9ū,|g4’æ,(œIENDŽB`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment6FŸSIDAT™UÍą €0 DŅ )ŧVFbŠŦu‹$b—.PāĸHH¯û>cdb$"vÂŊĀ[A—Sįō,u2bSF$õy |LęļÔ\Úéē ũģ/…Į3ŗ0ußIENDŽB`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR‹Ņ pHYs.#.#xĨ?v tEXtComment71—( 4IDAT™ch``"F0bf°˙ĪPF˙č>Ígø/B˙ėAčũ€Ą0ô ũŠ#ķ!MĮÍKIENDŽB`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#xĨ?v tEXtComment8Ą(5˜cIDAT™Eą €0((Y!Ŗũ*T”ŦDAÉ –˛@¨Hņ"˜‰âô/ŋßF­Ä=Ĩ'Ε¸2ąÃŅÚfą‰¨[ė~dčĻiHQžüzŅũgqénĘ"’2ĘD¸úÔũÂū=TūŠOIENDŽB`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment9Ö/RIDAT™EÍÁ €0ĐlāHū‘ÜĸkEzp Kđ‹Ŋ}Ŗļxx„@ ˆ ށ(‰X2‘JãũÖž$ 9* >Â;žNÉ2īÍĄ^õŗ>jŧKÍAŽĘvÉIENDŽB`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒMIDAT™cø˙˙Ãö ?`øøņÃáPlĀpü 0´Ãđ?v,¸ũ 04Cņa06bˆy|`ø4˙3Äžō3Í9Žãx¸ôIENDŽB`‚ pix[18]: xres = 300, yres = 300 ‰PNG  IHDR ‚Ŗŧ pHYs.#.#xĨ?v tEXtComment1Øô<(IDAT™cø˙ŸáŸ<Ãú!Īđ˛‡! ~đ3<āgXĀĀđ€ ÂĨIENDŽB`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDRdÔē, pHYs.#.#xĨ?v tEXtComment2Aũ܆LIDAT™=É1@@DŅŲ(”ŽähF⠈ƒāJŞ~Č*^~&Ŗ4ZЎ֙îØ2Ŋ„ŸĩL|-:”¨ŦģļbƒÄžqâ°>Ę ?ƒ2—^2ę\IENDŽB`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment36úėQIDAT™UĖą €0Á“]n 9p[GDčŅ€+™„`’Ķū+’åÉĒ<”ĪÎÖpŋ ĒuŅũÁv[äĄK ķO†•čũĘsß?ŋˇ7„šĢ\ÍIENDŽB`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#xĨ?v tEXtComment4¨žyŗIIDAT™cø˙ũÃ˙ÃH¸ˆ˜˙03”f„ĘƒđÁ ĪĄø8ˇŚ Āø#ƒ\˜nb ü Ņ˙˙´ēAČ"|ËIENDŽB`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment5ߙI%TIDAT™UĖą €@DŅZ‚–f'rØÖ•2b`ēbbvÎaĸ,/Øeų܈øJ֋ŗŠËÂä]žˇŲ4ą71rX ~ˍF’˙^b-"ģQ:Wwg=Ņ :ļļ3”IENDŽB`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment6FŸYIDAT™UĖ1 €0DŅ/‚)=‚WÉíRzĨ‘^#’ Ä^ˆ#ÚX<–av—žŠžÅš‰Ŗˆ*‘Ų=“sĒÖEøLŗ Ø F÷c‹„>oNÉVŊ_|ÛüãZtŧT4ÍĪĪIENDŽB`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( >IDAT™c8ÎĐĀ€@6#Û?†âį ˙Aø<÷C1Ã?yūƒ„°}ÖG`˙âõ 7n,„fzb×IENDŽB`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment8Ą(5˜WIDAT™MĖĄ €0EŅK•]ŠŖ0 ĸkŊÁeƒĘŠ ^ĄqĖĪ}ŸE]EYŒÄYŦBžŽWb߄Ühļ•!y§Ü”¯Í:ğėÛåˇF/š÷=čTˆ-♱ŧŽIENDŽB`‚ pix[26]: xres = 300, yres = 300 ‰PNG  IHDRã/ pHYs.#.#xĨ?v tEXtComment9Ö/QIDAT™MĖÁ €@ DŅŗ-K˛Áƒm%X€-$lî͛ë,‹āáÁ@fB=8 —-=†ŠvķC ;¨Ž¯ Čŗ@SįS´Mņ.ĮīŽ\ÆŨėąH6—kMôIENDŽB`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDR ÕÛ% pHYs.#.#xĨ?v tEXtComment0¯ķŊĒOIDAT™cøūÃ?æ 0|`â X€ņá?PĖÁĐ Â˙8˜˙1āÄÍpĖÁp†úūą`xÄ ŗ(íb€Øųŋ˙÷7Ĩ{ŽömIENDŽB`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment1Øô<1IDAT™cø/ßĀđˆđ700@ņ†Šƒ1?–'ƒĖco`xĀÜĀ´Ąą4É+YķX&IENDŽB`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆TIDAT™EĖÁ €0ĐHÁQü“IÅÅŌMZē€7 kĒ„w ĘD#qĸÅÎ>IØŅ¨ŪË&Ú5}Ü3QĸŦ†R —äJdđ~ģã[ž9ĘÉ Í>IENDŽB`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment36úėVIDAT™MĖ!€0DŅO•{Ĩė•†Ā5ę°ÅU”%5ĪĖÎ,ÕD™ÄŊˆ$ą)˛æ‘hŋŨ.ˆ7ôÍŖ˙´Ō]ÂČ3+ķ^ōį,˛é0į4Ķüo¨čIENDŽB`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDRiÆ pHYs.#.#xĨ?v tEXtComment4¨žyŗIIDAT™cø˙øÃ˙Ã@܈†?0üƒa† €øųōA¸áÃa >Äí  @,Æ€ė˙@qdü(ķ‚Ĩ7x–ƒqĮIENDŽB`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment5ߙI%SIDAT™UĖą €0CQŖ+ŽdF!ģQ°–EÖHć ˜@Cņ:ûã "@‰AL\q}Ę$öĒq"GęZā'Ë"ÖĨÎĩwĢžûĶ՟yÃ9‘ę-ųÁIENDŽB`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#xĨ?v tEXtComment6FŸRIDAT™cø˙˙'`øSáĀđķ``ø ğø1˙(?bĮ 1Pū↿?| ~ Łj?ū8ĀđŖh3Ø^%Bˇ2ˇIENDŽB`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDRdÔē, pHYs.#.#xĨ?v tEXtComment71—( 9IDAT™cøßØĀĐĀĀĀЀû?60Čn`°ÜĀđ˙9‡â~(æo`ø'Ā€ø‡=qøO}ŗ0äv†õIENDŽB`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment8Ą(5˜ZIDAT™cøüøÃ㇎8ĀĐÃ? t;7å˜0`?ĀđH`b ˆ380´pĒe`āá ō?˜Šûd>éšķOūbķ4[TIé"IENDŽB`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment9Ö/SIDAT™MÍģ €0CŅKÅa4vĄČZ‰˛ˆ#H™ pøHH>…Ĩ÷dŽ ú,Ú$jE+›E-Ä6Āü3úöĘŋāāĘéûĪn𭤛HõĄbŪëAŸ’6ņ˜:q`IENDŽB`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR >ėĩ& pHYs.#.#xĨ?v tEXtComment0¯ķŊĒVIDAT™cøüÃ?Æ? øƒĄ†áG… Ç?6 ūČ0<üÃÃpđŗ€q#7˙c€cf fâF(ÍU Á< dČĖ5; vūį˙j6įHŨ•ĪIENDŽB`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment1Øô<+IDAT™cø'ßĀđˆq˙€ŠáÅü@ĖÄĖPšõ€æ30€0Œ,ŽVũ€IENDŽB`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment2Aũ܆eIDAT™-Íģ ƒ@DŅ‹RX¯Jp ‹)Á­ŒäÜÂZ4°!Á „ƒ“͇ڋōš?‰Ož%X ŧm´tyũ gVGĮhîī­¨yo{er Ä-™›7͓N~í0xôû4IENDŽB`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment36úėYIDAT™MÍą €0 ĀRd 2 Ŗ° UÖ Ę"˛€éRažˆ‚âdÉ/ŋa‘āN´*Ûpüt#\{?Ĩw",ČJ\–ᯁŠIü„93’ōĸžĸŽĒ?ÔũXøĪĒ:˛ap-IENDŽB`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment4¨žyŗJIDAT™cø˙üÃ˙Į@|ˆ¸Š™ø˙âŒ@ Tķˆ?ņg ēį@|üđ†v ŨÄČn^#7|`øĀ Á `>šžœíIENDŽB`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#xĨ?v tEXtComment5ߙI%VIDAT™cxPØĀđ€Š™˜ˆųž˙‡āĮ@ü@"~(ø`Ãņ ၸū†˙Pq?ŗÃ0P ;P=?Ëõ˛Íhš}Āžáį˙‚K0ĒžkIENDŽB`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#xĨ?v tEXtComment6FŸVIDAT™MÍą €0 Á(XÃŖyvHÁ\(‹ą€KˆāDBĸ¸ōõôŨx0n”@܄3]Š Ž´nÔĪbĀ °)ŅLKĒ?mKžm”|Žö94:\)#ÎIENDŽB`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment71—( +Íęg7"ļW#Ne] ÄÁа礟ėõV´1/ÚÖGŋđž33-ĶVIENDŽB`‚ pix[50]: xres = 300, yres = 300 ‰PNG  IHDRœĶû pHYs.#.#xĨ?v tEXtComment4¨žyŗLIDAT™cø˙ņÃ˙P|Š ˜‚˙A1ūá„? ęÕ>âãjÚØ007°0@ Ãų†ˆYafÖõō1 ęU‰f §âĪĄwĸČSf‚¤ Ę!ĄŽō0"›č›XÆŊ?{z{Ē6Ly|lƒ7‘éË •IENDŽB`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment9Ö/_IDAT™UÍĢ €@ĐIHVâhIYׂļ–ĐČ]h`fÅA<7ԁˆ–Č Q ąņ•0GÂ"mŒ?‹Ė4e %˛Øu2ÜņŲ•[Õ÷ \›~čã}ą#ށđ{;fĪvIENDŽB`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒKIDAT™cøĪüáㆠ>|øĀđđG0<ūcĀpø˙c`hbf<¸ 04ƒõBˁ˜Y6˙ĐŽ?@;˙ąų,5°Ø“˙čIENDŽB`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#xĨ?v tEXtComment1Øô<$IDAT™cøgßĀđˆä Äū ķņčũĀЀ ´š,$‚‰aŠIENDŽB`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment2Aũ܆[IDAT™EĖą €0@G”ŒĀ*ŋÉ$Œ‚°B$HIåņWčuraųŅWĸÍDˆë$îJėĄ‰L‚P Y  /ĸk?ҝžÉ0xę^". ŌĪß;8KlųIENDŽB`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment36úėUIDAT™MÍą €0 DŅŖĸÍ(-+ Ė…ŧH \é"’9C“â5Ö?s'¸7 S]4ćˆG:1ÕģzĪģW)ŋY`r,秊S­ bhKũŒā €Ÿ?Yfæ\IENDŽB`‚ pix[60]: xres = 300, yres = 300 ‰PNG  IHDR ‚Ŗŧ pHYs.#.#xĨ?v tEXtComment4¨žyŗ˙[2ŽnIENDŽB`‚ pix[62]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment6FŸQIDAT™UĖą €0CQG€2ڍBÄb ,b68‰&4Ž €âŋ°•ˆYVC°āũÕhhN,§Ä#gI nHŽėõcŧˆƒļ]×Ä‹4Ô" 4öIENDŽB`‚ pix[63]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment71—( ;IDAT™cø˙Ŗ˜ĘâÜĀ Çū7q;ķ70üƒaų†?Pü @Âpq{ ZûŠ,‚2fˇęIENDŽB`‚ pix[64]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment8Ą(5˜WIDAT™5Íą €0 ĀG)ŗ‚Gķ*ŠX+ką€K)xcQ\å˙7V7x3ØmxÜpER!Ń&osg.mė ) ÎI^ų@_?ųԖ2SœŅė!´7†đāļ‰IENDŽB`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒHIDAT™cøĮüá‡ã†>0<øPĀđˆū0`hâæ?`Ė Æ ė03Ãôš2ë!Ô\??0üâė 12/rDo‘IENDŽB`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDRÆŪp pHYs.#.#xĨ?v tEXtComment1Øô</IDAT™cøoĪđGžá<=°gø ĪđÆäą!{lH¤ņ?C ÔĩŅžé]ô´IENDŽB`‚ pix[67]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment2Aũ܆bIDAT™-Ėą €0„á,,]áíāŽâN  KWR,\ãÜĀ2…$ž9>¸æŽ4ˆØˆ’C#įc\n‹TëĄ˜~#ėNģ‘Ŋä ōâZ‘:ņÆ;1w͟€*U]¯s/ŅB~m"IENDŽB`‚ pix[68]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment36úėYIDAT™EĖĢ€0EŅËDŦM´@i)! ‚ļÂP-ŦÃ>‰"lâ¨÷A&<‰6‰­ k…4øītŅ[Xśū~Ŗpxæôp=°‡4hČaÁT°øąø¨cĄf}ĒŲ2‚Šē,ÁIENDŽB`‚ pix[69]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#xĨ?v tEXtComment5ߙI%UIDAT™UĖą €0@Ŗ/(3Ģ0(‹9ĸČaƒ”H?JCq-ūD Ë´Ę&NÜĶȌ(…¸Q{Øá?U˛˜:kCŌ.DÖĪ‘ę˙u~“W;A.IYĢIENDŽB`‚ pix[70]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment6FŸTIDAT™MË1 €0ƒá” ŊRĻ8ôZ7xJ/Ppqk¨‚ßô'hF´YrÄ.%Ŗ3YkėRãg!G¸IÔ|øã^éĮ´)˛eĸę{âyW4>üx<,IENDŽB`‚ pix[71]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment71—( @IDAT™cø˙˙ÆH¸Hļ?>ĀĐ”›˙A˙Šũ? Åí@ĖÅüūAņ$ü ÃÄAęūËŸc9?üˇIENDŽB`‚ pix[72]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#xĨ?v tEXtComment8Ą(5˜aIDAT™%Íą €0 DŅ((Œ–]R¤dĨ Ö0b”)"ÂYČzÖ–‘>ã6ãi‘ŗŽHâŲ•)ē)ĶΧ%(ÁŠ•*,M:Ŧ/ė’˙é‘CŋÍūŽĻÎąŲJa7RNŲ÷IENDŽB`‚ pix[73]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment9Ö/XIDAT™EĖą €0 DŅßĨĖd4F`”‚’•’Š5.bw”`#$Ч“,}síblĸWQģHAa&ÛL˛ØâđÛĪ<Ą-`îļP^‡7ÕÄÆįô˙‡hYhŌ¤i3ØAŗ1IENDŽB`‚ pix[74]: xres = 300, yres = 300 ‰PNG  IHDR ÷ģ] pHYs.#.#xĨ?v tEXtComment0¯ķŊĒPIDAT™cøĪüƒáãüđĄ‚áÏ †,ū‘`8ø„9Œ˜†Čs04‚ôüa °9æ}üa6dĪ }˙Ø H5:AÔ}šIENDŽB`‚ pix[75]: xres = 300, yres = 300 ‰PNG  IHDRÆŪp pHYs.#.#xĨ?v tEXtComment1Øô<2IDAT™cøŋŸáŸ<Ãyz ĪđŽėÁHžáŲ#!$.D}``8ĀĀĐœ´–ąÅIÉIENDŽB`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆YIDAT™=Ėą €0„á?XX:‚›Č›L"Žunq”)‚úĸ`ņÁwGDꄂ“X“ą5™×âb“>rģŒ3wˇīŽ^T˙ŠŖ(äŽęŠ÷1ĸkéôf ,†-ZŦIENDŽB`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment36úėSIDAT™MÍą €@ …áHŠ+ŗ’Ŗ)ŽõÜ$āZZŨųŸ‚Hø —ÄjČĒË4€š$ķ.ģņąĐhfŋė$ŲL;íSā?}2ÁUī¯,ē˜3¸Œ6ĐIENDŽB`‚ pix[78]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#xĨ?v tEXtComment4¨žyŗBIDAT™cøüÃ˙f fFÅ˙€ø˙€â@üˆņq nâ~ –bø3‡J3Íʃđ˙ ‘y.Ž5ÃxéIENDŽB`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#xĨ?v tEXtComment5ߙI%XIDAT™eĖą €0 ĀG)<+°^*kũ(A´.ƒ„ŪTH'Ų~ųq "G ižˆ^ĈĖŪP9n0¯—IENDŽB`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment6FŸMIDAT™mĖ= €0Dá/–Ŗ){ą-ŧFd Û¤ (Ŧƒ?Å×=r"N(ü`xøˆT0ūaÁpøK04Ã13ƒ1æ€cˆ:ˆ~Yøã‡ † vũcūÁđū$7ŨÎãÎCIENDŽB`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR Ü0Ž_ pHYs.#.#xĨ?v tEXtComment1Øô<+IDAT™cøoßĀđGžá3 á@üƒ\l]üB@ÃŊĘpĻ-3ŌÅIENDŽB`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment2Aũ܆[IDAT™=Íģ@@…áß„Jp+Q˖ ŗ;m­Nn  Œu0_vŊS'ãD‹ËnŦHÂmzÅ`D7ļ¨Q’S[éœS[Į`”ōŦėŠl1?᧯ Ā 'dŋœaIENDŽB`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment36úėXIDAT™MÍ1 €0 Đ/{Ö›HppôJuōzŒŨꏈHx„OŸ NDĢÄÆō°ŸK‰qŠöz"\=ĒÅĖ—Īî@ę/åŊ 3‡éV?ûĘäū7TC aIENDŽB`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDRœĶû pHYs.#.#xĨ?v tEXtComment4¨žyŗDIDAT™cø˙áÃ˙P| 7@1˙b0tøÃđ¨ū!?âį@|¨§áC ƒÍ›[Ô/ÔÍÄ,´e@EģøIENDŽB`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment5ߙI%LIDAT™cxđáÃ(f„bf –â˙ņ{ f‡ˆƒāáŽ?pã÷ūŖáv fĘ!đöƒ@Üx€Ąd?ØLŪA6 AÄõöIENDŽB`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment6FŸRIDAT™=ÍÁ €0…áW9°ģyčZ4]7āhŖžÆØÃw üÜę8‹#174괇Ą†C=Ÿ=„xS¸6’]°TÎŋžŽÆ>æ/ēÄ_vČ/{ÄˇĶ IENDŽB`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment71—( 8IDAT™cøĪp€Ą8ņūä`ØÄ˙Cq;ķ#đ? ū#Á?ˆÄ ĩ˙ė:Ė3ĘøÚėbIENDŽB`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDR!™­Į pHYs.#.#xĨ?v tEXtComment8Ą(5˜_IDAT™EÍģ €@EŅ+6˛™ĨØÆ–an`aļņĀ“–Į&šŧÁ]x/Ŧ§‰#Ŧ%‡ô˜ŋ+ËhŠnkŪŪȟľEgDc…É‹§ĮZī]ąŸĸ´ņˇ Ž jžB?ĨëtIENDŽB`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment9Ö/WIDAT™MÍą € DáK,,Ĩ´cFŖ¤5,Fâ"°Á›ŋ0Á‹&jņ¯zž°…čhŒØ%3 ›Ãô“oxmę"59pu8S°O“bQøčru&¨Ÿy^^‰9ķamGIENDŽB`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR ÕÛ% pHYs.#.#xĨ?v tEXtComment0¯ķŊĒGIDAT™cøĪūƒáķ0L¨`øđŖ‚áÁ †ƒ$ ø7ƒ13^ĖÆÍP 3ã!Đŧ‡? f˙0ÚÃąķ˙ų9|5ŲœûáIENDŽB`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yŲ pHYs.#.#xĨ?v tEXtComment1Øô<"IDAT™cøaĮĀCėØ1| =@C ôá==˙üŌ™IENDŽB`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆[IDAT™-Ėą €0CŅ((Q¸Ņ’ Q8‰‚5‚X tQĀŠ'Y:û(ƒsuNjœÕ-“Ė–_$¤OÔũP÷ԊöĩwŪ_ŖT#ã”=ŽĨß6€1-bĩBAIENDŽB`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment36úėUIDAT™5Ëģ€0 Pq)R2Ģd7 ¯%.‹xs4錒ƒâ5ú +…đč$NŸÚŌ?Š,Õå%FŒųŅūVöĖ>d`1)ŋęŌ°kgÚS?×|JH7M㠚3IENDŽB`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDRiÆ pHYs.#.#xĨ?v tEXtComment4¨žyŗ;IDAT™cø˙đÃ˙ƒP܈„!ø˙â@üņ ?âãÍÚĄ˜¨ ˜×Ä  @ K9Žē¤¤ĪIENDŽB`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment5ߙI%TIDAT™-ĖŅ €0 Đ+ũč§#¸Š›‰ÎuāG×Hq7¨—ďG —††_‘*MvbLâ™9c§ŒēšItÛÂ|‘,u9Ĩ(s5M?ËA\Ūá]+?.í6ž|PÚfIENDŽB`‚ pix[100]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment6FŸSIDAT™UĖą €0 DŅŗ2+x´Œ‚”*‹ą€é\ ĀŲÅĶÖ7–t„wÜEqqĶL¯•‘Ãۈ Ü ŧK(ĀĪ,ZÎā_r6ÁvmörJ8UMšä<IENDŽB`‚ pix[101]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#xĨ?v tEXtComment71—( AIDAT™c8Āđ€ĄAˆ€8ņ˙ã ö˙0Ô?Āđ˙8Ÿâ~ –‡āPüĮūÃ4ü F’Æd8ĘČqIENDŽB`‚ pix[102]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment8Ą(5˜YIDAT™-Íą Ā CŅR°Ŗ1Bļ`-"ŠŦqQ¸ō „r@Š'š°lF,ŠđXæuÍwßfž\= ›ū}%ģÄ[Ŋ§‰bP:Äile¤Ĩõŧö}aũõC>~5Ēēá%IENDŽB`‚ pix[103]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment9Ö/XIDAT™]ÍĄ€0DŅuHJāJ ZI ´ĀD¤.æDÚØ {TƒxfÅ_ÄB°~ĩ%ˆ!’Ø~ Yv8b5ÜŅĨ׊†ËÖ]ĸnvmE_#+<6yēę 1IENDŽB`‚ pix[104]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment0¯ķŊĒHIDAT™cø_˙áû†É>~üĀđđÆÃ? Āøø†v0``‡á ˜ø ÃÔÁôĀÍzübūÃûūÛFŧ6’fĒųâIENDŽB`‚ pix[105]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆RIDAT™MĖÁ €@DŅ1` –"Šąąąė`Í^<ÕŅp0䝀ˆč‰{—b Ÿ]–ēá ö˟MÔhŖ:“ˆĢNŠĄ[ĩˆWNGxåÃR9ƒ˜ąéIENDŽB`‚ pix[106]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment36úė\IDAT™-Ėą €0@ŖY#Ŗe”‚1X”‚5Œ€G4ß'ĸ¸â-ŋᑰ@ԝX6!Q˜QŦSŽû–vJu]l"žžĢ7xĘ/ Ņ’vŗö3Ž™xõßV~Ä=õjvÁ IENDŽB`‚ pix[107]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment4¨žyŗ8IDAT™cø˙üÃ˙Ã@܌„™øÃŚQņûv fĀĐÄ ŒĐÕūg|Āđ!áCZŌ7ÜūĸIENDŽB`‚ pix[108]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment5ߙI%RIDAT™eĖą €0CQŖ)3ŲXɈ‚9¨h/ĸšƒhÅëė8‡t¯$…ˆøōL´•؍ØŦ"nŽŸÅ€áQ‘$k_ô+1ÎjŠ}öŧæMÔ1|€u06ũ¨cøSĖį “Ü[k­IENDŽB`‚ pix[111]: xres = 300, yres = 300 ‰PNG  IHDR!‡Ũ€ pHYs.#.#xĨ?v tEXtComment8Ą(5˜`IDAT™5Íą €0 ĀG4!Ŗx´ôŦÁ.Ŧ‘ˆRē°l>‰urķ~#Bá›Â¨_M¯ũ2îIP‡RPGŽÖ„;ŖÕ„W#O8‡Xž`G°ĪŨdŪ);|Wđ˙_B>7ĄąĨIENDŽB`‚ pix[112]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#xĨ?v tEXtComment9Ö/TIDAT™MÍą €0 DŅß1ĢdŦtŦeD‘9"0ĸ1MŒĸxŌŋępÚ(œEØĢPaŅÎÇ؝Âļč4CË ˇ?a}\ŋjĐI°ß7É`AãT§åėIENDŽB`‚ pix[113]: xres = 300, yres = 300 ‰PNG  IHDRëĢhø pHYs.#.#xĨ?v tEXtComment0¯ķŊĒSIDAT™cøĮ˙ƒáķ†Ž?><øÁđņGÃà ‡AøC3ˇ˙á€cvūĮ€Š˙Āhˆ|3KͰ`x 4ë!Đ܏€ö0ū`øĮüB2jßúIENDŽB`‚ pix[114]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yŲ pHYs.#.#xĨ?v tEXtComment1Øô<IDAT™cøņá€=°cø@z ĮĐĀķ˙:!Ā)¤åŪIENDŽB`‚ pix[115]: xres = 300, yres = 300 ‰PNG  IHDRã/ pHYs.#.#xĨ?v tEXtComment2Aũ܆YIDAT™MĖ!€0Ā.$Oā)ôaˆĀ—ęøÆđˆá Ŗ†4W×ĸnBé…; jY2ŅYhđIšˆ]D•PŖyķx[ũ1y&ŽB‘~"ĸûīėô”ū-ļģŖ§4IENDŽB`‚ pix[116]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment36úėYIDAT™-Ė!Ā Đ.äŽÄÍ&“ģRÉ×`7øÉ ‚„†xâįˇEÛ s7"‘¸ KøY˜w–ū,Yk522'đH–âŌËĢūlíĒsmĩIƒ~Gģdz?OĪļę|IENDŽB`‚ pix[120]: xres = 300, yres = 300 ‰PNG  IHDR ‚Ŗŧ pHYs.#.#xĨ?v tEXtComment71—( 9IDAT™ch`€Fâ?ĖP˙˜á˙s†˙īūŸgøßĪđ>Ãy†`ôˆė~€Ņ"ûī?)!„:õĐwIENDŽB`‚ pix[121]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment8Ą(5˜]IDAT™-ËĄ €0á#ˆJVęf ŦôP]Ŗ-Á@Ōū&ŸģŖ âéEęÄEHžđx–f6[ēuąI؇į›ŦØ‡õā2 UЈPÅ/ķ~˛ŦBqiŌÕ=x3IõĨŨt[ŅW$ZäĀ47äŽ6ˆ7IENDŽB`‚ pix[123]: xres = 300, yres = 300 ‰PNG  IHDR ÷ģ] pHYs.#.#xĨ?v tEXtComment0¯ķŊĒNIDAT™cø˙Ã?vūņøÃĮŸ?ūøÁpđÃá? Íh˜ų; f@ãCÕū°ãÃ?*ņÃ@ŗí`üÁđ‡læ&7žúMĮĄIENDŽB`‚ pix[124]: xres = 300, yres = 300 ‰PNG  IHDR ßŌŠä pHYs.#.#xĨ?v tEXtComment1Øô<+IDAT™cøWÁđĮ‚á€C}ŖD H*(ÁđA‚á4pø› +BœIENDŽB`‚ pix[125]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆]IDAT™-Ę1 Ã0Ņ1.Rú:Š÷f‘ÉÁō/"páV&!eRŧj†ūõ!Ę,Ž]ŒŒQˇKĻP‚ąy?äOŧ›{šEô$ÚꆸģņiÆų5”EFĻŋY?d›5k+ųIENDŽB`‚ pix[126]: xres = 300, yres = 300 ‰PNG  IHDRæĩŋ pHYs.#.#xĨ?v tEXtComment36úė`IDAT™EĖ!€0DŅI*¸FÆMHŽATr…%lL›4Y~‚@<ŗ;3ōËto0ĶaŖf¤ōÛáüüYĪĻFžq{Čz‰ō*y˙d$„jÔPŲdc)ĻĖÆčNöŖâ?Q ˙ŊgIENDŽB`‚ pix[127]: xres = 300, yres = 300 ‰PNG  IHDRĪ5Đc pHYs.#.#xĨ?v tEXtComment4¨žyŗKIDAT™cø˙ųÃ˙@| 7@1˙aÆ  øPÍ ūď~`8 ÄĮ¸šĄ€Ą@4Ø d3 ~ÅAøœûŖ>ŗ}–đƒIENDŽB`‚ pix[128]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment5ߙI%UIDAT™eĖą €0 ĀG)(Y)›!D‘ĩąˆ#0ĸĄ›ĐQ\ņ~ŊĄ7Ąøt.š8ŦŲ­å¸ËBT%6ͰķouSđ>Ŋ2ŠĨŗī%ū÷Ä5ō%<’ė´IENDŽB`‚ pix[129]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment6FŸSIDAT™eÍ!€0DŅIVp­^­YÁĩ†TôMV`Áĩ†eięOÍO^?ˆAâni˛P?Qąûr%4šģô´ú“ĻEoņĶ…x6ždĸ:Hœ4YŖIENDŽB`‚ pix[130]: xres = 300, yres = 300 ‰PNG  IHDR‹Ņ pHYs.#.#xĨ?v tEXtComment71—( 6IDAT™cø˙ŸáC1‚P˙G†ųŸögø˙œá˙q0ę#~†˙ō ˙Āč ũ@E0qņģ"’É” /IENDŽB`‚ pix[131]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#xĨ?v tEXtComment8Ą(5˜SIDAT™-Íą Ā DŅ‹((UOJ‘’•ˆ˛ˆŗt.Rä)^åoŧ#–ˆķ%šÉX€˛e‹SčËĄé WWkŅW߾͉"mĒŊcK›?Ū*K̓GIENDŽB`‚ pix[132]: xres = 300, yres = 300 ‰PNG  IHDR‚ũqh pHYs.#.#xĨ?v tEXtComment9Ö/SIDAT™UĖĄ€0DŅī"I´€¤ŦôA]IwŠp âšŋKíbo"KlC"ØBĐ#ūd1w$Đ —Eē÷¯DuÅäÍĮŋK§5 ›uÚ8Ŗ]rIENDŽB`‚ pix[133]: xres = 300, yres = 300 ‰PNG  IHDR ÷ģ] pHYs.#.#xĨ?v tEXtComment0¯ķŊĒQIDAT™cø˙˙Ã˙å?~|üÁđņ˙Š`xüĮ‚áņ? †Ã˙$Œ9Øá˜ CÄÛĄŦūP/Č(ū 2hĮĪ?ū°íä˙]:EV”IENDŽB`‚ pix[134]: xres = 300, yres = 300 ‰PNG  IHDR ‚Ŗŧ pHYs.#.#xĨ?v tEXtComment1Øô<)IDAT™cøgĪđAžĄ†~؃Đ ’Į@öčč‡=B=ˆ!2 ϐ”|”ZIENDŽB`‚ pix[135]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment2Aũ܆]IDAT™-ÍË € Đ2#8Šėâ âÉ1\ĨNārķ ņ &ŦŸ4/ŊĩH qôĉ5[°˜Ķ/#.|(‹ˇ8=Q)ŖLĸŌ𓁏ŠEŸ-¨¸ž6ú¨ŧŽô8¨@c&IENDŽB`‚ pix[136]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment36úėZIDAT™=Ė­ Ā ākHFč*ė†@vĨk]˛HD“×#M*>u?čF\…ȧHâę'ÉŨSfI<116ĸŠ×k„° dqŋ¯,,ú9ôQ´­xvžûé7búqÔIENDŽB`‚ pix[137]: xres = 300, yres = 300 ‰PNG  IHDRëĢhø pHYs.#.#xĨ?v tEXtComment4¨žyŗ=IDAT™cø˙ņÃ˙‡Hø 7B1#˙ƒâ?@ų@üŠAęßq;70p1˜†›à ?~0H€0‡C Åcč‚IENDŽB`‚ pix[138]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment5ߙI%XIDAT™UĖĄ €0„á#•ĄŖĐŨ€•Ž ŦPöLI9Z…øĖŸÜĄ<„! ģAÅ.;˙MÅ;ŪŌ‘¸>Zŧ9\ŪĊIENDŽB`‚ pix[144]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#xĨ?v tEXtComment0¯ķŊĒDIDAT™cøo˙€áû†Ė>||Āđđ˙H`8 Æ Í@˜D ҧ6ã ĐŦ‡? æÚķˆ˙ņ?ĸ3 DéąôIENDŽB`‚ pix[145]: xres = 300, yres = 300 ‰PNG  IHDRâ@Ȃ pHYs.#.#xĨ?v tEXtComment1Øô<,IDAT™cøgßĀđGžĄˆņ ūŨ„Af}āÚÁĀÆį6 |-øķ1=IENDŽB`‚ pix[146]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#xĨ?v tEXtComment36úėVIDAT™]Ė!Ā ŅmHŽÄŨ*\iIׅũI ĸ ]’ĒŠį&ƒˆæˆr‰Ōˆķ§Ę*rI"O˜úŽ~´ˆe°&%‰ûøl#rW¯Į]ųáW9”&NÄũIENDŽB`‚ pix[147]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#xĨ?v tEXtComment9Ö/XIDAT™EÍĄ €0„ás•Œ#ą ÉJ×tVx-Ч(WJ‚øÔÉáî‰Üˆ”ˆy#élhr…W0¨7Iĸظ6Å—D'ĻęüėD<ôĩ^ø÷î9Їą BIENDŽB`‚ pix[148]: xres = 300, yres = 300 ‰PNG  IHDR ÷ģ] pHYs.#.#xĨ?v tEXtComment0¯ķŊĒMIDAT™cøĮüƒáè`øđÂáá–`8ø‡Œ˙ã`h†c0f†Ō¨Ąîā?~ °9 ķ>ü¨`øQ´‹ˆvūc˙$¸6îĮÃ%IENDŽB`‚ pix[149]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yŲ pHYs.#.#xĨ?v tEXtComment1Øô<$IDAT™cøgĮđCŽĄAށŒ€ŒhȎhV˙€)gĮBˆ–IENDŽB`‚leptonica-1.86.0/prog/recog_bootnum1.c000066400000000000000000000264421506303110300176220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recog_bootnum.c * * This does two things: * * (1) It makes bootnum1.pa and bootnum2.pa from stored labelled data. * * (2) Using these, as well as bootnum3.pa, it makes code for * generating and compiling the the pixas, which are used by the * boot digit recognizer. * The output of the code generator is files such as autogen_101.*. * These files have been edited to combine the .c and .h files into * a single .c file: * autogen_101.* --> src/bootnumgen1.c * autogen_102.* --> src/bootnumgen2.c * autogen_103.* --> src/bootnumgen3.c * * To add another set of templates to bootnumgen1.c: * (a) Add a new .pa file: prog/recog/digits/digit_setN.pa (N > 15) * (b) Add code to MakeBootnum1() for this set, selecting with the * string those templates you want to use. * (c) Run recog_bootnum. * * This makes a new /tmp/lept/recog/digits/bootnum1.pa. * Replace prog/recog/digits/bootnum1.pa with this. * * This makes new files: /tmp/lept/auto/autogen.101.{h,c}. * The .h file is the only one we need to use. * Replace the encoded string in src/bootnumgen1.c with the * one in autogen.101.h, and recompile. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "bmfdata.h" static PIXA *MakeBootnum1(void); static PIXA *MakeBootnum2(void); l_int32 main(int argc, char **argv) { PIX *pix1; PIXA *pixa1, *pixa2, *pixa3; L_STRCODE *strc; if (argc != 1) { lept_stderr(" Syntax: recog_bootnum\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog/digits"); /* ----------------------- Bootnum 1 --------------------- */ /* Make the bootnum pixa from the images */ pixa1 = MakeBootnum1(); pixaWrite("/tmp/lept/recog/digits/bootnum1.pa", pixa1); pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 100, 0); pixDestroy(&pix1); pixaDestroy(&pixa1); /* Generate the code to make the bootnum1 pixa. * Note: the actual code we use is in bootnumgen1.c, and * has already been compiled into the library. */ strc = strcodeCreate(101); /* arbitrary integer */ strcodeGenerate(strc, "/tmp/lept/recog/digits/bootnum1.pa", "PIXA"); strcodeFinalize(&strc, "/tmp/lept/auto"); lept_free(strc); /* Generate the bootnum1 pixa from the generated code */ pixa1 = l_bootnum_gen1(); pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); /* pix1 = pixaDisplayTiled(pixa1, 1500, 0, 30); */ pixDisplay(pix1, 100, 0); pixDestroy(&pix1); /* Extend the bootnum1 pixa by erosion */ pixa3 = pixaExtendByMorph(pixa1, L_MORPH_ERODE, 2, NULL, 1); pix1 = pixaDisplayTiledWithText(pixa3, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 100, 0); pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa3); /* ----------------------- Bootnum 2 --------------------- */ /* Read bootnum 2 */ pixa2 = pixaRead("recog/digits/bootnum2.pa"); pixaWrite("/tmp/lept/recog/digits/bootnum2.pa", pixa2); pix1 = pixaDisplayTiledWithText(pixa2, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 100, 700); pixDestroy(&pix1); pixaDestroy(&pixa2); /* Generate the code to make the bootnum2 pixa. * Note: the actual code we use is in bootnumgen2.c. */ strc = strcodeCreate(102); /* another arbitrary integer */ strcodeGenerate(strc, "/tmp/lept/recog/digits/bootnum2.pa", "PIXA"); strcodeFinalize(&strc, "/tmp/lept/auto"); lept_free(strc); /* Generate the bootnum2 pixa from the generated code */ pixa2 = l_bootnum_gen2(); /* pix1 = pixaDisplayTiled(pixa2, 1500, 0, 30); */ pix1 = pixaDisplayTiledWithText(pixa2, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 100, 700); pixDestroy(&pix1); pixaDestroy(&pixa2); /* ----------------------- Bootnum 3 --------------------- */ /* Read bootnum 3 */ pixa1 = pixaRead("recog/digits/bootnum3.pa"); pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); pixaDestroy(&pixa1); /* Generate the code that, when deserializes, gives you bootnum3.pa. * Note: the actual code we use is in bootnumgen3.c, and * has already been compiled into the library. */ strc = strcodeCreate(103); /* arbitrary integer */ strcodeGenerate(strc, "recog/digits/bootnum3.pa", "PIXA"); strcodeFinalize(&strc, "/tmp/lept/auto"); lept_free(strc); /* Generate the bootnum3 pixa from the generated code */ pixa1 = l_bootnum_gen3(); pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); /* Extend the bootnum3 pixa twice by erosion */ pixa3 = pixaExtendByMorph(pixa1, L_MORPH_ERODE, 2, NULL, 1); pix1 = pixaDisplayTiledWithText(pixa3, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa3); #if 0 pixa1 = l_bootnum_gen1(); /* pixa1 = pixaRead("recog/digits/bootnum1.pa"); */ pixaWrite("/tmp/lept/junk.pa", pixa1); pixa2 = pixaRead("/tmp/lept/junk.pa"); pixaWrite("/tmp/lept/junk1.pa", pixa2); pixa3 = pixaRead("/tmp/lept/junk1.pa"); n = pixaGetCount(pixa3); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa3, i, L_CLONE); lept_stderr("i = %d, text = %s\n", i, pixGetText(pix)); pixDestroy(&pix); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); #endif return 0; } PIXA *MakeBootnum1(void) { const char *str; PIXA *pixa1, *pixa2, *pixa3; pixa1 = pixaRead("recog/digits/digit_set02.pa"); str = "10, 27, 35, 45, 48, 74, 79, 97, 119, 124, 148"; pixa3 = pixaSelectWithString(pixa1, str, NULL); pixaDestroy(&pixa1); pixa1 = pixaRead("recog/digits/digit_set03.pa"); str = "2, 15, 30, 50, 60, 75, 95, 105, 121, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set05.pa"); str = "0, 15, 30, 49, 60, 75, 90, 105, 120, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set06.pa"); str = "4, 15, 30, 48, 60, 78, 90, 105, 120, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set07.pa"); str = "3, 15, 30, 45, 60, 77, 78, 91, 105, 120, 149"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set08.pa"); str = "0, 20, 30, 45, 60, 75, 90, 106, 121, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set09.pa"); str = "0, 20, 32, 47, 54, 63, 75, 91, 105, 125, 136"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set11.pa"); str = "0, 15, 36, 46, 62, 63, 76, 91, 106, 123, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set12.pa"); str = "1, 20, 31, 45, 61, 75, 95, 107, 120, 135"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set13.pa"); str = "1, 16, 31, 48, 63, 78, 98, 105, 123, 136"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set14.pa"); str = "1, 14, 24, 37, 53, 62, 74, 83, 98, 114"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixa1 = pixaRead("recog/digits/digit_set15.pa"); str = "0, 1, 3, 5, 7, 8, 13, 25, 35"; pixa2 = pixaSelectWithString(pixa1, str, NULL); pixaJoin(pixa3, pixa2, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return pixa3; } PIXA *MakeBootnum2(void) { char *fname; l_int32 i, n, w, h; BOX *box; PIX *pix; PIXA *pixa; L_RECOG *recog; SARRAY *sa; /* Phase 1: generate recog from the digit data */ recog = recogCreate(0, 40, 0, 128, 1); sa = getSortedPathnamesInDirectory("recog/bootnums", "png", 0, 0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { /* Read each pix: grayscale, multi-character, labelled */ fname = sarrayGetString(sa, i, L_NOCOPY); if ((pix = pixRead(fname)) == NULL) { lept_stderr("Can't read %s\n", fname); continue; } /* Convert to a set of 1 bpp, single character, labelled */ pixGetDimensions(pix, &w, &h, NULL); box = boxCreate(0, 0, w, h); recogTrainLabeled(recog, pix, box, NULL, 0); pixDestroy(&pix); boxDestroy(&box); } recogTrainingFinished(&recog, 1, -1, -1.0); sarrayDestroy(&sa); /* Phase 2: generate pixa consisting of 1 bpp, single character pix */ pixa = recogExtractPixa(recog); pixaWrite("/tmp/lept/recog/digits/bootnum2.pa", pixa); recogDestroy(&recog); return pixa; } leptonica-1.86.0/prog/recog_bootnum2.c000066400000000000000000000153531506303110300176220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recog_bootnum2.c * * This shows how to convert from a pixa of digit images to * a very compressed representation, including a filtering step * where selected pix are removed. This method was used to * generate the recog/digits/digit*.comp.tif image mosaics. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static const char *removeset = "4,7,9,21"; void ProcessDigits(l_int32 i); void PixaDisplayNumbered(PIXA *pixa, const char *rootname); l_int32 main(int argc, char **argv) { setLeptDebugOK(1); lept_mkdir("lept/digit"); ProcessDigits(5); return 0; } /* ----------------------------------------------------- */ void ProcessDigits(l_int32 index) { char rootname[8] = "digit5"; char buf[64]; l_int32 i, nc, ns, same; NUMA *na1; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixa1, *pixa2, *pixa3; /* Read the unfiltered, unscaled pixa of twenty-five 5s */ snprintf(buf, sizeof(buf), "digits/%s.orig-25.pa", rootname); pixa1 = pixaRead(buf); /* Number and show the input images */ snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.orig-num", rootname); PixaDisplayNumbered(pixa1, buf); /* Remove some of them */ na1 = numaCreateFromString(removeset); pixaRemoveSelected(pixa1, na1); numaDestroy(&na1); snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.filt.pa", rootname); pixaWrite(buf, pixa1); /* Number and show the filtered images */ snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.filt-num", rootname); PixaDisplayNumbered(pixa1, buf); /* Extract the largest c.c., clip to the foreground, * and scale the result to a fixed size. */ nc = pixaGetCount(pixa1); pixa2 = pixaCreate(nc); for (i = 0; i < nc; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); /* A threshold of 140 gives reasonable results */ pix2 = pixThresholdToBinary(pix1, 140); /* Join nearly touching pieces */ pix3 = pixCloseSafeBrick(NULL, pix2, 5, 5); /* Take the largest (by area) connected component */ pix4 = pixFilterComponentBySize(pix3, 0, L_SELECT_BY_AREA, 8, NULL); /* Extract the original 1 bpp pixels that have been * covered by the closing operation */ pixAnd(pix4, pix4, pix2); /* Grab the result as an image with no surrounding whitespace */ pixClipToForeground(pix4, &pix5, NULL); /* Rescale the result to the canonical size */ pix6 = pixScaleToSize(pix5, 20, 30); pixaAddPix(pixa2, pix6, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } /* Add the index (a "5") in the text field of each pix; save pixa2 */ snprintf(buf, sizeof(buf), "%d", index); for (i = 0; i < nc; i++) { pix1 = pixaGetPix(pixa2, i, L_CLONE); pixSetText(pix1, buf); pixDestroy(&pix1); } snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.comp.pa", rootname); pixaWrite(buf, pixa2); /* Number and show the resulting binary templates */ snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.comp-num", rootname); PixaDisplayNumbered(pixa2, buf); /* Save the binary templates as a packed tiling (tiff g4). * This is the most efficient way to represent the templates. */ pix1 = pixaDisplayOnLattice(pixa2, 20, 30, NULL, NULL); pixDisplay(pix1, 1000, 500); snprintf(buf, sizeof(buf), "/tmp/lept/digit/%s.comp.tif", rootname); pixWrite(buf, pix1, IFF_TIFF_G4); /* The number of templates is in the pix text string; check it. */ pix2 = pixRead(buf); if (sscanf(pixGetText(pix2), "n = %d", &ns) != 1) lept_stderr("Failed to read the number of templates!\n"); if (ns != nc) lept_stderr("(stored = %d) != (actual number = %d)\n", ns, nc); /* Reconstruct the pixa of templates from the tiled compressed * image, and verify that the resulting pixa is the same. */ pixa3 = pixaMakeFromTiledPix(pix1, 20, 30, 0, 0, NULL); pixaEqual(pixa2, pixa3, 0, NULL, &same); if (!same) lept_stderr("Pixa are not the same!\n"); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); } /* ----------------------------------------------------- */ void PixaDisplayNumbered(PIXA *pixa, const char *basename) { char buf[64]; l_int32 fill, color, d; L_BMF *bmf; PIX *pix1; PIXA *pixa1, *pixa2; bmf = bmfCreate(NULL, 4); pixaGetPixDimensions(pixa, 0, NULL, NULL, &d); fill = (d == 8) ? 0xff : 0; color = (d == 8) ? 0x00000000 : 0xffffff00; pixa1 = pixaAddBorderGeneral(NULL, pixa, 10, 10, 0, 0, fill); pixa2 = pixaAddTextNumber(pixa1, bmf, NULL, color, L_ADD_BELOW); snprintf(buf, sizeof(buf), "%s.pa", basename); pixaWrite(buf, pixa2); pix1 = pixaDisplayTiledInColumns(pixa2, 20, 2.5, 15, 2); snprintf(buf, sizeof(buf), "%s.png", basename); pixWrite(buf, pix1, IFF_PNG); pixDisplay(pix1, 500, 500); pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); bmfDestroy(&bmf); } leptonica-1.86.0/prog/recog_bootnum3.c000066400000000000000000000070251506303110300176200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recog_bootnum3.c * * This does two things. * * (1) It makes recog/digits/bootnum4.pa, a pixa of 100 samples * from each of the 10 digits. These are stored as 10 mosaics * where the 100 samples are packed in 20x30 pixel tiles. * * (2) It generates the code that is able to generate a pixa with * any number from 1 to 100 of samples for each digit. This * new pixa has one pix for each sample (the tiled pix in the * input pixa have been split out), so it can have up to 1000 pix. * The compressed string of data and the code for deserializing * it are auto-generated with the stringcode utility. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" l_int32 main(int argc, char **argv) { char buf[64]; l_int32 i; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; L_STRCODE *strc; if (argc != 1) { lept_stderr(" Syntax: recog_bootnum3\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/digit"); /* Make a pixa of the first 100 samples for each digit. * This will be saved to recog/digits/bootnum4.pa. */ pixa1 = pixaCreate(10); for (i = 0; i < 10; i++) { snprintf(buf, sizeof(buf), "recog/digits/digit%d.comp.tif", i); pix1 = pixRead(buf); pixa2 = pixaMakeFromTiledPix(pix1, 20, 30, 0, 100, NULL); pix2 = pixaDisplayOnLattice(pixa2, 20, 30, NULL, NULL); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); pixaDestroy(&pixa2); } /* Write it out (and copy to recog/digits/bootnum4.pa) */ pixaWrite("/tmp/lept/digit/bootnum4.pa", pixa1); pixaDestroy(&pixa1); /* Generate the stringcode in two files for this pixa. * Both files are then assempled into the source file * bootnumgen4.c, which is compiled into the library. */ strc = strcodeCreate(212); // arbitrary integer strcodeGenerate(strc, "/tmp/lept/digit/bootnum4.pa", "PIXA"); strcodeFinalize(&strc, "."); return 0; } leptonica-1.86.0/prog/recogsort.c000066400000000000000000000106121506303110300166760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogsort.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { char *boxatxt; l_int32 i; BOXA *boxa1, *boxa2, *boxa3; BOXAA *baa, *baa1; NUMAA *naa1; PIX *pixdb, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixa3, *pixat; L_RECOG *recog; SARRAY *sa1; /* ----- Example identifying samples using training data ----- */ setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Read the training data */ pixat = pixaRead("recog/sets/train06.pa"); recog = recogCreateFromPixa(pixat, 0, 0, 0, 128, 1); recogAverageSamples(recog, 0); /* required for splitting characters */ pix1 = pixaDisplayTiledWithText(pixat, 1500, 1.0, 10, 1, 8, 0xff000000); pixDisplay(pix1, 0, 0); pixDestroy(&pix1); pixaDestroy(&pixat); /* Read the data from all samples */ pix1 = pixRead("recog/sets/samples06.png"); boxatxt = pixGetText(pix1); lept_stderr("%s\n", boxatxt); boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt)); pixa1 = pixaCreateFromBoxa(pix1, boxa1, 0, 0, NULL); pixDestroy(&pix1); /* destroys boxa1 */ /* Identify components in the sample data */ pixa2 = pixaCreate(0); pixa3 = pixaCreate(0); for (i = 0; i < 9; i++) { /* if (i != 4) continue; */ /* dots form separate boxa */ /* if (i != 8) continue; */ /* broken 2 in '24' */ if (i != 8) continue; pix1 = pixaGetPix(pixa1, i, L_CLONE); /* Show the 2d box data in the sample */ boxa2 = pixConnComp(pix1, NULL, 8); baa = boxaSort2d(boxa2, NULL, 6, 6, 5); pix2 = boxaaDisplay(pix1, baa, 3, 1, 0xff000000, 0x00ff0000, 0, 0); pixaAddPix(pixa3, pix2, L_INSERT); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Get the numbers in the sample */ recogIdentifyMultiple(recog, pix1, 0, 0, &boxa3, NULL, &pixdb, 0); sa1 = recogExtractNumbers(recog, boxa3, 0.7, -1, &baa1, &naa1); sarrayWriteStderr(sa1); boxaaWriteStream(stderr, baa1); numaaWriteStream(stderr, naa1); pixaAddPix(pixa2, pixdb, L_INSERT); /* pixaWrite("/tmp/pixa.pa", pixa2); */ pixDestroy(&pix1); boxaWriteStderr(boxa3); boxaDestroy(&boxa3); boxaaDestroy(&baa1); numaaDestroy(&naa1); sarrayDestroy(&sa1); } pix3 = pixaDisplayLinearly(pixa2, L_VERT, 1.0, 0, 20, 1, NULL); pixWrite("/tmp/lept/recog/pix3.png", pix3, IFF_PNG); pix4 = pixaDisplayTiledInRows(pixa3, 32, 1500, 1.0, 0, 20, 2); pixDisplay(pix4, 500, 0); pixWrite("/tmp/lept/recog/pix4.png", pix4, IFF_PNG); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixa1); boxaDestroy(&boxa1); recogDestroy(&recog); return 0; } leptonica-1.86.0/prog/recogtest1.c000066400000000000000000000136161506303110300167560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest1.c * * Tests the recog utility using the bootstrap number set, * for both training and identification * * An example of greedy splitting of touching characters is given. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static const l_int32 scaledw = 0; static const l_int32 scaledh = 40; static const l_float32 MinScore[] = {0.6f, 0.7f, 0.9f}; static const l_int32 MinTarget[] = {4, 5, 4}; static const l_int32 MinSize[] = {3, 2, 3}; l_int32 main(int argc, char **argv) { l_int32 i, linew, same; BOXA *boxat; PIX *pixd, *pix1, *pix2, *pixdb; PIXA *pixa1, *pixa2, *pixa3; L_RECOG *recog1, *recog2; if (argc != 1) { lept_stderr(" Syntax: recogtest1\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/digits"); recog1 = NULL; recog2 = NULL; #if 0 linew = 5; /* for lines */ #else linew = 0; /* scanned image */ #endif #if 1 pixa1 = pixaRead("recog/digits/bootnum1.pa"); recog1 = recogCreateFromPixa(pixa1, scaledw, scaledh, linew, 120, 1); pix1 = pixaDisplayTiledWithText(pixa1, 1400, 1.0, 10, 2, 6, 0xff000000); pixWrite("/tmp/lept/digits/bootnum1.png", pix1, IFF_PNG); pixDisplay(pix1, 800, 800); pixDestroy(&pix1); pixaDestroy(&pixa1); #endif #if 1 lept_stderr("Print Stats 1\n"); recogShowContent(stderr, recog1, 1, 1); #endif #if 1 lept_stderr("AverageSamples\n"); recogAverageSamples(recog1, 1); recogShowAverageTemplates(recog1); pix1 = pixaGetPix(recog1->pixadb_ave, 0, L_CLONE); pixWrite("/tmp/lept/digits/unscaled_ave.png", pix1, IFF_PNG); pixDestroy(&pix1); pix1 = pixaGetPix(recog1->pixadb_ave, 1, L_CLONE); pixWrite("/tmp/lept/digits/scaled_ave.png", pix1, IFF_PNG); pixDestroy(&pix1); #endif #if 1 recogDebugAverages(recog1, 0); recogShowMatchesInRange(recog1, recog1->pixa_tr, 0.65, 1.0, 0); pixWrite("/tmp/lept/digits/match_ave1.png", recog1->pixdb_range, IFF_PNG); recogShowMatchesInRange(recog1, recog1->pixa_tr, 0.0, 1.0, 0); pixWrite("/tmp/lept/digits/match_ave2.png", recog1->pixdb_range, IFF_PNG); #endif #if 1 lept_stderr("Print stats 2\n"); recogShowContent(stderr, recog1, 2, 1); recogWrite("/tmp/lept/digits/rec1.rec", recog1); recog2 = recogRead("/tmp/lept/digits/rec1.rec"); recogShowContent(stderr, recog2, 3, 1); recogWrite("/tmp/lept/digits/rec2.rec", recog2); filesAreIdentical("/tmp/lept/digits/rec1.rec", "/tmp/lept/digits/rec2.rec", &same); if (!same) lept_stderr("Error in serialization!\n"); recogDestroy(&recog2); #endif #if 1 /* Three sets of parameters: * 0.6, 0.3 : removes a few poor matches * 0.8, 0.2 : remove many based on matching; remove some based on * requiring retention of 20% of templates in each class * 0.9, 0.01 : remove most based on matching; saved 1 in each class */ lept_stderr("Remove outliers\n"); pixa2 = recogExtractPixa(recog1); for (i = 0; i < 3; i++) { pixa3 = pixaRemoveOutliers1(pixa2, MinScore[i], MinTarget[i], MinSize[i], &pix1, &pix2); pixDisplay(pix1, 900, 250 * i); pixDisplay(pix2, 1300, 250 * i); pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa3); } pixaDestroy(&pixa2); #endif #if 1 /* Split touching characters */ lept_stderr("Split touching\n"); pixd = pixRead("recog/digits/page.590.png"); /* 590 or 306 */ recogIdentifyMultiple(recog1, pixd, 0, 0, &boxat, &pixa2, &pixdb, 1); pixDisplay(pixdb, 800, 800); boxaWriteStderr(boxat); pix1 = pixaDisplay(pixa2, 0, 0); pixDisplay(pix1, 1200, 800); pixDestroy(&pixdb); pixDestroy(&pix1); pixDestroy(&pixd); pixaDestroy(&pixa2); boxaDestroy(&boxat); #endif #if 1 lept_stderr("Reading new training set and computing averages\n"); lept_stderr("Print stats 3\n"); pixa1 = pixaRead("recog/sets/train03.pa"); recog2 = recogCreateFromPixa(pixa1, 0, 40, 0, 128, 1); recogShowContent(stderr, recog2, 3, 1); recogDebugAverages(recog2, 3); pixWrite("/tmp/lept/digits/averages.png", recog2->pixdb_ave, IFF_PNG); recogShowAverageTemplates(recog2); pixaDestroy(&pixa1); recogDestroy(&recog2); #endif recogDestroy(&recog1); recogDestroy(&recog2); return 0; } leptonica-1.86.0/prog/recogtest2.c000066400000000000000000000165341506303110300167610ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest2.c * * Test bootstrap recognizer (BSR) to train a book-adapted * recognizer (BAR), starting with unlabeled bitmaps from the book. * * Several BSRs are used. * The BAR images are taken from recog/sets/train*.pa. We really * know their classes, but pretend we don't, by erasing the labels. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" /* Sets for training using boot recognizers */ static char trainset1[] = "recog/sets/train04.pa"; /* partial set */ static char trainset2[] = "recog/sets/train05.pa"; /* full set */ /* Use scanned images or width-normalized lines */ #if 1 static const l_int32 linew = 0; /* use scanned bitmaps */ #else static const l_int32 linew = 5; /* use generated lines */ #endif l_int32 main(int argc, char **argv) { char *fname; l_int32 i; BOXA *boxa1; BOXAA *baa; NUMAA *naa; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2, *pixa3; L_RECOG *recogboot, *recog1; SARRAY *sa; if (argc != 1) { lept_stderr(" Syntax: recogtest2\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Files with 'unlabeled' templates from book */ sa = sarrayCreate(2); sarrayAddString(sa, trainset1, L_COPY); sarrayAddString(sa, trainset2, L_COPY); /* ----------------------------------------------------------- */ /* Do operations with a simple bootstrap recognizer */ /* ----------------------------------------------------------- */ /* Generate a BSR (boot-strap recog), and show the unscaled * and scaled versions of the templates */ pixa1 = (PIXA *)l_bootnum_gen1(); /* from recog/digits/bootnum1.pa */ recogboot = recogCreateFromPixa(pixa1, 0, 40, linew, 128, 1); recogWrite("/tmp/lept/recog/boot1.rec", recogboot); recogShowContent(stderr, recogboot, 1, 1); pixaDestroy(&pixa1); /* Generate a BAR (book-adapted recog) for a set of images from * one book. Select a set of digit images. These happen to * be labeled, so we clear the text field from each pix before * running it through the boot recognizer. */ for (i = 0; i < 2; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); pixa2 = pixaRead(fname); pixaSetText(pixa2, NULL, NULL); /* Train a new recognizer from the boot and unlabeled samples */ pixa3 = recogTrainFromBoot(recogboot, pixa2, 0.65, 128, 1); recog1 = recogCreateFromPixa(pixa3, 0, 40, linew, 128, 1); recogShowContent(stderr, recog1, 2, 1); if (i == 0) recogWrite("/tmp/lept/recog/recog1.rec", recog1); else /* i == 1 */ recogWrite("/tmp/lept/recog/recog2.rec", recog1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); recogDestroy(&recog1); } recogDestroy(&recogboot); /* ----------------------------------------------------------- */ /* Do operations with a larger bootstrap recognizer */ /* ----------------------------------------------------------- */ /* Generate the boot recog, and show the unscaled and scaled * versions of the templates */ recogboot = recogMakeBootDigitRecog(0, 40, linew, 1, 1); recogWrite("/tmp/lept/recog/boot2.rec", recogboot); recogShowContent(stderr, recogboot, 3, 1); /* Generate a BAR for a set of images from one book. * Select a set of digit images and erase the text field. */ for (i = 0; i < 2; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); pixa2 = pixaRead(fname); pixaSetText(pixa2, NULL, NULL); /* Train a new recognizer from the boot and unlabeled samples */ pixa3 = recogTrainFromBoot(recogboot, pixa2, 0.65, 128, 1); recog1 = recogCreateFromPixa(pixa3, 0, 40, linew, 128, 1); recogShowContent(stderr, recog1, 4, 1); if (i == 0) recogWrite("/tmp/lept/recog/recog3.rec", recog1); else if (i == 1) recogWrite("/tmp/lept/recog/recog4.rec", recog1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); recogDestroy(&recog1); } recogDestroy(&recogboot); sarrayDestroy(&sa); #if 0 recogShowMatchesInRange(recog, recog->pixa_tr, 0.0, 1.0, 1); recogShowContent(stderr, recog, 1); /* Now use minscore = 0.75 to remove the outliers in the BAR, * and show what is left. */ lept_stderr("initial size: %d\n", recog->num_samples); pix1 = pix2 = NULL; recogRemoveOutliers1(&recog, 0.75, 5, 3, &pix1, &pix2); pixDisplay(pix1, 500, 0); pixDisplay(pix2, 500, 500); pixDestroy(&pix1); pixDestroy(&pix2); lept_stderr("final size: %d\n", recog->num_samples); recogDebugAverages(recog, 1); recogShowContent(stderr, recog, 1); recogShowMatchesInRange(recog, recog->pixa_tr, 0.75, 1.0, 1); pixWrite("/tmp/lept/recog/range.png", recog->pixdb_range, IFF_PNG); #endif /* ----------------------------------------------------------- */ /* Show operation of the default bootstrap recognizer */ /* ----------------------------------------------------------- */ recog1 = recogMakeBootDigitRecog(0, 40, 0, 1, 0); pix1 = pixRead("test-87220.59.png"); recogIdentifyMultiple(recog1, pix1, 0, 1, &boxa1, NULL, NULL, 0); sa = recogExtractNumbers(recog1, boxa1, 0.75, -1, &baa, &naa); pixa1 = showExtractNumbers(pix1, sa, baa, naa, &pix3); pix2 = pixaDisplayTiledInRows(pixa1, 32, 600, 1.0, 0, 20, 2); pixDisplay(pix2, 0, 1000); pixDisplay(pix3, 600, 1000); pixWrite("/tmp/lept/recog/extract.png", pix3, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa1); sarrayDestroy(&sa); boxaDestroy(&boxa1); boxaaDestroy(&baa); numaaDestroy(&naa); recogDestroy(&recog1); return 0; } leptonica-1.86.0/prog/recogtest3.c000066400000000000000000000155211506303110300167550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest3.c * * Test padding of book-adapted recognizer (BAR) using templates * from a bootstrap recognizer (BSR) to identify unlabeled samples * from the book. * * Terminology note: * templates: labeled character images that can be inserted * into a recognizer. * samples: unlabeled character images that must be labeled by * a recognizer before they can be used as templates. * * This demonstrates the following operations: * (1) Making a BAR from labeled book templates (as a pixa). * (2) Making a hybrid BAR/BSR from scaled templates in the BAR, * supplemented with similarly scaled bootstrap templates for those * classes where the BAR templates are either missing or not * of sufficient quantity. * (3) Using the BAR/BSR to label unlabeled book sampless. * (4) Adding the pixa of the original set of labeled book * templates to the pixa of the newly labeled templates, and * making a BAR from the joined pixa. The BAR would then * work to identify unscaled samples from the book. * (5) Removing outliers from the BAR. * * Note that if this final BAR were not to have a sufficient number * of templates in each class, it can again be augmented with BSR * templates, and the hybrid BAR/BSR would be the final recognizer * that is used to identify unknown (scaled) samples. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { char *text; l_int32 histo[10]; l_int32 i, n, ival, same; PIX *pix1, *pix2; PIXA *pixa1, *pixa2, *pixa3, *pixa4; L_RECOG *recog1, *recog2, *recog3; if (argc != 1) { lept_stderr(" Syntax: recogtest3\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Read templates and split them into two sets. Use one to * make a BAR recog that needs padding; use the other with a * hybrid BAR/BSR to make more labeled templates to augment * the BAR */ pixa1 = pixaRead("recog/sets/train05.pa"); pixa2 = pixaCreate(0); /* to generate a small BAR */ pixa3 = pixaCreate(0); /* for templates to be labeled and * added to the BAR */ n = pixaGetCount(pixa1); for (i = 0; i < 10; i++) histo[i] = 0; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_COPY); text = pixGetText(pix1); ival = text[0] - '0'; /* remove all 4's, and all but 2 7's and 9's */ if (ival == 4 || (ival == 7 && histo[7] == 2) || (ival == 9 && histo[9] == 2)) { pixaAddPix(pixa3, pix1, L_INSERT); } else { pixaAddPix(pixa2, pix1, L_INSERT); histo[ival]++; } } pix1 = pixaDisplayTiledWithText(pixa3, 1500, 1.0, 15, 2, 6, 0xff000000); pixDisplay(pix1, 500, 0); pixDestroy(&pix1); /* Make a BAR from the small set */ recog1 = recogCreateFromPixa(pixa2, 0, 40, 0, 128, 1); recogShowContent(stderr, recog1, 0, 1); /* Pad with BSR templates to make a hybrid BAR/BSR */ recogPadDigitTrainingSet(&recog1, 40, 0); recogShowContent(stderr, recog1, 1, 1); /* Use the BAR/BSR to label the left-over templates from the book */ pixa4 = recogTrainFromBoot(recog1, pixa3, 0.75, 128, 1); /* Join the two sets */ pixaJoin(pixa1, pixa4, 0, 0); pixaDestroy(&pixa4); /* Make a new BAR that uses unscaled templates. * This now has all the templates from pixa1, before deletions */ recog2 = recogCreateFromPixa(pixa1, 0, 0, 5, 128, 1); recogShowContent(stderr, recog2, 2, 1); /* Test recog serialization */ recogWrite("/tmp/lept/recog/recog2.rec", recog2); recog3 = recogRead("/tmp/lept/recog/recog2.rec"); recogWrite("/tmp/lept/recog/recog3.rec", recog3); filesAreIdentical("/tmp/lept/recog/recog2.rec", "/tmp/lept/recog/recog3.rec", &same); if (!same) lept_stderr("Error in serialization!\n"); recogDestroy(&recog3); /* Remove outliers: method 1 */ pixa4 = pixaRemoveOutliers1(pixa1, 0.8, 4, 3, &pix1, &pix2); pixDisplay(pix1, 500, 0); pixDisplay(pix2, 500, 500); pixDestroy(&pix1); pixDestroy(&pix2); recog3 = recogCreateFromPixa(pixa4, 0, 0, 0, 128, 1); recogShowContent(stderr, recog3, 3, 1); pixaDestroy(&pixa4); recogDestroy(&recog3); /* Relabel a few templates to put them in the wrong classes */ pix1 = pixaGetPix(pixa1, 7, L_CLONE); pixSetText(pix1, "4"); pixDestroy(&pix1); pix1 = pixaGetPix(pixa1, 38, L_CLONE); pixSetText(pix1, "9"); pixDestroy(&pix1); pix1 = pixaGetPix(pixa1, 61, L_CLONE); pixSetText(pix1, "2"); pixDestroy(&pix1); /* Remove outliers: method 2 */ pixa4 = pixaRemoveOutliers2(pixa1, 0.65, 3, &pix1, &pix2); pixDisplay(pix1, 900, 0); pixDisplay(pix2, 900, 500); pixDestroy(&pix1); pixDestroy(&pix2); recog3 = recogCreateFromPixa(pixa4, 0, 0, 0, 128, 1); recogShowContent(stderr, recog3, 3, 1); pixaDestroy(&pixa4); recogDestroy(&recog3); recogDestroy(&recog1); recogDestroy(&recog2); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); return 0; } leptonica-1.86.0/prog/recogtest4.c000066400000000000000000000106331506303110300167550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest4.c * * Test document image decoding (DID) approach to splitting characters * This tests the low-level recogDecode() function. * Splitting succeeds for both with and without character height scaling. * * But cf. recogtest5.c. Note that recogIdentifyMultiple(), which * does prefiltering and splitting before character identification, * does not accept input that has been scaled. That is because * the only reason for scaling the templates is that the recognizer * is a hybrid BAR/BSR, where we've used a mixture of templates from * a single source and bootstrap templates from many sources. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static PIX *GetBigComponent(PIX *pixs); l_int32 main(int argc, char **argv) { char buf[256]; l_int32 i, item; l_int32 example[6] = {17, 20, 21, 22, 23, 24}; /* for decoding */ BOXA *boxa; PIX *pix1, *pix2, *pixdb; PIXA *pixa1, *pixa2; L_RECOG *recog; if (argc != 1) { lept_stderr(" Syntax: recogtest4\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Generate the recognizer */ pixa1 = pixaRead("recog/sets/train01.pa"); #if 1 /* scale to fixed height */ recog = recogCreateFromPixa(pixa1, 0, 40, 0, 128, 1); #else /* no scaling */ recog = recogCreateFromPixa(pixa1, 0, 0, 0, 128, 1); #endif recogAverageSamples(recog, 1); recogWrite("/tmp/lept/recog/rec1.rec", recog); /* Show the templates */ if (recogDebugAverages(recog, 1) != 0) { lept_stderr("Averaging failed!!\n"); return 1; } recogShowMatchesInRange(recog, recog->pixa_tr, 0.0, 1.0, 1); /* Get a set of problem images to decode */ pixa2 = pixaRead("recog/sets/test01.pa"); /* Decode a subset of them. It takes about 1 ms to decode a * 4 digit number, with both Viterbi and rescoring (debug off). */ for (i = 0; i < 6; i++) { /* if (i != 3) continue; */ /* remove this comment to do all 6 */ item = example[i]; pix1 = pixaGetPix(pixa2, item, L_CLONE); pixDisplay(pix1, 100, 100); pix2 = GetBigComponent(pix1); boxa = recogDecode(recog, pix2, 2, &pixdb); pixDisplay(pixdb, 300, 100); snprintf(buf, sizeof(buf), "/tmp/lept/recog/did-%d.png", item); pixWrite(buf, pixdb, IFF_PNG); pixDestroy(&pixdb); boxaDestroy(&boxa); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); recogDestroy(&recog); return 0; } static PIX * GetBigComponent(PIX *pixs) { BOX *box; PIX *pix1, *pixd; pix1 = pixMorphSequence(pixs, "c40.7 + o20.15 + d25.1", 0); pixClipToForeground(pix1, NULL, &box); pixd = pixClipRectangle(pixs, box, NULL); pixDestroy(&pix1); boxDestroy(&box); return pixd; } leptonica-1.86.0/prog/recogtest5.c000066400000000000000000000075351506303110300167650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest5.c * * Test document image decoding (DID) approach to splitting characters * * This uses recogIdentifyMultiple() to first split the touching * characters and then do the identification on the resulting * single characters. Compare with recogtest4.c. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static PIX *GetBigComponent(PIX *pixs); l_int32 main(int argc, char **argv) { l_int32 i, item; l_int32 example[6] = {17, 20, 21, 22, 23, 24}; /* for decoding */ PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2, *pixa3; L_RECOG *recog; if (argc != 1) { lept_stderr(" Syntax: recogtest5\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Generate the recognizer */ pixa1 = pixaRead("recog/sets/train01.pa"); recog = recogCreateFromPixa(pixa1, 0, 0, 0, 128, 1); /* no scaling */ recogAverageSamples(recog, 1); recogWrite("/tmp/lept/recog/rec1.rec", recog); /* Show the templates */ recogDebugAverages(recog, 1); recogShowMatchesInRange(recog, recog->pixa_tr, 0.0, 1.0, 1); /* Get a set of problem images to decode */ pixa2 = pixaRead("recog/sets/test01.pa"); /* Decode a subset of them. It takes about 2 ms to decode a * 4 digit number (Viterbi for splitting; identification against * all templates; debug off. */ for (i = 0; i < 6; i++) { /* if (i != 3) continue; */ /* remove this comment to do all 6 */ item = example[i]; pix1 = pixaGetPix(pixa2, item, L_CLONE); pixDisplay(pix1, 100, 100); pix2 = GetBigComponent(pix1); recogIdentifyMultiple(recog, pix2, 0, 0, NULL, &pixa3, NULL, 1); pix3 = pixaDisplayTiledInColumns(pixa3, 1, 1.0, 20, 2); pixDisplay(pix3, 800, 100); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa3); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); recogDestroy(&recog); return 0; } static PIX * GetBigComponent(PIX *pixs) { BOX *box; PIX *pix1, *pixd; pix1 = pixMorphSequence(pixs, "c40.7 + o20.15 + d25.1", 0); pixClipToForeground(pix1, NULL, &box); pixd = pixClipRectangle(pixs, box, NULL); pixDestroy(&pix1); boxDestroy(&box); return pixd; } leptonica-1.86.0/prog/recogtest6.c000066400000000000000000000106751506303110300167650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest6.c * * Another test of character splitting. This will test both DID * and greedy splitting. To test greedy splitting, in recogident.c, * #define SPLIT_WITH_DID 0 * * The timing info is used to measure the time to split touching * characters and identify them. One set of 4 digits takes about 1 ms * with DID and 7 ms with greedy splitting. Because DID is about * 5x faster than greedy splitting, DID is the default that is used. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" static PIX *GetBigComponent(PIX *pixs); l_int32 main(int argc, char **argv) { l_int32 item, debug, i; l_int32 example[6] = {17, 20, 21, 22, 23, 24}; /* for decoding */ BOXA *boxa; NUMA *nascore; PIX *pix1, *pix2, *pix3, *pixdb; PIXA *pixa1, *pixa2; L_RECOG *recog; if (argc != 1) { lept_stderr(" Syntax: recogtest6\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/recog"); /* Generate the recognizer */ pixa1 = pixaRead("recog/sets/train01.pa"); recog = recogCreateFromPixa(pixa1, 0, 0, 0, 128, 1); recogAverageSamples(recog, 0); /* Show the templates */ recogDebugAverages(recog, 1); recogShowMatchesInRange(recog, recog->pixa_tr, 0.0, 1.0, 1); /* Get a set of problem images to decode */ pixa2 = pixaRead("recog/sets/test01.pa"); /* Decode a subset of them */ debug = 1; for (i = 0; i < 6; i++) { /* if (i != 3) continue; */ item = example[i]; pix1 = pixaGetPix(pixa2, item, L_CLONE); pixDisplay(pix1, 100, 100); pix2 = GetBigComponent(pix1); if (debug) { recogIdentifyMultiple(recog, pix2, 0, 0, &boxa, NULL, &pixdb, 1); rchaExtract(recog->rcha, NULL, &nascore, NULL, NULL, NULL, NULL, NULL); pixDisplay(pixdb, 300, 500); boxaWriteStderr(boxa); numaWriteStderr(nascore); numaDestroy(&nascore); pixDestroy(&pixdb); } else { /* just get the timing */ startTimer(); recogIdentifyMultiple(recog, pix2, 0, 0, &boxa, NULL, NULL, 0); lept_stderr("Time: %5.3f\n", stopTimer()); } pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa); } if (debug) { pix3 = pixaDisplayTiledInRows(recog->pixadb_split, 1, 200, 1.0, 0, 20, 3); pixDisplay(pix3, 0, 0); pixDestroy(&pix3); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); recogDestroy(&recog); return 0; } static PIX * GetBigComponent(PIX *pixs) { BOX *box; PIX *pix1, *pixd; pix1 = pixMorphSequence(pixs, "c40.7 + o20.15 + d25.1", 0); pixClipToForeground(pix1, NULL, &box); pixd = pixClipRectangle(pixs, box, NULL); pixDestroy(&pix1); boxDestroy(&box); return pixd; } leptonica-1.86.0/prog/recogtest7.c000066400000000000000000000123451506303110300167620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * recogtest7.c * * Tests the boot recog utility using the bootstrap templates * from the mosaics (bootnum4.pa) and from the stringcode version * (bootnumgen4.c). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "string.h" #include "allheaders.h" /* All input templates are scaled to 20x30. Here, we rescale the * height to 45 and let the width scale isotropically. */ static const l_int32 scaledw = 0; static const l_int32 scaledh = 45; l_int32 main(int argc, char **argv) { l_int32 same; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2, *pixa3; L_RECOG *recog1, *recog2; if (argc != 1) { lept_stderr(" Syntax: recogtest7\n"); return 1; } setLeptDebugOK(1); lept_mkdir("lept/digits"); recog1 = NULL; recog2 = NULL; #if 1 pixa1 = pixaRead("recog/digits/bootnum4.pa"); pixa2 = pixaMakeFromTiledPixa(pixa1, 0, 0, 100); pixa3 = l_bootnum_gen4(100); pixaEqual(pixa2, pixa3, 0, NULL, &same); if (!same) L_ERROR("Bad! The pixa differ!\n", __func__); pix1 = pixaDisplayTiledWithText(pixa1, 1400, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 100, 100); pix2 = pixaDisplayTiledWithText(pixa2, 1400, 1.0, 10, 2, 6, 0xff000000); pix3 = pixaDisplayTiledWithText(pixa3, 1400, 1.0, 10, 2, 6, 0xff000000); pixEqual(pix2, pix3, &same); if (!same) L_ERROR("Bad! The displayed pix differ!\n", __func__); pixWrite("/tmp/lept/digits/pix1.png", pix1, IFF_PNG); pixWrite("/tmp/lept/digits/bootnum4.png", pix1, IFF_PNG); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); #endif #if 1 lept_stderr("Show recog content\n"); recog1 = recogCreateFromPixa(pixa3, scaledw, scaledh, 0, 120, 1); recogShowContent(stderr, recog1, 1, 1); pixaDestroy(&pixa3); #endif #if 1 lept_stderr("\nShow averaged samples\n"); recogAverageSamples(recog1, 1); recogShowAverageTemplates(recog1); pix1 = pixaGetPix(recog1->pixadb_ave, 0, L_CLONE); pixWrite("/tmp/lept/digits/unscaled_ave.png", pix1, IFF_PNG); pixDestroy(&pix1); pix1 = pixaGetPix(recog1->pixadb_ave, 1, L_CLONE); pixWrite("/tmp/lept/digits/scaled_ave.png", pix1, IFF_PNG); pixDestroy(&pix1); recogDestroy(&recog1); #endif #if 1 /* Make a tiny recognizer and test it against itself */ pixa1 = l_bootnum_gen4(5); pix1 = pixaDisplayTiledWithText(pixa1, 1400, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 1000, 100); pixDestroy(&pix1); recog1 = recogCreateFromPixa(pixa1, scaledw, scaledh, 0, 120, 1); lept_stderr("\nShow matches against all inputs for given range\n"); recogDebugAverages(recog1, 0); recogShowMatchesInRange(recog1, recog1->pixa_tr, 0.85, 1.00, 1); pixWrite("/tmp/lept/digits/match_input.png", recog1->pixdb_range, IFF_PNG); lept_stderr("\nShow best match against average template\n"); recogShowMatchesInRange(recog1, recog1->pixa_u, 0.65, 1.00, 1); pixWrite("/tmp/lept/digits/match_ave.png", recog1->pixdb_range, IFF_PNG); pixaDestroy(&pixa1); #endif #if 1 lept_stderr("\nContents of recog before write/read:\n"); recogShowContent(stderr, recog1, 2, 1); lept_stderr("\nTest serialization\n"); recogWrite("/tmp/lept/digits/rec1.rec", recog1); recog2 = recogRead("/tmp/lept/digits/rec1.rec"); lept_stderr("Contents of recog after write/read:\n"); recogShowContent(stderr, recog2, 3, 1); recogWrite("/tmp/lept/digits/rec2.rec", recog2); filesAreIdentical("/tmp/lept/digits/rec1.rec", "/tmp/lept/digits/rec2.rec", &same); if (!same) lept_stderr("Error in serialization!\n"); recogDestroy(&recog1); recogDestroy(&recog2); #endif return 0; } leptonica-1.86.0/prog/rectangle_reg.c000066400000000000000000000160361506303110300174760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rectangle_reg.c * * Tests the largest rectangle in bg or fg. * * Also tests finding rectangles associated with single * connected components. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const l_int32 NBoxes = 20; static const l_int32 Polarity = 0; /* background */ int main(int argc, char **argv) { char buf[64]; char *newpath; l_int32 i, bx, by, bw, bh, index, rval, gval, bval; BOX *box1, *box2; BOXA *boxa; PIX *pixs, *pix1, *pix2, *pix3; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ---------------- Largest rectangles in image ---------------- */ pixs = pixRead("test1.png"); pix1 = pixConvertTo8(pixs, FALSE); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pix1, cmap); boxa = boxaCreate(0); for (i = 0; i < NBoxes; i++) { pixFindLargestRectangle(pixs, Polarity, &box1, NULL); boxGetGeometry(box1, &bx, &by, &bw, &bh); pixSetInRect(pixs, box1); if (rp->display) lept_stderr("bx = %5d, by = %5d, bw = %5d, bh = %5d, area = %d\n", bx, by, bw, bh, bw * bh); boxaAddBox(boxa, box1, L_INSERT); } for (i = 0; i < NBoxes; i++) { index = 32 + (i & 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); box1 = boxaGetBox(boxa, i, L_CLONE); pixRenderHashBoxArb(pix1, box1, 6, 2, L_NEG_SLOPE_LINE, 1, rval, gval, bval); boxDestroy(&box1); } pix2 = pixAddBorder(pix1, 2, 0x0); pix3 = pixAddBorder(pix2, 20, 0xffffff00); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix3, 0, 0, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&boxa); /* ----------- Rectangle(s) from connected component ----------- */ pixs = pixRead("singlecc.tif"); pix1 = pixScale(pixs, 0.5, 0.5); boxa = pixConnCompBB(pix1, 8); box1 = boxaGetBox(boxa, 0, L_COPY); /* Do 4 cases with vertical scan */ box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_VERTICAL, L_GEOMETRIC_UNION, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 2); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 1 */ if (rp->display) l_fileDisplay(newpath, 0, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_VERTICAL, L_GEOMETRIC_INTERSECTION, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 3); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 2 */ if (rp->display) l_fileDisplay(newpath, 200, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_VERTICAL, L_LARGEST_AREA, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 4); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 3 */ if (rp->display) l_fileDisplay(newpath, 400, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_VERTICAL, L_SMALLEST_AREA, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 5); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 4 */ if (rp->display) l_fileDisplay(newpath, 600, 500, 0.4); lept_free(newpath); /* Do 4 cases with horizontal scan */ box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_HORIZONTAL, L_GEOMETRIC_UNION, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 6); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 5 */ if (rp->display) l_fileDisplay(newpath, 800, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_HORIZONTAL, L_GEOMETRIC_INTERSECTION, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 7); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 6 */ if (rp->display) l_fileDisplay(newpath, 1000, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_HORIZONTAL, L_LARGEST_AREA, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 8); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 7 */ if (rp->display) l_fileDisplay(newpath, 1200, 500, 0.4); lept_free(newpath); box2 = pixFindRectangleInCC(pix1, box1, 0.75, L_SCAN_HORIZONTAL, L_SMALLEST_AREA, TRUE); boxDestroy(&box2); snprintf(buf, sizeof(buf), "rectangle.%02d.png", 9); lept_cp("/tmp/lept/rect/fitrect.png", "lept/regout", buf, &newpath); regTestCheckFile(rp, newpath); /* 8 */ if (rp->display) l_fileDisplay(newpath, 1400, 500, 0.4); lept_free(newpath); boxDestroy(&box1); pixDestroy(&pixs); pixDestroy(&pix1); boxaDestroy(&boxa); return regTestCleanup(rp); } leptonica-1.86.0/prog/redcover.jpg000066400000000000000000000522721506303110300170460ustar00rootroot00000000000000˙Ø˙āJFIF$$˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āhė"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ãywßKÔ˙¤ķå˙žŌ˙ßf˜ŨOÔÔövW:…ävļą4ˇ’SŸä+éI]Ÿ&¯-üųį´ŋ÷ŲŖĪ—ū{K˙}štˇSĮ ;É#E’OĨYĪÂĪ 2ŧ2Gˆ•5Ŋ”÷NV™ˆĨ9Ādœž1M´•î -čˆüųį´ŋ÷ŲŖĪ—ū{K˙}ščŧ9áØ5­>öâi§F„•Xb[žų3ü9@ŋsöö“ŨŗŦ´Œ‘´ŦePKĀ Ę5á'$ŸÃšn”’O¸ß>_ųí/ũöhķå˙žŌ˙ßfŸ=¤ÖĶK Ņ2ŧNҏëĩĮQ‘Å6in'Ž‘šYX")ã$œĪš­SVŊČåbyō˙ĪiīŗGŸ/üö—ūû5%ŔöŦVx™(b8‘œtČõ¤û˙giĖN#WXŽä^€ŌS‹Ų‡+įË˙=Ĩ˙žÍ|ŋķÚ_ûėÕ¨ôĢšŦ–í?ŗ´žXv™æôÁ9ũ*™ÂîÚÛ1Ä`RS‹ę˛ė;Ī—ū{K˙}š<ųį´ŋ÷ŲϘKnFqģ#úúUŠ´ĢØ, Ŋ’Ũ…ŧᏠäķŽČÎÖëčišÅuƒ{üųį´ŋ÷ŲŖĪ—ū{K˙}š#ˇžYDIŗŗˆÂÉcĀ_j UĘ_ųí/ũöj­ŨŌXÛ´ÎsũÕõ>•ˆbÕuU2e„ôU8č+’ž.tzŗŗ ‚ŠˆÕlnļ¯g |ŲôüŠŖ[ļ,íĖ é—aüëÔkWÚ=sUšŌXAŪŦšėÃ5ÄķvGŠũ“ģgjˇ2îYä+ę$$QįË˙=Ĩ˙žÍqļĶĪe h\ĒžĒGĘk§˛ŧKë_0 Ŧ8eūéŽÜ>*tŲžf+:öčˇįË˙=d˙žÍ4Ū\ĄÂÜÎ\ ĻÔo÷ĢĻ[‘d­ÔũMič:ĒčúŊh Í0EÉqį„Öc}ãõ4”§8¸Ŋ˜Ŗ'tuąxĻÎgå[ܨˇģYą‘÷“6ž%Į§õ >'Š+;R—D[‚Ļ@ÃpĘĘĨ”g†ũā=š^ĩĖQX}N•žŗ3kZ×Ŧž\k,iö™§*ÍÁŪWę0y÷Ģ—'á‰#ŽáHŗ–Ũ†ėē4@û?&~§Ĩs4U}Z”mĸ%Wšm÷:oxŽ ĘHfˇ¸‘Ös<^T€+“&Ų=WæĪÖĒxgY‹Až{™mÚ}ČąmûģÔ¸įÕA‰ŦJ)ŧ=7ÍũíÁWšˇ–ĮS‹#ŠÚÆ'‚WōæiîTŽL‡9ë˙-1ÛŪ¨_ëƒPņ”ąēÁˆËîlvļOãX´Tà JņC•yÉY2xž6´™.!žInތ× +!xßP#ĀãQOâ6šŅnėåYâęs;ÎNrI_—=vázzãŌšę(XZiŪŪ`ņ}M‹]^+[ X¤ß\áĮC$¨ÁEl?Œ oŗĮö{ŗÅ4måšv#ä.:tX‡üŊkĸ‰aiÉŨ„kÎ*Čč¯ŧDˇļ:ŒDŨ.ž0ĨˆQĩTnÆ2xo”är9ČɞßÅ6đYi}šWk)c‘ō—ÍûŊÉ>gsÆŪ1“\ĩ}R•ŦÃëģgPū'ŧˡoļĮsæ ÷BNŪįgCžÜäŦ^&ˇŠKfdŧ˜Ãu,€š#īė-—ŸCķsĮ-E/ŠŌĩ‡õ™îtw^"ŠxîÔÁ+yæā†}ŋōĐÄFq˙\Î~ĩ&ŗâqŠ ÁÜGöˆ’1’Đ$g+ĮQķcüĖQMa)&šBx‰ĩcS^ÔŖÕoūԞvLjŽĶ–až@Éđã98ÅeįŅQÜKä[K.qą ~•˛JœlļD6ęO^Ļ4ûĩMQ—Ÿ"W¯įúŸå]΅j Ŧ{ļ+…đë}¸ų™Á¯OĶ#ōÜ`}M|Ž*̜Û}OēĀP:i#zÛN*†@WЊ¯¨xVÂį‰-Āį5otl€u/ķJÆđ'Žo4mN 뇛K™„dHÄų$ô`OAę:~UįgOÚÆMų•J”=ĢĨ(|ÎCTŌ¯4mB[čL7TōėAî­S¯uøĢáčõ/Njąų÷ËFOĖ?ŋõ¯ Žė=ok õ81T=ŒųzŽ7–DŽ5,ėÁTäôčŧ+oĄiÚ,öqFŠąũ–vD ž@ qԟ›šÅøwĻjøÖÁXf+bndãĻĪģ˙¯aø…Ļkx/P‰W2ğhOPS“¨ ?ÂŊ~ZŅ_ÖĻøl?= Ëî>tRՊ†äŠīí^ŨĒø×~¸žŌôԊæK?>Yˆ;w­ßükÄ1é_A|2ŋmŖn^՚ŲķíČ˙ĮH§rŠŒĶØ0 3rƒ[ŖįŅČÍMil÷—ZÅ÷æ‘c_Š8̚æžt­rûO# Ũũܜ~˜­ß†ēpÔ|oe¸~îÛuÃĀGøņZęœŌĻærB“u<ėw^2đ—†4Ū^CĻF.•Fūcį{gŽ3É5Í|-đî“âĒ˙jY­Į‘åy{™†3ŋ=ôģņ›QŲiĻéŠÖ;NãũŅĩô&üĒŋÁCķkŸöÃ˙jWœœÖÉŊĪJQƒÆ($ŦŽCâ—eĸø˛[=> ¸‰ bpHį­vŸŧ!Ąkž[ŨFÁg¸3ē—2:äĮB+—ø¯˙#Ô˙õīō5čŸ ŋäFOúų—ųŠēķ’ÃEĻg‡„^&Qļš–dømāû•d]8+3ęS˙}Wâŋ…i°=î‹4ˇP ,đI0U#ũ1Ÿ­qŪ –[oęķÁ#Å*ę•xÛkŪ7B+ÖžøÎ[KĻęRoŋˇPË.0eN™>ãŋŽjZ­F*ĸ•Ņq• ōtÜlĪ Į×ņ•ÜüPđėz'ˆÅÍēlļžS(P0LüĀ~`ū&¸jô)MTŠ’<Ú´Ũ9¸°j†ˇ‘ŖĖV~š5|u¨oŖÚ2Æ:ŒEũ”­ØĶ“­ûŖŸĐ%ōG++0Ũ÷W¸¯PĶ5Í4NŠ35ģžžríņŽ;Âj/BōŖ°ääčq]ŠxBhæ7 Bđƒ*āu¯•¨Ķ–§ÛĐįŒt;ģ9!6čÁ‡<š|ōÁŗ&T\z°ŽÃņ˙Å8‘É&_,ŠūŲāūU‹ĒxBwģķĄ¸Māä™W!—Û ķQĨėt6Öļ7uĨ(VW8?tįšņ;›‡ģÕRY2L“sõÍzĩ†‡ö{О&éō”Œ×ĸx`ęÚŊíÛ.míæ|GģÛ< úUŅ’„ŽÎ|LeV) ¨¤ûÕfåU.%DûŠäsĐÕWûÕõ×ŧS> ĢIĸVę~ĻģĪ„ō:Ÿúô“ų­pmÔũMwŸ˙äu?õé'ķZĪü)aScãWü~čßõĘ_æ•å8ČÅzˇÆ¯øũŅŋë”ŋÍ+ĘĒpŸÁõÔŧoņåũt>•ĐdīėĖøoĩY—Ü•Úߎkæ×c2ĒÅOākčŋ‡ ¯€ô|˙Ī"ņâkᛯn¸lņæ1ũMsⴜŅՎ֜%×ūë?´­–:ŽĒĀn•ÅŧdŽĘ2ߊ•w&ĩš&ą—jTú^~„îĒZ)á?‡Đ™— mh׎Ÿ> °üÎ+Īūj˙ &Ąg;î7ąyŏwSũCøW4Ķ­í*އU9Ē*'ÔáuÍ5´}v˙MaÅŧė‹îšĘŸČƒø× üÔv^ęZa+0¸ĖŅ˙}gúWÖá9’JˇČ)ށãd=bGzėi5fpŸ´Öåŋ0†ņÖQˇËÉ9õ$ķ]>ģŽ™ídŗ‹j…ˇ¤ŪŨk ÃËj­ ÍŗĪ]ĒÃŗ‘ũj-gN˜jf ÷MĖS‡Á_cū5ō•éōUp>÷[ÚЌ×TzŸMĖ. nÂŽÁĒÄ$ŽÚáJnáũÖ>•Íi–ˇ‡NDēš•Ąˆž\ˆLōwc§ĄŠŲež-Ųmļ‰˜€3ęŧäã×§Ö°qętŠ\ģ¯Ü,1É´ām8Ö˛ŒąčžiŅQ%Nŗ1ÍGĢ—ŠÔäŪȘ8čMszĻ­qĒH6ÕD]ŠtQ]˜ #­>nˆķs<|pĐå_ØĸzT/÷ĒJūõ}3Øø´îÉ[Šúšī>˙ČęëŌOæĩÁˇSõ5Ū|#˙‘Ô˙פŸÍk,Ođ¤m…ū4}M_ņûŖ×)šW•€[FXôŊz˙ÅŊ'QÔīt“a§Ũ]ŽPÆY’WĀâŠxáĩčÔáÔõČ<ˆ`!âˇr ģA`:×kžhĶ ›gV"„ęâZŠūŦz š_ x?7ØØßī*tüëÁŧ)ĻļĩâŊ:͆åyÃÉūęüÍúųפ|ZņDqŲ¯‡­dyH{œ¸Ŗ§Üœ ÷Ŧŋƒš_›Ē_jŽŋ,ˆP‘üMÉũüë*W§BU^ėÖēU1¤ļG¤øŗF¸×|?qĻZ\%ģĪ´`H 8õÆ+‹đįà CAņ–Ļ5KwîK"Äž•*G>ƨüBņÖŗĨø˜éúE÷ŲŖ‚>\ķü@ôW'˙ +Æôü‡˙ˆŠŖBˇ%ĸՙUąky&Ú=K⮙ö˙IpĢ™l¤Y—×oŨoà ŸÂŧĸ‘dC‡RHėGJú3×ĢâīA%Ûk˜ ‚a•cŽƒĻųâęÖKšíe’ &ãēœßėĨMô1Ė#wĢŠôĩņWÃŲLj ]Ú,Ņöø`?1Нãû¤Ņ>\Á|ig=Įüƒá>ĸ/|–äåėåxŽ}Ė?ô,~ÎügÔÁm3KSũë‡øę˙ėÕÅNÛ*odÎڕ°u:´y5zĪÁNēįũ°˙ŲëÉĢÖ~ ũísūØėõčã€Ī3ütsŸ˙äzŸūŊãūFŊá7üˆÉ˙_2˙1^wņ[ūGšŋë„Č×ĸ|$˙‘?ëâOæ+ŸūëĢ ū÷/™ãž'˙‘ŗZ˙¯ų˙ôcVˇÃ}=¯ŧs§2ļŧ~:8ũH§k>×õęĻĶFŊe’úfIˆArA ØükÔ|āôđ†™=Õėąé†é¤å‰;AôîMiZŧcG•=Z1Ą‡”ĢŨ­2>3^Ŧz…ˆ?<÷B?ŲU?Յxĩu;ņø›Ä’\BOØá_&ßŨAåŋúbš oŦā}’ÜF¯čOJ× J’æĐË'ZŗqW' uŦé5Ŋ>?ųl\ú"U›ÄÖÃîÃ+}p*Ū"’ŪDG Z[D׸íbķĶĒ09ôį­vļģ¤[J[Ž:uŽ2KiŽ|%Ģ,&$ēŸdJNrŖŋæ?JąĸßÜéw Ē›—ŠLõ¯ 1”jTŧŠĘ!R.Yõ=ÎÅã\!ā„]Õzōâ;{Qfč ũk‡Å2`ˆ­ßwNMIW:œāÎ25䡠¯9Ģîz÷m:Ą›PŠs3Covõäũ+›÷¯dŊŌ-ü1āũNęéŨ­ŨĨžéÂĮĨxn™¨-í° @™g¯¸¯{-’„}›ŨŸ-SsšĢļ.Ôo÷ĒJūõz˛ØđQ+u?S]7üCmáBōå‹Čhö œ’=HŊk™oŧ~Ļ’”ā§Ôp›„”–čöķņŸB;SĪēG˙Å×9­ü_žģ‰ĄŌ,–Īņõ§…´ûģ+ø.Ĩ‰åEä*š9Ë@:æ|UŠŲk>#ģÔtøĻŠ ‚¤ĘĮÍБÉįņŦJ+5F1›šŨšĘŧĨMS{#ĩđŒ­ŧ'5čŊ‚âk{…\I 3ęGcY^2×ĶÄž#›P‰$Ž‹I ‚ßI={×?E5F*Ŗ¨ˇ¯'MS{v˙|c§øHęn‚ę_´ˆöy §wg9aũęâ(§RœjEÆ[ •WNJQÜčŧi¯[x—Ä’jV‘O- Y€ 9čHާĀ˙4¯ xqtëËKé&ģî…Ž ãĢúWšQS*”ȸb' ŽĸŨž×?ƍ F~ĪĨęũ„›~aōŽÅ5o#[6,ėOX"'/ūķwúp=̐ u¨†”ŌÔǘĘÕ›)kcd]1æ?ʞĮÖ¸ÆbĖYŽIäŸZŪņ<ؚsŅKĮ˙ÕXįc*sTilzø J4TēąCV´2}gVļĶíÆd™ĀĪeØû“øUjô?‡P‹-'XÖUCŪ86iÜŗ ΡŸzä;âŽėuß‚x?HƒI•dˇĩ`ŨLĸœĖ į#hĸš –PQ€ÉôŽĘ˙ÃâÃLIx÷Bđ v<ˇƒ†úîǟ<9iâ)į†ûsGi†ōÁ#vOĮ8Ŧ'äŧĪJ›ŒbØŨ:õKÕ´Ķ­LŌę8ԞÃŪŊ[Ãū‹Dd•„פa¤Į ėŖú÷§ØÅo Ü-¤PÅ ´§G]­Û§õ­ļûŋTh¨ģŗ*Õå=Į˜ümÕRËÁ‰`%žP ˙ üĖ=ŋ|ÜSlģ†AÁÅzWÆ]sûSĮRŲŖîƒNŒ@¸éŋ̟ˁøW9$œZÔá“ģ-Yë÷víļQį ūņųŋ:Ķ:ũ”Ÿ33ŠîOôŽg†cŽ•fÖēa‹Ģkœ•0tfîÕ™ÚˇSõ5ÕxB˛ņ‰ úšƒėī&ļœ‚1Īâk•n§ękŧøG˙#Š˙¯I?š×­ˆmRm'Z)ĢŖŋ? |.AÄW`ú‰Ís> ø@Đ@ķčWo3(ĪŲŽ0 }`gę?Æ+‹‹kũ­î%„ųr’cr§ĒúˇđÃÆ—Ú­Ôē6Ĩ!¸‘#2C;rÅAĢũsšķ͝~ÕJįŠ5†•WEÆĖņéb’)^)T¤ˆÅYHÁu™^‡ņsKŽĪĖ÷°¨m‡.w^ üˆüĢĪ+ŅĨ?i.į•ZŸŗ›‡c đnŽšī‹,,Ĩ@đ2L§ĄE ûøŌxËG] ÅWö1&Čų¯`Œ7>™Įá]×Á­//ŠjΚņŸüyŋöZoÆ](ŦúvރīĢ[JqÜ|ÉüŪšŊŋûO'MŽŋĢ˙˛sõ<ĸ¤† '™!‰I$`¨Š2Xž€ ŽŊ'ᆡēÅÆĢ:K ,ôķ<ūų×MZŠœ™ÉB“ĢQAūøKa ˛ÜkÛŽn˜dĀŽU#ö$rĮņÅnŪü9đ”Ö˛fÁmö)&XĨe)×Ž?1\ĪÅ_\Yˇa3DĖ›î¤Œá€?usÛ=Oáë^IōÁ¸Ã$‘—RŦQČÜPqÔW*5Ģ/håkž…JÔ(ŋfĄ{!‚Ömv;hZI,ŪécF|hË`Žø¯Jņŋ€t- —zŒs­Äe—”°å€<}+Ėôƒ˙Ģúų˙Bîŋ?ä@ŋ˙z?ũ jņ”jÂ)îe†„gJ¤š>|ī]įà éž(}Mu”ũœDcōܯŪŨœúôÁ×Ģü˙]­ũ ūo[â¤ãI´ėcƒŒeY)+Ŗņæ‰e xžK uaGÛqÉĪzæZî>+Čķ7ũ{ĮüpųĮ5Xy7N2db"•gr"aũ¯(•G͊ĖSōâŸw+Ou,­Õ˜šŽ3ÅxuæŲôtŖË!ØĪėŋ´†ģ´ŦÍs ųT °ûQsí^;—”šöõ¯¨žh_ØÚhc÷(ŒqÕĮ-úšƒh.Ĩ˙Z—y œEŧĀIŦ߇/¯Žß,{a•ãŽ|ŧē–öî{𨴺ČŌ;ԓ“TŨC6Oj”ôÅ7Z \ ˇlš‹9īUĀíW-—÷gžôÖ7Sõ5Ū|#˙‘Ô˙פŸÍkƒn§ękŧøHâļ?õé'ķZ÷ą?‘ķ8_ãGÔØøÕ˙ē7ũr—ųĨGđƒCšmJã[tdļXŒ13 bA8õ}OĩzNļūI­˙ˇK`ų?mōÁĮÛŋđéRjpŨßh…4+û{Y?u7–$@?ŲįëÎ=+ËöīŲ*VųžģÃ/nęˇ#É~.ęqŨøŽÚÆ&ėPâLvvį–?:ķēŌÖôíCJÕî-uEqxsŗīĪņÜZ]Mm__°ĶĀââuVĮ÷s–ũ¯V’:K]<ŠŌ•ZÍĩĢgšxJđĮØg•B”ļ{ÉsĮ$nĮ偸S†ÁkW{g¸Ņ€ü+Č´­íüĪjë›ęūG€WŊü'´[Į85ĖōJI˙e¯×4ÖŅĩËí9¸û<Ė‹îŋƒ^ķđÛđ€iXéļOũÕێ’t“]N žŦĶčx‹ī˙ÅúŊÃæéĐ{ųGčaÕí[?ÛŲëö‰sõŪjvÁZ)#΍ųĻÛî]Ņ˙ä5a˙_1˙čBŊÛâ‡üˆ˙īG˙Ą­xN˙!Ģúų˙BôÆ­&„ĢQdŪn@Ų׌įŽĩÍ|ĩ!.ĮĨ€5)ÆįËYę˙?×kH?›×Yö߇ŋķĶÃß÷Ä?áZúĮ‡ey†‚tâFß7ėaŽ3ˇņ¨¯Šsƒ+F˜l"§QK3Į~+Čķ7ũ{ĮüpõÜ|V˙‘âoú÷ųáŽpq×ĩvaŨ¨Åų~'øōõ8]Qęw;Ė8ĒŅô4˛“æ>z’sDwņ¯ZɟIh¤tūŅΚâÍ>Ė.TËŊķĶjüĮųbž¨´Dĩ„F§žĩáŸė@Õ5 EĮBą)ô.rôÖŊŖsÜ̐žĩ&ŅVDWj5-BĨUaūÎr@kŖšn zãŠÎ°…cēhМŸSĀũ7SŧŌnÂã×4 ž5ÍáôUĪã^ņËUû_‰ėtô9KKmė3Ҝ˙‚ÎŊŪŪLÉt䃂Ÿa˙ׯ“ü_ŠļąâíRøļUįeO÷å_Đ –Æ)ëM'$ Z(3 ĩoū¯ņĒĩjßũ_ã@[u?S]įÂ?ųOũzIüÖ¸6ę~ĻģĪ„ō:Ÿúô“ų­{؟áHųœ/ņŖęl|j˙ŨūšKüŌą~ë×V'ƒL3YŪîS<+€HačxĮã[ŋ-į¸ŊŅŧ˜$”ˆåb–îž•Sᯂõ%×"Ö/ídĩļˇÄŗ)V‘Č#€yĀÎr{âšbáõKOúÔíœgõËÃËō5ž3i‘6§ęj L“÷*ĀŸĐƒųšÃøAĻ}ŖÄWZ‹ŽRŌŠO÷ߏäķ­oŒzŧ,–:0iUÍÄ ÆÕüōk ø[Ļ 7ÁQÜɀ÷Ž× O/Eũ˙Į ¯SNHĪ~‹Rˆ^ÖŽœ"ŋ•vß /Į‚Ö~kk‰##Ķ'p˙ШøĢĻ CÁīpŖ2XČŗŠvũÖü0Ųü+‰øKŽ-Žš>•3íŽųA=<Åč?ŸČRÖŽMĐiKŽŌ9Z5—‹õh`ũĨÜ}^ŊņWÂ7WSĻša ĖvîŖrĀŽū‡đ¯$Š'b°ÆōRĖw`§ŽÕ߇ĒĒSNįŸ‰Ĩ(Uiĸ֏˙!Ģúų˙Bîß?ä@ŋ˙z?ũ k´ų X×Ėú¯uøĄ˙"˙ûŅ˙čk\دãS:°|ų^¯đSũvˇôƒųŊyEzŋÁOõÚßŌæõž/ø,Ãüx˜ŋäy—ūŊãūFŧķVģk-:I‚Čx_НCø­˙#Ėŋõīō5å*…ĖĘ3ĩIR=3Ys8áS]T#ié…åúÜ\šĮû¸_čkĶ#ŽyĮ­RÚ÷ÂIm"K'1ʧš$°??•vŖSˆļĐØĪ>´E]{({ŠIãp^=€'˙B5ZŨÚ;Θå[$sQi“™<>.Ō&~:qŧú bČ`ģxÉČÜÛhV^Ôŋąü/Ēߞ p;vÁĮë_&‚O$ä÷>ĻŊûâæĢö_Él­‡š‘#ëÔg'ôāņA”÷ļ1I¸öZAÔSĪ‚F|Äú Uˇķ†íøíԐžõ=ąũŲúĐbßxũMu^×l|=âS}¨;ŦgxōŠXî$côŽUžņúšJú)ÁN./Šō´æéÉMn}?|.úÛŖíösXׯ8ŧĻE°s!āMu€Ü('?‰ä4W,p4“žįTŗ ÍZö-]^Üjw˛]^ÎōÍ3n’Fä˙Ÿjõ}[â'‡ãđ„úf‘,æāZũšđ•cnsیšņę+j”#;_Ą,Déķ[¨QEąėļ?|?sáX´ŨZ[=í~ĪqļāģIĪ|õ¯Gh$Y!•ƒÆŲIå9ą¨čŦiЍ;ÛŠŊ\DęĨÍĐöO |Zŗ’Ų-õôxgQ´ÜĸîI=ČƒôúWEuņÂ0ÛģF9ƒ¯)LÅŊĪķÍŒ°4ÛēĐŪ9…TŦõ4–{HĐĩß Ũéö2N×*"Ŗ†ķô¯$ĸļž2’—cb'$žĐwŽ÷᷊tĪ >ĻڋČŋhü´-÷w“ŸĖWE]Jj¤\YĒʔÔãšÔxķZŗ×üQ%ũƒ;@Đĸë´ägĩyįŠŽ,Ą˛!˙×­ąÖšĪÎI‚Ü€šūUΈŠ§AÅXVębTŲ͠ˊšʄž•QÍZÚE§Ûĩ[;SŌYU[éžkÆ=ķŲūhĄx|<€Ŧ÷›f“# Įō?u÷0#ZČė9˛b¸k™âˇˆüŠū´u9„:TėHØĘ›V6Fĩ°xC‡Ū¨Ä~ŠuÄŪhęFk.ęæHäĶQŋÕŦ+ˇëœĶĢ{2ĩ˛0ä0ĪéH§šâ˙5š]>Īw ]Ø~ƒųšķ>§ÖüHģûGŠĘÄqø“˙ęŽMzĐa'¨ęšGzLãš ÎiđFxīUØäj[s˜ķī@Ķ˙}ŽIûTߐŖūë_ųúŸōŌQ_4ķœ{˙—đ:?ŗ0ŸÉųœßü!Öŋķõ?ä(˙„:×ū~§ü…t”Qũŗ˙ŸđėĖ'ō~g7˙u¯üũOų ?áĩ˙ŸŠ˙!]%lã˙įãüû3 üŸ™Í˙Âk˙?SūBøC­įęČWIEÛ8˙ųø˙ūĖÂ'æsđ‡Z˙ĪÔ˙Ŗūë_ųúŸōŌQGöÎ?ū~?Ā?ŗ0ŸÉųœßü!Öŋķõ?ä(˙„:×ū~§ü…t”Qũŗ˙ŸđėĖ'ō~g7˙u¯üũOų ?áĩ˙ŸŠ˙!]%lã˙įãüû3 üŸ™Í˙Âk˙?SūBøC­įęČWIEÛ8˙ųø˙ūĖÂ'æsđ‡Z˙ĪÔ˙ŦÛ˙†ē~Ą8–Kûĩ!váB˙…vÔTĪ6ÆÍZUžEĶĀáé˚ąįãá>˜ü„¯?%˙ ŗgđŌÆÆî˜u+Āņ0aÂ˙…vôVÚŸæüŊŒ;ŲDļ@íų˜÷jšéū׉ H'ũŋJmŋ´1ÍųėãØ–âāÜ< Ę’AīŠÛdû[6 7~*Ŋhb?›ōgĮŠü<˛Õu)¯ĻŋēY%9*Ąp8ĮĨU˙…[Ļ˙ĐFķōOđŽîŠÚŸæü„éAô8_øUÚv1ũŖyų'øSOÂŨ4ųŪ~IūŪQKûCüߐŊ>Į˙ ĢMÎNŖyų/øTü$˛fĖz­ÂŒth”ŸĶ贙ÅTs Mū/Č }…ŽƒÂvv÷ˇŗ­Ė)(XÁÆ@æšúéü˙! ¯úä?ô!YāRxˆĻ:ͨ6[…đ´w†Ęėčî?vÎĒ܌ŽãĩQÕü#…Ž4Ōۇ&Ų˛zūuƒâ?ųõ?Ŧ_ú)k{ÁúĢ–m6SšB–‡=@Gõüë՜čUŽđķ…ģ?3FJ*iœv>ĶlŽ´Š$¸ĩŠW–\œ`V‰l–Į^”F1ÂųËės†Ÿ?đ*éü˙ y?ëšūBš°xg‹tį­‹Ģ>jJHˆŪx1Y•§ŌÃ)*ÃrđGQX~&ēФļ˛Mk6™ŽGš ąAž}Bū•„‡ī˙×G˙Ѝ;58ŒlZ•5MuC…¤šŽ“Â66ˇ˛]‹˜#”(BĄ×8ë[/†%Ŋm=ūĀ.”€apHČã9čEgxũu÷ûŠũk\į̨˙ĻË˙ĸc­éT…j8§­ˆ’rĒãsc_đŌØD×VlÍ ũøÛ’ƒÔJ­áų´XcœęōZ&æ_/Ī gŽqŸÂēLú—‡‚ŨųŨ ÎW§?¯8ˇböŅļNJŸ^+:ņ§FP¯é.Œ¨9M8KĄé6V~ÔĄiŦ ˛¸NŌŅ€@>•IŽüēI6– V]ĘpGQKāųO˙]Īū‚ĩÃ1˙H¸˙¯‰ô6ޚ¸˜SĄŧ‹S(Aš8ßb 7’K+w—ũcFĨøīŸÖ§ĸŠđģšÜ´;û];F‡B‚ōîÚÕmÖIeÚ2IĒßmđoü÷ŌķūōԚ¯ü“Éŋėŋú p€žyī^ö&ŧ0Ņ… ŅĮNŖz“yĪŠLИŪÜŨ8f6”ŪvãÛŽūōË@Ķ ^[ŲAmĄäF}+Īā˙˜ŋß_į]Žŋäi˙_‹˙ =c”\jTq]Ę­tã’>…Ąë†]>H—< -Ü:ƒî9ÆŪŲËaw%´ÃįCÔt#ÔV…Žžß^…žI˛Ž=xČũkCĮ1*ęķIŠßE+ũ ŋ:Šą§ˆÃēЏ,âå ōIŨøOOŗŧ°îmâ”Ŧ¸×8qîŧ’é‰"1VR˕ āÎ›āŸųÜ˙×oũ”WpOö…˙ũ~Üč×­•HPÂÂ|‰ÜŽW:\Üņæ€Ö0Ļ‘5“\4ęA‚Û0súâá+;kÛۄš‚9Ucī\ök¨đGüŨ˙×!ü뚕Xâ1P|Š.ßyŦ áMęjŨŋ„ėnZÚé´čf\G*ČČãéY:Õī…˙ąnńúyģ1‘ŒŠmŨąīY^#˙‘ĢR˙z?ũ•›šÛ)ƚϴ"&âĨpīM=iÔĶÖŧˆOaÕĶø'ū?îŋë˙ЅsĶø'ū?îŋë˙Ѕtā?Ūaũt2¯ü6dx‹ūFÍOëūŠZ]SŊfGyŸĮëIâ/ų5?Ŧ_ú)hЗvģdiAüš­kŋ7æŋBcü‘ˇãÔm*lāî–/Ā€ßû%hø/ū@ō˙×vūBŗ|~āɤŞKË&=‚˙ŲÅhø/ū@ō×vūBŊK[ō0˙—?3“OęØoôyv=ŊMAwau`P]ÂŅ3´7|c?Ė~uŧ|{|]öhĐĘ ^°$FqåqŌąõnį\¸ĩyėĸļXÔlœČXą_T\coŋZķņTpĢ™ŠûŨŋ¤m TvēĐŪđ7úëī÷SúÕmCÃzīˆ/æH‘mæ•Ydi FŠx=AíV|ūļûũÔū´_øēúË[ģ´öŌ[Ûē *í”VÎrGņzWMŅ– *ŗ˛šœœ•WËš.­Ē[xcD]2ŌU—ShĘÅûĀž˛0ėŖ¯žŽ*ÖR5û¨ĄGĐ WĄËe§ø›L7Pĸ¤Î8.0ėĮŊp ŗ+IRbëXæ\֏/ÁĐĶkģüGsāųO˙_˙AZá›ū>.?ëâ_ũ ĢšđGü‚§˙¯ƒ˙ ­pÍ˙õņ/ū†Õ8¯÷*dĶū,‚Š(¯(ę;ëč%ēđÁm$˛X*Ē/RvŠä?°ĩ@ú ˙÷Ívæüé~KåˆL`ŗYeļîŽ3ƒĘš˙øO/‡üÁíŋđ9ŋøÕ}.• F´­dqR”âß*šÎÁÅÔcŽ$ƒž‡ØøčãG´˙¯Å˙иģ@ÂXËɸ€r[8Īã^—ĒęCMk&p<šîV'ørŦAüĀüë ž1pŠéÜĒîĶ‹9o é“˨ĨëÆV °ûĖF*ˇŒ/Ō÷ÄqÛDŲ[Y$#§™!VÛõ ŠāUĐxž÷S´ąŒØLÆí˛i|ŊΙéˇ<ü{WK {8É$’I$œ’IęIäšX§ %‡Ž­îĮ ԟ´gsāĸ™sžžwūĘ+—A՞ōōAa.×ēÔņʙƒøƒščüqĻÜ˙×oũ”U üu{ÕĖ)ŖÛēE<‘7Œ lršĮ–qœgŠ­y(Ī YŲy*˛åF۟wbĒnĄ1;WqœgŠßđGüŨ˙×!üëY׎õĪŗ,ö1[¤Īš. „äcظ­˙ĮũßũrΚ(B”1pT×üjŽN“æV+ëē6Ŗsâ;éá´‘ãĄVƒˆÔÔËšŌoėá3\Ú´Qf “€?3]6ąã­;Xšą‡K†d‡hķčĄ$¨n¯­aęū(ŧÖl œšlčŌFæEēg#kéåŒôĮZÛC į99Ú]ŧČĨ:–I- šiëJ: CÖŧ…šÔö]?‚ãūëūšũW1]?‚?ä!s˙\‡ū„+§ūķ롕áŗ#Ä_ō6jXŋôRÖ§ƒŦZmA¯w Ģ?•oŨøcM¸Ô&ŋš2qŋ ō¨_äzĮÕ<]§éö†ÃÃâĢ‘” Ũ՘pOû#œõĀæŊg„åÄ:õZQÜæU9 ĄĖ^­÷Š^4!Ŗ°„CŸúhä3ū@GøæēŸČOú?†/&-ģ™Ü’Ī#œŗą9,}É&ŊÁō—ūģˇō†ˇļÆššT-Ž?ūē?ū„iõŪ¯‚´ĩ¸ä“÷ĮRséY$Đlô1nmüŌæUį`F¯jž]YsOKj˅xY"o˙Žž˙u?­`kŸō2ęŋõŨôLuŋā`|Ûėu?­k\ø_L’ōæūäÉēVI— Ŗ ōŽõĶN„ëāŖw2sPŦÛ*ø%isŗĻĘūC?­qwr,ڞĄ"Ąģ›÷ŲĶjŪ-´ļŗm?Ãæ)§Û°K Ũ ¸îKŽĘ3Ī\ äĸa‰c\íQžMcŽ”iŅ…îŅtbÜÜíĄŪx#ūAS˙×Á˙ĐV¸f˙‹úø—˙Cjî|˙ Š˙ëā˙č+\3˙ĮÅĮũ|K˙Ąĩ,Wû•1Sū,‚Š(¯(ę;­WūIäßö_ũ¸AŪģŊTÅŧ›ūÁã˙AŽw¯[4øiúømŲ,ņķûëüëąņ×üí8Īúbņ˙zã ˙˜ŋß_į]Žŋäi˙_‹˙ =āUôoŽ%*xĩ˙ ÉoprÁLRō=ëĐũEpĶÃ%ĩİLģdŠ°íŸonõ§áŊKû?WEcˆ§ÄlsĀô?ūu§ã=4¤ąę1ŠÃb9ąØ˙ ūŸ•:ŸíXe5ņGp_ģĒãŅ—|˙ ۟úī˙˛Šâî?ä!˙_ˇú5ë´đH'LšĮüö˙ŲEXoi,˛8idy[:ŗ=ŊMnđ͝ƒ§z‘í*Éŗ€ŽŖÁņ˙w˙\‡ķĨņ‡l´­KČ<֑^5Û#æuSÛĐĶ| Íõ×ũrΚha§CĪÔŌué6ŒŸČ׊Ŋū‹JίEŧđĩ…õô×r™ŧɈ-ĩ†8zzYÚ§…tû=&ōę39x`y%T‘ÛÚĩÄåÕęU”ÕŦɧ^1Š‹8ēiëJŧ¨>ŧŌĩäEkcŠė:›$i*l‘Ôķ‡\Šu“iŨXéöl0֖įŋ1/ĨX€:ĐRŅMÉËq$TrÛÃ1XŖr:nPqRQI6ĐĘ˙a´˙ŸX?īØĨKKhÜ:[ÂŦA€AŠčĒö’îūö$’č2HŖ•vËH :į ĶėÎ3inpr”ŋáVh¤§$Ŧ˜4˜`éETŒŽH!›lQž:nPqNDXÔ"*ĸŽŠĢ€)ÔUs;ZúQE BöļîåŪ™Ī%Š•MõëEܛŨ†89ĒĩˇI‰*ãŖĀ#ņüMMEkfAP­Ĩ˛žņm`wdFĪŽjnĮŒÖ¯¯%ŸŸo eģŒŽŌW*sƒü‰­)SŠQōĀŌ)T—,UŲ­r–æ&–å"dŒēEhüj“ˤĮÃiŪÖûö+˜°ņ3̎Û9Œ ąŽI5ÕÁ*Íēt` yĩéVŖ¤›ûŲĮ[ *NŌDŸJiëNĻžĩΰę(­Ŋ+LͧŌ.¯õ‰ĄŽŨŽæCĀPÎ0IëZQŖ*Ōä†äĘJ*ėÄĸŽj­ĸƐ.“5äōŧ›d@ę6ąÎJāŊęõĻ—c˜5MfčÁjĮlj –sÛœöZũJ̟"ˇßĄ.ŦRģ1h­ë­#NŊŌ¤Ô4Yä‘"ÉxäRį‚:ķPxwKƒWē–)ŪUUx13Ώ5/UMCžÚčÖ<ŽFEĐ&‹Ļjļ˛Kĸ_É4ˆ7yr‚7ØČ}yĪššØj”~4TfĨą=”+=ũŧRr"ĢbĀVīŠô‹-&ÚÉėâ*Ķ\Üŗŗ|ģģŸUĻČVĶūģ'ū„+§ņ÷üyiŋõöôS×f–¤šØĘĢ|ņIœu]ŅíbŧÖ-­įĮ#ĀvĒU§áßųlŋß?ʸh$ęE>čÖ ,ø¯MĩŌŽŦb´ŒĸĖ’ŗîbŲÚPŋīąáËT†áŽŖ,Q” 9^?íOņįü„t¯úã?ū…\đGü{^žŋČ׎čĶúō‡*ĩŽny{ßRĶxwÃčÅ\"°ę É~ĩĖøšÎÂÂöÆ-?fŲb•äąÎTÆsŧՕ¨ÛĀÚžĸÍ eÜŲ%A'÷P¤Fsh™ëĩ@Ísâąm*qĻ“îiJēnGg hmūÍÄ Ōŗ6H‘€Ā•Įŗ3ļįffõc“O¸‘%š’TËWbÁ3šíV´khī5‹[I`3‰älÁc€IÁāué^öPIEF”hRüJļķ5ŊĖSĻ7Dá×> æēüSoo{ iŦmƒĪ$ĐÍ6ķ#Kˇ#;FR8<Œš‡KŌôÍg^žˇˇ’H-<ŠŲä`Ha€…Ž:dķĶ…iˇ…tôÔ ´K 2YĮ#Ŗ #:Ɏ:exŽÄĨĐĘŊ\<ĨûÅ­ŋ3õčî43cuōKö‰.<Օ–rĖ Æ;0ëIŽx„ëhĒmRßMˆÂ€ÛąØ,1Į“D~ģm2ōCayö¨f‰D~KgËa&I]Ŋ2 fļ,|3a/”­ ÜūwŲ•ŧ§ĮŲüȡ´­ōž3Ķ ëÍ I“ΆĻų’Õ3Ž­MR’ÎįhO0ĘUI/Œ Ô¸đåŒ~mF+†yŖŗŽI#Čv(aĮ*FīĄõËÖ5i)ÅÆGB•NÄNnûĮŊt'­|Ôé:sp}¤‹č:ˇ`žëaTą9ĀO XUŌéWŗižÕ/­Äfh˛ +ĢÔë]wņžOō9Ģü'7ą÷Č˓‘[~2jē}â+[RęŊˇ1Ú×Gâk>˙YÔĩYí^ųí6Û9uBɒxį.ßĘ´ŧfŋņ=‚qĘËh ūËą?ú­`ŠÂ…WMßn–ę'yN<ĘĞ ”ZH),G ÷ÁâjO§‘ĢŪÁ’| ņd÷ÚûĨCāä-Žn'ķĻđ\ĸãZÔ'vVš@}CJHũ oƒū&˙™ūDUøĨčQđ r5Ü2 ;ßį#§lįųV1nn.gŒƒˇĩô)\÷kJ¤-ėÕĖoą^G¸{„lĸ°ØßĮʃĮ~Ūĩ4:v­,ĸ(l¯Ū@ mX\ąœŲ¸ö5ĐIãH&ԅüēqJ˛+å|œ˅ÆyųNGûŧ ĄkŽŲũ…-o#ģ Z˜]āe[ívrztÔsNËš‡ĩ¯kōÖąęס/¤W×(ËŦ(îĀŽqĪ÷õ÷¨ ^F“9IãHØE1ÃŊCÁô­›/@ēέ}unvßĢ ‹rí&Eq•pTôÆH÷ĢW+ŗšĶQĩsŋ’Y¤s&âŽH)ĐĩzúœQdSŠ[šŪĪM?ā˜éڜÆĶZ]ĸIôŨČ9$qĐuôZHž& $l„¨`H$yėAē7ņ ÕfÔ­āšiŽ#›ĖŠãcÆŽëŒĮ*¯l VF¯¨Rü]ÄšŠ2ĒĄFUNā:RjÅŌŠVNŌ—r] Qĸ™iî\‘øŠî<ûW¤–Œ{dU$ôa÷ŊĢŊ_¸ŧcŠđŗūôķ3 {] ĢöëKęÖĶ]Aķ"‰äUgázr Ęĸ¸đõŨķZįŸ8ķ+ī],:~ˇŖÃi¨]-­Õŋ˲0ĮƒĐqíšæ¨ĸ…dŨÕĶŨ qæFíÅūŸáë ‹M*ú;í^äl B?ŧØ'g ’qõ á Ģ-&âO´ÜÃmÂiã'ŊaĀôĩģÆÚpqŖ„{-oViø?Pˇ‚ĀŲ_HĢgqn7´…oRO#<ûVcų"yŖ‚æ”Ę‰apĘŪ‡ ‘ĶņĸŠÆĨ~x(ĩŗŅ—rģĸ֙˙![OúėŸúޟĮßņåĻ˙×Ų˙ŅO\ƙ˙![OúėŸúŽ˙]Г\ŠŪ7¸hD2ų™UÎ~R¸˙ĮĢĐĀSu0õ#Ųf”âŲæÕ§áßųlŋß?ĘēøA`˙Ÿųīū5ƒ €ž'’y#Éęv’šũ+š8J´jAÍuEēąœZF—?ä#Ĩ×˙ô(Ēį‚?ãÚķũõūFŠøķūB:WũqŸ˙BŠŽx#ū=¯?ß_äkŅ˙™Šô9˙åÁÉß˙ČWP˙¯šŋôcT=˙ü…uúû›˙F5A^6+øĶõ;iü(ô ˙ČĩÕ˙™¯7ŗ˙úäŸú¯Iđ˜ŨḇŠqúšĖ‹ĀPCqũžRįË úׯˆÃT¯‡ĻŠ­ŽZu# ˘ä+ÄV­s§æ;e–E<7 îEv^ ĐbŅ-í¤IŪc4ž_Ė1”ļJĀšˇKĢy “v×;N yNœđÕRžŒíĄYs)Äķ:*ÅõĢZ]:yRĮâĖ\dzÕ~Õô’”SGĶÂIÆčÛđæ•gŠĩë^É"Įo¸årKĒķˆÜô=…hÜøRÖnĸŨv&n$YÛh…Dr” Āŧ@ĪQÕxŽzØęV’˙ĸũŽr#ĖEąÆ@ã¯8ĸ¨ÜYÍ"ö[\ī™cÜɞš`8÷įŌ­5ØäŠJŖ›”gdt’xJÄßũ%ē´H嚁äšĀbˆ°”a~éî9ãŊF|3d?ĩ!CtĶÛ6áĨUY&ũųØUŗ×nTãk QĢȰK2ߕ+åBīŧ‚¤cj“ÔØSRãSōŒ1Ë{åH€Vl:”qЌœzv§u؅JĩŋŠSĸĻšŗēŗ*.­Ļ€ļvųą”Î:ã T;K|Ē 'Ļ*Nč´ÕĶ548KŪ+˜•ŧ„×mĐœņÖ°<;d<ŨŽŦGĖŦkŖ#ą_=ŒŸ´Ēė|ö2~ŌŖh}T‘ÆŽškˆŖ>Ž?ĸ‘\I7ąÎGEOäG˙?ļßø˙˙G‘üūÛã˙üM>WũX(ŠüˆŋįöÛ˙˙âhō"˙ŸÛoü˙‰Ŗ•˙V *"/ųũļ˙Į˙øš<ˆŋįöÛ˙˙âhåՀ…K+Ve`r œ}?í7õ-Kđŋ˜ėÔ˙"/ųũļ˙Į˙øš<ˆŋįöÛ˙˙âjá*ø[_?ø"qOt3í7ŸôÔ˙đ>oū*Ŗˆ´'1I*7'x‘ˇäœ“ģ9Ī'ŸzŸČ‹ūmŋņ˙ū&"/ųũļ˙Į˙øš%:˛ø›û˙ā‚ŒVȁ˒ȞMqs;(*Ļ{‡“h8Î7Œā~TåšxÔŦWWPƒÔApņį봌ԾD_ķûm˙˙ņ4yĪíˇū?˙ÄĐįVü×wīø!ËZÅeP€üÎÄąbÎ嘒rI'’y§TūD_ķûm˙˙ņ4yĪíˇū?˙ÄÔ5&î˙Aíĸ#[‹•PąŪŪÄŖĸÃu$kų)—í7ŸôÔ˙đ>oū*ŸäE˙?ļßø˙˙G‘üūÛã˙üMjĒÖJĘOī˙‚O$wh‚F–fC5ÕÜûTOs$€c 1#8&ŠŸČ‹ūmŋņ˙ū&"/ųũļ˙Į˙øš‰9ÉŪZü˙ā$ļG;Žé y¸E‘Ĩ0ˆ¤rs\\ĐI ˜Ĩ_=3ŌŊ[ȋūmŋņ˙ū&ąõO ZŪĮ#Guj“ļ?yļB{ŗč+ĐÁbŨ?r{|Žü61Ķ÷'ąNËÆv6ˇĖĩ–Xá'`B†Rą"+žĄ”u&ąt_>‰ĨËĢܛ˜æ¤-ĩĢ áXdå‡#¯î‰=œ’…!âCÁã8VqŠPTÛ,29#ÖŊ¨ÖŒ•âÎętpō‹åwŊēd^-´H,PÛĘĻŨėŲŲrÆEˆ|ÃČ^z{Ôđ“Û˙Â<Úk[Ëæ-Њ†ĐQŒûØdT€ŋB=ë˜ Ė …8'ëSÅeq7˜äÆTõ?Jdˇb– y=‹:ž¤u;˜Ĩ1TˇŠEXØ*ȒTÎ?P)‡­xĘ÷ÔķöC¨ĸŠ€ 0Gj­{co†æ=ņƒģ#ŸĀÖW†l-’É/qf@#-´7ËĶ=Ģąå\ĩ%5fÚī˛ŋĀįúúprQŲ'øÛąŌcuĒVŸ•žVÔ[I& ˆ$/‚=ÍRņ2yļöIåyÛŽ”y{ļīá¸ĪoūŊrRÃFŽ!QŒ´nסüÔčŠZTčē˛Zöū—čncž•‘e§Ãi§Ī"Ų Ydƒ ”ŋ8į?g\(oZ/Lųc˙­iāaRvŒôæQŲuëŖ™œąR„o(ôž˙đœœR×1mu,翟mt?Ō­|Ôsũ᷆üE_͇üO5nÜÅ˙ Ņ[.t¯Í-•˙Á xÎ{Yníøįé ĮjäĸļuÔWöŒų›‹Ø§ÎâO†zUûųn`ņ>ë[o´IöLķ`në“ôĒž\”­ ]Yģ薝7üėü‰Ž7ŨŧŖgt­ëō7Į4c5‰áæwmE¤Ë‘ŽØ˛g;I3Ū›âdGKxLĘn1ŠÁnŗXö¯Ģ9|ūWīú—õ¯Ü{dŋĢÛąēxë@9Ž{@Pu;Ļļ…í­QDo ɸ‰3×ēT0Ī%ˇ…¯d‡"A+ō;Āfĩž[Ë7.ą_}^ĢæDqˇ‚“ĀéˇĐäûRžk'OŌlmd™fhķ‘/ú܎IęŒsŨÃĒjÂÚČ\+:īo4&Ī—ß­g jJQ„žÕ[Ē]YRÅ8E9Į~Îũ/ØéÍ'ĩexoū@ŋđ/ũÕ r(æ×mV[9.ĶČ?ģ9ęyã)SÁsâeC›ážž—ķōîTņ<´U[ooÄč^5ž3õĒΧ[ČÁÚ5,Ŋ+m§ˇđΤŗFņFŚ]ˇN0?ĪĨoŲôlđ<¤˙ĐE*øUE7 ß[~C¨ė՝ŽTE˛€<ĨĀ9 īëVcŗpBŒũ+—Öĩ˙ļĖÂ\5‘@‰‚wœåĮô­O¨ēŌío-Ä{_Ķ ā×KËĒ^’œŦ§Õ­ŋĖĪëę^Ķ—^_ÄÚTā usVRÜx‚Ú;…ÅĖZ)náIᔰČúÔ˙jƒt*&BgÄ3÷øĀŅ5‰æö“Nĸčōō+[ą#¨tdnUéUN™jÖ1Ų>DxÚģc‘ÍNˇĩÃÛŦˆeAš“<K ņ\&ødY$eOqÔT'Vž×]ɖÔ&ėíØė ’ö;ÆO߯ ĢØúúõ4ąÚCÄĶĸ~ōly„’sÅ:+˜&iR9QÚ#ĩŸē}蛓n%O8.ãyĮ­7*˙ Ū‹đ˙!rĶŊŌ[ū%ô :)ÖU„ü­šPš*Ž*áĩˆŪŧ?Ëō÷gšĪJt3Å:ąŠE}ŒU°~éA¨âÔlŽ&1Cu’ üĒÜÕJxš—æmŲyģ'ßą§F;$Ž˙ĐZÃlĶ4JAšC#äį,hžŌ—…åRL.$NHà zO’ÉHŦņãzƒĘįĻi Ä"åmŒˆ&eÜžHõÅEë99;ßsDĄÉËĨ†Gg W’Ũ"‘, 9āã§´XÛÛÛ=ŧiû§,ĖŦs’zõŠdž(¤Ž7‘Uå$ '–>Õ%'VŽíŊmøm÷„/ĸZ~Ļuχae8š›xÎŌĖ[n}3Ō­Eg 2Ī*)9C¸ō@ĮáIs{mfÜL‘é¸ã4Øõ 9 ’xîchŖûė…úÖ˛–*ĸöˇ}/Š 4!îŲ/¸’ÖÖ++dˇJƝ9÷¤kHZņnŠŸ9ĸœô¯Č5++Šp]E$‡ĸ+ŒšIĩ;y|ŠŽĸŽLĩ›f—ŗÄ{FŦųŸ“žŖįŖË{Ģzĸk‹xî­ä‚Q˜Üa€8âŠÚh–VW < u ČÄcčMY’úŌ+d¸{ˆÖûŽO¯øK{ûKŊßg¸Ž]ŧļ͜}iÁâaJJåëŖ°Ĩ2šrŗ—M‚ x-åųr–2IÜOZiĶmšŌfW1BÁ9tįŊ,•Ė‚8náw=\OšģˇŗP×3GžcCx˜Í'{ˇëäšpoKlmÍøžŲūfā{}*ÅD—ÉnnUhp[x9M!ģˇ[_ĩ[ãw™ž1Y¸Õ›I§ĻŸđ ‹‚ģV×_ø$ÔĶ֕He ¤# Žô‡­f•™ĻčusˇOqâio¸[)>|{Æ7ƒÖē*ĘO0ĘD„m/ŽHôÍtaq/)I-ZhÃGÚ¤¯ŗš‹­¤0Üéžj"Ų,Įxۅd}itķo'‰.žĪoŲü•ņˇ~{cÛ5ĩ$i4f9]Uai!‚+tŲ iį8E~•ŅzT}›NöļúZ÷ŋŠ”°­ÕæēĩīįĩŦq*“4hmRŪiĖi+™î˙ëWqí$€ g֘mmĖ&~Q9)°mĪ^• KŽX”’ŦØapžÂíģô9Ë[ig×oŲEŗBŗ¯˜˛ÆˆĮoJš¨(MsG ̀;|•ĒௌėˆĒÎrä >φŽ7tvE.™ÚÄršô=¨ž?šĒ›Z(Ûđ°Ŗ„åƒŠ{ģū79˸į ŋŧĩæ[Q˜˙įĸ•ų‡åüĒ}"ņ-<7-Û}Õyߞ?˜­ąbF‘QD€ÎËcĻM3ė–ūI‡Č‹Ę'qMƒúâĩža Ō)Įn]zŲ-ŋ­ˆŽQ›š–÷ûßS™ŅÚkJØĪ Ņ ĩ)#H8y ,ūU>Ŗōx†iísö‹{t‘ŗrrŋˆŽŠHc›o›>Ōw(8#¸ôĨōŖ4‚5ķ[‘éôĻķHēŽ˛†­YöŌĀžNNm/ëæs6ŌKqáRHC’Wm ōÆLÕû tR,– ĖS÷{Pnį×ŪĩŖ†8CãT KŖ'ŋČ­-⑤Š‘ÛĢ*MM\}:ŠjÍ]ŨYųZĪČēxY×TėŦîŧīuægØ˙ČÃŦķõÜ5ƒ-ÔŌ^ž°–ķ”IÁI@ųCå#ņÍv"ƒ;ˆÔ4€ ›sëH-áX<b,c`Aˇ˜§G0…9šr^é/’Vy0sœTy­fßÍģŖ+Vž(õ"V‘D^cėpÛZ°\ÁrĨ š9@8%0’Z[Jˆ’[Äęƒ Ŧ€…ú RÃo¸""ˆHįōŽJ•ŠN”`“ēŋkZįT)TG&ÕŸŠŽĮ$ēŽ–‘y[Ëž<ÕÜŊQSj0ųšVH–O+į1&ĐOâĩ8ŨŅŲ™>é#%~ž”IʅC!ęŦ2 ieŖJŌūē™_§ĨG%ŦÎ^[X$s՞%cų‘]K3‹Ÿ4ĸŌŗZ[ĢŊõŋæbđQåO­õüŒ}ĸkˇxD_icpc Éí_ÆŽiÍ´’4šÖY‚“!ˇ  Žq*ëZÛ4 [ÂcOē†1´~=:"´ˇƒq†Ū‹ 6ČÂä{â°xēoŠYčīĶ]Mž­%YÎęÍ[¯n‡ ¯fŪ˛Š/-ĩãˁæßÔãÚĩīZņ,/|SČû91ŗ~yëĮCúÖŧVv°>ømâŒãTãę)ķAÂlš$‘ēę~ĩ´ŗ(J{;{Ũu\ŨģĮ5ÕôéĻũN~ÃË6Û[āZ–+oŨû§8ũ+!ūÖto°|…ˆ]īĪU aīŖúWp"bō–4Xņ€qĨ'‘—åųIŗnÍĨF6úcŌ´§›Æœ›PŊÚzë˛ĩũHŠ—šÅ%+Y5÷Œ˛˙ oúäŸČT§­(@ 0‡­xō—4Üģž’\°K°ĄŗØŌįëE2gëF~´QRŸ­úŅEúҟ­PŸ­úŅEúҟ­PŸ­úŅEúҟ­PŸ­úŅEúҟ­PŸ­Q@~´gëEgëF~´Q@~´gëEgëI´žGęhĸŽËc˙Ųleptonica-1.86.0/prog/reducetest.c000066400000000000000000000050221506303110300170350ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * reducetest.c * * Carries out a rank binary cascade of up to four 2x reductions. * This requires all four rank levels to be input; to stop the * cascade, use 0 for the final rank level(s). */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 level1, level2, level3, level4; char *filein, *fileout; if (argc != 7) return ERROR_INT(" Syntax: reducetest filein fileout l1 l2 l3 l4", __func__, 1); filein = argv[1]; fileout = argv[2]; level1 = atoi(argv[3]); level2 = atoi(argv[4]); level3 = atoi(argv[5]); level4 = atoi(argv[6]); setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); #if 1 pixd = pixReduceRankBinaryCascade(pixs, level1, level2, level3, level4); #endif #if 0 pixd = pixReduce2(pixs, NULL); #endif pixWrite(fileout, pixd, IFF_TIFF_G4); return 0; } leptonica-1.86.0/prog/reg_wrapper.sh000077500000000000000000000036071506303110300174050ustar00rootroot00000000000000#!/usr/bin/env bash # # This testing wrapper was written by James Le Cuirot. # # It runs all the programs in AUTO_REG_PROGS in Makefile.am # when the command 'make check' is invoked. This same set can # be run by doing: # alltests_reg generate # alltests_reg compare # # Some of the tests require gnuplot. These tests, listed below, # are skipped if gnuplot is not available. You can determine if a # test requires gnuplot, if any of these situations is true: # * a function starting with "gplot" is called # * a function starting with "boxaPlot" is called # * a function starting with "pixCompare" is called # * the function pixItalicWords() is called # * the function pixWordMaskByDilation() is called # # The wrapper receives several parameters in this form: # path/to/source/config/test-driver -- ./foo_reg # # Shell trickery is used to strip off the final parameter and # transform the invocation into this. # path/to/source/config/test-driver # -- /bin/sh -c "cd \"path/to/source/prog\" && # \"path/to/build/prog/\"./foo_reg generate && # \"path/to/build/prog/\"./foo_reg compare" # # This also allows testing when you build in a different directory # from the install directory, and the logs still get written to # the build directory. eval TEST=\${${#}} TEST_NAME="${TEST##*/}" TEST_NAME="${TEST_NAME%_reg*}" case "${TEST_NAME}" in baseline|boxa[1234]|colormask|colorspace|crop|dna|enhance|extrema|fpix1|hash|italic|kernel|nearline|numa[123]|pixa1|projection|rank|rankbin|rankhisto|wordboxes) GNUPLOT=$(which gnuplot || which wgnuplot) if [ -z "${GNUPLOT}" ] || [ -n "$(${GNUPLOT} -e 'set terminal png' 2>&1)" ] ; then exec ${@%${TEST}} /bin/sh -c "exit 77" fi esac exec ${@%${TEST}} /bin/sh -c "cd \"${srcdir}\" && \"${PWD}/\"${TEST} generate && \"${PWD}/\"${TEST} compare" leptonica-1.86.0/prog/removecmap.c000066400000000000000000000054661506303110300170400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * removecmap.c * * removecmap filein type fileout * * type: 1 for conversion to 8 bpp gray * 2 for conversion to 24 bpp full color * 3 for conversion depending on src * * Removes the colormap and does the conversion * Works on palette images of 2, 4 and 8 bpp */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 type, numcolors; PIX *pixs, *pixd; PIXCMAP *cmap; if (argc != 4) return ERROR_INT("Syntax: removecmap filein type fileout", __func__, 1); filein = argv[1]; type = atoi(argv[2]); fileout = argv[3]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); lept_stderr(" depth = %d\n", pixGetDepth(pixs)); if ((cmap = pixGetColormap(pixs)) != NULL) { numcolors = pixcmapGetCount(cmap); pixcmapWriteStream(stderr, cmap); lept_stderr(" colormap found; num colors = %d\n", numcolors); } else { lept_stderr(" no colormap\n"); } pixd = pixRemoveColormap(pixs, type); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/renderfonts.c000066400000000000000000000071561506303110300172310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * renderfonts.c * * This tests the font rendering functions */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define DIRECTORY "./fonts" int main(int argc, char **argv) { char *textstr; l_int32 width, wtext, overflow; L_BMF *bmf; PIX *pixs, *pix; if (argc != 1) return ERROR_INT("Syntax: renderfonts", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/render"); /* Render a character of text */ bmf = bmfCreate(DIRECTORY, 20); pixs = pixRead("dreyfus8.png"); lept_stderr("n = %d\n", pixaGetCount(bmf->pixa)); pix = pixaGetPix(bmf->pixa, 6, L_CLONE); pixSetMaskedGeneral(pixs, pix, 0x45, 140, 165); pixWrite("/tmp/lept/render/char.png", pixs, IFF_PNG); pixDisplay(pixs, 0, 0); pixDestroy(&pix); pixDestroy(&pixs); bmfDestroy(&bmf); /* Render a line of text */ bmf = bmfCreate(DIRECTORY, 8); pixs = pixRead("marge.jpg"); bmfGetStringWidth(bmf, "This is a funny cat!", &width); lept_stderr("String width: %d pixels\n", width); pixSetTextline(pixs, bmf, "This is a funny cat!", 0x4080ff00, 50, 250, &width, &overflow); pixWrite("/tmp/lept/render/line.png", pixs, IFF_JFIF_JPEG); pixDisplay(pixs, 450, 0); lept_stderr("Text width = %d\n", width); if (overflow) lept_stderr("Text overflow beyond image boundary\n"); pixDestroy(&pixs); bmfDestroy(&bmf); /* Render a block of text */ bmf = bmfCreate(DIRECTORY, 10); pixs = pixRead("marge.jpg"); textstr = stringNew("This is a cat! This is a funny cat! " "This is a funny funny cat! This is a " "funny funny funny cat!"); wtext = pixGetWidth(pixs) - 70; pixSetTextblock(pixs, bmf, textstr, 0x90804000, 50, 50, wtext, 1, &overflow); pixWrite("/tmp/lept/render/block.png", pixs, IFF_JFIF_JPEG); pixDisplay(pixs, 0, 500); if (overflow) lept_stderr("Text overflow beyond image boundary\n"); lept_free(textstr); pixDestroy(&pixs); bmfDestroy(&bmf); return 0; } leptonica-1.86.0/prog/replacebytes.c000066400000000000000000000062031506303110300173520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * replacebytes.c * * Replaces the specified set of bytes in a file by the bytes in * the input string. The general invocation is: * relacebytes * where is the start location in the file to begin replacing, * is the number of bytes to be removed from the input, * beginning at the start location, and * is the replacement string. * * To simply remove without replacing: * relacebytes * * One use of the general case is for replacing the date/time in a * pdf file by a string of 12 '0's. This removes the date without * invalidating the byte counters: * replacebytes 86 12 000000000000 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "string.h" int main(int argc, char **argv) { l_int32 start, nbytes; char *filein, *fileout, *newstr; if (argc != 5 && argc != 6) return ERROR_INT( "syntax: replacebytes filein start nbytes [string] fileout", __func__, 1); filein = argv[1]; start = atof(argv[2]); nbytes = atof(argv[3]); if (argc == 5) { fileout = argv[4]; } else { newstr = argv[4]; fileout = argv[5]; } if (argc == 5) { return fileReplaceBytes(filein, start, nbytes, NULL, 0, fileout); } else { /* argc == 6 */ return fileReplaceBytes(filein, start, nbytes, (l_uint8 *)newstr, strlen(newstr), fileout); } } leptonica-1.86.0/prog/rgb16.tif000066400000000000000000001756141506303110300161660ustar00rootroot00000000000000II*LúxڜyupÛLØįŽĀ2sÚ@ĶĻm*33÷-3333Ã[ÆˇĖː237ĐĻarČ ˛E{joæîŋ›oN"­ž}~d´ėļ„šëA æ3x€v°‹Ĩ§¤{¤˙ĀĄp:ŧƒĩ`'˜ Z‘@ €đ P´įĀnp”Ą÷h 2čĸx~hŒ: îˆw8‚Ļ FGĐMŠĒ"=j āVƒKâ}ÍĄÆBĄ˜_†€ā8灞ĐÔųŖ“ā6HÃÁ ĐD„\č :‹öĸÃā 8PŠFx‰:ĄrTü î ģâũĪŖņ¨@X ļ‚Ë T!ā—øœáH6PK|ēĄ`ēĐ^Čáĩápú‚ņ( j‚Ã谐‹~ĄŅh§t‚ô=%ƒg@„xÍDtŽŸ€2„Pa’PÂGķâ´Ņ)qĨžĄĄâę㙰ģ„ií[ņkŲ¯_‚‰ßÉ7@ĶĐ´ ėĪ{\GÁ"n`8N…Ŗa'ø đE„A0ķ…|3ŽWČŽwáv¸L+$áŌŲ]l{!H˜ÉīFÛÅŊVĢ†ŅˆWušX+9 ŧˆ€gŅ$¤C]øQ|7ž§ˆŖu &Ãē0Tü.<Î R #Å*r0§øą\_á‡LŪ&wK:€6 ôāpŽe [Ä{^oÄYO#΃É+ØN,{*Ö<…?ã `ž1ÕQC´ZÄöWąęaT`^ŪĖŋįĨ°<O@°ƒ–ÂjņΡņ^Ä â§Ā P ˇˆkÅ}æōømđ#ŧ úb/—Ąoč>ŠÃwâf|6ģ‚íāsC9—Íæ°ÅÕí Ā$8WėēĢčØ v •ŠŨbĮ$xŧÖ€fے9#2Ë”†Ū t<W¸-l oÂb˙F$œ'ÃcD!1ŸŸ?ÁŸ"˙Nx*Ŧū›Ā=†é0^Āíø "Eė¤÷yüiŪÉĨr¸zb_UĄø@üޏŗxą„Í9XАĪ˄0ĐZŦqa˜XÅ 4ۀĩÁūTž7ˆđVņZč°´€V°œ_ãņũøsž˜ŋ‘ ä‹ŊîEIbfō50€ša,Ö Æŧā…ˆÅdėæĀžbg°gØ1n7•k…PļđdŠ+ĻÄûâxSî#û…ŠDqÅÂU"ģFĀ đ˃ķ`WX‰8 ,ü6^ĮO&?“-%1Č#<š°šL=ĻL†ũāßFoŨhCėĮ×Õü]{Füŋü9f¯į9h nĄT*|{d˜í‚:‹k˜Œá¸ƒ8gĒm˛íųøßĮģã^ÅĩIčƒm…•ciX6Ök†õÆTč•Xįū␈‹/X*v ķ'iâ%˜ūĖ^Ļ9Ī×áƒ%/ÉÍäBl*fÄxËŧA^(Á\0VԔRđĪ ÂÄ:X;;ÁŅČ1Ōž¤āåG{ɤV˛ŦûÁ',ã°ë°ęąņ0V€mÂa–°^†pœ—ÁN¨Bh-D Đ(Á¯!N‘}a_(‡{ŒŨÁ; í°6Áĸđŧ1šÛyĮŅŲ>œÂÎņIÕ¯4úÔÍž€ã"ZˇÁCpŋˆīVđ!üĘåņ}ÁT‘-S‘ tø?øŋø;ąË¯ĸ1BŦĀķDnŊ€r€ @(ą×ŧ}M€āØÖkŨhyĢäŠĒōŊō;ŠkÂaĄģÄßåKx$^-Ÿ*˛î ”Į÷F Õa ĪĀ\˜€E ū>OĄ4á_aX!ÖãĒØUoEĨ=)jīRa˛0@¨„{ąũøī7zē'Ö÷ƛėĨ™Ŗ]Žīƒ [x  ‚üá{#Ŧ{Á/č Ę×=DÔ#FäĩãÂg…ea7…7#LKDĨž$ōdšđB ŅOdŖA,ÂĒáÔ@_… ‘R9•k˛sĢãŽŧ•ĸޞžŽŋA‡ĐzÔ]dú)ā:.ęÛ`0vuļ1bĶQŦ° C2#ęĶ^4ŲEΓĀÁ;â˙ŽC÷…B7ႨA"ÂbE]™æƒÍāĄČyčĩ•ˇô6SKÕg՝đųdÉ2ŪĖæ˛9bõu萈8õYb܊VŠJęy ZHĀ!(ŨėŲâRÛe(2^Ļf&NŦĢhp‚ŋČTĨsÅNԀĻ(K¸"|Ē_¸¨RŖR¸ķ'Ž”,=UōĻđXᎂŖÉęēõ5%Ō}ŅA2RrY’ âāYXCėV<ĩŧļXÚÂ!ޜëĮãšÃĘëō3ügž˙ĕëŠå/:ĻؘŸü+ÕMÆņųü%ö “oÉūYÃ&ŗØÜc[Mûp{•DĩQõSr[‚$ķØ†Ŧ™ą˛Eė5v Nā<öV¸&ô:ˆņdø jët4%Ŗv<Á×åĨb¯Î…į`ÖVxÎCū>C~$]ÂĄPØ!œR%ļ́ßį{ķ>R¨Ī/eËÁcØŸ,ō˜¤ÃK° tķJA-|đ@ú¸į,Y@Ę$_Åãp&Ö;Žíįķ‘} , Š:U ˛ÅUXŒ6 ?„*ČËĄ žø h$ē€h6ŊŽžãŲlŠæHvĨKˆ/ø¸ "X¨ģ¨ŠZošg_éœFŧÁŋcī”mäį¤ÕųÖ"Ÿ'°ļ?ŗŋ‚ŸÂQÉŌϞŅĪ”-…"O?â^pŋšQ›D)=Îvd‡1׹WØolîšh0}ŸVzĪû>øšøš(ö*\ĘčģČsÁ1Ņ+GIĸSØ&‹}ÖRDc´pÁŊßMēĪ)JŠĘC"ē‹EG¤ģD œõĨøäĢ1𭝕´HˆžÄTb‚j§JĸÎįJšĮ\0ہĪį5\¸Į.į2oÂĢø|_É­rÜEŽĪ°.Ö̧i§n§Ãډ3œ˛A¸5F~¨:/åŸrĮáxÎ!˛ˆ:äl"Ÿ‡må†ōé|ĸ¨Đ—EW&ˆččÆ)X “â{Á]~™æUžĩŦ ;į`ČÄ*ņÄbD‰ūg‹¨tūp‚č˙F‚×ėI6Y0,‘<'Ī“š™÷3_ū¤ģםÛāÎ~ĸ°D‚6"Ÿ÷ˆĢūˆë.vÔ ä°īø S¤Šwą9÷ynpNi]Ļnã՟\{Ážü¸0°zĐg¨KëjĀmįÎpū˛éTWI&˜}Ėâ.?/ã1áĮŅ$Đ7ahœ3>$øÕ:c}ņâ˛Īų›kœ AÄ5ez[•NĒXuû )4î]ČtņŖœáLzÉĪ˙Ōúø÷ō{ŦoĄ¯kZčF¤šI[b}EņČģÜ÷Ņ÷PŨ@=S= ë€7Âc9?öÃB6Ēr$ų ōƒ´kUPĩUkŅŽŌ•c•˜Eˇü'§Üī´FīŖkâ8„` lqÖŪ•ҊØHŧQėTVĶü9ŗųß\ķŒtŽwx­“Ü—Úĩƒa’î¨.]¯ōŽŅ]Ž^ĄsčÔao°ebn\ ‚%%(Ōרģ×SŨģŅĮųNĶ$ŒtĒz•rŒ€ QĪūl‡˙ŽĀ5dōļ+eÛr§ØĖđâ)w-ũTĶdŠ’ŌĩÔ jcņņ˛°ŠŽÂ".žŨéĒd8ĸ˙­î§I‡æ˙šNéßŲŪųûŒķū&ÄtĐF(ãôėBKŦåCÅtI¤ČŦ~ū*JŸš|ĢŪ€FyüDö1­‡[Ā4 9…û"Kfķsš‰h‡č=mpökr—øĖ{W5ˇ’31=šŌÔŧŌb𤠒i,ŠææR/íũĪ;Đ1ß>Ķ:L÷T÷Á/Ō:Đz#Ŗ@ȧß~tįũVō„ā€5÷uŊ wƒ5jį'qM…Ä`ĮĮâiYi1ÜŌ.lV\{ÚęŨMü\t'"FvYĻ”žvswZ8ŅÕxÅÕK;–ī4îö[°]3Xq„úĮ;ÁˇˆéŽ/Āŋâ<›Åîd ŸÁˇ"§ü€;Žw BœIÁĒvžp|ˇgVYą-ēŌLWrå„sĻcą}L•ēUsĢŅZz(e­i!ĖÍD$,Ÿâ’šŪŦVzNēIĻVļUē”j_ĸoŗwjj^†ņ×ŪØĻ1ĮĢ=‡)ĐeØ.ąûx_ĐŅ4æŌšÚ9OKÎJ&RJˇÛæęJíĻ,”Āĩæ¯sEŠrŠ|föÉĸCeũZīƒįû;üŽújøZĐtzĪ|Â4R–‚(ß;ũhŨFŨZąûķN–gg˛[‰;„9PX,$ …ąā=v.āļ˙Ȁ7l ǽ阔ČĖÔfĶYŠøŧ%1ĨJŋ0wč4<ûoÃLx ĶĪč{tž¤\âOõŨÂ=ôčŌZš#ąíøibēËėl⌠‰‘øbí4]ÃS1áä@“3Öyß^æzãZíēE]÷7ž=EîŽę4ĩF[&•ËēÉ겹Ŧƒš&˙ŦXŠ ƒEv¯x‹=vßqÕqXčĻt˜įŊژpQHįīŗ“ÁpÔäŗšĸÕŗ'˜1Ō7˛"Ņ@ô˜Â6ck”õļNs4T–~&īˡËvȎŖdŅg†Ąøâ÷ģáßO§EÄ Áü¯čĻëīø0íéŨĸĮ]eĢĐyĩįõØ›… d1ˇ}īcŋŦ)ÄÄ62?}rú§#ę_hXÖ4ƒßĀ^ á}‘AģĄ ‚T8*Xų\]Ņ[¨QmŅ÷×'š™Ž”¤mÎۑ‡į꒟$ÅÕ]œ×ˇ$ąœÖˇŌ‡č[ Sy+§—ŽĄŦ]Fzē"ĩ¸vũ¸'IĘĸvE]>YĒn7 Ÿ2`b‰IųkéZØØ" ņëôĩÉwpÖŊ€vŠRÛü4äw -WĪ Īã{ņDv)ķ˜ĪKĨ[ˆE}ģqF~§üŒŽžW¨ t†ãąŠ˛qō•rƒô­äƒ,ÂŗÜĩËQMž_ŅQņûĘŋÜ2›ĖMfķ|oų+ü>ƒ˙Æīáy2ÜeŽ|ÖĘÆrĩEĮĒ@ĩÉ夋Ŧ&ī)ŋ/KõōlôôČ[ĻĒĄŽ1Ö΀ƇpĻ–DŲH9ĨEž$Ī4÷TÉaŌDhč6KŨÃŨ_œ=ĐTô=E žæ‹^Flj r˜lžŒ“E ņč ēÍûŽĘOČ3ūe˙Uˇ|ÉŋRę=¨Ņ•iËLôũ“RxI?_ú *ũ—|úZTę7UlMȡÂwᅰ°bUÅĶō˙Ž~{üæ{¯ûš2KOV.ˇÔVÅK’$MŠEŌhéI‚DQž¸ėCéoÕeM¨îĄyĨŊļH›ãŨĀũ+ũ!à Ü$fäÛ;ëbKG1tyÂoa':)™(y!€ŸĀáœw–÷.=Á`oj›2%4$|šŗ–3Ūá’֐”Mw‡š˙síĶkyí(Ž”mÁö ū•6QŦB/„r._ĖD{E/PŌđ|^˙‚ųgũ3 ôĶņëx%Iž"ˇHNsšn0]äéåijĸ"Á&?Џ¤ŦŠíÅÖbÔÅYŨŏAG…_BMž%7íë]ëkÎlΙÛŦ‰Ū2Í•M(ZqÂP‚Ũ–DåäŨÍ}$[ÃF4úâ?)h:,fŖjŠc”íą¨JļÎxœ.MŊZībƒÄĻ.ū;ģ‘‚ëÁ4_t›DīđŽßÂE"=&cÉøM"δŽäZQÃ|ŋ|67;IH ­;.onIĶōUA'ĢB…^ü61kõ:!€—ą6°ÛDu6­)šũų“1P^ícŽá×âMÍī-Ɍ,+žd“ļU-e•¯vÂ:ŌũÅ=ėÉņW™Y­ãËjvŠ–- ‚°}‘kÃŽhûų ’Š+-CËG9ÚZŖŦ 4!ēÂßn›Uô1č§čÖ„}V*S”Oė7ŧgāWŋvAßÙLoæá_V#¯âĢ˙ŠIŠū§†/Eeŧ#@€Îp ļŒĢÉveļ‹JQŗšß¸G¸•„Wˆnát &ąÚÁl #g:qá\*;u@…!–zöfΙ"ƒ†ÅF} öÕAv\ŅÚĩËYh’Ô”$JęHs¤īdėĄöîÖT1ņ& iđŧr#šÜIē¤P2[ŨPķLĮ°÷™ĨŪᝠŌ%ų5Ŗ“Ÿh΍ eɯŠÆÖÍv—ĸ†ŧ‡ė.ŨĘãsҊoJNõ øÄ đEš{ļŅ +ĒŲ,ŽÖD‰˜F{Gŧ ›Ęzũ=qÎ᜞ßĪVĨ('(×`ĄØtl­9Û:Įv¤LåšÄÕōä%Ô]?[Ž8jíi›dËÁ,GyŠ]T°ô’´D&WSļVŸp–:’ėj2(&L´™ŪHK G ķ&į\'p& …ü~Ą|Ļb*ÜúÍ<ĩâ[ÎëŅŠKēC6O6€2JâÅĖ %¨rī)¯N@;/ߟʡîJ@=|ڃāî_֚ *ŧģŊ;Ŋī|=}Ãŧ}1>§7oÁßk;éį˙œs ėöxrœîīŗ3Ãr’•UgU~@žâŊdŽGņeczrP™zēūÛ<R-׃VéžS%jƒÚŠ4*e/['[[‹ scņ?ŨŌ~×ģŌ`@S ˙‰%E-øZ€Ãh¨˜†[yŠëôGĪĐ Ŧ!ūž8cō7Õ)nV˜Qđ(OđO’Ø:¯eÉŖ˛‡!ŨB†ėŦŦ_yŗĸ‹o…8gwāíΟcÚōo°-åõËŽ}j¯§~šũîå—RĶpß;Á%Ī ŸH–úU›ØØšąô´ÅäKĮΐëa™Ŋ‹ģąīU lpmĩ–fA™¨4IĶ‚sÅŕ¯ÄÎy ˇZŊ–ˇŒ>xžëjŨgųļÂOiԃŒËēŠŽ,TsE74`¯ˇ;ŠW¨í‰ŒTrÂP'x_ĩHÅXucâä„ô9ɑ;ÉŽ…K:˜Ú„] ļ†HūÁ¯ÁéX-| @(rpÃEq1°pG¨ā>r‡šGx5b"!!Ž“6 "ĢT2˜ūĖn~ ŋ–—aũąĨØ+ū6Žī…šŖēȊ^ŖČ #ąEØKÅŗŲ3ƒ]ÁŗĀståIÃD­§Ā@ŦfåäĘķ{ąąX3Ė‹1đ$Ŧãšä>čēe˜`æ'c’˜ĻĖ Ņ)a,,,Ø!ē”ãúĐœˇŊŦī(ŗ|ü8JImĸę䕎*JŌŽQëÕ7Ĩ¸$€đ]ŲXę‡{MúĘōkš*KģH~âã1_•ZĄî]…WŠ\…õmū;üĮÉ×Ęˆnd5؄ĩ(Ŧ^<Šč>nguN5U9PŲĘÜŌ<§R^%ük%Ũˆ+Ë)ĩ”ôÔ\ÖÜĐ>ÁۊIößwžmIíî—Ģ‹Ô.čŠOÁŪb*<|§˙ōšú¯c˙ĶķĐRá ߟæ;y~ģy×jÅ7Å>åAņŧÖØ!GDqM1 7jG‘­ĩ> #ā8>‡™Č0 Ė¨“wĨøvˊˆ]aĩąųÕķĸõ3-Õ<“5 Z e/°yļá’$xÉūV“"KĐ.S–ĒŒžZĖī@&‹“ Hk•†ũø¯ŪŠĮšVōīY̧|$`'Ē ¨†0NDÁx4ÍA3°| A”Ž7Í+~T0ŋ`xūŅ„Ĩ ¯/æ4(PV8#ČtßyƁėWŦKm]m7‚ƒžŽáÖ Ÿž?=g×Ķâ°åzuVüUĨČŊĀyĮq…)‘,':ŗ%ˇ‰!Äg Ŋ’Ŗ52íEÛÛtī—ØŅa~MŒûņĘ´’ŲÅiÖŦQØã wš|Žđâ‡yø6ŽFEÍnLo:TM\hn6¨ÕgČÁëbÂ1ČōHHÜs&;}31=ÎĒ&qCČŽę§ÎĄė{2“Œ–vŌæ7Q Ä;OŅŽ0ÖĻ.Čę+—'$Íä$n&ČhÜ˙ôÄ˙kĢÉĪæX_:ļŸGūų,˙{4âīZ/_OŅcūΝhíā{†­›õNereՊ}Ä5Q“?S:érYŦ‡ģäË-T›ËSĘö›†cÜgɟĘ*ЏnÜ6öˆu‡ã†ŗŸWŸũÕŋe{¨$qŖĄ -ĨļKˇČx-:Ž5¨/ڀ–€b°ûáŲãn㜃mÁ.a)’\J'oĮd"ŧ9ÖV֒m¸čW؝=íëGß KJ¨?ŋ8æōA(-C=Ŋ|N°˛EÛNĮj‰N9í#‘ÄCđ„X¨w>=ĐĶØ3Û ]Wu1†mūiŽÚÎ*6“XŨīd[’‘hä›ŧShŠģc`îú a?–˜Ol"îaą¸‚ ëh7˜â…ō„{Ū“ž EņĸÁ`!|€9<”įąkFqi‘˛đ§ĸƒâ†bœc§CâĀTšJ‰zXāĀā[a˙ü´ŊõŧN šĘî‡1ōu5:øX_wÔ\X‡úū’“ŽmpjøÄ°o„ŋ&BŦÍÛå%wŠNæŦ;ĄūŊ&2Ą Aׂį8‹žũõ7ļj‡ĒĄŊØDüP:Ä4ŋ¸ŦākAËü[ Û%Ųōo™fWdŽeū3…S(ʼnĘWæ˛ŲYĖ{f6÷u-ˆūŊũf÷ˆâ UXŌ¯âŸ‡ēķ7ø!žYėC.Ό;{‡ČH×ËŦ= ‰mŠi#Ųãũgålogoŧ7‰ėņ™_Ā=fÆ~ŋy4§‚m&ÃWú›Š™„_dŊ0Gđ ~3'įęĒēhÎé ńÉ3ë]\Û]ŠÖëŽ8WFĀ*c]Ã0aŸđFh)=$m(ëRÁKđΝ‹™O3;ąŲ|tUgÕĖĐáqū ÷ĘPEWĸųĒ-õ“‘Hî oíĪvGŠæš:RũÕĐ Ĩ  ĐN€/™zĖ9ßęŌFe÷KO‡ž 5‡/gŋ2 |žMž4÷%i˛ ÉîŲŽX'Z2äį”1?ÃK¸Û"˛g‘…änI*öKÅ€4ÄÜÎ Ž‰ļ{dII:J4T)n…bAŠfŖgĨņĻgEa–Í–*–&ÆˇÆÚū•ū='Ŗ^hZā*6˜nĐ=3Ãr_KÉåōíė-šŖYE8Ņ–Ēe€-AĨ˛–h‰dĒĸ/ŋûä>Čßa¤$ÛŲĩ§ÅO¨ë/ÔâūõÆĀ€7D÷{OP qüUļ-j€Œč v¯BÖ(ídĒ[Üē¨wŅ…‚Ūņuâƒ÷/._`v(¯Š4ū…Ų~ųmBī‡ū ģ_a~Ä/ˇÛķĐÕĢT_Đ=%LbOī[|Y—B7âŪKGeˋW›Į{kûöąæĐč≯xE ™-?ķ@>š!Ė]uMđb×q›ÁÕ¨"ÚŧŽ2™žHzjߚ7[ɒ6JšôŽŠÉÄģ¯f.ĄV¨ņ ŽÛP"āv™|6ŋd]'õīōë•Í,ļ¸Í1Ģē)îõž4i;*E%—Ŋ *!ĨĀÎķ%p"”ÃMl€{‹3ÆõĘēžâƒŧŒzIČ}mœí<“Ĩ~Ä<°AžV9œâ=/y;ʡâcáMbaäXŖ<2_/~”Πx&?Ą=¨z‹īÁ⤅•æŠÎfÄ1ĸ™ėäšd…tĻÅoá7íCė5\qÚ ÚvęiŌŠGzؖg{íœĪFņĶ|ûŧw}w$‘Ô i ÖÁŽã1EL ϊĶį5āûŲvüU3âXōsĄŽpRˆ4Ÿļ[]Ũ{ųrŠ[ōYKŊĄpz%øC v]}ESŲž&ŠyK)d?rN.IŦÜi™déåŽLŒš…į`—ąôNö˙Ėi2G•Y"CÂ'‡ŠßbˇŊĶ螞ž"WīO%¨ĪŌšbvŊ%čžˆ, ūejz—_{á՟FŅ‘ĩÄ.Ī%Y§[ĒU.gÆ1͘ú;˙%\FLÂ"“°Gh d°ĖGÕ‰ĄÄ ķԃ wm—ŋķ õ‹š+ÂGã‡đ 1łmtšGåéųqëįíŸÎ† ĒÔ âtäö˜‡ˆáįąįŒ-1E}ęøå†æĨ7‹ÛBl—p’W\ļ ģŌ|ÔõĀ‘Äė;fŠ~ŸŽ†îø×ÎJz4 |fŧĢžÆFؒjˇI¸[O)Äscŧ`-8^DZ”ÍûøZüļĩ˜ |ÂK댈‚ŠŌĒĨ‘%UŠÕÅĪ ûÕéRįGüÆbYųūĘįú(C'ŖĖŲÔ1Ëū“˜/9#Ų&í"})˙XŧДû{UŸšp AM>,‹Fäo &CäÁÍí7=˙՜õ=<ŅđɰZŨK5ŗbģ›xS-ëÁāę!KûŠũ9ĶĶöÂáļ @ičëå[1­!^eŅCŋɂ8ƒJŽ–MËÛåŋR9ĶĻuøĄšU˛+˛)Šö ŲßT\’JV˛ÍY'“Xz)öJŸJŸVč+öTĻđø`,†íÉį!ˇ‚aP1˜ĮõZđˇø[œ`igßlŋ ˇƒ›bĸžĮū`Ģ.HrņëĒmĒ]˛wā2AÂL°šģã++gJįgø…ÆÍˆ !ĩG@‰°Ũ@´[ëōs4ļˇÂ†`Ņ"6ŠmĪļ]“Ö“uŊīa‹g/˜AŊ$§QÈ{äSâš+Ī~šôyú›Ÿ L÷ĸČhŋZŧâ„b9 {ŽųŒÜŋláāéŪÚL}ō“×Čâ2đp1ąī!$Ɲ1Ų­øí7õ^ŋW*ēcUœJ4ÃRs=.ėTŅIJ´d_ô•čÎur0FtŨ]…~Ü6“_‹ĻaBgQĪĪY:V|* Ũ°žD[ƒMuAŪ×8Ä/7`*z*ôãˇ€å`ČAéč#š64p\¸-ū5ô†ė†QnķˇãĻ㠃ļ{ü¯ô ę ķāhüīˇvŊbŽp_ô?)Â1´‰z„rƒ†Xvš‡VŌ?1Ôö{!t„f𠀕ŦĪOČuå5*ôhdk°Ŧa<æÂÖâ?Ŋy¯ë†€!ŠË˙0üīę^0ģx4Q&y!˛LŌ@)„}čŊ@øinéz‡Ōŧkv8§īq-čĢķ}ÉáœI žätBkn°ˇ‘˜ŧf€WhŠčĮXž*ž‚†Ąîčļg‰EeĪK—üSX\VČÄŅqCãg›rĘ͕gŒUüßኰS¨ÂŲ4ßvĄ?8JĘÍĨŸŪy­'3Įģąä}^Á.qĖs~uĻēšTø,ŗčbí-õ>Í:Uc™ 2) 2?ęVā—€7~˙Ųˇ:–yöpīų‹Ü#ī=F!HØ,íčîF֏ŽÔČt؁:3sa‰KVÖÃz´â¨<¤åˇˆŠž˜¸Ēâēgߓyæëå*õ2î­Ū‹ŠÍō5ÔrãEí}‡ōŠ•ĮČL|+qBķTÕ'˜ 6‡ÛåûÁ$0/„4v?LYW¤d¤>˛ųré\čRēģ˜Ī•oĒ,Ußאę$&‡;Â/@ŧ˙šÛģw8’ōŗ”Õ#jV;…ī“T ŒũÃa}WĄ`LcS|ÜYĩ%ž" ¯Až†C­\{8~ ŋ­wPÎÎļQîpotG™NfĶ×ôlp|üÚ){HnNwÁ=ëw§r$aÎ/Î ļsŌ[”÷Sî’oCƒ„û|]Ãģ8ā2°fžå‚)Ų4ž¤-ö Ū¤Ŗ)BĻĩJ<ƒkøljšÖî$­S~oPŽÔTÆäãOđIDļ"JyRfæė)fąûˆw…¯š÷˜ī“/K‹ëâuW|cÜQÎÖĄkŪ¯Á"0$‚ D%¨DY艈…ą`˜‰f áč ĪC7‹ąãGō´a>2‘ėHČ&LjˏËį)ž“‘’s’Jč†qØôF5Ŧƒ,ŗV"_,oK-”Ž‘Å1õ|´ˇ^iMĶ„âRûmû۞ĐÚaĪÃ×ĸŨ?…íĀĒHę8NT˙~îڕY’ÃOōŧįõĒé˛$娠 }ąæ3ąī™ÉÎVŪõôŨozšõŨ ¯S{e°%Ę]ÄõôĸŒéŨ’Šz‹ë„Iœ‡N€O!æĢEˆ@J!š?Âv@uQē„ÅcČÃeYĨ]LŪĸÍEɅįãŌã‚ã—Vœ°œąUē[zLî-ÔeęuS_MV7­ŧŠs/Ą“lSy#¤…åí,+čž;´ŪŗØüĖR×<–ībø¸ž¸…ēRÍOyšu5ô]ÖĖU§KWOŅ(l¸ėŊTIaú m€ē ՁøąŲĪŋī˛DUŋ§÷ÆË]™’ųė 'ôõlˇu*ßüķ!ÁL.!3uÕÂ= -lˆ†fĨf](đĶ>QŊ”ĶЊąÎÆ7:íVåŗ2ÁĘRųų7÷W:Ū;2āƒ_ãX gŊfÛqˇT:—L“ŧ`‹¸NœUuB5MŗU>K:‰Z+úb$`|Ą˜xŸyFššī} ø’˙ō}øÜ:ĢâhúМëLMMŗ*ëUíVõqt5ą7 nxöCŒŖēsŸcķŗį°Ŗ1^įI…c‡3Û7&lnāŽāXÕu3ũ"ø=45)~[|;}‰ŠĐ´ëAtĀ)j’Õa“9:×.é[˧ČJ”lvžī!ņš8.ą8ö:4Žžļ ›ÆéŋĶNÎ*QžüZ.í ŠˆXÃuÆî×øĻŖÕī|J—€åü6ĸÂE7rĪ*˛ęâũ°øiĒÁОt$}Á3ą#‚ĨC¤ATĮüÔBuÉJmcy>Ū@įĐ)ũgßy#7LgÅč8*@%č˛#ÂÁTpNĖåŋœŸœ{œ ŦqöFvb­lŖTé[īuĐÍ8íĮŨá—đ'¸•ÄKâ1ĐEĀÛ -ąž”ŦņLqį8ķōčėÚûÚVúÕ‡o!zĨ­üĩüW›`s@O˙\ƒß7ã֏ģęzČnáæor7ÍûöFO;*†­ _rŠÚzĻĩ'Ô[TF˜kfŊëŊņ9ā„I•…áxx:]Âcéøėôoū÷ĢL:ūRĸļA-a;'õւvđ\E(@`øŅqu“˛Cx„=Ā-ė2mŲcĶĸ’TÄ×rÖzYûjYķ|ëųJųVų"î#[ɤŠŽ›V/Í% §e´Đ8ÉĀīíÜkŊk¤Ëâ+|§öú˙ö[ėŦé‰q 3–l/Ũ)iBÆá›Š’In ÚŋšņˇŋŲđ]ķŗ`FŌá:ë)aîØ[97˜/ŗG˜ÁöY–Ã%MĢÆÉJãdJ”­›cŋę39w/÷Xú{¯Ō1ŠŊw™šžu¸Ž¤ĩ؊ņĘxĶ‘âĄgÔyŠīŠ)š‹ęÕĒÚ.%ũÛQĻ,‘—+jz‡ē§ûÂŋ•u*ŋoŽ  ÜUtĸ˜.š29¸ģŋŧŧnEšŌ?ÜĪĪØÜ×ŅG1KđeØ%xģčDÁžÜ1V›yŪ΀—Õ“z)ST(¸ ˇ„Ŋ 5ė<ļĩĐŪņÜÆZd!å!tčĪjĪHO4 ˆ…¨)ז€g5Ŋ5ûĩųGōôyųĘá"Öļû•´T.˜™ÛđųpŨ2ÃɄ…˛A2•~ˇ€NđŒ {jģ“„]Â-ÎĢhŽlŦčSŪĸŧIåHõVõuí)b5ÃÔ…ÛøuYé+Ü#Ē&iËuu“T(š‰s\ mžÉÂĸ7ÖŦøŠë’õŅÛ-B+ōPŖë:Šą<“v’ÜÆO˛sšÍluGSGŌFüPĻQÎ^G÷*ÍhĻļ”VŠQY-;ĸ)ų‰<ũq5Ļŋß|VA˙÷ûĪūX8íGŊ i†NЈ^bXė°čč¨(rųŸ€ķ­‘ UEiį¤woqr^n%ÂŽkʎ%ēŽú†…ŌϞTųĒiĨ3ŠŖ`-Ą&ß ļBA’e—+^žģkØĄžXņԔd]å‡Ö:_YVĮá›b†…W÷Øô;߅ŊîMļp@gOI˛ŦĨ$4* J'Ĩ‘ŽkGĩ‚3ølǝ´!E˙úúĢæĪ+ ķ’d Ŗ„­\Ŧ7 āŽˆ‚ēh‚`ámÜxv<ę(&— Ø+<‘ČŦ0‰õ>^Ų¯ōIEZTiÔĻhoYAåKKŽ˙&˙ˇūW™v#“TyÕņØ;˛äQŪ—ëäída[ī nå“ļ§VĒęš;[ęÛ^Yƒ\뭍ÅžAČÕ ŋĀ=\6=~x1pšĻĻzĩĻžn%úp{ųUĖu&Ãö÷ c(×Ģĸ˛üėôļ2Ūp>čcԖ*—l#Ÿ­¯ē—˛ŽiSÎ۟]/<_Š[ Ũ}ĸ´„bđëUk„x8š[å´×•AËŨŠ\Š&ŋ0 |י°ĒCއZeų˛Ž˛3ļ ĮŋÖ= nÆgʛKŸÉ X*ķxķBķĒ|ÕxEũâļĻ*åĖ´ĩžÍ K¸Ņîęí˛ęîŨZ6|`⠑—kVų Ão1]āēJÕ4īŦl^|<4ĻĘd{„u]åõuõužë˛ë‘3OBRĢŠčŠzå¯KßI{˚Qm=Û\ŠŊôũ^ĮŽ"ũ%Šū &Oɋ‚}vĢ}”Ĩ1Uƒj#ÆË`2dĨëeK•9ŠRų[Ŧ6÷™øëeņ[K¨~­Â„ˆ)eÎō&—Jī7]˙…ßî ɛĸŠQ+7’‘äaŲ ĪšĪzšx=˜?+tös.w†8õĘIMuM'éĪxz,i7=)íT>ˆŠĮÕ jåáŊƒÚŠmJ?ų€ŋŋĖaf˛gØ;ä=ÉuĘÂ,db˜ž1čĢZÅUMÄkČāž¨ņ Šč¨R€ å]EwđܰĮÚgÚĻ‹^| Đ˚Č˞b¸wUî­[7Z´å˸ēž˜öσģĸˇ{',įģr3˜Ãčú 1ŪžXQyŖĸAÅî˛e KˇV˙PũlA…tņ`ĶqOŦ§ÜÕ6ČÚ/ĒoŅ’â]ßåäa֏N–ĒîōĶÜHļ>ŋ'xwđĸĐéÖß6ŗũŧŠ[S2•ZOĨ’× ŧF¤ķ_}mā萃ūî ËšiLÛØŨ“ŽįہŋÆÔÄx÷vē‰÷>?”ĐĪļĨƒˇQKŖ*ŪĄŽJíu]„ІÂ;7JOææîhÉqmJ躘ˇÎ›n‰c†r°”•­×|¤dÚ%ŽõŪ§öKŌQ˛×ä`cR°Ķ\ޘ{Ëč…㌆LÄŋ  ‚ë˜qî ä8ōą—ß-,įT\?î8ûˆËfƒų)ä3IéĮ‰öžį:j/ĪOč_ę>ĢĖŦĪ,ŅÖEŠ›Z[ü,rŋĨ~ŖVfūøĩ-ũhL|õܘąeÍËē—Ggˇ .4…›ū+‰ōÛīˇ= šĸŧ‡éD%čNđ÷˛ą&כī°ņNŪ[ˊ¯ëØŅ#4Yô¨w„ ļח‹ %Q%OJĻÉ"d)ŠöžšėČŌŽže~Îq~ƒņzĩÔr7wÁāėĮĪŠúÁw¸ Ę&[râ{ˆâÆÃrÅy'á˜QŅ?˙vΉŦ)Ņũc&KĀ&!_čOn‘L‘¯sˇt÷ōeà ¸—ŲĪK…cŪ;eĪĘ?“šžWČZŨXˆI@]áŗPɤs¨2j5Į¤°•éƒƒ”l‚7Ōsąx[ĶŊüë‰ĪgŅX-< ­ü`ąįׂˇė\ŅąoÛÁpĪÃĩÄt }ØģŌüŌŦĸÚž“y7Šáēea­Í÷=UíÕ˙Ō›Đˇ_fODvfĨüIŲ/:Ø>ÎLŠ)?JÎOZ˛aĒG Y\ ĖEųĒÎ) ‡å„ü¸ØŌtå~OŽ/×҆>ãtØkûõwÍ÷¯ˆWĩVŨlšĖø PŽtõÁLÁ3Kęō͸{˛ާw6‹ļČkCā™īhâháĩŌëÜōš\ˆŽÅÄrÃõ‡}“}Ģ<}ŲvîiŸVĘ •#C’ƒ%×CŒ:¯‹ĪåVyŅGŊ{|K™ÜΉUÂfp¯ž›î‚nUųŨĘ[•ãđ9HÎO×jct]đyøXŧ'ŠGŋ…q`58ƒØū¯ŋē ēÛTÎlûš G^Ģü„*ĸ†wp!ėBā¤ß˛ŧU™ ė ĨÔ5M-(höîč˜æ^Ī߲oĩį:ߛ{Ķ$ųŌ[ŠcaōU˛%ôTŽmč7âTÕ'ņíU'ŠųX™2I}V3€Âŋāw3fú˛û*Ž#öāc˛_fÍÉė[§gÂázAÂ4Žš7~s˙ŋčƒ0•_Ā÷á†1cĐBt EáqÄVD–7*“—?/+(m\=ŧ礯3ķBë5ë*ŋau@Ę÷ÂÔ O6„4h+2í˙25 …h2áÔzU˜ÖžÛ˛čZa‹Ŧ’ŧȜ[’&Ô\ĐÔVĐ}ᓨwā°f†ō‡˛ž´•Eã×ŖB$ŠÁĸ°ž „¸TޝčRØEw‹N ģRTYi‹ÆâŊ§ŲųÁDâû!NŒÄžÃt¤šßšn9ū)Ŋ[Nnƒ÷헴iĄ/cęęžĒ¯ŠOæoΛģJZFv†š4åwĩģMŧ F+>É)†“™ŌŖ`9:(ŒEĪā)|.ķܡĘG}”;ČÚŦ–ņ÷ÉĄ#÷3†sŅéŪ ßU–`ūųjÆįķŋŊö„MŅ| 'ųėl™[ŅTÎĘ-â:zĪúĒxĻ3—ČŽ–>‘.“ŊV´“_Á3ŠÜ`¸Í×Ëהi+ûF]$ŽōŊĀ@ĸĪ9Ŗ% ä~ũWŋOIm]ąî•Ü1ÎÍ<ķ~đv ķˆ0˛UB=%céjü%Á[ąô,LlėÄmĒHõ> čŦos’kÎ÷}ä֕+ x6ÛÕįĖÍxŗá]ĄVĀ_{5I1uŲĩÍÛ*á#ží@× ¨XŋJ#ûŗũe}ŋēÛö~ä~j€ūŖ+ĪŪ%{få|[ķ ‰ą™˙Ų&„7ŲķÄڍ|(5+R*ëT8K§‰Î&J1$á,qŧōY™ÔtW2QÂJŦ!k‚z^Ŗ&Hķe:_öēôŽhgVåYë[sûGĮ=Į āúŽ+^>.čaĀËnļį m‰#ŅŌÂoš>É?*slęŽ/(Rļ÷ŪđŨååÄĮIhÉPy;Ļ‘uLÎrßeb|đxEˆĻ=ˇ;Đf6“b˙°YL{ÆĄh({N5&/­ČŸY3˛öfÂø´„ļõ ÂDîƒJti‘LĘWįü˜Šh#úŠęᭈiēōÔ˛feļŠ‡5*FWß_}CÔ_/Ã,ŽŠ"D0_?HĐÔTö¯š‡KÃõXjHׄ(Ģ+^Š6˙Ū‘_#Gî{Ė“Ž}8‡ī%“‚Άŧĸ8lü>טû‡Sûvp×éÕĖɖˇ…D+Ũ,PÛI‡į€y—I2…ŧÕÃÎa›Á.VĪ'yßI#‰ęŠĄ/^“÷Øs=Ģm¯eĶeÅnYŦ¤“ô_svvⷅŌĩæ6KéĨTÂ8ĪŨĘzEMķö›žëΊWi(Ō…u"ÕĪ›ÍuÚFēž¨0č­ŲVäŖļhŽ+§YæzĢē×Ë8y‚f—úją~^ÉÉ2dvh_éŪč’—KŨßĻ™•_×&Ô:Z'Še>މđŽ&X,V˛ž=âŗąŠČÁŨæXZĘ4öąēĩm3õuš$‰ŦKžįĮķcøiŽõŽöŽCŌŌ”žÚANĨʋLĖNԆFœvVķûØ))ÁzŌŌÆƒjĸ“ü.ŸŨÆũDĐCė•ÎŖīÁvvÎ-Yb{¤ėâ=R56cõk~pČ6˙Aw4ßĩ„n#| A=ܗH/Ĩ.€æÄ"4÷Bl+ü€§Ō÷ ōŗ6g ÜDˇ4čV°­úŲSõuEī‚ŽOR;ņœˇķ÷5ÂjõOž,dqËüûĀhŧgá˛Âąų7LfĪjļImLē„l#4åįĄop<7˜wņ˛ D?ĩq,ŊÜ÷Ķ •`ĸ;‚õŽõĮjÃuašž;ëģjē.9Īš{ė6‰cƒ×ŋ‘~ƒ ĻuBZ9*72ۜxšÁ˜=ē×ēCíœYši$xí9æ ļĖ"éq;ĶOhãVč“둝V§BŊō 2Ĩō+ĐD)?)š„ÖcĖĀB¤?ˆįØGi2{K ‘>”&ædeuĒY\+->JÎÅx1øœPŠ0ūûÃ7 ĶÄ!ü‘K4/Pö¤ÔSl+Î.úZkF­IĩŸ—ˇ1-ƒ,×Ü÷ŲķT,ž.ûIZŪŽô†Qëg kŌ¸ \2ū’`ĄôĮ‰ŸYŠ#ˆsT8Ēj0jmëÂ˙ hŽc§ųä+˛eÁël-éZØZvAÚ@6^Ė ņ^"ŋgņí*Ææ¯Īi­/ĮG‡ŨáÔTų]H}#ĶĘâĖlEĒf­æŽęU‰P6Ēė’Ō ģCåXgŲž8ԁFÍoã-zŗ]S:ˆ;ËÖuÔ°M´^ļc~ëC^jF“ ĩ¯ éĨ?ʋK/7āpÅ8WY"sTĖ+°Ü• Á/ĸD*“H@č/äŖp-”× ÖÚVŲgĐ/ÔûÔũz,„į—)Í3īW4;´‰č/I8‚ĻáÕÉ2_ĸ÷ƒo*6 ŋ™Ā.đLÃ?bíqkŅúÂø‚]~ãü_ú&+Š`Y+l1ļĶ8‹ėEv5RvPvPōĪÅߖōi)éˇŲŅĒ…d`NØđ:oÍkĖ—œR˙ŲūGŒũ¸l{îTI§’ÆĻAäKI‘G'+c—;÷’ģ<ˇŖR$§BĘũīVfš”jØ­œĀöÔ÷Öˇ3`X{Ôåŗ¤_¨í‚mC=ā6ÛCGYšÜ4 ĸÜqŪ3Ķã0\‹, [ hĻ*Ö:Ž”õŋ~ßZÍn+k†Å­o å¸™X!>üéą[0ŗĒpã3Ŋ1Ic(Ō>•Įâûņí°ĄŊĒã–Ŗņž–V§Đīé=ôjž3’+Ā~  c}“˜ô.5Ä äYb™3ÉŲÜš•˜BÖ!Ũųw­Ŋ_æą,įFž*†•ޞÔ+kgœŖcHÖķÕ„Ų…–ō’‚įŌDæķŊ"@HO…~!“<6øW•X˙ūo2yeG;˛I3éĄt*å›Ë^'ēų$D]“Æjō=áaX å4Íéš5ĨΈ„Ŗõxž7Ёׇ6 %,¤sˇŲ“žŽ¨.‚(CČČ~åŲeĢĘ> /(Č[‡jsq[Ŧ7œÜéŽũž˙øîåĢĶVŊ˙†_—ž¨|*Ÿ¤ŽļuĨˆŖŋ˛ķZ–äx Å~T6ŌË\ҚđčšaČJsøJÕfÅYŲ^ö‹ Ī‹*\]˜ĸ¸Ļ<'ë(;%ũ){ęëÂ|÷|Č N_’ū9ôˆúMtzb@?C÷ ĢeVÅ]Ą=č(ĐÆ‘F“ŅāæģáZāũ—SĐĩ­ã-ˇí#Czfŋ´„["ė]1-ļ@ß´,ˇ$’ågØ8Y'íä°ĶÎô9[Šnšv†ļą×âķ÷&ã˙ĄOpŗäŪ˙āTyōlŒ}ŒFMãķ^÷ĻČ&¯%sŌeĒSvĢ4Ô}ÉöÅ&!-üֈĨÕSâî7\$I—™ä“ŗ*˛ęfū/ŠÎ*:Št ŖåÕîŨņ„$DHBā:8ƒģëā î:¸kpÜ]îNâÖIÚŊËåæŽzë‡z¨ķŸīÛ{ÕęU˜vŸĻŠf€o“ī™ŸG[ĸąfžæž‹Ū°đĩá!m!ö;ū(Lō{ÕīÁŋBęY’;ĻpĐ$ žÎ†Xîxū1¯ąˆo'ƒW ­4“j~ԜÔüR^įÎp—x î_‚í•-͓ŠtÂj•+*JˇNÍ@ƇÕ3ƒ(ŋAŸ"ÕhOĸKá!ë'Ŋ-Ŋ#R.QæûRü9Ūfq5”îĘ/X]r\„íD§š;ëéJ§HÚPKŒĩģíå+ÉH6˜?” ĘīŦŽTĮ.* jĩŪvĘÆÖ ŗ$ép?Xƒ –ŅŠ¨¸<߯ۑlZo˜ičPëB‰äGŪÁaÄIōÕŲ3:øšGĪlcb GF8‡ û‰ģeãˆĄæ^H°v "üą^đŋ4đ‡"iPÄ%ĖDļ}UĨcMÍ5ékf-ģ9/˙¯¨œ­ 5„Ķc9Ķ|Š@éÉŊ2=š•^"ũŋ‚Ö†‹?ఈ­~–[”:!ÆaKāyÍøŪBMá_đķ’V%Ŗ‹iÁôw!!–KĨäā% øWė*– p1íÄä˙ŋ/€ģ K‘ËļĩLôÅēÕ:Ú›|+IWīúī†%‘ejr9ņŽ–„ƐŨ|zŸUØIûš>Á§”3°š­īi_Ž8Ē˃ŨËX›+3´"ĸ‡Mģ‘čKûōQn˙ĩĨĐYžk: ‡˛ô’Đ!Ņ-ę€hKĄ ÍWž–š˜bNĮŦWųc\1͟ i¤×„E)Ėĸų”ūā=lÉĨ/[ū gCÔi™p›o+~˚IËĘØsė ~ëg׹ûÜGÜë\‰Økôļ o%)”´¯ }„rbąâ,1†hOüĨ†ÔũÔ­āh3DljKķķ§y:žĘ_RåĘÖžĀ-ĤšĸųĻÔĒCÕųšOžĄ>›oˇ¨×sRÉ1É|ϟûn)cŪc"KJ™$ûŗ& ^ŗ…úÂ8î_ūŸ’.Eõ G„Í Mp9\b!q-pQŊ–ŋ îķå6GyĪköĢWHļ gBŪ~}ü[ņ`ô˛ĘԊ‡%a+Âû…Ģk{ZU]ZU)\ wK< „ž ë \BŅG„ė›`š1K¯\¯ĀÅ=‚‹S™n.Š"Ė‚&BÃų䲐ĘūĘËl‰đ˜9€Ŋ¯É'hgi*Ę˙ĢąWm—Ä(lōēņSĶ2ëmvMŽ>\56؟¸â[F^Ą6uĒĘĢ{TÎâ7“éß@žâŋr‹îŠ´FŊZWÛĄeĘŞē7_*ŗMËÅ+ōíüŨ’Č%‘ƒđHč€ö¤ę•ļ×Á:1 ˜|Ļ•†•Î(>67Ŋuc™Đ“ģ^ģG pTŒģ įšŪŦĸ–ˆö‹ŋDž‚tCžXNYô– U5UßÍûdÖ÷Ĩ7ũå)˙Qģ™ʇ•0v.QFxū‰ēĩ´LÚ_ōĖ…™€jŧŸ3§tNî ãéPåL¨Kņ‹d'Veø3œĄ1?ęt1,†~Ąsåą,ŧ\ÕVŌ /Rõv]so°^Ą‹"0*~Iô)Ũ… øöÎTÛLod0Ū= ļ} SÃĩûŊ8>oúrÉ{>c9_š˛rŊžL×CĢרkŠū@ÁŖŧŦ1ōÍ۔÷dķdĮMķų›üGÆĪHĸ0SÍ%ĐĪ\ˆE3ÔõCU>1 ę*\å^sGšÁá_A´Xß(´ôĀĄŽØ l>?ÛužĘRđ ķ3Ōä[:g\§ø˙˙Ū @ŒĖDĢĢĶ4ƒj <  A Įw.)ôŦĩÂe!2ôKČ͐đ.ä'ō“úFõĨí@ ˆ§‘ø}TMp%úšŪŊßúéJâG܀ö7LkÉŨä<ŋ‘ÚEŪ#ę áÂPņt’ÆBsĄæ`ۏw9:VūMū|ĢîÁΊŠ]Wž0Nü‚˜Ąõž ŗĢĐ?Đß×÷>äg˜•īÉהt(™\TS?¤áĶ&~ž!QáāAā†xHl'>¯ÍĢĨgŠsĉbãÚ&€ °Ėˇô´d•}(K,õ4ƒ›kąûkŸÜūRSCĸAp–÷<Ķ!@ ģ¤,téˆZĄ7ėPîĶÄ2Đ÷­Ļ™‚.ĮžšdĒ„°híIΰ쿊‚nßīō/“õ°FÁģÎ9ūîĩ=õí÷2|4ô7s|ņ^Ϛæ lDr”":1zė=••ČĪË~Ē[ũŽqļ!YøÄ…:ĸŊ Ŋ0~Û‹ˆņÁFĖgv7ķ2ü¯Đʈ´€ŨWé>Ÿˇ 7ėÍ<™=&AĪ—poĐ'Ō(‹ˇä…)‚ u…æžNšDϐûŠœ3x‹žJũßÚ Ė7bĩáēĢiē9„ēÉlŧëCų¤ÂŖyUĻ'˛ĨWÔķ"žGląąÚíeQW#öFŊc8f{õ ŖŅRâ-ņ•(W劎¨ŖjŸüÉâßā\pø †ĀV!ã‘VˆGl)vëīĄÎāy˙<Į0ßvôиŒ'šHŠÄjCœavÜÃũ íKjÔ˙Û <^7ÃOáãX&ˇˆë"ĖZFh pnį’š§åDü4†‚’&ÍVJŠĸĨa›ƒKŧ‹Ŋ'˜FY{j˙"Z× œážˇ…e_ÎË5!ŠF“0CUŽĖ†Ž ĮŨ”d_jt¤ŸŖû-OUtũ‚žAz Ū†4€ā–PČnĄĘH’>´Ē¸æšm–˛kHHčôÆ-ŲvĖĄ€Å÷$°”ØĀļf‡ązūtXŌ›)æˆ]ÕS­cp`€``īĸņ¸ •įiRõķɒ@ŌiķŽŦ,‡—ËfRsÅĨøđ5ņ=pÜäén¤`8)ô´7t˜ą{T!F˛ÛĖg˜ÕxŦD|ŽtЃxĻįŗ‹Œ§bÂ"mú“ęŽĘ– ˆ${ƒËį"(ĨĨCYĀ aņ_šÆ5ÃjšUŋĢ÷1UÕdÜ} /kŊë ĄÜϊ:#W‰­‘ČQ$ÅZßēËfÎŦ<_!&ÜM>T/˛tëü܆ąMu7ÕOŖ "ēMÎ ,€˛ā&đ+û ī#ĮHhXŽÔÃ7ĸSņ^3ô§"īk‡iū6Rųמ?ģPΊĻYDŋKƒü1眸ŧ<ãYėä4\>?•éÅ´âŗŠVėXFû$ŧŽü‚Ž›šsš”Ļ˙ĸ"jOÁ]d˜ČÁāŪįä;O|5ÁkôˇtˌļsŽ5ƒŨ)öŋ-ÉĀ#ļąõ*qZŪM2ˇ˜/žY]P§Yėų0ē/6Dũâ1K°(˙“&Ë_+säĶeOÜYū†žŸ„‹ŊXBUÕā=uķųJ~’€X"]ŋĘ.ŲÆUŒ7§¤/Š īz‘HCŦāFđ" \2Ëä5ņ•sžcĢŌŠĘWUW?ĢūQ52ōldATnm›ĖØ$î7‹iĒU~ukUŽĒ…J[yļbGyŖÄæÉ“7ĒežÁ՗Šž>×ÁÕjŸrŗô*Ū›ØEĖb:K:ᛰ œA@‚â/îü'´4ˆáÂ,:’Āîvķũ9ŅÂK’¨ÅĩN\HdPJĢjĢ´>÷!gšs)ŗƒ=Ā G[úfŀˇG–‘Õø#¤Ÿ!VWj´¸oëËTišô˜î9˛}¤›R UET‚ÚūÚ7* T‹/ÁUāũ` ąšœ\.FÁ}R6éôÚ{ēÁū|b Õ*MŲõüÔÚl=ŒĖoHēĢžW,€ļ.ĮTJŨ(åŗQģ_–Ŧ› “yx3<ƒiČ˙ ō–öf~([ĀĻ•ŋl9ųQĸčŋĩ^ĮÎĶm–×EWK4@É:t6ÖF…ëß1#Čë5ãá‚ČŪņ}bgËZËrdežŧ–ÆļVœ D*Ėāē0ī ŅE—㕝NY\ŸiTÛY;™ æŨ€M"&ž¨õ„ŊĖPjxT|,ŽEūŠŊ–XÖVĘŧŅ|¸ŌŅ/Ē*ęNMVņŲ˛$U7ņ>Ŗ L—8ø¤œôü*ĸ€;ã6ëAëzûƒØŠŅî˜č=ŧ˛B)H"|Đ×ĐVæbŋRõųŖEų;æ|ô[F+ū@oĀM‹äVMå[$ ?žw17h#ĩ4ؘīÂ.¤Î2ß) PâÛíŽđR2 |PŪxËŲĄšĘų˛ēšĨ*ęŦž'ßA ÕČbëģ<w3é}ņäOú ü°ō\¨wE„˜_›ķjhE¤Š“¸¸É|˜ˆË; íenåN™GjúŅ*÷jŽ7tk„¸úŧŒí/„6”öUŌņJ´ >ŠœæšYžGŽwĨiË1=ŗ%dš’Ô$é_¨t NcúŨ`N2MrIr•#lO ]ņĮxgjĮs#a4^Â,Ŗ×Ņ\›<Ŋ<CĄ/ÍT9”ē&D@qĒž,­>âxœŨ?nøŠú @7”įũ‹ũķŊm‘fčOė$ū\6[žš_&ôC€u@ É˙¤’ņ‡ŌuĒ˙„ÜÎ_ž”ˇČ2GŸãnn€ uŧä(ŋŸųĀæmL,7ŒˇRƒAŒėŽTn)9¯Œļ¸ÍŋA°—čOŋvčrÔ÷„m@=XÅ;ĻØ˛*?ĀyĩV~ é…ÆÁQ"îp*lmŗ€×HÉŧ„¯âßP˜0CĸÃĪáũE?˜m Ī9Ë i1väŊJŋ<䝱ymåh‰tĒļ…āRÁ! ˙zNđĻī”7Fŧ$>7Wˆlâą° ”Šu…hŠ/õüŦĶØ؄5æB ÍđTõ“Ú؟ÃēaįÄ,E]9kXļ:Ä ” ׅ+b‘H‰ûÉ@O ę†.ą]¸Ž\/`šĐ”Ë‚˛ |hLŲ‹ŌÃÅĮ’ŗRÖ¤Ģ=7‰R‚…Ā! S4ˆ‹ۅ!Čâjqģx‘ĄÍĐ-5ų5õjĻ”g–ûĘôÍß6o×2ų{å—Ē ņˇklĨš&1Ā˙„Ų ūđz(÷–d Åíp‘įũĐņļú ;ŗĸ‰Ė"ÉP(žā[pp(1wV,‹Ø0Ų F#•ŪqÁgžÎbgž'4Cļ[zJd— /¸J´=,Ã6sû„Ą‚Nėüā˙VČÆ*Û{îxk:Ö,/›”ãŽYŸô2qVíĨb]-7j4֭Ήî5ž“ÚÕø-Í×=ÛōHį)åōuÁΰF=ÅéÛî3*ļ*ļƝ‰ĄĀwąžŗP 8M ƒvs~v37DĀ`.å$–3+uÕKm˜–ۄũĖĄ $Đ(ø^N*w¨‹ĐvØ2´KmZ SŖ‚}|ëû(‡ũ ‡!]ŲMŽ3šOžņĻ:rT]Ą6Ŋ äŗ CĀ‘ Ū/6bĮBŽ&R¨/D/piuŅjC¨V"JĄŅčŊ­f¸ųWA”¤$JÂbmĨĶđ|ū"´2wL‰ē$"W‡Î’5ĸ’VÂŋ ü*´°w”W8'øvąuL™eŊ™˙dIĒdĄų>ËõÎp‘ ĘŦ "ü*>™3ĘæKĨ(ĀGpfîēˇ^l‡vÄsāĶWí¨Ÿcpõ˙+ÖRv6ü}hÃˇsŪ@æ‚uL§ët”*ĸ$ëņĮ˛Ōc˛wÂņ´øʃô°ü ūQčm-žcüLsf2—ÄūI—ōøMüŨŠ%uĘĨTĨŊl$ō:ÎJ¤€ °9xNl-ž~˛žüG\_ËD§„@žÔô°<ĢųV˛ļämQZ“fOšgæœy˙åķu6Ķ×t °2üģaMč3Ą÷ úC2P2 ŸX=Ā™TŲēώģÔ=ņÛˇ†ĮĀ$ŸÆŸá•hCLE×§6ŗgÃļքEJJ1ûO@JTūŗ>39™ë'ܰá˛­Ųåw´­åcR.qų#Egä°…˙Y{ˇ,„Æž#ÛĐgâ8!]¸:ÁļāL:ŨÂļ厰rđĸ hĻÄáb ņ2 2ĶÉÁâtqĻhGXd0ęŠŲo‘X^”î*=SÜ I×fÁæCsÉ÷žĘ6ĀOâ ŋRŋDŅC1UÉׂ&q&úĖEyOšĮá˜Ô‡Œķ§ą'ŧs}‹\ųŽRokk#|@O ­ŌWĻ­¯Ÿ-ö„ ,^žAvBļGÚ\ÚW>üH?ĸÂŦķÁš{škĮ°3č ėũ{žc™ F×Á5$æqiLJoC˜-öTÚ!qšpXŨÕ‘įĄ­žj#€đšÚY•;ĘŪēN‘Ã-’œˆž_ž‘žíüĻ [ŠßΟ×ķ¤{ĻkAđķΘo7ō›7›uL}%ģŠč uļĒÔĻę˛ŨĒ øxėĨęŗ}ŋ#õWKĮõĸÍųfŲé혊˛iĮĸŦâސũ­x$;ŽžÉūf3ëĐ)Ø^Ü%¤āZmÂl~Š•bŽđ3âxož ¯n}Á{ģÖl›€,N8+#_éTęwöĮ1ŧĄfičɘ§é-ZūM ^ ôĀæcŗĐķNĀ~ÁŽ•WĘüō“ŽOWY{V­ĘgPöK’7]üE&YdįP3×Ë2ę÷‡šžI5 $ThĮ&S$—ˇōķ8#Ûš ŲĀYåŅå‡KĢ“g§ĖMWáĩL ZõĀq‰ØY\Æę™jĩ¸UÜ&:ŸˆšS3ĪBÖÜ+÷”_.{’Q”ņ¤ÉĄœõ?åA{øÕļ}Čũ5%Õ ļ}Œdm eģ=žā÷9ĮËĀ&ûd÷‹ĨĢi:Ķž#öPŌfą˜.=č˙ā%}2ĶĶHclīĀŽ“į3˜ÕÜ!Æ ,ށV˙’ö5@0RÃ*Ē-CËB˛ƒ¸OÉI—EœŽī~0wYųĻę…’Ę4tŒ1>ĶoūãâŪ_ܕÂĩ$ŋ#ŅXiKÉaD& ᧃŖ ô/6šâ˙DM'†Qj2ę{Wrs°VXoŦwK\ĐŖđJCnĖ USY¤ZŖōËĸ ģ„^|?ķ ×āĸØĸ›ÁģTŽnęxĜ˜ąÎMöL[Ač‡Po¨ĖŌ͞Ær7äšé—ĄYuīš}MlB k7č¨s‰ņ›!ÜXčīīŸë§åäåōĘlķŊĒyI/—Å‡Û lMlSÁžœō>e…Ũķ—4;•õKĸ°y\‘ÁĮÁŊĖYļ”˙ųĀNi˜j§ęŦĒ™j[mĘY†^HfæŗË+˜]ūyöEDWá2pR$ßkK"Š„™húxĪæ2í9XõTûƒ?V-ü¤ \xow÷˜–ęzĄĮõĄ™Mēy-ĖbÛŅ#‰AؙëÜVŲH^ĸ‘æ0ËøY‚N(d¯˛.°-6ü30ŪOæ.儤<æŪYäJL[åā@ }IŗŽoã*ĒzØTfđyÂ}Â7[ΉDfÛČTŠlĻ÷S6Åt:kŖÃĢۋmÅUzgĖkY*z†ī -‰đ‡ž2:M †'Ŧ›Ëž_ƒw†` ôr‹OÄIâcđ/p¸ΆÍČ"â)q8¨ä§ąĢé2~•[]ŅŊ"¯,*-2ũbQKD'‰ č<—‰cÄŋY+]F_‰¤H#4‚&Õ×´¯),Ž,9]ˇîŌj]ëŖšņ…ãJ(æŖųQ) ęnxĒŦŖČŌ-6ÎĻŅDÖË%ŗ'ũˇ‰ûŪéĩ÷(`ˇ˙üõyĶiŧ?ü b0ŧ“ƈ/0œžĮNfĩĻeÆ>ĄīũK‰KÔÚĖöâ2ųmĀt`Ŧ0ôˆŊĄLŦzBō‹gpBM슜Ÿ]ĸvĮ•ÄŽų7LͰŽGMw°yë*§§R]kiY-̘ūđ0Dx)Ö°ģØĩĻúŲō]ĨßĖÍ*×ÃņĀO#<ß AņÔDė>9nĄŋO *¸ŒY&a%ōI2¯LĢž)˙Gy:jg¸$ö<îÂT”„É6wt_ ũr%ņ~ žX!~4üLq<{‘ ugšķËņˇøŋølE‘T#‡‘M¨ŲœžoÂ=’ܐ\‘n"ˆ[Dø Ŋ´ÔąÎˇ.íÍÆ2s¸:\žjd&ũŦŦסĘwubâŌ¸ÖcÔËŖbc`+3€ā4°WÂä:e^‹Ģ=ō n€ Ō1Ęķęö@´ØƒØUæ˙ô Ģž;üĸ!ßp"bY*,D ͤkø•B4ŸæyįÚ똎ßgøÚM˜"^ą;×ęKUÄ6ƒŌŦøËĄ8ÉŽĢģšW™įš0ũ]ēoå¨ęę˙ęĻÖ c PÁč†A1ÎÖÅįĶ^ŅîÔ}­]GöûŸ°Œ?Mpx‡O(2><ŨhˇĀYŠîęL"s†yS4˛rŸ”øĄcŠd˛Ü-üĄ‰ō­‘…aąú‘§é]Ĩ´ĖzŨķ§ĶÉÄÉäü Å(æ5­ŠŊõĀžxl4llœÆ.ũ$Ãkc )-QKĶØíėXļ!’Šė@æûūō=õ6wëŨ&×ĐЃĄhø4.—ŅŅÕŧƒOáÛWä”kĘRͤéũ3ØÚŠ´$;€" ŧĒõáŋÅ?ØŊt'2K,ũâd˛m¨ũ… -˜Xđíwlũ~Š›ŌNÖôuezžšâĘÃJRLNl(ÔÄ8#d{ÔÜ ‚ī(&úĶgˆ-ŅėpÚÉ.%•ŋžgk?aēŊA¤$V÷1}ŧä(ŪK2 MÅŪ ßĀĨĐKœ#>2ßŲąVĩëœÂ!Zl…û‚w¸wjâëččøŖâ`8TāķNØnT]+õŗA¤2ŠeĘ)l%šžČJ¯JwÉ`ūSIqŝdĨŧœëæmė9í-ן͏ĩį ĐpđŠôV*ļ­üˇäyîą ‡Äl… Ų6ĖœbHáą˙J`Ģį“\‘$’Ų1ūyŒFÄŌlÁūÞf'úŪ{˙´!ũæ>ųįãâ’.4 •”™&F)ų3äRÃ÷&×:ā0DŠĸGP&ō§‘‘î–€… B•)ŀž6iÎķˇo%̤ēIú6i¯ŧyÎĻ•Ûš÷Íj‚û4ōŲō2垯8ÁĪƒ|m ´ŌëJ~šbŽēļßö̚0ųLyž/ë+/ąrjōJTŅĄƒĶ'ĸ Pœ&OŲYM;/XZ[PCqHF¨žy@< BđXÉ9)mķŸ#ŌĒŨ˙=AFkcĢūv8 Õ[6"ķjGƒFŽ=ãĨčT3ų×6ÛRÔíY5Ĩ˜ãĘgŦB €ã­$Ø6ŸÖTú[žöĒ8Ųũd´6ĒAÄR^Īf :‚ũÄ*™}tcēüĩėŦ@ŽP\U§wŌSč{^¯wēץŧ¤ŦVîĒuĄ4ކČZū ŧmYirJĘÂtĨІģE֍`(/ˆcÅÎė7úųA,ŋŠYČ<¤>ōÂ2×zÜōŽâFeÛĘ­ąęÄÄfVgZĶíȉB8܉ææÁ‘Û°aŠyԃaË Â>Õéį-"JJķķƒ1tG˙욝ÖUu *đOeFJY‚)* y*‡CGHwJáCČFôRūXāidiŲu9 yiĄ8ôģû’īš˙Oc M=dma sŧÂęŖ "EÜHZ‡Åoh0¯ķÍBY‘Ŧō_Y#ÅpŋåŦĩ§3í‹/‡uŧ[¸Į¤—A#;TĖwųDn0ĀrŠŨø2ĄFŗ-D‚­™âēŗy§j^Tŗ‘›øî)[ážę\é;yXß/$LæQÅĢöÖļÃīO4xFÕîĻ›,ˇHG Ņü,l%Ŋ$’}؍Â_|4ķ3đĒ`FØ×øØ$Ÿ°]R-[ízbŸk‡Öđ ë…?Åz›Ä*āk°~đ`°žŅ4ŌhĨ}dĨ3ųŽüBŽ.ņą— 6gŽæ?r§}dq’ʘ0"ąiT] ‘xEH€]Ļĸ*F)tK“ĸņŽËöOŽ-!ŒíL;E `/9ƒŋ7ÔFuĒō*2:*2l9 Đ>Âŧ ķÉ8ā(¨‡ë!\ƒ´b×ųÛԏ‹%#”šhę5qZzÚüÆũĀ&)ēY=ÄŦU.WŖģ¸įĀŲž[°ĐpŽn×臉ä.wIčŒ?Å)dŒŖkm÷Ĩ`ŲŌõšē*oÃŪō1&R§ŨkŠņÃcĀ>Āßrĩâ—ĸÔ%Š’4C"‘Æ|k^Ę/†ū†.Bp+ô #īŨ#9Éä3Á×ĀԊF;ËZÕ;œ2 .Ôáڑ ¨|/‰÷Äėē=™-ÚÅ@­Š!¤šåƒĨž.ģUļĸôD3g“m͆Œ-î]bĻeüua™Ī\ЧøžUž4•šĩ–vPōUŨ*…ĐSr7×7°ÛVæģn P‹Ũ›ŊéĄ]ād×@ÕjS§đ!aįĸķ˜il´gVā>ŗn÷Cs}^bą r@ķāiĄ^íž°$ö<Ã&—ĩ*øôMT5QŽĶ ĻX0Ŗ™ûˆŗ™gŗ‡ÛBMĨ6S!ô*Æö&ÎROƒ˜ĄLˇĩ7˛;åŽ.ÜļÉđ6toĶD:ŋzbIīęŪ†dåԌ2r­ žÉÅTsč_! ž"tĸ#˛DŒ×ûđ‡0A8)ũÜ˙j"¨›ÍąĖTĒ—l¤,L3Bžĸ2iæ` ņÂķŖØö´Ž|Ēaŋn?;–áûĀmā đ“¯ĢŽu×ĢÜ(0Š|×/5d늄ƒĩžÜĒĻO-‚Pŗ l¨#"úˆ¯ųˆ u1žŊĸāīN ´7‚1ąĨ1Ū§‹tĩđÍ 7rŋƒjYĻt-ę‚&C‰FÕøG2¤cvi„ę˛:xcyQô§ë?ø’]`]Æ5qĩ@n€;Ņxųdŧ—ŧ+6^$éjyP5ŧōĢŦŊrĸʅnEīK*ņĩpIwĶSĶȐķŧšņøMėŦÜ P*|4pÎ:ÚqļxîīYzǟéJ`›Élį%žÚā=>Đ.â ąŠ:€@^Â͉ūÔdÎŠĖ”žA0ÂvĀ Đ p*؁ž<ĢåūˇË %oĄĩeķcģųcuÛÅ5Ž;¨AˇZo}ŽŋÍ@4Øx įCķxĨØR dÂ-d:ķüRi0ˇ{’v*•ŌŧM]Œâ°ōģjš ī‹‚7Ņģčt2ģ†íÔi`ĢŲáĩØ;ũˆv~ų ɕō-‘ã\ōíÚ9ę6„ÅûÜkŋÂÉĐa1Úķ5p‰đ˜÷Uõ˙ԜĩP„ØđgĀ$\Î/f‹kĐ÷ÄîāeúYđûËoĘoąúäĻÄ>ĸŒŽņúˇø?8r؉}Ävį.BÁ+ā<âQ€ķĪ0ž7Ž ņģSK”ĩĒ u3¯[jŋDJÃn`ÉX‚Š;ĩAŽ`ãŅvžéŪ_îÆŽ!o[™™ŌÕíįHéS`”Ž}äwĶų¨Čđg¤70˟­8†'Ę;Ō ŖōÁĒpĒú-.™+á%Ũ$ųŲęŖŌ4™O–ÅEp‡éņ‹_OˇÄļëŪpRū礨p‘.aFŅųÕŖ\ã˜9ä3×ë_)…˙¸ž h†fėløĒQ•3 ×*4B_yŖŧ-ŧNÕ)õCuŽíđī‹EĪũ*Él ōuą,˛ĻŠ‡š ĨŠOšmę@™˜#6ÍĩÖøÅ`Ņë iØ ŒÃf°ĢØ,‡tEGĸ€… Ė ˛ūcâ~w‘›Īoãtæĩ•“˯֛”zŧĄ^XÁ5§š%%~7Š“ÄŸėlfÕ^LëŠVĉä"G,­]ŦŸËS*†–įĻīŦ/OwU÷ļ~´ŲÃWDBŅļœ™_ß~îčę^^'_ ¤ÅŲ¯ęɛiĨģ)ō(ˇ×'8Zō8ԍĄ­|RKUhœnNøūœķjį—yŊ_SÕ 1Åúfl¸žļę }‘,t5ķ¯öFŗ`ī#‡Ĩ]UØ ú Ų×UÉV„ĪK\¤—,”Ā!Sx߇~īšäāƒæ_Ø"qS­Ŋ+ ž d?EãTûKĀöĐRđ'Ž ļ{pĻģFũ].0m@ÜÚļøk[] E?fÎRŗÁ,¤7p–KÜbH@r …y›.ėˆ ßõ•aé/ėE vPą^ąPQĄM’öQY5/ƒ;ÍŠÕk¨?„7_nj[Æŧɨļp, \5ĮP8é 6†ĶāŪĐdÚũ˙:SY A/¨"æNRÉDx0Į— ŧäŽ v+BĪ"į‘[x'đÃŧ6,úü]%Œĩ˜%<÷JÚS_ũC3O…FĀ2äĮđÕ˛ņ‡dUČĐ:1ā`˛øÎFšā¯Ũ5¸[_GĮnM­ˆ-“v“=ŽC€Đ|ÁúŨŪ4n/ģŒ9ķēŗÜ4‡~™BCTÕ;Ž›ü‡ž‰rą|zDēŽH1.=ī¨Ī(?<—ëÃ;Æqđ'xžÚAŊĸQŋCÂ™Đ¤?×yŠđÄĮuvč I—jÖķds™+ĶųŪõÔ×Ä۟?FTShŅąĘŊs)ąCLũoŨš°iĘŠ¸[ųP‘%éĢŲ§Ŗŗ~71ƒˆļ'šF;6āwĄAŠÕ%Ų.‡]zAĪÁqāĪÚ OUŽTŪT^QœT$)Ŗø=<Á€˙„ī ÖųÖšš8B˜ĀīÔ76ė6^g|”ŒÚÅqØ ••aå…Š×ëOËāøÉÜ=r˜ū[ë+D™XĀîbæQŊEŖX&ŧCP4 ą^ąî´f—>+]U˛ŖáËš ŗjŽX_Ø^†"vGŌųÎīß_pËũm­Ķ„_>1Ēg~D?\~0ėžŨevčÔŗ4Ģ”û(U䘯leÛŌU!Ģ5ģ#&잊üŪ‡Ļa’Ē.L'U#Ķ=iø†d2:CūHv ˙&čz‚_ØEË}īŨŦcfūVUEäŲøC˛|´v ŽégÄŖ/ÛN¸f8Ēdˇ•Ņxénô@Ë žáxU“ėaŒŠFA˙”ŽĮƖLāĨļ&ĒßJ}ΠúaWƒH/ 114qƒ+‚´â1ōŦ§s`’˜ų@%÷ˆæQM=EŦö´8‡mĖC1’§’ŪVē<đ‹%Pēŧ lL^ąT0MǎAøĘũB? ƒ°ŖX õ†ėGf"Į‘¤14ŌA…5ÁĩOƒ[ )ĀTĐūN>‰§ÄŗÄ}Ā9ŗa‡ąŊŒžŠÃĖĀĻaû$:nĢĐÚ}šÜg‰˛}Đv‘Ø3Kâ#m†gØI4;î7úĪúxÛJËŖšŲÂŪÎ_EWH{KŌÄ!Äaę\…)ûuîF“$%2Į{͟5ĮØFu•( Žņw€(ĀīWRÅâĮ–ė;õäđ: _Ã.™hĶg‚ŠĒW튘éČüp¨ny‹{ņr˛$pWyĮ=Đ3ÉŗĩÖ'ƒâQ<—Ü’ÆJ? Ģ…áՏÁ6Uí ˙Ņŧ9žôģô§˙?reąP`Č]XŊ𿈏GĸUëW)$ϝšWčB`.ą‡īŠŠ}¯ļøøīyÉßb4›šéá{ëH²?4cÕ˙J÷…ĒugP€Ũ%ÉÉ4ۅĩC­Č ä_Âg×zņ9h)œãšå!Ũŋš?ÉÕSŒSnTMå2õ”G˙Ԝaļ•­7?õSC•°Œ›GuĨāDā—xBÜ)zØ Ė0Ē“. Â+¤q!ÖįļÃ6GšĢŧ_YįtUũ1é­kúÛîŲ{Fˆ<ÕĨdjŲÉ2û]}Šüšä`Xĩ$w0 ´ oŒÚÔwĩ°ę„‡ŋ#$t9_[Ų0g˛pJœ%ÄÉ6JË`o™ptQÍåß{ŪEĢīDÄâéČserØ^l&r[áã‰KäN´#–"]E$;î8,5Õ¨âeÔ°„a›âc!•bÁP‹ƒo÷O˙dœ’,ERÁBøƒāÄęAįŅĸ@ß7ü2ú~^~N=ßoūY1ôûZū¤›Õ\Սžģœ€Ánp đGrÁ}D8 ž {wRŦ5Æų2ū}B‡ø 8ŋ”ļÖoRˇ ĄÁ‡ má?ņ øĐ Cē/Y^Y¤ā\4&¯TЊX×l ŗ\Ë=žžđ­Bį Q™GĘČŊčô"šČ­áR¸oP$M­=˙*ßqųE@9Š‹.D|ÁҁNū ô'Ē/õ ß,YĢ0(НUeŪ_~]ĩnÜØĪ 4æË‘ =‚SųsbŠøČÕĖūĖv1r^öģ,VqY"T šŗĒ+ä1ĀëÍã_|‹4ÔoŨpŠp‰ÕöāËĀ9Ÿ1h ÎĢy!8}Ã$Xí¸Ū¨P”Pįü‡}-{ÁxgĪŋŌ§Æ úH9&œJu§ļĮũËü—}|mŗ“æ6čÜÂ{ļI~ČNrOĻĒĖÂ1eē¯'+U t,ˇeé2R¯ßgp†Ū."ˇą1Ęšēl Œ_“ˆyÚ'ļ¯rŒ\Tc^úādWįk ÆHôNÁ›‹œĪ‚ûIÍ ēģvZŌīäžMōÛîÛp †îˆí+ĩV+f€ãÁ `P ĀāŽÚs] „ķ9âĀą ߎmĮeqJnCUĒ•uR¤iÛ|ׁėĒÁ^ĩ]p@Ü#Ærˇk‰h‘˜)>§ÖnA˛ÃúÚēËĒŠl]Y]>Ĩ~Ÿ´Cõ‡ZŨvĘąĐnąĩŌ­7= Ņ;Į§į/Ģ}{”Ŗƒ ŅžB–l$4I௏T_'ŦqŅÎâ¨ÂuđCnR=ŧÁĖJa.ĶUKoiڈĶiŖ˛¨šų¯dŗÃ.;}Đ?ä'|ī‰JŌö‡bČ­ļ†Ö ûĩÉÚMbRäj–áŗ°Y`(| .Ä^j˙Ô4v`¯ß^_Á:R/Á•›t:ífo32N4$1âžsmC$Ũ ᅋŽõ$šĮ¸Âōy&NĄ^pŊüYÁÄAŌÃnfz)oJ:(v˜jtI!?d˙b”‰ĖGæąU*­ĢxęęXŖĒ^ú˙˙>™‡ÜŽ×0a=t­`Uū¸ß[ŖwE7‰\kßgíoŗMĸ1ÚÖĮę˛NVoS)¯¸ēOxgŧ†GŠ3ĪŲēiÛi'ébũŲžNžeÆM!ËĸFũĀ÷ēęęėc9Į4ŖąO b°V‘cô}Ķ<ŊíÄba”ĐCöS-€ĮwJōųXāķ›ÅG|"FTą]ķÉė÷ŠOc›JŠ•:e~|˛ķ×āĀ0ˆŗ-ŽXũķQÁ}Åe…r̜5õŅÄãcäņj;ĻÄ]Ę]ė f ”áëí{îMį‰OrbnPĻבČ*lH­×ŋįgo„|#×4)ΐmúũíSŤØįËM+‘˙ÔŧænÉ\Í%}Í7Ã1=BéÉ?Ũ-œƒÕ>TŠmÁãĄÅÔ*ÆCŽđå°Žâ>ø8”øS Kš3T3ŪĄ|]ķĐŋQÕ$¤KâôúoĸÛĮÖUŠŠÜ`ĻØ[\%vgÎ2—ėMI( OÅ~ ¤kĨ€ė9 ?“3„?¸QL˛ ÜŸ˜‡›OWĖJn•ō9]Qû{wę˙īŽ×ręRQ-^įFŗMé–"!œB‘0´zÕ:ÍÚŅZXļˇŦsiƒ†žƒí°~ļ:ž*nČĪ)dp=Œ@ZᏞM?FĮŠJvOugÁXƒE€ %+>NY•aqpîqÍ`FЋЪžĻØ5ĐrĀETĪĐmÁ Tīĸĸ5ŖŪ)ę’ũ ‰”Ô4VË"ĶëŪß/‘ °›P \*ūúë@Noöģ<ę!9-ŗËΊ§Čį`į‰CÁcÁķ”:īßíįfņkQp yŦJ’gKįKP(ųFö ;‹Š}ĘΏĖÕ6×Ôˇ†ūJ*ôÖĖ—ž7!ûáYlؐĩXKų}BÅYÄúĘMÚũmō‰OiéZĩÄ<²_{N>‚|NždCB‹ˆNĒ7ņúˆđ•ąß‘åā 0185°Ôŋ{ŒMĮĄzí&›)Ũ ŨˆŽAÛĄE¤‚RQŖÅMŧŸ­Ļ×2.zUxU|eu*Ų„ä3¸!äH0| <Ēm3¯āįą(=UÜ$^ˇÁ[^H„ũˆmŗ­EE|Ŋōũõcëãééöåĩ§:Sß@_ ŸÂ[šX~`ūįōĘĸ7ôLķĐ˛ēš’ˆCĄũ [Đ^$KŊT>O͍dĨP;•ū&ˇgP-€3Üe2´´mé;w>qŅYqj}šb3ëzæŒŌ~ŽĩŪ ¤…*vIōZIĸŦHĄ¨P…_i_jÖ‹%mđ(˙˙ąā`Ą¸I˜DDˇ‚ūĮŅYF7•ĩmx͉'MRĨ-Z¨ĐR w×Á\—ÜwˇÁgpwwZJ]â.ĮĪūō~Ų˛ō#+kįžŸëZ9+A÷ĄmĀ0ŨĨÍ_KôâĀēęIîŖåŋÅMÖ=Ķī4l×k×íĀxô$:ũŨŒöũ@6Āá[é™Ô†ļeģŗ&GZ*¨ųņ˜Ô]ZTéǍS~¸Îú´GYi¸Ā4Aہũđs˜ˆ†Á“â`Ą-g„6é”Ô[ƒÆOÚ4ļ.ļĨkJ‹Kf=Ëė•uŨŦĩÍŗ7§fR#) ŗ8t*4J¸ŠĩFŨžzų žF+2Œ UCŲžÄ^äSüSJâU=e‘ĻõĪâ2Cá¨áÜcûՔšČ8Oõ…oIļ#2ŅGx+Š‘FI=ļ,*J(Ųæmb[ņuŋ…`‡ŨX{Y>0ōHä"wĄ›?"Ā {Äõĸ–KØ-ՋynÔEO5DgFß$[QđVâ2!‘ī†Ĩ!}a1wŸŋÁŊ#5D>ÛÛz¸âČû5rVŊ2á-ēŊ§RŅøWi؅ė×5GUĀ čIž žāīá!ŧj‚R§ē!.–áß|ëC•ÂI~ĸôXÚnJ“œ÷=-ķdī5ķb^E^Š3đ{„‡ĄË˜¯ĸ†ÉĮ(ęecų-Å$ĩÂÕæŗÉú<}ÛAİ—ā%ü[ĸŖņ~Dū0tąx°š†“zR¯ĢŨk˛Xé&jGÆ<‹žMŠ[…Ą˛ĐwÁ…P!—ĖŖüBxzĄ“\u0ž‰ršqąĒģ|¤2’™&gŅ÷ú_”į ãöũ4ęĩƒîã ĐÄvCGåá”^YŸ {Ũâc~žē*`ÎTŗÄŠ1õäË/m‚ežŗŋácįúŅ‚iJä鞸ũâ`\ >øœ#:‘mđĶŖPRæi#֘ĩĖ-‘ßÕ B˜C†c˛ŲĖ@zŖg>Ī&[ŌéQî‘A„ëBĩų)lcâ ڝ†Ã@†zŊb‚ęļí˛šk~–×Zˆho*4|H€Ō"BOŽEÉų˜ę1ķUYæY–}ä˛ų;ņš’Đš|Gƒõ0VĩFķAˇWûNß]7 Äcī1‹æĒĄĘ4Ķ5t”n҄šbÄŲ;ŋ™šQ鐒‰dHû{5{ĨÕë9 DšK1ĖožÉnT1žp/ų)R,žCū¯ę Ž߂÷ĀwĶmčšl~ =˛ôA} ÃJ´!֍ˆ—ũG†˜nČVžŋ°2¯|–HØK@f‚-mUƒÂܓƒf ™ĸ Ú¤¯Ōy)^ !f¤1Ņ#č.ôZįOg=į勤Øąå Å1˙9Ü*eƒėīė=‹Õ|ĸ˛Ií9Šĩ2#Ĩ‘ÂrĻō „āW¸Ž€ŋIŋ‰Ģy|-—ÖŖ_ąB\gīk;gåŠĻĄ…žė‡Ųsëŋ˛U8(—.ĸ‹ū˜>͟\T—ŧ+O3ĶAĩŋŌ_ÅmB$uAZėûF]*{åX(Ía‡(ę)gĢrŖõ\Ô*ē5ˇŸOx~Čķ#ˆÆ"Û ”z­4ŪWķÅú˜åŨáĮŽščSįāîZ+ŌÎäLL âŽãm1œX.ކΤ\Ąą˜!jIņƒL`ŠyÜ‘<Ņ•fXkl,}åt0Ÿˆ˛ĘĐHzwųöānī§RôÅ8ŽųaGG×Fīđ)‘ŽČc)§rˁŌ^)ŧ•D![šĮ4w}ŧw:ƒĪĢų^Zƒļč•ꆆßUŠRmĒųKŠõQžØË<ĀŪGv\ĩXo!›âĶÉĶL÷ÔSļRđǃ\@¤Ä—Áužd0×00N^:ŋ‡|BAšop F_q0bÁQ‡åiîšîîë_î|.ũĐ%ÂĒ:UC›-;élŽų–`ĒTš%ĩN—)øįQGrē°OĻDž<,k†īė aė<Ë į^Ų%ü#~€ėgã~ė_ôžpž—€ŊŌēāWtÁ*‡¯Ôį×p¤NNOEæëNGž ´ņ~ņ w{3áĒZˆH1-/V—Œ¯(—"Ā6Đ]֟šJŨƒ! kĐĮCYĄUä(YY)ũ>ô- ‰­Ŗąņ:×ĶâN…kÕ sĢįMÃ4m]•æEŠöų–‡ö/Ä(b~œhOļÅzEČôŲr3^đ(MØNÂE V$Å\H:įSšũė+ųtÅ)Å:l/Å Sā ÛĄŧ‹EuĖ["PtOtÃēPgUũ$VI§šVĖ,ļ.ׁģEĩĨŽSĢ•'•mT‹ÅŋÄ!"‰UÃV`~1_œ%îķ€lcj˛MŲE`tK˜Æ/åyÎŧÍÜŋ*Ąļ6ÕQ—”˛9Žäƒđn‚šĐ-ūfÉ0g/”ŪŖûąö¸ÍÖÃvÚē˛ôséܒ1YÚŦNY.sÛ0û×cLĶØ!åë+b*ˆ€´‡bu™:T#ü%GČ:Q=Š ÎEO ž/`ŋ å•ßÉ4i%9[Ļ ä¨â ēŨ˙M8æŸíU>'Ye™4ga×2‚¨”áą÷ßŨ0…ē™â܇RššŅß ģÔG#~‘įˊå7CEĖÆĐÅĀ<Ļ=_^N­V|Å? đ|Ģß~Å>Ô´ĀØXw5Ø6x;tNaPŧP-E„NT"R:[iģ]3)gļīĩwmbėLO6’H#ęųŅ"ÍuĻ.â´<(8Ё§e´‘~Ťv#]õ”ū´ę­ĸž|†ŧĻŦŲ‚tšU.}n1˜‘ębėvbÛl>ķ™Ō:Ą32TJ˙ = `ņRϧ}AáöŠŲ7Ũų&ĸƒū_JN~!ĒÉæ8Î ÎZWāC 9ąŒlIš;AOŧŋšQq­wí¸—pœí„ėkDWC˙­jŧ¨ßŨŊßųīÛsäpō6SĻTTÔĒ!žĻōÜ hkíNŨ|ãšĀD˙Z˙Uœ#֓/Š+ōÛú˙ũ.čßŦ–žė_ņũÁ›k¯7<ßfh*ũƒĢ~Švë6ģŲ+ü^šō¯bž‡" b›áĻŠ†Āô/d ŌšE,Ã)üвœŠņEîƒt¸^CEë,p­cBüvĒ‹j‘ū™fĻwų͗5+ĸN¨ ĩ_cz×ĘšRU7š|Ŧ§–­c9ĮŒ |`BČOpWbeĨŪ°vĩÉQc¤û3TōQ^ķĪ_üWŦĸT¸Ûŋņ1M'ų0ĐBĄĢØôBt¨KeRĪT›‰kDur1˛ ؊ü ¯Á÷p4{™}Ā&‘oˆ›DzŽĖ§ë…í¸'ōl#Ž ńž[Yb, Íéu;5ø.zųQĄÉHCä3ø˙÷ĪpŸÅįÂIn>;Ā‹č]lÎX§[OZ– /Tŧ<{`6Ėļ[ĸí3ɑ˙šˆČÅÜú°Áĸ†Ę˛Ö[ŽWŽžü îŗøŸöĸž‘.7Šáü^9ēōWâ•íˆm˙CÕ~2ŖÁ›ög@å™ņjĩōŧZ–´ĸvĩLB¨šén1ÍX9cü >°o'QÃ4~Ë<ķDļ&ŌN•EõPpâ[á6ÚWᐖõ#jĮû+k-÷QËäé?1OúŊĘSl6qŸ„Î3č‚Fs˛ãŋĨę!™ĪũĢŧ¨MO‡ဉ<‚w%ŋüWT­hŖ.F[dčįsz¯dB+ėoGŽã–U؝ž %6Ģ.|ģˆĮ°ģč-ŦĢėuW6ŪS4ūQ'ų11Oõ†"ē×*‡(čƒ‘h…˜°ę¤´ƒÜ–’ŸbŋîŅ.ŽŦŲ4¨=L_ŨÕÛąÕÉ$˛CX™*GŊVŗvÄōĀ z­í?Īü5.ōĶ,ŨÃjŅ1ΏžĖ'Å~1VãũąÃŽtÅ+Ē:클*ļeôgķ>Ą\Ĩ×Ōé4ŋš5‹Ĩ!ŌÜ#6^8Ėoæ?s¨f´îŠū?‡5”ČũîÅÍ#ņéúņ™ ÉãŅ “įŲNš+ĒPxBj æĄK„&Á)ÆyúŽē@˛ņĸ&œžđ6˙c°•:4Ž–ũÖËAQy…zŦ\íuųĻÉūĀŖ•uđ6 #ĩS3LÛkĒ:–{ŽĮn™äØĒ͎ë7—>ãkᛤǭ•Ģ˙d˙BõĢØZÁ/ŸYææ7(Bd=¤¸Ŧ֗EUÄĖĢÆFũšhã\Št´2īû•ŧnÜočæbT[=ihbŒŦl%jĄG†øx˙ĄĀöP ö…´ō*C7….•w”×{Ώ-úz€DŅ[ņ\|'ō’nÎõįƒÚs*[`–ē%eFß`Såū¤[dē}<ŨܡO¨Î]”Fčę¨+L¯lWŧ]*ۂí°(P†¸xųŨ'ícĶn˛ŠĀkú÷0ɄHzđ&ÁÔr÷Ķ‘ŠŲˆÜ8}ix˜8ŠėOÉéä j8ĀAô< Ā!q´u´kŲEÍ5UҁÖuܸŪH_‚×+ā#āWßËÁŲ_ķcøâ}û­Ī]õÜ՞=ĐVĶfžA2Ātüqy͊ÍŊøÁ\/GŦᅎâæÁiāNŦŲ€ ĸhuúĢę€fŋώv'| į€õČdÂzĪ{Öx(–*iÍĀ`lāsIriŌû×ĪRƒëM[ą-ˆLĒœåųâ]E\CĻIC¸ ŧ î’-RûÉŖØQėŪŲ9ŅßG¨FÔPpÔ p…h†lf›WÅ åz 3Ōė‰œ­kA —7”‡ũ3úY5ZƒÎõ#*ŦwđŖ&^‘áˆvĨŠÛōķđyQļK_]Ü"ÔÃ˛āŠRČ …>/ŗÍ8œé˜ëG‹Ū‚.ŧW[‚Ō,­‹)&)ž+PüOP,bØw,†)(;¨T°Nø,;Á{ĐôƒĀfx+Áßá#"Āî Ģ…=ČtdŌžÆ™'ôi°LøÂTĄ–xēŠĒJŽČ¯S;Ŋ^=š4P°ŌŨŌ|‡Ga¨ŸđķØUp~øųDlūŪßēË2ŨRRōĄ¤ɍėĩŲmë˛,ļ§8˙5ĻG3‘­`.hYę,íZę’Åá@ÂūĜ¤\9§â§üė‘×íĮʘļą÷c Čnj“r[čAUˆxŠávg?ôØ ļĸ‰WØ_t/l°xGqž¨¯LÖzŅŲĻ‚ŠäBūy‹ęözS5)Ür1SK8†z ŨˇÔŋŠF¨ōÉĩxŠl…āRÄh%6ąyvwú7(§ŽĒŸČ2ˆLbXhX°s†)å˙âōüžf?ēÅšMŋD>VŦU׎ĩ(И~ė5BQš)—Ú)`ˇd+ĀE÷úĀGÃuGåhĄ 7¯É´c—Ãz‹. ×ãf,_š ėE7›Ûo|Ģ~û‹ņDĸÚŊÄIęYqCĨûÜ@n6Ú˙ˆŪD^ā˛:`Ÿ´ÎēŖęøˇÚe¯ũßø >›ØĮīL‹­ÛĸŪWרŸ)%_+ŖŨÖŸĩmåĨ éôĪ!áļibŊ_ās´elkd8‰ĖW|TäĒĸ‰| ŊÙf_ūiŗv€~išW/$ÆøųyfĄ÷Ãv8NõB•ĒöĘQ‡¨Éâ6aŸÁ?ãp)|;Ž.ˇzÖũØQ°"6"öpü+å)˛€l#rrņŽ8+)JÕÎąĨMT ëu‘Ū ũ¨Ū|š0Ž÷0JvĻ8S>ZšK( o+“-OhæÚkxet$§Æ Í÷ČM÷#ĮxÅxz ÷…^YÜÔļ›ĄëæÎÖl¨= a2b“wõu-CF¸_¸3BeėW6ū(ęÅM`ŧĖ Ģv˛Q|…G†õS—ļxž´,ŽMlT&tcKĐĢJŒ…—ađˆ!1 ہ%P€Áp-ŒY`øÜAĮ6įļ°*ô#ō‰ÅRąÛØA0TÁīĄsôrzb‚„ct+ú+ŊĒešWõ6Ŋzæ°1QčJĪ “Sŧ‚Ãá7i§ÉßcÖĀÅp5,Ålx!ļäZbKۖÎ)‰ĘžToOļΞÖŪŌ™kēe|a<ļčN’—{Î}åZÂö0_b•~EH‘+=•žIGmķĢQä#ŧņQU¤ŖY–¯|-ŧ댲–f$Ä ‘üôčQy‰ƒƒ‹ąîÜt_/ĪĀālü”ī¨¯Đ”˙ģ3*”H×øÚ8Dg•ĩ0;ėÉö6>Ŋg¸ĻģōœÖMüƒßĻ7ˆÄæ†=Ģ~­pi–af´-Ō b$Aöz/ûT‘V–üfYʛ$_­GÅ_ˎ‹ 5v‡A#nĒ{ęW 'DM$öČēcáÉ"¸°[Ø)¸PŽā?ō%°šDĀ<ޜŽ=š ҆øMƒōčđ=Í árl´U˛ØQÕ Õ:‡ `‚äTŖēÕčûũ’__:ė'‹¯3+ĩ°z÷´œjSk I`¸‹ŒFZÍ?úšbƒŋ­Ņ_Ißō˜*SŋJ?Ĩ|1{ˆã¸{+`™(O%Æú*•ˇ\0Ž.ØnÜ™äxčFܑb–”Ā—+f+v¨ŠÚ¨oĢnŠ2Į ˙ŠĐ÷‰ŠÎBíČzU‘‘2Ō°Ņ"ųú~J¨ô+˜]´>ЍĒOŪ÷öuī ōz•!ÁtĄa_M7Õh˛Dč!Ėw‰[Äųb Ri…,OA´ž[,į߇Æ!ˑˇČ[8Ž‘– ņ|9sžo†OØx,žcQXZŪÆ9~†ŽmØ/ĩNļßwÜ3ĄĻˇĻ/bŒT žĄ_ĶCéļ0ö„ƒøü->AĶK=YŨ ]ŽGJ ¤:R Ø üŽôĖëđuĪ×īemŠŗß—‰_šņôîĻ% ß8ķv[Ö/ÕGĖÚ<~ģīŽkzŦĻ.‹kīFFÕ"+,[J+`īō×U—×ĒÚiĮNš(ĢŠ–kjjõēËBk˜&æü0A¨ŋQZûĸ÷pƒ¤âcÁN,ę\kNbÍÔ¤ĸyåGØ{ĒĄĘŽÄ?Đ&xQ­âÅ"uvčŨ/xk‚ĨŖ­¸<ļ~pļ&Mŗ7bU`bĀÃFCXŽtĖ˙ɡ—IˆۄzWõė“īņSũØąõZÉS Īâ [š­ÜŦ)YFŽæŧYČ.ä>7*¸§*ūÛAø~‹Ô‘>ü† ‰šÉIü9~JŅGÅŗ*U{9ūE }É}t—Đaü!a¨xE4Iŋp“Ā8-#Ûcû¸›Ę!ÔOOlĖįCQ: Qø0¨‚M„ú„“XCÖáŪršöŦÍŦ}"ĻFŒ3"đ¤øŠŦ33ĸ<ß~>z\­Á9C\ŽPYđ‚ōĩšXÃ4a:…¯øŋÜ,ķzģVēpcėúē ˜d¤Ŧ=E4,OĢ(Žt+û+ūQ.3ÄG’-Ë~yyŠōŖŧ\9­Vœ~oõfĻîeŽ–^Ú°×0•.īF•ÃÈ,Ē|õŽwŪ_OŋŦ°VoÖúŊūāąą<„sjJĢˏykÕfpđūu†Úę\sî=[M8!tâŅ‘gņ-bŸĄ $#S‘,8Î ' ü D(Â$p'ˁÛápÜ ąŊØY,Å “‘™ČD ˙dĒčL$~ÖŨJT˜GV­Š0×n“v “’ęßé>a;ūŧ†ŋÁŊÁ?dßĐá4HÃĨ™dŲGō YmŽožP¸Ŋ°É΃j7jœ;ŨŌĮîu„ŒÍNco1FŦ)žeŗšĢŦ+XÜ„“õ´åVĒ>õDjKh gkÜ6īÉht ēŨ˛ĀĄp.P-S.Ā7 ÍÄ6üŋÜô0iÛŅÎwŽ î{Ģš)˜å^Á5'žš&Wĩ65¯ļS×#ÜQßč§ęß4¨˛–ė>ųv(´$D‡fhWk4Ų!33ččC\SÁÂmŸĀQĒé”]ą\ŊNņBe> nāg÷“ģú§„n™÷8™8‰ęŠĀ[Hĩü)ŪJÖĸ•tXÄh~”Đ9´Z°{¤\‡AÚûūÜ[4{%WJĨD6Y)S4S/‚!¸ÎūķgüÛĪ5ŦÉOš?Ąēčį™p>—‘˜—`Ōk€§Ëč5 …­Žö ^/ŗ†iT;õĖ*×^ŅģÅÆņœžŲÅ´:ūm´ÜģÃ÷ģÛB§ Õ°žâs0lãS˜"×%Y>ēŖŪ§ĒAúBŸiE0:úq덿üo2~ŗ)‰ŧD åØ<‹ĮY k`]āŽŗŊųhĄķņ Ŗ‘PE&(í‰ÍS§ŅT°žŨ=ä YTWô+"~—(Į’’ U9ļ E_âØĖØv1|Ž…tÉ2Ũ:Ū2]šJÎËGkŽŠ7h4ŌVäû§­°Đ[ąDšY ÕÜ‘UĶplK¨UŽļ4ëjK“Ē•SR{fØëļ”jyžx4ļ%wËĻ ņKŽc† YĪŅXŲ3jē[HØäL/ĖŽ8Ÿ÷9ziüm +YŠZL]”÷ÁëãųX>jF•X,øôDŪÃûp¤!"Á'hķ~ƒ›a.l“áAä_$ižšŠđ¸tDš"ÕDŌÂĶŨnÆ$0ŲX;$$} ^ \,˛Æ[ΛΤe՝S? ļúĶ#"_“ú]:ΚbZ 1øNęI4&kÕĖ7ĒžVŊ-z]tŗPŨčUΧFˇ-#ėšÎ‡ÆFģņ2wŠÆņėaļ‹)”eš‡$ĸg…‚•Ÿ € p#ŧYԁ{Šū‰&:˙rĪņĖÄëŖģžĒdųuŲ~–ãSųrė9ŲžגdšĖīāKøk.ZėtŊ dą~­.ĢkzņPÕߏÎGŋ‹cÄŪÜa° 4Syßį]Ũ|0NūˆX"Ũ ´fJĨJƒI—™AÔ!˙"Ú0Ą¯ĨgÔÕcĒŊãgKņÚđ7ņ"*Lä/€\uíH՝PUhA*,\…qh}4ŪūŲÚ$p„ŅØuē,¨Y§YátņžũEnļk%RÔ"ÆWŊF“Ō0ŧ#Öų‚ōävŗ™oCŧ ûR{Á@ôj⎲MŲ(ėVAvCŨČ Gž #á2œŧŋ†C¨čĪ.ﰟ†ÅčHbœ( ‘ü$ēS˜åˇ)ZOå_ø$nrČ3/0ĪŗVe1\!‚ęÆQLėuPs9e&ō+š¤ZĀæĶßü Ŗė: ÆŌeƒœėō攞x?âa‹„ąW͍˛čņ˙ķņô’}š-Æ>-Æˇ)îûΒ_`öÜķŠŠ'jUk˜e ņ鄾tˆŽZNŊ=#W†Vsô;Õ_Ę4|xŪ‹/Ųyâ;aKRøęĮëũŨpŠ(ÁGđ'=;Bķ@CąPܰ‡Žë˜2ČUŠ%|͐>c픎t¤ū•끹}zOŲņĒŪÖʤMS;QNĘ)rü!E€Jéž´ZÚ>ũ¤(ØNƒMÁdđ\‚÷Âü–ÁŸđ.ŧ /ÂßŅY¨ =čëâwú—õ)Ÿ\6¸vˇ”ŅĩīÃ'˙ûø<Ļ—2IĖh´ X,ŊāÚrŠÜAË7ŗŊrLíŌÔnY2)S…z„ķr |…ëa:¤„>Ü ú ŧwĀA¸ˆo‚fy‘ŊpīOkãœÆųņ*ĖzÛ6ÉôŲxĀ4)c35ā“pS6"!QĖ `ĨÔ)A.¨ūÜg võŅŗH˛—FØöą×īmä-ŌŪQ]PLÃæ`íđWÂ\ᥡ%Îj´ĘÚĮgĮO&'PĢ”x`Ž/ß=ÎWĶ—ūĶĪˤ¯}/ŌÕtEŠHęųũP|ˆäØNėâdPÔ ›Â+2WB#PM^IAŲį:Ī{ēĢŦ>Ō×/F‹ū\#†Ÿ,œáprv—äsAT@VWū ûƝįül¸^‘Rĸ;؊H!jdSĩīĢâ*”æķáôPĪŖV+ē鿏'zįšĨɕ'‹Æ[&öĖ!ĄŽ7 §ĀCM/Š™`8ˇšŪAˇ#%Ēąŧ°§DĀ'r ÷"yčg…C}YĶ 4EÎârĻđ4ŋ0ÔŊPķ÷™R{ĻOĐ ĩÔX…>ÏlžÎÁvdczĄEãxãŊU‚-ĩž&ŸP}PŨԜāp6QŅígjü4ū)õi|;\9EwŪMũŅ=­OFΆ/ÉxãĒė_"{Ļģšžũˆ­Bš¨pq°×õɖwõķîˆ!ɓü ­ Ėd‚ ËVąŖÔË4Íåŗ<_ ĶčGЛčsôuų&šOžkŠŨ@Į ĩ–Č40$€áœ~‚ t‚Qp›Ô”€!ČjsûLįԈHuoųhxYz&žS9•Z՗Ōú–_íõåģ•‹4k9-s1ČšëzJŨ\íI‰ņ'ąÁ"{ ^PđÅ÷Ęįqž´Ėĩ4ø°CļLˇâĘę†p™˜O.—=¯0؇zÛķdąû‰ųÂ*4ŖtD”) xËJ{ąXqĒ"ŨŊ„[™:đ;…6V‹ļp|5đ×øqy3Å)FÜ/ĄÂ^c¯‘Kdƒ¨ĩ‡9ņcÂx~ÔŲĮ¸÷yö’ËdgČ?AŖN—Ú ŖųLŽ+ģn,;I'­ō|dh|fޝčtq9=ŋrXYÄkXt*bAōŦļ˙•ĘA˛¨Ų‹lŊąũh1Ė•Ą€YH3ŒŠ¤đšæŪÄ}ŌĻēAŦŖČYZí‘\ĨäMY?ŦļĩŊå?{Đx ŋĖO˛Ŧ÷VLA–ō’‡sræ¤āaÆq)ĄŽņob#bįQd[uBg1“}hnnSWژåokĩ1›š>ƒ“Œˇ”ãÁgé{Œų“íÁaūVŦPS4”úJ§%&@‡TØTĀrx æ‚Ą $ƒœ0ik@‚NØȐž…E đeĖđ)ĻÁáí‰nם› –â%ŒīÅ;¸ídWė¨Į7ũØŨÛ-9×^šššP<ĪSô/H*røÃŦõ)ŧ ōŲVôT¸Ū„€čH Ƙ˙0÷6ī)iXz§˜o8ģĄ;§vŅ ō%U3 šˆöüĮü|•]•PŠ9a™P Zƒõp$a Ļ}1]€úÅŌ6ø/X ļ‚BÄūC[ëēļ{Ũči*ß-ō„ĄTīV@"*‡Ųî;~UīĐÔÕ ĐîWŦ•ĩĢėlĢé(Sã;‘xĶæˆyē—Ō5Ч”‹B^Ą2úXč ë Îtĸöyyĸ?ÅW­â6û;÷-Ø0°Z˜ˆōŖū(OQĖŨTŒRd*ō˛Z)+{&ÆÉ‡RÃÆ?2lg)–Æ›+žĸC|‡ Ŗ‘T/ą)ÄáPltÔ Ĩ“#eØīčŖ`}ēŒuAcGmoæZ¨QG–¸íp¤ī1jĐ{’žÕnœÔ LF§Ę– 4Qö¨hU‰/åZÚĨäÃĖfˇ°ƒĒ¯‰Ô*›P8ŗä_}y„NßV•ĒģŅŅÕÔFÚīɏ$Įíį’Ŧšė=ų‘HuÂGúe[ŧ ÷ģN֚ēŽXÍG°6sļiq‚§ĸ59ë5@ΨËÉbđ›ÔėÔũŖ_qÛÉ;Ė6DĐ+ŲNļnŸ>>,Hœ”ŅžĒĮx‰Ņ‹R„˜Žš¤í­lč]åņûKõY¯+ÍĄđŋ´Æ`S‹ÚQ~§g„˙ŋęīǎˆ+&j÷pJT‹ģ„5xļœĢë\ƒÍ}l§ō2ƒģęT‹žŪüInœĒđy@ŽDŗw‚xh"š ‡ƒäîcĪYĖXÕքĨ†„Ø…?ß:ÚÚÃ3ÍO PûÄĶR@ÚÚjĘ'œa},}žIz ÁTؘ0 1ā'(€æĀé°Ģ4]Ú&1|˛āáŖÄâ q;ŗ’Ņ2uĐX4€­ÃöaˇŅ*4ËÁ“đ[8Iķ~üÅøŽöÁęcÅíp*EđÉėBZŌŧÕ×Ķļ æø¯ûī#{ŧÛ*SÄßĀ!zĄ+›ĨhNŽÆ‚JuâÄvÕ*ųnüF‚~8ChnĖABw]o'S~!­(UŠ3ˇēOôŒ™cPA6¸€ €\~Ąđ=Čyī{ļ‘n`žÁžė(ņŧ¸Ÿã@l“á2~,Q/ņlcˇ˛ž,ũ‹ŲÅn ķã"Ž ×(ėͅßđŪxkŧŽūŽî‚ÎËõįßđ‡„/Âcaŗ´@š$%ÃŪa‹]Ū…}9“lM># ÛVg„FŧˆQ5xöéŲpü=đ Äėa:33đÅH , ž Z‚§mz›ŅŌ ­aFĶėšb5ž8¸&ŧ§2Čđ–YVō2Ž€îsam¨!" nˇ´´vˇö¨UyŠ‚ĘpĨ_Ęøāšę™čҚT‘Ŗ"õŌ+!(¸ÂI~&ŊwĀAš Ŋ/Öר[*‹ĄŪR^’#ČÚÁ8h‘VŗĪŲ§l]´ĒB-ŧßĮ'åÄ^2í‹6BûĀDÉ *Ž^ÅZĩÄOŲÅ"öžīŊķ”ôn ĄI˜˛˙öĪ÷­ņVKō&]¨9n*ū †8^īŸ<âŪ=IžS„ä$_“œKuƒd{¨Ú„Ž:"Áv “'č@?q˜Ž\{A)‚fŌ Ą\iTÕTqxą_öģ7/p,8ņKŪ õ…&}åoŦ/”FĶŖČ* ĩę!>õĢ“ũtô?ėõoNĖÁ×hĢžĘˇƒ(ŠRØ(ĩ@äwđtÂN§X Ņ3}Ķ2fs¨í• “TJH3l:8C¤‘īÉeČ Ŧ~ž›Ė=šØÛ[XŸŠHÉø‰čLą˛Ŋėnz<ęĸk`|ĸ;+]âø% ũHVE­ī÷ŸŋWũd2´SčÃZkʒā4isGšVžS!×p:ÂĐøŨ—[=¯ŦÍĒ–Q§žšRn€ļ\{îĄOéėåjĻZ§õzûTūü ĻŊ}yI’ČđüyúČĒK•í¨€Pqģt[j.t{ÚÆļĀ6ĄqHWqŗ¸ ëËö-đøÕyž1^Õ#ų,ũ_b•T3Čú3ŧãØXdG i.Å>ãã™ŲŒŲ0<Õ`Ė1YĀxÆ5Û7!ųŽ>FĶ_q×ážî3ßâ!‘MŪAÛ  Ņ“âmq¸ė SÄ9ԊnÂJŅ ´ÍÅûā{đoū}ų_\§]ƒ\{â˛ârĢĨJ-%ŗ¨Ÿá˛°=œ„kaäWd0ÂĶu™č[ØAĐWZ͟įđ­-ĮÍ;+û×i™v*ŗš˜Ëį‡!ĪÂ$Ā<ŪĮîŖ7Âs°2x?b-1Ė2Ųb3ˇ.ß]ž­lIžĩ¤ŪŅ PQ‘Û ĻoLb˜y21yv…íä8 F§„ūU#ī§ˆ"Lōä>î.WĖÍG‰•Bá"ú’qüoüūK˜b"ŖáĮ7T:ŊŽūíīëäXšß™ī;Č } ŒÖWõU s¯õüęŠ 7ouÅ|ĄŧąĒD°ĩqô# %Žwh“ÕšJĩŌĄ@é^ū}ūaŠûÔpÅNi„Ø]ę…ŨÆŌđģŊëĸ+‡ŠŦ6 ē†n¤v€öÜ>Â^6 šƒ´@3¯OĢ&•īüļųÕĨ“ ĸ7Ä<•-ŗËûĒrLōˆ…Qį"‚úg1næ cÕB9ôaW°Đ;Ëã7éģh_‘Qę/ēo’RÜ%n 7Âgd=L`ûšŌãĐŪø(r!CĶé,v>s….1XMΌ[@Rĩ Œ÷ë‚n÷[į‡+ÖŦVâ1ûä9įüͧĻ8Aˆģä\ŌĀšŌŲĀyßnĮ.Įܯƒ>^ŒÔÆ,m—%;WŊ*ūe҉Wķę‚8ėōg—Ž,LŌ'yķwÃ<ÃSã!’ ˇûF;æEöŠÜ"ŖÅƒēfÕķ؜Đeg4™™Yyĸø—§ŽG~‡~RŌ!Ŗ6GwXĶR1FR§ˆ l€yúZ+ė>ˇ!ĄQáũü—%įđ|´3×\ŨRģ–čËhøÍD&X‚LÖŨ&ĢË,dŧēËņ +Å>Ȟ¸ŪۏYæĮ ąŅ"öE=iÚMÄ7JÅ\HėâÁØEĻ–M“Í OÕÅ˙ŋCb&˜†3ažŠ„­áRpÜÃÎņD˜\LWNTú•­āvxŽ ÷š L„Ģá¸ŦŅ`4ĮŽfŽã77lČ4`úŅ*ël˯US¤ÖË›ķžĐ@$éd ôKx;Ÿ6˛=0ŽhDøu‹ÖZiI)™^â.bŒjĐ%§YEįʗŸŒ%Ļ_Đę˜Û˜ĮtäĮ0Væ“ŦÚM”ƒu_ÍkíG:‘žš"L2„k ĩUilŦƒ,Ŋ ƒ VCRéŠ4rõv­uúÕnuŽĻÛ`7šA6U6Ũ|ĐR`}pHÉ[Ņ]tk•-+ģ›#̜žîdnedåĖØ‰oâT0ŒX¯’ŠGĒëzXĪTOcüwr8é‹oÅÆZ•î™îoÄF´”e@ųšōųøbũdíkŌĻh¤TĀļŌ?ĸįX#đcYÃČ9ōžojŊV]ī&¯ÍîúöŲ0,žMh*“~ÅŋČÛČģ—jNŠšzb‰=Œƒm˙•_Ŧ(nZŊSÍ.h?l66ŧƒ’č Âį ?›ģÉ Ū)[)Č&†ĸįŒM/§nQ^BĄHRŒ–n ÕÄųaŽšå‹€´t˜ĐФĸņ ã]îŊá˙ėāÚĒmŦߥû…tãOņQH!á[ēŸ~§>_%ÁũGĪR’“Ū‹-…7Âûâ)EŨ (¯Éū”¯qŪŦČ2÷9Ŗ~Ģī`īąi|š Õ(ķĪ'TŠ–ũĮûŅŧ4ēđŊ¤Á&šŽ ĪôõÕ?Ŋŧx"Į!ÅxĢH@_dĻCL2Š÷éÖĒ˙^dkäDÍ7gŖd´â=v‹Đ,`ω¯ •HаÉSMŧÉÎķeD7vĢĩLyBq‹î¯ŖĒ=4jÉLĸД5yˆ-njŒt õø'\!3”˙Æ˙"ÔĄžĘü’&#íÂæÚŽ ģędĐ(Ė!zĮ´"歉ɨUŦ=ūJx(,‚€t°$œš~`´@=Čƒ@>œÄ0錈Cú<œč`+°Ö°ėK˙Z÷ˇ&r5C ™Hg JāƒģøŽĻÛB< U#.FRfMļÆ[7”Ũ(ķ–ŧĘ›Õ)ûŋĒfvĩkŧū­ŽĐwģ‰ŊÅôĀ-æC8O}™/LPčĀY艑…ē^ę.ęšĘŠÂ,!W˜ĀmøÚā– *ė•Á=PWŽ–w’ë‹.!3ė†Č7?oĨ—$iö*Ģ+TŪÖžÕž×ŧãą•Ô%eš–—íG֋g™™Ō#`áߡä‹ē/ŽĄ"ÉLU“œ!Ú1ōĐIĖ2f13€jO•S¯ųÂmĄ;s#üZ]lc˜ĸ/()܊?K›–m(m*ķ’;Iģ‘5˜6ŋ = €jČÜ0 ]…2  ÷ēÔD(d$Ũ„>BąãĐ(ŪÂXá¤Ei•ˇę˜ĶâŗŌE„HĪ ' öđ.i/ķŨšĖĸ°įž—>āŸ‰Ö–Ö ÖæYæ´ĒPĒ)m]zÛjGsĨŠVdŨ(ÚÛ602(÷Boč§îcÁYl=U iEÕ4Æ~1\ģĀû 9Ļ‚xĄģ ōMņŧŪ;ŧ•†Ņ+W™¯Y–kéD4 ŊuõwũøÆt•Ä.€FĻkbQčxpM Ŗüŧm‰{1Ÿ ēbŊã6Yà K~Õ~ -ĪrŊsßIãĶúϘ_jũ$íŒvķzzzœÁÖĄ}!ˇé—čԘ*ŸÎoôÉd“¤Á }¨O`uā‘b^Lû¨šāWiƒ´%Ü6hsá(iC˜?á6xJŧ˙šôjūÅŗ˛(ėqE+ÃŗjËSĨÔ Jc´ÜæD°ũošg­¸7ԟ<… ˛ņQ¤š/¸m`uŧ‡—ˇ4Át<Ö¯A§Ō…ôpT[4¯ÔvÁ/)ÁßŪŪŠ>Ŋ)Į4ŪPNXÉIø4¯Ō9ĄbæDNbˆ˛OØEËЏįžsdđÔ9ǚųV;Xž/*Ķô^XëlęDŊgŊëĖ }{=YÚĩRĄĻĪÚĮ¸ÎĐŨCŸB‡tĶåTžā]jĒĸ§æH͕‰ųÔ\°HP ŨĐ]‚.Ãx}K}o]:ėëĀbŠAØI§ oîHw1А÷ĩ öek!3‘ÖxcÅ ĒCüD#á'Š˜ƒūgëîîŧ‚üÁu{;Wō3lIĄōŠfgZ‰ĻĻ~šŠDXîüƒ|?æeÁÉĒÍŽ/ÔJůšš Žņŗ˜žSĀh¤?߅¯ĮÆļc!,J}]uAõAžXŽT”ō *؅báŧ A‡ĸģŅ-aX&Ĩ! XOĀqđį˙ßwjYHgvͧBŖņXäštfédēˇũíŧeUęÕô­õ‹5ųlz"GPŪAø1܃“™‹đ0 ã(áÆĢ,×,˙Zj•6)%J’˛—×;“ũæ§ĸÜdžŨ Ž‘ûaWq ˙NĨ&”˛D2öž€< Q 5A^ûŠ~E­<.žĄ¤yü‡x ņčÜ@æmûŗĒ’rüĨųKķF“Wfœ¯—ĒŠíUŽ]ÄipVxå#BĶčžļhĪŸ“ŋįÚî~ۃoČîĮËÕ˙¨îZŲķėŖM÷LAãwíãøuqÉöäX2A,•îKŠt?ēŊÅŅč;â;夆2:~ˆ¤°*ueĸ.~ ûŒÆ,Į1â1ŨÅ| Š‘k`)°qTcj‘Ÿđäz+‹ī#īėוÉÛyĻ!VMŽqĖ˙ĩöūM$aØ3+ņ&u/Zhą–×ÃŨŨŨíŠģw÷www÷à ĨÔŨâļ2ķŊí§ĀG~™ÛÛlvg^y$ØÎZž˜z~ķūŊ%3ÜįīúŧĢ^crŗĩ"o˙nší‰ËÎÎđxö$ēžđJŪĮ÷&}ČšŋĒ—:F{ ÍCCĐé’tI€÷âˌ„ˇ2ãđn×Z×TWįĸ ˙é=Vë==6)Ž(EeBéŧŌ§Ĩą8°§buI‹´¤-ÍûKnēÖËūtŽ”{Ås ˙ •ũ‚ķ•×°“LĐ•1zëô˛Ĩ[;×BŲōĀ `:íÕęGhwĢæ3šŠĨ}Kž–āĖ 9Û2ŸųõĒT3"C!DĸČĨ*—m v)ūpņl83™EŦšû@Пt8­JĪ“Vt:=KwŖ–(ĩcß3˜­t 5’ä;šCGo¤Ô`Ų/ŸįNpûšyaĨf{„:ŒčoôéīW%ü˛{—k§ú-Z‡†ČĢØųĖ2[ŸB]A…?ƒ6BZí,Ÿ ¯7~ã•5ųtÆ[ŅVŅGĖ´g1Iĸ^ę*­0Ũ3M21ž§ I†Ëčēƒ(‰ĸmč+úžĄ së@‰$ŅÛt „ˇáÛø‰kĢģķģÕ&1îƒn§ëAaßÂôü>ŅĢoĄŌ A°Á§ņ(Lá_!},ö:¸Ōzô5Éæ"øęüüüųŖō;ee¸Ķ~ĮãæÖi–ē9­wZˇĐŦ QŋÔ.ÍXm¤”(ÆJ‹žīü}9õ86ņ#ÔėV´—´đŧŠĢ_æßÁë‘G×H×V—Ÿü]žLŽ5§ HWš§TΘā§øö|Ŗw(ąwp=üŽášv/›ŋ?ōąƒz2Š€ûžuŊY&„$“‘bVFjæ=.Œƒ—)<°O÷zŠCŪH­øíĘJŗŌWô•:ˆO%Ij!×ŗ+lÃlÎ}…˙*ËĪQ5eüœú Ŋ•ōYĀ:ßZdjF2&<‡ą Ÿ„õîjĒŨĘ&Ę>ėA֛û@ŪŌ$úAāĨ|Z9§mrčĮ(]Ô&muÉMsŧ­ĩį‰ˆ™íFą‰ėSîĩ˛×AyQũCˇ^ß7ûhRáûßÁĮÕ×rîsŊüŖĢL–ž‹OQEa„xOŠE­@/¤ŪRKy2ū†KđYĻ3ûíÂaN3ŠŖ55C Ģv(žFáˇÔBį0h?}3ɔ9:e[Z}7k‰ÕÜŦđ؇Ī*īA†C~}*ėÔ=e"•JūrM‹Ō6Ķ>B˛Šr =Āžcģæ”~­÷­ĸ÷}ë~į~@¤[’ÆZ‰]‹Ēn†ø(ōüžäÛi÷‰Ō%ÎāM’šH‘ÃjŦÖ =ã…pZ uĨ,Ķßt†NÎ@(ŸĄËh"ũø[‘ú#eĶ]P‘C05¸”ŧĪGžãQ k”û;z䴕|Ŋ˛-hcČģ€×%OŠ÷jŠŪ?RßÖT\ßlKŌ×ĻôĖžĨhÔ.ttŨÕĒ%\K´€™Äî㎒ČRˆž#OœcĘéœĶ7 rĀ—€l1SųFÆR?d#Ëéē fØšŅmt ]ÂËņv<09ƒtų¸*:?ŗsQ‰w§¸gģģŊ*ܘŋ&jYĩüšeĢīڎņGä5ĨĄˇÅáĢķ6äžĐÍÜ/Ž”ĢZPšātūŧėŗ'g¨\ë@Œ)YÚ&­šį0ī7žœkŧ[t/gJr’j‚fŽ–#›„>ŽÚ´˛ŧBŧLŽāŽė×įŋŽģėEj,?ŽûÁļįŽą ؐŌPã…ŌĪrkt×Ē20ˇņįŦ[ĪC×3ܲT›ļPœG\¤R´,2j6€Y+­Kä@j"2]ŽŊPT¨~ĨŠä,\g\`ųXüOŅ߯Nl?ôG(Îų+/Įîa{Ĩû=ĶđÔģĸ_UĪņsuÉ:I-čĨ&’§Œ<{fF+‡+•uH3Ęĸpt˜§>ΉîĪî™ę~.,‘ķĨŗ’Bė#ôÚûĖņÎķŠ+mc,5ĸގaīvÔĒQ˙eŊažiŪ1^ĩČ+Ų(S‡*ŖšKSi=T5C„zĸT ĩF=Qô™nĸQp¤eßxG“ VoŖÎ^ŽÖ.Í$SÉl[sXz/~:"lVPĸ*PˇĖcZÅB蝑ŠqĻ ĻîĻˆ`ũ02ëgtrĨ´X¯ĢĶČ7¨Ĩ¯Æû1ۚíĮրķ"ŋ OçhZƒß“<ŠctåhdĸŲt Ū†ŧĐM˛t ķ)GWŊ;ÁŊÉŊŸ?Å_áëʓ¤×âöÚIĒڗÚGÚ˛Jö•(Š+GsՏÄDÉūâFįTlF%TâŅ9š$vrœ¯Ú Ą ˆt|īŋ‚ųyU2ŋĻŽÕÆ^Ē]”U˜7¸0WŋŅsžwČ9ŌSŊByHņŒëÃlDč}DšŠÛEĨ4ē(̍]Q‚bŦĒĢfdūc&ų´đJ3„#‰#ņö'Nâš`įTš7yûéŸk9§8;,rŠüFžŽ×čë—eoČÕå˙t¯q p'jŽyLÔ ąd:ūuíG›Ė‡ŦŨ˜ÅņE•äpĩ¯ĸšág´×RŅCš#FzÔņXîąU]K{\;›ĮVã}ī–4÷ûŸĐŠÃ+JŒ‡đ\zé~"ũo(Úų˙ņyGŧå89ōZ‡ö‘ÛČYR¨ĐZ˜*Üá/đģø#= ="äsŌDiĩ#ĮQۑ ëŠ{¤ëFj’†ä*ũu‘*g)*$GH?"ą¯y—‚-Xž}7ķĶģāÄãHÓPeÔö NPZi5ēœĻßŅ1yŠE=qctŒte¤ }_0ĢŨ˛GÅį—*”ÍÅļn‰¤ķg<š™-‡ûGų0†qR{÷"§Ƈ™m¨mÆ~ČLßĶĖ}†2Sņx|ŖÍhē GmQfŽÅhx uÁņ&aŸ0Tč%$š›ģįiē:Ģ|ˇaNĘCÄuÂ+ZLNŽh=JA1 ´w >t­K]4‹ ëĐ!ô ­Ŗ“h%ŠrÁŲ,EįP%܊†Ō`ZéÆÔaڕ>+ũZĒqhl…i‘Ü+FQAūˇČ‚+u”|”3_fx¤N í*>įî3 J~¤*Ø­?ĢõĐ/ŠņA×XĩŸ 4×v—Ž“ĨŸÃLÍŨŊŨ’kzD&Ë#ätŋ–;ūļNõ´é›ëŗD‹øMŧ#N ˙ū“G17Á#7a*Rƒ/ŦŽš‹wĪ)úPe|TrõĒrpÔšwĀŊ*>Í[b}ŽéŠ:pˇ¸‡œO”_”—nKëZ+Ža\PŽEÆâķ%Ųƒ~‰nQ-õ§éjĨ9P}Qē€œŅŽWŠG%-ŋŠ ŠĶŠ,‚N´ E3å-åduGĩBŨJú*u÷ōšĒÜ <Ã;ĐHôũ!Št'ęE–“ž˛§kˇŖĀ~ĀŧŪnuL2Ÿ,u›į 4cSãĶĀü$Åį[Ō\ží}Ũo…˙TiļĶéÜBN“ޤ^V -ÆØĀf2c<îķ ”õYĖ\aR”FĪ]F¨ėęė:O’…|ąš~oåä q˛¸fĮ‰ˇhģkËļnķ XhŊbĮÍÉ ŌŽ,b˛ŸØl$ÅžoĘ[åá lĸBú–Ĩ7é;Гßé ēÆãTtū*ö4>7§˜FĻžy.<$ĀÁĖGĒK~ëéņŠĐĩÂ/Øt—üHB—ĶBš wJnnŸ–™‹~§ī°˜U{PĒaaDtHÅМĐáūm}v–É;śÂhtogCV§×aPsÔÆĪ¤”Ü$! fƒhuč¯Éč Z :å=DGSõĸ2 ÄĨHF?ÄëP#AR_ŠĨT¨ĘSõSo%_嚘NBƒ8¯CҘÅ>ØH=P P=Á5žŖLjĻ:Ô‡â/ČMŨ4 ųĄp”c…Ë‚MčWpˇ 3ŋ73†YÉD¨]*IåÍŽdæā=ĩ+‰ôã'ģŸ7†ßU÷–† ĩÛL%&oŖŪ˛×áËmâ×°!Rĸķ+LJŸkÍÍ{„ÔõnhƎëŽ÷ÅÉÅ}‹¯ģj;ؖû×đę? ˙a,ėœEųžéú8ŋu•n{[<]øķ“ŠË˙āîs/Ĩĩōg9ĖõÁŲ×ųƒË|¤…Ļ.•žÆâRgq~´ĸÆēX•|UøāØÂëūD1-wäz“J{pãy™?–oË;–w=-1­KęŪ¸ŲqŠņßōījŠĪærA=ĨęROišÕŋ€Æ´btΊNoįļ9ČrŧĢ˧jũÁfâ"RĶd{bí@HĻüԞåˇĀé„yž—6”ũę́ŊĖvĖ|šō6}’ŸGār˙Ē‘jOÅ{)€? Ōféŋ]ųq˛ręv™°×i¤+ũTēÖķģ‡`XĖÜC~XöŧäģŲwfŅâ’ŌĸîŗvÎIôTķĩŖšpfc4F‹Ŗœ^úūŗüZG¨-z§ŋv%˜‡ ÅBĄײ1ÂEá_÷(åwÅÕEԉŽĨuøühžˇŧp§ÍãģBŨy!‰b䍞ĸ›čš‹fĸ)(šɧäˇč7z 3laö0--ē[üŠdĄG#[ķ į‡úNīČW”›P=9ŒîĸˆEŒ`ļ“%oķ„ŧözÉkJkhĄÅŅŊãrBŸ†f„­Ā.7‹‚Ø›đFG•ô6IB_Đp+õ{”@sĐ.t‹ -č}D¯Ķ9eė3uĐģt=:Ž>ĸ%¨>* īåkōIy…ũ˛}•}—Į3>úĻrW™‘pŖ9oî-ôô|ēQžõŗøã%¸˜ũŌ71Hî+˙#ûaŽ…×ISĨ>Ōw%Ą`R\WÜRœ.ęSœUԞ gŸ2ĶCļĪé&­–Hã˜8æ ū%‹TĪzįO,ǘKģ8?MלPV’q„ō)ŽP)–Ÿg¯člOÂ.y';ģ8ĢÔČ ģtŖâņĄxÔ]×ôĶ4ÄdhĄoĻŋŦú¨Ļė¨,<˙KۘÎĨŸĒ6*ė„ H¤ũ—m”Íē÷4ŌÚūŗÕĩUQūā'ķSjųöđŪhúlríĨiĨĶJōĒŪn^“—? ŸËp< …,§ã¤xqĄ{2NÛĶnŋ‰¯š'äX˛¤'¤īKÛŋ%ŪŗîÍüí…{‹&Ūō^‹ÖâYxž /‚Xļú ŋŨÛÕXŊ\ũ›TĄXŠtđéL~?€¯cŦkPŠŲNėļģ)ÖbĒíũÚËâu…éÍveĶ v-Jo‹‰RC߯~ų>_‹_å/+>’SčY´ŪˇŊÕeK \ĸ:¨fÜR¯™ēuú hmEc-mH'ņ„ËKvÉĢ­ÔÖGgR}Q5+ž§Ž­^ę7ËžÛÉë6¨ēķIŖrÖĨĨī1Ž-önōēÉûfõčtmGå:ûΌäėūScük0â\ú´q^ŗĩ]!ÛéęРڝēÚ|ߑŸFwĶcô­tT-í‘ÆHÉâ\Å"ÅEEę J_ŊPÅgīÍfŗw8ÆYNŊ ŲÆšSŪ¨[hĮjËmÅ$Úēh<CTöfķ79sŸ{™ÆģZĨVŠpUh‹°öäž w>Cwqv4۟Č*årsšn€Įāxĸ&ˆ,f&2=™`‘Įō dA&šė!iŠ´āPš˛/{päŸÅ0)JÚËb•l¸uĻu’ĩ!ķŒm ÎĸëÍú˛éĖÛ´3éĒt-“‰_ãū°’ËŠÎŽĻŽÍöĻūwũø/Éššs*;4čTā  ‹Öëk{Ž-w€;ĻŠžĢn Ģŗ ā’ŲėHm=mĻļāÆų øj-ÚIŋ‚Ŗž%N#,Ē“r+M•ŲÔCɍL~[Š ôoČ|ž5Ķą=´JhUŋpÜ=1WOî•3"pKpTāûčJĘaüG4 ¸<œÛ&“÷Ę)d-ų$īrwōϰB .e<†{ė÷x^øĨ0ļđ1ŗƒĀõôü¨ŨĒWÎPÔWl‘“āysĩaĒ<ūļéĨÉÛ´Ū8ÚxądbTŊjA5MŌaŽëoÜoB_čUj yâážëŊ@ĪĶąÜ ~,ŋ;īPŗŪdee.Ž]û^0יcĖRi8ŧxĖåmĄĩ¨AŅUēšĨŅîžîvîė%&˜´_rÅ !6{^LÁc¯íĻ%֋ėHf9¸áKĘÚʋü`ņ‘Eũ-mMĩÍŪŸô]‚‹čX<:¯ĒũŖy8ūZ#¤ƒ2ŸĀsHŠ0DXGZ3˜ĀIˆÁĢ*žÅö3ŸMŸ—æi˙āzį6šx5đŦīū+d§fFpËŠĖHRH"Q~Œ\ÚpŨO]7˜ß$ÚŌūÅf˛Îp’ŠĸjĻÚĻú ˆ9EĻĖßė>Y›ˇGĨū›ą0ĮâûJœ•ü;h¤ī$ᤐ€–ķIė*@Ôŧ<š™fūųguqŪ2*ūlĢūc^yâ/$GšGŠÉBĒČ9•Ķ%§4¨iĐŠ ÆYŗ2ųĢÁkBęæ]Î̜×;$#øCH›”?ŋ~/Žø*ülÅ^äâøÎ¸~‰íN×qįßÉyÉŋ#“"ü̜Ëj’=?ËÜ5øvđ_ęXĩN“ĮÚŲ0nhĒGZūŸ. ĩ"‹đüc¨į*8Ũ“ÜjoĮŨÅæbņ2˙‘oĄ0~ŠPū_< DīÃtd*3Qú–Đú¤1Iĩ4 %ŌËô B 4‘6ÃĐZj–ߥüȌŨYrŌũ‰žņ)^Z]ŽĒ|m ŋCĘŨÖNéëŠE<öŪé9$ôƒĢĸËa‹ņÜd8č9†ô'nš]ĩēú˛8GuVĄ~d_ë¨æˆ/27*‘'ÜׅąA/ƒ…lĶßĶNÔÜwÄŲN™Ã”U8“`ÜjĖ,Ũd˛'–܋ލņ æĢÔ^X ž`hĀp@. ”Š…;‘ޤtˇ›SøäUÉ ÎŠžŅ7ãEډ¸q›ëœËŊXĀŅ vA—ƒ.Ō CīZŸX3,ą?E'ĩĢĩËuądiOfƒÂė†ÖĀŨũ‡Ŋ˜žĖWû~ģŪŪœT&Њįā-Xi֚כĸŊÕŪŧë(Îđˇx§ģ‚ÔIže˛™ž™š™¸˜ÖãE¨bŊķœã´c;ÛRģË#ãOŸĖÛ\]Kų’œãpģŋ8WjĻRŌ¸ëãM¸€|ŽzĄę ,Y-ÖįėCžļv…cküģq~\}î…â‹ŌĻL5o0Ī7ŗ÷rø8ūxTōáŊ8ŖzZũĖqšŋŽũyGˆģ1ŊC7ë÷ū §Ŧ!Ŗé:…6×ä(Î/.ņŊëwÛ˙Ŗ|ôOÎ@ëPj†ÆĄŌ†ˆōkz¸ė,ātfāéŽÚŽæÎŋĩŨķ„‹ĨS3ŗ’ú…=á$3Ãuēl2QjĮôwˇ´~´.ūPåĪqGdĢfũ{Ŋ74Đ}ŅvŨFŧĨŖJģ–Ž,ųčšŌĶāÕĀŪÍūÚVWŗI3T[ĪčkŒ,íåYŲs’į{[–íĸ­…!ÜpĐ0ŠüC’&¨8ƒ˛÷úúĶAĀĢäL&éŗ‚Y^X뿊†B}a9WĒÆ…saœāTWJĀaĖ ŅØj¯ĩÜMN‘ū \„p4­HĶzĀ0@/VŖF2Î5 ĻMįĸŋH õĮ%¤8—ŸÔzĄč€gā™ŌÄɞbŌpœĨcĨ#4‹Ëą§ ,4xåĻtõ!ŧ˛ŦŊIPîAķĸ¸sÚÖĘŗĘĶāÆ˜–ú õ÷sŪä=É{m‰ąOpäâSL>CÔÃÕUÔC?$ú)åßä2]›3(oT^e×1žÄ*^)•ŸŧÚéwézčžq?¨ÅúĖVhÛUZšTYŒŖĒW{\3Yš#4wNÄ­đxÔĸÃ4\ú(”¸–ĐžĀ Ŗ¸ßüwE~Naöå,.CŸņ)­Y¯:?ęļΜĪļũ;ä{Č8wc÷×7KwËuķßŅ~cü‡‘ DQöíŠō Yˇĩ5†¸<ĄC™ļĖRĻSé°Ō% zŦŸĨßI?‚Ÿngjjm|ëŽ"h„4uĸzžú˛­ĀŅÚõÅĩE,•Š"ÛT<_a¸{Šë”s!>_`Ų)qä™ņŗ)ŅŧČX*,“–KushŪöš+]DڑÚ%SķąSūŅŖÆ×ę‚aŊÆ_‰•^J^é”kÎäŲD.nĘÔcæ m…0ĄˇÕmfĖ3lÍÜ/ܡŗs˛Bs?æžũcIIUEĄúŒ="ËkēĪ’ĐÄ:ßbJ;ûÚ˙ ît'8ĩîĸ(\c4ō: ĩeV‰>€šų…ülŦm­qĒ%ĘbÅ{ļsšĐą8ņëĸg§B—j§7á¯kˇĒ DŪ'ũ|iūÉĘ"W4Kč]Ņ{ģūĢū!é@ÆË pžsx[‘}ĪØ¤$éļôôĘI\Wî'¯'ŗsŲŨ,’íŌ|é$ļāxĻ…)GČū ŠcQ­€N ôŠöĄ+qĮÕ¨–îĩV uG›ŒÃaĨNƒl(ô +9ŽW dy 8{ŪFoŅč]DëĶ–8zŊ%EĐeč_Œ'€ŖAĄV¨?x¤:¨3¸fũB?‚7„žShQ#ēŸ~Ø@wŌ^tũ›6x†úāBĐn섉Ąą‚ŲĀVøÕ#Yũߗ Û}Iyéá] }ū‡=ö;Ī™ß{ņįŖÔtP×W;wÅ r„3ĮÚܯū@úÁ<+æ ČķĪâ¯[kÅVũĢōŒbCq@Ņ ķhķQcŸjcĢ7¨*;ÄáB{œ‰FĐf¨)2Ņ()YxáÚCgAĮˇäŽđЊu9k˛gÎÍĐe¤'Ö9WgbŊ´ŦųՊ.‡> žŦ0î,}\rZkuYÍŧĖęíts“™ƒ¸ĻgēáĒnBÉ|ėÆ~L%×W×'Į{G[ĮĪ`ĪŞDö'Aä-s‹™Īė„ûSP{Ãdg^NūĒü~Ⲡ xī˙ õ ûĪ‘å„åör[¸úbs2…6ÍMĖk]øNÛ#yFj_S7@˛§yŗ‡íÃĩ*œ‡^DĖj\ģ~/|I~-Fę$ŨCArgšHČÎc ŲßÔĩGģ…' áŽ-ŅÆØn*žōũøŽ¨!ķŽų•~?+*§´¸F˛ûwÕwĻĄŦ Õ¨ˇų,ŽųąjŖ€-ū)ž8ƒÜz÷xW%ˇäÚėjŠe”†z˛SØSėÅ5…^ųL8#Ô^3M˜B,)~¨4ēÎŲ[˛–etŗî͙ú;NŋĖũ'wļzŽZZ3m`é1&2ČŪđņĀ˙ŧyÃM3ĸ>õŪz‹–Ōŋh2š†N­ m Lũ7jƒ<Ņo‚iš>pjFWڌ€-:H§Q=í!^ •ZŧY}z \ <ÂõÅĨÉ%­ôũô§ôqŽÄœ§×€Įô(… 'ͧ)ÔH‹Ā+o€HŊĸ2 ß}‚˛ĀîõÁEžėßLOŅ­(-€ē.{Uā!-ûmĨŸđ,- Îø‡NDâg( Ųdē’Æ[[ŸX^ÚXûFģCČŧÄ@&Vąœ-,l_”•ų—f æT <<Ȓ=*;0+ĩRRŐJ›!ëĐq™\\):^rŦ¤­4Uü.ĐõŌM×íķ 3ŒŌ:įģęģ2E*ˆ5´Uĩ3´­=œ}Ũū…‰ĄųĶÃ÷ÅúĮ–¤×/k–L ŖģZĨš–˜錠t­ÂŖpo@ŗXPD­Ĩ\á“ëÄëUrø ~r^Bîč1ũdú–´ũuęŧŠ›ō)˙ë€īŗ3t^ę5Ę åe¯‹^cŧŋg•dū—%šŽšÎšC‚T̰Đį<ī˜âķĐķ¨aœÍ`dũ Ū­ŽŅhŧâ ˙ŸôJ:#yãfx5Ūkŋg7ØGĄ)h:Jî\Jˇ*—(*2ßq,3žŽ,‹Íap;míĖ6ŗ!wOúęŒĻâĻ”ŸŠÎT~˙X?¸†ĒVŽ/Šîô@}`;?ŊîŒĘĖ߲¯˛ĮØ;čtu†eĮ˛“,K-Ėf¤ÃËđZõ2õ+uģ ņųZ“r€Q@ÂL÷pÕyMœnhÆō”]ЉŠßūü“Î˙§[ŠŲ^;äBāŗāš!ę°CΉNâ¨,ŊˆŒjĘŠú‹dÉ'äᡰ@¸jYeųmž/_—wʝõôVũĮG†}„ĘŠ\­LõČķ|ė{˛xWÁī‚e´@,qÍ*YUĸ(ŽÔ4÷;r×ĸˇÃ ƒ>*mA—P}ü†‚ę]uU‡ļF €sō âGҚ°ĩj¯€zĸûĀ­_é4Đ8ž¤Ÿ(GÛĶδ%Ę$æ™'8ŋ!™ä0iÉôcūfĒ–ōĨJō=ô‹õ_Ų Ā6!4zį3ņŖ1ÔDPm`š1h ŌŖēŧâGŒÚŌePÛKĄ/"Ņ$PA7é tz˙-¸ŋ)hJ]dę‹6ëĸĐ7)Lž*¯. Ŗ…å¯%~+œUôļpž{˛[vEąËŲÁÜ ¯v>œĪrōLž#9ŧŗŊęú­*˜X`ĪÛ Æˆ„ĮžC}ûÎå8+ˇ™.¤Á4Ũyß=UøåZīžę>䑨­9H÷¯­ ×l3î‹:ĸŠrĄė×ą}ØVė,įmgg)ķ‹Î–ß[Ys-›bMJ7G§V?ƒåŋ…ĨŽŅ¸ކBQ5ŒZIéÂ>×%čč[TĪ%đ]‡ōŽåŽÍŲž~,ŊAڎ:liueUÎ}–÷ ´õPÕíÍrÍEVÃÖeC””•TÃhkz‹øX;ÛÚ[Ĩ+˛r^yõđzîåËuEZyŖaˇžą~0ãPTƒ?Ė˙ä¯ĄbĀŽå‚—°ÖũĨ†Õjyf}eûĪöGũŸ&\ëãŅFßĘķšcąc–+!o]FõŒiƒ}ˆ=NęĒŲŠĢl¸eåÍUPVH¤s\ŗ\z­YW  `–ĶUreū.÷‘se}Î&Y­9 ëf‡ ;ĄwMûLĄFŽÅl,ģRŗG3E›o™iYk~ŦRžS4Ļs€ŋũxŽkƝ+Šj9fŊžÛ!ŋ~ŦÎ_ãŠY/ürv°wŽÖ'zK5 ĩ™$‚Yƒ=h6yA&€:°ĐÉt }HGYŦæÃĻ‘Â a°Pķø Ú¯;ĻĢåņ„/æ{+|Č`ųątyÅđģ„ÕâRŠéIK’ęÔęšāõŌãv ŊC äËč`û:ē–ļƒŗ~ I´*ĘLo\° ]Ræ>ŋĶX¨ÉŨtŦ Â*–Ņ\ZX" @Yôžd’jËīå7ōY`Î23™ūŽáŽvŽ"ļ=—ÍIøž…Ķū ô'p̏cÜpÔēm:āülĐ;ū€× ¯Ō žQÍ K€ ŪĄĮč>Z (ũ õėâŅ7čĀô9Ėo]ĖLcV3km×m.ëÅüø‚ũųuŧîz6ôēÆ=â"yQnDTdļr°ō’ō7‹KãîņĮų|ΜIš 95O!PČđî—åwW(œp3Ŋ<é_Jrk9 OÂw‘„؂tōb@š˛ŋųÎE‘4ž"?h&}Cč{JčQ\€KpKëhkkË'åyîsÕgaŦhÉ0W7MĢfĢŅŗļJ>)”8ĻáÚXÔč=NK•Dĩûtø)ú‡æŖs{æ\Ė"éƌžiŠúŸëå6HHJųĨI^TéPÅæ•Ŋø0ž //”‡Î ķØZl“Ė+Ŗaš• ļ—Ä”ö)ōŨëųČs#(Û;2ƒ2đ=ŧZčėjë40—8-ęˇÚī‡UŌƒÜ“Û‡;ˇXØ.9Ž™zšĢčôúeú}Œ’;ƒîß ?nwõt?tRf)Ž+öģû8ģ9ŖŖ”ķ”āNīÉ×ōQAũüƒ3ĄŦƒ­Ŋ,ŪžŪŧ+‘xŌ•¤a_æ SöŠË1åŸŊŦ†’„[‚VøíZäā´pa|ž7GugÖ˛ĨYŪ9o˛¯ƒßŲ+#ÚT[—JÃ/T8LËžÛ?Ÿf€nhõßũ aĸk{ĶiĖ?P5œoĶuQŠÚŠILĻŗ ÔüD9UBĐė‹T%åcÚĶt—S+|7F‘ČŌČoD)×7ŖĪ¨:öAQ/ô‡J4ta=ú†$Ās1z> žFCĪ5"CI?R‰ŠÁÔgî‘įä š…âö8N ¯—g01Œ 5.ęRøĖ™é|æôã<š•\Tc_î´hc¤‹Â;!JhĪf2ŋ˜UGj…ãę¸öb đ}܉vŖĶéÄLüé8¨ļšh0Ķ™˘‰–†ßŊKŽ‘ j§˙GlD/ŋw ŧđ&ڀÎĀíĀsTg2×j"kH4\h6Uū9ˆÄŅY¤y*ë™h¸6Ĩ›6˜Z¨Û¨ęēĐé ŅĮ_ŽöPĪfžŨŧūHŪ2‘Ę>‘åƒvƒēÛBĸ ¨č5ĸj´§cĖL˛}´ĨX?(8‚SMkMéÆ˙ĖCÁGß­ž<†—× 5œĶqü5øp‚ä#Vu_ÎÛI ؞|;E•Ü؜SY›2úfTLΈ7ÅgÔ­’é“Ŋ2ûxåČĘ3"ZYšXî›ãm[lŖmGüÜž!~•¤nŌIA}IôŸeöŲÚģŲ_‘RŠĒl¯īxę Ä^0KO{]ëËsš?ųFķ:õ Í}{MG[{ŠđÛir˜}zĨyŊŅ…xčÛij×ięĢz¨TŪrš¸_\iœkü^ZÕ#_7Â#._[09˙†× ¯pīļęNāŒNõ¤ ŲĘ^eŖšē%KPąėJusĩRÔUėP\eš˛=XYp ˇ…æ ˇuŦŠÕąË´;´}´ĢšÜ$Ž9>‚C™ŠŒ‚™ČDČKČÚ0weabgWwGŋČ9UpTkĒĸé$Ēŋ  ķ{@+T‚HWĶ)t}g˜…cŦAÖŠ–ĘqĘ¯Ę >Å˙Cļ“Ĩd2šˆÆĄļäŖŧ@Í3ž(n°Á?$ž)ŋwĄč'ZØ˙VGĐYôđŗœŽĨû‡ī€ü/ĻÃéI˛™ô!Íų|ßÍņØqÃqęûo.ßYÅÅē’5›5™š:ĀycYāÃ*ŲÃáã¸bT*_*ŸŗKŲ(vŖ|Už(Īs?pŋsU‡U‹TY(ĪĀOH:HW××į]æ#21üî*÷Zū)į˓ė‡í3ėG¸ų SÂx%ߘį@ŠÄŌŽh8Ô8 Ē€ö-5Ōl@5JĄ÷Š ŧÆ;pÉĮ@Ąĩ˙žüņ"ÖõD-ĐSĐxįŠ’52UŲā8Ē +â%1JTXž˜Ÿš2Ŋ˛ŊÎ{÷'ËČōب ڝé īh*8–c4xj9 Œ9fPŨĻŋęĸPČÂkkÛbk%ĩžŸÎl4-151m3×0w7fEOŽ1!ÖGūWˆuNÁ pāŧ4*’ŖRqš{0jtÁ0ū¤Âš[Ķ$;&=3ízĒPˇIŊˆŲ…ŗŠģ—œöīā˙Ķ˙´ũ…Ŋ¯}Žķ§ŗ–ë´O3ŸŲ>'˛Rŗ>ezx\ÔåéšB=õãN•Ü(q Ũ:>ė™[rŸwŋ#+ČrD}Lĸų;oOūĶŧ7X øĖ17A™°Owl´×¨ā[a_…ŠÖ"KoKŽĩõžåžßxŋÍūĢČR@‚lžļߖ…š6‹&t?QŪ(oĶÉō›Ü@{Ņ)ÔĖTÍ´Č8ߜbnŽ)ķ„$†Œ'?ØŽWUBR%Š;VāĢč°JV–(d0`7ũ ÃØpG˙Îp‰>Ĩd‡ŗ}ŲsĄåš5?īBŪā܈¨ÍU˛ĒŦ‡su ]@‰@vđƒ9´„æœŖ@ŋ<ĀĪq&ncûËöuŦ˛•rž2€ąâ—ø=¨‡_h3ŨEīĐį 'Ŗ/yu *”xn÷jâķšĢÃĒ™Úā‹NĶŗ =āh;ԆÄešBīB-•ĀŖédēƒ†ãļyķL9įŨ]„yBēė~z¯ŅģĄ.ũ~ē1-W÷SˇĖŖŗĒj jŖs˜3šĀ6×öĮ*^ Ü4SyCé¯jíĖtŦrĖ(:[ôžpĩę–*T=KąQqW1YØ*ėîŲwÚÚv;ÜÜh™ŽHĨ+RAa@Q‡ÂĻ!yÁ¯CŠô‚~™aÄ˙”ĖanŌmāö@Ĩ˙¤7h/pč3ĐcZ5¯ˇP­ü•ÕŠ å>—{šRčøëhšŠâčzĒB&聿(ÜŊHwī/”ö2ÄÃ#$Ŗ™¸>(ˇ1ā”Ž”ũŽ}G+'Fĸ‰t# à ČƒĖĀL+č+´;p_ë'ĢŌŠéŖ(d– /šQ\l™gų×QũN͌ÚŠ‹ĐÛ1wÁ͑'\īŊ)Õ+ģ÷͎eœÆb~ąĸgŪ°ÜŲg2˙ÎLIßw?ŽÖ +ŧQĖ–ŠAO‡)I(`L&ķ O|É+y‡{¯›qˇaą-ØFÆ ÆÖÆÁwŨeēy…xUönZcún|&6 g Ë #<ģØkۓŦmÔ=Õ/Ôõ›!#]8ĘŲašVšĪBĄah6†'ãāŪÄ!;e“l,ēWd+ ņōôšãĩ›+ā†ņ• jW@9$ŅŊ´ė/‡ŅOÛo[S[ĸų‰yŸš9h’ ÅÅhÅGÅ@ēŽŪĻ“q<?GŪ¸VqįØ×ėõŧâ˛īp5 2X §<’<!MZ+IWņO’ųŽĶŽUŽÉÆųÔaö2"āë  ¨‚‘“"ˆžÆF4Ÿ ČK™ā*DŸp‘]eßaWę”}•uLŒqÆ)ã=4ú6|%ÅJBkPG&ģôt -ŧˆĪŗų…ēĘēÍē „'Sd?PP4Na%U ã ßâĐ5:‘:‰'.{¯ņZWc×GįGžã‹Ŗ–ĘGŖZÆ\cr™p)^ †˄qBwĐgԂbq)6ō÷øŖüæ 8{ŽģŠģ"s|>Ÿå0:n:>Đ×ô%ŦĀÖˇ˜?Âŋäį°ØVÜ'č‹NÂzp‘gQœō‰ÂĸČ`Ŋ€9÷īū”GŖečZ ÎEV"rƒ,A+Ņ ”ŠŪ PļLJžAīëÁɘ îŌãĐ+nę×Áđ›ĀyĮƒQcŅ:ÔĐ>ŪdŦ4_6ũcôÕT՜Ķtb ؉ÜSy"82…#úŦ%Äú6Y œķˆ<"ą$ē#ļ€™„#ö23ie[mãlÃ<탤˜n™>ƒ­9–4ķ°¨ÃÕâkiåzBû,œl EzN“Ĩ-â3w"ņ0kä|Ļ\en|ö„´ÎiË˙ ¯ąūķFG’WĨ^Mĸë­ëîņ¨ŗīä$¨4ÜZ ƜbÂØjîņîGŽÍÎ,G†=ŲsŒgžgę&Ū´{…YÂÜ'÷@eĪqĮēīš*ádG…pĄČ=]Ú#-‘z\ķ¨ĨJģ@g–I;Ąh„lč …Y< ū,‰-͡õëôK Vi‚|_NįĮ,cö17˜|zN ņĖ(f!sŲhŲon¯šĒ^Ē~ĸ¨ ū}žŧF~"Īdr°–™ŪŖÛ(†+`3Y]iJÉČâGÂj!V8¤"ĒÍ &iÎŧ`—ąsA=¸7\Ž]o—ŦCtį´Kĩž´Iŋ¤ĘÛQW´u]LûAŽE+Á3/Åī$ŗôUZÂĖaâå›R-\ˇÅ,S—éĘ|F˙ Í(@xënéž)n’üdQq@ųDu[J•úIƒAaõBņ)腛⠀9ˇePՍQ5ėB‘?ŗ;Đlv[‘ ŨšIFË2Š ŽÛ€ÎâšāmJĀOƒ?Ļ(¯‘Ņä|Ŋ†Ūˆ)Ba-ē†nĄ/țų—šBļŌx䧈ķxä›|Œ,"9Ėsæ4ãDOQE\Qú- —)‰Gy¨ąc‡cƒ=ļBķ ƒŲÅM‹U…uėŠļVsÕîÕüj…É˅AŽŅø/<…@ô¤ŸĨ•ât÷%`ëstû”[¯™w1wHö‡ÔĮŠ7Sž4ÚŪ¸ũ_é6˛QÚxú›6A=Đ4pā2ĒI+Q+™NįĐĄt4ž >Ą,t˜qLôŌ4=Ge‘šLģA§Į@ŋįĸ4‡^#“Čz4‚žž€Ã™RōZî&ũėoėč*úJ•ĐŽž„Û Ėy‹x9š/ųI TͯŖ­ ×ŊŅÍķ˜ĻŸE‚ˆ,_„™ÕƒĖØą3ŠGÛĶbb%<00×ōÕtĶIč‚iĐaÛđ @ŠÄ|š‰Ŋöĸw¨ûxœŽŽ&ŽËN?õƒQ>øõAh)ÔB ÕAeA  N9†;˛íŅR tSTĒR”§•?Å˙įb&cgǰ+0ĪNæ*”æŊČÎweēVģ‚#ŖĢöĢŪZļ KmņSd Õ€Y"…|P\ėNHåŅįĖwļ2ŸWÚŋ”§^Šuî%Ņŋs@ƒ Ã¸.@ūŠ Ā­š/āŽ˛ä,9Oįjq<ˇ€ ŽŠŽđНčB¯Đ{t-^‚'āßŌéôš;Ī•rÃđmün"7•Cdôt:mŒāޏŠBX˛|ãPT•ŠĀĖfNsāt7Ę˙€‹ HiBëCu=wŠņb(=C§I.Lq—\$:č´í ßŅ0tx2 î*üØų>~Œ“ņĀASa 3f0m öQ=VĻ;j9;nÛí/ívEŠâš˛šQŠĘD#|°O C¨'õ†ē÷ ĶĄ—žŖŲĖÆÅ ƒšąŌ=€šŅāËŪŅK´h’˛Ū¯u>„iÄ´aēCĮMFMhÚ 8ÃNŌ'øžŽg’ãä>".ŊÄzā.C¯7„û(v({˜u˛1\nž¸X+Z RQ$úAgŅ9ø8.Äį‘)ņWų˛ė)'Ct}ŽfŅĄĖTf-Ķ o†ķŸ%ˇÉAō|[Ū*  ËŸŌzL fķ”J;<Ēļ;ú Üē2X} ¯áʤ‘äžÜ n×ÛP)ĒFË~C[ú@4ƒãĒ UtÄc9™ ģđûú\ūĘdôÆuZĐ~7ÆuņL܆.įZƒž&ŗÉ4…N¨ ũĶPd0 “DDR ZÁLô؍â÷ōQyŠœØŗBox†6Ŗ›čą|XN’W‘d"Ų€×ã xڏö{ AëŅ gkįGw˛˜eąr•r§rĄÔAŠ–(x“ôĩT_ /:Ē;9ZWoXũdØ ¯Ã+E,—ûˆÄŅæšyÜîRųŦ¸ÅŊũ‹Îƒëû r{ ĐáGö÷ö ö#îŠîߎĻ4b6Įm™j8÷ÆćT&VŦĢÂōĀ˙Еt<Ũˆ¸ŒžÅûaž>TIƒh[`ÄÁ Ævôô˜ 9({wúIˆį\Āüî™ҀĶy”Ĩ‚Ępc8ôû7¨Ģ…ņFāxĶX€ôĀ /ÛîŌ†Č ÔØz踲úû^˛„Ļ‚šhHGB@:ŧÔUÚælôʉN*x€?€Ú8‚V˛WØNÜx’ ŋw‰ŊÅgÂ*ĐįØŨč?¤ÁFčŖĮ´0ĮAĀŗ>Péᐠ´k;É_ú 6ËČHīĻCÄÁb)Ŧ #jE IS"…„† Ģ_ŌēäxņsyĻ,Km(…\_˛Ĩ÷Ō-¨Ūθ™|_'-@¯Ã#ƒ– .)>[üŧč%Tuų2EšE•á,q^qžb62w“höˆŦ;ÕÕŲuQ˙[Ÿd¨´3¨mČĘėáŲ2}pĒOĘũå ˛Éėęju4jkĩø`Πڃv ÷€nm‡:”}~ĩ…ķ€ÉõQŲk‚Ë ;ՑƒVD5Š1äËNʤđôx¨˛›Ôąū\úļri]9I†ØŨ1°k°š•ŊŌĸEŠôdį&täOāŸ%€†­]ūIˆ€Ŗ÷ĸķôpÅKS%øæÉ ?rhԞŽ>Å tÎŌMh5¨¨čûXpģf_z'´¸f'ÔWjƒl'ƒæŗĐWt?ž‡Ÿ` áp‘ôU*ĶÛĶaí$uS î2O.û%ļhõvŧ°÷7TŠQŖgt Š ×mM‡Ë-¤>B-ü2PŦ7ÜĪ ø9>Æŧm ÕWöû ô˙įß>Z6(—īé_>~/ßsŋ|t•IåcBų¨-?&Ŋ|ģbųöęōí-åÛ|ų¨/O”†ōącų‚ūīŗŽ—?ëwų8ũKŖI¤x¸aš‚RqŦ7ĩ*˙˂ŗü˜QåĪĒ^>Ž-ÛŅ=ö#ļõÖä9I'1ʧä‡ôTÔ[­IģFáŽčÆîāØ÷@_>ĨķčAˆųzšQ#ŊĘžømŊ}ĐúŠÁ[Ąëۂû7€– ƒkĪ€x€3ljzĸm€/­Ņ]čœp¸1ā/4ßWqí˙‘–oõ_ˇú Æ â"S' ¸7<͐><Â@Ÿ<ę”°ÁQđ#ÃyÎĶLđ'¯@Ŗ–}€/D? Tm=Sū:Ÿ%Rdƒc,Ž*Ä÷4ÄŠĖ6—ūĒôhƒDܛԓ'‰ÉyĢ4÷ev˛7PĖ3Qp†n€]@‡ĄÚAŦĩ ōƒ™˙Ļ]ą?TlY´{—GžkųØ M…h.–w ÖØŗ7bĘ÷{–>åãáōŨ*tĖ.›ė‘ģ PP‹m„Œ Pxʏl{ļ‚k@ÛË÷Ėû_]\Æ‘sō;ôįÃ1ÛĘ+ÖF˲ŋ Â<­LĘShOj€xyÂʝT Qà œ´âvTzDRŲ ĨõŧX™ ø ꗃēŌÃq/ ĀŌNĀõgÔųk y1Ā*Dšë ÛJx~`ų—ô0v$pĖfˆyäˇė5äĪÔŽ 5˙Š.ĻŅ€8TŨ7ērî€Įx˜[0Ŧæ$ėiÕUöęįwā‘0ˆõ,8O2đ¸¸åõ ęũĖÃ1Fā—˜ō­Œš€&’ Ž~Ã|D`Đjč7% áŒ  1Ō]U™žMŌÎ!Ôpm¸~  q(ôp)<ŗĸg”oJ_…ž°žā,;ÔCSĐE¨K Ôv`¤:Đj˜ˇ/ŦŊ”†CA•`ÕWaŋDN€ëĒĀ?žgäĘ~{A„”ŖJŲ÷lÁŨEeZöÎĒ,P12x4¨ųLúöŠ žd* æ÷ ne™: üëĸegvCÎō >— /e wNƒē7@}Ž‚Y–]Åb.Cŋ0g5ätⓉ>„yé‚!ļ[aĻ"\3 x8‘žFQP핈—ŧSœGfĘ&ņ4ŪĘü`ŗĐ,܉ŠkH€ŗ<°Á\Š 6TH*gâËôt‘TŪŗĒĻfSöŠŠ˜m)ځ.€v\ ×õėājģ!Gz`%‚ž}_Ž\pÖih"đ-C]ôė=X{:hŠPy÷i<ėb՗ ˜p‚V‚Čß@í ūĀžŖ€uÕá˜Q¨ŽÁč- ÃTē\ëlˆûO¨ k‡Î­PūēŠ "į‚~ •֐ÎV^We9Ø3ĐÁ|!ĶũĶP­˜¯Μ5ₕÂ="į 59 ÎQÎnxÜWˇBĮ) Y N¯Āžđŋ _eXÖČOW@°Wt&-†ƒžčꂁ3u×ũē&f5j‡Đ/# ŽYĻEx@;+tÄ5ˆõ'Āöčšu€iÍŗl8ĒÖĨƒė?-¯Ģ PcÅ!DÍI0ôßZæę?ĶGĐ VŠęU^úp eŅOڒz’ģâŧä¨ sj qŧ  hÆ@´ƒîÚÎÖ^b¸G@ä"í¨B\õ#Ũ 3‰‡û()=>|û?Lû,,˙ ×Ŗ˙˙˙˙ázT˙˙˙˙˙ĖĖL˙˙˙˙˙™™™˙˙˙˙ff&˙˙˙˙ī(\˙˙˙˙ P˙˙˙˙˙W9T˙˙˙˙leptonica-1.86.0/prog/rock.png000066400000000000000000002442231506303110300161760ustar00rootroot00000000000000‰PNG  IHDR›YkĶŨ›gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœLŊY¯¤×‘-ļVÄūr8cÕŠ™Ŗ$^ŨV`õ“Æa?ûÕ0ėÖÔļ—ũl`Ük_áĸŨív‹­‰)q(ŚĢΔ™ßŽå‡ˆ¤Ô$[ŦĒ“™ßŪąb­‘ü[и°iÕbÛĩj“ŗM‡ž¸Ž0mũĮ8If;3;M€Ė´ÉlÚX‚äŧsf•6B”AÆlVŋAŠ 0gƒ &K !3 ÉQߞIGF‚F§å YĪ^X¨XA5#B€H3HFŌŽ‘ĢƧ˛ņxJ¤@—yGDt@aAŌ@I­‚ĻĘ+c˜&vJŗų.V˜}šŒ°@ō-Fšõš‡’ĀčtPčŲf[kęŅ• . Ū ÖMfėžąB˛B˛† D„čÕiŅmrĐĻ]7 1ĨŅā$ĄŽ,S!QŲčd['tF¯šQ ’ĻėÔ Q(6ÛDĸĢ[öˆĸą3)?EĢH—į=ų Ų§¸Áh– M€\y°ČSbdߎ“[0HĒ“ ƒ€–™Ļ"`ÔFKŗˇ×&ŦĮėĶčkFf Đ4 !2š4‚Ą|MÅ æ-uƒ9ØAõNÁĖ[”ĄŸ +ŗ6;;éØ -ÔÍ `E+ y=:¨Œˆ¨ĘĘJ&õ€ĘŗËŦĪâIFë•Q UT-8É z@‘g¤° ¸¤uT=…!{ŌA…+[Ãē9#`‚ĘcJôĻ`Øl R°ä<“aČ7}éÆšKęŪ}ëÍIʤ0AœúŽBX$G03QĨv]‘ŅĨˆf¤;åÜuRál ĶÕĀŲi˜5ēÂkB`ôáʞDP$mf6.ĻŠÚČ Ē ŧÅ×(DâkYšĒé'•xĨV‹QųŖhŠė`aÁŠ 2…™S’HO4ˆfš‹žcRŸ,ƒR•īŸ„[‹ E§…õ풍ˆčŒę”cĻé¤fG'ëZ¨"Įō‰Y]ÁÎŽęÍÔ'IĮy˜Đš#C-3KĻv z‚fãT,äEÖŖą )XáTDˆ„¨>‰‹Û2Jä-AŲM0.šŒėTDžĮN1ˆ\@Y}´YŌ hF,EFĘeæßŒųæ3ėŅ‹CÕID/ČØ#äÕSę zŸ 3&õn ˜­en6#!E’ŋŒÄ{ŽČGá€sdŽnBĢi|$ķžĨ që˙ՙ\ōākHeҝąÛhŅÆ<Ël–öĀ%Y0ŗŒd4Z–OCd›šG›‡oĨŸH=ą~Ô ¨ uvĨA v:ˆ–au2 Rč’cŠč`PîÜŨœûÜ0Ë(ŖLÁ0ËΟ‚fŊúōĖT"€Ū¨ĪN ĒWqŖƒąīëŅķf6F‡y–čYDČKĐRøŖ› RG‡BĘWSĀ"90T­Jž.JŦ艑# ˜ėŌ¸Ŋ¤Y“$čĢ$XDŌ+ĸUæ–ēĸTģ >'kŽF×ų€TV ܛIō^/4đ,0ķÔĘșÔėî˜ĖģžČރ&˜‡ŊC“F'mžˇ×JūЌ š@C˛œ™“""”Q8- Ur-UßPŊU˛āeC1(hYƒīĖK¤zŗ"üķÖ `Ē64‰s0š‘DqnĒڞįBt(đ­‰­ō˙8Ëâ^$Øˇ°6ÚŲėWļxcĩŊÆŗW/Ntž;“ˇl Tז@O…Į@Ŋ›™™Œ‘+ĶĖ wˆĄŽP†8a=ąQĄ~u؁Žŧôp§š$Α•U€æę™Äfĸ+FŅüTęΜĩ!anĨŦėß 4ÅŧëU*öp œ 4sšpo7dwSy%6WÚĘ:¤Q>8ƒēp•n-åp˙Ī=õ ËŪ›{Vœ0Gf^yųūŖ8Xãzuü@äõúâåš{lqz; ŽĐŋ÷˛oŖĐ#ŊbhDd]šÕCXZŊbøÕįĨ`ĨjÕįëĢ](ĸ?°Ō´ëY“Vést%[‰cČh•Gi ;KĪ:s6u#$DėfU‹’ĄWq'˛YŗdjÜŧ™ÃÍA/ÔķhFę`9ėōŽ¤Îž´ß@؍b[ĨWH€Aėč!F6Ŗ$Ū đ€æOŽÖˇ¯ŽŪŲ]˞ž}zåoŧ˙ŒĶËëūõÚ&t]-ęF˛!U]ÅāSí0ęŲxˋb†2ÄlîBo-aLąÛ]͊d_"ĩAC—BæŌ egéYAŦ'đ @đPqÂÅÜ (ŠĄ2 Ąčh&Sš‹}6@€H35:Íč°pË –ÉF‘•ĒHžäÆķdbąˆOdʘUEqĮÔwĄmĨZ"Û5K6°nŨ!Zp¯uüן=žƒõõ|rũÅÛl÷˙‹˙íÅōęøb÷äā­ÅU”™F]ví v! .Xst˜ŅbVŠNCÚĮ•Âæ€`–ˆzŪí"/x “IŠ!Rī™B’9H%-ķF„°Ōß>Ą•Ī4å=Y6NÅ9ģ •vŽd ŠO0›Œ4F'Ė2ËÄÁĨ‘,î3;›"ŲåšLÅgÁ •”‡˙—ôDöõÂ&ŌsЧą€l°'¯ØÎĪO/Ūę}qûøbaģ{Ū}ˇ=ėĶéŅn7 bD9F:ÚAzŖ3TņŽf āF&]"Ŋ´gƒ(qžûŽ÷‚ėIēZH‚,‘Š‘†m` — šEpTĻMjË2kš•rĸũŠĶ–4D÷’i 0›ŗ™§/ÎĘIgųÃ(O˜bVĀĄ`bb€ ík[æĖ¨.šeC"˙¯Ō‘(Ŋ~Á,qIä çŸķúōøEÃ•ØÖļģ=]-˙b:û˜wÚæČ–ÛTc䨀Hš¤Ibš‹Ö{k’ĨF˜EĶÉrˆ™Qs&Ž´K€šĩ tP°R´Ņ %ŗEÚ°”ūA+ÆÔC}ßĻt}§5HÍy0ԅōœ2Aĸ1ĘՐ ŒĩÖ,3ÍMæy͌%Gį`UmRįČøU¤dŖ*éŦrĻžĒŪ€Ú‚Œ°mY2i)[Mv0I6@ôĪ?šmZė~ttđŲŖ°_/ˇ—ķc{īņ {öN|ōÆ Z„`i—%[$3ôšn vKG‹;f ēÁ]ÖbWëELą‡ĸ Å\dbs!ˆ° ‚´’‚ ÂDu”víōIį%lj°ŊU,ķPÉ;1†âVLaú iČŖr¤Į@NŒDöå8˙.ŊĘaīČ[âûŲ‚lm?Ķ ¤ķßËâniŨÍrÜ SzŪ’l"iO˙YŽÖ/īßyđøųYL˛ˇåuuãæ'7Ž"ĩûô‹$22=xVBS¤k/Ė ‘Ņ7Í–)<˛4ACtKŒP„•ą zšU ãāsM’úœ#dHQ"E ˙…ŦYT] ÖĶ%e‰ęRZÉô™Ÿ <[D–¸ -ÃérĒ!Mß§ī?ûČĄøVÁM[_a[?8šĸô Ō˙‰{ķ4F¤~@÷ôžÅžŊ‚“ŧüį Ÿˇ\,Ū|ˇA­Œk{ö!nčņ­eRŲÆō…×ĮHéĸ.ŧ`fA'bÎ …°É@YöĢB(†ÔИĸD×đ)Ģl#IēĨ  ‹šTSȊŅwÃSĶĒø ĨŦ§ˆĒ!# é‰J¤ę•ūĘؘ”Žį“§[˜âw ų õ{5čĻ“ŖË´ArGŸI‚ĄŌ—ā#ķÖÜiî‘Ã{Î{$UĐœ˜ãū÷vĀ ģŲŽžŲ´0kģWW/oŊ>›/§ŗ…˛ “„Ķ8ęŦŨ,˜SVšŌ >Uc ŊŒŠč(`BgÄ%CąrrÔõČ0zšWŌ?›QYb4‰0ŗAd÷1T┇#ŊúŅ’ÄĘü…”jęÁ‰š˜Åo°!UšČ4'Ŗû~øED#ĘŸ”.Rs‹A—ŌJîŪV‹ftË7\“œô§ŋĻuXŸī}˙›Î#;õ×Oš\Ŋ˙ÉĄđLÛÕĶŊj u3ĻAŠž•Rė€ÉŌq&ŗæŧ9}ŊDŌf­† Æ[fÂüŦOǞŠdļĻ dJNˆU\2š“åā`jX‰Æ T͂UeŠ„Į2Zä˜VŌ îhu}iN!i˜­YÚáŌčü-ISĸP/,)DôRžĪĐJ1Lā˙i2 ͛Oî‹)kŖešK\bÖhŋ}ŧš¯ŧaģ{p GķM´ŖÍųÍF­ŪZ~~}h›ß?:ô3^<ģ2É˙ŦŠ9+–)[‚z´ÖÖ܍yĨčs똟Ķ9īŌ™”h]./ē˛é3ˆ™BPˆ2ļ{ĘÎųP0Kģ&‘ũRĻ™„Y/ãŖYŦßD§9͚sPi† éz †¨ŌVŨŠ ŠŦaФ§bhV˜ ĩÁ(˙Yá673w3w÷fæÖ’ŠO€čķoļØÎ S×Ũ{Ķéë8ŨÜâfÛ~į—_ƒßœŪ°ë8‘nÂ|!jFž|“Y7Ų fpBŒ€ęģ9’.B Ī‘Ų! JZfež°%ÛËÔįDŨ%Ŗ3>mŨ˰äŲS/Î_ōo-O@01„F÷ÍĖĢŋ1č–:¨› É"ņ[$nXŠNfHDÍôĨs}ĒéiÃm*€&ųß~ ŨŲÜŦMĶbZLma–ɍ4Ā_Ė ~0rŊšžX´ļžž<–öO'˙éģW_Ū\ũņŲæŦØDĪi[8aŽJęF¸îp ƚ9Aõ9TاgõHëI— J ËŅØĖļæ \#"ĸg3‚PÎ}ˇeTŲ‘R^ÖčËŗ›O+tu! Ļ^c´Dm—•ÉÆdTВŦ)ÆLu€ķy’DŒ6Aú€"IØō åkëHá˙mN\2Ëŧ5Ļ‘FLÖ|ÖĶO[8ˇģÆŧõgŸíÎŨߜēû¯Ļ7ÎŪ}ûŊO_oŽîÛĸXåŅXō”ŅrŽĀĖĶZMdõaA] Ũ,§ĻKöLŪŧwŒŠ$KõšFš &ŅyÃŗĒ‘(7k‘­eČô5„Ā$/RËj<Ē‘ ›¤9ŨAšt+öט3NLfÂ)AŊŖ{ßw°U>ō\FzΙĮ.düėY#8æŋøN#<Ėøéļ°Ņa°×_úŽNųÔß{ëj}öĮå ÚôâË/ŽOį'ū%žŪ|{“ž^dMĪŖ @23Ęŧ*næŖ§sÄaļS>¤ĩ~Îψˆ°čBâ$šcp‡n^Ĩ=ķEĸngš5‹œŦú‘7ÚrĘYß*Ęe9Ų,~#1žŒ5ČFÂM, H@O°‘MƒP K"&RDĖ`Šį Ŋw%JøNŧûĪ̞ňČD iŪ<ŠVōaŸø´ÚÜģuė:˜ŽdôŖ‹§m{¸~ąģązōŅkõgnÎ%ˇÃ’žl o–šhæysĪžČ0ŧ[’įŒˆ {?Rzˉ§ßĶÍÆGHæU>Æ\n&M$tōŅū}[îYFŧ´Đ°ŋ ¸;ސŒ^ 1sšŠ"3KcC ÉĘeČJ ‰ IRôdŠoë äoH'ŗ˙íĀ˙b¯Ÿ’8ŲūÖ¨m—0›Ãļąl˙Iwyĩ%2Š^3âF’=RëmFôf0˿ґĒbæbÖŨ˜cß=)/åŲKsΆ‚™ÆFyŅ0 $<5äzâTFN–…ĘL†ŽCBƒaĐ6ƒaũi(Ų/:`QŊBĨāX¨­b ˛ŪēĻ@ũįãØĸør”‡tüîė†Û͇@˛—“ŽOÖˇÚワ땟nãj}pyL­<ũÂúu<āe“<žz¸yũ‡ßmn%$p ËnĄhY2ō5IŒ–îEŗ$oŌD‰Čqr#ŲŌÂāFgņÉV<Ô^›GrœÃø€ČQŪQõķ™Ž˛_ŧVžŋ¤|Į_p7JJtčÃcC”Š(ˇĮØžTŊŠ’„ĖC ĸD”oeŋ5ā?SQ‘eŧąhÃqCzūķãyaˆ°Õrõtˇ:ÜŸnį¯O—vųúāÕÚNžĀßûÃsPwV1ë÷˙ī¯_Ü8xŠŨâtL:”ČQÕ´ôŠëË4ęPĶ„H×ˍ°šˆ­ššē¨EûĘ˜3âÉ\ÆŠ”Ĩ iDd%ös+ 6ąõ ŌxaĘŌSēá,bpOîåĐČĸįĨ6ÔĶ.ŪŲÉ$S$R‘ŸŲÔäļƒą;§˛l֛ŸÅé)Ņ3ŌĖ™Sa‰‘Hęā“W“IÆ'oņÆâ`âöčøÄÍødĩšyqĀÍtŲĪî˙:b~ûõąĮÅ˙ū¨cŗ<ģņätsĐōŌį æ¨\ēp#hBĖI¸‘ ƒMÔnVÔQQŌŦ€žm˛FžëšKû/A!čäNŅŌžbœ’4V”Ij°”â2OõĖÜZõĘyš&IRL‚)™2šé*ë{†!——$˙Y“Z¨RWhŗîũoŌAė“`ŌAÉR&ī ƒĩã/ˇ$Č>éđÖíĮˇÛęZ›“ĀúëëåĶr7ķĸŋƒ'¸žxžÜųæ ևۋë/ũę8Í"š‘ėāÂPČÕBŠę2WlRcW‡ŖXĸT’237ÁœĻÖ–'H3Xˆd˘ÅaŲšF2Šān~hû41 yđæîÍÍŊšš‡šū(Gë- †ŖVG¤æ‹rWĄÆ‚€tߕJzY.ĪA4 IDAT Ŋ'úŖ‚‹y F‘ǞƒAGÃû(..Ļë“û§ļ<_Žļsŋž6~įōũŦ4oįé\o|ņęûī΋~īÅSL¯ūų“›E´dz …˛G@WO+oŽ8—/*¯›ú6'?žũlč$j6.Dš'Po įC†č<Į“MËr…ŌĘsSÄ1ŌDē;Yŗ4ZsĘ ‚5"BĄ0ˇ” ‹7Ë&3ĢûĖŗW¤X7¨ĐúÍų6Ņ3(Ķ´Vũך#)Fƒ8Đ}a‡´ĮCŅūųˇ“I;ķ~īđpŅĐ'Ė>9ŲđčŅęÖâĨˇE{Ŋ:9øüåŅ›ëõõ|˙ˋ‹×įOßūS;ēŌBĸQ=s RʑqîAœ)Ë  Ĩj .„5–VÁaîÉŌĘ,™1€9tX2]€čŦ~$Ke7d;‰l°Č*žf.Ļ÷Ø8MÍá ÉŅįWi0SO{…Ф}6oV–Ž$¸9ŗĘü6–šUb3 —¨Hswķŋ"ũ˙VTōŠūNvŒ}î0-ҧŨƒíAŋn3–ŨšŪŲ]ˇÕNÛCíVúėéōė°éōäÆqøāúŖŖédûüÂ#šÖ#"XyWØ÷äųŒbĖaŅ8÷œ˜īŠæļle?bÚõP̈́æīËũ •ܰA4Ų˛„R$4x@KŨ31=ņéŋVäT‘›!`F)}‘ËtĒ÷Ŧvs„…B{ÔļO€9_°g +‚ „˙t߆jdÛb”l`†˙꩙L[øö°]Ģ5ī}ÃÅná~ĩžqöøÅņå|9…Ž/nô—_mī=}˛{ûß˙Ãų÷^Ūĸ6' Ëų??×åĒ‚hA8Õ;áÆĐ„wR=„>¸ûÅLŊĸrc Ē+Ō‚íEnĄ@DæĮÄLžũC4%?–>ņD”šĀš›91Ũ&Ę1+’ 8AŠ÷1Ϛg–”CŨ›ęSjn[ƒ¸, ŸĘ[´aD‰Ņũ'¤j †qTÍ ’¯ūîښú|ōŊŗ×ÛG¯v XtŋŒõõÉŽĪîüĶĨ-¯ÖąY-ūĐįkŗœ>ÅæÎųĢŗÅQ{ÛĪąô´Bå~FFp4ÎŅX623Ē“nP¸o%zn ØWTYPáhŠžũ7ĸĢ—ķČ"™ļ¨ LĻĘi0˜!G ‡ĪĻüy2¨Aˆ’ŠCģ€aîÉ9&Ž3Öô}ls‹^†)kõ`ņ TbäŌ¨TôZ¤:„@Á¤•1˙a4c#äŠZҘקæXÆ9ŅÉÅĮ¯€`ãÛīŽ¸më›O.鎘WW¯Üđūņ_ŪũęčôųōΟŧúüîŧüŅ–ß˙rz.<ēqzĻÕ|ž´€å;*Tb°šü–M.kšS„ąWĩûŅX~Ē”Uŗ! D l‡Q ÂôJ‡IĀÂ{‰Ču<(/’rϐc=˜>Nfë–ļé`ŧ õ˜B†˛ƒ]–mÁh93ee+—†e„˜k§ MSÃ6•čt܌L‡ˆTb“ÁŖ"-€˜‹Z ­]ÎÁˆYK{šÁķW§gØíÔÚ‡[ßü÷úõ×G?Ú]ü%ôsLGĮ?žķԗOqŖÎ~újļ]ī=bsA Á-W ÖÕĖ ūܯá9X–}x’ëÕ5ĮāŗĒēĸ÷č1‡""ÜāϘ‡qMIåđÄjF9&ϐ$„ĒM4˜ęÅįšGôyŪĖsäžÉŧsô(†ßˆ˜{ŸŖē­|ëšE$:$DÎÁ”! ęy17c[$Ũ=ĨmĀr-֞Oãāũ*¯™ōėü2&ęß<;ŋzôü“‡§Î-|ÚĐgo˙ŪÃG÷æxļ[KíęūļĪ_oĪCĶ÷æĢųųŊ•c9­×Ö_īÜøâÃĪ_]>šTíŧbî”æęā%]æ`šu‚ßÄĩ^,ËiÎzfšQN(įŗ…°\#7EöHėË”Ir!$s´ʞĄĻå ŅPFWÔfÃ{˜WÕč=w“öÁ Ņrģ ŲÜRdWôÂIžŽ&PŨŗ0HË4đZŠŖĩŧŽ•¸ZÉHR#´ŅĖÖŦw×ē{†į×qᏅl’#Žßi˙ߑ_ļ¯ũpëūŪųßl›Į;wOÚųƒÅkL\b^ĩá­¯>ĒĮāT QčŊBƒJGQqÂãQīOd,8ɡlZ‹¤Ėg I9ŽėHkî.¸sđQŦfŪķĨûŦT”\ÃĻčŅ{Ž. 2Å DŸį`–jĐ ųTŅûŧ=rûqß7ɒĢ“'F°•|7ėPōŸĻaH&ģĘ!M¤qúøw>ÅŦãīŊņúŅ‹iq¸ŒyÍm°9A´ë‡ËO§ˇŸúją[lĻ͝7ˇūq}Į__˙î{ß|īÆÅjÛxŪ¯_Ŋ^ßÂúÎnž-Łtx†×a.ļŦ•fLÚÆ5Šk&Č­Ļ9õĖTkRyË](‰:moDG“UFļ ŖdņËĩX@T§,Hßž€ä’â29Ÿ3÷‹ąŒŠ˜cråoM=Hĩĩ9ŅōXWĪ{°&Ő„˙dŒ|¨š_ÎD§oū××X`níÆá´Æ—ũÖÍŨv}js'trņÁvãˇŸŸ`Õ}skûđäčņģ×ôžēŗļķƒÍõúņ9žZŧ9ûįv˜ÚÁxZ6dK‡´ÄdC(R]5wĢĘFZO&cPM,k Å2fōj2Ǖɿ0ËôhDŊ&zæžÛâÖ^xIM!rÃËäO‡dÆj.Ŗís„H *=V„’÷ŖU‰7åHz…!Á†ŊM*áEēYŖ† ØÚG?uŌx|zūęôęâä¨÷Å› ëØ> \4-ą€Å Žn|§Ëoß<ÄæālúüėčŲõÉâŅû÷ÎvˇOÍ˧„c s¯4Gc+á}øpÔå+YbBādBU…|¤ÆüS†|aœ A°@ÖŅēŖN¤ZîÚķË6˜úŊĻ\d^ļ'FÂBÖŧ‚0í ąŦÖiÜķ\č•ģ ‹āOm.oŠĀBø/’Mt†ũ‡XÛ7ÚŋŌdøÉÕųéčūúÉĢļŽIkœ/ŽŲ˙tš\~ĶOĩ˜lwÜ_­/Î/o]õb7Ûęd§[öāŪų×ë{Įyr ģ<æęâÃ>™h°fMp’FŸrŦŅä.ØĘŠL1å ÉļŪÍĨČŲ˙qṸd9_=……¨e˛B§!G$†n“…ÖrW°˛qĐôcØšF ä­™:ôÉ=ē„ĐÆąˆ>œŲ1‘´()×hʗO~ĮĀ˙;”¯°klš`j É­æŠ˙ōĩ¸ŽĻ-îĩWĶíŨÁÉ7vĒY ~ļ›bÛ/g6]/ąœmąüøųõ'vÖ>šæÕjūáûí]Ü8ūĩn-đŲ?-ž7}ø}û/ß|kÖ|r2(iÍ'ÂĖķĻĀ@s!§9$D—Õ{&ްĢŠlĘkõ~kS –Væ~O€ĖQÍ´ōUŧŠŽ& “ũ˛1fŒ4¯iŽī- ĮwdéQŅ™[Ë2’šN&ĩũÔF:C*ĸĀ˙û!]g”~!Öß3÷‘ÄÁ¯.ˆšøŲOˇ đōîJĻ‹‹Gg Ŋí^?ŊÂŧžxÆÃŲĻįģU\Ÿī>bŧęwîė>{û´ųŨįīŸ>8X}Î{Xũö>zqûîå|ē^úØgMˉ§U‹tL:I“ĨT™ĻŸ0Ї'8ÅēėŽōŋķ ?¤ęėYVžtūîĒ8å@ Ā^Ī'Yˊ•Œ‡\f愨Q‹’„Ã[[Nđ\Á›ôæØ?ÚŖâûÎüV?ëœ˙"y‹Ę‘ÃŊPŸt8‰ GĪ?ö%ä7îŧ>žˇX-–—Ģ{ß˧‡ķîWWŽõڗ_üiŊĮŖ/ėoڋ ít÷Æ^ÛņæúėøÉŊõvļ[˙ŒˇûvŊkļēûŲĢ'ZŪ<Ų\úÁ–žĘŲ’dīÛD´æi–™MiEú)jÄ"õ°č R‚6*× '?›ę[€2Ī•Vƒi¤Đ3ŊŗU–|ƒÎ\"ûPPĘn‘S š‚–đ–‰ézīuŧ!Ō˙S{Ũ#—v–âAĐa•FM„ö”@˙9­Ėm…mJÅÉ&9Á ŧõ›ķpųú֙âd}đø˛ß|đõõ÷Ÿ^Cëõj:p<~č8¸ûüúđōÅíļĐÁŗW‹7vôŧûųú~Ŧ´š¯Îž}vüģ/īn˙áÖíõęŖ]~vôÁųÉs.— ƒáÍŧ9­Mîîf"ŊyDKå"!^&3‰ĸĶŠ„ãP-ų¤9ĖŨ¨čšÉžn˛ ͙ĻK’UFqRöģƒVÎ[́ƭ7!Ų<Æ[R§™"ō›yЉ†”Ģäk‚ û€)tžaCđ_”ģģ€ ˆMJ#›WbõûĮ‹YÆĢ“î¯ôwŸÛúƝß,žxqũâĪZÛ´ļşŦ]Ŋ4<ūāÖëü5Ž._œŪ˙ôâĪVŸũ`ŊŲ-f=ųæâŲũÃŗĢŗéāÅÃåÉ[Ÿ=ÚAøĪ‹aŋÍ*š9ž›¨Ļp.˙Õåŧk˜ėEû~Ûá¨ßüæų'˙öÍwî}ōøŪjRLĪžÆÕų ¯Ž×öÎ×ļā >ãõ[ķ‡īžĖOŦίכë[ĶĢįũāŲéųÉęãë›7?9ŋx˛|ķÆöWŸ9ĸžËČ­Yķ…OSkfRöūA¤ˇĸ–PpZíÅH™"ˇôf\%'#ä—`VšŠå\8ŗåFIΕ–ĒÁ¨ŊÅõkéĀI5†­%šŪyŽ‚@ũˆ'¨5Ą™’čŽ%Ū1ž¤(×àđŸBŒä)ę}P’-Fc{ņ¯wŗMŊëâđ­•ÅŲ[ĢģO˙ņ×Ģ['7>ŨŨZxßüú%ŪŌųÜĻ‹wžúđŊiûü“Ë=Ÿî~9ëđbņÖÃ/oúøäŽ}m‚ģ͜l6§{ŗ1kĀĸeĐaééĖč}—ū( A•p¨Æ•TJŲ8)„Yš8t+ãÔ¯ĸîÔ.žŽbĮ$JfSËžÉ ÖŌiZ됤é ž=˙Lj5Eų<ö×"üžãoŲ•E ˛ äô藱d`įwŪėôŋūũŋ\ۜÖßßŊX­°Û­N?ōŖĢ̈́xëäėšn~Đ˙ō‡/OŽú?žlßä/_Ūēw~īŪß.ŽÎņęōėŪ׏7]áíōŗņæj§UŸœõÍK™NĮW$Ĩ"ÍFåKĒ €‘n!'ĶRŧeēDĸ×b…$K3ēhšŽōiՀĸŲø‰lĒr{|J–H7L‘„="(Ģe’D%­V´¤8L§CNāÖwŨ@(Ē},}„$øĪkˆŖFm ,1BŌōßūƒ/bwŌŽõŪ[xš~v˙ęOĢE;:ŠžēąŲpk¸yūÅÕlģxû‡ļųŨæüŪ­ŖOû_ŊŧÅ7—ĪņW/ßú&';_īŧÅF/_Ũ<^~(ØlkÛnŧsķņt ë5åd.ē34 ‚‘$<îÍķĖ„} ml´id9ëÖÅō§\*&,ˇ)ˆg*°Drė°OâWTV†ŦÉ ƒFÎųģģ7&Ëōĩ¯Å¤^ŲO‘3%‘_b”š^ÎĪU*PGÁ^-v!áÁo 9 đoūh˛Xß‚īŊsŨŽ^=úëųö7Ģc\ÛéŅ5]ĶâÍ?Ŋn]|ëß]Ŋ˙õĢ/Ü;ūŨņžūâæę“ũÅWŸžŋĄãžCŸÖúrûüųƒåãŨ¸nŅ8Įtkĩđvu$"ē`tF:´lfŒfŦt_‹% ,•=0õE¨˛Î=ĢÉīîWͤ•¤—ž˛:åÃŪĶjĩĻR¨‘ĒņE+7’%öåe"¨/Z,ÜUn•ī¸ŋPŽREN‚S˙ųāgō…Qŋd,\rr—˙ķËfx×q˙Ų|øõ§‹ŗÕô€‹I ‘šŧõÕŲf@oŧšúŨ×°oî\ŋu˙ŲéēĪaß?šũۃ‹‡įo,ēļKn^ļ¯ŋ\Ŋ‰?M}žú5¯WwĶb'—BÉË “§ųۈh>YC)e'ĨkĄČ\“žão×-ŗ¤cfQŲLĩdĨ¸`å>ũ}NĪLãĄ˛­åĨČę_š0žjĸÄäQŠŊP™`šŽũŠĄB`Ī›%xöˆ4­Ģ„˙Ć)k"Fjŗ @Á6˙įķEkčģÃĶ;[ë§Ø|ōĢŋyv?ާ6/1ÁļwúCluûŊķ_]›Īt÷æōõ ËŪo,N?ÛŊsįîoˇŦm–mj_ô/˙ÅŅ'¯Ų õÆ8"ÁHzÎpd×dԞvÂĘ˙ qZēĘö™_ŠÖjĻŨ9Ė$ˆPīlE­x^ņ\ęYUÂö=O9Ŧĸ7BIūķmØl'÷Wļ­üŋÅG˙ēĪhŨV'īÜXl^Î÷ĄZģÛũ„mģ]/ ŊĶŽ^ŋ÷Ųkāčíë+†m­îją›ŽÛeī›ÕĶŖË“Õ¯¯Î3——ËÃ/ŸŊõb÷/ŸēŨŦI¯xžĐéjŠ]ƒrK9‘,f(ĸGû§÷īŪ^ļˆâΈœČËo Ņyãų?=ųŪ÷?ŋø3ôååæÖŖßÜŧķá;ūŅörÁ˜ WķÁåæūą3hÍh†f"-z(4‡?˙åųüæ´ôKō‹U čĒgē Ô>¸ũB*ŠųH/ŋ7Ķ,ƒĀČ2Û@éȅRąؘ`¸—Ō‘ÔŒÆæeõs—bD(ˇÛ>ÔƒŦ(õĨ<É큞v!¨üë4Ę–úĮ^¨¨ašh Š]˙XöE„­Ök{€võņW3l}übuzĶē_éŨ'M‡÷ŪËË;oŦīü՛ß;ģuûööīû]ų4}vũ†úÁâĪž¸˙Ūī.ĻÍôųōø7įyī~tžÁzëÄÕõŦ—ĮˇÛj™û;ĶSlšCķ¯˙§Ī—Gļ=æâÕ¤˛‡Ö*…–sh"æž2K|‹yĀZØKå,•wôh…ŗĻČ+ŨįWt¨ĖG*úΑyĪtāē'ėÎ[Ōû0 åˆ}Rļ’Ļ ›ŽúRĄäŊ3W&P%˙IĻcZÃáh#XB0—ü/“i~yØŽØîh}üđ—/ÜķÛ§×ËãÃŎj+öļĩõs{xôc[ÆŗõŨ~ü/Ú7Ow‹SŽ6Ÿ<áęöķ/ôÃ˙¯æûMëĪ?úŅ­ßĮ_ŊõęĶj w}^ŪjˇŊMÄĨO‚I2ėfôŪ{ø˙ķobyöŖËg:]wFnĖ/ŲËÆ2 _Ŋ×cНŪ7yžš%‡zi¤æáļÍo?N(Ė$ķ+Ŋ$æ.ž&oĩŧĨĸÁqjwÁڟP„(ę+a¤č(Ķ>:žē;ǚ"`ūĶę7÷Ō'‡Ķ ˙a$ÛĮ˙`ׯãhŠéÁdˇVö‡_Ŗ/l‹?ŋ1/žR›æĢizÕn>ëGūöĄŸ-ūŽŪėG¯$ģ;KDÜå[sĪd˛HÖÚĢHÆ~0`{ÂXjÉęØ00Đ˙8†mĀ€ÛŖ–Zę.Šk¯b‘ŝLæžßv—ˆsüpâ&ÛŽČ*2™Éŧq#âœßv.×Ēéčⴞ؝ihvëĶĒ×É(ĩGî,Îaë÷ŗQĒ~Ö~7‘†; ŪũņOūĢšXö”'KKIŊ@’§/úōĻú7ë¯7Gĸ"jė1ø?Ė^€ Ãp”SŌ[Ô p( بũŦķ¤[0-ŋĻ8ĀķVB™˜Âf(áĀ-˜u…!1dĩN%Ņđr†kģd•ŗ-šŠ(‘ã[j`čG•˙. o9lû€|°åîá7ßĩk˜ÔĸõÜáA “ĒĐH*RíŒŧƒb­M_"ôąÜ]ÖĶM¨ęW{Ջ‹?]ábõ đöd’NŽ.öVü°=M>ûîāøtŒįˆņ!xÕ^˜ĪššRĻ“˜kĢ>JŒqņÛĻ`lĩŪ[ķČõšG+Š’îÖˇ*k†ŒuVŧŊ‡”˛ŦJ͇÷0ē-˙“ģsŪXÎŧ%ÖrDybķt%ãˆŦÎHFdK%°Ã,T 1ĪĖ@DrdYĪųą̈́üwF„ä¤ÁĄ7*m+Iē˙ã͚§DÆwF}údī ŊĨŤöEŠ‘'ŋh /ÛŊöۅ­9<ÛOēo‰4TsÍĪF;{˙¸ŗŧ;ŅÖŋøķ›ī~ũëkĮ¸ŋē˙ áäWÍH˜ C¯¤1ĨžīeõģÎAQ/?˜VXHҁĒjJšąŨāĖį `ęP[r€ĸâĖlâû!Ãˇĸ[Ė-Ēbū7÷I9BĐLŽÉ;T4(VŽŒ3ldÔ^Ž…ã ˇD&vš™Ę~š|Eōß įd$#Ҏĸ}E\ūoWUåcę™w Ũ¤xlVĶŨ:„M7Å6Äå„$¸EÍ;pŧw¸žŸ…ķŨ4rhīnNél-ŌáöhŖúėįOå0Ņ3ER–ø¤žĘY ķĢ—įo\°P|ĨĮ—aįå{ŗX;)R‡šĸī:b`.ŠōķvŽũ.e1ÍáÚ`(Ĩ<Ú%rŌwtŖ€d_wn4s,m.č€]Ájå\öCÎÖCbfdOƒÖ›ĐÕ #A2ō‰Ø™ÄĀBXōq Č˙)ŸÃjr„ŧ0Ų-a({ōĢā1‰ĀÎæõxęOŠĖĄ‚kÕŲx\ƒÃŽáŧŸöÁģęëĶŊÔŧ=¨Úëdˇ8ā7ŨÜw‘k†ŨÍâ˙ųõĢÃĘUũņr6ūü'—ŗgc†¤íîÁųÕøN:Ų)¤wĒú6;õ*ąˆˆBüf‰ Ũæę^(z,p-9iÍūšƒės†ŗˇ Ü2€ū€ĢąÅ&N‚M!ƒAķ”1uˆĨ´YæÔ į‘ÛKÚd9ĸ¨(ĸ ’eŅhž dĻŦ_‡ÉrUt?ũ§ŽˆîãĸŪēŸŋíiOÅ[7G&ā¨IOĐ#WŸiË1Žh(û-Äß=IM1ĩvÛįą –9`ēÎ{ģzT’&5ŋÖĀ˙ÃĐ #€ž› Hˇkir%"MöK˜u‡Dčœ ØđąđQ†lĖEvÎeáŦŅd&FíZļŒ‰ ,zA$‹P’‰ō-zY áôãéîŸ=¨ÎގËŨî1čFYۛ‡¯ŽoHH‘ļéģoĪĪÛN×7ļđÚÜČ$vÅsūxēĢo¯vˇOB:Ē=Å>ϤÍ&Î.Oĸš§­&žž^C‚F8ę5āĢë“Fy ĐĮ5dčŨEł¯ėH"D ‡Ér^CÉ4ŠDąAčĒHÄÁ‘ĸÅl)*$ˆ2˜4×fÖWä“ŅÂQ˛—0ITՔlz4"ąķšÚTÕŖ í@VÖŋãc‘ˆ/uė,LˆųՁõQÕ!ļQ!¨Ē ĀĪ#(UûÅg§ã :ĒYŋß<¨gqsUm‰~ŸÎū$đVŧYWŗ;ž;÷*畞r’é2•o´l!N—žZûŖ"îĘrĸT˙ægũ×ėĻ›@ŋ};ۚQīJÖ1<ĸ:ģÕ7ŋâŲŋžģŪû¤Aã|žŽ1PM Čļ%Ė0d2L:™Ōāę"ĩ3."Ēĸ˜ė<Īw­oõĮš1ĘG?ØŲϐĩĎq+m…6110ĘĄlĀ’ˆˆĸ6;ƒōM–™s*Ģ)Ā Eū_2, Y?e×čļ‹*ĸûô $ÂÚwËō~ŲCy÷xsOˇSÛĻ-—!ŦhVø"ę˛tá™]]´uW ā6"ŦwS™NvŽģBį1Ä´ûčōƒßˆ)eē÷Í´.æũē›Ū}Ûī§U˜¸.ŒũĶŗ­‹ÔSŠŸŊ ũmP× 5&x[Yfų…ØEiė¯ũžRš1É4ĒhRI–šÄÁ—lBŠŦ‚ÁAķ̍¨CŦ‘ķnŠŒ€lpsJš[1a@ŽË3ŠƒxQ5W&åÍ(ˇ"(đ˙Ŧ™P˞5ĖĖO>Îõ˙yÉǤGīC3Ļq[sŧ>ŋ×u/ʙ[8֕Ž01J‡ Úw7/xį}†4-­įølZŌ;īXͧ/ÜüN§¸u™Ųąˆ:i]ÃÃöøyjWNËקŞ:ŧz†L ŠZŪūĻ=ųvy´ĶâĒ}ŌÜŠWތTô0Ų}J[/5$rnöG‡įiv]Ŧ|Gˇ5Ĩf$@MK€Ē9ŨåfDa Ĩ ›Ē$i zČ?Ú|–ÜŽ‚æ°(4ĸ`āĘÔ _ÅØâ0Y5„HY jW‘Øm—Y6tÚ4 bΔ<2K5ņ/íoŦŲÆžĩ÷×ä"ūų„Ŧ –°ž3ŋ ۗ”|ŸđŠÛ™„ņ[šĒG)6; šŒ_kq&ę įÖk–˛÷]píôņÁ÷čb‹æÅå´ŋ:Øšk@@lΗ—Ŋ6úödķjųú×gũŪ,‰ī{°Ũ9Ņúæī-ŌęâđŪķčcBMTU3U€q¤Ē9@M Ũ û5o !h2"8)Ę GS@‹<‚A˙ˇš2¤.Į~Zæ2gL‡•HEEeāҐ!‰Maar;Ģû)Y%cąa`Æ;PūåpøŨîæĶɄĄĸûü™ŗ QÂŧ9b—Ō­åŊÂãžœ9\ԞQĘ^Ģ䪐ß˙x÷IŌŖIčŨ“É$UŌąPĒ’×Éōô:ö—“ōt>;Oa‹O~zwÜļ}¤t{Û]įn^Nž}į>ÚŪ-hĶÕž’jīéœ?kD(“#ŽĖNŖjŽtkpXRōŲoēŧbyd”3^G9Ī 8sÎBLÅrE!áģŽ0Ÿƒ†dĸ —”bÖ&¨ ĒĨ ¨ü×C „ǤÅbbC îÍ7vŽ"čūØŊ:œ¯ŧt~[īNίī0AY`ßn¯ŋŸ‘‡"–]S;x;vxå~ü´ŸÎ\W œĖÚj{ųR`kûdžž1GdįcęĮ÷w¯–PØÜã3ŨÛúîd´5Ĩ›ĢßŋØLĩw SÚúh˙Ŋ‰?‡öõfōdZô"}í¨÷‹™•ŦĒ*š$ģ?LŦdšīĄ  ,>xß ƒf0, ftĶöžcSMK sÉmÃÉŧЎœ˜Eá ;4A5Κ…ŦSHųîį_äę$‹ĩô6Ō-7[€čēßBbņĀīīļđjrĐõÛu;’XŽg?::{Ė“=—í„ D-ü‹Ģí5ëÎŨĪļŨÍ&¤šMĒáڍß\šãĒßéË$u !%Ļ—oîēbkīĢÍdôäÕ5ž?ŋŠ[Uũ$Œ´iũ ũŊÕŋüü~ZT‹GŗÅz'ÅU5Ŗ%Oē„‚H(”såíÛĩ9ט…‡dÁö( Úxø.s‹b…ƒÍĄČ‡Û€ŅßF X€šPEAm,Ÿ"* p4022ĸ].¯Ōšã€ašĀÆ3E ūE.”!3ІÃŲũg§`ûO!bG?Ų+&OŸũˆ97ZК0Ŋ˙ãøŲŖũ1_î”NRÅ ũVĮNIÂÎjöŪŖã*mŅ‚Qlå|žû}*ßŖĮGÄ2kF&Nˆ\Ėq'„ož§ŅwoeėũŨŦĮaĢP zÄņ2Âī.æGÕˇŗfą;GtÍ+ęļ6iG;Žŗ"Ũj4‹>EB6¯ €ˆĘ9bŖT2† ųˇ0)Š3[™+„\­å›H 0å‹G )YÄæ}ˆÄŽōŧK"•\+Øü8ĘÆ AÉ×˙5ūĨļ99ë Ũg7€¨šRqoÚĐų›OB€UĀĩĄu›ņû;Īúú‡ąwŠ[ ¤qAˆUąx~XŲûǏĶxnÆ='tŠ{ú‚|øü|ĢīuFā[!i˛ĩŲĐß/đí2‚?áH/×õŒ\DfÅžßšÉŗ­å¤‡ŸlÅ(4jžķoŠŽ(ĘÆ\ūyĸšŧcĸĖ)“ĩ-šcšATÅVM3˙l[Č(RDģTrKd…×Ā֛|Ān&fĮvBæp(ՄŲ÷MšÍÔŒ‘ˇ 3įe"ʃáŲĒEūëÛŲG4Ôųzŗ4Äâë—H)R+aļ“|ßŧWyS‚Ŧ×UŸtivÜŧsUŧũČß\ĖņzėÔŋŧÜ…‹“ĶB‰åŗ“-ךÖe Ą Ĩ훟oí?õ¯—Į;ЁˆŠšCņģVAĩŅŲŪ÷û[—#îY=†+ņŠŽīîŊxûj"Ôų›ilëtđņâË÷ĀA‹ƒķØđŒŌd^ĀĒ‘[?%Ā-x†ŲãaãV`8Đ)— ô˙ûyļ<  09šÕ9T!Éˏ„˜l/! $“ōæJ‘‡$Ũ|ĶšŊ˜ų—ĻØˇõ*:OWąęŋ~ė0aėŅtģxÛß+T›ž˙¸õlLžĀTߊv'ÁĪˇŽŽ‹rãĢú'ģUđ¯šųtSÄôâCîû‰ã:J­2—{ūôaw~uwŒ>Ē‹.%r2áģįW´ĩuōۃžoîžžDæRĸ”[n‹jųâ|ų`.ŽöĮ>ĖËrzōģíŠo%3xŒŠŲ ‚šŧŧ:fŋ°ĩĘō&¸Ã2Õ\æ}ëgĘ5Zöđ°ķžąœ@Š× ‘̉˛Ääé)Ē°¨4qÄÎ"Ō­Wr똈ŅņBļ]iKa+MLd1ĸDäŋû&įÚrV=Ŗ”hŅīUĪÆ[Ņ'Ÿq LnÄ\Ōčõ›÷ÛÕ4¸ƒķyŗvâw{Lč/úŅÆŠˆir^Ÿ]ßt “ 2°ttãĘvãχŨÍžģ9:¤×‡ēĒ"×>Íú•8rĀũöáē=<Ū˙öéîČq„ļûÉÉ÷{ĩä–Š”œ?)͓ŖY,ƒxKėJÖæ Í7܎æË-Ÿ‰pqPV"Â` ÉÍ ;‹J eEИ@5ZŊjÎøŦ.1š`N2'ķ p~ūŽcOō/ķö`sĩäíE8 ˆˆÂÛO‘DÉĢėg÷§Žčõíh˛ūâ“Qd!Š]5^VuĢrų͎™ ē~CÎ}~p4i•ĄĐGw›Š/Ņ—~yqvõgoåât4Fp Øč8rū?~Ņ{ģ5ĘŲn{ą%ä5\-ļ4¤ä]ŨģJ3Ŋû"îuZÄFëŖOKíāVšĻiP ģĖAĔ1šegà •[Č*REDA%RS°‰Yėä‹+oEĖX5Ø$?ņh_­F ‹l͈8 ˆ€˜’$Ã<ÁˆČŪ,Ȏų?ܞbĒZMˆ4TķH€¸ū ŖbŖÎī6×WĨĻ ëõȡŋ›î%Uŧxx]"đ.u!,ŋꏜúęlũhBœŦ|ËÕųČ7Ž"Œn:Ÿduzˇ8ĨæMŊԉī˜ŲwĨC)IüŗMÂé_ŸßŧņŖ&¸8V’X°Dę늏ŋˆôvCØ|Ļ:gŽßĻßFœģN4)¨]a8H¤su‡æG×dbGA@Õt ĢÚ0Dē&6ŠĀ˛Ë1 “#fBbrމŠ9ÖÕnž,u |¤Ē Š×ŋN@Đw>¸ũ›Ķø‰w*ąÄךŊy{Įž1}ą GQĮXŽžÚ:RN¨˙\=Û?ģ“š×ÛKröÉ &l]ąi¯ē¸žŋōÛr\Ÿ;ŪOV!”}wØ>kwJūũÖņ[?R*Ŗ) …q??Úü*ø~ãĩ"ČûJÚä•A[P4”™2“9˜„,¨5JÔ@7 ,îŸÛáļē°¯0Dđäë #ˆ.€šōĻŅL™‚A2ÁgPۀfŸ*1ŠÉ€ ųoMŲ€8”0hL4qå×Ę ”&}QÅiÁŸL}yĒ%UXĮĨôs=Ptāî9íŧ_~:vē.Â÷Ī>ĄX¸D#lĸ÷ĐTŦŽ›íÆ¯zšŗ{pÅ5ô‰[I”˛ĮķÍîøjQģ̓yĶŠ÷АčQœÉ:›Ë™Æ3*˜SMÛËf*1ې4Gƒë4ECŊ…x+ßĖÍ끨fg– Úré|+VĪ%6"k „:4& I’˜MnK 2°lĐ!Â0„!/uFĐ!;Û˛Ÿ]‘ˆ˙v`isՒ™\o(Ēüí§€Ž‡RK(Æ×ãŊĻ—H„Åčŗõņõ¨÷ĘHTtŒŊ â†ęj ÔA7=÷oŪ¸ŅōŲĶž”ĸŒ6 ĪĮēķ—á둆.ŽŽŽˇˇ×‰;ÕQ%$N0ëī§'/čOļΊŖjá¸äV“:HĸĄ[uĮ|u}y€EOŨ•Ÿŧ¤-iĪ,OM¤:ĀꆝŲX–q˜\ÛũCų ‚AŸn!ĮĢ<ĀÁ0jА^ĖÅ5l%Õd5 "[Ucë’å˛ž4ėsđ/i.,Qlŋd­€!lĢI БÛ[—ŊÛé%öåũđpZË Ē@ī‹Íē /а)Ü 0†>6¸ŋžŽNŽļĄwyY`JHÃÅŋ|t%€q–öÚôā|’T¤ÍÉĪžwí—÷̏’ĘõúŪŪË4n Čw4÷ˇƒ€pĐą‡i=ųpÉg¯`Æŗ3XcGf|ڞĄæ‘Ŧ6UĪŦFæÅ<ÔDĨ–j`'!ŧshvĢ'‹ė@M*I’åĩ€€ō$$Dĩ9 "IdÚØÄÅo#i"QŽŖYķd˛3I0îŸN=Ö/ŪT3ĒúŪõ\[*—Z6ēŠÕKQ_îė~59hĘWpŋåX}ŗå¤KŒ/ž>˜?{؋0ēŊrLkEĀTbh)•ō¤žsđâ¤Ūmš9ŨuYâÆŖ(`üÔíûŊĪžĪwš“‘; :Ú|>Ģ-‡āļZqfīG›‡%°Įmf ÍJĖ¨åˇÕ,:d–ƒ`ō•œÁOģHŗ­SUÁdÍŽ%Ĩ(jĪ2•jē\´(3¨JJ)Æcū% LĄŖ55–AĨ@×˙ԀÁƒÚŪ™×ßéŪ‰›ŗ‰KîƒûęcŪ;ę{S‰— üupR÷ķ‡Įķīf,æ˙ēī üŋŋ8ß =ņEģÃŋ^OnRģž>čŧĢ{•‘Á§žÖãĶ;ŗ‚ߊû0in&ŧŦPúÎ3ąDĻoÎîßÁ맗pįbâÃNÛĩķõn™:“-ËmĪ˙Žįˇš9ķoų˙ķÕ=pr&ŦLˆ¨LjŖ§•3vŖ:(ē2ņô¯ÕIôâ:nĪës7:M÷#3¸ķ‘OÎ']BĨ”&› X´Đ”Z›đÅO.?]ļ{ú–vÜY'ˆ7¯Î…ę`zéš?8ÛŸKåëM¤Đ °PÛ÷Ķuō‡oÎövĩÁ>ü€ĩß>s&ĸāhņųžčw~=:húō‡ņ6Öēf͆'T"Ž ;ÁōÍĢ$Lë T’,t&ZMÅ ŠÁG72öŒ˛GAØ$11  ãW›'c…gV€nąķ†&ūŸō#šŲ…ŦņĖj{Q>ę0"‚s°n;'Ĩb„Ë#íĄō.&rîSĪ,NĨZ5ƒĢSėĒ5:ũŨūŪ´ĀŧߔŸč7‚Ēą˜HĘŪ/˙ô-DÆŪ+"ķÚÅR5l¤îOõf<[ŧ>چÅx}õGúfâ¤UŅyDĀTHš,ŋŋÛ}ūÉŅīŽ1í Q[¤9_3)ßōm‰FKf@9ĮÖiÛ0Ÿ€Ņjbۜl 0“Įä–@ŽA°p]Æ<Ū:gI›ōs+–ŗŒ`ŗTōîĄÜzwfĘ!ķ•Ü~BU›u(HÄIfãœ@5ZžDwķtŨôĐÎ'kęĸÔĨ‚ãzŲ $Œ:_)´’‚ĸ1ģ•ĖÆ/pëĪ˙(œÆö–1j×÷ 8Ĩøâ!úåaRÄãÜ,6P(”ĒEÕ^Ë\S"ęŋŧ÷ņĒĶŸg‘Ō:ú“ũī~ôĢô“ßÔaąũ mÜētöøŌĶŽ,Û1œÕ÷ÉXƒhz˜-eH ˆR~ŸqđRåõÍוQ™Ļyf˛2ŲžĢˆJŸzEF‹Ëe "ŪŽyą8c2 mķ)@Ž‹}OƒœqŪ‰$ÂØˆ@S‡( )F)]ŗänÍŧÛę,ˇiuRjäŧņėČK1‹ęQ‘t•FŠw>*BœüčßČōŧšísÃÛ@ī•O‹ŨUôÛ}BuŽđĒ-ô?˙ãԍ?ÛųŲjėW´×čö~æOÎ-}Ϟ îĖËđNīĨƒ -3 ųíĩ3.78ˇŦ‚ˆ1_@Fõ…Ųķ3œŽ }×GȒtĢ6T’Ucb´įĖ=–rĄU%ņßHŽëÉįĸĄŌ@h9•örũūUŽ{z ŠwC˜NÜb"*É; qYēŪ׋byŊŠ($2‡ĨcJ9¸3-đĸŦĘĻårâ‘LđQā>…qt‰$‡‘ĸ÷-ĖÖ§]švDmWHÕJŲTƒCiDÆĸPŽŠ žļë>û_IÍû1ŒĢF*€|}“‰*8Į…€ąæĪäLui6@÷Ø+#DĀš^Ķ€Øt߃¯b™HȎų ˆĸˇ¯(Ú,ą)EũôŒ#ęĨåãd~ąÜÚQ–YĨ‡P¨ēŊ“Å{¤Â ¤e—Ž…Š˜o\ŦĄuo^,"jōCMũäŊĸ‡åovvbô¸,tž¤ē’å¨ÔUéÄ{Ō™>9b$ė;)UH´H)ÎöŪÜ; @đq•’ác`ŊĄ],–Á”įÛ×\…eûģŖR¤l7€ĄāUDPGŸQ+ŗŦhĐwpņā•C͕•ŠEŠ9?×n~™ B4M ĒƒĨHų}e8ƒķ)ÉiŊ€îÛˆ@˜ŠP˙tūũéxˇ/1ĒĻD(¸đ ŽÚ֜4¨”„ídĨ]å_ĀŦWÜ ëäbŦŋë0$%M‰ÆŒ}ˇu@7üūÉWVP@(V1ČHŠņÕl5>÷Ë7]tZyíwš›Y_¤eCĨö%$&t=ų]Š#` Üö;­ä*dhü3/QŖ‡m–$@&63Փ§eŨ‹†jŗËejū:79~Ō !ĄaåmŒŸU|CÍLŲƒ(Ī—áŋB"¤Ü`Ázš'Ę+З¯Ø ‚$eõîO7^ímDŽŽ™|wELųĸ‰P ;ņå˛Ųu닝€ržÜl•˛97č]ˆĸҐ #< R#ë…ÔGÃn kY{Éī&qŧ›å‰ĻŲČØĻ ŽowS˛É=`jŒ„Yt‡1ÛúŨÆV!ØüĶ (‚ÚT$m¯‰$ĄM2-Fîā(lnJŅ•<ĻĒxą„šú—O=•íg˜!U÷$ƭاž×ę(TqŨ‹“(mr”ĸÅĨH=ö×5oôûÖ ‡ļGŨĒũũđđM\klOž~öö§mjp=PĸbŗJˆT2ĄAh÷'EĢ_ŒĶFqÜ œ@]͂Ũ°šO4s @fŸykC’ŗĸÆÂKUŗōü\„ˆSUäĢ>§ Úí’4ũ}@Tb.JH•P Ĩ˜Ņ.#˛á 6e6Gύđßä4Ė@hĄ”ķŸŦŌ äå?Ŧƒ‚D ņ,mu¸;k`ßÍģ7ŅqDIZĖĢbTOœ‹˙EĻŽáÂĄŋ1r$Čnčۇ“8‡ äҧ¸uĀQf_ēŊƒŨUЋú^Ģˑp—ķ)‡×׏]]E׃J@O%€+DäZ¨×zŦÜ~ĩøt‹¤­ŽfŠ h3`’mgBÃąĀŲdÅƒ‚Öˇfy íƒlG2ŧÍåa(qžë”˛ĄDĖFią‰Ô2ũ)ËEƒąyd×ģÕvæëPūˆÚŦuʇ_ÎH´î …ēĪ—!mR‘X“Ę6ŽÂŽB3 7‰ i}Q;üÖwß^Ŋ<å’ąQŸ‚:ā ‰ŧúŽ}zņĀ‘s*Pĸž-¸W7Ũ.VãZĸs­‹q<}•fŠã?y[Ôęᛯ-^ÜÜ ĢõÄŖô¨č/RēŪwėIiŧúúãÔVˆĢĻŋ ^ §É"‡õ–ΐÃ|kÆ 2㉈BĻv5Ātm˛}"ũķīæp°ú$ƒ—Ėve 7YâiũĒņĘNŗ=8×vū˙++ŸÍ$īĻ'2Ȝŋžbe„ Ū.”*ÁpwąâāŽûP|9˜üw{ŸĶҜZ¸(8 é^>íÅ1ƒ:ôΑĀÄ5r0FA¤DØi‡XlÚ˜nî× åč‹uĨ×oÛûū&Š„já_ūzFTPBĪŠDTLĒę)%PįyÄâc5¯(!ļĘ­9Ąë#?ŧųÉŪN5)Žv6^&°¨:×_ÜLáÕc›] 5ĀI¸Ÿ*XąXHAÚûäÚßĮĸ éŸˇŠû­Ë—‡w.×ņÃÛÔņXŠ^~ũU{D§-T]DĒvļ“ķHąēMŨČ­%Į–A ˜ßx _Ģĩ`X˜[uø°p†Ūā09‰TiXTēãbT„Ū.OF"0‡žf1”ąG„d÷C¤zÍT3ôŖĀ˙ŖÍÂMC¤ô@į(ŠîŽžŲVVÅä–uPWD,j‡â7K)Z¯Â]AZ\ŽßOäKŨôWێ|”™c"Đū—­Ųãį*āE ė™čėåÍÖÕqĶøj,a–/ŋĨc ŋŽĻ7E•vŋ.ŦÎúŨ­ RĒ/kbō'Û{ĖÄ =-+M uäáĒ›‡”0:ŒAĩäā°ĩc+×b8‘t ĀÛücŊ{VÚ¤*#;ŗš"S::¤~å{ŪĄŦų~T•$IŦ ʕ‚ßūs=@‚üWVN‹ųåÅĀQKč5ų‚øÜG{Uœ‹EOÕüĻę|•¤ ëžœž3šM?_vŖBC)+§ë ¤‰XĪũÍøÁŗ t˜Ą¯\Įm„ķWŽ,‚P“ÆĀâGÕ7{Ķ~9?\ĩTĐäęą{ā8ŨķŌķŪuúĢÉî¨ãQ!Ū­]eO_}ļËÉCė]Ũöc$n;Θ‰ w)˛M5¤„;VvđéĐ ‹–Q4kM3‚Cp¸dĖÔzKÅÁŽfŽ9“–‰…ķ ’M2ÃėíļSáhÃa†_ÎûøÄ Aņë×ÂĒ€‘ˆb­Ë^h‹{mB` kÅę¨@ĄĶĐlw7e(ƒÛ4RJmĀÁŲ—Ģį7—=G¨@<ˆSsŌLjMĄõÔĢįÔââ“û7rU~ãĐ'wXŽ_Īg÷&Á-]9îŸÅũŨ‰’Â^GęZf˙úËĪÛ÷‘û›2ĀÛgŅZžûļtŅ8ŊŪÕaļÃ-ŠĻ=ŖKcôJĀų$ÎÖuķdÁáĐvf÷AŪkŲĒ‹*éV´Ãy¨ •DQUE•øß+aļ•uŧq¤š4ÛséíĖ$ĒD‰P`ė¯_õīI!RQ´Ą k!i8ˆë‹+ˇŠĒž–\†e\7ä|ôíMwHRÅPÆLj­ęÎ.­ (úĀQI€i1;î_îŽĸÄĸębũŪŪÎŖ§aĢbį`ĄzņâÃ"ā%ŠWÂ5jRéŸ7—zŦu“&Мö…zj:;@ MICtũ˜ŠČÛipOeš`0ŦåĮ t{H)ŲŦ×A8KæÆĖe@Ž 3Ė0ÔÖųLÍ×HB°$Äļī@UsˆAūāŋ„ÛĄT` 6IjO@EQŠ_%NŒ1¤D@q)]Ĩ ŊkâH€ēčVeŖž|^xō›’Ö tīd5úõ›ģ×iFåī‹)šI"/^B+:Ų{ęîlx3fTˇúĪŨÁ(-ŗ,Šlä;Ģ"€ĶũÂÍTIŗÅÉĀ_Ė53į͉vfˆŨÆĄ.† P1%B–ÉfņímŎšÅąMĻę|§€ĖcRä_¸āÉēāL⥠ä!<%ŧ|ČN))*Hbî/×j_õ‰ ŗßÎC ‰=rl(BQ–oę7¸ũŅĢ˙}{w™ĨEøŧMĸ‰œ°ˆs‰–|›Odĸ.…NüŠĢĘĸØ @X”‹ĢÕč4@Įđôw×Õ|¤SœT/w‹4Ž)ŠëH$‰Āķ Ov*‰/DWŸ͊u/ËÆc@ĨŗtÔ|1:ja8pPßiŲO HŲ7Ž„C8"š(Ķ„ϰXnÍkz2j…áp lļÁ)äŲ˜Û€ų/2ŖŒ€čŲŲļÉtX ~ ¤œ€IJw ›ã­ĩCk¤Ž˜{â–8p„iŧLeŖņ´‡ĶâøõīĢō§A§_Ū`õ&€ŠŖŊ€Ááŋõc åŲ Oh}éܚęĩŖÂķMápYp­ķ¯ÛTm#bÚzũųŨQ‰Ę ėēŽ–(ũôjo[Į"FØ<ģĸÂų5Š˜ž=ũIžš~Ōīŧž1ĸž2 …`ļN{69ât8ūn1› ¸ŀšéĖÆĒ[3Ā ›˛ĖŪD‡ėœą;ĸD ˜€ų/ävØĨŨzöRdŋ”1ۀ:úvé’ |Ėln i|I€n˛ 'P–  ¯•ÁUx}ŗåb zõ:ÖÄ×ŗ;œŠ>|sØĢw–Ũįŧ*)wQÃ[ŨŲí{.yáyēņJîE]N‚_ēƒiŠEããû{ōxļĪ+/ãߟŧ_čAâ+ī H‰#‡ĻđęĩŠĀõwķ­Ļßę†Ņ4šÄxúęŒîß!oSÁČ`P@A$ÁÛQ8<īLŠ æĖvēƒČ oŗĶÁȜ%€9ųÖäh(™ķLˆ“ŨĘ ūF"ūD4%ËС99y‰rmž-ˇß,HyĀŌAë÷Ķ("W,.Ë)Ž=ˆJpžm.äÍ?īTũv­~ōūŅõa ŗfõä!‚k "‘‚Gô¯—īģyŲ!_h´+ņáA˙öa]_SËqËütŋũv|XãZfÕgå-E%Âĸķ̞ę4¨†ĸ/—ęUīu2úc<:ĒymwßŪÜĀ—į'{Ôj1iCM…‘Jƒ„ŒNÁ,´Í+™M1Ņ ‚ļÜų {,Ģ 17ŧ†Vĸg-ĄšƒmB‰}bå ) ’Ŧ<: [Ž u˙§‹sI••‰!‘B,9ˇãRZ×k)Ž¸Í™Îi|Ųî˛ö‹z?ŅÉvZž=–™ 1+wPˆ"¸Uģ<:LÄ}ŠBEŒ¸UŸmo•qÕĸ`ęœKŽ™TČWû닭@é`ũøĮI]ī:žœ]ã˜Oģfē^ˇ5Õ|û)T]kƒš(¯ß¤ÍėÎj/ÉđTŅÔ0–œe=‰b2ģŸ™csK™ĄfäŗiZ‘Ü)æĸ,wŪBjgčôÉŊõéōąŠĢąRøvŗž;` Ž+āŗî°kë•ÜŠ4HIyņJãöė°Ū`ŨĶ퐕ŧM!K0¯‘v;]2õi+`čsŽ—AQ…Ā€QSW[ €”+."b@ÍÃÃҁ­îĐ"˙ĨŨvĻi@Ãē‘L‰•@Rļ„(¤nôōŧī" ŗ!Vđ@oJLė/ĩ.SčbŅvŪ)ëâ˜Zî¸#Šœāęlš/{VIRˆÆ%*2‚LĢÍōbgŌ‘Ãë×íŠë;OúÅ&Õ¸ja3ƒ°Ųôy^ž<ŋy}TE.×<­<úVÖÜC×L˜ŠŽč&˙Čûktޤ ŧülv'ÄMZ˜|Ũhq}eUÕ#\Ŋ) zS†Ū ͍uCšœTRFÃë @ĄÜŨ`æĐzwÍ~’ŧ™ā]_ŠŒĀĐak”ČâģĖé`›‘˙}æ’Č9ÎKDėÔI’bŸbåÅ EįŖĸDŠHîŽôŖ–jTX-&PcÁNũhIrUĖPŠF´ZUį]1*|ã鿎­:”Ū‰ ’S!m×G>ēyō0Ņ|öЍWÕH oļˇ_÷+ßīxéūķ…ũ–Ž›ū|ŧ[ôu_îžŪbžaÔāČQĉ__ûňSÛ/žx8ŖM?DŖf,Jj˙$ō=pü"n>ûrrtu2@cmAVž((d÷L^Ü˛R~åķĻÁáŨ7˜U ÕôRfūĨÜ´7Ô^ˇOßfĖ*˙…1Lžķ'ŗY ESėc×ĮØK‘$)éęR?$}­uÖē ˇZkÁ§Xø6ŽRë"qÜCŗá2huQEGîë/@T 'Ēā<GQæí利ˇ‰ëû/֍zéÕWū ÄŪĮōå7ã÷}ˇ:ĀY>š ëG“0k9McäĻv¨ęioĢŖˇ@ģŊÄŗgîūčĒãÛÎßDW××+*œÖņŅŨ/žHÅøč¨ËĪsC’ĄļėžÎ-kT3–3¨Dŗ4̈́ vöÁān¤,LGĶYŨn;‹ŠAf‹yÛ~ĻĻįgúP´|uŅÔw1ÆģŽëÛ.Æ$)‰j oŽŗĒC&NŦû&0¡ąöËRÛrLĢ•_xyÚ ĸö ,\ô€-¸^Fũˏ„“U}ĸŽô’€ÆíƒøtRŖģûÌõ+*Z–Vpk„DtõūëWxHÅhļÚÚe‡õLæ%j¯­Ã^U7ETį]OĐžōā°ĸųUP•ü„ųúúUĩ:…ģEüíķ­ųÕÖNŋ&3dŊ‹™ í.6<-ŖÁ&HDxbö/[ČŠĒ1*ļʈF÷g‰\?ąÜ5Ė Ąõ&l8ˇ đŋCUÔœĻžD$ÆØÅØv]SJ}ËCD(ô™ģA€Š;AJĐYTHOgE,xQŦĮNĢĸŒš~DØˇÔx[FĸĢGĪ- œ7QŲ1B)|ŧÜĪ ¤ŗÅzŌîĮvƜ”ëméĘ2ūãøŖ´õaü*$ō]oJaņQ\ËaY†y#áÆ'–XöeũÛíŅ xMŽôō{7V˜ß>ĸW›vōŅÖ˜8€ÉÜbÉFGZŊ–Y~ė"؈‘O%[0(˛ųY)–‡KŒl‡›åŽJÆė%Dā+)B–†Š$I1ö1Å$ąīM9‹: ĐéɒbŒ ŠßŖ:b¨fár1uØW°ž3°,}ŌŗwmXŸoņĻŨéCųÅäËWhm#u‘ üŠzĪM’äLЄģ‡|Uę,]-G‘KąKpzGų¸ŋē8ąGōČŨ%9Ã3­JËԙ¯áîf÷!"˛úēĢēĐ]ũV&ÂÃŨÍe(‰ĨĀŦP]—íōg;Ī_Ũy˙ŋŲĀ6){]ĻXĪ˜ķÅųŗ›d[IwoLŅÔųivŒņ:ģHH'˛.8âč5 IŒM’-wŸ?Ų~ÂmŒ,""}ûĪÍh¯ ĢWOžŋŅ؃ņæí‘YgQûg(}Ô)ô-M?ūĻ‹ŊÕļÖ>0āļyėŸÕ…vė3,ŪÖÖũ]*˛ĒÄ] ßÍÂû;• ƒŪĮØEæKéĻÉ“ƒ×€†•ē™${ÜŠ8‰ēôF5Ô´YŨĻâl{2ËǐPKŖ3YÉ^œ{û÷MwāK4"Æ b[$ŠĀJL›Ųx÷¨ũŲá‹ú~.ĄÎ”\c,F\/RŗŲ‡Ķ×ĩšīüxáīmãhPõ)Ō˙ĸß]ŽČÚ­8 kƒk)âzŧ¸ē˙ôĖ=Ø@w´üŨ‚ōU냆-dž4q>mĮYCrÛÖõ’hÚĸÛōļī.û!ƒ?§ãąą“bw}ôđWĶ|° ķ-zWcß: ųīņQ$xéÆËuč5č é=w¨öeÛŅĘ Čtp°r~'Ą–ĻԘuąŊœLâxŠ`0ĻøĒLÚV´Ō"Ƙå˙ú€ˆ"iDT´U‹ÄST Ąmœa´ãcŦ•Ž+UŽ&:‰YÛÚz›–Ķe™Nfœ'ÍwųĸZĢ…ÜŊĐW^=;/לQ€Ėę*ķŧy1ŨųæÅŊ˙{{ŖÛ_yTĩ ĀoŪ äŸÜ4•ßB‘L.¯Üá8-“šÉúÜ@O6„v:€ŽÅėŽ­~°ÄЈt-=v’ҁl RÈŨ OŊ ‰TĄˇKõi“=Š×?pâŋíúXÎÚ֗îà=BEâîøD@Ȗ—¨Ū"ĄA´ģáĨŖAđMAM _ž‰ÍrŦŌąb!PĒlČŦ„Ŧoåß_w×hTV"â\Ņ!ļNĘ܂ÅhvguI˛ĩ7Á´UÃoˇ"A¯hB€ž: äNÜ­˙­ö6öEû;Wwß ÍĒ‚2ŊDdíTTq;ķ'É>˛i*ĘĘŖŨÃųõnĻdusŊ>ŒĂ0ePŋ|ĶIŧT™˜Ŋ ) )ŐíOROF ,xŨB J`™ĶÖožM÷ Īđf\rëbRk6}˛9•??ČŒ&&§$nîPD_ÂŲŅî^ķđũ ÕãĮ7Ø'Ģ‘*^ƒĮĪ—[ÆX$†ī÷ۍL˛ÅuČCˇˆ¨HCĸĀBC×ëÃmkĶkĐtčH{t¨¯ąĪē…?1v2čģ'ž{_ĩđß@GvÃ\n÷nˇŊh(ķ{ī`ōŧƨ@(‘"ÎËŲ3ÜZĢS Ķû%  ŠR Ī*7kvŠnlęx™°‰ËÔmĘ2‹’nÆofŒm ˛Y‹Öķ?^Q?c  @e,‚P“ÛGä-ITbĄÆQíŦÅhb-‹Y¸ā‘­WæŧYBÍŸ<äm5™^ÖËÉ#ŲnCšF÷öŋm&œÖی~›ļĶåŽæ?S?œä¨9ųôųPpj„ĸđQhyEÉ&™ vSĶ?@/]ĮŲ÷ōŨĻÂgœöSGp"özœzQÔ!ÂZAģ ĻÚŨ&„hĨĪd!@āŋQ@ˆ%*@79Ļ‹šîž#DîVV@¨~‡"Úɋ×Uĩ ™ņ–Ĩ€6ŦĐ/ī™ˆv æ)ļąc}ôVÚöų?U}úž*ą*ÂĻÉ;­+ļģWöHÂ1:€ĀčxmÔ5΅QŒšHQ/Mvíį‰ÅņŧūĮŖC0™ĶŅæø^šdš„D“Mõåû;ûŦ"ŗü+ŗ‹áøõ.“ƒ~2 U?4Žŗr•lËÕHCn’&-ÅbåŠ*$c„ØiØ‡ĒŠ“gjo~ęġ*肚ímĄĢėģģĐĪU….š†hØ<]õ×JģlÄnDōß 6¨n]ûÚCúĢĒëÄ:Ü<*‚ŧRQÂ(L ¨D`øęÔîdV ĄØ&†â#Gŋ>ų,ĶÖļכŋęĶŨT€ŒBDäŖHĒ‘ÛplĢLÔÚØ2›Ģ‰\Qk#v8ŨÜ@ŪĀȅ$ėlšīõūēĘØ:i÷”(]%‘ˇåbņržķP°a†Ë]ąŲÕ{•ˇ/íîđœÛ§ÁQõš¯%I´¤&ĩ˜U`C‘ [W…ŪŊū“ÄÂî´é];]]P!ô„æ gܟĐ=ūŽ9č3émUûčúŸ” Ŋ-‰ˆ˙7é=ĢCßԏnuzX #@AķķĨãFmŗhAˆHP´J”gHmL/ĄŲĻXB",§‹´Ŋ‚oT ĪÂ$Fdt#!*…°?*Áõ$ Ā›z‡Į[;ˆŲëe´Ŗ‚ą6ĢōüNuvq\ĖŠæXYŽv‰‚nŦ†üxä Đqr™ēznŪö;ŠÅgļë´=…”ŲH3ʰ•âŒw ĐüUžúšu¸Oú4œNfŲâ=ûßõúÔ Ÿ~JŦ* öū5ęĪ1ēÁĢÖ}–zŒī֐H]B?Ņ vG@cŸ–]1Œ;€Žž`8Émq˛ŠÄR†5ŽŨÍr:ļIģ *M¤éõâéj|úÜRâ/ÖŗķŨˇįĶīüđú0k"“†H™@P…Ļž›esJĸ„@$uÖF"_×ŧ˜=yv$¸™-šë_m/įvt`ZĒFšxŦĮɛË;¯f ˇ“ adɉ<¯U%\Δ‘_ŋĀVķĞYÔÁŲÍøŽĸ.L2{ļ:Ä'ÎvąŌ ŸęAƒp@÷ģ^”°G„˛­7sBīžī9Ā.ĨǎĶwī|gāž(ū­ôWP?øBĸŠtUßP() Œ.n"QŗucÚV N1U>œ':ĪŠ°­Šė:ŗ35Įi4žuíÍëņ⨊/ž#NQÉ &Š ‚Øf¨ ‚ĶYēĮŲ35ŗ ‘ŠXiiEŧO}•ÔĢúëģNˇÕŦĸD׏ÖtŅ{ŒËLؤõĕ)ėmôõķ\°$jXŧĄ6u¨„BZeb“åˆÚÄapÄāŖŗd6ĢD]^Ák{/yúvšU:Mž{^oΝ?Ū–°’QōDŗęÅĢôōÁú9īķÎg›æķ/kPlė*ŋ¯ˆ`ۜDō‰ģChvž¯Ú‚l°s>Ų-Ũ–ēũ€ėšŧîR‘žŽîŽ.ŧĩcJ/˜ēĩōtō§”ëO¸ˆØ}vĢÜ Ž€:GAQ_- öJNéų8QęĻ”Ä4ŠvY# *SL6Ã6bŠ7>Fŧz{V<ŠÛ „ÆzŒŸäī\ž4mļ1‚ķ^­3ÆÕ„Ōs†ŽU•…Uŧ0c‹Đ*"Ą{Û\ĩ‘Ęyb C¯&wW€.§Z›ôp?Ģ<g/GŖĸ](hŧ>ûæ['Y8s˙~6+¯Ÿ./Ģį¯Oūí Û¨ˆœØ•-@#ļ ų~͈Õ[QĐ(jŖ9jÄÅšT•ęƒd+Ųn`ŒÔsZŊķŋģØĩWĀR—{ĶÉŪ¸÷‰vūÄ.rfPŽõ B§ˇęŧÎũŽëū^u+ũ,āßôggĮŅÁĀ }¨í’ }!Ο˛QŠ M ļ†Ų,ŅÃI m*6áļLŽ%3-Ļ7™[̏XŖ,ûÛNQ# ;"%TŖ2ō1U”G%SŠļŽÆâ5 €Ņ—7Ņēplõ‡ę>Ļįt|˜'( Ž'öúīūķåŒpÍúîķË{īÃŖÔ˙ihlŖ4ˆDupōîm%õÖxŽĖCÄ'įqeķĘ{‹ŅĒÜŨŖl2å6ĩœ´Åëü 6Ą0^ē>~øģ“uČWW4+!ČPgiŸŒĶq?HŽjÆūĐč<ڟ‰=yړxKôē*ĸv™„]Ĩ6 >  ífĸëRc 1ŠjÍ&ø gĶ&åzÛ´fĩtö핷pŨøÄÁęMUÕëÄJ‚ęĒ\!„Ølã@FBJH‚Ä(^5BŖpžUnŲ MĒĸ´ë&ę¸^ųlĨÜzžëh’ČØ×˜%íg˙õ˙xtøņŸS\ˇš+áoĀl~,Ô˙—ŋųÅaEĻ`4Úāūķ9*)Š×/Ī !Ļŧ‰•a0ÕÖfčÅÖhjf¨fë'}ž=*t7q§ÕĄíõæØ‡stĶ@aö›Åėüq]›ƒVPUIģ3ĢëU„{ë,íëhí¯ũNa¨xSMķv–UBË?ŠTøOūė#ĨIQ•Đ8Ē“âÕÅÖĮzs}ŋöĩ›eĒ‘ũ&Ũ–2ö˙pŽ]¸!*°Á„ÕĢSHQļ—˛h”25Ŋ„n­yrmMŒÜØĖŸ?ŨŸfÔ@ hq%éčģ䯖˛kKRTŖąā›ĻüŦM­Ũ™†kuĻÉë¯UĂÕŖĮ@ÕÔÛ(‰ Á:D!SjwėĢqÚgFĖuˇYHBŧ Âíîcng‚žíƒ˙Ÿ*­;ˇ°DßĒÔģjģ/† Ō-ÃmtŨ€Ŋ ! €đoni"Ä[Bb¨ėxąšGĶÛ4¨\97]É Ų}ú<= Ä &ZįeØ)aĢīÆPû¤Î°mcV_DĖ]ŊąN'YũßW}‘fT2*Ur ŖŠN¸eIXIIŦ˙ŸYrV‘jąŗyõîŗ}ōąHSĮæ IDAT‰I×ŧÚ6‹VÖ@™Ny3>zL­3~; āVĘĘö䛀€ē ‘~°ųƒÔ°ÔM,c6E”FöŰĶ8Čŧ7ÜI[ĄÛ“g8NēäZ.üĄĄéėÛ"ė—°Ŗ Ēīz˛n19ė Ø[˛• zûAéĀæN BŌ}šøíöa›’tÄĩ,ŋžF¤ˆénu(ŖŊĮ?Ž’ĖļL01šk`ĸ3Ër”¤Ūhmöt+ šW˙葐…Á`QlH“„@L ĻŨŽË6$Č ÎTkcŲ¯fg÷˛4äČ}uõ§ĨššÂd,.ĘęŖ¸Õ+į ŪΏ/ž´1•Ęé›eKĖOžŠ¯˜B ø`&īž‡Ú—°…Q–•ĻÉL bSĮVŅ@å’U›ž|ŋKqā3”@û;Ļ_ĻÛmĐ›Úŗ*Ũĩ#ˇ)RŊØŖgxúŧ›€¤ũGIoqųםˆ`Oē ^°xõĒHԌ§yØNGxōR”ķFņū.•ÉÅáWųÕÎkœoC™6ÛåQāŲ¨ Ĩ&s'‹ÃīĪëŲr;[fé×˙ŠJ Ė ā‚a˛ŦвHN~nŋi>] YTG€–øîŅØ~ŋs–b´IĶŧyä\’ũĪŗûŽ]ŅøOa-Û×íᾋ1p÷›„6mĪ’*LG}RcE‚í›ĮO^phJ­p4ũė퇓ˇÃ6uŅY´s_†0FMŸŧŋëjÃũH͞ €žĶęv„j0€Ā>Ą?îē#‹z˜L´kvôv+‘*Š€)ņ¨ˇpw×õøč` :9iŨÁÄÚ*+wĘŊÃŖ°Eöxxņų<ƒ‡åIl‹ÍÎVLģœĖøT,äŅÖÉ’ÉÚŖ;W—P/v.Ōė˙zĄ(† ›….ҍ`8B‚" ‡´˜ūâŅÉÖáŌPäíÅ}smĘ0Š{Īpœ`*4žŧ`ÆčÆōûüNž Áĸu€Œ%˜Ā84^FØŅŗˆŪĸŽÎ>yķÆ†c‘n\qsÖ>~lÎĢÆoyŒ`’y ōa„æîF§N×ūi äôŲeĄÖÃũęŌ’ÆŌŨ;Úg#Ü įošž>ÖÎ#'ĸŠČŋé4 î Aė%†úb¯öĘĒŽųæŲöî´Lm–„ëKzx]ĸŪŅOOZ°ĢĻHŖ\˒eœ˜2oVŪēô¨\|§į‹gyžũ¯˛,JĒÄA1Qļˆ(.ĢÄŽGĮŸ›]{eí5Ã61ĩیZš7û÷íazúö>-ÚŠĨl3sDšmFYũ.¸ƒÕ×˙Į÷øõ{’Q›6 5åÁˆmZß<ô=&̧‹ÖTĩļÉČú:å{íËŧlfPh8w!Ļ>;Â8 ŧö°K_îęÍ ösˇH Ú?ÉūÆÚŌÚāļŽî'í jÔTˇMŽōo†ŗ û@"ŧEØPhķ¤å¤Ž Ô7—Īąpå8až7Ų{äN͜­9<øŌæĮŲ Ûæüz—e×ú‚ā†RĖÄė mĄŠĶ˛ū>/ † ŦĒjI„ĸĩų8û|6ũtŧ3;oŌ")öˇÖēPF{ũîØčÜnrz÷üĪ~÷æ?íĖgÆŧûöS˜*Į^}û‰ŧé W?îųâįë2ÁÃõfÛ*‰)¸Y\ûÅ÷BĐxŖ$$Zy‹•…ŧ* zb6‡q! 7n’%ED‰6ĻHŗ6­@ŖO_Āîč'Ū–Ô]J&~ôÕ[ˇËPēԍšVč™0v Ļhūu˙1ė7d¯i‡ĸķ— tΌ˜ÚW2™ŠØÄ´ųôáÎįįi;q.ÖyöøÉ|/~˛wŠ MĀķŲhNŧ›¤$h´ZĢģß=gcœac1ĒK"ģbtü}öëũwˏ‹_g™˜bîō넷ŗ:&YMyėÍNvYWWŋĖ °‡m™¸š­Ë/Ÿ˙a6ņዿķŖŊ#ŪōM“>McK~ŊĘŧ€)š›×"Qĸ DAĮą 8ĸ4°Æš÷Ú_>x]lwļ798MĘzÆ\\†ÎČ5¤˛vwKĪũw vã#zēMûœéŽ)Ĩūø"„Î×á—(]:w Ô§ô\Ņ/ę XÔĄuUTÂW—(cŠpQ­ÎšlĨĩŒ čGO\ēˇM+IĮųėÛŊüĮí.ĒH‰SDÆõRqbចGîÛˇ,iBi‘%™õĀĆ ũę÷WI~ú|vNŖÚíz`)ÚÍ%û5>+ʄRlėø ûfķIŅQ¤=Ma vômÖ,ŪųÕãķŗ´x¯GĮ“ŲŒĪž×Ī—m›ŨņF“å Qņ-!fŌ(ĪbBÁNŨŨņŗčÖügŪŌĀø -c;ōņļTî+40ؓŸ„ØŖÔ B:¤võ×õo|ĪÜ j7ÃũŌ|č\z›ōũų5¤Ü g"ôĐęģ9Û_Ų›Īiū´4đ¨-JeZ™‘õÉŲĮ>f•IĢöž=­FiåƒÛŸ,ŽĖWãĒmhčÍ9üŧ|ũ&b’Ē€ImaeGisę1ƒģķī_}Ķ&úĘ īĻčßSũF’ˆ—jyg÷äÕøĄ6ŖˇF4Ŧsũá(kŽŨdŌžÜŨ\U°Š5îß;§ÃˇĶIK‰&[>?‹ mPaÎlƒ(4ß 0Tä›tjīŸŋĩ:jÎ.r˛äĻĀÆKR9¤ ;e:ŨžŗĘøĄkĮuĶ~Bí* ö-āŌ—zĖlnaėî"ėgūë.4Ŧ/?PoøxšÂŖ#œŨyųĒ< “Cu‰OÕB2˙8ƒÚ`ĄëėŨû/ĮōŦÔ˛†UeŌĖ@ĩ•ēēU§÷˛y×&Gķī}‚š™ X°ĒM5LfŠũË˙îF_ŸÆ:6…m|ŲFČgĢ:ŋž7K}:¨KæŅ%ļxwųYĻĢ ÅHž‹ķ'Sg4Ÿí~wšĩĮ|Frg~5á_Ōv6âMŽ\Ģ‹ÅĶ÷$Ē- ˆjBuã(Á˛i¸14=~ēĄŨyu-1#ļÜD͈ZˆrÛŅ(ghQ˙wÕnw§ öŠ›oé&† ^Rbf˛,`LĮ•r‡ņô])˙Ļ+ąĨÆ5îWˆV×éƒCsW^ÂÁ´ÚXƒÂUĄoɏwŊ–1§ŒĘÃwŸnĒ%7¸ŲĐ4ßæYå<}QÎ^&›9˜§/cÆøW.xXĢ5I˸9=š“KīÕĢuŠŽ å Īˇ7Wū]ķØR´ėŲōÁÅģĮĶ´m‚Í|Ņū0Í<øâčĮ‹ Ē $+ŗŲæÛŲN6U)lO_ĸ%ĸF†ˆėI˛čeģ+ë:<Ļįæč,XŒĶŠ\ˆ¸1ŽM6&Ä #SoŲėĮĸ ÄĘKB7 é j‚a­PûĪ“1dS$—01 ēUDƒō:áƒČfPÚ **ōy;Ÿ¯Ž&ϘųĶqø‘Ŧķ„×4ļMš'T'šų .BÄĖŊm–´Ų ŲÉÍ[Øß×-éK1bÂø8ۂ4ĩb4 ‚l ^6i;ÎŅÛËLlY„šĸ}>EOīîŀxąš`ûčĻ,Ą~>N›­´ÕˇŖ ĒĐŋ{ģsÔÎ+mŗ0IÚvÄ67ærUl9SŗūŽUQđjģ‘ÚJ÷Œą6BĀ89ÖO“õŖæõŅēqĨŊĘ`SĐڅŠžc’VB} ę M 5ŧÍōęD:ČÉh(ˆ;éŒôpL26ėŒ3qwŨkī^SQū뎃.G¨WsK/Ũ%Гæ›;>ø=äŨéæíŋMmąÍųÍz_\<%k‚u!2LžŪ\6œ !+Ös™đ†¯‹‰{s‘ĩfqbĖEVwz7ļo‚P¯œs4.7Ux?_“uģ“{Ėæ”•žÂĶ÷kB(Ōė@›MšßĉĢ´Dx•Œ1›íŋf×pˇüúũƒŊw‘1MâîŽdÎßÛl9smhšŦŨ‹§ąÅ@žƒô# Fā P]DZīˇ›ĪßÜØäöY‰-ޏEžCa4ŅĐģ5û÷¸ëôå*Öˇ4à ęŽ_ÃčˆļÎčŲIB 6Î0c‰ĸŌQĐĄŠæ_˛ PßO"bĪ6(ĸ _WD˜PJ ŸüØŽ&ķWC›œl t‘ō†!É×- ųÚÄŗ+|,|‘|x?Īoˆc2Ū4˛ P|ö0ßŧŧéÂķ´°ę‘ŨágßĨÍÆg´<Ų$օ4ėÜHŽĢW7uÕ˙ʇ—ĪÃgķMZIR øÆhŧ>ũ>K qˇ˙xgļÜ0ahļÃûÃkž,׊m3\d­{ú(jˆ‘PQ@$%c00ÆĘŒ%ĩĢ_|;÷ÍAržąäŠ6 .CĢ$@M n^7 ¨1P—Ÿ ˇ”tƒŨûęēß60č”ē’‘ 1BQĸG‘ޤąG“>ØXŗŸ~ŋ9š8B†›põũ(3Ų˙Q“ĸÁŲģžX_™ŖoŽÛŊ¸ƒĀ2 ¯gŗ*^MÛīŠh ‘" Œ ĶCŦ3tŲx•–œ}–†-¤yQ[<)B†ŪQč€āáîė”z]%Đ7Ŗˇ”@wkŦōíjBFf"˛„„1D Ú#HDl ķÃTXēíĸ°¯˛ģĒb9W´˛4-äĨXIVī›ĮĒ‘ŗåNúú~ĸ(dˆØŽĪÔb¤PąĘũtƒ¯ĢüÍĢĒ6J~î\_Šĸn/}‰É˜ÕŪųŗéM4hüvã!^_/–ãšˇŗĸŧÖ1\üø2(ĩĄÄöđha}v˙ęęûƒŖ€úŗ?jØLũ8RąÛīnÚ,œ FDlâėC%Ļy 6čŦxąŧ÷l-"ģáM dl GĐ„ˉĸÛŊŧĶĒ™Ō=nöՙÆUEĄŽ"L<Č0šĩKēëaKĀ!Įą;Ûú˜ZęꂮŌėEgōŦû‹‘ †¨]ŽSo'Dg™HŲō¯h;¸_ęųB‘EBzŠrƒ`īŧ›ī— J6Ī۝¯đų @ŗOéCĢÆåŒOû­ƒēUÔ9ÜųäŨÆļčãÕĢų§Gûīí=üŲ'î¤E‡¸]%č›&6ǐāvf$mŋ:%Y-L†‘›<+}#9Ŋ“ģl3ķüuvĖŅ”Ģ721ķ‚Ū_âiA" õf×ķd‘eE¤Ė…Ãõ?˙rųļ …lP$ReM4K‰Ā ´ŪMRKŖāŋ‡éæTę|¯Ų‹!į\ŌЍ§@ŌŊųŌ_z^ųS=9Đ۝< ąS5!õ!j]ˆƒI?ÕÚqꈉ˜ŨãĢØYAaāúx ÅU| ¨M°ķvôė$–™5 Ž~?‰ ÄŨæzûŸë›"m3l§“Õ’īŽōu˓ģ‹õ8ÍŪŦ‰´átõŽ_ŊZ–å•îŸ5-ĢzâļĄŌ˛îēãŊm˜ļ‰CžĒŠÍĮąĘËũĀŠ’;žˇ$›ąķžĮ%‘|=÷SēÂŊÉ2k6 J}3"Įi¸Úąįf˛üä5$Ŗ^ŖH7 Î˛ķ‰#§#ŌäNž×™Íŋ­J—›Âj.ŅÖUP uqMũÁĨĒŨpĸÁĄDĐšnHHÚe2aY`g#DC"{ßā Ņ`ÃHd ˙ēoc ­0ÂĀ‚ōâQEĄÎgÔ9i_Ļ\™4ÁāČīĘų M ‰Q\§ÍßŅ"Ã&ņdî›7Ų^ËŨ?ũ¸ųOzyŌ<ŋBå&¨ŗ'gZįXwæ+o|Ĩ9ũ|ßæ‡cráˇ'‰oc5ō´ˇ'mL’ĻÍäĢg&5õT.÷&Ážû‡ÔšYģqīWp"5+ŧzīgXŒK[ÅdĮ뷑<‚Š")0Q‹m’y2>ĸ7íČ,—Íŗˡ[k÷ApëŠĐšjęëiT BdDwB›Žõ!Gn“oģŒ¸WK(ˆv#ˆ"ôâ´Îe‘4FAū€û‹Ŧ géđ°Ū\1ÆĀ€•";ΏOÚ"6&CCņÍ$į¤å4 Ŧūúûŗŋ}°G머zķpīæãŋ8j^ŨŲ—û_ęrm m›–Č&xŧˇ<¯ĸe\ĩŸæŗ{ąŊØ\ŧūčÁšSīW-ÖŒ=C˜ŽŊ ™YĐŲK÷sĪŪ5×;֖Ož@awčr4˙ÎjTƒ¤FÁ°ú†Š–f#–$s—?6!ˆˆ¨")Ļ!šBmm+‰ÅvWd’’ĖžDŗ:‹f‡ļ‘I"čé;ōKʝ­ƒÕnúP§Y’[ŸķĐqÂpŠu’v9]ŌJoŲØj;@ÃˇnQūĸƒŊi`€HnŋB˙ķ $6išˇ `~ī{đÃaŲä„Tį×Û}o @ÕŽ§Į—Ë™ßܯŌTÍŪgÕõgģÕųû‡)î}žy%9Ļ֛T#Ü)'0_!‘¨ČŸũėû|Tŋ_oļé:ŋķVÜxu^*GŅ=N#¨RŠūŧ¸—4\Ķg'y¤=ŊYŨÜ(ÆqOu œîĻļn”!ûėIŒŠ‘ "’ĸ&XĢ-ÔFgTČÂÚMÎw1`v]-^HĖĻ›ĸ„ Š“Øî\鞐ø´ãi:\’Šh×G @ue7(b>)ˆJ~EÕ ˇƒ û/Bâ/ēļķVá†Ŋ‡:SH<AP–kšTÖÁdôúãĖPLÕ¤IΔ\VīŌ ¤Æ˙˜ĀÁÔßŊv?{ysrž¸:>ü’‘bBH$ŗões„í…@÷Jž?˛|ŋiU5.ߍÅ­ļu&É æI•$1ŠIøŠÛo÷ãļ8’ÕŅō_dđÆį K*ŊŠ’˛FÛOôT&h„“äÍ7(I) !)LCĐ4GŒÖˆ‰é/R¸!¤­?]%Ļ-ˆsŖIRĐxœĢ4“.ĖēSŒ˜z ĭ™얺wBs/Đėą  Ļ¨@—pßr@}ėaWLķCcƒˇ)-Ũī"tė5]7*" H¸ŊhSF‹ãĢ֜OJ5lŽ"R15?=ڌâĖü¸î÷îím>=Ū˙žž¸šŋŽßÆ)1Š3’f{8MŽZÚÔîîëÅũĪ'môAäŌOË÷WmdņÖíäč;7Ģn¯Ÿ=Ęl ”ÅæīĪdĶ1žXĄ’Į™ƒUāĻļ;ŪŋÛ/MģĖ]ūÕʨ’$%EĄÂa+IJ$Ũl&(>;¸,‘ėWw7kƒģ“Ēô´6$jaęNNÕÕjģí ˇk`ÖēZ—ˆ M—ĨE}æßj2‡dvĐŽũQŌ^}Ø˙į.Ōø¯ŠöJƒ.¤˙Â0đŲxQ)F%&4ŗŧŨNŠHŽ|ųxžšø<ÅlÕ',scÉŅËũÕqutoņčÎxßũ‚Ũū•7uŦw†•Y ”9Rˆ×ŗrš€:rđDģīę’īä÷ڍbûæYJ¯°펓äøĪÆ É•ÄōŅsxĐü°ƒa9û§meyqgįõ3UBˈČIQĸ™Öãyu\Äirôíƒ$Æ{IRŠ „-’Ę^áËl“áäũģĸ36΁ņ2Jk̊Žwl$]&ũ…ĶĮ3ö˙ ÆnG7NhĐĘ­}ĻŖÅUIĨ{ÄrkІŽDîÆwĒ'ū ôũT_Š÷v(Ŋ…ü[/ĒĘǤ͉oŨČĖ÷^ī_laæĸcšÍĒÔmM+4ž3ÕŲÛũ{ÍūRęų~ęÃáâō ķ$Ú$* ˜PņDDÃvœœÉFķLŌ4ŋhŠv1Ũ9ˆÛ%œ—ÅZŒĻŋŨÃė]™‘B4ģ͔ËÕúŲË´æÉƒéÉ)ËÚ 5IT$ŸËrŋ|s—Y>*~‚Fo”¨ ârU4BŗĪā #¸âtąûŗėBa댜mĈ‘ä¤Ŋˇ&Ēl‡UÂ0Æ RX÷÷vßËko'č¤}Q×ëĸ{¤­¯Œ;ƒmgĐATá/Pû”“ZQPāúZBUäuí%•q"8‹öÁޑ֞ m“ˇsŒ‹R<â¸ĘŪŽæYYTßŪ}“ã)Æķu)š7Ҙ–8‚#4~ęqJÕ ]ĸM†W{÷KĻËvzgÖjlŠ;ĮŽNŠQúø`š…ÃZĪ'dē7^ļmö{ŋŲ0MîāĶ5s¨ĩ!PJ3Ž*j?ËÚŦhėpûQõ=a0ęY#Ģ^)ˇô ŧq;ŒŠņcs1-ge’›-7!H](s;9ģKĪ2•Ą!…~ ÁOt6ŊS{ Ųg=Š&?ŠŽXZ;˙†vZvEUūB†ÅÔ^ŦĐÅéđÍDDĘ\˛?¯G¸4…HŪėņ(õ ‰´`ļIꃥ ¸ÖäģßžšM÷ņģ;‹"–Í%Ú{Ī=:‡6ÖšQņw“×ņ*QBV/ņũÍ^ĢŪŽ˛I(Ŗåéb÷ŅæéΘ‹TŦ‰Í›įG†A8ФŅgīŪ4åÁ¤yēÁhQŦFaĄižņœûuŲFr™cŅø'‹g*‘X€ƒĒ1č3k#ŗR Eb5¤bCķgōnŗŨe5áրĩ1 ÉQHå˛Îmėg…"tƒl?0Ŋ[ÃŨšŽ#EŧŊ$úĐÎŽčFvõøv_īAįJã_CĢŌ+H wŧu„›\-@Du´īåĮÅ\Fą%"vßM,gŪ0Ž5Ĩ+ā’7ÄQ9O–øs7#•‰÷Ņ…ģ͙“b” #3HH)¨6Ū=ģ†˜p_oĩ IËQPŋ;MōĪ÷ŗúIđRPĻŦ[K›ÍŦ‰īCR‚ņËōõE4Ęp´xŌ*Ģd“Č˜Ø‡Ø†¨%ōÎeî\coŸÎ_‚€ˆ^@™Ŋ¸Äpd$U3kŖIyôÆŸ5PLũå+ŦUÅJ×Oŋû~ú"#!ÆÛlŒ*§NÃ|„^ĐÜ˙FŋØÍÉûМŊ'§Q‘ŋ¸ģÛ?Ŋ/ȇ}wš‰Q„,owxˇ¨Đš]mK:ێŖqÆá˛)°$•Ķč\€ŧĄG̘ĸ›īqc×?{ī‡V`Ø8ˆā–7&.ũŧ‚o9ĶëEņđ(šÍfÖŪŊ[lgėņøhR‡Ĩ52ņ†17ėjũ~ ¤l—oŖŠ´–‰’¨ŌÖ)6ī7îŽIŪO“Lŗ0ŋhŸ’yAëbPĖÉA–8āØbÎLžŪ1Ī6w§ÛíØ€M7äˆTų?FĶöķķĪöÚЏ ”Ø+o`¸ˆúj@¨ŸMŊ–=(ÄĸrŸ€ÛsÎĀ_t™xˇa×1‘J÷į“´%E¨ 'ʧ7+[”ÁÛYzÄtãŗ°J¸Ĩ´Ę9FF ‚Ų,{{:Ņŧ 7Î5†Ÿ^Õ'1XB€jSRD ĩdÖ7*RŲ†´žÛ}Ė–īŗŪŌdį^–8Č„.ĩ#>3úæ”Õšã`oA ĀUD€÷jÃfyˇĖ–~b 4ŌÎ˙ęę%›ˆ* PÍ­OŠ"D1-9Øā<ųÅÁ•${Eĩ%D]tõéÎŋ5Ÿü—ˇėã¸;…X­Ų=Ān2Q× Áí¨1ߝ{ÚŨNũ,K DūíP&GÔí=´† ፒI¤-Ũ.¨09ΖķŲÖ(¸‹‘++Îä[U¸Jœj8Œ0Ģi{];̝Î^g"X$ÖjĩĒKT"đž‰aÜxEŦA‹WīĖávšílō䨇;&§âFĶj…1š4Dãä*§wO€jĘŅ´¸đ‚FRõÖ¤- ÆČ9HÄ,üōæß‹ą[ŊqųåÜĸQÁ16` dK¤8ÖØ”VÅęčõėøérĮÄHÜ~YÍĒôĄŧûr˙Ōec °Ë}ė9„^č1đ¤:Če GԐLĮ-āO š=˜MWw_âV2 ¨xQk€¨Ę.9Kã|Ōļ.q†o|šĄú˛0ŠâZĢíŽĀ<´ŲžĨļ›4šŽSН_´j•FkŦÄ­´MaÔ¯Z‚ļŅä‚ ’ŧu-w~XÛŗG“Q^¤–K—{ ĩkHKūŨk%h4I~4Ã+!‰LŽj+Ä-" ǍŊXķŊͧwSÃēŠv'Đ0¨:DOœ3Ēb‹ Hāi“ëČZ{~ŸOûÛÆqõ¯ßąį5‘]ūŸĸzĮjC´CņÕõĸ¨0D ô? Qo'bŋ&Ú?āž–Cėza÷ī„üE_\t4§ŪRDÃyIWÛ h'z4ßžŦwC;áŲûn6ÖÖ15ž 5[Ķ>y0JC(<ícV!ßžËĶv^ŧŗ1ĻÜF1‰qAŧ`ĨØÔ1{‘Z¨ôdĄĒ1ģ3^§ÎwwßŨĖŽË‘ÂŪ´™įЁ›ĒX%ĸKž?ß+ÚÔÔEb'÷Ƨj9XD LŌ%lcąũÅŽė'Ɏ‰mxo_žb0Đĩ<:‡‚ „Œqۅ˨Ø\„|1‹iLDōļvķÍįÕ??–eYēíĻ-¨hOvÜÚ­c°ķ-„ž C„žî˙đƒzđēkqzÖ•Ķ•ã}aŅÍ~GÔÎ@tŗRŅ€ŠPÚÄŪL÷7Ņëbė#Ųeææs—(YøŌÄåú^˛DtIØ&…nŌĄ™.ۄÎ^ F6ÔdÁJmœË 2ĄÆ t‚­V4&Në×Qū” IDAT×ī?ųūĘUÁŒĮŪûh â„E˜|ۚyģeíŦŒro}5tĘbֈ Đ F{7|ô¨ÜŪ™Öû/ŗĢ4ũŲ×kŽ"˜iĀ ÕąR‡ĻŦÁyŋÚĩqī›šNĢ’ŲiũŲ~F‹˙>˙î‚~1ڙžŦN]ÔFaƒ:„‚j?ĘKoGë‚U\‡‰b-Ãí0¸žĢėąėî ačFŠąöŨĒôkŠņMC*njšŽŗ6)˛XęhBÁ'Öåž2Yš˜H;žŗi˛ˆV7ː‚†­°XbÚ|'1 Vŗ,rV GO{ÚBT\Ú7åŗ§ĩI@ęŅôŲ‰Âė°ØŨx­-sôš#KŸŦSŒI #ŋåäĻj*‘ĮH$BĀąüĢ›ģŋ6ŲåHVeFqĀ{ákˆĒ†ŖRPgĀ@d@ՆYaÉĮéĢŲH“đdĩģ#įRĒAėéWfĩ€ŖúOĶk˙é9e–Ąfîfu ĘíŸ{īƒē­ĸģū§B¤šęÖhõ“ŊÔí1ū5`?ų˛‹ÖdˆŊßüUTQëâ¨â•Í΍” Éõ&f6u‚ĀAJbgūĖeÚ:Yffâ•§b#č‚×?4ƋĨV)WÃÁáØĨ\#SĒŖI3°d‹$Ũøŋ8‘Ė&Û)NŪ N>v‚’ L4ÚÖŋŦ(ÖĶļÍK+•áĢî]HĄQ7¯6ŸŨsī–wnJí‹ĸĩÕ§į'„hŅÕTĀ aĸ4‡›éą‡™6ģ×§ ‹=kˇ™¸ŨØb~ô˗uqvįŗí7ĮĶwōĩt>‚~n›˙>PĢŋô;š `?õ?äĶhgÜčjclŅCüėļ ô÷te!"oہgD1ž.§Ģ—ŗrVAđVÛ!iÉրŒRŸ˛ŗÛ*›Ô ĀÕÔã¯ˇÚJĘ5ET!Î 6$ f°4œYMq[ģŲ¤ā#W/ƜžzQîŽĻė8Î}šÛt‘@U|õc-´[ui’ža$Ȇĩ›âÕŽÛÚÜۍĪō{KBôMëJķŗ'gi Š@ޚI`!d3]¯Ž’͇éÍúø×¯Ûũqŗ&ąÁƒë;÷ī}s“n~ĩøzūįd.zÅØĄ4ƒ\/[_tŗˆnŅūŪÃ…ƒąÛ2‚PQųˇ]č7ÅĄüρņėžÚÍ9 t.7ŋ ˇšÚKöĐl+ŖKëęœ%”sÛ&•0Unlmĸ-nĻÆkmŊ—ˆŗ´üũÄ# –ĐD„m˜€QM.5X"Ŧ`Úaž_ÖĩŲqÉŲÍŅÁžĢŒZ“97ÁØS†oBđQÍėfoyŅԌÆ)Ą1ĸ´’90hwĘ—k•ĮŅÖÕãítúž¤ÛîāŒéؒāh˙j­ģ'ŠMs¤ßļŠ-°eŗbcŽ<ũ[ é"ų9|9ÛõRRÕĒÆ[h >°Ÿ0`lũÔÛĐ{AįļŠHŨĖŽfģđĻ ü[č-Ŗp[šõ>ŽŸŋGA ff¯Vŗđ˙1õĻĪqeWžØYî}knČ@p+’ĩJŨĨqˇíîģ$õØūäŋ؇'fÂíé–ZRŠYdqˆ5‘ÛÛî=įøÃ{‰RD#€+‚yņŪ=įˇžÚÎy§]Øų$ENe>0„čģēg†ĒīRžļ‰k4urszX~ĄŲVF‘ ĀelĘ9 `į20Q„Ha=hzЋܭčĨbs3–ív7–čuž|]“ !%ŗävôn Üu)¤@‚€JŒā ÔÜņėb:Éō*”I—F1;úņ”ģŧëĀRô΃*ú¨†NķŽjW÷=årP]=Ģo1 öÖ ö…ZÕu?ü°ú;δ>ˇÕß͜Ã+îgúx• æÁũŅõ‘Or ũßÅaÄä¯zOÜpŦt73 °!ļīû“"6Ûõũę<{öΎNŽkŨļ7ĢqĒIÍaTX184ˇ…˜Öģy[Ŗš B'ŽžgÅËF;MŌ„ â¤ķ™„ŅUd‰4蜃úN‹Æ‘–B>ņŠ?ŋųVœ8ĩMRK|ã8ģ…+‹|2žž[~Ŗ1 ¤ę@MĐRŽÛ]Vs*ĄđáŨŽGŖâģ.š‹–9t  šS$ĒīĨ§î UŠËĀԐwģo\b-XTĪ™õ%Llˆ˛: ųÜØ”ķ—Šu§å´Ô´;ûøŧT2¤āæ—Ŗƒļnē.ÂŨ<|˛ƒJ‡í¤wŖaßDŧ_öžÍũmw?ÜŋŪLøĢ!uu„îĮĩŊ”m{Ļ}ė ƒ )@Ŋ,:ŠĢ‘Ž MwmĢGuuL ė|4{ŸjŽCųį5p–IȨYŒ€ŠŽŨ´+´ĢĸO”‹Ųgx’æÁxž„wzöá˛ŦkīĘf׉ë$e‡žw>ÁęÅĸŒ+nfĶd||vąūâŅŽ‹]˙īm‘PˆUÕØe3/# )ë Ŧá‡ī/UŖišåĸäP= Dį\9ķNв‹ķƒÃĶ.ŸTÕô]| Äߙ‰A8žĐãW9Dîᐤaƒ˜}oeę?HŨŋŋ†Ge˛qHWÛËĪû“ŨĮā" ĩ_™úWX˙ôs…!4€P"Ē:3G‘ĄK§ÅtTĖ|öĘgŌ 'čĸ„rgÜÔžT%$ÅʸÆ1F^fË7 ˜a—'!“.@â.¨•]͏Œ‚?ŋ¨o$ PnsīÔ^ˇ ŪÖĢ´k×QįŅsí"Š2ņôĀĪg˜0( ûĄ8 į:Į€,@1Ö›ÕtR•Áõĸ‡mwīák,*`æI !ö* ThŌIR˛ ͎OÕî.V9Nž_qŒ ūđŋ=ÎŖˆDܧūÁĪi*+sgmē /ĮŸK>úÕuŸ™cËũîŲ+VWīOjN 5"aDRe‡j¤$å ęx ŗ›ú„I)ˆ7C”˜ŗZ" ˜!ZŧnāM‹œ#øč˛6åβ "—ą?ę$z œ§ˇ÷m3ęX—ÚŒh[—Ųøũ‡Í.wõ8YwiŪ$šË;åđbY& ʼnL:y8ûé'ēÕhŠŠ fĸ&B„RvÕ dn°“Ýj+đāúG‹f6ĘPØb/ûWcvÅ ‘AtÅē^Ŧ}ØM”Îv;ÎĶëÛÉNˆõá1ūÉ?š‰^ö¯ TÛŖh@z—HŦ@Đŋ¯îæ¸9č“SŅú§ĸŸŊl_đČ_õâ zpЁúŨ‡¨Šh ąĸŌ␊†ív„~ėĖyCNĒ"ĢĩƒŽCˆ‚¨õ(dŅ”Ÿķ{YáÕ:ĩ˜)"‰š"­ēqŪĒãh‰Ŧh>Æų2)ÂhF?ŨÔîā°¨h5^¤ėŌĢ8âčbjNĢŅésuÔN›Ė§ō'g?higD#D6´‡‡åC×tÍq;Oę´šĻŪ1fŸß1ˆ”ĨĒ&fĊjæ âÃ$$F’Ž­¸Āl5Ņø_oæ‡Ĩv˙áj˙ą¸.ņę nĮVãP…Ü_îûčšũ“2DDô ?Ũ­;ûûđŽ2ŊĶŨĐ@õđ¯axVö)Ÿ0Xzûōcô—;,' @Ė`†¤Æq>æĒȡm‘ˆ@ãUAT4I*ĖCŦ!Q((\ēŲ9M2 ¨ $!'ßy1L\Û‚ņ¨ \ĖSRË %Vŋ_Ϗ39|T\7ĮIAãÉĒMœķĻąh7úƒf'-Ų&×tųâė6cŒdQ18ž}LëfzrĨmĶm?ŽFhĐēpđŲÛˇÎ‹N …ˆĸ2GŒ{˜’Š'›ŠŨĐįĶøûÍŖŖX}ÎÕĮĪJ?+cQļ¯G™yé!™ģš‹áî2éCŌËá@Üąmũ1˜7zĮ†/‘J}Ę@h„Ö§íšë.Ŗ9Ņá`˛™‡–9„㜉*C-3âx›Ė4I"¤Ā•ú&Ū:ہ‡x6kņāúĸ¤ 8v!ī´€f“iôl2– 5ķŖĮ‰GbŅŨŧ˜nwá&ĪÜĻāpd!+*J]îŽ%+oōur–j?jLDCqčĀ"Ū6Sē\ŨŸčíXíÄ50ÎGŋ3g~ŠDJ€¤ä`l›ÉÃ^~č/&šÖŨî(Ŗwīī~ÖɓYÆŗt”°Ÿ`ŪnŲįaÂ&Īa;`Bû(¨;ƒÕ~ŅÁũâÚŗiũ,€ƒMaü€Hfˆ@|Ū‚ *0¨dV#Ríš$iÚFĨŲ‰îpB‚Č(ˆÎ@Ŗ*ˇę=UM"ĶwmÛL‘ķpŗv˛Ĩ$Ņ…Ā^@“ôYŨBh“CגU“.ãĻ/—¤ĘĪR^WŅ)’đļƒûž)Į]šŅjšH­G = 12čfōpšæ—-Éí¯æîĸH”šší(ŸŧyįÍ4ÍؐĖĀ€MŲ~YŊ}rÔAíbzSÔ5îšÅ"Ąo̧G!wˇī_öN×Â|Č.p1ŖDË|ˇÅI4×b’D/€ÛģxĩxÔ˛;`ڝE =¯HŠrđšŪlĻ[ží%čĻ& ëPÆ?}~!M˜ŗˆ¨ˆĸęÚ}~ōü^ …€ēŒˇąáã|´}Ŋlžr†÷¨Zü9¤ÖT…ëΞĮg)nöŗŗõTėßX6č5°ßG{ ųgÚôŠō}\ á7üëazčÍ̓ĄöũãāŽoˆ €ÁXąobGFFé´0Ũt‹îœ’ŦS,ķk=đ­˜7Pj0c´.¨i8é”@ŗÃŸŽ [ŽÅ3QĘM“ĻĒžˆAsSŠī­ķ“ƒqŦ'‰ 'Ÿäķ"pĘQŧÍŗiĘM=‘Đ(%|ũīŽknį°sŲÍęŒßÕÁš¨„h]ÜÖÍō<˙§w+Į ŖiySį,ŧcfˆÉū1ĸsHŊvVšDƒË›ŲƒMœ¯ ČŎpE&ūāûŽ*\Îڎw'šģmæq—ŧą{Ežlö5E{äkà ÷ņĒûíŗ‡Ū`’ĶsŊļöN>üÕž'd¯Ŧ韩>p€ —×` Ä¨ÔS=ŊˇG0ŸĨ^]‹EbÅîė;gæ/•8ę:…kÍ|´Î/älÖŽZv9e ZĄZd-0FŠf€iÔö!‰äpî•U ģâÁáxW•ЍųšĶQÎ@ bęãĢĻPã¤<ŌW0Ũf››ŪöĨ`†ZĨb9›QŲÉt´{ŦĀo:WįčpūęĖ4CĖ…,Š+F&“‹Ŗ¸ÉĀ"mĢ!¤Į2ĮëÕS,ĪRŊú¤} ™ÛúķÜĮõí(Ŗ ōž1bxÁ_I—hŸ¸†wŒĀžĮėĪ eˆÁŨëkų+Ô!—}úUČö ÄÕš¨C ŌĄTĪØ0ŅjŨå$‹˛m˛e=†”ļ#Ŗ@€l E- ”jCH1ZÍoŠä [Ms6ã$I2QļŽŅŦSt ŋã#~PįmSĖÛęũ"OKûiÍ~Ŧ\9bĄēI¸zå8V’˛˜—ëf´žpČĻŌ* Ē#¸,įĻ“r6'īˆģö—‚š¯ōų˙×`îĖ€ˆäą"H–U›-ędēéRFž­,v›ÃCŌÅËKLo§åa øáéuŊ°7O5MŗuVJ€›. !\“öāķp]ô¨îqÛ?U=šmŠĀ_Ųūī0lōûŠ×§ŅqīũÕŊe Ф>rÛëåä`›Š™ŋ‘ËÂ1C+HÍ1Q]@›7h~¯ .MŧÅœGNM(š"`ˇĶąeãÛŲõŦû¯%\ˇī_}˙S(éõĢGEÖmN•° $)…ĢCÔ×Á’{;­ãˆīŸ_‡°4%B3‡ā$0 ÁÛĒŠĒŽGL›9âā|Ĩœiũôųë¤t(j`"î@kô°šÍ§Ŗ­?ĒÁíFuÛÆ°”'E=zšWââƒ_.ī;tg|=Ív‹Ņzš4Û;cĖđƁũūĸJ6$įc_€ CÄÚ_ÚĀā„€P ͆ûö›Đ°=Ũ‰ĒÁ¨>ë͇@~"CėÚcLŗĻ(Ûi™ÖĶ]ɘߒį$DdV4Īi‚ ‹gj˛ÚfōĪiĨbŦVĩ)š”‚õ–ãļÉsõasszuķúõŲ‡Ë&4īĢŲÃËícp1;””ü×'r~Éc~ģŌôŖ‹] %ŅCųņĸ2ī@‰ČĀŖcĐ$+Ÿ}ôEÜm[ī ÎįIŽčˆļĩ쌜båNū‹‘D]Ôô¸­đā‹ÅŽ8qY;ŊFÚF‰M|â­Ų]|úø3OUwÉÑú÷÷ɍΞOŽ(õn‡Ã‹ũĻã‚Caŋšw/@ÄŊÉĻįé ‘c{‹Û^Š3ä|#öŽ\jÎ@• ,š:‡C¤$5ãôâ`|9į]ØJžAšuŧoĸ ’˜zB—Ūž9'U5ņ!™ú/ī—´‰Á§ÆŽ, Št>‰¸\×ģëĶBbˆ ė}ŧ|}YžīžäŠÍŨh÷Sul”f§Gî͕ŽOŨ(ãˍ8$UĄŖ§'ŗO>}úeŧ>ųÛdņ?})Ģ€ú`\ŪLcdŲŽŠ{öíiÖĮdąšs€Oī¯N\†€tß5ŗÛPMKŋ=úéúá¯v~§VßčĄģœgíļûæđxUz×í~.ğe„08u÷ėeo倝éÎP ¨'Fûígč=đ9PwkĢ"Đí[0ŒAM˜‡ģwČ[7ÛąæĘļN:&Ā[Œ  ƒŠĒuâ(mķmŖf˙š^Ŧtöācß˙+ŽhĘąEpŅ )¨EdÆ‘ĐÎęõēžz2‰Õ(e?ūŋ Ė:g‰´ūöĸ›ÎCä$ķËetŦ=ū1zpķŽK/Îēķdōų?}‚éqâa]$ŽŗŨúéÍ&Á‰˙7dt¨hŒ]qô֐ģ{tVf)‰Ūˇ7ąŽWĶqēū]—|ôŦ9?Ÿø<œ?sWx¯;•_mvSãZˆŒzũX%Ą# D2† Á0Āõ& z#5ūĮæ_k'†ë!œm8&C æŊ˜30D ÷‡ĮØoēqœ‡õtĒ+8¨aŖyâ:%ô›&ķ‚Ū™:t§7?ž^ÅĢšMĪ—]ķøąC‘­"ąvsjb´Á †`,‚­Ķ&LnW4Nō0˙Ĩn`,Įø2L˛Tvš­/'÷>œĩŦéüqŌL>,ĢwgP\Įínyq5{ōÉč¤âņ›nžĒŠŪ^?lpü¨zLl¨ņž{#(#Ė 10anļÁƒ–īÜ÷Ãˇ~6;Ę^ŧUOŸ$%]æģJĻWO§Y˛­‡›€#"{&"bâÁŨFƒ-­˛ë0ÆõÄW< *6ūõ0 /´~D'ܟ­ŅģÖ Ô”œS23čYLHŗhĮ9¤‘Ŋ%âOˇš›k. ë*ĻŦ‰˛´ƒ,Š`úĶķ™ÕŸ@”Ø’.Îëæz—ąCuEgB!ĸÕF]Ī䀐ĩaü)Lļ×c'X™ŖmŌ‹ ‹§=H.Ÿøôũ{č„ŧĩp˙nfé%v˛ˆWGÕíļjaÜĖÜÕĄũå`Ģ4ŋy7›Ÿ~H§ü>0t@†ĶW;Z“:Ÿ+Õ# ëČāwÕácWũYŌâŠ{õ>]ÎĮ¤ôĶũrYŧ(Æ“,1h*ø/bGDė™z;čūĨdŨaw—ÕC6@Ãų­l6tNCŋí[zûå(ƒ‘ô:j´÷éL9>͋" s3˛ÃÍY›¤ĻãŦcÉŅļ´kFĐŌlēųā4vrŁÎߨßĐŌÚí.°„ÎŌ# ująC3é€4!}ų¸ęÚ6ŗ€´Vה;ēųļí>ūbÇ~úĖ{įčöÖëãGB´ŲėÎjš}ūûķ=>:7į­+Äß+âMįY7Ģ%M–‘‡ķÍ "ŠØEÍ´ît2/Sœ<‰›Û*yœœ7$Kn$Ōę˙ĻrŪv[BÍR$ę=ęÃã‚DÜSÍ}´ĀÅ3|¸ŊrĻgĪúĸÉAūŠ:´ã ßŊkéīũEÅ÷,gC0p"q˙ĶÄõõG‘.Zû>Ŋ?éPVu&Ąˆ!"j–’“ŧĄ‰oĻi­]ņ!?éŒÃ%ͿΝ—;vU-˜d¨hėJ§Æ,F``j^ēĸ4āP-‚î¤9K6Bđ—Ļéö:ŋ>/_7ňŦŠ#ˆú ęú!ŠŪž ­žũKLVˇ_bwīÛëϰp˜6Ųl|zQ͞Í#ąATK6ā°UŖ6T`…ql0sHÁŒ?™w1[äÉšã'Ü}ģė֗O)ú÷'‰vÎXܤ93DDBfÜOmĻÖ;ûī ŋü‹`=$Ũŋō¸—Ģ˙z؃ė¯"Yz”z€;Ē÷Đ÷"1t†¨D€`BZéIáŠÕ%nÃøwŲÜ­CLY}“æu‹;ͰL%OŒéŠ!ĖĘ㋊ŸĻY[2. Žģi,‘ 02i›Ną3œÄŠ ™IķŅTŖŪ¤$;b‡::8ûp2īF“Ã9īĻ_^wÁ$*LOķI{])´bâ:x: I ŋ;üq|h™ËožØĘÚæŗŖęšG´Žčë:Į”ûp2‰cĢ7ą“üŪ„Û.ũÃ÷ĪŽäøqįœ/u~vĐ&yD\ØjøüÉ9îˇƒof?ėKõ”fRū÷ÁšqGCķ¯uīî€;„aęô_đîŊ1 ™Sb„@ŒÖž3ō4lĸŽh–U“IØÖÄ o)ą H5į"šĩãm—BrĒō‘ˇõ“§÷áCˆĩņ$ aĖŌtĘ"†e°Ø`„=Čø%Ûcږ Į¸´ŧyņoģ4u ŒŠƒŽ[øn=iÚn1Ÿœ4u€hüđ õ6ûķJ&%íôë2lώ‹?uА œč…zig ēRē’YbÕä^ÄÜĪ~Ė>ųKøđŪG_„<…č3¨Ŋ‡NéG,&&âx""Œƒ}cļÂ`“ÄęûDEäū´!Ō_Ttˇų §>‰Âƒ˜ĄĸǘFÃŽiZšR8.Ęųņ_^úCŧjęh—@>J:ąā<§[t~žEęēnōŋ|ų6 Õæ ghha0NČy—`Œ`ęŠÔ´č}ģ ˇ1øÖr6LÖaūri1ēzíĶ.'´m¯y&Âėŧš[ߎœ @Ēb‚ qĩ1‚˙%f—W™Ēži°%â^¨ €ˆFtĮüÜÅh/ÜœēŸūöoEčŖu ŠÂŒ€Šôš+ũ1NJ" oÜđLōņÜP†Z IDATíøSŅÍZ¨n˜)Fņ1‚I|Hh Î{RqŸ~ü&Æf›ĮßGĮ Ŧũ>Ĩ–zĖ͊„$ņ ƒĄi\îFéGˆ 3O"UV‚F¨…¯g“?ŗŖÜÖnKf–3¤Ļá J\ĒjfžĄpö§øė1VmŪšöÁöĻ`ūqy”˙ķgAŖĸė>ūŠ´/ß'č/ ;ãdėŗîE–ķäŨ‡Ņí?ūęK{ģ'ĶöRĩ‰7;ääuk)d¸ß-AAAU ĄŸšØ;ተ?Ĩ>Šˆ÷.Á>E€‰ ų7ûq†x Û3CB@rģrfFbĊC"%0Ģ™Gĩģˇë\l…ųė֏ĩl|Ė@ #ÄLL(‰Kļͨ0‡ÉŅ­?_Ôŋƒ ĩâT-T3OuĢ%2`TcC­qw•uDĸÉæ÷5y?Īiä귞rŊĮ"N­˜ëD6Uč˙•Ōģ~Ŋžü´=ŧ Ą8ŦnÛņäųŽ}`ß"wtüIxo CĘĶ,[æœļÎī°Ģ“Í1X6úfūtR–ø&z×õĸŨMũf9'+9ØFIĶžĨ¸§6aÆôƒ3qˇ#2ꐭ8¤r"ņ¯÷tL}%"ÚPĪˡW¨†dũœnÚ N„ ä j2!ŠE­cõ<§^BR’Xd‰3č0ā|´.bĻõ­~]†ÜL†p*!ߊ0™Ņ!ë„Á%@§awđŨ×šĻ€šˆŦ”Ĩ[dõŊQYŠ.¯fąÜQ’MÛĩ ÷īëØ&_Üŧë'aą€­ÜËV/Šâú;}R­ėä›G$œÛ/6–ŖŲH´¨ŠÛįWÛt6;ģXTī>ķí“Ģú0ŒîûiŨœp¸œduŠģÄcÛUũa:ŒSw:ہ0@BfP˙=F0ü <ĪīŲŖŌwZoĨꡂū=7B5TQéáRrfDN ÍøúE;ûdQn]’äąÍ|Ũ¨HiŗK­YNyNjNÃĨcĖ’0)\â0´GqšrÆŪc‚Ē­ "vš°ķÔĨ¨Õv͈bŒčÄŊiū~ü^hĶPF1”NPp{š­ßޝsdSčŦ5q­†Ä1*29@ڝ§^Ū_ÚÉߌwgÎ×ŗY*ûxųĄkÂôc1Sč6Y÷Ī[Œ5ˆ” Ļ˛^ĩ9“ÕŦƒ*žŽāËæR/ŌGÅ2ˆävĶeĄčÖ­äc`**Ē%F53QS3ĸž“°Īņ“=ąŖ°—| :äß Ų>Ŋč0) WĪú=Z@Pã=ūÉF¤Ėš €k6kŪüåôāčÆ ķ.uŽŗŽČ˛Î7Q9¸9U¨ČÛ:͸—č–ˆ›ąđÅK劝1ĸ)ZĮ cŌ6`4„B–ūv‹_vRĸ ˜Ã¯3MÁĐßn8meF°ÆÄēZŅ‚™‚uä!°L~ˇÄ2ķķø¯ˆ*M}’…ˇˇÉA•%ÛĻCĘ× ‚ĈØ\’eësīĒ=~žę&jÔ^|t–-Y}85 pâšŅė{J,ģį w‹šîOˇî]Ŋ‹Šŋŋ=YēŠ‡ÍÁHČ4Ln].ēĢ÷t‹Yū¨{ŒÆLŦ@ ˙!áž<‚†0C$ ä_× +ŲŽz÷Ũ\€‹ęXTŲÅŪ\…ˆC0‡™oü<“nŠņ•GC&5ôĒcÛą%5YļąŲeŌ ĨÕ6V=¯Š 1Ë:ķˆUŌ‰åÜ2‰ĒY&˙]ģFIsËö‡ŽâčjÛAã$+ZÉ×y‹'t”•A‰Hœáėīį_#ČGo¸ųėė=Oē˙÷ę?6ۋ_~ †Nu{”¯đው'?™ä~,ˆ(~Ŧ8‹˛ÛÅÍ}}7ßÚ?ĮYŨōĖl76î&[ÍĖbÕ+ŖMŅÄ@ûžôž•4ļ{kZoYG‚€zFVņo†uŗŋöû Ų`¯œęį†úĸiįYĐL0S3`Ss Ŋė7ˆø¤Z_ĻŠŋ%lĨČģč@A° eČUeŒkJ3“É9l+u.&‰†Ä"&Ŗæ‰°îÔČĐ! ˆ;öęIÔ9s”–¯n ËCqM…ĩøÉĄíÎ')ÜŽH{7˜™ XúđäũÆ‹ëOŨģGŖį 'Њ_Aųž?’{Ī×`¨đɟĖf?:ĸiVD—4pę—0YŊŊ/ΉۍģŲi3)GģwĪÎ7qŌUÛšK;ŗÃØ H™* šššéūxū `i$fbFāū<†{„t¯Qŋۓ~σ°Ŋ!BîŅ ¤d L=l``Ôg°ŠRl:“wë§›jüqüúE¨ƒlģ0gR„m•%öÍm–­6ØF—ē–įĮÄëÁÔ,€‰9QCâ Ú­[r!ŠFį?ĸ˙įOÅØŖrŖ$Ā›6Yęf~Âסr{~ģŠĢS3B24PEQ åNĸžŗ—ËOųÕŗYÖė @ˆ'˙GRŽwUū)ACnžúYMh<°ëZ“îÕô7_„ņ<ŦîŊŒz´ÜŪیŖ,×m…oøÆ<čČAÜ6 k&ŌÚį$Ē"jĻ ÖįŠ‘#DvŒÎ3:rž úd[ėÕëũ™ĶUŅ,qbBÜ#@œ€ n* 4RDaáķķįĪ_\J—§ĢlÕrr9s°;ŨԞLrĒyŌĩ|ĶĨGŖũęx|đųCHŅŌ> ¤—%¨@tÎ÷Ŗ&j'1BB"ūwWeæ26"œ¨!€§2üdéĩ“Ģ]íšČœžE5€I Aŗ›×‘›īž¸ ˙áÁŽōBĄ ŲŲãõī’đYÖ€X÷áīxûæž0TÄ XēéŲ•}ĒŖO¤^w‹ēYÖø÷ÕčŌ'GŁļuŌĄoƒeiÁ}C*šŠ¨!˜JTDPҍĒĻ*jŌ't‚1õqúŒDˆÄÄŋ ž| <‡<ØĢšz×õMēhĀ^@“8ėŖ  Ĩ cw{ķė 8+īEX´Æ^Á’YˆžŊąqĖCL*Ūŋŋ]wFOF dH­ATÃRQSP"Ÿâø¨9ē>>ˇBÔ§•dđ& ‰_Lo7coŸg|mW8˛@‘  Āšú>ŽņĻĖų~›ŪЄ$b’M>ėvĢŖņ§sBoāôo˛—­KƇŲX/m;BĩéęÃŧļ&Ĩ…\ūŠæßlžļtxsīĮų¨.g@ĶéeÖåēž7úŊ šĀ°?†ūĨևŪ! ˜Ēî lÃ>ŧę~në߃ĀŌŲ7ô+ĒôˆLŖų>ŌĀĖ TɈQŲđãíš˙¸ā|ÜEowÁĩt°Õ֏UŪøČÚJŒQbö¨¨ÂH"StŪ™!‘3´>xĪ) Ŗ*‚&„Šãî:†v#:ĶĻyôK¤$q&ꩀn==ČŌw˛^ŽÍŧ82° Cŗŗ]ƒüÍ÷WÕhfŋØŨJ–S§Ŗŋßeím˜ūÂ!‰n_˙Ã˙Ģ4ČhˇģlAĮR›â?ŧ7“?ŧŧų•ÎŦNNh÷îRôÁŌj/ĘÔ˛ŅfŲB’•Ŧ6¨ĐLAzæFÍÔdøĐĸĒNJ˜ˆJŒĒQbŒ1Æ 1DĶ^ņŠŲ͝ Aûƒ´ˈ™’jܿܝŗ "y$ĩ>syo¨Ķ…—ģxŲu[ĘKs}RĖģ¤ pH ÛZ Ī-鎋mňÜ)’aPdīČ Í•kņčh÷#ŗŨëXChMFtG“5`#uV’—ÔĮLĐT„YˆQÛq JÖ\ÔÍČ^f‡ŨM×ä„]ģ˜fíÛeōqn LŌ]\üö?…<Æi˛0J2ËBōK . ˚"ūĄ:éōÅ×˙6ŲooĮ´%‘X×ųrLCõ“éIŠ`Š Ļĸ=CETĤ?ĢCĐ ĸ*1JŊëî[A­wQ)(ôҏFÎŦk'Pbļh =e‡;$t¨ŖŖėĨ¤YŨėŠĩŧíV}T…B†HģFr Ÿaā˜ĸ†QŌ>s̚)O(-!j@ö,[ņŒė‰A1ļN>,ˇMZXôįĪ×8ĄčSZ““]Ŧ ˆuÆąīI#ƒY$‡ĸŽ7 ÖžXBņ˛ØŲVbÂ>˛ˇRĒöŖCetģ‹ëõoūGõÛUŪĩ™æËް6 ķãFũü—cųÕßŗøĢŋ˙?žÅį“ÉO'ŗzŨ%ÎĀÅ&oօĀ-Üa^wRĀũbßOm´ßQz}§ŌžšÚׇōo†ØbĄīNŽë€?¯(Rß d€Œ*‹íoĒe‰ŅÔ1áãw//—ßmÂ1+fiŦ=%Pyūįžƒĩy{™ˆCä]Ė<ĨŖË÷‰Ą`1'Û(&]āÜ)P×ķ¤äšzÛ}rü_Wŋ¸ũfr/M{tú Ѓô2ˇē8˜žġŌ7ũ ‘) 0úĪÛcū€°ž'ūúøūķxÔ9F§Ŗ"/ˇ_\õá ‡ŗq–Ü,#.đļũíčú?¨ÎŠxw”ĪŌ‘jS¯>K&Ģë'+´œŊŖeöû<՞š^Ę4´ãÜš×úK ¸÷t ÷€2Úöžņ$ū-ôæö>ĮcŌū˜û“â›ĨЁ™ī āĀ”A“.Ÿ6ąĪņíÉåĩR—@u|D„íj” ŠĻ6-?*•ÛéeŖYÛ5Ļîm$E<‚%^Û@b¤4‡ÖP…Ėœē 6ølõįøÕÛĶt!ĖW¯ØMÃ#¸Ę×mžĖ‹Ûí‡ ‰FöXYŖÄ×owL÷âa†’\N&ã?~Ü&h v īüÅí[c€‹‘w‘žŋu<ŽŲ:ņĩ$ąČīeÆėå¸ÜĀŗvyu”ŧūôÕ`”0xÛęæäԕ@ę,ØĪĮrW¤ģĮ:iđôú3´Áĩî¨ øŸ÷!ēxG×ĀŪūšˇšáę‡ ]ōhD`Jā„@ŌÛÃŖUë͌R8åŠ)$Ųj^ņr›ÖŨ¸íÍĐæđĒų˛UĪã¨i-EĄ NčUDmŌL,]4QŠ'q 0q€čŽ“ŋ=+N>˙Ÿ’›Î7/];›ųå >H’'øâ&úØGôšĒĸ‘nߎœƒ“Ŧ(tSÅŲņöĻˆŪ‹7ĩĢōyH_‚‚ĩÉŧĖqĄßēÃ’ŧDĨޚT–ĩâ2ödxģÕ4Æ´ÎgSMgŒd$™ĻÛ<´¨w‘u<\÷ũŲPãŠļ_„H÷Z´ũƒüÄ>ö8tOäāāE¤ęŲ Ų é‡0jŔP&ÍŅ:­>PM5úĻ­gŽíŧ*2OũgE–|SæŪĩŅe-Ļ/+TŌ&ĶÄ4tFĔB/25s`Äû9fųw‡ŠųÕסĮn /–ŌÎãRŊ=|˛+Ģæ*2öCRbPD"”ŅxיDË`ôwŽíS~đŨ}Í8­ŌS;ž8|Ų dŖi’ĻHßär 1à Ų$6íŦ ģʍHĮ¨5펚ËKâԁyÄŪ|Bš vû_tD3îCz…ķ>C 7zôˇũž ¸ûž†øƒŊûĒJ€Ą<‡sûRVā'čyĘöģéAĖÆDڑ9 ßĀ@č´a ސ„„&­Ņŋūđ‚„›ˇaœ[x›Ú5Zûmé ##ŖË“¯ūézQAĢü­ß÷ZXR°ŗ(ÁVŗaĨQ;‡äëũeĘ ŠehÛ÷é$TģÆŽũ‘qĢ TuōWã÷mlwž”ž#øLÖąĶÆ1’rĖL ‹šŽ,žđ3¯1ō™ŲÕyÚ5Œ_u§ ÄxJUíDšÉ;}UØV€ßįĐį\îÖĄŨ‹ĻgÚtŠĪAß˙ŽŲXĸŦYŪdėdcŨBĸ÷õņÃA­Æûw~ĘīÚSØø2t0NŗøģÚŧ¯tĨƒéj˙=Ĩt ÜĖĀnŸ‹/„Cv€číß9‰čĀ´Ëp¸–`‚5ŗÉoŖ82Ė)Ximc+ ÎũĢÁÅÎF-h’Qä5yķąŠ¨.|améĶBkœ a9m„pHޞ•ŠĄ/­ũi;JxŅãWԚ –iøēčēĘĢ3‰Î™pÖ6QĮ2 ˛N–ÖąÕĄ/ĪĨPvôĻĢdnzf›`ĩOŋ}Öö^Lc­°īvĐ#l="đ,xmˆ¯Ô ŌA˜…—*3Ú(Ģߝڷŗŧ'„ŠBīèYu=Ô ]?=ãđÉÖtØBņĶí…OjÛO҃b“QüũLCÚoŸŒOÍÔŧ‘BFtJpd÷ü="9`ëųAdĄ›+š‘Ž›Z‚ ŖĄC/ ;B˧žlŒRܤQvŪWQ5lʘLnšÉŧömSbŽCg„S˛egŲBč‘ķ4;n÷H;ô Ø)!9_?ë5ŗáÅP_;Ŋh _?FŗaAÉûU`á¨ø3ĖØY$˛ |į,æŽĐƒ‰KøƒAā0āĶÅ÷đ´7ŪĀūí˙÷^’pč˛\§…sčˆ4yD ŒÛSzVH!ß^-VÆIānÔN§ķ­Íį4m3 XŋøøŊmT ÃhßŅũī0+Ô=e,°uŽ%3 ļ{ōĐZv Œ ­a æ˙$Ĩ| Ɨg—‘¨ŦvŊā °ŗšé9O:G$\YMŠXäŠĒAĄBeÕļiZŨ– Ķáã˙ômėdzúwĮ„™žlûķĮ$p¯Œ"ÚsÖsKd˜ŦĶY&IB8ác. Ŧ5Ž‘A¨ōÕž.{ĪN¤ü?r^Āëæ¸›j ĢMi{ėķ’ūõĮ˙ōžéT›õŊ^uoŋ[ NúhĩsDŠ„dÁ’iŦˆĻ*ØëØ÷ūôĪņÎ=ö^ūo'ŋΤ¤öyßû)9o‡ÍjJUĮ ąa„yT y#<+j˙î įLąæĢÅĶNK‘`ÁŨ ’ĸbĄœlŲû4Vl˛FjēUԓ8ŋ9U]÷Đ:Odk H#ö™LÔ(D`k›Ųäh=%ŊVY!Dc◭šč<€ļú‚2‘ üh|¯†e6ļ:ĀĘcŗétÂŦWÖv´‰¨ą9C$˙iOŋ_‘÷L9O¨ßÆc šĖ'Ü<ƒ2›ųíAˆû/ā°nÂ'č˙đėī ‚ĸö„6‹ €CËÄŪEž#`~U n™ K åëÉÖj#­ĖNÛOnęģNĢũö Õˇåš,ōa°Ŧ;­n}Uėü(=7eîįē]Ŧ';‚Ŗ&÷â=Ŧ‚Ä:Œ­k §râ IDAT,Á@ĢEīsžŋ/8ëöÄ (ņuą{] Él “`B@AČB(Ŧ…r1ęčŧhz–@SDL-%IËkĶ#háčQvĢßņ6(yd0úļ;ĐY‰ļ3lŊ2žnđūíęôâ‡48[Ąč˙›ŋlXõŲķc3ÕPŲÆŽ‘÷øã͜õ4­í ã!ļīcŧ÷–ņ{cČ!]ā0ņíŋÄ=Ôīl_`FBëĀ ´ā‘pĖĀŨÆrN"8‡I”›šĻ94Ē5ĪĮ ž—úģ0^DŲ‡/‹rFŦ\Ú9kĻžÜ`PÅŧŠ’ŠDZĮžeã „L`8LÖ9+IķūR&ÁčöēvÄëĄų~ÎëÛĖxNąčTeŋÚ"Ŗ°{b‹}dáû ZFĀÔ(ΆG¯āČŧËeäX" Hazķv˛‰~Ęā7Ŗ í†Ö´2HĪ‚!ē €(d43N´~Seqũm˙Ų˙c០VÁĮ/›ĐÛøX‡ąÍĶ*BĩUD‹ü¤%ßO‚~Ús?;¨h?ÜėÄßÓhŖÂ)åŊøøŲģŸö˛ g@2x„Ž[Ąš‚,°Îĸ¨ÎuŖ|ŗĖ …°OÛ­÷ᝂûĮĘ÷Ë!C Â7×Wļua*oįEéÃ\ŲZf qC# AŸP4–Ė,"’lXaYĢÔ×1<šŽXrC˛5Ŧ%W" ú‹ĨöH Gû&Fv „T{žWUoäë÷ {N­Ô°D.ODøz!Ā _ä~â“čU[!”B#žéöŲ×Ūģåiâ9QģFøēû×Åüķ›k{rÄ׉Ę_fũ(nAš ›U2Å.Œƒ}fā§>CDv„pˆyüÄōė>yЉų00ŗãŅæA‘ŒbņzėØj'É:`÷"E¨w% ˛ėø™˛øĻs눴ņŠ Ŋ…öĘņKQØõCŊXŲčū]–V-yĶwË&<;)ĨÄ(R­S(Ŧa„“k#Ĩ€@pŽxh÷&V ’Û} Ž#ëē\ÁdImw „*cpĀŽąV *ÕęÖ6(§8(oĶ Bņn™ŋŊiĄtH ĢVYaš D$Ō†ģĻUŽņ(…u€Ą"ÃĘڟ…åmĩĢ/Ūæ4Šŋĸyũŋë7ÖŊŽëČnČē2ÍKu4¤ zÆØ(ÔnZ‚{ĒÜĪČOU`ûđ4€§ˆÎ=nŗ|ŌD!‹ˇŋßš}ȇ 6ā˜l:ë…@<ëI+ÎôCtŌ6čÍd“]Ų-õXģFT?˜ÍOOŊ%ĸßëǎÃÎûjDĖ6đۆ@E{w–Dô”‡ jé+l ‰ŊdXXc‘€ |~lîņxä¯j1˙X{,;•“ī*l“$”"Ļ‘°ë ˛DkŲ‹›’OžyéWËo Aš Õö}m\´-…ā˛LP”]Ņé0 ë 8Wy=ÃfKZéļâjmo˙ôîaöÕē~Qß}Øĩv:p,ĨŪ6Šv˜eq7l6ŋˇ A =ĩŨR†ÃĶĄŲ'?îPrâ›}ĸЧåõ0Y[”Ė@@đ“3ˇ‚Úwą ãų°—„:”dKđD“!°Ą ,íČk}×^ÄŨ8Ú âQ_o‡!ÚÁQĘšĒĖ`{ŋöou?2Ė,ąŠ Õ ÁéŌ‰5 6ėA °ėÉ8ƒÉ¨ĸķ丞îŌ­ZˆöijÃŋv˙ļ3=qpO‡ Å7ûŸņ›p Aõ< V˛‹™Ŋ&4Ė„D°žd&{A[´Ģø´ī%ļ_ĒpV{uFŗ&3_ÄÅ)%¨~|}ę"cÃjÖh˛÷'Ër}RT}ßIF `Ø jĀHĮŒ H/­¤aiŦļ ‘yš#2ZŽžšÖ Åh1]fËĒ9 æī›…%§ˆĀ:Ö#YÔMļ5iOî\~;/FÉÃ˛.čķ“[ôIHąøŪĪäæ*åVÄå܋ҺāGęģĪrjTÃĨí&K/n^;{ŪJ3nBՎŒá&0Ņ™JB™:J€#ąõĨŨ#Ė{y_QğrUŸôfø$Ė$ņŸČgü$ąFŦKBĨ›įäzŖÅ“­Ã Aí3ôÄū€"# 0Åļņ.fúF^u¯ōˇ;­f3|X‰ŦMvūxq¤Ú¯šņŠô}oåUjŽĸíÔb[*j ë<Ō %]ƒ •īi" `FÁV8‡Dö[÷žíôÆf‹Z— `Ŗ,€†ˆa‘‰Ŧh9ޜpR:„ĢīSŋ­­ú:f3¯õ øõ†D ē1ũą@ æxqiJ%Ŋ}'ĸ‹ĸ…9qĨ´UũÎaęíڟ뇖Ę—a2ģÃŋ-×t#\˜ŦˇåÂwŲ°ôDžØÚļ‚ Ø=!g2íPBO˛Í=vÃ{bÅ7OÎhpŠ “Îú;Îw i­-!p‹5:ŧwÄûO$ÃVģåm›7ęN—>ĩĪ^ø={ŊY!čļŊ,ˤZ–Q´ėkožâJĪō!Š nH9"í)d¤ŲAåüPh'‹=ķ!€A8%ŒÃ°/|ÕĢC’dW•™ۛ%, J´P3: FŽR -ũ‚r&*F_–öÅ ‰m¨”÷ÛIĪü~‡ö´+zĒíDä‹X3ËÄ)ēë'Ėą•÷e–7§aŊKfCHÛíR¯Úx•ä˜I)Ŗ }îEmW‡e‰6f,Ā*{ølqĪY27÷ũ{Ä™ß|J 'E#°ČäRuĖĘtŪgY˜Æ!Ŗ‚‘!8rhI X" Ō!Xc >e]ûŖņĮ ĢWÛW¤IwĪŋGp]ßŪĆĒúš~hŌö=ą$ŗv„$`g5NlHW€ĩ’÷N9€Î1& qŗĢk;čG$s*Œą˛!ŗc–‘JD‹`­†F˜a¤ 49G šŗlöĻį|CäĄÃŪëōYøî‰ú9‡ ´Đvĸ›0hC…\/ęîģYąũ—lKŖįúģîÉfnË$ņ~™QŋãÃęēĶ39ëÂĩđI„­|Z6ņÉĻū´ļ˛¸˜įaB`@ņÍĶúCx€xėb08=}ķ0:vūĮļmh<„CH4!Ë}$‘! Č +‘<ûe˛Te؋nĨ/‚Ø+MÛžđœOuRÂõĀ=fųĘsU)2B˛ĩHėH Yj¸ ˙ō˛¨9 4Ŗu­˂Q˛,‰Ŧƒp<ėpÖoã,õ|NҌž FŽpÎ'PXD0ĀB;dĢŸĩŖgX;‹÷1äΨvėĄôāqžŅQčuįÕ~kTā ī/„¨ÛÎā[TađÍîA_lĖ•Í_˙ ¨srH’ŨgĢ;P}ŋņ? Ŗ+sŨt–äÉāļAW:SČõ&ŌB Ŧī< , nŊ'uß§ nŪ›×?{|‡@|svžē?‰ÜĮØ}÷Ø}iŖwM8lTûCe˜,[ „™å>ßRėĢË -€õ™đ>öÆōM¯ķ3/m/Äb[':îâĢyŅ+Ŋ$§îũÛd`ĶNždR´„Öh˛Ž$"Ų†šUQ‡ÛŖ`¨5;͝ö„%p‚Œ–à q“Ŗ°ÖÔmę‰gn:ŸyŠ7˛›Fk…D­“ĀN  ã )žÉ&+åėŗ­D…ŧU‡j€tāÖ˙åŨ‚=cËĮ뛨 ~ņ.P~‘†Ŋ]íz|ģ"¯—õžáæU{Qg­ŸŸ†%li—8nfŖõĻ_ŽļÕŖßãØ}ĖåÔ,Ī=…wcÁđ§2iĀ´G)3 ˇŸĖđ ˀŊ˙iP8Hoįé6 VŲˇqžÁĪ˙õMīE+œžeãĄąÆ tD–Ā)tB€Edf+؆jŌ€Ž*ņâÔîâ;IƒĻĘÂFŠQ‰ņĮaĄUēęŧö#īߑ6œø,mK †‚’d,Ö"ī> <ë Ü-7hŅ!Hg ĸ`ŽČ÷TnË0â@søE÷ÁĶŅã6ęú2ĶBąTlˆY2J´Ž,J1qՁÉ}!@ČdĘūį7(’X|ønhßßlšį4V•'ãXGŖi ņ&rĒ#—ŧz•<}Ų6æÚ,֍*r/5ŖûŲuÆŊÎē’sQn¤ˆųš§”q…jž•­Olܕĩ:ęŋĩ}‹wGø°yÛøūÁę ,€Øßbûe†ÂøõĖÃîuƒGõ‡™ĶŊŽųk?ŅYoĄī5Î0 @ÉčŖC@fÁN˛ēķ˛LgĶpMöwe*eK—gœ™~$;ܗ2ąų3Ė>ēÕd‚úæĸ*`LuĀ‚€„e)s [Ņ5ŨØđ6‘K Úė €Î …[H~E…Ģ{ËūšCepŋ… ^;Wø]ąi}ËDË>’gP™¸mMĪëđrų,¯ķ°}¨z´÷ŲČoŨFŽáąE)įŊ×K‘$•ãâŖƒaãË.Ąßx¨ôŪÜz×QÅŊl\~@õQx™Ę[ũÂL0Āë¸ÆÜO'MáĖ’Vų&˛É}rû°˜ˆģ­9Q°—^ė§ļ}'šOEûŠMüö´ũŲ!\ˇ[ųĸæ~¯ŪÜ~¨5:g‰P‚e$e‘ŲĢ4äÁÔn •Ŧ‰ÜôæM0­7'‡m dÔߞm/xß÷ãWīƒą‘ģÛ|T.ÉgËցĩĩĖM$…TVģPŽLl/GįĶĀ  ˜]qY5•ë3ēÆaRnđlæufiÚęĩ …F4čYÁčŦ', ÔA˛nOž#ļŖ‡Æu_Â(_ÚĒÂ4Īž/ūųŨ4°?īu`™ÔŪë9éé–w ffU†ķŖvķl&ŽĪŌvąU/‡6Âu]¯ˆ!ÉŖ áāĪ|lĒΚ~x§=ûąęD^šš{‡›NčŲĀDÃĮŧ]įŋžô ė1ļ§(´O‚ô'°IüzŋÚĻ€œŽxįc6Ē—ĨČw*ī?n%[`pä$I° -Ą§“‘ 4šãÛxé”1ĒŽVš˛žöŊƑsXŗö? áûŲ_?üiōŗëŗūO­…D뚞öZI`W‘‚ŪEž”äšĀŌņ$Ļí‚Z`$įČŧX*ˆ ŠŖ:jŅ͝\›N1č/Ją)á^% $˜\cI€sEЙė\*ĻÅ..tãÔøôū_ÂĻ hS—Īúīw/ŪÆĄGōvĶ~Z‡ŋ›jl{ģÛÅzg į=˙ÅęÎMK6ąJMs*ΤAaQĨÜeDmŗĩ]×fI‹beŗ^ˆŒÉ[wģ]Ÿ]…û0hؗĻė}H´ĪLŨ‹5‘Y|ƒû°8ˆBøÃũˇ–¯“?ėœāÍøëY+KÂC¯ āÄ‹KOĩöķJ>˙Pæá؟=ĖĘéÍü—ķĒÚ5Ūb=†<¤GM(Eü~3Xū^ŸŊ¨~÷Mũ#ã1sí2ã¨õšņYĶņA´ c%9ßõí.ĒūĸΝ$CŌR1ķ đž×FŽ´§ úiŌōn3ĮĖŽP0 ļ÷əĒX@Ō ¨j§ßÔßISi¯;CûĒŒÔ‘3ëĮŖ\}XQīķ?ŲI/šŽÆ’[9 IĩŽˇĒæéŠ´ĩôy˜lëĐúrĐČŖ‚vwëdSE+%'xâmÃr§Ę[=`>ŋ™&ļ[ íĘržKŊ9EÛËĪ÷;˓žsODãAP‹Ozt`@ņ냰sO00ĸŌģĩ?ųlsŸO/[?ŊCĮĀL¤!a,’Ķm~ÕÜõâîô.ũÅâ!΃[7­]ļëN3Ļd…séWm~Üøw&üsōüĒüRī†vlõŽuä)cÕČvGÃŖQÕ}ôįåĐSŗÚSõ(Ûæ,-€gįW;RƒĐĖÅėz\oŽØY]7œˆv˛hX*iö=B*6’€=´ļäcY‹Ēų1eÕ5$\?8R_úŠéô2L‚?•7ŋŦWewÅÕ´3ą^VŖöĮ!Īîī1Ë%'ōDŋP“ž?Ęcs×QŠĒĢō-ö3ŅiģÔz–wÕ3é3Ų>N9”ˇ՛•ūj;q“C&Ū¯šđéJÛs2˙}š7ø†ŸRk+ëĒČ´Õ‘ üŲ„x÷ãĩLāöĩTč„#0]§į—ÅCM=ŒÎĮ’$ąqgõĘá ĢĄDc‡ļéĨbQ÷@įķģ<ũÕÚüņKoĶB‘Ž-fČĘŗu"Ôņ_æ|ĘčĮ  A<ÍģiY™ĮĮGŌ8Æöf×ÉxŲéĸ\ŽT&kuaę†ËrTŦŅÕˆč˜ƒŸ œZˆ†fdŧúakyŲ?n'•G~uéízĶD“@@æEūŨŸ…˙ēÆPÜÃtr´ÖëBĩŠË7úz•°IŒíē‰ËŌ8Ė`āŧ`[F}>’— cōeĸŗH.¸jú _ Šu;Ëŧâ˙|.Û/BjŖxJ(ā Üd{ĶĀ!FŸh4$ß ’C Wž2#Ŋãîg6ķÖG~…X˙t,Č:Á$Á‚Drz4Ū ļųe•U0˜Ü΅BāÉâAŊ…ķŦf‹’ēíFozß?2žNTøņÅdRÉü÷œé”ŗg3i/’ÂûʍŋÔŨÛu{ąjBoŅą@+3dė>Üi'öR6ÉËÁNj*¤/×õd¸Ūv/Må0jn6>:āŊĀ@0)?­“ãMcmb93įÔæ€m”ÜŲl–{Ūî]>锗éį&;Úč=û]ųí÷åķú–"ĩ\~á>›×Ŗjŗ¸Ū ļÔŅ00öЛ5éãŽÍã8oōōdŨO1œŪ7ëÚgˇš-fÛilļ•čWÁ`ô˙U!O?6ŊČ=’÷DOôžø¤.ûÃĸČMĸŠô$˜°‚ũRÎÜT nZŽķ—\čՂ€ā¤M:<ė4QkT”HŒE[AĪ~ž;(6ÁēüûÍËķãúö¨]•øâĸ÷ŅmôčņfzūĨęDŋ‰^d•˛‘T `ƒā1sëÔÆzĄö”ķũMBŧvŨ%ļU‚M:Dī¸CQ&]ŲĖo‚¸ģŨUV(ĩ%Ų=Në`™Ë8(Ŋ[K2Ū6Œãū‹ņQRx"nzíg‡ē΃,đā~zšÔzņkDķ§× ū¸b8šz¤t<žŊoôvvÕPúF1CÛ2F˛@dyЇį?%ŨV(W†Z”'ũG˙§;Ú´Í0ē˛0NˆŅ`ųl įInqŗģųY÷Ūö?|ņŗû…Xī SŽS­lBZ¨ĻĒrywŌ"ĄˇY*B#o˙Ņ•Ŗą_;Bn×Ų@2lÃĻį}Û~ōņōzáœĩÖy6NęŠ[ęKWšŧn‚Đ”„[ãŲ$˛|Íŗę‹K''įōz‚Ú§/žKNËûwmúX\ë-e€Ž¨R”‚ Įn8ž÷u§ē§°Ylëļį›wr8CO~oF­Ą펎u\ԃŨTyĪ3× āåg_Z’7ųéŊøqÜß–ũŖķ)âūÉtˆO„ø ˛Íō[¤­2ĪÆ,–^w÷ú­ŠMrjõ^1p @H,™ hč\Ķ’e] ĖĖröŖ‚ų¯~xĨŒ<īzē$vj÷Ŧ ‹# M}Ԕ/eûīQ Ą—.ų`ge’×qãdxÅÚTá@‘ŽWžßt¯ 97× ‡ī“=Ąq_äV‹H’Ųi91B—ŖŪ;NƒĘ ˛ üŠũĻļVxĒ`nlŒlY›Ūąa3Ė“ŽíY$ŸĪlÅ ÂcUn†÷ÅĢ7Éõû^ŖEŅ1å‹AÂĘpĨüEŖÔÅČÅĒđÅÍCĐö7‘Ģ‚„—ē™Šî ۔Iwŗ–vÛJƒŨ wkHēÉJ„eõú˛ŪÜ&évåãIßs°—vîËRđ)¸“Ÿđ$ņ9@ę÷¯û§]åĮZ8d.žįāHtņ]ļPlœeKč<ÁpĀĄĢ KĻŅ$'tŸÂԎ›‚V§Ëéí´>Y•Dl7É×ötn„ë~k6ĮĮŅfų—a`‡7›0@ĩõ5ØĀÔÚ.‡ëĐTģ:ŪF[ĮãI}1֓›‹ŋhūlXd[ˇSĪ:&˜øvÔqģ~WčÖs.ĶĖ˙‹…/äXCoT0ĸf*ä E')HS?W?l‚Īt^ËŪbŨ÷Íōb!ŧ°<‹WüãņŸ7ŗ•d?ŸŦö‘ KŨ\ŲdWËSģ^ĒD"bĒâĨ§úYRo‹Ô†­Uõ닩åüŅøí‡đy#jyÛ(Ũ˜—ãŲT•¯T¸4ÆZ7÷͟Lŧ7wĀ“‡@üäôlļ?ŊeBe7ƒ7ÕIôrûؑo=˛ÕĄ2–  DĮĀÚ9ĨkbAĐĖ.‘znß;]īfĸØŦĸÉÆ:MĶÕųĻTˆ";jUųĶôE¤Ú÷ú@ŧ]4­ëԚví`Ōpqõ¨9ژXø––O;­/"_ŦÔØË–ãį}Ųg”ÛĐyŅ0ĐJw*˙üũ€w~0ŌZŪAŽųÂļf„Z(tÎyiŽ•–q’jš[Į?ë5—'•ŠĮ}Ō†?,Ķv‡1âE_wĻgŲŽ*j¸1͖¯t÷’ÔkĻķēá×ë ?syŊ î¤˜úãš XŠSÕFúM,9ä<6yg`Âˇ÷ß­ô´ß‚üˇ ¨Ę~8ÁûP ÖH~R>õä´›ÄD,~Ã$PŋŲ…ķ~ îßô:kŨ Â6ūüą^?ûü‹lAC!ˆ‘%0 Pļ q7?~S;Ļ‚ŪĘ<ŧ<^‚1ČŨ]žv6čuVŨ€ ĐQ"͟üSOÜũ{N†e›û[u1ĩ šļMOárqEapÚ¤QëÄ}ßß]Vx5ŌĪáč$åPaÅĩ ]ÛŲn˰îÍŅÕmf‚‘tŦ“^TØqŨXÕ4$>FÉŲÕŖmģ‰ĸ‡ÖëegĀuŧe"Cė;ŒũÎ|ƒT´›ŨŊ§G5˜ ûā¨örˇļtßøsiMˆģN˜'Ũ2\7­ ü>åŨ”GƒÄ0/îģą~¸š×ī?dë`Ĩ‚¯õQũzÔô÷ķi70"žé+8P΀ûŠčÃŗŗWԈߠĢöƒ:īäûĪņÃë­Û$Cĩŧ™|Ÿû?#ņ˙ü¯Ņ‡˙ ãI(ŅōŪ.öújĢ•pfŧ™géZ>ŋF˛*\ ŋhîō_ÎÜĸūĐĪk=ōB(Ŋbüæ•ˇ‹ž\gŋģÅI.û72ŸéîÖyĩįƒ#Į°ģ[Ī qÉččã×Ģo [U0ŧÚå%Ž%÷f.1QZĀ”–ûeåģŸíŠÖfƒRHœĄ~ędĪQŒa°vąĻÄß%ĄmĮúp#ģԕYįėrģs^–ü隇÷Áח÷æėŅiŲM¤AGŅņl׈•†ēĶ‹{iY=SŅđbāĩaŠx€€`}ĄMß)YēYŪũņ¸§¯uy9z/dÖbüx4 ’rwĶ™ZØ-9”{õ,!Ķ'_įˇA˙#ØŨļw2†X~'?ŦŸ=Ül"˙m4§šYyá=üļ§æ˙ĮbWXŪGą[rŅ ĖČÄ(Ų˛ĩ‰lÜaÕAŋ^Đa4ÜÄÉO˙ūÁ;ÂĐĄmļ_í”Û%=5˙ÉŧØūáļŠÜS}9 ,28VŽ…°ä‘ŨŧĖ›nēôMĒ~UŧûÅ0ģā•)6īB.ŽĀEGīĪmōĘa OķßÅ$âŗQ-ĸ´ÁLyMĀßŨÃ]Õũ…›ídVČ#ČíúøĮđHU?+Ûc˙ĩUŊČĪĻĮŠė ˇ´ĪVčCŌÎĮIŽcĒ—gžĘÖĐKâĶ4ŖāTP´ķĻģę ㇎(„7ęUnpb”*ߟŸ§ŊPũā¸7Æ›w×ŋ¯Eį|•ĢxÚŌvUtÕãsÛ „]ƒžŒĪ¯]kŪŪI‡Á*õ\  uŅČz§Û`™Ō¤Ô&™›ļšyëîQîķëų6đFŅŨuUa`>+^īZĒ“4Ŧ–Ę?äkĀ>¨‘@üu¨õ#ĖäũņÅĀô¸ĒüŋíŊY÷áîCc›?ûú˙edR€ŠĨ°„,Čš@XļV֏gŪm‹PÉēüđîīÚw}zķû´‘+ĒŸtj˙Ûšũŧē Žļa@+”ÁÆŧØ(vßĨ¨rXåĐī}m\Û ŠŸgŪ;OËcŊ^^Íŋ*FgąčĨËãå}Xž|° IDAT OfE$b4ŋžôUŠŋĸŧXĸwë˛iuãXwå6Õã[ ^˜xĨĀŽĨžåéĮÖ^ŨĪĢ ×?>Žī^mGGy­Ļ­ĢĄ˛­F‘Gņ[žÕŠžŨŽķANÃÖī(æ‡į‘ßöī‰ŧZ÷Ûē¤bėšķÖu¯įéÉĨī—Y$Ķ㍌˙ōĪÖm§Ĩdđ<y{úéāėåjûŨķgČĘū×iš{Uâ—!y°“ÍMápđË~úí]I¯Úą‰cã\e­CÉû’JƒŒDd÷ĻDëĪT*"=ŽŽŪÍ?ûũúę‹( 7ž‡ WŲō!č‹?ŧyūeÜ~›S°ŠēČĖX•}?k’Ģe8k7ÚUißqßҰ(Ė…owN*ŊūJ<ÖÉ=€WMdøT›Ë@aiÄë>&ž˛=(+m×.X§ÁX+Ŋŧ!{ä†i!ŧ"+Ä īSí'§žŠL(›Sę?Kã_T‹1˙߈~X×e˙*ܖFOķí:Ÿ ̜ũYåÚBbĘK1đŊßp~ūXΟĢnŽšúŗÄ9#VĸĘ.nŸí¤s—/FËmÜzč[¨,•u ŗl&'nJ˙w˜ÍStĒøHHØ=>´ŋ_Æíį2*·åĪÎ&—Ī û,{ĩč#MÖÃā¸jŦŗÖŠ!8Ƙb,Qė„CßÎOŖÂ‚cX_&wŪh]¯îz[ŗØ –NÆÕßôš{ūlÍŨ† ێ'ēĖ]ņbžZwĮæeYļUax0XĢ›v :ÕöįniGķÚ<[ykíY×ūk†ŽŦ„WļĘÉa:2´ n–Ų(ŸĶHÁšëáNŸ{› 5`cXÛ 5.ŋNĄŋ¤áíÍv*#ũ/ް0ŪégŨŽ{ķĮ‡I`Žū‡ĨŅ MŪæyĄwđƒâω ÄŽ<^ ‘0Wm';Ͱįbˇāĸeųhœz6ûNZ‘ĘEŌÜŪ}”ļž†ĄæĄę'Ąˆäoæ˙ŧ;;ŊŪ­Ģ^īÉû úė'â7dîˇŲ}>3ķ‹ÚYôü?Í{׃ĄŒtģj­ų1ÁžöīsĶ*f H "‡n¯SŗV€ÚƒB„nƒ mŒ&(ŽÃw_cĶå{HЙ(=~ž&Įו „Ķ[3ŌP=fj(wYöÛØNܛûô$(ƜM6Ķ:o"ČÚ~šÖ›$ÛŲԟįJ 0ÅÜL{évMP)ėŪŽį)pylMr„u›ƒváû늞B&”ŽlÍv6,ģŦVēĻ´¨›Q°ũUķm“e×ŋ}ÕņŅíĮ‚¨ĖŖŧŅc*Īx×qáVŸMŠš—í–‘€0ĒǍZ—c‡‰Ü´zW'Ō~TgVyÅ}BM0j~įŨ6ÛĻi.\sü‡ĒC‹ĢäļžĢŖA9˙čoēŸq"AāĄøá`É@ņÔäZž8ũpëEEmĪzí—îû—´q5‡Bž˙XĘiüæĻ—×HĻŌCËČ ,Ŧ&ä,`Đc÷ŧūđŲ•č4T/ŋ|˜˙æMS6&ŠZÕ-üiŽ‹ ˆüá́ž×ãN‘į;=Ŧ:ŨĶÕbØv†âëeŋÃÁxįšAģV~s3>¤Ô eĻúø<îRÕL’Ûr6Ø8/ŧ l”›,dwĄÎ+S ĢQįwū‹ÁģÖAÚnä^>ʑßICĶĢßzņTuuü<t]Y_Äo…Ųüëv—kĻû4ØVo\gø âąĐģö˜fųúL|čûÛ%ŧ0(zKÕ^ËG 6ū÷IŅŧJ#W¸(]ûÁ6ęĮífúšė}5‹/ʏM˙ž7Ŧ?üą8›üÃ&z[$§_G[™ZUzO1…OgYü#¨á¸gŗEØŸdáåí;qūæÕ5}švßfŽ<mNJO‚fcr XqšZd,ģ5‚‰‰ŨŲ gģr>ĮãĒn˟Û˙ė_9lģϚˆĩ:woMođ˜_HōúƒAy† Ũ4^l‚ķdī¸čŧėî<ŦYZ cÛ6_ĨÛ~1XkåOvaĄwi,APPUúķUŅiU9Íã`žRWĩąˆW;OÖíŽ_•ęũMë4ĸJ“â6Š3đ᷏gŌ?­—=é÷ÕĀŲųōņË9ŨĖF‹×9Mžß;ĐëĐe˜-ĪŪ'õŽĻyZYĖĢ%aæ÷,Wõ\l•îfĸmæÔy)zų~"ƒ]v^ļ+ŽpÛ¸,ŗ°=ëņĒ‹w**‰údōå÷G>ĐúÁĮvŧŋĘā“v Ä?p[žūãÖ*Hĩ:Õb¤Ūö×w•wLëôWĪãįđDCņ@úˆĀda¯ŪAm÷ŲŅZ@–Ļ’ÚÛ;ņŌîĒ˙6› 6ĸyšĢ)‹?ŧ|™Ü=,ēũEãDˇ7|hŗqŌšüļš<š z•[ųũuŸ—mm`•ÁĘŠdįäŧ¨”šÆfĀģQÎ<üĀ=ŋŋ‹Âĸš ķ´@aFË/îõP5L1ļÁuÛļĖ€‚•Ÿ—\ëNˇHã@LĢ+hĩrįÂĶ~TUuōĢėzTŦëŽQU[„}õ C2)¯ØvŨ #ƒÕĻqaėēŊö?đ<Ē­ŸˇŽ’Š —QIÖ1¯ŧ_ŅÆÛÎg_Ęō9˙2ʅ îōoĢŪurB°-vŗđÆxGÚöíd€›˙Z,ŧ˙ŸŠ÷Xļ-ģŌķĻ_Ūlŋ÷ņæÚŧi€ĖD%HU¤ĄŽ õÔPC/ wŌ#°!)J,¤ .‘æšsīņÛīŊŧ›VL”ô #b­˙˙÷=!˙\:„„n˙Ī >Ÿy›Uü$¤igŨd{8;/ OėŅē“9°4EK‚FÚī5 @˙đ|$Đ´š ƒCņ~ą‡OęRT/?äļsyô°’(ūũÉ7W_AO>jëIģmmv™m¸]ĘĒč<Ĩéà EFƒZP3^Ņ ° ykÛX‚ŠņSti÷ũÍÎb¨MđÄÛ%­"ōŒä” #Až AYD$%ļW* 9v{{ąl^öû?ģ‡$ņõžÍ——Ea i‹ī v×Ëŗ`Ģ€tÁÜo!ŠũđQe;RÛŌŲҏBM=5$(ĐđnsĘ}Tz1एĢ‰+rÜģõpZmnjsČ#&Û-Jv›=žģyø˛ˇÎf“‡ˇĖ|üSŦūēŠôW3.ū{!Ygîķķ÷š=.Å~üvĮã(iü[ūîÍĸ+u (ŒĢ0‚†@Ãu¯4 AD$Ú`ĨÁ)×t bcZ )ÁÉÃÔoüņéäIø¸ú˛?įģÃē;úîÃɧ͞õ–æÔ~,å~ņPõF{‡~2ęE[lr ňĖMT¤ ēî]ėęŽģôōõ :V&í´-ƒO¯:S<:9ãBKqSUã^äyŸ"‚¨öƒŌx ŗēİĸîQ[xkŲĀÅ&Ū3vđŅė¸ēËG’û‹’˛ÂÁ–åTĩĀå­S!ËG+bäĀâūzkĘ –6ĘAíî-y<\_›Q¸%ûʗÂĮÛÚmše™–øÜŗ‘ĘŽ'n÷]œo,áĸ…!ũō‹áĶÍŧ÷ėâđąķ?ļĨÍ=u€˙Âļz€Į }|užûŠU´ąvžB&yŪF#€V^؃! MÆđ1ĸŊp¸iĢÚ—žüsôąī¯ĐRģķ-kŗÉiŗ+TœwĻgŧ@uôÖE€Ew¨)¸8äũÁú1<›Yđģ3ü•0āÄ|ƒ˙ Ŋ“žÎíŗ–dאÛäļbƒ'–‹iü]CW8Z•?77ČXZĶpoF? Ak` ‚Phxĩ‚u?( ¤ųŽ,Õ/¯ đaž>“DobŋzũŦúö¨V™åkĸ7Aâ ¯IqÚ&/ŖAöátnæŨ¤—Ãü_æ?÷˙B °ú‹āĸâ ´ĘS—žÃėķÅ=äŠ–:Ɖ]Ã^ŠmÖ*¯vef "ļÛŲeQ3Įá͉į ĩ6Aގĩs˙ętocŲ’l‚f”ŠųÉEãÛGuŽ%l ˆĸ. • Îʉu\æd*;8ē_;&AÉ´¸|$š+Ēāę>ûŽëkƒēc÷šžÃī¸ovŽ_"‡k7X$zšŨ•Tģ'EûÅĄŌŲãŅ)ŲYģ¯Å80æĮ2î_ņ˙=4$>>VŽ™Ú˛âĒ8ŋg/^N`™Ûm‡ D…g…œ-rlÔFNbĀZA•VHYČIĄęĩŠčāDp¤1VcDm˙|A‘¨÷[Pt'āÍ0]FÖÕG Ž>;yķxô,ak¸¨Äāîhãšm Įū- ŋ÷ôčäŨ€?†ĻŨäŗ~Y¤nߎ|āMVfe?ОķđC‘QÜ2§ „ ÷z¸v¨€^Ė›ÆÛ’wúĶ•ÃšÆ>ÉÛ°¨õ&zŅ}ÎŧĝėÂöö;õĩ­';đ^-ĮÍyØš `ęĖ˙Ouū!Ÿ×g~~wŠ.wÖã6úí›ņv÷ôüĮ‘üČė€Bˆ ĀâææžĮ7>}}t‘~Ā'?=„ @ÃĒyoÕ@E”Buc=iŽ^åąĘŌ’# €F@Cf1*!øƒ^GIä˙ŧ˙žÅ”ŠôĄ€@ž?×*¨éeÔlˇg–(ÛÚ2i"rāĶYų€ãg•@6Gl)KVœy yČ ˆtûí]íTx0švÁ!úĢm ›bīvįúƒ…Ëm $%M)D´Ëđ.ųT žbŦČË$S!¯ŦĒ ¨l*rJÅAq'•˜…I˙ĄDMŋ(H%Đ…sgĖĒē×ã†ö¯/ŋ+%šėŌ'N#hō÷qFMŧ_>eĪtÛÛ wÅĐŖp߲§ņ~VmÅåCŠáĒŠELy@šēáƒķLģŪeŗÁlI!q #&›(Ä ‚šõF;ĖĒÔÎŦĩNü=ŨŌ *WīVģ´ßę'/6CžÃЁÎa‘:2ŽĒ‡,ƒS—'Â,’ãnš"Ŗ Ų õËQ׿cCWĮŗ7q¸]`Ĩå%=õ„.sdΆ+åžs×ĸ}eŗĶã5ƒîõŸÉũ{mŖÖ˛h^ŋÜë¯ēĪæ|ãß”'nŧn føz]•Ûž öЏ÷7M?겐ũx¤o‡æ>q}{ŖOŪZ͝fö,ef‚÷Ô)“ÕŧĶŪßW™h“†§”ĩ™åˇą)Z[+Gįb+X—ë¯ÎŪQ”hé ›^‹Ū4A~_sôåģÖ^ÉÆĖ´lšŠMČÔOęj# ­;qÆYé:OVw^÷QƒZ÷9ŠnÃa’kĢu ¨zxŅ “ķƒuŋФĨ zÚŧ‚ÍH ō‹ũmœŽ“e嘐îC;Ļ?¨ ~ŧšų1ŗŅÎ0ļßģūôÉØÅŊ?-50VĢ>™2ÃßH‚0j ‚yõîP#00LuĄöYŽ GæČn›5l*BvHņŖĻ ZQW<ŒŌ´ĮDy;4ēÚÛ-›c‡ëÆí€Ąß}tūžØ‡Ëeé]ž(č÷܆ÎņC9ŠkØ/Ai-#C~„Čžī˜ŒļGŠm?đ:#×vrŌ6¨VvSy:đeG‚E~Ō+6d)kÎraÅųN3@Ņm˛ƒ'<°V{sŒ‹8ĸ@ļ{ˇ8@¤N ¸:.×TĀ>õ0@ âe×ĸ¤ íҍŸ(/å‰gđ÷ŲØŋŽ{lC6SģX„‹ZČëNôoÆašŽâ×44lë$mä%Vš3|mN랋Žēœė~ŸöĮōÔÕ?^ŠÃŋkâß5ā׃OO†ļŅôföŠĒļkOzXkXŊ`Ą1Đ q[ĖtéˇZ# ÔTB ͚ÁjĢ$KŖ§…4Kc}ļ0‹X;Ōa.•į˙؃mˇEQį>;˙ęaÉOĸv^דZäRvM|’œërz*#Ģ}i§mÕØŠŗ?Â:S(âõšOË9nĄoRĒoCTĨ9UhMĄ[S_ķ}õÕx“M×a7†ŦÂöMwhōĩ-—•ûĄâéƒcQm’ūčäÃ;đŗŌäËÄoÛČĄīGŊf ČÔėôŗ áĘuq[ę>֖ËÉeSE?˜”Ūŗ¨tŅ„ŲŨ‰ãooÄ`ˇ9f<â1HŨ’žē¸Ū&„ļSÉYîz‘ū!H3ũs, !€ Ų(øpd+gÚ§ĐhˆĐũ †iŠ!1  Úäˆ*e€B1¨ €x‰&Hâz•Δsk’ūėJ…ëĻ>*īĄ§×bČúäæhž÷‚‚(Uvīã|—Ēߎ C“GÍHōÍÕxJØ}ŲsĩpķMeÜú“d>č-ĩáš Ē>lxĮûL °VͧK 6C/ÔĐЎBˇ€…k įs+“LŲno,]°’ÆÖ@ĐĘžQT4MB׍ęĻąmÖ‰Ēž|0DMŖoŨF˒ÅE¯†n ģ’čqžāfė<ČÚm3°ulsĮŧön˜ˇol@8î|xō” Č÷VTĄIMãĖŦ.˙đôšØÔM䘜#‰ĶË";Ą\Ĩ?=¤Ô"?žĒũpŠö˙íč@Pöš9ƒ™¨ūœ@ˆŌXžĐm°Ö§‡Kmuhh4ĐģÝŅņČßö{~ŗĄu­ŒyÂņĐŽ!Ē’4ûW7Îį˙íņkcļ]sžąœÜųЈ'Zj1,.Xiä%˛:éo{{gŨgzŒVäȃˇģqz| ŠD9'vâr\”OzĻŪ!cOĐ\‚œĄh…6A`Ķ›4ŠuŦguVÕđļŌMˆēŽslĶ@ AĪKeīĄ"ūŖ9û›7 ģˇ8@E´Ë‡­GqšnžņY°KŊ9Ü*Z'C=)ĀÎԛ™¤ū‰×ËkVÁzvPā<û}w<ÉÆ†ĮS˙û~Kčč1_û“×ÍĨ6Ž•ŋúÜŧ›ˇëüėBŒ=ou @?øē~Ė˙ūˆū†€ßí~9&æ~ˇ¨úŊ˛0–%Џ&ļ1JBHđÍŦBA 4Ō@ˆ#T FS˛c I ėz㇖”C§ŌõõÍËđņūė`‡†e×ŖŖ^ˆI‰éV^įļ““ŪŪįFåPÄ5`ü§§mšÆqôđŧ[úzm&ä^īŒÂ9u@mu(( éF¸-? ˇ;šZ'Öh2:}wGx-ČĐÔšāąļQ-6•+häÃéÁHōõ÷7ũŧš*\ÛĘ­ûŅg’đuÍyE^čž!wgĖ€Ė_KšũáāķÔ ÔüĶ“sĄ€?´ĒҎshi¨¤€ävÂðīwÄPkĸ Ôƚ´cQ ĒŽYw:įĪYīœf[Bt~„÷@QļÚü]˛^Ūü1:ë¨W>+ļy>Žäšâ6*éîÍŲߨî°K÷Q ßë=ÆųąŗEVÖąž›"ĶēëJ;•eŲĘv\Š ötĒEk‚0RŨĘņq]י9L¤˛g§ĄuW1>,›CČŧTJZˇPû@ÔI¤˜ŪĶLr!ņ ;ę–f88PlĒÉhíÜîP;ƒMNO'áën­ ¨ĻÎ}Ũ€é¤Lˇ›ę2œ7wĸ;,Ō¸ãUŲģ Ī™$ĮåöËęOŠYš*ŗí°ˇYú_Y•ėuÛÚ¨1īTo4:øĢXúGFĮôA€˙Ž€ŋ牤ˇéĪh€Āķ˙(1Ҙ ƒ Æ4kxĮü˜ĐŪPŗĨŅöÄãŌŽ:aMŋkú'|Áčļ" nĻüĩ„‚7Öŗ9ĐØĮ;ķwiŗÖU5Â?æĻķÎĶŠ8ō/›rA™Ę¤jƒCũÁņ\VĄũ”KM]šīvLõ8*YāŖPíĄ+2Ĩ1kcėņŲä&Dp4—槏å ŋ0]"“ļŗĶå>íVa ŽéCŲ´ĖE‚Oāzô<đŽwēS°‹äŠZ4ƒŖŽÄ ė [[HĨæ“@ÕÛđOūĸû؛BĶķĶĻTXČqôJ\á™/øgXꏋšâ_Účũ4„˜×—Î_%-@ķkf0P\#úęEĨ iY6o{,čI;VŸÕ3XrĩÛHÄ*Úų‘ë!’ŋßaÄ$ėZĨÜĄW[šéŗ76ĒŗfõyŊ¨Ž§¯OY5^ī['ˇĪtĨ.lįæĨ?ŋü,Íu˜ąrŲōāŒ—-ŗTtđHŨg'1č'o Ņ—{Ttß ÂŌ÷–$ŗÆ @€Ûˆ˜ĐiŧyŒ‘Āj,Ļ€¤ĄŦ­lÃx„“ûã'TYĩøpWöœ…žž#´ŠŅJŊkg=[eŽßŒŠ_Ÿf’°!Ŗ4áĮúŽBÅŽÄæČKÜ’2C¸Í‚¨~ØKûŨUt„“NŗÜKšIģãÎiŠ•žODׇDĒq &­€?HSū9šāÛBō›ÉûɍC€ ^˙N8€!  Æ ­Pd„čŖ8QĐŊLNįŅ Ž´"˛éŅļģøŪ˛€(ęÄdĩBÜ?Ųūa<žĢ–kĸ7ί˙qķņ(1)ox˜°Ë­éėÚwęΛ‘Û n}r–īĪ߸‘%´ˇ†6”‘495ņ'Î ü>{‚—[öŌ™ã¨ķVį•LŲ†ÔĐ~8׌ōe²ÔYė™‚¸mĨPĮPî[b z††ļÆT:vJh›?čÃšß ˜¸žØ?ķ‹LvĘ ÅøAãO–Ųí囉"Ōˇ{ZöŪ§‚ĩ˛}OˆąˇąāÄąŒ8.šC=Ŋ^įzĢQûÔ?™.ķåúi­f ÷ŧė G’RÔq œŒø‘ÛūwHV6„†%īt4ī740?ĸÖÍy JC­â§ÎC7HmÄxUĶ€.ĀčōIô°1ļ’XĶųC!N“GđŋĻËĶĢ͛uŪ¨ięÅ9îáĻîõîâfCųŗņîÛŖŊ;kąoxés)ˆm?ú/ 3ÖķDŽķŽ7/Ąõ),x’“°ė´ŊCäŽ˙ĖSûĨ8e 3[*ĀdØ8÷,ĀBP‡XŦî…*Q=öE"Ÿ˜+Yîw­ą}Ü ļM­Ęm—ļˆ­ŽĐx×^šœâ Ų)r‡ ã Æ{×Sõæk ˆ%Ģ~? Ęk=|l<+€eŽ×īÖ˙ö¤x=o•ŊÁĮĪ/Ēíú”ˇL€ŽūĄ;A2}‘@kâ_abDYøģ‡§ƒoŽE[Ā@`ĀĢä%XK  ‚ōtgqŋ´Ŧ^ėĐĩģŠéR‰¨lPCå#p6_ō¨Ķ"Ekĩā PôčUŋKƒ¸po ´uũ0ėõšgt–>¯ökŽ{U&ę˙<ۓũpöÉ͟/{klÆ+Ũž,¨gNņiņ—…ũ)šnŖQŋpŽ–Nļ/ŸĘŪmŒr×ēĐyötrWžQŧØgöy•Ņ Īđëų‚%3ylu֞Ô':iđžęŖA ßī‘D˜§TČļ†N[˛ĢkEQ-čį˛ëG3˛šŦtĸ6›,FŦ#‡"eŖųāņĄé xōe›Ã.]gušJņė‰0W7dČĸf>ųîŸĖĨ7ėYŨŗW%ĄĸĸĖ P~[L’w˙ĀÎH# ū7Z[–Zš›? Ķd–!ā€|}7->^ËbØOáˇn¤IA …Ęjŋ™#J=OŨ_tf˛ÕĀhˆĩōx›ŊŅē(cˇ’ iÃ@{˛yÎkģ:ĖęŪCôTtstÎoĩ3mō‘}°Ūĸ8ĢēXĒÎŲ”úlĢ“uE|ŨļĶTõB&ā‘NĻN’¯ÜŖūÉä:1ûZļ„ž.Ļ‹ 2qôũáG#õąÕõ cÛÁ_3BŦ Cd”¯‡?G M ”Æ‡‰`Ųnæ˛höpWŠđ#C5D hõMõåúīVUM;Ãâd‘SDēĶĄS Oq„4ŦæÅí~Ô%„Â,qûĖ0•žøßEđĩvšâ¨j$&Cīå ļhŋ<ŧ|V?ôa˙°Ō˙w;Z ŧM4˛˛Š˙:p™z۞_€ė.8Îø[o:›å÷ˇ Ų@?Äđl^ÃkŒÃuÜ@A-„¨›FtŸú6Õ`ō“§Î;ŦVŠbΔ5.äēa0i|sâtĩ4ąãm ¤9Îę¤üķ}`j˙$X¯ŋiŗ8ŠšņTĘ Ä>w™›Ėč˛ŧ.Įŗėž€øb _߇—RûÖŧ‚lŦVČj8UsY‘”EOājĐ¯ö‰˛Lĩåc—oēĒSc7\˙ađ´ÜágĢ28Ģ"ŨJƒEæĨ{ĪęmͰ[}ėvyøb ŒÚä#ēųøēOUË´Íb&¤=Tė§&įķ;uT“~Û_—Ī_.ĶŨšY‰ t—mô$MTøįqĘŠŋRøKņõˇ—ŋŧü"ŨÉÚSĪ6nËŽLũOģ=¯v—ÃĒØm"ĨŅÚ&Č>ŠũH9<ŋčWCžŪ)›AÁ€s˛ŖžE~Ũō‘éšcČŊüíĒ$™uņ˛[;lSCm÷‚YŗBÉš†8q>ķÖųĀJQ ¸lIÂAÕ=Ŋ\ãĀãwČMIîļōÎ‡%`›Œø­‚ķ_īīwĘØ?ŋ20tĘ@Uiœ']z 3rÔˆĢV{ŗÛ u,Û@QøÕĻAO^Ļ TņÚo°ŋū ÛØ]'PGŖwŧõyˇ9R[”4ļ)|ÛfŖF„ĻČ.R­/Ž'oöbÆĶļ…ļ?}ŦGtÄM“o~}’:|nŊW/ō˛ëŧg¸ėzhwS‡ö°0Ģđjožüã+ŋÂčŠÚ•Of-ŊO_õEú“Č#UI/ŽēžzWđuĐM_F°MĨīxą4ėœb’ąį/(Čs2’U0Û>)˙bésßɇ é>k,&O§æũԒ‘î—męGįāūmyü[™„äčžŪcī„ĐZ¸ynNN0­ŋ̎аés.mŇąsŽ›!^V;§[RgéŦ ˇėÛiėgæ˜đ'7ƒ]™T9­…YoörWJi’íS•ņ Ĩą ōģÃ\šÍ '-éė]¨ĩ=ŪÄÔr`¸aF5ø_°MšÅØīkҜۜŧqí…nļōdŗ~*ū,L^FāđeėŽŲ{TōBģ*•Bęęø¯ĄS$;\%™ƒ”ŊM/ÉëĨĢŋåģ^ԝ–›BÔ´\`Z“ģ°Úv4ŠŅëĒ×\Įf‚ĸÁÉēHúË?))Nę“IúįߞweŅp]ĘmŒjēkyß­/l?Äū8ČŧũŒž–ļŊÎíŲŌáŊ~žįKt8˜CÕŊ-ČĪīwvš< žˆģonD1]~=.Ģ1Mķ ‘gŊwÉt|P–G¨ÄF TOåA×n~ōōĘ ļ‘'Ί?âŗ}žŽõE”û:ŗá„ŽW#™˙Ä,[xSĨܜ:›āæw¯‡Ūį÷Y…NĘGœVnģ)…§Žh¤ˆ*2čKŠļßéĻp{ˇBX7.¨6 ébĸkvēÉķˇ&fG)ßGŋ:ÔNõ|a ×ŋ_Nfˇ ´é?Æ:ÔŗĒ›rj7ˆZwK ([s‚qæu ^iŨje!a`”åyŖQŧĢfy,šT Ö¯“Ãmģ‡3öa¨Kj•bö—d.q‡N´ŦJ0āšēŠŧĢFĸ*ĄíSœ&ß×ĶŊ0ļm4­-üxËGI>ÔIƒC˛vĐe*´[q†A™aąvW÷įŗü zeUŖxœ!rO(íŅ%ŋE]H/č°ŠĮŅĻ++_ķ´>˙j3žúēڝoØ>íZAļ´ŗae_´Õ“ISãgŪ(íĒô ]¯€bƒ„ƒŌŨo“÷)øxŅûéHŨđpKŠFä ƒa>ˇĨb[\—ČfũöŖÄZīúR>¨-ī,ƒjfiđ˙<ãģ1ŧ^ŽĶ .ZõtüāŠGņD4ičߍ“˛î˛9Ë ?5夙#až­ GeށŅ,XJޤa@ĩĩ†R(:”•í;@ĘŗĀÕÛ/?"rsy°ÚcĐö&Ÿ#ī`‹4ÆGŪ‡ĖíŨ%nP!jwĻ×i”-˙2s7NsģĀ3„\ˇ×w8#āÚÜÉʀ„õë&&bô`+|üĮōe^ÉžÅM­XM6cĢļXī­ēˆîÎū˛ū†zMÎLŋņYMĮhÛõS`ĘĄÜp 7ŗ9š8˜šgZčWˇyūlã÷oĨvÔpļ(ķŧéˇK Ē’ŗ°ŋ;Œ­›BQĶËō)ĒöīčWj§‹Î=<Ļë÷ŋk¸ĀMkú.ĘęMn]ŋ÷ÔžAįo)dûîÅč`ąŧŧöeĻŽŽYØ@ˇ6´ÄŋXĩĮ4¸0õÜ;xcKÛëŗ×`F\]Oę×4˛yŪvS?9n@’Ŧ¨ĩsK™įËc 4Đn* 1Đ6H9ÂD#p§°7‘Ā‘žoâCYz!2íŧ<†ĮŠtĶMŊ™srœ€RŸo0ŋjz@I§T¯[%ųÄē}9‘Ëâ9MHërŅļd`æņ(uåĢYɁéõ Ņ•üi1Bį3Š jpļÉV čƒ"üoŋ×đãgWSŨÁŧ˙Ųņã4|Á{†\‘øĒ˙˙TM"„MüŽŊÚen˛MS8ŠGLpĖō¸ n5ž1p´Ŧ=īë„ā& XŸŧ …×e—C;Ą,¯Ë†gŽÕ.{!îŅQ?ܖļ<ltŸV õbÖÁđîčĸė‰pãéü’ą™¨’ãWFį' Ønk˙ßÄseô¸ēwŦ­ˆđW­q-yėĸĒ=mûk(vÍÖZÃ@­ QJ­ Ö@TšļĄ˛ŠSäáŊ‰ČŽ’4oQ”k<>m^SÉhEŦnaœCĄNEĸ|ÛhÛGī‚ûëŪ§æ“úuîÂvāå=ŗ›ĸf_â-0nĶ;pĨJExV/váŪÎĒëöÄúC ŸÂ˛Ũæ~Üî䈓×÷ũ×WMOmđˇ#ˇŗãŗûÛbŨæ'ˇ;h‰y;ōķ'×ÖOÛ˙Ŧ“9'Rü—_¸X6žiÜ&+JÔˇcđ|Õ‡õá%|ˇË†ŽTŦبąÜÎĖ"UŪ°;"û…ROx6‘ėYQ¯wŖ$úįuÅzļÃíPÁoģY*…[FŽ÷,/°ÚGŗļ’vI™™+Ÿåø˛3}hŖãô[ö…=Ņ‹Īõ;ypĶāé[âÆžŸ´Žœ‡C1;lĶ-÷q?žˇ=žÂÜåaMRÔ@)ãáŽ` ZQ‡#äāT`ÖŪčî…LP劁æ]tŧå å@í^f׎‰Ŗ&=ŗæYßH bYÉæPœ}Ü;ÜgßŨ÷KgčÆWō´Ĩ~Ũ~5ū/ [Ĩ†“ü 7ˇmœģiÁ‡hoę=oĸŽĪËe+vŅØˇ™IÖjŒäu7Y[°ė˛ōnŌ™Í& 1<„Ũë’ĀåĮb}2Ŋú¤īĪĶĢĢ% hŒVįæĪ|˜m贓M [ųô"ŋ Q”Z0ĪëYCMĒš>NÁÔn.˙ļ-QģķÔÁŲz‘ 5›Á|­ũĢĸ_Ŧ9mȝĄĖÄaũ]´1ĮdŪ÷­šiģ’uø'pR1¸&îõQŧm°Y¸™t-˜´ ÆŽFģҐŦF/ļw=Llş=DÖGw†˜OÍÎ÷„ĸ4D!&-Ą!$@ĶbTjœ!v3× ÷ĪöDy}Úé8ZžĨ[Ãh˛<ŊQļ’eõPvSc/™Z™ŖÕ0øĸؕ‘OoßO/1ī‡Ģ’…ĮĮÆŖ•VÅ˙´O;i°ĮŲh" grôWõ~4f˛›?,_Ļ*ŪCU˙6ž.Ÿ÷Fã8&ĢqBZF#P=Ãoâņķwo&pĶ=îlÃáŅđ6é9ëqŦVOLe)— {cå~HúĀķŽņ2;VË'˙jŦo/Į~.å ļä:ô)ʗ)ß7MsæŅiSŦ_9ã#ŽĨøÂąwŦ5ņ0ļAæ13ągb—j:ČĖ@Z¤ĪsHlôņO hĮßVĢ|įÍöŅ~eŽō`›S^Ëí›ũš_Ô~ŧe !Q•Ä'ņWoĮäräĪĒ@ˇÜSœ+‹‰.vjäT¨9ˆ…JN:Ĩ’æ*Õ}uÖ7ËUÖÔíęb4>qŦ1ßí~‚…ˆO/Ā._ÔmčĘūÉj3˛z÷ŨQZlŪEŋŽēģV Ÿ_t.ĐĪķĩc K­ķũū}ĩÃčw#ĪÆzGŽ×€í]](ËŽAŊ$Ī)Ũkļ⥲Ŋ¨+ Ŋ_=čią€geßæxŠw18úX†åô4ÖŲŽžG^€ĩÍ×É8ŗ?Ká7âËdk,¯:Ãkôß\ŋĩĶ ŽxAö][NėI˛wŨ´ ĸÆŽĪ•KöŧÁŽŅ~ž(5t\æ;̈́JÕšOy÷:|U#æŗšvŗšĐĻÅŋŦÓtKâˇĘ=é°ĀEéáWxāi|›Õ1ų6č¤IP,šĀR€`üŨ?å4xiÛ <å+´4°õڐf"`.é€7ČpˆRwŽeËNĸÜûKÕÖģũ‚Vëīö_×CøÉ/rđæ)k3˙‹}•¸Ÿ;šŪ%Čę×gČ÷5ŨŠŲ]:mđ˙øā¸#ģ?e‡|]_ĖaâęüvtŌåŊ—ĸfô|Ôũjū*/ŲVCÕˇ°ô}¤4xŗjAė“Á~CEķ6vÕØ@e§ĄFPÖX!Č÷ ¯ôŽ› CėqRZqĶ|ŦAŲĨ;Ûōû›2˙āälиâîŖŪš>Ŧ`\v{ī{ŋߞœtËŨjwÜߗ˙ƒŊt^%ĘžZī īŪ]>ã p§7ķUį„Ķ[:ĢJ/'~Ŋŧ SãN&RfĀđ&Ē‚r3ķrv×MčËîÛûūˆÆ’ėōŧ%)—^?™ĩę…čžÁŗŨßWĨûŊ‹­ų@l^Xĩ,ß&ÚBŠGąË܁Ŗfá_,§×tËm§āHcÜ˙´(nŽ†-yËÆ€Ŋ4–ąã—ŊÛŨZõŽ!õÉé˙ÅÛ]V Ÿ`Pãˆ?úˇ?3—vĢÉKûct? #[[ĩ¨Ģ8éfd99W÷N‰‹ķ‘SK4ĐV"”B†ąB€€øĸŠ4܁ĨļĀCâ&í<ϰh˙Ũ—7“‹´ŗKY¨t?pŌ‡čúœ üĄjģQ‡_'z3ŗc°7Ü m’ŧgUãåų€{ķų’ Ũ/ ËĒņh §ÂÎŨaŊ#ëUڎˇ&†ÚžUn3đyWJc#K­”/ÍĐ8š);>ž§/jS"YĒ’EÂ%ø¯×đčœ&ŸØÃgûĮ}˜IÚ=/ƒuũőęŪ >ēWm3é=âhË<{R@îŠŖmĘ\“uhd WČtŨ ŧĮīč[NĶ90ŧž,›ÉėđEėíE~¯žĐæúr ŋDúDlđ/Ja5d›žsAϤß”pÉONzà g-įOËzP•/>nī;3­Ęv›ŗ#Ņč¤7HļNO˛ jh”¸jŒH 4 i"šĖ&ģÆiõbĮU5ë6ÃË˙Báŗo—`ÔžW_„ß‚Ž_ ö1‘q͊ɡũgö+īÁãz~uūELf%ŲŲ#šyƒŨ,‹vŋĪS`déĘå+h†.ņ{ĶĶEBh?G ļ§Ģ!v+šŪÖV™×mĪĻVà f=7ß 63äļöĪndW„Č´õØļK öOwGã÷ĩH-ÜB[Gīc.ÚŖ‰Ÿ?ĖSkÚ@q0Ĩ÷‚ŽTĢĖžlcXTc(pšžZá7v­íŽŦę¯É1č>ËØãIĶ=Yˁģ=–ūũ˜ Ęųa*iëmĢ&ø¨{„Go-čØmáRŧxĄđ˙v{ödíŪ˛kŲ§įŲ7°îŸĶMQÔŅ‹ų÷÷õėŠxwîâ:úĀ|fyđ™Kú‡Â¤.Ī=ß *īęņÚÆUœKˆ°]Cđ”(ŗ÷x6Ք–­Đ‡“ũģķęÚ ø•¸ˇëļÛą‹ģŨ?ŽnÎkŋcĸ˜Œ”ŋNöwOĨmŪ&ž;pníc{kt‚*ŠVĀva8ՌÕÃĀSųhË„sûČÛVëĄt7Šąm͘dƒXÃI zouˇt´?­˙’jƒ÷˛4„KūXūwĒ\˙!)ęČüëiŊŧöŅĒāļMŒ#X¤įibÉaū¸„~ŪņŦë¸âÆ*+¯ŦSŒí‚čŌ8ŊĶëÕeĀ!„ČŌû3'¸ĄãīÍPš.t#CAda./Ú>4a˙ŨųAš´ĮŦŲá#¸.Mú{ü›&ĨÍC]/f/īgģ•ú‡e>özņIoøqYĖīÖO2ŸūûëģM.?0Ÿ4 ­Õ“$ė`™–yRĩ¯LiĀĻĸǟQ Z[YĄČļĮx˛AļDAãÆžũíëîø0XC÷b˜‹ķŲäŖņ˙ōfƒŖ§ve_VÎ=™ōÅ["Va,œ):kwÍ{kÂŌ°Z&]tä6Ų'˙Ŋũd›‹žß%Š™ÅëŒ8YØ_ŧHíÛFŒ˙߂āĢIrã0p4r“gs¸ŊÛãIĮP$Š%—^dûÍUöõģËUr‘ļhQō…ŨŊŊŨ ;Ā Ôíīc6'ĻŲĘ4- ŊÍp%E2Ē'õTĻž(§‘jÂŽ[SiF€QcöČî*ÎÁ3=úÄŪÉö˙ÉSkŅęŒŦMôjøVzö}ķŧ_9Ž͆ŊœqÖgŖ8Îb€ŠnˆÁ5ûũFâIŠī‘éĐōv•ĶĢÆ°ۘĨ˙zÉČįS˙ƒHĻäũåe–LûQÖŠÛŧAĨ61í•Ŗ}°ßŠ4ÜâĶ?,æBm%DP‡>)ō4m+1?ŧĖĢMyYą>lĘŽ ŗRŋXVLjÅéß&ęlũ‹É‹G`ŠØH8”ĩNĶĸę~ŊUvNļŒķĪ\…N*…\šž}‘ÕņsŦ˙!_Š’ā‡Bîu• IFAŧMX#ŲŽđÜ%@¸m˜Ų:pÔļ.ÜĪϰ_oĀŽ¨8Š)ŦäTrŒ“ĩׁö:°¯û*\ÛÆ‰’.ŽGˇ>uíz/īË8—§céÛāđŒ BÃŋ tՉ,¯¸šŅŽāųŖü¯Í™ēÆ)%¯q‰ˇqnFũ´˜î¸‚kä–ĸ^)7 .…Œ¤Dú¸ŪĘúötŸČ‘ĀbY,ß]&Éΰ=°t‡W;ģQÄ]Ô§Ĩ´(Ė"–Qųĸ\ėĮ3ũãĢôÃK÷á1úĘĶzĢŲ¯sEÍI^ŗĐ9å >™Å°áD8ķÖLĘK\…{ŋDĩFĒ”iÎĖæ‰6~ąČl[¸Ŧ§P?ģEEĩ°f> –”Dˇ‰Zƒäcw­jt¤ûN# É= ˇČ|¤#õBtúĶģŧ´ĖāTŲôåžŠ<L€MX1ōķ*•PZŽáđpI¯05jmj[ŽÔ)BY‹MĐ Ø} ŨÕŦžĢz?Š-%ú„lg‚6nįBŽœÉ›]+pÕâ.U6Õ'ŨQ>ĩnQq ‡0~=ÔĩŦ•ļ‚ŠÛ?DÉ3ųov ´Ē¸#n˙Ī"Y“áF0iۛŕ *Đĩƒ˛˛6D‘JTLiT=Ũ{ؖŦ,–ÛÃŲ}S×īu§P"xÂÁ;Äõ˛}Õßkbzė[‡Pž˜ųq ˜×éÔeûûīƒđˆ†Ŋđ”ŪZlhF¨jŲH‘5,ā¨qUš[s/ÄĩSvŽrŽÄļņl– K׍I\obmLW5Û¨ėck,Út;{;qVŠjđĘĐy%i+ļF€-G§vBn‡§aÖ˛—DÉŅTbÁ:iUã\ Kh„ķ|RpeunôV›ę}t;&>Dqģ=ûrãļģ,ŋŌ˙ ęrRoUYŸæM´ą‹šÅØßũĖŠ^‘kōttČ;ˇ|åžųaķlâ䮌˙e-7ÚėŽ™‚5…ŧ‚vŧņ™•Š<'Tčí˛ŌKŨŧy=šģë7{IDATŋ)¨SFmų ¯æŽĢģã†& Ö ´<(ģĸKŲrõĖzŗÜTŌQžˇąáÅYMoGĄĪ(a CEšvą¨˜›{õ b8ĸ#ëTGMƒ ­…œTũŗ‚ˆŧÎėû›íĀNžnį˛ūɏãĀ+Æ˙āį˛åyŋ¸QÛš8W3WP 7đ!ŧrÅONĮīœķ˙ĻÎöLŋËĨ @BNŒ04všæĢ]jÃŋh!T’¸ŨSŪՃX=gÎ|Yq¨ã‹ûŦtë"ĪĶ@Ķú™ûXĮWnųėô'ĶO8ĸøSAP5<6%Kė÷ƒ="ÍH ›ŗũŌōĢŠYÉȐg­[‹ĸUp¯RœTȨĄĩÃ)sģģĻíjF3_å ‡D:ƚŠ„ÁZžÄģH?-N2[xĪ÷­ú|î‚Ŗ1øN&Jwˇßw‰Å\Qķ­h<žā-Y•ČßüŲ Vģúâ/ĮŸtoWA/ƒ6Žü°P50nž&ņÆĶšxĮˆŦ4Ōö[ØÂéJ–\Ôxŗœ)-SpŽۋOswÎFč~ŌķË<7Ô5 t#ŽĘÁ_ ¨ŋģ!ÎãJŦ;Yœk%ę÷‡ōC~0Jŧp?uogô'ĘÆPÄ&¨đŠi KŠŋZ]BīÅĢGÚÄŌļ„"āL+JŠ90 fÉI&gk!ÉęĮ ”˛}ÖŨÍïĀn•šFēƒdx#bI†ƒÎz+ApŪíŊwĩœĢ;[ętģO4ĢâÔ*Z,5…Ē& ŠĀĐĸC~6Öéoļ¯˜k ŊD y\ €CÜuîžeɃ)”Už8"L^)k´KŖį§ķ§lÁÉ>â{3ąø/uômsŌVąéôBCÄ'WķüÄÎúŠĨĨ›ŠųķšŽ^Š‹ÕĘĨ8y<žÔé.ÁNÔé‡L‹4ĩOšPĄƒŖīá¤5Ķõ͍.KŽœg­!9EYMûr) J†ÖGę>؃EéšĀGÂâ¸ĻļkôĢ­?ÕÔĩĒҤjy\ė5žŪđ@ū˃ Ļ06ÛČ˜ėŗíÔ§ĖQšŨŽõ9ÕÍaļ-ˆfęšZcC7Ĩ(/ ī}ׯˆâÖq6~܂ŊōUȆr•u]ĸđzōūÁĄiūėÜ3¸ųå ’´|ąßø=Ŋ Zŋ+ĮП0˙V†ä„%æ3uú ¨ŦÉs‡ #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE "weasel2.4c.png" #define FOUR_BPP_IMAGE1 "weasel4.11c.png" #define FOUR_BPP_IMAGE2 "weasel4.16g.png" #define EIGHT_BPP_IMAGE "test8.jpg" #define EIGHT_BPP_CMAP_IMAGE1 "dreyfus8.png" #define EIGHT_BPP_CMAP_IMAGE2 "test24.jpg" #define RGB_IMAGE "marge.jpg" static const l_int32 MODSIZE = 11; /* set to 11 for display */ static const l_float32 ANGLE1 = 3.14159265 / 12.; static const l_float32 ANGLE2 = 3.14159265 / 120.; static const l_int32 NTIMES = 24; static void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp); l_int32 main(int argc, char **argv) { PIX *pixs, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_stderr("Test binary image:\n"); pixs = pixRead(BINARY_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 2 bpp cmapped image with filled cmap:\n"); pixs = pixRead(TWO_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 4 bpp cmapped image with unfilled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 4 bpp cmapped image with filled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE2); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp grayscale image:\n"); pixs = pixRead(EIGHT_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp grayscale cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp color cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE2); pixd = pixOctreeColorQuant(pixs, 200, 0); RotateTest(pixs, 0.25, rp); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test rgb image:\n"); pixs = pixRead(RGB_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); return regTestCleanup(rp); } static void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp) { l_int32 w, h, d, i, outformat; PIX *pixt, *pixd; PIXA *pixa; pixa = pixaCreate(0); pixGetDimensions(pixs, &w, &h, &d); outformat = (d == 8 || d == 32) ? IFF_JFIF_JPEG : IFF_PNG; pixd = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); for (i = 1; i < NTIMES; i++) { if ((i % MODSIZE) == 0) { pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, outformat); } pixt = pixRotate(pixd, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); pixDestroy(&pixd); pixd = pixt; } pixDestroy(&pixd); pixd = pixRotate(pixs, ANGLE1, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); for (i = 1; i < NTIMES; i++) { if ((i % MODSIZE) == 0) { pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, outformat); } pixt = pixRotate(pixd, ANGLE1, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); pixDestroy(&pixd); pixd = pixt; } pixDestroy(&pixd); pixd = pixRotate(pixs, ANGLE1, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, w, h); for (i = 1; i < NTIMES; i++) { if ((i % MODSIZE) == 0) { pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, outformat); } pixt = pixRotate(pixd, ANGLE1, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, w, h); pixDestroy(&pixd); pixd = pixt; } pixDestroy(&pixd); pixd = pixRotateAMCorner(pixs, ANGLE2, L_BRING_IN_WHITE); for (i = 1; i < NTIMES; i++) { if ((i % MODSIZE) == 0) { pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, outformat); } pixt = pixRotateAMCorner(pixd, ANGLE2, L_BRING_IN_WHITE); pixDestroy(&pixd); pixd = pixt; } pixDestroy(&pixd); if (d == 32) { pixd = pixRotateAMColorFast(pixs, ANGLE1, 0xb0ffb000); for (i = 1; i < NTIMES; i++) { if ((i % MODSIZE) == 0) { pixaAddPix(pixa, pixd, L_COPY); regTestWritePixAndCheck(rp, pixd, outformat); } pixt = pixRotateAMColorFast(pixd, ANGLE1, 0xb0ffb000); pixDestroy(&pixd); pixd = pixt; } } pixDestroy(&pixd); pixd = pixaDisplayTiledInColumns(pixa, 2, scale, 20, 0); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.86.0/prog/rotate2_reg.c000066400000000000000000000146271506303110300171160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotate2_reg.c * * Regression test for rotation by shear, sampling and area mapping. * Displays results from all the various types of rotations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE "weasel2.4c.png" #define FOUR_BPP_IMAGE1 "weasel4.11c.png" #define FOUR_BPP_IMAGE2 "weasel4.16g.png" #define EIGHT_BPP_IMAGE "test8.jpg" #define EIGHT_BPP_CMAP_IMAGE1 "dreyfus8.png" #define EIGHT_BPP_CMAP_IMAGE2 "test24.jpg" #define RGB_IMAGE "marge.jpg" static const l_float32 ANGLE1 = 3.14159265 / 30.; static const l_float32 ANGLE2 = 3.14159265 / 7.; void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_stderr("Test binary image:\n"); pixs = pixRead(BINARY_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 2 bpp cmapped image with filled cmap:\n"); pixs = pixRead(TWO_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 4 bpp cmapped image with unfilled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 4 bpp cmapped image with filled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE2); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp grayscale image:\n"); pixs = pixRead(EIGHT_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp grayscale cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); lept_stderr("Test 8 bpp color cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE2); pixd = pixOctreeColorQuant(pixs, 200, 0); RotateTest(pixd, 0.5, rp); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test rgb image:\n"); pixs = pixRead(RGB_IMAGE); RotateTest(pixs, 0.25, rp); pixDestroy(&pixs); return regTestCleanup(rp); } void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp) { l_int32 w, h, d, outformat; PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa; pixGetDimensions(pixs, &w, &h, &d); outformat = (d == 8 || d == 32) ? IFF_JFIF_JPEG : IFF_PNG; pixa = pixaCreate(0); pix1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pixd = pixaDisplayTiledInColumns(pixa, 2, scale, 20, 0); regTestWritePixAndCheck(rp, pixd, outformat); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); pix1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, w, h); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); if (pixGetDepth(pixs) == 1) pix1 = pixScaleToGray2(pixs); else pix1 = pixClone(pixs); pix2 = pixRotate(pix1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, w, h); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixRotate(pix1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, w, h); pixaAddPix(pixa, pix3, L_INSERT); pix2 = pixRotate(pix1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixRotate(pix1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, 0, 0); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixd = pixaDisplayTiledInColumns(pixa, 2, scale, 20, 0); regTestWritePixAndCheck(rp, pixd, outformat); pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.86.0/prog/rotate_it.c000066400000000000000000000076171506303110300166740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotate_it.c * * rotate_it filein angle fileout [type incolor] * * where: * angle: in degrees; use 90, 180, 270 for orthogonal rotation * type: "areamap", "shear", "sampling" * incolor: "black", "white" * * If 'type' and 'incolor' are omitted, by default we use: * type: sampling for 1 bpp; areamap for bpp > 1 * incolor: white * * If angle is in {90.0, 180.0, 270.0}, this does an orthogonal * rotation. Args 'type' and 'incolor' can be omitted. * * This writes the output file in the same encoded format as * the input file. If the input file is jpeg, the output file * is written with default quality factor 75. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 icolor, itype, format, quads; l_float32 angle, deg2rad, anglerad; char *filein, *fileout, *type, *incolor; PIX *pixs, *pixd; if (argc != 4 && argc != 6) return ERROR_INT( "\n Syntax: rotate_it filein angle fileout [type incolor]", __func__, 1); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; if (argc == 6) { type = argv[4]; incolor = argv[5]; } setLeptDebugOK(1); deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); format = pixGetInputFormat(pixs); if (format == IFF_UNKNOWN) format = IFF_PNG; if (angle == 90.0 || angle == 180.0 || angle == 270.0) { quads = (l_int32)((angle + 0.5) / 90.0); pixd = pixRotateOrth(pixs, quads); pixWrite(fileout, pixd, format); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } anglerad = deg2rad * angle; icolor = L_BRING_IN_WHITE; itype = L_ROTATE_AREA_MAP; if (argc == 6) { icolor = (!strcmp(incolor, "white")) ? L_BRING_IN_WHITE : L_BRING_IN_BLACK; if (!strcmp(type, "areamap")) itype = L_ROTATE_AREA_MAP; else if (!strcmp(type, "shear")) itype = L_ROTATE_SHEAR; else itype = L_ROTATE_SAMPLING; } pixd = pixRotate(pixs, anglerad, itype, icolor, 0, 0); pixWrite(fileout, pixd, format); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/rotatefastalt.c000066400000000000000000000300461506303110300175470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotatefastalt.c * * Alternative (slightly slower) method for rotating color images, * with antialiasing. This is here just for comparison with * the better methods in the library. * * Includes these functions: * pixRotateAMColorFast2() * pixShiftRGB258() * rotateAMColorFastLow2() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include /* required for sin and tan */ #include "allheaders.h" static const l_float32 VERY_SMALL_ANGLE = 0.001; /* radians; ~0.06 degrees */ static PIX *pixRotateAMColorFast2(PIX *pixs, l_float32 angle, l_uint8 grayval); static PIX *pixShiftRGB258(PIX *pixs); static void rotateAMColorFastLow2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval); int main(int argc, char **argv) { char *filein, *fileout; l_float32 angle, deg2rad; PIX *pixs, *pixd; if (argc != 4) return ERROR_INT("Syntax: rotatefastalt filein angle fileout", __func__, 1); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; setLeptDebugOK(1); deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not read", __func__, 1); startTimer(); pixd = pixRotateAMColorFast2(pixs, deg2rad * angle, 255); lept_stderr("Time for rotation: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } /*! * pixRotateAMColorFast2() * * Input: pixs * angle (radians; clockwise is positive) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error * * Notes: * - This rotates a color image about the image center. * A positive angle gives a clockwise rotation. * - It uses area mapping, dividing each pixel into * 16 subpixels. * - It creates a temporary 32-bit color image. * - It is slightly slower than pixRotateAMColorFast(), * which uses less memory because it does not create * a temporary image. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixRotateAMColorFast2(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixshft, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (L_ABS(angle) < VERY_SMALL_ANGLE) return pixClone(pixs); if ((pixshft = pixShiftRGB258(pixs)) == NULL) return (PIX *)ERROR_PTR("pixshft not defined", __func__, NULL); w = pixGetWidth(pixshft); h = pixGetHeight(pixshft); datas = pixGetData(pixshft); wpls = pixGetWpl(pixshft); pixd = pixCreateTemplate(pixshft); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorFastLow2(datad, w, h, wpld, datas, wpls, angle, grayval); pixDestroy(&pixshft); return pixd; } /*! * pixShiftRGB258() * * Makes a new 32 bpp image with the R, G and B components * right-shifted by 2, 5 and 8 bits, respectively. */ PIX * pixShiftRGB258(PIX *pixs) { l_int32 w, h, wpls, wpld, i, j; l_uint32 word; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", __func__, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { word = *(lines + j); *(lined + j) = ((word & 0xff000000) >> 2) | ((word & 0x00ff0000) >> 5) | ((word & 0x0000ff00) >> 8); } } return pixd; } /*! * rotateAMColorFastLow2() * * Alternative version for fast color rotation * * *** Warning: explicit assumption about RGB component ordering *** */ void rotateAMColorFastLow2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_uint32 edgeval, word; l_uint32 *pword, *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 4. * sin(angle); cosa = 4. * cos(angle); edgeval = (grayval << 24) | (grayval << 16) | (grayval << 8); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina + 0.5); ypm = (l_int32)(-ydif * cosa + xdif * sina + 0.5); xp = xcen + (xpm >> 2); yp = ycen + (ypm >> 2); xf = xpm & 0x03; yf = ypm & 0x03; /* if off the edge, write the input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = edgeval; continue; } lines = datas + yp * wpls; pword = lines + xp; switch (xf + 4 * yf) { case 0: word = *pword; *(lined + j) = ((word & 0x3fc00000) << 2) | ((word & 0x0007f800) << 5) | ((word & 0x000000ff) << 8); break; case 1: word = 3 * (*pword) + *(pword + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 2: word = *pword + *(pword + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 3: word = *pword + 3 * (*(pword + 1)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 4: word = 3 * (*pword) + *(pword + wpls); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 5: word = 2 * (*pword) + *(pword + 1) + *(pword + wpls); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 6: word = *pword + *(pword + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 7: word = *pword + 2 * (*(pword + 1)) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 8: word = *pword + *(pword + wpls); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 9: word = *pword + *(pword + wpls); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 10: word = *pword + *(pword + 1) + *(pword + wpls) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 11: word = *(pword + 1) + *(pword + wpls + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 12: word = *pword + 3 * (*(pword + wpls)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 13: word = *pword + 2 * (*(pword + wpls)) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 14: word = *(pword + wpls) + *(pword + wpls + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 15: word = *(pword + 1) + *(pword + wpls) + 2 * (*(pword + wpls + 1)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; default: /* for testing only; no interpolation, no shift */ lept_stderr("shouldn't get here\n"); *(lined + j) = *pword; break; } } } return; } leptonica-1.86.0/prog/rotateorth_reg.c000066400000000000000000000112061506303110300177170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotateorth_reg.c * * Regression test for all rotateorth functions */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define FOUR_BPP_IMAGE "weasel4.8g.png" #define GRAYSCALE_IMAGE "test8.jpg" #define COLORMAP_IMAGE "dreyfus8.png" #define RGB_IMAGE "marge.jpg" void RotateOrthTest(PIX *pix, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_stderr("\nTest binary image:\n"); pixs = pixRead(BINARY_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); lept_stderr("\nTest 4 bpp colormapped image:\n"); pixs = pixRead(FOUR_BPP_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); lept_stderr("\nTest grayscale image:\n"); pixs = pixRead(GRAYSCALE_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); lept_stderr("\nTest colormap image:\n"); pixs = pixRead(COLORMAP_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); lept_stderr("\nTest rgb image:\n"); pixs = pixRead(RGB_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); return regTestCleanup(rp); } void RotateOrthTest(PIX *pixs, L_REGPARAMS *rp) { l_int32 zero, count; PIX *pixt, *pixd; /* Test 4 successive 90 degree rotations */ pixt = pixRotate90(pixs, 1); pixd = pixRotate90(pixt, 1); pixDestroy(&pixt); pixt = pixRotate90(pixd, 1); pixDestroy(&pixd); pixd = pixRotate90(pixt, 1); pixDestroy(&pixt); regTestComparePix(rp, pixs, pixd); pixXor(pixd, pixd, pixs); pixZero(pixd, &zero); if (zero) { lept_stderr("OK. Four 90-degree rotations gives I\n"); } else { pixCountPixels(pixd, &count, NULL); lept_stderr("Failure for four 90-degree rots; count = %d\n", count); } pixDestroy(&pixd); /* Test 2 successive 180 degree rotations */ pixt = pixRotate180(NULL, pixs); pixRotate180(pixt, pixt); regTestComparePix(rp, pixs, pixt); pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) { lept_stderr("OK. Two 180-degree rotations gives I\n"); } else { pixCountPixels(pixt, &count, NULL); lept_stderr("Failure for two 180-degree rots; count = %d\n", count); } pixDestroy(&pixt); /* Test 2 successive LR flips */ pixt = pixFlipLR(NULL, pixs); pixFlipLR(pixt, pixt); regTestComparePix(rp, pixs, pixt); pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) { lept_stderr("OK. Two LR flips gives I\n"); } else { pixCountPixels(pixt, &count, NULL); lept_stderr("Failure for two LR flips; count = %d\n", count); } pixDestroy(&pixt); /* Test 2 successive TB flips */ pixt = pixFlipTB(NULL, pixs); pixFlipTB(pixt, pixt); regTestComparePix(rp, pixs, pixt); pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) { lept_stderr("OK. Two TB flips gives I\n"); } else { pixCountPixels(pixt, &count, NULL); lept_stderr("Failure for two TB flips; count = %d\n", count); } pixDestroy(&pixt); return; } leptonica-1.86.0/prog/rotateorthtest1.c000066400000000000000000000104241506303110300200440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotateorthtest1.c * * Tests and timings for 90 and 180 degree rotations * rotateorthtest1 filein fileout [direction] * where * direction = 1 for cw; -1 for ccw */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NTIMES 10 int main(int argc, char **argv) { l_int32 dir; PIX *pixs, *pixd, *pixt; l_float32 pops; char *filein, *fileout; if (argc != 3 && argc != 4) return ERROR_INT(" Syntax: rotateorthtest1 filein fileout [direction]", __func__, 1); filein = argv[1]; fileout = argv[2]; if (argc == 4) dir = atoi(argv[3]); else dir = 1; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); /* Do a single operation */ #if 1 pixd = pixRotate90(pixs, dir); #elif 0 pixd = pixRotate180(NULL, pixs); #elif 0 pixd = pixRotateLR(NULL, pixs); #elif 0 pixd = pixRotateTB(NULL, pixs); #endif /* Time rotate 90, allocating & destroying each time */ #if 0 startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixd = pixRotate90(pixs, dir); pixDestroy(&pixd); } pops = (l_float32)(w * h * NTIMES) / stopTimer(); lept_stderr("MPops for 90 rotation: %7.3f\n", pops / 1000000.); pixd = pixRotate90(pixs, dir); #endif /* Time rotate 180, with no alloc/destroy */ #if 0 startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); pixd = pixCreateTemplate(pixs); for (i = 0; i < NTIMES; i++) pixRotate180(pixd, pixs); pops = (l_float32)(w * h * NTIMES) / stopTimer(); lept_stderr("MPops for 180 rotation: %7.3f\n", pops / 1000000.); #endif /* Test rotate 180 not in-place */ #if 0 pixt = pixRotate180(NULL, pixs); pixd = pixRotate180(NULL, pixt); pixEqual(pixs, pixd, &eq); if (eq) lept_stderr("2 rots gives I\n"); else lept_stderr("2 rots fail to give I\n"); pixDestroy(&pixt); #endif /* Test rotate 180 in-place */ #if 0 pixd = pixCopy(NULL, pixs); pixRotate180(pixd, pixd); pixRotate180(pixd, pixd); pixEqual(pixs, pixd, &eq); if (eq) lept_stderr("2 rots gives I\n"); else lept_stderr("2 rots fail to give I\n"); #endif /* Mix rotate 180 with LR/TB */ #if 0 pixd = pixRotate180(NULL, pixs); pixRotateLR(pixd, pixd); pixRotateTB(pixd, pixd); pixEqual(pixs, pixd, &eq); if (eq) lept_stderr("180 rot OK\n"); else lept_stderr("180 rot error\n"); #endif if (pixGetDepth(pixd) < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/rotatetest1.c000066400000000000000000000173441506303110300171570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * rotatetest1.c * * rotatetest1 filein angle(in degrees) fileout */ #include "allheaders.h" #define NTIMES 180 #define NITERS 3 int main(int argc, char **argv) { l_int32 i, w, h, d, rotflag; PIX *pixs, *pixt, *pixd; l_float32 angle, deg2rad, ang; char *filein, *fileout; if (argc != 4) return ERROR_INT(" Syntax: rotatetest1 filein angle fileout", __func__, 1); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; setLeptDebugOK(1); lept_mkdir("lept/rotate"); deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); if (pixGetDepth(pixs) == 1) { pixt = pixScaleToGray3(pixs); pixDestroy(&pixs); pixs = pixAddBorderGeneral(pixt, 1, 0, 1, 0, 255); pixDestroy(&pixt); } pixGetDimensions(pixs, &w, &h, &d); lept_stderr("w = %d, h = %d\n", w, h); #if 0 /* repertory of rotation operations to choose from */ pixd = pixRotateAM(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotateAMColor(pixs, deg2rad * angle, 0xffffff00); pixd = pixRotateAMColorFast(pixs, deg2rad * angle, 255); pixd = pixRotateAMCorner(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotateShear(pixs, w /2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotate3Shear(pixs, w /2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixRotateShearIP(pixs, w / 2, h / 2, deg2rad * angle); pixd = pixs; #endif #if 0 /* timing of shear rotation */ for (i = 0; i < NITERS; i++) { pixd = pixRotateShear(pixs, (i * w) / NITERS, (i * h) / NITERS, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 100 + 20 * i, 100 + 20 * i); pixDestroy(&pixd); } #endif #if 0 /* timing of in-place shear rotation */ for (i = 0; i < NITERS; i++) { pixRotateShearIP(pixs, w/2, h/2, deg2rad * angle, L_BRING_IN_WHITE); /* pixRotateShearCenterIP(pixs, deg2rad * angle, L_BRING_IN_WHITE); */ pixDisplay(pixs, 100 + 20 * i, 100 + 20 * i); } pixd = pixs; if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); #endif #if 0 { l_float32 pops; /* timing of various rotation operations (choose) */ startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixd = pixRotateShearCenter(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixDestroy(&pixd); } pops = (l_float32)(w * h * NTIMES / 1000000.) / stopTimer(); lept_stderr("vers. 1, mpops: %f\n", pops); startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixRotateShearIP(pixs, w/2, h/2, deg2rad * angle, L_BRING_IN_WHITE); } pops = (l_float32)(w * h * NTIMES / 1000000.) / stopTimer(); lept_stderr("shear, mpops: %f\n", pops); pixWrite(fileout, pixs, IFF_PNG); for (i = 0; i < NTIMES; i++) { pixRotateShearIP(pixs, w/2, h/2, -deg2rad * angle, L_BRING_IN_WHITE); } pixWrite("/usr/tmp/junkout", pixs, IFF_PNG); } #endif #if 0 /* area-mapping rotation operations */ pixd = pixRotateAM(pixs, deg2rad * angle, L_BRING_IN_WHITE); /* pixd = pixRotateAMColorFast(pixs, deg2rad * angle, 255); */ if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); #endif #if 0 /* compare the standard area-map color rotation with * the fast area-map color rotation, on a pixel basis */ { PIX *pix1, *pix2; NUMA *nar, *nag, *nab, *naseq; GPLOT *gplot; startTimer(); pix1 = pixRotateAMColor(pixs, 0.12, 0xffffff00); lept_stderr(" standard color rotate: %7.2f sec\n", stopTimer()); pixWrite("/tmp/lept/rotate/color1.jpg", pix1, IFF_JFIF_JPEG); startTimer(); pix2 = pixRotateAMColorFast(pixs, 0.12, 0xffffff00); lept_stderr(" fast color rotate: %7.2f sec\n", stopTimer()); pixWrite("/tmp/lept/rotate/color2.jpg", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); pixGetColorHistogram(pixd, 1, &nar, &nag, &nab); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("/tmp/lept/rotate/absdiff", GPLOT_PNG, "Number vs diff", "diff", "number"); gplotAddPlot(gplot, naseq, nar, GPLOT_POINTS, "red"); gplotAddPlot(gplot, naseq, nag, GPLOT_POINTS, "green"); gplotAddPlot(gplot, naseq, nab, GPLOT_POINTS, "blue"); gplotMakeOutput(gplot); l_fileDisplay("/tmp/lept/rotate/absdiff.png", 100, 100, 1.0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); numaDestroy(&naseq); gplotDestroy(&gplot); } #endif /* Do a succession of 180 7-degree rotations in a cw * direction, and unwind the result with another set in * a ccw direction. Although there is a considerable amount * of distortion after successive rotations, after all * 360 rotations, the resulting image is restored to * its original pristine condition! */ #if 1 rotflag = L_ROTATE_AREA_MAP; /* rotflag = L_ROTATE_SHEAR; */ /* rotflag = L_ROTATE_SAMPLING; */ ang = 7.0 * deg2rad; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixRotate(pixs, ang, rotflag, L_BRING_IN_WHITE, w, h); pixWrite("/tmp/lept/rotate/rot7.png", pixd, IFF_PNG); for (i = 1; i < 180; i++) { pixs = pixd; pixd = pixRotate(pixs, ang, rotflag, L_BRING_IN_WHITE, w, h); if ((i % 30) == 0) pixDisplay(pixd, 600, 0); pixDestroy(&pixs); } pixWrite("/tmp/lept/rotate/spin.png", pixd, IFF_PNG); pixDisplay(pixd, 0, 0); for (i = 0; i < 180; i++) { pixs = pixd; pixd = pixRotate(pixs, -ang, rotflag, L_BRING_IN_WHITE, w, h); if (i && (i % 30) == 0) pixDisplay(pixd, 600, 500); pixDestroy(&pixs); } pixWrite("/tmp/lept/rotate/unspin.png", pixd, IFF_PNG); pixDisplay(pixd, 0, 500); pixDestroy(&pixd); #endif return 0; } leptonica-1.86.0/prog/runlengthtest.c000066400000000000000000000077471506303110300176140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * runlengthtest.c * * Set 1 tests the runlength and 1-component dynamic range transform. * Set 2 tests the 3-component (rgb) dynamic range transform. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_float32 avediff, rmsdiff; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; if (argc != 1) return ERROR_INT(" Syntax: runlengthtest", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/run"); /* Set 1 */ startTimer(); pix1 = pixRead("rabi.png"); pix2 = pixRunlengthTransform(pix1, 0, L_HORIZONTAL_RUNS, 8); pix3 = pixRunlengthTransform(pix1, 0, L_VERTICAL_RUNS, 8); pix4 = pixMinOrMax(NULL, pix2, pix3, L_CHOOSE_MIN); pix5 = pixMaxDynamicRange(pix4, L_LOG_SCALE); pix6 = pixMinOrMax(NULL, pix2, pix3, L_CHOOSE_MAX); pix7 = pixMaxDynamicRange(pix6, L_LOG_SCALE); lept_stderr("Time for set 1: %7.3f sec\n", stopTimer()); pixDisplay(pix2, 0, 0); pixDisplay(pix3, 600, 0); pixDisplay(pix4, 1200, 0); pixDisplay(pix5, 1800, 0); pixDisplay(pix6, 1200, 0); pixDisplay(pix7, 1800, 0); pixWrite("/tmp/lept/run/pixh.png", pix2, IFF_PNG); pixWrite("/tmp/lept/run/pixv.png", pix3, IFF_PNG); pixWrite("/tmp/lept/run/pixmin.png", pix4, IFF_PNG); pixWrite("/tmp/lept/run/pixminlog.png", pix5, IFF_PNG); pixWrite("/tmp/lept/run/pixmax.png", pix6, IFF_PNG); pixWrite("/tmp/lept/run/pixmaxlog.png", pix7, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); /* Set 2 */ startTimer(); pix1 = pixRead("test24.jpg"); pixWriteJpeg("/tmp/lept/run/junk24.jpg", pix1, 5, 0); pix2 = pixRead("/tmp/lept/run/junk24.jpg"); pixCompareGrayOrRGB(pix1, pix2, L_COMPARE_ABS_DIFF, GPLOT_PNG, NULL, &avediff, &rmsdiff, &pix3); lept_stderr("Ave diff = %6.3f, RMS diff = %6.3f\n", avediff, rmsdiff); pix4 = pixMaxDynamicRangeRGB(pix3, L_LINEAR_SCALE); pix5 = pixMaxDynamicRangeRGB(pix3, L_LOG_SCALE); lept_stderr("Time for set 2: %7.3f sec\n", stopTimer()); pixDisplay(pix4, 0, 800); pixDisplay(pix5, 1000, 800); pixWrite("/tmp/lept/run/linear.png", pix4, IFF_PNG); pixWrite("/tmp/lept/run/log.png", pix5, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return 0; } leptonica-1.86.0/prog/scale_it.c000066400000000000000000000123721506303110300164570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scale_it.c * * scale_it filein scalex scaley fileout lossless [sharpen antialias togray] * * where * scalex: floating pt input * scaley: ditto * lossless: (for bpp >= 8) 1 to output jpeg; 0 to output png * sharpen : (for bpp > 1; scale factor in [0.2 ... 1.4]): * 1 to sharpen; 0 not to sharpen * antialias: (for bpp > 1): 1 to use area-mapping or linear * interpolation; 0 for sampling. * togray: (for bpp == 1, reduction): 1 for scale-to-gray; * 0 for sampling * * The choice of writing lossless (png) or lossy (jpeg) only applies * for bpp >= 8. Otherwise: * bpp == 1 --> tiffg4 * bpp == 2 --> png * bpp == 4 --> png * * Sharpening: no sharpening is done for scale factors < 0.2 or > 1.4. * Sharpening increases the saliency of edges, making the scaled image * look less fuzzy. It is much slower than scaling without sharpening. * The default is to sharpen. * * Antialias: area-mapping and linear interpolation give higher * quality results with bpp > 1. Sampling is faster, but shows * artifacts, such as pixel-sized steps in lines. The default is * to use antialiasing. * * ScaleToGray: for bpp == 1, downscaling to gray gives a better appearance * than subsampling. The default is to scale-to-gray. * * The defaults are all intended to improve the quality of the result. * The quality can be degraded, with faster processing, by setting * some of the three optional inputs to 0. * * Note that the short form: * scale_it filein scalex scaley fileout lossless * is equivalent to * scale_it filein scalex scaley fileout lossless 1 1 1 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 sharpen, antialias, togray, lossless, d; l_float32 scalex, scaley; PIX *pixs, *pixd; if (argc != 6 && argc != 9) return ERROR_INT( "\n Syntax: scale_it filein scalex scaley fileout lossless " "[sharpen antialias togray]", __func__, 1); filein = argv[1]; scalex = atof(argv[2]); scaley = atof(argv[3]); fileout = argv[4]; lossless = atoi(argv[5]); sharpen = antialias = togray = 1; if (argc == 9) { sharpen = atoi(argv[6]); antialias = atoi(argv[7]); togray = atoi(argv[8]); } if (scalex <= 0 || scaley <= 0) return ERROR_INT("invalid scale factor; must be > 0.0", __func__, 1); setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); d = pixGetDepth(pixs); if (d == 1) { if (togray && scalex < 1.0) pixd = pixScaleToGray(pixs, scalex); else /* this will just scale by sampling */ pixd = pixScaleBinary(pixs, scalex, scaley); } else { if (antialias == 0) { pixd = pixScaleBySampling(pixs, scalex, scaley); } else if (sharpen == 0) { pixd = pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); } else { /* antialias == 1, sharpen == 1 */ pixd = pixScale(pixs, scalex, scaley); } } if (!pixd) return ERROR_INT("pixd not made", __func__, 1); d = pixGetDepth(pixd); if (d == 1) pixWrite(fileout, pixd, IFF_TIFF_G4); else if (d == 2 || d == 4) pixWrite(fileout, pixd, IFF_PNG); else { /* d >= 8 */ if (lossless) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); } pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/scale_reg.c000066400000000000000000000264061506303110300166230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scale_reg.c * * This tests a number of scaling operations, through the pixScale() * interface. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *image[10] = {"feyn-fract.tif", /* 1 bpp */ "weasel2.png", /* 2 bpp; no cmap */ "weasel2.4c.png", /* 2 bpp; cmap */ "weasel4.png", /* 4 bpp; no cmap */ "weasel4.16c.png", /* 4 bpp; cmap */ "weasel8.png", /* 8 bpp; no cmap */ "weasel8.240c.png", /* 8 bpp; cmap */ "test16.png", /* 16 bpp rgb */ "marge.jpg", /* 32 bpp rgb */ "test24.jpg"}; /* 32 bpp rgb */ static const l_int32 SPACE = 30; static const l_int32 WIDTH = 300; static const l_float32 FACTOR[5] = {2.3f, 1.5f, 1.1f, 0.6f, 0.3f}; static void AddScaledImages(PIXA *pixa, const char *fname, l_int32 width); static void PixaSaveDisplay(PIXA *pixa, L_REGPARAMS *rp); static void TestSmoothScaling(const char *fname, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixc; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test 1 bpp */ lept_stderr("\n-------------- Testing 1 bpp ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[0]); pixc = pixScale(pixs, 0.32, 0.32); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 0 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScaleToGray3(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 1 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScaleToGray4(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScaleToGray6(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScaleToGray8(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 4 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScaleToGray16(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 6 */ for (i = 1; i < 10; i++) { pixa = pixaCreate(0); AddScaledImages(pixa, image[i], WIDTH); PixaSaveDisplay(pixa, rp); /* 7 - 15 */ } pixDestroy(&pixs); /* Test 2 bpp without colormap */ lept_stderr("\n-------------- Testing 2 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[1]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 2.25, 2.25); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 16 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 17 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 18 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 19 */ /* Test 2 bpp with colormap */ lept_stderr("\n-------------- Testing 2 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[2]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 2.25, 2.25); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 20 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 21 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 22 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 23 */ /* Test 4 bpp without colormap */ lept_stderr("\n-------------- Testing 4 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[3]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.72, 1.72); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 24 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 25 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 26 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 27 */ /* Test 4 bpp with colormap */ lept_stderr("\n-------------- Testing 4 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[4]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.72, 1.72); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 28 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 29 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 30 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 31 */ /* Test 8 bpp without colormap */ lept_stderr("\n-------------- Testing 8 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[5]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 32 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 33 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 34 */ pixaAddPix(pixa, pixc, L_INSERT); pixs = pixRead("graytext.png"); pixc = pixScaleToSize(pixs, 0, 32); /* uses fast unsharp masking */ regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 35 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 36 */ pixDestroy(&pixs); /* Test 8 bpp with colormap */ lept_stderr("\n-------------- Testing 8 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[6]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 37 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 38 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 39 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 40 */ /* Test 16 bpp */ lept_stderr("\n-------------- Testing 16 bpp ------------\n"); pixa = pixaCreate(0); pixs = pixRead(image[7]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 41 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 42 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 43 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 44 */ /* Test 32 bpp */ lept_stderr("\n-------------- Testing 32 bpp ------------\n"); pixa = pixaCreate(0); pixs = pixRead(image[8]); pixaAddPix(pixa, pixs, L_INSERT); pixc = pixScale(pixs, 1.42, 1.42); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 45 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 46 */ pixaAddPix(pixa, pixc, L_INSERT); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 47 */ pixaAddPix(pixa, pixc, L_INSERT); PixaSaveDisplay(pixa, rp); /* 48 */ /* Test 32 bpp low-pass filtered smooth scaling */ TestSmoothScaling("test24.jpg", rp); /* 49 */ return regTestCleanup(rp); } static void AddScaledImages(PIXA *pixa, const char *fname, l_int32 width) { l_int32 i, w; l_float32 scalefactor; PIX *pixs, *pix1, *pix2, *pix3; pixs = pixRead(fname); w = pixGetWidth(pixs); for (i = 0; i < 5; i++) { scalefactor = (l_float32)width / (FACTOR[i] * (l_float32)w); pix1 = pixScale(pixs, FACTOR[i], FACTOR[i]); pix2 = pixScale(pix1, scalefactor, scalefactor); pix3 = pixConvertTo32(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixDestroy(&pixs); } static void PixaSaveDisplay(PIXA *pixa, L_REGPARAMS *rp) { PIX *pixd; pixd = pixaDisplayTiledInRows(pixa, 32, 3000, 1.0, 0, SPACE, 2); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); } static void TestSmoothScaling(const char *fname, L_REGPARAMS *rp) { l_int32 i; l_float32 scale, upscale; PIX *pix1, *pix2, *pix3; PIXA *pixa; pix1 = pixRead(fname); pixa = pixaCreate(12); scale = 0.5; for (i = 0; i < 12; i++) { scale *= 0.7; upscale = 0.25 / scale; if (rp->display) lept_stderr("scale = %5.3f\n", scale); pix2 = pixScaleSmooth(pix1, scale, scale); pix3 = pixScale(pix2, upscale, upscale); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pix2 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 10, 2); regTestWritePixAndCheck(rp, pix2, IFF_PNG); pixDisplayWithTitle(pix2, 0, 300, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); } leptonica-1.86.0/prog/scaleandtile.c000066400000000000000000000073161506303110300173260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scaleandtile.c * * Generates a single image tiling of all images in a directory * whose filename contains a given substring. The filenames * are filtered and sorted, and read into a pixa, which is * then tiled into a pix at a specified depth, and finally * written out to file. * * Input: dirin: directory that has image files * depth (output depth: 1, 8 or 32; use 32 for RGB) * width (of each tile; all pix are scaled to the same width) * ncols (number of tiles in each row) * background (0 for white, 1 for black) * fileout: output tiled image file * * Note: this program is Unix only; it will not compile under cygwin. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Change these and recompile if necessary */ static const l_int32 BACKGROUND_COLOR = 0; static const l_int32 SPACING = 25; /* between images and on outside */ static const l_int32 BLACK_BORDER = 2; /* surrounding each image */ int main(int argc, char **argv) { char *dirin, *substr, *fileout; l_int32 depth, width, ncols; PIX *pixd; PIXA *pixa; if (argc != 7) return ERROR_INT( "Syntax: scaleandtile dirin substr depth width ncols fileout", __func__, 1); dirin = argv[1]; substr = argv[2]; depth = atoi(argv[3]); width = atoi(argv[4]); ncols = atoi(argv[5]); fileout = argv[6]; setLeptDebugOK(1); /* Avoid division by zero if ncols == 0 and require a positive value. */ if (ncols <= 0) return ERROR_INT("Expected a positive value for ncols", __func__, 1); /* Read the specified images from file */ if ((pixa = pixaReadFiles(dirin, substr)) == NULL) return ERROR_INT("safiles not made", __func__, 1); lept_stderr("Number of pix: %d\n", pixaGetCount(pixa)); /* Tile them */ pixd = pixaDisplayTiledAndScaled(pixa, depth, width, ncols, BACKGROUND_COLOR, SPACING, BLACK_BORDER); if (depth < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/scaleimages.c000066400000000000000000000107071506303110300171510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scaleimages.c * * Syntax: * scaleimages dirin pattern scalefactor dirout rootname [compress_type] * * pattern: a filter on the filenames in directory 'dirin' * rootname: the root of the output file names. For example, if the * output scaled images have jpeg compression, their file * names would be: * [rootname]_001.jpg * [rootname]_002.jpg * ... * compress_type: optional argument; use one of the following: * png, jpg, tiff, tiffg4, pnm, bmp, webp, jp2, gif * * Notes: * (1) If the optional 'compress_type' argument is given, this writes * all output images in that format. * Otherwise, each output image is written in the format implied * by the extension of its input filename. * * Example usage with jpeg compressed input files in the current directory: * (a) scaleimages . jpg 0.23 /tmp/out file_ * Writes jpeg output files: /tmp/out/file_001.jpg, ... * (b) scaleimages . jpg 0.23 /tmp/out file_ png * Writes png output files: /tmp/out/file_001.png, ... */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char outname[512]; char *dirin, *pattern, *dirout, *rootname, *comptype, *fname, *extension; l_int32 i, n, format; l_float32 scalefactor; PIX *pix1, *pix2; SARRAY *sa1; if (argc != 6 && argc != 7) return ERROR_INT(" Syntax: scaleimages dirin pattern scalefactor" " dirout rootname [compress_type]", __func__, 1); dirin = argv[1]; pattern = argv[2]; scalefactor = atof(argv[3]); dirout = argv[4]; rootname = argv[5]; comptype = NULL; if (argc == 7) comptype = argv[6]; sa1 = getSortedPathnamesInDirectory(dirin, pattern, 0, 0); sarrayWriteStderr(sa1); n = sarrayGetCount(sa1); for (i = 0; i < n; i++) { fname = sarrayGetString(sa1, i, L_NOCOPY); if ((pix1 = pixRead(fname)) == NULL) { L_ERROR("pix[%d] not read\n", __func__, i); continue; } /* Determine the output compression format */ if (comptype) format = getFormatFromExtension(comptype); else format = getImpliedFileFormat(fname); lept_stderr("fname = %s, format: %d\n", fname, format); /* Determine the name of the output scaled image file */ extension = (char *)getFormatExtension(format); snprintf(outname, sizeof(outname), "%s/%s%03d.%s", dirout, rootname, i + 1, extension); lept_stderr("Writing %s\n", outname); /* Scale and output */ pix2 = pixScale(pix1, scalefactor, scalefactor); pixWrite(outname, pix2, format); pixDestroy(&pix1); pixDestroy(&pix2); } sarrayDestroy(&sa1); return 0; } leptonica-1.86.0/prog/scaletest1.c000066400000000000000000000056561506303110300167530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scaletest1.c * * scaletest1 filein scalex scaley fileout * where * scalex, scaley are floating point input * * For d < 8 bpp, writes output in png * For d >= 8 bpp, uses output file extension to determine output format. * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 d, fmt; l_float32 scalex, scaley; PIX *pixs, *pixd; if (argc != 5) return ERROR_INT(" Syntax: scaletest1 filein scalex scaley fileout", __func__, 1); filein = argv[1]; scalex = atof(argv[2]); scaley = atof(argv[3]); fileout = argv[4]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); /* choose type of scaling operation */ #if 1 pixd = pixScale(pixs, scalex, scaley); #elif 0 pixd = pixScaleLI(pixs, scalex, scaley); #elif 0 pixd = pixScaleSmooth(pixs, scalex, scaley); #elif 0 pixd = pixScaleAreaMap(pixs, scalex, scaley); #elif 0 pixd = pixScaleBySampling(pixs, scalex, scaley); #else pixd = pixScaleToGray(pixs, scalex); #endif d = pixGetDepth(pixd); if (d < 8) { pixWrite(fileout, pixd, IFF_PNG); } else { fmt = getImpliedFileFormat(fileout); pixWrite(fileout, pixd, fmt); } pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/scaletest2.c000066400000000000000000000304721506303110300167460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * scaletest2.c * * Tests scale-to-gray, unsharp masking, smoothing, and color scaling */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define DISPLAY 0 /* set to 1 to see the results */ int main(int argc, char **argv) { PIX *pixs; l_int32 d; if (argc != 2) return ERROR_INT(" Syntax: scaletest2 filein", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/scale"); if ((pixs = pixRead(argv[1])) == NULL) return ERROR_INT("pixs not made", __func__, 1); d = pixGetDepth(pixs); #if 1 /* Integer scale-to-gray functions */ if (d == 1) { PIX *pixd; pixd = pixScaleToGray2(pixs); pixWrite("/tmp/lept/scale/s2g_2x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray3(pixs); pixWrite("/tmp/lept/scale/s2g_3x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray4(pixs); pixWrite("/tmp/lept/scale/s2g_4x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray6(pixs); pixWrite("/tmp/lept/scale/s2g_6x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray8(pixs); pixWrite("/tmp/lept/scale/s2g_8x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray16(pixs); pixWrite("/tmp/lept/scale/s2g_16x", pixd, IFF_PNG); pixDestroy(&pixd); } #endif #if 1 /* Various non-integer scale-to-gray, compared with * with different ways of getting similar results */ if (d == 1) { PIX *pixt, *pixd; pixd = pixScaleToGray8(pixs); pixWrite("/tmp/lept/scale/s2g_8.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, 0.124); pixWrite("/tmp/lept/scale/s2g_124.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, 0.284); pixWrite("/tmp/lept/scale/s2g_284.png", pixd, IFF_PNG); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleBySampling(pixt, 284./250., 284./250.); pixWrite("/tmp/lept/scale/s2g_284.2.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleGrayLI(pixt, 284./250., 284./250.); pixWrite("/tmp/lept/scale/s2g_284.3.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleBinary(pixs, 284./250., 284./250.); pixd = pixScaleToGray4(pixt); pixWrite("/tmp/lept/scale/s2g_284.4.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleGrayLI(pixt, 0.49, 0.49); pixWrite("/tmp/lept/scale/s2g_42.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleSmooth(pixt, 0.49, 0.49); pixWrite("/tmp/lept/scale/s2g_4sm.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleBinary(pixs, .16/.125, .16/.125); pixd = pixScaleToGray8(pixt); pixWrite("/tmp/lept/scale/s2g_16.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, .16); pixWrite("/tmp/lept/scale/s2g_16.2.png", pixd, IFF_PNG); pixDestroy(&pixd); } #endif #if 1 /* Antialiased (smoothed) reduction, along with sharpening */ if (d != 1) { PIX *pixt1, *pixt2; startTimer(); pixt1 = pixScaleSmooth(pixs, 0.154, 0.154); lept_stderr("fast scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt1, 0, 0, "smooth scaling", DISPLAY); pixWrite("/tmp/lept/scale/smooth1.png", pixt1, IFF_PNG); pixt2 = pixUnsharpMasking(pixt1, 1, 0.3); pixWrite("/tmp/lept/scale/smooth2.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 200, 0, "sharp scaling", DISPLAY); pixDestroy(&pixt1); pixDestroy(&pixt2); } #endif #if 1 /* Test a large range of scale-to-gray reductions */ if (d == 1) { l_int32 i; l_float32 scale; PIX *pixd; for (i = 2; i < 15; i++) { scale = 1. / (l_float32)i; startTimer(); pixd = pixScaleToGray(pixs, scale); lept_stderr("Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 75 * i, 100, "scaletogray", DISPLAY); pixDestroy(&pixd); } for (i = 8; i < 14; i++) { scale = 1. / (l_float32)(2 * i); startTimer(); pixd = pixScaleToGray(pixs, scale); lept_stderr("Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 100 * i, 600, "scaletogray", DISPLAY); pixDestroy(&pixd); } } #endif #if 1 /* Test the same range of scale-to-gray mipmap reductions */ if (d == 1) { l_int32 i; l_float32 scale; PIX *pixd; for (i = 2; i < 15; i++) { scale = 1. / (l_float32)i; startTimer(); pixd = pixScaleToGrayMipmap(pixs, scale); lept_stderr("Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 75 * i, 100, "scale mipmap", DISPLAY); pixDestroy(&pixd); } for (i = 8; i < 12; i++) { scale = 1. / (l_float32)(2 * i); startTimer(); pixd = pixScaleToGrayMipmap(pixs, scale); lept_stderr("Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 100 * i, 600, "scale mipmap", DISPLAY); pixDestroy(&pixd); } } #endif #if 1 /* Test several methods for antialiased reduction, * along with sharpening */ if (d != 1) { PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6, *pixt7; l_float32 SCALING = 0.27; l_int32 SIZE = 7; l_int32 smooth; l_float32 FRACT = 1.0; smooth = SIZE / 2; startTimer(); pixt1 = pixScaleSmooth(pixs, SCALING, SCALING); lept_stderr("fast scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt1, 0, 0, "smooth scaling", DISPLAY); pixWrite("/tmp/lept/scale/sm_1.png", pixt1, IFF_PNG); pixt2 = pixUnsharpMasking(pixt1, 1, 0.3); pixDisplayWithTitle(pixt2, 150, 0, "sharpened scaling", DISPLAY); startTimer(); pixt3 = pixBlockconv(pixs, smooth, smooth); pixt4 = pixScaleBySampling(pixt3, SCALING, SCALING); lept_stderr("slow scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt4, 200, 200, "sampled scaling", DISPLAY); pixWrite("/tmp/lept/scale/sm_2.png", pixt4, IFF_PNG); startTimer(); pixt5 = pixUnsharpMasking(pixs, smooth, FRACT); pixt6 = pixBlockconv(pixt5, smooth, smooth); pixt7 = pixScaleBySampling(pixt6, SCALING, SCALING); lept_stderr("very slow scale + sharp: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt7, 500, 200, "sampled scaling", DISPLAY); pixWrite("/tmp/lept/scale/sm_3.jpg", pixt7, IFF_JFIF_JPEG); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); } #endif #if 1 /* Test the color scaling function, comparing the * special case of scaling factor 2.0 with the * general case. */ if (d == 32) { PIX *pix1, *pix2, *pixd; NUMA *nar, *nag, *nab, *naseq; GPLOT *gplot; startTimer(); pix1 = pixScaleColorLI(pixs, 2.00001, 2.0); lept_stderr(" Time with regular LI: %7.3f\n", stopTimer()); pixWrite("/tmp/lept/scale/color1.jpg", pix1, IFF_JFIF_JPEG); startTimer(); pix2 = pixScaleColorLI(pixs, 2.0, 2.0); lept_stderr(" Time with 2x LI: %7.3f\n", stopTimer()); pixWrite("/tmp/lept/scale/color2.jpg", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); pixGetColorHistogram(pixd, 1, &nar, &nag, &nab); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("/tmp/lept/scale/c_absdiff", GPLOT_PNG, "Number vs diff", "diff", "number"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, naseq, nar, GPLOT_POINTS, "red"); gplotAddPlot(gplot, naseq, nag, GPLOT_POINTS, "green"); gplotAddPlot(gplot, naseq, nab, GPLOT_POINTS, "blue"); gplotMakeOutput(gplot); l_fileDisplay("/tmp/lept/scale/c_absdiff.png", 0, 100, 1.0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&naseq); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); gplotDestroy(&gplot); } #endif #if 1 /* Test the gray LI scaling function, comparing the * special cases of scaling factor 2.0 and 4.0 with the * general case */ if (d == 8 || d == 32) { PIX *pixt, *pix0, *pix1, *pix2, *pixd; NUMA *nagray, *naseq; GPLOT *gplot; if (d == 8) pixt = pixClone(pixs); else pixt = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pix0 = pixScaleGrayLI(pixt, 0.5, 0.5); #if 1 startTimer(); pix1 = pixScaleGrayLI(pix0, 2.00001, 2.0); lept_stderr(" Time with regular LI 2x: %7.3f\n", stopTimer()); startTimer(); pix2 = pixScaleGrayLI(pix0, 2.0, 2.0); lept_stderr(" Time with 2x LI: %7.3f\n", stopTimer()); #else startTimer(); pix1 = pixScaleGrayLI(pix0, 4.00001, 4.0); lept_stderr(" Time with regular LI 4x: %7.3f\n", stopTimer()); startTimer(); pix2 = pixScaleGrayLI(pix0, 4.0, 4.0); lept_stderr(" Time with 2x LI: %7.3f\n", stopTimer()); #endif pixWrite("/tmp/lept/scale/gray1", pix1, IFF_JFIF_JPEG); pixWrite("/tmp/lept/scale/gray2", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); nagray = pixGetGrayHistogram(pixd, 1); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("/tmp/lept/scale/g_absdiff", GPLOT_PNG, "Number vs diff", "diff", "number"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, naseq, nagray, GPLOT_POINTS, "gray"); gplotMakeOutput(gplot); l_fileDisplay("/tmp/lept/scale/g_absdiff.png", 750, 100, 1.0); pixDestroy(&pixt); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&naseq); numaDestroy(&nagray); gplotDestroy(&gplot); } #endif pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/scots-frag.tif000066400000000000000000006340401506303110300173060ustar00rootroot00000000000000MM*7b˙˙˙˙˙˙˙˙˙˙˙˙ū[™lŦôú uÅuAK ´;ŧ<SR™PĐ9jÍ;t  öŽ„ĢŨj˙UîŦ†„{Ø{~¯Mî?øA7˙ßūß­q—ÚíúĮ][{ö͝˙eïØ%&Į¯ŊŋūĨøc¯ŠĄIßûūŊÛwĸ_ēUOŋé7"âĩAsd$j˙ØIĩ¯aīīíĨČ(øn W_ēõđm‚*xaPīŠī]ŌJ°ũŽ—ĮČĩī‘ÎūÚēøęŋ 6(xĮ˙"×Ī~‚H7í{˙]xmūžĒ¯­+Ŗ˛-§]}ŋ¤°’ ģūūà ˙o ČíwũģŊōƒÖ×ųØ0_ ßäGņZzH/Öû:d0GĒčėQņū™¯˛8sI?ūîy‡~[­l7÷ĨũwfĄ×Âz˙Ą˙šŦõ_wūvk„øĩÔč}=ĩI*Ih$ßVGÖåņVÚ{¸"=ßŌz­ūÃû×`÷_ŋëûa…č^ŸBŨ˙.ƒŋ;ė*W˙īđíĨžīĩ˟wU˙ô’D8é/KßZy‡į,bĒĘ{˙ūûĶī_6úīú÷Ĩ,tú_{ô“qZîKžëô˙âģūžūëîF[îŊīč!ũ• ĒŋÛũ>’ęĶ˙÷ļ¯]ŋ×î|ūŗwŋˇ‘¯×ēĐA*_­¤ŋ÷¤÷͝{ž­ũņ÷ßŨi~¯ĩo^ô’IîŊ…÷ú˙mm/×OÕ×ũ.ŋX]éÖŋļŊi%ĩM ŋ˙ߤŨwûíÛī˙ßjęŋÂĨíô—÷Ū•¤Ŧ)LÅ˙ū›ÛŽŌŊŋ÷_á×UéŌŽļڄ菧¤tYŨnėė×SmL ‚ ŋëjÚMĨpõzíC˙Ũ-ęÕRO"%Ū“†hÅļĖÃ9°Pę†aژząM}˙ ˜aY —ōĮa$é_ˆaĪ‘そߞԑn˛āĐĶÃBĖ[ ˆaÁĄnÄ)ŨÜqhGĢL-¯§­¤Å1IĐu< fēģÚĪgKVÂQ ŽãĻ428`č6‘-ŲÔ_˜ƒ^ĩļÖ@Á2*#Đeã`ā™p!… 'ö);]§p„ZËæÚ!ŠÃ.$[[Q "ÛiŠĻMT˛-• ‘8îšd2͞2ˆŒ›s@d0Û )ũ4ԇ„Č=Ųpb•ÅĄaö A,'åÃLŋ5–*šh¤B""" Ė(„b5.8Ũ„ ˆpĶ/Áˆŗ!×íB=…°A• L†œĐ‰éNæÄDDDDRėˆ9\ƒ9W#ŲRˆˆY'7YNhÉQ2!ŌЈˆˆ¨“c1l‹D"""v HDB"""" TDR”- š“pâ<ĶCBÅŽ&Wí>å°1l´öƒíú´#&ÁjŒ…e.éÕŋMB īc˙â@]ë[Ęęfb;N3ÔG„SEâp„Uš2âgfĻG‹‘žJ‘ŧü`#…*ķÄxˆâ˜‚ĸ;É8Ā„r#ƒ›G3Ä\ėŽ Hāx`Kh|ä`ČR< ‡`HŠÄp< Ã9 Ã\Ād3ˏd„.!āĨÃTØRė!–Đ™˜É+<‹†‘ÆGc ÎvSÆņ‘ĀđÍ9”.†œDDDDDFY lšR!Į0įÂ(Ņ!Éá Ū"@ˆˆˆˆˆˆ‰hf–s0Ę9’ 8-ë–™|Ž sy+GȎd|Āe"āxkp&š s`x76¤c4Ča‚­dK™|Ã/ČĢ#‘eJˆÂr.…:†@*4I3ąÁœŽįŲx؆i€Č ŗc.‚ōųÔ‹Š`7™ælØĖf#q.ų 4‰°m0dvG2&rŦØAģ“Pasm!ŦŊH2q qÎsŽļp ČlČU„v R5HĀÍ @hæã.Äxà šI!˂Xo)Čqö´GÆŲLŠ)n sh& x!hųĪŠŦChš‘ÁT”Š`ˆāhŽ į‘ €¤p͘RȎDrȟ"ˆˆˆâ""""""@Ė3|âæÂË$AȲ ­„…ĖÜqČ*ņĘHÜ㓃íA,:cä S”9g x4ŽrĶėlō$ x> ˛  †M­š †EĖādƒr8 HŽ2„"TĖÁˆ‰\FaˆˆÄD”!›:æŅ˜6‘Å=’ ×eņPˆˆˆŧcōĶĢ,Å%°\"n$’Šmq‰jÔ¤×+•éīO唎­O˙Ēã˙“U˙˙˙˙úõ˙˙íú,‚s–âĻvļ˙įS!įȒ ‚Πđúac5™Â%ŲU‚ ŧÍąPe™2ĘiáĪXŦ‚ĄU A˜EĀ„Â 0§AĘĶ2,Ę ČŌ7Ô ŸÁÕDxMB!ņ!YÔBŦBôf ‡d D3ÎB â:ƒÅ$sāˇš “†>•h4G0ÖH/Q CĐ4Ņtäb5 ¸“E D2‰ŸíCtr°Ō:`Ã#Č4X#HLDGLãéļA{ ždH:ŽuiÂS„đƒŲ ķF"€˛-'pÖd3—"Ėl‰áˆ.SĮ@B@@axTīģvęĄÃi<íP9ĐFXā‚AĻįĖðĄAļøA­ H šôŲĄ÷¤RĻФƒĨM†ŧ ƒUĩ~ûŽ—õw#Ĩīļ ũöÛ õnžíô–éfĒ_ÃũÕû}:W[ŽßŧÎ×ö×_,ĒLķ. Ÿoũũ?õēũ: :_ˇíßISŠØ `‘.$0Íûx­+^‰=žũ8{õ¯īûˇ˙„Cgĩ˛ĪĪ×ô÷īzmuōĮVą÷Ã÷ģI$üv[‚”eq¸›āpR"R'\ãäęûëļ vxũ=,˜ũwâ¸c„Aá…-ĀČØ"!š9pSÁC‚âä3?â[ëOūŨō —ĄuÅŪ5ĩļš;z_iPˆš ސŲ;DĐ4 ep1č40ƒôE|˙“J­č‚¨5ĨĢXĢ~­ŌČlŲ-WP&8:h7< ūíc[ĶrJōW`ņëĮíūŨd mN‚>EB…†ˆ#Â~Į$˙ß˙Į× @ˇmzī`ôƒĻ Ģķ;”2s¤fҁ˙ŋũũŋAp~o¨męô›Lx­îXėC„D ԕĐAßVũžû˙÷yđžģúė}&‚tøŪÂ[¤đŽ=Ã÷ŽE|pچũ}Ö ŋģė¸Fé>ôWäAúĨŗˆ"?Į]ü‡uũÃc˙o…ī‡ãj<=+™DQ"ߥj&."%LxVû’qņō܃úēņûāū¤ŪŽeXÁzDGĩ$>Lzr9I­E|ˆũ}•‡õßŖ1zĒ~BQˇāßāĨ@/ēŋqĢÜAøũúõŊ‘˙`‹¯aՒkØíÛU jÕĖĻ „ĒIôŒđß!c&=ÖŌ Î;I —čąėAĶ_PÅûđžûĮi°Ī^’ĶO˙ņEũ"t’÷!ÁŊÚßÛŨ~¯Ņœd¤.ˇĶÚĄģÅktˇéGĄŦ;’;ęËBĪĩPŊÁī}ڍ‘G]=%&>–÷¯EÊ ö!CõÆRÉĄūˇĒûÉĸ‘bá…q{]­7÷ČŖŌŪļî-T‡:hMԍ‡“Ün¸3v;Ն“ÃČG°¤Į‘͆.õ—3a'~ČæN‚"Â˙áą ¨ž¸=—~Ö˙ü:"đĮa­âBT둇a‚jIëB<§ô„HĒ`ˆũĸnx­ÅÛ"[ ßđņ}ī˙Jîƒübá;BgMZâūõ‹ĐnKŽ?v&vōĸ?sAû×Öˇ~øģ)ôްu á1ŒŠũ ÂŽF:˙ę"?t\aĻËv“bâĒîO?GŨrûę5ŋČlž Žcq¸Ž¯zŪČ?õ¸ļÎÄlC/Ļ­ë×_ēŽ ÚōrĮë"C–åÅUW$)];w¸p“%ūãß˙tŠúääOČąŦČ ãøūųq‘ ܂ã)21īÖõuīëéëßúëÖ2okī2/’â}÷ˇîÁ„ÖE2ãņCėc˙Ēē˙÷ßßŋ‡ēĮ!GæN ƒ¨jf´WB‘‘_ĸ ˙ŽÕ¤6—Ø­Ã}üü¸ŊŋÛJŋŽÃBžFãŖ°ąUiœeÆCŽˆEArãI>ĻqūŪ]!ĘéąMšž3č%Ásõ`Į„ a6Xéa§áLM™tPdāÜ qÛȎÖÕwØ^”›˛”Án?!„˙ī˙ēīuęŌ䂆€‚4"ƒNôŠL^6‰NŨ4Ą‡zaBŽ>7û¸9Ų¨g;*ęžMWßMīēûëŊ¯ČŌA¸Ķ[I>5Á<'ĢÕUˆsXaãH0Ņ7Ō ä­wFž‘ŋlzLƒaī˙īíûë×ė ļEZõĄĐ\!ĸ) :rOIŌŲŨtĸ<2ŨJnÂvųĀĘ[×üîaNÁEäĮeÃgî–ũ}6ŊļĒũ„¸Â!āîÂ!G3ƒd â“Ã=Ņ$tŠ8ĐMƒĒzŨqČĮî˛:; ˆxZ„"GŒ{Šĸ|īâÃ@ę„Ĩ÷ûúšČŦ…7i…Ž]Ų ąÉĐ!  „đVlB1"V|"Ŋ ú%Îŧ6Fî4”õI¤‘v´ô›wŅ!ĮqažJ8cŠBBpc¯ú­~öōA­Ģ™†r87ū–‹H6l_h2C('Ŋ~ ŠBä۟ 5z^ž;#…Ą‡#ãˇŌˇ ‚—^ę˙uB6>?h0‹]&ĶXŌ ‘ų1õhŠ=$ȏyÄzÉ zR$dAôĮ‘oũ’,Ü†‡nßAvĻšŅ]ŗ˜­W}čC˛Ŗé4¯õc.¤DS§fŽ*ĸíښ<[\qĶžÁGúNtLCUũáHzà !ŲvÆ` 8]öAĮ[’„ė$ĮĒkv˙rcöâ;¸´ŊޏëŌQá,mí7!Gș÷ĘzFøĒŨߓ; åĀ„,ßh+4Dp.ęÊüîÍÄ3šva>;L¨!Gß­ČĮū×uÛĸ î8ŽF:ųQ}üúQn;ˇŒ"&•Ōm<ėģî:HhœŖö)Ųčâ"Đk ņ’}ÆŋƗ‡˙¨§¨úū¤áG!ßáĮ‘ Ęq鈝~tÂdÆáĻHtÖ"ЏiČŪĒŋzAãū[‹¯âŊeĮ‘ŽäĮĮ#|Š˙AÔ×áŗ°D]lŠ;i īh„ō†DrC“*M0†E 0B Đhv"õÕŋûǐ¯oîēä+äcę*ū4ŖūIÎ?ŊĶBgÍAÔk}ļŽšŧDDI"!‚/˙˙¯čŒŽŊŠ!ß­oņÛ˛Įîä›â=EKkėí;I;KI˜}ˆá˙š?˙Įü|qōcבÔ{ĄŒrŸû[ņĎϓ dŖi6ąž!¨?×˙ę¯l~D{_!UĮ#ŨvĩĨ§k\WŨé1 éŌĩķą°i}8]˙īÜS V;î4¯ũ´@‡ü„uėo˙mCŽÂMĨ“Uˇw¯˙˙íoČŖ”?éšCŽ[Š÷aAĮ"éķŖ °uŪ˛cû vŽ^;ëÛĮöÛėŒsäQŌá‚ū˙¨Đãà "VˊĮ!öb@ēž ’úˇØK“°Ōa‚Lx1ú#{ũ/īĩÉŋųú˙$: TVČAĮoG đ(7Đ""Ëõ.Á„Ģa„ƒ Đøm_’mŊ~žœ|ü[÷N×OĒū=Xi=0a&!0Ģ–ƒGZīˇr-ũŠžņ˙ûo†$>Eˆâ8#˛NŊ×jžXb/ĒCŋ§ļX˙ڑGûȏ˙wūDˆ0ĸĨ˙ÄEØä4:S î ÁÚÄ4Fƒˆķĩ€Î‰ŋū>AAOwĮß_ũ~ ąÂŅ=ÁíˆgŗDD,ūƒ ĄÚąēāęõō߲aøkâūMėŒŊHƒī‡íņã@„"""“UƒûIč7¯īĩŪ=īŽMëGˆ†~ņMM oˆŖøš A]‘ž=d+˙øųų]xü:ĢÚĮÁËų+WūČŖŅc˙ü: öÚ_oĮíĄ¯…í㍠­‘G˙!ĮA>EŽūŽĶŸō1īԆ#\ƒhŠƒW":˙Ŋ§KãÖ˙Ž%” ÷šđžDĻĶâ܄’ũŧmũ˙Ŧ˜ũW§÷QƇ˛ObBC‘Gņĸ éđĢĢ˙_ũĮŌ˙ûx”:qoA¨ÖDĄ÷ļ—˛(ūš{´ą % d;ö›Œ1üŒvQ¨üWáŌøŲ;Ö9'ßô¤î…$ˆŪôNé.üōë;Ãi?ĨûũwéĩuŠÔ¨ ʤ ‚J¤Ÿ$9Oßڎ*¯nģ§÷ŊņJÖ¸xũ'ŌI4¤($DlŠī¸äcŠû­äĮ­dƒ:†ŽE~ˇĮūS‚„*I|r7ßíģČ#zōORLKŽ[Õ-dQԐũôG!ŌÕĄ $’¤’÷ļ›ūņīü§Žũ‘Í_Ô —Wîū¯Ũ?ūī\oč“Ũ‹ŽļBEÕ" ęŠĮ˙ļë(y#īÖ5ũGī~.î0¨„t˙íY!é=6ļ›ßlž}cc_ãŽH!GQÅiâ÷}Ū÷yīHČŖŊvš˙Ž>4†ˇ¯Ļ˛Įū˙÷LwļąŠæüŒ}U^¯ō1á'§§ũ5ĶúõŋwĮi§T‡Ú֙ŦŊ˙ĨIsJēQ­%úŨû)Ųų´=3ˆÛ f8ūĪWŧiBKŠū–—úũūv\ÂĮ'Y„!‘ˏ44Cf—ˆ=ë„ÁBtžšČŪˇJ”„zZ¯ÅÛ÷&hĢ Ũßįa–đ“ Ú\›ƒ}¤ũ<-kJ¯ô9>Žvm˛ŽAĄņi—Žj1Éģ;Ļq&—‚ \\(0zím ˜×^ĩY~•fûzibģ!\‹v"q†„ȐP8¸† 0‚  Ž/ ]õĨQžI,%OCdIž¯'„EęČāē¸@ƒf °Â öŌm[ Ø*„āŌR::$:jļQ,•r>Îc ūPę$Į˛ îA,ŒyØ@B8hH11Uä 4˜ACiED#ĀÕh(‘llƒéŦDDMYņˆ‹"ŽC8ãd$ ʈD˜A@ZäŨI™ æ ™åĪĻ +duMÂwä‡a"phVmø¨X‹c‹2YɀÎ|ŽÆÃ’2pā…’iö$Å­ĨMtfđJči„ČŖxO)đBRĮĐʀå`Ą"%đÄ&„l# ˜L…|ETA„ !ôĄ••˜6ƒ}Ōđ E!Į°˜ĻAâĐ>|T2Q  {úVšPęP–ƒLAš˜&F¸0IŊkL4¤Dģ˛ĘÄâF Đh„Ba˛āūãÁļēB ‚"’ģ!ŠžÂŽĒ•ęŸÉ´)Pá5öŸUZsēÚŨâ(“˜oe(3÷^ĩZ;ĐM6Žø&ZBę‡r¸PCytGˆā¸N¯´š%ëŌŦVËHH‚_!Ątë§^•˙­xkíƒ+¨ÚÃ_ ęēkm'Ęę€A@;ö”t‡M¤Šjĩč4 ?Cîļ?īëģ}zZn•#3Fš^ģ×íkXĒ,≰’\„¯ážgRE §™ Tų9ŽĢûæzõˇqz‚j˜D1+‚*ŗ#%Ąũ$ú&QÂ5 ”ŗ&FļUˆAŖT R†á§âǁü›ŋ¯‘´t‚¨ eĪ8D!üč͐!ļ0A… T×OĻ ˙ôšGŪ`a0Ąm ‹`˜@ÂVƒ(f"§UûvōVŖņ•eL8ƒ U†ÎPVĶũ.ˆļÚēŌTŋ„0 švhØ~ÕtÕ°ēōú ëņÅÖÂFA °ēĒ"^א‘m˜úd%¤éVØhvŌŪN5ÕBkK‘¨ĸ'+@œ<&ÚÚAŅ’ŋMv•„’I>Ģ߇I…¤ė†ÁôĶinûŨ$¯W†•Eŋr-†F<ĐāŠë „=vÕŨ˙:ß\6•[ k„°ƒI¸d5ģ‹zũ*h*áûõčđ?­ļ>Ã#˙éטZļĶJ?_ũoíŽ×Pë ‚[īZIöŸ¯õ].ēÛŽëûƕ÷bŋûŌ_˙ú}ßzīũûˇđ_ũ¤ĢI.ô̝IRKŨm+õëV†ĩū=Ĩũ%ú˙ūŋׯJFK‡ōĶSūB¯˙ZūļēÖŋ]~ŋá^¯°Č.Đ&éëŌJĢ˙ė0’ZĨéQ*ŸÕkūüĖÛņõJXúõZI*ŽÅW]%JŸĨũ~ŋaŌöXâ¸ôFúũUTtŸuūŊũ#Å×ĢŨi—$ē­$ēŌŌK!ÆaôŠRIj´"‰Ž•VŨ-­ē#dŊ/Ē­/¤Y„‚ÕRNgˇë­iS„› NúƁ B(dLCŗˆü/ëé*JkJģ~˙]i¨X‡ûø@‚ ¤ `Á¨Cfh0A‡ál$•%Kވ.žļ ´ÅÚZÚū…˜!ëeÍvÁE°Đa…„A…Ļp†žŌĩŅä$â,iZ Ádę …Į°Ö?’B D_ mÂh‹?B˜îŽ%z|ÜS˙VCŠ_aØA ÖRœ,†oNÃbĄĒíē܃Ŋ&\,*÷ĒØKJŨRǎk ęũKé´ÕT†ímS_ÉE 4›í/š+¯ūԂ_dņ̰ƒ[´Ō%0˜T `™ z f­4üSh˜ũ%î!jČĮû!nŌģL'fႠ5†a0Mƒ ­‚eÂdQU{;U[­}YiĻŠ da$&3¸B!‚CM„D~à }W¤ļ_hˆ˙évĮnÕØ/]$Â(~õßŦy]hîâ#ڏĐĢĮäHČAíĢSû˙Ŋ‘b (ú÷ė|ƒáė“ü~ß˙r čA„2ĮũK2ō;.Fũc˙rČņ’|āišāÁtFģ¯˙ų\Čė&^+ø4âā`ŒŒs3.#˙ģūC#ÆhŽĘâ#‡*3.†æŅĀ<0\2ˆāf ŋL9Įn˙ŧ!,Íl#ą¯|w˙â"$ €V9 ÁČĮ^˙ōQ˙ m:B A{5*Čg…Ô“˙īwÂČd†ĸB†Uj‰dÜąRܔ P@€"r•ĨĶ×ü†AŲá ŨЊ9Č˙ųß^öB9„rc{!ĢÅ3˜û^AŅõŨb""#öķ;}Č4ëēŋĮŽž×˙Ūëũo¯ÉÅúuué˙Né:OíĄëĮnēM×Ģ˙õē{Úmļm']°‰ģüŽZ ,†‚„j@Ša°ÁÛaŒ0Á(h$-А#?‡ 1§ĨĶîWTD0 Á ‘ŲVa ū""’/†ƒDD_ˆ‰õ[gÁ RĶTÎc+Ģ ¨ƒîZsķÂŨrʔW“ĸĘ)D#’ė¨!€dėíØX!\ÍE(†tä3ŲXAs„,Ŧ&¸š–č~™Ü›&Ctâ—oúƒVIĐ2cúŠ˙ûŲn ‡ ^ĖmĸŊ5øy]J~§x +fÂ(čGēãC ¯Ú×÷×2Wí/ųoĒMųßT•ËōĖK;M„ĒŋuwZöū)ëôßĒA}zIXMãŋäcëúI¤´ŊŊ$L|l“˙áŌWģę?øē}m}É>ŋV?[koû˙¯,Ã[úHRJâ’ß‘_îíĩßnŪ>YI°ēˇ¯ģKĨī&ęãŗVhŠb%‚ S0KīK‘îĢ÷Š”ŲÜÆl+=‘Ėá †JĀ RA!g‚„Ö Z Ũ,“žĄéúr e/< 0ā¨0ĄL% •ä ö•φEAIíœu÷Ĩ_ô$›BŨ§ĨuZÂĢA;"Cjá’Ú+§vŋģĨō(˙‡ˆKžÜ;@ôõîļžŪÛ@— Ļŧ˜ũŋI¨HWëÚpõļ§zõIēwŽžéî:Øũ׈ķ´úe˰´NīOūī_~ĩ[ë˙ĪD—ŋyE܌yëʀ„0Ķ-ĖæF6Zqo÷ŽūųâŸŪŧ¨üÃũJ /íJúD*o „Š0Î{$&EN{ØO B đB,§ ˆ4DzZßîPë§U˜xy‡˙Ս˙Ŗ3f‘ÆŨī.d.9P{#⁄#>4A Ū"?Cf´×0„3.éuų‡˙˙Ķī÷’7ũ÷‹ûŨ"ēžųWÉÍ0¤˜1‚!@ũÔ'„ ¯ĸ9ƒ}Î:š!~…Š!wŨŪūq?ž—kŋŪŋézßÕ×Ũ§2+ é¸BÂCAˇ",ÃfœŦ†ˆ^‚lÖ3@Aa€›D¨ŋÎ=%iSûA}W­­ZĨ÷•ˇzėœ-}IHB`5˛æÆú &4EĘÛÂ0Ä:h rQô­į‹t­ ƒ˙ īŽĢiD+ũƒöũę+īR6 4ūīîÉđA‚Š„n˜DŽ"9°ŽË†­úMĩh'ėŽdq˙[¨JŌ$?Ĩ¸ėtÛî]˙Õŧ)mkúņū- ƒ‹Ī´F9^ČĮŅNzQoė$ŧ“ŅßMlÎ#Nūīî¸˙ßŊō7ékëMS’­:æš÷ū“o‚"Í MšÃ¨Al§áiktûwoĨēOĈ=7ĮÕm'ūO’­7ˇŋ˙’?{žû¯‘é&Ō~Ô6×rOIÕŊŊÖÕä‡Ōļ…Ķ÷¤n[îŊîũ˙ÜÚaÁī[ęëüßõdŗÂúũ/oIēēGēPä‡ũEZÚzĩßĩ|˜ë–8~÷˙ęŠöūĖčß{kôīũū_5_ŌuZœˇ˙bí*ĩú˙õCÖīĢ[ۍR{kūģûÕūLôhø˜×ūũj˙…ēúû^n׍xwé­ĮđŋOõßŊëWŽ5“ŠĩũüZ3ęī÷OF‡ô|˙V˙]oÕ?õŲ!í+kã­Ūõ×#û÷¤ŸÕ˙ũVÚ_Ŋ˙Ûû˙Ž´íõO×m/ęĶuŊ˙¨ëģáŌõūŧknļĶĸOûÚÚŋ{č4ęŊë_×îëkęđm„Ŋ4TĶ_§õˇEŋWúŋũmü|4ękŊõ ēîęúÛz¤ē§ūÂĐz 0œaįa0š !❧öęŊ¯¯ũ2oũî¸R1ÜkOMHA¤ŪTã'!‚~ĒŊڄĻ×á=7§ĶM‚ „=“ ŦiRx ĶŌøīģūãíŽAģaG3ŋŧR/ ]úQ†‚ú‚ $š a 6—i÷qĒ#g!J $ÉYėŽB",āÔ=ûŋ×ĩ÷˙äkQtž—Æ@ÅAԐė~>ä ×ņá0žâË´#âˍÄDDY¤Šy1Đūũũ0ŋôŊöģ@ˆËúūöéĘąôÚK|0š^N"ÔЈŽ#Ķ&;ÂīáĨ˙ø˛āĄŽzßü=mBōZšū"jGTmˆúŇúņVũ} …çäĸŋ#ˇņ‚w|ņd,8øˆ¸]C_¯Õō .…yutūŸ×øDLĐzöŋõĒ(˜ūŋy'ōCŽaKi ņümÉäĮ„?jÆØOúß"ˆ>?ę͝‰"ŊԌzU&?Ū9!ņ ’ú’ߙüH␨ûdĮōOãđ¯|oíņë˙tDuÉŗŖ-3ĩL‹ĩ̓?‚`)?úw˙‘D…Ëņũ˙mŌ†ØžWS ƒ;ĄdYš šfZ„EžֆņOōOBGMõ_‡ú _;ŌwųG`dÄv6! k•0=Nôūaú"ĶúŨ|-‡w˙ũˆŧ‚‚˙:‡ Ļmž$ŖAĻũ¤ūĶ_ Ūî•_úŋJ’a˛HyS:“~š'kKYȄGØM=§jč Đa„îĮåƒ0õ<đ—ˏ˙ÆšH ÔãÂLwYW”ņk×õä$˜‡Ŧ›%đĶ0¨43ąėCî/ĸÄRŽŌû߯Ų7¤å.+•˛QĶûTˇi×ķIË} ėPõô!ŨĢ­Ō÷*Yȡ]zë{˜ę¯],„žÃŪŠõ%¯{âX˙ũ}U2¨)ĸA„Ôė'ú\vTHĐķŲÛķžČųƒ5ūr(229Œ f‚0úÛKûßûkŊiĢĨ˙˙_$;¯˙ÁLė!ω`Â˙’IūN O ō#‘›.32.͑ ‹ æbBJb˜SŐĄljô#›¸´ëĢúũqõ~Į_ũųŸÉ;Ō}ęë\&šjNŪĻ›äŦÂļ’i¯ĄhZØOũ›Dž¸M Kwb)8džEÅ=[܃—úß}Õkų8õūW­Ķ_ßē#ą­ ƒßOë>ÉâpÅîē' ‡Ô“†Ũ4‰Ã˙“†‰Ũ’‡'Ž›ōnäãAŨŲŨi=mĻ×}ô§všwtNÛũˇOōcū—Ĩīûíw˙îŖbgļ ›ˇm[ĢK i4XîŸ÷Oúa“´ ÷õ×ŌWN¯ū°×ûøiß_qņ÷ZmŽŊˇĢ‹v˙ûŌû­/Ũ.ũ+ŽMJÕĩĐOą¤ëšß‡ŧ:'ow˙ >ÕĨŋ­˙Ž—ŋŨ~ŋũikĢíëęÕxK§KS—ēRQv›Kĩũ$°m—* „­(­Wî–ŋģģO1ßÚ^ģkø÷X^ąėПß4 ûßˇÆ–§>ë}‘ŽēVĐkjé}}v•ŠX‘ÍĒĸá˜ö '×ŋ¯īŋ߯ūë ņúIÆ˙” ~ų˜OúÚáūŸTö•–>Õo“i1^Ú† (jƅÄ6*ė3aa„šĒ~Eģ”ũû¯Ô~ŊüĐ.ßęėˇ ßN‚ú÷'ŋTN˙ÛßíĨa5§¨Ģ­Û H.9PÕ°ŋ†ÂQ 4̎IŦ1P`“_Ņ$L ëŅ úc˙˙x­^h^žĒ‡}…ûÜŧŪõH/¯ákúęžéDÖ+a¤ė0‘­'†ĐLKqV“a&šiŠš7§„ÂĒ`ˆę\ îŅ֖ŌžŋÁūlûūŋĩ¤īū—÷ŪŪžë˙ũH72g7 =YôÃĢ`Á „†w=˛ô0Jšƒ0Н )Ũ4Ķ"VĨP  "bpÂ4 ŊõvŦuà Į˙˙Žęö­ˇéûOęûĨ×Ģ<ûõú˙}ŌōXÔĢ‚ĒÂÚÕ ĮHč! uϚ“Pa†PŽƒvDD0„-Á‚ģKq˙ūŪîŋ÷ũ'æs×ö{˙ué6ĪúôīN˙¤$Z $Õ(a—lS \xa4Ķ@Â…ōHħÄ0„DD.˙QûõīúuzvmđÛõTÛUîÕ°œ5´ôî÷ 8°ƒPšjÁϚę߸Ϛ bˆ8h@Đd 0„Dëēũë˙˙ĶՍ;dnkié ã ¸@Ø¸Ģ šqa|j›ĻÃM;pÚi6Ą|„sáÉA„ĶÃ@Âh0C,¤„š@ģR}}¯úaáIÜiĒŌYØj+vEvŠģOLŸ&„0ŒĐ´AĄŠ÷e%ÂNęÄGƒŌŋč4Ķĩ §ai&Föœ4÷ĶÂęY; kB!‚ VN  įA‚)!@‰(¯vœ&ƒAĻ`?śD Ę Ą!Â""8ˆˆ‹†0ąLpwFŠB ĀcT ÚÃhDDDDt„~ ĘAB^%Ė""@\…gcŗāÜ(ˆƒŅ2V…žÃA™Á3P9870d„`$™{% dAŸd*"ĢČG &ˆøĶd˜´ŌCÂLB(*-0žđˆü07ĻC4×'īH6‡ œ{â/Ŋ ›Ģ' ˆũ¸a$Õ+d€•zRˍĩ‰!ÚgĨ}PĶęۋoŠ7Kgf2SŲį˛*^ħÖŧi7ĩKë÷^WX"XgzH2YPæ´ ¯øĩ´•W˙tû‡™0A“,Ø#Ú§áīđÚˇ˙{io­å@RU’ ØDšh†{†Ø[ģáü6ēú_÷ũĖéŋĶOMz%t˜O† øwđČ1ũûí`ÃģÔđ­‘Ķ ƒj{ÄÛKŋ ŨÖĩ}>ÛŠ -ÚZûRƒNŅ*^–“w}~?ƒīÉŧ.ü_ųû†„'Ōģ]vš(3d{SqRŸGFt—ĘØaož?Xxŋũ¯ŧ`ļ´æ’äšFːyAš#†údŠ“Â2qP Â“@Ÿ˜ûĻŨj˙ϧ2qœ" „)Ч] „ Âiہ„˙šÚh~ũŅ …Œ[|‚?%`ŋ­yŸJ §—EㆃD‡ ŖåˆAúą}Åũ!Ķ։Ò{Ļž˙­ ÷•/ŪJ˙ø¸´áU‡Z.Û'tIčģū[ĶÉåÚî‹ę%%3ūžÚA‹ŧoĶ_ĩiϚdo­Sá?¤ô¤ėž?iģˇTßī÷ ũ_˙اu'÷uJž7ÚØAöՓVŋöũ'Ģwŋ Õõõkõõ˙Ėũ§ößKõũ[û§ß ‹{ZWëūë×úW˙î×ũnņ÷{Dkë˙ĢŠrEÂT‚T’TIļĩ˙ũ˙˙Õ}ãW÷UßhŒOĻh˙÷ÕPļƒŊ¯­„‚ Fõ÷ûĶ˙¯öú˙_]?ŊéͧÖu/¯Ēũ§iŅËzũˆ[eôŠ*HĸAĩ¯ŪH˙Áŋßŋ“˙]wĸĮj™ÍíŨU;Ģŗ~SŊ‚Å[KŧĄ+īū’I$’I$’ZļõëŋU˙}öģūt˙_÷…Ōđpoé[œ˙ŋūĩūĄ$’IwjūŋŊÖZå×ī˙ûˇÚߎŋįÉoK~´sđ›d‹Iõ´Ēīõ~ĢÂT…’¤A+OŋúŌtˇIēũÖ×öÂúĒڅk iÄ4*Âļ‘ĮzwÚēm֚V}-˜MįŸKŪÃTŠ×ûWíUԊí&ÖīŽ+m, Ķ<Á ˜Mm‰Pƒ cO)ŠA„aS:"@Ū; Ļ`÷†m(†ŗA$ģŌzp•Ũol+í(6Ši0ƒ îđí4O˜a Bam…ak"ģ BB§Ä=v—Šbã C׆­¤ÃpÛ ÕC ' XwF€D,BÄD„І0š 6JÉhˆ‹R-›Ķ0iĻE}b"!ĸX„É?ŽÂM„˜¤!†B8Pž)† oŗŽÚ a‚q !ņ'b"N„\DžÅåĀ0ŦB [U,t­ĻãdB˜Ã#Š!1qõŠ Ĩš1ÎđĐâ ƒll!+ę<} Â!ČÖ ÍŊĨA8`˜†ŧX!QÆWY‡Ęͧ%9ÉĄT Æy“Üķ eãO c5Vˆ(lĶ!i™CõŽéˆ¤ŌTmĨ$˙zAÚN—í˜Ú; ĢŠhGŌuhInvHƒNîv= ]R„‘h°s Ž$)ƒ#Ŋz~`Š:3ƒ'00ˆ8ŨÍGŗ38ŗZ43f|;’ƒ)ːÁ=J5WrĘh  b/ŽF !˛čéBÂfà  }ĻnC‚"Î\C$ÍÅ †Ė`ĄefeČųQđ‡„9("EpDvƒõĒl›âGÍmļÄđŅ8aŲ!ŪŠļ¸ƒmÛDáatĐi°aBÂ#70D/ļō┋¨r  ĩũˆqģFŧŸéÃ/tģ@ņÉädī'œ2íSq`íMŲš4‰ŧ:$øNŅ'a–, ôa™` l\%WWĻ]ÃMUu{ũø}*č=ŋ<ž‡a+v Ę AļNÚl; Ã JčģxACeoĸšWú´đīcŽū˙ü¸ī×ŪūģõŦļÕ4=´Â}‚„á&ôƒhw☠Ē˙V°ũãũŪŽūŋÛK[¸Ļ 7ü.÷uŌé0ûUN‚Qî˙˙˙ũ˙üU[iIšAž?ĖÃˇ‘ą5|9pšßÕ÷āßĶĻ–LWéšģ˙˙ÚŊŽ„—_´N͍%_u1xIŋúäŋ´ßũß üwūī×EëĒÃ}oĨąAŋޘër1˙üũŋoÕ˙_ŋë˙…OšÕ?}ôú ķkēõēy}5 ĸOūÁ˙¯īú_û˙Ķ÷ŗúŽēm?ūßĨqō‡ũ=ų´Ģ‡˙ß˙˙˙K^CĪՄĶ[/°Î;ŊĩūÖĖ+Vį–úXûâ/MĶ×§ųÉ×ũvĪ4Öí[M5[[UģŨŠcŽTVœzĒpaLYn3BåŋäcÜ4WĀĪK˙ûö×͆ŠĻĄ4ĶN8¸;ĶIĒØ¤Ûö-ãm6*ņV!¯KÖÖ˙í6!&šlUđÕūé‘}„ī VÂvFöJį#ŽĶA„UuŊx˛Č[N;ĩ†Oi;Úe§¤ÉZgCį„ÂaHŋļĨEˆ´B""šAĄ Ą8ˆ2‹ÕgxŽ!ÂUAą[ ޘA„$&ː!„XB#OM.ņ;ŽĢ˛ éûWĘ\Ęâ(PÅW#ũ h0†ƒ“ĄŌkäī"ž<‰Ų{Ęã„2J(ˆˆŒ{ AĢŖĐDh0@ÁČ/āˆ1"L0A ÁqqDÄá 2™„!á 0AÆFPaūD@ôDY°DL "’„ÂøD%ÁHę?ž á H&@ƒaH Q°AĸCđ6‚l"Ąá9d,Gb™T39ųũ;4•¤ÚM˛ĮĄa9ązMĐl f Ųųɰ“;+ā€ƒ2XDn[¸‚WIBX‡Đ@ū‚aލ“jMÖwŠŽ|ī„v[ņÛ<`ŸĨĩMXz44˜Ŧ$úĶtļĻBKīiĶi„_ÅéŽĒĸožĩKi(zMëjv¤d$u iŨÚk×u䜑ČP=ūˇúÚĄĢtˇ¨&ģRĮ‡iß˙#ulP0×Ö>ŠGMßA~Ēž4?´īīāčV­Ķk¯\z­õ šf:ĒrĮ˙ßîtĘļ{D"X×û‘h„D›× ÖŌg Đ?ŋŪīãc_ßõ„GXč}}§^Ķ3Ķ4aé§i§zÛģÜ_ŋÔ{jęԈûŠi~â˙íUEtœėėĨ#ÉĄ4ĐvˆAåÃíŒģ÷ĸōũKģ%m“ãūíz“{_­ŋūA‘Ņ›{ô$ 3†x‚!K“HÂ#9暠Ķ_õÛ6ęöö>÷Ōm§ĸų'×đˍvŋqūMųąNˆ„PƒvĒĢÁ3æReęō(IÚ!rhXAĶúĸwaw˙Ŋ=ģ˙˙˛ ūžg÷xi_D3š8x'cęÜ(DnĐ@‚ n‘ bô‰—tIÁčöŸtN+a~ôí_÷˙ßģŋÄz˙é&?Ãũwp‰s$RĻ ęĖÃú‰ØIĸpŲ0‚ĄģM ›hiļO('kiĒmvē˙Ũ[WäāŅûū˙ø“tÜ&9ȃ"ãũ’v 9¨aąr¤„…"8a;A´ON×' úpđÚzmÃûÂIÕŋõßŋū‡÷˙ûÛūųw?öņ´Ōģ!bCŖ5RcŊ[žž}Đwĩ‘Fũ ūē×ūã˙˙úę–`_ŪEPUöhŊ^üÃũwĨ´œAÅZ3Ÿ*Ã]ŧj › |/ļš˙¨NŸ˙­īĩ˙¯ũ~I×û˙WÕ×аīȀņQ§éožŅ PŲKŠ EúdvŊÍũüæ'Ꙝ/íīˆîŊx˙ŨWv´ƒūŧüAá-oVõMMyÃ3úâ„}„Âg\äfXXĐiĄe‚ XhZI0ƒböJŊ°AąAƒ8# IĐ[mMĨė{I7õŨsÜÃėÎMSD 0Âa5D$ÚhgÄ[M\'ĻÉ “ļ‰ŋIwa“Ž aCD3Š•Q1Č ` B Aƒ068!”ĒûˇûõŋîܨéÕ;í; ­:$;ŋU“ē.áˇ'”4NíU:MŲqh<ģžėQ APÚ 0ƒŦR÷^Š‘îqԇč+JFî¤ââf(Mn.¯ŊŅ8Û ļīPÛTŪ[Ģi֛zúxĒt›ÃYe4˙E8!D B(+AĒŨ{I °—†MúMĶŊ§íZģNīO'pÕnūīRķ.!×§ßäî—éuÃ[Ž…KEˆmH.ä ˛@“](í¤í…[IĻéÛV)…ĶDŨļ‹~íKĘîûũzžõŪŌŊž¯Zû§˙˙—7˙â"""=ûa$H|uĄ°Ōh{ ä"m§­ûöŋwj­÷ x׎˙¯éū 6¯ *ôélS´īšāŌļßģŋ˙Š­Ÿé¨ŋ÷ũ‘ĆG˙˙ĢKzT?Û>+°š3úŖÚkŋ† 'ūŸ˙Į˙ęŋa¯ÅEĢß ÷ä?lVЍ;,pL¨(sEÆŠŦīûĐŋv—ûō}?āßäķ'¯ß˙č~öūČÃMˆˆ˛C‚ZÕ3I%OŽūķ¨_wđ‡ũ˙C[û˙˙˙ų]΄NˆGúˇü$’IÄŠ$Kûn—Ũŋ˙˙×öũũ|Dģí˙č ûÕĸĮ*?áÆ^}CūŋĶ˙˙˙^ß)ë˙ū¯_ÅŌŌ´T’I‚I.ßūŋūˇÛ~ŋíßūúūīũw÷öūŗöf—ûîË˙Ÿx^›=/ĨĶ÷ëO6ļÖßÛ7~cūĩī=žšpÂØ*„Ō PAŌTM†Œ Žļ ~ŋ~ŋkϛޛ§jé?v›a4é´ąÆžß (AÄ%J! &+đ—0´­nĩ4ė aA„ę6*+mÕÅÚȝØAĢá„oí0LB„‹PŽą°Á)6Ŧ_i„M4Đoié‹M‘GĮ´!Ϛ,4uÃB!„-0‡Á…ØĻ)ŠēÚ\2ƒB Ím Ö Íh;4Õˆ˛+ÄZ†ĐaOkdąˆeėiˆˆˆ“Á aũ„"O†DDDG¸ˆõũōČ[?\ˇ["°ÜŠûÉnwū›JĢ5„.!p]_žģĻÚũvƒMUL÷ĖYÂ5īÃM0ƒOŽėŦgÚ pČâš2&Gáú˛Lã8YYŲCĘxķ.<2YDq„â8´BPÖKšÚ_Ŗ$æjg afDc:Ŧ5"Ã"C6@ƒĪM ‘= Î ļNČīh˜í4ũį}į@ÎMAŸ ƒ P4Âk„õö“N9!Ú/vK;ÆkũŠ@ĖĖä „Äl•’ŧœÅĄËŌ&íųvũŲ>pH´_Y' ›Û~Únƒl•ļšzļ¸Aá>-4vJÉ[ĒnļJčœR<äi„“xw}áu´××īí;NÚíëՍŲŅ'íĩOM{nŸŋŨ÷Ũ÷uoOĨëZĮŪ˙Ū¨ž]á…Ĩīū˙i?á­×ũ{]Sũ÷˙ŋŪŋŖëš8îëũWøŊ~¯ûũÅGãßûžuŋ[m;´î×õ˙īûû×î—˙ü„HŽŸ˙~ëŠ_ސô='Ō˙¯F†ŋ˙‘Pˇ˙˙ËĐē˙_یũŨũ—W…ũŦ_ũũ¯ž×˙ŋũ×~˙U=^רØČa>˙ŋūÂ'˙ôNī_ëū¯ë˙˙˙đŋ˙_˙NŋŋITWŨî¯}iémoj‘;˙˙Ūž“ūŊu×˙īv~ėúŌ´Ķĩ˙˙ŌOôģúöšęûí­öî’vǚ—ØfÂí„Ø55⥎ŋ÷a}÷v’ú­ˇ¯kiė0N!Ļ›()Šö [Ļ-4˙ø¯ū{ĩĩNĶíUĈ†ģ +ŋiú ! ÂdpĶëīĒĒh7 ąIßLÃØ+´xi6GhC#p™Â Á,„Cbu\˜—ūH ÂiŦS š„""áŪ™;A„umš`„DDG?Õ,­8hDD4"""""+_Ũ‘Ú41 !ž" ˆĢ_ĘŲ?īɰĖ밌ˆĘŠüŽ2$‘-gÅ •lÖV Ļ; ū%,) ĶLÕNīŧ´Éģ’ļJĸ–F÷×Ŋ<Ãû|ŗxÉfHÎÄp˜иP˜C˜wģ „ß *O–aflĖLŪv`Ė`9fU†G0īUzpĶBīž?å˜Čãũ/KĶįŊ˛VÕ‹L8mÃÉ;—nÚmĢ˙˙ëīÎoke¸öBč"'„ų‚ °ƒŽm“ˆaEû˰¤cî™+hžQxÃ&û‰ŋy8íģĶtÔIŊ§Ûö˙K˙é?č Đ<Ģi͏všĶDŨ†Ĩãwi; õPOTĶ×[Mc†Úá?÷î=?ûˇ{Ė?í˙úīņnŗŗĮhęŪ ‰Å“¸aÆpŅ;i6õxōy÷ŪÚúÖņëõzu×_ë˙|÷Åü>¯ũīŋK*QŌŧíæT,$O2ō 4ûëũ<˜˙ēŧ}_øaßû#‰˙ßõn­'ō¯˙õßhZÉ@iĩŽî¯Öé;p×īßŅE˙˙÷ėõ˙ņOũ‘Âz¯ØßŨé].ĩŨŖ3ũ¯ĢęžÁŊ1í/˙öëč†uüxa¯ŽD…ŪN¯ß_˙Sø=}Ûkwĩ´´E”}ßČÚ÷^ūķƒq¯˙ũņ_™…ˇų< ˛*‹‰õ‚û]ũŅžh^ĢAŊ[ūqĐãßPNûŋšĻŸ’hėŽî˙ã"įGÂ×ŊUë˙ĸo×čpt?Ũ}ô"ßÚöÖÛsŋÛäq¤é§~ČĒī š2ã˛ãĖÄ lŽčf†]ü˜æ9umūīëEÚV­ ßëŠ<’ē¤˙÷Ú]wÚģ}7ZņĶM~ų/ôPf†>/ú^Ø û'%˙wĄMōĄ÷­_ŋBéõîßöč/ī˙0­kū6šų~Įˇ¯_ŋÖ˙›hJĄ0„ũ^MÂųvÛ´L{gũ{mî˙öŋŨ§˙ũ§G*îũ/ÕÎ?]ŗ5Û×Â}đÜqõēį˙á;Ŋõ.“ËĪöq¤v×˙˙×m$ãũBlЇjÚi ØÛ8Ķõõ ĻLJËúÃųwũĶđí?ín›ū1w›/-5‡÷§§÷iĖí÷——¯ÖĪö­žfė"ßÃÁ4ä?0œ8Âa64ÛĶV-Œ'°“;bēo˙÷Ī`ũØĒJüÍN!%o×ÉĶ˙í}Ģ_¤öŗ m† ÃJ4Պv•ƒNĄŪÛ#A–öļqĶÄ4öØm4LÃøj×ļé?æ÷};ū÷˙›=ūī_Tû˙ųøø ē ÂąQ´Ãŧ0„[]žĐŖsÂÁ´á’xg†NdŽ!Ąj„2Ä{û­īü˙oīëۗÚģ˙õ˙úúéà ‡{TÂh4!‚D^„DDZ„wvõņ]ũŨ˙˙ũ¯Û÷ī÷¯ŗ0žŋū)÷ á 6"#ô":īT¯íÛŊWīŽ˙Čã_ŲÕ¯ũ…î‘qI¯!AQ„Dn—2?}­÷˙{Ŋ˙ũ û÷ ×ņ ôĩôI˙ãŌolW^¯Ã˙Ķ{ ūšC˙h'˙G¯éč˙ƒlRĒ×]ûúŊ70Sé3 uåŦ˙nģũk˙Ū˙ī&ÂËÕúŌ†á;J°MNCB!ę֗õĨúk§WëũåuŒņ‰"2&ŠË+ŲMßá$„pĻpMä4:÷ęī˙ôÁ4Ų =ú÷oöžĻJyXAS>Č8&a2Y„Ķ„„jõ0âžöš  5¯šŸŪ¯­ 4áÃPAŨ­Ũ&šiˇäM&šzdč*¨uBœ Ŋ؃A„ÖUŠDD‚¯NÜ&nÚMZ ?Ģ]X7°›˜Åˆiō(ķąÅ ęĶëm8}ūAKōÃ1dĖ„4"#’AUc ÊJ šÃŒ<; œr¨œ˜ŲÚĢ͇ ] ÖZ+ ˛öē ūmS´­4š¤""""4Đ`ûãŽõrˇŽ.hb?Û2ĩAŖōˆ°—hDo3õŌėŒĄéį3Ą‚e ^ûh0š !ēņø´EŲ}|•,ō:™)53Ŗ8DŒ’3ņŧ§Ž<4 ü`ÂdĨžf “I…ˆˆęČŖ¯YHZ!,—Ī´Éq!ĨÆ ĄiœL!  Ņ„6Zi§.T/‡b´KI;.0MuÂal“âĐa´MÜ\˜îذƒ T]ėŽI>ßĩ ÆgœÎƒP˜D(¸´Ņw`Ÿ{åģF‹râÉģAŲ+%tƒ´ÉÃD‡ÉŨäō“m:Mģ'žļ†a40hē nÁ:=Dōnƒ^ĶO[ģÁéöŸÜ0Ŋéö্ž0Ë+'š~ũÃNˇ=o˙ũŊ:éŋāÂčŧR8rķOĶ÷˙÷‡_xéũ‹Ūßü?˛â˙ĻÚh Š%J´ƒ˙ü,?A‘ÄĐĒõÖŋ˙Šųc…˙ׯ×ô’JŌI%øĻâš' ŦœMî+äDhE^ģû˙øoøI$‰×ų5-xZų˙ښŋūøũ^ŋü7˙ôI$JH%DßüŊ?˙ŋūŋ×˙Ã˙ká×ûúÜ­5¯§{kßåëßŋ˙1ž7}ˇûué$•$’1„’I%8ųneq?_Ģ˙Ŋ[Ų~¯ūß\ũmœŊ~˙ĩVÎ4ØĢ˙+3xM;]˙˙i&ąßûg 5´á¨'š~šũž›NiąĻĐ$K+Ģ%Ģ+v'’N÷˙ĨĒnąč0…lŋqV<1ĻŌjœXMƒŽ!ĩ¤Ōl$ĶOȁ—‰S;,Õ0u*]ī†fĩuoĶ¸ĻŠti´ÆžÖ]ˇMSi‘‹A”(A”ZĒ„.ĘM9}ÚũlŪqH„jė&…ĻéCLĄÂ…„""i˛V™ÄZ !ôN> Ķø[Å&ˆm. !'Ú|~ÚOÃíę’ŧ4šxhéS@ˇ ãS:V×*ÂČØ‰Úx(kl2Ų€÷ęS˛)$;šD1 ÔĐMŒĻƒ4ˆlÛT¨‹CûDųŗä˜OaŠ"û‡ĸĮlY9ķ^Â"M§”E÷mGjÄ"(eų)ƒA§„ËđĶN PØeÅ \0‘1ÍÂYāÜ´"Ģ’wÚ =:pķ[BŲ‚áËÆĶĶāÚîÖ\_k“qxŒA0šd•ë3ĩj]°Đj•äŨA¤ôīģī/-ŽĐw}ˇÂ„k„ũ´@Ú'wA7OTۈoÖüI¸=¯ßįgÎÖGvõwßÃŊŪĢnJDǧ˙ëaãcķŠ&vVĶLĨÄĒúiĻŧ7ēW¯ŨoGĩū ūß^ßÖīũÃíRqÜūģŨ ¨¯ækđŪQĩn’æĄ…î>ęYĨn(D­™ Ų?ÚâqÖï_˙ž}r/aØ?†„4T•khí[ēŗąJķ"ęÎÉŗ˛ŖJ’I!TJŦ‘š÷_K÷ČüąĘ†õŋ¤×6fŒ”ëeĖՐdh!âD21—,åēy’‰Čié‘cAæŠ˙¨IBĒí^üÚëūŽķi!5?įiW’4ĖŲã8ˆųÄ@ŖŖ:aBe8†3"- Lŋ'dÜ´MQøŲĄ iĸĮ{ ĖÃå”ĪOđûéŠIī˙˙øI$’TĢ[Õ>ûõõˇ˛ęųŠ‘¸…x'‚ĒÄ0ƒ( ™Ã0Baúa0AύA fĖ&NHv`éÃL˜įĸC×, Č͓ žv-ę—ÖŌ0õp{ŋũŋˇv×>Ŧ$ŠŌ¨T•BÚũįū.ųq„Ī4ĪŖ†Hké† Ũ‹0h>-(H6ŧaĨ“w&íŨ‘ģa!¤đŅpäßB„TɰĻvĨ*§’ĸĶĨ˙QVˇuŊöī3ö­{[ ļą§ 4ÛâaA}^-ķÁ,a0š&=}$\7h;&;ä¯.Đ4‰Ã nķåč îí8aMîÂôƒûū“ĸ}Đ`›ū¯åGâŒÛ Œž5 „Ũs°Ė͑1V‡˙XigžÂŲu˛(ëˆLlSÂbwt˛(āéØž“ BK#vūņh›‡ĄŠH6Ķ{AĻJîá÷zvˇĩû÷ ģ†ŸĢÛë˙Nŧ­ŗą&VtVßŋīŌđ@Í2[˜Ņ 0iĻDLa|.tΞr*ą|'dq„ōŖ'g"-რC]0ƒcb5iĒ M‘ÆFæ›ĒŠ !ÂmųîĶ%˜AņnŊ6ŋĻ˙KŌ{¯nŠ[˙Üz˙U˙ˉôАJ,'ģĩA ų+d „ ün3BéģÂ"zw“Š Ēv ” !h8†x"% 6azƒeõÍĸ>H"6öĸ˜Ļ)6‡ ŗØ&ƒ0B" ­ÁV„qĶÛVîŧÕũâÖū÷îŋÃůëU˙˛8ûÔUožÚ´î*>K™ŖLøĶõÕ0MX#LŨQ8ē/'vhmE ô\Y1ë_a6Âa4-šqĄˇ‰ü0˜B"˙áéqÃa÷ <ŋ÷Ũ°ŋ~û˙ô÷­åúõąÚ›kßtšUŠ6YqĻ÷õÖëHē Ŋ=ĩLģrņ:žhŧîŽíîũ:O/˛úЇŗļ‰FūÄG^ôŦôaģŅ:Š­éÅ>ŋāßī˙LzÖ߯Wz1œ#˜Fm_$ČÃ$#6QŸf&KYÕ)Q‘Sꁊá4›'^=ū›ŌéÕúņ˙ü}'IũéŧwũĮozŊ­éĐO/iĨŠôŪuōÄAŋk_ũ~`?úāũ˙ũ×ß˙‡ūg’L.…‘™O§Š>GvĻØDp &šd€ä™š y2ãAžÂåÜ'­ķsĒŽĮ×˙ėjîŦkõ˙˙ׇũc§ũ~ũ{uûí5õ ûøp˙zÚ˙~—u›Wíß^ģŋŋˇ]Ô35ũZM<'@Ī0 vap˜LŽA‹BÖŪÂ@ƒ‹lCOl0ƒ¤œģčŲdŗ']Å.Įî–ß—ƒV†ŋ××đī^ č/×ûi˙ūī}°ēø7k옚üĪë_v—ÔÂ}0ǚfæ›9:ë~­&ŗũØI4ĶA„ÛOVØM4Á2wm4á! =]–öEvyģžh$Ų(áŅyÚŨ/z¸_÷ÃōBú.,‹L|ˇ^)‹ļ•=¸:M=σ&D&ĒĢm4Ј´Â 2}Â=}¸5´ĶĐa`ĘÔ ÁB"8†I^ Â:ĄƒA„q†"+wÃ#Ūöî­ã~˙ߏ˙ĩ˙ų¨&ÃũeÕΓúũ¸~÷moUß˙ß˙ĨõūŋBhÁՕ ‘ž(ŌTB8ˆˆĶˆˆˆ‰öŊiũĄũ}Öā—˙íÕ˙^Ž˙÷šˇęŲīĪöCŸ0ŦãR‰ķ× Ũv’û‘YīÍĪiũ˙˙}üŋa C ô0Ķ/`™§ô[ˇŌ[ō€ŋöĨ ˙ôũûė"ķ‡˙3Vžƒ‹VĶläĩ­CT Ž!ųûķ >Ī÷m›i§öžaz˙˙Ųũũ|˛,qjքV›÷ Ë.›WÅX_ĢũŠ*×ß˙ôįÕ:‡ēŪéė'¸C ÜT[ w@íXĨiėžÃ ÃiØNLRiŪÅę¯ZmÕæØ[ũōēš%RaEŠkVķ×MЛ_¯Ëĸû˙ų#Eæ˙ŋ­ķ °Ēš>ŠĢaQcĻú`ˆęÚj6˜ ĶBeÔ8Ļ/´Ø¨ÚuŠdĄFƒŠM; ítØâī­0žŦ˜ā…Ö˙ļõūũĨû_üR˙ßuڎØŋÕmucŪaĶ䈈a0šh0BÂE Â‘Žši„ !0Bę°ŦPXí7ožÎËæZ$ɍōtâ%šŅÜȕZ˙­÷ī˜_ŋ¯uŪūíV›JÁzƒ{AņÅZmSGQejˆˆ0„DD!%‹ ˜4HÚ Ķ ’ŒŠ;ōPĶOWōČ0ÎĀ…AĻEDÂh5TÕMVÖ/īÕ;U ĻD9}ØM†v0A… ›ƁĩE°B>""""",!ĖZpūšįc~äÜаäĸ%!žĶDRĻNÂa4é;ŗĖ lŒvA…˙aÅ Ķbâ˜]-Y+I†ĻƒÔ„RÄF˜G´´Črdļ—OÎʑ•&ĩ¯-čÙöĶ9ōSCļ¨7OcO„,ļÔ´ƒ¨A„"""HĮŦEj§zēxúŽFØ&NØI˛íSØw Ąá‚eŽ ŨĄˆˆF’Ā„DfĻ´;ÃŨ*ÖmB'G ?šãČŠgŖÆm…ÂwčąáŦ2éP|DDDD0‡qvĢ%fvft¸ĨŅ%Î5*đˆ ‘Q ĶM0§Úa3ŲöMS‡sĩĩM5ģ÷Mã´]NĘ˜ IånėęA”bKĩO9ŸdĶAĻxÁOL&œ[%6ޘA§îīáĢą´ûēō‹b“Ü?K„Ô¤gb"ŒŽgt… @Á†6`ƒN‚6AM’¤QpæĮ'×ģ­S× ÷RĘEũšŒŅÂ"'­ĪŠ´v.ĮÁ‚ai`á2f0˜BÍ3Ątõ‡é Đué˛y 'Dᆴ´ļŨíÃģí;ZT‚+9S‚‚" ˛e…—9Eɓ%GôsÎG á…4ÉÃÅ/ š7ĸ [Tđ͍A…°ˆžĐ`ϤH-ŒpšÎģl'zDíģ°Ûéj˙ĶíU~īĨå*h\•’˛|D °™ņrrōAúĶ“Ĩo˙W˙{_ƒöõˉ×ëßk˙ēmöŸ`¤ō;sfO/M´ÛīŋÖôáÛŨĢūŸ˙õŅĄ˙ôĶH$N!Xŧ=ŦÃ ¤ƒlŧaĐi„ؐãģģMíôđ†4 á„č‰ëJ÷zŌn˙ŋŠūļŊyu˙÷mnę×zz|kz~˙ĨĒī~­iŋuí9pŸ_VęûöēĻæėž$Š °Š’T(R.ōx ÃÕ"pč=‚/đˆøEÛCĮŋûŋ˙i.YNÛņūëū˙õŠaļ?ĩ˙îŋ÷ũcŋū;ß_z7i×îĢ{ë÷ôûĶ×ŋ˙ŧœWi§AU šJˆAiOB ™'I‚&×ŋ‘_ēxoũ°–ČĖ=ōŅ–Ũ˙¯ô:˙Ōâ?÷Đėũm0‰pËäĀcú˙Žũ.đ’T–zÂIPą Ab’ ~‚ÕŠa×˙ÕõW˙ø]Øßʃtj;m´ŋŠ˙ŽũWãōLO4 ˙ū˙Á°öõúņƒũûäG˙ûi_Ûgš×g+NČ˙Œ(XŪĶØ´ $’ ‚˙'á6ë¯˙Đ˙ßčŧOūÕëkņ÷ŗ]ˇRAū÷_O…õūĢ΂Ļ‘@†ūŋWČÛ˙"P˙û $;´âœĮģM8Đ6*Š Ķ šaH¯gí4^¯Đ‡ŋ˙ũw×īĢÕ§Jë¯Øm}ļbĘ+ÍĩÎĘ7ōpQú'Dī˙žûŧ(8o˙Ũw˙˙Ŋ84oĶM0O†B,! b"Ķ˙‡UŨoëÜúūž–“û×]ŊU=Üm­¤ŸDDOs%—šâúJī…{ũô‹Īíƒčŧ†Ãŋo˙žf˙}˙ëhé6ĶA‚Ąp ˆˆŠB“đũéŌĨß!U†m-{]~´Ŋ#FļyØKi;NBĢ!Ū5cw°¤‚3 fyŨŸ™ ŒĐĶī÷úë_ß˙˙ļ),öäd˙˙˙ß˙ë߈´"-‰^%Ū­˙zÚŽœ6;^×^ĶMí ˆBãM0ša đš|†‘Å *… áåpŗ|Ę2rAĄö˙˙öaf;_ēÛëˇũ.õŋ&”/Ļū‰ ˙˙Šé§gĸ!ū‚Q ĐiÛQIĒqP×]k Žj˜A„TƒX„A¯Ņ1ŨIģwAžv\‰ Â C$ī~üÍßúvˇ]ęˇûß}í˙ģÖ×ĨÖķn'žūųÚlvЧąRŨ&ē† ;j˜eĖXI0Нj™PF]Ä0„WAšƒ ģōą›gŸ˜2x—‚í†˙´ģa5ģĩMģŽ6TĶû[ˇ­?ĩ´ļĶ[ø5ˇú™ĮÚūZŨ¨¤Ú öœ2Žƒ3N Ę ŒĐAĄ<ąi–ĄŠ8Öõų\Õ#:%šh0žUėC œa_EŪžšßNã´‚9vô¤ÕoM5ûícŊ ;°ŠÍŌŋ[Ú^´ąâa4CqÄE&ÄqAЈĶÖęŨ]9ŽÁQŽ(a´IŒ;‹Ė›3įöš'mĒIŊņũĶjÕÃŪáéĻŊ`ī[ŪqTÅØ´B`¤0õb›X§´g„BãÛøaˆÚŊq˙æĖ˜#5˛`Ba„E˜8˛L¨Ba<áĸã'ÛEçvŊ÷ëaØa5DŒ0…„"#m‡Úa{ƒ´ËŠ’†Ŧ$ėZÚbŸŠ mŦWštšEŋÉŸ/p™˜Dķh3í7a3f–í“xNҟ.Ûĩpô÷vŠŋnĢqhDEĒ Đˆ†Q€“tÛ šwpxĻēąƒiR˙×CMņh˜ôkq¤úÉģPŪčģ '‡IŋäîÉÆlm~Ž×ũŽĸ""""""Đ4! Áa„"ĶôÚ´#˙%NÕÂÖä­ģĩÂ[M$놷÷ĻÜU˙üvÖˊgkˆˆĐ´Ââ"#ũOšá>ûÉßđîôîŌVū=†Ŧkß߯ˇüŠ ø‚ū".MÍTޞŒ4õũŋŨŽÆƒk÷Xû^>“ŧ?ũ¯˙Ū0ŦUBwŊ9•HĄÆX&eQ{i‹˙‡x~×íjë¯ūßū¯ävžĢ-Î,F÷Ōú+‚%&Â26îvj2¤apiÕ§íũõģ#ˆ ŠzēŨYOūŋũF˙ô(ž÷û™Q‚fSÎËÅzüŽĸ#…ú¯ƒ%ˇßÅęÃô)ãōŦ&ąGå˙m}{ų…?ūĶgũSÎÍ4ôÂ`›™Jƒ[îô0šjXëÃ3˙ŧūG7ōôL§^éUūđm˙õõ¯ŗ­ũ§ÃAöįc7\ė‚Î˙ŗ\ũīâĐũ \K>.âį.žĐÃũb?/-ú_ø¯ũ{×OObĸīWļ÷W;¤ŨžãÚûˌ™8†fOõîĒ‘(ƒw˙ĨĮĶ˙”‰õO˙}~Ī]„W^ũ;‡}īzņŋ”ˇ“EE …Ŗėã38Lé¨ŲžE:(™™""qjJ ¸ë3k̝Âsũˇ˙­WëMî¯ĄúŨ™é­ĢjąíJĐõŽ.î­>?ėŪNy)#†yĘ3‘ 8 ĪtGЁ„Ķ4Á>!øúA„G@i„ĶTE‚œŲ”ûŊ9ڌãķFAQķ5eh,—ËŖHÜu<ƒŗ†Ą\Ņß„ &jœD։Úփ†G›ĶOĸíî4i6ÛÍa5in–õMu†Ī.îø`č;^Պū( ln‘ģiÁ„$Į*3ėՔōy‚4Ņiá4Ž3^h3æs*2F|ĖÅÍÆ‘ŗ4NwqĢʖøôsL É´ĪæiÉÃ(M8! 0†iĢá=’ž!ËTNm;Tø† ]¸Ų<#†‰Û“Ë´¤žŧlUŲ}ĶԊc†­ŦT0ŦpÁ4Ö ļ˜ŲÃV)bšaL:ØB-l'%5Aƒ'ûLō#’ ‹4 Đ~š}„ĐiÉA: ¨\ аˆ§##yļhh‹@ĖŲļ|ō&4Ėf\˛HËĨA“æháŗC=] D/´Â 9c¸*iuÉ~ôü Û'”O4Û'vŨ¯ÚIŨØO^īM0ģk¨i?đLm4Øļĸš R &īL&šq%DN!“ĘMm ƒŊÉÃ÷Ōwn'§ü^̞ãOī[˙âļÁŋø°˜U°ƒš: 5āÂ!`ˆč ÄDCBĩÅĸpÛöŧíÆÕž{˛PÛt^6šŅ8ī6+0N;ÂéĸošŨļ˛âÅįO y˜J4Đvƒ šqkôōcëh:' ¤ôŪ¤õĸxÚ¨IU ‚T’_ūûûépūé¯qŪõēŒĖ]†/OˆˆŒŨ6Ä0B"Fõ­’˛W Ûē'l5ŋÉķkŌļƒģ¤īAá6ío‡z mCŧģh&Ō ļŌ$ôlģîÖŠŲWÎpČá ›Ž|Ë˲XȑւúŊéŌ˙{žô÷í_íū’˙˙ŋxV^?¯Ũ?@¸m=qŌ…´ĶĨī_];ū˙ˇ×ÚZ_ãOM+Ķĸ1ûI=~ī>ôŨ­ØdqĻ8hģmAåå†!økmÚw˙īwõėm}ûë×˙ũ$‚I$’T•BA#@í˙ë¯ß|ŊIƃ‚ūģA¯ÜRo\zú˙č{˙ûžņõ¸ ø×ë⓭ūūáŖÔ_Mí^Ũ;MXÖîÛŋOõƒõõ`Ŧ8ūŊßßŲKü‘o˙˙ƒŌNI%üø_ną¤îA…ßčG˙u˙ĩ˙ã¯Ė ékü:ø˙ũW_˙ŋOXdážjûēOOC{˙ú˙ãū1ÁÂũ[÷Ké˙{˙ûˇĸy ˙I$Dá$“lŽoōx:'}iĄŊí?ĖÂōė¨_ĮˇėņĮ^™qT˙ũēŋč?˙ŋß˙˙÷˙ų7:”áŊ˙ū™iĶīZ˙ũë  ˙_é~’I ’I$Ģüjŋøö°^ŋÄWäĮ ūŋŋú__×˙×û÷Ė$˙î×`ūëīũŦ ЃpŋønĩęÆũ}žŊ¸Ĩģ}ūūŋv›ÖíB $’ž÷Ö¤Ęŋ'~˙˙Ą´ģ_ ˙-Í2~ˇëßú˙˙~"Ģū=ŋ˙ßüsßûƒŅ<Žũ°˙ú˙ŪÚ˙Z§öŋõ¯ömÃM8ûôŋūëž˙û˙×ׇ˙ĻXw_~ŋ´ŋ˙—˙'|7úyW‡˙ūĪ_įMõŋ{õīĶCŋŨīm8i[ÖļŊéĶLqa4ĩM=?˙˙˙ŗ5˙ũw_ë×ũ˙ūŊ˙Ô!Á˙}7÷û=jūŨ™öôĩŊ}m4Ü&š ŌŊ°›i{OÕS vš 7č2xĄqÂģN˙ÕŊüÆē¯æÕĢa=.ĖĶ[úfį˙ūī˙[ūÚõ˙˙˙$'˙¯UĩÕ=îû9A­ûM=†›´˜MƒŗŒ&šėjƒŠ5öFö&ÅIĮÕa‚´Ÿ,Áy¯ž“ŗ?]tęĮzm„ßé˙ÖØmŋ[g­/ú_ú˙__MÕ{Zí?L'§Ēa6ՎÂâĐ`›ũ7đÆÂ„EJM6E€šĶi Áá¨b0™!z“ #´#§Ļšn[›&5 CJØé;X`Ĩ Aį+8ūėãĩoÛWJūĢĒū˙û[UõĶXh4BC†ÚkÔwĢvļˆ†„DC Ú !Ą`ކ")öĄ„9h;'jšáŠAąŌũĻh6œ ØØãŠMŽÔ ØØâv†WīĩõĖ˙ģVĪ˙}á&Â}ąm2‘I‹iϚ¨dųh[+""")¤¸åQ“rš5)[]3ēĨŅA”\ŪzhDfĩ°Ŋ…#tÔî¨;LAĻĶMĮa?¤˙öÂϚĄVä-í:ĸĖв7B0ƒ)ᆎˆ†â"#NMŠ'ĐI*ĘDDDTDEžh0„aa0›v˜A…A“„MØAՄĶŋØá§tƁÔ"}*ŠĄB"ĐhDFá¯24Iĸ#KĘßųąDDFY;BtB"""˙éÚiÛ Žx Hb#‹DFÂŽ Á>ÕõŊÁj؈‰•FäągpƒwvB"!‚ ØÉē¨ÄH:ŗŋōS†/M{úŠļžƒŋ +čDVW)ŧ“DË"Ȓ†pDG5 Â\ėž.¯øAØA§iEb"7Y.a0ƒ “ īPC˛đCũ1–]_ÎÆ<Û\ę‰Ü8´^sĩŒíešâ|Rŗ›?AČžkdÎ*aĖõ‡ĒA’É“;>Ú%múZúš¸‚į™;\&PFhē>ᚃDvęJ;x&˜&˜C+YėŲ…­ā˜M0ļ‰t?ĢAĩDâg+h îåēIÚS¤SĮŽf¨ĐSBĸĶBÕß õz“Ũģ"$Ћŗ!ŒčĘŲ5}=îīNHÛI¯LŒ„–3fH˜FŌOLV3ė&Ļbŗ¤¨„ágŒ&vÚRq˜pß]úķ˛ŊŊÃZēįbڅžīËî“øiWđúŨ7œÉķåXE¸jJx†™ĸ#°BĖÅß0E™´á—Õ˜ Á Ņ1ņĸcˇtNÂÜ2Ā‹ĮĩüŠ=,:ĶŊ‡’‚pŸŨŌģ´Žĩø×­:_O‚ ÔæD70ZAĶ#ä!„N!LzuÚaÂj›ĸīŧŅOeŅo;MSúˇļøw¯âžßđĶģ ›īpÕ]ƟōyČ-ĢäÁ¯Jk 4Ũ^/x3 qzN…û/:%' ã'ŪNÚ i&Ų8ēM"pÕ÷eŨ&ūžŊ˙­ëųaŌøŋģëoßö—pAäB:0›˜2tU„üđ§4)Ÿ0˜A§xÉ=Ãļšwî ´—ún›Q—‹—ΛiĒŌßv‡ą čžūã÷ūũŋ÷WëŠŅæßõîF5_˙Œ:jg͐M=4D¯é'÷‡h6 á}ŨŠ'ŸéŪĩëē}Ü_¯˙ēēõ´˙˙˙ūŗŦn4#R:ĮŖr”ĘˆNvyléūųƒLŌ6kŠĘ<"ŒŲŅ6Œ¯×Ę gŲ‚õMøMb- O]Qnۘ{#š'vŋŊ÷̧}[˙°E=­‡]câôéĮÛ~ŋ˙ûĨ¯õûūžfb[ ?™˜L'HąÜ^>&m‚ _ôĐi Č˜¨…yƒA„ÍƏ' AĻž™\qÉqæ†Ąœ]°Z ŋŲģ'\9¯ŲhKi„éæÍ^˙ūëŋÖŋņđv`Ž¸Ô„/ƒ‘G˙˙ûī˙ûĨßgęõLú¸ēÂ"Ä đÁPnJ;§h~0ČãDÜ6Ãh>gļ˜AÚa 0ƒėŠŲŲ&gpž†3LÛ[aĩíîí4ôûĶME-ŋ°o´Ŋ?õŋRū˙ü›œe´/ķMuî]]´+öŋūë˙|Wí„ÕÛEãDâ˜m“vÕî‹Æww„ŪÜĪ´\5 zmÃĸo ™Bn/}PiļpÁČeFSŗĩO;.Čū˜zzËĄo%™ŨŨÚv÷ûžÛMƛū˙Uöģ\Ū„‡-Éēõ ų!Ŋ×x7/_˙ūŠOúû÷׊ˇ÷ĢWhĒ U>ßi ōwIå÷ÛI÷ Û_' mßEŪ^=Ņ8xM4đ˙īEį“ŠAŧ;NÁß˙˙NīōęNú‡õĶ˙÷ü_˙ũÂåCî“é{ū ę=û˙~ÚūcŌėŋa6ŊĒŋJ×đíwcûû†Šēo~ŋß˙ ôŪ^vŌ÷ß#&ßVŠĩvģzONËá‡õ˙ØđúīÜž×_˙˙Ž˙ÖĐ,;ˇô˙ãûžhŗioĩ͐”iūēϝ†X¨NšúŊxū˜˙Ĩ˙ßĶß{kí$õ×ô˙™nøĶīëéÕŊũAĩ×˙õöEHõûÁŊãļŋ˙˙˙ÕÛōÕ/OšļĪūrí°ŽˇĶkM´Žâĸšw˜Qņ¯ûŦl5!‹_pëL/ŋP}cēõë^ũ˙û¯Išf¤UQą_Ú˙~?ƒũ_ūyw˙ø…C÷ŋ˙ūūųŸYËŗĒĩ˙õlõ›VSŊŗ×z ÕÚÄĄŨôĮŪŠĄ‘Oūëa¸+ßLņūÜ _Ö/âū“Xím9؄C‚ŸaŒ2ą K¤ō˛KCë†ŊÁŪũz_} 6˙ĨäĮzËŅu˙­ûˇū­…˙sđAˇŨúßk{­­…m8ü'ĶŨ LŽ;<#éGåčåë˙åáHz/+^Ãų1ÍNŋ jTŠ ¯Öŧq^ēįs—ÎĮÉ„͏ŗ@Dpyˆ×Ąëø˙Ę´ˇß˙õŪßõM˙õs§¯˙jÃíSAĮŦ5ĩė%§iÃŊŠ¤ÅFĐa †œQž!‚pĶB0×÷˙Û§}.˙íŋã¸//ß˯܋yzō'.šļAYr2†OŪqšš4eDri´Ez ˆM—Ad'Vųp ũ7ˇ!ßß˙ĸQé˙˙īՅž×séwŋĐvÕÜT{ *wAÃmé„Â:­§hY@œDGëk˙ļ<7˜˙_˙˙ŋDķĶ˙üŊ„=§˜[6H°ˆ°Ķ4åģ›,'a—M†\_DĮhô˙ũû­ĨžũZTį]ĢŪ¯ú÷ŋtģ‹í;īƒÂŊ5žÄ%vFũŨ„â"h铴ЏV—ŽßyĻĖĶ˙ÚWˇŽųíũŋ­Ėiwë˙Ú'}8¸™ęG­6YÆģÄ2ãAÕˇļēŽĐōz„Ũ=˙ũTƒ ¯ĒöVššđēūcĩû?ŲĮeú†&­…ĩĶPpœXˆa2(öw „ĶAĄh8ˆpÁ4"":Į~zŗŌīa>×NUÎOö~ŊĒÃŊ/ŊžŸo{ú|0¤ŪCl„čŧ~ōpöŠ“Éé.ŋõûúßok÷úvą°ÂLköšĮöļ›i&Ŧ>×/§ 'jÄ.¤XVÅkŽČŽ…„DÖÁˆˆ°`­{{`¸N;Ļ BQÅÅ ĶžöD˜išƒL&šęˇđĪ~ļ߯°¨6:j÷lķzOģß˙¯˙īMÕl÷Úß­ÚŧB á„Õ4éÂqģÅ&œqQ ØÃOAĻA„!ƒ í0„DF!WfŠŠM7Ū)i‘ÃeBÂvŠ ØâčŠŨ†4Ķî)4V'û8ėÛL.ģîžīM/ũŊ}¯Ŋū÷¤ēŋ ĻÚmœŦ ė'¨4ÁAÅÕ4Ī ˆtØĩĶË{0˜A `„JvtņĐím4 õá…A Đa ü^)v#{É:h -ŲŨX¨ ›ØØí{úæˇ_­^˙Z{Öéwßkö4ÛO ̰¨4DŒIÉb e Å!a„B8ˆ¸â0ƒEĻzĸ""%EM0ƒB"",ˆ8vžgA„Û´Ķ´ÅéúOūīûˇUģ"8SV×íŽĶĩL[ƒ„"Ę´""""""#XhDIüDDDCFaԛ‚Ļ0ÉØA„B,ßīļūĩŪ˙˙/MR{k׿‹ /°…ŸÂ b#❈ˆˆˆˆ´˙]4Zũvŋ×ßĐ˙éËņ ggJúˆúú˙§õûׯâßßŊņ˙Ũ;ûßøŦWŊؚŗ ũũoõš…Õžŋ~ũöyļ Ü2ƒn“o[nå˜[ûBMŠoMmīÛ­ķ 3ØŨ˜PƒcAÁÛvrŽW×&ãĸ7ϏŲ_AņßϚéVÕSõTÚiŖ7Đ&‡H;bŲÔgfD¤0šé+ä`ËÅ$N‰ld˛yŲ•¯Ģ ŨĻŦRh68aW†°Â DBÂ:"ûNíĖ“š‚ Â­˙–`~Ͱšz¸'öŨžüa§W§[´"(Įˆˆˆ°†J ›õí&žēīáĶč0Ü(a†vš `°ĐŒ"\ŦĀôūĒ.YtfA_ĸ8~HNøwņŒD3”mi„Éfßw¤‰ąlv ÂkđAÚĶpîüÃö…EŠč›ī˙u*FžģĶCī˙Oĩl,ˇ Ō č)˜ˆ2(ĪFË+“ˆĮ•yTXurYûå\•Guƒ8YXDŠŽ‘#6_¨¸ÁއžKKR6¨Íį‘Ņĸ3Œ Ėŗm4Ķ …įtŽĐ5ĶMßR ŒĖ üM˜A“ ƒ\gˆĄ˜3cM0žQ"Š´@Á;0Y†iŒË"yčŖ:d-úĩŌōB$F jžĪ˛č9‚‚x"'†N4ĶM Ļ‹ˇ4X_éų>×ģ̘0ƒ‡ à š ą Đ´â2s:ĶOjâa4AéĻ4 Ļ‘ļČĩ{R\nB#R>Ļb!Ąĸpä‡ !´Ã;_ „Í‘qŨ‘Å`“ˇIēAŲ+}$‹ē/™P‰ķ4Ûáˇp˜h=’z'Æ+#†CMƉģzĢAh}¨A Đjš„ 4ØA‚"xôõKbÔ0ƒhģ|Ŋ†›ųÆŌ/žøûO¯ã¯Ņĸ3e›"Ö_˜˙˙Õ=?}°žžÃ ü?´÷]ŗÖõŨÚ^o‡úÛújŪ•§éÜ0špõí8õmUĒvĮfÂĻ´ÅXiĻ“īëßžäęÚ˙áˇäÜ!Ęv§KĄúáĸOø¯'ۗ…+ŊūcՆmÁ§ÚQK"÷ũ6ũl&5û[ 4qú›gģĶĩŗŪˇ +ū›¸}|#<õm$ë8ÛėŽ‚ÂĻ›Ąˆv›銊NŨU6˜íˇ´Ô!Á Ÿŋ˙ëo˙Ã~Đíįģúõp?ĩ}ž/vÖõN0ŸĮIŧvƒM 0šiũÚl[Ϛ†\ΐ{i Øá„â6.ԃÕßu˛°yŗ>Âi„Aâ‚v ąŪČí9+v›#tĶA„ĶBG @Ũ4 ‹B!„"#ūž—×ĶØo¯'ŸMķ ĩķõßūíÜ6ÂŪĮ­WÔˇIīØM_éÃA•­‹ļ˜ž˜BÖí0‹n˜Ļ‚˛(ö0O˜{ŋ n\Š3ņ‚:ö4ĶT 0­Ši§N؈‹‹´ ! ŖBnÄ83h¸÷īũė>ŋ?‡ĩũ˙~˙žĩĩiŗuvėm§ŽÂfĶŗÂHe *v¨DdžČŪÂ%(Û„Øi„͇a4פ˙7ŗdœ] Ķ†h,^í˜ ĸSĻT g ˆˆˆˆhDDUĖ+ũ÷ûęûė˙ÚVà ~{͊Oĩa§ÆŽÎOTÅĶA‚kÄEĄ44B"""‘ÂehĶ8į…¸™ŋ$Dk'2CôO`­4^bĐrvôáäâ"""/īZļA„ėã˛ūÚ¯a+MAÅFÚi„ôö ‹Ļl5𠜠Њøˆˆƒ"""#šãĖáb&øA™ĮŒÂ[¸j^B ŌnK(ģt˙N‚ŠĻĮšÃ Å&ppÁ(ØÂuĩąÃÚljOd­8a0˜üa­ ĮA§Ÿiá?4×Mdí´ĶĶÂ}Ũ­ŋĢ˙¸jÕ4í1í5 7ŽXé­ÄZ 4 ĸœ°Â ˆ‹M֛ūEÄ9ąú.ßU5´Mûŋ¯õŊĶĶõée˜s §‡ĻAĄšÚ:í;T &č„aŠ DNÅĄjÁ…ģM%OŽŊ;ģÂziˇ¯˙ũo˙+„2$)ŲŦv5üe<¤[ â""!7¨â#ˆˆÅâv¨ŽãZęļęũ_čtŋĩ߆Gë˙_í’ė(D+#đÂdXÎÁ“ˆč=ĄO˛Z“)Ņ&Ās˛\j-ßŧ_˙Ũéũ/úã˙˛8žÕŋ¨"Ü –ÄBJš0ŦíXÂzē‡[I7Éqd6PD‡všSiÕ„ԁ Nd•÷tÕęīÕū}-uü°?ôĪkî—kRX“Ãĸsģ ¤Ü'D°pTĐ~81Ķ  Âz†‚\".Ōî eJN˙5ī_ĶĐ˙Ũ-zŋņ÷īDū™;ŨŌhGahicģ^‹ĘŖCDŨĻģ ­¤Á°á7îRa˙˙zK˙˙˙ë¯ôņ xmÔCōŸ‘ˇ›ŧ4eV.Ín÷÷žÛO'útģo!ģ˙wäÜôū˙ú˙úöũ FŦîģŽŠ¸Šä¤U ûĖ<Áy'Aę#ŽũúMëãĢ~|wÃæƒ˙˙ÃĢC÷Öcžú˙^õžÁ0ĒK„ŗ@‘†heÆŌVp`”‚œg 4ΞqLܨŖÄÎ9'Ž…ŖCBĘĐû˙ZJũWɐĪĪ ‚Ļæą›3ã'ˆ;Ōõ%BĢēHoëũģĒo÷ūÛ=6Ģļģƒ ĻÂÚ!|‰„ÂX†ƒB×*Âp˜M0ƒTāÂa4BĨü!{g=QpîO&Ÿ˙ĶīčÎÂeÕ`ˆœh20ŗÃ új„ĄnČ1åO›d™‘žĘˆÛ†R>ãŖĒë÷PØīôĒ+XaX­; žÆĮ"N!0aÛÍd†Fđ‰GM†ĄåŪ\QvŅ7‡Eķ`4[ĘĘŋmūäíĨ†Ož‰ģwkĻŧ}zv/pŸV\Âx*'öw.X'„?Đa˛PNdY‰Úi™Æ'ˇI“}õ˙ėĪûKÂiąTƒV;ŲĒ3˜VCĖ,"wš€¨ ƒ æĶÂ>‰[IßJčH7NôØa—Ÿá“Wôôīm:A°ë–`Rņ˙ílĩ—ww´öˇ|=Bm[y8zī§Ö¨:†]ÉÃB/ŋNūŌĩm^›mcÚvA¯h4!„ (`×§ ×cT5 $’S@­=7éUĨŊ˜jžĮuļÛŽ>4ũŋZ‚}é—ŋūcÜ;ĶĸNø[Öí+´ōqIŊRfÍmŨŅpÃč; ޟí-ŠMŠŪ*.¨0„X!…„"#*ę›]äZŊđâ’FÆž0tûĒz…oēõzÂ˙ãũũņū›Øũ˙…ė&ąKëkpÕ?/>ĒtƒĶXōVƒũ1qĸ'$‚ĩĶLŠųā%ƒx˙ᇹHŒ˙„ąT’PŌ $)"u%B ūŋōpž˙Ûå”Ō}@ōoú˙ęūžŸAŋãt?ĶģZˇuíģĩ´×Ŋm&аƒ Ē ƒˆ™Üë‡×ü0ũũ°Ņ˜Yu÷ūēÖN°jŨwÅ8Dßëæa;r‰ąc%1ØI3ĩĨ˙†˙ĐatYãũkékiC#‹]^ŋūûÖ¸ûž";BËpB""")ĨM˙´đ}Q(īū‹ŽŊƒwß@éCTI$ Õ˙ARō] fA˜M0OMđɌĶ˙Įîí~ĸÉT°ŒÅøĪ˔ ūęžG–×˙$˙ŠßŋöĐAũĩaé?öĻöĖ×ļt_U¨ –‹äõ…}ԅáÃ^jŌ˙ۈáߚ˙ÅÁmBmŒē‡ß˙ūŊë­õöīüöū뮛fåIÛ3ŪÜã įmsūÅ´mxL;úwK§ ģÂĻ •$‚I$îŌ¸äVÎ Ÿŋ˙ÍGúļ Ĩú ŌāôXå;˙ũ맯ũ9Q˙a]~ŋMSôĶļ-ˆõ‘G„Ķ­‚PÁP6Đl¤W›4Ũ˜ đÄ6:“]S ęįcÂãå-&gfĖđ×ũ˙Ĩū‹ËĮķØh.Ž…¯ŋ˙å§~˙ãīV8iYË\ÂËéĻēwĻ‡aĻÆƒVŖbƒZllR‚ W ¸`ŧCpÁ4ĐV“'2)•ĘŽJŒņĸ[ 4īðŗ¨ŋWūßépëûčG×Á×˙ßŧ/ūŸúÆÆÚLqĻÅ&›߆H éņ Ą &a4"Ö"ƒí¯fÄgŽ$bķOA‰ƒ:Ʉ ų›fØDs"ąęe“ĸΐ'•0ˆI’ ¸§AB\[‡Ú§ ioēŊ~c˙ßÕŗ9r%ŊŸ˙ûû!īoß÷éĻ+éϚЈ‹%ˆDHŪ ĘØ@˜EIáC&ÃŅ Íhœ…ÄYâY@R4)‚ .@úžeÆ3Äp0fČį„CvN&; ' Úßæq§k~ĻÚ ˙OŪļĪ­´í2é†ģÛ­ž×÷˙1öŋŊ˜pšzĄĮ EĻÂIÃ$:’ˇ˛Q §Ļ(ljĶuŌ„s&đwŌ ´íj¸h?l%}„Aą”áÁČĮû ÚcA…ØĻĶAēúļėķĢŌÕ>û^"jA‚h0}Ëę/›ĩ´Ļ^0íŅ7ƒM#~ŅxŨų+'— žT6Ô Ú%JˇņũēáƒJÅ1LRŪ˙eͧØÂvėŽBö˜°ƒŠ6 ÛTĶcÕž4ØŊ~""õ}¸ģSôđƒĶ °×.õõĶģ´íĩá?X¤’ $›m_„4ÂiĻxa3Ž œ4mĢÛ ÍU‡›˜M&ې{XAąTa“†ƒ §ĮOzq: ˙ß\wújŋą˙§ũwđ”B ˆ†ˆˆˆˆ¸0B4-4šˆˆ†Ō ģM>Ķ[M4žļYŽ×ŪB‚ŋŋ¯wÆgéc˙úäãX×ŋ Ą˙ÄF„n„DCDDԃ4# §jrА˙]Ĩ˙ũĩldęk­÷˙Ņđü°úøU]w°“ˆˆˆˆŽōnƒ)Ú˙âEt_{Ŋ÷Šd~‚ûŌŋ˙h¯Õ¯Eâūé­ĄŗĩŦėIŧˇ"J§d"˙ôŌÖŋø^“ˇß¯ū‚˙ôŧĮmŦŒë2Ȋá;æE#Ŋü&ט_˙úū-6g˙zīŨŋŸķ ÛÂh}Úh8† šNGz‡.œ3-v%#ēÖvˇŋÃŊ8Wũ¯4[¯úڟŪÂÚ­œli÷ëéÆÃ0va N)6EҊŠ4ĢU%b8PƒÉs*fMØš™Ŋ]Ŗ!?"\8}ÃUįaV†;a4ėpĐiöŠČBÅpjĮaši„Ķ ą ØĻ!Č@ÛGFa ÕŅc aN& Š ÖĶ §Č)“ÆŲŖĘMîøŒĪÎę3ŅÂ" Žįšv 5M5NŨ…Ō™+|5M8{" ÂhE a0„bļ„4ĐîōņŦ$\9­š)Ãíi'™B b}œÎÆR>)ã7 4ͅĐŪŋæC‰3†šŊ„^Å5"ŊZ˙jč4h6Bg!;BÎ:Á4"""Ö¤ ĨY›_“&ôØvVŠ´œ0ރNYd’ $o;"¨Õ; ϚH;A§n‹ŋ%š#^ųŧĐķlŅ•8ô}˜ķ¤V#ÍÁL&+h¸¤fđ× Ą'ÄX!˛&”B4 ˆˆˆˆŽ™ķ0`ˆž\°üü@Áæ  S8Á ÔgUEĒ*ū'V–$ĸqÍaj32>hD.A$ÆHÎ333ä|ÎAž5FŒģąnčŧĸî´_7}Ŋ ĖŠHŽą ‚"œĻGŽčg 31a0œ‚Jˆ&¨Z..íSt/âÂEķM!ŅâÂ&8qz-A Đ†ƒ˛äˆ#>ŗHŽ~’fW75Ęw¨S„˜AÅļ… Ķ8ĩ $qéÂK— „‚ARMāŨn×üËōsÁ „Âh4,&ļ›iĮ¯Õ„ĶūFô›vŋwë§O¸A’}Ų8"Û×dú‰>-m´^X‹A„4Üx‡]gAńBx’9 "¸ž‚GIŠN.pj\š¯/ēa—Œ3ŧÉĀqlžCîotĮwwk×ßņęw–™<˜MϚz4SC‹w’vęîĐwDŨĶO ŌvļštƇŽ<0NÕÜxÃģ Aäō“lŋtÛ$ä[ĸwDî‹Ęč˜īŊÛ ž;Pƒ5iÄ4 ƒŊ‹4QJöĨãŨéŊļNîÛMB­ÃM(Úũ*I $’IB žFĒvžˇ-ōíáī’‹Â ī.í;[TöĢíŊGƒúö‡ę¯zŋ§IũvƒMĶͤØ"Ĩ ĨN Į/šqaŲš˛‰Ã“ēÉãOn­Ú§wŋa=ßvŋ­=ZQŋš’ú”ņčķ>8ĐģĶŽN&>›ßŅvŅúvžŸ§ˇ÷Ûw­˙éX|0ZũåáãũŊní75Mtú§‹}7ĩ[֋ÆS˛æí:ē á>ôÜöø8Ũ%MĮúîÖ=†|&ŪÚȃĨäę’ū*i­ß5ôž_˙x'Ļú˙_ëģ_ūōp’‹zaŋøŋõ˙¯[Ø˙;’Oû_ûŨ&č5Mēöũ¨}ƒ—ã¯ōbûũÖE…ƒađRõ[T‹ŋéŨ'3ļDî­ĸīWW]{UĨũ¯˙u˙Ž˙ˇ¨P⏈ú×õ˙˙ë|´Ÿ'Öúž÷˙˙\N˜Z×c†čÎu“sSĨ¸!Õ~ß5pn íĐ!īôŋÚ­Šŧī^ūž˙˙ũúũūĢĶīRî/û˙õ˙˙÷×_–%Ėī¯ī_c˙bxūې‡Õõ„N?ũĨå:ũ&īŨ×ūímĶģnÖôõ˙cÚ˙ī˙m˙ŠWŊûđؤî‚×˙˙˙ŋ˙ĐOßŌūö˙,Æ÷Š0˙ÔááíŠ˙6­h?¯õm ë]ä<ŲųvĮŨŨī˙x¯ŋĶJĢũö˙öū˙oÕ÷vGZŸM×ī˙ëūŋ×WúOîI‰˙˙˙×ú0ĸ˙Á´utÃĢģŋ×ũv;8̓ Âu0ƒļ("ØA‚awÚīēĶ]5ûV˙÷_Ū˙x†°õ~“ąĨĻę{ßŨuũuo˙ÖĪ]˙ögŲ§zNŋkæ?ŋ˙ŋŧ7đՐIØf 0ą„Ũ§h4Lh‰ÂíŦ ÚÛˇēi ÃߏãĮHøFã˙öލ_áīũ'Öŋē˙˙îžęŋŽļ¨ˇjŽ›Az¯vŲûūBųuģ=ûxwãwbjöÃbÂi Õ=„œ™:Õ#R!Á˜ĀB"úXÂúZy1ëũ¯ģwīîØôû˙īåĄëûĨ_Ŋ4Ø0ļĨiFŸ~ÃV:c@ė+kϜRkkŨ§ėäØOAÆnqà Pa2ËŖL7iĶ)" ÂÍRqŪP aÕraųzimĄ¯X¯PÛÚ¯˙w˙ÚVžžŠ°Õ4ĶA‚ 4ĶbPáĻ›Ö pØļ´wAX¨Ļ‚iīiąĻ „Nö8 ƒN¯ÄDDDH”gˆ‹ˆŒS#åÁķč(nūŋí,7ûĶÕááÅ}ˇ¯ûO^ōËÆA?@ĐlBM6 ĶOa4ūÖ+öČŖļĸƒJiĨiœļ‚üŨvŸŠEb#L…–­Å!. ßī˙Ör}õëö÷ūÛ¯QqŨámĖŖĶ ĶNÕ4Ј‡Є„ÁÁ§i Â ' !`ƒN#B,Ë*iøi„OŠŸ[´EüPœ?¯i[Ų˙[[ûûķÛOūtDužļģ˛(ũnĩÄCB"""8ˆˆˆˆ°„DA„&XčDE_YN Doԇ׆qˇmœvza‚pĶžíp“ĻīëļÎ4/ĶV+ÚhNžų-͞*""7Tĸ?û8ÆI66 Ž6*.76v*“L&šø ÕŽßžhDDC9ØŧvëŲ0a4œs[ôí„äA1HL[MdíGLlC¯ ÂŠiĻĐ:z ÂÕ_Õú Ѝ|;L[m4#¤a†0„DDA‘ŧŠÆ•‹B-ƒˆ~žn ˆü~4‹ælÄf,0›gÅ`š;Ēâ,@§ŠöpÔDEԔũ•¯íM4-;M9v÷˛ēLKxB#ÄS)­Zī)˙Lé-č˜ūŅoi-īŗ"‚ Æ Vv/đ¯^/™fĨ„ÔēŧßĻŨéáoųĢ&™¤Ÿ’NĶ; 2´d1咧Aƒ)Й$Gųũ)،ėD™ũ<ņqŧTŌ ˙vĒ˙MWuV[LŅė› Ö ˆAØOIōe*•SLĖ´í‚“‡oũŋ×˙úī0ũŨŨ4MÚ#8zw)1;R [šŗŗ!T;ä`ԁ S†h)œg; Éō9Š-4Eœø3l"%ŪÕÕ>ëˇ¯ŋ˙_îū˙‡¤^:mŸ”ŧ'‚ ėÔÂedÎæÎăl뀁]ÃX ä[6á„ĶA„ĶO0F™†lŽAĄjU„ „æŠjƒMö-=ú§—oũ˙Wˇ˙¯wu}ô[ŧė´Č‘ÄejÕ´ČË!_táú%A§h“ŨEŨ EÃBĶÂhŅD ˆMŠN‰Ûcš>ˊ'wũ-úíÚŋ˙ü]HϝũwĸíĐ}tëwdņ+ĖĖėQ¸=o´ėmĘ÷ jƒaۃVŽísgwEŨ/zvFîƒNûPŸznž›ŋüa˙ûĢ™ gdgHŒ^C‰Ú~q’8ŧ¤õúu÷D—˙‘¤r'w|FˇmÃMĨ§ģ´4ļ•ēOö,ŨÜ2âĶI7ˆf }ēnÅ.uĮūŋ÷˙ØoßãæJ$ÍE i“¤É˙Aǧ„ÂjdčäNd7æã2>šûīv×%(ŠkápšawS˛‰_uåFw”d^Øjģ"÷îÖŊĨ_˜°õûkÕy‰Ɯ`Í$Í 4h;T-T&šiϟĸŨīéÆžšhq~â—˙ūē⁄ 4! `ƒí´nķFPFČ.`0AĄič„Á ĐKIų X’Ū7ĢA‚vsAŧŒ k˙ī°ü R{`ØĪˆÃÕi‘?žG×û–:]×Áũ5gÚ &šĶM;4íoo´îHxEÃ} ÃũIۖû^Ú}ŋüĢJ¨„Ái´›Iîëd@Ô ×4ĢĸpÃ-KiØI† 'DŨĻlũy;ˈeņ<ĩØDŨ˛WÁŊjũzāŨgÂíĢ.ˇ°åŽdCũmúĐĶũļâ߇˙ŧCi‘Ö`‚.õßEÃŪL}踠žŸūˇmĒŌnNîč¸ríŦž^Ŧ%ŋîtT͙<}šPRvŅy "xØRíîץH›‡¸]‚EÃdŪ‚w žQ8lUŪŽƒry˛ä÷á§IöŸô›h>“ôëëöčŨú áē‰äč÷đo_Ū˙īĨ'Ã{zkíĶ›'mû}Ōwt wIēÕŊåŋV˙¯zo÷K—7Ĩ˙‘c(ĖãFHN2‚áéĢa­Sîđļˇņ§Z°× NíPw}ŊĻ›Ļęļ˙mĻÃöëßŊ÷wô•~ĩm.Žnü-n°ŪÖ{w¯%˙Ö̎^eëI0žÛ'”M ĸíĶģĸí´Ķ¤Ūûn˙ߡ¤ũÚktŋw§Ũ^›ô/˙Ę|öƒ Đz =;]¸pIßzŋŋ˙Ņ!ûģĸķVë{U˙ī7ŋūŸŲ;vé÷÷ã˙jæ×{ Ũmލ;MRV˜Ģ!ÍeB{ôë_#KĶîŪE€Ķlũö@íub­vˇ„ô‰ÛIŊŧißũû}öūŸ}úo˙ũnޟہ[˙í4û ĸßčuŸŊ5Iŋ˙Ŋ‹ŋđƒ¯˙M%ô>ĢŌ_qŋ˙Ķ÷Mš˙÷^öāíSl$ÆqL0N!ŌéÚíœw¨AöqéÆÚŨœĐ{ļqĻ֝Á‚îÅ'SMjû^ũ¯}'Ōë÷iĮëīk˙õö÷Ú˙ī ßūŧˇ}K~EÓxjƒ{°^ũ÷¯úNĶ˙÷×§úúîˇ]ûīĮ­Ũ˙šßlķŒ"‚Ÿ (˜vЧlXD@ėqR*pՎ!´Å*iĄč8Â{Aœ‹Đ5%M÷˙¯õißîĢ?Ģ_ŠO¯˙kŪ?îųPb˙ũôû¤ß~ô¯÷Õ¯ėú×ũĮ_ūĶ ×˙ruTŦ˙˙ģčŧŋũáâ!σ@ĖTģ#ŠtÂiØĻ™ a0ĄĒm2D ÔˆˆaˆˆŽ˙]‘įë˙aŦxŽ˙˙üØ"Ÿ—ŋēv˙÷×kÛũ/úzßĮũ˛yū˙×ã˙ūLtŊ='×˙×_îū‚{Īî""""$đˆšÁ–¤čÃ+ŅI†O4‚õŨWãūE ­{´Ņ7/˙_ŋīôëĮ˙î˙ûˇMˇ_ŋŊ˙˙ãõ…˙÷˙úëëū‡ŪÕ{õũũ˙ĶM?ô""""#?Ķü°?Á=zéÛĐūŋ˙×. ē [—?ÛųŠo˙ũuõjßã˙ũ/}?ū$í]Ũ.ų:ŋõ˙ÅõëöŽ}zkkß~žøaëÔWëGŗŌ˙_˙ëãüžˆít˙˙uw÷{˙˙˙4_˙Z_“á[˙¯˙˙õ­/˙Oė'ĒÛTĶöĩķØ˙ßīv–šwÛnžĢ×˙kĩõņI'ũū×w­ß˙˙§˙ß˙ßωŋâŋu×˙ûsJŋ_ĶĶ͊TĶĄ{Õ{ ĶAÃũĖí+lãĨm&[÷?į˙ö\Úģ˙ģūš Â_^6Gž­~?û(˙˙ũĨž{Úߡoû˙ĪÕēēéÖ¤āííÚ 0môę:a4ä(I…iÁ‚q@ÅēllCôāÂll0–ÃMØPĒÚļyÚ¯™ĢõtŌ˙ūÅk˙ū|/ũæ˙ęßõW˙ŧÂÕ°°Âéé]~Ēô5L a´k %AƘMŠ­…A0‘Âc0Å4Ä @؆qJƘN8Ģlãl'§ *š~ŽĻîš ĄīÉšā#į\Ŋ?ķgßīŗéī˙îÁ/õ¯æ;M´Žûŧķ6ėliĒđ„CCDGk5ŒđÃŽÁM€„BÁˆ5´Â 0ß !­‚ PAąÆÄ8Ēö)ë¤˙n¨E/¯ũ/˙{tîĩŋĶcŊëÚčm ØÂ-m†ęŊĻļŧDUqSFÂ: Ë°B!„""L• ÂnPë‰í5iZ˙õI?˙ũõkü5Ŋ‡všmo´ØĪ´Ũ†› Ģ♇NM84B6›^ÃqLDDDA‚5&JÁ Ã?¨a:AąU÷Öˇ˙­yĩՑôĶc؅ÁÚ´ Y{äQéĒu  !q„D0B"=ļ AˆˆŠ DCM5öö×lõúũæ-[J4ÕϚŨņ!íƒB" ˇø1AĐĄ  :lwM„î '#ĘÁ­ĨSÕ0O´āĐÃ.âDņˆˆˆ49h;0e@Ėdŗl•ėB0ÅSÅĻĶ Âm°ã ĶB"""1„rËglP¨_šō:90˜–ā„"SĨ°Ķ´ÉZeƒÉBt˜ ŅūœGšgz„Õ"SáSЈüņ$vŦfBbžxƒ"""",!‡iũv­ų}ũÃÚdQ9S7OYJĖĀR nWІ3ĩ–Fŗˆ…­Ļš¯H=rvNm°ÖĄ ˜;öÉ>wŖ2ŗ2¨9HAųړ$ā™$ąmJ°{Úkęļ‰>¨kuNürn)­‚ęēnƒa4 šÃVųR÷÷DĮ˙˙´h0ƒƒúÎÖc9 ĶLŠFˆĸ4 žPg̓Lû6Ī$YĄdƒ;HÜ&må@§f Č()ôG=\9Ô*˜ žûĩģ`ĐiŨŋÜ;]/ũH’ņL']^AŗLŒĘŦŠÁėaˆí Ķ| ÛM ÁŨĸnÁ ᄠ–‘vt †lf`ęa”#WC=™W‰q æ{ĩīpûCM.o˙ēvˇvš|:íų ÉڄŒŊeÛkĖ0šfđA‘Ļl{­ČŨ„ÛU–ítؕÕ7ĶöI… žf Âē ˆg3ƒv@φKœģ Ąxi„͇Ōu÷īÜĪ#äU} ģų+ô˛'ųīŌŅ>ŅwKa|XNÕ5õŅqv{i….Mü›č>ÂwÛDž‹ˇ ]´-‘ vĄåÜ2ۚ ČÃ3'˜á„Ö]ąœ”ˇ7äđÂiÚÜ'ĢŊ˙čYC8g‡O˙Õû5Á>û[Fw2ļGûÛūíôūŠéŪ´]ˇ¤žŸĐMŊÕ;ü tœ5á…pƒËëá÷—nljáŊ āä¤įÚvƒ!Œ aŨ­ũr(dŦRvS Š‚$EפƒĶCÎĀâ%‰sgęH”Ą›?ΈРqĸī-Ũ(7ą]oōáĸîØmŽÕw˙¤ũVŋĶ×ø×ũĩM†\ZV˙i&ÕīsŗXųįmģ÷f*ŲÄ0™× ĸíôųT3l‡*0ET ķ‹?ĪÂ˙ "đ7ĢĘs#‘Ŗ!™VĶTÂD’ÂÛø"dĮ?¤ÂdčŽüSŪ÷Ŋ&éÚ§Ø5÷˙Mũ6û_ūد]k¯ę×_¯īˇô˙ĐĶíģļOːgÚ 6ÁN‡īīūNdî‰Ã6xP`’ ũW*Œ†<Š a0áôÂyüŲ¨M=‚ĩŌMW˛8$Wm4‹åqa3Ōl]łN´/“Û#Š…íĸpŨØ&^;]ĶM-í˙jtēôõīĩßūß_~Ÿū:˙ũ¯˙vŋ^0„EÄ@ĖŅĖ0žÛåŽöÚi¸O ÚûJO’ė& ¨ZQi‡ ¨¸ĸpŨ0ԞQ8j’'mÚ▝Ø[ō1á5S钊ģ$ė0H”SŊQąĒtۜhpéŋjŊúņëÃ{_fa>ŋÅwÔjũwé‘Ä×˙ëø˙ĮãūÖŖŽûAĻ›%dąË°î?öÂß÷I°Éō4>Ÿāš ĸCļIč()+ĸvøēAÜķzéâŠŨĒäėã‡ļë]4Ō' &åô;@ÛPƒrí˙ˇ6P=ëä-ģOŊëaa˙‘1TW×˙ŋ˙ᑰŸ`Š{xĮ\Wūt ō˙Tŋ„žĩt\98ÍmĻŋEãú÷Åŋŋ‡n§ë¤I1ØP‰Ü"ņ$U4ÜŋûtØtŅôŪŋoõī'ŽE´íĐDá†ĐOô7u}ézū˙˙ãũ}?¯ĩ÷ūEíÛŋũßŋà ēũ/˙ũ0ZhX?˙ãî<$’I%Iw˙§â’ $’I ’I(BŠĄ‹s¤F‚ūE ¯˙ˇÄˇÕ7ßŖk­k–Sz§ ÂũÛŪģüÚ˙ûõ_ũRûˇõë×õ×öG?˙}–Ul˙ÔīđK˙^+Û˙õ˙nģũ÷KUã¯õ˙ęB:Ž:<7 *9$ŌI$’T”D’´—ģ~ĩ´û_öņŦæūÁī˙O0ŋ˙˙÷ûüŅ*Ĩak†´ŋā¯uk¯}õØ_žū˙ų ŋ˙'W :_ūXžåĖ/#g˙éZI$’. :I$KúöĖQ|7¤jō˙ÆŠ˛Dú¤’A,.’’I ’I(puëá[Ė՟éÛ˙īíöĪûözĩš>gļ›ũ…Æ+×ü×˙ßíŋäđ_ßđŋûõ¨?õūū.’õé]oũũŌA/é&Ģë×ī×Õoė÷ôõpÂLqM{īéPT• PTŒđ–. (I#ōA$ë[´îė/Ĩļ¯ŨÜ>× ŋRį“īëСæ’õ×ŨŸöö­°‡ŋĸy÷_˙{ׯ×íúķ5Ģj÷ëß˙é$’J’V˙Õ=ûW1ūėwŲ~Ō„*ƒ_§Ã6kg›ė>Ö-›j°ØkAė28ĐiÅ!AcP’)$ĐHT`Š l0°ÂMuC˙åf˙˙ÎZĢ yŸÂ?ũzŋ3ĢûėÂÚoČũ}—ĶÛūԚV˜A Čá!­C ũú˙ŋęū‘I$I-ũt°ŸØ_âŖb–ƒA„Y4l0]Ģn0Č¯ÚSciB)vŠ=‹p›WaZzĨBRII$’I$’F¸%úu[­ŨŦ}ĻŦŊoÃūŊkŨúzxšų>Ũĩî=;8ÕļÄŲ>ę"‚ A Są÷ĢŽža^Ũ4Ųëû´Â¨KA&”\RkínōĻ™V„GOM…Å> Û3„ !kÚ !M„Ķ͆eęFé…3Š+ÔŨ4ši˙˙Ŋ$ŠH$’ *$˜I(AT !œsŌúëÖö×OUMĩŠŗE *}„›JĶíXÂ!l6 é8Ŧ-Rk:dcôÛ?ŲëĢ´Ķŋīŗá…ŋ°§öˆR+„’IB`Ą"#˛ÉØ@Đan-‹LĨ @Á‹B Â…0įˆ0•Z!ĀЊAÄ4O­ßÛé_֝éZZû=`“ciŪë˙wkI˜Ž“ŠM×M+Né†A–­4ĸ8AÃ#“`Ŧ0AÄ0˜L ØÕ8ßb­sj=X¸0“L&B""8ˆˆ2™Âņ×ĪĻũmzũ0›{Å;ˆŽÕ°ŠöēPi1HąŨ†FíũĄ@Ú´ &d‰ŦDDOKĢĢ Œt¯ím{QZl—!iâƒE¤„qëL%gĢNÎIŨ˛(û=z§„âēvĩŠL íXØÚŨ‘ģhC  Â`ŦDDDDZM,XA„Đˆˆ´Đ‹ Ú EˆežßgPØØVՆL*qL~°õp bÁXA‡ļAĄA„""%^1ä§ !DGhE(&66*ú'¤ °•ė˜aã@Ę8šĄЈĩˆĩ–…œNÔ}5TĶ(ša[tn"ą:#‹rl¯%‚Ģgf˛ ŠIâ Áˆ0‚éD}Iq ^TI‘`E$˜P¤`Î ž""ĐŋRĘK#ž{„Âa:đ•Ũģâ“TÂ"l¯H=pČöč#8M4öĸKj ŽĨ„-;ųŊëA¯kíIķ˛\&dkA eDˆĮ´ũ¤æ“Ė=}~´žŠĒ'‚ga˜&Ķ@ŒÍˇũ˙s´ŧö}“OČžlŠ2ĄkūR#DpŽDĄšnaԋą(Â`ž´š§ĶÖõũ($CdŽ9š"<˜M2´""”H6M2čĸ ŅÁSȃÉߓŒf §˛M.HZÄ( §öū‰úŌ}˙ō4üœ`‚ 4B išga< ~„4v¨70HúđĖ œ""@ÉĢuĻžŦkÃĩų­ŸgķnģŌŗâ͊ Âh8Ķdn- — Ũ8fÎãúBĶ‘Ņ۟M=Ē ˜ ĶiIŖ)Ô`œ4â\ÅĢÜÁ&Ą54l×ŌŅ1ÃZ DŨ„Ņw‘DîĐdōĒá–WDâŅod‡ė0šžJd\?EÛ ÕgdV8a3ė ƒŽ*vŸĒsēTö›ÜXNÂydWģāÁi čœ=ĻKĐy8Đl4ôõ\ҧ­'õÚ~KĘAŊ&ũ'}öNø}Rt\5î,)¤°Ķ˙ōh!(DĄ›#HĐÔčÍx&Ģ•LŲ"ĸ1{L“ĩÉ˛ÆˇĄû×Á5č'^…ũßk÷zvēj^ÚŋOW[ßĻéēČÂ3g#1}°D/mšydĄ†Î;_!cM3Œá´,@Ī„<`šˆ… Ī œĪ3m4גîĶRíÉÃĖŽ;D™-;}ž´žĩõ§ũˆû°¯Åņ×ũŋ~ļīKĻŪ÷õԂŖ+Gŗ3ĖAÚaHŗiåŊ é[AôķČ›e™—đĐiĻ‰¸aTPjšh\ŅJ=xzĐNĨ9‰ Šéī˝á¯},}¨Ŋl.¤4+õÅ]vēŨūëũ~ëú‘F ō9XÛ8D90œ]†ô[ëč:ģĶŋúÍ3ĄØAϏyōÄ^Éc5°ÂEÜ2o ØdË(œ=Ŋ’Ŋ>Žū*ŋ…$¤ŸéŪų\fGŧCx˙k~,ąÖt ûJ¯Ķ>/Ÿ0Ŋ×Į˙˙t˙×ũ:Ϙ@ĖØNM4„z.ûĐwëv ŋŪļ• Øb4Nwb˲;aÚwÁÚÃnĨIŨÃNC_ûĶī´Ēî›ŋ™PLæ[û×Į“„čm 0“ū ZËwī":˙ךO_Û_˙F{ƒMmâÂl”o'Ž›ũ×ņk×Tļū‰ģEŊdí¤Û­øiŨ˙ߡŨŨÚŽĮõÕkđīNũķĩ3ŋÜĢ]†o˙î˙y iŽn|ĖSBAĻąŽž›Ŋ„ûũ:ÚO{}wgŸũ§o§Ļ˙jƒí=ŋû?­˙j֟}˙Ē^Ģß_ß˙Ãũĩ˙ūū:_úũ‡úûWåÕūÁüž˙õĖŅVô`‰Ä? |Ã#YȐ4B+"B Ė!ĶôÁŋscdcŅyŅpŪˇjė}Wõ÷˙?ēßI› ­­Ē ;cŊ†„‡Ēˇú§ĸŋvÚúÖ][éRį­Rû‘‡aūũ˙ũąÂė/ÔĖ'áē^ĢÁ˙ũŅ'÷áļɡîÛßĸdŨ“‡n!¨O+A„ ĻfQh›°C#MŅŖģĩ/̰ŸnOęŨpëôŋŗ‹ˇöĶc@á§_ŒâÛ 4ĶO†›l ÂŊÚl?øĐ‘øŠŋũ¯ų̆īPo÷_čNôF?č?˙Nßīú wÜ=Ļëi§gģĪ_-`´N}ę.-l2Ōá$;§ ?t]ŋjēw¯i~ŦŽ—Ø}ö`"ûh5mm8ébūíY*Ûé‹īi4Úv*´õi„īü;ü¸Xnŋ…ŋׇ¯<ƒ˙˙ü/ū'ß>ŸÖ¯SÛũ_Ų"§UÔŨē§qhĒzorq ŋ—Úáč7'’ļ“o´‹ˇoMpÖ˙ÖņŦXīô!4ã´Eąm˛8ˆ‹Bė†!Háƒ(rĸĪ ÚũĄ xiÚ5ī_žHlxũ/Ë×˙áûT˙ģISíhž˙đ¯ôũ÷Ļųŗ˙ivĩžŊđÁ+VE§§iôۇ—t¯}ßw¯Æ¯~‘}EÛÔk˙ķöļų1ūÃÚá+G'\+%vƒ Á0ƒBB  ƒB"",ûÔ!á‚F›ū˛yëmąß¯ūĖÖQ}¯æ5MŠ §¯¯˙×ÖÖũUSĩûMŋl%{]ŨĢŸAĒt×}ūŌŋģžôŨ>ß 'Ŧuéøkž—ÚUWP™Į Ãū,čAĻŽ—ÚhDE”ለˆ¤˙į*ũļāÚŽô–Ōa„Ķŋ‹‡öƒV›ööĒŨ×úi„P_M4qÆÆąA ÅaB 4ÂqA„ႊ„ūī_ũŊęß˙ûû}jûeÅŋøLä4^-\\DDDDDF˙ĩ^ûú´öĖ×w´ļG Š´Ēbš¤đŸyëTĶ´Ķ ›Ēh4ĩĩM(h&Ķi¯†DĒb-t?˙˙úî÷~ÃÛŧߡn)í{Åq—[Jü¨MŪ`ö+ŋũSlöÛ­Ũ„Ķ´éî2%b-F"# č6Ճ[X{†Ck¸ˆšMÁ„á„ÉũĄe@B?ĒõūĩŊĨ˙žßųĀ˙—\7_ąūƒ}+ÚĐnēH4éúząßš ‚$0ŌâÕ6š{VĶ#xˆ´B"""" â""žP'_õūÅë†ũôNũø6íŋŋŋM˙ļģ–bÚ#ž›­BiėWĻĩ¸0„"=5„"ĐvĨŽ„DI„GÄDjŦđ'¯ī÷ŗë÷üūų:áûbŊŗûŲÖˇ†nøi1 Q]ŠŲž!Ú}„"<Јã„čQcōw{oIÔ˙oīûÚÎOmūÚjÃ0iļ{Ļ8a8Ũ÷š#‹Zƒ4¨â8ߤ˙įũÕĩ˙ū˛cÖŋîöĪûĻ›"Lw v“Ļˆiķą+aˆˆkŋU¯Ēm—ÖõĨ<ÍĨ]]suŌk­­„í[ ü4ÚL5ąYŦéÄk â5ĨO]{N4Õĩ†bOēí„ŖĩĩІ­§™ĨŽ7Ž ƒíˆųØ5Šd,{jÁŨĻŦ[ÕŦT] õXŽ6ԘuâÛ ÂjŧpÁ vúĐbí˛1Úiž Đ`ˆé‘Â[Nöš¨Ą &JÛÆ$ė=…GWwäĶÅÚv™; ÄDDEq°Áˆ†ˆh2bHE/÷‘QŠxhDD^œDDC—ĩ–æÖį@Ą`ÎãWŠY ›gPĘ{Î55Åtd¨ÂkīTü,qh0˜@ĪČ5Âze~' Ķû׆ē Q6UŽĀŲ2‰ÄhąÚˆLáSEÛ^Đ8âČ͖ĻtÉAŌŪŦãôaāŗ[KĖ‹[˜"AĢĘt/B[ŗ°ĶŒđJ\4é§Iļ_C5xhČēĨö‘ŲŽxÎ/Īŗ Ī3ƒ‹ōWrPț8Í<›Ē2žUÕÕ-Úû˙Å÷­H“$Aޚ  Ä4Ņ'iģõ9•pSäh0˜TDh(er¨“EĻöûƒĶ˙ũYIœ‰š=žj ëú;˛Âh?ĻĶMbUč:/Œßŗīƒ0@†5ŨGeôĶŋtŋ~˙é˙÷MH#DrL&“™Ŗ6j@ŸūõÅĻĶ՘ˇ7Y<ˇO˙U öš­4čģŪģN×ŋŋ÷W~ũvt;°ƒĶ>*h ĶDN!T{õŲ}EåÚσM÷TũĶ˙bųwi¯oŨßsšy˙˙˙ûväĮmÚl”ŪØļ "Ũ†L_ĶĶu}˙¤î˙ũn°û&ųyÛÚ÷֟ÉRī ‡Ņ8h8Áŋę˙˙÷lô‚vŪÚ 6‹†Éä=m÷ŽßOzÕv%͍_Ž×ž’ēÛ_ëôķq“ĩN-=´ũ˙_Ŋû÷t^?č6īˇŊģ˙ēvî˙QĢ˙ßūŋ^íT‹~v“9dm…ÂdŸ;jĖ'ØRō+÷ī˙įū–íWūõmo˙ S[ãļë{”˙ŗT˙˙Ŋoę e\™25Æb•1‘¯(ŗA“ 㕠[Ú˙›ˇ^íĩŨŗëž;NīŪú5Jã˙ß|tŧkĢqzwŽ˙üRoõū¯üœ_ūĐ˙ņ;Ã9ŅĻ#ë˙˙éWßJĢûũ­‚jĢLk×ëŌīļt˙ë‡íūŠëÃ{¤=+§wūˉū _ôĘOž""ûīŪ˙ë¯é;ļˇZjŦRiŠ8ÚĶīūũĐyÆēõļí~ûf× Ž/ėë!G a‘˙U´ž+ũŽŋãû0Č˙y˙ĩ´Øk÷ũĨ¤5 Åzkĩ{M0ƒpƒ]4ä?4éC}˙ߏęú|Wģn“×ūĮōë˙˙˙ãúa6§g$Âa Å}˜M¤šmĢĒĩMSúaˆŒ'ĒašpØˇ &ĒŠ˙aŋ˙ˇ\ēú†÷ĒyėąÂú˙_|Į¯v–MÁl&Æąpīc0Aác@ÁÅB`§tD"""7vmŪČŪ"Âé~Úũ˙×áėŽ¯ųŠ/b?~aië˙{gđąTM„3ąŨ•Šåqĸíö•Ļƒģ_a*´B"#(N3t0B"ŋø˙ū˙ÅąNŋį˙˙MtôíPa8`šÖvļĘčĩ]Ba?tа„DĄšbĶ@Îé–8B1ƒßĐ=Û¯}˙|öõؚī]3z{gõŽî,&ą]ąT˛J"ę™ÚžŠâ" ‹B"#­ú]M÷¯éiW­é˙a?ũˆ=l-ü'ĩhFaá@ŋôßÄvŋī­ZČŽlm­¯ļzõÕ鍟ĶTíScB!–hDX"+ĩqۃO–RŠĶ^Ōž60›i4œiąpÂîŌl0ši…Mĸ~°Đˆˆđ@Ūëž9Wá…đÁ*h;aĨA¤„H;ŠĒaļ>Kčˆ`„i[Üė]xS#\ÖĶL…ŖŠã“`ȓ‰“ąļ­8é ÕˇZ͆NĐa>"Đ4,Ŗ„ãtë‘feĖ„Fķã4"ã†AÄ|§XLēsuŠŋ0ff|"d|ĐŒŲƒ#BdvQž`ƒ3hJ`ˆč=ŌäkÚâi†ƒDDhH 0„DDC,Ķé6OįK0Đza =čÍ ÁBíg™ļœCĩŒM3m4,  ĶŊMBĶO>ō$ˆm§xÜDt1ēÁ4Á Âm‘ÉnŸAńāŖáĻžh†  ˛æĄ4ÕĶa—&h9;DáÃÖķ˛Ô˜5¯īÚû@Âc¸´MîhËČjžNÛ'”]Á…/¸nØËëāõ†ÃMrī0åCĻ‘ypvĸvŲ>Âm >ÎĘ ęŸÃiÄŽœĩåäƒrqĻö’kíëwm&Ũtƒģ^Ö.—ģĨj-ģTõŊSģ{ĸwä“OĮɔQžF6A –ūéa‚ ŨéņßûĻŋ§ēę÷ûžŸëŪ–é´ÚîĩéßifT^KuÉ#@ĶA„û‰n°•Ŧ4ŊitØĩę­ß_ģTõ÷õŨļļēíSüuūŠ{č<čŗÆNhvŋ.FHEK:a4NÖŋëߨíøŊ~–éøūÃ×ũŦ˙ī˙_[øųØ&FEIĮšh3âá0ƒdąģoËsÂi„v˛’ũk_kƒø5Ū—u˙cKíŋũF­d‡1ūŸû6—Éė§—ˆŋ2ü댐 D^' Ô*wh›ƒÕ6›ßč4îÖͧH Čũtĩuü:ᙄÛČD\O˙Ō˙ ˙ũ3B~ũkūūx' 2A°œŠ4×6Č$m™Š˜Nė!ØlãaW°Hœ?nŸ„gj×Ė;ĨÚ*É4/÷חU°Žé!3˙íVO^¸×nÄz˙ũ˙Eģ¸iŽ‹ļ ØA’i Ņ7ĸíģĢģĩ†úA>ûũ›–=ĐiZ¨LÄAĸöߏīÖ]äŦpO¯ī×Õ˙Û¯ú˙ūÉÛkļ\Ų‰§ ›¤`ļÚ.Ü'§vĨåęũę]t=*zÜF„пȐE”ĶEØaæĪŽÕéū ¤ũ/ī_ŋųīĖoKī›^Ž•Ÿ˙'zoN“aũ[hv]´Ũé×ÛÅ'¯Į´—ī吘…}^•ígoë*i‚ Ķ897Ķlß}ę×ūōŽjĢ˙Ė/ūôÚûW\ũužžĶúžĶĩĮĮéējŋ N‰ŨÚIũũū8úų7Zi™W^WĢâFŖėé ‘2| Â›a3K>ax„ņhŒvƒƒDâČD&×Üv˙ëÜÍ*mkúū–ŋzĒzë¤ŊĢž†š§ˇÚą÷đ÷_¯kxOôÕo˙å z˙Ĩ wĄš HvV"œCdGE<™ŒØvffą Į˛>D Äģ…‘ôI°¨,)VaBa—“D%´4,& ši˛y„č›ēA6Á×OÃÛJėÆũĨ 'w÷ģkė5cM<õôãŠm$ "‡ąV¨¤~mXJ*˜jžÃŽ˙ˇúûíq˙KC–;f˙ “A‚ 0†TÁ„âE9 ę‚ôl„ ÂeƇzE6f†u‰ãfr<%Á™ŖŅ9’š„CÁ !Áē¤Čßģĸo“Žõ † pÃūöEĢ &ÎzÚÅ1 ÛØ8o°Đa0œVƒ°ÆĻšmqKÚbļ}FÅ$LCOaū˙÷~ēÁ˙¯˙ĸc”>ƒ}¯gbf‰ĀgÁƒ0`Ė:´‰ÆDpéƒd$ô­ē%v-wô Ė"Ļ›za8 Aû ’€Ãi75Ŧē¨OM4“Ķ×ûmUˇM/°ø0Ŧ\lU4b›Đą)ŨÛTÕRm ”:h4-Đki‚ļĨĀBëMũ*úūļŧŋWūŋz}ŋü•˛ „Cƒp‚Ač6Ķ"¸a ÛAĒn’ČšFúyIaÜ&‰ŽÃ\é¤Nļ‰ÃD⋇NĄ8pé~Ķ]tīá$’I‚ ‡ĮđŪÅ;A…3 ÂLÃDx&4 †6Ö B#@ÁPƒ=Ēļ˙˙ëøú˙˙§îí%ä™ klŠí‘ 6ƒmnîí6í´ŌļŌNĐ}ũwaKˇ@â›jĄvˇ§§_ßnŪcĶ˙ũU7ûV_H*I2W÷Ã Ē ˆˆˆˆˆˆˆ´6"8?˙׎ōÄ˙}ųûģT°Ų=Å[AÚpíēOÛīˇÕēæ‚6\ÍsģI?fjļߡz}Õžũ¯ņĐũ~ãū1í$’I’1„o5aõ˙ŋ˙Ģú˙ī¤õļŠ)˛,6Ōt›Ūƒué˙ē÷¤×ÛĖīM‹'x~;Öĸ;ĒøŽ˙˙]îÃá˙÷^)}ɏü—˙ķ9ņz˙˜ú˙˙=:ÛjŠ„ãmnã–ëééŌûˇŋvĢßī_ß|iŨ‡ž;[ŠīũũVÃØ{ĶīÖjžœ éģõ¯ŋŊŊ×í¯˙mžĄö’w 4׆šĻÕ0ˆft ÷i÷ī˙ž‡_ûŧa¯ĶŗE&īn_"B|V é`ļŋūÃļ˙„H{ũīŨ¯~Y!ŽÚ Ķmxė%æĢ™ũ…cb‚q§˛Đ›.ŨÃXũ'Ké¯:Ē‚K¯˙´ē< ûÕöĨŨ˙aĸqh´Ĩ×!…ŽÚ~žīoøKŽŪ?ģu}öroĖ+\ˇ ŅŲdRėė3âĩ†’LR"(§iÚaĶ["Ŋ”8B-qÂ_Û_žŠˇˇ÷^—V—ÖÕŦvũ ]7ˇ ž‰Ũ˙ZÆę˙Ô7AŪmw˙WųūīJÕĩbŖbŗ!H¨qv“I2Gō–~ lRn  XĐaσCDDGéfņûîŋ'ßôŊÛ˙ãĻÁĢxū˙ÃtNũ=īĸû+[˙ūcažŊīoÖÛ[Ė&Ō†”tõĻ­§ŽJēT—gt! Ņ !ÚsÛM0„E¯U¨ũ„ü1Ξ¸¯×_ŌrPíkOīŽ˙^ŌũŪ­ōN~˙×=.ƒ ÆÁ—~ĮA…Žv,Iīũ(uZÄDDGaŽŌ×ø˙ÛĪ…Ų)×úūãlˆčzīĒítũô˙۝[köˇŪ÷\‡įiéļīÚccja †ˇÜ>čĪ˜~ŪŅV*×ų(ŋ{!?{tÉ[û˙äĸ'ŋ4 ë¯Ųš×ÖŦõ÷!&Õ´ŽÕ6Kķ ôĻ& ãbØ"čh5†ƒB;ŖG˙Ōkz-ÖmGūßûÛ ģīØĢ¯$[‡JiĩDãMÕVõģ{õƒŗo°’ 5IŽÂQƝŊ6žÂdp„DčÚü_ũ|WNōPäcũw_ü5˙˙ŽäA2 9z¯A|~ėvšÅėPNÂ{ąMŨ0ƒLn֋舃ˆhB#ŋ’R(=^ĖĖé)Y˙Rb$::dlĪ™+ŠjÜ'īë}÷á×í:Ģø›ĖN#ģĨđŸV]Čá4ÂAą)é´Đa˜0B" 9C8ˆå:0GU‘c\ÜO›3âÂän4ËČ<Á’jpĶ8"!‡Ļ\Έ¨….Bp<a4ÎŖ'‚y6P#Ũģ|‘=Wģ˙ßÖô˙ŽoõFÕôĶ%jOhÁ0DtiÉÛ@Âpšœ0ƒ3<Û( ƒD HA ÕSŒœš`… év÷ié­ļ‹„B^Ņn ē`ƒzÕtŊõ÷ÕÕwūëm/ķoŋÂu™Ē:ŧDDDDRqâ^ĩ3;A‚ 7‹ív‹ļ‰Ä īZģL'wš!–LnędÔęۚ'žû+ķ;,ØCķ Z_ú{ë÷zM:ũ}é¯mŨ§a>ŌøŠĩvČæãŅ;l´„í¸tnž´Ãˇ6 `ŦķDíÖ¤ƒŧœ_Ļà Ŧ>üģtxH›°ÉĮ;?íŋÛû.´ŋ×Jø=-ƒ &áuﰃS†r(ėĖŲáÜU‚LˆÜĶ쇗mmŽ›Ē ģṲļíoũ>øÛ]ßwíĻžč=nč'jŋW2Wö—IŌãéS{Ô%a]A*b8i*áuCÜ4Úö(Žž¤ķM×ū?§ôûV$k÷¯÷/ūÄ}oīĻņĨ~ŠĘ$Œ36:Q§ļ­¤›éZnÚaI„„)ØPؤÂÁĨî ÂPa+Éddßīņ]Zo˙īĩÁ~Ÿ'ŸûūøūÃũ;ļë˙üה3Æ3^z00ƒˆaŠ4õVŌbt… =‰ĸ‚:.ŨA) 8j*6ƒ0闱Rō."™"˙Û÷ô˙{Ž=õØk×eÄĩØ?õødõÔhz¯Úëfp@ÂxAžh4í4hī:U†i]Œ:ƒMPˆĶBâAĖ#Xyá4"( |Čmá,§Ž×._`ąũUKåņė˙đ˙ŗ °Âԅ;¨öˆĖŲ2ļDŗ63ŒøD ;ų­Úą„\h5>Cū0Æ"#aH›´"-ˆ†ūƒ; 4˙ĩX¨ĩ㐎ŋæŌ?í†P“îXđßø.āÚ&>卯ČQׄ!‚"M¯áIĖš` –BŊĻ’mˇ“į†Ôvš-ĸpÃDDD^ģ šķW $aįeléįÅ<›žŠšzW˙ųuCcõūũ"yÔ< oŨŌ—_m4hģí"p ")įŲŗ´Ø,9éũ÷~ŧxƒB íCÉr×|w;W›4ÍķWĄ–$ú¯˙Ö°˙˙†ķõ~c#0ū˙{û'ļvÚĻÛX´l ;åÜ5íŊ.īēđĐwaiŋģâE˛(0ƒM4Lwž–õ˙nŊļ˙’z6ŊûĘ>Õ˙¯ģ}÷ãûiéģ}Ü_ ģRã/ĒÛģ[÷öã_l6ųf|F“[[å)gfqō`i„"PîƒŊk÷ũ×^ŗ•÷iúgũm:ûū÷Ģõ[?0͡ŗ?öëĮķØŋĶīNīUŋî”ȰĄ°u,åEŽ…]Ķ"Ų˙;HĖČų„Â`Ą6;  }ˇ}§ßĨ}Ļģ 6ÂwũöˇÚσOâ­0ƒžím`ûa…Ž­÷`öív†Į˙ņ˙…ū!ļųgŠ„÷ŨįDOœFļ AžÎy¸†3HŲœÎ™Ą&ƒ Dáƒ/.4˙UÃVĪvyZŲęÎ>4ãŠ`Ķŗub•64 PpÂģƒ‹„ņQą ØÚv0ˆ‰˙ÛÉĮ˙ÛũŋKõˇË¯ōÄ0o“qC\&ɔC3HÛ?•räš !ƒŒρč4NĐ3âĨĻÉ?aBozžÖÚ]„ÁX¸Ļ64ę ϘØĐ8Ēĩ|ûâĒŨ‘]ĻôČĮđƒ[¯ūÃÂzyĄ{ŋˇjEŋíđpŨËt2ˆč3<“<ėl‰-ŽøR)žŒA„Ē" Ī6H<Ü=Ü:Töí8´MŨnƒÚEÛīJõíū/÷ėo´ÂY‡X0A‚5Ŗ ĒϏL!a #„Pš Lé aö°a0ƒL'ũpÛíƒŌJ›ŋÛÁwŋ¯üęęWNĩ ¯‚ģ‡ôBy‰ØhZižļƒO &¨ģą8ô]ÛŨĻ͜›ĐNíhœ6š§§˙õ˙$ ŋFœZ Lé„! &Ģ ĘQ˙ ūâ{ø|"w˙aŋí§˜ģˆ‚#U‡VŨĶÚkā;ĩ†qËļ ¨hˇ‡…~Ü&öėšûŊöũĒvũņ~¯äXũŸ éjØ`‚ Âũđû<+ƒ§ ÛûßĶëÛæ}žĄ÷§ ¨pîîĐiĮz DˇaˇdōÚZač?%äâ‹ļétõģ]íáŌŨé-Öŋũ}uÂ.ņ×B"=ūc|E‡¯`ûÚģt—˜īö_ļąV'ĸĮŗĐiû(yÃ#HķŪŨß§Qßkjƒ¤ūî˙‹_˙˙ŋĻa˙ū_¯­ũÂúõz˜÷üīĢ÷cúũÜza6+Šjû_cGoûæŪÔę0ƒ;ßqĒ˙ą÷ë¯Ģ[ę“zéií5ûJ#×˙ĮúĻ­ŠúmëūßúnŨcMÚPāīpĶC|ĶÍŋ)BÚ ņņM—4Ķūō7oß~ŋ×ī_ŋũeÅø_˙õ˙āÁjŅ\;1qOV“jü0GŨūÚîÖ¨‹ĖĐ`„tûæŧáæōDpίؘ{ •ąšƒ#kN4ôÃv˜dpüuŽö\W_Û zõ˙ˇÆŨKĢũúÛX•Ö"X3‹4ū8âēb, õ5ŠęD% Ø!ß§;(į13p 'zhXAE„ÍĻPDâ*rw rōƉŨ„˙ū¨‹ ˙ōŨņë÷ūØz—_¯ūļīOüČĀĻ2“MJĢÎæ)æp˜UU˛qâĩøw ˆŒ†2x¨—9ČęÂaĢ l]¯ōvæ†ė ē'zmģIåē§ũIËŽßí~#ûėÎ ˙ûWĮm+ūû[íYwY×`žĄđÃt-É'ãBĐ3‰XB{Fa0™Æy„@ė  ņωģũ'dķ'oÉŨ:ē&;Ī4åÛë߯§J˙pŋ^ ß]ũoKˆú˙ūßŲ=îēl3iŪëĻEYÔČ.ŸėĒÉũånõĄiĄĄ´"ĶBč6ÉĨĩ“Îũ{ŋOøzŧģi>ŋ˙ãõøDŖūøw}už˙3_õũ]íYũSÖŌ ĻÅí4×ՅMQ(ģNÂ}Ļôŋņ†Jí;%dŖĸōé;ĮNûnükûŌũ&÷ú¯˙„˙÷睘_˙č…Woėú÷Ûķ?l,;4Ø­„ĐhDCUĩũž-5Ĩž“×ŨŨŊÜ6ËĮļqí˙ëũ˙§l{ũęúkû]}}û=YĨ÷éûfkm.á܊ípšiØKØiĩMÖ ĄaáÃé;CŋÖDy5Đ2Č;ĶîÕ{īĩüąûĢ˙{÷ĩ˙ū?˙Éiûkîö4ëņũ„í°Ē­ĢÚîÔ1ûԒ@Ø`˜-÷ZōŒîŠÍŲW“$÷Š9Š|d8fË0a3Æ\ˇĖOõ˙ûĶéãũ˙wŊw×aí}˙ũp­đēꊴœH í:NÛ R„Ķ@Ú}==§xBBâ":ŋ¤ųĢ3C#ȉdʋâā_sãZSoÂi í?M>ö´Ķ8×!2lHūõĢ˙a/ü?ú¯īa/oß˙ú}˙Đlíš{;j›ÃØŦ4\ßqĻTûBT!„5Y^Ÿ“ųķL ĐĶÉģņ ĸoĶm=+ÕZûM‹ąŽ]ė܈C&ÅĒ߯ëüuŋyĪ_ũũŠđßé˙ß÷Úôŋ°ƒ)@!ČIđ­„""“B"!ÄD]šŗAĢ•„ sÂi§5울'ĮĨ-Ü'`‘xÛģImywkjÎ4O&;šxŌnĶōÜīŪ˙ܜ˙ņ_ũ˙įŠĻ ęŨ÷ūģ‹'pe7Õb5駓š§Đ„÷utlT}ĩVöš­ÃÅ$Ũ=>ío]lˆëo ąēi?˙øCz˙īũ~—ˇû÷î˙ļšŲîīHL”]Ú.øCMŽN÷ŪÚt]°īqībû{]>7ŋ×^ėîīæIy^ų.u˙ūˇ˙ß×MZÉ$īöŋŲÉSøģbĶ ėdŲ"NŦãĻūMá‚÷Ũęėlzoûiī_åįíąŊ~˙aÖģģö4g¯›a?˙ûKŽ—˙ũVE#¯zžõļ°Ķ „ ö“ö‰ŗ´H ôôëčč6ûŋˇWë—ļ Žŧh7ė¯ņø7˙ZŸō5cyK´ĶA§ī˙ĩ{mtÖÕ{˛:JÛ!ų­örŋín5ī ŖCh4ÖMŽ‹pŽÛũéúú~—†Ã˙^œvˆ˙^ũ/Z°Ū˙zAũsfˆž-˙ĒŊũŸū”°š 0œG;Nãc´í&(&pÕKƒGŊl.ę¡|Įn—_cūđwßŋŅÍ[äÜäÛmģūO^˙ë[ŽC=SDá×ŋõÕu°]46-;æ‹j4Õ|m&`„DG&‘‘gõXúÚî?‚éûaģûtÎ~….ü87ƒŌõyƒĒīgcfhβ%ßäCPAšgņ+˛‰ô]ޚm…M;BŖ6‚dojƒ!…%‰“A<ˆ´ĐhZiĄėW2I‘Fží6¤Z6ĐūRČ@Ÿ¨8o“sB˙Aŋ˙Á°ûcīŌo¯ø5‘‘ ÍÁšŠ`™A„ö°ƒM4ĶL5ƒ„īVÛĶXôöƒI†œ­"ėâ ˆÁB0ƒ§L!aįs“*ˆíAĻBaoÍflÕ?˙Áw˙pũ˙Ō/'0˙ûîÛīīöū‡ SOĻ-0ČN#ˆiđƒßûwŠû˙ĻF>g„ÂĄÄG´Õ;4÷Ô5‘|§õPƒ‹ëũWΊO=to ›ß˙ũīĖm˙æį1=ÕmŸ_ŋô÷ĻĖÍmÚ ĸŨ­&PûDŨ´­‡‹Įu§uū„!„â,!hGK&IZMūÛk3É>h*v‘ŪŋũžĶ¯ßV“÷˙ëû[9]ö—_ŋØNģUŨ“ví„;Ԟ:åÛ Ôičž8AˇŽúŋŅŗõž""0jęíPv´œW!įV šč=åģiŋīúÔĮk_vˇ˙fk\NÂëk• Û[XjũĻÆÛuņ[˜ôé5vŧW¯›étˇĩ˙Ģl?÷{ô>+åIšfqâ3n0…Z.:.á§H=wíœköØK[ô­cOMm4#´âŊƒv*8ũ*v¨0›JĢīē'oļë_WVŸīz×ūūÛ LWüČHd8)ĐX0˜A¨AØA ēmŪ›~“¸öūŨXa+M4A6F< Đi5´M§jĒŋ abŧ4 ÕãOa^ž×ú´_~˙õ#ßĩáŋûɸDMˆ—$˛ęžV …IÍ&m„"Ұ–žŦ¸‡Ūī˙ûUi[[XĻ)‹L&iŽ+Ϛdq3Me 2œ­NéÚ|ČZ,~Ž+Okúū?^!Ķū\P˙{n)ęBã<N4 Šg&žhA0ĨA› šh5BrŨ´ûAËÆ“}SëŋéĻÂNĶn5"W &qВLÛ B""""""3ā!­/÷ũ!ėŽ&˙,rŅūb•ŪĄ˙ĢÉš.UÅY+ĸŨ¤í;ÔoKũŊ¯u÷ꁄƒbāČ冚 >"" !ĒÚÍa4Áeˆ/O˙ô>ũßāĘ*m-Ëu’3ÎĘÉ4ĶLūiσĶvF=‹FƒDáŋA…Ļ 6Ū“á§m Ú^īJīžü?÷øˆėáhDDDuđ¸aŋũ ˙˙ū´)ö…|Ë­4×#Eöë&;‹`´N.Ņëm„žûĩ\ąßģ%mŪŽÆŸOŋļ—‡e÷눙ĄŅ;ôĖ55í˙ß˙îŋ˙zjĮįC4`ŽžúúúAļJØiéŊĻëĐuîĶé~-=4¯˙÷˙—ëo?|zü[WÕīūÖ˙Û3VGūí}…á4ĘĩŊ"ĮŊũßÚ}˙˙Ņ;īžŋũ>+çũ¯×."Å6¸>ˆß˙íiZŊžÖīŗ×ßûgŽŌė&ƃ ÜPq  ü+‘ŋ}Ŧ\Wú~Šûiúq˙ßø>˙`īˋC[üΚprmđ_õŨ˙í‚Ŧ5JÕŗ—gĶö•ĒlvĮKM´"0vē¸ĐūšÄCūéŋū>—ū˙ė˙uīŊõB/CX}/ßõ&âąÜã%¯´Ķŗ>5XØíY´ũ c „6šhd  W*Ÿš„G5\ h<ÕG˙ī˙ív˙đÛüŖĶĢ˙GŽr~ŧĮz ÂäŲ.TÉ4A vl;AÚ°‚–:iŽŖ´é„á‚V‹ũH\y ĸÍøŲ);Í~w¨Ę hš¯˙ū|&ų0ûč īöøßˇ_˙úÚIŽuŠáhë§zi­{m… á„Mm6ŦĢA„"C…ęgšR„JÔ a4DDAčIāšQœ`ˆUrä=y( ĖĐ`™˜ˆˇvûhģ"%˙˙]L ˙Ã9L?÷Aī˙‡{š+í{N4âĒĩ2*$å^ūЏ}ÜŖcE„ĐaF""< Ņ l"$ĘÂT !ĻcDĮh3˜&Ö§Qā™žIL íSM đPŗî›Âīŋûĸqú—×Į ëųŋ˙íūNBøptpwPĄėíCĶq÷{_쏈ĩˆ‹zŅpí0… ×Dā0ËzLvšŽÉe)qEÛ Ü1a p‰ģåÃDáŖGà ¯­ ‚˙ôø¤˙˙˙ūúˇgŋÛ=vļąÛ Žn ÂOm[™ūé°ļIûN $Xåäpäî‹ČiŪĢHČdŨ"yĶĸíBt›Ļ^^MęīM‡K§ÃUŊôëĒũ­˙ūuķÛßžšŨg÷VGo† „ØĢŲ#ĻĄŨŨ¯tšņ_hlZũ‹Xƒn{žø¯]7AĒđîziŠwj’o^Ÿq{ĶtÂŪŋîŊkŊ›NŽ§_é_Ģ &à ĻĶ›S]•hel_î8zķëȤFÚįŽ'¯2ô:í}­-/ūČâUvãë]h1§éŋwĒ~šĶĮ˙Ž’˙0ģ=vŋd{Muĩû>­mt­†ąQQQĩíKvÂAÄGw|Ij4°ž ’ ˜"Duiš  ûLđĻ€‡‡x@ÁRæL~4’A÷īawJž!XÖĩŋüŠ“ÚūŽŨŠēY8ßŪļØTãģŗ=á§qČđ6Â|8₠ŠkĶB!‚ ¤_ü“Gá<ž@ĐdÁ*v4 &yρĒ ÚϐA vŠÅŸ˙Ač!I$„Iku,:úŋ턘z×˙Ú¯õ{Ú¨N4ⓅŦ'"ŽĶˇÕIĒēĻ„ ĪĩŊyJčĢĘŅä6iØLē9œŠM0AĨÅĻžƒÚTÂv蛴\$MŨEĸCŲ1ÚhVFEH-l öh šz%JI%I˙˙õūžšz°‰_Ũũ‹A§¤ĶSBpĶQN&´Đ`ŠÄԚ2áqŋĖ@Íyė'šäĶG‚4XöPãM4؋Nš;ĸvåŨÛ#›6`ĨÛôŪ á‚“ļ‚m§OÖ÷AĩĮęûũ÷I* —awú˙ŋ˙@Ü/­o ž6Ą„!ÄDZ˛œ´" ,pÂcâÂgÚh;lÁ§a4²O ãG^‹ļÉŲ,ÉÛh5O^îvˇi'Ú§¯ŪžŸåÅŊŨ_8ūūßîŽûûú TIPA%ö˙ûéhßūgâЈŠ°„DEŦv$;šŨÛĄ7TŅ7…EģkŨĄ†û{žâ×Ķ˙ĩxžø¯ûû×´nŸĸHzģuŋŗ5kēŦ2äÃŌīí3‘ÖkĨU먧Ž÷[×6ŠÛņLih3K]Vī“ĮŧŲ„ßAŨúß§vˇúÖûņīîˇö×Ū4ôûĩ0ļíŲīØ`œ0ƒĖ(a @بdst¸´ÂiČ|jÅB¨ $ƒT•Ą ĒmŲļbI0N;M0› cb=jØwwdáģĨjōō“xã´Ōõí~/ü_­Ø˙Ą˙ôũkũwģøw>ß}č<Ƈ n-%æl‹ŒĐ" zŋú´ú˙Ęoũ~ģũĖf'īÛ3Yʗ1ßgõ˙j˙ëۙcn'a銾D㭕c Bæ5™‚4Lv.öęë_¯ˇũ=öë˙Ė%ėũ˙˙ézqũúm…ŧĪ×÷÷õy@§e#"hge&PdLÎĖ™’Šž:ɓ:d„Ē´JQ‘­“‘<0ƒ¤Âf‚…I$("q&Ą%­ē˙÷w­™Žũ[ī[N=aņÚíŌpÁXvžļœ5AÚŨ÷ûũ÷tá¸" ģTșš3TLš ȃĘA—G8sG"đ¤ƒ&yã9 ÉŪfĖÄEHG3quxK ŽđƒBĐÂ4[DÜ4\=‚ ›ĐOˇ†’ P‚˙­ŗĪ=^à ŨĐ'ëvÜh5jjņH‹ƒą4í6M†˙˙āø9,´ƒ… 4Tn „Øh8{P†˜AG -‚JÅ84Âiœá4 *h3„ˇˆz' ‘Å} $ĨđNÖė*ĮL&Å ˜H% ŽĶŒ qHM5dQßXi‹^°˜k K†Č¯kĻÅ1˙úģĮu˜^čœáÅ\;N›ēęš4^]Ã%~Ō.Ų œiõ†\ËÆ­#bEåīNÉãŌpÂt ėXI7ũcĻ>P^á ĻœPAąL(¸A„BPRĶNĄĖ`•ÆšaSDˆ$¤AϚ ­S#˙ōãSAĒ‚ŅĖ¤)b¸q +ķZåå î“ĩÁŅ} $á Øh4?vzˇÉ:wĢÚ÷ŪÖ´šÂÔQ8éÄX%ĮVÁ ‘GƒDPPLĨ …„!„"""#؈ˆˆ††ÖTw˙C ō#„‡%2 ⁜"8Īh&ų‚>f ؟‚šfĖØĘ'›ŽuŦāÎā7§§ąūžúm´ƒ¸ž×úÚˇí5ûãk¯"Ņ÷ŒY9ō(āū"2¸! ˆˆˆŽâ?éĨúŋDíĄ;Úē.-0šC Đ°š!`„qx:Ä0\Ī(<"ÉđĒ'ā>¯ė=˙U_Ŧ2á+mŽ/ō9˙ZmWëa˙ō˛õ.ûXˆÅĢ˙ßKhaRvÃBÍBy[¤nscĐf2â=„ČgĸPᚴģÁS1#ŠÂ8 O (MĩøäJ&ÂüWëĐæ5ü{[!UõJūäâaˇëšßŌO Ģ˙ūøŊSmtø¤ÚM­Đk eđ ôö2xĐL<6…„Úp’†é!‚—’~ē$9Ä/fĶūúęü0å?ūŋ _ƒŌ˙d7Ũ~=ũz§ŨՇ¤÷ûÚÚūg ØŨ;Zˇĩ.č•°Ķ ĻŸÆI6Đģė!žˇ˙žŽ;Ú.ūĢŋēßĸķíŅƒßēļ=ž“MšĸēĢ;4É!–ü’  Ŧ>Đm›š Io×jŌŽ)ëéũ/dADõîi§VÂtÛ#ļD¯]Ž][m>ũ[]éāíŋ§öĩĨĒnĻĨg XذƒĶ2ugvÉČ'gbĻRˆ/§„iĐAF%PĄŋ˙jäÃ,ŗŋ˛:>0˙~ˇëâÃßílĪ1a9øvm;0žļØ?/˙g/?kūˇúĻ„4Ŋĩ;R,_ƚ$ãÍ2Ϝ’ 5*ôõT/&éÅHãF{ô^AŋßMxU˙ƒīä3_Ũv‰ēå4[°}Ĩ}‹bĐjpĶ âl0ˇgũĮXtÆÃ &ˇi˛ õ´a0Ä8ØØĻŠĶ #ÚM0ēeJ×MZ§L"8¤žÎ`„DúšÄ˜ú˙{īūûø'˙÷Ļ|;tĄxl˙L28 Ļ+MĄh27ģļ6“ØdqBaa)‹\PMˆ.#tÖ ˆˆãĢÖŽš8ģĖéņģ§ ôíŊ¸gė‡jšČõú¤§¯[×}ŒVŨŗĶ÷̈h"†33Ē„I†„ZĄ>a‚ČŨØd°)íP0B""ÂöĒîĐâģĐ›O ÚvŊ>M Âh3 † à ši„íķ÷j‡Ûi}č'|Į§Ŧ4]Ĩj";B"ˆˆˆƒDFÄDhčG Á¨ēyĶU7ú”ėÁœ"AQ(#›Égido +6-Š ČŽė Øļ)ƒ.* 0„|jšlAĐA…dQ˙ 6•¨ôÂh60›…ŠH$¸ļãģí3ŪkĪ!<Œ31SÂtYá‚|h„˛v"AҘЁ Î Ė>pRŦCÁRs™°A g™Ë!Ŗ´|* 4Dc ab!Æ+ÃAĻG1FáŠ@ÁÅÃ>˜ĩV‚D/-ÃPešĄÃ†ĶLؘvG&žƒ „ōq~Đ5 éŠnŪw…NúAņĖĖá˜,˛(ĘEÄDA„–‚DO›DDDDļn: H°„DZ !ÄL–ŠŨđr`Øjœ[¸f97 ….ØK8Â{†\Øaƒ'XĸíĸcÚŌoŌ/dĖD"wdą†'ąynÎų§|DDDDNˆÚ Ÿ#šˆˆŽt3!VdhŒ‰R`ßní;ŧ”7č ᤝ ÷†š›` ađč iöŧl›Õ–‘6סOĐmŲŪTÂÄ0kēOOÔ&2%†lŒĖŅålS¸ wkúpī6ī×TŲ'v‹įŨØ}ũŌ줒vņŨ÷Ūö­Ø'ĐÛúģI„ nĶ@×zO^ņ}ūĶ.¯]ũ/­ôŦŽĒöĸåúĶQ¨^;īÛ[á>Ö!ŅcíÃĩ‡šwūŋÚŋXŠŋ˙_â˙ũ™9#ę->_Čjēųx^s!Tõ§›80Ŧ­å)ô3ÅÅ&ąrV˛$͌øÍ˙ūēüąe˙äpŸË™ū„6í¤“÷_đC¯ęši?;Ėëh; ËqН­!™č„aK™Ą—Leü˜ÎÁÆūƒ Ķ(ņ—Čų;ÍĂ!…'#„đƒCûŌû­_Ū—čq_íȰa÷ô\;_ũQcīõîĖ×)ŦŽķōs%BYq“Œú(GĖ0C ŗŽW­Ã&Y%ČėņvāBdH•P290Aۃ3^\g`e>qœ"“ˆ„’9‘8…šFŧŖĪ°ˆX,‚aœsVBđqÁ>!„ (@Úv‘xŅ(ęŠŲ}_ĖmöļŸw÷˜_í™áøîļ›ūČz _1¤z˙¯B ˆ öG"C>g™Æ O(A™’hhˇ%aáĄåķĒa0…§V‹^ėC.pčŧ v‹‡î†ƒ0‰¸r á‚Đm3‰oMāÂx+‹ļ7„ÖŅ;hžB/ĩ ¸ ø ĐaöļļŦ3g˜Û\ŧĒŨ'ngöŠĻœLûZûoÛiûi}īuiĸnÕgéÚ jR ŖÛ4l˛vĐN˙.č”}˙Ŋ82;dąaĻŲeåCm‡ĢH7@ōpŨĻ%E°ŌZ.(ŧ†eĸnOÜ3šƒ 'jĻö‹ĩ/=6“‡}m}—3:j“N*!ĮlB°ļqØA„B``›ƒAĻĮjû $EŖ†Ã &à  ícŋüq“Ę/ļ‰Åz/‡lãa ‚Ãĸp0›V÷i&á:t´’*ZAŨĸW°ƒpÎĘŦJL>ėu´øî͎T Ŋ_ ôîíĐ4“x`¨:'l>îŌ/œÜ´›ÅzÚ˙oOCī AĶ"a à ŖE Œ vŦUčeB mSN‚Ä(‡đÂé§­:M°ƒ ēzˇj°×.ũĩ=ũ;ZUĶ˙Ũ^(I%IzäßøüˆûĘ$’¤TNĻŠ$’AŌH"ų$I(:mĶņ˙ĄMúĨøl„•gūáÕ˙ųŲ_Žß” ŸEI°™ũ0D$ŨŨ¸XéŋųņBû‚pß°vëI> ßÖwŋũ ŪŨnŋˇŊRI›;HŒ%ã &s4gđĪŗ"\Âû„Ŋ˙Ūu0¸oÃ˙ÛēŲ~ÖEˆųži&P)ōDR[ūūƒ'‹ĘǚŨ§hœ7˜Nß˙¤5ũgļõ{¯pÛפ˙ģ˜ëûTឌO¯v ÚîÆÅž; ŽĸĐ\*ę W˜8 ÎÍkôÛ3īlúõũđášéī)÷ģmXtؚģ4äL M3ŒÁÂ4˜Īƒā g ÃO0D‚ũ5_4-IÅ˙—#Ž7Ŋ?˙éęŪŠ÷×íöššínũŋNÕ[3FÛI†)ĮnšqlCbŸ ÉÂÁ’WD)ŌĐpwd1‚IHāé4ll°Á6Ī}Z§æ2ī[N÷ĐtšmĨģa6-¤×Ō' ­ EĸcĐw ŪĐj…„ôÕw5×I5°ŸÛi6āđŋ‚õŋ˙û9ēO¯g'íom+ôķ>ØĶƒ úÔ6Ŗ´äGa“ļÕˆá§)ÃOM8MøiCŠT  D„,šX$† (I0—„ã°”…ÆŦSĶá„ĐŨĒmÃļ‚ ŽÚEÛd­ōo ąaiŋH&č<„PY!ķ\=ļíŋíŌ^ß˙á‘ĪOoŊø˙M†i§iE +› * ͍lpŌ Ģ *Ø h0…„!ķĸÁ´Ą"É:Ķî"@Î9Į†bƒȝX‡Å aB A4#U&d SžÉæ^XOôÛAŊŨ2ņÔžĸņŋ¤ö: ƒ{N‰Ũßi^ŋ˙ûXŋ˛:†ŊŨ%ϚąÃ~ØÃ]ÄĄÛ´Đa°Lb"$ŒDDGÁg*ŖŌüôAE'h3ãŠÍ3­ķšĩB"", ËÔĨ ĸv؈D4#B#lV÷§WõŌŪúwÜ_Mܨ˙ –LvŊ ;~ĐŋŊw˙ώ†ĮvŋÚpãT­4hDDD‡T\NwĶ”3QĢž.áœÉĖÛ0a<Ŧ‡5Sž0ƒ†ÅÁ2$#Œ"ĻŲ xˆˆ‰V„Gīūûģ‚ĢĢëõ‡wũ^Ą‚ÃxGęáõū>¯˙ōpRzi­Ã ļÖņÍŨéĻ„ĖÄDD|"ņÄ6 ÷\ aĄm‘ÃBŅ;´Ōĸpð‚-4Ø8†Bî ÂeC0IŋÕúũ˙õ­5žę)ƒöĶ ÁãūÛ˙ū‡^÷hZėL%˜M“u}ôöÉ8}øDœ4÷÷iÃî‘8 ›Ō'l2vŅ|Áā¤!ÉŨ] ;—œ2ä„?éīíĨ[6›ūŊôøū՞ÎCûŠaëųĐ"úũ˙b0‘}3¨DIēÕåõ„ßÚmžūû šáĢ~öېOOļáƒĢH6qjtŞ,7;;%K÷_UíW˙ųbë’뉨īäę( ^ß˙ö…'ōnKÃÍ=ŋ§ÛúÚ^túģâ=ŌûßŪū Ë!áëĄZÖŲ8†zL(A™ ‘°o˙ą Õ}û˙ŋaØzö‰sÂ_ĸûŌĩ˙ëNš“p<ŌN¯ûŋûņ˙˙tŗ¨˙ēŲ'Ģx7ęßģĩ^é‡}3ŗ>úJĩŋUUŋ×ÖŌd9˙ÛÂ'īēM/lķˇXɲvL’a}ׯ˙ßüūüęŋŽ+ëÁęßũ˙ė0°áÃēV›[_<õ†lõM{?.ŋÛ[Ÿí{ŧęƒ]?éúõltMoÕ?ˇīëūë(kN/÷]´ĮūĶ5]üŠAúũ˙ũTRéČDëĻ)ˆvœ‚+Įa+ Ø`ĄSũoá„ítŪĐ­¯iõÚK›PĶ­‚`‹qT]ä95ũëΡ×ūð‡ÛWŋuh'iŋÚūūû×˙}ũČ´™_\íQD9?&_ ’ą „ Ļb ƒb‚51„rØâ”ÆF†Á—vš…ö˜@ėM;.˜ßM0˜a8’Ļ(D§ûn˙ī˙Ëŋßû×§š>ÛI˙×ūÛ¯6ž˙ō …$qŸ4Ba M—#LŒÔ%‘ ‰Ž`Š! —f‚Ÿ0ƒ°ƒĖčą[jŲė! &h ˜rˆL§ūL+öØãÖÂ-6&zh8ļ†:hs[;„™ZįVvVd¨&m‡nūŦž1iũ˙]ß˙í&ÚÚU úíŋ†ŋūēŋģáN!Ū‰;x´BĶgÄ4"ƒk`ˆ<ÆbŲ:0Į ¤"(Ô¨Ž""&h˙A‘Œ&:hDXÄZ¨âۘA aV *ĶMâĶģļEĶûNâV%Uūû˙}_ī}ģûM×a„ûb¸0ˇļ•ÆšpëUÂp™ƒ=näáÉ× •Ņ7hÎÕ5NJØŅ8ģĸvŲ7†ĻæË}>´ņ„DhJ7 ”&Oˆ‹BŌŋ@ÖLö’æĄ„ftîŖá4 W˙ī˙öī˙Ž ˇv-ŠØė+W“MŒ |4ØÖĐ|ģm0NŨú ´… ÚM¨<ŨEķDķ „'H;Ŋm¯AĢi&ŲXB"" -÷a•ØMĩļ>ޤn4–ÁBw÷˙˙<{[~˙vŒŌĩxi6{ ĨjšÃ†‘ÃOKͧ <>Ú|lk„ė*Öé§pĶ÷§cĻ*ˆîģWÜIDīä{ÁĻ›ēŋUk÷ũūöškĻîŽÉÚa'°¨BDD[˜IᕠZĻ×ZņØ=ÆØpīÜ5Ũ„ˇņū*Ŧ&0Ÿ×ũķAë¯G¯‰ĖņûŪūÖÚąVĢÛ§÷ęMoMώaŽ ! Ģ"/AŖ;ß' Áĩėũ8éúéKĢ,ŗŖ‘Âm‘Å'˛#3F†¤†uŗeá3ņvSæ¸ÁĄ?V•wsĪjĮŠi;M0ƒÂpiąliÖėD÷XŨˆî(‰Gú$˙Ī… ųāŒ0×Ŗûëüųŋ}Ë+§âĪ ††)Â#šō4ˆNŠ&„3ė&l—OčŲ§wíŊ Ö¸M}‹iņažCĶ˙ôXī¯@ŸôFė†iáA°Ũjŋßá÷w•Õ†s˛Q›ŠÔRÆfC2Hø} J&;ô´mÂĒ/˛q‹ÛDíg ˙ũ˙Ø;g CURh´‡U×´ƒ˙×üܟYy ƒßũÛí¯ũŦíf%‡d¨ÂĒmhŸ0í5:7aÆN]ŲĻ^eßfp‰wUtÛ&ūO´čSũīūžÃĄ_é˙§˙ŋsûũ;F÷mûöĮëÃa˜5â/&¨wĢÚpĶ]{ĶŊ"ųĶ]6—ˆõāîá§~¸Ãõúõ ãB7÷k˙§{uĻs{ėå~ąļļž˜DCļ)ã3pČīH;†˛ŋģKûũ×ņׯ/5/šøõë.¯°˙ũüÚlS×§Ũúk`ŋ}ĶØO0­Zc‹bĶvÂĶ´ĐMt*RgDc˙oßÂkÚ÷#Guƛ¤Š˙KØë¯F{ĨWČ^v™Tü˙úW~÷ÃJ*îXę%ûá ’‹%‰’¸a”/{´ũifFĩ” ƒM Ėfb›'{˙éZC•ę)ƒ˙–;î]_Ũ†Ũv˙˙ķjüՉÚĢ#Ŗ6 „ō‚{}úۗLߡĮ,tČßí4ÛiˆāÂ"ÂpĶŽé:ėėĶ32q`ÂîĄũģi]ö:ŊōÜ­C˙ ßázÖ ŋō˙ßû[đ™Ū¨ˇ&8ĩĶî;Ķ´õãˇ[jm$ÖÛLã ÂvŖÆÁ4ĐîëšÍ<"O##čö M=7åæÃ×ėUv˙ˇT ûīߡ'Wú3d ××Â4)Ō; ŽĀŲZe@ÉAŋWũI÷ÚĄ|CŦZh Oë˙Ōôˆd<ŖM0ƒ“˙AÛ#›Ž2nŲ!đƒM%mģ'o~JÚnÕt=~¯ßáx¯l)$4†­0Ųƒļ†0vƒ@ĶNØ&Ą ƒĶSHŸ7g';ÖßВ‡”2G‘Œžq„!’ŒÍdÃLė4DįúbIA¸ dáũ'õÛwũ&Ú‡}Ũč>ŨŅ;ôŊęŠxũTWēQQ]1Öí0‰ņ !pĶÎ=žePԈŠB"šĄa2‡L.ŧMˆˆˆˆīđÛÁ;ŗB>͙ā4ÔŲ‚XiÔ hE„ƒT=[50š§‘„h4ũ32(?NŠæQКEŲ?‘pč?.3]Ō÷âšëá{}˙‹ļŋôŨ˙ ¨¯ÍĮØ":čAĄh4!Ą`ĩ^C‡´ÂpĶ]°˜AŊ ‚!q˛7"ÛODáÍyŽÉõnkÚ/&ZĸpÜ55 !ån%f§ĄÚôƒi7ĶjīNûĐŋđēø}[ûÛîŋR ö×álížÔDDF)đۈEķEķT]°áį˲8аŌI¤NØh4čøNĄŠyzm'H4‹æ´íHt‹Æ“Ģé&›a[ę–õę˙øë[Ž—ũ÷¯ú˙ŋ.ļ˛ëú##i5úũ<ŧi6áÔ4@ÂŖôžąDä '§Ē}-Å'¤ūžÆš}[ÃAéÚ~í¤NÚ%&wÁ ‚n Ūu¯˙ūü°í}†˙˙ŋŲq[\D6˙đMž¸2FĶÖûz¤ũâÃßûēū°×ϰ}lZÛ =-/ĮĮęĶÂĩhĒuī8å×˙ˇOtŌî ļŸûkŋŋ˙ĖøŦ~ūŗKЎã˛âoÁ˙"ŊŲ"MėuŽ +ā˙äL`ĩ˙Ļ\TŊēŌü"čĪß]^…iU¯Ĩˇ^&h+¤¯ģ‡Ŋ˙ö‡Ã}īum'×ß!+“û÷,i6ß!]~h#ÉšČ}aģ¯ Â ŋüQ˜š°ĶPú÷qU˙ŋǝßúøCôJŪģk˙˙ô/Vēßīđ‰°„búYz!‘ ßŌæĶo.¯‚í ¨Ûėú oˇŌ—WÃ"—˙]ĶáiĨ˙öŊĸīÜ'åģÁ˙õŨ^īĶķ Ī[";˙Ú&Ø!īë.¨zߡAŪ˙ĸûØoŧ?ŪKđ‰æœMÍũ_ČŪzRF‹OY}+¤ŋėBŌKôž›īĘ?0Ÿī˙ŨĻĪūöÚ oÚ‰\N Žîĩ×ũÃ˙oßßųžb˙6Ū×S Øwē˙]į+Ąë5æŲÂ:ĸFq¤l&Ąƒ&æ{ b&8ĐȨ<ÚÕ¨T’HŊ Š$´×mÉꡧuõúųŅöøØī¸h:k2+4Ȟ0ˆë×õ(Ü÷~Ųū•ũŗ×ßí…ēmvû Ũ^įŊ;I=†z¯XožĐ! &h ÂõČ„ÃŗA4Đa0a„ Q1ÃKJƒj—túž;ëé’ûOŽëÛ ÚëūfŊŽÖ˜TĶŽĸSņs!%ûƒ@Đ¯_™Ļ÷×O0ĩĶú^Úvé qÆÆƒŠŠcca„Øią„C—lpa0ƒƒĻĖÕ§ą3°›drāŠÚ §Ķ͙¨]´^4O)6Di"ĩ†äî—[_Î%ŗß¨"‡iĨ™ØAa ƒĩŽ)8¤§i­5´""ĐhÜŧ=×kė$ļzm>ŗ>Ŋu^ŌŋĢcNø;L=27 Zf€ƒ ˜Ø†M m1(všll›Odđ ōwh5Ás ÃHŧm=c¤'¯ŌUßŌí$Ø[M0›4á…a…ŠT!BaĐ@ŠĻšąˇĩM0L!õŨí˙C@ílNÕo˙ãŌÔŽĄ[ĢʀšĪäö!„uà ‘ÁO ¸`„3Ў!í5tî:WMi;zß_i;^E 'ĒžĩmB(vŨH%‡Š;@Ũ’ĩ„ͰÅ5Ŋ4æ…APA%„‘öˆŠuĢõ×Ė8JÆĮ{Ú\RiĩĢĨm0B-Ļ´ !hGÁFëßcīzŋ¨=nĢĮÃH/ĮÅEąÛa Đ>"#×AĄÂËŌ#ˆ‹N ‡_õ;Ķ;”L(wH~ĒÂb´¨0„DDEDFũ¯ëU˙Ļ˙ō'û¤QūƒM=X†„DEĘŦ"8’ĩúûgb}䈑š ƒÄD4Âí=U<a4OĶŗ0œÎīĢ]°Úƒ_Ņ%ô)ņ!âDú.8ÔTGk)*OZ6Ζá˜&f*0BQ´Đˆ† ˙Â% ?onŋ˙p.F˜U>—â#;§X|“ˆT_(Âas™B?“˛xû!ë˜$aõ[L'ˆˆˆ˙đŸÛũũ¸ĸŪ˙NŸBĖåĨoŌH°B™¨éÄYáŅé& 3‚ĄR´ĶÕ€ũųqÚ˙KžĪ_÷L>ŪĖ+ĢÛTŸšÛJÖÕ&[uĨféšiŨ„jŒ0ÂĄTŪôÕÄí^dŽ˙Ķøwy´š ũÛWVŌmXÛTČö|. 1ąJ%ēkŖE†A6ē°îōí‡}äņĩ'NøA%T•— EÅ5gaĨũīÛT°×jÆÅ1AäQÛ 0”1 !&ÃX'†O¨æÅ†ŠåÚDŨĐáŨŌ}č=}7W÷ûū˜LĖ!9•¯ūĒŸÃâŸŠpĶ “Ј‰¨7Č[I;ēnēÛ ũ;ÖÛũīīNĖ};øû–áfO•-Q8ØL&žš¯ ×Yū8č5O&: &ƒ!•8Ęö3ėˇJ0A„Ķ;ĸöíąëĻ˙Æĩú¯¯Õ×øyHĢ"ŸP]ižgkŌ…[‘GĘíPĩB"ÁˆˆˆŒįĻ[š•Ļ–›¯cÃ‡îžˇö˙˙ų…˙ü8A„ŽŽÕ9ž—Ih¸jūôáÄB.,!’bŊ*ŧ&—˙†Áíöŋ˙îŋüCõũØr͓Â$=AHÄ_&7ūŊéũĻP0šŽÃģĐîîæ’°Û3 Ĩŋ˙ÃK˙–č5ŋ~ßÂoM <wĖŠĶũW˙ˆŽCv…ÚÖ˛ ú‚l6ûY!ÕūÅô#īę ú^qO: •ãí/nšŧ•§|Ē[ļŒō ”Fķ¨6‹ë˙ŲZ˙˙ēđīikV1ũīé•)IŅ)iīízį ƒ[[yÚőˆáRd„väwĖŲ›Z0˙#X a O „˙—Ûû0˙ņ˙{īüæųĸ=}˙MōßäžzĸHĪ Í3‘áa @Âa2>ãeŪ?!27ûšŲD§<Ō4Á <),g˜LúBfbeFŅQĶÖføĄ7@âŅ8 ŗÛFöûū˙=}˙¯Ú§pÂiũ*õĖBeם4ÂjE„ė&šv†šhi!¤‚ +i§dŨg:žŋ;A36˜BÂwi&FÎĶN ÁŸ-2rL íÂ#žūŨļËŧ)y„ĩôŪę”ōī÷­a˜í9) ĩר×õĻ—¯; D9fgKÁψ@1ú.&:M?NËÍl•‰;ĸlZΌŅÔĐ?ŪÍĮFEHÁ Ķ—Ūģf MčˇûˡiĻ+%™nĐĶ‹ũ×Dĸ‚Ũ Â§[â­mS jˆ õ˜Ič; wi۟f 'lT]Ô/ÅøĶUŲ*Ŗ0@ˆžŌL'č8íví"áßO ¤]ŅvÃ,]Ë;RîR•ĐŽÂōTPŗY*˙‹Zh›Ōŋß‚|=í$ÛģømQ8vĶŋô˙x×zũ§qPØípš Ž.íZ4ØäĮL˙i¸ Â¯KUđšÚjč0ŸĸcļNÛ$6§ îë¨zŌ|‰†(7tôõyO‚ ŠW.ā˜_ũĢ#‰Å/mŨģĩīNīüœQvÚwŪNôōá‡izÃˇī˙`ēQt ’-1ô­27[Ķ]4""Âd­4AĒŌķdsû‹M醟 ƒîÖÛußīęŪîŽōq_uzL$IžŅqžøË¨pôŨtîôūūÛŋûûũīOˇ‡~Û{­˙ū+fNNŅ;—Œ0ƒB"kAĄFœDX! ! !:†>!åÜCxHŲ+ĸw š7ˇNízĢâû˙ŪĖ9‰ēnĩūų‡ēH$Š…ļķzœhˇĒũ¯ûüwëÆ›ü}˙vë×ßūXJˆŠ8ˆˆ¸ˆú÷4;J›pôÛcZ û¯˙z×ëüCCúõ˙júŽđM$•BH”Dņ‚õĶx¯_ØĶŋēÛwV§˙˙ö˙~ŋ˙˙ײœ“¯—™1Ūė~ÕͰktߎū>ąkŋ^é"ęŋũZŨ×"ˆ ÂK÷˙ÕÕ˙_ø?â+ŋđ^đģõˇY;_û÷īsŗC#Œ˛bĐÅīAļžĮũ_¯û./õ}Q¨WęŊ˙¯ãßwũ˙ûUgŨ˙ú×Ĩ˙ønŧ˜æųq}ĖÂu§īņē˙˙úÃ/…Šē{īqn˙ß0/Äą×yüšō@xiKuߝgôŋ“ū8äS>Õß×é­EÜķ˙ŨŲ_˙úl$öãB?ú¯âũĨžīû?í1Eš‡ßžxÉh˙|cö^ŸûŦyw‚AP­dU-ŽŠ˙ĄÎĘŅ|ĐCOÉsMUGÔ{ŋúúņ_˙üP7†˙ŅŗõŧoŦ'ß˙´đÂ;PÄŽ“ŗ!_܃/÷§%!~X‡Čˆô˙ Û¯IÔmŋdúū‚˙|‹d ŒÆhB"Š‘ŸšÂwžúúVīëŽĨ†ŋ×}'ũkŨ^Ŋ˙˙îÛWLĒÚų¨X/īíÕčē˙úMØŋ]úč5zwW6ÔÚ˙)ãĖ) iϜ¸Ėô 2(0w´×Vģ˙ôK×ß÷ëÂÛˇŋëũßŋ˙ÚVæĢĶ;ũ÷"q˛Ķ4÷üŨú ûx~ī›ũîū™ßÍ˙Âîˇæž σM;M' éĸīĸnâ/īz„ē˙˙Bĩë×ũ—wÕ˙÷˙]_ö¨;NíōJ3Mv4õuÍŖ[ˆz4čäôŋœU¯Ģļ˙™¯ŋû6ûš 0Õē\5Ĩj‡vŊØ]Ļ-vÛÍo÷EãĢjƒwNūE%.ũûū×÷ūšnŨŲũŌ˙ĩ¤Ũ=vŌXī ĄmyŲ—áĖ9:ƒ§zސA˙šžŦ>õm5õ÷bî͆Įjˆ€@ÁĻ6Â_ąîÉem:OŨŽę˙Ëīun„z_÷˙˙īßû†m¸[ĶĶmm[?ūƒÂ|=ŽŠ„#KøųZ"œ3dˆ‰u‰Ãa{Đ+kÚé_ëöǃlįgĨãL'<4ƒ`ÃvĶpjŖöa6ļÚ˙ļŨ{ožÚööĖ9' Ã˙īļîÎO^žŠą_ŗŌĒzßié:í3‚EeåŨĘäū™×L É ŪąÉŽPīz (qOĨKkÅσc^-Œ Ķi8m6ĻŽÚFģ Šq a0™ė¤Cû öŌõĮƒúՅ×˙ˆh}ŊW¯÷g’ļ`ØjÅ' &š SP]Ļ‚(}…´ę-ģŽũS‡ØBÂŌ}ܯS4íh?iė}ûÁÄ×´áŠb˜­‘Ŋ4˜P‰Ķ×aĄ4Ü0„DDF†ƒB"#ĶB_û]‘íXv^÷l§˙Õß˙ÚjØ@Ķcct0ļ+ڈlS´Ī2(ø{Q[0áíXģųØ6Î"S”dhí`ãM¸i‡vŋˇņtĶM0š `ĘRD0ƒXB"6F„G˙#>7[_¯ßûũ˙§Í`šlaZ 8ëdnšE͙˛:ρ”C ˆa ‡aO DCS۟ō]Qéĸ=JAņ‚Ûˇ´Û8æžĶîî툉Ņ1ЈˆČä—˙ų=IÄ>#ęEB˙˙ų­k˙Ô4í4 Īą¤â"",! Å(4Ą__%7„ Î8qfˆa4ĐnŲŗ‚eæ]ŊÕˇŋą÷qd$–W×íS†ũ]ŋŽEúŌm/˛eDŨPˆŌkuífãĄm”DĄfđ˜M4đČŖ”=m˙NŌONũ=ôßßųdYc˙úYíûu§ŋ_Ėa ŸčŅû÷üD\(ôĮã„Âi™æĪMHæfÂAá8Ü4-Ëwn‹†î˙¯ß˙Ūf˙Į˙î´Ūõt˙¯Á…ģũvÁ+X‚Hp­žĶL&œjÚg Ē.É]éŌĶĶ˙ŋ]kok ŊÖžÉē†vRŽĀ…ûßŗë][=~ŋũ˙4 î¸v¤Ķ`šĩUW‹ē.ņwOÚwtDí´Ũ~ÛŌˇ¯¯˙aođŋås‚ 3´ĸ:ūĪĢl'w + [¯ú´­8ķ0€Ÿé˜JÔZ+֓āåæ›IŲ8rķˇZ.^Ÿ÷Ōūŋúí~*×oø&˙;ZŠĶAŧC2ƒ(5M¯ūØMŽEÅFÅ"(Nąą|Öė{ˆ„žŦ=ĩûpûûÕ=ũu˙ž?]ū —Čā'č?ũięM7č6áđA„AƧ 0šh,\Pi’´î&zî¤Ü;U„ĒDl×mķ_ũ6—^ŌũÖŋ˙ũ¯˙˙°‡•6ēŌwæŊ~ĶAÃuđīÖØh0@Áˆa dqi‚’ˆŽÂ‘Žv()s;›&™q›L.8o˙÷ėięĩí×ëđˇUū?ZV/˙éūø-ڍnv3wÄpÁˆˆ0„ĄˆŠŒŌ$w0Ļ„ Âa r°{~ ūãã˙ņÛô<¸Ģ×˙Ė5˙Úū.É÷˙Ķ]wu— y7lÛyŠ“ĸˆ†36%Ņņ—Ņ mx{AŖ˛¨:á¯&Eņd~LsĀDuī…lō_yÁGú÷éūûM߯zŋĩ‰)ZOÚ Čžjqŗ!‘č˜[Ȱ Âv¨CūžÂa0Ge0(h&ûNžåč„F˙3 ­¯ŗh\˙˙_˙ß˙iŨĐŌ+)×Ķö™ÍLôĶLĐRq$g2 G÷M;mr‹žAŖŊ4Â47z\8šØ¸āōĨŋūū˙ Ķû‹÷˙˙æˇũwW|7$Ųĩ’I1ÚŦ¨L‹M5PƒMm`ôœœ7‰Žmz 5ģˇī[ŠŌĪ÷AÅé4ÛŦ!ÞéÄb ‘ ŠA™ÆÉ4Đū*…PŦ0ŦUŦ0M´tÚMĨvģ Ŧ;[E"ŊšÂ °šhjØíé'kĮ]œiöŠ…đB›JĶb͇ø  ¤ĶMŠãM6ÂzZ["aû†åK3FČÍĻO„¤tC4ĶtNÜŧTĐ0Ļ…‚ QLiĒV8¨ãVFéĄ`š}ÄXMŪ !ŽŠ‘ĢûūЎǍL lwh=&)ްÃlRĶMíuģm2QÄČÉ Éa;M`ƒP„DæĄ6%=¤ŊđĐã4/iŠá0šFZi„‹øaˆˆˆĒB"-ßÔ~ „§ĩN›P˜Zˆi ėÛ5ÂwD˜t"#ģ™e%ŗ:k ")‹Ã#ŽÃds ĸc´Nß&öƒmWWˆˆ0C°ƒ*ėˇ@Đa0I1Ō‘^žö)Sö}bņ 2xĨôEĄÚŧŦųÚvPdSâ! ›Î0ša‚{šÆxÜ:&íôčžÂ ×íúĻĸ"-PˆˆęÖÛÆ é ĶĩˆˆŠˆŠ ÄDDrŽ"–DĖá„É; hã3fã†h LĖ@¨¸h›ŧ'wh&Đ÷¯Úᎎ´ŊüĀģēđĖ °ką—Q‡å¸˛ˆ†ƒM‚ūųŠÁãf>"ŨŠņĸ- ˜MSĶ §3Ōn›īpypCŋžÅ_˙}˙ōĻ•ˆLPŨę§ú×<tLwõ Â|[ië&î[Ô>ũÛģ†éŊ&˙÷˙{_†GĶ“rėvaÂ; ßOŨi†lˇt[ß ŪûAˇ.Čáļ\Ū]ĐOOOWģģî—˙˙~šŠŧ]/t/įIĄWtžļŦB&āŪÃūîÕi7´Ũ5ūÚOŠõūū˙ũ_]‘Åä$üŊū¤V$C˙åÅ4M€â]Ūū×ĢŋÕ=?Nîé]{Wâô×ĩ]˙˙åŽ&˙õí4ö˜v°v×'ԕ˙øûûé÷˙ãí{bÁ˙[˙˙]ŨôßūæŠũôÚŠnÂj6’_¯oÛîė/ú]_˙ŪEįÚûũ˙˙ŋ˙ÚvŸūŦ&×hČ´f•å-û¯ü?û]˙ßņƒw¯az_ūˇũ[ü°Ŧ4ũŠŪeÖ´ÂaDė_ g`cU÷ßö” ´ß˙ũ˙/VÃÕ{ūÅwë˙_fyëŊX¨üWU5XˆĖ†Æy¤a$™.֐÷˙ūPCųO¯˙¯č6 î‚uūai…īûkŲũĪí…mmtãi‘ĮĸĄcVĩ*Ú@! $eŒ‘­Â %Įü—ŋoÂ#ØÛ˙ũ÷á°}iûô}ßIÚŨĮƚnŸͰâņÔ­†!ĒwötO-.6aü?Á>ö“˙˙öūī÷ĶO\,jà Ķĩô";i„Ī<ŠU\ Ųz&>]ûÚzôēxM?Pū—Ûīú^ŪåEõĢ˙v•¤ÁŨõąąM2P˜Nh‡‹MBfˆŽ3ė&Ž[ŠSwl<8F„ĄŌÃOô؝‹éæ ‡ū÷˙u˙˙įĶgķí­ë÷!†ÚáđÖîĶA„""<œ4]íPģ\#ŗB ’ˆ' Pdpđęôũũ'O’z.˙žO˙ŋŽģÚzß}×zĻļĶĐaá‚`ƒ=:ļí\v$\gcÖEĻ˙a[i>ęģä8Ÿ<™Eš—æšjÛ`ŠēŋĶo]oĢĢīí[ à ÷ąR(ôÂÚîЎ"/]nōpŲ8ä,3¨3Ü=z´’I$Ąc ŠËú¸ h0A„Ņ ĄFãŒĶ8ÉÆh* Ų'°°w§Wõ˙íw}´“ÂH4kM7~LCę˙N‚wwļÃáĢÜîžŊúWÄĐTŌS3CÍŋN-8vM všwîwúûNûNøg/ĩ´ĄÅ&´ÂŠ„vļSĸt3N)˙˙Ŋ4Má`ÉsÆŋ…ĖĐ˙˙ ‹w  šA ‹ē<"ċZwûĩŋ]û„˜2æÃoZâ˜×é ĶDhĄŠO˙âžĐWĩ*FPŒDčáĶ´Á=tĢšnŌ ‡mæŲ€›˛vĐ7‹†īŋ.' 4íi˙ų{äWqîíøiĄEē„F´ Ãû¯×ŊßÎÄĩō†F‘ŠĐ0› ƒ qi­kŒOÛ Pk ƓĶ]\‡˜MUB…AH-(Oī¯ŽîMSBhęąé}/˲ã˙ÉR4Ž2$,™˛čüy Ķ4ŗ„ ŗ’f­īl§Á‚’Œ˜ũlØ:ŌzkÆÃũūģ´õũmÚ $’_wÄDEĄA;Tĩņųwëdœ0žƒÁ3­’hƄ5ŋSĶĶšéŠ›´­¸ˇjh&ôVÁ¯ũéû.Ÿ÷Ü0˙éwõŋĒI$CąEqFŋ˙.¯ųĖÛ@úTô !§h˜ũđûÅķcßzēé÷ę´öGöūˇøO^úĄžęÕöŋ˙˙_;)ą;2‘÷˙öž“°E[÷CEģU 'Ũ§îO¯NáĨmvŋí:Ürü<ϝũ‡Z˙Ząƒá/õi2âÛ˙öšĻ[Ŧĩ˙ũ˙ĮÕtÃģē%}ŋt˙ŪžŽĮÚëū×ɸtŪ ãëė?īõåÂŽŪ—™ĶŊŋIöŠŋ¯™§ŪˆköŨ[j¸]:/ŋbũõīũúû_˙°Z4=đúÛ˙_ũ”4Qu&×å…íũė˙ˆr¸3đ}ķˇKöšöÚ{œI;×muĢßū?ë°oū+˙ŊwŨÃëū˙˙ĐĻõû˙ט˙1éá\BI5î$B7Ö×ÜūĢÄnŌģ¯õĨĩˇõõodq!ú˜5?ū´=ũ•;ˇ˙ ˙ŊuŨ˙×öã˙ÚÚąįb#ŗOqI-2 zvĮwjŋXũúŊû‹Áũ˙õAŋũ.ŋū˙v߯įˇ˙ŋ÷ûÛ¯ûõUŠAõFļEtÉ}ˇI$g ˜Oĩh&64ōāī_Á˙°~ųE˙‹~ĐÚ˙ūžü‘~õũ˙ŽŊđĪĢū=ŧŅ6ÚqĻU•BjšØŪßåV:<üH *„F:J  ĩĢúŊ~áų0ļīđ—ū˙]˙íÔåŠÉĩ9ÚVrŋ7÷kŌ ÚIĒØMĩl˙랛 ›ŊRMv„0_žvŋú‘M]0’v‹‡Ū"((P’_ū˙Ē x*"˙Aģ}ŋlũǍI6ŌNÕĩcĩ˛úÚK`˜MŠM;cL-‚„č'Ŧ0’´Đ´#žų4WĢYƒ3<Ō0“$Ø@ÂhzģĶĶØˆ°BÂũ÷īÜ}-ē˙ģ×"Xķ5ũôͰǕ‚à 'aXڊ8ĶAōQ u†ĸ˜¤MŠb—Ą`„~ēM'ԘČļpĪ=;ÕÚŅ!ܘūN.ęßt#ßÕĨŋūä&˙ŽģŋķDÚŨū Ŧ`™,1ėUXéëaZb"A`ĨŽšvÚvšƗüįŖÆiœŗĻ éÅú[R|'Gëpšo˙˙ø˙ßûģüÂīß?}æ6vßO¨L$)ĻAÃA„Ôđ`„Zq ´ Á‹'čĨz”*\îlņŠ>g&Pšd gŅrÁOųw~ŧ2ú“iŋøūa/ũīßwūÖŠßíĒl5ĩūÆÃĶV„XP„DMhZiđšļ˜A‘ŠWÕ0šw§ Âa6đš.;ĩģûģˇ^īū§Ąūĩē~ŋuwąČŪ†›RÆÆĶ‡Á¨ˆˆˆdq’ Ņ“‡Â ˆPč˜gXEĪt×ļ%CbTQã‡ŅqŨú§ü˙˙´*\_˙ũížÛŊm&Fí=îļŠ:a0B"5‹5A1a…0ô 64ÛߝĻÔ>ëžĶŊw÷Ģß˙ô.6’Ģ{„ė'am;ãŪĒŪx´Â nš Ë3Å#žĶÖ^ZHNڗL-SIÛpÂwjēöˇt›Įŋūúė-{kUøIRAbŖ`Čåč5\;bÁ0B- ŗŠHd‡ËĘ' æÍ?m|oAš8{û˙õãß]ž—ë ~šūŌ˙„ Ч‘Å„‚§nSĄ„FœƒxõĐ×Ûœ0]Ÿ+{¯§ŪĮũ‡kõė?ņ˙aw™ū•4âBH„4ÁPˆĘæQÚDwâ˜ŽŌžiÉŨŋzŨ'˙­uq˙_á¯`°ôqũu†˙¯ā‡í:Ø&a€„DE¨R)•!J@ÎXLû×ũÛkß˙īũūũX?T›Åé?ß˙é{=ÚøˆŒČžhĶ!NCF­u /ƒŋŨ‚×õ°ČŽ˙˙˙ûļg{BN|4ŸÜ­nūíՊúĒw•P 6‰MĮu}ū>Ōü0ÂüQWūŋ†ÂO¸vã˙=ŋųų×D<ņĩ˙–?vNá—<'v¨v˛öĨÁHą_ļ'˙Ɏc]üūČ}›áũŋ{é0ÖFôØpÃLßjƒJôļž)ūm‚éĐõøt ˙ĄŽ˙˙÷¯Ķáģú z"„kza„+ņÅ}ŪļÜŠ2RŽ™ĸFđƒMkôzžgˇOét—˙[ūBNĢv}Ōi‚a;^)„Ūˇ-oU;Õ/˙ĶEHčĢ3¤Ļ¤Ggāšiž7ĸp˙úīM˙îīôķ§ëw˙zm×ējõĐhęŒb!Įäm‹aJ†fͰD_"yČčû]DgL ‰|ÍF™ã6IšF‹vXÎO§ÚŨ×ßīė]­úiĻęí8ãˇÚ„"Đ`ˆę]‚5Š’ŦRSĄ"('Ya“9ėž!&ã4 >Oá0ƒ0A‚ČäÖ-ü–CUJŨ7ëgĢ>̓ŪFÖa}Ÿī‘Įi¯ņ°ŨZ§ô܋Ĩ ’Îi„ãÁN[†Ō„ذ‰Ã`•ĶAũĨŨˇhąí‘Í\2y—nÃģîģ_§ļu]´ Ķö4Ͱ›=6ÛMƒôî ÂŲūĪ™Ú¯i­4]´âĶģWjåÃd¯M´Â°Ú$û¨­ˇPōī@ÛōâîŨ8wj˙ü+íąIĻ ێ›V)ÚZh0„DEĄ­‡ Õ}ЇåqōU“\Rt^6Fíļ>á ŌAÚm'ÃJ ¸ĨÃŊ?¤í:A˙˙ũ7kEØC<؈ˆzið„DDEPm s1ML†]?Ļĩ4#8Û2A'I÷Ûa ûTöõģžôũžÕi}Ûîû˙˙ßÉš„Dh8¸ˆƒ $āŲ7  ˜$ø‡oßQQÎÉ3ųˉįMBiϚwõuí÷ˆë˙÷īü9tÆÂŋø˙_˙ˇ˙C­āĘØˇ-đˆąF‘ĸ ų< 9pG×õ:ĸ=œ3†TÚiĻ}XA„!&Ä=7Ļŋ}đēúˇŋ§ú{.o~ŖVŠë×ÛĒ÷_īᨏh…´ƒŗbŲ8„v‰]&Ņŋų ŊÎÆôČE”O&‹í4ėˆˇÚvšËˇ'lãEÃņķb/Kt wõ˙ÕÆ“}üˇXßīūŋī÷í˛# oc$ ›ĢHi÷ŊnbŽD2B90‰‘ØLûDę #„\5W¤ÛíÔæķ—Ļ īôŋôë×˙ĩõ$5w{čõū*×_ūč8–QBz`ÎEô4ÛAŊ-'ßßo ÚihM5[ĩTŅ8jŌMļíT×vŸīIę÷ë×ŊũåÕžk˙ûĶļūįMī˙ßŲܤŸ1ūŲé0h˛5ŽEˆjƒ´ižŪûũ`ƒ Ú 'w5éļšķUhœ>ˇ÷VßpūÛ÷˙÷÷°ŋë¯úū—ũ9XSw˙˙č!˙ß"]† ‰Ų|ŽJĶĻßöũŌŌ˙û}‹— Ū\0]ūŋ}§¯Į˙u˙_ŋīo˙~ö×ͯ˙TÛTÍ+ļ˙˙ĶôĶAÚĒiÅdm&W*”8w3kkkÚI˙¸c_ ]´ËŊwŨ§üztŊ/­ũ¯é)=~E¯×ë~ˇßßÚĢ홤Ō6jᄗÛ8û^ū͐áza8Ø#xa4 ßģæ„̧ö=Ũi?Ã÷`ũž+ÚąŽžņ˙í§¯ˇęŋŠėãl+Ģ՟_r.=-6ÂAkđÂ` š€Ų†!b›fÛi&ØM4ˇƒV ‡ÁĄÛ÷ĸ/dĄY ĖØL!ĸnīø}ĒŨūČZŖ WĩÆ÷°÷Ē˙ŗôŋk/TŧŊUŠ´­XĐq Âm‘ÆšlR 4Øâ¸M4ęėla6-4Öė8ˆ4")¸>9¯9Ë&@ iß öž•ĻąûāāëûĩØÁä9q×^—˛Eí/í4ƅ: ‘ƐaŠŊ„ké´I‚;%e!ÂiĻ"ļ0§ö)VœrĢM',§aiĻß/;_ė?õø{r—ßCØ3Ao ŋöڑVēH›ß¨O˙ØDˆ5°ƒ@Јh0„DZ 0BaâĶjA‚ 8ų6ƒ:ɒ‡Vd;6mÚiĄĻ¨¸h¸sspé]Žš\­ŋû{w˙LēĄ°ž°‚ũú ß Ÿč}ˆŒØDDDDDDDFûĘ[%ķĖÔÎD+9AbIœhđŠgI4 ¤ĸ÷EãDíĢzA´]ۚ‡Ä-žÛûŊöŲŨ~—XtnŽŠ˙­­ũ/ĩŋÛˇŦÔ0d“Š}„Cö5MšBįĢ4oAĸá˛;lžnî‹v‹€æ‹Nčŧn4Ų7ÂNÃ'šot]ĩú ã÷ŽãjŋũˇUæąîøaB_7ƒäø:Úëũ˙ö˙š˙t­ĢTŨŨ´ží: L„…Ō g šl4ûnî“ĐqiÚ¤ˇŅ;hÜ:˙ž˙ôÛ´Ķ_"°ŋĮwáīŧôúžÔé&ũģ˙{fúæ;ĩ7vœi…°ÁB,"@nרīļ¯Mū?̜ÅŪģÆ[Ŋ}zģŊoĮ蛗õ˙!ŋžÃûÛļˇîˇJÚ_ČĮ§i1VŠĄ ØâĨ:&Ô¸Lüž1‘–äš\I ũī_˙ßŋpû˙V×ķũû߲˙˙ōņKĶÕ ŋīîūīôôũūÚL•ģc@â¤oŠV“d‡m4 "t›†„EĄ@ž¤š33(gpfE)ddL3 Ãė?ĩũˇzöž}`ŋÕ- Dth'öëņvŊô5ßūūss‹ŋũßßoēNū)Ķ Â“t &…åZ ;B"W%ÆŠíL…äL2Ĩ§{đoĮŽīC">Ŋžû#Ū=„H}ßÚ^Ëĩõũũ[{uÚŨ ūûõļÖŌl%ípÕ8h3l!Zú Ũ§kUpęĶ^ôDĄ=}]k'PwGē˙ŅģUô=ĐÛ[ßöß[NJôŸûˇđØXĢJä üDDF<¨w vŸi§đnļmũũÜuÚĄõ˙z_Üģ?ūÚŲĘŌļ.?Ná¤wēlPj9gÅm9qxw×ĩâįc™.ާá˙īē_ÁíŊĶ}ßģŊļîÖŲ—cnøØãdc§ôôāÂĻvæ{3BžŒĐ°B:˙3ŗ=5|ÔfĮŽäˆœE$0ˆč=ūßK×o:§n+÷ėũų…úG?mØv@ØŪ 0͆¨0„_-ÎŨ9‡ʲnÅ`ÁˆaâW:¯’Háš2C1‘ŋÂa0ƒ#ʙAy‚OÍheå;0ŗŅĶP@ĶA4-s­ŨŨŸZV–ģfi>ŪĪ˙g5`Âë¯ė]§gĢĐöa1„ ĻEŦZNƒB""ĶB9¤v[ąJ3*Ų@Ņ :”"ũd¤`š`ƒC˙âĶ>Íŗ0ƒ3ø‡Õ„?|RȨKƒ0œˇöȝ—žĒŲˇa8ᅆ­›v ßĶœ3ÍîÅϚĶVWv„Õâ#ėˆ†įbŲ ėĢČÉ4Aņ–žžĒ‡yą:ÛNûpķE†š§ ŅûMi†IŨ Î3` =Õŧ'h;:OÃT퍎ĸÆÅFÖÔ %A°™+TƒAĒ"ŽÚ+åZ:Š+ˆ¨&@Å85 §ËŽĄQpô[ĶOũØD75Úéúvܓ°ÂEãC“ÆírvÚp˛M8šŗēĶj"íСMĐ !´­ Á`Å81XaM8†ŧDī¨OšČ¸ēûîw@ˆ÷MËBDíũ4ôûŋī´m¨N¯Ũ×§Ão/.Ķ'käķ[mũxˆƒ1ˆŗ…„tG\DD0ƒ""4Đ0NЊčCv­ŪƒôáÕāŽߨAū÷ĒąĻŸÅ^^iīÃ]?[‡wąú{äbĻŋīŽDDuŲvœ]ģ^ņŪõÕ°ŋŦø~4úîûĨúļã]˙ÆÃ õtî+ÁŖ3Ú~ŊōK{ŨĩÚü VĩÃ˙íq×K^˙˙_Ø{ü&ĐA{ũÁ†FlīīŨbæōĖãÆ˙˘ņü/ĒÁ˙}Ū¤ę=˙ķA5ėŽ'đßî]o×ŋņ2päģ÷ŋĖŲfĪ*ķŒ†}áƒMr6ΊGõâ˙Ą÷“ˆÃûÔ0üč:˙b°ŋõûë é˙âF°U_r*ŒĮzäm<ú#Šh46âŅ7ní÷ÉĪ÷œ}u¯Ãu…YzWēŅ8˙Cø7˙ƒ{û~&@‚™f_ž‰Æ|ī°B˜Ŋ nÖB ŧp›ÚŅvÁ–+~~fo/—ÅēEÜúđ÷ĸq˙Ōôõ˙‡˙ˇ˙ĶS"‚’%ŲŲ¨†RRe!'k/ų’ŧÅ֐MtNûIKËRpÜãDĸŨ'~’ßŧ_ĐK´íƓ‡īŦį~“˙ûU믎īĖķkė_išVKŪŌ˛!ĘŒYĨi;™M„>ô‘vÃĩOQķf›đîđœ7^÷û~ߒūîŧūÛëé‡ú­˙˙ûßō5jēØTŌo´ß;5+ũ7iŦ:ío”#Fp…[;¸É:*ķ"¸Č*W“nÖŪē˙aŽŽœ‹–ëŊé?q߯Mˇũė/Ĩūa[}Ĩßūakë˙ąĮiĒl¯;9>Ģ 4Đvéņ%r…•BŽÚĸnæËEPf;;;Aϟũ5ܛš÷ŋãî¸oûu¯đËŌ Š$ŠjAāǜC‘GNc]8ļÎ?Šh.ƒOÖĪ_ۘM†jƒ‡ė!a6Ö;ŋŧ'UlA~mĖŅ‘Æ™˜ĩ‡ß/´íīäīM¸Đŋ˙˙ģ}ũļŋâæ˙mϚwÔq$ „E!@¨0š IĐJƒ‘vœqŪļ’ĻÅĩ@͆á÷z˙ōLĶ4G ĶP˜@Ўģ ņäã×Õ}7öĩûÖųDēęLO×āí´žaáÆƒXoLŽ0•é’­4Ä§¸i‹žôIB¨$Š„ƒ ! 5#rĨ÷KŪô<‰Öq𠁄ƒJBMÜZl•“Æ›ÖĶČÆhôGk}Ķ~įPŸŊ…üú{ŋŋžŨ‹ūg/ũ’Ä› ŧDIá(tĐaehVą† Âš_„""’J‘ĢL/y eÎôx•m=œ.4˜h'“ˇ.-;rwwQÛēĻ"šÚTũ˙a˙ö=t'ŋũũõp÷õÜE•ˆDDDDDfXB"Q3ŽQ%žF…ķ<&m„ÎŖ.’ ’@ Š%I$h"a$‚AöļJÜģ°ū ßč'ĶՇīå>vŠîb!‘ôPfdUCŅätgVjˆĄ{jíá˙æ-֟_˙Ŋˇ˙×^""â9N!œzĐkĒh^`īĨEŽûēĶbę¨; TIh$ǐI ’I%ZAߎmgĖ)Zô}˜$ɐĒPza"Û2`(Hû(3ėÁX aĪ0ƒ jŽ÷Xi?Ū‚÷ûģõuûîút¸k ĄdįĸqĐQÛ ÕĶ×Eۄ­tMė›öžī̓{_]ûáCI*f‚†{6i”“3q˛  !˜RdãPƒ‚DŨĩωģDÜ D/и´Âqh3†„BWū-ˇ×ĩôīmX}đŌÚŌĐlllŒÔy8á &ėÁ2âí4xŋZ}ŋū›v´Ē˙õ"ÃÅ/_ŦŽ#ˇHģ†öŒvšĻ„=í0žŒūEvf ‚aé„[Š Ē"ú“H*”7nNÚ.ōí˛XŅxí4˙ž›UM0ļ`Õ;}nqIĻÅ5ĶM};'Í~=ĒwŪJ/;ēWIũ˙zJ˙˙üŌWĒOđpŽ[°wˇwc|ØMÉĀIÍoÉÍŸm˙§§ĒŠ;H*AaÂIāĐEâH$¸Iâ"(‚âí4v˜bįŽá„-1V!œpĄ_ˇäîäĮņ„Ū—Õú˙˙²8ŋ[tL'ū[˜ûŧ3 8õ={AÔ>ėž~™(žīˇN‰ÅCxžôĶŋØ˙OĶtë×ZģN•āˆ| ŠDtI¤N–ki(RËAˆƒB"#,Ĩü^¸N<"wúŨwēŽŋé+ ô8¯øĶņëÆ××z{éĩxAŨėzęëŽ㏯¯‹û˙˙ūŪûíƒB@Њb.""#$ŅÚĖd˛gfŦ;ĄšįũwŊá˙Û_¤ŧēŋ×˙_ģŌđü7īí?ū=īúOģƒĖŌ]FUē¯Õ2÷ũ˙â!‚4ÍÂ"Hȁ=3°RMl‰šiŠ?ō4ęîŋ`×bą˙^Į ÷_ķŠžū˙ēi´ãPnąņWĢZØõ˙°û4>ų70Ն‘@ŋ÷˙QâoÂI•÷VŦĶĘpģĶ„÷^mē˙ŧŅ|¸úZũëņtŅ Då˙û×Ã֛÷[}†Š„­ēĄDĮÅīũĄëūB:âĄĨ{…vƒîŌ’Ú.˙Š˙ūßOūęzĢķ _ĩŗnû=jšûŲLåPūfÖŋ˙ īzãáöß@ŋĐ@čŊ ŋūŋŋ~Y>ĸ¸jí(ËPĐwiJ¤pÎ ôŸėŅU˙j ˙úÚũûûv~īųIŠUl*Ēl/@Áöū‡×Ũxn×´ŋđ­Đ_Õô˙ŋ˙öÉ,d—¸ô?ã„ÕLĖҘ4õõĶũWs›Ÿęŋé:ŌīļÖ;͏ĒĩŠ^˜Ļ„ôIūģŋî—īˇ×Į¯Ĩ~úŋí×{ˆ”ųŲŠœGŲŒ¤h>žwHؐy˙_ ƒUDĮ{ûëĒ…ûũûŨé´°¯˙ļĮ„ksĀA Â#ęhD0‡˙…˙ׇނ(p‡z7ˇ™îļžŲęģ#—˙}ž›=}¯ļfŗ#XžI˛ĄĻģƒ×åOĻfÉō!•‘rVĘš#Ąœ3ĖÛ6a0™8ÂdH!œ`e $’0gØI-ĶŊ×_ģCTãNÕwãbpđMÕ‡L%éÆ""" kĒ_ûęrúīÖũÕᅴâ÷đՆļšv˙ļÎŅ!"Đô…´Iî —1ØS]„8„ =Ŗ†ƒ 33 “ˆ˜@čAĒi§qhjÂdá"ī3Ô$/pôۘM4ÛļE wK %¯†šAü8†ėC˙ūûūõ˙éRS ũ[ Ll_ĒzhTlR§Ŋ…ŗ\AhąëļčwaÚC Š™0˜L! ôCÛ°¨¸ áĸã ŨÛŨ‘ŪMŌ'mŋA§ Ŋw¤’JITPPŠ‚´‹Ŋ„Đƃē *#hCȝeUûI?ũ%Ĩím5˛ågŊo~č&œ^Â{‹M0œÎ˜(W‡L&ÅvŊûCO¸qŦˇj;ûa<ąÎ=īI°É‹—›Ņ;íí<&ŠŲ/ŋvmĀĪ‚ĒAšĸąnÉe§ĄmĪ9ŗģKîôŪûí{]ģĐ|ķÛ§úiúī˛8˜¸‹%DDEŠ+ßÂ`ˆ˙G%§ÂĩU|q°ļ9jNhDDDDF› Á~ûųœdŽ`‰Ä$åu>ĪfqĻGĖĖ'—đjMØdŪí7ļžûÕõĶ}7ø˙ãú^ítūŖĻǎTĸ"ÁÉ)‹AųĄ Ŋ+`„DúMØCFŠ¸ˆˆ‹_îš:M4īMėá›$˙NJWD˛+ēŊn4í4ûūÛøīĢ˙ūúß×î¸×~Ũŋdq|q;$Č5xˆŽ)ЈĸįaŽ–=úfqĢŗ„…’5¸´›˙wū\> ļ ôëjž>ŋ˙kôŌ˙˙ŋé×ũ˙܌^č}Ë)nv(0ƒ%“_kN,R­îÅ™öžŦŽ ‡léŨ÷Ũßϟwą°tũ÷õ­Ã˙×˙øy ũúõđŨą˙ūąV­dÄo\Ų mŌ­îĶ Lˆ@OžĶKîĐzK˙ĸ|]˙°˙˙ū˙Ø×˙Ī„îöîũōŨ:;W‘ŋj‚I$´ĄĘy4 Kú„ė0žúMËŧ­ŋŋõß˙ų>ˇīūôÃūß˙¯úEįũô]îŧ6Ũŋz †ƒ¯ėXDŨoÂlC´NNīoõ†ūŋĨ]Ōá÷^„7˙_†õ˙ßõüę’÷z]&˙Á÷žÍŧĒŗ°Ų*Ûø¤æĪq wdá˛tg8`ũĒ˙Ũēũíŋģ­¸˙˙pí˙ũ˙ëŸĮ˙_K˙ŗcĶAĻ@ōPų''—úO Ū"$Ī+О–áīAßt› ;ņŽŋ$Å˙žŋũ‡˙Ûė?úæ×ũƒö’õ¯˙˙ūžmö4[íÚo ŨũČȟ6hf2*dR-üˆÜAQ? ŋû˙ļŋ¯Ö@Ī˙˙ßîē˙įMÛîûöéTįˇ[Ÿ˙}ĶûNE¯÷žļž›ôŌa­ wÜk÷HדÅ9Ūƒ › †ēw`ĄNÖ taīŊ=W¨7˙ũ¤˙û¯ú ˙û§ öŸ˙Ú í}=°’m…m+ĩ†œ0šiČq1I§k­ŦPMŊqiĮđŌOũ‹ĸYzgÚa|Ķ5nĶjž\=líb;ƒ§Iīģ_ëę\PzūÔ§ßūÛôģ\?˙†c†šũ4đ”iŊ&ŦR!ÆÅiE„iÕ´šl_ÅĖ:¸qBË$ļãįd?ķ™,ĖŲ ĖĖ8ΌœĶ<4‚ AÅĄ‡lãj&ųžToíjŒ:J’˙ŋÄÕˇ¯ūÅ_ūũ~ūũūząo &ƒ ¸$ÖĶMŠ -ß l•Ļ™ÜŒœ0ɐ’ ”4aēiúĶĸ$#Lá“ŋûA ˜S†ƒUTj‡n‹†Čī'Û˙íŽô[­'_"š">Ę"Vŋ˙i7ŋ˙™Âŋí(qZKžßt´î+4ĶuM4! ĐâžD„0ƒB"(ˆˆ`× ܈´Ęu’Ĩ™O"#ņ˛Aš‚i„ĐŨڋņnú&;üeĮ ´é?_é~+Ĩô*Ož2X>¯R„]š0™ļ Ô’I$’īkũ?Ģtí`•ēŪļ’ÚÄDa˜â!‚Pâ!ĄÔg ˆ.2qLÚi“Ŋ4×@ķšz!Q’ĻÛ˛WiۃģĸyļŠÚēŽģ/ŽF]k^tˆf˜M2Ni“!sH0Ģ ;âėã0E˙ū’JH%ũ¯jšqö ‘ÂĢĩAą ×†ã´:pkσBŅ1ØCâÚDĮØ@åŲ+hˇ\ Ú&îœ8oëwwq˙í˙~"¨jš%Î3ÆN<“f áJa8=͚a˜@ÂĻńĄÃģƒ#ļéÚ_˙mŪúJD †‡´í! ‡„iĩ´ņØ2?˙3âač“Ų' ›WdōÔ čZ6îø?ŧ Ûôí˙˙éß×˙ōĶD@o0GI˜M2qQ´@ÍvqâqĻĄ˜Ķ`íSFēvŌĻ+ļí´û._˙ŲɆ°h5MÜ8… `H);&?MDa2l>Ä' x č&Ũ÷’{ģm+rOWÚzģ§˙īé¯[^׎•oÛú`ŨĒ.ÚvƉÃ3iáh0‡H›šya4î4‹ļāÔŧˋ_ĩŋ˛y§ûOĩcT 'ƒHW*ˆˆˆˆ‰ž#A‹Žĩ’ÛiņîÅ+@ŸßöƒuoßĩûöŪ>×{Uß˙ßÚMĶÃ#Š›ƒ­ĶhŅ ´„zú&=ŧ0PŸī ũņKkĢA7ĩãũ;Ķtša6Âiĩ=„ĐoÄE9PÄĮl!+Š&õēõūģūޟõÛ˙^˙_ū‡ũßÍĨÛÕęŗē TŪžˇØ$yŋJŨ_~Ō[ 'Õ]­Gޚëü&›pú °„C)h!#°¨*ū÷žX]úĶß{˙¯˙˙|Đ'ī˙ū˙ųõû}:Aē­.Įũ§ßĒoúÅ˙ĮāûŽĩŋũ;îÕhzäLČ1•ŗ:™CwŸ°m~ŋÆŋk˙˙Ût‰˙ī~ũoĩm>¯ūŋŊīüw~˙ë˙ßi{úeī$_^˙øˆũeC5ĨdTCÃ2ˇØ\!]˙˙—WŨ/ņ˙|PO˙˙ëúÚé˙ß÷˙w˙âév¯ĻGû_Ö6ū×ô+˙˙ŌâĒwQĸũ;=§÷Ŋŋ—_˙˙ÛK~_úü>ŋūõĩM;cv˜¯˙ī˙ØįËÕbŋč!_ŧą˙đĘ ŋ˙¨­Ŗĩ‹íÂi†0‚M'ė‘õáģßûß÷ũG˙˙m&ûKVÎIÛĶĩĄ÷˙īI{¸":ū…ŋũ˙Ŋ}/e¸Xdöœžrj§A2^ŨĻŊüøC§fā˙ŨŋOŊö—úŋÚM^ģiæ‹Fļœ7÷h˙ŽūŨ˙ ÷—§Ũ˙íŋ˙õ˙˙9\œ'X‹žĐoõ_7é„0%ęrw_Ī÷kųũÍ;öΌ”„.­lÍZvˇÚ„8Ս?paˆ¯ũrÄ˙xoũ'ęũĩ×ÎŗŨzī÷÷ūšØš%¤Ą7ō¤ŋNåFgž@ŗŅæHķ‘×pč“Ī W÷­Ã=m„Ũo[W_†ši§!ųÅĻ„Øļ+Ø´ŲÃÚ &ƒB?]˙‡k§¯ÛīÜÂīlÍuūaZŲû´ĶĩM:Đeė˛Ŧjœ&žƒūČÖNÉҧæŒ Š Ą ė g˜Aœz„"!1}âhė.Â˙l0TÂà „Â ØKV)4ûéļØŲŌiŲäžCBЈŽëŲ„ŋ˙A×˙öö˙3_§jļĢŽëŨĒp„ &ÚiÄ<§ˇw˜}A=Âf á‘)đ҇“ŒĐP `žáK4ÂkJ‹L _97m?Mđļ.IŦPL5L]¯†*<0NŌ3ŧZ4M43XBĶDDīõŋũķsæ>ÖūÛŗ5öØMîøŌÆš°Â lNũŦ4ÚiÃĶl8w§zŪHMl‚g؁spPŸĶ„ĻÆ¸DŨģĨÉÚ×ĸnŨ™00M‚´H}Û_ã˛+ļ6†B-`…„T!Ŗ3hDCˆˆŧ4“uÕŗ˙}‚Úújœ;ûl&Ã@øän⛁ģM… ÕĻÅ;4"" _í´ī¨č#[Éû„ēχĒū‰;‹ļũĐmŨtõīč'dėi„ä*…/0ƒ~Ŗ¯˜ČcØMˆˆˆ`„Fxpâ>¤B(§a0šĻÅ_h4ÛOáÅEĸ&'všØLđTM DF§9Ŋ˙ũáPxDN$_—iϚEÛ{i„öĢA°ønM÷ÖíĐkÛŪ>ŨIö]šnŲ#Ōéˇ]¨ÂxˆˆŨZÕU۝íFūíļ0ģ˛7TL ĶBĒD0ĻЈŠ Ũ§ÍKōLãoIŦ„NôÛģI6É[“ģĩū˙[A÷_ĒoŽÆ?ûIŌ †ēëüĐ% ü0P•É"ĐvPéĸOÂ:ύDIĶ_°„DB"""qøį3ĢΔAé„ĶOIyޟũ¯ļĐw­éØMjۋ]?돧ĻŋÛ˙N˙ ÷áŠS%6ÄDCDI0B-ƒ(ŨQĨg`ü  œĩŧ ĐŌDíĮčŧzAæįũS¯úÛûŦS_UĮõ`åŸŨīWOũŲOŅ;øe(ƒÉZ;Ք"Á_YøˇiĄģöĄá6ÉÆÖ›ņWoÖÚĮ˙ŽúÅ˙oŋmrpŒ=×§[."˙ÔW­w.â Š Ã‡ėržL*vDŨíž‹ŧ¸ŋģŲūÛīÚŋ˙ÛŌēæßŽ’Ķė%„Ŋ^+ŋîLOē_MäÜZų‡oXaa4Ņ1čģáč:'wî›H>ģôßđ˙ą[Ō/]wĸ1×úæīV+Eķ˙ī,o˙´šUûŪdėČ6v/Ļ]ō$ōˈ~kÂWēWOO¯ŋž;vŧũ‚ß˙ĒE÷ūÕkĮIO§÷˙Žŋ÷í´Ü˙ˇ•Ē“ëOæqķ,‹Ëxz}ׯëúޝīۏa˙)ûöŋ˙]Ēmu3_Ļ˙i}ųŋīI8‡jāžv¯}]ũŦ‡™.°ž‰Žķ$ˆˇ+‚p˙ļą¯ũģ˙˙n]I˙“ëÛö“¯ūŨ.—ú~Фˇũ¯ĨÚûfj0ƒj0é÷_ū%^āšfČāMú™ í\v7'gc]˙ aõņ˙ņõ˙ˇY ˙ĸ €ęöētžė$š`“A(š 7w*ļ’kŲũū)0ąilŊV:,tøŽįbҟ„ČLŽ‚Ķ÷WutÁ3ēMڇƒƒQ˙˙‘]ũ{~īø{˛ ĐĒ„^¨eXl 2+¸0›õ!ܘM6­+ĶļĻ„"!éĻŠ|Ĩå&˜Ačj­rqŨĻŋžũđە‡í†ķkæ×˙íŪ{9×NšM­‘Į &ĐM0í áĸŽXü0 ƒĻÆÚHaQĻB#â'hJwD‘Šķ’!ō¨Âdđ"˙JÉŊfÆíSīm|žvĩč5⟆Û˙W˙˙oģũ?="kEāJDņešq Ĩ@EĶ11Ik0fÆN)ös52dƒ‹ōq ƒá—3d<ÉwÚiÃRų§Œ Ū/ë˙ŽõWáz"3Ėa(Z§đƒ%‘ƒ4ŗŅC&rC30š ‰cAÃBīAĄzha&7ˆhށūztŪĪwm˜}ą{ Đ`ˆ\aē aš N¸0„X}Ã&ūŸđÖũíá۟öē|vžnôŨ˙÷§ŨZ“‰üŨk5 * &ĻßŨØ!iĻ “ŖÂˆBäI‡¯ŧ{  ZmŌč6^7dŦZÚˇØM5‘Gnl{\ք0†ÔDI´g$—īMøØĨTö5c׸ũõíŌđßĐž˙õ“}…ö˜ŗBOôŅ]ēią†ģnÉ[vNáŲ'ˋ† Ƌėģîí2cš;ۜ5´˜ĢÃNÛ$;PÂdp„YĨj@™Ęę¤RĖėLĘü+߆Žũ‘Åīixw˙}¯ëöŦ?§ū¯ēEį×újltÛ8ÍÔ +aŨŅ8pîkrj žHvˍmm;Ķđƒ¤ÜģUW_ģõAęü âĸš Đ`„4Đ2ƒ<4Â"Ž žøû_°xû°˙čĖJũäG\SũũŊô’ŋũ7i_pËē´öīZh¸¤ô‚´ ŨÚkw˙}ēw{§^›˙ Ūũī æëo‡۝…įa/Ô•yuXuíė?ë ˙ßÉšZ=¯íû[A´ëí=?ōáū×Z'zi]ūŸjĮ÷˙­|t×ë˙ņZÄDaÄ8hģūNëŦû4<7ũáŋ¯ËЇũLzúį÷ũŽEwāŠxûZé=7ŽŊ7ũé}ãŽŋūûü~5¯˙åSžAkķ0…!VáĪũáūƒ¨?īĶ˙¯¸o_[ûļN­0ČãA÷Ŧ&ÚãŋMûû׍Zų@›ũ˙˛Į[ę˙án“ŅOŸnJ„xŒōqLȋg}2!2ŸĪkávhŽAŌ˙ė˙f¸7z˜¯?ûŊi|Â˙ķĨVˇ’l[ąjЈíÖâp/¯û×U|=ũÔ¸ž˙¯õú$Ä˙ķīōlTČ'äÃSf|\Šāāƒl`ĄF…A›3čŧC"ĻCDC‘~`!á ÉKˆdⓌĒ" —eá ´Ųą„­'všlZŨYíęß1ßĒßë˜_§gõâ@Úb“vi’´{õ TWũaúoc"—ū6×ĸī˙ëß˙áũé5Ų’ŧī4ĐmíÃÂ蝆üŲMĻ“a Úa´‹ @ńA™„>!ā]0„YāģîÆ‹î;Ķ Ļi8Øļ %ĨaJ°ˆ4Đ̏oéĻŲæ6NVGiĻqĸvDD{tNëũÖēũ¯ô:¤˙ũú_÷á˙ũ'đL•4ŨüžC˛cŅ(Éä2Ⓡ”B'ÁƒģI"na—ÍaĸOØ$OdŪÜŧĸNŅ8i‚$íØ&C;Ņ;~-\*dQØAû†éĻ6ŽŖˆV¯Pm„ÚŽĶcĻ*(0…”ēúëŽLiõķ'˙_˙ĶûęĻ=Öŋ˙§ķ´"1÷nŲ[ßMô„§Ąiēmēũ¨#_Ũŧ<-ƛpaK< ôkTÛ'Đa7Wņ FxˆˆqaG„FhCGĒhXF†"ž~JŦĸí:ûŽÁÛ˙ķëũ­×˙gĢ˙Ö÷Tú īīKZŊuíY-ˇU{ĶĶŨĶŲÂĐ´ûucãN÷í[]æ?ÄDDDqˆ`ƒ)¸•¨kۚîú^Ū×vöũ;¤Ö˙[JÛVØ_Õ4×÷ʐĨÂ۝ͺ×w Ú_­7‹ļęŸúôŲūNËËšØÜq‘hÛ"đž`Í0ƒ…'tëûõÔæ†ãũ]ûŨ7Ŋ¯Ú É;˙Ū×N×´ÂyŲi‰-\ĸ!a°…nįVĸ"hDZšÂ5!iŠŠhXL ĪaˆŒ(B3lha†ƒIéo‘o LŌ4eŅÄu% Ļ™Ëv†­Ļxjœ'×WSŅVf%m-Sáž}ŋö°ˇg´ÛlüĨé÷á¸OĒfÅúęĮÅŽ§sÎÁûZ¨‹ œ0˜B#Bĸ""!>ĢĘxĐ!0YA„a “ qqލŧqåÃÅÕ°¨8ƒAąL\SmŊŨZÆÅ6qá0š 4í$Ն\•3u[Ŋ0ß} jČâ›w‘‘ōsģ0s-UÃËÂō¯ąBĄž?îėÁ„Ô!‚ Ë{ĸpÃ'vO Žéåæ›Dîîū“ôÚ 4í4›M6 PnaĶÆ­´>=Å1PĶ §„Ķ ˆˆ `Ë ~áÃē¨z§ŧˆÂ Įū-ŅwĶDãPƒč'ĻŨÎ?§öƒŊtôķŠ âdœ0ōú"ÉāE â1L ɇĐa†AĒ80™b˜ŊÚtĶi‘^- 'úkÕáĖ ņl7žÔ“ˇ§Eö]ēßŊëvĩkûõ¸ˆ¸i""a(J""3X!>˜A–P ĄpŖ˜7"˜LŸEķ¯iÅÍa¸“cØã;ØÖ“ĨˇmĶ˙V?v\Mô¯ŋЧB"ž""-(D(Ât=’(…(8J8‰‘(‰‰˜f´H˛Aįs‰4ë͌ØĪ‹B ņ>0Á"8¤NÎdŲWĢÛWŪžŨ¯õí˙ŲqéEČ˜/— L!!„ğŗAO aPƒ4†\ÍŗC CBpa3d8~‰ģj¸ ØPžŪȃLų“LŠåYH3%1’C%wõÁū¸Ģ"˙ī÷>ŌŊeBˆa pfö‰@o/¨´]îkh6.kČŨ„NvEw˛,A4Ņ8ĸpâØ áđî‰ãEį—më‹Â`ŨØ& ĸ0fĄ2Sėį§M:×áú—{ׯôN>ūãÖЌE‚anA[/ôßã/Mĸņ˛ył|8f´@ø5h“´N5h á“ÆĶ´ĶétúN¯ČƒĻĻô’wa î¤kÛ÷g'Ãu×ū‚}-x>ג˜ÉP„NÆleTũëH0ēé7OtíxÕû  Ũ:MvîũŽž¯Ķw\Ę) Ėé=ÚĩųŸ˙žH/Ą!ŋ˙úßŋ|Â_­Ŋ„õēnŋĐŋ{ƒ\{zkéīÉÅã÷˙SĄŅS–rĶA í‹ß›Wë‡˙ß×˙ÖîĪNž°Ķēgį2FEĻú˙ėĐFČGQĨL’Ēí×CRng ˙<2;Ų‡˙ĩ}™§„˜gŅeĨ[(<(D+’OMEܐˆÚ4'œÍY*ÉČú3Ξ3ÄxU"˛Ĩúv§'ÖīöūĪ]¯ØV*i5՜­„ÙŒČJÜ59}ëĻû‚ƒļm šĪÁŋ>kĢR$'t#ûč÷ęēöÃ=0œCgŒāaķd ‚š š"8ĶÁ0”ĀgF``Ąų ¤ Ârn pđƒÁ Ūm” ũwļ›™örûé5O^lCcŠÚ…ŽĶgQīžß˙Zú'č|}Ī÷3oß˙¯Û[û1ÚlV œËæ‰ÛöŅ;˸d˙r)‘qĄT˙6â♄h›ļ"Pė"w§D­é†ƒ4zvÅEÃM9¤a…L'ÃM8aŲÃĶBÔ]\>ô¤lG_žö}j‚În[ųI:õ÷í$÷ßǝv_lūųã%ņ ÂaĨ %ÂmĐėž:zœ82Бŗ‰[Ũ†šM’ļ‹Č5žsc ›ĐAš+@Ũ6…Oĸņŧ(´^rJ“#á4™áŠiPė1 `ļ CB",¨ a]čäHTÎîrLĖ34u3C0Jä4f ‡‘P ōũž¸MēÃõa›W}ĩ}*ÃH ÚĨŗ“ Ûa˜=v.Âqąqj­¤Ö!ŊƒMVŸi§áûU¸Ô'õmŨ…´ûû¤íˇi­-č}'Ē—Ô›Âw ŖLAĄg>¸ˆˆ‰ų!áÉLgŖĐjfÎ"r>`ƒ%BŸ ƒâÁf +yļ4ėØ@č¸`ËãMƒ Zi„Ķa§SpĖhh0N qLÚucc4ŲX”= Ķg(!8ãûīØ=ūáũūîĒëMí0Ÿ„Áxa˜^Ö5MŠMŠÜDsĩžĶA„ĶMĶOīģŊ÷Ų;˛áSŋZ^?Ä×ū"(AR Ņv͏ \s=Z˙˙îĢÕŽ˙˙1ûz¤î—¯Ú !ũ¤Ø$šQéĻĐ@í$ĶVĶOÖĶcî˜ôՄū92¯8fŒŽÂjĻ­ßûĸãģ˙W.4Ū˙˙éĨčˇ8ļ˛*FŦų¤@ĸĄ.íĨA¨ģĶīN‹Ŋ 7YNËū›ßũoú{ÛÚ UVĪ6Ö­ÛAĄŋĐ{đâ˜Ļ6ēÃėR{îĶkAēd­ ĸÚĻĄetu(0šh{všiÚ°Duv˜?ˇļÛ×Ŋ?˙ũũäKOÚū‡5ŗ x2’ŲÃC‡— ú˙}˙˙˙˙MūüÚĐ´ã3'ώahũ']'Û 1(*ĸ& ‰h4CD(‡Ü9īNyąB}žūģM4 6CöĶbãcOa4´ČŖ‡Tî (â")Úhžb!„"""6ĸ+ˆ‰ģbáŸŲ+hŧģøm'ũĩwũŪß~īwßuŋ˙_DâÉ9Ú{ Áø7V*™…_Ũū›#RtAy(ÆdķSEڗ• {ėm¤˜A i ÕíØ†ƒdŽĶ Ļ„C Ą ™0[ƒJ"/-˰ŽÄŨV–“˛}WĻĒēē˙ĻÛ×k˙˙ī˙˙÷˙múŋdãM´×.Û´îī5…Ĩũ˙]ĐĐķ{ĐDâpšy>'”^$¨2Âa%H.‡PĶ pĮ ;?ˆh0A“t"!ĸD""""&å )ÜŧEUĻëĮúuŨũ˙¯ßkÚė}˙íŽßüĪÕũúzw÷ÛwutĖ I“˙ū˙Ŋ[ūõAˇméŌvļŦZū_ĻĒà  „DDDE ÅC-/ī˙­G˙/ãXö;ī{Žúŋū}]ˇĮģū×ŋõū^oë×ëĢWķĄ/¯˙U÷÷ }äZ~ ! æá¨0¨ˇqû˙°ūŸĩúõž#˙á˙_Å[ųmÛkĨ˙˙˙]ûķŽFöé˙ö˙īīÁ:íßû./{"ŅūÃéũĄ§aYØēhČ 3ŋjēāõ×LŋCę_Í0OķäŦ?îūŋĨÕŋĩž×˙ŋŋ˙īzhCŋ˙˙˙ŌŨ{ö _ûĨûü7û}Œ•!;3쌃ˆ†'°˜&ŊēßõĐ˙Éš…ZT ŋŌ [˙ūU1ũė0ģĻĮ^˙ûīo˙‹ˇ˙˙˙˙á…÷U˙ũáĩüöŌÎĖãĩ.)ãŗ2´Âgt4Í0¨3ŗËĖ˙_Áĩ˙¯Ö†+IëĐN×KU×ūŌŽâĒ\*ņŋöŋ˙ũûû˙ī÷üSū˙|õ7‡īФ ō¯L=…UÔŦ‡Įß\ũß}úžáūŸô͏íbšA´ÂĄw¸ûÆöˇŨŊīī~˙ũ/ū÷˙˙ũ_×WũíÎÄ˙ØL;ē3ÛkáSūŸûûëõW_­)íúí-6­jÂtÂØA…ŠōĮû˙˙˙˙ū˙īī˙×ëũ됛éÚVĒÚžjĢžû‡ +°Šo@÷ēķu:¯Ųž¤‡öÛŲů§ëę›#ØXĩWbæ„-īĐ2ķA.ũû_˙ũũī˙ŋī˙˙üĮ{í˙ũobJ÷ī}ĨYOŗ~Ģßa;^ÂØ]RŗÎ˜ƒí4Nûᄐ8¨ö˜* ލõáĢŊũ˙˙Ū÷ßašĸ˙ü˙īßki'ßįc‘á’=^FŅžŧ™„âI˛c1é4ã‹TĶc=ƒ´ėt4ëƒģ …(a27¨ˆˆ5§˙č“ë˙`’Õŋ˙Ö˙˙īūÕ˙öÖ˙Ճ~;l/ä 9Ÿ2‚"Îi "uG˙ŧé8ãĐÎGã4šOŽWļEãÅęš'a†¨8b“ZdvĸVŋjÅ(i´ÄĶ~*ƒ(ÔŽ{ë„˙렄ĢŸŋ˙ß˙oŋ~˙ĩˇôîÕ?žŪaĶ[Ÿä &ˆåĻi„ĶA„ãû_ÖĄz}ϘO͚i ķ~äi ĶmåĀlŅ„ũ†ŽƒB&˜ˆˆƒ5IÁĻƒ@¤„2v‡j|RúüÍzĨëõǝŋöŋ÷_×~¯}Ēw{iZÚąOu÷šÅ^F‘ŠĶ>=‹N[†‹‡{'Ųąč_ûAĻMHß÷}§aņūƒī¸ˆˆ‹B"ƒÄDDGTĮ[ ˙KÖŋhąČ—¤ŋūčäę˙ŋl5oÛXwÃģn=§ÜA‚#ī§ęB$Ņ)ôų(g é8a;ŋúͲ\Ô&ûęŊ­=Ū>äģôŨũŪ1AŠŖŗÆˇúëÚȊĶ]Ņíĩī¯ûT8ŽôĶMz|5NĶT…‚kû(WīŊ§}ëię˙įc˛ˆÎĐķpPŸŦZ× Ãģ‡ŋdōßū˙đƒBzŌ`˜]SMa0ƒƒåBŌĩOúuVũ'V(&ílRĩø;B/DDDoČIA4í=šo÷Û¯ūD3ÎĘu•<&Z\&"íū´×íoī-˙´ũũŠ÷†„•–…öÂū-5TiŠb–!kĨÅGiV ‰ĶģC2†Âqü¤˙~›ūûû˙y Âišr2sÁA뮚uŋL•Âū“˙MũŪŪū!=¯!ĻŽ­mM3Đģt 4í1Q^ĶaB",žÖVēWv‰ŽíÕ˙}˙˙ûÔCPæEÛkäⅨi/z×z˙ö÷˙_Án˙-Ár2ˆÖĐwĄdņˆˆ ƒB";Pšv „B#‹zvAßû{˙ũũnīēļœ›ēo~ƒÉæl}o×.ī˙ũÖŋQW_ééš9wņwĶ „hič:&íÛJöģ÷ūũũžîÔŧˇ.f Žū—MĢũīZOõûūēŽ˙­ëįbŊŪ öũ“ŖĮÃzÅõzwũů˙\¸ŋŨũˇIđŪûv˙ģĶ~õūíë­M˙ÉšÎ˙˙Ûæ{?6*ō$RX_¤˙O‹˙Ø-˙íĨt×˙i˙û÷îÖ˙ūŊ}ūŧĒū†ū˛ļ—}ßiČ$AÆČ)™3‚õēƒ•!ū¯~Õw™ô7üVú§˙đÖÛößöG^˙]z˙˙¯^ēūE`Ÿ÷O‰1 ĖŲPĶ<*vÅ ûŦČ“bũR¤ŋčG¯Į߯ãûũūĪoũŨÛˇ˙×˙˙ÃŊzĒõ‰T^t‚ôD4mĸí˛Q_vą-ÍŲŽ"kŌ_Xė†ũû‡K˙˙÷˙ĄŪīŊÁĮ˙ūëũl‘†õMß ¸Dh>n 8Õ-íƒÖäáûc™É$iŧėTÕ=Ö?Ŧ/é˙ųšÛ~ũú˙˙˙ė˙odmīũuĻ÷A×Ō"é5OÍ-W— ģ{oģÛŊ†É4͊'kĢ_iHCŽ]J]é.Ģõ͎ūû׎ž˙ûßÃŋ1ßôŸ¯ũŲËÛZwŦė…“ä=5_Omåä‡Ízu˙o}ˇíÂkî “ŠNöˇI¨Šz洟ūķ?ûūeĘm‡ũë߯jšWļ—ū¯­¯nží˙a45Š`žąRTČ8&/*‚ëĻ´z'¯zŋ¯ßûpú-à „ˆkĶūŋ]ŗĶa?°ļéWŊėôÚÚÛílã ąVŠĻÚŨ'zwm%}Ϛ˜xĻĻųYĖ„ddĨōŸĶ]8z ÖĶŋõę—˙˙ĮüĮūĶø} ąųŦP™=š÷˙×ON+_A„˙ũĻ›œz°ÕŠ‹6ÃÆŠ!„ÚtáVĄ˜NÖ(&¸°šōR@͙­™å9”GŒ˜gŒ gŒ'ĒϚĒOĒv¨ģĄŌžé{˙×ú_ø{ąp~äŨUįklų”3Ė‹D°Í A’¸ųæ 4 ""ÂAũÃ=&GI Á5Ob˜Q„ëEöģÃ͊NØĻ™öK4pÂÃL&!ģN֟ią´Ũâ$‹5‰šC%Ę4΃Ã6Đ`šŸâM‹íS[ÕëDãfŪč”'ôē|uõĢ_ûKuģwm„;yØB€áO6A3qæf @вL"abŅcôĪ™‚NAųž•XÂÅÛ_Za0^B‚nÜ>îĄ6‰ 4""`„YDYÄDE„"}˛A…ŗJĒy‚Âl•´;M7tG-ܕˇvPđīVũ]uh/Jūģõ_ÂāĢąū¤<Œˆ~ûļ`Ɍų¨TŨ†œZ…VF˙pƒA—2áÅŊąĻj¤X@â""-ĢC ´Ã`„"ÁŽąL8pÄ̞;nč'Ŧ"CļIȐé°áÚ|CģūénÚõ×˙ßåÅôšÂ˙˙fĪ0ĶūÍ­ô˜€ƒŗâˡ ]ÛbÃ&?›3[aģģËį‹Xmē“PšDDtĸB""#Éã“ÍmĒðˇĻŨ¨AÜ“ģŪū/î“uÖē×Z÷ÔuÕ(Kë%–HÍĨęš˙¯}úoŽōīļėŨžīŽ.Éį@`„EŠO@Ū“ŋîŨ:ģĩAÚ{_÷Ûé˙ũ2ã§×˙aë. pĩƑ'ūid™É酆ēk˙ūG?°{íÛ}öí¯ŨÅßm‡}ï0Œ”ŸÃęŨô߸öÚíõŨ˙ŋŠũÂŋ˙Ĩ‡„¨Gũô¯āšičiĶĮ˙üZûÉÃzEĮ÷ßŊŨļ÷ū!¯éŌ"OÕŪŋûŨ=öŋĮßūt‚˙ū?˙~Ũô—ŌzĮŦ˛CīéũéÚéē˙ũņ~Ûˇ`ƒŨΊî\!nā†^vF õ˙˙ēĮîÉâûŊđ¯ûû_ī÷†Äu¯ū‘vŲ(ķEĨčß˙ēũ~ŋūžŋ`īŪßļņúxÂ:k‚õ×ëũũAÕü!ú˙I˙ūûÛîŸ9‡ŋŗëĶU¯ĻéŊ'zŨ˙˙_úũ^Šq˙ûēÔ0ßđŪ‹īÛģVÖHåė0ƒ/HûåÕulfĢ˙ũ?ßģßé}÷šæĪWlÜ>ė.Kގ¤ē˙Zęl}VũõĒŽžŨ?ŋø?˙ŗQĶS!Iéīßū÷~ÖˇO˙×īũŸŸˇŨ[Nųá„ĶMŒ âĐm×_Įīzõ¯×÷¯ß ~ŋĩí˙ũ~ųߓáˇČlÎŧ•ŖĻ@°Ŋ˙ũ}7æ}ö_ūí~Öí†ŋĩa‚QvļÅ+AĻ™A„)ôŪû÷ĻĢũwúްŊUJAtŒÂũŋęm?ŊķBrĒa0nÜôDŅėˆ^i›0˜LĐCîODs`Ūŋm÷okÚ÷~à šqwĻ›§wŌĻÅ1h6)ŠdWąVÁņ!ĄI~˙‡Æ×úļŖũcūãÁt–ŋWU߯ŋÖļ‡éöÔķ3ÎI ÉÚ~;bS´Ķ[j­WÚ^~M5N…m'ŗNØĶMÂi„áŞ;l4Ŧ+0 0ƒBfs|DF?ūöäQßmwąõųBKKhœuDī­V ūëúé}⮂ßģNî_t hģa÷ŨûģI;M>î)cĻ4ûa[M_ƒÉâi6*˜ `•Iļ‡˙°Ãyčīˇw:ĸ;īđCŋfp]BKë÷ꊏĨŌüĮõũvÛßŊíŪáŊēw$Ŗ܊; ÂRŨÃXJȈˆˆeˆˆĢL.˙púM˙øģ˙„F?ĒJ‚C_ĒŅõūŋ¯Ĩëëŋ“ŖwîßgšˇîÛžŪÜsŗWôœ}4ĖWĘt!„""""į ü1ũ˙æ7ŧŨ÷Ĩ÷õ§3ôíõÖÖÖ˙ßĸc=™Ú }ßo˙īwßr šz ba B"Æv(ž—ßŊ˙ûø{úüU÷ۚęŠö0ēV*8ĢUũ/L) q×īMõģn˙wŠÅFeŸf~u3„q„ÂŲrąaåK;Ą¤Úú™ß§m×˙˙÷Ûæ}܇ƃOL'wƚß•lZakķŽšĻšū˙_˙îūŌbÂhY•BáEĐØ‘F™ÁŽÅZ`œ>(aS4Â!-Õ-Ņí?é´ŲŨąiÁ„á„ØÚŨ‘žgE „É=}vĒi'ĻĒŋ×˙˙ũ×k$? Znėô^mS&é%~ö‚ 88­0œ H a +a'ĻÕ8iØ"‡ģ :l•ĄËŨ0„i hCDZūžw“ŖŸŨŨĸáÍ }Ōú˙KĐāœ;'+n4Ū^n7Ķ[ÖÂ(‰đ}„íuĩŗę8â¯iˆ†ņ@Đĸ‚„DŠąŌÂh=[Ãg:OŌø¯ūžģ[áÛ ÛNī‹ôÛY6SÕI™´î%6""O†ˆˆ4 ,FG '_M?z jûë_ūŊkãęõŊ7ׯؖįE'ē~ãxˆaˆ‹ēīîˇŨëĮ˙¯õū̚˙×ūíĨžWYVŠûMyOžd3 ¨‹L‡6‡ßnũ}jž—ĨĒ˙­/îq¯öą_Ŧŗ´0šūî>fĶ „7‡ĶīīV>ü;‡˙õ×õ~¸§öīúķÕōXĖã3°”ĩĒ,ä)Í_…Bá,5öž>ëÁ´Áū—īõũ_˙ßÚZĒų)XũĨܤĪ0M_tNÖd[ãÛךG˨7ûûũu×3_ŋ_˙ߞŸwMßŊǝ<Ž–k`šč4=Ų(uâ×ÛųX🏃Ļ˙íOzŨiXUÖ×˙ūC˙O}÷Åŧq\ ÂW‰Ŗ\N¤"%&v0~žž~ķĻ3ƒīObļ8Ēi Ą\H°˜TqhkZõq*y$še!”FĖĖ@ƒ?jTķ0ˆįwaÚwn˙¯”é5 ¨&v đAĸá§īø˙|3Õ¸!L“¸v˜ià XëĶ‚ià N¨žëYĐÍĮŲí:\k— BĻhŽDņļpĶ2€ál[M0„4BY:h4 ÁĄ“ƉÛVžŋ]uß×U[ ϞvūhæD]}_öÃ[Ōl:|0XaPâH čܨRĮ•2fЏÁ Â‹…ÍĻ–„0ƒMbÂA7¤N/ēĻÆ‰ŽÃGęēm]¯ŪŋwĩīŪž]įļõí¤övˇhÖßē7j˜M6;VM"ãWĮŨ§ öpæĘ/‰ŨÜ2yAKļ…Z[%Œ3NÍ“Ím [×#{Ũ?ûŋļēXwÚIÕįZũäœm‘dBvƒŗNĖķ‘G•_ģ ^š~(ĄNîŨ§z—ĐÉŌęŪīAÇzyš¤á´ĢÛ ^[§Û¯ĶM{×˙×⡠oũî?ęáJ SDIšÜD¨­„Ķ<#‚x@ĐcNÛ°B-CAâˇvŋwßŋÁŨÅ˙zļ)ZĖ ŋûõũq͎û˙¨žēZŋä&\Đ0ƒģM4ä­:ŋĻĢ~"%[ ˜ 0ĩIîēk˙ĮúīŊŦb’ū×˙’×ũ˙}jīĖψ~Vm-~ēPˇîšŪí5ĶÛˇĶB",î†)÷˙ˇö ęŠ÷~ąžÍŽûūˇŋØB>ōŸ_˙î~8œgŲđ›ŠŅ(ÖËĸ ›gų‚ .JZ"+ŋ“ûC[áā‘vđęīũĶž“āÂÜÆJŽ­5_ūč[ fh¸ŸíĨ"jŨ¯ũ÷u×˙ąnēßûN$ëĻĢYNŅ äU!Ä; Ļē›e Dú|đ¸ŽĒáĒoéˇÖßĻņÉt>ō‡×úKô“Ą]UąRËģN˙ū˙{ģ}ļũޚki°švüđĶ`ˆøA ŅąÜ:&8xM9ĸâ֞’˙¯˙Õ¸kôĶr$DĪøŋ˙õĐÜŧ÷ŅÃ}õũũ˜ūĪ/ŋŊ´ƒMoŸoWÃC.ōķAĻ^3Ũ'‹—tžĮš(Kę۟×Į¯ņüŽė7¯ƒbŋ˙uöúŧ[5mįž›ķëũzV›wž0 âNƒA•BįjŸ{Ũ…ĶnövßĻäŖˇ†Žļä0m˙ūŸú¯Ë‰­nû_˜˙îĪéŌ_özĪÁ8m¤Ãĩ×ē´kq ÕÛ ģô›"ŽštÛÅk¯IĮÅĒ˙Úovă¤%qvqáˇĮũû˙ŋĐŦė+;Öŭ̝_Jšė,‚MëϚr 0U¸Ø¨Øí°’a0ƈ@—‚# ÔCņ@ÂŌ×Ww­~ ŌéĮƒ&Ī! Đ7˙Ũ?˙ũK˜ë;,\˙át×L+„i„ 4Öâŧ4ÕR Žę‚°„DC´Đˆl¸y˜[ÛK|¨[˙˙ė0ŌÁ‡‹~A„˙û˙Ŋq×ĩAjÆĒÂՑŽÕ6˜VÂhX!š$Âaaf•@ŋDŸ]˙`†˙\|¤ļ’īž‚$?˙˙ŋŪˇÚĘƒÕPIϘT,­ _ÅϧĐÃEŽÃ#B"""6úö˙čąĖ<7˙ū C>4rsUŪ‚ ũ.˙ūģfĨ”™Ēâd@§Aa<•æqĻ^ÍBA8ˆŠŌ›?6ēîĸŋĄpoŨ÷]øøĄ§ZÕyūëŋžôšo–#l˜vĶ'=[ qŌIV™6­ú¯ũžm]^ĶīŌsũ‘“úĸĮ“õŋųŽ×´ēiŨ¯gôīŨÂišfÚhˇÕ#cC]Ž-¤’A_ŽīÖĩuîūÕ´íĢôč ÔÛ=}2-õĩģ´“=ŌAÚáˆKa=Ģ5˛`îNͧŅ7öģ¯cŽīēpÛM7ŽûNŌMn-†ožĶĩšŦ8§ Ä(‡ąIĨaŠA†Ąa Øßß$dÂ=šēΐAį žltíĐm'˙뉐(™>×ĐM†Ú &ÖÅ1qώcM6!ÅoąVp#Ķ"ŊĻ„Zk0šĶÉ!`™Ō48K;8ĶMŨŨ'ąŌDķ_ÄČÅĒ°„0ŊÕ Â œhB,ž¸i˛(ö¤xh4&„D\DEÖqŪD>lĐ 64âÅĸííģ÷~ëuōmV›iŗv"ÂÃ2†Â#0ƒBĐ0„DDRKIķa;Y­ĻāÜ֑'´o§ßaŋá>žŪY„–d ÎÄĨÃ.Ŧėš! M$HDDDDEBęÜZ ˇ—Ô›Eã§ÃÂĶĢßūuũ<ė"ũŨąĸ'Ļ8A8ŧ$•4˙% —i/éŊņww¯ļaõįŸ’°ˇ+ĨD\Îe 0[…å@ũ3ŗ˙ŋŠÕÁœŧŦPO ēmĮum‡^š#B ÷¸Ū‰Åeb)ōų‘Ä#ĩ)Ė!gÁ|™ĮaåĘyLßŲ¸$Xö_6Š%÷mŲŲC´ŨīâŋĄĻ‚ˆØoëo]ŗūöŪÛ~ŦtG”ĩ[ …ĸ]åõC´Ãxh88džŦ-ę‡:iæD­x ĶMB¤ĶģI{˙_“zđš¤JŊôiūj˙Ž>C}ũ{Jė°’l[#s]XwTˇNļ¤ūęîũÛģ´î9Ē""#ßÛõũFxÃŧŨķÃM26ķBTš8čÖz‰˜{sôŧoŪ‹Ė ęËĮˆ“ĐƒmSaĒm„šĢ_ŨĒņk}^\ßëŋŋûZáJLüFŅ3f ›dâ |Y ĖÆ ánÂQÛnlU=44"¤’I$’IHâ~ļDAéqaĄĻƒO<4ũw÷ßzŨßlķIŨöŸw'—Ģ}{§Ģi¯î‡ũv˙˙˙ņüäO3Z#ĘhĪ4 HD@uđMÉ›°ƒ­P`ƒŠ¨l! ÂeZēŠęŊzbĒÔ$H$”– Aę‹Į~ĩk&ŋģØiŽ˙ŋ˙I$I‚I*E9$•$’_ĩōÁ.ē„/×˙×§zi„ķĄŸÁ9p” ™Š†ƒC@Īg M5„GV›§~ËåÍzkę˙^–""v6Âd.˙"Տ¨ļŨ'˙uņŪĨŋ˙˙Ūģīx`§Úų /ūá$•$’AJ’I! $˙˙ĻqÚl0_Ô&‚†šrŨĸĮĩĶģ<*3ģčs†ËŠ./-;í¨ovÜwkúũŋ-ÁĘ"ŸŨ~øjÒ˙(Ę:ŋ˙kö´ę˙ūĢa/Ú !^‹Ŋŋûõh§§× ’J–’JÁ$!T$’)ÅĸnŌ´ƒĪp‹Œ÷`ž“PpáÁđûĐzŋŨūĮSËĮ˙ū˛Ü„žúŋ!Žž´G¤yĪāæđwBūōâõĮũoë˙~Ã.—ZüB'Iņ˙˙öéėoķ=ģ Ģ—ŦSN×hGvO)4­IŲ,A ‚¤’ R  •RP¨"qĻßũĮ˙ūû_˙ĶNüČɧ´éuuo~čŸi˙|7ÄĮÕOGņTŧŋ vüM˙˙ū ûPŋ˙˙mTĮŽy¤›?_pČčēŗō„l‰Ôž„w­E[pīˇęûĨ{×Õa$’¤’I$•$’I$’I(j’ú˙Å?‰k¸žžĶũũ;hŪŪŊ‡ÃéøĶ.ˇŪ/õßûWû×˙ëũuuûÖˇl5ũ†Sâ ė(*{N"ĐĶģŨ=W]oØũŊ$õ}~°ü/˙"ˇZI#9%I$‘1Í(A$Ú ĢúŌ×nąžÕģv˙ÔôžūŨ}6?ú§Ĩiëúũ˙wæŅí×Ę—VąĻąMĻėhAŨąR ē:`΄5ūÃīũ5ĮaŲH~ĢWô?Ôq˙ô,<öÕŋŊĄ+;.ē )ŨH ÉŪUÆÍHđAÃunŋũ'ûûÕS“[Öŋ~áęëĻ…‹ !ūžĒækģôíBv•鯯Ōxj/aIúíĄÂīöĮĩÁÆÁīuŋ˙ōĮR#˙ųuˇtĩ˙úô÷ōļÉđƒ ĻGGŒ¤N0T4–Ōm/MWÛT"‡wÚØI Uģ[õŗ˙žˇöœBdq¸vƒÂkÃā °@â{L'í4`˜&Ga 1^Ckũ´ßų$MnB;˙˙ëéšeŠđ{Ōõ1ũŋ˙›Ž„B0šz!č5AچXUub­S°\+ "oãaņHpŦ ÂiĻÃ9[h6M}G j5; a Ø_vÅ1û#„ÖÕ=ƒ""CB#AĮ˙o˙˜mÃ†æĻõû˙īõéí¯ũõŋ÷Ķ &…Ū‹ŧ÷t4[Û8éĒąM8H a 0ŦBÚv*’´Öãã´D61 1 ! MĖGσ/a2“„-ƒpÂIÄė!ƒ˙ßĸWđoÁŋ˙Uëũ~ΛŨuī­­ī‹•ąi˛8nnŊzAˇßíŌĄ‡hD0ކ-P†sÚŲÃ5jœDRˆ’ˆˆˆˆ¤Ÿøoūˇ…ŸŪΛíé/ūcūß1˙įõß[ÕKņWŲĘĩ$™/fĖ S<Ųŋ. ˇëˇz¯á„- &čÔÂЈƒ)CĨÍą[J,eq"kžĘuûŗ?ûw3Ķ|چÆë˙úv}Yįéö›a;ūĶ‹Ĩl.š›4ÂfŲ°ša4ڗm'wß{k¯nģø2‚Âv0éŲqX~Ŋ?¯ÛM†q}öũ^ŊŌŨm0¸&ÅG N8ÚĢM‘Å„ĐˇĻ|ÂĻHk§Å§ĻôôŪøÕÃo˙øŠi2Z'biÛíSžũ4ė% '§a(í(ūøtœR UŠj•ZÃT"uÃ9ĶAĄ 0Žuqã#Dƒ[°…5ōQ›,OîėŨ{˙ŋy‘U–RäR¤KfŸاH ĶM‹¨ũ§IŠ@˙pĶMJPb"""šįCAŠ ‚tîy ļš„ęí?˙í(Iíøûö´#’čí[2Ģ; gbÉ4Ķū˜ívjéĒiöPÖЎĐ2›˜iq ÂwywwjēzúÔ÷i‡ũ~ü›Á…‚d L­ĸ-Ļ™)IāŠīÉĖŖœh&¨4$ņÃ'hDŖjž(F´!„"Į˛vÎ4æÆĶŨĶø˙u˙ĨŋBÚ¯5_ū&C§‚ U¤đ}mÉËÄDA‚ Œ-ÃN_ëöķßÃ#ŋŋņÕpß˙úwȝę.îŠ8j›;-%Mq_Ŋo˙é­q‡˙˙Ķ˙Ėfå1ōŨl„ŽDOŠjžĶ_ŋ[†ü•>_(f ô+õīO÷_ūjŋîĩįMë[˙OU•Á 26EcÎ w_n¸Kuū™Ņeu:W& ЃZ|ą˙˙Į˙táēī˙÷]ŗŌ~˙öŧT3°„›ŠS—˧účW#"õ—3æTͧČg„ÎūuSMŅ|ô<ŗ–_܈úũØĢzZũLkŲúécŊ;VšƒŠôЍwâÜ>ŽÖKĸ æŅ¯:B0¤6tŗƒd@É؃38‡„"!@Ī0„4˙ũŲ;†N?[åU§˙C.¯č'ƒŋ÷[ļ[ ˆ”ąĻÅąŽĶĩW˜{‡îŌøæĄ$22´ aš!-„Á…X4Ô īĶL4‹‡ĸņƒ.7Øi…WWMméyV™’Į˙ËĶūŽ*ûfkâ”&ÅE(`ˆmŲöšĶ´0økŨ÷UõîîÕûĩĨëī™Ļú?Ž úßßŊ¯×÷l˙­Ēq$“ϝi´":ȧDļ6Ī2XAB"q/>ĨN$Ś ĐWüÍ ™VH„/ŧ Ķb˙ =m5ƒĶjßc×ú ÷ƟŋĮTE‡ÖöG/͉Ŧ”qûøm­÷~—˙ŗõ§A­ūÂdŊ´+SPĖÄF?DíĐt8ž‘;ωĮŅė2o ÛžÚNøũ} îņߡÄQ8ãl¨_ʀž#^ŋZ°ŊF˙[O5˛6A™É—Iåf Ę žv І!ĸ'‘i>f-4Âi§Údh@ƒMqvƒ`ƒž]ÕŨĢÁié†ÉžžŠ§`›‚‰â§Û[ûĸoĻũ֚÷éę˙˙ÛKäGRéך1ÎÃ`ŧŠŽúë]˙ũâöë´­‹Õ%@ĪsÂh]¨@â,"'””BdÄj ĀÂpÂi Đq 2C‰VÂ/wVFz/ î&_Réß žŌPÃ [Ԟéé/ũŽ^díĩUt˙_xú§˙īßßKËŌ8ũDcåŧ6‰Į–˙DķŋôũŋM„ûØjv“‹öÂlŒr$QnœBbiĐ0D& NĐRnÚMÍÚ<ßmĪ0aađ蛰øÚEu†˙{ģč›ļõĻņÕpˇ×Ŋ>˜é=;Đén˙O‹ûú˙˙°˙iûw‚z ƒ Ÿ}6ĢÍĢíîĪ÷w\m¨" öLŨŠĸÉŧųaŲ‘Ņ'l a7Aذ† mĻw//.č ᚆí[/žīßžøj;.;˙˙[č?z­YOē˙ū)wîúņúÂ˙¯˙ük˙Wļ~ëûīĶũ6ūͰš ƒé4Ķ#5a0‡~°mÜ'īK úÕš!é×hØAŌw§§}ũŨ¯§wūĮ}§ #.°ükũô›ĩá‘ÄX“˙¤|.´īDhiRúŋõ÷´ŋļļŪKũVŋ¯f}„ĩūía˜Å'ąá‚iÚßUúO˙̝đĶ͍é÷§ī˙ÖėŽ˙˙ŋëa÷C‰ÚšVē˙˙îô…<ą7ūŋ×'Š!éyHA>‘ Ŋ|Õõ×ģ=ŋŲõg–ŸŨũŨ¯iØN* ;ĢAÅ1„ÂļÖÍZQ ‡˙čeÃ]}éŊĨuWk¯0+_ëdq"?O˙īØ5íNÁNÛū˙k†ÆN­}5×˙H^ģiNø"C¯—\"w˙ũûÕ´ę ,&Ã;ēĩlÚõ¸¨|1qą´ŌxdíŒĨ¸wP~“n˙_˙ã_ãúēũÅKíú˙°˙ÎĘGûũ~;z˙íîôˇū*Ÿ@Ÿõ…ųīël'lU!ąą qĮÁŨŨCĩŠí27m2W a;ĐˆĻ–áę?ûë˙ëūMÁv—ōėĒ!ũ˙ÃNUŪÕd§Uū\`8oŪŨ¯wŽ­ũīé.“˙­f;ÕuMx°´ķÂi‚# ›Töî"áđÁ𓠁„öųpŋ˙Šo˙ô.ß(ÚŠúĄūŋ§÷Î wūÉĐį˛I A…ũ÷ü_žĪ˙ûú˙ßô˙ũí˙ņ§ŲƚŲσƒ2`HA Đh4"" ˆŒVßĐø"‡ī˙Õ. }ō°/û_~ú×Ķ~ŋpâvÁQ3d4*;uÖë÷Ŋ†Mƒ}VØiļŦ3a~ÖŊŊSMĪ×ÜtĒÆššÖĄ4ĸ"""5Ū7Úúoßü˛ŋĸCõô‡˙ũw×Ė%͝ÖÃæDČÆJķl wg‚Ąh4Mėž9ĘŌ´õ˙sŌliˇL0ša6-‹Ž-ĩĩ{NÎZi ã;NšŦVđž×mũš6ŋîé}ô7ųĸī\ÆŲžÃ9wëa+ŊmuĩŊ_*‘$2IäõA ėõ'É;Eã„°ÂąP×H í­6pÛÄÃģ^ÃLŽ1 4ļ.Ջ}Ĩ`Ãn!Ã>7CŊˇ×߯š.ˇ]ķ×ė0žˆiÚÃN;Pƒ ĻÆ˜N4qļš$ō†t36a „Đ÷FĮÜ ítęũĻ%>4ÜûpĶJB!„ĶA É‰—0@ІãŲ+ąČŨˆ°…Ļ„G¸¯ėãž˙ūĶM;Ŋîô˙øí‡iÆÆé„îö­_ę)>č!„ 㚸|ŧØ6­úîë{ö‚hftÁA‚ˆ°„DDDDDC5ÚHE Đad#´ÂũĩģMč6TĶM†ž~oTm ˙č4žŅũ”":áQĸa=hĪÎE5JšrWWPÛĨī]>ßæ4ģj";,Pˆ”†gP0B#ˆûąH<&›ąH6+ö(Cļŧ5‡iĻŌâ-Ôļ„DDDDA‚žÂ pÂroEŨmĻ÷ééũ˙ˆ˙âBšĩA ­œo×ĶB-DuėŠ;Ļ…¤z60B"?qkč ôé>ø†˙Ã#‹˙ŧ¸=+đÁGâ!„HãiĄhA„ízqZ÷“Š/ŋĢuû ëŲQúõĄôę5â-ˆ  _Ĩt­ˇ§˙ö_ū„~˙ˇú%š5íˆÚéŨ{í/Ŧ28žŲ8Oũ¯u˙ũ™ ‘Ø<›¤‹Ø.úxüqÖÓ˙˙˙Ū׉Ø$Ą2°ĘáhÔ2’b¯†ØVžē“͇A?˙¯Ö°ÎM ÖC÷TÎÃ0ƒīXæ‡ņVüŊ†ëí~ôÛ]&8”=aģápøh;ˆŌÕ/ōę÷ūBŽŋīa˜pû E4ĐqøwwŨ ūkÎdĸ6Â#9ƒ0͑Â˙úīwģŪīmVØÉgLTΘB0ũ8‡w÷ÂÎ “AĻ›ŸŊ_˙öķŨžģ ĢV„C áo;ņÕržÛL&ÄNđ‰ÃvĢ×ûÛ[>­?NÁÚÉFŨ„?" ՝āÎâ5h„9ŽWÄcĪŦâ)hķ žFšeĖÚ{%ĐrxĐm–÷­~×3\0›aŠ׍°é°B=ĖLđ!ÆC$Ô&fA´4Bņ9“‚hđÎsA“‚dfv\g\†dÉČņĐ0OÁWjGt^]Ūŧ;ĩéŪ­„Õ‹c}Sh0„DSéĸā8†aÚDÜ5 Aę›"Æ-5Tâ .A$ ÁgN."?ûO´û˙ûNž ÅG˛VÂ'F›D„´› ž4LpÃL(AæËHģa“…/˛Qk“ļ‰ŨÚ+ËŧC@ ā¤}4i¨M‘ģaSø}iúēÛVņoŨ;ϐ1ɸA‚qö‚nĨķA¸ĶxŊhRÁĻðŠŨ°ĶNĶm=ĸŨ§äî‹v‹ˇŦŧl pÕ?Ŋ{W˙˙mdFc*YQ=—Zž DG:¤‚I$ŠB…T’ũĮz§zzuvnĐ776MŪé=aŅĻŪÜ5~ßûÆī˙ŽÉhŠ‚ DD0B96G˙˙M¸āÕ I$ ˙ĻÕ~Õ[Ũ^ƒcĢ­?˙âūũ˙"—ũÛ­O‹ ž)õI˙}¯.'&90Ūēŗáé$’4ĄuŨ*¤ŽßOĩĶĄô™˙¯ųuŽ>h ŅvŌ—ohÉn˙˙ž“t"ŪÍWÖëPŧ$’ ! *CŠiĸV&.=õŪh7îÕõëöõ~}´MÂA;˙˙OĄaážģTJĶčŧôī°KŗY|FH'˙ōęú~ÅSũ¯ë´Ov; û_k˙˙āÚßÔ/ôˇũÅ×ĒxEōI$‚A$’I'ÚuMŋĩM´¯O´žŸÉąĒ õūöČiķŊßtŋQKŠęũũ/÷Ũ|ÚĒö­5M†mĻ Å+_ąũ}?õˇúíZ{kŸÕ°žŽOß§é܇)­ßęŨž—īí;Ō $H D •B„?Ãō5˙žjkŅäjŗ™ S28fŦŲûa$×ŗ÷ ŽFà „ÚzNĶi4ÂÚ­Ų˙îķÖŊŦ3 0œTvtÔ'H4""ŋ) uũupƒAŸŒ3?0šæ!ÚljžĮAØĒcL5Ō§l[Ļŧ8i0Ė6Á}‹†ŽØ†Æƒˇliö""wÍ-ĩ´!ļ—îe8ËŲ˛ ļ˜#Å \ģm>Á4Ã[ ØX4Đi„Ė,\-Ú %hh2„b˜ãNŲXč&áĻ`˜AšĻUĨCČFúOģį`ŦĖvޚ‡jÛ$8iÉĮw ėžĶˆˆa0ˆģQ7̈ˆˆŖNʄ *b!„&ƒ'ˆ3DS­­ŋ§š?é•XōL&Ũđpƒ¨m aœt÷§ØˆŠi é­ÄA‚QŌb"""šU˛*đæŠũ]!čõįbíI0ag4ËvįĻ ëŨũ¯Ĩkô",v&Ilˇ¨Â„}˙ŪžwYh4Â…„Úi ũáĒû¯Üv×[AĻ! éÚ3fF¸L§RP“Ĩk!(Õ?6ČĢ'ŒAÛn›%ųyvŠē}ë˛˙Õ×ëÜ4Á´U ŪvC2+;UŪg\R‚ ‹†Å~ƒ(eƒCˇinƒm=6õ˙˙˙ų˜Kū"8!û[ô–C6=Ļ)“ŠpĄz‚Ú.íļŌ ļ›zûU˙[å˙ô\]¯–D-‘įié 纃ue4ŽƒM #2EÅjĨéė0ƒbÂh\XM4Õ Aĸíĩî‹ļ EÜˇîƒ ŧŊ:NÕUĐ˙į`ÁOņZū\ūØŋŲz׆]ŽēlŠ;ÂĻžīUģēJ“Ķ^Ŧ­BnĄĻ›'Û%y4íšî<͚Ãh0’måãEãH6$N4ī_ö—ú¨ŠGŲ7¨!ViŌI’I$C˙Wûgũ?ĢM‹NûNƒ´åFõW‘F}˙’Ȩ̈ÆĶ'ĪēĮŲ‚íĸņ´áÚm ķczzm&˙ÚĒ~ēęūūÃ˙ûō@žŋDĖ;*i„Ęę¤Âmŋŗá7ũ ’_ûÕϚoŨĐkUčZBfhÕFŊŨ—"q!×™ĻlÍüŲ” p3tČa'w§ÕĻNe>ƒOSĒ7ˇ˛iéūÚm+vŦ]˙kļÕĩÕÕŊÛĨoøŪōu‚˙´ėw‡Lė) Ķ˙HģļŋĐI ‚IOU|TA™Ķ[B"3 pDJ0ĄË ší!vŊ˜ L  0ƒ\l&ˆ†f"ތ÷W>0ƒ ƒ>Đa?[/!ÛW˙Ō˙|P}ÆŖúĮטÕ_¯ƒūžX>øá÷y‡‚îų,ģtŸî›?ߡÃ[cĻ!J„DDFĄ4âEđÔ>6‰ŽÚiŽ“cMĢ‹DᲠŽĐkŨuBh6ĄÚ°škˆwĻ ëk˙˙|ō ëéŊũĄ×QŪĄŊ˙_Wúö]- ¤?ų=úi_ëißiEÖ !iĒ N(›ĢMEYw„éŪ‘1ė›Ņ7cĸw§d­rq—}ü4¨öJ”]íÁ„õÜ×čˋ˙ū\Eaĩͯ{ϟč2–ōûpo˙ūŋM;Ģ&H|§đˆŠŨéŋ $ÆÅāÛbĨ¸NËŊ; æz.ÜŧôęÛģĶ ˇzĶĶm?OMzâč ØkĻÃģģZ6=ŊĘSŌ—§˙öT* õŪŋī¸ö“/_‡ĩ|ß×ëkiŽų^Ņԓ4Íŗ6Q DT’qĻláŅ™  ‰C(‹čšÚqIĄæsMPˆéũE Õ:_Ŋo[uûUû¯_Ũ˙ĢáŽũŨ¯WĄ¯˙ÔG#ûigY#k÷c¯S‰˙ĩíŗÍl aƒ ųĪ)Qâ'͙ąš<ĐC6`ĘŪj2>g3fDÄ80šaž"ôaß­é×Můš(‡,u4 ˆˆ˙Ģ÷Wßûío˙ŋ˙ŨŽū¯kûˇŌëō ˙ūŊSnëyë1ÜU™¤ô×ģ3Uûk{a%›ÄãŨ„ !­sæOd¸EƒBĶ]ŪKÆŲ˜Â!(-fĶAĪwEÓÂWč Ŋ´NŗŖ˛V¨qøŧ;ũ˙zúũWũ˙ŊõĮųũžØˇo˙íä„÷ŲéĩũĻ/Žyļ{3JœUŦP":OjÚ íi„Â5ö&騴ĶAĸnŅĸƒģ“ļĄØ&ßôú‹[ŊĒūė,Gŋë ģ_ëB¯uáõ`ģ˙ūČ _ø×ŋ˙ūûūÖÕ5éĩŽÕ>=ŽØãÛĐiÔPal!B7j(ģ ų;îōv6˙˛ãztûĸíšįNîîÕ7O}ûOmbēâeˆčdÉõ Á°qĨ¯˛ėĸ*Ũ­üVŋūg‘Åož˛Ŧ[äīĶĨũ=ĢgöĪZŨ­ĨéņQME^ĶÕĻĶ ¨ŽS8A…B#ĮV}ņéŨúw:/;xĐwūĮÅoũ‡}ëjä1ßâ…ļ‘˜vá×Ũô,WđCË-˙ũĄ†øīž‡Øú9ų˙žÂv œ0šh8Øf †š÷ 'kĻhZŧ>M=īū= Ŋ7÷ŪãÃúúø?éŪŗ@°}‰ÛäDdM߉væĶ˙ÕĘ}Wõ˙čÃíz×ŋNfôéSXaXĻ)<'ķ:= !hZ†5ëÄSdtĨūž><=×áõ˙í˙÷čŧ°~§áÃŌ„!˜ßūÅĩ˙˙ūø]ĸķũú­'Åm8´&v &„txˆß­äoXūNōâl?Ô‰Û }˙ÃjB^žÚIĨŋ&v#}W|Ú-Í ŪŪĨíŪ*˙÷_ŌÎOˇšJûmmßëūgA„B#ˆ38B8“bWīžL ûū8§Æ{˜~ø.˙˙û˙Šë:?ĩ}Sȃ5Ĩ&û0ZķŪ­_Ļŋ™Ē÷˙îŋ×˙ĩũ?éˇWŌúdęq_ôNáūŋIëšĻútî˙|>ŋ[÷žmwí'3ŧÁ ņ„ Îŗ1BhYFl˙ÛÛ~Ŋ÷iũgíŗōÚęĢ_Ķkü6 ÃėŽŸŌ°–øˆÚoúč,?§ü/ôœ?úYė;ú˙™ÛFÕ~ŋŠūüŨMn&N"!R.-;pƒ¤Â' ’ļÛõ˙üĪõõa…ŪĄĒv ˆĻà &ŠßĒzm„›NŨŽØÕŊ&)&ĩA˙×äŧ˙ë˙égĶúį-ž¯é¯}§¤Ģz;­SŨsĩXÁ§I<ųē:.Ũ6ĶĐh5ũ^žÕ´ėû÷8ĨObŊXw ąÅ„ ZAôĶM5 Ü›§÷˙ŋŋ~Ķûôû_îí$í‡IϚqQąLCA´Ą’Škúy¸Ņ“Å@ĻĖĖf‚§h“°ËÜ mmÚDō“¤ûž6îĐjžÚĮ­í~Õ´ĶĶPƒ\7¤ô E~ĶL#ë…Wa \oOÖ˙ũ5ÕSģ@ÕŗģŨ+M6î4DpᄓĩSVĸ#)ß#2öDŲã6Ha2ëÂh? īŊ?ã]]uŊá°mĮjÆČŖßh0’}„í !ˆ´Ö-40˜B%ZM!%–)˙Á2ūĢh; ļšh4„Ö˛(î)ĩ „Ũ†ļSĐchED4!“°„ŸĶ Ŧ!vaÍŧ+Ŋ ĸpŅ8¸õ˙Zײōë}C‡iŠh0ƒL! §‹°…„" 4"P„E5ˇ''§‰Íš ÅąIÃļ*׆Đ8­ö*öšhž5B""kj"=ĸß6Š ag˜yîĶPžÜ0Ŋ øũė¸ąîœ\žÁˆ ņ­_T‰š#M$ōĻ+H7 ˆˆˆá„ĶDķA„8ˆŒitXívīûzní/Ū#éüĐx ]Šš ~áõˆˆÅ}´ūKQö” yXD †„E„!œSUãGí=īkM‹än^\ūâ;ķiˇ1õĻŗ¯îįz­M4[ĩ—|DDDRĄīt›žŋØbÚŲÚX_…~zíĨ SL-2ēFF“^$Ī9 ΄jĶ'-ĩ7¤Áp÷öí}ønךá4éwžŋûqÁ“f%Ô*īķ i‚g [ ×/)~;ûũ~÷ AtŧÚVõŗûˇÛgūîŖë땨 â!§iÖ<‡ÛĻŋŋũŋ×ĨãÚžũãõY]"AŽģūļúīÛĶg.îwäŨD2PƒDGH¸´`’a†ŠB#Ŋ†4û_$¸äū¤("ÉŊvē']ģ6ųwj̝Ūŋü/rÉƌī\&§h7ß:˙ŪūĒēīÚhiØB""# – ĐiJˆĐ„ŒžĄ¯ūųŲi$z% 4ģdį0ųpč7Nīē^ÛĨžŋôŋˇų˜Zë ’´OšwūLZūÔRjâÔ^"5 Ķ}'ša<ÛMÖáĄaO ō¯#QIž4˜™´ôíĶIč>õģ×ôūũö^ũ`˙Dß÷­¨UÎųž+÷ĻŽ“ũĨÅLĐe7 ¨ūC‰Â }3lÁ °ƒ@ČÚW)HčGØPøâų œ0¤ĄBiÚh˜áą)߆Đ{­ģ{mû×˙wūŋĩôŪēMĻļũ'ŋėUÛu[AÁĄČ4Ą˜€B4gæļꠁ˙ÅĒ 54#ÄGœölĪŒĐ "'†ˆ%Rd‹V@Ä)ôČoÖÂf€ûËŧœ0Ų’Ķ“Ÿ ycŧ>˙ž˙˙ûųq~ö‡ûJēîŗ5×ŋâå~D6GHF]iÆ4"$"#á7˙ÂØO†N î5ÕŅųŌ ēģo@á鄿n^0Ķ`š' ÷iá4â˜L|EëDīëÛˆō.?ŪDū>˙æh7ßöąũnv&0ˆ”„o‹T\XwDŨßÄ^ė+ßQc2>ëНūđûúUīéö‡ģ]~đÂpÉã–ôņwjŨh<ŧÖģ_ëŨ?˙ËŗēÁäę˙˙Ōo§a8oäU'‘x§ˆŌ$FãĖĐSAšYE ņŸ‰ˆ&š„í=åžG ’†î‚ôė’ēNčŒw‡k‚;*iīUܞzē̓æŖöé¯__U‡MGøģM$īP{ŊĒŊ5ēMߝ؄‰ÕÉXO§˛8FŋB8Dß˙V—ŪækėÂ˙Nö7¯!™œ™Ųĸ3í2^A…UM4B„MQ#OÕ߇Öh7AöģOM7ŨL8OŊbžä§|AöŨīÆÃöū+ú˙č¸F2n˙ī÷!4ūČâ7°šëũá…ciz…õÖ´š gúŪ‚īėoëiß­˙lģ†Nh5 'zi÷ĸoUŖfŸ§H¸ĸņįŸģUģģvÕo_î÷‹õ帖čÃĮ¯į=ĩ´Ąũūëūŧ Ãč auđm˙ĻaĻß˙õÅzú/Ŋø†ū˙û˙{?Z{ļ;ĶAø;B: Ú˙„EįđíˇęīĶ—¤[ļN/ONī`ŨU=ŽŨTãë{u™ŖŊmö•í>šqąËîíyęõŋū ߯„Fūūŧ7ƒŽë˙˙9RlÍW’}˙{‘IÛJ$ŪŊœŋlũL0Pš§§°ÂWáÄv‘1Û0ŋNöŪß}Ņy“îīNūã˙žŖ˙ŌĶũõÂdgīŽ¤RšßĮø|ÂŨīníĩũí˙ø-kūƒˇõŋK˙ũ<&šáĒ˙›I­ôÅ!Pf-ĶbĶTė¸ö+„˜`“NŖ ˆí ƒõíčŨ ģœnũupžīvĢ÷íŪëú˙˙S1;Ûō& ëå HÚ͙!Ļmž=_5ļŧé='ū™ÅęaļH~tŪÛūŸõüū¯÷˙Ōj¨:cn k =l(A„áœha„Ę€˜Âql$h6)Ļ„C:ŧàh0…ļļŲoßyīī´ßēûũƒūûw˙ūŋ˙ßôĢ֟¯á3¤g`ˆœÂaīÛÕ}7}úWÄŋđ×ģvĪ+=~c0×}ũm:ÛöĪđîžéA;AČ Ú`˜7Mˇ¤Ûâƒ0Æ Đa6G`ƒÔ§A„Ņ„DDkޟũCí´˙ĩ×Û{‡ûU|x<ĀŋVęIõŋú.õ/ GK"oK›Á5<Ô"X´]ˇ˙Ēģų˙âĩM6í6ĶēģaĨļzĩ°›|wwŪēŋĻà ›ļ§¯M­âĶCƒ0@ĸÜXĸˆeÃÕqķÖ?ŽŪ:ĩŽ5ĩo^ũ¸K˙á˙ūŋĨø÷븠čŌ{oōķMîÕoĶŨ°œ0¸!Ļ÷a šlR Ž66­:ļ-vÕSAĮZ ŠMč&›ĨˆhT¨„DD[ 0B5ĮũˇweÅO˙īąīģŨŊ˙vé'˙ūëú˙bŊëTü`ûļvdû­ģđ›ŋąQN‚ôo°Ēcģ M8a4›[h0ƒģĩÚ|&a~´ÅXĸįSe˛–>\Ž˙°qû÷ČJõuÂøoūõũwˇ˙ų´˙Ūe ôÚģŋ†ŧĒoôÕ4Ô&†œiϘDøaa„Q†ˆpĐi’Š{†ˆ†ƒA›PVÖēxĄü}kV ĢūķVŸk}Wƒ}ŨŠô÷÷úûõŦ0Ÿ‘aĸ MŸH¸ž?]mũØ/ö„YjW !ÅÄZ"""..#ZŅd*[ũŪíĩ˙^Ūé?Xø~īÚßīßMŋŋîīõÎčÎÆNkä5‚l aRi?í[Ã˙í(‹‹ˆŽŽ""âėSDØÍ?Úæ6ŋũ~ķĻé;į—ũ¯˙ũŌß˙qš˙¯Č+NđƒĶ ŋuņmX?˙â6ĩė!2ŒĩAĩŨ›7ÕuHŗ÷ļrŗōmũq_§Ųûũ­mmSĩVûûM§Tßō'0ŋkģ§Hœ>Ŋ.—‡ÃúöûZ˛§’ŖO:–æEã[P@ØÁBŦtÎbÁ„ÂŌiØV ũ}ÛU†ŦTīIāøãÚj86ø5×Mŗ "/?ôMÛũŽ˙ß˙zĶÛq°œsT9ŲŪ_2âãO„M´ a ˆA8 @ÁÆÅi}§PÍģ8Ļ)BÁ¤.ƒĻ°×iÜ=ÃM1„ë]4÷vžŸ}Ÿŋ×öđßëđÁ§cîÜ?‘v3Bqâ.Öŧˆp™1ÕU0L"rO‹iŒ jĐa\g3›eÎh {A‚6:ÂÎ.îî[Ūé+wŅëŋŧuŪÃD­;NPY„GA4‹ÆqÄDD4"3XB"0‚aC&ž &„DEMDqQS§ `ÚMžũo[[˙Î: áīöīēčąâ;ĸ)íī%ŧDfbŸÎA†šIöąÄaD0B#uØÚĶĐt›mŽúŋüīũō“oūū×ĐhėŽRQŖĖ3ÆŊĸāŒ2čƒ0AÚ.a0œŲzúÃÔDXĐ4ãūũö˙é˙ßß(ßŨūģ‚Øū$mh‘™ÆÍ ˎÁ;‡ö1'Äv –; čˇli7ø.Âm&Ÿ÷¯ŌīūE„˙ÕķjëīųÚA§Žn!ųĶ!á2C&ƒMO͌;šAėÎåģÚē?o@ėž?ĩúa„0_ŧUÕļŋ÷ë˙é÷÷ēĻÚī ũč0Ų @˜4ĶėŽI;TŽîĄĪ<8v‘|öû[wW~^oˆ‰TFŒĒĄũd! vÅ˙ũ=ũÚw{k +ļ)˙ŅĒ?ޜ0¨˜öø‹vƒsc÷īkWzm¯ūF˙Ģíŋrß"ĩ™TĖŦ͊) ÍFoUæ)ļ˙_Ō|ĮĻ›g @ô †*;Úú.VLŲ÷ĸĮkAˇŲ;#ģīOŊSīĸwņúī¸dw`Ž;÷îēr*"d|ÁĘŖNöīMS­Ēéģëß×īA…†ŲįhB ĒĐé˙ģ|áĶī´īNģ˙xŨ?´ß¯Ë Eoūíä`ŠÄy)—4Tˇôû¯´Ŧ&矴í&G ˜Ą(6„Dk…Ũ‹kuŨŨßū÷Ō˙ũĩÖÁ~ĨšũŠžĶˆō˛ -ũ¤Ã §h0ĩ÷mœ7Úc;M8¸čD4#$3Ėáí{˛vũéˇük÷ß´õ˙?‚߲­ŪöqŽnNBöO6ûŽ:´*žČâ*ƒ[L–4ØģdQÛB0PH)ŧŧu¨}ÚÛú˙ŋõ˙­iĒûúl-ûpKA´ĩtŊM˛B„Wī ,0”DB," ÂŋA`ˆJ’ŌõĪ˙ļ­5˙Ē3ĻFkŊæÍr >!&I„Âa™ŖM4īâŨ‚ < ĶÄPĒ-ÔÚjN6m~ßūŧ'×]Âŋ˙īņ˙°ļū¸L/ėŠÄššFĖ"ÁŸaųA nD&LN͏0ƒˆ´BM4×ÉŨÚf|hģ}/Æī'˙˙ Öoûīį$Ø˙Ŋ~í×tÚëĢˆ˙—0SfU“wīđA§ēv7aāĨä2vKąÛģOŊ>øÍôŸaļ™Ė{m~ŋ_H?˙mßŋ÷§žxV;_ĄúBí4íŌŅ1ÛvÁz-Û ^X(dqQvđđ›h5MģONíĩ[˙ÕâõĻŨ ˙öˇû˙ũ[ˇ[ßûÚmP"â´Æša­¯bÕŪ¸@îqžH8anŖÎ›Å'Úúú˙ßŋūd­_ûĸtœ?‹˙˙z˙˙ā—´5ŧĪ[ͨϜ0M ņĮšØdŖ.Ûõ¯OLVß[īŊ˙}˙m6˙~˙}ČŽķTUMuļÂkéũ×í?ũôÅ*ÚiÃV-Ú†5Žôô÷¯Wú[ūž–ÃûėŽ'í{˙˙ņÚdLĶĩ;"1ƒ8F‘˙Ĩ 7ÉŪ’I$cUSëõŊ=4˙}Ú̞OÃB"= tëíoũ܍õéŲ„°īô%ŋøwŽ˙ßß-Í îü­Aph3Aσ ĄtP{ą“ģ ĩīUl špjļNíö†Øŧ8†ƒB:ũ÷ßõ}˙üFßë._ļí´ĩ˙ûЎī;ķĩMJ”h˜ī†v`SmđE¸8NũVãL'qAAABI%#z„"Fšî":[˙XÁūí_˙ĨíĐū#öÃņ˙üÚū÷´¤č‚ ˆžČ‘'h īH˜öƒNËįĄ{õ~ŦÍaĻÕ4 l”C[l Á͈†˜,›Uõī`ˇÁ{Ũ7˙˙-?˙đöú֟[˙‰)ŒÕ‚fhŌ6Ė Č°Ķ°AļyîíP6ítüŧzĨĪíļĒ}Z°„C4Ę!ÄhˇIé?uū˙˙ü7Ö˙VÃŋū˙1ūgū™&0ƒ@͐@ė ÂiŨ„&í¤NŊXm­˙÷§ũĒ~ŠøƒAĄƒŦˇ›'Ķõ'īņüģūīũ˙˙<ƒ÷˙ö—ü4üÁųt ļžÛvĒh †ˇ~ö _˙oîí:éŠ5ÄXĒ+­’…OŌNŋ˙×˙6¯sĻ÷öˇÛīéÚņßiĮöiz‹Š&íŧ0Nîáß /Ķün>˙ßÄXã¯Ëp.Œ‚6ԤǐG’IuĶoųĸû˙´ß´Ũŗũæ6ĪoÚmúw ;6ēĩk´ÖöXDôĪMnîõŽöס"Ũĩ×ūˋk´ †ą¯ī➊$˙~æ0Ÿõ˙īŸßĩģė&ŸžÖšjšû 'mq8ũŊū¯ßw¯Zæ/$ũ˙˜@‰#ËtŦ¯qXßúķ]ũę’GĨ=¤’I*ī˙Ö­­ņĻÆĮĻ×ŪhÜ5ĩôÂāŸ[ū×˙‡‚˙ö‰ūīčc•įĻeŦšģAĨPé/ĪöÃVvœy*VļG­8ÖāøŨ=ĶZĩÚ:b!„"-ƒ Û§úĨ˙ūՇˉEĮí‡@ŸŨ}ųÚxėŒŽÂk~Ö9Ĩ„ĩa…@ØØ¤ĶĒŠÂ )B ”)Á4ėFˆchDD˙˙˙÷ĢĄĶĘtŨ?{kßb×Ũs˛īR PƒũŠŠi¤ũ鎚j“vÃP!gt>˙y?ž_]˙ė[õŗé[××Jī3ŨÃT><ÎLņ'&īÚ L:jšša4 ɎšÄZ 9B‚zĮđˆ™¯˙.ƒũũ5ūû†7?ũļœtķxMô]´ŸÄvŸsDDÍ „""?ßüžŋũŒ7jŋ°Â­ŪŠŦRÚ÷iķ%˜Ŧ铊BŌDš“‡xiëßņōûZû˙~Ė/Ö4ûAÚķ: G÷ķ´™D| fhƒ36h0¤Áœ0Â°œ] ôëĩū’IšI$‚¤’J—ܝļ~{ū߸294Đj˜BÕ§÷;R9Œ! Ķ9Z%„ü;Mu´ØRá ŲÚWŋÕ¸MũiöŊ?0¨.č5{_īÃ'4 â#‹Tü‘šƒ# õ0Č4LFĖ}č4ĶEģģNČⰑ¯ļG>l†ƒ˙ūŌŋeœ"ũoÆŪ¯ģ¤I*QJUĸ4ÁĐá…üĖEŗdOtĪ‘Åڇ´N=ÕĩHģnq†°áÚ<úuwéŋˇQ4įļYkŽÉRú˙ŗ˙ęë÷jˆLa„"6<§0Ę$ SwĶCˆkÆĄĘ&íŌ ī]?cī˙}˙ū!ū"WJŽÍ4Í;īõöÎMĒ|UσŨ†Ŧ&Ä/  Âhhģm;ScåįĻNķŨ{ûĩJīíŋũũ˙ OåŊ0Mß÷¯ŲĄÚĮiė\: E´Õõî[´H}?´“ŖwmÚ ÖMjÛĩ÷Õ˙wūöÕWKķą>DÉ6ČĻvęwMŋT اĩäŖ¨´"ũŸ9æĄá’wëŧ=m5Ŋ×ŠW˙" kõ×îˇ÷˙ÁžAî AÛé…ĩAĻ-4ô͆: Žû¤ßߎžīÕk¯ÉÅ×./í×˙Cīû˜ûû÷ũ˛/+ĨÕĶģGE)а„ERŌ~×ũúŲO[nĩs0›ũN‡JĘp’đ÷˙_ëž}i„÷yžũięNÉTŒí|E’„"""7îüzũļד˙úũ"O˙Åúü¯˙ÖŌ×öÂw w~ˇu\ƒŠŖ"q­œi‚f }^nÄbģŋŋīĐ˙ˇ[Ú˙žģŪhŸú6ŋ÷ŽíSŠ`Úg-Ū„ŦŦūŠæČČg Ŧ'ŒdâÛ Mŧ<ĖāAĀ›S0Ÿöí~üzõūˇt˙›IŋöĢv´Ŗ´PA´B#’˜ōŊ2‚(“>ŽG™ĐÉãmHļqü×4B+M@ÅLāĄėētnxx´čhD^ßhœÛą{úkŊ­ˇĢë_õC‡ám&“Z Âˆ‹æĖ&‰õ0ši„Đi…O0Dã  Đķz­‡ŲOM4]ē¤Ã&đîí.ˆĻ >Mčœ{ÁŊĐMēŨ]Ûöŋú~¯ ÎĪIÜpŌŋ­68Á‚ ĖB øJîMÛčE„ú í?A̞cf;—”°Û†‘yĻŋ­°ž4 Â~Č CGáūĒ˙vfģ˙˙Øi+ļ0EĶAģ aLčDGVOĮɎõ¤Ûr;—ÃŊĸáąrq´¸wí&æŊmtÛĩīU†LkN¯É˛ą ĸųÄ&Šßôũ×Û ļ°Ōjí6/Ļ*íĒ §†DXah؝„ ¤ö•ŨŲ+ Ōl>įÚ¸eŊņmŋũi?o_Žíū×ôšqS­˙Ũ°a/Ž)ĶMC'0“ЋBAĄQ÷¯¯÷é¨*Ō÷ļūšų;÷ôũÛëkũzØOŋ}­ĻÃMĻƒMÎũ|G‹ˆˆū={Ũcã˙t+M>5ĶuZũ—Õąōâúļ–÷üV÷†M8ią°C°AšĐƒ „Í Qâ#‡û\?˙īë_˙ˆī~ë˙˙ųpqė~Ų†ÉÄDDEE=3˛Ąė?qęō@Ÿņ_ũu˙üąË…oŨ$?Įk˙đÂhZ ™;ũÎÔ|ë^ë‘Cų ‹˙ũ°ņuŽē˙úúˆˆë)ĸŨáŋĪ•Wĸķ˙2…˙õ˙ÃOûõ˙ųYFq…îš-ÎÉrM'Ãū‚Ō˙˙Ņ'˙˙ũX}ē˙1×ųĩ÷ä&NÎAĄ~ÄŽ”4k†˙…˙û üÍ_ųŽõĖō­î;?ģ„ģUķ:ˆˆŋ›2qUuídtVŸÛíæ­û×˙˙˙ëÛÂu_Ž_[m4Ũ†aę°¨@⚊õĩl.ŧ&ƒŪ‘¯Äė“â-ė2_ŋö÷˙Ŋé˙Ã9ëh;ĩĩŽ=bŽĸ7b‚iá ÖÆœ8­cDâõīĖ‚fy‘hŽ÷†ƒŋm}ũôžģ"ÍÚlhŠŊm‹ūÖŠ›V¯ĩM4nÁ¤Ú 8jæŧž4m;  ĘPĖ<9ūŋŧk†ĄiÃNė"ČŽĶ4ē„Xl8oà 1nÕƒ 0eŽDmD0ЈeˆáĒŊo•;lŨũZī"YöCe>yœ:׊ĒMOi Õ4a-ĻÃmŲ0ņ˛Qh„ZqŠûX}?PÖíPįšY¯9Ķ<Û3a0ž4 m°™(…ąi”öš(CÎč0„Dī˜Å3ėKŋĩØ~Õ¤Nk¯ôđAČYÂ{öŸę–"ÂJ„ZOb,!áöžôøjôŸÎo‘$™œv9īßēģģT°V""ĸ;ũÛ ßŋ„äJ:3Fsōƒ$ ƒLœfqƒ3Ė ūMܘîŨúŨߥ/Ua‡ūÛ¨?hŦ˛tʍrC3aÎíG@ÂvĄ0š ÚØT čķw}Ũ÷¤¯a4ūØÜŨČĖŋ’æi ƒM͘ ņZn‰Žũl'&í„čœ7ôøkvŧzKÅ0}ē4Ũ:‚HyŗwQaĄ99vÃ&; û'„đ’Šģ/Ŋ}ãâŊé¯,‚ėČÆJ˛ķV˙§ũ<Ā]ÚNĶíûÂtŊÕ°āŨ;ŧŅŋëPģĨH? ƒ[×ŋ]Økú eÛ ¸ ƒvÔŧËÍ$ī­í~‹Ž­˙ũ÷ŧ~ūfôõų’„V™O W˙zĻŪõéĻE|ž4Ŋëiééūë¯÷úëß÷…˙Ŗ_ąĨ\į’ˆ& Ŧ&÷xk X¯„ũ=„Ž›Ú\WÖúū+˙9텡˙õ]ņ—¯ŋ§ØawĶÍF[ĶLôīü}´"jCņ¯˙˙\ TÂīæ­zũ ŋßßÖ˙ũom0]/ü4˙ÕöÂÛģNĢĮ×qõ.¸'^>ɑû˙˙īīūļÖ÷w}ŅVv%‘|˙‘ VÄGÁ¯ņ×ũu&9‘ēĐ_¯ ũ˙õ_}ŠŨŨ÷kʞR3 dâŸ48‚!<„›ˆ‹ė7ĩäpžLĢōĀáĒ}˙˙˙ßũŸ´•Ķa‚w´Âj÷īü¤ŗŖ!ē2CB-÷AOĐgÉ>“¤žÁ ×ū×ú×ëųšÍ¯¯Ōøl0°Öâ∎ūn QûR@Ô&a `ƒy1õO§.ėĻŋlé$’I$’T´’I%H$—kí§Ž˙õ⃊ž Ų&J×Zy3#hĐČ(ē  j›“ĩÎ#¤UD3M9ÅĻēl“æ‚ ŋV놰mūY‹o˙횖m{Ūë°Î?Ō Ã@IO4‚J ĄK‚ABP…vB,Ļž\đAÚ#†ž˜NīC°ĸ(S „CŨ6O&î\eŨŽŊ/v°zÕpwŌ~ÖĪáz}Ÿĩ†z͊Aļž&ÃV*)6*Ķb“M™Î\ ЈˆTHZGàŠ$\lD‡túŧ4Q8lŒāĨãw„éŽŊúŪŌŨ˙öš(Žāˆ‡e™3GwC;)˲=5Ŋ;a›jĮÆŧ0V°ÁPi†¸8a* SŊēi°¯Šī—mŨ¤$Đ@žĄ$8RCÂ&ôHMSÖ­īŽß×wū?NëŅÉXDؤ&ša AîWXXĐ6V Pa‚lW0BáÔC†˜Ml.`ƒ<‰Ĩ—Ũ īUû×ũ„A÷]ŌIRI’JƒJIj`i$I$’ûøw`õŪá|qIĢ 8h˜&$Į†ˆˆŗÚĖÜL/oßüoôŊūƛ˙ûëa÷ũĢwîN&’T‚JœŠ2á{ŨëV š  ÂqÁˆ‹_õŋPë¯×ē~ā˙´?Û_øCƒũ…ūū|Ė•…n] Đˆ´#÷˙˙üCáũõō#¯ ˙_Ũz'ˇKžīŠŋ™Qũ˙ëŨ0˙˙éx‡õË×Ë͆˙ŋ`âŊæ×Į˙sŊ-20öqčī3g™Ō9AddC:Ķ,å¤×ūę­˙˙_Ëpƒú˙ũŪŋoũ;ĻžŋœGãC3#„xh'”zˇZŠÃ Úaœđƒ4hĻĩ˙Ę~îĩ˙čA˙_ûČ-ëũŸßūī÷ųF˛_aǃBĶ%Ŧē)ã=ž/_ãvĶÉŊ Lˇ ČŧEĸe™ŸßûjŨũ=˙ˇū˙ëmuëazũb­deÍ ö4LvĶHˇĖøaj¨%Ų+aM;5īŨÃ&đÚN…L6Ņũ2Ü đNī;(S>˙ø¨Č,˙ūŊēä—}.ŗ?ķķiũĒam}Xˇ†ixAöĢN‚mÚH7AÃ-ûˇ}´ûz.kzũŪž\-ŪŠŲ<ÁÚ;$ddB4ÕU]hH˜öõĩŋkˇũߘė.†Đqļ’v´Õ&œŽ5ũ=Ū]õdßOôø´(ģNī_ĸypôīĩm¯îÕ ]ãͤø×ĒkáúÖĶí.ÕôûNÖ ;M:sõīWkM667ЍTB6Ą‚a5<%~6ô“à áĨˇĨ¸~;ēßĶíoĩ_˙Ž6ëųÜŋa­Úķ°’•VK 4N߃aĨģ 'ÅĻÄ; 5°Ąck†Ķ$ęwAÄDaˆ‹Ÿ˙ŪôėUöŋwž÷×øĨÛ˙ūŋĶ×ųâqi>ī´*Đ'™Æ™øÛ6ĐiÁīĖébŸkh4ÉZ ŗÍÚžũĄ˙ÂTYŌc“`hÂ(#Čš—".Øb‘ōī×­ŋū´“|ÄēMÚúÛØûũ¯÷Ūúû›Ė__Ríē,wžaˇ§PÖ˙Ú'—hķŊŌŧb˙ë¯EÛɸV@ŗ‘Ø9BYnœČ,„5B-a´ĄéĒ„•$’ ļמ˙"ÛžöëđÛŪÛL&Ÿ|?¸Ŋk‹ü4īNé÷uwīéú˙ūE„Ŋ'˙ĨJMË i’wļv•™8‰…é‘m‘aÕ=rQ&`&ļۘKAVI¤Ŋ÷iϚo{g~œ ĶƒēoMX?ų‡õ[Ö˙UđßũũåÕģīū›ôũ7ķ´™ “("hDžØvŸiõzkˇņ &œSLS• ¨4OX0šl[áĐA¸k ļøiŋdã˙AŋÛļŋ¯ņÂÃ_ãŨ÷ūČâ?õOūĒå@Ļ#"ÍWņZhd Ô6ŌmžÛíûü´‚ ‘^ŪІĐŌ°Š…A$#h-Ķđ 4'8ˆŋŪ/ßëúŌüp˙åē˙öē¯w˙ŊīÂ3úkɏÃŲ1ČąŖ°`Ŧ;[uļĶũīŊpЈˆ°’ŠPá‹' ": –ŠDDB DÛ˙úüwäÜÔ}zú˙Ž˙ÚÛ¤‚č”WŠĄē“Š.š8Ŋ4á mĨoMŋŋøcöl‚1Aûkûí˙}}oëĒ×˙ûĖ}˙ką;í¤*'u,#Ē#ĸ@§ øˆqfŖ#ĸrÚ§„ûM÷~ßßŲMÄC‹û Û•˙ũnŽÕí~ŗëfŅû_ļĸ ĸkI×r!ČyŠh.< Â]×DĮrAaī~îū ŧī ˇˇŦ.¨ŌIRUI˙˙įĩę˙˙Oö#Öũ5ŠÄzsĩSR‘gīã°Í2ú™°˜@ŅbAŸa‚ SŅojƒ˛nŅ'iém*žÚi]¯ö“ļĻ卸‡ö•U—WũÛ˙yš˙¸¯l˙ĩa4jMie[ŽFŲŖ.I’ û6h„-2†F™Ŗ ž°ĄaM4Đzké͝=; ] x\ģ˙ÕzÚ*ÛoÛoīlķĩvzĨI%ļ}jßåöÂm˙ęĻŦSBqpˆ“/ŒrT44ĐhCL°ƒØ°ƒ'":yČĐEdŨxbqö(rĮn‰Ûä‡xtüZ¯uéĩũņUUČjúrFŨwø<”ÜČtũ^ôŪëûé(*„”(¤)B„ôôĶcAˆė“ÄGQEŽÂÃ ĻąlLôã &J ežīĄ 4^7Á;7.í:@˙ôûâííZ_J#éVÚˇ¯ˇ­Ü”pÛō0ŽÅHˇVesX‚]™ËKûÕ­ļrMScŠc@騰Ą°›ØVĒAũ;.Ų!ė‚tNėžXMyoDáÍwpÉģšoÛvŸv›§÷ięƒļ7ڏõ˙ûu¯ŨmņõĶyŦˇŠUdX;24É\u"$ÎČ4ÁNč~ŸÕĢáĻ›v°š œvƒ7 ĸBũÚ¤]ÚÚ§ēmßŽŌ ĶīnĶH¸MW˙õãØđāø<č?Ú÷°—ŽÆŸž‚ûĪaūO9t ėM'§„ÂÛŽžŽŦSĶ´_´ÃCB"!šĐ‡ !÷éˇz~žēŋ¯ûëöŠ÷ßžˇūŋØl=‡`ŋŒˆ?ô˜_{P}ŋĨũúđøvnWČMÚriž6ŌbšlZ&˜L â""#zˇŌû_Z­õ˙OUcøũŠß˙_ŽN.Rl=ŧ/é ũšö­×˙ęëÕÃ"…"Vg‡ģ´ínĶīĖ8LPh0B"""Yj0’DRŪĢĮ˙×˙ĶQí¯ø˙F™ā¸[†ô_fI˙'č>ķOŋ߯˙ÃNĐ>î.Cž"ÂũzP’I$’I%Åõ‚đ×T8uJŋhčŧč“Ãaŧū˙Õ_éiŪŨ~ŗmōú˙ūIJûõßĮ˙ ‘c„’I$’H$xšjÃúØõŌ$˙žˇA9ė8|æômw÷˙ũ_ĢīÖđwjšĶ'%ķPÔāĄ?6ÍŗâŸ#c3ē"2>wHŋČÆky8ÍÂõ ĩá­[Š:ûũĮ˙ņB´‚ŧ“”‡Zč˙¯×nb~ũ~ūü†ŋūūĶ|$Ģ„… §AÚh<"ƒ_í4⁓Ëf !ffÆ|‚" œ™Ąfž¤)g–[‡„ÂÂŅčmzķ˛Ī+&=ĩÕōë˙ßßûAx7ĐJZI$’I$’×˙_ÚëŊL.Ųɺׄō‡ęļŽļ› ÂĻ›ŦSimC§„HvĄĻŊŊ‡´BŲ\Z&í;@ĐĶ5CˆrCԐ0AĒŖE Ņ'~ƒ°L y6ᝁ#ãmNÖ]=ŋ×˙ŋ˙ŨÂp˙āŪ—ũ˙ļyzę„Š>ÖÂúv›}]ۄĶAā„$î™h*qĐØN ͞ƒÉä;JŽáĻ‘;}^ Ō,v¨œ4ÛTaßpÉGAXi„ËO2Ė”ÕéģŖÎÅYãAßŪÚū˙ßæ?ôŗû˙n˙wúIL*I*Tš‚J ĐŽG665ŋÕ5[OlšdėŠ<0L!aà ĩzŨ'KwĒnk† ^:Úi n_a:'vĨæXíZDáÉÅ÷ ßģ´ )w—›2V?˙hė4ƒoø¯ūÕĪßĻ÷éöŠä9í`ôôØjšn6F;ãbĸ… „"´Âs°)tCæÂļ žĘ\īûv×O|WÛ~ôzvëzuzŨ'HķEô§A;Øĩ{[Õn•å;"mH÷dU>׉ŨÁė–>°éÛ?Ũ§wpÕ;ŠL&› Ã˙aŪŲÂ!Ļŧ;IŠ áÂlŽ&†ĐˆŒĮË.ĸB⠐0t>F@!˙Ž:ī×˙]â­Õ˙ūûN“tü=ņėj›ü&†­ĻûÕFkiģû`­…Ø0š &4ՍŸwĮ§ (29 l0Ģ]BØA°áĄĄM&ĶB""Š$A;'B5û¯î¤āá×ĩøzꞙqãĻŋĩ­ö˙Iŋ­?¤Oū.J2‡œI•™‚ąÃŊÚ}Œ1[ŸŅ>AŽaˆv.6ļ*(4"""ЈˆĐ‹¸i—Žn"#ū+!āžũũ{žfÖ+ü°U˙ü0š{î<8z}ĩSŋ°žn50MKÚ"+'6GīđáÃ˙†Cēšh4ЈŒˆ°™ÃB$ķXˆáœÜ.÷–5Sa~Æŋzûü"Om);(—§Ū˙ŋāßá×ɎËĐsĩX†34y„ôĘÁÂÃĐg0šWØAĄÕjÛ읆Ihˆ„Ct”~ŋĸqø?oŋÛú„îô?ū¸ŋ˙í˙O~đ‡ō$Īč%”‘Ã"ŅÆff ÂaAˇåȐ0ŸÜCôëÚ É+ģUíoâ"#ëNžÕũGáŊm.××īūũ>Ÿ¯ļ˙÷ČÂTėÛ\œPTĪ™›0h0ƒˆ´âÚà ,&›‡ mē'omØ$NØ}ÚwĮ˙ūūžĩúŊæĐ}úâ›oī˙˙ũ>˙ëÖû" 0aoiĶA=Ášl[ Ŋšē;a…aĢMmŪŨéŋƛiî‡úōΊ{/Ē؟˙võžĶ¤ĄķĒŋíįÖ˙~ũ¯o­ĒŋíøAÄ4\îߌģtŌa“Ë'‰öÚvŸ—Î]ŧ6îÕÚŦk1×ŪĢéŪZ4G`ƛû´ėŌíĩī°—}ŋũôŲęÖÍģOĩo_Ģ´Đua$ŪüĮųįđîƒ´Ķ‡ŌmáKÆË‹ģ[¯ē~ũ6“ë÷Škéīŋ” ũe‘Ņ|ĨH2Zˆķ}â“MŒÔ ,ˆx aÅ4ØJ×TĶlãbØÛU†läÚöގ pwQh4دDī'•{ëë~›Æ­ ûũk}īׯg­ũŨļĄô;N,;×}„Ŧ[#}čj*Õ &ŦL;ŨÚc6.Xģbĸێ[„NsëÚúzn¯ņĘÚũ{ŋ`ĩúĢŲ_×÷„ áŋ÷iŸīl‚ëģĩv‹ ™;A„&õqUA„veÔM2V˜Ų`Údp„ĶĄÂzMS …˙˙˙"]ß×õĨŖ?˙øŠ˙íųz„˙ûļ)zĻŪöˇehE„ĐˆˆšĐˆ`„D0ƒBíŽ)폏˙ßēö’ũž)ũ&ŽũwIđßđîŧ'iäD[…o¸ŋÄn„DYԐ­¨˙_ŋõßɎZ?˙Ũ/õ˙˙é÷ÖŨëiīzę>3ŒlDB+Éœ{˙]ĩīT+īîũįŦĮ˙ë˙fkûŋû°@ŲŠ×žvPŽ­ĖãčđšĻNFōŦ}Ķkė˙ūēm_˙õķ.žîˇæ;Kl&ÚiÃu]âņ|Éo*dmŠÉ㙏 a“…A„ū4Âa>Ͱ^Ą˙îīÅ˙gŸęˇ×ŨĨ`Ŧ0ĒĮ절UiĻGhUNʑ#3gÄ3j§uŗ|dãĪŗ†53h `¨Z¯qNÉã—|D„öˇZ÷éwîĒ›huƚm›mĢqH‰DÉZjاĄōA‘Ŗ5 Ma„á €•æ ÆCČdƒ'#Hŗ… ×[š &Únܜ7}v*Dīs! Ē"ČV}i}?iÛk{N~ĶM4ĶĶ Ō[ÚqÅHãL¨[4"! Í p˜ ÂgƒŸąi„|A‚4 ›hCtLwĸᆹąÅŧ•Đ]o//û˙ty„ĘįØhė¤×ĩû[X°› Ø­ŽÃ ƒL&švM: m7´Â !ahDCx4NNĶEÛŨ“z'yvĨŨ:vRcļ-Ų'H čŧ¸tļ:NËëm7ûéÕīÂĶL¨đƒÛĶ1-§ ,Vƒ \WšīA„-4×ĩA„Đ4"#† ĸí†NōãMģ´õtč&öƒ.&íļÂAÃ˛|Új›§ëīzvĢOkßĢûž¤Ŗ*Ŋĩ‚ŨÅ%h;"ƒBÖA‚§Ü´{]Ķtéj˙^˙ũÕ ƒíuˇ[ŠŋīUžõûâ˙_ûų7¨œîŌ‡Wŧ4ūÁš Ø!B !ÂH›úNŋ˙‹_ëŽõmĶNõũ~7×ūŸ˙ß°Á<.[• -Ã_ŋūRhDF”?˙īMVū?ĄõĒxúū߯¯˙¯×ąPA‘ĨéņŨZ×ĩ˙ūČ÷ũzęjĩĻ׍x§īô—¯Ûëŋū˙ėčŅ'únv6ĨZIÚ_Õr^Ė2Ģ8ŋŽņxũø,Tą6—ž Éë˙īī˙úûū˙Ļ ;ĘםüNČü3lũ<ͰDZRpmĪå>qœ‰ÅS3.Ī™~i˜××.0ƒ3#dč34Gˆlų„YVįîO?Ũ~‰=…Årô#ÖŋĢúˇũĩũ}ųž+íkØ@¯Â P‹D/ˆ2…ų‚4ĶM!„ČŌ/3)ƒ5-’čAÅ wĒ„$s 8yd%ķ ßũPßũ.cPO˙[˙˙ÚųęũĪ^›wϜ'hĒĮdĶįVq§•ŗTÛzoN͈`i<\zģf! Pƒ3 C͞惃NF>h}Y‚’ÕNī+Ķ+–„üŸ:Ŋ˙˙NgļF˙¯}˙ĢõsÖc_ŋôáĻ­ö&Šßzh2&ŽÁRš†ĒŨ˜dæF“Ļ{tkpÉY>rqdĮn¸ØwšĶ.„ėŽ)¨L&é#^ĸ.Û°  í4ĐvƒnŌAŧË\‰4Č6›Nø@Đ˙_ũ~úķ÷Ú˙ëÚ˙ë­ēĒi„L&Åän؇ė) Cë õ#Y31B}°÷§°ƒQÛ¯÷´ûģœ6šåå—Wwh:']äâ‰ÃdŪ‰ßhZđA­ŋwßoi_[\4Üė^#qĄ´šų„ûoë÷!fÂČY˙Ė+=vЎL[ cŠMŠM7Tö Ũ’ˆˆŖķdpŋ'Õ2D} Ęŗ7ŅĄĨxmØOēiĨõŠßŦ_píjøøûWŊ4—ģAĒ|jNáĻĢVŨ|5Ŋ/Â´žũôÍ;M5Eģ“ŽŊĨûfŨ¤Å„ 0œ8îÛ=iĻ­Ļļ@ØĢƒ.miĩ  aUЏhW*c Aσ=ģM]/Ũ*ŪlŊŽ5ū˙ŨŽžÛëéņޟ¸o Ú˙īēņŨ{¤ĖIŨßŦėtP3@C-5ŌĐOnļdQÍtĢ{†“Aà ÁÃcŠN)Ú ģģ´Â$LôˆˆˆáÅķųŗEŽô[ģ¤ÚwŅąũ{zßi\‹Ÿ~ĩŋúWõPãÃöž¸~ã÷ĩ¯¯ë`•ĩÕ5äUҎŪmļa0KvŲs„ĩuŧlTh0ŦPi“ĀBČã76ŧ†ØĢM hˇB"ĐhFˆŋúv“z ēiūín:ŋˇõŪÃĮņū|+[ūÃ˙Ø{CūÃMû‚ uYôG̍đ„¸ŅŲ+6d24YN"gĪÍN.ôhËēAˇt ]^¨4 SMˆˆA8 N-˜M0|DDY?ˇŋí{{X˙év˙ę_īÕ7ĩëė0˙p°j+îßäâZëCcčFß-EĻ }4 Î<ÁĸĮ~‡G†ƒŗAm´ƒ{īĩ_ú´$Q† uq7ûaëûßÚSë÷ĻÅSkolōˇúĸQ×§û čĖ(na; oŦ*˙ßĸCõ÷Ē'g'9"…žČŦuĘ#”Zv§ †ĄÛ×ęHvÚú˙ä ëņm+K&Ãü}~—__[Ûû ížPÂkžīđŸãŋ­ūíÛ…ôÃtú/;õˇđîŋ"ĻdâaBfË ‚ ~ „ øD 2XæëßôÛē#uĶ–íßüzųn‡ö)ŠļŋuģŊ˙Đ[˙ŋäVa65c×˙´Ų#˙=>bũ,Ņ}ũūŌõíž˙ĮôŠxž0a‰ū…éöœĐØˇuŊûũÚE˙ m&čVũ}ņ÷aAŋüôŪ?īë˙ļ{@ØĻmSīēw°^ūū¯_>ŸõÔåæ×_æļ}:ūÛú@…´é÷¸tIÛ`Ú.Úģ%÷iÚŪŧ{ŨūŸË‰¨%ëë‰RNWŋČô?˙­öjEŠØM°ĐˆaBiŽŠôÚÚĻöНZ}žūÛM>ĶO[Ė-4í†tÂvyúIˇĸí׆°Ôŧo ÷õnŸëęŊŽžŨkÛôi¯ũõ;*Č=úĢ˙˙}ļąTĶėQÄiöÅĻv4ĶA âŖTĶ´īu͏ė%ĻÚéĮjÅ4ļÁĻņ]Ē/Ŋ=?í$ũjéoÕ×˙U{÷[˙ŽŠ‡ũ˙&éM3Ě¯NŊ?pnÚlī<ļ…ÚLŖ Û§˛pžúhÖM cŊėU*ÅÆĶ@Á…‚h1xkŽÚK­Įõ¯öŊũv×ķAWëũWúW˙4VžeņDtj#ēL”öšūŸ÷g?ŗšiąģļm Ä4 ÁDE—h^„.Bi´"}1*-SÁ ÉԚnŲZhDIFIî\˜˙Įŋ´Î'ũūš˙ũĩđˇū—Û^#^ü0­ đąk”ĘģZ4/ūö.ėą Ô4DĘ"&ԈˆˆˆhIđ͆„E„!Ą’ÍDDz Ĩ}‘Â-žĩûMZˆ/û÷ĩē5úíŽ××íXâSûļŨ‹~Đvą;ÅũÁÜ6™Œ5ˆ' â"""(4–›ŋŠ<°úū?B˙ūIŋ_úķ<åÚļ›M0[áôëÅĮ:4΋ė+ĩÂϘ!a‚iíc~ęšĒ$ûmëŋ]šŗ_ûūŊ_ŋ_iČjˆ”ÂŨŨ揨) ‚›a3ÂaW •Âvjiø…^Ũß OŨ‹ëūˇ˙jÛößÕŽąW˛QÕi>š'‘ŧ h3ņŗ!ôXėĐCâb"'bÚ§†Ļž˙ũí˙wúūĶm+‡ūļģÅ6aĢl84B=õ”‘É}įؘC23a:EÛMQnŸH:…ĶîȏˇũÖÛÃūũŗßúiĮöŦ4U›iĩ.áĄōæļJNŽ"-xšDėÁĻH šĻǚ„˜aSļÚN×ļ‹Œ×s$´M#GäBF…rf#‘ÕK1ęÛzÛ=ZwęģžĶôíSĩØ[§vė…ÉA1˛ĮB‚•™0‰BͰˆK8dâpjB0„×4a4Úa>Ø[ŧĪXĖĶK¸kĩŊ=:IÚ´)‘ĻEŦ[(eĮv™ũ9” djލË\æwfíŋᅴßáσa‚}ąQi„Úyé5 „2pĄP´"—šķĐAœ#fƒ!3…a> ?Ņƒˆf‚]„ÍM7ÚPŪ×ŊH°Ëˆ""oūâ´6ÕߍŸŽg, {Ĩíļŧ뇐fˆų„”ė°“O"ŽÁ8v’ ‰CļÚ}UŠA­28ˇˆŽ ˆˆ‰õA‚°–˜A¯ĻŸÅÍwCiĶDã$í6›iÃEãl;ĸí‡wÆŊÖŌ}ëĮŧs[20ŠÜĪ!™œēičö÷J ö’ēm&ŗŊuMđî:tAą„ „Ķˆ‡a Ϛ &ƒB"š‹ŨĸížčąîōxéôF÷Н\&;i­:­žŠŊĒ}Eßīz‡z¯´™Įũía'‡{í}pëAíiöƒNœvęÕdĻ"!”ŨUí˜ļÎ4žŸ îõxŧŊSĨî‚ģ͖•ēkü_øĶ˙ˇYĐF ‡÷”įßŪĶž×Ņ(ßņu᧙īĨ,~˙īâ!„""Æ7ģöũSīŊévļ?Ŋ=zˇ_Ž–’Ã×ũūטûƒÚ;ĻCŒãmsl&߸|âkwĨnŋū†:‹†ēÕīuÆ÷īՏīûđö—ī¯˙û˙ödq6ÅzØ­ļü…gH ÁÁŨ§Ú,wīoĻž6?ŨēZō`ē lÖĪ?^˙ žD<Áķ? "T˙äQ÷Ô?ö¯¨<}?ūú˙#‰ū­Ķ,øÔÕkÃfÄō5›ižpíCíŊ‡ Ũ˙÷˙ņ¸ũĪ™r3AšdtBGŒđĨ‚)Ų›6Âx õ"#fP2!&O”W%ÍʐfOFØAá_TŦ'ë˛;ĶXíûˇˇÖĮī—˙Ã:?¸7õA~ōœ•;ģJÛëŌßęöČ˙ˇú' ÆĄ4$øžš iő}4 ų„ "``ˆ}y‚ •!OŗmÂAĻža8˛qūYH7O÷—_Ļëũ¤ߖæ?^g^˙CūĄũ‡ÚÚëŸNq:ö†ŨÁˇW ī˙˙ė_Á˙į˙{ráÚwOj4]ļIȰŅ!ßv‰ŋ]0ƒtšfĄ›3zv˜u™Ãŗf…Ëw'l ôķ°Td•š2 •X'įayŅ˙ö†õĩũŠ ˇŨŨ˙˙ūswÃ~•Yš{OOzŅÛļ˙_õû˙í˙úNũœŦ¸I:.čąÛģS]ģ'¤Û@Đzá“Ímà kËģ$3 ÛEØzÉYcļßDĸĄˇy;¤ž[ŧ x&LŽí5wÎʰƒîÚAú÷íp˙ū×îķ û{3X}†ˇá°îûĮč6īõ÷ûŨ­˙åŨ×ģd/;×Ŋ6žpÜ;Jôá īŋîŪîũģĩ´“a ÂÛIßtˇ~¤ûĶĶuj §í’ y)Č Âp××ļ0ķūŅ'yô_÷ŋöļĘp@ؤė áŊ…Öéz˙˙×é¯˙k­;Ŋ6+Šõ¤ûÕ>ũĶģ÷íĩ¸øĶ{UûģI;ŋžÛWˇ˙ęמĶ~úĻqÉßŨŗü:ūŌÕŋˇl'힖÷í$Ņƞ°ĶŠc4ü4ƒÁÃMEEwŋŋ˙îž7ũfįͯmUR—˜^?ŋ×M/ößĮ¯Įû_÷Ûiëņë˙Ū ö›ũßW˛`Íí—"Aģ' -˛WIũm_*î͆˛'; ÖąÃģ[M;=[a$q„é0š{Ww8Ũqj—ĩ˙˙˙­˙īNö*E†@ƒˆa^¨m{TÁ?×õ_Öĩø?ģŽÖôˇ˙ßũ ņ˙v–×;Cи†i˜i„HÍhÚzûļ.ģØ|SĻÅņMa6?ãV*Ųc ĶM6„Ͱ†čE'k'ú˙ūˇ˙%Ÿ­ßϊ˜Xˆų"4 üu˙¯āŋšđ°˙ū Ūõŋ[ūŸešŅzÕJ´Q›'ķ™ĐˆŠHY'ĸnÛM4N'!îíīa4Ø]1PۙĶVČŖÍĘá„;0…Ļ‚Ј†DDF*˙Z˙ũO_mœ“¤Đ~Đ0Úa&āÂ:¯ĩ ĄŪ ‡ß˙Ép¯øD‡ôßõōĪ˙ũ˙īču3 ūB÷*ąÕ“æŲņ3ŒO ái„ˆí>iá<'ė-éíŽŋĢà ŨÚhAĄ !ԍ˜‹EŦFhLV˙˙íĨzk|a7[i„-Ļĸ,1„’OīĢŋëđDī Oáŋīņˇ_ûû˙÷ ųÚHˆc3 dfĐ`˜M4ÃĄ6.īM9q@­ˇūęÛģ[úc¯īB" ÂčDÍĢW¯úŨ°ÂĒ{dˇÄ4"#ļé÷¯˙īOi/TŸÃoëūŨ?ßŊz­üŧūS‘ „ 4đšĐqĸq}ļÉßaļÜģĨ{×ßWO´íuSŋņĄaÁi˜Ŋ4ũ8ĒŨ„B-•Ã÷T”%¤H$Š$’UÛßūfƒß˙ļ˙_˙īžŠ_ážEÃDáōáČŖ´^0ˍ7Ŋnøf<ķIēĒo}‡ĩū8ūļR úî#ĄRøi Á°B"+Û8ė÷|Vf›ũŌ_IkŌ×ĶôŧÚöøzūļ̧ŲĮ_h›š8čģi7†ô˜a z÷ũŌnŸ÷­}ÚønŋúēøDc˙|0ļŸhDDG$ėímZ„V›g+vM´Õ8a$Âh;Á<*„•RR<´ÚîēŲɇˇŽŪÚJœ0”a5×ꜞĻũŋkéÚomÄ_˙÷˙Úė~ßũr@–•Ē ũÕGÁĩía6˜Ļ;☰D-ƒcīm… â˜°œvB‰$ ģi&œCĩ´ãkžĶũ°ˆ@ŸIëkûß_˙ũ}\66×øDßTũŪMŌx‰Ų;[$‹h0ļ‚m™' Ü0ƒB!†ĩĻJč1L$â—`Š$!Á0É<1 áLá đvš}j?ũkũ…×ŋīë˙<˙ũyœ)b{ûW&ËyNÂfDΌŠtÃD")äÜÄH`ƒÄX a„3Ú´fššĐhYzŖC*íA…¸i‚  ÂĘS‡ ž/5ûüB˙úį@ží˙û0ŸÂ$? é˙¯~´Øŧí:$āŸ•4Üė|PgôʁNšz PFõÛ_˙ņå)čÂi–æ†TƒœÍš•“íCÃ@Á6ՊaļąQM;NĶA„#MaÃ"" *Cā„;A đˇlZnŌ Ã%ƒAŪ`wvē4C3ŅyeÁôė¸ĶõímuûUĨöˇ§wQ]Į˙aũŽíqī˙īD#œ´är^ĩ$ ėTRņڐSČ*ēw‡`Čãj)Ļŧ<ˇA‚J„Db•$\$í=Û Ŧ•ģEØmR'vƒO,{Á;ĩœaũŨ'Û ĶĶ~ۆēŌÜq_ĢŋUÚĻĖb×˙§đŪŋŽÖˇ˙ęLk„ÖŦBĐŋpdizvÍØiĄaCD4 čB"-žô› JЏ?NɧÚĻ˙ŖÍ“ČiÚkmü=aëÚ×Úņ˙Õ?ąŨ}ß^īīŲŊļc˙v÷˙ē¯÷=Ã1iĸo]ü40Ŧ‹ <œ\4øho=ę˙áR4$I,$Ē’é*˙ŨũŪŋėo˙÷Køö ÷Žŋ˙d˙Øo߃õūĶkweÕÛĮ­$!ėCK'ĐĐ;Ķ6zk\~­A߯čWĩI$’It˙}?°ø>÷ãČb˙ü?HœVūŋ°Xk˙ˇėUwūį×g;/ģ }ŽöN[÷[÷–éÃŊn˙Å&Mōü_z˙ëęČâ}ÉZI$°A$—Áė?ז:Áoų̰×ÂÚ÷˙úđo÷ĩĩaĨkl[Ä%ŧD4:ÉũIyÔé} Nī˙ū ĘäˆėFD6Ŋ*˙ũ'÷o˙x"8Ÿ˙é%¤šI%ÛtIī˙‡ũ,W]Ũ?˙ƒôéÖį*Šb“jø`ąš ؂"LŽm6A> &k{š˛vt2‹Ę‹÷Ė _Á‚„GFU˜Aûl|œM}ũ*\3Ŗ˙˙†đßZI*HßūÛpmũ/īü?Úųģöœŋ|bM ‚ŌĻĻƒƒO‡—z)@ĖŲļž0˜@ HææĻːøL.FhĖ3Gâ´čĒ|$ũĶ%Gëū˙ßû˙Ö=ø7ũáđūô’A$’I+I$ŊÖûøŊŋŽ•ĨÆŽF*‹† ĸoEÃ`˜'FŒ];č âÂiĻtsͰƒcŒZ&îĐhXOÄ'IÚtČ38Ķô]ŋ˙õũoûŋöúúÃyŒ=˙æŸĒ}öR{M0ŠoÚ~ŲČÅiąH;Ž:} ÁIØ&OM´ĶáĢ\:'v m’N‰åŽ]´ė'ļĮÜŧ ƒ|ąŨĄåŧ-‘qŋ‹š…>IÅú ˙˙uũŠŋīŦAÁ˙g7ōŸŊ{íĶî×ŊP}…I-% !H0” š&÷´"!„M>Øi“ZģĩØËĪôāŌM¸mC.5{issŨ—ŋOūy˛N‘;ꥠú^@Ũ’ŋū˙˙ũõŸ—[üÆn˙}öŠ´ôŸļáρĻV4ĢĶÅÖÛQo8üCZMDė^éxa˙íģ{Ú~ß[ĩãõúûŊ: ëžúÚwmԟši8Ąō+ü]“¨ˆˆĄė_îŨi?­Ö‡ĨÚøŲ@•k­4_Z˙Ŧ¸šž—“ĩŋ Ö yš6: ĩßúíÚσN0AØKcv­aĮĶĻĄ0œSQújH%vaЈ†Z U¨hNĘz;AZūöņīûųw˙ūŧiŽ:īīũ÷’.÷ō3ņÃdųT`Ęhz÷Ūh.š'uu˙Õ¸iÜ5 ÚÕ[L!ĐttÛZjŦ0š !a3ę OėSiō+ĩDduFq ûä\ŋũƒų§ß­ëŽL}ÕĮ˙û˙0¯ũ]÷Sģŧe ĪÁ4˜L šiĢw]]oûčØMˆ{ œš  áσ8P/iĄ§ ”!$؈ˆÚ]!ÚÄîžb žhŸ õ$÷˙đotŸŋöÜ5ĐÂƒŽ uŽëúú}˙W;/(Ķ;øû šFŅö~œTЎ-45úÃč˜ī}õa?_´Đ;MˆŠB ÂÄDF<~ÅIs3ÎD[a“Ŋƒí´\Ļ÷ÖģW˙ëĩī´#īkíŪŋžĢ•˛#ŒˌL".¤ÆČū@ĶßÃM;#ˇ$ôNØd‡îūß ģ}ēõÉt""vąJ˛Ũϊs3ĖPgNĐi=ļm°ũ:ūīëûũē˙õ}˙˙˙˙¯¯ë‘‚Ä4Ž Ī4Đjí#BÛFæ‰;šÛM<&éÚ~îŊ×ÛPE?üDukÜTķ"<ēčÖž*ö ĶîũúO~˙į ūˇ˙û˙˙˙˙ļÕē˙‘14äW¤píLøÂ' ÃA‚Çs×ī¤ú}÷ß]ú÷ė$hūč\×ųĘŖ4Œ3ˆÜgú Õļjøné?_˙ÛûÛüÚsĒvÚÛ~ŨŊú¯į˙VÂĮũ¯ÚÃ@Ũ6ûJ ˛ãNŪø˙ūŋí{ŌĐûÕ~Õ*ąH“¯ôD˛[r‰8õ™‘ Š”H4đ­Ŋ][ŋÖöŸ˙õÚŲˇukkßĒh4ÛŋKŗ•žŦ÷g˙õmS ÆKƒv×´í‚ģFįN­ģôÛŊ~°Ū¯ė¸ĩ˙˙í˙¨ųą‚ũô„›'Žķü&n9œ“OA”>Ņ 7ouõÚ÷ßäuŦ+úžÚö“acB‚Öí5ļ/mS†XØÛ ØL  ­Ũ¨D?0ĩé m§ĩž~÷úëí}{"‰˙ãÅ˙‡÷ūŌæi/×rl”Č”vLAēgŖö`ĖÆöĒīŖc6ŗkKëęŊĄß_Øxéė§_ãąIĖãiŠÚØĨL4!†4 ĻŖb“bĐaXûŧ4Lfbßõŋ¯Ō˛:ņZũŋũë‘/ū]Waˇ¯úO~ļž'a ˇM4ôõTí§ūž>Ûwakô:˙áŊüG÷m ZiϚFž"Ŧ$ØVČwN ˜L×do ãՑŋ*‚e-&aĶ% ŋ˙ûž!ū?ˇū–;5_˙ģŊ˙ŊQ›AĻĢfJJúø}§ģ Ŗ]õŨôŽé1WÄ}ü‡z˙ƒŽÕWņā„ Á Pˆˆƒ< Áˆ°‚4ÂЈhDCDGë†ŋîë&âŋķĢ_˙˙÷Ũī÷ūØm‚ &žkÎĶÅ=dŠĒeSŊđŌžîîõ{ ŋūÃģ˙õÁŊū`„DDDDã˙ŨĻĨīÛ˙I˙î×ũõ[>ŋøí´š`˜uûĒyâ5ũ~¯Ž?û"öE„˛{īē÷×ȗOÛiŨ°Čå˙–UīÛķE˙­Ũ™¯ílõļփL'iüŠíá ĐŨų%ßŨõČš˙ëz˙ûŪÃhtŊwT˙¯A­é˛&Wbžī_íßõéŋölúĪößà wŌi6ÚÚn'éÁ÷ū‡Čĸ6Θ ÜŌ#˛wû_k˙ø> ˙ŋį“í˜JÚĒll2=ÛŨ0ƒ_ûéûnûÖĖ/×.$[jÁ…PŠņ mí4!ؤĶh~ŸuÅԊKäCT'™’ Đa6Î4\? *Ŗ]ûúķëūõœéƒ/ĻöÚģZaDg€ƒ2F[’ÁAdœŧĮí„ã USŠ;á; D3ĀL ÁˆˆĐ†Gēr d\ŦÃĐa8f ÛĐaz‹ˆ`•ļČâ°Z&ī‹EÛŪ› 8këzū˙ĩpˇīĻŠĒąi톈ˆˆĐ3ąĩ™x¤J;™“1›É–žũ]{,tĶ´MϚhDDD0„L•¯6Â`ƒ´ōĶ“Š-ØmmÚA„Ũû„í+´~ tˡOé>øiī6ŋW<¸ãAÅivk+ĒöĶđƒ&]‚NŨŪã´Ú Â5Â!…A„""%Lö =‹ÁÂEã ôíģT‹ÆėáÛ^ßīũJëģëî¯ĩŋĢ  m2Oļœ(6Ō’˜nhĖÍ Đ:îžîūša…ˆˆŠč\ģĸväáę[ĨíáŨÚßwz{Ü{ūEŅ(˜ÆŨÅ1MM&„4""e8Ē۟iæމûl4˙M;C–„›úM×AôMßOŋí]÷Ž˙˙ȃū>Ôā˙iˇžB""&TiŠWûÍŗ ДNî5ŋŌ 8îJ>ÄGMų}¯ęøO˙ߎÚŨ°˙võ˙$ũ¯ūŅwļ˙ "BaUSųPˆ8įëB Öf™ E+&N<N&ŋOWĻi’)' _ÛöŸ~›Öū?ë.$?öCüĖ/ōõˇ6¤ø7øˆ•ĘÛēi›ĩDgßd‡i˜3a„Č|i„Ī„ōO¸'›gM'>fĘ׿qN0Ą(GĶû-Āãģ2&Œ–7ũķ 1ū×˙Ņ7˙ŪÃ˙|/Ū‰ßú×ώÃūv‘”ņO\ÖÅIŨßÁëxpčŧoIĸâÕĸO ŽÛ%ËļžNÂhX xĻ™ÁJșôBœ$åDĮ„ kŅoPĶ*ëÂk˙ÄR­Öž˙ŧČö´gˇ¯@ŪwKô˙í§yŋ\ö˙ÂĶOĘy†2)+@˙i}¨\:NĶHē$|Đm§w§DŖN‹ÆÅŊ„ŌlŽH0žlT×ôIÚ.Ú.IZ%‹GihĨū¤DŪ%Mû\°Kī`–ŋĐëÕoũôŸŋ¯û˙ípƒĶģKö7E}Š&ī¤{o¸ĩį=†šÚm§ÛĻđÁ$îŽ^fˇƒNœ¸t´&ž›§H7‹ļÉå~0L…ÄŌR˛0˙ūĨ^O›#@Ÿô ēĄ˙˙ˇáúķ{ú˙˙jŲõ}Ÿū8ĩéŊȘé܅ÄmDmÚéÖšßļŌžíë…îõM°ûˇU =ŋl¸]6¯ã7PMōi-=aßëĮvāƒęä]*K¸kŨüŸ &š&īĶô^e–z~ū+~īWĖ*îŗ ×ëM4Ø5ÂĶ"Ŋ6 Xi{d$a —GS 9îÖôÛāúøípōc?kđw wŽ1_úé‡û{ė&’ü_ĨX;­|8tÛŦ;‹áĒ  ˜L&÷ˇúûŊuēÚļ÷˛S?ëk¯÷¯iĒaXõŒ Đxi œS¨ąŪtĪgĮ˜2%YŊ0’\6 §Wũ˙ûZ`Ú_ר> ˙—Z'˙ūÁrpéŽ7ūŽą°di5Õ{ūšĩëâRˆŌ&LÁ Đk.Ûg?ũ™¤ģ_ÛĢ6ÕzlõžˇQĮv˜N0N,'\&“v‹L& ĻŗōaeîüķaÛÍ^ūŊū˜_û÷(ŊÖũépôauüD˙÷BŋCŠËĪūg‘åtОL?ßģ×ßfy!ŸU%™Â Ļy%´MÛN“Ûī÷VÖŌģ˛?a&.5WŽÖ.6¸6ívŲîaáĄĶB",,—ąĶVÄUî×né6¸ūë˙Ŗē˙Ąí{'÷ņß āÚ/?jáģ­ėą& mK¨]ÕēĄĨ,CEē˙úVŽÉÂažm„”°šh=O4íŧ8a=]mĢčh<Ī‘ CAĶÆČŪ‹`ƒ¸iœ0Ą4Ę,A„#šÄ]ß8ŊņŌ˙˙ßüG˙îŧ7JÔĶ[Í øtžū­'^˙ø[\ÚÛm“¸áŌúü˜?ü Â ø˙B­bŌl>nŊðØ=?Ģø˙ +L4+ . îĐaS´Â !ŅūîŖ÷ÕãôŌ˙īūûœ]7¤>“k7“áô•+\ĪĨ¯˙íé}ÕĐYų˛˙÷įs"(ÍÆÂy‚(†ŖA™Ũ:bØ!Þi^îî˙ūúüS †G)AøÚ„D|7{ũ×ũ|O/÷˙ũŋjīNšÚÖŠŨ­ũļąÃ ÷ˇ^mkvŸwMļ=˙yúß~˙:™vhFd`a7iÄ5í0ƒ ›Â' !īG¤^CA˙mŨß°×ŋ~hæt, ĶM°„tƒŋđÔ7Õ˙˙ŗŸŪaYÅ~÷p@ՈTÃJ*5Xh8Ēcĩö­ĒwgĻęŪĪ]ˇĻƒÖA8Xa`Ķö׋4†“ē'n^6“6hœ7 $č“˙ö÷¯÷ĻĢ˙°ˆĮø†DD0ŋ§]ƒöũøC¯˙˜ûl'ūŦkAƒm]SLSÔS <ÎĨ¸A„Å„B('i°ÁX`ĄÃ6ØĶo … °îØâœ(M8Ŋ´HvĶTÛŋ ´šAĐO\ ˙Ũ˙øîh%˙đOâ.ŋžÛØ7¯×÷›]œÎ;īŠžãh0„4ĐqlÜ0š  ƒ …CB!“žƒ aĩÂcbŨĨƒĩ—BĮ0eÎFė0‰4°›xfĖ Û´“ũ{õuôūõ×úũ~q÷­Ōüŗ’Kßø6¸ouß3KöĒĮƸiWi„"#3ŧD‘‘´'TЈaBZ@Á0DzÚa 5ˆÛ(4; ēJÛKOīŨ~ūČâwđ×˙wõũ'˙˙o īëāūT ××gĶj÷Į ĩz Đ´1TÄDD¤Jąŧ~ü¸†bņë×ŋ¸Jŋ×ûõK¯]tĶË!š$ĖŅd_˙8‡ĶîÂpÁ`í‘â Ál! h1´ĩÖáōnQ÷¯/y—§đk˙˙˙¯6ŽŌM8°AäŨdɑ(M×ë_OípGv–ÆÆáĻhEƝą[ČSú]øC}ß_¯™Ąģͯí%õôíU4Ų~æSfAU­ÛūģĒvbOcŽƒ „  rž†ËNëI×úk÷_Múļ“ĄũÜ\h6ĶAĄRŖLėI&îũēĶA§” iĄÉ,FGd#ũ×ûzūŨÛęŦ„˙jšh0ÅDZh0›"ŊĨ !s´údĶÜ6ûũéߚ Â'Bá„#iŦĐ0tŒũņ}|üÚæÕö~Aļmڄ 4 â‚h5aLv‡a°„tÎÄϝ]ŨĮ)õv* ÄDDG?ķ>š"ųi ߓĒd•Ų#;IÆwĻÃŗĪ†ƒd‡lCĩTႄãl mĢÕĨ3ÄDq}WÉ^LGˆĮ9QŗDJHyŌ/í•­Ē‡MS´ČAS°˜OW<ö*EvœBdnŖL+†˜ąh*â,&vãyn—ÔÎ6üŦM3æ`ÂA„ âĶ@Â"Ė^"Wæ8šŦJŒéY?‡ÕũķN“+„í4a A Øa %kÄv‡ĖŌMM3‚)g ĖdXČc>fĨætĄûjƒDEĄ'B#tMŠũIãl„ͰéšDÄ@íˇL h3í4 `žž›Ą„í}vîÖÉ>lÉÛŨ‚NišWšg}šđž™™Ÿa2Ž ĒˇOģ†ÚiĄüVąaˆ°ÁI°ļ¸"fÂÔá^Ęvšttē'm i¤Hvš'Ø|;Ë65íB ‡wϟnŦ4‹įĩEO>õ˛Ĩ›‚"ĸ߂í[ZuŽv=¸úŅŠčXĸÜíwa;Ûá°V.‹Ę$ė0M;[„Iė´Ôt^iļÚVŠ#Í&öši|nĨzqßđöžKQŪķĶA Â.{\ģnMģ˙8ŗGē}Fz;Z’Üž0IĻN!ķ ¯“tæ¸á§tF헂T6ôŨ;^-p­§v—Ûۚw­˙ÛJŸuĮO×ø1MI.gôøf|;0éļŸt­Ũ|ĻčgãĖãÎŦņžfؘ&q ķ$ÅL&lÎdV0fČ Î¯)"C(GÂ3ކhÔĪ=ž @͇x@§v\ŠÄČIz´ØÁ6ízũ§īũĩîąņí{ĩ˙˛â÷K™‰ÆÃŦS(fm2蝐3†šfjÖÚˇMíû÷ģīņP„ōäšiĻ‚ÁD!wö™ļ°… `ƒ;Ū4cˇŋ´÷Õ¤Ūũ>îĶOŪũ÷×[M´:C´er—Í‘ō=œ2tMõë˙×čĩ˜Zīíˇ×­žÁšŸŊŲęÖī1æˆŨúnûī}ÃyOĨßĩđiĩ˙édSYo÷¯n˙ū˙Ī'oŽē]¯ĨŪŋß˙ÖžÖē˙÷$‹\íŒÉœ ƒ…HEō¸Ž„Lô!…@›÷¯īŋÍúk]öŨ™ĻÖŊÛ[?/đÂiŌąÅEęØNŌŌz߯Md_Á‘ŋ˙^ŋm ũ'ûÚ]ũ?}˙˙[ÃŽÕ}‡ō+öą}_˙é?ū?áŋũv\Eŗŗ=0Aߛd)›hŠr'¸Ŋ8´Û ‡dpŅv [˙˙ķŲīTפĶĪö_í°VĪMÚh:m6*kėPAŌôČã‡Xīũôf˜jÕ÷˙1$ŦõĻØH" 0męį­ûk]ûßđ¯ĩWīß˙ĩû˙ŊR|ėŠ‚h A=2Ē Õ ‘ÛX­ļ‰ÃpûOŊ~ˇ¤—ę˜NâŖN ;a8ÖĸãˆhmEąA0˜ģT¸0D3´Ķ_õ¸ƒŲŌKwī?ÚMĨoÃAÚA; T˜đîūŸŋĶ˙kĢüã×Ûų8ų8•˙˙˙ͯÃŋũÆÎ›dQŸÉP4„ąŦ>Đvšh›ēpĶŌˇ%˜ONõ×ūš ēĩ´*Ķcˆ>Šw Ü0šdoQRX ĘwTjÍhDEĻéũūD[úŨŽ^UbãŠhD;°„""ˇ÷õ÷Šö÷ąÃ_ûúõũoÁŋûîŗ¸GĐΚ ؟Áj™ébÜ0—V ĢeÎnÂuz}'a:_õ˙úa‚H0šm5>CGLŽ-4!„ĶOA˜ DˆņCŋûÛ'Ÿ=fíīliíK Á4!„"=$’_íĩø[‘jöŌáŊûŅyŋũ}˙ū—˙˙DÂ 8´˙xšß#ļîH5okt^0īēũ˙ŋ~˙˙ūÁĶąM6›B" ĸ€B""P„DER­ŗÛĨ˙dzBE&ČüRlĻĻĶCT""wLĐH$’A’Ŧõvūžˇžû}ë˙æ{ũ_÷’ė TZ.Û%bSļĢm“ í? ëÚWޚú˙˙ŪÁû_ŧDZDDSP×kÚ§|a㍜uaÄ0JÃ`„G;4“ûīô’J•$•UdF÷úÕ/­˙˙˙ũûkŅĩųĸÁ4Đl”iļ˜Aļš÷wô÷˙ßŊŦ¸ŋūē˙ģĨõˆŒcąVœ4ÖÚThDDr­™ŗ‘ÛÉũoß÷˙ČsõúIŋˇëûūũ÷˜˙l˙iŲuéÚ§jģa=5FëOûīûOcWčģu÷ZŪ ¸ķ˙ø˙ú_{ Ú ZÂhDDZh)p2ĒĶ܈魯ßZō~ö˙ô’H ’ÎI$Š$¨$ĩ_õīa…M8ģ[ Rí80•ĸq—m+§Vßîŋ{˙Iû˙˛ézKĄ˙ŋ¯üFéĮxˆˆÔˇnžØ´Â÷ßÃīõ}=žÕ†n×mvÎZá$×°›zjœ{ĩƒaTiė|&ëũēũŨØ?úģëøŠÜ}˙­õ˙?ēŪZėDËčTĶNâIĨ3‚‚ļL'abŅnͰŦUkwh;VI;\(I$!*Ŧ!IB4UĨīūžßũÃ˙˙žų78ßŊ{uŌŋūá¤ÖWŽĘŅPŠˆŽA'Gj¤zNļ÷sņčÁÉöO TVpÚqR ím4ØÚ•OW§ŊĶM{Tƒ*´$"ĩúī_uú˙ ûúõít?ßå˙ŊŪĶÖČäÆ:aĩũ<ČÕÖ`ÉÛÕ§zˆˆˆˆe: Á 4íT"“i´Ú–č4Ķ´á§i§iĄƒ"""•%˙ßlÃúņ˙û÷ļ{ūîžĪJŠÚ!°ŗ#TNdĖvv“ŗBģ)>ŗ[}ÎÃDJOl Ûŧ6í0ÄDUÄDDZZ !މDDDVEI$’I$’I$]%ûũæ4JގūŲĘĶM8§JՍšaļ9ÚY-ŊŌôš4GŨĸ,„˜ˆĄ3pgwî÷vķžņDD^?˙˙RÜĢÃßũ ט×ŊŗŽÖ)4øâŠj˙Pî¯}xôwĒăI“ĸ†} ŅnÛĶöŊŌᯠ‹!w˧ũ˙úô‚KI ’I*ÂI:éįąą´´Đjƒ0„E„(ĶéÛÖ3:h|—Íŗ™ļxĘu‰KÍŗ‚™ē?a2;‰aœƒÛIŨŅąøõ}žŋˇđč:Ąŋû¯úūũn+´Ž)4Øj6¨ aMVÍSķ:žõB.v!ˆ˜MNĶM4!äIFša4•R.ŌmõmÃūŌ[YĮôŊūö?Œŋëßũ¯ûÛTũŠA¤Š!$Á0B#ˆ­j8ųÔvĨH\¨3lf‚Af`ƒ!Č4Cžø´Ņ7æ¸á `›ģ¤ú Ū]4îíxŪ<ˆIûßŋ ßÍHčȄ"M‚×ūĢũ'ę´G]Ík¨A„Ķ<ĩļōŧÛSfLdˆä™›R„N)枚iĸc´Âwœv­Ũ‰Xá?vÚ3‡.5Ĩēõģ­ę?ˇũßūßÉ é„ČLŒ•Ø;gÍ˙k}ÕĻžĻpTí*…hD0„*ŊHf r3"Ck ļĨ@‰„Đ5LMWb: Ÿxiĸc˛Nõ'‹ßŨĩí5˙ã˙˙ČáÜ ˙ÅũVĖAė¸Bô͐'h3$ėČaâT(P‘ÁH¤šîA NÁ ŠÛ­ē­aĄĩPÁ$IĂ+cTEđí4 ^a:qĩö›ĸvđÉáī^#˙M}Sų'|Ž÷˙ÖÅĶNˆâúødQŲØĸLėŖ#Aœ'͏OlŨa8aPiąZI$I ”đCbug,ÖÂh38áœČé0ǟčvpŨŅ8a“{îÔģ˙ģNîĶûĩMûC_kĶ˙˙‰īÖũ×ésw}äRîõŪ?ÚÃĐĶö44؆Å!rhEĨŦDô@Šņh4Õ MŠ9—ič"â :H$Ÿvļ›K}úúéũŨ'õéØ7ūüĄ˙ë÷ū—Ūˇ˜iĻŦ„HŨWÄhi=ww|5†K­8ģ‡Úa4""nĄÆØEģÂTōV¤‚' $¨"ķ ]$‚n^}ŊŨĻŋ˙k˙˙ũׇ˙‚á/ũ/õũw<Ž * m´éÄDjßüU§Úö°g¨­5t %äī˛ķŊ>“ú]:I Š*H ‚ ‚‚AAA„A_˙V^OīŊŊ˙˙ûŊ~šqąēX°BÁ4#K˲EäÆO([gÆhjģģŅŠČT~_Äb´ÄÉK[“t˙Ŋ;´ũ˙Ũnŋˇßũ¤EI$’I …$’A$’˙Z˙ļ{×ũSbĐnÉÜX&„GC`žNJp‹˜"%ˆi‹ā…‚™ŗŲ¨ęĘÚ9Ÿ4ûȃ!‚"ø˛Lf  ũmPa&÷M;ßi_Ĩ_ū?˙Õ˙Õh_I$’ $ĘIBt’I$‚I%ARH$’Š„¸ ‚K% ƒB"&@ˆû)ī'a‡ÂlBzNƒ4Gä|\æmœ3ņ㠄 E ŖZˌ0†š×ģų‚' ‰Ũ™ÚģĶ˙_ŋ[ū öGŋō`'¯w„F?ü"w˙ēŌI&ß÷č;NØk ļ4ãÚ *Ō^Ķŋ†Mčŧa—ŲŸaY8ĸų´ØAÅČNvša4ЋŦ]Ē-ōîôīčCöû˙9 oô÷×ūÎF[ĄûV'?¯K˙Kũjū¯ũmBŦRÉÂdÜŠ…EĄ­˙oĶĐ÷]Š WvM°ļNɃ´„Ķ ƒĩĨõ'IĒģ˙åå Ūēp܅N­4ßøM5˙õ˙ĮĄ˙Ōw˙īī˙˙ÜĪÖũowžŨ„B"";I˙˙˛8ļË‹´ûß°†ŸIĢ}ë}Ŋū˙w÷§Ę|ÍÁ:/+îŖ›oß Ņ;ģ÷ß˙˙Ŋ{˜_ßõ­˙wũÚhÚv íRƒD˲QzqŗOũûņIđ~í­‚~ģ˙ŋ‹ŦŪ뎴6EwI}6ˇĒ“&éwû'D<Lj|K ” Ī"Në”=wļū˙ŋú×ŋÜ÷éÚëĒí§Ã 4Ö׊j„hLĶTɔQgi˙īî]]ƒ{—Á?õ÷áoŋõ´}Ĩkũ‚ûũ4ūu‰Ū@ˆ&‚@dƒ œXAŠŗ60AãÂé:Ũ˙§ũûíŊÕ}~õÛûUaÚiÃĶb¯á ĶC‰—_¤JĖü •Iß˙Ãī‹|›”Fß˙˙"Iûũ–1¸{ö?Ũķy<ņ„ÁUŧœ`ŸļsE/¸qŸī÷úÛc¯Vššu´Šģž“Ŋžîũ>wm‡AĩĘp„DGOÜė|ŠönRÁ —iÕ˙˙ü_Zûũūđ˜}[×ßpmŨ~žeō^)üÁØåSžžąĄŨĸĮ`á‰Ú'‡‚zt‘šųpūĩ/ú÷L8wŨŲËl'v‡öœi鯆úpĶõXaŠ{âJŠ„Î ö\Đvš"k¸=V×ßę˙øoø§ûûŊ´ŋŋûė‡ŧ6+ūŧ'á(!ŪgŸkJî6ž‰Ã„áĻkōíã˙O „  ›˙Đũ;KwJÂ!0h8؇K"ģAéÁĻûžĶ(BаA…šĨÚ܅Ŗf›¯Fw‡Eģ{t\4›mŌŊŨrE˙Žũ˙ÛŽūû˙õ|Æī÷ęŲôžŪŠßú ĖŅnO‡„Lvī`áÚDîímĸvøN—ãĨÚ]i§Oī˙Ÿ´L1MqAÚ 6•`Œį́ۚFwAˆˆˆzmfüž*MCØzotáØ$ŋ¯õũĢû^õėú{ŪúׯĢJëw{¤ŨÃØ}灄 •ėĻ>ƒhœeõƒX@ŨVáÚIņޟß˙ŽEøßūßøũ5á Ė<V„uA‚ °Ļ“A„""!„")ŋ•D@Ũ‰!fũpƒ[š8o¯tõé_ízíëūĩŸÕUÂkaZÕuëīīž0ŨÃcbØâšĻXØf)õÂzˇOXd-+ŊvéWĨœ-õč5˙L=z­âŋüDDDDDDEŒDA¯h•a3q:AĻz>*Ũ†nŨÎTû˙˙õūŋü0O_´ím¤4ŲË[ĻÂÚzĻŠ÷Ię­27A„͏ˆÔ‡EãöëđaŋŊWûׄŸ?âŋ—¯äWIđ„›wxyĨz›‚ "nũīöúwíÛĄî˙§˙īü1V4Øa4­Ž›ģiĮƒXŋáßM4á„Â$!˛0]īMŲ#¯˛R=&Û¯ē˙î?˙P}¯ūbÛ<đĘdUîA3ŒÜƒģmÕęØ]:ßë˙Ķ˙Į˙˙Úk´á…<'kkö—dQũ4Û´ƒ°„DDčĩõßđo÷q¯đÔ¸ ›Wû†˙v˙:?´ØņŗgXOģÛîžēמŊ¯õX{_˙īßn ŗ§A“´!„#DŒŠ}…MBpÖ0œa4ЈŽ˙eõjßüOû /nûŧĄP×˙‘i§3˙¯î­4ÚĘë97;ĶŧÜh}Ãwßôŋī}ũõņ|˙˙üDDDDDB-4ĶB":īĄũ÷íŋėWÁŋŊvįũVΤŲ‚L' åëgåH•ƒÚ°´īģ wÛßo÷­ĒĶī˙˙˙ģĩķˆhDŧ2­u¯}ũûīkÚļfļė'"Û aĮƒMŒ'w —Ļį`ą,<íKįfšKú§ĸŪíīž¯~üWžû˙Ü?w^ū߸ū¸Žŋũûͧm0ĐpØĻ 9ÁčAĻvŦ&˜c $™ˇr¤3æn$ žÚ´/íĶwŊÕâ+ĩ~×ūû˙ä„˙æÖëđū=˙U¯MžûŌ˙ĩâĶv4ÃL&Œāv„E”&ÕϤ=‚h„ļiöÖž'gĢôžĩ˙ÅüNWū/˙éöyvŨļs´ļØ˙õũ­úëam†h&žČŪ5pƒA„CÄD0„CLoŊųÚhZY’„wXO§îŋü˙ę˙˙ũŲå{úôĮėœ'iŠg ģũ28w[[XĨŠúÃA‚ ˆˆŽĐa4Ēęî>™Ø&tĖ‚gķėÁ Lã(5˙_ū´ßõõo÷kl]‚éÜll&„0„DeĄC;¤>^ˇ`‡i1¯H6–§ÕM4ö÷†2{TĘLņQ˜Â"MńĶA“‡DíĄĄ˙a¯˙×˙^īĶOé7i Ô.ŠĄÚÄwĄ静°šz˙æzLUu3Ĩhũˆ™Ū÷VĢ0dĻ6Gˆ `š"œĄĸhaH!ˆˆL Á Ķƒ0I„ÉŅ'&‹ļ8{Jž×úŪŌOÜå˜öÎZ á—0šiá āƒC …*¤™Øäg;&oģ“ƒÂļĀiĄi Â“u ŌŌ&âĪo¤Û.0ž™8 …ąm„" a•ļ\°iōĮm§ ۇĻa ˇģNėŸQ8O˛}Dķ˙x*Đqƃc`Ũ¤ØŨ ÁPˆˆ÷Dr;éé‡Ũ×xk†˜B""(iäØĻžíLÜmĻČGa“{RۃNƒĄĸCŅ7†\ÂÜ80š ĶËÆˇO_NÕĶCŋ ûIŗŪškÕ0ds >ĶAĸL!î?Ûˇ 'vöĶB5‰‘ķĩVV]­ũtڒ‡žiƒi§H7.Ú/ ĘËĻn›i]ŨŨ„ũhŅG´­ū?ĶôëņØUM5hE§`Ž˜h0B"#gf™Ęzī'vƒí%ž"!…°ō7„īŋ{§  á­æĮø˙AéŨĻ\wKëõqĄWèzĮ˙ō4ŋæF•TDDG;ПHŒe?Ԝ}§š?øĩZīßožÛûģū×{Žâ>Õ¯fט6>f/õĒ-úū"B#fB° Ŧ éŪ@‘:ęŠßĶúÁ§Ŧ=k’īåFŸūĩ˙ÜoîíWßv׎áø/ûj‚üS?Ģ´ė!yÃ6ÁA›3Ézú÷Ξv†fđˆD…Ų<'eĶšņaŦąŨę´­˙˙Ú÷ū\Oü†ûՏ— 6Ņy˙ŠI÷ũ„žFŦ˙QôC˛ö,&ńČdfˑ˛Ė fˆäf2‚ŽßČ<ŽŽ4NJ¤['ĐĶAĒ„×_ÍÁËtėIv—ņ\ōO¯¯OpŊ˙žë÷_^Á†Iâ]uĘ\6ûŠ|ņ„Aœ_vŅ7lC4-8†™˛Múķ'yã>Á‹vxg S[‡ˇ×ëÚ <¯h’ĩ"ū¯ũāš¸úëZC×˙ū‰Ũ÷öĖ'ÜÛ˙ÖÉ5ÚĶ~Ÿ ķ^_ ĸáūÛžôwH7'dą§hģmé­[Å Â SV/WĩDā=4“zÂvžøšqĘæĨšn¯¸öžš%ēË­o˙˙ß˙…Ūcĩû{ŗ<öšwg ƒ Šīģ^ˆ=Ŗ$"9éæ[÷ũũFŪ˅WOĸōÉá,rķNī6eäqĶæģ'ÛjŠļ‘7~ī.ęĶĶ_ĸPŌŧílím÷ü“Í::åG.ë×_õ÷}Vc×Īūõj­vÆÕ;a&,&h0˛ ĐilAâ™­Ņ™‘Ŧ„Ī‘ĸ6ÉĖ顰ģJÚ¯ũûīCģ´ūítęÛēM¤üŧĸxŅ8ĩ´ī͇jŌ}Ŋ¤ƒV.ŪũSĶęî—ŋÍ“<Â`Ĩf3FɅ'zø˙˙˙üúīŋ˙[[]ŠÕŽûØŲ_znÄ|2OČÚ%:fÆÎ H4 &aáö°Ūî×Bō9ßé˙M˙ž¸ūũ=iŸ|}ĨŋÚņûŊ/z˙všũW Ų¤q›3đAā˜Aš˜M°šęMĒm[ß˙˙×í<˙ĒŪŊļąÅPīT Ģü0ƒDDpЈ0‡ ā@Ęq‚n×Aˇ97hØí°‹ļ?û׎×ęÃū…~ŸOũ‘Ä×˙믞õúĮĒļ˙öÖ÷qõĸi'›0ƒMSM44ûwCFČt/ũz˙ûĨMĩut˛ūŊ„Pû N„:Ŧ0Ŧ%BN?0āÂ&í´ØAĄˇtŪ›1tŋí˙køõûŠâŋKĩūåcūŌ_°ô×Ķû#‰žēæĖ ‰Ų;ĻÛP˒ˆ¨ˇ×Ã˛YéãúÚ6ŋ1ûg­Pa=mmBRą°Ø§§hå†jŠÅ]ķŽęr…|Öé¸cۏu¯#ĶūžDŋ˙'?ķUúÚ‘H˙ú•ėáoÕDĖOÃmŊzī×éšŗMĶM đĻ‰Ũ§h:&á%ôŪōķžĶŋ˙öļžƒ kƒÃĮđ}5@ĶMj"Ķ8ázOcVģ¤ūoƒßŋ}Ø=īĪ~ˇ˙ƒ¯˙äõ¯ōęËĶ˙]mū‹ģûĐD‡ūÃõĐų"$Eō{%ąŗN-i Ō˜í…f ģžč'éë}'†?˙.kwT4ęûMŽgHąŅD 4ÖÖͰšŠŦ#k]ī_ŨŪßû÷áÍ÷ū¯¯˙˜‡˙ũvŋ×˙ŗ |7úOčũ=ą^ˇųßŗlĢBÂNYF' <ŅxåÚ ė,:MŊm}%Ēëũũ¯¸īÛã@ía„"0MZ""šB­ū×{Ŋ~­ĢāÚoŋũ—›ģĶM6Ë֟m˙˙Žũ×Á˙ĒaūÚ_yė;úųĐfōA“ˆšiá5 ‡ū—l5ŊtÖīOø˙û˙˙¯˙ ĶN,& b˜ų>?]āŨûũx?ų„Ũöëˇ|=ĄMīĻ~ũŋũŊü˙˙Ūy?úú˙úßmk˙…’āŅ1Üh¸čŧĪ”IÚũ;TīëúéŨ{_ë[ë˙k B+†˙øėo×Õíæ!ûÛ¸ÁÃˇÁˆ†Šļ*ũīkŸŪÛTëîŌĶí/OnŋU´Ķ¯L ×ĻĪû館dâ—ÕíBm–š 5Jī˙ė/ødqīĮßü7ũ}ŸņŖ%Ÿoūŧëŋ˙˙ŊîˇaÚF6*Ķ ŲëĶĩ† ŲĮϚßg÷ĩŋ͆¯i-œģM†›aZÂAëapv‘wŨúŊ^Å.Û¯õ˙ņ˙ũ×˙ķkôô G˙ío¯k„°•ÃĶ­ÅĻÜ4ŨÛ„Ö)Œ&ÆÅäDĶl&ÚŨđÂH8ļ˜ÂéHŖ´ ‰ĮÅ=bˆÆ…1[UM׊Ō×Ŋī[ēūãm}ŽN #õī˙†ûôūÂZáß˙īé]-&PéÚˆÄ3„ ÚL-Ph m2+ØRÍ8¨†œTRa“ÍĄÆáÚaC5ˇĶ‹ÖīÜ=W˙ū\ĀÍëâļ¸k˙ü?_ęĮ‰o¯ŋû~Ģ„Ž:Ļ)”ö…„&CqWDD0„â#Ą(1à ˆg{¸i‘ÂښЍ(‹‡žúJĢãû?Ũ/˙ĒDĮ_ĩ׏˙Ũž˙í+L5“`ze/θēY˙öŦĮę›X´""v[”g|ÕHŽ"#DAĄfB#ˆžXa|f‚úŽÜŊ=Û˙ũķÔģ˙ŗÚÚV—§KÜh5kÎÕJÂzwÚŦ29Čéi ύ,S7Ļ{!rúÄDU:đ_ũÜõíRķkŦĪĶĶ=:ambÛ[PNÕņˇ•{ŲÚąĻÅ4mP†ļƒ9؎ĶĩOÚcģRõ$˙Ū›¯ŋĖ—ŊĖûũ{l0Ü‡P)66âvš‡+×Z’ĸoŖąŋv*ĄšAãb*ŋ˙Mt=ą¤˙æĐvūØũa9•ĩž4Ÿm2g ’ví3ŽĻä ë¨vģ"ėš“‰‘hB#šß ˇž„~×áē§úŊúÚwIŦTiÅ Ô5Õ´!‚aZĘ3ąk˙%ˆŠÚ™üÍŧDiÃFwîôųN‰b ã˙^ĪZ}öoõŽĶ4ŪâũY5˛úL!Č-ķ\ī•q¸d™…R—î[Û „;#ûBƒ ‡zßŧÎA—3íK×8Č´!3¸‰ÖīûaU´­a…´÷:ŊŽ‹Ë'v"‚qȉÔ'ši˛RŽ@㏟ffB  ĐdâÄ>.JNÃM4/ˇK¸ūáŨ5‡iuLŠdJD"+ŠįĪÁ՜v˜@ؤÆÄ7­§!é8ˆŠūųIϤKOSF  Ķĸ0ĶBM ÁxE„íVŸoŅ8käŗŊō"+Į1ßģƒâ˙΃;ŌÕ{ҝ;8˛ ~z1'jŽØu‚#¯m˙ßö•×÷Ui÷ĨhC'e…Đ`ˆĒ>IŌ đË9qí,0I†IāÕ:.ß č6‰;z =}Ģ~Wæbãøßš-Œ2qσM?ī‚úēh}ũŋūE˙ßmöÕæ~⛉Ų$G wړ`LždļĶø;M0šsŨĄÛS Ũ¯ú—–ēۃ{˙O˙ŋ‡Ļŋ­…°•YKõČÆļĩƒEÛDQ•vÛKŨ×ũ~÷örŨpw˙Îß"ŅÉlŠd Í —#3°ƒM43‡wB'd’wüNôŅ8hģĶŊ:¤"˙Ķ{WëãúO˙^응Â/ÁøDãÅA䞊æ'aåģw¤Ž öŊëß_÷]}ū`ōŦÍ#†žAˇ}_܁Æ3YÆmŲ Ļiæ ˜@ &şk&;a0ˆœĶÛ+‚ ›ģė<Ų§ĻíūßŌũ|Uˇ×ĒZ˙˙oëöõA7ÍPyÕÃøi¸a ›Ũ‚­ŽŊëõūŋŋüœúži‘ÖL&ž\a^EŊ<Ã40‡8ļY E§.zģ%'aZl]4ƒë;TŊĒÕŊw†/ėĘúĐ˙TĢdq2Ŧ_ũõū‡đoęēo§ĒˇŸ/¤ôÖ¯ã˙˙˙ĶV˙áüœQ7čAĒ.âĶÖ Ža„NA­˛#°›%l3„ÛDãAåôÛwĢw— ’Ž'}˜;!(iōb;v˙ēë[ĩ˙΁>ŋū°]ë˙ū^ļŋđ{…¯`ôŧ' ëj˙ßú˙´õû˙ĩč77Ąĸí˛W ‰Žé&0¤­ËÆĶŧŧ{/ĩŽîîõ×zAēčX@îüƒI‘f~= ŌßûÚöī˙D‡ū˙]‰Gī˙ŋ˙ũI}ôģė„÷w¯īOŋ˙?÷ۍzú÷›ûúŋí´íKĘ> 0¤Įĸá˛aģađûN–īîîëí÷žūû×^Sˆq9,öŧ—ŗĖŖaķA¨Nh”uøņŨƒ˙ô ģ˙īô ×˙õũ=ŋ{í(iŽgՏ˙Ģ˙ũz^˙ø{žČöš­Ŧ?ī—”Ÿ~ž›ūēĐ`ˇ}ÚũŋũūžŋŋíGöŪķ h :bWÖŖˆŖ=žc$$‚ %hXOã‚oūŋoëúūū˙˙úß˙NĪWŽôG Ži°Â›Ŋôŋ˙õK^úU9ĻĒŽ{MĨ_¸Ũ'°^Ÿwī×°o§V˙oąWëô˙ī˙˙˙˙í‘aģŦĪ; Ė“ˆ3Æ`ΠaĄ i„Ô¸NDĮnėŸW˙–“áęũoũß˙õũ{?ϚÚĻĖ+σŦj–jõ˙ú˙WūĩūBô/Á…ø{Zh=$…{÷ßŨ§†˙ũëīß×ëúÅĢ˙˙ŨA§{ņ; „ĘÆfĖÅ?c„šqƜCD¨8} ī_˙Õé7˙˜˙ŗ–a:ūļfŊ;ˇģžÜ¸ŠØ[];͐Ÿ ˆ0l+ ¯˙éëöۚk|lxˆˆˆ?—g: $’I$’I& ßo^ŋ°~ŋ˙˙˙˙˙˙ģš?ķēG˜ ÉÉ|š„ 0šf Yž‰Ãdní’͎NōãÂ_}ũũ˙īķsŲ„Úú§iļēwÚÃļO´L'j4 >qÕST˙ã@Âc×˙īoē16–ˇxV.ļį‚žĐ‹A—˛ĪĮ˙˙á I$‚÷ģūžôŋ˙˙˙ī˙ūųĪ'IŠ ™ÎNĶ oä‡o{IÂm É^]ļž› ûĨzOõ[˙_˜×ĖĶžŨv´Øa?b9Û¤˜D'´ãØî˜ƒéRĻ•Ą !Ļ(„ņ¯ėōÖé[ė,Û}˛CĄh$."?˙õ­zÍ/t’ $—áŋõw­˙Û÷˙{˙˙õsÃ!Š„—3fėh›‚Pۇ@ƒmīNÖîÂēwiwmŽžŋūõ˙Ũ=;ĢV)ˆ¯Úh5LPAĻÛ´ƒdq?‹ŗˆLŖąpÁâŸ_›^á<%„qAŠíϚß÷˙]îūū˙ŌI é%J’I/˙õūē˙~žįŅĒ6~(ˇ 4ĸnŨb,;/?†ĢÜ8w†+užø˙Žĩ¯ũī÷˙Ü+ XkËmˆašÄCA„ƒNˆâ-A÷yŽÖî:„Æ.Á B#jIˇ˙ūß÷÷˙á˙é?I/÷õé}ŗ’—Ÿ÷ķ~ˆ“K{MPpí˛đž_zvžęŸię˙ŋeÕŽģÅļ˙˙ûTՊŠŠ„ĐŠ Ž„Z$!ÄwííĩcTà Ân˛Xēmœļŋ—ŋëĖ}īžß×];ւI)éB@Š$Š„ĐĻ=ŌUUąEģ‹Žƒhؘ'J÷Ũŋûíqöũ˙ëlāLx¯˙ß>ļ*ƒM4B! ‹\0Ôm[A…ˆ”B!ČŌ^Ŧ}Ž–œzŲįĩúų…÷xM;n“AÁ§zh6ÂąI„ö-5t‹ëkh7°Š6ÉÅ=čCõíëÖ˙{jÃßūųn‡Ņ!üĐæĢúũč? aƒX‹MŠ™NO\í#§m ĶaĒ =4Øa$ė$é.Ú_Ϛv•Ēl~ŌiĒiąM5܊;ŲŽ 8„$’•T)ĸ=ūøĩŋūļ¸wđú˙ū/ ›|7_ūũŪÂV'DrŖ5kúd!#čūr;TÂÛAąKŌjÅ Š4ÛI2ę4ÂiÆ ÂÚa6 g !Û4ûīŽÂIB_˙ôíŠVúēo¯˙ūžû_ĢõbüDDČŨ{éŠ;>ĶŊšb Âg´ÆÂfB ":öļZlh[î•“â&hTD¨ÄAņkŽŌ‰ĖŌäZRI$’„’ĨÅ.—ž˙īūĢöėš÷ēw ūÚ[â;1ĢGjM5ČC57qr˛ŽGÉxh‹˜HĐÛģ˙q„DDF?ČaĐJß˙ũ^5lV žúßĒŲį~›g+‡hâ!ėŽHAA§f‹Ō5OųŲŅæs3čøÉ<ÄAūFî–ÛíģIb×ęƒ˙W˙é}žž’P‚I$•$“‚ ŊB¯m27S\ė—!y 2“o[EēÛÛÎÍLŅ;• Ã˙´­Đđ˙~Î ë˙ŲOū3Áuî]_˙á˙û6ŋb˜´ØwM4ÕˆŠPí>č<-ļg‹ļ‰Ûm]“ˆaĻ + :'•o:.ØdƔŅ;uîŅ(Đ|ėUŒ5 š÷Įk'ÎM4׹¯X5÷T‚˙õû˙ô‰žö?˙ õ߃yŋ˛=ۚøaIОīĄŋ_'žū§H=<ŧĶnÖė&ozëpÖIļƒĶtémnđžÃįj&™žwĸđØuĸK‘ÚgOÜđĶØŅ(_ˇßM˙Yy˙˙Ą˙åęļ•tūææīķÕŠíxĶÂq´"ЈŽä&kŽĮ>ëôíR]^ŋŨ;^;Đa˙¤Ũ[Žīũ_=Ž@´Õ6ũЇjI˛vĐ0AŸfS8)ÁëNÉ[…áx?đßô5˙˙ūīŊęôA§{'x–ûnŅáē3ļŨʄÕ{ĢŋÕžēú˙ū=CÔDY[)DFhAωœ•ĄDDDDv÷û¤¯Ķ(uív×˙OúĢĒuvØ^ŨÕÂiéė NŌīu)?ö+[¯˙ĢëúöũûŨˇøŽ""šˆáúõøÕ˙˙“ õ÷fšëé ãŒ īPí[ …/ø•ĮEi*{īõŲwž˙iõ÷][ž;ß˙˙x"ĄÖ=˙īV_ūŊw˙aA=A ÂkM4œTA§†„Rk-ų&B†UIU¯|~k\?iwĻ“˙ĻûĢ{æŌũ­ÂÖtÃ×ŊW˙û„ iĒiĮMmhĖÚa2ŗŊ”uäÖZ§īׯ"Ü-|?öŋi…˙ī˙ŽžČBãn Mû˙˙ķũöP¨5Vļ’‚a0„DDYC‚–:8÷Ũfēīõīû˙C÷Žŋ÷ß§Ŋņé͏6?˙ū˙ûgŌöžgōĮÃĶØDŗavĐynąķ24Ēø†å‡ōũŪß žžpËŨ´˜@Ėņ2û^ĩĢNŊ2?k &ō;kj"% Ļ`€†ƒŊ=¤ƒ*Į„ž}ūŋ!wUĨ˙ūąõĶAĻ):hDFƒ%dE%ĘāđLčgaC2>+ģîEļ÷ !qLR{´Æ""Đô/”2/ž3šÖ‚ Ãa?¯oķŊœ÷oĩŗĘF;ĩmÃЈˆ°A‚Ē|†É œQ„A‹Ÿ}í&›i'§Lnîƒq…•ôΞ6ķž‹ä÷h&ƒ3Š…iō톟r‹Īj6ŋf§l{L!hA„"=ÁÃ#ˆAšĸQĒwĘsAĢƒi‚Pz Ķi„9_ ƒ( ƒÍä6FB  ”iš´Õ —Îī]ĨvnžTĶcqŠ´ØÕXM0„Da íÂĢ œ5‡;2ʄøôІžąC7jždųžrͰƒN‚PIϚ ĐØHœ;dėJĘ-čŧ´ÂIēëáxJlï0AՄ †„Ęøĩ¸tĄđĢâ ÂŌ+™arĄÆVYC „Đl28§hœ;L âų­"á¨j›všzMŋ^âîũ3m†Z ˆĸ2æuĸ†ļ÷™ûĶŠœŠ"’(Í™Ō ĢXÅGŊxA„Ķ@׍ våŨį d˛ôé<§weĮü~ŋ6"ZÚšĖ¸ÂЧ5ŗeû•l¤ÎG‹*5ŗ’ āĻFŲ!č•Až0ƒ  ÂĒmËh!o„Ô&Ÿ˛OŨŌo\<œ7ûmÖ>ŌžÚŋîžh#ŅĀjÔJ÷wķÆƒLœvxÎ;ķ‹<ŽAN(A„eUVš¸†.á4„ ÂN4Ęą†šô\Ž=„WKŒ†‰ŊŦ&ÄīFļí4õ˙^ŌOOßöŊđũR˙ÂŨoeq•´ĶŠ ôذEõL&‘ Ģx! 4â-q› @ĶAáĻĒiw†dpĐhģny¤éŧ‰Ģ;¨ĶN4Ū‰Û Úļûĩŋũ{_ŧ‘ūŧ‘/__ëú'wY ˜ Z;ČŲ'ŒąČ_`§vGŋĐĐntĶdv›i Â!F‰;ÅÃ=$Û&îĨÜ;g 'áĸ7hŧŽPg‚YĻžFĐp“×MŋOŪ?áp׏û#üũv˙ŗŖ ¸Á”UuĻí^zĖøavtNŪîŠÆķc—“Ā‡$îF:aHŨĶ{Ķĩ¸sÍŨÚwíũðOO“8ėmET*J¤PŅÔ=?×Oŋ˙ÚJ=˙ˇ'Ņ7ũaīūŊ~‡Pķčg™9äfãläbīÚH6ŨūŊŪ_eß ¸î–ĶMSČá V‚zwŊöÚ}۟õao^™ĻŠĐiôéĶ^›=•y šŋ¯˙øūĩī_ ˙x6ë÷ë_I4æŦƒ4iœh?×̎Æoß[­×H7,~_´›a>īŋWëcã}ũîũ}§‘Vŋƒ4?ēíVˆ“.($Ÿõ×ĩõ×Y˜OPŪ/õ˙ŋū­Ž›ī”éÄņŸfŦ‰Ŗ–`ÂgÛ ŖßvļÛáŦ7ūēĢúoč>6ē˙Ĩ÷Ŋ¯{˙_×˙t˙­jîŌ‡V“Rh!œlĩ44NÛ÷÷īzū˙ķ›õÛĨa8ŋĶ7y†5īėæí‡JÜ7_øüŽuoëã˙X_¨ãū:}˙ãžė–{!ũ˙ą]pŸ#Uŋ[¸ Ī’dƒ5a4dåōqdXhœQ8Ķ˙˙˙¯Ĩĸķîy=ßĒ÷÷Úĸ*6 XŲë"O#dOvƒL"ŪŨ§^ĒW}˙kŋaũ~÷kū?áW˙é˙×^ŠVŋ×a'ōÔZõôĪį Ņ„Bya7 „đ’wŗ…­8a=6‚o˙˙˙^ėūß_éíę­˙§­¨MØĻJ, ŅÉpAŠĘÁ?ÛEAŊŅ­Ø÷omVĢ˙#õˇ˙˙_z¯äô˙}rÆžÁ„J?č¸õûãßØĻŠūƒ …ŅfEÔ ‰@tŸM´WiŋũÚū—o×ŋsՅÕ[ėäŨĸ%ƒTĶMb˜„ûMŠúˇĩũl*ļôžé˙ĩ˙­‡āß˙˙ëŠbŸĒūŋú~˛t5פ˙˙™˙ų24Čw˜/‹l2čĘ-¤k/.>ī/=;N–?˙¯é§qą¯Ũ§qL0œ0ƒØ´Öö…ĄK›;}>õ´¯MwZŽŋ˙íø>ëúî˙ûī˙ú˙īŗ ßūĢ˙It˙|†3R(NāÁԇöÉ]§Eà ė=Ûi'§Ō~ŧWĘ*ŨĢT UZiļša0ƒØĻ<3šNÔ4#0†=zwˆ{O˙‘ĪŪ˙ãëø?=¯˙{úˇ˙ũī˙]öŲCũĶUûĩĨöëMę+vķ„a> “{Á}ĻßÃĄ†}ã˙vB žģ‚iiÚńØ&C ĻĶc^˜M2QŅ#ŽŊßĐßūĄ‡ë¯˙š›üĢ_¤¨<ũū­ŽŲéŗ˙Ũ™¯oķížv’qMk­ļTkj§ë 'úĖ=Á Á"íøm>ŋöԉ ŋ­Ģ˙„/·}‡°Ô ĶbžHt""O‡‘ÄDD눈Đ˙[˛(ßŌëđjūē˙˙üŪ=á[.ƒa, Đa8aU´ÛAŲÆŒ ÂiØNĶŌŋ͊dK ņvĶA„â8} Ø¯ŧÂAĻÅmS¤õTũī[ū‰\;d9xØdh˙ŨŅ˙DīĒ íŠÜ4ÉČl!ŋß˙(ū˙÷_0ĩĩŋŌcb>˜ ƒˆqli„§ą…¸aV)4Ũˆ[AØŋmˇ .B3O§íSĶīöˇī×ūøN ā‡ÉƒA?ũøAī§žē !`„oĖõl7î>̆˙˙ėÅ­§‡TᧈАÃpĘMá‘ŊĘ¸Æ˜a†…„ØMŠD =ႠaG=’‹C'aĄO"6íxŊõūēūŊôI­ /˙X_ûúŸņ°^ÍFĩÛtųëûTĶļ/¸Ú;ĶC,ŽŒ2|‚DD0B ÂÆĐ`„HĢšˆˆˆˆ¯]¯_úëû{ŌgžÕôŸŪžũĩ˙ĨĩŊ<ŗ# žØwúūĪ,Ō^ŸĻ„DDF""""""B7LI­÷`×˙ûŋĨüܧÜ6ēī°ÖĶûÛAÄ4ø‡ú[g˙áÛĒļaĒk œ4ÂЌbĸö–Ãûũû¯˙ĩĶüĮ`îŸë %Úa8†ÆČŖü˛ŋ÷ŊųrsŌN6K8ЈˆÚ Ŋ(o¯Õz˙6¯îĸ•]lôcx>Ķĩb˜´ĶŲ;´ėŽ|ėĨ[ė4Ũ:ŠĒc Å6ÖĶĨįd§ !í\7šŽŋũŋũoá…ÛĐė-đÛ4íL”ZvG„E§2ÖLė!zaÛė*aDDDtČ­ÅãP˙{tæÕ­Ú6ģâĒ!͍põąa“¨!DB#Ų,í5wÃC'ÅB"9ģyg?윚Ķ˙ģûl0˜N˜ũ„Ķ$=ĻPˆ‹#xˆŽvŸ[ûrÜÖėDmZßæSf™Q™gvŒĢ0 –•×}ÅY~Ö;MÍôáÛR6b' ĐaP0ƒIžŌ,|ÃŦČCČÃ$āˆ”™Ŗ;BŠüCôđš &eĒR°Čh†€JtŌÚ Ū6Ōi4ė&Õ°…a""HÄ{ÔhiÎÄҞ(NDe&Ą Šė"'<&Ú#q(‰¤'Ŋ‰+Œãmë“ú|<=ŋáüníF!bĮĮņ lĪ&ŗŠaæ4Í 4Á3ƒ“€ĶwšxÕo5BšvŠšFlûO42$‰i­õ_÷Gaķ?iZ'L&ƒ4"Jn¤!šFF­2Ÿ5 ϚpôÂrė8†ƒ‹—t[ ĶH×KŨôÚڙ$Õf"<Đa_2Dm„Č퇃gĨƒûîRŒĖŸaŊ ‹B"",0‡ŖŧYķ4Ķ i—A;´BšlrnÖŲQy ›Ōø;°°ûoĩģ´úg ;†ÃģMmßFĘč'ĢëÜ0ļˇwiÜ>UbúЈäS"IȲ<ĖÍAhĻÆˆO†›ē&í‘ÆlráĸxĐOíÛwí§Į\kŨ÷’Ō ‘5§đm&Ü5JīĨa۟IäJĮŊŊ~Ž2C(!wæ¸Á œaüäHa0¨M‚¤^9>ĸᰙ:mŪÂt'Ž›iÚnžŸÆÛoŋ˙ĖĖ̊ˆã0aIŅ„üŲ™åĖ `‹ŗõ÷í'w_ūÍĄ{ëųölÁ5}fŋ;!˜Zvmœ"w„ÂĒ@Æ ĨÁĐka0ˆOĪ”ŨéßIÚzmëz÷ޟĮūņĶV°ųĨéš#’jļ‚7„×F°ĐvޚW´īŋxīž¯|4ŋčCLáüÚ'#dPķė)PÉx3Ē\ÅšÆ äČՐ\-ĶÂvœĪ™é÷ÜÃģAą m‘ŊđԔZmnŽ›§KÆéū×û˙_Š3Ö÷ī ô[°Ÿí‡I6Ō×°ęÚ.7˙˙ãßđ|˙šqcX hXD)á4 á„!a2q‘Ņ(ač@÷_6!ōØCkwUåÅ ô’uƒ%l]ˇ.ōOömėZú˙ß˙†=¯ĶŦgÄ÷Ū\pßL?ũ?IŋĻÜ7_Ũ[ˇ]?Ŋ˙ú˙"s 2˙{#ŠNę›h”=ĶT ˆį`ƒN-~ũ Ņ7‡žī&íĪÉ7ĩ´m¯iŪĨp^ˇ‡ ˙_ė¸ģøĢĐ_õÄa8mŠ ëŋKĶnŨSūõīN´ēŪģīcũ?†đÚˇīÃAŌm—ĸ‹ˇ#Ŋ{†NtN3f› ĻÁ"wOˇ}¤Aŧ6ˆĮV‚ūÅ1]ūŋēéÚ˙a˙ũ˙ė?˙åč]˙î’pwŋöXëÖīīöŋĩ~ûOëīß'x?÷­*Iôm‹ŋĩb“†ģļ—˙˙ŋūmČKqL”ZV´ o„'’°ū˛q^8dMú—I$…$’KÆ@‚Wß˙Ô´đm˙Ûô^9đŧÂîžëÛĶtûIƒM;a…b⡄Ąō7q[i8ˇßã˙õoīŋŽF;Š|4Ј`šhDGøí˙…}ų=X!Ē­|Ÿ…Ĩ¤‹z'fß×˙ø6ī˙úũSU}+MžÖÍ´ôÂlqÃMŽö( ’vǰ™%_ŋöÎ-žĖ_fö†ÚPm44 iĄ˙†˙Ņw˙hDŸĐßĐ˙Tđ„"vI$’IÛšúŋūû××ĩՍÆMƒI‘xiÃUļôA—Šh „""rR'ˆv“ēéà ­ĻÆŠ†6)ˆ[L!׃ũéømûUūŊ÷Ķ˙á% $¤Ž•*W˙ũžŸūôØÛ‡Ģ[ąĻ­lSÁDHŕĄÆĸ"C“ĄöF?í<1JÆÖŽĐhDLŒ˙ˇˇ˙OëŲ =?ūúZíŨZžļ~N¯H$—ĒÛ­›jžšaAŨ83Ŧ&\"B`„†ÄD0„tâ6+§hCAŠ"húŲË'žë˙˙Aú÷˜ūõŊ[Ķ[õP•„ė÷ėqÅ7¨K éąąÚlÚôÂÁĻˆ0„D`…mö‰¸ˆˆˆ™0žąi߯vš~avzëüÍj˜\ü •„îÛ?ęM´B˜ė-ĻĶUiAžŠģ _}ž‡&ˆˆD&˙ ´gâ˜HĢi& Ķ;TÛ k "‡ĻÚqÚm…!FŠÃÛģN0“% ŽÃÂ'l§AˆMôĐaM;M4"#°‡2Ožƒ ŠcMX×cAąÆÄZ/ˇLŠ;ŊŠ†Û YX Õ4"""!ņ ĖčD0„›ƒĮ;‚oŽkEØ]2v„5Ķ „ÉÛb˜M4ԝ˜@Fj´FđaƒDD0CĻ""6™Y^KįzU™ö¤ƒDDZ3ÃDƒD0B"""">YŖ˛&ķSÕĖ…QWg#‰]3ÁžeĖ"Ü<—eĪÔDDDD|›‚Ģ™ĒßÎÕĮ‘´uޤ\ĐkĒo ķ8´›đ톚ĐA6Ĩ[_ZĶČĖÎ6Ī™Íĩ ÃVė˙i/íí"áÉž›ũõ–p6Rė›´˙wė4äėû.ˆú›Âa5ũŗ‰ŨĩŌÚw­VĶKí|\ŗÕ— ČÛ8Â"Ė•c˛F ¯íkæh¤fģ=7qh4—hˇnízm8~÷zéúß–u/,‚ˆ­Š^úT—ŲNIš#Ž™9 Œ!~ī ‚jÕ§¯Ük´Å`˙ŋ_ŪļŋÉ{ęŪ wÄÚD!q ’Ø!nŸģÚåŧâ`‰ŧŽ!°\œE´ Âô⃴œ&ÁÚ§zw˙^Õ÷Į%2JfÔÃA♯',|īƒ]÷Jž‡õõü"‡ģ’=‡˙ëū8÷^ũßíézõpáŨ,¯L"$ÄZ jŖIZj‘6EŽīpĶTûnÖūŌųßoŖ0Š*5ÍÄæf*į=”@˜Z (P‚ ‚}éî˙ģ˙ĨˇĨĄîŽ ÷Ķõú Ũu^ ”í8w4 /. îāđŗą´c:åF{034r<0‡NÛ°W6|4ĶĶ´ßÖûõ~˙ŽŖK”ŗ#ŠhŽ?'Ņ+"ŠƒDAĒ Pđƒ¤MÜhģoƂēwĻ_Ēk_ũW˙Ōŧ˙mø?ß ū7솎wÃM4=>ĐŋŋĄœ:0Bä;‹\•Úd}dwjĐ:U_Mīm×ģŋ›Į_éUBT`‰ Ļ|ŗvœZavēo&ũ>žN>ėœkîÃĩēI$•$’J{I$’úEís‰¯ë[Uä/NVëpá¯}ßÚ¯ßŋ;ģšß•! OAĒ" S#ĖCH;  ôŨVŋˇtˇ÷ 6¸"=Ōô’N“äųAiđÂGđƒÂEÃdÜK“a…aŪ Îô¯ģë¯cØ˙ëúĩú_÷úOŋw­ąĻ5Û_oÎĮųŪHŽéJLá/eČÍhåîKLЂ  •zYömëU#ū“AÚkm'mú}Ķģ˙ølØąĨũ*CZa0ĻqƁ“ĐqĻĶģIÅô `žž ęûŨ?}ī_}ûVŨ~ŋũ$’I$I$UTĄÛ†Ŋ“Ö"į<đķ;5äč¤íž˙Í#„]Ų9Š@Ą0~8´:‹č4û­oM4ėŽßũkĨMúwĒWÕž×˙éV—Dā4Đi„ <ŧËģNŅy‘Žô¯iéë~ŋÅ÷¯ëÃ{˙Cũ}æ×ûžūÛĩö+„"-0AÃB>ÚU pĖ7&pŽƒ æüÍ7Ô'h„ļœxŪˇiéĒ蛰ČŨ¯kˇŊ4˙ū˙ļ“ęs~ĩ¨nīũö˛øë}­ĨMBØ]\p‚mS¤ŪŪÖÜ}ž˙ĢëĶuß˙PÃļũzĩí;ím;7\níŊáX@ЈĐõ;Ö!ÚĄtĄßÅŨû#đŅ1ØdŖÉŨđÛ§ęvƒĸy˙eĮŪũūÍīûū=j‘ûÎ;ĒôoÚŋúB+´él•°Â—uū4ûú¯˙]ēũˆ—˙˙aũē"¨×h?cö;möˆˆ0„~”ŧŧ]îj?]ŊwiŅ­0PƒĶôîîŌ'xßūžŸzŨ¯×tg×˙ĒîŊ:|;ņũâ­øú۟ŨéˇwH=ūˇWĮú˙턷Â$?õ˙÷ÃŨë„“a—5]=σ""v­%Ũ’Í͞o ėģvßÉŋŊÚˆumĻ÷w^īí[˙ãŊųŧa_uŊ+˙ģTß_†áō7wĶģu˙´ũ_˙˙˙U×ßÔ Ÿī×ŪÁŧįIũÕ0ƒB*¨ôŨäōí4ũūˇiĩ_oĒ˙˙Ōëúö˙˙­vąÖ×Ü{ZM†"öĢČâoĒu˙˙ũ˙˛8Ÿ˙ōõû˙ōŊ_ŋûzîĻiĶö´TŪ"!„"&EũÕŽ¯ŧo§ßč5Īûö˙˙úßß_˙ũ´ë_ŌA|rP䥰Đ6;ęÁļ×v*ķkŋ÷ũoô™…ž˙˙ũWę?ĨÚZ_į̍~_LSÄEZÄČR YH‚wš˙ũ?îŋ˙‹ũ>đī˙˙é¯ü‚‹ëöŋúßß^OÉ?o †ŪvĪĸƒ ~qx­f˙˙˙÷qũ~ˇ˙˙Ķ˙úēĩØaXaīīÂiĄũÎ/û˙õū+úõö˙˙üđW˙b­­=ŪD‡#ëOÛš¯˙ûwŨkMmHŅ˙˙˙˙__Ũ˙ßō˙tíXĻœSØJ9 ›‡PÎÔDƒs"X§˙_üRūŊí×í˙ú÷˙ū‹÷˙ōĄûK|ĶŪH˙îÁŪžģMÛÅŋ_˙˙Ŋ{]˙ķ÷öŋÛ~œ4SÃmi—¨Ēύ0Å×vBAéõũ}¯ßߊũĩ_īũĢ˙Ōoũ÷ßۍwŪJŋncÛÛßûÚ÷×ē˙õūŠ{3íĩØk}ÚZi„5M šL= í`š āמ9C‡Ÿ‰Čķ0[˙ũ˙ëã˙÷úΉīU˙ķEO˙ÖŊ˙˙í˙ã}ˇũvûzŌa%c_í×ûN);KĶŽĶAąHˆÂĒh4÷ Ba4"""¸ŋ„Y1ž g Ãė'˙o˙ßÉ˙˙øiôŊĶ˙ŋ˙ ގŽ˙°âē7ŖcÄß˙k×Fßôßl;¤AĖ5Â}L-ë÷ķĻĮ3 ēÅ ÃL š°•ys/ī†DDRč‹"W‹”™™šLÎÂiÚ-ëĶh×°ũuŪí˙vúk\æũëv’¯˙ūžēļŋũÖ+@˙ëÛëÚ÷í;¤Ÿ *ÃkļĢbĐqūa]ZĻ­P`Š­„,djĄÄ!ŦN™!ĻTG$ķ2LÚ9'h4ÛUŨRô›vúØ]Õd-9ĮŌ{ũ÷æ?MØTĶĶģ=ÚvŊÚiÄ4đƒ‡˙Ģŋūúë÷wûz|zĘ˜@×A6­8ÛXÄCĸ-J´""";ˆįzᚠ!§yÆyáwH ŊÚē[˛ōõuīßÁ ‹ ũ„­SĩÔ< Â(Ϛi­ė4­6E_l&šĻƒ"ĶL8Aá4÷īÕ×Û­UStĶŋØŽĻtt—ké h&Ø„ĐØ0B7äm™ §hŅëÃnŲšŨ'˙zÚKÚévž ;A„TCƒ´v¯Ą~žŽ6+iŠi‚n⓰šîĐv+Bō­Sõëëë­ēA 2â§H4ä8ëV™Z!„ĖZq‹hE„í5V!ŠĘ|ŪĻ#í;wŦ/kKIƛũÚēũqú˛80D /iĒ—ÍWhE…7v jƒB!„"ÉZša4fƃB""Јũjļšw…á°ÂŦoI3Šv˜B""8ˆˆŒd‡X[Mĩēw}§zuüßî)cKīŨëūŧDDD†XNÆEĻ„DLđЈaaˆâ?ύ=LjĶļ)‚# â""â /;,goß{nã˙ę=}Ã}+ĩ˙×_ž"¸´"""ŋĄĻ`8V¤žĐŒ­˜#†a>—ß7īnŊūĄd^Wôq˙¯˙˙Ü/[ô֑ ŲC„^Pm ÂĮõh‡¯÷˙¤ßø ˇ˙÷öŌÔįcüE–:5ä}‚-įũ¯yūôá˙Ä7ũo˙ũœî˙î —´""9\ÕÍîõ‰åôÃū†Û˙Ō]Üōl.a÷Ąi-Æå˙A­¨oÚVīü=û}ß÷°ÂlmŽÃ—år2\ąŗ´¸ûöš8Q@„§õ~ĘčŠ'ûW(žŽí6ÖŽÆÔmą]50ÎāÂjVĶ ļĒšŗÂjR \ú…Ö˙l…žû^´´š bØÖņ ! &Ąà “0Ø´ ¯‘ZĻtdĻ­°™"´Ķ“vxŽnéûyŊĢÖßM‡ąémaŠ+A˜M0„DFoáÚ÷˙%°ƒ"ė؜gB'Dvņaŗ:~Öà wö+k*mĻļŨ‚ÄDDDLQú9ÃģNé=OԂg#ÆH"´*i áσ ĄږđžDcöÚvžØĻÁˇ#šhBâ!ĄÂiÜ6ᓤwņQōR„jfāĄ4Ķ3Ž4¸l[dqÚ āˆč0¨ũ{Á7Xvžļ› ģˆŽĐĨ™Qúîhéß×0a˜R9ĻĻƒM0ĒŽÉŨÁŗ†‹‡†…ū]Ŋ÷éë 'Is#^Îán×°¤ė~ųƒ]$4“Ãq-ˆ™č“¸š8];ĐmÍĨôžžûíqI<ė nFõ|{ aO>ŗAIÂyņšã.vƒ42tfÜā§…ō]“™Ã(Dųü‹D –ĶX ‰ÂdŨIā*@ēA% ĒĒŠ*A=˙Wø*žū"¤ŸŠ}/įŋĸpõz sx„Õ Œ" ;PĄ5Đi¨".0ƒĩ`ŦãEãéˇjĢ­’XûÕ¤’I$’I$…Ą%A$vŊôÜŪNČúišĖ d Ē…o„´Mūš&īdcåãDŪžĻ éÂmĻāË)TŨ>˙ūģM+ũūŠÚ÷ņ_5EÅé×$°* *"¨eķI=”4éĻ—ũ]ŪNM͟W}ŧ7%weÍŊvĶˋŽÃĩúøž?zxôh/÷Į—˙ũ'ø¯Læ)¤˜"&5@Ō]*…K„kAI#‹˙Ŋ>ŽŖĶ~ÕuĶ}cđ›zI¸A˙¯ŋĒŪ*ą ˙Ɏ[Ē~Ģ“-ũwOú”ŦŠjÍŒãbĸcģmZÃkĩíÕĢŊū›úöŋ­ņúwôž¯õĶ˙ėõRc–ŽwõúĮūž×~´ŅŸd„uh3qž^>Î0ƒģMÔ ÛģîĶĶ[¯ü?¯ëX÷-ã­n)u­˙Ũ%¯ō#Ŧœ—ū‡T}ķj÷ü˙Üū)‚y§ļ°Ûˇ§ˇX%÷vŊ¯˙÷Ø}{īûN—ũ×÷ļļ§û˙SP˙ũë˙ŪÔÂÕ}VĶ×˙PžîÚAöÃm;†ééßׯ˙ûûõŨraîtžŒÂ/Áå˜ ¸ū"ŋŋ×EŽwũīũūũŋi÷l5cŊŠpŨŪö÷÷ßūŋõīöŋ˙đ× đ¯ę~Ã圜Bš|ФĮ.}÷č_ūûĩ~×Ī؟ņÚmžĄĻĮ#‡U‡MĒŨmé˙ũm?ŋ=˙øéā˙ū!a¸7Š/)ū‹ŋÍlm5y†>…­˙īūûŗŪįĢL'ĻŠ°Õ†øú 4ßíú^××_¯ˇŋũzo˙ûõŋäô °ú_Ū“}öۓqlėL{Tt_ũf5ļĪ]ëęÅđÂą(vƒMm8Ļ:i‚Ą Å͚iV׎?÷˙ũ˙Ĩëûôsétŧ¤ëŗ“ë×_ļ|›“ZtÂ#/¸zë}…ρ§ 6“bš 4­ØM8a B"7Ûũ˙ī˙ū+_ß˙˙}ŨA&EÚ§˙˙čëvæMŽ“æϚŪŲ˙û0›ۄĶúaB#6Č H€„ŠiųTW˙˙˙īŋ›OúŲ}ũŗ–ĢS!čôî“Âi ëL"‡ü;¤čާūAQŸž\0‹ˇļn{ ­ ęŊ…ą)ûDpА˜ˆŒVŸø˙¯˙éߎš…÷éæėl5øĂqÅ!ČAĖęhXMœ~e=üH´a7 Đ]…WąėRĢ{B!‚hļģŨkŌoũ˙d JûãM6ÛbŖ÷lŽÄœ7 ¨"ƒ2qnŲi6GœCŰÕziJĒ(¨kΈĸ6á Đ2qŸ3 šiŪŌˇžÔ0ĄĄa‹Mp›ßīëüÂŋ†Å0ۏv‡ÚÄ0„b"!…7Z4AĄfĄÍá0ƒ&ˆFČ(ŠU˙ŽB™ŖSAMˆ™á˜4áœhœ0Ok|0šaMˆé:{~­ë§ĒsE§m aˆ°EЈÅDDDDDiēMųZ˛+ Î"6 A†›o'7.-č×Ūž>ģo˛ü29§Ô4­4ęīA°…ĄØpÕu‘<ëĻŌ3FĖ ap„Đu.ÛģU¤Ûž¯Ö˙ĶŊ:†“PƒA„Đa+ˆívÃ^9AÁh0˜BíIĢoHŲ¤Ÿ}Ūˇ|}§—ßmĸČ0ĘŠiÃOa0\!üWzttEPniĻ‚ŽFîUåÛÁöŪ•ˇ}Å|oÆŌ˙ɡŖŋ•|5B#‹˜cjŧ‘ i„EĄBĒą)ōâĶ´ 7Iė=]W˙¯"r„ģ¯JW„JŒî˛Ob#b§j9Ú šĄáTDâc†3 oEķa6“†šĨë˙z]G]xÕēÂ_ޘSšéáÃŌ‰3m8¯xA† „;Ļ­ŋ{ŋī_~Â}muŌvü"CīŖjüՐ=3M÷ßÎÖą; i÷öô^Z„­ž˙OŊ?īĻ âˇūP'üēāÚzúęéiĻKäÃŦ:ƒĩ~w4˜UČÄҐ&q˙Ļ÷Ũ°ãũ×k˙ą~¯Xá:¯đŨu×Ûkų:M=~‡đƒŪgAŖ4˜‘HöLŒ‡1 ūŪģõßûu˙Í ŗá5Ģ›˙OëüTWéŪ;Žv¯43ÆiįŒágCßßO*Ą*#? Ų‡w,v“‡÷īĐjŋøūŋFģué6Ÿīeß÷õ˙‡˙(Eâi 5—DJäËw!Iķ94æqρšIĻĒi'˙ŋÚ˙‰Hk_ėw˙ĢĮ÷Ũž}ÖēAĢaRB.˛%l.†y™VI§Zv‘1Ú•/}=mžĨÚí$į¤ô˙c˙ũ˙ø˙÷ē[ļzíp˜L,0ŠĒϜ[jĐâ“NTŲ”ēAá4k!:“q§lm0‘xú¨Aš8úųÄN΍N‘F‘ļi*{P[œˇ8…ú~üWŋīū•˙įüÚū˙{Ļ×´Âöŏ„GLŠø†9”r6@ƒ4Ė ,Zz \2ĪWi ėžž“īī ė§ŌNķâÚa#ôÚe#†šk^ÂißĨ‡đ‡‡´ēW˙ũ*úÖÍĢWīlÚ#ĩ[Ob‚ ´ÄX&Ą´"-žŠƒA™´ĖåAĻŊ‚Dãĸá˙Öû_×ÛŌV“Ō&;0Pz} “Û¯mļëi÷ëųŨĮ‘@ž˙~—õ÷Ú÷f:všlGk :đáĻkB"JÖC(´áĻf&¨ŧÛÕ?@î˙ģ×WÕ­˙ ›—šĄĶ{~Ņí­ˇļ˙ūû ōŦ<+í§}Lũũ'wTÕZ Ļħ¸a3ˇ×aˇŊpéom“æīˇ÷_ĩģ_Nĩ˙˙ĢļĶ I÷K§kŊëū˙á7mŽ×}˙ö××a…MnˇÚkAÄFÃLŨpÁ=7˙ģÖ×Ģŋâļ—ũwˇQū•˙ŨXÕ]~¯˙ž"úX?ūû¨ûJشدDōĶ9Dę™Í”īŋMīĨĩ´öŖ˙õ’û_})p—÷ũĪ%šG˙˙ķČÛŨīž›Ú¸@â‚čA„0œ4"#˙˙ߊ˙˙īīĩũëŽúčÕ÷đžÁ­z˙ū™xĶīÍÂŲžÁõÁኤàl–,Gq¯ũĻžš'Kwāš˙ū‹ģ×÷WŦúūâŋĨáɆ˙ŋųO‰ūîØ¸ļ×Ũ„&lE¯˙üwQ“öĶh\4"+Zē%po˙ę öõ××í‡Vž¨]Õ7bˇcdnŊ†“§eûî*‹ŠŽG“ĭâvKJå@‡a2i› Ķ™ NŦŽ‰dŲ# Û´wZú×1ÚūûĢöA áŦ[M‘ŋMčCM4 Âļ7n8Ķvšh3l5M3lĩ-Ķ fˆˆauI_â]ŠjíyJÉÍ÷˙úÚÜ;PƒŽ%=CČßĐ48vÚų;î‰ŪŸWÄEi?öąO#'Ėã҃ ÷B}?D'ƒL đˇa8q SŅ1ØDá†]æ“a˛9MuŅwŨĻąí§úÜ^āĄ„WˇĘ}Úŗ[\Ü?ĩŋiŨĻ•ųDųA˜„hKŊ8{wĐ@Ũ6˙[O=äõqēë~§CwķēGĸ+ž„—FcaéĻßļÚßlqá0ĻæĶ] ļËęvšvÜ4Õ_ûūöˇģ°™„ _[Nϝ‰\dLÆĄ§×+YšlÛ4ĖÍ4Íŗ‘ Ķ=hÖĐ6ˇ5ŋöÜæ-cßDā4­ŗŌēŋOM;õá§ūˆš7’ ¤I§Û„ÛõMҞšipšÃĶßģ÷íČÁõ÷O]ŋ/ũĶŨđÜ~šndY˙āßčŨÂ^ūŋEd0v&0ƒÁábĩôOwé´Xė>ũūÛˇļŌÖŠûZō9ēs ƒéi;ūtžîŊX0™ĸ_ņÃø}õô^o÷Û<ĐxMUÜNÄ#ŽQā™!ŧüyėčˇiĩŋÂo}§}+Áׯī*Ķzî›XÛû˙§ööŋíŨKäx/õƒŋę{˙IŋžŌ† DyO™3LŪHЉma0’ ¨$ž›Å˙WĻąÅũŋ~˙Koŋ ÚŨgūŸŪ^ĢŽÃû‡čQ'˙{~Ÿß§ééēÅ1[hpķ ålÍĢ:ĸVDáŗ8f hA‚ƒO†G$?o} $ŌJ¤’CNm¯÷ũ ˙[’'ÜĐ˙ôúû˙øč˙gü‹īĨ÷zjœ4Âė ĐpĐi0‡IÎÄT‘@Ļ€€™v~%LĄ›25æĖ3@„ãĪ„ˆwiÉÆ|‡h­é̝ļīWÚH4’_˙ßũī°˙šŋ߯ūôö˙Ûmכ^Ø'ĻĶi0ÕšjĮ Øļ~ZNM#lđš"XkÂ`ƒLō#ŗ@KA„ĶCš1Û"Ž÷EÜ2â‰ÃIíŪž]­ß˙āūõ Ŋ0ūI$’I$’I —õ7ųt˙ûęm7ö÷ aÇöļ›ŦnšĩėážŦ‹Ä}ĸ3Î@Ą Aērî'†! ÷Bá‘ÅDáĸwårH„Ø;'Ôŋ„kąūƒ[Õ˙‚AŋûFwm˙˙×ŋØÚŨCKöžëgôīNûË֝<‚[N4†MĻ-– !Ѓ+ÂOĄ4… ŪMö>ļyxO/ ¤Ų'Ņú{ĸú˜×OMMxđ÷Ūíë_āŋ×ÛÉßūëúį$ôŌI%DN ‰ĐÁũë¸ãL'̏'iûÅĩ´ Ē@ÂkB"#Ķģ ›č>Ķ^5Ũ;ÔŧaĻŋÚtžÚ÷ŋĻąU Ãũĩ{¯ÛÃwŨ?xnîžęÛģm4Ũ”=ĄAnÕ4éĶVĶé:M7 i‘Å„"&ŧDE?—l2xŅyiëņũŨ^ęŧ}lWv z˙ĮŒđFūļ×ĖvļFĒ{Â]ęo}ĩ÷TŽĶ@áŨĄȃŸ*xiĪl[‹4gЈˆ‹îS¤žēo˙¯ûoVúã4Ŧ,•˙ũ—Ąyū xö?lÛžF>dž›Ũ­ą ėwØAĄƒėm]0„G5ęP%?ũ~HúwõĩūÜ6 ˙ßÕ`˙ĸœ!ÚßâšCcz  ÂTŲÁˆÂî(B!“‰e5IúÚĶÚįQé7g˙ūŪ×Û]˙“p\É$w¨R”īv÷×īņąú˙ü5ûˇ˙ûmÉ0ra–ãp,\_ŋø"B SM5˙VÃo^Ũ7ū¯â“ÃūĶMĸϝĩuˇĶ×V¤]?˙÷ø˙†˙îā¤@"§í-ŲŪYŧ‘“ŗHۓ„OæĮ~ŋ˙úūŨâŋ°øŠ7ķĩMëĒ˙ nl3—ß~rŋūöԞūסáUûħY&K”ė'ÉsĶNĻ­ēė”Īuīĩ]{īŊuđÉ3V˙ĸÜ ×ŨĨt˙ÃĢĐ¨6ŋ˙¤û_é{ũŋ}pˆ5Nû^ĒH“M:'”“%õAßO.āáŪž˙ÚčU˙ëüĸW÷-ģü¯/JÂt÷˙_ė‰UūĻÖēæ4Ė}°Ė=&čŪ)Ųr>‚ÕÚĸŒx&Žŧ–Éč;OÁTÚ–íÃô“ĩũ´Õīãû_ßÛčƒtáŋķ+E,_ČNžë|Úß*÷_ouŪøÛTՏÃI=ŠQŠh0„a͏h4!Ŧ‰$4Đ{ĩũĸCëH;ö?âŋūēø˙ûļDão‡K×l'ƒK)EšFĪĖ@žcĩĩŗsk"ģ<ŽÅĶM´íVØmŧU;M Ļ Ą Õ4õY¨Ëāšēv¤Iđƒŋî˙k×˙u¯ī×ۊūū{~×!ĘȄ$2fé3Âv›h4Ũ{fØãi‡Ŧ[A„-4")ˆˆŌwŪáhkŌ.ûÕũ7ŋU­]˙˙ē[ÖĶ[pĶæLÃ(˛†ĨđžĒ‹ŸvömŖcļ>Øč4ĶN-†S•hJÁˆIé/Hî—3ųSŊ6íûŋĨßģŒ?˙˙ũ˙÷ŋĢ[îü'Ģ_įu>l§ Â…4)ßAæļŽz˜é÷ØAŌaˆƒ"""'~ĒęĢāˆEÖiu˙˙z¯˙žīũ˙¸­'ũu××˙õĩð[ŋ’dF͝˙~›‹ļīĶI?ßŨxЈ–øiŌUôLzKî÷Ōõûûûúė8˙˙Ũw˙ūúžíģX¸Ļrßå\lķAPaĻîØ6 Sģŋ˙_T­âvdŽĘäĪzũãZ|{ß÷ēēauÚR1ûrß÷˙ī^ßõéŦˆî)‘ĮōM2-zahØÜã}ˇwĻūöģŋ˙ÍĨÂyØéBm*­UZiW āū={ņũô+ču˙˙ûĪ/oUŨˇƒ}éëķT}AéąiÃÖ ´\vöŨč>ęú^<5_˙ˆĒ;f§ ætŒ:"XŅ<™1R2*ŋë`öŪáé1?å×ūŋ˙ūƒũSOáē´ôhŅųŗĄLëi˛ķ‡æēēV—˙˙_ŋÃĩ˙ųngY×QZ4™žxĐ4ōoáëJŦ5lREÕëc ÷^PŸ÷˙˙Oa­Û´ÖíĶâ">r2CDFxûõô\=öũëũūŋ˙ûö“˙ô#iˇGĶ™YA‘Ϗ‘žĶīi6égzęŋÖĸßúižę›ßé~Žčj›N#M4ÍZ „DYƒ>Đw§Ŋč˜úū‡ē¯§_ū˙ũē˙˙ķŊôOĮĻ"ņV%悭í¸;Ŋ|‚D@§âJq 0„3 Õ/Ã÷Uô=Ĩöš÷|4­4Ķ ƒ‹ļ“ØB"";ŨĸníU/wv¨^ēûW]˙ø˙đ˙ŋ˙ŅŨ­Čē&L&iū“ îíízv÷žJˇÔ  ØÁ:Š“‘s'ČlØžˆąR9¨UÉ ķÕŲ~ĪIÜ2:Ũ%ÕĢ?ņLV†(&šaĻÉ^Ž›F˜úĒ[ûØ7ŋ×Wīđūš˙˙ųo˙Ã˙ŪäĨgVBgŖ;Íå']?ÚŽŽž•÷|~†ĶC3āôØ"į€ÁŦ3đ“Haƒ ŦS~Ö6, ÁƒkØaą„4…ģ jņgÔ!ã›_ŋ‡÷}˙Įîŧ˙ū‡˙w˙6–úÂvlŽkk Ķo~hníkīT—˙VßõMm";Jƒ‚Lt•B`ƒOa­ĮĩA:°ƒbé¤Ä0ą^5ũۚ÷˙˙ũƒ˙ŋ˙×˙Īīš#wúžŲī%ŪfGH'ÖŽûw}ė'IˇūŸ×íZūŦ˙TEå%Ôĸ$Ûŗt“ ¤‘¨ˆ>¸Â „Ķ‹„ËÖÄãŲ4č0B"MÔ¯éŊë{ņK˛˙ßŋũ˙ų¯^ÂvŸŪšØN¡}īO×X>î?ŋ_j˙CëÃ_é>ęČΰxézČDLWNAR8dWí& Â3J ‰d ŠĶ˙}]w˙éūEnũ˙˙ë˙ûJüjąöÅ*.L=ßĩã˙]˙v?Ø_ĩ˙V×Õ%ßOÛĒI80ƒ ƒé-%͏ã/bĄ¨Š¯ũĢ ŋ˙ūã@üâŊ6ŋüŅ{kß°Ōí4ÚZiŌõsxĨtūī]ŽūģëÅ5õ˙u_)˙ĢūēôŸëk֕ļĄcY ŸũqŽôëõûËÖõö˙˙×˙O_Mck§hC īĢ˙nŸ˙˙ wü°ū?û˙LĀôŊ¯_ô’]j×ĨI†7Ņ6‚V—ũ/^ŋëëŌ}__˙O_NÖ;IύZzęŋŋņõëīŲΝéŋŊĢž‡ũ~ĢũR\Sö : "¸Â;PvI˛cæíxB|-Ķkéūŋž’÷wû¯˙í_Ģ ŨS‹L-}{ūīīČOüx{īžŋûŋIR‡­rĮÖžŋZQ ‡Ø“KPpžĐ\&ŋĸQ~+˙ēõ‡_}՞õ´īAϜCcĒ'Ųr*˙ė>ûuí.÷ßëũßwŽÛõ×}|zU¯¯Pë25$Г;š ûВ¤RÚęčiUzúmŸ—]{Û ØMŠL&Å.›´ĶD 3ÄGÚūÕ¯{ũ~˙}žÎkúP}æņiŽëo_¯Ōú낓všÉ0‡Åƒ U÷w¤(!¸ŲD#Láœ4ų(ĩöŽ)í-SmcL&͍NJ)Š /BÖ;M4"#ãÖøėß^ŊÖ}=}FŨļ]†7ņLFíkļ˙ŽŠtŋč īáJĸY Š_öĄgŒŪ~<Á(šĢ† ÷Ã#Wi4ĸÄ6Ēž ĐlPa4&pˆDDGũÛ{÷˙÷í~ÛIßcab>õÕļÂI˙Küˆa§XPƒ¤kh âįeŌo”æƒLŽŒĘkˇh0š“ģM=]„lUÃkĐ6Fč0„Z BhCDđ~ˇīīęÛ_`â˜BĶB?ū›ŠÖXé*ëé*Ēc]åşK¤ųSfa4Ķ#Švj<'Z†xh2xŪŨ‘b‰ÂĻĢ˙č0™žĻp™"ˆ¤Ęd3ŋjū÷í˙ëĐi„#vúđŨ|z˙¯ųßÁŌo[ÜŅ™Ŗ8)ŗĘ ͘3gh0‡ ‹(2 AčZĸq ŧîMĶoīˆ‹†ŧDD(˙ī˙īwnîh‹ßüÎzëŌÕWé­C˙ŊWX rn[4,vŸŖ.aKČAĻ‹ĮrķĶn‹ė=Ŋ§Ūļūūņũž÷Ŗ{ˇnîŸ÷ÖÁˆû¯Ķy ĩ×˙z¯!Öß˙īŠl\ÎŨ 6Ė7h7M5NDáĶzNôõNȞ̝îŌūąē×mq˜ë^ŪפŨN—&ôŋ­zmSk˙˛īÖlÉ[ÃN˛íŋŋŋčž8_žø÷i†ĶũvŌp˙˙hĄKb“bˇŖˆiĄoÅëēōŪļęūŊiWÚ{˙ÚŨ+m=>‰æÚzūkoũxČ˙ö+bĢū“%Ø[BĢ ž"Ј‰YGj#ŊSõŽĶôít,-ĒŽŒ=¯¯˙˙¯tĮ§KĮ˙_×k˙ÍōË˙įMˇo1]ė#!ˁŠVČOÄDb…4×°īģ \‚ééXBŦ'\0…ôÅ? ëĨš˙­˙˙˙÷Ū?ū‹ŋ‘?īíÆXáŽ6éē‡ü„kũ¯Ä?¸a(؃íˆ:áZWũ8oī}Øz_˙ļŋāŠ˙úOo}ĨŪĻhÔĒ‚!-wüÃũĒ&hNÔZÛä=ᆠæ&-Õ{új*÷úoūūō1ëüVŊĄ˙ũŋöˇũ܅âi:´4Y‘Ē urlwŽKŧ•áSĩiŊĶŦqÜRmH/ í­č4ūŪ?ŋûoņ˙ûô~ôˇ^ˇŗÔTRwiÃŨÚaö.Н‰#¤BElˆyÔČqRų Ęį Ļüu"žBš 'mú¤4ōō  Đi¯m7˙ßoų~ŋį°Ŋņ˙ŋM5.´ę‚‘Đ&Ēžė!NËPéJ^l‰‹BÉ[#h› ƒ `§‡á›ÛM´vUdfæ0šæĄŸg$á#g†ņ­„Ô&¯_†RŨ^Į×ũaŊúū‡Öŋûõ‹`ÕŠŖõâ>wĸ8Î0ƒ ĻJ‡%„Ŧ4 Ņcž‚i„ĶM6G ĸņĐhr•ŸĪ!'ŒŅ/DlÂižĐjRmæÚGjĩJß*˓L  Ę<0š ĩ´ÕVÕĄeŋož¯ū˙ĶĖ/ģ>¯¸iđĶj(0XŗEωũō¯R4ĶEŨ ûؔ;MĮAŨĻŅxåۗn]š<†ƒhá2ķMŲĒ8ÜÕˇ0ɁO ƒ43đ Đ2æœa›n‰ŊCaŦ{A6û ëâ,•e “bBBÂkšØB@×cFÚŨd>˙<Ÿ˙ŋ‘Ķ´öĶm$ØģbqŪĐâ"# ŦÔAfͲx–æČą„MŊéš7ĸíƒ&,ƒ°Čžmm†ƒ´ žiÕëA= áS÷Ũ›yˇ‚;‡Ú}nĮz-ÛļF Î3ËĻ vĄáŌwq×â"tn'n„CÁ0B/_ûk¯Ļ÷wš%ģNB 5ŗô0ŦPNpšvŊ¯BíA32>hAaÁÅØpî¯Ač;NīÖĶØõAĩÚuûĩŋí~–îÕöåÃM6mēom-ߏNīr/úˇúŌ§ˆˆųĨū§-}nõulĶ4áŌîŠŦ1¨hD0¯Uī´Đ´ŽČŨĸīīWNˇŋ÷cÛkė28ĸģ ˋī˙Ą^íaēJ÷ĻÜvÕôˇ^ûœūÃ˙ģû¸PA-ÚõÕÚļ—v;NP„>ö†6ƒD3ė8ëm°ūąlAéˇkõ˙Nū(ĶVEŖęéĸqã¤A˙-]ŧwĩk}Øßwũ{ūÚKjDūßŋÅzÖˇĢ $ƚÅ,[˛,0× AĄÚsēxdîú.Ú.(í“Í4ū˙žŪÕWÁˇ¯Ą<Ą ˙ûîßĩĒmü|Ž ¯ˆžāßû°÷KĩĢ­nģZĩ¸i–8B)B!ØTRĖé÷Ūž6Ķŋ˙˙˙ËÔ.ãn­Ÿ—ŸûûõūÚŋŽXQ÷˙÷Ûí× ƒŦ'î”{MUQ!2VšđÂöÜ=>˙˙˙ūŊk§ŌX;_ĶŊM˙˙ģmũūâßÍĻŋ}ę˙1ûĶÜ2>Į28‚ééE4ė0ƒB""^%q)ÃmīmŽ˙jø/˙ú˙ū{ß[>?žī1öÃ6ÖûŋĐaÚũũ˙jl/wr';tŊ„Ī h7Ķ „Â5+ˆÕßõUž˙­9‡˙ŋĢß÷­ī­žŋNĪNÚØMŋ×cŪ˙žÛ<ŽMēVy+ Å~{ŗ—iģ 5Š&+Ø§Ļ„CR­4""ÂwҤ_ëxáÚ˙{B?˙˙×õ}¯°×ęÁ;Ní6ÖM¯ũ6˴ՆOՋM4ÃŽ2Ŋ´,Ša‚ˆ´ĩč_ü„ hWõ˙û˙ūŲūûßIŽĶ‹.ŌĻ ŽQŽ/ĶOcö=ŦZpĐal ЈV„Dx•'DĮōu9{[˙ęÕ˙^í;ŋá­AļÕa§eša4a īá Â !îM‰b*N'eĐ~ũ ÜžˇíĢ}Ō} Â Š`ۊX"8§ 0šv¨D44"­ ˆí‰Œ•^ˁfbü/×Ãīúm„Ą Û Ø`ēĩ†ëh'eq;Ä&vxĒyd+˛Üt˙˙˙Ų ;õ˜×lä˜MŠbãV'‡°ƒBŅËÄDGôėīW6„„dg™$d|Ā˲8§@d!†s_LՐŒĘˆŅĻͤvŒ‡×īíûĨŗÜ7ûÖŌ†á;SEÚ]qĘ´KSS>Ę„—î@ņ[•€"Žinr(äĮǃTīČ^|SC ›‚"{߄˙cëē}Y˙úČãbšbE`B"Ciué¨âDŗ0™čÁš\DDDDDtų§î‘ØEĶ?šŧ‹L&ǃ  $IRI0’‚§i]ļî:Ļ‰Đˆ‹•<Ú=œë˛%yVĶđ ; öúaĨĨ;Čņ„4Č H`‚‹—mÛN{¤۟áņ+Ĩk͆iÂi„Ķk!ęišvDk°ļÜ­ö†‡É.C"Æl’q đˆAfÅĄ†IÖîį@Ÿ˙Ø}pĸĄ$¤„X+ûM3<ܚd†íŅ{FõĶģĨ’Ėō#Ŗ`xsD|Č↰Č’`#Œ‹q‘ŅŦ3ú•VEcŒ†ČĖ'œĘAš°ī§ œA 2ōÉŨ¸iĻū˜ĨøūšÁaoLbĖ胎ÂdÖí™ äÎ3n#ģTœˇAZiÛņ"á°žq°Āˆˆ‹öi#fCÂĻaƒzb6ĄSžŋ9”j ­į;!ŨĢvíĩˇļúīí×wë˙Ä4ߋDŨ6Aˇ ĩ`چ÷Åß­z{ũA ¯aõá'ôõ†š__öƒ Û úm6÷´›÷Ōwūë¯û}¯˙`’ļ“Nõģžémp×ĩ˙Ø2¯ū‹īü¯ŌaĨđĖ–g¤Ģ÷EĀ{ĸŨžÂ÷pÚîī˙¯VÕīûô?ú#{´í={íõ¤ūūŅ]\`ÂPF†3ãR4G#dH:ôÜ-Ēiĩ´¯÷íuúāßõ˙˙ÚÛtINa;ƒuáû÷ßą_˙ūšä˙ũ5M5M†já÷WiÄ{ÚĄ#Fl͑›!¤HeōXˊ„0˜ âŌža ŨĶ.t]˛ĩTßũēX˙ö˙6ˇ­zMj™~&đß˙û”ĨôĩņēĶû šĻëi1pÖ:‹B>¸’U<2DhYÉ8žčœ9+ĩģŽøiŨۃgŋ˙­WŨû_¯}æßÚÛa-7áģBЈ_˙KÛüĮîfĩžE)éϜ4ãd­ĻJˆÛJé‘CÚi !H5Ų,Đ4Ũ Á<žeįŦzS‡Ũ%˙ŨÛߜĮÛūōéŠNØĶcZ š–ĢĩķkôîõģģXa;8¯ö–-Ą!ūŽ2ČœlČf ƒŪˇA"ī5Á î˙ūÚí=?Á˙Ŧ={./Ŋŋ˙i÷zząē­0™CĻB#÷ß^îÕ6ôâģcwq=‘Â(ÄÂzdãSd`šh44Á–*žž^iē uĶXûõúZėÜTzZ_Ŧ…ģ#s—Ōw§Åw°˜]4"2ĩûûíU‹Mb‚xAĻĶ#¸h4"""šŪĄÚßë6Zo¯­.Į˙×WW_ßoę]aāũšĻĶA‹iÛvF]+ Ļ„DDFí]¤ƒb‚wŨím>Á"4A~ƒh“ēzÃ=€J˙ãūđīõĖÂ{uŋõ†˙ íÚ]-´ šØˆa‹ŖN.†õí i„͈‰6[Í1"‰<ˇ§všy|éęū˙í8û…øÖŋŧ=ÁąŨˆˆˆˆ•Ä_™×¸e˜HąnR4ĶūŸwéūŋŧ:’ũ‚L?˙Dķũk杘KŲĶp›ÖgŅn.ÎŌå">잜¤!'×đ×ŋ×ë­ômĨ˙ëUõkŪųīĶŊŗÕ÷ė0ēd\É)šI˙ÄB"¸w˙ņõ¯õ§§Ôė-¯ū¯ˇ˙ė&Ÿ á…ÖŠØķ\ī§B™üöq?ĸČ+ŋäõĢß˙ßėTÄ*!˙ë˙néÅÃ]4Øâé­LŽš {ˇŠ Âapĝü)nddlÕÅ<æ?ėō#ËkūÚ_°úĮ5'ŌûÕ5N‚éØMØ­4…N"b:d[×7Øw5Æ#GÛļĨØĸ¸¤Oڕ¯í°„ßēį—î‚ūÚ\Ī´ūÕ5NÂi­&ƒM‰Ũ˛v:iÅ7#ZĻVŅ>m“úxLŧûTh;íSđaÖpģü“ČIģ˙ ąoīũ­Õs÷ύ;T˜đ×=4ÕˆˆŠ^¤š*ãņšS¤EvöEÃwđw8ēiĻ6DgfröčĪė…ųöA­]7va}=Å~é~Ãd?ŽÔ īĻC'ˆDŪĸ#B“OšFā™ōNáæŒ‡~öÚ[āôßģmđ÷}M3ĩĄöīŌ•9Hq„ŠŠĐ# ^Wô˙ÛĪ×ŨđŪڊ¨B""é˜f„š§ĻNíá;Ŋô›põ×û×#ú܋úoĶž8@ėĖ!›M‡`Ž8Mo_ũū÷ōN¨ˆ,špÖÔ![ļÂwžĄ…mÛi[Ŧū/˙˙úîü?°Ãí î/ä!Æ<¤ĶDĮw{ļm¨wûŋĢí?ūĸ!„(ŪÄŖbĒ›™õõ‡ŪöĖbû[ë˙ûé.öÁŧ\4˙ælÛ4-B šĸŨĩAũ{m>ũx.ĮĻöúĻvϏ¤ãKé7U×Ĩū¯|1˙ŋö¯ûĘøū@‘s3d"Ķ´Â,pÕ2<ļ;[ļđŸõ{î>“āī¤īL0„wk¯wŧR˙Ö¸>E××ę-˙X|Úˇ5'|ŠŪ`ÉNđƒ#’föôsGÃoW^í$ßVīīîĶoõĩ.ã¤&BsîĢŋ¯˙jÃI˛-ëũû‘o˙Íī~Ōoņœ3čÃ3,û=3 RĻĖík¤´Ö°ønƒM4īũx˙õ˙/–Đˆh5´Á ƒ°Â™¤ÎĖëÛÛãõ‡ƒk˙˙˙ũØëöu2ųĶ7i„Û}8†DPEL!Ƌ‡ûa˛å&=ÚkģiW˙ī_Hqv(>eW×ũ-Ãt?܃āë˙×ûũßąõ—ē?i„4­ģō1ØP‰ÃbÖOé§ č ū*÷ãÕuúúˇęZß˙CŨ˙ø>ôž˙ömŽŠęģBgü2NûEģi­ßĐ<ŧáļ_Ņ;´ũž>ÚOõÃų†P'÷ö—ūá!ĩÎË÷Ŋˇ˙’įėįÚvŠą§_i„T}Ü=ģĩûĶÖÖ÷Oė&ģ_ß÷`ī–ž!˙ūĮ˜ũŗžÅoĻ×ûæÕûg5W1ÚmاÚi°Đpk°¨v„GîÛ´ļę?īÛÖŊ~+y>Ÿ˙PÃ×Ņģ˙틆ƒÃČ_wņ$­}+>ģ~‰‹´ãŗˇV´ÅĄΤ†äÜéņûUī]čmũû4ŋK˙˙({ļĢ÷ū–ŠĻĮŠģųEœŗĸīl-Ĩģî͏ģB"""v H Î"HY ‘DUC™)FķĀAØ<3°C˙ūŠZßÕ/_Âū‚Û˙ģwŽĪY…˙ęģ 7īu;HđƒM4Ķ4ĮĶ Ļ Đâ0˜L† ҄Ҟƒ'FōS™‚#‘°rDfghˆ„yp ЈŪCL‘„ËįKū¡@ŋĨļ‹˙đ‚ūŸWũķf=Ž;@öMƒNB'rēĩU䐊Ė:gĖķNôĐh>h´Ö ÁÂhČiĐ͇L¸Ŋ˛{h!$äOĄ 0…ĸVT ŽC¨Ā$A‘Í?~Œ×ĸī˙Å"ã×ũ}k˙ö’îėZ"ĖJpĶģ†ĐŽŸyâ8i’0˜NĐkh¸zoˆa4"4vĒē#ĘÕ°ļÃ"ãa;nȗdG U-„ĐiÃ";üL'“~Ŗ¤“ŋųŅŸ˙ę˙÷ĩ¸6 a…ua4ÉBPĐa 569ØOĘVBgŠF ō­4Đ`ˆ€l'Û˛1ÛžŠqÄDH,ƒôė'pŌļí°ƒM°šĶo7č6anvšč4ÁS-˙ŽĶk_¯Š_˙˙vƒU´Â bĸŖ ‹B!ÄDQ§ÕHŦК0š`Ļš!Úé=‡'v°ƒî–I6Ĩq]=é;M6öÉgmč;ĶīĶ­ˇūÛ Ĩ}Ēpw˙âŊS<ęëöÕWĶāÜ-ąi´Ķ šIß;RŦdæP D&Đ Ø°›~ ÂDáĸQ ôí>īíûįbŌoįbyÆDFwiļŋjö›}û÷ßņßj˙÷¯ûí>û´BûÕoNÃM4iģN¸´?šã‘öh”ĨdųˆBl ĶĶ Ų'h¸lˇÉÛŊá=áuí×_ëU÷į÷r‰KO>4Ķ —ŊÚ˙}ūûÕūqu˙ŋžAŽëŗĶV4ĶM8}Úa6÷V ĻĶ'a‹ ¸ēh0špō(Fdˆė2æ4ųvŅ8h†\ÍuEæŌ ĶNßļũ?ī˙˙­ųIīęn#rd}65_WßĶÜÚ¯{ôĩ˙^÷ë6aSá…V^'Â Ļšw†-;‹pÉÚ„""1EnN"îΘ@ xƒM — .iĒyy§i˙×^—û÷_úõ˙īĻIĄbČĨؚ/KkîvL˙gĐ~Ÿ÷ęÆēAîßŪ—ÎīņíĶO‚#Ёą¸aģģ.dĸō8™ėd툰? É[wD%ĶvmnĮŌoėwīOņ¯ī˙˙å”ŋõ3Ž<ܝäÂ÷MƒîŽ'úîŸúåRoũpo˙X>˙_~ŸĶą‹OĻ“aˆˆŒvšËC"ŨĩĶ´ōŪ—Œ;Lč:īžđÖö\_ }˙úŋ˙˙˙e ­F2Ŗ4ĪÚjˇ{Ûj Û_ˇcž5H?‹z˙ūß­¤“žßk„—[˙—t^}Ą‰6‡Nŋ}ŌpÕmŒ'˙˙Ø=ƒŌCų1Ád4G¸¯˙_ë}ūŗĢ7´F3qî`™Ž™S1‚˜ĶO­ī_M¯¯ÚÅūÚO3ÛÖĶ„ˇ˙k”6žŖˆZ˙´w5īˇãzA0Ũ~˙ĶëŪë~¸öÃØv˛zú žŪú˙_÷jļ~˙BΞt]„ĖEŨĒŽƒS]îĐIß´îīŋ­ö)ú¯˙ßž/ķMˇŽa¯ōQ‘ž=ūÉ^HDxŽČåĶ×ņK“õû_ö?°ûއũŧ6Å5õÁ?ĩ˜]]÷˙Ú°ÂĶŽ0ąĢ}¤ė$^5ö ˙Ũ÷˙káŋģđvŪ^˙ ?O˙÷Ĩ‘ŊŋŌÚ§ôũPˆ‹×ŋMϊęH:zæå×öøßë˙†äČûzŋnģųë[ fŽÄ8Ģ/ļ–Ë„Œ;VîŌ]WW^î—ŋB>Čŋo÷`Ũ÷딹ĄÕûéÚÉ^›ĨũČúšū•~Ąú ™˛˛Â§ Ũá˙ōô˙†đãūh¯×ôíXaXa$͌ ĐaČâÔqVâ>Õn*ßļĶũ5˙˙ë°˙ûozēwī#Ķ ë4ˇcwÛûX÷OäęCųėã¯â?͎ķlpvš}~|ąëûŖ{æŅÉ…fkė'nšh>6 +ŽßŊ Đ0TÖŠ^ã×ëŠū>/ëßā˙í¸n˙úūyŋũz~ģ˙ÉūũôDGųo°Ī°"—ŋ…;´@Ø+6~ˇÕ˙æ6ĪOÛë|3“ &šl`ƒ°ƒPšM1M4DęŒŲüDD4 Uj˙˙ûu˙īÖi;‘_ūᚧģÛ÷W]÷Äßæ¤ík_Â>?ūŧq ģŅ”ũNí„Z$í­ëÃ~ēė˙ŨöŋjšQla4ÚØŨŖ}4A‚Ûׄg÷ûå^í˙ũëãĢöæiũīû÷îîŌ˙õķi0í×Ēū“ūŋÕgpNâJ#žÉĖ'ÁŸ2P=> ˇ­õú>ŧÚŗTŪ­™ø[I‘ŽĄ…Ž;a4Âa2 &NЊxˆû‹Bž¯ß… ŋ˙ßž™&ÎkÚžƒāČí7zĒŪŋūŧ:ūˇôúßûz×ßyد§ęIZ"^đč„ų>k§ˇũúoĢgĨoá…l,{ĶA6ˆˆˆ¨Kõū×ē͐“}ÚŨ—ß[Oc´Û­ĻÚh1ÛÚũēw°zIޟũ÷ļ´ĢÁęŊÖĢûĢîDŖĘˆ¤tJ°ƒ]ø$Mōáļpéé˙ĶÕ´˙[Uģ 1ąģ4`˜SR1Ēč:˙ÁØ~Ųšî㋸2õ6A°Å>Â#Â,ÄÛŦ*xPĢi„AU_ œ}6–…+ūŽ•Ĩ}ļzũ<ė L ŒäŅĖҜhH˜L&‹{ĩŧ'IŨ˙ū´ĶXģãcM8DqL&„č„Gwũ¸îÛMˆMˇv›ÛL„BÂÂØPMĶ §Ą 8xL¸‰ĩjĮĒ ØL á‘Æ˜S™ÚpŠļWĻ“Á;M<[T“åģ õõôß÷û˙ äqŠÚhvÂtĨˇ+§ ģ¸;ļ-Ũˇ:F‹iÄDDDFÂbļšf!Đ0ƒ<đĶt;âƒTI­¤ ė+ĐlĄÃM8¯|NņšF=Õø‰O‹ī— ۃĶ_ûī˙˙v"!Ļ;L˜ÜDdWŽĶ×i ÂdܧĐ0„q0˜B"$FB"PÃBkXS:)sB"P4ƉŨ13šÃYˆZ3a<ēÉ.m‚ ÚŌ ˛yîy͇Ō{û˙ũ×ÄXL!Øņ qÉR; ĸ""""ЈˆˆB!œ(S™ŗ4ff5´$bÄ$Ų šh9ĩwŪŠšxŨôŸ~īūĶŋ˙â;"›•ąøI§t); ?a] h=ŅēĐ=Šūīļ˙̊đ˙Øu˙_ū˜×Ž÷TMÕčģm4ĶËvĪDĮmžîđđ×__OdqÛwęŋæč=Ō&D}&vJė+ îôØwß<ÕŲbĄ;ēŨ[ūū¯\T?é‡˙­Ē¯íâ:R|‹YدšĘ5ģ´ŋu×Û÷ûy8ũ˙…Yc?槯˙Į­ vęE—ũÜŌ( DL˜a;ū4īū˙ĨU^áŧ-˙ūÅxoUͧé{ :NƒOŨ:MS'3;*ãI0ƒGĪhģrĖ5/˙ĩ_ë÷÷đoEŨ}Ņ`œęž˙S˙ÅEWŪĶ ē#ȗFäėĐÎē„ŌÉq.ŅĸíīˇMÍy ™ ØĻdŒō;ÎÅ]?mÛ¯÷ņīŊôŸūŋ…ēo…í{ÖĶĻŠ”G"–wZ>f2{4E Ī8ƌģMļ¨";WģkÍot›õ:đ&jq ʸ"ڰɈĄ„M<'°Ō×°˙÷ũūĻī¯ī_ŗõņ ŽÕ†’a9áˆëDAR œ0šøķ1f4Đ`Žá ÕCwĢÂtfĶŊukģī[wՓŒ” ‚I jpÕđI/ŋ_˙×ũ×ú÷ޞ^Ø,OÔSmŽļkāĪFØD^}=&ĩ­øPmÃi[ūõę5ˇû}xō9¯Ö[ĩ äōYx’…I*L'~Û˙˙]+^Ķ´ÕŌģAÃN*)’°ET kđŽĖīũ-ÖëkíÛV÷iŋIī×ÚņTՇ˙¤gĸŨÍt‚Ķí$Įa(HB $•4Œ$’H$’I=ZÅ qiĻąAk`ƒ 0„DA‚ Ž÷í&Ũûūˇ÷Kßö‡^íƒė*¸ĨíaŋōÛ aPt›TŸhUĮÚŋ­Ģuú„„Ņæ HŖ¤’PI$‚%i ĖŨ÷p˙mUWô;û˙â•zșŅŨânpo˙ü{õW>üŪ’I9!ÆW5"ÉVlĒBĶ˙vÚ힐6*Xčoaa Ėé‚QÎ{)Á kwKĄ}_˙ũōOŪđÂoĄ%ëé,î¯â¯á2:3f 0š †^K Ÿ6n'Ä „ËŠuÎÁåŗ„< Ķá ÛKũ; ė*l*iDDD0„RÄr26͙öC÷ū+˙˙¯~ ūúMmų/ŋü†ŋâĐ3’ûW &gfgįŲæl‚ &ēÄdâŖflĖÄ#b8ÎF &Ņ!ÚH8žĐqģM5†( ØŦ5‹¤W&ŠWh^ˆOz×ûä?˙úõ˙ũV˙Ķī_čŽ$\S0÷ÛlÁĸc´„<&šiÅÃEÛdė›´XėUM; RARá-“ëŖeà ÃZ +aCģ&žī,vĒ’I$’Dō_xIũ˙ūž˛Œvī˙íītĢōží$ۃÄ;ĩtļûvųŽÉ=‘Ŋ86Ą¸ˇDí¤7žÕrōÕRJ ˆaˆˆ°…6˜Ge:û&÷§FįšĒüuŌ ’I$’I$’P’I*JaRI$r ŋl‰bõÆŋĸŨ÷Ģ[ˇuøul;HŧîķH6͞{÷Ü2oÛŨ°öímîũ*A‹vP2&Ķø~õūēß˙_zūûŗuļ]1Ú¤ŠT“ĄI7mZũÚ[œîÕ;Ķīūí6/NôîĶĶģá­§ÅW}nÛ¤ÅōQ‡­Ąė~Ģ˙UūĪ~Ģ×ßŨÁēąÜtÆÛ†š !÷‹ûūûøˇBžūˇˆoũއ cXâļyE%īėŠ>|ŒõÛũĩm;]°•Û˜íĩUp’Ũ❅˛ĘíŽØī˙˙ūĩ÷×đš,Ą¯Įņ÷÷Y74÷ūĄw_9Čīžkvģ›Ž-c†ņ§a+XŦ4-4I‡˙hØO˙˙_ūŧŽĪü.Ē ûũ˙—ųHŽ3Į„_ė4ģĶŲ;A“w´haˆ4""75˙¯õßųđ˙ī~ÂȚ‰ŋķ@›š#AWÛ¯˙ÄČŽ)3 É*\‡ ĐaĮMõ†åΏjė4"""!„"!ĄîHīõ˙Ũ˙´N?ŋøéē ¯Âö/ú˙ūd ĶNĖ‘y†ia4ŒÂ\N>JWĢt8ŽÂ2š§ ˙đ×˙ô˙˙ũõū‹īHžeįՍļ×üęw¨|Ō$ N^Ą=ˆ0ƒ ] IPvÔDގЉĶKúŧw˙ŌēK˙˙ßī˙úŌzĪ߯ŲÚŅí;™8pAχŪÚŌwiëAū{¤ŽžēķŽŠ×ÔĮköQ7˙íë´íöžëĨøú˙°Á]~÷mÅʝ“$PFb “EÛäíģ†ÛúģÛŲí72#˛Ėû}ŋŌ˙žŪé{ka4īU×Ķė÷wIĒv›¯ž—ũ6˜ĢNívŸĶ(ĘŧÎr i ŅoFƓhŧĶo×ŋīÁöƒ†-„ĶĖĄ9Vší4Ņ*f™ŧ¨)8MmÖęŌŽ×ļÂÅĻŦ5¸iĒ}ļ  ĶX†á;ģ´îí5ĶÚbÂh?÷%+%AÍ´› „ĪfË$ĖŲ&ŊR­īŋûá­/íŧ a;ÎõÉŌoo[J7ĄÁš éÅT5l+AŠUƒ 2(ũ6.؃ Ēa6(&Å2,CAĨ‘Gh4āáą Đi¸`¤WĻĐöwR|×éšÄK‚á4É}Ļī/ûÖ¯ˇũ˙šîÁ°ˆéĢ)õOté*†išfãĖ&œ4Ę2'‘1Ũe¸ ÂÅ1Xi¤íŠ !fĘlíÃUjĻt ˆ°œ:m6’šŖąhC0‡ÎÎĐf™īĖM\[nLváØ°ƒZڗúūëũĶÉ oũŧ8ša„-wëäë?wyÁPh4û Ųy0U4mŪž".ĶL! B"æh4!§%ˆaƒC6ŁŅDqœ*m Ũ“Ŋ ƒo˛ú†íin[ú˙˙ß3/˙1ž"#ö™˛ƒ†ffžAŖ 0ˆÎ]!U=´\ė0l;ēG[ XFwOēßa ZLÅ@„DDDDGÍM=[c(?ŪkŪîû{îģÕ>:ē÷ū˙î—˙VúI“ʨ„oAǧtŒ8j_×ß§pwûůz ûûŌ īJōvĐėáûËĪã_üŧMūŊ‘Äēßũ_ũģ[ú "Ū‚„Ú¤FˆA%Aë  “áS¸:WūúcŽŋi zŪ]ęšũÕŨ÷KuÕ˙´›îĸũ‚#ĻÂõī˙æ5­ūŌ†ŊÕä›`˜S^Ú¤ĩÔ] éxõŽũO˙ûßIˇw tčŧ¯ū˙˙˙ŊõЌWŽē˙ëņĮî‹ĮŋĨv4¯ēI%¤’I$Š$’IkČįîú˙÷nč]ôš§_}´ŋūˇŊeÕįŌˇ^ŋôûĶ´ŌkÚöŋûõŽõ˙/[ĒŨzH$ÃډCúo÷Õú¯÷û­q_˙û‡ĒõēÖôÚŨ îĶM&xC×MūČš×ŲŋC˙˙˙N’I#I%K ĖĘl˛Ρū@Ú˙Ūö’ķ8[ūũ.ÚŪŪęßwà 1qŦāĐhGī×Ô/é{ūî¯éč7ëÚú Cė2eyĮX…I=w¨Wũëãúģęūãû=H_ua&/C‘GÖíkäGū&gĐû˙´Ũõ˙ũ˜ŸũēA°Ö´¯ŠPgeķą`DÜ'~î¨_˙á„öŋ_}ģm6ė,8Ļ=åē Ķˆ`‡˙_đ˙Š1[ūîļéĩŊˇjbtJáÃāÚzļŸūß_˙áŸßkŽ˙}„ĐlvĐaJ4ĮB"?úūåļŨīūˇéßvš§ļ7iČPm„Ķ ē>û@ŽđČͧßÕŋ_ŋīOŠīŨ=]zb‚ Š8ƒF¤"â#ûÖųģķ ~ļŌŗËļĐjékÖâbĻ´"#ôŸu× 3Ĩ[̆ļĩ÷ßwaJ-4ī}Ŧ0HqķúvļGÛ0áö­˜pĶė0Ûl iēŨĄQ šˇOįbjŧH$yšÚ2Ĩi ŋíŨ5Ŋ}9ôÛ¸äQé„ė'í3ĀCNŊÕÖî8ØŲĮļbˇq…Âiyä^6DūNÎí„‘_ČNaä‘™™š ˜ îC33< õ~ĶMŊ5NĐjŌtÂh0–ĸ4"6ĩņV“ ŨØDéÃAŸh´Ķ4B➇Ŋ/2P3†h…ļP333Œ ͎Ėãf…§šĖ-„›Œ Âzh67 ÃKÜ4 §h0ŠÂž‚@â !Á ˆÅ ”×ģ 4aˆˆˆĒĢá÷čh0š„ŅžĻ††f(MB ˜AČÜJΞŌwĄh˜íÂ5†ÉŋmŠŦD˜°Đa 0į¸`‡Ąeâi<´)#(Œ! Ų:ÍáŨ'ąjÚI÷zjžžē]ŗëŊÛ§úkõĻ~œ2VHg2ã‰!ė/]Đ ŪĶGe-÷˜yØ6]Ŋ˙¯Ĩõ÷ĢxīNín*˙û§Ē×õīūÅ ][ß ĪŖ„`BāÂ6c“„ Ö˛8´­†ŨJŅŲŲ|?âDŅČãTÃ5U^ûëĩũ6˙¯]öģJČâ?˙Úī¸0ŽÁŖ-e\–yn¤ ĶhmHAÃH6¯Úēwi&ÛŽČŪäoė‹n¤Œ‡fʍ3qčŧšwMŋŋ‘Â;ē¯ÚQ°~`],{_˙ũø¯ūßoüNĶ‘ŨRnv%tKŒûAåqŦ"hMĶM÷kŨõkõģ÷õ^ûAŠÖĶĩģ°Úģg?Øé[KŠ :úūõ˙ö¤‹ę]îžŋĖ•ļ˙Îū[0H6ü¯ų˜™†œ„ŽāÂvŊúõ×ŨŌīpûúŠA™ŲÍé„ žŪ“Ømë˙yî+åĒĩ˜Cå×ķåß×ũ}˙ßęj2VČ#L×JœîĸRÎ4 ‡ ôĶmķ#(Ę3a- 6ģÕˇo÷ũũûrŸ~žnDQ3œŽÁ’uϚĨm"ī^Ô7zļŸ}˙ņūúŠÁúßKŠģ×÷]ÖŌū­u×uÂēoc‘,ņ ~\‹˜TØg‚Uē/ú|īīWģûū˙×ū-ųõĶ>&@ö a ōÔ' Ú¤ĨxĶęûØûæđöģmĢ:Nŋč-ë˙ŋúī­z˙×ÛũNȎ…’™„iÅûáŅpÃYé-ë’ˆ:kx[^õ­C˙į‡īũĩa<Ė"čũGĶnA=ښ˙ŋæX×ÖŋϚwd÷ēßĻīktÂ˙}WũŠŗ˙}öŋ¤¸ww| gfσ< â-ŽŲ;„B ŨŖŒÛko|xM2áo´žēõR8øū7īčģiĄ UđūĐî×-ę:ļ“˙í=ÕwîFŋⓠ™ áUĢėãi†{ĩĖmŸî×VžëM5]]SÖ鰗ˇH‰^ˇĒÍĻHŦŌ%Gv‰ŋM’‚YEķĻŨ§iuõ˙vš§īîũŊ‡å Įüúoũ‹A=}?[Ŋ7o_ÞņĩŋûÕ˙íÁ9č=ˆloĮ &aϚmZà í8`ŠģAà 1LP'ąõínvHđ˜L œN žØ6•čģm;×랆Š{]×tû÷_ĨîēWū›˙í˙˛ō–ū׏ĒO×ä_^Ŋ÷×˙ø`ˆi°MŠ÷jˆ[l^žƒ@ØĒ !"€Ũ:kŠ 0œ mpvō_•8ņ5TCvĶĶé=5ũ=?Æ-_îģ›ßGwHvņ ē_˙ū=„î˙~?ū°|~ßĶĶūŋá„" R ģA„Ą„PéĄ ģÛ¨Z !aƒ(¸B#†ļ¤jÎ ƒß1dâšF›0šģĸnô^0ÖõõvŪídĮ¯ōęū¸ôņ_ôoũzęß˙ë_û ÃåŖ†˙öū˙uüC6ô."#ˆ†e”Z¨Š!ĖÄ'P˜Aöƒ°ƒPƒˆ´Nû ƒûī­z˙Ūü!>'˙ūūēŨ_ō7`ûúũī˙Zųëȝ˙@ũy¯ėúÛ÷ũ[ĩÅ ;iˆ‰šGZí>‘vШ”8k.)6ÉŲ,ĶģÕéíwũKƒŸŽõ…ũō…Ž˙§ī%å÷úl˙›ũéo˙ÚŊ¯ô!ŋōž§táSõm+[ˇ× _Iš8{ ƒ­é Ũ駯˙ī_?čwí•û3NøĮ×ü7ūŦ`˙}7íûæ¯˙ūžŋpûvĢ]ļ°×ģ¸Õ<4-ÕĶ žÚ'šo­w}_¯˙˙Dvžũ{Ō˙Ķ_ũôĶÛŌ˙ļ˙×˙W×˙Ėųû0ŦžĖ+8ŸÆÕŊŠę°°ĐˆÃ+jWĩū? wÕöõëøũūū˙a՟˙1ë õ‘÷|Gŋúyĩ;ßŪ÷­ŋ˙ßŋŋīÕͧV-ģv)Ä0„v‚ˆ`˜Cx˙—÷Kũũ{–9‹5õ_˙fkũ¨0´Žļ›WúĶDņû¯öŋĄú ũ´­ûŋuė&Įh9ŠČøĮL7DDb$ØČū¨ci~×ë˙õĄõ˙ũ{ Ē˙wš°Š¯KÄßđŸ[…¯×eĶa{áļAũ Õ;ēŨa‡w‹pÂØ"#戄D)šGj¤Bĸ(ˆFI3H'äíycšzëßû˙Ė/ũĪŨ¯ąÃN§Ū“i„#ŋëõęŨ~÷Ļ|b‚aQ͊WØeŨĢƒB,ؘL!hZ¸$uĄ 38 ÔíV Ļd X‘íIøWč7_o˙˙˙Úw÷Ã]ŗŽė&ŌwiÖÄĄü! ëúĨ~à i|„íZ% ā.4 !Äw ŊŽļv#÷ZpÃEĮĐ.ûŋëŋZ˙Ōŗôoęlią„Â{T}Åm Âũ~õIˆN¨:™Å,ĩh4 ė‰ Yr×xˆ™TĘÛži=ÁđÂy?­/Ûõ×ŌēÕ[];^ŌMÚŪ‰EÄDu˙Ō[´ƒQĻĶL)‡8(B""9n ưÂÃŌ4A„á õũm˙[{é÷ ,[ °'L Áa„÷ËŪõ_L! ‚j˜B"#’ŗŗ7wNīQ×ovĘDKįŒŨ}ßyë†Ã0ßĩõĩTĶ6؃Ú:ĶM0L* ,! ÷ĢžIQ‹ÂŠŲBUÎôČË*Į˙ŸÍ°D^'aĒeĮu„ímBwŦR Ša¤û#‹%P&æCAÕ44>E™ŌÁnîöHō3 ŪaęSƄ™Î2ŒĪ8a=<Á’ąM‘ÁSF’ Ę˜36`ŧ ĶNë‹b´â°˜ĩ ´Åt &0„GƒAŦ)c„Š"tJ?%_,ŊŲ˛lÄÛԟaN2ˆŅ›2@ČņÂsÄPˆøA Á0ƒ ĻAč„j¨ˇlXCDŨ˛ ƒˆi§ÖčÖë 2Cē<.í5Mlöš ЈâMĘ/äV„tÕČĸÍhĶĖõ é vmõ‹L&4Ķ{JC‹âÍv7iCl›ĶA8|"íņ};¨wvš<é\Y;AĄdáˆ0„C ĸnĶĖ… ŽžH‰ė~7Ÿ3<Ã"Ë0ANZë]üŧ{hģ´ôŪˇ—tLxNí]Ũ0É=ŲUÂjO$â‡ĒŨäĮĶrÄģÉÛ žl$íUģbDDĩˆę™;:HA„ô\4ĶAĢiÚûž—ęq ^õcīđdãAē ĸâáååđčģt ģAŅ8 vÁĢMĻˇÃ ĨÚöéÚnHÉ‘ˆ [8*ØMĄ‡Aׅ}ē_÷„ĘV˙i?äeO˙ŌäÆ˙Õ¯ũöé*Q´øJžī×úķk˙ũl ˙ÛžĢîŋú˙Ēm¤újÚĶ.#Œn4 spBüDĢĢĩm=ŨŊ¯zË!­ĢūŋîŪūŊéØ÷{i§iŨô “B4Їšõ~ģkØ_û˙ũ2úkÕŪÚÃK­ĩíS´“bŸ´í-Ē‘<Â$3ņļƒH&‡h4Lv–i—ÉŋÜ?N=¯đÂåž­:˙õû(ī0›6ÛONÛ7]ƛiXv˜Ü;CCDiÄ79ŋö˜MŽÛTÕSOÖČûüh;MŠPáēLRiÚa 0ЈkbV-mʞvUÅ8™ļgi a4ĶCDáːn]ūŋkûk˙ŋ-ōÍ-¯jÅemÃˇlÃM(㎠Ž{äLĢBЋˆˆŒaâĨią  ­¤šiύ…PÖ/O}‘ŽéˆmD6)ĢTÕ,pA„&˜a û#qČ ĖŲö`ČąÆā„“‹NÕˇoD‡ĶirpŨŌ|?øõē^QĢtŋ8; ´!sq×Ím4‰ û=G9ėlS†™1ÁÃ8i ŅȈöŽŠ Ļ÷ +ŠZĨiƒöšŪĪ:hE’ˆ´Đ`š BaB˙0ĖãÍ8i§pĶTÂ3ļ.{ÃoÃnáá§ÛÃuí÷T˙īø*ē˙Nd÷ĔW Áĸnã U`§Ú'T"""!Ŋ8ˆ†IĶNĪ B"HØ@–; Ci„"ňˆĐˆˆŽū §eÆöNí íáäîÛuĩēOõĶĩū˙¸_×´õŽT^'3uįXrŊ œZ¤Üŧp#}´DDÉjN"ÂIÁšâ4ž8ínŲspwpÚ..[fįÕÚi§ņī_Ü}û˙>Ũ^–ĮŊČPx?Ė“™>ŗ(‰ †U$;–īŽvî׈„ÎŨ*Š‹QW‹†ÚwpŨ6õžö?´?úų˜ŋą_ ŸØūŸ´íũé|…#ŗVP4,&ŠĨœ4áBA6ģ÷@īģæCĸ>WĢ{~E5[ô×ūž5{p˙ũëß _˙OõÕôša8u'eŨĮ|‹0A”";AŖ]6ôN/ Ž(k|;ž—Oô8BÎÔGcĸuEÁO÷ãũ7˙ü=ķĸūš0ßë_¯vũéëtÖų™Ÿ§ !œœ?vĪTáÜã˙ņ÷īŗ˛$ĶÕđˆø¸&LĢ<â!„[‚Œų˙ũ˙ūūÃCûÚõŅy×rŽ˙í{đMÕĄF›ë|íK.Â!9ém‡´^4Ÿ ;ôî××w˙˙åI.ęĒHč”Å™°‹>ÂÃÄŽĸ;C´ĘKß˙ü5¯í÷ĸ1û_ûõūéŋziĢĻ›@Áúūv(ŪāÚ0åcŽŧzo÷˙üĄ¯˙öœĐē*Š$ C39HDa $c} î_5ŒævZÉ#!˛Q™+ į™[y5h'˙¯ū;¯ƒ OŪģúößŌĻąwtęÉZ˙Į9Y¤m¯=ŊŪŨņÕ°× ũ×I˙ Kßúô–&ŅĖÍĻå9AŨš4Eēk§-Ú w§ÛĢÂØæf0™¨ŠÁ&Ą mŨũ}ū˙˙ũ÷}˙ißiĻ´ÅĄjÂîøA„i™ĩVƒOôģ~;ûIūQ]ēīūSįšķҏÜmá4ÂCĪ4ķm2]ˇĐA“¸HÖęč6‚ž˙ÛÕđĨhÕ(!¤MdwĻínī˙˙˙ûz_˙ļzĩęĶbĶw֙(B4"Åoö››Íë˙÷0ŗE°kđÕ˙üé×ü&ƒ>āÍÁ4îáŨÚ-Ųš4ÚNŅĄîí#=Ũ'JļˇKõĩ˙“īē†š < z—É„?ī˙__uyŋ_×VN)0ąlŠ=khÂĸߎt\6Mčˇ~6/_˙@†ßėB˙ûéoŋûn SÛģtŨŌm‡iÃi?Ŋ$Øũũ}}uפ22č4‰Ī‡xH*ĒIĮßõ×ŊouŌNĄ¤Ÿh0ą  ÜTŠđ͆M¨ãáēvšIžî˙ßäWHđåŋŗ ûūÂũ÷ģĻÁnîáÚzĢmļ˙öŋÜßëˇ 5Į˙˙IÃJ);ģģ_h*üˆ?õĶXjįÃ_ĩÄ4Ķ‘^ ˇgA„ŌzĶĢx¤û ƒû˙Ņz‚wKũ{lö§Ũa4÷Š­ĶûUuĶūëcúZôŧ‚ Ø`‘;øj¤cĶ´ Ũ0^ÁĶģģžĶ˙‹ūũē 4˙˙ĄSĶÛæ>Ũm´˜ĻFöŠ„(Ԉ°ƒ7˙¯ũ˙æ×įģîČũĻ,•‹`ĶŌ29ŦDD_ûĶžŨ"˙/žģ}b­Z¸aŋMuxŨ;¯õĮ Ôˇ,ßû˙ũl&šjÆĶ0„0C˜T#˙ũŊ°Ķģ`ا0á—ļŦŧ-h֓ûÕ{íĩĩyĩĨę 1˙Ēīūꩆda…|‰Į˙ûĩĩŒ' Áƚ#îķˇö­‚WwÜSaßc Ph3ˆÖ¯ũ}iëņ˙ ÷Æũīû˙ķ+‰ØÖvԈŽÅ×ļ}™Ž]>Û>­ŗ4 ÅEQšÄ0BÖ­›ĩnáĒÃmŠģPÖ­4Đa B"7ü†ŋuoŊ0ĩ„ēúĪ ų Šû†˙ūÄ.iĒoEZ:i'Ÿ‚)ČOw OÖŠĄe˛Û…v8áŨbB+´@“A„ Ļã]֟˙i'ĮįÄ_ūX‘ÃAķ@—õõû˙ŠĒ3É>‘pØM¤†šąH6*9íˆâí‚+Ī)ũūŸŪņŋ'Áx^åģū­ŅyũšÂ.īk˙y3aÅuÎÜĘq™ä—;ÂmŦ$žŸ•g (&gĐ! Њi˙ézĩkÚDīôßÕÚĨū—épīžÕŗūk—ÜėCč—#HÛLá á˜3ŒģzŊ…Mū""ĀÂ,…‹+­ŧúíūŋš÷˙A}mû÷Öŋ_īžiü0Ÿí.vj3@‹›0ƒBëMŨ6ėoĢã˙ˆ“{;ī_“Íį?ÛS:ŌũnëûÜĪũŗ÷ÚëęšužšĻ˜IŠ­ō”×"Lá›0ƒDĮ­Ļ›ž‹ëw´īĩģF×÷“rR#.×;(d :‹ ŌnUea„ô”ķéû ÚÛWˇ¯˙i• K ð–Ŋ­Ú§Ļf¨ÚĩršA)SkzkrĮioÜŲ’víUÛMVŪ?iĮú˜ ›ęˇę>s*âųļšąNŠ­œ0˜a=ƒ‚Õ ķÕŽšiϚĒiąQńÕbĐk"iĻ2c+—2>JŖˆėÖ05Č›$öŗîŌŪÎ5mϟúiꞎ91×ņė$9÷"۝។¨g´ôAõh1Wd¸(Ž=ŠQbØab˜wjˇpŧ0šdpßyxaCđ!¤D1‘ĻfhffffÉ`ˆ ‰Ļ‡ôīiĶÖíoŊ;ĩi~-û×Ü!üŽļÉĸ“{N)œxČŪCˆūŸ÷’œ&™ĮfyĮĻíôûá‘uMu˛7NsaL3čFéŠĢxL-Ē#cDCd‡ˆöfx  ƒjj?ûM‰‡ËŋMoŌV?Wk‹đČâúūē.ú”ĄĐeãŨHlĖÆˆGvqœĪ@ƒ.ŠŨÔėvKųņš F†úi˙Xm'ßŲ5F“"f'Ŧ0†ˆfЈˆŽ‚—âŅq[N|ĸâîÂnPí‹6“ģ´ūyˇö ˙—+Ĩû˙÷oüė2tÚĶŋéϧė Õ9cŋ ­#zF‰"MY(FŲķĩ=a ė#ŽŌ ž×´īŊ‹ø‹B"˜Ļƒ;"\ąÉģ Ûn‹Æĸ“nū!éë§ŨūĸŒĐ_úūī_ũ7‘Ļšo˙‰M36=3īA† Ãąą,| ųQ´SƆmŨ ÉŪÉ} q´ kÛûiZƒk{Öã˙~ŋ7JŨ×vŠúoĒwũũĶ_iüdõ÷ĄŨ'ÛKŊēOŗŌ¯ũL˙ķl< Ô(&ˆTŠđōōūÉģ‚}Ĩ5 ļa„DĪ[`ƒŌTô°íęJ’I ’ $‚Imß˙ƒü+å–>ë§Ž…v÷ĩ÷×ũ†á ƒõûkņ]zöØT~i•TģĶEdõ{4ũÚŽī_í=]‹Ģéĸáŋ[ĸŨéjÛûģĶŪÖŊ>ô‚V˙öô…oūũúpužž=kģĒëū—˙ĮŽé')wõuņ Čē#įŗfu{NÃ.Hŧi{J˙í5ÃöŗÕ7íSĐë˙ˇ¯Į¯˙Ŋ%I$’t’­4$ܗīė¸ŧl=˙ō+×ūõūÛwZß}YÆŽšÜj­ŌÅÕ˙˙˙īŽųīē°ßø?ŲPĘîÎŅ;[?˙čzwŨép‰ĮūËĒīøvqč<ÂöÁP6˜¤VЈë“įDk2+š3‡iĄ…ĸpÁö_'tŸ~˙Ķ‹č~ūÛä_ūÛ~˜.ēå^Ŋ1_Ģūˇ[ßûŪęVb[ŗP™Sŧë˙ëûiöŨz ūøŨl}ņÃÜ-ėPZa'ĖčG5ÅäĪŗÍBf„|“`ļĐlŸÃīúÖĢ×O`°ũđŪÃ˙ßãüˆŧ$õÖŋũÖģoæ?VĶs¯•QĒe]ePđ†įaáôׯũ­aãõū§Ũh8ūĻ'|iĻÖá‚$!• BĖöO'„ ‹ąÃmŦũ$;vŧ^ˇû#‰˙|ŗ×ü>~­ŋ–ũôģˇë÷ˇûĖqÚa(ÃW]wM„ŽŽ;ē¯~t÷ˇŗŌú˛(í^‚Õũ0˜ aR´HÄDM4„tkģ^x%ōí˛xĐAļN˙Ŗk¤ŋõ“0~ŪĢBEb:Ūžŋ˙nũ÷TŊuũoķÉÎAŠo×÷]Y;]Ãūøĸæßõ0ŋėũŲūūĢôũ4âũv‚iž"-Š œ5ē-í: Ũ÷§ŋüßú˙˙ŗŸįŊZ˙˙ūīĖĢé'wdsŒ0˜oģ0˜B"=ÃŦĪđéüėx¤ÉÛŨõi6 ­„íuÜ-öšiļūÁ4á1ŌĶîękúu}×ģo!ũ~ŋúŌėķÖÕ~÷5'ũˇßÖ×ŋ­-ŨŒ4ÂÅĒŽúŠîJ%ōs4ŊNGˆ  á›DLN*ÖÁX ƒcŠû ņiįRö„CUØŋ˙ēˇõī—•Í~ŋļĢĢögü0X¨ĩNí-žŨ;ÚpË´Ø{ãa˙\! DG^Žšģ54ë9œ#ų˛'ÔĖÉPa3yŖ#ÁHu˜e @駄 ˜jėTSPéĻŊŊŲĶ@ÁÂe.*Œ¯ā˙Ú¯_úé(ĨEĮ˙÷÷ÖÛ „DJ wƒA§Ŧ}&“ģV­÷7xˆ™á;#ŠP5(d`čĻØA”ÍÁ;MBg‰40›„BĶCA ļš—wm†ÖÔđ˜&ƒ ĶBėĶ´"8‹ī™™Ųīũ¯_]évqĒM˙˙gŸéüAU„Ķ'ŖöŌi†ˆ`…Ļˆa†„E?N‚¸ ĶÁ…XAįĻž.]ļíeÃ~xÃ9!Ú.ģNõOˇžN„ė!-˙WÛ˙˙ū—íĮß˙´Øa'J;MŽ !™ĮEEá†DcÎÉÕtN)éŖE‚ ¸aKƝ„GĘMÂÅÃÉ[WpōīAÛ ¨v ^: Ũ;ŋļāôøˆˆé.õá‡ūŋûūũûŌŨųÆT¤D›XØĻFôĶat""8ˆ°…2A’Ŗ¨2čƒh˜‡†ƒ ļ€Ōŧģqo:ģ´īnô+v°Đtžũ}õ]ÚĶKO|w˙<õÕ˙ͯžôÕ4øžšiĄ¨!HFR3—“í+UáėzoūžIÛŽī[Öđ—ũŦ}ē}ŋīÁ?HNÍ3ąķĖ‚īūBKꋎ÷ŋuöĢšžļƒ ÷Øh0„DDsŊ#ēWĻĶŨ9ÁUkŊ'ö´›h˙īÅÔw°¸Ã˙Ԋ}qLd|MXDtôF<ęŋü?õ˙§éŦ0аeÎĐЎIô™3IŊâīäDŸoČ0;}ūö›õ˙Zũ‡×čwīËא1\›„v…Ļø‚OėÂôŋ}mÖímŽ„GÂŽ›ģY,EۙæŪãŊ×ü+ŋ˙û~Ŋ9 ėąÁl˙&įá.ëđF–ę­tgĖ=Ŧė^5+Ņnąũũ­õæv’a;¤ĶĄ„ĄzZ˙r7›āĶ=$úmęÛaëlŋY˜po˙ų “ėW÷„F;ū‡ ˙Ü!…oūÎķ.Ew‚n×íjO’Ŧ¤ˆųé2jŌqũ8Ģ#Ī­éąWąIĶaUîvS˜gŧĸ$õL6÷îūoít:'ˆ?Öŋ,OėãwÚŅ}˙ÁžíûmwŋīĄëŽ8ä ¨)øŲa L&úū)7cģ¸đÕ3ŽLˆĒkr4iåĖĸ>ĖPG āĶĩ[¤ŋĐ]¯ūūęô{æ×˙˙úé/­áūŋÅ_ūjms?ÖÉÆh„†ša žÄ¨rŨūīƒX":iØˇÂa dŒė ëyã0ƒžÂí;¤h Ŋ/¯ũũ­oæ4Ķnõˇ×í͝ķķd‹[_[ļĪYDôŌnūÎ>Õ=0hí_í9 /Ķ Đv4!ač6[\DEŠ&‰d i÷Ŗ[­ÂnŌúMî´sjÄ}Įŋęšp×NJ6Ōė&aœi¤š!É°Š…Ķ´í‹‹ }õkCûh1A;ÛOÚUÄĨ šķ‘à ČĒ˛á† Ų;Öiéŋ˙&ÆšÚQĢũn ¤ÛJk˙ŌôÕ]˙ŋĢKí‘ââļPˆU¯cŧ' 0a&!ÃM‘]„ à Dņė0ĄŠ`Čį °ĸî/ -NŌkÚyļOOô]´únlãß˙øA¤5™ūīŋūÚMģˇ>;Ñ|ņū˙'æ#hLāÚ ‘G´Ķ­ĩÕąLŽa0ƒ Ã'ˆ0DƒĢb ÅXˆ0MÃ'œlĪ4ÍΎņ”aØ@ĪĮ$NŨ„īŅvæOAēo˙nëŋų64ÕtąÄ}ÕęĢņ}}vET _˙ũ'ƒNˆLЈ°„A–‘ ß ˆˆˆˆˆ°ÃMR/â-ô &t<†FŒķ( „.Q!Úa=âÃļôßī˙ūū?˙ ĸĮ¸}ÉZ5¯ūīģ˙˙ĻÁ×ū˙_ˆˆ‰č8ƒFƒCLã0;~% đƒAĻM°ÂŅšļīÉCÚũ{/˙ũ0wĸN¯˙+Ŧ#æRĸ§îø™ädŠpÉVlŋę•˙ö˙đlŦõī˙ĢjŖt8éÅí‡h6šĸcŋ ĸņ˛|Ü:îØđƒn×˙ū‡ûˇˇđ‡˙ÎŌäÛíéü–Ŋ4“A„ ¤i§˙˙ãļ˙ø4˙}ŋ alßņL…Ú\4Číôí:7>6`‹ŠvëiŊ­Ŋ­ü|ĮßŨc˙¨7ģûuä ‚dŠ’ũŦMä`Īĩ:Ā­ËŠ&; ö˙˙}}ŋēnr%0÷ˇ“ î6:a‚ ûŗ™]„˙î­ëmˆ×ˇ˙^Ņ˙hWô5ín÷ú§ŨĒáôŸ'Ąä囂 58A`ĶēK }‰âē÷˙í˙ųžĶ¸zÚĻ>Eķ412 ˙˙ßáƒV”ĀĢúî%XUū‡ū˙ę‰=õëa„—ß˙]5 š˛ đƒÂ =ØļšļõĶaāŸŌs÷ĢéméĨ°íØAŽņo4L‘Ųņ§÷_˙ãuũũO?˙˙›ZvĸžÚŲęՊƒÃ‡ [ëŽjXOsė&n0H;DáÅÍĐĐvIáĨw]¯˙oũ\įžÚĻØMĸ9vf€¨g`b”‘‘Š‘FF¸{˙˙“ƒ$Éš´} ×Oõ˙˙ģ™Ú¯§|SaPvŅŌ÷_õ(&h­îáÚûÉÛWöˇíĄ__Ŋxvą_~Å+!‚qû0áÚü„}˙CЧŋ¯Û˙f‰ūĪĐac ϟ v0˜L0‡õ}<ÁAĻÁĸcŧmˇl¸†ßWO[ūĩŽ6G¯íXŽÚú‡§ĄÃžŸ¯īÎáūšzŊ5^Û[MŠĢL' åÅM ϜŊBm§ĸíĩ@÷M+ž {OˇÚî×ŋĶG_[M4 ÁĄ|EĄ#<Î38i\;3§ËrŊõ˙ĩÛŊŨÃŊûĩâíS64B! L&7jĘŗĄ ŊŠM~`Ψ–įKAæĖœķ …A0ŠØKøí4Õ>?ī~?ū#ˆˆˆ‰’ÄšĻZgb鮇ÉŅT˛ ™ff`Ėƃ) ¯ wŸ›aœa7sĶfŨĨÅ["ž)ač0„DEãc„Bā†ôNˆčá‚uÂĸbÃËÆm%t÷ߎ÷„Pú˙×û˙ŋžÔč(DN.ÍC˛†f„AL‘œ3Âj¤w‹Q+%dėC$+,¨FĖ‹ˆZpÛ4 ûŧ$Å Ķa„ŨSa…cŠÂ0AĒÃ>ĄˆæŒ Öh˛1ØAĸP-Bh[&ę-:t´˙qüĄ˙ų8–ū˙ëO˙•ÃĪåEm5;Ŧ&šÁOÆ‚ÃL Î 4΃Ė2C$˛ÁuAœ.Õ°¤PŒ &` ĶTŨ§p˜EģÂĻ S#‹JÅ[IÜS4&°ŌˆĪaŒ6‚ŌčŧnĶڇ;rw ŧØũúÚ@ŋë˙ú˙Û3˙sŊ4ĶNąĮT^X4ĐŊ0Ë a>‘!Ú¨0ĻzۃšÚķ[Ūv_4 ĒDŨģŖeË„´MڇL&šl  ļF“Aœ8‹(h!elŅXĶíģ´‹ėžÕ=m~¯ūĄī…ũŸŋŋŊėõ¯zšÉ¨‹­eŪ­“ß.ÛĸíËÆĶPƒaâŌLš‡p`’ úNĶM~‹Îí$Ûĩ6ĐŊU=7ļĖéžPÄD3DKq‚ ßĨīUuWģWīÕëŲ8NŌ͝÷×ū˙[V{ú‚~Ūd34É8§Œâųķ÷ž<˛YŌz§Kw§ ¸˛ņÖĶ[Kŋļöūû†ši§Å?[ĢŽ¯ĮdZuU÷ü{Ōīū‘8ëĢßŋûk¯möĮ Ķ{ûáÉR ˆ ˆŪvr7 áŦi*ÚĨ­ĩļͧŪÛ×Ķ[ģ_ßīŊéuŋÚCė0ģ̤՗@ɸڰÃ_vîŗ˙Y@Ģ÷"˙@Ŋí?ī÷ޝöÂH6šM5ÃJĶī‘Ļ>D#Ąĩ´aÛŲE[ß˙ĩ_ū¯öĢã[C˙ŋû§ũęßûŋņB ˛mj­ĩ˙øeSū|dwū“ oĩŊXŋ_°ļŽ!ØD& M ÂOiEėGŖgūb4ũ§ÜÖÉuö˙œ§_§ß˙˙üĮ×ņū?˙ëo¯u­Ļ¤â875{Ĩå‰Ą´Ôí#h˙éĮ˙EåûŠbīK1ũÁ˛;Ēvšą a2(đá„āĘR†RIN5 §™˛ĄœÜi›ŋ†ˇ´‡IÕđíúMųĖ{ÚÔk˙o˛8¯aíęMÍ ķĒŋ˙úŗ˙ûāô ‡öëˇŗ°H¯žvŒ)~Čp~ßŊ~˙IŦĮeūßa…Õ†šØŠiĻĄd‡xa0CˆˆˆÚ đB0îú×´ß÷ûHØÜ:Ũîūī}kÖ˙×ŅõTõV´#ų Ŋūŋũ×đļôNęøfĨ„i­04™ß‚ ûwé6Ãģėŋú5šGG 4íb OaމĮuiÚŊ÷ß[ũ˙ÛŽڏër0—ū˙īü|÷˙Âõ˙īŨķĒbĄ>K&¯ÂD-&ár'2U#†‹‡OÚIĻßw äÚqÚ}Ú´ĒįÛ@Á4Đ5$oRŽV[īkxáŋßqņūŊ‘o˙ûßũ˙õëŨĸC˙×Vŋ¤ÁŋūŲé<+gļÎ;ÜSiĖĒÉ6D‘( pi뇷ãMXa_cbôlCŒ0‰ņŒ0„0B#͍kw÷ƒŨ¯ßīūŨŊ¯_ÃŪôŋ˙ßOúŨkŊ}˙÷}jˇØT Ģĩc˙|ė„Jā™C™‘ãÁ7l<Á6C3Ēvģ†<'aD-Ļ™Ã_#„Đ‹GėZ}ÖāüũŊ˙Ûq˙mJõ÷¯ßõîĮūē˙Ŋ;ĒŦ…-ëÚāėmkmä.QFĖŲ Ėg\Ü2pCj†Œ= ØaD9ģ´âīTöäB n Âh2ŠĐ0ē‘“öŪ Ãôžŗ–ę?å%×ūo˙u˙˙oZĪßũ˙jŊ¯ĻšpßģéĸˆEĻžkˆ—å<›„ 'nďÚa^ÎhŅëé“zWcw¸Ģt"""""YŪkļöÛåBķß÷Kl7{u#1ŋuķ­ßgģ§ũvĪV_ŗûil0]×ⓠļéiúØ7Ú Éa e>J3Š4`Ķ8͘@Û"lŽ;0Ÿ oØ5{H1-0žŽöī&/ ßũW˙Wöûí&ūÂēl0Ģö–ØV9~ŽÅ&ŋv@Đ6“ØĒÁ„0IõáĄ}]ŒãÍÞ鄤vAëĻ~æÆü*Ãēôî×n6"ŊvŦ~f6F"n”ˆ¯hÎīLëü¤ƒ˙˙}ŧ3v­ĨšŨ¨ot+JėTBL*ØTØđÆÅm ͏jÄôÂa…BBâ2úíƒCZĄ=4ƒŪíÚčwá˙÷ßwĻ?x惃 ˇümîQ(ļ™6Neiš2q]WnžũØūúĮąŽÅP1ē˛G‹CB$ážîâ“aSM4ÂļÂļa4ÁJ„"#N"#čĪ^ī{8ęÎ9víwéÚoÕî×ņūģá˛!@ũåˆoˇÁ9Č>™)‚O|{ĖU ÅĻCˆÚl;M4풋AĻė4!…B !´-ögA Âp ˆ4 4 4"#N>ļ›8ë÷wß§píũũ_ûũˇÕ2Ą0mËŋŨ7ŨÂÖöŒĢ3˛Ö"ÃE¸pæŊd öÃz§BÇ í4""""#a5AŦ0„Dč„DDG_wëą§ũ'ûũęūíëëj"“˙gM­†ÆŧYfōĩÚnŠ;)%[›š#äEâ@†ƒ%Dˆ8ˆ4,!¸'qQ0/ĩO˙õū¯ëĢûĶúņ[†Áēķ ŽüÎ~Ṩ!eTa߸˙M<‚ģMlΊf0ƒ8xˆ„āÖÄ.Įū˙¯˙Ũ7ūß×ũ.CNoõīVĪWŲOvEy™\œIgí8=_zФģvš |ŅDí„IŨdÜŧCea<\›–ŧ˙˙ž ŋūˇīS§Ú í˙[ė,qŋM8`´u 9؝ͯšą?ŌEŊ :Ãn´ đ›„ÛY¯+'iŋ&é•íŅ =‡ūÃ˙äG_¯Z†Įęîŋ˙AĮjĮ]ž"=>ų[ĪÆ`‚œĘHÛ3!ëŪĄÔDâÕđŌ/ŸØ¯OXNÚ~šWäŪxD{)/bâ ¤ žÃúÃ˙ÜÃ?÷ũöã×jŧ3ëyɋĐϚjНÉl §iŪdâϚküĐņUÛHnÆ›iáęŋ¸mNęBŲI yŧęē’ƒEģ4iíūĄŋú˙÷r%÷¯Ô„=ˆīCNE„Õ0„qirc6dƒR(aģĪQa=´IÜŧ˙Až”tĩņõDæGoō%ēe–ŠpÁCŗųĐ4ˇĶJĶEŽåŋ ŋá˙ūŊõ˙ÕûĨÖ ãkių‡B?bføŠäņ„Âa-Ũ—›dŨËļt ´ŸņõĨö?ŒûPÃÃ_ī’¸‹fŲÃ#o qã?&'Iģg˜3úA(o°[ĸŨ–õ¯{ۚ„ÚŊūsu˙ŋZŨĢöëĶ[b°˜iĒÄE Ōú ĶŌn/d­ģīĐm'vĢĢũŊ,ЉčŊ!)ÉC÷æeŅÍČ3‚Ąiœ2žîíaĐMØEŋé”-ų‡î­­Žį]Ŋwˇû÷4Ké륎ģ´AŊ†ŠtQ ˆû\f}ęÛ%^Z}˙§īũūĐJ ˙螀œ˙ė6qœhZÛŖ;†ļž¨mÚM¤^5Omßëi7ĩĢ÷ |÷öŋ}÷í××˙[°žÚ]õA6+Ō]„‰ÜDZKƒ­ m‚ũ ô˙ũ{×Ųq~˙ŌŅxŊßtŗÛũWˇwO°’ ˛wzŧ5ęî3ct¯Ō÷žŊņēŧ,­ …ĘĒģũõÕ÷ī÷ß§ũĨZúnÂļĒ„#?\5ŋz˙õ¯˙ã˙ÍßGŊ&ūė÷õßgío{Ũ‚ņöŸ ;Ž õioô×Ú˛S¯‚û˙r’u&—ÛU{í˙˙˙Ū—§jÆŦ4“Xj0šąWĄØ4´ˇëôŋ˙ūˋ˃Ķūž?íĢgĢ ļyëkĩˇIۚoN˙÷{×|w]‡īŪÁ¤žŧ>=$)%û˙t˙°Â§éä˜ĨüA…ēBWxĢđßī[˙ū˙˙ŗēŌ˙Ŗßäë^ė+Eá…bSƒ_{×ŦōÛđˇ×Úëá‡˙˙ra›ŸiR ' ~E?IRI~ûŊ8˙öļ´Õ ڕÉkŊŊûņ_^Ÿ˙úßũ/O4Âč6ö ØÚB"? Âûûŧ;čĪ{Đū˙¸>ūšĩü†HA됑3STĸîFĖĄ2|–ŸŸ,38&˙Ū’I(I TI’¤ƒI4 !ÜRūTŋ˙˙ī_ûöũ,*Áˇi‚vAĸv‹Ŋûnŋ­‡ę‡īVŨi›Ã]ĢöŠė3| mš Ųr  ¨Z!\ŒpĪ uÔ¨ŒŲÃ\„Á 8!â62ãfƒ&#Œá™‘›0y€2: …Mũ˙oŽ/ë)CĻ !˛H_ā˙öP/˙ī˙ęęĄ]m°Đi„-„DG˙ŪūîļŊvÜúˇ[l%ŨŽü…ļÆöōpÃ'm q h6ØLah D:r í3öĐM^” a0š„iô†‹‡x×Ö˙_šb""#J“‰ŲŲd˙ŋū ī˙õēZæ}¤Ĩũ{X0„Dūü˙˙éĩ '"ÃI‘ÕßŋöŋÆųΞ5ސ_ũnšēMōOž˙˙Û]8ģOŠb• aŠĩ°Ą1n-}Ã+–s J˙øöŋũqî˙˙ÛũawīĸßĒĒŋ˙ ü‰é0ĄRI$’HöÚūĢŨϟ´$ãjŠJWą]Ļ„U8_ë~BŽąß~Ča?ÖûŨ-žXĢŋė?ņŌ×ÔH۟ę>õåŋ<÷W^ģũ6փ%Fi+ą†d+4qî3Miá2 fÍ4Ü>īīwũ˙īû˙Ã˙Ũŋîūß˙˙O”Ëh{ŊîŽbûKuƒoīÍæļf¨ û]ˆnŠģMæšv„D%‘Œ=đ–y‚$ Đi5ĸP÷כ=ö×Õ˙īũīīü?ßß˙õüĮũũß˙›Ūûŋ°WŋÖŌ†† áZbívEtÖᖸOų—3ˆAĻ|͚FaD0›/­ģm4 ˇyúí$Ūû[X˙÷_øũŋûŋũÛ˙˙úŊü+Ē­§ÕÕĨan(CļDÆîvGģŽö6˜ Âl ÚĘ [ēDk6g\ž6d Ęi¨AØ@â DQčŧtûTáĒĨëÄ5øô/˙˙˙˙UūĶîáŋŋˇ9ęõ{†ÚÚīÍUØVŌž*Ū!ąOÜiĻá„-ˆgŠˆ GõMh"iĻbÃA— 6NŲĮËę_x­ļ—ŋÛŌëæaVŸ—˙˙ū ß˙‡˙˙ŋ˙üZõU_žD8ŊÅ1ÆĶš Ū¨0<4 ÁŒÔZl29"pŅ7lŧa Ķ†‘xč;ôõkø-¯Wė’F”#0Ÿá…ëõûĩéßŪ˙öÛûæ?ĩ}öüv†$Bŧq;Éi4đAĄmmf´,'q &ˆÂ-Čŋi“Æ‹ÆĐt īøĶoWũ—ˇAuŨuõ/Rw_ĐO_ļŋé÷æ?Ģ XkÛ_4ßŋõbvšøäO„‚GiŲļpa&PĄ.\&B"""-ƒDČ´ž¸´Ÿazžũë˙ūŖū-ūŊļØŌ ézī÷ĒŨj˙]o6ė{éí1Ŋ[ûi‘ץI|ŦŦŲ‚š Čë!˛xû?žĐh4Ķ‹X´]Õ ÂVČ=?{íoī˙§˙ú_´ļũHnũĘú‚ kŠĐn•…aŦl0šąÃ/&­w÷w†ƒ ^i›0A„!™OŲ9Úiú4ĶM6#—vOŦ)<ĶKB?4V׊˜Ÿ‚(~“Įú÷˙ŋõģį7vĪZiĻ§õמ*6„Æ 'KÆL!i á„" ĐÂĶLķ6A2>'A5<-6ŨƒŪ퓲-Ōß oí&YÔ!P˙‚ĸn×Á Ŧe¸_˙~˙w­Ũ(~Ķŋa‚ØM>Âi˛+Å4MÔXLˆŒÆęÚv¨ašmĸĮÉž^=Ų7A“9cßopסũv6¤Ûō-[Ė: -˜ja¤”ĒI%ĄÛĄ¯4˙¯˙lĪĩ ŗĐv“{LlZ ũϰÂuM“Ä5¸š*ģč7AēÚv…Ō îīÕ×˙ŋášå}ĮÎĐÂR"~) $’T’HÆI$’I ’"ÚIM”W„ÃČßá„xŠ āЈƒL!Ž×¤ėŸ0jžË“ÛáÕī۟ë÷_÷áÕŽ­i —#27œ0A§ŋãēļŋ}ūŽē 6!#XCF°B"(!5ũ‘|‚™ ˆlãí{oëjĐĶnõûģ˙ũ×ü;"+ĶO!ŧų‚da‚vš/ļĩ}™ĢmŗÖœ}„B{I4ĶtÕŦDDH9B„ÂI¨ŌUīi—AkēčE¯úßJ˙jŠwßøj.î9!Ų¤g›< Âz}ô‰Ã­¸":ö’´Ŧ'f ‹A ÚiąIđˆŌ !ˆ’NŌ­tČŽáŨęŧGëîŊũũ˙ã˙˙īîįj~ĶNûOĒŨé÷Ō5ØíĨa4,1i„"#­^ûŊWęMĘ"˙äH"×Öŋëö˙˙’ Í{ųÚŧã á4 U7i=ŨĒĒ×TĨŽšĻ˜B"JP0BĶBÂ&Š´žKŗ n?ē˙_˙ëë˙ë˙ Ō~åHˆI4Đ`Ũ….ŪõŋŪžā×M0…“ˆˆö%˜¨<ô]Ŧ0ƒÆ˙û˙.īõ÷ũ˙[˙ûߛˆcō3„ĐĩEÛa>ŪŋWõÖõą\C"YM-†tāĶ­[é/éí~´UŽļžŸ˙úūšĮūa?PšūN4îí~ˇ˙kŦ0Xŋ<Íø“bŦävb("RA>B}ŅvØ^í†ë˙g˙[đŸ}úåíũ{ĩ´­;/éÚFŪ%ŊĮüÃûĘ>Ũ’ļė–4˙īôûu}CŠĮRĮ×M‚â8.™2iž“;WžÃŽ›~ŊëĒÛk^é-…a„›¨‡­é^ǚl0A…œiårŗ fĶLÛĸqĐ{í;ĩúŋ˙˙īņT#MŨ]ĄŊ˙0ôß%ÆŽēxúī´q¯vŋhS“ą¨m(;´Âiąđū˜]‰fĖÜSÄБNž ÁēoMwŨ÷§Ķ˙ôˋŊvÔŊ;ãI•ŌųƒŧĪŌz}ēßÕ¯ĒÛ§hÛvʋÉF qVé‡ ƒŖ(M‹VkÍH f4ÂhŠ€ČL×a2qĸßŊ+iĶץūß˙dq~ŋמÃ˙ˇ•\ÚrpƒģĩĩâV%ȁįTũg.ŋí4ÂL'͏q &j‚¤oh4Dæ""""vd1Ÿ‚ â'vD%ĸā0‹pééǧš>¯Ëģ_ũüūĐėo¤īŨ†؟Õ?CŠŲĒ3ö`Âķ=0öß˙ßÜD0U ĸŠš ˆˆ”B!ĢWM2“°­mpû§I÷wv´šú]'ŋ˙ų:ŋ˙ũ¯gũŧBwO˙„Pķ6š}§nŸŪû§{|DDDDDkŗg†•éÃĶtîŌžÚM6˜Žãö\^žŋéz^˙÷mŽîÕ;_īÎēj†ēw>Z7]ĩĪöŽcîõĶ´ûO iÚ­_w %cį?øõ˙˙˙˙ûĢķķaSößÚso<Ķ6aUģš7m†°ĨįoÕĩz˙ũž?ŧ>˙ņņņvŧ,˯ŋžĩ÷˙ųŽ˙íb­<ë&ũ …Îŋ{ģ¤ ]WēØ-ėTvÃ}Ûūû˙ĮņÔ;Ōp˙˙û˙֟įíŽŖuéUŽ˙˛FkAÚwĢi˙n‚LSĩ¸°…ą˙ˇũōC•iy7>LÅ 7 ē'i‡_˙õ˙ļzĶĶOÛTíS×ūKŗF`Īuƒ™‹îwmĒßŊ=„ÖčD~¸oū˜B$¸^„B`ÜcMƒß™¯Uõ{ģXė Đi§…]öƒ8/|ė$fŪmđƒMQoč0Ąˇwü{˙^ˉ‹MŽŋ÷ž‰ßtlƒˇŦí°AûēÚIá8ēĻŦ*cŌÚ !\ĒodJ‹ÎøƒN-?{“Î÷˙˙ī­bÁođũWč/´œõœëŧæéĻÆŸvŒC°šļÚÚ„&?hv—;gėĖÉdO<ĶĩôŲ!Ôą÷čëĮūŋß÷eü—ŪûüŅ/ækü&íißk 7X‡3¨ģÃ%DX!`ƒ0†‹áBtĻ¤!‚jąŋ'ƒĐ}nޟ¯ßī˙Ąú×kĒéØOöÂjļŋØ-Ǐav û  ÂC×&y™ Ģčąß¯ĸņ†]ę ßώé˙˙ūŊëū¯I§nÖ0ļšÖÄˆƒLlžÄEĨ:øŲÍĮC$Ø&ƒ?Ô;žī_õWĩcÕzũß˙˙˙¯Đė$Ą4â´ĶŽ-ū ÔP‹B; TĶ\ Á8´\4‡éŨÚk_kIzŊ×ũ˙īļM:cõâÂŋX´#A“ cģvČLÚzMËģŋŪö6ãhđ˙ĩ˙÷^ŋs÷ĶL&Ķ4PŠ„ødĻGžhHĢ÷sĖ0Ŧõ.ØeÚ­'ũ¯˙âėŽ/ü{­ūžcû_÷bB"Á2ņB!SvŨØ] ­ĮnŋÆģ´—ø¤îד­uũ¯¯ü":ˆ´")5˙īŋ"uüœ_MEž]Pn¯¯˙ūŋũZøˆ]õ˙×āļÛū´ŨP7}îŋũļ¨0šzIÛ^„Žĸ˙ũ2÷ËË oŅ;îŸöīsĢßvˆŋ/‚8Ĩē5a{_Jŋņčbŋ̝mģ'2šŲúí „âÛIϘA­ĻqU,äŒá÷ß˙Cķ×úÕļ˙ģŗÕ§K§ļ‹ U Ō„yd*ŽÁŠj"ų* |D@ƒ.ŋ˙ö–ŋ÷ ´Žáą Økŗā@Áb™'b"•Ę‘]D_#ŗ¨0NĪ §‚ Ė3Ÿ DBˇnĩ uëūŨé§knė0ĄVÚXĻ„Fƒ@ÁY+Pˆ›K0dfB$S‘^`)€Đ\"NŲvJ=ĩ.ã™Dm™Ą˙ũüú´a;‹Aû¨0¨0ƒˆ`„rolėvš ˧bų†lÉÛI‘ķ†lf˛(擈ˆžä#ē>é¤B=čhēw nũëúúŲųlē Ük#t ˆˆdĻ<ˆ°E´Û’“%ĸ!jp_p^ BCŖ¨@íσ{†šh„•ģĩNē¯Čē/÷2(Ge-FĐ'wy…íŽÄw"ŽÚÆÉ˛.gP– —$Ōĸ¨Š}r+āŌ“r+ØH”0á§ ģ†š„“}ߍ˙č_šŲ †q3a0šŒÅ4Ķŧ&¨=SN)6“aˆˆįe‚$Ņ„p0EˆÚ% —‹'ŧg´“aˇÁ„4Õ˛,:ypG§v’ †ŊũĩģĢũ†ûŋ~aŌöv! 0…„BOjB4Ņnî'v}4ø×zĨŧp˜aŸ‡!žČ.fÃBgKƒá4|Ki[o˛$‰ģvŸīmSŋī¤íûyÅē˙ßĖ=ķ|§ū9ŲfųSgŖ„÷5ŅoEÛlôÚMģ>Ö4Ė„4ЊŅá[č2>Ļ‹¤čŽÚ´Â„Âjˇjͤk§z÷éŨöũ}_\âũ§õŨ­ũJÔu‰Æ<ķŖČÍĖŲϚĸnŅnéǎļĶoģ÷ŋZĖfž­§Ŧ2,҆GíT{mZ…ĢwßIÛīˇũuú°oúQŋL~ŨFëˇÆûPˆI‘ĖöM;6h0šqûg=ėq˙wköģ„[KVÃMnĶ{ģ§OžúĩŌßí[Ķ÷Ž ŋõī˙˙Müe ŋ5č74~čģh›‡ÔCģēZZv?ĩˆk~˜xÅĘ“ģ[īoŋm?8û¯×œŪ¯üŪ?ôa˙oũ¯_ĨąF}õˇU„D: Ô' ˛æíŊ7Aö ļĶOWûl8oū?đxa'˙ãéŽÔĢvúi7û¤˙÷˙ƒ¯§}¯Îv˙kkü•N'{ĩrZÕ8m=>îõŊ7ÁP{§ëũƒ`Éôšî~žŪ6[‹ŊmēÍũ0ķ‹]†=Uēŋöíū—õîéąßną×ß~IūūßũīąŲN >úNĶM˙węÕŋ ļ}ū ë†ōÜoF[¤4ĖŅ/šŽqūŋŦ(÷! ¯ũĶ~Ã÷aŋ]&ņK˙ŋđũWõ[_ĢxWÛ×ņúLŽ$ë÷Køâ †Đ'˙ī`ŪžåpŖŧ":ŲÃAņ˙_Pū¸x^Û¯ŋNú@’KT”TA˙ū­ēüoß4˙˙s{ĩž×ŪŋņPc÷_Ŋ\JÖû¯ķČ>dėËMq;,Žą|ž4Γ ĶNú¯K]+Õ{Š˙O˙oÅ}ô•R]˙ėą˙ũXû¨g/ö ļŪË  ũ÷÷rī_îŋzy‹!ŒŦŊ_5"´Ė™°AĄdãMÚN:}{ít›ŋļá]ą_ū¤o“ļŌ ˙˙ô­¯ú¯B=uÁ×Ŋ%Œą˙ W[áæį˙˙Ŋ?L”míeŸD|暄ĶĐv™›ÔąÎ;dâí&ŪõčUëíČĶ‘qė}aō^ö4û`Ū…*I*T’YĨX›õë˙÷Ô§IũūŋMßíßukk˜×TÂiÅ^ūĸJrq”"*q ėŽiĸvŅž‰ÃdwMzīI žõ˙ĶáˇuÁē Ü:×˙ãīīŲŲŦČáũÖúI+ëí­ízūH°‡ßíŽôßŋöyg¸­nĶNÖXAöínëĒĮ’“Ą„„¤]ļ0Ķĸņî Õ8iŅšBOŽŪÖŋˇ[É[ņž?×ū˙{`˙íųį÷ö˙I’I$’H$’ ënšz˙Ūßŋŋvà °Ķ¨ØmĢÆ›"ž Š&ŅŲI ¤ųã;āˆí “rOwŽŊŌz÷Pëwū-í~ģ퇧Eũú˙_Kú÷X›ûū›ú˙õŋöę×Ĩ‚Š UiŸ0Ŋ¸yūīŊ/TŨbš­ĖöÚ ĶˆˆžæĖĖÎ"”0ƒtāÁ4-Ũ ĸîŨ§ĮvŧjūÆĮõ† õõâÛ™äæ¯V'-˙˙é?Ē˙¯Ûuž’júá&ŌAÛφ› i(AWJŲ˙Ŋ´ÛTîŌÂvŦSBCÄDĄPˆų9=8žKȂĄ„NlŽ(}ļžēŽ­ĮTĮa˙páûu%ßū™:̎ৰ˙oūÚ[÷ß×íõĩ˙tŌCĢŅ =´‚ =:Ü3Ž˙ŌT”$*Bΰė҆‹]‚ LAhģ„Ņ8Ķį›2yõŧmuė4¸?ö ‡˙ÁV•ûé˙æŸ˙ˇWkô›ũ%˙lŪŋî’x! tT-ФÚÄDYpŋUÕ;*U´"">‰Å´ÉŨų¯]7û´Ũų[úū‚úaÃ}ŠĮcÛJŋíû[ŋT˙TÃ?mÖŌ…¸ė†šh‡öÚH7A2¸‹ƒBЈ‹[xD'ÚOvęڏŒán…ûlj >øi/}ûĒ~ø?ēčB%ߎØoŨ÷õŋõĶēUMÂú ŠAō,“ĐĶJ3Á€˜LaUŲ–˛ ŽĐÁ”TđīiϚT›gw'ôėžÉŪĒ÷Įuëûë Ę0{íúƒûá ŨũõOT Š˛$5ŌTī‚4¸a0ĒM>!ļk„ÛLđ­u“ŦB 4!ĄâŲ4‡u;ũúŌū]˙]Žâ!ŋ˙đ÷øƒoMYūëb´#^ŌP¨5°—ÎĄLöƒFėWˆ†„úe ‹DvFņ__ēÛߨxõ˙÷ážëÛķĶõŲĖ•Īk¸]í…Õĩ‡ÂŽDØĀ„F-4ЈˆŽD ĶfDã%>ŌK˙÷_ö{˙÷đû¯Ųë[VÕ4áûĶD z’ų‚ļĪÄg´# !GUaÖá$’–ŋ˙oęûŋÖΛ›}Ōĸ,ÆÅà ÃI°ī„!ŽŦhDŖ !:8jņNękæa)RK×Ã÷˙íŸJę›CĩjEvÅ1N¸ a2ÔûB#ÄŠ'üŠ#Ėô;đ‰Įũ$’I ŌJ’ $Œ^˙"í[@ڈ7 &všwLq–…¨•ŒârÜ1BęNŽ‘B7nšvŸē ūēũ_Ōž’_°›ŽāĶBB""öå”Ō*ƒZ•ĘØBČ.æBVh2xâķ8Í+čģĩ˙÷˙yËlöúíÕ‚Á—6¨DD~M˲¨Îô0D æķ ´GŦŖąžŅ|ŧí(ĘĪ4ôîÕé„é7ũ/ë›˙_ģ°’iƝ…iÃ55ÉątACa*Õ0† @ƒŽôŊ×;/A„ĶŊ´^;6ũûŨĒ­õ˙oÕ4āûØĻ)ĩ¤Ķ hDqæÅ0!NŌ ėą¨@šĢļˆâÛ¤éëēŌ’Û%ˆ gČ&Š°íŽŽ¯oŨû¯ūõŨnģmģ Đ4CMs:a× ĒáO ‹˙ AÚé˙^ƒä‚4͘Aæ)ƒt‘8hˇ<Ũ˙Ŋûũ?¸iũÛNņM‹DR&ä4­0ƒDÂtü}Ũ īŽ|Vģ!zö&ƒ4FÉ84]Ä ˆ4ҝÕpŊŋWŨ¯ŪŸėŽĶbĐi˛1Ũ4"hDJéQŒ/ a+S۟ôŋ§EÃ#YßRMØ)ŠC"hĄöƒ4äĮsC°d¯ļžé6ô—ßũ[âë˙× ÚdÃøwnbšļüŲŨíSm˛ĄĢOOĢ×ĶģxÆÅ(Åz׎ë˙n¯ĶÃáßaP˙Éå:"XyøÚ!Yôq‚ ķ6Č}Ļæ?N´ˆĮhœ6NØAū¤Néãmƒ×ūīģôĶū.‰Ü7îßkÕöŋNōęũũh¯uv7äß­Ũ§Ē„BL0DZŒ1é gȜŒ&8hYņO‡ 4âĄ6ÃPAŌ}Đ˙ĒyvúÃĩúˇ˙ŊģđœLŧ|ü2:ųbZ^˙ĨüT;lãĖfWZɞ™S›qŋŊŦ˜áÃLüšh5ô0ÁöÁ4,5&îlęö¯ŪžNūô“Ķ´Rą˙˙ūņũr,Qü„ĻßâÃûũîcíŋwxĢJōšlMŋõ ƟŋH;šiĸyč6ŠŲ+aĄ ¸Rí˛vJú:ˇū=cü'^ŌôģÛ^—ßū đܹ˧åë˙šžÃģ˙ú×í7­¨îŠåBĒŋį™öaúÖíKļÛ×ē'wvšuß}Ã˙\¸Õ×ëë˙úøDŸŠķ_‘Gũ…ö û’ič÷˙ķDfŸ>›?ļ–ģa$ļA Úé§{īŽvc!æ34o8ô ûΧ•‘† üîúŪŨ-ũŨÚũƛi¯é×˙!5Žŋz×0.?Ąî•ûíš?ūßßīōDØM6 ' .  ŽÂqiÖí Mgah–A åO}Z=”ŦŲ‚hXCX´˙t^33MŽŪôŊ_}Ķž÷Wûĩ{īëŋČī_øéņēúDīŦĶzFĨ¨oI˙T˙­õúôíAaÅ1ĒTíS˛8´ Џ”¤šúįqRá2AĄh0ŋo¸a>á<7ú^5éģ ņÛ×˙˙¯Bq×˙øAUē{í_ä?ūî“øôt•'˙žĖÖš…gšzvˇ{ŠģTÂaˆƒDLô…tÖ¯õsnBp´§>$L{Éå÷Ū­v!Ŋtj_?ë˙]r`Qw×á]+ŋúø]˙uOŗ˜ë_Ũ,-ޜR„ÖYƃØ[†`¨DSŌú˙Î# Ėãæ|P:°ƒ’ļ‹ļŽÁéēˇuú×,ĄöĪā˙ŌhąæJŋឋƒ!ĘéÚk~.)bĶ´A4h8ĨT  ĐˆˆˆˆŒPãNJeNWĒm¯Ļßõ~˙˙Øa÷Ŗxwõ÷×° ÷OkBoO0gūėöÃ=ķßgģ÷Ōí #ŽĐ@Ã'ŅnûMkÚö)đM˙ĮŌ˙û"ÂŋüBũnúûĖOv—iôƒc8ŊP>ôÉøã&qĖ’fßēœĪËÚē›Õ;¯öûÄE ÁXˆ†JB"""-m ^ŊÃīúõ×ū7˙¯üõë6ŋĩĩŋÖ)Í6“ÛKũ0G;ʈâ´ÍŖ™ôjIũļ¯Ŋ6ˇm˙cĶKÄDDE3ądMĸĮɚĘ#ĸë<B˙ęOK˙ę—ëųŸa&Ōĩ†ĄJjø`­car‡ú†ßTũ;Lū§÷ŪēZĒ×Ģw˙OâdĒíZÂf–ȕ}Öúú_˙uöoîÖĶ`ÂĄąQQ\đĢÚŒ]ZIģ˙¤ŽíozŨ§˙ĩßëU˙–rWDINûōM)šhÎöéu“ÖŋĒ_¯ēëją§ąŗBiĻ„DDE ÂŌmÚũĻãīū?+˙ú˙†õĨË ĨŅXgz Ä šÜđ_ō“9fq­Ķyƒ34 0‚Eģä߇קÚüĮŋi§z}„­m5ϰŗé„%0‡˙ßW˙ũ?_üņß~˛t˜CŊ6Ũõ$iÚ!& ÕĐ}áđúŪ˙ë_÷˜W] Ây}SbĸPîī ! ,DGīũ¯ôŸ˙Ī}/Đã˙Ē÷ĘᲆeÁ%ģLt'ĩ¨vß%ąök$Âw|Ã´Đ¨ŊŌ}ũŋõŊͯôĩ°ŦZl#:; Âi¤zDDz_ŊĢ#i5Åí¯ũ[ģŋ÷ģõ”fJĄĄJF„4žŽ‘ķrJˇĒÎĶÄíČĖŧQ&ˆC†šmģĐ:/ÉŨëę˙ˇí/ĩlüˇa&GEq ­.Ÿß⊴ëã˙Ĩ]jŨ˙ßī ÉZģR)7Oã;(ë é˙)l„ ¨,Á! č˜í†ÂEÛŨ÷­MŊSĩëãĮã†ˇ}1A‚Ú : {˙ĨĢÚF×ŋ˙õfûũŲjÃZj v¯KžëĨxD'Œ¯ōļˆœ4´\7ē Ö§iŽÚVčû¯õËÛrcĻÃ|iĶA a1‰‘Ké˙˙ũ?ûtŨ:.L]ū›†ƒģaŦÃÔ0AļšI ŪúĶؘ’Ū¤š‚yŲVuܔ ‚)Ų… $=mũ÷Ũ/Vņė~ŊģĢūãaíiϘT""먤•ų…ũösöŌŋJÚÕ0ˆč2.Wh0„EĄ¤ûX˙’§z“åå4‰Æ}˜Žœ'—asg•Dl˛ĖüTØA„‚„ô=t]ļ'IđtÚkû˙¸¯÷^ .„7X‹´!q*ˤ~ˇöČKÃnØatĄ­Ãęa´„DA¯ãûûšdæ`aLĖŌ6v(vĻiū‰ÛW§AģW<Ķ §ĻÂ! :a 4NŽíSíU¯ļũŊ{kė/÷ļ$˙zˆŽšžžÅÛucÂLB§aˆ‹]{5#–§TQ›/Ķ‚ 4äB†râÛøú/.ūSL'wŖCW™Ú›˜ž‹ų}í+n?ū?ãāžÃ‘Ÿ˙ZPŋ: nú2Nˆ[~ĩ„""53ˇ,Ldļ É;Ė&Î Š“Šká7zģØmSl'IˇúxˇígNûsÎÔÃĐ~ØO7kKë˙ôÁk­s¤ĢT>‚}v*Ĩí Ũ$v˙Јa ˆ•Ōø"œČčä œ Lų#ƒë‹Đa4AÅô‰Ā{M"vÜ;׆ž›w÷Øˇđŧß~ŽĮ }jé^úģéX/‚áĩđũīZ˙ŸŊėJ—îÖÄm;ˆĩÔ ysūŲ+~Ŧ$N%oXNî4Û¸oi˙ëί­mŨvîĶîģiˆģßív˙߲~ŋ>EŊēüä˙ę˙w ¸==Ú#[šōH‰8ŠÄŽ4Č=ˇĨä6įÍĨ† ž[О§iėĀĒÛĻyVė"4+Žú˙“„Õ‡Ĩú¯c˙ÚÃn˙Ŋ˙ûÖNĘ=Įôlø?ŋÛšĸžö¤/ĩMŽüČQĶvķ/#Fž¨ŒįÂđˆ"ė&ž}Ē|>ôܡƒžEÛŨ¨­¯ĄÚöߊ¯ĩ_oÖˇ˙̓ąūŸ÷÷Į_ø˙ī} ūęúģæ+3Vö žš\8°ĩ‹čCŲIšĸJgÆ´šaW;ŽĮcjŌũí×]Ãīb“ģ}{õcĶû÷ņáō€›u÷†ŽlõÜ?ūLxm†@Ë˙˙û§ûúŊû=^ØMՊ´U["ŋ ud‘Ķw; Έũ”ŖÂg3ųįiÜąŨˇp“Žhyīč{Ū˛ÍįX†ëž×ŪØiöaŸŌŋÕæ¯¸:ÖLMĒë¯á§A8}÷Ēa˙ô!ÛūëûĢmÕí˙}Úv8͏đÅūq$p´Ķ[q;(0AĻžP`…ą ĶĒŌ ŋ—“Đ}<Šûģžūr0ÁÃ? Áīū?"÷?øļ˙˙ļ™ĢŪáŸŋ{úĪyÎûƒÃ ˙Ü ×úˇũđãĖūÍĸ<Ųî×T…bĒŖã '™ŅëFœDG÷˜~dPâĐŦ znëáÚ îĶH*m û^뷟åĪ$Fî×ö‹ģwa[˙ûyWīÛaß˙íãûëõúŋ¯D?UŧŸÛ˙ķĒptŸ˙nžĪ§xjlG…XvMˆmSB,! ք0•-íéöŗēãdtÍÄĸ#éÉ]Ē'™ov\jŸ×Į^öŦwī5įTúÚi]ūm}[ĐtÛÁ÷ŋ~­ÆT×^gl?ëū?oéũũĪVĢđ鎝 á×ūĶÛ¯õģĶö4LvŦ[˛Q &„DF?ß|sq fh—ãBÍ(BŪžN:/6“žôĶõ_k~7äĄjzMĖđ™Č Éßū=nõĻ:Né]vé>ē÷ Ëũ=î˙Ũ˙}…Ė›WuĒļéÁÛĢĩy ˙ĢgĢĖOô­­œ›ToNūÉZŽ<AρžiŨÆģÚ ęŋÛ\]/ûÖÔ/į2? īS"ôûl"‡ũūßĮīĮ}˙믨?/?ļž˙§w?v•ĢamSNíBr+ÃRpØkõÛ´Ēŧ0ēé^ƒAÆØV(+oĐ`„ŒL!vŧ—"|Æē”-6ĶEĮd˛‹€‘ō˙ūÚXk˙ģ_öãØ?LÍ]Ŋ?}{ģ¨6ûVëīũ߯×ößũũķûîų„˙{kė5AĮq„Rk†=ÜQébšh5wVŠ ÂÅEFn‹MXq´ÂdnЈ`ƒ0W˜0L!y ōŒÂŧדē/Ŋ;ĩĶíUoęž;ŊĶ­~Ķr˙ˇSv˜7ô´â×ûīã×ãŸ÷Ļû_ûjŋŪ{wKÕ=uŗ×ö–Šą[Æžė:VēvBÚx!­b>ÚĒÛöØ@ÂhDGˆh¸jØAØBČž‰Î0ƒĻééŦ}÷ą˙.&äâ÷ū­ĐáûWJüq˙[oJ˙īéūũí/T×3ĩđD9Ķîë[I4ÁiĄk˄ĐiŨ„ ! ¨ņá”8B"!ĢkˆšāĐâM’]Đnkéë MëŋŊiôëõá-^Ŧ?ÖÛˇ‘–ŽëŊĩœũ¯×ũw˙~úū6( Įa;ļ)SL*wlRi¤B! Âqa…rœ™!qÍ.O*û´‹ˇŖCēvŪĩöá˙đoŨĨxę;w°ÕÜ[ŧĄ?¯ūÖJ~˙˙?˙˙÷˙ûuiŠĶÁ§ė&íí5AÃ(Ø@‚#Ŧ4C‰]dõéūĮIü_˙Ģû{Ū+ÛëŨŽvŋz§›{ÕžŌ‡˙øjõŊ˙ŧkî˙Á(†;#ˆa0ƒ‡hDDA„hL!lĄ"ŋõÕßū×ģŋīíūęßō“˙§ú{éBh6Ī­VöûļÚJáŋ˙Åŋ¯˙?šĘö Ј†DDDo˙Ø}{c÷˙†ėPoŊ?]_m†"4ÅÜ5č7˙žļNō1˙ī˙˙ęĻĒŌXâ­68а‹qĻįyī˙Ãė¸ŧ?ū˙wī:0o¯Û?CO´ėVCH6+°oõģ}Å˙˙ČĒŽĶÛKV§—I[S:IĻŗ­7Ņkįy?ûŌā˙ú˙ ũŸBE ×i˛–Õ‹´ĶNŸ ũ>ííļž§˜éōƒî ŽöŌOŨ:ˆ‚  ÁJÉVŸųR3LđĢūđĘ"ÃúûS˜~ģŊ4͇6G EwTÕP•„"ÖtĢ~ŋm´ûOíolÃM6•ĄØĶpĐĩŗė´lí$e9¯*ŖL§}ž#fŊ ˙đ$˙ë÷ŨčŒĢŪŠĻ !a„LԈŠđûļ˙ģ}&)‡PmŽĮ´"$ū@Â7)@Az‡Ϙįa ä^@ÔųĻ}—}]ģĩ#˙yũC{kß}ūŠĻČQP× !F†PeŽˆ ˙a§ &ǃBĐģė!ŠxŒĶ&ĀD\:h4ðˇĸUî@ĩ%ŅZ‚a3´Mđ÷IģęĒEķũûïV˜M°“ŦIšÜb9ŖQØ%°ØĶˆˆƒB!‚ņ+ŒŠ„-Ã";w -ėCˇa)ØU“A‘q.ĐöéØNëŊģī^÷Ú ėÂl˙ž´Û_¸¨ļ:hQpÚëŦYTDDiŖˇŽI͐Ãđaá;øs´"vha3ȎĘ3‘æšÚvpäáî–īīĶĶÚöļ›`°ŌŽ[´Ąą\&QHá0„PAą÷G_ER“ÄöŨÜęvU/™ĶZgLŠ„čCM4īimŨīû^×īļŋéĻÅE;ŪJpÂąhGøår!)ŅŽ ßfFģß;*Ģjģ3<ėšęfĐy˜Ļ‘ŗ5ņŗ4s*%"QÎ< Í#‰(pšĒŠ@Į1â%pySû!´ĶŨÎęÕãûūá(ŗČī 2ƒWC šÂD]Ē ÎDIž ŨOį™Ã „&†“ĸōî‰Ãmöš¯~¨k˙Û[ēë0BÎéŨ:2TEj Žī#´R?éČŦ4Dõŋ˙yļC=Ķˆ‚DI‹xdíōv#ÉG5"9ĻD‚ņ)Ã0šō"F ŪŰHžlˇiĩOĨNí5ôĶ÷ūžN/ûƒøe ˆˆˆ†5L§aÖöŊ¯*d9S4dys KÆč0OŅxĶí4'•Z{whčAĸ!‚qé‰o—o}ßvO5Wž=ŋMã÷Žŋ‘7˙‚$=v+m,vT–uDîŊ0v/‰O韌4ķ•œvNŨ+öԟ NÎe¤Esfp‰3gRuí4˙Ņ7}K.îōwŋ맯DáôūÁ:NĄĻX’vŊ˙Úŋē˙õ_\/ NũAĮâV#ĩDÖöŅXŽÔ/5GāO6Ķ[ûõ@ôo‡ā„ލ”Š ‚¤†˜&ĨÍk8åÛúxO°ĄĢNôøūž“ląŋĩ^ۋ˙ĩzÛ´Á Čâë"ŋöJ‚a˙Ō÷ūōlT÷kÃy´ÍL'æåUģiŋˇwtŨ]ĢŌōē4FˇĻ†8­Ļ?¤˙ëᅴ˙i=__ū‚zß§‡ˇĨõÚâÃĻ|Åõ}yš¯˙ww?åq<'áņܤ‚dŗöķčäq‚ėáŠfüÜŲëļiVôī÷ú.?~ß- iĸCÕšŽˆAĸxO4v‚' §ĢúĖcbÕWũy ZëŪß׃˙ŽīĨn‡ŠvR>Ôŧö˙ļsk_÷`аž™ŲĖ„ģQņ=4D†HĘÆœ  Đi¸?VÃMŊWoØ[o†ŽŋzoŽßîz'xO[Cģžīͤ’I$’J•5­ūēáũíW˙oĮŨēĄīs9*ũ[M}0ĢCąYŲŠĻh“ßķfS‘w„Ŧ0„ĶOŪh}Ø:.ßnÖôŋĒ˙Å÷˙˙˙đÉRĻûVĶe‹*ęöŠŊ-]!B˙øEį˙ü˙ÃmW_Ŧ=Þˇžũ´đœTSâÂ{A­HĢt×u;ÕŲĻ@ŒœKLųč6ĸî":;‹īWˇzß}Ģ­¯ëÖĢë˙_õ¯đ֝&žũū+˙žˇ ‹ ’ $Š*I/ī×ȐZ˙ÁūSë˙Ȗû˙˜ęû°œlCkŲ7ZVĘŊ~gĨŲĶ8fŖ4ŒņTŲ„ H‚ =ĩbāÃMS´2ŪŲÃ=uģ˙ŊŽãÚO^ß˙~ũa}˙ûŋõÃ˙ײâ˙' ­^Xí°ŋ˙ØA/˙ę‹Īûī~ßŋũž~vÖí~-5dWČáTČáš'ÃôŖ‡[kë¤x ÂgŒ&ĐvŸ„ 9qÁöNÛ!QŦmŨŋqß˙÷õũßÚ˙_ū…uīûzøîÃŋūš{úūƒ†Â%ŨúI$’¤II/ڛOĮ¯V}vŦ28ö Ę ã§÷ &ƒ"ĶDDUwÜUE76ģ‹‹oWN„åÛ§Ûí°ūũŪ—×˙´ŊũwÖíĄī˙O_nUž˙áŋũ§ĄôŸöÁāŋ˙]×ė*ŋū’IPH-m?߄ÖÖ=MĨÃ%DDDbŸÚ;Î/ čģ'’ģŧŲŗŒ4ō▓^ôØaû[¯˙˙Ąøo˜Ÿ˙ĨŋûIũß\ÂûÃ˙ڃuīë˙ŌÚIøu×}4ĶNõM°Ÿ­W˙ÕĒI ’H$Ĩö4â˜MRĩGŊ Đ×ųSŖėča0ƒ6jPČÖ°â@ûŨ ÛN­ģž“ĶØīîL iA˙îūn˙oöÉõ÷ũŋM˙ía÷vÃJ?áŋ˙wõ˙ũŗ>ÂVs×gīĶNÔ ĶMX´Å÷úw…NZ×σN8A(RBH0„0“\ZÉ[:úäšCA„]¨A•b[i¤í7ž?Wé/l?ü;{Cīß˙˙í6˙ÛūŲ ŪíâžÜÂa—86+i§SëßüŪëūŊ.Õ°¤41V8wĒvœC Õ 'nÔ2V6— 0ĻšlTvø_vƒ”B"(U>kÍ Â |Á&ÄXM“~ȘNƒRîŸúûūö°zëƒŊ?$åĪútŽŋˇī˙ūĢß°úeBmãbš hEëúÛ×˙ˇ[ŸĶMS ĶÚp ƒ#Dái‚g,zÃ#¨ŊÃ{MAûM0TÁÂAĻƒd1y7´ĶAš†Š% § čŧvĄõ÷åĮ˙ĩ`a˙å?pÄZŋZWūĖI­v•Ũēũ’V"".ЈôŌīsūŠųŊnūí<íÁĶÚa 4h6aˆÁˆŽÅ-’Ä„ g"Õˆa:'mŗŽIė+Eۗ‰´oi˙„úúV„wõ¸eŋŠB˙ĩŪØ>ũë˜ŌģOĶcŨ¯ĢmĻø—ÃB!„"0œØXa+[îՑŽ‚lVĐhXB!e !ÁŦDDDZKwt ڗôžšëÆüŸūž_ŋīHwũ oûīÍ/˙Õ Â}ǏaŊv…ļƒAĢ ÚļŌcbĸŠ}îßg7ˆˆaš×ŌIš[ū˙˙]÷ÂĒßū°û˙tÕí—ßūЉŪÂZ¤’ˆˆˆņ4PlSA‚a^"!Ą`ƒBĸvk" 7ĩô’I ’H*I-—øũåå[ëûüĮw/ûĢ^×JĪ^¸ƒ""7UĮh0„b„EĶÂdQ(˙ŋø"‡ü$’I$¯Ģ˙Ú˙ĩ˙˙ŗ˙éŪ .*64ĐkŒ1ą&™’¯p`…ōn Âčģõ˙č¤?ļ’I$’â+vŊ-žÕu[m8xA„ÖԊσ÷ģÖ@’d,D0E^ËuBšĮÍeŦČ ”ų}˙ôÎM{ūúŗ ¤TA(IX ˇm›˜¨Ž‚Å3ÂÄ4Xi…‰Ci§Ä˛A=;OWĄŗˇ2Yú˙ū+˙ā˙ëú qą„XXLĄÛM‡šĐ‰éD!ʆąŨI*5ĸWĶ–@lf˙;Ō<[ãîRgã1‚ŅĖ ĶAÁčŧūŋß˙æŠ˙õÛ4IōĮUA‚!ũ Ē)5˜…AŠ•=ÚĘ|§J4Õģ–éqJ”!~uˆ! ÎĘrˇî—’ ‘›ŸÂ 4 4Åz'Ōß˙ûû3_ĻíĨqßiÛ(„ÂEĀB"",![Ĩ ߉ŨYæ)M˛s:a:í…+ ĻĶ;%}T§Ę='ܗ2|Ų¨@Ķ1?Öērv6ÕúnũūŊ„ĶO˙ÚU²ŒF„a´)%%•<ög‘M2îûA0é AĒ61¯›ØÍˆd( ˙TŅ?šUõtõ×r5Š ĘF§0šk"āqĒÛM"ķ_¨k­Ž•w_W?.›A„ôÂ(|0’iXĄöiq% Í ˜č")“MOFfWo ÖohūoĒ{ˆˇĻ{ Ÿ%‰5p˙ĒĶEFi ÍČ'„Nۅ6dâžŨSoíXˆŋޚl0ŊÛ Ķļž ˆĻ+hE¤ėz3Gãqö‹m3uܕ IJ'UœOęëĢfĐ­ß÷ĸNNtšqÄ'Čh"úĩ騚 ĩ  í‹— Úa+mU>˙‹ãÃoâwr;jÅŨ„ÂŲQ °ĄŽk<&¸AŖ>—iÁÆúßEŧ5 “аԧLĄüŠĨāĐi­ßėŠä?ß3 h#B)Ķúįz#3ĩ5ĸq°ƒ’†EŽí ´Ÿ}×Ūŗ´Á’ąØmĐl4ÛáÚ 0„t‹pˇ×ˇhˇjÛI_‹N7´“fŽÁ˙Áéh4é˛TëŊ0ˇuĸ š/†p•Be;$G§Â&îVeÄ Î@Íßųd Á0­„;ø9péŪM‘Ä8å۟˙ÆŋXŒÍ¯ +áÄDEĄ+•ŸĨoôõ˙÷î5ÁŦøa÷°l8Bč-.ī¯š‚ 3c 8†4 ņĖA Ę Ô|:cNžčd ųr2a¯.¨#8xpĶ“ģtˇGÛĐoņëū¯DÜČ „J:ˆ“~dÆvˇea}{ŌZũ>&'žū ŠøoüŌlČÆŋ}W7šÃ6däUŗí3ÄpfČđļƒM§A¸dņčĐ㈰“ŋ÷öåãw{ÍČģCŽ _JéŌm]ĻŊīw¯ûõ˙Ũ*ÃhéĻĶõ鯞ëöā˙Đ~„œÁŨĒ_§ŠUá’÷t°ƒ4$Õ>•8Ņ;‡¤]Ãģ† C 2qdė–S5Ü0¸}%žūˆŋaĢ/›ĶXmĻ•ņØ{{k¯ûŲqõøô]Ô?Jöģ[ŋ_ĨŽŋūĄ Úáŋđû†šĘ.öËûÔĐTÉgfĖ&¨Á ũãÚh?iŨŅ1Üģîí%{ÛîîĶē/(~<7ĒwáljEķy|×wĒũ'ģ ëūŸõõ˙˙é>OšĮų„¤ŨAŨ´…Ĩ_ũļĶÛÄĄÖsũĩą1 ›ĩvãũ Đ0A Ķũ{á‚ģĸo ´á§Ē„Ãm}nëôŪ;WMÉĮ5ęŦ;^˙å÷÷믞ŨīØy)8Úß_ץû˙V›ßŋīO&ń­;äU~ēãũ`ûíģú˙tîOlq[_ŊļŌģTiøÃĪ4 ÉÅßŨĨkž­iõ˙ū|œ#šaļîëĢ߯ûŋUˇŽDšc¯Üūũ˙ûüũ˙Žŋ“nÕ\z ØS‹(_˙î¸=†˙$ßĻÅ“"[7m2œ!ŽđÁK‹ģģ[ģSĮlk¯ũŋéĮuŋ˙ßõ×ëD‡ƒđŊßü_Š~¨*ønˆ†ũG˙ũë_i†ļēką<ía§o3Ôíf6~`a´ 0ž˙÷ūiž÷zÔ6Ü*í4zaˇĒw ØvŸëv¨<¸°ūŋūģđˇQO˙¯ö\Zđ֍ĐÚ ×ëWü›–4Û\u–é˙[žëënÚ\lCAĮía=_hîvL"tLÂ&Ÿi„[ļ-^īßÛ¤í_Oŗu¤í 'hX!æĶxúOãŊcģv ˙÷Ø/™„Õ€ŋ˙ū?Ú×uē|4ßzŋāũūšŽ˙ÖëļÕĮĩÛXdíyŲ^ŸAņ įâė†lš$;nÍ ‰‡¤ ˛ã ũ{ŗ›r<ĄO­1´“B"#ĩŌũwē[Tí!ĢūúJēĸCߥßũ˙—¯oüö×÷…ŋ÷ãˇķĸėĮöf­}ūīDKžÕŸ††ĩĢ˙âˆÚ#¤;‡ÆˇAÜķB ƒá§ÛáÛ"ũ„-SBĐqĮŠņ}ē“„t ņ77&oöö‡Đ'ŋ×Û×˙˙ûŲ ļ˙Eß˙āęũĶw[JÂqQČ&nė%ϧŅI(‰ėDGŨ¯L í Ō‡zJūIßĶŋ^kÃA a1ˆˆ–į^ÍA:öč-ė?MŽŋúŨ-Š~˙˙§ŋũ4ÖŨn˙IũM­lÍ;šëĖv~ŋVąÕL&šÂeēh!CŧNëA2áAíĸwŨåÅϟô é¯QüDD0B"%ŧ Ļ^O]¸ĸwcaøO˙Ûī_Ģ×úëģû͇qJß˙˙ëúž_Õ°ļŽ)Š &ƒIüà`„DjŌŖŗÄ>ÉäÍĮ‘’™Cā‘'nôũģģė/ëĶ÷ķââW~šģ×Ú čęn’5ģw\ÚØ¯ôęĪ÷a=ĩÆ˙ØaB ˇirąÅm[kjģ /ąQąąQÔΘ,CLÅAĄa ­ŲÛáh55NOÍaœŽa ‚oéŨũއ§˙īôķ%$v^Mˇžŋė;ũŊ5ģ?÷ęžŲæšvƒØ`ĻĄL Čé†AĻ›gĢ AĄė/×Õ´ĻÆô×´ÕhXˆˆeB%¨Œ•Ī™Ã#D§ŧVÚj­†ĻÆŊ~¸Æ×õ˙ŌõÎær •WƒÜė 6ŋטũßVŠIĒí…ŗú§kuaSļ7bļn-ņŨ† ˆøá‚ Ŋ âéģiĒ)Ũ4ÂЎYŅ‚gÅ'ˀh=}ŗ‡.ÛčģONęí$ōīĢļ׏īDĻ_˙÷úÂfÚëēy2G™ä\Âp˙ZûÚ¸Mŗ¨lVacv)ēdĸĶ œM Ét-E†oíbP풄Ķmˆ†¨E1Ķ´ÂiÚuž}öŌÚw}ūŌŌ_đZúŽēũōž0}ųŸģŽqY<-ŊæĪ÷i­›iû ē˙m…"ģhAĻ4""",ˆ`ƒˆa‘ˆ­4 ˆÁíŧˇh“šc†ÆŨ§ŪöžíéĢ˙˙>ÛT˙˙ū:w˙oæŲÍģ’ũAˇūīÅ1„vÛᄙƒ10˜M0B"Éė\VSÔB"4W;ŧ‚XiĐAá=˛ųŋ×ã[_ør(˙˙ôN˙z ˙ī×÷éÚuȋļĖČĐĶMĢa„ûk}Ŋ…hY=Ģ Ŧb"ÂÄDJô§û]ŌĶ{ûׯ­˙¯œU˙ũ?ą wīû_6ž›ŒÔģÎĩš„ ûhĐŨÅ.ëˆ8aˆ›¨4974ČČî’i“žÎÂoŽû¯_Úîæ=°ŋrô˙îŋūßŽÃH õŋlyügš PyƒÛ ģŖCF‹ŋēMûŪ/QĶLî+EÃ××ÕV­˙ßל~+Ĩû¯ūîëÕûM[M4ØĢųĻfiœ´ĐvÃũĩzę÷Û߯˙éL{§&׏ŌēuQ˙ûu~‚kí˙ĩÛļĶ´ęD„ÖĐh5az_›~—o`­˙˙u˙{ĩũqåŋŠŸ´­¯N×đ\ˇe˙ük˙ĮÚ­Ė+žŪŽDØA ÚiŨļ- Ę´?¨oÖŨúŨ­_ék˙ũßĢīEšC;ķŗåeŦ}\wí7 ą äĨŲ|Ŋ;ā÷ëķ˙i÷ĻŲííc6š`Ãyš#Ø0ƒE‘ēÂī÷W§ßûŋO×˙_ˇ÷x„ÎÄôkA2*)y3šĖ7ûŌurŒā˜@ķfŲĸũü_÷××N˙Ô]§ 0X‹´"*"">•;ī˙ŋ_ûÛė/ũÅßūåq&v‘´J4ÔėOPD(T!n˜dũŌ{_ŖžÁ8´MŪ4Í}˟˙˙W÷wȨaváÆė0œúĄ#Rø­ūūxEū‡¯íŊknlĘ Ë´ĖōFv5ēîŽÛËë̓z1æ`ĖČ~ÕūJ'‹[94­žū˙›[úv ˛1܇˜Đp}0QˆŨ~˙ŋũú5ß×īn­[ĄaŽÕú|ˆdĢVšIÜ}ČļmŲ™¨Ŋ |;A×ĨĶĶĒrō“v?éŲúĪĢNė*xM4ؙôäc‡n„tŲ>ĮæĻˇ˙ß÷Ģßu˙žá%ŋ™t‰eĨ˙Vŗl"ÉŲĶŗį˛É;ûfŲã!ĩ6Éã ;‚ Ÿ28¨[§ģĸcĩ×÷v×ŪģÛ_†Âmœ°œRm] „ĶC60ĶPƒMˆ×¤í˙uį×ī^ž÷Ü5ėįáώÉŲ8č ãĒäģ_ ŲJ=4ÛLĖ ˙˙uSa­žÔˇ ŨôÎ7}ļ’ūēzû`×ôÆÆƒWÖmāMˆ^—ŋá;ĖĻüU˜voM[nØļšhm4$Ÿ¯0`Ļ]'›`ƒrīv’}g-ŦœddDŖDqžüqnđƒvqÂģTÕ~ŋ˙Į¯°ÂĻļš‰ECa„d5_Ĩŋ{×v”zÚ°ų1ąĶŒ-ĄŌũ8P™ ČfA„Hv…§h4Ͱm[wEÂDíų ÁŽ™áϘL'øy+lĩ}õßĮģÆŦģA˙_Ķ}ö Áa"ÛĮOßīLGŧ'ûcw Â}’/¯™™Ļud Ķ@ tG{ĐzÖŅ8rī‡­ŪƒĶ}Ļ8ļôlūÛŨ÷zv­ĮŪžkŽßQßōvVžž„Dm)nVˇáđôījNЈˆˆ˙$"§˜DlÍ%đƒ@Čæ™ĸ8ΰziíYįXeŦ,ķ é_†ē­đŽāŅ7rķ­ĩ[ƒjžĶÖ5ë}ßü28ļûßũp„?¯Ú¨¨3ąģkØ6öš„EĄ+ŠÄNū`Đ3Ėé›0„3čŲ˜;#É4œZ iĻá‚dčN2î}Á¯ĢęąŦz_ÔŽƒéÃNû˙ū˙íģŋû<˙ŋÎģoû/fIN͎Ø'iĄ×í^‘vA¨MSĩpØ3fÄ[Đzm&úÅũßŌkÉÅ˙õnžØ?ú˙ū×ëø?^YIģâ˙īwwVˇ´&KēŽ""W<ėĪw*øâÛjÜs] FÆš"ZM˛wy<'ôēũ˙ô×Û[ }i}–ÚÖ˙˙į ü7îú}įßįŋs?VëġĐmU&iæCi4ÕÅ>zŲ+xvJŪÛ¸k§§wvß˙ˇķA5^Ōũa*ũ¯˙˙˙ûôŸīđm}zˇ¤ëļŋjšĮeq•㊠šš`¤‡‰gF›¯šģ˙ļĶâĶi{Z¯_˙]vu ˙Cü'د÷ĮČĄt˙Ō ×¯ß˙:ÚZëöœZđÁb˜IŅ”ÚgkZš"jgÚ ė Ī™yŽM|‹§!HÔ“Ī´=wņa{Ū˙ĩž˙ÕVŸeŎŊŋ_ŽŖ˙ëoŪéoéz×˙ŨyÄ˙ÛgôũŠPMšo &Å4Â|Ŧa=Iė4FŒfŦŠŗfh5‘9ۃ„§ûĻé›a2‘™ÆõÖîē‹ũúē˙_ëņ D[ú ˙ûú÷:ŪH×üƒOüë˙ôŧ‹ĶôĶAØNõŪ]á0^Â(„,ūČSHN˛z6`ƒ'ĐĖÎĐeŅ;vÂEØrWvåőÃ÷r5YYB\â!÷¤k‚ [ĢëŨŽū°īũũ˙ú'ĄfŸô¯÷ûōŗ4Ŋ.ģ÷ūîŋZŋi]ßk÷ Õ4ØĻ˜Ļ …-āėîDZÂōtíjĻD ƒEģMPa|‰n0—m0ŠÚoŌ Â}Åí šņà6ú7œDuwŊ;M>˙ČdžÃ÷˙¯ëī­Ē÷IlĮ^ųũũ=bÂvˇŋõôOĨjL Ũ†L,WĢ´ėˆˆˆˆÛØrĄ æĻ}É<ƒŽŌvÄ]ŌmvO˜DÜ*ßWß÷ww×1Ã!3™æggåNũŪé\z5Ûm­ēž˙ĄĶƒm?û}˙˙zž×ũž­UdWa8ƒbŋ˙ûÕéĶũ3ÅÚÅ1ė&*úq  -ö“;Ôgq&Ļ’a DáēÎ4°īˇē6]úī]zõWūaLã/Ÿ3Į§pgãi íuŅpáaĩwkũ[ŪëĖí˙Ē.ū˙ķĸŋ˙˙ģūĶĩĖ%á…pŠĻîûŋ˙jŸ]ĨZz‚"MYŨ2yj™ąwOČUŖĖ&NeŒ¤ ĶŅ;pļŊ˙j›kÚÜ{x`õŨääšW ˇÃiˇÛmī]6ÕŊ7jõŋĻâ û˙Iü:¯a=~˙ėĮ˜ŨŗÖN-ĶĶcbļƒBÂļZŽ–{ĩĩ@Øß Ļp˜CCB""—öĻŧ",Éķ Ļa DŨ°ƒļūģ‡{ĒÅvŧz˙ø­˙˙Û ’éöŪ¸]Õ°ļŪ›W˙˙_˙ū˙˙˙žß^ĩ1ļ•Ĩß˙­Ŧ3n.ČęöJĶQϘi‚hDfË0Ô*ŨC Ģ´“Ēu&åŽJ˛5="]Ŗâ¨S6 Ü\ģ§&? ĩ[Ķū˙ĩę<7˙%ĪÖ^ŋŊ˙ŨîĮŨwŨé§wĩ˙]zĮ˙{kūŠ$’II ‚ÂIR▐T‚ĨxAÅE1MFĐhFŠē}š\!°Õz 0ŧ0M3ˇVŠę–S‹~ό ÎiúåÛvJé7.Úôí;´ũ?ĶãÅl?ŨPKß˙ôŨÚ˙÷ßKūëßqņ˙aüđ8D'>ÖÖû ƒÖ)ŠMtÂAV’Šh!…<”ZŨˆL!AĄ"čīÍ<'n¨„Īčœ:—­ģOZOĩ˙B>)˙đ•ƒū֟˙ͯ[˙Ģą˙˙úΝņ˙˙ũ¯ęŦjŽ6)b˜MRtē†d!(B"4H§Ø βr’â¤ÜĶ?¤Mí;†žôģ ~ž¯ęņ˙˙ū]FË~í¤ēī~ŋúú|Нûˇ\'˙ûÖ˙û§ø% ˛ā™á§u@Â$<@Âа a ,‡ˆˆĄ$MĖDvu4÷~Ÿöá§ßĒiĒúLŽ/Ūžu˙ŊŌÁŋڅīßßŊyũ¯öÎ?ŋķ—¯Ķ~õũˇßŪ×§DA ÂšÎ) !ŋ&ם$’Nú_ôī‹ ÚÄâalđˇ¯˙á˙īĖ+9|kkÚâK˙õ˙oîîî žįļÍÚČąí=¨‹ˆ‰ļ;L šžé$’I$I$’ĄIēūÍĨ#đ`ēčũ˙?-Ž˙Ÿ˙0XÕč6ŌÕÁë˙˙Ė}˙í›ŗļaØbāÖ5-4!ǎ°‡dpP÷|ė×ëÚũH†ŌI$’AJŌv’I $’F4’Û_?éžß´î;N6k â‚˙Ü÷Νõ˙ûm8ļרÄč⃠ÚhS´Y&ŠĨ‰6G´!ņī8—Åüę&ē_ûˆm'ūģ8õô” –ÁUB¤(*""ŊIA$ƒÂéīō’û]4íwõûƒ¸;j*Š„ Áˆđ˜–ô‚ ‚ åšx‚vôũT¸@ķŅŋ_˙Âߤ˙ŪuAëĖuzļžŠĻÅ â˜aí ƒO@4ĶB" Á2œÁ$INi”l(T@’čRA “ģ†Fâ"7†[I’Ė‚Ÿ“vY•™CN×wČÄqį"tgÁ|<]&ë˙ôNû_˙gÕÛĒūcīb˜­­ƒ ÛĻ™ĮbЈˆŌvà šsŽ˜­ÃNÛĩ툈ÔėŖ2[ÎËËëēŠ$Ķ Ļ×h–ŧâĖüü ļ&š–4˙˙ú_}/í„í?í]SƒV¨+B!„DQž=+4ÉâpÂDL!#j$k$Œã •H U ŽĐ5é‚;đķiÖČ6hh>đá8‡ũŅ7Rxëß_ׯ˙ÖØĢ9>ŨÅFƒŗa5b# Ķ/iЈ‰\žœ”˛’ Ŗ80ŠÚi…V°ãūģēXä­Õ rã4…ę1ģ%!ßŧ'¯{ŋ˙˙^îí:a­Ĩ ÚĒ !!:Äh'tĶûrJt &;ņķąc×÷hėoČL RŸ2@Κaωģdąú,{Â;ˇ.*ôûųū˙6ŋ×îĶU ˛1AÜ4ЈČähķ´ĩũC‡Z ĐAÜ:nMFˆI‘ × ž3fpĪ °ąĩ †YļP E! ƒA Ûĩ…Ŋ îöšÃĻö¨ėvÖīÖÕ>ĶËá7đDt,&„Dabw†Ūg‹ˆ~Ü:’F<2sšL!éúöw[MBvƒEģIЍíŪ^0Ô'ö¸Ōŋ˙_aö‘^ļˇh86ö:ƒB",ŠBv-Ņ3y܊ŖņŸœâ.ø¸|‹2|ÆĻbæ œ@šh¸'Í&‘1Úîú'šfÍ3§z"7›Ë‚ÁģĶbŌnžJî}¤Ēvŋũo÷ũƒĻ6‡b˜0û´4""*[Ĩ—īgs˛#Âi„Œ=8I$‰išGßÂa OL&ÛîøĐy1āĶ[T5ĸŸ:éÃD'‘'Ôų‘äĶBŨÃhœeå'ŨĻž›vģü—ú¯ūŌûv‹´Â˛¸ŌUũHžO™™}5LÄ9ĨˇWîTfŲũIķã00´U’ ¯{¨inۓvûotÚ§z§Ķ7 Øx$÷ ēŊŲ'ģŨuũŽö¯§ŪŊ9Å˙ūģáĩB#•Ķšdšŋšv} J†˜ umˇá0˜L—ÚĒģyņA4ͲD<3dN#į2ņÃBÃ]„4Ą$IæŋMāÜ ũ{M¯O÷÷Ä9vü8a"ã[Knáߎĩ}Ø=˙ėŽ'å˙Oß˙ų´ä<Į20Ѝȑ(ū~3‰2DTŊ3øM+kíÃtß÷„Ļ|Á!a?bĶ„ŪÂšŲŖÃ˛Wî÷¤WŨ|EîŋívLģßAŋéû÷õ˙/,:^ŋ­sõūũũ˙ú íöŽÔڇŨ×%99ššcƒMR6ÆŌ ĸOWjkŋ´.ÛĢßkUŅ8‡~ļŅ(~ô áĒI´†œ?˙Øé$• •ė8ũ^ëͧÛ}õíooĒņūČķwöŊî Ķø˙÷÷ūŸV$Uš—ž×äL' ÖÁßI4“EÅŖøî;cīOŽ×éļÚyvƒ˛}§úwpØĢĄõoīöû{wæĻIĐI*ۏû[Ŋ~ŪæÅ#ĸæ\­˙ú¯˙ūŋI˙Û˙ēũūûõ\;ĩäČÂd(͕š´ôhvõôīÚõcĩÖsj×ú˙ƒüO‹ĶīŋīZ†Jw}†ۇũqáäÃ×M$•b?ūĩÄE˙˙÷øo˙ī˙ũ~õĩĶļĐiߓgOĶãdËĪfŅŅŽA5†‰Xa4,Û÷z×˙]x;ųˇæīAõž˙×˙÷ûīxÕ˙Ãūß÷Mh'Ī'ßîũķR_ī?y ‘ãŒÂũé×rĩũm„ķ ]4Ķ ˜ i Ķ´Seh‚™C=¯ŽDĪ?˜dâĻhqiĸŨ˛Wj]ˇ÷×ūúĻŠ¯aÁęŨ=úũx;˙÷Ģõ÷¯äų~ē”÷āŪūˇ{éīwFöáŊ^øŪ""’I$’I$ĒŠYũu}ūÚ î.ė!ąkƒSBd­:5" ¤î,'ų>g›"uŪ@ˆæ¨4ZɸžÜ í7I7ŋ"˙ĻĢY>8ü6y`ŪÃŌū˙Įģ˙ß˙” ÷˙C˙úø|Į¯í}ŋ˙¯ĸq˙ũo˙üõڄ°•ĒmŦĻȝύ2o3ÄZ ŽãúžTÂeĪCázM4ÉĮlķPũoĩ†ß{ūŊWŽÁ˙ŌŦ_{’čĸ×7[˜íĪ}˙vÚmļėvˇ§á_×HŦ}.ŠúÚfl'îëa(Âíg´õ°ƒ¯˙ØONÛJÕ" ƒŨ¯a´Ė8M‹ĨžwĖˈlAQ7a§Û 0ŸŪôĢLk­}˙‘G_ŋôj@˙~š.ŸûÉ_û­j6ØÆĶˆa4ÖÕtPĪīīØNî˙M;I¨NZbŖkpėā@™!@„Gõ´h‰Ã‡ "šÅ¯ˆh0ƒ+xˆŒ$Ēŧ­Œ(S@š8o†›'”Ú}Ũūۆ­Z˙ÍWūūĮWļûAĶĻÛmœ“(×n㊠ƒŽqú÷ūēÕë ‘G.úh5 ē¯ņƒL)á0ĨB"=°Á4ļŌ{QLŠũĻvCN’JqîƒN:VĶĩTÜÜũņ˙Ûõ˙˙ũī ›zmÜq°eû/Į!-Ĩl7aQƒ6æ„l0’!-ČJm;0ƒŊ ­ąžÜ&Å1ń ÁˆŽÃ‹ œÂa4"Âa0„G A…¤.(ģTĸŽí{õ˙¯žßŸ˙˙ōu˙ņąöÃw Å1´f❡LFĨ Á„A‚qh0­ĶhD+MĻZh\GvJ昈’ˆ‰6ÅīĻ›ĩAöŲqļI-u­úæk˙ 7Á˙˙1„˙úzčD¨ƒ0ĄŒFė˛eėŽ+%hĪ"„"&Ĩˆ‹â""ņˇëNÃzI$’I$’KDŸū]ßûûíĩīˆˆ‰ŪĒâ"‹š)ŌB-‰6#Ģ~_8[­; ņƒ[ēīĖ ôA$’K‡ëū˙Û8îãú_MĖķ#%§5~§dŲašŖa÷ÛęĖ WløV˙ūŋāŋH${ĨI’Ik÷ajÛė&ę)­øÄI¸›ŧ&Rƒ9Ø˙û}ЧíŽë×Ū¯ˇ÷ēŨß`šaB •0ŖN”ėĮįbqI†MĩE"ˇW+Üm/é—×Ē?ø:/ģõëÚöļ—jbõP͈`¸LŖ Ķ|˙Ŋš@–ƒEēˆíe›ŽMIė>vYVfĪ;DZŋőÛ)xÜūĶoļ 8ĐŲ;šĄĄG"pĐPŠ•äĨW1D0ÂV"w‘’Œ†3áIAŠŲōFų\ ­ģēy¸Ŧĸ\Œå@Õ8ũų2Å Ÿ"ÛÖÃŧĮŨŨ÷ĻŦ_S:Úi„""ęV7˛}4Ędčŧ@œsãĒr¨Žû"¤Hdž;I *Ö¯Ģįiå˜~ū¸A” &|Âh4ĪG vOũ}w}÷ĶVĪáŊƒm2-›ÄE„ ŽœĪķ#Hôr"4Â"c´Đa;Ļ•ēW‘RØ(M]BiÂí?úzūöjŒâFqé ‚Điéģ…ÕŨéÖ×ŨŋítŨítá…L4píˆ×B›‘‘ŒĖæKæËĮTŊĻ‚ģéU¤jŌ_[îžæ‡61Đę´r÷Ą¯7æĖ&ĻžN)ô‹Ë‡ŊC˙˙nh¸f´øØŋcØLrFņ˛B\Ü2’‡„Ī ;4dvœ4úŨŌļŸA*I$—] äYøŌAūŧ•´Ö ŅŠ#ī*›˙öŌč8Ų:'Eõ¯ŋjŦ_ūĶĻ#‡vd×B- afÍ×όí ŨißĻGiˇē¯j¯×I%ķBUí,„<¤Ė8Ļĩää|Œiĸ@´$|ÂfĪ#5ÜīķLáŲ Ÿ¨í"Ũ˛V˙Ģę›ĮīûƚS Û]ØnƒĄpÂcrē‚iĩmĢjÛ´ŌoĪ&ŽŠ÷āꡧ˙#Wô*D#l¨AN×ķ‚Ą€¸Aœ28ķb›< ũŗÂ§ËĘ'yW ŽwH•yÍŗ4a Đi h›‡ūônļŠūÚ_oƒ˙x‹øŦ2c§z&Ũ÷67ũéëąÛÜÆ5ū.§/_ƒū˙üđÍ eå?Ļ3d4ÎDg!ÆējܓâõŊ†í8M„ɘēMĶMę™ŌÉ%f͜$F!„Ømá¸$Ÿí]÷§˙Ũrâ?M˙žMĸ$""$Ũ,“é_zß}Ũ'ÅŽ<ŧo{¸ūø@âÂųr…<"BÛ0  ÷DÜüąÚ.ØdņÁ6ÉĮa5ĐmŪ ļ WNîËu„΍3í<–¨gĻ!ށōoWwÖ˙î—û}Ļ\]bˇØęʲĄ]äØÎ*ĢīîšūíŊƒūEÛ¯áģø_ú'OVA„üNá‘ÆaÜ÷ īđŧ;AŌŨ­…éoõ˙ĶŋA­†~a´o üž]Ņ;}>ūŪÕũĩƒë_öų79ŋ_ŠęJ÷ßũûnÁ-‡§ˇ{oūkŋ^­Õ[wDîžė”pĖšxN‘æv”?ö>×ßC‹˙§´ũūŋI6Vũí§Ũ§Wũc_īĮõô=PíĐüb‹p!ŪëūũxũķēÃé°ßƒīÖN‡žB{Wŧ4õĶĸWsė0Mã}5íØ~Ÿúzžã|ĮũúC^ŋ¯Ü%z_ÆüuũÎ+åÂîũÛ]c"ˆ?ūÂ-üSbŽM˙KītôŨāøŽCmāęˇÚ{Ô1JGr: G¯zuĮÍ%ŋĶáŠ÷¯Ž×ĸX“c˙°oO_˙ūžĮúëz¯5ëūP}û§Õ ˙î—ēo¯ė+éà L‡œg2/ūũÛ˙ŪN‡ŨĻÔŪ7ē_ēļ,b WÕõZģūÚ°õ˙__„5{^ũ÷īūĩÖĩŪūĪĘø!ĶęOøėUũžĖøīímPw‰\į´Ķ´ķM8eŲü Đ~ęŸ]Úū}3Úg=˛>Ø]Ģ#đŌ•ņhgÄõĩķđ_×ôša˙ūaŋŽüÃŋø8b'˙ūŊūådP*˙č~ģ××ę¯uWĻ„Ũ†`Ņ5 ,Zar¸Ļv+áĻž˛/œzMŪĒ4˙ē|ÆžŲš´›lŨog–ļĻx؄"ÆÅ Œ"ãī!kC˙ū„0÷úû[úôƒû OēÛ×å_ÂĒ$˙¯ŅyÕˇK¯Ēl÷§ XĒb•âœ|¯Y ĨŪĶאfA”[ėEÕöꝮŦqTĮyÛaŨ„„ZHCBĐÕßŪ Ú,rŖN¯û—īŊWÛö~÷ĶéîŊLi„Û[[MÂ/ēí%˙ēéz­Ļ˜]°˜A§ĶL* 2‡TA–W b¨0M5Púä¯)Ņ>¸ o„){'ÚĐ; q­†ƒBí QšĖDDEk˙„I˙‹ßūíˇ˜í"Ōĩi&ÚL0Šđũĩ­V;V*, ë˙ī­oúĨũSÕ>MŪ)5hD4āÁ¤#EM4MÚ5ŋˇčœˆÄ2ŲŗK—Ī5ÛwŠ>ģ[Q šq ÂᏭūt˙}Ė%[NÉÚøMĩŠŠbqH;a„ ØĻšĶē ´ęÖĶ˙îˇ¯­ũ°Ķ ƒMքęLš)ëa„¯_úy— í1UoyxûÅÚúÄMˆ™ŽôžĒß˙ÚŦiØ_=CXŲëŠjƒs $ČAl&­ą{B&MIĒak} a4ÂĶníÃ_ S\ =_xWģT]ģ‰ž‰ė5ŋ¤˙ūÚâ%uŦī$īÕ­Žŋkr*ŊĻÚlqT§ fUˆŽü!„ÉZr2/XJ8† ÅŽÃX‡m2VŠ‚Å;Õu^Ņģúˇ8VÃĸi×ū‡_ūO÷j› >ĶVÂa0 ÃL „DTDDEPÃũHŪh„@ÂpeƄDFģō^tE'āÛOVöŸˇ´\<˙ûuÎÔôŨǰāà Øģ4ĶbSŋ !`„Fúh0ƒ'ˆˆ˛Ķ„"֞HŽÍM͘LŌ6kä\đ`Ŧ'gU?˙]?ŋčÔíų$ÂĸĮ¸‰ØîhJĮ´ ;DSpЈˆˆķ? hDa™Æ'iĻ—„BĐÂ7oŨ§ŋũŦ˙ß^ĸ´îŸ; 3ņ‚) ȉ Ã%q†ĸY…Y{Ļđ‚/fÆ4"í°Û |¸¸DŖékõ„°ĮLJ˙Ũė‚§Į=eŅôDD<ĸL÷ięˆ°BÖYãąļô=¤Ų+%™xá;ĩ֓đ›˛ę?ū‡áøE÷ēëõ¤ë;ö%@ËŖ’i›[¨6áŌâ$.+”Ų6f§zˆs™ëŪ“mTÜÚŽohŠŋI˙ëc¯˙Ũ‡õõjŦ;ĩÚ4{Ģ›ÉœNĮ˛c"E“Ŋ~­$Ķ}wKpßÕ\ˇU‚wĖõ˙wŨé.š×÷īßë[Ū˙˙ ={{ô 3ÛWįFƒģ!ÄÁ‚NˤˆÉ†ƒ[…î­ķ‰ĒŋĢ“uK ^§oú2´û 2ąöúí˙ī~Ģũ˙ōá+é{ŊAŊaĻŠ°Ķ†m4ëÔņĻû ø‰‘víīĶEæŊUėP^øŪ¯ŪôũŨ7ˇOĄRYœd4FDņƒƒ_uŨÕ?úņ˛&ß­5˙˜ĢMöĒŲÆļčqa›Đ3ļĒûØm…ēiuûģŖ[Ģk÷¨đā˙ëåu 7O\ËDíjå(DĐ2†i$ĐaÛČ÷ąũՏŊôĢžsúĖą]ėiŠ" ‚†JBÉDDa ÁūáūåÛAkm?kã×p}?"w˙åŦAŖFCK3ŨĶ}Ęvšŗ$,w"ÛĐâS´aÃmĄĩĩĢÕûëč?oĶũ ŌkL a¤Ÿ'įYD$—ĩū—ôīâb§Û˙ÛĮØ6÷˙åÃĻGėisĖ‘`™§›ķÍJĒ'fv5Á$=„ęyÍÎO™1Û.ˇ˙}zZWÖÚ[ëõƒ(u´"#ˆô˙˙ûK˙#Įū@—ų;ũ°˙ũ¯‚“2ŽđÖŠáO}z\Ų›.ōs"BZj…§M´Ō' ôūģZŊ{ŪØŋŪ­Ÿ÷J?̤6ĪÂ""1´?˙íbũû°Ŋęŋ(d÷˙֝Â{¤'tԓÎ3ŽHDš$úvŸK‘l–VD#<Ų§`ƒ'5´÷p„HvÄĢĩ'”_=÷ޚũö˙˙ˇÛŗ5ß $ÆĸGO m„ęà d$BŋûãŽĢƒ˙˙æ÷vŌöę 7}Ü&Ĩš Đjy’=ÚF€vü/ h&z:˜RčĪ6j}‚wÛi„;{ôĐ ÛM‡§Ŧ}vņî¯˙ī7a‚(uļMaÅ:‚˜4¨Dbƒ˙×NûU”ëë_[‡ú›“OKØĢ‡jxųØR*Bf™Ξķflív1ÁÃ Ļ›ĩáŨúr*3§Ąh0ššwđŨÁšv×§Ņ;˙×úū¯ëũũĶ[õ< Á4"Ąa ‘˙§ŋ­Úšbní‘y›áŨŨą]†Ž#´šŲ8ÛÍq<`„  ˜āĐa7tŨ;Ã}ĸo›/m$Ūũi„ÂNÂ-ÜÖîëöũ&äîĶĶtõ˙ä Oę˙ûßdɘtЈˆˆ•bWRÎĮ5˙‘߆mļÚVNÍļ)6F;`ÃL>ÆÁ‘ÛB&x†‡Øų‚'F242vaύ @šrŪ8o †đÛ "í¸|;g ĢwŊidvä°0ŨŌ|ãkw¯úu˙K[ûûpĢËĒß×ˆˆ•˙ Ļž˜TŨSc`ČđĨ‡ļėPhCDDZˆŽĖãgĢÚaŠ÷-Ú-í‘Ęƒ œŌ˛YÛܧ{¯zéŪÍû¨˙ƒĢXtŸŊŨúū´ē˙ë˙¯k˙÷÷˙K“rŗ5ĶīĢ0˜Ą !„!„"#ÖČVPFl؜2ŦUģnåÃmÛtĢnkownŊÛöŨĮwß[u÷´Õŧ7'žm'{÷Į˙īũ×ũI˙ŋūŊĩ|/xqÅĄŠVĖäĶ[°ƒD@•-ÚNîímĶģXīī´˙ë×˙VŨû÷Ũø[˙ũõæũ˙ˋū˙[ûëžū›Ĩåq¸Ī5įt2wh|B÷h4Õ?y7ínwŨ]ŨÆŨV=ĶöĢ”ÔbŸ¯ęÛ{ßŋ˙Ũ:˙˙k˙˙ß1ßöēĻ;Ė„ĐM4 4ÁŨķ4fÉZ!<ˇ3ŽÂ_aŋ˙Ēnģ÷ŋXö7ˇßú˙pÚđ_åÁĀÛcûˇ_̝˙˙˙Đ˙˙úũĒ˙ž}„Ũ+¤Ķhā]’;aŋųÚØÉe„gŗlã<Á(’æw í’J™ôØ?č¸nũ;_Ķŋĩđ˙ũáĸo÷ÅŋũŊŋ÷í[˙˙Õ÷×˙¯˙3ī[VÕšllVĐf?l>á˙ÎΎFČáa0ƒŪ“OMBXO)L&Ō“5Úꞛ]¯ũ¯û­‡˙n}ũŽÕč'ûöīöī÷˙ë˙˙÷˙_ũķ­…b҇ģAĒhEŦ–nŨÚĪŧÁ`ƒAũˆf4<>öįœģęV—ŪŅ)GĄ˛ÉKoîúžõŋ÷ãũūß˙¤ũ?úûīwúw‚Öŋ˙Öë˙ŪŋļļÚĒõw#wtĶAĄ„Ķöb@ķëLķ3ĶĘJwkK ĸwöŨŨŌk˜ĘęĶšŦg⃴Ķ8õr­oõ˙ß˙˙ærí˙ūũũûWūûu÷ššû˙˙ßëģ˙i]„ķ5ÕÛiĩAēh0„DuwÉR ĸ\TˆiBm‘ÅÂd  6īOVƒ§÷˙ũšĖŽ@™Š2AžfŠYļ7 6˛+'}.sM-~—}ę—˙eÅ_ρ˙õ˙ūŋ}ûjšw¤ū˙uÜÚũ4Û8īŒ ØļÂl0Š…ũ„4";ēįcŲ/xMŋyvčņč˜ėˆ‰Ú}¯yē“ŋīĩ”3F\ĶÂaƒo6Éßgŧ a›dÛh'Ž“„Ö-7oßßĐŨ:˙éPE OÆNī÷˙ūīoûgˇ=otŸ^é÷_ßkŽļˇjÆŨŌlŽlWM@ÂüŠųč ōTŽ0ž™æRžīžũ҇ÂmÅ×Úī˙~õ´Đ4ö­šŽEģl 7ÂJŖ[ ƒâ­Ķmâīn=Sû§‘ +_˙B‰ŋ}ī×^ŋũ˙ūļžÚÛ}ûuŋzēûîĐkÔ\ΉZ °„]čĢÎOL'’m4ĒîĶ]˙^úO@é=ߨ¤˙úž)-„hnõ‡Kˇm+Ũtēwāũwē§Õ‡ßÛĨ—]˙˙ ˙ĒĘ.ũ˙˙ŧöŊöˇÆĶLTąÂūíSģV5¸ŲvŽĐi‘GˆhE‚ķą(ŲäƒM4éc Â't¯a˙õ˙ŋíũ'_ĩõŋ^ļ”6Ķŋ}ßīb“îŊmģ˙ûm’*a¯÷WvÛ¯ūŪŋĩũ­m?ĶOŧē`Âi„îÖØŨń#×ũŪ›a*M6ļŨĄ 4"šŲrMa;M%yôLwŊģ†ŪŠ˙~ŧkīû#‹˙īŸ‡¤Ÿj÷ōé6ŊzŨ§áƒëÛoûKĒņ­Ü7­WŋUl÷ĒĻŦ4•tíS´ãŠž ĶMĻ„0ží6Ķ]X ĶŊ;ˆˆ‰7Z{’ų0œzlpˇEöƒÁ=o÷ĩ˙õŲuŨ‚ũo@Â˙˙üzũnچŋŨmx7VũˇíēîđƒA„vzoĩVËč0›fĪM0@Øa;A qąAĸjňL&îí4/°˜!íSN%ûw ,Z 0E“KÍQÃ6J`‚"œ´G{%EÛeõ/ũßŪũÔÕûĶ[ũ˙ĮŨ˙˙OÁ÷ւ_ĐãíßīwŨĨg{Pšîlm<0’d~=„â†)‹M„h&? Âd‹ĻaDXB !˙ÚÁ[B"#{ĻŊÜ4Dæ ôũ7Ũ?ū֗˙Kų˜OÕÃLĘFŌîŋ˙ä>ŋõüR~čÚōN ~ļæ—~ŨĻíĢ2ŌL4Ķ@Å!m ž ҆Y¸VíéĻ‹K%kv°Ú,r‡j‰;Ú{ũßũöûßöōÛ´M˙´#îÖ×UN˙÷īĻŋīģnФüĮģ ¸>1hC""#˜ˆˆˆá‡ˆ´#n;ģáŌŸ0ObūˇéoV?ũ=øWŋA>žîļÍĪöž­ö˙ū“ŋwīg°ũē}ŊÚ ą (ˆˆø4+ßīĶ{̰éë˙ŋŽ˙ënĢú§ŋČĢ}øŧĪbؔ=;M˙˙]ŗŸßīl3§{"_úˇ› ´"ČąÄB""+;ųØMCI†“:GUøÍ†ČVæBiL]ÚĻãīŋŨäŨû~ūŪú÷÷úzÖŪžĸxhC (N8–âĖė‹ęvBkąÄīQŸ‹ĸ\CŨĸĮgũĘæDäN‹Î6‰ÃPxģ0hģoõ§ŋ¯ƒä ÷ũûm~탴í\DDZĖ…ŅŨXUāî›Ŗ;Ė–u Ą#Ad,=\(m˙AԂy¸ė+8Ίš„Č>üãzēy,ĶĶßĨīûøwOŗ×všÅũŽ–?‚ÎÁų0ũŨ_ $v,ŽŒâ7’†‰…LØFŦ,ō,FhÛ*Ųļ|Tkɝōv^}ÕÖŠÉŅRA“æĖqe&m’‘a0‰ŽÛm†˜6Á}¤öí>ë{OßmĨ÷ßŊę۟öÉ;m¤ÕÚa‰69æšmr#=ū˙Šę3âÉa,'ÄĮiÉe0ƒ@Ή‚hi„đíĶEŒiܙ<¤ĪŊ ~ĨÉMÃ34Ņ74ƒnđ›WzwŽĮžëĄéöŅ´÷}Ĩm„ĩmēwąáŠzŊļéídN4VG3Aé"Šs ˜%4A‘ŅÆpŽ3 ĐP@Âi„7î4NÛ;ÂqxWļߗoEãIÚësR(#VĖâė ĶũŲqØĻÄ= “˛Y l'ļvN;ĶKu×ę÷Ŋë÷^ũųúÖ4~Đh0…ĻŠ|I˛ŊČIÛvˇņ3E‡šÆi˜=°œ¨ĒŪB Q…U 0šqŽ„0›'^]Ü2ß dė Ú-Û/ŦŲpĐ8pŌOuĶûũæØA„đŠŦ=Ļ—1\\.Û'l0I6îû͍ļĢv^>:ëöÁ˙Ø/íoßzģkk,u´Â""â˜~ō)mĨ„GÎČÚ79ƒL#đa¸nhÔֈ†?DÜ‹4ĒŠ*-’|›°ËŠ éöšÃJŨ>mÜ5BöøĶp{ū׍ 蛴kËžīCŧ0Ėrų˛éēpÖô×V­áĸ  ô#čUû§Ui~>éĻÚWÆÅSSˆ§Ūū$<­#ī=›Ŧ đmŨní87oN“s‚ōVO)¯ē´Rōƒ 'Úi =0XI*TCA/é˙ŋVę‡}ŪtÕ:ļíVÛød?_nę˙˙ÄĀ5Ž ˛nRNöī‡ŪøCīĶNŦTPh“čDKs%˙ŨžđĪ3‘øôlÂ`¤nĶõ†ˇęÖˇī}ũvīMúŧtwßzĒņĩß÷C÷˙´~†ø¯ũŌ{všt’VúpŨ‚îļ˙īĢŠĀ™ /B'ëũÕw˙´#@û)–âÉĶūs7R ŠF×ww}ë¯ÛÍnЎ|{WI÷˙ĸqŪž]ŋŪíųŗ˙ö+öG÷ųi$‚’H%j‚I)t §ËĶĒŋzuЎĒē~ Ģņ˙îšÎ œtNū>mŠŧ6ß÷ū#>€†Ķ'—˙ļé&nöęKOJôžÕī˙ûūŸĻŠũ§ŋÕŋũ~ õž úīa˙ĸÁ¤’j˙ûØkŽŠŠ:úūÖâ0Ŋīú~ˇ§ZûgõMŗū"ƒ-Ë­m¯ûĪ%¯÷mŨÛzk˙¯üX?ųž˙jūŋŽÁ˙˙§ī‚íõ¯û5]Áŋ]ÉÕ$’1¤Š%Ô” t‚öŧ§Ãú_˙^—×ŲÃÖÕ>ÛJÕ5Tã„Āė. ny>ÜéŊéßžŸ÷˙}‡û]ãûięŋī˙˙˙_˙˙ū÷ûÛĢŗßíz^’>DsŠAtŋz˙f‹ũuŊ;MĮ ã†a8ââĩĶ%¸įšŲ’;Ŗ˙üZĢ˙ß˙õî˙Û¯´˙Úxw÷¯ˇ¯¯Ģ_ãÛ˙÷˙øûĩ†ļzp¯ëAŋ@Ļ†•$ģÛēė&ŊÁ…aŸõN„˜ļÚ & č0„k ļv¨Ŧ{œŋī˙ŋ˙˙ū›ü–ģûę÷ŽÃÕSōŦÔ7ÖĢúęŋëßy˙ûüũúížLTqÁ…bŖđnũ:(ˆ^’I%9$K.JBŦ&ƒ‹MŽƒÉE„'Ѓ(Öˆƒ“ Ȉ†íõa—‰˜SÆNÁ4<&fŒī˙_ß˙k˙Mo˙ģß÷PÃģô Âõ˙ú˙õ­ĩõĖÖų…éŨđÂmSLSUßŲŅ>Ÿē…?ŨwÚąØJG‚¯Ņœƒ ôÉZaˆâ:–AAQn… ‰š˛FG`ƒI4gÄĩ‹A§ãŪ¯õ˙īųíüČž˙×\ōœ úh}w§č~ŋūĪ÷ũí… Ûa4ĶûĨ]b‡ Ķ „žļzMĻz}Ąmԋm80ĩ@ĐhD ÂAE•!>ö ­ Ášŗ†Y,2æ0„4åÚbôXô]´_dŨ­˙ãū˙ũzũ˙ã÷œē鋨w5égļ˙×ķk÷íuĩXqęĒkǧa6ŦA”Kīl-ĢûĻą@šhDD0B"šOŋ‡2SšXa4AÖj4-4N(ži<ŽíB ēč?ųíX?öß˙˙ŋ×ŋs› _ƒZĸvƒíúí+ĻĒúŽļĢf}ąąÅĻaiėVŧmu0ąÖ튆“ēNĶTĶLĢq ƒ†ˆXĨ"%Ļl‘œ Ļ(IƋĮœÉ=7[[Nø­+îÛ^žßūĢû˙īˇ_đÂąęÎâšÂsĶwßíÚY…ēwÚð ƒjEÖM ÁVÕPšb"šNĮLl‚dĄüƒ…„""­X$I’dl“<†x"w‚¯ĩģ'ΟÜ;IkĢoĩ÷kôÛĩôáíû÷ūÎîagŋīíĨJ jĢjÛöÖē§wvąÅ Ø¤Ú 'dŽ"""B-‘Ä0ąa zˆØ…×6‹ŖŗP†‚~ž‹‡&;‹^š ŖeßÃŋÖ cõ_ /đqūCę˙ĢKĩD(ŸĶՍĨytGW°˜N"#īīlõöœTWyæbé‘ÂØL‘L]ÚhCtŠ2Ũeún†JŖMa’„AR Ũ!Ãē'oŊˇÕ6ģÕCWŠ^Ø9˙ßߛ†Ëíßi*Iü6͆ÜoąM Zģk÷_ *avÖĶ †'0‚ !Ɣ˜ÃB1Õūƒģ>ˆâ„.\4[Ã, n§w¤ƒ ôÛ×Ũ†m.DuøŋMͧÕëMĐvŰ„­oäŨ†¸v˜&! ´#ôãö0ƒŨÅĄ gFœĘŧÉ;ßŦķBíCĐ4ūãĻ<Øą¤L$4’I‚IP…ŊrÃúų ÷OØömŨ ĐBĄąG¤4"!ĄėĶíMh4Є÷W|KØdō׏֘ZŃõ‡_ĪVū­Ō=÷aÛžúÄDCqÄn„D˜ļâ͆\¨ÂÉ*ÎÁŨšyiąvīlšžĶ­ŋ˙H% !Ii$‚!f’HôđÍļ!ÚOŠīFEŖ; ͆„DE„[Õâdž*ö—*ą,a<Ķ._ŌMî°{÷Q­†āųņ¤ ˙ßvG=Ŋŗū{†•új”TŠęIŦíIģB%j_ˆ•ĖÃf[öšm&wžFŲ‚ †Črú‡˙˙>îđŧÛI' ú˜N]kÄÃX`Ŧ[ƒA„ĶŠ Â!%§2DNČfY‡‡ĘY%kOĮ+Zg™ šä…Žh"$}6ūŧOđ‰: ūÃáx=Į =ĩúĮęÚzÅ4SSÖĐ0„Š"‰ģ<-(;bú{;!›d[§‘oú%HäUOÛĒģõ˙ÄW °oûŋŨ†ÕwÚl`éß$ømÃA„)b"gˆ {´äĶ z"ųŽgCōԓ5,™a0¸4hķG„öŗ![!ši§č¸éŖ=°Ü›´M˙ģúܜŸ…ƒæ?w=~Qoü5ƒA´)ôŠLûz‹­‰Ũ§NĄ$n"#XˆąMm’č§3ÆpĖ@ėÆtFlšæƒÄų; ôŪ&vÛõĢiļģģRÎÄe8„­F w÷÷WL—#ų-jZhw0âV?IđÛVęŨņß˙Ģ˙×iŽ vz`ė4"6‘ ‹t<3¨ĖڄĮÃ3-0ƒÂ0îÛw}§wi…„Ŋ¤P¸L˜D)éådÂ"Õæ¯˙ähä]ęEĨæzz/‹ûūڇ˙ũ}wßûēĩ´˜A°īM88ąšž"vžČFjŌ5ÆNچlˇŌ/oHßißn…ĮiŨ×W~Ž–&‰û™gęînsHĄ'˜~æãFNķm­öf8Ŋ čŧa…W×˙ö4õ×ūhŒ~mĢúą„ˆâN™‡B",.Œ†ĐAíĸķBˇ×ē6h4ÕvšÚŪ>+ˇŽ˙Zųáû`ÜiÃĐkČüBū!4ļ'įgGÃ5fˆĢ‰âSxAڑė&‹´­žrnŋKĨ÷ûĒøjĩų:.0BũU>ęĩĨ—Ąˆ)ū›znˇ¯ņÕęŋ˙÷Öēûnĸ­>øtŸ#Bå&Pōˇ-į/´÷ä@Ͳ'&š`ƒ†lÂjlˆ†žô¯´ŸßDŨĶž?ĶŌŋ¨ÖÁü{_„Á¯ĩĩl˙oŗ‚žî$“°×ēíū˙ĨŪņU_›D}.dY×˙W÷+ߏ~ëZēiŌ~ęļžka‚n eGރ‹á*NÉ[ŠëĻÁ—Ú ĢNÕ}¤č l2á+oĢĸíˏ¸˙˛Vđnē÷kuŨ÷Ũ˙Ūēˇ˙ßáí¯íûßŨ¯â8°ēC./īŋL?˙˙ûŌīĶļĒû]†›ąOIÚ E ûôLv<{ ÷iĐé§Ũ­ĮĶĐé÷ĻŠëŽŨ_ßÚ}ÕŊŌŊũũ+˙Zõ¯đ­ĨŽíãū˙ūkß[wûņڋ}üв|‹Ž˙ß˙îÛKlßöÁˇXŧŒw톅ƭõ/&˙§AëĮjëėwÅ˙úĶĮī}[§ũß}wũ?õī¯ņûS0¯ŲO$ˇëū}}ũYë?á5īVŲN ˙āē ŽY zž—œŽīĻī/Úėm šhC)ĘPeHpÖ"#û}č6­ũ?šĩōû­idlNMÎsi´Á-^ēđTĮ÷¯īâŋ×Xé÷÷˙ũؤN7[ē č$"'‡îŪđ×_¤&67A[ˆˆˆĻĩũ=˙ļī…ęôŸ*y˜L"qčĮ~˙Š˙˙Žš~üåBīūĶĨ×ö ņT#į“}ŋûvÚ¯ņĮ{ÛO†5čSį‘×$I„åßVÕ?mĩØöØMU0˜BВü1€€ T € €7Z88(%€ %€ leptonica-1.86.0/prog/seedfilltest.c000066400000000000000000000126431506303110300173640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * seedfilltest.c * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NTIMES 5 #define CONNECTIVITY 8 #define XS 150 #define YS 150 #define DFLAG 1 int main(int argc, char **argv) { char *filein, *fileout; l_int32 i; l_uint32 val; l_float32 size; PIX *pixs, *pixd, *pixm, *pixmi, *pixt1, *pixt2, *pixt3; if (argc != 3) return ERROR_INT(" Syntax: seedfilltest filein fileout", __func__, 1); filein = argv[1]; fileout = argv[2]; pixd = NULL; setLeptDebugOK(1); if ((pixm = pixRead(filein)) == NULL) return ERROR_INT("pixm not made", __func__, 1); pixmi = pixInvert(NULL, pixm); size = pixGetWidth(pixm) * pixGetHeight(pixm); pixs = pixCreateTemplate(pixm); for (i = 0; i < 100; i++) { pixGetPixel(pixm, XS + 5 * i, YS + 5 * i, &val); if (val == 0) break; } if (i == 100) return ERROR_INT("no seed pixel found", __func__, 1); pixSetPixel(pixs, XS + 5 * i, YS + 5 * i, 1); #if 0 /* hole filling; use "hole-filler.png" */ pixt1 = pixHDome(pixmi, 100, 4); pixt2 = pixThresholdToBinary(pixt1, 10); /* pixInvert(pixt1, pixt1); */ pixDisplay(pixt1, 100, 500); pixDisplay(pixt2, 600, 500); pixt3 = pixHolesByFilling(pixt2, 4); pixDilateBrick(pixt3, pixt3, 7, 7); pixd = pixConvertTo8(pixt3, FALSE); pixDisplay(pixd, 0, 100); pixSeedfillGray(pixd, pixmi, CONNECTIVITY); pixInvert(pixd, pixd); pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* hole filling; use "hole-filler.png" */ pixt1 = pixThresholdToBinary(pixm, 110); pixInvert(pixt1, pixt1); pixDisplay(pixt1, 100, 500); pixt2 = pixHolesByFilling(pixt1, 4); pixd = pixConvertTo8(pixt2, FALSE); pixDisplay(pixd, 0, 100); pixSeedfillGray(pixd, pixmi, CONNECTIVITY); pixInvert(pixd, pixd); pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* hole filling; use "hole-filler.png" */ pixd = pixInvert(NULL, pixm); pixAddConstantGray(pixd, -50); pixDisplay(pixd, 0, 100); /* pixt1 = pixThresholdToBinary(pixd, 20); pixDisplayWithTitle(pixt1, 600, 600, "pixt1", DFLAG); */ pixSeedfillGray(pixd, pixmi, CONNECTIVITY); /* pixInvert(pixd, pixd); */ pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* test in-place seedfill for speed */ pixd = pixClone(pixs); startTimer(); pixSeedfillBinary(pixs, pixs, pixmi, CONNECTIVITY); lept_stderr("Filling rate: %7.4f Mpix/sec\n", (size/1000000.) / stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout1.png", pixd, IFF_PNG); #endif #if 0 /* test seedfill to dest for speed */ pixd = pixCreateTemplate(pixm); startTimer(); for (i = 0; i < NTIMES; i++) { pixSeedfillBinary(pixd, pixs, pixmi, CONNECTIVITY); } lept_stderr("Filling rate: %7.4f Mpix/sec\n", (size/1000000.) * NTIMES / stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout1.png", pixd, IFF_PNG); #endif /* use same connectivity to compare with the result of the * slow parallel operation */ #if 1 pixDestroy(&pixd); pixd = pixSeedfillMorph(pixs, pixmi, 100, CONNECTIVITY); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout2.png", pixd, IFF_PNG); #endif pixDestroy(&pixs); pixDestroy(&pixm); pixDestroy(&pixmi); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/seedspread_reg.c000066400000000000000000000135451506303110300176530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * seedspread_reg.c * * Tests the seedspreading (voronoi finding & filling) function * for both 4 and 8 connectivity. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const l_int32 scalefact = 1.0; int main(int argc, char **argv) { l_int32 i, j, x, y, val; PIX *pixsq, *pixs, *pixc, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixsq = pixCreate(3, 3, 32); pixSetAllArbitrary(pixsq, 0x00ff0000); pixa = pixaCreate(6); /* Moderately dense */ pixs = pixCreate(300, 300, 8); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; val = (97 * i + 74) % 256; pixSetPixel(pixs, x, y, val); } pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; pixRasterop(pixc, x - 1, y - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixc, 100, 100, "4-cc", rp->display); pixDestroy(&pixd); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; pixRasterop(pixc, x - 1, y - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixc, 410, 100, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixs); /* Regular lattice */ pixs = pixCreate(200, 200, 8); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixSetPixel(pixs, i, j, (7 * i + 17 * j) % 255); } } pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixRasterop(pixc, j - 1, i - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } } pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixc, 100, 430, "4-cc", rp->display); pixDestroy(&pixd); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixRasterop(pixc, j - 1, i - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } } pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixc, 310, 430, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixs); /* Very sparse points */ pixs = pixCreate(200, 200, 8); pixSetPixel(pixs, 60, 20, 90); pixSetPixel(pixs, 160, 40, 130); pixSetPixel(pixs, 80, 80, 205); pixSetPixel(pixs, 40, 160, 115); pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); pixRasterop(pixc, 60 - 1, 20 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 160 - 1, 40 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 80 - 1, 80 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 40 - 1, 160 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixc, 100, 600, "4-cc", rp->display); pixDestroy(&pixd); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); pixRasterop(pixc, 60 - 1, 20 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 160 - 1, 40 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 80 - 1, 80 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 40 - 1, 160 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixc, 310, 660, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixsq); pixd = pixaDisplayTiledInColumns(pixa, 2, scalefact, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixd, 720, 100, "Final", rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); return regTestCleanup(rp); } leptonica-1.86.0/prog/selio_reg.c000066400000000000000000000122631506303110300166430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * selio_reg.c * * Runs a number of tests on reading and writing of Sels * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; static const char *textsel5 = "xxxxxx" " x" " o x" " ooo x" " oo x"; static const char *textsel6 = "xxXxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { l_float32 val; PIX *pix; SEL *sel; SELA *sela1, *sela2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* selaRead() / selaWrite() */ sela1 = selaAddBasic(NULL); selaWrite("/tmp/lept/regout/sel.0.sela", sela1); regTestCheckFile(rp, "/tmp/lept/regout/sel.0.sela"); /* 0 */ sela2 = selaRead("/tmp/lept/regout/sel.0.sela"); selaWrite("/tmp/lept/regout/sel.1.sela", sela2); regTestCheckFile(rp, "/tmp/lept/regout/sel.1.sela"); /* 1 */ regTestCompareFiles(rp, 0, 1); /* 2 */ selaDestroy(&sela1); selaDestroy(&sela2); /* Create from file and display result */ sela1 = selaCreateFromFile("flipsels.txt"); pix = selaDisplayInPix(sela1, 31, 3, 15, 4); regTestWritePixAndCheck(rp, pix, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix, 100, 100, NULL, rp->display); selaWrite("/tmp/lept/regout/sel.3.sela", sela1); regTestCheckFile(rp, "/tmp/lept/regout/sel.3.sela"); /* 4 */ pixDestroy(&pix); selaDestroy(&sela1); /* Create the same set of Sels from compiled strings and compare */ sela2 = selaCreate(4); sel = selCreateFromString(textsel1, 5, 6, "textsel1"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel2, 5, 6, "textsel2"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel3, 5, 6, "textsel3"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel4, 5, 6, "textsel4"); selaAddSel(sela2, sel, NULL, 0); selaWrite("/tmp/lept/regout/sel.4.sela", sela2); regTestCheckFile(rp, "/tmp/lept/regout/sel.4.sela"); /* 5 */ regTestCompareFiles(rp, 4, 5); /* 6 */ selaDestroy(&sela2); /* Attempt to create sels from invalid strings (0 or 2 origins) */ lept_stderr("******************************************************\n"); lept_stderr("* The next 2 error messages are intentional *\n"); sel = selCreateFromString(textsel5, 5, 6, "textsel5"); val = (sel) ? 1.0 : 0.0; regTestCompareValues(rp, val, 0.0, 0.0); /* 6 */ sel = selCreateFromString(textsel6, 5, 6, "textsel6"); val = (sel) ? 1.0 : 0.0; regTestCompareValues(rp, val, 0.0, 0.0); /* 7 */ lept_stderr("******************************************************\n"); return regTestCleanup(rp); } leptonica-1.86.0/prog/settest.c000066400000000000000000000106211506303110300163620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * settest.c * * Tests set function for RGB (uint32) keys. * * We take a colormapped image and use the set to find the unique * colors in the image. These are stored as 32-bit rgb keys. * Also test the iterator on the set. * * For a more complete set of tests, see the operations tested in maptest.c. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static L_ASET *BuildSet(PIX *pix, l_int32 factor, l_int32 print); static void TestSetIterator(L_ASET *s, l_int32 print); l_int32 main(int argc, char **argv) { L_ASET *s; PIX *pix; setLeptDebugOK(1); pix = pixRead("weasel8.240c.png"); /* Build the set from all the pixels. */ s = BuildSet(pix, 1, FALSE); TestSetIterator(s, FALSE); l_asetDestroy(&s); /* Ditto, but just with a few pixels */ s = BuildSet(pix, 10, TRUE); TestSetIterator(s, TRUE); l_asetDestroy(&s); pixDestroy(&pix); pix = pixRead("marge.jpg"); startTimer(); s = BuildSet(pix, 1, FALSE); lept_stderr("Time (250K pixels): %7.3f sec\n", stopTimer()); TestSetIterator(s, FALSE); l_asetDestroy(&s); pixDestroy(&pix); return 0; } static L_ASET * BuildSet(PIX *pix, l_int32 factor, l_int32 print) { l_int32 i, j, w, h, wpl, val; l_uint32 val32; l_uint32 *data, *line; L_ASET *s; PIXCMAP *cmap; RB_TYPE key; RB_TYPE *pval; lept_stderr("\n --------------- Begin building set --------------\n"); s = l_asetCreate(L_UINT_TYPE); data = pixGetData(pix); wpl = pixGetWpl(pix); cmap = pixGetColormap(pix); pixGetDimensions(pix, &w, &h, NULL); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (cmap) { val = GET_DATA_BYTE(line, j); pixcmapGetColor32(cmap, val, &val32); key.utype = val32; } else { key.utype = line[j]; } pval = l_asetFind(s, key); if (pval && print) lept_stderr("key = %llx\n", key.utype); l_asetInsert(s, key); } } lept_stderr("Size: %d\n", l_asetSize(s)); if (print) l_rbtreePrint(stderr, s); lept_stderr(" ----------- End Building set -----------------\n"); return s; } static void TestSetIterator(L_ASET *s, l_int32 print) { l_int32 count; L_ASET_NODE *n; n = l_asetGetFirst(s); count = 0; lept_stderr("\n --------------- Begin iter listing --------------\n"); while (n) { count++; if (print) #if 0 lept_stderr("key = %x\n", n->key.utype); #else lept_stderr("key = %llx\n", n->key.utype); #endif n = l_asetGetNext(n); } lept_stderr("Count from iterator: %d\n", count); lept_stderr(" --------------- End iter listing --------------\n"); return; } leptonica-1.86.0/prog/sevens.tif000066400000000000000000000013461506303110300165360ustar00rootroot00000000000000II*(/’ėÆGŒsˆęėˆÁ>@ņŦ‚„V? rt&ę9:a|ĐKɎOC:8zK¨ÕWގ¨ĒZŋũ!kúZA-UxAV j—Âūž’­RũzJĩĒŌÕP]j—úÕh.–ŧ ž°•/ ¯ úõĩR8!™E1„@ˆ AĒ! r ؑŽ×†‡ŌdpÖRä2#†}÷ޤįJr-V_^šņH†%E%ũ*IT%˙P°‚K­VŠ%TĩĨJ°–•j’­Rë].‚Ǥ–ē¯I}*¯ú¤•UWĒU_¨ZKÚ§­5Mq#įPĐ …â Ē" A„zyų3Ž„ä.¤į të2*EŸU×Tū¸¤=$<*¤=tŊ~JĨĶ ûUI-D.”%PĢZ­%ëúXJ‚K ×ŌõúÕ$ĢĨëŌ^Zé/˙õéu…UÚõĢ\*A‹!Šd4a0ƒ3 ‚heÁb:Č(9 Ąō]Á2cä­ šČšŠ'Đvāšz U¤—Ú vĩaBXĨBaB¨JŊBĨ ]RKJŋ__I%K_Áëæ=tŊ:ւ×úސKũūƒ¯K˙…iÃõú˙ĘŅ„ÔGi‚ ŧÆ ÕĪĶ[[^ŖŠ:=Î>K¨]h8ÔĮÉZü/ǤũpĢĐđOĒëH{ hR QK ũuZ­Uz_פŌKPĄ}Ĩ^’_ú¯U˙éWK×ü*˙ũ/_éBū× (N\@d––ÖŪ(,,leptonica-1.86.0/prog/sharptest.c000066400000000000000000000047101506303110300167060ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * sharptest.c * * sharptest filein smooth fract fileout * * (1) Use smooth = 1 for 3x3 smoothing filter * smooth = 2 for 5x5 smoothing filter, etc. * (2) Use fract in typical range (0.2 - 0.7) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 smooth; l_float32 fract; char *filein, *fileout; if (argc != 5) return ERROR_INT(" Syntax: sharptest filein smooth fract fileout", __func__, 1); filein = argv[1]; smooth = atoi(argv[2]); fract = atof(argv[3]); fileout = argv[4]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixd = pixUnsharpMasking(pixs, smooth, fract); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/shear1_reg.c000066400000000000000000000245151506303110300167160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * shear1_reg.c * * Regression test for shear, both IP and to new pix. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE "weasel2.4c.png" #define FOUR_BPP_IMAGE1 "weasel4.11c.png" #define FOUR_BPP_IMAGE2 "weasel4.16g.png" #define EIGHT_BPP_IMAGE "test8.jpg" #define EIGHT_BPP_CMAP_IMAGE1 "dreyfus8.png" #define EIGHT_BPP_CMAP_IMAGE2 "test24.jpg" #define RGB_IMAGE "marge.jpg" static PIX *shearTest1(PIX *pixs, l_float32 scale); static PIX *shearTest2(PIX *pixs, L_REGPARAMS *rp); static const l_float32 ANGLE1 = 3.14159265 / 12.; l_int32 main(int argc, char **argv) { l_int32 index; PIX *pixs, *pix1, *pixc, *pixd; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_stderr("Test binary image:\n"); pixs = pixRead(BINARY_IMAGE); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); /* We change the black to dark red so that we can see * that the IP shear does brings in that color. It * can't bring in black because the cmap is filled. */ lept_stderr("Test 2 bpp cmapped image with filled cmap:\n"); pixs = pixRead(TWO_BPP_IMAGE); cmap = pixGetColormap(pixs); pixcmapGetIndex(cmap, 40, 44, 40, &index); pixcmapResetColor(cmap, index, 100, 0, 0); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test 4 bpp cmapped image with unfilled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test 4 bpp cmapped image with filled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE2); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test 8 bpp grayscale image:\n"); pixs = pixRead(EIGHT_BPP_IMAGE); pix1 = pixScale(pixs, 0.5, 0.5); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 4 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pixd); lept_stderr("Test 8 bpp grayscale cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE1); pixd = shearTest1(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); lept_stderr("Test 8 bpp color cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE2); pix1 = pixScale(pixs, 0.3, 0.3); pixd = pixOctreeColorQuant(pix1, 200, 0); pixc = shearTest1(pixd, 1.0); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixc, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pixd); pixDestroy(&pixc); lept_stderr("Test rgb image:\n"); pixs = pixRead(RGB_IMAGE); pix1 = pixScale(pixs, 0.3, 0.3); pixd = shearTest1(pix1, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pixd); #if 1 lept_stderr("Test in-place shear on 4 bpp cmapped image:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); pixd = shearTest2(pixs, rp); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 12 */ pixDisplayWithTitle(pixd, 800, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); #endif return regTestCleanup(rp); } /* ------------------------------------------------------------- */ static PIX * shearTest1(PIX *pixs, l_float32 scale) { l_int32 w, h, d; PIX *pix1, *pix2, *pixd; PIXA *pixa; pixa = pixaCreate(0); pixGetDimensions(pixs, &w, &h, &d); pix1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); if (!pixGetColormap(pixs)) { pix1 = pixCopy(NULL, pixs); pixHShearIP(pix1, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixHShearIP(pix2, h / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixCopy(NULL, pixs); pixHShearIP(pix1, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixHShearIP(pix2, h / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); } if (d == 8 || d == 32 || pixGetColormap(pixs)) { pix1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); } pix1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); if (!pixGetColormap(pixs)) { pix1 = pixCopy(NULL, pixs); pixVShearIP(pix1, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixVShearIP(pix2, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixCopy(NULL, pixs); pixVShearIP(pix1, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixVShearIP(pix2, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); } if (d == 8 || d == 32 || pixGetColormap(pixs)) { pix1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); pix1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); } pixd = pixaDisplayTiledInColumns(pixa, 4, scale, 20, 0); pixaDestroy(&pixa); return pixd; } /* ------------------------------------------------------------- */ static PIX * shearTest2(PIX *pixs, L_REGPARAMS *rp) { l_int32 w, h; PIX *pix1, *pix2, *pixd; PIXA *pixa; pixa = pixaCreate(0); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixHShear(pix2, pix2, h / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 8 */ pix1 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixHShear(pix2, pix2, h / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 9 */ pix1 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixVShear(pix2, pix2, w / 2, ANGLE1, L_BRING_IN_WHITE); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 10 */ pix1 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCopy(NULL, pixs); pixVShear(pix2, pix2, w / 2, ANGLE1, L_BRING_IN_BLACK); pixaAddPix(pixa, pix2, L_INSERT); regTestComparePix(rp, pix1, pix2); /* 11 */ pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 0); pixaDestroy(&pixa); return pixd; } leptonica-1.86.0/prog/shear2_reg.c000066400000000000000000000170471506303110300167210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * shear2_reg.c * * Regression test for quadratic shear, both sampled and interpolated. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void PixSave(PIX **ppixs, PIXA *pixa, l_int32 newrow, L_BMF *bmf, const char *textstr); l_int32 main(int argc, char **argv) { L_BMF *bmf; PIX *pixs1, *pixs2, *pixg, *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "shear2_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; bmf = bmfCreate("./fonts", 8); pixs1 = pixCreate(301, 301, 32); pixs2 = pixCreate(601, 601, 32); pixSetAll(pixs1); pixSetAll(pixs2); pixRenderLineArb(pixs1, 0, 20, 300, 20, 5, 0, 0, 255); pixRenderLineArb(pixs1, 0, 70, 300, 70, 5, 0, 255, 0); pixRenderLineArb(pixs1, 0, 120, 300, 120, 5, 0, 255, 255); pixRenderLineArb(pixs1, 0, 170, 300, 170, 5, 255, 0, 0); pixRenderLineArb(pixs1, 0, 220, 300, 220, 5, 255, 0, 255); pixRenderLineArb(pixs1, 0, 270, 300, 270, 5, 255, 255, 0); pixRenderLineArb(pixs2, 0, 20, 300, 20, 5, 0, 0, 255); pixRenderLineArb(pixs2, 0, 70, 300, 70, 5, 0, 255, 0); pixRenderLineArb(pixs2, 0, 120, 300, 120, 5, 0, 255, 255); pixRenderLineArb(pixs2, 0, 170, 300, 170, 5, 255, 0, 0); pixRenderLineArb(pixs2, 0, 220, 300, 220, 5, 255, 0, 255); pixRenderLineArb(pixs2, 0, 270, 300, 270, 5, 255, 255, 0); /* Color, small pix */ pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 50, 50, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Grayscale, small pix */ pixg = pixConvertTo8(pixs1, 0); pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 250, 50, NULL, rp->display); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); /* Color, larger pix */ pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_LEFT, 120, -40, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_RIGHT, 120, -40, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_LEFT, 120, -40, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_RIGHT, 120, -40, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 550, 50, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Grayscale, larger pix */ pixg = pixConvertTo8(pixs2, 0); pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplayTiledInColumns(pixa, 2, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 850, 50, NULL, rp->display); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs1); pixDestroy(&pixs2); bmfDestroy(&bmf); return regTestCleanup(rp); } void PixSave(PIX **ppixs, PIXA *pixa, l_int32 newrow, L_BMF *bmf, const char *textstr) { PIX *pix1, *pix2, *pix3; pix1 = pixConvertTo32(*ppixs); pix2 = pixAddBorder(pix1, 3, 0); pix3 = pixAddSingleTextblock(pix2, bmf, textstr, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(ppixs); } leptonica-1.86.0/prog/shearer.148.tif000066400000000000000000002377661506303110300172200ustar00rootroot00000000000000II*8? *”'˙˙˙˙˙_˙ŋ˙˙˙˙˙¯˙ß×đŋß˙_ũ˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙˙˙˙˙˙˙ßų\¤!oĢé’äoOŦIEаʑ¤ėl~â aD"ĒôF?AĻpOõéē ĢiŌąČŽDvˆãĻ33ũ5Ķz#Ú ŧČ!Č}“Ûˇ?õ¯ u´ |}}û‘~œ“îđAŸ# ĐĖ;×­Ô}ČG{Ļ„8r Ņīäo˙˙ÚvE‡ĸ+¸v|*Ōõ_ŌcĢŨ¨Mžžh'˙˙öEĀĢë‘˙‘˛˙ ŲŨo;Y¯˙é ˙ĶĶĻŌd@>f%á:ļŸūŌ˙Õ7W"Ī$úDQÚxL5Û˙î—~˙˙Ö˙Ot ƒ'˙ŋŨן¤Ŗ˙ū˙­ZwÚhd…× wąĻÚ¯¯˙õąčl‹DžˆŨ…Áļ¸ŊmpÂá>ē[Z__§ũ'‘ģÂr ´˛Û&x‹L-Š‹˙˙ũzũ˙JÚDc¸eRē‡Äa„n×÷ĢũmpĄÕ^ë]ôn ĪZo¸Ģ_úųëõCWCęäGi­šÉ4ø†Ē)6KÕRîŋ\áhŽ7iŲÁßÉąšĒØĢJ˙߯ũ+ÛîMíYēüņ#´íøÂ§j;N.ėũú#Čŧ úĐ˙t˙BÉ:¤˙%X!.Ü6˙éúûߑAūû"" „ũdd‰¯{ ˙˙ņĶIĶ´Úi„ëę…§Ø­{W˙ũ{ū¤Węƒ_Úr0TĐj)8ģ=9ûëä]4ƗĶĸ8hílĖ&W ˙ЈaWļˇ˙Õ|é'ē%2 eŋĶÛccļ×ôF˙˙Ž*Ũ¤Â [ˆCˆĶ_ŋūŨ˙ũ\ˆ>•xAĻ ÎOuWũ+˙]+Tęī×5Ítë{gä\S×oëķŗ#7m~ÚŌÚ§Ē‡DīũūÕ:f`„õ°ŋB"ĶŊ{k~ÖûúŨ‚Ŗ}Ė…˜ˆaģbĄÕŋÕ˙­áe\4˜†i§c†°wŖ_úä#Ŋ<2r~9!a4ÅCm$Ãéží7H–:L ÉÄ3ŋdCLIÂĻ+ūūš}Ĩ „ œ+ŠÚv'FíCJÂæ~žëz"䟨AŸ dĘęAœ#ĀæÔC ¨ãl*}io×N‰pœ3@ē„͆dįę  6Ø_˙ô.õ}ģ´ķ1oūžđÁ ŋF@á DėBŋ˙øãéõĐk’ŌöîéØ tŌ#’°Änšīú^ˇÕš>đļPÜ'ūBų'vž5ˆö˙ōuÜ'’áÖŋ t›mJ Éøˆß˙/õ˙¯„ĐĖ˙ß^D|“ " §÷ĨßÕˇ¯˙ĸ7ŌiĄ ÔŦŋõôŨ{Ũ“ƒŠØī‡ī^íũûHŽ)ŲV"ŌeK W˙׎4õ#ė„uŸųœq_ĻĩÛéģ°™˜Î\˜A˙˙˙’{Ēi‘†oM2[Ų’*ؤÛUŸũ[’ύ3Á –ŸëŌ˙˙‘h”} ɟ đ; uˇM÷˙ī¯y7z :eú˙˙^Nt°]ˇ°ƒ‡}h†ļ)´¯ú]GīûWŊ'œaāÖįaß˙˙l ĐĮ]}6ƒĶ$Kįj´ŠR;QPŌ[_§Û×˙ôJúzz‹āŸuīŨ͟÷v°ž  īN„C;mĨ­xFũrcŪ•ˇ]<ƒëOĮ÷×ŖŊĩõūEŒ•ëOČäéâMTUÜ_`ûëėvŋŨxMEŋ÷Ģkę Â˙¯ZWM'qd†.˜ƒKęŽ}?¯ĢVÚk$ũä@!˜9ļ’]ĩũWMÆI˙˙ëĶHē´B:äqÂkná¤?Ņúņ^ˆŪ¨; Ÿ2įũÚ]Š´í¤Ÿ˙ū­õvŦ&ˆ>¨š NŧÖ;ģJŸĨ¯Øô›i>ÂČfOõÃ&:iöĮ˙˙ūŋu"=4!“„3œ´ˆƒ  × ũWDQīõ˙ˇö ø\DDZ}Ģ_~ē÷ôž´EvéĄaH/dŧD_={¯Mĩ!{á;6F-.!„ĶQkë˙˙ũiÄA™ˆv!î>Õßīúëđ…ëÄf2#˙(méļļŋ˙˙Į#˛+ä‡ē wî Ķká=ę–ŋôD‘Ã’ļđđ‚kÅū×˙˙ú×Ļéä*™[ŨÄéŋÅÕĢ"žGÖē÷KūԄbÖõm-ūĒžE™Œė&30—~! ×ģĨ]wīîõ˙";ĶL;3ų7ÖžÖ˙˙ūDuû­HŗĶé§Č&Ę´"OLnÕ˙ũūģ]>ˆŖôė'ÄA“uWÛi[ŋü!ū>ŋDĸ‰F͇Đĩĩ\Zē¯_ęÂv¯ŽIęŋ 5ėT>˙˙ú÷^ļ‰ŪŦĐ)˜!Ÿˆ† øîŋ˙ÅX¤JÃkâ-;Oé~˙…ëcĒ×Ē´ĐeÅ:xƒ Ļ´ŋ˙˙īöž"O°Ö |ŅuÉ?˙ãäAčŒwˆƒ•Ō˜ˆ˛ ŠŋU˙ū´ŋâĶLBī°ŋ¤˙…õę¤ŨĻ„¤ėjA†N´×¯ëôßãÄ4uMĩ˙˙[JžŋdXi ķƒ=xˆ†¸¯ŋ3ŋäz?øƒÖėkißú%xäu?ĐęGy8„õ ™„(2:\0ƒöžÚũ{˙Å ĶMkÚk˙_¯ū­HáíØL! Đw††ļ*4āŨ/ÛęŌ䞈ãØD1ĄNVÄEĶîZzæ/a5wjâ—úéˇĶC4}ũ/î É Ë( =1]oÆíĻŋVpÁ_ •ļĶ÷^EŽÂĢ„,xŽiŋëÆ:ĻŌtF;â  NĮņuW'­p~á Õ?üŒt’ģō#´}„ķf¯ãë_ĩŗŽCM-`ĩĩĩÆúÕētôđ§M?ŋąÕHâˆŖŊ;3åĐÆëNē|UuȎ¤X"ĮW ™„ŋÕü'zÕ3ŒĖzŨÛôōW˙î†Ēäũ§fȑfJWũ}] vŽõ‚2Ŧėtõš~ízõ˙î’u`ˆJ‚B͏Ķ˙¯×ÚČą’§ †:wáĢauŋ˙­õų1˙Ļ…éäĸíz˙īUÖôˆŨØ&H†Ä2pƒ´Å6‹ĖöĢ˙ö:ÚŠ8ĩhŒwzvŸ‘ŋäo˙¯­÷Ōí9‘ČDZiŠÛ_˙˙ŧzé¤w™„:ũ'ö“ē˙äuĩü.•ō,U4І`„Ml0ŽN~õūž–ŋˇ"TÍ“’ghm}¯îīŽ˜¯ĩŽ›’†ˆŪšĘÂv*Ž×˙Uõc[JÚϚ!qØĩ÷ø¸w~ūąKë¤č•ļĐb(Mjģkõĸ(˙Ĩ˙īDpõČĀŠ’YŽÕv÷u˙×i\Šđ˜‰ 5i×é.ĢÕ}ĸ1ë ĪŒčôĮˆiëvŽ~ũy‚ī_é‘ÑŽĮũŠUŋõIût8W'Áfq´ŧD]ŽîÕũõCëĩˇîĄŌŨÚģ]Wķ”ÖŊûÚĶ\ƒ#•ōÜOa5ėu˙ŋČŧ¨Rę¸ÕĄ3à ôØ†Ē’k˙úŽ=Ņ´ø˛q¯a5ĩ¯j×ô?˙`“ˆ†ŧ]¤Ŋõ˙UČŋy8ĩ‚Î×ią}Ÿú¯˙ĨĄ§Xã÷˙‘uëHZ× ãĶÔáø×ÛNíúū´ĸ!Ãõnëúīøé§Do~Ķ>'Úũ†’ųĸļ˙äVbĸhĘĐ0š~Ķm-;Ņ'ŊWō9Đ]>Ą?B íGi6¯×ôЈ‰ įiX×<÷4J÷é?˙_K‰j<'ŸŋüDC'a0…z m?Fō.¯­_ũG|$!…LSa[KÕÄD4õû¯ĻôßõûôŸQa4Å1Ēö~=†n8ģ¯p˙ãņQúa˜W{j˜‹í7ŧ5ÉĐ?÷úö„0A¯Û YhHNĶ[}ŠČ?õīö†UIö=­1wl/ŽŊ ļĮMĶëÚųÚĪ ouvƒ[­õ}˙ĢČ$5ēL§iŽRúō(ū×B Ą…#‚9Ų¨G"sm]mÖhŗDޝüŽ™'R íĨŗanĖiõÚöŨŖ×°ƒ(H1­đˆ.Í\ƒQĢĢŽ›(ãĩK˙Z§Ņ!úņ˙ė}}Zh0ƒ.3ĮNøA¤" \U…mStÎ˙ũĻēßžĖÅ4dy;ûô•}:h4!„ øĖΗÂ"v†°˜Û[íŖŌ#}˙ūŋu Đ†Ÿúûß}]Ŧi„C:Uß§¨B ECĢͧ˙û_ųdŨöš|…‘Wú×ũ/mđΐĢęã#J4ÅGvšŽĩQUũkR8ĸ7 Ėk˙ųņr7öäāÆúOˆaĩq~ß˙īą˙ÛOiž ˙_īà ų íė'é°ŋŊ~ŋoúĐäcĒĶO§\ˆ;ũ×cŠ?öGNd.dŨV%`ĖEũ‹´Ō˙Ĩ˙Ąūú}Įúũuü…ŧYДSM<]ßuëôaú_˙#w&;~ē­ü‚=Ú밁ũ”‡Ûƒ+ĶM=ĒũA˙úęēím†–ítJÁ ˙¤ō(ëÂũ°ÂĄģƒ^÷´J?ČÃ^÷É?ƒCnŊÛÃWú˙ÚíT“ hY‘ž4-UÚÁ§˙ũwėÄ4×|mųų˙ņԅznA—ōÁ­ÔGĢv+´Û˙éz~,ž'Ģ­]úú둊Ä&f)ļŅĄĻF Ąk;Ta8iĒĶŽ˙^ēņ šĻžÛ ˙¯Ö…ē"8lCB áxBBYēz!—…› ÄA„ .ūÛ=¯\DĐĢbŊ{ôŋôž!žņ’ĢÚrSˆī߯_Äé´Ķ­˙¤Hũ7mØAžŲû•ËõįÎæškØĶũüD0žûUô˙­y #˙‹3ys$˛#Œ dr.[":¯HH9¯jáëßņ Š:¯žá§ú!Ü ž˙{ģž¤%ô!ÄYâÚkXÄD0ší>-;â$„×ßwĒöB;Ũŋ8&–ũÚfĖŲ{Ĩ´ Âkī׈ˆkģ×ŨČw˙U˙ölúßdHlƒ{ŧĐFës!Č0„XWŧ|AĻŊ5÷_ë˙ä+Ū´Č „í{×Oū$duŊ0˛š2 ƒ_Ä_]7<í߯ęöē Đ]V˙r3îŸLœBHĢJ&ŽÄDZ’Ūīm]tŊúũęė úzôEØA„ô¸ƒMuvĢbĩ˙Žēöé<.+õ˙Ķjš§ˆü8šžĐl-×õ˙˙|Šû_¯âŊ ޤo]×Îę?"e!Âcc_ŋūũНDWōä§ũ˙IĨš'ˇŅ9ĻųS\Ž6+;.Žõī_ú}‘Pßd1JŊzWÕ;8v0ôČ §Aōš0ĘĒ`ƒ ×ĶûõøëVĒÁŋßéõēøeš’í( ĘÁ†&ĸjî˙_öŸ˙Ķ×˙‘u×ļģĩh2qHuäĄī`™˜?Ã"!„ÖŠą˙ē×_§ū×Ö´ũ¯Vƒ ‚ēa§L2}NüQa=ZzŨÍų #tˇûÅHē¸ëŠ*˜NdsQtJØA*eQũ1Ķëpé5Uûũa­í/í;ģĸ(îI÷Ä2^“ ŧnO’˛.!‘ĮŋtäA˙ũh\U§Úæš__Zū‰?°Aūč/!š~ˇÄLÛ[ÕÅß˙õõ§aRŅc˙øãē…§dHÍ÷SzاÎĶą2i˙íá §OmaYų#Äȏ˙øûUL2ä̤Ķ\‰ĩúd`A _Û­}Hö:Øäæˇœt×˙íHą’vÕÄ?ĩŠ[M•ˆę~ŋ¸2rßßūBHmz ÂļÂŨ'˙ō.Ÿ§Žģę é?tū;ūĄ-‘ûŋV" +bĸˇ˙éļ˙ú˙ƒUęû*ŋĮß"š6R i­Ķ˙a?M-¯ŊūĮō~Úk~ūŸČÂۜ ë6öģ™ŪH@×˙ú;ˇë÷iŋēM˙Ķø ÉîÕZН#ƞ¯#ø‹M5Áë™Ęx‘Y__¯ä‡öG%Ú˙„D‚%>ûIĩ{õ‹_öꞃūŋũ„›K‹(-!˙ĻĄ FÎēZÎĖͧh|EÚûJÚ_˙˙bŋ°˙ũi§ čI~B" XH0A¯ U…žīDqú}ÛJ”.‘°´˙ßNÁf!†Oĩí Š &ŠbĄëK×ᯊ=6ÖáäŠ˙C‘ģDAú,'ÜZĢ^˙ÕCĒ\+DWqZ ĖSÆ ×īŌđ›h?a Ģ̏ģ4—ōœR9÷ĶϚ`Š˙ãŪB‘_¯ˆ”é˙ƒ;ŋ¯^¸¸XM<)˜Ėãž×éū+ŋ΁!„Öīëéūˆ•‘ž\]Ph]éUĒ´=~L1Á5Wë¤Ũ/õP•oŅ'„ĶSUų §ëũ0@Í}s!ˆÚĶõK˙äH Ē8Žš!ūū—ë‘!WļéĄ&ΰCâ÷ôI´ŋ¨C÷zēļۄëŲũ˙áĢûͰƒÅŪÁ+\†˙ūŋõ’đ›§īŨPŋČGčˆí´EļЏ1XOîžE#î‡Ŋ"cún<ũō%NūŊ&Ũ;×`šöėũđŊëūÅ[¯˙˙÷¤įb†Wií¯íõ˙Åwiá…M\ũ^ĩér$RtõÛaWå?ÖEGūW)ƒ دž×˙õ÷Qv¯ŠUĖđ˜?õũņ}ރ]°ÂŦ”˙­*ÚgPa^Úīß_ŋÂö*÷´¯˙ņ|DDͰˇ[Ģi}ņŸŠú˙˙ĄkbĄ÷ųë÷â]6˙õšŠV/]twņ ˜¤ũëč †ŽõdķB ÖėUŨωŽkĩĩõ0A—ÃM1î×Ãū-ZÛúzq`™;6û+B-5ü|0šö)?DĄÄ4 ˊhÕBbL*j¸ˆza~•ņh;ĶŸ‰œīW‘c}ĻHNwŒZâu ĶOWR,9Ø"2R% ĮˆĩūÖĶ"Ãzi?ã˙Ŋ;õIĻB˙¯^ĩūˆŨ„Ķ>ëũ˙é^FôĐgÁÍOûgIũ÷ãVûA“…(ŸÉvū×˙˙_ŽN7i„ ˆ8Juëú˙õՑ"Úv™áZŊĩmo×úä#Ē֛‘!ČŨĢ„8:y\ŦûëÖ˙ø!Ž˜ëiגé¯§ØØĨũWú„+ÚV‡MŌ"ŽÕ3A/%GÁ ÖˇúßŌ˙ö˛9§DĸĐNA×ĻR>!„öŊûų:˙ũŽĸŌ}8e:ß 5ö°pvÍ4J˙ō#ëUéˇh2\ĩOˆģ]öęÚ¯×ÂúnÂjqš h܂ŸM4Įk¯ūĢū—"ãNė Ņ lŌē|E§iŠģ˙äŸČô˙×#§ Ŗ°\ákÄC ØģJéÍO˙K}ĄŊ"7n™NNt:ņ .×[O˙˙û×oX4ÁhP×%īâ*é°ļŸë˙×Hr#• ¤đš%dˆéõÃ/¨¨¨ĩs;˙õmxBû魂Ļŧ…A§¸amw¯dP1_Ĩ"ÛiˇęKŋō:“^ÃIž˙éŌ¯ŽEå~ĄŸ¯+‹ŽEģ^ē‘uą_[ģĸQONA)ē}†ļëūŋēīéŅ˙ŗAÚ}WX}Šĩs=§Ú¯˙^ƒm5a4Í/§¨•iϐiZų:˙×˙JúĶÁ'5ũ؆j)°­X]¯˙×úäQčŒwĻw÷ÄiŠíũúnŸĶž™j-‘\os#" m¤›]oũkũiĻ××Ķ`š wßõú˙õKv‰Ãūda¸‹ õ_×˙˙ũj–ŠŌÎę0Ë!TUŨ}Ķ_ũaŽŋŪĶzļ*ŊßõÉ(Ö˙]}/iĩ˙˙ ‹UŗĄđƒAĢctŋũ{øA´å˜hü,ŒX û˙ōcúę™);9Ÿ„¨YC•Č4ŌpĶ\˙¤˙ü ÂĖŲØÛÎë?%TÄEœr€×}ļĢ˙ĶD‡iÚgųČé>ĶĶ!'ŦDOë {O>—ûIŨčD3Ą~v%_ ö”E…ģqÚˇø÷îÍž"COĐw!K;Ôqƒ]ēßONEéĻ|'ŌđÍĒî!…ģ˙˙ÛW;4ZáiŨŲoQ†ļž‰öÖˇyQ?°™88ŊZ÷ íčÄՆ^›z˙۟é5 ĮˆŪEŋ †X‹ Ĩˇ"ā/ú×y'ԌvĄ§ī$ø]‚|Įú0ük˙ū­ĨmŠdáų˜¤čéŨ×_ ĶSâ_VÔ¯˙ÚØ×TģB !gŨéūĮō$S´.ܔ† ¯a˙˙Įô5};Їéõ˙Z"Ŋ Ό ô  ^šwV~ũ˙ų7Ēí•”[]]}Ō"ŽėÛL3āž ”…ûÖ˙˙K˙äĄI=ģ0ˆ`drĶõūã‘Ņ7ŽŸ´Ič0ƒ$ŋPÂūŋčüŒrSˇô×ŊŲ8aĶũ˙]ēO dG-RoL Ę%…ÅÁ Å-ëîgĒWâ?Wĩ#†ļĨ[˙TŸ¯ĒŨi]á„2sQSĸVŅ!Úh<¤.%_žŊ}|kŧ“ļÔ?;"§w×˙"â÷ŋŨle™F–÷ Úa;)äÍGÄ0Ÿ{Mĩ˙ŊWūˇäXĸ8ĻP3ņIîa6˙ĐéDR‹äpí0ƒCŌ´ŽNūžŸ ö>/s;ŅíWúë­0… ĐgŒŲíw÷ >˙äQ¯WrzkßĢĢh•Ŋ_âÉšĻ“vVô¸Ĩũéä‡ĒĻ…ãĢß?ūžØNˆáūlSé$˜¯éé˙øˆˆa;ė0–ĩŦ“Ūĩ­z}Ŋ¯a4îÜš§ŊHŖ…×ß$íĨÂŋJÖÖëwâÍKąļŋ[ūŋŋĸPˇÛ"Āįö•1 öõĩ÷ĄúĐëŽÕ}ž=}¯;CâŦ&˜LpĶ@’×ëũĒųxTã>2đÉ!“„ÂĶÛ žguČĀūÚČéz˙ø¯Oˆˆ0‹ƒnôééuOŊ:Ϛ åŲļ ˆ‹ ­ŠÛYÕ˙ņûé˙˙Ä!íË_˙˙Û^´GÛB [MÃW +žhŋäZĩõ_ū˙üE¨}éĨë|ĶīŲC#¯*ļÂĢũ.íë˙ZdÃ1ũ–ÄaōČŽNęŊ˙ëŊküƒžÂĸ^^ī -Ģ_3˙_Ō˙˙)ÂÄ3å¨ioˆá§ub×{D¯…ūŸŲ'ÕB{“gMlwi¯ÉGãKU˙AÚäáÆ˙ˆ´÷§kõ'˙čvGí2qІšiX¯Ėõôš_˙Ņûœ"9īŅ)ÄZŊŽí%˙˙ũŅŽđƒ>{Qa;Zm§¯˙˙ôŨžąg…4ŽU˙ öˇĩAz˙˙×M;ēv a1¨ĐjöÂéŽ˙×ô—"Į×AĄa¯øˆ´ė\;ŋõ˙ūš'q  LJ{â˜îéy˙˙Ēü"WÂpČÆx~W&HA–:¸6/˙ú˙úÚDąÖx†AĢM?nŋ×W÷÷ŅõNČKęņ˜zĒgīûë´ŋû{O &žŊ&Ōä‡ũ ~ĩ"ūÛė ˙Ÿmû߄ßÖŋūŊydGø†MĶ[íūé<“˙˙éy|&pœĶ-ëca’÷k÷û˙ĶR,9'â"ÕlSi÷Ūéõņ×ŨÚf‚œ3Kī‹OąÚkŽ—×ŋT˙ĩAé:W˙û×ī#Š&ûM< ˙č”â;lzë_˙[īæ@ŊƒAĢmnž¯˙˙ũūDvšv˙”ŊÜ4é÷Ĩ˙¯û5ÂalSĢ™ūžŧO×ÂŅ(h“ûūÕęäO~×˙˙ë_ am4ÅZ¯¯õ˙ũÚĨē˙`Á* w˙ũzö\4ĶNŊũ¯˙÷\uėˇ˙ØŦDX\4ÖÕëģũ÷`ƒLUúû˙úīęŋs)ύGī˙ũŋę„0MzjÚw™úūßŌōē@Cę‘%ÂŧWéÛi*ũ~vļØX†\liļŸŽ¯ō3÷øP@Í qZ{b¯]AŠB"(žÃIŅßõëõ°ˆT¯[")/ˆe8M5k¯ôĄ?>ÅißĻ˙¯×PAž#M â" .ībųŪ‰ƒ ¯û˙ߓ^Jîši ĖÄ(=NāŒÍÔEĒŊ=S5§imoēsū}i?×y'ßσ>D†öNBĘOū"/OíĢiú¯­oDq{L ĶĄ›–´Íļ(DZĖ•„ä÷IØ8C NJ†Ō[īŽņĨīĢĻ„:ǐ,¤&„2'š ¸Qj˜ØøŋīÕ~ˆĮúvh&_„ė0„S œRéŽĶ\ûŨøäcÛDcļÂe@ÉŪ($–ņDoĶ0D!ËdËķšœ3†ßũÔ5ô‡IôĐ4AÄ`¤Ļũ&ũS@ǃŨ3Q"K^ūŪ?ĩ×"žIáa”{ /’w' „íO;6_×nõēģ Fö{ņk;=­ŽŪIöšePī˙˙Ļũ[ûüT›õMZĶ˙ĸ8ro " _÷ūē'‹|=˙ßėŠíd™ĒdXąØô)SW Ũ˜ˇÎĝ­Ŋ4Uī˙˙ZģØAϟ¯ŽÜqM"7Η¸_ąiŪÚw‚/!˙mŽžģl'vlžÉYúˇ­h&ß°@×ĶawâŦ.ˇ@Á˙¯˙~GtūÉÄ3{ē~—uuõáU—î<;´ÅGŋú]6žŋōxÚė&4Ūī’‹o"ōo[‘KĢLd€Î˙â Đk°•Ōŋčã×˙­nštđŸîU[™úZ[…"ƒ°Ō§¯¯õ˙_'&ƒ"/ö+´é=Í9ûë˙§i;é§˙ņZĻžVēŋ˙˙×ú Â"`˙ĩģ nĩM˙˙ã§Ũļæ‚äC÷â!„üT_˙˙ū˙čŽ:aŋ0~åšS [ĖĻg—ĻéÜwī˙]ér2đŌ#„(?U@šŽŨęEŗūžšÖ›tF;N@:uĻ>,Ķ[jĢi?ú˙_^Ī…33‹ÄC „› $˙z×i×ũ× gÉWøˆ´×ūžß_|i\‹ ÃĶB˜b¸wß˙ŒkčrNÛT üDĄj}ū$-=Ō˙Ņ(˙ëUĶöŪ}(ģWkšû˙Ö¯_‘^‰Eí0™ķ.V×|HDÕąI§y¯ũ7Ŋuz#ááa" öĢ™˙ÖŊ.ëN“ͧhC'W~"M]í„ŊW¯ĻŊ}Žģ°‘A0M{̝ß˙ũRžr?ņ /VÕ>˙ÛÅ_dYũAHXL&šl+k§ĸWû‘@ū¯Ô“žîķĸ;}qØŽ/˙ë[­amRĻøN!Ļ!— §ŠVÖŋū—øëãtī:ø†¸Ģ .˙Aׯ]~™ȎĶģ>DéģVÁ…ĩũ}R]¯U‘Á4FīĶŋˆ´Ã ŨÕūŊīĶO#wzb!…ąQjˇü÷Ō÷ũuôžlÜ›(ɸAąZļ—¯ĩ˙×¯"ž”YCĻŽíĩžŋ×ôĢt9Z“ūŸA•F ÁnÅ,]˙Õ˙×Mĩ&ņg'ö.˙čũr$˙¯Ūŋö˜‹M]­˙×˙ŽôĄÄ5[߯õ˙}ß˙ū §ĩiĩo˙úū2ĐwN/Ķī˙ßũÛ¯Ļw˜ˆ~˙ŌūĢÚLu]Ēūš˙Ŧ–Ÿßë•Ōu„6[ƒ(z´Úŋšü‹¯ėDNÕ÷ušĸ˙ũ}ׂ"LžĖpŸ…Åļ“au_küŽ0„CM:Úv˙đ’ņ\'gđtĮĮÚ_˙ÖŨ’ŦEĻž•°ŋækų!ßũ5TÍoič4c‹˙4˙|b-5Å*öŸé?ūIÛøD ‘ßi0š}V×^SüJ Ã_mǧ˙ŋIŊÛ°ŲįYØÃ ËŅŨÛkŪō$! b Âßbžēũ_é´đ™9V§|ÁD­~ÆŊĢ™?ŧC]5­Å§×Ģø-| gÆG*Ŧ'B"ÂiĢáŪ~_ŧD0A­ö-7ûüˆų'ĶĻ„1$_e8čD&•á¨LėLf+öčí$"-5}iûŦ.WęB/ąWh?wh&"˙˙Ĩŋ܎a2 ŗŋƒNå-†ėh2rûėA‚kßß̤߄  1| bjVé ¯~?ūĢ÷ĒäXhœS pŽ"˙Ų7äz3{zæ*ūŦ}}ēĐPAÆĒ"tî.Ėî—)Å.:éuęF;íPaÍɯķŗXDAÚmĩm<(?¯^—úĻ3ÄP ‹ Ũ†ƒ˙¯[Ž-‘úwOTø;ŋč1 'bÛInžJ5#ũŊԕĶN”AĻŊ5ŊwëôĒ/ęũt˙Ø˛NƒąWkūõëÄi:#†ˆáę DŅ;^ŊĨë_ôëRoDŸŊyņ;â$„lÚXŽūŋ~ēôŊ …3 =÷„~šąī^֟+—ŧīĖDNéö›ūģŽ‡[ žÔG¯P•Õ˙jŖž+ę´úkŠĸÅí™ūũ~ŋē#†ŽMPA¤Úä}ųŌcũ¯DŸ×%Ú {v­WëßĻ´ĩŅ+´".‚bƒŋ˙īú÷÷„ũ2n*šöÂ˙˛(ëäKņîvjwĄBkM‡ŽgoĢ˙ŌĶĶß Ļ˜­[JŸXCëęéšt"UvŸzyĸ¤¯˙ũŲ˙ÄD5īûõ˙ׄč_ûl/a9z#vūŋ_ˆeMw;J2lWvÅ4Öˇ˙"Ú]ōRÄvŊŠMÕŽ´[˙õõ‚öbi¯}Í˙CúĢ‹´×ĩzē˙ČĢŖ¨i܃ę`Xš(!`š{NÂvgoīũ´" 8j¸ĩŽÔˆ˙°@ūɃĻ6ŌmWë÷ÎĮxˆiŪín˙×$í¨a30Â^Sɔđ‡ ví[4_Ž´5LE*Ų_˙ŽÔ tđ›8ætĶmøN×% čE]ÕŦpĶΝÖũH[ lgE÷؈ƒ0[jęĄ1á2p5aė}\Œvëfa ũņrąV§eŽelDE‘Âw×¯]r,4F÷A ˙ÜD21í1„3…go´˜ˆa2w u˙÷_§uSāū׈†pļf*„Į%PˆĩÛ­}ã­_Dp͆x0C?ęĄ á´ôõôF:ëëĒë’}Ļ2ÅŊģĶ8ô˙ôßë˙Ĩ×m„Á2i>‰ôɧŋƒĩ˙××öŸdXwjB ˜~´īĩ Û›"ūë§ũIG˙Zu§dwDnŅ'„C<_Æ×iöĄībāû˙ū…ŊŊŌtîō€úõüˆôEvøAĸ ėŸíwmÚ˙ŋëõĄ{ĸWī82÷˙𴞝;%ÁĪ˙Ã(tŪŋ˙˙īõÖäW~¨[˙Ŋuĸ8vƒĐúâ"-iņkūÚ$˙ú§Žõŗ Æ\˙ß˙÷§v!‚H˛SrŪ ÂíģVĶ]'ëäH^ŊmhîœC˙ŋ­&Ģ[‘éŠ9aJ勈ĩ_vĖ˙˙‚ļŋŌzAŲŖĘî˙üuŪģL(@û+žˆ0ƒOąĻÚë˙ũ M4ˆã Áy”+zn¸Eß˙ūéäG!會´ōTøˆ´a…‹˙˙˙^G=Ȏü" MŨęĄ˙˙˙¨\“äĸ˛@K[â ąîÅ7i~hĩŋ˙¤6Žô‘ÚyØî˙×˙ú˙W¸a53v÷ÄD0ž;ĻĶo˙úéÜ&„2ĶĶm; A¯ˇ˙ŽĶą¤ëiás<ÉĮ_ÅĒ´›^˙˙¯ßŠ}„@ĶđĶLw¯™÷ZU_ŋō-Ķ}4 2‰­Ž5Ø\ĪŊäX_Ŧ‹á7i„ų\ŗ.m0šģļ×ŋīõūŽGZza‘övļü*ÆÚkûü!ö:ŽEļšä!î"$=¯Û žŋëëč^ū˜A d!z~J¤'a„ŋ_˙]i´Gmģ@ƒ!‘E°„COąNēWūŊVßéŌ~“æūŋÉÅ*§ëūĩūŋVDe‹ ¯aĨ˙ÉGŲ×~´EvÚgr _˙ĄŽôÛ´ėŅzõčwŌ$;NˌôPņ!› bĩ×˙¯Ž#M ˛ õL Íž"A÷–TÄ4ņąĢ§ōWä`JøôwÚ`Ãˆ0ƒAŽ×U˙ųU\]Dcí4Ķ>ˇ;.īø‹%wļÕ˙ū)Cĩá " ĩwlCtėĪé÷ŌøÛ‘ŽĶĶÉ3Õ~ž"û¯īō.đģԌv¤AŸ3Oũ̧kõ ¯‘"tG üƒ F„˙Úŗ xiŽõ\Ņu ū.Fz zh1 ­ØģI||ŠA -z{M'{°ž3A Úģō¸Ä-†ž/Öû}ŋzNÕüDNėwNŪĄûŊĄ˙&ũ=4¯ ÄEĻáļžō‡~—k?bCG ĶQVŧŠ:ëîŊ*ū¤Wúh2\!ō.Ô~˜ÖĮifxSņäu(­]Ųx‰ƒ ˜0”:|Ķ}īŌÚãĐ^‰;ÕP†Nø2pši5uˇ×ŨkéÄiŠļÖĖ˙¯‘<,¯ų8RnĶĩ"ņ E0ÖëGīԊáYeaĻēa…uÕũúû~ŧ(@Î3C˙–Q‰¨ĢX4Ũ÷Ąūą)öšâĄ…úīëė-ã‡öĒ…™ˆh3ÎģFBÆ,Öj+ˇÍO˙ˆĶAØĨö–ˇ×Į^5‘c%´ĶLđū$kQ\ =¤Ø[˙ kģ[W>ī’û{ĩĨÉžė'§đž"cm?É×ūW-„ęNąWߟ—˙^˙ßäWĸO’é˙ąĻ)jÕ×ôˆiØĻÂMú¯ęÛoëÆīĻ“ŋ|¯[O¡l-˙âTÅ0Á$⚟ÉE]/ū­žLzđ™Á—+;/9dZšĻ)Õ~Å'cŪôõŅq_¯˙˙˙d‰<ėiĻ.×á› Õ´“žÃ˜ŅūûŽ•­ŽŊŪf"éˆ0ƒ­ŪvHŌ‚ qŦ]ē ūŋ{ŌĮū÷ Ęf2;ŋ˙Ō„z 5ˇkõ¯í×#?˙˛ øA0B,đEņjŊĐa4˙‡Ļ˜íwŋ˙¯´ŋ°Û ō¨fĮf{¯˙˙ĩjŽ~×Q ”Zi‹Ús?˙Ž÷^N/kg§7ÉvÚÚēē%˙‘nˆ°änôō "ų°ŧ”â" <5m[˙Ļę+÷‘"ž§‚[ŋØN6×\ūŊ7j‚wđ™@`ũcü ņVÛ_Á÷ŨwnN4Ú Ė)™í[žbâÛ ˙õ÷ņ¯rOė(Lá)]IeúpÅC‡úĶZãëZai§!‹$sĨĢw '{IS˙­ę×˙ĶULĐ! Ķ5"¯°`§d†ĶVšk 0˙˙ąôˆßÄ4ö{ĒëÎÆ’ lS¯ß¤×ˆ¯‘ŋÂ`ŲÃģ øĄ &Šūšë}zũ’ĻäŨúę‡ķģ‚b!Úīëū$YŦiũ4ˇMĻh.˙ ƒU܃Õ>´IûÕú÷vHdt#֚•Æ`ĶęÃIs9~ˆŨúOčŽ>˜AŸ {ōܙ†ÜR¤˙ŋúȰEa c>žSąĶVÅjž˙_úöútá‘U|DvĒßõûũÕώu%ôЈaší5{÷ׯô´F=­=3Čņ™ˆHcūĪĶ¯épũT|Ž*2øŸ×zÄA‚~á¯M™öf´G‘púTūō8wa˜M=ū,$é;OōבÕZ~›DŖfÚ ?ړ lUúéõô>žė~“žēa!גœwN.õ8Ãũ+˙û _û¨Ļ+jŸ˙ŋ_Čâ÷Zh33#‘Š˙Ē Ú§vîē#~Ģ˙‡Vŋ}ô0ƒƒ ˜Ļ>-?¯×Ö÷ö“TÂÍ” |ûåzĢĈ0×÷ߓĒu˙ūŽ›û$ ‰ŖĄ ĶK~gá~ēŨvF>JÚh4ĖÅëĻB‚B öíŠƒļÂ˙ŋö•­ Õ:DW8ĀA§cm]=^F˙˙ˆĒXäãi„đƒĘĩũ6(DZj´íuß_c{ZûL‰ץfBm†ēūi˙˙ėzˆôŅūō LĖd§aĄB}ĩ´˙ūĸ7ųčŪŸXˆd œXĻ8í:õ˙zú Čâw]Ą0@ûX`„0M1Qzkú˙Öŋ‘„ƒDCOļ•ŨīëK{ņ×úö™ņˆˆa:ūŊ5ũ_o§ŲÚQ‡mƒXá÷KēģĨjžÉŅŊ4ĶāĶ–@$ũ=P_˙Âß ‡bŽ÷_Š'mßŨ?_ɏ^.d3†ŋîŠé×ŪąW„OÜWȝV—ų dKäßŧ˜˙žH1Ÿáŋ˙×ôB"Ēawé*.6üŒ7ĩŋ¯é˜‹đé˙ųoz;UD0°÷ĩMĻĄæē×ŌęüiGĘúnTĖFú×˙ū@ÄC ŊâīL?ūž>ÃŽ>!™›á'§´éß˙ũ؈a5W +ĢÜĪų'õŽßĶB WŋíSē÷Å ĐiŽũ+W?jũũßtĶŋ“¤Zˆ×ŗ?¯m„"ė(ĻéÂÚŽģę˙y8ˇdc;÷ņdąÃIĩ?˙ÛE”.$a¨â›[Ķ\˙ÉÅ˙ĸ žė=ÎÄËħ(ĻT˙ÄHĐv+‹]uåŪ{ū6GL2{ķąÁ„…Ļ)SĩīA„[Ú}ęöõNĶi‚ æpīĶMŠ2´Ŋ~ų" šv)6!úЎûúīM5ŋØBKīÚÜąųŽŌšˆ†N ÚkâĄ÷˙öGJŸywę[ęCMvÁíéĻVOÂŨ¨Ĩũ˙N“ž÷˙;!q3ž›ĶĶÄC&: 4˙˙Ǟq)¤Ke|CM[yĶūÄM0jžŋúÛi×a”cô#^‰í­DGķc˙ũˆĻˆôđD&ÃŊmá;'í}6ŋ¯ū´G3ã:[éāƒs˛ņ¤<'z§˙×_zvnAŠÛŧvÕˇI‘quZņ_˙ũqōOĶR4WNŌ`ƒĩHėAũ×ŋ}˙^ˇęĶČGīŪžN|M%L¤\4ÂĩƒUŌ‘G˙˙Ļ÷”ã.GFO2nŊi Đg†pR9wv3ĮÄĄ´īvū×õ†7ëâۚũüŒz§q}ޚ|D5KÚMČĀĢģ ;^÷ũi×îoüA‚}ŠÜœ˙׎ļĶîũ˙§TE)!īr H•˙|ZÚj¯˙VžEŠ'žä1#ÎÃ_×"AC‚#ņĶÕũ„ĄĶīņÖüækDc˙k[aU“ˆvU4•ŖÚĄútšęas<ß§s'>-UÚ{§¤õ˙ŋVƒLU=˙ĨøöŸOM6š>Î+é3EÄMĩëdQ˙Nˇĩ"LŒ"æN2õúnézą_ō$9+ēxˆB§Á?ĩņKi×˙˙N‰E4!œ¯”ė”´û[lũ#~Ģ­[~Ą”KKžáœéÃÜ{[ë˙MĢwĻH:ė&îÅAęyĶŌ˙ézu„ÉÂTųīЈ†“n˛G×˙×";tÂÎēôí; *zĨ%ëí´Ķ h6ĢĶž ážz{˙˙NøOL “6"TÅ]Ļ–˙˙Į!Ļ b=~„]ĻŽ˙úZšԓäqiÁP3ĩ~/Ķ˙ū˜O"ģDWzdąíe;[Gj­ßUUŌũwz´Ž­0ƒOjėC ø8Õk˙[CíÅBqąĶ%Qî˙ëä`~›Jē䡠ȑ3ĘņņۇgīöŋCK’} Â øC2#’úN/[zģūž5}ŌĶ´ ×­ É@]§Ē¯Uęũjá†xMôĶ$āŋĪØáūë×Uéh‹īˇqßOOŪ¤A˙õÆÕ­Ú ¨?-:a%[BÖĶÃģ˙ ī¯§ į9WŦđ&ŸīéĻžE ĻŌ#vá5 ™ŠC=ŪHv’|Ž€Ņˆ0ƒ ĩķ;˙õxˇo†dén"&{Ū›kītˆĄû~“é0Š Á>Ėė]'Kōė›qt"Âũ´¯äīū)r;ĩŲđžÔ â/´Å5¯ūėF‡R7ŽŠĻ ™ŠNKÕĨ]4čCŪà Ō˙˙ũ^žNņëkaS_šŨr?îŠŽ2ƒétĨĮČŖōJ„A§b­m>ũäeēų.ˆĮt|)Ą›k Z 'ũĩsO˙ôŸ’z#Ļ š_Ї|)îTÁq´¸ˇ3˙ũęžžČ`ŒUĩkĢĢč¸ũtüR[oϚšˆā%SŽēÃō ÄLRmÚÚ˙¯_žļ Ö>ĮaoÃĩ"ë_˙­Œ›ĶUOôŌõŋcOļ°üÎ˙âš'ļ Â„Öbœ*ŋōs˙OņĻčŽ!žīâC‡õ^Ü!v7Û\ҝū܈=F„0š EÃäA×°‡ûZúŠĶ§wîëė˛BÅÚ -6Õ´Ė˙˙ũĨ§’ˆ‰×h;ŠÜĪūĒņ÷m wũ5økÛÄA‚ SáB˙ß}i8‘4Ķ^æ‹÷ūøß‘Įä}|ÄCM1I˙ūü¸‰9m6Ģ„õ´˙ģū—tŸ˙éˆ0L-5[ūõ­hė‹ėUļ“ü×ũؐ]×īąM¯ėßæBfĸk¯īũ{õa4ÖĮôĄßųä˙¯Ä2đ™n/ŪÁ˙‡äŸŋâ!­Ļ-8ugíQ¯0ä ˙˙}`é&›´-?vĒúO×å”ĩOŪÚÚĻáAčĶúũ˙úp׹qžîŋ˙ÄHÍՊm&;}Ļ×˙΃#—ū͊5gaŪUQ$×ņ­úûˆh=1Wa+[VÕūŋ"ŊGtCšXBHåˇ-ˆĩĩqknĸdg“Á§ŠŠm~õŌ}N—AIjW$'°›B&bĢ˙™Á1í4Å0×õ¯˙\z ø‰BNYôí8‹Ú{i ĖĒ0˜š@ĶLZ­á-%ôŋr7¨AĄ?•V@ŒCNŦ}¨ˆa5újßūGuŊ;PˆĨPžíb Šß;#Ær\E¯A ĸŗ7˙]¸Ņ'H÷„ĘļŸÕb/ĒĶÄZŌk_ŋ"õÚļö“Ķ˙Ž4…„ 5öŋę6GĶNīķąīŸ|I"¯û׎Ũ"7ĻéČ ' $ÚŊ Ž žxíäzūŋTJŨ: ~+ČąŽ"Čf¯ĶÕŗ÷}­uÅvÕ`ûę]m"(îÂk­Ũ…Kâ¤uWĒ´˙Lūō0™VJWÔūūÅ^õ¯Ŋ}HOĪ™‚ioúBÚ{;T¸0^éŪg%ūßũ7%oІ|ĖĐëĶüŽ„X"=xAĻF6¸ˆ°ļÛ NūßZūé„Gåmė~R‹×ŽĢûxdqŗ‹Ë|­ļ)™é/˙×ÛØA™ˆhĶ’8@˙×éãDąÔY8C21|JBv Û[ŧ#g˙˙dqü&ˆ'“Įü‹R˙]Ŧ'Όx†šv?ĩ~ŋĨú÷Ķ´ ų'Z%{ũ˙^žDvš‚ “Ęęą§ÄmĢāīūDûnõ%Âjš•6’_īŨ<‰+nƒD Œæ_Jü5[ÃJ˙ö˙ŌÛ_œ-=^ūėҎũ5Ģęƒ0ˆ:÷S°#<}Dzct—˙ëíu‘^‰ŨÚLã* 5üíPūá¸Mkõúí+‘]",5 ؁œfÉ%´×%8ˆa5w˙úąĄĐ˙Z`ƒĩđŌdEũÚ÷čąßũCj‰==4Ķ'íkĩOû‰ šN\Ķ˙ëã÷Đ|;ĝ&2§cŋŌŸ×ŽøģtGû “ˆC‚wíDNéÛk˙ĩUžôˆĮ}Č`´0šÚ F˜VĢĻ˙ũ˙QÃÚ}Ķ0D&õö˙l$'EßjÚK_#Ēũ] ƒÕY@°Ķ moPkģļūŋ˙ę9šŅvšdLÍ´˙~ÅaUąWūõÚģũŋa „4éļ„&øĻ×úū­iŌtÚĄ  T÷kí0Mœ%§Õû¯¤Ũ0´ÛO’ ĄÖöOūšøô´G°ƒˇéų6Q†˜Ģ×}ŋŠ˙‘bˆŨÃÉÅN¯Âbģ÷úĐ[_ÅČĮÚxiĸ†ŠrŊkíķ;Fŋŋũ7NÃÂwۃ5ëÚ_Ț¯V–=žƒšcŧDZö)]eįÚôēûi4ab=ōP1˜ĢēîŋũCu$úL„÷Ä;M[ -ģ™×ü‰á7ēMč•ģNČ ÍđĶX†Ž4Ø7u˙ ˙Ō#viíâ ÁlwVģ[Đé/ëļ„ ?ÂlCĩũ×üŠYßt´ũŧ@ĶQļĢ÷M˙õr-änŨoËéŌ_éøëTJŨUå" LvŌngš:]¯]ûC‘^ŸŨ,IđÂ{_÷ĐŌvļđˆ#72 „ĩÚv¨ßũz֞J]ēÄiŠģ× {ęŋužšfã†!§um&ĶÚ˙õßõx/­m\;vĪÉ˙˙íčŪž ­Šŧķ[˙ûëŽēŌ#m­{[KDĸō4ŸíiÚņĶ ¨¤Ŋō Nˇö+Ä^Õ°•ũūƚnž Âiũm+ū¤z˙Žųd@à …ąļ—˙ūņũ ІĩØáõ¯˙ú:Šhzˆ˛œ ƒ AÚÛŋúWj#ûMŋųš˙û ŅŊƒ âüĪ˙}ˆŖ˛†á…†MĨĶ ˙˙IŪ`WāÛ_ö¤i鸈a;÷ęõ÷Ž/äc`„4a…tŊúčA‚aZM‚IúūŠŋĶ8G†^ÔSu~ī¨ĩÅvŨ}ęûA]Ä1j5Wūƒ>‰ū)?¯# ¯ĪGŒÅŦģķ:EtĶC0š§žŊđŸp… ĘLXZģĢN&ED2=¯˙Öúi‚"lXė‹a[à y‘čMęūDRa4îÆôŸˆ˙¯øBˆŨ"8ĻU™Äl>"Õ9ŲUzū˙Ē[’Ežԓ2+dßDôgƒ ˙˙úŪ:tAÚ Đ%Ļ"´ėėū¯÷ū–úNši’<{ŗ1/;0×NŌīûũdžŌiįŸîôePfõÔ}°ŌMG}lr.8Li0¤s#Œ“ÚN/ä î“D32OūÅ_zõEU PŅŲŖvHŠ;PAŨgeĢ´ėŽ&ž–ŋQuTˆááN!<&r~î“ĒĖÂ&ĐOˆ0ŋRĩ´Ŋ˙v“L"âÖŪĩ­Ē#rëĻNu*gÄZvîœĪDo¨øän‘´â9—k˙Åí}&ŖiņÜ­uČízãN‰Ûm3e{˙ÕH´$öaIp„‚\’ —øŋ[ū…~’Õš|Y™)ØMõôēzõ‘ „đOPƒåē^ļ*.Ŋz÷Ū™ŨŨž# ˙ČŧĩĻ>Ev“¨AĻ\SČûOm>#aĻĐ_%’Ģ×uO}Ä3O;S5ũÆ?ĐŌy'Ļń ÍßūāÕĖôžĩ˙‘`‹¨†Hß˙_û[ČßŪ™ Ŋ§;¨ž-CNĶŋŊëĒz­ë3ã#’kúų§X_^0ģ Ŧ& ‰÷ūJpÉÂŊ†ą~hž˙˙ųv‹ž“[ƒuK‘äX ę.Epš§DQÚh?ûū#nÅ[„˙ũzúi‘bˆŨßndƒũíkIֆŋĄēé´Õ|úō4ũĨƒM=ļĢ˙õ˙Uíß!…Öuû•¯û÷Të¤ÔÚŲ8ah ũH!öÖÚž?O蕾Ę2Yŋ˙¯T˙čŽ>˙ĒßęÄD5¯jĐFŽŋũjíZb!„QX[_×īũęĢjDzÚč›ų‘'á„wM|˙‘Õmzē´†ƒZw?]z˙í­|31¨1iâžß¯øĒú‘b˜ÍûĩÔû˙×ëĩ¯Ļé֒^•ÃiéšĖFĒööÍ˙˙Nˆâ#ëˇh=˙ôŋZíRK¯āĐSŧm&˜eĀ]¤ékžú˙§–B…Nė_ˇ˙ė}zėWõ§Ķ3d~ą\F˜Ļ)°žhēûū1MĻŽíũu_ū˙ȝ^JÂeOÎįāÂil'oŋי B ˅ēļžßĒ_ū’„öŋČŖ×°ƒ'XAІKa.žŋÁ"īŊÛa+´ģ˙ąõũ+D¯á0Ļ}"Eög¨††* ¯˙‘m[@ÉĀL&ąL˙†—×üioŨØDh/yđ™nH1ößūšįˆˆ°šjäĮ˙Ĩŋõũ÷Dq_3C0Ž apv—ū™/Pˆa=ęšŪ–u ú"ȧ˙éäžÖhC]ú­†•ßo§Bu˙ę’ĩũz˙_é͞Ŧ˙v?Ė˙SŗRÄpĐkžŌāŋ§Éiūļ–´G žšŲĻ8a5ĒēĻ8‹Mh0–§Īö×˙á¨ũ.Ķģ/âi ÖkļXa8Y.ˆ†‚õ‡ųË˙ø˙M˛7§ÄŠvJđQ >Į‰™×AÄà Öí;ģųĸ˙ũ˙tJŨC3 fÎ^dHDAŖ˛BŽą[Q}ãbŊ§úëĒõŽÖšd;Ôx†žu=:2Ôá¤<'Û]~Ņ˙ū›îĶg Û)ë5  Íæ‰Q“ļ)Ä3bav)´õĪÉõûČąÜ*eéû ĶO6;ĶiĄí1Æ˙û˙ë\œuÁ'íėiGkŨ›ĶÜ.Ą§mĩĶ˙_úũ‘ÛDn­BÕųiäcŋÔĐ!!î5Ęú ül\5˙˙Øũ Ęĩô‡^ûa0@ĶÎæČ‚øˆv~—˙ũÉ[ėÔĘ;_ÛëÂĶO$=5Ž[ށ¯ļ˙ú­~ˇK“‡i‚!*ãŊTní4ˆŽĶL faūĮˆ‡kb“O˙_úW÷†™8cķ g˙˙É= šņļŊŌũG˙õZČļŲé…*Īķŗ7|ŽĒ˙ôŗY›_ŋ |4¯á?ޏą×Mĸ8t<šęŸëūą\ŽĄ… ˜ŸÎÕ2|›'Ã[¯ūû˙tŪ¨ŽN!ž/ō_#¯ÖŌWϘ xžz xˆ0ƒ ī×˙×wĐ´;ŧœĶŧÎI˙˙§„Úiž wÛ|C]§ŋúÖŋZ#ˇø)Á‘Û[Ģ­ō:žˇ"ƒ"CM8yđ‰ég`uЋ¯ŋu[Dq˙ūšū¨Y™Ũ­˙ũ˙ĶČŖ´Gnô?ÚAņļ•m=Ėę˙äW[KTíč”[ņ—#ēßĢž¸ë´4š;Ķ ›Žą§ŋÔCOÛļŋĐũuuíiůģMÚ߂4ëû§Öí;šŲh_ÄąwģJ×ū—Ã_ét‘CO"VW[A­4áۙĘ˙ëOMčŠí¤ëá’x˙a>ÅEé~ū5ūėŽdpíUŽÂn$ž×ÚÚÃūŋ¯×ûø‘†›Ŋë4Z˙˙XVEŽr6AAū$$ ílUÖ˙ō {¯WēzTāsŠy’Ŗâ!§Šĩm?˙×ĐëĶ´ų â"͆˜ĶĩũŽ—øëĢM2 ĪĶâÉZ¤Ōm]?˙ūˇVŸ´ˆ†šÛI˙éjDŠÚh4Íūâ5à Úļg˙˙ûw[Wyv ÕąW͚z˙"⯎FûL'§/ü*bŖ˙úųūŌzę É;]­¯_T?üS"C‘ģ‘ģÂyuČëë%Za;…×[úcú‘aŊ„ C ēl+_˙ôëi;ú !Hę‚üŽ r2ģ}ī­|OXL0ƒÅGi^­š&ŊŽŪĐŌų!߄Aš™ŒËKéô,+ĩO^ūŋęDwb4b­|'˙Ũ?×OÚi¨A‘€‡¤ūŠá„×jÚ{™˙˙]:#‡A„´“mdW_īõOĮ˛ ôÕSB  ûąŸcí?Ģë^0A…ąN˙ꥭúyzhŒzØA™ä 9§ū”D;Ļ /"ē˙ū9ØM5_kú˛0ãũhj“íĻ3fAš ŸÜ5bėzŸ7ūŋ‚Ķ´œĸīûéuŪ“ČĮČŖÖí4ų öi†…ĄWiÖŋ˙ŦŒTāk˙°ũ~ŋĄüVȃū>"&Ōą &ŋ¯˙äQÕâ-mi§ūgæ‹Dn˙b?Ô'ßuj׈™Ģ}o˙„>!Ļ­âŽží>šūE ˆEīöLR8ĸPęĶåå5M\¯ûX†0ŠíXa[UíWjēØßú~E‰ā„ ßËhčžëßãb" EE6ˇûT­ĶëZß öúŅâŲUbk¸w؟™ * 1KögŨëúŋö‡Ũâ ezGŠ„0OÚĢ…ha m\Īí=k_˙ūBû30ŠŲHXˆe8Mwj2EĄ4Ū…ĩÖ?ō1ũWõ×a;!ãϟ”í: 'ȆHr7MėSa[[˙§˙ëíČįdQßdqžˇ\ü"-5ˆŒ&šcc´•>ŋ˙ų)?]tČąDŸƒ5ŠGn˜†"a<~ļkú˙˙éWÛņgÅ$īe*oƘƒN×ÜtĒëŨũß~CÃđƒA^iâ&ƒžū¯ķß˙×ųôé„â.Íwôš´,M?Ûv­…˙û\U?ύA‚icŌš*"ĸ *é§Bĩ˙]ŊHžE|œl&Č,ģ33§kĻ+ú}øO´Ē.öͰƒ3?)ŪZm”?ĶHŠūũ?°Aú‘ŽČNÅ*jŸtūß] ļ“§D åQŨ1I××_˙÷m-÷›úûT""âĩ˙˙ęš(U$;°ƒôđĶ_÷¯_ëĮ"¸H‹̈2Aä]ŊņÅĻ­°ÚŪĢ˙ڑ=; ˙q -¯ũ˙˙ZŲKaĶadXū!šõ‡˙÷÷đŸ‘aŠÍÖ!…Ú{iŲû˙úÖŊŦ&DČ8_;).˜ˆ°é_˙ūļÖ¤w“Œ< gTī÷Ē˙ë!_õVƒ¸d§ŠŲwō¸åˆjží+˙õv:ũũ2pŠ=4ôđaouūõûR#õ°ƒLœ~ŋēĢm$úū*—Ž*B;đ™ B!3zB-6Å]ßũT‹Ēū›á< ĪäsŪīãėW˙^ŋí7ĸ7Ļa$đQ ĄËĩu˙˙×ÕĢMĶ‹4jŸļv9+ĩv’ŋJŋŨ}h–T)/úB"HtņĻģf_˙Čŗ"Åtž™Pt=}4„0šžî’Ņ+ūũíkĸ,4Â"áøž'ĪÄLį<-š§˙__ôˆáá İ—ĩŒ˙žE ÛZ˙öëØëŽJ7iÃ.ŌūÃU°ŋū•SĄé;ĒiĒĪ ˆOû”Š&ļ*˙÷˙ô-'Ĩ[âØFDŅí’ÎÅ[jŋüˆ˙îEsŪGíB8gŅđB 0Ą­§ø#įÕU­wVˇąvļ=`Ė˙ë¯ëĄŌ×Ũ=ŗŠЎ÷ų!pŽØ˙L7úãí=ĶՈ5M_„Ž˙Â×úyũ­M2[}˙ė­Ė%í4ûkôFūžúzÄX_Û[3×äz˙Õ¨¯a"+ŋŨ0A›Í˜A§!åĻžcâūũtī#Ķąkō,E§~îŨë˙äū´L~¯~žųA—iũŠŋ˙Ž=ęÄC ˙l/¯}~ßņ{ī†ĩ§īäåî@É8AÄD0šõßë÷cŋs;~ŋú_Ž7ēēūd1õįīĄaA¤œ[gî÷ގ í*}˙ūŨ}m¯ëģ_Âah*īĻĩŽõŗķ˙ųą¸ˆ°Ŋ6°z^īë"ā\Wšou\”#„Đö1Ķģ +ޞ+¯é:ŨŠÛU[3Á˙ĐīØDpG˙ôjžK—ųXƒ ´Å1MĻú˙•Z…ĻšØĢMÂØ}_ëĶũ/ęōVւt¯đ˜jHŦ Ácϝ_:M_i[úžûn×˙ęבÔĐ,ƒĒzĮ '˙׹aĢc°•¯™ËZ“Žŋ˙\+í8d‚ņÔC´ë߈’i¨ØĶ°ģōî#ôŋ×ZDž„ ŋĮĢģ÷ Ģļ)uWkß˙xj>Ũß „‘VҐí1~ŧČ#ņ&;ĩuÚR1ūŋ˙ŠŽDz#„ō :b›ˆ0ƒ]§¸{[­­:ßũë_^´ƒhŒw…8zet˜ƒ ęüDAœ5lWW˙úí×M֐u ™˜ĒV›ˆˆ4ž;TĶ÷kũđÂëēŊpƒ†xĖIãpô„žëkž¯NgĸWÛÆĩužH}úČå÷!‚Ų\ˆWôØiZß˙˙´ĄŨÄ2q§Đę8L ÁDA„?ŠpēčŅôūĩIúxX ėĐūŦ'“H~c‹MA˙˙÷x{˛=5újfazâĶM§{fO˙ü|'DpŨ2 R#ĶÂh‚ō üŽ_ &;]˙õų)tĄ|ÎևĶȝôÉÃČôvŖļ ƒž)ĩŋ[ŽŊŋëjIéÃ!āĄ…õĄ~čZN0-á ÆˇĶũ˙U˙ēØB‡* ˙’Ú¨A§|H ÃVŦ4žõīõkŽIí…*ČīG§ũ{ȏWAšŸņ .ØÛ Ęū=UȃÔenŋû:#‡Ē iüJ&˜LRŋĻpw˙v´ōQM]‘zö }BĄQ]ˆ†šMĩė?ūÛi=ĻSŒā˝˙ũ/Ĩü“Õp’ |C ãTõ÷߯äŪ‰ŋˆič/ũũôFôé0P@ū Ķw &ûkęûĢ÷“‚2ÔØ=sEkíĨņõŌjg˙ˆ}ІšævÃ×˙[iÛÂÂvļéō8üĶJŌ%uPˆ˜bf•ŽMËɧĶļ×ŗ…#ûw"Ŋ¤ 9€OOžÂõũzõęÜ•ī ‚hTWÖ"% ­m+Ū˙ŋOHá;<]­X¯_­W˙ĩy'öh2ä{AņÖĮŸūˇ÷Ĩ~ķšĩ¤âõKøä ëK¯Ū“Ô" y™Ûˆ|C0¸Ļ˙õ~žõL†ĶĄQ ĩŋŅjüú"ŽãĩB Œ3Ž â T_ēĸ7ˇ[Z…ĸNû3 t\“pījēúU^ėmÖí^ƒA„DĄ—1â ÕŨũo˙­HéL ‘ŅnŸj¸6>ë˙ېÚŨ4ĶÎ>.ģkāŸ_˙]­3@™ (†M<;‹\ÎŋUi‘!莧i)!Âá§ØģÕ˙ä]}1ôˆĮi„ėĖxˆ‹ļÅļ´ū´ĩO"ũ䞉?lĐ%Æu’Wb.ņw˙֗ũ:#Šz†˜m…ģ‘äĸûÖÔiūö ™„3LÔBģīúūšŌŅ)%æ¤Č.8lT¤úõ"ˆöˇW"=U8˛@§OúbėR­í¤ĢņĶ×H“°ƒMÍ ­Ōĩ÷īú§Ķ Ļ30‡Á Ë÷ŸŨŽûÍ?_׍÷Oņà â›[_˙K÷Ņ„ˆī#†Úh8ˆ4ûē Møm…ArQ˙ix¤Gœ.-4ÅÅ´æzČĩ6úęŊ/TÖĖÅ3"÷ŨNč…ũÛ_¯×ēvĸ‘â 'n´Ķëw˙ôžäGČ⎊Ąe8Í˙Â"ôÅAŨëĸ7õũ´×ˆ5íĒ˙NŨ/ûI;ZZ";dw§aŸ˙i… būˇ‘ëÕđ͍ƒ[ģ_'@nS˙ŋkēŽDâ+ÚO_ŽøƒWû“`Ę(i­ģ­ĩPĐPâąõéø[Ō%mĢŋᅏļŸųĸöûÅŦ5ņIØ[{{ú˙ÔVĢ…&˙•Õū>-iÅÚniÚ0úŦ0’Á?ąPÕ?Õūēõ¸_"ģåsPpLŲ~v I|ą5Ûkjęų7ĐˆÂwb˜Ĩî×ō.ŋ녭}4îAétvÂēڇץa5ߤæs˙×õûuˇģÎ==Nũ4Ä&*Ģ~”h"@ēk Bvļ—ģ˙{˙öūô8ūŌ_ &ļ+Ĩ+û%GК¸M7l0W]lũ˙¯ų÷¨AûˆiéĩÕ6b!„ÕąQKļšûõũzô˙"ÛÜ&B §tÜīáZ 1Vž}Ž"í5­…mUW×˙ûõúaN˜aė†(0BCm'é•7x`ƒ mŠcŋÛ­~ޟ÷‘Å5F2 üDĄPa0Âëîˆß˙_ļ¸Këk?÷ŪĩĶ<}0õ 1°Ķĩŗũ_˙ūŠx™ÍĨũ:#…zyYOzû˜âŨ:˙˙ØöūAË)Šõ˙×NīxA–ŸĻw;¨0Nė4­ou˙i"œ  zyØī˙ÛZ_}Sƒš3ßTlA›ąÅß˙¸}ŋÂÚO˙ã÷ÖH~¨CŋjžĐˆvļmŌūWžĶΓ&ׯû]_$üø/ ŋļ–¯ƒÕüˆ=>Ķ8iŽŸ˙ZõąņēŨ™Q-‡;\C#{[úŌŋÂmÃũ=ÎŌŽ˙˙˙ųž§Å„v~š;ëû˙ŗ0sâ§AžÚíëō#„ũÕČ`—å;â" ~Ą-?ęŖŨ„á0ƒŗ†!ND˜ũX˙uõއDp¤G´Ŧ3äNiî™ÚŖâ[Ļ˙÷O÷ĶNC´ėÔOÛj×ĸ(ũēúޤŸi„üė 'ÄtÂVé×ÖģX fd\•{š{Ķ~֟ūēô5ĶLđČī| Ķ÷pŊsųëõ’u$úĶBoˆ†ē\'¯÷÷_û§ĄgÅ5Z×÷5¨[ %IúÁúL*ētF;˛ ŗ”/ˆiíŽ5]?k_ČļõíN!Đk~؋QK¯˙ūßč&ŪІ­x;l]Ļ˙û˙"đƒ0Ļb’<âUū˙ūĮé6ȃž&xî!û[˙ēŽ)§T Á^ɋkíŅøMo3ŋÛZ˙„ũ„™ŋė[i}~ūũHƒ¤EvˆŽÕ8‡‹ļ¤ũÅ&ģíâ‚×õģ„g?+ŦŖČ2uĒ_§˙ÂũÅ;Å ŨlSųn¨mâßm¯õKëČâ‰;žĐ~"KĀĶWzüĪũŋBâŌtJŨØLĖEŋĻŌDīb­nÖJ7˙û¤íNĸ ÂÕûLáūŊ+ȏģL¨"vmĻšŲ‡ėüN1HMJš[øIõõ÷í]š âīîG¯WęŋĢŠ7¨ ÂėŲ^ŊĶSŨƒ V Wŋz˙Ō÷ÚÂ4¸zŊ?‘C -ziäGē īģĸq™ŗyú˙ØN…ūáß˙˙÷ō)téáFßj*˙Dīõ#˙õōO_× „   ‰ãß[3ÚāØļ ˙]úkDWzâ ŖÚ×Ŋ¯˙˙˙Ãzß Å„B 3ÅĘųzį~B ÂŋŊ$˙˙˙¯YDMÚ­ū˙˙õür+ēëNīĐ>WC3úėwÕ´ĩũ˙¯CŅčãĩŗķš/ũ}ũkŪš÷N˙ Â\É)¯MĶNĮú˙ū˙^p m-ēéˇõũīūˇ ôF;õéēgÂŒģč5ȰSÄA‚h4ļŋ×úūÔ5ÄDWpÕĩÕŋuŋnĢúXäWēŧŠöôFīĐhC./8‹ ôí_˙ũsĩTÄ*ļ*)´õ˙ë‘,/˙JĢŽŊúėRąfoMíÄZû´ĩūGWÁi#°=„v6VŊ.˙˙¯Hˆ;´Cœ?ÂBū߯˙øa4" Âv+ķĮųČ˙~ĢŽŋûU}éĻf‰ŖØÄ5ąQi¯˙‘ŒDMPiĨģNûL?ūŧOÁiGdpīė iæBíĄž˙ûm1a?ëk{™˙˙˙%§ū“īģ";ũ31 á `tÛ?Ģū" UßpÖÂû˙™¯˙VüŠŸ˙Wŋ„A߈˛1îŸa?_ßĻ)V ot˙×ß×K]?°4ĶÜņˆėRvžvĻM é¯Ķ†¯§Ÿ˙÷īČõ˙ūō7iÜƒČ aŦ>ëĩn"&†ģöÕ´—íˇųĸOūŊë^N<3AÕī§ÄX[>!„ϟØí=ĩ톞mûM:úū?Ŧ Ķč&Å80ŸÎúĄ ŖĻĩûđî¯ļĒ؟˙˙đdyŽĘ§é3ˇ ¤""&šÚUĻ5ėR$īM×ĩã¤DvˆŨ‚  SCđŌĻ2(ÛB"!„vĢîļà úũ_Nēaˆ/áâfÕáŸ#Cņ3oà ļ=˙DuvžäĄ§yÂīģTÆø°škĩžūģũ 'DQßr„CÖHMmD Žyģ\D5÷iiû˙ëÖß ķ†šZšwĒÉÂø†Ÿ?ŧŅ#įú­;‘^ÂīN÷TΜ‹Œ0’ž—j´×´Ķü‹‹j:zuīČ7ĒŨ?ú`ƒ(_ã_jëoũ?õ$īķƒ[^ŋ㐃ĶA…O+Ėcá6ŊŠĩũôĢätûölČBĶûé~›‘ŊVÉËOÉ'iŽ dĒũ?đŧ h5´Ķkũ­m]Ž;^ĸ!ĻęŲû˙ã÷đŸ{xûŋĮ#žDFŸƒ§Ú˙˙žú#‡Ü† 6d"ũē×Wa' œ!ÚÚS˛Bö"×m‚ļ~˙×÷ĒmǞ@éÉSMëëäq°a:LÔ 'â¯lũ˙ëô—U`ƒ 4ˇęŒ˙‘ Jī ܖ֩‘3ø‹AĻÂVŋč”zė/túbGÚöēƒü!‘1O"ÛDAڒä`Čb.ú|4 Âb˜īú˙bŋŠzbƒ<29]a×áúŨuÚa3ā–ģ 4ŠÁĒû×ŋĐyt!Ļv{´í'^ŋî‡#Ϛ{՝Ē5÷męŋũZĻßf‚Ļ;ņŪá_˙íkģŧ¨%üėÕ„ČŗâFMoÅ˙_õĮۃ°ÂjšĶ´ėÎ~ŋö9 Ŋđ@īŨpŸ4L+´×ū˙öE†Â “ƒ—$%Aû &ÂZ˙ūÖ×M&™"ũŋÄCNšpmkū—ú"ģYĀ– ąVˇß_"éõ‘*O2\ŧ—uŋĘäˆZc÷ĒūEđēúuAŲÂh4ÆÅīékėp‡’ļÕĻsęOéĻx‹´ôĶŊØao¯˙îzi°ˇ{O˙ëąüŽõõĸ7ĒöĶЃ'ö˜ƒ*–˜¨4õĩ˙äe˜LRqr+˙˙õ¯×Ũéäcš7ų_ۃOĶ jÖ×ßúĄÂģĒëõë˙z˙K^Ũ}<“ŪÂŲ°Få9ˆ0Píˆp}ÖĸWZv Âwv×˙õũpÂ˙и§×ŋéöp!×ņÚŨ[_MD^ģKWëŅūŧk×˙ūģ#‡'v´ BtGNO×lUë†JĶšvˇô˙˙ûÕūļ:ŪOiĄ!pžãĩ%8e SKøˆ´^Į]˙_„ëũzâĢM4!™šU”™V""ÂÕÎËî!„ûm߄ī˙÷äz?ú˙ō/‘_ēgƒŌЧx0šđAˆˆh>ÅÁ÷æzūģ˙×öúŽI÷hV™e„„M?ËÄīú~ÚŪžæi˙ų˙ũk‘\„öN3hZÕBlP•Ö_ˆ† NÖŠÚĢkޚO×Ō˙oö.˜Mí„!‹Éõi?ͧėwkkaß§}ôŋ˙]HƒÔ”Ņuø0ŋ 'i…ėlU¯Ŋbí<"ãԋ€Ēŋ§P™˜…VŨġ244÷29ˆˆ5NÛQK¯l/ØĄ_úäi„Bn?öŲŪXLD4Đjš\Õ4˙ûû¯ũ{N˜Lá?˙M92k’¨D0‰ÄC í;†ŋš$G˙]´H~“‹ëî¯  e }#Ä2Nš~*BC°ŋ˙ũ{ĸOė ūžŽŦ azŪëÄD$š{mj˙ũū+wīäZ}iĒß&Oˆš ­°œw÷ņ×čŒp˙6ūĩŠv›ō Č~ã\Sz˙×פüwûNˆŽūÍägÄCVēū—mũö×˙×{Õψ/˛÷Đ|Mw­Ú[ū‡ĩ߯ZŠ]iĻL~éņ œ'î×öíüZôõ˙ĻŊ˛CK˙ˆ‹Mz~ŋã_Kīü‹y!Ūa š SõÄM|T]˙‘|&…îGä\ ˙Ųzz`įĩ߈†Ēí0čŧëB!…˙ô?['ļ)=xɛ\G_Ŋ|VĶÕz˙đˆƒŨ=4”dŪÅ_¯qÃ÷˙뎑~Ôƒ(/¯ÆÆæuÛû?¯Û ŸwP˜AūGđĶM[ N?ÛĒ¯ĶŽūˆŪšr ų6:q(a§°¸†šO°ŋčŽ+ÕzúO#vž8<ûi Õģ–sĻ[÷_ČÆ:kũ×Dn“x‡ãĐk „¸5[_üKŽ?žĐ† ]ņ˙˙|‰žB"-w SrtŊuéuėˆ?“u’iéī°T˙ū›ū™šûTėĪžūE×_Uņ é­ŠDcŨ?K÷÷˙ˆˆi¤›a„–Õũ?ëø†šļ5‹ĩsE.=ōÛM4×ÚØMC˙˙ÂvØˇ u˙_wc†Ŋ¯üĻĖ4ÔVŋ3 &“ĶOĪž"H~ǟūíx†k˙ˆƒ Ϛâ"×ų_— õ÷˙ĒĒŠØXũũoīíČ+ë¯ÉŲ4ŊĸØ>dmtL}•eŌaévff`ö–ü[„ІtxŽY‰ūGŗ@wũš7éđŗ°Ũ"é×ģiæÆk' ŸIų;ū˛,dŸĻlĐgˆ†—M6˛¨ú ũŽē÷´ėĖZ ĪķNŸĻ˙éépŪĒ™1”ƒôČŲuũkcūN/d ŠŊ.ˇûûÖžéŊGĸq Ũč”ĶßīđˇōO]jëũw|”×˙õTÕ'õŨ~9(ĩČ>ÍtÖénūá˙úņOŌM× Đ'bĶ˙˙ŋ_’ÛŪõVšJ?Ņ㘸5ĒÄ?¯iÕÖö´%ūUƒ’z|CA­×Nũ{˙‘bˆŪš ?P@ÍÆŌz|DÍvœ^čØ÷˙¯l'Ųą’ĒhCø†ˇm:ˇÁ˙ĒĶY;oX@ĖŪd–z%í=#ĩ‹–ũˇMÕŦä¯üjõ¸L&N."Vމ[ī Aņká¯aß˙ęéĢDcģ=0ƒëVîŗdx´Kk^[Š7Ļ4Ķ˙ū—ëA6éå9~¯[#‹ZhC!Ŋ>#UØ"‡õ˙#IũŌ˙y“Ũ ŗ]ūžū“`“Ęŋ:ŽØŠm}/îŋŪH„ 4š˙ēé:´@ΗD͝Í|D4Å'_úŋOápeĖęk$+˙×âĸ1Ũ˜i•kA&  Ž÷˙ínģņ gÁ¯˙ū¤X ž¯D÷ßÂīÜũĶũR#‡ 'vQeE…Ũo_Õ{n¸Nʂ˙ĐŋiÚúë˙#žŲčÜX jžšm˙˙ZWÚHīOņkØÛū¯_Ž›„Ū™&wzŽŋũ˙ﴐm¤Č6FŋĐaVĶi_ú˙Zė‚8I‚ 5ôiļ—˙¯Ķua^bÉÍsĩ̈ˆ†˜Ĩ]Í=ôę܎‰zi§üũ˙ëōO´Â =>M]§kî"-…Ũ´›Ũ—7iØ­;ŋ}Žú[pƒŗ@…ŠZ|Zģˇ ŋ]ũqĸVëˆd‚Ō}ßūŋėˆíŅ'xL dã4^Ÿ,Ą6ŊŠ[N˙˙ô›k°ƒĶđí¯ãĻé Ũ&˜A„F‚dŋåqxD4ĶW¯˙īô ˆ#ų6„×§¯OõĶČéڒvĢ„ ø.t{ü&Sâ!­ÖÛ3Z˙ß"ÆĶ Ÿhb"Vļ˛+˙ū’õy8ÉŽÛ Ų L_Ø dØb =îŸßíūõhúĻ Y¨¯ÛĒiũkû¤4õĸ7zyQk°ŋˆĩ§an/˙­ÖßMˆfƒG XßēŅ˙_ãēĐMÚt„ō ˛V?ĪÄØ)nĮ˙č÷ũk{Đ3æ" aVëĶ˙ūÔoō#ũ;3# ¤ō÷tÄZ C 6’é‡˙ũęN8M3„hB!Ϛm$ÕußęßIļžIúxD1„AčLąũÔC )Žāíú˙J×ŲtFīT Fĸ­´˙ūGĢŋū¯DĄę°Ķ8œ¯ū4Ww˙ü‹‰Ōu‘ĶMģiˆk‹Ŋz÷˙­ĩŌwTĶĶ›"s'g÷„ÖÔSiw­ lu¤ūˆĮ°Ÿē˙§nŋãû‘fFų'ŋĻŠ„bĨ ō4ũŠ%„Ö—īĐ_ũá8SØTÛû4AØu˙õęĄ|‹Úpƒ°ƒ‡NG <ÉkņĜli˙ĩúßÃÄ5v•¸MC@Û×ŌëũŊ­åžIŨrOĐxO„AæKÍ?ˆa[j林˙Æ5ąKiCĶ~˙_ëĻ>øU]: ŊtúÂrķ!F˜k×mZ’˙ôÂjØūũëŅ˙˙ë×û‘aĸpöôá騏vØ]˙ä(˜NņV’úûöũĒĢé1úíjė/˙yąîÕqũûúˇ$´}ia„ģĶ˙Š]zũø/ČļŨīÍÚiĻ­?˙u(i6)5‹]/DŖ^’˙¯MōĮöŋ‘ÃôņÂØĩ^ŋą ĻžĶJŋŌ_úÕiīŊ>á2 Z´ö×Â65 5ÅÚ­-~˛O˙ë˙÷ũü”0ƒ'ĸ莅ôė%j›ØĶNÅ\; Ūš‰/˙ŋ×˙˙Ģσƒņkb¤dv ¸ Ü1LvĶB Č% Ōh6/Ŋ$˙_˙×˙ĨúZ#xX†NÎJšb"ívĨr†W[B,*‡jŸ§k×ŊrCũ˙ZMĸVígŧCÛ˜ˆŊziGÚŪ}_Ĩû_˙Ú¯mâĖÉ5ą ˛Ę™áϟūÛ­BĨūĩ¯ū=%ČáÚwx”=BjuBÂi§|1K§an/˙ßúŋtČã}ĻPˆéÆžBŧDD; šīb–ũúõū+õȰD{ÖIíVŪKâ !ÖÕū*;˙¯ũÚۜ&N!!å  Îbũâ".iũ6š¯˙ũWĩ 0ƒ„Ų+hA›!v+dĄzxĢÛ3˙ëëūG 4ČA÷ĖΧôô˜NÕŗ=˙ũũÕQęgÅ#šŽ™Â<ĩ^F`&Ŗl.ŋ˙˙ÅÕÉÅ8ƒ$ÉkoTĖË&ęB˙VȰØĻÕë˙_Ž;{ÂéȰEpĶ4Íã_`š†ļĢ˙ŌÆˆĮØRLßǎw ’\Č5ÔC Šbĩ˙ÕkĻ‘ ’?ũHtÔā`†=0™1ö!ϝĩŋôGĸŊZ䎘LЌ6ĒŋĢtG†=2Õ?ƒÖžēžō:Ŧtęé Đ‘G"ĐŊÖŋöŸK{]4üšhMm§ģ˙ž¯^´G "7ÅĸÂl€ŋ˙éų ;O"ŖÕ->" ÕiÚwäęŨ{úz ˇΗם¯°žIøAĻNWNŸi¯ƒaļ á+ū´ŧŠûLøŋũ~×WúnÁoÄ~Ž×3°tF˙^ž¯dXîƒ4Ķ+Š/ĩ˙Į÷]tÔĐJ߉¤ûj›Ķ˙í{U˛8";ĶL Ę Ž! §ëëõąōO…xA¯ņšŠĩú¯ĮöŊ­äâša3#viû˙˙üW´™›˙âAĻ;_õ^ŠõäßĻ„2r_Ķė-¯ūų!õ#COø†Ē!Ú}˙˙ũęî˙Åū˙¯|zV´˙ˆ0{˙¯˙Ž)Ņd0ęØĻĶļÍ^ĢĄĸ-úá<øS@seúQk];÷˙Ū¸ûJŨ>ų—ãŊ?úŨë]{¯Ļ„2“2Xō5y4¨‹žļˇî•aúz}šōoáæ‚îÕ\6ÔķÖų]ˇŨŒ$ėdFŸÔėm‰÷NÅCK˙||ާëÕî÷„âĶģz˙VG¯âžŊŅŪR0BˆųÅÖIÂ1ƒQJÚWØû˙CävôĶĄiĻŽŌ_ú×úŽŊ‘aĻá2pCÂ!d‚û}ĐâQ[Šĩáŋ˙kWŅŋ li̚oôŊļĩÅԎ2vôÂh4Âl“į%ī§ļ&´ė%í|˙īköŪ„ęˆëkģ_ôFũŊ[ÖŠÕëUl-›;°ƒ^™ ÕÄCOqVæyČ˙˙Ŋ ˜tЋ°6×[3ŽŸØ¯¯ÖäRä‡čŒwĸ1ßöŋ ø{ĸTBM“m;~žļ˙ņpa5ąL5m}o…ũuZ$á-ȝIú…Ũv“M|DœŽÂIÖ¯û˙ô"áĻ-°—ičģ´üŽŋ÷ąĢQĩuēŧōcÚí"1ī ĐŧZca…ēÖđoū°a4ņ§‡Â.˙õŋĢīuU˙é߄™ŧ˛†V­Ö§#Å˙#d´" ôk˙ũuJžēûĨ˙ˇ÷`ŒLN"P8ĻÂKĻú×Ѓ Ûĩ{íÍ?¯ûŠ 8":ô…ū°ĮũvF\$î,ĀēmĨcQũŌßæJЈ˛ ž* ÖÂũõŦr=?믭-ˇÅ™™į؄ Âî*˙ĖôŲŦMĀđÁ4ņ]ŽĢú#}}m}/ūúJöĶO^F.ˇí%uLb%AtėRwļ—]~ŋ˙˙vžķ0—áPƒ) ;_: ĐkũoŌs÷˙č›˙ûZō:Á˙§gžˆ†Ąl~L䅂a?ąIÄ:ĩÕĪĪú_ū—îļŋĻĄ3„n;0šÔC=…ģAĘCĶO˙éƒ Û[J˙xûŽEļTôōãWkÚ´Ģę˙tī$úÂvh%í?à ,-īŪĢßūŽG ´û´úĻ-5ų(ׯ˙ņM:ziæáûûb„ZīûŽŊ/uäXú•ŋ/éĩŊúÚ__üŽô¸†ŋ †ƒ7&ĸ›I{3O˙\uĸ1û‚iō1˛ėģ ûí?¤Føë˙Žļ‘ēŗ@¤s;?ųĸDv*Ķtë˙˙kÚMoÄDOĩ­×_ũúũ7Úa ("í=Ĩí„Ækļ×˙ūŋéģîC –ÄGÖáĢikô˙Ŋ$íiœ„>Flܘū“„^ÆĶu˙"éãôoPÉÄZī‡ Rŋûü¤DŠvP„8ˇ˙‘…Ļŋ˙¯úí…č=CĩģŊk˙ũõĸ+õŊ4Î˙ІMĨ}˙˙žÂ‘a="R˜. Û_T\zõúãdX"žûOLđ…G×Ŋėv)},ĪõõūŸ ˆ‹0â“íC˙˙ũW$÷ĩė Âa2âŸgŲˇäÎÂ;45VĩOtũ˙Ķĸ(ėR˂7mi­öŋ˙¯Ūģ"žIđ4âĐhY ͯeÅn…\U¯ī˙ūž"íwè;s;úĒv>´7¤GXa~ÂxŒ>ßĻ_˙˙ņŌ“ī[Ø[ëŽE˙×U"ūä‡Ûëíb ~KÁŖ´ã˜¤îĶ_ūŊŠâ"Ķ Õĩõī¯ßéļEr+û_"žė!Ÿ°™)1S°# wi˙ū4CM;ï˙Âëˇüu[˛8¯ŪMú‚~ NßtÕ×ũMÕt"Ķ cƒüûūEũõŋŋōNŊ{ēļf†ßĪ: '‹n—÷°ĸ M^›kö—ûũuú^×ũdqDŖĻö !dn¤ ûJ˙ØĄi…Iö’ë_÷ō=}˙­m'ĶLųíj"" 1\;ķDЃ׹Úú¯ĸßú˙ŋĨ˙¯wDp͐ŠŠŌpÕ]0Á M;K|_ę ~ˆßõĨßũôš'ØD1Š2÷pÂkû ęÄDCOŨǝߙõ˙üWõõúë¸`ƒ!‚+™‹Zlh1i鋾Á̝¯˙˙_¯Ũų„\T&ĨAÖœWvą~ŸõūJũ~ĩjÖȏ°‘fwb&˜k*Œ2nÍđĶM:lwŪļŠu]}ŋō&é´G&‚ã2œA™qAˆˆˆšV×kwvŸģŋëđŋZÚ%w˛€Dņjņ 'īUˆ?ņkßŋ^Üi{aN ‡Ģ†ŧ˛‰ÁĒĒzŋíĒzú#˙îúæafžv”cNLˆˆ‹4ßiŪöÕzw˙_dqDoĐa˛–ÖÚpˆŽ"Õl]šœ—ū–ūÚNÚa<œ“ė˛[%Đáō¸<߆ŋČĄū–ŸDqŧ dãü…D™rS6ŅD‘įˆˆul% ?ú˙×éä‡é Ķû´, ČåĶÂ~Ŧ'b˜ģKW×ßõéØI§y‹īB R…¤įz˛`z\DC_õf{ũ~ûūˆâˇoČAÛ ãė Á̧q\ˇŨ Ŋ×˙˙§ ÷$ūĘöƒģļšžŌ˙â ģUØW]wúô5ë2]îv*:šō#Ķ´',5šŨŽ#U4˙ú×ãaiĸÂaKOņéŅŪđ@Ō÷Á…áPiUĩ÷äXhÜC$Ŋu×^ꞛ^>GRa=Ú˙É?‘_N“Ø@Ī‚>˙ūģČļô×˙#*ĒíûĨđ…ŋí];Î’§˙ûKWČĮy0)>Ÿ}qo¸ģĪß˙ņr+‘­Ļ™Cô˙ū‡wĐđƒƒģúųØi÷VÖūž´Š§’wę1˙ë˙¯øM 3Ÿëڈƒ>Įm™čÖ˙ęˇÚđƒ~vŦîĩ˙¯^Ü Â ņœyYy_Cīˆd‡ípvš‡ūE˙Čŗ“ UŨíīú­]ŌĻ„5O24øâ"ĶnØJßúũŽĄH⠈S‘Tå# 'j˙_ȎPáq˛Ŋį×Ū}˛áˁáĒb­/˙ū–äŽA“‰Ļ+kĢ™Ũũë#š’∏X“×R‘ä|DXMEAÚŋë\i:jƒ4 KUęĶûūßϜ29´úv§`ū!ϝķOõõęGN)„ōręšû`ÂK˙Õuō,¸†N/˙„Rí…ũŋŊmSŨŊāĻHŖ‚ĶNĮwJ枈šÕ§ŪĒāĪ‘ĮúrhķUÅîė$ŋOŨ|pôŽH~œ"ƒ¤ˆ†\kaO6Γ_˙ŪÖBÎÚOOˆkcÕR_‘éø×§ũ0ƒ43oĆuVÚĻÚūŋīU§h2 C6rÄ0ˇ˙ˆ†Ūßß_ÕwÉ?ĐhCėFÅzšĸõ˙בaޘM 4<ŋƒ ûˆ}ŊԎ§ĩĨöÂtėĢkAĻļ×OŅĻ+¯i4ėdšŸgĩúkâĶ[§#؟éx†=¯Ņ(vwr1 †˙õĶ‘áƒB čÜÍmqa=ŲGWWo Įé;"MZÄC˙ëĩ×ŌÉtõ63渄ú"NĘÎŌAĻ*-8k~ŋø‹UÚ}Ēæš#_˙käžęī[ũÚ%2‚ėD4ÅÅŲm˙ę>֛ ÛZ˙ø­ū>ëjE"˙Mé„™Õ1d{Įõ˙ÕĩėRÚ÷ŋ˙ŋūú~žŊ§õ̞+´ĐhC.F ܛ‚á§tÛUŋĖ…˜Vƒ4jب´ėũ˙Õuú­Äoû×ÕŽéäqXˆ~IPˆi­ˆWˇN˜IÄD4ĶWzßŋŋūŋ__˙ô´Fí˛‘ü™Î ˆa4ÖžŠĒB!ŽÛ]~ē˙UÛ˙×˙õ×ō $‡X}ˆ†ŊŠŪ¨ėŠĩąŽ­§ūžˆŖ¯u˙˙˙í!ČŽ¤Xa8gF¤#\A•4Ō}4!Ļ NãMÖ˙…˙˙˙ũĢĄŽė dũ¯ˆĩoB"^Žĩnē¯ĸī_˙÷˙Æŋ’˜A Î§Đ0šÄC §oøãbõvF?˙˙™ũÕuČAÚ§¯†„LŧD&ĩmÜ]­?ūŋm7_äĒ˙Â'ģA⚈ˆĐwxŽŽ oĶņW¯˙ąÕ¯õČcz›e%˛—âÉB}Ũ×Ŋ;ûąZæŸ˙é[ģ]“ˆšwˆ”g Č<&WņqđĶWļļ~ũūšmKÉéåwb"&“NĶMHŨHĮķ%ŖkNÂŋú˙˙J˜Ažs\íÕČ/%Ļ""",0A‚â &Š°ŋČßũ˙ȎŅ;BqHh¨ˆh4Å&ē_˙õ_ŊŲ §xÚZ !”ˇÄ&ŽĶ˙˙úĐöđƒLvσ3 §Ä˙Oú˙§ˇ‘´™ B<`ds$%ÎÕČąDnÕ2LÃ_ÅÚOë˙]¤ĐˆŗÁ-¤Ašˇ÷Ļø`ƒ4#üA„ĶĻē_˙õԎ)§bŸZē%F=…´dÄxĻũä`_Õ4@ˆĻ™”˙Wļžx0xB„w6ĐO†šbĩŋëū4G ļŦ ffm†EĪZühŽ6¨0D0–Æø´Ô\?_īú‘RCü&„:_ũRmĨNōūM Ķ܄ˇ˙õÔ!­„éŲ{”ūß\ŠéWS€æ‚§ņUVvĪßō-§˙ų(ÚfƒŨū–čdI>û Ų˙âD#×wĒ˙uØ÷Iˇ°ƒ4Í˙ûíȤ˙ĩė‹ĶLd4üDZö_ū:ę–äw{M3…í•“ŊzE¯¤ŠúŨ$û3fg—à ­Šõú×÷ũz}š œCĻÃOĩHūö>öXũ­4 Ę JåGÄC4š­Ųž–ŋõž„Ķ0wvõnæ›û˙U$útá„Bė:|A‚ī†áRäã˙úŋĶ×]¯cēĩū–ēV´JÛŲP!Ŗ?ųÚrâknúŋ˙ņQüŠ;Œœds'ə×a„ÖÔm…˙_ŌcŨ+Ô&„3 }x‹ĐbĄŪē˙Ģ×ĨčX"!Î ŌĄeLmĨiIGôŋW‘aĸ1éØ/„35Ä0š‡qw˙÷ü^á0ˆc ōSˆg4Ķii/ūŋŨu­…%ŋ¨OˆaZÜē_ļŪëēq ;H0„C6Ą1I˙úK˙ŧS$íÔ§Áy’­ŪøŪú˙áßëŅ>ėŽˆë"6¸qkéK˙÷\‹G°’"7ōÜÁ9äGOė0’îŊyd_MˇqyZÄ0¸wę!#Žŋ[ˇÕĶŪD3Âũ¯M!šļ+U9„UūF éyƒødáAˆÛÚŪē˙÷ûn˜Pƒ>6YS~×ä§Á4Õۘt;ūÕwPžŗDļũĒ˙ZŋZŧ‹zDwTІP=?ū"õÕ_úzíŠvžpg^\všîëöūŽEô܁ė ȃÍ˙]õÂ̊žÕÍ××ͧ|C8$9ˆ‡ jŊ˙O#™(Ķ"!…ŦTZúũ¯˙ēu"=ļ×Ēi…ī§h3ī2+ÉąkOo˙úū6šš{M_Öū+^žõĢŪ‘'q ŽĶ˙ū™Ã(,b-]õ˙ō0/UƒD~íoú­â*/øIzNũ“{"Ŋ´Ķ@ôČ‹VÅ}˙Zū"ūÅĻ’ēŌĸ7ūÛ˙îĩ“Ņ(ō7#Žš{ÚzĻ.Ōwß˙ˇ†MÂz{˙_ÛõũŽ•×~ĢīMĶîžSŒŽüCZkû4_Ū""b­´ĢĢũęĩ˙ã_ëëõ˙řŒīŨ9%ČčCMvĒéūøĨlTƒė/Đ"q÷ú ]=_ũä‡öiĨ‚Ä_û ~Ŋ4ÕŦZŨĐvE¯ü9N˙_˙ŪŠũ3ĀįSāģ(´ĒÆžÜíaÁa]Ũ¯kĩģú%_˙č˙ūĮēp`ƒ3OÛQ ;W­ž˛5WOÚÚUÚÚW÷ĸO×īôũz_Ō"ģ´y{n"´îûüCUņĩ^ūˇyŸ˙˙õúũy÷§kûDą“c?͆”;;š ņÍčŨn*-7 ˙˙â˙õ_CdXhŽ.BĶíĨbiãčw%8ˆ0MVĄ­îÖ-ĩ_ŋ­˙ũtô܂:û}áƒŨHŅúB!§iŪö*âõ_ˇ¯Ū‰ZúíxT´ëI‰ŠÚkiˆa4Ō!ĩē|[M]tūE°Ģø.J?!€C˙K1É: AĻîEÃO÷˙CôŨRMĩŲ@ÕŧÎä&%v„DA‚vŠĒkˆĶüZ˙˙ũU„úböƒ&ā…#†DDDx°ģ]ūúuokO ë­ ĖÖ ĪÁià ^ßžŋõÕéŲÃ˙ztėÜŸkcŌ×Núū;oŊ2qIîũūF=ĶÉq]j CÛ¤úī¯Ļ9!õ„Â!Nķ˛Û­[Õ ƒģŋˆj)ŠŨē¯×Ēv›AÃDĨjÉ´ģŪôôöž4ÕÁũ˙"@[ũh”pƒíD8ô=:Dp÷Æ§ØÅáŊŌ˙„;¸_IļũtņN×dáČiy"”ėk˙ŧ{KČąOČÅĸ>mtëuV™.Aņ &Ž wŨoäŸĸŨĖÚOō-jž´Ņ"jmš{(}E…Ũųë§ôīū ÎgÚOU_ŋ"È;‹'gĒûúÚîˆß˙]účŒw Âd䓝‰7Ŋ˙éęí4GÄđÆ_jÛmSéú˙‹§û@¤ũ4ni×˙ĄéÚĘ †ėV˙ú˙ęúN˜&ĩēÚȝ˙¯dX";^Âgķ4]ÄZ &ú˙úŌĶOōoM29cöÚĩú˙U\Œ{Úv„1â!„Ÿ˙ëßôûĸ8lC8úkbļ¯˙úßßķÁ “iŠhøģÜŊ|”tO+ˇč>›´Ô4;^õ˙"}‘b‰F°˜A™‘s3ĐaÉâîęÚëéĐŠãöAĮų& šD„!Ϛm/ÖēūģV´ĶB ĖĪų\ Q~ØĢ×Ōŋ}Ōš= Ά ’ad–šxĶ×ë×ۊé]ö™Āà ú ņDØTŌĻÅûũwû֜C3#¸ˆ†Áŋ™ß¯UĶ"ōä‡wvCt×âÄIövĢŋ˙ũh”=eÅ4íZôö×ūžøQîȝė ''×Ļģâ &Ē/ŋ}×Ļũ'¸°Ļ™]+a:wkú#ĢëŌė‹ í4$Ôš9bß´Ņ2„C8é°Ŋ§Z8īø¯nE‡wv"ĶĢõßßėu^ȝXfOŒˆ“˙MÄC#rp­û­œûë´ČâȏęĖÄ´é§˙õÕ}:Zi˜ @ÉĖšŋīV"5ąÖ›Ũu˙]Hą~dáҎĢĸíüŽŋÕ|Õ§á„C!‘;6Ķūž|à mû§÷z×zĢv¨&ĨÚŋŪõ˙ŽŠ‘Á蕎ͰĄ˙™*^øƒ(rˆT¯õ××ĶR7i‹Mvš÷_ĸ(ë˙˙kWéØM=T‡đˆ”/Oę"!­Šb{+ëë˙KDQâ,'íaŦ5Í7˙˙TõoUr,ĻŨà h!™ ЈŪPˆčÅĐhA˙ˆa4ööŋ˙˙ÃēlA—4÷ė'_˙Ú_ū¨oO%iĻn°ƒëô"īöë„Ä_]Ēl/Ũ¯˙õ%R‘‡ī˙ą×Né Ī›¤ûŊЋM4Å6Ļ@oNĶLWގæ—Ŋ˙˙_˙DqTAy–¨•û|0„i¨¤äwÂiĢŊ†āĶ˙dQÖgŋūŋÖĩkŽIŨĸ ‘}?^"! Öqk]ŠTô˙ĒõŦõöŌ××ëÕūᄠ GÂüE§kŪ“M†žÂģǚ>Æˇē#˙ílˆîĶ ûEƒ ĒŨ4âŸaĨ°ÖĶívĢ_˙M6´îšĨ~eІˆˆ0UᮘڎūÂõ˙˙Æ:äXi¯—~˜´"M0švļĢæDŸVŋúú÷MȃŅøƒ3z吸!dĐ ˆˆ´!„×ÄAĢAÅũūŋčuøOø2❗b"?m=Ķõ˙÷īÍÆ,íÄ3@¤úoĘåfūŸ­ÉFēõūđ§†G4 ĖËLgˆšĢņ׹î~_ūŋ‘búŞ?ģģB œíx˛œm§k÷üŒ?Õú#~™đÆKü‹Gĸ1ũ„ĪÕÄDCፋę˙˙ęŸ Úw°š#MĻēwͰˆ#0Âåš™ģ_˙ũ?ĨŊŨ”~é•SéßŲ}öxCŽƒ4heģÜ^;[MÖūŋĄ]‘_§yÅú•b/ŋ^õσDÂדeWQM…}Η^ŋ=&ąûaÂá__âÂkd‚øÕ1Pkk¯˙ûHŽ=“ˆhÎ/ -?×§ųČãx@Ī‘Žü*i‹m~˙úúmŦ В ÄŅŌ'˙U¯ĩ¨š'ļBás˛ĮäĢ0°ŋ˙ČļũŌiū¯Oü”_‘`„vžŸäŠŦ0ŠŪ¯ô?¤û"Å;ķ7zžŋŪ­ūĮP´Fī ’áÅŊWâĮëz˙˙Ĩȝo Ŋ ˙˙ū˙ūž­=­3@‡FƒÛé¨kNÕŋ˙­G°„;ö“î/đ‹ŋČĩkãŠ!é Á3 ×ų’×vv ƒMiąk™ßũūŪ™8ÖÄŌkđšŪīĐK­ds8`ˆ€ßķ%Pĩˆ‹_m¯ú˙×˙‚ dj íé÷˙˙õČŨ§døD‘šÄ4ü0’¯˙¯ÖČáŊ& Ј‹^đ{šhŽ?ÖŨ'ú`ˆ€į`Ķ„2OØĢöëų¯õģIŦ¨3āM;QXNĶīų_ƜˆîrĐÛ°ūˆšu¸?˙˙ߤGtEÃL‡Øˆ‹ĩÛik÷¯R,p‚ŋA6 &Ŋ°•ö˙¤ŋŨ ‡gÂĻ$æ×_ũ=ë^ÂDq†3Ã8Íŋ¤ lpš/˙øën“˛qˆ0M­os:Õēöž›ôĶ;Î/âĶ õpš˙ūĒîÕá"Okëĸķr(dG^ú܈õô͈fJŸK;„5§Úũ˙˙†é ˜0Ÿí†ˇZĄ˙úŲ!ī§Ų BLÂi1kدũ~D°’ÁúzLN‘ƒ¯b“ŊĩÖŋ_Æôˆ¯Ģ0’úC†QîéĻÚ˙Â"Bīē"ŧDAĒužÃļg˙Oũ[]Ļ “‚/ōZÄC0Ÿm/÷}ũkąÂxĢ[VĪŪŋûļ’H°ÕP`…œHgAl˙Ļ ÁWaW_÷ããĶQMĨ¯úūœW×#ĄŪ˜T ø`ƒ>ų’y7u) ŦDĪbĩģŗîԈßõĢiĩ˙oõë­Õ_ ðšiáS0@Á30qÄ0ģX7KĶõčCM1­ßū¯_üh“Ļ“UtôĶŋ§GBųi­ØjúÖŊa5kÁé|ÕHĀŋŊíHŧGHu$øH”=SūœY˜ČæFFĻ""í1L]ü•ų"P_Û~Ŋ˙õĒÕ!jÕuOHôJũˇhA‘Å™Ŧ °šxiâ-;ą_Ģ_ō)‡O×´ūļČų‘Í+doīˇqgÆO*!°Ų`'a…ƒUÜČĐÄZi;‹ÜÎū¤~ž?ø­ëú\‹WļĄ$Ke;j*ظyœ› …öՅĩŽāĸē×ÖéŋßūÕ>ᄥ[2ē H@G¸vž$?WØaaūgŖ=ūG¨¯˙J˙˙×"šÛĒ`“&Gî‰ēBa>ØKÁšiŠģˇTÁúũīZû÷ũ?ÉžífFK؋´Åb!“„Ķ]Ŧ5ˇlü’ôˆĮ˙O˙ė‡õ˙_ē$ũ4!ûšdíϜDC Ĩļ8ijngĨOõũĶôŋū=Ũ;(Íûâ$‚ÅϚj6JA~Úh%ģEĮ˙ļŋũQN‰[pš ‚ũŦė"ĘÄZ 4ÅCM°”°ô•]ŋ^Úŋ˙˙ëȃ´ėƒKŽŠĐØ4ÕÜpâíŊ=î“ûam+˙ûž›§OD÷œ]š¯xÛēmxLÂ|På°\xaŋŪūĒ÷°šhA”I-D0­Õ{tēãDp× ų%+ƒ5 x°îĩ”ûũę4F÷´â &Đ_دA˜ŋ÷ZjÜ'{Âõv–đ˙ũé>ō7ųQŅØ×°ƒ[č"īúßõí˛+ˇLđDŪŧA‚ģ¯ŧOčuÂtĪ‘†kY,ņņiŽÖûŪŋޟĶB œC1›I„˙QNŸ@Ÿõ˙tFîÂ!ĻP—&ÁBx”k`ú˙":ūEûÚq`ˆ Ũ4~!„ÜUí™Ī_¨ļEē#‡„xAŋ“tę;_˙úęéŲpģ'/kÄ2nšĻ+[ZK¯§_i„n"C0Ķļēļg˙×{r:w ƒÉÆ­xƒÔqzwß#×ŦmIÂķą+b ģi×ôūoM3As°!9’˜Ä;lzßō1ë¯I7Ļáx3<Š\"mĶJ°˙¯û˙’}'ëĻK6™a=ēmŸĩ˙}v“üÁŅ"ĨÖūˇŋũjJīŪĒRAÄ5lwOúũėzéūŸIÔZj)†’ōķ˙üšnÍ4g×ģú|C cŊ7ú×˙ Ą áéßÕėė˄ÕÁßoū—Ōqë­QØÛhi…ėWވĮō&‹i;×ú‡LdbÉę ēŌk…Õ"+ļōCŋ;Q_–ô!‚ qKß˙Šū˙OփÄԚ{‹ß_ĻGWĶę@ŋLCA„ŸgīÖˇûÉOüåėpŧA…MÛkũuüąäĀ>¯ Ņ A=ņwi°Šü‹W÷W h%ÛF@…ôЃ4~!’uLUũÚ ä )ũŋ†0ļ‹ũ˙Đ䞝“„ŋč&ۈfˆŽŒ‹BˆŊŪi˙é:"Žá ĐdķgjūE}Ą ĐxŦ;Oũ5tŽEzāˆEéŪ¤Xˇh2‡ í´•Ž: ÛH20dįŲ¨Ŋûë‘ĮL3Å^Įëĸ}ßîIôž?_×§öGS˛ri ĶWwĶk­KĻIŠhŽÅ;dŽŽÎĢũúŪMë„ ųnvdž—U$?ú÷ŪEé„@Īķ]ôũÂ˙¯ž¯$ũb bđša'ų^5Cy!á;MĀä)˙e-ßk˙×ņ^éŲ@†gâhš‡öÚ˙˙÷|SC6˙Žũ´Ũ/ũ}D­ØM&bŲŲĒđŸ˙¯ôˆîūBŌûk˙˙ļúļéāƒä^IÂM_Ŋ\Ķõë˙vCÂī˙­ƒ ß˙˙õČãvžĐtĶLCWm­¯HŽ:"tŋ…÷įŒüT/a?ąLRkûíŋõhŽŪH-ĨņjØļ§˙[{ü‹B/‘Ãë0˜",Č'âÂđíwũ˙ņŌ#‚|}Û¯īŪ?T†Čã_ āÂC-GÁ‘ęŋ]=íũúČŋkXeÅũÜC‡Š‹ėĪ˙ú÷}õC<œ9GâFOŨ§Ēž0Œ˙ëę5¸˛‹ö‹9žm°Šš ôM˙˙]nŌ'Ķ‚!<ƒš?/ ܗˆ†ĒūīLë˙ä‡ļƒD 9úÔDk{ Š˙˙˙ų īŒw…AÅĄJYøŲø™ĻŋŋūEŅ?OĻžĢö Ŧ éŽī˙ŅĪOíĨ#„đƒz#zzf€á4!øˆa|UÖūõßō8"ÃUĩŋĸ,gÅ]σ 8{fw^Đ˙ëĶëč'WpēøŽņKi'ũėtĶĸ;h“â˙kAˆ‹[am?˙âŋÖëänäú÷â 'MĩÕÍ˙ũ­>ž×&˙öú˙˙ũēäqņpÕ¯čõ˙ŠŅoōīĶ&1 6ŠÚëĢW¯˙õuu_~!…{žę‰_õš˙ķA Ãč|¨M=ą­Áú&=.˙ôēßúkŅŊß˙ԋ…MĶ÷á„„ĀkčLߓ[VąmP=˙Ĩō.ŋ˙˙ q_˙BŨ?Ķŋõ3h0ˆSqshŋĶkŋīßõ˙ ĒîÕWņŅü_ĸ}ŧ b &ēĩũë×˙¯üD)ÁâūÜŅ"Ÿ§ęÛ"ķĀûzM̍ˆ†NĶÆĢŪ¯įīŪŋņŽūĶLņd^8OųéúkŅ>ˆīv›ivŸūĩūģĒîļ꜓˙ūõũß§H&ļ˜¤ØØaSMtŊ?2)Ú{ļŌŋĐAŋëÚī ĮÛUĢäm0Чv+^Đ;ŋtC;}ƒcL֟ë÷N” gȸôÄ|8HDD†éŪũ[UđíĄÂiŠL)ãKų_‘¨ŪœY@;ļ‚ˆ†] Â§ôü0ȐÁ‚`ƒHií˙úMĢĩâģ„NˆC ϟ×ČšLÕš˙ ˙ū"ÁIÆÖÃhDGpĶ^›°ˆ†Ú'[˙údWĢ ĖŠ0X:ÄGû¨ĩh4Ķsī˙ZtGM ņ›˜2ša ũļ蕐îšÃU_c­'m„ á:äŊŌL›(øļ+Ī˙[zŲ8žū™‚˙õüMH+AĢģ]Ę@îˆŪá}ˇaauō]Ãŋęâ"ôû(kęāßOi fĖ;î™8S5Ģę÷)D!„Ķ”î“Mŋø}'dXĸ(īÁž´Ķã'zgtâ¯˙؎‡˙ú‡ūēôōOOM6ŖąŨĻ ÂZû˙Ļģī¯ZĐ6üŽĮĶ'ôü|UÖäXžšã˙#?˙ũôˇtģĶÖīë_D9ˇĒëz~˙ÔtûĸOR.*‰›÷;ÔŊKĪõqt÷[¯¯ī2Íëu˙Ұ™˜>žúd^ō &đ@ĖÍvŠŖ!ôOĻÅß˙Č͊NŸ ĩ\U6š  °—pƒ5­ôŅŽĐTádá4īi/k˙×ãú WQū˙[uĒy˜úÔDE§†íĶ_Dc˙ãļÔ§ū˙˙$÷t ų›DuîA…•ĩ×3چ“ZOû|“äAÚ¯îūû¯ÛŌqkø€›Û§°Â_īí×Ķĸ;žS‰ūúŋZŲ@?įaĸn9´éđÕ¨­=}yhéëÚs‘˛0:˙õũÖEžIöÔ ÄCOąY‘ZV.Ī×ŖĮWzÂvŸūMˆE%ū×~ČŖ´Ŋqk fCvÚúŸ:Z_˙§ō[ūW50ƒO{"/ŌĨk§ķÅŽ"M 4ėS}š ŋũ:ĶųN ‚ ô,‡ęvNŗŽü*¯Įē%~AÆëŽĸĶđ÷ #˙÷ū‚ €Oŋîö´FúúÕ˙ž¨• ÂxĻÔÎK˙ö:ũŊ  _×_ī_¯˙¯÷kÔa?ūž+öŨl ä‰˙ü5§Ēūžžø9ŠI—ƒA¤í;õ˙ųô‰[´áė'ÚüjÚžũīÖ.Gōŧ0I!¸ŋíwõĢ‘~܋ķbœe9†ˇü4ēliéüŒ_Qˆ-Ž^ÅÚ¸ģĒļŊ×ûõĨrCī´ĐŗDûĮÔ]Ž×˙×ū0A™´ķ˛:k{¸˙˙ëēŌä[ÚeįÄ_ņ{NĶ÷úš´Đg\ŧx¸dVéÃdW˙^žÛõ˙ÚaAˆE]˙‹éąĒ˙ˆČž,œUŦhDXAûĒ˙˙ö?ۚUM2€CÁOĀÁ&βaOa|ą?wũm28h“ûA Īˇņ [˙ú˙ëWēR,ÉE%M4îÁ §;"„ĖÃøˆģûiũSîöžŪ…éĻ•>˙ũŋuDoÕW´ĶOTÂøŊ+ķ˙ßŨųā„3čZûU˙ę—øĒŽŠ9'kú¯…˙´˙øųđõi‚ffėE„ÔZwīWČĮõžũoH”)8ģ"žŅ!ü$F=Ņ!ū&›ú”?ßûJ4Ѓ6XŽö’mŽ´÷ík§ÖŊ7&ũßĻ´šņh”æļŸë×HÚq đΎ–aAq]¤/˙KõL}Ō__ˆēægú˙ŧ‹éš'ž„tu  q¸ĩß§ĨČõu÷ĸ1ö„@ļF z4օŠŌéâhšī]×Ōũ§d īL Ī‚"O°˜Lœ!›Ļûΐˆa5ō ̤˙īë Ų;M5˙L Â!á9 ˜sŽ”ĸēeb-vÚoŲų?KąĶpƒhÚÛíRkd%‚dŧ-|}ˆÛ4žĶú_­J/č‹IîF3#jƒĐ}nÅA„­˙õ˙ßû¨ū‚h]ēi9ØŋiĻ8a˙ûõd{Sˇīēv™ôÂŋ ‡g[’ö  E.Ũh”Ô1ŌÅoČÂÆø"$‹¯é<3@Ą…´!„ÕĻÚW˙ō'%äotŖ×¯7#1ũé•D†_ũU éu"Õû‘L-5 5š‘gõäXj3#{ E­Žī[W_úZWĄ§ˇL„ š6˙ĢDpĐq"MEõú#iģ˙ÖëHÚd‚Ķī˙OÚŲ.fFH0Œ‹í=īærOÅ։Gīū’m0ˆcȂõŦņā—Ģô9'Úg†G0ƒ+–˜‹Å]6]Ũŗ?ũ‹J›Ķ ũjv`ûúī÷âqNų¨†]…QL5mUęÂĒ~—ĮōOTôÅôĘãhõũ˙_#‹Åš3É˙öŋk‘#駄)29Ÿū:¯˙_ũtčœSĶ'đ`ž!ē§}Ž=Õ;Mîˆî´šĄ2p‰ĻNfƒ#˛%YVuûO­˙Ŋu˙ü›îĐkˆ{b—æzë˙_ü“Ú‘X°áBÂ"L ˙Ër{O¯˙ú˙ÃÕũ2.;Ė•°Ë°›k[#ĨDq˙ūũ-ßI´GŦ'„í?ņģM;WûDc˙㴝Ұ@ĶÎīLG -8´ß˙˙˙j=‘õIžŋø5_ui}?˙˙xOÅĢí/˙õ˙õá28rnÚjJ:ĸC˙ņ3ãmoK_˙ĐîŗAŪvĢĸ?ŽĶ[™ĪZ˙úū˙˙ϜũäĮôøˆĶ°û˙mŋäßá'¸AîVaUÚęŋúëĨ_NĮņÁ?ü&Žî߯¤Âf‚Û _* Øa&ë×_Ņ"‡ë˙ø˙ū`Ē›×÷˙ßM4båu7.Å1WŨŌũ>ëũ/õÛúōBé¯āđŒ#ŋä~ äqĶČ10ƒh2pƒMwũų_ē^Ģčˆá}¯~ĸ ëvЇSįKërQDžŌ øČåŠ&ˆaëtļÚÚųĸ˙š!˙u˙NĶĶŨÔ>ũ~7]ébļWVÄ×ÂwŽ6Qpė-§­$˙ūŊ~"!„ÂX˙W ˙ÅiŲ3A„¯ÄDC Å]¸M˙˙ķ?Dž¨“˙ĶvĄĨk™ŌQôƒÉ?´8ĶĨƙåƒOlUĒöŋēzW.ūˇæAFá„ÔTmŠû‘| ˇû"ģĶ3Äy¯ äRĀĻ˜ģŊ‹ƒƒĩŗGzŧZa}CHq Vá…Aëí žũnŠé“‰y(pYŲ]B Øa4öŊûŠÅÃXb"1JˇŽ‰?Ļ‚Ķŧäãi„Ķ´ëAâ"C…žīŊÛąVīx Ģcƒōuģz÷¯ēp:dꘈ3ĖMS°ŋĻž"t}ũ…§F˙:ôFū œTĖ”ŋō2ÄD2Ëam™˛đÅßMûU¨4 üDX[̟ŋ_˙ãŪFîáž#íB}ēĻ32/SŽÉÆ!Ϛ‹´˙DoûõĶCW…v×5i˜}mģTÍļ´ÔōB#ė'bŊk~ŋöŖ¯mU?Nŧ“×3l}0ƒ:ŧëîžũZo">ėĐøĩ_ę/Ņ?ŗAūĸK˜a]ۚõõČęz¡Đ4 “Uũ~>Ũđƒ4tąŊ‹{×_ëũ‘]ǐa Čģ@‘˙ֆūAåVj˛fØOōE¯ũäSút”&„3åTÂ+øûé_$zR1Úe8ĘĻ2tĻ"ĶĶW!/ē=ē˙ŽJ÷„Ä dlĘŖūÉk˙I䇨UQÄ2Pœ0Ŋ?3”?˙ũFŽ42 —´Ķ%oūõŨE͏S@†Œį~"BĶÚmĒm=ëĶ'5@Ī™úÔėŦ§´ūŋ#Õ1ĒĒhIsķŗSkØĢėũ˙ūßԍŪL ĶMÂÂwgzŨŋ4ҝŊ%tī8VL˜a(†PéŪW[úöëud§ū͌Ķwūü[al=+ĶēZ}Ēg 1ÄD0˜¨Ļ˙^>>=ũ‚!H&˙¯{_ŗ?НŪGĻÖÉÅÜJđ×ßĢ_ [îÕ: wīū ]Їē{ĶūĄY6ŋL wˆ0ŽõUK_¯Ļ°Ą4ÉĮDV˙ÃMGkzņīNÖa˜a$ a5jŸ¤‹ēéī%tÜd§BĶqö´Ä5LRĶk˙_ĶĒvl‰ÃÂĻôī°ōWäe¯÷×DWtš Ė/ųxø” ÕžgĸķũžˆâŊ‚NÍØ‹MéÁßĒģ˙ôūŌ#vš ņZ~ŸâęÂÛīČę˙ôōNë0„ˆ3Ži¨qŨûĨއI:é„rCLã+ø3#ļ˙ë˙×øZvA؈†Ô_fz˙û ęäŸ÷Ü0ƒDsæã˛÷ˆ´ÅZK÷˙õĩģĸ;xAœ#âāÕĻęg"īū¸úŊōoë­Pz P)āįÆF@Ũ¨ģŽg˙ūĶÖßõ'Ol0Ą<>Ŋü‰ øĢŪēũūÂv5_ƒ „›jë˙øū¯"Į˛!ŖäyÕGi˙˙ØúęEģz Ģ ÷iüN—aUõūëwMÆČĐ9 ‰đÕÚļŋ˙ííûĐw‘^…W#č“ôMëÄ4īũW˙äX§gru™vĸ&˛Ø¨ģüĶ˙ĩc_úz¤EŠ]-Ŋ˙áŽá¯č˙_õöØ@Îd´†í:Ļ­…s;ũkëūž¸ŲŠø†žíUŗ>ŋúūäŸŪ™˜L" 2j(9P7ũĩĩõTF?õ˙÷Öŋø˛‡[KwĒ_˙˙VČá÷§„ÃT ˋŨąM…ˇŠvéß˙¯˙Ōīâ"ͧ°Â°ÕÖ˙ę´ˇdW{§D`Ëŗ°ÎY‰BiĻ* ´“ o_˙ú]uúńûtŋö:éūH|KŦTDiĻ?M?˙ûߑč¤jíüFš¸w˙˙õīN¸L͛DFŠ*a HĶUũ"-;qių:×ūõŊĢ2r͞@ú›â-6švú÷uŲ4ę4#w`ãĖ†ÆĄ„äŪkÛ_ßÛŽšMtžĶ%lÚŲĄ ˆ2°&“cēĩôú˙‘ “zôÛ"ŋ Ãf‡Ũŧ Îđķĩ".ÕĢ×ĸķë_~Iė/§DpͰAšŨĶ%ß Ä0ĸ˜¤í]ŋ÷ū=z×]4͗úPL؜kãM'i<†˙úcëū4F:Ķėņ—^¤ßvƒ8DrOrPPƒ^Æ­ũzë˙ũ4Ō%oв ˙öīĒy/k#MVáũo˙ú‘ũŋ´ū:§sÆp´ßĄ kaĢū˙üŠcõ{Ūr69 7*)‘KũŋĶÉÅԍ[âCē˙DoŊúëĒ˙dXvŸev-™V˙é<ƒēíĒ}Ļ")Sú˙Tū˙ū›uĢ@ÂaŨë‘\/Ķá¯Xiīd$}}ēū?˙zļ°™;\­ŸûĄ§uōqßŲŲ“ ôáÚžÅjæuõļŠHąDĄŲĖáŠģĻVī^˙ü“ũŸ™MŗŽē¸ģ­¤îÕ/˙ãęéŊ;AŸrŋ°ƒéë_˙~ŗá<b"!§xāÚö%_˙ąúũŌhZoéc;˙—Ÿ˙iv‘Ŋ?ą 'jÎË[ŊÕkn´­Ų1ŨÕ>œģ_ûP›¤ō īeÂiÄC Š-ˇē˙ûē|“적û­˙†ŋ_ĨëĩŅ.#›Ļ"hM Đī´ŋßŽĢ‘Ԑ‚u¯÷cĨ˙_ÛŠ'éÄ2Aj Á ÛĨ]|V­=Zgƒ1˙ü*§īõõúūÂd3Ķ;ĶϝäWëKą×ĸ1éØA’>Ĩņj¯õDqë÷^Hwa™?Ũâ¨DwbĢ˙ÖëúëÖEÚh?("pˇøƒ&=̓K×ÛĒŌäĸĄ3c3Ū> ÂaSQĮ˙˙ŽĢüŠ>E|$ėābŋĸ:éoRoN ø—y-! &ĄéŋĢīĸ1ūŊ Ļׅ3ę¯Ūĩ#ú ø:ĶØƒ ×ĩxnšúOũqōOt‚ û¯ēQĨôši™˙“rTũļ´ąvŋ˙#˙Ō#ŠaJ‚ōšw5ÉŌ%ŋBŪ“ģ ĮÄ5ėXiÛ]Ž´ļ9ĶČŨ¨ fc.Jv a2Š‘SĶØ_ø§ūFöüdævįšd0ƒ*‰Äk[‹˙ĻEŌôŽē#Šqd€@ƒđM=í…˙{ŨPäXĩ„Â~". ģNûh4ģ3øZ˙OØRŦĶûĪOV*/Úę*ë§MF‘ģ,§ÄE­ãW_ÖŊW’wj˜?ŋ§÷oöäiŌũ6ˆŨéžG™ã]/ĩũū&ØXAä$4ŋ¨ņVĩ˙R éí4ēˇL†AĻļ›îhŊ~ˇZ˙‘§”á„Â"LœĪē@éĻ7ŗ÷ü!ļ/§‘ŪŦgbLA„×m§iÚÉ;˙c­+¨\Û§Ļ˜ ĪÚ˙ƒA­ĩ˙ۊëęÂd¸9昃°¯¤˙ëŋû¯K„ü" ˆ"O`‚`åÖ}'é-Ϙ˙÷ũ.™ō1Úίf°šÅZé¯˙\r0d‡O'oüܸ q&‚,āƒ3ų`ƒđQi4í7÷k˙§Jėd;v.íDo×˙é&¤_ļīz}ĻÃAęƒNĶ}D5ėŸ“˙˙Ŋ  ÁˆiâūÕ/˙ôŊĒKų;ú×OÂôŸĐĩéļˇČ¯úúĐäX"ģDc´ō0Ë1/{MÖŋ˙ä]_ė&Ũ7‘]ĸ8r+ĩŪß_Ą *Øī_˙Ētވb†Ū…ŗ;ė]¯õũz˙ûũSĶh&ŅēŅŋú´ ƚj*š˙ëúöäãį’S V ęˇ‹^˙ß´žūļ-k¯˙ãz^ÄD4×ßúō-…úV¯ Ķ2‚$i„B" 'oM´ŋø˙˙×­ŨcüJĶJȖ˙áûÆúi‚ĨAd(Ä -=Ž×3ēú˙¯ūú÷üíëũúDpŅ͆šá1Ķė+]ĩTŋ˙˙…đĒBHžZŊx;ܝ_˙˛9ô›NėˆgÚŋņUa5Ü0ŠÂ_×˙ū¤zVGVJ@]EĻģŋ´ëũžŖŽG¤!ši[ˆæŊŠģÛ˙ë˙ëúøĖŠjŊ;_õzĶZM9ú`ƒNHSb&›5Č1Ī-}‘Ŋ˙ëü b-^ØK˙m>]đŨ„!…LU°õ×ē˙&û2q ĪŨ?üŽní>´4ÕíĨ˙"í/ūĮoi„LœožvXūž×"ŋ_e;ž-íSūŸ×t9čŽ)¸ ˙Î͚Ŋ]WLŽ;æa K˙$V ˜Ž˙ŊQ(ę͎Ú#ŋy{ß˙ëĒw­N'Ūĸ jāĶÜ·ûé]i­[Ž3ö—÷˙˙ĶI„zåŽķŗ3Ä0¯îĐpĶÕtFûøŌŽN˜ vG<|ė2îH˙˙HŽ)éôúâCšĩm*ûMRŪŋũ8†H-ûöŊ×ūܔ?öü–´Å…ģ]ąlm÷]nŠ"qNÁ2@ģOS%Dj.ęßß˙ņ¯˙~´Đ4×ßaũHÏz#ŽƒAäž'ßöŸa¯˙˙ŌÆ­%žP7ÄCDSņiƒ§××MȎŅ(iāƒ4=×ûi˙߆ ĒÛ Ėcˆƒ&é„ŨĩûëõP´›Dö%ĖŨ˙ŋÅ&ŋ˙ԈéŠĖķĄÂá¯ß¯˙îo{B ČčĄ'īũãĻžô˙Š„HíĒ%M0ІŖ´œũōQÛQŨo×DĮØB ĮíoÄC ĩOM{áÃ#É6÷‘6o!âhÁŸaCVÕŗö—ß]&•ģĢé§rž‹ī¯ūũö?uh!Ã-1j*;[ģß˙Ũ{í?†N!™˙Qũ§p÷3ŋWúN, x 1¯ár‡úņ˙#ē#†õ„ŅX˙âM4­Áēæ~õvžŨ„ĖÁi ÂâĶL˙˙ū­<ŖŖū"īö¯gũũˆŠ 5;+’)ZÛO{3ūäQ˙õĄģR,Su'N)™Ÿf˙ČˆĶąVĄŋė'§DĸÅáÄ4Į '_ëũŋũ.JŪ¨0šag„įę[‹&šbŊ˙îGNߜÆDWˆ2ⓨíWë_˙úĐäXHë{§4â!„ūöŋŌmņĢL" #Jˆžt̎Ūĩŋ‚˙čRtJÚ$˙Nđƒņ {Ŋu×ō:im3âš,V ÂjöÂVžŸ‘Ôŋú§{[Ķ\ZMõ‘]˙ģĶ„8Báˆ0šØĻŌôÚ_˙¯ĐãäO$ų=?Ũé¯ũz÷k  ÁhDr3õ †ƒ ŠOŋôÖ´EÕ/ÖÂôŸDqū˜÷×˙ūžFí4dqIˆƒ ­8õsE_ĩúß´ŊöŸĶĩYCŋ˙÷Y։]w†8Ŋŋ-˜šÛí~˙˙‘ué1Ķč~"ĶŌkûõņ\iiۈg[&&“ 5vÁ…Ûŋ'_Õ÷ũW–Kšjî—˙§ĨŪšŨš4zcbPëcX~ØO}ß ē˙ˆĩÚ˙˙^´Ŋ2;˛ ô ēzâ-5vŠÚ_äūF?îFŨkšm¤ē˙†ģū™ŨŲ@99Ū Âi…ėië™įoĐ_Ĩ˙_iZļüHũWTčÛaBž"Ķí[kií}ÖĄĒu R}×˙ũV¯"TėŲ8ˆ0DtâÛ[û[ēģ3ø Ĩt‘šĖ&´áž˙˙ütč•ĶėĐ\ėšˆāĶąQĻąkîŧa|ĢũyĻ˙˙÷_õ„đ;šL.ŪIm ´"Ķēnš×˙ŽÚO'­8dãė";$np¯¸ĢaŽDŌŲ†Âąa|0­Ģ˙˙ ĢūšD­ØA•ōZ[TĶUą[ULTkbĩŋ˙äucũôÁ5;éˆãm“uL.uI}Ķm1M¤ŋ˙ę˙kr#šô8`ô˜iˇ`¸ÉMgb ĨÂiŠģ_ßß^̧Ai„g 1Ü%:bA„ÂÖ×ėĪ×_ûŽ4Eޤá7ų‘‚éŦ$ ÂŋĩM×ũŽū—%Ķ4?#âô"ũ_anũ'˙ū-_p˜NÎŋ2ĒäČ\EũŠũß÷Z’é“ųŠ:aw‚BhšuV×Oúû×ô›Dcõ3ärūē#Ϛčˆ†ąĮĨõûŽĶ°›N Éüi'žÎ›)oDxÄŖvî oūG§ÖĢ÷Dcŧ?ō9ģ’öÃqÅz ÄZ~Ũ+åÃ˙÷Âւ ļŸ–ä?ĮN×φpīH8‡ubĩP˙ôĸĮ˙"=z=Öđ™Ô~—ZiŪ-zÎ͘°ĨģiÍ˙¯Ĩpš'~žˆ†qûūÆÕ]]ęԈ0Dt×Įi˙ëÖ˙˙i„$ô'%‡ä´ŋ"Ø_ĶéČ9mņ~› ޝ˙Ö˙÷`ƒ3ˇĻoũ ˙#ĄȰŪAĐš[b  1ļŨĸQ˙øũęĐh3SĒuAŽ3e÷_ęŸŦ"LJ ¨ØÜίõũ~› ĸB{UV暧/č˙ô“Ôˆ;MNÁąÎđbAûT˙˙_o‘c%mĶ  †´ŋ_éH-<’īąėS˙˙éSĢtá0š͎ûĩõ˙­ŨŅ<fd\Õ_í\„ģuč”}ŠúŲžĶC‘hn1Sä§öØ[˙}ūŋTІHwdm°œ‹ĸË.¨4úzúŋūŊR# Ѓ$?Ø[˙c‹˙˙ô=pė Íl\ ĶŽî­¤žŋ_õ#žŅ(Úv3įéũÚn×˙_ôĩLØí~Äø&ļ+O_íxīdGh”pšrI#úø† N¯˙î¯"žūÎzâ"Ģâ˙¯˙Š„é6ßÃÁ?ø†žī_ųutčœX_g ˙;ã`ŸbÕ¯ë¯īš(œ^đž?ų_M¯MmĄ˙{Ēzüá-Ŧ& Á4Č08ŋßôEĀ›­zíųúzfbj˙â,/ŋ˙øũĢŊ0@ÍëR,3†"Ķĩũ ū˙ Ŋ? „8Ÿņí;÷uē˙÷§AĄ čĒe—LÔ'Ģi{žŨuī^ˆąôÂa?øĩ\ųŸš“סõí:$;ŗ@ĩĢŲb:öŋ˙˙ũņ×&ũ?6)ĮÈĩÚļ›aũ÷ũ ÛiäŋšÎĶ¯b“ģ3ҝ×ûkú´ûĸV˙ĶėinÖ×ũŋ×ôŸŧ"fōe—ōš jéĻ_ö˙_ĐŌŅ'˙ûAö)Ķ˙˙û‘c$?ˆzšŨHE„÷ %÷Vŋ˙ūŌĶOī^"iƒ ZV¨ų×˙úéüĐÄëúaDJ¨kī^Ž˙ųĮŊõöëÄL[izaũi/_{÷ ÃA˙ÚB¨ĢWKĶ8_]BĮ˙âb–ī˙˙ũHĒåA¯ųãÄ0ƒQPzŨžŋũë ­aÔw˙˙Čé’xA§˙p„ÕPb­nŽũũõøüCOĮkŊûõĒúMHąaūûCL/m/3žwܐūŋ 4öÁë˙ë×ÖúnA„˙Ą‚iĻ´)Xkę¤Úņ'*øáũ|“˙úôGOīäļjéÅ.˜w4^ŋâ NŨĢkĒO˙_TÛ§ų´­š Ę(X{N× Žy’“§Ĩú˙˙­Ôũb †XϘˆ˛‡(pL+N)†¸OÜŖđ˜ƒ' ­;‹ū?ëé÷†â6uâ"t{M1Qi­˙)D0…÷_˙¯ët—ą$æiŪ-ī܌“ĢĒéWūŌüˆôėĪĪB"'éO5†kNø_Įôė›Û eˆƒ?<[_Ģâ!Ū͝˙_ĢũpˆS‘í\DG}ũņČ/Ī˙_¯äw’„ÂĄÁ˙ÅøvœuÉGKØũ_DoLø?áíx†[ú¯˙ũ;Ķvƒ33šÕc¸Ũ{a.ŋŌZ×ŌŅ(ļ„@Š—˙ÄZb“×ũéw~eY%Ņkˆk~‰Gëöĩ‘oi…¯‚.^pa;i¯ū˙ĶL{r$4Õ¯§Ī¯ˆ×~ŋ˙[O#Š#xũ>ū$ôîī_õúĐéū‰fī3Šķû{¯¯÷¤˙ųū§ ¤îôīíĮ˙˙ĨĶžļ|iƒOíĻ›š*˙õsą¸ę?íĸQ ų%×Įá?˙‘‡ĶȇükũÜ&„;wÛ kũWú˙ú_ogaąąÄ=~õģ˙˙ī#„ˆãjN*bĐiî—Ė÷Õ¯˙úøöČ㧈apÖÕĶ˙ø˙˙HuáA…ą ÔUĨkjžwYvĪß[˙ģH•´Ķ$Ep†# )Š~ūūŋ˙ŌŊИE…NÆšãō}ĩ]}yW$=Ķ<)ēäu Âŋũ>Åk˙Đëũ='i‘~IYZ$ô˙í]Ē˙˙˙R1ú ĪŋQ*Ž˙ö›Žé>ž¯ cM3„va댷đ˙;:â ņųŸ¯ė´‰ģ<ŋ÷ōŲî>" ;iÚ˙ëĩĩOč3äo)õîŌ÷˛ũņļ[˙ZĢ­í2€†faŪM‚ŊĢ3|ĖÖFīåqHÁĶŪü“ūŖ~B>hZyļ-_Zi‚ŠīÄM_zI>Žh?ÚmÂzdãÂcõ";DcžÉĘË×üA…ŦčŒ}Ũũr-š+{@™ ×á=đDžvTD!ä ˆ´ĶǤ÷˙õĨģH5åķ˙Iˇu´˙3“>ZâŪĩvūžû…HØR J;Ōõũnäfģ´Ķė0ƒ äHŨˆnŊēÕätĶÉÄ ĖãéÂŋ˙ŪJpĘ ĶU6ʑxwãLû¯ūžšĢá3FsVūŋū¤GÂÂúĒwâũĒm~ŋŊqtčîÂgÁ ˙˙û˙§i4ĪÕzų6[šp‰Cˇŋ¯¯õ­Û‡avœŊ‘_ŋūžē‘bšfĘAö'x*ßqa?Ã]īú÷ä[o„ō7;ÂÚ˙úõūčßŲ@˜ ‘)ŦŦDę ͉§bŖŋ¯ôEāˇik‘mēhC‚A3ĶX×Į__ŋiŸûNšdX|ÃÄD2‹Ļî¯tž…xūļ‘+v…šžv\ûģĩuú˙СjĶŗff/ãéŽø’mõ÷ũõęūJkŽÛNü^Ũ=ēÕ/ū­)éø@ĘIWĪŲ›+/\A–:ІēũđģĶ~í7 īNÍĶ2TmWlU­˙ĶÉ=õ3„šįÛî¤)ϟâ5ƝŲ˙×˙[Žš!Ū}ƒ ޘ´ŋųÂm*˙ŅvSOM­ôõ߂ĻÁē~ˆãúĨûr-4ė$ČA\E ×ũp†?i[Ēmoŗc(Ŗ˙ú•aēbk×úë¯éÃ3@Áü™ąĶpĶ˙Úö=$4G~ ņī˙ōE4đÂwõ˙˙ēõĻĄp“ŽĶ‡}ëĢMtĶ„í ëßüA„ÂcŽ˙ī˙cĶMGĒŲ8¸ÛđõĖ˙××ÚŽF;˙8ũ…ŋ–îg‰œgĖŲø‹A¯ũÛ˙õũw§¸`ƒĶ4fgVžÂūâĐ­Ž˙ũŠũtõĻ„6čA…V­˙†ũÖČŖôôĶLãAœ r QEFNG!ŋ2 ‹Ū2:‚p´Ŋ„?ë^Ķĸ7wēėCvĪ?˙Įũú ō,4FītÕ5LœᓊfÍ?ĄgĮįeRBĘ)5bü͝ú}}îŌN˙a-=ūŖŋ§õtÛßû3ƒ6z„˙h?L?žāÛ_ëŏû‘†-šcuú˙}¯ûBũ^õÚ֚÷I˙A“‘ĒôĶža[ˇkŽž–Ķˆ$ Īƚ{ßûúũkīŨ‘_UrCˇ­Š'ũÔ"ÂdÁõÕ9 ]1šû˙_î°ĸ"}5ėĪ×ëú˙ēéär+ÕīuOüŠéÃUDæ×ø2á4Âmmz×˙č'ģĩĩõß˙¯X˙ZëCtž/đ‡ĩģ+K%3^"!¨ÛVĶš+˙ū ˙vál/×˙"ééŽŋ÷ũНčrO“~Š1Z“ĒŋDqĐiŌ—§bÛJ/úņĶvízūiûĩûü_CūEÄôĮ#š|(A‚"SÚpĪ$å'ąW!"Ū¸ƒ$8MvšM­­™úũĩUūßŌüŒwĻIģúÄD4îŸøˆƒ ŋĩũZũ­Û=zŽ5괛D☠jž9Z`Âjļ*ÔŽPc˙Q§m…īZõŗũVŋž—˙÷“ŠwdbKÍ[KŸi¤ Á5MkiÚÁ¯Ļī¯Õŗ=Qūøãôõ˛įö" 5Ļžĸ,áŊ„ë§w°ÂOą_õ…_úņĸXū!ßâ'ĶÂB 0@ĘAĒ÷ŋļ=§â›j‚¯ékĒØ^…â^e= nĸ""CBÕUÕíVÕ]ŠƒŋūGSĩŊ¤Âi„AĘĄŦ_Ą0˜M!…Á‚#Ļ â˙÷˙ŠëøųذúÄDhxˆ5mĻÚīˇß×%mÛ5Č>Åî™ļpÍLŪԄÉoûķE*ī˙NžíCŊ§Ô ĖÆG5ˊ d§KøkcNÂaAŅW˙Ģû<3Ҙô´ôІže3Nđ_į_}ÖôÁú˙ų2 īM0ƒ<<Ȕ{ôŪˇa$ŋ%8ˆtâ¯O˙˙Ē ČŽßO4 ôęŌ#ļÚÅōHš E^˙ü]WN×&ü&hąģZš!š\­jŋЈiâ´ŋëûŽé]ĶOv#ú~Ęûi¯Á…A4Ã×ëũũëų+ųEŌŊmXA‹šJ1>Å4Å]˙õūąZ\›đĸ ąCŽ´Č1}?á„-\žgũī¯úvk"æžvRO_ō;σŨŋĨktų!čŠ;°™ „û’M+Z˙^×čŽh†&GFЋˇgā‰ų8ņ_Â}0Aû„ũ_ȄĶMĢü‹Ēö:KĶ…™LGi5uAũÆ“ČąDĄ§™„3"īäīîČŊ+.čDM'Ĩūׯ×$ö͆|~í? %~¯ë˙ZMÉCĐhYÁ= úí:j .ÛŸ˙ëīW";¸~qĻĐ0NØcŋėĪ}}kũ&ôí9_ôûŽpƒ8Dŋ؟öēĶUO$ūôžąaE]:؟ÉGoum}Å͆NˌŊũüCWkē˙$ū…Ž›ŽEˇú„ŽŪjÖĶuŌ˙ÖēoTęMöLؚü5Á}ŦhCK§kŽ“úūĩoļų˜B‡B E0ÂVĢwßũ˙#û]Ū2\kØãÕöĩ{˙öžĮ˙Ķ„Â!­&)ŠŊU˙~?ZŽDvžšfã„f!™ƟÅÎÆĖDZimƒ´÷Dc˙§¯k´ábíAß˙ézy÷¤ôÔ&…’ŲwvČeüÄU%Q ?qú ũũŅžFTžg~ˆŖūžļˇŅī´‚â@Ŧ|dOÃA„˙v›ØĩTØAæwø]ô›DĐģv“k§uĒČęMũŌģi:DĄũXAÃ4#’`ƒ ϘL'øÉĪōhÄZĩũdq˙ū=ĢČb…]ëëÛö68īÕŲwÕĻÃMéũ˙Ôá3{” â‹ % ?¯ū—XÔEĻ*ûÛĢ÷­ubŌĻá{Z#}ûψŨž‰Ŋw˙ІŸ bgEEõ÷˙KÖ kØ­vĖü?­T[\ŽéXoŽH}{õūī˛9aÆ ĶÚÚ}}7b [LRëš3…čŠ?‘F’ū?ÆęEū•|kũŋâČq[´œ0ž*->˙ä]Yė4" Đi6[ˇø[T˙ŋ^ũzŋ˙änŠ÷L"% É= q\*âĩŋĻÎŌˆƒÖÅ'k¯˙˙úƒ}a¯ēũ?˛8PŦ ĐĩŌÄiô˙Ũ Áģ”xib¯öœĶ˙˙§ĩę‡ųƒĮkčy+wîv$pƒ#4ŠĢæ˜#e36"NŌņ}Ģ#t˙˙"•XôīÛ¯ũhŽƒÍ¤žH øĻŋkaŅĶ$îß_×˙§ĒJŊה/¯ūÚâL˛=ˆ’'ôÛ_=$ŪM}鎚ë˙rcũģŋ Ąî{÷ëõĮUdâ/ˆ†[tƒIđD܀L'pĶí¤Ē|õķ=MušõŠŧ__˙ū˛BË>“i¨Õ.‚!œÜ &[ą]§öžŊë§č7oú˙˙Ԉíqq ZMb$ciĻ“^í;Jéûģ ÔNúūž% JAIŲäwŅ!Pâ&Î" Âi̝c†Ĩļ7úz§üޝZŨÎh1´éÄC(uĩᨎöēk ŽĶ˙ëõíwf3Ķ´œė¤„Z 4Ķ[†ph%‹L|?˙ãŌnâByW*äÕÎÆšn"H‰pĖApƒ “°B<Či6Žæ˙Ĩȃ¸°ƒAŪwŌmŋĄ/ow¯ũVė&E‹~ŸzCáKÄ/íWų'ŊŽEr ˙s0›Ųąû§Ax†ėi”?éĩúé îÂĶ'Ž _ ͒´î!."ĐjĶ˙ëKę¯é4.gõûųS>!…ōûš'˙˙z„ˆá„ГКŊ÷Ē&'‡āë‹Wë…Ε˙ũ.ũÉC°™Ÿ˙ØA„Īö–Ũd ĮkļÕĩ˙˙C^ÂhÄ~ŽŠtŅ HĨ˛#ŗ°āÂĶí^ĮkÖŋ˙ņ˛ ôđƒLŒ{îÚZ%nû$ §Đm“Ļ„Ļ×_˙õŽļũĻpŒŊßqûa3ÅßžA_{q˜a[¯˙˙ZÕˇNŽĐŗŊįKIĢKwm;×Ģl&S‰ū„1ąW¯˙ĸ=QÕuũ}žˆĖiæU ĩ_˙äwDpũ?ôŅ ‰É˛*ū“ ­;UŋŪFûu¯p…„@ī%ÚöīļŋĨũČ8&Šm?îvVA¯ũ˙øĩwĨL īOm~ŋúë†Cīöˆ°Ÿģ´Û#¯4˙˙ųtFíSÍöá6}ÕūŦ éHŋö¸ˆ`Ģ^-‘!Ģ™ßėWԓ¤›^ ΋wöŗĨ˙ß^֝ĨÉģƒģÄA„×í­˙˙é5ōPû4žũ´ú˙ĮųÚØ$H.Šđ™‘Š‘'Ŗ¸‹L*cl%ũW×HwP­y^ļiĻŋũTčŽa(fŋĻãæEd"Điũ‘žžū)Šę™NEŪ" .Öũūĩŧ&œ‚PÃ×˙ö!„ŌÛiī÷ĶÉi >q ø`ã]ÍfĮø‰Ÿģí~×}ī˙ūĒŪˇDqėiũ‘ ėÂᓅ;„AØMaŦ˜æ™’x=à Z×˙˙ĩ#˜MÜY Rvq{č‘˜Ę⃝MÄDDDD‰ŨŽ.˙ų]ĩõļG0„âe^ųķūĸ̃WĨ긎ŋvE‚(ôáŲĄūÚiČ:ŸiHŌKøƒ û×_Ē˙ŽŠŅ+}„ú“xNĘã uČĮOļ—äëˇ˙ú§]‘ŌeAĶĸ8i„ Ģ_Á0ļ)4Û õ˙˙Į iBAÕ~v˛h×Ļ~øüD0ƒ_jŸ˙×úũIÄ'eūœRŧ‹ †Ÿ°]q:oļWë˙¯¯ˇ“Ąö>Gßû×N“h”<— ´vMüD0˜¯Ĩŋ_úū<^ĐvĘī{_é7I“ƒ“ĄLėsž!ŽŨ5z˙äuC‘Ňø!ûx×ļēĒ‚ ümčQ•rcŽMĢ߯ĩĩ˙úëzÖ÷ũ/žIÚ Á3‚Ŋ4ņi­6+˙ÛnĩmßY¨­NÂÆß˙Ķū‰E‹Až"ãČWüx‹í*jšæ‹÷˙˙Dq†‰˛s˛šĶ<÷ũi?qgÉ4à ;Rfwâ-}÷§øvë_ú{ fsĶʲˇÍ˙îģČėŠīĩ4Ļ: ūƒ §īm~ĪĮ˙ū—"ÃAĄ`zŊš‹[OîĩØ˙§~ÂĪŗ~ë{â!”:ŽØ¯ė?˙ūôčŽ1d͆u÷_Õzũ‘]ēčC>4Õŋņ3TM85¤n˙˙õ}ØA’ßb˜aSúē×úúw“vę;3[š“ĸ¸SKÄZ¯aĒnŋ˙õĻŦˆ=AJ":kôÅkĶú#˙פÕ:āƒ(?Ņ!"×Įø†â¯Ŋ˙ũxá2;v!?ˆa]°Â_¤˙˙ü]ö3A—?uLȡų‡Š\v"Âi†ũ/˙˙äâˆŪ* ņ ll0•˙˙˙ČčN0´˙ė'˙Ļ$‡iˇëõđĒŋ§‘ŽÁ>?ÄC Š]_˙˙ëŨŅ'ˇ! ĩ˙×ėC ö+ ēüŒîĒé:vlĖÆH˙+Î &Åë˙û~ëé7ÃBPîVûūũ>äß]§i‹V×ëøë_U0Aū!‚{m?˙Wę?IļFũ4,ã'/˙āÂų41 .ÛN˙õ^.N/§Š üEØ×õöũ÷´ôÁI—īũ­éˆ{‹Ōoõß÷¤ü äđĶÚĻŋAūžŊ7"ŪH Á¯"Įų7Õ´éųû˙ŌŠ'úpņ~ûũO˙˙]=Ō¯…ŽEO˙qÔSkú%‘@ÆßNúŪPŧũSßTJ˙˙ūú#‡~2$wūDŸãQ¯ûĢ\nŋ$îđ@Ä2§ĶžÖ˙˙Zö>¯_L"lđ§CU{÷Ė´Ģ&ƒZúū´ĮÕr,< ÄLĶ]ØJ˙û_íĒ&˙°žƒ@<<Ū§f†f=Áā™™?Ä5vœ_äé]}ú}1Âv)ĩĶ÷ūž+¯¤IëĻ^ ÉŞĘC"C(BĶBĐ/}ļ›a4G_ޝ‘ÄDĖuqpk֝á^Ŗ÷y'NˆĮvL Ķ&| Đz̰_ˇZŨũlXT÷nŠ˙$ú‘˙UjG4Ú%J5ޚh4×˙ÉÅÂî"í°Â_RQõߌEĻ•†—úO×ĢU'̤õÉØKvˆĮĸPŨ˙äGjDÃ/iŽĶ}ũuđgäÂv)ö­ū8ĩöG~Mč÷ĢKß˙Ŧ.J(3ČáøˆeÚa1tĢōPŋQh5ëÚ~ˆßęõéSôū×}HíĮ×KũŌiBiČcpYâ!…ú~—ü„p„Nēqm9Oëk×˙ļŋĮēĨėúũײSĖ‹ ]Ļ-o˙„""îũŽž‰F+‘†EūĮąõø˙õôíŦ&fDqúd#|OÚÚi×OôÅZkīõ]Uk÷Ú^ŋĨ˙ujD Đ´üû ™ˆŧ\]Žâ!Ļž.īTĢũ×UIūEG_ōO˙õ§Doģ˓Úiƒ6-ž–ĖáaZ­č.ß_×īëäßũ'˙t*´›~!ō:ÕTDę+HRļĄ‚i;ˆpišŸš}ū‰_Dc߯×˙˙ņ×|Šī°B ø&ú‹ŊIĐkxw…°ļŋū‚Ņīîæi}kú˙; NĪ ébP.ňÕĢ ĩĶ×ė&\ũi۟Ö/˙õ¯DX§ É2ØRtBĶ@ÉÂļ˜Ļ)ŽDˇÅÃŋīĩŌâ/íŪę×ûôÚ%mĶ™ãɲV‹r–#ˆ4~îî-†ēLSų1÷TáĻ~¯‘Õū—Ņí0ˆbd…+Šv ÂvŊߊŠh5˛:[á’>ƃdŖūŊqČæ›Ü™ ÄÜZšĄ:í4Ķ[ĩAĻ “°CôÄE§_÷˙ũtIú „4W„ g_)}b"!—h0š ƒ<Œž„;{_ū˙QĶn‰D)ÁĒz Dáâ"#ZŪgūļˆŧ Ũam¯ 7Pƒ("s;EÜT’ã?ÚjÕ°Ÿ˙CÕŦŽ}Âû4œÍŽN)‚ ¸ä1Bj¯ĘŲĩŋÚiũĩ_˙‘Ŗ§z¤a§ĸ7Ą‚÷L0ŋøŒĄÂØĢOÕú]R}§ ŞŅėi7 CĶ(N—ė„2ē™Ēū„E…đš~ŋũB’‡„Ņ m>ŖD -0ˆcßéūŗ´ķ^žØ_DŖČĖÕŊ™@õTˆŨ„ÂÉŨ?÷B"÷v[3ŋ˙ũYÂDql&P)Ņd§ĩųī^fęÕ§ø°šÃvJˇ˙ĐčjäG Âf4Ėŧo!uÅĸP¤‡Ō Đ1ēŠā—`šjÛģ˙˙¤:tGvšÜß^ôôšũzxˆ0M1L_™˙ũ{]:# āmQoxõëôG %Ä:ĸ?ō[ 2Ą™AãÄC Ķm=‘Õũ-&Ņ8Ų Eĩë…ėoz Ķ' ę4Ŧ˙&åS[ %˙×_öá„ívŗM.G­/CWL'  ēŊ>âȝØÛ_ūGWØHqR,SÎqT0­­|z]rqDo †Z“7׈‹LZ˙ãôÚ#wŌ Ųš &šXė,-č/îŊ7i„”ˇWĻLø0NŠÛgī¯Ģ­xNĒgF´Å ~NĒJ<‹×Å%ȝD§­´íéšĪüCúzîhŋ‘Õî‚ģĢĻhøc+…j ; ’_B+ēôč&Â#v”3A’$Įōœí?ņŊpŋ÷č_Ũ"7a4ņ 7m­}īôÕjŨ7áƒ×ũ_Ä\5mĒŪNŋūÖˇOQŊŠƒ×ũŧŌoi;LņœÖŋsēŋņ .)5°ŽiŖGä(ë{UNJ÷  đÂj!ۙÚßũ˙H•ŋBΊOöÛž˙-Į1kÛ]Tā‡ˆ¨ĶļEŠahFŌ"ôA…ģū­é'k°ƒã9õ_§ū˜†ŊŠl-ŋUõthC„ãoL0VÔķßëŨVēČcõøõiŨŠŊw§˙i?­§bĄĒaīß˙ųDéÜ0AČ!˙ĩûˆƒ Ļ*˙ŠŠļ¤īēÉ|ԃ9 Ž÷4˙˙×~Eu$÷îP_˙¸†a+?r+éuúļņTâ  Úļ_Žŋū…Ū¤Gk1_0˙aE6ļ˙_­Č°šņk§Ģ˙õí}<œdGzd ŽG§øže †kcƒĻˇ˙čAĢĄ *öëKũz¯á>˜Ań4?ī„ŅËA÷֚ũŗ÷ũ= `ÂkØĻ˙˙˙īDqM? ™ 9#cÁéáA6ņ ĩVŽi˙øhM[í1I˙úūĮOĒhŽ;zØAĄdA‹ôFīÂgÆ\,X[ļļũvDĻĩzũ˙ŽžE‡č”tíSëģqcq˜Ļ5Īßâ ÂjîŌŋD¯ú˙ĨĶ×[ĻúCi}™™Åˆa5σ˙aUą˙ûëũúŧ‹äq‘^č˙í;mĄ'9e4ÃWŪŨb;IÁŪŋĸWūF’5ô“×tßO˙ų÷™„+Šƒ^Ŋ(†kiëūŋ˙ũ!ûïĶM-28ˇĻ˜ˆ0¸l5Ä0žâĶ˙˙˙˙ëãüŒuO"ßLȏXĢūļ×˙˙×˙ũĢŅ2$H7)DîՈ2‡ TøģüĪú˙äzõŋé˙×ú |?hA…ˆƒ'4Õē›kš˙×[˙´I˙ūšmĒg„(؝ˆˆié[V×ŋ×˙ŋļ~Tŋûã‘c$;p™ā]>ĘŅPˆ3bkŠl-­í˙î Ą˙mSßũū›§tîĖĮŊЈ†iŠõOUlũڜ„?â‘8zõõȃ…˙H”6ôņĩŪŦ4ũU{M-ÅöŋÁÛ\Žw‘_JA„43ŸN ĶĩÛ°Âũßķ*Ëī__­ŽēzD‡Ļ„?Îôb"a:ąWŦ4ž-;§ß˙¯îû­”úb!“€ƒAĒž+ _ wŪŽhŊzúų!Ũ…õ&âĻ\Ęú˜ˆšĐ†ƒZ|Žk5ö•Ú~ˆĮō.*øĒvEv¤žáj" Ęn)øˆ5Åm…>õA?C˙ôōQ ” f×Ų8K¨&Å'uũ~Û­i4˜N$ô8—+5ĻNûĐa4ŋ¯˙qú\œS°@ũ22xMh! šdĩpŧŒm]Ĩæ‹]úūŨˇ„@šŲĢu ÂäpÔ Ât] e9˙Ąâ­[OđëûßNˆDc°ƒĶôë[D­Ļ3Õę˜OūÕ:vŋgã„ŋŦRđO!Ģ˙ē#†Šš43ūŋzkb•tÃĸW˙˙ûD¯„ō?§ĩGbĩ¯y8ĒhAĢļ˙Ķäf†Žä#˙˙mXUĨ¤Ū„ņ3?ĨãŨzh‚‚Xao˙Ē }0×ŋöņū˙]y -1ūDņ–=äžÃ6X×ßją §Š‹Oŋ˙ûäŸŋdâÛũ?[äPÎÁKËŧFÄX Ķëáü[ŊXAŸ_zä[^ü‡(Ų?õĨŽë`ī˙īũw ߟĢô-žGN ƒ'ôČŅ~¸†žØģŦĶūF?ØũäXĸPí3†ëæ›īqTôˆŪ˜Lņ3ú}.ІO{kũ~ĩõ¤Ûēd†ļ›káļ×ŌIŅĩ´!žũ×üDCÅX_÷õú¯ä=‚!NH/öĪÎhĐëÚĶĶÉÃí ‡úFŗÜ,ŋ›ŨŠM6ëK_ũ^GL' „ÖÅ6 Âi˙âCaö5˙ūĢôxAöĶZļũų>)m¸B͌ ŋŪ!“~Ũ¤æü‹`ļ?ĻäGwĻ#ņKęĶëŧjęļ2@Ķ+…™Ųv˛DAÄC)ĶP~¯_CūģO&˙'! īŋ×͝wL ėü̧øTÄHhä…0ÂÚéx_îŊü2\„0WÅĩ™ß°étJ× ĶLfb÷˙[Ģ!˜Ũ/¯˙ö“ŗÛ]Čƒ¯_ä¯$=­>úü^ÉąS (īĖí˙ēõ% S']U;ĩjĩááĶîļztĐf‚?˙‰NÚ´›_ߨũ'vĐgĖD2(ëc˙|×õĨĩĸQĶ$Ė~Ģ÷*„!…a/[õõūßM3c"!¨ė%ūß˙ũh×a„‡9~) ~ŖVÕá:w]GõŪÅĻ;ˇŽŸ˙ëϤã < Č`‹Žú$ÂļŌĩÍ˙é>vfA­Xi:¯˙˙_!ˆĮmĻ„ŨälĩĻ8ļĶ˙˙ÜA‚§bĄŽxõ˙ûõiē ãŅ'ji’â™™1œ‰ŸF´udDžE– Wao˙ƒAˆI§˙ēąÖšlŽtƒ„Fôôf€0A¨ f‚ ĖŪĄ§bĩ˙üC ¯uÕ~ĸ–Ž:û čŨ.Ođši˙ĄšOs;˙Ä0OąÚz÷Žén•Ž‚v‘!ú÷éĻßö†ģĩ˙ņc˙A"+˙˙¯žƒēMŊ:#wí|D5ąK̇Ķ]VŦޝûĨu~ˆŨHąÚë“|Šúø‹W§ž?iđ_˙ī˙ÅtĶ_ę˙_ķ"ėíBv§ÍDYũdO_×˙ŋũūĒ:˙āÁ5MöŊ‹UŨ úõ˙˙ūĩũßëԈ‹ Zt"VĮ~go֗íí×˙C˙ûz~ŌmUŋwã˙íū 9\nL'ä˙Ķ}dîˇ kõ|WĒvE‡&>͐Cõ˙¯Ķ†ˆ% Ÿãßë˙úuwM?ŗŗWõ˙ČŨˇ„ŋũúęëŠ!÷š ĐOū¯Ō~Âθîŋéŋ˙÷ägO"ÃÂeYn™&?ũũGv‘8fŸđøOõ˙Ã@ĩ]7 Âf͞=G˙˙üŽwøŋûÕ74˙˙CÛZ~J!P˛@ēÚ Ø1ú˙ôô“fLÁ×˙ģ°¯˙Úė¯p“p´­˙ō(áūČŽĶNūÖÚW_ôē˙iÉÅũEû*ÖēZĐë˙Ķ#ŠwŠ‘-ū.Æézú%/č#ē$;Î ūf:ĐLŠÅG˙K[Čᡐa…˙Š˙^ˆãũ?]:áPghZûj“õ˙ī˙Z\ŠúSA IÁ ×ßKõ˙"Ž˜û˙Ņnô­vC2~›†ŠÛ˙˙ü]=(L CC1$Wž. Î8]­íũĐūמ“ļ™VIÚ÷‚„Aô,䍉B Ekgī˙˙KŨŊ0ƒC>:2ŦŠt$ŪĨ˙ˆŒà E˙Ēáz {u´č›°ƒOIi ’j‘”­6Âúõ˙õé4˜Dcˇ8Š ˜OO¯Äb­; ß´ĩ…ũôá?ëp.¤hĒģŊ˙˙"Úú§DAŨĶ “$‚ =úÄ4ŌėŅIG×ŌbģiˇsŊ?Z@Ŋ}ܒʴĶt•/č[wTÂN) •DĄ§ũũHĮ8á]­â¯ _ĸ1û}Ôup—IR—žŊpa5í×ūŸJ—HŠīPƒ: SĸPõ˙čDDZÕĩ˙„üwŽīēØJ’ ĶŦâ-lRjž˙]ûČįäŸ'ĶČg -'ëŋđgÕ&Å-úûOļŊw3ШJ5Æä”nĸ <^Ÿg˙ūļŠŊŅ+h“Ō'Ŋ÷ÉŽ-ãņ*Đi¨ĩOú īßëP‡ûĶ9 ˆšŸęéũüŠ{k‡¯OŲP2ōKׯĸ!§ŋ]Â+;ûĨ×H‡.u§‰Ķ8/Ûk˙UôĮißϞ¤?m[ũü^øĩ͆˙đ—Ã^MŲNz¨0„D5Å*vûü‹VãDp„ Q˙‘˛đeÂĢnôß|˙Įĸ;iŌīū" Õė7_ém/ũ;_>ÍĢ$Dä]äW˛ßˆ‹[Z¨P˙ô•7#ƗZōs†šûNĪÎhŊ^ŸCDwų†xC6sP@СËÍTW˙úZ˙z´"M1¸VĶŨĮ‘Ô×ړŠ";ü*iĄšzņØÖŌzÕ¯ęŌÛTīcÕlĪŽx{õ×t­];Ķ™ųÔ{¯U¯ôŋrY 4Å[…íAÜäs_­_č”tJ´‰C¯„„Za¤ž—ú¸tš˛@ķ"ƒI°ÂÚĻÖhŽ@ũéoúNŌMȑj›…_RqW×]xˆaU‚ JÃą 4ÅEŪéØwãcĢ˙äęõØ/šö iWũt†‘éĻ|ĶQ:&Š´ēú_ĶÕé+k˙ūĒ -:×ôēŅģSÁüČčJx=1Ãû3tŋ˙˙ß˙§ŌM Šũ/MĶm]ž%s.Ԅ„ÉÆŠÜ$ƒIÅ˙˙˙×˙í;V­ēũp~ø@텂"S”n6iØj´PuÚˇ$=/˙˙˙â"÷}%ú[§dC0BD7lUÁŠĄ˙^˙ũu˙üEĻŨ˙äãH†0š)Qė†ÅÃUĶĶ÷§¯˙˙˙ˆi†˙¯’§j!Į ›TȀŽjšŋ‹n­mußũôŋŒBR#ũ×`ƒöõDōÜv#m{a'IéÕnŋŌŋ™ ˙õü|ˆîĖČ .]œzĻ™)ãŧSûi]+×ôÉe”B×˙ûÚdqDcÔ ĖÁč_ך!Ã#ti Å§wũ†S„HgcÂÂāõŋ§ęžh?ėij­š:qŽ Âwj“kü‹F?PAĻ.éîgūŨÛĸvīôš}§iz &¨0ŠÃ ¯Ķh&÷AŠfBOîė/īūû¤˙ú°ƒRj‘m,DFƒ:å?WMú$ėáwi´×ą¯‚+Ŋ{…ÖÚũ%RM˙¯[Ũö¤¸íS#MD-­VÃ˙Å#ŲGôLz^wsC_˙õũ¤ãĩN„C ;´ßũ¯ę_gu`Â_˙ũoI¸AĒđŽĖ&Õ;īđŋ~ę̝ļc˙õkŅy¤ėœRs7ÅV"×°ÖōQŌūÕ$ēž˙˙úâŨ[Ō$ú0„3NLVUÄZb§é^˙ąZ^ˆp3|——˙˙ü5éÚV,†Kō͐ŸT˙ëŨ/VŊ7˙˙î”Vū‰[°ƒ33f̰Ņũ¯záūŌm:'&ôĮũuüwŌŌVČŽEˆAĄwg˛>c­ątétF UĘqŪ32#—ųŊ¤˙ôûÚÂjäŸwũ6 5÷˙Q˜NˆĮá4!’ũiÆÃIvöūŖĒŌmŧ„Ũy4Daˆ† öŌúW]ē~IŨ„áü)ŠŊĪÎ Ĩ˙Čą Ļˇ¸AĻ Íkb¯K}-ũ'Ây&ąī ÖĨ‚?y'ō//Đëiģ˙ÄpŌĒå8Wü/ļČáČŨä@S36ũa{Jú_CīĩŌ ļŽAÁ>øa: ˇR÷JÛMeގã>$P šĶú~ŋ÷ŌnĒÉ˙;52ßÂĻ rj$į˙uūļ†š|-ƒ Ģû_ūGWũęÂÚĶŽūŋú$ũJqŸ3—|Öę;„íŗ?ÖŋĢęEzzŠ–´-?Ņ˙˙ŽDvēß2Y[Ēx¸=õ˙ëDĄÚGˆÅŲ„Z_JŸ˙­öÆė¨tØ˙õHNíǝ¯¯]:ö”Y=¸@Ü_ë˙ųËkôī„ųæūø† ö*ũÍ?ūŪŋŠŗ Đ@ØCąéũ}*kė‹ 2 CGúđhAŸÂ ú}¯˙_Ąp´DO,dĒî‰saGŋ˙ũ?^ƒLá{˙ņ ˆazm„ŋtĩūF!"Q Ã'OH8†§i{t˙­äžžx0Q˙ûüE„ĶÃ˙úäsW&ü)!ĒJâéļĢæ~ˆã˙Ō×&ūĶCRŋŋĄÂM8m÷üŒiWtú‚ ĖĪwI8iôÛOĒ˙ũü?Ú &N"û{°FBi§§KūŊ0Ģē%CXU‰Â-}„Ģŋ˙ØãöDvč4Í+į˛ŨˆˆeE.ŋņąé8NĐb­&  ôĮÚ˙ūĩôō$4J* ´â-&Ã˙ęŊäĸŪD‡ÂXĩŨ_v›ĻŌmŠk›ėˆ3j´Îú0xā×v›fzō? ôĩyíüiõŋõo_kßy+h”jĐq 32ė‘”#<Á𠇏ÖžŋCÃNŽ“]'öÂ˙%˙[JáęŠ?öiœ‘éfĘĪ„B,'á™1kØ˙ĐéôN9&°f´ÖŧëˇŌīühkīéÚz`ˆ=Ŋ=;NúgAD3ŌŌøo˙ë|f†nM!ĩO˛L_õ˙ëŪ¤XrNÚé0ĢôžČŖûiˆ†“W4Á˙ä|÷ZhC60™<‘Ũ3ŋRƒ_˙íę˙ÖŽëĸ7k$;ßäōCéûŅ6[īĩA‡ū†ž=ˇ|ŒƒUąwëũ"‘ûKã읒Wõ' ‘yW_Ō­ĩŋ˙Žúģˆ28ˇĐ‹]¯ūŨ~ũj뮓 ÷õ„˙˙ŖąŠŌW_÷ÕŲȏ‹>4Ķv)KÛPŸø¯â*/Øũ§_ īÄ5Ū˙ßôÖßŲhÎ6Žũ.Ŧ>ëŋČQ×__Åk÷õlˆšV[3×ßĢĒnEwęCB%AŊ„¯o÷4˙ūGZũ?ū×ũîˆg60 bÛ w•bē˙Ķ#ģíŸ [¨1%Ę*)Šēl/õ˙%ĢZũv—˙Ķb!Ļ=l§ŋ˙ëędâ&5L(ĢIĩVŋdQüRūž‰?¯ŽČļɲŌ9°ĶjΟ××íRi”‘ÁDh1ÃT˙s?~‘(ÉĮTž˙’KĻÄCZŨîŋ˙˙É[D‡`ƒ'§Ą‘•&˜÷ũ6Ģ4ęŋU˙õķ;Fz}9ÚCĶ &Ķzú˙õŌmƒüN¨=ŌíĨģj‚ŋīžâ˙ũd‚_ģQļē˙ūŧkaģŧė¯gä×ÛÕŦZĢqw÷ũŋō0īë VVęë˙ū8Nߎ"4ôĶNÅAÚ oUo˙ޜCOüXÛ__˙Õ[‘bvJ>íq .žâ/i„Ępŋú#wy ŋ‘ŠÉSiˆJ˙ü}ÖgÁ ĩt""  AĶM4A“‘dū×K‘xAúŽ™6)_˙ũ 'đ‚!En-DDDGžÅum; ÚIø’éũ?˙ĒëŊ?—˙ã§éž+ņūšĢ˙ĸ8ovG=déūÖŋ˙G@‰Š14#ĩwiŋúkĸOˆ2Aõ˙ūĢ˙¤ėĐRBĶ,bĶ÷m…ŋøätŊ‚ĩ¯ū¤uzi}wH0ˆ}RĻ"îí¤įæ˙÷ôΌã'B ĒŊ C0é:lĪũqØ_Ú%pžSŒņéū˙ø°švá­­k_˙Ļū"!…a-sOŅ'^?§ŽˆĮ}ĸ X_Ģ˙ÄC$ęí7Ģ´Iū–ĶÖtūŽÆœSjÚ¯OūņĶ Ķļ ÄüŸņ!_^ņâ!§ÛKŌūũ}ˇōŲ{BɘĻÂéŽ˙ßęÛö…Đe /†ąJ§Ũ?ÖĮęõä3ÄA‚ 1WŨ˙ˇKũr#ÖīÂî"×§˙ë×m5`â KąyûČÃëîĶÉÅßp™ŠĨú!W# 'ģ´õo_¯ŠÚd ņ5á…íĢgíB=ë¯úĩĒĐfƒŒá2Aßjy‘ĖˌÁō$1¸ŋôJ>ŋֈŨ Ī™įˆƒė0I×Ķ˙˙âˇé†Ēž„4ČB~#ÉđD!„ō-Į{õKūú§I´Õ9ĐSb˜¨īm˙úú÷龜Ē~P@îõTüaßļ×˙¯TN7pĘ Á4Ũų˙¯ˇ˙:#$>ÛZNũ];ø3Zö/_˙ô=ŨĶA’COÚV›û¯×õTī"“‹KŊ"1îˆŪČŪēž×ú˙îžEļ˜ Ä4Æë¯Ŋ˙Ũví>ü•äpūžEĪ_Ą˜†˙˙õhœS(#ŧdH(’&˜ÛĨ×öã÷ ×Iuž“Cϝ¯ō)‡ôôčØ!3†œ‡7pž+üû¯˙ĮK˙õO˙üCÚmĨúĶuú ¤­5LœRB\CMZö˜~—uéŊko×Ōū ÖÅ_õÛ!'äîî`ƒ.V֚kųŦhŒ|kÖߏūõ#ĀTŧFŽí˙áĄĨ^œZp„˙vļšŲœč'Y'ū˙^ēø˙ .ũĖāûÕ÷’‡wˆ´ûÚøI?ī˙õ˙ōÜ\ĘĄ‹ ûm"2<Ģ^–ČŖēÄA‚ 6ĻŊ×ūCũ˙ššķĪáF“Û oũ‘éūîŦHpwv*-uüäÖöĩŋëzķ* Ävģؤû_I~‡]f•i„ĶČ1bßoyųtû^­ū,ų'NJ E¨­o9?éũ1Ûßv°ßūũ7_ū5iđa4ĮuŋŽĩūĻJĐČŖĢ×âž-ęŦ]ąõ÷Lđ9ĐŦ{>Ä´)=ŗ=˙’Žŋ`˜‹†ŸÚØŽÕ_a4Đa?DĄØ&hDsOĶũ¤ë˙ŌwˆˆšAǧv ˆčB#‘%‘ÍvƒBėĐ˙&úl&8dt˙˙Ęŋ;ŠNqe „ "B=CNEļ‰[č tøˆ4Šu×'_î‰Qö+M\DEW[ęDŅÚ;5dŲO X-í…_é2qW¯ôˇJäW ¤NxÅDČk˙H˜ô8C30cV˙Ö¯CU]ĮՈvدūƒĻB‚ÎņÅ;ų_ëˇ{=<8péÜ?ˇD­ÛÉö˙_˙r#´ķÆxÕĸnBuŋ°ĢĸPė Į˜ū˙˙ĶZ%o´ÍŔ8[üqjō+ƒ´ČÂ>o˙ž˙ī§K÷SÄ}œBib!”Bũ(iĶN‰ÆŅĄ9iI5Ž~ŌÖˇūŋÂ#„ ĶÄ}Ŋ Ē÷đA™‘ƒīöëīŪßZ˙Â}†HvŋČôõÃũĪ‘Ķ)o˙°i_׃˙ĩîŽø"×o‘l/âŸDĄÚ‚ÃėUĶkYž|˙Įúų)šŠõÂ+ũūČæŸpM}̈j)ŠOˇ˙ũ_j×ÉČn 7ûé+dpô?øĶW"@y˙˙×ôš8W„}žiŋí˙īĸ8„ŅŪFEG÷„]ZH=˙ũiôȂ#™4{ÚNš§û˙×iwé§ūL!NŽ“ąJžŋ˙˙]"qB Ž%ˆj8kaF‡ûĶūN!¯Ršnūĸ"&¯ŊĖå˙˙}­âČeˆiŠl*úA˙ZÚZDŸXL !ŅZyÛÁŌÁņ{ĩ˙˙×íĻÁPi–„điŠģĶkú˙iö°˜LĐ[ô×ëîūÚúēūõņȰEzh„ö&ļûŋ˙×ųŊšûhXM1IĮ˙Q˙Tōv×a>°ÂĒ˙û¤ōpĶė ũ¯úâ!…ļÚ¯ĨíÕihģyDs;H„Zv*÷˙×âũ‹J3˛ˇ˙ũĒī~—ˇúMĢÔYņPge DĶ´—õūē¨Nƒ"ĨÉDÂĩū4!ß[…ī˙ŨU ÉMA¯cĩÜŅ"1ūŦqđ‘'qHéÄAîĶü¯ļ7i0A”Č)ka.ēt˙_é=„ >ī‹ šÄs8û˙˙DĄĻgÆG+ĐfŧD5­ļ‘ã_äiūŌˇ!iŨ‘Í}ž"ĩ‡ëë#ŸDޜZo’Ķėv˙ęßu´Č¯Doâ Đ%äĨņÆîīũöúOI´Jäž!Ķ44œ]Ģĸ8ŋũSĨuiĻS‘āLÄC#āø7}Ú_û¤ō#ŧ2vč”4ΐ†p}ÖõnĢW­=Pe@ÉČš‰#ĨÂk‡2&đĶQ÷ôP/ũZml š!‰Ro /ëŸŧī×˙Čą‘…Ø@в!8¤tGĪ#9 ė&ŪEÔ2“¤C(4Ÿų¸?T­!ĶŌ$í2t›]ÃM&Ø]S÷˙úëwm; ĄƒÂ~0„B?mĨaūKHÕzA†ØA• ų§MĄjبģ˙KūŊĢŽD~ŪŠŋR(í†ÉGĸōf˙ivJ×ú¯ë‘™3ƒ.}bŌâĶMßduüŒŗ\nđš'ȃäŨčŽ=ôé˙Ōė0HA­Š´¯îJŋ­ÂtGˆŌI4ņQõëí.×\'ŨēÕqĨŽxÄCLp×˙ˇŋŊhY'M5Ũ_¯ūŋŽÂBũū¯šØc #ĩ´ 'ļĖ˙˙ëOßô”DIÍö×û4_¯û´ĢėEũZiS:ŒDXIØ\Î˙ūãyüąâ-Š[Ü'ú%_Ž?¯ä|ŋâ;Ļ;a&ŌsO_úĨ¯ô’Ä4ÕĒmŠĮ~ŋúúēR"Eô?áÕ¤gb˜amWĩūOßÖ!ĒøĐuëëéG ˙ü=ŌLC1L0K÷ūF×t’Kvƒ\öū‰_Ņę|͇•UÖ-1÷Ĩëū×\Dk{âá˙˙W\ūé˙`ÉÚA=q­ēë˙LiVM „~ĶnĶUĩū’lũ×ÚéûŊV¨ī†Ÿē÷4˙ŨRíà ējû‹ĩáĨjī­„¯{kš žŦ%h1Kvŋáõ÷ íwÚÜD‚ü֞دížgÁũEHS3Zž×üˆ$´BČ!8”é¨^˙ Šę6¨0YPúIÚĒa„øbŋëS䐈‹ ¯dĐiäv`„uƒú%nôXí&ĩ&ûÂv•}W2J=4ņ*#pa"Ž› ˆÃ~—#5Ė<]ČĘÂb!ĢīK ŲÃ33~ĢDDGēöŋKĨ™™œwž~/kie8EM *iõŠ"q˙ RĄTõZ]ĸ”ņkÜ0špL%˙a3ÆQh”ÔģßëK˙ôĘ(Dtēûˆ‚\”]ũ0ˆ“1V¤Ú*ëĖ´˙’Ē´­Ĩ^ƒBBAséWč/ëŲ÷σ8^ļ—TézĒũV™0ˆĮĒ ?a>0ĩ=éŊŅ7}™„üČQÅdĮõ­}x¯­ÛééZz×é? õĶkŋikū•VŽ•ĶŅáŸZø˙ûöûŽUģČ+à uÃI=Í­~´•r:Z°ƒ˙˙⟒~…ęŽ?x0K\/_KúõĶë˙˙˙Õá;†C^JŸÜ„ĢjŋŋUúUTבåJ˙í¯ÖˆŨęh!˜ËÉë÷ ö+[ëũ/÷KīĶ˙ëũ×§i œCOũ¸‹†ģ†ēZ¯ęˇĩŋœ#‡ÖŋíûŠÕ"PgÄ˙â -~ĩĒęēÂB?öNiZĩũAũx÷Iö“$ßũÄA…AũWúūđÚuŊįŗÅáuę­ĒD‡d¸S0Lˆjč&Ģõ×[ēiœ‹éę˜wäŖUëČčŠĶŗã˛šAõĮTŨiU¯ū\]3Â+üwę—Čę˙^÷„™.ÄDuÚˇIÕúŧš Č!“p‘qûÚë˙ũü:“‹„äqĒ•Cū"UÅwuë_Né刈`›bĄ¯v˙˙Ō#w )Fö™Ü?˜|E„Öˇ_üVōqp“žv‚dŪÔ\k˙×ë"ũí3ėŨžŸüC áŋ˙|‘÷I„˛'”NÚæžŋöĮKr-°žƒ÷ûø†ēĸƒ˙Ûú醙6œ§‚bKí°ŋúˇÔuČŨˇdâ›GbOßõâ-RũôëĨ˸AŽšbęà ļô¸pŋļ•í„,ƒ4˙ž>?˙‡ö?ĩĶ%ÁŨ¨‹}Ĩx#÷ęĩŪEŽņžÉ˙Į¯OÔpēŧœ`Á:¯ČÜV­¤ēn‰_‘xúŅ' ė&„™åÃūžŽšū{Öž+¸˛q=$Éš9­ŠėŽ­˙¯úŌ¤FûTe˙Ŋ*á„í8o¸D¯ÂzŲĐf†Ht2bą [÷ō,/}¤›zDcˇBŖūD‡œ5\¯|•MúdXĒa33Ÿįa 0š¨ĢMĄ˙īb’}5āŸ"ÔČcT„0á˙Uí†>ŽNBõ41ĶQ{ŸĩĨūÚîAĮ 0°ĘHüv–")‘#ēíuč”7%Ũ鋟„ žínŋí} ’ĨÃDqŗÂœx d1 üΨGcH ZŊ? ÆŋŨ&đˆI˟é‹ėwˇür$&ĩÕŌtDwŪLĶa†PáUÅÃsL܏î ÖéÄ3択 ģ 'YŸëP…˙‹Ž›ŌĐißüDE­ļÂ[ĨëĮĢr0dãiŨøˆĩkũw"X/÷ĢDŽ+ro˙ˆ~ß_ëũ|Š=îú}øCõûģ^ŨiÚ&â“AІˇ¯IzöÕzĸ Īž ĪĩNÜŅ'UČĄúí-+_˙‰Ųjj+ ū‰GúŠĢëM_q .ųÆSOúëŨWö„Ä X˙ßßŋŨ…Ū% ģmUŗ;˙ûūÕĻ?ö Ĩīũ{¯÷r\ˤRžô)[v„h&š"#ëĶvžißČęé}"VîÍ$iø‹ŊģkŠ:×ßH”^v–f.`pÂtĶí˙az[Z eÉw ĒႠ¯ī˙VŸ‘ŲīX­0OŋX†]§´Û]÷ü~›§N.üDXAˆL‚ũÕßÖŋúļEŽˆáúhŒw×ņuĢŋ˙æ‡ō3Ņ+mŲ üA… 8ŋ3ŋé Į_Mũß$ô›Đ_Ė”ŅÚ¸EŨ6×4KūšŨkȎđ’\on×ūF"ŋץČíõ×î&™ 1ęé˙˙ūœ-„ ‡™,X`ˆëØŖĮõöŋ˙á÷Ōáۘ’6; ̝˙ĄĶŌ#pÔ¨‘b"č4ÕĻÚ­*$˙ũknõÚ˙S$ø‡b¯ŗ?Á¯˙útJāƒ3ŧ8‹Aîî­ģI˙ūFYö=¯ë8íÜ3t4šm¯_"ëõ븲|Œi”÷‰Ņé†)<ĪOú˙­ŧ.7ūš˜¸ˆ0šÛ -ŋŦ/âÕŅ'Ø.¸AÚCģ[jžŋ˙ũ/˙ĸQ\ ąЏ;_˙˙äAęöü0“BÂã”o_˙ūIũ˙¤Ú$í Aâ÷¯õé.ĻŅ+õģâ Ŗ ¸‡ĻĒŊ™úZOßú]t™ 9˜ņa4à ģ˙%ŖŨiŌũđa(†ŊīŊ3¯¯˙tJ„ĖČň0LUög˙û…¯||hCOũÚĻà žžˇÉ?ŋÚkT´Ņ!Ú`ą ĻÚõõÆŋęâ"gžƒ ⭍0ƒA'ØXdquë‹z'imIÄŅļGá}/ņ>Š­ ģbŖô×KĮÂJ÷ š ‹LBTíÍ7äßūd,_Œ!(>ˇjEÆũuévFëDnĐy& Âø; jđƒLŽ=d”ä Á2+ jkŋh”jE…ũĐēރiØa_˙đƒ‹Ę ę ‡ī¯˙˙˛ {OŦ™ã|4˙˙ô´>dâû×l5\Îĩ˙ŋVÚtĶLĖxå=ũaÛVŌ˙˙ī‘Ũ48̇V![k˙íüz­BD­žƒ$üÉV[ũdW†]Ēí$ī˙úŌš8ĸâež"ļ)×ũũxū¯ ™.Đ9A÷§ėJ҈†LVŋ˙R..ēÕĶ w­¤!„Ôk~ķëū“l&¤ŪƒLy.™ n+ÄC_˙ü!˙ŊŅ+ŠVwІŋĩL?ĸQëבŅoéďBT.eP­Ŧ0\Ė^ /ĩÕë˙lR‡KhžA3"äŸBŨ­ŽöĢŦ_õĻŌ$÷Ũš0„ l‹ĸ‘Úe h>6†´û§˙SácõáÅø†Ģbá˙_˙üur+ęĶO°D00ņL30ąv]rbąÛkjæ‹đŧtčá ņŧVŋ˙ÕߥW‘mĸ7nęzi§Ļ°‘;zv™­Šl'wúˇŽ•ŋdrdov8ŋ˙ŪÅxééŪE†Šßĩ z'}/rôDZcl/Ō%D^^¯#ŋÉÅ';m73˙ũ˛ žĶžš'R7Å"P餛]˙‹–āP3iŠLáūāí÷[ Aˆ;§iûijékņīĨKm-˛9íi­o–;Ļ Ë„[ž”\˙˙äXh2Đ%21ûšúāáyÂ˙¨ëC˙úÔĘbb!§NŌģL5˙×UĸQjī^ĪGÎJ=v‚˙Ĩi/Öë˙Âdã:,īXEШģ÷ëūm…Û ˇ}_õ"ë¯éúë¯úˇ&ė ÁvP‚}wš÷˙ū,ąIÃˇ_­{äiō<*žFG˙éiåŧ&x3ˇcm+à Zë˙úˆiø`ļžg{˙ž?]˙˙é<ˇéž5w 1ąM¯˙øí1LZÚÚY§ëZu˙ī_īî“üD?;Õ CiŌ˙čDģl%}¯õßųŸ­ëūŌÃ}ß´ô/a7zū˛6hĒÃi6ĒēæzmŸ–í7ĐmĨķö8áײ(ķā÷؋LVŋᒄÕFÅwČ8ˆUÖāÛJÕļ+ü/ôaįŒ†ŠĢņjīú+•˜ˆšĘ´ôá°Õwkėl}ĸOn×ĒšīL„ėĩzÁ…ō&vÁ(C5‚JđØĨmŽö­„ĶôˇoúØ\'8‡~wæ-zîg¨A×;]nTĶA Âžˇ˙éŋDĄÚy(}ˆĩwadáĸNÁw ›ļeĄˆŲ.A‚h0DÁ¯_ZjúN§ÁöÄL4ÛIC˙ȸ°ëúAš8‚!(˞Ž×§dū!„ũŽŋ…˙ŌäãfdoÜ}ŽCŊú’uÂN‹>_Õ{ßÄuģŋŅũ~ēí2@ĢâÔ6.ėÎß_í}‡w”Jī^˙Pž/úūŋ‘mØL “œ¤pø=Š?ô5u{đC<}æ@—ą눟Ĩ˙ęÂÖ­‘ ×;Ujâīą_Â˙ë…Čą}Q™{émz}Ä__˙üCl&Ņ(„N=Ķæ­§MĖí'¯‘Cęôū‰GBų _Įuȝ!Ģŋ÷ũwŨ_r00t.ÛJ]"!…Úú˙_Õ~“ēvõūúŅĢĢë…úí4žÂ UÃ0‚Ģƒ†*īüTēDnîŨ.‰S_¸ũ˙üœã]°˜A“ūÄW‹8é§bīW˙˙yÕŋųĩŪ_ĶŨÚî“ëëō-´J`ˆ`÷¤"ÛN×3ĩ˙ūˇ‘Û{J$čOë™Į¨†IÕl}™˙˙!}tčž6h.,$!‚{mm_ë˙¤?ŋ´ōz}DCēnŋ˙%ĸęĐiĨw Ę„§e1HAŠ1ĶØ[˙˙úß[ķ@‰ŲwüÉmˆžÃ Z˙ükČļô ČâéāÁģÚļgÚ˙˙éԋ͏†HIŗ.L2qĻ8ž—wũ.ÚôJ1d~Ä­4ĮaW˙äu.õ¯ÂuaT'ҟg,ø¤`Ї¯Â{í˙÷ÕļĐeî"H'uõõęö"Ģ~JŨZa0ƒL&†×&.âđÂ]6gßōZ/ŋY!v2€GăaŠģģ˙¯˙UjEŠ% †ˆĮ{ĩn۟Æ*=_ũúô:öĶQҧĢjˇ˙ZZč'ų"o˙ü*c°ž˙ëÕĨĸVŅ7ƒÎŒē&ÂĶM*ą{™ß!nēõāŽ;§Ļũ‘G đüŽ?ų4á˜ŋīūGkÖûI ūGZ!ģīļÕvŊũŌÖߥāßwãüÂ õf_ãņŽ“ĸcА¤M,1=†¸a|ņīŋČĀŋõ˙\}|ãæTž„A“Zēŋ×UÔ{á¸aHȎŽÄ-4ęŋ_ųpą˙˙Uöqđ@ôņĻVŌŋūG‰WÚd[Ļ3ÄCęlCVģžŋ˙ū›˙ã„ĖÁ˙Ļ*×]ŋĄ‘p/žŽJÚ'Ė'šdˆC×_ī˙˙˙˙Öė øA„Ä+¯3īč~*­+IŊö"§T˙3˙˙_˙˙ÉÆÂŌÉ$)6×˙īíRŪ\}ÆģtíĩŋŖO˙ųŸ˙úäwČ2ĄĶ† ųĸŊĐ˙WüGŊ; ö×4ôŸíA˙õũhŧ Čln1Kēŋę˙ūd k Į­Úļž×íû˙ēúē`ˆSuŒØZļŽgû#đąØKé-",'Պm[ F°jŠ­ėxũitĪgXŠ´ņ}ƒ Zē“ô>$tŋ„ō NîėSiėWü¯ūč”4,2|úŗĩ¤øa4Å0Âڑ˙đ‡á/`ܐŖ Ķ ßjŋëõ×­´Đĩ Ö" )´÷˙׆4øb'L oLĄí)wëDī˙“ļG wg‚*b˜†c†–“f‹Ņw₠Đ'˛>b""""#´Ũ/×´*›ßX~ Ô…}DíÚeûx˙÷īŪ¯O'œC Ōms?_‘ãJ×336÷ ī×ũžž™ Ƃ Ą2*qąL5˙ĻÕ´NíâŲŨO„˙ų*øu¯i2 „a˜aUõÛ¯ęNŨ•ûkâĶ[L¨øę¯Dށ’ ÉP¤‡AŠN/Ũn)Ōo32.KųģûyŸ?Ââēڂ ĖŽ„A‚{Oŋõäví $vR=>ëģTÚ˙ɕj‰Ŋ4!›~"ŋöūũ}…˙ž!„Âh1Úšĸ\"Q׏‰CtļpÜė;˜_÷¯][";_Lr¤øˆŊÕ§ôúũôŪļ™;Âd LGũÖŋ~‰GÉŪVöŦíß6Âßú#uĸÔjœˆ:}Í'ØAũt˙ÚKŌh1ĶáĻ+JĶá?˜mĻSĮß^Õi„œ‡Y퍘ˆƒÛ×U˙ô:‘Í^ֈcBŠŲ kņ ; ]úņCDĄÃ!—’ėMFĶ˙˙˙_×fÚ~woâĶ}™˙˙H&ė ˙LD0´â˙ޤ]zģ÷i ÍšnJ}?ˆi‡NĒ˙#Ņ˙#ļƒ*?vÕ[]kû÷dwDßa}„ëČŌĻv6Ŗĩëz}n­ˆR‡øw§Õ˙]y1ŪžaX֝⠊M¯Û˙t­ @ķ˙ƒ#{“¯_Ũi=hIętˆ†Ŋ;Ã˙_hĐxAî".ÚĨš˙_ôívhà äÜkÜĪÍĖų˙Úē%ŗ„zŦCHSaoé~¸ø:Ú´ė—Bh÷ˆ´­…maŋëõī÷fbžĨ•æ­/ŋÛãęD}áœ9Į>ęfB¯âėS…˙ū•ŌŊõ Č ¯&85ēõûīá<œa! >fÚ¯ÅĻ;ūžF“ĄûéįÅ:…Ä4éļŋûī˙í7Ą 2vnģųdQ†ĸ¯ú¯˙¤G0¸0Šļ);ü>ß×_"Ū ƤQą 5ékũtõÛĸ1Ø\FšáÚįŗÅ‡˙Ŋ2;#ų‰S"u“‘˜pŸÄ×í­īōU{Xät ´N2ĐP÷v9ž/ô/kų'mé4Ŧæb™ã<$|4 5Ö-1]YŸ˙Å-+ĢŲŖqÁMz§éŋúũoZŧ‡†Ķ¤˜MiØBmõÂPÂaCI×_ßí:yØAœb" /í{ô–Ÿééš?ú$ī{UŠ'mIÃøŒvú‘ā*C^zb-[÷ú'oU×ׯvŸIũ‘GĸCåßIŲ û3„õzŋˇĸÜ ƒ[˙¯˙ûũŊé&ūžŠ5Ģēõ7DöL0Ÿģ¯‘m+×á&õmWM[˙˙˙ŌëˇéÕ¨§CūŦF6×_á {Ŋb&ƒjĶÛ_˙ūĢĩo˙˙Öļú̓ąIîäëūžą &ž.˙õ˙Øõ˙×Ûôŋá–z˜iV­}˙oqwíƒ˙ũ/ę+×˙žE"˙`ƒîØUsN˙ŌÉ+vŠ4î˙õ]˙ūŌø[kņ`ˆę˜Ģĩ×ãÔA—i¯UöũöĢ˙ãwÜ"Ž˙•ĩuĩiq÷´ī¤Õ÷˙^“ķ5Ļŋ›b­đĶ_Ģw ũ/ôĨÚM´Ö˙œui‹ŊüDFļ•nšoĶîžGZŨĶņ 'TĢ3ƒOīļ“ČcĢŨD!ÔWˆ‹ÕTWŦ8ö“}ˆ"?Ϥu–Іũ´ĐiĸEũŽ ŗ"§X0Ļ°Â `„w¸öiĻ´"#ˆŠØA‘ƒ4Ûk¯„F?×ÚĐfa.œí9kÕ4à H%č'äz~Eh“ģ<29ZĶVvX_h1H§×ū|.в9§EŪ!„ ë\„Ä4øî˙ų .ôˇˇah5Ũ?ãí°íwö— n™Ú$í<á˙ėūü^柚ƒ/ę**­ čŨZ äPČëúÉÎ Ë´īa]G˙¯´žŊC_˙"ŨZîÃJ˙äu=´:Ũî“*ŋkûø2š4Å6úo]/ßDnÂwã˙uĶūßÖ×ô“a¸~h)DqøĄēāūˆēGßúzĐhI–są‘ /ÃCkšĸ?Ÿ?kûI &ëM2qîAuK”ŗ4 ü0ģNĶM˙ëcû­ļÚ Î d`!ƒ(h)8€Ļŋí°ˇõúīĢČą[TÂv˜Tičü˜\C bĄĨ{™˙ԍ'ôŽ´J‹ ŪL~ęöéđŸiŽŌÕŗ5×˙_UúNú''ĸî‰>Ezŋ|A…à éûUęģ÷]7ûTڇIŋk­'đŠcƒ vī˙ūŋâ¤t×ŦU˙ëĄč0˜¨vÖg?ũũézއą×ūš¸A„ëēõú˙˙ˇUũ˙øAŸ@¨4ĩūž+˙˙Ģ_ũ~" ­a´¯ëũŋ^G­ūqõ Å*ŋé_í˙ĶĸQũt7įjȈi|/đũ?˙ũ1 ÖÄ%UŌÕ0~ßĖđ é/ļŋÜE„×r ¯úÚwˇ}ÚčîqüDw‡äöÕ´ž-5câ>" 'WŠģ‹bĸŋãl'kŨéÚh¤5ū ́Đh4 4";Gú%8ˆˆˆˆüwkcũBÞĮŊ…ĩ #Fã˙ũūZŠMjuPƒęƒ)ß §ÂĒŋ‘ã_͝_ËUhŊ~Â×âĢôŋ‚…úĸ1üšßŋ‡ēZĮnˇāęŋm y›tî/ü˙ڇũŠ8PÂ@ÂûüšÛ×°Âa~Î!ŋxĩû(Eģ÷īßŋ~˯AÄ_ŋû˙ūøk˛:ņû˙‡īߛĻøˇØ|šÉų˙Î9‡ąīßü†\?Ãŧŋđß~ß|š‚ŗ˙û˙ŋû˙ũûũũīū˙˙˙˙÷ú˙÷˙˙˙_ī˙˙˙˙˙˙˙˙˙˙˙˙ß˙˙˙ūŋ˙˙˙˙˙×˙˙ú˙˙˙_˙Ú˙˙˙ëë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙ūŋ˙˙×˙ë˙˙˙īÃōP ,Hc BüIĨ\āŌŸČ2ŽAfĖj27 c†LŖÆU āWčDA›CĖĸäcœôņôdDF_˙ũ×˙˙_˙˙ëūŋ˙K†Gū"AX3ČLG! $YČd‚° XäÃęΘJä ĮĄ€`|H6Xg8‰ ž žFäY“Đ“Œ'â""$2hĮvCĻDq H˜-Ā@Øĩ ĩ /?æ?î?(,,leptonica-1.86.0/prog/sheartest.c000066400000000000000000000135461506303110300167020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * sheartest.c * * sheartest filein angle fileout * * where angle is expressed in degrees */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define NTIMES 10 int main(int argc, char **argv) { char *filein, *fileout; l_int32 i, w, h, liney, linex, same; l_float32 angle, deg2rad; PIX *pixt1, *pixt2, *pixs, *pixd; if (argc != 4) return ERROR_INT(" Syntax: sheartest filein angle fileout", __func__, 1); setLeptDebugOK(1); /* Compare in-place H shear with H shear to a new pix */ pixt1 = pixRead("marge.jpg"); pixGetDimensions(pixt1, &w, &h, NULL); pixt2 = pixHShear(NULL, pixt1, (l_int32)(0.3 * h), 0.17, L_BRING_IN_WHITE); pixHShearIP(pixt1, (l_int32)(0.3 * h), 0.17, L_BRING_IN_WHITE); pixEqual(pixt1, pixt2, &same); if (same) lept_stderr("Correct for H shear\n"); else lept_stderr("Error for H shear\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Compare in-place V shear with V shear to a new pix */ pixt1 = pixRead("marge.jpg"); pixGetDimensions(pixt1, &w, &h, NULL); pixt2 = pixVShear(NULL, pixt1, (l_int32)(0.3 * w), 0.17, L_BRING_IN_WHITE); pixVShearIP(pixt1, (l_int32)(0.3 * w), 0.17, L_BRING_IN_WHITE); pixEqual(pixt1, pixt2, &same); if (same) lept_stderr("Correct for V shear\n"); else lept_stderr("Error for V shear\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); #if 0 /* Select an operation from this list ... * ------------------------------------------ pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShear(NULL, pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixHShearCorner(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShearCorner(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixHShearCenter(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShearCenter(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixHShearIP(pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixs; pixVShearIP(pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixs; pixRasteropHip(pixs, 0, h/3, -50, L_BRING_IN_WHITE); pixd = pixs; pixRasteropVip(pixs, 0, w/3, -50, L_BRING_IN_WHITE); pixd = pixs; * ------------------------------------------ * ... and use it in the following: */ pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixWrite(fileout, pixd, IFF_PNG); pixDisplay(pixd, 50, 50); pixDestroy(&pixd); #endif #if 0 /* Do a horizontal shear about a line */ for (i = 0; i < NTIMES; i++) { liney = i * h / (NTIMES - 1); if (liney >= h) liney = h - 1; pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a vertical shear about a line */ for (i = 0; i < NTIMES; i++) { linex = i * w / (NTIMES - 1); if (linex >= w) linex = w - 1; pixd = pixVShear(NULL, pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a horizontal in-place shear about a line */ pixSetPadBits(pixs, 0); for (i = 0; i < NTIMES; i++) { pixd = pixCopy(NULL, pixs); liney = i * h / (NTIMES - 1); if (liney >= h) liney = h - 1; pixHShearIP(pixd, liney, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a vertical in-place shear about a line */ for (i = 0; i < NTIMES; i++) { pixd = pixCopy(NULL, pixs); linex = i * w / (NTIMES - 1); if (linex >= w) linex = w - 1; pixVShearIP(pixd, linex, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/showboxes.pac000066400000000000000000004533061506303110300172440ustar00rootroot00000000000000 Pixacomp Version 2 Number of pixcomp = 8 Offset of index into array = 0 Boxa Version 2 Number of boxes = 0 Pixcomp[0]: w = 353, h = 281, d = 32 comptype = 2, size = 17304, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(ĸ€VŦÆdoĨVĢV_}ū”x*ĩŪ2ŸCVsÅVģh˙t  Ģ+fäņ?OL†ÛëÅlFvãäcŸîŒÔ6Q4ųXǧ 6ųā߅upāfŦpG7cšÆ&āŸõ—û&q˙.ō˙ß5ŨĮ xæž ÍasΚÂ@pŅH1Ûm ŗ?Ü#ę+Ŋō•Øæ¤KTūí žö"_ĖŌ}ŒÔ~bŊėŠO*?*pąŒā•+ąÜķŋ˛´?1Jm%JôėØOX×ōŠâ°å’ß4š˜]d,Ā1õīąqŒƒú×Ļ>Ũ˛ZĪüS“Hŗ<›hē˙vŽf;žb,īú _°žxĪå^ĸ4K˙—X˙x{N-ÍŦ•.f=+{c§ãļ•lHyõÛ^Ŧ<3ϟųvZ?áĶ˙|}ŅÎÂČōŸėéūZûäŅũ–įūZ~•ęgÂzvÕ¸úHßãH<%§‚a˙mOøŌįåßŲŽ‡\SŸ(<Č1^ĸ|drCÎ=>z‰ŧnOËq0üAū”šÆyĒXûÅsīN6ŒA WëŒ×ŖÂāŨMŸĸ˙…0ø5IųnäđOœVG OsŠW˛‘€ øī΃œœ-æیSÁ“ģu?îņŖœ>| õĪáA°”c‘øƒ]Ûx6ôtšîTëPŋ„o×ūZ[ŸûęŽp8•´ul§Ú¤û3w ?ūĶËáģčÉâ&÷ jšŅ/‡ü°Sôz|²{œáŗaČ ūS Ģ‚NũkzM*é2ZŨŗėĀÔÚáN<™?īiŠ ¤ĖCŅ:gŲÜ˙wķ­‡I–GT5 ãģ~M>a[¸a'āUGlLN:Üo,‚ ^}Ģ éLS0=3}jâȒękÁs͜ņŽ”÷>sm_ē:šĘĶÕ啂ŠÛŽ[ŌĩŽØS­Y´dÚšŲŋÚ4RųÃ֊ŠĪQEâÕĢ>¯øUQV­?đ  ™āT7_z:”Žãī%]&-ņą3ZŨŋ(?†jŽŒ1oĶš­‘ Č :æ˛{–^ˇ\sV҆qÔzÕxc8â§Øß…!.Ō84mɍÕHlį¯j°‘÷ Hû⧍:{ŌĒÂĨī@Až”åNi2iĘqH…æž‹ÍXŽ,ķŠ1S"§T8p9įŒņSG=E[ŽÜ.8¤4WŽ,´‘dį2Æ­YŽ1ĮĨK)Ö";Ëė5h¨éŠEOŸ4†Uhqõ¤ŲĐÕšFN@4Ÿ- Ā4Đ~•6Ėid~”˜u8æ™ ÚŖŠ°#íÚ“Ë 99ĸÂ+ĸ¯jsÆ=*_/oNi¤äc&€"Ø3Œ†h¸øĢĒ2О•.[â„D‚Māž+bDÂįԚŽņ:UŚGJÎ{pŦ[ąŽ‚X}qTe‡#Ĩ01¤ˆäqYŗÛŽīē+ h}jŒđdÕŠaQœĒãÜVmõŊŊÂĖC‘ĮJ×Ô“ŗp;rE`ŨßĀ™;‡ŌŽ+Š´#[˛6)nģQĐ ĖšģÉ †ëP2“ˇĨCmÜšbpŖŠ­Lį;ģDwÚŠŗö˙ŋúŅHžYt P¤ŽėqSEnŌĄeãĶ=é™U›^ĨWe*ÅX`Šžßî7ր-ƒšdüē{P´“Ū%ˇ:]0m˙h˙:ŨŽĻ˜É™ŽGËØÖ”1*.3ړˆ$ŽGLT;H|1Œæ¯2n9íŠg•—ÉÆ>”’ŸĘ c51ČÅ\ž!Č‚jŗd>ÜA“E€Ĩ:îmĒ:w¨J(öíWLh܀AúÔ Ōy'ęj€ĸëģ'ÕRX¸­7ųT˙…Wx‰9?Zb2%“TĻNMkË âŗįCƒL ‹ˆVT*Ã#ŪšoiĐE§O2FŽß˜ö€ŽÂE5ƒâXąáûÆ=~_ũ UĮq=:Ģv÷b+sBNsUi+bkb÷ÚSûĮōãEQĸ‚šŲf9GŒ`Ķ֝m,…ö}{UASA1…ō õ ‚híd’ā,€ķÉ>ĩ,°-ĢånyíPI;K0dČĮŨÅYšˇ‘”Hî įŨĢacQĮJ. 5¸Ëx@M_F:UA40礒ĸģ($ĮÛÖ­Ā D¸œūģøÅT¸™ŖäP¤¨Č ÛGâ{Qg4ōŧ‹4+P+(|įđ˙ëÔÜvvšpé@9p('Š|c'ņ DÄa*"="ÕÄž|ļÖđnSåĸÆMŧdļ͊ØaƒYzwË'Úd[HVE؋ į¯B{ūU>Ĩ>,¤ōdų”…;IČädq͊Hšë+ęQ3\XēFėVPĮjäāsoūĩjīXæižŨ§Df\2e†â¸į#đūu°¸'éLÎÄwQÆös,ģļ2vĻãĻj=!a+4–Ë*ÆHUĀā đ0I$đ•Ku,ąZŗĀI#=HÆGķiÍ<‹3ÜD#‘Ÿ•ø'?Z—škāeĩ‘āÑŊT1įĻjĖiÍfÛu{ŌqōŦ`zô&ĩw ‚žĻ$ûFžGÜ Á_h#ķę=ŊęK{”ŧļKˆŅ•XœÆx$v>ÔËų"֊cwŸ,ҍl(!O_åøÖ~“pŪ]˛ĒūÎŌ0wņĪã@ŅÕY §Ĩ>æ,O;`T•lŸB(´.1Æ* JÍīlĨˇŽO%ßn$^Ģķ‘īÅK.;™øf „đÛÅxT–>qˇS![öjEž"ōŋvŋģĪŨāqøtŽzëGžļ´–GņÚ S–‘õ=…n[jVĻčié2ĩĖqåĐuĮøÔ$oRWIˇŧ’íO” 2j°Ũæc&ŽĖw˛\˙*ÆÕu1¤›ėīp áW×ߨĢ9ÛąŅĀQBÄnMŒ„Ü7~U™yâ/O•â’åžD8eŽ2Ø?^Ÿ­r76o‰íõe¸hä‹ĖIbšF6ž8ęGĶi"Ķt´–=FęÕ§y t Åxí×ÔņëøÕr"ŲŌYxŸJÔæ1[^Ą›ōŨJô ūĻ$br?+Ëu+Oߤ˛C{Ā´Æ¤P@ˆæĒZøËV˛˛ŽŪâc,”Į8o™züCž˙­7Jû Ÿšë…œÉŒ fŦaĮqĶŌŧĘ Zî]Y/ÚKß-`˙–Rv€pIÆæ#'¯ĩuPj÷˛ģÉÕkéŧi,á…ŧžXÆ^āîĮąîj6†§sĄ0†Á•Qœ¸•Ač}КĢũŠĻ™%Iâo.E—‰ø¯ĐwĢsĻâŧrXf“ĶB¯sŒģÔ]^îÖôôœy7ûˆđNáŸČū5ŅĘģ`ķÎ'hÉü+'PŊoŗŪE…älžbŦ‰d$ĪĐ÷â´¤šifžÚ%;âv]HRĮĻ9J”o=––ûŠ1J×BW• ûW!”‘€rCG_­+Ļ&ŦY%ËÛ3]‚œĻ•Fo#ŦŖõ¤ö=.ĀâtĩbúsYvœ"Œö­8ēVEŖ=2*+“}įGöO'nx—>ØÆ?#nH9ũjžĸō-Ô~\ˇ‘ü‡&Dƒ¯~)=Š‚ģ´÷WĮ9ŽŪUØÅí×%žđįx õëƒRMf֖ I<å¤>X,P1…ÛĐ/ZĢ÷ÃÂĶO#H¨Dņų(W8û§Œû~5rîk“dĻâ1o!“Žl€0‹åôöĨСņĸC)[Ģ+`€0BÛņČÂôÆŪ?0jmÉ&—ČåÜį$ķžME:*Ū<˰‰˜&ÎO›8˙#šĩĸ M&Ũ@=ŪëÔĶčdĮŨ4sYÉå8bŽŧĻiFzzûTû'KyļĨÃ=Îōāy@îPOÍĶÔæ¤ōVKÄúYE2gɉ—2tųŽüŊŠÖōŠōąé°iH8^7篧ЧØ-Xĸ‹ûÂ%WrWpA^¸ÎáŠĐēBL{7dŊ°:úâŗlX˙ij%ŽxĀôûŋũqW.dy#žbķėB1 ˛dö'Ķ懚 h:dC-Ŧ’˛,ę§Ė6įo=y#éY62˙gÆą´ą›xí|ĶåäŠ9ƒŒâ­]* ČIXŠŲ‰ƒ‚@*G } ĪžËkŸ˛üĪm–E=ŧc€~ŧP4vöã!Aã"ĄÕRíė™l %ÆäÚÎN҆įãÔ2Ër5Kh\B~guCŽü͟njíá¸KYŌ4’p>DvĀ'ÜÖmš¨´Ķ9ë¨ŋŸëéâē˛Žhš_+{rĢŽ™œôy¤ĶŦĄ{y#˜$Ŧ˛œ˛ģ6ĐœNžĩbéZ(áŒ'Ÿķ“™PɎ˜ÍOBžŪ…kĶZ“ɡ–ĩbr^@Ī`>ŋūģē]Ę­Ŋĩˇ`‹˓ōö=\Ķ.æî].Æļėëzļ8>ãƒųĶ,%yĩˆÉ,tõb}InjēÛĀŗéå-/Ĩ‘L¤™$fĪ@ ƒ×ĐúÕ´[…–Õ%’V+¸ŗÂCŒcvyüŊę9ZHėWíw o36 Œ‚z÷p?úôZMąí Žxeķ Üė]đzŽ\ū=M>ČčmŲŖŋUKYZI‡î˸}î8ãˇ<úô§Åh-íîK! žÁ‹ąäû1Ÿ˙]:Å~Ηs\ŧQĄ˜ąųÁU“õÍ\ûGŸh&͚ ؜.įÂūb“Üj6čWÔ­ŌC ųņFąÂęÁÁ-ƒŖĶ×ĩSi$ˇI<›‚vöá[q$=ëFęåmīdeˇO5-^A)=†8"ŗ§Ž&I™|ƜˆßŅrGBy?Žy“cŠ:“¨DšœV(Ęfl—SBāœŽ0yz]RęîÖĪÎŗĩ7.Ž7D%{ãô§‹¸~ܖĀn—’ÄŒŒũGõĻęˇ7ÖļĒtëQspî+$ąöâ˛léŒuZ}æIÕīî툗Bßo!Ø]nREã9ãķ̆Íĸžöa<.ė…HUHį$ŽO< ã#švV×)¨-ūŖwvnĒyvöÆ8ų Į0ęMhŲÛnžũ…›ŖH¤™Ÿk’O$ņĀäcƒIliV1MYŅãÛĨÁ…ĮßĪū#TÞ=sžÕ§áÍ)mŦd–L0ģˆĒŠéŒs˙Ą ¨ŽUv)>m=Ë[j,S\Æ‚GÜqaú ķ­2O3Pō ÄsąEŠÁ?(úƒļēŨî;Ŋ}6ã÷­´”‹8-ëƒėGëXÚ]éíĒŪĻmåĩ‰Ôsĩ]‡'=Fę*֗$õ Í“5žŒÍrķŨZ ‚ī Ŗī‘Õr09āãņ=Kƒæc=ūĩå÷ž3š×U´–Ũĸų‡úT‚5&LļA F1€ŧđ¯J[‚bFeCō°7 ƒúŠæŠÍ ÎmžįėWv‘ĪĨ42K6CNCüÎĮ‘ŒnįôĢ@J÷zĻ`ķ>P¨ŋ >o—8ãß5Xé×r]–Ķ#‚?,ŠHdųžņ%†ß^51•d:ŋrŪJK(aųŗÆO§ üzÖ1ęuÔĩՋÉåڅû"ÛķcõâŸĪSUôŠ#—JŽHŨŨ˜‚Ë´ũãÆ00*Į,8ĢFRŨ”į^j„Ę9ô­9†@ŦɇæŠfL ×)ã­ŋđŠĖ{–L{|Âḗž+”ņđĮ…ŸŧAúŠŌ;ĸ^Į“ŌZ+ ČJ(ĸ€ u4S¨jdûĸĄŠ—   ZĶFíbÜĩŸŌĒ-^ŅÆíjĮųR–ÃŽįĄ[g´ĄŦģrx­(Iâ˛(ŊqëPMĒ-ģˆŧ™¤˜ŽíˆŖîĮõŠc9ëUfÔ,Ŗ¸–ŪōX€v̝ļsŸÆ“* īk“Kurą+\G<*ÛԛeķJ’Ōp ?ÅÛŠD÷ÚĶ{ĘßÉōąņ¸ÆqôĸĘîÔDžT¯$r1*ä–x.=zšIåķnl ŗ wÎÂØÎęsIė4Ŋō;ņū•v\˜ÁļØ9Ũķø>ÆĨĶäVÔøp vH­ōđ ÁÎ}?ĪŅ&cũŖzˆGX”ˆäPāŽ2õ?ũ~•bŲ›í3!´€$*g8uP” š\sŽ3ŸŽ}é×0ųvö¸ŪéĨ”ņ˛ōã Éč=zžŨŠm’:C8š†Wš,‚ 3äŒãƒŒu뎝Ē唗BĖ2#M)›˛I÷§Üsׯz]GgÉqڜSųĶĖ‘‡ˆŲŧlŲIéŪ™l.ˆY„"Q+ ˜ķō Œã“Ķ@Æj=T¤wwo"ÂāZ/É(Č??ũģTŒŗÅzåáōŌæâŲ6ˇ<`3õīIŽ'Tŧ ā~5ß\YiæâæŅĨ‘N VdČ~ŧ…Ļųˇ+trŠmÂevōĖ}ÉЀƒķå'9<œž:Õétø&‘%*REurČJ–ÚAąÔqŪŗáF´ļŋ&Ú3 0XåiIÉnN@ü1čyŠŗW6rŒš˛.ŖHÚ l<É$0nå‰?psFĐbÖbX\ģĻîœ?FđŽū9Ŗ´Ō –v8āRÍÔ1Ļhã˛†C }ĀČ6đôæąĩ ZæÜXĪĪ*ާĸž˙^ UᓧÛ$™LŖd>~GTvēTMēíˆiX’ã;ˆäúVĘŨNVQŅ´y.æ†LˇøHí’3úWA¤_ ŨVgU mnžLkģ Ž=˙ÃŌ–Y­ô‹iî˛FÅų@I'ë“U|+m4°<ŗÉ`Ē:gúuĄģę AŌYiBYîāŋ‡ûPÜąXTLĒvũÖoSĶ5•*Üéž#[û8â{-NÜE$s+2>W8`+÷Tį#n@…Ĩà ŌĮö(Dķ(ųö1Æîŗ“ߎ ck´ú]Üé?ŸbWŒÚ‚C†îJãˇNųĀĨõîT-¤I Øč÷¯rŽ8XŖFœm]Įņ$wÅ{´Oö{}ņųm€Y ÉŒ÷úטøB#$ ‘%#r/ƒÔã=_zõXŧֆ;n™\sQYô.™Mõ1Ņ;ûwf  Ų'mëžk.ÜM ΠcFfÜĨC~fČËņųqROwĸ:ۋ?ėŲe3FĒ™Pã,ō:ūՊ+Šõ%ĩSŦÁe•›vâ a˛vīčkŊÕ8¨ĩú“$ŗMjhL29Œ‘Į':SˆmÚÖÕcy…K|Ā:’:’xuíND89üĒ‘œˇĐ¯(?Ōŗn=}+JvĀ#Žŧb˛ŽHۚ¤IŸ?.}Ģ”øƒĪ„™‡C2Öē×BAí\—ÄPS œ ×(>‡ü*ãē%ėy%ŊŠ+¤ČJ)rh RŌ ZZ™z „TĢ@ĩĨ ŒëH}šĖZ×đčŨĢhĪķĨ°ÖįsoŒį5Ą…gœŠĐŒ`VE"ĒâkˆŽî<ģ)fŒ°;„Š9ÚBENœbŗ."´’ņšM:idĖ’*Ü6‘Øúâ“.šģÔՊÚÚö{̎ØIQ_oĖ~ŖœfĨh Íj°(HcĀÚļ*­ŽŸesmyĸ€BŠ‘‘”n'œt„žŗ…”T),{g¯¯J]ž7ķ,I|đÉ~ō`¤ ģBõįžqî)ö¨é¨ŨēD˙ę×i`1ĮfæŗīŖTƒS+3I#Ū¤g€~8ãŌ´<›ˆgŧ–[ŒZÖęQvîČĮAé“ßچ‚.ĮN—îŧ‘ ŠĒ¤—e pGąÎJ[ë‹Ģk]övj“8Ųŋn=úsôĻE}ˇF4Š `?‡ÔZ†ĩ•,),Ę% ūĄ7‘Œvôį­fΘ]É$ˆ,Ž­v%šÔ-aŠWuŦŸ›ĄÃ3r>˜*]4ĶîžÕ4ø%;{S…Č'æo”v>āÔ1ëēfŖ¨ÚCö{´ų‡Ëi`(W Iän”ņ6žē]ߨŧ֍JFūnöŨŒ įĐöâĨ-ŦÛæIĢ7ŅIsĄŽF-˜ätRຌWĪqÁö§ŌāeOĨŨDö2Z6ä$1‹€äž§>ĩîģƒyl­ģ+¸0ã=9¯3‡Ã‘ęšĖ/ĂæÚPאÉŒ1#h8ôŒŒcŊzøíāER Å2=?*ĘŗŊiŨP™¤6wriö c,‘ˆ‚dʀ‘°“Œg8ČíīSųą…ÔK¤VŠŧ)–Ũc’Fæ%FNs؁žĻŗôY´›ģņ1H!ēi7E^yĢķĄ3€ŨsĮ­]†9ĸƒS–(VI|üĸ#–!ĪgĀṹÉŦ#ą×U{éX’ÅPØE˛S*eą!$îųŠ&Ŧą Æ9ĻÚî‘ų¨ąž9E] 6yĀúÔ3ž[‡ĨR1–ėĨ9$žxĒÆdãžĩĄ āžįÖ *܁V‰(˜ˆ~ĩÅ|NĘxfÜg­Úņ˙zīJāžkĪū)7üH­\Ũ˙Ž5\>$)lyE>”gŌ“5Ōb.Ĩ”PKNXäaŒG¨€pĪĨĨ^”àË#(÷§(Čâ€$ZŲđŌ‘¨J}úÖ2Š­¯ļËŲķũŅS-†ŽÖŊ3īU’KąCOŒ}œÄenÛÔãnA$ü¸úœšēˇS}ŽŨ$C/Ėģi?{§ZŸŧūei%ūЎQQÆņüÂ=ŲÉĪ͎ŋĶ5š‘ŖˆÚ8ļĄ Í÷SŒû ÂË-ú o´ƒ( 7Œt˙"ˇ=ĘČ˕aƒÚ†J*^íZ[ĨIBîFP ąãĄ?įjÕģŗŪđĐŗ}OúÃæîŊ÷ĒWaQŖ$ļV<.2ln9Æ:úõĢčâ;ÉXČČA1$c#9аö¨ę\žAkÕ--Ž%f.ĮˑשĮ9:tĢ›EŲĄŽņ#Ûå÷4™='$ķīÛ­3Gi‚AÆárĖy­Ę.L°ų Œ7īCu#Žœzg͜Sę.gk†Ãq¨ŧ€ĻŋoŨ‚yü*ÔŅíšÍ’ÛČķ/ŧÃķîōŸ›Ž™ôĨŧ@â:+tS$Xc!;đÜdÁô§íėÚMŧ7&IöÉbŖ Į^O|bis’´QƝ"}åSŋ_JЍjƒNhŗkss,™ ŧ{Û?NŸĨ\XSĖŪĒ0Á uĒē†qw$/o%ĄX†-’=GĩDļ6‡/6ģÁ¯E¨ßÁoe “FŋŧšfL, Ą d˙ cëPĮzķh73ŊõĩĶîOž  20…”/8įŸ^Êu–›sĻÜĀdÖHKšōZ]ÄĢx'ŊOcÅūû?ņĐ+‡ĶtØÅ¤öīæ”w%•†ßQúcœúTÂÖ nq×l—w—2 “Č2dG’qž˙?uöRÂ4 € 2ššCŽTAãÔņø\ĩ¤,ŌÚC 7;Šė'îāũæn€{×cĄi6ˇ(ąËvĨØ` ęčį`č;ōzŠŌm%Š)6ÎŖFÜÜËŠ”;ĖIR9PáĮ9Ü1Χ֎bEËP ° “ĨfŪ{ˆícpaÜą;DÛäWl0ĮB¸$ķ×§9ŽŖ0[ąŠ0Î*šÆOa\˛fņF•åĩíÜKiĻ~ę6 ĶČ pØÂũėü¸ä TVa$‹PXf1ųˇxߊį9ôU~„zœžĩi¯ín5Čā6Oö´9ySkƘ퓁øâĸŠ$}>ę \;+-ä{ F6Ž;ƒz…ąŧô’ŌÅ-cUm'Hƒėę÷Ëō!e9'“Čëø{W0n51tfkâĶ'TĀ ôĮ~žŊë ÖŦ>Ûae2Æėø.pAÂãˇ§ĩP–M:&}×Q0';Ä6 Lg>ŖĩtS˛ŽÅÂÆ–Ÿtē…Ÿ›°ŖƒĩĐ˙ üjVP•‘‘ÚK4ĘČg“ĖUa† €}đO7­DˇĐÂi);ä#< ķŠnŗ,Sąœœ˙ĀOø×ĸNHúךüR“ũML^B?!ū5pø‘œļ<Ԍ\šmt™ qE%z;„…mœ¯Ôļ’'Y\ ŠrpjĢ>ö-ŽĻ­É|^ËÆF3ē€%šnŖ I<ÕhĪ’H~ ĻC/”Ûąž1Cˇ˜Aé@diXē ƒŪĩô3›šŠ˙uk.)6 \Vˇ‡St÷ /õŠ–ÃG[AšĐ‡;Ģ>ÜÖ´ĄƒY”]ĨVocûŋ(I$’ąŽ%“įlą9Æ0ãV#Č5H=´7r˜$¸šęFÃy!XörF™ŠeĶWÜŨƒũRî@‡ 9ÚĢÉļ­Чzíāp{ôô÷§éûŌ"MÛö ÛēįŪ¯'ZBŊ›)iĸ/:éã‘$ķ$í>ĩǜŦí>_´™Ûr2†JžũũĢAI†ISQŽBĖĢöĪ-ŖÁꄚ7Ĩi‚Éۑ…āÍÔ"wWlBҞaŧÆaŗ;†ĪĶŽƒšŅu- "šRˀã’8ëSÔŅü(J–ItØ^F,äIÉęk@jĨ¤kolįvÁÄc5aH͘WŠ>Ũz$Į™=¸V¨8ĮFĮlūĻΝĩ#ŸmĢÛ•˜Į›ņöãŠÍ~Ĩww›ąCrĒUÕ° g;pxoZßL´ØĢtǚ”ˇ1*YŪ›bĖB‚XzAĮ×­Žŋ…ejíŦCŲ–Ã×āŒã¸īMy˜ŗX×Ŧ$žĘ¡?ڕ‹€vŠSĶ=9æŠEöÚŗÜ›9怕 ĀUČ#ą\äqíÚĒŨømõfækËyŌ5;ÃGĀ#€Ô}*¤~"ŌĖļƒGžîÔHŪD€īų3Æ\õĢn]42ŋs¨mrc$k¨´ˆ֔$LģJøŋ7甄;#HÅÍĩžfp{æB¨ÎyįĢ66úĻĒČoV+[ul´ļų$ö$}{ÖŦž–MŦŦĄŽ%A+7mČឌž‚ŖHąęÎZk=fë|Z^› (ĨS8wlôŪsĪNį}k[NąÔ›Ę0å% c6āĄåFrŧučx§ZxJįKŧ– ‘fÛ­Ūå×)"O\u^2AâēU°ŋžŅãš}Ąōĸ‰€ßŗqÜėܝĖ2{v÷Ļä$„ŌíRGƒPXāŽ% ‚0ĨdGO“œq”äÖä…ĻŠTËšv†C‚šĪ"ŠZA¤BķŽI'Š$䚒æáãļĀæėBp ĮŒÍcšV ô˙%-§•bËų_.G'''9'ĩPĩ¸ļ›OškĨaŸq,dl‹É$dt>Õ&Ÿ5ūĄ$V1‡š97"ˇ÷sĪ=qŪŦ\XAĨii@.Kŋl¤Žŋ*“ÔqĮSSĨ´6´š×1jŖŠ4T"¨ P1ĮZŠH­üī8ÛŲö ߝH U* ĶÚĄvīŪŠ܊Wė}*”ŌrxĢ2ƒžÕNN[ŊRFy˙ZķŠNZM,{Jq˙|W¨L=kĘū'Ę­¨iéŽV7?™áZĶø‰žĮFĶKŸN)š5Đd.Ú)( 4SˆĻĐN˜ĨÅ.ō+{ÃL|éÛŲ­`[žp˛Nû?ÖĻ[ Œ$ÕøN g[¸õ­ˆâŗ(ž‡4ãmŋdīC´įúū5}*ÂT°Mĸ{d1@ˆō4ŒĒsÔûÕĨëUSŽĩ2¸č !–Į֞žÕˇj‘N)RúÆ[ŠËŠ€ūė*yˆIS“Č ŒœûVĒ1Į& ÷Č 6Á¤SmĢ€ã Ķ”‘Æj°‘§‰{Đ øŠR* |́ΤôŸ ØÖfŦšĩÜņĮerļöøũã“č>ĩ:œMH˛cŊ&\eĘîTŌtøô믖ÍŧÉų—ROæ1éÁ'üņ[Ęsۍ̒jur;Ō¤äîË$`oÜWđĨB7|ŗ†ú㊉\ã‘Å8Ø0}¨Ŝ9ŋzüۏá]Ŧ HāW)ĄD^ņšØ¸ü뭁qŒ Î[”hÁÎ3WŖÅR„š!—8ëRĄ…H&^Ĩ…b€ūÕ.é0N\,m$ w\ÔĸQ܁XhŌuÛúôŠ˜“•ũzQqØÜ8+SŖuŽ{sqÉôŠÃ¸}ąõĨqØŪCĪJHĀãõŽn9ĨŪG˜Ũ=jĖ3ĘŠ÷ÛķĨqØčč?­LąĢē?:ÎâSɐņīV"矟ŪRl,kã(4ķ§éX‰u?Úų‘ˆôôŠÚęd“—<öĨpąĒœHwáúôŦņw2˛üÜwâ‰'•ņˇqcôĨtfŠ„•ũ9Ļ×89ĪĐÖ`ŧēƒ†? •uF— m8ĸâąwË9Āō¤!O ŋĨSûlĒ7 6=)WR‘šd\`Ņp-ykČSQ4*Nr*Ŧ—sƒšc=ĒT¸bFņÉ•5¨ ņŽœgëUeˆzUĻpb [;O”PJ+ëĪøR?č_˙Éۏū9Gü)O‡ŋô/˙äíĮ˙ ‘ņŒ p¯Ž?áK|>˙Ą˙'.?øē?áK|>˙Ą˙''˙âčæoGˆ$ŽYąųWI īÖ˙ ŧj›!Ņ6¯§Úæ?ÍęÂü4đŠôŌ1˙o2˙ņU,w<&,āUĨRG5îá߅GM+˙&%˙âŠãĀ4Īü/˙G+ÄãpNĨMÎå^Î<á‘˙0ßü'˙K˙'†ą˙ ßü'˙K‘…ĪT'­<ĸ“õ¯c˙„ßô˙ČōņT áĪúäi?øĒ9= zķúÔŪfáœWŽÂáĐ?ä˙‘¤˙â¨˙„'øĮöwūF“˙ŠĨČÂį‘ ˛˜â“Ė9¯]˙„ÙĪöwūF“˙ŠĨđč˙˜wūG“˙ŠĨėØîyDgwlԛŖé°é^¨<áņĶO˙ČŌņTŖÁš˙—ü'˙GŗasʔĻ~e<úTǞ2=s^Ļ<#Ą–?ų˙ƔxKC,ŋō+˙ņTŊ“cË>ĖųqøšanHÎ1‘^Ž<+ĸg˙‘_üj#āÍõ°˙ČŌņT5.įšÛÃ3|Ûr¤ dÕĄ ›ÕæŊ!|3¤(Zp?éĢ˙9|9¤¯KLÛF˙^Ň9į)ŸķÍŋ*‘aļDßŊûL˙ŸoüˆßãJt4Œ}›účßãKØ1ûCΕdvjĶÃ.Đû9õŽāxwJ ¸Zs˙]üjAĸiÁqö~?ßoņŖØH9ÎVBsąŽ=Ēe÷ę+´]OA…ˇĮü ŋƜt›ÖüyŋƗ°sœQ(˙# į¯ÔÕyl‚žčŊ: î_BĶ]ˇ5ļOŽö˙QĸiÃĨŋū>ßãGÕäčķņ7—ÃŒR™—‚9÷Žíŧ;Ĩ?Ū´ūßãL˙„_F˙Ÿ?üŠ˙ãG°sŖ†2„ÉŨÆ:V˜DšØ>•͎†t†]­i‘˙]üjTĐtØ×j[`×F˙j„9Ŗ‡™$„¸Ni ÎF¯l×tÚ&œį-l ˙}ŋÆĸ>ŌO[OüˆßãWė˜š‘Á;ujŗ¸¯E>ŌĮŲ?ō#˙'ü#?üų˙äG˙=›1åsõ"šĀgđŨâã%8ü?ĘŊũü#ĄšËXįūÚŋøÔøÃW1!Ô/¯ĩíî gÕô†@^"ŅÁp˛)x;™|Ø<‚Ũ<%T¤Ũ¯ÕõZÛUëĻūv°s#§ĸ¸=ƞ"×õ-^ÎßÖĀéג[I<—­ĻÕÚ¯åŗHÅŧÆûŠvg“Íí+Į–÷^ÕĩŊRÉô×ŌgšÚōÜĖ’bHņōŖä'rĶ,qčN•2üDM&Õļiŋ{męĀĻ™×Q\ŦZ—Šž×LÕ^ĘÉ-ŽĨ€\ižTĻâŪ9RŪnpY e1¨0ĪŽü&2ģ×üG ØhēaÔt衖e‘ā”3+HBîvČØ0ƒī~^\2úŗŋ,ŖĻūōĶTŸÜÚōęŽiEc\Iâ)įH-aĶė@’Iu1k•2ÁĸT2@Ā;É@Û×nv‰âģŊKÂúŊãéŪn̤KqkqmlIIį…rDGļˇČČÎ9ÆN+ 7h´öëĩŨ•ũ_Ÿ­‡ĖŽĒ¨ęZņö?ˇĪäũ˛å- ųˇĘųÚŧŒāōx÷¯?Ö|aâŨÂ6ôÚ0Ö5 ‚ÛG]:s,ŽÄ|€ųšÜ†~^åęFuĩũwÄ?ü"Ļ˙MŅž[­NŪŌy’Y$ōä“zą‰JŽÜĻpʼnŠá‡Ėzã–ÔR3M7%¤ˇåNöēÛMÕĶŲyO:;ŠĘŌ|KŖk×W–ÚVŖ ä–{<ķ,‹ŧ¸qōˇCМczōĘĶQĩ{[ëXnm¤ÆøgŒ:6FAāōü+Šđ„[|LņĖD‘CéŠq¨UE€í\ô(ĶŠF¤ųĸŽļļézõm4løƒĮžđŊúXë:—ŲŽdˆLŠäHųBH*¤uSųTūņ†ƒâĪ´˙b_ũĢėÛ|īÜēmŨŋyF~éééYZÅæŊĨø˛öįGđÔÚŋci?iKx×l—$üīÕžeāÁÉ#ŒĪāÁã+[ĀlĻĶõ|Ģģ9˛LD’́ŸēA Ž„ôO …ö°‹vJīš-+÷Ž—M^âR÷ŦuTQEy……Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?Æų%zĪũ°˙ŅņÕåņ„Ú…„iĻhZĖZÎäŠ+ũ:HŖ°Øyœávp Úň O?É4útņ#ųp°|–@›íšô +­SЍĄNÜęÛŊ5OM;¯ģ¨ų^šžq¨Ā÷?õHŧIĸjzޘąA&[´Ö›ö2¸eËYÛ /@2YFڃáíÜŪŅŧH5jv3iÜ^Gama$ƒË;R&Uüđ0qģ…Elķj>ÆPҍõkáėļWëĨī­ú “[ž]á{įŧņ ׋|UĨjęŽŋg°´MîCc-Æņ›q$õÆp@b ņŗâ Â7Sx{V´ģ‹Z‚úæŅl§˜Á o"–,#8íûØaÁרŅMæ0öǝŗÕmī;%fŦ´Û[÷žŊ]ÎM-sŸąņ%ÅÖąĒ[ËĄęiöpG<7Í âā2*#*pÎ6€Į ƒ´ācAÕËĮū.Ôî4ũe,õąũšO닪æyq~y'¸ÕčôVÅS‚œU=$’ŨôißgĢk͞‹îs‹âļˇÕu KGÔāû4 Aqme=ÔW1˛‚2Gà ᗠ= sŠžĶ/[X×|O{nöG[h V2˙­†8ĸ™;`rSŊ '8먨x˜¨J4ãnd“ÕŊŦôž×jī~Ë@ļē…Q\ĨQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@˙Ų Pixcomp[1]: w = 353, h = 281, d = 32 comptype = 2, size = 17052, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(ĸ€ ĩf3#}*¨Ģv_}ū”x*ŊßTúŸōPčü4ĢäĘze̤M õŽGFܰîÆęߎCŽMgÔĻmŠ^´ōķYi;đ2MYŠB[æ E‡N3Dqî9¤/¸âŸ ¸ņր'HÅIåUežLŽŲ# žrqĮįVŌ‘ŸÆ‹ đ§í¨„Āž0˜3Č␑NPKŒj`1ĩpNßԐ!?Jž8ÍK@އōĢqĀ íH¤C$ķŠĩ52F U…Ub“(„EÍ5WæÅ]pģxīL@ƒÖČ]Ĩ0 ;UŠ@,qɤHđœô¤'ÜdäjyQÛĨX1~đũ)ĢAö=) ŠëƒJĢÉĪéR*qę{S‚ĮŒĐ"ŗ)ęzhbpjהz’:Ôeāô_gÍĶč)<ÆjÚÄKG¤dāPTļˌâĢ›T9ųFkUĶlâ tãœĶ"[T ĐU-—¸­ÉP`ôÅS–1“L VĩRĘ*œ–ą‘Ę/×ļcÆj”ņúqš`bŊŦ?Ü_ʰüCk钔ˆoʁĪQ]MĀXĸiƒÖ°/fiÍŽŠ*ĸĩ474sZ~˜čâYÎŌ ū5râeE t§]\* æą..Œ…æĩ rÁYžŌ=hŦßŪz7åE|Åz)B’ģąÅMģJ„ŽĻ{Ķ2!f׀ĮÜTJ1V"§ˇûõ  JÔÉų‘=ŠV’SûÄ Ôč0ĢéųīŊĢUmÍeh$ũ…Täįņ­čž¤âŗ)ˆ‘mĢÄHČ"(ÆãÖŽCĨĄ=ęYc `sО#ô¨ŽWÉĪđ‘úQqôˇÚ yÕÎ:w=*§öĄ~e^ÍE¯œÚ"ķ˃üū•‘o§Ī9ßģ¸9üM07~×nÃå–!éķŠfŖpaĶHå!¤ #!ür?/ÖĢGŖ xÎ¤Ë y[qob ­ 95[´Ŋž/.Î/õ‘Ū˙JÕĶĸžHY¤.o,į¯zԂiT¯oûęŗī.“Oĩ’åē¯Šū'ė>ĪŌšÅņ6Ŧąôĩ?īCūkJĀwl¸í3š™/îxÅÁØųŠāŠuaÃK÷û:ä?ūíGp –Î=3ũ .VQ艩\`~û#¯ŨáS.Ģr”ķē+ĪSÆ7Šë3ôŋû5ZÆ/ŸŸM‹ū)_čirŽįx5{œŒŦx?ė˙õęCĢĘŧyHqîEqKã;nĨ˓ŨnsúöŠ—ÅöMÖWˆ:đĘßáūM.QÜęÎŗ!˙–ũ˙­JēŌ–ųĸn;šåGŠ´|‹õíū­ũžž#Ņ[“s2öĄoéš\ĄsĢ]jß9"QžØãRŽąmŨO\5ÉEŦhŌ˙ĖV ĮͯqWëM—;ukĮFœ.:VŖ­›€|ņ¸ô;Hū•4z•ŗmAqâšŖ,€%ŨŖôĀK…oäjH4éäo’# ˙d敐h’Ų3DqčÃüi nË 6zsXĸÂãgī ‘Hr¸ÍB-ü–Üč@P;uĨ`7÷`´:ŽŌ<Ž~ĩ‡/˜ŨNqÆGJĨsĒEenõz<§?€Í;ŅJᗠĶę*=ŅĒō 8č+‰3ĶÚ`ŸlœvÜSå˙ŊsŽÅgJ÷‹˛Ll8pü;0šĐģ) ÛëÅVt 2:VUˇˆmŽY’+,›¨ ßJÛXŲŖVldõô  éSĒR¯Ōĩ䏓YĶ)ĒūŨĻĩ*§ EqzÂęŧˊc\eŗĶ'Ū˸äÅsŪ'€ Ūš=6čkU>y%dĪ;–y%9f5gNDųånJđRĄ]—;N3Z™ŠYŨ›>rvŠÉķäõũM‹öˆ–9”GŒ`Ķ֝o,…ö}{UASA1…ō õĻdKŦr@py'ÔTŌĀļŦ?ĘĮ#=EA$í,Á“#t ŗso#(•Ü ČvbG°?ãVt"ÍÉzCĻøUO3IyiėCQÜņūœ/C˛Ky™eē9"4õ'üũjēąũ•m=ĮÚgŨ3…G?"}øÕ싨míĖŗH#‰ząO ĪĩP–iWÃŌÉ'Ë+[åĮL1_ņŽ1î&ŧXÚâi%p0 ļp=Š%p.jÚŦšĨĀl2AFOOsîj†î@ĪN´æ ŖŠjfV)iž‚¨†ãËŊ@Ķ„ ąįõĨšō šáąÅį8PNqQœuÉcųsUΔ˛v‹u'!¤''Ø ÉX^6āQ÷zsؑšô„đŅ ‚ķĨŽ?öZŽ —ëē[<øâ—297ˇ*rā0är)įQ× ›OŽs]M׆”Ģ:à ‡#-o&Ķų?ZĀēĐĨW+%ģG*ėÃ×đϚbą sDO§ęjâyČĮû§Đî/-á—NŽÉ%`ŨJ퐂UXnížĩdĨYĖĐÉ!ūîEų‡ˇ<Đ”ßíą ˜Äoj ä¯|`Ōiž’ņf–KƒhĀ.ÁŧO ×#ō&¨-ÅÆī–Ų˛OŌŊKÂjŅčöĄ­‚Må儉ÎrrpzäíÁôŠ“°Ö§Ģč“ézR]Ų\߅?{1 ;g 1ž;÷Ŧ(umV7SŠy˜-Ïë^ĩ*]\I5ŦÛ¤ĩ’ēF ą$ā6ûqëÎ+‘˛đŨ–¯{ĸéĮ|1'•¤‹‰ÜŨIô”•ĩ QøŖÄd´iĢŪ1îbßĖÖEíåååËMyq$˛žŦĮ?Jī$øyņ,ē}žĸéÚ¤ĨįŒ9ËāŽËSGāĢ *ú §‘ŽĐĪ+¨/tëęiķDVg ‘ŠÍbnãĶŽ ¸įÎōÎĶ×đĒ‘ų“2ĸ&é3€ĒŧšõûínÎûOģĩ„’o0”āt¯¯nÕÃxZhî\ĸŗyąĮ¸õ+B•õ ŧ'ŖjÚ˞]ŲÜZ ļuJŒĢ’Wõ¯PŽ=Č2zgōÉĒwLÂ' 9Ā{îuK×›wÔ´Š“(SŽÕ›2Zԕ9É5JdūS@d<@\÷ŠßŊOPŸú×Q2ŋ(Ëxē2<;vßî˙čBŠn'ąæ&’Š+c0ĸŠ(´”´Ŗƒ‘ÁĢfif‡k6p:ŠV"ûŸ]ąĩY"o38' =*´ˆ‘ÜVÜÆjHŨ—î’ BëąĮ4=†CŅũ† öAüĢĸ‡Xēbųv‘ ­xx¨íY –€Éâ­G1PÄŊņV“c@Fk?Usä*úļjøoCY:ģ…H˘“ž˜īHkWšKķU7ŨČQ`dõ˙õ~”i/ؘŪ^~ōņ†âO;?úūôi–įPŊ“U›;)l§˛âú˙õéēĻĨžYm ĨX™Usķ‘üĀ ûņŪ¨XK<öĪkPFŽš–}¤˛!ė9ĀĪ<š­¸mŦôÛ%¸ģPƒ˜á=XúˇŠ¤ÆKkc=ĖbYnb+Œdą =úÔsë:f–ÅmÔË0<˛āļ}Øô˙Û‘X%ļ‰b É gXģ¨įāwë“s˛æ?ļD…nâ˙\¤ƒ9í¸r8aĪPsVLHŌõøõ[y§Š9E÷ĸ'đ#¯ä*…“>"ĶSŠ1v˙ëÖg† ŸßÍģnbĒK;WÉëW<=Ŧé֞$’K‹¯)bĶŖ€ī— Ü9"Ą­ėQoÄ7ZŨø’ę LrÁc̝PKčUÃÎ÷ŧėŌ;a‰f$äŠė|Kso6›âŠ#sûī˛,[R˅9õyöŽN|-Ę(Á9āæĒ"fžRĪPÆ8ˇn_ņĒŪ‰žÅ)Ÿô¸”ãũô˙ëÔË!]T™I@ŧ™Nđ‰DŠíķIyÂLĶÛj0]Jąĩ¨c$L mĨ—Ąđ5bÎ) rNņI ƒå9Ž;*ü*$cÆpŋáNu`€cĩg},i},Q“’1ĐuĒŌ('ĨZ ŸzŦãŒĶ$Ώâš?!š'Õô!]œĒZå|pđŊŅĮ÷?ô5Ē[‰ėy¤§qŪ›[™…Q@Ĩ¤ĸ€ŦD>AUęÄ_pP˚c ԊzĐnĐz)=†LąâãĢ8ŦĢRBZpž+1—ãlTĀņUc>ĻŦ'ã@)ā×3âļ’QigaŽXŖEęOä+§Î×+â+ƒoŠũ Ædû5™eUęY؏äĻ„]^ââŌÚM4F’‘ĩw2ŽÕgŠÄ‰c°‚“p˙luÉT ;XķvęEAæ§Š>>Ô"š,T‘@$ū™ãŠÍY‚Ę\˜.OŸ'ÍŨƍæōxVÁ۟×Ĩ0!ŠĘĮ˞Y-ešP7 3*(^˜#“Į=GņW&šÚęÔB­˛ę4ûģÃíQÛw¨Įŋ^ĩn:ÎŪ+kƒũ–æ6,rVU=ųųF2oįYšŒC|$ŗb#Œ‰2įåãĐŠĸā.‡*ŦQA$Š=ŌM&īîđ {vÅgjzŒÚ­Ų‘Î#Fƒ°§LŌÆ×V°°XĢdōUOj‚$Ļģ ŠãŠi^qWÄ @$c>ŧQöcžœzŅp,hZwöώkdYTM Vbq…ęqī€q^¯4د‘o+kų1/Ŧ¤wĪlc“ũęōč-vžņō˛ō<ƒë[ZŪ§sŦyP—PR<˛ŖdJĀcvqÁĀzЉjËKAž)Vîļ6/įĪ#4Áˇ*.~î$Œp;šĖĶô Žeį%lbzqVtûT}Ė`…āüØåįĐ˙õúŌ\ÜI+æ[Ÿ)dp$vB}xīĮéNâhÕŌŖ†i.᲌Fį`nš\–ęOĄŠ^Ú{¨d"*KđFßâU?¯ĩ61X[ŧé:JŒØ3%Æ ‹œ†î;áqĮqŸzîīôũÄą›6įL™”Ė r#“ÁĮzXü1ĒÚŧˇm­4˛V*p00;~<Č,sĸXõí'ĖdŨ Æā7§=T˙ž•ÆÜÃö;Åa˜‘¸ ķˇ˙e<ũ2+ŦžRļԚü$ōĄbŦ˜`ĄˆĘ×ųU?Ú$.b–dķW d~#úÕ&&h|>âîm˜ČœJĨO*€@?ė•ÅoĮđžÂI_Κ”Æ4x<œœ‘ôíČ?Ö¸ji¤xŖKÔ]‰ˆ8ŠF=Ԍ ø}Ž åIāŽõn/Bĸ“G˜j˙ tëD{Éĩ{„‚5]ÁâI6ŽnŲč=ëzxfęÖ)ŋ˛á`Č‘Y—wŋĘqĪ\WUĢDŌX•Q6wŖ~ä|Ü0˜÷Žëožk:ü…€`d–ķíMI…‘JØiūčūĩ+!(¤žqÍ6ŲÖdßÖ§eã  ų‡ĖsTĨšŌ¸LV]Ā;‡Ĩ4YqžĩÉxâP|1tžč?ņņ]EŌâ%nŧ÷ŽGĮū)™ņũä˙Ѕ\wDŊ,ČôĻŌŌVæaEP)E%( b?ē*¸ŠĶM:[P€zē˙:`5=ˆÎĢn?éĸ˙:Oa­ĪGˇhÆkF’+:ƒœVŒÎk"‹ČNŊ8ũ*ęÂcĶīā9Ž{Y1‰îܖaQōđF2GĶ­t p sz­ĨŊåü‚â0û •ãœđĄČÜÚ\\ęÎŨLqÛĄ.ø'b€ ÉZƒd…‹Âŗã$°“ĮąaÁ˙ ŌžÕāŅĩÚ yĖ˛/šÎāŽÎ 1Á8œ‘SÚĖní& E§Ģąc"Š’Ld|ŧōĖOķ튠$ŗģ‚ūXíÛΘđĘÄ+ÆāŊp9qíXˇ¨téD*Į$4r18ã‚?OÎĨžœX°ŠØ‚û~dhÆ[8ä¨'i8ˇjĢ.Ŗu¨F܊ûĨ ąÔą˜Žšl…TĢį¨aM7ĸ{IŅīJIŖHËgH鹉ôį Æ*4{Vȗ …hY[;ģũŅČôŽÆŌ[tļ*0¨*;ūĩ.Ím,wR†@ûcuK sĮéøVNF‰UÜ kjĶųIÚ$CsīØ÷æŽxZÎ;ģ™^D.SúOĘēŲ´û{ĩk#ąci<ĮlpŖ'úķR[i‚Æę1YWnŌę1Ķą¤åĄiļ“l.øŒr…FvÂGQīū5ÎęzMÕļž°DĪ2Ŧæcg !` 1ķëÛëÚĨÖũûwúbšá u%ĩĶ"Åx†Ũ™Ču?!×É[Ėmķ‚ å—<‚AÍ_“O‰.eĶute¸N`z.͏÷ąúÖĢ÷¤ÛĮ…|ä|z=žš37Ąí÷vĐųyĶ}—ėâR›ķŽ0yéøW?k–Ą$v—WpÚI"í))dby*#÷Æ}̆˛ņNЧŲɤ$Šua0ČY•ˇ~HR¤’}ję級Dv–vŅZA+ŒOÆ÷`G$Ī_CƒÖŗå}Bå}GÄ÷zŊŨĻĨGd2VI‘‡˜W<ãhd÷įëV,ī!šđŦIuŨ zĮ„ėė.üa$ÖĐOģĖ!¤„˙ŧl‘éŠr´Ajy­žžú•ÅƟhwˊĪ. }¤äS¤zíŊv:7ÄöĶ ĩ´šˇķ8Á•Ø>2äqŒd1ōVÆąĄZ[Ā÷šnž–÷vāH“ZBĒĘw(å€ā`ŸÃ5ÉχĢ?ˆ|ČTĢH å&V“ ¤ œÃ#=bp u%¨jeÖf‘tāöŒå‹dņģI$e€Î|ũ s†åÖâækiĮ˜!Æ9Č(9^ĀČęĪž/ëfS YypJ3ŗ÷FØÎTlč@#õĒ2›kIî Î^AŅÜT OLíëÜžŪՒاšąc#ž›;‡f]ŁķØ‘ųÉÖ.56Î6\Ldyā/ôæļ­ĶĖŗ‰ÂėV@Bį8ČŽÆëûSÅésŸ”¤åĀ (?“ k¸3¨‹ŖņĶ&z b•# Ķīg餛îЀĢp3ÉÅg\Ž•Ĩ Č5Ÿ8ËU!ˇ 4jJãŧvøf`;ēüxWe8‘\oď ļ:P~ĩqŨ [SIKHks ĸŠ(§SE:€ĻN‚ĄŠ—   ZĶ9Öm‡û`ÕEĢēHÎŗÔ˙*OaŖŅ < ЇĩfĀphBzVE㠎ĩaN*´gŠ˜HĮåŦ –úo~>¸­ârĸšÛÃļåÜēėN=2h™ņ$qÛęqÜKēH€åã¸=Ģ3ûAïØCÛŖÉ•ÜÛļęy=ųŽŗ^°ûv’Ėƒ/ÎŖÔw—ōŽ^ōÖŲôŗ3OåĪ 1žÆpDģEį8ô ķÍZqÖÂÖĀÎ$•#g’4u!šį9ÎsíT.QŖx-ĘHU|Œ]•rw=:ôuÎsY—r2ŧpĪ™-".b°|~‡­hh3[ŨIu Äŗš! =SoŠô āūt€O[Ļĩž1ˆÚ0ƒÛæk& Ėr+Ēs]LÖ¯ŠčōÚÉ˙vä÷ū!×úūb¸ņ‘œŒqŠk`;›_Bҟ4į$ļÉrįņøņøÔWÚ´ˆÍRyl˜ÂČJĮ#=?:äcr*u¸Čˇ­K‰ĸzãQbųp“{HŽĪÁŪ![XŨ.÷6Ô Ņ[¸úWœÆŲ=xĢ–—ml[r4‘7TŨŽ}GŊ&¯ĄIØöųĄ’XÅ­ĀGNFz\g‰!7–qE)ōˇžY‰'9ō?^įŠÎŌüAtŪÛy1šrO+Ķ^1ūf˙ÄÖÖ ōۛ›˛áˇJŖd]ˆU?xžO×4šfĻ‡ŨéRĮaڋE}pŠĒĄ9⑸Ė`ø:÷ŦY-lĐÍwwxˇ4ˆÅƒAVįēéZŽöÚŧ‘­¤ŗŨËtĄ‰”Ÿ˜€7|ŠŽ@ÅWÖbÕl´´ûJ|įrŽÉ†z TŒäA—iĒē’;}–æmãīĘįÉ=*åĖvŽŠ Ŧo#+5 D~Ž1ØdnōĢáČāģū͆kU1Ÿ>62l‘”Ÿē|ŦGĻ9õފÆhf´´Q2Äq1Ž1 ¨?ÛNTû‚=0OZą7uĸ„ĄšˆÛ&āí ˈ§%Jäí=yžĩ×h:Ũ­‡„l@‚_-pA.IûçŸÖš]WH˛ûK[Z]Ü,Ō¸[x”VS÷˜0čÉĮĐVėáĩ ->5ÍŊ˜Č;|ŋuūųĨ-V WTŗ‚?>õdXmŽJ ¨ÂÁČ;NÆ bCâĢÛ=JÆČEu›LąĀąéå|đO,ü}í܊čl´QĢkĖ'Uhėą 1ēvÉ÷hĪ×ŌﴟiÚ>¤5 XĖRɇŒą˜ dŸŊķž§ķĖ]%ŠZ–5‹‰í Š8aƒÉabŖ۟tđpÁ Ä:ö—ÕO_oæēĖ+cŪž ëÚē GF†õ>ŲϜŗrcéī\ķŠ:”uāŠ4÷eČ Ro pŋ•SWÚ:ÕË 6Üy˜\&7āŽOų÷¤ËLę|;ģŌ/až=‚ŨÔÃ!ČewôõÆÜÔë§Ë¨D‰rÁ˛ĘûY˜gĸž˙_qÖŠÅ }n{Xf”ÚKp™ƒ&A-œpsŽ?ę.c‚îģiŧƓ ƛY¤Q€7)ÎAüqYŊËž†N§ËŦ‰áŅ3O`ėä4I’`ûíüŊ+ >:}ēM7™ÉgFbIęs¸ū˙J[YW@đŊŊ‹ėēŧÂy~`O^:äkMBö .ÛS¸ša=ŠŲ*É+29ÎŨÅIëœgšĩdģáđËj0Ëui6gÁPyėĘ õĪjääÕ'ŧģ”Û’Č  |ãˇÍ’{d}*ũ÷ˆnīî’Ą XelcĪ͎üÕāl#MCY¸W™IS=€ęXúōOˇ5Z­Čš&öE‘Õ¯×mԋ˛G%}=IÆ ë|3döļŗ_^Š2dK7œđ‘SĶ>ūõËĮ´ĘšŽŠ2ÆTnˇ‰Īī°ū÷ĸöūzŖÄ~l6R…hmĻ”GaûŌp÷߀H_`qėgkᲖæöIåQ–PÎÄ\–'ŸrN=ą]#}áéÚŧ›ÄbęšzDúŒqG e°A=pŠĨąĩņ~›gh-üC YÅ1‰JJЏÉ@č9į=Į§õ5uÜ*‚Ų C8ātĻÜ>N;zP —ī“TŨDßĨ\”dō=úSą ĄX×ņQvxr×Ūíô¯@!ŖB+Ī>*“ũ…dõēĪū:ÕqøĨąääŌb‘Ž”™5Đd&Ĩgۊ)iÂ9ČF#ØRIĀ>”TŖĨ0Ŗ¨Ë#(õ#å"ÖΆū&’gœF˜ŦeģáŽ5 Î?€ÖĻ[ ¤$ņÍ_„ÕXjŊf2ō*e¨#É\äŊŒäi\d7Kks'™k§Ūteȍāzœõ ž9ÍE.-ÄA/īY`GiEŧLpĨŽI,y=šãV‚iw÷ ĩõ d?Ũļæcø–ŖžßEĶÕdē‘îH} Ü6åVĮO.<…˙ĸā.S°épSé]Áķã–e/ÆFz}kŒ?Æ m1¤KbŽ{æ0Ô möˇŋųūu‰ã =đEtŖ|Ļ÷î§đ<~5š˛Hãmä °ņūĨ[žîc1Ī ŧlyW^)'`<Ž;™ĸb¯Č:ezSMüÂBJĻôwŅtĸ‹+qƒü#ĘĢρĨģlņž˜‘‡õĒæAc€‹t(¸éÁŖíã€Ņäúî˙ëW 7…t— 2ũ$'ųæ > ĶÉÂŧÃũí§˙eŖ™Ėáū؜hÛøŽöŲvG}v‹ĶfōGäN+Ĩ“Āö¤q;Ž;Æŋũj§'ŅžåĀŨøŅt”ŗÏĩGĶø­Ŗ9ü֐øĸųĀ˙ME'ē@ˆGäĸޟJ~íÚsßiãQˇn×8ž&ôßū&—ē=Jjˇ¤ ›ųĻé$¤ųšŋļĢĄĪĨM[¸VH6Ũ’r9äT_đ…j]PDÃūē IÆįÉ 7퉉Æyí×hKĸÉmũ…tv"žI=‘Ō/Ę0Āŧ˙*ØˇŋÚą .,–4>Ib́ĀÃGŽIãņäĨšÔmŽæ6ĐHļŽûŖ#y‘Žs€F? æĨÔŧK¨^[=ĸÃ:īûĪ-Ë37ŽxŠhw/_ŧē˜–+t?éwÖđ ›qøĶmĩÍfÚņ/Dō™ãRĢ#&ė ä㠎Ԝ[ĪYņ]iloėāk…Ėˏéķpq^vúF­¤ŲĮ=ŧ2_iŌwŒfHŋ¨÷ūTIâëŊQĸļÕH(\feM¸ãü+Ķ H×OEļu•YyzŠ›¸Ģ2ˇ<Ú)^_E+DČÂd(Į|ŗũMwē2‘Ļ8=Lķ˙čÖ˙ âmíŌᯗÆI@.q–bōŊH€ĮŖ@ėc˟ŧ#ũö'˙fĸ`‹Ú|jžcyŒāČØŨØdŒ}==Ēė­Žũ+6ŅUI| Ōœwl‚}ĮOJœõ=* #ķT擯J•¤Ũ“ƒ€j´ŧšh 7ĮåŋX—Ō‡ũv?úzŒŖæĪw¯+øŠ"ĩŨŽCų•˙ ԟÄDļ<ö“: BIރ0Áôĸ“ŸZ(H¤ō)¸ œ)1J.ō+Ã,|ų΍_ë\ųŋ჉Ž3čŋÖĻ[ ” kBŒVt<ŽiCŽyŦ†\CVPæĢÆ*xÁÉÉëHd‚‹‡(Ĩ‡F#šœFŊqŠbА0\„cœSÄj1LĶÆ}?*W §l֘¤‘ĪZ~zsJ㰆ŲOŋօĩŒ¸§ę Ķˇ0č3N h¸ė'ŲāZcŲqN[Kry„~fŽOj)\,!ŗˇazüƚtč9,ėƒÔ0ãôŠAõ?‘§‰1Ü~t\v!]*0N$~šį”čęøÄÄ÷úõid>õ2ÉīJãą@hmœŦÃ#ÕøĶÛFœáVX€ükI_‘S,Āp8÷Ĩv2Fu“¸ÄÜķķđ¤:uŌa˛{8­ āާZëĮãG04` 2đɓL0˙ž,įb rF3ƒZbCü+øâ”9#æ$ŅĖ+rÛe˜ĩžsĶ0˙>*œše‹äËĻ[;­—ü:×Q…4ĸ%ĮR>”s Į&‹Ĩ>@Ķ-A¨ŒúUË+, ō-G•sąO†zWR#Dū#šÂļzî(æŽ`xWEkĄså:ÎN˙1f`Āū|Ué!#HÍĖÂŲ&ā~á Nœ ŅhJŠ˙€ÔB!c × QĖ ›8›ōƒŽ˜Ī5#¸īŽ*0YWn:Tr7Ŋ!Œ’A“ŠĢ#ūT˛ÉęœÎqФ"+‰† Íy'ꄚŨ˛áˇĪæĮü+ͧ-éšōOKæø™ÔŸõq"3ũkZ{“-Žb’‘éH[5š˜”QĪ­)Ō*NÔÆ‚” Jp Åt^´–-ķ:’´úõŦŖ2ʑ/Ūv ?īí ØŠŖ…P2}‹ļøĮ$ūUr˛Íš¯ÕØ’ŗåËq¸j'FHĒC*'Ō§L’1ĪdZĶ„xõĒ~lČsœŠš9D˜ä‚}M.Y 4JĢ’p*A9Ļ,Gŗ0üięŗvŸ¨ĨË"މGÕ"Ą­5LŖ¯?J•#Ž)rČ|ҍww5`!#Ĩ5a`rš?LŠƕ¤ˆĢië‘eoJxv'Ĩ&¤ˆÃģxäԋęE=¯;J—'Đ~TŊîÁĄN)Ø=ŗSz␂s¤úf•åØ4îWfĮSQĶ•R õŠæ†W\W[fS–ˆ‘čĸī°YwĢgĶÆ#ÖĻ(ÃūYøŠc ūts>ÁƊÍĮLâ |ãšŧëĮŨũ*ģDH94ųÔĄ!Į˙^ŠJN8­I!öŦû¤ØĒSVd\–ŊņĪö_>s‰6gũĐô¯[Ôå)žá€:׋]KöŠå˜õvg'ęs]]îĖĻŦV¤§|ŖŪšMt‰ÍsE[ˇˆĘãˇ8¨æ9 œwĻHåÜąã5gí0ˆvˆÎā0 €ĐlŒ1nqœbĸO™€¤\–‰"¤|q°`Đ–‹mŋU8!éũkĩ„åü1-4­ÉáAũÂē¸W‘P÷vv:ŠU´R6ĐHõŠš5ÃdŒPŽ7sĪãVzcß5#$íĮ&¤ ÆŊF_ ؚ7ŗ0“Îđ)VL“ÅGdŒ’ Šö€§§NԑŽ['ĩMģi Œ0ãŸÆ—ø€ÅHÉqRpõÅF)Å2ŧg>ÔõÆŌ9Įz•`UmDŸ( žƒ­Yva@!čÛzšvčZFğ?ĶTnĮĢ´9ųH#“‘€ô™I–ĸģŽ}Ēe^{UL”įp*ÄNdqHeÅĀô5j0 ­PQÉ9īũ*xÉč9  Y˜ Ã4đ̟ģüĒžY.€ žôášrėAįšWËÂ=˸.)ĒũõĻFÄāƒúԏ–3‡*ŪÔŽ"@"uČuķFÅŨķYîˇ0Ą,;ãŊ:+Íß+d{b€šĄåq•$TrnLîÎĩF†Ō58}āîÂzi ]āšīQI›”ĻüôüéGŒĀІ#F# tŒ}*T™$PÜG¯qMr:MJP9Bx”äãšĐŸ…S˜df¨W1î-Ã)Üš¯$øƒĻ­–Ģņ¨T@ūđ<ū„W˛O^yņ*ÔIŖÛÜĖSã>Ėõ´†ŒOSˍ%)Ā÷¤­Č ŅER×ןđ¤ūĐŋ˙“ˇürøRŸč_˙Éۏū9@# x¯­˙áK|>˙Ą˙'.?øē_øR˙ŋč_˙ÉÉ˙øēųĪÃДĶÕēobÕЧŠ÷ˆ>ø2Ū5Ž-j¨Āj˜˙7ŠĮß /M+˙&%˙âĒlĀđø”ņV‘kڇÃ˙ /M3˙&%˙âŠÃĀ~4ßü'˙G(0„cĻ +ØG|6:iŋųOū*œ<áŅĶO˙ČŌņU<ŦR¨ä‘Īn˜¯[˙„'ÃŲĪöūF“˙ЧÂá˙ú˙äi?øĒ9N›ņĀÅ#íÍzØđ~‚:Xäg˙âŠ?áĐįÃ˙#?˙K‘äčŦ@Ī­L †ÉéŠõ1á t°˙ȝ˙ÅRŸčG­ūEņŖ‘ŒķF3éJ›BvĮÖŊ8xGB,ō+˙ņTŋđ‰hcĨ–?íĢ˙/fÄy˛`į¨ÉĮĩč'Âú1ëg˙‘_üiŖÂš(l‹.ëĢ˙K§!ĻŽ#Č'i=3SĒ(ĀÁæģoøFôœcė§õÕ˙Ɲ˙ū—Įú1ã§īühöl.q¨=Oz´œ/OÎēąĸiÃĨŋū>ßãKũaŒ}Ÿ÷ÛühöL.qŦßéđëŌĻtķ zWWũ‰§dŗō;īoņŠ?˛Ŧp0:|ĮühöL.ÎQ#Úŧ€=ęAĮā×L4›0 ãũö˙_ėģ"0`÷Ņ˙^ŅÎl2‘ĩ¸ņQ\iģĪ™|ã°ÔdX˙Īü}ŋƞ4ëQŌ#Ķ|˙%FAsŠ2M—?…KžcĐā˙JëäŌėåûđƒ˙?ãQ˙biĀä[}ŋƟ˛\å’荹 3؎GJ˜¤r3cŊtGD͘‚mų>v˙pŌ,GH1˙oņĨėd;Ŗ’ØÆI<ōjÛsšîŋ˛lyũĀį¯ĖÆĄ“ÃÚ\¤ļš9Ģ)–LzŊMAĄ\øŒĐ8í_^˙”ø{˙B˙ūNÜņĘ?áIü<˙Ą˙'n?øåj#ä<û +ëßøRŸč^ø?˙EwÔQEQEQEQEQEQEQEW1ãĪęđÅÎąeemr.͐Ŗ3*! īl‘šxxÎÕuĪ‹TÖt}Čé‹ĘÚuã8Ô$\å€UĘ#cĸå7ƒ˛–ĨX)Ļ’mĨy%ĒōķDš%ĄÜQ\埈.üKĨiˇūŽg{ģ^^)?ge`6A؝ã†m'-Ā1č>!Ô/¯ĩíî gÕô†@^"ŅÁp˛)x;™|Ø<‚Ũ<%T¤Ũ¯ÕõZÛUëĻūv°s#§ĸ¸=ƞ"×õ-^ÎßÖĀéג[I<—­ĻÕÚ¯åŗHÅŧÆûŠvg“Íí+Į–÷^ÕĩŊRÉô×ŌgšÚōÜĖ’bHņōŖä'rĶ,qčN•2üDM&Õļiŋ{męĀĻ™×Q\ŦZ—Šž×LÕ^ĘÉ-ŽĨ€\ižTĻâŪ9RŪnpY e1¨0ĪŽü&2ģ×üG ØhēaÔt衖e‘ā”3+HBîvČØ0ƒī~^\2úŗŋ,ŖĻūōĶTŸÜÚōęŽiEc\Iâ)įH-aĶė@’Iu1k•2ÁĸT2@Ā;É@Û×nv‰âģŊKÂúŊãéŪn̤KqkqmlIIį…rDGļˇČČÎ9ÆN+ 7h´öëĩŨ•ũ_Ÿ­‡ĖŽĒ¨ęZņö?ˇĪäũ˛å- ųˇĘųÚŧŒāōx÷¯?Ö|aâŨÂ6ôÚ0Ö5 ‚ÛG]:s,ŽÄ|€ųšÜ†~^åęFuĩũwÄ?ü"Ļ˙MŅž[­NŪŌy’Y$ōä“zą‰JŽÜĻpʼnŠá‡Ėzã–ÔR3M7%¤ˇåNöēÛMÕĶŲyO:;ŠĘŌ|KŖk×W–ÚVŖ ä–{<ķ,‹ŧ¸qōˇCМczōĘĶQĩ{[ëXnm¤ÆøgŒ:6FAāōü+Šđ„[|LņĖD‘CéŠq¨UE€í\ô(ĶŠF¤ųĸŽļļézõm4[ŊøŠāŊ:ūâÆëYōîmĨheO˛Ėvē’ČLAéZ>ņˇ‡üU<Đ莝tđ(yHļ•8fP2yĀÎNĄŠ/¯4ßxj÷Pē’cg˛Üžį/,Ĩö€1ÕäĀĪN2zš<'Ļ]éÚ7›ŠęˇŌĩåö˛ž>A–o•,c@{ÖÕ!…ö¤#$īdÛVow§/EįÕ!'+ØÜĸŠ+Î,(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠáū0˙É+Öí‡ūŽ¯/Œ&Ô,#M3BÖbÔîw$Q_éŌE †ÃĖį ŗ€NÖ,AxŠüyáûŋx/PŅŦd†;›Ÿ/cNÄ Û"ąÉžŠ{WG^НF8HBQ撔ží[Hîē§nëo2,ų'>>Õ4/ęVÚļĢá84öĪ‘o$ą5៿–š8˛Jô Ŧr:áZđP}ƞ-’įÃWē5­×ŲÚÖ,šHöE–!ĄR›ˆÁÚ ų›hÜk͍­'šÎĨ9B¤oĖŦõk^nkÛkžŽÎúl–zÉ$ŠÃ=–Ąn÷ZÕÕôæÆh•áb[s¨?ŨÎījįĶ@žÖ<+ãīũ–öŪúķXēŊĩ2Ú:Į2“lŒ|Å0>n‡8 WŽQRŗ9FŦĒÆ6o•īŗƒMt×mPric•ŌXrÎØiz’Ę6ÔnæđîâA¨x{Są›ûNâō; k $YØĒ‘2¨G၃Œ Ü(Čôę+g˜ķQö2†GĢ_e˛ŋ]/}oĐ\šÜōī ß=įˆnŧ[â­+P‡Tuû=…ĸh×rn7ˆđĖۉ'Ž3‚ˆõ›˙hūē›ÃÚĩĨÜZÔ×6‹e<ÆcyąaĀoŪÃæŊFŠo1‡ĩU}žĢoyŲ+5eĻÚßŊõęîrikœũ‰..ĩRŪ]PƒOŗ‚9ážh_1QPû†q´9§ķ¨–^?ņv§q§ë)g¨}ėŌd]3ˈĢđ#ČÁ=Āö¯Gĸ°†*œâŠé$–īŖNû=[^Ü_sƒŊ‹PņgÄKKYlŽađî„ÂėÉ=ŗF.¯BlbAe\į `sĘkŧĸŠĘŊjŖŦĸŦ—âßĢzŋ’č4ŦQEsŒ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ˙Ų Pixcomp[2]: w = 353, h = 281, d = 32 comptype = 2, size = 16102, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(ĸ€ Đ´¸SYâ´mãŨį@*”§ũ!‡Ŋ\šĒãũ%ĪŊ‹öö†XÃnÆ{UĨŌšŋ•Kb€ÛGô­Vm–gCŌDĻ˙cÍūÁ­„ÎzU•@EMÆsëŖLĮcüMĀāŠĮԊõQ9ʃø _)s€ĢųRįcąåM‡ž?īēQĻÛûßuęÆŪ0så§ũō)VŪ"FaŒũTRįacĘŋŗĄ*q?Ū¨Î—xZõŗcjŲ k úÆ)¤Ø“˙Vį×1 9ÂĮ•.œpįNm??) L×§ÉĸiŽHû¸ú č`6Q~FŽv+eũš zG° 0Äãë^‰˙öžI"ÛŲČ økNlâ)ŌF˙9ĀķėØÁāūf†Ķ“üÕčMák#™×ūÚP Až'˜~4ųĀā~ÂdšwŲ}I?C˙ÖŽáü)k™ŋJŦ|-ƒōŨ°ú §ĖîqĻŅāœį֛ö.r W['†¤‘rš÷ŽŠÉ \/Iaoø ֟0hsdŲĪ#ō¨Íž:æˇßEģSÂÄŨsUßMģm‰ú=4ÄaËhq–öĒR.s'Č>ÆēCkt8û4ŸcęeȐʖīĪ,1WÜOGt^ˆ†‹x æĢÉžäŽęEgiķĘ_Č^Čö­–eŠ= vĢ5SæE?˛/÷įEMæ­YĄÎQEÎqkBßũB˙žõŸWāâ  ĮZŽĮũ%ÍNŊjævÅ&é,#ũÄyūč­5‡ŠĄbqcŅEiÄqÍdh ÍOw"œ¯ųúŌî¤íđ™¤EÜqSŦF€EJ(NqŠ“o4€@§ÁÍf™æ‚{ĐÁM=#Í6<9ëíVŖL°ũ) DOjąL{dT‘Â[ƒŌŽÅ_‘DQÂp8æŦ­š"ό:Tę9,h­åŪ•aöĢ[¤QXÄhōđr*ŅAÅ!QߐŠÛ9:‘Z× ą!wü­aÜĘ$´‡°QW5…7-L˛ˆģeaÉôöÜāÍZŊš ¸gŠįŽ'2ąĮOį[6ĸŦ‹?h÷ĸ¨cڊfĖ)E<ÄëŽ3ŸJí1⨠dæ‚Jĸ¯Dq}*•\Oõkô:œš‹9Ī֞”Áūšé1ŖĨ´˙V ņĀ­`ZĄnŸ(úUÄ8Ī>•‘eĨn č˛ÍŽiĐ@\sĀĢđ©ڐĊ"juSŠxP) cĨ!!y5OŲi<Š%bOŨĢ1؁ƒÁĪs@ĘĀ<jÄŸÄx÷5r(Ēŗ˜Žž•7”ÅF启ĒgÜÕ¸ã㑁ך#…W­JŖ“ė dņ 8 v¨md“Heĩ‘}*PĮ°5V5ÜkB(*XÆāņÁ§ĒŌ¸]ØqOU#‚ZC"<Žĩ>aÍYe÷4Öw¤yŨČéO=h„fĻû2šĪ#˙]CԞ)I>õdĀÎ4čĄ\Ž)jÅÅ5Ą¯Zŧ ­1—>ŧP38ÅĩHÆEWxÛ?ŸlVŖ' Waƒé@Œæ\šié‘WŨT¯AųT/ā~Ā ČyǞĮZN‡=Ē´ąõû¸§Č_*.!˙ŋ‚°cœáqÔ>ĖĮ5#ŨÃ(ĘsĩPnoLäJÃ7ÖXˆČ•Ņ…=Ķ?B+Îõåŧyhé"d?@=°+O27 Œč§ŅĒšĖ{:ļäāR$ōj†‹¸i6Ą˛O”˜Īûĸ´9ŨžøëŠĖ˛íŦy9ëW˜ap*……íŖOöu¸GŸœĒļvã×*ŽĨĒę‰rÖĐÁkf…ö%ÅË3ī÷UlûRĩĮsuS'§įR…ųpPŅ㸊ËmÕĐš›Í™T`˜ācļíŠĐī×ōŠe°ĀÍByÎGnÕ4‡Ü͏įĩIkyŽÉČ8ÅA°[­<ŅE¸āyŒ?LÕÂw!œŽÔ˜U2zņSGĮ=ĪåOQ†ûŧŌ—ãõíHn'éM* 9jpƒ×č!•âĢȃķĻjzœz{Û#D_í QpĀs1úũ=ÅŪÅŖ“Ŧ•×,LqŽš?1˙€š "d#žG5}h[øeÔ%˛áâ,JāôíÃ¨ę{UDÔ š+Š9€ˇR[)ׯN}ŠØDÎ3ŌĢH š–)â¸‹Ė…ˇ&HÎ=*7ôīT€Ą2ú~uBQ‚x­I@9ĒWĐS—*šÎēmąžj֚2G5—x€C!įîÕ!EIKI]&!EPЁ@RTåIweÃĘC3eąŪĒÕąÚ€46ëe–…xuÍTŗÁŧŒļ?'Ū\”ë˙Ô~”ļ;[eƊׁ@ZĘŗíéZņÚą4,F0sSģĮ9Ļ â§PĒ9ëH­ãUy[Ž\ķø °p@âĒÛļQķ˙=˙B4ųT7Ė]ÕPdí8 ÜŨClŠŽ7;c95›,‘ŦŽĒËĪ8Ī9˙õT%šgEi™‰ĪéPŨ&›4 Ũæ!2 6¤#”Į/*Žėc=Ž})eÕ-IËČšRFräã°EcŨM ”ĀĮtވÂD‰7ųéë““īYfūFāY#ōämėĒp1ëTĸ+’\´frŅ;´¸-××ķ¨ž7‘ËÆYšĩ{HŌô‰æÜ,Ոëˡ öõĢú¤H–âÖ¸Üʝ0™āĶŋAXīt¨öXB7g ́Å] wwĮĨ2ŎŒ3°\’@ ÎMasRŋ‡ÚI.ÉeØ<˛@XŲVNGÎ Ā<“ÛĻy§Üx§@`Éqx ĩ’X›ÔŽ?Ĩ'‡TŦäyí2Ŧ8ÁŠDGĘž=q×íŠÜ˜ŋ–DEK˛›ĘN8Î;PŪ ļ+čņÚ 2°m\"ã1-Įˇ5yž÷_ŌĢXKö:Úc”d‰\ÆvdgöĢeA`H9?•C(ŠAœ ƒôíQFÄÜúâŦ‰qP,Aæårįڀ-\GwöT6Š`Ÿ;ĻqÆo^ģuiÖ+¸íV#Ęä*ĶųqUĩ‡Ķ-m¯ŗæČĮČP3“:}Ūũé] ņŒƒ–Įx˙ /šÉXôŊBČI\í*Ud 2Sß"‘žŧįęjÕ­”ë}r×2ÆA’°Ë÷yĪ`aõÉëÚŠÛHÃ÷›nūŌA?9ŪäĒ@ųŽsŒqœ*w ĨÕŠŗļtÚŪsžá.á&K“´sÎzc>•§ ãĨ.Î“ ˛20-à §īžŲ?įĶĨI*Ķl ų*´Ŗ$ÕšÔ㊨ũ9Ļ€Š*đk6ō,Á'Ō´ÜõÍPŊ˙PāqLG‰ŌSНJę0Š( (‚”PŠšUZĩš‘AíR鋝F?÷‰¨Ôú@ÎĸŸ)lTw;;@ÁFqZŅ•“l ԇ ŦK-Ŗ)åō<Ôj ëRˇéHm ōyÄßú§4噂Ģ?ņšĒŠyē[+žféĮL˙úÅsž%Õ.ūÔmāqē YąŸĶ4Ōl4ĩ ´ŗÚ$$ģ}ÅĪ'ķø×3ŠM%ÍĀķdFd?*ŸOsWė4MCUÛ4Ōĸ 5ūņÃŌˇ­4Í6ÔíĩˇK‚ŧ4˛ ŒûSē‰;œ„6O˜īYigaâ9.@Xᡡķ[Đ18ņŖœ,]ž’ĶG´´ŗ\ íN…sÉ˙­Žy.–Y.ŒcÉQ NG#=‡­rēÄסë4äíâÁ8ÕŊ.â´û4¤,ŪbÉ?{'Sųš\ļÔw=vŨ@pp)“Ęę  €Ą>ūÔG¸ ĀÃmüĒ;‚VŪwųXŨ†ÃƒĐô÷ŦMxvŪn&XŖxØFģ–hc”’z#ŽŧC֜<-AZϰ@ ļųČö9.†VK›–[ß´ŽÔT‘eY1ÆBŽyÎ2{U;í:hw>¯5íũ V.ŅČU@āŒÄ›rĪ÷ŊņEõ*ƐšJŌ,ÆešU#W3ŋ ÷‰Î8ęHĸę{­*YŪˇ'XWŪÅNŌ ØxÎOCŌĨY’ÂÚŪ‚VA.2Tuįč8îj }BŌ >[Č-%ƒ÷™’#1žã€Nß\}ęGbΎZm=Ĩr۞G$FߘņĪ5u÷˜1éQiķ›;t…]ܯ˜  ƒĶ˙×Vĸ¸ĩdPŠjΊ?âcĪe5UO5wCŊ'ŅjeąQÜė-ąÅjÁČŦģaŌĩ!8ëŪ˛,ˇũi͕‘ĩ°’1“úR.GQie(Ãmx×#ļN?­aÛÂnīnŽ$@ÍnΎwC#1Æ}…RĨÕĩŧvc&ÔH›Yy Įã[:IdŌg›hķ'bÃpãstü‡5v˛ãPkēŠš¸Æ\? Ģw?OåT˚ÍĐ-ööŒc ;œbŽ41ÚD^Mė:œrX÷&ŖĩÖ-Ue/o*`q€3ŸNqKĐ K6šksiu<Œí…ŪۆâˇdļŗŊWļÔîâ]FrŖ1ɁšxPTũjĨocqymnū{G$U73rpĮŸ§įԟŠxqá†YBî”!,ÄüŦsËzį0)jz}Õĩŧ6­-ļÆPsœũzĐVŕŋØŌÚ'AæČ@`8cÖŦË!Ôtev'6’aĨÜ2Pã ˙|ßQŽæ™dōIwJ˜“F§q‚IČũ*[Đv;øđß\tĸ)‘Ú!į4yĘFAlã8äŽ~´‘a‰r¸Æ;TZŲØJžTb #Kå¨É|ßÂįŠÄŲ"õœ×o}2FL˜&G`0ÛxSōš>¤õëPkk2#lŅm÷ĒäĄŧ;—ūPņėiÚYh÷ bĐÜ\†!?{š ``¸į§ĐTF×QĮu{ÍŨĖ|Æ#•b†2záCdū$š FĩũˆŊXņs-ŦĒNÉ"`žŖG‚;U9íŊ€‚ŪQ<Í6ÖyÜíÔîųHÎ@=†(Öt‰u'‹lļębUĻ„ģ)%NPĢ)R09ķCiŽ4[{k5ËBDnXŽ2I㓓ÉëHĻ‹ē>æŌ bAÜĨ¸ ’p=ĒøQƒŪ Ķ‘ŖĶ­•rą .šNäãŪŦãäŋÖ¤–Ŧ2qšŊŠ{IZTŒlšTbIųIã''¸ĒĐHÚāōÃČÔ.ÃĘ`` †Æ*Ņ’­íŊ¸´v…€ĖųĘį͌œôëĪ^ÕFT1ëlĶFs5ŌŠ8L…;°~oĨ4f·ŧ:â‘P`dįëÍ*Ž9¨ Æ=* ˙tŽË‘€{zâŦ0ųy¨ČEsãėM¯[ųÚė9EŖÂ*ŽY+Æq’AÉîx¨[BĮÅ÷ķ4*‹(Œ‚Ã÷cīÎ1ÎĨue/ü$‰~c&4×iĀ Ų7g$pŪũk#M´ī/šQwne@ʨ%õ,Ģ´‘Ž>fã¨íUļ+ĨęŽ-ËnRzē ¸cžy=z.lk ŒąģˆÉ}͜€\ÜÅUÉ,i˜ūư;‰oŗĄÎsü#Ü˙3Rģ––+ tüČÖ5U“ƒ¸F“Zĩ‰ĶcGĪ÷ķÎSøŗo3O¤9@–ĸņļGžw. Ų<įĐúōb҆5KD}ūlnRBũA? ŸĘ€;ĨBŅ:†d,¸Ü§•ã¨÷¨¤ā†FF9!ˇÍ'—Œä•Ļ3Ž3ëÎjÂ+ųL#eWĮ Ãpé‘UîK{T7 ˇ d9U€°l’@21ĩsĮëRŪfņ&ĻIWĖkĮûĒGnŨ?žjž›:MĒņīu ûTcÕņŒņœį€8äՐfØīŨÃsKË4Ūa胗U<ãĻĮ˜Ũ: Ų¨¤z,bRxbNnzHü ŖšĖ{aÃ\4ņĖå ČmĨIÎ ؊hEg´‘™įĶUåˇęęļ?:ŠĪķ@ÁâÃô9Šntøŧ—`ˆę_(đ;Ģw8=zzUK+y#šk‹;iĀB ;†>ĒGoqL ‘ÆėAŽ6ãø€'$vļw‘Ü_Oļ(ūú¯Í¸Œā00˙ūēȏ]Õ#W‰ØpG“ü…^˛´žūÖiŽ"ˆM#l‰Q@ÉÆrp~ŸˆĄĻ€ŗuâ(oĩËxãLÚ#yQą8#'¯ĶĩtZNķ­§tŸ÷X˙ėÕį÷z|–ĶL `ĸąîíž2+ĒđUÜķk).EX‰ z `qųŌ’ĶA§Šč¤Ę c Š“°r@ũ* ‰å‚Æî<‘*ČIGĘĢFŨĮ89zU¤åÆŠęĶIŧ&9%WfÆÄ[xÁČ%†{šĀÕ;÷1iē"ÜO‰n&4‰Ø¨,xąî@õâ’-KPģš‰môŠĸˇŪ“\ēĢ€x@IčG\c?…:ÎîÚËOî.b ;˛ É$ãŒ^ž”ČL’úc¨B§yf‚ Y>R9Px뜌t敍-Ūkvv“Éo+ÍĀpÂÖI$qƌ~GZ›í:eĢKŧ¯,ĩÚÔËĩŠŠųyųyõÎqíV¯5ĄŲĩˇ˛–kŒg¯B~ķ‘ūč4ÍSė˛ViäŽFÂŦqFŽXdü,GAČĮNŧP‘NZ ×å<æ‘ēIö˜CÆ<?J™˛:œ ’[šCGšū]jh$j Fæ,AˇG'¨ōÍT°I_f]¯‰e æÁČëZZ=Ũė Ú:Fģņ!<6¨Íc跗ę tĘ[ĩģČTF 3$ã9Įę{Ķîfί~F\ĶÁųGJ§[$ķŽjÃ>؁Å@î=ˆÆp3J[$~Užãũ)f”F…˜Ēš8ë@\įÚæE¸ņ ŲHŽÆBÍÎĶūĐÁözgžjļšæĘõlDĐÎûVCu>qÃrĨYŠž{š›HkŠ'ŧvX­^č-Ä W; –ä‚yĮ§ĻjĩēŨiz6Ļōˇ”ĘŦcpĘz/pzgņ­ #š˛EŌŖ†îö=Ģ#‰gœļX žsĀėHãjÅËYÂ?hŦJžZˆVmŅ+|¸į‚TcŽF9æŗgŊgŅ‘ã–5–yZUhĸ$$åW ŨxúUŨh5žĨí 1ę€rĢÁÜpßîäįÜ)Ģ(c÷€ Ž@ėi‡„į­:(įņĨˇ•ToaüG× ūBĄ¸n @PŲ‰į5HĮjܙäÔ[IHE&æā~U‡â”đŒj$ö…ˆüĢŖ‘väg­sž-Ä~Ô?ōĊĨēØņ3ŠJv=x¤ā{×Y€”Rå} ‚–”Æę2Q€õ"•UœüĒĮč3@õŠ3iS†qАhĀdq]‡ú˙=ōÎĒ×Má†qÕÍDö*'CŠ­œtĒqWbëY”^CM¸8ßOũ –>ƒšIūę˙žŸÎÅÛ[‹iĨĢ Ÿ!ŋš8„4#ˆ•6œgm9É­}Ûp9Š#pzū´†dC§]%–f•å™ūVvrĖĢ‘ÂÔ/¤ÛLD÷6¨n”˛Ģ2™8īƒ×ŪēF@ɅāöĀŦKɌj¨§ĢôõüšĄ092ĪŅ cėįž ÜK;hĘĩŊô ōƒĩ¸÷­28Ŗ’xäŽACÂdúžkAeŅ.5ōŒˆüŖú sMą#•Ô’×ΒßíH\ eŖ`ú gŸÂļü GŠžÕ„3cŠŽfYÅΊ,Ą‰ķˇLd×MāYŧífį*°÷Æ[˙­N_-ĪCAōåQ_M,0&##°#‡Û´c¯BOā H„ė•UÔŧƒ$ <3Č6ąÄkšHxaÜgđŦzš<öVšMŗjD˧LĖÄĀÛ¸āgļqT­î´¯í[T˛ˇˇJžj41¨*˜ûĮ ãVã‚âįM°6×Klë’ūPl‚Ŗ€ĩ7NŅī,/üÁ} G,$Ę-Äm! ķNpqĮ§Ō†“EEØĶy-/ã’Ōę#ĩÉCҐčO_Ú¯Ē`ßZ@r!ß#†%đāĐžy>ĸ”čvRLķ\ ŽrûÂM+4jzđ™ÛúTÜG]´€Mæ1e ˛) HNpĶŽŲ#ųRAsĒN``⤓8Æ9¨@Ve$ˇ§ZW9ëë׊‚™„Žrë~.c2>ūyļ~č9íĶV’Z ņ›ÄĨdPA —^3“ž‡ŋž5t†ļXu !Ķ>ĖD`ģŒfSķ *3ĶŽO_Î 8Ŗhą:Ā!P­•ÉʀÄ÷É™Å>ä•`ņ]Đ ‹pNrŦM˙ K\0Qc9*@#äÉ$Ŋėk–’â ]ŪōTb ¤d‡l1ŗ— @ę V–ÂMJXæĩfû4Ëæoˆä3íßķ§Ę…sž‡]VĨû$ûcœ‚„˙}{SWÅ6/j—8™afÚĸlx€kŽQčŪžÕ/VITī2nPWž™4—“&áũ: Ļ[ÉģĀÁ ūqK”.t1kzŒŗĮmVĖĮ|Ą-ŒeˆęOĘ3õĢz{I ķ2vā+ģqŠÖŧęî9§ģÕaŊâģ1˛Ãōa@9ƒŸ\ũkÕĩ(^ßMˇĩŽÚYĄ‘G›öx÷0 ČG<Ü⃐Į9 Ģ4.†é*øf310Š“bæDƒ“ķ@IÎcŽøŌÕėī¯5+iU [hdL9V#r“‘°÷Æá‘KĢCqu§ŲĮÆļʁ•e‹lĘÛHT2(88ĮéKŦ‹&ÖŦR{E–dehäĪúŧ“ƒĶ•ųíŌ‹Œĩpv)8ÁõŦšwõÍ^šmÍīQģŸŠĄOÉĩÖ`%š”Pא\§•wyâoū„ÄÍÆáÆ9ǐKäČnx隒æįí~Mģsß4ûœÜÉæÆ Lc&š’* Rp’+‘lÛß9ÍGŒļhHãdpĖ0S]G‡ŋäŋī7ķŽm¤ßŽ“Ãë51ũæūu3Øhčaæ¯ETbb¯FVE—#úR\ąûiüé">´\ž#÷Z@N§æ§€rH¨“æ9$槈õéŠLĨŊXŖ*O=0+é° •Gč=­h<1¤ ÁˆvŽ %íĩ¸b.3ŊIy˙ëІfZžsæG"žDŖūc5GVŋƒ2Úũšl†I#ÜĄ—¸Ŋ}ŋ] PÛ&6™NîĖŋô#Y^"HMĒHvŗ‰Ë*Į ÛÍ4õ9Aļŧ‰ccŽ[žÂģ/˜˙ĩ5-@U9 äĩs´I"ģc88Ž›áâĒĪĒHyxŸzœßē sĐÎ+?U0ũĒžé­”!(–ܤyã8ękD´cŠÉÖ/Ŗ´ž@n­ y!*~Ķ¤ÛæœõĪŠÜ˛üÖׯĻZĮitm]Ce1Œd‚÷ÁúU]&dÕĐM-ķę+ŒÖ7‘“ēũҟZˇ<÷ĐÛZĩ…ŦsÆcĞlŒx?($÷Î7MšÔ§ŊęÎŌ;-ļËÆ\ļW‚JŽ;úôíŠ}ÔÛŗ“Å)Š9,ˆärøéM^˜Īõ§¯*9äwŦĘ-Ŗ2 ū”ōųäzT€lf”“’pqŽŨi Ąe1ūÅÔf}InĸōIÜĒ_”œđ}0y?—f[3 É4„nû<”)ŧˇupHĐåt'åįn‘ËŒžÕhY4~0Iz@'vmEėû‹ēįۚcËų˛hru§NØÎÚĒėZĨ ŽY3ŸzĄ1įÚ­šæĒL3T„gÎÜWãį#ÂķWOũWg2Ækˆø‹(_ĮņNŖųŸéZGtKØōŠJv &ī]F"QKĮĄĸ€–”ŌPNɤÅ.(CŸJëŧ<ØĶ´ßΚ W[áō?ŗŖõÉūfĸ{ŽŠ"r*ü-T"WaŦÆ‹ŠƒR< 2í^¸ÉÔ(zU•ĮŠ#]:ß#åqŽ8™ĮõŠN‰~ëN?íģ˙Lĩ"°Š¸Η Ŗ#HnŋŊ<ņŠV°ÃîYn7c†?˜öĢ@ä͞h¸üģ‘Ō{ŸÄGū֘u(<‹š&t |¨0­]ÉíO GCJãą7ƒŦe@î? ĒJüõ52IĪZ’‹Čų|žž´æ%Ôĸ1Wa€Øä{Õ`øëR,Øíz@&oymo*]N–ČUvpŖunyÆÎj—‹įøzTĪË'ĘH÷­EŸī`}iŗ,Wė•Ķē°ČĸúÜV9(ãų.A *…ŽŖ˙¯úĶoŧ?%ēø5Qhí˜ļȸ9ĪšįŸa]0Ķtæ }Š.= $Ķ­¤+–¸`BųĖ@Įą4sÆÚØŨGm•~ŽcŒĒŠëÎ2Ã8öéÍ3Uˇŧžĩš+ÉTĢ Û!UM¤øëÖģô+Ûz,ˆÚXHAÅGsá›ØLrÉ;+)4ų…c’đĩÄÖöéŦŚ;Ȕc •Æ?ާ[tžōÖŨĨbČÅä@Đcķr1ߚ’ ÚApŗ-ĆV#åÃmÎ;gš­;Ģ š„Ķ[#MŒTŸŠgĨW¸Y–.,:ÅŊԘJʁ,OÍĐqŽŊN{đ:Ö ĨÚ^xĻ[…TÃB_æxˈqÁw `ŽX÷õĨ5…´úœz”‘îēEÚ¯žƒ ?öcL‹OŠ éŽÄŗ3Iü,ŲUÉÉĀú×đ¤˜šaœTnĀR–ãĒoZŽWÕIĨ‘ÆxĒrąéš¤89¯>ø.4‹dîč­]Äė@5į_ĻĖvgĢ;céũkX|H‰lp=i)pOjR1Ô×IÚ)xõĸ€E6¤ĮĶ@)@¤á@ 5Õč‘I š#ŠVđGŊ`éPųúŒJFBüĮđ˙ëâģh#8č*$ú !č2jôd•1ôâŽG|VmrhØØĢ(ʉŽ•aTTō˜zā÷Å/ ŲÍ(P*EķK”9…VöŠ8éM3Ú¤=ĒyXų„ãĩ!$`ŒTĸ5öĨōĐöšXų‘9ię8ę*E…?ģRöĨĘĘē!ûbž­Nļéč:Z!éŸÎ—+2+‚; xéS õoΜlÆ0Y˙īĒ-!Ū$Jĩ2ņOKF=Č0°'íJĖĢĀ0Ī$ũ*eäc÷§1ŗÄ¯ų ‘tųq/ū;JĖ/0™§*cÖĻsĪA˙|ĶžÉ9o^˜Æ){Â÷{•›‚9æĨEÍ8YÜŖgä#ņŠøSķ?áKPĶ¸Đ„t§ôõÅ;ɘã*?:O&|đœŧ)]ö .âtīMķšŠ%Žā/ŸÁ…@°É‘ž&Įļ aeܛ9äˇåL'#'Æ°ųfãđĻŲ˙V˙÷ÉŖ˜|¤lMDŲĮ5hão*sīUʒNAÅ5!r”ÜšĒ’įÖ´š0OBMUŽÂŠM ”Į¸ÜzķNN§mAŲoĻO˙c^™~ä)ŧƒÄ×j×g’˜@G°˙kĸ“ģ3š˛0ō}i -z×Iˆ”QE\[v1‡ÜÁ¨yŽu4Dû\ocŗ¸ĪZ–yaÚž@ Ų䁊dąų=H9ô¤E/Ķĩw˙Ŧ$ũhbUˆ@@  ī @DŗĘ{aķ?ŌēČ{W?áôŲ`9v,kĄ€VOq—ĸr:§5r:@XASQ%J)ܐzœTĒŪ¤ūTܨ˛p(o5Gņ•$ĪF'đĒÉ-ÍZE IÆGįO Ŋ#2¨é“ÚŖÎx¤2rāĸĨGtSnGZ|iŽũŠuXâ2H3€A5MޤũjE‚hËË:tÜ*eeoLzÎŊqŠ™ cƒøP;šĀqũjpũ*‚4›x?JŦŪŧŌ°îh$Ŗ>ŋCSlÖb3zūUln)ZM!ܘK´S$ČAĪjĄ)`ãžjjĘā€Ûė*EsW#Ī53ȨRWäpE=ĸķ—#å>„R ’‡‰šŽôíŠØū•šé%¸´õĢŪ+ŽŅE‚å†Û… ōĮĄĻe{ãō¨ÚR¤°ˆô5n0&PX-rc~†ĸ•PHûˆZ?šjŽ&,9 Æh°\RƒôČ"Ąxųæ§IQÕr:ĶXÔĮrƒĮ•į Õ9bSÚ´åj”Ŗå÷Ļ’Ė{›Tl‚Ģ^qãũ {ž‚Ū4u—l…@ĄüĮë^Ą0$W-ãAuá‹õĮ+qõSŸéZGF&x™cM4´•Ōf%Q@ JM}y˙ Oáįũ ˙ų;q˙Į)GÁO‡Ŗūe˙üœ¸˙ã”ō0Ĩí_\–ø}˙B˙ūN\ņtŋđĨū˙Đ˙'.?øēųķMĘĩ‰č VÄ#ÚŊé>x:1ōčø˙ˇ™ŋøē”|8đšôŌŋōb_ū*Ŗ•ŒđčĮJ´‚Ŋ¨|>đēôĶ?ōb_ū*ž<áĄĶM˙ČōņTrą4˜ŠyĮė?đ‚xo9ūÍ˙ČōņTīøB<;ųäi?øĒ\Œ`qīOƒ^Ä| áÃ×N˙ČōņTøptĶŋō4ŸüUŒ%‹‘CJAÚŖšõÁāŸėáúí'˙I˙O‡sŸėî봟üU.F3Čų-žiFOJõßøCųOū*—ūŨū|?ō4ŸüU/fĀōuŽjDÎ}…z§ü!Úüøäg˙âŠGƒôsöüŒ˙üÚæ*ŦW¨ÍJĒĄy9¯K˙„KC?ōå˙‘_üiG…tU_ų˙ƏfÄyÂmūīJ|Ÿzü"ú0˙—?üŠ˙ãNŌKC˙_üi{6;œ đ0Wŋj“jžøŽđxsIōé˙‘üiáŌņ˙ŋųŋƏfÂį ‘“ČläôĢaFФžĩ×Â?Ĩ˙Νū>ßãO&žŊ-Īũüoņ¤é0šÅHW8ÆGœŅŒĄŋ í?ątōsöaŸ÷›üi˛,6íō8˙}ŋƏc!Üã@n1QSÆøŽkĒūưÆ>Ī˙ˇøŅũ§˙Īŋū>ßãKØČ.rîÂD*Olâ ģ´*‰,cž:WaũaŒ}Ÿ÷ÛüißŲv{vų'›Ûühö2Î,ČcBŒ¸úĶáš@S–+­“CĶĻ9’Ø7ü ŋƘžŌÔåmq˙mühö21ĖųێX K$)!Ü{Šé‡§ļßøûŌĪ[_üˆßãM>Ō[Oüˆ˙ãOŲ1si2 Ö.§ne´š~Y§æ1^Æ|/Ŗļų˙ÆŖhR}ëíĢ˙?fÂįÄ. 9R0AÁĻw¯°%ø1đūyžY<> ģl]ÎO°| gü)O‡ŋô/˙äíĮ˙­‰>BÅõ÷ü)O‡ŋô/˙äíĮ˙ĸ€;ę(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ ++ÄzĨŪ‹ ŨęvļŨ}’'žXå¸1~íTąÚB6[€@õĘ[ø‹Į:˙…ôũ_@Ō4ČKÛy“GŠ—G¸“h?šUl*ĨؐpēčāęU‡´M(Ū×m-mëO¸—$@ĸš]Åw~'ĐaēŅôī*ķí-i} é)ö IrÃɃ´IÜ2SŌĩíA<_sá\[Mt,ÖūŪęŌ6Û ē31Vœaˆ ö#KV<ĘVŧou}l­wøŽē§utČéčŽĶÆž"ģņŽĨáØü9lķŲ,&IVõŧˆÃ#9-)99UyČsœ5t6Ą}¯XęÖ)ĨŨhŦ†áČ’Še> IČĪ9Ē`+ĶM´´IčĶvvŗ˛×[¯ŧĶ:z+ЇÄ^%Õŧ0|KĨX[GkĩχLš†Fšē…XōH΃*Ą$ŠÜCqŖâßÃãįđÅŽ—§ŗĪ§ŊŜ†IUˇ°W‚‹…?(SķūlŠŽ_ZRqM]^ú­-kßŌũ/×[Ģ:;Ę+Ÿ‚įÅ7n™–:}ĨüđŊ™¤2ÅlãnF.[-ü`.ĖØ™áŋ]ęŽĩĸjQÃũŖ¤K’ke+ŅĘĨã`ŦIVÛÃ.HpNxÅáfŖ)&Ÿ.öwŌöŋĨ˙4íf>cŖĒ:Æąa iSjzœūEœ|É63mÜÁG ęGjāî.kRx‰ūɧméWˇ$„q§īcōeÎíŧ@'’š“Āâëž7ņĨÕŗ\‹ ĘKtJdJųO@áƒÁ+ˇ>•×S/Q ę$ôŒeÍŅŨĨeé~÷ēwKBTõąčtQEy&EPEPEPEPEPEPEPEPEPEPEPEPEPEP?äDņũƒ.ôSW7āīFžŅāž÷0Û[Û$K§>'ų|Đūė'9ÜĖŧ}3×x‡O—VđÖĢĻĀČŗ]ŲÍm!!C:āŒŸJ<=§Ë¤økJĶgdi­,á‚FŒ’Ĩ‘’2ÆGĨzëQŽ ÂjīžöģZrÚú/‘ >kžs¨øoSĐÆ• ōj†—Ēęw^!‹IY6ų“ ĄPųĻį<œã‘’ĢSč°.ņq¯mü-s¤ééBÖÚH,IĻVâ5ÄDŒđø (-ˇ8ŖEjķYĘ3îšzĩģZŲiud•īĸKMÅėÕĪ?đ­Ë‰>+ēkN+mOėŸdš}:x‘ü¸X>K ƒĮ͌öÍA™5ߍŧĻÜA{mšmoomwö9#‹fW;ĀÛÆî…†Ošôz+7˜>yJ1ĩãīˇ/+Ooî­6!įūņ%ö‡áx4{ÃÚĖZŽ—líĩĶŪxîŠØ#x÷)mĄ3¸¨ÜOLioø\˙oû§ö?ėė˙´gOåų˙hÎ7lÆÜsŋîãŊzž6횧g4ĶÕÛŪĩí§uĩØrŊĪ?ņ\sMãģu?SžđŗØ“åZÃ$Ņ Ĩ”>fH˛YvĒ€2äđ>ņ|Eņ§‹dšđÕîkuövĩ‚ &’=‘FåˆhTĻâ0v‚~fÚ7ôę*–cjƒ†Ž)nÖÎ÷ļ×}^ˇōMnyUŽŖ/ˆüd5˙蚝ĨŽ™š4‹ 4{™dJ“pėˆWwĘ\œF †i\úb•ŽĨ!TĐP7L=Ē>øn *_HNáN72āāŠü)¤`Ž)¤Ÿjw*ĩĖ́ô‰XeX~TĐH>ôķę9Ļ+$Eö‰Ã1ü…?͔¯ú Í7üßĨd'Ú%Ũ†l~4ĶC~”ŊGŊ46Ūqí@XâRyoԐĪ09ŨĮŌ¤Å4€ėqéE ¤?ĮMiæĮųS™p27dŠaaDԟã4Ã<āũķO7jBŖúŋûø™˙ ㆌw?á^†#ãšQis°<í|"đd‡ņ,i˙đ„6Z܁ėÂŊÄp*6ÔSį`p_đ…`ōĐߤ˙„1s÷á˙ŋuŨ4us1œ_ü!Iž$ˆ}# ø-IcĪũs˙ë×cˇ‘”bŸ3Ž> \­‹ūũTRx9KeˆŽßēŽĪâ‚ŧSģŠoŒŪĮôōÅBŪ įũ|CūŲWnV˜ÉMIˆâOƒ#<™Ā>ÉL˙„1GK‘˙~˙úõڔāTF:|ĖG| ĮÂ˙ßüi‡ÂJ§ū>ũņ˙׮ɒĸhų§ĖÉ8öđ’į"a˙|õéŸđ‰ƒg_ûã˙¯]{%3g>ôs09_øDÔËpũsĻ7…€įÎū]irāÔe1EØŸü#&_ûã˙¯H<6Ŗī8˙ž?úõÔš@4ų˜×ü#qĪAø%!đėŦ‡ūųҞŒtĒԌt4]Ęjē,6ļ4näŽ:ãjšą ˜\‚NzVöļßņ,˜{æ+Õ'ûĸĩƒĐÎBŊPŋ˙R?ŪĢŊĒ–ĄĖkõĢ$Îĸ—PQF( ĨE%*ũá@o†´ČnÚS6X&03õŽęŌÖ@¸ĮOjå<C­×Žá]œk€+)-‹*ÜKšŽ%n$Á¨`=‘V8Å5ŋĩYETąˆ‹Š”G•õõ9Š6â2qŌŗc!ōúRųcw#š¯˜\bN}kL[–aÚĄ;Ģ¤D“Å(„úÚp;ĐAŠb+ų>ĸ€€j|zRÉ€"dRŧj\öĢFŠC (˛dÔM¨­!ąéLk|Šc2Ú>j&^+M ¨ Ķ9—Ōz ˇ%šíUÚ;qLw Rg#Ž„T,HõĻ"\f¯žGä¸ČįŠ+%FŅՀƨŖh< b)2T%9ĢėœT%8  ‡šŽEZdâĄhđhĢi…qVĘTN´ĀŦ~îMR™ˆÍ\šŖ?=)‰­16SjÆOõ˙ē+oV_ô)Ũ5‡0§ŌĩĻg1G"Šęę×ëVÖĒß˙ŠīV„ƒ”ŌPEPJŋx}i)Wī­w~ B ÍÛ8ŽæŌ¸ī&le|ËR?A]¤B˛–æ¨ļƒÍXRy Jŗœš†Q,˛sĶu*“ TģūTõV­I°š"'§éN ÎOĨNŠN ž +ųxė*6ûUŧR2ô÷  ė8éM#§š–EÚ)‘.[š`03Žj6ž*ÜËą7bĢ•ĘįöĸåXĒ@9GĮJ•Æ9›ž)U—'S%5,‹ÎA¨‘žlSģÛÚĒKj3ŌĩĘæĒ˧v'ŪÄcËjzЍŅ0+m“ŒbĢÉ{Sš&N]{ÔŠqŽ O$‚ĒŧD)Ü K2°§ 8Ē#ž*D—ƒ@4|Ô/YW)Ŧ4žęG5 ž*ü‰íTåˆPI# \ÕŖaž3WŲ ˇ^*Zc9ŨR3ö9˙Ü?ĘščOú:}+­Ôã͜ßîå\„'÷ ū{Ö´ĖĻ=O5V˙ũHúՀyĒ÷ßęGÖ´ Ī4”´”Ā(ĸŠ)Wī )Wī ôŒinGyōØÃŌ¸ī`iÔĘßŌģ{sYKsT[ŒUč#$ §­kXō3PĘ,[ÄU4Æ Y^=ęČíŠũëËeÁÁĖĒ0:ŗŨŖÛ4és@¤†”H ƒîzVEĩ¤0_:Î.Ų•˜’öõ8p{úįŠm¤[ĩ„Í/ü%f8ŧ¸‘Iá ųCpqßŊęî‚DēžĒ3šŌLä‘ĀÜã†?L1éÉŠĐ­KÖ÷–wlVÖî Ø.â"1đĻÍ{iŗ=ÄxI<Ļųŗ‡ÆvŸ|Ö6˜mß×Sŋ“(+˛FŽáötįq 䞇'Zd˛Yށ [_ØÂ î įE ÚFŋ<Œõ‹×ŊŊĩĩ(ˇ7Ä_îīlgœZĩ;.ģŪÛŦŕDfA¸–Æ0:œäUĖA6œ‡dD­ ĘrĘO<„Æ ˙E¸ņš Û@B€0ĻHĮ÷sÎ)؉o­.ĄIãi#bŽ™äž1˙?•W:œ–¯:͘Đe›ËaŽˆĪqTô˜÷暚š!XxÆ÷į”\ũr۟V¤6‘øjõ,n>ÕËoXĀā]Ŗ€8Ûüč˛ųu UļŽäČÍŦQ DĖXķžĪcÛĩ2æę vļd8]‘ŗ r@ã’:ÖeÜQ˙Â+YVFáŋˆåũמéĪŠŽĄąû8ŸÜ;‘bvōT“ĶåäŽF:švinā‚×2y§Ō&Ú8ĪŪÆ:Z ēģß5°2‰ąĖN#XY˜c9ȑĐÔVKo>—t|›ËtōØ7˜ÎĖQ’$öã‡ZĪŋž´ŽŌŌDŦy–'œœg¸ŸŌ‹ķ^$-”‘ŧÜ`ĸH>ƒ‘QÉwģÛ\9 WåUd.ŧ€ŗŽŊģŠ,É{ˇ 3ģrāpqU…âM’}šâ0Ģæ(‘TÔsüđy¨­ M¯]Į¸|ßyO§aČûŨúûTZk<–WKpåš51— ˜o Āéß§z6Kč|‡˜G!Ulē7pA'88ÉüECw~ļE3ÄÛdåŅq̓š‡¯l՘ļ Ā&ߒ2[ymŊ‡OZĨ¨36ŸÄņ”;28č22¤ŽcôĒõÕgˇˆ#=C+n_~ŲÉéØV†¤ŋm04N8RrN;ĶžĩVū-š¨,äpäœã'''¯P8ĒNuæH^1#Ü70m¸Į8éŪ‹°—o%Ī”Đ…™•x%ŠõČíĐ˙õŠŌ¯ŸĨ„­áäˇ@ÍË`3N}‡ä j¸RcFt‹ŠŦ둊ЕxĒR.3HfUügėōU5ÂBįÉčWK˜˜J폸õĩ39ŽÜsÖĸŧ$Â3ëO=i—\ÁøŠÔĖŖIOÚÅw`íÎ3Ž3W,"…Ëo\ēō3ĶĀĄEmų˙Ī4˙žE‹JŋxRR¯Ūčū\iKī#W_8Ëx93ĸÂ}Yŋuq)ëÚą{›"Üg­›7qŪąWŒsW­œŠāÔąk•ÍHyU’Ė@ņĒöĶd âŦ˜’x™;_Ž }č}ë; æ4y×MÔf ’Įc+NĶŽŽIĪNČŖk7ƒnc D‡(ęNĶæsˇ¤=8¨t2izŒh‡{ÄBĻ \Võį“ëV-ŽÍ$m寞&dpFõg ㎠ëų Co´÷oØ4vōÉ;"+Ž {œŲ=3ÉÅXÕí.eÔ,Ŗ‡Ė Tæq 0S¸`åXŽO5(ŧoøGíŽoîgˇųCnŗc9+°Ū/ŽzzsFšq%Ŋõ…¤Z”ļĪpvcrl¸^DŲ Qũju öw'Ĉ”’ +Š FĀ8<ņԞØĢ~PšŽ§b„ŽZD9!ØgåLqŒ†ĻYÖĶY0#™Ô3$ZG*>rĀcĐ{u&—Iģ‰ĩ{ģeąHędG3œšëÉÉãģęj^ˆáŗ{ņ'šÜûƒ3ŦŽÄ(ÁbĀöä`ĸ¨\ZÅ)D&’I´ŒˇXŒ8ᙏn0>ŊN”-ĻhגA%”Ē›äÅŧLT°#ÎOŠî:Qį ´”—VXÖ—cˇ ˛ā•Û°ī=ŗ‘ÛڄØhC}`ˇZœ6ÆUI˜Ü†Ueā秌œž88[Û;ĻÕŧøČōüŦ*´¤.îŲP=qÎzqŽôknˆúSÁ2ĮJU“x.œ€8={ö'׆kwjpÛ­å´Qĸ•3ˇ>ŒĀāä€OZ.Æ7Ã{ÛVÕVAü.ãîÁ,ų×§sPŲé÷vŪžŽâ >Ņ'ĖĘÅdÎQ)Î0GBN8V4ieo]ˆXÍ“dŸéļ`žØĀéŒgŋÖĢXCu‹¨^H÷ÂäBūZģKō¤ŒÜî“˙Öω…͡‡mÖ qæ9íK`Į”P¤vė¨ÍC¨ėŠ+—3vų,aPI\)]üöā“Đԓ]LžO´ÜJnüãŧy‹…D„cpĀ`1žŨjb6{M.âfg*€ģYD$ŸAōũáœvÎi­ÆĐŲ`¸ĢÅōâˆnŒÍ‡kŒ`ž3ČĮ¯>”áüEt­1b™>Yq÷p@ę:žũëKXž[†’Ü[‰å0ŗšÁ<ą Qž¤Žõږէša"œ´jWpœŽ ã+ė}z wĐ,UŌā-gŠE,ioæYš2Ė'w_ΨŨÚš${Ųž7;]]T3ėÜd‘œÖ˛–Y-5ē•Nd!@Oŧ6ôĀāō=yĒ ‹m0HŦCí&xŠõēUŲHë€ PI;Á žž×.ų1¸E yäd 9>ÕÃÔ­šÕ‘ɈvFpøü{†:ūĸŸ¨O1ą˛žv]Û(Á~S•8Ū0zާõ§\Ŧ‹}a,ëûĮ d]$uÜq÷ŊčV{HuiĘÉ3`ō.¸uôüÍCŨœ‘]ChV9ļ0TãqĀ8 g§^?Jrųé¯ĘąÆ60™ŸaO@2}ģry¨,ĖãQģ…Wr}áˆÛî'žŸw )ˆu´˛ Ggx‰î üGsëũ(ë¨Âąŗ™áŽFc>ÖÆŪ8QƒÔŽÜT˛ÚĨž‹,{Af˜cpĪ dqŽjŠsm  ŧrrœŗ¨Û–ę8˙>Ô÷åՓĪq  Ž‚AëÁü}?Šqrņj~G–Ĩ¨oŠ%‡ąĮĩYģ˛û`´•Ú1(.ށ‰iÆ{pĪŊWhņŽÁåāD#ĀĮB6ļŨöõĮ dVp4wˇŗ“ŊŠ…1 OsĪ^ĩ|š¯ŧG|ę÷ĘŪi!!8×AR2āĐ$N@3V{Š‚NœÔŒĄ:å¯6_âíôÉžéÅyŌÂâŪâT”‘† mHÎĄÂō6¨ŽŖ4F1ōHnôë+§I~æB2qÎ*xî-īoĶĖ‹nÕ$õ=ŗ[™’]ÜZ5ˆ\€r¨Ŗ‘UⱏėەË3¯ ĶšÂB˛!BĄĀà íYŪtžW”„늟ėˇ_ŨoÎŠŠš(iWī LRķ­z¯ƒãAļúˇū„kĢ…xÅs>ņ ĩ>Ąū!Ŧąžh˜>0v¸UĄúšģĄËÚuĘCžōxeÄk0Ds†sŽ2HÁÎ;Đ÷~ū Ž|/b‹ ū|jĄÃ!;ŧĸ0qƒßũG^*έosy¨YųPÜų;JĘé7–-Ünúņš]^öâ?Ã02ŲÜL@d )ÚNĐ[ŒņØč*ÅõĖz¤ öĒfhļĩÁÚ &ā1ž¸ÉĪ šÎã { 8ŧEįĢĩ4~[bŨŽŅ´pdč:g““ŸĨA§Y]ˇˆŽnˊ(åāĮ"‰A/ŽKí#-ģî‘Īn ,vģüj.DN6Į3ėĮly;Ôv¯-Îŋx‰yWČÂŨa #qÜLjāįûŨt$Ļ="æá4{Å …­Úe•”`TåČÛ´Œ€M]iĻƒÂ°›eYdķũT&EcŊ˛T(n3Č4Í Ė^ž™á2ƨX¤ČcŪk÷˛ĪŽ¸€ÅCŠ\Į¨øQž`Lņ1.rFũĄ†yö'ևŋĖeëû§† %™cYĻ(ŦZŲäeÎ܅ĀÂũN:tâĒ_\øIėU_ncPŗĢ"LeI ÔtÆ}qMÔüĶcĸˆļŠUU—i( GŨ9ĮƒõāÕäx;Č I*;(tAŽŠBm'ŒuöÕÛ ;ËŨksūŽL‡ķ3&ī03dĒ…ú‘ĪNÕK]ė4 8TUFČv¤laØztęEW[ 5všĖ4¨#œ…Äc ɞCÜuāžqU"S‰Ū¸wb?$—,íœ!ÎŌÄ×ëÛŌŋŽ[ëÛ ˆmĻ1Ë;~ėĻdlqčzjšŋ/Ž-ģCk´„2`IĐå‡9Įt÷ÍhЧİMŦŗ ąũŲø¤ôQ‘ūĐÉĒ 4WŅ´ņģŦŠĖĨÕÔķģ÷Õh鐄Ô5P ƒ"ą.žģÜpwœ~BŠD’Iáۓ*°pęw39$|‡?6Æũ}ÅY †{ĮŗĐėf bfM ”ôÉAÛ˙­Mŧg7ú{On đG—¸ŸŗƒŽ9ëÅ&ĄøG-<É$|ŦKŅ_‚Nx8éΧ¸]Bask5ÍÜ•—ÍÚ7a”õ=1ĪO\ö¤"Сˆ_ŧŦ‘ ēŠW%Šā ‘ÛĻ;ôĒVōĘÚĢÃvžYf.Џ›ŠëīœgëIë&ŗh!ų+"Č2Ãk`ž˜ã?^˜Šė`xõ[šV5Uv9q˜äuôëū<Ņę]‘ķt[¤<šRBšŨŅW= g“ųž•#nO ”„2ũĐ~fĀ!ļúŽ*Úßĩí­Ôr[ėÄm‘ķw8!c¯ĄÍT˛ >VKhåLƒĒ‚>ųČáGNŋjbæEKK&ž`X„Įtb¸āüÄ}}zfĸ‘b‡SĶÎDbų]Ā#FŸÃwqøÉu×[@cHä÷˛‚0@ž‡ķ§Ü§i#!FЀįąÎsßĐĶ]ÚôčwĢģHąƒŒcæn3Éįu×­V’ŨäÖäuL )p :ôR1øtĢŦŧPÁqÁ"ĢČ1Ú­85ZQR2”¤m5į3]Élŗ" ųĻ˜ũkŅfŠķ›‡Vk˜YsūÍŸNkj=H¨:Ōâ#i‚Há€jŒą"#ē׏ni၀0=)’ÜĩndT<õ¤Ĩ¤=(´QŠ(ÔĢ÷…ã­:1ûĀ=N(Öü?âCh?Ų?Ė×[ dW3áĢci§GnĖĸʖä×UE`ÍŅ*.G=iĀ~ˇŠD÷Šü •Tã*r1ŸzŽÕ~AS˛e†NŪĩ,ehĘçO#œv#į>‡kqū–e¤e”´ląæA–åsƒŽÃđ FޞOiÄËŋ’ŋ<Žšfōú1NIäķƒî*õƆŗËĻ”–Ģksĩ„îNīœt 6đ qŽĄEfÉĒjw‡-nŦĨ‡Ę0 ōÚÜąVyɑB¯ŒsÖ´|M WļŒ’AĘŌVHâa‚韞 zué×-=ÍĐņmŊ¤R˛ÛųâģGČØãēĐūę+Šo^ŧ­25´ĻQæBã,ĐNŌ=ųį8íUŽâ¸´×!ûRË,(8Épņ‘r@ėÃđëZz-ŖlęqɁįn`‘XŗÜ0ŊĶ9Î>•/aØéŲxnņíå‚įˁŨ%ˇ‡hl .ŨĮ ņžÜfĒIo=΃ĸŽįĖY~ĐÃ-;œČf89ûšūuqu˜u­P‹6Bsjî Ší'%6˙ãûŧõ5RÕ­­<MƟ‘Úë<+ãÍlséÜtÉÂÔ Icu“fēfŖöx‚ųŽŸ) 8Nk;\nuÛ;F˜ÆĶBʛ[vƒ"’?ā'ę:ˆüG:–™cskĨ b 1–Å™•‚ü…ą’0Āø"´åļ’÷^°žįļEōՀ 7g1ã¯Ė1Č#=Š­5(.míŧ]r˛ÜA’ūíQ§]ėHŒ¯ÉÛŠõ-ß ĸŌŪ(mĩžĶo9(AōJ’Ē‚xīĮAV’Öqã švĖąyck0bŖˆķˇ#o8#įåÉę++FŽÖKËų&1I4nÛ|Šrā~đ `îÆxÉŒt¤Z2ė`ĩ“ÃwwĨbY"“bēE'å#&ŪĮSĮ§ZĐĩ„j-•ąŒŧ1ü¯"NčËōuRnęWéīÅ[ŽæÆ+ “iēáâ5ŧōČėîVÜĀį=ģ{V.ŗ{5Ū—ŊĸÛD>RŊŪ'ģŒûŒUjĮąw]-ŧˆĨŽā¯ ]Ą“ŽĶŽøųëTåÛŠãŒLßvßĮF7{á?^.€Č,æĩmNęŪŪŽāįːÉë×ī×ÔwJÚęÍ´‰-áVŽ%ÃŽ0Í´ü™Ær9)°ŪŖ¯ĩYC*ŪĖ‚ÕRw }ķ…ä~īš†â9ĨÕā’QJd.ėĨžđÎŅōœ’?ČĒ­wåë͉nR˛É$mN6“ÆyÁĮ¯­ēĐ@,ĸŽâŪ ËČĘĀŠ$ˇôTvM ĩÃI¸ÉÛą=FFjŨ“ØîģkTš”äKūeŋ*¨ˇWļ7m$ÍQ–3ąÎŧÍÜzJ:æũėtĩ—ΆéÔífbgn}}Ŋ{ĶŽāš]JŲŖí$°8 aƒ×Ą?ĘĢJĄt'–ÛōÛ[<ŽI#Û9āf¤›R¸[xXlÉ*ęņ4‡!€ĪĘxāæģŗ]HšâĀfũÖŪP‘ĮīūŅëŌ­žŧÕHŅeŋ‚cvžkÂÅČ,1Ôx†r:ÕÆ€+0äÕYVސ95ZQÍ!™ŗƒƒÍyĨØÛ¨]I›ų×§MĐיęōŧ˙ާųÖÔˇ"{M6Oõ-N&™'ú–­ĖŠÔĶŌHŨ(´QEÎë´yÜA;†1šPtëõĄ’gę’ēø~ÂŲJFž@uųJŒíeĀäyRļOjë.§ĶÚęÁŽÖF›yōŲí2›`6ÜnīÍbŊÎŖŖh1´‰ ‘eMĄWabOīNáëëĮzģŦiwœúuĖ+‹,ŅŧÛšRų#åöãëPĘ'(ŗøĘ •W(‘†, ĘĀŖ˙Ë@qß§?Ô\ąÖ$:üÖm`YļŦP6P9fÎ9įĻ šĄŖ{oâ M:K‹a.ö†8qą6šÚw8Ú1…9ĮJŗcw§iŨ_[]ÜÎîĨž‰ČĮČ2Gˇ?1ëRÆM§Y>“Ŗ_ũĄÖėyfBV}āF2Ĩ›$/œZΒūŨü)#ÁB°K% 2Œy#ųŽy?)9Š,ŦtÃiŠM§ĨŅfˇ“tOoŗ˜šÎ œā}qE‰Ôít;Ëģ™ĨĖMĄâ9B$ųÛlh xÎqÔuĸÂ3ĩ8˜økOšíbx,‘O6͙U–1ģƒĐõ~âĐYÜÛYÛÜ^D"BmÖÜmO1°jí8ĩÍũĨψ†Rڒ™ß3@Ų0äœČ:Iã qԟ¨Í Æģ¤^ÛHˇĻZ6ã9Žė•G##€hōüz­ãxéw?dĘÆ]ŧ–bŨƒÉãŠãčzUl´ø-ޝĻ{¸.$%ЍĀōË3¤߁Ī9’ÚčÜøŖí—‘$ČKŨå1ŧ€F2ŸĀg­GmˆÔĩuē{I-Kƒ ebŠw†g%wdŽĀãEŠLβxĸđíõĩŨBģDc1Ģ( žDKÜôÁ<ûÔj_Â6Ÿ2¯•1PY6āēãæŲĐvĢÅĄ]Ģ^Ci÷¤yaXÔÆ6'#9^ÁāķܞMIæ„˛[ʲFeR ‘ÔƒÕHãžŨ}*ēŽúúģËIÁ<IΧzf¤Ė4ũ$ĀäŦjN ä.û‹ƒôāÕ^čãĖQŧ2&Ī‘ >K€æáųU$~4Xg5ų 2LŅÆģ‘^Wo›älœągŽyôŖOļŸM˛ŋi"ë(u1IےŨ3œõíÅ$i(ņ<ŌĮķÂ3œ ¤Gœ9}§×sōŸÆ(#vzˆfš6šÄäŸēØœ|ŊxāSdËs{.—uqēDmč#Qܟ8ÁhˆĒHŲd1č9ö41j ŧkö„*œĒ§+÷ÆŲ&ÜtéĮLŠ›Z’&]āÛy‡nøĀ Å~hŽrHĮÔcœ €yątņÜø2՝†ZR™o›/ظ#yÉ8õŖ_ˇĖJyĖŦĮæF dÎ0ĘxČää8Î*@ŗ$ōX%…^5iœ÷I0¤ېG`zuč Ë)Ŗņ5ŨÛÁûšŖm˛ųģģĻÜ|Ŋņ×ŋAT¯./-u‹K;‚3PģøfåĻ*s.wļÆeNN×súÕy.æ˛ĶmŨ xŅvŖ:Ēė qĘōqĶÜúUĢ-BŌ[Y"‹Jh`DķZ5 ۏĀsØ÷Į÷PK`Īyi@“ä™Wr¤āŒā6x۞ū´žā7Q–+›Ũ6eU”EnD‹Ī<āsĶņĢ3ØLÚŌ^ŦqEeĀlāîßû߅UÕeˇeĶĨDÆįb‰*„bwĄ8ĘAô ž‡›ÂæßíqÉ-ēíųé 0ÄŪĀΗ@kc%žĄsr\”œ)^@āõü˙úÕM-'˛Ķ/KdØå6ļ˙á°=:`ũM˜>#‰2ŦÛģdĮđSŨŋ }ޟrŸhY1 Ą—o6AųˆÚyõĻ{’tIãڅÃĸ˜Ü7rO õ#Š“Pv…Ļåc,¨xS垙 Œ`ķÉn==WFt¸[x˜9•]°Bs’wŊyäc­6ûuĻk āa~h‹Ž67 ŸįÆj¯}„Uŋk–Í;æ6ũʰ\IƒÉÉŒ}y­@›#XÁf Ë“ZËÕŽb–k ŋtvíŌĄR6ēôĘäzöČëV3˜‘ˇnʃ’1ŸÃĩ MT˜uĢŽj¤ĻĖ˅'ŋņ'ąĮüņOũWIđ+bÔGĨhÛI´ųU—Ĩ[D5,fũŦĒā)úū5qâ Ö#5ģgr˛¨ķPÆsēmÅŧšžŖm’Āņ1Ūę÷‡s ņī“ĪŠŦ ĩÔėî㸜Erye/æ0!ŽÆyÁĮA[ē3ÚˇˆuXŒ$˛Ī"FĨãß&×|á@Ü1ĪŪ'=F)fĶd°ŌuHU<ûwˇgW$ nИ# yëŒPÉ%ŅÛėļ6ŅZŨ!ä— :6āyīßđŋĒŨÚGĪf÷Įlj‘ÚxnY°¨2 åˆäõÍCĨ¯öŋÚ,RÕePą•^rÂÆËc6sÅGĒjmĻZiån$H†a0]ĀÁ9tĪĄČõ-]”™Ą¤ĪŦ^Ú\MĨģÛ'˜Ę!“i;‰PÅXœdsĐūB2vžw ‚=œ Iæ2ŧm]2Â^0_qÁų@gq„Ņ'§jō¸y7^98đ¤Ûōõ\ãŌŦCjŸØRXÚ\ÛŨ?š$ũÛ°dí#§'ŒgĒ„fëöūo…ôčÄBA° ĄU€ũĶy#ŸJŋ,wRŨ[Ī&›lŌG¸oiˆd9 mųNAāōF3U5‹&Ķmå‚Gx‚Ģ"ĸČAF?Õ¸Īž÷ę]ÁöOI…äRČįkc%”IXŋē@Ā*ŊYäuņqũôŠÂ|‘ȇ¨A÷ äVÎ{ v›™uKā۝"™Ú6ķË|ÛäSĮnœâ’Î1‰ŒHîɃŌ&0PōũîŨ{œ“ÍOĻG j÷ė—–ķHÎwEČ71Žyę{ mˆČŗf‹Ã÷M°0~DR QąA •<€3RÆ_ûqi‹īm­åą¸€>n@ĮF~õRÚg›Kš•ūÔcH3ÜNĖˆR ŒƒŒs“´œŽ• FËĸHÍ.cķWfPíqäo—žŖø€ãŊlIq,pŲ­Lėę2Cãg<ķüûU-R5ūŲ†_")Y"ä…ųÆ8R9Ī=°:š.§–-'O(åb‚œÛĮ@sĪcÁîjũÚZ˙hĀŌM"ĖŖ8ÆOˇÎ:ŽÔļŧ1Gâ ļĸ ōžTØ=IéÆ8Į^hŌí%ˇ¸Ô7ÄčŒß,…Pų›ž'ŒŸZ”;ÂJÛ˄ Bäɡî§ø­WmJUģš+%ÄÛ$)$0“†Rq8šÎ&|kŌg‘î‹9#Ĩy1ĩ‡VëÜō9âŖÔ!htu]ßhÜû˛€+rš-QÍ6ČJt;ŗr0 áƒ~Uį.Į°úUŖä.‡ÜÆÎ„á$ōYšÎ@ŸQÛ]D:ęhmæŗyNTÆB¯“’>ī9ęN?ÂŽ ʐAîZČÖĖ^VžÁqDÉČ\ |ôéŠŊjÅíco)aĘįˀžØ ĐRč49j­'Njv8ĒĘŨh”øÉ¯6×˙ä=s˙ūBŊv<םkÜk—ᐭ)îLļ3IώŨ4ãL'ƒ[™‘JqϚ(ĸŠAJŊhãŪ•O#PˇxåŅėŋëŠ!] ŌšŨ?ØÖ\ËūBēOOJĀØŌŽ¯EĶĩgDjôLxŠc.ÃSҚāĶc|š¯ŠÉ$RX4syi%ĘÆãî<~Ÿ­H<=ŠÎž+ģ‰# “LâVÚŖįŸ4’F8ų=†"Ū‚›¨ŪĨ!†3˛~H9EÚ1͝ëU´í>8õ[ÛČ.į•ŒŦĻ7XÛ9 qŸ×šĒš ÷Ų4­P›EfÎÅōĄT|2ā˙ĢEc’t돛ĐzˆĶšöMWÃo+ˆyņĄ 7Ab8Į#'ŽĒ^élūą6ÍæJšŠä”8 Ŗ× tՅ´žO Ũ4ža‘ĨHˇa¸H0GŸæu˜ÎO<̍jwú_‡tۋ{¸#Gļ=¨Îđ„į!”(āpnéPü†AŦČúˆôã‚wHú‚vôŪ?žz)úŠŨą¸Ķä×Ũ€œß€ŖŪŠkā&ĩĻģLÁC"Žī˜zķųÎĢŸÛ¤Äŗą ʡåö<.vöÁĮ?­NčeŊ)ö–ŗ"3;‡ €AÛķIØ(įß'°ę RŌkī ļÆŨ\ŧĄžUÜN@ĀęzõĪAŠŸÃr´šļąæ,šļėt`8y?ŧäį°‘ĩ+[ũ!ŗkhÄ ųķc‘X*(<Ą|1Øū4úˆnФž‚8ÅšŗķA\Ę<|ßÄ=}9ü3FĨ •t‰3$ĨU”yNņ’rŦ6Ÿp§æŗŦáƒ,÷Č^v$F̘Û{2gžŧuÎ0*ÕΊsĨZiūL’č¨Û•~|ûŋ:úö ô§`¯¤ĶxĸŨ ŸČÂ >%ņ.8Ũ’yāđqüU\_ę ŽĪœÂX×Ė6É:´g”ųAhTķ“œāJŋĢŨéļšüox특s2ŦxųÂåwd‘ķôÄ*­ŦL|Sy#SaÂí|g÷|äą_\mžh[šmÜ2& #°æ$ųÕ¤ÜüįiĮņî*•Ģ[j:MåĮ–lďHÖNԐUWn:’sž”iŲYõpc0°LļØ {ķ0~ęääFsžĻŖˇ•›ÃaĮ’ˆĀpÃåÆĶÁ¸čxÉÉE;ī˜w)č@čEejP<ž‡sE*<™Œŗ/A üčGé€p:ƒÅ_ÕYŌ˙LpĄĨŲí%͐@!IäsŽŊiØW"—ŸBQËŒ”!W ÛOFėH1ŒwíUėŧËËëą+ēŧœ§˜ÛļaÉ Tōw=3WVÚÖ-zķaY’ ąĀQwÚÃÔ€#ÖĢŲą˙„’ņJąKn!đWŽ~^į}ķšRԘGĨ_n–áb˖bĀl‚TāzŨjinQ‹Ę‡|€:ī$´d õäsŌĢXüļņ ¨FIį…=I'ü8ÃļœŅÛ^§Ų`‰ĻLY™÷¸ۇNG¯SĮŦŠ=?íRs‘RØXĨcĻŨZh¯§IĢĮ$čîŠ3D1ģ$‚Џč§9Ī­_ŧ˛[›[{}Ņ}Đ(‡gFų”î'i8ÉëŒĶ~͐:æƒ1'9Šl,*é˛É}i%ÅÉx­1œåˇ†‰Î@ ŖŽN)ĮGˇūßKčÖ(âļäU2Ü ũŌŲã88īMûAÄi>Ōāđ­-F3NĶĨąÕ¯nO•åĘÄĄN¤-Ī}NzĶ42îÃCēŗk¨MˉˆÚ8Ę*˜ķÔvĮŌ§Gi ÛŖ]ŠÅi´­Qô™-§ŧˇš—r4LÁ“Ą%˛A$x#ŌŖŧĶo t6—1CēâO”€ØÛŒô=ęŅšb>ņüéqęZ9˜ėA¨ZŪM} ö7yĒGįÆōļFīG\GŽqĪAUßHâ 56ÛIVR(#oņķũŌ>‡iŽņõ¨ÍČįŌØXƒNĶ…ƒŪ™[–$¤Pų` ˇSžIŨ׎•X4I,V@d`I‘ALˇcÁČčĩJ÷īQ4į֋ਆãOčđØŲåáˇsķį$įvHÉ=Oj†īIŽãėą¤Í0–%t…ōĀũælö?ŸĩX3cŠi˜įŽiĻÅb¤Ú@šXž[ۂąŧ€~cß?1˙9Š­íŪî{’åä•Ųƒ6ŠÛōāp~čäķO3gŊDŌZwaa-íaˇŽe?ŧš$7#i΀bĒũ†/ės§1Z2…Â(9?Ōc9įëS´™i‚Eį֕Åb9ôûi­–jĒĘĀ„^ĀčF: })ķÛÅ<đJÃį…ˇ)gĄé͜ũ@¤i{āĶ<ÃLÚŠŋ~lģ€nᡥž˙ ¨Ŗą†;ŲŽI.ԀƏS× ã$ũIĮlT†JC%4"(tč ˛žÚ<Æŗ—ÜŅ…FŗĶtÎԚtø?ŗŪËsųmģ#)’OËÆ;z`T†CõĻ™ԘÜZE;Æd¤jT'H>Ŗ#ĩ1žĄy(ŽÜc5ZFâ‰%ĀĒrĪLLO<מøŒ‘­ĖAĮČŋČWm=Č­pÚŦĸ]vV'˙ŽÖÜ™lQ€īfÜsÅ2~ĀÅ>äŠ °įžÕ%‹"îķ ¯=ëb v6ĐKfŒņ+1ÎIúÖQí{nÆ?’íēĄxÁÚ´žh ĄH÷y}2:â€ö+ųį˙+3͟ûō~fІ•y QšXÕ¤‘Q–bš Cđ…âļ,ÃtlGáœ˙Zî-Háē×)ĄøvŪÖ3oyŲFö@Īļ+ЎĶ,€ƒ?Wcũk ^úFŨM8ß§5e$3TãĶŦOüē§ëVSJ°nļËø1˙ÍŠx–ŌAëRųßLUeŌ,?įÜ˙߯˙”hÖūXČ>“¸˙Ųǐīâp éGÚ@h6ũˁôš“˙ŠĨ˙„vœâįđē“üjZ^"}ąSzxŊL}úAá4ũønũû‰?ÆĨ˙„gFæĶ`?ī+0ŧHÍėyå×ķ¤ût ˙Ŧ_Χ˙„{DeYįū¸ŠĻŸhŲ˙UŸũųZ\Ŧ/g_ÎĄ}ZÚ?ŋ ˛írŋ‘ޔĀpŠ? aˆ÷GåE˜ų‘͝vĐ˙Ër~ˆßáM:åŸü÷÷É˙ čŲ ŋ•4Æ; üŠŲ‹š';ũˇjO!úBįúRfßū›ā<ŸüMt{1üō¤Ú?ģE˜¯š:Ä“˙ā<ŸüM4ë6ã´ßø'˙].8ûŖō¤#Õbē9ŋí›cĀķŌ?Ō—ûN3Ō;“ôļ“˙‰Ž„€?†“v;SŗŅĪ˙i&ÔŨā4ŸáMmEXn‡ũģIūŅo>”Æ$ôâ˜ŽŽtęqŽ‘ÜgūŊä˙âhûs0ųmŽOũąaüë 8`sÅ3;Ķŗ ŖŸ{ŠŋįĘīūũ˙õę&¸œ˙˝ĪâŖükĄw¨]ŠŲ‹Cy.K;ŸÉÆŠĖ÷_ķãs˙ŽņUĶHGĨR—ĩ4˜]Ã]@´˜rŋã\dķy“Čīōŗ1Č=ĢĶ.T6Gë^wŽ[}›V”ē˙8üzūš­Š‘"–ā{ū”ŒF0)ĸŠÔ))hÅ%ģh Ö÷„­δ…†V d#ß ũN úūŸÃĪú˙ōvã˙ŽUģ„ŪĶdi-4_-˜`ŸĩÎr?¤õ@y]Ē +VâŊI| áÄûēv?íŧŸüUH< /Kü'˙SĘĘæ<Ú!Å\LÖŊxOD,ŋō+˙?ū}˟ūEņŠpcæGŒšĨšS´× ¤ŦQŗāwĀĪôŽđxkH"Ķ˙"?øÔƒ@ĶĀļĮũ´oņĨėØs#ĖtëW´Ō.§›Ümáyôįņ&œŗ[Áĸ„ÜM#d™PĎ=į^—/‡´Š—l–—ƒ‚íۑŪĢÍá â(â’ÄŒåTJęėz`ôŖŲ°æ<îņ1§ÚÛĢ8,Á†É|ŧœ`žœ °č:‘M–×vPOoÁÃ):˜ķķ6zsōŸūĩzdžŌ%ty,•™3´–bW8ĨcBŗClC‡ÍąIc°üŊAœäqWõ„‡íšz˛Ę]÷b2 pË×?A^‹sá-ōÚ;yė‹EÜiŽę=ųÅ-Ī„ôKÉāš{6/nBŗH¸9g89ŖŲH98M>iĩhފ˜ã‰ČŨoOLĶRŖÖYĸ‚+6$uš;”qÕúp+Ō&đ†q)–m67€7–lņœ`įŽŋįõđļŠ—vļ@Nã ÂGį§lãøGëęhöRcĘ-<š¯/#–Ø´ĖŽ¨qĘsÆâNĮ°ĻϙϑvŌ[4lė \ī;A`uĪNkÖbđމ’ÉŠŖJ}ŽĀGĀ<žÂŖOčQÛImö6xd$˛Éq#õôÜĮ;}iû)1ã÷Ģđõ´n§°@—=x?_^ž–ĩ„šk"¯#åhĘr2?Aųzz¸đ†€û2"ˆIE%ˆ\į8㊤hGoĻŖ$?ęÃ;ŧc֟ŗbæ<žęĀMŽÁsŗ  ąSūĐÆqĪŪ=ø÷Ēksë˛Hˇ Œd"– œ)įoÄöđƐährx•ĮõĒīāŋŧžgØY[Õ'‘>§†ûŌöL9%´ĩ˜__y’1øP$Î[ Ī}Ē +å´šYϏķa7MĀāsĮ äö$đ_‡ã¸’tĶÂÉ'Ū"gįđŨŠQāíI#ũ„“"…`g‚qÆėw?^ô{9ĪĐi.ŌÉ5ÛÉ_<>luô==¨ž˙eÚŨlārŠÅ°qÜäÆkØâđW‡` ÅĻĒaBü˛¸Č3ķs˙ëõ§ÉāíUÛ&œŽŊpŌ9ūžæŸŗaĖxÉs=ŖĮupĐŋĘNō¸ÁĮAߞüũzU˛­oĒ™dŊ[/ú§—ąŊ;võ5ëōx#Òĸ#iĢĩ Ž0Á7ųĀ=@¤—ĀŪšušM4JƒįIĶ ˙{Ûųúš=› ž?éw1Ixė @Î s‘†Ī\0ā{Uk3q%ŊÜ-3yĒrŦd-ŽØĪÕOækŲĪ€ŧ2nÅŅĶ˜7yŌvÎ8ŨŽ˙ËĐTđ¯|0.ÍĘéōŦ„î;o&U'ŨCíũ(öl.xŧ˛].“æI’#ķm îö>‡ĻjŤÍ=”2ą%ŠüČr85ëą|8đŦ3<ŠĻČ į*o')Ī_”ž?J’×á˙†,áōĄĶX&IųŽec“×’ÄĶöl9~õVaš÷āēwūF“˙ŠĻxdõĶ?ō<ŸüU͇1āSé\wŠíÆ`œT?ĖZú­žxUēéy˙ˇ‰øĒĢsđ¯Áw‘ė¸ŅC¯\}Ļaüžš‹LW>:ÛM"žģ˙…/đ˙ū€ų9?˙I˙ [á÷ũ ˙ų9q˙Åւ>Ež}o˙ Wá÷ũ ˙ų9q˙ÅŌ˙—ø˙@üœŸ˙‹ ‘öŅ_\˙˜ø˙@üœŸ˙‹ĸåQLŠ( Š( Š( Š( Š( Š( Šä|qâŨCÂI§Ī–—–ˇWÚ“ŒĶîbK*D J) ķ˜Ž09ŖŽxÆšjįEĶæđėl{kwwž†rí˙,ÉSÉ :nĀ.;ieõĒF2M{×ĩÚWkK/?ģԗ4ŽōŠÃ7ÚŽ­äKĸ(té­Ŗš‹PšĨķwįä†B>]­¸ˇņ´ōV§‡|G¨kēëĨ•ˇöžy%…ĖFvŽš22>Ö`¤ŒŽsĮûU—Õjr9iĨ¯Ž×ēWíĒkË­‡ĖŽžŠķ˙ øãĞ)ĐUąđ´-ų›|ûãœÁŸ ČÛ°Ąv( 8žŸ­$øymâ´ą™¤ēÄVö ĀÉ4åĖb4ū÷Ė ČÚ ÛÚļŠ–âa>F“wåҧfú=tŲũĪa)§ŠØŅ\ãÜøĒĶQŗÁĻ^[]ųˆŅB’ÆmdŗĻé~`é•([b˛ŧíŽoHņ‡ŒĩŲ58,t]0ĪĻkÖāÉ,‰B)Xß3¯ĖĖÄ .Ü#ĀPĀTœ\ã(ŲZī™um~jßwGprHôz+ũŧO<׋Ļ.™g[Ŋâŧßj%ÉËå(bW?98'vWü&ˇzÃ/øJ´Mk›Ébũ͎ æyž[}Ņ–U9n0HÞ"8J“Iŧv–ëFöŋE÷ég{2;ŖuŦXYjļeÄû/53ėŅėcæykšų÷#Ú¸oø›Åē%֍ĨCy ^k眍ŸaŽÆp"BéK Iؤu*2|¤ kũwUŗņ˙†t۝7LHĩŽTΒ´˛ŽČ•ŲT•]Ģŧü[‚ƒ…#ŧrų¤¤ÚiŠ5güŠëĒÛOģ‹UåíĻj÷W×PÛ[GķO D\œ “Ā䁸×1Ļ|Ođn¯ŠA§Ųkh÷W ˛$x%Œ3v™@Éčy8“]¯¤Úkšq°žMöÍ,R:}’+… ‚ ’ Ü\Å=/hvēLiqŦĪ8û„öudcœˆÂđx?3F0IZXxZ˛Tës&ÛÕ5hŽîë^īUĸîÂNKTuZŽŊ§hĪmėÎ&ēfH †šYJÍĩ IÆę*M+X°Öí^įOŸÍŽ9Z##Į"œ2:0 Ŧ={×+ ˙Ļü\ņuÅĮĪ.ŸmgilŨ<¸¤C#¯rã99=Į^ÎÛė?5&yŧŊCCKŠâ/ōy‹*ĤčĢß'æo\Uŧ>YBī™ANũÎÖô’ÖûßK3=Š(¯0°ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Īū+ÜũŠÃÃ^DĶų!ĩ“Ɂ7I&ĐįjŽėq€=jūŠĢMâŊ]LĶĩ;Yĩ+fŽyīôų"ŽŌ6Ā}Åļî}ŦÁB‡$.M^ņw‡îõ˙ė/˛É gë÷ōųŦFčãŨ¸æäc8õŅ×§õšpÃҞŧâä÷z{ÉĢĢYí}˙,Ûg—&’ļ^-ŸI×tm[WŅŦŦíSCCžØ”ˆÆÁÂâ?1™Í c9Qļ§øoq&…Ļø‚-ODÔ4šUžém"°šTHÛËPą´iĩĀ< Ŋ†qšôĒ(Š™:”)Į~[ę÷‹nél¯{Ŋ5zß (YÜáū,֞°Ķ.ėīmo-<Ī:;›Y"Æé]—”ãtœdgČé:&ĩyđ“C˛°Ķîc×´A/ÖÎöÕáYXM! ēMŠF×ÜpOLpH¯fĸŸö¤•YÕQW””ˇvŋŊu暓ėüÓDŽrĮÆV׹ĀĮF×í¤“yxî4Š”ÂĒŦŲbŠÎÜĨ‰,ŖqđâI"ŸÄ°Īe¨[ŊÖĩu}šąš%xX VÜęO÷sģÚģĘ+Ÿë4Õ9Ķ„,Ĩn­ÚÎë ėîĪ.†Ū[sÄGÄ^Ô5ŊR+Éŋ˛cš„ŊŖÛ0RŠŒŲ†3„˜ášĮĖŲZ‚5{Ÿ |'ļ†m YŸSŗķė+§ĖŽîōČĘ)¸ä°Î>¤éÔWDķ%RÎtôŧ]šŊÕk%˛OwmnŪŦJwšåŪž}*ĪUņ.­Ĩjž,ÔUĨxĄŅŽãĄŽŲ\Æ@(Ŋq’ÛCõmR{ßø#V—GÕĸKH.%žDĶŽ%Í5ēíMËĖA;N:rzUžcQÕtõi­Ū‰Į–ËM[ÃÜäŌ×9|e¨[éēÕĖžՌļ7kg14†ûÚë…ĘŠÆKT0Xņ\Į‡|aw§ũĻ˙Uđ¯ŒŽõ‹íĻæDŌȊ5\ėŠ%/Â.æÁ<ą$žNĒŅQ eÂPö+[}Š-­ĻĪKęüü’@âûžkk6Ąĸ|JŸ^’ÃVmÄZ|2Čąéí#Ú΍T•SsŠ ģļ2øÁÚHŲĐ,Žõ_ę^,ēĩšŌØ[.›§E4f)$‰_{É"7+—ûšÚvõ^AŽÆŠU1îqvŠMÅF÷čŧģŲ$ßTģļ !EWaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP˙Ų Pixcomp[4]: w = 353, h = 281, d = 32 comptype = 2, size = 20797, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(ĸ€Zƒ÷ûšĄZŋęņūtbŠJŌ{ÕŪõQĮúKũh`ˇ6Ŧ´gģˇY|Āģģšŗ˙ėŨĨCøUŨ1öØB÷jB į5•Ë9īøGn1ÃĮH|=r?į™ükŦú÷§„‹°9áë’xDüéãÃwŖķŽÍPāR…õĨv8ŖáËŅĪ’§ūH4 Ū†ßb+¸Uįž•0QŽ”s08øGŽÁâŨŋ1ū4īøGo?įÕ˙OņŽųTf¤dRģĪ<˙„~đũ–OÃãAĐŽúIOá^ˆšxZ.Âįœäu´—ūųŖûų÷—ūų5éJ™ŠŌOOŌ•ØĪ.Dƒū]ä˙ž“û&Oųâãđjõ„ˇ^>QųU„ˇ_îĘ—3(ō믔aŽØ4}@ÆŌ?Wą}™;ĸūTīŗĮũÅüŠs°˛ÎĪ4€ŦpĪ8÷¤Ôæ!ģ=éc„hąÄg=ĒėQ…Č4:ķŒR1Ŗ#;MSž'#+]ãâĒŋĀĘÚwséA ŠĐe}ŅÍ@ņqĻ€Īt5ZDâ´^3œbĢȟ-Rb3$LšŠ"šŅ•NJEįHF|ƒ­c_iĐ\]ō+rTÉ"Ē´aœМUãō€%p:8üé#sŠã¨9§KÄŌŧG]%ßíõj*•Ī.äĪ6ôqëSÅ“ĀA| ņšĻ*xŽdˆmŽŲíAĢ;Tbâ]ŦŨ1ž”Æ(’˜Ã/šeš4ˇ+† ŽIšž[x`¸BĖv“Ęõ ŽÕ|Īöŋ­[ģž5D)ĩ˜ķ‘éUmž{ĩŪqüé1ŖˇļÁQWWžUļN§ę+Bh#ĀÉĢҝĩ24 ÚŦƧ¤ õŠĸ€ŗzVv˜LڕķĢ+ 8eK—×?ÃNļšš=—VS+üš##Xõ-Î1NÁsz(ŅGŠÆ=kQ|,íR.Ą#mØÁsČ,§ Æ=r)ĶK1Ö GbTĄlcœg(YÚø?tāN5Q&‚å Á2J™ÆčØ0ĪĻER€j´ŠJ˛ãąĒīÉÅ4)”üjŒŠ2kJQœņT¤N:UĄԁ“ŠĄ1*āįŊiĖ„ÖmÄ`j„xäßëä˙x˙:Žžį21÷4Ęé1 (ĸ€P( r’¤2’čEY}ōĖŲlĩVŽÔ|CnļYpQ÷‡\Õ[›č€ūøūtŸyvž”ũ8ÄÎ!ūŨ)l5ščvq|‹ÅjD˜F͈Ô{V”G"ą4%2jĪËs…M2%Ģ ‰”ĸžG*Ũ֐Ö@ÃeŠHÜ)ŪĀ’Ũ>cę}{b“Ë–ãAAAŲä$„Ú˙.ãî ô1EŧöŸŲ3Ë´ Î3´“Ô įĶ#—S*é0,YBĮ;U™Ž0Į í'¯Ē÷íLEģ¨.+4‚pķ žÃ <ãëPIĩüE 1]Á BäpßígžŊ(ž9Ô,#'Ž¤düĘz–ôĪCIÖōxš9Qö&dˆ sĀũ Cg;KŦ܆HÎW”ĒƒŽ[æĪ8ôįÖϰHŽt˅†Ö+a.WĄ˛Ŗ’03×~ ļk™'ÔJ’ ąX÷ÆBãsgķߡZ4ų Žq"ŽÂ¯€Y@Ī ãķüM&ˆô„6‰ĶĖéÎcŽFXÎOLg<}y¨ī oíTÄlŽ@BJ@ Œr„žNx9įņ¨.üŅĨDŅųBāģ°‹øš9Ālt=E^ŊÄwútDüßt ė ų“<į€O?ũc#$˜Ŗø–5YÕįi*0įŋĖ:Į§ĩEjŗéČnī–<ĩķsŧˇĘ>l’?V$Į­‡ŽOŗĒŪp8ä–Î@˜Į|Ô:téq}|ņLŗüĮhYCąüGã×­54}OJœĖÖáˇáZˆ ;19äŸÂŸt-cŅā˙FKâ\ĸ‰c*Ių˜ā$t8ãĶžõ^ÎâđÜæâ9ÄÂE 2înˆŋÂŪ™äõ=išœSɧiäĐ• cr2kdČįŖzö fĮØîFĸŗ­ĖVöû“ä KɀNŅĪ ûÕxâŊ›Ä‰<öJîĸ@@pšÄ„ôn¤01šŠū OˆŦÍȉŖķWėų|‘Œg î?ŧxöŠ-Sâ"åŒynËķģpŧ•ŪF>nĀv#,MlmīŽžK™#ŪŖųvîäĀõĀ-Į°ŦŸ°4‰…äC1ČŽĒōšÚÅšÆq“ŒžqW,Y!ŸWēķf˜ųŦŦ‘FXĄŪũ'Ô}2)ļM,šLĢy,Š!“;ļKōão›¯^}pqиv“xJÕŽUŖ†%3ŗ;.ßŊĐĻ áNž•ST‚Øë–ĸĢÉ+Fä´øĀ  „äđAß'Ō§šqĨéŅ[XŪĖ× ŗČS!+€Ä3ĪPš$f§Ô!ļŧÕ!î䈑ˇËFtg'‚Į|õāvЏėFškÅâļ24ƒ‰\ĄĀ#G¸ÉãĻ1ŪŗtëP×:Ķ$Ë‹™ xĮīˆl6HöãƒīV!žž]bęĪĖ3IonÅcĖãŦkÉÜ8ŪqŸÆŖĶnf6ēŗÜJãdg<>ĪžN6į}ĪŌDWžŌ}V–á.R‚D1,a‰ØģY\8Į$ô9ĢįMKßZn›ĘŠ8|Æ" Ą œĪČö=+9~Ņ„‰nؕäbąŊŖØu]ÛTepyāséÔ֓^K“§%ĩÍĖdFEōĘĘŖ€6<îwĀÁë‘Ü î,üÍZŌæbA+ ^WW|ŅsƒÆ;UK-ÎĻɧ ĖÂF6ÖÅDqá†K)%÷dõr:UÛôķIÅgKß Üė>aFäG´y˜#åƝO§ëT"kZؘc…-¤‡ĖqmˆĪœōOŊXqÍ.•#ËĻÂ$€DcÃîŪģWæõįƒĪ,‹ƒH UineæĒ>?T€§*úV}ÄyBqZ2ĒWÄ}Ē<9žņúĶiԍ×5Ô`%Q@ :RŠh§ *āǃ­ZĪ4 §ŌFuH˙Ū'ô5ŗŖ ęií“J[Đí‰Ø¸­MfZ‘y­8zV%—cn8ĻŪܛ{&2ƒ•P[8`2qĪzXū´]4ŅÚŧ˛ŠA¸–8ųG'ą¤}ģĮ‹$mq| ä ĶžØã¯?4˛[Į.™8F Š\āŽœũ=Šûŧũ&;‹¨ÖyUŠŽ_8įP{v™¨ē,vj ĮWäŒã’9ë׏Ph`]œ$šŒí*„ˆŲO̓ž9ū†–+É./%ˇHãYR"ĘO˜1‘Ž"“Č´ūĶƒ›9*Ē>rCu8úžŊŠļ’'öÜįæbrŧvō9=Āų{Ԍ’Ę ›K{ļž0­°žô˜šc–=6¨{j5–Y´ í!bë÷–+¸t 2sî9úTæ(-ėõļYM­•ub +Ā#žÜÕQ cA‘RIeų‹Æ ’‘•lƒô4pi‘ŨiļĨ‹G(AlsŒŽØäúRO™ŽG ͍øa‰ ž=ŋx3Čúp*‰.Âl .ۛË\ąīĮÔ˙:RģÍJ@Ў%ã9éPîÁĮĩ!”§R3T%­K´VeČ;N*ŠRJÎŧ‘…ģ:)?ĨhK÷šŦÍEąg>;FĮôĢBgŠƒĀ œšAI]FEP)E%:€uhuĒŖ¨ú՚‘j悚Õ˛š¤ŊkKÃc:“DūĸĻ[Îî߅VŒ5BÜUøĢËąÔZŒÂ+ÍēE*ĄTžqô#ķ⤎ĸԜ&6H|ĖRS@gķŸMˇeÆ ÜŽ7ļA8ČÁôíŌ­Ę>ȝÃļ‡ˆœWŽŪŨũ0 WH§¸´ļTŠŨĸ*™ru'…ĮaĐüĢGTļšMvŌu˛–â80)ŗīd÷gĮ€s튓D‚8KxļG* c8LŸ“yŨžGcĮzŅļšŗ”ËgoØí˛…LEQpHã#zzUŌeņ%IJÚNb•Ņã*™ųūđxŨÍ[…4øū{Yɒ@U÷JÍķÄcv}OAÛړ*Æf –'ØYüŲxíēO” üØ#$ûčcÖ ÔMëxrŪS3ŽCØĮĖ-‡?{pNøĢļVPĪáæ_8Į9ų™Â'A h# Ž~ŧtõm>ãû:ŪŪg™b„ )ļF@ĪŨL’[Ž>Ŗ“Nú™ĩcnîÂY¯´é-ŲNe]ÛwĘŲÆÃģ‘žŖœŠ5Ķãņ#G]}ą#bŌ<îĘGĘJ€Ėŧ;qRŨŨwmhRvŪČVHHyū/˜89:õŠ!˛tÖn¯ ÄMyI¸;PežbšÂ˙t0æĸāPŌ--î&Õņ.ōģĘ7ī$Û¸œƒõˇ4‘E.›áûĀ$‘§I‡§9ĘŽä]Ųö9Æ{ŌéЏŗjō#ŧIÄBI h¤[ØîEJW-Ž[ Sm }2Mώ0,˜Ž/ŗ[`—Á ãÔõ<ŒĶBND]ų÷3Ŧo o5.8Lō‚z=‡jĢĻĘtqö'–ķΘ9fTvÛĩš!Č“ĮļzqĖĸ_+ÃnŽ“$ˇ3‹ącv`à ôãäc!÷7˛ÚčvQŲŧ†y ųY ķKŸėäu=zUkqc›Í´G0É äyrÁ#ˇŗøÔLpõzåJƒž†ŗËųԌl¸ ûVlã×­jH8ŦہÉöĢBfdãŠüĢ#T;të–ô…čkfq–Æ+[tkÆéˆ˙ãĻ­Īė) -Ô`%Q@§R Q@_ŧ>ĩ85ũáõŠ…Hĩ­áq›éN:(­d-mø\¤Lßî˙Z™lTw;h3ŠŋqY𕥠ŦK-§ÖĢę˛l°ÎBüëÉč9Ģ1€EC}“[ˆãÆw‚rå2> å@ī+}–ØæPĮj‰czĄ†zđ1’1ĪZÕēˇY58n–9Ââ5d,;äõ\{Uinü›‹[8›kPāsœ{g×͜U–RÚôGqc/¯Ūįîķ×Ôb†Ú[Ũ Qįž  Ąä7—¨Ī ģu4ä˛û%Ŋߗ;¸(ĖČUFIž9÷4û{ˇžņȎ`ǟsåÁ9͍įŋn™¨–â[‹GœYÄ78Y‡'|{sÜßĶķŠQaŅãd€ŗŋÉ!îų†p€dcûŨ>ĩjč2ØéÁ”2¯ÃæãîŽNsŸSĶŊX[sy§B qgĖÆ1įžšãÎG<õĢÚģũŒE(°ÜW#+œũ1ƒëíI°ļ6íĒĮt'îCyR"†ū,{ö'ŋCø*\Fח2ÃĻlģX˜īpĸI1´ rW§>ԅe}~6›\í ŧ†ä’=ņÔcņĢÂQs$Ņ[Kt^HeNzŽ3Ž´˜ÆYŨ]˜nĻšļ*ĀXŸ… IÎ;ķĮ8õĨ‚[?ė‘4–H-ŲĪîC& ßÁ%ˆ^ŲäûQgIĻŪ‹›č¤IAķfGRŠ•ö°9㓜ÔsÆb͐Ú^ųčĖDmąHSķgo–¸Šf‘5.Ø\IcäÄT¨dōƒ˜÷##øpģšŧ՝.Đož.…­Û*Šî\“Ô31鎠įŠ‡G‚Õŧ:Ō2L%_ąÍ´ōŠ2LezgzAH}Ã\DŦ’Fžcoy“”"\ŠÚî}V#§Ō­5ÃA¤XÛ¤7ō@4AŗåÂíÛ͟ÆĒę“ĀÚ%¤Ŗ8īHîeųØaŗ’ۏÉ'€$qFĻåī´Øc‰OČœÛŧ€c9RWāœđzŌ܉čNcgņ]˜ČĮ–™Įˆ6HÚrņ ß50ĩ3_j’y%.6€-ÂnÉQÖPØÚ:c§SPY*Iâå™ 0ōø`čH‘Œm-ߨ`?Ō˛ûÔ¯ŪŌ#öĨ'Ī$Îæ}ʞŊąKc3ËiĐu rJÍ1Á^c}™Üû;áš'œTöË x]#7ÕZá›zĻā6Čp>P;/QŽ{Ôŗëqßøjōá<ŦōÛlÁ”9< ¸uÁŦĢīŗÍĄY“q#ĖQČEpˆá˜ą$Žáۀ>‚Åą§ŠZË-†—•¸ģŽöŠ5åP­ķ ĮđāÔŠ¨^ŋˆ,­¤•!YbķÜĄÉn~éĮ uaéZד{§Ā˛ŨŒlą’Ē­”Æ[Āî9äöãšĩ4P]ëoÃMoxÃĩĩËáÃvx d œŅĶQ•m¯Ú}^xīíí!hĸ#›•†ŪIØägĒϟdæÆ˙di-) ģcv+@%CH9$ät­ m6â;ĢÆ’ō#,‘”ķ!ûęr9ÚŲįŽäķ@…ô>āX3퍉v¸ųBü…‹nļūH$÷sšÃ#iûŲ˙ ”‡îcšģķ÷HæJˆŧn\÷Wˇ^+;C˜ZØßĖŸ-w…‘@Rr0‹€yäæ’ķXĩ]gjyķ4‘–šU V@8f<×8Áâ‹;•ĖŦ^’ųėtkH­cŨ!‰_fgM¤ÔŖžŧôėiچ™u.¯Ö`xRUeWQš@ۜ¤Ž™āŽŨ…@ú<:Ž•§ÁĢjdhVFeÛĀ NzŸS×ņĨ’9—ĐE4ėCģIĢ>0w78p;wSĶŽÔzɖ´Ŗkĩ:[Árn–6}ž{la…Ā [hÎp8ėzRéũĻMVŌdÉ)œ1’FÆU¸äŽ8Á?zŸĨC`šÄōÃ#×͌ŗ`°ãûœZŠk%î”×sŨÛ"BĘĪÆĀĖÃ'†ô'ŽIęHéR"ĶųÚN’˙ŧ‚<ŅąYÚ`Ú ė õĮžæIĨˇ¸Ņ‘¯ÄsBÛAī` e¸ã?Åë“Y—+gŠiÁâŧéĨw…ōä8V 3sÁ#ļ)u‰ ĩĶtËĻļQĒn‚gRyR0TÔäwŪ‹ŸTV“WŌ1ĒĒÁŠy*BęylņŒ™ė}*ÂÚØ[øšŒwKmHŅœ¯9 oÎûŋÚœŅøŠĘÎ9J¤ŠЄÁûŨ2Cvė1īP“?Œ.f"c•Ã1“hŒ`dä†<ßĨ.€TĶUæŧÔZGC9dKyÉōōäu*Ĩ~é'šëéU,ļËáû‡ōؖ”Šļ ŧŗ)\Œ’qÎ8ëŠŲēŊŠōŌõXl‘įxvēŸ›¨ųp={Y‘Ũ+xRęF“ÉV”)?j Qw ˙Y¸ƒĮlޏĒB#Ŋ–Hü/i œķ.˛J ÎķÁ\ļ~ž˙Z›XŨ5ū“ų‘Ywc<6øĪ?#vĮ¯ÖĢŪ4ŌxOōžBŧ<†7‘˛ģ9d'#‘É8ĢwŠnšôH'…ÜÜ'Čfüš9įÕH K…'w­@ĐjÜÜąĮJĪ°1’*PĘ×n-Jĸ",8i†Z!Ö¨E‹âĩŲáH˙ĶūUĶH˜&š¯ņá]HįūX‘WŅ/cÄ %; t™5Ö`&Ĩgۊ(Ĩ1ēŒ”`=HĨUgÎÕfú ĐŊjALÚU°ĀŠ÷ŠdPĀČŽ§Âã éŠūBšeZę<4Øą#o&ĸ{ŽŽ9ëWĸ9Ŧč`;Uø°1Y•rÚô¨ož6ūtŽŸ>Wg>™ëųuŠPÕ FW–̆Aŋ ûĀŨœg8fŨĮõZ}ŦˇFææā,ĒŖrÍĐ`g Į (hOo}+ mņ•ĘÄA<7Œž1ëO€Ém¤(€…—saZnęP ß§qQ}‰$ŅŽY’pû‹ēĘ díčŋ/+ΧúTØ‹pfōÕ äÂŖ$–ėÅA;i ›QD‘ėžRĘyf?.@ŋ?Z–xâ[“ ;Ēpû†äáûg8įŌ›rĄ/` ņė…K’­G‹pØĮPŋäŠv,ëJˆūl`‚Æf`n€qÛĶšĪ™á‹Å1;íQSî~ët;}ĮqīÚ´ė~Ôˇˇm5´0ÅÕ%Ÿ“ÉįĐČīRö)1ĻKsĻj_gˇˇKw –‡ä,Å9gāc<`Œį Ôö7 gĸÅæ4­6_jžé_;›’8'ú{VF™+§†.Š#–,‚‡9*ƒĄEūDzgĨ2äÛ7‡`V;Ŧ†7XՓŸ™ņĩv‚^{tįŠ,5ĩ(Ũ¤Ō2ąČsķ2FĀct|€ ÂįO§5qtۈõą}=Ä.›Ûb’û”Ø,W8>ž¸ęsGST7úS$e•N7šîE$ācčsíšĩ5ؗÄqŲI,ET 6P͝­Ę÷šöéÎjz ’ø~Ęâ-Nåį{‰]“ ++*A~b:g ãšŦôš–îĮRš_,ˍ„ÄŦ1ōƒ—ę3ęŋ…i]]Ā–—Žķ[ÍHíd˸°Ál‘ß+"$ļMTŽö7Í;^ŨP ;1ˇîŖÉüIëFú%¸ˇoDn`ŧh#w_)'“îrz ā0~ķr2yĢáE}>XŧÔiv€ąĘāmĀÁ`đ¨ī#ˇ‡ÃļŗË EŖ.Ž!W![q.9ī\c$õZÆúQŦŪ}Ļëeŧ+ūŠÚ,!;}>nøÉāūU ’4!Š+y–‘ėlŋåršįŽ{úšĪKŠĻ’ínL…ŠÉdČā+9'ų}i% \M=Ú-+P^iŨą!ĩpî† Ū79÷^H‘<ūUũû™'v;HųgŽFŪ@Î0jM>+ą¤Ũ˲PÛʖ>i1™Ü7)'@+jâ“ÂąIsoö“3™ ›rÜ,>P `gägŊ;؈‚xÅŽŸĻŗŠáĀNn ŪAĮŠ#‘ÉäŽ89ĨÕä•üEcá€FÕ s˜’8öųŋā4šËÄí§ZåĐ,lĢ ´ c¯\fĢęĶĩ‹FeŊ’ h—ũ\.ĘN$áoĮ'Œ­§rV5>žĩ“'Î{ķWޤ,äuæĸHqËP€Ērx¤e šõĢŽŠĨ1ãĀĨ!Æá\O—á+ņ“€rsüBēšÛ­qū<|xJķ9ųŠü|V‘ŨödëōŸæ) ģ%ŊÁÕVå#G@ dĮ8aœc“Ī\ô& ĩ’â‹ÉHyp6ˆöŠ9įf'’sĮ$6ļ‰ĒRÂB e ¤œ“ķmëƒĶ4ią)šžŽ)|˛ßŨˆÎÁš°8ĪoQ@i¯u=Ž˙´:9ˇ#Ī+÷@éōœry÷§kE—ŧ—ŧŦÅöĢ¸Äā¸ôãŊ6-2E°xeœĮšōJ0lŒ2JNĀcÚ‹ßôMŽVØŖnđØČÚyÎ_Īž9ĨÔ õ5™/´đģˆŪ7cŪ^¤ƒúb¤Kš_ZI2ÛĸÁŖ*„€{‘ÍCr’žˇ 0/đT§hųy˙VHč9Ü? ˛×&Š5‘ThDg8 !xĪN„ūcېÃL——ėU‚ˇÎ››9Ÿœ08¨ _+ÃWUĘąUČ–û‹“÷ģûséVŦžYŧ’é”l}ĖĨ” ü¸P=OŊ,RXKŖH-ĀŠß ~í;ät ×ĶŽC"š4ūÄļĪ…î|ÉėŖ¸ūčīŌ´f°¸’ęŲÅĖ{#ebŒ„ž6äŸösĶųÕK‹)eĶ-žÄÁŨT ŧ˛FŦ¸'ĸž9"¯41´–—‚O=_`+“¸įÁx÷ô˜ĘöįÍņī7tbBs€r>\cĘsך›N™~ŅŦŋȸb2\N_ā ôõãˇ3%Öí}íņoÄ}Bū÷)랟7Ļ+6ÂéŌME éĩ|Ā~v;~ųŨĶĄĀc9í@Ë6І%.ęUåŲŲ[?2ƒ’ČAŽAĮŽ?ėŅI¤éÂ{Ģx`ؤG*d3qԁ˜đÎlŠ4´Š}HĨŸlm!˓œ`Œ}ōߑõéQęwQ@ļ6š!T2št ęU€}3’N:qڗQ—&ŒŽˇgVžMŧ(" † ‚I†øÔņHeņKüĮj.åÆ>ā ŋԑ÷?mÄ/s¯ÛMÆÉlØsōŗ!<˙xČ=0x§ÃĶ.ɨ9IČcdP Ëd įë×5/a’hm4wz´˛+)2ŦŖcãĒ͂߅6Âh5;7}^Ū$)9 ‚yÚ9Áäũ˙L:Ŗ¤F!‡Y°PY‹6ûįœgž}? XR(|0ČĐHæ|ĄWĘa’Ēx@0OaÎxÍ j"íũõĸØÁ6’\[˛‰# G= ŠĮ~ OjĢŠË1ÖŦĖˇIPÅļ X‚W9%øåzÛëQŪ &Ņtøoc‘‘„ ø •ĮW į ųŊZ™4Häŋˇ™fÆŽ0˛Éėn ŋ@ŊŠh• kËßNĨMĩļÄāĮņžį=:cĨt6‹=ŧ7w—V÷Ÿ,(Yäîaœœ/ŋōHsIąĩĩņÁkČd˜§0*É÷9'8ôė:ķœ Ą¤ę!ôíZåV0ō¸eYW†o› xģ€}E&ī°XuŦ"ßÃS)ˇhãY՗z–bPeĶb:ôė:õĻ_jōÚiVPA6ÉZ2æ@P)_´Œ įōÉæĸežßÃr ܤ:ļéä$‚pKí^x‘ĮjžĢzđøM‚ÚchWqåã’ĖûŨy#Ķ4÷ĢŠ]¤:ĩŧSYXKæ2”’Gbã€FIÎ~é8Ā'Mĩk™üJXv“åģūé9ā“Â›$ą_jļû Ã3ĀÆ>F1aÁôÎGZž->85֘Ũ#Ģ7‘†Ī ŠOŪÁÆGoâŅ ËEōHæ’VPĻ–áúU]‰â€ōTįnÎ*ÃķÚĒĖ3MFgÅqŋ˙Â+?ŧˆ?ņá]œĢÍqÜ/†Õ3÷§Qúũ+Xnˆ–Į“RS˛; BMu‰ƒéE>´PKJE%ėšLRâ€9ĢąđëcMŒ{ˇķ5Æãšė<xG ˇR2–AÁ#{vĢ$\Ųŧģ8ōŽË†Į'÷ëŸĀ ˛3ÜŌō:TÜv2!ļÔÖÖ÷tÎ|mŨ‚%˛ßÁõŸ­*Ã|Ú°´™ŒŠ•Ęô˰õū/ĘļŒ=éÂLõsŒ‹čfšÆÆŪK$TEc„)ØA3ZwSČ5ë< LxnI=ĀÚ=÷{bĻ š]įļi\vŅÉņ5Ō–!vŒžĮŨū÷=Oļ Uŗšá՜Ęä€˙33Ŗ/ĐxÆ@Ījē$níOWõ4ŽUŒ§Õ#@‰e*âYFš0 +Šį%úÛ­[šöˇĶmŌvÅĒĀĻFÚxÎÕ'Ŋ’:õĢÛÁ<ķžy§)PrĄAĀàũhm "&ŗZU+rˇ6AķØ!8?Â[p{TPÍö¯Ū@퇅P†‰¤RŊŽsų€9>ĩpÃĖ&xČŖ åA zS BNc_›†%GÍۚ›ŽÅ3 hÚĄ†ÍmĐDų7#ië•ūYZÉ‚ģ‹Tå”žBup@8Ī^kZ;[1 ЋhV9ĒÆpG9Į^Ϙ41bhã˛‚8؆dŽ0€‘œp1ę:.„Ņ—zŽ`ŌíâgvTHß*ŨÂ˙uąŸl‘×ņŪžāAâ+KéąãYv:ÉfqĮÃÉ=¸ÎjŧZF—ÆÃO„˛•™rWx=ēTíel×Âķ7 8}ß5Ė…{ņ´ļÜ Įf“°ˆn5HfÔ5 KhŽbPLĘ~s÷:ādƒ€:œmĒVwjú5ø¸Ŋ4š…^䲨bŊ„Œr9íĮĨ›fˇ3N#,f9uyĐōB’Tr@*+}ÎY­ãķBHŎ$ ƒˇhÁƧįךz S1üË{ŋâae˛3„¸„Üļp§v3‘ßwNA­+„v’Ė4-r\›8 eFãČÉ •ü?§ÉlH÷&4 ~ĐũÎNyų=ķSËiÜÅ*;ĢÆCc A ¯<Žŋ(äEĐČäH ņX$×nŗ¤ķ#œ?¨ātŠæpmÃūõFJāûˆŠåcM8Ļą#ÅFŽŽÎ˛PᇡëũhY"xˁOīvĨĘĮtL¯ŸJp÷Ēūd9t9<`ô9ŠĘĸc{Üp2q“éK••t;ڝFČÔ¨fPXáA8Éô§ŦQž7qž—+20OJ[Ą8§Qē”@Ŧ샜c9ŨG,†Ĩ€dT‰øSÖĐyŋ:xąŨüoúTŲ•xˆŦ™ÁnOj°§#ĨD4Îr&“ô˙ ™,\‰›ņY…Ņ" '­JJEĩ”ËS˙|ԂŪl}ü˙Āij-3@Í=W<ö¤Ķį9SøSüĢ…Āų?Z5Į(Į4âN1ž)Ągã„üĪøPV~Ęŋ÷Õ+žÁeÜvsۘYÆF}ę6K­§Á…AäÜd…ąėÃüi]ö‘g†¤š…fĶ-"šdG8lÉ&ŌNŪq×=zPÆåŦė-ãPd‘מ ō3ųäŅ~ jV0nL).rÄ?īž´ÛčPß[ĸ†ūß3÷†8č8Vũ~´Ųe’]u<´gtQ…gĀā7oøXvHõ×eŒf(ËáWī¤õüG84Û^]Jōé"Ęālxú|´ē|F}J{ƒŒ:|à ō’`äx?‡ZvŽ [ÉH+¸ŦíAÜsė9˜Čtû˜ÖŌō]ņ4“…VPq´ļNHĪ_ū°Š`ˇ3iH!ÜüĒ­œŊČ€}ŋJwØ^×I”<ŽqB08QīžŨ I.ĪGļ“Í+šˆËœį;›ŽĶééKĐP-´Ë{w‘ĀÜĘØ HÉīõúŽĩvû"˙ORIÆü GĄô뚆KØŦícųžX8@ŧ~äŌŪēÍŽÛÃo!ķTČčĮ“ÆqĪ9ĮĄ¤‡rŲŲ/‰c .@\ˆũĀaŸĖžųöīOļ‡N]BíB0U[–9Qķ(Ā#œäzœcĩ7ė—3kLdRą€:‚0QÎ~¤ŽZ]-•õ=Hyq†2pģŗķ°äūuõ .3N-ôŊEöō×Ė ļâB“ÉČįۏzz<*-üŠÔģlÃ ß p6’;`‘Ž8ÍXŅŨ/të¤ŠÚ B~MŅÄÎÁÉ^øŨŽx8ĢDCCd’ & / kj#oõ€Œ+qŽOp3GQ‘ę-:č6JŒČÁQäl’~U-œāœPOˇÖŦęm)×´øŅöÆk.Nå8ÆpzŽŨęĻŖö[‹k;9/RĪ˅%NBFlņĐ9­NÚͤ‹}ŧ aáfߖÃĻ HîDąËˆ^#wæîFũؑō¤Ž‡híČčqŪŽč֗‘_\Ŧæ@˜Y’ieæltõsÃŽgÖoÜE*+æEÚ[į=ēņ͜û`qCĘzUÕÁđåäâéÚRģÖI&/ŗä\zãÖŽKw{… ĐÔ&ŒĻQɁIo˜€H+‘ĀĮøÔ6×3jz ×™dōXhÔ|°J€™Čįŋ4ZZÃ{ĄBE+ųlŲ |į¨{t?&+“ęÚģÃũœ Ŋ†p­(˜ĒŗŠÛČÜ=7zU›ŨJ{OÚۓū †;ŋË˙×íZ÷QēąŌlãŗ2+ˆđŌM ÆĐ‡%‡c˙ZŸŦß]Ķ$wE,BeÉo˜}ßCĪ9ü2xŠËpkJuĢĢYÔ”/”R7b8\–ĀĀ7=ŽqKŠ<íy"[ ģ1åCŒnÜr[ āãŋ&ĸ:uÍļŽķ¨ŒÄW I]üõū‘Į¯n•KÃķ)Õĩ[w-ųČw>wädžÄtÅ-7AsZĮR[-Žä÷Æû$äcę;ÔWZ•íž—gt,É¸!J"2ØcĘķģīUa˛´Ã7âÎō{ˆ&ÄsāwllSü į§9÷Ļ],—ĩ ĒņG+!Ž_•„Œ ‚CqÎM4›4įԑ.-ŖC %Æ>æ9Ëq…#ޤ~iûî›Ską˛ā‘p$p8Û׎*Čņ điš=āXaQĘy˛ķ0Ä6ņÎ9>”íRū[oZ[ypʑČ왪ÜĘNAĪ;ôíĻ‚šŽr‚Ҟē‚Tr25Ä)š| h.Q™6I3HŠ åAėOķŌÁΠ(KĩS–0GĩhĘŧĨ(ČπƏ€5y˙Ä %G7‰@ā–¤āū¸¯G˜uŦZ‹Íú dŧ,׎+Hģ2Yá’”Ž94•Ōf&(Ĩĸ€ Qɯ¯?áIü<˙Ą˙'n?øå(ø)đôtđ˙ūN\ņĘųSšÅ}o˙ [á÷ũ ˙ų9q˙ÅŌ˙—ø˙@üœ¸˙âčįÛŧĢhŖĮŨP+Z1Å{Úü0đr}Ũöķ7˙R‡^šOūLK˙ÅV|Œw<6!VQkÛGÃß Ɨ˙“˙ņTáā Æ›˙‘ä˙â¨äasÁõfņųSmi; 7ņÉ^{š.¤IõXHÉO•Âļ{ŒŒgģé^åqđß—E šl™N…/&OCü.3ĐSĨøyáy§ŽgͤßĘíģ™Gâāū4r0šâ‹#žĻ‹%¨%AÀÁčrqØ}sRYG1Õ&¸–ŨĸVhmšūÉö_ÞŊŊŋūŸĐ;˙#I˙ÅP<áĐr4īü'˙Rá šâvŗ0ē’åœ$2– |ĮŒ öĩRÚuMDY`$d: •ŲŽp=ûæŊØøÃŦŦ§Ná†īä˙âĒžxbvtųY“æ]Ėí˙}3’:zŅėØîxũĒ4ē2ėŽ)Ũ‰’§.yõ>Ųö¤ŋ‡ũÎŨü´l€Ur|¤|Ąy=kŲ'đ†.@iI ?4¯ëŸīzĶŸĀž’ÛėįO"0Ą@[‰T€;d6höl.xŊü(5KTQ"ļT’Ž@å”r>ƒÛņĢQšâBŅ8bėā‹Šz1ÉB6˙žĻŊ|xÃ~cHtĐÎÍģ-4„ŠĀ.[åāvÅ āŊĘ\<ųŠČ"yčG#v zûz =› žIlōÂC{"$¯˛6Ú­Ā8 ĀÉÁÉīĮø&Œ _ŨÎDŅĒHH@3¸;?§^NsČãŽõëqøÃqžņĻäųf"y;s[ĢĪ^)Öžđí”ŗÉm§˜ĖÄy6äqÂîÂūÍͅĪŠkĄ4V×Vō€įxōŲ&ĀĨJŠ<ƒÉīZQŧ°xbŨŖ;Ļ0år „ņס×>˜¯T›Â ÂlŸNŽUÎvČĖÃ?‰ĻÉāĪËh-Ng F%p89ėzgˇCĶĨͅĪ8Ŋēģ´Ķtķ LŦČĄ”;ŗĢdއŠã­7Q‚8üKcå-Ē4ŒBW÷Žwv?áøņ^—7„t;‡F–ČļÍģWΐ*ã8†ĀęOA‹_ØZnAû7#žö˙^ɏ˜ķč­¯˙ĩÄŌ\§3û¤b8Æūĩ‡ÂO~IܧySåā}åčŨũņøķ^˙ƍöÃwöûA@…÷ļqĪŋŋųÅ>ÛÃz5›īĩĶ …ąˇ1¤N){&Į˜išŒ §^E(IĢ…Y¤.Ĩē Ú8ôîKxžo…Ë?"1&&E+VŪ¤d>qœúđqÖŊAô{ o¸‚ ˇøÔ0øwIˇĶÖÆ;5ĘĄB33d䓒{äķžzŅė¤Į˜ŊÜxnŅe‚9ÛĘB‹ R€px<Œ~>•Ĩsi$÷–Wt`¯, í-Ę8Ņ[­—ūEņ¨›ÁÚ ũë ˙Ûg˙âĒŊ›1ņ=ä&ÚöâÖ9?#Š‚žÃēø;ā+ۙ.'ĐK!ÜĖ.§\Ÿ\ÅC˙ Oáįũ ˙ų;q˙Į+bOū_z+ëĪøR?č_˙Éۏū9EwôQEQEQEQEQEQEQEW1ãĪęđÅÎąeemr.͐Ŗ3*! īl‘šxxÎÕuĪ‹TÖt}Čé‹ĘÚuã8Ô$\å€UĘ#cĸå7ƒ˛–ĨX)Ļ’mĨy%ĒōķDš%ĄÜQ\埈.üKĨiˇūŽg{ģ^^)?ge`6A؝ã†m'-Ā1č>!Ô/¯ĩíî gÕô†@^"ŅÁp˛)x;™|Ø<‚Ũ<%T¤Ũ¯ÕõZÛUëĻūv°s#§ĸ¸=ƞ"×õ-^ÎßÖĀéג[I<—­ĻÕÚ¯åŗHÅŧÆûŠvg“Íí+Į–÷^ÕĩŊRÉô×ŌgšÚōÜĖ’bHņōŖä'rĶ,qčN•2üDM&Õļiŋ{męĀĻ™×Q\ŦZ—Šž×LÕ^ĘÉ-ŽĨ€\ižTĻâŪ9RŪnpY e1¨0ĪŽü&2ģ×üG ØhēaÔt衖e‘ā”3+HBîvČØ0ƒī~^\2úŗŋ,ŖĻūōĶTŸÜÚōęŽiEc\Iâ)įH-aĶė@’Iu1k•2ÁĸT2@Ā;É@Û×nv‰âģŊKÂúŊãéŪn̤KqkqmlIIį…rDGļˇČČÎ9ÆN+ 7h´öëĩŨ•ũ_Ÿ­‡ĖŽĒ¨ęZņö?ˇĪäũ˛å- ųˇĘųÚŧŒāōx÷¯?Ö|aâŨÂ6ôÚ0Ö5 ‚ÛG]:s,ŽÄ|€ųšÜ†~^åęFuĩũwÄ?ü"Ļ˙MŅž[­NŪŌy’Y$ōä“zą‰JŽÜĻpʼnŠá‡Ėzã–ÔR3M7%¤ˇåNöēÛMÕĶŲyO:;IįŠÚ 'žTŠ”ŧ’HÁU ’Iā;×%˙ WÁoûöü>o›ånō¤ō÷gķ6íÛūÖqŽsŠéĩM>-[IŧĶggXnāx$hČ ÔŠ# ŒāúW9ãí+Oģđ,úHĶâGUƒM´…UJĪ‚#(2…cŽ+ጊË 4æĄ[šíÛF•—}Vžšh›¸ääļ: [YĶtžÕoa´ļ\üōļ7ĩGVl€2N8=•䍅ŊõŦžeĩĖK4O‚7#AÁäpGZãĩZiß n>×ge.̧xzKQvąuÛnĘB9‚ōŪO­nx/ūDOØ2Û˙E-*´)Gí ÛjN=-k7u×īî ģŲ›”QEqQEQEQEQEQEQEQEQEQEQEQEQEQEQEp˙ä•ë?öÃ˙GĮW—ÆjĻ™Ąk1jw;’(¯ôé"ŽÃaæs…ŲĀ'k €‹ãOÉsáĢŨÖëėíkM${"ËĐŠMÄ`íüÍ´n5éÔV“ÍgRœĄR7æVzĩ¯75íĩßWg}6K=áĒE?‰ažËPˇ{­jęúsc4Jđą@­šÔ Ÿîįwĩsé _kņ÷‡~Ë{o}yŦ]^ڙmc™ÆÉļF>b˜7Cœ+×(ŠYœŖVUc7Ę÷ŲÁĻēkļ¨94ąĘé0šâÖŪ OBÖmĩ_6;iâ]:C•W‘$“ĘąÜ[;TžxÎO…nXüIņ]ĶXęq[jdû$ĶéĶďåÂÁōY\>lgļkĐ(Ŧ~ĩN*ĸ…;sĢnôÕ=4îžîŖåzjyÆŖÜüCÕ"ņ&‰ŠęēbÅš4inĶZoØĘá”,9gl4ŊÉej‡ˇsxwFņ Ô<=ŠØÍũ§qy…ĩ„’,ėUH™T#ķĀÁÆîdzuŗĖy¨ûCFŖÕ¯‡˛Ų_Ž—žˇč.Mnyw…īžķÄ7^-ņV•¨CĒ:ũžÂŅ4k𠌎Äxfmē×ÁŠƒÄzÍ˙ˆ4ŨMáíZŌî-j ë›E˛žc1ŧŠX°Œ āˇīa‡s^ŖE7˜ÃÚĒžĪUˇŧė•š˛ĶmoŪúõw94ĩÎa|[p/ĩu—Ã玨,`Šk{˜­Ũšėēƒąb*0'ä Å;ņÚ7ŒuĢ\kšį„ŧ_&Ą"´ööúk- ,ÕËėÅTŗ úŝ,]FKØî’ø¤´ëŅīģû´Z1Åž§â tjŸ¯Šé:Ė7:•Ô0ZI§JŌ‡ÚČ„ $‚7së‹^Ôŧ5¤iom¨Awk§Â“-̈́đǞĸĢ îIĪ`NzôŽžŠĘXˆ:.Š…•īģĶKvė;;Ü(ĸŠä((ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ˙Ų Pixcomp[5]: w = 353, h = 281, d = 32 comptype = 2, size = 19802, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(Ĩ V…˜ũĀ>æŗëF×ũBū?΀,U)OúCzšžjŖô—úĐÁ–šl—P‰ĒƒŲ˙Z­.…pĮƒüúÕcH8´@}˙lD'œûVw,Ãģ##Ëü˙úÔááģÂ3ļ?Îē¨AĀmz~Ž8ĪøFoŋįŒ÷Đ øjüsä'ũô+ŧīAN(ģ œ đíđįėŲ˙ ?áŋĮ6b?ÆģõqTÂ.:Qv<ëūÛŅ˙.úđŪԟ˙ôqĪJ Ĩ+°æ<Ķûėm&˙žhūÃē=lį?đ^—°f¤T”]Žį˜b܎ļsßŗGöD˙ķí7ũûjõEŒĐT‰=Š]…Ī&ūɑzÛČ>¨ÔŸŲmŪ&PkØR=Ētˇ_îĘ•ŲW’9‡sĘ?ŗP7_ĖŌ6Ÿĩz›x'Nč­:˙ÛJ¯'‚ŦĮIŽü˙­O™…Ņæ_aUn úĶžËęsô?ũjôđUšSū8Ēīā´_ģw ú §ĖÅĄÁDšúŌ}‹¸-úWk'ƒÜEāübF_ Ü/Kˆ›ę„Qv=UŦ›9ä~TÃgÉÎ č¤Đ/8ō[ŒEW}ôg0ĄúINėF–A×|öâŗ§Ęžä WRúmōōmũö?Æ˛5*ėæeˇaķ ¸˛d„ĶÔ-畯æ<ՙQ0zÖ6Ÿ3yÛ3ōāšÔPĶļ[îÖŦÖĶB,/ų&Šĩöx˙ģEšËŅE™Ę-hÛĮēū?ÎŗÅh[ņĐíVcū’õ`u¨™ÛëI‚:ÍÜŊ¤~˜­¨íH>Õ[FMēmž%­ˆú Ėļ2JÕ¨įš@9Į&ž¯ƒŠ,"Ā^)ŧ–ã)-Ö§DS°„HņÖĨ§Å)€h¸ôĨâÉâ*%,q3•v+V#šWX˛1Vc‡Ļ[ŽÖ­¤@¤4UŠßÖ­GmŌŦ,`vŠTĮJE)ÛÔāŠa&ČYyéL+ž•3ŽzŌįëH€ĮŨŧՍœqJ#öæ€+Ēš6Ž*ˆsA=!…įFҟĨJbjo–ÜĐ[9‘ķV°sĶĨ5—ƒ@>j´‘â´œ WuÜxĀĖ–> Q’<ž•¯"F*œ‘œLFD‘ŒcYĸĀÁõ­I#ëUP˛Æ eę1ĄMŽ>FūUģ,cibpÉ'ĩsZ•锏å×ģSJ搃–ĮĻéĶ3ŦŌf4ėSZrēĘ^*K™UsŠÄēģŪÄ[Ô`Ŧ^ûGŊ‘į5s•éiæ\qœúTīiˆˇÁ'4ĒüG§Ō¨Uä˙TŸA@ЍēĖįëR-G˙-ž“=Jiö˙õÍ•j!Ĩg鰓kė*Úˇˇ ŠĖlDwj°–™æŦGĒĘđ1L ÉnsNĀ#š…‰íEÄ)`;ŌXájHm^S’8­(,•""ĩg<Õøl@ëW : ˜)[ǁÅN¨jBātĻi °¸­;ĖUëUų9¨ūķri‹žxÍH%ÉâĒF›˜ZPÚ¨ą¤Q;â†éS8QÂúP"Č  äN´˜ ՂƒÆ֐Ɔ杓øŌF2˙]û ~t§¸ãę[hĖ’Ž*SæŽAQž&m¨¨ 9'ŒV‰PqQųÍ+˜ŅqP20ĪÍiËUFXŊ 1ΌdŠŽGĸęt^XŊ03>cUfŒ’3Z2& 3ˇžĻ˜ī=8Ēr¯=+VdåēņĮJĄŊ~_JĐXĻ‘ė%I™Pn.%bŽĀā—×Š@kō)Ps͚æ&ģœXjNŗ9&|.f+ÆA!Nî=+JÖ+Á¨G;Īē6lî÷×­ĩ'•_˜f°¤žŊ6v$ŧŪdĶ3ËR)cÁ-͍ü´ŗjFãS )gŒS8$g9#“JÚÖYGŸ˜‚yíZ.qĮa\ž™ŠÜ›. ÎVXɐ´xŪvî8#ˇ@{ũ)—^!ÔLšeƒk™ŨĶnÜ1Æ~oR1ŽŊ˜îtęģšõéÅ<.ÉéíXâúö=IÚedŗXH\ė¤Čœį'cœŨ9ëOYY.í­ŅC™bķ)RTSķpqŸŌ•‚æŨ¤%˛qZž_î}ņYžŧPĶĻš(ģC˛¨Ü#@ŅmfXˆų%úŽGaÎ}ęlÄn0ÁįւŊ˙JƓ_ˆoaŒ¨’8(~öÂ0@=r=8Í]mV?9ĸŽŪyvJŅ3"ä) ģ$úŸ\Qf‰úqTä&†Ö cfB⠇P ™IĀ ô#Õ+vÕÉļR›$!aã9äō)ęŨ0j"x掰WĮ9ôÅgŨJ–ûįįp‹ÜôĻnĢ8|w)eÚzTšjƒĒÛ¯ũ5_įJ[ nzĩˇAëZQž=ë.Øā Ķ‹‘Y “"nĩn8K bŖ…=jęĢŠ`Cmcmdī:Ċä˛.2'ų ÁšŸ:fŖ;#˙H;I9ū.¸âēIŒmąC6œk›Ô ÃĨH ¨ļķ.1ąvœäg=ũ1@<¸-ĩ'•%„:[’ŅŽ[ˇ$zqYĖŌ^ÚØ˛Û°cuŊŪĀSģÆr0­\•ûFîHRáîLEJ7+ķc‘ž?œŠÔKk84FžBŌĖ !€í͌}@^Š)Ŧ¯/ne)ä§p,XcށyĪÖ¤a ×vĪ.\FÎŨĒTޤ‘Æ{ņß­gŧ…ãÖK€1"´Œā7ŋĢ寭<ȉHāØĮ;‰ų 8QĪŌ€ ļ•’ĘîG‚ ĄiđĒN '–' Œc=ęü.ËŽLęrģ•%‰iđN4Å{&°1ũĸB.CƜāqŒzNõd}M¨,QL$9.vŠn9ëŒg†F÷k5Ϝ÷IĪ,ä)Hl>ßįĨymFԑŖišC˛dņžFxĪ~=jÄqļŌbY ÎBõaÉįõíĮqÂ^˜îVëQŽ2yr+ųCņ=Gnô†kXXŋÚt͇Ž8­6–ŠÚÑ×#ˇĩŸkm Ū…ÉzV9g ‡V•[ŽÂãžzUûDuāŠ2ģ-ˇÉ#ÅōŽ9äõîsîjÛA,°Ú}˛Í.e3mĨeHÆrœgĩJâPú–§HÆ4ļ,ąÉ)ÚĮđģŊAôëŠuē´P’d‰d!Ō/%‰%Y˜aÃa~ūAÎqJ°Épˇ×SŖYG0‰Ųîå •”8ī´ķÎj@Œ/ô8ŒÆAļÂŊ&FŠĮCÔŸŠ¤.!ąWÉo#Æ !ŸyPUērqŽ1ÁĮōĢCģWļa,Ebˇ U_æéׇ×ÛōƒPŗ´ŗŽũîĨŒĘehãMŦ 9ęÍĩ€p=ûÔŪJÚjŌ]ÜĐų{Ũ•Ur@ Æ8ëÉüč­k5ÖĄ E=¨™ — ]wFÛžFxʂŋ×Ĩm3ŗ€íTü>Kh1ņH›œfCĄÃÁjęÆĘ[¨āđ*2ËĶąQ™Ž¤<ōH``öäOjĢo%Ũ­ŧRĘ"O1lâ X¨ÎāGnøzÕĻE‰§/帒[† šY ŽF:ŒŸ\ĶaŌËą—Ėh2œ¸*§¨ā÷Ī\ûSTHöhą=ÃA*ÄíˇimĨĨ$3¸üOZŋ<d6Ĩ˛y§™‚–įåÜ­×ŋŽĩN;°ļąĸċ'–ŦSn@Ũ&9Ī×ņĢvŽM•ÜÆČŧjn]d™ŲqōNOLįčh5f’KbûŠ<–Ŧ#MÛ##$õžÕ ͈Ku–ŪęcMžI9— ãc’=ÍY`´ŋi"(¯s41ŧKŊ .ÍĀy8Į=ķƒîÄTžÅm %Q­As* č<Âp@=84\ ã¸IDsˆßcŸ0ę?:¯ŠËå‹lE–¸ ‡RqÁ9čxô§ÚÂ跂@rn\‚;‚x¨utKl!|͂%—ƒČ÷  6§B2FIéĮRúÕp‚>ÅÄö1°Üw üė ~&žéōƒŠw3¤8āÕyyÍ[™J¨ųÅ0)L85‰Ŧ§üK.Τ/ünĘ:ÖNļö%ųôˇ˙ãĻŠ žڒHŨks!(ĸŠQŌ–›N wŠĩpõ {UwkV˙õĶ5] [đøÎšoūņ?ĄĨ-‡Ķ-øt­H1YptŖâŗ(Ō…HōŦhYŗĮĨVŽĨf3Å %;ÂÍRØųrp?:Ãļ´•´øķHIIˇˇĻFAã˙×[`ZäôÚOÖ˛–éf˛ˇo(š› ˛ąãžß•$ēģiEÚ[ļūun=Aįâ–ØLÖēv [ƒ‚ÆGRqÜ`ž™ĪSU–XŌķQ’{WXäE¸Ú…<īČā~|U‘9ûV–!YY‚,œ}Ė€{Ũh#ÛiĻ] JŅÁ‘Áhà Ü3Ÿ—€=ÎjÕĨˇÕŖ)i[ŦlDÜÉėN3ú‘UÖâö×Iš–a$3ūQ+‰0ą×Š–âfūג,4­öĒoĀ-pãūé †Hâ6Â͡Â×`|ü“Éäx†kQŽĨē›Q°HÆv0}yõôíøÕ˛ŊļЂ&l{W 7“ģˇoJŗĖúŒl#…0ĒDĮ7˛{}Á0@ĸ[i4Ģs(tbäųo…ĀÁČ;ģķÁæŠL6Zęm…wÜpĘØ+ķZÂÎ2šlM •ŅHÛFôÆāqß~ĩCė‹qkqœŗd\ęÛr {tĸåöķÍ6ą% Š"Yd7Á8ã'øyô¨­–m7NąĶįļØZr„ŦĄ27•Øxåēuāį#&¤žbÔī.cē™mH1+č‚=@ôâĄķKĄ‰$ŒHÅĖ€âB@ ũæÉįœįļyĨr’%ŽÚâQ¤g†Ûrų&)Kc9' žŖ‚=š§Ão:æ“HčåKČßwcpxįͧ4ˇÂ1Ĩę‚ävgLą“x\ˇ!vō1ųôįŽ.ÛÅ"ßÚfÆ?)!n—QŽžŖœûR¸XįgšĸĖf 4’O&Āã§ ģŽzg'Ø­l¤Č5ےč’-ŧ[ÕB.GŨbAÎ}?Ȩ­RöįÃëöF3L‰)dĀ ŧįĪëQÆņžŖ­ŌÛ˛Âc€Gą Gie;\XÅ3w–8`'БúԄeÛīf Đ×ËĐŦ‘NėÆ `Āįžr ŠŠä$Jį Č¨ĖEčŗ‘<ŗj’­Ë)Úą—ˆČÆ `û}jÔĐ[Ã=¤pm2‹ĩ2bĮ""yÎ@á‡įQDæßKždē˜\ŧ.Џq‰[įų ~5;DüŦ–¤Ë-ëŧo‚<€7G íĮĶڛZ+hŽb ąM¤åāļylœsƒÛĩ Ŋ%š/´I_ŋĖį…Y1° íÁāöĨX>Åŧ(“,ÄZ$‚5'aÜIËМƒž:zÕS˛æ9aŽ{¯*įũ#Ā”yĀÛqœP{ŸzĩåÃö÷n^€QJąHWvėcúwíĮ"ŧa¤XĀģ–AŖn €C:ô dúß×Aĸĩ{Ĩx!ŽížI¤r-˜p§“à ŽOSYĪ8Aue,HōĮj ~Z€ŗ`{“Đ m=čũ¨ĄĄVÃ\ČHsü[ÎzvĒĢĒ<7–#íS…9ÜŨ‡ųíZZRĀ,ähŖ!^âBwI;ۜíųbŠjRĸ˜mU[|û‚B{ôČôώAi-ŋąE…ĒĒûĀq†īõĢŦĄYZdNˆL¤+ų1Ŗ Æî899éZˆvŒ{PĨ:uâŗæ8­y׊ƏPõĻ€Ŗ9ûVˆ$?ØWøg“˙A5ģ.:×;âG?؏ ˇũÕĄ3ÅŗHNNhĸˇ2Š( SŠ´ęQÔUŗÖǝŪZ˛zĐÖ´<4š×b>éYĘkWÂÃ:Č>‘ąūU2بžoÚ´aŦØŖéP2ätÛë‘ifķžv.;Ôãŋ֜†ŠkŸ=‡•æ`š`1ų‡#< įи\ļŠg$˜ˇg 8ö<~u—mjķZéŪL@ÁībÁĪ@N}ÉĪáéĸąô”J°ų1#nÚ]FĐN¤qõŦīŨ,šL )r˜Ĩ{ƒĐô*B,ÎgHnY™UR#Ÿ)žlį€xūb› ĘotôVSūŒcļ–G^ŊģŒķĐQeÃC¨ YGŸæķŗČ''§qüęí´¨Ú´PēLGh?/^rzņ×ķĒ×3]čÖ­<ĸ9ÚāfFíŽy˙õšīļšģŧ•c—ß2†Æė(ãp2s֐YÚÍwg§ÍÆFIs#Čí¸ŽíØägķĮåÖoôhÅô×ÄVW]ĄķēƒĀ#Ÿ^†‹)#ŽKQēv‘HFŌ1ĪNOˇŊJŅYEk||÷Ā”ogFb­Ÿ~[Ž3éR2e™{+Đ4žmŲÆ8Ž:v>ŋLÔąš;kfߘyĖ`'ĘGĘ9ę08íų‚ÄlŦ[ “1Ĩ°pÚN?ŸˇÚéįÍDĩyŽ!ķĄĢĒ…`GŽ29įŸ…&\QzîāÚjz›5Ŧō+ÂČŠ•#`į§<ûÔđMQhÎ,ã-$ í!PŽáƒŽ~™ŠãíZēO,Ļ+p„*㠎8Æ>´IRŪéQÅ °6­ˇÍ Āö9ÅIĒ*ÉûŨTķ¤vķ.‹øųFA“ũkR[š ×I![XŦązäįĀ=k6$7šU单ĸÛÜ#Ŗ­´ŒČãĄāŽ7Ļļ)¨MxK›vA\ąéČ9öŗĪ^ԔÒ5›BĶ•-māI.€hD!7x=3ĮnõböÜĘ÷ëcæRcF#D#o@Äd^I…%ĸĄˇĶÅĶ]@âPmƒļōAÁķAāācšŠi„wÚĖ-ąg‘T¨nÜq’Üde†3ųz´e%c¯ŌBÃĨØÛŗfD‰U•ˆ'v9é×ĄĢ’ŒÎŖĄÉūUƒ X WOŊ7>"YDc ›Ė{7įŗ´‘÷ąüë~dy!“klĪF<âĄî#™‘3iæIĘÚ­Ŧ‚EtÃķ ādüō3ŒĶáũíŅo5ãœ\Īå†`Ÿ,IęĒōĒ5ĸÍ#^KT\ĸe\F sp1œãĩ^žŽß$Ļ;pÆáöģ3•åøîūTĀĒģí儙ĐH~Í ‚>ž‡#'¯áÍUšéÃ&åû3°iŖRų3`Œũ ˆĢ I" ¨ķ,°BË[+°õŠœŌĄÛ&–¤ZĢL"ÉgRC+K€8aĶ“€:ŸÍˆš,V›ä™y\\2ǟ Iūœu5A<’đ˖–kEŒ‰Šá[ąĐÃŊ>úí–Ia@mˇ5ŲpĀ3 a¸påÖ ˇļ u ķR4Zđņ’&"<āĮ¯>Ø4ĄŖlÂHØHBp įiĪ^ĩ¤üsT,ÖLdģy^J…Nāt=Ģä†8ÅP!’ũŪk2č`+NLāŸjËēˇ^oZ`fĖ+šņIÛáŨC!Įé]-Æy⹟ xgP=?tj–â{1E)¤Žƒ!(ĸŠ:RĐ—ī/ÖŦÍ@Ÿ|}jnôõë[>\ę˛HĪķŠĩŋāõÍåÃz*Ė˙õĒe°ŅßĀ8¯ETmú Ŋ@ËiĐUMJÚļO%ҎhņĩžLœŧ=}*â`ŠÆņ¨ˇSŊÖCō†Ë` ÂhjHCiMÄíūĢkʧ'Ú˛’KÍ&-ī䘨(‘†pžAį<ŅŊãD) ûŧsĀĨWˇōãNˆČMĘ@ĘU€;3ķžüTŒ‚hí˙°īÖÚ7P&âvs9?ĪųU—¸u×ĘĀ„–XČ0ų‰*GqÉŒR<ú†•+EœyĨHvžƒëœsČĮjÕ°&Ŗ*"–xâ-&Õ ß=šā˙úĀ3­oÛJĶ–!!IŽ™(Č,F$ŸËķ­9 ļ‚{ųXÜĘŌÄŠ6đ1Ž:rxâŗn¤–â}6Mʐ4āĸmĶ‚GLr čxŠAĩŠ]XOæ*ĖÉ1¸đŪį=;Ōr(šK6TXD ›Ŗķ$"Pų@ÁüøĪls ][Åm¨4‰Žgcä—Įęqœt?—jdjRĶc‚īĖōãŨļPļí'.qūO5%Đ[6éūÆ-dyJŗÚYG9'?_jĐ_ąÛj†VķSd^k3H<ĩ^œäö˙Z¯cŌ[élw3å‰VÉĮĪTí!ú)<ž1Ī#9éõ8Z|Ę,ĄŽKE˜yëŗz€ßyƒsßĐÕ˙!ŖŽ6ų,,]‰gšÎ=ē~X˛ÂŨCs“-å˛5ܲ|ŦË*UĮbyĮ]šę*95$jÆy&Ÿė‹ŊU” íę7Ŋ@Ŧų$‚îĮí—s>Ųm`gŽ,’7IßžxŽĀq[#T˜\ĪmQąK—BįîŦa‡ãš€˙õfĢRãĖ "CēÛ€Ž‡åi ŒöāãëĪzĮŧ–âFûlm–&ŧmŽpYU‚‚0$'ņŠJ\}Žîûî0\¯ú8c‚ 9áēu&´$֙`3Éo˙G¸—HÎ؁Īb9ŠįÕRKaĩUŒ\:nØw6Čw‚8ëÔ}(¸ĶZŅ-|¨Äq˛’ЏļßlŸĮ­dkĒį”ËDļŌîųĀÛĮįŽZj°Ū0‚(’4[hĻ]Ŧ8ŒcŒmũjĩI''ėhe…Žã´ÃfãĐŲü  ËWlČŧmHãE ¸b¯.KÔ3H‘OäEj‘¯˜#ŨŠOŨÎHŽããVā“šĄ"9GĘk*b3Zw,zV\ŧ’i (\ã“Ūš_8Ôũ3ĖWW:ž‚šO&ß ßŸöW˙BKq3ÆhĨ¤Žƒ!(Ĩü ZAJ(é÷‡ÖĨīQ'Ū   ē?Œ=Ķ{¨ūuÍ­u>†ä÷.éS-†ŽÎWâ5ŸĀ~*ĖeØÍfk姁áŒ9hLā8PĘC sŸLô­Í%Ũ­ĨŪÁsoģOËŊA#ķ o|äĐÛ|ģß näČ-ôã•-‚Msuev!žN˛­ķ ËÉëͧ§3j(ōéíJIb0°HČ÷Iš;}nVPŽa›—Œœöū}č-´7ĻÔĀŅũ›ɘĻėŽŠF}:TĘŌËuŠĖđË`‘UY988éYöđ]Üi6͒ę˛äƒÉĀã9'§¯õĢ ,1j:’ɏĘųÖ5ĮrrGļ{ūt€ŗŲļˇŌĄ‚,ŽÛ”¨‡O¯­%ŦV–Ú~Ąlámã‘Wī îę1Éëڟâ+[{e¸Hæbs¸8UīČÚ~ĩ%ŊĩĨâ\Ŧ–(ˤ(“įôČŨÂúRa'Œ^Ú[Åo.ß啓s§úāt÷üë*ĪĨeš;Éķ&b‡ĐäĪnƒ§@ŗ¤ęęč­GiÃôPr{ā€zv5œ]t{uÁ{Œ|ŧ†9ííŸÖ€5ņ7ú„đŧæä@Ų’@lŽļר#žytŲ§~BHWb\Į§ŠÆ?ONb“äÔu•hˆ Ëûŋž|ąž@Éč;ÔļB GY]ȌÉĒí Œœņœ~5,¸˛h/Ŗ~ĸōD˛‰.؝NÖÁČČ#ƒŒp}=ąZW3>Ŧ×9 ļ!ļũîŖm1kxĻå u\r:ŌkEŽtŖš\ģmsŌŖ¨Œ™&ŽŌęŲVHŽ ›xå–bBä)*ãĐõ<žũę,fĶȖŨäWļ}Ō[ËÁVņ†§¯|TąŪâ%›) ē‰DeeˆœHOcĶ=GĄÃŌSw O nŧ’ÎZ'#ØŌF€'ĐsœĶ9Vķn%ļ]ķL¯!;YX&8$ŸoåP$â7´ĩ–ŒĐŊŦ$šÎ ĪLîN9ĻĪöpáf[ —/.Æ,w Ąģu7ô?JuĄSBn"ŽvΘD;šČĪqõÆx Dˇbāû=ÅĒŲ!ˇdŖDŨ ųTpĩEq;ÚÜė1œ,Ķ´^`'ËE‹ TŸ\ĖС‹saS Œ=˛Næ ŧ˜ÆĶĮ%zŸSTŽĩ(‘äš+v[›Éų¤ŒŠÚr:Įˇˇ>—0šîc$J1oJ RIRN}zņS_*Ü^ĪjD˛/Ų~hál į‘Ī•.‘nīqrBÜŠ%éz7Ę>éî9Į>†¤Ö1 ˇ(“~ņ–$aˇ ܌įŽ3ÛÅ03„ڃHcl§å\ €އĨiąžõ‘ .ēÜ{•ˆ[‹™Đ‚@`ņ‘Íi\x NfÜÆĒ´@œUĻ?…FČXž*€Ą,#q$×%ãä āûüz'ū†ĩŲ·&¸ßˆ Â~ë˜˙ĮÖĒ;‰ėx‰¤Å;#Ԑ“]B`úQFO­ĸJcu(Ā{ŠUV|íVo Í*ũáR  ŒŋQŠ‘Fhādq]O„¸ŗ˜ųëũręĻēŸ Xŋŧ§ų ™l4uĐ1­85~,ņYŒ¸žÕ)ė1P§ÖŦ'8  zË8ą\*îÜûcō øŠ@Ŧ Ĩž\0ā9Ν4šē+Z×"ģīœđĻiđŗ šö¸šoŗė)¸ p2Gt'¯Đč^â1 ĨŦPŸ&Y°ŨXŨŽwrˇëÅNMŌŲjqÜÂ<ą„}Åō#<NŨûÔoĨÜĪegl š0§™"•!ŪzķÎųc—R b˛ ō𠁖ûŲíëŽh5¸Ú:t)…‰7 %‰˜ndÎsŒqĮÛĢ9í´›Ī0Ɗķ—%T ô ōxį=­@“ģÚ$q¤6ībE Ë)'ŒdrjŦ–ēyĶžęA€"#ķĢÁÉû įŒũ)\ 4|x‘-Ėĩ,Á( Úzã֖å!¸kc%Ȍ–ˆžbŋ8 œp{gˇ­6Kšūú"Ä01[ īŒt=>ŸŒvŖiúc ™ŧŌwoÁį'qé‘ßԆYyÚæMf+›ļȊŖe9žŨ˙ TŒ­ū‘ ŗŸ$DĮÍE'øpčyöëP=ŊÄš“Ŧ¯‹ûš$f2[’=ržĮ§ĩZ´UŠ˙O…Ō eX~I“Œ.09Æ@õúd€ekk˜ĄĶ)– Ą5Û%ÚÃTvã9ĮAÅkÜ31Õ"dd2ėUĪĖ1Æ20AÆõÍc%•ÄztR7ÚŪI.ԈÂ0ØaĐōÎ '+JYË.ĨēŌ$d]ĨÕFī˜ô'ŸĘĻ:o7Cf› ī%wŒu z{sžŨōiZd:vēÃ97Jŧ>w3=)Ÿé"}é-Ļ™b‰ŧŪpː1Ã0'ŋ­W…­ÅŽŠ%Ôr=ĢÜ1dI0[$ã8î=é čāļyĩ;iϞIc[m‚f~qˇî•,sœžŨúÕ BúKũŌōxŠ.ŦCp# üĀn8æĨϊŧō ”ōŖÎãĪū˙­RŽĘæ=.Õ^ˇČW œƒĶž”˛LĐꚔŒ­*ŦJ<­Ø8ęHÆ:ūĩ2]6›oĸÅŸŧ`¤•ÄÕ-'Ok(n7܉‰TRíĄČČ$9í×§ŠĢ:”rɧEC-æÄÄ }ĐĀ“ú~U/p3nî'{– #‰š!ŒÄĒ‚8ÃtzdÅ]íģEYĨ,.#ICKĀFIū™į­U¸“ËŌîÜ4‰"N Oˆb pŲĮ8üGJš;—PwYH 7šČÎ `ąc 탟s@ÄŽí YĮ8†haDwR0BãĄäwīí[ÖÚ#5ŊŅ’+fo.ä$Ë)ŽIRœā úsRZy6Kj‰oVKEŠ9đJįæ 7RFЌÔwhŠ Ö2NSˎ¸g–hÂåÚLdĄ#ƒĶ4Ähˆ×QfX­æ˙JEy7˜ÔA’O?)Ü_ëY n´´Cg3¯Ųm~tāž\1äđ@Č'ŒõöŠ\aæ1šî¤p6žĐ•äįĄ ĶĨgžĨ4°‹$D_,ZŖÂˆ0€ōāŽ:tąKpFžx"‚ë?ÚĨ-ĀĮœvĪ_ưeŒÜę§ėąĖōĩęČû•‚‚Ēq“ĪņĀ­='ĪÖbķ”;n!ËcŽũ8zŽÛdrK,FŪMÔ¸&Bˆđ@ëÆFp;ķM [Zãå (ˇŨ%ēŨWŸĪŠžŌcŪŠØĘÎęŌyc6”Ášą´P‘E8Šm-(&’—ĸCé]—†4áūûWŠėü0GöjŧßÎĻ{ LZ0ôĒ•ŖÖCąf1œU¤^1VR¸Áíã™JČĄ”õVĻ[hˇØĄ‚íéJƒ­L¸9ëJáaĢencXĖcbĀ9ëüéVÆy˜/2Œ9ÉäNĩ0ČúT€R¸XŠ;8‘Ą*ōFÔäđ1åRũ‚)m䅝ļHÛ۞§üŠpČ⤭+ŽÃM€ûA˜Hä”Û´Ÿ—ŽsZ‰4ųR8cR퉷[%úđOqĪōĢbVži=E_ė˛?mÁf6dgË8ëVâˇœÍ y˙").ŅûÁƒíßķĻn&”;‡\,HmîLn Ō‰<ÍČæ1ōŽėí÷ãŒÕ=JÖæä°ˆÛ´`‚ąĘĨ†pĀō9ū!ųUĖz“R Įz.;-t™ŌūÚw1:CŒØŲƒĮN¸ũzį‡.‹yŽmã0™–s(-#…éŽHÁ÷ĮáĪZÕGÅN˛ŌæŒŋėĢŗ-äĪåų—ĸ6Û!+ŋhWyį¯AK•Ūí28˛ąÂH™Däņ‘áģõĩÄĻž’5+ŽÃŧŗļ^'zŠ{tēdYÂĄ 6ãˇc‘Ō­,œc4ėŽsĐŌ¸Ŧsi§ßOŗ}Ŗ¯É&å/V|ã9ô˙õë}­%Y7˜+¸o3“•ĀĐĶ͚°’„é^*Wŧ6€sīG0XƜ\Å81@áJÛŠB†Ô?Np*ĒũŽX%[˜§!á}č¸BĖeëĮÅonŨéJ#SÔ~”š…cšš[æy1&āüšämŒtįųŅeŖÍäo4RāM;c?t!qëךęãFr}qJ÷ đüŠķŠÚs‹m6ëíÜҍ#äō5‡¨<ã!ÂJ|šŠ>ŨÛÜžŨMnI†äŠŽŅŽ1Š ÚZJ.Ļķ$r#EVpƒÛŽĩĸÄnúT„íRUœŅq‘ČØĒr5M!Ēr“ÂŠ1ĻaĪ5æåa°ŒĖߒãúץ܃ÍywÄŲwͧGģîŦŒŋākH|DËcĪčĨųGŊú WA˜ßŠ]ƊŠf*NÔĶ@)RŠ|q4˛*(Ë1ĀŲčÖ˛YZŦNCIĘû×? Ā%ŋ.GŽĮø×g ‰>ƒFŧ kF)ĶßōŦؗĨZ\¨TˇãY´UÍHîž*ĩņzãđŦČyPHÁ#‘éVTRå š+4ߊT!ÅsĐLĶj’¨ĀH1ėĀÔæ™=ÅÄIol'fžY°Î#Įč3ڗ sZM÷…J$L}åüë”]Jy./mW†2c„ ŗ7á×ųĶÅõÎû 3÷Ōķ/Č2:cąÆiry˜ęċŽĸƒ(ÅsŠy{-­Ä‘Ä­ `"L\‚Jōôj0Z0Œn‡{ü¤Ø=;u<Œ|Čé€÷đAŽnMJX´ö¸Œ †2l\!NŲÆ įŋJą-üąęĀ‘nŽ(ƒį–9™õôŖ‘™ÃņXp_]¤zŌåsDĶ š‘WŪŗÎŖiÎZäbŨ‚I€[kØ'đ÷ôĢ1ÜA$‘BˇQ™&@ņĻîYyäĀūFĨÆAx’ŗ`šz¨8ČüjŸÛė!;j6ĸ2HeP Ī9÷˜ĢŠC’TbHqÔCųV˜^$ŖŠv㊌G!íN)'¯éKŪė/t]ŲĻ´¨8ã4ÆYÆė~ļmĀî{°ũŪäŒāķ×ÚŖ8Į4âŽŊ…1ˇúƝåØ,쑞úTĻŦ3>ī5]Ës‘Nī°Ŧģ•]xæ¨Ė8­aÜU9ʐŠIö #ė§šōˆs×aŒˆíĮæYŋúÕë—åʰU'ŌŧgÆ]riî-¤Ž7!bv0fē);ŗ9ėsT\ÔŌ; č2Š7(âÛąŒ6ā8Î W;:šXŸkėÛ;Œõ§ĖņqäŒP1@ tōúœũ)QKôíBažųĪĻh%•ˆNtžƒdšęĪĀúÍtđŽ•ŖCåXBRģãÍn@d÷v!VãĒąöâŽD)b0qĪéS ãŽĩJöwˇŗy#á†9Ûģ<œwŠ œ&˜ŗ¯îüÃÁãŒ÷ÍP”_-ĨиŲĨmˆŠ70I#ûÄU­‰Ŧŋ}´“ˇĮRG‘TíÖō].5†i7É.YŧŪTtõúļ’§Û/TV5ÆQs&N0sŌ€*ŧ iĶi|Éî$āǰÎ'üöĮŌ´Mœ_mGžhÚ;h@*ŽKäd¨äÆŠ\˜žÍbŅō¤—îI g ‘ģ/Z´ë:΍N |€r$é@Jc}&Š-gœ–BŲ88ę=ēûV´ŦđßÜLûL)Ø]ጠØF3ŸĖVlÃXÃ4ō>éwƑíÚŋ7œsׯŋŌ­ĸĪ{uŠÂ&eTÁÎōúvé,ŖO´ŒØÛ–¸—i!0Ŗæ#§'€{úĐî‘ĪĢŗ‰|°‘ĢÃmĀ€|•e-Ö tČÚō<Į÷QcÎķÔķOĨ:ÔJVūKhdķŨāåÆXOĮĶ) j)ttEÉw27–ã Č=˛õdŨ\CoĒHŌļR@‘üŖæ#ŽšíÅņ–ŧļ–æYÅØ_–H8\@!wmĪ­6æå'Đõ0ˆœŲ€[æ<÷ūtlššÆi!GC¸:LVA•ĪŨČęxëŪ VŠ]æK‰n§‡í$|’u)ĮĖHÆ~Ÿ†MOåųZ´‘…Ŋ°49õí=š˙<樞ßû",i{ˇĘØV”ˇđŒũy§p !šđžÍtÚEo1ÅlÛv aĮCއ?į­eޤ÷ēešM‘/žŧˆĒŦ9āã<ņZ-ŅÖ¯ŽeƒËAo")ÚØ8+ƒČ=MA§]ž›ĸXüžašŸĘ?ŧÆßœŽãˇ@į@îX”FŦĮœ‰0…Ô˛Ë$Ā—ÎÂ8íĶŽ=ĒͲŧGÃą•+ƒ e$“÷”˙$ē›Ū.ϰK,BÖ"CĄ1ÆOUČôëRéáĩ(t˛ÖŋlŲšfŸíōIÆFäđ=1Hu5†įLÕ"ŒVd$-ŗÆS/ĐîäˇRqŽŊ9ĻZ4Ōęz}͌LB@"/$oŗ…;ˆĀü1ÆHô5zIl§Mafˇō Žp%hÔbÄįÔg:÷ÍO>"Ķ kCöQ´đ<ļn˜į qĶŽw9‹Â3~ú)–+‚ŧ9%@œtëųUËČ%!ŧ–ĐE"ÜZ”eŽEf­”Č8㯭1įK-úkn`o<…I8Īa•ã ÷=ĢQ$š?ĒD Q%˜`Ī'~Ny$`zĐ#ŪâŌ}n-āy~Ō3+FĀy…ŗ”õ=ÁÉõ­ÁMŽ\M,2ÄĘ$xã—įPãÜÖi Ģøf on`†hŽŗæTwō¯Q¸cˇ^ôŗÚËŊĒŲ†-ÕĄbWÆÎ3čAruÕûgHĩŽåL ÷…Ô|ŖnÕÁ99üIëZÖ7Vú”—b$fÚ_-ˇcœ29ék–‹Y0ÅŖGÆKv™QŒí; ãœį‘†Ī#¨âļô}8hōÜGg†TWķ[`ų#nŪÔ4 ĨÕŦĸ•æģûB|˛ ’e<ČjÄ:…ä˛ƒŊ|š.Pp؉ŖČéčØëJv&´‚DŠÅŲ`.'E´î9;yŨØgŪŗ25š†2GŲ#œ@å ’•;F88Æ:tīE‚æõœ­6Ÿ*I&ĀĶĄaÁũsJį=ē÷Ŧí2PĸōÄaštdUt=]Ų̌ØE‡r91ŒÕ)ąV›îûÕYGš:‚¤˙1\gŽôåēđÍˊ>{rŗ/ļčMvĶ)ĪÖąu{ĩiˇVĮūZÄéųŒU-™ā4”í¤xϚé3 )( ĨkëĪøR?č_˙Éۏū9K˙ Sáč˙™˙'n?øå|Œ*HĐÉ"F:ą흭áK|>˙Ą˙'.?øēz|đ r+σ†R?lŸ¯ũ÷@ mUŌ´ĄZ÷qđĪ ĶH˙əøē‘~xQzi_ų1/˙QĘÆx”cVWŗx`tĶ?ō<ŋüU;ūO Đ7˙#É˙ÅRåb<Yšâ8;÷Ģõī×ͧ5 ÖĒÚW•j۔įŪëšöŗā? ˛•m0n Í&ū=JūđԐ˜_KFŒŒl2š–ę|Ŧ â ´ëh’/9XŗŠč[ sœ{uŸZôû…Ë$ŒĶJ ĒFŲÜprÜ*ãđzžsŠ÷|áÛx’(ôō*ƒ<‡î[šŠįá˙…ī#dŸKŪ­ŒūūA‚;Œ7ļGn(å`y Ĩģ­ĩ„‰tÁS("Ũģ#=GNüÕ_,¤ŦĖ~ôģzƒÆâ1ú×ĩŸxd°oė¨÷.0ŪcäcĻsRÉāĪĖģd̓¯ŖJä֗#Å ļĖúJļöÛl”á~QĀ ÛŊ\û+ØGu3J#2˝ęęĮŽėøīÖŊ}|#Ą l`bW˙<áČã’5Ķ$„ŗ§˜ä1'9#?įJ9Ī"1ŗëÖ˛mTKgųĪĘ@8~YÍ8í ΞĒB<Đ÷j ‚I9Áëœđk×WÁžYA§)‘Us#’ԟsHž đúFņĻžå‚Jë“ø5.F‘Laĩ×lVwˆ*ÚĒFsāãœûRÚÆŸØw´•ãyÉ*ŦA< ´töéÚŊŒø_E$°¯>vãõĻ7„ôVV_˛Č0sļâAČ ön:}MŒG–›v:ü“’ &ßË`’íeį9<Œ áĶŖŌ­ō÷- š! H¤ą9į1Áíšõá]g3=<ŌģKîl‘éœÕđ˙ÃBÁlžÅqä,žbˇOš[áˇäuč(ä`pŽ×Rž¸ūŅ™b#c!ÛŨ#œmôíĐō{Õ,ˇözXI#$Ūcē!oeūpxöú×Ŧ¯†td¸k…°ŒLā+H ÜGšĪųĀŠ?°tĖön?ëüi{6;žZ°j1__]ĨŦŠ1’y˜PŖß‰ã'§< ąœt=y<Ôé¤ŲGƐ•UÆĐ¸ÁÎ:ôöéŽ:Röl.y¤fî}3S†]TÛOĶ*9ŸËRšPyę§Ą=ęÄ:ø§OžaœöÄŗG1p˙Ol$į>ĻģĨđΌ­96ˇÚ4Šä˛“Įbp:Į~zķV—JąMģmmP̌đ@=¨öL.yŒsMŦčwVwWM É8a4°…Lp‚RsüĮ~ģ…ŧV"û,FgĩÜ&Ūy\ž1Ķą­û hļĐÍ ZČņLĘō$×2ČŠČ8f?¨9<>Ō xŨ-yģHėĀmی“œ`~y=I4:L.yŽĻ‘^øJŪîŪoå]dĸØųIęIõ˙*čŠMk!ã$WP|7Ŗ4&'Ķ xËÚëģ“×éÛōĢKŗ*Ēb'n%؟Äį&dĮsÍåŽ6Ö'uw­ŅCĢ‚ĀļIüũ1Ušk÷ļ’%žãĖ\ħÍų˜ų—ŋPŖíž+Ōß@Ķd ›v”Š++ŠÁ÷?áQ/†4eyXŽéČÄģą'¯ĨɅÎF!urˇ*<¯ ۈŲbČ[ŽF;tjâ3{WY„´X‘‘-USū‘!?/LÜę9ĢMĄéθk|÷ÛühöL.yķIÖĢHŲį5č§ÃzIëi˙‘üi§Ã9ņį˙‘ühöL93‘æ¨\`ŽkÖO…4CÖË˙"ŋøĶÁú ũë ˙Ûg˙âŠû6+Ÿjö˙dÖ/mûG;¨úqTĢėK΃ūŋģ’ęįA4‡.ÂęeÉéĐ8ü)?‡Ÿô/˙äíĮ˙­„|…Į­õīü)?‡Ÿô/äíĮ˙ĸ€;ú(ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ +˜ņįˆõ xbįX˛˛ļšHįNČQ™•… wŒļHÜŧdtʼnem:ņœj.rĀ*åąŅrĮŽ›ŽÁŲKRŦĶI6Ōŧ’Õ[OÅyyĸ\’Đî(ŽrĪÄ~%Ō´Û˙ ĮŗŊ‰Ũ¯/Ÿŗ˛° ‚ėNņÃ6“–āôę×Úö‹wŗęúC /hā¸YŧGĖ‡ >lAn‚ĒRn׎ęú­mĒõĶ;X9‘ĶŅ\ãOkú–¯goáË`tëÉ-¤žK֎SjíWōŲ¤bŪc}Å ģ3Éæö•ãË{¯ jÚŪŠdúké3ÍmynfI1$xųQōš@é–8ô'J™~" Ļ“jÛ4ßŊļ‹ŋõ`SL먎V-KÅOkĻj¯ed–×RĀ.4Ī*Sqo„)o78,…ƒ2˜ÔgĮ ū]ëū#Đl4]0ę:tPË2ČđĘ•¤!w;dlA÷‰?/.}YߖQĶyiĒOîmyuW4GĸąŽ$ņķ¤°éöH I$ē˜ĩʙ `Ņ* `䎠mëˇ;Dņ]ŪĨá}^ņôī7UŌ%¸ĩ¸ļļ$¤ķš"#‚Û[Œddgã'…›4Z{uÚîĘū¯ĪÖÃæGUTu-bÃGûÛįō~Ųr–|ŒÛå|í^Æpy<{ןë>0ņnƒá Númk†ÁmŖŽ9–Gb>@|Üî Ã?/ ōõ#:Úūģâ ūSĻčĪ-Ö§oi<É,’yrIŊXÄĨWnS8bčÅpÃæ=qËj)G™Ļ›’Ō[ō§{]mĻęéėŧ§Årļ|¨k)¤ÚëÉy$ĻPŽÜvWiÎ8ÁįŒg"ˇõM>-[IŧĶggXnāx$hČ ÔŠ# ŒāúWž|TšĶÃqømėfĩŗÄ$ÔN)ļĶŖ]¤2•L3|ĩT8ųˆ%zËđôq)§wÚÚ.úīčĩ}5iÛJčîußčŪĩ:ÎŖ ¤m÷’]ųíA–lnĀ8ÎMjל|V˛Ō¤øm­k6–ļMsužoaKÍš,~đrˀ¸į ôzĘ­ qÃÂŦoväíŅ-žūŋ€Ķw°QEČPQEQEQEQEQEQEQEQEQEQEQEQEQEQEÃüa˙’WŦ˙Ûũ^_M¨XFšf…ŦÅŠÜîHĸŋͤŠ8 ‡™ÎgŦX‚ņSøķÃ÷~(đ^ĄŖXÉ w7>^ƝˆAļEc’=öŽŽŊ^Œp„ŖÍ%)=Úļ‘ŨuNŨÖŪdYķN|4|7Ēh^Ô­ĩmWÂpiíŸ"ŪIbkĪ?Í-4qd•čX0äuÃĩā ú/<[%Ά¯tk[¯ŗĩŦY4‘ėŠ7,CBĨ7ƒ´ķ6ҏקQZO5Jr…HߙYęÖŧÜ×ļ×}]ôØ9,ô8?‡Iū%†{-BŨîĩĢĢč ͌Ņ+ÂÅļįP2ģŪÕĪρ}ŦxWĮŪû-íŊõæąu{je´uŽd&ŲųŠ`|Ũp@¯\ĸĨfrYUŒlß+ßgšéŽÚ äŌĮ+¤xÂk‹[x5= YļÕ|Øí§‰té FBU^DnO(ĮqlíRyã9>šcņ'ÅwMcŠÅmŠũ“ė“O§O?— ÉdpxųąžŲ¯@ĸąúÕ8NJíέģĶTôĶēûē•éŠįŒsņT‹Äš&§Ēé‹hŅĨģMiŋc+†P|°å°Ōô%”m¨>ŨÍáŨăPđö§c7öÅävÖH<ŗąU"ePĪ¸Q‘éÔVĪ1æŖėe VžËe~ē^úß š5šåŪž{ĪŨxˇÅZVĄ¨ëö{ DŅŽä60ÜoᙷO\g*ë7ū Ņü#u7‡ĩkK¸ĩ¨/ŽmĘyŒÆō)bÂ03€ßŊ†ÍzŪcjĒû=VŪķ˛VjËMĩŋ{ëÕÜäŌ×9¯ëNúÚižštĶ↿Ú{…t[Õ!]ãU*Iˇr€a‡ÍˇĄƒ]פņ†§ŌtŊV7úŦ k˛ōÆkh턈C<˛2m đĨ‰89Ív´Wą’ĶáQ𝝾Ą¨_ĮgkFÛO™ÖA 'rŠU8Bv–Īæ3ŪiÚĩļŠæũž;Ôōņģí6S[į9éæ*îéÛ8ã=E^ĸ•LRŠES”uģwŋYZú[ČlîQErQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE˙Ų Pixcomp[6]: w = 353, h = 281, d = 32 comptype = 2, size = 20167, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(Ĩ ´,ĮîÔÖ}hÚ˙Įēū?΀,U)OúCzšŪĒ0˙I­[.[ØÃFTŧúÕ <1xFUá?đ#ūkÃęÍ:×Kn ¨5Ę9á‹Ņ˙<˙ī¯ūĩ0ørôrQâ+šŲJąäŽ)j;œ2ørųē[¯â”ønüsöu˙ž…z–đ)Œœb‹ą\ķãáëáĪŲņå˙ƒ|xûãđ˙ô‹$qV ;Qv>cÍ˙áŊōé'ä?ƗūëŪŋc—ūųã^’zSļJZ‡1æŸØ7€įės߇Dēčlį?öĖ×Ļ„Æ)ëĮJ.ĮsĖ?ąŽz›9˙īÛPt‰ņÍŧĀ{ŖWŠĒâĨX—?v•Ø\ōoė—`qõF¤ūĖ ķŽkؖŨ}*UļRz Ōģ*įg€9ãÛ&ąÆ?öjöĨ˛RrT~U2ØÄxōÔūs0Đđņ§@zā˙ĀéÃMˇö˙žëێ›ly0Fā"›ũ—fq›XOüRģâŸŲ°ā‘ôjaŌãĪūbŊŦčúsl­ĪũŗáQKnļ6˙÷ėRæatxâéÁŋ:VĶō0Ccë^Ā|3¤ļū Š…ü'¤7üš¯×'ühæbĐō?ėÜ @5€~qõ˙ëWĢé$ļÅ~ŽßãQˇ‚tÂŧ,ŋ„†Žf;žSũš€˙‰¤m>>9jõ3ā}?˛\¤Ÿũj¯'‚,ķÅÅČ˙˙õŠķ0Đķ/°…n Ī­;ėŖšĪĐ˙õĢĐdđL8ēœ}qU[Á{GËxߌbŽf-:œ!´@{õõĻũ‹¸-úWk'ƒĨ‘xŋŒ_ũzĨ/…Ž“¤đą÷R)ŨØåZÉŗŸ˜~TÃgęMt/ _ áaoŖUßHž›p~’Sģƒ%uÆ[=¸ŦéÁWÁę+§m>ņzÚˇũõY:†™tŲ™mÜ`|ŲöĢ‹&K¨š|J–ûØeŸųTæŨQ ĀÖmëeb=ēĶ g=ÂÖŽÆąjÄ_Ô~TU%=˙:)X=͘Ĩ¤ UŠŅļ˙u˙=ëõVcū’õ`u¨™ÛëI‚; OØŖúWG#••ĄÛ§BŪ¨é[ņÆ fŠbj‘h А/Ĩ1íQ”%ŗÚ§T'­;f($šŸ”-.)Đ1KŽhÅ9Fzs@­H‰NH‰< ˇŗ2) …#&ŦÅ#Šŗĩ[HB‘Å!ĸ´pdôĢIo‘ĐÔËÍXUŠ!XíN…Ī7ĶHd1L+S°Í&Ū}¨ )vÔÛ:Đ#õ␈BņÍ(QÖĻ1žzRųyP Į“oJœÂŪ†šPŠ@Cŗõ¨d=ĒŲuõĻ2q@>ĸĢŧuĸËÖ̞į S›$|ûU)#ëZ·'Ч*U•$@ U^0;VœŠU]}Ё,@öŦÛøąg?§–ßČÖÜą€„’$úW7Šßy€ĮËBĮĢSJ搃–Į §iŌČë3år3ÕĢZGX“ ÅIs(ŒdÅēģÜÄ[Ô`Ŧ]ķũčŦŸ9č ĪŠiæ\qœúTīiˆˇÁ'4•ĒüG§Ō¨Uä˙TŸA@Šæĸ˙–Î~ĩ"Ô|ųĪI“¤íM:ØĶ5ūUĢŒqÖ˛tČÉ´„œ ūUšYĄąČĨģU¨áö§Å§āSÍĸ˜Õ#ĩDÄŌnĀäĶC?(Š"ļyOJŅ‚ÍTt¤"”VĖŨjė6C9"Ž$@vŠ@ČŌŨWĩN¨¤Ū&üšœ`SŧÅSÖ č2j.­É¤R.‰…J˛gÖĒD›ˆ§ °U¤QÍĨK ^‚…‹ P ’)§ įd šd˜ô¤y$âŸíšH×s~5{ėĒŧŽüĐ,œc5nÖ Œ°ãųԈwjŊG›ŧ… 0ᜠĐu īQų`ãšW2H~™¨Z":ķZ“D1ÅSe!ąŒĶžãȨK8¤ā0<ž•^XŗĐS:EäņUeƒZ!˙Jã8ÁĻDąÕ9SÔVŦŅ‘Ú¨LžÕB15bæÄ„î~oĨpúëÂh\`qĮį^‰2|¸#>ՓŠZÆtËŋ‘Ôšį×iĒNƑŠ(Ģ#ĘŽ/¤aU•YÜ÷‰¤)đÉåL¯Œâĩ0ŊŪ¤˙b›Õ:*ĮöŸ˛ūTRš¯šÜ¤ķo@ĩD҆g ąn{`uüč(éėĸ“Z Œbš+}fúßLyŸėÆa1D7@Āžį××Û­n\ÜßE,ėRØ[$%ÕˇÛ°:ū”†^TËfŸŒ Į‹V™SOD†KĻ ųdíąäy+Ûš=¨}fUÎ-žKl*´¯ˇ{ ôŠôé”3FN3éPXTTķ^Ū W–! į 20GQ÷šãîĶšˇÖŪæ]ėS÷h0qÎHĮúãĩmÚBXä ķZ†?܏ĨTŌ§ŠYfˇS™aPĖ28?áüĒoí;f0#6Ķ+:"ž%3ģO—õ7#ˆîÎ8ŠŅjŠø. ĸW1>ĮÚsƒŒ˙ZY.Ō5vc…NI>i˜¨ëš<žāVxÕíf+åĘW8;[îœ{ÕČīmÜėY›í ÎÁ?Lņ@§­R’.ĩz[ģQ'”ĶƯČÁažq€įéTfŊĩ 2\BÁļãkƒÜ¯æ:zЀŦņjx"Ŧˆ7ų¨Tô!† W”€År Î1ú˙*  ÕZEā÷ŠËTRc˜ŠŠéŽjŒ¨jI‚8Ē3&FqژŽ+#U8°šôÉ˙‘­éãČčkWMēu×ũqäjЙãĨ%(éI[…Q@ ( 9XŠÜ¤‚;Ў ypėۛsTęīa@„6ëeķ€Bŧ:æĒØ ×đŪUūtŸypzTēZįXļQ˙=—ųŌ–ÃŽįĢ[}ŅZ’fÛôĨ"ŗ&E,Õn8ŗŌĸ‰*Úā @Gˇ•tĶ0ˆŒ`tū/N+0ÜoÕŽž7Fxál¸d×=JŲ, d\™ j,Öb1ä°Y<ĀwņéژÛ,§éâ8اšYЍ@n§üū>¯†­Ķæ_0.׏įį$‚ˇøĶ 畺 P#“Ŋ[œô[`Ēô ņžx÷ĻÛÛß^éåaX™ ėĶ+HČ[å\ÁĮ9ę;U¨95‰$2Ë’ÅöādHĀ=ĀÎX¯'†K=9ŪTûBáŲKîĀ#“Æ'4€ˇr8G`8Û%ž›iđšI„2[*ČŦЀmá€É?‰5RŌŪæ}CNš($H VÜŦ¸dÎKÜyĮđûÔrM/önĒ/.W24h‘`ĒŲ9UÉö==;Õ­/MēØŨ\Ũ*”‹›dn6ápx=1œį‘ÁŠŖę‰iĨ]ŪC )‘Äži=2~b1ūī­ æ˙Bēy:,lå=@\āâŗô{ŽôVYÖ\<Ĩˆæ2­€8*Ü~u­shŗX^FĖPIĄaŒāŒdP÷œw€ßYÅlЧ}ēŸvqoī`€0:~5̤iû'ŠPŗ–Đ…vR€–’1ŸŌŗĄ)oâ-­.f Ļ-ÔíīëõsZ>”ÜLŽfieūĪ´ŪĖNrCˇ'šųŗøŠímrķĻy.]bNZUeQĘHΝ?ĨG$EŽP,jŠ.­T)##lYĮ8éũ=õÂE!ģļU…ŧĢÆ@ŋ6æ `Rqœ{~5,‰Ŋ nĶIv]°Š"۞@ãįŠ`sĖÖĻÖ,K*Bļčw°J™7dŽ ŒdžÕ4ŌĮū•2M˛UkÉíûŨ$öÆ8õ§4à 1ÜA+JÛFYdųNeātįg?ĘĒĪ­“;˛˜ŽwÃģyœ ã~ŧz1—wĐÅ*~Ņp(1õ­’>R95BoˇˆöMë/А!ĐöέgO”1L ÷ųxĒŌÕšWú ¨Ã9  RŽ9ŦMe3Ļ^:B˙ú ­ŲyŦlĄßž?ãŪOũÕ g…v¤§Rĩš”QE(éKMę*ö*Ģ‡­9AĢZį[ļ˙Ž™ĒČjᇯuËŠ?ĄĨ-‡ĪLˇ$ZPž™ŦË|āVŒ=+2™Ą TĄ¸ÉÍVŒÕŌG/žĀtŦŌ\iÅķ°ĀAÎ@<įhü=?:ÕNäãrk >mŽŖpž9d0pw÷oԁÂ#7ē}žđ%‚<4AĀrÛ隈ímä1aæ]žIn¸{ö­^ŽY`ōí­íōM°|€sģigŸ—‘U>Íkw+$Jōē…Ë‚–vįŽé@‚ęA¨\ÄįEų{Æ9ÆsƒëTlRXã˛fŌiRTŨąƒc+éĀ˙ÕWî!H垸2F]Ą .ŪTíú÷Ûú{UM.<ĢStŒķ4Ĩ­ØąbÛÜvÎNš¤2Kˆ-ŖƒQÛqs#|Ģ)Į Å{įõīÖŽYMm>´û–Ā™É?ģ]‡øąĶ¨íßÛ0\[[ÛGzŠŌē‘K–BU9-ÛuúÔöūA×m"x-‚āGļ8āúÆĘaåƒG¸–ŋÖŨžæ Aõ8?ũqÖk¸#›_ŧķwė‡;X§iáąũMY†ÚØi‘#ŨۈÚpčɡqĀų˛ =zirŸnķ. ‘3ķÆ8n™5fÕŌe{æ(ˇũœ8]ĀŠ%›,2;÷Æ?eŒ×ē>ĸķōÚíüš# ¤į ģ “œ{Ō*ÂÛZ‹m{í)bļ‰Ī$čQËÆ1ģ#:đyüeŅĄž}"&ŗ‘ī"C+x¨Sͧ4öö<Ēöņʰ+KæžÖĀ#h?™G$zÖY‘į˛ŅūÉ Ā’]ndˇS´øĪËĶܚW¸í`œ\X]暌pŗ ŽUt`#œĮ§'ŽsEŧ’Üę?˜q$ĒėYļŽƒ¯šéĶøĮ4öWÖˇZ”ëjĻŲ†)¸”É#ƒÁ9ÎãīR[ŊÄzž“DņC%žeˇEØė8QžœŒcĩ'Ŋítô†å¯ĻšŸ|A‚2•$rNųôኴĢåx™ļÆÎņYbU>ösœÆ1ôŠ!yĻŌ'ūÉ­Ž_Ė2I`q¸‘ƒũ)זĶ˙l^JŅ\Ŋģ[ĒūčŠ,w/@OoZB#đÜR˙gXâ0v}ĮķéŌ­kĀŽƒztL¤Ÿ~>ëCMÛ%„ną\D@[–faˆäą'ߓĶK\ĩiô™R$rå— „įī¯<~&§¨Ė÷¸’]NXq 5ĖĒ\(¨‡†>¸#?€­=?í Ėe—rŧq´X‹8ÁÁčrFqž*…ÜŽ˛Íæ} F÷ v1r ¨ Ŋ9īž;õŖD ˇWØRĨRŨ0<ˆĮ8zŠ}Aygö&Cq ĩÃ-ģĢí”ĢiHį…úzb’âŪ;}Q¤¸e`÷2ēFšmĀCŒqĐõũ)MŦ*Ą!ušŦū¤8iŗŨGO_OZŽĘÛÅ,räĪtËĩ7œŠäņĐįš`TFkŠ#HĀōbKBˆ‹-I,GŽ1ˇŊSžå/´E–>Ī/#\ËÉųŊkR1ioyMnŌL˛[BWÆ>LäŨ9ëôĒJãėŠ-æš2mÏ2OŨ€Ōã<ÉĮëøĶą„]N7÷Ē÷2Ÿ1†;Lîyæļ6ƒœvŦKŸ2$•ÄPG¸lšËÚegį$ĶŽ+R͘Yۆ#ũRį§ ôφtëÅgL1ÅkΚÍeˏÍ ŊĢ_˙aj8}šOũÖėŊ3\÷‰˙`ęXéöy?ôV„öWŲąč ˇ\t¨ã¨u9Ŗ†ÆRō¤{”ĒîĮĖÄ(õ&éŗ‹ģ#30dv8Ķ#¯zĖ™mMēuŗhcŠm­¸ĖÆ0HĀõĪõĢú\[4eË ß+ääā€G*–ë6͉ki4¤mŽW8ādî8Įn=E .ŗXB%Ģ*šNępyūœT¯ –iĻbĶnF`qÜF äbĻcę,ÖB8Ú<=ÎÂYŽā;/ãøRŦv­š Ō2‰‹Äcˆ¨'wqŽN9¤26t7:˟+˛ĸnR …8˙h`ôÍXV_ļhĄÕC˜Œ.1•ˇž•Y”—ÕŒŲTy+& n¨įõĢQ(ūŌŌÕCmŽÜ`ž¨z1@âöķJÔ5iŲîH]ŌrF2ūUĢnļöÚŠŲ¤1&ÛpŋÎyž3øV\ņÍeŖÉÍp\ĀqŨ{œ:Ņåk׎-š8 ž¸#ˇ=ûįÛ†Šh7čšBn*^įīDۇSÔō=ųīÛĩO–žîņYĸßkĩ]䄐āį!°zgŸAéNŠI¯Nžķ\EG1°ëķŸēsÉĀéPŲ,v˙o•í–hÕŖŦ鸡%z6ŠeÅöķÛÁhâA$vļûYC툡nŲžáąĪ9ĐC{*:ōS dŒŽŌÄp{U¸w$Heš"c´Ž6#ÍÆNŨØÁž?:ΎžÕR;Ԛc)ÆrgārqƒõE%ŠōXuIÖÜåžō8äÜ ‹rA' ˌûU4ˇōdĩ’8Q­Ą÷īCēCÂŗsĶųŽõv(oá¸0Ģ^JŗŦŗŸ1¯AĀ {ãœuĒö÷ڔˇ‰I­ĩ°™3ÔįŽAöiˆĄwB’ģŦnĢöŠ6oåS…9=;w­ĨGLíõÎČ^[G†B<Š šO-cŪęŽx'ÛŌdp1Āâ¨Ų:Ōŗ.0JĶ“8>Âŗ.É fdš¯ļßę?õÁ‡é],ų暯 xcQcĮîHĒ[’ö<^ŠSI]BQE p¤´åûÃëV æ Ož>ĩ7ņP×­lxHgVcŽ‘Ÿæ+kwÂ+›ÉÛŅGķŠ–ÃG AČ~*ŖoĐUØĒ .%AoÍąĘŅĸäîVÛØƒŸĀÔé‚+?ZXő.ŦqĐä€3Į'ˇãúô F„ĨËrͧ_8KxéĮqYËdoôësm Q —,‡,@čpOol}:UÛ§C€Hw/“–*:ŒdņTRmôŅo6ņĖŦŌK´ˇ/ŒŒ}˙ëŌN¯īĄ™ŋŅâQ÷ąŒ Ī_ZĢ<Žu>6BļY66ä'¯L˙úŠ÷0K z¤ė!öí`ī^Fīî}=)mãŲĒØƒ°æ%ÚÛHb28<탚Cæ#Ø_Éu§Ë™€eHÂŧœ|Ījå´ąĮŠEjcG1ÆYffÜá}ĘëŒgĨf<“ŪhwhI‘Úä¨ œŸĘĩ´ûdŽ xŽŌÛs:.A#ƒŒôäRĨÔņhöîŌIŽĘ2ôéÆAéįŪ§”fûU‘°ÍžÎJc$cëëôâĒi°Íyc`ãŠmō/˧q8äđAõę3šŋ/’ÉĢĩŊŧÍ6Вŧ_ˇ¯4 uĩœķf\$0„ r9ŨÕ˛¯'֕­Ļ‘u3ÅI!RŌˇ–Ü!šëũj;p$ŧŅŖaa!Û´ĢÁ䌎„{Ō4˛É§ÎŲvstĘ7äœ Ų#č0*Y¤MųîæmJk!#¤KjŦ -ŧ°“Ÿ\tŦëU}š9{i ķ0ÎP§Í' §OĄĢÛc—\ŋK€Ø@ |Į+§##§\į+íKöŠRãJŠ Ši!b6JX¸Čę äđsŸSë‚QĒ(Í%­Ŧz°¸š$Ō$1û†ņ–î0:“ÛŊoÁyäAĻÚ§˜Ō˜“pÂO“žp>Ū•š/kkÍBŪŌÍ^)6-Í"“öH==­]ļĻņ ¤č1V „`13œtéĮÕ%Ŗ&Y_ß|ĸ=÷e—<ÂÜĮ@îĪ=Ī[ŌÛ\/‰/|Кy–  ¨K+Î8$dåH.4Û-ĐÍâË8XÍĐÚW#\d`p1VoåîĩX㠗KnCŧŽ\0ØĨ°™qŽŸSîŅ”ÉôĢ;›[;į%ŦQÜnxÅÁōļū=O­YˇŌÅŊĩûë ˯/Ėxæ$Čų#’1ÉëõĒG›z4QK*Ú˜ŸŪr2?ĮüjŪ­t¯ _Æw™Ëíg*¤ä8;˛œrGëA™ĩĨ$PéŅ,ÄErå2 ÉČôĒú¤^tÚiLy‘]#œļ QØûU¸ %´kÉÄ`eŗÍAtl˙´lLņfmė"sĀRWŸOa\T9ØîÚÍa´šũĐļ•üŊŦL“zŒq×fbŌj ml#ļiäšbĄōŦp’ ~lŽHÉëWßG´—ėņ[ȏ‘ØíŅļŧōĖO֙΋o šFyyf<Ž į,8Ēå‹Ûę6‘ žMķ@Äy{Uoŋ?ˆīëT>ËÖŌIYÖKxÂÄS.€žâ_ĄõíÅtÉĻ˙i;™nD˙j(T—ĖXˇŽ˜Ú3õǐG¤[ÃEyxˆcˇäî!Ÿ1ŒÜđGĄė(¸¯Ŗ(“Ėr¸kĮÛ!Úî €ōT‰RŪkyfief’ŨQpČlÎFŌwã¨ÆjũúénMüÃdsäįäWōJā€xÁūņëOƒI‚ęđĖ/%+o:ąBÃÁËė0ĀņNú掟eœ`Å4›c…@ØÁņŽŖ×$ūĐ ¸ATÚÂŌ Uk}D–čŠ9ō÷^EhÃæ˜Ņ˜}1Y“˜ũkJåē­f?ĖšĻ„gŨW+ãĮ…õúæ?˜ŽĒuËcŌš&ß j-ūü}j㸙ã”Ŋi+s ÅQ@-%( §ßZ—ŊDŸxT‚€$Zčüŋ=Ķ{¨ūu͊ę|3 Á=ÜŌĻ[ ¤`UčēUJŊ@ˑš§Ģ,BÕ8’P]p>B¤ŽŊNNjŌRÜÁÔ]Ä1ʙ,ˆgčh¤·ž@á­É\ã€SĄ8ÁúâŖĩULSe`2ehwų˛lûŸōkFtC§ŧkôŲˇĘ\.GL˜Ē ēģ+kaäG"é€H;Ÿ{ŌĶŧ­a~ˇK iÂŊ Đp§=šĢVs5ŽĄkfŒbī"Œˇ' ĪåTĘi4Ë´‚â [€åĘáAČ8 įõõĢJĪ ÷šO"4ŋ('8žŊ}úR`;MMĨwˇ’%›|Õ@ۏnūį¯éW‹ë:ŽĮ ˆ0ėc*ŧôūŊĢ-.ÛZKqÛÉq2†ōp›Ā$c§=*ymy5ŽY¤šÂ‡ …Ž8`b“:E‚ÅíØËŨ‡lĢr0@=ŗØTk~ö÷¯”ģĨ‘Āķ— Cc'qéĪųëSÃ$ļréV"5MČÛž@qœž?\ÔvsÃokŠ_J†Mˇ ‑–éבČã=Š ĶŽåęÍn †]ļË3Lņî āžę3ÛŊPˆģEj†IUežFl¸á@β0Og'Ĩ^û, ĢũĸiIž$‹“œņÜāztįŪĄˇĩŽúÃM– ‰nŧÆWˇ@'¯ĶÚĨ•bÛÂņÜëFDŽUÚ,/#9äõ÷õũ,Û ęoQäŗFǧ ōr ĪųÅI<7ķÛßÅįāIĩ`ŪĘõ'j˙<Ō[šūÂÚæÔ­äP‘\6ĀŖ8äpx#֑Ēd^e´zuũžĸ÷VŅÍtîŽß)8  ōG|ãkJÚâŌ nxāļ´i-āfyÄ ÉÁRpOCßéTîg’ĶMHīŖˇžܔ`Ō¨Hã<{1Æ}*Û܋‹ÍUWO>dvŦŊZN:cOŌ•Šæą!ŽãUK)ŨfØ$' >~|rPĘČ%sĪÖ "‚[jîō)`ˆÆgh™XR§˜üę 1ރ’ėŨĪÉŗaŪ$ĮNĩntĩ6šēŲÍļ𒠐$*yíČúį]ˆĶ€Û<“5ļIU š^nęC|Üb­G.Û͊É­Â |āƒ!mÁų;÷=FjĪD‚ųāŨi"[ĩ•ĢŒ–1ŗHHã9Į'9=ëLE›éídԃŦE"ûLūcƝYcÛģ9Á#“ž1jcY"ē˜E܁žĶ&@ڀ‘ˇ=G#ԚœĘ˙dŧąŨ›“xÂ`û‘~bn3Æė÷MWFļŧa¸ÅŦŠ$JrāG“Œœrž9Æ=)œëúwŸsiåÁ$R)h);¤Œtôíמ+nÆû>°^w„ŧî7`€ (PØëÎ3×°ÅbÂ$¸eĩYŌ4ŽÛ÷DųØf”år9ë´ė+ ™â‡Ã:”ŌŨ#Ŗ=Āķ nâ¸ävøÄ€18 c§ęjĢ\˛\ę{&w%@\1Čųz`´ņŒƒ‘č1HCI´Ø¤+Âāē+ā•2Ū>‡>ÕcČISV’áĖqyŖkyLÃĢ˜Ë{~uKrįKœDY7JæAž~mÜõéĪ֟5ôˇzUų”ÄsĒ S€ã‚w~š†[€Į¯ĻÛFû–;A†ná‚˟öG°ūU&đüĄäBfģÆw Ž¯įŊöh ÕVVy<äļ cXŗ‘’2:œķĶ' ¨í'ÚmĄŌíĨXe¸ÚčéŧĐ“‚p8 w-M%ĸę:‹,DOĢæC&~RÆ ã“éũ*ĨąÁĸr¤‰ŲĪF9Ü=I āįƒ‘ė3‰›ĖŗžÕ¯ŨŲĖk´°ų~ī^HãåÁ?…H‰ ÕÆ“;ΐ]4fE"áØ¨$ŽÃĪ9éHdM ˇšf¸°D˛Í%ÎЅ?|ž¸îyéØ Öōĸū֌ƒp—Z 畨@?tõ<žÂŗÅŠJēŒkyË4ęáüƒˇ āį#ŪϏKĢ{ÍBöKYX HU™pI=9ÉZEö™ŽtŊŽUŒĶ^ėŅqՇˇaîiɨ•meūĘĐOAD‰.L‡;~›OONzVBĀû&8Žb ‰'uķIČČÆx9r}h—kÁĒÎræe“IÂũņÁäwīŽzb•‡svÚg¸šŅŧí9Ļ2ÅšnA)” y=;vëYÆD‡Ã:ĸG ŦĢ썝­ô}–[Į%āp‚EÛ¸9\/“߀;V…­Ä’ęښĩōų+jĀ+ŠN['Ž;ņÜāqUŌĢWŌ 7+æ‘3 2ĸ3;ŗŽ8'ž:qԁLj¨¸ûŧœ×?ââk’ˇ›Ŧ$‹k uãŧ‘ĪNÂē&`‹ųvŽo_Æ÷3ŋīc‚-ŊŽe9ëÁ=*P˜  x¯$ˆ˙iœÅ´ä6ØNrČÕkGvöĐŞØPŧLÃx,\¯'Á=ę}ĒgÕ&3]…õ’PpáP㠃ƒÔđßŌĢČ˙Ú›*¤Į˸…<ČĶæ8‹v_ˇR:¸ĻId’Ú1ķmo˛ÆäæéŽFztãzžļEo‘ŧŨėˇķŨ…aÆŽĶė´XŖŽ쏿e¸ŠŒ ¸-(ąŧŧOĘ˙ú­Œ÷ŽëöÛą“°§L‘÷F'¸ÅdpØēyS\ŧhÎ,rvg{Žį#åûŧœō1NbƒfvƒrIį>ĮCo‘üķšuĖĢowžhŖIwXžRåq#æ’07wüę į €F<ā™XŖÛ€dĀíëŸÆĘ\?Úé ē,këdÆ@„B“ø`vQZN„Ÿ^jŠ\BuHV+•æœų’[pÂä{œū­q95@ŠžH&Ŗ^Õn\đĒ3ĩS˜ŽõÃ|G“ģ_W˙CÚĖŨëƒø’øđ¤ ˙Ņ×?ŌŽ;ĄKcƨÁĨĪ ¤$šč2 )(  Ī šO*<î<ķÅ:ßũ ‰›ÃŒsU ›É”>ÜņĶ5%ÅĪÚ6|›vįžhk•kˇ2Ä7 ÉâŖI)8#Š[{ŋ*#Ėäį9¨HÜäņÉÍIlŽŦà :šë<+˙ ķī!ūBšf:ާÂęNœOũ4?ŌĻ{ \ Ā­ĪJ̓ļkF.•.%YZĢYJ@AĢJ‘iÎŌ[ÃpšQåÍ÷O?CL6Kũ¤÷0†B€AVÁĪ÷NzqĶžįû9†L‚NNAc-ą–ßRkKbŪJ[ˆä…Îáßüū€iˇ2EĨXųLã20l(ˆ'•íéÁ<Õ닖ž‹PķŌÜG—"îŒIAāŒõãŠĢ mŦØ\DķG7īŲ_†PŨ>ī\qÚĸ‚ö}LA$É*Ļb/^1Û#֐ ,x¸ŅÂ"ÖîÁb”ÎķÅŠÍĻĘ,âÃɉ#ģÚFė/M¸žjõ„W3_i¯-“@ļņ˛]Hižyã˙¯T_OšM.xæĩ;^ëxrHĮ<ƒ˙WZC.#ĒøŽy™ø­#p~yũi^úYŋ˛ŪšÖ)&ĸ¸įįÁ\cņüøęCĨvĢ|’Gp‘yë#ŸģÂņ×å÷Ī į)ŌÁ&™ŠģÎpÂeOīsž3žO§{Đ_ŪMq bXU’3ûÂB[žxÎvôėzÔą!’ķK…^Ucbô'o(FNļG_ÂĄ˛š[=FK—‘ÂēgP ÜÄgin3ŸlûÕĄ 3|ß/#“ĪCWÖYŌãZ“Ī∕xÁ=Gc˙¯õĒņG¤Igo"CvÆiv… 7Ž 3Œ }jÃFˇS‡MƒË—råÄĮœđĘ@įÔP2Gˇ“P‹Isxc.ŦK 6HųÁāƒŒU’(4­jo/!.ņ€8×ĶŪļ˜mCFŽâ`…ce …ā õ<įúTÎĶiš-ôāÃ,tXoČ˜8ã.?Ũįęs@ĮĮköĩ¯ĖЍžœ&䞌üįnßJæoīę’y !‘žŪÉ]ęPŗƒ´uöųĢnWÁí’{ÖQĪyĢ3G-oÕ]ŖlTˆ–-Î0 đĨ-ĩÆĄ‚(?Ōž ÉE‰Typ[9;GãÔÖõŊ“ZjL%h\<ל0e"†îFi–VņiÖ„K”¸ļ‚Cģ<܀1‘÷H÷ĪJ’kšAŧÛh÷6ūeøl/;ˇ0PŦ# cī ĸI­ŅŧØ<ŗHĶO ĀfØ7€šāžORi?ĩmeķnKÜÉkĸ‘I2í¯ĸHÖFĪŨƒ$ g9ũk:{Ô0/Úã“í2ZÛÄČÄ—ž@ÁČ#'ž‚Ësj Ũ;ČŌmKšd÷îHÂÃŗc#øŽ­RpįFĶŦbc#+ĀKn 7ÎāŸ\éQ´“ęp\I=ÄÉ ĨĶēFrˁ‚˙ēp:÷âĩc‚ÖÖäÃ8i+ÔHŲN6•€7$į“Ķ=M0 .ÆŲ9c¸YįŨ,‡ÚT;gîã=ģ÷įž+EŸV>‘*Ü^Eq Ũ/ö| \œ’Xš9÷Ā•jšÎh^W''=j¤Ė*͌æĒĖ(>fÎkø˜ĮūuŊŌŅŋÂģų€ĪJķΊL‡í“ĻnÔūH˙ãWŅ2ØōZ1š\ŽÂ“]aƒéE&O­¤QN"›@ JŌ \P‡#ĩvž8Ķ@˙Ļ\V+´đŋüƒSŨÛųÔËaŖĒ‡+BŖnŊ+F!Ågq–PgО‚ xiķĨp-ŊĐx"™G HąųÔéiÚ<˙)|Ũģ7ãœzSœãĒtŽ2?°ÚÉ Dņ|ŽūcHËg9üÅ>;bšySpiąģ.Hã=éԞ*P:SÅ+ VF–Č­ XSæÎx#>ÄÔâÁ^;„ûLëįœ’”ã/S€§Š"•Įa­§ūũ$YäĀBĨ3Ã{Ÿ~*%°ēXŖEŊ9Y73ÎåÎJõãŌ­‰XQæ“EÂÄ"ŪåZrŗŽ-Jđ‡Ī~jÄv÷,ÖåÚ'}ĮSŽ6ņëI¸šQ#¯CŠW„m>CjĘmŦZXæŨ)ō…ČäņÃc=+>m*PÚ¸H!Ûp@ĢˇĐƒÛßõ­?2F“R'×õĸãąJ-4ũLIl áŽ\.by#ˇP81ĶvÚ_@šfS~ôU˜<•įøģĪojŧ¯Šg#ĩŒ÷Ķ"’đųÖM ¸…„­$…ÕNAۃĮQÁ1UŖĶmÂÚH–WĒĐLUeqŧÄ“ĪcŠÜķ[*DŌæ §Hļ–MJ!ä"B˛ŧąœo?1“Áęr=ÅUŽBŪ"Ķ! K@ŖÎA¸€§œõ@=9ü+ŖYxë֞g­+…Šâ&’~øÎj ŌKëxŨ,ÚKŠäX EÜ’O'orO<``õ:i8J’Kđë´ WŽnãQēˇš[vÚŦ‚Ę6XU0™‘ŗ—8#ŨŊk:kōļs5ļčÚŨ:Œ“†ķB†įšä˙Āu¤+œ˛)<@ėr?*AchA mG–:’:zķEÂĮ+-Ԗ—ŽŅlekšœĸ¯*,ķ09Čúf‹8!š!îbf’Y-Uņ1ۖRxúņ“]xļ°Vf6°mēį# Û¸āÔoobdļppÂ0Û÷pG§j|Ác˜{ØāŌË (ËÚ9y¨VVŸ+Œį¯ÖŖ¸d…§—sHžtō,‘’ŪVS9{•ĐKĻØ¸@mM‹Œ.íØüų¨˙ŗŦÖÚKuD2.ƒ€w:Ac3CŠe2‘Ú†Á# ÔŽNŌA˙&´ÛŽ)#ˇ‚א7ãpã€úp6FÆqEŠFĀ5NC€jyĩS•Ō¨ ŗ0ɯ1ø§6l4ø˙Ŋ37ä Zô[‚yæŧˇâ|ĄĻĶbŨ÷VF?‰Qũ*áņ->ĸ—åŗAn8âē ÆāúQK“ëEHE2ĨíL"€S… Ĩ$P´Ō¤h2Ėp+ĩŅŦŪĘÔDĖ‚NGŊsūˇ_´„qū§üší @1Q-tĄo(dЎtôoĘŗŖQÅ\ŒTōĄÜŅŽtĮzĩÄ^ŋĨgF;Ôā…RĮ 5<ĄsIg‹ûßĨHŗ&rW.š„Û¯.ƒF„")ĀP}sÆ{wīV㸚G˛‹Î)4Š$xÖ,į#8ĪlsIĀ|ĮHŗFˆT‚Xņ÷‡į\Ģ]Ü-¤ķ‹Čp˛mRÄ*¨šĢ†8“ÎqšTnƒŪĨĀ9€éŽ~tžbŽâšdÖ':i¸ w›d@F1žp~ĩtßH5)m‹F‰[Ë0'œqÅ.F>ct8=éÃiŦ!¨í´ˇ—1JĶËąJîUÆpzķšĩÕîpbxĄMŲI2ĮŒō1ßšĨČû™#š§ŒVZļãdžNädŽ˙šĶ۞õvÖņnü¨ę¨F ņģđę:wŖ‘I@Œô§ŒvŦ§žTžKO.BėĨˇ`ぞŨxÍ3ûj°{¯&r¨æ2ŧîGcúRäų‘¸Ŗ5*Yą_ÛIxöĢ.eK7°õ§ŽĨköh.7I˛wōĶå9ÎqČíŌ“„ŠR‰Ļ úÔŠĐÖ¨%՛ņrģåÁ$¨#=Ēäf&ŽŨŌu"āf!Î[ŒôúRqųĸXTÍHŽ WYĄÛ!ûBŒä‘… dæ­*3<ҏŒŪ§–AÍ6Čã&ž¨zâŗhŪdÎ2zf¤ ĖØ ¤úb•Ļ+ÄjŠŋ0˙.UŌ˙PĨiö Äaā8Î W;M,OĩÆö;;Z|ĪHúŠc.ÁÉĨE/Ķĩ$xožséšV,ŦBŠę|7—k#žŽøüų5ĶĀ:V>•§Ā§ŽĐOÔķ[Y–âUÄ^1Ō­  DČ)ōHYĀp ëT¯îZÚe\†m­Á=túÔ÷ŗĩ­ƒČƒ•ĀúãúŅ`*"‰,W}‰y\2í`G^ î ]RæWØÉ ‘íœsĮ­@fŸOŒČč y˛€Oo™āß1ã8ô8Ģ2Į™u9c+;Čģ6#d ÛŽFuõĒ⨋KcįHˌÉ šųŽr:vĻôk;Ų™#xŪPI=˙Ųč0O’*0›NWEåĒšGČÉ''ˇįÍ*¤Km|÷r†i$˙gĮ\ža͟z˛öĐÍhŒž82 t,ŧ†Ÿ¨īéT§Í–‘:†ˇM18VČP6œ™īĮ\Pē-ÄMĻũ%6kWnīģĮëôĒipđéē‹Į6Ų$ē&08Č'ũzT˛65( ’G­ŽâĄ˛Ęv°ĘŽ™éūsInō1Ļ‚Ú)å`Â}ŧä/@Œ_jC/.ĄÕĄ‘V&O-LŽp1ØãŋNƒĻj8œ^čnŽYĪšX2ŠlÎ(ic>!šgV*– Ŋš‡×Žj"‘ļ•g ÜēûŸ¨Ë’ Ž3͏â\×+7ÚîYm$ v>åË—§üžĩRL=ތ–ė>א`#|Į§ŸãJX6¯Ŧ;6O؊l8?¸ã>ũ;ūtD“éēZ›¸`š)Lˆ˛ ī;Î2j™~âÕãŗÕæ{{hüÛ|‡9lÔ¯­IoΞ0’¯äœHČd0ŊqíÍSŌĸĩēēÕĸŧŠ‘ã‚ú{ôé[\Aæ•hč`2åF01¸úRcšNûNfąÔ<æ`­w”ōQX€X`žŧŽāÔđāxš¯*Ÿ$! $‚OSĮAĶŋājģ›v°ÖâšäD˛Ūcp•ũæpFx˙žtĮo}i5Ÿ•åëŨ­ŒÆIwõüPŽfÜØÜŲø~Ņ&‰cš,°bFŌsO˙9ŠoZH5ÍQ šh˙r§-^xåĶ9īQŦ+?‡nĖŋdO´H€ą83Ô˙^kz+[(ĩéfä7SF7ÄáŧŧÉä`}ßĮƒiĒŨ­Ž—2yŌÄŦÆPŦŋĖÃŖxĪũjßĶĨŧ7׉r’˜Ëą‚BęU—§A÷{q߯Ŧų,¯u-*ĮcYßKėōMęSč š?ČÔ0[\XøˇRHd ¤+˛Œ‹Œ˙ßGĻ:RĢq}4^"ą…Ü gSšsÁ;O_ĮoëQ[^ĄˇÔ.guLŒ C¸įOŪíÆj…Ų‰õģ;Š. …ÁE*ë†l7cß=9õü(ˇĶî=J’ Ōī8"B„î'€FN{į§P ŗ¨j6ĖLŅyJ‰"|¤›€bëLˇÕį{¨`o%ÃI"Iˇ Œ`Œg={Sm$“ũ"M6HŒÄĄUWo>„ū­U¸°ˇYŌî'Œæé rį>b•Ë q×ãĨæÃåļ•#$x5ƒëLųá|0?{w4;æ‹Č$ÁĒSz´ĀœälUYp)…ĖۅRkŠņ^š•F^ÜŦĘ}0pBk¸˜fąu{auĻ][ÄŅ:~cHGĪ´”ėc¯Ԛ}Ģ ĸ’ŠZQÖžŧ˙…'đ÷ū…˙ü¸˙ã”ŋđĨ>ų—˙ōvã˙ŽPČÂĨ†3,Éęė흭?áK|>˙Ą˙'.?øē|ŧ‹"h8e9í“đīēđĢd €zV”+^æŋ |"Ŋ4Ÿü™—˙ŠŠáį…—Ļ—ûx—˙ŠŠåÅŖex¯cđČéĻäy?øĒwü ž˙ wūG“˙ŠĸĀx=åÂO{ |´BRIˇ8ãĻ;zÕíV"šRFŽÜ˛¨lõî3ųWŗIđûÂōœž”7va<‡Đ†ČŠ&đ/†î!ōĨ͉Oiä~!ŗG('sÍf7V_.$U}Ø .H9Éā`ķÕÛEö”ŋgˇˇŠcšYör1Œ|§Đöô¯k_øqg3.‰ Ÿ:N„įûԋā_ ĸíūÍÜ2Ī<ƒ€8ËqĶųž¤ŌåČãōŽšäŦPūîŋˇæ8ĪãúõĢĸŨ-XLP†8˜Žâ8Čįą¯U˙„Ãŋl7_ŲįÎ)°Ÿ´K‚3ž›ąŸ~´MāÜ*ĢØ0ÚہK‰TƒČęôšXQ &˛ŅU…!ÎÎ:üŧôĪņUi4ömÃiū•ēlîb 29Áč+ØSĀūŽGuĶ3‚ųÎNNy§GāĪĮērųY'kHíÔįšõŖ‘äŸÄŠ€;/ËÜšT䓑ĶŸãLs5†ˆÍŧdÉ> rŽđ>^§Ûõüũ‘| ¤í2ØbF-æžHÆ?ŊLšđ_‡îāōfąfL‚1q ûŲŒ(Y–o4‘/™[‚]IB€sŸÄwĪ5‘ š šÅŊb–į€ā1Ī#ÛŌŊ—ūmy°Žō6–ŪŲ#Ķ­Bž đúÛGn4đcŒ–LĘäŠ9äŲĪ'š9e‘ŽŠ-ē;L‘rwd™āŽŖúcŠk˙ĻXXÉ=Ī—tdųXÆ]Xî!zqéĪô5ęIá;§š[6¸!Ÿ&qÛv?„~ž§/“ÂÚ,ģ<Ëb‡*KļTûņĐQČĀōč>KũhJædŽœA?(Ī=ē}xöŠ­¤öúbĨĒ42Č6ŦŸ3Eķ€vœp9W¨ļĨē˛ĩ *à ļüęŖx;Ch­b6’mĩ”K.eXzîÉô9ÜRäasÎ.7GkŠĨÅüO $päŠ$qęOCŌ¯XÆĀøebŲD'ƒōđŧ÷Į˙Žģč|-Ŗ@ōēÚ12ļįķ&‘ōsŸâcĶzvІƒĨ‡ÅšoŸ+“ōg͚9îp &ĄakŠ\2ĨiUÉa‚ģ‰Î8e<öĪ|ņŌŽËo}}{arčķ[Ëj ( ˜ÎAEã+Đg~YīÕCŠK'‰ä´‘Ø[ų!–6P9vzúÖŨj6æ Ģrņ’#/ ፠ĶN§Ë[¯*Q5˛ã"â@ ‘Œ0Ũ‡öÜ#šN“Î{Ě]‹[E3ĨÁe“+äcváœuëÜ˙õëÕe´ņEĀ߸Ã€āŒ °Ž2NkŅŽtÛ+Č|››tš<įkŒŠ{ŲÛɝŅŸsGŗ\ķũEc’îÁ؈;š<â܌1×ĻqūMP]bæ LŦ¯K8ŠŖ`ė!ČqŒdœ?\×ĸK is”2Z‚QƒŠŪÃŽ˙ūēlūŌ.dWšÉ]”fÆ8<ŒāōįŊ?fÂæ#˛L„8ÉÚ9ę…Ė-$tŽē=O‰$ €6Ō18ú“Om&ÉÆ ÷›ühöl.p-!čj´­žA¯AoimÖ×˙"7øĶ†´ƒÖĶ˙"?øĶöl.y´ĮZĄ? æŊXø[E=lŋō+˙1ŧ#Ąˇ[˙ÛW˙9\øŗXļû&ĩ}oŒįuLœ~•FžÄŊøAāMBîKĢ­<Ōģ Š×'č ƒūŸÃĪú˙ōvã˙ŽVĸ>Cã֊úķūŸÃĪú˙ōvã˙ŽQ@ũQ@Q@Q@Q@Q@Q@Q@ĖxķÄz‡…<1sŦYY[\¤ ‡ķ§d(ĖʈB…;Æ[$n^ž3ĩ]sĮ"Õ5@˛:bIJļxÎ5 9`rˆØčšcĮMĮ`ėĨŠV i¤›i^Ij­§âŧŧŅ.IhwW9gâ ŋéZm˙†ã„YŪÄîחŠOŲŲX †Av'xá€IËp zˆu ëí{Eģ‚Ųõ}!ˆ´p\,Š^#ÎæC†6 ˇA U)7kĮu}VļÕzéŋŦČéčŽ@ņ§ˆĩũKWŗˇđå°:uä–ŌO%ëG)ĩvĢųlŌ1o1žâ…]™äķ{JņåŊׅ5moT˛}5ô™æļŧˇ3$˜’<|¨ų‰Ü tËzĨLŋĶIĩmšoŪÛEßú°)ĻuÔW+Ĩâ§ĩĶ5W˛˛KkŠ`g•)¸ˇŽBˇ›œBÁ™Lj 3Æã…˙ ‡ŒŽõ˙č6.˜u:(e€™dxe ĘŌģ˛6 ûğ—— žŦīË(éŋŧ´Õ'÷6ŧē̃šGŖŅX×xŠyŌ Xtû$$’]LZåL„°h•Œ0ōGP6õ۝ĸxŽīRđž¯xúw›ĒéÜZÜ[[Ryá\‘Ám­Æ223Žq“ŠÂÍĮš-=ēíweWįëaķ#ĒĒ:–ąaŖũíķų?lšKH>Fmōžv¯ã8<ž=ëĪõŸxˇAđ†§}6Œ5C`ļŅ×NœË#ą >nwaŸ—†ųz‘m]ņ˙ŠŋĶtg–ëSˇ´žd–I<š$ŪŦbR̎)œ1bFâ¸aķ¸åĩŖĖĶMÉi-ųSŊŽļĶutö^SΎâš[?‰>Ô5”ŌmuČdŧ’S (Gî;+´į`ķÆ3‘[úϟ­¤ŪiŗŗŦ7p<4d ęT‘Fp}+Ī>*\éá¸ü6ö3ZŲ‰bj'N”ÛiŅŽŌJĻˆ>ZĒ|ÄŊ eøz8ŠŠ”Ķģím}wôZžš´‚mĨtvž!ņ^‡áX!›ZÔÕ'b‘Ŧėä œ*‚p8ÉÆG¨Šô=Kņ&š5 "ņ.­KŪ ‚Ŧ:‚¤C‚:zPŊŅ­nžÎÖ°AdŌG˛(Üą ”ÜFĐOĖÛFã^Ei<Öu)Ę#~egĢZķs^Û]õvwĶ`äŗĐāūI$Sø–ėĩ wēÖŽ¯ 763D¯  ۝@Éūîw{W>šöąá_xwėˇļ÷ךÅÕ튖ŅÖ9Wϧœj0=ĪÄ=R/hšžĢĻ,PIŖF–í5ĻũŒŽAōÖvÃKĐ –Qļ ø{w7‡to CÃڝŒßÚw‘Ø[XI ōÎÅT‰•B?< `náFG§Q[<Įšą”4j=Zø{-•úé{ë~‚äÖį—x^ųīįĻjw>šj6ˇ6–0 =FĘÆi–@¨’EEm¯šY†26‘œÉĸŲ]ęū;ēņl–ŗYY­öeŦ71”–uīiŠ×<*žHäíāƊ/I8ÆŌ’ŗwīž›&úū¸r…Q\eQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@˙Ų Pixcomp[7]: w = 353, h = 281, d = 32 comptype = 2, size = 20319, cmapflag = 0 xres = 0, yres = 0 ˙Ø˙āJFIF˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Āa"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?đ(ĸ€Z6ƒ÷ õ5ŸZ6ŋęņūt=R˙¤8÷ĢŊęŖô™3ë@#kOŅgžˇ#"‚p7wĢŖÂˇ]¤‹õ˙ ÕđęãIƒņūfˇ{VW(ä…nĮņÃųŸđĻ˙Â/y×0ŸĮ˙­]ŠZXŖÉÉĸásŠ˙„Z÷ûŸø˙Zø^øsåÅ˙}×}ŗŽ”ÖJ.Įs‚>ŋų~Ž(ÔfãŲ—ükŊHķS„tĨv<ėøjųOü{ûéƏøG/ŋįŅŋ1ū5č~XÍ;hĮ担Ī9˙„~đũ’OȍØWG­¤Įū^ŒÕ"FéJėw<ÛûčrlæĮû†čˇí§öÍĢĶ„c*T„Ô]Žį–cL?åÖ_ûöԟŲ2°H?ā-^ļ2*Ę[Œ–•ØĪūĖ`0cqí‚(ûüM{JڃŽ*QhŸŨ•.f 4Ø{ü~ĻÛûßuîÎ?ųæšúSÂÜõ…ÕE.f3Å?ŗ  €ÔÃĻEœ€1^ŌÚ]›đmaüPTmĸéíÖÎ˙lÅĖ.xęiáGãJÚ~á‚„âŊmŧ?ĻųqƒūøÆđ֖Øb‹ōĨÎÃCÉŋŗ`€=éO 0I#ë˙Ö¯U>Ō›Ĩ \˙uˆūĩx?KaūĻ@}Ĩj|āyOöt`õ §§ŸÎŊAŧ§āāÎŋI VY’ÜŖ˙õ¨įÍ~ÂČ'4ī˛Žį?˙Zģé<~[™Į×Ģ7„v“˛ņ‡Ö0iķ19ĩA؁ú˙õŠŋc~jėĨđœ d]!úÅ˙×ĒRøjí:I}AԘô9ƒfŨyüÅDm9į?Ž…ô+ÕÉōâ?IõĒī¤ŪŽļ¤ũ$ãNėFw8Ē2!i–>įē7°ģNļ˛~ Y•Ėgí Še˛:cŊ\Y2]KBŪ3ÆîĶg_,üŖ> ŗŋ2!$|í\ ō™¯ōĢąŊĶZ<Ã˙<ۊĩš}hĨʈ9z( Uâ֍ˇú„˙=ë8VŒ@ŸJ˜}ęŦOúKũMX^ĩ]š™ūφ4z‡×ū%6ãũŸë[ˆĻ˛t0JĩôĖVĖf˛ˇ4ôJQČSÔPŠ fĨTâœSŦxœF?7€ŒRŅÅ(Ž EHК|p“ĐUČíORq{U˜á´Y2^Ež=Ø2• ú`ũjŨ´vzmÄpî_6@ĨüŅķzāõõëīH Ô1Ģ” 2qGĐC§ĪĀ#šŦi„Ģ5üōŦąĀ°Ĩ_Ž9ČÁČũ*ŒfléĀJžBŽøÁ›͞ŋí vĮz,JnQ˅āķŌ„ŋŒ{æ\OiŠ6ŌŦīŌFĀ=$tĮ…kAę1<’J×Áž@ŲŽ„gr}{Ōh ]ÃîúŅÜĮ§ZįR3u§Ų™înķ ŋæ9Î\˙:™$x¯ĩyc`J"ã8÷ uÍŌšāsšĢfŽtØ ü˛4{†[vŌFz’sÖ°WP™tŲļŒâã ŧ•ÆG< pxōĨaÜîl,+Qø\bšDŧš˛žögĘ[Ĩŋ&FŪzrN?Göô—ē0YeĖĖėK H3ĶíJÅ\é•>a“O 0OzæĻÖ.ÚĘöâ)Ŗėˇf?˜d8ÛÎßPzõã5,zÔÃU‚;‡h­C´MrÅzžrxĀĨf;›RsPã#šČ›Vģ–ėQ>Ņ%Ī–éģîŽōn  včM6-fVk힐ōōÅrO1#Ž}¨ŗ Ŧ;ų­UŒ,õ‡cĒÉŗķ,†X ĶIŋˆđ…°8Áé×"Ŧ?ˆQ4š/ *Må¨ÜeĀ!˛29SŸŌ§P/,G>•*‚8ĨŽėlų{œô¨nnŌÚ&”mHÁf9ÎīųT1čqA\ķYۑ™omsg›”aĪ—ŧAäF}EOģfŅDįxķo#Í8_ūŋĨÍĀ!IĀв$gįĮqüéˆtƒ"Ģ0Ĩûd /”į,ĘR9\gˇ¸ĸOQTI“95›*kVBâŠJ€uπș1šÃÖŋäz?鄟ú Ž’tDD3*îōËtcÁOaĮ¯Ž@ŊPOmcpļŧšpw9=8éU mĶīļAmĮœb2•Ûŧ $āži\ č#HíāT9E‰Bœc#uŽFŌIJ‰aF‘ā~õcR§ pAį=ŗŠë™dŪ\lĒč€eÎ1ŠÃŽ+‹ôģtnM°mĪĶé֐Ëčŗ\Üë0Äą˜ã 0@Ũ€3ķqĮ—ÉVĐbhÚ6Žo,€H%IäŒČôõéPÚŨÉe{ŦJy`ėg9įŒúgą÷Š­ã‘5Ø]› $Ķ2Hå?vGrAį?{=ECîėíFŸq-ŨĩÅĄyJŸŗÜ,;°xįŒ}9Å>ö(äŊŊ“ÍûIŽŨ—Č0@ 9œ;ŽÜ÷ĒŲũ¯C„„Ž9.K¸oŧvއˇCÁĪ•­rtøSž‹\ˆĘĘ€@9ĮOL;{R™ ˜šƒJ”›A"ą%d`Įa9RI%Ž=zūTÛĢÉgąÕÕ÷ČTDB-Žį†r=¤)o´`aƒ3˛’2Î~lú“×ŊGĨX.ĄeŠÃm>Čäš$bÎpŲéīßķę,/OŸkĻŧJ#{,É˗leO íĮ9ÎO#Ŋ71Ž—m'Ų4ëá5áɈėä°ûß6TdķũkTiōÚj 4pÆļąŲVPŧ6ėž1žįĄĮ\ŠÁ˛ŽĸčÖ÷2˜ŽC*ųB`ėŒdŽūŖ§#4-§¸> ÔŖ’RʈÕ'h郂:õč}sÛ ŽJŅč×aĖ%-ŒîãúÖŠ†0fu79Ø(ãĻqÍVÔ>Ķ™û.á#m,{đ3ĪáŒŌžĸ11¨Feæt7唆ųX_”ũā8įˇ5g뎉i§ÂbyŖ„Yâ 2”_˜GŠ^¸Į*ĢA Æ×*%Kt’åäÜFėėÆrãķ̟jHnbRÎa[¨>rŊ–„į9éL ø¤Š=9ÂBĨŜÆ#÷Õ˜ön }).QŽ&w"Ëpƒ.ŪXĮsÛŽâ{wŧXɘIxÖŅa `¯62{dãđĮz]KdōgîK8÷üqN•q ZFņ˜ŸtGËÜG;Į'ųՍŦâšuˆŨš‘üņûą°õČĪ|㐠Ŋŗb…Ü[=MgZ¤ËĢÛ+ uÛÃTČ1\ņųŸĨkʃ&“(ɜ~5UÎãW%ÕV˜Ĩ‹­Įķų`˙ú ­Ų˛5ŋųßúw“˙A5HLđęJu!ë]BQEŖĨ-4S¨E]#Ф:ŠēÔĒ X҆u›oúę @†Ŧč#vĩn?Ú'ô4žÅGsĶ­ÉĀ­(N+2‚´bŦ†_FĀâœîĀpqëPÆx§ą@ Ôeō´÷ûÜŠS‚85“#“.”ÁCˇ–\îcœĪ'üŠĶՋ=Ņcy ü¸E$ūœû~5Ÿo ĪÛėęĄR#÷#``€ õÆ8 DZ…Ô—lĄ ÍąIm¤c€xüĢNeRžâXäXŌ'˛ģXdĮ9éœä ŖĨË4ļlž—Î;Ņ[¨ rrx<Jˇ$Ž×ZŠ]Ģ Ŧ§nvöāōaøĐ2Eš…ĸĶ„vđŦrKŦŖ Cu\w䚈]ŪKk~’ø†HÄ`ŽĐNārN23_įLŽ5…´¨ö€ėí#y^Į§n}ĒÔĐÁũ—}–ũū`>vÁ ;oJ@ģŋ´´ĩ(0–Ęxä Ąä¨Æ>žÕbęŌÍ4ų!‘ŽvÉq–Ø€ÅsĮŒ|“뚆Ė×@hĻAACöcëÂņČ=ũ:T Ŋ°š=>9^o´åƒ\îlcŽ]¸éØõûŨŽÚCymy#!H­T… Kå⍈.3’NAĪQŒT] [>F}=Ū}ŌHÜ1ŽIúŸķÅk+_U–Dą˛čÆsÎnGĄnj’ĮÚ#+IJÜ"p§÷ Œ“‚_^œŒmßę}UMđÅåæ6V–_—ûŖ¨wéŸCIm4+'‡ –Ũ§ ˙4Šxlį{Ÿ\RĄp$œōEPÕ⏒ŨĪy”Ie^>PFyãüö5Š H ’ ęŨdž¯“ËUp¸¸‹–ČčãŒãŠ+q™WSO¨¯—„YaģLHFÜĢĒn?†HúõĻ%ĖQÎŋjH`’ĪųaĎ-Á;ˆ<œąžÅ9íîíô™-´Á9Ūë´+<„Š ŖĶ°=Įpە´kķ2´ŠÉy3ĘŦ88 Ŗ99äf˜‹L—ŅÛęŠu 46Ás÷•rIMŲÉ8éÛĨeŪ]2åā„ËÛŪ>TųĆM¤qС×ķ­4€aoąO-ĄK4  œœp@Ī>¸úV9H͏ۖŪ+„kgÎH9&}ˑģ$ÄwÆ:P„ĸļ•.ŧáķ˜îå+÷Sāzc‚=~ĩŸlīåÃÅž5KD˛ ¸äcœŽ?*ÖēŠ1p Í™žåä,„¨Äx Šę1­go‘.ö¯’wIkڙ\m' 1Tô’Ņ]ÚÁæ™PÃ3erA>fwĪQŸZÛeÎxük3EFYjÄĐ}œí•W’䟧~=ē֑$6;ãE9fŠČ:քĀU Išb(Ę@Ŧ=}Īö%ųôˇ“˙A5ĩ.qX>"'ûQ=Ųßų¤&xÆi Ī4Pk ČJ(ĸ€NĻ͍ËÔ}jŲĒ‹÷—ę*Ņ )Å^đ⓮Cíģų §šĶđĀδ‡ŅÔËbĸz4qZ΃ĩ_‹ŠĖeÄíTu‹–†8cSūšöíŽAéČéWPŒÖV ķV‚üÖhČ/€q€Tņž?ˆgō:ãÄhkSũ›OÜ%(ä¨]§æ<Œãšã5]ŧzą‘Ö;`ÅIΧOJŸX–Ũ,Y™‚ūé°Ų>ų•R žÕ­ŪųRÆâ8ž=™Á ė{uéHci.ėtį™–K•Sō™#=×ĩ[[s&¤mmĄgPšmĄŧÕ đFGķĒqĨÄ Ļ[M‰„á‚,Ą›š$¯ŋ֟$vņZ_Kovę Šqm xÉČĮ'‘Ž”i‹ GIYcBĖQWîüŊúS īk¤^\FYŽŽ„-Ķ8-׊íژĖÂúÄ<íElŽîʲ…ËtõÁŸâÛĢģ6ĶāŲ 0<“ļÜGŧ‘€ôō;vĪ8Å!›€^­ôÍ$ĘöÂû° r>¤œgÛĨUąēž=7IUwV’l>J“´š9íôæ¤kiŖģÔŽd• `¸@AÔäņĪĶéL† %“L™`8´Ž#ī'=ĪįÖ¤ öŲËĄEöqō¯šėĖŽNqōįüū>Ö×:†ž°ÍnʖØ9BT€ /Sͧ?S\=–Ļėō.n]Pį?6 įĮÍØgëœV…ŸÉâ Ū.ØėA'ũŦũEK.({‹It{F˛P#šëeW ‘ƒÎO§lķÎxĢ“$¯„b% M˒‡;t?\g띭†‘æ\\ŗ™ąŨļ[ylîüÁž*č*$Õî¤û5Ā-,eՕŨ×Ķ×'…#Tˆ‘ÜčD´;"á°NĖį ŖŒõīTâyn´ŨNņ¨kÆĪÚrŠŖ Œ0ëž:˙]x~Á6ąbûäŽåa –ŅąØwØÁëÆqíTⴟRĐĨÅė,JŧüĒ9é‚9zõ=PírK‰|ĘĄQŪ;…/ˇOį§nÕĩÍúØč…$É{˛ûÛnō¨Îīž>•Ģ%ÅÅŪ¯fcˇ&ō؈ŪãŽqƒœãÛĩeËg5ščvŗŊą qŧyAˆ2œ{žO<`~ŦÍĢ3Jq¤ČšÜ÷ĻéĶË-ÖxH†p?N•r6¸ŧĐī"‡÷ÛÉ}Û7!ã'“ÔvėzwÍēŗK]'P[i-ؙ#g†BSbn$dwd’9ÛĶ=G:R‘=õž‘,jė‡ōūxÉR¤Š9Žų=L“uW0€ę㠞9íYúŒĶ­Å˛Ã•V¸Us×åÁ<ÕĢ sahą›ŠįRÛˇĖ08ā8ĪãU5y^+›FˤVy_b¨CĮëëÅJÜlĀ1Ũ>•Š70›u  `eĨŨ͝~ū‡š[:id2K!ēuLp0¸į‚F@įđô6´÷E4—RīK[5ŪX†yą ܃ši—/:Ė&D-¯ H‘Ŗ„Rãk ÁõäcÖĒâ'„´sÅ5ŦÄÛ´öĀė'*‹Ā}ŧ.ww9úUY$ĩ›MŠęxœ4ĐĸIaKL8Á9ÎIõčEXģ€6­8ûMŧ‘Æ/ Ɯ‹mģ1ŒtįŽ1Yž[^ZÅ<öíäŨGc,-´dąbW ŲõĀëŽh$ËĮ4 vņyŌ]ŗ1Œ€UX°ãŸnĩČŅÜÞÖ`|õØC­„ÎpsŽüdTˇĐIsåeŒ[ŨÆnr'Í*@ĀŨ“÷~¸`÷wO”ũĒE;7?šÂ2§SÎ;ô=éˆn“.MÄq­” ^ƒ.ĮOlV“}Ēļ— ÂČÍrŦėĐŠf%†íßĖĮšŗ!ųđ:Đ2#ĨPœ`ZNr„Ö}Įzh įį>ÕĪøœãÃڏũ{ŋōŽŽAĩ îMs~*ņMę'ū˜šĩš/cÆM+ ČJ(ĸ€N‚–€Ÿ}~ĸŦ1æĢĮ÷×ëSž´å­ Ží]¤gųŠČZÚđ˜˙‰„­Ž‰ũjeąQ= ĀĢąŽ*šāUøûVc,%fÍũ˜Ú´jҧÚKŽ]>öá‚`į̓ZIŠĮē$ø†ŅZ>‡*@ÉčN}ēcđ FŽĢåJ°C,ŪVdm„äāŒ~ĩWr\˙h(ŽØ›ËاxÎzŸ\Œā~tŨMc{ģŸœĘģU˜ã‚9šįü÷ˇ}r`ąã—NܨiįīzŸäĐ0\-ŧVÜC”7+íÚsœ€FsČĻKąĩÔdŧŽb–męRŧnŽāäU´´7SiōÜ“d9‘_æ+œã'8ôéURI´ũ1ŲKÂōŨŐ\ô8Ŋ:C4bŗ1ji*ÆŪTvÅ/¸į=2N{˙õûU ;XÛ'›%žeÆÛˆÁķzœŽÃ§zš%bí$|$0¯…% ÆqÔäūŧpiŒŸh]­Ä˛ ”šwKa€äqëŽßĐĄ–gŊŗ¸ûbMæŧP…RĄ”,„䍧9ĪäBĘ^]:+q2ÚK xÁ\€On:`ÕXÜ[.¯1HŨŠž[ģ˜c|T‹‹Z ąĢ$vÛZÔ.FpĄ‰į¯lc#4€ˇmeŪ—uÜÍ"‡Ú덆Đ>\*Œđođ§¤a5{ĸ˙2‹"w2ãqʞˆųk5Y­´5ˆÆĐŧˇ|GŒ@gœ÷.ÆˇÔcRģ aŠXŖ!žP¤ÕI;ēwÁüęYŦv#ˇ8M9Ab%bNW;ōã͍ô Ŧé<jjÖīžë $ŠÅN e? 'gŒg×§Ņĩ==^ę7’HƒfUX‚rŖúįķĘ\:Kcu-íŧڙc1ƌ Áߝ#DjøėáŽ7$ąBŦņG 0Æ1Ø8Į=ûV#‹)tk&ŗŠX’[Å Œã!X2N3žqZNņEŽ]Ũ¸Ã Ģ#0ËãķĪĶœŌ[ Ķ´„ōåˇ_´.'ũáÜŒĀ˙LzŒRØŊČÖ[{ģũxą‘B<Ā"e`6āãw zvęigM5ĶI°ō>ĶĢ„v”Ŗ„ôÆsŸaÅZ:tˇĮSK‰ÔĮ&Ā‹ĖÁOĖ`6ņíßŊI˛Y]éēb"´+n¤‡įžŪūüņȌäeKŠ\#Pŧ[†-ezȘzŽFqžĩŋäÜ?ŒåíĘBļžX•›>a¯ã¯r ëXZVĄqeáųϊ"ZkÖS‘ŧ ¨ėNqÔū‘œ×Nŗ3xŽö3<Œ‰n ÆKįo Æ}Ãw\tÆG§ž?Ž-Fyl­'Pî'ÚĀå†zde†:túT"Xõ‹ĮiXF 8Q‘–_lgōüę++B֚™,(™Û ;YIųyöäw¤2ÛLgģž’G2Œšvāî#ž21˙ë#•'Ō –XŖ(­…lī< ã_ZŽh¯ĻĩŊ[¨ Ēģ (ŧî<į}:՛yžÜØ[l10…XŠP8 Ī^˜īÎx¤2ĩĖqCŖj%'2†˜ܛ1†íĪץ­&ˆjûĘ4‘m÷ųĨp䀎:cŒûV41ÜŪiwļļđH[í;Ëîāįû¤Ÿaųū'p\ĘڅÜMæ x cÂ`îÎ~QCŧō\izbüō™YäÉl.â¸'ŋŸ9â­ģE-öŗŊĘlpčqÆ2ÃđĨŗ´ˇû=ƒ[Ŧ1ų›‘îAœüŸ(9ÎO5PÉt𗕉 Jĸ=G=ČÁā÷íøT˛Ķ7, —íz|ņ¤fŲ`Ė 2~LsųöČúwĢ,Īu [ŗŒËxļ¨Č=GCū~ĩ k āG`*J°˙‘ø{uĀÄ:s\i:`ܗ;ˆiX 9Ā#“ß§­IĸečģÕö[Ā.!…ØÎđ*;ņ‘ģd ėįN‹Pąš];ˆĄ7´+ €,|Œqœãôõâ™=ÛŨļˇos<âŪÜ! ēãlsÅM‹ĪyĸI;ÚÛÆĪæHā7 ‘ëôõ¤W1^ ģ‹uÛÕh÷›¯- .F<ÂGü ÛמMŊĀj–÷Æĸ8mÛ÷#V ‚3´tč?cÔöāöĒōĮ¨¤1Å4Lß`‚õJą ĘĮ8éƒČīMYkģĩķ%ÃJîä*)R7cŒpjˇm‘'—’[ˆ „9ķ3#npÎxĪLķLE{™f›K-xkÛ\‘ÕL¨Q´m8l``ãēSo]_ÍĘė†öEÁGļÜpC Š÷^ęĪĩ]ËqjŅ$)!eČÆMĘ~SĀāgŽqĮ\U{ÍNŲü˙Ũ˛ ÷RDđÆ1ÎÁœ “î?Øŗ•áļCm€gˆfa†`­ĶĶđ9Ģl-‹'Úc2ŧ~øŽÕ Ōö|g8Ā Œ}s œ’ų‹ŧ0ÂLŅ@[8īÉ#Æ᚞ŪX“ 7.|ĩļˆ…sģįĄûŨ3ÎzzŠlÛĮž{×D`ĻāõčpĢĪ@ŸJŸ;#c›Ŋ7O2KöĮwwCu Bī¸āqaxĻÜ6[hõĨÔe)Né¨= ōjĶ'ĖϘō*„gI5ĘøíBxFû‰˙Ą­v2\Æ<}ۘĮū>ĩQÜOcÄú҃KŸJBIŽ“Áôĸ’Š)E)GQ’Œ¸ĨTfûĒ[č3@ ß'z`qŠxĐÆH8ŽŖÂ#ũvķĐŌš…S]G„ŽÛIOŦŋĐTĪaŖŽ„‘ŠĐˆäUyŽF1YŒļĻĨ‡&ĄJ) Ģ'ŲÛWäy‰#$œįüöíYŗ$–Ú\qžQžbÃĖa’ĄÎAéū5<ŠkũŽîŌ;?–AV  ^„{w˙&‹]Wm•œ‘/ŲÖi„mÁūÔÄhLÛ.î^×]ųX(d/Ldr~œcŽŲ5NS }*{Æ>`bŌ88wôЎ “Tŧ"€•Ü…NÜpĮéØŌ@.Z -ƒDc&I¤ÚÅCĒIÎqÔâÆ´Ŧ–Úœ‘Ú0ŌÛ´n<“Ÿ§§ņĢĖĐ …[•yĩY äąÁ°û§§CĪ°ĒąŪÛZiw2ZŊÄâ'ļųœđ>RųõĪĨZˇŠéĩi.|ˇ,ą•ž@€žÕU>ŲŊš\ę) Í&*§Ėį€Gˇ§ãK-ԚäHĄ%“`Û.Ī$v˙õR–’™ĨŌ÷Ž"yAl,F$‘Ôō}jK›†mũØC ûJĒ2)Bø`ryÎHÍJ–ŌG¨é•ũäVĨKĀV،ãôĨŊ7‘i,×ūišųJŧmÆČÎx<úĐ2ĮœŖ_ģvgÄvF2šã‡ŋõĻÂAĄyR>Ã)*Ŧį’s€I9öõ<Ķ­‹>Ąuuą[4p‘_8ã<ã3ĀéųŌÜGqvö fĪ[rŽžAcšŒdԚ™÷(×-¤~[oÉčĄņžƒûÃŋ§5ĸgXnŦ!XˇŦvT@ЏŒ3“ž>œžšâŋû›ŠÜڕWKĸŸ"ƒüCē3ÁN—sâ ͤ¨ŋbÚČā Äd{ƒÛ×ĩHîB–ˇÚ@%Îé.NôÉ`2ƒ¨ ŧtížõąs36ŗĢMˇa[B‹$Dącž1ī‘ŽFN8Ėļi?ąŦÎÖâ%Ø –ėNÕäÄĮįķīWØOkŦ¤RM9ŽJĘŅ  Ÿ˙ŧ;ôĀí@Ķä^†AĮ˜YL‚Įx8۞Ãųãŋ%Ôß`ļÔg[ųœģ¯Ī,f3ÜsÉōŨ‡~œķfĘÛzh˛ˇhĸ„ēFΉT…ä7Aßük7ÉĶdŽâ8õ mR9‹:2Įå’8ųĀÂí=0Äg´€í,IB]ˇ(>§zä+Z™Mᔆe¸fĩVÉãkHÄcĐü­šč#ĘJœF ŽnîéŖÖ%!Đæ{HÛv PY‰ëėzÔ dˇSĨŜøŊ™âōįsE“ Y0@9ÚzƒČ5U Qy˜$I ]ą“~QP,[B•<‘€:dcžj ĮΝæÛ[Í:dXđÁ‰v›œí# āķŽŸZŠķmÅįú(˜/›q#°9ųŠcĄ#Ôã°ĮjĢ­™!‚ÖÖ%b#´ß7™ÂŽėōč8ę}\[[̉Ŗ‘Ž.Ė2u%TĘ@ÁÆsƒŽŧb¯C¤_Æ “÷ǰˆĐŠûĄyOa×ÖŽAikˆbxūÎŧÜ#4gt§§1Ëc ëÔĐĨ”+xÆ)3ËųžsŽ]aåāämcœ‘‚žĮ9á-íāVÛåCd—aŒœąČ?RI=}*ū Ëw}4ļĪIܜ#ša8î29}Ē„ļîąI("’Km•ČĪ?^´†%œ‰öc„Å™eČ,['{däö=qÛ5!$žĩ-´ŋhļIžoŪešĪsīS,CĐ_+‚Hįƒ WeĀŠŖ3 U )JF3\_ÄG˙Š>ėíū†+˛™¸â¸oˆÍ L=eŒ~ŋũj¸î‰–ĮŽQŠ]ۃĶ]&BãÜQIE^yĖ~\y-ך}ˇú?˸qŽjœy2۞1ŒÔ—7?hÛōm۞ų  î#{É °ŽäÆ2N*5‘UB†)Öˇ‚Œe3“×5]†d-Į'4øãhŨY†ękĒđ¯.éŠūBš–:Šéŧ.ŋč˙]Oō3Øhë-Ū´#jˇ#­hÜVc.%Nĩ{ÔëHfD0ÅG<æßlf/˜•'yéœôéŽ=¨I•4ël|ŎKŒ(#'==˙úõ`ÚD5S3N|ųchÕJ09˙9ĻAgĩļ_ļnˇgōۖĶ÷Æy E†ŸRh/ā–ß!”$EäsÉ#ÛķīS#ŗÜé6nĒOw†lÁ3ŒŽGųëI-‹<—ȡG˘)TÁH듚KXÜ_XÍį@čąWŨ–s´ôãžsßúŌc(ÜØŨAĸÜų°HYŽxŽ2X•ųyņƒÎ? ŧ“Ęu ŧL^/˛ąUäuÁŖ>™öõ”[_8Ē]"Ü ‰Ü$$ qČöũjilĨ[ëûŠR8’HJųˇ8įOåJāgÚG#C¤ˆˆÕՋFŒWũaúëÔTąËëĒ4‹(€¸f(q“€w}sØqךž9dŒiööÎJ+nÆG' Īŋ˙õ›=ÅšŌõ† 7ųā0‘ō oÉĮ'9éŠc/Ã,#UĩĩŠ@ˇ %–?œŽŪÜ`Žp}ÍEä[>ļ/å}§y2•R1ž8ôũr"´­"…v\Jc]ÎŖæ ‘×ŠĀ…öN–™{Ĩ;•IĪQÉüЍöw2]j§ėįĖ– ķ´8ô ޏãØūum.įŗ]2ŪHœÆw‚å˜Ŋ8Îyāũ3Q}§šēĪæMUAæ9Ęöģô:ÚŅåŧ´‘`ōí-ą~øīThúcœ÷Ü hŦīuĒh—(ō[ųŸi’ÛB¨ pN2O>•,’ų>%™|Ā€Ûm\lĪäđ:tü¸ÍŧŽÜhÄC<Ī—-÷Ø.âTq¸ŒöĪŠæĩÉĩ‡SÔnM÷Üī…ĶŽIĮN?ž) [KÍNQ¤eŽFų3!ōsŧo*UˆRĒķ“Œö"ŽB—vUšKqoŋbĀcĀōŲĀĀ'¨ëŽÂĸąÔāKm1#ļ1­ÃļXpŲÉúįœw=Oz 5íĻŖ´Jûރĸ•Ø ‚ŲܯĄã9Ž04Ļŧhušą#Ĩ“NU—•"Čāã’;S ŠŪĪG¸Ŋ{{‰Ĩ–ė…až pgƒŒöčj[+{WÔlĄž)LņÚ#€1Ķ=9Œëím´ûŲ,íġą™p*mÃ#gn2§Ķi‚“]A´úQIE´â)´´íƚ)q@ ú ė<0JØúčĨqØŽËÂüéÃũķS=†ŽĒ*ü=*Œ Z ČĸÔue*a+" ÎqRŦI‚6Ž8Å"TĘKc°Ē‰ŧžÅŪF cœP--Ā@° œ ~Ÿ™§;SĮ֕ÆEö+vYTÆ1)Ëō~jė-nÖÆXėōķŊ‡ËĮĄöŌ…§€TŌ¸X†=Â9’eˇBčĄQœn(q‚yOz†OÛIo4.ōbi …˛2 ô8­‘‡zw˜hæ  aX¯qU`đüI”Iq [iDƒ'īaŗĐgļ}*ŪâzS•Ũz.; 2˙§Ÿ97]í´Yę3ƒ×Úĸ}.ho`–ŪđėŠ-‚7_—!vƒŽ;ūgÍsԚrˇ­.aØÉOÜĻ•öHî"/įųģŠ¤cĀ=kF]?R^!ž !™ "¸Û´ßöČëĪidĮJNEÃą˜4YąĨ¤Ûɰq*ī8#NîũqõǞčZœßnڑF^ᧉá¸([$›åāí$đz×BŽO<ÔČጿ—0r™ßŲ—ņëBō5W‰-‚2rĪ“œÕŨ=&[D76‘G;9g¨Qœõ8'œcŊYYûfĨYAíÍ'+…ˆŖË# ¤øæžöéÁ~ʏ&ä™÷ásíĀ éžjĘ\53߂¸•Åc&íī'žÛ}ž9cc6t\’zšëXŽZwą•UaL„†ųōxĮ8§ˇN+Ēķ S€­>`ąÆO ÜĪ<‰§ĘˆLĒǘ 7|Ŗõã͟ƭÃĨ]ĨėåÜžĶˇjŠ Ž Ÿ×§\’¤}xz 9‚Į&ˇSY[@¸Č‚Ņ]Œdįqc úƒījĩʁĸQíåF6eŧĐŒŽƒųšé¤”ˇSP1ČŖ˜,W„9‰|Æ$ādœr(bȧŗ¸]ÛÉU)ZĻ‘ˆ1éTæn R\ ךüS›ū%ļ1zÎÍų/˙^ŊáŽ5å˙fÚtyéæ1÷Č­aņ->Ŗ­.@č) 5Đd&ĨsëEMŽ)„TŠ@)S…>y’$ûĖp+ĩŅė͍¸‹vūIÎ1X€IzōÄkúŸōk˛…j%ރEØ% ¯ëWã˜tÕ(—ĨZŒbĄ¤;—Ŗ¸^ęjĖw :ƒTt§Čū\,è™ũ*yPųqŊ=fL‚ūUÍų×bÆ Ķ<Ÿ.pĨGĻ ˙9Ģks1ŧŸ÷ĒRÉ1€sžÄņŪ—"cĄ[ˆûŸŌĨĈ~UËĮ-ėđĀĘÛ7ž]ĐäpØĮ'§ãŠģFĄ>ÛŖ"ū¨v{ķžÆ§|Æčš?ī _9{0Ŧ+ĢŲâŋ´ˇAY[“ė1ŸįC^]ÁܓDĨc`#!ל`ōH<ƒK“Ė|æø•OņTŠëë\üwW^}˛˛nI#.ė#$´œd{ņԐęR}†[†híļĘP‰›#ļGŠ˙"—ŗ}ĮΎŒ0ėGįN =k_Ŋ*y$W:4D¨3ÍL„ÅcG–ūzXÜHĄ™H‡k‘€=žJĐķĄisK4kšÂ&q“€O=Š8H|Ņ.ĸôŠV0:Î{ø`ĸXŽŽ_b)Q‘îFzUÃ5š$Ī%ÃĒ›œˆŲ€öār}‡5<’h’ļŅ֔íMŞĮ ŪnR` Ų#°ĮsŌ™öÍ;Ë2BŒ1RĖā.GQ“õrĖ\Ņ'ČÆ9§nĨŖJŅ,čdQ’†@úS|œŸ–EeŨŗ*ĀáŊ>´­0ŧEÜ1“üé23I˛6.ĸpJ ° Đ{ŸJgØÕ°Â\ūZAxpyĻ3|¤įéR›F†•FÖōâ•÷`÷{ÍëQ˛´CŽ3UÜIžĸŸŊØ=ŪåYâŠĖ˜­ČûÃ5Vg'iôĢN]…§sė¤ōkČž"MŋZˇ‹?r ūlÂŊ‚ûsÚ9¯ņž{¨×“ÆžD¤G+gë[ŌŊõ3žĮ#INāz搚é2Ԋ2}h  ‚Ũŧ°û€ã$Õ\|ėīK›\yŽÛ;ZtĪHÁî@Å5—gSJŠ_§jHđÃįįĶ4¤˛ą ŋJę|9—fîG.įōt°äÖN“•§Ā„s°õ<Ÿį[PãŌ˛c-Ä8ĢH*ĮJ´‚€&^IĀËŲ<ĢIiaŒœuĒwĶHŗAŒÆĮ÷€€@'=ēÔÚĸŧļMeC9ælšëøRš8ŪŞâ@ž õČ9Í6<Éo¨ŧp–UP¤{Œr3üĒÂ@‹Ô$ö[‘ĨÆ~QÃ0œqŒtũ@%¸E֗ĘE.SÍ\āĒ’ũu䎾âŽĘ/nā°ZĘ&‚厯åÜOôŠ‚ûėîڔVVņÄ_:`Äî^§#gß§jB4mĘ}¯ÃÍšW6Lģ¤MĀb#מœÔocc.…¨Í-Ųē„\†slá˜(ā†úœŌYiŧ= s—úuÍļ”ņ…]‰vā €vŒøgŽÚŧ[O3^˛ļļXĨ6𑎒¯ōäņĀSķuĪz’ĘüGeŖÛ¤Pm˜ųgC/;H¤N8c5NSëŪEŨZęŅāĒ“Ën Žv‘ƒĮõX´ZeĢŲŨ[Ũ%œÅÚD„Hė7nÚŊpFE.ëëqeb×Jíļ)#rMšų‡ŠÆûeĘŽ{Ų–&K„g,U׿VtÉ0âēĢé šĶ'KŪQˆŗíā•ę{uŽj[5ķš’A=Ė"9 65RŪŖ‘ĶŒæ„#vŪæ+ȑÕōÄØFGZITXpͧë  líÎÜÆÛxĪą­l<ų=h°îE/JŖ/\Uļ`AĒ’õĻ(OŒöŽGÆÖ wá‹ŌÍųĒ} œŸĶ5ØĘŧVNŖ¸ŗš,ˆČ~„b­ Ÿ=ŌSŨ<ļ*ßyNĻk €ĸŒQ@(ë_^“øy˙B˙ūNÜņĘQđSáč˙™˙'.?øå|Œ*Xc2Ė‘˙y‚ūuõ§ü)o‡ßô/˙äåĮ˙Oā׀b‘]42œƒöÉú˙ßtāöęV”"ŊÕ~xAzi˙ˇ™øĒ|;đĒôŌŋōb_ū*Ŗ•Œņ8ÅYj×ŗx`tĶ?ō<ŋüU;ū? Đ7˙#É˙ÅQĘÄ|˙,‚įUA20ˆ ĄJ|ĖrpG=:r˙Zö¤%Ť(v‘ nAÆ{3ūzû‹xÃ.m3 0aûų8 äH|áâä˙‘ä˙â¨å`xUÉōšîY^@v(Ûō–*FFGˇZąk­Ļž‘ĮÆq#y˜'Žr3ß×ĩˇ<4ü>˜z¤#˙Bχūf…ŋŗH0ũ͡ŒqŽÍĪãK‘ãI­ßPfŨ´#ÚB̀=\ČīZšqķ,mŲ•T˛î Ÿjõ‡đG‡dB§eOPf“˙Ч/ƒ<>ˆtđ %|˙}QČÆxuē„Ģš.ǎŪŨΝ^G­]ŽĨļԃ8'ĖUŗgzįƒĪ_zõÉ>ø^D•LĀ—öÜJ§#<‚ƒÉäsO_xmZŨ†žÄۂ"&æSĮ\ˇ=;æŽFŽˆ gT‘Ąu@ +6ãæG¯=ēZŨ6–‹§iWi Ŗ-‘Îzúõëøhč,ˆö%•ÆÖS4„céģŽ´ņá- UUlnj˛8zc4š9˛Á&ŗ:†FČ ÛæÎ:tãųfĻ@ķMĨ<ŗE¸&đ¤á˜•āc§ĩzŧ>đŨēʑéhVÜĘdršã 'qĐqOÁžˆĄ]57 Âą‘ËŒu'=8ŖŲ°šãđ›XloÃ+ž,"1† sŒ?JąĒĮĢéė$uVõ.A)ōN\{õ!ā? ˆŽ"ūĪb“ļ÷Vš”ŲÎF[åįĶĨHž đėrŦĢĻ1F™\ļ6íÁ;šėxī֏fÂį—ĨíėÖ^LĖnVv #Œ *‘ģô?͚´†ÔęĐHž|—mė‚ 7ËčO\z`s^ŽŪ đãĄGŌ`t-ŋcdŽī\ŒûĶŽ<Ą]\Eq-“yą +$ō'„‡ąČäúŌöl.y&$ÃW,’ÉKŽōFUzã'Œú˙ˆę-ėæ—ÄfįnČ^›ƒ€Į‘Ķ85ÚÂ! ˜<ŸėõŲ×>cîÔ6ržsSEáŊ"b™,Į…YYØžĐ1‚ÄäŽ{÷į­› žRvCĻYË:AtpąēHāääžĒÆ3Ѓ׊ĩ>ãŽj´ qÄŖd…ÄjsĀ>Čüņ^”žŅŅeAi”‘‹˛´ŽËœĀ'`2č:Z(UŗŒ(]€sžŸOj=› žad—Į¤ËkoˆŖrŦ‡oÁū,˙¸įčjÍģ[#ë1j3Hˆ|é–Ø•‘>ö6ļėÜc°Ží|Ą%Ŧ6âÉŧ¸XŧyžBĘH ÛŗÜ÷āāŽ@ĢrčZlđK –¤¨QÆöŠíœįŊ/dÂįŗsö‘ wũŽhö Ģ4Ä.2N>đ>õj?:}'TƒU¸•!ķ”Ã4‰¸•‘Ÿ@:}~4~Ō#HĐY†6čËģ9C~RI p8p)ī iRnYFáÎX6H'×ŋøŌö,w949nĩ*ö™í>͡x@WË8Ü Îr};ûfĒé\fņ 1Åä\2b4Ú3õā× &›iÄąÂbEV (Č8}áĮJŠ-O†{‰ŖˇÚ÷>vÁ#ĐgŠøÁį0gÂEō6ė(@]ŠŀÆ/§Ä+I>[x­,fi.ąŊ‚°2M9s?Ŋķrv‚vö­Ēe¸˜O‘¤ŨųtiŲž]6sØJięv4W8÷>*´Ôlİi—–×~b4P¤ą›Yléē_˜:eJ؇,¤/;k›ŌËÍCĖû4{ųžZî~@ĀĀ=ČöŽÄ>&ņn‰uŖiPŪhšî§*'ØcąœƒēRÂRv)JŒ€Į)Z˙]Õlüá6įMĶ-F+•3¤­,̞%vU%Wjīā áHÅoži)6šjMY˙*zęļĶįgnâįGcYˇ:ū—iŽYhŗ^"ęWĒΏŗ*‚I8Q€pN3ƒŒāԚέi č×z­ķíļĩˆČø ĮE ' ōHį¤Éeņ?Áē•ōcUÕeŋšģ!1Ŗ"¤”|Ë€šîw7ąSƒÂF˛”Ē6’Rˇ›Qrû’Zú¤9JÛįˆ|WĄøVfÖĩĩIؤ@Ģ;9'  œ2q‘ę*}_ŌüIĻCHŧKĢRÅ7¨ Ģ ŠƒĐāŽ„„S.m,4íNįÄSE4—&Ú;RbˇicWfÂĒ)~KüØČųTņŒ×đîîÂīÅŪ,ŧUūĪÔ/ĨŠWŅæĸžĐ$p@œļō nbZĒjU0ŗŠ.h¤īĨĩvjÛĢ/ĩˇ{] ļĨcŅčĸŠķ‹ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€ (ĸ€<˙âŊĪØŦ<1uäM?‘âY<˜t’mv¨îĮ֝暴Ū+ŅĨŅ4Í;Sĩ›Rļhįž˙O’(í#lÜ[nįÚĖ!`XrBäÕīx~ī_ūÂû,§ö~ąo/šÄnŽ=Ų €~nF3ī]zY§ =+Î.Ow§ŧšēĩž×ßđ"Íļyri+eâŲôwFÕĩ}ĘÎÕ440í‰HŒl.#ķ˜üŌ3•j†÷hZoˆ"ÔôMCK‘ĩYî–Ō+ ĨDŧĩ F›\ĀÛØg¯JĸŠ™“ŠIԜw垯xļî–Ę÷ģĶW­ú…Îá2Íiā 2îÎöÖōĶĖķŖšĩ’,n•ŲpY@n1÷IÆFq\Ž“ĸkWŸ 4;+ >æ={AÔũlīm^•„Ō줨¤m}ĮôĮŠöj)˙jIUUyIKwkû×^iŠ>ĪĖ94Hį,|em{ tm~ÚI7—ŽãJ™L*Ē͖!JœíĀ X’Ę1×ß$’)üK öZ…ģŨkWWĐ›ĸW…ŠmΠd˙w;ŊĢŧĸšūŗMS8BĘVęŨŦîēÎéÜōčmåš×EtO2U!ėįOKÅۙÛŨV˛[$÷vÖíęÄĄg{ž]á‹įŌŦõ_ęÚVĄyâÍEZWŠî0Ší•Ėdō€[×-´1ŸVÕ'ŊņŸ‚5it}Z$´‚â[äM:âQlĶ[ŽÔÜąüÄ´ãĄ WĨQIæ1uWOVšŨčœyl´Ņ%ˇü=ÎM-sޏļŸĮ–熛¨Úë:Z~§ˆ.mį›ą;I\íÎĻ2†$pz߅ŧ¯č‹ŗãËĢ[všKģ֎æI-NĀÉqG9ŽāF;s^ÛE<>iSß"´lėģ]Y쏎įŊ¯ŌÚ‚{œ—ˆgŌ/—KžąÕŽ4õŗ†[-I,Ž'’EÚ’āÜŗnēta§Ģ4[+Ŋ_Įw^-’Ök+5ąūĖĩ†æ2’Îĸ]í1Cƒį…SɝŧØŅ\ī’—$,äŦŨūũ6MŲ_đJú>^áEWAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP˙Ų leptonica-1.86.0/prog/showboxes1.baa000066400000000000000000000015701506303110300172750ustar00rootroot00000000000000 Boxaa Version 3 Number of boxa = 2 Boxa[0] extent: x = 16, y = 6, w = 318, h = 228 Boxa Version 2 Number of boxes = 8 Box[0]: x = 44, y = 8, w = 289, h = 226 Box[1]: x = 44, y = 6, w = 288, h = 228 Box[2]: x = 42, y = 11, w = 292, h = 223 Box[3]: x = 16, y = 18, w = 297, h = 216 Box[4]: x = 42, y = 10, w = 292, h = 224 Box[5]: x = 42, y = 11, w = 291, h = 223 Box[6]: x = 42, y = 10, w = 291, h = 224 Box[7]: x = 43, y = 9, w = 291, h = 225 Boxa[1] extent: x = 22, y = 9, w = 309, h = 212 Boxa Version 2 Number of boxes = 8 Box[0]: x = 53, y = 12, w = 277, h = 209 Box[1]: x = 51, y = 22, w = 278, h = 162 Box[2]: x = 51, y = 11, w = 280, h = 187 Box[3]: x = 22, y = 21, w = 287, h = 198 Box[4]: x = 50, y = 10, w = 281, h = 196 Box[5]: x = 50, y = 11, w = 280, h = 184 Box[6]: x = 50, y = 10, w = 280, h = 186 Box[7]: x = 50, y = 9, w = 280, h = 192 leptonica-1.86.0/prog/showboxes2.baa000066400000000000000000000025651506303110300173030ustar00rootroot00000000000000 Boxaa Version 3 Number of boxa = 8 Boxa[0] extent: x = 44, y = 8, w = 289, h = 226 Boxa Version 2 Number of boxes = 2 Box[0]: x = 44, y = 8, w = 289, h = 226 Box[1]: x = 53, y = 12, w = 277, h = 209 Boxa[1] extent: x = 44, y = 6, w = 288, h = 228 Boxa Version 2 Number of boxes = 2 Box[0]: x = 44, y = 6, w = 288, h = 228 Box[1]: x = 51, y = 22, w = 278, h = 162 Boxa[2] extent: x = 42, y = 11, w = 292, h = 223 Boxa Version 2 Number of boxes = 2 Box[0]: x = 42, y = 11, w = 292, h = 223 Box[1]: x = 51, y = 11, w = 280, h = 187 Boxa[3] extent: x = 16, y = 18, w = 297, h = 216 Boxa Version 2 Number of boxes = 2 Box[0]: x = 16, y = 18, w = 297, h = 216 Box[1]: x = 22, y = 21, w = 287, h = 198 Boxa[4] extent: x = 42, y = 10, w = 292, h = 224 Boxa Version 2 Number of boxes = 2 Box[0]: x = 42, y = 10, w = 292, h = 224 Box[1]: x = 50, y = 10, w = 281, h = 196 Boxa[5] extent: x = 42, y = 11, w = 291, h = 223 Boxa Version 2 Number of boxes = 2 Box[0]: x = 42, y = 11, w = 291, h = 223 Box[1]: x = 50, y = 11, w = 280, h = 184 Boxa[6] extent: x = 42, y = 10, w = 291, h = 224 Boxa Version 2 Number of boxes = 2 Box[0]: x = 42, y = 10, w = 291, h = 224 Box[1]: x = 50, y = 10, w = 280, h = 186 Boxa[7] extent: x = 43, y = 9, w = 291, h = 225 Boxa Version 2 Number of boxes = 2 Box[0]: x = 43, y = 9, w = 291, h = 225 Box[1]: x = 50, y = 9, w = 280, h = 192 leptonica-1.86.0/prog/showedges.c000066400000000000000000000050261506303110300166620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * showedges.c * * Uses computation of half edge function, along with thresholding. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define SMOOTH_WIDTH_1 2 /* must be smaller */ #define SMOOTH_WIDTH_2 4 /* must be larger */ #define THRESHOLD 5 /* low works best */ int main(int argc, char **argv) { char *infile, *outfile; l_int32 d; PIX *pixs, *pixgr, *pixb; if (argc != 3) return ERROR_INT(" Syntax: showedges infile outfile", __func__, 1); infile = argv[1]; outfile = argv[2]; setLeptDebugOK(1); pixs = pixRead(infile); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("d not 8 or 32 bpp", __func__, 1); pixgr = pixHalfEdgeByBandpass(pixs, SMOOTH_WIDTH_1, SMOOTH_WIDTH_1, SMOOTH_WIDTH_2, SMOOTH_WIDTH_2); pixb = pixThresholdToBinary(pixgr, THRESHOLD); pixInvert(pixb, pixb); pixWrite(outfile, pixb, IFF_PNG); return 0; } leptonica-1.86.0/prog/singlecc.tif000066400000000000000000000006161506303110300170210ustar00rootroot00000000000000II*Đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙;$Ŧ2C>Al Íé˙ũ­këëë˙¯¯ūžžŋČ03?˙˙˙˙˙˙¯Ž@ĖĮZ×Ö˙˙˙ų Ãjŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ`ŋ˙˙˙˙˙30i‡ƒÃß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯˙˙˙˙˙˙˙˙û˙˙˙˙ūŋ˙˙˙˙˙üš˜jád Ã0Ũ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū îôôĮ~†(&&leptonica-1.86.0/prog/skew_reg.c000066400000000000000000000123611506303110300165000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * skew_reg.c * * Regression test for skew detection. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* deskew */ #define DESKEW_REDUCTION 4 /* 1, 2 or 4 */ /* sweep only */ #define SWEEP_RANGE 5. /* degrees */ #define SWEEP_DELTA 0.2 /* degrees */ #define SWEEP_REDUCTION 2 /* 1, 2, 4 or 8 */ /* sweep and search */ #define SWEEP_RANGE2 5. /* degrees */ #define SWEEP_DELTA2 1. /* degrees */ #define SWEEP_REDUCTION2 2 /* 1, 2, 4 or 8 */ #define SEARCH_REDUCTION 2 /* 1, 2, 4 or 8 */ #define SEARCH_MIN_DELTA 0.01 /* degrees */ static const l_int32 BORDER = 150; int main(int argc, char **argv) { l_int32 w, h, wd, hd; l_float32 deg2rad, angle, conf; PIX *pixs, *pixb1, *pixb2, *pixr, *pixf, *pixd, *pixc; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; deg2rad = 3.1415926535 / 180.; pixa = pixaCreate(0); pixs = pixRead("feyn.tif"); pixSetOrClearBorder(pixs, 100, 250, 100, 0, PIX_CLR); pixb1 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); regTestWritePixAndCheck(rp, pixb1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixb1, 0, 100, NULL, rp->display); /* Add a border and locate and deskew a 40 degree rotation */ pixb2 = pixAddBorder(pixb1, BORDER, 0); pixGetDimensions(pixb2, &w, &h, NULL); pixaAddPix(pixa, pixb2, L_COPY); pixr = pixRotateBySampling(pixb2, w / 2, h / 2, deg2rad * 40., L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pixr, IFF_PNG); /* 1 */ pixaAddPix(pixa, pixr, L_INSERT); pixFindSkewSweepAndSearchScorePivot(pixr, &angle, &conf, NULL, 1, 1, 0.0, 45.0, 2.0, 0.03, L_SHEAR_ABOUT_CENTER); lept_stderr("Should be 40 degrees: angle = %7.3f, conf = %7.3f\n", angle, conf); pixf = pixRotateBySampling(pixr, w / 2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRemoveBorder(pixf, BORDER); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixf); /* Do a rotation larger than 90 degrees using embedding; * Use 2 sets of measurements at 90 degrees to scan the * full range of possible rotation angles. */ pixGetDimensions(pixb1, &w, &h, NULL); pixr = pixRotate(pixb1, deg2rad * 37., L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); regTestWritePixAndCheck(rp, pixr, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixr, L_INSERT); startTimer(); pixFindSkewOrthogonalRange(pixr, &angle, &conf, 2, 1, 47.0, 1.0, 0.03, 0.0); lept_stderr("Orth search time: %7.3f sec\n", stopTimer()); lept_stderr("Should be about -128 degrees: angle = %7.3f\n", angle); pixd = pixRotate(pixr, deg2rad * angle, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4 */ pixGetDimensions(pixd, &wd, &hd, NULL); pixc = pixCreate(w, h, 1); pixRasterop(pixc, 0, 0, w, h, PIX_SRC, pixd, (wd - w) / 2, (hd - h) / 2); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixc, L_INSERT); pixDestroy(&pixf); pixDestroy(&pixd); pixd = pixaDisplayTiledInColumns(pixa, 3, 0.5, 20, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixb1); pixDestroy(&pixb2); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.86.0/prog/skewtest.c000066400000000000000000000157751506303110300165570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * skewtest.c * * Tests various skew finding methods, optionally deskewing * the input (binary) image. The best version does a linear * sweep followed by a binary (angle-splitting) search. * The basic method is to find the vertical shear angle such * that the differential variance of ON pixels between each * line and it's neighbor, when summed over all lines, is * maximized. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* binarization threshold */ #define BIN_THRESHOLD 130 /* deskew */ #define DESKEW_REDUCTION 2 /* 1, 2 or 4 */ /* sweep only */ #define SWEEP_RANGE 10. /* degrees */ #define SWEEP_DELTA 0.2 /* degrees */ #define SWEEP_REDUCTION 2 /* 1, 2, 4 or 8 */ /* sweep and search */ #define SWEEP_RANGE2 10. /* degrees */ #define SWEEP_DELTA2 1. /* degrees */ #define SWEEP_REDUCTION2 2 /* 1, 2, 4 or 8 */ #define SEARCH_REDUCTION 2 /* 1, 2, 4 or 8 */ #define SEARCH_MIN_DELTA 0.01 /* degrees */ int main(int argc, char **argv) { char *filein; l_int32 ret; l_float32 deg2rad; l_float32 angle, conf, score, endscore; PIX *pix, *pixs, *pixd; if (argc != 2) return ERROR_INT(" Syntax: skewtest filein", __func__, 1); filein = argv[1]; setLeptDebugOK(1); lept_rmdir("lept/deskew"); lept_mkdir("lept/deskew"); pixd = NULL; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); /* Find the skew angle various ways */ pix = pixConvertTo1(pixs, BIN_THRESHOLD); pixWrite("/tmp/lept/deskew/binarized.tif", pix, IFF_TIFF_G4); pixFindSkew(pix, &angle, &conf); lept_stderr("pixFindSkew():\n" " conf = %5.3f, angle = %7.3f degrees\n", conf, angle); pixFindSkewSweepAndSearchScorePivot(pix, &angle, &conf, &score, SWEEP_REDUCTION2, SEARCH_REDUCTION, 0.0, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA, L_SHEAR_ABOUT_CORNER); lept_stderr("pixFind...Pivot(about corner):\n" " conf = %5.3f, angle = %7.3f degrees, score = %.0f\n", conf, angle, score); pixFindSkewSweepAndSearchScorePivot(pix, &angle, &conf, &score, SWEEP_REDUCTION2, SEARCH_REDUCTION, 0.0, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA, L_SHEAR_ABOUT_CENTER); lept_stderr("pixFind...Pivot(about center):\n" " conf = %5.3f, angle = %7.3f degrees, score = %.0f\n", conf, angle, score); /* Use top-level */ pixd = pixDeskew(pixs, 0); pixWriteImpliedFormat("/tmp/lept/deskew/result1", pixd, 0, 0); pixDestroy(&pix); pixDestroy(&pixd); #if 1 /* Do skew finding and rotation separately. This fails if * the skew angle is outside the range. */ pix = pixConvertTo1(pixs, BIN_THRESHOLD); if (pixGetDepth(pixs) == 1) { pixd = pixDeskew(pix, DESKEW_REDUCTION); pixWrite("/tmp/lept/deskew/result2", pixd, IFF_PNG); } else { ret = pixFindSkewSweepAndSearch(pix, &angle, &conf, SWEEP_REDUCTION2, SEARCH_REDUCTION, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA); if (ret) L_WARNING("skew angle not valid\n", __func__); else { lept_stderr("conf = %5.3f, angle = %7.3f degrees\n", conf, angle); if (conf > 2.5) pixd = pixRotate(pixs, angle * deg2rad, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); else pixd = pixClone(pixs); pixWrite("/tmp/lept/deskew/result2", pixd, IFF_PNG); pixDestroy(&pixd); } } pixDestroy(&pix); #endif #if 1 pixFindSkewSweepAndSearchScore(pixs, &angle, &conf, &endscore, 4, 2, 0.0, 5.0, 1.0, 0.01); lept_stderr("angle = %8.4f, conf = %8.4f, endscore = %.0f\n", angle, conf, endscore); startTimer(); pixd = pixDeskew(pixs, DESKEW_REDUCTION); lept_stderr("Time to deskew = %7.4f sec\n", stopTimer()); pixWrite("/tmp/lept/deskew/result3", pixd, IFF_PNG); pixDestroy(&pixd); #endif #if 1 ret = pixFindSkew(pixs, &angle, &conf); lept_stderr("angle = %8.4f, conf = %8.4f\n", angle, conf); if (ret) { L_WARNING("skew angle not valid\n", __func__); return 1; } #endif #if 1 ret = pixFindSkewSweep(pixs, &angle, SWEEP_REDUCTION, SWEEP_RANGE, SWEEP_DELTA); lept_stderr("angle = %8.4f, conf = %8.4f\n", angle, conf); if (ret) { L_WARNING("skew angle not valid\n", __func__); return 1; } #endif #if 1 ret = pixFindSkewSweepAndSearch(pixs, &angle, &conf, SWEEP_REDUCTION2, SEARCH_REDUCTION, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA); lept_stderr("angle = %8.4f, conf = %8.4f\n", angle, conf); if (ret) { L_WARNING("skew angle not valid\n", __func__); return 1; } #endif pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/smallpix_reg.c000066400000000000000000000205261506303110300173620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * smallpix_reg.c * * This is a regression test for scaling and rotation. * * The question to be answered is: in the quantization, where, if * anywhere, do we add 0.5? * * The answer is that it should usually, but not always, be omitted. * To see this, we operate on a very small pix and for visualization, * scale up with replication to avoid aliasing and shifting. * * To determine that the current implementations in scalelow.c, * rotate.c and rotateamlow.c are better, change the specific * implementations and re-run. * * In all cases here, the pix to be operated on is of odd size * so that the center pixel is symmetrically located, and there * are a couple of black pixels outside the pattern so that edge * effects (e.g., in pixScaleSmooth()) do not affect the results. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void SaveAndDisplayPix(L_REGPARAMS *rp, PIXA **ppixa, l_int32 x, l_int32 y); int main(int argc, char **argv) { l_int32 i; l_float32 pi, scale, angle; PIX *pixc, *pixm, *pix1, *pix2, *pix3; PIXA *pixa; PTA *pta1, *pta2, *pta3, *pta4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Make a small test image, the hard way! */ pi = 3.1415926535; pixc = pixCreate(9, 9, 32); pixm = pixCreate(9, 9, 1); pta1 = generatePtaLineFromPt(4, 4, 3.1, 0.0); pta2 = generatePtaLineFromPt(4, 4, 3.1, 0.5 * pi); pta3 = generatePtaLineFromPt(4, 4, 3.1, pi); pta4 = generatePtaLineFromPt(4, 4, 3.1, 1.5 * pi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); ptaJoin(pta1, pta4, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); ptaDestroy(&pta4); pixDestroy(&pixm); /* Results differ for scaleSmoothLow() w/ and w/out + 0.5. * Neither is properly symmetric (with symm pattern on odd-sized * pix, because the smoothing is destroying the symmetry. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleSmooth(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 100); /* 0 */ /* Results same for pixScaleAreaMap w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleAreaMap(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 200); /* 1 */ /* Results better for pixScaleBySampling with + 0.5, for small, * odd-dimension pix. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleBySampling(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 300); /* 2 */ /* Results same for pixRotateAM w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAM(pix1, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 400); /* 3 */ /* If the size is odd, we express the center exactly, and the * results are better for pixRotateBySampling() w/out 0.5 * However, if the size is even, the center value is not * exact, and if we choose it 0.5 smaller than the actual * center, we get symmetrical results with +0.5. * So we choose not to include + 0.5. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateBySampling(pix1, 4, 4, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 500); /* 4 */ /* Results same for pixRotateAMCorner w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAMCorner(pix1, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 600); /* 5 */ /* Results better for pixRotateAMColorFast without + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAMColorFast(pix1, angle, 0); pix3 = pixExpandReplicate(pix2, 8); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 700); /* 6 */ /* Results slightly better for pixScaleColorLI() w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { scale = 1.0 + 0.2 * (l_float32)i; pix2 = pixScaleColorLI(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 4); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 800); /* 7 */ /* Results slightly better for pixScaleColorLI() w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { scale = 1.0 + 0.2 * (l_float32)i; pix2 = pixScaleLI(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 4); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); SaveAndDisplayPix(rp, &pixa, 100, 940); /* 8 */ pixDestroy(&pixc); return regTestCleanup(rp); } void SaveAndDisplayPix(L_REGPARAMS *rp, PIXA **ppixa, l_int32 x, l_int32 y) { PIX *pix1; pix1 = pixaDisplayTiledInColumns(*ppixa, 12, 1.0, 20, 0); regTestWritePixAndCheck(rp, pix1, IFF_PNG); pixDisplayWithTitle(pix1, x, y, NULL, rp->display); pixaDestroy(ppixa); pixDestroy(&pix1); } leptonica-1.86.0/prog/smoothedge_reg.c000066400000000000000000000072401506303110300176650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * smoothedge_reg.c * * Analyzes edges of a 1 bpp (connected component) image for smoothness. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static l_int32 MIN_JUMP = 2; static l_int32 MIN_REVERSAL = 3; void PixAddEdgeData(PIXA *pixa, PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal); int main(int argc, char **argv) { l_int32 w; PIX *pixs, *pixt, *pixd; PIXA *pixa; pixs = pixRead("raggededge.png"); w = pixGetWidth(pixs); pixa = pixaCreate(0); PixAddEdgeData(pixa, pixs, L_FROM_RIGHT, MIN_JUMP, MIN_REVERSAL); PixAddEdgeData(pixa, pixs, L_FROM_LEFT, MIN_JUMP, MIN_REVERSAL); pixt = pixRotateOrth(pixs, 1); PixAddEdgeData(pixa, pixt, L_FROM_BOT, MIN_JUMP, MIN_REVERSAL); PixAddEdgeData(pixa, pixt, L_FROM_TOP, MIN_JUMP, MIN_REVERSAL); pixDestroy(&pixt); pixt = pixRotateOrth(pixs, 2); PixAddEdgeData(pixa, pixt, L_FROM_LEFT, MIN_JUMP, MIN_REVERSAL); PixAddEdgeData(pixa, pixt, L_FROM_RIGHT, MIN_JUMP, MIN_REVERSAL); pixDestroy(&pixt); pixt = pixRotateOrth(pixs, 3); PixAddEdgeData(pixa, pixt, L_FROM_TOP, MIN_JUMP, MIN_REVERSAL); PixAddEdgeData(pixa, pixt, L_FROM_BOT, MIN_JUMP, MIN_REVERSAL); pixDestroy(&pixt); pixDestroy(&pixs); /* Display at 2x scaling */ pixd = pixaDisplayTiledAndScaled(pixa, 32, 2 * (w + 10), 2, 0, 25, 2); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } void PixAddEdgeData(PIXA *pixa, PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal) { l_float32 jpl, jspl, rpl; PIX *pixt1, *pixt2; pixMeasureEdgeSmoothness(pixs, side, minjump, minreversal, &jpl, &jspl, &rpl, "/tmp/junkedge.png"); lept_stderr("side = %d: jpl = %6.3f, jspl = %6.3f, rpl = %6.3f\n", side, jpl, jspl, rpl); pixt1 = pixRead("/tmp/junkedge.png"); pixt2 = pixAddBorder(pixt1, 10, 0); /* 10 pixel white border */ pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); return; } leptonica-1.86.0/prog/sorttest.c000066400000000000000000000064371506303110300165700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * sorttest.c * * Tests sorting of connected components by various attributes, * in increasing or decreasing order. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" int main(int argc, char **argv) { char *filein; l_int32 i, n, ns; BOXA *boxa; PIX *pixs, *pixt; PIXA *pixa, *pixas, *pixas2; if (argc != 2) return ERROR_INT(" Syntax: sorttest filein", __func__, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); #if 0 boxa = pixConnComp(pixs, NULL, 8); n = boxaGetCount(boxa); boxas = boxaSort(boxa, L_SORT_BY_PERIMETER, L_SORT_DECREASING, NULL); ns = boxaGetCount(boxas); lept_stderr("Number of cc: n = %d, ns = %d\n", n, ns); boxaWrite("/tmp/junkboxa.ba", boxas); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_CLONE); pixRenderBox(pixs, box, 2, L_FLIP_PIXELS); boxDestroy(&box); } pixWrite("/tmp/junkout.png", pixs, IFF_PNG); boxaDestroy(&boxa); boxaDestroy(&boxas); #endif #if 1 boxa = pixConnComp(pixs, &pixa, 8); n = pixaGetCount(pixa); pixas = pixaSort(pixa, L_SORT_BY_Y, L_SORT_INCREASING, NULL, L_CLONE); ns = pixaGetCount(pixas); lept_stderr("Number of cc: n = %d, ns = %d\n", n, ns); pixaWrite("/tmp/pixa.pa", pixas); pixas2 = pixaRead("/tmp/pixa.pa"); pixaWrite("/tmp/pixa2.pa", pixas2); pixt = pixaDisplayOnLattice(pixas, 100, 100, NULL, NULL); pixWrite("/tmp/sorted.png", pixt, IFF_PNG); boxaWrite("/tmp/boxa.ba", pixas->boxa); pixDestroy(&pixt); pixaDestroy(&pixa); pixaDestroy(&pixas); pixaDestroy(&pixas2); boxaDestroy(&boxa); #endif pixDestroy(&pixs); return 0; } leptonica-1.86.0/prog/speckle.png000066400000000000000000000005461506303110300166640ustar00rootroot00000000000000‰PNG  IHDR3&AÁž¯ pHYsb&2IDAT•ąJAEßWXĒ_ ö"É?XؙTZ’Îaķüƒ”ąK:Á`a,–8‹ERĻ2e3B]ÜAD†dwæ:ZîžsI§ŧF‘ÁņŒ—}˛(ØuĢtsޤEHŌ "â˜æPQ ŧTæUÂĩ „UôŒšKEúQˇ5+úš0›\‘dqu¤…°¯}(änCQ 8•­ˆ .Fö]‘9l.œ÷Ä.õŦaE—ûŽĐŪs nĪȎō1Ë2 t6/n#˛õ7ې W ôŧŸÃÄ>ĄL ņ`ŧ'ã)¤÷NŨŨbâ;ļ:‚á÷‚õwėģ72ķ‰ŋĢÍö?Û2ßķŊ€™ËÕ6„-í*e2;Ĩ\Īün—a…úįQĖÅSŖéIENDŽB`‚leptonica-1.86.0/prog/speckle2.png000066400000000000000000000007421506303110300167440ustar00rootroot00000000000000‰PNG  IHDR˘ĮæAn pHYsb&2”IDATX…Õ—Yƒ0 Cu˙KģC‰cIÉ”8~îx% ĒPī…įŠ#‘õsC8#x…h´‡%ŒgĖķ˙ļIđ+`Ų –āĒ ˏŽT&Õãä2šŅú<[ Ãt D3$ĩ T™cņŒ‹Ū†ŗ¨¤34æF@ēØ3RUR™^ėôqp`ë/0k*Ā^ČĻ4á nōjzM“š`FęņE†ąÍ&6øg{•ÍœG†íņōÚҌ(Ŋŋr(&ü8Ęxšē×b;ž‘Ļķ ˇšú —ņ›‹+tĒ9šŠN'Ū´ŌŘŪINgxžÔ¤K,‚™ö ė/Cˇ’ÍđGÄüZé‚ÎáL{6šŖLo9›Ėf@}Ö1ŗuŠd¤É`˛É!˙É7V[č| ī‘i6™‹ÃÍ\!›š•^IŗaŨh¸§3"ŠzŽūLfŠ÷42sž9Í`æ Ėģ+aHfĖB§”ßdŽ~ŖxÂãKĖé$LĩVŒ˛™vsΆTģ-E3[Ŋ¨ĸÉ,VŠŗ™)Ō=î/—”n2ķ“5iIsIENDŽB`‚leptonica-1.86.0/prog/speckle4.png000066400000000000000000000024471506303110300167520ustar00rootroot00000000000000‰PNG  IHDR˜0jīÕ pHYsb&2ŲIDATxœíÛv*1 Cį˙šs:4_dgV tû&‘%íˇeŽ˙sKæŧ_uՎę3ŲˇgG%ĒJĖķž=˜Âg˛oĪ>f`Á"Đč!:y‘˙ũ7+§Ta^°§W˛€éTa^°§W˛€éTa^°§W˛€éTa^°§W˛Z0^‘ÉËėxŦ^^¯¸Ęh§0N`"Ņ´0N`"ҴȝĀ<8%ĸīnŅhgúîsšeEņ€iøŸfYQ`ŧ0`ū§YVô­`vËŦ÷ëīÄ+;̞ÉîĢĐĘ ˜0Ā´ŧ€YüÚ@jál_ũļgŅ˙ķ`‚Ųˇ=Ļ*LP ûļgĻcē3^‰ãk”ŧH÷āë*æŨÆŲĄŒ-Läë*æŨųQ˜]Ŗh/Ōxpņv€QK#0ë"0ĀčÎĸÂj€WĒ }j,|˜¨(0‹˜Õ#* 0ߚË`Ē…5(Ōyį•įÎū“ļ 0Úū“ļ 0Úū“ļüV0įōZ\9OeT}ø˜ž˜r]=0ęųnšŽõ|ˇ\W˙ˇ`BÁ†šŊˇŋŅYä[æTB`‚{`:9•˜ā˜NN%|;˜î’2*āÄ/ę L7|rŸéŲ`D=0;ķ20WĖņ5QLg§ō¸ß+ĸÉsæÛKM˜0ß^Šh2ŋcŽë•Ë`Õ3`:L˛ŸĶ`’ũėėŗ`&…ĸûčaÔ3u'ĖÉ ģÁĀ42™ĶČfür0V´d÷UÉĢ€R}eŒX ˜L_#&ĶWo Ŗ–Ú ĢöŖ“ũ*ãN™v80‰_eÜ)Ķ&ņ̌;eÚáĀ$~•q§L;üj˜uqjVíeĨėËT=€ņ‚&îŒ Ė•0YŠė×ûŸT…Ŋģėŧ3`€`^ĻēSØ>§­`×˙î‹N íėãėŖ†ŠģĀ8{aęîĀd! §@§DäŖä­Lfžé)ō€QÍ3=0EŪgÃØßŽatī=H§ŧˇų 0Āķē0Y1Ī(û^KTe+˙,Ëģ&ûF( L' ˜†–åŨLdŦ…Õ2eĄlé“f0ĀxšŦ0ƒÆĶd…ŪF)ÆJŠĖSÍņ4‡ĖĀ`„`’]`”đNąHŗNĩg5ļt˜1đ‚+ 0Āl 0Å0ŖY]wwįáTp`ēI˛Ŋ;`&I˛Ŋģ΂Є;eÖĢJyįv¯ęŒ:ĀgĀdŀqJeÚč ˜‘IĄŠvŖ;eēz†ĀL¸ŒgLq§ĖŒ*VKœwž&‚ÎTÍĻ s–-dĻĀ܀‘{ëXQ ”ŠîǞ“&+ĖELV˜‹æŗ`FK~ũŽt‘Ī$?ô-ãûLōCŋŅ0žĪ$?ô-ãûLōCŋŅŌģ¨e:ÅėžŨŧĒ `ĸR•W´Œwß ŽJU^Ņ0Ū}'¸*UyE{Āx÷juĒ"ĶĸVģúŨ˙÷ëÖAŲ90Ž˜î“œGZ`ēķĢ0ĢÉz‘ŲĩX§°W4ķ #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* HMT (with just misses) for speckle up to 2x2 */ static const char *selstr2 = "oooo" "oC o" "o o" "oooo"; /* HMT (with just misses) for speckle up to 3x3 */ static const char *selstr3 = "ooooo" "oC o" "o o" "o o" "ooooo"; int main(int argc, char **argv) { PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9, *pix10; PIXA *pixa1; SEL *sel1, *sel2, *sel3, *sel4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Normalize for rapidly varying background */ pixa1 = pixaCreate(0); pixs = pixRead("w91frag.jpg"); pixaAddPix(pixa1, pixs, L_INSERT); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 0 */ pix1 = pixBackgroundNormFlex(pixs, 7, 7, 1, 1, 10); pixaAddPix(pixa1, pix1, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 1 */ /* Remove the background */ pix2 = pixGammaTRCMasked(NULL, pix1, NULL, 1.0, 100, 175); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 2 */ /* Binarize */ pix3 = pixThresholdToBinary(pix2, 180); pixaAddPix(pixa1, pix3, L_INSERT); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ /* Remove the speckle noise up to 2x2 */ sel1 = selCreateFromString(selstr2, 4, 4, "speckle2"); pix4 = pixHMT(NULL, pix3, sel1); pixaAddPix(pixa1, pix4, L_INSERT); sel2 = selCreateBrick(2, 2, 0, 0, SEL_HIT); pix5 = pixDilate(NULL, pix4, sel2); pixaAddPix(pixa1, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 4 */ pix6 = pixSubtract(NULL, pix3, pix5); pixaAddPix(pixa1, pix6, L_INSERT); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 5 */ /* Remove the speckle noise up to 3x3 */ sel3 = selCreateFromString(selstr3, 5, 5, "speckle3"); pix7 = pixHMT(NULL, pix3, sel3); pixaAddPix(pixa1, pix7, L_INSERT); sel4 = selCreateBrick(3, 3, 0, 0, SEL_HIT); pix8 = pixDilate(NULL, pix7, sel4); pixaAddPix(pixa1, pix8, L_INSERT); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 6 */ pix9 = pixSubtract(NULL, pix3, pix8); pixaAddPix(pixa1, pix9, L_INSERT); regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 7 */ pix10 = pixaDisplayTiledInColumns(pixa1, 3, 1.0, 30, 2); pixDisplayWithTitle(pix10, 0, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix10, IFF_JFIF_JPEG); /* 8 */ selDestroy(&sel1); selDestroy(&sel2); selDestroy(&sel3); selDestroy(&sel4); pixDestroy(&pix2); pixDestroy(&pix10); pixaDestroy(&pixa1); return regTestCleanup(rp); } leptonica-1.86.0/prog/splitcomp_reg.c000066400000000000000000000133601506303110300175410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * splitcomp_reg.c * * Regression test for splittings of a single component and for an image * composed of several components, using different components and * parameters. Note that: * (1) All coverings must cover the fg of the mask. * (2) The first set of parameters is small and generates * a proper tiling, covering ONLY the mask fg. * (3) The tilings generated on 90 degree rotated components * are identical (rotated) to those on un-rotated components. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h; l_int32 minsum[5] = { 2, 40, 50, 50, 70}; l_int32 skipdist[5] = { 5, 5, 10, 10, 30}; l_int32 delta[5] = { 2, 10, 10, 25, 40}; l_int32 maxbg[5] = {10, 15, 10, 20, 40}; BOX *box1, *box2, *box3, *box4; BOXA *boxa; PIX *pixs, *pixc, *pixt, *pixd, *pix32; PIXA *pixas, *pixad; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Generate and save 1 bpp masks */ pixas = pixaCreate(0); pixs = pixCreate(300, 250, 1); pixSetAll(pixs); box1 = boxCreate(50, 0, 140, 25); box2 = boxCreate(120, 100, 100, 25); box3 = boxCreate(75, 170, 80, 20); box4 = boxCreate(150, 80, 25, 70); pixClearInRect(pixs, box1); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box2); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box3); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box4); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); pixDestroy(&pixs); /* Do 5 splittings on each of the 8 masks */ pixad = pixaCreate(0); for (j = 0; j < 8; j++) { pixt = pixaGetPix(pixas, j, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); pix32 = pixCreate(w, h, 32); pixSetAll(pix32); pixPaintThroughMask(pix32, pixt, 0, 0, 0xc0c0c000); pixaAddPix(pixad, pix32, L_INSERT); for (i = 0; i < 5; i++) { pixc = pixCopy(NULL, pix32); boxa = pixSplitComponentIntoBoxa(pixt, NULL, minsum[i], skipdist[i], delta[i], maxbg[i], 0, 1); /* boxaWriteStderr(boxa); */ pixd = pixBlendBoxaRandom(pixc, boxa, 0.4); pixRenderBoxaArb(pixd, boxa, 2, 255, 0, 0); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixc); boxaDestroy(&boxa); } pixDestroy(&pixt); } /* Display results */ pixd = pixaDisplayTiledInColumns(pixad, 6, 1.0, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixad); /* Put the 8 masks all together, and split 5 ways */ pixad = pixaCreate(0); pixs = pixaDisplayOnLattice(pixas, 325, 325, NULL, NULL); pixGetDimensions(pixs, &w, &h, NULL); pix32 = pixCreate(w, h, 32); pixSetAll(pix32); pixPaintThroughMask(pix32, pixs, 0, 0, 0xc0c0c000); pixaAddPix(pixad, pix32, L_INSERT); for (i = 0; i < 5; i++) { pixc = pixCopy(NULL, pix32); boxa = pixSplitIntoBoxa(pixs, minsum[i], skipdist[i], delta[i], maxbg[i], 0, 1); /* boxaWriteStderr(boxa); */ pixd = pixBlendBoxaRandom(pixc, boxa, 0.4); pixRenderBoxaArb(pixd, boxa, 2, 255, 0, 0); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixc); boxaDestroy(&boxa); } pixDestroy(&pixs); /* Display results */ pixd = pixaDisplayTiledInColumns(pixad, 6, 1.0, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixad); pixaDestroy(&pixas); return regTestCleanup(rp); } leptonica-1.86.0/prog/splitimage2pdf.c000066400000000000000000000047261506303110300176120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * splitimage2pdf.c * * Syntax: splitimage2pdf filein nx ny fileout * * nx = number of horizontal tiles * ny = number of vertical tiles * * Simple program to generate a pdf of image tiles. * To print the tiles, one page per tile, use printsplitimage. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 nx, ny; PIX *pixs; PIXA *pixa; if (argc != 5) return ERROR_INT(" Syntax: splitimage2pdf filein nx ny fileout", __func__, 1); filein = argv[1]; nx = atoi(argv[2]); ny = atoi(argv[3]); fileout = argv[4]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixa = pixaSplitPix(pixs, nx, ny, 0, 0); pixaConvertToPdf(pixa, 300, 1.0, 0, 0, NULL, fileout); pixDestroy(&pixs); pixaDestroy(&pixa); return 0; } leptonica-1.86.0/prog/splitpdf.c000066400000000000000000000101351506303110300165140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * splitpdf.c * * Syntax: splitpdf filein n rootname * * n = number of output files * rootname: the root of the output file names, which are in the format: * [rootname]_001.pdf * [rootname]_002.pdf * ... * * Notes: * (1) This calls mutool to split the input file into a set of %n files * mutool clean -g -g filein fileout page-range * (2) It attempts to put the same number of pages in each file. * (3) If the number %n of output files specified is greater than * 'npages', the number of pages in the input pdf file, this will * write 'npages' files, with one page per file. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *rootname; char outname[512], buffer[1024]; l_int32 i, n, npages, nfiles, val, start, end; NUMA *naeach; if (argc != 4) return ERROR_INT(" Syntax: splitpdf filein n rootname", __func__, 1); filein = argv[1]; n = atoi(argv[2]); rootname = argv[3]; lept_stderr( "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" " Warning: this program should only be used for testing,\n" " and not in a production environment, because of a\n" " potential vulnerability with the 'system' call.\n" "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); getPdfPageCount(filein, &npages); if (npages == 0) { lept_stderr("Page count not found in %s\n", filein); return 1; } lept_stderr("Number of pages in pdf file: %d\n", npages); /* Decide how many pages in each output pdf file */ naeach = numaGetUniformBinSizes(npages, n); nfiles = numaGetCount(naeach); /* actual number of output files */ lept_stderr("Number of output files: %d\n", nfiles); /* Split the pdf and write the files */ start = 1; for (i = 0; i < nfiles; i++) { snprintf(outname, sizeof(outname), "%s_%03d.pdf", rootname, i + 1); numaGetIValue(naeach, i, &val); if (i == 0) { lept_stderr("Name of first output file: %s\n", outname); lept_stderr("Number of pages in first output file: %d\n", val); } end = start + val - 1; snprintf(buffer, sizeof(buffer), "mutool clean -g -g %s %s %d-%d", filein, outname, start, end); callSystemDebug(buffer); start = end + 1; } numaDestroy(&naeach); return 0; } leptonica-1.86.0/prog/stampede2.jpg000066400000000000000000002231761506303110300171240ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā Ô˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?ëÉv™°™÷öŠ–O“r°¸īHāĪėœS|ƒšJãyŊK%„˜Æ3Āǚ‡î #<ã‘^d™>0}kŌcrąų*•ÕÎæÄÜU=n Œ0ĪĩGङF@īšŅXĘۑČaM`Â!‚3îqR< $JųĀīQA`ōIĀÅMpDvŦƒ;”Ķ, z`Õ̆y”*.üĶRȨ\O(ŖÎ0iŸg‘¤P€ŪϊΠÜeĮ\vŠŪ7Bq•īTZ+xŸoD<Šļē—“ "rF*Ōŋ™N7ÍYUˆÃn ŒņÍR¸Å)"0rqÅiYË Á Ī"<›ĨR¤ĮĻj ī­ÔœņUná2Fz_˛Œ įn9ŠâļXāTqĪéđ*JŦBín„†áKáB‚=芿Č;`U˜îPÆ:niņ}ėƒÃô5Ÿ™#AĻj˛YĸKžāö­!œ` ŌŊ´QĸíQ÷ēöÅF`ŖíČė)–Å#FqWyÉÉéN<&Ōšô5r%Ÿ;HaųTá€IŨē .3×Ĩ"Ąu%ĀcHļpŗn1¯LtĻÃŽG ¤éVh_v9<āŌ,^_īcŌšĐÆf.ÁyéOņ˛î!JjĢ:Û¨Ã"‘Ú’ĪČŒJĒHę _W%1¸ŽĸĒŧÜæ*ļ;šTˇ‚7Œ8ČŠ™‹mU b¤BĖ„62x5=„2Č ‘ ãĨK˛ĮąP€ôŠ.Ö9~G@ON•Ž,q6ā@ãZΠDœS#ˇ†ÁŲĩ›ž;Ķæ‡$ļŪX` Ĩ„Æ2I4ö–ōÄĸDƒŌ­ÛGm„EŽiJ’ÄqĪLsK*O/ ŠÍfĻ›n3ē5ã¯ŊC&Ÿk,ČŌDōš}Åĩģ(c!:*åČĒ`c\īŽˇļ…1 ŨEVđ–=Æ"—yŽFlŠĀôT æm\ŌĨQû’qŒô_Ÿœ uŦ¨Ä… ÚĢŪ*Č[äROSé^h/ŒŽXšÅvŌÜČW'TuŽÄ~%šK¯")Įš ôąys7ˌ‚N+~z×ĖČ6ëZąęMšŽģ{ˇĨR—Y´2ŒËVíĩÄiģx#ķT¤Õ-wá&Qƒũę•/ín˜ėugn s\žŊ­ ĐFß:ˇJę|?Ģ& ŠÅ†‚@­‡PĘĀîĪ”ÉQ•õ&˜Ãn]J¨ãŪŗî5{[Twir:TÛ6×6§Ę‘K‘Ę׎x‘­•b‰š ¤đÅæ§z|æ%5ßČĢo wt9ĻÚŨ,“FŒxõ¨5ģŅf¯;}Å< āWÄ:žĄræ*›˛ôĢ7+ÔmãHäB?zē5ņ ĮĨ ‰˜ī+ž}iē'ˆ—R!K åēWO pãs‚ib…žŌd2˜ā ™cÁgÎsīPMšmāחøƒSÔôËō§c6EhYÜk3Ú-ĘËÎ3õ̚7Œ¤†ÚņēqŸzėŸ[‚ 5¤?tRiZŊĩΘ Ģ#séVnõėã \ygĄ= -žŖo49*Ž{Eē†XÜE8`žõĮŲxŽėx”YJ#? ÔÖ|Eq§jļÖąĮšã õޘjVéyĨDČÎ Y‡[ĩŸ`GƒĀ÷­>bČéVįm̌`séB#FøČÆ:ÕYõíIc°v֝g¨Å0Č)“ɤžū•ƒ:û žŪūŒm•IˇjÉ×ŧC“é,O-–ŗۜŗĸáYr+…ŊņÜzęØČ F_>•ŪYÉnjŒœ¯+ZĒUc_˜ã8Éį‹Ë]Žģ†zUK›Ÿ-1ÎF@Įë1›KēE˜ÉÆk§Ōõud—lÃlƒĄ5rKØ0C*Œõ§ĢÂ#ķLƒqæĢļĄŽ2ˌņīLģŸĘˇiP¯Bk“Ķü(&›s1†'Ũߊ혰ū4ĮmÆģ[ƒŖ@Ž8šōÛû8˙á!1qˇvNkgUĶa]3|$ŽqYz‰6§0lcŠĐÕlŽtM;Ę.HcPŲZ¤ÚOšĀ—5.ƒ¨ĖR{Ww*ŧ ʆ‰õ—ļIģĩhiŪnŸâ1˜Å} ŖÆ0ĢßFüį ŽÃÂļBÚŅJž]9ŽžØ[éP͝ہ Wŧ)öws‘ĩxŧž—X×%ŠFb¸Æ)5$ĐuH–)†8+œÕOZŦ—°˛‚ „^‰á& 8Ã/ŪeŽ’æØÉ‘ŒƒUVÍ-§ •ĪSU|C6Ÿ7…kËc˛š…ŧë.ŦO N}BäHąßDƒ×ģŽÁ š"I ¤d —ĀÚJųkvį‘Ķšīa_´J9Č'zļVŪ8c-‘Å1 `qĪáN{u0ąHĮŌŧ“â-@ä/'4Í.ëUk8Ŗˇ@TŽ*H<)t.ž×6ŨŲÜETÔŧÅÔŅ$”˜ĀÆU}*öK}~8âwŗ#>õčž$ˇItfmälAŒW7áR÷UŌĘųÆpsŌ“Á“ĖuĢĢw˜ÁĮ<ĶŽü´ņÜ(ŖōŽÚ];Û´†įN@¯?ņĩÅŨžĸ# V/@qXúVĄ3jvŅĮpûKŽ3^ûbûmĸÜrJņW–L p3Q‘"†ų”…äטx‹Z›Pņ¯cáäķųúkŊÔŽėė㙎ą!äĻî•Ũønņõ 9f;‹/$×%i/Ä íP¯W† P8eŨŠ•”8#JĨr[k ā•Ā8¯Ô,¯Œ–?´39o”ûW ßZųZ™Ü<"ŧÛ@šÔšk‹{čNOĨu×ĩ u†ĶîÜŊÉĨņŌÜÆŅJŦĻ=ØÁõ¨5­^ëOĐ­ÛpÜāŽÕ‘câ ķw ,ûƒ°A^ŋmŊĒ6ė’ŊOzæŧo0ƒC•A8Í[đąŲĄ[āPgÅQ 0lņƒÖĸy–3€ŲŨWíb°9ëL)ēMŲãŽ=iuķ8 JKˆhœŠ/5įdQxÌ˙:ęäĩ`8Āb§¯9ž°ŋūÕ3؜֭Åĩõ֖ËÚØĢžĩŊŗ+Â7zß×´“ĒZ˜Č†pkŽļ˛ŋļͲĻåûš­ũ/íclōí #ŒšÂ´Ōī ×v…‘XõĨ›MŊ“\ķ‘Üũęwˆ´‹ĻōĨ1Ö߅./dDą•‰W×{+€*”uĒĒå+œ§jŠâ™Z †ŧōm"ëJ՞â‹zÔ˛i7zŨėwÄQõ5C^Ō¯Ę2DY#<õŽģ¡ˇmŽhö(^ ŽÉĨĖh¸îj“ÍT ySÖą|[ ɤžÍňč+Ī4IītæĖļĖņyĢxŅk'÷VĮ'Û­mKFtĐE˛ŽįÚ1ŠĘŅfÔŦ ûەÚyjĩiŦC¯$x>Qaô¯EŠ`! ÅOËČ=j(Œ’aԌgĄ§Íq^øØGá\ķiąEuo5œŒXēü‡ĩ{u“lĶ ķ— ČČøø#hį#Ģũjī…ŽÍ͡å`bŲÜ8QÔ÷¨ncv6’ŖQC† ą§Ŧ[XļîÜ Ė,ķܖcj҈šˇl|ūÕįĸ‚qéÚģŊ  wĒÕd’Fã5ilb\㑎*Õ­šCĀʃÖĨ—÷ļ0B;}ī’€ķéZJŖË(3ŒvŦûĨ]¤…äqU-™Ūb6÷ĢSۙžõz xbŒ íīVg¸HĐ`ãĨ6Ęn>aĮŒö§Iō\’ úšŠ$"cĀPwsš|8ˇĮŒüuRëʘūõGOj|ņŖĢH:'‘ÆjtĘŨqÉę —æ_¯J͏KˇQķF>ĩ,vÖVį"íWšÚŪYŠ´[›ÖĨ†ÂÕaˆ7æ=ˇ›’ęģz¤ˇŌaĩŒ”ŒĶJ›ĪkéSi=…P††×ãČmĄąŒWuŠBë§,ąŒŗWŽFŠâ-Rg1’j â´4GnqWŧ\ˇ—3Â!€3Q\ ΈË!ČÁ÷âŠčVŗÅ‹ä’Ũ@¨ôË[Ÿí‰dx™G5“ŠC%ÆĢ&΀÷íVôÉ.ôûøv°Ž˙Ä:Ĩô5˛ũ˙ŊZÚ)™í!{‚w:äæĩJ$MûŦmĪԀ…Üã,)VSæņаK’zP¨ČmĮ¸ôĨ–Ū,€KSb)%ÃÂŋ)ĀÉŠ/ā“š<ŗ§uĻF 6N7š´#*…s’zûPˆģ”€28Í]D%yuÎiT`”b4ŲVYAčJ# ˇ?ZyÁ”ō¸ĮJc˛*d7 LˆÆ¨íĀŽ•eW(ŽŧšÅ6O—÷ŒHĻĮšËËȨ™㌠˛Ņâ0댌)LЁ€7Ŗ‘ļŋMŧũjHœ;xŠ<Ũ˛tíīO<ô8éNų”n< sO-¸TRēĮĐoį)ōĒH×ČŖ>Xį‘š›åEƒíNQ‰FX(Ĩ“$ÕåEųzžš¨ä…%!¤QĮJ‘’C‘Ā×@;ōzšj)ÜÄF)TŽ2HÔđ0›°¸4É#_•žB;Đī˛P ‡ĄœA >aŸZdÛ8#ĻjēŗîeڝĀųČÎjePÎTã~”ä@mÆsĶ4ųH—!H<Ôr8+ڸ߈>Ël Č8Åt: ƝŽåXŽTÄ:}?­Čą.3ÔųpU‰nĸĢî`21ķ (V“g”XsÖŠŧ,ҐĀgŒ×žÛ¨_8pĪL×y(d…H#i'˛8~Ø]0éĀŠŽĄŽWáFŪ0{Ķ#Ķ äzՈ­ã†ŒúŠuĩŒsgU?QS2ūAf+ÁÅA+]ān*S!u@ÎÜÔdgcŌž‰Ÿj˜F6‘Ÿ˜SŸpPÄäzzĶK‚ÃˇÅ&Pœ–äĶđHb@ãŒĐާ >Üu›&Ų÷xȧįĖ•^ô‚O,F éQÜ3˛ūëĪ54AŠ|ÄnÅ2A´eÛ§'&vXsښQģ cļ)Ŧí°ŒqŽĸ‘d‘”#äqÍJs€āíĻ4 ĘŎ=LĒȍ’y$ÔE7I°žķ /”FtëMÅÎ*RœŽsĮņô‚Bf[Ĩ>XÉί\RĒ‰āWãīŪGå~•ŌiāĨŒ8leōŽVĘö ‘Udæ›=Ņi~LZUˇR7ĖČcŠËY}ĄaI€1÷Ē÷Ûđf7V'ĐĶĀ&Ö@ˁĐuŽßūFãČ9îkŧÂĸG99íQ¤ŠlŒõ¨%„É7P´GŅ8‚€ō}*ėŌ"Ûp9ÎECŅĸ1Ū>n‚Ąf.앇ĘzŠŋaå9cģ‚9úՙc¸$sÎEVŠ ͌.îqQZDđ]8Ážĩb`ōz Ī{@.<ĖļÖäUČO‘–'!ē 621ÎÜņPIl€ģļ˙YŗTŽ1͜uŠ™Ę1;ĪĨLˇÆCBžk+`E@˛°‘¸¨L’ ˎO šĸaus3)$ŽÕĩ§Î<˛JüŊjäQ‰˜0eĪŋJ.3šĪÉŌ›<ą*8ÍE Īæ&ãōŸĨZŒŠģČ< ņëO˜ÅÕ'îžÔø•e;BƒĮZž(I^>”ɧEŨ…Ã)Å=%V•[ncdķÖŦ"…%FĖVfl¸Î(Vķ%*vŨģ›päô¨ä”mÁ"‘yn1×4ōūPåĪ­BîV1Âō}{WãہžĪqģ­uúc°„ãĒžj°ņĄĻM´ČŨpA¯LŌ¯ūŨ§ũ É´•Íy߈u›ĢB[d•éĮzĨ&‘¨Ãoö¯Œ‘]ƒõŲÅâZNÄäás^™4’E…B°aÖŧö؃ãĪĨz"ZųąŠP įži­l" lĮ\͏2>¸Ēí$Í!@ŨĐT736֌.FßZá5/]ØŪ”ÚÛz­­Vžũ •JDy×QiqÂąĘwÅ]eĮ–I#V"@6ą Ūžž[–\åŗÔUwHZCōŽŊC-ô ˛9c&›ÆĖĖŽEIs2CY”ôĒĸų]†Ö]Ŗ‚3ZŨ(žGzlڄ6ÖBTõÍdŪkđFŒ7‚sØŌXkÉ7Ũ|UĪĩĄČdÁ=NqRĩĖxSŨŗē¤š–/!vļĐ:ķ\ļˇâĶ`Dh˜ 1šÔđ¯‰Æ¤„=뤸ģƒqg•qØT)pŽÛ˂¸éN3BT¨~{`Ո]"eų”ąsÍ]Ų EmāsÉ4&ŖR”R´5če8íŪĢGq™ķ0$ö&­Ā9 Œgĩ2ãPHeōÉÎ;U¨%i ß!ԛ”ĨĀ8ëQ‡Fl‡Šqy‹ĀĒŌ]…ÜęÁˆ+šOõ°ˆÎ}kr˙Rˇ°ˇI&—Š˛ē–Ũ8ÜBۆ7 zW=¤xÆ=SR–Õ÷)Î9Žâ&ˆÆd dlŌ9G#p/î›iįÖŦ|Ŧâ6Šg—´ĮŋjA"(8öĨI>ōÃ4ĐĘŦX•94Ŧā€@:aFF3ÎjŽĄ¨Į ™duDCŒįŦY\¤Đ,ņ˛Ũ*ōJíČÚ9&›į Ŧwdg ˆČ6† }Á8ĄåÔą§´¸Ûˇ<”Ø™¤-ķtᚺ›ã\(ლV;$ĀīĶŒĘA,ĀsŒÖnĨŽAĻYx÷5?ږæØL„jb]МôâŦCqæ ˇ~™Ģ4ŽßČÍtē^Ŋo¨BļŌ•æ¯éž‚=UnŖ2âģšZ w ģ†8¯8ļē˙а;€šõ.cû6ķÎj&šPA4Ųˇ4‚5ÂŽ*SpBWrŗüǜŠ "‚Hį5į>0Š14x6y­Ũ>ž ÁÛÆ+“‹SÔcŧ’•ŗœfļôfûûYmærĀ W¤Ą"?1H>ƙčäf$€FzņU5›×‚ÅÚ025æÚ—RĘōÜ끜VĮ„uy%¸’ĨÜŠŅ‰¤ņ7‰%{īąÛ08ČŦq.§gqovÜy­ÍKġ; ĩ‰ŠČÃąī§Õ-äŒŧŽCœeũÛBc€Ō8įڈëMdžI–Mjk:•ÃX%ÕģŊČŦ›mOVšĖ4NĖ ķëZ×^"ģ‡LEœ!Ŋdę6÷ĶØũŠÎđÜō:V‡ƒŽE­„Ė~÷đĶ'×of–vyŠĐV¯…õģ‹Ôxd9*1ēŗ5íNķMÖ{–`ÌRïjļˇĐĩÄŽbvšę'mB ‡÷€sšęšÅ%IJd‘Ķ˙¯O‚QŦ‡+‘ņÅöĨaåĪg!uš=?Śŧ–“Oį—ŽiÚgŠĩ+¸Ļo4•Ņx~mVõf–vũŲ\€xŦ2ęUņƒ$č°j]Ūũž8ŧėŽxŠëü:nƐĸ~FŅÅp‚iŦüQsöXɐ“Āí]6âN q,ī/ĐW¨E)dgR<Â*Fgh•œØę*ĩÍôIfŜôæŧūOÍq|ÖļjJĄÚXšģ¤øĸK@ÚLejž¯ã Û^;Cž3šŗŽxĸ˙JŽ)ą˜ßŪ´%ņSGĄG~WĒ×:ž;ē`ÄŦŒx#ĩQņώzö0…$˜$Ž+Šđ]íâčČn€XÕ8&Ŗ—Å“Ũ]Ë‚ ?ŊRi~1ûLĪk*ųsՍĒxâîĪX6Ž›PôĮztž6šļtyŖt‹ŗzĶî|uq" a‰ŧÕë¸ĐudÔŦc“pŽ[=ëZ91 @Ĩsœ{Q" Ŧą†ë^wãË֊â$ō÷ŽzÕįÖŋ˛<9ÁBČĘ=8Ŧņ)âŪ6,95z×â Mŋŧ Ā"¯i^2†öäZĖ HzqÖēôšUŲÁ=*D¸Œr­íIōM:6ĨpŪ:˛ ķ0|āôŽ‹M‘“OYē ķ˙å¯•ąÍ]đC s[^"˛´ÔķČŪŖŒWyĨ^X?˜ Šßđ§‰.RŪá΀Ojôˇ2Ú(@­žõįħÅĨ ŒfŊ2HŌÜžā(X€]Ää¯#­Hö×$ŽFqUšF—åāsŒúÔŦR]úŒW–xēô^_lHđQą[ZMø]#fĖ„^sXZTB]nY%\)ųĒ[Ä^*WAōn¯Zļ•]PēáHĻģ™ÔEƒÆGÖšŋ$ņXH!ËvÅyŊē1dF2sšąĸK5¤ōb6 j]^ÆX¯ŖģØ[w&ĩí/Ė BZ^šëŠƒWĶgŽî ­‡h?0Ģ÷zĩŧļjąGæKôéX—öw wo},Lõ㊓Ueŋ‚8-ԒNxĢZ¨~K]™r9ĻøaƒB!1ōq“SøŗIdŠb @<ÕkYFƒä ņŒbŠhNée.ĐKžŪ•Y#yŧã8|ú ŋá[‡ąš‘vģą§jĖŗøŠ9 €ŒŒtŠuö{f~PĀã>ŋk=õĩÜHY#Æ@5ĄąļQ@ņ–Ā\wĨÖ4ųīô‚ë @ĢĀf˛ôĢ+fĶY';uÁއÁnËÉe†6Ø?ˆô¯L†bí´ž=…=⁠úÖNģ§Ĩí›(Á85âįKē‹V–ÁCvõ§Ûi—Z~´-‡8Įĩ{ēXčã…]ĢÖŧŅ.ÔøšäÁ$ä*ĮŒ-eķ­îJąÎ tšˆ-ūĀ"?x' ×-§Î’xĒyÎ6qLšá‹ ‘w|¤ öm4Éä)~Ž2ĩs äąÂŽÕ—ĒDgĶn#^Š Ey‡†íŌÃSšŽđllœ]5ŧVKĒ€™‡-\į‹ĸxĩûiœ†OcMņž¯oq§ÛÁ'ƒ‘VŽnã> †SČš˙ėGŠÕ."˜”$š­¯ĢI [0Qō“].—~áՂ5hVĘbdƒéO¸‚|*…@Ë/"ēߤķdu%:Šé´]~-\Čą2‡šßOƒØwĻÜHŪYÁ<âŧ÷Įˇ%ē+¸‘NŊ)uá#†R‚1Ęšoiļ—1\—Ã6qOĐ´Ëvņ\ĄđҧđՍSȇÅÖËģĮJėuŸĩI§1˛v0ŠøfÛZû`{÷m˜ī]šPš9âŧ˙â ÃÁ*3Œ¸ükĢŌŖķ4Ëv|Pq_2ø‚õouɖĶøRŅΕ)Sĩ› Ŧ;íFöËSa$Ä ÜŽÕŌ6¯g}§0Š;y⸨üNÉūøÁėz{H–(Ō7LuŽ>Üyž0†•č˛Œä0âĻq†ųąÅ\Up™7ŠĪ‘¯”sš<ÂÆũĩs ÚM1˜Æšcģĩ,t8ԆT7ˇZ­>‘g™v0F1YņhļĢ1‘P+į­n[HQV>‡<įŌ­>ävíÆs‘֊߁,c “jPȐ.ėōMXĩŌŦĖ…Ú5 jk.ÖRË_—’z[>Ō6S*w§jŊwgo4EYTäãÍgàŲDž`ˆ}*KĢ/-ÄaãiÅRĩđũ˛žåP¸Õ{áĢKéÚR_ûËRØč–Ė Aé“ÎišŽiĢÂĨĀ;M`ŨøÍØ&ÜãĻkN Û.ž-™~@3ƒÎiÃÂļ‚ōŨĪfãGļšÄ[4co@1RižļąŒ„P21ĪZŖsāëk‹Ŗ2ƒīÎ3Vėŧ;khÅŖŒo#œžĩVįÁļ3Ę.?x[$æŗī|)ė Č§p7T˛øbÚhÔd*öĸ_ -Ž“5­¨ ‘ÆZŸÁž—HÚ_õÉĪjė 8üi E”üŨë™Öü3Ŧû]AĀã&›˙ĸb‹5bāķTô¯ĻžŌ,.FO'5%¯„cļÔ ë!ÜŲįÖ Ŋđ8ģÔMؐî?JęŦlQ*9Ü@īW"‰RBN@=,€ŗ`ķo,ÍufūčˌúWk¤]>5pûWÎv^šiIF{×ĻiæŌ$] :zÖ7ˆü4un"E ; 䏆õ$ʄ!EnøÂŽ’ųķŠ,9WĨAo‹ ˛"—ŠālöGãUˆô0ĨãI‹ãh#…d’AĐÔŅÖĖAČâ̍X6âĮšôŠZU7`Ũ…Rō Ü v0;V‰s*¨ä‘Æ*‚y>íĮŠŠ­bw îĪ­8@U÷p}jũÛĀ@žz Ž÷™Œ-ĐT*ŌŖ‚ŸŌ¤KĄĖ=ŗZÛįYŠIfō¤Â ŧį4ņpîʧ8'&¯đ \Š ōė˜ 8'ŠĻ<†ŪF•[ ô)ģܝ[îō­ĖŠŽŦßíU¸ĘM1}rhXÖ$%_9ô5<0FØcŒž•ʸYpŋŨæ˛`ŗ ƒĶšŊ=ģŨâĩScÄŽôĄ—-€˜ũjfp>e ôå“͏{.Đ={ĶģA–8ų˛ôlj9Yʇ#×Ū´cēyP€¨ĢAœälĮLÔw–Pü.G85 $"‚íĮ¨§…‘Îz¨ÎhŽ/*PGNš­,?¸#=j -Ņm\“Ķšĩ ĒE†_˜Ô["—čøÁ¨dJNÕz)÷ZĄ9,GJ’,m'ŋ֙Ë)É?Bœ’ ž:œÔģ”)?@M)H€ ‘či…§¯_jk‘"¨Î3ÉīQąßąH#>•#ÄŠĘ â­mU]Ū‡ĨBNAˑĪLĶâB%Á$ŒTs‘ģgžj)ĄfÚyb™ ą_ŨM\EPA™@ųTôÁÅ$g÷DĒõUã¯@ãŋĢĘęĖĨœuŠb!J‘“ÉÍ:E (*¤ķÁ÷ĨwE˛rG­pū9ũŨûŅÅuvÂHC´pMpMfĨ>TSĸä‡ĸ‚:sNŠŨ“äpĪ&‰m娊0zæ„ˇDųWûTō\Č '%O\ö¯>„Ŧž0‘‡fģ{‹Đˆ‰ģ~uĨô$žįíWäŊ… P˜\/Zu¤Éåũô"Ÿ9P7ev*§kyˇ•FįVä•^Lîųō¨äh× …p;÷¨]ͅcƒV..ZQY—ŸzΒXŽrųô†-ˆîŨ¸öŠĸU“?Nē|~^FÖnÄö¤†"–#ŠdāČŇ\āqڗå‰J–į)ĻI¨qå#œ“Q›•ŽÎ¤ŽŖ#4rŖ´ŦF GĨOnņ;ŌĘÄC„`0x4ČØF[ÖšûĪYé“ų3¸ M[—^ƒė‹v]Dxâ/YļԔ˜fAäúVƒŦŲNpzՄ†_Š<˛ÛJ‡Ĩ6nšcČ÷Ļ ŽŌĎGŠĄmņän>•$G‚ r*ųc‘’*+‰Ø ĀÎ1MŠC"1uĀSJ/b‹¤Āc§‰•”ō:°­ŊÖĮLŠwŽzķNgĘ đSJΞX*1ĮZˆnÜ0ģŗÎiJŲ2֜\„Ž íŠl“‚ ČāwŦ™ĩĢ8§ōd7Ú´„&X••ˇ Ŋ}k…ņØe´ÉįÍÖi×ėQî<íÅ l/ĖAäU˜II0ßÂ=)˜wmįŽ{Tr1YËāđ=iļ“ųÁĪLSnXų8$ņŪ¸-9Īü$ĶaI<×Qym+Ų3e•œ\ ­ÕķßÉn˛19ÅM&­otl‰#Íhię•#1HČ5Đ_kĨ4<8ÉŽë7ĶĘĶ HĮjŪ˛ņ%ÅΙ$eš˛ėĩ­NæY GvuėkWI׎ųĩ¸;HéTĩĪŨDĀ%!PņQXk—R\˛´œQ\øŽöîS2í O~ĩŖĄx’āŨ%´ŌeIÆkĶ! Đ ͚%Î'ާĩCzEŧĶMyæŖâ ˝GėöyČâ¨[ęwÖړCrĖsīŌĸš×īŖÔ ~^€VŽŸŦę #‰ˇąQIâ ģųĖí´)ĢV$¸ˇŊ]ˇ=gkú­ô~ršĮƒTĻ×oŌ8åķJŌˇ×¯Í™™_žÂēmj{oI=árÄdg­r—ŗßjv˛\2æ>Ŗ5Šáŗi¤\?qÎ? Ļ΃šë´ djö‰ Vįæn+kl œgԜŠ|ĻROJdeļdįĨQžÕ ĶĐÍ3íQëX7ž/BĒčĨĄĪ-ږī[¤ĩÕąg\pA¯7ŌŪģĢ´¤Éōɜįĩ{nš Z,rs€ŽĮ–Ėōڜpdũ뤴Ë˛€"’6Žkž@6Ž™Í6<Ę˜ž1Úžj BÚIbFĀU`cÎ Į ēžFˇ,HÜ{ ät’O‰¤…÷5ØjĖ‘XŗoįĢÎtˇ#X–B¸Ũ’ 6áˇëk)ÁįŪ´xé^J×É˙ s\d*n5Ôk÷6wē?™Œáp§ŪĢx.ÖÎęÁ–HÔ˛ķ“Tŧa§ˆ/íJ.#ĪAŌ§Ö^$Ņ‘b#{ŽĩVõ —‡QeLģŽæŽh ooáŠŲÔ Õ? ĮÍ<Œ<điÚĸ?ģ.䁊öXd2āg*ëŽā™ mäâ’6RÍÉŨŪŖētŠŌBĀd)"ŧNâökŊná“Ē’ õ¤đĻ l…i-ĮšQA=ECũœļˇ9Š%õĢ2hÖ×RĢ\ ÉãŒUëŌĪZIęjíåŧ“ĖŠ/Z u ÷7 Iŧmķ/‹ŠéÖͰ*%ĒĨļ•m„¨ę? ޚeŧ’BŠž•škĩĄU éŽZ_éō]É6,z Žū ˛+$Kĩ÷dŠ“Rđuž ¸ÁCÛĩ[>ˇM/ėG‘Œg5ƒáX4ĢϚ2sč+Ģ–MŦąĒ‚[“ŽÔ’†‰2ŦpG4čÉ`Ŧ@ÁV'Šî^ l(|ŠéÚŧŖÂúsŨĪ,GĖœį"Ŋ*ĶÂ6öÚqĘÃæ-Ū˛-üņˆ}ąžNĶ֝'mĘ˜‹.ycšŗyā+{ŊŦĖpœzWEĨi˙Ų6Iļņ؞k#]đÄZěķĩÔõĒ˙đ*éífY™IåZĮO˜ŨĸŽVUî5Ųčš]¨XˆrŪõ¯ąˆŪHĨŒ„m­ĐŽ +?ČØ#$Ön¯¤.ŠjņJ‹ƒŌ¸Šŧ-p˜‡íBö­åđôqé/oēŌ˛4 >›{ž9NŌyõßGØ š+…ņļÁqd āy€Öô… Ē3\ø!a#+ÎjH\<ã~ZĨwpIoœ|ŪÕM˜JnČę?ŗ/˜$c{ ‚ōé"§ vš-*Bū#r8ŽĘæuH†æŸ”öûЂIĢģh ÁwZƒėŋŧ ā;g­KÁN0?„š…ĻI$ÎėcŪŖVŪŽX÷āÔ˛y‰˛sÛ5cí(ļÆ9pŒœĩc;ų“¯–xM^ØŋëAĮCK,ÂHvŧŽĩ J%G õĩäšŨōîúâ”H^5É#5E‰]ąÔúÖ{Cē2ģn_Nĩ^yB @ôúUx,ˇ9ub åŗŪļã(×å%qP1*r č{U¤œ˛æ&€äö¨#ÜŖæq¸žrjÎôcģ ØõĢvŗÂG˃ŽŖŪ Ô7MŅ•æ¨"yløáĒhÚĸfŒnlķV펒åW bĩĸub3žyÍ*]#ļĮ8ĩY”¨‰v°TQĩHÔ„Ģ|Ø&Ŧ“ĻÕQ‘Î}j Ā„ã$r)¯*˛]ÜSdV!vjė[ŖŒ` šŠöįa@ĪíMFw úōyĢq4{øÆ@īJˇŅ†+ 9%`Xą=1W"Ÿ+¸uĒŌŪ,g+ÎãŌ¤–Hø,>fĒx°r3ÍK Ŗí%ĪLp1NiA\ ĖĄÔ,[Œt¨­¯VIž4ۀZ¯n°# Žž´ÎDxô&­,d|€ŌŠ^ÚĨÕŖF˝Ük"ĪI‚ÕŗJ§8Íj,˃ari‚F •Į<ÔĒčÃ*0O?AND-!ÎÃŌžP dãĸųLxęs’x§oy^qĶÖĸŨ¸ąVuĢQ6ĀI#4ģ›qîû\SŨōáUTāuÍBÁŖbũ{âŸ5Ԉ×?xÕ‹ÎäæŽÂ†8öį8¨ŅÎ@žyŠžB\Ļ;WŸxØŧŗëōČ+­ÛEå¨ÚTu¯;†íÔíbvãքwŪUĄAĐžÕ“=Ķ\M"Šā)mį 2ÍōŽõ5`_FĀ8`Ų#ڙ< :ģ /q\}”†ßĒ=N+¯Õb&ÄHŧœfšâŠmAåCWQ¤jOzCČX ôjÔģDÕÎ+:ÚāIrrĮæįfpîNzP6Ą`ü‘Å"ߔU:“ލįŸíCäa¸wŦ›ũb==ŠžŨę֛Ē˙h@>cŌ´na6ęUXÃ<šŽÖs€šVa÷ŽzV€•JüÃōŠū× m€ÜcĨ6{ĸm‰\Ȇs#ČNrZúG•v.sÅjY#4*¤6ō{UŸ39ˆ7qY—"dgrsÔÔ6$$3?Ės¸Tâåî)`0:ŋ‡Šä¨˛Ž5øt§*XŨjEĢoœíõĢBfĪz €I'o4ÅŨ-ŨŖąņßĩ˜“æSÍiŨj–ÖÄ4’ĒäāUŲ.VįN\rŧYļöėUR9Sëë[aR# šĮ4—2ČĀm#ƒØSmŅåFË.sÁÍIe›…=sWw Ēw9Ē—“wĄĒRwv…×iėj{ižÎän?sPę:ŦV’Wz[]Z=N öīĐõąÁT CzƒÖĢĢŧSf ŦÜJŗ3´„nĸŠģČ%Á|Š)éž6ķ pCTĮ‰-Zå­VXąšĩl‰ÕČUĻ Ļĸų+ĩT[–ĢeÕUCŋ$āf§R6į Hč})>Õ´ ‘ÔŌ´‚Qü8ĮīU|Ш~P§ÔÕ;ģŅ€Ą˛§ĻZ’ŲË&ˌÅ9Ĩ1šÁ1KĈ››Ž•Ú¨&ķĮSš‡QÕí⌴Ž•ČĒx/säá}+fÆfš%-€ _•Õ^3ЇĖÄĀ#×Ĩ<n õéH/`šĄp°’Xāf§˛™egld ą-ÄqÂĪ#ŽzôBĪWļžvXdBðĢÍ0lļî}+†ņÆåkYĪÎ+­ą öãäᏉZŅĖQõõĒļž-™d_?%kŖPˇšŨރīĮĨsž(”ĘVē%‡‰]§ 7~•×Ú\‰`g ķcX|m/ˆØ‘Đä×p$Ũhņ˛´3^g­Ä‡Ä;Upģ‡ŲY@KD 9Î*îĨ}Ŋ줘'`סs5éę8āTņkˇQŨ˜. j-W_잏EV;} UŸYŧĘË"íVčkIõgĩĶ’pŲČŦ+ųī.cûL‰ō0Č5ĨáųÚ;pØ ķI|C{{;$9;zj4írhŽ^9r$ Ôã™×@æēÍėŪZ–#paëZ‰ qBIA–4–°'œNÕ,zJZŊm3N’X΍Žx˛øJglކĮ[7z{MŒąæšËŸÜErҞŽįNŗņ<đ\xÆŌ{ŠéîüAV !n\tŽ.ūęâú6™Ŗo,t5ąāY‚´Ŋw•č[nXu85RŌ„Lcv8¨õåﰟĘåđx5Āh/ũģ#:ŠqÔT^%Õ.šđ&HMÜ é4VųôrHáƒY‰ã¸¤ÚŸĀk[Eņ…ÎĄĒ$LŖs^ˆĄ oîGJ†2Đ€ą¨ÆzšV™av;6 -é\ŗãi-îĖãvĶĪ4ēoŒP›ėōD7Æ*ŗøĶU˃–ÆęšÉg|„ĘƒŒšŅ׿[ÍĻb˸bš-ÄŲ@c…Y°rkēŅŧFē”0#ĖA÷Oz­gâi¯u—ĩŲ‚ŊqO‹ÅōĻ­öQē‘“UuŸIaĒŦoą¤ļņ‰ŧžōY Ą)5Íęō­‰Ve,ŽxŽ×Jņ¤'˙B–âu`Š;ՏŪtAļgĩu:fĩĨĻ ã$gĀkž+œkŨ2#Véë[ˇw ŠčŌģ ŋ/úW ëgKķĶs2“Šôß ø„jíV—ī vŊãK; ψ~ņ׌ ËļņŒw˛’‡k÷}i­ãȄ­bx#{Nņ\7¯´m÷ǚΊŦÅȉ{gœUũĖī f1ü$U_kđHŗFŽpGđõŽkÁ2?ˆĨS+4g &Ŋ{ČGä)¯7ņô˛lYÚŠãxÍvļŽņYŠAGZųŠY|ëŌ\åIŠīVØB<ŽŊęí„ĶËĻI€+Ią"ôękJ?´ĪˇõæģĢ<Ų¤k Ęâ¨éˇ(đ}ˇ\G‹GR*/ŽŲáÁxĮ皃ĨÃģĮ¨îĄit8Œg<ō)nî"ūɎ-ß0K`|ÍHá69¨4ą\8›å#։­ä›X/nšį5¨OöŠīfĩ5™cū˅QN9­ß dÛ ¤í “šę–F– p'ŋjt?+a@-ŨĢ”ņ…ôŅÛ´r§<×$llƒ3c=…t¸l|ˇ<ö{I­c ŨVĩČâHbd1āâŖģŽy´ØČjâ´bš…|8Ņ0ˆīÖĻđ0Q3ââŊ7Sŧ˛œžØéPųŦŽŨŋ6sRjSbÎF8 ƒ^]Ĩ\Ēx†GālSüUûZIˇwjÚŗÔ-ŖŅö ũá^žĩĖ%ŦwFGWŲ!=+SŠ-ގŗũ+ØUĘF &IøĐ4‹• nĄ/9^+ĢZG>­?’Ä8&Ŧø^9SXō¤ŒļGšÅˇ‘âe,…Fjfxū×SÎášëī¤W𘠚&:æ|6öé‡Q¸ŽsVü6$ūÕšhūį8ĨĶnü¯ČĪ„āķR=äsøĘ6Jƒ‚EOâô†įXļ€ģ°kĸ‹GŗXRpŠŪ qē¤`ø–!71և‰ŦĸŠĘ)-ŋˆ€ĒˇÍ#hPGvYdč¤Ö#ÚŨD¨îÅëšõß Ũ+iļáCŠߝ¤S õ{ĘÄ@9ēņŪŧˇâSĀe€—!ĮjåŦžË,+q {z×s­‹ ?a`¨Æ;× "HúCēmT=­ŋ_y!$|äãŗĩčĸ>%„§qëé]EäļĐé$dn Írž˛†č]Há2˚ÖđlĢĄ|Ā\ôŦ9ãžįÄ7ōÜnĢZf—<:ÁķQiööķøąã˜(žAŽæ_ ÁknķÚü¯‚N=+†Ķĸš—Uœ¸É›ˇ5rģkŠeŨÁR@gÃít÷X>Įš…ņ”Â3„ĪnÜ׎īėå9¯2ņŠvņ”Éß]Ŋ›#ZFsü5ōęÆ^įiČį­åŌāXĘücšĐ°’ÆÎÎB˜nÄV4–đßŧ¯yÅRļš[+´ųˆ¯Cą‘.4ņ3“03XētŦ|DÆ>Ŋ:Wcu –-˛),{×?˙ô#)QÖ¯YøjÜ33"_Jšm °…TqËS$Ņmå|˛ ‘÷‡zd:dōD<“MÔtH/—vĶ‘ŌœKËĨšG*ĮŽ*埂íáŧYÎwd|ÆĨÖ<#Íā”ģ VŒë $@’ū*ÍŊđŦ77pāäŽĨ>×ÃpŧņŦĶ™U:+Túī…ãžōáUG#˙IH‚ŧšŽē2Õ,ėb‚5qšÕYpÄ;Ô˛™UėpŧW”xžÚâ]O3@Y?•`G¤,„#u`x5čÚÛ44ļš%›oBjđ01$>a1‚Ŧé~‚Ęã%G"Šø“Â?mšI!;z¯máI㰕˜ŗŽ Pé>’ÍĻũëO@đĒéW2\3–GЍu ų×íuäÎ@*x49PųŒų•‡'Ōąí|z5QpdļI¯F‚ [yRǰõŽ[Qđ7h´o-ÜķSiúÛļSæI‚ d_øf{;‡{I68+Tü9áųí5¯´ŗ“Ī5éņ`€1ĐOoĨy÷Œ•$×ė9P ôŽžŲ!č2žmŋ°šÖéˆSÁÍ1îŽgŒDĒzWOĻhÚd…Ôī# æå‚įO¸q°ĨEŧ÷—8Øz×qoo$6qĮžÉŦŨ!ļø…ĪŲÜÎcļ2‘’ œW;cŽ­ÆĄå“ŽzWGö•–B"āw54e´Œ@1V,f…˜ĢHOŌĸŧ–rÅYqŸJåŸÄ-ÛĄs‚qôŽ‚Î˙΍@ÁSÜjcr|ÕÛČÎ1SĪ sÅÃá‡QUd…v~ėŽœæž€Õ AØŖ9$Šļ*ßxôö­(Ú0€sģ’nÛëUČvė\ëS)hâiā})žg™ōĄŗ\Ķx†}IíäœlĪ k§†{s ´xËôj9UˆC—Ŋ3DO\ŽųĒLƒk(QM7[›`ÁĀëPƎnōŲqZęÁŖÉ9#ĄĒ÷R€Ĩ|ąÉĒöĩŗÎ!IW#ĩo¤‰#($sš•åå yÅaj‚y˛ę5IŦĸސ(­+„Úzî+I˜šnEGÂ>ūrGZĢ<ę‡k°=˙Ī54_ŧà ģHéO‚ŧˇųI=*+ˆö@,G ÕO˜”ČEG#n˜*sÚŦGļ 7“ÉéRI~žk*>Ÿ‚fÃp:f¤-¤`[ ØÕK•IōN ëQZĀ#™B SÔ֛š‡*IÁô¯<ņs§ü$NrųæģXÖ$ āîŧ›û>;Áã'qčj܁@hÔŒķZžXŠßË^@āÖlú]´Ģ™3gŽ*tËK|˛ ŨQ\ŋŲŖ‘°Ø \Ƌ+6ŧ[žkģšũ崁ēé^hĖđę’y ä+SK×Ĩĩē pĮëCQņGÛÆĒÚë×VŽžëžž•s[ŧ¸—NY#‘’š2Ękš ģNĐrI­Į֚X-ŪŧqV-5ŲžŅåOÃg"’īġ6÷RCĶŪ?^ēy]d$.3“PI≖WŒķ‚kgB×ÅĖž\ÄĢį°ë]#Ã,Ž],8öĢŅ<°Û퐜­rž%Ôåˇĩ&0ß6yŽgÃˇˇ^{c,ŦyŠ|Oå¤ą:įvyĸĪ q!R#R9õŽŌ ëy­ãA^M`Ëâ{xŪDE-ĪŪĢēv§ÚoĀlúVÔe$AĩqŪ´au–R3šāŧg¨OA!}Ģ—ĶÖa*Lw9ÍoĪ"ôā×IŖø‹ívĖĀqÉŦĢĪMm{åí#ĻļņŦ°Ü‚7CRßøÆFäD!=kBĪWiėÍËdüĩŪ(™æ)l…ˆëīZú'ŠAœÁ8+'ĨOã˛ęĘOZ—Tņ ĶĸIŲK,ƒjcøžĻ-Ņ-XƒĮ>t›ŠŖŊv:.¸u dĢÜÚļʖq“ÉĢAc$9ĖëŪ%‚Ë÷HûŸ m^ĩaâņ-Áˇ—tNxP{×#ã%6úĸL™\ķõ­MÆ2+AęBŒ ÕÜjzäzm‚^Š$5gIâ˜įŌÚņQŽGJn™â{køe‘Aƒ•5œž7…Ļt#k)ã§câģ{ÂJî Ŗæ&–÷ÆvļāF¯æˇ`*KÃĒ)E 9āĢb¸šŽ›KņX&F ģœô 7Æ6w7imŧ†#ģ(HxԂ3ÜÕ9ãv™˛Ã\įˆ/ŗmZUÎ@éī\g‡Ą.C0cĮĩwž!ŠĘÔƒƒŽ=ë"/ÛŦ„œĸˇRkĨ´’ßQnæ`b¯ZFĐîōAéÍXV@H2;tÅrÚ§Š­me0ÜĘqÍIŖkĐŨÄÅYN ÖfŖâ›KmHíîSČ+JĶPMVČÍn<žĩĮØŪę âà ĖÛ7p3^ƒ6Ą ™S3>õR=~ÎōāĄ<ZĨ‡NŨëQÛÍĘ|?LŠģp\ÆXķëÖŧĮIJ†ņ ›98ŨÅwöÁ$ˇMĖŖŠķģPÍxۏËÚ´./R%ĀnzqTž÷1ĩFŪęI%mįŠ‘Ë4…”|ž”ë´ŽkiŒ6:W#Ŗšü“‘]Åėč–.Ŋ¯5įԁĒČ[§Ž*KģuŸRAÎHÍ;XĶdˇē@AÁ4znëDg|œđ3ZWĪZ–O͎•KB(leËázÕ{zÛ =MO}—XQ0ŊHĒ÷ŅĒëĢŽųŽ’]:#Ļ<Öë–Û\e¤5ËŠ!N*ŲŌ-V MĨĪŌŊĘņ<ĀČĮŽÜĖX–īšåüI rظōūeSÅs^šhØÍŒ–¨ŧS"M4^Yã=1PjRĀē\J‘üüsN[ëŸė-ˆ1ÔV]ŦrÍ UŸZŊ¤}ĸ ŋ)‰vÍz-‹īˇ8\sRK;ÁlJŧWâyšKReŒdãŠŲË i* X-˜´ÃåÖĮ†œŠ`ō8ĨÔŖIučō8Ģ>#Ž8Íē ēUÍQ`C@ Ri“<š‡įĮ9ĒūAÔĻleN9ĸsŋÄq˜Æ~lU¯•ûEą+ĀaČëKâkŗI‚5# ĀÍV˜/ü#‘‡Čô5Ī”F ōžÕëž 3J…Bp+ĩTRĒĮƒŠ¯{æGní׎yæ—ÅŒ.Žūję–É{ î՗â͓]ÚŠÆ€j=ZŌ Kkfˆ ņČŽģQdŧđŒ`€p™úV#™e!†Ī˜Y/ˇ§áT,4čnuų@9@zWMw¤Cki;ÃVÛÔW- Ú}ĒáÄ͒ŊšēŨ+Eˇ´ŋy˜%s´W/ĢÆ.<^ąįå-ƒZš¤Ųk6Šw û×ĢXÜ4v<Ŋ}éÂčĘŋ|x?į5›â;HįŌĻf!kĪ<¸ŧšfšƒÅ2Íq¯Åoô|ö­ ~ÚÚ=0ĒÃώ|,˙Ų æg§ŽÉÃHŋ•eęttŌ(;°Myį…ĄQŧŧkĐŗqžÕléo¤KpŅɐÁˆšKĻēšŸtkœŽMt^šn¤ŅJca÷{ XŽŖ˙„ŅČ*Ÿ‰õŠn|@ļņ–1ŽôŲa¸‚îˆ!‘#H vĮ™ëÖŗĩ ŦˇaÔd“ÉģajļöfŽGzäĩ-Mķ! ĸĩôŸ˜ãä3÷&ˇšIJc…^Ĩ&uŒdSŽ`Yíą ˆæšÄđĖ"į*ØõâŦŪøfÖI"%qũi.ü) ÔH • éPÛhIk‘1/ãĩaÜh’ÚJZ#´Æ*ö‘ĸČe26YvŽÎĸ†ø›ËÛfËG€āwŽcXĐĻŧ‡ævk:ÛAXpÛtĒךFøBvŋ¤čAJĘÛØV‰đÄrß I=zSu .•˜ü āUųü1ŨĒF e9Šlŧ8–|’x"Ą“çgŒ•.yÁŠĄđÚÚģJŸ3ZPŅΧFWiSÕ?„gĘ;’îķWeđÄī§,O”L°đTŒJ3°ģũ&Î&ˇE Āu#5ĢæI°Ûģ99ô§;īRšČ#ōŽYĐZëS/n¤9?xT‘øváJ4ōÅgę~k­N0ŦNséVŽ|(.•RW#Ëbˇôũ/ėĪŗ3n\`V ×‚ĻˆČ#”ŦG°Ēš_…'ˇYv98>õ=§„ä´ÔŧÁ)š5Ôĩǘ M†ÁÍs—ŪšŽágąÂ#õ­=7@¸‰–[™Ap¤+_ Ī>šį‰2ÛŗZ—^šúę)Zl2ž•ÖAi,Ģ “qš ˆĮÆ2s۟oöÛiøppkĪmü/wiĒŗ@Åbc“ŠŪžđĒ]ÚŖįį^ũķYáËģ—Ž ŽaSŸÂģ6ÁlíDqĒ *ôrŽ ąÎ9§JVX˜60čkˆģđä֗’\X°Q!É•zËDĸi/_|’ Ú˛dđÍŨĨķIjTsWmtk īq+ũŽ[ûQ}tÜ`ģ“øÖŽĄái$ž+؇īGR*ęXęwE#tÛū/ZėėŦŖžŲ"•UŅujÂéq[MæDŠĄ‡ ™Ģ/q^uâé ø’ŅY†ā:ėâ2,ā!ĘįšÅ‰Ē–jŠ­tU˛Ą8íQ=€”Ģ*ãæĄû#ÄFsÅYIŌ)×ŪĢßH~Ėí0¤+Īô)?â¤sާ“]ĨíÜvņ‰N™â˛moí¯îc`prEt1‰B‚jʸdÚ]@MˆaA_Pj­Ō `Ür3Š@bā§9äãĩUŠágŪÄŽ8&­ÚÜĮw&Ô+‘Īę]ĄebÎĄēTĖ›'`ØČjŒ¯ —r ƒ[‘2GjŦ-VŽí%¸bŽ‚ąī5ČŦŽ ČÄdđ+NŌî+¨!š°hÄīšK˛Í*m# ™ÕÉV;G>Ôö‘e\ŧc‘E@-mîB†ûųæ­@bļ" ƒuКU”îEúâ‹ŪĄÍEwäČŪAŦۛTōPséXwp–™Nܧq]™´ÆhéĮJ¯qŠÛØŨfF-€+u+Ëhåˆ/ÍÎj2 :69æ§F-`[ õŠ­!Ęīoŧ;|íąI nn1U#\}õ Z+iMņ€Iėi$X⌯—’)ļĶFeŲ9aĪĩ\GŒ;g/­@ڍ¨¸%ą÷jÂ6õášĪ4⑯ûŲHæŖ–ęRƒįÅcË{mk;‘U‰Åh‚.aVLsÜUËdH›s;*v9¨­ˆxÜ*ŒjGLČYW'$v#|Ā9ŠdÚą? Ā‘$ Ė â‘ ŒL$čHČ5n)Ņ•ĀŪyĢ<9FҊ†EŨ&@ų}ht_,ŽrŊ*[€IÚŖu§ņ“ŊxĮĒrČĒØ+‚:šŨá˜VV=Æi&Á)fa´š¨"Ŋĩœ§qĪcRÎË$)Vū•R&ÕRAĮB*ÅäI1Ā$ô'jÚh'‹j8ŨßæëO’Ū5dp n)L!@c ŒbŽÅ)nŋ āsŠ|n›ļĸ€žĻĨ“ä_”†=Ģ"[ˇŽėBF įë\ŒÕÛÄļnxŒWw`OŲ—~ۃŦ¸áS mŨ8ÅPšHĐáēõ:Ę­d8ß­1"ŪTœõÎ}*hĸ@\ã ęk/Tų ¤dāįįÚ"˙ÅA(€+ŽÕmUėÎҟPkÎíŽ$ŗÕ$hÍœ+Ą°ņ ´æ9ōsÍ6ķÅ3AtČzTÖŪ*šėʱ랔ˇŪ$•n$m¸§éž%vš[iWnxĨņ=ėÖÖáĄ\+wŖÂwŗ˛}Ö#MMĒx˜ZÜĸVySéRhÚō_ĖŅO…úõ­uŽ?<äŽZĨŽjwVļ%a\Zåü?ŦŨ į%Y÷sÚĻņYGTžjoOkbˆ‰ō÷ĢĄĶõŋļÛīp­QžņBĮ'–¸bQZšvǚŒ;U—8äVØĘ[ *Œ sXš–Ģ%—Ėn€V]¯ŠÚ7ÜôÍtWZå¤6>vä–šųüX˛ĒåŽŦ:U‰üG˛ķchĀÍfEâŋ1Xn$w]ŧ@…ÆĐIāÖŽ‹¯ũĸS;ēV‰nä}IwŠîãĶ7‰?ŗ´hHx5ņˇ›kÂo=Ā­'Åj‚ DnžĩŪ.ŠÎå“v÷ĩxĶËl:‘‘¤uŽ‹BÖcÕĐ3ŒElĩÆÄ%6íąõÚY‘I<ãŊd§‹í øPc9ëPkŪ&6öŦa܇ۇĄKuĒjpȲžsÉÍzͨ ĒŽ2@æŗ|EĢ6ËĖ • q^ņ$—šŒĒā°‘ž\öĒū5‰­Žã™d`Åž`+KNņ|0ÛD’n+ŦūĶ€XĮwŧ#<×?wã›f įÆ{V捨­Í¸’6Ũ‘ÎĶZŅ¯šFėŽüâ°u_AĨŨ˜dbŦ;Õ?øK#’8¸ōķW-|Kō)Ææ¨ÜøÎÚ …ļg9jŨĩÖ-š´T…æĄoZ´ÛUĶgJÚ{Ô{pŽĒä‘XŌxēÁW>züĩwGņ:žī)Įˇ™ 7 vŽWÅĶ^%Ŗ5ŠØ@í\ׁõ;š¯&ÍÆ÷§øßY¸ƒËˇ‚F_0āÖN…{w§ęE4û–^‚ē}Yž×ÉļO”šÆEeZë7ÚÚZģŗFëßÖ¨ëQęˇēŦŸgb‘¯BJ›Â‰ŠļĒcy™‘O'9æŊ1&ÚB6>Mí´‚ôŠ‹ŠMƒąŌĻlŊG,…xSžÕBáA‘d šÅy÷‰§7!˛ KaēzWĸÚͤXAŌšˆįĖcåäōj7E”Ã#*hāClV3Č Kl3ĩ‚š–n0†IŦMIŧ˜%Ũ‚Ø5ÂøuDž!Ÿ$z×a¨Xd;¸U8÷¯<ĶcŠMjBü ŲæŖÔWv°=3ړQ‰Eô ôãuv6ļV“Z,ŠĒØ\ƒŽkŊ›v |‘†SŒš­k#ĮĢÆĖĀí95Đk÷ßo͆Đ0¸éZ~x—G ‰ ×%sãY“y{ŠĢvvĻ Jŧąč+ŋHĖÅUG˝­TÔmž]=՗’2+@°K0×I `Õ?Ë•˛•=*8Ą4=ĖTļ8„Åt‰ŧžĩ‹l’Ę͕ ëšéŧ-i4WûN9¯CÍĒ āt¯3ņ+<šÂĘŽqŽÕ¯q§Ų\ØG† UrHŦ kz[ClYÕ˙./ėšXŽĩ—§@ĶŲÜn?ģ^•h&’@z ŗ¤YĮ6­*ČFÔU›uŽSĩĨ/Šž -„dÕ5גút-Å7@´Ŧ$‘Đ­Gĸnœá[g¨ę*ēĢ:cp<æ¯Ų$zĨü&VQ†õęš>› ŊąhAĮJšq˜ĸÚcę3ŠōËķ$Ū(KÄ{°Kâm5md‰ĄœtĢšÕš>…¤ˆÚ>ję<ck“ (_3$ŠęĨ1Į&Td°õŦm~ēĶ%Ü8 HÅx;hîæwUĘąuKãé!škxЃ–įĨ§ÛCáĩ1ėW{ĶŽd–OFb'!y9ŦK‰ôÜųcžŒkļđEŦ°Ú:ŗe‡ÕÆæÅĪ^Ū•ĮøÃK†ō¸ë&¸í>éd´6L~bØŽŸėؚ,’'ß(zWoÅÎų2ᏞkjÉîaĶ.cšFDĪBkļkXã#—5ézMâËáćp9‹šáô}ûWQģå`ĒNÚîü)áæŌ&nfô5ÛČōĪzÉ×ÄKc)¯Ũ5į~ e}R嗌?õĢž3ĶŌ[”œČĄāvŽV?´vˎ;xčúĐą6ˆĶÆ<Đ{Ö‘ģęĘķ•vngĨnx‚[m:ÂY•BĀ=ķMđIŠM<ÎĘ ’dæˇâ%”¨‘K÷\ķWaˆMYĀSĐU˜íļ°`ŨĒÉšĪÖǞ!ä‘Å1ĸPFË×q¯2ņY1xŠÔ¨ß^‡§ļm#°Ž^Ũ;+`¨ęOj™–5SŒLwĄ ¤;U¤;pFqīQ†;@kUs%ŗps\G…Îuë€ čk´ģ˛3@#$î=HŦHüâę͒~ņ4ļŪŠ w8ÜĜfĨŸÁö˛°•‹dŸĘĩl,Ą´VĩO™vô5‡{á¨eŧķcųEV_Ŗ\gqúŠģ7‡ Ž<ņšm†‰ Ģ˛ą `Ō“UŅc™Æ+㖤Ōô(ašÎŽW‘ščŖ ¤Îy KĢ2Ɇynsri_/•÷TžNjļŖáå¸XÂä㌃š’O,Zw”šm†„°ĀĘŋu翞î4W†w0¸Á­¯ XÉĻVmĖ;W_į ŽU†qĐ×7Šiú†Yø”俞ĄđũØdĻ>QācŊYŧđęvŧ Ö|~ģ`#g>^z{VđŲŠÕĄŠîęk9|5-ŽæIišv‡,s4ûđXæžž”Ũ‹¯0õÍ:ķÍ{:’ÄzÕŋøF$ūĪōÉįō5§†Ļ´ļh„™ČΐxI­C\ Ž[°ŽnãLˇČf‚ƒ÷€ĸ=8ũŠ>Éŋvs^ˇáčå‡O‰'Ér3Z“fHŽ$˙*ãõŸyî. gęŧZÍėĐÍ{&õLŖŊMŽhˇZ„bd*8Ÿám#Pŗ”ĢKē5ā-u†9VLŸzK›ušÕãe yŽ*×ÂwßģÁ.#cœ 5˙ ]]ËdŖŠ.|3syŖĸyŦF úÖĻ›áÉ!ĐÍ´äļW€k*O ŨÁˆ yYįÚēO‹MĘŗ7$֝Íļrà Íp^ ÔŧĢæ€ĢĢ#CŅú›Nydäîe̓Eŗ$Ž0AŽrãÃW–ķbĐä1ÎßAW“\X°cķ°č}k._ßIĀ6¨•vÛCÔ­ahÁ9EÂāõĻøgDÔāÔÚf] ļ\šôÛCåÂĨöî>•(˜‰‰Č#§ĨrŪ0Šōę×Ë´|nëšä<9áíVÆéäÛÁäšÜņ&‡w¨ÁEę3ŒõŦīxnc|./PüĢ^/Ķ/Žæí_*‡ĻzVg‡4MN-M..›ä9­ĪŲ\_iÂ(š9éKዠģ5as‚åUšĮS> oũŅnG¨ŽÖß  ĀĢ°Īš‚¸õŠ@‘dc“Ž*ž˙ŪŽōđ8ņkųšũ Ü¤zzæģ›‹TØ8+HĖRpŨœŠ`S'ĖzđjQĘSpųO­SšōD”(ŨˇĨ<Îĸ=ĒŋSšÉÔÃũ™Īb pūÜ5éJžõ߃:ą,xõ¨ŌęEe=O4ß´+ŪÉõÉíZą˜ãQ™ČīY“/•$—”c׊¸ņ$QЌēœäTÚo‰mÜ2ŧ˟Jöŧ2Jė%AÍ%žĩk<†8wf´ÍĮ˜ nƒŒúÔ0Iå’_8>ĒĖĸ.NFsÉŠ|§ČܤÔs$r•ojŽL$a—Q‹¤d㠊Ģ-Į—¸öĨļŲxįîôâ­éđŽ6‘ĮCOē›eæÄ.yæ˜ŧ˛œvĢ!•S-Ž:TO*Jģ~\ᚰLpBdbĄ”qLŽá/#,d đk:UūFųôŠā…F>Ãæ4҈Ô÷ĩAg$Æ0qŪŦE,ąÄD€d~ĩšYãëSŲ])VˇA*á%™ŖRģģÔļöÖÖßŧTRyãŠęåT‘ĪjҎ™ãÔtЌi+a˜pJSlÂ5aˇéUoc’<ĸĨ]ĶĄō Ų9Ģ’JaˇŒõĒSNbW•Í5o"K…ãŒt¤–úßÎØH,O Ēc'w<˜Šā2/UĀ#ŠŦˇ"UdRĻĨķ ŒX ŽrjËۤҁGSX×Zm­äÁ¤…XŽõ~ŪĘÖ@EEĮaRB9ĀR3Jû]āqŒģjëåāJŒ”gd Ŗi¤•40MGĖ1ˇFīáŠbŋU¸*Ãä*v• ‡/‘Ļ* ’˛)É1Á5 RŦhXu1ĀHŲØõÅG$‰Bsž)“2“–ri#U …xV§HˆŌp:ĩ Q ‘ŸJt–ą+nČöæ™3 $aíE­Â°!Éõ5q\„ ĀdöÍW_3ŗéN•Ī”HåZķo+7ˆm“%¸ŽĘ)^(#Ltæŗ ædÆ@ëMš•ƒnQ…n†Ĩ„ĒîĀГLP>ŌāžšĒŽáüäôÍUÕ'˙B!°2§ĀhÃ\•ÔdŽņæ•ÆđGԚ˛fe 8#ĩ$ŠĢušNžjĶÜŠ]ĨąŽõGT¸/ĨČĒ~l^{™$Ģ$¸c8Ēz]ŗĪvņĢzĶĩŗššŖ‘ˆãB+ƒ§jĮ$Œ•ŌXøŖÍ›É`OzŊ¨kÛ¨“ĖgĩN$ŗĪ˞+~ö‘Täm'ĩ:ME•ČFʎ0iˇē”6ļßø†yŽAüJ|ÜĘĩ4úˇ›mæH=ĒĨ¯‰ ģp÷­{/ŧÄ0ãëO“Äëįą ŊģšģĻø–+ŒŠĀ=Å6ë_‚;°xõĒÉâkv—,ĨsUußnŖŒ’cÃ×ÂxŧŊÄ~uąqy)‚yilĩąáŋJŖĢø‰aq9=öõĒļŪ'¸RBãˇzžOĻöOŧqOĶĩ¨î]ŌSV[‘Ã7ZeŸˆŗjJ´wŠėÉũĄ#9Æ+ĸ¸hâ-)8âš‹­T— [•H5(üŋΓV¸w•W'o§ŊA‰S÷G¨ŽãOš#ODƒO)3ž[€y$V?ˆĻ˜[ˆÁųGšč vˇÜŦ1ß5rÁ‹[ēļ ƒY×*ĸbcč{Vū›ä}€€Ę95—įЏ‘ĶĩIŖŨšˇIĨ7:˜ ß%jŨØÂbWGsU5ˆĸ0ÄɎŲ"ˇtAoēΆ*kؤyNOCŠcΑBc”¨Č>ĩĖÃ0šÕ$7 ßŊˆĸŧ2ĢŽÜđU ×.Ҍû՝"åŖÔ71ëÔVįˆeŽâаãŦŨ ĄĶeŪØôĒúX&ũ°į¯j/ätÔFKsÍ?OœĨčb6ˇQš¯us4ڔŽ~cģ‘ZūšęÛRŽEUúŠõhĨ˙Cķ­2âiÛ~:ƒÅy•ÍˎšÛ¤äíSĀ5WTÄĄˆ`ƒÚŽë ŗčąĘ˙|ķZž °ˆB.YFā8ÍwM2ąPØāägĄ§N{YKŒ(Jōģha>#–6.MtúøļūœlŧŒW §ÛG-›ČīŒg´|5|b¸™7€tĒēžĄ5ūĸČKģĪa¨Fā:Žk×4›Ļēąl˜Ü2iÅ\1g#å^!â֟’čåSčw"m@ႆäôĄôø›Ä›\šÎkĸ×LqiÂ8§ ĄyÁŽ.KäHH'?xę4[Į—K`í•#Ą<×4Q¤ÖĖJHö5bõd˛Ô"DķÅhjQ=œöͤ‡.FáéSøĶã“' æ°l- ļ^hfĪ&¯Yjŗ >]Í÷F˛-îæIVrOCé[š6Ŗqn$bXĒ ŒÕ‹I%ׯ,¤~Uǚ™iâ-Ą°TÕÍUžMYav;3ڕfš‡Qƒėł¯K˛ŪŅ„“ŠÍq^/d]zŅķžkĸŠĀ›wŦq3Bû¸ÜÃíUcĨ•›œæ¤šˆŠ$ķĶŌž˛ĮåųKÔ÷Ĩ•¨Vn; ÅÕ7%ģę3šæ´7ÎĄ#wÍuąa Ø=p*KIUō& (8ųß÷¤DĀëJdb¨ûAõ§\|Ņ“āĐWŠÚÍ&îXsŌŠÚiŗDāĢĪZÛ¸`Ö`r s?gu˜žėTņŲåY dŠuŨИŒuûK % ōŠßˇMĨ"Ī´^tTe˛Ž 7|üŽ•…%œ°ąE'i5"ÚēĮą;Ô1hķIŋpâŽZiSBÅKü‡ŒQ†Ō;ųlæ’=Ą™I“ƒÖŦÜh áã$>jšĩš;c‘ōĢ:x’RxŽit}>įí;wĢČÍt°`*īSÉŦûÆGˆīNëX JŌÃÔĶmėYŨ|ŅøT—jÑ`ąéQŤ\$ Š5§qh˙Ųū\Œ wŦxí.ĸ#tĢZ-…Đŧ2cŽĩz}åo^uŨĪ5§Ĩø}äšķ§]ĩCSŅfƒRŨnƒw­ L•/7ܓ…< ô ˆá6įÆH˲"Ŧã^y­iLuv–ŧOj¯,÷9š$9§ëšsK [šU†Åũ¤ĸ"§gŨÅz"ė¸b2ŽiĘÛ-Z2F¯zķĢŨéĩgžØ™ŗš~Ģazúh{1ū,Ö]†›tļ˛&Ņļ­čÚ%Ėw¤¸Ō§Õ4)-ŽLĐ¯z‡ėWŦĸTØ=kˇąŽ[%p=ĒĘĮ,Ģænäĩįך5ÕŪĨ<ģA“Í.Ÿ¤\%ā|Ļ;͝4›Ã¨™Ŗ'w|öĻŪ闷sČīYĢĸ\ÜGˇhzV†ŸĻŪ¤%aŽĸĄˇŌŽâŋ34lWą5ė3jöŠ­ û[ëă1*3IŦ\ČÚrÛĖ…JādÖU‘¸ŽDRĘx­7J)ĻĖŗ 3Ž3YöV2YÎßģŪ§Ž•ģšīm)|.ņĐV]œWv ęˆÄã&—ØÖüé!8nš­kEiĨK¨ŖËŽÕcI˛ē’æ#,xTäņ]´áÂĄUųp1^âøökvnqŸJÛļÜÂAæŗįÃĻq“ØTVĶ,YRyīWČYe ‚9Ē›ãü¤ØTžaNžĩ•¯°1ČÁČi$ũĨöœsÖēO´ŋ\pß+J"-žrvÕĻēO8`Ļ­ĨÂŦ(GĻik~SéP]Ø„‘‚:æ˛mĸųŨrsÚĢ܉BA$œTŽ!Så0ę(…e]Ē2wTæ' ŒšëJ…Ŗp hĀ|ŒŧŽõrā„o_JŖ5áA´ƒšĨ9YW!ˆõŖYâDÆAjŅŗ ã+ŪŦŧgxqÔĶüŖšG›qžV¯õ•"#>px“TX4ą< ˛$Ċ~SÚŦÛšŒ6×<{Ô ŪØ-¸uĒW—*`æŗ#¸vŽÕz'māÍM+nāžÕĨmnárPäķO¸8%dāc§ŊWķ#™@'Šŋ¤Īr äúVôG8<.ŌjÃ0BąŽ05•;fāíRĀ ÔļqšŧWųļąÎÚëÖd š}ǭ寨Fvî&°ž×!Éŗš‚án~åēŌKuȨ p:šģĨŦ.­!ŒnSÖ´âTķŒĢ&ãééSÎÛ­‡ôŦ˜yÍ˙Yߎ•<–š"\1<ŠË–ĀÆæ1íWlV8ãÔņVåû<ã„éŪĢÃonĶ 7ō j:(áHĀįđĨRÆ fO†Rp6ˇ>æĸƒgÚHōÆ;qŌĨxSí<Í2ōÜē|ǏĨd:y2.ᷞqVá]äŦXį­[XŠŒ˛ŠĀâĒIlŠ “Ë_Ÿ­Z‰ŖÉ0@k\ĶāēPCl$Ô:v˜–ÖįžG úÖä6ŅÍrØã‘ÚĢŊŧm&(QۈĻRÛ ƒÂ¤E‰ 6ĀA8,&œ6œôĢ­:ČͰëĶŌŽÚīfĐGn:ՙgÚģ_Œpy§‰îM~ Į 3]¤Æ;HČ w¨Ü)‰NÜ“ŌŠ%+†õÍ_„7“&æ#TĘąų×9ČÍYyēŒU-dæÕĀĩrz4n÷m:‘Z—,ŅDÁ‰+íX–Mď¸ū5+j›eœā֍–Ŧ“Î#ĢĸŠ"ņ–&¤š/ŖGŒ6+š{†‰DŦ>ÕšÚžįÁėr}éËÎWÍK%ĘÄ–Ёĩ`Ī׏Z†īPccW´;×|FOē)PF‹&AÍPēE”‚ąĒķBą[āũã\Úģ ŨĒK.zVÕŽĒ°NT’éWn5¨ÖģvIëU†Ģ–9ëV­/ÕŖf-‘ŠŖ.Žcf Ũi!ÔUß$ƒžÆ™>¨Š ŒqÅ=õ•ˆ!VÉĨ:Ę8f#ŽĩRk•’0YđĩQn•9ÎEjXL’U‰ÍmÂĸ9”'"ĩĸSØaGĩSԔHFÄīÔÖeÔF8Ų”c°-¯ĻŠû íŒôŽįKÕ-¤hаvõĢZžĢ“mg_›‘ŠŖũĩj€<’(ÜŊ+CNÕüÛ9Uv§z†/ ‹ķ}ĀxÅmŌAĀÄÖÔWŅjJû÷GZ—˛B¤&+ˆ×uVdŽ3ˇ“Z°ëMg¤`ˇĖGÖ­øc]id++o-ĐWnŠ=žâ$qY‘Û„Ŋ’\ÂŖÕ¯â‚,ŒWhŦ$ņ%ĩČɂ8&ŖūÛ´ÎČæ,}*hu‹t}.æ­NPœ<‚{ÔĢ­ÁvFÉpģÖ˛ßA §œėŅëX§Zĩš@Ĩ6ėäķRŦo+Œđ{æ’C%ŧģää˙ [kÄ1†pcšÛíFĻ˜–ėŠ´ÍLH =q[֑ ŽāN^qL;˜R¤õ5 åĸå¨Ã_ęĶLCŸ”ˇŠë[Á(næ´ĄÕÖ 0<¸É^ĸŗėuÆēÜ'8ĸŧÕÅŊĐ\cœ[P\ŧÚvô?62sÖZÅÁÖDRŸ”7Ję„Éđ”ĒÚ­Ŋ3TG™ū`TtÅ_¸KžŸ0âŧĮÄ“[ˆ÷ŨƒšßY8QJ኎åŖ/ŪÜ}j›Ŧq†rs!ãf(Œž8īMKTXš^ßĘ sĶÚĒëąŗŲŒq܊å|„ôŠnėœ.üU)Č *ōĸĨĩ˙H•#+ĮzŊ¨ÛŦPP9›(`-“œwĢz;ägW[o2ČiSŽĩyŽ !cāgœ÷Ģ’B ( ÃˇjĢŠÁDQָ́IāÚ{:éV.‹XĪˆœäw§ëSË8Üœâ‰v”Ÿ™EnčdŅZ2ä15™ŖéĪwŦȁđōI¯@ļŗdeŒH ^ĩ4Öy”w(ŠĨŗ+@@ŊkÎü[j‘^!ĮJmü 4Ąėjx6Î1ĘʤįŊz R,váU€öĢPÁ ;˛į>õÎëēi¸ã-§ŊyļçßK §åĪĒÚČaŋŪáļÁ5ŊeĻ›ģŸ9˛S Õ]]™nU7•E=*ĸ^y7Č"vÚHÍnø‚ú_°B‘HGû×9oq›˜—%9į­zŪ–ĒŅÆĒz¨āÕģËE—°ĘôŦũBĀų áļ€2+Î.\5ü†WÉ'Š´Šk!T§°¯PĩŽ'€;H¨åHĀ,7f¤š,ŒG"ŧģYƒwˆüąōŽF*?Û˛IÆ0*ŨÍģžŠ™<ÍA ieã2)ü ÔŅxbYuëØÔļz [^ &Bq]Eēĸ6Ü(īRŪÉF#9íX÷vfâ#ƒJÅŌ´ģ›=YĻIîČ"ĸŊŌ..50čNqŽ•fûGCQ‡QÉĒ1距˛ũÚ[­ žĪą:/Z­eĻKę„WiiJšãššvā 7Nk=Ø}ŽĐ\đIÆŪhŗÍrdP94ÔĐîŌā”^œÖ•î•y<(sĮ5:ĘڔÆĨŌtwPņʸõĨ›A¸Šãũˆ|;2Ũœ Ũkb]-dŗtd8ŦK-ĒIŊy÷Š4­âŊgeāôŖXĶ^HōƒæÎ+(iS-ˇ–F™,”œdu­oYË$ÎŽIŽēŪ ˅ڜ ˜ÛĒaÁÜ\šŠú$ØäŽ"ûLš;ķ4jN9â§:uÅãĄ‘qŽEj_čO§ĻÔųĮzĮ}2ūk_ FNjßĐ´yŖˇ 4ek<Û\i:œÅ#$ģ`bģË$*ķŒ6+^2Įx=jŨâíŗ;tÆkËuũ6úîûîîđEhž“-Δ#hČ`:æĢhÚv§ ŌĀ ĒĻŊ2 0mã&á€ĮŊOm3sQ]ASÆænĩįú÷†&šŊYĄžx¨ĩ/ ˇØâōS÷ƒƒZúFö–3ũķ\Žĩ¤]h—OŸ'ĩBžÔ&™"äsŠŊsáũBO(˛zqQÍáû†¸Œ }ŋ0ËW{§Ûå­ÕÆÍšîMH› —ojÔ+nށJ÷Ģĸį÷ŒĀqØU•™]+Éę* æ ˙7ŌĢOz‘ãwŨÕzŧėßwĐdT3”2ėĒŗ eP\Ä÷Ģ)å¯)€qZvöębS6܁Å6æWBœ÷ŖKeA…n˜ šˇaŽūHĒŗ#ŠÛˇ*i!ĩŠä]Ş :ÅNėĮ\VĄT[`Ž:ĩ˜–ĖnKax?GwČX(īšÅÔlVF…'ڈėTÚ t^&Ŧ¤BˆölaK”L…ŧĨ-×8Ēárë*¯ĘjŧÖņ%š1 Á<‘U Ķ’æ\2 v5u´(ķeĨg§ÃnŖäËķÚ¤xye'tÍyΊƒŽŗS–•ĐiÖ}•]Æ ķÍ1YĶ;Û9āUĢvn(Člæžĩ§iŽG9s“V¯õÖ™FíŽ ciwr4Ī—8>õÜHē ˇ.qÍu?ÚqY:ĘqČéīNMv˜Ã9Í\/æ¨aÉ"¯Ø\ÆËßĨIyqånvų{Ö4ž#iU“ŒõĨ‚ņ. ßŌ{šåõ­VO;ĘG8ŠZŪO2ÍtZ/ˆ$pË+å [×:âCå™H\ ĸ5ËyæÂ0wõ§žš¸ ėšīQŽŋj_i`úVüjÖÁ͐GzŖp$¸bÃ!GsUæģkMŦßuGŪĒ—zô Û/JĪ}R9#x#Ŋ-žŗĘŠQYšŽŠ'œ66=1R[_ŗÃķ1'ÖĒŨßĘͅSčڔé;'V‰ņ$°\$ĀW,ü@dŸ>häÕũGRų|Ķ(*GoZÅŅu™$ž‘Ĩm=*ΧŦ확$Į84ØŧDaLäb ÕõÛĨōüˇÂâĩôŸ$vJ“1ķsWæÖ€J*y5ËĪâW“Q*ŦBfē›MKβ¡u­=.I˜äídūU¨÷ÛĢČĖŧujÍ_ZųĮ÷ĀčZ§7‰ā–F"T'ß­dŨx H|°ĀžœW3uŦßÚŪ‚d g€+ĨąņOī”Į9Ģø=Ā/&yāfŦ>ŋokŗ|Ŗ9ĢqøŒŨGē'Î:ÕĩÖRH2dęK}Mdæ&ļb`Fâ@õ“ËûÒ6ãŽk>ëP[QŊ˜_zĪ_A,ģ7¨í“ŌˇíīâC›+J>wv\ŸáŠR|Æv6O}Տ5äI)iœUYļ ´Č¤v$š¤1ļ ŠĶĨ ŽFË 15+y2•ŸÎŗ5=M#ˇq ū‚ąô/M>ϰąÂ×aũĻČ-ÎãNãFYÉ$V„3yņÆHę+ņŖxŽ& Î+Ŗžū!*­Đ`ÕV@Î~SŌĩ`ōĖ!•y¨nĐL°8>•f xmáčA+Ū˛n$T“stÍdk?éŽÄ¸āW5áȕī\vˇu;Au(L×ÖĪk+ŠQĪǘÚžaÔt­Í.ÁHûKŽjĨ­‘į€AæĢMŠã¯sVá‹ÍĶËnÉQŌĢiĒŪs…ëI(1ępīI{pÍrĖTtČZAuR@'‘]ũŦ‘ˆ‘ēŊ*ė.‘€ņ‘œįGÄWeŦČȇ­qBl[0UĪšĢš ­ĩ÷6íUuĄ^āÖŖXÂ4ĩ}ŧ•ÍVĐmĄ`ķ;|Ęx[Zš’KĄ'ž*€2Æá”0÷ĢŒÍNîųĢ6ēL“B’nÆ}ëēĶōļ1‡o™é†čo`H€QĢÃēy%°vמÚ@fšxķĀĪ5•!š’' M‰Z+§9Šī d äSÛ1Y$S-áßv‘ÖĨ͉\į&ĸÔSkƒĐŸzcalˇ¯Zß´Ž´Ŧģj–šfŋē8Ē2Īžåˌp{’ÆŲŽ.?&F9­]z11 ãV{Z˜m–@IČ­K |Û˛1Y–vBīT1)Čšô ?NH-Ėx-ÚļlØÛÛÛ´úĶ/låžŨŖí' טę0KaĒ´%›"ĢÂŌĨŲNÖ­]?N7WfDÉU=*ŸˆĶj Gj¨‘KžōH=ĢRÚv{L_,b5ė.w1'¨­MÜ,SrĀKe=åĖīv kWסę/p3€kŌā %š7.îi|íŊ‰ĀāJå|`Æ;Bą1˙q9TŗŪŒ™äæŊ ÁĪ>ž<ÆÎÃŪēš¤„…9ųIĨxÔÅĀ Æs^kãfĖnBz æĸs,°…•ƒwĢÚȖ3I[۟¨ųŠĻDĘÄ1ķUluaĶ™‹Ũ…6ŌŪķQŠK‚ė;Ōø~9Ulƒ¸uކīSŽÍ˛ęK`ÔēfŠé/Ī]U“3ĄaĀÆÖ¸}}ŸūNŌ9āŽõ5đš2¨€+[˗væ<kkO@a%Ī'ĩHđ*brGcTîn|š8CĶŪēF+nÍ9šŪWŊO{oq&ĐGjälŗZ•uč*ĒÚ\/î•0 ÆiĢcqk!ęAëŠeĖK(PšŠäļ˜Û#äqŠąfnãŗ1*gŽ”ËK[‹u’I"Č<œVKÄōÎíŒ đ+GKYbŊ@FTu­]jŪâįo—*:Q&‘{&šŦąqšv™¤Üy,Ŧ¤Yâ+ĢAŲc;‰Åw>KŸŗnNjš$đģ!@öĒ jÄŽI?=,ŌH„„t?•LļyÔįŽsL¸X÷cnqH­q”Ú ŽŪl™r2Gj˛ņ…U˙ëĶÂJ2ęË‘Q^É ą´Ÿ"’zVdąBlōąĄlōjĨ˛ũŽ7ÄjÅēätĸxĨ˜ü‹¸ķŌ‹‹QæŽWW“ PGqŠrY@î]>† –Ė*œ¨cÔÔA\ķāUčŦãĘ˜÷ŠĸŌV˜)[‘N’ŌŪY‘ÔzÕVđŦ|č§æė+ONđõ¤8 ˜q܎ĩv[;Tp8ëČÅX>O’@`T÷Ē@Íåō;ÖLVé-ߛ"‚ŦŲÅu6BãcˇåĮ§ĩ„1ĮMÊŠĖ" g”sÅaJšĒ“ZÁ†b€ķĀÅ6ÚÚ¤ÂÄŖ•i´äŒ‡ōԃíMƒM„Ü™§NĢŅØí› Š Õ§a9ųĸ“%Øû\ļŦųņōĨ¸ŽËyDPäfšÅš%~ldpmiģ4iN}h˛Fį įĄĒW+a€å‰Æc\Á‰—rüšŦŨobÂ\t+Ō°<7 3IŪē̉ĸÍ!;}ë†Õoüæ*’U}cįÉŊ‹ƒ5Ŋ&Ē-cģŌ¤´Öí°N@įš›PÖmD^BĩRR‚#iƒg­túeÄ&"ã•=ĒÂ,nÄ1ĪĒ÷[ōˆ¤=gÜ^Åk(Y)éOˆá# 'ĩ-ÖˇZÆĪß öĖOfe] Õ{mR´!ˆÜ9Í95›[s‚˙2úuĢ/¨Ã#Q\’_IĻU¤%ŽģO×mšßĘ–ôĢ1\혚ûĸžÛnĨ9Î#Rå<ĸŲŌŽŨrdÚUxĩuiüŋ48vML%´„IĐW­Īspû…ŒWAŖÍ,–$HŒf§iH\`áŊhGŨuĸėÚ0}ëNö ŦoJË]R‘’FUÛԟˇœę{V›ŪC']¸#­dIĒÚĨØ luĨô2!)ƒ“ųUķĒÛĸ‚ÎŖ Tū)¤Ūއ5e5ØB”2.GjŗiŦG4…|ÅŽÄ×W–r™FÚĮjŊŖę‡û4M7ĖqÎjâë6eqŊxv’Ūâžøõ´íĀY<´rC Œö­¨e@˙Ī­GvÎÜ1ųqž+ĪŧKyuc0’Ā$Ž)4­mĨ<ĮįĻMu\E°ī`N95Ÿ.Ĩh˛ŌŽõ/Ú-¤Rūh8äۚ5hĖc`ũjŪ™zŒę× ‚ˇíAߐ2:VUÛÆĶ¨äÆ~^ÔøuŽSõęüz”I 1sžqZöĶŖÛäÛēU+‘š¸ĮnG›5F×V¸MUmÖ}ĘÄÆkOÄūtQ%ÄoŗdUŸP¸ŌÅËJ@Qž;×[āŊ^kĢ2˛eÂôލ5 °Ī=*ËÆáY6q€EDą¨M­ßųÕ JáŦlĨ`Ŗ<šōCPŊÕ.ÜĀ€*=ūÕ"Cķ(5ĩ&§q}ŠbxFúîâĮPXBAâĒęæí6˞ļŌ*´×s‹(Ų\îîjxonæĶÕRVČ<ŠĐĩ–ũ,dĖ€*…•îĄtŌD& /zŲđÄÍŠEiN…ЇT,@ž=äƒŪˇmĩÜ) 7Ĩf_ßąvt”ļ;TTbąî8Å[ˇšˆ’áTžųŦ}mŧÛI$P9éYšsŽĩģĢÚE9‘IäŽõĖÍĨLĘSōúĶtŨ"E™Á?-,ú+<#8Ģ:UŅ—%pf“WĶîfeTįš¯qcpöj…yZŌĐVkXļ2āgjč%ŧÜn|°Ũ Ņ‚x&‰”ĄfįBęhHŽ}j›Yâ8Č5Zx\`õÁĢÖŗp3Š–P-Ĩ2q\ũƒ˛ÎŌ`įŽ*Å´Ëf›vez|Ō ö‘ōžôäˆ8ã=+ĨĶ­”ÛüܕäU¯p|Ŋ0i˛ĸ$5^[Ļ+˜“K'P͜žk°ļ´HíÆ¨ŌÉ$pl÷Ќ{`PžŪĩ0[m,ĐŠc͊ԺW‘´(üĒŨo8ŦkĮS[’•kdWL7z͕\0=kæ ×q”Ž´ëmƒãŠlQ*!PF8ĒvÖÖķܸeõÁŠ.íĄōŧĨ+Đâšļđë%Ã<-´Ō´4Ī ē߉$;ČäWo…ģDc—i`3ČŦéô[If´žâĒÜÚĸL#*6Ўiomq XŅ6¯^*î›o (D Kuĩk]3í5Á隅ŧ€îúŅ“€ĖJ‘ĶZâäĖ(Jį5RâŪÜāyJÄđr*ŒZ,kûĒšéSjļДîP@Į#­d}ŠÚ/”*îŊ)Ō[§’>eÁ§éZéÆīZ˛-`Š9ˆ î+:{H.•üÄųGB{ÕkGœūíFҁžõĶØé6ņN˛,*§nzV´ä‰\͊ķ+¸Į‹UsČŽÍíXc8t¯Ķ$ŌHęv‘Å%žßíäm&–øĄÔWhAíU‘š=‡'ųWcĸ*> īV|@đ[é˛"¨ÜEsžßåžÔÉ­]×awBėÁڸØ’O´9Ž×KˆyQî-ĮSS_ŨÁm#19či–ē˛ÄUXÁŠaÖ y6)RzqVīnmRÜŗHš8 g‡qĒ۔[rF&š—‘˜„€¨ŒÖŽŖhØF‘r@Īĩ?Sš;HŒčF1ÁŦ=3]/rÉ#œ•sQģX`îcÔÕk^œGģ9<×Qé*nSÔqVa™1ÉĄŠU×ÎŪą€H¨Y6ČÎG^žÕČxŠîâÚ|Äp™ëSiZ¸0/ ŪGzÕ7ĸXKg8ũ+™›[ĩ,7ɜU-^ęán BšŋĖãI“ŽõÃR\ŗ,§ĩĐ Hu @’Įs¯Ëˇ íP-šIœ0ÚGąé>Sųˆ™ŽhŋōáæÂ+žŧųWwɤš’܍Ēę2:Ē‡?:íĮĶ.ī%ļ‰Ld~¯áũctdĖrOjča’+ŲYFQŸ­aM¨˛ëK +j-ŒęōF6õ¤ģÔmā!ÍrÚļ­q ꑀŒr>•ĶYŪ[Ë`å]Å~éŠ,Ę\ãč"ļ_,†RčjՌQÂNõį5Ŗ …‡+ÉÎk*gT˜—jĨy,Ū9ŦM_Uk;?25Ü?•Aáí]ĩ5ebr;Vä­oa6ņŊ¸ätĢw•4j_kUĢÛH í^=qKEmpā띭Jí'œNĐËŌĒ}Š'—dn6¨ä÷ŠnĄFˆ3ŖŠĻi˛Aãr€Ü`ßD#V@3ž ZØ]āsJPŠ‚ ÅWd¤äĀÖ5Xė”á@Ú{׌^MSĀ WygyŠ!Åį,¯!ÆkÖõOą^*¨Čb"ˇW÷Új0UŦ{Rđ\ąķFænTTēÖ°l†čE_Ņd‡QŗįŒsšŊm¤7.NŨÅqô­;i!‘op Zš1Ĩ“cīgŠķĐĄ|`ņ´×W¨_,R.=+ŽMÖŪ] îŠS–Ę|â g‘ŠĄ6ƒk-éÂāöÍ?ūëi_c ųzšŨ˛Ķ ˛‹j Ā^ dxš5nĀsXū!-œįwzš­ÉĩL|Œ×!§÷ĖĄ€ôލ\-ĩšZŞáo#`ON•_G‹š8=q“PÄ=SbžĪ4ēœŌ­ŌĢ9+č*ŦpŧĶ…Œļ æŽŪÛÉk–$8<ÕgŸiŒÆpF2ÂēkĪôŊZCƝ­ahļ~lÅēŪ¯HË0Q¸ ÎÆØÔ ;Åvž¸–æ%IOƒ]‚G˜Dj3ŒsIr¨‘¨ÂîīŠĸŪkE•={W#âäu‰IęzŠÃ‚ÎF͚rÄ÷̚UÛĩŧĒÎ1ˇŊeÂGö į+žqZ:Ū6)¯Ø¤mĄ–ÎH^”ß N ķ3ƒ“ŌēøåŽr„0š´-üÃąû­,vā ÎZŒĒŗ˅éXí´—ōø Î+Î]Z ĸ’1úÔm+‰žņÚ֕­¤ˇ—‹Ÿšĩuũ=lôôCÃV-´æÜČŽUGĄ­Ī ŪĖÍ"1-ۚ¯¸Ûxˆ?)<æ§Ôõ™fžKHj8ĒĶĮuÚ(.āžôíz&XaÜFãÚ¨Ę.-āGķtŪøH‹9^C’+ޞ”ĖÆ08^hĩžĀCĮSLhJ|ø0 s~&ŧ{m1Ųo kĖÎĩw fiōG fļ-îZīE9šÆyĻøjålíĨ›xīM’îë]šG#*¯?Z“OÖ.tÍD[Ęå‡ARx“Už[”LÁđ3Nš]B 9/f(GOZąâ™ŋ˛ĸu1F+ßZŊļo´4šßÔVžĨâ[›‹‚Č@<;U]?PēkȒ9÷EzÄ;—OŒ˜ŒdV•ģ4Āē1“V-°‘ˇ™´‘ĐŠĨs8åÆ Ī>Õäž0Ô.Ϛ@€ųa"Šx_Lš\]•Ī5Ĩ.ŗ{-ü‘ĢˆÖ,āÖ÷…u‰5š J¸­sū-ŖÕâĮŨ-ĀĢĩåÕĻ™đ@ŦËõ;”YãMĮųÖîŗ­ ¤’§Ī›wj—Cˇ‡ Á…l|§Ö°,/ī—S–‡;†zÖ¯‡[Pģ՘4ŸšFÎkŋž2ÖĖä“\Mæx­đŲÛÚĩĩkQ,ČCžųÁ¨n _)C’§ĨJ—Í*ų{y*//˸Sˇžæ•áÛqŧ6­_W2`¨@æ°üUm=Čã<×=áĢBöŌIģŋŦk–×%?vŧãšå!Ķî’ā˛ĪZ˛Öˇķ¸<Öö ˇØˆa­f˙d^ŲJÉįvj¤V0_ų˛§ÖŠßFĶ]ļڊ4N œœÖÕõÅ՜l$žĸ¨ĪĻÜ´@ˆļĒūĩŠiÄöL’.Ü Šaoum# dõ­;í[Ë3¤^Ļŗ"ĶîY6x]~…`Öv€('5ĐŖŦpŦĮŌĢÉąŸ{9é cO9 I¯>•ÎøŽIŽÂ*.TzĪĖËĻų[HÆ*xe†Ō@PŒŽ¤ÖuŧrĩĐ!NsZwĐĘʈ#%ŊęütĶ B,69ÅCĻo‚Ú]čyÎ YŅu9éŖb€MtĢzÛÕKôā֜.L;ōyÍ9nĖęø.VŠËÜ#ŲČâ¸}gH™gŪ “š‚m)ÖŅ[įœWAá{#åî`ZAëGŠc–Xļ,Dļ{VU°eĶ$ŒÂۀĢ>FI\27<ÕkâĪŽ–Øp§j k}ŌŽUj܂´"}žŌwĪjÂÖ世äDČr§ĩO}ŌX*ˆ‰8âˇ<$.#„ŦŠU{W{cl-ä2’pFqZиœ2ŸŠĻLŧė!ļ×#ãd+Ļ~í: ķCg œüéZ‰e$:'9ÉŖÃđnĩšCš˛9¤˛GŌ¯dGBE:; 5=YeŽ"9ÍYņjĸcrúUՕu -3&Ũ[Ãčš_šÕMaÜY[ŊĒÆ„¤=ęĪöEÄ6ˆˎE-ĻžūļSÃå5ėVÍfĄļ‚$RM4‘ČDj=(ķäōwg’jœ¸v IÁę+‡ņZCƒƒYWÂWĸ =ā—ÆqŠĘ$¸ŧšyˇ&:īVü+$–’ÎÉ?tõˆ¯Ļŧēˆ< ¤5YÕÜWnIļŧҘqīžÕoĮW"(ÆOS<'uö2#¨ā`įÖšŋÚČēΟm† z§Zí<+§ŦA¤wÁlõ­ŠKEĸôÚy¯<…Âx×ząÍzļ(û[hÁéÅr-(Œ9ōøõĻØę6’\ƒ~đuzHQyĪb)ļ‘ųŽVf\ã#b }ŠŲ¨øĄUė%ÚŋwĩsŪP`vaōƒČ­Û˜|ėäasjm#ōŽå‘Q%Ŧ{ÎWæSÉÅiC¤YR=VØ&b˘pxâĸ›MķĨßĐv­a\éŧí”ÚAä÷ĻC B— “‘×ŦĘĐ   ĒôÖCvĄBšæ­=ĸĀ‹ŧQÁ¨ŧJßģÁኺlÁÖC…Í \1‡ĨIĖ×%6€ŖŠĐ”¨…F܍ŊgČI$`vÍfÜ\ ‚ęŲč¨âTxˇÁôĢ/šDo-sߊ\Û,ĖJ  Ķļ—süČ8­Ae’(­jũ‚Ö@ŪՑ}`ĻÜĮc Ūą­4d˛/$ķ0āUø&V’8UAnæēHW :ô¤š$Y­œã ¤lĮ21ÚĐÕyR)÷ŠpsTdļMÁ¤L'aZzrC".ŊÆ*ÔĐÄđåŖ'Š\Dņ.jXôøĄ”„ˆ&:})ĮH´žC#€žzt¨Ž,í˜$b4mϝÅeokōŅž§šÚU´×áÂsž•¤4¸ÄgĖPA8éW ŌáŠÜĻĐdH¨‚3€}jũŗÅ äsRNC.ņ“Đ ČŊ´Žņ@“ĮCX÷:-ˆe_%CsWŋŗ-$D1ŒÅhļqģ*¨īL}ÎgÛĩN;Õ¤Ķ-l˙ÕÆ6ã‚:׎hę‘|‘äWQám&"ĈŦãšŌj6đ\ÚųeWhãõÍ˙Â?`.™ü°ēVŧ:|PI<.ET]˛ŪnHÔm?6+v=ąCûžr*(´§pM:æÕ|ŋ-N22Eg­¨w+š­¨h°^"Å*†¨íü?kfWˍēf§Ųšķ$Îyã­M‡íđDĒŲ¨î´;3"ųĢļsPŨh“ÛyoāöoNĶ,ôōŠˆČôëQjšT:„Ė&D9čS¸ĐŌ×Nk{HļąEehžšųˇDžŪģtļŽP †Ą}Ē2õį “xؒŧ^˜ąė‰“8äúķ˙f3Į׎SEŊš]@Č –ī]ž§¯ũ–ÁC‡Jæ ņEĖs‚~éã5čz-Äw°,Øų°9Ēū !Ŧe85‡á5ÕūQÉ<ÖļŖ}…g ˇ¯ŊflÛ˛‚˛ŽJKíblˈãq_B×â˜æ|á­Yõ´lI°0į>´Øõ”šĘębĒ\Oˇwv!9¨Ŧn`†dËŌĻēÔĸ‚]ŽË’:UTŋP@YBĢr(Öĩ ƒ`Ŧ§$wŦU•ŅŧÆĪ=ûVŖęPJ#Šn¤æĻmB1")˜ ßąEž2ã ëRĖ<čļ/UīYˇoĨĄ3 6jķģÍNY.›gŨŠčtÛÔkX÷œĶ’æ&@ĀĶÚ{u€0qžõM.˧AķŠ’æHeɔ|çĨ[:‹*üėŦ;TBė9ķöät=*í¸ļ¸‹,Ę[ĩEŒA‹ĒĀúÖŧ2Ŧvåp9ŽgW×ūÎęąÉ¸“ŠžmAäĶLąŌšÃĶŧC4ˇ^L˜ ߚéō'ØĄR;U¨Û bØįŠĢ2kP|¤æĩ-Œ’ĸãņÉ 8;Ŋ{UKįŽŪ6ËǎֺT.›ŨsÛǞC!Æđ,ŠæíV]ÃĄĢ•U ķ ÷Št˘ŽYÔHôēŒņ[@$.^šŦ^—’ uōĮ Wĩ[éĒ‘ߎ*ŦWhŒŧ×îáĒĶÉPãs“W^â4dõŽG[ņzŲNV,o5sÃ^ KđĖän­¨õK—GpW< ģ*A"äTļŠ (å G5`ĒÎ0Ãŋ5J`Чk“ĮŊJ7yycķW7sŽ ]SėĨƒr@ë]V™"Īl~b9īéZA?N{Ô7lwnDĮZĢ‘Æ…äÆI¨īļ”ŦF= `j#ˇĶY­šģkCAņ°¯UūߎD\…ĮNõFâháI ¯­gÅŽ[\ĘĐŖŽáÚŗuGĻãÍųŗÆkKGÔSTˇIŅŽ=+rߑÃĐPB䝠g=jXdŽv$ōOLTwÆģļŒ‘Ø×œ[Há67`W¤+6ÅtëÄläû^˜ņ2üĀV.’~ͨÉģwđÉ:Į*}ĪjŒ̈́) o—ŌŊ'ÂNWM‰Gn¤Ōø’Fû,ÁAÆ>õføUöé͂sšŖâ¸$’’z ä÷ā*8`zVĨå–t•”ļF1RxjÍ4ĖáqĐ¯¯^Č÷ūRļ@ęESŽi-Ũ^&zą¨ę“Õŧ9Ē‘]M&`MXÕåíã¸$ķÔĶŔЧEuæ6qĀ­n…ö†UĮΙųŗYz` Žzõ¨na–ÎņŗygŊYX$žģA œĩč6˛éÖ€íŋĄzËĖžR˛ĢXū*ĩymJÆü(5įēm˜š¸`ĮMO¨E%ĨĘœŒöÍKoā”3–y<栞îââíĸFĀO\éĶĻæ$7ZąŦO0 2H@# ĒŦ÷Īf&2ŊŠŅ\]Ũ@U]€^õĢáËše™ rHQšë"ŒžJ’rHĨ¸ŨöG›kĖīã™uŒÍ׊ëôČ%M>a'åë\‰W›ˆÛĢV’Ü]ØŪ$fRCʡ5}iíė+ÄW05‡a3L}q^āŊSíļYwų—ŽkŖdŪųÜ:×7âkK‡‰„m†í^xˇwĸôÃ,åJįŊÚĩã_4bw#>ĩ­§M¨Ũj$,ĖO4īk7_iû2Lˎ Ē^ąw§ŪĄ33<ķW|U¯\ģŦjJŠČ5‘ ß\%ꑆO5ğj—Tˆ™ ŪF=ĢžđŪ4v!n¤,HÜžÕŠwf‘Ƙ$¯ozĖÕåėLqŖIâŧÅŦî.ĩ“n{z“[ĶØ^č–bX›üXĒÖwēäfT$ˇS]ÆŋuaŖ ”8ô¨ķ[6fėģm8 JÕMfæãÃÆx[21ߊįíuÍ[RiĄÁįĨv.ŗq{¤Î¤,`Š5Â[[_j>'t.wĢrkÕt§{Y>ĖØ$“[2€éÜF UŊš[K¸fPsšķy|EŠę×oökŪ¯éū šw{+ˇĖ pzãĩÕŧ›ÄBÜ@U¯LđĻ‚,4ũĪ´JG8Ž‘!'÷g kšņĶŲI$RcnqŠķMK÷ÖX+eŗÎOZëüYeöĘÃŽMsZ^§ĒZØh–1’;W]áĪģĀí*;ēá5KTņĩÅũÜļļƒ`^rŨkCž"šæã랎īTuŽŌi$ŽØģaŸņ^}aļÉ#đØäWĨ!;zō?K‚ŌvŽųĄŧ=k<åÕBķÎ*ėúUŠĶZ#3–šæSDW–=˜d'ĨuV0}™6Æ…\bŠk˛¸Ķä,ŋ{ĩgø_ŲėÄđ"Ģëö×7HĻÅwp+,iŗÎ-m–ĮŪô­ ´™ŋŗVā1Y–V×ļ˙¸‘ĩš&ĨÔôI—ũ#i>šĻŏÅölgøˆŠu-GļŽHĐŊMU†Õä+Û|̚—]í4¨ŌBĪJ͊ōâ]9-öåzZpiŗÚigjny3ĀŦë yāsæÆTf¨IÜXī/ŅøOHdDžAˇ#­vžZÉnå›$tÆj…ŊÎnXlÚĄy9Ŧ~čĨąōÆåÁŽ OyĄģ.ˆ-ÚŽjlež‰üˇbēˆ‡Ûl— ä%ļ–ËRv‘\Ԓ$ڃD"SĮSNÖŌ8āÚIQÍL›[FōĘļėqTô÷hmäFFŨڟĄÉ,wėQ[{qÁé^‰eÉŒ¯-ÔĩYž@'â¸OXũ›SŠE\ã’+JŌöYėßlGj­rГũĻī"gRę34—hËOZŋ§Oyb’Ē“Į YđBˆ‹‘°`+ŋđEŋ‘ģÄÁC]Љ6ĀFōÍŽöģ7v¯0ņf˜`ÔU VœYréwŪTĄķ]÷†´§ŠĮ͑@fåŗÖ°•ĢsaéD<áĪ+2ô]'ī‘ŌŠÍy-ī[ú~ĻŌm’_”c[fdš€Ų$ÖuŲ!ã_™SLĶ$„4’üŦz ßXÄŅ„p2¨RۆŠôĢPF!Œ4öĪp‰å§Ü9ÍXP-´ŦŦ÷ŋGbˆr:ƒDwōŖ9ŪéZ6HŗÜ3ĀĪŦŨĸ[š*šĻÛ8œodĀô§˜ Hde{VV§¨Ã`ÎîTqÔW;mã%ģŋĀ7'ēöxã(å°Ät§›ˆåŒ äöŠ`ÛÂNņģ= RkčŪv ōöÍM4QË`‰Ē˛éÉ'1䑃R[ŦvwŸĨtIË$ eԘˆcŊMl߸ăœgšM ˆ¯ÕxĪÍŪŦ*#Šúâ“rB˛zŽ÷~sâ%īúU;Šp˸`†Æ]˛™ŒôŠn&J āöŠN;zõÅVķ•ÔļÁœā摖8bČčMUY"bXzâ°ĩģ…U žĩvŪâ;kbĶHŖ8­(īmæ‡äpHî*ĨÃĢÎģ[æ­kĮ6ÛpydąĒéŠG!uņÖ¸[ R/^>wq[ē–ąöcüĀôæ×ēĶEzÉÜį‚)‘øŽxEpģAlĨ•Xt¯Cŗš6ˇōÎŌã’qQ<1¤Ķ‰č*Č%°ûpOŖ– Ē]ąĮ#ŲȃåÉ#ŊTkEōÛ T㚯mc´ŗĘˁÜ÷ŠNÂŦ¨ŠÜsí^{¨F§Ä ƒĻŽ%ÅŽŸą|€zVTZ†¨ÚwĢÔ×Aá-IõËp~„×W<%å*Hč)œ˛#‘ƒĐOŽPŒ\yĢĐ)™‚tĪŌ¯ ‘b!F Žĩæz߈5 JHíE8ÍgZkSĩį‘+8W¤iãĖ´ˆˆōûy­˜` ‡Ž 6áZE ‚y$lBa;f›päGĩ?:ķO›Čģ~ī=k3ÂÚT“ŧw´*ķÖ­ęšũŨŪ¨míßjĮiú^Ģwæ<>fYySBx‡R{ׂWÆ+2mwQmHÃæt5xjÚÅÅĘÛFÄâŊAĩēāÜ?%yĢâŌ›ŠĪքhÉV ¯ojœ[ųŲb8Ĩbë÷w:nšĶÄ>aŸĘ¸k/jSÛÉ2&vũãéW,ŧeyu ōЗNĩģáĪļ f[€ˆyôŦŨoÄ×j"ĘË˙*5ëÍ6ę8īøßĐĶęcx#48F!w‚;LŲ™~WÚjŠ~ĘØ NIäŠŦw4Eœ´Árm,ä=F;õ¯<ŊŧëĢ:Œ(5š¯ß‹­1g$`TėdxôŒƒČ=j߂žIÛ+Īc]ĘĘÁž|OļĐȃniŅE™rH5j"c‘FqëW¯cxtג5ˆČúWŽŨŪģë2ų˙ģ āVD,SQķļĀxĪzõíâ[ĢhŲ~MĒ:÷Ž’9Uy„neClįŊ[8Čđ*ģą™ëžõÃ|@’$Ķ„LCHOLVG„ī"[#wĪéTVĀCŦÉ=枯Äķ[ZM”j­Ķ)ŽMeøŋO›OÔxøŦģŊęŪŪ-DîÜü×gá &Go'\—ÁæŊ *¤aQT`rhY:œŒÅA,’ŠŲ€Pœ†nÔ4-æ¸ˇđÖ‹æUŅį8˜Jķī ] äļ:žÕcÁŠ ĻQĶ8"“ÃŌ ×ocߍį VŦôé4˙›‹…;đŨhņ@[ûëxā%˜áĒŪ2‹ËĶėã%w n­Ėđ‹ĸ.Ņ•ļÛ§ƒŲöŽîŪ´ß4Ōø~æ(폃Āë\îĸ<ŗH&}­ģĄë]N‰b–&å’vķŠĮŌ"ŠMnu‘(lŽjGlž$‹ 7OJčü[ļŠ8ی9öĨđååŊļvČé\ŊÍĒŪęrË…y8=ëŦđ1šģ…|cšÛ:oĘ{+’Đ?á$ģ€ ŽÎōĖ]'PsŠķMgBķ˜•€+7VvŸáČŌãt˸û×Kk§íaTôĢŋgäÚ1ɠÖ.ĮĀšēsā1@qŠ<$Ņ˙eŽN:Vė‘Á#0dU’Ō×Î(Uõ$ņu]Ē@<æĨō­[rĐU>Ū(É †ÆsŽĩ›Ŧ[­ËœÆĢŽĩ›q§ÂÚr…EzV-œ1Arc* ūuÖépÚˇ ŸŠŲCäo\ž•eJrČĒGJĢ{R]‚ČîäU›{A&%El{U‘ĻBČØAˇ[؃`ĪlSÖaŊXîęi˛ļČ÷2g=ĒŽ‹;wcšHíūÉ n!‰ëëYQD÷-%š øÔ+áËP~dRŲ­?ė‹gAÂŦ1€}*AĨZAo°Â…OØlėíî@OR*ö˛ãœ˜'ŗW‘W:Օ…e|0Wõ­Y /fc9é^U­é1KŽm cŽ+A<+kōíAÁæģ *Ö8`Ų´b¯Cåí~›¨,~sŖķ¨‘Ũä\ƒĐĩ|¨f J‚=z×7Žéļ÷ŋëŖW|üĩWGđÕĩ­ÉtŒuĢúž—o0dō“4û +k UUĪīIskeаŽd´ņIwĻ[ʉnĘ6&2žÕĢgo”Ją*í*k‹Ŧ)'åúU[+ĸdØAĮķ­1Ār8Ë™`Î=*–§§ NŨâ”uĒv˛ƒN6ûAŨԊ-<+gi˜”Ü)4ī YZęr&_9lÖŊū“muGŒ`1Yöž´‚q.ÅcīPk>ĩÔn¤PqØÖU߄m°„(9āqŌ§‹ÂQ.œmÎJ ĩsDđÔZpu xÅAá‹iegT+ÎN hŲøvÕ-Žå_˜uĪZʓÂvļ÷-4Qā‘œƒXŌønŨîĖä3åیvĻĖ䥀īSĄÄ.G‘ÆŠ‘Á8ĮŊsž,ž5ŌØ7ņexfliĄTĩ´÷pÅ"ŖÉbjÜwvČĀ—^SU§ŊŠYË,€ķŌ‡rdĘę*x/D2Î2M%ÔŅȊņČ=yëY÷WĒļ¸ĪLV<2Gį†8-í[Vō¯-¸†u ×8 š@Íg 1V›ëŪ‘ÚEsĀōjÁš!‚ŦšÅ[[—RŠŦ„0äU‰$ĶiÎĐ Ŗs"*ãxãŠOl˛ch}ë:č=eß´ĐĶíu8Ÿ>hĮ^Õj=YQ‡’롥•zK…˜drÄdUPįī¸qTĩ?Ļ™ō(<¯ĄŌ|HډōŊkŖ@<ŧnŗDčåÜ9¨‚"ƒ"riąÍ+eúÖ.ąâ#`v:XđjåžĒˇ:ZĘ[o~ôA7ž„†\ã5J_Į áĩs }߈#ĶöĢ“–õ­]7Q{ÄYG ĮŦęēČĶ37ĘzZĪĶüWöû—D8ĀĸŽ]Eäv @ŨZ–rČ؁‚x5Ģe(XØÉĪ8ŠIߜe}É \,UŽAīÖ¯,ą†FéÖ§’V(1ˇŪĒ“Û…ųąžâ™ĘÆŖo ÔÔwWQ6öŪģˆŦ{Ų÷Āģ˜’[eųēs[ēqēˇļigēcŽk)īî¯ĻeŽFcšTžģŗšI!Øzf¨ę÷wIv¤9Úz`Õs%åē¤åČšŧoīŧ…¸-…Ī<×Gžë¤HÛĮ'Öš6Õ.ŽåcîՈu‹‹cąÎTsUm/ī%™Ŗą"ŽYjˇPę")%fĮ5čö+į[¯#=IĒz”DLWƒøŗYˇš¤Öēc<ƒ\lÚĩÜĒYœŒtvĘųî-3¤p eÉŠ]ÁpT6yãšŌ´ņė2 ‘¸-ŊŠx„ęV6=kŊĩ¸šõ!‘xFŋp’2.X`ps\Ūģ,öv˛I–¸4ņUôŽđ‘–š–ÃÅ7&BíAÅ\ŗņܡÛ@Ž*][ŒGqä[āļ*ƃâi>Đ!š8fīLņŠfļÕFáōôõNßÅ4ę =ZÜŧņŗ[ĒCoķ:õŖ x¸j—ŪBĮ8õŽÍŨc´íDs:@¤Žq\O‰<`úeōÛÅÉ<š‹Iņ„×—ĐÛ°Ú<ÕŋxŦZĖĐ@Ûå=1Yē?ŠîãÔ;¨ŲwƝk~3šĮTáABJĢoãiZøG$Ec=­P×UŸŠųy)ĩ>Ą/›k ĸÆ1ZjĢĸ*¨°8Š­­ãB(:ŽÕĪĮn!VÔî'šĶĩ‰m­¤bƒæSH_ôÉ /u …ūÖWØvįĨzeČO ƒ’:U+ËõbAÆâ+YžOėÂ#A•Îk‘Ú$…%đÕí.AB6NIÁöǎ ĢĒp23ÅI‘$dc¯jÔē°¸ÔlāhšĀÆ XšdĩŌ<‡ûę0TzՏāŨH ¤ôŊĢö@ .gÜÔríˇé^iãkYFĄŒ…cρjúrnÚîŠę˛!ŗŽ=¸#ĩ_’æĐ(ãĨZđÄéũ›"ô+X7—5ą(É­=zíf°L}ãÖ§“|ūNČÍá‹I‘dÆpzÕ_*>Ĩ)ĮCi5(â“Äh üšæēšė#k{xP¸÷5ÃŲ؟í áŒ|œ[Z~–!ÔԠߕÉ>•Zâ8_ċĀ#<Õ˙ėWļHÕGĖ•éŪŒ>ķ?€~Ģ27”W Œ×3­“2HŠšÉÆ+ĖõŊ2M:ųWQU.4éôë¨ĨÚHsø×wĄč,’Eķŋ9ŽFëIuמ92ƒ9É=ĢZ %R€‰ˇō:T.ZŪ$ĮË÷̍ĶôË4ĐƊX.AĮz፜ͯÉ>ĀNAõ­­'M{mr2õ=:fŊuNë|0ĀīOR˛&0Įc^Uã`ŧ×9ØGzĖŅmfŗÕŖPC‚qÍh,,ž'gģ\!<]mÍļž˛Gp#RGB+“׌xŠØž9úW[/‡ífˇIÖ!ĀāŠķIôĮÄ2,¯ąNpkB;%°Ž7%†˛Ą‘æK‰l\šę~ŨưÍČCTüi]n*>b9—â-2+{(¤ ‡=ÅImehay\ä×KđūaöGP"´/lõÉīŨíäeŒtū´žˇļjmîzûVŧøHäcÎs>u}Nô˙ =kjZ,wō#€0 Žkį­vÖhu0BgƒNnË2(t­û„ē‹MS ãøŗYöQęŗ]Švm Œ“^‹k¤K¸ķˇšį<`ßņ.(:îĪáSøLŸė¸ō Ž85ą-Ü2oFaÆqUR$AČëOÚEߑƒWD+$.€Ŋ¸ŦĻŗ†92ŅíĶáĻ@䰈(k6ëIˇžā¨EĪ]ÕPi0}ĨÖ}"ÕąÕ sŒREjļû•Q{€:ÕĶí%s$‘€IôÅLÚd&ā=jM?JĩŽ2Æ%'&­Å ØŧÄ`÷Ģ×Öé Š…⹑āō"¯ËmA,n€‚Ŋ}ë"ĶDļKŖëœV„>ļ#lžX•ž˛ķˑ“ØÔ‹áˆî•F:ŠąŠ@HëUdđÔw ōąÎNzÖŽ•ĄÛØ(h×Ó]&Ÿ—üiˇNcˆ´i’ZÃÔtŅs´ß9+ЊĮūSxĮŌ¤} íÔÉ8îi¯ĄC%ąAیÕí;EŠŨ E…ČĒķøvŌIūd‰Ģ/á8Ž]U× zŌˇđô6vÍnJ‘Yˇ^ˇˇ#ģ [ C­*dn*uđŧŗ™Ę‚Ā÷­Ûm<ÄĻ&Q´=+"ûÃ^\nĀSė*埇ĸ´S…-Æ ĒqxNŌ[įœ‚9Õ‹Ī Z\N&~•ÔéQY[ˆÕ‰\p _”“ŪšË•koÁNĀw5SQĐ"ÔV L`•Š$đõŧáD¨ŋ ­dcDŽ Î+:ûÐ^;ģŽŌŪĒú_†`Šė>î@Č&“Qđ…­õ陾öz֌Z$v°ĮG•ëīYZƒâŧ™%SąÎrE[Ō<'Ī#yŦ:gĩt­  *¨ČŠŖˆ¤@”Ā"šë¯ Ûj7†WN@8õĢē…í­ Iå‚ãšē—†-oÛ{.ÖęX ‚-Ūŧ†%‰čOjĢyāÛ;‰–bs é[vöM˛ÛîíÖ˛¯ü+kupDà SW֖ņŧ{ ĀĪz×Á–žsŒ•Vį´´_ÚØ0pIāTúƒ­īîVæBASÆ+?Wđē^Į;SI/…"m´4ĨĮņ}kR6t]˜G@jÅÃî‰ëU¤Tx~vËvÍ\ļ” ÆáéH˛Å ŽsĪŋJđ™(%1ÖŦÛi<Ō§ÅZNķČčj´2Ā$*ŧã­VÔ¯b´VrĮn3Í3B×mu Äã ~U¯u9 šüũk8¤rą,~oOJĩŠahÔüøâŖËe0į­ZļU ŒwíDķåČ ã‘ÅVļšļûFO™F6žĩ%ÍÔVąųŌžĀzJf¨ÛŨ!d`ūõ~YA䤁_sAīW”ĒĮ’Ü÷Î7ˆÔœpjXãũņ~AÛĀ<@…Ãî#ԘęŲ!TâŠb’‡$äžôß8™UŠ÷ËéžôI3<€6žū• RØ"̈ÃËģoˌSĄIã>ÕlIø°cžŨ̟ÔõË+)ÄM/SVíœß[ųą?ˎ ;ėĮĖ]Ām Ö´"”Šܸ xÎ1ŒTW@´D0š/ ŒëWÃ8Q'Jé/gŠ7PŽŧW ū¸î'õéN &)Oįg äĢ)ęhŒÅ<ÎX’ŨĒf‰V2¸ėEqū1ĩŽ; į%™°3Z^P4¸Erž0üōāđ [˛Â<#Ũ\ŨŊũü×,žaÖ´,u›¤žō&bAŠõÍjé Ā{ÖKjڍ\LJ°āVļ‰5ô÷"yķ´Ÿŧ{Wd—*ë÷˛CUĩŊEŦ´ã" ą5ĮÜkwMh'fīŌļtũDŪi*ž×Qž•ĘŨkˇ˛]˜ËnÁéW4ũjîĘėyŖåls[ZΡöx”üÎ8ÅrˇæîK_:~Cr+[ Ī‚~RzWT،ļŅUīŪįėĨ“Œ+‡“Vē7m’H=*Ä:Ôö÷Cx;ģWG‰ī ›2‚ēVáņ•d˛I\ú×?'‰¯%æPLdô­Ŋ;ÄÜÚŗ&7¨č* o\đm>gˇZŸNņd˛\ũšEÃį5ĶZ—œ‚Nâ§4ÛâD‡hÁë\­Žß[jÚ7qPÜøŽō7]Įdø’î#U'œÖ°ÕĻKAuu‘‘Æ+5ü_xv•?ģS[Öū*’īO,Š’Ŗ,+.?HUÁBH=+sLņbIc$’ĄFQÖ°Ī‹Ļ7/"Ģ4yŽįÃڄzŦDį‘]8@TŽ3ĐUMoP[ &fãhĪæËã+;IÜÎ+^ĶT“WĶä’Q„ÁŽcDÕäĶ5 ŪÎr@ēŊ/Å­¨]ų7GŖUņˇģû=Ģ”öĒ–(¸‡QŨåsĐSõŸMgv˜ct­;ĪŊ„ǜ˛ķEŋ‰$šŌŪåásŠå´mjöë[f]ĮæäÕ×xĻōXôuĖlGrMWđŒ„h’NŠĮŽæŖ‹Æĸ Š `Û× õ­Ɖ{va+åɌëFŊâņĻۈ%ˆÎeÅã˰Ɠ'Ĩwz&ĢöØc•Ô‚ÂēÚŋ8䃚‰ĨXä;ÎA5ŽęņéļÂi'Ž_ūC˛FÁā1Žĩ͘š6•ČÍqƒĮán]ND@‘+ŦŅĩHõ]8LĄ€'=ęüŒD$F@ tŽgÄZõƓĻîEĖŽ$vŦŸk×:‚´r`y Y>=…a¸‚eČbyÁĢZ‹žÃg …f@9>•ÛØkŨÛ­Ėr‚›y'ĩgÜøļÍ.Ö(Ûzƒ‚{WQĨßĮz›Ņ†Â:Š’íĘÆä €+ŒđŦ’ FųˆL‡ÖW‹u{ĩÕBUņ§ŨĄ†ŲđÅK` ­göĻNF@ęˎ1ÛÆfô5JY$ģÄęyä ŨŠEä–8ī\¯db@2Ãu_đĶŌW'î­sž4•A(š%;J¸ØNÁUÆkD‰eē™ŸåįƒGŲUuĨî;šƒÄqŧ@œŠ¯É–eˆŊÍw:LĐÜZ)z•ĄiyŠ‚SÆRÉ›˛8Á'ŒšķÉãoąäą$ö­]_ôQ û՞ņ†×‘…ķĢ:‡–ˇQ2Ų­k–ī-ĩŧČŧqQja´˜Ķh 1Vü*Ē4oŪõÚŧ#ČäŽ*´ņ,vŪcķŽ‚¸+tŠm}˃ öŽąÅ­ @ f—[thâ)ŒTw;ĻĶc “ČŠ´ĢqdÁĨ ŽÆ´ô[adnčŖKGt:ĖŦTOOƑF'EÆ(‹zø•\žyĪjŌÖíãZļė’7cĩ[ņĨƒA›`Í&ģ<+áč#8ŪĀV†…/á’Ē}§5OÁPÁĢrķaJž†ē?]Eũ”Wƒ TđTˆt)ˆãĩaXØÅuâ̇āŽx0ļŽĶÆå ןâĻŽ_ŽAÄ{V¯†4Û‹ņ,ŌŖ?@;W¨Ú {]ĒBôQŌĩ“t Ôw)ģcë^wãŊN ĩ9-Ÿē+’×^OėÛfÆÔ`z×Vē„OáČãsĮ•ČÍy˙ö=ÛŗMnÁã;qŌŊCĀH_DØĀ§‘]CÄۀ=kšņ…’.…#Î{ĘđO“œ§ä ß5—ņ –vˇUÚ2Ũ…Akooá°Dc,}čŅ.§_ Jc*+;CˇŧšŠWōËdœîŽķÂŨZŲKĪķnāgĨt2ÎÍi*ąįšâ´[§Š[°€ˇī{VWˆāŊŸPķiéšÍÔü[ ĮŽé^#í,Ŗk#X×áē- GŊÖ°4K–ūÕá›nyæŊ+Oģ! ļ\‘Á#Ĩrū1¸‘<Šč4iq ´û­*Úā> g€i˛ Šßb¨ 'ôĻ[h0ۍņŽõsûÛÚ!¸÷5ƒŦx}šđN„aEcÜéĶ\6ŨŠē}+M6–I :Öĩ¤_g•ŸgÅ6úĶí¤ų„2’0+ûÃöfUasķ #Ķí-pąÆN"ˆü=k+™T õ柋i4¸–Ü:Ģ§@†@@âŗo´;i#(ÆĖՍ+CŠÖMÛ@Č­YŖ•eOB)cļ3BņĘĮq\ųđí¤>wņ†įš­{ [Í8” į¯5žŠãhÁیũ*[]% #*Ė^ˇ¸OPkOûlY"ā’k6Cor1–=iđxM>Ön$9lŽkŦ´…R-…ąƒëŪĻš2Eãåæš=nÕo$Û&9ãZ,Ú´*i̚Œä§9ëÅkjēję6Ō €{×+…rįËb‘ũq[ÃņC`ŅĒōFŗMĶ<,ļw)4d€y8ī]öąÜūé€)Üæįđj ķ•VoēJč4Í5t˜R ’ <õ­Z@í¸ vŖÔtču 'ŽU?ʰ!đ­ē9HÉEũjōøb `¨aķcŊgižļ‚ęWB~ ž”Ûũ­įßšÉĪZ|ūˇËV@8aSčūŠÖíĻ”ī‘Fr{VŽĨĨ[ëĘ ú“Ō°¯<đ2’§ÍZ~Đãą´’Ûp ôīQIāøŌéæ…ČßÉĮJŗyá¸olV9•QëMŌŧ)›m&Ö%\p3QhŪ[}BKœüŨjMCÂȚ¯Û\ÍĶĖ_hĻ]`ĩÄ Ę[‚*Ũ–ˆF­ŲŅâE9$šęõ-6ę{›6…ĘĒ7̓Öē¸O•ž´N2AUé\—‰ü/Ģr%N$ĪZÁ¸đLˇAažbÂ?ģŠĶąđĒÁe,S9pWjûRÚøUmÆ%8'œ÷Ž›MĶbĶ ōãŽ§ŪŽĢ ÉRvâĒę61ÜÚiNAÍs–^k)žYXÄNBÕÃúôÄl횊į­wg / 1ÉĢÚ?†?ŗl$ļ•ƒŠíëL_Ëoæ}•Â9Ōˇ4ííėJŧ‡Ís’j[ØU,åPß6:×áLˇˇģš_3ŽÛėQHİ^8Å|ŨaōĖĀ|Äõ V%ļžØČOaZ~†m.b7cøĒļ…6ļā0 Ī Wĸ[Û$ ˇŽõČøĢįØĖ9Ũ‚kĢđėxŌâtNBõĢWģ|°íōšŽ2ųķÜ š9 Įģpô&Ž%ã79 힕—ĒHAČ9RyŦ—dTŠæ¤û}Ú/œp+BÂíåŒųŦÛĒė)ÑˇšĘ‹s3€ß0Ŧírô$ ĩđÉ֙ĄkņJūY9lVõĩÆë—f>č5 íÃIwŊHĮL ž°oĩØŧqšu´¤HĮ–RÄĶÉ­HÍŲprŧvĒŦwB  šã|æŦמXŒ‡5ĶMwqnĀ<Š sŠōûO ‰gi œ)'ô­8<3VōŧÄJäfą¤đôČ–ūXaĐQĻø^hnVErOSŠícF@dÎF9ŽOưESŋ8ާÃ(?ą LsļšßęS[Ū‹hßs“€=+.KíKO’’:ڍcWģ†t}Ąų"ĢÅĢjĨb‘ŠÖ­ęÚüŠoCFę*ƒ\ę6ņĨˇõÅ\ģÔd“L[‹pĞMTŗ×¯dĩvé°qL‡Äˇq:įæQÍKcww"I3aUG&ŠO-ŪĸŽŅ&čĶŠ4˙ @dÔäĪGJĐÕ|A4‹CiëPZkWS摪ā†<âŊ %ˇíã§­IokĩćžÃĩ^™-ÔcŊszūļ–6ŦØSž‚¸F×gXŒÅrŽ{U¸Žc‚Áo ß֟ˇtĒŗ*|ƒøˆāÖü~#YŦ ‰´ĘJ˲ņLˇw- Ü)’øĻXo„&,sŠģyâĩXYrYøÛšĢ?Šeļ<Šrz ­}qĒYJō!D5“ĸj÷Hâ ĮŊuZvĻu{F ‚TäŠå5KæMc÷a”)ė+Ķ<3,ˇv‰+@Īĩį‰[‚zÔŠnĢJ‘O˜y!x9ŽK^ņ(ͤH†InÕAŧo„HÚ3ŽĸϏņ(ļˆnÎdåVŦiž0Fē8)ģUę¯gd^"KÔWšY‹JôHÁؖŸÆŊë[D˛wØéPEãŅ)ēōxį­dø“Y‘•dn9ĀīZÚeõÄÖŒdl•PĶüQ?ö¨ÎüVĪ‹Ļ:ĒŲ$M€Ø5Ü[E)ĩYB¸~T厐ŽÜIëOŽŌH‹)QíŠÍņ> 4­9˜).zq^EÅæĢ{ŋæÎîÕčņø…4..AÜGz,ül†î8’ōOJĐÖ|Eo ,jؐž‚ŖĶ|IÅĘÛļV_CÅ6ķÅöļ’äžqVŖņíšÜv*{qV'ņĩŊŧȄåd9Î+¤†ę;čUá ĄĻíd}ŧ`Õ¤ļŸ•‰æ‡ÂĀͅéÅpÚˇŠá´ģ6ęĨœ}ėU­ÄPę[ãUaå ÄÕvņ`k™c„3l$Vž—ŽÛŪA#)Đ}ÖëTĮitmËa—­F|agqt°SØâqâ›kGD”įqāŠŨK¨Í‡Úw€ģwdöŽQ|_oķíŒēƒ–aÚģTS´ķĸ#$p*{ō§NfoŊƒšä<ŧ—…:ų‡š›Äv7|\Ž+ŠVĩšeÉS[ĸT’žb)eŗ,Ŗđ3šąe ąįĐ֐HšU܃Ļ@5ÃxŨvmā`ˇjé|?ģ‹”WâŊ6oíT¸ã<⯠ėŪÅĶĖ”Ž˜Íbx–5{xBÆCgĻ1]kļ JāzæüWĨË & „íK{r—z*ŀ``Tú“1ĶZ9ÁU#…5-œļÚĢZĮ¯Úƒa=ŽŖä'ĖĀÅv7z;ĮáéĢc&šÍål,'Y–<`Ô~?´į#åŨPęPĨÆŠ"ˇ=jŊ¤/mĒGˇæĢ״ōíŖfįŽM]ØXBŖæīPLŌĒ4G%OSØWãXãŽČ3“Ú¸%°ā §+Œ…̎PLúMš §šÛBš¨ ĩŸ ŲĪ*LĮîķŒÕM)=iÁ8ÁĻ_ÉæëjčÕc^r†ŨGj wÂn_+ž•ŪjŲ§†ØG…Ė|uŽOÃQÆ-nD~Ļ­ø>B5[„åį­A{ mâŦJŖfî•čúTņ ōmļ€1ōûVŲ„ŧ9r9ĻĢyckč3ŠŽm˛†-ĪļkĘŧpŅË~Š•eŽ}~Ņą4ëš+[Pģˇēžđ*Ŗ‡U\˙8Ûę—ö˛č.27ãŋ5™ādˇōä,FâՏâTšmo Sv4ë&DHäi#Ŧkq16.ˁĀė„OĨ>ŲeMōIŲāÂņY†M6_3 XJäŧĄyËÛ[ø…Kãøã-np í[š7‡ėŽ´ø]PoTÎ}랆Ø˙ÂjévINT”Ín‹-Ͳ€\ōĨEâ H›Äļ°ļ3ŒˇjgŠláŠîÍaŒ ČŠĐņ$ÅĄZȁ|Îk´đ[ģhą#æē6DiĮ$~•$*đs´TwRD-¤Œt ^)­XMs¯\Ig&OqVŧ9-Åŧwp+1CĪ­\đ„x[ˇ˜1cÔē4Nū"¸D$G‚HŦ§Ķã¸ņ™ŒFHõŠŧMcާj‘€›8ôĢž'ĩ‚ÛGFE%øÃUøŽį—Á›;ļuk—Đ´û›ĢISp9ĪŪ<×}ā{ mmdI$SƒĮ5Õ_ 2į)Ž;ÁŌKįs€dų@úÖžļ’ĘđžAÁã?JķãnQŨŠã­>ĶUˇ‚š@NqŠę-åķĀ`+έÛ@Ēä)Ü•>X?xތKƒÍq^<_*:’Í]o‡SFˇ,JŽøĢ÷zlS!.ŠÁģšÉ]Oˇvo-UĮARMĸØŪė2„¨ę*[}.ŪßrĸíU/ô¸.Æį=3XQximÄdJÖû”¤ā ÃvĒ1čvÍ?žTŠëVF‰ksp—rË×Úļf´C–qŗoZäĩ_ ÚŧŦŅŽ^ĩŸáKx<œÕŲ´ 7f“Ë íŪŖŗĐ!Šũ_É õރËx—r¨Ā4D ƒ’2#ŒĮq=ÅfęēMž¨ÉʎŲŦ‰<+oˆĶ5 ÚÉbÚģzJƟÂ0Į„Û éØVĨž•oaf4ˁĪŊaOá•ģžIፐ÷ Õ(‘ũ˜›Ų÷H{æļŽ.c‚%!r ëUåš[‡UaĩHāúSa]ŒG˜X+×ŧ+§z& F9ǟđ†1DÜw(ėi“ø,Ix lã“RÉāS3YzŖŠ¤ŋđŖŽš#aēŸz§áĪ ÜÛŨĢ–m™Îušŋ…“Qˆy˜ ŧ‡BÃÁĖ×ķÍšGEõ­mWÂÖ÷ FĢĩ—ĄĨB4s¤Zŗ`ģmÂąŽ4Ë{ŦĖlĨˆÔö¯HĐôČėėŌö†QÉē"Rë ’*D切•E*QÔ°āÆ¸īhwē„.đČĘ3šį´o _Ų.ņ6ÍĮšÚÕŧ/6Ž!Ėš*+§Đô–ĶlÖ"ۈ5‘¯xv;›Åēˇ“Ë›ÔTZg†Ũ¯ ÍĖ‚YOj¯Ģø6kũ`^$ģXŠQđ„÷÷—™ŽĘ›Qđ|÷v鐔\bˇŧ7ĸͧZˆ^Cŗ=jéZ$UĀå}úÔ@°ŠląŠ_˜d0ÁŽã ũĨ5Ė.FķĀKđßŲåyd_1Ücž1Q\ø\ÅpM´… œ[Ōt8l<Ũō3ŽIę+$ø2Hõc~ŗuj­­xNīRģIŨĀō ?QđĩÎŖajĮŽkKGĐŪÃO[yž~1ŠĒ|!*NæÖm‘ģr+­Ņtčėlö`'šŖ^w[ <¤ë×ōŽ3ĀîGÚw)#Í8ŽÎkqsĩ^Eâ ]-ėsd°ę+…˛ß\Räīõ¯[ĶãxláF;JŽĻļ`™†žüTå7Ą•]@Íp^=”ˇÎ͇ުBN• nĘą-ŪøĘ—uĒ…dŗSKnęŅĒu>šĢtpā61Üį5F[¸ŧü‚˜ŦË˙ÚYŽFėô­KČîŦ–á[(Ã#ŌĒÍ2Ë+ÃôãĨGctÖîŅxaŪ¯ũŊDa]ÆGĄš• ŗJxãŒwĻÁuZ¨^XõīĩFŦĨ$7J.8a‚k@¸d1ąĪą’_‘”*ņÅ4ŋ™!ži‚uWlmüę'ķ'!ĪLqŠ´cĀīQ]ąX“aČĪÖ}Æšg(Ķ l`Ԗ7Š,o´­Ū˜,ŅŽ˛œŠôĢ2Z "6@hŠÖ82  1įŠ|ąĒ€›¸ëMG‘˛€T Ú¤xÁVJ|JŌ8}ĢīZTr´ŒĶÖĄš!%ž2¨n•E6†Áč8ĢĐmfųG¤–ų›Č§KŊU=éŲÆ HĒūpį’: ¯}Ȍœ€N8ŠŦ-ŧ¨ įåq•Qyæˆ-m.įĮ§aMc#Ũ>0ã§zšî1$6@HŠĪˇŅ!ŠE˜( ÔäV¤­"ņÖcßxķS-ËAû§Ĩ,1ucÜR˛*Ģ0āT1ÛFĀÜ=éŦށ8ŗÎIöĢC{(ļOZcĮšūeģU˜ÜpĒ;Rcv2@9ëŠw’ uĪZ2•ÛČīRĮŸ@2jfp˜\ry树wœ¯i. ’5ĪnõZo1“€:dŠą +l7 “Ãšd҆DĮŪÅTžÉžķĪ^N1ŒÖ„gtMä‘KQ“øWã¨ŨĻ\ČŦ9ŦŨWXŠM+D  oønXađŲn}k˜ŅfŧE,Î)n)|Nņ&ēyÅXņ øŸIERãŠĀ0\G3ŗ„^…o­[&ŒPJ`ātŽ;H"_M+A9ÍM´?ŠØž8ÅAso,%ß0#-Á§k‘–ˆE–}ĮĨmI¤¤Úf3ŧ(É5ĮZ@ōHlŲz–Î)`ŧ{Dč[šī&ĶRßLBƒĒüƸ24m}Ðu\+~,Ëûš¯W°H‘@ų€ĪÖ­Ęģ u`2Gã×ņŋü%Ŧ’ō7t=Ē_Ĩ¨h%UqŽEI|čžPܜĮzÂc9͈U=+_Â7+1Į°¨5bšņHR>SŒŪ—V‚85+Qė âŖ×î3{=WU̞_ŪÅ$îŠF2*ī‹áh­bû:-đÔ66SÜéƒj§=ęk+‚Ęáe!”ĀŽD´Ž÷Yhßîg¯HŌ4+=._8€ ŽIŽžßRĩģFX3Œ÷Ģ–ø6Å[“HŅ3íÍ?hÜ8É+ÛĩNäE’@1Ķ۟ŊFI aˆH[ "ĻV"WÎJŪ\ą†#ŒtĒÆuÁHÆ[­>üšC `žhĢ*D˞rj5“%ąÖ“î9fįŽ†Ĩūčžá’:R”$ œĶX)-´ŽÂŸ*1*ũĐTJIfwâŦbsĀ=Á¤ŲĪ+Ūye_˜ņˇ4üŧoģŒgS%ęF=*xe1ü¤p=i˛ŒXįŊ#9!‹Æ1Š7c뚍ķ8ŠO˜äđ; Rš%ļãŠ! ŽI>•#GÉcËĶŌĢ*†˜6ņÚ§ 6üęh‰UG8ÍFŠķļí¤ëKĩ•\ž+;Wf|§Ŗm95Îx(ˇØŽˆbIĒ>*ģXîáVPĶÖĩeA@āØâšŒƒĒŨąVb@aN 'ĖŲ=—ĨW–M˙Â×ĨyߌX5Ü$aÅwZc,z\DāŠQšm۟m}nÁâ zÖKx>Ņ› €GLæĻ‡D‚ŪŨ­‚˜ÁZĨká›Q#ČąäŽūĩΆ­îŽ Žŋ7aUeđôs…I:bŽŋ…Ŗ6Š;Olô¨G…ÄQÉIP09ĻéžKIL‡–“ûJ;ŨÁÍw1ųAÁÚ0yŠĨft'8æšmSÃK{öˆØ,ŸŪāŠepeœŗƒ‘ZKá0tĨÄņYįÁRhfs…éK§ø5í\°|Ž8¨ãđŦōkFnœæĨšđ“Ũ^™ŧĶōÖąĻHē‚´ąF3QAĨyķÄ,ã`ŲËWĄ.†ˇzrA8øÕ8ŧ3sōĄlGíVÃō}íŲ˙xŲÉ=ë ËĀ÷6—ŸhI0ŽļöÍŽ4áņ…û¨økÃ÷zeÃŧ͸7é]ÚąįĸƒÖĄ’]ĮäLŒT…c¸Ž0žĩ8Ā\ž=ŊĒ?—f]ËR¤ŅF /Ž H˜zķOČeaˇ#Ļ3U 2…pŊ‰Š",ˤTFjī>ĩVV+'–ƒŸīTœī*į4˛+;ŽŅۚ™xœuõĨRJŽā3ëD‚Ge$p8ÔĢlF@99ëS ųFOŊ RsĀæ‘QW-Ā9āĶ‹ˇc<Ō3o•AķÍ!,Ō€QŽĩ`§ y¤;7cŽ{f˜ce‘QˇëP™v¸ÍHÁÚ)R3œˇJĒœgĻiĮ;ŽÕéUU‹Ũ]ŖoZ˜ ;Æ=sOĩyĪLž•l íɨ42Ÿ)xÁëœÖf˛ir“‚ÛIĖø&mÖR¨6ķģŪļī4Xo¤Kb8Ŧ̉LdŠûŖŠ=ĒĨŽĄ åËĮŠ1ōkfIc;TXtĒōHĢ @ynõÉVÜp§Öŧ˙Æęŋj{—ÅwJƒŖÂŒ{Ŗ­\H׿!†Ū›ideŒ­ĐŽ€eŧÆäw"Ģŧn qƒŌ˛/ŧEii"ÄÄ#-U ņ¤ãbĘšÎsíHū$€Ül&Ū­]k6ņ“yāöŠ´ín+ā#WC'¨ĢFåášes‘R\^¨ĩ3I€įéTė5¯Ŗ$¯;qRMs*ąÎUOLĶ”īÁjs@|¯1š=U7ŽŽ¨<ĩÖW=_I vˇtĢ°Â¨w)ɍ8ŽInĩÄøUŠM5ä$0ā­sžsö‡`K1<’kЉųÉ~ĩ6?)äÁ~œĶîdHÆXũ+Ī|uqŊ#ˇz§t„ÄUWį ÔQ[ųéķr1\o‰ô5–’8Îņž}ĢđÔ ú„ÎNGAUõčĪU܄„Ī8­‹—z,)ą~Ø­¯ é­ĻÛų÷^:š|ž*\Ę!‹r§š’ Xjētā­sÚ~šö;‰"@ŲÃWĮ‹²“Ķ5xĻ[ižt`­ë]…ŽŠēœÎ¸Qē¸ũKÅ*×,Ņd+F×ÄĐÅĻ‹†9cĮV,ģˆ9é]N‹â+{ô ŋxVÄoįČĀdŽ ĶĻS÷ĐaąŒÔD–EĘüĀc>õzĖģd⁀*…ây{Æ;U%ŧK8Uå^’ÃŌ˛‹ ķ¤x1įė*×öÄWyšC9ÎÂeN˞G5Đh>%ŗģ+aģ=ękŲ¨.Ãų@įÖǎįÅ+‚O8ŽĮÂRJÖķ1l×WlCĘŲĪËŲēUĸ`O*{9U™”ļíW Áeũ*\t¯>ņEŨė:˛H&`ŽŲÆkŽĶüOmq#Ė<ÍŖë[ēŧcMiQÎJæš _Ī{ŠÜ '-8ZĄ¨Īuoâ˜ĸķ]cf× ^ę–ö–Ĩ”—ÍyFĨŠHuekk—*ĪĶ8ÅzēëiēT u'Ŗ–úS-ŧQĻ,  €éÅl\köļÖ~q‘pzV<>3°–P‚|ą8âļe×--mÕäœ*ã9'FÚ°šM™ã&ļt­bÛRcä•8î+\ąÆĐ3Šƒ.ÛvāNM>FpĒ~^;æ¸ø˜ØGöx ÍŒæŠøNîųf{‰Ž ÄW8­1ãˆ>ØęĮåCƒ].ŦÛjV$Lâ¸?k3ĮĒÃs”Rã])×­ôí:š€TriaņŽœå˜Ž ­I5x’Éރ‚ģrŽKÃŪ2KínhϐÎė'Õ-ėŅŪiT.x¨lŧMarq Ę_=[ēԖķ@ŧķÄŪ*ģËŲÜåé]_ƒu9ĩM1%›īÖĩæÕ-mnVÔˇcŌ¯˛™#O$Ö_ˆŽpFrPā×7ā@‘hī!lš$r;ÖĻ­RÉ?\ķM;dūi&mĮU_Ę"šœvŨÆkg^ׯíŽļÅņÚŦøZúúõŲî#*;fē‰0FgŌŧĶĮ‹ę6ûNw75ŪčqŦ!ämUžüVĀfÚŔ>STVf•›ih3Ģ•Œ?#ЧDJÄBÃ$U BÜ:#’:W”j‘KĨkÆHÔŽOjÕÔô–šŅ>ÔT—o˜“T<)ˇ—ŠÎČÎMv~*ŠUŌ\D1ļš û&āĘ@žI<ŅáĨļ]ˇ—ƒôĻiv‘ËâY‰\ņMÕáŒë‘ y§xކŨ6ā Ņ-åÂx|,lr@Î+"ÖåąnĪ\ÖŽ—hąés™Č Wđô0y“´€x­/ ļÍvt…Ī5ęGnPAŨS‚ ˜äū4ąˇ–Ė¤nSߎ*bUĐdœNôƉ]›Ü ×-ây#ĩą•áOĨy𸠧J"O—9Ö˙…ˇ]h­aœåŗ\Ũž˜.ŧG,YÂŽzôĢv1ũÄ‚4$ŽātĢ~&ŽĩčabLJEQņ%ĩŧGå¨ kĩđ” .^ŠŽĖ‰Ägį=ę8ÔųŒŦCø§‹]ŗîCĮņ ÕÁōĀųēsU —\‘´ôëËĩĢɯŧP-$fX•ēfŽM¤›}JŪH¤Â÷ēÖo‹ä^B žM7XĶVÛM†â2wė×gĄ@ˇ~))Ūą<‘ŽģvHņK¯ĘŸđ”ÚåyĢk -æˇmmš„lyĒž$Ķ­­/mŒxSŧ V÷‹ KáˆJ–ÜĒŦīx]ĩ]:9ȝÆj§ŒZëLōl'9ÉŦÃm:ZE,0¸|pEmß%í΁ē\Ģ õĒ>ҤÔ-]啂¯?zēo‡ĶÉšsjdfEΝ[‡8#^ԏ'—rŲäSe$Įŗ5ä><ĶņŦ[ Ģŋ"ēĮļĩŗĐãeųæ"ŧđÜD‹pmâ/ģ?3V÷€oĘÃ:Ęå@~ģŠž5ōĨÔ-9ˎwU˙Aü#Q•lŖœôŦ}/BWđÉģ%‹„$15Ōø]E߆]dmÛAÎkÂ:UŧšÅäŦ lo—5[Æú”ÃRŽŲIOAYÉö˜DOoˆĀŽ@æĩõZöu´ĩ%Āŧ}iôŦØe$¯L’kžÕü;Ŗxŗ¸ŧUÃa–_eaļ[ëæ¸ÜGR*OÂ_jŲČ~īb CkgäJ7ƒĮ5B? ‘žĪ6ÕôëO¸đä­hÖđ0 GÍīY–ē˛r]žņĮŌŦiģ´ÔžŅŋå-ĪĶ5č6äy[ ČQÚĨÉ&[hķŠŖ•GœtÍ=ÁÜģ8íQĘĖɰ•=`ëÚj_iŽ÷ņœ×-oāŲæąu/„sGđĩí„nl!/ŊW°đĩÔŖNĮv뿘žģūÖûQ`9āUŊOÃrß8— HŧäV ī†õ ˛ŽÚxSM¸Ķ XîØbē™#e'Ÿŧ)čË\ “É4n"RÃŖtŠdKä<{SLašN $俏?øvSĢĨí˛Œ“’ >ŪÎúä ņ…eū/JĀ×4›ë­EJ!*ÁęęWšdqmáF1[ÚU–Ŗ‡ÚÔ §C@Ņ5 ;R‘ŨÍÔúĶ5oę稏@0ŧŒVžŠáۆ‚+¸ĮīášģĪjڔĢ+Y VžŖ jˇ:E€qÁ­Ī 鎚~š!¸(āc­M⏠.Šgˆŋŧ^rk'OŌĩ'ŗû2ÁcqŠĐÕ4k‘ĸ4Iįo”Ö~ƒŖj6t‘É\ƒz„tBÃW’îxö+žũëĶy­•ÚŖÖžÄųˆpĨ1‚}é.rÁ1’:מøŗBÔĩ B9 PR6ƟZЋKŊšŅĖ2F1Üįãđ]ęĮ"oU„sõŠl<uhØB|ˇäāĶ5oj7—JˆŅ†ĐkGVđõũΘļŲų€éRØhZŒ’Ī ą\ Õ¯ čךU”°NFÃĐÖ|~ŋ°Ö]í€1ĖŲ'=*îģāöŋTpͧ5VĪKŊķ–`M‹÷š­ë$|Šæu?TÔĸō„Xی×]á[+‹=1c¸`ŊTŋšûūq–‹v{Wo/åõīéYŪ EūËšŪ‡ƒā…i4‚ 2j]SAŽōāHŲīۍ†C—ÁQØTîbQą-ĶŽ•<ĘprŖ$f’{ÅķōĢƒŪ´~éYA5æž8uä–n•ßx}"dMœ1AŠŅ’Sˇ‚1Ži-đšā;úSŽŽ–.N+5ĶrœįšŖuŠÛÆâ=ëģv1šģʲ8^†Ŗšã‚P‘’iE’ üá†yëJđŸ;pm„ö§B<šÚI†IûĻŦÄÆ{ô>•@ŖqäĶöƒ!ÚqŽĩ+†*š vôãšĄ{<•ļāéUŽ/aƒk ~ĩzckdn7õ$TX¤G'%‰ôâ’Úq’{víVĸ- °-š1Á5n9á\1 iÍ"åqü>ŊéōNT¯_JŦ’ŪGŪfīUõ  †ŨÆĨŠō4ˇŋÅÖ­6å„lÆč{TQJ^!…ŗ‚jqn`€N28Ē"yĸÜnÎMG

X¨ę)ňBHŽkƒņ‰Žô‹čGļl+ĸąÕc¸ļWr I­#wûĩ ĢLđÆėŽT=iĐ\7}ėŽ•‘âe-ŖÜļsr=+#Á¯äč`dŸöŖ­øÁ,/|–S‘WB)šŖ(ã=ĢM°!O˜qÎGj€Ė]ˆĻ—hķî“Ôš’VVˆĮĄ¯*ņjÄĘŲ[ģ}ãŌĩ/eŧ†Ú8­X8Ë æ4˜ Ū"‘.[’Š—Äp˜5˜’ Ķå¨ŌbÔ,ä.rÜņYÚÅˇŲŽŌ8âŊVĢØĖĮV‡ÎVL0¯hŌ’!ldÁÅ^ Ĩ€8lš[ˆ„q0Īa^_ã=jÅO›$ļ+‘ē+5ĒîP 5Ŗb‘ę+o`īū*ąâo2É"ˇŒ°^„U‚o˛ŖÃŖīUģųžãLY%˙X5ĄĻx~æ÷MŠpí¸ķ׊oŠŽ§ļ†ŪÔ9 +tßfRą{7­vžžWĩVŸ9ģûR˛&ÕƒĪ~Ũ6€ œÍG<%KqÁdÖ|ÖBKsš°pkÆĩˋĆ N d×wi [é °œäWek%öŗ2īÚ įbHĨŌĩ¸bYNÖ=ëkÆƜ’$‡8įÎčúnĄŠ[ #•¸íšØÖZūŌÚŌÉÜåú°5ŠĻž“eÔSžū§š×¤Ô|9ŧ3vdœ×1e<‰ŌK#y‹īMҝØyË+bܚî4(=åyK;ŒãwA\sÃ7öô–ņJBäįæ­ įĶ5ë`ŗ–YMÕė(ŋē”Ė{š¸„9cšcV<(æĸ–¯ōāv¤–a/A5äώw­ëRYÁ#,`pxŦ+ë ģ-^Ĩ!×#iī]įˆ5Y4ŨŨc|Hø&ą† úK_}¤ôŨÕŠáģ×ÔôŲąÜĢŽŊë2ŪãėŸnŠgo3o5_Ãz´đÍwo4‡a5wv’6#ol°Ü§5ÄčËw{¨ÜÃö‡¤Œî­ß ]][x†[‘@ã<âŊD@ĖÉĨŠÜF_<äđqŌŠj–RÜY¸Gˆ<׈:H|^byI*Ų-]‰uų-tx­âw%°ģŗŒVmõ…ÅŽĨŦd s]߄ī[WŌ-ŽYŠČŧĩͤLe€lúæ$nĢž Į­yŸÄŸ’ŨĖ[ŒU;[čôqtg# .jm;ÅŌyœņŒuŽ5|S¨ę)•Ôg€+Õ<'Š>ŖaĨ˛Wå5§¯Ē.‰rKpTäúV'‚āķ4tŨČ'ŠúÕ?čŨ^‰^•Ŗۜ6Đ=M6âė6PsÁĒí+0šãĨ[ƒŽį­KÁ)9cž y§¸ÖmÆr3+¤ąš/°Få{õĒOĄŦ×iWØäãŠY<8đĘnea/Ļj–ĩŖ›ûeeUF^†ŗ´ũ*öCH@Q‘ƒQĪĄŨÜjBáÛ'Ž}*ŪĨĸMv"_$ šŊ‡¤ŸO1JpŦEŌ¯-.~ʘØ}Ģuŧ90ŌĖ[öųiē‡.™›%ŽWÕ|3u>¤'‰”2j O-ÄSJƒ Ų8Žå Š8ÁųIč*äW ˜ãâĻ3”Ãn5ƒâ;5ŊĶe@;qø×Ŗxp‹yĊIčjĐđˇ‡Ęéæ•AœÚŽø“ÃPFtĀ+ƚĎĶõ?$Zŧx^}jϝŖ]Ŧ+iœšę<,.ãĩX.†Ô Å3Äžëæ!äs\힟¨KˇXT¨8ÉĢĩŅ´eą´Ub÷õŋo(† ;Ž\ûPÁ ÜsCŪĄUjī yšFĀ2Hé^WâŊ.íĶsnĪzŌâøiōģ(à ŦŨÖîYåkrC’iúĩĨõöē“y*1VüLg}5 [b[šąāĨ–+c ąĀë[zž”÷L“ˆ1••…ĢŲ]ęqEn!eŒæˇc´VŸǁķ 5rĶøzíÖdSäšÉ"”øRdÖĸō˜œäũ+Ŋ–ĖŲiå"0\į–zmûko,ˇĖOåWHÔ?ˇmäû;2+õ¯^G e(méīORŋ1Õ¤Nq•ãķJĮË qŪĒß'›g"g¯¯:lú'ˆ^vŒ˜KšTÔ$žÕ­įŽąMtzõ“ęú43Ą2•™ŨĘi¯dҎ˜F1]ƒ4u°Ō˜ČŸŧ“’ sēī‡įÆ#LE!"ĄÖ|-q¯lÖ¨pà Jínån‚Éŗæé\g„t¸ēymßæ%Š´Dŧ‹ÅōÜ=ŗ…~kÕmŨĘ&x#¨Š–`Yŗ‘Naš@$sÚŧƒ[°ēąņcŨ¤%‘ÛÕĢ}ŖOĢčņŸ%DĒA Õ[¤ģŊĶ“KXícÚģ_iKŖé‘A‚Ās“Ūē/0 &L.Fi Ģ$y^}ëÎ|{eqy$BnÚÜŌĩÁ>ks*m#đŦ oĘž†—$Vv…eoe›kģkŌŧ5hļļ¸ åIUšūÁšŨƒ•8Ådø*dūÆEPIŗ] ÃødŒœæą˜!' 8ā ÉōÜËŧ‘œôĢl˜E'žÕ%´x÷œä}($K/5æ^1cũŊlüģ…uņXÆÖŅH2>PjÕŗÄĩÎb}iŌ^•MŧžũęĢæYĘ„ĮJ‘­’p ķšŽģ7” #¤ŅČåļã úV•œÍGåqÁĒ*RMCÎeČôÅkJûБíéU™J*ˇnšĢ×qM”`ģ}OSQM<BÆ;Uoô’ƒwb*žÕNúËnjíOĶ%Š$*B“Đš×ōāFŅ#$Õ šĸ› Šģ7zT֋rbQĀĢéx‹•`7tģ“# ,LT†áRFP0r)ŗ•\wã­lÚŦwY@ãœb{iĒŽČĄ-ĄÜŦCŧSĶĘy8A•9éRŧ‚PĀ iĸ#,Ą”õôŠ ĄœäŽOqūPXā–¨‹›NÜUkŊ&ŌędDbEeÅŖYÛíQ Gˆ­O˛@°ˆĘFĒxŦÃil÷ŒÅ#éÅo[["[.Æ5$(™Ēąķ w>ܜĩJî%”´L‡ąi§AŒÆœN•fKhäČEĪ­LFCp=*Ū\tõĻ%įČ$úĶŪŌ ‡"Ģq=ędˆGŨ 썍–Ū!ķ\į­N­ōäyíPČŌoÃũĶVcfŠ=¨ Žų¨îmâ”y…Îk=Ŧ`’pGaTg˛eÄK‚§°íPĻ—nnš$Čī[qíc8Ⲡé<¤ 9ÆėSô}FdÖqÉō“ÎkĻņ2]ũn!r ŒœWkĢj3FÁg`’s]?…ĩ뉑ãšS…į5Ŗ­Ũę7’ÛZœĸļ Ŧ¯Ŗ ›S^Ão–" ÃÖĒÅaäŨ<¤íâĩUwŠ,ߗZæ|In%ĶĨā•õ¯3ŗŋ6ŗ*’ n‚ˇ´;KŊA<ĶpåOEÍSņMœÖ’#1įšĪĄu¨ĨŸ‡`aōČWĩf(Ô¤Ķ–ôJĮ@­ļžKŋ Ę×8Lä×i~ÖöL‰!WŨÚģ=Ęé,ÖúiÉR2FkQ×.õ+ׅ&ōãCĪZģ ëˇp_5´Ž$Lu­ŊbmKQ[Pš^ĩĪßŲÜÃâ xĻ!˜° ŠöM*R-#G8Æ+S,SjqÆ9¨įfhʞ6÷¨íŌ)aáŽãĮ5Íx—Ãͨ§–§79ôŽwćLŅØ.ÂöŦß čŅę:\Ęę9<Z熤Ķãœcƒ’Aî+›ŅâšũŌZü§šôރ@Õ/-ĩÆŗģbŲÎ1WÕÉë~–æ÷íVäīQɠߎ–cŪ߂ZÍĐô›Ũ2ķ.0 Á­{F–ūÜ8nĩˎ‡Žäˇ0ZŽ=úÂ-§…ö¨Ŧ´ģäÔEŌĻāæŦęmũÖ§ūH œæŖņw—f$ō˛ĢÜUģæX<-å8B8ŦōhlŪ(×vū+oMŅî †FU˝Ë{VFĻß&ļeōÆ s[Zī†%yRō5Ī T0ÛŪLĢnĐÆM6ûÃW_jŽXcÜTqЧǨę7b0đ‘´ãņŽĶÊ{”q¸Ų°sščáÁŪ•UšĢá6€r§ĨeęQHa}Ģ—Įé^W5ĩĖwō™Ŗf,N0)ļvW6úšÜ´,Šž ušÅ͟íemî1\Γ—ap3ŋˇ„dŽîeØÃ9ãGaa¨ÜĩʕÉÍVĶgYŧģ’ÉŦdF 2j„zYąÖdk„Ę3u­ģ}-.n‰ˇ@Ĩ†3éQŲéīĸkæYōWÜ+7ZŋkÃ2#^ū•סˆ'´Â‹īfģ{iícr˜Žõ#1u Œ“ÖŸl ,€O9ö§H#‹ž ×ã›ĖØŧ*™sÜ ƒĀˇCh‘˛•r1“ë]F§:Cg+`–ÁæŧĮCŧōõۉ6ųûÔļײKãáNΏ*ÃéķÛøĨ¯Ũ "œ’{TšÍœēūĢnÖČÁ–=ĒŽĢfĢŠ­ĩŌ~č ļ:cYj°5”ĻE=}Ē jÂáT…æfY6ĀĶ—†l FáJ9PļjŅÄ ‘ģ^Ū(ã0Ã'ĩ]ûŨÁYN U˙˛,„˛^:ÎįÆâ{ f§ĄÃ~Lĸ1¸°ÉĒiŪˇ‚íĨû>OS]­Ļ#ˇÛŽ{քK!˜G^ęDōH‘(Šå7„÷¤ˇ,jđpjėČOē„ÍRŋŅ-n%Üb_ÄSāŌŌØ‘SfÚąũ‡i-Žķ{ĀôĒߨĐŦ9xÁ_îÔÉĸÚĨē„=@ZTKuˆã ;ԓé\\üŅ.Õį5ĄoĻÛ$€ĸātĨžĶ ‘Kē†ü+č6{•¯gĨ[*ÆĨUļ.AaVöeTîĀŨŽ Zō–5URIīVVb,Ānõ]‘d$ŖÖŗī4ģk•>djĐ>”‹ŖÅo,)‘ÜT“Ų‡k0e#§­R‹Ãö)‰|• ĐņO‹ÃļKp$XWvsš¸ÚU˛ĢŠPTœœõ§Áim?ģEį5 ֏i|Y"^:qÖ¤‹H´ļ’ÜzzŠ­¨h–—č­2`zį ŗđÕ¤7XŖŨˇũŽ•Ņ4aBŽ:ãŋJ”ÛD ëŽNj9@Bާ ŽžĩRįKKŪ%@@Ō°ßI´ŠäDc^OAZpéVļņ˛Ē¨VëÅK§čÖqŋšĄT7BYŧŌín>ú#`đMUūĪ†ÜœÅLS§Ķ-Ž–6ŲīƒUih”Œđ ZąŗŽÚ<"3ŒՓâ¨CčķįgĻĒø hĢÁÉŽŒG°ÅI÷¯›a9§ dį<ÔēSõ"ëÃz×Gǝ›Ļå‰&Ÿá{™ZęKŸ,qÂŊ ųlĶŊy_‰8×bnûÅzEŸÍe?Üū”Ë‹‡ōNž”¨ÅâĀĒŌcfvŽ}jŦ7$Ĩ6ûUéŖQRրˇŌą€ĩÅéēĨÜڀW“"ģ˸“žšĢÂ$X°ŸŲ]“3Šeëy{6āg­’b zŌ\"ƒ¸šŠ`ŖĢU‰XŠ‡RØĢã,Ŗ#5np÷ŠārbĀâŽųŦ€mdU'ũũÁķ50EXđ•˛ę  TQHD„§Ę7ĀA'¯QUƒ•έŦ)å;æ­["˛r*&ų „zTĐJâ%9äŠmÍÔŠo¸•ghšĮqŅzƒę*Xūb§ÆJĘ tÍZ™Š‘Œrk:ųC[ŽÄŋQRØą[~žÜŌ´Œ (¿ޓ¸)>Ƥißy^¨§âUŒŽh$īö"ĄžæH˜Ē‘Œw–ė\înN:v̰áōJŠiųŠuĪ6āúŠÅšwY጗5Ģķ!`ŨKj ÃÎOÖĻō‘ãÁQŽ´–ą"îÂõ5-ĮĘÔØÜ¸bŨ…2F%”Æ*Pį`€Ë˙wäôĢōąį‚v÷ŠmNåPGœUŠ] ‚=+:y V‚{ÕÕĮpC/ΏPxŠAÜŖ>ŊLJ‰˛.—3T|ōéЌšØ™ˆs‚:˙Ųleptonica-1.86.0/prog/string_reg.c000066400000000000000000000277061506303110300170460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * string_reg.c * * This tests: * * search/replace for strings and arrays * * sarray generation and flattening * * sarray serialization * * file splitting * * sarray splitting * * string length and string cancatenation */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" char strs[32] = "This is a gooood test!"; char substr1[2] = "o"; char substr2[4] = "00"; int main(int argc, char **argv) { l_int32 i, loc, count, n; size_t size1, size2; char *str0, *str1, *str2, *str3, *str4, *str5, *str6; char fname[128], smallbuf[8], medbuf[32]; l_uint8 *data1, *data2; L_DNA *da; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_mkdir("lept/string"); /* Finding all substrings */ da = stringFindEachSubstr(strs, substr1); regTestCompareValues(rp, 4, l_dnaGetCount(da), 0.0); /* 0 */ l_dnaDestroy(&da); /* Replacing a substring */ loc = 0; str1 = stringReplaceSubstr(strs, "his", "hers", &loc, NULL); regTestCompareValues(rp, 5, loc, 0.0); /* 1 */ regTestCompareStrings(rp, (l_uint8 *)"Thers is a gooood test!", 23, (l_uint8 *)str1, strlen(str1)); /* 2 */ lept_free(str1); /* Replacing all substrings */ str1 = stringReplaceEachSubstr(strs, substr1, substr2, &count); regTestCompareValues(rp, 4, count, 0.0); /* 3 */ regTestCompareStrings(rp, (l_uint8 *)"This is a g00000000d test!", 26, (l_uint8 *)str1, strlen(str1)); /* 4 */ lept_free(str1); str1 = stringReplaceEachSubstr(strs, substr1, "", &count); regTestCompareValues(rp, 4, count, 0.0); /* 5 */ regTestCompareStrings(rp, (l_uint8 *)"This is a gd test!", 18, (l_uint8 *)str1, strlen(str1)); /* 6 */ lept_free(str1); /* Finding all sequences */ str1 = (char *)l_binaryRead("kernel_reg.c", &size1); da = arrayFindEachSequence((l_uint8 *)str1, size1, (l_uint8 *)"Destroy", 7); regTestCompareValues(rp, 35, l_dnaGetCount(da), 0.0); /* 7 */ l_dnaDestroy(&da); lept_free(str1); /* Replacing all sequences */ str1 = (char *)l_binaryRead("kernel_reg.c", &size1); data1 = arrayReplaceEachSequence((l_uint8 *)str1, size1, (l_uint8 *)"Destroy", 7, (l_uint8 *)"####", 4, &size2, &count); l_binaryWrite("/tmp/lept/string/string1.txt", "w", data1, size2); regTestCheckFile(rp, "/tmp/lept/string/string1.txt"); /* 8 */ regTestCompareValues(rp, 35, count, 0.0); /* 9 */ data2 = arrayReplaceEachSequence((l_uint8 *)str1, size1, (l_uint8 *)"Destroy", 7, NULL, 0, &size2, &count); l_binaryWrite("/tmp/lept/string/string2.txt", "w", data2, size2); regTestCheckFile(rp, "/tmp/lept/string/string2.txt"); /* 10 */ regTestCompareValues(rp, 35, count, 0.0); /* 11 */ lept_free(data1); lept_free(data2); lept_free(str1); /* Generating sarray from strings, and v.v */ str0 = (char *)l_binaryRead("kernel_reg.c", &size1); str0[2500] = '\0'; sa1 = sarrayCreateWordsFromString(str0 + 2000); sa2 = sarrayCreateLinesFromString(str0 + 2000, 0); sa3 = sarrayCreateLinesFromString(str0 + 2000, 1); str1 = sarrayToString(sa1, 0); str2 = sarrayToString(sa1, 1); str3 = sarrayToString(sa2, 0); str4 = sarrayToString(sa2, 1); str5 = sarrayToString(sa3, 0); str6 = sarrayToString(sa3, 1); l_binaryWrite("/tmp/lept/string/test1.txt", "w", str1, strlen(str1)); l_binaryWrite("/tmp/lept/string/test2.txt", "w", str2, strlen(str2)); l_binaryWrite("/tmp/lept/string/test3.txt", "w", str3, strlen(str3)); l_binaryWrite("/tmp/lept/string/test4.txt", "w", str4, strlen(str4)); l_binaryWrite("/tmp/lept/string/test5.txt", "w", str5, strlen(str5)); l_binaryWrite("/tmp/lept/string/test6.txt", "w", str6, strlen(str6)); regTestCheckFile(rp, "/tmp/lept/string/test1.txt"); /* 12 */ regTestCheckFile(rp, "/tmp/lept/string/test2.txt"); /* 13 */ regTestCheckFile(rp, "/tmp/lept/string/test3.txt"); /* 14 */ regTestCheckFile(rp, "/tmp/lept/string/test4.txt"); /* 15 */ regTestCheckFile(rp, "/tmp/lept/string/test5.txt"); /* 16 */ regTestCheckFile(rp, "/tmp/lept/string/test6.txt"); /* 17 */ regTestCompareFiles(rp, 14, 16); /* 18 */ lept_free(str0); lept_free(str1); lept_free(str2); lept_free(str3); lept_free(str4); lept_free(str5); lept_free(str6); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); /* Test sarray serialization */ str1 = (char *)l_binaryRead("kernel_reg.c", &size1); sa1 = sarrayCreateLinesFromString(str1, 0); sarrayWrite("/tmp/lept/string/test7.txt", sa1); sa2 = sarrayRead("/tmp/lept/string/test7.txt"); sarrayWrite("/tmp/lept/string/test8.txt", sa2); regTestCheckFile(rp, "/tmp/lept/string/test7.txt"); /* 19 */ regTestCheckFile(rp, "/tmp/lept/string/test8.txt"); /* 20 */ regTestCompareFiles(rp, 19, 20); /* 21 */ lept_free(str1); sarrayDestroy(&sa1); sarrayDestroy(&sa2); /* Test byte replacement in a file: * - replace 200 bytes by 10 bytes * - remove the 10 bytes * - recover the 200 bytes and insert back */ fileReplaceBytes("kernel_reg.c", 100, 200, (l_uint8 *)"abcdefghij", sizeof("abcdefghij"), "/tmp/lept/string/junk1.txt"); str1 = (char *)l_binaryRead("kernel_reg.c", &size1); fileReplaceBytes("/tmp/lept/string/junk1.txt", 100, sizeof("abcdefghij"), NULL, 0, "/tmp/lept/string/junk2.txt"); str2 = stringCopySegment(str1, 100, 200); fileReplaceBytes("/tmp/lept/string/junk2.txt", 100, 0, (l_uint8 *)str2, strlen(str2), "/tmp/lept/string/junk3.txt"); str3 = (char *)l_binaryRead("/tmp/lept/string/junk3.txt", &size2); regTestCompareStrings(rp, (l_uint8 *)str1, size1, (l_uint8 *)str3, size2); /* 22 */ lept_free(str1); lept_free(str2); lept_free(str3); /* File splitting by lines */ str1 = (char *)l_binaryRead("kernel_reg.c", &size1); fileSplitLinesUniform("kernel_reg.c", 3, 1, "/tmp/lept/string/split", ".txt"); str2 = NULL; for (i = 0; i < 3; i++) { /* put the pieces back together */ snprintf(fname, sizeof(fname), "/tmp/lept/string/split_%d.txt", i); str3 = (char *)l_binaryRead(fname, &size2); stringJoinIP(&str2, str3); lept_free(str3); } regTestCompareStrings(rp, (l_uint8 *)str1, size1, (l_uint8 *)str2, strlen(str2)); /* 23 */ lept_free(str1); lept_free(str2); /* Sarray splitting by lines */ str1 = (char *)l_binaryRead("kernel_reg.c", &size1); sa1 = sarrayCreateLinesFromString(str1, 0); sa2 = sarrayConcatUniformly(sa1, 6, 0); /* into 6 strings */ sa3 = sarrayCreate(0); for (i = 0; i < 6; i++) { str2 = sarrayGetString(sa2, i, L_NOCOPY); sa4 = sarrayCreateLinesFromString(str2, 0); sarrayJoin(sa3, sa4); sarrayDestroy(&sa4); } sa5 = sarrayConcatUniformly(sa3, 6, 0); /* same as sa2 ? */ sarrayWriteMem((l_uint8 **)&str3, &size1, sa2); sarrayWriteMem((l_uint8 **)&str4, &size2, sa5); regTestWriteDataAndCheck(rp, str3, size1, ".sa"); /* 24 */ regTestWriteDataAndCheck(rp, str4, size2, ".sa"); /* 25 */ regTestCompareFiles(rp, 24, 25); /* 26 */ sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); sarrayDestroy(&sa5); lept_free(str1); lept_free(str3); lept_free(str4); /* String length */ lept_stderr("******************************************************\n"); lept_stderr("* This error message is intentional *\n"); n = stringLength("", 0); lept_stderr("******************************************************\n"); regTestCompareValues(rp, 0.0, (l_float32)n, 0.0); /* 27 */ n = stringLength("", 4); regTestCompareValues(rp, 0, (l_float32)n, 0.0); /* 28 */ lept_stderr("******************************************************\n"); lept_stderr("* This error message is intentional *\n"); n = stringLength("morethan4", 4); lept_stderr("******************************************************\n"); regTestCompareValues(rp, 4, (l_float32)n, 0.0); /* 29 */ /* String concatenation */ smallbuf[0] = '\0'; n = stringCat(smallbuf, 8, "abc"); regTestCompareValues(rp, 3.0, (l_float32)n, 0.0); /* 30 */ n = stringCat(smallbuf, 8, "def"); regTestCompareValues(rp, 3.0, (l_float32)n, 0.0); /* 31 */ n = stringLength(smallbuf, 8); regTestCompareValues(rp, 6.0, (l_float32)n, 0.0); /* 32 */ lept_stderr("******************************************************\n"); lept_stderr("* This error message is intentional *\n"); n = stringCat(smallbuf, 8, "gh"); lept_stderr("******************************************************\n"); regTestCompareValues(rp, -1.0, (l_float32)n, 0.0); /* 33 */ stringCopy(medbuf, smallbuf, 32); n = stringCat(medbuf, 32, smallbuf); regTestCompareValues(rp, 6.0, (l_float32)n, 0.0); /* 34 */ n = stringLength(medbuf, 32); regTestCompareValues(rp, 12.0, (l_float32)n, 0.0); /* 35 */ n = stringCat(medbuf, 32, medbuf); regTestCompareValues(rp, 12.0, (l_float32)n, 0.0); /* 36 */ medbuf[23] = '\0'; /* shorten by 1 byte */ n = stringLength(medbuf, 32); regTestCompareValues(rp, 23.0, (l_float32)n, 0.0); /* 37 */ str1 = stringConcatNew(medbuf, "jkl", NULL); n = stringLength(str1, 32); lept_free(str1); regTestCompareValues(rp, 26.0, (l_float32)n, 0.0); /* 38 */ stringCopy(smallbuf, medbuf, 6); n = stringLength(smallbuf, 8); regTestCompareValues(rp, 6.0, (l_float32)n, 0.0); /* 39 */ stringCopy(smallbuf, medbuf, 8); lept_stderr("******************************************************\n"); lept_stderr("* This error message is intentional *\n"); n = stringLength(smallbuf, 8); lept_stderr("******************************************************\n"); regTestCompareValues(rp, 8.0, (l_float32)n, 0.0); /* 40 */ return regTestCleanup(rp); } leptonica-1.86.0/prog/stringtemplate1.txt000066400000000000000000000070321506303110300204110ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* --- * autogen.*.c * * Automatically generated code for deserializing data from * compiled strings. * * Index Type Deserializer Filename * ----- ---- ------------ -------- --- * 0 PIXA pixaRead chars-6.pa --- * 1 PIXA pixaRead chars-10.pa */ #include #include "allheaders.h" --- #include "autogen.*.h" /*---------------------------------------------------------------------*/ /* Auto-generated deserializers */ /*---------------------------------------------------------------------*/ /*! --- * \brief l_autodecode_*() * * \param[in] index into array of functions * \return data struct e.g., pixa, in memory */ void * --- l_autodecode_*(l_int32 index) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; void *result = NULL; --- l_int32 nfunc = 2; --- --- PROCNAME("l_autodecode_*"); if (index < 0 || index >= nfunc) { L_ERROR("invalid index = %d; must be less than %d\n", procName, index, nfunc); return NULL; } lept_mkdir("lept/auto"); /* Unencode the selected string, uncompress it, and read it */ switch (index) { --- case 0: --- data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); --- data2 = zlibUncompress(data1, size1, &size2); --- l_binaryWrite("/tmp/lept/auto/data.bin", "w", data2, size2); --- result = (void *)pixaRead("/tmp/lept/auto/data.bin"); --- lept_free(data1); --- lept_free(data2); --- break; --- case 1: --- data1 = decodeBase64(l_strdata_1, strlen(l_strdata_1), &size1); --- data2 = zlibUncompress(data1, size1, &size2); --- l_binaryWrite("/tmp/lept/auto/data.bin", "w", data2, size2); --- result = (void *)pixaRead("/tmp/lept/auto/data.bin"); --- lept_free(data1); --- lept_free(data2); --- break; default: L_ERROR("invalid index", procName); } return result; } leptonica-1.86.0/prog/stringtemplate2.txt000066400000000000000000000046451506303110300204210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* --- * autogen.*.h * * Automatically generated function prototype and associated * encoded serialized strings. */ --- #ifndef LEPTONICA_AUTOGEN_*_H --- #define LEPTONICA_AUTOGEN_*_H /*---------------------------------------------------------------------*/ /* Function prototype */ /*---------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ --- void *l_autodecode_*(l_int32 index); #ifdef __cplusplus } #endif /* __cplusplus */ /*---------------------------------------------------------------------*/ /* Serialized strings */ /*---------------------------------------------------------------------*/ --- static const char *l_strdata_0 = --- "..."; --- static const char *l_strdata_1 = --- "..."; --- [etc] --- ---#endif /* LEPTONICA_AUTOGEN_*_H */ leptonica-1.86.0/prog/subpixel_reg.c000066400000000000000000000202211506303110300173540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * subpixel_reg.c * * Regression test for subpixel scaling. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val); const char *textstr[] = {"Downscaled with sharpening", "Subpixel scaling; horiz R-G-B", "Subpixel scaling; horiz B-G-R", "Subpixel scaling; vert R-G-B", "Subpixel scaling; vert B-G-R"}; int main(int argc, char **argv) { l_float32 scalefact; L_BMF *bmf, *bmftop; L_KERNEL *kel, *kelx, *kely; PIX *pixs, *pixg, *pixt, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; L_REGPARAMS *rp; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "subpixel_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; /* ----------------- Test on 8 bpp grayscale ---------------------*/ pixa = pixaCreate(5); bmf = bmfCreate("./fonts", 6); bmftop = bmfCreate("./fonts", 10); pixs = pixRead("lucasta.047.jpg"); pixg = pixScale(pixs, 0.4, 0.4); /* 8 bpp grayscale */ pix1 = pixConvertTo32(pixg); /* 32 bpp rgb */ AddTextAndSave(pixa, pix1, bmf, textstr[0], L_ADD_BELOW, 0xff000000); pix2 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_RGB); AddTextAndSave(pixa, pix2, bmf, textstr[1], L_ADD_BELOW, 0x00ff0000); pix3 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_BGR); AddTextAndSave(pixa, pix3, bmf, textstr[2], L_ADD_BELOW, 0x0000ff00); pix4 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VRGB); AddTextAndSave(pixa, pix4, bmf, textstr[3], L_ADD_BELOW, 0x00ff0000); pix5 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VBGR); AddTextAndSave(pixa, pix5, bmf, textstr[4], L_ADD_BELOW, 0x0000ff00); pixt = pixaDisplayTiledInColumns(pixa, 5, 1.0, 30, 2); pixd = pixAddSingleTextblock(pixt, bmftop, "Regression test for subpixel scaling: gray", 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 50, 50, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixd); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); /* ----------------- Test on 32 bpp rgb ---------------------*/ pixa = pixaCreate(5); pixs = pixRead("fish24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); AddTextAndSave(pixa, pix1, bmf, textstr[0], L_ADD_BELOW, 0xff000000); pix2 = pixConvertToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_RGB); AddTextAndSave(pixa, pix2, bmf, textstr[1], L_ADD_BELOW, 0x00ff0000); pix3 = pixConvertToSubpixelRGB(pixs, 0.4, 0.35, L_SUBPIXEL_ORDER_BGR); AddTextAndSave(pixa, pix3, bmf, textstr[2], L_ADD_BELOW, 0x0000ff00); pix4 = pixConvertToSubpixelRGB(pixs, 0.4, 0.45, L_SUBPIXEL_ORDER_VRGB); AddTextAndSave(pixa, pix4, bmf, textstr[3], L_ADD_BELOW, 0x00ff0000); pix5 = pixConvertToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VBGR); AddTextAndSave(pixa, pix5, bmf, textstr[4], L_ADD_BELOW, 0x0000ff00); pixt = pixaDisplayTiledInColumns(pixa, 5, 1.0, 30, 2); pixd = pixAddSingleTextblock(pixt, bmftop, "Regression test for subpixel scaling: color", 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixd, 50, 350, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixd); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); bmfDestroy(&bmf); bmfDestroy(&bmftop); /* --------------- Test on images that are initially 1 bpp ------------*/ /* For these, it is better to apply a lowpass filter before scaling */ /* Normal scaling of 8 bpp grayscale */ scalefact = 800. / 2320.; pixs = pixRead("patent.png"); /* sharp, 300 ppi, 1 bpp image */ pix1 = pixConvertTo8(pixs, FALSE); /* use 8 bpp input */ pix2 = pixScale(pix1, scalefact, scalefact); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ /* Subpixel scaling; bad because there is very little aliasing. */ pix3 = pixConvertToSubpixelRGB(pix1, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ /* Get same (bad) result doing subpixel rendering on RGB input */ pix4 = pixConvertTo32(pixs); pix5 = pixConvertToSubpixelRGB(pix4, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestComparePix(rp, pix3, pix5); /* 4 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ /* Now apply a small lowpass filter before scaling. */ makeGaussianKernelSep(2, 2, 1.0, 1.0, &kelx, &kely); startTimer(); pix6 = pixConvolveSep(pix1, kelx, kely, 8, 1); /* normalized */ lept_stderr("Time sep: %7.3f\n", stopTimer()); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 6 */ /* Get same lowpass result with non-separated convolution */ kel = makeGaussianKernel(2, 2, 1.0, 1.0); startTimer(); pix7 = pixConvolve(pix1, kel, 8, 1); /* normalized */ lept_stderr("Time non-sep: %7.3f\n", stopTimer()); regTestComparePix(rp, pix6, pix7); /* 7 */ /* Now do the subpixel scaling on this slightly blurred image */ pix8 = pixConvertToSubpixelRGB(pix6, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 8 */ kernelDestroy(&kelx); kernelDestroy(&kely); kernelDestroy(&kel); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); return regTestCleanup(rp); } void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val) { l_int32 n, ovf; PIX *pixt; pixt = pixAddSingleTextblock(pixs, bmf, textstr, val, location, &ovf); n = pixaGetCount(pixa); pixaAddPix(pixa, pixt, L_INSERT); if (ovf) lept_stderr("Overflow writing text in image %d\n", n + 1); return; } leptonica-1.86.0/prog/sudoku1.dat000066400000000000000000000003431506303110300166100ustar00rootroot00000000000000# sudoku1.dat # 5 star puzzle # Requires: 1.0M guesses, 0.1 sec 3 8 0 2 0 0 0 9 0 2 0 0 0 9 1 0 0 7 0 4 0 0 3 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 6 0 0 0 2 5 0 0 0 0 0 0 0 0 1 0 0 0 0 0 8 0 0 6 0 4 0 0 6 7 0 0 0 8 0 5 0 0 0 3 0 7 1 leptonica-1.86.0/prog/sudoku2.dat000066400000000000000000000002731506303110300166130ustar00rootroot00000000000000# sudoku2.dat # 3 stars 0 1 0 0 6 0 0 2 4 7 0 0 0 0 3 0 0 0 5 6 0 0 9 0 3 0 0 0 5 4 1 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 8 7 0 0 9 2 4 0 0 0 5 0 3 0 0 9 8 0 0 0 8 0 0 0 0 3 8 3 0 0 7 0 0 6 0 leptonica-1.86.0/prog/sudoku3.dat000066400000000000000000000005641506303110300166170ustar00rootroot00000000000000# sudoku3.dat # "Near worst case" sudoku for brute force, # Req: 623M guesses, 70 sec # (Rotating by 180, it only requires: 4.7M guesses, 0.6 sec) # from http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 8 5 0 0 1 0 2 0 0 0 0 0 0 0 5 0 7 0 0 0 0 0 4 0 0 0 1 0 0 0 9 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7 3 0 0 2 0 1 0 0 0 0 0 0 0 0 4 0 0 0 9 leptonica-1.86.0/prog/sudoku4.dat000066400000000000000000000005051506303110300166130ustar00rootroot00000000000000# sudoku4.dat # Easter Monster (rating 99408 -- whatever that is) # Req: 2.4M guesses, about 0.7 sec # from http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 1 0 0 0 0 0 0 0 2 0 9 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 5 0 9 0 3 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 8 5 0 0 4 0 7 0 0 0 0 0 6 0 0 0 3 0 0 0 9 0 8 0 0 0 2 0 0 0 0 0 1 leptonica-1.86.0/prog/sudoku5.dat000066400000000000000000000006261506303110300166200ustar00rootroot00000000000000# sudoku5.dat # tarek071223170000052Easter Monster (rating 99408 -- whatever that is) # rating: 4m19s@2 GHz (by tarek) # Actual solution requires: Req: 18.1M guesses, about 2.1 sec # from http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 0 0 1 0 0 4 0 0 0 0 0 0 0 6 0 3 0 5 0 0 0 9 0 0 0 0 0 8 0 0 0 0 0 7 0 3 0 0 0 0 0 0 0 2 8 5 0 0 0 7 0 6 0 0 3 0 0 0 8 0 0 0 6 0 0 9 2 0 0 0 0 0 0 4 0 0 0 1 0 0 0 leptonica-1.86.0/prog/sudoku6.dat000066400000000000000000000003261506303110300166160ustar00rootroot00000000000000# sudoku6.dat # 6 star sudoku (Jackson Hole daily) 7 8 0 0 0 6 3 0 0 0 0 0 9 8 0 5 0 4 0 0 0 0 3 0 0 8 0 3 0 8 4 0 0 0 0 0 0 0 0 5 7 1 0 0 0 0 0 0 0 0 8 9 0 1 0 6 0 0 2 0 0 0 0 9 0 7 0 1 3 0 0 0 0 0 3 6 0 0 0 2 7 leptonica-1.86.0/prog/sudoku7.dat000066400000000000000000000003261506303110300166170ustar00rootroot00000000000000# sudoku7.dat # 4 star sudoku (Jackson Hole daily) 7 8 6 0 0 0 5 0 3 0 0 0 0 0 8 0 6 2 0 0 0 0 5 0 0 4 0 3 4 0 0 8 0 0 0 0 0 0 5 0 0 0 4 0 0 0 0 0 0 6 0 0 3 5 0 3 0 0 1 0 0 0 0 6 9 0 8 0 0 0 0 0 8 0 4 0 0 0 1 7 9 leptonica-1.86.0/prog/sudokutest.c000066400000000000000000000063331506303110300171060ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * sudokutest.c * * Tests sudoku solver and generator. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *startsol = "3 8 7 2 6 4 1 9 5 " "2 6 5 8 9 1 4 3 7 " "1 4 9 5 3 7 6 8 2 " "5 2 3 7 1 6 8 4 9 " "7 1 6 9 4 8 2 5 3 " "8 9 4 3 5 2 7 1 6 " "9 7 2 1 8 5 3 6 4 " "4 3 1 6 7 9 5 2 8 " "6 5 8 4 2 3 9 7 1"; int main(int argc, char **argv) { l_int32 unique; l_int32 *array; L_SUDOKU *sud; if (argc != 1 && argc != 2) return ERROR_INT(" Syntax: sudokutest [filein]", __func__, 1); setLeptDebugOK(1); if (argc == 1) { /* Generate a new sudoku by element elimination */ array = sudokuReadString(startsol); sud = sudokuGenerate(array, 3693, 28, 7); sudokuDestroy(&sud); lept_free(array); return 0; } /* Solve the input sudoku */ if ((array = sudokuReadFile(argv[1])) == NULL) return ERROR_INT("invalid input", __func__, 1); if ((sud = sudokuCreate(array)) == NULL) return ERROR_INT("sud not made", __func__, 1); sudokuOutput(sud, L_SUDOKU_INIT); startTimer(); sudokuSolve(sud); lept_stderr("Time: %7.3f sec\n", stopTimer()); sudokuOutput(sud, L_SUDOKU_STATE); sudokuDestroy(&sud); /* Test for uniqueness */ sudokuTestUniqueness(array, &unique); if (unique) lept_stderr("Sudoku is unique\n"); else lept_stderr("Sudoku is NOT unique\n"); lept_free(array); return 0; } leptonica-1.86.0/prog/table.15.tif000066400000000000000000000601661506303110300165530ustar00rootroot00000000000000II*¸_˙˙˙˙˙˙ü´ÔȎ#4AĸÄ4‚šAlĐũ-.ö¨%AŌŌ˙Ō×Jô@ņũŦ<ˇzÜãåĶÁĪm-ßųc˙Đ˙wø˙ûãáßĢõŨގ­ŽĮĖņv)Zˆˆˆ˙–Ŗ¨DUČ_žÔz_U–™!fe_ôņLoã“uŸĮūZŠe$ HÂ~ō ÖéØ^ēųĄķĮ"ÜųÕtũ1úwĻŊķGF¸Ką˙×o¯ôĸã¯2ršũÎ$蛪ņÅvmB]ŋbŖŽõ´ĐÄDE¨˙-ųG˙ųiu-ĘbQ–DĄ^f3|æ]ėāËÆ#ĄžЍŖhÛ>3fŠqOŖbžĘœ~)âŊ:Ã]{Bõß]4ĶAö™ŧį‘äĶSqOÎa4Î4ĖđsyĐĪĮ9”ųäKŗėÍ3ÄqڝœÎë5ŦÃ˙Ķæwi'5a_s:žÖöūš„Õ[ģõTĖh4ĶMSĩL&"ĄŲ|Mš÷ū˙ã™õÅLú‡×ÂÃWëËw3đˆ•āžÖīUM´ģĨNö?~×wŋô˙ņ´ģûē3Ņoū˜æuņ˯3晞ÚZĢ7šŨØĄņ^đw_vˇk÷]Ö?cõMŽŋ\Ī˙ŨŠæ}R,zöū5Úū?ž>>ļŋ˙üWøb×N)Õßúú¯¤Š˙ßíˇëí˙‰‡žÜ6˙¸=ã‚*÷‚áAëē†˙ußūūģÛļĶ×­ŋëú֜/˙÷öū‚*ūēü--¸A´w˙Ķ[Y‡"?˜˙üú˜õŸŸõ˙ũ„ß‚ûUīô‹4}÷ã‘`bûņīĐ´Â kzĻ÷˙Žļ‡kkâ"""""""""Ķ „,-§xˆˆˆˆ˙˙“`‘šĻœäpOͅ 'åˆ?AŧĒåųEĘãfƒ Ĩ˜´ôáĻnTNĶ PŗŽkF3ŒŪs6ŒŅ´~7‘†}Ÿ#ŅökĢ>ČÄD#Âæ}w­Úޚ}§§}ϟpĐi„Ķ/˜‚i„āîĶ/œû×Sų¯3ҟķÅ÷3šĻaø0Kë¯ßI§}éúuk‡ŋũõ˙}í/^˙Į0ī˙^aķ;›Ë3˜w5Y†pkíÍ=/úŋž‡‡ØõzOkąßŊ~üÃŽŸ™Ũ^ÖļīƒâˇÖ+.í¸6z˙˙˙kļ0ū×ŪõĢī×K˙õû{wņ˙Įm§ÅAúß÷‚x.ô]÷¨nŸŋũtøU†Ûúŋ˙ŽM‹íũAī…˙á÷„ūŋ˙0õ…Âl1ũ/Uũ4ŋõÚĩųŨũ˜üĪm?¯ícë§1ŋÁ?¯Øäyaí܊F;Oããí˜wĖ>:‚#Ųûŋ‚#Ū¯ßęôæŽíH°göčąõ#ąS?ŋbĻŋēdīUūëũm4Ķ´ô˙]>ũ;ßOĖũŪ•ūhī"Æ%Ž*ŽF@×ížņΙÍh4"4Ϛێūžšk{kįŠ_6""a4"í4ôīŧDDDDDD˙˙˙˙˙˙˙ōĖĸ8‰p[Y•`r,†H7r Ę9‡"A!Čl™āįō>)9C”4V‚—2ĻO~m§0šV˛ę0åšpXB^Č2Ŧ§g}‡\Yļ:`œZņ}ˆ>Õû˙˙ú˙˙ž˙ū˙˙˙˙˙˙ú˙˙ī˙¯˙˙ūë˙˙˙˙˙˙˙ų+=˙ŋ˙˙§ūJų)_˙ųãū˙Áŋ’‹ūD ˇäčųĶ˙Īô˙ééŲ{Ѓ5ŋB›Œ/(ČEæŗĢ˙G‡˙ĖøŽž[ĩõm{đ@Đ~ˆDshâ|øČ‹ÎĸüqiĒö¸^ĘpD~=+Ļgkũ¤š¯a}?.Ė~`R˙r,Ŋ˙ÂęēāžqÁö?~höēũ¯ø­#ëjq/ãĢ‘q_„t—ø_;™ĶõķG˙øņ@ƒ_ãūķŨ˙Ĩ’ąW˙GK"Ųø/÷†¸"<Ą¯ūŋq„÷ޏŖBûĶ˙ųĩ ĸ˙ü5ęĩõᅾŸũwÆ`“˙û_ú˙5÷˙ûæv{-ûĢ_Īķ˙āŋ΍"=õŋ˙ˇīīO˙ĩčą÷_M>ũ{Ķ=~n˙ždO¯šŨ˙úG_÷˙O˙õũƒīĶŋ˙[ĶOÔäŋ¯ô*züÍL?ūÛ˙Ž×´hęžžņˇŨ’Ī÷×ŪČņūŠ÷ûüˇYëô#øˆjŊĄ i¯ũņũß˙U×ãNū×˙CzˆˆøĐâ"#ė/ŧ߯ū?ū˙ãB/¸ˆ0…§û˙˙˙­â?Å˙˙ü˙ũuã˙Jŋ˙˙˙˙ũ˙˙˙˙û˙˙˙ī˙˙˙ũ%˙˙˙ßõ˙ëũ~û×_ü†\Čܟ“Ņ”3ųI“‚Ļmœ^ jȤxŽŽF:.ˆāÜØf—Ķ hâ$F9 â#ÄDDDEDDDDDDDGųpD‚,Č C8įŒÃ–w-ɎE‚†´Î9pTdĮ(rœ<š˛axdåPŽŗ Õ‘ŋB""Ą#tëéaˆˆˆ’Ëũzũ˙ß˙˙ô˙˙ŋ˙˙˙˙˙˙˙Žžŋw˙˙ŋ˙%ą‹_˙Ūs Ye>OîAÆ3°M?˙oØA­ĒöjÎėŦĐÎdũdiƌˆdÃ*ō"ō¯#HƒÉtn(_ņĄŋčÎúīĶ]Ęyīü暄0™É˙ŪuŌ}ūēwA ˙ßû{ÚöûüfôĪ"]×˙¯cû÷oŋ¯ķĒښ?ūqéÚ#˛ø_#sŲ6zq‘ãSŒĶ3HŽĄœĖzŸÂß­°ĪnŋĒž“xŋ÷ÖÚņęŊw…ƒ4 Á!°í}0ĻËüŲŨĻ_]Ī™Ãƒ>Ūm āÎf׃)ī˙ÔΞgķé÷3ŨQ‡ęŒ=\7žîŒ=?ŽáB#îŧĶNĶū4ûM?ŧĖĐ3lųßņņéŽŋ÷bŠŲüÎúįv˙ŌõŌâĒĩžÃôg˙Ŧ-ëīOÔ'ũũ˙ūųn—˙úx¯ ˙˙˙˙ģĄę)<Īß×Ūwą_0ũí:,˙NČé}ĩŋč_íĢ˙æũ=˙ūZĩÁųŠúNßī˙Ũuīúũ¸]:˙ĶŽÂ˛=&›$Yõũmk_¨˙uĢ˙ËŽßGēģ×˙üeŌīnú˙ū"ãģ Šßģ˙ĶąPäoã´ĶN6Hœ~ÁąūŸö]ZęÚ˙Ņ…ŌÚ¯oŗ$ņĄ0EĶA…°žˆĖ0Duƒ[ĩû[°š¯ôØØ­â“ũMŽĶcÖ<ŋūÔDFxˆˆˆˆˆˆˆˆˆˆhD0ŸŲĮ8öƒ ž;Õĩvėú×ŌDDDD0žõLWר˙Ä|~ŋ˙ãũ˙ūĢ_ũ÷˙˙˙ũ˙˙é˙˙¯˙÷˙¯úŽßåGīŗ ŦÄl9yd”aü–\rWB<ƒk”A‹  ųˆˆŽ"""?܂Ԑd0‚‡>.䠃gĄ5ĸĮ(ãfG! Š˙ī˙ŌëFwÛĢŅú¤Kōyz øZÛŨA߯ô˜ôŋ×Å/úŋĶ˙ûú[˙č?wßGUI°ú_õļ—üÎī¯ęßߗŗ˙ũ.ŋž_ũa´ũũ-­-}Cē˙_ëūՊõĸ­ŠđŊŽSr îÔŗÚ˙4Pˇ}#?õŋŌhÚŌ˙Ū´ŋ‹MS×[ĒqZύSZĮæîo4^š"Ø ‚Đ7¯@Ō‡›ō?˙ĒzKņ… *kkޟôĶļ¯ēÔĶ_é/Šũ(ĶCĶccôEĪėDDqÜDD,A ÁCėlU,xaŽš ~•=i°Š?Oīøâ8ŽÂ}ĻąGÄDGhC.Ķū¯_ņ˙QG÷ī˙˙˙ūõ˙ũ˙ī¯ī˙˙u˙_~DF~VĪëũ˙˙¨AžyПgÍųŸgâ2ČĖĶ3_ä3˙˙žžžŋá4ĶAįØM0ƒüžQg˜MųŦĪŗĖÔyøũ¯yŨÎūwo;šŨ~š0ô×āˆōwžHÎf¯ĩM5ūĶM?Lã>˙ã[zŋ¸ŋķŋlũ;÷čņ˙ĩO~wĖ˙ųĮÎû˜nŸ×¯˙éŊ=oē­÷úŖ;}+¯üu°koiį˙˙÷ŧWü{PŖę•?ūž[x˙˙úũ[û˙üV’_iGĨ˙˙ûÕz¯Ķ^á*uîĢ˙áŋ߯õv×ī˙üuũ zūŋ˙ŋ˙đ}/úw¯¯_ĸ‡Ĩ˙G‡đ߆Ō˙˙ųīuëHÍu¨H4éoũhZK_uĶūŨî—ß˙ĶUŋUDp×ßSzœ×SŸuú}­{öŋôSŽ—_˙˙ąQJOˇũJ4Đ=='Û]÷KõzĩûM&čߛ_¯Å Ķ žŠ˙Ō¯íŠŠbŋžw§Lq˙z_σnŋâ8ˆˆ˙PĻƒ Ą &ôžŋ´×ė&ŖũV5˙ˆˆŽ"?ģžž"#øˆ¸á„Ĩūŋ˙ˆˆô8ˆ˙˙˙˙˙˙˙˙˙˙˙ûÕ˙˙˙õŋ˙˙˙˙äc)ė֍šü“<Dëü–ß˙4ĶšdGų¨“6F§Ÿ°ƒ6GŦ—É˙Ę#38iūkÆžy˙u@‹ũ˙~Ŋ„ûOOōB4Ž3_߸NÂfĸ팟8˙ŋ]#EîŋĪŨS?~ —uôŌ §ŧ;ëęŪīÛT˙ë˙ūŋøŊš?Oēū”ÃĐ"˙ÖæäEƒŖ?wU˙ũßĮõīĒĩ˙Ã˙õKuŋ@ūŊW˙ë™˙õ˙W×ņZQ_ŌŋÖĩN—ũąUûK 5ūĩ˙ö5Đ"?ũũà ˙ĢŸîŋīÅ/õ˙č?ŪaüCũ% Ĩú†ĮTwwŨ×ųFĩøwoŋ_×˙NÛ˙ŌŨ/˙âëYž—ū’ũ>é}ß˙L˙õ=ŋ꧒Ĩū}ۃ­oķëKüÖĩm/Đ˙éĶ—ĒaīĐ>Ō=Aúé׃ûúZúj¤ũ|įœŌūū´˜¨}Wüjēiėzuáī@ÍĪZÅG˙qI tĒ iZ„Ô'úpÂk˙kÚöŖøûk˙kkí4ö?øˆâ"#ˆˆâ?ĩíb"?†‹Oļí0ŋ÷˙â"ãũˆŽ"#˙˙üw˙ūž˙é˙˙ũ?˙˙˙˙˙˙˙˙ūŋūDGÍLŅTëëūú˙Ūpđ™öhLķŋ5ĮŲø§˛3gké?¤Žŋü~×ëßũŌtĩčūsW×öë8Š˙HuKë˙‹õëē_û{i~ŋôãĩöÔ5zvŋĒųÍK¯Hõ¯öúîÕ¯å?„ˆčߜŌßĪ˙õĻ+N+ŽØ¯āԊMMŽ˙uĩ9'§ą_ÅEÅ*ĒwđáϜZ§ĒŋÂMSéí'øh$Å/īŋîŊú >ŋˆŽ""?° …ô 0‡ũûķĖ Đŋ°š *{Újŋ˙ˆˆâ"?ˆ‹Cˆâ"#ˆˆ˙˙˙˙ū˙˙˙˙˙˙ũë˙˙˙ũ˙×˙˙˙˙˙˙õüˆ#Ö}#5UæŧųäG÷’æfŒß§í$ôĪŗĪOđšg ęy槙æ}ũÆ~#,ĸLkôkf™æk<ä}žgûĨŋˇ÷Ļžá-SũS „¯ĻMjĶN˙éNīpüŋ˙Å_úöÚOĢ˙õī˙ē˙ÛīõUĶû{îŌę5oęŌx÷ëõŅo˙đo˙~Ō˙ņúĩëõ˙×_¯ūÕëū˙ût¯ž˙’$ĩúIūƒnŽŌ÷˙ũūŊõūޝ˙¯Ō Ĩę—÷†õõ÷˙Ú˙ę{Ėzūuü˙¤˙­˙ū—ëūu^agK¤ŧ5ŋN)ŠĶî)6+ũ}MŲÖ?Kķ?A›YŊHęûA›—ô3~žœšë˙j´ĶNŋøŽ*ĐĶM¤Ø˙ŠT4ĐēN­éĢØ­tՊKø†katÕí;T׆ļŋöûĩ í¨Ļˇũ¤ŋˆâ""ū""8ˆøŸAσ8qÅĄÄDu˙˙â"?ã˙˙ë˙˙˙˙õī˙˙˙˙˙˙˙˙ũ˙õ˙‘žfž˙ü„Dc˙ūĄyÆ}‘Ôu˙æf}žDcÉAŸ”ũųŦÍLÖyÆpÎČÎ×ŋGŊ39;ë˙´Â =4īOŪĖûOĶĶA˙yŨ¤ûŖ]ŨũTī0÷A'ëč÷˜} D{˙˙{ĶŌīũūAOß˙×ø:3ŋ§‚Û÷÷˙§û˙z˙ņÔ7˙^Ģëē˙ũŽŋ!¨ėŽ‹†CØpöŨ~ļņX?˙Ō¯é#Xū">īę˙l0ŋUŋëđ×ū=zĨÛüÎA˛Č5A¨ä2‡6Ërƒƒ×áĮđøtŊM/_ũE¨Ą?îúGžg{ūÚzOĨ˙˙˙ÂMļa4ŋækũ?ל_æĩåͤē]ûôßb´á†ƒI¯ūšœKjs˙ŋM}ĶÃڜāũ7ũN+ôéí/ū48Ķcî)8˙ŠxĶ]>)û ĄũúK˙Ēiũ7ÚũĒkßé…üG˙Ã4ÖÖ!‚õ… ab"?˙üDDl~ÄG˙˙õ˙˙˙˙˙˙˙ũ˙ū˙˙˙˙÷˙˙ō¨ŋČ˙‘Œögg‘›aëŖ>w™˙Æž›ņëĒ_õĄõûõõ˙÷ąũŨ˙¯˙˙…\íKĀĻâthČf°yã6G)īî=*ûõ i5ûņ˙×˙¯˙ãËꁄ \áíéŨ¨Aûzöí¤ŋû¨ū5Kũ/ūÛKK˙ũg\Ãôaūī0ûđoZÖ:˙pm´ĩ[¯ē_ŋĨüŅb‘ĸÁLí}ũôhpONŋĖøkî—øo—Ĩ;×úOë˙Ĩ˙˙Iq;ū˙˙O˙K˙_˙Ōô—˙ v¯^q~{R:÷ũū_÷qū˙ŋ0N˙7˙JG_枎 ŋfä u˙ëqLzÅvœ_÷ĶĒwWéļī´ĩ‹skãc_°’úE/§ß˙ Ô-? ú˙ŧ{ÁüF›ŧ]~Ša?ÚĻŋž?øˆė‰Bhރė+ †]vš Ę ^A„8ĐĶOîBÂh5Õ˙ÄGņî"""#â#b#øˆŽ"?÷ôĸžŋ˙˙íûß˙Äõ˙˙˙ú˙˙Ū˙˙˙˙ũČĪ˙W÷5˛|öFy՞gęú á<ã4Ī3Æu˙~š Â L4Ķ ˙MWÕ5O˙˙°’v˙ųã3šáīÎîwÎī˙KöSԘ|īŨ”ôgÁī˙˙ēĢ¯˙˙Šã¯¸¯üT×ôŠūIČeŲ‡ ]ĘpȐ(>ˆá˜g›  ēV“ū­a/ũĢëÄDGڊ_Š_ô—˙˙“˛‚ŗ”9 ĄČ˙  Dyŋßŋô—ún˙‚Ėą1+)NŊ;Ĩí¤øI/ûw˙ߝ}?íĨú_õ_ũĨu_;˙˙5{ŠLKŠ˙H˙˙@Đ;KÁčᛝ˙˙ãŽ)P5Ŋ$E˙ö=: Gą_˙ûUžéÅđĶ0ŋ„ÂØ_˙ûA ÁS[‹8á0ŋˆŽ"""˙˙â"#ˆˆ˙˙˙˙˙˙˙÷˙˙ũ×˙ūŋ˙˙˙˙˙˙ī˙×˙É3ō4˙ĘxđÎdgšŖæ`ŋ”ækyGãQ~ui›fŗĪfqö}äDŊâ*–Ą<  ÍÉ­ßÔÎO=ÁūšĻēiϟ§ūŊöžŋįwÎīŌTž—ķ¨"=GˇšŪŒ?x]cė§ÎęwhĪųĮĪįũ×}ŌŨY¯ũ&ĖņŌüŸĻũ/OąÅÆŋq{˙Žŋęû˙ŋTūę“˙ōō:4^%Ō‡˙Đuę—ãJkÕE/oŧØ ˆļIÄ4Īžūĸ’ëiJP˙ûũÖĩôŋ ßŨŨˇŪ“Ķīļ˙¤?ųŸėi~’ˇ^—‡õ‚#ú3į{ļ­ĨĶļ—õ‡˙Wí}ë¸KŪŌī˙į§˙īôŊ˙ú[¯˙‡˙­ëīKÎÎī˙˙×ÎŋžķšęS˙A‡˙Ŋ´¨÷ūƒĪjrLŽĩ9Ņŋƒû_IįĮÚ˙ü|i }ĄĮ˙6*0ŠũkÆązqÅ.œņlięß×_ĻĶ_öēúi*ûũŽŊĻŋkĄwe<0…íü0§}ĻˆŽ!„"#øˆ´8ˆŽ#؈ˆˆŽâ"#ˆü˙˙ũÖŋ˙˙ī×˙˙ūĶĩ˙˙ūõ˙˙˙÷˙˙ũJtg¯ųųԈĄ˙$ȤōË˙aj<ÄOŸŒŨ}4ĖmŠČûL'ųÔ”Ų„q„ÃŋĶ´ûĶMŋ§^ũ§WũéŖŨ;_ũ”ųß8ûŨQŨŖKķÃJŋš<ķģeGũ”ųß0úoæ|§ŗ˙ĮņæzūÛ˙¤–ūŠ\küqĄīßĮŋõßõzĶø­×˙Z˙Ĩ¨×ĮĨ˙Žĸŋ˙˙Đõũę’Kú_˙ũz˙˙J÷õŋĮđŪŨŠ’F~)Ņ8˜ouôũéO˙ũđé|Ītž"#ųâé}û˙ëo˙ŋũŌ×ęß˙:­<Ú´ŋuëúÜãŌ˙tŽį]sŪy%ū_ŋåņėCęJĘ((\ĩ.ƒ¨ĶŖmđĩūęßǧņŨĒhąéB"§ØŪ?ĶØĻ+ūÅ1Zn­íqūGūīí0ƒ_ĢM5ü4Ķ[CBĐūĶA…“¯Đû˙ˆˆŽ"#üDqüDDq˙öŋ˙˙˙˙˙˙ë˙˙˙˙ũ˙˙˙ŋ˙˙˙˙ú_˙˙ō&Ŋ[!kųæŧŅ?ÍhÎ& ˙*đž3W”ėũæŖ<Ī3QæâthOú ô~ĪA0šfģđAĻx×6ÉķÆ~<ō!™ŋ:Ŧ*Ēσũ4Ķí4ô˙Ϛ_iá/í5ũmáî‚ķgãYĒ].Œ;FčF}ŪūŸūxŨo;ļSį ŋF|ņķŋ~qú^—HÃĶĶ螅ēúĖ˙ŌũwĮæ˙˙ĸĮ¤ ×Uáļ/ģÜ×ûÁđŨS̎úaŋéŊRũÚKH%îíĨéßŌFwū•ë˙¤ io˙Ŋ?ŋôéiWáÍŦâKßtŋ¯õŽæŸ›_×6ŗųĩ˙¯XkĩĖõ7Ž™)ķ­ĨzjGõ˙čˇũ­×Įú +ĶûĩON+Ō#˙Ÿū4ã´BĐū0”W´ĶũcŠĶbŖú˙ Ew§QIęū†ÆšĨ´ôŋūÕ~ļû_ÚĻēiĄhũéχ] Âė0ŋ̰–ІŦGÄC"â"?Ä48ˆˆū"#ˆˆâ>Đaš…ˆˆū?ņ˙˙˙˙˙˙˙˙˙˙˙˙˙ūŋ˙˙˙˙˙˙˙˙ųĖÖ_˙ĘOũČ2?Ÿŋ)æk=3MN_ÍfyŸyėųžfˆˆ˙:°ƒ?#ĸ>Gŗ6~5žĶA‘Ÿå=i¯~ŋí4ôĶM5ũ=SĪIĒũ„O__õœvžëŋųŨÎųßŧņÚ˙Ŗ;Ú wūœ/¤aßU˛Ą:3ŋõFv-Lũķ=˙mĨīãëûęéoēđž÷x(Xūëúúŋë˙ÕūéWņëM˙Öīëz^ŋ˙…­/úūßø_ū¯†+ëÃūˇ`ī˙_úŨ/O˙ŨņNŽ=V;¯Õ˙ģŋØĶũ? ¯§˙Ã˙ûˇ¤ķ=/\ū°p}-˙͎ëžŋũúøw[ũ ûĨđĶ×mŋÃßŋŠ…Ĩö˙5ūŊ{Kf˙úkĪ%õÍëú_˙G?đ}+ÍČ Öŋ×coÕNyæ˜5ú#äÚρøw˙Ԏ”ß›Ė×úIƒúĶRޟ§ũŠj=0”˙ĨøL4+ô-8¤Đ¯AĨ×ûUŋĶ˙ØTøL*jŋi&ŋžĢūß{I¯ņhXCˆˆ˙DDGņÄDj˜M0ąüG˙˙߈ˆ˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙˙ī˙˙˙ũJW˙ō4˙)˙ō\ÆqŦũĘxķ?„6Ėķ6qįFyü§gĖã)üô~<3?OÎĻpĘŠį Lã>wįŗ4Q”˙a0šúϘAūƒTũ?§i§ĒxKŋTÁ)ëI¯áaWë˙N~ęœŨwôgŖ>>đEü%ŖGāˆôÃÖqŪ("= Ŋ4Ō{œ|)Æũé:3˛žŪwl§ûūŽēßuĖú˙Į§Kwá%ÂūgÎí/Ģ˙ūĩÜu÷ūūØ×īč?ũ-o×aī¯÷úJãž?ēáRņū5jøŌũ}GLŋ‡^Õ ˙ģŋŌĩ¤ŋ˙ŌúQë˙{ÚV—ļÆ÷âĢūßQ¯¯‡ úũ]ˇūĻ~ūĻwø|úęzMģĢĨīĢ×Ōi˙FvĩxkÛZtá˙´–ß÷ūt—˙SŋKéZ˙˙:­+×În8žēI/ü˙›Yˆ˙Ũa"ę’'^¯˜´ëĐ>¨‹čߜŋŋŠÂ^Š mІŋj5ũHé&Ôâũ M+ĩū0”§š÷ÂQá=7÷ŌøÖ+@ôãIŠũ @ãMcĻ+ŋĨūŨĒ*uúĻģî)ÚÚđÂi¯öU˙֞áĒëō3„Ö8°šÄ5ņĄÄDqņ "#ûTĮņkĮã׏øˆø˙_˙îîŋ˙˙õ˙˙˙ū˙˙ŋ˙õ˙˙˙˙˙˙˙˙˙E<4ČË7Äëų’č§Y(˙53c?”ūz3ÍeųÆEŪAŗņöK¯Âh {A„Ī˙ á‚a<ã<Ī_ĶĶ=B áß陿rza4ÂũŪ›ú¤ŋôīĶMRŋ÷ŋĶ_҇¨J¸"?tUŧīF|ņ}ŲOIÎųã;Ãčīė§pŋ#3˙;đčÎį‹*Ũ7Â‚Ō´gÁW¨ūŋĐé˙Įņ˙ult˙÷˙˙˙TúŊžĐ„˜˙õ×úø[ßô“ü%J?ēŋWĐ֜ąMpĶ˙˙íoūĸŋŠúßöŊ|PĒũĒŨö5wũ˙ûĖ=?ũ?˙á÷_꾒ŧU™÷áҟ˙A´›ŋᴛôŧ<đ˙ēŌõIkŌNgwĖô›ßí˙÷×ū—Z^˙ųÕjĩķ;KūŋtŋĨÎŋūnOŗ—jų­jũ'S ëô˙9××ŋ ]~b?×ĒGę7Z÷ßzë˙ztbOR?}ŦąZw§čü`ņWŽl~ņM5wĻī˙ŠØ­>6*7ũ¯ūد˙§¯iZÚü0š 4ø°˜Mk ´Âa~"-0Ŋé˙…† L& ëDˆˆŽ"#øŽ"#øˆŽ""?˙˙ī˙˙˙˙ũ×˙˙˙_˙ũ}˙˙˙˙īß˙˙˙ú”™ķĄš˙äÂÉ;ō‘Ĩ“ ķ^RyÆu.ō1Aœa<ÛLķA˙5š%åÔdMŗÆfĪķ^3LyÆgëčŲ…< ĶĶOôÕ?Õ$ī÷§é§§ũëé„ĶŋĶI;[^ŋTgsŽáo0é$g˙FÎ=ŊÜīœ|īũQĒG´gsžaīüÃŌķÅ҇˛ĄNėÕuûĢ׋ŽõņĖņz˙qk˙ë˙nŋú{V˙ņõ¯×߇õ]}ņ]×õ}_ß^?ņTëõŽĸŋũGŊÖŨ¤’ø×C˙cX˙˙˙ëēé~Ŧi7üÃã˙ëJ—ęĒē_Õ}_Į¯˙ũę–īü:O}%×ö’ii|Ã˙ĻŊL>‘˙Ļë˙Vûí֒ZūZZ^“ū•~Ōm}ÃI˙˙¯˙Ū’J—í%F4ēuûõ.­mkķ~ĒGG+˙ŠKųĢ\ũF/Réõüšč~žF$66čäŊסūBøô÷Kûē¯ú}Ž1W˙QĒ[Ķ˙ŧ'ÚíÚ¯ôíĶMM5Mmš /öƒ ¨[BÕâ"Đâ"?ÄDGüDDqÄDGņ˙¯˙ú˙ũ˙ūū˙˙˙ŋ˙˙ú˙¯˙˙û˙˙ú˙üÖČģÍHˆŋ˙•dyŲ ˙7™žBfyœkģp§Ųæžn3Í?äÃ?ūr5‘õųOϧRĖæ}žh? 3fSØL Đh=WMRîĶ_äF˜Nđ™ĸ[ũĶOM;ûÕ{U˙„ŠÖęŒî úÎīŋO_ÖwH)ŨķŪwuüī3§v‚ŅĖ;™čÎ˙ĻSį|Χ¯úė§mhđÔÎ_ņ}s=×˙úé÷˙ūëwņßúĩ}ũ­[õZī˙„}Ģ͝ØKīũa˙Į {T´ŋ樸ëŽ˙T—Š÷õŊûąŋõKņ]Õ m-} ÂũvũŽļ?Á°īƒūāßôSuĒëũīZMøū•<đëTgû~˙3°˙øĩôCúOŌŌ}/Ō_ėJ°iī:˙ŅĖ˙˙´sū¸Kô­üú×KTĢü÷œ˙ŌķüfęĩN?ô¯¸=ãoŊ |?å9ĒŠ†čŋĩ#˙ wÚTƒ LlWéÅŸũ!ƚč[_uÅkņ§˙[’ĩ¤ŋM=5ĢĨ_úkO˙ū­¯kīéĻļēp× üDDq¨ˆ´û ……øˆˆâ"?ˆˆˆˆ˙ÜG˙ú˙˙ß˙ß˙×˙˙_˙˙˙ī˙˙˙ũ¯˙˙Πw}˙ČÄæĩ^{<3c˙LgŒ'œfŲ>Nŋ”ƒ>ķŲNĪ?Τz4FŗSŒ g™ĸü üčy.GķLÖ˙õôīOųigäĶ˙ Ļžƒ¤w÷éë¯Ö|¨}5˙ķ~ Ŗūîų‡ķžī_gƌ¨S?™Ú{˙D4OW3ē˙ú™ÂīÎúĢĻ˙­ÖŸŪ‡˙ƇĢ÷×ī‡Ĩj;U˙Ō˙¯˙÷˙ūƒI|~—ũøjˇŠ3õ_ëĨãÁÅũЍŽ*Ú˙I+ǝûĨˇ˙˙Õ/ëŌū뮛uõę+cœzūāŪú]5˙íú Dzëō2T×HģôŠ_Đģũ_ ?ÃūƒVũ*tgĨū’a-mĶō1$¸|īũTúSĸôēŋ˙_¤ūé~uZOZYŋ˙KĪM{šŋüë}åŨցڃ@×đ{?eī_õ#˙§ĻGAŖrŠ1%¨=vūH8iâ¸ô?c˙õQZđqēĄąQŋņĮW˙éi~ƒũŨ§kØM5ũí­ĢQUû_ūĶOøqĄi0Ÿ¯ÄDGūÂh5††ū ÁŽ"#]ˆŽī˙Gņūũ~ŋ˙˙÷˙˙˙ūŋ˙˙˙˙öú÷û˙ūŊú˙˙˙čã>ĘO!#Q˙˙äaž‰…šŖÅ˙^šfz ŸÕ?˙ę8h<Ų Ôá˙ūŊ D‚#á-˙˙ŌĢé¯G˙˙žîŌĻúm&S˙˙đ§‹)ßĪžgĢúūŋKãOúūûûú¯ō&ģ7A†Ŗ´ŋĐũĻL"rđŪ‚^ük˙ëK×čƒ â#ø¯ãOK˙Ōßî‹ŋĮRIŋIWūe3aÔĩž™ÚũŊ?û8CÔ{0ÃėĖŅũ?Ĩ3˙ú_ßÁ¯_ņ{”ëWõĻ÷˙ú#ūåíu{Ŗ;˙Ŧ=oSĨjŋ˙ĄąAî+ EZ„÷_ÆˇĻŸĮĮ˙[ZM;úŋ늯Zvŋņ 0ļCC˙Ŕá0Mí _øˆâ#˙ÄDq˙ũ×˙˙ô˙˙Į˙˙ųŋû˙÷÷õ˙˙˙˙ųÄiž,ˆ„i”īō —En7ü§3‡ŸFĸüÆ¸ž"bžŠHžđA„e? ĪA áõőíĻ:ŧ&y؃ü ôī˙¸"=¯éĻŊöG˙널DMGûūxüŅĄé;8õŨ/Īß3˙Š:×_‚•Šžwh.T$gū­ē¸˙ū-/×û˙ũžEŋãUøū?˙öBaOūŋöûŦšļ™Ã8]gˆņ„ŧ:A÷ĨŨS°fōū™ŧÂ8?.Īdxà ņĢZ_ņQ˙ôŨS4ĶūÚßëē˙ė5ŋĶ˙ãuOŌc_ū’˙øI°D}ögĖí…đoŋß˙ũÚŊũ´gmsĮõzOũ*˙Žēęë¯õ<oŌ˙Á˙Ū Ū¯×ŌŋúUž˙u˙˙˙ūˇë˙Č˙˙õ˙ėÅ=%Īá˙ŌHēŋ÷^ tī˙æŋ[Í˙›×^×ûŋõúģTûO0žG‹L>ą hfč˙œ{lןããMö×bŋ´aƝĮØUb“N8ũ$ˇôÚû¯é­ßwϟõĩ×ÅméĢw“jaøvŧa=BđÕ4Ķ_ˆˆ†„FGí MÂa~" `„DDDGÄDEÄDDâ"8â>ŋ˙˙÷ūŋ˙õø˙_˙ūŋ˙˙˙˙ŋû˙ųļz?ĖķR^4ŗ\f—ë˙é ĶĶtĶ6dFgö?˙˙PDzîŊ5NÂ[V˙˙ū2Ÿ xŦņķŊkšß÷˙˙üuĶ˙ŊÕũ~™ 띒"ÂlWT ã~õŋū üNGŪit`)BDxöGʄ`Ėb"#ˆˆúcVūÖ(UP~5ÄDDDDDDDGũvÁū+Žgúō ãn9sÔg* ØE‚¸Š9 Hä ´f))k>đŊ†e¤6čąøtaÚ§WésīÍ´æ-æ^ž˙¤˙Ožéé{ģ˙˙JŒyŧ˙ŋפgˇ¯˙˙ũmE'Ž”ha¨­`˙û¯ūé>ÔzOûöŋ˙˙ņa ĄatÂÚiŦC_ũüDGĮ˙ŋ˙˙˙˙˙˙믯˙×˙˙˙û˙˙˙˙˙ū˙ä ųŠe9ä"'ĘCü¤Í22ÍQÁœe=cĪä ÎÖQ!y×4g™Oæ¨ÍœjDIųŗ4yDLŲ§ųԂ &ÂzauO鐙ÖŊ&ša=šz§éĒļ’ú÷vŸ_֏nŸŅŸëīē3Õ#ß qûÎëŲO‚#Ķ>TwĐSģ×čĪž3™ũrĄ2ŸOķ?éīŪ›™ûz3á+ģããOĩî>ûë˙Ž8¯ŋüo¯˙ú˙žû¯Tĩ˙N:üwÕ¯ô•/ôD8fkČfižŒāSŨ}Ŧc[6+˙Ic¯îŋę5ģõŊŌūhpᄲ‹08h"ÛPƒ[ã×Ûũ/{×îkúī[Aßëë~ūŽë˙Ŋx˙m˙ú{¯éßũÛÕzü™ÜÎæ~Ÿ8ī˙ãŽûôĶ?øŌb´/-ŽØŽ×ė]ĄÅkėzqI§Ų]4ĸĩęĸ´˙iĻ:ÚĒ˙ęļēvНkėũžŠŽš˜zģ\ ĶžĶAއÄEĄÄDZÄF‡Gâ""""""""=ˆˆ‹ˆŽ>8ū?ū—˙˙˙˙˙Ú˙˙˙÷˙ë˙õ˙÷˙˙˙˙äĄ˙üԌĪ$"!?ÍxA‘‹9į†q˙ŦęĖãÄuy¯3ŒßᰃÍG„Éô 3Ģü&gX_OOũé„Õ7<ÂvŸöšßĒzĻ”$ˇ}˙ũ|āˆööčÃŋÖxÁN?~wÎųßû)éR]æŸū›Ķßҟī˙øūŖ+Vŋ˙˙īŌ¯ę÷˙Uá˙Ĩ˙é îúö+˙CAqUĮ˙û ęĩ˙§ ¸Ĩ˙!ŖLī›äpĘ0 ĒŊVŋĨú8ūĪĪęë˙‡™áŅc˙ĨüDDFôW˙¯ĐžūÛ˙÷­ļ›˙™ßä2\uŊ.ŋKûũŋˇßūöͯŽõ˙Éī‹Ų$é>Ŋūŋ‡u7ŠÕ˜õ?˙įO´“HÅ˙ūUč3šį¤wZ‘×í_š5Ô=;_í&6;Mmī÷§ŋjƚūÅUą]Ķ]1_ąU[^ž×ūūšĶk¯ÚiĒka5°ŋ …„ÄBÂúõå:hq ū""8ˆˆū"#ˆ˙úÄq˙˙˙˙˙˙˙î˙˙˙ũ˙Žŋ˙ëëß˙ũWŋį×ũ˙÷ō“_3Qä„N™â5fŸæĻ}žŠsÍŗĖÖČšŒäg‘?ÍLņžfˇžĖØ@Î?ÔÛLęđ˜Aú ?ĶM5­3=;øLãíƒO#ĶTĶÕtßëH ÷O¤ĶūôVčÎÖaõîĐDŽĶõ]õ;ŅíÂ#ú0˙á;)ķ?yã;˙ŲOF}<-˙ßŋ3éž ”îqķ?yŨūđC˙Ugũ˙ŧ_˙Ķą˙ƞûģßZ˙×ú^û˙ÁīúŋđôŸøáÃ_đą_ƔWüÃUī×ņė(×úO˙ã_ˇj˙ũõ^ŋŌûaRZūũ'×˙_Ėî—đpwÛ_ũ$×˙ø6ŋ˙õÃtŋ×˙Ē_;ŨˇũæwīēV—ø"=ûļ˙ęÕ/ ūŗ;˙ôŋ{Ûũ˙¯×KúN˙ū˙¤}? õëüÅúZųĩ˜Ō9Ÿ˙Îēũį3=uƒ@˙˙į^ŒyŽÎ/˙ÛR>š˜ŗrī]˙ÅyųH§j…FœU×Å'šũũĩĩíb­$Å|lSŠéĮÅ~é÷ümU}í;íU×˙ŠâЊë ŋ]4õĻĶŋíXÕm„4á…^ ÂĐØˆ}„Xh0… Öá­DDGüDGÄâ8ˆŽ#ī˙˙˙˙˙˙û˙˙˙×˙˙˙˙õ˙˙˙˙×ķß˙ú˙ ‹ų‰Ŧ˜E=˜f™æxĪŨ|Ĩ˙F¨#­œŗė˙ūz8Âåišh>ōŸ ĻđŠĒ˛ŸgŦŒF™čŨ0ǟzi˙J›úG“Uũ8">č"=ē ĩ˙ĻƒÂ…AũčAhîũāˆķ˙H)ŨûĶĪwõmcīRŖ;ūôķžwč$ī@ŋ§YPˇŨƟũU˙ũÕŌņ˙Qī˙ēļ•ę’˙_ãúú˙Ũ˙˙Ēī˙’]à ˙ú÷øoÃütú˙Ũ×ũ­˙ūžĩPũ¯ëč>;ũmR˙ûÁĶ˙ã˙iļŨčŅ{ŋ_öžßéO'đßÖÜŅ˙ˇ˙§3Ü?ûhŅũŋëĪgjũ×××˙˙Đ8{˙ī˙˙ú˙˙O3ˇî’õK˙üß˙ž_Õ9Ŋ˙ÃZ—ķŲīÕķ¯ĩ˙í_RëķøRëŧ÷¯čSjéī°’AĨŠũØãXô㍏¯ˇW]Õūb?¯čqéĮϜiūņLzxM —mTÖ×m0šīIÆĮÆÅEqúíoúl+ũϚhpÔ(MPūĐ0˜M""˙všÚßkÜDhq ~"#ˆˆâ"#¯ąÄDEüq˙˙ŋūŋ˙ũzú˙˙û˙ß˙˙Uī_˙˙˙_ß˙ũ˙˙˙=šŒôL<ŪgĪ˙ųPGü¤g¯Âg ã5™ÃÉĖüišgS˙LÎč ėÎŋäc<Ėüę3Œ“FŖ°™ŦķlÎ ˙TĶ]<%§ú Dy'ŊôgßôĐ~™é?Õ+O˙‚Üîæ|īҟ¤Ŧã˙‚­ķģמģÎí#úÎí;˙ÜīķĮw‚ßúžõūéc˙uë˙˙˙Mė¨Jëˇūã˙Ú˙ßÚúXü5˙¸īë×˙ū=jžū´ˇ˙ Šūū;MzĶUũē‡ãUą˙q˙Ģáū¸øQ^ö˙Áļ>7×ŋüįwëŖ˙é/Ŧw˙¤¯_ƒ˙ˇôŪ—3Ķ ūķŋŽ-˙éwĶÎ˙ū¨6ŋē3ŋđčŅ~ē{˙Õûđ•Øj¯¯ÖĄ÷˙ŌôŋŊ˙1áūū—~C_į_S~_î“ū×˙ëŸķz_g:˙í$ŠÉuŅ60rî˙ãŽ);Đ0ž—õŋڛ'ô PĶ@õãcū0“ĨĒu\Wí;TŋēWôø¯ Gq˙Ŋi×ûI5 šÚÚÚkö˜Aχa‹×w n‚kkũà §õi¯ÄDDqÄDq_ˆŽ"!Ą_DGëũ˙ã˙÷ūŋ¯˙˙˙ŋūŋ˙˙÷˙˙˙ūŋ˙˙˙úßüėwųŗqökŋ˙‘|Œ˛‘ūkɋ(Œķ6y§ųœ4ĘuA™ú˙渧ëÍlá„ÂyčņПųč&~ č4ĶNŋ *iۚOüŒ‰ŅįĻyĻj§ŨöžŋĨG’ôaīG§v‚ũ)ŨÎõį|ĪKūŠŽŽšŋÎí/Î>w[Ī/ô’t‰§z÷˙QĨ÷×ũēÁųáŧđĐ"˙zõ‹ūĢú}Ē˙ßŦ?ė/¯ãP˙×Ģz˙öžúë^;ūūâŧP˙÷ŋã÷õŊ˙ëŧ*úÚ˙˙ô ˙oé%<~˙ūÚúú~”ô ˙Ī‚/ˇĨÚŋčŅoˇI/ÖŋĮĮõZN¯IĶ˙ŋ­ôšâ“˙ųj’˙ķē‹ī÷ßûŌëëwõ˙īĨŽ‘š4×÷Ė~cõKUę ۟ī‡ŊũZ9įéW÷uuį3úđjꁧņŪ°ü"ĀīãīŽÖ×]paUSũ7(?ņąą§Ēq˙ûÅ$­}4ŸüoŌÔÛcģô˜¯ĶØëöĒēũ¯a~ Sĩ˛‹ĄūšąZ„Â]uÕWûM†a Cˆˆˆū""8ūšĐO šüDDqĄ˙˙ˆŽ""=˙ßõ˙×˙˙ž¯˙˙˙÷˙˙˙˙ū˙˙ūûû˙˙ü¤3Ų)'g#OõKųåųüĶ8GG”Dčņœ3]ųO* sf~ „ĶAõ˛ŋÍqž ü&~>fŸęo §i§úJô´õ˜}¯ōŸĪ5GˆäF3ûúa4 %Ú×ôZGûį3Đ"=úLīĻĐ\ņJgtÚũé=7MPjëNÕ-įz3Ōũ$§zMķŊĢũ!¯ŋ×ßūģÂAūŋŖ@‹öžĘz3ᆖŌWZ ôáŋú˙Ãũ=ûk˙ÂĻÕ\˙ˇ˙xõwW÷öŸöŋãĒ_˙ÚëxĒé4ĶģÃ^ęúzŋđž*Ÿđ˙ģKôģ˙@ˆũGõ8õQę°˙ĩīú˙ūũ(Ķũ>gęŽ×˙ Õዤ…¤—ũ˙-|5øПÚO4§¯ũ(m‡˙÷Ã]éZI~đo÷ØüJ¯é¯ũûëôŊßūũÎ+õT%#¯˙ũ5Moũú]z‡ī˙OĪđaËŨ­cÂH8­  @ëųåūkų×JéKŖú¤]$é_ĢÅļ+úŌß×ī֚ēÚKœē 6=45úkÚúi.ŋ tĐam0˜Cũ8¨đē\kíWĩú ¯ÃM Јˆū""8ˆ˙MĻ ´]8†Ķ sø†â#˙ņąqkQD~ŋũxĐß˙˙˙˙˙ŋ˙˙˙˙˙˙K˙˙×˙ßũ“1šÕ™û!ŗE˙˙ėŲ‘|ĖōF|Τj=sS œa<Û4ĶĶO˙䟝LŒō_>ũ3ŒĶAŽyύ4˙MSOtõīųŖūkDųöjŋ:š û#,ô™ü.š~ē§ZĒú{ķķ™ÚŧÃį|îųŪ¯Ô*vn0Ļ˙iĻ—ÎôŌŪ|đg|<8+?ÁīņÅĄ˙÷ßß^á$ũm#ĐEũôgsÆwim˙_ū?˙ßk_˙Ž×īëâĢū§wMĪ ĩ˙˙ôŋé=˙ŌÔx˙;5gĖ“_š¤Í™Og¤r  ˙TĶAéĻžšúÎõ÷X$a˙ČÉ3ÖrO4H?ͤŌô´×ûG‡sæz3ҟÎųŪŋú˙Ķ˙ĶOˇTĐDôNöS tÎīúū~ßĢí˙Æũ÷X}ŋųĮ D{~ J÷Į‡ũ?īũ*˙ņŌôƕĩõíīNûŌĶ˙ü{ÔWŊĄ¯_Õ#ߊ˙ę?]`×ßÂXI=īšũ(úã×IŋT—Oī˙ūŋ[ūô˙ŨĐ˙´]Õ-'~Ō‹ŋŊ˙˙ßāÚ8˙Č˙ļ­ĪįŽŋ¤K M /Õ6Ŋr˙i÷ûū˙ũö÷×ôŋIÍ­-˙Ō.Žƒ `éƒé‡Ž?ú3ú¯t/âŋĪĒĩûé/ԏĨyšŌÕĐãũ~ģĒk˙ŋūsW/ēÂķĻĒšŠ>â­ū4Ŗ_IŠ_­éĒ˙i§˙Úßë5w_ÆņÛZn˙ŌiũĶ[A…Xˆˆâ"?Ķcb°×ąūÖÂĻēk˙Dq˙é´Ö"ÕS ņÄD˙˙b#ˆˆ˙ũ{˙û˙û˙˙×˙˙˙÷˙˙˙˙˙˙˙’y˙ë˙˙ČÄ}ŸŠw›$à ˙˙˙6ĪĮŲ­å ã>gôĶM>Ō^˙ä]ŸäÄ}šžr3g™÷úh;O{ĩũgŽųĮîPDy/ûčŒ3Ņû<ΜiߔđM4ûM7ũQہônŽí(Î˙ÕöĮ˙ëúéϟĻĶũgvŽø"=Ō0ø">˙ŗģŨŽŋß˙˙×ūã˙ī Dy#öķž3ҟ˙û¤û{˙Š^;˙ũĩū“¯ ë¸]ÖwĶÕūéwˇú˙˙ę—úŽk×ņ¯ī˙īņ˙ë{ũđد˙{ø×˙]ã_Õ|7ķ=#ßü_ÅS˙ũxũõũŌ ĨūŌ_ÜÎû˙éŋū—˙×˙čãé&ŊCoûi={āé~žīG˙ë×˙ß]fvŒ˙ū-$Ÿæw˙˜N‘õ…˙Ēü×Pžŋôē×Ō§ī˙ĩH5õ˜Oūšö§,éÚĒ#ûĮąZmmI˙ôŋÍîŋ†”Ž”ē7.ˇÚ¯ņHz›_Õ§ÚÕϚū¤˙Túw_燄´âĸĩ°ŋ ĐĩøƒDqüqLW{Å´ũ{´Á×á„"#ˆã˙Ã×[M4üDDqü÷øˆâ""?˙˙˙˙˙˙˙˙˙˙˙ũ˙˙×{˙˙ųO‘w/ū˙ūFŒ˙øLã4ĶÍ´ŗ8ë_üŪxŒãQåãL'ūŸ^ŊīōLĘDžI™æD,ã=ĮĪđƒ´īĶ[ũQ‡Ļ‚ŪghFüŒĖŲī=™´Í´ ü§ĶL.ša4˙‚#ÚG‘‡ī;éßđCõûĨĶ 0žšz}ŖJ“@‹˙ûYũ¯oüĪ˙īXŽ˙ũz0ø"<ášĮÔKôåB§JæƌĪü|~ŋęŋØj“q˙˙om]zs>¸_ĐūžũX˙øI ¯Žˇ˙Gģ û˙˙ũ~+ü?օoÂĮ˙˙Ĩąū.Ũ‡˙˙ô45ß­GwęŊéūÛKúõí×đëúŽīZĐ7ũŌS?¯na˙é:^’†ŋ5/ÍŖ=~Ÿĩū’ZûÕŋééWĨīOûú^–˙ĻĨüĨjĮū’ëߞ/ũĒ_­˙ū_ķ?1 zŠÂ[ņHWúa&*•mĒũöŋīĩ¤_7Zé=û_ããũ—í5´×°š }R.¨ßį*üÜ_ÃņÜz"¨˙Žŋ o_ˆˆŽ"#ũ BŨ{cã¸ĒúúkwßņÄDūūÅa:ëjũĄ ĒCXˆ†˙˙ÔO㈈0„uÄDq˙˙v¸ã˙˙˙˙˙˙˙Ķ˙˙˙˙˙˙˙ō/*Ėáä8Í˙˙˙#q˙ķTxfĖĖ3æĢ Õú˙ä ŪA^HĪh?ĶÕwZôa˙ōŗūj3ņĸ)üã'GAäcOĪį™ûĶT×ôû™ßÎîOķYš÷=”ėŅ'ú¨(AéĻz˙õM'Ūæ|ōž3™Oũ˙˙˙gôŸP[߄‚Ĩ҇kÖčÎëYŨ ŋe>ē˙čU¯ë‡ƒú0û@ˆũ:Ļ’˙ģAŽĢ¯ąúüÃ˙ ´˙ˇén—é˙ôë˙‘”Ī˜}i*ûŋŨi;û‡ųÕj§g5ÕOęcõ#æ˙ÚHã˙ęųĄ˙_W‡ Ô;¯ zo˙û˙Ļ–&üqčq_I ˙Bįõ˙ŋ֔ZëûŪönüŪŠ%üoZkUí/Ļū—^ŋ¯:^¯›’.°˛8ũ„ŧm(Ŧ'„â‚I~Õ5žôĶ[Ķõ#í:ø;jŪnmbĸ­m ė8kÕ/âšŋÚ¤ŋDGúv*͍ããŋÚbŋĒ˙…힇×˙˙ûMl.ö Ļ‘âÄo˙˙ˆŽ" ޏˆˆã×īúüG˙˙˙ī˙˙˙˙÷˙˙ũ˙˙ß˙žD ˙˙ú˙É6}š‹ ™æš˙ú˙Îą0ōŒƒÎ?Ę}4īÕ˙yI?=™ÆqįųôfÉ=3H*­čĪßT ųÍk:™čû5_”ō ŅA§§÷ú ˙Tg™ßë˙Ķ8aœ´í?ÂHUĶĶ@ˆ÷ë;åEûĒE˙¤˙ëũa]tšG“¯Anŗ;æŒų‡Ķ˙ێ˙éĨū4Ŗú˙ųĨ;÷ALúyŸkũ¯ôß˙¨ĒëkúŽ—ę ˙õIŋ­~ŊôãúLTßę—÷ū´Ú^ƒ°˙Ú¨đq˙ūĩÔĒ_éĖ<7ú ]/ĶūĸŠ˙ßkú÷^ģ˙œvm/éŋũ-s÷JX˙ō{úį‹Ąii#;Eú–ŋ~˙ƒŠŗ†ƒĮũi˙Ūgŋ˙ØkKJēpũn§üæž÷F˙öļ=tŨĒ˙_­ũ`ũwūæ$ĩ.ŋŌüƒUXz†ŖŽ˙ĒÚÛđ×ÕßzįŋčŨ~ũ¤h†Į_ûŽžĶ_´ Cˆˆ˙N6éî8ÂVĮŽĮ_ũ4—ô-;[DkÄGûÕE(N´ļŋjM{A§Žņ˙ģM;´ū""8ˆ˙˙ņQ˙˙˙ū˙ĩ˙˙ß˙O˙˙¯˙˙ä ČĢ˙˙˙ū3qNķqĻyĻqũ~ŋŦčDÂĘ2|ˆ_”ōϟaS¤˙×yÕį‘›)Īŧúŗ 驜ū“OtŽ ūDgû"ˇč3ņÃ5žvy¯Zuięg2žÎ˙ĸ‹˙„ÂgŦã3Īfˇú¤šéŋ]ú0ųĮĪIR˙Ą˙ĶI˙NĐu…´Ķ뤧z3ŊîđŋQqõ×õŌáĢm}įz3į~č)ŨĖôgūk¨Åw˙éE~ÃũiR˙m¯˙ë˙Õ÷Ō 'õøĒ…ūåŋõ ×Ėė6?ĮŽŋN8˙ūÔk_ŋ×zųž‡<Ŋĩôŋ˙OŋŨũ[kŋ`Ūũ¤Këž˙OŌ÷Ė,âđŊô˙Õ!ŌÛéõī×ûŋũĨ9æåøãCߤŋ{žã×RīÛ˙āˆ÷í¤žgt—ņđąū’Ũū÷Žę•~é:_;ô/ūœ/Ö˙¤Į˙Đ6S˙Ē4t°Ũ¤ŋé:^¯ßį_RčŪĻėŽĩ´‘úx"?ũo}ķÃôhĨ÷I~cŌ?ŠŊHë˙üRÅ÷˙PŌWúŽ˙˙ŊœH<ĮéIh^›a¯ũ¯ÕĒkę—˙ų˙7™Ĩëēmm$ĶõĐ=zëôũ/Á„A„͆„Gú—˜j˙ƨWņĮüVŋí`ÂØ[AĄ ~""8˙Ōcͤîęß÷a;ĩĩM?â"#ˆ˙úA5M{M5L/ÄCGß˙ūâ""ĸ""?˙˙˙˙˙˙ú˙ú˙˙Ũ˙˙õ˙˙˙žk3dqšŪlĪ3„g˙úũķfp""É͟g‹õM4ôÕ÷ŪR<ú3#R4˙[OAÚkũ|ãžač™Ú˙ÎĻEŦÔĶ<ÎĨ„Ôà „˙ū÷@ˆō0˙øDôīߎŸ˙äc<Ī<ô™ÆN”ãũ: Ūž‚#īÁJŒãšßôūgx¯ûŽú˙MS×M=?įw3ҟÎ>T*ŋ˙ŋ×úū(ø¯c_ø"<į~wÎí`žõ˙_˙‡J?ük˙Ē_ęŸÔzÖük˙˙áĩŋ­˙jŋąŊ~DI­/IĨˇOük[­Ž>Ŋxa~ ú_¯ûíĨ¤úWũū̆īŒTŊ/qũđÚ^ķ>ŋũué/˙÷účãĘ|Ũ*Ûī˙ŌŌđũ­ųĢ\ãÍĘGôŦŋpß×ü‹ŋÃé.ë˙æ?<ŗzõ÷_qûŋ˙_^’u˙ ZA,ßīŽŧ}éúiG˙[˙ĩUü§ū­}}ÍŖ5õĒj¤|߯é^ũ\WøJŋÃC ĄÄD~Šö¯ēxJ8Ķ]ŠØ×öši kv`‡ņ˙ąąQZ|W×č ×ĩ´ė!ëDūí4×nka~""8ˆ÷÷˙ņĄ˙ú˙ú˙˙˙˙ŋ˙˙˙˙˙ũūEĢ˙˙ūSĮ û5<؜gÚ˙˙˙^ŠĻŸië÷˙Íhˆ_÷é#>×TaÛÎīę¤Yäēķųœq”#YįôĪ0Ÿ˙č/ķį‡ŋ˙ÉtpĪŲčņž5ÂgßĒi…O]#Éũ§’ũž+ŋuũ˙tĶ áˇīû D~xh)‡ûĢÎīä4yˆôĮH|qWęŗÆwo;ŅÎô põôÚëOũZŋÄ}ĨŽĩ×˙÷]ßū˙ũ_˙ä4@ųË‹ „‚”OĖî›KI%@ˆ÷˙˙˙ ú˙{†+ßŋüëéũ]-$ēēöŊ ގ˙˙ikë˙˙ĨŽĢ˙˙ßé'?úīwÔī˙~ēg™ãLķLō!%ii~#ūúKū˜/ Ķ¤í?:iáũSŌ˙Úõēž?Ā™VEāfÃ"ųám#;fŋûĨ×Ĩū˙ėVūž"#ĶQ_ë˙Öͤ´Ŋ†˙ú˙ųÃ4å9~]•69đîh(T¨ū˙ß/eũųÉS@ô 4ę˙JxúGžeëķĮ™ųuë×ÅqWūŋ÷÷é{žŸ˙[lēŽ6Gēû[_ƒM`ŋšŌ˙é_˙˙îÆũ3kÃB"8ˆø{ukhSiZ˙â"""#ã˙Ž)Š÷˙˙îĶMUSM˙˙ú˙˙Ĩ˙˙˙˙˙˙˙˙œĘvzČlŸûũ˙‘ķqķÃŦãÕžwũs[üéÎi§ßūØõū=§ōŸŲæ§ ŲûŨú4oũ}_õ_ĮOč0šzzwët/OūŋŠJ?˙é_æ;ā‹ë8ôņžūuõ|ōá˜f†Kį‘!â6Œf#Āxēú^Ž>˙Пúu´ģ¯˙ģĶ>Š3Ta|<û63Œ øˆˆˆˆŌ_ÃūŋŪũûÖ÷õē҆l•~Õ7Õ>@đjĻ“kęawéã¯Ú X­¯ûu§ŋķ?Fw]:3×f46˙SžzŌ÷ŊëR?VŋüŌ¨¯yß´ÁMŠ˙÷Į¯ëƒŌ9 z`ÔqņĩŨ?ŪÃn“˙ŋÕß˙÷ËQ˙õ}>š˙ķÆ×]í ˙˙÷īļc××ū—˙öŋσq¯˙GoĨk×~Č˙ĒGÚ¸ßTØŲ!üDDqūęęŨZú aˇM6*=6E}ĻÅ7ģŋ˙˙Ž*5Ž=/ŋØ[Mt""""?˙˙vƒ &_ˆˆˆŠCī˙ü0B8ˆë˙˙ņ˙¯˙˙˙˙˙˙˙ü¤ČךķŅĻú˙ūFė§Ū3ŒĖ5A„Â˙˙›#4FJK´į„Ķō3ĶŊÂK˙˙A„ '§ũ¯¯G‘cūĻvŒī˙˙üM>wh~wĪųP‡¯uë˙æq¤z3ķ4y“Ŗīëį}:3æ~¯_úūŖ¤˙Ãk§˙Ēi„é4ĶOũEũû߯ģõĨŊE}…ũŅŪŽôŋķŋßūĢŽ>ũ¯˙úˇũĨ¨˙}ĩnŊVÕ×ÛZKŠcôŋĶŨ/™˙ũ˙˙ŋf‚9 ‡Šä‡ģÆŋū—_~—î•˙ícûĨ­â""=ˇI‡ zŋúŋŪ¨?˙˙˙ūŋ! x7ˆ9h%Š䇸t—iũuđôSrĢlUõß÷ŅĮw§ŋÍž6É ŗIÎJG^— q^÷éÕu˙œ¯÷¯×OéÕ ÂJŸ‡úÚëÃB_˙¯u˙úū:kúA{Câ"Đâ#˙ĩÖü ėWŋøaBhG|á8Ļ)Šé§˙üD˙žĶOĶ[ ī˙˙ūĘŲŦDG˙˙˙ę7˙˙˙ũ¯¯˙˙˙˙˙ų0ķVg¯˙ūŋųŦÂfŲŦķf„˙˙ķŦiš‡”Gķ8ŌũtīM7OúŲI™Æk#Mķúaöškü.qÚ0ūačĪæü˜_š™öyšŨgØAĻ}úĻžîÛū#Ûéöúŋæ‘ögž´ĸũ4ĶOß@ˆōzŋõũN=7Fé#>xĨūģų…¤g˙Ŋ_ņW¯ŊÅÂ_č]ĩūÚîēîį>´ŧ @×ĶN0ŋ´ÕmtÂ×˙ũī˙ŠjŪa õ[×Këīí0Õū"48ˆ˙ÂDu DzŦ&×é cŊ4PAh%öĐâ"?ũ8ļ)k GûT×_GMV/ˆˆ˙˙×v—ĒkÔE„#ˆˆ˙˙ņ vˆū?˙˙ņ}˙˙˙˙˙˙˙Ũ¯˙˙ĘDGVyŒĶ˙˙˙ū†z5ŧ3Ī3ė&˙˙ūSĸä&}š‘–šMm5_Ēúyô@׿xLáŽQ*a/ Oį~ҟß˙ķV}Ÿ3SĐg ã?ô•-ųŪ—ųĻĘ|Ī÷Zëßų>|ÍU›#؜f„vŸĻšĒ wi{ŽŋŽ?úũ÷×đĒq§ęŸõiŖFŧÃį{)˙KŽŋ÷ÃÔWWđĶ˙zM#õ Đ"<ŽīöSæ{^Ū㭏ūƒ[īb¯û¯ęũqģÁNúo„ôę˙Šž?˙O_­Ĩzūt´—ß˙ÚM˙˙ũ!ÂCZ„ŧ/Ũú0ī­fw˙íĨ­ŋ÷ūīw˙˙Ĩ¯ū˙Ē4CxæwŋÛū–—Õ×ū˙Oŋļ?wÃuáģÛū;īß_īSÖo@ô ĩc¯ä÷ū˙ûi6—ū˙ŪcÍĪ˙ĢņņI˙Å˙_Ļ˙ũŌ×ÍūĻ˙đdĮkĮĻą˙´Ķ˙TĶ ū˙×ũ5ų×ԏ›ķũë_éâēûi¯ ÂhqéœÕžÖÍõŪžļ¨qJ› ãcūšÁŦXA„?ˆ˙Ö*)6( ŋbļžēiĻâ"#ˆ˙_ĶŨǝKņhq˙īę Âa †ˆū?˙˙ņÉ×ũûũ˙˙˙˙˙ū?˙˙˙˙˙ÍDpŽ3[ÍĮŲĸ=˙úÍyy3™ĮũĒiĒ 4Đ_ü§ŋAž“ĶMSKāˆöšķŋīūFgņšž~ œfŸyžŠ×§ÁåųŪgN=/™ķ;Uŋ¯øAǧ۟úĪ /ÂŪwÁ]‹T;ī˙ī÷˙ûŪđSģ_õë˙{¯×QÔiŠ_˙ūK덚Kũo¯¯qá…úõK_˙˙ę)đ×Kũĩîũ[˙¤ƒZ8ī_¯úá!ūÛúĮāū8mũwKThq˙_ũ/_ĐoĶũ;ßū–—˙ųqĪdv_2čž\ā!€s€A‚äpoīAēđoÕũúæ˙œŗrŠj ?øˆˆˆˆˆˆŋmu˙īūŧéz¤]–×˙WBãâŋ_[­ūļĻ(­48ã_öŸöŠĢķ/_5^SšéŦ`Õũ$Å_ŪĶ ņa4ÂÃ0„ü|UŽ›Ķ×č' ÂÚi„?ˆŽ#˙ÚÚëjŠ/ÄDG˙ū"-"#˙˙÷ņ˙˙ūŋ˙×˙˙˙ŋë˙˙ŋ˙˙˙üÖĪč§ŗ ûqūāĘ@M"#øũ˙đÍ\4""">"#ë˙˙ÄG÷˙˙Öē˙˙˙}˙üëŸ/˙˙Ök2tr)ėäxĪ3ök˙˙=G–CĘtH_¨[OĶL'§˙ķ^ž  fˇĻiĻ ũŌNåyžŒųŨķ<Ī˙eYo8Â ŲŸŋúM?[…ŨBK¯ëĢ_ôŋŅϚĻ‚#é˙ ačĪßtŋĩ÷ŋŪĮ˙ëW;ŊŅÎũŋúĒûŊ{ūá˙÷ßúU˙S:w¯Ŋ>é7˙ë¯Ķëģûî8˙Ĩ˙ô*˙ß˙˙v?ú÷ŪDSŋ_Ú×˙ŽŖūĸž×î Ĩ˙ķ;˙ß˙p˙Ĩû_ĨKãĢĮđmëũ>Ÿ˙÷KŨ§õ#ĨņęĄ˙u¯˙[ū˙üÕöĒzŊzJ×B˙đöŌđé_ųĩœZ_˙küqßĻIŠ÷ōvV…ÖBšr'(2“•2đ…™T=gīú^ŌZ˙j†›lV˜=Įũ5Ģũ$Õ4>„DM!bOįŧāę¨×ņO˙ĐVŋi„-"#§üŠĩĶ.+ú¯a~í~"/˙ūļĢúÃ^ĸ"#ˆˆõ÷˙ör""?˙¯˙ņī˙˙˙˙ŋû×u˙˙˙ŋ˙˙ë˙˙˙üÖgķė§ķq›<Î?ú˙^jˆŌȔg~¨4“M4˙˙äÂüŲļĘkūÁëNwÁéß˙üÖg#8§yčû ™ŋũ4ļÍ4ßųčaķžžx­Öˇõ%Ņ›&gšķ6äŧxũPi§„Ķ §ũhĪKtæ˙ßũũô÷īüSf éœh?´ū–ׂ#ËŖ>õ‚$[u˙˙Î8ÜWã˙é§wē_@ˆķī;ū g`ķ;ëũŨzÖ?öūŋ˙˙;æ|īœ¯Nëī÷_ūûũûÃū˙˙Ãz_˙ũéĮũŋ˙_†ôŖX¨¯˙Ũ1ūŋûĪgÎõJųã˙ŨtÔ/U˙Đ˙bĒē^ŊyžŧÎū˙ũou}'××øņ¯ß­¯Ĩāé=z_˙{×éĪüÕīęnũHūŊŠ˙Uŋ_˙ūŨKI-˙_ _˙˙Įi1Ģlôœ6ßŪ˙é~ēé%Ũ~b×9G¨=ĒÔ~×´Ķ_Ô˙úũ/5zEŅŋ9¤]jGėŽ¸˙Šp•ĩ§QKûA„Mąé$oÎg¯õ˙Mø¤.4Đž44WīIuîÄDGūĨééiąVŠé¯ô×ū-~BÂa"?˙õŠãĶh1_Oá„ 48ˆûˆŽŋ˙xL* "#ˆøˆŽ˙˙ũÄDG˙_˙˙˙ī˙˙˙˙ũü™,Ģ?˙˙¯ų.å ķf~LÛ˙˙˙ūM5Ķ]?˙ų?˙ĐXABį{Ė>w˙Ífp¨ķĖ—KīūŽ”/w_ųšFhŒŗ4gš3?ũAWLĪUõ˙]aīū˙Ķ ‚ '„Đ4Ķũ-("=ŖTį÷ũđáâŊôî˙]˙„HęŸĻúûÕ{íú×˙ÎîgÎųŨī3´g÷KũęŠ|DĖ<×˙øĨŽ˙ū˙ü5†+īĪĻūŊ˙¯Ŧ~\Ų%žk\Ū‰āŠŖÄ¤h§ķD "—ã˜×âuČi´Zg¨8v<3čX0Įq™<á03Ë Š.šˆãfd-N…ãFãļ8í&ŪDœy;#œá-vãx­Č嚎ãÄĒt´'m´˛ŌåIecqQ‹Ëo#/‹6wu§õŠĄ- ާĻč€}*ģœ›Gޜ`g\Qí 1d‹ŲZ!‡dš‹fqâFnba"Ÿ`mÉŖX_ō’áĩ.†Æ{HÛ"$)†ÅLŦ‘.¯%¸ĸâ]bx†üT~'5ʐũÚ829Öˇ?oÛÜԝ¸ĘŗxęŋX¯4š Ž*ãČBųņĢ–\qŧ6Å:#Žd2ÄqšxŊX8ÎN\‰ŗŸėËãíŠŗíQ؈ĨMŦWd-~ÄĮ6cԒg\qĪ”ĢÔäÂUƒä)΍59¸‘FÄÛÜÔ}¸ĸhBĩô<eĻû† ęå4'Emōá˜4bŒ`WĖB9_ļ+ąz-°XžÅbmy1[dV!žk8ärÆôYŦī(ž<Ķ›”lyĀ’…­x@xōˆ#Wrĸ qōãäĩ–ō!ŒÄáōQYŦÅķ#xnsW÷á*2äwŠããH(ų‹)V&17Äm<ÉOÅ:âšrĘĩZ Š­¸›ĖÜKŽJ\F.-{ōFšž˜E…äo”ÉŠFh™˜Ū¨¨ĩâȕXΝ¸ƒ /ˇōÚËÄ8¯WĄXšDã%*Ŗãˆmģp%ÆR žn¨Đ.\ÉUKĖ•#WmÅ9ŽWb™"ė(3ˆG윃"‘8FL$KˆϘNR¤ ^|ĖhTD†˜r>ŖĶ‚|`đ3WŽŧ?ūË#O\›…7ā‘X2æ9(Ö(! ŗå"!Öm“áRĘ\s°8 ëī?aWī˙8„ĀŽ˙/ŽęC›S(sÕ^5øß@Ģ63ü˙…~ŸA=WęčšRGĪ•:zŽÔŅsĨŽGåĒŸ_ėˇr3˜Í…(>.ųLČážū>=*WŲE I†rk'BĨÜ ŽĐiŖųīôéQšō„ĸ]œą}*7ˇ„v˜‰!~ĖĖ<ü%ąøQšÂ‘´M„öž%W š•ōĸGnfdFĢM‚đ \Q­2äōr2Tfē§%:–ģPæßéԃrUé+Ŋ˙yÖiŊ\‰aĻ˟l˜ë§SʕÜÂÜTķÜWŽX‘ō§!õ_ኑå*Ņ4×vēäJÚWÉ(ƒ,23ąÂ˙… +ãAšÂ!÷B@ˆÂ×q%í1ō§Fhō§ģC8 ÖģåjSōũFŸ—ûō$‹ōgŗgņ#ŪlZan]rZ¤uö˜\I4i ˙4åt’6Ėûããį+°-gÎCsõ8ßÛmy>Xʛõ*xĐĩũąĀ%ÕëQĪ•č„đ-/{ŽĐã¯ž+uô\ŠŖįJ=WęčšRGĪ•:zŽÔŅsĨŽ_šęũŦžB?ŽÔŅsĨŽž+uܙĢW\Vœū_pV2^eÁΟLz-ŋûæīīQōGŊĸ;ņVäJ\m{HOX¤›ųfķ Æsų˙+øö+°mŖOđé‡w‚fÛâŸ#z%zvîáXŪĀbsŧĢí{voâ ßÔÃķ˙l$~‚@ôØĮãå}xú…äĀyŖü|˜ķūŗW`įôŠāĀ‘øv`lc¤xÚņrÁ|!|/(rĩ9}ķôS|ōĮ¯E\ÂįPüx aĮ D°É%Ļ>OŪFĐáp™+Įû{ īx3Ū÷īnë•nņₛDpi0!ßr^īŌt>_žûøĄ¸ ÁMîÃÕčšRGĪ•:zŽÔņP\=ĘÚū‰ĢŦįJYnŌsĨŽž+uô\ŠŖįJ˙ŽÜūšÕãĶĩ=ãc’CžãĒōHfOvåŧvĘÕPü‘PsįOĸuš{G×{ތ,ž™ėÂõ€O‰V ^Ņ(ö7äĒBqõLgė<Ā š=Éāˆs yĪ•vb)§ö8×ČT.†BfؕéžGä]“w\Íųšˆĩ=đōøé€ųbĩ¯v|2ŋx ŽųJFnjybæeXŒĢ…\Úˆĸ™cœÕ*ŋŒĢ3ZËW2ÍŦ›ÛRڏ‹_—öĪšú-Ôö¯><3~‘EkãĶëžëŪE=”<-XZR!ĐŲ˛r&žŋ%{Žę˜Ī‰Qiû‹pGr;ũōҧkûoĄ&ˇbáJ<Â>kôîCšŊXrâ•WūUęų¯žö)¸˛Ŧž-øødÂ˙ÄXüŧĪ,Ëŋžŧpü×ĪÆķ øä˛ķy:—?Ū"Mˇĸ›‡÷pv¸8ßĢũ‰ ĒĖ•×ŌF˙“ < .ĖΏõ6úO‡Įü=6‹W‹ŊüŌΆđCZl‹í'cņî¸ ҃"}õ[9ŽûWߕņÛmŲׯų3ūŒūgĸ<:=9ŪĖ7ĘF˙˙CĪ•:zŽÔŅsĨŽž+uô\ŠŖįJ=WęčšRGĪ•:zŽÔŅsĨŽž+u< W-Ęüņ PUŽčąg÷)Áœâ!´ÕT#Đ&sŋĒ\UĄütËĨžDĻņlė|Ü0} NõMAŪģÍUŸ \mʨ8š=:ÆÁæŅzZjėĀ\Ĩ ¨Iâ}ÜvpUiVÅwŋNÜĶ>ą­ū}j@ø-*иō7íė8‚ĢzfDÕ#xŋí÷ÔĩMĖA¸;üg~N_ŖÖ\eļäJģCæfŸG%ÔŊ”Z° %QÒ¸:yË98Ų&Šy[#'  ĒĀį™MI5ø¸ōÆrxpņg8C™+„VȘÖ#Oë~\Ĩœā™Ŋ Ŗ_ÍãŋAōÁu ‹Ęč\ŅšōĒŋT_9i<ŠÜūĐsĨŽž+uô\Šã¸ĸķˇ:ęŠ8U`‡‚ŨĻûĢruNGzDØÍlĐ͜G.kĄã$&›’]}°}‰îe†ĩ2ØYr™™ƒeQ§Ū„jVŌ^ĮĄv8ŗÉN+Wj@ŋÅÎJ>÷¤ûē…ËK8WEũ¤|lZë8!¯Æ&ž™x:ŌŖŪéčÂn2†í3Ô˛š:\‰‡D’1Ķl>āĒÁ†Ít„†Í;­¨URãĀa{}‚Ģr÷ŊƒøF×#‹~š}†gÃg†sXģ}§\9cUĀtįÚĨV îD)€‘áë¸:Y”šr‚(0ŧŠåM]ÛÛtĘU‚F9LĢ_:ĮĮ*õ `@5>j”ÁeŊb§M?eÛDāėƒg/(›qšŗN÷ûX*ˇ`M„|õ]°į¯˜Õû]##ģlŠN{90YīũsQ¯ōUq’”a\ĩ*MūķQŽãņtœ‡Gq ōWĪ• ZÛ{pĻZKčuë˜ÜĨ¨ãė`ŨĄÅŖķŒ"û)ru1i°ûÔĀM¸-õC€Ē<˜H6Ŋ|{ßvÆã…jl¸ä*-YĘL––‡´_éĐL•´É,ˇ3“‚šė/fãM Z¯N6úOĖ ģģžXWæŗ[ĨL<8ĨJc1ØčÍÚíÉ^’ąnO-s?ŗœÆZO‡]rU!8W6´…ā ĻuN?ž…pe°=1Ûr¨åyCŗCŽ8<:¯œ:ŽŽ|”šŲv`īGώ\™Z>2^Ķb܎h]Ûžhļ?rŊē)s…Ѝ$Æ˛Æb\!W–Aī Xf ÷EAûíoĪū Tšb§ Ú/ŲÉT_Üjšm.3ũ\Ûczš]=WęčšRGĪ•:ū>WG‰’Ĩ°e÷¯x)ÛčÃ;u`gĘá éƒé0?š3 ā€Î—ėʏ\YžēfZ…| ßä+M íŖE¤jEØâ ā"md-môŌĐkĮk;Ŧ52ŠÃՏZė9}fM°VF$ųÂŅū+7?@ ļĖ\ˇ´Ņ ޞˆff2uĖōŗĄ“a.Đ_uéČ՛o‰r_äaũŠ+ųm@¸j\^‘Ÿ¸Šl#*ŒüČpMī—ū gŽ€Ž2Ô[,,ĘUߞΰxž2Ã[2Ũ3ŗį J!&ī¯pæ ļP×q6ļĻjÉdQĖJz™7įĖNĘ\éA˜b\yžU™ŲS5ĐÅ{Pg?Į‰+ ;UŖc s5åÉe,ėN#XŨFAŧáËŨ8ĻaC˜?Ąôõ+Č,JœOĩ^p~€5‘~ÛĀ{—m‰ÆÕŋˆ×Œs6ęž+¤ũ¸RÆŲIēįJ=WęPŪC.9åwŌī÷úĪo–āį @ Œ8¸ēYˆŽ#šžZvȚį?ņdh šVR°E‘aŌ:ķ+q ĀcœQ^lų!咍X  ų j1˜QĻ ’ˇX=€ąáI{Ũyå&IŠđVC)2<=×ĖLƒ†Ū~ Ī­‚Ö$*ũ™2Cŋ:ŠĒ=WËĪR̚˛ą¨Â¨´ŗxú}Ķī1ĩŧPšĶŠŲ‚+X†[ī_e[cpäĘÍļØŦBÛI@W˙Ka ŖNÂug ‰žˇŒwŽ‡ÛŒDVļ°Ēš™l&ļW…žÅ]dMą7f‘ƒnœę›cp`–‚EË8zņ5F$ +1Ž–m^ë9e¤‹9˜k1p?ŋ’E"ā—ZæH‘îŪ\ū'äŦaRJ.möŦ›mw°øÁ ¸pÅÁrN3ūøž…ÜÎp'?Đ?tE´Ņqū˜qŽ+[QGčõAuô\ŠãA¸bşš×7@yŋŊûŦWī‘!°ƒÂ­H;Xēžër­môŨ"Ų‚Į•ˇ"ÃŽ-ÛŽęrÃüIãČõeųÎÕ3ė_ŋœ'°ž—ÔÉ4wôČŋĮ‹lđŗÖI įôe[ĸWI1žGDÎŽ€æĖ„š_đa3ũĸEĩâ*![<A×SÆũ ŽrXÂ×Wß(Wz?ÛŲ@÷f÷˜ƒ‰ ‚€ĪZŧ€mü\žƒ@ލíė1•kû=$!:†ëĪāíĢĩƒđjŖŋąVãĪ,|āžIú'šj‰ž+uô\ŅsĨeŽĘץxį ›ÃŸƒ-úŅŽë—-GåX×g‹Ņđ\h‘lx k’_ōÖBeQTfÆ1‚ŒÃË7“}`$˛EÁąáĖH@M‚‹}ĖU5r3´4ŧ]ˆÅ[Dŧ_Ģ…ˇ„ĪÁ9Jp1#0/úm[ŨŲqA>ˇüũ™õDßšŗÕ¤ģˆįÄs÷“áČá¯6z(W#ÃėĨË|•õd@­ ģÛq sp=ƒįogQ:Ü#§ā}ė:IjÚtĸõÄ –žÍĻĢåYÁhFā­Z:é—U;}°v“x`3Â##ZOLja™˙ƒ@Žũ$`GρķÉ0 ægˇWŒĐrË„.xI ņ˛Ü§åĄŗú/×ét°7Ú&ÚĘ ˙4zŽÔŅsĨŽž+uô\ŠŖįJ=WęčšRGĪ•:zŽÔŅsĨŽ˙+Wķ;œķ˙ĘÕ=ãũ_šēXĪ•2 6¯ũ¸ įJÂ•4É÷Ētß ~}:o>šZjŌI?"­Ä(ÖĒmgë )á{åÜ; Šũxwq/rÕ ˛ē˜ŅOMĢNė]ĖČb§āQ ˛yŅ9Nu ÔéšLSļ;yaį’5 ĖU˜č=ŠĩxĨļî + æÕûļUėĖ˂íƒ>5aÊá°ļ”mô~˜o™ÕŌFß8ŽīTc3Z›új¨'ĪN5„–˙AžË#˜ ›MÎkÁ•rÉÂ*ĖdJņvļÔÆ2NƒMŸŦÆ´^bŋŠ“.ÜdĀZ4?ëŽčč'S‡ ){.Uaĩ]üĄōU3–“=›>[œ¸ :â*Šų˛ąæĀ„}Y uz‘÷Ę.UȘU$äøĖ••„N‰oŲŪâ8Ž °ģÆ' (ˆ16Ž"1#ØÃĨv›QĻÚ¤ _f#ũŧļCšb¤)S,iPîÆ r&ŖH+:˯´¨ŋô/ę˜| Ē_œûqSēâō‹•_†ÄũŠäL-žÂkāãāęAÚŊÜūYņOîÉ´E¯ĒŖįJ-¸ú˙­DŠ€ÛčéŨR°FdËBĪg“6ŪŽ GįšīZÆÄ5ˆŨ™Ŋĩ,…ô1č&’ž"Ĩ 5:=‚^‡AbCTúQ;;NƒÂLođhj޴Ұ §ÚŲ(ôēk9&SX.‹&ŽĘŧ'S[€Xvę•ËŗžîÔcÃ[:;ËŦGz2q }o^Ĩ8o?!4W˜Ī°6ÚX Éņß{(¯W–a 2|fPÁÕĄpŒuĄéŪd Œ oĖÆs%Ô"W×ŲÕugĪ ˛‰éķA-š2öņ˜ĩž}Áb62 ųúŧ¸BĀĮ€ēžKŽŽgŦúžŒĐ3Ûđy„eŊíÅ>ąˇpö3d$ņA7^ë)+`Â0w‘¤ÄįEē^âčįÛ§skŋ(÷ ž'û˛›mä𝝒ģv3če†<v|´{žŊG"H(Z g Īl q‹ŨųŸ“ß{}P=WęčšRÔF˙ˤ2+â!¸ŸÃ¨w^6Ųë k;}ŗŅwŽģSvōUČ#@/´¸2\æg™Ŧĸ8Ķ،4cžž°)seXž=Ņa¨ī†Úzo5Īāre_Aܰ¤ˇPí qôeõƒŗo-x\Yƒ“ ĶįL($žN­uĩ÷Įė’ŸÃ°U!¸h`†ĶΖ*øąœlųėŗgŖļžŖÔz ˙ųˆ7ĀĸoB„ÆŅ¯Qˇ™}É9pū@+éߎ™yx‰đAË; ĮÁÎ$q`;­r{6Ą¸´Ņˇ&ZÎANhYđxT—t!ä6lĶU`\LÖÁøûãŪAŒ+OûÉ`Ŗ÷,bü5ŸívfōOĐÂĨđēąę•Îŋ{į{ô\ŠŖįJ=WęûĒÍ9ûø¨ę°Bũ–3˜ĪöŸÁåQ×ɕž;Žv:Ī´1ĩízĄ5L0ņđé7œĢđEc3˛Ÿ”ë`ũLÉ&(›qŲĸĻĪV:ŸāŪVœ‹Ë}%€^`’ĩÔq4+ą+ĮL3 ,Ī×Ŋ‹§Ž7 íÛíõøĻP…<úˇ‡ã™ū}~¯Žã˜žŸ9FR|føBåYģ5ąojŪÍūŖŽ˜ƒđšsđĘrĀĐ{zVâā\ųϟĪ‚+ûÄÕFrĨĪzpķÂåp<9lĮëØBƒM2?į*ąüėYŽĢhcž¸r¨e¯­ 6:2dÚ¨×Xo€fũÁ%_ßųŊ˛Ė0ĒãyƒG9ŪĄxÎÂz.Ø(×Č žįv ‡'āį WÎŊ÷ŠÆ\…ã“–sđcĢ7tbŪ)ÛČW;øuĨ{/Úų?)ˇˇÍ×wūũOqÕ=WęčšR˜+šˆŗŸaKī -×vĻ•T¯Ī^U‰7]a]ō=ėlō[ƒ_b)gvœë¯;B]wŽk–L¨6'9Áå›/ģ…:{„Ŋo×XžjĮzŖ?ąŅkÕŖĩëi{¤¸ŗZôŧF„ÂōõQĘ@Yāu˜ 0Œ4[Ë9g€seX‘ũ2ˇĸu8Næf˛›įžÄ4!Ų45‘āöAc8ē!ÜÖîė8~ļrÅôĐÜĘĻngs ņJĨā hpįrߝmÍŗg:œĢČô%Cë‘!cÖ.0Ōá7§FHGĨ„š*aĘ?ĻøS˙~Ų€[rÅŦĖõŗTĮ둆įîËBģ—‰"Y9l×  ¨Á]ÜCœĢ÷šŌ'~Ë9x´ŅĶrŗ(Ęũŧ ōUwքŧä ĩ¨b†Ā_hÖÁd^Ū~¸ÜÎÚÅô6ú{ŖįJ=WęčšRGĪ•:zŽÔŅsĨŽž+uô\ŠŖįJ=WęčšRGĪ•:zŽÔŅsĨŽž+uô\ŠŖ•ū^yT´ĩŅŖ’iīÍōMwYŲ‚īg`KG'Šã‹¤Ĩžmô¯LrՑ#ČJį‘ĩ°ŅK;ã¤e>däžHũ0׈§īâU3P<‚æUøk mԘđxg`vÆ˛e,3ŦÄ~™›ãhĸŠÚÅŅ33s§/3]ŧ‰Lš‰÷Ļ;zæ€ũŌ?Ã§āqUģâGT6yx­môŦ<°rĶ9ß§|“2r`3"ūAŽūÆ|§ĩ0¸Ã*`ëUĶ2~đŪ€ K-lôV[ö‚Gãę‘ŅsĨŽž+uô\­ 0įü^šîYņˆ{‡ˇPrh]DšŽō]Ŗ8ę8ŗ%›Ã‚âåžÄāŗÍpi_äl0WaĨņ Ąķeŗ ķ’Â3 ~ §āū$‹ÖēFu`ú-/ŠE .‡—ŖĄ\iVĻÕēūĸ뙞ŲVâwļÅô1wh  ˛ÄĖÁ IDATŽŖƒ û˛døČĪ<ã—úÕĐzĖŨ9ޞxšÅ>3ŧ<đũĢS#/ôfĀØpŋŅ€-ǰv!ĄYé´Ũŋ2§ƒiFŽ\‡ØÄ üËÆÚks4ĻН ¨IRRS/+[ī_™‰5­&ū‹ä*:˜ŪÆū%ĩĩî3DB=8öKˆÃ7H–¤tÎÅ ZÄ҇kŠFUŧÎKņԂ>¸~ŒcXSĪ,št\ÅÍŌ$įĢáéÕmqôÅ/ĩÚoĐ‚5õr„ ]¯b dšā‡ËíEļãHųŠ´ēØįęĸįJ=Węčšúms¤0ģŧ.+ÜĄ0ĘY‡v!joŖŋė34gpØUŸrƒ'Ŧ2 î4>h+ˇ#ˇŌÕö0Ō)íėØĖ힛˙]pĪüUÅ%ö… õArõžfbWĪv6 ęQļ0Wë'3šëŨĶ‹˛Ûw  žŨ`Ŗ÷Nēs&e‘#ˌ˜Ų"‡ú'0Ā_š †sŦvW@lô'ŽĸÚMĘ-Ū[ƒ¤;Žā6újŽąäŠYWŠ6ú'¯vô—8jĖ—ĀÄ^‡ãĒMnà à îĀq…¯2M*ËW[*ō1-lĖ‚x7Ž—{ž¤tõ/0Ę0øÆ¯EšēŪžY´lĩm7¸ŗ~ŪËíô\}ũŨsĸįę~ë%Üs‡2W‹ļŪK?ģ–ųd"¯nšwØhl°˛DáÕc€=ˇũī6zĄŦĻ„ČnČŌb+‹ųĨX‹RVŧ1. ƒõÁIđ<ĀËŽ+~Clô¸ŅŒJĶ#-ą&mŅËÜ} iIéŽßXS‰ؤåÍcOmũ #Š„‚S…ĶÚÍ Ŗz6Ģ‘ŅŪ|”­ŨU߸›ŦŠĮeTtÚJ+=āpúTˇåĘwĸŒ$šĐÃŦ0ĢąU›V­Ų÷eōføéõ¯ˆā›;>tŨĖbĐ7ÂŦsŦœĢČĒĨ_ÅIsäj"ƕE­\p%ÆUqŖ灇_Ôāî%†ÔŖ*Ŋ×֟ĄrW™YQ-/‡učá­ÅÄzåV[MįŪmĮČĻžžÆ&ÔFŸ‹ī+™V˛pZ6į ´đo7ĸ<ž6kKŽĢ]&Ģ0[tÂÕan°žĮ…‡`Q.ĩÆ!i,ĩŦΌʊjeŽå$ 4´ŅņĄ ޘą{ō`6úēĖļ[XŲ…ĻĖ$KÁ‹6ē„:uᭌŖŸ§lLļ”l–ô9*×Kwa¤÷ÚčĢŪ×öę9:h’ĻäÕFŋ™ךļr{ŖƒKp~ ļŅ3•(4vË]66'ōWkX(éīƒņÖB!{&ōW¯*`ŋ ōWĪ•čÉKēįJ‡Ķ/@ũūn}yD0ŸäŊëŧĖlôÉŨļü’ŊYɊ< Eí<ĩ­Į›”›xĪ—Œė—´lŠyĘ7ÔÕ¯@QYÁ1/¤pÛ÷.ņMa-Úî3čF´×õ,Õlj†“0É5´×ēÉØá’Âlf Ž9ĢíĖ€č΍ËÛÆđQ”;Z5F ™y›';‹…z Ŗũž˜ŨlBɛ†›$ (į@|qÅmĄ ]0hĐšˇÕMĄ]e k Ē{K0W!Hž@/søĨRœ+ŠōĄÍĐ^§fD<ˇâ|ŧÃĪA12ZŒ+ ļDØ$Ģ%ΝJO¤)Ë Ī|ĘđlČą]&„Úø€áĄVŸBLe W/1oąÃŅļ+{œÖéĸŊ͋ÉäÕČīlĪŊ)ĄÂ› žV6Čiĩf°ÅɲĨܞÍ2(Ūh~Ú/#=ŲöÛë8˙NUlÆnW˙$zŽÔĄÎ\ũúŲëaKÛ_ŗD×!Ī/ŸĖ:éŌ~)žÉ¯‡Á.Ŧ‘{ąī‚š˛ °˛vy&ŲesāÖĀį`&3ˆmbƙ?ák`ÖęÍ’ī•›`÷%ĩę–\1“Wą§×ÃavĀà ›ngžL†åÔmô*́&4#ēĻ•Ģ6Ų…ŦyJÎĸ6ŧn8¯Üq´CaļÚŲÄÎŨl2°ˆ”k×hwWÖ$ÚķlW“ÕÁÚŠĘĸMČŖŅāėÔf\…ZŖRŒ+-#~Tv29E„Ą0ōĖ'%ßi• ĩĻėŠ"¸ĸĻvŽb¯WN‘lĖd­šY>ōWIG\•š[R“ŽŅ˂Ģ\cÁ¸z;CŲđ\‡yaΝ–vįéTÃ롑ít9Žr§“9ØXģ‘AMOQRJƒû!ÍÁ,ÎÖOĘĶļ–ĪAŪrrļ!Į ÷éĪĶĻLYĐIĘ_†‰P˜@´Ë¤|™D›!l_T4Ų̇;1qŗ¯ķõaâRŲ1ē$_åBq×ÖAÂ1ōĄ×Îŗîa¸jų<”mŖD8W=WęčšRGĪ•:zŽÔŅsĨŽž+u\’Íô\}h]€=WęčšRGŋļĢŖįJ=WęčšRGĪ•:ā\ũsôoqôį÷Ę\å菧AųÛxËŗ}°ÔmôéŅÎ{¯+*sü† &-ö9¸Éđ’ŋ}ķeĪâŠ^KĐ¯ėxįĐu‡Dį°žŗ3 640Xž>^Fį)9ū‚؝'F4ęų؊fÖtÖYM=^čŧ  œâûj,X /—ŲÅ`>Ļ—Ä—2}Ŗ„ĢąÅ2¤Õ؜2k‡Ÿ —ũ=pŽû,Ŧb°ĶvƒōõŊ…Ũš÷“,Ŧ&›Ėŗ…ä ¯Ÿ@—ũ-ÄÔØÃ’Đeá œĢ,ޟ ĮĪšîYôol™7cíčY ¸2íigĩ%W3`ųs1ŽBpęHč¸jũdŗc>–Ų¤OR>Ų :ŠĘq:ĩÎŖļļg‚)˜O—ųú`KÜ%GĀCÉíKNj‘…LŨņėÚ6_ßų÷Cp°ņ-ķõũpŽū(zŽÔŅsĨ¸¯Z˸Ÿ‹ƒŒ<ĖUÔE ĩĪAĮœÁĢŪLã´m,€ÛÉ>-÷„ļŠtÅģ9ŋũ+"&6X´ŨÃs,Bžƒ æų ą /5-ĶŠ=”ZIčzú%‚Æ˛áU”4* S ’Ų`іsPÆV63ŧ$ļkw–LŒČ‚'˙ĩk\âû•A-pâ:„Čí+n´ôŲ–ãjöôhvF‚Úōp œŽTÂhkđčûÃ>āØÁ H\1Ô6Ā^x#™[‰äjddabyma5†ĐžĄãĒ6aūíqŋ–ņ8|‡†|Š—XĪIи…•ÛMQKÎŊeéĐųÜXĀÍ(č>ÃZꊹã°aBÎ[ÖTÖ8īč1(ŖEā5õ(<ĩi ¸ •ÜܯVEQ”-,j|ŋßÖ˙ŦãÜŨŽķÚėüûsõĮĐs‡:W˙NîŠ Ž§,HføĮ_ÉÚYô¸Y ^WƎÜéÄ7`Õ:WYÚNŽˆ7¤ūų<ŗŲ’Î'ô ‡Đ;¸ÖM ܒ+z´Ņ'ĪúŪôv†ˇ8/ŊrėĒ›ŧČ œ+XÕ jDt|Ûq%š˛dÅŗ0[ģÉÁ֒2HH’‡Yģt $]ø 0W,ž*šūŨņ-šâžm߸Z d }ÖW60É??Ļ ˇWGŊāJßxį&ų@{qô—gģę†+ŒĀ˝ķõ °ķŠæŠÎbS2#ŗ wÔ7Cņ°!ų÷m畁Wę\Á–ĢW-ęvšũeÜÕļ¨DC -ā\5ZģŠEˇsEƒîŧ?ڀ/ß>iuĨķī^ü,…Õķú§ą9i+=W_ãRû“ošXéŒŧ?ÍŖ™‰ī|1'Ļ@Ž>ÚčáĨ̇-?¤poĒģ#ŊäēßšŌyB6„mJēātÛXŦģ›Ûé<Ō€5ĒĘ6ŽgPëëkūöĶ“bw~ÖôÜļ<ŧÅxo%¸3‘aĨus(eRDāuĻėjYßYr5ÖQņŦ­†V5ļÖĢî‚WH¤^XĀžĩ¨Ļ^{Ũ™™üeëbkv`UiĨ‡\÷ˇĐO‰ū¨Â V\^"úl7áé7XÅ ŧÚI:tvc+{ļ´.Ē靡ƒ "Tmâ&2‹¨Z֐1q5%ˆxÚŪ…–˙ût΀Yķŗ°†Įä1lÚŌÖēsq”ĒŠŖąžä%Ûv'b9`$ Š ŪŦGĐFG‰ <ų4ÅßkģķīGá ŽûĮZž6;˙ūš\ũ9ô\ŠŖŖ˙ė™áí ;ëĐ#okĮąSī͑¯éNļ:C9[øîž-´n¯ãdKéėB2ëīŖIqQR |%w.}ĸ­uÛNõvfÉ_AMАŒŖĪŒ0āîāN\õãë’ŋ3‡æēJŅžÜ›­´ļ|Ķ.ĖúWˆ9Xf¤€%*Ŧâ,úËQžČKKG¨‘ÛŲō8Æa6úÚĀ%pĪāåŲĢ–Nc?[Į™Nø6°)r¯ ĶûlĢŖįJ=WęčšRGĪ•:zŽÔŅsĨzļ}õ\) ˇM¨ã< {Žp65ô\)ā[ę?‡ž+Uô2ƒ:zŽÔņrˇl*sÕÂ-åÁæĘ>᠃ú~0ôIt抟ŋ›eôž˜_3 rüĨžŋ}oå%ųÎŌÁz6æ fDūC¸¤šÆã0ã` ‘LęŽĐh؄+­äÔʝŊģģÕ\ŸiWėß^[>Øō äj˙z6I÷‡šę¸’ĪYĢ›ÍK:ŗčœČrĨ,Ū˛ƒ.Ŋ‚ĪclS#ö‰oėQž÷‹6r;í:ķΆ¯}đô¸û¸úēUWīņūí‚a(hxĶ˙!}đfô\) Ŗ˙¯ABPŽ|į˙Ģ$äō(€ęƒZĐe‰—į^ŧn˙?Ļmš2¸Nƒ˛ķŨ’oŨlįü°8leūøâÆ­­ ģ9XXb[xĐ 0+m=Ž|3 Ŧ(Zjx§ë™ŽpˆąĻ Q~*ķū ĻԌ ¨ÆB10m]D qôíš LŪxīîŗ8ĘH@Ÿ›ėÜlņķ4˙¤S–Ãpä$Ėa´A1ĩ€5õZĪAføÜØã+:) ­Sk@Ũ,_æOmŨ{/ČB‡ÃK¨ÁØŊfæ”ßž+îDs3HžÍ(Ÿø/ŽÖnļš•+Ļ ÎPŨ–„mãĐđü*3LøŦļã•FÔ¯/ē¨-Ÿģ? ™?1/ã č/Ęôƒ)ų-ģŪ@–qô;Úē?Ļ›­~ %Ž+ĻmË …+ÍŽp˜kd؄u÷—œá¸Šßl6ákXâzšsˇ”áķĐRģˆųį}å9¸B“ŨÆrr׌RsĩļėŦî~†ƒÁkSXްj€ÁQÄŲSŖ„Q›ŽâË BŸƒÅAĪ‘i6Ž h˜#+I덝_@(š‰+aę`S&,Ąœ(O ¤ŊOGËļ~2záDkpâ*ÚX™ž€Õ’OOl0=™@U᯿ 6ލár W‰?A—`č¸ō™`+BOÃDžU›/¤7\aŅ)0W%…ÖĖŌ'^‚õ‡īÉų5”ĢcV˛ŲģÛß6ã˜ÅŨxô‰9(ˇK s0[˜—\„ĩ´§­;ĄÜuW%õ‚S=ė™Z ŖÔ€!=ŦŧeMŊ–\u›Ķ°5˜7āS`ō=ęB÷Û_ņķãqāKÛ ŪgžĖÕŸÃĄ}Ρ7Í`äjįų‹ÎbYr•>šúÖ=pĄ_tč¸Âž) Jl텈é°W‡tKĶGÛōĄh˙td΂–ēÜΟ“ĄtųŪŊũ’•: xļ‘@˟‹‡Ķ}Ų­ŧƒyQRK`ü vĘh(Ķöņ—­fW ÔĄ EMVÂŦ}̐~ôōÛ&„ī-ĻIé]R‹Aå+ęBŧ–nč/d†ķE—ųÛ+híŖ8äL§(fŒFEÛ}† wWB#Ą/ ŊcŽĩöÉ´Ņ ™}¸ČÆÛꗱå Īõ—‰X[øenyŨreCC€–jņMƒ4Č\&Ų:ĘÕΞԆt+U[līŌũļĨú ŧqÁ4*ĘÕ;´ĩy1~ŗMū͈CÖ.ØYũ/pu'%ąŧÁmô­šÚüčœB Ū›I^}ā„ÃâØđ‡rõ‡q8€zŽžFķj";ƃrąž_uŨ§‡ŧÖ¨âÅI[ØčGįxúūcxĐņAĨŗáęüē<€¸bz1ČO˛Y$ëŌįG8Lų4ö„ų€Ôęb\•ĶŠ×X–Ūiģ::āĄIsmkÛÄŗoץ“…Y an¯ë €U“×15ŧ }`š_ÂãĢ(ŸxŲķČ^´Ũ“ˇš]Ųņæ$[¤ß÷†FĮE‹Šo4Ŋą!V(‡ŋ֜†rĩĨú…ĢŒ$;m‰eR+€JܟŲV¤ĸ}š8+Ąšîã¨ŠÛˇ/ß”+ģp^B!ĪÕąŸ…Ņ~c8‡‰Ņ W6D$‚ĩņ¯ž1 `.ņúē˙åj…†ĩ.ôŠĩfŧˆĄāīvÁ•/+“& &É0 ą`›dś$X”‰d¤í Ô "ÃéĮ…>į)ø4}$0ĢėÎ=ÂĄÕ"#đ&Ų+ ūWŸ ƒ!u:O@XzœÖzʁ.EĩQ@7É^Ņ…Ũų¯žj!­ä°ĢįHģ–—”ņĪå-Úŗ˙WˇCĢ˙ŋĨų¯˛č€:qgmąë˛? ~|¯.‹nΒõļ÷ã8đũš{į`ž_€åö˛ v¸ļãERøā3ū÷hĪmp|y g*`“&üø^]n×&ųØōæÖ Ųœ6ųõžDų[n<5$!÷āEu„_šËí{­ÆĻĪ,')l-)ģôŧˆ šģÔÜAĨpjŽäøÖãĘá~˛8q•íΚĒĩ[ģāúŲõ–ÕŦõ¸Šl#ķÍ)3ƒ$hÎAÉÔF/¸ĢX4,å2c÷@û Ô–į˂“bĪ‚y§k;J°Ūm\W.P‡ŧā‘lŠ+Ά°r‚3Ę5îĩtŠˆâ¸‚C,%¤đâLÔĩ|ŸÍ—šÁMÚæ ˙Ųõ˙ zŽžÆô*´[™Ģæh[;\ŪžŽæļqj\ÎāøÁcēםÅ×íņ,ėÄŋá$šđ*PO]wæ)›‘HJYōŸ#„ŽÃ–Ĩ<ÚvQŊ˜ĸĮKePÅmšŠtR9fX‘īŠNe›‘™ā ũĖ?Eļįtj‘bzߞ+6Ķ3˛:Ž#ūQĄ–‹išYYIë˙÷˜‚s…1V^z_ģ¯~2§_Ę\Íš—.¸˙ ŽøŒGūSļ˙~ljāēs‚tǎõũđÆZölŽĻËßYNļˏŊ{ú[ãĒÁēķKÜņS:x“;coÖöUŧē:W[ViÃĒđU9cáÚ)§Ī4åx÷ˇēņgļUkÅ×ufVƕŊ4G~–ũj‚ön°Z~Xū4´ŊĮ̰î’7āâۂ^h °Ņ3Ģ ¯’ŽĢÛčŠW…IļĩhĶx…&ÚäEą?Ōŧ[ũl÷fF@Éî3ÚęĢxjlôĖĒ'WĻ uߏ"ÉW+âh† =76šÚ|iĖÔ{đÅšÍJŘ0’Íá6zŅJũ[eÖ/ž;Ę\eHã*ßč¸ô kŪØđ“ĀôgŽ~kõ‚9|+ĸĀũvgN!žĩņ/ĪuųjS˛ō@ų&åž z9›Đ Ū;åV71ŦļNž…­WÕ´áę6WąGÛk4‚Ö‰ķ…Ûč)iiŖ?ã¸:Ļ3MÁZ JėÕˇ­Át~”ė ˜Kę\ágrõ‡Đzm˙ĮĀHcˇÕ}üž¸Ė쌊ĻČu„Ęĸךy•šJņûĸ2Įnw(Žüہū•õVŗø õ9čķĻL‡ė„*6ŠÃũmëä{´î6úe@¨s5åq„jáD ÃÛšū­Ōú’¨NŲN•AÉģ0U° ŸYŋ¸ûĒs Ž‚Ė),ļsŗ™ģöBåë~×-fŧŒ ¨‰įō.ļÛ×Ų)~ÁÕęę#uŽ<.‹…OGæ‰+'QŋîwˆŦL‡ųÖÎ\žiq ¨ą.¸zÕŨĀļTW= Îsp¤wČÕaĐ˜—|ã3™CP:™ûË$WįęĀŲlA˛sĄ5ĮëîĸçeP# ÚqucrŗGEsÛŦs°Wms’Ÿņ\qņxÚP y×pŽ )߯đ\ÁAC΁i ¸œė7]ô‡rõgŅį ûtvąBšJåôąáæ1ę5Ūˍƒ‹î|ægđJút|Aĩ.‚vņĻ;§@Ž2RÅ͂§ jÕVÉĘĸdä–<”ī „ļ&€īrŪų3¯/M ŦŠWģņŧ…†Sc:ąšŲZŖÁs›}‚ll6AËT/wÃøųMw–š:‡Ø-ŸoĸgĢtIތÚLöVŪ…đ>•)°ač°MI‚ŠēYŸé6y՝p\qĮäö‘+‹šVãšĩfīŨĒ Žĸ†Ēš.3"Á õšÅĖÖË7ģ'4÷Nbq'“\ékËČG&ĩō}Ûä[Q# ZqĘwxžĩõph˛ā×%0Ôš+ŨĘ^†õÖÖâH ‡Ü͚ƕ]XÕ:rؘ_Z!)ŗ~ĨõY”•mŒ's˜äáeŦm š9žuēËU@n§v ŦŗĶh`¨BøāĒ Ä šŅ3íįû~´Aú.—2v-mO?ŋũŨņę՜4`eŽ ņÄ:ëÛ&aßlŌŧęŊėä8ĒîYFä”Kˆ=^Z¯; 1ķíĢū4Ũē3WrXL¨ÎÃî’Æ ôŨhá"7“ōō eĀ9X…wÖhV†ļHËŅj{ĀüaMf,ŧĄOÆ.éÃŲčgĪī¸:Irę9îpØ,Œhŗĩ˛­Qŧj†^âÍ-æ‘Üæ5._&ø DĖIDAT jlļÛčÅāŨĢK¯Ėtĸōuą9M"õ}ûV­šļĩĒĨYihf[ŅĄ„>_ÃķģĖĘˆ’Ķčcží8QĖ[HiÉĸ­Ī6Į$qŗ‰ąÉ'V%ĮÕēŗõ(âö3¸üÁšJJHŨŒJž†qEqXģ­ŗ6ˆ|üHĢ5¯â ,Æąˇš-ÆÕÆĀĨG´ī˙Ķ͏iá5ŌĄUĂ+¸ Տßū”EKÎ ^2ņ<<VŊŨ÷TfņšĒBĐzՌĩĨVbŪf)øûrû‘+Ēé6Ŧŗ Ė߃Są}ĀßįŠ˙ÁrĐÕè„ú3ˆdđ)z­2ĪÛčÅÄ Áû†P},´Đ8'øÛáûŖ’ķCšē?XYŊÆÄÛ͚¸JƜTä>ũz8Pį.]_ô–ŌĒНŊë|æ˙_Tcwęōš\ŪĪKŌwEņh˟×6ŲÁƒ“î›;›4vĖixûųēC6'Ô}įŗŨlļqՌŦaP?;IaEË‚Z^ÛÛXŌŽ“‚īŋiŽāęĪ6Ë9DwÖÂ`Hąū2“5ą÷t{˜ėŒÁ‘Đ }uŽ(28đĀ—BVúõ'ÔļЍ°W×JĀg;NŦjä2`–ŗéÂ8ŋ:ēIŠCõũĢ*ôxŽ3}­žT9F5°Ų\5Ö#ĄŸÕĀÄM”™[9:׸ĪŦhv›KīšK'ŽŒ’gČ^ߔûvķpØq§)#Ž\>ķCž‹e;A+™|œÍˇbdx܌ģX3d×>80?AH} RƒZNãBBÁk­Ģ×Ŗ§ŸzƒeŅ.- oÂġ’Ād`\%aåhWyČkXō ­õÁB”W„ÎJ*C0Ôˇw]ÚčŸMĀ3‡7eFĀ•å.W|}°iŅ&Cv)fĶh– ˇÕĐ+ÛÖŖß§Įâęƒ,Må´ ƒû éĖōuË+˟ĘÕBɂ× ‹PūRĪéTîČŲĮôl.û—=HĖ?<ŋf{ظĘHž÷ĒŗsāaSA°{ĢY|˛Ģûl‡ž••ŗp_ĻŅDČ‚ķoҤäņJȌ_W=Q抎†ÃUmčųŒFžīz#wÄUfxŨRôšؐ_[2Ô×và Æ/šÆy!ŗ|fļWŽ!÷>˜?Ãî™oæāĄ)ąZ‡‡öųŧPčÎÅā*ÛĖ tWëU†'  ;séŠīûXhīڒüõˇũ¸ŠâĖ­M§›YėīŸn€ l1¨BW“*†—b֎(‹œæU{ĮŅSN ›Nvåĸ.wŲđuÄãAfkÔ&!ØB*GĒēŗ,“ūnžvŋŊĢGWļĐš:›PđÆ9ôĢĒÛæ { \÷ĩ4.ÁžƒyČË^žeĘ âę¸įVTKK<ލ՞ũ#q†Ü9‡ėˇŸo wü™\ĩÄ/ģÂ0üS\Ũˆž+uô\ŠŖįJ=WęčšRGĪ•ΑŠ=W ؟ŧŌ{ްŸ3Ęô\)€û9ÄWí_ŨÎf˞+5›MØsĨˆMö\Šĸ =Wô\ŠŖįJwæę.5øūx\ŅGsy`Ž=WęčšRGĪ•:zŽÔŅsĨŽž+uô\ŠŖįJ=W*8zõ\Š`wTˇzŽTĀzŽ”qJnØsĨ–J˛zŽTĀsžėšR;lA’ž+Ÿ¨įJ kžīšRÆ<íšRÆŽįJũsP=WęčšR…Ö]ú—‘öēŗ2ö‹Ū_TÛíB°ÕsĨ‚ír3îšRÂ~šH÷=WJ`¤įJ´,zŽ EĪ•:zŽÔņ[ŽÍ ņ/ŖWęčšRGĪ•:úõJũ¸RGĪ•:zŽÔҝWęčĮ•:zŽÔņ;Žú)øũ¸RGĪ•:zŽÔŅsĨŽž+uô\ŠŖįJ/˙­-|DûfUIENDŽB`‚leptonica-1.86.0/prog/table.27.tif000066400000000000000000000624401506303110300165530ustar00rootroot00000000000000II*bd˙˙˙ÎԙîĢU¯Â×Ϗƒ­¨2.+wĨĶÄ˙˙ų^°‡‘ÛŽvW›á„Ö„Žīē‡å´’žDÔâŒÂ›Ė2ņįôpg⍁ „âAÃôĶ ĒxoâáútŸáærĮ‡ü¸°ĨģŅvE~ŌĶōcļT?Ģt7ëî?ŖÁ˙Oųuõϟõ‘Áåž×Į­nIņ_ y7ąxAø°˙Ž-c‹Á ‹bĢV¤W21Ū›´ūĶ´Â 4Ķ!Û,{L-“t-4#7(DD…õčĉ1 "T"č†@g˛ô4[P; ֐í\‚â8˙ū˙ūšoR;lČT)×)ČÎ3Đ3TeO9ņ§d<’dĢ;P38ˆÉŅ/šGjķvĶ´īõ´í2aŲ“ĶM4ĶM;˙‡ûÃë­īßûĢ,r‡āô¤hiš ‰܉‘%NīôāßKšŨĒr œF\3e¨@ČāŠl‚ 3PĖ0i˜ \„‹åÔĖ ¸CųN)ƒ0˙†^6G✌FņNƒ7E8S›#ÄF4Ķ͈Ķîū÷BõšvšÚû,~0A™ÂIú ąî ?d-á‚!ũ›åÅĨ~ņjõqŧ|¸Í Ú­?Ķ“Š˙“zû,|ˆ=鷉o`šIÃ.ȏäĮļņoĸîËw˙_w˙ßÚûĖ%\Ūäc˙¯ëö¯Z÷ē<˙Öŋúũt?˙ū+ī×X‹ÁypKō÷|˜õCũvøėŽ?Uß×q˙ÕzCīZŽđž\}GuūŲ#ŋgǧ¯Čƒúz"UÕĻ"–-ܸ„éˇcųqDßë`ŠromoõŌyį˜ŋÖõ’ĸnEúR+˙°¯RnäĮRocÛBB=BmÄD0ˆGÛqÚ Žâ/ƒˆí8‰œCN/í8ģAÜZÂlŽkGÖÄl¸e ˆâ"5Øâ#ˆ‰cŽ+øßy~úŌûMąRÔ[ąÆė[RÅÖ*>EE‘Â\qrH]5 CĒũŲƒbƒ-Ęroh2ĮA‘G°špĶL…‹TÕ4Ķm4ėwjŨĻ§ŠĶ\Ž Ŋ‘wä(éÚiŦ0B aâ"!‚ΰ3§N¨4΀Šq´ŅPD3ø": )Žg1M4 œ „t‹Íis a°˜L)p™b 3/zDDqQÂÚqę°Â &'cXĒ–…›[ĘëU*:Ä8ÕäLĘvSįjH•˛ Œˆ7β`)R ļˇŨÚv™˛ds5Č4Ķ5™¯#B•I@ō\ėˆd•ņHZvaĻšÖžģöŧzÚi§§§n¨;ŋ}9cßvÁÇ­ßO]ū˙eåŊ':™B< SħG ÍČ„ø‹ĸ'ĖŪSŠtyJyĻ‹ĩ-ú.89aß3k‡øÔĖ{îlĐeÂF!jƒ†Hž™yƒ#ĩ05Sb„Īžl‚ ( ˈp|<Áčã?˜vb#˛ņ™Ĩ„ dxÄpR8|(A’>aŪ_3<ĀL)ą)S×Đk­÷§éĻö›ú§öļtíPĩؤė Đĩ{´"ÂkĄaõBNÕi˙đĩb´Đ–íærīė…ˇƒĸcåŊúŽá叉cÁíŠ1÷­?ovÁ&Gš—¨PÛ_ˇƒ˙ĶûOļíāÜКЖéåŋ§­ū˙é÷ež[÷m'§Ų1á…O&=p‹‚Į&?īu`ž´\>XäĮ˃|„rx˜š!…‡Û“†ŋeÆLô–Į¸Ą˙×ĶTú˙×ūé|/ĨB÷k۝ҝûą¸#}÷I§éõßzežų1Ō-īäpžŋŽ?˙Zõū?­õãë­÷ų}k˙ęĒÆ˙Wõ˙ŪßīŠūŊ¯˙\Gš„Û“úĖîūü߯&>[×ėÄĢūŋ÷|ą÷—ŋ˙ŋķĒëø˙¯ÕrŨ÷ä{ī˙wß§!Į.ž‹ôđ@í Mâã]Úqąh|k&ę4Lz#‹NNúŊĖ;]ŗ˛ßĻžēüąë˙šēã? 4˙¨™ĐNÛ{t…ądpk#…\lZąl[Ä6Ö:cbĸՋ#‚G`„kÅFŽ".iŨßģ´××3˜{×õ!\ˆ:koûnBŠúv/C¨zŌG[Ąņķ:ô.ˆqĐļ"u3aF!š`ˆAHėpNˆ2¨‡djN˛CĻNX&:„áØÚa;]27!u a5˛Y"š7´"ĐˆĐØˆˆˆˆˆˆˆ‰!‹DDD3„(厄D0F›>z’˛$0ˇB,Î]EqqčDDDm8jšĢA‚Ѝˆˆōܙ3"Ŗ)"-Æv†wâ’ŦĨfE9­ÎÂŲĘxį™DJŨ§Ļj™Ēúž°ĖãLfØ@Âgvéî›ēiŋ§Úzß}ũëƒōĮáđĖ9Įāūž Ø7ôž|fĄB l—eĖ$\ĪŖvxŧŽgRBĨŧ¤ԍc9Š?˜ŗMũ’Tw¯—oS°QE n#°ČˇMSMP¸$BôĐoĒ“›2ėžƒ[ 0‚0ƒ2áĐ §Â˜ŒEԕ–åᓑā0¨?>fŒ láNņ}¯î°šNûOĶúB!ÚjŠëŪœp´ĶL¸í8°ƒTā“í8Žę_đüąá“ģsD2Įĩ.!ũb [°Ö+ŋ-ûWúī"Ŋ„ëů§ĢKéë–ø–đvXė0RâŨFīą]oōßTõË„"úöá‚đá„c„Đyc–<8dØbLwíK‡č¸dp¤qĶĶûßÕú˙üĐŋ{˙7!_Uūīû{ė{˙˛Į\ąĮŋŋė}}{Ž‹Ú˙‚ę×øëCūč}úæĖ:ōāŸ—ëãú<ú<Öžžaûõŋ×_Ņ1č›ŋDĮÚéË}›û^˙—DßōŪ¨KyĮŠë˙ũzúúūŋí"nĶ߯ņÁĮGĐ ãLˆĐ‡AąËŠqĢ}Å*a91ÛČŖÂ¯nŸëËŧˇË}É“ɏNŌ ŽžéâäÜXB6"6Ŗí šŌm1""˜‹bĻÅÄDˆ88ĒpŧD6Ö8‹iâ#60†ÅqöČááSĒdcŽ=­ŖF9!íotī"ūF8ÜĮņ ŽâĒãö ÚÚjĶMS$ä68LAš Qg B!…L&ĨĖÎ[„æšdĮNĶ[$9HU{Tí4á…ĩüXBFb""#B"" ĘŲ€„Z !‰žlČæg˜Čđ0™ŸÂazŊL@QcģOa4ÔD˙˙-Â{™}u; š•Dv –PEĪ")‚s%ëSäx ņgQŸ#ėķ*ƒ>fqķ*DhĘvU͚ˆ™‘›)ĖŠ ~)Į; ” QĻĶO{M4ôÂĶ4ƒNÂfÄ4Âg{3 đ˜ •Ģų1˙ŊϝvŽŠ§kk§ÛϟvŊû§ú°t[äß,x:.(¸É–îLq-ŲTĨŽĐ–ėŅoš ëH˜ėŠ´[äAũYc”; ¤yŧ Î g›ûũWWīWOOé<›ŨŅqĒošôš5ŋŊ0ĢÆČK P†\pvšaũŌĄ]˙U_Ė;¯ĩî—ūŊz˙Ú[}ŰųcÚ_mEo÷ +vŽ=Õ×ß}ûVũÕˇ^×÷û@áĀí°Áx`¤Ũüa+ØÁĒØÃÆ–8øãö;øėŽ8p˙˛nà –ãlņņûĨ&ũÂKZ]Ŋ>˙÷īio}{¯đ{ŋÁ?ô^č/"áî‚}æģ;ũŲQ-ĻTYáū‚ų¯Ŧž‰ŋt\$ŊB-õá5ž‹’-ú,}:čˇĢú4Bq žN?Ü/īš7Ãô);D[ā­‚z¤Ëʝé…U^Á}iiÚūŋÚöc°š­ôßø¤ 7㉇¤ƒŽ&PB8đ@Đâ0B)Œ 8ĨBB´ c  ĮéSЏ.:w‘_Ũz_dqkĨؖ="ŌŽCŽ)ˆ÷iû0ļLtĶKM3šd+ŠU5!!]HQÖÕ5!ĮW!]2#öˆëM˛+Ú=ˆøhCD4$„DDEĄqt9„Īa0@Âh2‰ pA„Čá4 5<" GÄDDDDD!Ŋ Æ?˙˙ųe*9–ŦÖËrd|ŽĐiÂ>!ŧÆvkgzeŊ=§?ëȝ‰ŸëĒú„×Ķ^÷‰>•˙ę´Đ;ģB8؈8˙EžŦˆ;C&‡PČødQĮj íXčDHAÅÅīû|aˆ–=4âÛ#‹UD5 Ø=‘GĩLíoíU_[O"Žš˛caɎ„3YFØIBk}ĒļĢ_ÂEēĒã_×uãψQÚŦ>ēÃëøíaÅ5ՎĩūŽčˇŨéáŽ×ÕiŠģģļžÖõü¸m‡¯÷EĢ^5øģžÕmX‰cë×-ĶķÛBŌ•˜ø´[šŖs>‘7§&>{ĻÅß÷U ú} “͆ˆbÆü‹ •}úâ§v|Á÷÷¯ēWē_iøOUēˇž™ :¯kņŨÄEŠ39 ;Pdn%Âa¯ņ|ktv–Ą‘Ā—ØLāą„Ábâ“ãēl–8¨˜q0õˆˆãaĐOpl$×dQČqūÖ÷OģUŦ^ŧ¸Mƒ šXaTŠ:iϚdnBē‘]5°‰XB%DDDDDDDD0‚a„DDDb""?•˙+Šį™œ^&lüNŽŌfBæGÎÆ3ą|Ųž}’9“„&`ƒB,  2f)æ2d!‚83ąä$ɓįaɨDW :§§ŨĻēqvēϚÜZßycŊS]{UäAéŽAk…mšxynXåē“q5‰péežD›æ‡|?¨j]§íËŗ…uu×˙ëú­u–9Ô+U^û^feÄB->‚MSI41ūëĢQúT‰X=%ô:Ō["Lzh‹aŠC†8ĩ† Įm:íPÕūŧzī ĩ,}4–’L„wĨkWĒ­ŧIŽü˜æsFģĒŨZ ŨÅ ĸŨ:VwéĄįv8ŊĄ÷ūŌZJXéá(iOdŽö´¯Ü<™Ŋ<ą˙Ø.Ŗz˜Zåô”.Ÿ§áûõ_užģrįõVĖvÔ_ÄG˄ˆT­ņ´’§jĶ"B/• sÄȈ‡˙ėWÄtö" 6Å´žâ#دä(ę¸äA×wō#¯LÛL„rNIÎ=žÂ­˜p˜A„Ķ#sBpĐaUl×˛CÚ AD0™ĄƒB8ˆ°„DC",!e´!ˆˆˆˆÜŗŦ-\G“u¸øĖØņœv,Œ•Ū#†vZGaĸr™)ˆÆa AœĨˆy„ š ĀC)b˜iŸ#ē yĻM÷§Ēσ‹NÕĶUĶOĩÚ&îBÚšnũS˙Û_ŠaXE>T|÷–ë“qO/fŠeƑ1ɎŠąPōŨŌŊMyˇøLģ.ÂĻL¸†Åuūžë֚Ēi–:k÷Ĩë´§vĢh_ĢI^ŠÃuŽŸĨ×ÕÖßáųc{äAč˜đÅ X1,qÆĩbˇcZኇ÷ o¤Ëö[ØŌôŸŽīģ­wļ;ā¯ũéV‚i•yœK{8í'×Ŋ#ŊķģnĘĪ×ûúÖé#D'­:AųQš5Ū‚;Bŧ™Īļŋ§öZ "˜L„ˆišÂØS:˜MS §vēd­27'ŗTA…ÂŒDE„""!‚hZ 4",!ˆˆˆˆåu”W|á†Ë)*™S=ŧA;<(AŸŽ L†pS&c6dņ3gĖų“B8dņŨlgŲ3 œd9 ĶNôûÕSXi ĶDGƒA Õ4ƒ §ëūÁé?ēXĩôâ×ĨBūĩš:j[ųf„Ūē&ų~‘7"ÆĢ—nEމģų7"ž¯ŠņNfÆđĖ ˙ëOŨ;ëׯ¯ŌõÖ4ė&TĶģū ĨVž|!­5{Ư´Ž†ēúËŊîW57ļ+ļ‚PĶ%ēŪØĻ&~ÅCPbXęø=Iø v[˛;1 ˇ§lSÚZwaŨ%kÂWã˙§­Đ\÷Af)áŗI>ô’´ŌgqpĨŧŅũ˙ŋũavé ËΒn‚tÖ.xfr šö‚I´’swĶ–;åģEĮˇũuđŽ=z]? ĻäwĨ¯éëé×åŊ_û×Jū.Ö,Á*ĻG­o‹–õCŒÅa=¤ČâLáFĒ´Â8¨ÁŽ0 qņ|qQĄAôXâ4#C6<]h>¯¤ÚĒ‘GŊ{!OrqK!GMjĄp˜]BМˇ†Ļ}4Ė:iŲ‡'uRĮS9pĖ魝Âa5dÜĐ\&a‰œ˜Rüˆˆˆˆ4"L!ƒB"!„""""1Qwø0CŽHÉŋ"FMÕFqĖ”˛ a36dHÎ `Rd)qœ"h)€„p„ČŒÂ;ĪævæpfwAMŠ\apI“˛ņiĢ˙­ î-4íhjĄhZÕ?VõúO¯w]Sú‘G}[#ŊšcÃüŋ/fĄM~¤ åēPpúŨŦ$MŨKÂã&9î^˙sÚpŌl‡Ž<)¸ŽgŠp—¨)c¯™ū‹$ë–ę<˙Ū0A›p{—ÂãM`áÁÕŧm%ņNŧTppq´‰Ŋ`ōCî?{Ö8ûąHuũ‰cžīîÜiŠģ-܅)1ú†AáŲo÷˙ēJë°Ôwq¤Õ֜2Į†Š÷–é˙ôį‡3šŖŗģ™ëɎ˙ ?3ž{˛ŦŠ?"AõöŋÎ~úÖĶÕûŌu}*Dá šqß]8MđŒįËô8#ŽŊUí?˙Xôî“˙˙ÚęgņëqíRĻ–ŋô/m}ëAüąīËއčk۟hf4ĶíSUŖ{q§3͌0„\CKkûâXâĸ%Ž*%Ž#ū™´œ[Ä]!Ŋ‘Ä­¨ßážČƒ§ĻD{XęŪļ¤(öŠĻša0š­‘ēiŽ˜M0ša5ŗēj˄äœÁ Šæ8B"!„Aœē 'h Ëہ2ˆ Ѓ""#ü›ŦĶ.Îâ"äh‚ ųŸ"hÎ.GcÆyŒ¸ÎČFÃ;8ĻŲÚ ųĄ3ÆM Ō<8DD‡Âeôƒ „ĻhjMCL™ šdĐTĐaŽA i§UtũĶĶ‹M]tî!Ą tũS÷¨>-蛹o“‰nčĢäō ôMŨKq4:äãšįōâ`Īf3ÔÜ^<]>û,ukË>ĨáwŠcĻę\k­ú_ŽˆÃŠĶC5T-?˛;]?˙‡Ô?Ēú֝õw\-ƒī_i8ŋoíZ :†’ĩu‡ˇ~íL?mŠīLzwƒ`åŊŨ¯ÃđüąŨÆÆĄĻ0Å_q]ŠģßÔ0”UĸĮՊoà [ũ“[ģ-ņͤ’ôĖ?šcîŌU‹÷Iâ4 úŧĮ´×õŽč$ŠŌ„Ūʍ7ÎũöT`^v‚yā4ßüŋúũ{E礍$ũ]}[ī Ö§|ô‘ĸŌúū‡Ú"ûĨū[ÕUĢlžĩ˜Ķôâí$úŌŊ5üƚü…ØđĐ­8Ŋˆ´ãłÅę„DAčGŌąčKqÚĮXŧK"8ˇBô*Ŋ̉cŽŖę:iäuϟiÚŨ°š­Š äWĶM>ō# ĶLīڑG†Ŧ Ķ,tÉ97´u0™? „E•‰ž&gAĄiĻNM,!aŒDD4"""""""""""""1ü˛9Et¤}™ŗ°ŅFv SŗĮ?“AOGŠe–₍ ɐ§ŲąIĻđĐh0™30L™Š~NĶAé„đi‘ÉoĶM5M5NõUëXu y7i-RËwJ.ēÁhģäQåHŽ:ū–.(›ÖhĨ“v‹1ōŨs:XIÍÆâųĖÆg áž:ũūŊũzx_°ĩŌ_X=&ūq 5ĐižŌēÃiŠõcø7J9ØZvēŲĮŌwič˜õN ZŨí_áƒĻ‹4Š"ĮÚßvL{-÷M‘ųcš1ŨéZŨĻÅ*¤›~ŋ< ūtûƄFWa&T žėî$ĮĨoŲVĐRožÄ] ôø˙˙Ēw•õˇA´õvĐI6Šé4éÚëĻõęŊ_EŋŊmbõúk͌ŋëíSZfŋü¸÷ÉÁܸÚdzŅ8%MtBĨ4Xíx¸í`øÕSO]_A§˙JhĒęŽĢ\ˆ=WēPtĻz$>ËtûN­ĩHˇË‡— apåžXøHˇËã?—Ū÷ÂGōTâSãœu]4õT¯ë [¨Oé5ĩv×t¯úTB@Ņ*Å{ĩ¤‡úŦIAņĮ ƒŊÖßiĸĮíđûģU4>Åoîî/˛8PÅc™ŽÁāynãîę×UēŋâīwAwf}Ģ×ĮÚöƒBŌOˆˆ8˜qĄ}Mx'q3Ģ­v(1câ#j%Ž9;vžAÄhmS}GJĶģM27Õ2ŨZŽä(ëiĻļ¤4gȝvFä(é…5A Ī¸BĐj2^ ŗ†Júä‘Úi2¤Œ ’đMR‹ļPö ĄĸĻ) J SųĖÁÍxŒ…]hD2Z‘ˆ‹@Âd°АPJ-ũĮĻŋa~˙ņd4CSŠ nNČ6Šڄ' GÃ8Ų‰$ËØ1KˆˆˆˆĮ˙˙üˇ"¸’,ƒyڈÍËqÄ5yÚ[<Όã*š„—2{ Ô2Ą,'„ ä"ЏÄUSLØKąČė“Ã6D•› šv;AĄAĻT„.&¨0œZažšh0ˆ‰m´îĶOúiéČAōĮkĒ…úĒZß#‹] nū-ĸÔŅ }ÖDtģČAË%&íizäAˌ›‘ĮŠc§åČ ÎīÍÉëŪ[ę•dQˇ3ũ‚IjĄWúUOâí}ļŊbŠĢZcëĨkX5Úi❠^&{yÜÎôÕŅ1éÚˇ´ŠˇimÕ$|ī -ÚŨÛąö‡ĮdŪÁIÃļÆžîÕo”1]ĒŨÆÉ=;´ĮĨŗ=īJMŨÜąÚqú¤˛ĮĒw,w3‘] ‘7ĄĖäW˙Û].6ķG*vw˛ŦD\đG $ĄĨž.{ͤ͠Џu_˙ŌK]:_ü+„ô÷ø¨øŊ{õøî˙ú#°ũ=5KŋÂ)Ú§ƒ]Wlü^ˇÆĄ‘q6*" â*8ô".=4]ÁŽ=CF2Ļ3`ŠąS0ä(ę›õULKwq_úq0ãdG^ĶZĻN„{ĩ"AwMS[˛#ĻēÃO"ŽƒM4Ėå¸LŠ8A„ +!„3@A‚ !hëˆĩTÁ4ÂÚ ģ8i„ i„Đˆˆƒ#`„DDDDDDDc˙˙˙å¨Q„9oŠLŸ3Ųaf‘3#4vž#<ėԉx™ Ÿ?1”đAŸËærg„0,Ë#¸IĻhjaĄá#&š!™Â=0ƒĪ ˆģčBĶÕ9áSŊSMĶO´÷^ =S~ŪÕęū čĐåŊA´[šĸ‹w,vM |ɝË‡Ē¤ƒÉņ8Ų7y¤gōŅ1īēŧĪéŌˇIŌ–÷¤[­h;Í2÷Ļŋžîr=Žã1‚ Ą ÛM>¯^—ŋõ~õ×JĢđwē|KđƒBĶBDŠjOíZT/ãúīũ%xũĩáÁīđÃ4ãWæzv×j _˙ņŪ?õīĩúęvˆ.=‚u…,v‹ģ[K˙ũũxŊ~aÜąü{#8ĐâaƟãBĸ*•§v’u!G¯ĄTŊm-{LŠ>CŊ‘ôČā_ö™‡M2Ķ0ëd+ĻB>C¸R° Ϝ4ČŽƒL&™    ՂmŲo5†BB4-2c‚ r ¨=g°„EĄa‹DDF8ˆˆ¨ˆˆˆˆˆˆˆˆÛĢĩ˙˙˙æZÅ;-ôöiŽĪŗ°ŲöO“A›^#˛–GĖá1œ¸Îü3Ŋb]Lē@īA„A ÍŠh4ĶT4ÂiĻŠ¨Aœ Ė āģ÷M4ĶMS_Ķ×îĶM4Ķ̏<ąü˜ųnęLv‹zĸnųf…Å>\eģ“Ã\:iÅŪÁĖæ Î#“ĸßēŊS˙-×ôũ¯^kˌ¸#ē'„0ƒ.ģXĒŨZĩÕ÷Jâĩ~ŋ˙{úÚwtĮ¸][‰o^*ģpŠē´¸ûĶt=kōĮ˙ö bŦ4 â•†*Ø ÷ėK`Éž×÷M×ë&=$ĻĐA(KgzRo ‚gvG øUcßĢßōãM¤‚„é ­Jč*t ]÷j˙øãēŋA ‚zUh%O¯KOEްĘ|ąč)påŋëŦ‚ã˙û/Ø#Žü¸• ~ˆQÚGâ<¤´Âē­0š$;‰ô™\X¨¨ˆ‰ŧ||EÄÃÁ‡XT*ˆ‰8ˆ¸ŪA¸ãĶöļE!G´›Uéä+Ϥ#Ú­÷–:i™Âf_ĶVAŧî&9 Lt, Á3ĀS@MMƒÚfŲŠA Â ´ĶB"Ķ ‚š DDDDDDDDDDDDDDDDGų“ŠlËu˛;'ÆvķĩŪ‘øÂ<ŽõÍbšäŊBČÜheuAOÖvjFČ ÂlŒäD€ÍˆRŞ0„0A‚ ØŠ‚ á!ĖÛžĶĶM5M=4ĶM4â}σģ¨uÃĄiϟß=;ģũjČHšm*'*W—q—p&ēÔˇËu"ēb\eÆXäHË|ÜMŌ&îXų7_Î! ÚK˙˙_˙ß˙ˇI㎠†šj›ûĄęÚŪ֕$×ĩŪ°tēÕ}]åNĶpÆâXíV1GLPĸcŦĢ K1_ĸá˛Įƒ¤īj¨Œ| Ķé.›×Ĩõuũé¯ųā^”›ŌI‡i|Šôt”đŌJN+¯ņũVô ­‚ҝ $\iŌ[ĐIž‚ĢŦ˙ō۟ëæĸßq›_^¸"Ÿ­L íuĩCâ㨇dqQcĨCÕ Ņ4# Ąj°˜MŠ „".%Ā8Ö#ãØqĮõÅíkǐŖ­‘Ȑš­ä(ūBŋ´á…ČH/­TÎ\&gË0ĒĻ€ļƒ ĻgTÂftĻaĐ`Ē""" ÂhCB"h0„ZˆˆˆūMÖYšŗ˛híJ™"ÂgÉ3#„3äpŽÍLã2f3f|R–3diĐg"ųƒ;53ã'öŸi§ĻĻ˜Aĸ#ĶAčZĻ… Đ4ÂvŧŅ1Ûjžúki_Įv¸Vî”'–>\AåŊMß.2n&ŒƒŊež]—‘8ú3fđˆ$É܏œ Ëu_ôÅ_Õ7ÕĶ#6Ŋ˙UŽ‚h„iÄ|Rö…ûí{¯^ē ØÚu_o!á:kOü4ĩxĢ]„–íaߨbĄÕŠûNLv;‡–>™c…ĮÕĩĮ†ŖW–;Øė öéëĻ>HrcŌßKĐNĪ#ALîĐWŋô×kŽũ:ž”÷ĐNŧņ†‚VJ3ŨŸõÂŽ6û˙ēčĐ֓ĩÂ-ŌzmŽģ§×š!ëũæ˙[EŽ+l'eí ‡tˆQĮ§ÄˇHZĒč0JGÄ\4Đ<ĘØXã+@ŪŽXãŽ*0xŽÖ$ßļ"ėŽ*ĒÚé⚐Ŗ§‘!\…ˆ:c¨~EÉ:dnGyč5M3¤+Ļ0äâÔąĶM; ™4ĶLО!„!Ą â"!‚ &Ļ†„X&„DC0˜B-DF„DDDDDGڏ,ÂĘnDDLČĄœˆhö36xBļ3‚dČgã˛ähŠ2hpƒ#LŒjx‚LđŠž Ķ ¯a„ ؉‚4Όā˙ˇ ;U}éū›ŽöžšpÂđ{–đu„HˇƒŪËx{Ũ;š|”,ų$|ČËŽõ‚āļųo–?–?w—.¸‡šōíč&\ *aS0(Aõ×ßøëúûÖŊWøŋ§ęˇi§Ŋ.°ô˙úØI8^6øŨ~XãŪáŪL{íũƒ×¸úąÃU{†*í28N‹†ø<`ÖËÚZËļG Ũj—w­lRđWúû¯ŲQAZ›į‹č›×¤­y=ɎŌâ˙˙ëë…tké˙Oú §0ū ¨2 ŽËwɏũSTĖ}_Ž‹}˙­—Âúúõaū„U냈ÖCã+A˛(­…Ž(­‚áRBÆ,!¨BÕG`šD8øˆÍ‘ÜFlđčZzÚĻÚiϚjžŠĒvžšĻ˛cöŅq~[ŋI?EŽ×šcÕ4ô[´õMVöG/ķfSúDeI<*ĒęƒĖõ—ĻĨš+ŧ›éeĮTN0›9[„Ė0 @ë~šVĢĩiZû÷˙õéúqŨ ÅũÛûģÆúĮÆÕ?ë[K̝NBޝīëzwpí¸íCB•ą,q¯mC]5ĩčģ†Xđ— ‡ŽōŪņ÷|˜û}kŋCø˙ū×ų˖˙Ųã˛ĄĖîxtÜĪypĐh.gnô;‰oBßũ¸đīõĒøWKßŌŋâ’Kë¨I4đÃåŋūĶõ×äĮ­¤žžŸéčą×ļG´ô[Â&?Tˤū'ŨW]‹ãôĮކąčGdQĮüTa‘GZh¸jȐB8ņÅ â.D[HDDq3¨¨¨–:iŠÚlŽ&Įvę­&ė&ęCHŧ„tûŋŊV×UqY!ĶM4eô4É`LˇMM4Âh0˜&IĖęš ĶA„ĖéŲ+NȐDD2›†X  ! !Áˆˆ†DDb"""?•É ČČÎÁ™/ŽgjãĩÎĮfļvfŠË@‘æA’ft3ÃĶ ›aØ2f3ƒ<8MtŪôÕÕ=4ĶTĶĶOM5M0˜O-éē‡PōĮĻ#ɇí{ĩNéÜąŨđīOč›Íˇh>gŧ&æģĸĮÍ7j‹|¸Ŧזųxž[ŠbkËw.×Ū`Œ2ė ä]™Æ_6XSbë_öû˙IõĒũ÷ŋOũīąM{÷MiéÚ~+ûø¨ŨV*?ēXuzūŋvEv^ ÷C,wģ~hwqĮ§ƒ`ŌĨ†*<1ØPÅ1ö%ĮÃ-üa–9.L„¯wīIU%úĩ’|Ëwá­o‚)ûV¯^¨)q­ÖLq-ØA!&í(Ŋ)ãĨîHŠūŸ˙]ĄĐ?ūēUīôꝴ‚W¤˛Ą '˙ū]ūˆƒûõûí(ˇ[ú„ũu/_á5 ŋVģMmn-n“ģH í{„¨ ĶJ0œ|M q3‘ģ hqŦC#„KĮ ‰‡lE‚†Æœx@ä ãáõlq3¤BŽĸŽĶ_O"¸ÖŦŽ-mWĩŨHQí;MHu„͞1í2ú)ä6:d(æpƒT &ši™Âh54&ƒ ™Đh4ÎéĻ™œˇ4ˆˆaˆˆˆˆˆˆˆˆˆˆˆˆˆ†DDDDF#ų7X#°l§3ŗS;'”#Ŋķ#åČČĢ™XԞ<0™™&™Ą›@Ķ80@ЌėÔgã„gĀB–3Ã8TzzvÚiϚ ;M4L'iĻtç@ęéÚô‰Žä+åŽūäĮōcĐûŦۊ´8š2n×Ū[ ęꋇ-Å\ˇTÜÎCŽō(ķb#ŗˆ‡ØĪ3;X|ˇ_ŗJęŋ˙õVĒ § ūqa8=Pađ|UņZēÛēĩ[ĒąW,}:ü‹‚ŦãøŊ5–ôĶÖîūÛļ)a†(RØĨØ …1à (|\‚#ÉöčKw¯W÷-×ē&?p’QQųß^ņßی*˙ũA˙ōq˙——wAž"æŠÚ‚`ƒ´8™ČŽô.Á2:˜[ø˛=ÅÚ­[BÖīXØíXi‚iÆDCN%Žļãô-BQöGqĮTĮíHqȝÚkë÷‘G×Lˆâģ#rcØL(M5ËõMnj[­ĻaÕ53§jg-Í ™Ķ Ģ"  ˆˆˆˆˆˆˆƒ+x"#ų7X"šâųÚs;Ō™9‘ĖÜFō_Sä|ÉŖ‹.*ōŨlŠ÷Ēoö&}+ĩ4);ü)ã#´(äa<^¯˙{úņízl-ZŽŠF×ĒqiÄ=>?V–ĩĒbˇõoÕŪDĘØ§Ņœ˜˙öŦ1†;;5 hRdQü~œ\5¸pĪ—} ėŊn’°’]˛8h‰cģģ }–˙x_ōŨŗŊ‚—’¨H¸|ņ‹g{ ÎÃ3§'čbŋũ&ÕáW J–úļ˜Iæ~wö^mjĐVžžĩũuPE?ËųPĒŠÚ&:¸ũi=>>ƒŋūXėē^"㈏ˆÁĐ {‰œz.úķ8`Ī0œ0C°@Ø´8˙ââg§Ē4âŖƒî‡kČqĶ[RĖ?Ŗ‘^í=4ÕnĶž´H~Éē 0š™ÉŽXč5,~ TˇL&mē 4ĶL&šĒ›¨”î$üĨÔĘC ĨPFFᨠđdœ`œDĻ„qQQ>) t&ŒMxš 8â čØX×ĻÔDA ûiˆéßCOˇž+ģŋŽÔ˙mr+ä+Ϛä8ëkkäQíK\…uĩiσ-ÕnXa2Ėá3˜M53ĻqĖéĻ™áPa0Lđ?„ÂhŖÁ”˛Q†"""˙˙˙–QėĄ†åŊlčFq¤i–›>a8Gș 3ņ ŸĘ2hD„g";#Hėį2qz a;AĻļŸĄvˆ„Á;4Ž alD¤xļLäí5OTßWëĶøziéúh;|ąāčˇrŪ‹x:.Ņš8=Ņ1Ø:¨uÃĒæ‰ķH‡”k§Ûū˜Ģß{x õMë.!փÉģ“Ûų7wsfl Î@A„áLA§˙é~úĨü>Ģ˙Õ§úÕ.š„ĒjŒí4˙WX˙˙ū÷ęęģiV<|Z°ĨJ.\C ‹¯˙ī˙¸õĩŧ1ß֓ ąČ¯—q 3“}~ĐJ˙˙ũßoęë}^žNņõŦkû ĨĮ˙˙Ō|ĸ}4sĮJhčIģÍ>2túÅoüņAWęˇëéųÆáÃA*kč%~›õū6õßéöCŋģõoTĶPAŦEq˜øũKĢ_­ÉÃŧß.úu.1„ hqڂ2´ ã!ąĄŠ[\Rä˜!!Įā„CĻøMŽÔˆ¸8ÚM ؤČâĩdqS¤&ą!ãj‚aŠĢ{ƒ‘žÚkãĒ}Ļļšy×_Okv'ZW—pІXLĸ2g0„C4ĖtĶA„Ķ#О_&BYĶMDDDDmDDDDDDDDDDZڏüė˛.e:; ĮntíB§vģMwI˛ãHˇã8aJqNƒ/œ#Ž30ĨŲ€‡-úÂî!ĮiÚa z&=„š-čˇģÃđœ5-ÜtĖ91ø<Đg‡‰ŋéZĄē]?Õ|ŅŽ\?ūļõÁúĩüzķŋqÁM ×_âŋ¯íēZFø}¯¨ÚZōīkC‰ŦTRiá-vĮÚãڍ4-ŠŦ›ĻšaB kŊ­‹ „,ā@‹äDq.ĐhhD‰ä3G c•gi!ōƒC<7d2œyžP‘$Ę9c ™h-¤ """""#嚭Jëq22ŨQÄHa$9—42Lši™r4ŒŋLב¸ÛD*‡ga "gČ͔‚‘Ŗ*ˇæzwnŊ¯iÃîáŨ’Įŧ8:Ŋ̞cŠqeÅm˙ųsĸ"nä  ķ°ĪÉb4%aęgÛĶûōĮ˛cØf•2Ũį6ß.EژL(C5›,)¸ŧ}”äpŒEāˆ#š9‡?› |‹ˆL†Û9—°y„0ƒAČđ–ž„Ž r ōnMËÔ•ļ›ƒÂš[˜#†x@ˆē`9 TΘS;§‚wĒ…­ NĐqkqG5NĶĶAĄ 4ė ÖĶí?b­a„CĐG;ė õL&Ģ„0ƒA„Î9cĨjŅ1ī3æv‰ŋmš-÷-Ëûm:üˇąmĻütŧąÚkŪņw¯úq§izqĮĨģŒ:ŊLö)oŲoU§ež+v \6<ÖČæG¤ĮÆ{4eÄ8`‘7#ˆ0Ĩà <˜˙G†ÍpČaܡ3§— 0ˇš8?Rߡɹc…"8)7°ŋҰ”˙O˙Õ|ˇÖū‘uīĢ×3‹Ø§š{×üGé‡WöhüŠ÷ÛųŸI1ĶôímFŌ~õūõÕ īū™ßú˙tß˙ūx*Ũ¨ā‡ā“āģūqkø÷āŊVĨŋīõÛūŸÄˇ÷Ĩ-ōáũũc×Ëw§ŨԘũ}QqéôŊã×ĩ×Ôãŧ íiø^ęž=ëĒ&;ú\Ā?ôL}ŗZšĮ_ŠÚ¨OųcŠüvˇëĒļŋqŦģčÃĩųĮv•ō,oN)4īvīx~’ÕSšŒ×S~æyT‰ĸJd‘*N‹|¸]ƒz3n™ÉŊ°}–îšØ ŌMM O– C Ša4 ü Ė é…3 ]›á„HeÂxĖeāƒRäl/Múd™mš˛ņ†]§…9“ČSmC0āôš‚8G6+ž‰xĪĻ‚Ô&Š÷éîéĄ¯iÚa= 0šî ˙ĸĮša„kØMVū§Ļđšjēa&Ú 7mËÕ§ĸcá"Ũ֙ė/īŌ¸ļšīmC¯lKī}ĸcĶĩŋN;UžĶBķEĒEŧ<_˛}loOōâČQ͏:4áÃĮz!]Kz&9!„Ō.~8¯ ąí˛āÃÃrãƒĮ&ô%Ä;&;äAáŲoÁí)q“.5čHAõwũ˙ëûúëū×å¸ũ„—¯ōŨoH›žŖãũwk­ŋ–>ŸIūhŌ[|ĪŠnDq-æÅ˙ô:ęëõ÷é˙ø>q~ԄTc÷ĮĐTëž Z˙ßúUˆË˙˙°ĨģãũĄkwpAõõŋ˙EÅQqīÕW—˙Ø"?-ÚIīūŸŽ¨ˇĒæĪû˙ô[×ŋúûũGûžXėSÁĨû§æ.XôäĮ~‡q„`„ØûđšņđZÅØN\~đĨ‚*-WäãĮjŸɸģ˙]WlÅÄ4DuiĢøN•­ ÂB"+Ž4ô#xí;ˆq´ŦGR Œ ĐĐ̈ną0â" â""ÁĶ‹Œ0ÚņpĐŧnēnŊSTԂÕUë{[Ķ"ŸŽCŽē㊠ƒ‰r9>͊Bؤ¸Ráâ;všj𐪒2Äá“΃"¸NL”: )ĸÂz‹#™;PļF9!ÉÅ­§~šd$ÂvļB:Pé“4­ƒ§­šv[¨Tȝˆˆ†Daˆˆˆˆˆˆ‹bu&pa {B"0B%>"!„!‘ŲCHDԌAĻDDD4 ģÄEÚHDRô̝ˆ‡dŌr܃>Î֌ųÜČ d˛%’išGc’iŊ4í7ĩOîŋģÜĪwyØZ#¯Ü8;Dm”úæŦHėöPį¸*ŽŒĖŪa7Žĸŧ)ō.ČđL ĐŅr?į†^/ėņĶMˆ‡ &ƒB bá§é§ĶN Õ ^÷ߥŊīúIŌdp’Įŋ‘NĖ9'4C. 91ØvL~Áæŗ[ųq Mô\ 7Įúūqû~“Öđļqī~ąīũĨ˙,uû[ú˙˙˙˙˙­?ã˙cíZĸāwų{u˙ã˙æˏ­-ú,4pžôĸ?×ĩũUØ˙íSåÄ^>ūúv”hEā„hDHŖƒ¤ĶŽ4â""&ņĨؙņąlŠ8´ĐŪ6š´AXt…ÕxMS†˛ Į!G!×AǐŽMÎ:k„­Df ÷Î Ģ>ÆĘAD‘gˆˆˆŽ5AŊvÁĄ˙˙üŗIŌnXF™ĄŸ2Flų…‘›>gâ¨3æfĪ0ƒ4ČÆU͝H™Œė!ė i§h4ͰƒA„L āƒ6 M0ƒ6-Ųã8)ą Î ؆éĻŽš~škiĻ›§ÛÚģ í7M “pĒ[ŅqLhˍË|˜â[Ę­-ņ.=čĐÁŅoÁ°t[´Ĩģ˙Ķ-֕üˇût˙W.ÍzßĻëéũÁæ†ČŽŋŋ×Ŋ§ę˙˙[ĩ_מõ˙Ĩ|:Šúē&8íÕĶŋW_×˙ĒęĶ^1 Cv6*¸Ãņ†%Ž;Ž?ŽØ[>}§m÷%ô—tētŸ}wŋc´¸ĢžéKēē Ũ‹‡č'Ũ•i•s8 °ėîæŅŖOčˇI%ĸŨ%ŋ4iūx„ßįˆWōˆŊĨēMĐnši&^ĩŊlŋĻĢaU5U.*Z¯ii­ëœĩü7§ÁŽ8Á‹Áâ0@âĸ2C!Ac´ Á JôËáÚÕö‘8ĒZ¤>*&uˆqĮa Žŧ&aĶģ gŧ‡)鐎¤(áHqÖԇ}4û!vƒ Ą + 2? ža3ō4-0˜A ÉVJÂv ĻĄÂd+Ϛˆˆˆˆˆˆˆˆˆˆ†ˆˆˆ0„DE„Q˙˙˙™jf¸ˇÔÎˑŅdЉx™ŗĩv\Éėģ;Væ_ϚgČØėø¨;3 ƒAž\Âg ͊ƒ83„ƒ ęwÚõO Ÿũ=4øiŲ°—ŨßDĮ`ņ4Aíx>ĶŨ=okÃLš‘p)Ū^+tXúŪAŨŧąÖ‹‡Ņc°zZnxá‚`Čņ˛ũ{ßëųŸõ×ĩ]S]/ĶģBĶŪaÅqüS¯ËWĢ\S[Ą k朎ĸcųnđk˙LWŧjôáŊÃė.ögՑŪ˙¯úØ%˙ˇŨņ|>ŧkĮGãŌDŨķGäŪ‚ŌOJw|¸ŗŋGė_×cœuúOj˙\/—IũŌ~U§å[ī,~ˆ¯ũ˙vļŪĻ?ū“ÕâõAūŅnĶJÛŽ5…‚…¨ z;âÁV ƒ]A´ôÖ×NE*q0â""͊X˜zqZ X¤lLõ=8ÁŅ;úuŽļšßūēø¤#iī$<&h îMîĖ:iσ à žđÂ}Ŧ4ė„tĶ!G\DDDDDDDDDZh4"BB,!ˆˆˆūe]dú#°„Y2„!ĻF ƒ+’ÂB%’â7gfŖ8G&Fx3#„l!K#‘ §s0ƒ6ė՞#JÅŪiÚié§ Ķ Ļžš"D&„iŲv{äO™ŨÚ,~ˇĻžŸWÕ§Ü-ķúËq.2Ũ+ĶĸoÃslÔˇh›ęL|›åž[ę‘7CŅ7Ū¸ÛĪ Ã#˜P†`Öüņ÷ŋĖ:ßžˇ¨/ytÚņÖ#͍Ũ-`ŨåT_cūŠux8¯õ˙Ū‹~ĐDŨ ßxíŌimŒ1ŠLw ŧRcĒ.eŽ]éö•Rĩ ­Œ1VĶ[W‡÷˙ô×úRáŌ {ē¤ĪtLîé*JgÍF?JF?Á˙|uôz ũ =$…ŌApŠŋAič.G˙ôL}.ĒŊŌĒ„}č%ŌOOIia~ÖŌö:âאŖˆ†„„đČō`Ŋ‘–>8Ž“ „& 8 ƒ"!ĄũÄhDk­¯O%o¤ú!\ˆ:d ęš|ƒwR ōqO!Gōuv­Ą ĩĘĪ ­žiĻaÉšĄ4Ė9!Ë53“s:jgM4Ķ Ļq Å ÂiÆ…Ļ…„B"ĪF""""""#ų^h›ÎÃ3°‘nN™a2¸!3ÄRČg†™Ŗ8(AŸĀĨ(ŒĖķ&dx‹ŖŒ ĖĖĪ;5"v}õmSAŪž?í4 8´N }ÛEģÃîģŽ5}_]SÂ\›Ãē.xHŊÆĄ™ōc°}<=AĶ]#!Ã'dŽb—_īü(-z~hīĶĢËK~“DKeØNëÚ]x>āø…kéEq_ß ĄlŠ?š“÷õÜ>ī¸đëz¯Įä äĮ† ÃĸßO_ßũũßu'ÚŦCß_õėwķ;ôLwËĖîŲ‡s?‹×äĮ˙§õÚ˙Åūa:^z~\cÔ¸ôÃj\™ßŽ ãoڗī§§éÅū—îëö´ßšqūû1L;Ö×í=Pëi¯ßöŠŧÃĨ{Ŧ\D;ˆ¸ˆ‡@„VĨdÂÆyZ Ĩl*Æ8ÁÁՋ‘ŽØ?АP=ãÚLŽ!p–G¸4¯i˛dá4ė”å@ä,í;M4Ķ[ ˇiĻŊ„ˆˆaˆ´A !i„ č ÎDDD4@ˆˆˆˆˆˆûQå”F[ÕĖ ČÜDerA‘ŒffxɑÃ&c8!}™Åō”GĖņĖ‘ķ&ƒ3Ą5O<*ĻPškƒBí4í0žfÂkŪũ;nĶ}ͧM7Um;†;ÜášÉ"oEš>‹‡Lw&)ū6ü¸ø>-ī÷öū![ ‘Gxɐ‘ëD;ØŧŽDpļG¸Š×mW_I?QLV˜\&B=ĒŨÚfSM!GM2tԅ„Ž¸‰ hDXA…)BpÎáa3XCA ÔDDDDDDDDD™Wŧäo2K#6O˛4gŒ™ŒŒ2dDņ‚&c"2#ƒ?ÎÆ‡dGęĖ4ĶM;L°š<"iéį… §ĄiĒ =õ÷ īM}]_M]ôđƒú˙FF”ŅPtMķCT[°u;ĢПßđĻc8J|fÅHĄ.“Ė˙uwauĢô‹uÜŊ—ˇ-ķ^L~=BjšĻlBáõ¯˙âŋßkáû×Å{_ūīûpŊīëüÚKŲŨpy1ū”ˇ‡lŽeāëū uņzkŨũƗ˙ëŨ…M=v•Vũu]?vTPAĮDAũ¨ `ˆQÆÆCel>†Vƒ@‚ĸĮ[ /Bŧ~Ē ŸŌēâa÷„o  }zÖĒCŽĄ}{MS[A¯i­Ūš{&åęq s•ETÕazЃ)0A–rá2$&!Į]…ÄDDF\ĖŅĀ„DDFšcĩĶÄy])3#LėœhŒŲØ;FfÎß5Û˛‰šėš,ãfp Ī āĄ š û8)K Ķ3€ē ØĄ3ŗŒĀ¨3ˇ#8ųc[MĶĶĶM4×TĶ ČŖ´ÖÂÚiĒ|>Öå^­Sĩ´‹‡z-éĒŲ1Ņåz.''ĸ#‹‡1Ą7āSroYļj\ cŅw–ųgRã/—&ú°Ü˜ûūœdv6GĸÂfÂ<)ąBīōĮ¤ū°úkíîīĩēë]ÕëAĄw{H4Ķøkëé~ë đ‡WAaĶŦúģIFą_Šŧv/~öÕ `ĮୃáŽđĮ Uƒŋ}l2$–ūƒ,r8xv[åã´‘!ûJčŒqõv–ŠXH4šåŊëÎwO˙Įģ Ļ+WéûĢßë§÷LJŽÔW ĩúƒ~ēņ ˙^>aÚ,zũîaɎīŊ´øqí%ks)ŌĶ MLvĄŽđÆÆė`áÕŖĶ-āī§}øĶo†>ÚiŽģŽXéūˇöäŨėî=g‡ļäĮi$č.\B ‚ũ WęŧĢפČáūę tĐt Đ_¤’ ú_ōcÔ'ŋh=ũ?Ņë~¨"Ũ„•ī˙ЇwŪąę’ĨvŊ‘īTBôqƙ &G´pÁ PD ė=bŠŒ‰cƒŽ#Ņâ"ú¯Æë!ûĸtö×M5V¤(ôC,}Xál&„×ĩM0ša3LrŨ53“á5,rcŖ–ę- œ܀M0¨4f#M0™Vx8įļš‰Ļ ÂVæƒ š1bŠë`Đ`! BZb\‚pØpĘ 2ĐW$Ąš`0BÁ‰ĪBAË(Z …8´"0ģīū=2 Ē™HMCEģ!ĩ؝ë‰2B""$Î#¨ˆûú˙î[…EŠ¨gbg-ÍBôÚÁ†*¤QšĖĒĸ62dDėĶ4Á33Œų ĖŲã'“4ō*ƒ?˜Í‘ãũįŒ&;S‚ ĶBÂfĮa5MBažA¯i§hZa´Ãܧ§jęšoiĢö›ÚjęšôšuÃčך úH¸`ōc…-ōcÁ×PtXô\eŧfŽEÖ<…,q&>Ė<šÃúõ}ZßĄÛ…ōĮĨŊ?Ķķ?u×Ōiáa§ÔÃĶMīļGk­WúßâĢÄ(˙Bĸ—_ЏzÖ­¯ŨxũžųéF¨‰ˆūŠŊ¯ūގVŌ&>8ĸâ)ŖčĸĮ§ũ†=íuíXûŅcõŽØkõ|ĮĄąū‚ø‹DĮōcâ×ö$ßĖ; j÷æ5ōA"-øfeķCI—/ Čâü¸"ˆ}˛(ë¸N‚Dá˙čA˙9}ųzŌũŋˇûhˇūũŖ?ôÕzõÁ*éŪˇKzińõ´­ĩ]Bj¨ąá6~š*č68ˆƒFq0ã ĄN˜q@ÄFāŽä¤6:^é¤A¸éíS&ę¨4×´ōtĖ9!î×ŊšŽ]4ĶRĶ!YN†ˆ°„0ƒĪ4"Ö A‚f˜B,˛gA„""!Ļ+cDDDDDDDDDDG¯˙˙ū×˙˙ōŪĻu#Defi Í#´Eėƒ;.G`ȈGg#ÄQ“C8DųŲ“ˆM$3Äp“3ƘLņ Î đ‰Ÿ#įgČá&xa´ĶNÂÕ>ôĶOMϟۃ éĻé§ēúíčąæŽghˇĸĮƒĖííåģNÁÕžÁĶM”?LõŗDĸtsSFi‘ŠkIöéŨ'KJæˆ;Ëy3‘7hˇŧ›åÄ]\_Pá˙sŒØ@A h‰ÂaV˙/Š~Ŋũëë¯ęû˜uúüˇ]¨AÚi‘ÅíSA˙nŋßŋ¤ˇâŊ~ī×Ũ.*ÃĮa||0‘1ķ?Eŧ0ļ0dĮß­¯ŽŦw†;ö‚Į˙u4YœÃ­3 =1Ô$H}÷ ˙ąũnžĶąOë˙H{TÔGŋ}ũ%.ë¯īúč)8á'ŌuĶôšŠĮrōĨūŗÆĢ_Z ¯…,~‚f?}¯Õ\œÄĐęMÕĨéę{ęīEŋũ}RJŧ%¯Ē[åÛO1D‘.eR"œˇ† [Ão>[°ĖáHQŨC,se“4 “ė$NphģķøŨŽ:kŋJ?–ú­Žų7üa$Mä˙`ōc´[÷|˜u$?ŠoĢj0ōcééõ‘Ž?k—+¯Ļ5&;ëe¸:GČũæĖ?ÁV—Ė/¯û.°ëēTŞ­™´ë˙úŠđû˙_ûûˇŋņ_hn›Ņđoę'žž‡FīäĮ~ǟĖęēēAãŋŧöĄx\ŽÜßū?ßæí?ŌÁkū˙üŊ¯˙ø$–Žŧ….7Å.ˆ°-é{š/ÛjŸũüŅŠ'įÚĻĒO˜uqč?ķ§-öđIōã…ûDQ÷éúÖĢwëŊũ_l›îÕ98‹B*0@âL;Eâ!‚ lEĻ]Gq|,i‚8k:atv„8ãAđFaŽ8ˆa…˛Ü\SÄAÄHĮ"Ú4͈éB ˆ†ĮD8ęŨŠvŸ~Ųâиģv"EŧKVļ!Ũ Ļ-Đ눸–;õáņÃãļD{Z§nåēi Î[”ũĻŠ…ė“Ų1ĶR+ũĒéũ‘GO^ü&Ą27´ô`{#Ž6ÚĻļDMˆˆˆˆˆˆˆš˛čŌ „D4É|3ē 3Ú &˜\† &™t4Î8T-l‰Z:æĐІQŗŽ`˲+„tšæMė›šÂ !Δ"""#B"""8ˆˆˆˆˆˆŽ""#ˆÆ""5I&“iéUwĩa0Š„ĐŒDDrÖTS/Ė‚Ų#ē†DD¤ČÆp‰‚" û& Œ2PDc'ĘB)Ė”‘Í"Le9žŠ‚Ŧ­á:ga]ĻIØA›$Đwa4i› Ú Î B 'Ϛe š}_Ũ4žöžÚjꎊēøš"Įāč¸ĖōMhôLy1M[ĩ–īšƒÍō{NÉųØXĖG˛ų Íy¤s$F™ĖŧƒÂŸ3‘ˆØúŒ>–ũ=>ˇ]:ôķ ÷™úO4) ũ<)Ŧjm—į…9ĶMP†™@ˆX hZ &˜Aö†Đh Oęūīīúvžũ+‡Ŧl/õ†Ē…!‚ >.„Ãļím=4.ŽgĒ-öíič˜íšcôŋß×iõ×ø>Ŗûi'õbīķAĮA°v[ætˇ‡EŊsLx`Ĩ¨H˜î9ŽË&ĩ`ŠØßw×˙Ä%ũüßßãƒ.ËË{႓W×úkVg×^Įņŋž÷-ī[,s8­?_Â_wėŠ>÷gȃŋĒéū™ōČŽéëÆŋ\ĐãOŦVŊÅ}5…é˙_˙ôžŒßĄ´Šû§í×˙˙U×˙[÷ČAë‚#ŧŅZ}q×Å<Ķ{ķ:üĪĖį¨F–g^csv}žnĪŪŗuŸš‡VoĖíhÎ˙Nˇ‹ČâuūÖ]üß'Ōę\ÛÚë-öbá¯-øAÚ,~m¨OKM4jbAč;I=;NŅ1éĒ °ŊÕ6ÕŊh6× ëōC×ĻF9C“ŒG¸ ˆƒžĐÛTáۄ/ˆģlŊAkA8ÉxؤÁą‘ÂĻ4øėčcUÁÅ;k‚œqŲĐ"Å-ŦZ ŠĶá6?m.îŖ ąQ"‡^ČQÆČ۟{^ŸWwĩĒ{LUŽéëŧwíW{úAÔGí§ĶĻԊ:iäĮĩ qĐ%°˜N[ ˇk÷ĒÚy5¸kīa´×´Ķ^ė'Ņr [˛8 ‘šžÎ@B"!Ą„â"*"L!jpe!pe!¸g:iÃ:´ė&˜BėĮˆa4Ėx†QáZiĸœ™ÄĶL  B51ņ„TDEDE!HA„8ƒBˆˆˆō[Zi¤ę´’IE!J*Ķ i¤šŽĢj"aBjǍb"""9—sĩ#Â"H–‘ĘŸiĻš‡ni*ę–ŋé´mųōhöc3 Ą#0Ļ#lŽĪGÆmö!é—°œÚhXA§}'ëŪĶŖ=Ũ4ŊŠqųĄ˛,ˇŖBh=L÷ ąōß&?úũ_ë÷úúĐØÚ˙˙č{k˙ũ¯ÕúFˆOīŊ´Ļz_^—Û4ÛŪq‚G ‚„"|a;/Gé´ļ×ÅÃûbâĢm0ēiÚĶųvwĩM(ˆˆˆƒ=eÄF”čb#ŒqŽū ,DÉK;ÎÔ’’;IdܰgĖņ4ķ>fÂ)›>gˆŠ ų3Íō~QÉ)|ÎŖ&C¯Ģ¯éēũëW— Ž+ õuÕĨëīXūČ÷˙‡IŋÚúļŸ˙kãˇø…ģWZũ ˇöŋöˇ{aa†+Õáû„¯Œ%[bĩĻ= v;Ž*ëbĄ§î‚—Ō頔ˇ{I>ėÞ˙ŪwĨˇmüĪAVėĪ@’žNî‚}á=nʡúN‚ŪV3FÔ%˙ĨūŋFháMũč'ú-éÅ*<rđƒŠ†GŖĶIG°AÚØGč4ÕG­.ũ5__]y‡ ŋiđúÚ@ãPqQÅ*"2 ;EŽ0@â´$k$8ãŽ0@âwŽôęÕēĩ!GWQĩ{^ģY\8îfAļ˜LΘM4ĖũĻąĶNÔąĶTÁ4TĶ"vLĪv¤$,ė´!¯4ˆŪ™Ž´ˆˆˆˆ†„XB""""ƒ+i`ƒ]ĒÛúˆˆˆˆ˙áđyášūĨ=Š1ēmc4cđ@ŗS Aœha0š" }1#„pŧZwÚx@×BôÖĸ˙áaŸičCAęéũ Ķú–=…Ëxy"ĮHˇĸŪžú|ˇá…Øv\7WIé¨ã—;-Üąü{ÆŅ°ĮīkąMũhoúé̝ŦVĢ_ëø"(ôßB[ûūh˙í"Ū‹Ö_O´Õî¤ë-Ü\|DAÄX"qmÄDÎ0˜!ĮČß"ŋnČáHâÕī!G[L˜įrŨ$Ąaž˛cŲ?A„ÉŽ†Mû;IDDDeĒÜDDDDGļ=:č0ąĩŸ4GD_ËLÖ;öl`ƒD|!åu¤v‡„g`Ėų Čˆ™’ ˆ, ~ƒ\Ž(d1O™â> &|ĪLá$Ķ>Iž ėāCŌž.ģŨ9‘ŖMÂiĻkũ4ũ[Âzwęß`ōnĖ0č›Ų=ß^í5vPôĶwE¸aÁ÷¤[ÁéAõũßŌųcÁҝ5Ņcėy­Í =8wEÃŌmëáKuū¯Č›5™gŅ´F3<âR1¯úkM Äc6fÄ3ģJ)÷õ÷ęŋ^ĸļ?b¯; a0˜BG` ?ŨaŠhD4'˙z¤˙Žũîģw†ž¯´ôÂ}˙é˙˙˙kˇũ¯w ¯ĸCŲoÃ|˜äAá‚EÄ0ļ0•†ƒ cĨ˙ũ˙câūåæË~— FwĶrcšnĻzÕ7ģ„ĨģynqÆÅõöžüņöT‡‹tü*ŌOū+÷˙įŒ?C˙]ßūŊa[ÎOzŲ{ä8ã˙ņ~ËÖŋēū_úũĩ¯ŋŅoUĩ[ÕWP„D0C˙šūo—õëL,2? -;–÷—|"‡q,pÕ5ĩN( |`Ą5„Ĩ{Oi]Ŧ5ū60ƒD(ãBØØĨ‹ÛH÷b*(‘z3¤;ãjAwRs: .8ˆqÄ[TšĶú{LrtÖ×Rtԇ^ĶGc*Eš Œ{žÖĶ hA„ÖÉĮ‘Å„ S  ĶNÂ`šhZ–ASA„h4"""-ˆƒDDDDC"!Ķũ”ÕSŽž˙ëûû¯ë˙˙˙˙îŋ˙ē˙[_ūˇ€€ŖYYYdee(––leptonica-1.86.0/prog/tel_3.tif000066400000000000000000000566701506303110300162530ustar00rootroot00000000000000II*ú\-2ÆÁhf2苁Đ2ĸ""""IQČâEĀđ+; Hˆˆˆ”f#VG‚?6Î'sŧrk}‘WĢ‹Qōn(Ŗ˙˙˙˙˙˙˙å”Č!ŋedŦŸé˛āĄ˙ŧ\—ˇŽG˛ėŪcLÛS˙8Õœ; ‚‚6Íģīũ&Šá4ë-üī~χ3Ņnų‡ŖõCąûūõôņęõũßQé|Ã˙ŋīîfRéhEĮdwQ˙ŲuRũ÷dqŲ[#Ž.‡LÖ:jši¯kˆˆˆˆ°PA‚kˆˆæD˙ōÎĨ D]ˆČ i•E,ŖŒ„$ ĩ´Ķ„ î¯ÂÂm°—°°ˆĮ„Eö ƒÜ˜æ„=Ap@čnß@„á>´ƒ ˇ×§žt›žûÖw˙íū†Åûi6Ū›Wŋznüi?ŽŊķ>ûũmŪˇTūÅ^ũí×,w¤õMöööūíoÃ÷}-­¯!Ãë~éĨ}žŨŋēÛđ{íŊw_aūŪ­ēßoöüâ^ū õˇĄĄđßí˙|7ûzzđˇūBs¸mŋžX~X~öô¯Iûëˇīí÷ëoJúųdYöũ}o-æŋioßžž÷ûIî¯˙uĩôŽãŊĩßŋÖõimĢë~Õ´ˇîûŊĢ %n°ĶN; &H Ũ0„A•žB: RzĻŋx ÂړɎPåĨŽPåPųĮ(r‡ËĄĘĄōĮ(r‡(r‡V`Ĩ4)ƒF?˙2n?üˇΏyQSĶ,žˆņ¤aŅDtk‰a‘ŅĘzEĄa 1„"×tO}‚gĸúÉĮūh.ũxPAž2>_8InŲĢôí?´“B-=ūšĮĮú-ōĮi"Įtįĸuž9B/EØįË6Gaœ#ŲxžĄtõĸܡĶj!lfÅ.&”‰eÄģ!„/]0…Ļŗzâŋjú ÕpŊęšz3žgw0í>~Áo¯ĪaÚ5ŪgQW^ÉžM÷ęĒËroŨ“{&;íßąW÷ĄŨË|ˇŪîîúø;ôô›#ž‹_™ íE5ƒōĪÚ˙߂#Žŋ Oûˆˆ¸{t‚æĶŧžvėWēū˙Á._ú|\aßõ˙ŋ˙÷Ø"Ÿķ?˙SŽaɎh&?iG(r‡(pwØ#õ…úÕǞwņß "ĸu6)ŽŌ¸4Öû¸âmYM91ŧŪk¨A°ÂiŠģģNâꕭ…ņ&æū(í85$: Âjq×*4Ķ@Î9NĒˆˆˆˆˆ4 hīDƒhZm1ÄDDDeĐŒ „Š\ĄČ9hO™ēŨú ŒÎ Ļ÷‚!”Ü´‚ŽûˇF¯× " šCƒĪ˜ aÃT4™ ģNO@~Čâ0pqũÁ‘ÄUâô×˙]>Ûx"\qÛ˛95Ũ‘ËĻĒĩ¨Lژ€Z˛ú{ą ;làÂi„ĶM4Ö 3ÔByžĄ‚ úŨ…3ÕĨ ]ƒâ"""")WUĢ_Žü%ĄėīØn5]_Â˙ęzŗŽ ÉĘaäĸÃq›\úÕgQũ~”pœzo+‹õņ×ų XÔē÷Ĩõn*ŅÜ‘Ņ|Ŋf…dta^¤taĶ.%‘ĆÄZ!‡(L!ĮiöCƒlČģϚa‹B Ј‡hDZúøOpAÎûd9°OéŌ[)ũA39P…‘Ž}„R1ʅKŋŊāŅ ŽŦڛS0æ¨ęŠęˆ”ũŗÔD3§_†BéOŪŽīŋß˙¤ Ą€~ŨA´L_˙~H˙ũj‚¯ĻžZiõŋ˙û˙˙œpKœ>qAˆ0×ũWĩô˙˙ĨCúL7Ęã:!&9Ęâ>G"9‘Ņ3ŪP¤‡8ė‚ #âœ#åÕõøŦÃú[ ¨‘†Ą4¨DDDDDDDDFG°X#†lHgqd|—DpČL…q }‡î"""$x;ŽGÜÄɄ"ŦŒ&zĪQę:ŗÔu¨ú›B7'°ķTuÍQ)2ņņ `Üŧ`5čÄG „r1 Â8B:.ÎËÂÎ7•ôô˛;˙˙ßv+˙rDD„ &ŗ/ ‘‰đĒ#ũvŌ_Û˙ôũ¯˙ĩĨH˙ôŋÂZÖŊßđf0CQŨŋėAō7ŌĐ ũšĮūļ¸Ė-îAqÄ‹ˆÅŠŨöžTų„B}ôŋI?â"üËÄtaäqHā|sH~k`ËįsŠEwt”–á›J"""#. ›0f#čH¸qČe0ĶX‰ €ãˆˆˆ<6°Ū`Ë׿™ŗLūdä Cq„Au<2āĸk ˆŦ‚Ɔ&`dŦž0äāãĪÄĐaČfrĮ'CšNy† s$ĐúŌąt\7ÅŲÖĻP}OVų¯Đ°n"$0æxŗŒ‘ĐŠĮ¯])J—>ĻÔĘīļlŸ:ƯÃá^ũ/¯ęŨU=*÷Јî¤dMY°~Ø"?ÂūĢŦ$úŅ'ũVˇE+bķW¸÷5į°˛%itíyČ§mą_ę…˙ŋ_â—|3œQDD„†Xåŧđ1!$9C˜r öĖĩ.ŗDGv™q‚8č¸ ›ˆˆˆˆˆˆˆˆˆˆˆˆ‰Æ9 1ô§˛nA# ÎYË#(5D Iyi9w"Aŧã<5đÎAąČ^TĀh^ŨÕ×[[=GÔĘ "Ĩ°q)ōY‘@ĨˆčŽˆæGDtGDtGDtGDxâ#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#™â:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ8`ŽˆčŽˆčŽˆčŽˆčŽˆčŽˆčŽˆčŽˆæGDtGDtGDtGeŅŅDtjŽˆŽˆčŠä "y„QˆÂ#Ŗ^yŅŅÄGDtGGŅôG ŅŅÄGDtGDtGDtGDs#ĸ:#ĸ:#ŖčŽˆčŽˆčŽˆčŽˆčŽˆėē5ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:<7B&¨f}ŌĮ_ÄDDDDEĄÄDDDDDDDDDDDDDDDDDDDDDDDZ""#ˆˆLŊŪ#ˆŽ""""""Јˆˆˆˆ´"""""""!ÄDDDDDESZ_éH¨¤ž—ëĮ˙Ōüv—]oõ_īû§ŌĒKž­ũZ_õ ĀåPåPåSõ éíz]ÎųŽĐK÷xˆˆŠūrŸDWŠũĸ+ŗ€x,C#åđŠvGėŽ2>Gg™˛8ešāoG3$59—FˆŪ§‘Ö_ à ņä  ^ū{'d* 9h4rs("ƒm9`ōŗ+3k2ŗ´å&(0)‹L`ŋę›÷X‘Ž˙ŋ×úN-kXbHžŋÖĢũŌ÷ũH7r‘˙ūģŊŌp˜§_â?˙˙˙.úJęŊ˙˙ë˙ۋL{Š?˙ū„~""""""""";ČC@åPåPåPåPåPåPäAöærā¸5–L¨* ‚ ¨(aPTAPTAPTAPTā¨* ‚œ†°äĮ4APT¨* ‚ ¨* ‚ ¨* ‚ ¨* ‚ ¨* ‚ ¨* ‚ ¨* ‚ ¨(h¨(r2 ¨* ‚ŧÔ* ‚ ¨0åA^TAPTAC›Ę‚ ¨* ‚ ¨* ƒTAPTAr ¨)Ė9Į!ˆ'APTA‡(r‡* ‚ ĄÍAPVĨm'íģâ""""""""""DEÄDDDDqq:B""!Ąíũõũ¯žÃë˙ō2ŋoaÕō(r”{ė8¯ļČëâ$ æĒ}Û•ņDdH6Ä/Ā’ņ Ė9AÄDDqˆ6ƒhęW)gcŅVb6 Dp<ÉCŅ!ÄvGDp¤s#"B#˛Ž%"ˆŽ„pĐfœ6†â""""""""""' A 3|ƒ@čė0ÄŽ6ąĩuƟžŋ˙Žëb­C ?˙˙˙-!°˛ŌH!&æČč"a™pB "0ĪaŦ›Ŧ„ CtEĐ4†Ņ1†’†î´†Œ’+¤:áĩæBc+éšĐXđDzƒ+§ŽąđA¤š G!Ošá $û>_Ĩ2Đ#YįRŌ´îgÄ*ĸÂ&‚3œĄų§KAĢ![™qtSÕJ…pAë !Ģ–āā@Ä õú ĢÎŁô“%Ī…„O¤ž°°įc`cIB|ㅄG¨k°ž9˜­%M,H% AĶĒO@ģTEŦGRÚ!nAÎ"­„č" cHcã–Ŧ>xAĻš’ĸŌ8ÁUXĐd.˚`Úiz‘@lTMX&™’ãv6*&Bųë8+†YF•Z´† 3ąÚI=ôđn¸ZsŽhÂa˛‚|Î -IJą…hA5YÂhėUbķ ­C &c0ánž" Ēד.ûĻ›jŧ|Š^ 4ęŋLŽÂé’q*4ŅÉÂŗ™Âņ l+9 ‹á›ãéû č 0†„ŽbŒÂgfca’dUBô24ūBŽŋMõNú„û!¤Âa†OĒę„Ažj¸d(+dA CÔeÔژņ\6Ē įHzĖå˛HpÂųnúÃM{îąĒļģ^ū ą߄õ[˙J}éô_äho†Õw›t zëúá:Û^m§—‚†VSĩß8Ÿ˙¤“éē¯ûN,dt]ĻPˆų™mĒĸ(S˙ũėΕ"ļˆ#ÔIĸÆBũëhÜ˙õcI]Į\WėŽˆčŽˆč#ĸ:#ĸ:# EČáA;#ĸ:#ĸ:#ĸ:#ĸ8R:# E#ĸ:#ĸ:#ĸ:#ĸ:#ÄtGˆčŽˆčŽˆčŽˆčŽˆčŽˆčŽŒ":!Ĩ‘ŅhOΈúû8ˆčŽˆčÂ#ĸ:#ĸ:*ŅŅŅŅY„GDtGDtGDtGDtGDuŲ­ŅB#ĸ:#ŦēČÄGDtGFF":"HŽŒ,ŒDtGDtGDuŅŅDtGVqŅŅŅŅŅŅŅŅ#ÄtGDtGDtGDpRņę@äcüķ"'5f>čC[Bœ„„Ô§8ä ŽW”9œˆ9 Qc™ËîRrœÎ~(r‹‘„¤ä8ä"sq!đĄŗaō œÔ)Čzˆ79ô •Ėæ9a88!­tŋq8DDFaDØqlDJŗgIĸmÅÄGÖģë"#˙ĨÖŋ×˙ĮWJĶŋšKūâ§s;˙˙˙ŊHß8•Ęãū/ņßûU×Kš6]}Hj“ū˙˙ūTĒĢÊâĸ>ŦŽŽāŲ Ĩ…||–~ũ×āŠv]GŅÕYôqŅ6Ŧâ>‹ƒ­b""""""""""""""""""""";]g‚pC3–‚ܘä* r`Ô9đ\<†Ŧl™AČ/Ą˜XáfŪoŌlWB,ā¤´qČ6‚œÁŠĖyɈ‘ŗĢ8™ˇį$Ũ]/Ą:":#Žĩīũ´‰Ž[ēŌ¨™/üEHs7×ũiŪPįP]uwĖîrŽš÷ßwjŗĀcŌî"A, œ¯vž ŠŽ]ŅŅŅHŖ˙â@ĘŽCDp0uDtGDtGDtGDtGDtGDtGYĸ#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ÄtGDtGDtGDtGDt/ÄDDDDDDá¸åPåPåPåPä(æĄĘĄĘĄĘĄĘĄĘĄČ åPåPåPåPåPåPåPåPåPåPåPåPåPåPåPåPäPåPåPåaĖ9C”9‡(r Ŗ‘0åPåAŦq‘Á‚8< Į#ĄĘĄÄdtG Ō:#ĸ:#ƒtG €ÍŧDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD{ž ˛ÜĐZ˛PG3ŽC/ʆTĖ9 Ôr‚¸ä5´(r~* ƒCá Č cÚrœ¨ ûßmüDDDJį įj"xˆˆˆ‰J{bõ"ėQeōRžŨÜS>Ęy\ ä1!›ė:Ś@{xbŧ{čĄŅF„aF„aF„aGŅ„aF„B#Â0ŠEY6äaGŅ„aGŅ„aF„aEōų9taFpšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¸ÔÉR:æ"8B37‘ÁČhÂ#ĸāšv]Ã,Ž `°] Ķȏ›Á°ŒÃXō>GČų|ŽdxÚâ""""""%s(DDDDDDDfEoá7Ķ˙ũ.ÖÅZ†˙˙˙‘Uķ!a+ķ4ÍJ”Ō-%0o‘ėT“4rģ3†v`"&đ–A„F gĸt`š@ƒzx@Ú (@ƒqÄ6*4Ō2jŲ7 ÔjC´ŽÔdi“a@č Ųژ‚!V4Ü aĻč‘Đ@ė ›‚ "+†'&Č^ U ļą&i°Č°(ĢĨŠDb#¤N*Ūāˆ4… EČčHŅõ- 3ĩšØ é°D)á! Ž“; ËIÔZDPÂÔČ-“ #¤Ã`„= ԈDcaæŅĖ‘!(ph‚û,T †M”=!# d @ÃEæ^*ĶĩP›„ "Ph žA´ęA6´ Âá4 Ãą3°ČPšl3(J\Ãöŗ}0XĸhĨ†īN–›qúëđ”ƒH&ĒÃŲÕiUC Ráy7÷YŦP‚@Ōą˛q„ëœpI‚ūÔî ×ÔÂŌidzaáU¯MúsDG_ôŠJ=ĶQŽ”\”ä|ŧs"(ŽEĀđ,™ Ø`ŽhDDDDDD]6åAPw(r܆;› ‚ ¨* ‚Ŧõœ.†˛Ô‚Å—5•ŠÂĄ›ŽrgrđĐXæ˛r $9ã“rĮ a‚ 5!›į‚‡#‚V„(äAʙƒ;“ĩgB§! €Í¸!6ž""#üĮV§Yš-cÖ-¸ģŠNPL…´hGqõHŪë˙Vúôēči*˙ޟë'5MH1Wū—¯ũõNž´•p—áh>Ũ^–Įéúį-8°ëŠä œķĢKUĒGhD{#ÄtGÍ@ĨJ""$œƒeŽi‘ĖŽ‹ĸ:‘ĀƒĖĖ0r.Œ"„ŖĒhr##ĸˆâ‘ŧŽŒ":ė֋ëåŽypx´"""""/ÄDDDDDDDDDDDDDDDDDDDDGJHsŽCŽaĖ9‡#юF9 1ČiŽaČ1ȸæƒHæØsA@æÐŖ˜saČĮ0æЎl;˜saĖ9‡0æÎzĖ9‡*ĘķĐX!‘D!`ĸ'pƒ8Cƒ!8šÜÜ č6æXYTzŒq8ÃĢ=D$Î$qˆDDDC2›×֔ŠB˙O¸kd{õ˙_KČ÷/_]{ēúũ†)}đŋ zãáĨžAˆ*z_ąG˙ü— ķ¸'æ-ūGF€…Ņ„aFíŧâ#ĸ:#ĸ:™įdtGDtGDtG]~ÂŨ|ˆ ˙ŸYtGDē#ĸ:#ĸ:#ĸ:#Ĩ.Ž#DGDtGDtGDtGDtGDtGDtGDtCČčŅŅŅŅŅÃ,ŽˆčŽˆč!Uˆˆˆˆˆˆˆˆˆˆˆ‰ 1āá¸įDH09P""""""""""""""""""""""""""""/ÄDD‚Ø2ŽCMĖr  ūg'&ĻÖJž@đÔâŦã—ā˜e†Pä8äØ}JrĮ1ʨĐY3ņÎbÃ,RFƒCū“Œfy0Č莈莈莈čŽâ.Kä%šŲ,ĖōUšĸ09/‰Dâ0‡qĮuäQĘĄĘĄëõX^ЈˆˆžˆÆp3ũ˙Ū@žģŋ×Ņë˙¤ë¤)ĸō žģ§ÔŽ –TA_¯ ˙äWuIEūî˙Ė"ņ lzūA™ƒøŅ1ŨŒqú}%×§æyō`2ŗq!™ō°$‡)ÉaČl8ąp0åšnh,l¤A˙ͩ 2C˜aœ‚qŦ§ ĸ œ†œ9cØ9cšĖ9Pcœs)ČŖ›ˆ.†Ned3Ôu*sÄ~ūÛâwáĢn48Ž""""#Ž"3TA¸įÃ8•W"_ČiWūŨŪe莈čŽŊ/ŌįŠāĘĶ>ž§Ã3–9C”9@á~펐ˆl'Ũxˆ¨ˆˆō6DMA—īaÅz2ˆá/|Œ ¸iOéÃũŨ ís’ ^?ФCɈ¸Ęˆ)ĐËį3ȎˆÂ#ĸ)Hų*ĨęW1é™. ûÖC(r‡ųČ3Ą)ãE˛ •Ilb6­‡2AČq'”ņIB“ wTz&ŸâˆwZÖëZOôĢūēũ^Õuũ) %×˙é|ägp]JôēõÅ­bķÁE˙< š]^Œoņ×ãū4ĩ„ŋdt¤xĻĄ28h6ųxŽ!ˆųTCŽpdŠ‘Ņ.ˆųü—G’ėžK‘qJ€s.FŅ>ĨíB—D|ᐋ/ëD/6ĸC`äyņęEr$ƒqČ@ŧ?ÍČIãVEr •.—ĖEķžŽčˆčŠ|ë•y'”ņɖIC‘,’dXbL~—/ßę?Å˙˙Ö1×íb_ĻG’˙ĨÖŋČßwúëĮ˙˙ õ„˙éwÕ”ôbĪ˙¨9Ŗ"d0tī_‘›˙Uø°ƒÔēŗypr>:ŒŽŧŽ Čæ\Í2čĀ˂‚::†Âųl5 åÃLށ!€gS ČųŒ† ČãL“ )@f™ŖYâ""""""""""#Ü×ÜĐOdqȰC ŽC 6AV@đG ļ NHr5ßl;ŅØØ*‘™,Žû;KÎD¯@ r”Č•LXymđĮŖ˛P.ĩéh†›•˛˙÷ˇe2É@ũvAĮ+f\‹ ÛÃ…ČØ á,DČģ#ŦĢ ŊŠČ€ĘŠą:OŦĖÃ[ķ`ÛÆ"""$ Į0üEY ¤‚‡ Ž<k†˜åY irp@ņŲĮ Õį‚ †ÁÁ œîAtįr‡,rqČk@đ sŽ@đՃA¤aāĄĘEÄDDDdž˜“6"""""""$°3DDDDfE¯Ę\žA†âéō\[#nžÎē’ãû¯^žę8ĢV~MWņ˙Énjš¯ã“U˙ŽyF„}D˛™ĸ8e‘Ô˛šÔöACDUB ŠX[ät0ėƒų¸BÜ@‡åp@Ÿ-Ę4 ‡áapO-ÄÃX Fpa‘ŗ°R>,ŲNq((EÁr: „ĄpŠqpˆŖa ‚Ã­ĐGŌH":hÁ'œÉ7Ōツ‚5ŒƒbĩÎČĖ”ˆ7Ô J †64ËüÃüš B|>’ °ÕS ũCH.é°ÅĨ[¯ÄîÄöúA"P[boęĢW;ž ĄWléuA𾍠j|Ѝ/‘ėÔl’Īoé •sSN‚xΟZĻY×^ŽÉ…Ki­-Y>‡ĻŒ;EÔDfs r=^E¨~x`˜ Đ0„‚h4ŗÃč"Aēø+Ŗâūļ¨|,*Ĩpƒh†§×H %ĻB]8(LąĘ‚‡)Č$r ¨AžĘ‚¨ņX":§A› ČW(¸ƒ ė--—ĒgJ &„D5b6"?†„\7ŒņĮáŗ˛Î‡ī˙::Č5-úĶs#}WīaÅDdŠŧĀHˆųuų įl!urÆ28\Œē˙°ŌĪ†zĮæŌå1O ŽAÜ/ûá Ņ^vŖĖ†ƒ8ŽČčÂ#怄 #āĻ(ˆŒŽ*œxķaņyX*ŽC G4pŊÍŠ{s~ ЂĐpČ8åŽh!G"›Ģ ˆĀ0CÉf"?ÜDdiŸD ÎGĘ(7˙î|ų6,ŽŽČāŒ†T)I"<{jŸ1:#ĸ8hˆŒDFCŽPåV˙˜ ^""?˙˙ūŋžĢ Ô9C”9C„ÉŽPåPåPæĄĘĄČĮ ūë ŨœüT„gS_vÔĄ}ąö—wúú}ë÷,ĸQ§õTõšd$RČ6œ›ôÚ -öĒ˙­!ŧ6úč'_Õ= W´’Hˆƒ é7I˙ŌQ ŋDŅpŽY˙O¤Ą0A•*BÅūäÜd̎RuÛTÖģXŽ ‡ēEl}ĩ&ø.ĩûxLją ŖžŪdĨ”KPŗ*0띙?÷[ų…Å„ŌpŠöÕNm™% „A‹!D×ļ‘ÄßŪē~xRVéé7îĢõ֞.–ߡûCėįas=:˙ú¨"5ôęSPßm˙kū¨i_ëĩ _ü"ļ%˙Üׂž ĪąŸTĄ-˙LƒÉ!‚!ÄéįifŋLf÷˙­‚`ŸX&ĨŅÅRJ4GUԈˆˆˆ‰ €Ī°/ČnŦĄĘ‚į+Î90Š•9cœr1Ą†9\qĘÓ9Į&9Į)Č(ˆ9‡8ä2Į$9Į0įs9Vg Ō9Į$˙ĖA ˜‚Ü˜Š‰ŋÄDDDEņ!ÄDDDqDAœ”õ!ë8C•ŠåPåPåPeAC”9C”9C”9C”9C”9C”C”9‡(r°ĄĘĄĘ¤Ŗ”9C”9C”9C”9ĄĘĄĖ9 ąĘĄĘĄČQĖ9C”9C”9C˙ęQUi)k˙ũ÷ˆĐˆˆˆˆˆˆˆˆˆˆ¸ˆˆˆ…×Ō¯z A¯ŋũuÖŋøīލ-ĮÛß Ŗ˛?ÖÕi\ÚVŋŽšÁHŠ8 õ¸ĶúU)ŅŅÄa莈莈莈莈čúÎ%UûīĶŌ ˙ČčĻGˆđ&G¨#Äxâ›_ÄDDEÄDDDDDDDDEÄDDDDDDDD\DDDDDF„HŒ‰ÄŽ6É?ŪØŋ ^īú˙÷á/žŨĨū˙÷"$Įöû#¨¯}ų*­~đÄWųDtGFÄaŅŅDtGF­ŅŅŅŅŅŅˆú˙ę Č莈ëkī!’ Ŗ˜rVAܧÎB˜ˆˆëã ƒė†H įąÎ9 ãUĄC”įöAĨȆ˜ãæJ‘Øē#ĸ:#ĸ9Å\""""""[Ė2AŅŅŅŅÁœŽˆčŽˆã#ĸ9‘Ņ)ŅŅ|DD}Ča ˆDDDDy‘Qų.U×OΠ’h Ė:+CúžfD|cõ÷õëĘizRSHSc MŠ6’ž!ã˙˙˙˙ŊŊŊŊŊŊŊy’’æBĐ vÂkŌO\ŅŪŽMĘWY6Ģ;¨).ŠVĶ]­jv —ũũšŨ7ú×*‚ŅN6ĶëփĐi†č–˙ÔŽ¨: Båâ0jégz~ĸ‚z ˆŒĘ3Fh˙Šp.ŲÔ@Ū †×Oø´'ÎF1Ģéļ&ŲpX+øˇļ­ęõ¸Ų߄äÜPÛĪonwĢu íy7 žu}éá ÛE¸âs ¨˜HŠĄˇwLˇ5:i™d›†¯č;Ž=ō­~dTīĀĮŊ œ Až†Ú!„, z!ƒ†ˆ.`ēpD6$0™€Č“ëÕ ÂmõôŖãi¨&Î<‰1hz,`0AûĘÉdĖj‚‚ŲTeŠĩpƒPˆēĄõÁĻą ŗ÷ gPåa‡Ė Ņ“Ã̍@Ô"@ÁäI |˜ũčM´›¤(-„,}7K÷DÎÉB ‡‚ 0×Ĩå,k 0Ūđ‚!)ÂZ úúŽĄE‡„ÃŽE[nI’õsëqĪW_^žjƒ@ˆo#ĘŨs 0ČˁŖ?—.A.):™Ū"9†âÔtPÄDDDDDDD~EŠävBy‡!ČAÎåB Ô"Žw!aĘĄŽpf Ú¸KBÍ9Aƒ!„G*†¨Ķ)ʃP†‹"šŦŸŽJÍ2Į ē<É_:랋n)cOīL§ĩBÖkÍ_qgũ(ĩžAÅY#ąP„Ļ'Á…"ė‘’w ęuĒ—F}ˇ účzŌë˙Â(ņÕ&õngkMīëŠõĻŨŌčqæp\+ap_˙yĐ}›Ō|O7éĶ˙_⍭×ژSãĪǜžrũũ*AôęŸĒMAuŌt.Š˙˙˙ëÕĨ¤:øÅĨõB""""""""""""""""@ģÔDƒ!Įę">ŗPåPä(åPåPåPåPäĮ(r‡(r ĄĘÔ9C”9C”9C˜r‡(r‡(r‡(r‡(sPåPåPåPåA(r æĄĘĄĘĄĘĄĘĄČƒ”9C”9‡(r‡(r‡(r¸„ķŲC•åY9C”9C”9SšŖPåPåPåPįԱʂ‡(r‡(r‡0åPåPåPåPå9c”9C”9C”9C”91ʂ‡(r‡(r‡(r‡0åPåPåPåPæ¨(r ĄĘsŽPåPåPåPæĄĘÔ9C”9C”9C”9C”9C”9C˜r‡)ÍdėĶ(r‡(r‡*X(r‡(rÜŦ(rœÖPåLr‡(r‡(r‡(r‡(r‡(r‡(r‡(r‡!G(r‡(sPåaȃŖ”9C”9‡ ƒ”91ĘĄĘĄĘĄČ äĮ(saʂ‡(rr‡-Ė9C”9C”9C”9CŖAĘĄĘĄĘĄÉŽA`r‡&9C”9C”9C”9C”9C”9Oū"0„DDDZÄDDDDDDEÄDDDXBÖ""""â#ˆˆˆøˆ¨ˆŽ;ˆˆˆDDF„DDDF„DDEĄĄÄDDEÄDDDDDDEÄvņĄqÁ!ÄDDDF„Gpĸ""kċäˆūOįA— _%ķVtÄd'ž¤""úūë^ŋī˙5uz˙KũkßžôD ¯īūFsÖmsPæĄx{"Ž\Ī=āū˛@œ'õŋžž¸]zú–÷¨¯éŪšĩät}ÄZqøęđŧî˙_SÆt_į×Ö˙Ŋŗ "‡ŸG×oyt}*œJ„DGļGDiA<NŒ#ëŲĮâäëęŌ[˙˙õÄDDDDDDDDDDDDDDDDDDDDDDDDDDDD{ŋ\Î[“ÎZ™G+ e¨ÕŗÔzŒ0‚Āå@đ⠜†€ešnQY†ä*s9†ÍCųę3–æÔƒ‘,Đb ÅaÆs á”åA‡!0đVØ9‡0į‚ ViŊõĩâ.;×^šDt"5‘SŽâ"8W¯Į|DYę:NŽØmiC7õ5†c;”9C•PåAC”9PPåPą ĄĘ¨(r‡* ĄĘ‚‡(r ĄĘ¨(r°ĄĘ¨V#ZüW÷ëû}ąbĸ":Ŗ˜ę">"?׹_Ûå@¯˙| Ę9„sŽW0ˆ įr #› ŽBÔPæˆ9C”9@Ę)!<ĘŦƒšB,ņ ŲâĖŌŸ3}g\ÂKOÖCcČČK0äø§/`™ĘâC”9‡!Ŧ9Ž0æ†@09 ĄÉŽ´ÜÚÎéšĸĸ:ŗ^8‹ˆ2m؉øˆ¨ˆü_"_¯^uũzÄv@‹¨ˆøˆũžŸuŅ.ĮūÕ˙Wvx3ũ˙õQ˙ú˙Úƒųų3A:4¯˙Ŋũ(ˆˆˆ‰n —ĪeÅ0˛•S`f?˜3qʂ7ú~(DDd36V ˙×ņ÷ī!Ŧb"8ˆdpk׆™=šx÷â(ÓúúI~5īĢÕY 덂 ūëŠú_ÉēĪ_ÖM×ũGĨĸ¸Įü ˙Z#ėíÔĩŌé,ÃΏĶĨéi^žŸ t¤uŌɰž …Ÿ/Ēi$˙NÁ'Û{‚đßU’f—o-ÂyŲĮ ö˙9‡ „soßvGk%ˇßãO'‘6ßēä(yÁA‹Kŋo„ôäƒĢ.'ÛõÂÂfÔŊĨ¯ū[ũ—k4pĶĩīü8Ī }i{=ũŊ=˙ ˙ūA5Ö¸ŠÜ/˙ų­Ēę”V/ŋ_ĶĖ‹Đ äNC(Ēg˛:#䘸¯õĶ_]]Č.8ˆ´ÛH¯Ļv$×;O…T´ĢKjĄīŋPÂæ'@ĨŽFļLpM2ÅoGO ˙ōĻ[QÂhEË=KzZOŽžzU_^dI%ēä‡}ĒS œpž˙!B¨W¯„ũŦoŋ L–Úkũ%‘vßÖCDt‹• ūôÂ!ĸK$Pšë`„‡ƒšCˆˆˆˆˆˆˆˆ‰AČ.8f žĩž""""@đVsŲ ĸ5š Í Eę.k< L‡‚ŧ¯*Cƒ ŠÎ\ŊLÃœlÅ&På9Z9Ã6ĻÔØr‡$įÚÍŠ ĮYˆ5–\ĐL^":Տū".=b"#ē!ČXBpNÍBŦ†‹ x2ŽqÎ9ß˙RĨ–ôĒŋ˙˙[A68‰Üh=øCĒ'­ë[õŊ~—˙š‰Ô7§Z×˙ŠúëæãûČ åū‚mtŪv0uę‚˙_ÅW×û÷˙…H5ĻŊÔÆu˙]×BŸ˙˙ë¨C…ĢZ÷ëų‹LÛ8ˆājČā`(v:Ŧ˙ˆˆˆˆˆˆˆaČ59!ÄAšgÁõ—ČėŽ)OČ^BL㕄8™… Å9ėît偘hÅ&ãácœAcœr&dP…°‰đd6e!ūhÂ$4CÛ&Ł‚cę–.0aö…"Ū€â‰ŒA|?¸RßA[I 'Ŗ—Erԃ"ŒF4&H ØB5õ•ÆŠ´ †OH&b&× ƒxõzœ*Ē –ô›"?˜œÉmĻFâLE_$¯GVÃŋŪdx‹†z0oúOŦBo]c;P4Â`ÃZÅRkMŋĩGeÃ/’đu†+—–„ˇ0õlzM€ļGˆ€`7Ô`žG‹u`ċCĐ6ˆŅv…N"Ų6=´ yķ´3"Čė 2°@ÁD“øÁar$(`ķ…M­a:\" b+‚ ĸKX!df ۘ`›‚ežŦfđX"*pôÃ!ļ¨aáa6Íǚ+T8@ŠAuĸ„J°ųnđn†ŅŖŅP˙ZĖ„†0æI Ažd† nÂ{wŦāMûūm$bO„ ũO] ß ¨o ĢÔyWcņ×Ļw†„;õĻ‚ u*%aĖū˜q_õĨæžM- F‘LĶ%C÷„Ņ?‚‡ƒ‚öJ9. ö84AÜyJ @\ė„Ųčhx1‚ŽŠ°øĨmŧ'áÅ~˛ Ši0ŸO&žúIâaÔ H^öĩ&9üØs Ŋ ZŒ`„Ō žÍĄôUʈĮí~Á6ûë0҇$0äb†}B÷Ŧ `ëU˙FēÕúú(’°Ad/éß˙Čŗ,L+ãũ xK˙ AļRZ„ũ*˙÷‚h aÎ8@ˆ]Ō—ķ ÕPK×Ėā—/„æ0āĩ_­k˙õaxĻ•Ģ Ŗ*Y.ū˛)LS‹Qz5ūXõü~´Äg2:.j„wT˙‘ô$ĀđŲˌÚ Ŧ<Žظ-‰â"C$3Ž$2Pr 9oQPTOš…ŽK˜äĮ!¤ä뇉,ŗ3œAÎBá ä,Ė0į1v\!|éb2$FˆŽˆėŽˆčÂ0!x¸Sģ1Å0!YdžUĮãėÚ03Ņ!C×6ÕqĶ:æ ¤,û5ķ nž„ëP‘¸i™éuõ×ŧk}xˆ´"&’ĐЊš&‹ˆˆ‰0ŋĩßŌãëĒú‚JŋXU˙ÅS¨DuŸIÖīũ×éh×ēđ¯á|áāŋϝ˙¸K…PûCõ˙0ū“ĒÅøQIBũ(/ŌF˙|úŌOņĒ˙ūŠ€VĐ[HÂ0‹´Á=Q¤ŽÄG͈ˆˆˆ‘^ž%Ú!Į!G(rcŗŽ ÄÎh‡§<ŽdpÖB$ šĮ*0 B ÜsøüaÄDD{¤""""""""""""""""""""""#õ x+ŲĮ š‡0äāđXįÃ9XjƒmKŦ´‚71ÍCŽk;Åž‚C“‚°ä8…˛s!;œr8 Ô9 qČg˛ Ŗ.åYô>§ŦãG.cOV~"5G2œĖD}‚„FˇwÎ:zLEÄ9Ō âųĢ5MVG”ģÄH CQ g ĀF¨Á?õõÕ˙˙Ĩ˙~˙˙úXŗ4Gŋ"ŠRU˙ũoõĒ˙úxW˙_Âô!ה†ƒ˙÷ķŽˆčŽˆå•hŋōOdhũīņüo¯Î…¯āžĩ_¨B""<ė"‡˙X4ä`~ûËŗˆÚĨ˙z‚õ3Õ!îĢ˙c#Œŧ b/‘â8eØ!Xˆˆˆˆˆˆˆˆˆˆ‰ ƒČá ŧp#˛8+‘ÁBä2AVĮ x â"""$ĀąČPPåT9C•PåCüîMČ9rčXåŲ\zˆƒ8„'"0 q ‘ÁŌ5‚2;:ČŖ(‹Æœ‰xƒ H‰â„PÉpBtŽ"pU:fžNÎ\ƆËĒé^Ÿ˙˜į.j*yČí ^ąÖõN!܇Ž2š×ēã"Žõ¯˙éģƒ_)/ūž¯: WäTđCĘąoŋüˇŧWR\úy¨r â"¸‰˙‚úô˙ŲÂ:Wūˇ­)‘˙õúˆ¯ū}<¯ú‘Á¤×dxâ""""""?\ZB"4˛øâ""Ė“M;˙ôūör{%_ØqR$`ß5Aˆ|DqϘŽēũ~"Ÿo`Ō™> ũxøˆķ Lč'ŋü1 ""3DaDDeŅŅ„G@Šŋ›DtG^aŠ+DtGDtGDtGDtGDtGFŅŅŅŅŅŅŅŅŅŅŅŅâ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ:#ĸ8R:#ÄtGDtGDtGDtGDtGDtGDpĶũ‘äPō:#™#ĸ8R9‘ŅČāļ $p<5Hāx`Žƒ)Ál5˙ aŖĘ¨(pŋ0ær‡!! #Aw-Ę2 Ôä9sŽ[XrŒ3hBhqʃa<¨6ĖAˆ ĀåAĀ2œĄĖßļņfÉÜĀđĀЈˆˆ”ņ#'ˆMČÉÁ`iA ąÉŽS˜sh ”(r†Ž?ŦÄÄäÄÍŋ¸¸ˆâ!ČŪIĮ\Â>dpPHÄN7‘Ņô\9ŨqQfŒžIƒtH‰ĮXė€ĸ"8ˆ˙iJ.Ÿ˙ņqQH\D\GŌ˙_io­{˙ŋ“"ĄūŋÚ\~“cüŒæ#ūŠ•zūÎK˙õÆŋÄo_A>ŋ_˙ũŸ˙ĩéq˙Đ˙jGG’¤¤pÍA‘Ã$ūĄôUĸ‘*‘cWĘL—‹åŅĶ#†@cņĻC =”ƒA°Â B‡(rjĘr Žo8å@ØNaČ7&AæaĘĄĘrzįĄŗTXŲļŽ""Q‹!G `šCœsDsÁ; ã“ōĩ0åY€Š׊ļä?ŗ0Ųrr1ɎBaC˜rc›ČĮ8åYXaČX6Ņ5ˆõŌËīûĖ7qqĒ•Ë˛1*B"".""ã˙˙X†—ü‚ã×KēXÉŌuĒ˙õļ˙ã}/ĒÁ__˙8˙ZËŋŪŽæpK…Õ_˙ûō8Ķž`23}.¨kZĒßȰō##ĸ:.Čāŋ\%j¨…öaÎâ4Đüã/ÆGėõŖEFĢ\Đ2nņV?臆H)ų¨¨ƒ5å˜Đã˙3ĻAÎEAnMZ˛3#‡/2%yĢ;ˆ‘‘ˆ¸rx‘‘@Ļq.E㭈˙ë¤ëŦDDkęŖ¯øū˙OČjˇWīú­}˙ū*č/ũļĩ-Ë|&+˙Š„w÷˙÷ģŠUūŨéŸE˛Īā­ŪéVĘf!¤|ŋdžGˆčē0“<”ģ#q-ä~™§ĄøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆČ{>{lāŽįr‡*͇sšC•ĩŖ' j †æÚĪÜîN šėŗn¯9YPc#jmšÃ2ŗa ĘĖä”Ͱ?ÛÛ}!ūˇÜEëííĩŨ×ę3ūïƒÅN‚ü}Õēøđ_+ę5īaŠ;+EĀđĖ.įLŧG_ŋåIØdo"""$œˆ9Į&8Œđe"  Ž9!ÄGä2@¸â""""C 3œĢ)ȎF†6i˛Î9pPåA r‡!Ēr¤Ēw)Î9 €RøPįІ ĄÍPîC †ŋAĖÜ&"â""""d ‘ŅágƒáÃ9Ŋ_ƒ”2H”WæB§Ä~uĐ|y˜=õ}Ėęņܲúĸļ_RČ‘Ãj†ũbDy û ÃŽØQ}Ô/ÅImAnģBĄč‚B/Š[ ~—˙Ĩëü´eë^+×k°¸˙˙˙˙˙˙˙˙˙ūZ‚â™ãåuŒ”įa¤AŠŠÄ8ĪæEš#Ėáœf‚)P2(L• ØČÄ~#ŌC´Ü0˜A¯L*jœ;ōųŸfžw~IĮuí:6:Ķģ Ņ1ÚiϞŨÔ¸ZėÃĩtMŨ§įU§ļ­üãŅŖ=úœwS™ķģÃŪ/û_<ą˙ßėo¸ŋî˙Ct˜¨ßlÚŖˆŽŽ":Ė EõDt}ÖŲ„QĖķÉZŨ}ôŸŋ¤‰=îëđÚí42=„0„;H!‚‘Āa`t:ßĩš'˙×Á?˙ O˙tõN5Õ4âõĩAŪ}Ɵ™ˆ\ ËÆˆôn73‰y‡˙Vá˙]DÏ~aƌ?ҟŗF,|IÔÃá#>aūŨwÜX@ĶMGŠ‚˙]ĨĒ×âF=ßø§ÁšnŠũí˜{ÍŽžũß}īEOôø}5ÖüŨŌ(wɎõōĮøv~ü´EøũëôŋéÃ˙4fÙķ8LĐ-üNũ&Ō×wÁFũ˛;JÚŋF˙§ûķČ˙Ũ×÷÷zčÖ˙˙žôFã§ū*8ĶXĄi=ÄB•%ēT´aō1ČüZņ\Zi/]í¯ļē‘ī˙bŋo›ˆ™ŠFˤUĐiĢͤLqĮüw")x­`ū"ŊŽ)Vãúũ{]Ļõa !ĄakJĄBki…":ĻšŠ‡ÂøöXá-0ĢūîÄãø’ŒwÄdxDG™â„""""""8‰čģĻP†š˜}D^Å&˙R1˙Šâ‘öŠĻ\ Õ4‹Xˆˆˆˆˆ *âĘq˙Ũ­˙˙˙˙˙˙˙˙˙˙÷˙˙˙˙˙˙÷­˙˙˙˙˙ž˙˙˙ŋ˙˙īÃûr3û°÷ogŅäGEŅĪcpČčėDD` °66ņ\¨]°](––leptonica-1.86.0/prog/test-1bit-alpha.png000066400000000000000000000403261506303110300201350ustar00rootroot00000000000000‰PNG  IHDRōbw†~PLTE˙˙˙Ĩ؟ŨtRNS˙åˇ0J IDATxœí=$Į–ž#ŗ“4šoi : ČXS4G@ĢsdÉŨ°ãÉm@NjtfaIC?€÷Ȑ+€ŅƒŽ„+@Æ: Ž%&— 0šLfčŧī‰üĒĘęŽéĒŽJs/gēē>žŠ'"NŧĮ„ē8ķĐ7—GžũĘ#ß~å‘oŋžlōcęôáh6‹đu Ēĩ•ŋģlë+Ž[ÖųråkˇđũŪ˙ÃÛ{‹EøÚ9Ÿŋ‰¯.û'š˛3čģoCøÛЕ‰)îoRUļ#Ÿ1y+˙! ÁweŒŧbĨ¯ėtdŸˆ¯™Ö_ÜM|~äŗ-˜:å;3&U>yˇ6ACTx¤.ßâŲ?íÃWߝ/ Ÿš$_ųŒōY<ŸĩčõEu_ũëųŌ›øšŌ|‰đYō%Á´Ÿ ¯žOĐ|A>ˇÆWĪß÷k!|~gžz/–2Ø6i‡öžF3ÂgF>}YĮWÍŋ÷v“ģÉW‘oņuá‹øO['­íųš¤ÆĮ”¯\ãķ[øęíÆjĪ˛ KÔ_WŦ?Yøú7–>×Ļ28ĀbkĢßíëųXˇÉ÷å]ųܜOĘdm&m™†á›ëŦ‹ūĮnä+BRgk|øJų•/Ūö|éĐž“nqoäĢĻ|Ō×ĶVū—ųBū-Ũ?oŠĻüî:ĀūVš{Ĩm/|•ü„Zˇ>Wž•žaä |aÂבo­ūvį[%áۈíH]ū-¨M.Õf:ô/cÔnĖøō`]1ōU_é§|“Ytl†ž/czä33ž|I›VgāԚ|-mIâä//ũjä{‘…¤*§|eƒšEęoÎ7ÖŅ͏ßÂ×}2å[uO•&Wœ-“ŸôuyLųyIûŸđųW™Øš0ássžP;îĸh?Ģk‘oíą‘īé„īm%|ufÚ'b>āl=‰|uĪ'ũAš´Kj| ø˛fā{Ü3Š˙ ĩ|Ą0™+å/đ|ˇ ߤwžuísiŅĒ}b›ũ;|­­|œv{ûė.„/™ņͧ#_šÂķĨ[xųVMąÂw‹Ũ .ø˙ŠäK|4åģ|ž6E…q‘áũsƒūWåž>W¸Ė„Ä“Īr~s—bŽ0ĨEûÜ%|õ‹~ü&ųåĢøŨ؍ahĖ䋿âRHoZ˜—ižOÛ×]œ.øPo¡bũÉÄQąãäՕ­áĀ Éģ“/đ‰ąi>MŊđũkĩĪíČ'_”.ģq…a&œFúvæÅ@¤Y?O߯gd¸fõ?•S§ßÕy#ļÂ>MjđJZžį“Ļim§|:˙ļäŗū‹aūhČgęČgûnlĐ! ǎ1Š“áø‰]äûģ'ĶöõÂׁ¯¨ņĩ)#_>1üŸúĻŗļ¯ú/­ôŪæYäŖФ>sĪMcų’ąƒOęÍ\˜´2§ÛøjcĻ|¯NđÁʗÃü˛}åy¨ 1üîRŨ>Ŗ>‹é¤’ą}…/ßyô¯Ę¤ÉęLžės]˜+øŽ…{jčqKŨĘÛŊ2Š1/Í' 'Ču>o&K‡ˇū‹3ąžt™/Š”/™ō%p•F>Ëú“×gčäĢĘ$vãKų"ōlųģ:5™1ĪÍĶ]øjsfkđåäĶųcäs=Ÿ´j›ÖčĒčAA×"Uä{nø2 Čøj2v ōVnjļK1b[d|I×sšUâęl.Y6ųŽŦˇÆ>˛ķĮ&æŒ ö¤rđ_šOÄ8g ųŠ)Ÿļī }Āc´)_ę/SíRōĄī“¯’^AĢ%öĨ›|Ō =ĶéM|鸒 éāšļĪ #“Īé _ÛˇoĀ䀟õ'|‰ōUÛųŠ‘/™ōnŽĘ°ŋ6á{Û&]*ŸŅfFũđ‰õ :˙˛˙aāõ|bÜL;đ9ãĀg7ø6Į=r™Ü>øj;đYōU—7ūŠĖOørÎVč–|­!Ÿ¸gX˙ööEŧ8|Ŗ_ŊØ˙ÄPÂÛžú_YīĀ'&ƒö9ĢŽū3ŋ` ˙įsyë+TÆügđaÂn“ žUĪ—ÕKãˇÉ¤ËÛ^H3 ßIæd­oáËĻ|)ų×5§YáĢ9›Ę—ôWÚq°WP†ø‰îŋ°6RADM{>ŋđėKÖĘôt)VPl8*Čq­ĩÄ÷%ÖΑ/æ_ jčĻH[5äŗÂWúĀÂ'Ū øÄŋīū‹<(|ÕŌūÕf˙ĶųŖ‰†|R!\K/ņMʡá‡đMg|ŖgšžÄs°XįÃĖ`âĸ%۟ Ą&“ąōž´ü&I”/ÛäŗķņÛĪŋįš‹|å|Z~čרײ×ŧ(Žųáû'/)Õ?_I>7ås¯&|Ĩú·ŪųrđĄ‹?Ī0ŋŲæCøæÅ_•ßËs:Į˛ŒöܲfPžVøü3õOąbŸŒ‰ĸŋ]ĪW í›ÂĒ{d.>_>ė5ŨoŊp–ôĻžÄc+NÖb'q|Xø|¯rŽŠ"_Pž@˙^ëĪNų`_‚y->끸– ö~ áéŸb“ ļ/öwÅ”šAųV_ũûFųLîŌ{勸=M˙Ũ†÷m.C4x­Čj}ĨŨØqũÖĒųZaĖų´[`š§ķ­büg›+­˜ĸ&ŧ—?ĄąāuėÆôĀW•oRÚlØÖí ļÚÄ7 ؃yXÅmđ…‰#đĨÃļéfŠqvžĮž]ƒíœr>ŗ0m-—…mĘŖđ;>õAø:ŗ`6–Ÿšphpž]Ÿų |Ŗģ•ĨC—#𹅏],K‡VGāûm×'>ßÎEęōQņ›}L|Kå‘oŋōȡ_yäÛ¯ŦņŊ{ Œ­e/N•×Ûâ_Ž^ÖøĸĢá–ã7 láģ!"å¸åĀ|ųōÃåŨŪ-lãĢîØž[•°ŋcYŋŽK.Å e _UôKļËöĪ÷´ä’ŨPļđ™ŗ~ 7wõŋŋũˇđõ˙8_gN{žų üēBēĩĄ”oÕŠíC‹ÂúÛāÃGCwnÃ÷ĒīË|CīšųSÖįúsÄĮšc3ɔÕ(öåkÍE˙)[ø’IhāhƒOVĶ<_hM ƒĪīŅ‘Ķaöû`>l…oōũ4üԘ1´˛šī6ŦÛ?đņü¨Á ufLCUĖûËžl‘īģąūĖXÕ|ˇf¯tāĢMęˇpň&<ąô J hÁŊvn_ā#Ŋ ß`ūIĻĢØzöžÕäa7á+'|Ķ/ŧÄWT<Ÿ!ĪĮJđÉ÷b•aį5Ŗ LŪpwĨJøžr`ß„f$ Ä o“p#_;áãFû |iUT—8ßz‘:c+ŖĀ ČŽLJ>Š`ÁĪđbéč/üŠžˇÃžm‚ ~ëX8 '[§›|ÅPãæõÍ|œėĀwiŨ™uINųpŪ‹ŠLžw¤ |]ČĐö|9>‘:ÛĐi—áŲ. 'Ü{ÎMS†ļTžX]2ŋ?ąÉ‡C œ_^YUÖš+*‹¸¯Ü\XÖĸ¨œžˇ)ö¸ ˇēy¤‹SuŠãÜ+.ųJé„ļKą—Ē{â8:ÃObpĖ/|:÷Ųæfž|•đËÃQã}$ÖYŌéadQĩaˆėDƒ&í'>œzhgʗâ[žAĮ˜&œÍ¤ ˛ā“jh90:ÛŪĘg#ƒ'ŊT}%Í`›įāÃҚtËķú¤“oë/âŒ‘Vh íÄo†:vSžTcŽ2åK;=%>ޏŨų’đC;đŅÆ>ˇÁ0un„¯DS`ųĪa¤>Āz„ "v |-ÎãaY'mĻ•{9đáôVø>•7đ›ŪŌžΛɇ3_ōeäëNG>;Å;Äņō™ĀHƒ€¨"|'ćvø8›dD@-_ĀŧBtĮC|`ũÁW†æĨŸvĀ[ÆĮ„ĪƒĪ•ōáUä3‰Ëč1z‘†0ø:åë”Ožís§|HÎĐÉÔô*iéŋā+œĄPßd_Ō)Ÿcũ ßj/!_…č@‘$ŦFž˛Î¤ŽĢâŸÃuęų|Bjđ1žBæĨ+œĢ ßI"új'žŧ>#ßj+_#|ļwä#˛"c2tÎæš<ĪR˜ōĄ…ü™ímÉ>ë•O:°ĸøÛęoäûŒũoŖūN ÂIŗøøĖ2ŸáëVŌ˙‘ė L—ÔßáŗācŸõbj…ģŠŅķͰ­ãwūŒę_â;“ĪŽd×ķu‘¯˜ķĄŽÁׂ/ |ˆ8R>ôŲ¤_už÷҉ŌŪˇđõöšęļņũow|`E>ą%K|9ŧ™žĪ9Üļ€ĩ™ōŅT ŸüJ#´Ģ›ųŠ~~#ŸÚ?ōĩ/mĪ—„oqÍfäŗõ_Ŗ} ōįŪ”Ęw˛Áį>ønņOX˙ ‚}Ā`Ë#Ÿh˙„/}/kųåÃ<ŋ­ōũCÚ׹ōU•]Z­ŋTĮĮ Ž|Ļį[;¤^äģdü•­ZōyōÉüf;å+ÄJ\w6ÚįežF¯ĪøŒ7=Ÿ]į“Žj•¯Ŋ…¯¨Õ?ĨķĮāŠĒ`ÜzũÆĢˆ|Õ_Ŗ| ėŗđĨ?4ė ĮopÂĀ—×mäÛašĘwÛú­€%'Ÿ8ĪbŪkÆHĩŋĄ•#lQĖŋ¸_˜ģt~Cˆ ø0˙J Ÿ?Iēt%_öšįĢ•¯hG>Ø$ąâ†÷|kw‘ļōyøEŌÅá+­4 Įh°ąđ‰O"Ŋ1D`qāųÔqė¸âÂ:î’ļįK”¯ž"_ÅúËÛ@žž}įæycHøJ¯ë#é´Â×*_PˇTųzßÎ0ʗa6ākãÍ ģŌiQĮ­|VųūjŌžy]*_îFž›˛+ÛäëKņĪÅĖáöIŧˇãčĻņēĪā{Níßȇe)úžÃyäķäƒIpW´/ąū0ŋ‰sZDû,æú>-ōâ\܋ھīpŸĢŋ—…õeŅČ˙}ôŨŨœoæßĶoÖ:ÖūįĶØâ‡WS>ÎŋōiāCÄâZ°Âöķ…š_p Į2\ī6ūāVŧqĪÛg:ŋ |•:ũC×PĘWËĀFû üUJ>Œ3ʕ|f…Đíˎ^žW¯áŊFn(ØybŒÍÛ`žLחCĪųāß+_–0|RmÕđēÖŖQî|>ÃUlß )ĘoÂ÷ÁŸ ĐŋÉ;’ŦめnĘ'˙MÁ'đ>õŸÉg"ßMūÕî…7Ņ^øĸmë¯pI™Sö@råk#ŸŒ^Œ_—bŧpũ!ËLŒÆæ€|[Ë$øūŒŊŅ"`ČŌŪɀ:đ‰_d×oʗ…/šílÂ%}ųĪpäß /nW Ÿ“A—˛}ˇ–ĩØ^`Mtš)Žh‘Ų}<|ëÅ1lĐhün-Õ]ųË}đå|ˇÃķš]ÃÕv|ˇžK}Ũˆžž¯ũ'‡|ˇ?XüÁGWųö+|û•GžũĘ#ß~åĖ÷ãņ0ļ–›øúuD¯ęđöžaĘ |Ãmæ¨&Ã#ũŲ ū/ßŪÕXnāk×øœNø°7ļe+c°œ[ë/FxéŽŨ`š§ĪųäĶcdb1yt+_ēíjĖP­ˇņéZohļĄēĐ9_m „]×.ķyø24y˙ĻīޘFøĶäÛ‡ˇŽÛøŠ-|y•„Uâ­Ō ›ē|TŒf|ØĄĪÛųaE_Ænŧ,ēu;ߎŗÁ‡p+œ: Z fŖ(œK:ęQ\}bôˆŅ•Ģ&§ *CWNß$KÅų4ĘėŨđüĄ;láķæ[īĐß1IĖ–ƒ¯J:J‡Éī!^†¸V>™™đ+Ž•ßs+¯ÉwˆūUåKwæĢÍÎa&|Œĩ*ąkvÅMī—ÆÄžwų›ōIGđō5\JE!lĻu2‰ÂČo¨?ļog7ÛwĐ\ŋŒĄ~‘1] f_g„ŧįkxnđoCÍūĮØĩŌS)*G'¨Ŧ7PīôUžSõ9hoũíLën| ņšÉ]nžƒĪV8Ôō¸č,-ų˛ZīęįŋØā68kâEsČāëD.q­Ûōđޏļč˙)|ŲžSžˆĸŽæÃų˛:—F-\!.ŗ]€¯ą‚lĩũ3°ī/7ŒqÕŨkÔRKL‡pą‚|Œ_ĸE‚ãj…P0¤,"E)âÆŪĒ)ēGšj*âBtXՒ"ĨéLR´Qƒí ôcŽ1—äÃCō×|<ōáü€|°Vz~„×Āæ`đĨĄ”Œ‚˙<—áÜXōũ}šÄĮŖ*§B\8 ŧ&_5ė†ļĨn\Åc,Îŋōk(šČšÂq+ãrÎÍĨņųZU‘ M¤ļĸúHŠß&¸Č§F™Ō}S˜ÜâZ%Öį_|æČWÔų¯&ōĨ‘¯Ĩ’´"ž}gū”ŊÖ]ĸKhFĩŠÔ=ĸVÛ´B\*ę(ʇæŽgˆ_ŽÖĮŲXĀņgN]š|¯žņá4UųōH§|ĻįÃŲYũ*ž‚§Ļuá/rn 'īī Ë¤rsՙ)å)lė†}rÂ×PÎ í.Ã?ŖŽ\ēĐžõZũáX‡|­Öf8jMUg>1ZЖ#_ <Ķ&UaŪ€O ¸&÷ŒŨõF>†psžVšŽĘoUiø?Čō⯜QŊĘëˑ/ꂃ|5G DbФ‰ã×ČƒĪ•īŠę…õŠÕÁŊĐž2>T¨NĨ×f|BץūptY5č ë|æUŽŽQlā㇔Ęį žŸ#Ø|'ļöĄ—8Bl u2ΞHũ“Ež,|ŊŸ¸‹|_ä”dčų°DŽī¸6ōÕ'ļ‹|ī.|ą…ģ´õį)6Į/eč “Į‡šœņu#ŸëųfʗNø0,ËzĘ×䈔2ՌFÁŌņz†HĩČב/~ÕvöyäknāãüąĖgNT1o‰A'†Čžō˙Mø ˇĀ§ķĮ8>riƒ>fŠF•Ãøˆõ×ķŊÜÂįˇōQČ ũ/ |IĶûk|PŽ p˜9ô|…?û—5|ˆn"î×øōm|Ž|îž3čŅMęOÖ#äKŧōą+Ãqbáɗų9ßEVŸŽ|­L›ö|Y¸\ã #_} _XãCXŨhLũū™+_*îĖ”/wp8āí q9đ•ũø•1€ĀUyÁ„¯üŽįĢĀW.ōUP}~ õ8>F˙š }*-īDĐ?­zž:Ģ.Ķčŋ°ūz•\-1Šmí3™'ãˇ*ëų $ę Vč:ŸĖá–|>hũ:˙Ââ_/ņŅęjLødEų\)—‹|TéĶN]TĨxuŅ`ū•wÂׯúct3%ôäÜäĢK™@~ ŋ‚Á”Mä ĘÄĻĘāĜ@eÔúõGäS˙ų2"‡‰*f÷)❕¯Ãü{–´q‹ƒ—î0(ßįoØ?ũIí"”ĩͰ2¨tĄ:KqõŒwJĩÄ5bī”O;.S7øøM1(ū_ƒ…âŔ¯øZëŋ Ļ×M|ŋ!†f(˛äFD“?Ëē Rj¸“Ŗ›$˛€t zDŠÁKŧSÄúvmŋūH¸Š!˜ˆpåķtIĢËFø|õ¯ŌĨųmĮÂ{§žÔ›…pÄæËŸ”ÁKFīæ‚l\ŋ­(ŅWiũ9ōÁŋGdž9ë<.­`έ?ĩ‹ūËŪ‚€™˜’:!ßOũú7K‰>§|~X |õ„Oėķiâ—üĶ•vŒątîŠ÷”čCXpâ$Pi"{F+Ŗ3ŽuퟌE˙ų~ŠXŠ"pąÎ˛ļ?É5äŖB†ōȡ_yäÛ¯<ōíWųö+P>ŪÍĀúöĢ#˛,•-|Œâß{ĐaûæhDķr_2ģ5ļnéŠÔËŪ|ķ ũ2ŽņĀ|Ôd]ōøŨĶIŪ7_:å4q°ēcžÖ]ĮĮV>7ûÉ.ķëĘR|ô|C֎õGžå> 6čfU~+ßĪž!HáƒøŽī¡u}ˇÆ÷ĖP€Ā–ÉPT> ^ڝĪ-ņŊßĘ7dNZ*ĢõķŖOMŲĒPT5Ŋ¸YžUž¯wāŗ,5#ßę@|Ę[Č(ˆ|Â×å /ú"÷YÎÄšŋã6âīÅžtĘ7”ĻLĀ3÷ކĀí·€ˆŽ|9ĮoĶī{ņá˛yƒŧĸž˙Ģqũ]Įī_ĒųÚ.ō-÷˙ē3ŊFé—õ§$›|ãi‘ ‚¯4ˇpķšj­(Č&˙uĖĢÆĒHÂwU꧖˛VŌr˙#ŋ•¯ cĀ­ū~#Zu¯E͌‡bØg¯—Č­ĻšÚ-¸ ^SƝ3ŠŗqcQeTÖĒ-;ķ]8KĸhÅĻDâČ÷ũn|TĀÁ_ę2÷ŠōEĄMZ‡j=Ŗx€Ęƕ^ų(ÎÆYđUŊŦUŽĮ5Ąž0ųŸąĄû“Cĩšņãįĸōˇķ1€*W8õ#’N™×‘/­‘ĒįĘDĘxHĻ|¨ÖTųTÖ Á=<°õ¯LöÂĄŗ´Ļx'Ã凟é.Y›~û|<7LųԒ/ƒ—T+OūL#|—ļ:KĒĶxėö‚¯Įŋ4@LųTÖ šQĘ÷…I­öžŒeōCXyÄ1éôđžē áŪũ/ílUĻĖj­Öø,#ĢŽ¤ô“_ĻūTúAĘ 0ō1EcgĒ^֊ĄEu<‡ÉkŠ?*]9Fô˜4éĀw.Ŋ<Ņô o;JOØī¤'>Īž¯ čptv‘Īhú´&ōˆĄÃYĢãémƀ°šˆPîâë“ZUŲsĖŠüŖ"ßgÚi…‰\œžĖ’/_ÔbƒļƒeâĶpŨA-ƒ}¨Í_6đ5=_ĒØ>w§zúų—ļ&b“%Ęg™äŦĨ6Ų*˜(kĨJ<čͧ&—.RåėŽ^Ž|ĪŲūāk™Vø\§Â•†Žõŋ‘¯îų¤úÉYęë WeŲ&ü.‹ĸo˙Į-ŖË{Ų(ōA~­a@#”Ž7*Æč|WÖ_ pM3w­4¯­"ŸíÃˇōšČ§"Q#$(Ÿ3ÁoËP2ōyĻ8ēĖ”¯dIVČŠ\ŅĒ$—é!ęUä“ūlŨŠÁ× †|Ĩō%}xā|aß)–Õ •mˉÔ[x#ßE6•e”ĒŌZDu6 bēBūĘ3ëJÄŽœâˆ::đœū˛¯ŋ¤\âCŠ\ˆįÄų-…78ãËŅ­žø<ōUë|”=Ē7ųÉ߉Š:C+Ũļ>eČüŠ"~‚úË+´šÂԋ|pLč7ąūĸHTĪWGž’™Ÿz>ŗČ‡8+tĘ4ōĩ‘O& ķ2õs>G>Š?DzP—-iíKx¯jĸũÃ@ĮÃî“7—_…Ęŋ ü—nÎ'Ļ|Ž¨w)Ÿ)Gžæ2UžėģžĪ26 áŨ&_+|˛J"ß/ĩš~ŋĩ:>rŊ‡a.>}/ōõ˛QŒäø|ŅĻžŽˆū‹/3ōá#SPcŦĘČWƒosū°xĻ4ėųŽÛX…īųÚ2 øCŅžš |éØžÅĐ˙6ø2˙ŋο|t3•/%_bNŌ˙ĨV˙`äS+Fž^Ú(Đu–ģ—š{•ĩQÔ¨ĩ|ōi=ŸÖt¯´}üÅĢĪ27á[5Į8ō™%>uüč_™FųTÄ š’nā;ÍęĪrš5Q¯M•O?Je™šž/k×ø0sžx…kļÉ{>æÔū×ķŊ\æķœŨ)ÆEž ĢūKî.á:˙~Æ(+*A€†ŅLîrā[Q֊qLCûãƒØāģR>VzŒŗtĄē‰¯cØŧĻlŒöOũĶ7ļ~"Sũ9øÄæ[O˙Āc‚…x¸U>ی|Ãü6đõöīˆĻ]ĘģŌöZf7ž"Žz>ũį:ú§EË9ķÔŧ>K\^Ŋ„g›TĘW§SY̚qØā+U),Úiđą˙5§ąŌå+Áˇâ|wēØž\Ō”ę=_¯šÅLŒžĐ€0õOá?GQųč+M’XŽ(k…öĨ^Χœ|­mäĢ#_ŒŽåĢ…šÉ÷ĖRŲĒz&žm*](ŽßÆõ‘/ēÖû÷”2Ĩũ+5Éd”ĩęũS֟ Œk'_uEYˇrāãüKĪa¨?†.đaÛåb‚ûēĩīpIN×ŋ.֗eāBCÃÖTJޟß"_ÚËZ|E•sĐŅūI÷mÁ‡Ü˜Šõ7ãĢ($yļ`ŸΚåÛØwR/íĶĢpŦ­†˙ 2Ŗ‰|ŒÕ˛Vɸūˆ|ôī‹8ŋYņQæ´Ä– IDAT2q=_ųŒō51<đvžqQßĨŧ‘‰´Ī)Ž•yYM&×ā“ūā2øI”ĩZë7ŸųāŅEž|BC˙4ÎoO Ŗ#9ŪVœĪ’øÆ˛tíîoC“×%›ėŨLÖĒø\Ļëˇ8ŋĩ°›Ę×Īŋ M8ÆņËđĀfžm)PĢ,ÆĒPtY]ē¸ūÕų-ī"_>đÅü¸ėā‹ák|Í]øŠí¯¸îäđ%Äx'°>‡˛&RvæUĸZl+Ŋ>+ĢãwŲŋ¯īÂWnŸW9- úM:ļÃú<ÃíßÃ×<ãW{ž…õŅ-íģøÛųŽvsúž{ĩ ōkų¸¸¸>ŋåÎ×.=Øķíœ{P? Ļũ9ŧgx }ģž˙üí‡ķŨTü‡ņMK ׿‡;_Ŋßí7mo.÷{ū[ī­wŋ|Í­ ˇ•ûå[ĘHûaåzž˙Ņ”GžũĘ#ß~å‘oŋōãģə{˛~ŋ,Ÿ˙úÁ%ÄnæƒÚ6}ū_ŽG4/ë÷ķŲ ¯äØųũƒĶ­ĸŦßŋĖg?ÖŧԔ˄¸Č\P<éĮ6|ß=$ŸĶUT=⁈Īy"˙Ηo?0Ããaų ųˌĢnj ÛTønZūžĪ–ŗ+Í7ãƒ:Ãȗ|`Åũøēĩå–yÁ3[ō!Ņ3Ônа<:ß|šÕĐ.įábŋŅ™OM9đĮå[^’ęô97jà ŠÔ 3. WØmß!ÕŧoãÃeûüw~SĐÎęÕē"\ō0|ۜ}–×&Ô_XܛlŌ€ƒ—Č—+Ŧ‹ō5Ā÷ 4PcrvOĻžŸ >Vg‘27ûî|ßg8YĀž,ķd>ÜŪÍø˜đ™‡â{…“¨1qČâxgā3ŖkČ˜/õÃđAņ|å:÷`{žĒįģķÕøá;1žįĢÉWô|4ƒĘĮ@Œē86_—6 2îøŦbPĻlQĐĖëĄ $#Fžģ6ߕ/m5Á!€ĀGĩ lūgˆ ”Oq>|öø|i› é ɇų—§U…‹9æLôä;hē€Ûų˛6EŽP|vdéų„nxŦ‰|8˜<:bųĘ5žōãāĶūGž<>ÖĻ+ō_ųUũ žJŤČg? žŠ}žņAņųjåk–ųįÄņ{\žvƒ¯ḬÄgV=ßÖĢ÷Ā×LÚWüQõ¯ĸkÚķeʗZú÷íKäsIĪwÔų-ƒ0"ÃØžˆ$_ŪķąN}>đ•Gö‡`+­ŋNÜŧĸįķTGCÃõÅžëáC}A”ęĀ™­¸žų¤ē‹ãņĨäË@‡ÛGđRĢž˙å>5TęBœHÍøđá%GãCũU#öZ>*̞N…¯‰|ļK‡kPĮāksyˆŪ.; Â|āĶŨ!_stž ÖįeM>ėõ ö%ŅmTF}đĒųÚėæ ÃōĄČŠįCSâžöJ{ž&iŖb‘|íÃđMK•ãR G¨ĻęÔ3ûkž<ˇųšüáøĻå­^(ąŊŸxãJĒ!ŽM~?h,ûœ1Ū¤ÉgZū‡.{oĄšģ˙üaˇĨ?f>Ü6ŋįģŊøž a=wĀĄËė|õŖ+|û•GžũĘ#ß~å‘oŋōȡ_yäÛ¯<ōíWū |_ŽGb=TŲ—jØ ÚōŽ„ŗQļđYåë÷æq‹7`eÉÛåám[MÆ„¯#ß Ôcĸ”JËËō†™…úåo­ĸ÷Ķ‘ˇņĩ3>UĻĄ4& ¯o3ō . ¤ĶOˆ¯õ ËĄ.ķuäûiZ™\ön“‘Īį¸Ļ׊vIXi\ĪŽ“×ųpûjPRSžŒ|Yų¨ŋÍk„­ššō G"ūĐ|ũ)Ū4žņ13$‘ÚŦNųė_šBĩMŊi¯ÖĶ‚ÎōVåČĻLj¨N°ë—Ží‹|yÛW čŠîÂ'¯=íËø\˛…Đq4CžL3C/øĖ”ObžÎ\ÎųfÛąë|úÔ.ŪÔų  Ķ2Ķ`›Uų_>ŋI+sIļ}Ŋ4k|ŨM|•rļļ2PęŠSāĶ:哧ˇŠ)F>CæÚ\QŠĻŌwš‘¯]{Ŧ1sžYĀÔz|ŦȂ¯l!t’c„&øJá >;đU3žlßú†a+|͟oâëbFÚnāKŖ’UĪįĘöɄO“bĘÜreų6ņøšŲŪ.|ˆĘ)'JV8&_å (=¨˛ø>LPéž"T—!qŦõđåRũ Š7{žl~Ģ÷&žvĘ×B@ÂפŋôŌąūÚt·< ŧ؏ķëÎŧfŌ`&6 :šŋ]âË?€ŋm­ĶņÁKû%æˇ´Nū:Ŗ IĪ×|ųh_2ŊøœY$!+”kōCĻŪüÆK•ķG&cûp>ĩÕĨe‚Ãϟߠ‚ƒiDj&ōUÁ^¸×W¸ņ.ķG֐õĪ´ bZ“Æä¸lP2ˆ0ų&0wpƒXęīĢÛøšužŽB;x<ᜁQåø2x#Ä9Ī]™ĘW|š'opÂÆƒ1ü2ž;â“=nqķn{šÃæB%&ÔƒĐ‚…ü |ŊR”ōŨ_é?ĪÁ‡zYAī °ŸA%Ųrf‚ÖŒSuÂX=j<”Ayé:6ˆ* ŽĘāŋe¸žŧ˙roEž|ä“Y¸éų؉˜é‹ŧrÃüëōĒ@ĸN4čŠđ!O§Š{>ƒđQžvŒé¯p…ŋįCÔ¨A|Ÿęķ1ŗė2_7áŖÛ§ūKø†ũ/Ö_ä[9õ_*æY*L|ũ•LJ˜:ßSz‰U2&ĪTŪ‘¯Ā€DÚfÍS´ßJų˛Š> Ö°™ōūUļęĩK˜Č AŸMNĮI3/™:—™Ü•&jŦF“’wāĢ :“j$›ųgžTų’^)ŠūË›O^3)uũYR˛}Ŋō%āËŲ˙f|ÕĨĻ‹‹|úKkh >áe‚fÉ0ÕPKĩ™ žš}Yõ—SyÆ#mž%Ŗ}Ŋ?ÍŦģâˇ_ød8@rʕæĒ[šËī:áƒPôĸ˜OŠ|'‰ĪĒ |Ÿ&ĒÖXnŸ?Ļí %5yCŠÚ‰­xfFûėČ÷ÔFĄƒŠöpOęäœ]iäŗ*÷CáĒ&ō!5nVRåu.ļĸ„āV˙`hßMžįâŦņĨîĘ.ņQ˛KžsÎĒ_ųÚ9_ŠąTÔŊ”+_ }6øōiũQé(ЛŖūRŒ^ō%ž Á2gĻį[Íø,Rd’īBÕ­wäƒ!†âW<€GG•yáƒÂ¤;Īũ_ˆf|T˛ęČį•/ßĘׁ¯œÔ_Īg>Ī‘O91s%}ũaæÆĢO‘\ŦîyļĀW-đAFų09$mæf|Šđecũš >&SSuĢKĖāS>Îč#Ÿ%_  DÚ&_Évøz%Ė|Ō#ø.ødÖ]į+gũõ÷)“Mƒ¯Ą4įëë/Ÿķ…E>×oĘWĒl$=Ŋ%_ ĒN>Y‰ÁŨĘWaaāÂoü˜X›íÛŦņÕÛųunbûæāŗę˙ |—\k~˛H,7‘k,ø ãšÁwũk;đą˙Ų…úûß |Q:֟˚˙”úxA>ŖŅ q2ØO õ¨IũåÕdū€Õpåu]ššũC=ųēY˙S>_,äƒSŌ'Ėęĸ‹|mÜŋ2æ Ēacũi.IĩŸĨ‰éP™ËW%Ķųö¯IģIũĨ]N>—īĀ'¯qé*ØnÂgQ §âŸ÷|é|Ė8˙€|•đ1v4¨jëÚü‘AISø.õ ũäņč6žwāķTŠâú ûôpåû‰sÖķÁėŽņՑöSæŧ÷Ī˙œ‹w*øŌy“ÔédūmJōÁÛuā3>÷o`xoÜŋo˛ī!,œÆũSáŗĘW­ņ1siäk"Ÿú΁‚}9(Ÿ / õ3oåŌ˚dŊødüš8ÔÛÛwJYĘ~˙¤ŋ|÷V~ŧĖ!Ē|Īāå0™v”Ų×õ‡Uč×PĘĨũŖÂ]VÛŅ?혯“š›阚&| ķĮ•?™Š œžôšyášëßÂ*_\ŋ5&mâüVW]ũļ÷ŸÁGKÕÁįFLÔđ_Îüƒ}Ëoá+/ŨįĪĐsF¯xt­ëKü\åSŨgq™› Ÿ :jŋ6éB~ŨũK]ęĻᅬԅ×įāķĘįÉæ|Á¨Đô—ŪĪWllēH֍ĘëņÖÆĨĻ./ĘĻāK„¯ŌõøT 1Ü_^­ķ­•wķļĒĢ ŧ ’ø ‡K$V%ĩkģûÉĪyC.ÉąŦÖnę>ŋô…ĒĘ:1Q×!nėŨß.Ēv‰/üU¨pbŌ%?ãxŌlŽĪPš]$ÍĒWķ[¯×Ã/†ˇ‰™÷ĀˇÃ…ÛĘܯחƒķŨKr,ÕړŽČˇĶÁļ3ķ'Ŋ^ŧųĖŊîPü6 ”„¯ŲöŠ ßÖK×—é>˛øëõ>2žōȡ_yäÛ¯<ōíWvX_ckŲĘ78SÎQË6ž!J E&p{˜˛•¯w 9•×ųÆÄs¤˛+ßũŪ‚ß^ļí_ JSõGɗ|žĮČ1–‹[ũuž<¨ļĀÔÛų üˇü¸ę¯ĩk|fĨ—ųjsú$ŅÔ.c8ų~;&™–e>o^SvÜÄM¤$ß?ļą;F})åÃņac|ĩɛbÕe]^ŋ.T!Ģ×Ē˙Åh.“âø°ąlfÂÄÎ7rŠb÷‡ņ ´j´’˙Ã[.åc–ÆLųŗ-DV1š$OCŌļĪ֙ˇũNŨ1ųōyæ´K˜Šs…Ķ‡ŠŠÚÄl4yÃ.[~åëRĻ <Áļî…Eũ‘ī•ĻúlCL2Ѝ c×_—2ĨVa([r5ō]¤Hũx’0[ųņä!øôāąįË5ōX€¨sákRw‰čĨ̇áĶl†y¨zžœ§ũÂį‹ ŲŦĒ.•'­ÅW¯b¨^L˜Ęį åËWĖfÖĻՕT˛;ģĮ5āŽ|E·S3Ÿūâ3&Ē DŦœŨŖDŌVžŒ|%ÚõˇøDę5qR5…Žyg•:”ūė%ˆvh_f2Sž2ō ˜đÉā@J­úøŌČWõWj4 ą‘O揇Ģŋ”>•đ]|xŠ9í[#"äĄęOĒæ|ĻÚW×džuų—Œd}XžÕ”¯AũGhŒ+gâ,F$=_œß˜ ŗŠ|ČËč;#=|?6Ägu~ãø`&ÖÕĀ'öš4ž`â×UkÅ>Įį3—pGŸQŅÖÂg=ø2ÎŋÆįĖvšBô+b_ž;6ß)ŨeK>Úŋ.‡ĩdĐĒg¤-GxkáØû[~nŲß0HĢX+_Ĩ|†|œRDžÖ=1—!T Î唯ÕÛļįS˙ôø|ÕYÖōχđéüFYģ˛ĶõGŠõį_[ŸĪ—yČyĮļ.ë„|ÕáĶÛRŧpÂđ\=ß´témø^FEū÷ŧĪ(ķ.ė´Y—ÅõåÃōÍ ĶTH$Ņe!Ãū8 éĮÃˇVūcÜāúũ 0 å~ô°å‘oŋōȡ_yäÛ¯<ōíWųö+|û•GžũĘ#ß~å‘oŋ˛•īûŖbl-[ø2ÕúķQY–Ę–ũ+ŽlU E5-î7“Úrš‘oŖÆ!ĒW!˜Đe&)J ŨwtāļũŨf*š1 8x7’™é\‰ÄpmŧŽuøūpßoSž‚Lĩ´sŪLų D ´ņ:¯mŽŨâūø2„­ŊŸōå<šŠĄũRG>ę7JipZŊVģžrZ4-Á!ø2Ŋe5đeäķ’3˙ZŦŋ*øp“R=7¤\Ãí`ũW1˙ÅļDžk|1W&}HÖų¨eVįŽ—hU Oōøė|UoόuŦéCļŊdũūyŋ{/÷™/*ʲ@‡Ŗ+ĖgžoōávÛíúũũd™¯Ā5ø:ōUĖ ÂöR2=ŸøļČâ/đ5x Ų‘/^ŽkS”đũgU]R>ųpmŖ|ÍČįą[ž@v1|ë*MũûŋŒ7{Ú9_Ŋ_7)'Ođ#î;yđ•¸")|'Ϝķ%äCF‹^ũî&žr‰ĪīÆ×úĸeĪ1dš‰?đÉÃĪ’0đĩ#Âđzõģ­|ļŋ8x7žfƒ/kõ‡oP+¨˜ķyä{BÍ87áû†|zģ}/]æ[~ú_žÁ‡C¸ŧæá›ōĨ#_ķtÎםŠģOT…K€Ļr™ŨVžâÃųđĨš”Ķŧûâ)†ķcGžįvĘąŠJŠ —y‹ÁĶ ’—ŖļũÅËņ‚(ųÜn|u¯Ÿ“yLĒg*Û4ÎoāĢ1ä3žŌõãŖ ´ˆLU¸0Î Ē•jØĮGvö]˙‹Ÿyž&Sû—´,>(˜Ô†ÚĘWįIp¯ËĘ´ö%iđ´Ģ¨rĨ‚Wp2ēiw”}@hŖS-™õ–GČžhŸLtU9ø/PWˆ|å”oUõöy¯ã Gž´įĢđ m—Į i Øį醲ëļöø žĐ×_šÁįsé|¯‹¤R˙Ay'ÔB*\Ä(ūĩŠlĪĮčAéĒB…Ø.éšļAÄhēQ‰|é”Ī ߋą}ÅÂČHf„SĪWTÁŊ)넝žQ…ËēÜ}aŊ&p…_>ŠŧKŖG‹Ązāķ ŨđĻnãSW/ú/2ƒ/[æËČW•U¯˛‘´â/ԙģ´ū|gĐ Āø'k|+ęˇ9IQãŅē_ļČŸęSáû‹?e´=Ÿ+ĒŌŊ9!_ÎūW…ęʒ*/PšĒē„ōÉØ(€# „SS§ū9€›Ī…k))‘îÎWĖøŠZsÂņ[‹I.ūŦã×}.Æåü$­TíKęoĻKë _HB<ÄhĮ¸~ą §Tb3ōÛs4™ Ķæŗėʇųm+cQž/Í%^líüšđ%đ€×øT%Ŧ˛‰ËžPĪ'æáÔFa6wab;ȘÉoÃü1ãƒFĢ´XYcŒ¤õËDå.#_á.žĨQØVÚ7Q>ÍŽHŅ'ŖÉĀ#U˛žī<÷øH„Atā–ûŋ›|ÖiĻPé2ŸQš đåËųŌžĪx,—턯=etžžZų¨ëŦĶm흚 čų&døžÜAēoƗ|^ëOĻđÉoČĮŧވŽ0o æŦߕođOG>đæĀ׀Oėé:Ÿô›_g×ų0Ļ&|ōU#Ÿ'ßÂētŲŋo&ö…ķ‡ú§yõĪhīķÁ1Ō>Ļ†Ø‘ųėĀ׊/ŽšÉüAžŧĻ˙\A1Hla?~Ł Ž7Äú3ŗņ •+ķ&“ žž˙!GoˇÁwu;ŸK'|õ§™°ĄkD> ˛e}ũ!jæŽĻ|°ĪÚ˙z•ŋ$ü€5Āt| ||úŸŨ‰/ŽĪuū0g¨ˆč˙Ņŋ—Ú5¨K÷ķGB °TųØžâ_Q”KųĩĪIxû]›Ŧ_ļī•'_ĮĮ|ą¨}1'EsžjØ’ß|FžnāCũŊø Âįųø™ũkNÁWūtwž|āKĸ˙\6O•¯Ex,ų>E;™Y>¸ —čļԟJjy#ņđņq~ËBAûĖûÎįūœķĮŽã#–ŽõWë7ú§eû^Čšø•}ũ™9ú_Œ<Žŗ¨ÂåōęRå3Å?h÷Íų­õįŸĨĖūģ6ūD>¨ÃôNų 98ōåÚÖOŽ|đŸÁ7¨Äæœ|ŗ—‰ÆĨĶĄp+æßČg –*‹ĶøtˇĢ+ž–A ›>UŲ>Į;5˛dŸņ9‘ũ¯žņaBrđëÕ?†Ŋ1gˆ~;'Ģ:Ií.ŽĢÍmŦÛĪ?Úøw ąúĩ+ÃwĖ+ŸōBj9ōõöëËČU¸ÜčßGžNŖģ=ëˇÆ-"_V¯âõCųn-ŋ‡īÂ÷ĒĮ˙Ž*Â—1ŋ­ŽßŧúŒX‘#§eôųĀ'C÷Â7^ķŧМcĩų_eŧsķ­āúR]-ųTë¤z‡rņf&†ƒŸoy^…üēWájpąäú\ūĶejYe}‰:î×oåQų†w\Wáĸķų5v.Ŋ6įÄ_ÃīQģĮá{9ôĄu.-“7ȁæ ļôk­Ũ{ę3žņ2aõz‘¯\~ĄĀæŖĶđčáų¨u.-Ûø–ËÁųęj]…+>áƒŪîø(ˇČ÷a'ŠįkGi°eŽ õ=üųūxŲą>ĀŊĮÃķõĶ}yÃĶv,Øøˆ¤<ōíWųö+|û•GžũĘ#ß~å|÷Ąv>¸œ?„v›čę>å |pŲßaŸ€a—•z: _Éd)&žåËO%Ŗ‚P‡ã†ûSĄŅŊ‚&ûØø:deA LÎüWY{ `ĐÃņ!ŨîUeÁ§ŨGĮך/¸×‡pu4žvyåŗ!îEZH›(Æķ>æ;ũī¸sž†Ŗ\āk3d'D~4˙™íŽÆ‡ƒQ&EĒÄY†—‚éNBøyˆ¨ųŗō!ĐģÜ­uggŌD¸…ĪiŒbū¸,ũ) roЄīÃûö3HdšČįaāä?fa§û>ų f†ą‰p:ā:āUx‹ûüšAYZę. iȡis/|•Ņ$r-÷᧤ēW[&™h”=´ŗá]ä;Đ,w+_ĻINŒæ–@ eĻ‘”ōžBų4˜WųPĢFÛãō!­¤Gö@ܨ3—š¤Î†‰|N#æŠ|5#ë"ŸģO>GžbƗY¤ĶBŦI¤ĄVžĀ,ËŽô3žō|Ox…¯D$gÕfë|øœÖäÂwD>Ķ×ߔIa œö _›°øČwaĪ5Ÿ+#ū"ĸÛÎdƒOķߖšo|nƒ¯ØäkđqžĄؗ´įĢę¯ųB%|É1Æo_˜§“Ų…/íųę-íÜŅų¤Mû_}bg|cûÆņ!ūøŦyž‚|ŋ°Īab_ŒÚ—žY)×ž5į7q”Ī÷|ŨÄūåđŸ'|÷:ŋ|ŽAjĐĶęBėŧCC™ßLĪWi„øÚãōŅž˜)ŗ^)Bn”¯U>Îŋš,Ĩ”ī*9žeĸ wTüĶ‘ëšōŅnĖŋ3\ŸYąļE˙cČoÚ ~)cD˜ō1ŗ=c…–"Yî…/ú÷ˆēA|M›iŽeō!¤ö™|LŒdŽĪÆįžp}TtÜûáŽTËú°ĶúķĘ×)_†XĻöXëß&˙ZŒ ĄnXk điû*0ëOƒą>UĘûGãcÁVãeų_œ#›˛ [ÛæĖČÉģPŽ—„‹Čwœũo,1_*RjĻ ûē3ž|5īōpRZûáø˛õËj×ņI¨8ÆI†.@žtņ˛•<éųë˸%wĖũÉ5>ŗxŽđnūãÃņĩf1ld/ŋ+Ņŧ܉oéIë­ųÖʇķuË|÷TvᛇŲt÷¨ÆŋYî°ī(opû‡}8_w[Ë˙Oįŋ÷Qųö+|û•GžũĘ#ß~å‘oŋōȡ_š#ßĪÆØZîČ7¤Ãė/ÔŨKpX؟¯_ļášfMMļėĮrGža÷qĸÅ0“|ØX;Ėåų†Ũå™B6^%ĢÃŦĸîČ7œô|<čGāÚ du˜ ōũúßLĄ-ōõ|\|Pg#_Ũ¯>cX÷ŗĪ>(œ€Ī÷C˙j?°Xnûåē ǧöë|ōš<>r˜ŒÁˇÅ‡%ō |ĸüį)6y…ōĨä;pēÉ[ã¯JŪ˛C ŋ(viđžĶDŽg  KđĩĘwā\uˇžŧĨØōĒqÖA1õšj5Qâ 6+ņ@Ī÷ôĀūÆíņaUŧĀ&–đHŽ|ETczÄž}‘ļĩÃîxúž{9›ûâãõ{@( D ĖȗĪÚt|€ĩKĨ[ĻĢgI÷Ė—øŧÂũđ:ž‘/ķQÁÁ§ĩōĨš=ŗKå)Č_wŋ|ŧ}mhŪxžšVW rZQOŠ †Ē€ŅÛg&Û&-ųĒŊŊŽ[øŪ‚¯ 0#qg”bXĩ8YG@ØÚČĮų cĨŗM‚ÜRāËī…ņ9<Ö2ųœđ%ĐŪđ§6ōÅČ6Hi">ĸį+z>ԟŲ[Sx™¯büP`|˜ō•ˆ?¨|îĪ"_Ē|Ŋ‚W˙Šõ‡°Ā6Ģ Uß'_Éķß*Lø 5aȇŗ`U(bÎĶIû‚O&’ļ— ģG>3áŗĘ㘎 aPx2Ēh7Œé§Â']`”s<0Ÿ‹|ŨĀÖøšužgf°/ÁÔæ‚Q“{Ē?ŋÁ§ņC‹|3éįŪŪ—įįü/Ņm´o:kß4ōéüûiĪW…ōM3žĢ >7å{ÆdéūÍqøZ /ų Cõíz>Üoh-øžS­ėõ›ĪÃ—õwûRԗžXP@ëų2åķ$:Fũ ũYtM]øö…p\Tëũg/¸DũŲ?Ũ}øläķ˜xŠmvēÉ’Ąū°ūøŌÍģ,åSû‚,§R/âŋ@ĖlÃ>ëüÖ¯?°~ķb ų”tīk\ˇōåä‹ūiĖÆoT¸ŖÎM.]˙*_s˙|ôŸŅžęßÛ(ÎéPōŠ‚ÜSäŒLk¸ąT'M‚¯€ųmĪ8Ęųĸã,Žr7­?( ŲzđOÁGá&ųčĩŪ'_Ûˇå K žÁÆE î_Õ ^1$ëžųę—ų5w ĩ„õoēɧ ÛĒ |‘A깆Œˇōå÷Ë7ŸwvU†ŠKGņû•¯Ęå§^Ą­$›šžOÖG⠋›eIDAT˙uū%R™hÔ'ū‘#XļAƒŌÕÉ)#Bg^ĩ9v;^w-˙–õīũŽßøļ•álūC_5/÷Éwˆō|‡=8Øąü?T;ßģ۟røō|ڕĮ(˙ž¯­¸˙ ]ˇįwÁ< IENDŽB`‚leptonica-1.86.0/prog/test-87220.59.png000066400000000000000000000155771506303110300171430ustar00rootroot00000000000000‰PNG  IHDR NwXž~ä pHYs.#.#xĨ?v1IDATxœíŨÁnãHzpr9į0˜JnŊ€ãšG˜ŖŽk%0@. ˆÔ*€rZŋAúQ†‚€øļX`K0>N}˜jL +˙¯HJ”,É_ˇŨ;vöûī`[–h‰ü‰ŦúŠ*ĘY”đ˛ßz ^M„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠĄbG¨Ø*v„ŠTŋū&Ģņ"{;BŎPą#Tė;BŎPą#Tė;¯ƒęįũ;ôą%Õî-ôG>øŒŽ-ņ’ŠšŦėo­÷iÕū˛G`Smq˙ĩ6yTvī‘GŠÖŖŸƒfŧÖ+§˛ŸNSŊ;õRˇ­nžJ*gnû[ûTûMԃPŨœzŠÛSöy1TwīrÕ°n˙ĄŖTYŒžmDuôW(sÆĄ­x¨Oķ„,ēVqÕOíũ‡ŖōĨŠĐ5/‡Ûŋā0H7–—û´”GîīˇėĀķģjsk˙Ą—Bu7Zņu´—†nĐ=ēŋŗ‰~ķÂ˙c¯p—ŅƒOĄâˇUĮŠ6¯˙ĢÕĩâ%­ā:ļEœEŨāI ÜyÃág?DĩuëØLLwŖ_Á`bf\‘^EË÷åu~jÍöžcTˇÃ =ˆ¯†[[ĒtHūˆ¸ŨĢKßĶ˙ũÕ/D3ļŋßÕYĖ˛Å†ļš…ĪÛL[Z›,VĩYáō˜MTŨ*ŸãŪeȊƒ+zšĒō›`†MIŪŧTŪwØ6vĪģK5°lģāŨ7{œĶTEôeô´’ĄŒy\7“2œx9lÖ˚h+kÖĢ–ļ_åø•Ŧ‚LŨfD•A7mVUU¸ ë˙Į‚–Îb]ú?ä6‹ŲQšŦŖĘŲTÛ÷ÕCĒÚøŠ^Ųžj…Ŗņ!Õpn÷ĒđYT?É(°đ“+°ĩu–›ĸ°Ū‰JßXSë:ī4ŗ ›ŸM3“vLûŽ*īŠ°KUĨsĶL—ķŽjQ¸ë|ŨÄėR5­ZĶ!ŋ ųėŗ¨v*•ˇtã?ÃnîĒîˆ^ôĮ¸jšĘŊ‘Ž˙,*Ŋ†NkZÉõ* Tv€īĻgšJ¯…›žĢ&wĢęœÎ5ITy8W–ÚÔļœ%*<Įܙ›ĩŋĘ´ĸĻ1ˇ•ššPŪY:mÔ+ÚŪe[îÂ>‰Ēģ/QųĒkŲÕ¨ņ˛Š4F:îs¨ŽÔĘlƒĒĶrÁ›&A‘Mpi ĩüå}0e“[ę¨ī‚žŲiŽAS.éũl• ĘļÔ(€J/Ŋ)[MĨ›ĒĨmÕĪŽšcĄÖĖ=ždŊëāŠ~:U0÷qĄ–ĐŖÆwČŗQeęÖåZmģå‚ą”vĒÖ ú‘V¨ößÖ´•w­žûĢâ×`ÖA-Aĩęz@ג7žcnĮT Ÿ¨tė¨Ļ•ū$ĒUžŽö Xßõ– ¯COŋ›ÍĸGŠøšĀ[:zogŅam4Ĩ Z„sí'fKՂ@š+ĩôІ ĶōƒU\Ōj@fā`{-î¨ĻēŖZYcfĐĮ1™¨OTuĩĀ!=ÅáŨQ=¨MöŠhĄĶh4ÕXqĢ5ÎŦÛm3:ŪÍĻtTaCR-ŅD$"ũGT:pŧ\cđdø×öŊXƒ›e´‡¨ŽôĸŨP­z*lŠOTôúáǏNOu:!ô˜=U1ß§jÎ \×į ÉŠ°ģÔ.ģJ+`AU- įÚ3›™˙CĨĐMLĸē)Z} ƒöÕ[Õ~ŖũEĸ˛xr(Ú ŽđlW´ „ŗõ{Ŧc:vzĒ´œvî՟ĪĒUYøÆôTÆ]TÖ%ĒéJDüęũIĒ_>D×VS­ô yŊlÕÜ^‚ĒUQǧRtÄEéˇTWÕŖ[-ÜĶķDåķ;T+æ6ŖŠ&Q-–kOīúíũGWŠw+O:īæ(§QÅvÅ7‰ĒՁ¨h÷Œíī×?ĄIŗ Ē6Ti9mŅvT&u *ŊaY…ŠJucP)*o—‰*üžĢœĨB¯åCÕėTqEãø\)TmáõÂĄ0Ą^í)Ŋr,Aõ'ÕmM{NģrgĘU7­íÛúĒtĄ j%hęŋМ°Õ:ëu fwņ xjšWhe–TëĻ:Ķī;ũ”ģI"č˜-í?Ųwø}ĶNŲSõËáLTí– uWÜRĄ­ÂA’Ŗ„HTy7h~´|OTĻ§ÂŠ kl<ÚŅĒŽeÅĪ%QMK(˙5PéÂŌ;„UŦnÖ´õKT,XG´äAßR˙]ĨfŨWĘŽ#QŠ8PéôƧ*‰ę:QáÍUĨæŨP¸ÍÚR͉ õøĐÆÔŦc/ŲRÕ4.WŨ€‹ŠLĪSą€Aķ@uēLT*Å@5ÃÎ*z PũW#*4ucÎ7TX TU‰ļeŲSĨjo*¨¨\ŨPY4͉Ę´æ×—xĩ[PåĮ¨¨YŨû„Z|DE#bZÜéD•ŽßUÔe¨vK•JP:l›ŽĘĖ:*ĩĄĸĨėÕéfU‹k1,Ņ<&Ē"ĮÖõTYļĄZtTMvu5´UZųD…’æGôá%Š…D…ĻĢÕ ĒėMĸB ÔXŒVUfĐüŖiŽˆĘž ēB‹ŌŊÍî>ôm† DCƒ)4ģTA T:.7TujˆˆĘŌh>ĩJĨŸ–D5kĒđĘn8‹…ŖjŅuO°ŋ¨Ž*+vŠŌpŲ'*Œ×m6ŲP™*˜ĒÉ.ŗ*Q™T­Œ¨nÃ4ËūWbĩBfj4͸†p‡¨°ŗÎÃUéƒJÛpīąKJŨG4äa Â!dģ­lĸ)īą“¸DĻÆĨÍ<ūŊ@Â_bė  zž¨L†žZ5X™ ņĨayĨ >ÖØN”ƒU9ĻōcĒø;åŗ <¨0• ]ĩ˛G…Ąî™Ļv Ã9zWęD5_Ŗĸ҉kË:Qa4œ¨Š% CPuE:ˆ žÎF{YĄīhMqkÔ-4ę Å õؑÎÄ î¨P^gS”qtĻđĻ.Ķ!ĸPŨÄtĻ™¨‡ÃÚ]Ē{홡ĶC][Õ5/ŠYĪ˙ēK•ļ5UqŠí¨¨eUĖQõÕJGUuT´fßjdl0Ą˜SeJTępŗŽ.Ėú8[ˇŠÜ¸ŊŖŌžYŅ–.ģ~cˆ*íäMåh4Ѝņ@Ĩhš)íü%QiĒ%ˆ; §Z%K„ögPöBclßÅ@īž¨‡ÃÚ]ĒĄŨ÷–Šö*Ņ][5PiĸĸßL› ÕöoŦ¨†jeDĩ N/Úī+ĸZãYæ]ĶL„‡Šl6eLTØĒoŪ}"hņîŒ7Ģ•§Ÿ< 2bMËyėĩöŠZ‰ēŠÍčq{‚•vūÂķ& oŠî ´ûŪõgghą=Ē›Ž*U+!ÕĒ{˛"ž÷šNņ4îĘܒž&Ē2ß>Ÿ}(ãöOĪŨgP­íČ;Œ—hGÛâ=ę"ęKzĮ7TŽS´÷‘ äûDĩ **ZЇ[ę†ã*Q5ÁtTÔAæØu'%¨Ęfį n;Ĩ2Qgy›ņ?åū­ŠúŒŗ3õ•JTCUx4ôũĻ€jN5ۚvŠ6uTũŌĐĸ¤‡fxšPikŠT­T5úĄëjNT^aH\įÖQ×Ũ Ę5Í(ņ6d]ËÍËsSqæ+P*_¸7Ķ -)*šVŧ.­ÁV4PŲ}Bģųėđ†>~Ž7‡ßëC¯ûe¨ø]đ§į™Šø¯ûú¨žģ­âæ‹Qqģāץbį‹5ëÜjåõä Qšį­^Dž•˙Ąú"Īû[æ QĩG¯)xŊy1SüŋlÚgxŽ˙Tƒƒßš—ĒđÍå '{Žã žHĒGīöŽí|.חíÃų›Ũķ8tBv#ÄĻz8[lûĐK¤:đ‘ÄvÁvĢ7Tũ=öēũÆ,ū=Pú kskģ1^÷˙ö÷4;' Ėč‘S}Ūv˙´æčį<¯…jûŲøˆĘėū{3ĻjqûŨ°ėÍãTúċ÷/üō¨ÚƒŸ4o6í~û7ũ§Â]ëN-ú‚Oõ:¯2Ĩ”ûyËĸęūŲR•›Gž™ĘėpĪČúâņ¨Ô ĒÁa89Ķ-J{ؗĸjÍū)ĻŖTz÷4+}ā˙Œ§ÛØT}Å *ũũķËæI谏Ũė”4<ĐųŸĶįļ-†.u7#*ŊęôŊvôl¨gÍíŌG–˙Ä|6Ŋ]?ĩ†Ę+_uT4Ÿ Ōlå˛Ē64{Āį1͡h´˙Ž&ÂĆæ@åŽĸĪ™ŧnÎĨЍĪČęÖŠŠF˙Dõ\g'A5Z“ôŦ­rÎüú‡Ŗ™g1īŒ4ĒéŖ2€ÄÛŌ*̉ÁŅbĻV™Øf@Uē8fQĨ€éŽÂAū˙"ŗ†f‚ęÛO§2§¨Æíš×ôßķQiKŗūCNSaĸÅQ´ns—iš_áG=īWšŽN2t‘`ĪÆŽ‘•uIs§jåʘf!ŌėĒ6ģ&—Éĩlˆ*MØj599ē lFTTeáu­ĘĶSŅâĒŲŖowRģĩųŽęŲĀÂfĻ.č Ú}s¯—!s™˛9M‹Uéē•tHˇËĐ'úXTYit^ē"Q4U ‹|…įģžĒ•XĖBÖĖĒ}ŲŨøė2wfNŗtS•\ qšęÁõļã;čĶfũ$8PéēpvĒpX—ËžĒ´™Ÿč?á\Ũ‡îuMũƒîŽ4ŨUuŠn­J øŨlĸ šELsīįū›ëǜĶãĒ9ĩžŲâŋ‰ąūlĸ<¨ô,ču\œžâ_•˛×ÚkwŠąšÚPåûRî‚~;gÃÕ Á44wģŨÜMA…tyĢ~ĸ=ĻZR{C̛ϙ(û‹ĢĘĸkķéj6_Y$íŽ ^ĸ[„æ•­ãüđGƒ'ŠĒͧŠč Ī§Ų§UˇÕĘ_š9­]Û Ōž@ ĄĒųnr!Męģ~jÎ2Møĸ ‰ûbaåĻeZdĒ̞ ‹Qi6¨"¨ÜĀ /Ņę-ՊEuQÍ𮆲Ĩ9ÎŽę áŋūMŠB•.HXų‹Žj:PŅŪ8ŖëãēAE] „æ–öMˆ‹DĒĨģ¨ âԞg=•ķÕÕǧZžĻÂA¤iö-MBīN%”nZā)S_TøęÖŋ™vs`ūƒŪÁē2ôįž*U5¨ZnŌ 'S­ãĖ_č‚.(ÕU+Py… ΞlŠčz ž*ŖŽÛuTЍ¨oØĄ cǰĨĒē‰ë¸~’ ĩYĸš\TĩZͨËA刊 ‘4Ŋė" M~F ƒltøž.++ÔŧžhĶeęĨ/ž8Ž$ĒĻËÖ.˛}**ŒˆĒ{/ˆ*¨jĩĨJā˜JĶûCĸrĮІšŲŦ9QĄ™}ŗXzúĸ×v{•ĩa *âMu3Õ7đúŊMËøT= btTšįĪĀ;Fõ†¨P = ĒéÕūv¨tOՔģTiXŅSUéŠŋĩī¨ĒžĘīSŲGžŊcÚ*åÕyˇXSįš;:î@ĩrĒ:¨ōÖ(čŸM5]Į‚æ×uBu{˜Ē|@UŅuįU•¨°ŽmFCøžJÅõĶ¨Ú˛‰ec|F÷ŅWÔļša§Å83Ģæk¯čũĸøŽ kēܖV˛‰u:ŖĖ›ˆĶZx÷‘ĨPŅ|ũŠŪ jŪ÷€1}' †W~ ú5]ĒyGĩ|U|‹jŽĄ¯OĄŗ@>MÔxßŊëũwÆ=×ųÖPüؙEEũm o:é{ĀŽj6Ļ2#Ēû~¯BWĶSé9œŸJõ7ËĒ#—œn¨ÖmGu…wsÖĩ˜UC5ÜyA%(QĨ+ōŠŽ2k%*0.ĐV-éRÉG„y3AP[ē§ĸ¯ŧZReųuUŧmVčTÚÂVt$Ŗ/úGØW‰ E'ËŽM\*Aék:æMĨPšŌ•nMcŽ}]ãËĘĒ#_#>PŲī¨ŌkU‹ÆTۂ.ĶĪ­ITЧ­Ŗ*ĶeæDÕ&*ú˛¯ TuVŅÅ€*1ĖÕT‡OWm/ô4(‰;ŝņŠzŲÂęLęĘįq† u‹rSúėą ĪÜÕpēĻ+wĢwžž×ž,2ļ´oôotmĮ'æ0U{ä}>qîļí?ÉméKIį÷RŅųƗķŽĒÁ^×QE_ÚkŖ¨Ę‹äųđõ_dž*v“”öōëļĢŪ˙ ūuėJŖĐųũđî#ÛņÉT'rāU_vh¯ŌüĨOS}Ō+ķ_õUæ4ՑēõHôSVäåį4ÕĮOz.ũ”yų9MÅúV•MĖSVäåį4˙‹Z(æ)+ōōsšęđw´˙æ$Õąbėī3§÷ĒWWT~ÉŧĀyë/5BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPRĶ_¨<Ą%ˊhUČ˙5rĄ%ËōX—^¨Qe…P1’˙%Ŗŋž,T§ŒM(kiĢQŅŨĐÚ<ĄEEįqyđQĄTׯŌ_–>Ą%íUN¨)Ŗ ¨˙Q(ĄĨ¤ŋ9jũQ(ĄĨŒ5QĩBõh¨ZGĨpäī› Õ(‰j&TŒU›Ķß>Ą…¨|)TŒäØĨ\úëä‡"TŖ`¸-TŒ`¸ëęÁtī#TŖU…ŠPĩ…PqBįĢÔąs0B5N:ĩ'TœĐI-TœUV9]%Tã$ĒL¨*vzĒÅáG…j”›č¨n?*Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė;BŎPą#Tė„˙/gŋŒyIENDŽB`‚leptonica-1.86.0/prog/test-cmap-alpha.png000066400000000000000000000014761506303110300202210ustar00rootroot00000000000000‰PNG  IHDR€€ôā‘ųgAMA¯Č7ŠétEXtSoftwareAdobe ImageReadyqÉe<PLTEĨgšĪtRNS˙åˇ0J°IDATxÚėšÁrÄ0CÅ˙˙tĪģÅļ$Ā™i“뎗0#~đüd¸j?A¸ŧŋn:aŠp5 2‚ģa˜ Å• đÖŖĀ➰ûZ÷ („4î>—# ō¸+| Xųīs5*Ž/đĘĄ8â†ā@úw’/Öā§ŋRČ9AÔZžŲ_Č~]”<Ų °ŲŦŽŠ;@'ĀÚɰ=e'… yp˛rũlk<{Õü˙`{ÚÆ¸âX0N}ėŸļîÆĶڞ_°~ĘÃļ‰D4k›Ę„“ļéTˆjëēø:úFetûŠ.o "ˆ>đ=âļúЃË}JéNé>‹puĄr‘ņÕjĖXĒŽÚl ÚA-l$Oš^@ĩK™´ ē@˛öŌöĮžŪ¸§C§2Cõ´âŧđjP›ádgíāZPk‚ËœOwŊ!ĀS]4Œ°‹õ ö€*odEĻĀļß Õ ČöÃԂ&ŦÆļ FäƒŨûÛŖedslĨôd—×ã‚"€ĢĮjÍ)Ķ蛧@ Ÿ]Šú!6™…Аā,ˇ™—él€_Ûn]'¤E*d’ Ėnāė2įëHŲ_Č×j%Ą’PūՆT“j؟ā"–I8Ž(DnDĘ]wˆŦ˛*ƒOmöČĻpUdzhĨXgdƒAë\Ļŗ>69í´ŪPģä„ünĀYŨäūâxøy^€āxø`i;4t„GôkIENDŽB`‚leptonica-1.86.0/prog/test-cmap-alpha2.png000066400000000000000000000010551506303110300202740ustar00rootroot00000000000000‰PNG  IHDRxxēÆātEXtSoftwareAdobe ImageReadyqÉe<PLTE˙˙˙UÂĶ~tRNS@æØf°IDATxÚėÚᎃ0āsŪ˙Ĩo˛d™ŗļ@ 2oá¯Ę7m\**n ž"! ?ą Û˛ĐCæDÃŒ9c՞˛lŊJ‹hbŦ,įÛß11 –Ļ­Ėqlß;ĢŨŗ\°ŽN]ß0Y„Ŧœm[¤,RŪÃ!ÆZǂЂ9=1ZEl >[įú%Eh`&Āēē<wĻų{ĢĒY{oˇŒņBąmīl Eŋ§‡áöÔÁúŽUøŊFxÜ.ĪŨ'΁ų;°Ēxü˜†Ēwöšf ų5đ°Ũ>ČĮ#ža{YTĖ­&í™8_žUqũsÜá&ŗtÆŪ—ēŠ1v˜\=E ĪļļĮ › ã˜Ëđä_ŊAėãøûa°/ŒĶ“Ø>%é•ų`ÂH€š%Œ˜˜Ņ0v‚™ #f&Œ_…_ķ,ØÚWœP˜‰0Dūc|ŊVõáβ|oÍF Ė,Ē?頀ŨŽ8nÅ| Į-Õ†JˇĮ~œ`\÷ö„‘3F ŦúĀ#FŒ‚ .¸ā‚ .x /g™„cųƒ_éõĻĸ"2ūMŲ(ÉßIENDŽB`‚leptonica-1.86.0/prog/test-fulltrans-alpha.png000066400000000000000000000004041506303110300213010ustar00rootroot00000000000000‰PNG  IHDRÁQN1›tRNSv“Í8bKGDŨФ pHYs.#.#xĨ?v8IDATxÚíÁ1 õOm O ø†Z <éF%tEXtdate:create2012-02-16T04:31:19-05:00ú†Ō%tEXtdate:modify2012-02-16T04:31:19-05:00‹ÛģnIENDŽB`‚leptonica-1.86.0/prog/test-gray-alpha.png000066400000000000000000000010611506303110300202310ustar00rootroot00000000000000‰PNG  IHDR€€9§ubKGDĒ#2 pHYsHHFÉk>ÕIDATxÚíÜŅjÂ0@Ņ8ö˙ŋÜŊ S§]Û´Üsž šÄMÆ*nīŊlYf?(kŨ^Žņ×ėĮc.Ä î{ŨÛnoŽ8Ūgë53@œâ'€8Ä Nqˆ@œâVn_Éŗ­QÛŲc$xFcøx õįÄ Nŋ´ÖáEāŊÖ ß3Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâį\Āa9œÁ pˆgNįDĀîūäe™‚võÉĀΉ@ģY3 ĮG €]üg ũHđ-`Œq†ÅØ,f€8Ä NqcŒ3lÉÎbˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä9~sn5œÂĢ›D÷ŊĀJĶŊ3ĀûE €Šæß$*€iÖŪ$ēm/¯záâ՞{YļZ š.k›h'€8Ämŧė^¸xUf€8Ä Nqˆ@œâ'€¸•;Wûų”gĖqˆüĶFÄD^ßIENDŽB`‚leptonica-1.86.0/prog/test-rgb.png000066400000000000000000000024711506303110300167640ustar00rootroot00000000000000‰PNG  IHDRq-P pHYs%%IR$đëIDAThí›?lâHÅßoÖ „”ÅRŌD(9¤+VFJDINЍļĨƒriŌmš]š\‰;ÚTˆ"”§Ŧ´Hw tJąAb—Ķ5üņ#_b{ްa°Il|ėų' 3cíĮ›™ĪßB)E€ZŨŋŒ C:BČÄėS_ŅķGÃČ…Ļ˜ €@Ā,䲞oŸÎT@Ahę‰:w ŠktģYąĖTÁxę?Ļū S:öoĐ÷]ŖëĻv 3™˛>õŸĀ§ŪĄGčãí§ū ët<&>u aBN…†¨ūkÚjĀŨÉÅmö(’™ŗ­ĄÖrŽÜŠÚÜÛ2āˇĻCųäBû¸ėŧm)…Š$:Ö˛§ŲWoŖķžÃ:5‡N†Øœ~k —ŽÂĮÍŪvÃŋ6cŦ`SēøQk,.îëģø+{öô`1~t‚ęfXj͜ęÁŧ˙Ÿ˛ü>]:´‘=CÖd %9×Ô´öĄ{Øž(Ąût$ō‹bŠāÎssOčßÚÔljŲ÷3û4É_bÜynÃ@ŊNŨÚęȅj”ģ¤Ü%UéįĄ÷xFXÆĶ(WJsСŲīz ">Žģ ?7{۟´ėA”æ6hnũ|M-VzO/kĢ#ĨĒRÍ<¯VkJŠj/U횊%øÕŒŸ?Uí>ČĩĄ6ŖAĒë3j19žÆÃ§1ĨØWŪ7Ù]‹|Cų}ųtxËÅŊ(gX§GãFB™ũÕ|[:ûĒŊŨuĢĢg—ŌÕtņZ¸ô¸vļ€z_9ŧ\Ą{ZĒ"×ÁæyUlHbãö<É •Â…$öYgĀīmYlËų8Ā*ôÄúi“-öÕzCŽí~ëãĩKš —ã?î;íЎ•út)ŋRÂãڏ†¸MUÔDzũã¨Ģ•†rĒ"V!@Mü°NĮ]p?ŌjöļRa“+ŲŨ2al‚%káäŧŋĩģšoH"ŦVU*mI΍IũDāšÄtéڋĮ %ą­N>wEš71šŪWé íLž(Ĩ¸ ĢŽ™ŽĨ¸ãäØøfÕVķFwî“éÜÃžŲ‹Ėķ ɨC#\ÖÆŒ\–w|,ws[ÃÂ6æßÚ]Í€RéPNǐ ?įāéÅNĖš2ÚöÚ.5|S[Ĩš,â'šÖŧũ—‘ĩīcšŊ{3{a@_>l¨āWžŗIMęƒ;×Į fegāđŧ ŋã-ötĪË8ŊLÜ]ŲEÜ&^…ÃũÜžĮŠiU~ÕÃüp=PĒŧøehŸŽuw€Ju”Ü›Vvv^ʃI•BŲH(‡ånĄ3*îH¤,‰Ú)K5—ú€gú@_ģöt*ĮŧTëë?õØË˛k“rĨWš.ŽGh.âļ-€ZŦt‹6å.ōü;1VØ´¯į9JāCJuše}ßú0KŪéU e SÁđĶĸĘ˸vō۟æ;Ŋ„0éke¤éP.\h;ftŨjöļŋŧŧ>rõ€˙aŦŠŖüéĨ,öŠz•\ŨÜÛ8Í‚zÄęScŊ›OŋZh¯_jôéŊņ´5Ô°ÄëæK¯ü={‡{ķ~ Ļ/ëĻūhę?Ļūhę?Á;ŽQABÆŋĄ˜Fī›[K˜×¯\č>K4Âh„!ēFtÍZbüSâ_.+wm¤ŽõIENDŽB`‚leptonica-1.86.0/prog/test-rgba.bmp000066400000000000000000000476521506303110300171310ustar00rootroot00000000000000BMĒO6(q- %%3771˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôâÄôâÄôâÄōáĮōáĮôâÄôâÄôâÄôâÄôâÄôâÄ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôâÄōáĮōáĮõãÆõãÆôâÄôâÄōáĮōáĮõãÆõãÆ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙˙˙˙˙˙˙üđÛüđÛ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČķâČ˙˙˙˙˙˙ôđ˙éąfé é í ˙áf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉ˙˙˙˙˙˙éÁļé í ÷ŅfíÁí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉ˙˙˙˙˙˙ôđ˙ņąf˙đ˙˙˙˙˙˙íŅÛôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f˙áf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé é é é é é é é í ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉōäÉōäÉôåĘôåĘōäÉōäÉōäÉōäÉōäÉōäÉ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé é é é é é é é í ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙íąüŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f÷Á:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ôÁ:˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉōäÉ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙í :˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé é é ˙áf˙˙˙˙˙˙ņá˙é é é ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉôåĘôåĘņâĖņâĖņâĖņâĖōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙é :÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÉôåĘôåĘņâĖņâĖņâĖņâĖōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļé í ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎōäÎōäÎņâĖņâĖōäÎōäÎōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙é :é é ÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļé ôąíŅļņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐üŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļ÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé ˙áf÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐üŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļ÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛé ņ ˙˙ļ˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļ÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎōäÎōäÎôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé üŅ:˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé ņÁ:ņÁfņÁfņÁfņÁfņÁfņÁfüŅf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐é ˙áf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é f÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛé ņ ˙˙ļ˙˙˙˙˙˙˙˙˙éÁļôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé é é é é é é é ÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙é :ņÁ:í :üáf˙˙˙˙˙˙˙˙˙ôđ˙é :ņąíą:üáf˙˙˙˙˙˙˙˙˙˙˙˙íŅÛé ˙áf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙鹐é üŅ:˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙é :˙áf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛé üŅ:˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é füŅ:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé ņÁ:ņÁfņÁfņÁfņÁfņÁfņÁfüŅf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņá˙é ÷Áôđ˙é :í ņÁfíąfé ņ ˙˙ļ÷đ˙éąfí ņÁ:ņÁfé :é ÷Á:˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎôæĪôæĪôæĪôæĪôæĪôæĪōäÎōäÎōäÎōäÎ˙˙˙˙˙˙˙˙˙˙˙˙ņá˙é ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙éÁļôą˙˙Û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ íҐņąüđļ˙˙˙ü˙˙íÁļí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņáÛņą:˙đļ˙˙˙ü˙˙ņŅļíą:íą:÷Ņf˙˙Û˙˙˙˙˙˙ü˙˙ôáÛíąfíą:ôÁfüđļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōäÎôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙˙˙˙÷đ˙é fé ņą˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛé üáf˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļôáÛíąfé é ņą˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙éÁļé é é é é ÷Á˙˙˙˙˙˙ņá˙é é é é ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪôæĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôæĪôæĪôæĪķåŌķåŌķåŌķåŌķåŌķåŌôæĶôæĶ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķåŌķåŌķåŌôæĶôæĶôæĶôæĶōįĶōįĶōįĶōįĶ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fí ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķåŌķåŌķåŌôæĶôæĶôæĶôæĶōįĶōįĶōįĶōįĶ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙íŅÛņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé íąíą:íą:íą:íą:íą:íą:ņą:˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōįĶōįĶōįĶōįĶōįĶōįĶōįĶôčÕôčÕôčÕôčÕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôđ˙éąfé ņ ˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙é fé é é é é é é é í ˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōįĶōįĶōįĶôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđÛ÷đÛņąf˙˙ļ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđ˙üđÛüđÛüđÛüđÛüđÛüđÛüđÛüđÛüđÛ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕôčÕ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņæÔņæÔņæÔôčÕôčÕôčÕôčÕņæÔņæÔōčÖōčÖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņæÔņæÔņæÔôčÕôčÕôčÕôčÕōčÖōčÖōčÖōčÖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņæÔņæÔņæÔōčÖōčÖōčÖōčÖōčÖōčÖōčÖōčÖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņæÔņæÔņæÔōčÖōčÖōčÖōčÖōčÖōčÖōčÖōčÖ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōčÖōčÖōčÖōčÖōčÖōčÖōčÖōčÖōčÖķéØķéØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōčÖōčÖōčÖōčÖōčÖōčÖōčÖķéØķéØķéØķéØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōčÖōčÖōčÖōčÖōčÖōčÖōčÖķéØķéØķéØķéØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķéØķéØķéØķéØķéØķéØķéØķéØķéØķéØķéØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņéØņéØņéØņéØņéØķéØķéØķéØķéØķéØķéØ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņéØņéØņéØņéØņéØņéØņéØõęØõęØōęŲōęŲ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņéØņéØņéØņéØņéØņéØņéØõęØõęØōęŲōęŲ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ōéÛōéÛōéÛņčÚņčÚōéÛōéÛōéÛōéÛōéÛōéÛleptonica-1.86.0/prog/test1.bmp000066400000000000000000000740161506303110300162730ustar00rootroot00000000000000BMx>(&ĒĐwm m ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ép÷˙÷˙ēÕį˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÁęūÕz­ÕŨ§˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ­×Ģĩ÷:kO˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đVĒŪÖĒÕØį˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øģ]kĢUz¯G˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øvęÕ]ǎ]˙˙˙˙˙˙˙˙˙˙˙˙˙˙üû˙˙˙öÚŋī÷ūļíˇ˙ūúõĒǎ˙ũļž˙˙˙ÛÛw˙˙˙˙˙˙˙˙˙˙˙˙˙˙øĢ]~ē÷]+G˙˙˙˙˙˙˙˙˙˙˙˙˙˙üķ˙˙î9÷ķœ˙˙HUĒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üUû­ÕY*Ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņ˙˙Č; ķõL˙€*$KjU ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üĒ­vĢŽT‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņ˙˙†­^ũķŒ ?˙” DJ ƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üÍûĢuvjĮ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđúzęĀ~ōÜ˙ā@ŦĀ€‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü dĻŨÖĢ4Hƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üøéîxŦÕ`>r˜€˙⍍ R¨C˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø*,ŨzŠÔl,Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙üūkČķ×ĢV‡sP˙øPPĨP ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ņõ•{—^j6˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙#ãõ­]ģÃĩ€(F˙ūATĒ #˙˙˙˙˙˙˙˙˙˙˙˙˙˙ãV‚ˇzëTZ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ÃˇæÕĒäų‚@!ūˆPĢU€Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙Žčj­UhŦ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Į§õĒĩ[ŧÁ€  ?˙€ €TN€s˙˙˙˙˙˙˙˙˙˙˙˙˙˙5^ •öë´p ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üû—oĘ÷ÛŊVĀĸĀ˙€GH€Ēĩ@Ŗ˙˙˙˙˙˙˙˙˙˙˙˙˙ūnģzĢUTŦ0˙˙˙˙˙˙˙˙˙˙˙˙˙˙üū/ß×Z­VĒJ)Ā‚˙Ä Y ˙˙˙˙˙˙˙˙˙˙˙˙˙ū[Õ"*ŨŪĄP˙˙˙˙˙˙˙˙˙˙˙˙˙˙üüŽßÚ­ÖëuC¯¤ƒƒ˙ņ"V †P Ĩ@#˙˙˙˙˙˙˙˙˙˙˙˙˙ųuj¤ĒĨ@¨˙˙˙˙˙˙˙˙˙˙˙˙˙˙üúŽŋĩzĢUĒ€-[UÁ˙øP@„T ˙˙˙˙˙˙˙˙˙˙˙˙˙ķŽŨŌęõzĸX˙˙˙˙˙˙˙˙˙˙˙˙˙˙üūŽ˙›ĢUjĨ@!¤Ā˙ūB*€ĒAŖ˙˙˙˙˙˙˙˙˙˙˙˙˙öÕj ×[Ģ@h˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Ŋŋ­UĒ×~ ˙˙Ā˙`P@S˙˙˙˙˙˙˙˙˙˙˙˙˙æĢĩ@.­]‚¨˙˙˙˙˙˙˙˙˙˙˙˙˙üū¯?ÕŽĩZĒXē§ū€˙@Ē€Ã˙˙˙˙˙˙˙˙˙˙˙˙˙‹•W UöĢBĐ?˙˙˙˙˙˙˙˙˙˙˙˙˙üūí?ĒÕĘĩRė{^˙ūĀ˙" P U#˙˙˙˙˙˙˙˙˙˙˙˙˙έUēĒԀ¨?˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ĪÕzĩÚëTŸu˙ū˙Ā‘Â+3˙˙˙˙˙˙˙˙˙˙˙˙˙;ĩ}°ĩoDP?˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙U+ĩÚ­Uj$vY˙î€˙đ@”T ˙˙˙˙˙˙˙˙˙˙˙˙˙S̰_ĒՁ¨˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙tūĩZ­VĒ•Yg˙΀˙ø@3˙˙˙˙˙˙˙˙˙˙˙˙ūz¨ÕRĒÕzƒP˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙J­UĒÕnŸö˙~‚˙ü@*H)˙˙˙˙˙˙˙˙˙˙˙˙ū­UnøWĒĨ ˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Ā5Ö¯UjĩĪrũ܀?˙!R ¨" !˙˙˙˙˙˙˙˙˙˙˙˙ü×h•JēŨZ H˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ūZģUj­Õ%ø˙ķü€?˙Ē S˙˙˙˙˙˙˙˙˙˙˙˙üŽ{ŦĩãĒ` ˙˙˙˙˙˙˙˙˙˙˙˙˙üū/Uē•V̧Q˙į܀˙€Š˙˙˙˙˙˙˙˙˙˙˙˙ũ]ë-yęŧ\L˙˙˙˙˙˙˙˙˙˙˙˙˙üđÆ˙TkUzĩT§˙ŋũ˙ā Tq˙˙˙˙˙˙˙˙˙˙˙˙ũĢĩ›hˇ@˙˜˙˙˙˙˙˙˙˙˙˙˙˙˙üđøk•k¯ZëĐgū÷܄˙𕀠P€€I˙˙˙˙˙˙˙˙˙˙˙˙úŨŽŲÜ˙Įņ´ß˙˙˙˙˙˙˙˙˙˙˙˙üķi?U{´VĒ•Hû˙]@˙üĨ‚@@!˙˙˙˙˙˙˙˙˙˙˙˙ųjéFŠ ų˙ÃĪød˙˙˙˙˙˙˙˙˙˙˙˙üûÜ?*§[ĢUz¸ëöÜ˙ü("* ą˙˙˙˙˙˙˙˙˙˙˙˙ûĩVã]ų÷=?˙`˙˙˙˙˙˙˙˙˙˙˙˙üũôŋ5Z­VĢ%U˙ŋûø ˙‘Ô˙˙˙˙˙˙˙˙˙˙˙˙ųnĢxųČü˙˙˜w˙˙˙˙˙˙˙˙˙˙˙üų|ŋ›ĒÕĒÕZ¸ü˙įũ ?˙*PŠ˙˙˙˙˙˙˙˙˙˙˙˙÷ŠŨá˙üįđ˙˙ãį?˙˙˙˙˙˙˙˙˙˙˙ü÷ŧŋĒvēÕk­Tųûīû€˙Ä*@J$H˙˙˙˙˙˙˙˙˙˙˙˙ņ^jĀã ô˙˙Īī˙˙˙˙˙˙˙˙˙˙˙ü˙~_™ĢUjĩUĒg˙ģ˙ä@…J) a˙˙˙˙˙˙˙˙˙˙˙˙÷Ģĩp˙‰đ?Ė˙˙ė Ī?˙˙˙˙˙˙˙˙˙˙˙üū˙ÍUĒ•J­V?ûīų1” ˙ųP pą˙˙˙˙˙˙˙˙˙˙˙˙ķuîĮ˙f¯˙-˙˙ép?˙˙˙˙˙˙˙˙˙˙˙üūãÕŽĩvģUĒķ˙û%A˙ü$ŠTˆ1˙˙˙˙˙˙˙˙˙˙˙˙÷nÕūãŸü$˙˙ã0>˙˙˙˙˙˙˙˙˙˙˙üųŨĘÕÛŠUjĩŸîúM™@˙ūR PĒD ˙˙˙˙˙˙˙˙˙˙˙˙ōÕnũā?ū˙˙îøw˙˙˙˙˙˙˙˙˙˙˙üųÜån­VĒ•J>˙ûû‚˙@€PĢU@!˙˙˙˙˙˙˙˙˙˙˙˙åzš˙ŗā˙˙ų˙˙ėœ÷˙˙˙˙˙˙˙˙˙˙˙üķãōĩÚĢUjĩ9˙ĮēNĒ(˙€@)TŠ€Ą˙˙˙˙˙˙˙˙˙˙˙˙ëĩãũĮá˙˙ø˙˙éžķ˙˙˙˙˙˙˙˙˙˙˙üûķųZĢÕĒĩV•ûīž]j*˙Ā ĒT`Q˙˙˙˙˙˙˙˙˙˙˙˙åV÷_ī˙˙˙˙˙įį˙˙˙˙˙˙˙˙˙˙˙üķ`üĩÕjĩVŠ˙ēOkʀ˙āU"•J(a˙˙˙˙˙˙˙˙˙˙˙˙ę­?ǟī˙˙Ž˙˙ėߎį˙˙˙˙˙˙˙˙˙˙˙üūũ ūÜŽ•kŠvŋķīúßíÔ˙ø•j¤ ˙˙˙˙˙˙˙˙˙˙˙˙÷V~˙˙˙ū˙˙íߎÜ˙˙˙˙˙˙˙˙˙˙˙ü˙ũ4#Uj•VŠŸ×˙ˇĪęJ@˙ü"J„UŦ˙˙˙˙˙˙˙˙˙˙˙˙å¸đ˙÷˙˙˙˙˙ãŸÎ_˙˙é|}ĒĀ%˙Ô˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙č˙í˙˙üÜ~đņ˙'˙˙˙˙˙˙˙˙ü˙Ÿ˙Īįŋ˙˙y˙ī˙ųöë—VĀ ˆ ˙đG˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ÔĪ˙ė˙˙ũ2ūÉßõ~[˙˙˙˙˙˙˙˙ü˙Ÿ˙ßā?˙˙§ūߚā×ëôX `ˆ˙ü˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ö˙ô˙˙üėüÍ˙Á|—˙˙˙˙˙˙˙˙ü˙Ÿ˙ŋī˙˙˙Ÿũüûo“æ˙ū ˆü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ģ˙æ˙˙ũ˜ũ„˙Š|ŋ˙˙˙˙˙˙˙˙ü˙Ÿ˙ŋī˙˙˙ŸķīûošįûúÚ !?ū˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙ūđ?ö˙˙ü4ų2˙ųo˙˙˙˙˙˙˙˙ü˙Ÿ˙ī˙˙˙˙CũoY]īĐi€X˙‚˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙ëōö˙˙ūäø ×úß˙˙˙˙˙˙˙˙ü˙Ÿ˙Ī˙˙˙ŋ˙˙žû?ūņ}˙Ā˙˙˙˙˙˙˙˙˙˙˙˙˙ŋ˙˙˙˙ô˙˙ū™øáūëøŋ˙˙˙˙˙˙˙˙ü˙Ÿ˙ß˙˙˙°‹˙˙ũķoßņw@˙â˙˙˙˙˙˙˙˙˙˙˙˙˙Ÿ˙˙˙ņ/Ö˙˙ū3ņđüˇŅ˙˙˙˙˙˙˙˙ü˙ßūß˙˙˙‡˙˙ķÜ˙˙Ķ´€˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙ß˙˙˙ņÆæ˙˙ūÃņ˙ūoâ˙˙˙˙˙˙˙˙˙ü˙ßū˙ß˙˙˙ŠG˙˙÷ô÷{ųZ„ú˙˙˙˙˙˙˙˙˙˙˙˙˙Ī˙˙˙ųzV˙ū›đ˙üOæ˙˙˙˙˙˙˙˙˙ü˙ßü˙ß˙˙˙„Ī˙˙įŅŋ˙Ŋũ$(  ?ü€˙˙˙˙˙˙˙˙˙˙˙˙˙Ī˙˙˙ø?r˙ū3öų˙˙˙˙˙˙˙˙˙ü˙ßũ˙ß˙˙˙ȝ˙˙īũßõ˙w: ˙@˙˙˙˙˙˙˙˙˙˙˙˙˙Ī˙˙˙ũOû˙ūã÷æŨ˙˙˙˙˙˙˙˙˙ü˙Īũ˙ë˙˙˙Æ˙˙Ī۟˙[l„ €˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī˙˙˙ũ}ú˙˙—÷Ÿæŋ3˙˙˙˙˙˙˙˙˙ü˙īũ˙æ˙˙˙f˙˙˙/ų­ZĢīP @˙Ā˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙ũ{˙ū7ķ˙üËį˙˙˙˙˙˙˙˙˙ü˙Īũ˙˙˙˙˙§˙˙ūßÛjۗ}ę@@˙ā˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙˙ū˙ē˙ūįë˙ü~ī˙˙˙˙˙˙˙˙˙ü˙īũúū˙˙‡˙˙ũ˙ōģ—V[Ē!!˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙ķ˙˙˙ū˙ã˙ūã˙˙>ß˙˙˙˙˙˙˙˙˙ü˙Īû˙¸˙˙×˙{˙ĶáŽŊļÍHđ˙˙˙˙˙˙˙˙˙˙˙˙˙ķ˙˙˙˙˙ō˙ū/ķ˙˙­Ÿ˙˙˙˙˙˙˙˙˙ü˙īû˙åß˙˙kũ˙˙˙ÛkžĩˇËBEü˙˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙˙?û˙ūĪÃ˙˙ûŋ˙˙˙˙˙˙˙˙˙ü˙Īûũ_ī˙˙+ī÷˙ķķ˙f7 ?˙˙˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙˙ŋö˙ūĶ˙˙ķ˙˙˙˙˙˙˙˙˙ü˙īûü˙§˙˙n?͟˙ÚßÚjļ"˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙˙ßû˙ūoŅ˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Ī˙üÍö?˙{˙ķo˙õūÛŗLŒ@˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙˙ßō˙˙ŨĶ˙˙æ˙˙˙˙˙˙˙˙˙˙ü˙īķûņŋ˙˙û˙˙Ų¯ęĨ•ē€{˙˙€?˙˙˙˙˙˙˙˙˙˙˙Á˙ų˙˙˙˙Īû÷ū ˙˙Ž˙˙˙˙˙˙˙˙˙˙ü˙ī÷ûeãī˙˙˙˙˙ũû>­•*d˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙īûû˙Y¨?˙Í˙˙˙˙˙˙˙˙˙˙ü˙ī÷÷įī˙˙ū˙˙ų÷ŲĨ2hŌ €ŋ˙ø(?˙˙˙˙˙˙˙˙˙˙ū˙ü˙˙˙˙īúīūx¨˙›˙˙˙˙˙˙˙˙˙˙ü˙ĮwöŪo˙˙˙ī˙ęŨvŲjI¤D=˙˙ĀX?˙˙˙˙˙˙˙˙˙˙ūü˙˙˙˙īķß˙<,˙›˙˙˙˙˙˙˙˙˙˙ü˙Ä'îũo˙~ī˙ŋ˙ûÖę’Ę1Hû˙˙T?˙˙˙˙˙˙˙˙˙˙ūŗ?ū˙˙˙īú˙ū=(3ũW˙˙˙˙˙˙˙˙˙˙ü˙ß˙ī÷ž˙˙˙˙˙ãŠģGŧ… €_˙øļ˙˙˙˙˙˙˙˙˙˙ũĨ?ū˙˙˙˙īû˙ūyh}˙¯˙˙˙˙˙˙˙˙˙˙ü˙ŋ˙Ũß˙ß˙{÷˙˙˙áŊUŗĶ*ŋ˙Āģ´˙˙˙˙˙˙˙˙˙˙˙Ĩ?ū˙˙˙÷ō˙ūzHū˙˙˙˙˙˙˙˙˙˙˙ü˙ŋ˙ŨúŸ˙÷˙˙ūáUë$Ķ–€_˙˙J¨˙˙˙˙˙˙˙˙˙˙˙ųŧ?ū˙˙˙˙ö˙ū|X˙<Ÿ˙˙˙˙˙˙˙˙˙˙ü˙Ī˙Íũø?˙{÷˙˙ûÃŪĒVˆĐ˙ø¨Ą˙˙˙˙˙˙˙˙˙˙˙ëë˙?˙˙˙÷ö˙ū}T˙ŋŋ˙˙˙˙˙˙˙˙˙˙ü˙ã˙ŨõīŸūūī˙˙˙zJ°˙˙Ā-W‡˙˙˙˙˙˙˙˙˙˙˙õŽ/˙˙˙˙˙ö~˙ūx•˙Č˙˙˙˙˙˙˙˙˙˙ü˙é˙Ü˙˙Ī˙˙˙˙˙ę}™˛,Ŧ@ ?˙ūT¨˙˙˙˙˙˙˙˙˙˙˙ëŽ˙?˙˙˙˙öū˙ų=ĩ˙â˙˙˙˙˙˙˙˙˙˙ü˙î˙Āß÷ī˙˙˙˙Ąõw“‚€×˙ø¯T˙˙˙˙˙˙˙˙˙˙˙eĖ;˙Ÿ˙˙˙˙ö˙ųž­˙ō˙˙˙˙˙˙˙˙˙˙˙ü˙î˙Õķī˙˙˙˙ûŨmŗîĀ@˙ā)T˙˙˙˙˙˙˙˙˙˙˙ũYU˙Ÿ˙˙˙˙ö˙˙ôž­˙ũ˙˙˙˙˙˙˙˙˙˙˙ü˙îU€`ˆ˙øǰ?˙˙˙˙˙˙˙˙˙˙˙ŠvĒĪ˙˙˙ũæû˙ë˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙í}yŧģ˙˙˙G}ØĩTȁ˙Ā*U€˙˙˙˙˙˙˙˙˙˙˙˙^¨V[ŋĪ˙˙˙˙ö÷˙ųˇ˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙íøėŽŸū˙˙ûŸ˙˙6ė˜`C˙˙UĒ˙˙˙˙˙˙˙˙˙˙˙üëEē-_į˙˙˙ũæ÷˙ũ­9˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙íķž>~Īū˙˙ü~ˇím™`f†˙üĒĐ?˙˙˙˙˙˙˙˙˙˙˙čU ô ¯ã˙˙˙ũäī˙ŪlY˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Ũë˙?÷ū˙˙Q˙ũ˙™;HÔ0?˙  ĩ@˙˙˙˙˙˙˙˙˙˙˙˙Đ*ŊZWã˙˙˙ũåĪūúí]˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙Îã˙7˙ķ˙˙ú‡õīÛjč`˙ū5K˙˙˙˙˙˙˙˙˙˙˙˙€īŦĢņ˙˙˙˙ėßûųë9˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ßũ;˙ķū˙ū?˙ūēɚfˆ˙đĒŧ˙˙˙˙˙˙˙˙˙˙˙ũ¯^•ų˙˙˙˙Íßīũúy˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ßö˙˙û˙õ˙×Ŋũ¤PÖĀ˙˙Ā(TĀ˙˙˙˙˙˙˙˙˙˙˙˙ø(UĒ nø˙˙˙˙í˙˙üęų˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ßķ˙é˙ķū˙G˙ũī÷Í ʇ˙˙•ˇ˙˙˙˙˙˙˙˙˙˙˙˙â™nŋlø˙˙˙É˙˙˙ōš˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙žq˙Ū˙ûūūŸ˙īûی0E˙øJ¨˙˙˙˙˙˙˙˙˙˙˙˙Ááų}Z ŧ˙˙˙Û˙˙˙Üš˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ŧŸŊ˙˙÷ūô˙ūßú@v„˙Ā*ĩ@˙˙˙˙˙˙˙˙˙˙˙ū‚ĮŋÔ \?˙˙˙Û˙˙˙tû˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙™ßg˙ũį˙á˙˙ũũԀCë˙˙ĨW˙˙˙˙˙˙˙˙˙˙˙˙û@û|ǝ˙˙˙Ķ˙˙˙ĩû˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙“Ī˙˙ü˙˙˙û˙q *˙üV¨˙˙˙˙˙˙˙˙˙˙˙˙ՀnŪ˙|W˙˙˙—ū˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ß÷˙ü˙˙?˙˙ûūĸÚD?˙āŠ€˙˙˙˙˙˙˙˙˙˙˙˙úŨ˙ßÜk˙˙˙ĩ˙˙˙‹÷˙˙˙˙˙˙˙˙˙˙˙˙˙üūŪ˙ũ˙˙˙˙˙ŪÚlÁ˙˙­˙˙˙˙˙˙˙˙˙˙˙˙˙ĨƒŽ×˙î‡˙˙˙'û˙˙Ë÷˙˙˙˙˙˙˙˙˙˙˙˙˙üüÃũī˙á˙˙˙˙˙ŋ´, ĩ˙üJ¨˙˙˙˙˙˙˙˙˙˙˙˙ũ^¯W˙īö Į˙˙˙kû˙˙Ûį˙˙˙˙˙˙˙˙˙˙˙˙˙üųŗéį˙ū˙˙˙˙˙}`@:?˙đĒā˙˙˙˙˙˙˙˙˙˙˙˙˙ôę]Ö˙ûüa˙˙ūk÷˙˙įį˙˙˙˙˙˙˙˙˙˙˙˙˙üō}ī÷˙˙˙˙˙˙úJč@˙˙€ŠW˙˙˙˙˙˙˙˙˙˙˙˙˙ŽÕŽŋ˙˙üƒ°˙˙ūĮī˙˙įĪ˙˙˙ūŋ˙˙˙˙˙˙˙˙ü÷üí˙˙˙˙˙˙˙ļõ@¸˙üV¸˙˙˙˙˙˙˙˙˙˙˙˙ũW‚w{÷˙ūP˙˙ũŸī˙˙÷Ī˙˙˙øŋ˙˙˙˙˙˙˙˙ü˙ũ˙˙˙ŋ˙˙˙íâNl?˙ā Ē€˙˙˙˙˙˙˙˙˙˙˙˙˙ūĒ›Ŋ˙˙ū,?˙ųŋß˙˙÷Ÿ˙˙˙ĮŸ˙˙˙˙˙˙˙˙ü˙ŋ~˙˙˙˙˙˙˙ßĸ” ˙˙€U˙˙˙˙˙˙˙˙˙˙˙˙˙õÕrīßī˙ü?˙ķß˙˙÷Ÿ˙˙˙?Ī˙˙˙˙˙˙˙˙ü˙žũ˙˙˙ß˙˙˙ūĀ$ƒ˙üUP˙˙˙˙˙˙˙˙˙˙˙˙˙ÖŗņWŋ÷˙ū@@˙æŋ˙˙÷?˙˙ü˙Ī˙˙˙˙˙˙˙˙ü˙ī˙˙˙˙ß˙˙˙Ą€K˙đ ëĀ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĒĪö­W˙˙ü‡˙î˙ŋ˙˙÷˙˙Ã˙Ī˙˙˙˙˙˙˙˙üūūû˙˙˙ß˙˙ū^íP˙˙Āĩ˙˙˙˙˙˙˙˙˙˙˙˙˙ũV?ņ×û˙˙ūÃ˙™˙˙˙ō˙˙?˙Ã˙˙˙˙˙˙˙üūû˙˙˙ß˙˙õ´Ū ˙ūVā˙˙˙˙˙˙˙˙˙˙˙˙˙õœ˙æž˙˙÷üáūs˙˙˙ø˙˙ũ˙˙Ã˙˙ųū?˙˙˙üöŪ÷˙˙ß˙˙ī ;N˙đ:€˙˙˙˙˙˙˙˙˙˙˙˙˙˙ēķ˙÷W˙Ĩßūxøįū˙˙Æy˙˙Į˙˙ƒ˙˙į˙˙˙īüö~ķ˙˙ŋ˙˙ūßŧ˙Ā>Ė˙˙˙˙˙˙˙˙˙˙˙˙˙˙U˙Õû˙˙˙~<ßū˙˙ļ˜˙˙?˙˙Á˙˙īūŸ˙˙¯ü÷ˆ˙˙˙íŋ˙˙đŊˇ˙ūU0?˙˙˙˙˙˙˙˙˙˙˙˙˙ũĒ?˙į˙ū˙˙ü€@?ü˙˙Ŋėü˙˙˙Ā˙˙ß˙O˙õüķé˙˙˙æ˙˙˙>ä˙øĢÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ęØ˙˙åOũ˙˙ŧ€Ā˙ū˙˙˙˙÷˙˙˙€˙ßū˙W˙üøÉ˙˙˙÷˙˙ūÁuz˙˙Ā+Ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÕG˙˙ī˙÷˙˙^đ˙}˙˙ŋ˙˙˙˙˙˙Č˙ß˙Oũŋ˙üø˙˙ū˙˙˙ūíĶ˙˙\ ?˙˙˙˙˙˙˙˙˙˙˙˙˙ūĒ˙˙į˙û˙˙Ŧø?˙˙˙˙˙Ÿŋ˙˙˙˙ß˙'~˙˙üņá˙˙üs˙˙¨:ß?˙øĢ˙˙˙˙˙˙˙˙˙˙˙˙˙˙é,˙˙Įę˙˙ũäū˙˙Ī˙ßŋ˙˙˙ȏ˙ß˙•§˙˙ü˙Í˙˙˙{˙ûÃßž˙ā.ŧ˙˙˙˙˙˙˙˙˙˙˙˙˙˙Õp˙˙˙å˙˙˙ø˙Āy˙˙˙˙Ÿŋ˙˙˙ÄO˙ß˙?˙˙ü˙î˙˙˙˙Ūåá˙˙Uā˙˙˙˙˙˙˙˙˙˙˙˙˙˙jĶ˙˙˙į˙ū˙˙|(M˙đ{˙˙˙üŋŋ˙˙˙€Ŗ˙ß$ƒ˙ū˙ü˙æ˙˙?ūø}~˙üĢ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙īß˙˙ūŦđũ;˙˙˙üŋ˙˙˙Ä!˙Ú¨˙ŋ˙ü˙đ˙˙˙ŋ˙á˙Ē˙đ+Ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙ O˙˙˙Į˙˙ī˙Ô@ŋ˙;˙˙˙ęŋ˙˙ßĀ ˙ûW‡ū˙˙ü˙˙˙?ŋ˙‡˙å˙˙€ĩP˙˙˙˙˙˙˙˙˙˙˙˙˙ü@ ß˙˙˙ī˙˙˙˙č0 ŋ˙›˙˙˙ęŋ˙˙Ī€€˙Œ€“ķ˙˙ü˙˙˙Ÿ?øúĪ˙ük˙˙˙˙˙˙˙˙˙˙˙˙˙˙âĪũ˙˙Įû˙˙˙ü,˙Û˙˙˙˙ũŋ˙ügÄąVƒŸ˙˙ü˙˙?˙‚đ?˙˙đ œ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˜?Ī˙˙˙ī˙˙˙ŪÜ@?˙É˙˙˙˙üŸ˙ãå >ē˙˙˙ü˙˙??Ø˙Ķ˙ø˙˙€kā˙˙˙˙˙˙˙˙˙˙˙˙˙˙@ØĪ˙˙˙į˙˙˙˙Ŧ_˙Ë˙˙˙˙ūŋ˙?áÄĄ_a˙˙˙ü˙˙Ā?ßú˙×˙ü]˙˙˙˙˙˙˙˙˙˙˙˙˙˙üĸĄ˙Ī˙˙˙Įũ˙˙˙Ø@Ģ˙á˙˙˙˙ūŋø˙åÃ…CĸÁ˙˙˙ü˙˙˙Ÿßü˙˙ā Ŧ˙˙˙˙˙˙˙˙˙˙˙˙˙ õB˙Ī˙˙ī˙˙¯úč ­˙ņ˙˙˙˙ūŋį˙áĀ€đ˙˙˙ü˙˙˙Īßá˙ū˙˙õp˙˙˙˙˙˙˙˙˙˙˙˙˙ūZ€?˙Ī˙ßĮ˙ũ˙ũt 2ŋų˙˙˙˙ūŋß˙áĀ„‡€˙˙˙ü˙˙˙ĮŸ˙˙˙ū_ƒ˙˙˙˙˙˙˙˙˙˙˙˙˙üĒ@˙˙ßūß˙ī˙Ī˙˙xB™üī˙˙˙üž˙áÁ° ˙˙˙ü˙˙˙āuå U*Ÿ˙˙?˙ų˙˙˙˙ü˙ũ0'Ÿ˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙ũ˙ŋķ˙˙˙û€˙˙˙ūĀ˙˙ôÃ×\ī˙ŸĢđ¨@ĒŧG˙ū?˙÷ø÷˙˙ü˙%BgŸ˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙øw˙˙ũ˙˙û˙˙ûŊ„˙˙˙é?˙˙Fx˜÷˙ĪUũB]Ö ˙ü?˙÷¯¯˙˙˙ZāgŸ˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙ķ¯˙˙ũ˙˙û˙˙Ÿî?˙˙˙Ô˙˙ũEŅW*[˙īˀ~@*ǐ˙ü?˙ņ|ß˙˙˙?đįŸ˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙ũ˙˙ķ˙˙īģ/€˙˙|_˙ŋ÷ōøŒ;˙ķũ?ގČ?ņ?˙ų˙˙˙˙˙?˙ŋƒŸ˙˙ü˙˙˙˙˙˙˙˙˙˙˙ũ˙˙ũ˙˙û˙˙¯Ú/Āū÷¨˙˙ŋųlæeī˙ų€˜€UĒĸņ?˙ûę˙˙˙˙˙˙‡Ÿ˙˙ü˙˙˙˙˙˙˙˙˙ū˙ßŨ˙˙ũ˙˙ķ˙˙ūīŸđ˙ūĀ ŋûü?ücœ˙ū˙íęŨIō?˙ųĩ˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙ũ˙ũû˙˙ũ˙˙û˙˙Ģũø˙T˙˙ã˙œ~˙˙ūu€ö@]j¤á?˙ũÛo˙˙ū˙ūŋ˙˙ü˙˙˙˙˙˙˙˙˙ûb˙Úŋ˙˙ũ˙˙ķ˙˙]ūü Tā_˙˙>?˙œÃ˙?˙˙:€ũkĩT ?˙ûíß˙˙ū˙˙û˙˙ü˙˙˙˙˙˙˙˙˙ęG˙ī˙˙˙ũ˙˙û˙˙îŸūĒ ˙ßũ˙˙Æ˙˙Ÿ˙˙< 5ZĢ?˙ųÕŋ˙˙ū˙˙ä?˙˙ü˙˙˙˙˙˙˙˙˙ZŋÚû˙˙ũ˙˙ķ˙˙ũo‡˙ŠÔ¯˙˙ū˙æ˙˙ŋ˙˙~  *Ģ[ ?˙ũûß˙˙ū˙˙˙?˙˙ü˙˙˙˙˙˙˙˙˙¨_Î˙˙˙ũ˙˙÷˙˙ūÕ˙Å˙ú˙û˙ö˙÷˙ū8č U­Ļ?˙û÷¯˙˙~˙˙˙˙?˙˙ü˙˙˙˙˙˙˙˙ęô0ˇÛī˙˙ũ˙˙û˙oī{˙Ę˙Ī×˙ū?˙ų˙˙˙ūôBŽ´R?˙ũ¯˙˙˙ū˙˙˙˙?˙˙ü˙˙˙˙˙˙˙ũw`đ[î˙˙˙ũ˙˙÷˙˙ĶĢ€û˙ũ˙üņ˙˙ūĀú2ÕZâH?˙ũõ˙˙˙ū˙ū˙˙?˙˙ü˙˙˙˙˙˙˙đ*§đ+×˙˙˙ų˙˙÷˙˙ģWĀU˙ø˙˙˙ū˙‡÷üĸ˙zĨP"?˙ũû˙˙ūū˙˙ö˙˙ü˙˙˙˙˙˙˙Ė9đŠ˙˙˙ũ˙˙û˙˙×˙Ā]¯Ąŋ˙˙˙ūp˙˙ų€@ ? •Z?˙ũ÷˙˙˙ū˙ūÆ|˙˙ü˙˙˙˙˙˙ū˙°—˙˙˙ũ˙˙÷˙ĶīÃû}ūŋ˙ū˙˙˙˙˙ųėkŠ ˙ũû˙˙˙~˙ū?Ž}˙˙ü˙˙˙˙˙˙ųXūđ[˙˙˙ũ˙˙ķ˙˙õ{wßāŋ˙û˙˙?˙ŋã´‹TŠĨ?˙ũë˙˙˙ūū?|˙˙ü˙˙˙˙˙˙áėûĐŸ˙˙˙ũ˙˙û˙˙ęĩ7Ģūŋ˙˙˙˙?˙˙˙…AÍRĢe?˙ũß˙w˙ž˙ū\ũ˙˙ü˙˙˙˙˙˙ŅX˙˙p[ŋ˙˙ũ˙˙ķ˙īũj{_đŋ˙ú˙˙ŋ˙īŋ܀ōŗUđÍ?˙ũø×ßßū˙ū\ø˙˙ü˙˙˙˙˙ũ`#˙˙ā˙˙˙ũī˙÷˙ũ­ũ˙˙˙˙˙˙ŋ˙˙û?ô(ũYē¤u?˙ûÃ˙˙˙ū˙ūˇ ų˙˙ü˙˙˙˙˙ę ˙˙p˙˙˙ų˙˙÷˙˙WGøŋ˙ūŋ˙˙ŋ˙˙?ëú`ŦÕ[¯?˙ų_˙˙˙ū˙ūÖ ņ˙˙ü˙˙˙˙˙õá˙˙āũ˙˙ũ˙˙÷˙ũö¯~€˙ú˙˙˙ß˙ūø 4*Ē×˙ų˙˙˙˙ūŪŠIá˙˙ü˙˙˙˙ô[A˙ß˙āû˙˙ũ˙˙÷˙˙ŽU~ŋ˙ū˙˙˙ß˙ū˙üJ‚*]¯?˙ų˙ß˙˙ū?ĪBaÁ˙˙ü˙˙˙˙Û­ßŋ˙ā?˙˙˙ũ˙˙÷ûķߨ€ū˙˙ú˙˙˙ß˙ŋ˙˙ūƒÍEĒÕ?˙û˙˙˙˙˙ŋÃPƒƒ˙˙ü˙˙˙˙íTs˙˙˙ā?˙˙˙ũ˙˙÷˙īā?€˙˙ü˙˙˙ß˙ŋ˙˙˙]ūĸÕK˙÷Ÿ˙˙˙Ÿŋåąƒ ˙˙ü˙˙˙˙WŖ÷˙˙˙ā?˙˙˙ũ˙˙÷˙˙U €Ā˙˙ū˙˙˙ß˙˙ū˙˙ `QĒĩ?˙÷O˙˙˙w?ņV ˙˙ü˙˙˙õXķ˙˙ā?˙˙˙ũ˙˙ûûũp€ā?˙ū˙˙ß˙ß˙˙˙ü˜=¨ĩT?˙ņũ˙ė˙øđ˙˙ü˙˙˙t˙ķų˙˙āŸ˙˙˙˙˙˙÷ķītĀđ˙ø˙˙Ī˙Īū˙ö€ DZī˙ų˙¯čŋ˙üNįß˙ü˙˙ôƒ˙÷˙˙˙āŋ˙˙˙û˙˙÷Vßāø˙ũŸ˙˙ß˙÷˙˙Î ē•W€?˙ũ˙˙˙˙˙ū,˙Ÿ˙ü˙˙Ā€˙ã˙˙˙āŋ˙˙˙û˙˙÷ß`ĩđü˙˙ß˙˙Ī˙ûūŋ˙‰ÅGĢ€?˙ų˙˙˙ūū˙˙*Ÿ˙ü˙˙ ~˙÷˙˙˙ā?˙˙˙ũ˙˙÷û…Sč<~˙˙˙Ī˙˙Ī˙ų˙ŋ˙ļūĸ׀˙ũ˙˙˙˙ū˙Ā<˙ü˙ę˙˙į˙˙˙Č?˙˙˙û˙˙÷´Ž?˙˙ķ˙˙Ī˙õ˙˙ûØzYj€?˙ũ˙˙˙ūū˙˙Ā| ?˙ü÷Ô˙į˙˙˙ä@ŋ˙˙˙ũ˙˙õبņ Āų˙˙ķ˙˙ß˙į˙ßũn=ŦԀ?˙ų˙˙˙˙ž˙˙ūĀ˙üķ.7ūû÷˙˙˙ė?˙˙˙ũ˙˙ōD׿ô€ā/˙˙ũ˙˙Ī˙ī˙ß˙ė€4[?˙ũ˙˙˙˙˙˙˙ūp˙˙üđÔû˙¯į˙˙˙Č?˙˙˙û˙˙ķ>bāņ?˙˙ũ˙Ī˙Ī˙Ī˙´AÚ-€˙ũ˙˙oīū˙˙˙˙˙üđ8į˙}ˇ˙˙˙å˙˙˙ų˙˙ā)ņ6Ēđø?˙˙ūŋ˙Ī˙Ÿ˙ūQPÜÆ€?˙ũ˙˙˙ūž˙˙˙˙ī˙˙üôÔķūž÷˙˙˙â ?˙˙˙û˙ú—‹upøü?˙˙˙_˙ß˙ßîÃ˙ø€€ķą˙ũ˙˙˙˙ž˙˙˙˙˙˙üôA˙įīˇw˙˙˙â ˙˙˙ų˙ô6üu7•ž˙˙˙Ī˙ß˙ßßÃ˙ūH€}]€?˙ũū˙˙˙ū˙˙˙˙˙˙˙üđ˙į˙z§˙˙˙ę?˙˙˙û˙€ŊųvuÔŪ?€˙˙˙ķ˙ß˙ĪŲí˙ų ~ė€?˙ü˙˙˙˙î˙˙˙˙˙˙˙üđ˙įú­g˙˙˙ę˙˙˙ųú+ߏ{2ŠįĀ˙˙˙ķ˙ß˙đßū˙ü@7€˙ū÷˙˙˙ū˙˙˙˙˙˙˙üû˙˙īõs§˙˙˙Ę˙˙˙û´=ū2ĶgĀāƒ˙˙˙ũ˙ŋ˙˙˙ū˙æˆģĀ?˙ū˙˙˙˙ü˙˙˙˙˙˙˙ü˙˙˙į˙ūį˙˙˙Î ˙˙˙ų@įá˙Ī7¨ÛāđA˙˙˙ū˙ŋ˙˙ėū˙ߥí`˙˙˙˙˙ų˙˙˙˙˙˙˙ü˙˙˙īûėˇ˙˙˙æ˙˙˙ûß˙÷˛Q@ŧøøĀ˙˙˙˙ŋ˙˙ôūđ€ö°?˙˙˙˙˙û˙˙˙˙˙˙˙ü˙ū˙īūëw˙˙˙č˙˙ūđ|üs˙ķģē>|ū˙˙˙o˙˙˙ī`zč?˙˙Ÿ˙˙˙ķ˙˙˙˙˙˙˙ü˙˙˙ī˙÷į˙˙˙ä˙˙˙ĪŅy˙ũ™U >ž €˙˙˙Ķ˙˙˙Œ˙Ø ?`?˙˙į˙˙˙Į˙˙˙˙˙˙˙ü˙˙˙ī˙ß÷˙˙˙Ń˙˙ø.˙,ŧ˙üŨذ?Ū€˙˙˙č˙˙˙á˙ô€˙P?˙˙ņ˙˙˙˙˙˙˙˙˙˙ü˙˙˙ī˙īg˙˙˙éá˙˙ÁĶøôœŋ˙^¨>įˆĀ`˙˙˙ô˙˙˙˙˙Ō´€˙˙ø?˙˙ū˙˙ø˙˙˙˙˙˙˙ü˙˙ßī˙û÷˙˙˙×đ˙ôŸ‡˙Nūov(>˙āā˙˙˙ū˙˙˙˙˙˙ø’™@˙˙˙ā˙˙˙ƒę˙˙˙˙˙˙˙˙ü˙˙ŋī˙ūį˙˙˙Īø˙Шūũ§oųãĨP~āđ˙˙˙ū˙˙˙˙˙˙ô&˙˙˙˙˙˙ú?˙˙˙˙˙˙˙˙ü˙˙˙ī˙˙į˙˙˙Įū˙Oã÷˙Ķķ'ųí¨ü¸ø˙˙ø˙˙˙˙˙˙õAƒ˙˙˙ā ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙ī˙˙g˙˙˙Įūøŧŋ÷˙āüüb´æü~@?˙˙Ã˙˙˙˙˙˙÷˙˙ū1˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙÷˙˙˙ƒū˙ƒÃø˙÷˙đ˙˙hųŋ@?˙ā?˙˙˙˙˙ũu ˙˙˙ā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙÷˙˙÷Āū|,?ã˙÷˙ø˙˙øčø€ Āū˙˙˙˙˙˙<`?˙˙ôđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙÷˙˙ę€>ĄWūw˙˙˙ü?˙€ūgĀā$ ˙˙˙˙˙˙˙Ā%˙˙˙€‡˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙÷˙˙õ€?đ˙ī˙ū?øØ˙›ā"đ‹˙˙˙˙˙ôŧ?˙˙üĀ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ī˙˙÷˙˙ú€Ą˙w˙˙˙ū?Ā ā˙üđø˙˙˙˙˙€\˙˙˙Ā\˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙÷˙˙ü€Ÿøw˙ī˙ūz$"˙˙ø0üLŋ˙˙˙˙ø;˙˙ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ī˙˙ī˙˙˙€˙€w˙˙˙˙ €)˙˙>€ ˙˙˙˙˙đ˙˙˙€ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙÷˙˙˙đį˙ī˙˙AũÃ˙˙Ÿ?.˙˙˙˙āū˙˙˙č˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙˙˙˙˙€@÷˙˙˙˙ (ūŖ˙˙‡ĀĀ˙˙˙üĀ˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙˙˙˙˙€ī˙˙˙˙ Šŋû˙˙“â)āp˙˙ũú˙˙˙˙ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙˙˙˙ü@âī˙ī˙˙ āų˙˙ŨđCđ?˙đ×˙˙˙øÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙˙˙˙Āāøī˙˙˙˙D%|ũ˙˙Ūxø‚ īūúŋ˙˙˙đ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙ī˙ûGøxo˙˙˙˙ ˙ü˙˙^|~[Á˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙˙˙Øø<o˙˙˙˙„%:˙ūũ Ÿ"‘đä˙˙˙ôP˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙˙˙ĸ˙ž˙˙˙˙@$˙ūúĪĀ ?Ā.øŋ˙˙˙€˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙ī˙ū˙˙˙˙v˙˙īíį‰_‡˙˙˙đa˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ī˙˙˙āøGĀ ˙˙ @Ē˙˙ŋũķâđņ˙˙ũxŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙á‚Āā˙˙˙˙I›&÷˙Ÿüûģøø7ƒ˙˙˙āÅ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙˙č_˙ €đđ˙˙˙˙ˆĒ˙ĪŪúb|Aü˙˙ø?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙Ą˙đq€šx˙˙˙ū„Aŗ˙˙į˙YčžA~˙˙˙C˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙üū؀l€< ˙˙˙˙€ˆŨ?˙ķ˙ø˙˙˙ā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ß˙āųm1>@€˙ûū„€M˙˙ųŋ‹˙gĀ€?˙˙˙ũ¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙Įîč€?˙˙ū”ˆˇ˙ū_ã˙ûé˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ĪāOüCÎQ€€Ā˙ū˙)@˙˙˙ß˙˙üđg˙˙āC˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙Áãčæ˙˙)ļ˙˙˙ß˙˙˙xs˙ũO˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙Ü7ūŽ1æŠPäō˙˙Ü T˙˙˙ī˙˙˙œy˙ƒ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ÁükøįQˆņx€˙˙đ@ ¯˙˙˙ã˙đ>` ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙ü ˙ÃļĀæŦ|€< ˙˙üA˙˙˙˙û˙žķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙ ŋ˙1ÚöԈ> P?˙ū {˙˙˙ũ˙ŧ˙ŅĀ˙€˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙ū˙đxôiīēĐ ?˙đŒÃĢ˙˙ũ˙ŋū¯ā˙ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũ ŋ˙@ˆc|˙ŋũÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙ņīš˙V¨üD @‚fŋĀ˙_?ûø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙đw˙˙ũôŸƒQųĐO€„  #Pú˙÷Á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙€o˙ü”?ÅéūĀČČ ", [˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üøw˙˙ūø??ŌŨää‚áUP C˙ķŋˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđg˙ū˙˙8ūÄōķŽJ4ŋūŪë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđg˙˙˙˙l?ŋī‚ ø€xB‰ €˙āŠÛ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Îûß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđīū˙˙ū™˙˙ÛŨ>€ @¨/üį¯Ģ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūqĄã§˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđo˙˙˙ūķ˙˙˙ @ `˙€>?˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŊâUŪŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üøīū˙˙ų˙˙ũûáP0xč?ü W˙īį˙˙˙˙˙˙˙˙˙˙˙˙˙˙úĪ@2ë_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üūī˙?˙û˙˙õŦčĖŒ U˙Ā,?˙įį˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūcą Uß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üúķ˙˙ö˙˙ŨÂȃäā āø ˙˙į÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙—ø.w˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũ/˙˙ė?˙˙öƒ4Dķ€ō˙˙˙˙÷÷˙˙˙˙˙˙˙˙˙˙˙˙˙ũį„€ ˆÅÛ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üūĀī˙Ø˙˙˙I|€yB˙ā$?˙˙˙ī÷˙ô˙˙˙˙˙˙˙˙˙˙˙˙č ˇ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üķ ˙û˙~X˙˙Ž >`<ü˙˙˙˙ī÷˙˙Čŋ˙˙˙ū U#_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņĐ˙˙ū~Đ˙ūūPŽ8˙@˙˙˙˙į÷˙˙đ=Ÿ˙˙Ā•@ģ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üøė˙˙˙~˙˙ü”‚ ā˙˙˙˙˙÷÷˙˙˙Īß˙ā˙˙˙˙˙˙˙ū€V˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üôv˙ūū˙ū˙˙úIČĮ˙˙˙˙˙˙˙ķ÷˙˙˙įßū˙˙˙˙˙˙˙˙˙˙€Ģ÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üú›˙˙œ˙ž˙˙čAæ ˙đ˙˙˙˙˙˙ũo˙˙˙ųīđ?˙˙˙˙˙˙˙˙˙˙ũ=û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũ\€˙ė˙˙˙jˆ€xū˙˙˙˙˙˙˙ũ˙˙˙˙īÃ˙˙˙˙˙˙˙˙˙˙˙˙Ā}˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üö§@ŋ˙øū ˙ūęA<?˙˙˙˙˙˙˙˙į˙˙˙ũČ˙˙˙˙˙˙˙˙˙˙˙˙üQ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņSĐ˙üū`˙ôĒ@˙˙˙˙˙˙˙˙˙˙˙˙ūŊā˙˙˙˙˙˙˙˙˙˙˙˙˙˙€?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üųéā'˙ņ˙@˙ڌá?ø?˙˙˙˙˙˙˙˙˙˙˙˙ô˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üōTt˙‡˙˙~ę¤(đũ˙˙˙˙˙˙˙˙˙˙˙˙üĢĄ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üų:8ū˙ ˙Ž[L ū˙˙˙˙˙˙˙˙˙˙˙˙˙÷øÃ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū —˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üū‹ū@˙ü’?€˙˙˙˙˙˙˙˙˙˙˙˙˙öųoĪ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙[˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙F‡@üĀ˙Üđ/˙˙˙˙˙˙˙˙˙˙˙˙˙߅˙Ÿ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Āw˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü÷Į€€øūõĐ!˙˙˙˙˙˙˙˙˙˙˙˙˙˙ÁĀ?˙?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üųĀŠāĪų ūŧčy˙˙˙˙˙˙˙˙˙˙˙˙ũû˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ­˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üōđØđøÖ?úÄG˙§˙˙˙˙˙˙˙˙˙˙˙˙˙įÁ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũxĒzüx˙ū?Ā$˙˙˙˙˙˙˙˙˙˙˙˙˙üU˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü7˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üöžE<„ū˙ā ø˙˙˙˙˙˙˙˙˙˙˙˙˙Á˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūV˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üúŸ˙įū˙€˙˙˙˙˙˙˙˙˙˙˙˙˙ũ_˙˙˙ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üõgĮ Ÿ˙˙Ŗ‹đ ˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üúŅĀŖĀß˙üh~Ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü?˙˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ž˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũZaXđ˙Āŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙†ŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üöĨčøø˛ü“˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Š˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũԊ<†¯@˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ę˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üōĢM Ąü¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙É˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üũU¯€€?€˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Æ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü÷2R€æø_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üúՊpø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ã˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņ*  €˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üøŅā˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙âŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üņ~đ˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙ú˙˙˙˙ķī˙˙˙˙˙ĀŋyBũŨ^?˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üú€đ'˙˙˙˙˙˙˙˙˙˙˙˙ū¸?˙˙˙˙˙˙ũ˙˙˙˙÷ī˙˙˙˙f€?yyœ œ˙˙˙˙ō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđū˙˙˙˙˙˙˙˙˙˙˙˙īâ?˙˙˙˙˙˙û˙˙˙˙ãī˙˙˙˙f_ūr~c›åÉÛ˙˙˙˙ō˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üđā˙˙˙˙˙˙˙˙˙˙˙˙ũ*^?˙˙˙˙˙˙õ˙˙˙˙ãī˙˙˙˙FŸ˙c^O‹ņãß˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙|đô˙˙˙˙˙˙˙˙˙˙˙˙ŋ˙?˙˙˙˙˙˙˙˙˙˙˙÷ī˙˙˙˙Vß~IGņΟ˙˙˙˙ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūüō€(˙˙˙˙˙˙˙˙˙˙˙˙đ×ū?˙˙˙˙˙˙ū˙˙˙˙÷Ī˙˙˙ūZ€>Ikņī?˙˙˙˙ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ|đ˙˙˙˙˙˙˙˙˙˙˙ü×˙˙?˙˙˙˙˙˙ū˙˙˙˙˙ī˙˙˙˙ZŸ˙~OcņÎ˙˙˙˙ķ÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙úüđ˙˙˙˙˙˙˙˙˙˙˙ū°˙˙ū?˙˙˙˙˙˙û˙˙˙˙Ī˙˙˙˙8ŋū;~æëņÜ˙˙˙˙˙ųŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙üüõ?˙˙˙˙˙˙˙˙˙˙˙āHŋ˙˙˙?˙˙˙˙˙˙û˙˙˙˙˙Ī˙˙˙ū8Ÿū9~ōáņÁ˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷|đ˙˙˙˙˙˙˙˙˙˙˙ūc˙˙˙ū?˙˙˙˙˙˙÷ˇ˙˙˙īĪ˙˙˙˙=ŋ˙zūøäå×˙˙˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙éü˙˙˙˙˙˙˙˙˙˙˙˙üõ?˙˙˙ū˙˙˙˙˙˙ũë˙˙˙ßß˙˙˙ū|€~z xæ Ķß˙˙˙˙ûŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙ûü˙˙˙˙˙˙˙˙˙˙˙˙üW˙˙˙˙ū?˙˙˙˙˙˙õī˙˙˙˙Ī˙˙˙˙ũĢ~˙B˙ŊØ?˙˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙å|˙˙˙˙˙˙˙˙˙˙˙˙üŋ˙˙˙˙ū?˙˙˙˙˙˙ũ˙˙˙˙ßß˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙ņ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙¯ü˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙õ˙˙˙˙˙Ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úī˙˙˙˙˙˙˙˙˙˙˙˙˙˙jü˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū?˙˙˙˙˙˙õ˙˙˙˙˙ß˙˙˙Î˙Ÿ˙˙˙˙˙˙˙˙˙˙ųŋ˙˙˙˙˙˙˙˙˙˙˙˙˙˙V|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙˙˙Ī˙˙˙BGœ˙gķđ˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙l|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙÷˙˙˙˙˙ß˙˙ūū{y˜ųXŽ'ōgãāŋ˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūŲ|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙ŋĪ˙˙üūú|“ũûøķō`+‡˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø˛|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙û˙ŧ˙˙ŋß˙˙ųūō|ˇũø÷ōéH7˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙.|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙ũ˙ū˙˙˙Ī˙˙ũūzøˇųøįųŠČņ˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙U|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙ũ˙Û˙˙ß˙˙ũūō§ũû˙ņ‰šđ?˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙ūā|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙õ˙ûî˙ß˙˙ųūzˇųûū?ņēw˙˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũ ü˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙õ˙īũŋ˙ß˙˙ųūōsˇųûü˙ķ:w˙˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙û)|˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙ū˙˙˙˙˙˙õ˙įû˙˙Ī˙˙üúōųŗãûų˙ķĖsˇ˙˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙×đ|˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙ū˙˙˙˙˙˙ë˙˙û˙ß˙˙ūPús8IøĪûĖs’ŋ˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙˙ĩA|˙˙˙˙˙˙˙˙˙˙˙˙ú˙˙˙˙ū˙˙˙˙˙˙û˙˙˙ß˙ß˙˙˙ŽöūûŒ÷Îû˜?˙˙ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙n„|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙û˙˙˙ī˙ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙öų|˙˙˙˙˙˙˙˙˙˙˙˙ũß˙˙˙˙ū˙˙˙˙˙˙ë˙˙˙ū˙Ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙īĢ|˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙ū˙˙˙˙˙˙û˙˙˙ö˙ß˙˙˙˙˙īŋ|‡˙ /˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙ŨÔ`|˙˙˙˙˙˙˙˙˙˙˙˙ųī˙˙˙˙ū˙˙˙˙˙˙ë˙˙˙÷˙Ī˙˙˙˙Ųč ˙?gf˙˙˙˙û˙˙˙˙˙˙˙˙˙˙˙˙˙ļĀ|˙˙˙˙˙˙˙˙˙˙˙˙ū÷˙˙˙˙ū˙˙˙˙˙˙û˙˙˙˙˙ß˙˙˙˙™ÉųÉ˙˙~Oî˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙}ĘĀ|˙˙˙˙˙˙˙˙˙˙˙˙ũ˙?˙˙˙ū˙˙˙˙˙˙ë˙˙˙ú˙Ī˙˙˙˙Üå˙˙Īŗ?˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙īûj˛|˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙ž˙˙ū˙˙˙˙˙˙ķ˙˙˙˙˙Ī˙˙˙˙ģĘķ˜˙>Ā˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙ũģh|˙˙˙˙˙˙˙˙˙˙˙˙ũ˙ũį˙ū˙˙˙˙˙˙ķ˙˙˙˙˙ī˙˙˙üČ<ŋ˙û˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙wîŗ˛|˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙›˙ū˙˙˙˙˙˙˙û˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙÷ī}v¤|˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙ũ˙ũ˙˙˙˙˙˙˙÷˙˙˙˙˙Ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙ũúčČ|˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙ū˙ū˙˙˙˙˙˙˙ķ˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙ŋöʘ|˙˙˙˙˙˙˙˙˙˙˙˙ũ˙˙˙˙˙ü˙˙˙˙˙˙˙÷˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙~wŠ |˙˙˙˙˙˙˙˙˙˙˙˙ų˙˙˙˙ū˙˙˙˙˙˙˙į˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙ííŲH`|˙˙˙˙˙˙˙˙˙˙˙˙û˙˙˙˙˙ü˙˙˙˙˙˙˙ķ˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙ŊˇvĀ|˙?˙˙˙˙˙˙˙˙˙˙õ˙˙˙˙˙ū˙˙˙˙˙˙˙÷˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙˙˙˙Žč!€|˙?˙˙˙˙˙˙˙˙˙˙ņ˙˙˙˙ßū˙˙˙˙˙˙˙į˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ī˙˙˙˙˙˙˙˙˙˙ūŲ B|˙˙˙˙˙˙˙˙˙˙˙ķ˙˙˙˙˙ú˙˙˙˙˙˙˙ķ˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ī˙˙˙˙˙˙˙˙˙˙ŨģE|˙˙ŋ˙˙˙˙˙˙˙˙û˙˙˙˙įü˙˙˙˙˙˙˙÷˙˙˙˙˙÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ī˙˙˙˙˙˙˙˙˙÷ōī|˙˙?˙˙˙˙˙˙˙˙ņ˙˙˙˙ũú˙˙˙˙˙˙˙ķ˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ß˙˙˙˙˙˙˙˙˙˙b­|˙'˙?˙˙˙˙˙˙˙˙û˙˙˙˙ųũ˙˙˙˙˙˙˙×˙˙˙˙˙ķ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ß˙˙˙˙˙˙˙˙˙îŲZ|˙q˙?˙˙˙˙˙˙˙˙ķ˙˙˙˙üü˙˙˙˙˙˙˙Į˙˙˙˙ęą˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ÿ˙˙˙˙˙˙˙˙˙ˇų€|˙8˙?˙˙˙˙˙˙˙˙ķ˙˙˙˙üø˙˙˙˙˙˙˙į˙˙˙˙•ų˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ÿ˙˙˙˙˙˙˙˙ūûūą|ū|˙9˙ķ˙ølāwûņ˙˙˙˙˙ū˙˙˙˙˙˙˙×˙ū ŽëŠ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ÿ˙˙˙˙˙˙˙˙˙îÛæ|˙>?9ũķīû–|÷>e˙˙˙˙˙˙˙˙˙˙Đß÷ŋ´ŋü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙˙˙˙˙˙˙ũŋĩˆ|ū?8ŧqĪûÖ­g™7$gŖ˙ũ˙˙˙˙˙˙˙Ų- j˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙˙˙˙˙˙˙÷uj(|ū8xÃūČcƒļ~ėâ§˙˙˙˙˙˙˙˙˙įúŋ˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?˙˙˙˙˙˙˙˙ßßŧ`|ūĮ9<˜{˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙į˙˙˙˙˙˙˙˙÷öH€|ū?Ž}ĸ3w˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Į˙˙˙˙˙˙˙ŋũŲą|ü`fF.]ôSaŠãW›?˙˙˙˙˙˙˙˙˙˙˙˙˙˙Į˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙î˙īĀ `|˙˙˙˙˙øsœÔŽIöĢŋONo9¤÷˙˙˙˙˙˙˙˙˙˙˙˙˙˙á˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü?˙˙˙˙˙˙˙ūŊ’@Ā€|˙˙˙˙˙˙˙ū˙˙ūōdūAßOų˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙ßoúû%|˙˙˙˙˙˙˙˙˙˙˙ũû˙›˙į}O˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙á˙˙˙˙˙˙{˙˙ī|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙“ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Á˙˙˙˙˙˙˙˙˙˙˙˙˙‡˙˙˙˙˙˙ū˙×ŧL |˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙˙˙˙˙˙ø˙˙˙˙˙˙ŨītČ|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙€K˙úŠĒ˙˙˙ø˙˙˙˙˙˙Ū÷Ŋ˙ņc|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū ‡˙˙˙˙˙˙{ß÷öĸ…|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ũĒ˙˙˙˙čŋ˙˙˙˙˙˙˙ū˙ßîČ|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū˙ģD|˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙vĒĒĒĒü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üleptonica-1.86.0/prog/test1.png000066400000000000000000000347501506303110300163020ustar00rootroot00000000000000‰PNG  IHDR&Ē/˛ÕgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœÍy`Uļ˙ow'vˆKGŅ荸DÄ}fܐjpaGĸ“buÄTtYR`„q 3ĘF°ãÂ#tŅ‘eĢÆč€ GBØB"$$„ôZu~įÜę$]՝ßüūøõCR]ũéī9įŪsĪŊuĢƒ˙¯û˙‚2ۍ¯˙{Š [ØŊL{-ø™ÅM?“ģ!ŪĶģ~ņoQÔøŲŦO [Ēšī vž÷į‹"ąß@d=#=ĄøŽˇAë˙%Ô?ņģöo­OüSÆŽ3RŪđėĐũ7I…š­döBQĸđ64,o¤ØtÕū™āģČh‘Š˙k{RyŠw|¸ŋõöi˙xgDĸW›t”ĐĖÕ{_ÛY"pÆõ”Ŗ¨ĐõÅÛūæđHE-ē`Vėņ'FÜÔößŲ˙rũ„ˇũĮv ´k˙œŸ§hj\KŒŲØÔsž>{ˇŊŗÚ>ĪÛPat‹ …Ú?Q€Ü{aœĸڅ Ŧ^_øŪ­sŒ  ē´Éʁēüĸ.1|Đe+į÷Ž€noöŧē~ vŽ‘ē(!X°ú֌øGžœbüPāL|0˙×]~Q_€áßŧ‰ĪØĸ|Ų¯åŒ_Ũõj˙?û&S’4ĘęđÎŦŪ?ádŋ×wTŸ4~Čg<îú%zúĀō1q-÷H ū÷æąąQŋ;!Ī>ųe ōÄē~iŲŠ:2ãƆ˙×SĢKw¸>Ú]“kü ¸ÎHé dæ4b~aøĘnËĘ{ųZz Æ=ĄßZē3§õÃĨÕSãĮoÍŲcˇöÁđęĻ(§ė`qīŠ;īHū{<;úĶöĶé ü\ Ėoņ{â~ o0ˇRũâÕ'’ęØēîŗ"2đÎ~FŊŪ­SãÁ~ûÖĒĸûJ§­ēM<íũn-Ž?7/Á—ŊP‚ŗō†hŪ…ÂJĀũŸÁĪ_ņ‡ũ{ŧAy“|6Š"—/ëęGp6ęĐ3usĸZĢė˛ĄÔĸÍë“)ŽîßN:ĪRˇ÷°y‰uu?ŪôW"ĻŖ¨QõŖ8å#ĨËžš>:›–5a-ŌpM%J?Â]Ū­é!ë_Ū‹LŠkąöP¸_”Hĸ˛ŗSāņŌ8ŞNKC—EÁ„ŸēWU÷oÁ6ßō´8ĨûĨ}¯^ËY)Pģå>3§=Į¸EŪŽH7œ‰’qÔEŖŒ”í.š ,Ũ+ņĐÆÆ+$Ã8ÍũŌŨæÆ/îEËļŠŲË= oaĸŪĸ^( ZZZŒ™j (:-ÁŸAɟŗ>3ŗ-jˇ_ÎhQE^ĶųõĘ^(JwfĐ´TAŌ+1lJ¤qW/”ˇģĩD†– oáė’üĸˆ ŨąĮĸ˜i×ĨÃeĖŠb’–9§?ūG˛–í` p‹ļ|XiƒžËŞ7â_ŧeÍĶÉ1ō‚Áģ^úņŲĄ†J€U FŠ/š×‹–ãНõ›{´lknE/]Põ×$-sÄ˙ÉIŌâÓ…k9đM K“§r$Qäíw¯­ŽKK´GËgÍpÎĒĒ“(§›§č­tה¤%Ļi9ô |• 3Į'S`NĮl%I¤UŖŦj´5ÚaŽã~ąGdüĩ9zm’EôDš´D4‹§]Œnūė?“ĩņö•ô•ˇ§.Šö•š–¯Â_a×:™ ŋöüâK¤– Ļå@ãy—b–ŸöT˛EđÉEË ‰Z:ã ß'/X b捐ŦĨvīTƒ_ŧF-jo}Z¯ÅWbŒQ’_âā?nĐŌNĶS"ĸ‘âå”×;mĒ=úĒ=ø]tĨÆbëš%†é(Í‘ĸfEfŪ>6dNJ~;ķo˛Ņ"(Ч„tu@C”÷€X¤-üq}4 ogV@ĨÆ6ŋt€O‘Éĸ°Ú6ŗ"Aāĩ;į$Sĸ×öFéōb×ĸF™gEŠ*´žļ™(ŋ(EąŗhQāˇ]EmŗŦÃIeaë_ūî’´¨ugŗHáY¯Š(ķBᐭ!ŧ~WĢ=I 8ĪŪ^ļbâĩ-¨PBļ`ÛÉ1ˇ%[7œÍ/n°¨C€„V×ÜĨE] åĪKŸ{âü¸˛¨Ŧ§Dc˟(8õ‰-Aęŋ>ŽånæŠĄkåxXÔSNÆX‡đwŨúšø‘žąQŊŨĨŪ‘ßv´U[Ī1–ãÁĖoIķĄŠGKTėĸĀí˛zWū‰æÖÚƒE1´ˆ%.õÄXMˇ­á.žä‚ËōĮ?Ņú •t$ÆÚ¤!‰Gü֚.-œäM’FŒíĶ[}ü­VQOQĐĸv`˛näZrŧųcÍöŅ­U.NŅC@E‹ėuú1ičcq oģõœrŋ žxlü+­õ^n‘A  Ļ2{â!ßą8%ÚCy*Wũcūo˙ęũÕf€ 7#’ōNß§qŠŌcŅS’đĸéÅÕį­žø ”Ö–oõ'j Å˙āÅL@ëyųÅQJmÜÖ¤ÉNŒ…žgƒŦuVã]Zz›Ų““ĩ -:ī&‰É'ksļŪjoãÉč—ę—Ÿg!fI>ųŒZęb,xËÒåDˆåžŌˌī¨ņ@Œ)Î2É* R˛˜č™(˙LĻ´•üöŧAėŨ+3ž9åĢ^´ė}9eø —ĘũÄäķĄ×Yųׯ3cŦsm߯-ô{Ãđžz&ĘËŊh™ôû‰~;ŧf÷ô•õīi|Ŋd8‘"ũŊį}bOįŗJÃ{ũėeådc˛–ŽiĻE.€÷_ņ§ÛuīŠŠg ¤‰ÉZ Īq™lĐ 2`’î=…ˇ!ÊŅ/NĻtnŋoøģjēsCfŊ˜$&y]JÍ1AīÎuĪ3ÛbsAe‚g°ūM§Ŋˇ•ļØmÉZÚüûũĖÚ'Dž –uēwhä0~Bį'k {Ö×ĨT…3íęÖ ąņEŨg”¨­Šŋ4™,Ø)IļP†]íØs0}ĸŲá’WC=%SāūĨfylp¸?ŗúŲē÷ŊN^™õ$-ŗĮ˜úĘ ÆėĒà 1Ëߘ é/œt†g$0lr2%|įíLĩCĻ6N~ Ķ8 @0dhŅ žûV2Ĩ-ûO&X ˜ėō›>Â,~ģŽÅJŪ5|$dNJĸ¨ådŨ58Ú9,pđÕŖfÆ{HH<ŖŨø‘:“ņeīßíąaE;Õíî‹Ōl]ŸƒÕmuúHŠ^ØÖ9dŠE&P›2FϰáčėîĶ(u+ģėúO<$&S”Gq9Q@Ū2‰eĖ ˛.Í ¯|:˙zR.HZėĮ>ũ6Æv5lGJãČ匝čūŽ8)3€ĻĮūfē;)qÅXûl –č bŖ°ąĖ˛Ë˛XŧŅđr§ÁĢ%š¸W+ém„=EÎķ‘{sQĻuš•a-ĸ•4A:ŋĘ u]ūVR”(F"Pķ÷XQ‘9#ëõÛŅģāČāl@Š˙n:ƒąŽøĨ¸Œ-ŊPEvĖĐų‘ĩ1ĩ1u8+°Å,ü )æ]2‰(bĖäd؞ØUšŊPTĪ@Ņâ~rčØ ļ@z‘ĨŒ‚ēÁ‚FŅ5ēÆåf–iNēdF‘fvėÆâ)üTįâ_ېÚRØ;˜Ŧ]~éy) K¤Ėe_ę…a"\b':ĸöķ]‹4ÕõaŦN Ņ€Đ`ˆÆ[kB֌’¯ŋĄEˇ‰HŒ"ĨcCŖå[ËĢŦ/;× ža4Ęõ‰Ō™ĶÛ %Ä|˜ Å0åĮŖYļåļ›RគF!vîđ(‘ĒžŽ[šs{Ąø5PQĨņ8%Ş9ȑÎúMí_Ō!Š`Øv,ÃyDî•Âĩ¨Ģ՚F°ëãčĮŠoŒYĘJ §Ģ/ŧ[ŋ. Â)ĶH <#ČžE™!i.KÅū’rŽuļ—“Âņ]Ô+ž‰B‹Ôâí¨_°6†uáÆqŠŋ”UˑfãųA{Ĩ„FN Âŋ,ĩË-?š~dlŅQgßŦķœÜĀz)9ųH"Í1öĻ ~yRõXwYv1sŸ+‡eôĄL/&—cj¤wŠĩ(í.qņCá=ã—Û$ļ$ŗoÚšWeY#HŲŅËgzĨ€ÄVßß!§8v¯=Ķ–Á˜ƒ-ēä)ŲšB4dûi†FЧĨ¤­°pb„ wŒĀÂŦ)˞X`Y)øYb"båu,ø¨ú¯â=lŽ4—Ž*-ž"Ķ’ ~ÕF‹ũgQBe°SüŽ&TûėČĖV EúŒr1wc `E?‹‚I5$ ßÔė>iÂ@Ÿ`&?ģįîŖ´x¤îŊ?AQŠd4|ŪØ&į2f]nŲ)—ąaitY…rL–âĪĄPö÷Īm˙oßæ=ĖÎl™8¤ųŲĢ•%"†˛ZV'&ĪAzĄŠšų`ßÎŊËØˆĖAYHQûõéC×ņŒÜ÷¨ĨˇÉS%v.T~â9ą’îđ"3LIoFaģ5ĀDëm&g¤Ā16=ÔđĐ2֊ĄÆŅÕī`™4CŠŅoÃQeūĘáÛÔ×o>ą>Ëü#öiüŪÃéæėËAëyĢŲ‹číÅ?ƒfØQīÛ/Y-'hTMį\û hKRsŲL›S“öĄ$SĒęÆĮîųî!É&Y=8Đ̐r­CÔ(1žÄęØ=?C ôƒ§%[†×.ę›ËúVˆ æÖCô$˛Ųšgu0§āp.†ŸŊ™p ’˜Qu‰ô[‘–Y^i ąhSZŌ„0YKĖĻ^°_z}!ũ)ąeĩÎŌl![iČŽ3›ÄŸ¤ĀģāAúŒÍå5ēd$û˜ĘąGˇdųŒ0,å,މ[š.ųą#rû—ąsÜ"T‰<ž edŒĄ•Ø+?ŠŪŅESFËŪū¯ ¸bŅ-Ą4KˆŨFÍĨÎōåŲ)TŖãø>z9ú<ĮĻt‡ŲMģd…Į,850Ķ’ÂæĘ?ĨÅVÕÆ0Đvú ķÔll|ž–Ī_r=ff§U]?ûũOųā=x3ƒFq°Á¯*F Ģ<™‚‡ŨĀB$CxĻTŪCŲoąáŒũ°„]}'R”ķ]WψŒũÕoûļŗŦŸ ø ::„Ö(,ĨĶ´ķą)ËķSØdq‡H2Š.(ü)-āŠŖÔÍGĐ{SŽ^Ч&Gæ˛ ClQĻOĩō=Lˇōd h퍘ÃtŒ(ČaĻ>uTÕúM÷øąÂÅ$*ŌBh(Õ8YJŌ‚S$)Ž…ĨĻŋ,cūÆąk­uĪSRL||fōOhɂã"ßąĸž°Ô“f÷¤đ¸Åė MŊŦ<õPčÃˌę¸EĻ‘ ŠwĨŒŨ@gÖŠäāFÄ0âĶ’ŖdÁÎĖËĐLéÚËȎ)hŠā\~ĒÕOŊCĘĪĒ%&1•D>Pᙨā+ņ3!ĶMą4ÆāÎŨU€€Pʅgւ”ˆÄŪŽEÅöz^ŌĨ)ÄŌLLûzéQrŠįŅd›´tHƒRl¨E™/ÜoƒˇëŽ´úąž1ŋÂĪm7ođ–ä1ˇ+ŌHi’Fŧ;A%-XŠH–6uš‡Ųꛊ.ŸėššÄHũ—žEKĐŖ.&Ôã¯!š47ÚC…R›‡YՂø—gSęNI-8A ,VaqeĨŗ>mË&‡Āp ¨øšĘ,–IŅŽģĀ8 §G@•ķNU m•íA¨‹‰ąĮ7ŲOÄĖ,ßACKŧŨEîh•ŨܛŸ6qF XĮ×á‡Ā5á–b{ėSFũSėŪî×1RkëΓ)2F…(U!öcZY7#\ŋ6Ģ~ŗøųÜ:žĒԞō_ZãĄôLŪ‰âÅäB~ŠA´_âZ ŠęŒŲCF@]†ĩNZ´“C[åā×eqSÁ"ųåäQ|sĮĄöÕ2š–Hę[¯Ėĸë,Ļ-tååt%„$)CøŲ|QoģØmŅíöXH‘>~AÜīu×ļūڍSd,€xÉ)ŖØÔ‡2˛ĐŊ–Ã˙$-$e;đ6K”ŊĻ(”Q¤w™4-č7bāãŦĢZ9EÁâŒ˙ßĻ‘~}ĶÂׂn`ˇŠŧOŸâ|ģíۚí8Üb i‰U!ĪĐ&‹SŧķËÉLˆ/‡Scž¯īîÅ(ō~ä5JĮūâÖL4 ķvîÅ8z•į2¨éŪŊa/Zîō‹ŠCļŨĻūLë[ģĖq‹‚›~ņú9´„ˆŽ9ĨŠ.ÕE÷ķuŠyäuųcäY)đÎōyöŽK[ŒūųwXWå3ž“ĒčalŋŸ¤PÛUßĢ‘â1Bŋx†cˆâÁÄC“ē:“×âZ.bŽÄ@[D>DTaY/Ã_x/úrtIÜ"ŌŌ˙ĸĄ.NiO]Ŧia]1įoŽ ;…â"P=ų›ŽmķŠ RˇwÕa 4 \ū'P3a.­ž‚?yhœ´P^Ä8ŖúN)]~ī$†˛FgôšŧĨcĸ-€_UĮâ~‰F•įjļ üĸˇļ &ļctwqy6žØĒĐJŦōgXģĒæ īkuyĀyŽÄmŅ:‹—˙Ã÷΋šËņÄ ÍŪæ­9™—wQZ˛gę)|uŧG%Æ)ä˛)”čÔ÷ĒƒÉz—|üŖÅ}ē(‡Jû{åJ4ā-–h7Q"]u1QvßįŽÆĩd)Wf-^ÜEiŸ<’&lĖí˛hŖ“7f•㉘¤Æ-Į-:ĨŒQ¤ÉJĄjÔīwtĪ&:h@Ģcƒ”8Eé,CŠÄc‰SÄPŋ"¤ür¨ģ†Įˆˇē#ëĮíĻ4aN{žOĘÂ\˚ ŒaIĪ,2%´GĄ925ƒ‰Ē's-šÆúõ… sØoīäO}šÛĸĀÚeJ™ø.ˇH}IaÉQ”!œˇb’š/iŅF5Uüg‚đ]įŋŽĻ;Ō[&`7˛8!dįX*cīaˆā˛ykŗŽ$JTË/|Šģ›ĸĖ™ęŸ|ēģ7ūPÂD‰EEŅNC@LlĨ›ÆL‘[Ē'C”ˆīŌ(ĐÔ~SÅ!_Üĸžų žf—@U m sAĻ4fmĩq{˜(eu(6å~×­E­6Á—”ģ##Tõvl˙į;KĶū—Z]°Œŧ›D™d–Fģ"­ĖX /īĨëį…Ŗŧõæg2{ŅВÉŦ÷‹—kYc 4æs--F§]65Սķa¯‚Æü“`ÊÎûÕ¤’”~ԏĒeNųQÔSĸÃÁŽST{ėÜėēTės#X]Ißx§Ä6Ŋ<;-,jŅ´DívEIåáĶ´”(ö˛Y?€z._PgI–NĮ”ŧØQ˛čĐ >И)j!xkģ´¨>—?ƒ›.GcBL|b55fmaMĩc-mdQ9ļębVŊāM#ŽĨėā›,Ļi‚~æÄ|ū\˛¯”œî÷l­dQh”Ĩ.=EĢ<5-ž-7JVÚ“ r°-ôę]"&ôe+v ­,>ÚŖˇäÅI”@Y—×i]€GöbúVîû~ÂĐÉāûFĘwX‡ē—ã‡p¯šß)˜ØĐœrE1đļëm5RÚߨE:z$, ejEčßÜãĪĘǞA4™ŌWāąKø€ƒ ōŌÔ$ʨJ¤Ŗ —ŠKâëÔųXâC-‚žŽĻ0銋ĩŠHŦVĶĸ> ÆöŌĪ/Æx¤Å°¤-tā–°\B‘ī#,-ÅdĶöŠÁs´,åä5P"•YöYÔLëĒÚęœ]É´Ģō)+ͰÔË öã%-ÍA/wąô{ŅØ^^*ļj­ŽŲ÷EÜ"˛-T„p°°ŽĻb|įÜŦų@ûË =ö ĩtĪŽE…-/ĄÕGiÎP#°4ÚFUQ 뚉Õ3 lW:ZXe €øiûpŽE…—øU;ūÅīŲĒKüŸ‚bJúwíet:ṡ'Q tŨÚë{)ŖŒgP™ÖA•…` +4QŗÅ÷aŠUb4Å Ø}IĨߎEö.3Íā;&a邍ĐĀr&Jbgũ–¨*dĐmļF |)išN>lYŠå3ˇHņôĢžŖŠô†¸swRl7ufŌJVeî{ņžļË<:}Ú7īËčȂ GĢ10RiƒPĖÔ0yååŊPb÷î$J–ŗu|;šģךĮC_Ɨ*"bhoAŧ#d:2oĀšŊPTÛ÷|*Ԛ5JuąŲûh+p-–a5~ÔVgúļķ>ŊPāīDŽeõé9šEģsØŨųÃ)D蓝1t2ö4Ė ĶĄā;–Ū(JNa+iY‚ZT—Ļåëõ[ÅT‰;Wˆ=Ā.Jˆ&KC´w ”üĩ܅Mã{oioŽrÄÍĻĻ…HŊŽæč +8Ī`Ļ2ī(j1¯Ĩ<˜_Čģd‘ˇá §­ž`×jÜ&ú°Åg Tīģƒ9ĪuqīÖ ÍĶ䚜{ĖīĢ-C˞ÆëēĒW ĖéG?‰˛qjŅ×ęĄŲÍš_–ÅŽņˇ܇å0øŪy‚_ĩLĸ4ņ+ƒė2T0‘–ĒģĘ÷Iņ–{įáæŽSt8äaŪ™ÆĩIQšH‡<V5ėÕüōČY4­Á8EL§9\Ę´(ŪwfrJŌUĒH9É\ Bøé§}šMjí?´–fđųüģ%Ô"žÃû‘ęH2Šd)ˇČĘī*ä1(˙ZK ;&¯ku-RaõœÅtļ=ɤMĻ8ES05˙jŅįkždĪ-šK~M´.54ɤ&ēdJã§īÆéh^#­ēŠ}ōhŽīĶ,ŠY@\ONōåpē"ˇ§¸ž¸¸7įŦ¤ÅÜ+´š>Áw„ĐĸÃųVō‹ub’IKGkåÆ)ģe˜âĻÖ~“Ē|q-/e!ekáyvŒ‘ĮdŌŽˆĸí –š_ ÄYLÎũ|¨Sä Ütxą)Ã˙˜6šv" •Œ”ÖŠb7…´ eMĨ’sŋ|Ø-{Ģ| xéˆ%ˇc¤h3uĸŨ@‰eØÁcžÖMŠÂ‘ęáOi@[t-ii@ŋÆĩÜ!™Lԏ¤’¤K(R%ÔĨ–%Zô\i697;ëe¨B1 ėäĖ!"ŠPŌ>ŖC2:Áĸhų¤büHĢųJ'TΑ13,ÅI•k7—6œ_+O6)#Ô Z—`‘ˇŠz:ן]ÔOüœˇ—W@Ŧ$-× `ƒPŸ^TbŒ’Ú<žŽšÆ@ŸOÖŧ̏7!eYzĘP¨ü eŠ™ .F-ę3!Ķ ŨÉZ7)ɤƒõGŨÔrsŖš– Ŧ<)ōŖØ¸ ‚;s…ÛTW%Yôž˙Rj/ JnxŠc”“´”û‚Q‰Š›ŗąNIË6™á<ąų›€PĶ(÷T æjöŋIQz5•¯'Ž—B/‚-ÕÅčÁ?ĘL…7ÄC[Á§TqīN{iK˘u““LûM.Q& EĨģƯĪÂö\œũˇt¸S]rįĘKÍëíąĖ ™iŧ:SŒV5ĶÚŲœüƅ@@ŠŖāDƒI§h!ÔŅ…u¸OË*&ēüék/ËĒOÜYu˜Sžq)G -ˇĸ–Ôv>¯1U(“žā#ö`œR‰vÆ,ŗŒ /zŠČĩDƒUØZ˛s¯ųe~N \Á؁”X7ÅO“ OY’I7‘:W¸S۝ŪČ,ķÂvYŋF(ST™´Ä\§āq/„ÎĶīūÅ×´˛įÂŽĨŪÍaŌro7%Âo§đl4¤‡đn—VKŅĸdõöä•Ė|§Ŧæâ{­2Ä^đ°ûü7ŨØEŠN‹@Ŗ>Ją ÚE}˘ŪČŖX1Ķ“‚Jõˆ‚ŖgÁ‡5…Ī8e§‹v;¨–\ũV¤˜Ųí GxQKí3ÂרUbŒj€Ø;"Ũ‘fũÛEŠōĨR…u<¯Ŗ¨Š“°x¨Ņģ“î˙3g˛”[dmeWöÂQĪ’ĨŋîĀ).oŒöĢÔĨoЛtnĮ¨BRAË"4ą9'ŊTģ‡I•rŽUōÄ)ÁąaģŠĨN1ôĨØ{īrŋė¤IŋJâ(ŅîlQå¯ŧäĪ÷ŧˇ#N„ũđ]=–ĻķË´ /Į~Ē3´94˅o4 GŋHŊüŨÜßwQ`‘čptķ§¯6ėpYŲ—WqäĪ#‡éR‹CĐîl‰aú9ūyúˆ‚Í]‰āBöŠĶ &KąVĄ5;Ŗ<đęa"đ]§ ļ—i_˜ÅrēV”DdĖĮҤō,ŊI1Go\ 4۔ɨE2ŧŋ7ČZI‚WĨ7´Ė@7ōÉč376ŧëöL*ęKW2vh/ͲL2NzB+Ų^OD'`B”øõ‚Z˜_ˆíĖX…úQįōĄ uƒ)‰ Qbv¤ĀWĀÁb+J@ -ęZáˆí8†9QĘûĮŋpMJ~ ~ÚK“‰"ŊŪÁ‹.­RIŒi=ZéŨŽ “ĒŠ='tȄŗr x^¤Ã.ŽeŸöÃBčzÉ.ēŖyŧBŪ Đ.Đø_ڈí:§Ä0-hڏ~MoĢ”Z<Úō ߌ“¯Zˆ5NŒ—áß-H÷Ÿŗ­T“ķ&ŊIŠ[Đb“°ÁØ/0Ķo;EËWāĄ™ĶxčĀļ3_!RTŗw+Ö #ž5¤_§ Ēų…˛h¸•`ōÉJ>*ĄjMÜːrÅŅ=čžĸ촁?õNô`s‚`­—?Úln¨)˙|‘ˇįÅäwtžg6ĸvG ĻEĸʞ‘‘ōާ¨ž~Ø+b&g–Ū¤}ˇNqØc‡ÍŽ—(Õ‰9?ūģ÷=Ķ›8°IũœúŽŨQũGŸ—Âíƒ P$ø5K!‘"’äCË1öā3n}”T÷Åoo#ŋd°aXaÉ]”ŽJ0Öõ¤­O:ũ>Ĩ›™r>ՙ¤LX4g~?ÄŊ¯¸|ņ{mųfÄ8Ĩm!Ũī!Ō‘qŦGCiũ}”6Vo”éTļøC”´“6#EM „?>Ų_š\8Õq'Zî`¨ĄÛ›ĻėŖ›¤M)8l¨ĶņK 7TÄXŦRņÅīÁ”7 ;¯M2+֛ôXŲđu2ķų´ųf:ļCFŠj9ŋ–G^”ú vVÚ_Ĩĩ‹7ÖĀiÆúQŊx Rž (`ōŠ"hÉį=v˚ēËÖë7gG jÁ{˜ąé”{ĘņŋW’(o §b…ôĀŧ(ŧqîP RsŠušĒZzî,`lú]Á )ĢŧĶ@i ×(Ę^éžfš´v‚Τ¨Ŗt›YʈBƒByÔHŲęÂ&TÛEPŊ›Ŋ“ĖĐrGĸIęĸĸŧ—˙(šÍGØ?%QŪyŽ K0ŨøĸG^Ŋiā}˜7S QÚq4ŧpKß*Æ)‡?3Rŧ8 Fƒâ îÎ4}`+*t&[õœü ģˆoųĸlߖLéĖąjļ)dą}˜ē*|ĒôЍÍ2”Ęō‚ŨÚNtc˙<íŲØč˛×'QĀR­ŨU-Ŧ}öãĶž”TG*–U×f'DĘ#ĖŠ]Û@Jû;Ĩēû‡9Åã úxæ}ˇcNÚŋ`l‘Tƒ5HYļ˜pæžŊ+N!Œ”6=å$îÚÚÜ´pÕ?†mp0ē5E5eëzdķëũĩåNÂw—Ã1QGЇÚŸKĨ+Nđ‹KæĨŽûP[Uö\?!q‹mĮë7j;';ķAģ‚ ŠDJėV°Zà Í#n[Î2Æö`ŦC'ŪÄÚÜlįZ‚h‘ē0x­ÚC‘Ą6rš‹×XęQgķāūGb,#Ū¸âJxĢ =ĸS€ē`" w)´‘‰´ĀŅmΏü€ ĩÉāŲ˛)ŅŊk5JĢuŪ5ņ^fžŠã nˇië×oŊõĪ™(Ɣ Ą”OÎTB˙úĸHyņé…PĻŖ|qÍieÍ Č§ĢŅ}Mûúæ14[ÅĖjÉzÎT?Ö´ø"Hš{Č­ĘeįœÎ#Š3H‹šjgČûštīŨĨÄÅ@u¯+ÁGĨĮđaV>ÃéĄø‚Á†A>žŗÂÁkoyú_™tÕJÆ<™Hš@욌Z|ęÜâÂ$JôõZÛ%:ĸtÅĐ'™ÖbôwA3­ŅŖ_ĸđHąĀg! ”@tPĢĖ38(kZģbsŲLš¯­ÅwŋvhKLUQLŒ‹tOā­.ļģ[f@‡zčã^åR8ÆĻ$j‰onõR}YûƒVõ'h‰Æg'Ī ģ]pĐÛī`Ū'W˛ͤ´Ū(QôāŒīuo–¨’‹}č:ļŪ@žēÍÆwŖšąGęŸ]ĸí@“Šū {Â×ĮŊXܐīMß^^ņͨûø' ödŠ@ZĒ*uO¤áZāSÄÖĐĸāG7nûdwÆ9äŪ1ĸß E+7¨܈ŋ–ētZ”5ĘĨTÚˇmy+g˛ûŠÔ+ø…ĢŪ(*ídQ qLáÕiŅr:XõĘ;ôÖÂ&ßėk‚:EÛ"ĩ) Í8zųôZxОÂ˙n —N*ņeeō=Ãđnwã%Ą2)ˇ öMC"ĩĐuEz[Õ!L~fIQ=%Õˤס -¤=no]'ä[)^…Ī%vaO÷)Ū˜s§ÉL›Ãíā0háÃŅø(jŠÚOˆĩ:ŠöŒē%xNÃ÷2lSÉL;1!&õB DĘ­b¸pŽĸ=Ŗn=ÎxƒíÁųáIŠKxÛ#ŦJx^RŪöClü =…æ*°CĀ1å‡MÔ)Dūå ÖúOü°Z؊ŊāX"ÅÅįžđá+ht`†ˇuŽÃĖhû23jqåÆ}HšĩÕĢø^ÔSHnjcķö¨ ļ.ÔmĨÛõ™~ˆíHY:Ē6'ÎlˆÂÛĪ=ĸ2ã‘)ž=˙ͤ”‰čEFŠ€ŖR›ˆã´úc(]Ŧ‰xu™_ øĸ3>kˆF]aę›Á5ƒîhãŋ€”Ø/ÃˇĀkáŊP”XtÆ'pČ*Z–jĸbÔB~ØB ]YŠ,—č-ōŌm'ëTīßY]MsûÄĖŠô [š›™tZø ÷ŅøąSąŨ°cÁ[:JUR_$÷„;›ßĘņ-+Ō6ZGÁ˙öVÁ)Ôr‹ú•ˇ#˛Žâķē°Ŗ‹š',t_âš:%Íd…Ŋ˜ītZ¨ōn´ķÚûpžßÖ ×$PėĐ@“[ŅåSs;JƝ0fci6؏MīâDŠŸ˛]!QÔgōo Ā_uūPCą! 5§ÔÎ_<Đ'í ę‹Ë~áĪxō~˙ÜUX4%Pr1ã}]m߁ØZŽĸgâg°[Ī@ųXŽS¨ĐM ´YĢ Ü8GÚŌĒF6ôÉ2ąBØAûwtwŒžĸy)ĄōjÚÛŪcÆČÄŲ'úkģžĻõéËĖNĪšHĶĮˆ—Aĸ¨ĪÉŽ,fŊ=~ņĪ­al ˛Ģ:ßx3­ÜėTĖŧ}õw˙Ĩ›‚U-u:žĮ/Q~˙DgŸeÁÎmķ?YÛ'“ŌåƆč-ZE?ĸD ¯rųnEŠŊ›ĸ*|ũąaũĮˆļųj̧˜‹2€3ë”,Ŋ–Ú?HéI…VÕãîŊ  ÆOÔGZ+iHėœč|ĄûuœÃ..ĪېpלđŪĪl;ØĄ‡´|Į ;~Û€?ôY’d›xn¤vãk[`g+Ûdņ(˙„ėéÎyåŲëŌ@VĖč:ÆÎA5E،ŊxŽRRūöĶŽ_ā„rĨ~ú…­îRņFįæ9%낆Ãh QA(I#eJķõ/6m}?`¤@†:i‹3¯´úęp:/Pˆ2ÜŠŦË4ũNwîÆ5ķ7”×ģMSĩ' č(ņWûʰņVũQTûâ_YÄôŪÕ<ŊbÜæÚI–ĸ1,‰˛ƕ:ŨÕĪš:íŋˆ']Z8ĘÆ¤éG5ĩÔų\h‚{-+J1,5!åOjų$Ę/—<2 ž“xÄRXx÷MŅĪ&ÔyÅÕģĢį-Îbɧx]ųÁRgŪāŲĀiÉBĪbėÍė>)Ŧ¯I˙ŒŠŋ+ų0×]]PÜ ĨJŦžW~°9Ûėš…ĩ_`)띿ĪŲu&¸Ģ|á‡åâŒ{ŗĖ=2ˆSÔÁ]ũuųçØüĮ@õØ)Đøē˛(+ĶÉts5č÷]Šsŗ{¯TĖ’)eæēIî‰)ũ7¯S%ģÖÍ&3š%ũcM^Y1ĄČŲY2jO2ļÉĸšüĸÔ× €žIÅ)ŠSŗ˜šŸC×^āDIšã†Ō)‹ŠÍņgs$hŲocŽ[‹]Oü@ô€:Šû%c¨”ęųžîäÎęŧĸšÉ%ާMf#%˛Q.ŸWâtKėúÉNû-'-Y,Õą$ģHŋæØXû¯ĻŽyīM4vĪã\mŖ÷`éžæYėVöÁâÅĐJŽÍÉ|‰eĨ¯učŊž•÷ŨŊÖQœLQoôÖPĢË`ãŽõ,âI—ą"sKë÷H‘ŽŪurõ•Ckŧ›•–D‰ž5ãëāĄm9ĖsŅ{,Ŗhīũhú˙ƒer—;ô~QŸÛŌĪŪp“ÉHë:Ü哎îú˜ŠŌNI3Ĩg^$e?(ÍԟũĢĮŌWt6oz>Ŋ ‰RYqĸÚũcx Įh•Öļ.Y†sƔ§ĄŊĀëyĨΧ7ŸHƒ”Ģę;J§lŠ,—†Üß͑2’]ČLŲîLŊwĄ>gQÅŧæėI,I‹:}W Ļ$géĖ,v)~Gˆ– /ÍČ2g]˛6+Ķđ­+æŋõXŪ¯3’´„NžžģĄzęˆ?Ž4ĶēeíķĘ`ÅŦ¸ĪÃÅÆĮm…†Ģˇ~ī3Ãv)ūˆmāŧ&O~Ev¨sđ•súąÁ#-5œ}ū“˙[ģ¯ä—c)­/•>fU¯fR'{“Ößī5Ŗœ~ãŠ2Œg›wGKfÍÎģ0I RvŨUd t<@먐J‘:˜ũ†å9YĻa[NĖę.]˛1ÛlÔȰ>;ÍØÁĀj]ĩ]0ĩ8ŨÆU?ڏ-­~dhj•‘BĶŲ΃˛/¨~ŌRj¤ÃíŽåz ÄĄC†‡X†L%Sō7§\7ÚHã2ÍnĒžâŽ˜RøQؖ)Ķąŧ(û´øM9î#ûÜÕûõÛ<ū] +­))Ū9}ŧūøŋGŲÁšÔęyĨÕĩëūĘWĪãĖ&›Ģ˙#‹ÎôúDų?•)•O+ÖtIMEÖ¯ILĻIENDŽB`‚leptonica-1.86.0/prog/test16.png000066400000000000000000000620361506303110300163660ustar00rootroot00000000000000‰PNG  IHDR&ĒJ¯ į pHYs a a[y+Ļ IDATxÚí]Ų’ëļˏÎ˙˙ō܇)]bil$$ÛU•d2‹,qi  ņķûûßžöĩ¯}-_¯=ûÚמ6˜ėk_û*]??ôŋ??ë˙{o7g_ûúœ­Ž÷ãņŊŋ˙ōíûß˙ũ÷ûû÷ŊãŋW_ã‰7˜ėëâ­ōķķûK˙éēsn+õ}æYāžĢ…ŋī× &ûē™ũūëocŅí…ˇÚøî5;aúĘ ÄĮķŋN6˜ėë2ÛÚ_kŌbŅį/Ũ2ë– ~î+öƒ(>Čđ§?FāøŋwĀų“}ĩ‚Čg9īķg'(ôw‘Õ…Ũ  &o\TĮšŸΆ‘;ŽËĩnO–CÁ@C-?úäWÚ'7>ô֖Cíōtāꆓ÷oĩ;žeΊņūŠģ’׏ÕĮ€IõĖįƒČ1mz‹„“~Ļ´ŒčŊî`ÖĪną§ŧ÷uo+ןMÉĸßäŦ‡“+āå0áčNĪ~ųĸÜčo ¨°ÃŒÚ^‘. ~mŖđÛ“]ŸgØ#Ÿ˙ÖČáŅ{DĪ„—1:/=|˙Čëø9Í “5~ķīŋtëk‡‚ž(ˇôäũūZļ–áįúģīņL<pL ÷8~~é¤ũ}Ęīīņ{΃’1OšŽ7žŪyākTīēų.’6ŗÜOgžËOöƒ¸Ļˇ*ū î†č Lma!H› ũ}PÔ Gu”$mŽMēâÅøT–čú1ČŽ@lŸXî}?˜˜nŽ6ė,d͘Mŋ#íâHW1tSīÍŊĄä™\‘ŊōQ^,Oģ+g‚ųmĨČīØVɸî-´Aĩb2öÉŲ`ōrpxƚģ°Ŧ !˜Ž›ĘØPNįāQ,uoŸ %ž+ũ ļoj™ įūΞ^>õƒSh|ĖĻŲēQÂÖ'Ģ4ˆč=Pũo ßUošOâo´ÕŪ f¨ŧ@+\įøīœåWÍÄõr<ŧ•ī>‡Zã˙dŅh Ép[ŠÛ2ôן˛T>õ,Ū×'ĮˆŨX~€,ZDéšĮ×v@eūúo+ž˛N2†ŗ4đįā*îŌ°2ö-ۉƒĖ1đˇío&öuŦ˜O™áƌCtPƒžsđÖ:E>yŧHŪĩŒh‰á°ĒF¤ŒZZē…A͈ß×wCœŒ]G‡Æ~ÎÉ7yųˇŦB‰Î—ˆĨ/(ī:rNhNhÃOÄë°W>Õ2īFC‚ãÉé÷ŽwæĻVΞî(´žm$< ZÖ˛­:VEX›cÛžÁ›S<ÖÃŊ>T@hÉ˙į`ī›Ũ€|dK 2pvß–ī8NÖ?}œ!+ÃČ].›#Ž„b1ß0”g<*{|Īģwž ~Ķ&Ų`’?ė|ĩļž2ĀD4g׌~Ž“Ķë˜NŅ`\6_r/g‡…”ŗøÉvÎdx×ßV3Ú˙Ŧčz׈t.åTŪQĮŊ•3ŸËŒKZž;­ūuūIxŨéŨ}‚#ņ}ËwÛûĒŽ]$ēÁY/0žltû.\ļBÔŗĐ„¤ŪģĪųm—ŧËņ<ķ q4TîŦēÜ&ߡčúyũ īn ˛7ņžfvé(ĐE¸ü{~$w LžõŒęÚnīëBë=Ņļ6kŌåôĐUŅ VŪîĩ§øËųų3"ž0bŧÍ-˛ú9TVŪ+cāĮ0ī†ŧwûéÛîšëxqYGjŖČ•#gZˇ¤{˜eŌ”üķ‰ hģ9Û2YŗF´u"å9Ž2Ûy8ŲnNá.īŪמfAoÔmi‘3™ō 5PōĢūuˇa;ķ;šŗ¯ot˙9‰AĨߏU=šßR&…ē=™ĩ˙ÚÃ-1yūįßjl˜ēŗĨ¨ŗ¸ŅĶ#ŊA¤”¸Á$ØJ\—*‹ōīá}Í.Î}ū3,Ũ“:ļ3*"W/~_ū|sûƒ;;CÔs$Ž=†3‘|ķÚ:œ_*pđiP~ŽüœI'‰ßšO.ųķŦÔŗÜ>öRšāāRäæHßšWåōģ%ĨŗáÖžSOļpåK÷KŠÉXŨr4wŊ.Ä‹HŦ¨C`&‹įu/(A§âΐŽwđ„-;Įˆûã˛-ÍA‘"=s|‰†—^ Īį8=ŧŌą4žcė­8Ũ~ķAš;œa™`7†vŠéf‘#d=ëXŪ’Ä=Ûr¸+XQ –ŗ&qüķϜÉŨĻēŗ×ų[ãØâR›fȎß˙—{Ü–æÁÚΰŨœ,œ §†ÆËĐ:“;Öæœg—ŧĢ6'ß 47BŸņV÷Xmw7š k×_ŨŽ3šoÎãęEÛ7Šîį¸ĘŲą;€ß˜3éjÅŧĪĐÚŨQÚ-Áŗī§Ō}‘…|öæÆipô~™gË;Õ÷„ *Ô:FkjË6Ūö<Ö%ūũ'ęAz˙…zųÉÅ+o8 Đ¯FĻ|6SēΝĨr,BVwŠŲ+ÎcPF{ŗhÎ}ĢzũęˆüųŠĮgb¤ŧ-Yō.Î4LŒ4ÁÆÅŋŋōƒęŨAäŧËCG į6oËäļo¯ îzĮNnĻPģU ąoæ]°Ķáõīššĩ5VĶP9šąeōdĀBĨŖœü™Ė-éģ¨ÎØ×û įķûúî|um0ų’å“XāÜřųŋøÎvq"CĢÛž"\€%pŨļ…ëpĸĮvƒÉmėĨQÛY‡>Ô\Éx"*‡”yœ‹]"Ûᒐú¯fßūy‘C*å¨ųĻ &_dEäižtŋ‹3‰-SZ=į1œÃį 4Ŋ{ŽŪ“¯äLŦh-͚}ž™3Ö'Dcˇ,#.íšČU’ FÉBXŪŲH3kd0p¸ƒÉ—ļ}aīÕšœŗ"ƒÅŧâĪ 9ūÖ¯ŌâŗI iDvî¤ysūaFؐ ÁÍjsŽ8|׈÷v+w–Ŋki> ×4×ÉNõܐØm’]_Ŧwô8—O_ īwļiļ9Ą´7˜ĖlwzǟœVåy9§įWĄu>?ƒ1A ũīŋ}}oō™ö–—ŒvįņM4Ÿ(Nnžgrļüû -´{ä`]ÎZ+ÍÜžHÆ;ß<4LUĩī ‘koˇVŲR}fJĸÆīq”ü á¸ōX~ÅK Īyˇį†“ŠĖô͓Ö(^Æ}kŋguĀy–‰–‰æ Īˋå˓ŧu‡H”`ž§Qŋ–ōöŨģ š9˙ä¤~3ââč7âßĮ/Ŧ|ęБ[#cõ_wŊ“ŦФqãĐÜßō¸×úë<ŨŊķHņΎ˙õĒyÉ3ũģzdfėķžęŊŗ§‡ûĩ'šBÕrm´S#]T8ĐwpΤ3Wr‡ĘwÛēŦáŸ7ųßĖŗËŗƒúĶųīk¸…Ύ‹ę7]öī!o$Î6Ø3m”ÍķŠ<āÕĘĘOaPpĒšÎēüTË䘆nmú|{PÎ:XrŒcŅŽ{gZwœ)­HŸé™Ė‰^‹/ŧõ,œ˙î!Cē]ČõąÁå>K&ŽrYŊĢu,ÉOöļŧĨÁæ LÚ?s īÚ\%ëęnŽĖ]䧀<ž}đôŠÉ[8[jī…“sFŊī­čšĄÍąyã„, YĪÅs<|H;[ ęÉĮŌÕ|á3dh=Z%ÚßíūXÖ •:$^ĩČ˙ėSđĶîVą{Pļ,ˇ?¤0ˇ.xŖmĪž9˙ØÛŨËŸž÷{§N5Ü"Ą|Ëûßō›‚ŧįŗ/„Í˙ķc´ƒŊŧ[ņņ|ÄÎŋ­( ķLFžŊŖČššxî4Ŧ2ô *pr4Ą|dŲ(›ē#¸aÆ1ūŧîGË1ëW§9lĄ ŦgnsĐ ŠÅxŧ_ķá׏Ē7ŗEŊ)RūĪnĶeØėÃ"% ĐīŌ˙ę^.×ĖĐļI0áá´Č3EnOÔęiūį.āŨmx%”=ũzéáá8˛ae6"ų_ûgûĒ[&WøžûĘŽØ†Ķ2Ųĸēīų0@ũ$ĖĒėŧ-“;Z&{$čõ/TCvOJņe€Dflڑ îī?eˇÅ¸y“F˄[$ÚN‰,;|ė7ؖĘ',ŨŊ1fė’=j†eÂÃÃJ´×.S‰l ‘IĮ6,ņgؓŗˇü§Ûr{6čõƒÃi×#æĄĮqx;Ų+ũŠĄ8šŪ=RĨ‘’ĶĶ—īîœûy€˛GÍāLtâ #>Ş3h—tFVˆU'CaeŸÛ2ų,'gģæ˜ (í†9!ņcz–B‚™D÷\čÜ÷Ūėėll€˙˙˜ØĄáąŊuŖnĢ$A)ņēu“gzSŽæi“xî{oÛ/#2w_ LŦæ:ČâPĸ“đ+CŒĄK§Rë“ĐSLėnmƒI ПĢdR°L,ĢCē>ØŊÉ ąĩpcŨt*Oņaql¨ėsļ%;8ėX&8§Ä"aeá7ˇOâ“5ŌüŒļŒ†ž˙i‹1×AeÛ&šâ„Ā`™H(‘ÅLJ´Uāà ˛yb F_9kåū k†Vڐī͑ąKtķž„†:p6éowēîĮ6ęyu˙oĖ*PĐģ;Ŧ ×ŗūÎ{säļm—œ‰ŊŅv2l `j-Ø­—,@ņĖ{Ÿ]°āōžœŠüŋĒãˇ7HĖ–l''řXgģm“d$”Đ}sėÉĪî€Ŗ,+yb%Ú,toŪ$ël?=į)Á™đŠķ?rĒļ b‰đú \n ,šgđžųî‹Ų­ˇŪp;8Û*I€ ×XĢ2%KŖbËD'ĀË}ĒÂĘ}ˇ‘6ĖéŲĒáfoĪ*ŲNNŠ3ąëo*5jôXîāČɔI˙žë•–û/“Ÿ{r†ąī0ĸ5¸/zŊ”Đ;ßŦĶM F÷ŋ ÚG‹^6 ā•ĖČu˛m#ÚYÎë ´öܟ~ņFŗgO]#vŦ™ %)˄ģ;éšÉA„¨m7ø4ŦΤĐņ'‹˜Í;evØų~zûh^ö&yļÅÚ&:ĘKOË Ģ^œ™Ū˛Ņb×)Zˆ3É MĘĪÕžOÜŪRŧß@kļ7ā&Ũœaž!áhž˜rnÅ‹ĖĪ´ŋ^ÆĒ0QŋBĪūLyœŲ§˛{Œ1ē¯ ~ˇcL6“TpstSŖZ‚rLŦÔw+_$g@÷ Åæį×T"Aī^hįÕQ[Áå;Û"¸cāu­Ëžīú‡ DBmģø† 5ŖgŦš¨ŠÄãøitg”ÖEßÖ2h#÷įļYW;m{Š\Ö7ƒJÜYģûĀîKé™pĢĄ.Q÷ōV˛gBujŦĨĀËü2œ‡õ›™’ÄOąUäÖ_[ęŲøL}•Ģ9Ÿ)ąÛšî ¸9”Ėm ^VĀD†ŗm֝ ”ĖÕ-_*UīĻŲ4Ä÷ÚįFK™nĐHX&6—1ŋ0đ˛´D~fļ ^ZįCKdëˇļl’ HØFgn1ÄîÔ>ŋŊ]ļŲuö{1ēwēŠēč`I LÖ ÄĒôЉÚs.”äv°™m‹-æÃ~ۉB‹.ŪT˛ŲęyvIU‡—o-‰Õk)ĖÅîėÕ\­@ ’ ÛWĘÍąŨ31dD?ҟ˛b’#ޤŌÄÔΈsҟe/;œô×G`ÖÁä^92ĒįąiĩīogLl¤ĮåasË\ÃÉ<#ÅŦq žĖ´%–ƒ’ 2ŽLM›î=œÉ7AˆvķbÛÔãՐõ¸á¤ &vt$įĨWĀdŪ§÷”ÎŽeĻgm’¸Íil8ÛüK +ķļĘ:gō͐ĸ5ËaלcÚÕģמĐõŠŊĶȕôÅÄÛÜßōîGVnŽķŽ aôd–/Īļ[uŽB:F¨Õ)/2äyĮ§Íæ›>ŠD6™ũkhû×ļ“52ŧĪ{`cîíī^[’aĘ2ņĀÄŗ/f,“š(°Ôĸz6…œaJl‹¨Ļįôjw,‚Ū-r,Q”ëy-Ęt×'Ys†ŨUjÍJvp°`âķķÙŨŗËëÂVœ˜tõc:ũAFÆĒĀš@+ãū&EC fMd  Ũ×2˜œg™ĐģfLJBĖŌ†ÕÎTô–Ųž,gƒKüO@ŅŗŽđ‚ĪŲ2OâS8 [bãOęfđfËd>m-QúŅ;¸lŲ&ļMY%xØį~,Š IžˆšĘX+2ŒšÁA *ĀßŨWõzuLÔēą}ˆ pNä  ‰ÛWČÍꑮžƒ“ éĸ¯Æ3đˇ·j; RˆVĒœÔƒcrü­$÷EGO;ˆVeøž–-“YG'o—`Ëā@,rk|žÃgJō jƒƒĶX }­™Šl€ØZnģd3JoˇL<5Ô\Ũ(ūŲa]Xw°Û-ü…æÆš-7™–’>Jä3üm|éČXéūÔn:~NŸ‘‡ŖÅ>BĘļLž|KXĪĪļčšŨ)uŨVj‚Kã2§52ėLrŽLdžÆņž â÷ãũĢ#Ķ…ģY|ĄŌ‘ā,”ĖY9;T™<ˇØŠ„öžŦÕkįíĢėæD–GÍf‘ũvPqŠ8č’oģ%ˇ­ąVÍu­° ųâ2]ĩ##WÖØ`­c7Ų™™-ŦÜמšĀACö<Äãį–ØANyŋ¸’(ŠßԂÁ5PAõ:8͟ŋۏÁbųRÛŪOŦv¯Röu2˜xÔTžrD—¯ëÜBģĸÄSĸˇõPĒPRˇIbKDÂSÜi0›âuSށÆV™9&öĩ/tũÃāˇÜŠšsyJ]´Ž/ųŅäĨ_EĨåyĢľߌũ5hUJ NŠÎVb vēUæhÔ)ÍŊm•}ĩ[&MO+ÅĖįJt+Om¯āg,ÆŽ@.~SQpuMd-–ꑤœ‹ÍrEî‘˙ÆûÚט` ¤`ée ,RÆHĻ„kį&īŽdęk,.!ŋОš(š­8#eۓžĘ'Ôojv_§p&ö2ËūĻ%Ü`÷šeLg͂¨ä”ˎĶ";ļļž\VUŊŗëvęŨ‹6ėėK^¯čŒåZvŽÃH/Ķú˛ŧ[W×Ũ8=fâĒZ %ëۀg㌔vžl?’ÚhΌlÄ~ÚIņƒŖNt‘BõŽ;we_ËÄŗSâŦX-zį+5åjË ØP’Étõ5?įÆÃcRÎĄ73•ÜļÅáéļxĖXföĩÁdbųÛĪ×øÖļ‹dO¤"gäžŦ§§U4ō3@‡ā¤CĀv3r’ÖQYa 9öûíMĩÁdâL”u*–ÎAå7 ËD’ąž%‘!];$j´A7V09ƒ-ÉQĻÁ&ˆkĀš7Ø“)+%#ōc5ÜüQĨŠƒãˇõŠOØYĩ}_ŨMÖ k‡¯ŖKâÜßf„ĸâ{ų!sūæûÚ`âœm¤x‚„XįJRĩŌ†ņbî7ÖĄģ;Ú˛ęåVŗSbîŖēũŗėŅŪpL&ŧy@%{˛yEÔNĢ–4ß%öŲŦ{ãžĩ\(ē V4*ĒũmMfĢÁ밂HõŊũ6˜YûęôŌčįÉēčQ>Ųmæ­3 Išƒŗ"͍šŋ'ęOĩëÚæ‘w|ėėëŅ–I RtŊ ۚd+Ą`$hĐņ–ūĻáO_˃õ]Į˜*…’žŽÃŲļœV6˜¤Ī§LĨŽûčåVīĘ×kËÄ‘–æ~-mg• n1¸ņ¸/r­G%rZ:Ą‹3ėëņnN´é228(ĩĀĘŲ ŊÆŧĮíh‹J‡ŋĢPbëĒ#'Ņ_T*Ë7õŗ+ō@Ų ˛-“¤A J‘Ëj™\&¨|ŅfLtít,%āY%(ŧnQģ^Ŋu J䓯h–dß°rCËdu+V{K~#roōPRd,)?Bĸ-“Œ]â+ŠÉ9Ao…­'/ēRŠŽîÚđ~ļІ”m™$Î]TŦtˇ5›¤ĶpŽô˙“Ũlį;"Fí-âčĖÎÍŧS.ÜãœÄy0Ûz(g’;đŠ“IĩĒY%Ŋ`’­Í‘y(Ųģg—ØBۍĨŅeŪĮJČĮģaE‹QnXŲ`ÂÎUŗ÷0%ëu1‘;æ ĨD3nŽīPĘÍd唨‰tu÷FCĸXú=VÜã¨Ö{ƒĘcĀ$Ī āŗļĪÁé“ēK ų“5nŠß%ŽŪ Č—å 5؎šWUžžé=fÅ^=ûzˆeâmP¯žuŪÁé+ņåÆZâØ–ƒ—•]D`’Š—‰sJPV ’ĮŽ…üI]`ŪcÚ×%`rÍåë†ķm+r`’_āYĨ)Sķ7ųQFÁāĒKˇërEžĩâ[W}°‚¤2öõ0Ë$ģY#ĢåË$rd¤[ƒ´ęWFņē×aÅŊɍj}ũ ęs ú•Z&ņvÍES°-Ķ•´–įKôæFMČĒ~ŋ>wãgʐŽ9%™žą[“ˇžˇ7|%˜ô×r ¤ŠŧeeāŽš9šČîgX5Ë1éęEp"-šŒĢĶká۲ *]*{ûj“ú"Z•Ŧ,œä@į6ˆKį´ÚI,$š%čIrĄā¨ÍŲŲîB>#ˇ¯&ČŗÚöuË$×ã&*Ο“_aŸ~ļv-Ō¯_[ÔŪ'ak§n“č{žĮAXŖJ×ÉĘxá¸Õ†ˆŗLæ+ŗųÖô2ēüL˙bž^6wîfÁøŽyÅy˙ģgo¸8JĶkĢ ûoPųjËuĪŅËÆ2Áķæķēe’wˇ-2>­Ō#XĻ‹ÅâžÛP#ąŸ%ąė>ěõŲ*xŦ6l´‚É\XpÆ*‰ęƒíŦ)}–InņfJ֐īÉL•´%ÖHãmüÎĄ–Ėƒ|Ō>Ęŋ˛6˜ŧÅ2ÁžŊũ$’ŒœŸ5Ö¤ē™,bģąļ&=Í˛Öæ‹!õs^ĩģv+¯f akeƒĘ‡[&Y%Ē ņÎ ~~ĒÚë,‹ŨšŨŗĒd!›AĒ3%Ų øßZœQsļ^fĮfŪļûS“œžFô÷kin^3ĖH\I—ÁĄÍX­‹ņōHsíRĨĪīåŸä€$ÖōĪÅĮæãHWn§.=šučŨNßį\˙ÖN¨ÕîĖkœĮDËvō„Š$Ō ųģŋĨíĘŋ§Eŗ…ļ–HÜ$c›ÔgėxžĢ;÷ÅQ?§döMå}éÜ?Pūå§leēģ !>%đŠņûû7ŅÔ ĸĢnŊ4R•„žįøkíŨŖŋ°ĖutōęŦ‘ü˜/•Ž^…2eRHÛÜyXŠCtkķšpõ3(­k—ŽkƒŽ%ZK7CÆh—P ccáhŲŸ˜™ŌūŒ9•ūÜõ% RĨĨÔõđDY÷§¯TE-?9[÷¤¤5šyVÍ?šéגēQnĨUŗ" %q.­tgĐĸĀK„÷Ō›hÆ*‰rwVĪŅë:1EŽĄėY+Ęė3ÁøķBÔ§€ÉŠĐi=õž(‘]¸Æ$"tķv‰m•Ä2B5cēj•ŦŸĻŊ‰™Ļm@éåßŧÃbÕ^˜âO"~˙5ô~ÜĄz?ä™öPÇ×-“Į(‚ķ<3Ö… IŸŌEhĪŒÆ‡ĨžęŸÄ=–Bw@c^v,1šÜzšqcôŦ¯éŧåūIÄī¤âXô}ō\÷Ļ3ÉÔköTíĐoÖ*ą›cĄÖĸūäsi¯ŗJt“ŽûE+ šŅW]ŌeEŒÜ5@Ō—ĩëÕˇĐäëüąë]'áßiĖŧųúû;‚ĮĮu|âØōãį9ĢDnë1"˙ü}Ē—ˇgē÷ՍJŽbĪ”§šÍŸ8ģĄõ<žį΍ŅĶŲK]ëēÛû0É~ōuč¯ŸhëCˇĶ\—vÁpn( đ ŒîcY<OÍëR­Č ]fŪgå˜ÂėāJēŽ ÁqŅĻ ×Ví܆Ĩ¤Ž^ßWČßũšLf´TåÉBmŸío^öoyÃxi?ü]h“[ÂĮčĐĻÕrŒŗ9g%ĮQ­%m%ãØÉŨoŒûø÷ŲĸØ)+ˆVx%"Ķ÷œīČķ1Āä03ŗc3‡?ž:Äûû„îf`taË팭ŋ…=žC#/S% ÍÍHž)éB´Ū/g1ŽäÜą0ĀŨJë…”¤fGØfļt | gR|ŽĶČYĄ;ÛMčš ĘĸPŸ^7ë\Š&&)[qŒ'ęĪ}uƒÔY ’‡‡äøÜÖίū펆kô)™9fo-Gå*áė7€‰ŦVŠ@Š’Ū j IDAT=ŌĶÅVc#ņė&äĮĸįÛ[ĶnČwFäj\ŧ >J(9Ũw†rGÂļ|$k† ΉõPģģ’g4ú>Ņ&1,“1öĸM‘íôÖšõΞLĮĪPz>ČáöŒß×ΒoUŤĢõĖYø_¯›íUœG”4zxáMšæîp œž‹6ŋ"įĶŨ>ÁFQ,4{‰ZĄQÉ4tž 2§„ŸLįY&Ōíá`@)Uęö ¨™ļ<(ŧb¸fI×NĪeöäXdĶQ´„&ęŲw›SŽĮŗ˙ZcņΞRįuƒJüĘ&fÆ|ō¯æëŧwm”ę3ieKûŒÕ¸%Čb83M­%+ ŲũŸë÷gä÷ꕮķ ķ4úüŠÃíáŊĐ>öĨz§—öBĮ’AKnâ[/U›ĖLėŲx?ŗeø›Fą†•BĪ4ęFZôë|üf6w­wßÃw89kEzÎæÃe=JVÖžõ ˙LĒLFŦŸ+~pŌ˙L/ÛUÄė6čqģč¨ņķ›RØT6Ifäp—åŧø ũŗŠüX¯9BŪß`ĘģwsøœķķdúsšËÍßgũžre”ÖˆīĒčR˙šsܜŪĸ÷ē~>6‚ąŗˆ#9˛:ö,Ņ#‹wĒÛ`]ŋ[¯ĢĒ×ãĖ6đ OˆkÆŗŨ:W\æ??Ų~Kžsíĩ—ŸũÁž|oæeV ōŦŅIÁÖÔ$,ĄÜvCr)Ȇ;JVĀŧû÷íNŒ™âS$Ü0ץСųPo Ü­įÎ䌙ĘõĒŋĪ+\Čôx_ÜųėJšk-ëIdč—ō$\ęā÷—Į†Ž‰ßtlą^> ūtÃa´GcÎ&á9VÚļĖ%cV¸õš8šĪe.:.I]9úĪg’ņŗQáZ†6ėM.;ƒpë< úzdĪĘ….á\@XQ ™ƒîŒëC럱9žšQræŌĻäķ RëUeiaI­ē×ë{öUyė1ā#Æ>jdpŲ›Ŋøį’ö΃”yqú64$ØJĄZmĘĒU2#4›ë-éŦļ­=^s1SŦÎũ Îyļ+…ČÉÉÚWy+žVÎͯvJĮåro\˙՜ĢÎÄoô°Fe„Ī‚‹‚‰kģĮp֗Ÿ…Ŋ˙1ĮHũLJnÍY…^uz-īF’Ģˆ'ņŠ×üzÄRVY‹ĮVVöXK›éé/4­g"‘Ÿ–náĀŖUcúßW^zŌ<œ—#V­§^‡Ū=čŊlIÔĻ,g1QÕËĘ­eėX18ttŽwƒkdJHđߙZ%r% ÊŦĢΰ*Fî™ņķ-ßP—īė÷ģJfÆivÎęrãu‹x|Ũ kYĢÄãŋǜŅzį†8ĸ*ÃÚēģ¤üŋ™8éĢJ¤2+ĩQŦdņĪ(Ÿîbn¨ V6áŖĶ3Ĩ|×;}×=ͰLú‘aåÄPB”yĐĻĖEŸD‚ˇ2Q>”íÜĖ@\ ˜ĐŽyZJZsZ…ĸCÛ{pė5Ūyt€MJ*oÅ&›yžķ[R­X-ąƒCĖueve ōĻ̞s„Ÿe,ŽKX##Å9‹ņĄD÷-ę;9ķ¯ÎĨĘ9“a(EQˆsę~¯é¨’#Ųd.ņüb\u+-įß7fŪOh6ÍāYql`į•Ūš.}2į]­õyį¤ā\ŋ^g- \áS‡Ė§ĻĄß̎8ÃVĄj¸q$Ā:ot˛Ûė3Õā¯s,‚—MJËĄļųčéÚĩŅ]”ĸRÄĘĒë\yņhŒwâûsNN͞č%S ‰ÆÎ@¯ŌlW{nFæDm‹O—VŪz&ĨĢ#9+ģŅĸVŸ‡-•b,ŊÜ,ķŲ@Üuw¸ÚO‡2ŖkØįhÚJo3ŗū:ķąĨ9%õß3[&Rōā*iŪØĐE.žė;œ˙”ąäu5wåy+2gt˙ŗ käu‡ÅYw™ˇ1‘ĀNŨsîČøGĪá%Û§Đ$F¯xeV´$ĻįpOKœ *2 ŸMũ˙Gš×Ä j͞dĨG%%›sØ}ŦÛ)•sŗĶYĖdQûƒęŠD:˛Ÿ}DÚ´ËiĨböO:­ÜÚ´ĐQ[čœr‡SĶéWĻN׊tbĩ n´]KΔūëābžuá_éFžRŅJ9—€]Pį}ŒōĪ„šļI ͯōĻ΍N§īŠĪĄ‡­ŸąbŌjCX/QŖ¸bŽÍ%đ Ŧļžĸ•L!ęķ&W~KhŖ=:ې¤Ļü)h1ÔEžëŲ-ž"•yÜ:roäú“¤Ē´ ũãa…‚•ųGë ‚q!ƒ&(ŽS}ĸ×—^TÃJ~—’\™ÅĖË­z(ą9×Í"M%¸Č32Š9čĨ@éGēÜ-—Ö{Ī5ģšŪŗyâ­,%z`e2Ų[ZX4Ũ§Jæ˛ĩĪÂe šZƒ e:´›ÃÍHßÃÖzĒĢiDU' Ļ§E[2İ%vImŌ)ØÅáĒ)gB. ąŌÖũ‹s1Qļ0nējÛGV°tX´vô†—âķTķŪ8×˙Ō#CaąmUî-`ÂĪLŧ;íÜāīŦl“ŗ>͏kNŗ^đ`PėZɧœšTņÆæąŠŠZĢ´ęå:–ĻĄDë”pzVʃúuĘ+.ö–Ŗ?ūkoõ60g&wS$Ÿ-E&ësú:2Ö֖G\…ŦĶÉŌi|š­N2”ÔFF,W§ČÃnÍu´ZąKH™qrf6L §57˛‘+jÜJĢ€40wļXéīMyõų`ĸa…ŸzAYē¯ōŦ8ZėļŨļ_ĘsEj~ô`d`[uQŽ€ĸ&1äK ‘¨3mqĄŊ5’ŧ>j¸ÚÜN”’ÕRžĀ[ķ+HĻō×ŅO*“}ũ÷anŦ)]Ûŋžn˜g´Îxė‰oUëT—mž#5(A9˛āíÜWėpˇšm¤ã’q^Ī:5ÛĩŌęõßG_š ŧîįš’ŋėđmIŨ2´(‘‹`5’ˇ,\j99ryEĨüot5ę(Šã"Æ9áhZ‘Dā>O2Ōų,0B”ĢūŽ,+ôōhWÖP'”Ŧ¯ã•Ī˙p0ФZ]̝ú•^3‚Œ{ã‰ØHĩGĸĘ*YĄ\^%úƒSŅ6KÖōš´™ĩŌ´>Aá5í]*­9Ģ kõÎ Ž35&õ!ŧ†„­X&˛Éˋņë=2Íē%˅ŠŨŲų3ƒâæPÂë…č†Ô•ēōßöÁĀm û°ĐÎ^ Ą‘ĻT5ˇIüTķՆXō)æ{(fVá°īPcCĄėˇö­ą§gŽ/9€ĩųÎpD,ūzƒˆU‘v˛úVw âĀ™ĄųdŊ°ŨėÍJMÃã*+Ė+gĸ"sĘåûK÷fÍŨAüĄnˇ.ĮPÎÛ-9“{Ąˇ BŸöŊdrjŊtÖŊsD§VÕņÔE ŧąÔpM,‚4†Mۄ(W–ˇī,ĸŠĀ2‡„ČŊéR3áɃšŽ˜Â Jč6$^wƒ’š ’ą'ę ‰ےd­•&fRg ķÂ͟F}°Ü°$rPÂÅ ė´zJšKyRķpēĸ,K˛"­ĢδĐuį¨1x“ &pĶëîfkVÚų;ķj#ū—“86ˇgj>yĒēô­ŗcěÖS…TLfzv î0€c[(aŪråPĢOųûžŒCf^ĒÖÄuĮšŖ$nŨ;Ų€ö.œ‰4‚QĮؙé°sVætŲsŌAųΧ9ņŒ ;ŗ"įĄK+÷4Ė„›m~É>.üŪ7V5 ˙ÎlŌWũ€ā×¯ũäēīŦmt#7uy_—$°rVęēōüĢęéĩˆXiÎ5ŌüQÆKԂeĻ`ß?S{‚ŗXkaey7ėémƒĨėę.ä —ÕÁč̈́üõ Q!­/PZ;ßBáū!—ũ[Ÿ4IKzKŸĶøŽūs™Ÿķ^5/-ĪIT"įgŪ=ÄĐs<›7~ČM•c¨ķ|暌ŽåŸfd.ëü™5ûU DM|ĩÚKaÆîãæHFŪVpĪ‘=&elŌg”9ÎˌDÚ0ˆĸŦp7–!ī¯ît+sTĩŨâW#Eßáaãy+¸ãčĶ€23īsõh^ûōĘSÜ*ĪD†ĨFj´%*`mŒ|Ž@ĨŗáŲÎ!^hV…KūŊ1=ž…5üŗÜ¨!&hulģ •1ĸ΍Ŧ¤õNG2G§pŧŪ+i͆’ˆ8/i %&é }fĻÉėŦ ?:žF™ÕfÁnΐ7čû ¤“.å ŌVé;ŧßōtl*dnę "‹§T!˙đ į•rŋIÍęŅ–ãĪkVN_ȑkŖJxOžuŒĩŨ$S¤ŗ>ęėWÔé ļõģA¯Y)ë™ĪĄĄyįŅĢ_ĢũqJ= uËÄöÛQq5ĸEĪāL2įĩM rjė–‰įe[iįXË bGÆs‹:„‰æÖĪ`Žp‘Uz‘ušlxϞ˛ôĀb˛käv`’ą%Pzvĩĸ§ž‘`™°Ld=kMęŠ-’)ô;}Ÿh ÷č›}‚scƒĻ%ĄKTa¨ļi€Ęč$ƒ ĪyĻj89Į2‰ŌŨ<Æ‹w‚Ã\\‚{úör”V‰Ûâī9KšFéÂDR‘ˆíÉl7äbĨūķYH÷$|a*ŨįhL^BøāĄÍ€uą˛“ãŧķ%[QJĩÂ*°Cmkđ˙r%x¤„7ÚRHæjųŧcxm52̍^1WŨîgpĶšĩíŋÆÃx[&y[¨ F\7œ1¯ę—9Šq>Ģíü l”k™”ĪˆévƒæĄÄgL2ķŋ-“SXŽ Š;ŗf;”dč2Ī“‡›ZģÎōĒi¤>ŧV˙ā–ĀúķT+htŖŽ˜DEã‹,ƒ™ĪünlãĘ­ĩĻLLwUÅĐ>1ņ_cõņÖč´7ŨĖ‚čŅmŲą‘-XI;ģ\g“øIŒúųđ§TtÉVĩâjķ$Ë3=įqÍJũw– v'`Aiá}c•ÍŸˆ Oģ3›o–¤õĻãit/]Ū=Ķŗ+p2Ÿáe˛ ‘3ÚˇFxØUw4ķT˰X |_\ʀē<įŒWĻ‘šeSĖUŸôqLxÁ"-|NĪž3nūĶJuzģM§ļPŅû­qą…a1NŊ\Ë,dŊbsn_|éS.›ôŧN­yjŧ)x}q­ĢČÚĪoŲĒķl(Лaŋr§y)9§õįŒ%Öŋ*ŒVWûũß *ũŅV…WJöGsâߖ#¸*.0× eîŽŋĄ˙W=y=ŗ īŲ\¨všŌüâú(ę͞'ËķŨn^úī)ɚŧ`+܊VwÕÕ;įÛVV‚]WJ˙yrVčS2QÁ¨Ũ)j˙‘˙û—>1t<`ģ=ڟÄŪūyãTWöŧ~ŅĮyœŸ ”ĸŦŪÎ?S% Œči'ˇ°r_ąIøâ—éiFrŠ!č tûī,ĖæûÖ˙fĸõ%™^•3WŗîR0ķ&FŅøX iŖíúšr\ņÍʡ0ˇ ,G§Æ“ŒĻS\ž“SŋVoŸŧk/I°Ō¯Ų=‘ šaŧhk{ūÔ¯ĘĄÂ{æ}“QĨĶsœ¸q¯5oúÖKß>ÁÍáz%z ĮîF'Ö"jĪĄģ>z‰Ãôįįw-œ\‹Ķ­Ä…ęöEžëŅ×÷Íl™B‡sÛ(ŌAą% ĸŅîN7iúĶįJ0k1_‚H-TĶ\átđž'llëėY ‘ĀȏĶXŸÚî°ŠXL"Õ I5znĪļOtˇcŦچ6 ˇģˇ{oAZũŒ¤ÕÃr —gö]9k%yā—¯ĸjh=´éˆžtۑųœä ĮĶXŸãgŠüĖi›"Q|lĸîœĢĩNōō.æYø5"}y&š3Ũ×0“2Žĩ5ÄuØu|Î{ŸÄ ˙súi˛ÆEū 7íôZ’aâ͎Qj:€ ~ėQJæ™ÖGdYhŠ’m…;=’˙R@(īa•ÕĐ'ō€ĖGĻ´PŋŖ•[MūãÂÜBO•¯[ŪVęÅŌÎ_æÕT]ąs;5ōrjJ7/,2€ĸ%‚i ķ(TxLAįō˜F—ƒ3 jŽ2í2¨)ÄĨŽŠ#bkî֞E†0ߡM´ę&č>3íÁ¨ŪŸe—ô2|6#'Hž˛”kRhHķ ˇ•‚Ė}:z™Bø•åŌS†s@*ŠīŌ^éĩLT|X Đ֖ u)¤N­ĨúF̞#đâ/ëM.Ö­UmËá÷Õ°•Žö'+)8‚?hgCŠnų ÍÍN(Y‰Ų"„ZeŦFˆÆį­1*ž6M^ŖÔpîˆDŠôÔQŖ?ŲgÆ9SË[-č[áē5”ûôWîus2n8g–ŸÃÛFŅTÖĒkž€Í:Öß÷„ kKwœ‡:ĘR…4–˜ØÆOä$=ô8ĩĩÂmŋyŪüZXŨE#‚3î7Žü ÎĒ&›3É´'j§J?3ÚC…˛ņŗųPŠÔ3‹N>;öŖk~g uōtSsģbÚ"NyK¯Ønķ>AöëõûéāņĐbP+ļß=ķ%…R5Xv;ÂÖŠ}įWÍčĸ(9ļE÷Ÿáūtˇ§j+˞rĖë§$—’ã9ąö<šl@\ö/ĸÖ‡ė’áØŖ5ūīČĖËš;O||Nũ—wMÔ͸Zz į|÷œ/ŽbV9×sŦ­s†e[!ūYŖ78žķ87Íæ6ˆe• ņ™kiŽî˜W&Šu"˛uCz5`mg°ŌŲ\õžČ/›NũCRMsÁKnĨH]Ûķ +…ĐsPŌS%ę['–Ü„<¯dz\>†NF8”ÎÖ@-š9•†öyûfV Ü'õÛķė äŅķ[jy—';bļWYs\˙­lųš­II ģÜ)NĢÆnl09Î#ūO€;22d#×7ŽĨr2>˛§ß\k ũįKøGŨü}e\ĒâĘ|Ģ”Ö"ô—Ũš&??xD؁ŧ+IĖrkˇ‡KųŅeųLˇĮÖ~ÕÜĘü'T6ģ¯g/ãsëŊy“ĪUˇ.;"ÔļZy‡˜cô“K_Ņž=Uu›3¯¤q'P–#ĶŋWõāäŽgG{äų”ĩ×ĪķZ.­Î\ÛŠûK¯ÄyíVũ´TęËÕíC´ŦŊÂuĮ™ŨUր]1~ķ­l¨°UŧfRŧŽ,Ī„¯-ڊŒAoŸd›éÉCHŪBnAWëøL“ŗy.,>* ēōÖ/jöķūį3žiĨ<\÷ĢŲ­ÔYņ¨¸ŒĶƒĘŽe"ūŗjųI/3ˆįˇ=o™YoĪÁ5čg4Ũ| ¯XîŒXk(ģî;XÅ Xކvi|‰RōSëĀb‰į†ĄÛ„ĶÆ9Ĩë6Š´S° ũŧf`2ō°oX[į$­EM6Īã^ËÅĩ˛>€mSbĘu‘€Ĩj+‚8ķ."Rų9Ē›Fgm EĮi|äĻ<—œ•Ē13#Đ%›ÜË)Å žōk¸ĻvŧūVږXģŖŨLĩ éFŗåUJnžuA%ÕX÷̚;âĨá[\ĘSlMČÖBčēãMNã4æŌŧ,™Y8Éseįeāü,Ģ/į×h$éķIy.ė…8ŒYa<´UëâzGöŸåŲR4ŽōnŊBÖöĘÛĒS;YáQËdõŅs}aĐƚˇ˜ķŊjĒ–‰ü*.p•Ųė˛sbÍ]]K-Ą‚}ĻJĩ0ļ&:8$Ö#-ŠšRA4 OdRfXģËÎęIŪäXn)ŗBsinôā”ĩQsbÜŲõģZe4ã8ęú:?‡w+>īēI'ëŊ–]ē´/;‰ĨqĶĘ'AŠFĪ„cŗÉ3æ‚ļP"Y=? Z)萇ņüņÛ %ũÍ<0‰`Ş‹ !ĖG&f;˛ÉĶP¤ T÷SībĄäûË`)ˆ•ŗŗJ,û*ķnķVnuĨüœÚųÛÖĖkË ōŗķæF/ŲdĨ™YVJ=ȉJ´e}ˆg&?Ååņ5kølT››×,“\Nl.š 9v­ŨŲW•ö Ŋā×&~´V7ؖÍŌėU3ŖTc}įĄĐųÎéÜ[įũZÂúJ&īˇĘ+šæŽ`_ĮؘsY[„ærrĩŠxrĐ)ĻĻ8zo@‘vÚČĖá[‡įÍ'Æ-4g N>kĩâÚ§:9*4lųfŲfLgųė8hmĢXöDdĸœYŲžáîLJœ/Ŧk<Ŧä‚Û$į–Õg"b„fyÂĻ~y?ÔúûpËDž2z*fŌ‰ēú´ęū˛ZÚOģ=(ũ,ž=\\FvîÉ:TßmČRIúŽ0joë.(‘už+›&œ­Íßŗŋ.u™e"ëiüZ>1œ9;…Ÿ”‘B¨ĩ°gÃĮ<7ÁSšo´ĮNđĶų?ÚJĖ­•L‰ęŋ<<ĩōe겔ëŠĒßwŊ°×ˆļcådáĘ$Ŋø,­^GŦÕȏs†˙&Ī‹¨2)Ŗ™vŗd'æûZ)”EĄßAÛÚ_5H–Ō"DɅņ WtÕäįw'›U˛y5ˇņšLĮi`b™ķsŠ<ŲlžŲi÷ĸ.Öi‚ОäoĪRŗ’ĸĩ’ėîėøčÖq—•wƒOëŊé˛€į¯'‚ÉË2_ų„Ŧ¨°Å†~Ÿ# ÛS˧=ŌŲ$´Ô¤05ˡÔ0u%9|7ĮGkĘ#S†øĩK8{¸čĪîŅ2›¯’ęô•ŋŊ˜ČŗVoÆĘöė…ú5t%ĒĘ'(}‰ķ!ﺁ•ļ¨ĸ[G‘§ŗ¤fīĒæ&ÕP4 čƕ(ĢcüfŽΈŪtžûvX%?æyĨĄn,ī˜Îˇ[ާîÍnõœ<éx¯{qkũvŪFÁodedÜÕFŅĩŨč(Ņ”Štöō‡ø¸K‹(Ÿņš‡”5įûY$ė+ÚâŖû¯ž*áķĨY4[!ž¸•9_ŦtĶkÅ Î:=ēŨRZŊĢ"7ŨęÚáDE™ä,Ģ„đŊ6JĢx ´ŧ|L–N€ŨŌ†…Cœ&iSčÅm›°*eŪHNCŠ.–“nĪũlš.øČÖ-îbqöŅäš%kŦÉ|MM´ƙäáë—Čģņ2“e͕7Џ{`_–Šė­zŌÁā9Į›Y&am‹c=ŽÁíô‡­ÍĄčki>ëĨ<_¤;‚#Ÿ#Âr|s N…vÕģ‹ÛŖ;üIXĐŒGÃl÷ AIˇ›æËOxRž˜×ãĀD#rρ?ŠÕv~ögCP­Í `š­2đh”’še€Y¸¨4™ûV°”g¤č&÷p{p)†.”ų*šXõÄ:ė9 Q˜E:å˙åēîŨLAŠ9éH¨fdĨĖWrōŖNĸlˆ&ĐFō˜îTH}tÄũĐ ú,ĮwsÔßPŠÃ.gtēā,)–„QdOAĢĸ;¯dÅÍχâųęũAĀŌM¤7pdöt“×bv–e“Ŗ¸›Ã“¯í÷8>ŌšžŽÂÆ 9kÕëđņ÷;=|žpjŅjIĀFPrFQŠ}ŧbĢ\øŊOč#ÁÕčj@9™đZĨļ’—ŠYšō,ĐAAäŅ­‹œVøo%ke¤Ü)ÅĢHāäŅ.É[ɲD˜v‚Įš“¤Š×Įē9Üüæįî  å`ŅFāį1הÅĒœ~ūø+ģf‚;.ē)ôp{,r0fQ9K!õĶģSøX‡ÉаĘĨĨ įžķ^z™ėņ#¯‘ûģ9A'ĸĄtC‰8tÖŅž™Ã—ŦōžAËđ0ąüˇ%^€ü÷ÜI—?Ņ$‹ĸ…"Ī3ë/^z?Hĸ@Î'ƒ¯ąōtuŲŨĀ=jįū 7G§Ąãŗ‘˙˛ĒڕÁåOÂÃ֘Ûį‰Pˆ†åņ+ŒĶž­&ü,ĢĨšļU,ȟâûmšœÖpLģ~Â&•ĮQ]¨ōÛm—W}ČđržŧĩÔ%yvtŸÛ"C?šÛ”YA!]œééĐârÉ“ĸëy(€uh•žŸ–Gī"@]N‹+šÆ~ĒAÉüįdz~-˜x]îõGÜz† _]’˛H/TÎäČxÎ`+(˜ËÜnM•ëŨ"Á …P§p@ąôs=ŽälįÁ?P2ÎxˏÜĨđ•”ĖPãŒÔčNV,Ļ:¤č´öÆņüD.šT#ĄÔāüéõķ“ ûÔŦdkŽžo÷ĸe퟾Į=¨Du 'W0h‘úˇĮˆ‡Xģ8cådzuâûĖ´s^gl7YÉjÁZž•¤;é ÍĩŔ‚‚Æ˛Ōų›…ĻΌšn]5މ7âw—-po&ņIlĨÆ œĻ‚åwuI (ˇu´Ã!e ŦÖI4t[!ļ0aĨ´Kp"RXM€ų3ž 9ėJ_ØĸĮÉÉRģĩ֍8<ã鑷âLę6Á@Wn t”•%ĄŗIĩä3Q›†ÛUķÍ#Ĩ2m%ÍŲ(Ū'˛ŪhÖÁúRΤF;Ie3™ļ–Ųv“Đ´8×Ũ SŠ˜S]H€2@š:ÍņIņ{Û˛Ö3Ũ ÷Õ /õŽĮ^UW-5˙ûlLĶXË´Ĩ°KÃë:2ŨÖJÉ}N˛îw)Ɓž¸]Ô U%ß=ģķÕEî{m+Ē.:’ˇĸ„Ųãõ{fōĩ˛eKOԂhŽä’Õõ f96:mˆ×€h#UˆTĩ,z|w/4ú\(9›/™—¨vađīōMįĢ2ĀŪÖĨ:ãU(AZ[ņ´ä8ņˆ ŅīQ§IĖrâW6sÎĀõ H6ŊĄå†Ī&"'ŧÆūā>ˆ7ŗLv*gæļÔhËâžW˛ŽŸ‘ͰēĶåc¤´#•ô@ƒ ˃ _ÆÛÆx$͏ž×D7˙Dt}𛓝ō]ÃāUŖÜęüFÁ<ŒËĸ!IļīBOįõŠĸ>]#ŗÉÖss_Ŗn׹­3S hgÆ~Į|ŋzĻižxz­É#ĩ%ôķËō'‚yw÷¨+ Ō‡ū™ÕéVōƒ ĐÚ­īĐa{uLUVå4ļ1æJ°­ōņ¨X‹ÖëHaŪĀkH9[ zž…Ø™ŸŨCKôjĢË.d¨į™Đ`ÄĖŗëË|-~!˜\i<ëŦԕÂī~ •ūËÄ4^ŠĮiU읐^†q=FÖŊšcQß;!iôëh%šã;¨h% }b*ĮųmĮB LÎ2ĩ"üšmĸk…‘(NGã܈ūRśnŨ†Ŧâ5Ûgֆ’ū•'ž•7;Õ-ÖCļËē ã–ÉYļ o9ĩjüb Ėf¸ËC… ôI9k”™mŋ䘛'@Ģ4Š88“6˙I^?Ŗ\FĩœåƒÁäÜ.7ŲģVA…ú”ãqđØ"Ũ¤ÅIH{IuŊ!rؘõÉöIīģķžF95üø~™î}ēú É[Đįųt'÷õ),…ūgĒņ‰‚´ĶâįÆ7ĪõĪ'PÛ÷Ú.NߑƅĪņú˜Õ¤EņėlÛî9îųŲpōz˙äZInÃr&ķč2-ÍâKô÷-6Ū;ŗ¸äAuLb(ŲÎÍ< "ũšLĶÖY˜Bš7Ô"Ņ(ųzÄ…2ŋúëÁ¤˙Uø€Ę­hg"ZQv$›VČsƒæŸĐzԚ\ßGūkģĖ2%5AĮīōą¯ĩepCún‘%ŸfÕXIC/õ¸­›sÆôk§%Ņųƒhƒ!‰=žN™ą~08ĢaŸąIf˛UîjĮŦQâ.O=@Le°137čŲ¸˙0ˇ\lÉķ/<??ųŽēčŽXŨMŊIĻ|œ´)Õ{åV‚ę~4\_ ÜąBV~QÖۀdīv?ˤ§ę1S^ }ļ2‡§:Z?÷,*1æ'\ŪÄ2ą„ë\Á譃– n=1žûĢ.î8Č)ŗ`Pģ´,"ˆ ęuĻ„×æî„ôāļ]2ŌĶd"ŖŸĶ3Tļ Åj¯"é‚ßLŽÚü™Hˇ2>{˛ę#ŪDņTx)Mkpr:)ōTÅ6DĨFŽ÷X3Å?éīŪˇũÅĖįÖjEūĢz4ōôwëØOc“ũú Pk–“ė”ŅíēÖØĶĄ–IDčüÆ Eđ‘6-]'ĢÁĻŦÃÁu vÚ3ö˜+ē-õ<Ė;Į}æ\žŠ†ízĐfšTXj5vã Ë:éqú>Ā͉"+¯‰,ģO Ļ8ŠĀã4H^I6ā˛A/ÅL­nž+°vŲyšc$§ZLjGT΃ZŲYÉ_åHö"~ĘQtúiŽÎkŪ´‹ đäD5’~q7üéÔ!.aD;ō–Ąŧ%¨)Žû*Ŗ.yĩ8kĖęŒ}Û÷{¸8xŒĪēâ0œ >kļâūķX“×,ņdŅ|<x P° €ÔÍ,˙R:ĩX8]ÉYģŸ´pPÛKÄĪ$Í×Kú¸´õũ,“ī€G '>—KŧĪrd&U“Úw<uÍåŅp$ÃbA`K_^kÂr…#ɕ‡Û\N”žļNž7õÚeOdęfæbF4Îۖ–DRũ>ež_+K1۟lĨtĐVÔ˴ᤠ!ģôņŋåōG2e(Į EמMRYŅbŋ˛ŪžĐŠķāD–ŖÖ›ÂŌĪų¤ļĮÕüÃÕļR\aã‡eą…‚*qägōb.šŸĸûüŅ>@H4öq­Üƒ[ŽÚœÔš˛>‹/9—m ™­œXIũųî—ļ>ÎÍŠå‰ÔzøŲ’sÃЉE9 Ҥú/’dXP¨W˙Ž•&íCl¤RŌĩqî*ŸÔŊe΀™J -âžĘĪāŗ*u^rks!€Šŋ˜Ãmôi2‡ÕīT§tzŨOpĻ#w´6Ŋl‘8M”ZY•ŲîƒĩÍ`7ĩŧßõ *.<•ŪŽŋŅAlSßČŧ0"V_)“îģ'ęėį›žöĨĩÁT'á7Ų’ ”ĢBķ\ĢéiØBē3œôŋĶįšėÎdéĘc}ā…ÁΘķ—MÛyÃ=74_c„ŸƒķˇQĸ",”Öæ5ŧ@AWHĨØQ{Ëđ’øâÄ˙lĸbû=r7\}_™HOuūĸä5ēJkJŋŸ%âųōĪüXKŦîÉP+ŨĀ•tsŅą9 ë'R&‰7äŌa˜&ÆŧGDēÖN–‘õhƒÚžf,‰N7‡Û›žíūÔáä#Á$߉lŽ6õ¨,ā)íÃÖ¨”ÜĄa×0¨^B:7ÜZáÕ;äô_ÎLŗNt‹ī2˛mmËäŽs^ÅQˇĮŲ’ÜŦ"ˇˇūĮ™äļ+ũĩ—ā­7Lęhd5<4‰eķ@^ûuTšÎYnĶԖ‹ĩ `ŌŗjˆÛJwÎ}ũėwŖIųÔ5iŸVm“Ŧ€õG€ÉĀžl]cėYRĄƒmÛN˛ žĩĖ"ū?îyÎ^l“å'7÷{”,öœģ:?g‘ŒŊļ‰äã|Hˆ‰úœđÄĮē9ŪöāæT}zŠČ.ˇA8ŒpĨËZ>îxÆX ÷|ĩéĐēŠZl9dIWîz’ wæ8Î!—mŨŠÍĮ;ōåāģÎŲŨ5×~˜đķæ”Ã#š 0¸ęŌOΧnl´Ú_äR˙ãD¤Õs§Ęi¸}âÕũŪčÔueQŒ5–õ3Ts•åQ՜Lę`2TŸü åŠSÆ~ŋ$Á‰l< ą4 ŌŖOzöi‹†.Ą(_ ^"ĩĒ‹Q-dÁˆ­z7w'ŖĶ (܇]$z$É×Ēu’ƒœaá{…Žo“joÍšĄ,ˆöúĨ–ˆ ŅFĒhYÎÁĪ͐1% ,ņšáCI6'`xŨ”ÄļÉũúū ÷õ<•4Ô „;¸b‹[ģNĒA ßĪ{z3˜đ”öØCĖN˙Ąė1đToŠãj­P€ÉÔ`fŦ"ąÁ^ą MÛ0’MOãĄæ,ü ˏZŪŋ“mr&œÄ[“ēCüĀĄļ‚“*tčõ.aëĶÔLūû–žGA­Ü ŖŧęER¯šˆÕ¤hļ"…§žáXˆŒ#Q†BÛ4~FpfVļ†ÛĒŌÜĩˆŽŋfs÷FiiØÂE ’{"ŋ9—¤h?Ë2ų‡ (Ô/š”éÁííj‡†Ĩc$‡˜7׎“ūᐠ´y¸ÆŨYĻ$WãÉŰ5¸e-“ûeÉâ؟gōV%Wí“õTŧ&G…xŧj‡m $ŸwX€SZS2m m@ŊM-ą‚ÁúģuÍ+g%ō?9á*-Ŋ}ŗåyuí:Ī"ŅŖąZ÷y÷Aet'™s90råÚ{&_!Ō?tŽ|+[ņŲŽko䆍ÁE;I‘a*'C‹bkhõÄÃFp %¨fCÃß°ė> NæžÁ/ƒÜœ˜đĪûôų|yĻ]á´ÔP áMŽōP2„“pĀĶ¨äė}†×hŌØęņ­Ķĸņ/J"ŨļģÉ$Ņq¨ ŒöŽBĩˇb ęž*đ_|ÃŅđŌː*, îÁTƒŨÆQŪËcŽ„rļ0#"Âd°ĩ¸ô9ĮĪ•ėĸņ-žėB–W ž9ÃũŽ5:~Ŗ+HčJM,̃¯˙úķEqKĩčgæp0’‰‡MĄļšy´{…žÜĸžhŧįė€c/Hß&ŠēH”Ž“ Ē-“§fŋjũ*ëK¨™¸U7ņWĸ¨ođ=ÎęË7°$žbâ‰ūöČÔĀĄÂ8W FZ V2ŋ­öŠJXß×Dķ\sĘČŧåÁhĢöFf›äģû m æĩũ>ã“ĩpĘ~ƒZ–udkåõ[T—°H„ˇĻŠŊ<”†ž‹˛LđīIQgŸXŦĮ-hFÂw˛5IŲ.„(R”ã‘2Jk3RßÁ™Č™ëŨ|ũ"+")㈚¯üÆ9ú—…+0Ŧyō!_ë÷¤‡Œ”h3 ģ&Ķ)[[ƒ/xHSæeIĻÅîÉY ûX)¯ü’Ŧž˜–MSCœ ũ[6é´RMšRUtfĻX64Īļįā—NÃ‰õēØĐ3ąīe—Č(–.y´tx†âˆĨöY#ŗâˆTëIJ`īū/tōSą:ŧpmGfˆPHŅ‘íë-…-ÜÜ÷œˇ`&ÖJĢXqh]•ĖO[>†vP=ĘÂŧ§ŖÃA~lŅ•—ív(•^­ų•ícŗNuJņj=ŽŒ{°\/{9æŒ{~’b*UˇßD 9íīăŸKč)¸Ę”ĩ”T•p=Í5FĪÁ´)XÜ펎Ž>Õųō˛„NČ†íāVõCŧÄAŨîŗöã'ų ='­u9C°Z.:‹ŊûcžÁjålŦĖ5ŖJjÅlt[RTēkžqāŧSl^ÔB[z+ëĖj{ægZjņYĐVijņu– zqKNfpJƒSöÄõ˛8ũđ0÷xsĄá$%5f=X\I$F•kĄđY=ŪzáDÆĩ¨ęĒLe“Ŧ‡v“éÚņg´ę6ŽųˏßđĨÜЏûŽĶ˛Ų7ŧ>[M”u9Ŧķ=ŽoŠ™Ûk¤*-[¨g?Aņ]-™ ’Øû;ŽątbNŧĶEŦ^šCđĪ[îÜč+bVEzp¤ÅĻËĐŲáqå^īŸNŌ•? ęQĖG]ĻčÉzėøsũÆæßLŋË„Īš¤_e*+x2PÂ-šŧ­7,C;÷ö^!a&XŪĸ6Qfˆ•{âi›Žî$HÉà õ!ĶTæ”ÄÕîÉ4ãϚqĀī-‹e‡ĖGÎj…ÖŸíģ…ŗFØēÕ Ÿĩ8Đ{ŦFí\ĮM`ō%Ą÷‰â˜œ ZÚrrëËj_Š`Ë3ĸø?Mŧ‰ÂŊpwÚQĒ^¯îĐ‚Ŋ¸Ŧ^~'/a}ĪÔ5Ŧ=Įaø8ÉJl )Y‘#Ų×ĪëOėõâ˛cwcļ~l¯{‰ē+Ÿ_lš=ņīXüˇíIËījų.ŌĩfžK‹-ķ{ÖSG‘œY]˙ī`MlÍēŽ(”pĢUr,šųˇ¤7l6ģšī”Â~˜čé°yø*ķ5éâŗŖöžKž.톒z`ÚĘt­5+ˇ{ۃ„õCÃ2@`éähøŅsgš–q/î\gęۂ‰)–RÔ8ËouđĶ=øüÍaŠąÍÔĘøNJŊũø­XBwŒæčãĢęÉæhisM[tž7ö ؜“Ã…uzŧ§S‚aGkŒIˆātelÔģŊek‚ĢPÂIQÍāÔņũ÷ģ3” ŖE6TáŦĪ%ĻÄŊÉ8b0(Ÿ[ÎIŦÚwwą˜čđĢĨ åUäČ=_`@ļõ¤‰]’öāDę‘u_•TjO™„SĒh´ė@ÖĖFÍMīvé\a^åD }>rŒéOpÃZ%VYÆ:ŋv;0‘.Bg.`'Âg…đ)"?€PdŸxe5Ģ„ÛI98Ay­<Ãõųáo¨ĄĄV‚xĪ“P’õ˛Â éÄR[BgĨXļ4íŖ`­>ƒūęx‚]Ād¤IYŅė¸dÔͰBCzZ픂Rœ€ū͑Žĩryu.Ÿ`ĩōũÅ{O7Įާļ*Ö)€c§ÚNuŖŽŋût{ÄĩLdw;tęZ\ úN\ܧãCH‡j82Į×Ģ•ŗ9(™Ũ’2W„‚‹t^ũ! įLũg–î)C0Ru$ĐĘA‘–Ü[&•fãLūãÍ´,nBĶTVK˨ĖÔpäōwHčȇ‰8-)vo֌rVBÚĖ!˛=( {ovįLX)ÅĨ•`,5 ’ĩ’z)<}ŸËUåWÔS€į…OSžŠ-ŖÜŽëXĻ'&Å<Ñ÷äÛ0@ĩZ„fCÁ+šį´Đ…­EŗŊ2z/īäž6‰M3Ŗnˆ¨éĢŨGRB‹Tē“–ævtJŦˇ•|9á„øU9Ōô´“|x—ΰjxæĻx.\sĢ´4”Ū*֌XãČãž ÷šDĒnŧBáAē;˜Ķã#,mđ}š` d¯°?¯´Æ‰3 EÕ8ڂ@-/eö‰UXi:~î6āąÛöđî€ Ü,Ûōžp"Å8cޝ_)œi5÷ÖėÎ<‡]yyf˛°RÎ,Ž];8rSØÆ,oœîUúúúŸšŠÂâ3vˆ´8t§ ą6éˆf´îŊlQƈ•īdEd$ iWIrsžpbšžFŌžb“ŪĢ\Tm6<ēŖ(’ŖŪ~O…dheX}`!—'b¨;†Üg˙ËŪ„‡ŠÍû{ĐÎhXd†ģ*<̓~Q™  Ö5]#÷ÃkĀUIËč¤ÉķU{ų˜ÍzŽŗŖgY6š  …¨7%–Æļ ’-—ē5“üæž&7ũFážė…†ˇ´u1#@ÖzøÉŲC5ÅzUĸ„8ē‚ ā¨@vee>XíĐåWg:8ũŽl‚5ãųËž‘¸ˇ›ƒÆRC‚vj0{‚]%4÷õŊtSvM 7>ÂåÚŲp9҈QGėz‚ãceāŧš1Ysųö=Jė`1âü,ŪĪ‚^õƒ2R &ûÚ×ũĀÄÎyŠģPFŪ\ž˙âLöĩ¯īs‘õר ē%ZۍŗaĪdN6˜ėëļv‰ څæÍE}ĢGzdœpģ9ûÚ×mĀÄNĄˇĨģ|vKYĸ’’íæėk__ $^ĸžŦ~—ęÁq랃ÂíŲ2[¸-“}íëC­)båÛDŅ.ûį~ž,}ĸ &ûÚמöĩŨœ}ík_īēūÉ0Ÿ¸ĩUˆIENDŽB`‚leptonica-1.86.0/prog/test16.tif000066400000000000000000000560221506303110300163620ustar00rootroot00000000000000II*T[xœíZ‰ŽŦ¸œ˙˙é÷tu„b—Ë[灯Ԝ†,Ū]q¸ķŋ˙ŊôŌK/ŊôŌK/ŊôŌK/}–ūûOūūûģúßK/Ŋt=bĩ‰ÕtŒąšOĐ'ũķŌKÄĪÂ]œĢ™ĨėįēØQ‹'ÚŪcn?RT<úŌKûéšĖÉV×nŒ~ĘCŅ['ßēKũŋƒ&gyęĨßŖ<׎ŋüÕÆžžæ{•ãIŒ1cNzuč>‡+´×7/ũ"é|ēN}¯>ô Æ{˛kĩ˙‡æzäl:Û;wω1ōM}ŽGĪÎŖoÚæ?á8Ŗsuhū yVh;<̆§#NölĀnûĨôŦ ōčsVΝXž|AíõĮԈĖj=lo–¨…z˙u|ø9ēVîœMŸŗķĪ˙ËVę/RXįģçs}sØ*eEOėk›\!˙ĸ'íw8Û­Čú]jk÷Û÷žOæÍučzVŗÛŽ­Ŧtũ>‡>eēz;äû.¤ĩĮ›œæ ũ€ûôŧô”?æ­$ô7“!åXtŌ63ũƒâœy6}Įv~.ÚųãMÖi†&ģÉĶ0ßÁgŧė×Ūõ†wpĩKŊQy} „å§ĩâk~“ülųŠ*æ\šu:ŽŋQØØ.ōõ˛ĩČ1PŋáˆÜkGĐ hŠ\™!ôKgR”+ŋCq͜/=›aŖ+ęLōĩCa#8oG´möžûčĨ+Pœ)ŋE×ķ„ũžđ÷7ęNÎĄŠ†|%˙Ú!wđ[M&ųLbß>đ{‹^÷ŌˇbuUúŽ?*ëu'ĮīYäkÆî*|ë4X­ōŽd–ė×  Đď÷‰G;"õ,ړŊkŒŋvk×v*#ķ5ĖŖHė]ų|Oyŋ˙Đú˛ •{4GüJcW{û;ô;öK"ŋüŊž°tĩüđĪSöŅc_¯âëgī#ū^YųˆACīI´<ËQJōPFûOęĀ|)5äųuzũĀ)ǜĪž§žf,÷wâHä‘Ūn­ÛĐŨŪĶŧ8čy|˛ZIŪč×1>VŽėų%FQ~ü6]É3ŦķÖyŸcFt÷Š“¯Ą•Ĩ5•ģõˆŨ%ĨŲŨŌ+ļ;čÔüu"|ОãĨ+z‡}sĀžÜÎhâëÅg´îšķXĄwŒĪ"Ô{ôgÎéŲô 6ÎĶĩr@īŋ8áÅú}Į×.FD ާŨWŠUôO6Ŗyę¯-¸GŖÛX‡>ĢÛsčlœ§Z’,žŒgö@>ī!_3vA|ĐÚáˆŨįKÕß:Æ_übĨČw͉yg‡D‰B×%—ũ_Ží…+Đ3Ş˛üÍVäōĩ˛Õ¨Gx=Úĩøy@wöŨŦđ v zõøËøųw;OãĪ’ĩWúGĮųą.įzur5ēĒlÎëjä "Â’DŪ°Čaą…­”v0>‘õ3lÅk­Đ?ŦÃĐØąû˙iˈŊéRˆC\ÎŊķYē˛xv°sy;ĒXâײë`’ˇBW‡æ­uå=>r‹%ŽĶwō¨ŽöĖŅģņÔÂ=gh˙4烟tŧ-ƌē;KØƛŋĄ—EÖīŨröIļŗ_ƓéĘ~ĒÜvw'š6ŪēĢzō|,ųžíûQLĸ‰Î­—2ēēŸd7€Ųē3ą$îw¯ëÉŨzYKŋוœ/ûēqŊ]ßSMđôøÄ'Zs՜Ëėšã‰oßŗũlŋ_5ŽW¤;y o4ûŅ$’eÕU=šS/îƒoÖÛų}ÉšüŸDwĀ]ÛSŗođrâXrM:_ë§÷%grŨ­B؍Įö&ļOŠáI$÷^~:h'ú|žđī8ž„sų?‹îę-ûũ$BßŒODøŠwœģFũ[tgąģŽÆ ‰&9ž|ˎ3éHōÔ;Î33â<ē“ŋ†Žė߈ų§ƒ&Ÿ´åS´ĮŽk~w>;fĪˈķčn5„˙ ˙r"ŋ™ÔŅäĶļ|†žü˙`ŧXr%ēO á˙×`˙%Į"bĮīaÉģ2īįĨt§â˙:Œ3öĢŦÆO>açiŨŽë"Éš˛ŸšgŌ<†= ûû÷õ&Ÿ×û|šĩkxŦ˛vFÂzû’ëĐũjČ↡˙ÂÃŋ <Kj}_SõÉ÷|w‡;Ž—g6õjšūëwũDØAw­!vŋÁ~äũ ,ŠãŪ)c?)y/oöuOŪŋQĻŖH=įŨäåÜ.ģ"=îIė_sEdÂéķz‚ĒvÍÛ˙Ėo¯{9ķœD ĮˇúIĀąÄ;Ëo÷Ž"Ļ;"°Æ˙ˇ/‰×Îøá;ž›ÕļĘũŒžŸ°ĢFŠu,ą(eqęXõö%šlbWXņ;Ā{z!§ė.]]qy&–œÁOV<×_įbį†ĒģÜÍíĸûV÷ļ˙ŊXr/Ÿ–|N_‚8ÁeŒ|ŦiÁîMŦÃą_höŌŊ̈u'ėŽ#WyˇœĪjū:ߎīųnOUxڟ՗hšQ×xdin)"ÕØŠ×ŧXR#īŽƒūûŊ;ëŅöōŋw_ō ,a}†=ŅŦĩüÔÅÎĘ~¯3GOŠ"ۛČq‰đŋĶ—x_Eööī÷íKâ{Æo+éāË+Ūâ~ÕBP3Ŧ\\Ŋ—žTEö6#į24ųŧžŸ!ôĘ~ū÷îK>ÁŲÖ1C|žĸ̎“}ŗŲKO­"ۙØÛįķąDŸXįËø$­÷%ņŊጾãa3Đ{‹rÔ"’ÕīgÆë™U¤{ÔŦß|ŽÎļėž}‰í^wqŽKgŌØM'Æ|į_LviîŅsĢČ~•w‹ûßŌō\Bœ!áŽ}ÉāÃFŸšgŌ“}†ØīŨož›9o_2ˇ÷Nųp]Ÿ[EÄŋÂĘŽņÉXR˙~ˇ"ãŽX’í\Ŋ=Ųĩ=ÅĸŊņ͋uÖūęcÕŗĢ'ëSëH“Ɔ&ßÔîLz*–ĖÜqęßFVPJßĨmoĖ*xŒŒœd_UŊ~:C¸G˜ˇūšU¤I~…ůčOõÂ'Pō{8ĮéU×tÖ*†zŽu ˆ)Į›ũĒÚŅRÎfX¸÷é™UĈåŪjWwuúe,ņGsw rÂ^#¯eۗT$Úš‘ᨁwû™Ŗ§V‘Gō НŨé•~M,9VāsÍ#;ąD1ą÷“,‰zO‰ Øi}|î=zî™ė‘Fč'w%ĪîKū¤Gã˛’zZîûbĀúĖ;öm„ņķ­õPLc‰|rõú•zxnų¤{ŋ'ŖÉ¯bIgß5ģ/âÄž—ŒąJ_âglÔé|Ė`wÄF;ôÜ:ŠhxˇŌ+ߗž%qWō÷4wŖųÄ÷9æÉŦc‰Ũ/yã}^ĸ†Dœ5úU,Ņ~~Ē>aŲĩû’9.ûNfüfÃąÄģåÄwÛWX]RhÂüߑ)Ī­#NŌ—QŸAOîKΔ;Ī;ē{āų/ëüøå] ~÷@ā(Æž‘ČY{ßŌglßö§Ö‘O2ĻkŪģ:=ģ/9ĪēÎXŨō6áА{k¤åųs,ÉžÆĖØ˙Ô*Š ŅäŠ^8߲īyīĖ3`•¯ŽGûķŋk>Jôü˛Ŋãˇ5:‡>ƒ%įJđ%Ÿ‰%O͈3 ŋõūÉîķÉvõšžyË9‡ĪĶ3â,ÎĪõ[DĪÆƒŽøžgíUî8{u8Ë&v†Å˙VÞˇÔžČ'üˇœ=ÖXšĪ¯(ÎŽŗī“ūF7ōō Ÿ'kŨ*ū>OÚ? ėPŠ…\…ŅÃī0c ŋ\؝ģėĶēŸÉũúäÛ}.†ŠtÎęoD;lûn_"ŸÖ´đ+z•l g_^åS„rKėģĪi?i™ŋEņ)}Î9ū-BLgŪz~ķëëYœ÷}‰ŅõeÃ=¯uÔŧ#¤9õŸQ'ķue˙úŦvgv&Ģ~Ķ/;úķ}Iģ5Œŋc^sõ;ËéėzG~<˙ōZ{ŽøxŲéVžë‹ķž#îä¤Ŋ{LF#ŋ7!W%įŖ‰•Žœë’_5#’ŦŪäáĄeėĨg` ŪvqåXâ{ZßAŲ›Ŧ/ąwŖũ$+ãWÉŗãĖŗ€åÃŊ‰ãfŧūSēIgĒA_‹ãÍb‰ŽĮy9Æđj7=Ģ fŠrĮ‰gŸˆ)˙HŸŽėŦüžÍ{Ī@VĄģ8ë{K~ĮŅúX3lČûũļjĶû×ŋ–üQԗÄXņ ˆōŧSī›Öî”{.–ČJ‹1phÁPCķÁރŨ•8¯3Ē>ŗėˇÉŋß2ÄĐãOē„ú]ä܋&įpF,‰ŋ—đDg–žGü‘<-†œ—Ą/–ø$}nŸkˆÂg>iřôm{ößr4īķČC-yĖfkåīˇî ĪÉë3Hâ;ÆŒųv >‡ÎķáŸIŦ{=‡$ąC#žß§f#žkį}éĖŧ}ŖŌŖ‘Į¯į\ՈĢ1˜ŨU9Rx+^T™Ĩˇ/š Ŋų‘ũJŽ]JįÛėāĸĮøŽ7*5:ĶOo :ôž†ąÛí­3$Éú ŊdéėīŖgrl}ŊÆHöIėŋđ{rÁ]Zώūs–ß…ÎõËëņ:yúúĖ'ûomú_tėŋîyH"9jôą˙Š!ЛãŸĸˇ2ę¤ëáÛÚ\°Ö5zØ/¯öûĸ•08I ‰XoÔūčũúú}zûį EˇëA¯'ɲģģŪīS~9~gÛūĢ~í’Ėņ_ÎĮˆ,а˙e€(Rõ.C•ŦS‘Ŗë6ߋÎĩû=:C?^1˛=Į1nû DũĨ¤›“š˛ûOôM÷šd=°—÷N~Ī$į¯Ī8e=ĮX}%ŠyØ[ˆaW1L‰Ö?‰ĸīÔģøŋ‘Îēŋ‘oët=â÷?Y­I=ōŠŽÖ}Ĩbøšį#ŠíwaĘķ=ˇJ˛ūŪŋ­ŅUIįŖF†$~WuüÍ͈QļęWūíĮ‹ĐŧÕĪö×*Éü{ŋ˜ø„'›õC< ØũD™oWá¯/EŽøTŅoŗ˜ōl?­Íđ×WÉęĶg<ŋŨXü>f^–k*Øķˇ‡á[Ĩ˛÷aÍS ŋV˙ũíĄĘ“ũŗBļ^_yÄqBްyū5ĐĮoWE+ŨWrnąÔšĖû_Íōg{fŽXîŋ­Û•Iß!lúč‘gëāÚĢl[l,ækûėœĀ~%ļ:‹ÆīËĢ×Gé¯#2ˇĸŠŦ ÃÁšŗGīfQõīNŒķœæw'ەÃņM$ą yo8ɚü{×HŌŠĶŠ”jcĸc‰ßi"ūžž5MžDÖÆaųīx!#™,_b4jPmī6§Ēu>äÚ7­%"ÔĖMŦ‚%OËŒö1úĸÉ?bųōŪpj$sGw(ü{k΍ íw˛ÁķSëá­Čõ5Éõŧ3Õĸú+ÔÍЗ$ęcHŌûˇÉ“ôcÅē&ÄėIņÉ'íüĒĐ×öޤģwv–|G¯O’íokdĪū1n=ZãhũžŨ?jZzXRæRŖ‘ˆjūø$íŅ ŋ\ŲâäEWvÃOĩ}7Ų›ķ|G2öãĖÉPÄ<eޝ—(ÕjbuĘų~“ÎûŌÁŋ-í•ņ=Ęs„gÄs<°›°'᷑ ŋßąbĻũžÄC@´Ļ˜Ią•×OĶ8öt%ėļ#gŋkí:åyyážvŸMúĢ&G’—čŨޟĪH/$šÔžwx+ĩ–š‘Œŗ e­IÖÜ|^č÷™Ÿĸ,b?ėÖ.ßŌ˙$sļ'a\Ŗ÷5îGŦuGĨķĮŦ¯—rōk#ÚsŒgfc¤ģODĻ)Ž_?ģ˛ûMŒ+¨]ũ¤íÉüĢ-ōŪ…täŽ19’GĐÆë7}šB^MüÍy{rŽ‘ŧކŪËfĮëÍëlä9ĻeÚUŒkå6cĨå8Ä<ķ›XÂÎ}_a’ņÖč'ÕKUâ•1<=Ύ6;›ũ^÷n7ņ,fŖ?‹…žGšÅ<rŽæ—Ž'ŸBÁ'Y˝y‘d†ü*ų›õvå|ŗŲCJĩJėíČŋŲ ×ĖĘėæb9{ˇ)ŋ?˛3ž—¸–č+Ü_ëd~ƒtle§Ą=Ēŗā7ûē}U͊oŗ}lÍx8>°.×Å=Iä…čÉĶÁī›$2mĐ^Okėâҧ/iD‘ŖöéõÚŠĒ(’Ū=>_!ãnk‡ãŒ_Ųųíåú~ˆČž{(Õv)ؕÉužˇ¸îøôö%HÕü}Ŋļƒü:ų›ãÉøŖTļKV¨W;į|ÍŖ5Ų<ÛĄŸĩmú†ĄģöŦ5ÁšØŗžFģ^ī|†ŧ,÷VĮœØŠœíĮJõī°Q/Áôā+ŧyģŸõ^Ԝī´ûíLæŲÜ˙oĩTo7¯×Î Ŧ¸/ÛHYL`ø %㙎×iŪēJõ:[ąV#ŨsDČ`o0!øˆIļŪôĐ4ķŊĮķĨ—>GYúãr­í¨6ôŲŖ‰í ô*^ûē'ŠŪo*ky7ĸ‘$÷ŗDûŊÉ"ās}QåĨoŅLūy{đnáÍZ\ŅëũĒF ŧųúí†KÉæ‡cŊÕJÛæuL‘Ÿã™X§—^:‹âŦ­fā¨ä+G-/yZëžÄŪ âΑěī‘Ŋ“ŲÛP„yÕ[:j>ķvI¯sųœëK/ÍĶČū,ģeūņėÖŗQ'/yčģ īKlķÛ [§Ģ†×÷Ą÷PcĢĄ^ŸÅFúíĖv0¯kÍŪNåĨũdŗ,_ËFĮ›žąu6ÖáŗŗØāŨØZ­—Å'FÜ3žZ6ęÁ,›­ŨĄ?ŸcÄëōõ/ŊT'vƒčô(Ų›Æ;Įn6õģˆ”ĘWŖnÜŪl¯ßIĄ/ÖČŋķôúŠå/Ŋ´Bõã5m‘D㕜Åg}zW+?[!ë:įVķŒŪ+­Œz°ĩÎÄß÷"eæŦ¯kúŌK˙¨ß§ŋ˛zđļĪŅDŸŠē6+ĩī­ÕÚehŌņļGđwmņ eXâŲbģ¤ŽõķŪzéĨƒtå÷€ãÍūÅL<žØíF×dTųŪJœ÷ŋô*Ã×ÉĸęēN7¯Kŗēs¸Œc´īĨ—*T­ž‘c~_=ž'{Šdė¯ĘWĖԃöALÖcĢ•įkë#LäĪ Į[Įž—^ĒöÆrĖŽ”9&×cFõú†ãwZ“¸.üũ*`wĻĨoƒīąžs{ųŨ†{ŒíŽŊ8ãŅ—^ĒŨ{xžęķO¯—kĸŧ•;âųė|­ÛëÛĪđbøeŒáß.íAĄØŸdŅAË_z Éæ†­'oŸū’€ütåEõĪe÷V°ĩ™åÜ&´ {’Y-ĒûĒß=ēzÆžŨgųKŋDēšâ5rÄūb&ōŠôVéų˜VŦEĖāáJkqU÷kÅÖĮU¸G>?<f%ŧô$ĒtŋyÎØĘŌ7?×-oEö¤“ĶüëîF8Ē ›Vî'’ ŽG÷KšWîđ=<Ģ!“í{]ęũ"ËK1åų‰ķYŧÚÔâׂĖU/“÷Z׌־÷-Á[įû—û¤‹$c]EËH{ß7zdEÎKĪĻڍsYVĪļŦxūúUŗn›­ŋZzōũ՜#žûšO¤Ū==ĪÍz/Šę4'áĨ;Q?ĘXsŅJšĘf;ŽķęĀĪŲŨ™ŠÉĶvUWiːĪCÎĐ 5•F͙egų1įš*áĨgS-uũÉė×#^^ŸY¨Š<íŗ¯%z­‡ Ö•}OôžĢhŊ"ÄžcžŽüSĄĄņŧ„—ŽIë•XŠiĖz-=Ēŋ °rKōy™éžnzū/÷UefXÂŦŌž´>đvd>Ü[ī•;ë‹(ŋN9bđ^Fe—WÁ>Ëjō°đt÷ųWFY¯ĀuÄûĢÎĖŠØŸ{|ųōŊũ<‡öƐUšž¯#É7°¤ōĨ˙֑$îJlׯvq}|oTėņV"—õlá p^ē펜ũ ÂWųš­ĀÕgt&Ųy.oA‡•T4ĢkI~‘Ņ˜†Ņm(ōßËŧĖ´ˆí­Ųj5z1åŽÔXũ쀗ãģn7ģąÄ—’i‘cIĨ6ėW O7ÖĄ„ŠúFåu’z­ËėĘ,ļZéšyū/}’ÎŽËŋ&ŲŽlũN,á§ž>+G]qŊšŦë08ZîĖ čŊ9ėŽĒ?­įŅsĢąāņõ°ōĨĢҧ"d37Μ žë3É=}iú‰íŠ8Wu°ZûúđŪ ÷Zd­Ēų‰ëŋžQÜV9ŗ*áĨũôɨÄy­đ÷œ¯Ö­ÉĪå:’Øš2´&ĩģMlÛ_ÕÔön8ÛįŠ2ŧXH_ŧtšË¤i~6×ē›Ŋģ,ˆ3—û÷úh.Ķ ŖSnC­\ŖŠ>ģ$œgÅK+4‡ŲČÅšPû:`ķ'ŗ`õŽSģc0$‘<ëX}øŊY^Ņ›YŅķSn÷HĪ>˙J‡ûŌ7¨ëũ•hu3 ¯„UPû>ikOβsų­WĸTön÷WváÛYwĪūY˙D<_úÍx|î~Ÿ”ž6ūŽ\Ÿ™JfēF÷ŧ‡čQėÆ5×4įyŪ÷ôû’ŗ"ÛĨŸwØņRLŸĀ{#đ2;ē°súp™ÔXãąGjÃĩĖĨwdúHÂVVGWüWĩuđfvH`üwØņŖīÎ܊ô‰Ę˛†įš§s=/zß=Ŗ9OCš“ŲËDšœ¨Īņ4ëÄņķú“C_Ul6ĖËā1āŖ/í šûJwĩߗ°u˜]>ĸĖۏåŲÕ"bJ–ąrWE‚ĮįÆ_Ļ!¯˛ŠíįÕæøģãË÷Ū>ÄzIԌ'gú)Ν ģOzÆ=ŗ!ס›QQ†VĒ@ÖMŽ$ö›LļÃrā^á|ФfžŪš%šœjGŧnĶ/Ķų}‰ŪéG-ūB‚#lŨŦžŗš$÷HÔĢa‰Õ 3Ũë"øzŸĒÖ˛š,úú]DĪž\2į÷ /ܗüķŠŗÍ×~Ŧ"ž#¯ôjV[lwŽîĖrjĖKŨš°VĢJ Ų9žD–GŪčî[!īŽš{dMĒį¯Ī{ā)4s¯Hķöį|1‡F÷Kˆ1Áō9Åõ’cę7ũƒ7ZķDuG>[M‰Ĩîšuë–zõYܑú§ļ]ˇ9>ZãĢŋč ŦH’|IXŋ`yIYō[†×Ģ{įî,ŽĖė˜ĄOc úL>ũ­:Ûîũ>ô-Ü-áÄÎØîŽĩxEŊl‡‡Ė69Ę8Į|ÆÚX*b bĐІYu(:ģâŒã9š?G?™įŌrÎēCü4ĸėąKsōNUYW üfĄŸVíÆšžœá‹ą¨Ü{0k™z…ŸŸ‹rím>¯ÉŗYSÕ$įlyÚûŲ1_GėÉÆ~ėN¸C˛§m%ī‘˙™=ɰy›ö—ˇ‚!Ģø“é2gs—Ü}}<ņ4ĖÆuoí¨ëÁ2bßãÉf‚Í›1’EOŽôyv{ÄŲÍ2*¯‹8‚ˇ¸u~ū;ŽŽâJŸ¤dËŽÖc°Ë7(ģÅØ;ÁŽžÄâ˙Núw ^Īnš¯îMđYŽ YL˛õ͉¯ķlœĨčFÖåÃ4Ę{<1ÄŪęJ–ų=įĶŨų{?ĒzŦzŠWĨéxíŠ-…W'ʉŗFÎ ]Įīŗ¤]zGĩ˜†lß1CŲ™Ōãc5Ęē’ãŲļŸŦž^_Ôĩ|íˆį.ZķŪ9†eëũÑ%ē úqˤČ_&YIˇ vÜæ!fn'Īãg#ÉŪķ1CkŨáyvî Ģ“í‰ú~Ũ[ũ;bēƒzž`ë$š0Ü^ĶÎīVøjŪy§QŌž‹r'>sšĪ@ž‡úŠ“éŗ{VŊĨįjû‡oæ8UíŦ­ĢųĘęŧâÛ蜚ĄĢaIÅū Ö˟%RëÎZĮĖä;ô,b(Îy9Žųv3}vOŸ"ŨėąįM†1c=ÆÆFkM˜eú|˜õíŽ80ŊžMŧ[ôWsg´nK˜fē˛W)ŽŦ”~ŧG ĸ¨ÆOЗŊ\˙~ObŊ’Ī{6T5‘šžŪ•h=ųy1į]ģr=2kû÷æŊŒ_Īfl-ا9í0/tí JčŒŅ§“ÕUrĩy˜gn/ĶëUŗęĨ.Väķŧ:3.#tT<ĢĢūažoRGgŦyÕO}.ĢŅŨCÖ‘o|ŊeKlo°×w^6KqŋĖĩŋ÷ãoԕ "ÅéTß×ķQ%’ąŒ|Ö_ĄŊíõŌ^ŋ×%iĩÔ|ĖÆ1ĖũT]qāg÷:ߕŨčĄĖKš°<_ĶįÂ'ûĻ“îBëáš/ŲĘkWhOž°ŽŨ÷3—äcäzgÍąmŨ{(ĨēvHG]lÍY¯ņŗķX›“ÕĻNŗŅ¨×Hļ2Қ&Ōûûép’ėë"öņÚwmņt`}‰–āKņ0f‡#–R‹oa‰DÜCGėP$v ŨŖŽ/ĘnĪ÷ĩ=¸ŗ“Îę äט,ŗ€[Ûņ úO†cN÷ ‘į}P§ų˜zŧfŦ‰yJ?ųJ•ߊN~ĖöX{H™[įË8‹möVHëŅĄyäíøš˛ļ¯‹õxÅÚ>i I0ļķX˛ã´§Jm×ÖķÛĒ–ŒŪŅųr×û+WŪ+vPˇ/á#¨ĶĶ"Ü“–ŲĄŽ?¤”ũëŊUŲ^ī†ŊÍúĪėTP‡ž§÷eŽÔĨļŠi[õĘdžYŒ*öh€RŋŨ—°gí¯c<:‹ũ8ú^ŽíY÷VwO-ÖlMĨ[~GŒØģC‚í,m$}>;ŧ”ņˆßšTĢŊöft î ÖųØē‰÷¯H÷ã˙],ņO2­ˇ\ÍzšÍėatlĖ"ëí›[Ķëhl.Čßžw¤ē–ØL‡Žˇö÷%ĪáŸņ–éŪ]׃ˇŽ‹ Áė\Īë~œgkŦ‘ՐĪĸļcÅđd/Ûë{,‡žĪ;^ažčĖ×åÉnÛÚÁÍwpœ°‘Güú^`įŖÕ&ö‹/QWŒ§ˇõəd1:öf乊´Z&ŦŅ\gâīö;aš#ļÛXÛÃeö:“9,Y›¯ËÉšæ)­—Æ!;Š+|~™î^O[Ų=ėg3šÄÜO=öëų˜§ÖtĢåÂ*õû˙Ú:–ĘT,ŦėØã§9ßÎG¤˛3˙olžwėŋŲÉéãIĮŌÕÎ;%×Ą;˙yō 4ryŨ [Vø×ŗaEĘúZnķŦė]ņĶŦoįģđoŦÃ}Šö$^7^÷´wŸ˜ņH~jŖ5+ĨÖãyU¯9Ō8†1vČõü͓ĐɈ5;f×ĸUØ;Ë7í™ēmņڌęÖI=ût–hũŦ{dđĒ ī3û~>ĢRYfJŲūØzc&_ö‹>ߛq¯äD—ëʎúZ}’ōŪ­j[ž:įsŽ•Õ]+8s؁^œéOĢäÂ;DÜÍxgÖĖx!ãÉąDōÖöŽ}×AMÜãķŲYˌ~Į3ģž×Į˛í¯Ú6öĪRĪÆsú’-ĸša ë~ģžąÆü˙ėéāsŸĩu–8ODÄÉã‰Õë÷)?};œū~ãĖXˇģįģŽō\C4Šd=÷Xž“ûŧkå^Dθņ(0=ØšŠ>ķŊĀxn‚X]*"K÷䎴%Ÿ×mˇļK¯ub:ËHw8Õęd]_|ĘׯkâÜ­w\žĖÜ3kęī[“äiĘú†˛<’āė!upˆ´čØ{HžįéĪŖ•CļÖaFģIÆņĨ˛wŦæ‘ŗ90¯g}m´:ĒųÔÉ~5N\ŸÉ§™žDį°7{D;ʄš/mWp˞Ūņ˜kâŗ â%kŠä{ėPéú´ŽR–õĐ5ŅÄZĀ,Ķ{䓟û,îņé!={hbŖßG”ŗ­<4čí`ū¸XyĪ5BYįÁâ¤gõîHNnŠū[ã0ŽE },Y9•Ī&-ŒƒˇGîfQŗ}Ɋ†ĩũšÔĀŧĀė“ū‘O‘ŪŸŽ•s^ÍüâwČE[j+7öŸ_2sô›ũOzÎC&ģę+ų´Ŗrsīã Ė.ôÔēNg‘Œ4‹6Ī+šķEÆu]ģ=k‡VlĩŒ]Vc‡ĢõX†)šæl}ĩ–ØÛËæ9PA]0st‡"Ÿ#~’ÔmßŅôx0ítntēœ+Ј ĩC[õ%Ūɲĸ×9Ģ#Í*ŲČíÖ'ļ¯v7gYyhŠ:wö3^,îčlæ*9ëCz3ę„v IvĖų,›ģ@=ŋŊOË<ōõĮ܎Xô<×Ī]ųļæülŒrÖÖ@d_7Ûw –éc*ߊ;Ī>qm4÷Ąö$zdđŒõ™ķÖLÛLéîĐãŊܸŲ3V÷Ō2IšÃî^ŅįŦĩ皰ĢĘŗ?¯Ūup\ęč]ĩ2æŨĢ2Š÷@ WŦ5Į(f’×—híņo.5ˇNj×õOÄqfūÎhr×kčØcüåÚãúœW4>UōpØíg/—+÷kmjļvjŖļ˛ëck'>Õ*šuŦKÔHâû:ŌĄn–šN;ĐčîX")Ēîųa˙5ûÜåõÎŲ™žWPG¯lu„NūęŪú|•Œm‡Ŧ4;Ÿõ# ģ$’Ŧa‰ÅwŠk‡Īe–ęú_Ÿĸ“Áķ3Į÷žOzX2ĮŸõPqZÛûh›YĄX•Ú寭ëfkEÖĩOČÁķQ†$q'čĮ`Îļ9ųŊ5ŅÉ;“××&ÖIfë÷H=gĩîĄëHb+ ęjxŊÔ5įšUąî° —Ë’Ģ}kũJfhę!´•ĩŪÍ5Č-ŗzĖROļ‘=âژ9“ŸęÚꉭ‘Ärņ9Yl°HbW˛|ŸĩĢRZ‹ĖĒnޞŠ‹HīeĢ%¯ãŲëT´7™w3"Ëđ9ęúԋÎZ,ÎíKp§ÄI›§ĩüd§Éj˙]í$¤æ˛ Oúˇwöa~Gvą}cŽĩHÂúŊ—iˇÖ—čķd’Ėp@­ë<—>‡žĮ1oÆ/V™ōÎHâ|z]õô–č¯5īuīŧ~kHŖŽÔÛö&ŌļČķÚÚšHQŗ9WI§_ĮŗsŪ8Ģ/áUqĖå= Öc—ŧÚZナ+UgĻÜYAÖi`—ÂŦđëÛ͇÷$ö´æZF’2_j̆nk§ĸ'?ÖRžĪdÆĶsf†ÃyĢąOCo/7ëÉöetyɝļŅëd…čŲX‚Ö\wžæ^W¤Ÿl$w֓0OČ}™ĩũQVЄûųĸ1nŗŌŸB˜73:ŖĢ÷ÎYNk˛´Ė,Jđę°=ĘĐÃãŒgfId=ë.ŒŖŸí Ij^@Ūõœ—?_͆EžÁû˛ížÄęd†cQĒđ힪‡$™-3Ŋ1īR:¤ūãyđÖzÕ*Eë0Ū°,’øŨWŒ&|¤kŋ”SßY—ŗƒ#Ã˙Ą÷yzŨdžÎֆ]oĪ.mŦ›Ž ũ[ĄŒ?{ŽéÆĒ/î<ûX5i+c­§Ŋ3•Ųā!‰žÕZÚˇnΰū§ŗŗ'+æV?ßlŦmwöģ„hëg^ƃÍô%l­åĮ3ŸÕBW÷ēfŦĸ*žcU}´]WíJŦßŦVč#î9ÛÕđšęd‹/Ŋŗ{/ĸôd3­ëą.Ų,֝JGW^[ÜÛŗėgĩ°CkOzŦMŧßīÚÆœũësÃ7ÉÅjÃĢŲžëĮ_Õ%Ą.qģįxtQ‰Ų.g=r~ÁüŠgJŋŗ¯ŦŒ°€uŪeÚĪ‘ßô¤s<Ņ}I~ ÛĘ@ķLĪoĢŊŽÖاēŦ˛6ë;=é#^œģÎÕH1Ä ‹{‘×ō‘ųŽdfįƒOkqīëŖĮŲŲwUâ}H§":ų‘ÕE=~=ä¯Sė˙Víāã,ņ¸ąšš×ôīßîŠÆmũ†¨Úã×ÕŊ!ũ×įx˛~ˆÎW?ãëōzkũė¨äûywœŧר{PīãŧjHގ-ģļN;‘dw$Ml§ŌáUŅÎŽŠ|rø¯ĢËũIGDĮIį–įĶē¤ĘÚą°Ģ•Īŗŧ+;ĒvH ŊģŋŖX‰L*‹—1G|gnģ¯ãō<Á39į[uŦÁuŌ–CßOĪ ?GŅ{6Ģ{>›ë'ŲÆŅfûyҜĢ'[v…ŦÖÃVČj¯Kęо譒ÍJö[‘=øđ¨ā )ãéí{é0“tõk:ÜzŌŊːH ­Ž1÷YšÛëWŠæĖī-œąšŽĸ—UąļˇŖĘšû]JĖĮCjģfÆ;/– éÕĸI/cē÷oDJˇ1­÷¸]Ŋ´ôIė˛ą0ęžõŧÕĒRÚs‘G;ļžÕčˇ¸'‰t`ŧ0ŽĮ[ėŋ7y‰“Î*ôeĮŒäü†ēÔ4ëwVƒ{o“É+–!JÖĩëŪێŽR߯ũUÅ5™Ķ÷xÖ֐dėyą$'}ō鎚wJīË2/žō4ÉyČuŊ>fÕ¯Į“œO˛Ęņëcžúvåģúüãuu^voņxļŊî1‡û^4éĐá7ų+ĮķŨ=i?˙+ˇ¯™Ū=ĶĢÃadŗ%ęR2ëĐ ÅwŽžUÍŧ›JÄ7úΟeŖ8ĪoŽŅmĖ^Ē“•J^ėA­¯™›K}Ī,ÁķÎīŗŦÄS"ßÔŠoQļΟ­t2­EnQŧęx’ûdŦ°W˙™ņÛ¯Ķ𴭊ȟ]_G}‰Œß\=āT×m=g2z–XÄÃųÜ+šŗ'Âãe2îöŊv§ņÖe–{>vsNšN/yÄjÁC”ގ+Ŋ2ΆnŅ͂]wû_t7Aų˜÷ąWęÔˇdėšë<2Š|ž¯ëØįy+æÎēŖßŊdÉīØq]í4É;…ŧrYqē]ɞŧą–2|áöąÎęķ=Éą'öIũĶÛŨ? *ÖŗîĪĶvÅw/Ådë@Īõ¸øķYFô¤GëYÃģ6œn> M2¯ä^ëŲ õȐ$ë=ææzTķ@æ 9ŋâÁ—ąÜ–ų}ŒV*ŧ"mGmؓ§s/Z#í'ŪÁķ>/˛°ę—ž¯˜~‡>Ú"ĪZO ĸĄ'ĢŖ™?Sķ‚|b<ĩ>2.u-_ĒëŧķŗĢ'a­>t ôuÃ\šˇÃĶ••wū}hÍSžæCjä=П‡|Ör =]æü`ŅC?Īų1ĶųĨd;•u_Kî{ę#Ģ…h× ąldg4ëķÖī2}?qŨåyĖqQZw‚Ŗ"ŸŽŽC~īöW“ŦíŠ4ŸŅxË3I#Ę|ūZž6 jUÂĪ—žFëĒ}Íõ;¨¯ˇÕ#ŗ1æČؚYĒe Ķ7ŋãČHîĖëUNO#D’QŲŽœķZ•ŦÅjĪ ÄŊú´Õ[Êy1˙öŒ(Æˇ›ž'Ø[“/aÖ^,ĸŽrMO­í*ĮįŋīŦxjĩRēˇ+}vīß]\íNzŒ]ötXˇ0ŪuF[õI|w“ģ4žĖøX?Īđx>E7ũYŽģĒeFƒõ×ĩ“™Ēoæ[ē¨Ō×÷oëKÎč%4ˇÕũÜöÜ+yĪewÍųYƖU>ŋ@ŅM†ÛzĩŦô%ŗ;‡iė†3&]M]#Ķ­|n_GN¤AãĀ­¯x&BĘ9Ž‘†ãŲ.įWh-ģ5y‹īp]ŊaÍīîč û=ļŗ[ō’Ą3–19ūlįo­¯ø&Ɨ˜įŧ–ŧãúlbūęyiĨjĸ¨K_Ų}IŽzúNnģ”ƒįœG|9.ŸŲ§­ČŦôõččÍ9 ŨŊî˜Ë‰Įnr/Jëz^ëķŪy2˛šŲÓ¨^F|ĪĶ~C/ģŧÛ ŽÄ>éé§ë„÷$šĖx?B“./ĢöAŨGŅ GįŦô—~^;+}Ŋ"^Īpg#™§2,‰¸IŽĮÂz˙EKÖÛšŧ¸ũÍ­÷Åąžëę<†MĮ¯‡-žWzzY~šˇ]•Û×īSĸĩ]4ąž`~Ērëd |šÕš[ ­@é3ŧŸG:Su&Gëĩ+;÷čēÎŖž†ãFIz ˙ëhāoܓ ^}Ûû}‰‡bą6zdÆ[ÃŽąG?YOâŪōsgg%<‡døjæ?ŨŸĢéyØIėĄČā7SZ'›§NÅxĸWÕ¤Gz1î~Oéƒļö}6|­ĩ‰øÖФvžđ ĸT,y:ÉSL÷¸NzÍæõĒ?Ŗ|G¤f{Ũã¯×ĨĖdĶČM†z„åąĮã×é=ü9Û dœxEûõ‘´ uā<ÛíרãjåĸļŦęë^ŗayâH•÷ą¯˛Æō;ŸØéhs}w_b‘,Îî 7Ģõŗ|ŋ΋Ũ<¯2ŋëUc%į9ž=Û0ZfXdˆúĄŗąD{*ļšË-ŠŦ˛ņКĖjđLÂ8a&ŗÜš÷žŦĐ(cŊŊ•ąJׄ•%Į4vÎ"‰´SfĸíKxõÕ*Ú÷‰´†¯ôŖ{UīąÕÄŦé`‰– ÷#¯(v‘WR~?7žHŦļ3$YĮ’¨Ú;XÂë¤ŖÍF}ūØú¯đÄėķ1ÅūÅU–ˇ§šöŠĒīčŨΠT[áŗX"Ŋ G˜ŽMú1Õ9ŧŪ#=°vĸlū[?īŗI:ŧķŦīsĐÚÍ  ¯$ÆIã‡õ;Į [[^ÅĘĩu,ņ×ڞAk{Ā÷˜ÖąÄ—ƒkįiöŒxņid2ŽÄ;æda­æŧųzŸK5sõ“Ž`^ÛyĻØ|ÃŽ#“Ø3ƒŋÔuĮ*Ô+#?ÔČĮHUŪÚ_R&ãĶŠŨŠ Ã۞ßUüaōXŋƒ9‚g&͚Ą‚Æ!ŋ'ąį[dwÜŋ`Qcô—;ƒöÔ¸Ÿ:“÷H{ãäˆũģĶä#|VŖ”wŗą™“ß—rtNu|8öTw uĖ˜˙]˜El<įķy,˛wČĀ<°gĶ>YĪŖŨžÁŧŋŲ¨äP“¤ņÍfCFļ ‘9å푺5ßôũíyEŸœ•\+fy¯rdĩUĩßKąĻŽíÖ§FĪ/ŋ@Ō?;ũâc†­ú :Ōô¨ŦÚ^_2j %Z]ĶzÍËl/úĩ'Uäēųk?UsmĢqōâËrãˇ O‘]~Ņ\üÄĢäB%[ú}ɟäņW>ąüŌŗžd†ŧ*Íj7Ķ m÷üRŅĪ[ûÉzĢh\‹ˇ?˙Ûtø ›79Gœßwôڜûā÷ū&đ‘NIÍ<ũĪđŽėĻÁG+TÕmÕÂ]TĶzîˆVvŧô\b°æļĶīÁĢü}ŦļX?ä׈}ꐔRéK2ë3ÂØd÷+O/Œ|æĒfWǧš>ķxâõŊĢzߍ0eEÉĶ|†stącŲūXëįm”žûo7Rëķú˧Z-sņėČėõ9K\Ą’¤Ŋ{ĩ °§Væą'Ԉŋö7CÛ>ßņ6§ÛĘ DK†Î2GôˆˇSæLĨ7¸J:^Ũ=ė9ˇ’wõÖˇ{,œ%]9īœ—€y`5x6yųâŸæužĢzåkøŗՙ× ŖJ s/!ē­‘Ä’z|l<ŅĪVģÖ[WÕe?i? u/U%iĢ1ŽčŊį¯ Û“ØŒĘøÆ3k]G˙4ví Ũŋ mÆHŽ÷žÜÚX ųNŠ ˇ í–ēWŧ´ÃÆ.ĄŦhĪŠ"Ëķ;Ã*úߗlôíŨ€åIÎ՟ËĮĒžĪÖčxÖō_ūÖV#’xZ‘M\^Ŋ ôZe­Äՙ‡>MVjJūÔdÚĖđģû Ī{’ļ_Ž[4‘oĪēüú¨ĪÁC¨’T*#˗HË3ōȡ=ĐXSą×Ãˑ͞GLk=ĪwUĢģÚaĄļ7ų´gŽEŌ+čĄČ#ĢžōxĪr­uåũ~„goŅį°dČôįx.­â'‰E"ģë,{™ūûĄ]ä‹Ņe’úˆĸû{ļ&įø$bxĒ3†íYõŌN?ŗßI9ÆÕV­ŲËfŖcfØaí¨{ø"5:;+ļá i]ļĒŌÍÕôbž”:Te>‹F.ņęōúÚxqŒôã0VØ:ŅQķŅ ÕúÁîŽL_™š†čĪC ėVĒšôŠęO÷oë’V9X~:bV÷ɌĒfôŠM<ķfųęŦe–EŲ­}Č÷Û:æŧæČ×-ߚƝßWĒYÎØlü-Dá'˜Æš5 ]ŲIbõÛCŲ;–áČ<_{ZķHÆQ°gŦæV‘õY‹SŒ%~ĨĪvjšß*–{įôĐžbŅõWäœåvįų܉u˛]nQŽxTrŗĸ‹æĘ°!Įmɡá÷‘Ũœ#Ëē˛ō“cæļŠ•4s:!ˇY<Z ĪX?Ņ‘ÂrŌžÉ¸rF˙;Ã×jļžq†Ë<Ô1ë’æ9FbûĒļ{O™÷fsĢ››ŗ}‰]W‹ ŧŨ0-ęvÛčÕöųŧdYŽ{\­ŽĮ˜ˇęÉÄī;ąõ<ĪfëDŋí έĸi§rŽŋ:{ōŨķŊ{}gÔu5Č…Ÿņė)—TĢsą'j,ĮĒ^f‡ŧ|ŲO&´˙xĢäOåü^֑äk×IķBŪąunųÔŗĨ—Y3šč¯žËęÕ^užŽfvbÂĒÚæ"›Ĩ0žļōōķš$}Uœ<‹í9P—Į¸Ž’æäéŊįžĄyô3Ĩ‡=]}=ûĪĘfäģįŽ˛˛ĶžŽ3ŨœgErŽ#Ū*­W.‡YU×ÔÛĩ’ŪŪûd\„ßąÁęāeŅß<âJOüüÍ1åë¯AŦKĶc¸BīĩÜ*2gIī¯Ęō4›ë-ķąŨwÉĩHË5„^!Œķ¨p^÷x*č~Ļ"q};Īvßįy‡Ëķ°Â›ąęaI„&ßǃÃN~gĮcßėJ,šxÕŦ+_ŸœŊĒg;,oÆŸõW"īŖ+|Ŧ•ŋsn„!ĘõėÛuĪ‘;öd„´îڄšđ7fŸüīēn>gŠĩ‡*ríX_Ī5žŠZ*C”ŗėū6ŲģL„¯+PEë9,Ņ{íxOsīm…î%ė> įôHÕ;ûíļZúpŦđđDîĒÉeŲG¯ŪcõõČv!_Q9į;¯zH2<>ë}Y+hbąčš™Ā)‹DÔ§XNgųšĘčŦ’ZHģėYZוជ)(ũy„Zņ8ą‘’ ’ĪÛÄ5Žs´¸ųÜđ cuŒâ|•Û~ QũWg™íWpflE6G­ëPžšM؏ ŊļSŠcKŒ%^Vŧ-ŗ‡ëTį1ˇû9„1úcëjŧvŦņvō1]Ņ6ë°ōíęŠlÆÕv<ŪÚ'’ߏEyÄÆ{H"eīčˆĢxįī?˛‰Ųô[4ęJŦpō÷ĪĮžīÁ>qbČÃ{âPÍ>äČ:[cĪĘ,Ū`­_Öņ˛‘ ’hŲk÷›Á!ËŽ|?ŗeEĢ{Ԉ?÷‰ž‹9!ĪHfßÛūyfģ{(ÍĢ„Š<ŗ9ļ°Sû)¤ģ=æoũá¸îŅāŖ3mÕŗx–öwŗžæiņŽ"z5:U*\}^ũ<°ų¨į8šxŠķˇŽ‡'ŋÚĄ ‚X?ãÆ%Ž›^wėÛãŅ(Ģj{=+Ō5’9āGІ.lŽu•lˆyyĨķã‰ÜŅÃˇQž<O4šč\e{^D_KIöô$‡ä•Ú—5ƒoŋFŧR3œČVT°¤Wŋ†ŲŪšŌŠČõXķš>Į^Ėy[#ö,}VĻézčm­ĮØiEHb‘h–TĪ´œĮ‹%ŪXĨCípõ÷Û,ķæ|DáŸxšŋÍéšĨ6ķeŽŗ*{*žp+ėŦwŗ{%-o—îČŊļ‹Yfg‰Ú3OhôŽ=Å=™yˇ›úX€įŖ(| ŽÍ5ą|Y­h,|ĸdø-Wé=ãy‘UęÎZ•Ņ—ŋÚ2ļߤNΉk‡,>øŽ~ĪyÖĩĀķœÍj=åūĩ8ãæQļ*˛šíŗ§īlt}Š|Ėû Īëĩût>xĸv¸FkĀm°ķŋC6Â~Ũ ‡<ÕâÁWČķ-[ëkČķWÖ2ĢyĢCˇæ=Ūē&[ž„'Ö&¯/ŗų$’`‘ŖĮĀčû=˛xė!ÚĪYją¨hÅøŗŗCĮ˙Ú_¯ļšĮ/G”ŽūR¯įá‰öÃMŽ+5$9Kj(€ûtåUđlâõ‰žĩ9Āüų°ãŨü”āģ,š ūūŖ„Œ]YĶ'ސįv(:7YŒė C’]uęa‚~Ęö[Ûvęx?B¯ŒŅØßļŖËę ë_™al?ęk5a‹•k+YZ!…÷5™ >ĸ0lyĸ°îÃīP<ŒAžûũŌĮ]AjŨÍ3ixŗyŒZŧĩ(3öF˛úÚy|QģĘÖ*b€­\†(äoŊâ-_åžÔĄXÜRĮV#â‰ĶũIŽ(؊Ž–ŗíK,fíņâ÷‘„!ŋˇķëyõWĐ@#‰ü¨v÷S(ÎPvRØĶSōĘ8Eœ{44×ũŠwfđēÅ*Žt(樀š!ŽāęY]ƒ,‚Ëįŧ ĪĐĮæn&IįץģÛõŒ8"eķ1j×*ˆãĪ šøÕåŨ˜Žļ+•9QC D1‹ 5{ô>Ž;Jģ'Ąg8˛đ{ŦæšÜåŽ×ķž˛&ų”ÛÂģĖiyļôĨÍy”÷Æė,×Ų"˙bÜ%Ô1fOPš×7Ilš+aŪTō<‹ųi™ÅąDįĶVŽé,|õą$īü*sĢ}‰Ūm1UߘĢE4ļĖ"‰×Õü͐H˙>MūŅō3Xbģƒ™ēÖČ`OĒŧšü4ÕŅ„XdŽ"rŽī4" HÉ6ĘėœĀÜÖĩ=OØ/å6ĄdŽˆ÷$Dî –ė”ėiĶácŗįāb+ķîvŽ×&ŦQŪ‘`>cĻsY9ßhGeÕ{Œŧî#Ž1Oz؁#=ģp/ëzjūš"a >՗xXŌå¯ũoQQį—ø,4‘ņĒ[Ÿ†z§Ž;ļųô5Ėį}áú=œąįæ 1ŦîųÂōĶŖ5.W$ë‘O ķŧŒvžšëäG(Ō<’|Gâ˜éŋßđ樅%Õ:^ö™až‡¸†ŖIUŧĩ}5ĪgaIĨ?=KâžÄ“Ģs_Æs%Ōå×°Ä?Ķ÷Z}œé1Äģŋŋ¨ö/6đm­/‰¨oá>ץŽ%ûėôģnæę.DŽÔŖ#w۟üž×hī04Ų•Ũ•K\ÁŅC÷V#0ãģ¨áīėÚËxŪ›j–ėŗ”sŠŗ×CŠ7ö´5ež>#–uãWÎ3U,ŠeNą‚`˙šŽ}ļûÖė$Ė´NÎ ŋ ^ŨŨwĻ}vr$‰î85~x u8<§3ņqZxëęžÃēf;ĩgsŪØhŒ“5l×c_Šø#Ģ6F—ØSņ“–īģ?íŗĶŋ­tĢYgĒäô;qŅÄ­æ§|tū×e!—ŧ[Éņãg öQŨ¤>/vu,ŸĖÎîžgĐg¤‹% 5f:œcũũ#YÃ97{ËÃĸ*௓ņGĖâ] ö2ØŊŒÚĮ^g7Evö÷<‡öXé{kŽ/a<įĸ2SM×#nwÖ!Ėįq‡ōŽ…R7”†Ų_ÄVĮZÎ jČŊ™?s.ĪĻŗm”‘číōÎÅ*'v¯îčp5Šú>ų†ëfėžĪūZ§„(ĨŖ­WÉ9ļ‘BÖ´Ä06?G™×ēûžB{lŒ‘:Záķcū¯ĮD¯ģ˙=Įŗû›fđ_îeˆÆūzˇ˜ČKw,)ŧ*îâEæw>…vŨpüąšžäøÍĪ]ļ›íķôŧ uąäđÁLW˛ēߋ“äé! ū§ĩŌĢdöđ ŗē‚kģŸ@ᨧŗ`Ž/94›éØĮ^›w§§y”Ũ+Ø)#0w×ah×ëcø}Å"‹œ­Ī"Aļ+Û˙ ÚוđdĖî:Ũ$FYžĮ˜Ũ9fîS˙Ų¯Ë“÷Ė\ŠąĪëdŗwč6vDHąObKWyܝvY§oŽlļߗŋČ͟9Få¯ĮĩŖË5ČĮŒnŋR“&+.’ķĐúŒ˜eŧ°Ģĩ|X‡"+ēŌ§HKgQĀ“ÕãrÚc÷”>Cē’tŦ-ß<ēmÆÛcße:ëĢŌØ ĸĪÅrĩ8!‡îŠX×qŦĢTõūÛMcĪwĸ=Ö1ī,ú}ÉąĮŪU2n2o˜ŽwD“;ĢëkŌđ˟ŠšÃŪO˛Ŋũgą`A2›5˙Š”ž˙îDûē|ÆĖ™;ŅXj1ņäŽØ÷ôų6e9]ëČ;¤Ę*™áĘ:C~F°ŊZĒüõĢ5ĒäŧÚí߲>ĪŽ÷îB{l“eų1‹%‡v¨%ƄEIęĸ×ŪM˛ŦîîČå!¯^5 ×õsÕ+[Ŋk]GL‘–{ųŨ›öZæqãw ˇcî–Qņb¤O0œûÛq§Čfy]“Ž=é‚ĢđŽËz ~ĄÔc?V¨_ģ:Úģ*ŋ"ģĮņÎ4gë=b´Xšãpî6[<ų1æģĨīQ­ŨˇΟ^ŋĄĮxGˆ˜ ‹û–§Œ9ĢioÆâĶ\Õ×ö÷ųŪ—ÖėÂ>Ô÷ĶLÕJ~K°kņ2ŸI—;îÛ,ZŸÁÆcƒå*Gí#Ũˇ*ī;Ō.Ģ*į{”•ūS¸˙xŋ>ŸOÜoĮ¯Kší 92ƒåžÜc2Î^ŖąDĮFŪl,Ēä}Їq^íGÚëÜÉ8YžFŗVá)_ÉđyV†­9uH:Įh¯C˛Ū­ŗß[m÷Îa0ĮoŦ1Ũĩ`=ĘŦn=Taol4Ķžß—Ŧõ‡W§›ēÛ\ĩœuwlųŽ9_#OĪįžnߠǝŖ>¤‡%īŒãáYÎ×bÅāĨĪ*šzȗj;Īķę\kŌ“Ŗu~Uü†;"N•Ŋ3g˜=ƒøŧ.įäÉčzãTÕ1ëĪëōĒ|žŦä\e5jČY9Ęŗ€F{dAē§īhŽ?¸åķ3ōŋķ Ôŗx^t¤ėöČTÕŊbįjŪ‰ĸžZĪjDĀ56ÚĮ_Û¯ČŊgdgī[āáBFV¯kįY†¯wņĘ֌ŋΒ?įÁąĨ/īŦŧu|˜uyåä˛2<ņđҟë(ûÛŠ0ü–Yá}Ž­zßZΡJķįÜÕižO`ŧÎÃDĖŪŽVLŌU{Šam}į,žõäháĮŅFQ˙•2‹ßÖFœąŊÎ÷(īēœ3Ŧšf†ÍŌaņ>~ĩų,ahĸWi4ąąėÉģbœe˙ŪYŒ™ŧޞ~ķ@ŒĐëcŊĶŪwFÄĨĻĩ¯Ü7ĒK˛3‘Ėûаj'ĪĘlKŸ#šØur‡ŽVīĻĶ×ō“TËÂ’Dķ^5ŦËÅS"Ū…xĻo=#—íx­ū#{ōŨœc>ęûņNtX˛ģ[ÎįúQW†,2cŦˇëĸ‰´([ŋsŪ~ˇ¯Ėdg‹ĪEcƒägërüJūv ëM|-|\ˆČG!rO íÛ}\ķšn_"m™Öz ŖÕąķ Īė Ėŋ^P•āŊIÎq%p”āčĻ×Ú7ŊŌöē/ņŅ"Žû؆ĮhĩÍÎ{ĶaÉn‹âČÄ+ø.Ž"Lo‹cUĮÎ+G;‡ęĘ.iŋŽ_ÄuŸS܍šcsö˙ãļ†YįÁŸ3Úõ>éÎ([uÕ ›Ąs°$“×Ëq™ģ:—ŊĶŽa%Ôä^5ΨY„ŨÚ{ūRŠŽ_ŋū=~Ū;J˛—FodžŠ`!C€ˆ_„g–Sîŋ{ĐYXâņ›ÃŽ&^_âĄIßÖëÆ9>ík31OVK՟ŧƒ”ģ=ÔC|Ņį‚î•dâ ¯Ēc/ä46āNOfMƒûаë ŪŅhK4āo&ŖÜ“]_ũ9ĒvdjĮ]’/īKēčlWŽZÕŨ {cŠF´¨~ũĒöuí’î`*ëp/:Ģ/Ų‹%ļ >Ū+55ĸ,ß+r¯į:nĖXĄīŠč‘\;ÍSjWĶe˚EDąŋŨæcĘE>œ_nų=č°åSÉ,–xhÂečQģŋÁkĮ9;QŲs•ŗ=õ=$‘ÕRÕõŌųĮ{Ę1'‘‡×pŊūcí:¤qÍ"ŪŦ÷ĸa˝ Ī ô`îĪcÅøŧjrõŽĖÚëĮ7÷XmŨ‡;m7gņĨÖri<Œ7ëft%Ë÷ųúÍwŖEĒũĖ3hØrŽU’ĢĖ)7–ų„hâī‰8ų{ŨËįŠ^]$aø÷%ļW`ÚVŦŅR‡>žV˛VcącrК3ņđDëÅå>„ą;C‚=ģt,"écˇ×›°=œūe]1Ęõšč労˜×Ŧ­j{úŽŅÁˇf\mßüÎÄâ ĢŲē×l—jRA;ûč>äeÁ^ŗg¤ôļũQĮ2,Ņüīá8khč[†&~íX™YfŲzōpcčaĢ”uŪlė/Vų>Y$Ģ ÉsûmĪ™hR]aõAĪã¯åeĮŖ=ölŊv”‡Ļ‘–Ÿ3Ņ(’c JķŖÂĮl]i,×OXŗr¯ŦS^Ãą/tĨWˆc+Z•sy­Ų“Į¨ĒÁđŦ3›ã^†rŪz9>˛ãФũ€ēËuū~ô„ô{„ŦŖŦŅZpŋĸ.vö%:+xuö*ļ˛ßްa¸ņ¸nžÍ’ũsĨÚ,ąã_}ú' ‡L‡{t#˙ČÖĻ==|a5Ĩs:F’¸~:~ŗČíÆĒCüŌÕmk5×-Žx‹q?bŊåķŠhw'>8Ū÷qÎ%ëa~0īsÔaöT,‘¨ÕĩīÛäį"ŽVģV¯9ļh‰údōŅžkâ¯ļšÔQ âíU¸ŸƒÕž$âûįž4üpŧW‡,’M|Nųi§Oŧ{QT%r&ķĖė78’Œúãzx:0‰ĩ5ļ#ÉĒ?â]ácO=™’äšœix/˛vUíÛé…Ęi#uŋ–S GöÛđzŧÛljÎ=ôĪ‚ØŨÜāĪ\Kö—i×Eę^'ŠĢÆ ŽĪ˙ø<¸#a\ާīéå>õûÉs­ŲOÚÖOžzk4nŒyīŧõN_&ŅCyĖZ++ĒTûžy˛‚%h|ķũ$uÍ9?…¤5ãų36Z_Fž˙›Ŗs7’wßčaūąŧĩ~Е9ÆlĘ5 ?lŨÔ3GĮĪÎđqÔĢ:ʘš'}Ō#hģŠ•ž¤ĸįŊˆĄéw3ō5jÉvįÉ}Éú+:ŗŌv Ū¨ô˛íKô.-1î7šyĢteę¯îŗŗüâ5.Ÿŧîƒũ—! ĸáSČf fæë<4§kœ÷Pæiq;ˆõ(Ü+˛r<„ˆÎ\ÄģŪęiøāqąÖī~­Fūōƒ3ųeŦ¯đtŽ)ŌöN4ü€§›\Á,ÎΜ3HębĩŌsš ÷$mÖ7ķŠÜĨ3_îõëÁëė:”ŒŨŗÅG­w|Ö×jĶŽÍšÕ{Œ‚ĪQ>EúŪ‹lŦūŪ0c{1›ÕĸļNį˛Ö‘¯{FÄ;ŧu%Ŗ Y˜dOw;ęÕĪ ?“P–ä“G’ú[!‘î‰īNēúØ9ƐdėŅīž ™{vŽîQ5Æ˙YQ„'ũČM9^Eˆę;­ņüņ´ŒÆķĘ̜`VĘ^b=jSÃËõYYzØõ÷|ŒņžÄžx9Œ9΃5É^lЂį‘íģ˜÷GDųĮ;Â Ū—øx‚záßšē=42uޞ9‹ŲŽXÖĐ5˛æn„Ũ‡wVũũÖ댊˛J˛žAgē§åXáEHŸsĪ#é{Ũ•ØšõąĀrȑĢIŸ :6¨ ŗƒįŽ´&ŽÅØG+ÄmÖĪ:Θžšų|G~bįķ)?īĐĮšŋ'YÎō•r•§gF‰ûÖZÍОŸ:Îrm ĶÚ>YÍę5˜û§Kč˙´B?r­3$ôOģë>ô8CšĪ$ë=O˛õĸaĪRË˙Yqą$íĩҐë0ßå(ī<ėNžĢAëåÅ;ĘĪĪv$ũ}IüŅXŽī­;“ß“ Vëq­gŧØyš•ŐĮūŸ\—´/™d<ūŪJčŽ|ˇÅÄ-OoųĻu­Pî“7ģ}šÛuėD>…8ŠČŸ˜ŠQÖ+4˙ųØŲũgzæš$ũa=Ā"Å·ŧ a¨#ëO…8"lN[E?ķĮ\> +ĸ~ÃÛīĪûZ=IđTúaįÎxĶŖcŋ‡"r†ųYrō‰ÍŸí›ĢRä…cÄFT>ų'€×āy ÷ą8*x^ÅuW‹sœ!Y.YŒÄõÆŧšŽü'Ņa‘w‚ Ûųųe­AžÚ›ėLČcô9/]‰âlôĸ5æę¸áE“y^Ÿ‘öL[ŦąZŒũŗĻ˛ wø˜Ás5’ųņŪ”į›Í§ąŊmy2ôņ|ËãäEä)Žę>BTĸoĢIb‡˙ėÛā!Gû*¤OĘ|m ,ļú™Hĸ­byTΞ8Oõ¨ökžU<"ŋGÜÛrg´íHõÁę“ŲŅœ–Ä~Ģzyƒ2¤Į´÷øēŠ\Ī2įzÜīBŌ.‹8zŧŖ_5Į(O1Jshō Ī\“¤õĖŽËˇÁGžxŖe#ˇØ’~|;Yņ÷GąæĮ›”īiâeēôÖņû4vų'×X+˙ĸŊŗRōļ'\„$~ŧ~‘X|˜ˇ#×'1Į ŨađēĀHXDĘŅÄãīÉŗcō%Ō"Æ_Í˙y„>8Ǝ§8įŽQoÖv ­}Ī{ņūEbŨ†õE܁đ8ząķNX-†–gO'ēõ 项›•1šHęqŋIĪī*üÍGX,WųYĢevΘĪųæjÄ:œĪp?FˋG@VĶäā‘E­ŲNŽôH{Ď×8 /˙ä|rÖ1d`3ĖC¸ĘįTņēŽũMâŪÄ5ē˛ķî#ęG*udOĢķXÅ5ŽEÖJ›§hwtRF{Ŧ/õéggąĖÁZžĄ‡Ÿ<Ÿuâķß>é•̐‡ņč ŽáU‰âÜŠĸ˜j,ķŽ_Æ?×ĒJ=+y>Ę'ŽČœãsiØgĪ>< ĩ¯äžŊvDF`Há1üD¤3õodü•ëŽŋŦē{#Q<xÅImt¤ukqõrĄB,פöZ‡Č:šŸZák ĪĨáƒŋˇėŧō2žã3đŒAŌ_rWy(G”ĮŒĮãƒįƒ>™x4?#L[ĪL­Ũ‰85|Ęv¯fÃõiøFfЇ"˜?ė|ķ8ŲQŧäø/’ŦLô+b‹í°Sˆ#ŖĪmôŊWYɈK=ĸ<ę¤ģ/gyķs“#ō!Okôd’>:~1sĨWĸlôŊ¸„y'Ÿmü~›´ø){ß‘ŋ2*QY­ņõ•ˆry]â|뉯×ę<ĩsvˇŽ^/}ût:ėôđ‚{׹ĩ§)ú7Š’\û˄Y9ūĘz.B‰Œ‡­¨˜t…æĢsK;ü<†íœž‘ž5ŒÖģ0~O'i̇ąöŧęô$WîyÁß&õrŅ#Ādüe§Žō"¤sCjŗÍl‡Šx|ÄąëŧÕįÂâõlöz }Įŗ’õ%Üۖ7øį›ė9‡™gQdĖY4Ás΋´äīx?ÖāzŒæüXk},%ęēÉû“Œr[‘÷<ųģ3tôæm DhÂuY͈{‘īS–ŸĮ/?uūWDķ˙=īK˛ų‡§Ģ\'Wčõú9F{`ŦgŠjí!uíã4øqŦöeū*’ü#í֛ØķjüeÅ@"žũjū¨n=‹{“k9oŋCŠt>åúk¤ÜĶ“X.•ŪÁŸīô$ܖJ4ŸD܋ļ9V_vŽŲĶ‘Äz]ęqŽ­WĻŽũ•bķŨÆķ3Ş}>ísŌÅ{¨Í6§4!™Ô ō…'8úôī]T:)ˇO2ûPTÁyx{níõÅUÔî흄6“G*I` ŗqÉ˙ZšJÖz IčrÉlÍÄĢ´ŧ `Īųü}ĒÂYĀ…„i S’Ë–Ŋi~Ū"˜Ŧw1– |y ũN:vĻŊĘĖD_iŪ˂ õ'¸īQv]’%M5T‰•ÄåSgĨ2[;dÃK"ųŠ€Ā$sĶzUHĻ–/Üĩΐ¨s–?‡ŋáUgJžã%T˛ž@+ūí>y>ĸ˛/}‰~Ö#’Čw X’Į˙ŽŦÄV9æ $ašī×ß­aĨÍŨÚ˛˜"ÆĪ-ū*[ žrėÄg$ŒĐÛęwW¯pĄŽÍ&î |€*ŗËPx œuĒ×0ˌÅe"3– Gb˜RĪę$8{yPhÍ#,rÆG'8Pŧ }*ŧÆ™VĘ 3!cƒƒž?úßJĪ2,„É2€obü’1ŌŖ wģ˛)+.âšĮ_­4KfųUQpK6ŒmܑUŪūX' cO%ÆQu`&ˆŦ#Yds(˛=įęr( OåB›|å›î¨9íę})N&iÆžZWœƒĮ Ō¸ėCrøsk2@Ūäî ?ÆĒ4Oor†7‘”6ŋ9˙Ŋb#ĩÔgŽcà #€G˙[Ļ(ŋšŌy’ŪŲ7ŗer3ĩF=?Âļ…Ë ]4̏î|­č¸ßp]ΡS0T)$ūŋŊSŒË æc#4dއ?äVÂEŦ 4„xcYR ‰x×n~PÔÔĻ;h$ÜBâCs A‚ĄœācĢĨ𷉮ln­­ƒĨŊŖĖI™“qU$žĮzįNēF@č0?ĪĨ9%q5ŧO0ÆÛ™˜u=ŠĸmsŨõ­RÆĶÃ˛GĢÜŖĮ*•,F„ô}­x4ķÅmworY' ēÁ*r*ŨũÚ5Ėb(žØÂî?ĪoéPKitŠ×|RČ%ČÎG§nRV*Ūj‹qļˇWØį.[ČTH Ėæy0Äô'Ū¯éÖÁĸ킐Y‰ÁZ'šĪqmëiiG&“ɧ,Qypļį‰aåüŲ­I ÕĒČŦ7§ €~žĩNææúí@+ ‰pĪéĪŋnĩ~A˜X åV1“_˙]uÚu—‡/ô uWQ’æņC†Ži‰0ž‹ßq=ĮoʸWhpC•°0L×]áI|įũ~=ëŠļŅĄ•Dĸ5ķšPv“…Đ~t2ĸ‘I–SĪ%ŗ´K)uy1’N>v'ĻC>ϚĨÚÍp\XÆĀG;ZL÷ú…K¤ķÍöIĨx­Ŗ?ŧR۔žËŸéPø…„K…KēpŊ?/‹˛’OBöŠĒũ‘Eŧ6`¸]Č__j ŗ[ÍLm˜N*[O8U˙õkDŗ‘ígšš)+ųíZWĻM'M9VHU°cvËŖå?^Ɓúö˙f\ÅHŋxvŒ9,ÄgĄÆ Šz/l¯æ3EŽā†Ī’=‘8Ģēl°6ĢÍ܁nQČō› @O¯˙Z¯MZôĻG‘,ÃaԍĻfõŨ)ô#—SæÖmKLĩ ¨mö‚9ž9õ„ĐŽÕa•. ö֊NČÎÖã*s[sÚ-ÂųV˛,Ē|ÖpŽĀSíZv×vÖBČ1ŽDdä}T˙ÔS¸-ŽAį-ކ āĐnwJ˛š‰åģšØ„(e]ŸtœvũęáĶŌîčŨß#E'HåeÁęO¯ĩ-ŧ“Ė'€šŪ2<É#L}1ëî?­Mhdę6^Ũīƒh$y€s#Ūøõ4ē{K[š e–S#)qŌ0;‘éŪˇMũĒÁ ZF^`žZ'BŖ˜úÖ2˛\KqŖ‘rdČš‹;zŠę;͏ŒųėãÄSîšHÚŌI×qīéŪ¯ũõˤ¤C`&äÚē}0 Cdņę:ĨŅXͤŒĢž0Ø,ŖŒÄg¯áVbģō¯f7qĩ xÁÚG8ã¯åM KS6ŅåŌŧIivP>æÃÜNAÅzÕĘZ^éč×*É Ų.G×ĩyFϰˆEČ$2ĘąÁúöΕk]Ísâg´Ķ-ÚVŅF^@'ĸũ8ÉúQ{čĢŦ6›sŽųļzû0%co/rŒuųģįœVũŗÚtģSmzW"íà VĸhVļK kgä)+Č<æ¨ĪlēvŦ–vá"†áLĄ@ÃŽëKšáČÖĨ/ėš~ČÚä3¨ųžž˙ZĒ4IáÕ-¤kŌ1¸äãéÛēöŽļ‚2ų <ļ_zĄ41}žÎpāą @'šĶüúR]萤Æė]¨M˜‘ŲQT:úįĻ)ÎÖōD‹g¨J°Üƒ/ãĮÛ¨ÖûTŗĶÎâŠMĖ€ŸNü˙¯­.ĸĐEqϚŦ¸xĶ+ŽųãœûJ$CöE´u/}<ŒrãnÆsŽ*FHÄdģD‹ģĘ#?,ķIĨÃĢ0„Ä2FɟnqĶ9ĪĩZšÕØ(}ĀczsÔū´jDž î}Jđ†É¸1ĻķŒ(éūMIâ;HtâîŅdû@•Čnd,prO^šJ§Ŗ\Ëáé5%Üļ2ŋ˜~đ#ŠĢŽøŽÛ^Š-?Oˇ¸!åGœēí‚8žüŌÖå+r‘:NÖ˛šš@ÄĸFÉõĪoūĩI$BHDr^HH• Ž=?^”ŨnIbšg'ž6rÄî™č*Ôžš[pSWšäå˛šúQq(ß  ^Í™ÆNTzœ`b˛ĩ('ķ,íĄŧ¸3O1]ĀŠÉ<`sZvSŪÚęiĻjĢŗF^9bÎ3Ô~kVÅ- ŧļp'´˜K|áˆÆW˙­FŖ´QĄmáK+HÄog2^DÜÄwæ°|K ÚC OiĮ7š1ą¤'ļ­jŸÃ,/äYÜIxW lP‚ûŨ1īQAíÅÜ:žŗ.2D0"ác­jÂOS/íēúi­ĻIĶūė@Ī<Ѝ3ōR:žĮJÔ4ë(­ÄA”„˙^ĸŦéVēƒ\I#HâI|ÂXāČÜņõ­[™"ŠCFĮ$āmÉĄĘÛ +­L'ûTzÔx¤–4;É)võ?ZœéđÚK–Ļ"ˇffō6ãnO![ˇåO }zaš€Š0 € ã¯˙Žĸ×/n_U‹OļvY.°Ĩ‘yI~'Ĩ4ÄŅsJ˛k8ĘÂmX †;˛AũzՇûAXI0+6•rHon9īÅ9<n É{u j3ļ'ĀfîXúÖ}´÷:v´ÚUԆd!dļ|āāuVëūGĨ2DÕíZ(~ƒ g*Y[ ŽIāc™ĨęzŽb4{&{ŗ ˙ŖÉ0ĘIÆsĶ+CZž_ˇië! žāãOųÍÉ2ÜŠķ^¤cü⥲â҆ī¨ę÷č÷öŌ[ÛÄá’Ū6āŨ›¯éWįbņvˇŠŨ‘Â4Ŧ6‰9ęzg§_ZšėÉį9É. $Š[čžũØÆ%„_zåOŠ&ŲŖ˛e/=´wÖS[´Oy ã`KŠāũÜô÷̎Gėšeđ†#,¤ĻHü1íU­lāĶåX`‚4Xœmäž;õĮãSjrƚSŧr8?xyÛĩ4õąNÚ×7–Aēá@,Ÿō*í”ęĘÅY0*ŖƒĪZ‚Ty!@ĘŦā Ų8 ŠĶŠ&T2.Ĩ#ŠW¸kÔÁš‘^åÂ"‚NāųĪų˙ëŌHĒÍË`Ž Ą?OJšņŌ;—"îĖvF9˙ СąMđ ˆq$€ĒqĀĮ~ô&9­JxžâéËå#„AÎîĩĩĸŪ΅ar[ŸŌŦŪiv‘ÜČņÄį-‚sƒžhģŌĄEY 2ÆęŨd˛R0š!ApzãîöĒfD˛ēÍ0Pq÷†ŌĐâŸ08[s>ę}FĘ,dH >b āsœķÅMĨjrßŨĒAƒ#.“Ŗžŋˊš][NHÂŊÜH-“ŽkŽ q&Ō›ä,ā¤}~ŊĒãQĞ[ėué¨Åg1ŗ‚9g™q¸Æģ€ĪŠŽ›AœVȕdĶ(ÐIŽzÂķRđÚĘa°V×4žd-—SÆA_­iiZÕū̝ØãL š|˛.áĀ<Ō•E$Í ­c×hĸŠä;O–å•Ví¤ä•faŒį §ôõ̚>Ÿ¨k˛8ąu ÃI!ŠÉÎ{ãšÁķŖ6U,v`äuūu{Kŋŋ´•¤ą—ČŽ@A2.N Ít%ŠäËUĄ×[h2ięu cSŽhâRv),sÁ-ü†kŒ–)Ž¯Ļ‹ų*Ŗp^ŦOŠæ´î‚ŪGįj­ÖôÍų=OĘĄąw—qË XÔŖŠĻ×@ŠeY4q"¨ŽŲ•FŪ=ûÕk‹gĶ'Fˆyiq•tĄöĮÖē™ļĪŗyQ…ĀëĮįX—ōÃĒ]#ÚHÆ+v —ŗÔã°ÖĻåō‰8D!L€Ŧ˜2ŋ'üŠĄöGco’e%ąä“Å]‘ ģ[p,‰|`Æ3ūÂĻ՚†ÚXPæŪB­ÆGc×ü(¸X“ėP7úą€ ĮĄā*Ĕ(͌`įš•ĻYĖ3ÅlŽ$Ī%đ#ÛZŠ<:8c¤•ÉĮü)‚˛bi$đˇ’Tj438Rúø5^ãEž×SžŪā Ž9 "¨Ę0ãŸĻ=jmV>&YáC:ÄĪ—!›Ë­høĻŗš'šRŌÜķI<ãœāzcjd[Ū0€\IŽLBœķøb›p-­šbYŒM°=sS‰¤†–ÖÁÜŒ1ĸŊšK‹0KЊ@ d˙õqKR‹ĶĘņÚî0Œ1–ÁųOÄzV•–,ą‚æIÍ`¨{{L—y"V!Î͌ķŠĶ:ŠĄM˛āķڎ€ŧÉĩ8ésyŒ•#‚OŌąĻd{ ;ĖŪČ Š sßōŠnn^ôíų+Ë9č~•ZčKw–(ęŠxÆ3úĶtQŧH6û”‚Dm’ŊF“ˆ÷ģÜđŽBã­rŅj˛E Â# $mœ¯ËĪ=jė—úė oX#e82HúŌ°ËŅukŧđ¸˜/žžÕ1teቜ@ČÉ˙õÕ Ieŗ@%ōÁ%›õ4øQ˜ĩĘ ubLa2IΧųí@Ց+3, 2X}íų'9¨–äŧ[âbFHČ9ķNšę-‡’ÎS5KL‰ŨW>|Q™2HL)^xúũh –ŽÄw¨D°  æĪJލ €„’ ž•Ģs(íĸØåIÚ2HÆ1Ÿ\ŌĪc É1Ėy$¸€2ƒ1$)$œÔķęzš›{hoî Š@Ų-!ĀņŽ•3}†,Īxë ÜŒqĶŽsYR]Íp’ÃmMm–] ¨Ī>´Đˆol~ˤųåä`6¯r*If0ڔUû”Ÿ­>ÕácƒƒŊNIĪÚĨ–ĶíM‘ļJ|Í×iô — ‹,Øpg‘˙ęĮŊSģļ´ $Č2¯EČķZ1MiĩU5`2I~F:˙úĒŌAär(ōŪ6\1FÎ Å!¤giņÁ1LŠēB3ČĪ4ÍVEtXɈ@@'§NßįôŠmí¯­G’#ØėpAæ‰íŨŽãšúT.NEČš.>QštŽ÷ķīuF8 HĀ‘øUÆcĸĘöaUÃCÃ)SČÁčRhļV7zĖąŨŨũ™Y#Âą§ąŽSđūŽēT¯ üW2(,!iT–#œų>ÕVl™Ę\j*ĨT3ĖÄåT PZ_ĖB]˜ąĪœTɧ•RETfÆFŸæjš• ųm´įžy¤Đ\ŅKHdff“Ą9˜@W‘¤e8Đ`R!Ũ䜃´rIĨ‚7ŧÔZ)TypÅį'Ū’*NËBŦ°j!0ģ!8*„ã"‚árš•dųԌ€FĪĩpB¸ @uÖX ?ڙ7 Ĩ˛0I‚o}ČíĨ5)i<ĸҁžäzįüæ™{w0†MōĶŪ­ĪĻFę՘Á=ŋúõVâŌ- ˛8žUŠÜ~ŸãEƐ A§í“+o`ä6 đöĒéæÛXĮ$ČI1(į÷?Ξ!ŧēōö$HBķķÅKgv•ĻSįÆJš ũ()ÚwŲ|Á!ÜY‰lnäņøŠŠkosiæĸÄ[1ŽzVåqel%-ĩŲÁP@$ŸaũiŅ]-ԋ#$Œ ëBGUāĨk8LRho¸í"Č9Æ[ €sČŦŽũjõ>QWGÚG'ūŊhčū)Õôu‚ÎŗÂĒE($ Ät=G5ĨĢø;ZÕ&ģÔõ) ĖeļBwÂõœÕ-UˆØãnDfŲ¤$aŽ:œÕ!\ZÄ^!¸¤‚ \K8aU*ĀĒŽlâĨō‘!‘ŅƒĨˆ9ÉëHŊČm•mȍUTžq“U™™/ĨŒC‡ ;ôũOecÄQÜ\žæ“’O?–=ąP:-‹ąfā-ˇ¨¤߇í–ãVŠ)¯˙ŗk¤ąÆ äc8Ž‹Å0Y-ēCĢI¨ŨŠÁf0lãĶ€:täūÍé–sęķ2XÂ×0$ /Aū{Wcņvĩc%™°X-ŖPˆ%ąŽq“ôĒZŪģœL°Ô-ãŽčÛæ ãķĢésö s3íų>TDã$įķŦíYŪĪW†B˛G˜Ų!¨åģwžÄíRŲļiXĢ›pO{jĐjōąŒ°YR5ȍ{qę+J[)]Žg•E“Ä|Š‚‚¸Įčxę}ë6[ĩyra Ë&8í˙ëÍCĸj];ėLÄât@ũ–dņMX/cģ·‘a8]¸ÁT-Øõ=kWˇ´ĶĨ€-98V•ũãôĪæk¯ûŦZ;ĖmÔm&F‘A.HΧ$ū5Äęs,rÉ:ÂRæoõ`ˇĖ 9˙"†]Ŧ:Ō šŽŒw—PA ] œ|ÅŗÁÉö¨ÛÃWÎ%˜_íÚXĒ\Ä)õô$UM6ė[Ū0žv:}ÙÁŲûŗ/={‘žßJĐÔüMC:Yŗ\Îųۄ sÜû Ģ Q'°sež,‘Į‹– ¸Ķhú÷Z–})b˙IŪ–ÅDˆÚ=ķÛÚĒéZuƒø_íNâcæ9ģPP“ĪQüCž QŌ%žÕR7”´Öņąb…°ĖyĮ×k6ĘQ%Bšv­ũĄtŦh’ã%ē‚2:‚}ĒîkėōKƟe"'cŽ­čĩS×g[ŨZŪÚ'e2%ĪGSVŌ(­-6Û.˙p•ԏ@:ŌžŖĩ•Čĩ[øæQairH@ČĘDŊ2{p=)l`M6ÆT…ÖX؞Ă$ŨÔũE`[_x¤•ã&%cžpyķ÷}kGÃŲÔŽĨw` D~áŽųúP›¸ä’ކcË­|×7–Ģå–ŒgkĐœ~U˛úN“i§ÜK ÜÄÅv‚’IጠQĶ–ŪÖ[v;¨ į=1Ū­Ø8f¯˛ķa‚Ē€Q?Ũę úŌģ`íkŖž:jÛŖÜ^BŪfĐWĖbĀū'ŋŽk Öôû;:Ú@$• j ųX““ˇéū{Ķu9dkY!‚ĐČŌ)ŒdîëVŦ´÷˛Ņšy'įÚy9 šjúgŌ„ ˇc›ģŌî­š…ķÜÉQ›$Aۃ[ÖP˙mZÜ]^NL‘ŗĄÎ"9ĻIöéTæģ„H.•ÂÁj#Ã?Î+ioėĨŅA3Ēn šãORhI•'ta_^ÜÆÖķ]—’ä8āį¯Š÷¨‚K›Y5[Ё1eŖRAPŖ?b3ôŦĖßnŽ}AÛėęā#N?ˆ‡ûUۛa}3$P“ŸE”úqüÅļâßDSĐ­¤×&7wCĖŲÁ^Hč6ũ;Ô2ß\¤÷v0´“ÚÁ+*\–TãƒëŽ™Šā€ ¸4ØnŽ ƒ%žØ•*šÉáģ‚{VęØÃg<Â9ÄJ3€ËĮCŸŌ‡¨×ēîCæÛÃϧ’QaŧōH÷ü}*4ŋ‚G€ę~ZŗÖņX~cŽ‡ÚŠęąŗZũŊdAooe€Œ¤¤sķ/įĩhé^Ō2˙Ļ\(’K†QƒžzôéÚĢb/uc5ĩˇÂÖöŌI,!°ō!ã^x#ø\´š† 2X­NHáBž÷úНâ TŅ&´ŧŗĢ™vLŖīH? ģajíSܔ,ā„hņ…_͝|Đ†ė•ŒK==ĩģ†i$hŖ@RY—†÷§Ę?ZۈũŠĩDCmũä–醏áᓸÖzĘč—÷ļŌ6aÄ‹8]čšÆsŒãœÖ˛k:riŽĐÜF`ÜŜ9äū<ķS­Í-m¯^Ø>­§\Bš†2Ņ9LŒ§έ4˛ŊęHŠƒĘŒô{3{ú Č6˙ۗņÜlKhBūčĒrNzŸojˇŠ%Ė -Šo26¤¸E,Qy#׌qURšēWK8.Ĩs’-ÔíyāHūžœŗáK¸´Ę&Ņ$PQ›•Ę‚éÔÖ-õäØ,l¤Á€ ÆO`z<9å%ŠíČ‚Qųõ'>‡Ō„î§ÉĒgĢ\ë°Ü*ŦMōÃF3ĪŌšģ‹–Õ5Ģkģd& pQXÎÄš… ( p9úûP‰œ/k2ķģĀ€ČĮ#8ŽgVš•ĩëXlãInYYIڋ¸ųÕšímļ—ŌËpr’‘Æ=ģsîO͊‹Hšą˛Öŧ-ĘĖėĄŽZLô#đâŸBhˇ?…ĩ+ģˆī'ÔĩĘ @ LņĪëMm.ûIšĘØN'ˇ¸rŗ1\ÉŋîĪ|ķÖēæ™“~@szėqq§Ã”+pXüܐņBģ-¤–ƒgá ^R[,ΜķŠ%€Ü".!( 3ė šd’_ˆ!O åøÕ”0˛Ē@2@úcž´8´B![{GÆT¯ (§ųņPÅ LĻHâM§§cžz˙õÍ^ŽŲEŗËpHČŌ˛ĩ—{-2âá\(=@$šVc˛ÜŖ¯ÃjĘcq q0‰gąqW“Åš•Œ"­ I¤\’3šúÔˇžĩ‡ÃŌĢȍ#Æ%’ę^NîšīĮn*ĩ­ķŨÛZÆņ„š–2KBîņī׎R”ŦČ ˇZĩúę×1‹G˜ĄļRKÎI÷<Õ¸ĸ™Š’Ļā& >ƒķ­âĩŠUa+¨Ë z +Ģ3oîې;ƒ˙Ö§ĘÉē"DúåøŅĢ1#æôÆzqéQę3yQ6÷\‘Č'üûwĻØ¤ÉĒę\ē4hŽI“TüSuemc\æI$pR06ī#ŸÃf“ˆ&ú´ë%‚/1”ōĮ× ã9Āí“VļÁ¸¤I$p@į­IŖ?ąĄpâWųÜu;ŗžĩ ÜĢ Lō0$*ôĮų5.-•–æuĄ‡ûrį P‹ĀÁ#úНsrē?‰ÆĄ}†E1:)pOų5wNÍ¨^ŗ# T¨Éxũ=kFk¨Q‘\p ĶÖĒĖWBËãk;… §Ų_\JIÚ^?-ՏjŠ“Ī|u+éPŨ†cŒü‘L÷>ôž˛ž›Ŗxæc!&(ČÂF<ũMCs ­Ū´/tō;|%ÉHI÷1ĐãŠ`jęQĩŒ6kœI4L s¸ąYF09ĒzÆĸ–ēŊœRG¸ē90׎´Šu 4Öģ#v ‘“rq“ĮTØ.ˆ')ws"’%Y˜;vâ´æÚÎ?:yDq¨™ô¤œ‰nĨÄC*‚ĮĄåĪJ§á+4Õg—Tģ!æ ˆŦc$tõâ’w1 6×Ō™-ÁČb¤Šĩ;rēK…nõ?•Gâ4M;_ąŋŠ=†V1͎'‘Æy9ü)Ú´ĖtÖ;B9`ŖWh!ŗÁõ˙=ũęˇ3ģZ3ņ\Ė]Õˇķ7LV–Ŗs5Žž6´lŒ'5P¸™ä’WS–#†“üę{ÛĶ5—’ĒB€I䟧ĨgÍ$ÎnX,¤™-ĸ‰?w€ĨEej—WĘ"]#ɐŋ#đC)i§hã;#‡ŒĶ5ŖĨĪƒ´SO&Ûäîxūuh–ÛZšÁi šŸąÅ“Ô„į5^ŝBƯŊĀU?ĪôŠnaÔ];ģ6Ž4ÁF ¸ß=]Ō  4d •¸äƒŌ“vbJėŌ2ũŸL2ˆĐ3ą'Ÿák=GWÕ,õW• ĩhņ[ŠÚÎĄ‡,{ũ*‰Ž´ÛčrD‘ˇ†įŽáũÜ7ŸōâheōŠ!”˙\ƒSÔŅ™EVgaō|ގװZŒBŗė§ųV)ëŽ"#ŖGå.ļGøVü–Å”´d‰ųGBF{gĨtŗËE˛Äb´9Q?xŽ;úVT öˆb‘ƒÄcŒ‘9&ĩĩ6örUÛĀÜĮōekso*ÆPFNđؒ?ß­!ŊÅĂ+Ģ–uF (ķeĻęÜí p+BXgļŽęq$N@9uo™[Œvāũ*Ū•i ZÃō9˜‚䏘žũ:įë@Ú2-.žëÜ;U“åp8į?į5uœ#1ÔÆ#Č 29č1ëõöĢķĸO ÔR0$ sŒ`ŸĐâŗ4č^âÔÆĻ14 ,ƒ8î ļš\éRÚēÉm<°ī •<˙רãŗ7–íqstîUˆec>•-ŨÅÜëģfšBQÆrĒ3ÉãNŗŌîaķsšJ€N;ãÛ4\L͞tĶîc’Īj$à vüšéUĸ•ĩ‹éu Ųĸ"3åÅ\€ŧô˙=ęytæK9ŊĶ6K–<žŧg°5‘Rčņ´(–VP¯>´\ōņ3ąōĨ0 !Q•ŦĢš'a=ģ$Hc8\9=:VôžR2ĸ’4s Ā'Ú˛a5+Ûšå .Áƒ´gü)ÜVe‹X [U’`ÅT)ÚĮ‘ĶĩUš°°O,‡ ĖIe' žŧR9[‹ÅQ‘UA]ܖ=ˇzãÖŦEoÜÅļ‘*ČeŸ^)ŗŦ t‰ä.ī˜ôúVt˛ŧåc;ŧrÕŊ%“É Áo?+š@”65Ėk JIh…Ęm˰^ķĶëQŖ8–(‘eHŲIQC.3튷 ģËnneeBí•V8b>œņū&ŦΏ”šTw(Ux+‘Ī´Ës/LąŠöãíR#yjquԞj]z%ƒHÛ2¸ FžŋáZ~u}%9$ũÚå•W€y¨u‹¸žĖi°¯›s,˜PÃ%Į_ņĸú‚•ÄĐ­nQVAkæ0|Ã7$I>Õ,ąęrÍ"Ž›Ŗ´—āŽiÚd:l֖öūPiIķD˜åGSœöāWLņĮ î3üĘsĩzŸĨ&ĘQĐķíFˇ×tøî㎠XãåÎH˙üôâļ×L;Zi´ø¯œUšmØÁ°?¤¯ą2i#Ëa–æEļ´…rđŊ cú÷Å[•Žĸ•ėãeÚ@ä~uĐkpiļú”FÎ ¸S‡B˜Rx úg=ꆓyn-ĨŠģiH3†Ļôd­JpÛE0Ą‡ ƒšGˇšĘWh-ŠH§ƒnzÕšõ{e“bÄŌö¨°9Īæk)īįxO‚ōŠĐģzŸ§Ĩ!ė\1OM4ŗ*DI)ƒôĒ—2ũĸXŊČ|‡‚4l‘æ pÆBI##?J}ͤFĢnČíĀ*2hØWše Ú!%Åē凂:rj]VĘ˙HēŽîí)‚ #lƒ™Hāũj…š˜Į,%b3+by,?Îk¸ģŗ}cÓZil¯F3c1ËĀëŽQP}ũiĨq3eŽå"ģ_1ų‡˜B‘NŊëSą’É–æ9ŖŽ[ĪõīÚ¯3Ü$1Âđė1€Ž$\`ƒĮĩ2[O1šY —`ŽOˇjEXA,ĸ=ŌÉōžáE@å­ĩ9YDŗ@ ŒōŠlް@Ōm!øŨÎ}kWNŗ‹ėHUrIv>Ļ’ĶQīĄœ.šádŠ1,,8g“¨'ÚŦÚØB–í{†$€Ã8^{ņīUõIŖļē‚HÎf* Ą ׯáNĩŋ•āf1Ƒą'ļ€?Îh› BßĩŨĒyŽAP“.āÛĻߎk,_ÜjúåūŖvųšU*ĄFĐĢÆ1éŪŽÅt—Ē )Ū€HlúĢ:öÆ Ų§Wt˜cįŊ[°čĸH6É>áāō~•B؉.¯&]é¸ †=jėZhke’k™%]Ą‚–ëŌŦEhZÕą€€ņž(š62ôø ūf ėNŌV2íņĢZē*å@Ø@Ŧr:õĒ"¸ļRąlhY‹mgۃO6R´\ĖŦÄeûŖüũ)ŖĨÃĻZjŅÍŠZË{d–ˆHF=ũū•kÄڅå⮖g´ŗX‚I6Ģõ<¯éĪ?•dŨ*+T㞀kyô=2ËͨĪĒÃtáŽ9ÃžŪ§ōĄ2mŠÎÅj—‚MŌ„ Ĩ‰ãŽĪô¨>ÉĐ•Ø’ÎvĮZŌļKR6yh,GOjŠPņ[篍KrŸéHĢXÎĶö@ŌÚšČ2 ä˙8Šî­`k‰!QˆĮĖŦO^ĩQ,ŅI"dĢûļÜūĘēI4;iJ“$ĀÛÃGåM&öŽfxO[ ŪÜÂģ0‘ÆU”gō?ã^´|{Ą}f[ŦͰ2ÛĒæBÜņ˙×é\-—…téÚÁqpY‰V\c‘éV…4Č.d™Žn€€rƒĮĻ“™ËøĒOí}BMBBVyļdc ĒvÖV×ÖŅgĖBĘT’U˙ZĐÖJĮ|Ë“ųēFē}n*†‹+yAUŠÍ´Ā=čl6—¯7—uuē00LcĮŊKmoe06‘™P΄‚`z~Ąšé4Š,d›qrc Ø遃øÕ Í­vCpæ7–=ķHī´mÉųņ˙<ÖļwœĐŦ!Övm¤ÉđëIŽŨÆ˛G{4ėąŒ1ĐķųŌNëBօK(­m´á2ȅŽĀ[!œņ€:dûV<ē[ ö7Đ]–,ą–ĘsĐ uģŖCo}3\Ȍģŧ˜ÁĀLã'ëõĢZîÔUķ!Yƒ(XšõãķÍKeĩĩŒĶÛÃĻÜČŅĀŽĖN2~ņúö­Ciž‘´q‘3|ŽüĮú`jm&9lm'œ ”IË7Ļx4ļ– Ģöâø* J~TžŊĒÁYÜ­ĢčÖVPĮqu;†ig–céU´ #û-ė#BUf J¨įūŋøSõRˇ÷Ww;¤R„û;ņœ˙ŋˇĩtiļíÚÎŪ&Ę HęÄcäÔm¸;ŊáŊüIĻÄdųíāųUíNO×ĩZģŌS@Ö­L,Ū~a1ÜëĐįũĄÛÚ˛ ļŸŦßKŖ]$1*~ôšáęsZē5V›P’I/Ū,ĒHāv¯JiŲ„—ēMŽœķŦ×NŗLX„]ØXĪ?N}ÍjƚtŠ-‚)ہĻrW?wwëĒB‹Ë3qŒdõĪ_aV,.Ž•Ŗ™wã%˜ō9÷ãŋ¯v;+!nâ:i™ Ün0 ȐŸ§>ÆŦčÖâ÷O\ÄZA’°ÂęGsüŊ+5‹›€#O6ė‚ŅÆ ?ÄĮš­›{‹};K‰įšs%Öå7r÷yÎŅR˜Ü|ŒØmŖÆ_éĄ­Ė°‘lܨ ė}zšOéVšn—įĮvŌ‚ŗDøvcÛúU;ĢØ58ūÍwc‰ˆ āžƒéŪσGŌ­ôą¨]™äe$F$›=:úĒTĩ6qJ6htļÍ’A ÂT0n­)ĀđëŠ]^[]:×e‘Uf`]1”'Øví͊Éŧš–æxsļwÔãĻzsīWôč­Öė5ÛFÆQžT6rOriŠčÚ'Ųę•ÍãJ”Cˆ™1ŋ(,O5^í!¸ŋķšÉ˛Hk9˙Ų€ĒĢ`Úæ´ˇQÍ:@¯ūądÆĪ÷ õ¨ŽŽįŽfŽGgSžp3ÍŸē7N>Ō͚ēÅõ—“&v¸@8Æz÷éPé‘^éqÍou`ėKÃ)ÚËĶĄčGĩGUōŽ™>ö*"Ë?÷ˆū•wI´yãi.ˇųJû• Æ}IúúVędâ”9‘‹r./ukīģf;Rä_qVΡö×XÄâé°@+ĮQ×õ¨5ûT7ŦåÚ×ų —H°†ŪÖ\ĶLŅÍØsú{V|֖ŦҤé\¨ļ#›á키;–Â’@<{ŠŅŠŌŌč-Áˇ…#HōŒÎĶ’OĶĩPŊ´eˇ[rĐÄÄąFÁÛĮ^?Ī5šeeauĸMilÎ]ՆžƒŽ*“÷™œ­ĘģœÜÄĪäÛÍ ¤P.cc‘Îî+^x…ļøÛ`ä“v˜úž)ŗhÖĪj$8bK:.Ũ¸ūôëTĶÍŗēS$ÆQˇ÷FNĒ=˙ĨcĒ––1šŪ”G3ŧLÄ`nÁŒ{ĶËĖ‹äØÜ^FÉ`2vôįŪ™zŅÜ]bIĀ–å‰=MhY[\[DļĐ[F7rÎ͒ß\QŠu5ÎįĀ—ŦfļfHÄEJŽū„įī~<“Wŧ_s2iËp×"%S´ŧgæūuÍøKLŊ˜Ī}ih#g17œ…Š‘×h3ŽM]ņ;[iēEŦŌß‹ÛØä ̀~?žõ§MLīdbÆ÷7‘­Öháę[īäšõ˙8¨gĶŖ!!Æ×-æË^âA''°'ĩ2OÉ5ŒŦǎ;|ĢØc<~'ˇ‘-ÁuŽæí|š‰`]ētü(æCör՝\RËknĐÁ­ŧ€US#į?<ÛÉņÕ㚞0Ai—Aô÷=3HˇVV:-ŦÖ6Yųyp'ĩgúˆ MI$i‹qSß āš.ˆÔĐ7ˇWņĒ3@€Š;CØãŽõ(‚Haā Æ\1<õãšw‹,Ą‚Æ-Jßä¸ĩ•P0 ũ?úõ_íĻa9($™įųRតísfx4ōL1‡!¸äư5YîmėᎋÉēfĪœœöõæĩĄŋAĻ´,`KĐægÕí/Gö˜Ä†bãˇøŌöŒŽTöö7I,ĄröĒU¤peŨØdJŲ†f„E•ÉRH œ{õ¨Ĩ’Æ]&cm ņČ ¤däsĪ9â˜5$ŒVīŗi$É áz~tų‘/{3Pęmml –×%I#ëYSk& -ވb7 ‰°G¯ˇĶŊlŧʖyTķä*œōz˙œ Ė‚í)Ųō ĀN×Cũ*ĸ“c,īD×z„Ȥ[˜ÔFv÷ôĢŪÛOã ,ÜÍžŌ=‹&äúuĶ[K´÷F$ J¨Ėđžz×15‘×5ëâäų1•PÄũĶĮOËõ¤ĐâõÔîÎMJųÕŽË$›¨gôÁũ+ÅúĖ—8û6g1•QBzÕs6eʑÂEˇÕäĩŽbŅŠ;˛"ē…älüÂ2  äg?ĨaiŅģÎD8Üäŗšß•ŽÔ"I †6OŊHĮÕaH9y€8ŒWU᙭-™Ŗ(†rŊOÆš{…šė4ec*H ÎŪõŠaļ­ #IĀŪNHëRö.2IÖą VÖ)­/%ˇšr„6Q‡_˜tĮŊsūŊ3ĮqæĒ$‘ž× ˙ôũ;Ä3X.ØĐÉä$€œ~ĸŠip]Ã5Üą -s)‘ÃŽyĀéRĶØ´Õîi)’XŽQj4äFrE7Ão&‹â›I"lÚŪÜGņ’˛ÂŋãĶ5›-ÕõŠc#Ģ;1R§¯įQi> ēĶ.ÅÜpFŌ&E<€AĮ^™ôĨĘīr/Šô%å?đ´5?ųõŗ˙ž˙ŠĸŖ•^Ú—Ī{ ;‹%2ÍlIŧĒF}ąĪôĢW> ´9Žä €ŌnsĮ×Ū§–Ō[Ëš4û9 pĮ#4ōG÷˛sōūšūU3xWO1€ĄōĒIbKí]2ĩÎŪÆ}Ĩæŗ4rŧBŸ2¨]ÆFõ gœVÚčsŲ—žžÄP*ąC“ŽĀņīíRiW/ĻøxÉĻ"‚X°Ô†-ÆAüâ™ĢÚ^ęW­$Ķ2  ÔgŽ}{šf÷0o 4Ų]˜"¸ Ā“Č?ä×YcĄĪwkö{6Č y†LG^9Į5˜lÅŊŠ’d)7€ëū~•Ÿ§ęēŸ‡í ŗx¤ĩ“1ƒq ļqŸ~=ENæŠ=Íû1,ŦZâę-"ā€Ą'ßŊrÖ¯5Íüō[CˆDDc t´$˛ ‰eŒÁo§ÚË5ádwœ¨ uūõĸ|+y"G,—2$Ę%˛AĀā*-GŋÔ4ÖŋIŽÖiÃąxūUn  ŲŽ‹NŌ.ĄV™Ūâ9"ŒŦĀînsĮ'ĄÅäsÂæęŨå´&FB[,¤89Į søÖ{­"ģųĒ[‚xfãéĀĢ:œģõŠŽæÜD•,'×Û˙­T.'+b&ēļšvãy8üũ)…’-hwö:C=Ԗrf+ĸLå@ŅŦÉgŧŋåÚr?JhR}+Kģ™'–ë~éŨrJá˙ Žōįuԏ%ÆIÁÃą'™§ÜųcTŠÎŪ@ĸÃËÔĒqœ{ž•3bYšŠ%g!ÎX“Ž?¯zdY=¤‘J­3I(ų°TƒÎ?Ƨŧņ-ö‹,vöŌē˜YA'ׯŊP×dļ–âŌ;qåČ.%xûŨ+@xõ a%ĻĨ Ääå—hĪ?ΜS{)$õ2n|G6Ŗ¨Ŧķ§šį$…ĮåT¯îc•É[PėeēWIÃíBĘšTŽ]¨Yš&Ü@ĮŲā‡ėŌ,‘ĸ Ü8PĶ[Jęčä;ŒŦÂØā‘Å_k!kY&ÉgØI9*{gŌŦ&]PG d„pÍĀoëŠĶ”-í§ØnPF䃅9 ˙{üûŌ° ŠŲĸ›[€Ė8$Z×ŅæeÃÎ$ûVËĢYå,ŅŽFâpqīL‚æîîas+3ÛjĮ#ųũ}éą~ĘØ,r]ΠÉ9ÜņœūĩĐiZEõå´×–ÎŅá|ą.֌õé~ĩÍ+3&fØCcōF3ž{zWGĨkv:4&9­|ā­”–)1 '¯ÆŸ]EčU×­'Fˆ_,žqÚdéķÖŠˆŖ„.ā÷ė3ũ+G_×WÔŌÅÁEvųTPHéĨeH ŗÎd”ÚåÛœôÅ&ĩÜĨ/"ĨķÄ÷ $×äQÔˇ¯ķĸÚ}I`1Į “ÜT6' ,/æ9ˆŽ?)ä~51ŋx%cĘ@b'#Ĩ17КMם#L…ŨąŊąČŪŨĒå’ FV,soEÉãĩ0ÜM4Äŧ1 ŠĨF'û5ÄĨ%’4Ÿ25l?ĨGekŠéVģ-Ϟr¸2:üĀqÁĀ…3YÔ­ŽŦ„vg_qdI8öĒē$ļVĶ+Mb˛Û:œüŲ?Sž§ōŽŨÃÚ6˜÷vmfD‹•Qķģgˇ9#ôĻģŗŅgœmC…fāāŽ:ž3 …~āáAûĮĨP72ĨŠMčĪæmîū/đĢV‹%Åģŧi;rIíĶĩIĸcä• V`ČY@ŠxhŽBp €J“’øS*[J_nvc`ƒíUfXÃ)QĩF\ vĶŅ–æ•ü’¨–f*īĮįTåŌ^Õ|ëéÄ™ėˆÚ­ŦÂÍŖ™Č–26ąæãNÕ.ḒŲ#%âl1Pâ*×*^d¨ļüˆ­ũdyV(ōĮn2qŠ…Éd!ąŖ§JÖ[tÔ! Š-ļĘzSũ+%ĶßN‘]b .=ū•2ˇtv{pÂ^@b2hÚę„Ī ´ļō’WeddÕ]>)g›Ę-((ŲuÎĘēA ;$q ‚[ĸ7MėI¤ÜÜZ]‘7Ûöãē+Ŋ"×XĶZkÛ׊5PÎ"!v1×9æšÆ f /°ü  ŦũNĩe@ˇ3AhæģąV´nŒø+y€…@Ž"Dhë†?íëZúT„ęĒŦŪlײ…ė1ƒŸĀfąĩKuÔ.ŪxÜH$ (sĪŌĨđôąØ^K…ûLŦgFȄgžO•(¯@“\—#ĶĖÁ_ĖŲ3Š`ąūĩ­áčĨÕ­kį)g–Tnū™É8ãXfÍou[éœË´\>ÕÎ÷Ģ‹kwg ‚Ę)Žm›™#‡šûŋQN+Ūb”“Š]L­L›=QŽlwŊĒČ€0}žũ3Åm&¨u}$Ų[YÍ ŧnd–y2ÍĩGŠŦ`ŗ\Č#¸ˇx­íÃa|ĀúŸzØŌŪ)t¸mœ•2’Œrp0?SBĩė\Ũĸô3c_ŗŦ—Œ–^¤ÖėV˛Ī¤Ā¨ŠcMŌH¤đXĪđŽzæÂXn33‘šLeōAíÍtöĐ[øZ8å$JęĖāœI?Ĩg ŲuuJĮ3u![kˆĀ(KžHÁÁŠîØ[Ceu3ŦĄ• ÅšÄ.fuļģ•Lb]øAģâ~•—u=ŌY™žÜ—ląáŧ¸ōW§NÃųĐ÷vVĖKmNúöæÔ¯dhԂĘK0fÉÁ#8ĪŌ¯ęo܀ÎĘüßēÜeiEŪė´3Ēāūí2sĮZÔ×kÉ­ŲäĒŠČ¤>ŸOĘĸ÷ˆKWØÕĶR3ĨĖŅËē7VĀ6ûTœžGôŽ^+›¨–<‘ŽŠĢ‚O×ÖéĨŌ¤EŠ@Ļ" āũ9ūUÅÄeyŪ;{O´ČˆIΉl„•ŲÔD.'Ōâ2M Wå#ŠãųU=—{ˇÜ 8ÍhAn.<3jŦŖäuĀ ˙×5”gģ2aͰ°Ib8âĸobZ7îeš(ÄHÉ-Ɍ‡LŸ0üįđ5€ĸũnŧ›ˇûÔCvĶã´˙Oc[–PZø˛+ģÉáHÍŽ"‘› ÜôéT|[ĒÁĢëĐ9ŌīȄ$’!žO­Ö¨} 6HâMĖ™œÛ†.WŒdūžõ“1ÛßJ.o&€O‰“Č~zwæĩŽ–õ,Uán6ä2ųŧŒãÛŽ+–ÔoîÚâ"R!åíUā0Īž­W;I0ļ§eĒi™đĨÂ,˛K ˆˇĖų …: NÖ´ĢK™i#R^C#wĪĩeYßĨ%Ø  †BëīĮ~`ĨĶé×S-ŨäŗüÂ.AíųãŊ'+niļhßŌ4ácâ+Ŋ.FķV6,¤ĀppŪüãđ5šŽXÛOrąˆŧŲ¸o8_s\_‡õy`ŧ¸ŽŪ d3ĘĨĻ(Y“˟C]ÕöĄkogʸ!‰ų„[˛j¯pj۔ė4k;i1.rÎI#ˇéVu W_1bPā‚ŒņUāԖY›k…RHTō‰'Ąu[2’褁‚„ Đ9$bC>,š*¨Ōbwé"`p ôæē]WPĶm´ß´;" € lXzÉąēÔR+ŊˆíYƒģކŗJŌmīTÛ$fMĘÉšˇ9ô÷õ 4°‚B^âúæ sķüĢnÚÍ.eÔlÄ.N0 ?ĒkwnŌdĪ›qwd÷­í<e&HːAīYĘ÷+ĸÔĪšŌ­#ē.ˆęF VÁéīPjvČd˛8 Éķúcžæ­j÷Všæ(Ãpî"Ģ—‚įė2YQdČdäņŠˆļ˜NIĨdR–ŅŌ9žā8ÎTJFO5jÆÛPŠāŨĒyąĒDzMÆ;“īQ4ęķ¸|‚XŒĮS] bv,$gÆ(G{Ōļä6˙V%[{ũ*æQĐ¸péU.õ{īE4V`XŲl;Ž.xvũÕíõŦ¨%’ęîRDJÄn#Ī5ģlĄŽÂ|Mģ.Đp9įÜÕ)ÕyÁŌģEmm.Ņ’_o2?ũU7“8‘;÷/$ņ͎˙ŽŦĀ…äe$…Ú¯>´ %ævp žô'}ɒIö1|‰•ØÉĻÖ$0'=ęˎWŲ†’䃕9=ž•VK—e”{‚ `V%ē˛[nQîwĒ_$z~\SW¸Ĩ(ÚČKFHS%0\úV֍¨™ŦI‘‰u%HÆ éX:”‰Į` ąŒœúV–˜“Ā‚C 2‚IQÆ = Ąēˇ 'Ÿ2 °ØĮi'ņĢú.“a¨_ÛE"S2ĢaČā+ÁæÕŖŨP‡dķe¤ížuūŗĶ Õ-žÎ Čŗ ,~đ9Ÿjn多Lëŋá_øū}å˙ŋ­Etø?Ū?Ĩ—37öqėxG‡´åļXAY]î#IĐüū¯Zé ˛[xÛ#;™¸'üôŦ¯ë"˙ÑÃ{$YŒJN9áŊņūy­k›û[8?}s  ’Húgķ5Û%m2)?xįtäŽÃÅ7–×0†Iĸ[˜Õ…¸éõæŦę:”Z°°ˆ2¨w*ã-Ī˙ëwŦ{ I/üY5ûšŽĐ@#Č t8õ+îs[ˇúmļĶkožr¸ T⠁øsߡZËŠŦv1~Ė!ēO’áH ųlnS‘ˇ××ôŠŧ-¤[^뚄’3Jļ." ʨįųzԘKiâtŨ3`—$c×ôĻx^öâßÄú¤kí‘dŒž˜Ī^ĩ=ž+3¯žų ƒĐŧÃĻ8¨Z(§LH‚HJ•`Ŗ#û‰įûeŠC&@ãØXŸMĮųVTē’B˛ņĄŒÎyĄ9˙õĶcąÂ_ŧļúö|‡ ×Mdë´ãß­z-Ĩ´6ņFą$fŲl `ãéÖŧĪR"įI{øäˆLnLæÃ(oO\ņ]†‡âŽÖ8ūĶFŠ6ž3žŖnOŌÂÉ­N „%@!‹œ–˙9ĒƏe¨Øæqo4yx§C-Ģ>M^æۙHČ! ˙ÕSÜČ;u‰ Œ}~ĩv#ŠÉØŠuFūԓ›tQōŋ'æ÷9ãņ­Né/ėρmüŨĢ‚§€ÁëõūĩŸ­_CėW*]… cĶŋ}˙Z¨Ũë3[†k4‡ÍRT™~psŠ—0}Í? x-ô›}=DvÆ%o5Ĩ`ģ†Iõúũjkŋ‡Ô i’ ›ˇPP~čĐą=HöŽfĪN-”Ū$FV`įļ?Ŋíßę-=.u)ĨH]`ˇā9ŒmČ˙ V/-‘Ģ{äÁjΏ4Ž]‹8\’Nzâ‹[“qŦĸŽ9cļ".õ 1“Ž„ŅũcorL$ÎČ$úTZsĻ›uqc"+`–‰;œƒøqîičFĨ™­•%"drP…AëÚ¨ë0XéđZ][…rŽ@=øÍk]HōŦl"Tb7p7vūž}jŽŖewŠŲ&›—ŸvĶ>D|*ŒŒį€=9§č ÷3ãŠŅÖ9ĨF%‹7]ØúzаĶÃjXŨL^MŋD™sß<äzVæĨ§.‰il’;=Ȍ™0@P?sĄī.mmƒ(ŽP$r'§õÎļâNäâę˙T˜)<Ģa’%ŸįŠ#=+]7Pĩē`•‰%\t'ž×^%˜*Eác (Œā*œū§ŽjÃŨĀíļhÃŖ`”)Āä}0qéHgomqq9ģ…P€‡@s"ã9ôũ+HëhđĮžš<ØÆDŦĄqŽHëų՗´†Ūų.cš!gũŲd’z}^j ļķÆbAČÁÛßņĻma<¤ę7sĢË ?(^öô­-*Ü‹å Š=ŖH@PÎzƒÁīÁ?JdmæĄHŒõ…WģP~ei 0ĮÍØäôūt'`i=á"ņVFˇ6Ō¨RA‰0įđ<GĨpzŖ5;{r™Œ ˤ`õ#ˇĨø–öĘ'ŽuYíČØ`xū*ÉÕ ę…õáX.™ŧČĀ9qÔûúÕJĪQZÚ\´P4QŠTĻIÎI5&ĸđ%ŧS&áp„`ô˙>•-íëÜĸ´/æmØųޏĮĩ[{+–ĶĻ{—ßįpAČéž*H-5‘Ũ‹Čųf'‚j+WežBP1%H ÅMÅ`Ôf/‘ԚCÔuUõ4Ë{†Øš –VÉ-ķŋ—Ö™0gÕgķqæR nJûU‰ÃM7–#éūxü( $Ų‰°ņ!*ØÎ­iZJ“¤-$ĒDĒ ˙‘Yp\I*ũ–ŲÕŨAŸá*VŒZ´`”ÁŪs…Š˙ ,\ĸGē–ä'›o°> õ#ōĨļē0#Ŧl$‘ßdc9ÎqÍiA`ē”Ī"ŸąŲ3~ôƒ˙^´VŌĮNxcŽ$1†,Œ°>˛;Qaļd $‰^9$Ūėf=Ī>ĩf ą[5ŧ;0#Š×’ ÍF+bŦ!2H@Æ ÎŌ•Éļ@fÛ°p#ųâšbσdȌd#i :t¨í-"ĩ–i&Y°š9­IĨpũžÖD&OŊ‚ ?2ŪâéM˛"˜î™IßbüqLĖĖ@r@č_ĨU˛ĶEŊÕÕÍėĄRFʨląéÖ§^‡i.Y¤,8Ž1ČŦĢZhn›P$^3'&J76„ąF‡T‚1ÉĸYŨ6„äņ¸’O^ŨĢÜß]˛Ęņ„prF 5Ą<—X¨… áßĻGĨ^Ëb¯„wēŦ°DÄŒnj‘VĄŋ{-Ō*Ŗƒģfæ`q͟Jį]Åãtː@ã"ļlīō8eTÄĄB€x$?JÉģ™ķ–ūųíKoq†$" ČĢ:dWĶĖĒîā9šÁŦˇŊŸė÷R‰…6–ápzuükKHģ•%Y’F(Ŧ@ä‚{séíMōôAv[ņ6•fšz‰.d‰ÚePŌĀļv÷öĒÛvNÆ7Šwƒ€r=ãFĄŦÛ]Ëmm¨[y‹į6šĮˇĐҍgĨ˛Ëi•ecŊY‰¯¯qũi!X4 ca!™ÕÁ'ŋáWŦübēv“%Ĩĩ 7Ģ!Îy@ĞHîG°íˆJ‰Č˛Ė’Æģ{(ŧ+Ąøv=^å{ˇįkŸ0‰8Ué‘ëúÕ&ûŠI>†E…ĖÎXÜ6ne!ÜįžrM>âxėîãQ9 ūPv×PkŊAíĄ´ GȃƒĀņ5R[™$ˇ’gT3Žw0_§jķë*ŠVJčëĻãdŪæĩ–äÔZų>x!ØwojbX,ē´×7ŽÎdJŠsŒ~#ŠĢáíFÖöôF#"Ų–W9%ž*æŠ)˛ÖTÚ2ģĘ ¤däŒ~ǧNQZ„ęöÜg‰e’SmųĄƒ32đPq×fŽøVX…ŧ’+a#sÁĮ?TÕJAĸ´3“;ą‘˜dČÛOOa͊o†ÂßČ 6Ô@7ˇMį\{Vē\ÍĘMmĄRįLēņ&­+‰DVÆBƒ#8c…€0hģ’ęK ˜-ãˆönĀã§øTē}ŧ-i˜^U8 0ƒņۊęęR~é‰e QL Ū[ÛŦj0ŠģˇSĪ\ÕÛųQ”$÷‡aÜ,]rx4é'HŽ!b÷1ķ‹iĮ>Õbö{E‰Yäž_˜œΧĩ(Ų̑´‰Ŧ¤-ĄĖđMzū\d¨ØN? ƒÁÉo=‚ĒÉǤ˜-!€(C×<žų÷ĒIĢʞhˇŠéá#‚?*ÍŗÄėa{ģea•`ãÔSérZLŅîN›tí5ĩÚų–á†3Ÿ™vīūMgËĻéĐ+Ip‘ '$öü šĶl0æVž˜ŋ,Q'ĨDlŽĖßhūĖÆqɁƒęyÉõĻĶ–ĸV]K X^X•]=ĨˇDƒpäôsz­°ļŽ9-íŒČ`°˙€ôŽąī5Û;#%̈́sB&Ëø5ĪŨjk´f…á NI-¸ĪۑC‰Q}†Ų*Ŋŋ–ĘŌ9@2ŅaTg8äŸĪéT.ãŒj-›eE•€dëÆF}ëJÁŒŅĄ.s,ąŽļ>^Օ4OuĒÉIw9$ *F}@QüŠTŲv¤u6ßA A"ļ)",Ԍ:ĩ}*íŊÕũāTŊĩˆĒ€ŌÉ>ƒ‘žį5nĶL™á%Ė ĖgBxûØô=é˛x^áœĒévŅÜ<“nĀŸ'ëD•ÖÅ'§;¤<֗— Ôq˜įÆLyūÖēíVÜÁ˛EÔI`wƒŊlZxvūgęĢŠŲU™9$ŠæĩŊWė^ ĩÕôöß2°ČG_č}ū•žŪ;ąHÚ-ŽĄš8Ûˆ–cíę)ķ!ؒ˙@Ō­ˇ­—{`n™›ęMs)imeâŅm ‚XÖB€üģŠu-kVžŊe+ũ™.A‘s)cŲM.güNi™Á;HI>Õ-Į Û˛ŗsenoåmÄ.âKo#ģĨFŗÚąųÄ`pK •ƒrí>Ąp$.‰:Ãtũ+ĒŅË`J€āc‚ÜqŗG:öJŗlIfĀbī1ZvÄÃt šŖ dä÷Ē’í78˜ā÷4ۙæŸV´ąŗE˜‰‘Ũ…yä˙AU)IÄŗá&/!sŽĩOWšt9y2 `#%‰Íl˧Iab-Ŧ."žYqšš|Ķ ëОk'û6(fYī ēŸ#Úƒ§ãUdLåÍ+ŗ×IšŧUšėB2"zÛÕ4číü7/Ų­­ÃĮļBB`œOšĢŨAbr Œg€jâ´­›öøō0qTž¤[C˜™ŪK¨Ž•RĘ<˛˛u­nY\(UFˆŖļpÁ-PŨhËÂKSå9ū>F>Ãĩ\Ķįe†tĖҌ5”§Žˆ¤rŽú†šĻ8BÆŗo#đŠqģ˛ĢÄ0ÎI?Ä};â¤_CqnŅÁ“…DÚ¸ôį×Ĩ@ōĘg´‡Pˆ™ ¯€ëīéEŦhå}ˇútpÚK,~Z¨ą į‰ÅS“DĶY6Ļ”bØPÜäT×ãĖĶe›ĖF n<ŸOëTîåahQ64L\0nŖ‘ü‰éB%ģĄšŅn>ÕiŧŲŠXy%süC¯ëW¯ŧGŦĸŌA<ÎŌ$ĪaŠlˇ˛,fhJ3’ ÆÄ⧇čk^Æ ŌĖŨÆ_ĖĨG™ōãc:žĻ˜›3ô :ŨôÖÔ¯ˇOs9,NūŠ=ŠēšØŨ@ —pxÁŒ’:āgļÂĻŽ+Ûki| Áf$™\†sÔU*;; ŽėUIÜÄc{uÍąĪ ™WÃBĀ}Æš*Ē9Áü}ë­Ōtë;m*5yԒ>Ņ““Î8Ís:V˜ˇZl‘ĪpcLĘ;a¸įđįüŠŗhšĸFļ։iu eļĘx$~|ãĨ+ŌoCRīS‚Éä|Ę’ą)PZFį$ũ=Ē­Ļ(„^´Y29f)÷‚ņ͎ˇˇ5ŒĮQ¸ÖĄ‹Ę-q’DŖ=sÎŅüĢĒąĖ6‹i$ōmD'p\Į“ųäĐČ[Œž‚Ũ#ĩŨ„€` 9ķéVŧ ŦŽĢ-”qļ’`]ŧ˛Uü]3Œp}}ęŊÜööJĶā0P4„āVôΈÖÚ~…öHėä7XØ.bīĪ­8„Ŗ}Ÿâk×fâãzA &I9ŪAéĀė+™{¸í5Hîãg ¸ÆāŒ˛Ž9ũJč4ûkŊIŋ´/ei$. ōõ?‰éíLÔtÂᙝ^EmĀėāāt§a1Ņ œ9ŽGl‚Ę:síĮ5JáŪ LÍ$qƒÖGÆG<ŠŽcąi!’H÷`•YšĪ§5XÚ,¯ķģ9,Ŗ.ŲT—ō.†ōhæ(éD°i9Ū{}ŊR|Īq/œyVčļv‚5yYrÚ˙"°õYb‚ĖDŧ™R{ãŊ0åîGoĒ<—Xĩ…p8' íS\é:„’ $šq 9Ub¨=p9§AgF7 f2sÅlÁ3_‘PJĢŸ”œ“ë‘Ią$ros=ŦŪMŲ,ҏ AĀ9ër’%+W#?áŌŗ5Ō˛jĪm NÕËę 'ôâļė-š;hÚl¤ôéūsCcļĨgŧŌ,q˸åƒã5i.šaų|ļ\āt˙ëÖmėņEŠJ°—!ąĩ@Ā\Smĸšui~^ė.Ké@j‹‹isatĸÂ|+dų,rOʙĢ}žâÅÅܰĮ`ŦXɌ}8§Jķ@ęÁČÆĶژuŠR噒 ĄPˇ✟§Ĩ%Øąm")22—• āÛ§Ջ?^čqŗÁqą$91Ü 'Ļ=‡~Ŋ+:ŌUYžp<ĩRr{ķéU56Xom^g&=Ŧ Ķۘëßęū"ĩQ4v*6UÎwTĨĖD=ĶĮ€ ŠS€ÃëUoī#ūČ1†1ŋŪxlū…Ast÷PŠ!ی éųRnāYģŊˆūėo$Œü‡ŦëYíåģp$ČMVždŠĐˆß÷Ԝ3ü'ˇųū•ȉ Į€eČÚËÁ§ųQ`š¯¨Áĸ2 ĒpĀ`˙õë2{ˡ&š,„•\Ž•Ĩvéąs8éëÅe¤°@ᕕ˜09#9?įĩ-é²–ų‰lū5<­=æŖ˛œā“åätâŦŽģĒø†ę(fˇ$ ËÛ[…đ\S.tĢË ļ"3­ĩš Ž ëų})ŠúØĶ{‹k{‘XÕ9cÁž•‰Ģ\Ū,‰lJÄ<ÃÃcÛŌĒęSÜI,K4 ÚFãķtĻ \tPRH˙ëŌ*ĮAcmŗIˆœ‡“晉ËUΖ÷0ŦŗžrIŽ!Č÷÷Ĩ-=Ά АČ€äéšÔŠXė´%’PÂUQƒŒœSVOėKÁ’Ō‘ TņjÉ ˛§˜FžŠ fĮ-ÕÁ7mŠ tLe‰õ5_Ny.õdļšēû$SHM*|ąƒžN?ĪŊ; ØėDFŪÖ@navuØ9Žmm“ídŽXŠÂq~ĩĶŨx_C°ˇ’äøŠ.¤PJE¯-ۀI<Öˇ.e˜Âđ­˛Đ¸ûې6n&ÃČcHĒ÷¨ī.JZ•ŒąHXĮ$qDlĸčÂ…ÁÜܐŋãUŽįiƒÃ m^:÷"†Û)ûē-ĩī˛īZ¤ĀŠåx'ųņZ:}í­Ũœ%´qąb¤ņ”ūD×1m<Œ<šeČBœŽũ+Ķô‡Wĩš@ÛęŦžaydô{`~šŦšUÅÍ+{~ [­J!$ļô>š“KšDHÁRRŋLfģ-Oáõž“ŖŨŨĪŦ¤ˇ+6U1ŧŒãšëĶjā´Ô{šŖ´]ûĖŦ=?ĨQ"KŠŨA42DōC fËu˙8Š'ššōš"oD$sߊĢz‰dŒGŧAānLgĄôŦxžTš[i•ĘŊ‡ųëCb7ŽØėgXbWE\€Ü€1úz֏… ĶõŊiŖŊ’8­&—äYąŽ2zzÕ bŌO”íe*[gjĪŅ4ÃâjÛIŽāÅšŠŧÄg…ņëĀâ…&„Õ΃ÄZƛuumŖéVņ›(ȒŽ<ÆŸO×°oîZ š-Ą.%AÖįų×_â? øoÚļĶË=îĢ.LŸ ­ŸŊĐä×.ž–ķâIV ”ķΧ˙^œ÷**ÆÎ0.]@Œ|ĨĀųŗõū•rî lõk;‹‡ßæ($ŽLJ ëųõŦ ÖŌGvlƒ$8Éõ­kj !†hÁv}ʈé×ÚĄ­ # ŊKž'š†m*+HFæi—ëĪķĒ^–[w ’L‹øģķúĩ=Íŧk¤Å™?ŌdbĪ!éߡ~ŧUm*Ų4ûč&%ŽnIĀLyüĢ'nnn‡jĢŌpęhë‚ŌŌX’î72:Ÿ”ōÄķ×Ļ? ˇ…–23lŪú¸×Ø~tˇâyä]BK?6RFPqÜÖ w× }+F‘(n vŨEĶÖ:œŽmÅ#Šē˰”,!Æ PyjČiUU„jÎ7ž´Č,n¯$îŽî Š-ĒÔՔđã+aâ*q¸´ķį51”oŽæM_Š›,ˇL“I´•bFOøV°ļLūū ryߒi#đĩ„-$אņČŪõ­´ûTVVŠá°q˜ã€*ܓ@Ō)Ë6œŌFī&Dy-ĩrqV#ņV’¸ˇGxĀV1 ŦÛųííW|VŸ.9-.IŦHŽØ] "˛Áaō„-´qíÍ&“Ü4;ĢéöãËęU¸”œVŧzŧķœ[ČŽŦĘ⸡utT6*ƒ%”ũŸaãükĢŌâÛEq8T”Æ7Āč*j]-nĢ%ü°Č!š–7@!°Ĩ̌ļ‡]ŧ•lm.g{’>fîI¯Im"]Vؐ9‰`>9ĸšm;ÂaxÁbA O-#zš.OW°8•āĩ:ˆNŠĒI!Uũ䲔c°¯ņw‹&ņčŠRĘ&Ä`Œ÷5cÆ^*ŊÖ$ $€BT…=IõôŽ)d`I' ž†ēųŽ+­,'žŊŽÚÚ–g ^s^Ŗá¯†×ĐGįę-ŗČ@ rÁ}AđŗUŅė´Û´š)įœːpWûsÅvŗøÆŌâfļŌ@ŋģ^ĄN=ØúTÉ+j5cŖŌ4Ģ]2Ņa´‡bâ<ą>õ ՝ĸJĶŨÜ1ĀîÛ@„—ēÚڅĶË;Ĩĩšá@ūmõ'MĸęÚãrëaiŨsēB?ŦoͲĐŌ×3ooôA|0š pŠ7d՛K+ûÕ(Ö 3c÷x¯jŨ˛˛Ņ´EÛD¯"ōÎÃ${“P\ëŗ]Ŧ‘i˜šLí.Q×ú N+rt,O‡í‹]yq2å‰Ŧ?*˙[Ÿ| öKRNŲ$b=…^2ēͨ\´ō C”:SĩjŌĮũŲ{˛>HcãXÔå›ÚãMŒ‡JĶtˆ^ęGķ$]ų&š‹ũnęúéŨ|.BGä~5tiÚĻŠ>ũNä¤gŸ*>3šßļ˛ąĶl‚$a0#Š5)¤ĩÔg'eá‹Ģˇ3ęŗžÆ91ŠäûU™į°Ō xŦĸEĪ”@9ĢWzġR=Ļ™nōHxŪâ?’ÛÁ÷W2Ŧ—Ķĸ gbœœ}kh9ĩ}ÎSíŗęR3ĘėČCÁĪĩlŲĨô5IbB~ôĪáë]$M†‰˜Äy!'…5ļąŠ3ųr¤°†'c ŖŖMėõ%ĘÚ# í.Ą˜9Ct3Æc*Xĩ ÖV h¸É÷ĮüņZ˛ũžĖ,riĐxŨÕo"čÉž;ŒžrqƒS4)O›rĒ^ܨYbsÎ Čūb-ÅúŋšÆĐ2ŨsŸzÜļ–qûš,Tį´qæĩė¯4K|•–9=&jËúšŌ;üH“šĶĩ=Mäđ%ĢĖs…ÚÜ˙OÖ´ņZôÉaTíacpÉædœÁõŽŽ+ČÄȉoąčî¸$}iš‘ûNĶ#Š ˙JҤē‡3[ޏķÖkËiUœ€‹įäp8#¨ŽĶÃú.°öqIu{Ģ 2ۘŧÆÛčXž2=+‡ņ jÖK9eše–6rÄāįđö÷¯IĐõ .bˇ–h^ŅØņÎ61úgüķYĻĮØĪÔü ÛĪsuw$˛7*ĘĒ=— Ô×'ĄyĐČļÛˇ‹yŠŗąūŒcõ¯QÖî, Ķe:„$‘´|ČĄŽr8úWnšCËssi#˔T$åT…€ģ÷̊m“vŽžÆ}Ũ…Áŋœų€V8^¤z~•×xbÚXtÖ]—-Ęî@1X} \dF0.q°yîŲ?įÚ´ôMTK „ŧaĀ$ĒČO=p?•J†ē°ÖÆCÛjQ_;ĩĘW`7EČëīĪûk‘áífîKÉĐG|Áĸ˜•O÷OĻ;zÕĢOé÷¯wägrģ €38zō8ōǎú}´šmąūÎۊ~P䓃Ÿ^ĩqē•ĒÜlž$ĶR3ēáf|‚!<ķßĨeŪj×P™ãh­–>QN7įEĩ¤i7:z¸8l` šōŧ‚FŽÖŖ°OéIl Į}būuŒMp d— ŋ%ŌÛ­§;Ę ”<ЍĢ*J ¤(Au´§-‘vh€ ¨“ČĄ ‘GŽ^<Ē&Ä ¯”ÄqZv“ĮĪu+y>b€ry˙ÁžōäĖR6…:|Į“W-ÔųYÍnĖŪŧūŸ/Q\ē/æ¸fû2™#,AŪ0+oBđԗ —“€ĪĘÁ&ĐĨrŠŽ[ApĘÁ“olfˇ´nę[ÛQfąÁLĄ^NXō;CŠŨhTY×§Ī[īûė…Ąį_ĐFoûåÂŠĪ™˙1ŊĸyåéĶėnĻšm’!—?įšo‡ü6—v‚âđ)¸‘ÄėXöĪŨĮŌ°ē•ŊÜס&îáWlm!ÜĀ‚8šŽŖM–]sNƒ—-A8PyíĀ÷ŽÛŲVģĐč.o’ŪĐG`q€ŠĪé\ëk3GtŪZÃ1b9$åIúv=+RXŨ’7–0¤Ų$œāķÅTÔŌĘæĒžÕI!‚õīĘ•îËĩ‘Ī+ßxŠéŌ˛ÄĘUŧąĩOL×Y‹aoĻė6‘pmÜ[ų×/ĸjļ6úmŧ)&ɓ&MĮhŸĪŒWOŲ{]žRš,UeęŖëŒū´;LŨCB°ēfŽDŽ €'r|ŦŖœ{Vn€=åĩÛ'ˇ`­)įzžžõŦōHĘî0 ÚNÛų įÃ,Ū"ģŽD’vōT1 ;ÔîUėZšą˛)# ¤oŒā‘øœÖ<ļ×BõŖ‰ÉãÚ[“ŒnŨëBōW´ˇžVų ’99āņŠ-‘dXå2cb cŽŨģŅĒ“.i410‘˛āeIlp8â´mŽ´Ûnõ›O¤Äp§œđOjĢl}ĘX€v"ä ąöT(ītČ,¸ųO­ad‘+Ė|A¨%´ oĀD*Fôgž0qÛ¯΋yŌúHîeWšVdĮEOa]ėļ6QcM°Qģ9+>žŋ€âšëŨ.k[ĻžæAįÜ/˜Į ¨úÕÚäŗä$vļTC$§>_rx9ëĪ|֎™ĄZų—.˛1bܜķÎ}ÍfÆKˆĻ1"Û%ÁdÚŧËgž3ĮáWôowsq¨ŨĘgŗ-´HŪéëŠM‚ŗ)]FãQX‚Íbh†LĮ|ŠsÛĩKoâ‰Y.B#d܀ūŋhŖ\\ŗ— pĪjĄĸÅ-ÄŗÆÄˇ•+.ä]ĮŽ~÷>´ŽSą•{qsâčáGÅŧ,I2 Ģžü{tŧˇąi6Ģ´NÉp īÖŖŅ"Ķ–{Øoæ 0™ŠĒĻüŽ9ãņ­}F =\4,a„c{Jø$uāJ–;čs)xķ]J-í~Ė@Ŗnųc×ĒÁmp÷MÃ0\0`ã˙ÕMļ‚)?3Wĩ/ 4lágh>ĮôĒÖ2ą‰JŋšAĻ~ĩgRžË5ĩŠ–|IĩįfÂ;_­cEöí2@­NÎ6ûĶv:ģ§Xd›{yd„}IŦMG˸S oÉ‘š ãŋĐÖ˛Æ˛B4Œ@˜—{šÁ•Mŧé,h@B ã…<š 4ŦõGÜR¨‚ŅĻîN9ĮZõû“tb˛?fĖ|Ŗp+~ •}˛ō€)úV>Ą/¨HZIU$°Ā"ĨmæÃΊŅãÕtøö*Ō* #ĪĻXV>ĒmfՒKˆUGĘTÉÉāuūj}3Å2Ámŋ“ÆĢ°@úŽÃéX7-q{œ.Ņ<ɤ†QĶŌŽRæ"1å!ÕįTē*.cŠį Ã/ŗch ĒKö–œČJŗgžGÖ ģą´‹tĻ-čʤŧŒYųö¨Ŧ­m`žļ{YÛė— E&);œT”ŲŖ=Úę~A”P*˜ãŸZT‚)äË4ÁÛ!Ü>ķÅUÖüä֕c;¯9Į {ÖĖ@ai“,Ąs–į8É0ĀqpË’  ÁĪÖŦÉdĪ ŠUw‘“yĪLķũ2*DTž`ؤĖzwũJL å6†ä(ū]ķEÂĮ<,|šŖ% c’Ĩō2)ķ$ŋhŽ(Q 8$nįŊ"k}HÂĐßøn ÃCÄQu.?ZķÛŦA}2ĖĀ)ē‚ceũ$m!ɏ$ąĮōŠ$ņeīŸå,Q€ær~Ŋjē +neËi.{ˇ$e`@ÁÁ¨>Éqũ”˛Ē¨WVųĪcõ4ļT–÷aļ*Ŧ ’jū%Bˇowmä’‰ËdH§ÖŽ?ŽÍĻ­ĻĨiöXå@ĐĘįå?SÚ­ĶVĩėę&Ŗ=͒ö §v<0ŒāÕH4ë­Eš}QÚdĀØœgë]\ŽĖësᐅ2a¨Ŧ5s{-¤ļfäāņzŽz{W –’>ˇ<ÛË,D “oÁ9ëĪOū¸ĢŒBmˇŠĨ.lJ ÖX ‚šÃëÅ2M;BgũöŦ“"Z5—ũpM^oąŒQFĄ“ž(˜2iįjš}…s”ÔŧCkŖjVŸgnc$+1cÛ¯Oæ}qÍtbAâ ;/+ĀɂRBŖō^߅UšđÆĨâx|čŦ-ÔDŦĄ§—i~ŧ Uôx¯´YĻąģļ™]ĮĖęÆ ÁnũųŦĻ›qØÆ}+{̍Š3É^6f,Å8čzŌŌ4Û-KEûEÜĪ5ĀŨ!„žëÆŅ­mĪlˇn’ā¤Ģ‘´Œ’ŋŌĢ]iŦ’.Ų›hßcžŊqÖ”ĩ¤Ū—2Õ­­Ųš 7Msą¤%É…YŅ"ŧ´¸ēáŽlx^™­K];Mŗ‡C™ˆČbģ˜ũĪzĩ…ÃģI´…9œVŅJ÷°“9č´ģ˙íšîc–(E'ûžžøĢ÷–÷ĶÚŦoÚ̌ûVœuĘŗ†XĐ'ÍEw ‚GRŊE +•}}ôšŧâĶjŅ@Ū Ę3íR\ZXymŪ;d•]˜ûtí[{K‡ģ(QŠƒė`æâm™ā,›Aúã›ĩƒ[œÉŌŦã"B͏ÎTl‘ÍE4QŠŲm.HũMu¯a§†bpA ĪœŠČÕė–yŖęj3ŸZ‘4sōų~qōí› @PŠŗö–HLf,Ÿ”NjĮ؄\I“ŒeQrqüĒX-5 Y'’ëJęÉ2–H˜ōI㯧×P°Bß8XēžGZžt…eRX‘Đ‘ĶŊWĶ x|CmąÔFe@NßqÆj$ė4ŦÎī˙Ī´Ÿ÷đQV0ŋėßTV<ĮF‡”ZJmīVIĄu†r˛ļI |§ķ8üĒ{DøcV•äWm.ė’HĀ17Ž==Ŋ>• ú=Ŋĸˆc2LDļ\Lúb¯­„SĀÄ$ 0UŽ?­vš&sB.:šˇ:ŠŨ2MAąA)#8+ĶđëÅrÚîĒöņE\¤ˇo #ä ?ā*˙ü"š]ŌĮn"vBu.Pcžœ÷­m+IĐ|6c˜&ûŗÕį]Ė?Ũôϊhįt߲Å-öĢĮhŠšVUų¤cĶ˙úæŦÁgw§å8ģ‚FÁˆ.7°üksQēšŋÔ-á Z2™3Á€Įo^{ÖuŪĄŠjˇsiúJÖ ŦĶ…Áí7ØKš‹Šjķ,Ļ{ybaœąMĖāp*ŎŖĨiQ’RėK į–‚yü3Î?*ÚˇĶI„É-ܓĢxÜcú*¯¨ĮũĢbÆsûŧ)qƒųu¤ôÔČŊšk*y>ĀÅäÄhž`yäãŠĘXîlĻBŅ Ŧ΂sųqŌĻ:‹.šÖÅc3[ŠWõ8ÅGķ}šŌD’FųBČAÉÚ@¤ v:/u{ËÁcb D‰G™,‘–\öö'ØĶĨŗšˇ›zk ģܓÁČ^x$žž†Ēøbâo"ėä–7'véĪŌ“Ä:Ŗ[ļ… kŠ‚áäGīõīøŌģšįâQXL2EēBUʂTõį˙­\ŊūĨ>ˇ}ĖņŸ1ÁȝŨĪzØđļ‡ X™Š™nå'jėÎG= õĢĶø0KjDģž\ŸŨ‚r¤ž9éīO˜|ŊŒ_ @ˇ—ŌÛ\*E E•ä-¸Šį <úĢĄđdļļĐÍĨ]EŨE!‘\ ÆE8éôÆk–˛‚ãAÔdĩžŒĸÎw!~„s߸5ŅKiíŠÉqpj0Č~´›ŦKvģš¸Œšˆ)fyNpsÍsž–YŽŽmōčŗî’F gqūzR]XŖĸCm,˛ģāáÜíŋ­^ļēƒC˛¸A‡p0ė:’Īz™—â1ojÂHGī7āžâ¤qøbĨđåėëV—) V@1&H9ã99Æ3š§m`5k“w|ėЖ,‘–įõŗq§Û^à vŪ\1dĄa€ŪŲéEÁífÎįÄą[%äŊ¸ķ/ €Z¤|QœņÜō~•ÃjˇwVzdî  ´lÁĀ<įWôÛŠo"a–ÄLr#œ•#Ö¨k+ Y^Z‰Uå*6¤`u4žŦ´Ŧ‘ ļĮJĐí#’IpBČ2:8ôÍS4“Ļ#G Ų!˙Ö¨,îŌ{bĶÜciųTŽHãĨOVb7šKĉ@*WīĶŋZdoŠ]å7—–Ęs _65 uČüęĩ´RÜLdeĀR;Ô❴j'XŠųqīî{u¨-üųÕÚ ĖPĮ€āˇjsjÆ míÄ/:Ÿ-HųF2?dßmoeaŒ'5Ĩ„{ņĖÂC–Ü$ÆãĮZĘK5}ya¸.@ ‘˛ĀāͰ^Åëin¤Œ%Ĩ–ĀC]úŽ8ãëQ-ŧ°j‘ßM$2ÂXGp ˜ĮLšØ˜ímō|ųTLũāsúûÖvĨvlĩUÉS/ŲĘNÜŸĮž” ›:ĒD…U_Ũ•áJä`×>]Ą›í1¸Yĸ "ŒäëŪq§DTGiq4nʨ”ãōū•—i$P­Äãs˜ 6æį<ô ­ĒŦrÜ •qæ(8Į¨S흖2ƒnÆR<séüę9í¯¯¸¸Tˇ¨[$gšëLk ręđGœ§8ΝųÅ!G 2Ą|' HāšĐŗxdž¸Sœäfą.7}Ą|Ĩ,DiŽžĩ­ ,“ŽŌXÍœœãķĄŒí4ĄeuĻ[ĩ—Šnm¤D mįdaqü,2F}=̐ÕbÜÜK6ۋ•‘•åU~1ƒĮ1W4ŋßęʓ[ų b‚I$āqÛ5kWđ”ū˛Sö•šˇ$ŗ6Üm'˛x>´îÜIVšÄInZc3(BĀ1JęŖ>b–$¤zL֕Ű9į[•<T§‘â$’ `äæĄę3EcpP@ÚĄē›`ˆÃ`rLS`Žw¸Ø’"o=Jdšž Š8dĖÛæĀjhf\zÍ֛tMĨÕÄÄXĨ#?ũzœ]˨\äŸ ƒ$ŒXžžŊ*ƒÅNŦ§÷jHä×°’3 ‚>rHUÜ:õ ’Ąˆ:‚ėŲV˜ĒVčŌŪ6ŅĀ8āé"Î`Ѐ„ŖnI5•4n.ģNw#¯ŌŽ…–P++ŖGæ+YJä`V……•ą›Å egžŽk Ë1_e§É`AųA­ž=ÍŲeĮËüŋ­+åĐQ/$ŽYP)`T$öü8¨u;…Ũ…Ûą‡6{U 'Ô¤@#‘‰~}kĸĶõŅáŨ>fˇŗˇuŠg”e€ô#j,W1Ûáļ™ã^CËœõÅ,ņncą˜°ÜXüŠí ņ¯ˆoR3œ Į’p='ú“\ŊŨ”ļ—R‰gbĮ™å$ûž;Õ5 ĩžĨuÚ-Ë,a€¸ūuVyɐ[GˇpPҜžâHđˆd’)I?0\͟éNuŧCm¤!8$K€0sëBˆ6S*°Cå*åĀ+ū}i°<¨Āīך䊥$6÷Miā䌚”Ęš Фg… ģ:Ä­åŧē2]XiĐK,×SÂ•î œ–$tšąÉs(ŪXIlHͰ°õĀÎ?:Ũđä}íã_R6ŅÅ–1ŊĪ āí˙˛đĶŨ)–æhãLœŗ‘[v6š&žÎ‘ũĸæäuũz,ZN•§)[D –+¸ūĩĮßMwŠjr1{[(ˆpå”sŽzdÔ7Ęĩe2œ“ÜÁlŪE”Q!?yÎÖ˙bOs#,+~ HŠŅ77Ķq§ũ˛Å&haˇ¸ŋšŠ8ųAūU­cg} X–K["“´ ŌÜöšmíũ~dÛš–›4,H'–k™KĩYyí @aš3LÃå†Î,dũG5r}n-6ílmޝ@áįmY~OZƟ]Õĸaĩ…”=TÉĪŊtB :7¨īb”f˛—ƖĶīrwK O=É5rūkëqģŧ°ļ-Î#o1†+:ķPšõ•oĩi.P|Ģa…ũ+cÃÖ1ŨĖc:xŽ8˛įqßĐņĄÁIY"V†ôÎđH šÔ.ĪfˆlARø~ôŲkQÁ‚gąOŠŲÛĻdš‡~2¸ō¯$ø—ãųT&™§Ę˜8¯P=+-TCm¨xPv{ģ‚b$ęzÕį“^ßÉ<­—‘‰$ú։ę\båč‰ÍÜŦåĄ1âŽi6đÎ|ōÃwĩ˜G͜ƒŪ“’I$S-Å5cŗĩs•Ž ĨmxCH•īŽ/ĻÔ-mÚL ͎õÎíem+6÷÷GSRˆžÚwURd§øÔ5Њē=˙QĩÕĻm6Ōo´ŗe^y>č^2R薚l7[XÚæŨÚ9L͜§đ퇊âô{¨åÖ-âŗ]’ĘŗŖ?á]õ˙‘ŖÜjûė÷ĶHĄ%$P˙N1Ú§—tSf]ŧ畺A§éą­Ļšō°ŠęEĸ>Ų=°3íRęžƒG“í(‹w ëļîŲÆdn§ĖSŲ…f^øžæōĄ™ôôŽN„ƒ•ü˛3īY–>3:=Ō´Ķ õ‡“ųŸJ‹K ¯} []V}b†æVŸGfC0<Œįåjéo.~ß§á#ØĪ_2@äSũÔíõ¯.:…ÕõíÃÃnËhî]ĸ+•Pēĩ~Ī]ŸGQuē´ČhÛvã ˙=ĒĨNîëq^ĮaĨxeđi—VĶŪi÷hY. åā>™í]eŸ†¯Z)4J8oôĀ ŠiķæcôõŠ<¨$Ú"÷„–v-œįŊm]øMą‘-î.cHp¨XÕY=ŨĘVęWĐü-oĄÚ˜ōęâ?āŽWÜąŽx_AZōĊšØ9ĩÎę^-žĐ§“f š’RrË˙Ŧ]ouČŖšĶõIc™Wz"ˇîÛâĶz%ĘŽ'ˆį×c¸i#H˙ŗæA.WüöŠ´ã¤OjgĩæP“Ͱö"ŗôoĨû ˙Üj‚7 'ԟĒéŗXĒixI—>lg…‘jŖåīD‡k^å™4čn&f†/(Ÿâ_”b¯[éōĸcĖŽuéĩ×kĮ˙­QčÚ¤åēĩĸˆå_õĘÜjč-mR7OrzĶug{= TéÛMLAa§Ü ö˛BÃ?3|§>ØĒؚœ i÷&KRq˛CʏZéīŖˇ¸AÜrTŠËĮĩUĒĻéĖj:näũM/i-Í#N6ą\ũž/ŨĩÄr’2Ž~T‚+ö*ŗ9DЃV ˛`)#’zņ§Á *—2erqU¯ą2¤ģŒŽ6“æŽIĮ\j–ˇ{iĄÚĢ´Lîį֓,—ˆÁ"@€āŗ¯ōŦ­GKĶmUfž¸8Qš_@ö_đĒS}H•;¤ņ×Ŧ"Ōl$žB 4Ŧ0 Õ-ONa¸Öum.ŪË8ôÍXm^î|ÛéÛ" ƒ9MŠjœVÚ\!Žu)žōâ0[p ŠzŽ„4ŸS™ķUäkm*Ū8#v]˙ÖÆˇí´ŒģÛÉ$bķ ›PįT4ësâ?<ʰÁoj7qŖĐqÔ×nēNšĄMĪ™9|ä’3ô i6&M-ēŌ2Ęr7¸ÂõëHøņÉÎŲĐŲ=Ëڛ饐•åÔũi­i–ķ}feēܸfMΝO¨/dÔí­JŨ[…UFč0áÚŗíN—osÅÔ w bށˆesœČéĪįIZÃÖÆîŠWRē…BD`SĩAÉĀ#ŸOJĨĸ\­æĄ§ÉģÎišXöŽ@}ëSLšĘX§]2Å`„ąWĀÃ˙ÖĒ:î-ÍÄqÛ˛Įslr'c qø ¤˜Į-Š\ædX‚÷wëĶüôĢŒkobÎwFÁĖ8üzšĖúēí:d2¯ģW9<āU F{F%íÔvöį;FāH"ĻÅlSû>Š_į`•™I\ŸįSÚt¸Ŗįd‘€ß/ųüęģOw=ĨÄr]jÔĩMF[x>Å)”(i´žÄšZB]ųŌ5Ÿ”’–H§l}TZË6ĶÜßE;ŋ™Ėc…ė? čŦK;čåÔŧą|ä |ÃŊPŠšŅo­ņ™c‘А9$Qd4ŲéZ6Ÿmkl’K4rHĘB" };õęĖéōČĀ4jW*Ŧü)įĶĶÍx_[VĶíöĒÉ+ĸFÁ ĀįŊo”•ZQma0üĄöįŋoÖ˛‹IęmgĐå|Qmå‰Ûqēâ)čąäųīÅeÁĒąĐ…E”)FB{Žã>´x€‹t–g$Tˆ˜ô9?w“ĮzÃŗ/>—urîʋ–ØzĮķĢĐÍļõ$Yfō˜G2! †pO°Ē§Č_˛Ŧœ‰.”žŠīô§‰YJTJĄp‹÷Qjpeŧ…ãvP06¨Ģ} CŊ‚pĶmËŪJcŒŽibš˜8ŠĀ’[ĩcKy,@‰Pģ'ÃcÖ§G’ôĒ•X#$#’sũ)ØÉŗ{AYõzî;+MĶ\+*NdeHĪ9cˇ9öĪ5NöÚöÆū[Aö˜ ŖyĪNëĨĐgņ6ß`ŅbÛo¸ã œÉõÎjéËĻ</ġs&듷8l˙žž”Xg}läEd”–Æp[Īj‚ÂÔËwæ4R8 Kn9Áū}+JúX‚ÆQō¨ģ@ÍWĶY™dS“# ’Įé@î%f´H[ĘL䎀ô­RŅ ÍĻI…Bņ6[#•ķR]Â?ą›2ļĀwm2c?㚊ZēFĻb“mûŅœņ@&j,î&A„rĘācŊdÜģKĢF!˜,§#Ė 0Ī˙ZĩĨ‚Ú{bMöIĀ,īŽ}9Ŧ[¸šéÉŗļeˇŒ’¯ƒČõĄ͞mRíÎ'‰#rĢǜœu#˙¯TáxÚųš^É'=ÛŗIõĸąļgp˜Āû āu?Niéá f9 ‘ÚÄv€QLƒ‘žÃךi6H¤ 2ą9E<„<8Îk!ã2ŪÅo#‰¤.G͚Шēa,rųƒ’¤ŽÕ—<č×­äžÉ"'nīēOĨ&]ŠÜˇ–ĒŠ:†Y3‚AĮJ¤‘-ä" ːÁŽŋPēÖc[3 †hæRĐ ņũjŊŨÛ3K æ/ƒĪ?_Æųa2[ÉŗĖ*ę+\LÂÛjF§÷ŗ98-ĮJŠ`đ[Čffˡ@IĨŌįXĩŗĻHbXÁę)^ĀjÚM`ÄÛęĶDĐB’JĢyŽj3,°Ū^Í<(ĮuĸgB0Uu$ ÃøÕDvû\ĸSœd:Šwb-Ŧ´l—bA¸"˛įaÃ#đ öÍ[ļ•`‚hĀ"‘%˛ķôŦ[ų Ķ´Œā)$ĸäuĨbí:H’ídvRîq´öíN(ФągĘprqÍbŲ]ī9Ė{ƒķpH­4;æyAƒ•Ü8iˆĻĐíxŖ(c•#VÄZ•Ú-Ã1ÎáY˛a#¯™æƒĩ\Vž.LPŽģx$tĻ+–m„ĻI-æpe•¨u= Sŋ!$ˆ‚K€G&’îëmÕŦÂM¯ŦG­IŠÉmq¸vüņŽr8¤2;Rīw2Ĩšųņ×ųUĨB×_ģˆË n0xŗ´÷‘nX…•‰Såŗ‡ą­Kh§cŠōÕO$cĐļ¸Ģ8ĩžIj¨†ĘĀÎ´`XŽ#ķō’­ŒT€~Zfē5˙ŪjãOK[e‰R4eÚĄ3ü āˇ=ĀõĒHĶļMGq߸ į?ŌĢØŨKi"03]m0¨˛ĪčkWMđŨÕĐWģs °9h“†`?ôĩŠĻ•ĨΒ,ÆÚdDĖÃŪ‰Ųč‰Iõ*č^ ŊÕ¤ß9ŠŨ@šô3A°Ķ"TˇˇHČnÛķÆŠøCP†ķME/˛q’ŅČ~qøWFS,@9ÜN+-VįDRzN ƒiīŒQ\Ū-˛œíŲĀŠĀ!sË™< ãnŧ9ŦjÚõĖ—’¤:sF›É'ß‘OC;ÄZæĨrļ1ęhĒĖ•d›ØR}}ĢNÃĀŅŲØ—…ÚK–\ƒuķäûú~ĶiZ%†Šm­Á“Á5~[”$¸uQÚĻŨEnįeṋ›ëæŒĘ‘Ē1ũ)ī{†{ (¸#ęāėLéTüWãėˆdC Ü!Û,OͰ¯;{Ÿx°ÜKh§æ¨(PIj 6՝OˆõŲ&œDuŒq/Ũˇ\.{ķíëYöešÔLö)?2ŊËáHúV›ĻĪĒ4ˇ2ŗŌ l4Œ2_ŸãZē}č–yĩÄi–ā¯Ÿr7>Š(Ōí36íĒ~ļö%ŽŖn›‰Ų˛í%žŧšô?é‰cĸG{$íqut7ŧ‡ˇû?…q‡&ÕīÆĢ% D“>JēaQOŠë^‡llŧ=lļŌ\Ë+ā‘RĶĩR]„¤›ˇ•mKDÁôcÎ`ÚØFš‚\–7Œ‡–O™ŋËø ąqv&ŗk‹ŅBŖs ᾟZã›Æ°iZ}Ņ´XÉbeÉ`O{ãŊZV@ŨŲÕëúōéļíįJ¨„|ÄšņũwS]Yæ–0ÖY˜˙ËGŦ˙ëWŌšļ’c5ã9iÜŠ=€öŗ/åi[(Â)B[ĢQĘ{ŗ+RŊ–ņÖ"؎0B¨č*ģD‹ ŧ’0EHc ¤ž éí[ö~ ņąh.­4ŲLŦ~]ßAֆ‘|ÛXæ äÎ;T°[HędX‹(ë]‡‡ü+i¨G/# b8q Ā_ņ­ûOç[]›reR¸U˜=OŌĄčlā-ÆŦļĪ=jŦ“ŨÃreeÃA+Úĩf`¸ģ*ģÄlqÉŦšînĨrQFp t¤ÄžŖ#ž¸’S#ē–^@å‚Ā„ ƒ¸€:zzũk[ŽYTÄŅ–SĩŠ‘Ûįé^ŒēgČ6ļ'ØV}ü-knäÆä€zÕŠŠhC‹Zœ§\YÜFHD ļKpkOÂͤŗ›)ŽŖûJ‚â)S 9äįü=*–§į," “!d.Wœ…p~"YęĒĶ[4D/Λ÷€¯§ZRI FúŅ>•hˆMĢäpĮĨs÷^!‰­īŦnšXd)‚ģĪZáĨęŨč&iĨ%íØÂ›$ŖôĀC]uĖ^‘.Čö•FĐO×õĄ-ŒÜRmnpZŋˆ?˛nãû6“uæāeąŗ¨üj„W÷7“°x„(p´›ˆd<Š;‰R§ŊOÎÉ•œŅũĻ_ĩ–ČōŖÉŲמ~ƒūÕŖ6—wŧõ8‰l–Ü?ĨfO§$r’c2ƒķ(M¸Į˙­C•Ų’…X×ÃmĖtŲ¤gP$ôôŨøÕˇŠĘū8$°Ķm•UKDŗJ$œržũsšä’ĶĖf–Ų$dRNI*=ņŌ•­$‚BU$ˆãaˇŽG­.`qe}NÚëLŊ’k>íĀ/+ƒéüĒOßš×lீ]GœŒķ lâęåÎé|ÖíÉoBļ’=wOķ1ĩĖc$~aYJÅÂę×={ívū˙ŋaļūíË#Ã#¸ÜĖ9ryG’kĻđxC ÅėŠäųÅU+ƒíÍ*ÉéęrOųúÖĮ‡ĩV˛žKmø29-Įú{ĨzumXâZ+ŗˇŧžˇĀE!‡ŨÆEq:Ŋ§>Ųc3@ÂGL‚ĨzļzWĄĖĒ!ÜW%yĀäƒĮzåõiå’?.$ˆ’1!?…`ĸlÚą_Nņšęmä[C´Ō™îlœtĮZŗŠÜÃbÆ9\‚XԒq“ĪãYÚ~ģ-­ĨŊ•¤0GåÎĐ<Ęŧ°\|ÃßŊÎ{͝`¸ņŗoa2ZĪ<¸É8ĮËų˙} ĢÛRcކf§ĢØŽŌßK´˛Ž(Ō-„•H÷úšvŖáû ØÁ’Ū2vä¸oūŊCfœŦķkŊ9ÎS Ŋî9aŧĸ­iđk6ņ cPBœqų~uwZˇŸIąšˇ\ÍlP rČ ęqūx­M"x›A´bT¨ŒHÁĮ5IÛv+"̉R.mОĘA-ģnՕ1Ŋļi/Ąļ—ėōŪēp;ō?Zô]+yl´ŽÂ˜ČĖk!Č+ũīÄöüj…ÎĢghÎ!/rŌ 4?tWôūõ×zËevqiöUh¯­ŽŪØĘÄ<?ˑŽ[=9ŽĻßHg//|C{,d† HÚĀ‘ƒžF 5Īëú6Ÿ$-sm Ú,„3CŲSĶĩI¤E ZéQ\ų77;Ahîųj˙îž1žœQš-Ûb‡ˆĨ´ž˜XŲβ€û§ŸøF2qĮ~ßÖ¯ŦYøuR7U<‚Å2 'ōĮCÍgÛZ]^›ŊFāFņÜNęÎ_ dūzUWR…-ZŅw3Ą^:“õ¤.c–ve`…‰fUÚ+FĶNo)œ\ČÄ`p¤éâo.ŅUFû˙JŽÆ[‹IūËr6ĢFÅsÔbš—wËf"S‚OSNĶâĒŗHįmŠuū<† ü…†ÜԖL]„VņcqáˆĀĻI×øwFÔĩ+‰Žm¯ÍĨžņ ÄJCpč0?‹Ö›­é|:Ģ‹yŪ[PĒ7ģnÜøäįžMrWwÅÍĩ´“˛ ´Š¤ uJč!j0î´c?—‘‘NJ ĮoĮĨ6û]Ėëũ2ŲíVO+Ë AÉ<°ÍRĶā†+‰â‘Ëž˙ZcRBĐG—%@ČāĪ˙Ēŗí.ä$˜ķ*qŸ˙U-ÆlßDdļĖ˒Ų%‰ä?*ĢŦ-4f0„äHöÜØ´×w&v§ųZrhÛ,Eå¤ä’ČÎ7ÃŌ“ôëÅĖV‡hPKIžĘ;~5fYXÜ (0Šäg ã§áYJ>Ķj_äYŖ °āĢdÖĨͧŲ#ōŲĖ€’Ã8SBe‹HĻŗÔĸ†ÚéŖ‚áŽL`,ƒø{‚?ĪzÛ{¯ا™2#Ûō ˆÁ\qøJåŽd—ėđ>| 8cøfēûY|D–flâ’2Ŧž|’‚ÅNsÆyúÕE\™nrî÷ˇ*d}ĸI ’2đÄrOŌ–AjŦ ŠÖ#Æ<ą¸¯ZV…ė‚ųåĪc`9˙Ö*ĩÍŨÍŋ–Qa &6šųŗRPŲ‹°–îäåXãŠKd’ÂV[¤š#!nČÍhéXefGgfĀbŧéųԒN[O‘/cĖ`\0'Ļ=ū”VįŒ/[Ļj¯‘ "ČĄã›'§t×%ŧ˛8$ģíČÛéT#d^G’RĘ–lsÉĢnË ¯—°ō”™¨DÂ1˛’r3€r(ÔF}íĄąē_3NØVĻ1úTÖĨšāFlËsŽŸ­lEe,Ē]ĸgVä0+SOĐŅŨD ŒB¨ÜO_ËëT¯Ô.ZđĶh—-ŽܒF2ō. gžwzzÖē îË+M¨HŽņœ´Ō€}Đ{ D˛öM(Ŗ HR1“YézâëY˜G pągņĒH ŨGTÔ5xfM=+8Ayg'Ģ2{{m"Ųdģœŧ×Ę_šVÎÜ{ čõ]yC;BļIIPŦBea yŖû]áŌaČØHĀíîiØkrOÃ|š’j"XCĖQ–É#ß<ײŲËöą\丑Cg 5ã3ËĐOkĻG-Ė„&Ą!ÂGŒggŠŽ@ņdÚl6údË%Üe°ŽÎsüÅD•ö5ZjĪGžę hÃÜO*s´ŒÖxŋžōÜ6Žėūūa€°ŠâŽ+äY$P6ķ´¯+˙×Ļßjzt#ĖÁ9ÂÆÉ5ž…jũ{eSszōŒąã'ØvŽĞ"Ôę;i7^ÎØ†Ö#…yųģÔ^5ņ‹nļŒĸsĀ;ō#ŋZä ¸ éú\’O{)æõŽŌ =jnåļÄjčCTÕĨ‡|ˇ{f"æäg>DöŊ1<×öņÅ{7öv‰lš0Fv´¸ęģ-jxCÂĐč6(feyʎƒ…˙ëûĶüMŽhŅĀÖ7s ™ˆ%ŋ)(7-DôÖG›øƒS'ģMÃöģt¨ˆĸR‘ęŨöŽÛBĐlė´ØįÕŨÄG1ĮÖ8ĪĶšŽ^AKk§["¨<ųkƒŸÂ¨ Mkē 8ådQˌ8H×ßßÚļpIXŽdŪĮMã{ëíYė•ZÚÁZ8’æcũųO°ôŽīÄwŪ%ԖhņiiR)ĢX%Üč•Ōø{áĩÖĨ$w§™glx.~ž”Á;LIy¨Ūl’K;“ĩTd×o |-Öu)ÔjDŲ[õ%šl}+Ņ´ŊAđīĪc <×o™Ô˙JéŖąšŊ„§ÂģjIģ•ÎgBø}፠q>PēQ…ķ@>çækŦiÖÚŽ1 G~ÂŖ†ŅUČļ#^ ÔûS/ôĢŠâ Ŧą€ØFáYJ]‹I˜’éöŽ“ÉHUNæ“îįŠë^i¯ø•ZäÛZK•Č8ū*î¡×ÄZcŪ­š4‘îUļāč &žČpļō:ԞÎō’HP(ČE `}*hįŠ^XĪ<€Ā×'ŠŪYčÖĻIBŸˆœõü閚´×Ž‘Įi"ᤠø ük7mĖēĻ¨ˆ2YŗĪ~õ‡#ĪÉ,ŽbPA\Ėß_¯ĩ6]e$€ˆˆėc9ũi¨ŠSFķM k’ā3Í%ŧŅÜcSÔ‘Šæ`}ė#$’Äފ'Â0p@äŠMXq•÷,M™œfŠ.IÆxÁĀÍ:x¤œ&Úp2jĮ˜†œœŸē8ĪáIˇSR8–0Á'ĐĶ'G‘vmBPFECa,ÍĒđ[$ՐHl”Āõ&‹ØM†§á‰&†upb¤¨ zŸ¯ZņĪÚÜÜßO$ĘģÔBŒr søŠú2íŅT2Ą< œfŧĢ\Đ`ŸR’ęāŗÅ!e܁äô> ô­”›1qIØķŸ jwZ>ļÍlWs!VCĘH>öz8÷¯fĐō˙DˇÕnZHXyep1“ĐvÎzũ=*-'ᖁwp=ÍÖđūfōĢĐq´cë]Eíģ&ž!ĩ*`¤`ŊŠķv&vzœ.ŌÎ?rđŌąÁQĮÎ^ÃėÁ–Áa`•'ĢhhrĻÔyU<.Ķž*ÄúSFX$ŠŖ!•ÜE6ŽŦ%eŠËĮĨZĀÆP’l'—ĀíÚ´ŦmĄ’ūÉRVûL|†Ë}áZæ(Ŗ{į€H=;M‰åÕŦ¤…Ü&ã<ЉÅ$8ķ9WögûߕĐųoūĮåEqY÷=.SÃg´d¤°B€ÄŊ+;OĶ­īõk‹grcōà ‚‘Ķči'Õ^ëÚGˆķūļN}ih–‹o#ČĖZC†f#¯^ĩčMĻÎ {u´ˆĸƒPļ™ĐÄ.ĸų–L9OĨsZ¯ŠāX$0ĘŗO€!Œ!ÚŽH­o_4— ›Ķd!rŠFâ@ī\6¯šîLLĄpN?lzöũk+Ųhik›ŪđĩÍåŦz„×*6ōŠI$ĩúVÔ ZūĪ_mŌ™î˜YméۏoJ—IÔ|-e§ĢÁvā:ņ X¨l å{sôŦ/ëŠy$6Öaā6Ŧ$ˇln$ņõôĨpŽēķ_}­J(d<î؜ã¯åIŠjë*Čҁ‚N~•ÃMâ{ŲʍA§ō1‹šoMŸ—^?:¸Ø‰7} Ījq?‡m/tģhŌÆG#Ë+ą•˛FOˇ^ųĒö°É‰ÛD[s†!ņ‚ũÉīĮlևˆŌmBĘÆQļ‚IĖkm"a‚€Jˇíô¨āĮb–û&$“Ęķ´Žß¯zŠîL6ÔĄ$ķ/FÉÁb¤| ÖmüĻ{ėˆÉ’(yą’sëíZZFۊĒX“Îŗ C5ĖņĪ.ã‰pŖgß7š•ŨЙŧ[:X˜ÎĸE‹2uúV]Ũˇ—lŽÃ HĀŽjی/]Î␤ 4Ûđ•õ–ĩw&Ąr[ËšFäÜPäsŽžÜs^…Š´„gģŌŦĄļ†č˜¤cÆd•áŠĩ5’hâŠ&˜Äg=)+^č–RĘ-æō(v XsŽqúT2Ü\…!@!TrMijÚ+č÷" œģ ¤t#šÍHĻŧs0]Ŋ@ä€{P31âw J˜…QÜšŅ“NKxTJ~Uāî%ŊĒYt§ĩ+šŨ !XäĨG>Ą o.w—ШL1ëĮĨjŠ>ē ™}‰Œđæ8䁒=Ŋw^ŧSåÉyLƒûąō‘ôëú×å]\#ŽÔJ˜ąíģž+ Ķ…íÂë™A)$ Ā.;ĄĸΉ´;DšÉ!‘¤‘rg-Î3ĀãˇŌĻ€Ã%¸*IĐk@xjĘxHĨfŧŽÜãYéáÛÍ5dKIRå ‰1 }2;~ ĻZV3ĩB,´×&2É'ĘŖ,pxũjĨ<š•ŊĨąžá.H+’įķãōī]$v kŠéÂíQ渜™GEŠ (ė˙¯­køĒ8ŽtÖ>\nęŦQJįŅaÚčãb›u´ĸTČ`Ng+TbØŗƒ…;Xœ,x™B Xc "*U˜•ŨH83Šv ėôMWÃöö†=BÄ=ɐ°”Ļėž8OJÕÕ|ge}§6¤ÛI<Ō)Q˜€EĪRyū•ÄižšÔ$ r QĄÜĒŧ1Î.ĩÛéÚd6vŪZED9;xl÷üMkwՙĘ}ÍÚxP˛ģ6få€(p>žĻ­GŖ›u5 ƒsÍ_š×4čnžÎ.å‡dų•~§?ʖ]NÚ4S5ĖdvrHũMką =ØČí]KāĮ#"´QāŒdŒuã8Åb\köí De€$pŦwÔ 9` ƒŒÆâãXÔkĄ¤QŌŪęąDĄ-ä‘‚G]4<ŽúīUžĻ+3Ÿ!AĪáQEĨXîOļ\Ou(ÎcˇR~"Ŋ&æ 6ęŽ["c#ŒĮļŧûÄ6I˛ĀŽķ‰2ÆÍ…^ŊE.UMģ™šÎ­ĶN™gdļČĘ[|ŽČüķ[ ,lolŽnn„rŪFâ$dLtĮÖ°n4Ë]?HŸSĖ— "FûĒ~•‰ŖęWžŗk‹w {pÁËõ8§Ô.}]"UHĶ=…:%2ˇ –ë“Ō¸ŋx§Pņ5Ŧ§PˇHĘ6ā +˙õëŦÕΝ(Č d•8$Q'dhŅsv ĀôĨā Ş}OŽ"Îéĩ;Čėėg“ŒČĀđĸē[ë…ļ´>cœ‘ĩpIŦãS™s5d.bžŗĢĮ/nb1´szķÉ­Žmõ˜æ‘HGQą—cė?­j=ĐidK%sŸ2ōN=qëPCv†rēbĩÕČâKŠ˙ŸJÁÍÉķ2}Nú͑­âķ>BTš[›hnbhš!$oÁ 85‡Ŗaã[kûķą-OFôJŅžöb˛YĢųwJšCÔ0Ž¨Ë™]ôÔÄēøuŖI+n€’H9ÁÍqëŖkē¨ņé[Š1†páíí]%ļ¯ŦØj˛E}#J@ΐ̐}÷W[ĻjpßG1ˆ§ ’‡æĮãRščÅdÎ~ÃHšöØ>¯¤ĀŒ•L…øRŪ2&Ō¤{9ÁĪĘr?]“Üū†¨]Ų< É”wë[˛šRÎÎ7‰ ĶE,ëÃ2 ũFjųHÄD(U_âĀÅsęē]ŅkÛ3å7üĩ•_JŅ´ÔĄŊ‹x$€9ė)4îR•‘jH•ãmĒÃņÍeÜī€4…‹`g'ĩH–Ėv‹"Žô8# AÛīëŸÂ¯Gsäųˆ›ËdÔĶ_ʏäLo,FTg=9ôĀUŗ5Ō°u“œrzū”Öĸæq.žŖ̈ųxøÜW‘P‰.82;’X xĨŲVTNdāą•Y)„c ƒŽN9æ‹ šä+m Į’ĖØ8ĪZŅŌŌÔ­÷åœ:…$đ9Ÿ,BYTäãŠĩĨöûc"o5>b:r*% a4ŲŪeŊGåEöĸšķį(­ī&\ĩÔhK’8wO‚_*āoĨ-FÔ\~œũyZ„Q鲕á€'vú~fē-NaŠHUZfšBNqŸËú×L¤ŲĊēÎŖ$vČķYÜ,d`03ÅsNö7˜#€;˙úĢĐõ[dˇ’™3 ‚8n:ŠÅŧ’Õ-æŽ=Ŗ9mĒš˙<úÔ7cDŽečŽl„a˛Hl–éWĩ *æv†P#B$*äîį=ĀĮJģá }:;‰&Ž(†åŽOSÛô­ ī!™U U1 āëųv¨wÜ#gĸ2E’¤Ņ°tugŋ[[ļ[ˈ!Ž8Äj>nGĨjĨå˛Éķ8ČPJ‘Ī_éUŽ…ĒĀķÎäI! ęņ̓R4LäuK+fšvHRŒŪ_sŌ–ËCGĩŒČō•<…^3õ4ÍFåd’í#ČxāsúV•Ŧ˛ų1[%ļ (`qÉúzU;ØmßĐģeaŒ,ŒęčA(Ŗ–ÛūOj¤á4Œ›cî'?į­j]ßʐċ3C,Kģg×9õĒI>Ąp#žtt<2ųxšlÉZÌ-öe’I#B~b7qƒžõԍ{C´ĶmŽmc‚i‚ąĮמIéÍs×z@ģÖNžˇ?šļ„Í)ېOĄĮĩ> îéX›eXĄÜāãōôĒ:jCmče6ŋ&Ĩâ5—QũÄ*ÅQebÎ??s]EĖ0ĩŠLˆrt<ŧņ×5ËkÚ¤ņ$2œ(Œ($?É5wKņYiqĮw˛M „e O8ã­픒Jæ”!ģUd ėI#1gĄôôÍdØ[=œW)tD|ČW,N? ¸úÅöŊĒ.b°ą%¤# g§]4čŖIüĢųä’ ¨ O§9ëę Üįoåŗ{]°Ģ4ƒģsÅLPO ÅÜh"@ œŒéUī_tRB!*Āä8ÅI™tŌĖ°HœņŽ(J”´il%™LÉšO;Aâē+˜&ŠÅB"'ˍ­ČCĮqT,"Á‚æ6 ŽEm^Y4Ë…‚ | ’ا'Š1ØāuXeÄIŒĮz†ĻķŅüŒ ŲäœWŖ\xWÕ¯–Hüģu ķÉ+|Ø˙td˙*­â+M ÃÚxŌ-ÁģÔĨ‘L÷ ÍÂ;)>Ÿ;ũRæY’ŲČl9‚§ƒYEĨ82pr3Úĩ¤ĩĢ8ÚŧyãXCįZE9 ã5, ĸÛ5öAÜD[°ÃŠĮkéōG ’‰ ĢŽįņëYP…ūŅ”FûÉE Œg5>gˇ |H~RĀrNi†Æˆ >“ˇī(äzX0is_ŪĸZÅ$ŽÄ"ä…ųU÷š{d/vžiEŖc…eâļlŧkiolĘÖE@BFÉ㎔â“ŨŠRkdd†Į[熿 å@UĀāTâi^ÚQ)p­Áā0ëøķVuN=ré.¯••ØģŸ-ÆO\ Æŗd¸’7-°t¸Ą¤$I6• äbœŅf&2H šŽ+%w*1‚sކļm Ã0$0 ĸ▍(K†'ĀäT¤$nKŗ $á…]$yJAĀäžNtŲ*†Ũí'ŽŊ¨ŊĮa­,š8ōōœÖĮ‡Q]Ę$Ŋ6ŽGPp$˙döŒˆĒI2H `šFI”Ģ– ō(^˙=ęŖŪ‚gkŦęZriŌA#‹—eÂĸüį>šöõŽ%-î ´…<˜‘ÛéëV`´ŧ`Ic<äō}*EļE!æ2\RAvĀé]0Žģj&ėŠRŨŲ™6ũĸYu 5ēĩ VRģ€AfÚI˙?ãW|ˆ˜„ÆzqH–BU$ `ōÉŽ¸RîĖ܊_jŊa˜íĄ„žœ~i#ŧžEh‘b le€>ŊęĖ1ų ŦvîÜ# )Í]ŠSa6“ÎM‚AršÛ\ąÜęŗ āĘF ¨u.ôŲá$žúÚFU)氕yã}Ū-Áœä@ęiÃN—Ra4R4RBÃfOųë\Ķĸž¨ÕJÄSŨi×Ö0k߲\Á h]Û8~x ķĪĨ?WŊךŲ#[ xá,Iöė*Ü%Ų’ßUĖŗ1 I°AÎ9Į_oje÷Úô9œę lN6\Æ 1ô2˙Zå•7fhÕÎV%Kā^Y Ũäû¤ŸĶž˜ĶØZ"30ōœ’y§Ũ›'‡|,’nĸrŲSô˙ëW7Ģ‹čbŽs+Ē– H<Î*ĸÔLåβįÄ6šd[H.@$úū5Ëę~+ŊŋŖ…ŧĢvq:īūšŦąk”ÎU9#=ęŦN¤d  åīÎ3úÔšļ )ˆÍ nÜšbKãÃ-Ŧ÷…ÜĮô˙?.^Ŧ|ÂŲi“Īo¸'•Ū­Ā50:}˜UHLŀ-&~QzŠ,ōO72¯Ę¨āg˙×O‚ĐĮČpŠÆ2} &ŌØi>ĨÄuģRŗ‚p28̐hŲ:9dˆŲÉšhŸpŒrĄēÕŅz˜ÎūP^vĮĪõN/q]}#í’Æ.î™áAæbøZÄē=ŽžžT‹†’EųGŋšĢĐOИ–ūķô>b2†™šG`ēMËąĪYh––(ŗ_â眐ŖčjŖw{.Ĩ2éúRošuUßã]ŗĻrĄ[Ÿ*mĖČaYoŠŲhvŌiÚMˇ|NÂ6äę}hŋa;ĸtīZ™Û­buÉ,xīė+*ÉįŊšû>Ÿ3I¨Ūü×wcîÆž‚ˇm|—6ŗĪĢNŌßN îųũzÛĶ4 ]ĮÉļR åäcķEŅ6flš%ƇáÉmôTin˜€ĖĖsßđ¨4­4‹Žo]ĨžO›#œ‘žÂēCēÜ2ųrpdÜ‚—.ÎpĒ9$ũ)ĨrY‰ĻÛ[iË#@ŒdlåälĩhiĢgy%äÁŒĀ~ĩ­m D7MĢŋ•ōįbœÆškŲg›Pû>…dÎĨ€É‚i¤› 5Š×]øžŪ[UķŧRîûŗÉŒ_ZãuũvûUžŠĪÃí$ą(lņŽ7×Úĩt¯‡vĻs¨k—j'/!/ˆÁŊéÖExä!™Į~p+2ÚÚVŗ¸ŧpŌ[A_zúÕm>Ō-o_–3.ČR&`ØÆpĻĨŅna‹Âž%…ĻW…<¤fãƒ=ø­Tl€õ¯‡ŗũĢÁvōFß4 顠ČÁĪë]Ι¨Ã­iąÜÄCŖîGä ŧ“áíĨÕĮƒöÎūNœĖÅÕnœØ:ôĪ \Å< (”ZFB+…$z}:Vkâv-V‰kĸÃ"@ŋëŗ9ęz˙*áüO~oõ&YžÜq Ŧ?zAęۃÚŊ\M Fz0*X`{U$ŅėĄˇ1‹x€#ļåãDĸØÚ<é-ĨÔBũš–(T–Ņp€{ã¯ōĨ—QH­ėâķXü¸UĀ+Ĩ š\ũĸũŒ{‰ām'ņŦíkLm8ⷌŊŧŒ÷)ûÂ~ŋÖ°ö2ëąĻ?—2ę6÷-#Ky("9Á¯FžŅ/mĸ3F!˜(a´üĘßZåôë/ŗÅ ]ŦcķĒždc]¯œúäđH­éŤ8̜ŧļ‘ŨĪŊ͘όŦ7ŠČÔoŽŦ.ÖŪÚ°ã,ĮÔO­vZ•ĸ_DūG^QĀÁ˛Œ"ō-.`á”ĒÎŖ \˙J%IKŪę+Y…‡‰áž$[īôyÉ †8ÖĮ˜_X2vÅyõƉ‡ĻŒę6ķj29;7aW‰īŅ‘-ėĄŠ5čŖæ8ĒNËŪíšŲ•Y‰õ<0#8ŦƒĄGorfŗCœæ?á?āk#Kņ~—{¨4læŌøeZ7AüzëŖ™īÎ}A­-mP]3`DĒĄ ~bÃ'đĒ’¤ Ä;BāĒ÷ÔK SBUą¸q\¯zļ:‘ŒÎĸE?0'€(Ŋ‘2Ўö÷ė—ŅÜ[ Œr9¨u=\_˜´øYŌ& ÜȧæĮ÷ĖÔo’âE1 Ę;‡AH–ÂÎÅĨUb n,O&ĨĪB.Í]OS)` ‰Hŗ‰ŦyëõŦũ2ŗÃŊ˛ZO˜‚3ÍXĶ4‰õŨ ŋ•ÎĮ’=žĻģ›-ŌÃcŦ~cö Ķ[ĸŲ§h÷7„I(ōĄ#'=q]%†—ŗ‘*dĀWäū]Š,rlī¯cSĪĒCĄd!‰á@Č5V﯉$Zō„C%C¸ā¤SÃJäž2i,ŪkĨķ&„Gä/J¸eHĄrAíÆCĐŅjWû+m%ĘėāįŖ Žö‘…!A˙Ÿz˛ī$øÉÆq’2<)RK°ãzЛ*+@‚K`]J°89Ÿ~Õe @ģ˜† A¨Á/r#Œg#$ž€UųBĒŽ@Ī“I^ÆmÎŖmlŦŌ>ÚN ¯8ņfŋiwĶĪe4SŲ1EîöúđkŌž =›ä´ˆĘüuÉ˙8¯>ø¤ÚI32æ—g1qš‚™ŋ–j’rŅΠԙ§đĶF{Mõ›ÄÚ‹ōD_Â=ŗ×ōŽģUŋ:~—4ʆY8P›ļåyú×7āOAĢøzŪ_íą,.q´d)ΏZÜÖã[&UŪǎŽqŸķÍ@K™ëÔķk ī5Āŋs5Ü/œąĘ€yGéšw‡<-fšü×ō"8įÉ@ŧ!õūƒņ§_Âđj6š†JĄ‘må8ãkāĮõ§kģėėLÂFBޏh›ię3žũ)E;Üę¨āâã{4vļ‰fDDGįåœ Ęņ ,nQY>ûŒcōĒ~Ô§ŋē–R“ `—#ŽsøūuĖ|QÔ|ČíD:…vGí$2?JŅhîqÎ<×W đ}ĩ­×‹Ļaķ$H΅ũr0 æŊ:‚čƒ×ž†ŧĶáŒŅÉŠÅu$YŒ†ˇƒ€ĀĀūcw×$G!T|Ļė(ÖŅw9eIueĢ ö÷.^&L,a0PäÁēŽqíQ\ÚMöEG”HáGĖ–j{9Z ‡oCÎjëæt šžņā…'+1rŖė1ų ̰ ÉĮ¯OԜD0Į—qä˙ž•5ÄBÎ]HI2TƒŒˇ~k2RŅ\`ŽØĪŗ‘š¤úė=îÖp@ ņŽ•]uyCîm Ič:Õáa )/Č#!ŗŒæ¨]<6ķ¤A Œũį‘G:d¤Ū…Ã~6ÆCŠäž¤ŌZęlˇđļí‘F ĀëYōĪj„uŒœõZÍĒß@Œø>bōÜsš™IÚö*;÷öÅĪüúäJ+ûRųø÷ÍÁiö=cÉo,&kv22Ų2Ēd˙ëûzÖΆõŖ5˛BÎĒđĸ‚¯ÁČĀü­@‘@BīxČØāgüúTRXX]M)€”¸U3 įž?Ī­wĩcŽ/CĄÕõ9Ú%åĀE1îÁîkŠēšû5ÔĻ ™92$Œd(>ŖÜûVÕ֚× uö›ĸb]%”€Ŋ;3ĮzäîmĨG•IØ"Čž? †Rf÷‡]@lŗËr Ÿ,>úãÚēëm ė‘,ēƒÅ i’BžH5Éø)[–¸šXēŗ#c'¯Ô\\øz‰>Ķs5ÔĀĢ4ĖuõÂВh\ÎæmŨÍĩ椟m˛ä#íīVo + ųģ”žĄ”°íØ*cęáIŽ"ļŅdíƒî€qÔô$œU Vöâ⢛vŅĀÎqÂ—)§31uãm,ä†|yG`Û´+x.e`ø/Î_'ڒ$ȊüéZÅĖ6ƒĪ{¸ã0ŧ­œČĢī{}rDws´Jā+,CjÁMRņĘ­Ŋí­ė>P•FÆ ¸uųÕ9|I"Įmn‰&Ü<Œ2Ŗķ§ppvšrcą IS"4jOĖØ9Î=‡§­gŪ$ú•ã2…•†å{u?…^Ķ4{Ũzâ ËPZŨd[™Î3ŒgÛÚ§ÕäƒIÖ&6æÅ8RŒW–aÃcąĒZjfÅÖÚ2Ą@ÁĀ'ŊMW°Ė0äœ †ÆVy™KIžOÕÆŨũ* wO%i9ũU"˙iŅyũ?ÆĒA7‡oŖ 6`ņڛĢę*đ‹HA \ôôĢ*×+áĸåvÆ9ëOQÛŠ.™¨ĄKxŅĀVp:ޙމHēD´´ŠYdVbŠå”zŸ§Ĩyō Q…Ė'iÜ‚kĸĩŊģĶŽ Ôâŧhŗ €˜ õæŽ[ žĮĄXéū+ŧ™cŊšK 1X-3ʃą# ?\לxØi‰âųŖŌ€ō.w(â ÎqũsRëž9×õ9ŞÎRQšc]ēõ=Z‚×Ė‘˜ŗE)#Ëdā\į“ĮŊ6-‰Ĩ –¤ÁaΟNõš^8™s q’[>•nK9áI%2 HÎãЁĮOj–$ˆĮĢ 6i –YĄ¸†;›D"H]€rËÜ}{ŌGNi˜Ō u=¸¨ŧŦ‹=šãī)ā0įƒīPK<1/Ôd–é@Î%ÕDi„f!œōHöŖ¤čšesxąĸļ[š>äÖ~Ÿiur ĄšS•lüÄtâäų20'ŽîųôÍTI–§ EoáK[vInp¤`H]‡ķæ¸bʓs $Éš†ØãÚ@$œžĩâÚō)¤ÜŅ…*åy#Ĩ6î$^… DŌBîv’]J`VƒĘˑPā3¯ZĮģŋHáōá e˜đkFYm‘d|€AĀäRŖö”hˆķãQM†–lį ë…'“ŠŽĻ}€8 šÛĶl•#@@<^Iĸ({ĩĶ#bašžņcÉ&¯C`c‘˜ã8$ōÕĒ ?fŨFĮ\ķU đŽY÷•;†xëĸ’Vl%ĄšŅÆ$‡•‰–ČQUž—*›Ĩ#žŌ›32Č ŋ9­h• }Ŋ@ĀīšßSFvæv2Œœ–#ž@˜ZP‡ P¤ōI­ Db€Ģœ€Āc4ŋ“É'''ˇųëKëÃäW(ˆ˜`œ78Å*Æ8l°€jÕH°RĄtâ’k[äÎNō ¤ĒĻõ#"ĩļj—V rŧđkNŌ'Ā\šĀUTßåüęĀ—cЉ%ŗÉ)uN${ŠÕ+†ÆÂÍÁh#$Ž‚āįŌ¯EukzíesåÜ&Ā$^§įŌšų.ĄŠ7*Í#!TōA=ĮŊc¤ō[˞ *Ø$8<ž=hX?jˇˇaûnRĮˆ´ |1k4–'íÚ,ä-Él}ąųg§ãX72Ë>’ŋdDšēŲ cŒŽĩšŒfļ›ËšQsi*”t~Ŗļ;d{΋GļķīNģße+–ŪE*ņį'ŖŽž¸ŽzØÔ~%§pö°–¨ĀŨpn˜ˇ×Úē-"ßHKq=ĖąģŗXĮéܟ|öĒoŖI xZ[rÅĸqÁOQSÚøzåԔļzōŽxĻžÃ~Ŗu7‚öāyš‹˜Æ ƈH$PŊâĮo4˛ĖHģq“íÍtqhVÖĖ>ĐėfCuõād՘,ŧ‡ chˆÃyÜ˙6?LUōˇšųV†D:tę" Āîį‚8üx­X#V|$'M }ÚdĢy—ˇÍ(`D1ƒūčįSVÚMą.°Fz&0qøJ‰E#HĘä3ÆĘ<ؘ ÷Uˇ1ĀãÚ­dBÉHˆáœåā:T6‘ÄĒáŲcˇÍĀ'éOÃ‚K`Ē1ŒŠ/t=™]ŦËB$ŠG^p3Ø{Q´ÕģĨ¤ˆā'$Ž1VâÔ`„ōÁÔ§ĮJģ Øš?–L°#8#Ž•7‘>›ŠŨļŌG"€Ø+ÁrŪÚÅn$ēH<̉2ZB0iąyE,įžGjšKˆâIa¸@æĨųę8]ĸ6ĐČO<į­D—Ŧėá›=Âã¨Ē.b•It š~ö*ۃgoqu,“,DvúĶKŠ ŨØ›sĢ^€’5Ŋē‚YČäŸA[ÚeޜĻD\¸įĖ‘˛@öĒž#ņ^™ĸÛYZaĀD<^myâcY&Íe‰ąŧĖŪĀU+°v‰ÚjúŦ/9"Pr¤āsT´¨­uk–^™ rD_(¨iŸ/Ĩq&ĄzĀJ•wd‘īé]Ĩ–•§øzØy*įĖŸjnIh‰åoVGŽ‹='ÃÄß]ųqŒE8cŽÃšÍrZ-ÎĨĢüÖVËlØPcË;×K{ĒÚβ-Ŋ´wSšÁ’sˆĮį×đ§é—Č÷kdu42°æ;xđŖņ¨Õ"Ŧ›ĐeƋ}k ÜĮ'›69BrOͰĒÖļԈˇRÜ˙g!9UQēC]‚C <ĮĮĢHzUvŠęîMėT'MÄ䚔û—ËmŽZãÃW7S‰d¸$ū˛y71÷ĮJՎÛNĶŲE&Ŗv˜;Šî }‡A[Ų°Y 3×'ŠĢwŠYŲ“āš Ņņ0ĩĩ3§ŧžē”$h"\’;ą˙>õšņÍ=Ų@ōħq<×DūĶM ĘĮœ\ŒŪ!Ô/f–ŲSėō… œÕĻ‘2$›Yĩļy"˛˛’S ŦQm }Ø×sáÉgšĐ šEH™Áfr+Îĩu4{ŠępT­Ņŋ­mø?ÆkwáÅ7Ņ,3!eŠ8NâãŸá=9ŦjSQ|ũK§-NĪPÃŲ\Cî›Ë8ô¯ҝ[JƒQÕo–3q4Ŧ Č2p=é|g㠔Ŋ‚ÆÉŪĐą ,Čų|ņÅpēĨ˙› Œ$†1Ây’+œ–ÛūEĘÍę>mEĩû‹šK$­ÆŠŽí4ąĘZ@ĒĒFLĶm•í-Ŗ”í`8Ī5V)å–,ŸŨŗsŠŌÂVļ„0;Į(Ė…Ž72+§ąŌė­ü Šę#}ÜŽ!…UՃqŠŪIoĻÆŌyqŧ¸'E˜ū”čõˈ|;&Ž-ĸæ}ÍtĮæĀÆĶëWФ›Ø•uûÛm>ŪÆ;ŠŲC…r7gûÕë˙ õy´¯ FڜŠ–RČZ$ ‡@ô,ŸJđČ$Vf% ŽéŸ_ūĩz†bšņF™pöēƒ.ĩnCEæ&Õ 1ō¯PáI§mZh{œ2¤Ē1•` ’1ÅJŠ6A œd ÄđÁŋƒEŠ\§ÚÃDg#šīëøÖ†Ļäi—"4Ũ(‰ˆBpI˙ëÔ4UÎ6ÉĩEՌ’j,a’Aĩwdŋˇ=°­ĪŨ=žûŸ’RĀo# ä4 ÛPņ m8Ė›‹* ˙õWKâKŨFÕ-­[33ä“ĀUÅDyœY™ÉéÍuĒk°C;8“į™Ÿ'ŸĀ}+ÕAQ…MĮīšÂŅ4K? i᧑LÄ2VāŸjÛ2 €{J¨ĢaH„ą &įČ& š†+˜Z0¸ ‚ œ0#Ū¸Í~úãK֌‰,†ieŽ1Ëëí[ZFŧ.ÕEÔ+m)ہ>”)kfšwČûTMk$w$zŠä5}&ęŲæI§Xl×î8vŲŪ4JģƒbA’­œk”ņUŅä™å"{\Á9ÆE9ÂęũInĮžëzr$‚ķNB,’ä¸˙Õŗ×īĸŌ#’Ų怰!KŠÆŋ…gÚZŨ]ę–hÎāo ˇ9m§¨¯^ŊĶ"ŋ°{i-ĶfÃå’0‡JqO–÷!+œŸ‚ücyyzšN¨ģį ˜æÆ“ÍjøˇJ‚g†ũbLˇÉ!# úfŧū[yŖ–q#˜u($ĖLū5čútĶjžŒ\œÉ,X$t ?úôÚæ‹°īĐå.-líás„WT-œŽMf›ÆžÕĄ€rXõ>´ËŅ4“ŗLv„%v֗†ô¯í?0ɑD ÷céS؍ÎËÃOÚ,4ÚPmpF2ŪžõnīRX>HĀf’OŸen#ˇĸ„ĨE13Üģ†?0<-k§Se{hS´šžöéˆmęG/=ú‰­Ë]9!“Γį˜ääüØU¸m!„/— (ž0*ŪÅCœčj[*1wÁ°Šũz‘í›–läôXc2IÉ=”į֞îÎp<rj.jDSËĀåÉŽ@Ž\ģđHqŠģąZR`¨š|QÁƒ$žŧQp܆Ú/,—PĀ`œrjmžbŗH@^8ĨyáI.t85—>Ĩŋw’Ĩö’9YļÉ.#ØyˆSĀęŦ/ÛÅsĻ0ڜdzŗåM;–R˜!‚‚0}SUîâq§NL„ĄļŽÄOjŌ=ĖĨit8īZĪŖjEžãˆh‚ūîGķ#ņ¯D'΄Æ@$ŒcãšÆļ‰‘i#,Ū`\wįŽõéÖV˙L†9UĄģD $s 9Įįžzū5RBMŗ‹šÔ,¯ôčËĸ˜„™‰Ø†Fė{äuÅ$îē•Οd႔SŽÜ’00ŋ‰­ F¸S‘ÔĒ„Ë Ú zdūĩĪÁz,DŦ¨&ŋ› áOÉķ´gØvĻ&îîÎē':6ŠdeÛ{™šÜ;cüö¯1ņŽų– Ü"yĪŧF9'§,zdäp+Ņŧfė|¨2f ¸>đüûב^ßũĸ×Hvæ†62.~î?ģM­ æÕØėüq%ŊŒ0ĮYVB@uāƒžk´Š{k*ˇ—”1žqúw¯)Ō¯fĶŖŽâK’‚PKgøƒĶđūurÂūę …ÅœėÖ%‡~˜úæĒ.ÆSwg§5ĘyŠÁ˛¨1ģŊi¤ŽX6ÎŖ*ONÕĘiš¤wđF #Kˇ2 pxäĮĄŽ’ ĖV¨ 0ã4¤\‹U†ia.q¸F;c?­fBõ2\R—ĐÕĢŨ\ĀBr@8įšĀ–õíî„áĮ ÁČÍRVFwW.\Į-œ›īmĮP§‘VŌ'€y.¯¸gr>ĩĩę2‚q=Cô"¨O1ąŽm\($†âĄ;î6-ΈģXöŦ‡Š' ĶŦ´(§Ä—Pƒ1m# Æ*!âXWæ’"TŒn'k_ÃZƒjRŧÕIT.qTäí`ŒS‘ö+ûíų+ēūĖĶ˙įßôĸšŽuō3ÃŖF’IsģŽNW ü?úõ{O \ŧŒ‚%D$€NõPkÆ$ŲÜyŦØÎ Į¸ĨŒyŗŠžČˆ{h*O˜đ:vŽ–Ė-c^cæi˛ĖŌ˛Įr|ÅB0@üņšåĩxā{UŅ\pĒõéÜķ]Vą¨Áoi,ÆÔšPAāũī\•ūĄm{­Æ™$l …fëŽ=)1¤KáH%Ŋ‹Č7/ ›,P*ô'–äõö­ĩĐŧ=e7ŸwŠ}Žf„î?^äŸÄV_ƒtĢQ'k›X0$Nw7āŖĶÜÖėē“fĖڞĒ×. ĖqaĪdūf’Zvv Đš‘,4ë-ņÆ ¨Ÿr§OZKįÕnUHŠ;e#Ģä~ŠöÚŧi2ÚéVĒ–ø'‡ģ~y5W]ĩeMÆä“ŲCdįŸÃōõ.hįuˆĄKˆÚ[ŗ+…9RŨ@ŧĨJ/íío`š]ŪR¯ĪÂîČëëXΐÄĀ„HĮ sëø×KgĻGskŒG›U‘Ęõ-Øš$t3Ũé/3Lvģ‚Å>P1Ę ąļ’ī× Aˆ.}qÎą=Õõĩ¤ČÖĘ é*”>ŊqĮÖšŠõëËų“OļÛų"PĖG=Įˇ\ž[ę'ŒHžū;tˆ™ˆËl¨W<úNĸ°4û`cœãŊvwōÁeeemi2˛4<¯‚Iõ'œûVūĸî…`Š%c.=éŨÜWžÅ}mnv6Z}ˈŽC;[đ¯E‡Ãm4–ˇzÂBlíÉv×įāŒ{œõé\W„´›ÛŨr ,ËŠŠ%”˛×ÚŊGPŠÚÕcŊÕĻ3´_Ĩss%ļÁ+å•ÁĪõúŌ[Eq-Œ€”ŒË1¨OÑBܧ­š‰%šiĨV˜œædņŒp=Ģ`B—š-¨WgL’ømŲā>ĩ“ŒGíP>Õt“šÎ=+§ĩž OĀDM曆Ā`ĮųÅ8„üŒą\Æ˛BĀĢß.>”ûøÖÖđˆeTĢŧ¨ā)qõëLēœ^J$ƒÍČ †ā¨ëĮëÖĄšíoįiee! ˆëõū”öĘ÷Yœ\’š9Å\€Ā°“ƒƒ€J v åŽdŠēũÖŸ˙]NŒĪ'úĩQgšI&ē‘Āķ“#ŒąjžŅi2‚>lpM #–Ų$d<’F cSņ4§*0Mj.›!ĩT+FNŅ#đë‘O6đØ[-˛ė ,Oõũ)Ü,3J´™dÍ) ņŽ@§ë]]„Ĩw0‹…ûĮŽj–‘f$•"TyH-Œ(=OøV•ËH^‚xĶ]‹KŠ ú–[Ë)€ÄœƒŪĻōÄëÂB‘–\š§iĪ?˜0XWĶ"¯ÄŒ‘,dqĮÉĐŨIEhKM˛ļ#  xßßĩbļ6OS؁ž*t‰Ĩ>dĖ‚p ô5D’6ŌrßcYš !y$…SČriņÄێIā¨ÅO ŅîÁõÆ ĢaTnų1œŸLõ¤Û+”Ĩ*ŪŦ@cŒíĀΤC+’ ŽjÄĢ+‘ĩöŠ8ëŸJClÆS’c¯j.UˆĐŗBɎÎãÔËrیRTˇŪÎh-ŗĻ㸀xp*Äa7,n¨ą†#æ$f´…NR$Žg ŧG€’O@NOZ̟1ĄU߂pzœ˙‡ŊtOl|ČĨ‰ŨŋŨ?ÔU m–áVHÛu ä]ôęß^†2ƒG%%ēIxĀÄÎFÎ)c¸—ÃķĮ#!I€ĘFCŒņųsÚĩo-žRɂŋ‘÷Ŧm`Ũj š%Ö&b¸ëđ¯[ ã^\“z4sÍrĢ„ž5‘oægHÅ윪"`Šõ=oé77z”Ō™'g^ ÛTŽsĀĀŽ7PĩP‹|5ŗ¯ĩ Á[ŸĪŠšĨË5…ÄÚXšlĄ&&NŸķô5âæW†Ģ§Âö7§%8čwibY€TĪ'ĒÛ˜ “Ë`ė˙ŦM“¤ō}œŗŦĄ°{ROe4Qų×Îv…@rÄũk‰Nû"ÜtÔxvÛ šęÎŲX‚U%įߞõjŌĨP] 0á$ãÜûWώ™,×Qäß1ÂeQNU˛¸Áāõ'õ­Í2E͐$˛,ķŦR6ȏøT=uéĄÕŗG"„(ĪšB•#?•fyëĶ“+8$ ša,×ļ¨Ār‚@ĀĻēY[Ũ’û噞Hčĩ&ŒX­ÖrTFëĀƒõŠFˇˆĘDŒYˆĩ,‘ųčģ‰ rHAŒ u•ĩܗNca,yųŒļj=bŨœŒ Gįy˜\ǁÆ*Ôđ+÷€€pJŽ´ņ-•›˜4Į°äŠ‚kšŽœĮ9&š]Áö*ŨĪųŒÁ#Px'Ĩsë7o/öq(œĢNÜsč+ĨēŅ/%´–eÃÆGŨ~[Ö-œ1ÉʅāV€āZG]ŒÚļå}ÂRë3›™¤ōFA™†yúWiiaaĄÛ1ĩ„Ė’ž\ŸéEîŋĻiöĖ#’71€Vø=+‡Ô5›ŠæiŒĻ7c–#€ŖĐ 7Üvėz ë3\Aû„ō˜‘“ ĮNĻšOëÆÍ–5ĩß1!QÎvûíÖŗėĻÕuHÅļ–•r$œö¤ú×WáŋZé¯%Íû}˛åÆYې*‘i\įl4;ģįŠ}Bi§‘Č!S€íĮ§ĩn$Cs%ļd#`Irx÷?Îē;NÖÉą)c÷•cÔ˙Jâ5ŸÍ{z,ŦSd ūđúŸÃ­4ÛGJŗAj>Ņsu-Ôã(ėÍjØxŽĘëMkŠ&@"bŽąŠëč=OŌšĢ .æú47AĸļQĀ# ߇o­o­ŊϚŠíJ¨BŖôūĻ”­°ãthA¨ũĸĐLŅšūđõV#“K5´!d?ōņ"üŖũŅQEÕę™.ĘG9čsųšKM’Agi÷~Ļ’Coš%ŨõžŸoæO3K3p‰ŽkŧÕm´Ŋē…ægž\ŦQ§ŸđĒ>,ņ ZK=´žÔĻāŠ%Ņ5m ‚úÜ"°Ę2žāk0BņžËŋqœ õ=R õ9ŒWčūa!‹›g°ôôŽrëÂWw¤ZYČĐÆš%GÉŲ“ąƒŖGrĻęk{ļ˛ náärŸeKu4öŲ4‡ėČĖëčŽĩÛ]éSÛéë Į3íĪËå| ˙ZįoôĂÜĀܤņÍÔjF8;!M Q‚1Vl/îlŽVæŪâHĻÎwĄÁŠŦ´ô¸‚vųŒˆ2)Ö6ļ÷Ščō´.Ģō¨LîoéM;2ųîzŧyŠģÚj/ūPĘH˙+ņ¯QF7V‹42! €ß05ķ Ží.ō7ęz“Áíž×ŨŧÖŌDq†Ri5¨Ķ_#ĄHĩ˛ž:‚Øb`ĖoG°5Ąo,.æEBĶ2 Ÿqa’„“ÜôŽWÅ~!‹NT´†åîSŨJ{Ōč7 ī<3Ë]´žP`"AåŊMu1ČL ´ŽO5ĘiZ•ÂÚE5Ëųû†ĮVēPŌ´< .FG#51ŗØČxĒ.đ@˙ ÛņUøa, ųQŠ.¨Ų$T6Ú@Ģ$o‚E¸>”—,›3ÜĨgâ ļnf/ §‚?ôۛąqŊ“…“†ÆiÎav‘l@ēA€dcĩũ{ūŽYŊ‚ĨĪ™į9–4á6ÖĘōVbqî>ĶS{mvÖî7˜$ Å~bn•íļú‚^Û¤öŌ)Æw’+Å4›i¯dÚ f‘K‡ Ģî}+ŽŅ.îŧ/~ß…:eÃgrĢúũ+D‚2ąģĢxau[ĄwŗmÉĀķdīZšfšÚ]ĒZ™ƒ¸ÉČVœh €­•8#ŠâN*’š.OŠby\+…‘Ü ͊î)!ž)*ĖˆeA’§œÄb¨[jÚšse#\ä$`āŸĘļŦ4ĸļh'`b0éāõĮ=xÍZ˛ÜÆMî0Ņ/muΈJŅ$^@`‘Ĩ¸ŒđÉ˙ĮĒ_B§ÆvA‘ɤ9ā €Ž=Ē}h§†–0 ˙ŽŠ^RŨNb…I,6ŒuÎkÛ>(l˛~Õ`_ŊÔũqųU_†ūŗ‹MŠöâyįA Ī8ŋ M2`ívûūˆÆ´ø{eöXÍŨÅÄ׃—lü™ų@<ãß5‡+­’0 !UP1Č¯`ģ) ÜI°žÖcŽį“^=¯Ü‡ŋrYō č=čZ‘#ģđÕĸ>)$H€¸=›˙×]ÕU.Ė8 tķŽoÂÂH4ö,¤†aĐ÷Ā˙ëVåÄS\*Ŧ*ppxâ¯t#*öRŽ2ƒvpObk.öā4ĸ"NüpāVžĢ°C垀ppŨyŦDæRęIõŠķ'm âē”…Ž5ä š'é";H‘Ų€qÅY´ŗžYIŽ€ˇß<`W@4ËdE$‚øÁ'ĩMÛØvgŸto“ė𴐹äd(õ¯@ĐŦ¤‹€bĨ‡Ŋ7ËũØ P0jũ˜uxĀāddąÉĨ&kN6w7?/ƊnÛĸą:ĪyíŽõ"¸Øä‘ˡø Ų´Ô!Â)rĘ Į_įXĄ-ƒÉ-ÃFb`å‹{ZŌŌ&ķnÚŠ@Ų'ÕÔr&>ŌŨ5™.ĩ_äĖvę{9?‰§_ØZEfʈČT ųƒŋÃņĢ:ļÖÚDđÎę$†WÜ ĀęqÅg^ę1O1urą‡ĀÜp1Įõö¨ĩĮ{#ÂvĶ^9;Iä(îyŊsW/~ĖōFs.ėæĪĐUI#‡R‰t›8Œ$Ąˇڈŧg“Úļ¯lmôØˇ×0Ī:‚"ļŗåA˙iø8üŠ5q\ËKöKõļ´Â1 3ėČO§­iÜč^z+ēI+€3$ōm=0ŖĨbøFæ8õæ&ųdYÎŨO?ūžkąÖuöPĐē‚BĢÉĮ×˙­J:-ô9IlâD–ŪųÄqå—l…< ƒÔĶBéžÖôEm1A(ÚD™xūžÕcPbą‘‰Č†|‘Xne’įaä° G\úPÕČRąÛÜę0Ë É´Ž|ŧ9fÚ9ŊrįI"†#eA €Gúū5˛îmôæwÆJ‚Ėyđ>•›hė5ĨŸ ‘ũä€;R°Ķî]ÔÕˇZÛFˆî„-Œ_ĨV—I×ddsĩIūĩ­Ŗ;\\ŧ û˛ˆÄä€ ×Ū´%ļW‘‰@…ŽHÎŌztôĻ.…o -îĢ`–Uhü­ĘvįĶ×ŋ5Ōëík $—i%ÄåˆVéĶĨ°ĶaKtšgIrį$ŠįŠ?§Ģw#ÚÍi§†Ü˙+H§æ'Ą=ēP˜Ō˛8}\[KzĀ,BhÆĐ—$ŒķéžJeĨúÃψĀvČ*Ä8R‡ÛüjÍ֐–‘–ē¸Č;ĪĖOĻ=Ģ>(mq xĻxI`3Įķ§`rvą–g’æ’7ÉÆA<žß­\ŊžŸėiæ ˆåŽQpqZ‘[ØLvÎŧ`8#=éo¤0€žåįuįŒĶDļÛģ1 vŧ@3’ŋOz׆Ö(ÆLk'9,ĪķĒ1 ‡Ė)!Ā.1˙ץäH­FÎdfČ’iˆ[øwĸūŲ˜˙Ŧ¸c>´×ÔnfˇhĄ`*Ųfī“ô¨Åĩ܊wĸČė0wļŅßĨ9âf)EI؇ƒßņé@Čâ&N"Üį'q<‚G|˙Z•oŪĘUe¸ÚÅv‚ŧ }j´c‰B|̓Āëڝĸ2¤Pí×°¤Õ՘“cŪõŽ]Ļ,Îā“’y?ūĒ’)Ö3“ōœd¸+ցm(€ŗ)?Ũ 8ôĒŅ]…܏ČCg$tϐ™jîqx™ ûA“×üâŖšxĸDˇŒyĶüĒ=ęĩÍȜâ÷˜ũĐjŪ›d÷oH1g.Ũ[˙­Ię1Ö¯ys!ōŒIČõëĐ,t›K[1ö‡6 äqX+ĩ‰@ždŠĀžŨ=;Õ­KUUĘŨ(T†’~š4n5ĄĨ¨Ã~MŊĒl†'Ž;Öd‹­IGš˛FN2ŖŋJŽđK{i$ņšXX…-БÎ:ÖđŨ{…<Æ1Œ1˙ëĄö.*éÉŽ™n°ÛT°b}Nk>ūČ%Ȏ-Í$ŗ’?ĪZÛ [ānÁÆI뚩ŖžĢö™:" rAíøV‘ĐЧœņ)²°'<“V'KR#ʓÎkZę9ÜL˜sЌ¯íƒs˛‚ÍŨ“™Y~íhxWÁwÚÄČĒ ;žá—ŪĻŊĢHŅŦ4[UP70ęįÔŌ¨ÔtÅÉÜÃđW­ü/c’"Ë Ĩ?Â}ĩuW%ŧ%æpˆ\w¨îo͚y …MP6÷:˜YoÛʇnL@˙:Ã}YļÚ ķæŊ7+E–ęõ‘s÷WJđņÆI@€}~ĩ¸÷pēũšÖßĪw„ëJ@„¤—2(ĀĀTāPÄŌ9ģÍÛÛ4Ī8lļJ„û§ëM,žš&h˜‚V´uÍU-`Ē$ŊFHū•ÅNō\ÎÅ%HžN0N›DKv&‚g‘¤RÄÎČ<`Õ;ĪSŽá'DIBŽŧmbMC-Ėļķã*ō€2ũAwĢĪ$ŠÕl’Ŗ$ŠĩFRĩŒųŌ2SBŧŌ.”H„ÛČN$Ak"ęØZjģļ’…ÖŊÜY[jZĄBL`́ŅĢÎu/ Ũ˜dŠdÛ:Ę@É&‹4õ.ÆUŪ› ͋˜cІLwĒÚ,!”…yVE?0G#+].•elÖąÃ3OųÆĮ]§Ëģ´ÍAf‡"x|†’OáaŠĢ KŠ Y>×p# ’ŽÄ ëĀ'Ô*­â­9nTNĻ4’0}HĀ­+Z&FŗÄĘF1Č5ŸâŒMnĄÁ*HäÕYĩč>Ĩ}?YQa,žDAJČĘ~lķœz]ÜĄI‰ö>Հmsė;גœˇOjķËųîlšâÜ3fE !lrA?™Zö¯Û&šđöĐß +ql#eōƒúf¯šú3)C•&ģžúŪĸ$íŲ`XÛ(Ē8\‚3ĪNÕIÖu+Īi‰wvĸĩÄÆáé]-ö‘ĸnRlî€J~™Ŧ>Â(oŒrZų2@ę#,x$įôÖϞˇĩ†îáž&ŒŦ*qˆš\ õõũ+Câs<žĩ“$q“ŽF|ˇ˙ë×'áââ]Œ…vÉ!Ž}°(1ĻŨûūˆôm~V]6GßĩšE]Ųād˙†kÎŧGŦZ”av8˜ž§Ļ?:íšso1#‹Xø ũN? Ęš¸šŅĐ}‰„öĖr#“%“‘ÆxôūtäģŠ:ė6S+ŗV,GEäYŧgRbĘÁAÎ*ÍÎŋ<ãËļ˛XĻln3$oJ‡EK‹›Õŗ‰Ø\Jā:‘×'üûÔ6_ŗi]š…%KÅÁȊ?2-ØËuūĸą­'{‰æ“>ÂTpïE¸ĶŦ´­)Ą´ˇ‰îPĖxb9É-ũ>•Æ—ĩ{õ‘"Ny1F8ßõô4ČjÆß†ÂOĻmyö?$€šüęÅÜ>Z° ø$>ĻšÉVûL2ÚPŽîG‘Õ€Ā59Öl P˛ZŨ´Å@c!䎸õ÷¨ŽšąXMŲßÉbzßđ5E'wiîYōŦĀdōKqĶëS\ šTI;ÎrĒ XlLæYöíaģ€zôÅ;NŨ:n‘âC)ūâôãüiÖŌ\›†ŗS†‘J̃˜õwImĐŦ$E0…[‚Xv¤ô ĮŨØ:¤F  ą  đ žš=ēįđފĪĀQéîږŋY§÷q1Éí’_AY7ōų[ĸH˙s"įkŒí#ü?•møc’ø—KŠ˙UÔįžØ3ŦVâBJ¨$`“ͧAÛŊ ÷–ēwqėTœ3œ’ĩ8˜Ē† ßttŽĶÆš}ÃZiēt1˜ėAE‘Wœp=}s\;@Ģš°@Ũ‚ āvÃ]‰#Ú69ę@č+4D7HdĀÜzv~•A …gžŸūēĀ *‚Ø'hH.W‚Ō+ˆÔĄmŠÜ/¯Ŋwšv•k *Q<ÂTnĘįÉE€¤=ZŅ´Ôįŗˇ1ąs$ŨųĄŖC`¸Œ‚ėÅšä÷Žjî\˛G#—vÉcŒ*Á™îW˜H į$ aĩĖĄĻāA˙ץ0zš†æŧ¨ 'Q˛:ķž+Ŗđuŗ}•Ĩ('R?ÎkĪä…õm^8Մi÷Č?wÖŊVĐ.¤Į` 9¤\Kq&ų…$įn*ĀŽ;xõÜs×ôV&XáŲ‚7 gÖ§qæ”%2 FxÆG˙ލž…ûĨfĮ1ë\üķ¤ĒBۃ[ZˆĀ@{`Ÿ­aĪĖyb n8ôíIlTˇ3îb”J¤8RA'=1Uí’e”…eŸ—ŽõĨ9Ũ’b9ÁíšĨVIČŽšëVf64•ϐŖp:ô4ö¨P\č3Å9cŒ˛œÛ<žĩ!v‰$ ¸Qč(ˆY! p 9ģS„ĖĒQqÎx#<ÔHUޤ 0Á5Ŗed&™A9n#€(vĻŲĩäˆf,#:dúWC‘l˛,‚<0Æ0rjĩÄÖēr ܍Ē2Iô‘¨ëōʏ R­ĒœŊ‡=š=˛kJXz•_ģĸ&SŒVģš÷ē•Ĩ˛ų/4i!ČÃ8ühˇÖtølå,ã#8ڌAéíŪ¸+ÛV¸t1ē•,T`ĮCÜÖüöąų!CėŨŋ íXq~ķ2öķ’Ņ[§žģ’1K1Âíā*÷ˆt‹ˆôåš UÆn!O¯Ķ×5›§Gä\’ČÆ[—Ščĸ՚Rĸo-ĐŠFCŒœũzÕTŊ7ĸ÷¯ÍšÄŊ°Š(ÕHF0{Õ2]gW,tž>†ĩîíZ)$ŪHĪÎ{ŽyĒ,‘‚ˆ'ƒšö)Í4rÉjcŨÃ+xœ_Gž™U•ņŽFüAæĻŧģēr"’w0 8“‚~ŸŌ´¯Shļ܋šāŽ čjގĨPˇÖ…ŧŠÔ1\gËn3øđ1Ôš%ͧe'tdĻ”ÆĐŖ31ÆĐ3Í]xĄˇ`.I•ŲpR>@>„˙…hhڝžœÆánÉrvGl{T_ؓ\ąkEe‰!¤ų@Sžë‰-4ÜĢëŠNėĻ8ĐĸŽ>XøˇãøÕë+9]\¨pį=žĩĨiĄŦ9Ũ)ļFjk›¸í Ē0,QœSå毟b=6ÖŪfšíĶrąGžjgÕÂÛĘc@AÚÆ­cKŠ%ԅԁŪrHČ­›M)X+H2KN”o¤G{jĖØ%ŊD˛;aAäđOéZBdQĐˆÜHācķĢ3‹KuU,ƒ< ˇ'đĒÃWY—÷*ą*œˇ~Ũ)IF;„[cî!K}ģđŖPF+2įS+šōĒNqŽ˜Š.ŌydŒœąĪ-#gJXĘģōĀe•:RŊĘ0%s.ĸˇ3å‹ã`<Į˙Zĸ¸É+“ŅO´¯8âķ#E‘É5VÂyĶ7'09 Ao VlĢ€IQŪ”*Ŗ ¤3¨j{m:ëUœbb€íf čSÁķíėĄëޤûQːų[8Û­F÷Ëōã‘ŅNA y5^ÚŅüŧ“´–$ōkĸ›Dh/Z;€T‘ķf Ŋšļˇ…’Ú,āģōÄÕ.äŊqāk‹‘†(ŧāķŠ†î# LŲ w pMliÖÆlČîA|– `âŽ[øZį[šA”ļˆ’I:~ĻĢev-^‡?ie{~Ã2I<äa;Ž+ąđ—‚ãˇēj‰nXƒ•âk¯Ō´´ÕŽH'īĘį’+Ŗļą†ģB—dŽEg:‹d\iļõmlĄĀč¤`fĄ“Q tma…•~yƒW {ĀÃ•äž™Ēˇ6Ēy’I˛5É#8ûÖ ŽĻÍiĄN(â†áĻU{ĢĻāe˛Ģūoėr] ×ŌäEÂ~>ĩĖ›ÍO[ē6šb KAÃɏ›ĶK*X[G%œĒOSŽõMX˜´ũîö-> Š€“€ąF0Mb]ßĨŗ4÷N¯vT˜āˆĮŊQÔ5s ˛­˜7§‡”¯ĘŸJÎƒÃˇ]Ë5ĖûË|ÛIųJ¨Âۑ)7ąÎk:…ÍÔī!Ė™ųļļŖM˛–âd’FÉ “[ōčr>ĻÍcœx#äCī]`šŋ›+ nœ´/LöÕŖåŽÛ™¨7Ģ<âî;ģIŪĘc€LŸxŸaOƒFšúāŦmĘŽYˆÆ+ĻÔM•Åņš™Ü{úņjŠäK+œá˛T1ĪĨ;ļƒ•&\Ķ –ÎÂ';ĸųHƒZVē˛\Ģ’4š!ߒa LJŗÛA— Ąƒ™fŗ%•ío<āįdƒ<ōO­fÕõe'mŽ“QÔôËåō兜ŽNí¸ÁĒqiÖz“Gķ)<zT–ĮvŦáO̓厴ž(!€yh ƒĒȨ{š-w0—Mēļ”[ŖīHÜ:‘YúŊŒ“[‰Ũpņ¤Ž„4€oY29ųXgÕ~ÚÖFŠP2â“v.)°Ķ#Ųr„ŋąŽ‚ē¨É”0yH :€+žD…q…flõčZIgŨ‰Ø Î@^ Kķ4[YOz‰Â.ö'įVmÍÅÍÃÃ~té^(P0/œį;ūifbäļĶŅTg•ƒNŖU…iđwqŠÛ´¸”ĸÆą“…Á# ĒŌ4fbŸAšŋ`ZX#’'’95/R‘d\E'|FÜ`ÕkÉ`H$PĒ)Ú#=ĒK,›Ō<Ÿ—k9?…gËhŅĢt8Čär)GpkMLW[{ÉáG ä €ĢĮ˙\×GfĄĻ)(ęCtn•söÖREö‰î ´’1ÜĄsōķúúՋģķgˆ.,@=kVõ2åŧ]÷G—ø‡@ŋąŊžŽegÂNģĮQžžÆŊ7Ã8ˇøs§/ŪFō;XœõëœÔLē‹)]VE&IüĘqõü+ŠđôN<olČ­$é…äŒ~̞M3*—qåg­Õũ”†[”ûR1*&PC(ã¨˙ §i+ŪëvĶC4 ÷s` Įr”Įyņ­_U˛EË.É$;KČ*ŖŠũ1ÅgOO}kK[ãÛ07^™üé3Sļņ֔÷^œ ĢÚ¨™G@Bį?Ą5ÆøNkŊn ¸Đ›{X\ŒŒ`}2īšõė˙„TŪ:Û8Õįņ^™ab4šœE1””vl)w=8÷¨ģhÎ;´Yø„]o휡6évÉŽOZå|3ĸK­Ė×,ä r2N ?ôĢ?ulįô—ą\Aw´ˇeŦ9šX$÷ŌŦARr>‚DP¤/%ÄČfVųÉ bŦę^)ĩŠÜĮmsōŨˇp_šŸG˛ē˜Įį\ pŦšĶnnÃŧf)Ŗ@cˇúR“)lG5ë\.Ķs,¤ļIEāū‚eqäȘ‚åōÃ$hŠîöy•c˛!$ÍVŧ­FŪmĨ#F^Y;õ+B×ڇüų]QLûmīüõ‹ōĸ§AœtōT*T‹i–2JܯoĨ]´×"Yw3á‰äĒOŠ5BūÂęúkXÚ9>@s _–@z}ĩmi–PC$i$A”)DË[ŗ+ĸ°…'Jå%ü…„ƒŽžÃ§á\ŧĢ4‘´°*Į‹gŠČŽģUĶå‚îßɌˆ.RHĄ>Ãļk(é÷í Č† š'§_Z7);2žƒ–ö@N%Ā)‘3Ÿå[šÆ§sEnoo%˜b8æbØôÆz{ÕmŧjOowÅ4ŖF^ā~ĩĶËa šÉ4{Y3N žƒŽ=čÔZ^ėâb‡Sk“r-Ú"y ũæzĩ=¤:‹JąJ–~JãÛĩkB4–܆Ũ |ČG˙_šĖÔÃ˙iÜEˆšXC0N B ębDËkâ ËUÍâm*ôLĐģ™ĐÆ1ÉĮįô÷Š`°Iĩ+KXՃ"y’îäîü?•uŗé6×p„V;”ũā0c<|ŲõéI%ÔmˇąPA} ×tķŠF ģvļ×ŋQ\ÜŦÂú†Í— Aķx ;qũkJæÛQŌe$ņĖ„€B/PrëTfŗc,4ī,Ž6’Eūî=úfĒÄܧ97˛2ĘĮ–2ī˙ęŠ`2Ā#‹ĘD—$( —'ų w5v;imíŧØĐ ūÁ@ëøb¨\ŲUC;ąšfØI8TĪķõ4Årig‚ Ī2ęãÍ*DNs_riöúŠ>Ÿ)úŽ—¨ÚŨŦ7p›pbIsg ¯jí|ß čX•¯îŠîÎĖ={3õ5—Ž‹ë䜌čÆÜ?‡Ąö§b}Nn ž`U­œ`Ŗrd•uėšßŅípŖ=…Y˛”CpÆĘō0sūzÔē…ÚĀĒ%ōÎ0ÎIÅ&R1gC Å$yW6…õĢŦŽāÜÆP\qŊIĀnŸ­CSÜMŧí ĘdæqZPi…›l›¤<n‡ĩ1"ÍÍíėB7…•@˰=ē}zf‹qsc“ ĖŅFćErũGC]/”FÉ3Ļ’¤đNŸ^k:’öāīBˆœ}čfŧmˆÛqƒîMVRČÄ2`H'ŋJÛŋ”DĄˆŒā¸ÍbĪrvņÉÉÆpIĒD˛Ē!3`ą<ƒĀĮ5$ķE„É$õõ¨%ģ FOzVtŽK–<“C —ŽĄûáå§Č✜ņAŋ8ڀŽüžkKĩĘ äįŌ§MŌ(ŒH‘R3bÉÉc ‘ŽŅ–=08ĢÆIŦ‰::€Nä~UŸŖJŅ+Fęy9vzõĒԌÖEw˜āep@īĪéRÁ<'“P–øÃa9=kŌ ‹ŠáAFHŽ+Dĩ6ÖqšČ“€bkĐô›DKo9ųy9Ā=Uėkr¸UÜNpcl9'֔6ų˜‚¤R[ÆĨšRTƒķezžõNÆâWēF–bIĮ§Ô˛Ū­0\ $ąPy5‘t$XU¤ėđ­[ˇyg–ÆvÎ*…ė^tnŦÕËy8Ļ´A%r’HÍjd :֛j†}Áąŗ‚p9Í$J%´láP0 ¤ņRXĘ$>‡€jd ŧ!U8!˛G|S<ö;Čl×& ŊĪ‰‹n9\DķBzœU âvÂw+Öĸ€”´UfFAã?ÎkaįĶcE’vRvŒ€›ĒŊģėg]˛$ąL>_Ū ĀúūŸ‡­hG-ôÖ°ŨŒg!°Ø84’ę)j%ļˇ cɨ$>¸¨f֗ėĀIĀígĶōĻ’ęÁˇØˇœ|¯ßIĮ@$ôę§ˆÁk˜ãPHĪ#89Ŧ‹mQؤe1Č%‰įŒr*Qחs,jDe›,zŽ?JMŽ…+õ4D‚áßs`q‚OÖĸ1ĢíHcķ‰éM†Ė˜Ö60%°$uÅjZDđBĄUN É<­''b’3bŅ‘Ųä™uųļÉ­ŌŦf´įU pv¨ÉcéIw}˜ŸAˇrˇmŠÎ˜TbT1…ôúRI°ēG\“­ŧ-ĸ`”Ļw+—b1ÁĄŽ)ĩų㑐1Ā8Æ8ŅiąÎÖžuÁä)9 RhiÜ­Ŧ[›†c„$wČŽrįOi!dVËp#uއVY.oĄ‚Ú7‘“ĀZšgĻ}‘’iTÉ(ÆÕëΎ˙^­4ĸKWe=ÊļņĩØÚĒ>īBk¨‚Ø8Ž;eÂŊÜQ—Š$^˛ĄíÎsQÂWeo6օüŧq ƒøTžgąK•ntÄŠ€NHü@Ѓ Č2:WŠøÆ…ĄĶ¤ßrĘv’¸UŽ˙á!iäš=VE’Íĩ° Li7¸ŨTļ={S×,tČķ3†‘ŽÔŒ™›ú ä/õ{­jdļŲ„fÂF‡Œ×,ĩë‰ĐĮpˇgvHÉÍlhĐø’ĶT†iŦXŅžl.1ô̌#÷!ÉĪĐôģ+xôë%‚ É<äÕy"EWk—Î˙ŧĖØ$žÂĸ{ŲŲ†Ōg“œ°¯“VŊmĶÛ9!°Ē¸ ˆÆīsFôØÕ7+m ¤€_$:sO#I<›"`‚EcŲKˇR†™€=ˆī]K Ŗe° ƒÜUKŨØ"šˇ+M{kd†+mŠ@$ˇ@+Ôĩi.Ą´v.Įį—<‘ũ*æĢ§]ŧĀ(-p6sŸ­P)2#•,ĘN{Ķ‰•Ūå$K[^YyûĮ“øVEÕëÍķ}ÜéZnˇlKđŖ…éU`˛°R É"´ZėE‹ūļwšyH$*@îMjÜYŦHwaš2pđ+SDĶ’ŌŲˇÆT“œžĩ%ΗėŌÉ. ` VMęRއ:—&'>^CąlōkjŌ…`“÷X‚()ĨY¸Â Ī,igÖ­¤>T,~P:bĄŽ¨kBÕÍŦ.†FmŽ88&ŗ^å,Ô¤39åÍFĐß^Θ‘ŒgœžUøtčPĄ—įp9#)š”€Hؖ%™™ē“†ÍXƒF%ą6Ąĸ´ļŒ(`r <ƒP5ÅÂ)8Ā8é֘n­b‡ˆĐ´ƒž:VMȝÔ!ųØāmm3îģ‹0āPKv9q$ŨH‹…ŒXt‰Ôy“Hp6ŸUÔ"HyIēL‚Ā Z—ú‰L’2‘‚@ÂÖAgš%€uũĐ?¯ÖŠ2DHMÜ'Zeƒģ5H$ŧHV)öyĀaJņž´‘0€ŗ[üá‰É¯øT3ÅĢI<Ų¸# 'Z¤K-iÉ*å$pĜį$ķSÁ:%Ԋ\•Q€_Y)~ųX‡8ÜjtŠ` •ã<1ič#iuƒ*‚ '< ŋlírĀ@냀:V^lʼnnIb=iEjđįqĮJËXBF\ÄôČāSå¸_âpHäŒđ* i™  ˇq^̘Ļmā€@č +\™î€o›ĄĢlI_Ū€Ûˆ vÍQHļc'@HÆ2;Tđ]ƒōВ2:tŠßbŊK’Ō6z)< ĒnBŠI'' Ö¤Š&dV™Ī# č~ĩ+¤0ŽA á@éCÜkDC¤×*žiÂ÷8é[zuŦPE´9B­÷@8Ŧyu/%–8Ā%˜‚IÉéVt˙DÄėŪ†lœ˙“Q$RjæÅÜņĸŽæAā‚k:æ]ä’Ĩ 9ČãĩHņ)v—p.Äsŋ$tĻ… [{‚HĮLâœR&rv2DŅ<ëlVL\+>HüķUåˇI -2 ™*OΧŋŋĩiOÅvˇ1žB¯0Ąü9éëUbÅkŧ)ˆŅhäŠŲynrŊĖ{¸ŨgXI% NÂü3–ĐyíīÅ[đVŠ+h3É$ w#Dû° p?˜­CÎDވŦ ĒšL°_LÕclșá‹1ô˙ RnJÌõ÷ŽgĸÕu›‹øRÜ$˜Û‘‚Œ?SÍRŌüĒÚjvōĢYAoViU‹HH ã úúWVŌO w’ŨJv8Ũôöǚuũíāķ]ˆ2¤žpxíųT>bÔŖŅ›ĶŦ—6Ō[Ū”¸†UÚņŋ Šđ=SIhĩ‹¨mĄ•b[–‰ƒ|Ä(æŊō9ĘĒ$’+K!!@,=Ģ•Ôü=m¨ęæōæ °-JYIātįDbÁÍ)]U¤hęZ’ZĒ@ĀI.rĒ8?‰ĮjõËIāŅ#ļŌtČnÚBž2äõ$ž=ęŨĩ€HöĮl¨ĢœĶŋëNbmf P9 KÉÛÅ_ŗD:­ŊŠVĪ3Í(‘žĖ¨ØÚęU‰ĶéRĪ,;°×ŒĀuÁĢ7K!“c0āō:Öīˆ-íæXV؊œ“ (üh¸Ķ{Å֜Ō°<’¤ŠĒą_ËŸ§éëĮ™ QŸĨW}IL‹1ŽXå¸#ŒÖĘßj×JŲĪ`€u=?PÍ"ˆí´=Zį‹;4bŲ ÍœR^iÚĒ+ Žâˆr ŦyĢūŗo(…õk@ ‚Æ5aX:ØÔíÄRiNÉrː¸YwõŠ’obėļDŅč×NÁEäŦėy ĢIá‘ō›ģ÷Üx+æUm?Tđ|ĖWUšŋŗ•@)ö™÷=ļņųօÜē%Ŋŧsi:eŪĒY×+ą€*{†éY¸6÷/–Ú ˙Ŋ—üü7ũũĸĸ˙„—G˙ĄKR˙žMry†‡9esū•-ĢHÔ ž€gßÔūUĨęfGi˛€õÅM;i7-,əN7Ŗsų÷QuyÆÕÛ`;ļ‘‘ū5ާ=¯ŠÛßMΈŦĸ |¸33āņ铸ÕĢ‹› yegģËî8T\œķÚ¸čķŦ“HäÉ!lg”ą—Fmöë. d''Ö…~Ļ„ņ]kˇMnŨ-Ú&,ryį'é[zR[˙f"_\Jķ),ŒXÉÄãŽkš‚(ƒĮ S;Ÿ*ģAsīÜJĩz.]‹[\4($ãŖ~(°-N†āÛnVˇƒjƒō ¸?×éY/i=Ūŧßfĩ,D m'9'ŋAîjĩĢŪÄ!’åō˛TpÄwĮšŽž ›“l-´})ĸ2$ēs’zŸŧp8éũ*ĸ…)YŲ´ƒCÖâŽY7Kqgœ¯›×n}1WgÔ"´PPŒ‰aœü÷éQx†ĘÎ/&Ņ´ÎƒĪ26āÜƒ×žO?ֹ˛]™GxTtFĀ#ŒsܟZlĮĄj]NkųŪF|@p0ŖcüƒQA=ĘĖnáļC 4’I>ŋ§ļ4mä‡ĖÔ„,kéŽõ­.YI nŒ‘ŸķéFƒŗzœčÔæģF(TvŗŒqžx¨g´+š§yš&Vec€Ō´īt˜bJ3–’NGåųš­},7á-c†($ˇFcüņīCX_鮌ȏOĘf$rø‚ú+K7!8UPĖ9?€R 65„Æō4¤ zč*ũ€ēĶŽãš´&& (°¤ŲŲ[x(#{írņD`e‘ddī7aų×?âf§ŠËJƒ}´G*ØØ¤ãŽīNŋēÔu…CrŌ*ũÄÆÕ€¨EĢ(C—#cåĻ[] /ŖM;īdE2YT*ĘéŖÆ%Yˆá˜g?ũzЁeKŒ@|°;>N{ƯA1yŒ28pH*€āŠM#:ŪĶ Î#Pn9ÉÁäVŦ"š8•æ@ˆ­ÃĪ~+A-„ÜáŽĖpKwĮĨPąĶ./.„Ķ|•Ë*ޤ=‡OË:‰öēžHŸäÕ{‰#…Ø œ.â0ķ­i`†8âķŸb$2:Ŗq ņîXãÆĀ—~ 5IŲĖŨ››˜Ibx4X’ƒœVŪ§zÄ4qĮå‡ÉÎ1‘\ôčûp8ëéVÉD2>į'ŠcĩD|ÆÆ8´į!T($“ŽÜÕģ+n$ X,@2Õ*Åe‚`dvg'îÍmÛÚLŅ+H‹D|Ąy'­lC Ú鑤­›+ rGŌĸ– îĻs!1Ƨå k;Ļė2ĩ…œ"Gķ ŠJ†[[%æ¤I‰zŽxį=jÂÅ žŸ8%šY=‡<ū?Ō´ü9Ļ,Hgt˰õüi­Ō/Ø+Iy a¤`1Ø8ĩuŅj#q´H˜˛ ĩÍZÂg2-’Hāö­ŋÂ&†[š'8?ũcB×SEuĸw6Ô`_bœŖ#'ŠuˆH6žŽĀî=ÍExŠ×FIp\ žGô§ MŠF1Ą$ā{Vh4YR fōü.8$qũĨeJėĘÉ#d°ÃÉÅk\KįoāŦC@ÎMc•ĖÁIÉ98éŠCf|HÍ/…É cŗą i^ tīSÜZˆ!Č I v5JyZBc€'ŋj[“ąGSšy--ƇĖAÆŅ[ÖeŦz\ĢŽ1ČŽ8§9Ŧ8- ß2Ubō§_VÔĄōlX’r''>ūÂģ#/gĘekģŗjúöÖoŨĄdŨ‚zãŪšķ1yˇ´„mÆ@āŠÍK7C™#ą Î̈ÚJ œ÷ŠX‡MYn<ÎäË+†Č^3œ“Ÿūĩ2XŲÉ,ų˛ĀœT3ÎhÎp ‚jũ•ĢȤ”nÄ)ęOųôŠX†ŨŲ\ÚĄ•IÉ9 ôjÚ)ī‚ŠNæį§ķ>ÂŖ1ˆámÄÄŖ#iāœtŠ ˜¤9-¸Ãķ­iõ‹-7'råŧĸ”!•$Œ€)đXÍö€$‘\žv¨Æ 6͑wŒS,6ķūŋZ”jŠ!f‰ # p0+âj=jFÕÚBļR€Ā2FySĮnk“ē„›Ĩ1Č0Ãr‘ČÕŅ-åŊå¤ņ‚ ¤ R¸Ņ„Đ,–¯ŊÔåŖ' >ŸáW†Ŧ–“aR<ÚĸŽ™*Ŧ2YJ6HŦväz˙õꎰ$[XKš˜`äcĄĻ¨x.Dą•|I8ČÜdœž¯Oōj˛5Æ&*rĀl Æ:ŒņĪŌ-Ëa#;6ČČ Ę‘JÍ#NĖC ^IūœP"Ú< F\dnOÖĄšxŨT& ™ rsĪOjî;f1áKŽsĪø÷¨lƒÍpåælsŒōi K`b—ä$ŗ¸Ī'ĄŽš øí "ÍÎ~ņ#‹ ´ŗm%\Į’¸ŽūÕŠm¤ÄĘÁƌšČķéT“bæH„O:Ü…Á<¸$š˛’ŨâHĀ+x9 Ôåím‚ 9Á*$˙ŸZĪ—P–VÁ@ˆTœw={ĐŌ[1.ĸļB<éؘ:âŗ'’Ž€°ÜAÉ#mi,i …ƒœg=*āĐ-gEyT’¸<žZWfN™WWąÆg ČãôŽém cšÂ–QŒíƒŪ›Ŗ2H<ępI`Xõū”ëß[$l-"/#cŠā™DqgBĪŧM!uŠ4Î_ā:åuOËF™ÁČ27$Ö=î§ŠęlX˜(`Tg ĶŊgÜĩĘąi†ÎÛBācđĄ$UŲfMWSšVynÉ!†9ŦŧßJ¤­Ėdg* ģE,ĘLˇ¤€ÍMaĸCx äŽAúUX›ØÍ7×0J$ûF$ÆEt–ˇĢEndO(ļdãæ+Ūļt˙Yehŧ¤Ügô5Ķé=ž“¨%Ác‘ĀRnŨF•΂:ŌÆ6á0;jŊÍÁĘÁŽĀg⯴Rß|dr3L$/.́Ī‚—sfŒ¤žž‘°Ö;bĪ֑>dq >™8Ģ7÷­ é9 ŖŽ+—Ÿ_‘Ø€áq‚0E\Uúô-ßMlĖžkaÔ6yû}líĖŽÆãÔÖšqËžđI9$Ô°[´ą¸(Q‚¸­%h(ĘĖԟY”M"ÂÛÔāŒ.qÖ˛õ9d’{9Ažf+ČqĨŗĶÖ0.ĖméMÖņ&šāā>79–Č]J˙aŨ,’ŒIF ?Nv—Q€˛~í ØĮ85ŸË^ÁQķ(QWtĀÖĨ÷>ō%A˙×§wk"^÷:’á÷€ÄAšŠ-МO‡‚ĀķŸJˇrĢy`1\ḤŠŌ([1ĒŠ<—Į5‘ĨŒąĸ5ŨĒË+ˆāyČäąŌtĪ¤ķ¤ yĢíäÅävq–ÉŦ‰cŠiü¸ĸbGSךw¸ļÚėͰŽ%tĢMtŅ0’_™÷  ´šdĖų#ņŋŠü*âŲZZˇ™3ų×ËãđĄ´+>Ĩ8âšåUŖCž¤ôęGō­Õ^áÔ8œäTŗÜŨĘ6[Į€zbĢ åœMs##•Jãô"kÖ …9š5œâv „`Iˇ`+~-: raWŽé¯n”ųL0*Ģœ1äæ‘HäĻĶ&ĮīPlíĶ˙¯Qy)A.xr|WIu—9W1žxä‘Lr72ĀĀČ=h¸ŲËH—M3öŦ cŒ˙ŸJ>Ėļė”ÅšÁۊ鎙*dD„!$”č:XŧļŠb<ĖšĒ3å9Ķ.äœ>PÄVÄMv ÍÁŒŠ–uŽ)D!q+d„dsVc•„^Zí Š´´$–%XcEéĀ\Ž*˙,:ąž•›™L‚sÔņĀ­X i!|ŠÁ= hąi˛,ĢU\tĢĪl×>՜Ŧc˜8 GĄ­!FĻ4CĐį›4C~Īû§ķ Ā<㊅Ũmá•H(C)Į|Ô˛É,Ēžã$dš‰í$š9ĶqéMyų‡)…nIî9*[;ƒŧ6sÉĸ´P-Ŗi!ú՗¸*IŒI9銐"š´PĒĶ• 18ķRĩÚÆSŧŒ¨¯JRŨš1ŽpÖ? >žĩa, ļŨ1w–f,yč)hdŅÜ1Ã!ÉXę+>y\ŨÕXã‚@ČŽÛE4Ōn’SŗŠ 8ŦN€.qō‚Įilß4^ĪRfÜČ3 јAxÁ?ASĮ‰!Hž ãéU5=]f–Ō;5ûHÜÁŪ5Îãîžõ(‚å2‡w;J`ãŌĩOCžkRėví$ 㑓Î<Ąg>qeN ž„sūqV-žuĖąáA$‡<ô§ĪēōD­Žœį¤š3w(ɍX„l'Ļ)ŸgĘ’Ģ„<€F3ZmdÃ;p:•ú|¨LOĖ@ĮÉ4ԗqr´Ė÷ģˇVōĘÃ‚Ã¨Znø3ĸĢ9ÁõĀæ­IĨĖ÷1ü€9UÖĸ{f´IåĘT•lą§§FÛbŸ3/—°"Ud?•NüK˜)ķ¸<‘ROrļɀ˜Ë€zÖíÔˇ#pŊvƒŽiė5-Q-ōÛ#wBĩĨiqöË5´ą•Ü6ŒäTĐjļļ°ÜolōģrHŦFæÔ—MÅ#.ų?*Í´oËcŦö7Kä¸|Ldāk0˜RåMÅÄÚ–w2#7¸ãƒW…ĐY]îŅ€nxTd3\ūíT•ŲœŌžĨ̚Vڜ¯#Ë+{¸Ū"ŅÉf‹‘ūđnsôŽËÃ3éˇo$3ŨŊĨôJAĩhU¯ūÍ^í#›` Ā †!ŊH÷­Yt ũBė_^GytYqš†$ĪlbĄąĢž›Ŗi–Æ+ģQs?(¸rĘØg­yÖ¯áëÍP˙‰Ģ(‰0´yw(ößZËšŊÖŦĻŅOzčƒEĀÉëÖŦDš”ąZĘâ?ÆsYû×Ņ”Ûc˙á&×˙čo˙}(ōoŋ?ũų4QīŠĮŠÜĘÆQ4ĻIČŨũáUṊÚ {Kį—#˙ž•~{D/4šķ g“‚? ŠeorÁc ƒ€Į“ZĻgĶSF deœÁÚŒ˙Ÿj|§Ÿ ‘ÎO$PĊĪäĖė8.$Žļōā.HÎ85h’čĩŧVbn>Fā î$ņRl–(K‹mø…fų‰÷ūuZÁî.o•yRr+ŠŽÂcĪ›ĸábĻ“­EgrÆkHn'b)&>=}9ííWĩoTē…ˆ),cnGׯåRi^{ųĨ`Š”@‘äę26Š×ôŨ UR3{zŸÄã!IĮā?4ÅmtG!&‘vļĐÜÜmA&HC‚AĒ×vË%‹ÆˆYĶKŒĐũ=ŗZ‚ęûÄS™$”EėQƒßĻz~5,ÖvÖŦœāKd7˙_Ū“hiҌY‰•˙vWįSÁjé16 |FĩĖDņÛŨM%Ŗîˇ#„āÆ{ãÛڟ=Ė2¨ŽķĨ"5l`TŨ”=VīNX|ɰÎ7uÍs,’íT7…R2ElËŖDmž×#bAĘ(ā)ĻBņVˆí…ÆrÄņL§ĸØ=ä8ųQЍāđkI­ã˛ā*3’rį¨<Ö;í-ÅŌ@æ@$JŲÔ\,…PËž§52›@–šÅjōˆ*žAÜܓS EUÃiôņWļؔîÁĮ'8&Ļļ‚7bņē¸ÜzœũjTœĩˆb°"×qPA 1‘Q‹ ˛F$SÁ“[–á^ 8€k ęvíĢė‰Ë´D‡hÎUGŊRÔ…Ų#\LeBÍ SĶ5Ī^ęÍĨÄ́æU*\k\]ũļC dĄÉpŲWâkˆŌųĄˇ@g˜đĮŖ˙¯UkhÉŊõEũQģ×g”\˛Žn5­.˜s…O8w|š°ŧ1¤_Ûꀮ| ŗ7FÕ×^ŪÛXBöđē—bUÔu'Ō´Mô3Ķvpēø-yį n=Ŧ{ģRv€ųv#=Ģs\÷rØIųTœņYVķ¤ķ 1Ŋ•€)ĪA&Ea ]\]4aâ@ƒ–nIÕ×x{ÃņXÉ%Á/#‘‚ĮUã2™ŅŦcŋ’Fø×eii2éĸŪįbČĘC•āĨss7/#d™ƒw™ZBÛ€†˙õÕf´Ø‘…ËĮĐšÛšˇG‘PĻņČZÆÔnaĩdY$ØNO=qBJ÷ —aARNā}uļVŅĨœ(­Ė‰ˇŒzū•ÂŊúĘĪ$I#ŨqŠŌŌ'Ôf…“~Āįš°:^Ō-Ŗ†<aÄvį˙¯[>ĸĶÁ[ƒ÷“ˇëX6vFöę!$ŒA*e8Íw".ØG dFŠI94-ėËKŠĪN$[‰duPĄŽ9ČĮõÅV¸ē–Pķ4­…Ī$Øô­ Ûie&NĨ\dv8Īųü+9"fĻ.HPH`÷ū_ũjŌãąĢm´ŗTl3íũæōÕO Häb@'Чe’†H䚧ĒʨŒ`Œ‚TšÚ/‹OH\ģmÉx¨l!Y&ГÛˇ`vĢņăAŪO…EáŨ—š”›0Ņ•=CTÜ]M›˜é˛É Õ9ėrqĪõŽD[Ev… d ņŽĩ×ëķŦÂ"ėģ¸Ę ąŽQdFŖŸwˆĀ&´„ėŦ)­JrÄ%_4ĻãŊRŽH ‚8$ÔēŒîc €ąÉÁįŋãTpAģsŸN•Ë:—v5Œ,ŽÍkI#g QĀ?õb]MļORŧ ķYꔓ´+vŽIéųօŽœķ2ŗO*OOđ­`ĩ3nûˆDĖ2Í+uĀ8ãō­ #Fķ*l I@x~Ÿ_‹×X!"Œ€įŠÃÕ/dû2–˜€ėqĻrWŋNĩĄ&ĢKŸ¸Œų„2æ°˙á$ˇūÂiâvK’J…eĀ'žũ8᚝=˙ÛoVÂÆĖDX`€F#žüŸZĮÖ´› ë*BĄ%bBC’=3øÔ˛–įgmŽÃ5‹ÜÆĖčĒĒĄ‡Ž8ŽÂÚæ … Ž7ǃĮ<úũĢÅŖŌĻhbŌH.dr6`:`õ­m:}j)”˜ ˜)ÂČNĶ‘×QIÄiõÜQ ã”SšŗžĮÚ¸¯ĒkÛJîFƒūy§j:ôæh˜+Ŗ+Ģ' p*õĖڂ‡2†.\ æĒí­H“¸+¤˛ÎŽyŒíķÆOOĨBęVãorvúc?JO‹ä,%‰f $œū•}¸nĨË ƒņüĒH#hđ­1ËåÎAS×éVōĪ1H˜ËČ'€ĪoĨ$!üą jÛpT€;ÖĻ˜ŌH&Æ09<`u˙=j’lMØÍ{In.8ËJ@š [Úv‘Éœ°‚÷įúՆļQ•— ¨ #ĶŪĢOŠąÉQnŦ &Oŋø Ķ•-ÉģlÔēģ´Ķ„fW!ļåc#qüĢ=õ;‹ĩ“ÉŒE‚ ŽIëųVEäˆĐŦžX‘ĀÉi>œ˙úęÅ´ķ4ņĮ´˜‚U9ãˇÖĸRoDRŠE˜āģI.Đc%ēĶ.<ãÃ÷rzŠŊŖŊš2§#aãĢŪDĪāāGŒÉ&Ĩ.å=Šé{,q™™"Œ`AŦŲušnáÚ]ŨŸ*Â3_M1dZGÁ\Á=z˙…Klllâ`‡‘ŗōĸæŠ6&`Ãe;€1•˛së˙ęĢĪnļûEÎÂG$Šš=Ļ­*¨đô–Ãĩ>ŸāéeēY.äiŸ˜gåĸöĖ‰ŪęlĮ.  ąĨčw¤ß=ŊÃ(9É8‰ŽæĪÂ67 1ÚËÔ( VŠ –Ņ˜u$`“K˜ŅCšÍ'ƒl!aö†@ŒķZuĩ…ŗ0Ķ,÷ȧĀÎ YÅį‚åKˇnšĢ)$P6ÆēîD1ŠW`’C Jâei§XŖ^vIŠÄļq‚v1`9,3Í@n%¸e†Å ; ۙrjāytëo3PžÎrõčˇrŊ ôËÃ{IövD æ W]ÕAŨ+9õ{IaYDŠWǝFĒoĒŦ€Ž`T¸QĘÛ*öEĢ›¸ĸäŪ¤/ƒŠæ.ĨƒPēf†9IĀŌ>­WIî5ąˆœœŽr)-Ņãmãāt ÆyĒZ{™2YGŦĸ§ aÆjŽįlü€ ņZzŒëå4rš%†Ōf˛â­9ŒųŠ(FsEô°-Ėûģ•3†bŽ@C€iĖEÁÂä–PI=dÎĄŠŧqÆĖĻUrŊ8ī]´CA (ĀĀgšmØVģ8í3<öáŠ:’Ã$Šč,ėO1ū@HäŒfĩ’ÚŨXHÉáŒay¨u‘āiAQĐŅĪ}–Ú‘i÷ŠëqÁe$Šõ-´Ķ_ŗFTŸē8ČŽn–Ū`âP €…#‘šŋe{4W‘čNđ¸'æŽT´š ]Ž-8,;fÚ͜í^ߍYŠŲS%P(<ņĮ5d"3žr3ž´ía9´ÉØÚÍĄXÃo\đÛOôĻ:öxŅqÆāF }}ŗÚĨžĘHffXNIÁ¯ZB‚Ú"›O™’ÍŒíIéĒ&÷+‹(Ŧ°ÃkĖTÛ?ΕŽĨ1ŠÄjŋ‚[O—Sy*Ü.r{`TSĀđ&C‘ãäToĢ­Ą™đ7įŒä Tļq"0G<ÖĄWPI*FN29Įģxž,0HFNĀ™8÷õ­5jÆM$mY ‘Ø;}õÁ'×?ĨO{pĢ "Ā€PōkûBŅ›1>HÁ*$O˙ŽĢj:Ŋˁ<ĮcĒŠ ¯—+ná},6k–Î7ļķŲlÖd÷nŒDx u$͜3NÆNIëÖĸ{`I|üØ Vˇ3ąB@Ë1Ëœįš§r•ĀSGRyÍ]1ÛHÁ&Ģ]Į4Ŧΐ8ÉČĄąÅOqŗpÄ ˇ­W‘%ÖZG‘øU$Šé-4KĢË Ļß1•ųŽk¯´Ņ ŗ*R%…ÉÜÖMęnĸyÄū ē‚8ša$Ąđ0ƒ8§ŲčXŨô[įōŸgČ?­zÄq2zõ§Ĩĸķ a|sPŲĸ‰ÎXxjÉÖ;—F‹Œė1aõÅ\ÔσMˇC´“Ā~í~jÜŲŗ‘ŸqŽ´…Ā,šĮ ãĨE‘V9-:ĀŪę+s.“=ŧdŸŪĘTąūĩÕ-ŊĒ.đ;âœ\"’ī…ĪŦÛŊ\¨ĖÂ~Ĩ¨ˇa]#GËļūä÷Ń˙ Ī'˙ž ÝMw=‚\›{´&@8_›ŸĘ˛—HgÔ ´p¨ÃpYŽøÍhęzHÔ¯ fEķ‘@fS€:~u”—WšCLæ ynĮ‚ĒKC \'ļy/6,čÂ5Ã4|.?XHËĩķ1‚øf˙>ôí6d™LPH¨ecŧ‚žlÃífdid–•ih>R„’CĢ+LģVEōō‡ ’zWn>Õ(^B‰’@ëšÂxáōVØĐĸüĨx!翚ķ^„ÉŸszĮQI÷ [sFūy-ī,îãWW2m'ĻsĶ×ĨPŊÔîf3<ŗ).:ᔨlî. M<Ģģ#a'éĐZ˛–đÄĒ$• S“ŸūŊ$Åš6…-ēéņ[‡1€bJį÷ĸs\,qæBX€Nx<ÔA-ĸ‘^[— HH×įô¤ļčãėčT ŽO?Z´‡b+˜'‚Q'ȋ+}Ôāš#jÄĘđ„8ÂI˙&–ũá š}ΐÛA抴˛,D&†‚Äķ_ „`­ąAÃgŒjĄiu üÔŦW'c ņŠ”[›M6F Ų 0āŸaū5Æ[ęsÛis[@Ŧ­?Êũzšk î.ΘāÎ~•Ĩž6*¤Y' d“V’ąÎäīccNv“70’%ų'ŠŦŨ"ÄëõÍÛ!‘sˆÆ0q‚jžĄo”,ĶáHņÉjîü!ĨیÂ)HËÜŌJڔ ÜNoRÖŽRilŦĐÆņąĨîOĩEecäL¯q"=ë)dRĮ¯qšŪÕŧĐÛÎbÔÂîbʲOã\^™sö™ZŲ§š,9Į^^ĩ¤džÆn6v{ēĨ}šĨšˇ”Ō´lūęŅÛĸ‹@¤gī1 ß5Ą=ĻĸÖ)$ɨo˜Ģ>Y@އJņ=ĩÍŖ ÄąáXã‡úTMŊŅē§…{ ×CˇŨ$€mķoĨ\ʈÁ;Ÿ=ÉÅs~%×YRHãe`JĢ>6{ņ×˙­VôŽn,Œ“‚c•‹ôīqíšy&û $67Ũrkæäîi›˜įŽĸ šŧ7˛–bĒqžôļŅ}Ąŗ W$‚ØÍEģčˆcŨ,ĖHIčFy­?Ų\ĸ}Ēá {‹"Dé†Pŋũ~ŸCL´ļŨ.Ä}Ŧše,™éī]t„F d⠚WÔj,ķΈúÍŝũĨĩ­ģ#•.%<ĢŽ›qßžõÅęēŽĄ ÕĻqr–ŅÆ žŪƒ9üZčū!Ä×~'ˇdØcP6“Ž;ãōq°č××Ī;ÛHÁ˜•2ãëDļ˛-(­Y$Īq|ŅׁGúōÉãķŽšÂÎ[€Ģ‘pdaūsV4Ī[DŠĶfiäg…˙ëÖãÍ”EŨ•UFryŦã]XĨ.aŅAšŒ($œ“Xú†°ŠŌ rĒŊ@ũ9ũk;RņŗËp"I(€ ôŋzŽ•QāÔnmĄĩ’HāđĀ6X¨Écž•ĸ’d¸É1ĄˇĐæģšļĨ%•n$įp2ĨcjC5Ͱ’īdqےR6†đ;ևˆ4Û[kI$šiˆ 3´š#œÜÔs[[jķ8ĶĖfĄpÆ}IõÍUô"ÚØĪŅl†Ŗuh…%Éųąūuōi§íëĩņÃå’003ÍGĸiSYÚ.Ķ1}Ėd[âFyb3‘ÆkÕŗĐëĨ‡N7‘ÎÁ r'ļ\0RĒäãhކÛCŗBÁpsÃ+NĘØžíŧ…BJc¨âĻ•#…9$cœĸ9:„U¤Šŗ]đåžĩn<ÂCFĨcĮX÷÷íÁ¯'ĶØÛŪÉc?˜’FÄ6ŪõéÎ?:öYīc|˛=IûĻŧŗÅđImã†ēq"ŦÜp1§ķÁ­Zksĸõ+ÆUŌ=Ņ…$OĶzĘŅīc U ąéߏ^õ”$ubŽģKĖÊ=úõ§ĨęįOYƒ*ã+Ž0x­ĩõ2–Ú=Ļž–¨ģŽâ2I?xô¨oõˇ D °^H'?…aŨę×30päGÁڇhÆHú˙úĒ:p'Ë p9ĮįŌ´sļˆ•园JGš7یŒoąí×ü*ą¤Ņą$€Į$œUë]{¸ƒJ>Ī`UŠā•ã'ŅYivˆŠb‰]‰Îų9?į°¤ĸŪáĖ–Æmĩ”2 Ã*€AųøVZ@IT‰AÎwg5nqŸ31fr ¨?{ü+ššžâķ ‰í7ŌĢŨˆĩfˆŊšŧfŽy j,TßäRĘVXŅrÂŧ H­ĨX™Ļ˜ĀŞĒpIöíøÕ9e0HÎų/Œ°CĐg˙­QmnZznĸ,Ä$ĢëSé>LnļŅD¯1ŨŽj-nŽÂēēˆÜIĪJ×ļšËCˆ’™˜ž¤rGĩæiA¤¯›æÍpŋ„­-ũũĨŒb-æFpF¨?ŠĪ^ÜęzŊâį=hMV)„ą­ĩŅXØäX~?̞6Ķ:Ã( 'Ė-ŒUĨšąŌr$§r¸ēBWCvL¨nÖá&FPx ­c[Ą–ņ.$•@bq€~€hļŨ*â8 VląißÚļ­(V\‚ÅrįÅ žŖˇTX_Äa+§ŲHŒxU‘õÁũ+,Ī=üÃíųw2ąĄË1ūXükŖŌŦm­āX„ËrPōĀKmm Æ­-éEE˜â€=ū´šŦĘåšŅá01ĻW<°¨ŸE‚Fß:YH!vã5Ļ ,9vbIäsëQÍrļšķƒŒžHŖ™°i"˜{dcbžXĀCĀ4K:Ļ B^•›s{,Ž$ĩļI-ÁÍEŠ °Žéš9ŧāéM&É~DRCeu3HŌ7šIČÔãˡPdL #ŦJCÂ<ĩFP0ErÚõëŲBDsH„€vîāĐ#zÚöKŨŲc–'úVFąŽ2@Ņj)Žr-ãä…÷­TĨ-›åŽä:‡‹u u_2vōčÆ3]îŽōOĻĮ$¯6öã÷Ëĩ‡á^I{ŠA=¤–*’J (B3ŒkŅô¯ũŽ„ŠR2‚ĖW?ū篺PĩÍ)žįDąDšssøÔw"ß;9昀8üȧEĮËÆ˜{ķY×ū"ļĩRO:Bpx_ÎŗIŗG$„}n š67Ųîĸ.Ÿ­U—PwÚÉcz‡ Tū­QèęZ“4qS‚ÉĪķĢiĻ3ŪNÎĮš5\ļܛßc}nŅKmrާ’TũõPŲ0‚䁯¯ø×C.‹h[æVc€3ģ&ĄCĶĸVÄ1€NrW&‹ ŗ3#×ėĨb#†ä2FĀqúօĨũМ‚—Čāģ@ü ?û*ɎŅN9ČāŸĘ­‹8VDB8HŖB•ĀŪCēßB3š¯=Ú žTs֛-¤š"6ŨÆrF*¤ļŅĻæ™üÂpE6W¸š9T›s!'–^ãõŦ™Ŧ§y$“~Ā˅Ër:V„—qĸōáÚy5Yõđ˛C'=IÅR!؊<ļįRũG9"­Bv\{3œf°Ĩ’hnŅĘ+Š<¨' VÍąŽé@˜ņĪ< Ą-t'ĩ‚ōw•wōÜ•´mŖŽe’RTĀÍEkįDŒmŒXČŨœVîmĸ ŽīĐg•+”‘™Ũ@‡ŽNsĐ ‘Į–š–PGĻ8¨DŠvĮâz“ØTâ(@@e“#‚xÍ"ŠŒŪo ’rK”įU0-',ČŦĀ–=#?Ę´d Ð0ŨSĀëTƒ—ēE‘1´í(<Õ&&‹ËšÔpŲįTˆUœ|§žü)ā<ė2ƒ§^iBUå°8äpiā4íå@H\a›88Ąą¨‰´O?–\<™ÎĀy¯ZŲ‘)6Š§ŲlõĸLîHŨž@­s`‘Č€öã5 –ĸ‘n(–4@{`Ō‚Ä’­€{ Ž%r0HÁ§‰ˆ3ãÉĀ Ņ  obIéAg= éš…•W—lãŪą¯uj&—ĘÜØ2MKėlOuž<ÉH,ps“T.5S°2˜åä} Ä}{I ‘å|ķČŊMej~&ŌDf!9(¨”ŌyšēŽĸÆĸŒ‚K„ĒúvĢĻéS07ɍ–&L‘\}Õ֝rÍ'—ČU‹ö]Î1jAnÅ8ŦeVIŨ&.VK˙„Ÿ@˙Ÿčŋ*+Íūͧ˙Ī ü¨ŖÛKųXųeØÎļ…¯X››’ŠĀŗēđ"ĢIĨ[ÜCrEĞB’ą0ęæļJE",ŽņĮ¨„{gü+›ŗ{ëBHewXä—ī*ãwĐzWk÷ĨĄ”_*×J0”JāŽ„pMjŽ•ißxō—V#S’šõŠĨˆ¤+#/īPÎNHôüJ—&k¨qôāąŒd“ëVČælŗiĨ[^91Āfŋ.*ĖēOØx7Šäæ¯ŦVļVåR5IXôc÷ŋĪĨeĪĒŪŦÄC3BœĘąnû–-ô e# L{ņĢ׈ē­ĸ– -žSŊiËrڃ¤ÜĖĀIÜO_Ęąõí-­.‘ãtÃd`ļ#ëM$MÆËŦÁ¸ƒddrŖ5v ûf€Ũ†O™bąSNØFČr9ŨE_Eœ Ėģ°Ũ\;V—bšZ˙QĩhƒŽ<°ĨI=ëk‡•Õäfqœí‘ŽGë[:ސa‰n­åI #‘Ī=j+ )oāu[tr¸ Äį•Ŏž?ēhפm# Åzļƒå´SFĀļxĪđ5ãWOe3$˜[WIĸx€X\[JŒ˜bh؞O­ 4™čúŽäÂāÚF÷2¨§ŗ×šķ Y„÷ę˛Č–æ6 Ŧ1g5ęŸiK˜#šŪPC.CA¯6ņ™ĩūØe’y¤GĘáVˆ„¤īĄBæGԌk4×$aˇmĮøQĨX,0HŌNYåÆ ā„˙­q3ŲĀdŦTe—†šm[O‚hĶį r7dŖ˙¯LqœģŒIæ‚U†Ōy%…Žd<Æē"XQV##E;™&lÁšÛÛÛ8hÜo#€A̓ĞØI;ɛĨųĸläĸđjŖ7 †×´ø…Ŋ÷ū ōį¸Å žwˇˇ­vžy-Ė‘Ų\* fęG`;W!ae0›ģ™’YįÉã#•ÕxeĖ,ōŗÂ„ $dnũŽŖšNM­K—-ŦlŨé <ÍÔĪ+‚w@úÖLZFŸá˛ķ[´Ū’É ČéīZ:Žĸ`ļa ŠrpĨIüI9üŽniåt.ØÉ Į )E7š ›oDYwēŧ•”‡žKsVm,Ę´Ā*8;ÖZëk *‚GE*rƜ˟_„ĪąQ €c28Č˙€æŠčh—+.ßGΉâŧž'žĐē ãr€1Ÿ ÎN?Æģ‡Ôôõ 2ÆAČQ–ōāWŸ[ë:mŊšĄ–gb ÜęĒOĐRŸ=ŧr¤6ą@HÜų5Œ“oD++ļŲŅk:Ȏ×Ŗ$Ā ā“\NĢį4rÉ3–š@G@? ša{uĢĘ°Æ‰Á2J˖Įĩ]“ÃöŪ`?ŧ’CŅäbp}¨ŗŲ‰4ž†n›`Ēą¤Á$ā™ĪĩjEdVé؜#’zŠ`Š==ĖÁžUųTã ļ*änڌˆd,d+0LB]Ų.īS[ÃŌÃģ‚A‰ -‰āWH’@ö- IŊ†@nߝræŲ-Š˜Üž21Œ`×C`wp@g“˙ÖĨ-6f°ÕXŽTajmą™\ROhž+[-73ÎĘôÜÕnB‚Ņžd qU ´7lno  *¤đ­5;‰—„—$M2ˆ Ŗåq,Ø*‹cæÎų¸›{v~Ôļ–Û™˜áŠŽ‚¯Ú…ĩ‡bšC÷™‰â›žäĢAhģ„hĀļāLt'õĢkbÆØ€:Ž+/Nŧ3Ęîa)°•_CīõĒ~$„_iŽ$šš-ĒÎV7ÚŽíR¯{2ÛĶC€ņ]ĐŊņEØe+ ˆųcœ+^ŌÍ ‰L‘œžI'ĄŦM2Ę 0}ŽTķϐ—‰7ōœ~”íCX–C a‰ ôĮ­šBIÉčiŪj°Á+E …Ũx(‹Ķ§ųâš‹Ģ™fyešTNģp˜jœˇRÆ˛Iæ(vc€üÂŖĶ4É.`U1b3#šÜI=z˙Jæ•F÷Ņ*qHmŽû¸b ŌĘd4Ŧ`×#ŸĘŽĨĩõÅá"’Ĩ>X“ÆkR GŽTōö  )Ú9Ô˙€Ž—OŌbŗĖĄ2ėrÎFM(ÖKSxRöžîÆ$^.#šåü؊‚Üác>Š:Vž•ŖĮfH#‚BMm¨‚yãĄk:áöJĶ,#”ĻĢÚĘzTiŌ|ŅԝP%Á *Pņ×ņëVĸ…@&G.åë’?Â¨ÚŗŨ06đɅlų…p?:ÖK9÷¨Œ2Ég<œtĒömĢF;jYŽî+Ehƒâ?5Ø/ ŧŒgÛŌ¸-WWÔ¤ÕŪDæÍˆT_/`={÷úWEâ-Hiļ‚Č8%×27vöįÖ˛íƒ†y!2Î܄>>ŋá]ā֑8ęTMˇ6e%ũũŊŒÂpĪ&ė( •?ŸOZäõ—y|IÁŧÃ,%ˆÎ!ē…w:•˙‘4ļķ VC[ßđÅyäĘąjæd]Йŧ­€t˙ĪøSmėÅemÖXŪ#v,H ¤ãÆŽ[cÎpes€y'§ÔÉ-c\I+I’Ŗ+Î1Īã֋i|—#nw1%€ÆĐ*Q‘zŌĘkĩÆeĀ#vŸË˙­]U†‘ēĄ)žeQ‡n>ßũzf™Åi‰B7āŗwäÕųu{8ʖgŒáFN=?ũuŧb’ģ1mÉØ˛ļęĀnË‘ž0*;ÍJßLYCHž` Œ‘ū÷Ŧ9ĩûÉ @(ĮŒāįž§§äjK "(_|Ė$ķĪ+ŸëC“{ $ˇ"a6ĻŅL îÎé=ŋZž#K8DƒhePĻW1>ÔéîĄĩI0D’ xúV+ŪĢ,Ō`î'`éQPä“.͒ Ų%šXÕļ‘÷I1Zšh¨ĀĘØg9Æ}8Ŧ¸ŧš/”(ÆI#$ƒWRT´- ȌĀƒRįÜihoC~‚H­Ŗ(’9ŠÅ]{d.!ä ęsđZyßiš–BČAœ փQļßŊ$ˆŧˇ5¨ŠGFō¤p§˜>Uå—Ą"¨ę:ˉhķô*:(ÉĒ2ëđ Īn@áI=+8jöæI&KØÔ>FÜį ÖjĒė6Ęōj×7ÖāHæ(Ëc.§¯?…iizÉ,0É)6L’|ĘĩWMWN‚x¤–XdėnTįū†ŦļģÂŗŲęJ¯ú¸W´uSØq˛7îõ8 ÄxÉ÷€čzÕÔfē q.raéK{+M,ŖĘ x~XŌēkE†ŨTG°œ¤Š—8Ū×ÔĩŠbßLžؙ‚–\˙^ϊ(m#Ā$“ÎâØÉ¨gœˆË—ōÕrYēVš’ęé–ŌdãsÕęÁŲ×wvÍŠ?3,qˆÎ 5œÉ.ĐVÛ îuÜĀ{šļņEešbLÄp TūĶÔ/ •#Ųö\ŌA?Oz{l _rģË4d Q•OtŠœ5ÄF2QØrRAČĻ™Dfmɏ”ÉËÂĻKk[‹c&Ļø|d9ÜöĢmt'”¨ēr0YmĨ{bÜĒĢdūírŪ$ļ¸ŊÔãļâYļˆÆëÖģYĸŗ˛‰.ĶUcnĢ”Œ€ÍĪŋ˙ZšKn+{šfŠ)'žr'‚=K’¸4ȚöÛÂzH€,r^°%@ę[Ÿ˜û â&“QÕo°<Ųf”ũÕęsZWöW×úĢoŽĨ ė'G˙Zģ?ĪaĻęM§Čũ  &ä|ġ÷sԟ5ö2ĩ…đׅ–•Ô5TQr##!B¨QŸ~+Ŗs$÷r=ŧîä1Ķ4ũwR]:!äFfä‘¸`~õĖŨëz‰…Žy.6*Å}ķÎ>˜ĸũFôЛ[ÖĸŅŨíŧá.¤Ę˙ŧ{uŽ>ÃH×umQφ æ6Yäájė4ĢGŊģÄzu“\3ghĪ˟Į§°ŽžödŌl>Ķq*G +–`†>€P§eq$™ÆXx&{yÕ.§ }ōŖ9­íOF‹GĶ–æŌ2čši 8éĪ8ü…qĶüMÔ^ghíôôˇŒ’ áËöà š†÷Æúŋ‰Ą6pÚEä0ÚŌĒÔÖu ĒŽYĖ’5­õķpÂ8äd‘†v“ÃnÆ­mm‘N@'Ŋfh^‘ôļŽîí’L.#Ë)Ģ–ņÜÛųļ÷jkr˜•ŗŌ¸į¸i^Ú’GcĸŪFšxŠIQ%Bwdc5z+Č.&Xc‘ܐI+ĀŽcEĶäžēw*›I‡īé“íÛ¯­oGc ŊÚ4.āŠ#-Đú×T'ŽfŦZr4„JŖØĮzc¤d€O?1< 2ƒ"ĪAœš¯|ÂŪ”;d€&ƒR!,y…#ĻŧlŠT0Bzw&ąĨÔî䈰”ÆĀŸūŊJúŠHZI€p'-Ú†í¸“EŲ!~|ɉ<ž¸â¨Ooh9gbéœXOŦ^^L2…]ÄW ūu,2]\J#dPYíaøhWėQ¸ˇÛ˛dãąĢÖÍw '–Uˆ Šą,vös*„IdęEhYéĪæŦ’Ÿž¸1 ÉīORyLģŨ!ZՋŗ2¨ÎTdšÃ„Vvš¸ķRp+Ņu=eĶVo=6Äk::ļ ĐÍ+ .ܨöÍ8°’ļà ÔîL­“˜7ņ5ąk}=Ä ˛ívŸP:SbŅU‘Ī1Ž0.IŠmŖÅo ū÷““Œdšcŗ) uĘã č;Õŧ/•ÃŒ¨)%€B?Öęv֟iN8Đßq¤Db20/!ŲČōöā~tācŒā˛ŲJ–E‰YK'ĶĻj¤ˆŌIˆã–ā“Ā˙>Ô\/ÄU°į%€îx­DVUYHÆž‚°đLÂ&|) ;AZpI$„ĶjgŽ1šbܸZ&ā㎝ŠåHÎÕČädõAh“˛á€p2Äō§Ī)„q6}â;ÔŲ Iš.ÃĀœķQÁP˜Ā @įŠ‘âfå߀9į$˙:€Ē–Âį–wĻ’!ļ1c!H*2yôÅJåV %ČÁ$ã4ą4m† ļÁęëY÷2ŲGäįļ=hZ‰čA4ÄĘ[ įÍ0ĩ‹pO ÔnĮÉČžJpFy}ęŪ„$EļG†ÚSíS4ßd„Æ\đŖ=M2Qå•9õíŠĪyTŗŨHîĄFQœ –ŽR&ēž;(e–F1Ë1Î 5ĪEuwq é…ŅC ‡i* -ŋ´äĻ!PU É>„ÖÂiō:ŒŪHÁ@\P“°ÖãõiÚT 4ÆG ¨#9'ŌšĶâYõ ˛ŪÜŨXK h!ÎļYēšw‰l ā¸šūV °3¸úūˆßeK&–Ū=ÄdŧŒĖÃķ8ũ*ZĐ|É2üēŨ™RdŋÔ6NÖj¤×šLŒķČ?9b møfÚ ËssalŒ\Ǎ^HãßúUëųáŗ¸eO´)į\ĮÚ˛•)>¯ī+ÚEĒĮĸ3a‚¨näkB|:ĒÍ# ´&3UņŊ–Ÿ—iahōŒm¸Qųc5SAņNĨ­ęfaj–ęĨšDRHŸ°}.ūaí"jŧ*€ƒ Œ~čšj]øeŠŲ6[õ'}/mĄb/•"'%XÖš{ßēj^UŽŸöÁˆH­–Ø"‡Fkū=ŦMΎč_ķå/ũú4V7ü'ĶĐ6Īūũŋ˙EOą—ôĮĪ2öî6EDr‰;†zT:J=Õüf0Č‚qßYâTy•ŨcÚ tŪŗĘ^<­ nw;‚ƒč=kŅzö'ŋŅÚá¤ûK€ēħéÔÖSĪöxü¸ÜwņŽæ˙JKÕ@퀨ÎáY-ĨiZrī•Uܲœô1´fY,×J„Ģ>G~qZ/ŖAx„Ü;+¨!\}å?_ņ§wNRsžŠ@āVmüˇ7,#ŗV•ēœ ŒV[ s‹4ƒ,ëĀfų‰>õ)[Ģļ’tW#Ë~Ĩt=ģ> åBƒÅZh´øĻ1¤y,¸ÃrięÅcŸˇ_°Å4ÂÔĒHĀ(å”učj›ų°lĒ0 €¸âē5‚éâ+ QhWAÜĮŌšÄq I¸ŒAúÕG}ƑMė$ä˕tž¤S,´öŽmČÎŦ Ž1Z‹vŦ{ÃxÁŽ‚[‹[;ä gį=?Jm؛ĻĢĨM=°žHĘļNĮ<–Ŧģ˛ŋŲeˆFFZč/îfÔ@ä#d‚5F;HbŊ†yîPÎFrSWf sPĐ­ÍĄ`öĖx“û†ŗžöōKã32•ÂÚhē´2Š[b’0“ ~ĩÕč ĒØ4ÖˇąŦĻC”bû˜˜úRZîUíąfËQļ\I%ŦŗˇHĐ.úõb]\¤m$ËąĪ–ę*Ėĸ^ųÛĩÅŪėŒ*Š]fÃėö;žČßi'™$!Ô+ˇdkekŗŧAc$ĻI$žá˛ŲQPÁ¨­ÅČ%\Bí.rįUí4´ķ~Ķp€ÆrcPŲ5v4šķt‘EAčzū5ĸInĘRw´V‚j÷ŦŽ#´Yp^áFöoaũß˙U3Lđd÷h.ĻImāc€ō\ƒíũMmčķMwŠGäĀĢmädʂ:gĻIô¯GH.ã…$" X.åã…IŲßppæ{œ,^•c c ē¨82LēúS¤đ•ú‚@˛sŽ nĐ×f5b¸XŽm˜2dQaY÷zĶ}Ąa°˛’rėGøūtFĢ–ˆ‰RåŨ\Á´ĶîtļÅÂCČåŖnúʤ–æĐ‰TNžtX%IÁ&ēŌ |ÍŠ4İŦíZĘÖâIŖÜ¸;¯ĐõĒßRV‡?3Įĩ"•ŅI',N}9ĒļÚŧSá?Ū!!ą÷IãŊUy~É)Û(ØųYŋ?Ί>ĸö×ĻDFōĄpC)Í$&ŽëLŠKõi.prCšë­Ņ!…Tg%Fs×5ÆhwîíōĄ;¸Ãp3ßķ×QÁŽ31ÚÎŖnAQ8ßFk [RÚÛÄ[psœž8¨å’[ĐĐZļĮOÂĢÅowp]Ļy"‰ĖcŠúúVŦ)6įjQÆŠJ6)žc%lÖ͜ĮĩŸhÜÎyąu LŨKƸA’Øīéū}ũĒ߈5áĩ’GĪ–2ǁđŌąč+ŽŌūčÁ4HĖ͞ÄccÛŲOō­|Ė›čzf”ÁtëxŒ™,äsY^-ŋŽÛK‘DؒE(‡žOzļd[{bbdÜWlc`ŠķŨTŨ^ę*ڃ™%ˆP6cVã@öîMJZÜmĢX¤¸IËpėÛ߁ôĻ]ÎĖßģÃ;.Đz…Z}Éōm˜1<äõLJmąGnaԎA5ËQŨÜÚ+–$Y§˜ĨĐąã¯ŅZÁ%ĘĒBފ¤dƒ•úҧiŽ$ßrû™°v/ē[( VPüFŊBŠäŠU=´)7Ģ*[iĪd3xÉį5ŗe§ ˜–IdÁ$ôäË§ĶŪĻģÕímŖ_•U8VAÕî.n ËÁ O'¯éøV”’nÍÜĻ”Yŧ,mUp’ŒpūuNiôÛ9œ–7,@€\}xëXōß?•,ŗ8H#Ü@'ĶĐzÔĐ[Ķ#š’6Yå;°Į&59ëØė„z¤aRnü­š­ĸį˄‡ā¨fūjZ]ĩäb#ÄādŒ‘\‹Ą•r\€rry'ĨuîtĐ %ZHü°ObĩZ˜ŊåUõ—¸Ô/#1Ŗ€ž ãŸ^õf×[Fžkh”lf)Ę]†wzđŦtmfG¸´Ta™K4˛7ôų{ôëŠŅĶ<;ĸ\[#ŠēhÁ3˛nüĀásĶ95ĸŠËfŒũƒ•Û-ę–Pß_ÄĶ`lPģ”ášūuÎę:C˙ÂI§ÂĢ„•˜‰>č\gw¯×¯zíŸDûMš!ˆp3šš/ī\Į‹î&´ļˇ–44m”uLŒõąéDåzÅB6\ŦÃÔôąitČ.CʐøÂ°įœ{Õ8‰‚Ņá@ã‘ZWȗ&K‘$M›X’rnŊģĶ4čdxÖ8ã$ē Ŧ@žôØĩ ( .HûĒĸ°Ŋļ„šŪBä’Æk`LCi&Ĩ2›Ų›†ØÕ2Ŗ>Ŋ8Šĩ+„ˇmĄ`ķ)V5ĀõĄīî5'1ÁEā4‡“Чwlļ’(fR1ģ,Z„Q^YgXūĶ<›Ø€>ī I‘uŠn7H–į'v˙ š I|ņ%ČųÁáXäcžÂ¤šģŊfōmË}h~B*ęqXi1ĸĒy“ļB&r?Ę UV(.ĩ$¤h¸œ*ÜļŅ V/uw×G;VGāķéN:T6k<Č>Ōā+.vƒč*yŖör–Į ŨÉw-´æfēõ+Ķ?ūēÕšŗ°ĐáŽŪÖ7šŋ“îŠäįÔûVė:|zuĢGfžeĝd‘° ÷öīÅWŅ´…˛ģ–ķPOs Á“8TŲĸU •îOąŠØˇŖé‰cĻũĻC+\Ę‘¤mĮ>ƒ§ŸZ]NČŪ[9b¸bČ$:šą6Š ĢC#€Ũž#c,UybOŧ÷VķŊõį§*Øč´Ũ*ÛKŌÖڝØ$Ĩ˛XũkĪüWeĒjs2Ío˛œyoŸ—éëZ ãē™m´›Wŧ›xüˆƒ×5ËkÚížÛˆÚækAŸ-åũČũ—Úģ¨Ęr~ülŒ¤ė´2ŸFĶtéDĶLĶ:œŗČ¸QĶĨk¨4{b-CŪIÆ>˜ëX°YŪÜŠššˆĮnęvĪ<˜1Î=Mz7€48'ŌDķ$ˇ,d>_ž›cÔņ­ÜŌŅĸŪãŦîu]OK0hđÉĮšëąPzķÖēŊ3ðÁ¤Įcz˙m`w>Wå-īëøÖēX XÚ] GʁĀÍ2YäšV†Č”LáĨ§ŌąnīCxÅ-Ę×ļ°ĖÖđ…$€‚Ĩ8ĀãųՑ|Æ|°ÎXšŠ{{mĸé˛HwģF¤“÷˜˙cÁ,÷ö'T¸œEbËŧ…låjyRm˛õöļą#3"0É<XļÚŊޝr-Í䎃Žū5Ŧ=îŨm_M:’ȝÂtĮ?Ÿšfœ‹ˆäRĶ9UxAū4ԉr:˛7keŽÉ´•ČŦ‰´ũ‹éY3’Ģ÷I­qs …¨ļT&V"#É>øĒÆ(ËoÁ$äD§'ņ4ŸrĘPIąöĘ{įUäSp IČ'ŒŒŠ“l¨%Bã^FJK˜wGCŠęKxĘĨūEč8'éXãÉIËĉŊ°›ƒŠ¯—÷ D6ŖuÁ?LÔĮJ‘˙}<ōÆÎJœz˙õĢhiĄ2ģÔ͈<´0zqK'™“×œâšŗÖ×[n'œI+E~@žŋŊ]ķ~U]…ˆÉ8Í7~€™xard ããM2•P#bqĮATâËHÆsŖ­\Œ8V@õ'ŠjÅ"qo$“ŽŧŠŽBø+⌠°äRĸŋĖģܜ”FĖpØŧŅę 3Î_œdžjÁnޤē’1€ĒÃ$‘…î:jxŊĘíA€9=Å;’ûˇ€ QĀšYĄŠXQ’ā˛įĨvúôĪjĸ'˜ØfÜ7Š4Ųffc’@Œæ•ĩ*ú–p#Æ Æ@ÁaV,ĸ(D…rqPyljležGÆoOķÛÚ¯+ŗp‰œ÷>”_Bm¨Ë—13)$ģryČ8ŦŠ„'ĖĀŽ*ũډ”Ģ3xČ85–3–äuĨRЖŽgyL6HÉÁæ¤DÚמõ<›į<ŒwŦŲe`Å@)œ–bqĮ˙^ÛIĘ7‚5äSYWގS%cؚ’[˛ļę§uÍEDO08rAâ•ėKԒÖķėEšDr¤‚ j˙Šfš‘­4ØÄD’V9"œōÍtŪ\Iu 2j΅áļf›QpI91ëSv=vF\z%Íđc4ė2^V9ÉúšįĩÄ{;¨ŦîƒDŒ7!<ŠZõķ$VđŦ…EčqšÂÔmėnī¯ėæEˆ7!GZâjĮ O­O$ƒOɌŧ§ČOŽOôŦŋčŪ#YūĶy:ŧ2’|Ŗę+ĶÆvąŗ[Ŧ0ÂǁĀĮŌš­e.ĩ#.œ2á€ĮÎE;Yn&yJéwsL–;-œ×WĄĻ­áŸ28âŽA>#>ĩŌØøR+-BÂ9wÜVi8œ×\–ÉnūrĮ0ۜōĩO;č>Sƒ“HÔu 5;ŠōÆ2Ȋšöü+V\&›o$pŸ´ē€N0Ŗ=˙ éeÔtÍ4Ak-8ȍøÖũ–Ĩor áda„äâ‹ŊÆŖŽ/ūũ>ûæŠô}ĢEO;7åG„Fa‘Zn†@Ip2Į8ރÂļ/§­ė’žir ķŌ¸Û+‰4øVFH˛õ=ēW øe^ãI˜ÍDŌ6Ũ„ō¯ˇZŪ¤š•ŲË‘r[¸ĸ‘8- ųA8ĮŊd kæ•.K!RJJyÉ˙ čĘÄyž@ G$J˛4îFrFėĘĄJÛËÜįcđæ—iē{›“1Sʎj CÄkf6Ŗ#hįŪŽjąDeT‚"ÎÄã WMyö "î—āëOޤģô* īn5˔I!y#ü+JÄũ˛Ķe´ėŪ9¯‰eGžd+ŅÂū]ęĶŨļÁ›”čX.1C’č5å m!–Ũ†Ą$h e@b?ʸßy6ķ\Ek†Và v˙$Wy&sy77&2A'ü+”ņ§‡ ļŗĩžŅä.$+)'“ž‡ķ­Kij\#v‘ĖZŨĞ@“` ~†ļ„Ņģ7ŲĻI%Y†HÚĩ–ž4QMw`ģˆ;øÖŽ;Ļ’ęa78§$Un´ŖcyĻÜŌ4$ ¯QU>Ė׊gąNąįÛÚhÖãlŌ$ėš8ˆ*†˙tëéTu]!ãš2ZE%Ŗ7Cū”ŽėC‰Įę°Ę蓅áG˛NFH•NvûW]löē~ĸ-īa‘#Ŋæ—>ŋJĘÕDuûˆ­Ŗv<Å!lŽ|STëi k"B¯0ų‡JŠ/ęjKĮ€Ų$F#ķøÕÛę6ˇzžąröZ| ‘?”͓ŒFĢ•É#'Ž˜įšÜ‹XøwĨXŸ˛hˇz”Åųûcl`¸ėG§~´ŽZZQxš $–mį0'pp@ĻZxĘEšBÖû ōÎúāTrkÚEÜō o iā;ždĶ’láĮ>âšųãŠ1ŗwīčŖŠ§Ė t=wF´vP_Y=Āœ°ŸŌĨ×ė.á°ÜōNā02GéWŧ1ŦiˇŪ˛×6Đ<*#‘%++¯ô§ŪëÖ7*đĩŅ‘ĶGdHjŽ ÛS†žÚęEyc…bŒōąäšąĻŦOsJ°G´—”–5ôũĒūą¤™aˆĨĀ8XÕāú×=i—‰)hî#•6.ėžĻĄ\Ũ´Ņßøz×O†;ƒĻ\ÜM '+ ųsĮ=:û֛øžkЍ>{´‹ƒ$kŒž8˙ëÖf•â8ŌŅb™!†$P–‘1#Ļ}1RXęöˇ÷ßdĶŨ¤w$ŗ´d*Šžļ3ķ>ŗ¨ę˛¤&Ę@%äG¸ŋīWOmi Ĩ˛ĮxlĖ8ÉŦûšaŅ­Į–ŪlÎXpk˜(ԍċ ›zdžsTīövË×sĻÖõ?ąBĘąų“‘šāS\yÕu=BVĨ\VÄz´ėd–ŨČ2CKԭĎŅĀb ‰:Ŋi' ncÜhW˛!šy“ōņÁ…5´ŗŨyiå€Ā†Æ+ģ”ę/PŅ•<Šįo■ÖCfVbA$ )TĪa‰­…ŠK`Ąn”¸ø'56FąoĒ&Hh<“PA¤ēŗČ\å‰$ž[2M*ŽY„g’JŒ“CĖû@H<üŧ’i\´ŽŌÆ‚Ž-NĨē´q‹´Øäš€ĒŖ,„ėĮ]ÆĄšž<w8ę@ MŽČlŌÁģːvÉ\šĸČĻF[œcŗã4}ĩטm‚rYš$U'¸šs˜@bNrOJÉß 9Ë K+ŖÄAÔÔw+ fߞ'&ša–îMĶ™%#€°Œ>§ŠmΈî‚Xâë‚dcõ¨tīģ3nOvC>  ‹@C@'€+”ē<=ėōÎŲ$&K}ŊMt Ĩc!’Qîã?JÖŅ4ËX.šahĪ!ĮúD˙0^Ŋ?úÕĩ* kkɤėcč6~"¸˛qim™3Ī˜ú~[[hž…䙡ÜļNé.ÃúgŌēĢšî´Ö1ŦŠ@ųŒŌĮ…ö|§|Fs“ÛW{¯wâ[æĶ<=›M–įSQ‚O÷!íŸöģuôÎ<ļzlú[ÚHĸ(Øę­†^•ŊĨx§IĶôÄ´˛ĩ‘Åē…D…~OΧįRãĨ‘¤Z7uJĶDĶ^âéßėđ ÜIÜÍĶܚĖ>+ļ[;c"r¸‘ūžƒÜÖN0՘å’ŲRŪŲr*95Ģ玨ŗ?•#si‚âÚ-4ČĖ퓆Ø7ú–Ģwv,ąI¨\F:|‘œj•ˇ‰ÆĄkm'—  Ÿ˜šĐHšHˁV%#8Ũ–#Ū˛ˆļˇ‰•ãXw`Įæ"ŖŠ+ųe&ŲŨ27qĮĻ*”‘FęĪ1‰BÎ\S§× ÛŦvÄ ČĪĘ?Æ˛í´­äĩڐU†FkDÛ؁Z”7Ū y4ųģˆÅŨ \Ë2œ“× §¯åZÉœp‰˙y~VŒdqT”ųČ!ŽÆĄŒäqSŌ;ĀHįÚŠ>åĪx¨‚8ŅTNd8ũzĨ-ô6ęL˛ _€ĒŦH4ų.áD`îUOŠČ珞fÄ1“&;ˇīÅ=DŲF[Ģéõ&𐒁oĀĩK‡(Ʌ Ąˆ';zVĸ÷N’Ájn"ā4kä˙Zۃt‘(’5Bõž•ËkzƒßĪkhV6“ “Ô ‚ŅËZ\\ēü“\ą#Ą8ÅKiš†˛ž\fTXÉ”fŠŊIOR8Q˙ĩUY÷”ļGlÕÛWŸûz)ā ‹ ŧr 'ĨoZč0ÛĖķĘwÉ ¯eÅi$ą c†8âr„cŽ‹˛Ŗ_ĩj_Ü÷Í7Ûd˙Ÿˆ?J+3O™ĮØxvÛLĩØKpWũs¨8>ŨŠŅ^y:ÂÛÉ!pÉÉ'øš­+Ļk.'%›vŒV‰"û<Öoė’Ä’:Vđ÷Ÿ)“Ņ]›P•īEÎ08"Ĩ6ŒŽ^FUF\ÎI5ÍKyrÍæ<Š;ƒĐ~5ÔYΡpÍ ™AyœãĘwÜlQĒåĻÜw<œU€ōF÷ëëŠsneåš ã vīY …Y–iŠūņŠ&Ô`ĩR#Fv ´íĢË+HÄGl]†HZXm.& ČgŖ’ ?QkЈę3Üe ų8ęIÉæĢjÚMÍö“:$…ä(YIõ˙:č­ė…ŧX`ŽųÎHÉĢ DK—p>î0*[UŲãVڜÚR D¤ î(:û֝ļĢ}¨ŪÅōÖe”qéS.™k&§t.—Ėg*ąŽ…sũEušuĻĸ>Ãb‘Ëw.Wđ?θđ¸čU”Š?‰t˙#ĸŊ4ĩ[ļÚuĩ´y‚$€r[&Ē_ŲGrĀĘâ0ŒrzÖŅE7“Č’1øqYŸØ÷kgķĮ–F ‘šëô0kĄÆj âH/Ĩ}Š“¸ōĀ{{÷Ŧlü3§Ėļē…ÆĄyÉ…W›ˇ“Ī ÎĀ5v+îOd Č\dœ`qÍ ¨ĶČLąHrĖ匓Zqč7wŖ-ąũˆĨįūúĘŦGāOŨC-ÄzeÄVŅÄĶ&¨î7cŅŧáų*ôJã#p‚7žKqË`I'œũĐxŽÛÁŪh'‡R›K›Q„‰Q\1ų¨ļš^įkqyĨ-ƕŖÜJgËŪ€cÜúWŽčˇVMg}Æi%ĖĘŠô;Ũnîā­Ļ” Ŧ¸Ããä†kŸŸJŸË–KũViR"D¤J vãŽ}ĒSkbî™-œVڔ&ōŌ>\˜ãb2YF?¯zčāĩˇđæ”ĶNȒHrėÜ~… Úhzgö„ĄÃ€ŌüSÛįŊajÚĶkio´Ō n#äīF­’Ō[5_Ú_ÆbY#0‡Wų$åT­¯ė•ž@Œ[FI5ŋmŖ$pø‹pŖŽ0éÆjÅäGc!*šR܌Ņ{l†ŌjíębV…VÚä;&)Ö÷¤Ųŗƒķ>ãUb:œî@hä'JւÂîtuÉéŌ1´K[*=H^v-…Ú =j]“J›Â+°Į5f}.#ķ Ė ¨ČÎkQÔ5LĨĘįā‘BOĄMÅt9K2ŨŖāc†=ĪŊz.‘kiĨiąH¯ÆŅ‰Į Üg?JōíoXmB\š`ų ‚ŧĄŠŦu}Fō+}2âáE”@ \zaéVĖļg¨™nĩiA)åY ŽF ŸOAīZ,DP¤j¨ *ŒôĒļ7ö÷0āUW*2‹Á_ķëVž7.8āsÅEîUēŗYģš‚ÆSmng \å›ü+#áæsjoÅŅ!į*Ę*qģwãČ­ŲgvYÚ"ʸ$únŲ˙ Ĩ­Îbž@^8˛ĶųŽz~<ū\ˇDĘZ—õéVâĘkhZæį#1ƒāüĖxôã­y&ģÜķîV0 ¸ĀŸÆŊÍ.m^Ū hq(60äķĮŽkÎüwā+̤¸ÔôĮw` Émˇgo¯Ž*ĨÆI4Î ËW‚ÆÚhåBˆÚĘ98=*ė­Ũ4ũJÍÜrŲ]ĮæC$g 7pkÍŖDd[r0æL37 t­Ye]P’ŌÚč^Ų‚ *pAīĮŌ˛•(Ę-}OM/lũĀČ 9…dDÂ+eŒr+›ĐđZš-ÜōÚ­ˆ•ü´ųUHۅ^éVĨË.iŠ~ęz-ÍŨœj|ÉIې9æĒ mĩ{mdO)‚ˇocX2ˇ—,sŗ€ęyĒIynņÍ jn YĪʧãŌģ#ŽĻRŒch­Ėģí6_íi-ԜĮąˆÎ<ŸzŊ"(!|õ''ŅŦjļÆî[ŌÂeÚK>2Gų˙9ŦyMà‚@<Ķ#ÖåžfЀ‡1åŋ.Õ4q2œģ|íÉĪ$˙…' ufĒP[ 77d¸I†aK $ūU Žäķ$ˆ=ČÆj)oėí'Ž•DŽp<ÕIõÛV˜El ˛r A(ōAuģ/yĨ3ŧĢíå‹ †]ETLJ‰ČÂđGõŦųāģ–%’âEļImÍÃôĒ"îŨ]cĩˇiä9ä<Saķö4I#3y¸Lāąæ‘ž4\¨ŪÜ|ĪŌĄnYČę=FBĶA ų‘ĮMŧøĐãqؘ´¯Bš#ĄÛ€)bWYĨ‘„A‘Už'•™¤~3÷SjÛiđ„†Ų|Ü‘B€š’,Č&TϖŅôT3˙€ŦģßXØÆÖւYĨ<ą'q'ųU)ŖŋÖ§+Ḡ8Ā­Í+ÃV–ēäŦ„rō ˙ZŅEDÍģčŒ/umIĀąļÙEČZîôØäŗļŒŨ(’p9QÉ'ųH×66 åŽÜđv É5‡Ēx­ “Žå˙úÔIŨʑ‰ôĢÍRúŋÕ`´ĩpXŸZģo.ƒĄÆĨÉyˆÎæ]ŖōŦ„Ô5+ËVš T€; !,äzķVl­-âQ$öí<˙ۘîą•K-BÚÜĨŽë°]Ä×6ÚRÉ`ō.ÕūcôůˆīõD…€ą[ĮōDžäW]âũ&Dh'æÆŨ‘ü?­prŨÃg6ËXū΄}Ķķ1ĸ-É›ŅZx†˙ÃÖō4wAîd# *=†sW´oõ}Të×īdŽeY¤ĻäŦU´Ķbĩ›to+ą-,…Ž?šäˤŦo˜ō*–\9x‘ōųƒ ~ŧÕĩėáœJĮ8Įˇ?™4÷'BŒēd— ¤Īœq‚ĪSŽf_øSLKi¯¯ežc’Ē_Ëūĩo5QnX™|ട,N}€įõ¯<×ŧQ{}1etˇŗ–)ü?ƅe$Œ-gVŌ,Žíŧ=Č( ÉĘļOMĨxé×Ō˛­üSĢ[Ûi(ŠpŲDĖ˙xkC‹Äs(V$ũėrEajVMe ēˇ00A\ŠÕXÆæģøÛÄqų†mnyÜž#˜ \ጠ=…s…ī¯Ĩ%Ķ`Œ‘ædãšKUiä’IdÃ0DY'éĮĩA§Š4@  mĀ9Įj…- ?xi5k˛Ím*Z@CI)ßūĪ>ŊëŋÕ3ЂC˜|ģ‚ä'¨íPĨ­™×ė éŨ3 đˇk{fë;ĮÚáHfˆėEt˛–Ôną¤ZDÄHB1ĮĶÖŧ3N˙jCîŅ‚Ā+÷WíŸĮŠī´ígPŅī,R0[>OƒWĨÎiE¨ķt= "HbUqŠāžÖ¸/ęŗŊ­Ú wG‚éĩq€0ŋŋ5Ķk7OicąĀ3Ė„­€ŽNüũ“MžY*c!‰ä`äsGS7ÜæüĒėž:dĀ”ˆŋ8<ņø˙žĩėZeŲģąģéˆÛš#Œgëũ |ÛÜąŪ-ÄnR@āŠN6žØŽû@ø‰ui¨Ąž†!hĘV‰0ß_JVÖãåvE_x2M#P}OM‰ÎŸ+2ccœ§Ąü+0EĨjēl2ōnâ„Ŧ¨Ģ´Ú}ķ^ú'ļ pņČŖr Ÿņ¯ņ_…ŸCņ#I‘ Ĩˡō ņ÷Ŋ0}ģĐmNW˛f'Ų&´DÔ-W¤ž\ąAV=ųú×máč…ėO!F‚B>áāŠúW)öĢË[‰ ĸÉæãq œņZ—ˇrX[BŲ¤U^H'ΰĮįXWŖ ĒũQŦk8É-îuÄĩŗ*]€‘‰”āÆļ˛pņ‡q€ ’G'’k—ŅĩË vÄGzs2ãy' cŋˇå]Mƒ‹KS s ëcžÕÍN6|¯SY_â[ZŅP™sĩ¸Lc=)“Û)†āĪ×ŠĶž8ŖÆā>÷P}Ģ2â;œŧ™$g5ŧ[NÍčTyZÚėåu™´–YâŧpĀ0$įŌšč´ŲuŨj“ÅdŖ,ōu>˜­×ŌŌŌæbtčfcâLãœô8üĒņ€’‰äb mŒŽtŸjé^FU)Æ×{›Z&›-ļDę‘ļlŒYų÷˙ –ūķM´<Įš™bbŪĀ“Ā=‡'ŠŦ¸5;ũJĈā(Ŧ¤ų`āŊ[§ā*‹]éļH¯pŦÁ0F¤+°ÎyéĮĨ7§,fö_‰ŅčNdŽkĻFI˜c’€cĨAį™a”.5g)ã<ŠĪĩņ&86ÆŪy!ˆ6đöúUËû6‰t ˆŨ°:įqį˙§I´Û4ŸōÂ(â­ÜĻŖžƒTļĶčkbč¨ņR@Vg^GQôīY­™åxí•ÉÆÖ’Ŋ9÷刎žÂŅ n•ÆK6yĪøU(Ũœ’vF>™ĸK*;Š îę;āUÛíAlR;[…”w`tíÆj}NũØ-0ą† žÜŒzņŦ-Ļhâ;˜‚Kct抴´‰šƒzȑ]ÂË!ßpFy$ņ]ϟĨC¸]L˜āāŽųõŦí?IH‘§”)‚ŦzP\k]ŗYBJDq‘ŒëĪĶÚ§Hj÷ų´FíŪĸŒLvdŠöŦĻē‰rĘpr85š¨đÎfvi8(NH¤ö{rÂā–”“fääÍRIîoæĩu3F†#ÆåäŒ˙*|éô •W^ĒãĻ¤Ķām@Ki"•I܇¸õĢ#Cūŕnb•ĨˇųLą’ƒŽÜÕr_¨šŦR°Yí%[kņˆXūîsžEtļđ b–ņīķ'oΜöU°ļÍŠJ˛pA˙RčPÉĻĀÖ×s)PG–`DãT'$Y‡M’XØNÛÁā)\Uytcm,rZ‘wņHŋ/áŽõ¤5ß$(XKžAO1…|Æįv~ldVVÔŲ>Ĩ7؉6 ãv2ĮéJš^Ā$'|Ā“—ų˙[đŠgžlŠHđ2"¨ž§4s%Č9ˆGãĐ­5}ËíoDDĒ›oōŦĮVŪÆY8čÍĘb‰ Ô¤Iu‰#8!Ā_ņüj?ŨęērYE¤Ûvc“ˇ įTĄg¸šãmŒû'ŊkíDīČˆÜ Į¸<ūϚ5ëE6Ú=yÆü`ÆĸūÅšŊ•g×o^W'"Ú.Ÿįđ¨õy-tˆ ‰a„‚1ķīWËŨ‘ĪŲ牤VģÕî‹eIXŖ= QŅ™¤žY#Bc¤đ:˙ž+%ŊÕīŌ“€įņ&ēmâĶÍŧ ,&äqąŗīíRՋLÛōƒ¨2žqÎĀ0ĸĢJ6ÆĀĢ6ÖwîģJ–ÎõlŠŌƒB Lû‰āqBi ŪG+vdp‹Cg#ÔļšpēųQÂ"$֏ˆŦí­Äf4ŪĀĀ5‚5Ļ͛ґÆ6‘ōխތیéĨ0iÖGoîâP0 åaÍĢÃqsq Æ}sYˇw—7ō$—.w…(āëQÁ§Üj7ĸÚĐŠb79<§ü)Úۊ÷eũGĐZ)ŠüÛļãbs“õ§hžÕoęƒ" ˛Â= cˇë[ąiZ‡lZņ ûDęųeNž••?ˆP›ĪƒšĢ %φoõU•§—äļĩ™%sĶéëQÉvŲ-éĄÆę˜{†'ĒąUT\dõę…āgļIĀÛČÉÉ ×B<ŦË(šö5´ūrŽÁœgũžŋnĻ—ĸ萤—(˛¸†đöĢäėgÍmÎ^Â)åĩ‚Kk•‰!ÉëŖĶõm#K†[MBčÁu?Š×p튭¨øŪžNž€2ä+cjYZn™ĨęR]ͯ\ą–D €ääūtĨ•Įî΂öå4̆Ũ¤ŧÛõŽW’>īSTôũB¸hÍä“yŒfšRąįŽŨë™6ú†„Ō6ŸĒIäWpíîjôÚŽĄyĸ2;¸ã`XăpúŠÍÅ3ncŦļ×P•­ôÉRå"ČaC˙f?…I¨Ũļjŗ_Ū°‰›fËqĀū¸ŽrÜø6xĶۜ~áĮ’ ˙ĀqüërßBŅŽ,L–Ww–÷QĨŪ€{g5 äļ¯Ą-Ÿˆü>GœŠįŧČrkRK‘N.­Ų˜ö$?âî_Pŗ›Ckv€mŒŧ@*[;ļiq ĪĖë"—ąLiĪÛėJ¯—ž´ëÛĪļ\´hÄ[(9Ī%ŋÂĒ HYZ6P*]ģ}>ĩZ ÛZŦ įs$§€ŧ‚:įđ­hŅĻŽ0ËŸãTí@ēc dŗ1 žĄWŽkVGM:dnsĩ ëžyĻ•Áģˆd…ÆrÎHÜ}(FŲ áÁp0=ĒŲÕ!"2Ĩ•qÉä Îļ¸&'•‰ 2#SŨŠõ&åégeaˇ“Ķ&ĒÉ#+10Į Œ ‘§Uĩ>ĐÉ'Ö˛KŊėŦËÆæ#­4‰oR/"}VčÃ$ËBŠę´*=.#ļYšv=IĒ3Å’(Ę‡Ü äŠŌŊŋ‚Î%Äʃ õ49t*)-Kk ķ0qü 8U>žæŖF€ęBūY]Ø&Å…ÉßøŪ$ä´€•I8č?ũUáŊ~ī[Öä7“Ĩ6ĒGÂæĸ[\.¯Ąč‘[iīq$p¤FEĀlcpëÖšß[Ziz-ІØnDîIÎĩ4ëEŅbžēŗæš‘€Ø}k™×ĩË}M-‘× šOcœ}k9+¤;¤ÆßZ]ŪjzMüŠíļ>vǁõ§jēŧē1Ã`<°㠎SUgÔîeņde!kĸ‘m*Ģ÷3īŌ´īü%.ˇhÍ5ÁŽ@w*(Ī>•1MŲôĄg@Öîuiã”īHUŠ@ ÄL×C+V8%‚“ŠÆąĐŒZ`‚īF aclŒįĩfßx ,’EbVu_”Čyöõ­`›ÔMŲj?\ÕŌ vŽHAB`O5įķę6ëļîîPWĻxũ*žŋ¨ŨÜŨˆä‘°ĢʞfÚē–+ ęFuÍkĐÎ÷fļķũÁųŠ*?´/÷ĸü¨ Ōīšnōî÷ZŧXåäō (÷­KOąønÕĻģ•]Ũ€P:įž•%­´v0xŒ–<“Unom’æ1%‚\¸ Čķ5+} —™‹vúļ썤¤Ō`ŋ„oĐ¤ķ•‰ČQÉtkˇvļę#ļļHˆŨ~ĩ!ņ]Į–@†'Á‚§ĮŊ_?DRąąaáŨ:.gO6U†#V]ū§ŧ™-ŒĀ5ZãġĻ/$Eû  ™äVF›lÉ-Đc†ųˆ#åéRÛž†›;:4Œ c÷NkgÃˇ1Á# YA`’:V<ڈH˜”‰Øۀ˙J ÷÷PŨÍs ÂÉ´oMÄ ņĶķĒēĩ„ŽĪK„ØķKą ­8‘#û¤–8ÎNMy„ÔĶډ­“ÎŨ‚yáZIãKäP ÃcrU‰=øįéYĘ+Ą¤gܟâ-ŊĖ÷Z`ļ34¤H És÷zb°āđ׊BĮ6û‡›ų,øP3^ĩŊŒon"Yc‚Ü0'a*sÎ™/Š5m  Ŗ$– ´Æ…Ė–…9ĻY˛đNŗ,Ģ&ĄŦÔBÂėĮwÎp8­č<2ÖŌ´‡Sģ•˜L‘\ŠøîęÚ3 ]ZJÝōšf'ūEW縃zčæ+ôŽC€!GâA4Zlžh#°ŧđæœ6ÉssrpĶ9>Ũ p~!Ķ-­59cąˆŧUĢOI22Įm:0āš•rJ\ņZɗ苒øåÚ´7QåT& EšN?ˆöĪz¯ˇs;š Z(ōĀz WIáī‡ze„Ūuɖæl$ÆÁøwüMu‚$ĩ_. q€q€+–x¨=bŽRRĩ¯c;ÂڌךjIs Ä)Æn.=yރQÕ!Ōô÷Ô.Æ!PĮ,IôŦŒ‰šōO9'ĨTšDÔ-Z Á [''œ (Wöķ$6íšÔiZĨĻŠd.íŽĮЂ>`} M4ę‹‘€I$`bšXĩyl ÚÁ …*•%ŋZæĩŋŗ/š”ˆ#8˙<×LR“Ņč>mé¯íŽ­š[w&0J’8$ņ^_­ŨÜXŨāų5Á+‚w2zlzž¯Š[ [0-­ˇŗ3.Aœu'ú:t:Å|šēģ`1œėŦ{U4úŪæž•sgu§vU<€IĘpßN߅ZĶtcypķ*}šÄ\ŠŅ°Ņ- A5Éßå€vžķëRžŗ#ËļÅTD0žc öϜŦ+"ŨĻmĻĘÅ Šxb8Ž­#ŪU‚ņŽ@k‹. ōæŧrOÍ#d“ôí[:6§<ĄI lq#˙ë¨kŠŦYžÄ†IöŦmoOR–æ4š@e#qœzƒīWŌu24oä”vúÔĪxpQ\ŽN(NĖlųßĚDÚ~ ė„nĮkŽĪ5­á\EŠD×L$t`P1É'úgųũkļø‡¤ŦX2ķļ3ƒØ˙OĘŧŽ2līɸlđpsÚ­ni.W6=¯W”Ũ-ŊĘÆâcwđAį#ۏķÅsē´ë¤É9YcA ÔŪÕŽĩŊ&âČ&âŧ-žQ“}õ5OVSs¤ũŦžæ°Į'˙*4šÍ}<Ī*ģ ÔŠ +0㜊–„P;dāļį~ „ąėjŖJXíSĮåLŽcÚžxšn ]P“D¸ļrz¨ū¨ííôŽÛÄ:$æ‘<7~U/õ*@?įķævúuÜ7ĄĘKQێkÖ­ŧk6ŋ%•™–ä|ųcL’Į.x†HŠå{‹wĄį“i—zu´búŠ Ô¤=;ôíWĄšo˛[J īŠ¸##9é]׎Ŗĩ¸Ņ#ŌĄfÔ Û" ]ΊûØé}:âŧÂĘü[‰!˜.RŖę=žĩ 6•ËŠm7ÕZތÖ÷Pę:nčp2(ųAdũ*ÅŋˆY%ˆ0!wŒđzō=>•ąe$w%Ûæ*mLžÃW/Ŧۆ:ŲTų`ÁėIíYՊRR{mķŌr‹õG Xk°†XđĻ6Rr¯?JŲ6ŠqCî^Īģ$WˆYjķéú‘`ÅáĀܙč•wÖ^*ļUË‘^"2ƒ–ĪQØqM+­ĨWM]˜Í~kt‚ęÚI™@Y7lķ\ŨîĸiPÄfwvs”É'ŸËņ­`Ũë7†.Z8éœ{Ö>Š~—s[´‹Ŋ#Œdˇņ>~­\.–RĒ{îj­ü׹ĩĩ°[ĤɃĐ_JÃFHeKŠļė@ˍü‚GN=ÍgG¨Ī ö]˛„­žFÆK˙];J˛–˙PЧ ų‹ģœœzVˇ[ŪķjHŗ{tąĩĄ”8y –O0`ąëĮˇÖēų&6öF9ĻƒGc'>šŽW^‚'ņuŊ•ēXäRWŽz1˙ ÖÕgVš´IŽB‚qĐdŒÔâĩĻ´l´›’E+ f‘„…v<Ø.ĀrZŅēšveE'fpY:Ÿū°Ē)>Ԓ5’Aį¯Ö¯¤M´iPw—Ą5ö°—gh;t?"ž tûßáYī5ģ@ •TŽ`:fˆ,ÖIBœd<Ö­Įi (E œ°#œÖNō~cJČ4ÍBŲá‘'‰#'#ŸÆļ´ ĩŗCss(bP ŒNj¤vh‘Į–…°Y8Õ'ü%v8`ļŗĘH•É=?!WËd4ˈš-jŪk+s†g‘ߊÕĐXū`VBĨIč¸>ĩĘÁâT˜´pXNĖ:€2hXj&đ›Bí )%Ž g&íŠQKbΑ+éŪ@’$ĻF5îŽigŠîõŒ“7™ƒ€‡WÅŧY59P8’ÅjŖl‡9'RjMnh⒱%ž˜clÆō@ØeÅÜsLsÆ6§ >ŊĒ'ēgV¸S$}Aü{VÄ4‹ A‚rAįđ˙nMî8YņĀžãË\呌ū5Ŗ+oŽÚ0ū#ĐŌNm–Đ5ŅEd—éøV#ę đLúC9*¤“'1’;.yüĒlۈšJÚŗh˜áŧŽy÷5‘­ępĀĢ,ŗ hđIf?9ú å`ÖüAwkåĮbÉ4ŒD—r.6Žz/jĐĩđũ´í÷sûy’CÆ~•q\¯S7y- øĩ]SRfF˛hã|îŊšëQšô?Hĩ–ķP”ŪŪ:œ<ŸŪöЖŠŌ4Ė(Į,[ įoĘę–ŗęwËä["•ļVã ˙÷=Ē›m“d–ú™VĮ§Y;ŗėžS†XÆ]ķØz ÕŌôÃŋjīšōl3ÃČE˙mģUíÁLûVĖ([ĄÃūŅėO ŽŌÚĘ (|ĢhV$3õõ>õ-–Ŗ}Č,,âĶ­Äd)s‚vއüúĶᔤLųĀĮ÷§š!•9$“šÆÔõ4‰d„ ¸Č8ä-$ŽSj(åüG{tĒY3Œu?įéXŅÍ*F Ā—$ã4÷ŠĶßŊÎî‘ä_%ܒØÉÎ2kdŌf-ÜĄuw !ÆĮ…Ž›E—ėvĨ,v[-ę ķÚ¸Ŗ—ŗ5ÍĘųh§åBpqWc)5Œ“ ëm„¯‘ņT•Õú ;ē߈šōÕĄŽpņ’UŠŒ)Æ+‡ģÔä¸+mĀvÁQКšâieFH”$VŌ8cēŽF.å2ų}Ô%wd'#Ôŧā´Ņ“ûGPD{ÆPO"%˙ÔÕŊOÅ6í}Ÿ§Ā.īX c ×?sÚߍå: –R7Ų'*#‘‰Ė„`đą÷'ŊpúĨŪ§xžLfN|ĮÎ /ĻîŧôĄ+ŊFä’Đõ“6œš<î÷ĻYÄĶÆų ŪĮ†ŧc_Ô­.īŪH ŦŖ€Îų,ŪĩŖŽkÃ[‹dˇˇ‰ pŲĮ.äRzŗ‘Ô˙_׏Ÿ2íŽ:Ww8–äąV9ÅiŲKqo3Oi"'g$YÖņ1eTR]Ž>•ßøg–Ą|Šo*Gl;\(ČûŋZË{!,Ŗ‡R„2\ųĮ¸+‚=ˆĒĄMK>Ÿv!`¤ē†ē“⯞ÔLŋmŅ˜cčãŪ™kaaķ/īå-žHĀĮžfzœ}ŧV—ÂHõōŽF0JāzéRĮoqĻܰjjāgä<āWT|9ĻČ# g“€+lč–ēlBîâÛĘSĀ">ĨrėÎßUš…ÔŪZįŸŋˇ­mZkQ\ŋ“ ¨‘ĘįhęktO§ÎÃdĪ‚<Ž*Äv-)ķ-4BŽx2Š‘S§bšYˆŠ%Č;íäŠ92ŲžÜĮƒœŖ&ēĶovKh"9ę[qĪÖĩ!ļ‚Ō2_kJÎCc4Ņĸ‰ĘÛy¨íĖĞH=sWŲØ¨WÉ8ÚW#5§ŋÚæa . ä…Î?ÕKhlá-+ƒŽOËŪÍą•km!¤ÜĸEį8āTWäŒLãp$ĢIПĨEŠ]-ÍԈP ãKad×,a 7aMģŒtē’%Žä9 zņŠTGĨÚ´÷9–@I‡‘ôĪzŨXí´ëfrrįŨI>ÕË_‰n.L¤%ŽcÅRdLģaz.`e’79Øz–Î~”ébŒ:ĖYD‘įŸAI¤Y- Ë Iˆ<Čx@3TīnŲähA6w°čGøS}ČOBŌj†iĮ#,'īÁ4ËšÍÃây СŦ¤FŒ W2zæˇ­Ŧ%ˇmĘ—ŒōõĨ°īĄ5­¸Šķ 4ˇz¨ˇí†Ķ4ŠTļpBāÕ)/žĘ†F,Āpv5ƒy,×´‘îI$õĒ'vnÄ騎`Ē[ļܧЍ§‚{ĩ-Ē’0§Š5’‚i1æHIî]—‡ÄsÁöŊ„>ääæĨ"Ž‘{J´ŽĘČD‰‡ošF'<ÖmĶ>Ŗqûˇ&Á {ZڝÂÛÚ0AēiT…HɨtČ P—åØå˛éųÕ_[kęf1äHÖåÛΕ‰*9ÂÕŠ#Žci’„¨ äfļŽîĖäē1į ˜ä…Ž\šūĶy7SĐSÜCīā–SLÄŽsˇ=igēB#ŒüĀr@Ī4‰?Ú.‰+’zŠ‚h– ZYBųqւYTÁäfi%ōF@‘YrŨ}ĒßģÉķƒÎMMsrn[,ác<)=*•ôę°,QŒ ÔjˆšZô=ũŌÛB7FÕAĐWá˙ÁĄÛ‹™ –Q•=˙¯īY~ŌߨLš*į+´{_´Fé#¸RrXuŠzÅhrū(Öîš/ŗYÆd,0 rÅĢBđ|Оĩ*Û1=÷M{ #sbą­ļB>ūĩ|§^ĀcšĨĨÚZÚYD–Ęž^ĐA î~ĩ—¯ø† '‘īyˆų–1’Kō4Ŋ–Ļgu˜`ŌžØLČ\`í9'ÚŧūhG Ziņ„8ɒNšīW|@ōęæŨŅČhž„~5ĖJË HČį VVZ˜IŨ—.`iæ\ŨĄfęN3U„ļĐ6Č˙| qâŗĘJōä’O?•li^Ôõ;ˆã´˛’BHä.î ė‡Ī˙Ļ)ųQ]§ü*˙Īŧ÷Ũs#NIēļļz*Hō0ŊąŽÄĶ4Ÿ GijچĻîŒ ČŽĸ 5ōŨę3y×D’¨8TũjKÛ1yæK}q˛Ō>Z0~fú˙…C#”ã4í,ø‚öâGw‹OŒŲāˇãQßYiļ—f'‘‚žėŒûVƒęjwKŅ­Lv`€ėƒ šū”ģtí˜Ģ ĢâqŧđĒi4"æ‘=Ŋąŋ˜”USōÁæŗô˜æÕ5d…?qFųą?ĨM¨Ū]ęÎŽLjĀ‘Ķ?Oj-åģiV-ÛUX׀(NĖW7įđĖE Üj1žI‹ß\zÅŋŋŌôö) ôw%T¨CŒ}8­(Ŗ/›Ģ9Ë95 ž´Š\!>HėÚ Ĩ)4´ÔŅ]ô8kžēVˇŗŗžDČ;¤m Öļíŧ?zę^į˄ ’ûŋŸĘ­­§ˆfŧ‘,bŠŌܰ™,úqWSÂČy­ëœäĒl\~œ^é9Ãih$õI$™ŽXųģ@ü`Ī,OsˆåwŪ$’kŲĶÞšßėņéöåd‘ISÎk4ü0ąV2ZÜ´dôR7Nnî'ö<ĸg1@îķÎ*nU°‰Éčē—ÝVi-ž)Č9íjænü=âgV}.åHÎPsųVŠô‰˛FZ[j˛CŋvÅ Œô$V‡‡ü!q¯Lĸ…SÉvęzŌÁáũ~uķĻļšHØXĄĀü+Ōôkx|=Ŗŧ0Æp]ČĮÚ'8ęē´7d5ØææąŸÄún˜†>ŌĖ”āJbę­^ŗņēEi$—WŗUā¯áŠåŠGĒâk_ĩÖüNÎMƑmžƒ&úõ­Ą#•`<ÁÁäũk˜ƒĮzJ)24Í!ĪĖ8LJĮZz9!.$ōJåJ°FJ÷–§Oq;šUUāœTHZäĢ“…xžŽVoéķ1cØĻ~´Õņ¤%—ˡ˜‘îŠXzŠ•DÎ͝ ÉTÁ#īc$šÂÔtm6{ĶŠŨ‘*)ųˇcõĮä*Ŧ/ŠpPŲŧ[‡ŪgĪéÍMĨ[&­¨´×‰+ŽėƸ!1úVđƒ§īI؆īĸ&Ķl^ūFk@`ŗ+'ÎŨ^ƒņ­ŠŖĩđî˜Ī ą*HŽYØúšÔļ…Xʎˌ }õÜV°ąxŲČ]ÁW“ūzÖôę{Erųl`YY]ë„M|Ími’RûÄ{Ķ/u(ˆOŌcË å$ • īũęĢŪ¯â’ŅšļŗN ^õĻmŦô+rÁxåØÖĪĖ•äP´Ōní¤Ŋnn9g˛ą÷į?JÛl‹G>ų1šöũØũ>Ļŗ­,æģY¯e ehØ;7dČúõ}D˜ãgRI [ÃÔũãīRit[˛Ô!3Æv€AÃ1“%˜õ5Ņ[š%`›cėøWá"A3ˆđI;z=Ēüzč]%Vq$šÚŖ¨^˙Ļ˙Ē…&’ôģ-ë—qŨBÖĐ ’jņ~ÎXĩiá(#hÎp8ŪŊ<Ũ\n] =JÆÖlޚgÃy‹ļE# zZëŖtaģ~^ĢjWV,ãq‡(Sķ ˙JęõÛ5ĶāÔpĮ$O$jĀäÞ:˙1^;*ˤj~e´¯F,ޜô­ŊgĮ:Ž­ĨGit𔍲X&דØöĮNƒŌšÔŲŽ§'w)‘˜Ã7'ꚕQœtëDœ3’ėÄæĨ†Ę t$õÍ2,M–í„@ā2{WG§6‘°‹ ›NŪ}ũpyŽ} €RFr:š–IŒČAc’Îi‰ģlwv­ŨĢ]Įx¯}pۈ'këŽßĨgëvbĐy°E’EÚ0y‚ .ģ=Ŋ´Eĸ‰'t# vúw¨îõ{›†UŒ,P°Ā9Îîŧũ*Ä€ŠGféž=ŠM%Ą<ŊY„Zâúæ,Z1/€v×ōށ"ÕŦAad“[…üŗ–QųåF‰Ŋč.p€€ņ“ũkŗ!R?.āqŠÍy•cŽ_éÖ  ŗšz°NMHÎ@N„sY:>EĶSRĸ\4lŽ''’MVŋļˇx÷íW$ē§•Ŧ–.<×ŲâžĒ7ŗO­jW[2iŅĮˇqųVCÜÕÁk~†rm­LÛŲMę5ŨÜįûŌ@pFv‡\ŒÖ–‰mŒ.’ęņ>ͧ[6`´#v?‰Ŋ‡•”:ôˆä:e™ ÎfŪ‚Ŧëúƒ[ÚB´Vą`MąpBû…m&efzD76÷ĄĖE(V*ū[†ÃĮŪĢjzĨ–’ąˇe2ļØĐ)bĮüîkÉtMFëCkŨf(Î>B•í•äÕÍŪķÅ:ŅÔ5Š[ŠT°xH"ļû˙ZŽS^sĄŧ×ĻÔîŪ;yUNF8§ÛhˇÂŌ_Č!2t\üĮ­7Q–-2eˇĶĐ@ųĘõŦ=GW´¸ĶÚ„{ģ”`8Qß'úSRÖÄ4ˇe{ģhm|âXË8 8 Uį–)-Äp¨Ee' rj$ģUąi.[p;sČŦō]mĖ›9™ŗ>čĒVl…ܧ{vbŒˆ7c Ŗ*[iĨ}6;]˛‘+1į–sõė+SO6–ē\˛ja!’bF'_™ĶŒ`}•fŪø’Æß÷zj"HWq\ŋ~ŸŨü*ܐ›asáéâ 6Ģr‘Cž FįōŽŽ iņޟjÖŅ0ŲįûÆúc‘\‡mŸÄ:ôo,í"A‰$YA…wˇ:œzÆK+ lëKt'šĪŪx "ũļúäCŠŨ–#ũŖīUĩ ] ŗ6ú`XQT¨`95O_ÕĩwP l­°` d“ękGÃ>ÔĻĒæ6ԗJˇ“TģHÕ2ˆ$ ĶükVõÚ‘'bōĮ9æļtí9t롇9glucXšĮŲŽÃ!˙<3RM q9ëۓ:ų‘åT„n29ĒĻRŅą˜ Ւ%hūøĪ ŒÔCMšFcdvž öĻĩ ‘—˜÷BpÎAč×e§Ū0hA€W‘Yļ‚+|€<ÂqŽõJōæDo*<‰Č­$Cwz¨q¨ß/“Ėa@fŒU‰É[28qüĢ+Bœiũ’āĒ´ŧ€jžŊŦ*ÆņÆä+‘ØõęlSw(Ūęq…1 '# Æ:VOœūYÁ#͚˛!‰J˜ØNrO}0RūY’z¨ęîɓ˛˛kæDŠĀPOST^ö[†ܕP{æĄy7ŌvūtËt3\Qōõ'ڙ%T‰8Š#͚gs´ŽIޝMđēŨĨģ]‘˜GŨŋÂĩ¯ÃJ—dPGĀ#Š?Εú/s FŊ¸Ņ÷ųļRË ŦĘš!ĒΧãwļ‡Ę´Ķį’rLˆFĶôëUĨņ\>aŽŪBv‚Ä䊑/'ēf €ÃräsŠJ%sö8YõũNâúKšĻE'~‚ąâŊiĻ–æâéŌcĀ!wfļ|U$2jXG˜`rk,Ĩ 2ÆäA+Å6‘ ėŨĶü[¨iļr[Ų]\*¸Č 7iéâEmL`(•ŽZS‚ÍQiÚ5ÕŪ;f( 1ųsW“Âú…ÅĀ lsŒÁŠĩ÷+ČĮûMõėÍ5ÔōHĮ  €+JÃBÔĩ)´ŗ}ƒøĪ kēđ÷`˛o;QŽ9Ûl}…vŠŠ„†$@8G‡;lRĨÜäŧ=āk D[AˇC’ųT×_ EF"F '•zwĄ]w))€`îúVmÜÕ$ļ%ßy꟝/ڗûŸ­Xf5é{{2TËÚĖO!yŦx.~Õ…\n-€Ā_ƜZjûƒcĘåÖl‹ĸO ZC‘;ĘW —$=ЍÅ-Ė=ōũ–ēf—ėŸiTēÎNP˙ŸJŋ,Ång3™X䓌–ŽCWĐ ļą–ę†Âā…+ßŌĨ°Ņ5˜āWˇÔU"‘Á‘Î8ÅU8E;Äw}Q~īÄO ˙bŗˆOtxĘ}Õ5wJĐSsĢFōLį!zYÚfĒh˛4‰mm+1%˜ŋ'­[‰uĪŪIËĩĨ–ė2âÆ8­}ęK{¨Ú:ĩ•yˇ|ŽĖŲT˙ëŅnÉ–ÁŽ’Äŗj}ėV‘Í Ļ”Įí|¤ōßqõ÷Šm4¨­Ôˇše~ĨÕp‘]Kļšdsžø) nō ŋ_đŦŨo\ļļ˜E )v!UBā"ŽõfōđȍŽf“ ÔqųÖFĸ–Ú}¨Į›zäpk|ŋAPY|:˛ŗ)Ũ)ڐrz˙ŸJĩė %ČÉ=FyĒQDŲd`xÉ)õ­+X Ŧv&ãw˙^É %C#’x8ߎjÍĩĄk€dPH䜅Š`ŗŠ„Ͱ@ĢבÅWšš7.ŅBģbp§įúR”mĢîY}B+y<ģdMĶpāĨkYģ=˛ÜnāŒ4c€r‹wB‹ķ1Ā Íhé“Ã~#špąĘBĒõÁŦ“m”ŽēįYÖK41 Aūī$~ZËÄą^C˙[b[hRwd})<†ŗfxNčNKĄāúŠĻ4…G’xŠ%ą“ՁĨ6ãĒ*ũ’ÛLĶ’C4P),2[¨Ģ­0ĀLįĻGJälŧCmeuå&ؐBp öŽļ˜Ž#Y!‘]dcœŠPwWJÅ+W­5’ą’&šĐ Ë ŠĻëÖwC\‚ępTđkŖ2†ČŲÆ:ÅÕŧ5eǃ Aot0|Øøb¯ãVŌh5[n%…ā'rã¨īšÃģÕ@A P+°,Ę>žõ%…Ş {÷C‘åē”CéDĮ4’GžųĮCę×֚ŒV\‰7ĐÁģˆŪÆ“y?0pŋ•VŒ_k3.™fÆc]8čûƒÜ×BQÕI*DŠÄnÆ ‰ŖŪ[éw1ša$ĻA#’MkĖē+­õfŊ¸Ym´VĀ`ž#ëū5”"‹Ä7ŋÚŌ\¤@Y M¸3¸ãq1éT5}F=kR:D2ĸXDë%뇓!Ā?­føŗÄfkaod‚Ō$y1Ä6ƒÔvéô—0ÛDzĻ­šŠEgn›,-XnaÖG­('ŊŌ§kĢ7XįeŲššsĐūUÎiíŦbD@XäŸë[z~‘Ēx”4qŖ˜ÁÉfųT \ĪdFˇĐĮÔŧC{ŽjhāBČ`^¤šė´OÍyj¤!ļĩP>y,}…lxkĀZV‚ÆâQö̞sŊžčú énīB*Ą' ^1UŽÅō÷<ŖÅÚ%֑öW‰MĖ29]€e‡žcMŌ<;yp˛L ¤,ÉÃ{œWĄO-ИIišØņ˜SßJY"3]Üŧci ķ`fĒ˨z}â_[6ŧ†ūWš5$̌åG\W4ĩƒC#2ād“^§{ę7­ik&čÔbS' =>ĩj/Åf,~Īo"a,’7ã ”¤¯d$ŽÎ.ËÁ÷ļŦ“iŗL&a†oē@˙ ÚŌ<.ˇvOyxdžff ŗ’2+¸¸šÛLĩ’æöBQFJ¨íY—Š~Ī kĻC;E%sŒûR\ĪF;.ŖtŋĐ 唒Ė2P˙Jėt}6 #MŠŌÜas“Ôžæ°ma*¨wąĀáē'Šu ‰ĨŽXâ.ŒvģdbĢj~'Ô/tëļj.d`Ņų*1Š*M^ČQmhzŧū7ŅÚņí,œŪܯ`\ũzW-ã=GÄ?ؗ7ēBŠ?™ąĮZķ˙ [^Ü^M.Ÿ#DWj´­ÂūUŨę6z›i—RI)“Ę`hsƒúÖS”SŗeŨXčüwmŸiģHä¸ ėŌH“ŽžÕąâN•b–øM# Är{šņ6´†,Ī´_ˇR€>üVæŸ6Ÿ&› -ŗUKBGnôsY3G˛­ĘI´ †22NsYˇÚíŊĻP,“ÉũØÆ@ū•įŋđ’ļ1Ëfځ›šŲĶŽnnĩ…ÍŊ¸ˇÎYSqb~Ŋ:ĶmÜ9›-É}­ę’Ÿ"3o $ t§Ûøq7.]¤cɲ3]J‘&FȔtŠËēÕc‹vÂ\œŽOĢ™%¨ėPŠH"ޏã=*hŽÚŪ‘ĻdfÎâ@V}ĨĪÛ ´¤BãVdž("&IÆ <Õ'ur’s$…ĨwbØį¨ž•Ē÷XÂÄąÜ⚂fÛŊYHÉûŨ)Ün6BŪęEŽ(ßxāŧdũj߆eYŽ1Ä1dífÎô˙=+4Ü ĘŲ#ą%@ÎNN+φ]?HĶv|ƒjī˙yŋúũ*’lÆM&I­ęFŨD°.Ã.`Ž˜ÕÎē4Œ"LČX•¸ãUƒßNf‘73œŒdÕšg`–kŧ; ˜`ą9Āôæ¤ 6ÚrÚÂ$œ9äã öãS -îJ sķĮáS1/1A†åä{Sįģ  €FNč*“%Žå[„ļ˛‡Ėō@;FpIŽr7ÜÉvySīVîLחX•×Ę<‚+KpÚ1$c…^sÁ"îFÅˉmŒo\—R0x<û×5wrÉ*ÂËŧĨģ¯m÷īÂ:YnūR[~Aú <į]ČX ā( VuÜęƜ•æ=EkĀîÉw`2’;ŠÁŊ*&hĐ`ž UĻKÜb&ö9'Ąí[ēĩˇŧ†9vŌĖzq\črĒ c(fŋ ’y Đõg¤júķYŲ´Ū`č ¯;ģÕZâäÉ(/ ûŎr~•×ÜéÂöÅ"ßŧėzî>ĩ…gĄyW˛ÍrãŒįh?΄Ŧ'võ3!´¸ŊēIˆdHŽ0+Ŗģž‡N‰Dhdgá@<(ã“íM•Ä—&8— Ũ€Ā…lŲøzÂâ‘ ™Ā\dˇSôĄč4›8k-ëZ:ŪÔŠg'y=̞Ķ< ŧË%ü†áņ”ŒŸ”VũĩŦÖĘ : wWtéÂĪ*Í"<„åY‡Vwėl‘ތ!Eœ\Ÿ,(JŅŽŪ8TmEtĮKĢømPe@OŨ š&šëĄâ9ĖÜ=ĩ˛‘¸ĄÁ#Ū–˛Üz-ˇq¨Å ái›€ąķÍ-Ēß12^€g598úÔZf‘oå[w<´˛rMWŋÖí,ˇ,ˇiæƒĘīÉ´č=wfœŗ*ŽĀĮRyŦ™õE.R9@2Ā5ĖkZÕ­äX{’Äo€+*m¯6‡ģXĐ0iąK ¯sŦûcĪ˙ū>(ŦėÍ'ūĶūû˙ëŅG7õ`äg|4 (2iv÷ˇOđ¨'´ĶmaZØZ+ƒ„u…@}_쏉×ʐ:‘œāúë XՖÆ%2ųLrūįĐ †Û/C7UÕn-Ŗŋs+ąąģ§č+%/îŌęîv¸‚@”ė펀T7ЗG¸kœß7Ūeäö@ôŦxî.Ž"q:ˇåŪFÖIO™Yčg)+–~'Ŋļ¸dŊęîä9 úú×Y(žž.mŽ$‰Ę…\ŠĐâŧŊ"06#Ü´€×cá9§‚O*WfIyųēŽ–Ņ1‘†÷玜ÂKÛ¤(HĮšÅŗũ)ŗx‚ô1†ÆōæI`°•ˆ}ųާ_ŠÖŪųda%_›#5‹*Ø[DM¨äÍ…ÔYA&Յ”ÆãSē W‚fbíØzÂēi—šuąžîv–y@Ũæ9!c§ãT,ĩk -smį] ĒdŸ€§N[û˜ã‘æ1bAąsÛ$dŅ~—*÷GQwrŪI†Úu…Īņ"îaø ̤čLŌ=û]\Ž[įÉéÚ¤‡F’āäb€ũ䃂ßVëZÛiš,%•#„Ŧ~ņЏ­}ČŌŒÁmĄq’@,1õīQEâˆIÚ}ˇją]ÅŌŗ&יƒC¤DĄI9žNF}Ŋi‰s|a_ĩ\4Ä –(ōŦjV„]“¸l_ŽÆŌ[>œ¯ ¯–`>POE[šát’&Ŋ…å@pfāœû ÁŽŗpû,ĸ0/üö’<=‡øÖåĨäđC˙ Cŧą?1ü(Œųĩ¸ô!×%I4É/ôĪ9îTRfQ˙|ôã¯JĖĐ-/ĩ-6äÜꗱÜČJ‡1p: ãŒôŠÎŖ`ڑ’ rnų9‹õAĀük[NŠöfc2Ŧ*¤Œ.+tšÜi­Œiôk› 6BˇwܧÍį ›qg<ôĮ­bũŸh33šËrGŪ\ŪÛZČą—+äSÖš}^]:ȲJĘī!ĘÁųņĮaQ*‰;1˛„:Ģ+F-î¤-†2Į&×eí÷y?˜Ģ¯gqlĖMũõÁU1˜Œ{ŽjͧˆBÃåĪha'53ĀU‹‘*ÚąØî$P ŸéZ|KAÚeîĸĶÉs8”Å+,NãũãØúVŖ­ÕËm–%‘‡ĖøëO‚2–QĻÜ2¨Č=Šâ8Ԃ2qÕyŅrÔS1DÕĸs4zĄp͒ŦšĒÚĒj0Z™#i¤qĐ ŖĻsŪ­Ë¯Émwöv°™ÃļÔtäĨZIÚSË2c$qĮŊ=zŠŅčp÷ZÍåÍŋŲŽ!C'$ čāņ.4q¤,@üĢJīHļŊ$”‚T–ĪôĒÃIŅŧÂæØ0˛vūŽh­S—sFÚîÎá@ŠO4áōqZ [¨’6rx;@8ÅrˇÚgÚ#Ųéŗ¯BƒiaT#ÔĩŨ(˜´°Ÿ˜QdöÚÜéJE,¯‹Xâ'ø’=ĻJœAq"Tg€ ;Ëd{bąlA8÷Įķ¯<š‚[ČäT…mápC<ĢÉúW3§_^økTōcštˇ”‚Ÿ—ņBwŅ­DåcŨË\CžŖV^§`°ÂĶBåGQ\uĮŽî4øÕͲÎxŨ†Æzët}nĪÄV^l…pčNMZî‡u#’–ķ÷˛Ã. #9Žfõåžę_ŗ¸…'€+cRđųĩÕ§€M)ˇ+nĮĘ}jĨłX•˜Éœ0]Ät5—=‘•Œī)4ØĐųˆų›œ“SŲxz˙ÄZœMšōagnņ§ÜË ũõēHvÂFáÆ×­éđA§ÚĨĩ˛â5åNs‘Wģ]•ÜĀĶŧ abD÷é3¨Îƒ[ą8‰AfD„ …Į]ę°[+9` 98ë\Ũļē×*e†Ųžá˜ÆĘ[œm%ŋ/Æ´HnÉŲŖĢØi6Æ{ÉQ!å$ō~‚—K–ÛX‰nVYx,01Yzg"¸ē]O_•¯o‰Ü#sˆãö 28ŽÉP,~\`"ŒŽáRä–Ũˇš•Ēę6š-ŧ^b|ō8Ž4N¤Ÿ_jå'z§‰mDoŗN5IŽÚÔĸFYnĨËÄĮĻúŪõbÛQKo>9LŅ/ī>ƒ¸˙ VŌí‘ÍvKiŖÃm}5ã¸vc’ ?ũjŠ}ví) RîĐFÛngõŦ…ņ Oi‘’@\"ô•›lduÔ¯ænZUPBGˇãM17kŽņ íÍüPÆ_bK(R:ÕV´VÖ­"[1ÔņZļ:5ö§}iuå˜ĄBŤqŽ{q]Ž‘ig(œ"ŧápeaČ“`Ŗtqrč•íė7/nEŧ ;–öÖ¯Ūi÷qjvîČŽĢ9ŸOjč›UI$1ĀYA˕Āü+—UK¯›{wr!Be‘ŽI=>”īĨ˜5mŒŸEwŒ“ŊĮ%Č˙ŲsZT‰{vĸ=†4ųOŠN⅚šĩĨAļ™K0 šĢ¨2} Æ ׆$g'˙­V.gŠŅÜGąg˜d9^ŌĐI+<ŒÄ!ʁČÍ&Ę^emē⯊ ā;ƒéU/ŦŽÆy‰~f5Ō’ĘBÔņU¤ļ"æ>Y˛xãš9™<ˇ8ŲŪŪ9X(>[qčTÕ+Û-'Œî0ČÎnßéQ2ą âcČ gģJbˇŠąÆ<šč*ĶšC"æéáCåpGĨf.I$’NjŨÁÍ<¨8#ĄĒ/)‰ã#ĩWS;XžR"žIL ŦerāÎzJŽō™ybryîjÔōŦp(Œāān'Š4\į]āKYî–í䝄1Ž“Ā>ĩž–öūQË äc9¯=Ņĩûį͡_5dÂÉōkŨøĻōyˇÃV‘qՉ÷ĸīŠV] ‡ˇß:Œ1?)&ē8n…•‰Į#0ÂĸÁ?á\VĢŠÔž]@I+J1Æš#§é]í¤čđ Jęu‚'ˆđŠ5;SqˆLŦ!(pM7SēÔîfhíDQ[€Į†?…cĨĻą¨Ū-¤z‰Dbw”ˆBŪȧŠ4:Ü\I3ÜČ[‚ŌIƒÚˇ­%Ķô[Rä)ûŌÉ-īNš™4­æ¸ë!õŦŌHH mŨ€ESi­Ev´šÖjū!#örn‘ˆĮ@?ÆšŅėæž-=ôPĀNY‹‚ėkVßÃH É É2\“NMMŠSŲF€ã9üë+ö*ũĘPÛč Čb¸b9j×Ō4Ģ-Rī´¨Ęd`ŠqL}'NX‡™  V·ĸŗŠ6ŽÛËÜ+ÔŌZZæĪü#ZWüúÛß"ŠŗĮ ü¨§v]ŅÉęĘ4i2á¤$ŦqrßįŊq×ēĒÃ1šē‘ę_•Ÿ ŋŨQč+Ŋ_ Ú@¯ēy‹˜ĖhĀāÆ;í÷÷¯øáŠ|;¨E"]I=­Ā&6~OpÆŗ6÷fršŅ%ü 6čĮšJŒã“K|ZTY#JģĀ$מiWßdē +¸cĀČÖÚEu$Í0|Fŧ܌úÖs‹Ķzbõ´1Š-˙LVžšd[čōŽI$’Q†ۂO™#¨<0āWEg§ _´ģė>pzJ îåŨ­ŠŪ)Õ YíĄ! )¸–āā×2ˇ6'ăŒt´.ĘęŗČCqŽŸ•RXfI™ÂOÚÃČúSubä+\ŠMDFĘ"Wv8=괒ę7n\üŠGĘĄąŠØ–Ú%hļ.÷|äČ5VũŌÉ@)˜ô‰H¤Û´P×sĻĶĩI,"b‚Šb2ÍøÕMjōc|öl0ÜÜČ´ģē{`6–ÁR2qWndTąA;ĒČu"ˇrV×rlîočŅKŦŲ¤öKh0¤ácn21Öē;™ ˆĘųō`i‘ŸOÆŧ÷FÖnŦĮcYHŪ$ųC§_Æēģ)5-FEVŊŠÖ"c6šúš!Gáę4˜\&ŋzí b+XĀ*rƋ_ÅpÄę7ą ˛‰0 mŧP4k5ÖĮ-€Ļ\ŗgëOgŽÕ žEļØîĮ?Ę´į–É—¸Û[K-!LvÖąÄácPYž´L;I؈Ŧ‚2<í ×ņŠY%o)ėÜ$de‰Œƒˇ=ĒŦŲĸŨ$,Dˆ8%úōhõ*ÆŨļ­<Ķ´{!‹!XÚ ō¸öėŋGaáŠ#ũä„Z)Æå'|­ūķŸé]i[KLŧjˆO%ÁŦ“¯ZĨ˰Ë9%˜|ĻėGoXI1M’ ̰ŠrjIŒ%Á'ĻŅĀüjŒšœwRG-ĮŖ5bŌ9QŪI-Q3 7#ķĄlZŨØëéŌŌ&3* 9$ÖYÔĖĖA \gqZØ(Îė [9$äšĪž‚mĘŅē‚p<ƒM5°Nt´+KzҜĪ4qĄ8"ĒÎļšĒ¨¸väۓSËmrČIHäĮ ļ TåVÚ&Įۂ*Ÿ‘žÛ‘O X[ĩBT`Čr)ĪĢjVÅZ[XÄ%FúՄŊGC͜ˆ¤aąÍL/í^2+0CƒŠÉš%ĩÍcĢÜ­‰-w*ȇ'¨­k+ÛkĻ+Ŗ‘Œ äÃúÖLVšuī ¨\“ĘœP?†đwZNČĀ’ RĻļØĩUvtąE ×h$‰GŽųæˇ­­m­S˅!$Ž&ÉuŨ=I%'Uā9?uV×Ŧa_1vš râĩrKŠĪņ=“€3¤îÉᏍĘŠ&F= r1P_Ou-'$į9īTdģB\1u8ēc+Ŗ7ŖąŖĻ’7“<8 9̎×,"6ÁČÚāŠÃ´ÔÚ+UKhüҏ`*{2åÖI# ۜŸņŦå~k–ž–*Ou#ĖȈAÉúâ´!š4ŊJfŖDā—Ā aÁ$/­OewöˆLlša}ėkĩ5*i™5isÂĐO&Yđ˄=ąÉ¯5ņŽ ~MÜĖH)+ČcÛņëúWĢßÛ,ĀÄĖA€ ŒgüúW â[xßAšļŸŧā+dgëÅcV]wG—)(Øæ­ V<āķ‘ŸJ­*€sžũĒ{fÉÉaé\āXŠ1É# Ožjg,ŸÅōö ¨ëĐãRd•!‡LôëLA†7b?\zVĩÆÆ;S ōŋ|ÖBåH=HüąZZtr\\,1–ã,Ā8üčm%v5ŠŖ$đĩ‘3/›Œ€„úäUí7Å:už‡öyė÷°ōŒSql˙_­fÜĀđ\Ių Áđ=këNIfHŦ ?*ƒž+)ĨQyÆņWš×Xøž%ē’úä)XŽ įv=úrkPÔÛTš’k™>fl@ô…UH¨Q’ äį¯Ō§Š,/$ōG­iËTcÖâDHhĖm‘ĒJđ:s[FތÔ9äąį?—LÕeEXB.HÆå‰XŒŒc¸˜õĮ´“ÍŽU*xđr>•pkmx‡ydVíB×pr+xŊîāēK€čm¤ûŠxņŸĪ­dhVK¯kÛPˇ h›´œc`}N*æĄvōŠ#æ(É+‘“š›Áöëâa‘÷ä$cíJ1\Ú v]ņ'‡,í,Mõ´V<#€íÖąt-B_^ÆņĒŊĩã–5įaë^ĄvŅŧG$[Ņ”†ÆEyüūē†å–ß3FH(3‚>ĩKGp’ąŋâB>ʗûpҌ8Ÿį^{{q5Æī0â=ەOC^Ÿu}&hîÄsí^_vÛJá:š\Š;ĸdkčú+ęf;™2–Š@fč_ØW °š$Cb˜‘T$c Q\o‡üKĻ}…-$šHd!Cpô­y냯xâš}nĘęâŌv•œä…˙ ŊzFŽŖyŠ .Žß ĄŽ1…UūŋSđÜ/?ˆnŒcyi<đ&šënąŦŖŦ1Č>õˇā%ä¸Yd$éMGvÉZmžQlUØå˜ōMN,ÕX€€âĢ*„ nöĨy ĄRRx⋚Y‘†r@E:ņY:ļ­åÚ0„áN'‚Mi<ęümHĮ=M`ę:ž‡ctĸéã{‚@Xņ¸ÃˇãJ͊HÎŋđõæą-­ÕŧŠ".0¸ô÷Íj§‡"t˙IŒã双ÔÖ:•Î¤ÛŖS˛ą€Éjĩ{¨Ĩ´eC(b3“ČQīYĒ1ëŠ6KS‚øgckknm­š /ĄõÍpēČˇģ‚ū+]›>RHá…v+ԗVĶåļĩO6g`ÉÁ'ÖŠAĨ]ߨ>Kcö‚ŖquÅiË}leÔŲđfŖel’Ī5˛ƒ)?(ąŽę§§Kks°3)Ú#äƒū5ĖKá›ŨAînĮÂ.ųÕHញŋrĻRØÜG$ÖNņvą§Kŧ-¯˜Ãi—nXÛäDíÁÛé[ZŽ™aĢ[‰yw f9AÁ¸ĢÄFÔRä( ĀĒ—’ŧ@@ûÁįŸÖĢ‘ˇĖˇô5ôm´Æ6ÚĢ9?Ã0lƒč+mu}6hĖ’?+üb¸Éā{‘æLčŒŧ…'8§éĐšLLŦ]FyéŠŌÉę4ßC´ŊŠßWŅ×hĖPWŒyŽZÚMVŨePė觐ÜâēË(‚YGÁ*Î)’Áķ0@GTč)›(ģē^}ĸp×î~APp+cNKsrfdTHÁ$šÉ'§üÔÉimįŸ.ŅAĀ$ZÕĩ˛ I“Œäđ@˙bz"ŊĨē›Ąsp€šPBã‘Uu=dI3Û@…TüĨē —SŊ13A.AÃ0įŽ+.{kU2?”ũŽHôį֨əPÆMé@BX™wOA]V‘ ž§›ŠË–g8ÉäãĨ`Ej,aXÔīeÎ1Ā'žIęIĢtą;ˎ-’Ŧé1#aĩ8fc$‡2–ÎŅĪá] ĻŖe°Į˜X ˛ˆÎMeé‘ÚČá‘Pā(œÕŊGPŠŨEģēpXRVÆĸˇlŌä‰A‡LøG%Ī–­ PAāØUXoô֋wÚâ  y˜Åi[‹yáŨÄé’7)LĨŠNPĶa—qĐ(éT5\ßĢģ뀀J`åĢĨY᷋˜Ž zÖ&§ĢĖŅŧVĘ7‘Ęĸ–4“ą-&q¤C$x0œ1B…0Id]ÚZ´Ļ3|  Ãą‹ôįščn/nŖ†{† Ē3–\mŽ=âWc4î š$`ÖĘæMŖFÃDŽō?6Ū튂T‡‘z´ūfrdē+@‹ ~ĩOÃz™´ēkyc”‚›‘ZÚÎ작m§hĨ` #¸õĨ­Á%cįK†ÚäŠģXā1I?™Š’ĘÉįX†Ą‘øˆļ1ų>†˛ ŠKɚLdg–cÅvžĐ#_.{ÄWdnÁ×ķĒôŗzšžĐ jz„Æ@ˈLž¸į­k_xĻÂÚSoI4Š1™Õ=kW…¯–€l 4ŗŨXi6ņŦ6†âi š÷&ŗjå+"¯æ¸Š[††`K|Ģ"mķ[vrŲØéĪrÖ0ų‰ãŸAOĶbhlÎŖ k!ŽBękīKŋׯŦ˛[[ÂJVCjÛncM>Ģtf2Ā‘’v€™`*í¯‡5kˆŌAxĘŊqåāŠŨĩĶŦü=ÍË<‡šC–?AÚŽXÜ}ŊĨ+ŧ*°‰Ā49-’ļŒâîāÎŅ\ërĮ b ™6š-ô‹،͊M"äĖŀ?˜­ûŸ5öĄ,÷)jĪ…b2ĖĩfM/Jąˇ>blP>é}¤˙!R‹OC‘žŌ"R(ŅĨ$ŸēįŸz,āļĶI"ĖH?ģ“’? VîžÚę+›€Á#ƒ…#§ŧš†īNšôļĄ°ÅĖDlN29íVÚėmčĘÛúgüúÜßĮ˙+Ģ˙„oM˙ž?øđĸĻ˸[Č}Ėåah㔒KÎ>ĩāū4ÖĨÔĩ7ƒí/=ŧDlĮ<÷Ž“Į^9YCišKRq5Ālg؍yÄq´ŒC<Œ@U9&­ž†Vģš=•Ų‚s1A#… ÁŽëI–æâÎ%yÜæ8ĀũM[đˇÃĻ….ui 6|2:ôM?FąĶwHÂzFå˙ZąŠMKr’)Yiíc wnĨÕq´p Ufån­ĘbFÜώf–Îx‰/O XŽģnŒ-­ 2H„.8ŠqV°Îr(/žFŽ(” ū"ŧūGc%ĩėfWgƒō*üÄVüVzĩę)‘…ŦjrWDPip‰Žį\î9'Š=ę#E&1§˛štû4 劎ÎGšŦģ´‰eU…"ŠŒ šfoëZ×ŦúäÍid‚U€iHÎ~•ŠeŖŲi҉KšáĨ‘šÍ*—Ŋ¯ #ĶHģšA#1Š,gq8§ [[hŗŦŒ ÃģdÕ­WT7oöK. ÆŊ6×ÃO;+_>ČĀËNĻĨ­-˛(Ŗö˜g?fļFžāōžõŠ=•úiĻ[옠W%@äū5Ŗ+Ųhq*AH2OŨËs\žąĢĪĢ]_ŪØTUR…8ü#ģz~Ö´ë]Oėŗ*'ĖŗžJˇĻ}+Ļņۘú|Ž—–æí˜ÃKôĪĩÉižģUY0–Ëœ—”eŋúÕՅŗ´°–šæér Ą‹?ČUT¯ÉkĄX—JņĸļĻԴΑG–ÚߟZĖÔß]`ĐÅm k# U^ĪZ˛ æėˆÃg!w`{ÔÂĶQ¸Q"^Û\ŠįCPņ —tltī9'íÃb€ ŦŨŋ ĩi¤ßˇī$ˇINrÁå''֝aŖę2_,i0; |‰•'õŽŖūËäf'Y“ Ē‹´žŧUÂS•ŽĐÔče…ž­ī…l`%6î Ių~uiΊōŦÚĸĸķûĄ õëYSéWļ8{ZębVüąNŋĶĩ$EI¯^{BĢ€q]-T}Q¨Osĩ?ļˑÔ"¨?zín,Ļ2‹Šn~\Ætíũk5´Ģ6*´SV͇Ļ-WN Į3\Ą# Ã$ŠË™^×:.íĒ,ÜΓŽ&‘āc÷Lm‚*ˆģŋ˛pK­Ė€ųäõč:ĖģEk°ž ĐSd‰L0žøÜār0}kE{IĮœŅ‹U†u w ˇĘEW–=?qi6ld(Č&™iŖA™ ‡ŽK ŠŊerJBÛT⁃ŠĮgdÎåwšE&Ō- )ŠBŒXũÖ4đ/íY„R¤č?…˜ZQHō>]9ĪŨ^@ZYTJTF ,8)Č÷Ē‹ļį-džģ­.&ģĩdk_(ŠųœœŽģū•nRÛ `gūsYs+$‹æ$yP:ÆŖûZĀUär d*õj‰;ėŽkĨĸ,ÜÛy 8ŪĄ~ø=@ǧJŠXɚä*œ<ĶPží–;d)&āģ“ĪVœēKGh˛Lū|ĖŖ$œ…úo I+lG-õ!ĶííÕü‚û•WGVŗæClʙáO  qYvÚ{•2îXU`9z ‰ ›†Œ…†1$ƒ†˙>ĩMÜ´†j´ąP0ŽGëõĒļ—RĨĖb2ėÉė8˙õÕËŠVæʒr ëUáŲ J@S’Ũk˛ƒ÷,g%ŠļlÉ`Ō$Œœū‡­iI#>]ųŽIëųVĘ\ŧ–JIÂÆ6äžHĒ7 öģĄÁōN3šģ]Y‹ŠáúŊ¸ˇē’ŲyhI qéY!pŲÜį5čū7Ō–ÂEš#zLf›Ÿé^w*„pIÉ^0qÉr°4-¤2GĘä/ŽÕ<ƒĄ)ëYĐL!˜a‰8֐ĈlņœvĨq2¸BėpNõĮvÚIƒ,ĨAà 6š’Ú•€ČĀĀ8-ĢŗŽFH8Q`šiĨxíÄ`į<’$õūuF.B g!FO 7^ĀĶ€ ŒväG ũ(°7qĸuC´ŽESÍ2Y"e’3ԁJöËŊœģuíNp  3ցyŽUŧ’Ā/'šuąÜÄ\ĢHāúĶЏ)HŖ$ŒbšPŒ‚8,ÄĶWvIS”=AãŌĻBc€\gž™Ŧ†ŊUaĮʁ׭^´%; E7Ŋûõčąg„ą=8°0)ÆÉÚlĻ$*Gđ:uõ§YÛ<Í1œ/ įzūuĐ[X$0¨Aã$uĻŖpšŽų„MžéĮĩmÄ!´CxŨŽ)“Ė ”$‘ÂŽ9Ŧ™į{™Į˜HAŅG?:­"ÍéģQ¨ XpFrsßüö¨­ ųĘ6‚#œJ„šŽ0#+Æëš…n Aƒĩˆ8=?ÉŦĘ/MpfP cž8§B#wYˆ+ $n'JĖhfÁf%ņœž$V•ģM=ëĒXb¸ÉŖ¨d2…_,“øķYW(Ō\˛‚[‚Ié[sÜÃin\š@ë\æĨŦE"1rJŒ_Šr‚îXXaŗËžĨ‡$ũjĢÅîŽ-Í0ā¤0˙ ­>Ģ}y캘‡%c8'ëWíZSmēÚŪA)$­cĘĶÔĢ#ōk˜§û%˔Ü@ƒ$š–Ę'GAbpwn,*ļļ%š!8ˆŠ…ƒdœ1ޝÁč_M’ŤqÎ0zVœĸfū­ŽąhRF+uĮMÃûÕērŊUGb@æ¸o t‹Ģ]jÜė’6Ų(^Œ=ëĒ7ņj:pō…šˆ€Āō3CEĻrúŸ‰`¸ˇģ†ĐüģŒlz˙…qzŧ—° ŒŽ¯ĨC[ęRĮ nŠ'‘ŪŽ]\ÅkmûÆ9!GZvŗ1“ģ)G:kˇ!ŸŪx­øsÃ÷>*ԙ hl“&I\zsYąE&Ŗ"Í)ũČ$…čMu~ņ•†ĸÖsČbŽ\āpQčTm}OJŌt; ØAaČĀ“É'ÜՇŠ%š;ŗ/Ny{V>ĨâŊ3Oŗ2…”ÂÆrIŽUņÆ­-ŧŗ`Z@F#Eûė>ŊĒ,͜ĸ´GĨË&“är\–äƒå™9b;âŗm{ĒIcnŦZ8Ãģ…׋xVęöûÄĐO2Ëp[8ŪK×ĩ{ Vļú[\jæY9ė:RĶž€Ÿr/Ėļú-ĶÆĒĪäļ úW)>–ąÚhąÜI$ōO*<ˆOįvíU5ŸļĄ Ör<Ą~A’FGOaV§°Õu-BĘK(Ę,K–™Ž˙¯QĘԄË'ģû-ƒĮlDqņ8ĮNEáûģ‰áwN ´8*Å~fĮS]hO A<÷aķgKo¤Úi6ĖķJ5*7 ƒúĶQiXvęÍp˛Ä˛#˛U‡9Īk“Á eį`æŠK­6Ĩ3‹ņÛĮĀ`0[übęƒ*ČųÆO&ļH™Jä_i,ĖcI9%ˆõëNˇût6ģĄŪ“’ĀbĸļR¤°9å{TsŪČĢäFXüŲôĒ%+×…õ8ͤ‘Í3Ës¸šäŽØ­{›Ø­ã3ŪLąFŧ€O˙yLËo8dwYÔrāāŠKËĢ‹Æ"[‰% p]ķƒRâlĨedt ņ¤ĶmĨ+ ĮČųYđį„.§Ģ2áū`ŒyZÁđÜVŖY†KōpÍĐĩz1™T€@ ,[Pô“weėŰ! ¨ÂqX×ÖzTQąģg(rv—ëū5Îëž?ļąW‹N q(āŋđ)ūĩÍéÚŪ+ŊØķšU$Ë(Ā9ĸ1îD¤žˆŅŋēĶĨŋŠ=*Äŗƒ’k¨Ņm%ļ %Ú$S?ŨT…÷ëZZ/†ėôČPBŸ9ë!cõ­)l­de'q*s…8üi𭐔՜‹ĩŧd˛sĸÅTH÷ŽF)Z …I䃁Šöä´ˇEfKhŖHErŸ‡3z&ļō¤3ˇ(:‡a4ÎKOŅÖã-"mCČVåļšĨ„6ņĪöŌÚčihŋéÍb…^ ą p1І›e¨÷0âđŌ†VœƒČ'¯Ĩ´Vāų)ā`š4ŗj6€{‚@ãn9æ­Â"x„›ŗģäûÕ- D!JŽ#Ī=ũiÎŖ ųķšFž,b7$†É'ĻyŠāRpŌtôëƒLŽdˆā´fáļžãÔ eũÚYۘ×kq“Î(Ôõ8ôøĀLŒ ĮaX1ŗK)¸™ÉIbŨz~})™2tyHÁÜs†cœôŠb‰§g38 r~nĩaB>UäŌųq¨&FČāä÷¤EsnC<Ėėc Ŗ+=4ØŌõŽîe%˛Āgž:zÖŗM„*˛…dƒ‘Tœ-ÍŌÆ˛m"@ ’zQĖD‘ÔZˆ­ŦÖ8ĶnąķÖš;×/Šų—)ž’rØĨ^ŧyĘ˜ÍØ2H¤#­R}Ė?ŋyœ…A8.V{‰&ú 1ÆŲXäēŸä+NÎīFļQwļ‘($í šå­´Ģ)fōåF/Īņ nσŖE—ĩ%”`„bI?…>hŪÅkkŖy'ĶŨ€ņ98ëG$ûTĶ\ØŲBYđA$(ÍsÃEĶaQ-ž–A“™2@â˛õ÷ž–šX%Hŗ˜aA§ĨÄÛą̍›ÛƖŌ]ŒÄĒ0ĨrˇVOlâcķŽs‚:ŽõĢjė÷ dMÉ“pqĀūfĨ–1($‚Aė9ÅZv2jį?=ÄPANŧH˙ëÔú^œ—Ķ#Ög°‰`ļP“KŅäāëO}CHĸū¯ŽÅ`Ÿŧ`f•@š"°lŧ5q­Ė熍÷!XîH¤~.ÃÚŠxV(uo3Ī8œ[ må˛˙úÕčÂHTaXß)+‰+ęʏĨ[ɡÎMĘŖ ‡:…-Ū™ Ô Ĩ‘G ąļ‘S¤ęųd™ c#+Ī5ƒâE¤i/5žų$`B˛.ā‡ŪŸ3]JåMذ˙ĪÔ˙÷ņŋƊņOøNõoųü“ķ4QĪ2~Gs+K(flįĪP*ö‹q5ļ­iq’VEVä Vŋĩ6wf"ÛųÎiöĐLA”Bäw‚šz]ĪaŸâm¤p…ŽŌG¸b o—?Zģzŗ oŽ$”ZÅÄCŲŋŊø×đëÃÉĒjÆæöđÆģ‚°āžÕėĢpĮåĒųp0L“z #œ}2îxX4‰il9+ ~}áRZŲXé0ļˇß# —c–?‰­Kģy䄈ŲKsˇwÖĐ5+™Xß\¨BIŲ`RøVˆnáqŽŧŗ`O6AV?¸ŖÜ˙…T—Oû[ /\Ęr_áSWÛJ–P˜•’Xf m#RēvŠk”Ž~XÛ$sSīËĨ‰ą 6zs8Œ”rą§$Ņ%•ŪŽ×N!„–(۟Æĩ!đûDŒ")Æ7į$ÕčôŠĸ€8xƒÕĪ2‹ZE ôû;}=rˆĒq“T/ĩ™ĨfƒOĨ˜đ âŦ6‘¨ßdÍp‚l~é¸"¯ĩģ鐴Ķådīˆrj}”ˇ–ŖĐƒÃWŽĶjˇD2ŅÆyüOôŗeg¤éļže´hęC!ÜMgŪxšÖû4ņÜÄ\ÄÂsjæBim–ĶWž„ääĀũi§+YĢ—c¨×!Ÿ\Ž8~ĖénŦ c!SY§ÁKk 4ÍÄo÷ˆ2Ö|AĨ!!×įbOž WÔ-õhÎFļîOŖIōß_F-ČeSŲEûž)jŦVš˛Ü‚Rš?ģĀ5i'ÖĄĨڗq¯ Ba…N|J_ObaØųÚ?qŖ>ČĨ$ji3xšÜųˆ–“™ÚThjëņ2—ļuÛÆ ‰ũEAĻę7 kĸ؅`‡” ŸjÕKJPD‘ų įæ#qZëŒJMĩdGˆn]¤}NÉĖ´°åĩA´ģĩ/m"ŧmœķk=má”ŋÚæ•ãc†Čüâ•æ°ĩS*‰ ~4hôErĩĢ2ĩģhš@˜’ ¸—vŦûkŊBDa–PxųŽp+u-aŊ™¤Į’lnŊęÂiQ)+…T – R’IXpģwfK›ËŒÜÛDcRpĀg'ü*ËȑpQWŒŒæ´.í ™å°v Ír—ZŠ<Íæ1@šIĨMK'ĄŠöߗfN ܃GšŲÉ|d++ŋ3v ĸ ËdքQ"„`ųĪ š‰-MŠÔ“V[qN ¨MꅉË˙=i¨“ÎËĩ `Hf “PEiBíÁ<1n1ZP"HFvU?*sŽž”ÔLįļŲNQ'žËģæu…įĻ;Ķm –îxŖĖr9<÷ũ*đļfPCŲW>đ'ÛiJÅĮˇ N įüÎ­#"å…ĩžšĨ°L‡ssŸ`2ōyVhU73d+‡ĨC-ëŖyq°!vî'œ÷8ūuV Øbᙷpzr)ÚÅ_ą‡„;<ŠÎpėÃ×˙ÕUÛ‡.ĘЀŧ`>MXm•ž@3€äO^˙¨§Ûiæi…Ė’1ˇiĮ_ëĮáUtJNú dņ=Œž`ÁbyėĮëŒqYov›ĘnÆrx<įëÚˇÄq"+ģĸ@3רŽ~@Öō´hˆÉ<œWF̞f´F–ŸrÂĐÆšf 6džœû֕Ĩ¤qÄFy™˜úņŌąôæ!.áHčO<ũ+Riĸ–AÜy’+T¤äâK˛I™Ū3ĶVį×Wh“ÍĀ8#ū•áˇHéŽsšrF8¯ ne–âŅŖŒvāō xvąf,uÔ€ŒÔs\õb㸎žĻ"7Mƒg‘Ū¯[uÆî>Pj‹8fÚã¯jÔ”dęZÆãfö”ûˇÄaâ™rĖž^[ Ē08‚Ee 0~•<÷rHĘIɌŽ1Nâ,$đŦģÉ<ũG^i°ĘÉ$‚xÆĻ[t\ņ‚8õfđŦ18$ä…÷â€E9fr̈́ëžĩ,y8Ī,y*ŗÜ:ąÆr1Û4ŋi1`ČøpqNā[¸ŒņŒãÕ)o‹„AĀõĄĻyŲ„'åąÉŠ-tđÎԐI#æ'šŠÖŌk§ ܨ$…3]6Ļ=Œy ØcÖŖˇâQXĪ€Įh‰Äˇ”ģ`čč¨*Ų'f´Ĩž¤.Āø¸×"ĨąÔžI1Í^ĩšß2†fGĻsUÍĨ2ô‘¸”—ÁÜCd6HëPO4Á(VcÚ­06$€@ۜfĄ–I# Đc9Í"ˆĸՉÚGL™Ļe`e$);Ævō@õÅY0M;häg8*x­2ŧˆ7Iį×ųSŒnKv-™™ĪĘq…Į9âšnŌßR 0ŊI-ĀUÄ<Ļ@ŨTŒd–õ)P:ž)č´BßPÔī%š!UˆÉ#V13`Xä¯n?É­;Ņ䑲x88'—s*6ĐA#$wŠ‘Œ[–ˇ'k• “ėtēfĻ–AKLĪž¤ä å.ĨYŨUFX¯ fĄ˛šM‹ €Œg"†Žąę3éÖ:Š…<ÂĀ1œc8ĢZumja™×llV2  ¯oư<%¨5ԂĐ•rcĪSę+ē„"¯]‰%€‚ŗuģÛŊL­Ĩ‹7˜G 9Rkŗ0!,J‚¤cŽ+#SÕ´Ũ2D…Ųy‰>÷˙XRÜš#›ŌŧkĸBnīYnŽ:œũĐ}ĢĒŌĩQ|ĶF°2$D*ɡ įÛé^sâŨn[û‹}>+ŸqHÎã§>ŊëŧđÖ̧]iŅZÚ\Æō@dáŋã֋Ũ /Ū6Ëžšä“\¯Šĩ”ŠÃf‰ P˙õĒŪąĢĖäÁ§ĸĘAĒųĩr:™ē7w6ǤîT‘ųTĨvŸDfŨĖđĮ ‘] QÉĢ!ŦãÉŊܜã9ÍTu•% HŒÆí¸ĸŽĘyĨUTfÉÆ@É&ĩ3Wešn÷ä@6…‡AQ[…L’š$}æękjĶ¡’Ēƒĩ3ÎYŗŠč-<-eh×oį‘Œį€OԕҞƒąÃ¸ķlåŸÖ“åĢ€?ˆô5ÜjēmÄ8Š ˛(ĀTā¸ŅmÁ `dļĸčmŠČM4Ę­Ūą’[äÕyõ+ų‘a’æWp63qŠ×ē˛wŦHd1‚ąÅf\Û*ÐÄ6NâŅ›ģ2‰ ’) ’2=z/ÃmWN˛ąšļštŠáäÜ7đÅyü*Ĩ™vd•#ž1Zžĩļŧ×#ļģÁGR'šv¸'gĄė+­ĨÄÆFûD€ôõ=ĢJ($U2M čCIŅ­´˜ØÆ‘Ąb Áâ¤Ŋž8+ĖÄp{ ÉŲ>ũÚH|¸ŸaŽI5ĖīūĪÔ#“íėägvæāÖUŨĖËĢ4wŋhtf^ÁöⴒĪLIUL3>Fpbf?ֆžåįņ5‹ŋ9ÁwŌŗ%ÔūŅtw ČP0Ļ\Ũ8Įog Œ ‚cÛĪéZV:ljąË*‚HŨÉāf„=[ÜĩėÁŧŖ(0žŋĘŦ]Ū„Ũ•ÂŽ€™ŋúÕõčƒž:6Ŧ‡–Y,QxänÉ&‚¤ėoØä…dä‘īS^ę°Ų@2Uä<“Xm† r^e<q“Uí#›P™Ĩg{¸\ sŌ‹‰&Ë Ëy),Įsžŋįڟwi´vá˜FŽ $ã-ĮÖ¯¤FÂŅdT/3ŠO8^;a2ų).äô oVDgd0ūņn„ÕIP>pŦîĻ ZxaL“;Ā8'Ļ3Ō ˆŊԞMĩ´˛dōđ;ŅrE‚Úáƒ,q‡-Ŗ?Ĩl[iQŲĀ.5q8U3ĪOzŅą˛66M=áØã– ķہXšžŖqy*˜TGš$…f‹$D™`ÚŲÃzn¤r1œt¨ukŠ^Ų~ČęYH 7ZΏšv]âE,yf ‘Lˇˇŋ—nFr`æĸr@†™.­ąq6˜ŽvŽ^PÁ⛗l›*ˆÁÍlĻ›4øjR‚Tm؊tĒzŋ‡mŌÎK™īäĖqąP$žŲÅ Á­GĒØŗĨ2MĻŪ°Ú0!Œ0ĪZĪÔõÆŊPJąĖÜĮ"m!yŦk+}]"Öū)#p2˛qüęY4ũ~áCOmņÆpĄ ôū´ÛVĐ.Ūæƒ[Ų[Ûy"`ŠĀÍWoŲÚ\*!,` €¸æĢÊÛÄÆŦœL>Q($TË{1[ -ÆÖƒ•–ÄĢtsâÕ'‚A €Drŋ˚ŗĐŊĘË3Û¨Â-ĖŽqVRåωIŌܐšĖq`b¯ÚMt:č˛0 ‘’5Iļö(åomgžÕ¤{$bœ1—Ęå¸äđzIôé-åŠ9 o˜ą\d~<úöŽŪ×YēÜŲŅîÕqü ‘ŽiúUũõΈãx´ÉÛiԌ=ŋũUˇMLųnÎBŌ+Ču(nî]C`¤IÕ{ã˙¯^…ĨJķZŦĶY˛LN B@ÛĮNišÍá7ŦŖ%c€9įŋųöĢ}ĘÁĨ4€åđĮoP éĪåKrÔ,Œ M^]nîK‰ŅŸŨČŧŸ÷G`+ĸšģM‹8 8ÕM:ģĘÎF㖠vį×ëQŽ ›‚ī)ÎZ‡ŠĸV,ŪŨEh¨g” U,Ųlį‚p=Oyī‰|B“ŖŊļ›,˛Č i$‰Œžƒ­t7×Ķ4ÄÎfV"Ė~§ ũiĶjv¯G Ęņ´vŸ×Ŋ'ĸ¸ų9´G ĻÛ_čņErd–,ĘĢÔûŽõĐÁâ[SĶTÍlļŪfA ÃõįĢ‡ķōÄ䜌Uq§)U2ÜnP01˙ęŦĨ(ÛYąö"đÄ÷×ļŖŨöÕFKoöė{ūUļĀĖō!Œ žwv?…Bú­ĩ¨XíĄBĮ†HÆ5Qīš’b‰¸įĀÉ*О%>Uʘßė];ū6˙÷Čĸ›ũš§Īä÷øQQgüĪņ3įg•Koh,ŲŽBīę¤ōÆē¯ čKŠZų×û`ą„ŒpÜúũ+–{hį†9&w Œ7cŒôÍuĮÄ:.›jąčöŗLĮ{‡.üú ī*&ž›Ž.q=ŖF€Â Å/O23íëZöŪ9Ū-ŖiSE$ŸęšC˙§s ÍeˆZC,–˛†™O9¨ÛĩlŨ‹ŊmZ@ö°ĄŪ/*ã9ûƒühæ˛¸õßļ–ąHļņ:Ȥdą,¸ô÷ŦĢOęˇē€ļš8ė\ĩJį¸4Ũ:ĘÆÍg‡S“ÍŧpC´Ü´Šs÷kUĩX-’ Ũãĩ›;‚Ųhe-éBŸA3ĻŊÔ'™^8.I”ew¨ĀSXßÛ:ՓŊ­ÍČ[ą†ŠB8˜ßZĖĐĩyžīėËNÁŠÜČqūĪÖēĶ­¯×ÉtˌHŠy9rũˆö§âũá2ŎˇŠę‹=ĒKöKÕLŦn0Î}ŊĢKHņ#~ÁŦŗ^÷eI:ô?Ō­AáĮŧĶa[ÖA}6ÜÃÃ+[ûÚD‰.ŅnäŒ|­*†įÖŠĻô)î´XéŌDHé‰ōŸĮĩkA+ų)æķ1† ԟˆā,R%QԜ+:î[m^ĘXm¯qƒ‚đļHĒZ-JØÅņ|žz°Ü$SBK`ÁĨsr]ęii`Ą˙–ĒŸ/åZ*’øjå„ą}ļБ‰‰ËĄ­‡yo!Ya<†R¨öq—Ŋ&ŦCRoEŠĖA§Øß’f‘dšEy ´§˙\TfÂm*gû<¯:†#¸‡9^˙0&ē1¤Z0ķ'@rI,úTĸŌhP5Ŗ sÆ.9#čzÕÅŌĩ–¨¯g5Ģ)éÚõ‰e‚Uŗr˛ k^X-/T@@cᘕVdZjĘmnaO9~ø<8úwüi-t8ŦŠššcÕœ… •žÆŧ’ˇrü>ŌxČÜlXDdČĪŌ´¤–-ø'$ōŽMRM:y´DÄũqS #hT,{ō~b•îÍ!Íl 2(oļ–? 8#9§[ĀŒk‰Īˇzkʉ)ų[NĖük6 eĻãƒ*ĀĒ6¨ëĪŊ=ĐÎRmęmÎ-íĄȑđ Æ:õũk&įVŠØ˜ãMîĘ(focUĨ´hI“SžË19U<‘TŲXZy0Œn“1÷4Ŧ‰ģ${ŲâŽifEŽvë\ûr%WŪė~| ūĩzÎÆD+NIĀ$ŗGíŪŖēFķDq¨*šų Q.ĀĸßS5cå†ÅŒüÜÕ¨ĸRĀ(ĩRKÉS ÛÆ ˙ŸŽ{ Z€Ûd‘mK˛WmØc’3×ōëYw` š9vËIä֒ŖīhۀØōYNHgÔûU Øö]Š.…TǃAôޜ?ÄgSalØ •#Á'ņŸzĶ&/$aA 3ĐÖ—+nQÎZ@ĀãŌŽi…äļw˜1Ë WTįŖ1—Â_IwpĒ=ĪJōīؘ|BŌ–I t9¯P—FÁž29ī^oņkë006čĀô˙&§ †§ä)XÉ@íO1› ŠÁĮZc†IŠí9°ĸÚų`ŧvį­pŗC^ˇH7ą$1ØļHķĀāU8U҆A,Ęôæ­Æė‚ čH@‡ ą'€FrIqü†°%ß÷Ŗ§sÛúU+’ąÚ<’9ōLⰆ¨ī:Å|ĖqÉĀĨpÔŊręŦÆAÁëQEld ĘSĸ¯\ÔŅB_œgĄ$qšŌ"P–@Ą|ÎĒĀ6ÚØ#Ë ;÷üĒú!¨$*÷Ī$tüÍ=."Dcĩ E:Y‘dR0yīL î4‹€ĄÔ`œg44Ūb‰ €ĀGN9Ģ–‹p šEŒ`djŨ͎•BüM!ū˙*Ĩõ ™Bdō؜1œøSâ+$é„r‡<ƒŒįYw;7´ļ $ŲëV ĶϘ“ ĒÆ˜HĀãŋ˙Z„Ž&ėl­ø¸™aĢp;֊X(@æ@ ㊊eĻ*FĖį„`QqžœŌę:Ŧv$Œ % A<ũhŠŲ]‘íoĸF‰ÁåBžAėEeO¨Ŧ’šŊįėîQq°•“]•–—­iė×62B˛(ÆÖnzU[Äö:Qks.÷Š1œŸJãî|gs$ą#Ā …ûīäzž[ģŽö:­GPņg“ä[H‹ZXäĪķäWœjpj6z}Aä0ȕ[vítéĻŧļYeu1ûŖ$Úš^ ŽRŅ‘;›Wd‰ģzŨŊʋ‰d–<žvÁŠmwpŠDQƙĐâĢEĻ;KD›G,k¯Ņü!q’b"p2Ę“ũ?‡ŽÅ$c[Ow-–@¯÷” ˇi2o%šFõRMuIā‰Ļ}ÂGęq]fá{])„Ä—œ eš•Ō-C˜äŦ<'Šj"9.?q—×]§héq‘|dĘzÖË30“€x÷¨Šš,xč:Šžf͔R+‘ƒžHĪ$U%ViM€§$ą<Z•Ws°˛ãŠŦ‹ũM0‘Ÿ™Gz æ]J÷3‰Ž-‡ąJĨ{}1ųaCŒąEŨŠeäSȌ#ģō× Žŗ›JÔŖPQÉf8 F +ö'}Ėú@yFfDНĨYÜn’é1ŧÁ~•Ģg¤,* ʡ,yrAEíƒÚBō˛I`ŧ€j’"NĮ›‹#ôˆšA#æÍ\‚ÔZ܇švĸė†š.8cķF3RĨĘŧ;dĀ#ŒŽsW~Æ->§_Ļj2- HĖĢHcĐÔŗkļĄ0Ō… cĪŌ°í‘oty".É´įƒČúŅĨZ^Ļ$†Ö @8:āĨeĻæąW4˙Ÿ2=ŊŧÎP>BŖķĢ2ꚔJ€F‘‘Õä|“Q‘Ē–&I- csÅTš ’}Dƒ¤Ö hŽu;Ų‰ķ-ÕqËĀĨ†YÔGu~Uw`Î+%&˛‘üĩ[‰Tõ›‰č+BËMļH,æp9;—4ī ZڏChĖÛĻv@9''4÷¸ŗHXƌÄwŸJĩ8 ņbtœVL“Ū´›ŌÁz€*[MîC-ŌJí'OPGA]†‰$éņHHŽ8ÔeOc\Ęi—ķ§ËPēÅjÁĨNm…Ę“åg4“EˇŅ3ę°Ī+yHķĀ^ŦŲfŋe1ˆQs…~•a´™‡"öRGņ*…đ§YéB[čė’¸d“Á§rY[NŌĩ+éŒ@ƈH,ägģ!´Ō-™"E-û“īūŖ,1PBÔp+Q‚+ˆĖvBNH ´“ëB˛%̘WúŒ÷—[Ž'܃;" >ĩAŦޝĻÎ}ƒ'l`õ­¨ėt˜qXŗÜį'53ŨÛ[ŠōŪ0Į/€)7æ'Œaáč­ØērŌüŠĐ´Ō,f; ’’Á @Í5õĢePUãvĪB@ˆ*;U[ŨD@‰–‡ØÖrŠĘ‰ZŗŦ}b xr7ģČPš&˛íz‰áG\/ÂąĨs,@Dį9$ ŸjŊmĩTHËš”[ cĩPV[šq!–@ŽU˜…pŋOz‰Š(íĄ…$ä3e‰ĮįÖĻvyhâ+¸Ãv#9=˛qPKsē•|LĮ ¤&īîū„…rËÂ60‘ŅcRχ>ŋįĨ`ksDe_/;F†žÕ4ˇˇWī‚vĮ$…^3úũk6æ&”+o-ģ$`vâ´ŖņčŖ¨Ë07˜~uÎyæļm6˛JK” Üdį?ú˙•eÛ&SnđdãžkV4TˆĮp¤zä×}8ōĘČå“Đ”ŗ,lKäNzšōÎ˙Û 3Ļxƒ“ÆkÕC„e$… āã§zōo–:ã(åPdČf§ô*‚ģ2/Îær¸p3éTĄ$ŖœŠnš=jÍÛģ3~aŊHâĒĀV ājá.KĄĐ";*’FņĀxǞŧĖÂg*€sˇž*ũ´LĒô!qžõNümÁIÉ<š)ŨÜÄöË hġ'‘MĶ´Čc!Âįą4čâg—s/ČxĀ"ļbHÅšÜĀ0ÉãŠĨaŨĄđE€§8•äŸz™Ė …GÜ[øzäT,J ‚Jö ŒTŠ'™”!•Īã$ūT”\ą. 0'héšĐŗ˛iMq‚!NAZšĘÂ$Q$ØgŠāéøÕ{ûĩf1[Čȝ ¤Õ¨ÛqŊÔÖ ÉˎYOÃÖ˛ÃŨ^ĘŲ$fČËđ1Z0Y38ƒ#ãGj[XĖ‘ūePåj-î'.ÅK $F†iLã#äĩ¯oA´¯ŧļĀē„6 œcžõ“wĢËtÅX°ˆäõĢrŒU‘ŽOR}C]tFŠŲ )ųņūfą"ŽgÍ#åˆĪ<’x¨Žį`ėĒĨ@9#šĻÁ™ÜX3‘čk'&ËI-8Ę22ä’[îŽŊę@]— H JäŽNõU#hՋ°b8 1ÁéĶņöŠŌPʨTė ÄäžįķŠĩÆ*Ďd;ˆU ä3ū5kʇb¸+ŒdœŸķÍ0L–‡ ´‚AäŠ#—qDX°TVĄÔ›–đ Â2y=•œģyq!y09'ŸåN3íiBR™bļ‹1)Č€2i¨ƒiŖ)‘žõĮĖ27âjÍÍíĩǘíÕCŽ1Ũ@ŦÃ=Í´āžŨ1ÅgÎæH į#˙=)5ØHŠô­ÔÅw6÷'kgūyŠ •ėôߟnWŸ\Õ< Œ”89Î1Č50a4 ęÃcŊMŠšRW@Z[ir Ė‘Œ})o'sl^Å ¸āT›ā’y5zÁƒ$ļŗ($€h `€qŌ•n<œGĨ^ž0$ž\`üL:ĸA?sŒ’>•]iŲ_Åc*mÔ:ŗįĶ5Ūjž"’]"i-\ ČJ¸_^ߕytdų„z÷¯GĐ™{¤Eh’&’799˙ V œ2Mrė;0‘ęI­ģoO;$ן ‡ŠŽžÛÃÖŅ],ņō2>\ũ)÷ižu$yj@Üz’Ĩ1”îĩ/˛XĮЍ›ũXf įĩ“á]SZ–Io\Å­•$d‘]ہdŗÚŠBĄN1ƒ“øķWžŌÚ˜ļĀ͜ĩ ÎmF6ÔŠ¤x?LŌæŒÁžč—<•˙ ŪM*Xŋ•–-¸ąŦ¨¯aͧ’r˰•c“ĐROã %c‘<Ŧ2w zšYĸkŠĩ<°ŲBfšD‰˜āVRk)Š9‹LÄî Ÿē+*ÛÉņ=Ņ3LÚ1’ |Ŗ˙¯]ĩ­­œ^U¤QÅ|M;%ę4Û"‚ÅĄ˜Ésrg—˛đhŧžŠĘ!$Ψ;ŠÅ՚öÎÛ ˆA9ÁmĄ)ģXü˛™6œņYZŠĩÔ5Crĩ>lsNÄŊ49ЧÉ[y3Őķ‘YķĀŗŠ‘pŽ:‘ÜÔZŠIg¨žņũėärK (‚ƒČÅ?2QFēo2[c:BÅA&CÁ­%ļ‚Íä 鸓ˆß ssDRé^1‡?LÖĨĩëj0Ŧilx˜ `päs÷–ûEt4]3ÉeŪI02ĖåšĸŌ•2†@…S$šËÔâŠ&ĸĩš đŨĀí֥ƲŠEeh¤yVči%}ÍŦwV÷ęķ,pé—íPhĀ­Ö.|¸ėļFŋJã4ŊkS„ItŌ‰mĀ ´Xô<ĶÛZM@ųßk•bRIĩ˙•U‘įeģb[ÍH­ČŽĐŽ@IsZļšmÜŅ}ĸ;ûc k‘ųšŽ )¯#F™Q”UÚMĮôĻ7ƒÄŦfŗēxyØ2cb=rO_jVE=w6Úl¨—ÚĒ¤Ō  ĀÁöÍP&'šÚÚÖČNNķ0\įXˇšŒ‰3Ûkl)lT§›dûUsáûõ yáÛĶ,#(H_lŅh‘ĪcŠDŌaz̆i ã{ Y\-ŧ—32Ÿ?qŠč> ŅĖÍgĒØmITƒįwĮĻkĨŊ´ŗÔ4Ų4ņl°Å:pŋ0éDšŽâæOc6XĩēĒjS@8!¸úÖ\ÚΑpÃ/s+Ã:ąŦÛ+™ô æŅ¯‘X)Í´…~đމ4ëŠf%á]ÄōņXÎVhÉmGLÚUmæ ’ (@¤‰ė.æXŖˇwrĀcɉé[vēRÍŠ­œŌĖ ˜øEu閖ŅųqÄÎNzJ+›Wˇ¨ÎBM"Ö6@›@å#5dJĖ8_"9R>•ÔĨĨ­ļį¨íԞj0 UÃ“ŒÖĒŅ3åos[äŪ÷‡Ė=Iˆ“ųšš΅mĖx8ŪėsõޤÅk´fķÔ  “YÚŧ˛DŒÖŅ VÎqŒPãqģEžĸ4kÛļŽ Ā ˛œfĢÚÁ=ąaargH›-ƒŊLģļ´ÄŦ#RyØ{ŅŖ\­ĸÉmt†"ØųĪF•6õgŠąaŗ(˜Ĩ+€ÖŦŪéRjDņĒIY>éÎ({H.íöČ2q•aÁڝc=í šQ(PĨd'ŽkH´ŪƒWą-Ļ–ūl}m Ą"'$˛cP›T‘ÆH5TŨŨM´#p‘—¯Ō¯ÛÅŨ˜;/Sœã5Ģv ^D¯!KËČ‹’GNÕ%Ϛeœ–¸‘†Aį55ÕÄPy—/€9šŠÚDŠcC,ŦŖ É_­ih+Ļõ5.lÕW{HŅԎ†°īīⴌƒtŖŒĢāũ=i×sęZ’ī ZB †2×+;ÚG;%˛Ų#͐đ§ØTÚûšÛiyčĖ2ŧ’ôÉ\(ĒÆ]Ũäø9 Į¯ZŲ^ŧQË4‚"W*‘'?ja…V~IäūęōĐR•žÄ+ļUˇYŌE` –ãm}OôæXUąræG,O“<ū šeÕĀ+4ÂÚ1Ō8ŽXŸv˙ ļļÉgn‚ŨbF9 @É#ë֗*.ĖÎX/ĨQhļqg¨]ÎGĶ ­;}*ÚÚo4y˛ÍĶΕˇ0ëͰôâE#r؃ŽæĩD¨āaA9čqĮäÕZÅ%ÔŽė#‹Ėeb‘Į~{G’7Ô ‘ܤÔäŽ*Ŋ˅B gúžõÛØøoGŗUōė œâŦzėyÍļŠt­%”ō’ ŗk÷S‚Ė[Č2+ĶāHđĢ*Ŗhã—:t(ÂHÕduĶ‚ g$ÖÂöhķéô­jæÕáģēļŒ‘Œ’~žĩzÆ Mô›xnõXÔ0ÛögˇY ĮNŊjĻĩeâžhÄđĶ„cō’+ 5W•ãK͇;Zhų …(Ú>íĮkjz%ĩļ˛bŒOsÂĖkÏĀãđĻA ØiZÆĸ¯†—ĒąųAŽj×Aģŧĩ&/K<§ĸ+`¯zŊká71…ēÔŽžA’vˇËŸĄĸN+¨÷čoO8ž‰Ąˇ ĘÃiĘäU8´Ãh€Ņöœ_”ė)ÖJÚV šãÍų[n1õ§]kVÁĘFûä œՒ–ļFɤŧÉŽ …ūV^ƒĨXIŖ;…¸WaÁĻ+Ë%Û+LAŒ€6/zØ´á0Ģ*c ?'?ŌŽ2ž‚M^㍔n2v¤„…āõęėō۞Q]XƒŽR$ l#§ąūĩVęōéØĮQIb2MU›-Čžú­´aîD}$ā‘Yē–ĢonÉ)S!HūfÅCyaė o$ėeČ,ã–ĪS-´H,¤3FßŧŦ‡pĨdƒŪh͝õ+ɤ ‚Ōųš˜œS´ũŌdU&Qɒ^O˙Z¯ÜģŠũėdād2r*‡žuÚÆŨĀ€.n%Œ{f¯Vˆ|Šęfk&k† {ElÃ5RÚĘk˛ŨgåQ“ęMo‡PžM>Ú ÖęUØ;āgŋ=i÷ˆK~@äÁĀöīЗncŪŪnåa'Aĩ@ö˙ʖîÕ&dķĀs[3‡Ë,ˆ#=2kQŌã*'(Æ3p euąė§4ąĨŅ A1’zœ“]†s bØĮ8äņ\ã$3Š•a‚î dÍtžx…ĘG÷cGCÅ7بŊN­ŨÚTŒ(  ŗ€ĘÖwŧ(Ą‚ũqÉ5tŨī‘„@•n2Ü*Ĩú™üĩRPĖsÁÅT¯czI9ĢėdƏœ–öôâ­@›Qˇ<ÎāĪŋĨI‹Ą7-¸sÔŸį4ۘ‰$‡$Aî?ÉŠ…ÖŦčĒ”ŊØ­†ĩĖ!UÃFĀĶ­VūĐy“`Pvœn'=)ŽŸ˜‚aÆjŦÉ-ëå8,Į€ 7.Æq§}^Åéîîn^Ūö™p̐ÎEiIjÎ’@sŽ´Ø4šmöJQ‹Áaū}jYDĖĀ ‘‡;ČN;téŽÔŖ՗VŦj*ąĸVXÃFTā.>ā<ũ}ũ數 kŒä‚@=ČãôôŠeē´˛„1ŒÉ0—hPŲũ+0›ĢžW ŦÛö“ŒŸéZĶv’9'°ûKcrË{c’sŸZčŒKnÄÁUƒĶ8 G“fIČĪQڭܸŨŽ3ÎkĶĻĩ9%ąŸsš iÃžFrkÉĩv–mNéÉË.îķžų¯dĀ#ÎNA#šķĪø{Q‚ūöú<™2Έü@9Åc‰WEŌvgx[,„ įn{ŸOåP[D ąĻ2—Û*]D†Œyč2qIi i€Ë=yŽ>ĻŠĶl<Ā$pcúÕIaŪ0Į$͟Ĩ\€C41• ¸°ÉįĨ+ŠqĐ‹Ū™%U´~ã${Šļ°&ܖb ā÷'ĩ(ķJæ001‘ßf fQōôÅZ->I¤*1•'¨kj(!˛Rf Ž) Į§Į“€ė~čäƒÍgNīq!Ëę9áA§kzˆuÅÛĪ1ąāásÉ÷5wL´KĶąũāČŽ+°ĮlgŽ+ŖŌ­šRĖX™H#dž˛š2ØIįļĶT['<õbkįXšœVؤc ÜÆŸŽÆlŠc¸W98æŗp€į’;“C“ؤŦN$#’H`œâ”€% 9ÜGԚ]ü‚oëO;ŅCcÛ y’ûÎy$äN…ʑž9ÁPsŽ€I.pqæ(rp0:ÂŽAhō+H>BTsŒqū{Фļ‰TáAœs‘ę*H`@N sœc4ąË  %[#$ãÚŖ[Ļge(ŒšŲ5kĶčY6I3eå\Ž8 ũ)Ŧ" ķƒœštŽŠŠûXŒ@=iģX”Br>RFNhæVĐ\¯¨ƒtŖËSˇ‘ÉčEhĨ„ih2 r2I<æĒ@Ŧf+ˆđa×>õsÎve2vŽ ¨nåĄģT.ŌĮŨ˙?gÜYëĨ!Ø$ւĄ3ąî㓀jÔī–&M¤6@Į&ĨģæLž‡i’9q*đ0Öąīå–&PČU9WčFŲJŠ—*rÄuŦĢŊ(í!㈇ČÉ9"„ûƒV8ŨCN‰ôØuōûŽáŦ9d'Œ„uއQ˛¸ŌK*š{yxd=`܆F0§îÛ<ĸŸ ŦPmėäõ=*YJ@ģ˛ärj´Û×ō§j2ūaÉ<€zšBeˆã–\°zöގáü6Ōx‘„Î ŦDÆŖ’OŌšg•RČDFPZKp’G$.ŅH¤ęH#ŪKŠV=ô4ṗ9 Fk寖)0%fÜ3’ßÚ¸yõŊCQŊíü’íĮÉá*ū‹wyiŠÛO k4ŌåU$lŧõĨ{×=:Ķí1ZnˆNĐ௠e'†‹ŪI}Ē\ŧ¤¨.p mX}šĄŨĮūČŦN?AYŊĩÆĄu‰Žd…ŨF܆ÕîZВøZÜFåōT†čqPYéQj34–ÖŅ$DaĨTÆk-<1Ą~ėr€‚ėŌ…Ž’ņĄŌlŌÎĘ1(Œô§÷Kr…ŪšaĄĸEnc¤‚Ŋ3Tīüf—–ūMš° >f IJ[[y•üōš'Œö5Ŗnēuĸ.!L/Ėw€M)ĩ`‹fšĶnfžÚæP˜4„…?Z¸šŒFqĻM@aBĮŒũjôúĨ‚Jē„ äŠGÖtÁ )6ī`†ŗe­ļFęwN ŦąBĢ’]pĩuƒÉqĄ íŠætŸižsGŧĸ7!ŠāfĨÕ|@>h,’I@æIqôŦUČ5]nHĻ1­ˇšÄ‘€ØU%™d¸žâiœāzŌi:@ēĩFņbq Ë]C„ pP [s7WÔĄĶ´›™$,!F2I¯3ŧŧŽåËĩe<ÅōMoøįUKĢčėmWyˇRԐ02zW éhZ •Č,p)ܝØ\h¤iøi'€jœW ę"€sWe‘O6!—#<Õx"ŠŨķÄŒcĶžƒërÔŦėŒI°'Žž+-&îäBÎå@hgÂ}ũâž&*qڟinė››cüRvŠ~E+=Í}^öęcģš+ļ Hž#ĪNõSNˆM ČŠ $‚zŌ$RÜJ°Ã 3’ 2MZ—E›Ė0ČŠ€e†qųĐļėT’;fėĒ 6 5rÚPfYJ;–vÎO­]Ķ4H›)+Œx "äŸį]—„c‚A @NxÜŲ4î;YXįtÉoėō°Ü*!rDRō¤{ÕŠwâûˆslTE!3Gķ+Ļ–ÚÂÆŲÍÁ„>ͰH:Õ-ÃÖ”¯sōJ€į'ĻyŖÔ›ÔsĩŪd•$<’pií`ÚYk.üE2ōŅį(ÂŊøsMÚ<Ët  Ö|žŌ§rR"¨[$ŒĐ’ÜN7<õu5ÛŏTĩÛ$g%ĮĘÃÜ…uvˇséļæKˇiáėp2B˙õĢB_čŦŖ &G!‹ƒW,ôDĶíwt9e€üčĶf'lr>"ŊŅu[ĪĖĀfQI ũjžãyEĒŲ\¯úD#a”ōH­iüaYĩĪ•1mŒģ—5•}āFĘHĩ imŪP hņ€ÃŌŖ“KvĩW×nWÉÔėî{fėęPõÍt3ø†úMKĐūQ1îŒD˜ŸĮ5>eWI-^ÖI#*Āt9ŦŨTÕbĶ$´Œ+ˆ˜ÆQ—įÛ5”[KW°6vVēĒŪéņ_+–ŧ™õ_BÖÍūŊsm1 åFzץ_yK=Ë•häĘĢp@?įõ§OrúgˆínĐŗzv¤ĒZÁwšęét’JÁHƜ0šĀņ}âĮĨŗHpĨļ‚piÚMËÎĖŌĸ¨‘HÂô5.´–ķXũšâčFFq…"ē•šMzv”ÃReR8ŒaąÜ×UŸ ˆFŅĢî9ŽrÛN“MC§üéüqAĩÕ闑^[Ŧą8ĮpkŽMˇxėi ZĖĒ–ˇ ,§˛?yIËGôö­ë ž/9Y]XsCē’øķYEöiŽã‰œG VDŒōœ€= o^Ĩü;ĄU$oNAöĒ3ŧRŠ!gĮĖG­D`ŧXĘ 0ƒÁúÔâ„°›Ë e vĀ'˙×ZY-n.o"…Õ“Ī“ •쟝ZbęÖZRˆė-b–rĖ0SƒJŧēD:ĩëˆķÄhy5Ą~ļēnš2Ōũ]ęÔ{™šžˆË6§“ĒŪlL’!CÍe¸]CXˇĶôĢ`„° į @ę}Ģ3QÕ'ē}ļčcÎķ°úÖö‘nž?jģš q$`•7š' ū”¤Ŧ ßFusé“E q\ɔęŅÂÛT}OV4×HŦaQ j€‚08Îj4ÕūԂI?s1h›€éÛÚ¨]ÜųŒ@s‚sr}8¨EĢXStĶLy`Ø Ę>ŋέĮ >s ų'9éYļń¤'ʁc×ųÕī:įA$ˆ' u9įëĮŊ1­w-Æ t „RãžĻ§bR0zerr?ČâĄyÂē‚Āš8>ŖåRf~PĄ#…ĪįHĢšķI 2X‚8¨ílÖmZČ>ÂĻt  †ô5<މœrCˇŽk‘Ô5ųåԅ´K$")NZ)vČĀÍü?…=ÅĖĄĢ=Ãˇūy/ũņEx‡öŊüø\āÁč¨äo6ö -"ÂÉcÔ‘ 9ls\ZÜ]=ą‘Š16.\Ščŋŗ!ŗÚö9ĨxŽJÛT~=)ˇëZ#GjöÖû$Cīü{ųPŽ‘‡/SÅ›ĒO¨c1ÄHSËZę<§]}ŠŽnlɕi95Ä5ŪŨZĮSģß"´Ē\žKsÚŊļŌæ¨ŧČ • HΎj¤ē‚JúŧÔváHuĨkhŖgāmČô¤€<’={RÉsoË™|Đ *9Å6ėU‘2ĀĒ€Žxâ‘`,~fĻÃs ėv:šĻzS/ulâ%ÎN8QԚžk+C™ņž™ivmŪæYPÆf3ŒŽ:Ö†<5¤ŧŌO$&|‘då~¸Ģzš7ŅÉ%ĖžR°Â€2߀õ̉ė”y›QmE'į?_đŦáVīȋuVđUĶŦė'ÎIƒ!ę+ŒÔb×|?8nŽØēĀn׎E:\¨™*pIņZąQrČHčXŽ+VØųVčņ¸uŨUÕĄ’él'Ld˙oDúŧČN•€%Ą|úz×W¯xj JØŦ+cČČäũ fhž ž˛}âúhĄ˙žG ?”_ŲjÂi™PjfuimŽmČ'!“+]sKlĶÛL˛ä@9Įøbˇ>ÉäBĒŽƒ’@æŗmô>ÖôŪBĨX[c?*Ķ›Mƒ—Rh„A|Ķŗī3ũ2Q2Ģ`ƒŸā<œ}kLØĀĀ9Ēs°C€sÁ'Y7stėTŦLθķAŠč~ĩfŪu¸iÁ<€+2õBą.ę7 ;ÖPŧ쎏 ŽģYÛŽ=ĒVē¯rūĄ~eY-­sæ—ōŨú…ņīX7BkŲ×NąS´lDĶ÷sõî}ĒĖ’ĒĶ4ö&öLŗČŨUOV&´l´ø-Õ-cŪBŒ—=X÷5˛2vų”ĸhĘöÖķ4Ā.BšĀŒŒķ‘ū}é$ÕÖ}6+Į CŽėĸĒ 3Ģ_M ´Ž!‹åšP~˙°˙†ö(eĶí˜aPdaĪášj×%ËAâö˙tņ6Įæ 9æŗÍÜŦ^9"c‚AcĀĩĸģxTĸ•n'ĸJ¯Š_ZÉ0HãČܨšH„îaų’Y#Bą)ŽT÷QÅli’›†ÆĖ;šÉ™^{†Xí`¸V†˜Ĩõ%N2öÍ>a-ÎÆÚ Š99 €;N’Uš0Ĩˆ`TŠpą;eä“Y—Ÿi ÉČ1“žhÜ脒ÜYæF˜,…_’sĀ>•¨Z ˱Œã#Šü)#ļ–U-&xãåŋįüâ”ŧ[@‘_*¤|ÞŸJŲÖäŖ VŦ"‚&l2ģ1Č1ƒƒJˇh`ŽtD‰TōĻ ÆĶŽj yU!ļ䯭Y´´x$b°Ŧ§ž:~=ĒŌG3œ¤jI!y–5DUŒmÚ[ z˙áPË\Û+ŧāŗļФ¯>ŧķĮ4:$"âbŒKm_˜į?¯§_ΰZ,xmĨw QĮë@=îĖ‹”Y.ƒ…Cã>üÔ2–h]ĀڀįĨ?t¸€¨€1Ję'Œ…Œ@ųØāö§fmsjjiOēãÚŲ+ŸnõĒņ ’ę1מ+ÄL°ą*¨Čë[6“ˇöjĢ!,¤’AëÖŊDũÔŅÍËŽĸ„U8d zæšīŗÁĻHÁQc‘Xn›æQœī[Ī8 ›@;ą‚=*Ÿ‰­¤¸đ”î;%`Ä`ę}{TU—ēÜđ;Ôf`BāI4@…š4'ŲUBX`“zâBAQÛĸÜbčĐ MpšIęnØēÂŅ’pˆI8< IqoįË)ĀyQ–&Ē[YIrą„#kŽ?­tųVčfšrr8ÉãéT+ô3ėėŽÖAöžI,ž´÷¸ˇŽLYœHœnę§_]KtĒ#@1 y?ūēĨi ˇ—$g*As‘EÄM12n˸ôS…ŗ–]wHr¸ü?:*2š#ŋįé[6ļD¨i @zøŌ l4…›-+nbH Ķ­l\K„DHp~TfĄV‡Mļ’8Û|™,qØÖtÎōfIŽüđęER•ļŒÉŪKššId°úTA °+–$r I*„ ~ņ5X¤ŽJĒ`úŸJVl.7f@Ú ÉĀäšyˇff$ …*Ė6Ëb ÁĀÎM8.bˆÉ­Üq@Ęh‰ ŪUw(ČN*üZŒo iɃ֊ËIŧĸ2Ģß ˙õÕ¸-B¸Œd¨Á'¨ū”ī}b1‰.zjĘ[$ H*2K1WEŠ"īÆ1Į+€jx흕ü´\“Á"ž€EPš'¸Æ)æ2ģT‚N= ĢŅ@¯n[ƒ‚OĄˆ!Á dāã:P1Š ĸ=¤rb?Î*Uˆ$Ārr9ĀĪŦŽĖ@ŒƒÁëREōļ$ܐäq‘JÁrT’ä mī’sVâW$Ē—<JŽ+x‚āíru5i-,Hp÷qڍ:‹W°é%¸k|FŖ'‘ŠpļžxB*ÄucĐĶĸ˜ųØČÚ;U“vWåŒ āõcɨ‘I"đē]3ĩėÍ Û‚€aEyūŖam§ßKcs–ĩbLĢ^…zu،1#í åŗĩEqzއ=˛ÍķŒí2+ÎGĩ%!I6Ą˛<‘ÎĶ’WĻ*’Ŧ ĪJž^8Ā—•›#"ŖˇŒ›Å Pß0‘Z"D–)vo~#¤ĩ•`v’D/ĮĘ Ģ÷÷°UE.Ã8ôĒöФqĖŌlqØĩmöíFę+xSk1WŽxg–Ū€^_:ËzW’[!}…cø7ÃÖÖ Rå@‘€0‚rBúũM\ÖuöŋžŠÆÆĘåŲĨ”ŦŊM{ŋęWRˆtģ%1‚AœôĒvv:ĨÅÃ<ĶÅ?båŋZĩ%ÅõĨ”PØ[*LF #$õũĢCL‚m2ÔĪ}pĶ]ČIbG ú ‹.†‹]ɌņhV@M*ŧÄrĮ‚Ƹámũš$ž|˛HXąŽ9pĒ+Ŗ—Emjëí7Ø‘÷zĨHĪĨhĐ´6 qÉXĮsNé"ZžŦĄiá ĨŽđœāI+;U´Ķ´ËƒösÜnƒäbē]2yog‘™bUh^wžëDŽk–žvwFĀX׌Tš_R–Į šåļÚh¯Îp­kE jO *ã!G<ÖŨū¯Ļh‹åÉ4k û‘/_ÄZ–ų_NlĖ ĒÁÛۏzac•.ôŠ rÚڇ–äšé<2n¯íšîö(Ėd⧨õŠm´tÔækíMX8Xu÷­—x--X…ō­â\ā M씝ģ%,6áP;æŗĩ[ãe§Í: fU;žKW+Škúļ› ú3Š$™Ā8cÖ˛õ˙]¤āēA(XūUđ"A9Ú=•ö¯&Ąwû4˛ļį߀qš‡YšƒDÕfŽŨHn ôĒpøĻøiđÚCĶ •åŽI?…PģŽkāŽåb*r2rMIlŧöÃėÅ˒ęrpKE‘e6Ë<* dā1ĮO™gisxÅmãgč „fē[ŪEgö›“¸Œ2Ĝąô¤ÁjrH$¸—hbą“€#ĩô- ĩ‹ī&5lŦ€xW ižF –ūP6ĐrĮęk̰͠Ķ`"ļĪJlÕ_ŠĪéąĐË4iæĖåŖŸOJŅ“L´¸f’HœŒeÎkSœ˜Á'šīM9ÉåAIØĮ‹DŗˇpéopAËe-ÕĻŋķœÕÆ$đĒžŊ)3´ąØ ã͊ l†]6Úęq#Ǝr*āÛĮĒ¨Ŋ€ĀR]VûÆBį5ÎęWڅãƒŅĊŖ?6Ō܎nÆäú”*āōt ¨Ģo.4‘ÛĐ bŗŦ"†öËîœ.#Ÿją=ŗžÎîŽØÂē|Ŧ)=W税ö—l,í<ˇ4]"W*8˛MsSXę@ŸËĐ,‘ÖĻƒÃˇķ¨“ûI<ķ5Ē7Ŗ Ŗz ĩģBūnÖęj Ûų`ˇ3˛Ēã 0Ļ ļŌ’Ņ[;åsÃ18•¨[j˜e‚$’ŲI$Á5ĨäŖ­ŽK nÖK€ąä\…Ũ´ŒŠ™åą›dÅÜ6 1Ž\›ß=Hŗ‹*68ŦŨyŽîaYEŖFđÛŅķYÆˇ3å’VíO‘MĒÉ{›Ä‰‡†A´äz5rZ§ ˆfYŠ@SĖäŽëŖąņ‰Kkfšˇ”Äp­! {WEŽŲXŪxvåĀFĘoFۂ+T“Õ!=7 _Cw§|ål‘Z÷Y1"!8q\g„§ŠŪÖ+„’¸a'ŠvˇãkfĩdĶžF˜ą_š=ĄGãŪĒ.ęË 7bÚęļč͉æ‰DL‚đ°¨í’)f†‘!ŽEå s€ūŧvŽbĘÆëTēŧM‰LuļšdZtM"ŦúĩfãļÖė"ŲˇgĒ%ôCÆrC:ŗĻ ZöîI#P€(Œ“ÉëšÁĶ–H/ž9Äš‘˙ âˇ"›æ1ˆ|Įb põŠ_‘˛•ÖĻŗ¸26$äô¨nībŠŲÉt‰ûîĨs×§YMKušÆŌ”~žôØ4Ö,fÔŪI§nvˇÜˇ-‚íŒ]JâîfūĘļķYp ˃åLՃŖ'šnõ{ƒu* Įû‹[đ$q¨E@¸Č€+îéĩ›–ŗļeQœ\Ȳ*Ûoc;%ģ0Ž/íŽõ†ŊBŠo „ =@¨­ģŖw?›ˇ$ÁųĨ”˙xú š“­w$ļ4ņ'–â1ķHF2=€ČæēDŗˇ°CHĒ Á8Éüé7aÅ6P´ˇt„É*yYÁÚIíŪ Ču¸ķ9kbä‚RaA%G^+ÛŖ¯“ɨüjlV‰Ø#ˆî ›r,:ū•fŅ!ˇũÜh›™žņÉ'؞¤ū5]?w+|Ų89R8#Šŗ°vA哓éøR,Ŋ!eeÜše FHĻßÜßÁ$fÚŨĨVĀ\€}ĪT)¨YÜLÖÉ:Ęę1¸rņ4ųne†ÕÚ%.ę§jąĪ¯ūŖM “M^å-H]iÚ\ŗŨ^B(Æųטj“ŦÄš˜ä፭}gSÔuĢ˙,3´ŠHڃ$AWt‡ķęöíĒ—ļĩi0 ’|ãņĢēHįŗ“˛8_ĩÍ˙=ZŠ÷ßøW>˙Ÿ“˙bŠžrŊ”ģū%¯§^&š7‘gQ†ˇ ‚MhøNŌx~Đû’(x_ŗ¯$R}k^÷O‘×Ī‚=’ įÜWJŗˆÚėrú=ííŋ’ĶÉQ´Äyú×[o8ē‹+Þģ˛EaH>Ņc#XĮå\ ų‰ŗ'đĩĪA{uĸĖ%šāDäņĘrĖ=ÅEåīl ž‡ą\ üŲâ˛ī´cpĨíŽL Ûƒõ‘âĩu`Ę˜$´€GÖĩ]Ö(Cžâ€œárGå['ÕŖÜäeÔĩM*dPJt¯(GסãVežKĸ {LeA zWA"CucÆÃ9<æ¨>žÖéļĐ Psåž@úP;ô֌<ŽÛÉ$ąč*¯¨Â°ÚNčyw*¨­‡"Ú6ĢIbOsTĻŧ jJH'ŠĒįkŠ›H]N‚ (ĘÃĖš¸PŌ?r}>ƒĨTš{Ÿ´˙béķ ē’&iįįėëéõ#Öąa׿ĶâFÅŪF+ŸīS,Ž&ˇļ• ~ūv&YzŗīJR1ĄŽë0év§Lą;TNnü÷õĒZDŪ ŧî娖5ŠTŨj$1Ũ# ŽyŽŽĮIē¸G-ûˆåø4ŽÄõ*Ũ܆â-•'wSøSl´yRW=œ7P+¤ÖuˆXØOpN ęWw-ōzņÅKĢi6ōʈ¸ ‚I-W4Ŋ2Ųĩ nK˛ qŽĩ^Ú'–üœ}į ĀÖí„$ÎĖrp¸įŌ´Šę;jk„EŒ´qc=ņČĒ7Ē%ĩĀAŋhÁ'§ZžggŠhãV1‚Äį5 ´[­ÔČ2O,OéIŗUvgCiûčã‘ÕRØßžŨxsmÎŪY ĀŒŌĩHî„Ņĸ‚TžF üyŦ ĢŊ×*ąĀ–m cŠ”kQw-#ĸ2…„c85ĢjŠÃíėC‚@$‘ŌšØžfy÷Ģļڎæh6lņš§äŠęėZšuMāPÅAā¨ĪõžĶ cæ7ÎÜĪãQŨĖÉ&qûĀJģ“’Gl{UœĩÔš<ĸåFzžkĄJ)JČē%.ŦŖåLä‘×Ŗgh%U~ĒXĀôBÚØČ‰#žøŽĢH! )œ¨!6āvüĪōĄ°ēNČÉ.–ķKi’¤ŽduŠ vuÃJČ $pXsŌŠęōēëR)ĀÜzƒ‘’I§ 7[–Č'’?ÂŊ^kÁ?#‘Ģ6‹áwŦ Ŗ.č&›ŦO7ü"ˇ!I%‹`†ČëV§6‘†ØÉ9ŦŋßĻ™á[eŽÜ‡–5U8ėOzį­+ĄÆ:ž%|áRß*IRÁ—5ģ iČlÖâgT.r3РšĩfqG ¸S×Vˆ"94lĻĐĄ‰āV1}ÂkSiībY–HŧįÜÛƒõ­h´ëdV¸Ô6ĘũJŗa§ū篺xtøōmģÉ„ÖeíũÆĄ6$|Š9DtņúÕŠ%Ģ3i—õ]NĀĖŅYíHq‚Ēú€jŦ7a¤a°@ŲÎMd4´ęBdį$Ō´íãX@‘Ƀ–'‚jRmŽöGIgŊpĻL æŸszBâeœnĮOĨ`QĨRą’‘ôõ5,Bk™1î$`ãąĄé°îXĘØ,yā{Յ‚Y› A=ęõĻ’Ļë—!”d‚pEqĢ[BÍŋīX0: Ĩn+Žr…GPįw5BęęŪo.^CŽĸĢÜ Fđ‚á•zāp,^琒UR0GsI˰ZåH¯üÉBœ%›îüëDĩĖ¸Âŗ(QĪlúbŦ&‰afģ‰>rFri˙Ûv6đ* ÁnŠƒs–U„‹Og29Lœ’Xų-‹Ī@,?éYãTģšC"Ã˛#€cŽ~‚žúš[¨7ŦÃæN¸ĒW†Š‰đŽŽäuČį%´ˆƒ#I 's˙W§ĩb6°˛DW¤`d0;VLˇ×BæSm?II ąŒzВÎŨ ’H$ž'ōĻĸ¤ °;vCĀüŊ*•”K r13Ē–ÁČļ¤ ¸ōĮ8ÆîƆŦ‘ĮnČŦķ°$?k–dŲÆ8nž•š•÷<ÅJœŽHíWJ„DÆÉ#šMŽÃaŽ4\ŽGŪëÍ8 ‘B´„ã°āiŗgÍĶ1SEî1´&qČä‘RØėMmi”'rN]ŒZĻ8q䎤ÕoŗĪˇ+pŧ ÍŌ‘í5đ¨#ˆÉT\vdˇÚämš–DQÆ@n?úõĀk:ģjķy“Gĩœ­œ€>•ŋŦxsQ:t“Ë<.ŅäŽėWųW?›,ĮqO˧œZh‰_Š öeâ%X”įX“ŨȈ#t"PpÍĶ5ÜÅawyh g ˛õŋ ^XÄ5Â"1Œą.O°ĒS[“0í,Á#°ƒĀč+Ļđæ• åęI$*ņÆÃp<‚{ Ā3Ŧn1¨õękÁž)ļĶ"š†îļB^5éõĻģ•sŅotŠĩ;%…nÚTŅĻ08Ŧ)4ũ‚ŪæK™ĮņŽNęÅÔ|w=ūëM>3.pō7$Ў Ũ[Z^Á –8Ė„’ÍË3TžÃM‡§B‹K*Ÿ0¨;G8Ģ "ŗ;!cÉË‚ŠÁsąA` ãŊ9oKƒt2€–néPŅĒhĘÕĩûȌ~-Ķ8iËíéTlŧ%%ÃnšÔ.ˆ<ą_—&ēŅ ˇīÎ*”Žô+FŅÕfÔe›LđēŦ0Ļע}ŋÎkĢđUĒXŦÚlÚÃß]€&xÛ?ēëëīX‡WƒÃļ1húMŠ}ĒuÛg$ąĪīØuĒP\Ûx:oޝXŨŨ03¸åĨa“ø ĩnƒŊ™ęÜ!#œt qJåŸN8Íy׀|S¨ęzÔąŪÜŗÛĘ E8>āWgŦøJĐí^įPēTQÂĸĖįĐæē~æ‰É ^*ŧīä#Jy’ fšGņ>Š4ĻhĄąļ„.QfēŽ}@īíPĪ­ęrĸ†žąˆŸîüÕ.InĀé%ē–F3R2Yū\TRK&gēG `…qŠâŽ ÅÃ;I%@Ü#*ĄĶ.nJŸļģôŠĪÛ­“-ÍŨfōŪfeō"ā~ĩ͝YAÔ'Ž3ĀĖ™ĢÉá4u 5čRyĀlœTá -ĒĪ~vā÷SŠ—6÷€$ŒÁm#ÃS”œŽCķ[ZmŪĨ 4fvœ>iāi"đũŦY:—ĪßîāToeædC¨žî`jc._ĩøÎÆÚTšXÃƤp Ų÷ÍXh­`ĢĻO\6p)d^GWģd Ē"œ4É%f_ĩÜ0ã9­=˛Ú˙€r¤uz…ÚÅlÖhUĘņģ$øV ßë(¤GsnIãũQĒgEēa´N  gm@š$mž—Ž Œ“QĖåˇä+XˆÁŠžãæEœ‚p˜ÅBöš“ŖFĢĄÁR ‘‘[v:4ÖŗŦŌ\Ī SĨp [š†v-äʑ†9Ā*Vŗm}Âf.‰á9ÔCФbØĒFųcߟA[ZÔĨ-VÖÎ1"0Û `qÅd^ĪŠAu¸ģPJ¤Ž.ÍXē“4Ī'n8­e$´Q%sEkĢK9!KĘĘÁģ§Z.ŠuewŒNÆHwŒ0&ˇną ĨŖ† CiŸũ‘ú‰ŽáQrTÁŗĨJžˇ)5´ŋe†d`+Ā>•Ĩ Į2Äp8Pj…’4Ki8 $`ƒ‘ŒŽÆ´4<–kö„d‘IPõ852* ėĢ ēŸQIĻ€@#V –É9ĮøVÅĄaæ&üŗtb:u¨rĒØÆ_8ŠĢņ Heŗ''p Ō‹ģē6Œ95eˆBŽÕ“eÚŽģ0ām#ŋLV’ē2“’F@=¨n5'Õl…ĨžíåĀ•ķ€ƒŋ5ŧ}âaЎ™9˛ą—Ȑ Ī8l,kū&°Ŧî¤ŋqĸ鹲iąˇKË0īŽŧšŊ¨ÄŌ\cŲŽédÃ\ËĐFŸâjȇû7NhŦb ųASĶߚۿļĨ–ģŅ´šĄĶã’8‚Įą_§^žįÔĶîįŠY.ne ąŒŗŋc¸*įTģŠ8âS–šg9YˇĩWššŸYԉģēytËfųbÆÕ’Oèõ-\ÕM%c´‹Ä6×J‰ <‹˜â=ŌĨ%Z ŌAĪaVė,–ÚÅ6Ē€T1P>P9éXŗęöÚtæ –c‘ä§$ũz`}i'qÍ4ŽÅkëfi<ŠR$ƒ aÉ­HÂXäv1ÆNsôĒĸ夞i¤†;t䄍~P)ļĶÁwŦ¤’ļöėëUîŖg'ŠÛønČ[Z‡Pc3$ŒÃ–<ņô•sPąkøÂG9H™rDx˙_ĨfŪꖑŲÉ1šAÁV’ÃŽŨũUËOã( Y>ÂŌ3ĀvŌ’MšĘIht°  PŽŌ6XŸ¯ZĢkŽ]ęōc(§fáGĐzן\ßBā Éš›ĻkĐâ‚ËGŌmPȈ §8,xĒI9ɖ~è˙ĪĖ˙÷ÅKūŲŋžß÷Čĸ‹.ä]Ĩjm§é˛GnŒ—´­Ų}Ģ3[ÔĖđų?)-ƒ‘QÎ&t¤s† œ*•ėiö˜Ō3€,zfąI^æö.ęm`šv˜-”Ŗˆ›žû…mų˙Úß-&Ih’G.¸dqũ+žŅ–Ú]jÔÜ+į.ARŲįŌĩ|[tßđ—^Lc1Bĩ€Įmh4NƒW°‹QĩŌ4ÉŖy&pƒ•¤žä×ĸĄ*ÜX€OJų¯Á֏yŠ$“H ˛ĩ"IXI´ƒÛÔûWģx{_]MšÜ((šŲ#ŊļõüMgʖˆwÔč jÍŊēãąÎ+;U´ĶgXŸPuŒ+ŒÍˇ&ĩ ęĖĩĀžÔl”’CU+­"ĪW”MsˇíĐŖŽAô>Õˁ e({ĄÉ¨.m‹ēĪ‹ŽpTåǝqYt8Šnĩ´gĩ–o .@HWük÷Äz††–ešį2ĀĖI#×=ĢŋÔôøu{ o0Č0CzŠķÛŠôõ/mhĄ/ ųdÜĸīĐM'‡ŧg§jŖmäoā#+Ÿ­u÷pNĀ+Ąc’6Iã:‰uĒ4šyū!ī\ÄĢļ];IP*+n$žIWe23°ŒdƒÁ'šâū(ŽË[4!Æ7\dsĪáYËáCޞ<ŨLŌI#$’sÎI˙úԑÄZŅdO—páT‚WkŠQĘŧ˜Ā\‚zVÁ´‘â,w") .y5˜Mr˛Ü†B-ÉÁB‚x9â™Ļ3I悊åAÔŌŧâņNō (|z}zÖ´ÃU†â-€2ŲnŨ‡ZĶ•ŗ'$BöÉhĨgųŽBu'˙­Yûou)|˜áv dGäķë]$V–P)—SšiOR í'ü*–]|Áj#Ķ­’ÚāŦĪŠÍ6­Ŗ×TAeá´ˇ7Ú#ā~ė6qĶŠ˙ |zœvŗk(wJxÉ⯺â7ĘŌ]Ŧ“ŠīIˇáVn5ÃH—mŒī4ų´÷tú“<^:ŊÄō7$ÔaG^}ęĮØ-¸>ߔ)É&°.|qs!a§ØF‰ÜdĶ!ˇņfĩ(ÍēU˜lČūgŠSK3Ĩ›PŠÍÕD|įãžJĘ}nîMÃÎTËp=)-<+#>u į“8 dOøVõļ‡ĻØ PŽîT`mČ'ßĸŠNÍĢ1 Øî<ųœŽėã “ėŅŽ,āšD mĀ>ĻĩĘFŦ@ĩPā1ē]6Ā XæÚŽOĖĀō\UrÆ[h [s„–ÛVūåL;zˆČ'ķĒŠŖ]+¸ļv|n,Į¨¯YW*l]§€p*YQ>-ĘÃîļĮĩÎīPŊļ}ëĖrIÂĨĶMĖȍΡĻXąÕoX ˜āVÜz uüęĨÜ5[[ģ—’8Â)#‘˜ûfŦéļsŨN5=QË>?v„`(õ¨ ?´ŪîI^gíĪđŌöJüËqķšâĶ.#ļÜņíBįæÜp9ŽÃNđōiÚ­ˇŲã`pIn˙­rvŽâyŨcHž`HęÕŌMâom‘$Č mķĄŅŌÌĖHlŽ´šĩK‡ĩF7SP„(Ž^ëRĩƒPk‹Đ|Õ8 Ô ­x™ė!‚ F]ĘNQNōƒŪšĶ jŒyĢ]yP°ÜøëžÂĨЧÔ\íl;V֟Qš‚Ækx&ī•›=?Æģ}'EžĒcļa¨ō•ˆB0=ëÁ~kJ;¨l€†H¸šzŧņ/Ėäŧ‡š¤ŠÂ Ņ)^LķmÂ>#mB}JhĄW$Ši%Ȇ?7‚ĩ;ĪÄÁbžÚ ZŦ¸ķ:|ĖG{u¯TšY\ųPE;žp*2 D'|Ėrp2M4ĩšvW9yt9íX\ /I´q€ĖN?ā W¨øvåõ õK”˛ōâa"8ŲÃgž=~ĩę˛é2ę ĩuŒt_úÕkŊNÃOcmŗĘcÆØŅ8&ß@mž]ũ˜H­üģįrwHąÛ*ôÁ?‘ÅuúÃÛkģXîf’ei>m’|Ŧ> WCõü˛‰#Ō’Ũ ŧ͂Ōē/› ßŊKMn8Éŗ‹˙…y`›Žé6€0D˜ū•xKIV!$wI•ĢĨÕuĢ=%3u( ĀŊIŽ~ëÅB+6šM6wES#mG~jy•ėØÜšØÆÔtí/O@eŽB ļBÄÕHŦ4i-^å­¤DU$‰ķŦ¸uŲüMŠ>ĸÖí”jR(ÉäįšĒž(Õ×MĶdĩR$ŲNĻQ÷Ŧ™<Ō.CĒxfHMÉŗŊXķ€ J7ožļŧ<x`Ú9ÎãŒ1î˙#Uet.fu˛x;I€ō%rš$ųĮĩíŖ-­ĒbF8 ƒ&ļ띖öܐ~xØĮ"žaéYÖ:6ÅŪâōHNÎûV‹ˇk= ՒNŽČLŽĄ“šr+:mV 9Väo9šŲ*XOÄÔ&Ô% xå[Æ3$Ää–ô_zˆKp‹ēXO/#É'ŋ=?‰Tk`˛:^ŅD÷RĘĮũZHĻ[Úš€…ŒAMÁĪëYm4žUA“n ą<÷Ĩss2ÅpŌ›xÕˇ¨?x‘IU“~BhšĒčē…Íė!gŠŨâÉQŒæ¨}i9†iÕ ЌūYŽāDš­„2ŋA[žHI7,AÎIl“šČÔåļ´ž čIyâ77ĄÅh¤ē#'ÜąŸ.‘o*~Ķ$Ė ŽN‰÷ôJūXĩi×@˛šaK]΃"0?ƒũãUõŸųV‰öF˙Lą|ąŨŋ ÎmOûE[ IĶ-$ķŸŧĖz‘č}ę%!ļßëQiÖé¤hč ÍA! žĩNÂÁÂ1ųTĪsë\ūœI’KļÆŲTĪË[–V熺2­ĨŧĻ2pX (?ʋŊ‘RŽŗâ}NŌĩ‡Rf.qō(ĻG?­kxSÃWwņîHN\æK™:~ĩŌéŸ4ëk¨îu—3¯"1Ę/×Ô×^ķ­ŧ"ĒDŖ…QFļ.ÍüGĒø:Ų,e÷.$’ō íĮŊq6Öî"Uģĩû"Œ–’N ÂŊ>W{ĩ`¨ûÁÎđ $ZtĪ7ī…<ļÕYuō9Ņ᝭Z;“$¤€IŨˇ¸+ũ.Ō×Q{Ų‰prŲ%OøWŖkXā,ҟĖ`ĄĮŨ-뚓NđüB6š,’J…w_”NIlláô %íĢLa“ŒyVžáGM^މ‘wŸ˜ŧ€v cc2JXF§Ā&ŗ›Å1,ōĮ j†9†nsŽô•îU’.Â5§˙Ī”_÷Áĸąŋá4ŋ˙žËųQO‘â7r™>@íōœdšRÛ,D[C3î=@§ .k{ˇ[´mĒH8īŠ[k9nŽ [(%Ž0N¤î‹OĸÜXŨhsØ_ĢŪ] v0Cî {cķY7]O{4—NĶ^ŗ7˜Ėrâ?Ĩië[ÛËvˆāˆņ+vvöŦąˆeŒ0G­2Ŗ3OLŋk+Č.eD–8ŲO–Ä…};û×´xLŅuj{JԈvÚōÚŦŖąīÎ3Î+Áf“ @ôĢúœú|Ņŧ.ŅČ!•ąŠ{î=Ųõ¤S‡V c Œ‚k†ņÔW-uĀ.ÖĨ~hĪ gŽ=;ÁŪ,‡VŠÖ)§‘ĖˆæîØ=¨mė’ē!ûĘNåüdÕĐnŒ]áûi¤\nĘã­?LđͤīĢ]7™<„˛‚0ŸAZ@]ÄĀ"BĐũ6°ĘĄŊœ\BÖáĀ,§z—ÃbŸ ļ&°ÖíĩK‹ˆm˛ĀBŗ†›ŽB%ŌgķT°ā“ÍRđü7qIpŌ[GG-Ŧ;ûUÍ]Äv2 ˙1R@nsS¯.ŖčpÚMÖĨnææ9EŦŦ`˙}gúW_§øŠĘō2 ĒĖŖæSÁ>âŧžūústÆ+‚ō7đ*åEA"j/2´Ė€vBØ#ęk*r˛W"í•ĢÄŗ$čK)ā€:×âdŗ¸Õ$šŲ@Ę ÂäîīM}Nh 1ČŦ‹ÜžqøÖMũúH Zš|ŒnUã?ZŨžkX‹ļzÛ]iá $ō’õ8âãÍY­`ÔŖË›`¨9Üž¸Ŧ?kŖģX_L W 6v1íô5čŗÄ% `NpOB*Úž…ĢXķ? •oGtŦČ'MŽŖ…$tރÆļO%ĩŊČ8\ėŽãĩnÁáË {–ģXÔˤ˛Ŧg døļöĨĮl‘Á`§ c֎–&ÖGŸĒĨ$10@,{+Ō­ ļĶmã ĒFKc—>ĩ䚍ë[]´qŽY”Žy­‹/k0XfâHWĶ$cōĄ+_sĐ5íīcYŽT8^ÎxVĶĘh7ÄPG¸ās^}.ĄŠkĶ!ÜäįäNØčļ3iē`‚WŪų$úč)-Šræf¤Ō.ĐwsÉÉč+"yˇ$ģAŠ%z’rķ ? ŧĒ˙ZŖ,SySīpĄ ž‚ĨŠú˜˛^ĶÆ@ÄIä×] ‹Eߎwō9'\MͰ†bäČ gĩwöP-ž‰DäAÎ9Å8ęZ“hšw e‰†9=px­+$_ŗd ĘĀž9&¨ģK=¨VVōÎG`)-õ°ĩXųb7 “‚94XĢ­^Č—”ÚG8MVų˜—žz(Ēĸéīn›(7ĪåWĐ,(ĀŽ02IäŽ)Ĩaʧ3ĐĀÕQÔÉ RĮIįôĒŗiˇ…c\møŽ[°€†e‘€ÃôŽ;Qģ)a$"Eļ‚ õĄDÍģ쎅lEž™ۂL€0ÁĪͤ~k`\‚n+ĪôOZØÛňd @Åz-…ā’Ę)LĀa¸ā÷§"ā¯ąeÄŅųk’TüŞ÷ũ)bĮ˜ÅŲIÜ:Ŋ)ą+ ėÜU‰zuĒ÷ēĨĨ”‹šEQ0IÎÂĸƗV*jp<–2JĒŽđy<Œ~ZŪ8ƒÆąÅķ‰ąę¨ÍÍîĢ팈B˛Gã§ļ1ųzĶm ŽxĄ@HPIô5ÕG᱄÷šģ• āOįŸPĩŊšžvdwëũxŽâ!$Ŗ% ‡ûŧšã|[p|ã‘ĄØ€ŽWI4MYXJJ÷<éĄkvą&æąų°ųÅO<÷M1’eIČ\áEL—6é0V\˜Ô œ“ZO§O|Š!2m$1EBØ™Ūæ!?kā.Õælđ?•Du{KEōሙ‘恒ElMĨIs8ˇÉ$ á<ŠāRØxfÖŪ!,貖ČčHĮԟ7.ÄrsnrĢöíFPLRĘYē˙įō­›} Ts(P*ä$’u<÷ÔEŽXéčc€UxéĮcWŽ…su°Ũܰˆ‘"ĄČÖ0ŋC‘ŸÃwׁ’[ؒ‚R6ųGųõ̚o‚´évŸ2Kˇ8â%ÜwPčZUĸĒĨ’<†#šääƒĮZģ 5Ŧ Ģ,Pąî=}~ŊÍG´GBÃģčÎ~XZÛ¨"[D{™y#¯¯N̰ÄÖΙf$ÔāĀéÔâļÎ֎7PáCŠqÉ?įۊŠ!•˜ fåęzŸLŅíõ}RęcI`°^Īs ‚ƒËãŽOo­FRb.ĶČ6q]!ˇL„1¨(@¯Uēļ ’FQ‰ NXæˆ×ÖĖŌx>Xš&sNÁ&*HÎLšÖŌõ„yL|˛r„ôöĒxA`'§øÔ/nĖÛO%€9čkŽŠw8šŅÜ\$Đ´BEØN ´ņŠŠ]bIF0B‚Ų }k -ώUU…É9äĮÆ*üBTĨ;ˇž+Wˆ‚Z"}“ęoD¯´‡‘öíãhŠk)‚Aå eūņnj•–Š,Ī,LˆA'Œõ˙Y 靕Ņ20T†ÎGáN5”˜8YkđÃĢXMĀDˆBŨAö¯>ŗFŗ™‘Ôcˇæā WĄj­w ˛É;Æ@v'8˙=+M‹ĻÔŽg)ní Ā=*äĢ&įk/ģ~Äļ%dĩä4R& ŅĀöŽĸÚ2ĐFÁN@íÎkœ]WI‰E­ģĮ7#(>|ū_ÔÖŔķŪmT_"%8x4œywa\ŅŦXā+pFH¨n´­ę$Ų-Á“8`*ĶėˇÛš‹’ÛԚ§yŦEfö™ŧ§"Ëėe9¤]‰ė4›˜•BĶŽ 3ŒšĶŊGhiAę3ÚšX5ëøįW0¤P@˜fGAũkĨ˛{MEÁ‚KfÛæq‘ô¨‹æE"Œ6ēē8ŽŲ ‚ °+¸‘ũ+]bžF3Ē1Ä2ŖéV"´Ts&é ˇģp ´Šävė)¤’˛‰Ëj~MZEšķTši…1œ(Jɸđ%öm/öf¯?˜Ęw$Ÿ!˙ é|A¨ę֐ tËX§*ÄŧdãéīYÖĻĨiΊ§ũ‹p%‘dÉĮaíZ'+%žup|]ĸ†yRcęĖ7Ž>´xkÆmŖ[Iö~h’C!u}­“^šš†‹2ĩŠŋĩ'i_ĒŖLŅ-aKHl!IąœžŋŌ̚+t.^ĖͰņļ‘yÆæ‰›ŒH8ˆ­¸¤ˇ“DčĮâ6ÎjœņÂ֍ÉlŒ œEŽ r2xOS°‘ĻĶoIä.vœ*K•ė5)#¯Ŋ´†áÜĸ6 !@Æ?ÍÕ맏ĶMŽžŅÄėA'ĻšŗŦxŽÕTÜÛŧ°÷s${üësI×Ŧī\BHĨÉ?­;4UĶF|QižY$üÛĐŧ¯V'ÚĒŤŨëšŊžv†&R Œkv]*Â}DßIķL@7@~•tČpyĀĮŒQqr˜šNšĻW6cÆâ¸Āö­ `—9ë€y&”\—“hfGcLq,ívĀĪ%ē kĖ‚•Ûģ3áNrzŠuޘgU’OÜG•ņÔV‡Ø’)ĖLĪÁÕMFá‹m-Ā8ĀāūIö'—Ģ0õi`°š1@$¸b~ęŒŌ‹o jzŨŌO¨NöĐļ†. {žŲ­ Kq,Ûcš8‰į刎”A,\؜"$ČO9Ąģ +ŊsV‡Hđ• –ÖØ;1 ÍģsąŽdž¯âK˜cBŒŪÄ˙žÕĩíĩäŌ%Ĩĸ\ĒļŨė:Ÿjč“NŋŽ´,J1(Ú?ÄÔ4Š^†Ÿ†Úæ(Ŗŗ˜ymę (öŽ–yŌÚY‚Ā'Š5ĀY\j÷LŌØAä,gYÎĐ? —RŗÖõ=žmËÎ;„#J—”Ŧމ¯LģŗĢœ¤8 Ŋg_KĒĩ›ŧwpg š#ßĨG“mehŖUēĘíAÚ÷Į&Ļ–ũ %D\m%v¨8ķh…{ö:Öžė,âĩiAPU¤9+œįsV•ÍüÚEŗ\ęm nŒnÁ>Ũk6ęōåĻXKËČüŋ— Íî“bĘ&—{kšwũÚέ&ŖŖ`Ĩvli¯­ęø1\5˛Ėė6Šôŧũ+¯bTdéÜ ÂđŲÔ4ų.RŲâ,øgRzەHÃ8ÜŒõ•(rG]ŲēØōũkÅv–ZÛÍåGyu,žM灐ˆ;“ũbøË_ÕžÂļN ‹ígf#Č%>§Ö–ÚSqâĢûŊN-ŅX“ QģaTûÖšYM[\y\&%)+f”`šŽ÷3ģgFú•ŽŸ§AĻDëæDƒtĒ2;~ĩČÍÕüAmcŒHØ>§š„O3ˇ—Ø=y8ŦËiåˇēiŖrŗ)Ę8ę kŲÜvąÕx\ŧ–ĩi5ÆøŌŌr#Īß|ļžO~Ú}āŗR‚Gîd&č=kđ֑ôĻŠ}3ŗĀĖ›~]Ė}MVŅüO}Ąi ke:D’ČLŒz‘ŽßãU%}†—cŨŧ4ļļSËilØŠ’f's{ąõ5Ҍw^}y_à nåĄŊyWu›Č ”ļ\7ÂŊF)"•áu–6VSjRļ—)30h6ŽæYã3I’CšägĶŌ˛eđũü“IoDX”n¤ņްāpŨ3Ķ5Č˨ë#V”G"‹`Øō };š™(õŌ!ŊŌ†‘žUYI?4ėrTũ)Ú}§ÚQ¤Ž6 EÄįhįÚˇu)‚iŽĖ›Ø(!āšâŽõ;ËšVØģČå€TUʝ'§b=%|ĩ,U†Ņ‚:U{ë8¯aT+ŠĘēņƒRÁŽŪ8ä`Î1€ Lb,ŋ3€=LV†›Ŗ CËoĄŨ&˛ŋŊÄw" ‘€Đ;`“ôč ĄŠé×vŗ´0D Aw ۞+‹Ö4æŪ.mĻyn#!˜ž7R„Ũí"$ė{f“ˇAôŖkW:eĘĄ¸hĘČqĐ×ŧé>7Đī#‰$Ö-ŒÁYžPOô5āúŨēÁ}â Ępu˙õëVâ4@RLļÆá >¸ôĨÍĨĘæ=ĪU×ėŦŦ¤œIö† JŦ#vkĘô/íø€ÜÜŧ°ÎĖFė’ āVÄąéB4vÄĘs’1œ}kÎgžJ֚æČ¸‚|Ģ“Îĩ:ŸĘ„ĨsŪtmL\ÜŊ´“Ša˜Ē_&¤Ö­ĸš›í- úšķkļëĢ4hbŒdųō6L‡Š‡Įū-š´šļŠÖí d;Ė x5TĶå•ôDĐÁiĨęâÎîmÎ…ā” ‚Ãǚ’įS͘ĩļž{)ĀiåHĪ×ŋŌŧĘöúūõRI$w@Iä{×Ca5Œ–ēųÉr0<¨ų'éPč­ÁltĪm äŪM%Ã&Fćƚ# ˛Ôåĩ‘ąlO™ŠĀ×ŖÛxzĮUŅá{iîc“{ČrĀúbšÁ—vSApĐųV°t@SÜÖąZX—ŽŦØąđ˛ŪčŅ\5Ķ#Ü(*Â?–1Ν$×Gá uä™ü=Š“ũĄh17>jŸˆ­ "Ú5Ō ÜFą€Œ÷ŽOÄöžąŊcÚãˉy.ĩvWϧWã}VmÂ×ÅÄŦDa“’™ū#^Qŗ6Ŗ <¤™#$žXúũkĶnŌ_øbķtEVâ臨īüëĘėtäII‹ģ]HáML´B–Ĩ‰LK8š*ĨĀëØUe2ę3<’cÎYņĀĒķũĸķRĮåNHĸ´ū<ÅlŠHt­{X/ecēđϝ¤fI ķŽOĨ\¸/%°9äņÅqúf§ŠY[ŧĨŗķĩ†yõ¨eÔŽuK‚ŗIˆ×¨fŽQķ7úŊ´!˜\įĸ€+=59n`‘””Ą=@ŦkÆ/(Œ Tw­8"HíH+†+Ā'Ĩg&%šXž&‘˛Å‡-Đ×ĨÄėm6ā’Cuú×”Ū°H ‘ŊՔn+Ķ|2%›G‰¤ÂādéUXŊ 3]‹{įŖ°@íYˇĶĪ;Hp‚r1Ōĩõ E[Å`™b ŗäõĒÎáFI?JŅ.ĸ{•­m¤Ą‹ŠˆuĒWzœvī"õaĀĮ5gRģtĩÄ.ˇ ŨĮZå/nbˇÛ`Í!ā‘Ō’ō3õV[Ģ’Ē ÆāyŦ`ŠŅŗ˙`N{ÖĄĶîg$Ēm Ī ŠÍA ÷‡ Í}Bæ[HT9%›95ÜxkÆQÁ§¤zŠJB‡s•Ž;XöŦ’>ՁßeĸįĻgŒPŖ}Įí-ĸ;‹ĪÍpŪUšhYŽXũãųp* XÉŠŪŧ×ŧj <`˙ëW –R' ĀWYĄø–!š0HeûÄõSŪģ JīS¸•HFģQ!T d˙Ž+2ŌxmžŅ4­ˇ(’k+YņŧMlM„'xo`ƒŌší:öKˆšIdiØåmF/•ļMIĢ؁ĸe]–ũJärHŽK[˛kĢšápy]v•l–ļ1ܡ W$÷ÁŽoU™\õ`O>œRŠ-l„–—8?KßĒʅ7…` k¤Ŋ€Ã îō폑Ļxz!u¨ŪX!99Ōˇ/, &AR§‘Äž™ëXĘInmėܞ‡5d’ËdO)c'ŋųõ­eĶUž9$b˙)'Œgüjåĩ˛’ĘTģ(ęzįÛŌ­,pĀĘá؈ą’=i $›lŽ4Duyx õ>•`ČŦĢ"Éē@ ƒ‚úßZnB9į%˜Œ˙ëĻdĸų!ĀRAŪS˛ØäŋS:HĐ äá@#Ķđ˙ ģ,‚dR–*žŊēVt“(*ąžŠ\…ëOŒĒ‘0Ņä‚k9$tĶ”ģčKpZ(ZF Pŗ’4–đN?vƒ’6ķžqM“÷ĄsV0v¸ŋúĀtĢŗ˛Ē”ČÉa.p=ø>ՓŅXé‹R•ÆË…Ĩ”î wt˙"ĢŧR­‹!|J[!&­,æu1’ÄpqķŌ¤*¯d8ÛØŒõôõëüęShÕŲŖ6-:r îËIœžŧcĩZ6ÖviB클ą uĪŊZhŠydą1̌ÕŊúÔ˛BŦ Æ€`0NâÉŖšOŠ>ÎčgĘĀ´dv‘ˇŽ?JÂJŌ†_”ËŽ˜ĪãīSÜ@đîîúŪUaōËÚ:ÅCwz‹ūu7Ė˙>´ĻF™0ôÅtAI5$pNtų\Q1{ۋ}¯åØĀ0mĨš]?SxūĖčLLfÎ?#Z˛#Ŧ1°c éœ`ĶomÅÔ6$‰€ ŽŖŊoR\ęësš>ėŧŽF#ŌįxÖ4 ŦU°rHü+~Ęū2‘ųŗ,YĀP[æcÛķ§ø›I1Eđ@Hũ€ėĨsļ3 Åô¸!*ŠäíøšäuŸbZågi<ēŒ1‹YšØáŲĸ,ĀÔ6^˜ÎŌ0p×%ŧɟéŲGŌ¤ĐÍõÅËI!xmąû¸ĪVkĨyŌ'qĮÍhšļÅ$WĩĶ,´åĖVîķ˛H71üME>˛`p>v|ãj.>ĩ=ëË,+ Ĩ˛HxÅqšŌĪ3Z[KŒ$—=<zÎUč;Íž¯eÜ_^Náævf_œ¯ åMĸbĮßë×$H-â”ōFæ\*ũjŊĨũÛ‰ĻšŽ0ų3…úVâéQmĖč\Œ šĀ\}?:’gļēĩX ØĀđ2{Ņ{- ˛žĸiZfĻ“(ģŽIÁ>`­ ûí1­w_‘*0ÂB OōŦš!„3¸²ĸˇ—PU¸ EPØf?ĨBmŗF’GIĨOmlÅũŸhŧ  ĀûöŽ–'ĻōÍâÍ>2cWúãŽ+Ž[Y˜í•i™72ˇŨũŦqVôë94øÚk‹ÂŒäŖ–#°ü6BZ<Æiȉ`TķÆëJ֊6Ŧˇa؝ĒÛ]à Œ¤f3ķāļ=OĨ8^Zęvŗ,#|g*%<}Ŋ‡­-PhĮĘÖ6˜‘Ũ7ÃI¨­ĘųĸÜÆĢ’¤u5Z;;%“É*nd^V2r {žŸ…^iDp4ˇ’Ä‘(ÆÕāĨ4&s“ø…Ūy#ļ°(W ČęO"ŗÆŖognĶß"‰ä'ːE†úg°Šo'ĩ7 Š^2Am“ÛķŽ ÅúõÖĨ eŗd§å8ã“ëZZۙü[ĢāĮueqmöėãËFō! 2ž„×đŦ¯øž˙Nˆļ™kz÷lpŽb;#ãükŅ§=Ļ‘ĒÛIĻ^\K2ŒĒ‘ã;‹o_­aŖ)-ÁÃ/TsøWBn$Ôe6šL ͝”ņ‰3ŋ.ĘĮÉÉĮžbKe6œZ¨^+˜Ī˝Á ĶæWĩĘMYž…á7š×4š,-fˇŠ{xƒAjĐė:—ãæÍz7„5y›Mxuqoi4OĩPČ Ÿ\xŋ:ų˙MÕîôÛÄģ´¸h%SÁCŠõ øėkw‹§ę֐M& "…aõ¤ŌĩĐmsÔ^˙OžomÁÁÆePkĪF¤/oÔH˙gˇŦØ$ņËÕÜÁcg,bæŪŌ ˙ *˛Ž|9g5Ο,wKÆä$į͚ÍÅ0w­ëmĨKäßZ3œQ2œķߚĪđÄz=ģ‹ģígNkļ$ĸ ”ų?^ĩū ĩÔâ ō¨'ddcķ5NûÁ:=ĸķ9ER$’GÁÛräZ˛UÎņ|Aĸƒ„Õl3īp„˙:ÁÕuŖöása} ąĒ•-‰ä3Ut˙ÃäÄņßĘ`t ˆ+ū˙˙Z›¤Ųé ŧ?,Dã ëÍQļå;›Zg‰-/TyĘÖŌōĒOųõ̎:žžĘŦڌĘâUČŽĪm˜ŌK(‚ŲÍWûm”ÛZ7WōģqøāĶĐ\Úĩ}ĨĨËÛáŠHÉe>hąž=ķ^zĶ]ąO-˛ĒųŨˇúúŠčŽ'ŠV+QˇY—‰mœl*PrIü:}(´[3ŊÎŪÚĪDm.;BöĄAfFPwzį×5ĮŧAnä *Á$00aˇ5vÛFÔ~ĖZ;wu$įiÉžõ2xzh/Ķ+Úk āĶļŖŨlufĒo´5Ž'`N2}kŠÔÚåÉgČG)æ/*ĮØô5Šw$ķĀöĐ|­Œo/Œ`ėŊˇi`’t1–2‘Œã<ĶåMÜv¸iZ|×÷eÚĘrėÃ>ĩčZŒ:e°†#<3‚ÕÃé:Ũ­­épĘîÜ2¯ņ­ųĐÆ'î?ŦÚą\×!ņNŦ.4Wōq)P¤’+;QsqĒéļ°€ÆŪ3#/`pMĢé†ËOŒ[šJ†L €>Ũb\É;…ŠŪÕĀ$õ‹“ëæ.†NŸoq{ŠŪH#ÍĮ< Wc§øRįKšÜ’¨S\¯‡u ŧķœEĐÜŗĘįĻ3]˙ö•Ŗ&æ'eûÃxųjâŦÁ%rČō­â!6Ŧj3ģîToîÂB$ķwDpB§Fü}*ÜSGq’'WŽ2;Öuũˆŧd"FP!qÆkNƒoą…˙ ˙ŸXŋZ)áķú?īŠ*->ÆZœÖĄ¯­äĖĶOÄėŒäûVt“Z$&HŪE¸Æ0N+"ÚĘfģIÚ2"$áČšéu _ÅĄ6 Z(P(`§–Á˙=+ĢØ¨üL˙Ëc ææâ$ÎöŒā­‡šŦ6ēÄâpA–2C“šįāŗyĸ’R˛8$(y3]N•ŖYXÜ[ĖŦ^brN­QV°F÷:øz |Å}i(ķŖS•īã\dž Ô`ԗQŗ°ŠhúČä|1>Ų­ëŨE´‹€mä1Ư†Œ<ÕÛŋ<6ŅÜZF%(lšī\üŠ÷4æ]NQÖÖîŪkyė…ģœĢÆS}+E0Cs.Ÿ}&0vŋCŠėNĢ{¨j,ÖjHå‚j]gJŅī\mXo\|¤ûz…{ Ŋ _lŠ1ã<Ōąļ<ŗ– Íy1ŪÄņÎNrx5čgF{{xæŽë2g‹ÃĪO^=+Î5xVĪY˜[îōwŒx$U4öĄÖÅ{kƁŒ2‡ xšˇwoæZīpįĩT¸Q<†hÎIoj7ŨŲ$^`]ŽĪ\QbÛZ2;’Hˆcãv3Šš;›­#Q2ÆŲ#œž„UiížÅŖ}Ā÷xŠJĪx¤Ė›ßļŪ1øSZ÷čwÚ‹n­nâģŠÖįUvĀo§ŊzŨŧ°jöAˉ`™Ø~éĩ|įa}%ŧ^^p÷ŋĨzÃ˙F‘ 6ívÍē O=ĮãNÖ&:Ÿid––ŅÃ;!@Früig–Öß"Iې23M’UØ žXœdœYڍ­ŗŧ’(yb8ŠĩÍ’,ȝ—T‹mQŽ9¯ļŋû.Ŗ{lËō ›a<ĻģÅōéúöļķ še;]ų`žžãúג5˲rī‘–=MZC&ų•Îļ[‘rŽ‘‚Ž2;Vn•lé3I2XÎAnRūØ0°6ņ‚@'inĩ)oI ¸Āč)Y’››—ģSy äū!x­Õd'ŠŦ{IÔ(bî:ãšÕļC0IĘ/B{Ôļ3WOĩŨ ]J=UOZ|čō*1’rjͤąGmäĖvČBž‹›Øĸ‡b1w#%G>ĩ…I[P2§… æ6XA=ĢšđnĒ.t…ļ't‘ädŨŗ^túkiĸ0ō1Ī oÆĩžŪŧב¸`˘QÔdfǜ´4ĻŽėzŒņÆ&DRJ”Ī''Ŋb\H–÷„;…Läg¨ĢĢ(ąŲ{¯Öą¯nĸkØÜįŒœÖéjjÚīfÎĖ}Ģ›}ĸfq( šPRkfw‘f”( jĨƒN#æ$áy5\ļ"ė­ŗ´3ąãŋj lÚi‚ėbÍÛny¯GĶ<%ƒÎģ °5lÛiļēpc´jJ›įüúRrHÜķ›/jwĄ‰P„į #`š¯{áíGM`&ŒÄ*r1^Ēĸęã$§”8āđj;ˆāķ’9×{Œg*zš:Z`4Įˇ‡<ˇ|Õ(ā"f_ēdäw¯KÕlĄÜÂŲBŗ HÎ:Ö!đ´H¤Čå¤8lžžiķ÷!ÃS‘(ČÍË;ÖĨ•ģAj6ųK}qOÕ4ÛŎyGjŧŽ-ˆf¸$NA­#6‰qąĐiˇúömĖ{D‘¨ ŽĮg5“ĢE>ČØžd؜7}?Æ´4ûã­ÄEŖ`ņÁąũUÖ¯ãtc' úĒjNîæIĸŸ‡E͔ízžÜĢx5Õ[ŪÛ] ˜˜’rDœ ĨáøÖ-$“•lą'Ü͚UĀæŽOōŽe.}Îģrj™r[mģ— äƨĘí *Ėčx'hät˙?­2K™PƒȌ/*I˛ä¸*Ĕ‚Ų.§9Ļōn=tšFˍ¤9eū.§B?úôö%˜\“€O;rũjģŨ‡b™l3!G§?­N\Ŧŋģv*ÜqŒņTŌ3Rnö0.ėãA*ČãĀ(z–ŧJ¤Æ ­ÕB:•ÎåUĪ­nj‰)€`m0xn‚˛íšFbg%‰Ž˜Jņ8gYXÍģBŗ)"‚ ŒVaž.ĒË,†e `œd~5r[yg G„,ƒ}? `€ZĢ<Öę\ÜäqUļfŅąd§WĶ䂿X˛T8'ÚšGŌŌĘđÅ".čÛ#ŠéÂÎtYaų ­‚+WKûIĸ¸˜››T Hā~đ'ûâŗ”bĨr­î›ÚtĨ‘H ÄpãŌ´ à LlŖ$d t>æšVņE•œ1­Ŗ‚¤X š‚ķY–ō1?’æYAå=ŗęjfėėŒÔÍ-WU3K%ĨŦŋpížu8 u}ëõmī­ŧ‹xvˆōž s÷>%†7&5ā¨ĪŪ­Yëis16Θ^Xž+É­ZĐoaÆ b´ōî]˜’p UD°yÆČI āšŌŌúoô{Ŗæ XíÖØ/úXÉä‚ŲɨöŌZ!(ĢŨG…%[9^Õ0h8Á¤×įkMY¤ûãuäcšĪđú8ēk˜ä¨1“ŽĻŠx›YõˇQĖjĸ5=žõĒ”šo-Ëi5dĮÜjqÜ2Į ŲzÆ*Ōj72ÚGfm­œ.H’O™ˆįéüëÚúyĻ–ÜÚĸŧc,$ĐŌ_;‘cŖž):ŠnėˆJŪfĩĘéĶ1ŽúPĀ(0ĀūÖMƟeƒ§ŪMo <`œf˜4Ļ,^K†,~bHÅtÎÕL’íÎE*uc'ŖĸŒø5Ŋj͑%0^ĮžšÃū}ĢfÚū' ) ŦŲ kœÖĖŗĘp#0ČČ=8Ž“AŅŦĩģŽÂ$2ÆÜ†˙<Ö땂ō"šœĘH|pr8Á5ú]ЅĨŽb XŒc>ÕØÛčVv3!•熓’)—ōŦ01?) ŊI5ĸžē‡sÉՖ ¤jP1ųˆâģ;i,ė,‹Æč‘•N~fæ¸mRcmy"'Í37 œÔ0C2ƒ$îĜ ņZËRąŋ{­Ëpūeģ2ĄPtĪ֒=Beĩ ‰Ž‰ųQ{Ĩgœ4Ģm Ļ|(UlŒūÛiMŽ—0Ļed‡úT7bĸģ™:f{sto5‰ .ÜyHp1ÅtĨôë” P‹€äįØzûÖN§¯Gn˙fļ $Žq“ČÍę:äV1¤“FeēeÄQĸ¤dķųúTYÜĶ™[MÍŊ_ÄöVÎc… M&7ápĮ§_Jnž.uE pN^cʏĮŋáUôMw:ęšĸŒ‡pˇv’ÍmdŠĮ†#ĮāžkhˆqžŦĨiŖZYÄYˆždb0d?íOjĩ Í{˜ímă Hà ßADŠ3ō˛0YIá>•\jm=Ķ[XĻįĀÜį•“lm$‘rKÛm2ŨaTfgā'ņ\׉5‹}:ŨŽīę¯`TuԇæoAw-Úŧúœî–$ų‚3ķk™ÕnĩI$Ũa$Áā‘[ēŽĸnŦŌĘŌÕĖ€&Fßjîū|8[xcÕõ¸ HpŅBFBûˇøR›.ÆG„žĪĢØhk3ÉoÃ(xÃ×'ĨMŠøCYđŦâĶJžyôûĄ ]Ē<ĔĄU;ēŒ§ ö¯f$,x`‚IĀ™-ã\Ė ´@áOĪ!á@Ŧš›fŽ)#Í´DúŲûEŌÄp¨Ü!=sUuÉ×[´H% a•wDŦ˜ŪģV&wkh’3Ŧ°_ÚĢĪŖHŅIw2Fh<?ĪjD•’#•ŗĮĩ?´3E ē;d’ÛFEMžöV¯ąšû¸r>ĩëē`dĶoDÆncRĘāHôŽugiŪE˜)p9MŊk%>€Õ.KI4į‹Pļm’+îByŠôYŸEÕl­äģŽÕĐ4~gUS.4 MNFGėėۘmŲĨŋ‘qŠÉäė;Õ;ß[Eaļ°ŧË+ĸ'G͊đģë›Ŋ_PsûÉv–fÉ>æŊĢ@͎höÚ¨xT2!ä:JIé`Lé%uKRd^q͍ö¯?‚(.5]oPŋ}Ņې#MÛW!yãšĨņWŒ[MÔbŽ)Œō…ÉĪ÷Ŋũ…ei0jŪ‘xm &K™ƒ/ ¤÷'úVrŒˇ2fΔ˙cđ¨Š)RÁ‡VcžĩČiy{â āļ–HĐČZgĶ?Ė× h>—NĩŽ+ŲūĐNЧÚļeđöš÷‹såle"?”1÷õŖ•ĻØ5r="ú–cvûlÄa[<đjŸˆ5HŦc2Iuå1B@ÍaxĢÅæ;ņĸiūøq$€acŪõÂëîąÚMæ^)›‘´žæ5´U‘—DjÂee˙?īųŅ^e…ĸ´æ'“Ė÷Û Účæ;Ŋ^åeuP#„pƒč;ŸzŠâO…Rw2 q™€õ"Šë~+81:ėŽ€ųSéXV–-æ›Ë˜KČIb_+Eõ‘.]Å֘ßDÎĐy–.€Œœs§ZŠķ[Š}–ÍžL*Ģö\VF­­Éq1X÷,`men Ėļ‰î¯D_7$ŖŪ›JÖ™×]ŖŪ­!Ūn V 8à tüĢ;L¸š@ÂdÅ aO$˙ŗ]ĢéqÛhđ<Š‘Ž: æ/æUŊuļÜîNT”Îû"ŗzė=Žĸ Ë;8wĮ‰ŒyCīÆšÍXĪ;ĩČí˛IÛËGøUEÔŽ˜ģ[ŧ A“åĀŽž;K]9ƒ]ē6,`Öļf8ļžQ8†Ņˆā(įáZž(ĐŦĮ†™‹íĄŖÛ÷‹“ÛÔVåæĢĨ[;&Ÿm,&Қåį7ú”‘ÜI˛’~MŖ ŋJ.–„õ8mĨ´”‰aÎ6°ÁĨ–FķĸLŽrWŽ?úÕé_đj^!‘MŨČTPW÷Ę)ü9?h éÚlžužP0 Ž RËDPŪi7?:“€}{U+;‰ŦfōÎA+ģÔ|;´Ģ1UD9%ŽMfÛøfkËĄåĀ\r@<)Å NÚö„*Ũƒ8%˜äŌi÷—q/î‹ üÃé]ĶølCa'žéj„ŦMÉjâö6ôU<Žõ0Hå99U SORe FRöWQž§œã’0+˜ļ0ąē€¨ŊęWÔíÛlk#LųũĐ:w?áQÍ< ō"O0õOæqIFL/ poŖXхųÉā¨â§fmŠÛ”Œ+ž’ÚæëqI&3č¸?Nß­Wjq†ŽKiˆc€IÜ÷įŠ|ļÉŊMéõxŖV‰$‚IōĶ#4Z_Gv!…gp[@ƒ ˙ęŠ!ŌZãO’"å3ģč~•n+#Dežō  sĮĨg8ôFÔꡚb8b‹‚ûJz`vŠÖk5 #\"•ČꠓūEE •ĻâdŠiKI#=ęq”¤b@ĀųÆ üëLęUPû<ŽËÄqUįŧŠK…íŽOšëĶŊ^ŠÁī–.p€}xÍO-”2˛3ÂĒ@ÜÉÅ B"sŠ"%ģ…bĮÛŒā(öįĨYK˜ä“"ôH8ÆHīnj9Ę(Aĩ\ ã$gb(Ũ€%Đ ;H#öŸZQo œ†ŧ°O#HĶ.•ÜW G–cž;ĸˆĀōķÉ=+ H–ß`Uv“ËÜî wūž•GV€–3Ē}āÚŲūuŲAëfÎjÚė1n|€QÁŦëøngKk1'œjymUJæ4Æ01Ā*;…xā$ĻpØÚ9Χųŗ˛0°Ëe쎑\ˇ æ­Ęō;oIKiWxųsŒÕxœ2„27qŒô­+9Kf.@ €KzTŪîĖ[lr2øzĮE¸Xų°ž7' ƒŪ´ 6pBŅ´0˜[— Ŗi5sZOfm၌Öŋ8 ŧ9'ük’žŋ† G–g Š1‚zŌåļæmÛcœņžceĢĄĶ™|™Ķ~ĀrŋÂŗ´‰gyQÅŊG,ĀķŠĘģŊk™žCČf$îûUÍ0ÎÄÅ d!Hę'°õ;[M9UwČĖŌK“°qÚļlŧ;-ÃlC’p=Í3ÃúEíúG2-ē}ų˜āąôÍvāGĨ@bļˆŧ‡’@É'Ūš97vô,ĖÔV×F°E"@¤;ŸZæŅŗËœ°Ī=…oëp\^@Ĩá;ƒļ0+ûËwrāNĪ7 š°œļZ B”n.ĸ! N€Ģ88kuĸ !G™˜r~ƒŊAc¤L—[4PW,œĀV‘´ .Žå3L ÉĐoJ$Ŗīė5ž†ŽîLkim$@ô’n ~˜Ǎ&¸*T|ųn+VT—Tēi Igf8,[ϧ—E˛ŌíZâũÃŗd„‚iAīmâUģ™W7â`…î]Wŗ€?—FŸPĶõ8ŽŧÔBŲ0šPpzúŌĪŠÚÅohŦO Å\ąĶĩ=^5ØÚ[î2Įč;}M$ësû‹īJĮfž%‚(ę'ËĀÎā2NŨEbkZí­āßlėT‚@˜ī×ĨekPéšD ’\ہķŊŠĀ´ē—P2D$De¸ ë]ą’ÄDŽĐÄŅÍíÆĄ%ÆÕ'+‘ĀéN‚ Ą2˜ĐȨÃ+ˇ ˙õŠžaƒuą•$-Æõ9Søô­ 9î<,ÜĸrÁÂÕĒÉ>S>^ŦM>)´I¯Ļx^ ĒÃĮ¯Šĩ¯Ėņ-ĩŒx'ī;YwēW(jW I;cČÅ:ĶÃúk+IĄ!‘IaŠlŽŅV#ĩrĪ7œāÚ7N+IŅĄŊÔ ¸šˇÜm`TdrŸ›ūUJ ”ĒTŠÜ_v˜Ä ĩY'˙dÜāËéU s$W2EĪx­t™MĨ´fk’2Jō#úûĶ|=qiĢŦ]ܗ¸‘[v˙ųgƒÛŌ°üGeecaÚ4eÚ@>wÜ@ÁõŽ*ãQģ"ß÷Ø ˛ŠąmģŽĢâí!ļrąōâgfĪ|vŽēŪ{ č1É;r.Òî{Zņģ„œĢÉ#•sé“SĨŪŠĒ$QŨŨ;ÅÄ^aĀĢäēHžkj7ÅzėúåûM6āNvŽxUė)4 ōūå-­ 2M.:ę{Vƅá ĩ ņq¨ŖˆAP|ĨĮã^šf–&š°Âhō‚(bŨ)>ŖŽ}yã֔Ϫ°ã!žđU‡â%ŋeēĸûWJ'6Ё3É8Ā5A5ŽÕ%–Q˜ō@öJĪ{˜'žķnî¤e)\+•Í7Ģ:Z"ëÜŨkHŪ?"HgqÉŠscĻÛ- bN6í,M1§šuŨ, Į8.GôĒÍ=ĨŧL–Á ‚Č[,GÖĻĨHÅn(ÅībœˇMlÄGōÉ N~Ŋ:žëXˇƒM’Y•Cˇiį&ŗnŽá7jcpį$¨Ų]ü˅ŒŽ%°:ä…Y'ÜU*_Eąqy;ĪæYå8Ø;sYŗŨKę÷*ÆŌ;ĢR˙QВ‹m>/´]H¸$3CÁûŲū\×+ws,3œÅ$­ˇ?7į]´"ę+ĩcžNÅĢí}ĐŗD$n “ÚģÍLĩÕŧ#‘QžPX¸į ^]$(I,0pp0që]Į‡ĸÔ4Ũ3Ë3(h¤%—9kwN YdīŠÉęēāšâ6Ęž6,ŒFĮB>ĩ„ãMd}@%ĘšY#a’yí^“§mĢąŠk|Īū.3˙ÖǞxjáJ\y)p*ņŽOÖšũÕžÆš>ŋaÕ–Ąo•‘ļÃ9=2ū5ŠĻ$ĐĻ#ے7m+ū}Ēâézŧ2Û%Ų*Ā…-É'Ö˛“NÕt2–ŒD¸lŖ§9˙õTƝ— ™/‹Ļ0ØĀ@ Œƒëšá%ilîˇÄ—/ uēĩ‘ÕšeF*CoqœÖÔūGŌĘ%Ŧ“Į;W<HĮ8Ģr‹÷^Į?Ļø§TĩąŽÖÎEō˛qš7žĀV;iŖ_4ĻŨČf-’6ƒŸ­t> ŅÆîyī-î!žŒ‘ ;I/ģp8€w>ĩÔMĻŗîûIHXœˆ—–üiNŖ‹Đģučqv=ūā! c’Ŧrŋ\W]mĸ4kĸđ‹•}pTzg$~uŖఈ,îà ō€š$Ķ y$™RŲFßÅ ÛÖ3œßÂËM›6 ~Čcžu•ÆAp!U’‡UŠâĪũ6MŸ•ũÖ­ŖBn&—8‰‡}Š%­ØˇŒ´ŽW#ĘŽ8§ŗíqģ#¯û*…äÚ0 =*”礎ņ_’‹Ā į+\}ĖĶČŲ}*îPH;¤B Ô‘G¯Û$‹uÁ;KđĢe'×Btššâđąi1\FŖ1HcÔ\ŲH¯bX÷’d჊]GSÔ– BdhØn*0ZOļÆ3sö ķIÄĮÉ*ÔnLõÔĘŋq¤ÚĒ[Îy$V}•ēkĢĄ>eđGŠ­Ëŗ§ÜZäŠI 9\!š¯s–éa.0 .Â1üŗVĶ1ą‹s~ú…҆Ú4E‚@ĮۛÖ[al@bŽ*õ͕ĩģ7Ø|ß$ŽKM ͌đ*ž‘§ÖŖ–í‹@˛Œä}āqũ*^ž…#ˇđG…Ŗŗļ]RøfWŽ2ŋŠū•ˇŦę žÚ8¤$€rkĄ™T(<ƒÜŠŖĢęÖ4 5䊎@?yŌ¤Õ­;Nđ<7ŋoÕ]ĨqĖpg!~ĩˇgŦH/cŗĶ"ŠhÐåpc'ŽųŽg_ņŒRé $RDŠvFĖÄú˙:Ąāiz–­öVDŪVB{Jė Åöd6ô+…XÛ,ų⸝Ņį7úeØ$ÁqŊ×'yˇ+NÍ܋ŽÅEŗ–öedƒ;O$rwđŲpˇe¸ Äe˜úVÜVļ“EŸpĄ˜Ë.<ŋs^á‹G‹JÅŧƆG,ũn%ĒŠ8¨ûģ„lОÚÚe0Ė€¨āŠč}Ģ&å´Ũ]ŌŨT„É 72¯ãŌŽ\Ū”ŽQ -$Ë!L ÜGŊW—G2j^ÜȰ#Ļ&Š^ĢišŖ×c–ŋņĶÛŠXírĖ æ•"Ô|Mc‹xĀŨ$Ÿ*ĨmĪoá­:GœXyŦrÁĖĶ5Šøĸîâ&†Â)ĄDĸĨą ÛrŪáKMEšÔoE˘ &2?/ëW_Uá1éöČâ2Aō×W#ŊÍ帞ōåÜd[€G§Šú ét-;Ry$Xm Vˤ mđĻāŖ¸“rŅ –¨LŌÍzđ*á™cpâĻļķæYEĨ´rŖVGā zw­›}ĶHfģģžc(Īʍ€*ĩΉlā‘mėí›y9ČMĮ?AYÉ]éąKMĖÉtˆceģ՟pSžŠ&ąmnĻ;ktÜxVŊëËĖæÚ s‡ĪáMŸÂPųdG13m˙XxÔØzžq}ŠÜ]K%´¯‰ĸ=c?Jįf‘-îL›â”‚}Öö¯§<ڜđîu’Ũ°d#95GėW3L Ô#ûDō]ČĄÎФį8&…fiX3 ĸ`žsÉį5p ˇVUaœā1šËŅ -w!$°îĮ5ŧ–ÁĻØĀõ ‘YÉŖh"”6îũķ ĒrO\Ö’Ā ;b”Įļ& Ā :Ô™ŨhIœXĪSĻ !LŽ!VLŗ‘ļO4Ũ5eIŽ\•Q8Æ}~´ä´2L.dšš%bNŨĶ˙Պ[ؚĘŅ`„´židķFHŽŊ€Î*Ņ“ĐÅÔoZé\˛œ…uägųâąÄĻkIVBŲP@Č­áqöekrČdtqüĢė„“ÍE yƒīĩq1’ļŖ§ōž…ˇųyí\HŊ6Z҉Ė` n3]ĨęCį)`|ļ9$râ¸}NÖ)ĩčar…I$î8ĨZëqok2ø‚C!ŠŲ|Æ8šmÅũķ¸IdX8 AúUxŦ…ŊÁûMŧ‚%ÎÉŖTÔˇĪl‹¸¸rpxäĶ"øˆ”˜Ų`ēš@×ÚĢ‹wQ´Æ6€}ÅBbŌ!Íŧ“O7LŽ@üj´ˇwDcWŲd•ÆsRZč—ŗÄ$Ž‚>q(}ĄŋYJĸNŅ<¤Inļ<§$”žĸēŨ+J›ĘŨ”˜`GéT4íĸŒ\Îūd‘˛†ˆ„úõŽÎÜڋlÚŖG€ įŨÍJ”“ÜŌúȆ# –‹9*å°>ŸÔÔ3…p ˆĶ˙õ…_ž§…cvyFâ>•–tī*đyRrI!Č#ß?Z=nmv–ˆ‡HģhexbËÆŒĻMj(fFPŒq´`œžũúÖQōō`cÛ.J¨ ´ ÷&ŽŊ‹ÛĒÉ÷ÂüÅOAŒŋZŠ$Ȅ¤ļDĖīh!lčXä"=čČI™r[×üh:l¨Į|Ā“†L’SO´ĐílįŒēī9\ˇ8Į^ĩ-™ŋ=ĐÄEŽ!j¨[ :f–T}ۄŠvF_ƒœ{Չtč^éÄ #!žözŽ=ĒSĻZĪ*Æ7ŨË —÷“*¤đFŌą RÁ˛2GųäŌ‹Æ‡—o,ĖCģFŪ~ĩ|ÚXÛäAoc“ŧ0#ņŌ¤;b–@ŠĘĨƒЀGų8Ļ´ÜoQ8‰RxÚ2ę#€cü‡ķ§Ü¤“Áöc¸ųˆ!2Wúu"’Ō̌x N@˙áNIļ‡g|n~ØÆáĮ5j}EÉĨŽUE`q*ąŪŠįG)÷läļ§ę2­ļĻÁ°Ūn p}˙­S7nų ė\–%ē ęœĶŗ9]Ú&ōĐãÍB¤ ۏŸëQũ­í&`ŨoŨ€ä}i“,Ē‚\Gr:T‘ē02ā”ŽMgĖ÷)˛×Y‰Sŧg#ū•á>-y×X’¸„c@09˙õW¯ÜŲ}’nŸÂ Á9ŠūĩĀx¯H’ū(Ͳn’68+fų‘Œ•ŽÃO}Bū+HØ!9cØW°xSÂvz1,’˛ÉĐũ+ƒŅ4?ąŪGwsp‘„NŸ‰ū•ĐÉã[íCPˇ°ą`Cƙ ôõ5˛Ôžmt=}^ÂÄD€9ûąÆšcôĨE&ĩ0´ŦĻ$ŸŪĖļŌĨHD¨›$lƒ#üÎjĖze”,&šŨs7ÉȇAYÅJ^HĢ÷2š÷U×\ 5ō­ųũá\W-ü?ooļ[ɚyŋŧyĨŊÖcˇQ$T 2qíTD÷wlÆCä@:s#éCqKQ_ąr}^ÖĮũŅIH=ėU;k)ĩ6ûNĸZL p S—ėļ0ų™ERy$äškę3ÜDRŅ<€T1Į_ ŦdÛZlTn[¸Öm4¨Å”|ąĒķŽÕ…4:ˆ.L€4P…Čf8öĄ•Ÿ1ɞāÍ$œšš6ŖoenŜčMbšOB„Ķ4+4 eQ, ōōsTĩĪCnÍ´Ä…Č9ÁãĨ$–ŽļŖ{Kbrūņü*üz6“ĄØKw$qKdų˜˙ABßŪc8û=#T×.ŒĢ$rcsHp÷­ûŊ#EĐ"ŒkmæHŋ*/ŨīÛĶëZ°øˇM¸ļŲ÷0Á+/˰U;ŖcŠLŗ_jļŌ§O( Æ´“[4Úh`-Ũ–­lÖë%Ē@FIž¸íT›ÃöļäI ųādķ0:é¯4Ī ´#‚ØH3ˇd¸cųᆀŊ¸r+ESvŒŦ…{‹mĻX]nķÍ ô+ær*[ŊlâX–ÜÜÜËÄ@NF3ŸĨF<(ĘKĘæ!Œ†’kRßCžZjˇ1¸$žAŽĒ0Ö÷¸4ŠøWS6ą#`’N0kīHÔāԅŗÛˆÉįh @īšî@ņpíKûgĪņ4X5–ÖڂÃ(žņe‘ä{€ŨņõŽčßäeĄŽövvHĸb˛Ė@8QōÎĒK§$:Ć)â’3€Žŧ“3ĮĩKwĻ^\Ŧā탄NXÔÚ~Œút1ĮzŽ’3rąájģ+“ĢV)ĪĻŨ_Čļz|fyË|íˇ õĪA]Ž‘áK]Ū)nSí\mîŠūĩkLÛ)M?O0Ā͖žCšØ}?úõ¸­<ō.÷Ž$Qōǜ°>æĸu5ĐŌ0î/Ų%3 ĄˇqĪnƒüio--dˇ2ƒŠŽZ“ŧM"Ô]Ënœ.‘ęWîŠ}øüęĢ^2[$ō_G#‚pĨ6’=ë}fÉTųĪ1ãx\“ūLęÍ+6ĶLGļŽYJOD¯ęi,D—ĀŦtéĒΈ’"3’Ş1K-ɚ=˛\l`Žp3\ĖLãŠm×lJ ĘĶņ¨d°ŧÁ‘Ęį(ķą\ĨCŖwyN¤æ­&ijēÔļqĮ ŒhėĮ ÄgŽëŠë Šd•CíXĄ^ }$ũk¤đī†oĩ…2\–¸Ā#€k˛x,<5j‘ØZĮ-ː n Šõü…uŅĄk˙gcžĐ4DŅíĶPÔáH[÷vÃæ ûûÕ_56’âE„ŧkˆŅ˜ĒĮR:ŅŽø‚XXƒ*Īv~âš`ZYyķ5Ū§9‘ÎNÂØ×gŗ”Ûûˆr[!l­¯æüAˆ””#RŪų矝NÕzËÄ y4@š†HŸk•Á‘†z{{žĩÎjˇéx@WB€ƒA!õ>ŪÕoÃ"[b)…y`9ãÅ7šfæîk[øŽÃä2ä‚p Wō­KxĩyLŅ(+°g=GĶüiĶh íÄōm”í+- )ÁīßŪ‘Ä–7ŅAQpT”€+O[XąkQŌaĶŦaŊŗlOĄˆc‡ āTgkģë¤i.FvˇņoūŊ]{Iždēŋ› }ėœ(ŠĻ´¸ž”ígĩ8ððö‡šŦ×BõfUŊÄvė-ĄP}ķՍlZ\Ü´3G}–Aw<ąĮ§ĨT€ŲØß4–Æy›!€ËąĨ6ˇōÉx˙fSˇĢgŌ•’@´ÔrŨÛB˛ČŽcg8.˙4’Ŧ¯u$؍dPŲä9ūĩYŸN‹OŒŨ@ãÎۜģrĪĨU]RyDh°€Ė@Y *•ˇĻĩ–—˜$š‘F>bŌŠŌ‡X°ļŧ1é°ŊÜÄ`˛ũŅøž?*Å:sM‡ģš2ü á*mú}„Ē ”\ 6:Tš¤öši´n´Wڄ€ŨĪļ.†(ÆįÖ§‹M°ŗf˜$Qą\4Œpk‘š–ęæq%—į%ÉĀú⛲y¤cwr.ä,‡ōīOšëŪ)>įI.ŗZtA#|€ûˇJb­õÜ?鎉ŒlpqõëXë|R!ˆ’5Ÿ”XRęZġâ­čZcęK$ˇ2åōĐÄĀ4ąYų™œD9rk Ō<'utÉ w‚:I Û¸{õ/RŦbˆŽ™„圐8ezSMŗO ’Uw<’s’kŌ đ$7,hĖ˞e'­t:?€´Ë<ЉXäRŌ;–•ÎDđ¯ĢĒšI-­Čy ú ô]áö›ĸ\Gs“=ʏŊ( éXÛUF̀)R­ģ8 ƒÖĨͲÔR-ėŨOƊ<ąīųŅSr´<¯ÃúÚŨ›ÛŠÕQ!•Ŗ=+—ÖîŪĨÄ*Â;ĩ ÄyŠŧ׏ĒÁ °‘ÚBäōķŸÂĩ5ß ęĪŧļöŦ÷0mąõ5Ôä›ÔæQv+ 2!ļæā´‡x"%=ší]˙…ŽĨŠy"n!*(čjČŌ<=wxRâ[_˛Į€\Hy'ĶsXģ‡LXĄą*­Ų‡ šnŌ÷P+­YŲGP3ȈģncŽõVæKe” #ß!įwX÷ˇ˛Üų͈ŲA*˙ëÖĩĩĩĩä0Ü´Žã;•G>õĪĘŌģ6RžˆÍÔkØŪKl°ųJāTíŧ!E2¤`ō@a]‚!įb„S×~ F “ßĐÔķöŗOs-KŌLÖŌĪ!8—qĪĶĩI<šūča„Û)9nkVXĀËJĖ@ėk>îũá‹Đ`•'/Æ:ŅvÁ¤ˆ`đü…ŽåiXœ€iPišZmo xî95˜&Ôī)}ĘĀnH‡#­_ƒF/ ķ#1ģrrrhwęÉZėˆe×á–7ō՜М`fŗüû›ˆe™ĨXPdmą­Xt {`ĸ2à Iî$Õ¨ô{DåŖķ̜ÔŨôV÷8í2ÂÅ$q o<Īķ?6OŊIŽčō]ؑ†ąįˆ$¤@Æp{SkRĶL‘Y¤› ˜â¯Ė‘ZFŽö8ųJĄl°/Ā,Ŧe~Xār­;ˇ;OxšÛNˇ“NŊ;!‘‹G*Œ…ojԟÄví3-ē<°Šę˙.~•ÃXĀ|ā"đ sÍ^7heÛš¤íĀ&šWa+n™'ښYÖ3sŒŠÛ‚Æ)$I$@FHÉĄ hop­ssn"ŒąIĪŅK-Ē;7¨ā Ņé $=§!Žܨãp^RšŽ[ÛiCF¤ )lŒĶáÔĄāŠ$péVXbB@@ 1XJ-kcX´÷9?ČŠ¨œĸFAō árOŧWmå;†@Ø$ĩyæ”ī‰$BŦ˜­Ķœ×ĻE4ĒáŖˇĘ–ķŪû­õ1ŧ†ōä,˙:‘“ÔTĻ÷JĸgÁP 84ųVW’P訤ŽŖĶb2˛@C;RĘöHđęMŗę\œöæēûhļÅä“žĻ¸âLWë"JI#“ųWKc<Ĩ˜ ätĨ$i te‹‰ŒŦXķÔÔonfĖ]Œ7r:T‘éåÚIŒŦāŒuĮ<ÕøâVĩ<äČÎqYŲ#{ļĀ<Âä V`į'—Ŧ]3Äc$0 0 ãúÖÛ˕v.Ҙ\†d?ūŖXÄט|Ī 8Æ3˙ëόår„Dˆ#TœCū}Ē;ˆ]Yx8l–'đũ*čA]ōoãëüé>u#pË˙?Uõ!­ Y‘Ĩ+!ĀO”ƒŒ âuWk _˜:’Ėz“Íz5ü Ã œqƒ\vē`ŧÕâØŧų@1<˙*ģsŸ(ÔÖnĻŗmŒĄ9<“Ō¨=“Ī1ōŅT[“…­AY€‹8ų—žÕĶéš#HĒdl2ĢŽ@˙&—&ē“k”l4x „IvžkšPŒ/~>š­š,ĨšŲXDR8ÁbŖ$'§ˇåW†•+@‚)än„÷…jAm%¸PŅ„ œœįĶÖ˛Ûcĸ1HÂąą—Č噜ąäįëVŖEk™[Í~ 0č}p+eâfˇhŌ5\†Āíøõę”vڄ–Æ-ą ĀdžĩšM=Í4ąžŪL¤îu q¨įšģŊԞț%‘€‚ųįšÔļ´>NË3rüOJĄvˆųYpp–Ā˙‡ZoQ­oP†q|PÆA$āöÍ_ķfc6B1ĮˇõČÍ6õ W(AķÁĐä“Í^ļJÆō(FAÜ ã¯zļՑ ÷vs…yár’•'aānüÕEԞdXĨšōæVŖs“éô3[¨‹2Ȏ‹Ô€SŌ˛.íDķE%Ē„ž-Ā ŒΎįRä™\­;Ž€ą•Ávffë‚AQœz}qEÄŌFņŒBŽíœžMEmtnÃ$iĩĀ>bž5eŅ]q|ĢĮŌĄīŠwĐ[‹‰šd)JFAS–-ÁũjŅ %›ŒãŠß—“ÔĪFaŦĖÎ Šáę:W=¨FÁÛĘBc-ÁÆ+ĸģOßącŒ’p:TŽå CÁ¨éŠú™ōŨØō}|j°ÎöōĘQŨF7)éūMoø"ČØ;M(B@Âĩ|Ekją[ĖΏ”0vŸ—°ü9Ŧ-2æėi ™fËD{÷úTķ6E­ĄëŽë¨Pwî95—sj.T/˜ëŸîôĪCĢęq\,7—$e 8P}žŋRÕuËŲËIcs1ˇŒ#ē‡#‘ę=i)-ęt‘hV–ĀaŲÛ$åš4“ÚBė‚ā€2ËÚ]ŧwęēœí ”n†ubQũ1ZWP.Ŗc˛Hņ`zš–âˇBeëm*Ę9Ãŧ;į‚í“øVŒļļRL6ž‹ĐWēJŗ-‰šVąoprCüĢfÖŲŽ÷ØęnĐ\ąĖ3įqŽ”I'¸Ķ:û›H¤ƒ ΐ8`QZxzÖ2— Ī+Œ_“YšuÖĨcpļÖŗM¸f;›uÜĩéõ­É4uģT•e–ŲÔä˜äÁaīJ6NÖŦ.4ũMˆ6×m!$Sœ}k›ÔīõËkãkwĻZËŠv ›!…u×7đéÖŪuÜË `rÎk’Öøĸx洆f1ŒE:žĐÎĻĨ8öÔ‘qČÉ$žXŽ–Ų&ĒīĐôw6 j Jāgžâ´nt-nÔ ÷ë<@˙Ģ ‡üęÅŧÖ?ŗMjąÄĖ2.T¸'Üũjc†Š=^ŪM‘Ė–˜ßØuâŦ–ķŸŧ+VĶÂÚŧ6ŋhĶå”:䘙ķÅ_OĖŽ$ŌĸXâūd°CžØ9z/ŨéRÖ,dˆpxÆTÖꋂĩīųŽ/™œũīü$vö}ĻÖQ‚Yœ|ĀcųU›Kɯ&ˇļ‡P<įdXQõôŽž [Mŧ”<—*@ *…4įŊ°‚g*‘FÁ@dŽzV‘æ["ÚVĩĘK¤MoÉįķČõljD d†aeÜyo3iĮˇZ•ŽŌáH‡ ÷›Ĩ" š. œÔ{īâ7^Î B¤—W2‘,‹ģypN*[xD2,ÆÚBíÆæŽ*ÔEZVß"á>đÎ@¨/ĩë ]Ŗ‘de yúSoĸ2ëvX’EÚÄEqd/qYwš› iM¤. g,ėp:ũkRÖu{ŌÍ–…†Ë›”(ús&hžb‰{y}p[iERQ…J‚žĸFՑē5Ģé&2ċæ`ō`€}Ē uwžíæš ‚ԴŖˇ”ÆÄ̐W;Ž~ƒÎ§Ž dso"Iw;}ÛxFö:ē?ÍÁˇäJ¸ÁkMļĘ&W#*š˙ ¸mmāÁŋw‚IëøšžšEéE7ŽÚ|LËht¤~‚ļ´‹7K`–šMҘŽexōäũiƏRšē3˜ûeÕŧelt—‰š"XŸ÷@ūfŖIŖģŊ˛‚ô!ķ.d\‘õŽūMfvcģO‘$ni1\æŋęÄķíICd0 zõŽĒQŒzO}ÜEŽÕcE]Ē ` ķŸXjvÄIo<ăÛÚˇôĪJļÉ íŌ ÆđØČíøÔZŸŒlí&{yQ`dä–bÜVzĶz–ÜdŽ-),Œs^0/+aI=隊%ۛke¯$Ž?:ÛŊŊ]JxĸKT,9ÜÄįÚĻM"ČåŽ&’âBrrp€Ņ,Eˇ#áĩ}:Ķi[‡Ũ€ęoŸœāŽ1W´-UėÔ H[ƒÉ@š ?Únĩ7‰tčĻ’1%üacj*ķjĮļÔRÎ.“Ž:ąĨĖäˇ \éĩŋĮ$ĘĻ3:d…¸cõëZžŌ„6΍\¸kš”†$ņöŌš­(.o˛ė\w€ž‚ĩįÖVķU62A8ˇŒíŽ×h“ŨĨcUĘ^éQ]M$1Ėw)ÔnōJŦk˜ãƜ–Wē¤â+›–‚l2Ā2ĮÛ5VmTÛēÅq˜ ^ÔĶ‚jԃxæÚŨųŲ GÖ°wŠšEģÛëMĩĻ“ÁįÄúÕ{EÔî¤y&EÛūZL2GŅƁwĻéˇ+dR@ĖĮëĪëEŨöĄ:ŽļB>ô‡, Žyt_yVęNtdBešS9Čų¤9ĀūBĄŸQ´‰ü„ũëž6¯ĖjŦVâádģ™ į3ļÕĪĶüjAũ“kŊ@ķq?ģ\įōâĨNī¸íqÚúđĒÆ‹m8œĩXJ†Ū_2bKŽLŽrGãQ‰īnũš%‚03šųb>•[ėE¤Ũxí&vŗ`Ãüjųģ°vD—7ĻW0Z;JäīPĸ\ēēIåÁË–Ž’ŌúŲDqäíã¨ęw6ŽštX\ķŧ‘“øUķ+{ĸô2RŲˇfpsžC“ųT3ĢJH’9<Tīoī ŝ”ŗ–*)ÉcâY¤°b#8¸ ũ=Ēá =Ų×s3PŠûp…Ũē•N§ōĢ6z}ũŲX%ģ*NBƒČR\J ˙4iɃåÆsÅOo}̤ĸhėņ‚BäWBm1E­Œëø%Ōįe–íŠn YAäžjΕ|åŖąŊb$ŖņĒēÍÃ_¯—wo%´ŠÛ˛OŋOįRøuítųä2áƃ‚?đ­Q2w!Ŋ qw!ŧ•’ur‚Gāü*Ht?ĩ[ cvnbröāWO>gŠ`‚MĘGS¯m$Š&0RŨAöĻMŒ{$M8Ą‰Ÿp,@# ižŗy\ÎČ î"O”žœí]…ĨÆÕbrŌÉ?Zę.bˇŠ%’âA° ļĐõŠ“*1ędi~Ō,I0Ėp?<×Yœ›TÉ ’ y˙¯XB[iá lĀnr3Méöä¤É!eųK"n }Ģ=ZĐÕXę—ʉ ,Š Đ0+ŧ]d÷dąY.gbFBåAŦ9ĩˇÕŽĖE*ų˜!}ÍuV6–ļ1ˇˆĮ2mäšvKV ļ4iBāŦڝĶģƒ‘m…Zž×1Ā Xã\p+^ņ :J‘ĩÅÁ9Ø8Ú=MrÅחˇ'ežH`1ģ Z°Ûcŋ˙„†ßÖ_ûäŅ\oöž¯˙>Ŗūúĸ–ĸæeŋiZ=™šé˜=Ķų­\ČōŽāJ l€:ה_ëúÕŊŦ‰3Ž:‡„äzæ5?k@ģõ)60ļĶúVŌ…ĖãSĸGžŧŠņí8XĮЊáüMk 7ŅG#•…”ųd}Üûû×ājãÄpé˛]É-ĩĀ?$ģņæģʧRĶm$a‚ Ž9-Ō?rHr|ČˊxĘ,eȑPēZėü#w›[ˆŲœ”“åI/øW-ĸø6îîFģÔåH’cD0÷4Ũn k;ס´¸vbŖ/ģCZU’Šîĸ œ5gĨĮ{ō˜Öæqü Ų"Ŧ™‚ Ā@w5ÄxMFĩ7—l^tĒ¨čŖ˙¯]Ā œ„É=ÍrN*.ĮTjå{ƒtĮô=I8ĀĒ‹¤;–{›‚äœā +_͐.€*<ąûÎ=*Scibą‰v’9"Ŗ–îÖ-ÆIļ~člš}åÔÄÂY”) œVj^ŲĢ*F>cœĶ“M+ęKvũŖ+Ξ‰Øđ,ŋm•p$1Î=ŠU\3IŗŨälf¤K–… ¸1†ŨĀQ’(ŠXiSģq"āŊN*Ytki•73„AÁŠžũulĪÛyũzˆ›ŲAʐā”P=5ļeˆ•äHŦ/øšÚĪO’8âw $Œ>•ĻēTīŸ1ĐsœŽHWŸAŅĄæģXÜK4í¸ŸĪúTęí¨ĖöM3Û# )úÂNBšæžÎB ŽĀÎĶÔ×âxƒ$–֐ĒBŌî<ĩÄH’ųä]ŗ¨#jž õĢuŠÎ†i֟h›•œU‹ëc›BášUÛ§œŠũé^ āīLK|æG,r@ĪALŽã`F”„PĖ įhé^‰ā Ŗ°Ô/`1ÄAųúũ+ÃZˇ÷ɘâĩŒƒ3ōIŸS]ÆˇŦ*­,­Ø‘„‰#O”?ÄUĀmØģŠŪ1”YBĒŦN*“ØYZĄ3H ÔžI¨´­(¤­{zeyåby8 í[°é1<Ļætb@z Žd´W)[D‰ō…ŒāŽ@Ēlí4؇aRqŽĩˇqÎávŠäæ˛nį†ÚbČ“9Ú9 {Ō—ŧŦ3īLëQĖøLA9ũk¸Ō¯Ŗ6e‚āpäf¸ÛŲåšd!Éļt—"!æH ņžĩŠVcnåÆÍÍמŒöĨŠÕR$ŒIÎO`*y\DĢ ÚįÖĄˆKx˛Kŋ@Sę1N ”P ŽSZVōO+IjĢĶ9Č âĢK4'åÁ$rNå[z\,Č˜ÆH Ž˜íDŪ…E]–0ŠÆ>U ŸĮŠŠ9cF€ÄnųŽ=iˇlĸ%ĨÆöĻ+æHÖåvŠ` ‚IúÖN‹šˇÃ$W Ž63œō~ĩM§ļ˛Å Š&LäŒ ˙JɞhãĩbAA¸Áīœ}V˛GēE%!FÜņųš}“Ô}ÅėĪĒ؛‰ÁęĀUčåwH‹ŠIĮ\“õĒ‘YM;….Fa@ųPŽßŽ+J9--"‹Î>d  Ņ ĀĪų÷¤˜šĐŠkS)FPŠ’3‘Ū¸Ŗ§Ë.ĸŒ_‡'< ôMZęŪķOˇŽŨāŖƒūr?JåfUūĐ@Ü*°{We8ڛlį“÷Ŧ3OŗH]*d9]ÄdWsĨZ…ĶŨ‡F =zW*ņíā. ‘ĐWSdĸXLd+†ˇ$OÖ°ŦûRZ—^Ú6q#˜˜ žIđA95[؆ÍīëˇÚŨęģ ‚ ąĄč*xY#†ÖâÕ@ēBU“OŠŽIތƒ-8ČĀÚē=7Ä6övĢ –éŒ͜“BrŽt3ŲÅ:¨Õ.b!šŽ øQīÛ4Øu›k8M™BđŽ9R?Æš uf–YÚęšĀíM—S•ĐåƒáP K…ĀéõˇąŠ8ea-´ā2…?4gÛĐƒNÔQ\Áu!–ĖE‰ Ÿz‚ Ļp.]ˆ#%Kp*ÔlC“ Ææ#%~”Yl;+Kxu9ÆfÜIm‡åŒ{WO•löio8ķc@1ærr+‚ŌÄúÔs\üöėŖ/ Ø×[6ŠtđŸąĮâ2Žy<ŅŽƒGIŠcQTdĶVëRĩ´‚I†é‚äâ!¸×#m¨Í¨¤ļZ"å8t踤[ĻŅdXæŪļnvĢ‘Ÿ/ÛéM6Ũ’-Ų-Y¯̤ø–īxÉĖR 0Ŧ—‚÷@y&ĶĨ°ŨēKR3ąŲôĢׅnŽĻ]OH”ArĒW%EŖx‚{ˇ’ÖæË‘°W‰[ zäí=ŋžWÍtô&ęÖkRõŖZęÖßjļœÉäŽpWëWáŠP! |s‹ŋË›mz¤“ĸé–vö‰¨Ā*>ƒ§˙ZĄÆú1ém QhWw¨ŧ‘aļ$Šsvë]Ŋ†•ccÅe1'Qĩp[ęzšĖ†@ \Üq÷”œ ģ§kWlđ[#Č"ā0“Žš2WÔŌkdVËĀĢu5ÜđAlō˛|ˆ¤‘Œ“V76[ƒÛ°¨'°$ŽÕ*åŗ‹šņ„2ąKt‰€ÄØ ×-yy=äō„FVl)ÆŠŲņ,úÅÚ´mn—dĘŠ¸÷†5”úd Éʀ īėüvŌpŽ–Õœ˛Mëp˛°ļ3Äà #>•'öv•a ģ˜îAo˜ÚŖˇŊ–Ūåä™âxĐmÚFž”ŨR%ģĩIxag -´MŧŸvnƒđМŖ×qĨ.úˇˇļV‰§W˜˙Ë(ūf'úV>̍OŖM6mbnQœšúúU9%´vš|H 6^B3ƒîkWYƒH˛Jī1!T2ä7ŊrĒwÔˇ+lSyؒ'’NXÕ(­đ‰ž@Į†=…^Ō´+멄Å49 īÅtļú™l|ˡiØ‘ģV–dķļ"8îŧĢi Î[`$āWW=„† anÔÎ ífíũ+TÔŦ’Ū[{8;‚7ÆšĀúÖDē6ŗ¤ÚÅŠé÷hLĢ–€ļN>‡Š‰FڕŽŒęqÚĖ––Ō² 8¤{žŧU‘n×™§ģk¨ÔäŦOąįŋθ”ŋļēhaÔô@ûs ÁüŠ˙a°Ôĩ&ĶėϚÍAXĻ˜Æ ûįųTrŨt; kÛd8°ļWa‘û…%OÕÍ+Īuq2Æō[ژûšĮįYđéÚĨ‹Ea‰ā3Dņn@=߃úV~š ]Ú]=æŖkų#2Ko1\ũfé܎nĮX4č%PĶ<÷.F3Ā~\Uøôûe…b…Ä`uŠ5äë.™ƒģS‚L䩓€+VĐŲܰúÅÔ*¸%Ļ“’}‡øÖrÃßv4īšŪŨ…Ķ­e›{ĒNsĪá\ĨĮ‰Ũö;§ qŧ§­S¸Ķož`öڜ—(ŧĒĘx˙ ĩuĢøáŽoHĀĄ'üûQ Žú‰ÍtĶÄ0Ë#Ļ–ėrOÔ˙…PMFåīf’Úō-¤á˙1ĮãLMHŗšB„Ÿ›+ÍhCm§Ũ/+gž˜5ĩŖ‚ģeˆŽXÉ&ŸeŽ[´ņƒmppä|VV}>E˙ļŪĐŋīāĸŦ˙oÁ˙>Ķ~TTŲö ųuä>ā››m@'œIHl’ĮĶØzם]€Rųĩkë­ßˆīwí!á…y væģ ü.ģo*˙WQ`‚-ŋŒŸj빂EŸ…ž–k˙íĢĐR†āČOô隃iņŊš^íj62ø'ˇz¯+›;hĄ‚ßbÆ@Āá@Ŧ-oUą°ÍÄîn52¸†Đ>ÜvŠĩŨĘæ˛˛ oY0Z ŊJëȡ\ļŒá¤oC\u׈ÖgiŖŗŒdūíKägđôĻ\hš˙‹î ŌZ˜bC´%uOÈmí@ģŊķfuSåQZŠF(ŽV؃gâ {L˜\Û\9PĐ*eßZõKmeŌ4šU1ÚüŸķŠĢ čÖZzŽÚ0ę~ûrZįüYâ¨Fš üÁOÎ:éXĩĖėi~UĄÖ_x–ÖßnČ;A<~5Ī cSÖ§Ų Í/…Ž>€žk 5ģČ2#GŪ#5kN¸:~ĨŌHĔSÁ#Ŋ\iĢæÛÔím4Hc&Kœ<ŦrOSZQÃmĒžaāÉŦw×bíÜą–< ͰģYėc—j`IÚ0e%+s3h¸ŪȲņvĀ=yÍ7lJ8‰TxŽiÜäú⠖ĨlČK}[ŗ,{ŨEËî`2HĒōŪ…ÉĒāČØŠR+B<¸ŲA•GÉĸ]>Ō\‹?^šŖ¨ĩf-ūģŧX–lƒÉōS úןø›[šęs ēˆN~U;‰^ÕęŖLą Wė‘z‚3šâŧoš˙g˛ˇŽ™IųŖ\œuĻŒį5<öÚtši’e&ŖÔ,’âĨrzŽ85b÷M6-į%U‚ĘęĩÚé>ĶoJŗ,ŒKā |ŨŒ”[<^+gk’8SŒs[…ŧ˜N|ąŽqž+Įļ–Vz˛ĨŦÅn‘‚^‚Oû]뇞äÜJ#…\‘É5IķÕˇ=ŖÂztQčļˇjęæEÜBr3VußÚiҘmŠĪ¨I€‘Œ‡Ūŧ~ fúŌÔXÛ]ĘU¸(Oĩ]´fŗq4ĖKžY˜äÕļ$ŲéZ$3ŪÍį__yŒf7Ĩud3 Ãp+ÎŧŦ]ŪëFĶd^D ˇ^F;× ¸H"%åû ŖŊ+–›ęC,Ņ„m°ž§­b0-Øb2G…[Đuy5a!š×bĢŊ>é>ŸZšré ŗČʈÉ'f‹ģ¤Ę7pE;G;ąj”rėbĒģ¤eČQÎ:Vŧ—v÷;ĄãĀRĆĪW9s=°žY#šĖßuCCŅØ–kZ#\LūfwÂ:VŒ  f•ÚÅ`Ø^ĩ›—‘1 œį$֑ÕUĸ>R0f†< RrIc™Ā29­ˇÃonJ…F(F8=+™´ÔĨ¸¸x pŦŠæœb›t: Ō¸TAū”¤Ķą¤kíM#Ipî›ĢĩZ …-$ŦüÁ&ŽOĨY•Ų\,¤ņŒU;+(Åd‘AfRĖ ĪÖ-ŖDŲJęâ PųąŧÂ˛‘ÆÜžje0Ŋ¯–,s’:ėj;k.į‘ö@ĀcnNyĢrˆŅVŪ4&FbX7Eî:fĄ=l†×qĘΖŠmh…Že$ī'8ūUn+/ėËA5Ã,ķįfãԒ8ņ¨"m iU¤Â¨b[’æjë8R8Čb"„ŒŧüØúķŌ´š6šFķQÆZá•, `/ųÍaũĻ›”’7Ęîž1F¯öŖĒL‘¸áŗ¸Œ)5™0{}ír˘Žö˙vŦs4ų™ŲÛ:īMŦ °*X Ž•Še¨ÛGj!”¨tÜ į0Î;כŲę×SnjĸÛÄw“'ã]>*=Û(˛E DŠ@8ßÚ¸ę#zmlēŠKeá†åá‘FlūsU—P˜D­*žp˛dŸÎĢC-ĖÛV$”įĸ`Œ˙“Úŗu]BæÉŒQ@ÁÜ ČIČëĶŌ˛Œe7Ëjڊģ.Ũx˜´qGĐa\˙õĒ)îŽ/eÉã, (ųHzĄģūHbY¸'×˙Õ[tĪå…hŒnXĒØÁâŽĨ>Dgš2qs,Ÿ2<+Ē6žjãÎą.Æ7Á$…Č uĪ>í9Čiã<Įˇ­I-Åņc)´î‚ ļãßĩadmr•ėá™J°uaž1îO˙ZŸe{:˛BŨK Ų˙ëԗr<ęÆH”1xŠĢd— t ĄaގJĶė‘oxß[ÔEHäQŧ°lA#üæĄY%žYnÔRHĀ$œķVpĀąųŸ!nFvôZ™R%HĖI$¯#üį¯j˒Os^dŠ~CۘېĖ0ĸN ũ$‘ØzV“Cą9É9œđZRęōG‡RTŽNXR fh—Éd;@‹`7åšĩ‚â!‚fbˆĒqķž˙ĢĨQŊŊ’bë Tœ˙Z]UĄˆĄ !bCsČŦ¨ĩ$f|…)’py$×T)č§c K^Ro$NÄČØr{ &HdĩōųA8Š{]¤€°ÂԞjĩÉV€˜@1Āb>ĩMĘD膝E-U¤¸•%É%ŽĪŨüG´ĩfû4Κ 3|Ē3ßšĒ'š‚-&KKæōmĸ2ˌ‚¸Xā…ˇsYÉŨĘM=ËSņn§Ŧ[4'[ˇGÔôę² ŗx”9%TpjkKW{q PfCŒ19Åh.‡tvŧķī ÆŪ¸ŦŌģ˛úŗ‹×ØĻ¨éŗgąāfŊĒ0ĖΆč1ë]ģn´Œ{s´‚{‚¨Éi‡mÄ؊ŨZ$6Û2DQÆA s’8ŠrŽNõĮj´ÖCÉ “ĀŒšu¤)žd­†îQ¸Ū&B ōčzŠģmĀĻB ąäž­G-?™3bsģ¯Zä¤×,ļČ|˛p Œ“E…~å­:hEėbl˛1 ûšėbKA*˜âŒĖAŪš+=Ui–Hėeb“ēáĪ3(ŒG ˙ĀˆkĐŲĩ{e†KIh€đ6žqøŖop4;*G/ĻLĀ+7-zPj™đŲ¸ęWĶ(= Œ’ķÃÚzG%ģŨLfĀ]Éę+ķiŗ)9/Sg[˛‘$Ķu=2)$ŧŽeD7‡ŽīnߍtÚ­ĩŊƗ%ŧĀåB1Œ}ŊëŒļ°ĐDqĄ:(WžIŲTlMnŲÉáÍ5’XõašAtåü9­œl´)>åj77z|úqi-œĒ¸6ĶÛÛ˙iÛĮkĢéhįPˇq’ŧąNzŽ˙ũzŅ˙„‡@˛ÉąxKĘŲe‹ŒŸzž “W*f%!npŋo˙]L¤Ķģ*1æV+ļŽ’ØÂĸĐKpņuÆ1ëUáļ¸fēH‚ÂķD2IúMp×ū#šÕØÛēKmnN2ļ~¸­‹ ĘņA,3FĢ6ܟ§øÕōwĐ.ÖÅ˝SVÔ‹Pļ–䑐áĨ#ë÷WđĪÖĄžˇFEĩYƒ¨ ™ˆ-Q ŦŽLĖąäˆNÖ#ë˙Ö­kiHœĸIcËÄŌ÷VÂw{™6–ļú3 ÂŨ2zšŠ÷zŌ^!XŲ”|ō*á~œÖ•ęiÍnŅËNīܟƸ-zūŲ[WtXžU‰OʧŊ-ŨŎS3Pšf‡,œąä“YR_ĪrV!T`,cŋ¯ĩCr˛ŪHŖHŽI5ģḠŌn^{ÔÎ6c$Ąü;ĶĩŲ)Ūec„hm²¯V削?°4Ķv×"eb ;1ãØ…`ßøĸŪÅC,Ë` -‚MgÉâ]Bî$¸’'ŠĖHŽÚ_ęŨJÎú)iŠŅköī-s[Å käcqÜū5暅ÛLŽĶL\œāÕĐøĢ]‡R†ŪƒÅ`‹€˙q2Ŧ’6; Ļˇ"VžķÍÆ0Ŗ#Š­}2ån`n” ͊Īļ´gsJ]—,@į8­ģm"įPą3ĮhÅ|ŗÁĨ‹RŨį_1 I՛{æ2ĸjv*HVāgęk§ŠĮS[6IІCōš8ČŠ.t‡ģĩŽ6¸Gl@<ĩ> ›9•Ōõ; ˛XËŊ ąœjČņÜvë õĢŠVáĀČĢiáw…¤Cw1‹ Vœ^ĩŠLË!ë™$âĨŲî;3›ˇ—HZI9-œ–ę)fĩŅæPŅēĄÆ9^ĩļūЙɞå"'ōåÅZ˛ĶôĢXÅĨ´*-ŋËŪğ|RĶĨĮĘÎU4đŒĻŪéŖ’ ˇenoíÉA4R`ž†ŽÚ--n§Xbĩ”Šé€h]čViĻ6‡ĖœŒ M+é¨ÔYÄŦĐÜÄĻo(1*Npj”šE´ė y.IÁ#5ÖŤ $-7(H›Ēž°mÆbˆč¨Jûrœfž—Ú[24đĘpjūvˇ÷'”ĸ‚ĘëõĻŨĪö厔’ĘŖãŠą§° Äšę*ŌÔĪ͘ū$–(7Ō7a…+ˇīž+–¸ēFDÖŲr0žN,ņéšęŧ[åĨå˛$ °‹s2đIÉëôÅrķÅ4û )éœVņ!‘[[K4Eē É5„’Hį85Ļ—"ÚÜG"|äsšĻŪPŲXԀsØSa"ĪÚĨ•B¨„chāšėŧ!āø]SSԛzžR&SY^Ņ"Ô.ĖŌ)6ą0.Ė3ŧúW_ĒëņYÃ%ĩĒy“°(Št+Dhßk Ļ™Æí¸VkéÚĩÃĢß^ė“„ĮķŠ´h¯­­^[”ˆO 'äŒÕí3Jš’ëûCS¸g)“ųAúThZe‹;(´¸ėĶČpˇ õëšÕõK}jų lȀác’kŠšļ›Ucܖã$u4ĮnˆUÎ#€7ũ)§a?ĀĮĩđå´lĻTˆ*ķ°rMK¨ŲŲÚŲ´ÖļĘÎŦ]¸ÉĄoįŊēÆDaœ'ŗsaÜa$bĒ0ÁÁ&ĨĘā‘Ä$ēÃí‚ ÄôVÍléÚŖ4ą™åŠ.0#\œ}kF{› " ķ‰ 8QË1ü)4MNMVøMrĮm É ¤j˙Â6ßķôī‘EknWĸ‚ô<īÃ:U‹kĐI¤xd*ĀŊÔĒ@wvzô¯K‘#R ĸ‚Į ÎiQ"ˇEŠ%hā);ŧĮÁĀĮĒUÉH‰,ĸ-=.N?úõCû#NļŊkˆláF~Ąc叭i‡g$ĮJ Œx,NĻ› "$´\䯃=F(tļ´…ätDP ' °\(;~cęz Āņ=Ō&–ĐÍ&ĮzŠ{†‰âŋ Ž€ŗÕfR C U~§Ö°Ąžļ7pŨ]@/f˛üęĮˆâ´ˇļŠ+[d\6߂GôŽVÖY R'8ČäÖđÕōßCŦmviîĖ+@Ž@XamĄzËxzĮPŌíŖeUt”œ°o\׈Dņŧņ—.@sŪŊjĮÆēz¤60E5ÛFUĶ ¤úy4Ļž– m]ķz=”0yb ާœ×'¯Ī5÷“i<°Fųcr ~ļtjëSԜ4B(QI*2Iúæŗîtšĩ­Q¤%¸r zéRޟŧi&š÷LÍ0ęZ÷’5 ĄwķOĢΗÛmios4ė~PÅÉæē[–6P˙ghöų˜đōÂR}k;Oļ}#xDz¤™Ú‘>σ6ēÖǚž“|,ėî]'”d´2G×ÕËŊ7P°Ōöŗ|ķĘ ųk4Ĩ™ ĮŨÎz×UaĨ.Ą|V{Æ# Č_§ŊPÕ´ŗŠ0žÖå6öqļR÷ž§Đ,Î{JĐĩģ¨TļēūÎM¤AīŽÕ]>ԓ…yü×ÉCÉúu­iõ;ī˛ŅÔ%¤@#p z“ũ*XMđĘ^ßųœ‘*\n+Øæ/å’ŅLz“¸ČĀ’GĨji_ęZntuÛîōÉWØŖĻ~ņŦFíõŊMޝÃW €úÕŠeâtËf´Ķ…É+k“šiô}IŽŧ {uۛrNI2čՉ.•ŖéĘVuĩƒ,…đHūu¸ŪņfŋjgÔ5)c‰ÆE¸mŸž0j“ø:ËF°—QÕbS…Bųi`;äŅí•=-‘[™0[øiŲ ‰äĘĀZÖŊĐ4Ķf˛ZiQÜMģå3™ë’ Y°ÕoώŽ Ã˛ (å؏ÃîĒÕĩ8ícųVi–˙žœĒ֖ŅH¤ÎEešŌՆŸąUų¤‚6ČöËUˆĩ;Ĩe“Q˜Á pHü+ŠÕ~ųĢŋOžÜuIŸp5–ūÕėa9´ķ\uhÎjâßÚdÉHƋXģ…p_]"¯RRøT‰ĢK;)ä€<ģn"ĸžÍė%+snņ‘Ô¸#ÉąĢáO\VˇėMŲŦ÷×F¨č€Āôâ­hzUÍöĨ•€1fsÆ=Ēļž—:ÍÔHĖ#If“ĐĩÕęmcĨ"XÆw¸Ä`õ ĪĖ}ÍLËZ•.â‰exMČ18IĨK˜ …I¯R@éYvZ}Ôä™HTÆ295z "Ũ&RĪ&Ņ’ųĮŊCH/sbČŲFU ™ ÜXŒōiķę–β€îÜĄ99ĒqGĻÃ0E€ĘI’sWH´‚HĐG‘Ī+‚8ūU“^ĻŠšfö ȗärpx`F:Õx`… ŗĸ•QōŠéN0˜›lŠI>¸â {ģ]ž\“Æ °ļx¨—dhŸrQ›÷{6YČĮĨŠÎ_64@ėrX¯ņÛúT]žįĄ@QœãüôĨ­ĸ’ ÞÆķÍJR)ĩs;ÄqŦ A ;€oâúVMĩÛY,í$čP)ØÍÃÛéZ^%ģ†]4Í y­pôük˜ŗ´3°šæPäōĒ9ŊJ‹Ŗīu$Ôô6ėdMN?"``ļb1<ãŽ@ūĩ‘ŽÁe§+BWq‚§–j׌„aģ­ĢKdlVōtsmä‘ÚļtTUÖĖ\íœū•5™2fŪ4$ĸ'õŠ´ņŨ¨ˇf–IŒ7ŪōĀ˙ëÖ*KwŠŨĀōĸnww ÕĻiPŧöMÔ7Rqũ+g+u6™ÜÚŊɅ&3N[ŒHßĩUštš†FwˍāĢõ\8¨´›™ītf]*1†c§=iúĖ`iŽUT ^ŧ‘ø×<=ŲŖĻVq<˛6 Ú\f´´˜Œ›Ø0Č`zūÎé×[ŽII' ą9é[Ö÷đÁ)ÃĢ3ÔãŽ+jņßC*OSqÍŦ(‡vcjã$˙žĩ‘szn&dļin?„ åY—ēŦ÷“*ZÛš$‚ĖçJ¯iŌ̃&# K2œ~ĩÃft9¤„ˇ—‡›j0Ëå?ĨYC‹{z’IíQZG Ú¸8'vA=qÍE-û¤#`FÖ֑vZ÷šģįI,ÁJyArĒsƒú{SåãmÃŖzˇ p:ûšÎŠ[‹ģ†/ž" €Č?Ō­Ee3$JkKmÉš‡&j•Ë`¸!dw˙qAŊēg5hЎ%b¨mÄã?…A<ĻÅú°F āsĶŦ{Ŋr(&Fv'!§7ĸŠZŗNūW’ķ‚rNŅÁ"šÉnĖwŧj0Ā4^ęx„ģ…ˇ„ũÕąü:Ö4úͯ”éQ‚†I÷ÅtSm#žŖFúšÕd øn7úUĮģĶė-<ë™đĀ Ō¸Vņ]ÜVæ§wv8ŋ_ĘŠ:\– vû¤`€sŠričNŠs|E{ģ|“Cd(Đ.öûÄrzS,ô¨ŧŋ<& ddōGŌ–ÚVUHÉÁAÔ×K§[„lIĖFĒ[#wŠž’ĮŸdqJ Á5Íęž%ģžéŖ´–H-Āe–5ß]ˆĄ‡K¸m+ŽŋZÄĨŧĒÆŨKK—¯ uõíBI+ļąÂŊÅÄîK´˛9#æ|’OtšK1Ѕéœbģ{˜,ŦKöxŧæÁŦŠî„ŦŅ”aBäPš§=M"ÅĘä`įŸm§JķFā; tzf“0fˇ „eZSĀJތM䖐2É4¤*Ā?äSŋ`ŗ!°đüēĐŒžČTeØ/Jîl4+5Um­pÆd~X˙ŸjML–ÍXĖë)`1ŒVŌ fįį=>”œú#EOĢ!B"‘”ƒ¸ ` ŧ‘į™䞄T‘ f ‚:fĻŠ#,ryäÔ\Ģ%ˇŠæŨ ™wŖd|Ã$W—ëē.›¤ßËæ§p$#r!ä•íÍzęEcŠë\_‹^ÍnIJ[E+FĄw‘ČëŪ”¤’ĩÉzjpZuĩ­ûí)stĢ“äÆŦXÃú×C > ¸ƒČx͌Č~q.CūĩÚxJ“Os (…ˆ,Ę0IÅ[Ö<1§kMí¤o"‚\aĮÔ÷Ŗšęé‰Dįėl|,öĨcKŒ/Ū'æ#ųÕ蝭tËcöoøö\…!ˇŠâ5ŸjV÷Ė–0Æđ6J°$ėk ´ûŊ%Õuyh˛˛Į&UOáYōEģ6kcŌn5ģËĩ,–ī8Čr2ĮđíEŒĐ4âH\I!Æį~HŽzÚĘîņ´ß-Ú0’Į’*ËYköX’Kg@0Ō@Ø$}*•$÷v”Ž´$nKÆë¸•éPũšY€LÄgē=*ŰšļÔŖōí]ÄĒG›nNĮ uũzŲ 1UE‰ Œ ԏéZJËDi ŊY›{Ī"ĩĖ…”’vēĨW•!ŧ%*‡ä ônîœ#0’OCYæS€ˆ`rHčG֒•ô˛-=œ °œƒƒÂŠËæÛĢą`büĮŽ™PÆí# š8<ⲤsuMpB[ .ũŌ=ũ~•qĶr%Š\ÄĶũŋQfŽÁˇ‰ų'ß*ūˆō^jŌŨČÅŨ‘&3…ãõŦëkA{|/īÜ4`~ę20÷ēŽŠ,0L°Iöhãč# ;Ū˙•1+c\Ę­-lĩŽâŋZ4} €sĒÉĶąŨ€2ĀW/˙ Tšf™[_>úQ"¨PĖ}~žÕgCđíŪĨ“]Ü2I™Ú3´3`|šö7d5ž§ĄZ[i¨Ėö‰`pp2:s6I2ˆÔd‚=*Ĩŧ kn‘“å*Ē‘Œ(ŽÄz­ÍŽŦÖđęĪp¤‚`Ož:ãŌĨ+ąÉŲ÷ž+†Ōė۔ķäPx_Ÿa˙׎uõŨNķP3™Ļ¨č 8$˙JÂÔ îYƒ“pØ Šex, *Į¤Û’IÅ\cvfŸSeuØŽ•Ã3+Xūu.ƒ%ÍĶ\Ũ뎋’ąÆrOãŌŽ\ĨR.Ō6BrÎįŸÂąnõÕˇ&=1NB[ô=)ģ…ô‚Ú؊ĀéĮĖYrqėzÔ7oq4&l”Æ ų›éPčŅ\^ o.xÁą#åĪ­k>Ąml˛M+„/SÉ>“CG?oŖŋÚLú‰ (ÎÂrqū{Sĩ=QümlĻ4'M6]J{ؚI‘‚ mĪĄ§h“ę daåÆwˇR=ž´Ž+6rÅ[Ę;ē÷˙žMiWˇyp3““Ā5ßŋ‡ŦĄ\ĖĐąč+@Ô9ĊW)E­NkEđÃDžuۈ‘@fÁäûVŨŪŠ-ĸ8ņ÷UrĮđíY甋uFw\NHZąĻXj—w’ ÉHK<´äū=ŠØ^DwwmpV1jÄ0įĶŦtíJé„pD‘2Äpvzv—mjš’ ŌžK˜ÖĸÚ>LāqÚŖBÔL7FƒMŒË<ō]ĘR€(ú ÄŊĶ›UÕ$Ø*! (fÁ#č+ĸģ™ÚO,fW#„ˆaA÷īKstK—(ĒpjÖČmčT´ŌtÛDeˇ„Jp…Ü!ÍmmoÖ8qšŗ”Vëō"ƒŨ&”EbAÜORM(™’‹Ģ…Ų!Ių¤qČÂĄ—IYŖQ=ĖŌÎānīÄb廊œ9õ'•s¨C0%X¯%G$͏ôEq"ÛūæŪ"xôüj1\ɗÂĄžōæõƒ[ÛāÚĮڞļR2]ČĖ€đƒŠL—;ĸ÷‡íĩ& æîXˆ ÍT,tčÂFęgRĄ9&ĩ÷¤@[[•…Nz.I÷¨Ļ°ļv2”]ĘģS'õĻŖØ—dŦŒ”xodY0ŌšAL•éŌ¸}wSšNĪL˛8 ėPĘF7 ü}z-Ŗ &Á!AŠ^éVÅĖ×6ᜩPS¨ūŸĨ˛ÕŠKM-ŗŽ§ rYŽTd“[6°,ˇ1["îBāōk¨Ãđ$ŅMbČ6 zĨCiáģËJŪđNYc`X(âŸ:bHétģ/ŗŲŦ*HĮŊbŨÛhžÔLÄM=ôŋv0wūąqq;Á/ŲŌHæ*v>2sŒ×+.™{§¤—ķĘĶÜ`´’¨Îß§ˇáIM66Ŧvē1kÅiŽ-š(‰PōĮü+t¨8>XÂôđ+›đö§å„sÛ9tĀV¨5§uŠÅeÉvâ$,IÉúSq)IXvĨw0Û BËūŗn@ŽnßÃ&ōc-ÜķĖėI-ŋēøįŽXā‘ãa• äYeP’ęˆŖ$ôĀŠÕ×Ô˞Ņ4í%ŧËx”Œ'&ĢęZÅĩ–ApĶ$ į5jęåŅæˇ—r•;Y9ÉįĨyĻŖ4ĐŨ´3Şâį,d‘ķM‰ļveÆģ*ß]šKaą‚˙ũjėŦ­cˇxãUŠ(āV7‡ĩK[Í2!hPėPŦ ÁéS]x†ĘÂá#•”0ŪĀđĸĨģŦŽŗä˙bŠĀ˙„ŖB˙ ŋįE>V_2/ŲA)c4üģt_ACΒÍ$qÜ+Ž×U9!ŊøV^ŖâšÍ˙ŗįRäí<Ÿ§øĶü5¤'J@ĸYXČįžORsE­šīĸ4Đ:Š2gœvĢ[ßÛÜ]I ygA’O t¨5KČÚ3oō‘ķ0<įôĪŲYëFØ1”ļC´k¸GõÅG=åd7ĄÖËrąŗ)` €[ļ+Îâ´ēų™ÉžoĒę7úÖĨ hųˇRŪZpF2jĨŽôŨūĐĮŽ[}AįÔõyĸ›ÉwĀLöüĒÔ &Đ 8×5ŧ/ÔĘŖWąļ<ĀI$‚ŽA,ŅN<‡d*Ûˇ̐i #|᠁R&›,ˇkųŗ3aŒ’ Ģ3šéžŊūĐąši›2ŖØãs]K…Ž#å@â¸]Ã7ZFyk‹Â3˛3ļ5ú˙z”j>!ēc ‹ä"ą/+Œ?•`ãw{Ÿ*ŗGX'Dļ ‚3Ô˙õéčURĖO }:W|hb¸k+kY5|éXíUQī]O…|McŦĪ,VöžAî 1˙ëPՐ)]ØŋupļōŦ )ÎīˆčOʲolŦŧC­uy:CnĘü &>î^*ÕôŠjō˜F 8>õ ú ĩƜ–W L`ä…rŖ?…+¤ƒ•ļpēŽģm JĐ­Ėqp‰pXûĶt¯ j7ßŊ¸ClŲbü`{-wļZ™ĻÖöʇš<šžrX…¸gę[ŗžæ3xKMX”Øā °~I÷ĢV:uŽœž]Ĩ´Q1ęĮ–5~hžY1 Py u4Šaŗ 4Ž@&‹¤ĩ+—]  ąîGAToä(†;5˜ŠáŸŸįNžÚōõ{–ļ´qõ?SS[[Cm•‰Ėŗ‚KgáXķÉËEĄM\Ëk‰-ãÛ#G8ÛÉ&Ŗ“dLˇ7ām$#9 ~ĸ´$Ķŗ3ĖŦ Ëcį#!~•Ãk˛9Սŗ<’[)k€Ivūí5 7yjKŅV•â[[ģčí!‚@Xæ/)ŸL÷ވȨãÜôĘx`ÛÍw6ØX4 r0}1ĀŽŠ´Låā ŅĢ Ø­r#u&TÔsēEČĖK'†žčäZ4‰,øÖˆÁs,3][ĪaˇJß8ū•‹wiĻģląuGŨĩPÃ?ŌĨļ–€ŨËöŸŲWWM %pB¤ŠMFŅ.&i#…˜¨ĮÉ(éôĨŌŦRÂg’@ÅHÆâ¸–kLäF†H_$ėāŸĮĩrļ‚čSdHŲ,9DĪ?…eŨÚ_É1ıʊ2ļÖäP°„Š1ü9Īų ”&dPär*ՖČV9˜´ëôÚÍ€xÉ9ÛūzMōiāŠ# ņ‚+r XšLĄēŠļō !1™`CÃéĻîW*0†…4hĨ˜ādr*šŗąec%Ę­„9­ņώ’fŽæU!ˇ(ŽÕŖĨ%ä.cBw|ÅÃc'ķÍ'ęZ^FbdQHČNyũjũ…ŽšęD’”Į$ŗŽsÖĻ‹FĩŖ Ōē6'Žji´­2'ËŗĮŒā¸ŸÂ˛”–É”Ųt‹ˇ Â*Aƒ9íūĮ´Ķiķ4sD›ˆŧŠčŽt§˜0ļGHÆ>w;IüĢ—ÔôĢČŽ‰I˛¯‚Fp­vāėäâŲ…tí{s!Qä l7?úôûĄ{ß.î<Ŗžz÷ü:×?Ô,œBŒsËû§šōúeVh@fUę+Đq´ls§­ĮęēŠÚÜG °@Lg Ā4Ųle’ę+Ų$S,ƒFTžõėĄ˛ķŖ…Ë˛õ#’Ã˙­U§ÕŦrËäĸÛTrk–jŌšĸØĶŌõáÔ#Hf#’0čŗĢŨĩŊœčXš•Į”vā’˙9ú×ņ1ŠXd26p?ÆēU•WFe-žAŒƒÉSšį•”Ķ5‹|ļ)Zi’LĸYÜ[>X=*üK wË)˜™Ī*ŸãYŠ4펕 ąÎI#€_‚ĩxā„–¸cûÆnH­UY^äÅjiĘöÃuĩĢ0™ŗÆ),ĸyÂÆcNYÎjH‘dÅ­ĸbA–F<ņžĩjYŖfvˆ Ž=yÍrr›&GtŠbhm°\ĮE”ŪQ <Ēēæ´ĩ°ZĩŊ¸ĖÁy Č5žō¤cļ“€@njtĐRzęmŲ@dÚKŖž¸8ú՛ŊF(°"UgV8QĮ5MmcLȁy ;˙õë'R×Ę'ȉŒƒ!lš•JMš{DûĶ,ച…ęÛCœŒ˜ŠåoüO ’˜ôÄōԌdr}Ģ TÖ^úã÷lōą<’~Z¤ļŽÃuËĂę ë…–ēūFĒŪŏˇK<ŒķËų&Ž%ĨÕķ,jž\ äąęGŌĩ´ÍŽ*„]ēæē+m:+Y3,ŠųA&ē=Ėy‘mŖĒË…2Ā\Œ`RĪ{ļ‰xŋĨoËk-ĶģÖ>îpMQŧ .<¨|œ tÅsԇ+ąWē ‚ƒ+ë6ÖčdyâŒ);ŽjH´›'72œ°!TâĄ>ŅvÆŗÜŒ)É%đMa­ô+bî‹=žŽĪ2I$æ6ÆpŖ>ÕkVĶõ ™´’8\;ËĨičúU…Š6+„“’Į’jûŊFqÜÔË]ihq#à [{ígé™âj”ļSiŦcō„dœow?ŽēîHÖF/sĩW’Ą°s"Õí–5ˇŽåd’R@܊­tM›9ëÛŲd/ $/Ũ_ŸqĪáU-f{=zŨ‚Š˜s"ž€V”F+VvāŦÆšôŽ/.& –r@vRRm”•OąÕė/ŠĮʉēlÎ˙^ļãŒR\*ƒ’Ųāוx~Ō5…,Ė^$ķS^›m(ŧP_–S‚RēZ¤ØķŦBŒá!`#qęMZ°Ô’î2ęŒ8įŊa^i—sęąÁlqm(ÜÍÜõĩy5ĻĻųŦUT*äÖKš÷{RžŖĒNŗ kx˙xq–ės×CxdˇÔĀåܟ’?Šî}Ē+Ģų.!gģ•­ĄsūŠÖĖ öĻ$wW,@ @qå/.ÃÜöŦdųĨvO›7´+›[)–Ņ.yÜOaíí]<ŧĒÉ8Øëü¸Žîí´ˆßė‘ƒ(á@䖮ĻĘIĩŨ+ĩ"ĩ1'€ÃˇĐ֔fäŦÃQnüK¤éĶg“v+œfŖĄYx‚Ãa÷OÔV~ĨĻ&ĸŒæ/#PNK’GˇÖĢiŅÍhÆė<‘¤3ČŲ<{SŠ5Œ7ÜĶĶŧŖi­į$Ķc–<ÃŌ´.`ō˜pŨ'5.ŸŠÛjPĄ™8ežĩaЍ9āzkEąVG6÷6ĐĖ-ĒäáÔđÂĨ‘Á\–QŸNMMŠé:Š7œ…\𮧠>•ĖOaŠi3‡÷6Ã?Æ?Įę*ųo°ĩEÛŧ,Š>b<Ö|“ÂĶˇHûĸ§–'ģQ!vōØ s€4YEB@ĒU@9d˙õĒšcԋž†Ce¤lĄ#øsJ…ĩ AJYBz’ũ*{ģY^Î_-6Ãæ#ųU…’#l#bF^ËU§A]ŊÉ7ĸ[K3Ēų g ņJË[Ø CSAÆ@Č_ņĻE,Wŗ<ŗ3Ļ$yŽ?ˆúÖ^ĩ¨Ŋåį؈&`Ür@˙ëÔõjÚ h_IzˆÔėOQī[öž)“GŌÖÔ[ģōLÛđ$úuŦ8%KHōbpė)eŌõ-qLV¨B’3Æ}hæš*÷/ˆõ?\0ķÚŪĐ 0VÁoķíVãđíÔ°‹˜íą1ųIŽ—@𕖍mrÂæ`(įŌļ§š.ÅcÁ+ŅGj5`ãÜņųg+¨Hŗ3$öí´¤œ[öúŊí*€!$АmĐz×F,Ŧ$ģyŸ^ąËĘÜķRËow o,ˆģ‰Ā=ę’ļˇÎu3S˛–ú\šžAÕNÛLšļŽë’Õ×^YM­ĖŠY•#rwŽŋ­éÚTp]\~í¤PT)#‘Ö“}%sŪãQĩ´Hˆ6üĄČÁ#ire‘Ā9Ā­ų℔í@` ōM(Ŋˇ㍘¨ÎüãjÍ#dR] ũŽ(Ô  ĪNÕŌ“åE° 8ĒöoŊ\ĖGj|î‚q…Áô§ÔiˆÅ¤VD[î'<ÖdÚzÆž}Ôí)', Ā& Ÿ^_=âˇRvŠ,ũ‡N՛uЈá†{ŊōĖFzN*”Žt:eĨĢm“ÉQ´œ9ˇĐF˜ c9÷Ž*/ĮaÉ 1fA5â?ę7qŦFA m&AáOĻhm^ÂR˛=}jŌŅp˛y˛‰ĖMršŠ/¯u¨ôĄÛ¤ąîÉ}§…førūę+UŽ;#(*?z§nOÔÔZŨÅĖZļ›+ÅWąŒOÜËY=ė[g­évëoc v¨õ$úÕą4o#D×YFY˛ExôēŽ¯m¯.&¯p!’2ÄŒšģdëĨ_¨ī›pĀrĪÂ‡% sžĢæF2BMdęž"˛Ķ‘„ˇ dōĘ 7W1'‹áēVĪ‘Ž9X'{Ãö7ņŊːēl,oV=94]ßD ˇĸ(ÉŦjšÁÛglb xs–8ĢvžŊqēúúAžJĮÆęĮ• â8• ŦËŨn2ˆw8ãjŽôų’Õ…ģ’AiöhÄ1eTzœ“øÔWOē&HTČÂ:jH<ŲT<˛X°tĨdP„‚yĀÉč*îš’‘e3Ęô ŠeEEU, #8ô§Ęa‚E]ā–į“Ž*wjŌˇ™q  Š^Ō?Ryu­áˆ¨DÁįjgŽ).Tsœãs­éļĪąŽãf×@û<Ō‹KšĐ°Â;6@éOFĩ3ģ:;Š$KYMēī™cc…°q\ˆŦĩXŲŽĩ=BļņåąœpJëáŗÕm˜‘¨Į2äqiÉ$žœjKO j—Kyržk°ÂĢɂEt֖ФiÖBØ ļ94ëņwc4’ ĀŌ‡Ô/Ôá'Ô'ĩÔbŨ‘, A%ÃīŽÕ|Ū]jöO6Œƒp L ņÆp1Vãđüš•ûj$QėŒr@•ŌxkFHlmļũãŗ7ëßEąJö9/ŗéßô ŸūūđĸŊoû6ßūyÁE>ifqZŽá]:UKÆĘ9fõĢúĮÄkYtrúb1žL&~šõü+Įõ §¸c#–ÜäüĖyĢö%ãXÖā™cåŪIĮá[B’Jė˝­ Ë­wSÔād–čŦmÆØ×nk,Oshĸ8Žå‰GEŒíüę+ĢđGĄĮZžŌ~f;œđsŠĨ–Ä9ļ ÷÷Äß]Ø XĶ<:ڔĀĖ\Ąl3ąÜOŌļ-4‡’!!ŒGœōé]m„ oÂDc@bGÍĪAėO§j,-YTxG“KŨēJĒNíŲįŪšX­„ Ā?ʤäŠôŗēŊ„ÃjLP´Īšûm(ĮדYđYii¨{I¤šHų„.ôĪĄí“Ķše8ö9k+iõK‘§Ë8’b8ęē&…aĸÚĒÛį)PZf9cPiZ-ŊĨąoŗ$M!-åēŸ_Z§6¤]5†žÆæõ›HNBJ‰7-q.Ŧčdŧ[ËŨ–#8šâ|A׊/ĸŗąr–0’n$ΏõÅiŤ]Îâ×íy[ˇ]NOÍ!?§ĶŪ˛ük¨ŨÚ%ށŖBŅKpfˆrĻ?ZQVvEļÚÔäĩI,í}#KEÜyŗŊ.=ũ=Ģ:Ø´Ί}’/•ąŠÛŊđbéZcßjz¨†ā)1CĀˇ÷k’ˆ¸Č* ũā:Vēt0gKĸŨk÷š°ūθÎØS!åT{ö¯WĶ­n­-ËŪßK{pW'Œ(öQTŧ)mk‡mM˛¯ī3°ęÍŪŽjÚ͖‹f×7“P>Uy°īXIš;$mŲ]ą^ôĮlfēAE,ā€+;JÖÆĄĢ=Ŋ¸TļTČbŋ3WœŪxöã\ņT6ĸ6MÉ pKqË…z‡āÛo$āĐ L“Ŋ‚ú¤Ž…Xģą^1Ā Tm†8]¤”:&rޝj¤#ËŊ˜3ū­ņ§|ÅŲją¯L î]Č~Ûs:ƒ$ī|tÁ#ĩ\šŧˇĶb î¨ ÉÁb{Ô­ÖŅH2ō6ūĩ´ˆÜy— g•ˆųØ (öĒIvˆ¯î⸌böHŖl°ŽXŅĻ\Û–ÚcŽXČøcõĢw";-˛­ģË)TpOãY˙kÔ§™ˆˆcåˇļ]īøˇAC•zŽÔ_RŠ4˛ĐŦĸ…zų­Āž‚œ–š’X‘¨^ŧŦy"1†ú ¯ũ“Ē^ˑ7Ø#9 ĀûŨĢm:Õ|ë†"12VË…ŽĄk˜fĶFļaqráåŧĶÆjäņY^Y¨ĶîŖ¤I#Ā'đ<ÖnŖâ[{ˇÖÚxŧ„ļäá==MW3XÂÆę[dŒÁ9Ā”ĢB>íÅąĢ ˇÉ‚VIdy„tūõ4Öt`n 6rTœøV]§‰ƒēĮkbÍüõsČwĢwvö2/۝ŧ™€8“øUFJZ'qėXؑŖ,lJõšÅE9f )^XrAĒ‘^ˆ!i ÔŦrĄ#+üęäJīJmŨœÍk`šJ5qę įuËéD:}IJįpU$‚ääŸOĨ]ĸɍ•‡%sÎ*95ky”HĖ™åTrOáúQ&¯aĸí´ kbcfČRI$䊄ŨĒÛ.ã€*sАL’ŗl.H=M:Ū0đŖgđE&‹EQ$/ŽBᘂnĶbŌÛvĨæ,rōsšątĒeŒ(ÉéĀīVNËHTšãÎ1YĮYZƌĖûn w,Ö`¯p:×9Ž^B։0„‚ŒT0@úvæģ(¯`˜ūîD,ŧãŊSÔtë[˜dŠä&$0}ŋŪ›P’fs\Ņ<ŌŪî9u%˜¸O­ŊK’đ@9ŦËŊÉēŠxö=éÉĻ%ģ36z€ŧ ö§f“GĒæ“ x6 ŽāTuŦ÷Ûē[PĖĢ*āڞ—Šd]AČ$sTu@A\F(AÎ3ë\˜Ž—.DļĐ XĖd’‘’p8ĪÖ¤Žu!å"Ą<įš¨ÍÂ]EÄr’ppZ”Néļ üĮ8¤āĨŠöe——ė#ėÖĨc€JŒ‘QŲ[^ŧŌÂÕø2HG8ãŊmé–q[ÅŧŪÄO$jžÆ Ä`dįœöŽNļ5ļ…‹r‘[,*ƒh䚎$ŠŨœÁ $ļy57›ŊĒÍ#„žwŦũŦ<6p1 ī#5ŅmŲO Ę$y%VqØ+2æäÚ|ŅĮ´cīši’-:$Î^Lzņø æõ[™õ&ÄŽR/ųæH­Š§%s)I Ŋņ+‰BÂ^æä’ęåTįƒQÔ ķ/Ũa…ŽJ/ŪjŋĻÚE`[‚Hų‰¨oe–åÚu…í8ŽĘ8uŧž†R™œd‚ŲVe' į­¤iđšûC’÷'g…ļ™ef@Fi°H,F?:ׅāVW“hˆ\Šô!JWfR›z#jÜ:ĘNėgŽŨj(;†(Kƒ•ÉÅW:­Š„›X%cˇ# ?šĄ-ÅÛų…<į#*€ ĢõcYWÄ(E˛áŨ WXa>sɜîڃ$ŸđŦ†ÖėųƒÂļå€ “’HĪ_Jė6Ī Lnæ…2ŧ$kÂū=IŽ;U´ŌŲŧãu IáI¯rIsMrĢ-͖ĻęŌ¤€W“Vtë-‚ 5.N7Hy&ĢÅ,ōÛlKk[hp@`܃Sčē ē‡í´ōEûĖÍ&N}@ė+žŖĒšŠ{‚IDŅÛ —ild…č+ÄŦœˆ^@ZIČUõö­÷”…V# w¯3ņŧ¯sĒ. Ō‰Ž.Õ}ĒŠüÍT¯k#Gd‡\ĪŖCŧ—t@,Ēßũjį4K¯fģÔļy`šōÁč_×âĩŌ4xtՑ$™°šø}+õ9Ō;fm‰*ąņ“SģĩØˇŦŨ‹{F…°A*Žžõk3=Ũ­ŧņ9G# œgqĒ÷ˇ¯q:F[*y䊺-ėچĩdÖ1‘2X×oŌĩŠŌÃąąŖ9°ņĘ4€Cub[Ž8•wzd˛ž¨nųVŒģT7Ū~GÍíô¯7ąēˇ˛ņ]õÖ¤‹…,X/ 7+ĒԚšMî'v’á†ã)Ī^žŸAK ŧŊAœÚ[€rō šÕÖęē冕uwqvČū{U‘-žą§Y†@ppAŦŨ(ˇrlpÖvĮÄ Fn&äˇûŖŌģO ŲCœŌŖ9šf%ŨÎsŠå#—NŌä}‰-ũĖdåĨo‘k¯đåüڞ”&“Ÿ™†U ¨§؂܎Ši˙hO27áAØGB}ëîŨĩģS•Šņ ą!OŋkĻāâvô §s§—“ą—Ŗt"´˛{Ž¨ķŲĖú>­öKxnõ ƒ„?NØŽĢNŧžK0uso rsærjä°Cym%ŦąŽ*ā°ŖÚ¸›Ũ(X3%ô„Œ˛Hۋ}*-ėõØI„Kjé*“†ŋ•+H“CÆã͝W—jj6˜ģŌÍÄB<†c}+ Đ|^n획Kc éëî+X´ÕÅÍÜč§°ž@#'8 e_\ĩ¤ 9ÁrXŗņ&Ÿyyödœ ĀÎÖÍEâ+Y¤ąķ-ÂoVËäUą=ތ{›•kMÁķšI<ô5Īų˛Î­ –Ų&K‘Ķĩ[xŽ^/ Pu ڟgÁ‰s€ ĪįQÍĻ„>Α–ųTp* 3K¸Ŋw’(ŗŊ°đãZe€žŧr8HÎ?úõŲ@‘Û…Œ QĀéUm‘eá‹xq-ë™ä?Ā8Q] -ļHĐDĒ1ˇĒw7P ŗ¨'ŽO÷Ē—ōíTŗí7R|¨Oõü(ąĄ˛÷1 Pe<ĮŠ-ė#rßp$’ŦK ēŨ›Ũ^äŨ\pƒ„AôŽ‚w– Fû2( sž0)7Ø\ŊYÜļļŦŅB#3€ ^ãë\äOuŦY\<ĪšË˛ÆŊGJj?üL.$•ĖÍ;€2éWĨŊ‚ĘÖ$dpĒŠßßڝžė›§°ë8>Įn Ė`Du–ÜČŦ\ąČ äĨgęڈkyTđ@PsŽĩXą´ĩ‚90Œéš/ ŽWžInuFĪP~iöÄČdcМ pH&•o-Ņžr„–ĮŽ+^ 2 +rI;BhLv34§™^GL5‰Úz*Au,뉋sÁ¯›•Ød]ˆ9sÅfZ]›Čü҆]ĮæĮQDž‚lĮŠUŠ=@“—2Î)˛Ú]j;ž8YŅSđŠtûĩëīFĢ1=0 Øŧ-˛Ž8Ø:PúLVRÜZI 1G;qČ5‹­ZŧŠģ>_+v3Áé]´šmōŨ`ŜXt5KQđÄú…ŌI#ˆŖōØn3ôŦŊå?!'ԗEŋžM6c厤Ŧ˙Oz- ģ• O.eAÜW8æŸhš‚éâĶˌ,Ŗ\pqYúŧw–š+FÍ€žHÛČôįÚŗĶŸĖŅIt&Öôë›DĶu §3ŖÎÃd¤ é.4í2Ø+´ņ&$ Zã/Ĩ}KÃAįŋģvUSˇ€ŠËééZū˛Ķ.íc–æfmĘ\sŪĻo–7onš{‚]éē?ˆžÛö¯>ÆčíhĮ ŠŨ›Æqi>BÛY¤Ô°j˛…‰u kõ€ëœŸ˙U%MõcRîn‡˛‚@“Y 'czD´ŊĶZa$mĘ>•Í™´K›Œ\ÜÍ厤Č`jÉđ†•q™íĩ‡Hö’>~GáÅZˆ´ū°ųŒ2Ëw`ũ :ÚÆūÜ(ˇÔ‰H ë¸įnmÉļÕLčAÚI5z [SŗU’ōÕĖ'øÕpEi}4d[Suīu‹XɞĖ\F­Ÿ2'ÃcũŪõkMÔmĩiÖ8gw˜‚|Š>B)t}bĪRŒ$7dũĶü­˙׊ĩŪõVRÂĮ4G õŦüš-'ē,ŸZ+LeYfšS–püíô­8![KhŖß#*Œ#n U9obˇ1[5āiB€ĶIÆī§lšÍģŸRŊ¸6ZBˆøĖˇRŽ™ô^ŋj‘77Xš2ī#‘žELšt9‰qĮāU Öúb&‘înXåĨį'ØUŊby⇕Hʑģ8 ŌrėļŦĪÕ58ŦlgšĮĘ,ŠpG#5›5ĨÆĄŦĖwĘiøü…CaK˙{åđY†šŌŸS†ŗļYc߁ĀĨKķ ö/ųЧŲ3;ĒŽy“QÍŦ%ģ$hĨä8ĀĨsZīÛgĩˇ{ԓÔ`f‰g+, q.Iã’i7 ¯Øĩ˙ 5Ī ˙ž¨Ŧoė‹Īųö—ūų4SĐۑw9}I¯ŖHō¸uæ­¤ļ,Xŧ€i4›c,Ä`Ž}kĄ:ߤ–°Ę‹ ‹œ|VüÉhq¤ŪĻ™ĸOĢŨ‘J. šč+ŋĶ´­7HŗVXŧĮ`A•šg?ėû{Ô0CkáŊ*;p›L€÷ä?ŪqØz Ŧ’jĩЎÚÚF Á|ÉķĐ 7Ô{P)šŒ38ŽÎpwĮøžMÉõĘZÛš‚0Ā#äã¯ãKâ­_OĐí­´đ„•Ŗ#Ķ?ZķũfâōäL3B|ŧ)-UĘzhz~ģ¨Í3ÛxoErg“W^ˆųޟGĐít;$ˇŒnqË;Kzלü4ÔlmįŋžūtŽëŦŗ?%{ã5Ąwņ2Ôëq­d’ÍIV’  T8Ŋ‘q’Ũ–ĩq¨?—ib„ 3žsŅøÖVŒgˇŋvz<†ÜœÍ{/ĘIõúTņBHwÅpÎHÎŅMgŠkŪ$rA8€œéøP”­kÜo{•ŨŨļŸs*ĸg=Ír÷:Ü2\KsĻڃ3 ŠūUQXŪ ņΕzm!’÷Ë$ŽSjƒ\~ĄŠę:—2Č#„txœ`’Ô™ÔėMâ-fÖI%gŋŊ`A¸Ž1čĸš).™pŖv¯Ik†Ā‰<ú §syBF#Ščk§C͍3Ś΍dđÚ^„˙…†ė}=+ûYŧÔ. ×sÉ<‡øälŸūĩ'’Šō¸įLŌ5¸ˇœ1čŖ¨5VļÁrDļáĀ õ×°|=ē3xgėī)2Fî -’kÉbw†pį9âēO ëVÚ-äŌHģ$l!äŪĸQ¸)YÜôøŽÚÍÚ+øŧ¨Æ J_!ÍJē´ą<īu Ãl¸ō˜6YĮ¯ĩÍGņ'LKå¤Û7Œ`GŌĩíõ+ Ÿ.h­QP‚UæųTZÉÅŗe$ēš1OuĢÚ4‘ĢÚŜ+¸ųˆúUØuZÄîFFHĮOņŽj}Fâ+ã9ŋĖ%‚,cč*XõHČHE1…@2Ošn‚§•˛œŦijw—IjXĮĪ܊‚ËÄzLZnæģŒ4_,Šœ’­Cwso{jÖŗ\ÆŌL„‡W;ĸøBęöâS,†ŪŅ[aÚ>gĮ§ ÷Ŧå 't Nú’xČŨn‹Nŗ‘äĮ˸eôd\Á{¨]´—ī(Œ ˆåĪÖģ´› Ô%” %ą–'ÔûŌ‹ t&ę顡´‡W=Zu&’‹ąVg?ŖÛ ‹‚ĻÖV€!"@0€úfŦjpév[dģdeŦAwuīŠlčZZŧ— 8)n2ļLKģ–gLKØáŒŲi\ūžĻŽĶV°ŦcFūéŠéZo§€ōŽ NšĢpŪnĄŠ˜ĐsļËĮü+Ĩ÷ĢĨURØ\.XԀLUr|¨Įvåk+Z*ÁËÜĪ´°ąĶ•U™ŖšÍAĢŨ5ĩ›MĩÂ'c5z3ąÜ VS’ÉÉojŠ]7šÁš6dy5Hv9_í;š™V4ŠÜë™dëŅŠ­[ "we–DōƒIéøU†‰a™vĸ3Š;˜õīZNČЂÁˇĐSq]†Ak Ē–Úd˜K“’h{ÔTSŒ~`9ĒōΠ̃+Š=UE+Ŧ1ڂ¤€q¸ƒš,Ųiš ,—Ė`¤ŽF[áL7v낯M ‚q’j…ąˇ™ƒ˜˛ääĀ'Ž•iQ?wžH9JIĖØ‰HdxŖX˜’G5Fę•‘\ā•rjYŖŒĖ%q'tŗ>¨Īs|Žũ•G})nuSŋË1sÕ"䟩ŠŦÖčFZRŨ sËYķrß]J:++;e‡bF\ādŋđĢ?Ų–pČ×  ž0œ¨5JßWEE ’O"ā2kj“*ŧÁmȍ[sÂļ…woy‡*čWHՈcœsĀ+ĄĶŖ¸û?•XōÛW‘Ta тqNžâįh†ÕšsƒƒĶŪŗŦųŅpJ.åŲė!'kOžAČY$ŸĨdęövĄ#\ A+œ“ūfĖ$O‡“Ώæp8˛ŧGaÄĘęø¸ |€dæqq.éĸ”enĻ{kKŲ ‚1ûÖTÉcíZ~ŗˇ´ÖŽšG•ĸ+ÉēB=ë•Öî`ŅėK$‚îTāĀ9'ĩrŪŋ’mrMM܁HY%$ôõÅ)E[ĖQoä{ŽĨ¨ĨŠļvmPY‰8W—jū'°ÔĩĨÕlmĨ8ŒaČ˙ëV/Š|V—Ë%ŦRK;¸ås´~W>ĄžĘ„š+8ÁāæJZߊŖhąs}5ūĻĪ1ÁSÔM+C ¨-:‘ÖŠX2$sI"į#>ĩĘ%pzã‚&´ˇAķĖ Lg*B€@Á5Ĩá{ąũŊn™Q! w3íPë˙ÖŦķēHÖ4lĸįZˇiŖÍ¨“lĪoh-Ôn)–ß°gvīM…;ųĖ—×e$ŪZB ‘ŪēlīŒŌ=ņĘGîOjåĄŲļ c$ Zz~ ú5ÔwîûÁË(8Ī֕¯ĄRg°x[Äjö’\æPHXŠãn3;Ÿ­ua™°vÖ¸ Ä~ŊÔž×ii¨Ę0ÅÔ.zwŽâ)ķ’ÃyÎH9Ąé ‘ÍxŠîõ&D–E`#ŒōŲõö­­6Cũ‘ aļY;SŸZį|Aĸ]]ßɧ#°ÕnČâēx-Ĩ]6(UpūPV;°Gĩ”cfØz~–˛kÚ°´´Mʄ–b0ĸŊKNąM;O†Ō3˛(Ôŧ“ëTQ,t ’tÎŪŦ­%ũŪŖo,×qd̜íŖ´,ęÚ¸Ō`G ģ, ×m%ϧ¤‚H\äg*į *—‰¤Ō%XHiŽ1ņ\E¨‚Éšo=¤ģd–ËõíøRr啘7fz-ÅēK‰QXL>ëgÍÔÅĩåŗ mÄŗÂ "7#w§ãYVū3ˆEäŨá'=2xj¯sŦ2Ė—1¨ÆāN2+h¤Ņ.Häõ T“/™Ąژã>•cÞMFu(î^eĘŦAxĪ~ŊžžõKW•'ē¸ēōšî ̀+ŧđŧP7†mŲXĘKxŊL"’dĨsĪ/ôÉmo„R6.•ŽŌ‡“čkŗŌõXõ+dˇl‰ĸŒG2“Ÿ_ƙâm,NcŧĩŽce_ūĩfxxí)IL<ˆw`ņZGŗ ˆ¯öŲČņšåO‘Y’Lgēf?(۝ đ+{ÄŠ%ŠāœņˇŊs°â<‡̌Ž€Š|Ē:mhV“ŦâbÅ" Ŋ ÖÅíȡÅŧ*YØd•äŠh~ 8Æ9™qĒYiđ&¸Rį¨-šĻŦR"M*ōō]Īĩb^B×§&ē +EˇŨ âBgęØū‚ŖĶ§Ž{(Žc9WPFz⤞öuTlc€ŖŠŦŨîj’Jå URr{zĶ.îÂÂĘ܌dp+=.˛˛K3  ÆÕįũzÅKŲgĶ.ŽŨÉ šQŽvzËxsrˆ‘´Ĩ•DcŠĢ< Mg,ąŠ'œvÅ!‰ßLŌĄ$“,Ģ”ė{šŋqPkŒnĮãԚ—&Ų-XŦē\ˇ lęĖ7cļΑ˜M?ÎāĀŗdą5h€!—9=6Dß6N3ƒÚĩWļĸQ*mX”Ԑ{•ƒŽë0ÚÆąÍûÆ$m‰;ˇŊtwa’1Ąb@y¯?ņ e5;Ut`ޤPŨ˛MFí˙ąß;A+ŖœUí´Ø$žxÉsÚģ˙Ę1`]¤ÆkĐ´K(m4ØŧmwŠĄ-5W&‹L‰!XãUsī“ū5ÆSss?™/e'€=…LŽÖ‚iœÍ†Ÿwö봒 3†Gå'˙­ZãÃop¤\ēŦl(ŧą­ëiūĐģŖËŒp™āŸÂ Ô.âŠ7Œ0aܞ˙^ŗTŖ{ą¨čye۟eeŠ^iÆåÍēĘsƒĪøV^žļŠeļ‘ŸĖV&6ä}+kXxĨąņ´9Æ5ZįG•õ›i´Ûi%ÉÕzü…SWÛŠ)´z6áī5„&DŽYJ‚Ė#5ĪøJļđώkâ+‚x ysBiôRUÔwˇfkBÜ |ŨęĨÔV“Zŧw3\Š-–áY)YØmmÅļ“â <rC/ ‚+”™5_HD}ˇG”Ÿœ˜ëBÔnėC[ ‰1Ÿ•{b¯]ø…į&Č ¤÷ŗD`âôØLī,.ôÍNÎ+˜eˇun7”ƒčsSYišUžĩˆ¤îX!õÍxŧŠug+‘¤‡]Ÿ„ôģŲuK;É.^dt´QIŪásoÆ7zŽ…ŠĻ§oR@ëĩã‘2 úĒ€øŽ“¨tĶ•ĀÜĀ(5čúRj6¯m>6 ínyŽrķĀÖ7¨äŌ!Pų|`{ՔԖĮ"ĐC¨ĢÍ}4ąāǧ=ęģxl\’Ȱ€39Āü=kš°đ^—`Ia$Ãą”äSõKXÚöQ#"Š01BŅ’ôÔį,Ŧ4ģ+9$–â@cãÎn?%ĒéŦŧđ°ŗ‹Ī8ÃZŋ$"KužņˆĐAĒöŖo)“ė‚Ū91¸–Ā?…SIŊ‰ģ2įĐ%ģuž3om!#印ũuŌiļ×öQ:O¨@ōÃđTĶ%x,™”™Î2į Ŧ‰4ĻÔn ŌjRH#ų@ĄÛfĝļ:kM2Tš9ĩ ûuv9eGû?įųVן§iÚx Œ ŌOŋ<Ÿ­q–žĶR`÷Í:ķÁäÖ˛ÛhöėĸÛNŒMÆÖ˜nÁúœŅĄI\ŠA"0e läb˛ĩũIb°‘Š#ktĒē†Ļ-ôŠ%‡”ŠÚÑXú“ģYZŠrÆI1#“ëI´ƒrkųĖm§ÂģTŗā``Jĸķ‹ÛûĸT(!PcÛ58‹ĪņŠ„pķö&“J{TšY&PIČPzYjĮĐą§h×2ŪE R°ätcÅuú6ggz’ėß38Üė9æĸŠBŒ¸Žjõ™ uĪĖd^OSÍh8¤tūT_Üũ(ĨĪûTTęmĄķEËÛŧžKąFÎ@¯bđĨĩ…ŋ†ÖkYæ•7K,ƒ”|t9čŽËJąĶĄo´É“Ž Ž@ĒW:œí)‚ą[=Mtōķlq'ĘîÍũRęËMԌÅŨ™[æ,įĶØV]˙‰ĩV1ŋA 9`GōŦ‰5 ™ Ōt-ŒšĻc¸¸}ō)āzÕØ›“^ęwz‚ų×RK;“¸–čõŦā&[įŠë[QiRj`wyĪüŗEÉ"ˇĶÁ7––ą=ęĮîNyaPæ‘VlâŤĒwYģäÖ•ĻŠ^BfŽÔˆ”ŪF2=Ŋ í-ė-"ˆ4š‡BNhģšW€E€›n*S“Ø,ēœbX(E%ɨčAĢ(#ų(ĄäÕû›d„“¨‚V9[ˆųSūđėiĢ \N‹”ōOŨ`2MZŋPqąœĶ¨āÂĸw`ŗļpĒ2Mtļž‰ņI§”Ž\ũ)o|2ÚuÔsB… ĀnëUdIÉĪm¨ē ļ’*ŽHxÖ<æė^-ą€¤Œ@D'5čŌŲbs‘ÆM\Đô‰ĩģĄko,ːŖÜ×qĸøØZĨæļYp2ļāôúûûV§Ÿ+YčöÂÁ˜Āũ[ Ŗšú QęʖÚ…ĸ2[Ãdu-H€w§ëŅEaøšÚúÖC&Ą4knü¤qš ŸCÜפčÍgûéĨČ'ʏ…^äũkø“nī-ŋ‘i3ãæy@;Ĩ(Ë["Ü=ۜÕô×cŽ8Dbēī\)4īyxĀoŧ•ûĄy$ûôÆÍm4JHuYœ í´)ŲĄÚLFΖåĐŧŌāqŸÃĨ96(ÅMÄeüĸBąĨä`3Ûn‡ąÅlZŨ?ØĐĩģZ \ˇ™Æ+•Ņît-:ĖŪØĮ(yŖ2Î7HÎ:…ZuŨϧĒ2›ų¤ˇ‚F]¤|Í0÷ūčŦŦŪæŅ]Kš§ˆâŽf‡Iˇ7—c$ČyHũËtÍ^[ęúԈ×7&åzV$úãúÖûXZčēv59â‚Ņ)§Ã&TŸW=\ûWGd!ē† ąn7”p ŠšĢDŖÃ>‹I—í"7y āÉ!ĀAÚˇä–æRc„J:•ŸČSîåx-d›l“:Ž"Š5™í÷™‰íb´ ‚6ų ÷ôĨō­XljA"ÔõÜĮqÍ9„Q‚ŌH ûœš†)n]2Q†äŒdR(H´žX$į'­Vû SrKC9ęHÅeŨËt͏´F€ņōŒšĐēt$ÆÁœ „<)Ŧ)^å§XdU˜€iĨ܉2ŊØhbRn |’ b­iĶÅ+lgg$rOšuĮ‡ˇÂJNī09úVRÚ_YfvC‘´Č5mόŨĶ:h Š&8@ŽÃԟ)W€O>•ĪŨMzŧˇrÛAĀyĘúŠŖ>Ŗ-ÚĸZHĐ.]¤ÁSč=Mšj] đ.3'—ą”Aã#ĻļŊ>XŽHđā}ÍsO­Û3ĒMö°8!×UØ5ÛydXī-ž<œTiĐĨ#^öæđB^8â–02P˜VlRÁyķ<Â㍤āUôˇ[…i,ގúŠ9"ĢÜZ<͔@ŽŋxŽT&6v˛¯îՑ‡CŪ¸mwL[kâĘüģfs´ķ×ņŽ–â[˜á(wœtįœķ\CrZBîåI_™˛X˙žkŗ›o] Ģĩmĩ"Š ˛Ė]ę[šuĘ!ŖÜ2[¨­h-Ą†Ņc.ĖXōÄg'ü*ĩõēĪd@cšIvãëí]ŌJĖÂ/ŠÅ^\# ŊÖ#‘Ž0jĀŊĖ€å”IčEAujRY ôĪJmŧļ# ŌšEęjæœl‹ 2 į9@h–ŲĨ˜ Áa$/SZöÆÖ链@NIíP]Eļf!0ŊČ5uģčsÅžmGØé‘mI\eMhŨŪ­ēĒOd ÃŦЁ * gīÕ Hd•Ũœ–c’OjÅ;̚˛ã_,ķÁG8'ëPM|ķ°´ąs7€āŸz]?K’ōC&í°!#pīôŽ‚ĩĶâ"4HÔucÔÖŪҏ¨ÄžU{˛ĻĄ(KLË¸ã“Æ?ĪĨOsoVIŨ!S—= õŠ’j]1ŽÛĖíÆ+"䛕ļĩ—ĪĀų°sƒP§ī¸ėÛ7l'IX­ŽØ!!ˆÉ5ĩ¤AwŖā„´.Z\ûöOHŅã"ūņķūŦđ3[ąËĩōŋx’ *W5ZŽVļÆĐ…ˇæ˛ŧk›ģ‘—"€zM€Kpí$ĖÉ8Ui#Ū œĮöĨš•ďŒnsČÔŽ$žAš(‡;¤č ôi7(Ģ™KFË2ę-lBÛ*´08Ë\ø”Ųę2Ûng‘H2­Yū'ņ:lgNĶ_78"iA˙×5“¤[šqšy3/,ųûÂĒIX‹˛‡‰žŅhÂ;¯ŪĪ9,]žö? Ŧģa}Š,vVō3ķōÆš$ÕëkījË ļéd'ےŋ ¯bđ׆-|7jÁ=ԃ2JG?Aí\rm3dŽx˙†uM ,šœ‘#tbr?Jŗĸéē‹46¨Û$Â3‘oÔím/ėf†ņTÂGĖ–‰k§X*B¨–Ā Ē“Sžãhåõ čVšJŲ,B[ļ\ųęØ úŸđŽ$iŗX¤’ 8ßΧĀĘÄļ$™‹1…öãKo¨L-grŧnār@Š”“Ņ &p6k$ŠdfAÔŽ3ššö)ī/žmŠŠ€8 `ŒŅÁæĸƒˇ¯ÍŠŖu¤āŒ6ņ;eŖCÎķ¨žĖĐšqq …˛ĸ¸Ûˆļ€"Ũi÷Q† ) úsū5oÄ>%šMfŌ‘eĀy9ã´ē\nHŌmjĮPē–Ō;œOˀ>\֖‘dÖ6Ŧ“]4ī#ÜÃoá^Ká lÉæ›¤B#R –Á Į'õ¯FđÆĢęŨ$k#Ē•(ō.ēįhô ûÖ°"o^ÃŒËŋAÁ¯40ĩėÛ CdįĖĪĖkŅĩû9ĸtšTķBã%ąŠķņ­iúFĨ<%R{YI ,ŨhœwŽäˇwaL0Íæ$’N7H7Lŧē–É„r)Q’‘ž*›ûuĩ'ōÉK+RÔĄÃ°÷=ŋ sÜ[[Û2D‘DNáÉ#ëֈ'{=ÁĨęaÜÜhyr 9ËđŽ—ÃZŌčė-$f6nßyšØOĨqvíömFh#RRFŨx zôĶáË ,"„ÛŠWPK%ƒԞõ˛Ž„ŨŖ¤0̏)r š†U‚Ō dĘÆŖ‚įŠŦ jķGu>ƒ~ÃηȉĪĶĶđǟe”h°˜J˜|ÜKž§ûĩĸCŋRžģŠGs*GŒ’;×rˇ7RG IāRÚ]ŧđŠv,ā€Hä“Å:öä[’IųیwĄnf=%{+/–âLžpd UÍ#BēņũĻFhíŗ‚ÍÔãŌ˛m-žbf¸’¨xZôũx§ŌmĖ †5P¸^p{Ōl¨¤ŲfŌÕtë%‚UÂŠä mÆæ20ķIΘj-WZ˛Ķ3Ę2:" ļkŽÕŖ¯ę:ÍȚúā¸<*) Šąn]ŽķYņė×ķŊ†‡įjˏ˜Ÿök_Ã^š´ę$ŗČC2ČZŠđĪH,$՜ŖLÄĸq’€ZīĖ›PŗžĐ3–'‡Ļˆ#ęʡ6ŗų@[ȑãä įõ=|Aîĩ%'bŽ ūĩO_ø…ca/Ų´đˇ3îðåTZĮ°‡VņlĨ÷˛[ų¤'ŸÂ…Ŧ“Ņ ļ6ŅĪ,JÍq#Ã?ī4Č"ĶŦ™T\ž0E?Fđĩļœ…#@XũéËõĢrh›ŌH§¸)TG֛hžVyWŠ/ÎĨŦÍqŧĒ ¨SƒˇšÄšô5¸†åĖ%ĀÉ"ŊSXđ&›&–églíryV–f÷Íp֞¸}IíŖŗy&†R8SīY4…f™‹iĸ\\ģrpN3]›áĮ•Lp!r1ģj˙Zītß@Ąŧ‘ĀTųWükϞļĮihŖ“’k;IîZįļ_…ÛfõÛËĘm<~5×iMŽ—j–ļ‘0HÆÉÔ֜ģŲ˛_<*œpļĀÉROš­ I"'(z6G¨ Š B@bßģVˆ āpFcbĨžį†f9ÛäM qšų }*­îœī7%PđĜ.+Bâd rO^q\ũõĘļ@”–nä‚~”ÕĖäŅ;O ’ŗÄ°c*¸˛ukĢ™- ÛŧÆ# ՘æx†0z€¤āũqL}"ņ€{ĢļHԃåĸ…jNûœŦēVĄ} yļ™G+œ}:Žiđč—ë ›‹•ˇŒ|´|ą5ÔK$QÄÂÚ0¸ûÎs’k“Ô¯n­ŲV;A)ū'''˙­ML†+ÚÚąˇcŒ–mĖMdÛiĶjĖŦ×ķÅ$´¨éŸĖS`›SŖ+n‹ŧė OZŠëLŊI5ėdœ’"ČM(Ôm”Ū‹Ã‹dĒĶkW%#aōœũs[w–ŗĸƒáNå?Ũ5ÅÁĄÜË&´›k U‰,'˛šXNąs–# δV]ĸō ĨÖoļĐU^I:āpCĨÚÅŠŪ6^F,Ø<ādŌo[kkĮKé%$|¨ÃyãŊMĻũĸōÂJ‘@ˆĀ"˛ļ–EÁâ[īĩ4,û# A˙ëz×sĸ<Œ-LŽK FėõŠålŧ/%Ļĸn!"bŨKq˛ļdžĶCšŽvšiåQŗ9ÜÃõώĶSĐ0žĻŠä?á)¸˙Ÿd˙žčĢą\čņŖĒܖd…B8Čäšé´okZ˛¤Ķ ļˇnKKHúWo xLđéY¤Oļęáœdė+Ŧ‚Ōáä]ŋîÄŧõõĒuz#/fŪŦå­üŖÛ؋ Čā ÎÜ}Ē!ā[pÄBîņž‚ģ šmm•æ›*Ǥ‘ÆIŦhĩ9õ)i[BzĘĮ$õéSÎŪÃäŠÜ›OĶ´ß ÚĒ–ˆŨ? Á~g?áXšũũíūmŧ´Hĸ°ËÔm>pĶDÎ~ôŌļZĒizLŠ;-˙Ú&`X†mÃđĄ;odci^k‰mB(â´^ęåKŸLU‹oĩ`–ö7–V‘ŽĖr§ęĻēŠ­/ÛnĒ*°;›ØUkÛÛWž‚Ņd’IäČ5ųG^ŋũ|ĶMô­šĘĨ­Ŋ­ķC6Ģôx9ˆ .jÔM}åąi aO–ŗãaükÆŪéŽLQÄTå[ŦTõ[ŊBHÜð€¸HŸR}ĒĶģ%Ž‹S’Æ$ūĶr/eȊÖ2:~ΰeŊŊ:§•sv‘´’`WqĐS,î,ė ÕūĨr%¸*"ōĀ pašãu/Ūßģd[XA!HåãZ%fe'tt^#Öo4ā$‘ÅÄJA āĄ=3ūĀéšŊõœˇF'î‰ äe…,‰s8Á–R‡æ!› šė< áÖīZK”˙D„åx$úTN*ڍ>ˆĄ hÚ­Â%´,NOÎF~5ęú…mô<ė7øûĮ€§ÛükĄ‚Ō U†ÖŠ4Uš¯øÎÃ@Fˆ7ŸzȁāŊéY]ËcUYš5ÍĩŦ—zØō ¤k´dãŒúT>3kގ6đũŸM‰°ŒF ‡ØvõĖhnņÎŧU¸cgķ!ÂãĶë(–ÖpÅoHĐaQ@Āú rvVW3ŋAãˇ9÷ŽgĮ7ÆËÂ×!0dœˆ”äõũuv ŽIé\ÖĩĻC¯ë–öˇŒ6¨dlp2j!šŦŪ†=€,Ž´{i.L‚䯞3‡ĀŽ>•NM˙QídK‹–ˆ3”’„p2;{×T ,>R0 ̎q\Ն‘iá +ËéîcÃˇ.h “…üéķ\„šM[Ņi§,ÉmŦ2ĻXĮS\ ˛ÛŲ\Ãî¤äŦ˛ŪEÆyčô÷­?LÃÁ×7h€É ҆ ymÄ8gt‰UAwn_?ėНÕĐų’Đęt)mÖ{Ų5}ˇē•Á„K$ĘŠˇŒ0cПjîloVKHäw‰°•'ÛÛŪŧFMNĪMÖ­%„<ņF…d.šëéīī[—ž8´d°YĢŖB.3Šní­ Sėz\ēËØÜĮ°<ĸBOš ¯yâ+#žâūĘ܀§ĖsųW’ÁŠ_øŽÅbēŋhŖŒí$ÖTFŪ™•Ė ãtƒ ˙QO•0įgĢÜø€ÜēŪÚ Bā[‚ÁȲ~ëSNÔ­uģžßcˆdäŖwVô5įpø˛ÆXƒ)”>9AÆõŠ-ĩû› é/lm6Ŧ€ `s…”CīB‹ė.n§ ´—(XÆĖ6}øäūĪĩ[ˆG}i rûÂŗ´nĪ[ŗ70šûJđb‘~x˙Ų>ŖŪĢęņßCW˜¨u} ˆG-Á˛´Ī}Ō\IhųɎųˆ÷ŽÂíÖŨŨ4’u æŽēÕjpQj7ú]āŒ\-Ü$;+YuŊ6횀—äČĻEŖNĪûĮŽ&ŦŲaø Ņ‹ÃV’>d•Ž:…\TĘ*÷ßc9$1ĘĶX™‘IīÔÕČĩĢ”Ī˜Žr ëšŊsacek(‰IŨ\ä“XöŽ.$ōŠrqĩŽ9¤ÕËŊ+k™ofōÂF[9ÁčEž.BŦR1ę˙ Ŋ“ !1–GQ’ŲČŠĪÚ ÁáĶ{<â98;ÅØĒÍ?Ø%ą–xfųˆ` >=@S|Ī ā čHÅušÅƒHŅŨļA$ ^ w-˛[ r7ĖFKžÂŊ+ûjiœÎ<˛ąČŨĀcģ`Q@lœĮz͚/*P="ģ9ôÅģĩã0āwü뛞ɍĐĢĻyę­íiŲn‰ø^ģ †BŒ[žœŠĢw<˛7—’œõ¨đ#y9*3ÉęŠĸ•w¸Ī`ŽyĩėŨÂŪõĘį(¤ķÛĢp‘’ʆī@+B{……T‚ “…SÔÕpXšNXķœäםĪdšNĄbK+÷c…@ –ękâåīdÂ|Ęŧ’;ÖsÜŊĶÔŒs’r*K‰EŒäp{ŠÕTm •Ü_H,mË,‡å!zîkĄ˛ąˇŌ 1Ŗ.G2Hxæš­:čiŌųģ˜Ęy$ķMÕõĻԙ!‰Y!-“É5qŠz°oąŌGzú•É‚ÛqŽ6åĪJŅžæ+•=î+ŒĶ5sĨ Mčā ŽjĄÔ.g¸yËĪ9áGĩ\ˇ˛gsaęō´ō’!°ĻâŸĮĻZ›[BÁ\9ųGˇšŽjËÅ-gĻũ‘bc:‚Á~ĩ…vŌßN‘F$ԐyÉŽˆŨ/"[E%‰înŧÉ2I9b{šęô ]ø†hÂæ+58–\ā‘č=ksÞ-M‰QËEäs^ivņ$PBąĮ*žĨR˛ĩ‘Qƒnė§ŖøcLĐŦŪ+;|3Y,E-ÄöööįĖpJŽ1ŪŽŨŪ˛~æŪ–S•čb›{{+Š&ģq-Ë<°r\ŪwfÚ-VgŊ”Ír ˆŨŠã?…,ņīvI_¸‘Œą)7W@ų‡ėŅž,ÂĄyaĶĐ$kžW8Py,hܝ‡ÅIDw,HÖ)šWÆEq!WƒĀÅKĒk&ÎŒsrÅNJ æbžC3aœŠĖ9ĨĘßBe$lÜŨAs+MîÁ}Ė đEA-ė ųr(īdōqYסždAZ0„ČãŠĮšt`Ū[†cÆjũ÷ĐΘé!ĶāņRÎō(Fķ\Ö§Ĩ4ll]˜ē ‚{zV÷ƒ5 `k˜JBzWWwe§jęŗG´\¨1ã"Ļp﯑ÔōŊJÆX•'…9¨õ[)­oũ"dLáÎ1zīeđ”Ģp×v—æ;’Wh(MgÜŲßIZ]ÛåŲJ’C{Öm4ų†bۈK+–™P¨ų“‚GŊuķ„ĶϟË\"Œ ×-Ļ\ĪĻM=…älvŸ”8āŠĐÔu¸Ņnaˇ‘A :‘íôĻĸĩ‹ę'ĐãĻŋû6¤nÕUa”üņ]‡‡<] ĒÎ×ōJ#`mĩpŠ2ŪBĐŋßĮ˞ÆĒ[M,´giã'ĩ8ÆĖ­ÎÅž Žąį[4† €)q‚k#ˑĘOäŒzŠuú"ۂ_æęr*==šiDrpŒĘNĢNâVĩΧNԎĸąĮŊš–2<Įqō°č°[éÚåŦbKxˇĮÁE(ÂŧO/§ßoŠB6œŒsšëôVöŌâ;äšę0čô4ZÛÍũ[‚Æî-IĪÛa€xW‡ ˙ÖŽęŪ6  Ø ¤tÅ3Ož¨b–Ā”„ķZcjļ äãH§{•ÎZđŪ u(õ[EäDn'€ëW5Ŋ1įđÅĘÜ6/šr1Ít÷7Ļŋ( N =@ŦŨZH“Jģ¸•ĀÉo˜œƒ‘O™ØN)_o/’Ū/-Ī^Ϟ ܗg÷qœ‚NsPXßÉn^ÜąÁbG~jã–ŋ‚XĪĪ­-™™—ķ_ÍäÛp§Ŋ õz ˙ąíˇ-ë īO‘DL&e3 éQÂëwr$žNo­=Æn[Ū$Ė÷3’ōž n™ĻOŽjĘ#C/͂{ú…f]\ŧˇ(Tdt'˙­^ˇátŨ)ũôČÎrN})XĨŠcOŗ´đũ¨†6į’ÍŒk‘ņ Ö§Ž\ũ†ĘŘdƒŪģéôØŽŅLÎÜÕļ:24pŸƒąNYŊ.Ĩ;˜ú‡­t0fÔ¤i%+™;(˙í­„ kÛŦ~C(*T`ô¯7˛ÕæņŒ ĩĘÄēzŦ„dp}}Īę0¤pÂPĒŖđ‡wĸ)$ā(Îz ōoˆ:ŨĨÆŖonōģGeĸ^r=OŊtšīŠâ’i ´ŽiÖ21ŒŠ?Zķ]nēÔŽ/…ÂG 'qƒëJ)ļLä…mvęņLv›-ĄL.OR+*[(U™ĻģLg?/$Õ,#ĖqēIjá–W!Ab{c9­FiÜÜCåˆãŒpЍn‘ž ČØž‚ˇtOkÚãŠˇ°u‡82Č6¨˙īė> ÚŦ'ûBūS!_ųd¨?&û–“gšz‚sÅ(By_”c“ÎkēÖ>˧ęK ¤ÂxNãĮŸĸMile#ĀaŗSĐM´QŌ|m}ĸŨ´ļ‚1ĩšR}}ŠÚįŽĩ}}<šåō­ĪNũ}įūĘf¸1Ē’ėĮ ۛi-ĨhØ Ģ`āæŽŖ-!$ 0PÁA9āWԚ]ĩĨ–•h–¨†5J‘÷Ožd1…‚97e‰ Šõ/iZŽŖ ¤ÃWšŠÅHs˙ęĄĢ ‹ļĮ¨ũž6Á —“•CĀúžŸJ MĢŽIН§YŽ›f‘€ ØäûšÆņžö6Ō< į2Š'ĶÖŖN†—[ŋÔŲÄv1 ’Ž0ŋâj_ ^x&mIaŠáŸ>`čÃúW3¤^j:ÔfEÕmA<íUË`ÕŲ4HžÖI¯5YŒKĘ%Ú¤ū/@ZFŖŦÚ[@ķG4r•čĒØŽeĩøo$cw¨$H3ˆĄb ?‡5Í-žŸ¨Ũ-ļžŦîIîÎEuÚ?…­ €Ipā•8 ˇĒJړvØÍÂÔĖڝʘ˜åˇ$~I$֔ڜo,6Épđolaķ‘ũ3Y:Έ-mįk+Yē™’2ÁOōÍrK¨Í-Đp“'!ņƒS'aÜõŸ6(ĀÉbFõÍ#Üċģ Brk‡:ÍûÂĒ|°āæĩôË[ëĨYD[##äl“øTķ&ėŠģdŗŪMtZØÃƒĐŽâÆĢAĻę7 ˛]K Ų0Oį[Æ$ŽEÉįĪĶqI-Ķ°$!#ą8ŸŠ+B)8`1ÚlLe<šį56›‚o%”œŽ–K`…~Ķ *vĩEdKŠX‹ ‰*ēįhĻyúŌŗW9͓ĖŪ^ųÔˇ‚@2xr[ɀ’ú@ƒŋl×_ %0ĮĘH‡ –5F˙UDVˇ´…žN™ˇ(ŠŦTĩĐmŦSpc!å‹rIŦ=Fî/ 2@č ‚ŽĢ?*ŗ5ôęĸ5ŽIđXU„ˇ&BEĢŽĨđM'kØ/rĨļĨkh†`€ `šKš´íI–Fŧō “É˙¯V'˛¸ŧe2[@ĖÁķ2ETšĶîė$tÕ‹b>§ōĢŌ÷šĨĨļ“oŒ\+’I#9Ž‹äf\qĪCÎ+Īl¯aĩ™¤ŧŌ¤pŲ1ëĪ~:~5ŌZxˇKvċ%šå.ëé‘ųÕą&tī:[ÂŌ#‚y=ëÍoukYŅŅ\˙î˙įÚJ+[#+ŗčw"yŒ–UČüęū@]ÅNq’3šŠ(‘A#i$öŠ NNâ; į:}J“Ø%ør-NqëRŖˇ@#U`vâŦ›–w’N1͊ĖԃLĖIa^¤ĶŠģŅ\æ5ŋÚM+ÚDņ€§ō ?ČÖeļŽ—G<åąbRT|3}+zâÎŌĮr˛ @2C ’}1P\:ZÛI8_ß0ĄÆcü°+{+h`ŪēĪxĘ4ËÃLM9'&ļ´)´ä77ÅP¤3ČŽ+JŗfÕ­ã†ITų€¸'9šíuۛĻ)–â ād˙ëQ5gd8ģęgjÕ´ŗŧVˆ¯7ˇP c_ŨŽ`đÉt¯q1 äüĀ{Uø,Ŗˇc!tŒ°ËÉŸÖ°î͜wø@rŦ|É9É÷Ģ„Lį6r—Bk†XeĘĀNBŪæ¨Ki寛3 ŠØ8Å]ģ•’ė’ūaęHūB HĨŧ™d™@FUzsVBą9:œC]o‚üWkáØeĩŧWxd`CÆ2CWq:$$“ˆÕđą4Ôa°0 ÷¨–ē2ãuĒ=\øžZÛIˇdf÷˛Œ‘ôåķ\Í%ä—ģ<ŒÄŗˇ$š’REÆãnĩ ¸3FIÆĐz …l76÷64ŸŨ蚜W0 „đëé^ģáMüQ)Õd ˇ‹1Ãl’ŨÛúW„y,˜Ūž{úFšŗĶ|owˇ‚ĖJÅz– –üsQ?Äē{›h/xÖņË‚äuôŦj–ŪŌî/ šF;Aģžƒč)|(f“G[˔ŲszÆy2FzĀW ã}YumemámņÛüˆp[šū•šĩėÍ%+Fį]āynnô&ŧģ'˚glī\ĪÄûųn=2acĖ”„˙õĢļĶ MÂĐG!Áˇ€ŧ™õäšņSQŸTŋ¸žGŗšŌ ōšœŨ ‘ßh,×˙ eß{ ęr+ČâĩV”Į ú„WĒü8"Mū͛#Í-@ÃųW^Û´F §ÕIjŅ~ęhÍ:t÷7‘Á 2w…y$šõßø_NĶü ĩą‰%ˇE>io~{Ö?í!Ž._V¸ ä[äGží˙ÖÜę7Úī…ujK¤Č ‘ƒ¸*dėÍ!Žį…Y“§jAĮúō+rãRkøv›˜; ņY–ļS^ŨÅj‘–¸‘€PyÍ{ øv?Á÷Hˆe0–f$ļ*åeМS“ëSģ[{tifn1Đ é<ŖÄæ Üˁ†98ųĢ§K$`ļ8aÁŦÎÆ‚Á$w­1"äárĀãęúôԆÚŲ­!dķ÷”Ôą’@\ü €ĀŒf§Aķ͒}Ēų“|¤ŸząĄú‚}ĸÅÔ/S;“\íž-ˇ–ÆãķÍv˜ą pĪ=Ģ˜× di#L’°ô˙­]8z–ŧYc}LÛVSlc)šÆH$r:V>ŖhˇŗēĻâä§ĻU¤-†ųl†9ĀÍ>ydbvžYŽôäįIŨĢKFqzž‘-‰~TŽxT –$l0JéŧX~ĶcŠŽ]NYģ•=Ƹģiãˇ™ŖGÄMß§*Ž{õ!Âř!-7˜9 ũĶĀōĸ0Iņ‘ÔŠŋ!ÛcBXđ6Œ“Vmŧ5{*™˜,g y¯=üv4čc-âĮņ‘ÔSíâ,ZIH#Ö͇†Ļšē |û# ÷Šú×Lm,ĸ 0Gĩz€3ŠčQæiöšį÷ ąI<ąãĩ2ÚÂYÁ! SՏWwĒé÷6ūt(u•€Æ@íXÎZ%HՂ’~QZļ‘&Dö$HŠ#€r2Ŗĩ^0DˆÅ…ŒpHČ&ĸ˛†iîß+ĶR+˛˛đķÜžėļULōĮŸŌ˛snWšJ:Xå´mMUšH“j’s#tŲXxVŪķ`Ã̀DŨ9ŽOąĩkUŽ•! bļ !‰R5EQØrjŨv•‹T“ÔĨe‚šËÉŠuđk‹mą™cŒōåFĢH |ācxÅTžŋˇĶĶuˊ  …MB—34q˛Ô¯ †ÚČÉ# X@Áy͊§i=ĨųšâĘ2Ę­´Ī ų˜ÖlK/‹5į)ŽŌ ƒzūĩŅ\ųVÖĢa§ÂSīTöŗÜÍk¯CRģkÜÂÎŨŋē=Mr—ú¸ĶœĮl~Ķv䇓Ųô­Û­&ūč›hį)9’SË?øT0iv,Ōš˜ļS#<ÕÁ#96s7ÂäĮ܈ʰI&™ebī|#ÃČË÷W’šõŽē{iu˜ÂųfÚÉ`ycĶĨėô@ĐØÂž`w<õ5¯2Š˛ÜŽ[ęĖmÃąEi–ī5É`vãŌą!ĶÄÂ& obYTpjī]žęđ%’´Ė[%Ü`gü$ÎmaÍ͇u8Ā?ʒžĖ<Íûg‚ Ņ#b@āĩ•|ÖwĢÅČĐDG!°¤{ũ hx“Ä6ēĨôV"YHIaŅIí\ũЉ#‘H0§čhąÚÜįî’-€–mFâGŪ$(Aā*”ŦwätŠÜ†inŦ–YZsæ3'šį55即GCéOŌė$ŊŊŽ%Båˆ  rMz~‰āhÜę‘Ŧ˛pˆ˜õõ4"_c”Ō4ŠDÂ6yggģÍ+ÄŗéÚ|v7zuŅdRVXâ-ōÔږģ¤čË3E#8ÆI…c›ļQlÎę\FĒŠ‚ĐŖ­Øš­°ž ø‰vđŧze„ą(‡RO˙Z¸3ŽęQ[M'Ú2ķYËeÍzD“ĪąŒü e˛?yN¤ažūslŸģ.J…ĄÆĀ¤Û&‚î8m—ũ*]Ėr苃ų×@ū7ÖOŠĘ+ÉĖKÁ 9+éšæā˛™X…Ęô;† tļ~žš1´*„žo$ÔZûÖ#šņvĢ,IļËrŖ`“ëYņ}Ļ^g2ĖÄüŲl‚kĄĶŧ Ē_NÁjyÉW¨xgÁZv‰ <ÖŅ\]‚I•ēĨ5hĸš9ĩ<ŋHđVˇŠ°‘m v “°úWĢč> Ņ4XUŖˆI9tŽš$˙Jé|Ā#Evõ¤.~ķ(ĮĻjÛ-AD¯>偖ØáČĀ.2ULę­wyŊ†2~ęæŽŧĢĄž›ŗšįu̍Ž$)%–ۂĮÔЄŲ,—ãíĻ8Sr¯Mš…rúōXkOLŧ€#€M7Tŋ×cĖ a0€2L1Íc´W÷wQØCĸCíËH•¤ĐŨö%Gšf˙@ĶD1ØÛÁ\:æÁúŸjä|QāéôŊ1¯ÅĖrǰWP0Gø×¤'‡bŅ”y3Ëqy Ũš ˙ß"š/NĪĻų2¸26@RpG>ęâŦˆ“ŗąįŠŠÖ[J°qÎq‘]o‚5ŨGGq ŧŋš•Žäa‘ßōŽVÚVĩ™D ˜Ī> VÍ QyÁ ‘ž´ÛĐi4zŅņ Ũ,FIq¸Ļp ¨åžˆ‰d]§ ŒŽ•Æk"îĐÄa$ÚíÎ#å—4ë#¤, ŨŲę“`ÜšQôŦMRoScOģŅŦî%/ ģÉ$„9XøTĮWĐvKФš’`ŗ˙ĻÛŨːąĐ^,¯ЍŦé`ÕY‹˛ÚÄĀ’K1<*ēa-ĩ›‹+˜Ž,tV@Œ9íÅm_ęšüŅ>ΞÛÂʆËk_ˇ]Á[kÁj @ųīQ:ÖDvŋ֝äc’¨ŲÕ7ЋÅw:‰ĻģŒR~™¨žÉ ›ÖL.b1úV-æs,ËäŨ˜!P™f?ZKaYô2îu;–‰ŒŅŠ|q6âk"Y5[Æ>X‚$^BŒž?­t'CŠŪ÷.ãĐđ ¨n$†ŨJŽ:…^HŖÔ–ŒH­oœ+ #‚vâ–H/AK˜xÁ$&HëMšš" '’qķ78ĒHō9Æ23ķp/p›ŗF(ŽöôŌNx1úŌOĻĩÃ#ÜŨą)Ÿ˜đīQ@­XHĖGEŨ*ĩÕęē˛BāäÖŽņ@Û) ›hnÚt’•b náū5¤Ëk{“,hāņ€5Î5”/"´ˆHfÎ}+Itkd`ŅoĪüķ|bĻVŨ[D–™5¤‚ŌųŌ|ŅŗõôŦ›(§žæ(Ö)&v`g$ô­{&åãģ\§æ 0:õ éšu”ŗ[Z¨*0vcœzō*ã-ËĖĪ>˙„kY˙ mĮįE{ŸœŋķĖQOÚ2ũ’9k­užhėm$š2~U֒Yu˜`72ĪmlŠ‚P.ėBOô­!öK&RÛUÜāÜ×â›ŊVëV`‘<öpāîĮĨL#'¸§$‘ģĢ5íô$Œ8,7ŒßZčÛģaĖ Ū˙õך[jˇ°Í=Đ9. ĩŨi×ĖŅ€UCŽ­5Ąœ&īŠÎŪéW×>&ĩ–K’°•Y¤RšQˇīĮąĖ-oՔD¤°Ũ‚Îycü…uˇ/öTōåu>k’pœW/w%Ĩįˆá˛7 ;ģ''$֊\Ë]‰”llxR0ŅŪÕc™† ˇ%G˙^Žë—ÛÛ˛ČåZFĀ;ąķīRŨ˜´ĢGŽÚ2n&á8$˙@+ÍæĐõ=KT77Ō—\*Æ“ū}k(Fîũ “åēTVɉ˜"Š,äá9æ¸=JÚÚܕŽäĘį8rpq]ˇĒCeŲŖ€•‰AÂļTãÔל]\Ë<ÆBp’; 艋ėOpƒ>T@ĀęM 3EŒ\ŒgŌŠyĻ,8$žHæ•îÃ(-Ô)“a’˛Æ‹ÁÎIŖiĘŠ ž{y¨.œJq–=°9­MBûHiīŽÚ%#ĖĮÚ˛“H´ŠO(Eũãd‘ƒč*O°N' ãrļ8ŽÖĮÃ6(<ˋ3$d×"Ģjp“6sŖˆøŽF=+kīōØj:Ȃ]ÄÅģ2 āŠôO ZŊđļąÜâŪUHÃ|¤ á!LX zŠāŠôŸ•ˇ¸"æTIō—9#Š557C‚ÖĖęœ)`g“X6ë}u3Q Œ’%ĪãÚˇŲ$ž 1°‚§yߕ ŗMenHÆ $ÚØv3/4¯2ÜŦ‡~CÜEV͂ƞÂZHæŒãģÖŦW6ŽĶ  #Š8Ķejŗ‹ˆķģÉnĸ…w¸´č0ŖČæ@=xz yAšvdúäņXĶę0ZLÄ͜’ ¨ÉÍYdBÄ)!°BžĨĖ‹LŌå™cWãÎ(ōŨ`šÍVŽ`‘†$æö–hōɄ‚Ŧ.@Aˆr7äՕ­Æ­j\rb98ôĨ/ķ‚{XŽßÎ<ÃҞpIæ…îģģĢ5ņšPŦ$Cø:“Yæe„“ķ2õČč tzë­¤o@Už¤õŦ;m6YmŧˌE9U?xūã^“jpŋC‘Ũ;$­ĒĢAMŧ ¤cßä×9'‡.WP’ŲĶb[qįã]}Ŧ‘YO€vî^qÎO5iî!잤D™rTąÁ&š*G–ZÂZjgčļÖöĻ8cU,Į“EÅû,‚œį†nV}β1šÅ7¯ )ė‡ü+.ęá¯ĨH䀸 Ėã)KRĻ­ąŊŨŦM‹Ë īģ8ÆIüĢF WMy’4ÃHįäųz⿆Y›‘”įë]W„t†Žžē™˛tõëY+Fæk{ē a4„dĒ’;ķ\°ßq"Ŧ11bŽkŦÔėZīNh_(9°äPZ[Ziļl-Đ /<‡ÄÖTÚąrWc4Í+Y&T3“ģ`č t ’ĘÃĖáwd ä\køLˇ‘ļ\yō–sĀŦÛĪŖ¸Y'wRw,āøPĸäîØÔ­ĸGǤ{W#†: ĀÖŧq§čw+lāĪ0˙X#ęĸ¸‡ņÍāĩ1Gu0Ũԑ“TßUĶn6´Œ›ØeËI­cK]XJŖčŽļį➞ŅbŌ6AæTĀĖKâ{ÜMu|$˛XœÖ֏áTÖa7Aˇsąr2=+fO‡Ú0Œļsķ…ÉĢ‹Œ„5)­Mo ,0č5ŋÎ%؁ÎMYŋÕ-ŦՋČģČųc,j†ŸĸYéļĸÚŪ{ˆ!\†^§K čŽûžSæÉi°MŠģ˛“iYėū#æI"€l*#pkCLg.îWqíšŦŊ{Ã֞L‹§Ęã ËnúÔú>ŗžĘ;k–Í…įî‘ëZJÜžę2_Ŧ5­fæÍAŲ :ˇ°ŽJįQģÔßȈlˆ`ŸSõŽęėi×V€]´L„áIäƒĶŠÆŊŌímtŠÍĨŌ)Hi9ĮãQYl6ĩ1R°ļŪsØÉ5‡s,÷E¤É‘¸ã ~y¤’ÆÖåįH1€9š’ĶNiØ<˛„ gk VąNB؇ÃúT÷Z”`Æ|°ųÜFčz•ģYÚE BΧ ’EXđæ“o ­Ņ%žEŪ™č ÖøŸ!Fz+1YMĢŲŖuŠæ‡FÕu)ŸČĩƆ-ĩøūUģĻxTÛC›Éˇ`äˆĮũjū§ĒÎĸâ;üĮˆ…!†=ČÉ˨ø‡Q˜Gh%uĪT\.)Is!hŽšįSļŅē&Pp <æšųõģŨaîÍ $g ķ[?đ-ÅĒ>ģt°!ųQžIúšA¨čZ"Ķc]ĮåßÔˇĶÖ˛JLnËs<+Š‘*¨rDœŒÔ֞Ō`p5ũëyjp ūu˛.o5(ĀsŽ V9&™m ŧí,‘Û$×k’p9éžâŸ/.ĸŊĚÖƒË˛ˇÄeļ—#$W5§D—[`Mō2āŽŧWiuq Jņ+ÁūfĢ^Ŋļ‡ļ8<Ōß&ĻúŽŨÎ^ĪÃΔųJ<ŽI4šĩ•ĨĢĮĖ—`x>ÕzãQž}ŅīeV;rrܗ•­Ž W ōrĢ‹lLĖHÄwqI&ŪFÃäƒZzŦJʑ“ NP+>yeą¸Ū÷Lr@ėj d4Û.ÖPC€¤ Õ‰ģˆ%ܔšÆ:į¯ŊTÕoÚuę@Uä‘ŪĢ dA‡æØÜ1ūUŖwgäksTRŊQqčÎ}šŒ XĘûAy4’¸ė9ũ3M€ ĻĨ›t=áõŨŒZ„ŦĘ ‘Dyā’HÜEhxׯ7P,V–ÉĒYß9%}+Īü8.ģj‚e‹,ö8OÆģũoÂ_o)$|:d øÕ¤Ŧa-%c€ŽėË1uˆfĘä–#ķŽƒÃz<Ņę swšōAČķÖˇô?A¤D×QŖĘÄĒ>2Ģøz՛Xú`ŗ¤‰o¸g_ü?R_‘¯jņÛÚÍa/)*䓌ęj-Āúޤé$0}š6PKž z˛ŒũĻ iRāÁ÷ųđ+aæŪUš4ųHųW5”žĻąŒ]#ĀVļ(ŽÚ/r34œíú]MžœĖūw@ \øTšUÚ%@ŅųŠpäŽIĸ˙Z†Ė˛‡0ōĐp>ĩ7–ČĶŨJė¸($"(ąãŠĪ›U–i eąēu$íAøÖĐ¯ŧM1ŧÔ/æŠÛ?,qļÖAXZm‡• {ū4Y-õ ˇäŠs ŪČ Įd}2îö(•‹°E‘šÆŋņVŸō㞈šāą|Œ× ŽjvWˇBAtōHs’$!i17mŗSÕVâ܁8‚"pA;KđŦhõ6K“žØc dšÁ]:ÆåRkAO;LŲ#đŽīÃ^ˇą–=K攸֖ęĖ\ˇw4´Í•D÷c͸` iB*ķ¤6ī!…’R 9b;ŸaKwvļĀ'›ķ0%TŸ×é\ϧkt˛@šF%¤Ž`¤ŸOĨŨ-ģĖ/xĐFą\ģEy÷ÄȖ-OO–HŦWrJqƒ“Ōē­*ÄøkEšģ’I$yWvéâGjķ?P°k‹‰ÄÖ͒9iėÉg9wah.¤Š7&#Ę2žLjķØLĄ‰1•&Ŗ´šy!ōJu'žÕ Ÿé°2•ÚTcš{n's­&÷VĶŦŪŪJ`ŦŦAB~‡­kÅw¯>Û;O€c—H÷`WáûŲtâļˇ77) %#+&Õ ˙×­;˜­eŋš /ŪØõGųœ>aÛ¤ŦT]ö5Ž˙´YÕFŽä'(ĄE\Ō4 :į7zŪ¨Īc&'œ ũkĪūŨö–ŽåžÕl¨Hõë[Šâ´åi!Ķ`Ŋ˛‘V`XŽ:sœŒķJ+­ĘØî-­<™DļŽŊ”eąüéˇē˙„ ĀŠEU!]"ųXÖ—Œ,5A ŽŸk4ŒCG;âF9āõ§÷ Ú}Í­“G'>SB䞝8ŠĮ¸6>ÖâëPˆËm¤ŪJÜ1Æ6‘õ­ xĩ‚ėĐ-#‚k2ÛÁˇöōyÚ=ííą ĘųTŽØgŒúŠ‚˙Äž1Н‡‰$™íNŸN ĘŖuĄÂ;ɡÕŪÜNļ–ÁTį&\‚? XÄ7ėĐ%¤PŠ?1V`O×Ĩp‘E%íšŨø[X>ķIkq.LôíÖ¨AâzēoˆūÕdá°ĶŧŌ2ø cߚ=œoĄ<Čô?#^ž™āōYÄx K¤Kwn|čõ [˜Š•Qōኧká*âÖšŊĖņO’Ŧ%áũG+ÅŪGh5-9M„XûLSķuįōŖŨOqģÕŪ¯tō~ÉË1ĪõŽ~įPŊrCëi덠 ÃK-öÕ.`ˇ.Ō.GÎr? xĐ­|Ļ+jČdcŠÆU„ķ]I† Š–Čä gŧW7s2‹ÉŸ%UÁūUŖiáH¯ČcHâ;šÕMŪĘŽÔųYÆíŧÕF.Zßō%ėrbŌD`ķĖĀ+ É"­Ē;¨HōLZ—:lE”ķHųTĨÁps($ƒĀ Ûé[%mŒ÷Üĸö2ŦbfžXž@ĒŖHŠE‰ęÅōMicY#sæ ŽžfqXז ­(ŠiŒĮ2ŊŽ;¤E•{$ĢöIŧĀ2JIĀ?jš¤"˜Áw“ 8BNTū52=Ē ûC˜Ÿ‡œ č­­á쎎,°ŒõæŗŒŽĩō4lÕE°by$œ×WĨ\ę­´v–ĀĒíW–C€1Ž‚¸ouŖš ĪhyxIË(ö¯EĶ/ãM6ĘâI„víl Ŗ ¸ītZķ:˛^Īč˙žEGū/ūc˙ž¨Ēģ*Čį,,umkW—PÔŋŅŖ_–ŪÎŅÜũkVööËDˇxãe{ļrIõ5-ūŗĐ[Ždō_§Ŋqō$¯u(Žs!Üėdäy'ú Ķ}Ėt[4ņ/5Ė'qÉ*ÃŽžÉ™#˛3ĻpXxtũ+’OÁqu’Ū<3ˇyl×q{dd…Ä Ģ"…(1zUš+YŖ­ÅÔDqŧlíŊåe…TsÔ×âY,tZ{Ģ´2Ė’1함_ ¸t :ÎŦĘCƒÍsúÕĩŦúôĸõ3"ĸųiqîjĒטiŌßßZÅsr &ę2JwĸŦ¯îmĖ™Äą•۝ ŒuĪaNž×t‹yVī\ˇkœĒW3Ü fˆœ¨5ŦֆRvg3s§]\[)š¸AåC€õŽ_S–ŲĨTÄ ë]nš¯kq4“ĀĖqÄ8ĮŊqe”ą\œcĩd"ˆ›s§x-Ԙ%BĮ''ĐÔnō†`ŋ ֆ—a4×Đ%Ĩąģ•ˆųą”ÖNV5HŸJ´ÔīĻHtĢg‘ØãĖۅz&‹á+/ BšŸˆĨIîÉÂFF𧞃š÷ޟLŌWÃú0™î ‚0 RišhŋÔ~ĶqqŨŊ†~oA\ĶŦԒîhĸ ŦŊâŗ[iŗ:Čܘ{×<ōë 4ƒJ‚ >X’wå^‘ĩ—% Æ9ŦšäŒO(eųÂÁzŒŌokãŨœˆü8í^ãPI\ŗdܚŦĶÛe‚ÎPĀā0=ĢĶQŊ/ԉ…ĨģˇšĪsQųæk€ ’Ęp0 íĢ1Z_ŗ V0s‡ÖŽĢ]LŦȁŧN1U jcKî Ĩš[@ K]y%Č›îˆķ‘]ęiV6Ģį_ĪŊĀæ1Ķük^Đ­Ü Ú[āg€)]!ęoi0ÃmŖÚÃ0tÅ>æ!-ą‹ÎØIäŠÁ¨­Œ‘@#šE 9ߍKŧ3ČƒÉ+'{š­Ŧg/†-.%3LdĀlŒ9Á5 åĻ™bIs ‚Į9މƄ;qĀĨpž$ĐffkĢ{é[- œÃü+jmˇk™M$´1ĩ^#)”ÁpŦ¸ūÜíWŒ)ln+ĐRŧSi"FHÚß֑/m“z>zmâē}ËnbšAöĄē Ú6U Ģ(凎;Q”—kˇiRkæ2Č=­ ­dym$aŠI'YŖUēŊˇSvH#Ÿ–•Åd†ßizs[IŊGę+ÎBŸUiYcŪ‘Œ{ץ˜[R Iq;}åęĢV–oCnļņœm'ī —.ÁkžSqĸM¤3 U ÖíĀ‘yÚ}ë: (5 NŸ嘓 ƒ€EzÎĩ¤Fč,äđÃŽkÔü8Öķ,úRL“ÆŲ*ã>Õ¤dCV8›Û9tģš­¤!ĀmŦŦ÷žAˆ3y}8Ž—XœęÛϏ ؗ¤Ŧ#ú×=qT‡ žiąÄĢ fWÚ:õĪĨK(UR ާ֪ILd㌌fŸlĒ͍l•'(č[î60ÃæPF9Čí^Õā› Ļđ„W— )‘Ë.æÉŌŧzúmŽ6=Į…âēŋxÚķD´ķh/-YœØûú{SM‰ĢĢžĢymhļšF,HųT.qYļJoŽāލA*>đŽIücĢÉ<ēåR(× ]„5›Dļ0O Ä÷ĒųfHËqמiķXŽFõ:ŨSUē†ÄE§ĀŌ\˛į2!*ƒųfŠéVŽ ÆĢzČŧGˇhZŨk”‚ÔŧĒÅČá6ôŽRö}néšIdˇļI( nĀŦžššų § Ɍŗ\MĒ‘…öí5 ‡†"ēT--ĮŲЖiCšĪ֓FŌĩMV˙ÎŧԜÚ@AØ" úVļŋ¨ŗ@,íˆH# €éV›[“ļˇ4­ĩ6؋2â!ô"ąuŊn-YÚÆ mJŸ1ŗūßJįG†EŨōČōČĘA-—Î+a<-Ļy$´G Č$’Æŗ›Ič4îĩ0-4="&’mGP…ä,0°'ņ÷­;h4XáYÅē‚ pM\ˇŅ4ĖļpĄ€W¤ŸHŌ•€dˇFđj/­Ž;ŖKAđåäqŪ”ļ’0§ËRķ]%ÜąYۙA(99Ēēqĩl?f1ˆpč+œÕĩø/Ļk++˜Qwm.O,}NJéĄSUņ˜í$få^c• !9ŨÕ­eá ėa’ãO€ĖČ‚qƒ×üæ™Ĩx`%ĘË$YĮ9 rkŖ™QT™"¨$œŠ.5ϧãëčmáŗĶZčCĨČ$œ(āW˜ŪęĶĀ’[Z_ˇ$Œ8ŠŧW­G\žäJ^5”ĮČÆÁĮëYĮɸČRŠ d“Í2ëcpÖĶÅ2”Ü˙6đ=ĢNŌņmåßĩJČ0AíTnĄûK&Ė:`tĢ0Û"Û*0%ōA“DÆ’OSzÂŅ5kŠ!“ˆ˜}ŅÁ>õŧ4­C@ąaũŸ­§¸&<ø~žĸ¸Čgē˛e09B­ŒČ­XõÛí¤5ũŲSÃ(8“`’KBŽĢö7žAj y’´Ž ûUYôČ$‹‰ÆqIpâáŒi1“Žá×52ZęS2Ŧ!Œs2E %U–íâmso0u)dRbä˜ß”aXúEčˇAi$~]Äcėâē{–eĀ$žã=Ģ9sĢ4Y°š‡PŖ0ųSĮū˛&ūĩEßĒۖDŽÜˆáFl(Įũ* õ–â?>Ú_.ę!ē6Įcę :ŌÖÎõmŽįĩFšmŽÃ9lÚ [ĄÉôd?ØĢ˙?֝ĐdißķéũûV–}Åt2ŌÆY“Ėl“œxÅ^H–4U'‚ÍĀ´§ž+hCœ1|ƒŽk>Â{ÛÛ­û#‚ŨX‚ÄîfúRŠ›w‘›IljiÚu´{&,ÎëÎĮ5.Ĩ~öŅ3Ēn'< 4ryī&ØcNÔיëž7m_XM;N+HÛÜ­ôö­bŽõvVG¤ĨĘÉaŖ(ÅC|Ü\įˆe”ZE4ĢÉ3Ä|šZĀĶŧDچ´ö6ņ4öVƒirŋũf›ã]fTŌR0fōãUė;ū5Z#>kœl—H5ã4…Ĩ¸-ŗ•¯aĩ‘u hŧ ĸŲĐępHŽFđÔX(ÔR]†pÔ֕ߋâEK &Ü8i=‰öö÷­lĖŽ¯qū'‚&†X`ɡaƒdąŽ.2ŠoĩU Č5ŋvļöš¸|Ũē“9=됊w}ChfE\ØûÍW- NæũŽ‹ÅŦSK šY2ÃČĪJôO‹›ØŌŲĸD‰w˜ãHúŽÕÃh]jR5œI#ÂOĖAĀ īØ õhVz$^LQp˗pŧcĶ=:ᨛ–§E4‰ŽbŨģ\$­ xXã_ųhÕOK”ĩi†$ąŽė*iāgCķ…$Áį ’>X­I˜mV~@Ĩčn–ˇŋÚ9 ÁäcĄĒdÛ[´4ę ¸’kô­jCŪk>TCåŲ{Tũ;Ö­†,,ŋxUĻ“‚Ī#dš­-Š:ļT:úÍvm4Ëy&pØr¨p>Ŧxü)$ŗ•Œ“^ģÆÎÍÜ[Ėaˇˆ˛ UPI 0Mr÷ڌ7ĶųWw āūéNæĮáŪ’Ķa5Üãü[ÕÄHúeŗĘ";œŽXY/ö΋Ψ Ž× 0Šô¨Â!XtÍ2æ`Ã&@¸Myĩį›ĨxŠīO†ŧø‘QÎp{ãņÍj“Ũ™2O\ēī‡Ėe瀕aœ`Vޝ{uo ŊīÚ§)ęfŒ?%r+ËØęPjXDę"¸=†zWJö&öÂHPÆL¨@Ūk*•9ÉKĄÜZxŽ-bÕFiŨÃ;Ģãī{AZ Š2Žûä`78ā׌øOUÔ´]bm2–2íķŠä w¯QŌĩhžé„îU˜pĮ€OĨ>dĨĘhĨ}ËđÁqųP ‹,vdg'ûÆ­›¸m×ʒRHęG$ÕioāYvē3ŖwQjØZģDW+ƒƒķôĒIõ*élFēßjqęr>Ö\íd€‘­™$ŠĘˆĨ؎u5\jK$ʉ e†r§ ;1!äpŨMK)[ĄœlīõŪd­däĀöĢö––Ú]ēZB@$rIîMAi¤“Ë%䑐Ė<´BHōŌÁĻ…–y]Ũ¤•˛ĖN0=)ZĀ‘fįQ˛ĩ„´˛**0NjŨä ž|ۊĒäGĶ×ëYÚģ š†ÎŅcų2ŌI ČSū5CNĶg×ĩ&¸™ÍģÆHķœAQ{ģÛfôÄđũ˛+ad–ûÛúõY^mRâI‹0‚5 †ČsܟnÂŦę’ųĸ=>Ņ—{pũļ¯˙^ĒX ¤ŧKhcAdų­œ¨ƒŪŠĢč-nTM?í7ōK)œ@ caŒÕ˙Åsˆ|C ëˇPZĨÅą‘JäíãŊzŖ{ Ŧ $Ō` -´õŦ+Xng‡í˛ÆÅăqaŠØ{b’Œbī`hŗĨx– ôH™üŠÄ`ŊŗŠWSøõx‚ģžÍ &XÎé#ūōžãü+<í=Iî~ibļ% m ũØúĐV įˆĻļÖĨûM@ŦČ ˙×FėKm§ĢÁĨD.Yņƒá2>‡ŪšûŨLjžC[]æE`V 5z Ũ+Zļ’6†;¤Œņö…YĶŧ9j‹ •Lq(oš€}9éųRäŠdŨŊ‰îtŖmb$’Vb nä ]6í!0ĒabäšÖŽöÃR{‹4pæ?ŨČģšŽ'QŅ’ †ļW•ąÚ `Ī56H§Ļ¨ëË=ۘŅÕ)$gŋáSˆ6BFė}â9osY–Ō+„NģÎC7$WL".Ā’ ã8M—ŒGŌØųŽÛ]§“Yš•ŧL¯a@ävŌ\ÜF>HØ8f=aŪÎ$ŽHЀz‚Gz¸I§rf“V9÷e…X…“ÁĨvEĨĻ‹mQ:ĸc'’{Ķž€’š{➉ žŪåXH!™sščė´$˛Au{!yWRË­éÖyiīá'ĩ[´Ôí¯bCqčĮ˛*y¤]ĸsšžĒÉŠA Ęų-šWšjõÆŖj÷Báe&@ÚF3Yž k̘ĘŗĄdldŠÎ‡PIeXHÄ āŗēŖ¸Ļc&ĶąęV­ãžŪ4%”eĮ'5tDåÉ$öë\fâ + ,Ás8ŠDf,x9ô­Í/[˛ÔĻhāķCc9aÁĮ(´Î¨I5cdÆÍÆv§÷{Ô3%IEŒˇb́šxf.¨ĒHîŪ•ēsĖrÎÁ?ē ¨õ)˜šœķN1pT>XøÅVŗŌ^yEr¸ā™y9ãščâĶm­ボ““úŌÎëeNMW7DG'VQ[<°’0|z/œ,  ‰IF8Ĩ{ŲJâi=YđŖJ#s<ŦZ]Ф¨9Í+CD˜ ^Eã ^[ÛDã—öUÎ)§LY˜oiI'ĩJšdą,Lp )Ŧ˟PUšXŅ$†<æŗ/mîg™žÍm$ī 9ĀĀĪÖēšbĩ@Ō5ÛëŽ*´ÚŦŠĄlwÎ.ˇ%Åu<ĢÄžžˇ°—V"#*Ōć;‡ø×{ĨEöež´˜ĻŧˇY´žÜųĘv%É!†0 ­c+Ŗ9+=V]žc`ƒĪŠ ` œdž*iíĄ„VĖŖŠ Ģz=ŧnŌ;ėzՃzrŠWË/<OJŅļ{h G‘Ë;sąx¨ī„ktÄ8c¸ŒÕ=•„Ͱ`„g…Ë7ĐP÷ Ũ4zŽĢŠĮ™k™I d/š¯mđö…ká}<žĄqæ\ČKË!\síU| Gá]73˛‹‰ĀiˇÚŠkÚøƒXkcsæ[Ä~l ‚i=t˛ØģãkiÖHôûiä<€â,äRiɍۈ•ė™Q¸w‘€ zâ–įPn—LŌtՖā°ÛåE?ÖēI%^Ÿ´Žû—qŨŋĀVvEų”5{Øt}'ėöŠį… Ī>ϏĩƒYēfq÷#8˛kr/ _ęķ›ÛéáBs€9jÚķltXVÚIÚ¤æ'ÜÕ6ŖšoV` jŅBĶɨ¸rvĻ1X×?fC‰į˙^Šiže¸ŠûQ”VܰƒĮãZÚÆĻšeƒLH.HXĐrI¤×vhČņ€@c\W ņ[‹MŅ äĪr Œ@õĢŠãK_;ėĶÁpķ,FBcÆ¸Ox’ÃRšĩ’įy+pŦɡ íŠģ”,´!Ģh’9˙–K„P¸%Ŋķũ+._ą8!‚0.Hċœ[ˇ^+ŽíŒvęŅ&î0Mrjfû|Ō*•ÚƄ÷3{“-ˆ 3œ`U‘ 1ĀŌ‡q Ŗ­Ü,iއ@â‘-u̇PöOƒÄŽāYŠUžĀuEĘH˛÷  ļ+6ęæÉ§e˜"L$Ā?Ĩ,ÂâÖÉs?šĘ2Ā+’Õu„ē”ŧ‰pŠ>]ĸ>H­e7{īĄvæĮOžVŗšŒIdĢĀĒW~Š{9lãš9d By‡ íÍdÚ_Ú[ĻÍōĒŠ$‡"ĢŲx’[}fXŽ.VkWåYÆüzÖjQžņĩ…ĘĘqÛ^éVĘ.G\ŠŽNTÜPé“ĸk0’AvÜØkbXcup*yÅrzî—•Ŧ[ų–9FŌcVā–ŊÁŗļ‰%Āāō} 5‹ŠDˆÂRŒėŒX*įVė¤ h¯$ø`Ë\Ūģ̤Ķ=ŦNÎäVĀÅhõZŊsSÚŦ…Ō^csÁ¨ė5ˇŠQo¨˛†$ŊœV5ĩåܞd— (8œãō­‹hMÉK2°eŋĖOĶŌąQQV*įE-ÚCk$ŦøP¤’=+*Ę[gžØÉŠLĄ _z|´ûSÖĢ"ŧ˜a‚Ĩr­ũCƒûBÖgT”I*> `H<úͧÔĻîK3ū~d˙ŋ†ŠôąØ˙rÛōU]w4ąÄéŪxšųåwXFvā}įoč+Ē•ė4K,ōĒCĪ<}ĢËt~˙FŖĩu1ɂĘ둟ZÆžÕīuĢ›‹‹éŒŒ‡j/EQė+~MNe=.mxˇÆōę‰%ŧoå[ž$<Ÿv?Ō¸û; §s(%I-œT–PĨÅŲ2dāŽõŌA Āā•vHÍÉ˛Ļqu Å*B‘H˛0,_9­m)|EĢŧ×ęŒÖę<¨Į šęÜ÷¨'‰8æĸđDŌÍã(TĘĘ 2áxȤ´Ô^FĮ‹bc-Ĩ¤pÜE,]ņįŽ8ŽZ-R(ĨŠo߁6p*÷™‘ÜļÅ$g¯ņĸÆúŦsŖŲ0v.§ ļ]H$sĄåžeRŦėHĀä“]Ž•áP.õŨFÜŦ Ëą­hÖPčƒWōĖ—g8.rč*_ß\Ac‘š\1W~ā{zQ)\…+ŗgLžÂÆd†G†ŲNJZŖāŸv>ĩąˆmSŽÉgŪ@AļBW\å†YĪ%œäÖ˙Ãø’÷U¸("0Āæ˛vf°oĄëJJ¨ gĄČäIåwŒ] g=üËŗ$(*5PŒJņ–Ífn,Vą,ĻiĨ›y¸č*;Ûķm*›ÜœŠÃy9šE.HŨÆ{U”ųåųšÅ%¨¯ØĘ{MKU„ĮrâËdĸđH÷ÅHtŨ?KĩË$VāšÚ‘ŧĩ\wuÍcßéVÚļĄŨīe‰Ô …'=HīM •W狯­(sj PŊ1^;ŽęŋkÕĨž9ŲŅXf<ƒßíž&…,4Š…¸Ûĩ Šķü¤Ŋ˖䜒kJqą”üΎ-~ÚöĘ[I!p$^Iį5ąáũg~š`i\Ā0ĄĪ$WmŸ”įž*wcö0pũ7 S‚z2.^ŋšž=J=P¸Hw¨”]›_ŧÕ-LxT*C)^>ĩ‡vLĢd`p1Ÿ¯­Km‘"€HâŽUŋ`l×ŌŧQ­ŲÃ<0]H÷ IÎáŽũkа×uß ŗ]´ņŪE–PŠ|~‚+Ēđ‡„´{[(/ےåĪ/!Î>•ŊâhĨđõę:žQĮ1S)]ØÕGC‚đ—‰ĩKË7…˙{"6XČyD=+ĨŌ2IŽ3Wšš-YÖFķŠnķ3Č4Û#m ĩÜסÍäØ;Úے]Â$“úUöŒģ,cV‚[ļe !ÉUîūĀ étÉĻ$[™–5āąÉ<žĩjÖʡOvT™ÜÜ{“č)YIÜ|ˇÔ§vmŧ?¤ŧ DqˆãFKˇ@÷5Åjú{.™öĢĮķnäž#đÔ7¨ŗ”I@p§pĪ­R—@hķũ+Iēŋ•no”Åm¸1CÃ7˙Z´õIĄĀHB,H>e(­ŪIae#B*8ČŽFŅŪōÛís6evãôqÔÉči<öâ×x!0rN>j͂[JđCdĨNâÆPsųÕÍ>šÔ¯ ”Ž4R ÖŧȖvŌ5ŧiQžZĻ/Ry éj^BHf–jĖÍ$#ė–Ū`cˇqč*m†´ģ¯d‘Ān/åZPÁ.ŅFĄQÅCKŠj덗S-îĖNæÂđ3RļŦŽUŌUB \`ņúuŠ52°\lHĶg‘Y—z”Ëm*ĒÆ°P¸ĶA{L`UûIvAģ‚sQ$öŅģļØ1å˛Įë\ļ™w=ëE$Ōą)€1Āī[S;˙jGnˆø$˙Za¸ÄģŸRŋ{;Ftã™J“ĮĩhAāˆ÷ g“,IËt5,+ÎHČwx‘vʼnü1JŽ]yĀ$ã#­6đ}žĪÎ\ŗ`Ÿ˜ÖwlĻE<Š–%Iëœā Κö9XÜžzírxølWYŦfĮd…i|ŗūčĒ‹Đ™EõŨĖNëąÉĪ9jéž,Ÿđ‘Mōb1î +†Ú7ĪëŸ l`Mæô/īä“Ę,{(ā~t›˛UŲkW´ēÔĻŧfMNöh‚Ŋ˟<Xƒ‚AŠmæ“NÔ-n-’ArąŸ˜á”ã úÕՂK”šrwšô:J!$^98¤gįBO ä×/o}ß~J“Īzš3v ô'rTząģÄ*DĒv€Ĩrú߈Næŗ°2Kw!ۘØ˙ZŖã]bōĘâÖÎŪM‘ĘNō>÷įV|i ­Ũã.g2÷ˌĶÖâŊŨ‰´/}Žč_Ũŧ“]õäŨūŊtgN€Ė’4aæ_ēO8ĢîĄŠĢ 0;°ĸėģŅ*s!’yÅyõ˙‰âēÕ¯d„+ÛÚ"œ)oâ?ŸâN§uĻč[md1ųŲV#Ž>ĩæztB]9Ņ؊Fš ž ÷õ¨”Ŧˆ“ģąÆˇ}{­]\DÄĘÉRŊÖ-Ā™¯aIœK0^Ļ´´į($ō㊛TļŠßZĶÖ%Ų¸á˜u9ĨĪiX–ˆ<°‘#ˆFŸ™ŽN+KKŌâģ‰îį-dŗļĐiËĒI dĮ¯jMfgŸXˇŌķåÚ2‘ņTŊįaDŧ59šhãĐtädŒá§“øôú×Y $ˆ‰ Qģ8ŽkÄ2'BȰ‚;tõ%…ÜļúM¨Sģ÷jß?9'9ĢHĢ\w(# >pŨ‡AHYY˜îü4–ˆŸ`•™7r8éRA‰b”°)āvīR;\–%!~Wc‘žzb¯Å:ÆØ†Ęôt¨á†<;l\c’sŌĢ\…Ã8P)Šk"ę_yĨ–ryäđ*&iä„ŦĪš‡;UąšãÛTŊU_ô‡Ā8É÷ÅgŨkēƒ+<õëßĩLĨρËs ŋŋŋŗoŨ-š!'åYâ+<ë:ŊÄd‹{|gx“\āŋē3 Ę܌štWWVo>O ž•ž*Õe¸ÁœžŖvč7 n¯Ģĩ›ųkc<Āš”aúõÎjēīÛQPéSŦƒŖdV,úÍߜĒJļ㌰Éču[†\‘?ė×<Û{¯Ė› k™J,Ĩ 0HÆk#SŠ+‰-ßėŗ+Fųaåg"ģ]0ũžĘig|m€GTÆO"ņR8Ņ{įštéŲܖĖ}#ÃʗŖPb`=ĸ26°>§ŌąüQ5´×:–Ũ€dŽŖœ×Q%ė͉‘Á#ŠČ#–7I"G˛+w%t›\ÅÖî’}4ƀ/ āÕX!vŠâ8Hˆ%1‚?ĪĨoaË pHYsb&2tEXtCommentAdobe ImageReady•Ŧėh’IDATxœíÛŽã8 DŲ‹ũ˙_Î>0ŧ‰Ŗ /UT—iĖLĮyDɎ-› !„âDūĒ †x]~v͙āāõáī\r'đų”ü+[9”ü’Āl1—€ w$ŽHNÜ$` leL‚‹Ŧéŧo˙FŲ–€5@ŖŧAë§į…- Đ3 ĢßÚŊÚže ūY< ŗ›&‚§6ŧ~üģ;(#ƒ™Ā!ôÛû ßR`¯W’:ïöĻTƒN˜õ“Ā,øŒ§›ŒxJ0Ā`T÷oOušđjסĪiyØ ¯éāū9m/}â)@,ũ ûū˙Ž*ĀᰌˆĒ*€÷qSĒĀŋģ@DTōGõū?pŽÛy=úJ]Š,'U/žPr#KØ8@eÂ˙ĸŸ!Āëö3ƒA÷î7̓!™÷î­Ūh>—ßÛįŋĒ5@õ”]Ö!G{ęßČ牺zžĻ#ŗŅ­VĪFšđ;: œŖEŌ¯TtˆĨ´Kö'ē.Âf9"؟¨îx…Õ}†- `ZŅ)8ŪOÛAˇoÅ$ā7h VW$Ā3¯ËŸ-Es´“@ĖĶJ‚îėž|ûũ6t âûüt šļH€}¨%ã´ŧĸ¨ûūĪʈģg/š“ˆ,Ũ4›Xž$@õ\öŌ‡`˛Iurw(́xæôįĻ9i xÂ#øģ˛”<+Á^VG¤÷–ŦŪOĨå…U€•ÄG>t2úŲp"° P@Ī@`ļĩe bԏ{įåī=`¸Üön‹›:†A`4ņ•U,âėá!  0šø§āe”/Ę$@`d?\„ĮÚĢöp•I€ÍÉH—E¤Q˙ĻjÃÉÔ~"€8ęĢĪ:ŌŪ!P-bōØĻe*ˆNūęŠũoRĒ@•¨#ĩ]aTĀäŠv…Wl“RúSÉ€9ų¨Ui›,˜\ŨļĐãWŸšÕø”w }$Cä9ī_‰9ĀĖĶ’•Sr€‘ÛæJ¤ŦĨŋēmŠD €`äļĨƒp ō𤄐FØũ}EO7úÍΊJūŧ`ŧ‹æØä›QĻ¤B×-'đ †ä˛ÜO˜FZ{Ę8ą0%?ü´õ4˜’ŸB†(AGi‡7[ũōÚ"Ļō ú¤Ģ¤Ä”}  R×KĀÛb3 Đ5Šf‰}cÜ%Ŧsâ͒w aĢ;Ég'Ŋ,€!y™¸-jŅX)‡Oŋķ2Ü3‚’ ŖĒī ~úō´)Ģphn#ÅJ÷ ĖŪHÉëŨ;ģ[ŗ"ˆ!{ÖNšžx<1[-DōÍđĻ€'Ē“æLōÍx˜ Ÿá:B%ū§Aī0ę+÷8.9‡‘‹S„M&ŸhņÂ$ëŗ_ÖD‘øŦƒĸ¯Æ=ĄJ<ÄÁ°3ŨAÄĸdėŽq bÕ`ļŽ@6 „ļIŋßĀDŧŽaPŔåJ :TIŋ"Ö Mø6qâ> (>B!„B!„B!„ æ?ĩ”ĮÜõۈgIENDŽB`‚leptonica-1.86.0/prog/test8.jpg000066400000000000000000001534511506303110300163050ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā Ē&˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷ę(ĸŠ(ĸŠ(ĸŠ(ĸНöˆ|ī'ĪoĨXĸŠ(ĸŠ(ĸŠ(ĸŠ(ŦŊSZŌtHÚĻŖ”GĄšmŋÖšé>%øvQ˙ķĒØ?O–oü{n*ĩĪÄK¨Īîŧâšc˙¯-§˙B§ęōŖ‡ĀZī?ķ×ʏøũ[xĨGÉā ã˙q _ū.™?‹õËoõž×Oũr{y?””ų_øĢ˙˙ũ•ãkĀĪxÉ˙\"˙ã”Iâí˙Eđų˙Žē…Ŧû9ĨMÆ]üŋޝ˙D~!ņ~?{ā‚?î)2Ojöƒū×Gũzų7ú Õy~(iƒū&ēfģ§Ã˙=î´š?ë]F—­iēäiŌõ.áõÃVT2ųŋōʨKwuQū“ãĩJMvō(9ļ_Ą˙Đ>÷ũķžĸ“]Ū'—ņH?įŋ˙ģnŲ85-žˇ4rųļäK̓Īũņũßö—pǎί2Ãö¨é—ūÍķ|ŋīr>•Âë>:ņžsåKö&_õũ›øĪōû•oī †/‰ÚØ;.~Ãk4›|Ŧ§î]ŋßã“ũÆÚÃąjįī~2øŪĪím:Ū(ãē1Mŗ~īũáŸÄzÖt˙|qĀ]&D1y™ŽŲžīũõTŸã÷ņi˙ø ˙ŲTđžŧs˙?6ø (˙…õãŸųų°˙ĀQGü/¯˙Ī͇ūŠ?á}xįū~l?đWŌžž“VđžyŗĪ瞆y6ôÜČ ūtĪk?đxgPÕžĪö“eå}Ü×'ÄŊu´ßí;ÜE§ˆŧßĩjąÛ§ëZ>ņޝâ\ëW^ūĪ´HŒ–ŲēΟ˙Ž ĢūÕfÛ|Y–įÃ˙Û1xKVûpų×3‘ÄŸî3ãĖü*â|LēwÚ´­âėŝzd †ĪÛ^Fū,vŦ1ņ[TÕ´/í]3Nˇ°ĩēßî›í7ķÆãÁ÷ĒÔ.3į^ +K=6u‹ŽY~ŅÚÖWëžĩŖ‰|E{đäkBÛĘÕu)?Đ!†0ŎÉģ×äųĒ)|Yâ™~Ņä蘖]?͡ˆBîé2í܏Ûīyƒūųüg°ņ‰ü‹ôģŅg–\˙ Ÿŗ>É~o›M¸ûÁ{ã4ēmįŒõ }Ō˙ LDēžØr>ėģwËũåVįåį9â˙Œt˙_ŋ°îf‹—ÄŪ_īžO/˙gëōúŠĘž‹8Íäڏô‰-§|ƒûû6üėsˇ(ųŧ+{Cšņö›}ũŠll5ūŖ^<ãę röz7Ž,īŦ$—QŊš´ĖRÎ>Ōžd_ķŅ>aûĪüt›ĩąoˆaņG›&%ĶĨĩĪöŸ–)6˙ _Åķū?7^Տ¤xk[„ÛÃyoŌKöŪ:'÷qķn“ĖO×Ō­'†üJ˛ÜŨXj0irM)r <ųÛÄ{ˇú¯ŪįŽ?ģŠŨŌtÍZŪx&ŋÔūŅ°Íž>šÜT§eå~nßÅ]QEQEQEfęšŊ†‡b×wķŦ0SÉ˙eGsė+ŸâŸÜb˜úVŖäũžo˛ÛÍ 9˙W'QT(ĸŠû{ŸōOü9˙`Ëũ´ž7€\ø_‹×N¸˙Ņm^/Ļ󿧮Vē Ũׇ ģĐŦmcû5´÷‰SČĢūš˙‰ž?Zč5|AšÖ?áĩĶŧ;öģˆ›ĖŠ)$—ėąôß#pĢüũĒĨÃyŋŗ~“kvmíōbšoøI#o _é?fķtëinŽdĩŗųūÔūkl’Vūä÷r=*X :o„NĒēŒōÚiļŋgūŅĘËŋüģÚĀ›÷“u<âŗŽŸkkĻøgJÖ!¸]¤gZÃæKå÷}ŋķÖfųWûˆĩô.§ũŖuác&ŒVĮQ1'•ö¯ųcū˙á\{Åņ)î<ÍFĀ&A÷uw§ū‡ķ} hxzīÅŗj6ķ]ÜØŨiß>L3GûÁ”D~?ŊĩÜcéSjRøŠįÄmŽmĄŌä–(đ.~âųøū÷?.ėü‹Û55Ŧƒ@”Ũk:Ü?ëžÜī~úË˙=;`bŗĻŸVK[ifÖ`´…wË5ųÔdŋ2üĘģ~īû/.9ĨļÄO§ũ§UÖíîtī6ÖAun<Ŋ‰ ›äf˙{îžß/Ŋdj6ķÜkŌj {Kß2Bd‚â_Ü|Ŧ7¯D˙W›n{g5JÛHĶŋŗî.îüEeä˙Ķ/6Fō—÷žS#|˙ōÍ˙īœbļ$ūščE§ęßŊ–ß÷VZ{É žKîûģOŨm웸Oö¯RŦ­WY˛Ņ ‚KōG›(Ž< ß5iSčĸŠ(Ļo§ŅETK­š’B#Ž?Ōš ÛßÂ_¨Áūŗ")ü{ÛĪO÷äûĮÛhŽÚŠ(ĸŠ(ĸŠ(ĸŠ(Žâ6—4ÚUŋˆ4ĩ˙‰ļ†Mäûņ˙ËX˙ŽĢHÔbÖ4‹-FÛũMĖK0úZ4QEÅ´7ЧyĻCzšå&õû7¯ųÅeęđŪ[›y"KXģŌß_Å˙_ģÜ0ŽSQūҊø—Ĩy_Ŋļĩ˙W,mķn’ŪTųeū,ĮøcŸ{§CsoqöKckw˙˙럗ũÖnąúũÂå¯$ņ6—ysŦ}’ęÚ 9ŋåĶÍ˙W˙\–^ŒŸŨßķēzUiāctŅj:tÚ>ŖnsŸ!˙q˙?ōĪķÛÛåâ˛'ˇwSĨדi¨Áé˙Đg¨?t×=Eö÷?䟸sūÁ–˙ú-jîŗl.|?¨C˙=-dOÍMyW…|Yw'€´ ø\}Ģ\’Ķ÷˛“ûģŨū˛Očĩčž𝧅ėfŽ"×WwŧģŊŸũeÃúĩyī†<'Ž~xJÆKŸ.ÂÚåϏå $‹ŗõŽîOx}ŧ5uáûkąé÷X3 o”°ŨŸŊūxĒúĪ‚­ĩ]G@†F†=I˟aīŋH˙ā+ZxWIƒÄˇ"ōs¨OÄd“Ÿ-G÷?ģMņ&sĢ[[‹KˆĐKæy7+ž¸#k¯ëõÎŪ|?šņug¸Ô 7wŅH<ão›öüŊ~âíųWķÍIā)ÍžŖiĨę0ZÚ_E›Ėļķ$,˛;õÜ;˙ģZ~‚ÛXŌ5I<ŋ:ÆŅ ÷˙š˙|æOž¨Ü|9…õ‰ĩDÔŽ"¸–éŽp>îãģū8ÛüXųzV.Ĩ Ī kúFŸi¨!ÔŧËoô¸ÖO!7Ŗ|Ģü[ģîūuŨÅĄAmáŖĸ‹‰Œ^W•æËķŌšû‡:uÚŽuųb–íäoŋą÷õžëN?é‚I|ŲgŠ×ėÂrØ>_ü ģ¯ÍŒüĮ֞ž ŌbÖF§3‰ņ ˙[ō|īšž^Ųn~\SüUŽËáí ]ÚÚĢšfHb‹ŨōņU<{¨ÍĻh0Í ŋ)” ÕĮOĸŠ(ĸŧ¯QŌåÕ~&ÜiōÜÜXC'īŧ؂ų“mŠ?•Yŗō}üZéäđM¤–ŪS\O/ũtÚiļŪ?ņéŠĪũ÷˙ÅTMáq"Ö˛?íŧú Չ4_}ŸËūÛįÔ ĩ3xÎŪãɒÜMüõ?ūĮųVŠŽ|A¨?Òâ(ĩšŧ‰H‡‘Y‹ûŋÎŊ.4/—Š(ĸŠ(ĸŠ(ĸŠ(ĸŠĐJĻ99Ž#áŧ2évĮ‡æū%ŒÁ˙\_lŠ˙Ą×wEQEVū‰Æeļ")ŋˆŸāßí.š›ËYAœJœŸë<ņķíū÷Ëūĩ?Ú_œwÍaęŋŲÖ˙dÔå¯ü˛¸˙СôÚ{>qŲžl=rū"đ„76˙ņķ<°Û~īūž,˙ĢĮūÉä}ßîדĪouoiqk˜gˇˆõî?ÛNûÉĒ)c)0!—ūZŸJŠ$F9Œ~†Ŗ¯ˇŧ ˙$˙ßö ˇ˙ŅkZ÷ųļķEŸ/xÆúæ|āëOhO‰„˛™ “\3Ķō\W_U-maąƒĘĩˇŠ(‡üŗŒb­ŅEQEÄxŪˇá{Ī´yQĮ¨‰õߡ˙‰ŽŪŠ*ĩÄŅ[[M,ßęŖ5›§éūmĐÕŽâob<õ‚?îŊcüKŠ<s,ŋōΟũ—˙fŽÂ:}QEÄŨ˙ÉXĶŋëÎOũšģj(ĸŠåv}ģâVz7Jüžy?Âę¨ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ž"Č‹úŧ#ũVĨĨCvߍÚ?ũmvôQEQEJöd‹Ė*LąŒÆcûãé\^ĄĨĖčéŲ–)[ĘĮđļßîKˇī'GôjȊŪoõļ—?ēųžÍ/ū;åŒg,ŋÚx‰ŧ1gĮö„_čŋķ×ūy˙ŊūįŨ˙īŦîÜܝí”Ú=Įü{Oug˙-í˙öeūä‹Ü~#åÎ9Īø|éW標´ų_QĪ*Oâ‰×øģųq\ĩ}ŊāOų'ū˙°eŋū‹Zč(ĸŠ(ĸŠ(ĸŠâū!'üKô{ŽöÚŊ´ŋ­v•!¸—û>4dķ4ą˙Ë4˙˙×ĒR_ę6-ö Ažkøķē ō÷˙ēWīzīÅ=<3Û|ÉŽįēļ?ŧ’Öo™oųé˙ØôüĢĸŽgÆļ˙iđ­ø˗ē?íVŽƒ3Üč|ŌMæÉ-ŦR1ԕëZ´QEWĢÉ2|PĐ_ę|™Ÿ÷ğüMvôQL§×+Ą7™ã7§Ų#˙Č[ŋöję¨ĸŠ_ŲË{nbŠîâПųkŨßøđ5įūfĨ§Ic+ëzËû?÷ž_ÍÍūÅIŦkäž7ūÆŗÖͤr_ÃōíŖ“b5´’ĢGO×?á&ŅūĪēĻĢu¤ßlŋ˛ļƒí0wåÛ÷{’ĩQ}oÄF×H‡Oņ…Ũ­õ˙ŲaՖŌĢvÛ$wxŲ˙ÖŨčöš­ŦSS[ōzkä˙믴nDˇ˜ÃĖ q^qŖxķQÔ<q5ÕēÅâ(´§ŋˇÁtr$OĮ‚Ŋļ*ížŖâmYÔ Ķĩģ [h­˜ 4˙;>d[˙įĸÕH˙Ōå˙–˙ĪĘ}å˙ãî7R2­ķ ??âKļXĪ8š}ĸ×ɜōË?ø÷Hä}˰dŨâW6S[­¯ĩ|Įā?ŖŸœiÖų˙ŋk]QEQEQ\_Äsåøb :âîšÉųĢVâ&Ö/æˆ\O ĨˇÉ}†IÁSūí^Ķė š‰Žfē‘Īī%”ōČ­(ŽKâD"įáö°h<Īûįæū•sÁ˛ËqāYÖļŸīŠčhĸŠ(Ž3]ķá`čW¯ūĶžģ:(ŽSÅŅ VÂãKa7”-ZâãĘ˙gî'âŲ?đ číæķmá—û⚏ Čņã/úûĩ˙Ōhë¯ĸŠ+Î/ŧ%­ÜAs ląņ$zŒ2Ŧܤ&īøßŦ}gĀ~+:ÅÅΝŠĪvŪu­ÄWΐÍōG:2îT˙m†ĩ´]+Æúe´Ō­Ī›4rįČŋÔ Ęܯ÷wų`ŎŨ}ëÄ^ņĢosĢÅĻØÅw-Õ´ŋŲ–wež^íîŌüŋŧmÛr¸ų}Mu^ ´ÔtÉŽmeđÉŌėäũáŸûdŪå˙ā\Ší%xŖ€™1å×aáÔūhúeË}—Pĩ´ÅŊÔ7”~īđũāW똡đޝ ’jÖŽöUœ$éúšAûؑ‘÷~ņwgåÅjEāģëíGXēû4öI{ĸGĸKuæũšįũîyũÔGuwžĶåŌ|/¤i÷$­­!‚O÷•+nŠ(Ž#ÅįÉņŋĨôŋ¸ūúĢˇĸŠ(ĸŠ(ĸŠËĐW5¨xV)ú/îâ˙–xûÖßîŗūĪnŪ•‡yiy7vāŨEûĖÄ~_účöŽ:ŠÚ¸ģ:k[{‹Ing—÷ßčōĶũč˙ÚõÛЎœ4uå+Ķmíõk™tBeŌĨ˙HP1°ßîØ˙gšúŋÁqėđ.‚ždo>>éũÚôކŠ(ĸŠ(ĸŠ(¯>øÁq-¯Ãۛ¨ēÅ(˙Įˇ'ūÍ]–•gŸ¤[ÚEŌ8°*ũQX^+ˇŠįÁúŧRŨ ˙ž Eā'ū]ėŸę>É—]QEÂøļ+ąâ"îõ>uŋūŽųŋņĮjîĢ“ŧÕĻĶõiõYÚQĨAū‰ ힾoũ÷ûēC{­ë5ĩ´Úd–„H#Ÿū^[˛쎝û_îšÔŌ­$ûĶŨAåŪ^~ōqõčŸđĀŠtCŨwy†!åū+ōŸäkÃ?ō8øËūÂ˙úMuôW'ã{Ûģ}Ú;ŸŗŨB 9'ū(ŌI6ļßöŊ+Å>ĶtĪę÷zc^ŲŨÛXO'›ow&ųĪ–ßë?ŋUĪî¯ŨŨ¯DđŠiđéV™ĸŪiPĪ‘sŒūFēJ+…ņÜŅÁ¯x*W8‰ucĪũą’ģ}ôú(ĸŠ(ĸŠ(ĸ¨ŪÚ}˛g˚>c“ŅĢ×t/ŗ~÷ūXÉ˙,˙šūĪ?ÃũßMÅO ōų.Ŋ§¤}ĢOĶ~× ž]ĖķÚĪûĢĩŪŨūĪ?÷ŪŠŊķ‘Goāí+iĖ0„|ã+°cŠÛ§ŅEQEQEpŋ`†ãᆰ%?ģũÉãūēĨiÚxˇN0yw^}Š>Ņ7ũ;VŨ–Ąg|ģína˜zÆjåV‹îeąđŽąuk›4vr?ā&ŗ>Ü Ÿ†ÚYû L}8ŽÆŠ(ĸŠâxõo5Β"8DI^=ŸĮ(ūaAŦ‹ÍøGíīõ?›Ŋ:;_"ÂSj¸|~J;måū˙ĩPĩŧđÄvĐi>%ņŦ7ąYŖũ‹ũD9ûũßî÷l{Véđļ‡/‡Ž/ãÔįŽ#uqĢ[jüoæ|͡ũŸ¯ZŠĢxûCJˇ—Zņåá‚Yc–ŌXá‚ģûÅū™ž\˙JĘ{Ī Ū(xûÄw"/ô˜įX˙ÕmFųˇŦûģĒÔ>’&´ÖõŊnîĪQÛäm¤‘BOUh™ŖOšļí4m+A×EŪ§âkÛģģkI$‡ûJåŲáų|ĮûŖũŸ™Š×ū ņ‘wũ§ov-‹Zūîoųø_/cŊ\üēƒ´ģû#9¸Õ/t‹_눴ãžeų|Īõ{~öÖë÷Enh:‡5-NÛÄ]ŊÅ„ļŸš’Ī@ķq,_ŪaĮûÕ6ŖđûNģņÖ­/īôËĻ įũ‚o/Î-üG¯?Îĩt=}!n<ír˙RŽCĮÛJ~īūųU­ú+Îū$ÆeÔ<%p‰%“VāzūęOĨtÚAģÍ$Æ'/ūĢûێīķũzoQEQEQEVfŗŖZk–Ōéxę§ûĻŧ›UŌĨ7}×ú-ßúČĨū;øŋā-ōîömŨĢÕ|;l–^ŌíT>Č-"ˆoiųTWąâŧÃã•ĮŲgđôĻëėŋņņĪ‘æ˙Ī?ķÔW1ŖxģÆQŽ4_hzŦr˙ǎē›ģļ]­˙ęãøâíĮÍņ„Ž%>ļ‘~īūúVzÖŅž6øKS]ÜKĻKÜ]đŽãKÖ´ÍvßÎŌõ.ĄõëRŠ(ĸŠ*ĩÅŧ7–ƘDąIÖ9+—¸øqáyIû-ŖiŌúØLĐ˙ãŖåũ+/Søa ڃ§ëW6sG˙-ÎņŨĩNãôÃo.ŸâX5_/ũlWÉß˙ĄUÛ/xŌÚãū&Ū¸ōéÜĨĮū<›•iŲx×íD˙ĸâ>ß?›˙|lū´jž*Ņ.|?¨E-ĘÄ~É'îå˙qǟÁŲ<Ά>gķHs˙mģÚ(ĸŠ+‘ņũ†Xn<›Ādû’=?_Âļí4›[X-Į“›n$Įvûí˙īZtQ\ŖëöŸĄŅΚo/­ ÎŪ?vr?ô&¨ô(žÍņÅ#ūzÅg7ū;"˙ė•×ŅEgë)ŋEÔ=í¤øé¯’Y×Āöū˙IJĪûv į­ēEæ§ūFmŸđ ė|7}ŽÅũŊ‹ĸXę‡V¸“ÍŸPōÖm“îųmũ˙Zë5 /n|¨ûQktlæķ Š3#ä–סvZ…ü7¨~÷ũMî›u˙=m䷓zĀ í˙wmu6~$ŋŊøoöY|;ĒEjt<}ž_+Ë#ė˙īîįéU4ĩ˙…‚ßŲū)ÛaåÚ iķĶtxûN˙ųiáÛ÷{ķYÖo˙ ‡Žt™u~"ļŠ :î<|¯v‰$˛C˙}Ē7ũŗ­ˆæ+ˆ>6ŖũŠ~Ųå˙Ī:›ŋā})Ú¤VcĮÚĀ›TŸLÔ|ëY4ûßųd’4;<ˇū›gŨlgĩuž×E÷Ÿg¨%Ĩļ­ĪŲæ?É;…ßē>íōsę? ę¨ĸŠķO‰—>Wˆŧũ=ÜI˙|Ã˙ŲWEĸéōÅma-Ž<‰"įū™ģü‡ˇĶžĻŠ(ĸŠ(ĸŠ)”ú+’ņž‡5õÛŦúmˇ ˙Ž;~#ŊnhŌĐėžmãûŊ>čŽâ}—ÛÛI˙Hō|Ŗ$Ÿúųôõôo5ŧđͤ—9–Û›Ÿõ‘KūĪų~˙ÂÃ#įōōŦü!wgĢ\ŋ‡õ)ė&ļÛūĒëînûģۍģģ~ÄĸŦjŪ.-Ąßéz•ĩŸˆīmøŸT’Ë‹\üŋ}~˙ÍŅŽ9íĮ+đvī]‡PžęÂÜÍC%š¸ē;m­“*û™ũšųÚíZ^2ņ–ĢŠëû?ÆÂÔÛ~īʲ‚Xa“ūšˇ~X­;/|DĶ<ƒi¨é:¤S̃QēA+˙ģŸ.ĩãøĮĢi@ø*úÂÖæ"LĒ˙ėÕÔč˙|%­Ū}– Cʛ°•1šęíõ]>õŒvˇpM' jŋEQEVâĘÖí|ģ˜"“ØŠÁÖŧ áũsO‚ÎūЛX¤ķ~sŸÎļ´í6ËHĶáą°ˇ[kh†#Š>‚¯QEQ\_Ŗil,ŧŋõžwúōJėPī§ŅEeĪŖÚ\ëV:ŦŖũ.Ö9#‹ūßĘą¤“ė˙`¯´–đ(e˙íÕÖŅEFč%SœÖkø{H“Ž˙CûOųw?ōĪũÚĮ¸øoá;›™ŽĻŌķ,ŊHžUūM[66ĻéMĩĩ+fC(îoŊ×īU-GÁú&ЧØX\ڃœc6ŋôĪg T-ūø2Úq,:¸–>āŋøÖÅ·´‹Û;[k›$†ČĄˇĒŲ÷vÔ7>Đ¯-¯`šĶā’Ų~Ņry?ŊPZø'ÃvÚuՄzTáū .dúąæŦiŪĐôÍ>âÂ×N„Ú\ķp%ũīūūėîŠŦ<;¤é°Â–:uˇ‘Ÿ/ʄ ™ë[QExīŒ5n~+ÛÛK‘ie§ų>aŲ´K1Ũü_{åU˙ëũÖô}9­­˙ŌŽŧß3ũ_ų˙>üÖŨQEQEQES 6ÕÃ|A>ZéįūēėŋäsŸL}åâcŗš[ímBįû?H˙ž˛üōŨ˙ŗ }ũ›ø¸Âíō1GĢ\濇öV…ūžįÍ˙–ßī7÷ž÷}Ē7dũęčíô+MON3j€hŪí,%ÆŖˇû‹ü1÷ÜzõāmÛÍx‹Æ~!0xsBļV‹h?ÕųküíũzčUč_bŌntÍj;röžtc3ŒųŸ'Ūüką×tOé–3ęz…ŦĮūļâß|?ú/­q }áå>UžˇĢibįũFĨŠY…¨ųx‹ūēÄEoŲkZvŖ˙wđMūé­+ņĪ™`tAŒiyš˙¯i>I.ū]•QEQEQEQEekÚŞ¤\j—ķˆ €dŸ_öđ[ÍvãPÕfļķo52oõßēE_öŋØ_ß<įîû_†-˙âMks'SĘ?šô˙?Ĩt4QEQEQEQEpž;žĶtŲŦ.oí./e`!Ũō˙Ŧoũ—’Ũ•ĢË5›yĩû{Ä×3Ë ģũ¯áTŊ ŗwl̎W薟ھ4‚ãĪDū/öZv˙€ũĪč /­ęŪ#ø‡ĒA‚ōéŽú$ ō¯—üMũÜgö{ķ],ŋüc‘– +|Ÿ~ΧŨOģ˙ŗWcđžy´FÔlüFNŸĒŨLž]ĩÄ~RĢ˙,û7į]Ÿü3?Šŧ2lm.71L—ųŸqŲŨjųŗÅ>"Ôešø™_Eö˜|Ų~Đd|ßĀ˙ÂëũÖĮJīū øōá¯Į†Ž@6l?ŅžõrüĮh˙eēûŽ+ÚuŨ=bĀÂqæv5åž"Ņl˙ąĩ*Û÷ßô×ū^6˙÷ˇW;ee5¯īnõ?ė¯+ũ{ÚĪ÷>OîüßÜûč˜jķÄŪ.°ũĖڜB/ųuēƒÚ˙쎝~>]ŋđ*ďÄZtŋhģ—Â6Ŋ˙[ũ‘zö˛Äß7ßÚĮë÷qDž/ĶžŅow§ŽčŗEģũ|K˙/–įõ­}+Įū-ļ˜‹_h:Ŧ>—áā˙Į™W˙BŽ—NøŠâ˜­žÕĒøKÎŗ˙Ÿ­:O6?ûé7å]׃|]iã=!ĩKyĄ 7–c—¨ã?Čֆŗâ-'ÃđÃ6ĢŦRIåƒ)ęÕkOÔŦĩ;oĩX\Ás é$2ozŠ(ĸŠ(Ŧi<;ĨI¨}¯ėžUÖ?ÖEōŌąo~é:ĮöŦYŠķūšĮ˙Ąmß˙U8ŧ'Žiˇ7ŲúŨĮØäéš˙W˙}Ģ˙č_…IößhâîŊø=O؟wūCf˙ĐiúŠáŠÜZëzqÜG˛@?û,VW…ŧGyĄ\ļĒ[_ŨéÖûEĻŦmĪÉđ¤ūŒ:očkĶhĸŠ(ĸŠ(ĸŠ(ĸš_xīÃūˇ˙‰Ļ <üd[Ń+˙ĀkĀĩßk_ĩ¸ŋŌE–žeŸŪaˇøÛo?đ/ĀW¤xk’MūˆLđÃü|Ëûŋßsøz÷Uü[<ë”ú(ĸŠ(ĸŠ(ĸŠ(ĸŧ×âMÄQ\éCmö­^_;ėqEūŗ<ĀU}[¯Ąšâu]_Hđmšēģšû^¯˙,$‹ūY˙y`˙ŲĻ#”qĩxíÃ:×Å=\ÜÉ8ļĶŖ”y¯ÎȗÛûÎ~šõ¯¤´/ i~ļØZ„“ŧ§īķč8Ģz†ŖŽ"–î_õ0w˙ëzå|aá}CÄ>ŊûV Âę0.-`„~å>aîū™?€­˙ļÚk7÷3yVwļl„˙<|˙:ō{Fđeˇ„´5k™åÕĸķcļ0|Ÿí¤=6ck~?6Ķ\¯ÁßËâAĒm––é2~_3øũ_ė×Ôõ‡ŽčÖzžŸ8šÜJqĶü÷¯7ņ^‹ö]:âīOũīîüÕ÷ˇˇüúųuˇsqqŸ&Ú_3ė˙ōŌDe]ëŊģŪ„tæ™rņKqū‰s˙-|Ÿøßģū÷ĻîūMbŪĮ¨iŋŊ–æ ¯3ūZõ˙'æüzv­ß xQņ ”÷S‘ĻiK$—ē™?쨏ŨˇûŨũ̧ņŋaáīaéVķØi<¨ŧīô›ßúl˙ŨOöxÎ9ĮŨĻ|2—RƒÁ„2\˙ehžoyĒĪģåCūĶ{ßæĒWž#øi{ö‹Y|#{ ˙Uum™ŋŪØÍ÷ŊzûĶ-ŧ?áqpeđ׍5]īūx^[IŸûî?Jčlo~+Yß}—Eņ“â(rŋj‚Oũ kÖĸ|^ņFˆ<¯ø&øųëošõŨŸûęēâī†uĀyšŪ_B7˙čoŌēŨ?Ä:FĻ ŲęL_ĸƒķß=k^Š(ŽcTžģ›XƒE͇•;Åö‰îOü˛‹~ߗũļü¸īT´û=GMņtjzÕíųšĩũÎBGē}ī‘GŖŽĩÚTRŧq2N=ë•Ô|uá yūÁuĒYÜĖå„_ŋ˙žļįõŦ›é×ÍökScĨéĸXŧų¤˙Y.×ŨĩQ~īOŧŪŊ)bđö…ãMWÕ.­>×j|›{i ’,lSŋoOī~•qü%Žé™>ņUÄqųsÕÚâ?đ>$_ûčͤ×Õįj‚ëwÎ7˙ß_ßįũß×§Ĩøs–vē}ŋ•mū™˙=~Oũ—ųˇÎWg­[éFX4ģ<ÛiŅßÉ˙-güô&īÚēZ(ĸŠ(ĸŠ(ĸŠ(ĸŠō¯Œ~(˙„oJ˛)–ęį͎!Œ /ßîW§É÷[ø¸âžmÕ§ŧžģ7w÷_hē—ŋųãĢę/čÚNqsáĢkũŸ.ŸmûߟÍwŪŽßøâWDú7ö<"įKēžŽx›ũ Îķc“ŋņîa˙"­hĐfÆ ë­˛^\D<Ų~ŧí˙tUëéÅļŸq7üķcø9#đ.€&˙Z4øA˙ž+ĮžŗÕôë‹É ĀcÅėCīl_ųjŸôŅ9úŽåôĒ~ŋĐŧŖXi1Į™ŋÔåž˙ųč˙ŨFūéøs]ŨžŠesaöØ. ’×ķ„ƒgįTī'VßiĶįķ|š?å“˙ßUĘę1Íu¨yQ\ų^lŋŊ˙?đW™I6ÍÆĄ§ūęoųë:~įiūįû>ŋīVĢŦŲ˧gé6ße‡ũdlŅú~ķæĪ÷ˇ}ī—ķއÂķmŽ|Aã oėũ _õVD~úįûŋíėÍôĒ^'ø•æÃöK[h­Ąĩ—šwüą‹oüõūûŗ÷WëYŪđxÔ­ĪŒŧsu4Zt‡0@9žųŋØ_î˙ž5'ŧxu9míĸ˙E6Ü[ZE˙ö{æ˙nMĨŲ^ŪĩÎørHdĶõ nüŦI/ī7Gē¯}‹MūĪ˙‰}Ė˙l—ūYŠ_īļÚe—ö¨ō´­åûLßęŧŸ3æûŋī}ß~•ÜŲxŋÄvˇöÜĪö8˙wū„˙7ũņsģÆŽÜxˇGÖĻĄĸiW_ķÖ[ũ?Éoûøš˙?ŦpÅāÛŅn-ôíwK˙–y°šK¨?ņōÜĀjՕˇö¸‹Ã_-åŸū|¯÷Ã˙ŗmŨ˙­Û}gâN‹§Î5 {ųGIāōn?ņÄhßôĢvŌŪ%‡_ļ]Öe–Û?÷ų˙ãõĶčž.ŌõÖō­o7Ķ˙ņôܟøõd˙hYÍã˝B=fŪ;;k?˛\¯Ũũâģ7ŪöųŊiSYŽëâ„Åfû'Ų$ˇ‹Ė‹'vß˙$\WsYw6›}7™ui ÉĮxķ?CV­,­,—ËĩˇŠčƒjŠ(ĸŠ*ģÛC ũė—Ëĸ Ŋ˛Šú*^•Æę˙ûBÔAu?a{ūŽ/îũŪģk“æâ]BŪytī7ūZ˙Ŧųzl_áËtôČkZ Ÿüzhšl^~ōâįėķžčˇ}ȟø#¯ËÃ&ŗ-ü7=†¯ŸáŋĩË/îmĸ?ęųöOV߂[Ĩh‡úž§¨[é˙ōųúßÜ˙ĮļßēžbūíéķãĸēŊ;ÂP}Ļâ[[oˇĪ1ÃöČ-|ĩ˙€/Oū(ŗŸ3žđׇåũ*ūÜE˙<ā˙؟úÄüŨ;(ĸŠ(ĸŠ(ĸŠ(ĸŠ+’ņĻá=fÂøI͸…N!–iŧŦôoÂŧÂīāŸ…õōeđ÷‰'Š_ųåpŸüK:ė´k-_ÃzƟ.Ч\\ÅmĨ <ŪŲū˙îžwlû˙øéŽēËÄ:Ną‘XępK>?Õ}×˙žæĢš7ü€4˙úõ˙AÄx÷ÄŠ%Î‹ĨĨËĶRō:ÛA˙-?āLšxëRkTúéĐ-ŧ[=Ŧb"ŗĖ‹>^6î]­üYŦģ]ø[ĀZ7QÅ4ĐÛ}ĻoßËũĪ—øēôåJęô‘c៛YŠ™ŦbíDûĮŲü?^Šŋ…y•Ũ”ÂūãÎ0E¤IûČ4ˆ7ų0īûßėõnp:ä/&˛äŽĪ—úŽ“ū‹ ˇpÛ_[Å?îå‰ŋņßøΎ3õž/ņ~›aŖyŅ\ūúæ_õą~ķîíŨ˙ÖĪå~*×aŋÖ.&´ĩ6ß~đÅūŗûĢ˙ū&ŽŋÞŌ|+go¯xĻ×ũ.Oųh§ũv˙īIģ˙Ų\ķķW)㟈7zŨõÂEuæËœGåǎ_îÅū×÷Ÿŋn+à ´đõ¤(ņč/)ņ/ŌŪsęëū}Z°|mã‹ûŊHËĖ?j˙W ƒũ]ŧ܏úˇ|qÅp6WQEqæËį˙Û#ZV—Ã>Ą/Ų˙w/ī!ķßü+Z=jÎ[Ũ~öoúz˙ŲģūŠŖ5öĄ§Ëˇúd^g‘ålHß˙­ģ-GR–ŪâŌ_ô_ŨĮÅÂ?ū=Ã}īū+û՗§\ŲÚčßé~|PÜũ?{ūÎîŊø~+Séēv›ūiŸûßõRÅūŒŌ˙ų>įÍÉŽ‡Nđ…åũŋ•§ęSËúĪßÁŅ'ņ|ßÅüV÷ÅuZ?†|]Ą¤Ÿô¸c˙—{;÷å˙€>c÷ûŲ÷ˇ{¯Åö_øÚߨÃ˙<ĩ=3í1˙ßPå:]BđåŪ¯¯ikĸG{l?×é“`ĀŅqúÕīŲCuá Ko•}æyžVíŗõ~gÍũõPßđ*ƒWĶĸŅo!×áļšę ßkˆž[ūģ˙žŖwüÎ=+Ä^0ņ>ĢĪ%ž‹=֓˙=åļķî˙ DĖÛ~ŠUt¯Ú=Õ˙Øõ o˛ĶĮûŋü‰ąŋJíŦüoáËÕũÖ§_õņûŸũŋOĸŠ(ĸŠ(ĸŠeS“KĶĨŸÍ–Ú/­S¸Ō7N×6×)¤ãw_-?‹gû^ô—:A{(Ŧ-gû5Ļ?xåũŋĮ×ķ­+(tëa°ÄCĩ[ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸЧ}§ZjVæÖî,>†šiūøfFķ-mg°—ÖŌfOūĩ@ĪĒŪ\ËŊ´:<~_ žfīŧÜōyäWyŽ˙¤øÃXŠõÖÚ|Wn_bIķĮŨīķËīō×ĒęŲîmŋåŦpÅį{đģũļ˙Ŋßøw9/j÷+ŜÍûīí_üq}_ī? üO ČiVēžŗĢÁkĄÁ5ÅØĖŠ]ąūõė6zF“đŗOqö}CÅÆ/3͟ū=ôũßÅū~föæz§ˆ5j˙eŒ\jsÜgūZÜz /Ũ_öz‰á+áΟöÍVÚ SÅžOÚ"°˙–vKũų?ĮׅõŽ3Åū6ģÕæ1Grei#Ä÷Û>˙û ũØũŋúå˛ü)á}KĮīŲ­`2wž^Ãę{œWŌ øUá˙ ŲCæ[A}¨õ—3ŽîØî×G¨xWÃÚ´>]ö‹c0÷…+Čŧsā ĮG¸Ô<7ĻęŌũ˜ËŧÛ­˙ņėŗs×myî•q7ÚmîáũėŅE˙,Žž÷čģ…héÚ­åö¨Ú}›ũoī%–/Ÿd_ÅķßŊMm•¨ÛŨũ›ũûÉ˙Eū$ūģŧ~÷ŪūGoŖéÖznš=ŧŅj^WŪ˙[ûŋđųĪZôÍ:ßėÖŪ_Ųņ˙|ėĩĨEq­Ž§­M§iz}ŧW„yz†¤#OÜFß6Īö—ˇ`ÛŊ+°ũÍ­ŋüōŠ:āážŌZņ´ëVæęKŧßoÆ×“zŖėô]Ŗœô­ G^ļġú$üEĖúfĄOûæmŸĘšMC[–ũ­ĒųÃũeÆšĻÄō?û*}üķķtî3^âVĪWÖ&—IŅĸŅíDņíví_IxsÄŅiŧ8÷ 5Ū§saˇŗˆîšāí˙?1āgšÕ_øŽÖßÍÔ<#9˙°uėwŖlũ+É5OŠmĩiŽ#Ņ.-m?坭ƞßĪ­tZ7Į}:SzŽ›å4ífū/ö–MŋĖ×sgņÃ7ĪåAŠf_C ˙č_wõ­Û}[Mŋ˜Åm¨A,ŠÕc”ŅĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(Ŧ=/ČūßÖ|¯õžl~oũûĻęĐõyŧëũ.Ęiŋ᎖<ßûī­`Üø [_Ūč:Ũö'ŋīô.Î:piÉ'Š,ŽE†ĢáËjĪų’ÂWqûßĀ˙{üû‘•oqāëŸ B;Ãē÷•ûŋ´CŽ6˙uūLģÖĩ¯t]vKmfk[› VmJ(cûDšoŨ˙ąķ+}īī āüJ’ÛΧZßÛOa)ģ›¯ū8ŧãĘ~ī}ģ<ÛTĐoõĪß[XÛįĖ>vá÷<ŋīüŧmú~¯CˇÔtī…EƝ§ÜgRēâæđ Ū^ßũŸæá:/ņdםDē׏5Č´Ŋ2ÛÍ2Kæ`ú˙’ŋķ?•wķŪi,ĮOj^1š‹÷÷Gũ]§°˙<ãŸJķ=oÄ2ëw÷ÅįæëC!ß$õôö­o ø^ß5žÁgn|ËÛĄŌ0ßq#Zú›Âú>ĸh‘XhÂ/˛Æ2H9.ŧÕļî"S$œb˛§ļūÛ˙]˙ îņΝû>ŨûúTēĨ˜ēĐn-aÆLX˙e¯˜cļ˙‰†ąöO"X~×åÁP˙÷Ÿ{Ûn9>ĩ—ĻdÔ>Ëö“Ī—7•˙<ŋ‹äūęüÍĶŅiŅÍŠÜ\ÃumcįyždŋũôjŸ¯+ßĶë^eâ(bˇˇŠoõP˙ä/÷=]ׇŽäˇˇˇļ›2ųâ‡§ûŨuUĮũģQņVĨqi§\ÖO&kØŋÖŨH>ōEũÅ õĪÖ¤IâđŽĢËä\\Íŋhã/$ûđŠ˙Ä˙Āk–Ž/iúúŪë:”÷ח7)ļŪLW–ûĶgŨofūöĐHÍhë^4ÔĻX-<7ĻÃuw&|ßĩ6>Ī'ī?vÉ÷ˇnLnûŊ;ĄŽkĸiĐÉã;‘}wÜčöIūˇũš}}˙€ĩ^SŠø›Qņ†ĩæŨ~öÎÛū]ā‡ũOũ2‹ovū!ÛîŠįí|;}âŊ^ Ū &qŸîyIūŪũ^ĩîâ] á‡íæÕ.P× §’ŋķŌDOáOîD?úį&¸{ÚVYfû~‰o,&NÎɅūīC]Ū‰ņj-N^}ƒ -‹[ØĻ#÷Íh^ę>Ö5˛kZuŋÛ$˙Ÿũ?ųn?ņęϟŧu ēĶíį‡$ŗŊņ5–> ę:eĮÚôO\ ¯]BÕ'˙ĮĢ2/ |YđôŗMkw¨§ Žũ˙ô>ZŽOˆŋtdÖŧ9{åזõđ4"ĩôߎZmĪ6Đ ˆ ŧ†˙Ș_ü~ģXŧs¤cũ,ÜXúx‡˙gMÉúÖõŽŖg|?Ņna›ūšžjåQEQEQEQEQEQEĘ}rÚ%ä“xĢÄÖßķĘxq˙~“üôü}:šŽY#Œ~đŠÎË“\ķbķ-?Ö÷ŋŪūŸYŊĶ­/āōŽ ­q—-b¸7zĄ>•6?å‰ų?Īá˙˛â+ˆüqĨ™âēĩ°ņ&”zĮūŽ}ŋîˇĘΧÍå(ņū“áë{Áš#ésH˙éĶĖģ%˙Ž\ĢĪ4-+Qņoˆ Ķí6‹š~į;+ÔîüMĄ|:Ņ˙áđŧËũĨp™ŊÖŧœ˙ßŋī{ú׍Ũܛۃ7ü´ī˙ÅTF(Ö29ųô¯ŦüŖZxNįûÔŦĶíī<Īųë'βũģęΕÍųļ”~î8ã—õqZ”Į¯%Ôa–úûũ“såų_ŨųWōūC§hŗ_Áû۟*o'ũûģŪ˙=ëĻđôr˜míVâÜ nŌŸ{úĪŊü+ˇæĮ=+Ģ“Qûå}§íSĢũ×úŋ÷~á˙€ã§ęÚ^ģŠM§ÛŨ]XAgi˙-1ģäūU[ÄŪ%ķíāŅtK¯ø›ęgėöԁĖ_ķŌ_øn?Zét.×DŅíôûQˆ-ŖōĮŌ Õôčo Ū ÄWCũ\ļΞOĪĶë^gŖ^ųz‡‰Ŧ"Ôį×ußĩĮ Ÿ›÷ĸōÕsāˆI×ũßīT~"ņU‡ƒ/¯îmD§Œowq0šļQŌ?đ_ŧŨÍy{ÜęZļŖq¨ędÉ<Ÿčĸiäéģû˙đ ˡÆßøΆ´-GÅ:ŋØ4ģ|Ašēģ?ōéũߜ}ų~g˙ĻģíÅ:?ÂÍ3ûGëW!dš–C˙ČŊũÔôôãúíίŦ_\ę:ąû|ō×?Ũ˙w~ßģūĘ~ua/—qpÜĪ 2ūî9?į§ûüãëūõwZ6•´`]?ÃFū,ââėü‹˙lŸio|Žzfā1ĩŧÚWöļ•˙–ē§—˙}/īŗõĢŋđ‚ę"ęâęĶSˇ–)åÅ¯’˙÷úܧęωÅÚjæKkâ=tû¨ī?ōʍúšąoãĢ;heÕ[ÉĪíÚ|ö¯Î•ąeâØī˛bˇķĸí-”és˙ ôüjž°|ĒÉåë'I–aûąö͙÷Õa]üđ^¨ úx¸°ķ;Ø\á¨Ē7 u(Ô_™%ũ_ö…”rŸûųÃÕkm;âωo9ãQ?Ãäjû,čßĖUŖņÄúoü„|3ä˙Ī[‹)"˙ĮŖķ?­ Œūšž i ņK/N7˙ŗãĩÔéž3đέƟ­ŲL}ÃúÖí>Š(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸĢÜ^Cl?xqQŲÉæ™ĮŸæė“Jæ´(ü¯ø¤˙ĪO˛˙čŋķŪģÎēĀō ˇķHûŸß˙>ĩ˜'?đŸÛŸę¤Ō¤—˙"¯˙]%ÅxŖVģsũ•§~č˙ËYŋöE˙>Ãø™>cņF‡v×#ėĶß-^ÃgŦÃĨjÚkčŸŲ˙ašķĶåßō7úßšÕ[ŋņW ÄņĘ<Čų÷Ŧ¯´ÅŒMŠ˙[-‡˜ŸD“æ˙Ņ‹[UÆ|DņU§…|3q4§W4pS\_†~øYđV“.ą§mGÉækYų—ûŦ{V~ąđ?UÁ:VŠÜũ]ĩä~VĪûã˙­\køĮ>¸ˇšM:&#æųs˙ū­7Ã2MŦ[ÛÃi˙=Ą˙M–×÷vÛ~œģüÛB/_–ļ|e>ĨĨißŲëwŪTR¨ˇŗyŪwđŦß{jŸEQü9­ÚlšĻą¨x–ėųĸ(žĪÎīķ7/÷Ŋļ˙ßUëzį‰tí Š‹Jf—Ɇ8˙åŖúúë#OņNŖŽ4öļšq°ōŗįŪOĖv˙ėöŨ/¨ûŖŽãŌŧÄß-,>ŅáĪAå[Ī+}Ēū/õ÷Oü[˙gü̈˛ėĸŪ+¯°˙Ēķ%Š_ųiū÷˙õí÷ģ/‡žŧņ—útÖßŲö­ÔOߛūšîū ~~Ü÷­¯|Hŗđn…ŧ-â KpŖ>_ûŋŪoVæŧ¤Ü}–íYnŧŨFYŧĖ—3˙_›ņ­č:šļĶôØ%˜Ë_‘b‡ņūlVå÷[\ļŅ!ē‡Íķ¤Š+”3üũ)öZļąáOôI­ŋ˛ŧŲŋãŪ[Y>Oũ—oį^éáĢíGRĩ‚đŨ[ŨC'9Žw˙â?Jė(ĸą/<+ ę/į^hö2Í˙= #ũõÖ¨Ūx2 āō­u;ûhĀĮ’eûD'ū.á\6Šá _H›6—:L0˙Ķ­ĢŲyŸīųMü€ū{y¸5ŸčyÔ%šÕĨ†_ŪĮŌ\Åü?v9~ßFūx5§§|i–6ëR°ēĮü˛’ŲíßūúÜßú tößôxĨ‚jÖ}:iĸķPŪ&ßŅŋņÚŨŠoøÎÛÍú]ø˙Ļņ!ūu‹¨|đmņķm­n4ųŊmf˙Ų[pŦ™ūøŸMˇ+áīr?Ջ„xq˙‰ŋöZ­ũŖņGB_˛ÍĻß]y_ōõmåŨ¤ŋđÚ˙øõ>/Œ÷–WeÖ´Č-f˙§¯6Ķ˙dq˙WOiņKH–6k[Ņûķ[/Úĸđ(ˇ*čôčz÷:^Šew˙\Ļ˙īžĩˇEQEQEQEQY7ø ˛Üy1ųmŪĪJ¯Ĩiū]ŋîõ2/3Ŧiˇîöūy˙õ斟ĩ~#ë=åû¯ķ’ĩ§”YÍq4ŋē‡åũéqū}ĢķTÆĸt¯´ũ”ĮûĪ7ūū÷Ę3ũGŠŦ9ü¯ˆ:|ŋiûL?đˇú¯™>YSîüŋáüĢžˇ›íĐËũņšąUá‚ɒ!ū˛ŧ“X×4ßüTÕõ›Ûlų‘C’žģ6¯úŋöžV,ŋÄ1ކŗu˙ˆwž:Õgđŋ„§[M?ĨŪ­/téōũ~čîŪÕë’+ßčōŽb–ÂËËŠu čú˜˙KĶ`—ë\vĄđלiZœņE˙<§ũīū‡Ÿîû~˜lk‹oxl\EūēȎ°˙ņšw'áģ˙f5WJņ™cp"û/ö,×<ŒÚo˙€|Ņ?åéĶ éÆąvē„„7:„ļņcķ˙Ņ[dģīČßu?ģNņŽåŌôūtËÛÎĖŪ ‰Ÿúęģ“orŲöž8û‹xe°ˇÖõÆÛųķØguf,vvŋh—Ošžļ—Ę˙W<˙ņ}ūnÜt­;?xˇH˙ņ;¸ĩ‹ūYˆm˙ŽwųW[gņĶÄZYß8‡T´ūëíųRßIĮū;]~ûAiŸˇč×ÖŌ˙ĶšYŗ˙ Öė|ĢÛīž¸ųį{o˙ëĨŧđoÃŊwI:Ôēlą\Ž&Œ=ŗ˙ß<|߅yŽôø|% ŧZ]Õđ‡Ė_Ũ]Ē<ÖßĮōÉÖ&˙et¯{øwŦžŋā #P”īœÃåËūúüĢĢĸšÛų—×~•k=íÜC÷‡îAuäū÷°É§5ˆîeÖííŋŲĩ˛˙؜ˇōĒŗč#yŋuâëˆĸôûš˙Ųjŧ°øûL˙[­#Y‡ŽËˆZÚ_ĻåbŋøíZŅS+~mü=ûį^mđîŪŌįHÖ>ÖÂ!æÃûđ|ˇßüžŊŊxëôgÃų|·ú ķüĖYĮī]ŋ/ôŽĻŠepŪ8Ō,%¸đüŗCŸøš`ãžč¤úŸČŌÔ>ZyĶĪĨj7J9!˙Ÿoķęw ۈÁ'ß˙ļGåö˙*ĩ—Šáģ{ķu5¨Ōõsū¯Č˙CŸfīÛ˙{Ļ8ük̎ņ”ÖÜ}ļĪTf#ŸąĖāG÷o˙Ž÷ãŠÍū؞Úâ/DŅkwßë.nŋuĶ wûģ?ÛįņfZÃ˛ũī‡ŧ//ÚsöKËŠ˙įŸīĨ÷ôų˙Š5­~ëėūoúŸ7Î˙žŨų“ÛŒåyįj§‹Os{Ŧ^Â%>lŧB•ô†š&á *}W[ÄZdŖũB'ū>ĻōŅ×ūųų>čęy¯ņ7üCã9g¸Ô.ėqŸøöŒâ1XÖ-5öĄooĻiÆkĸq CįËģ^÷á/éŪŌŖņ/î„ē„_ę"”īHEĮ!Įųë^mãī‰:ŋ‹õiĄ‹uļ“oūŽØ÷˙jOöŋ•r2L|ŒEqû¯ü‰+Ÿ—úWŽ|3đŪ+Õ˙á-ņ@YįũØ˙ËMŧsūĘūĩô%Zōō L×3ˆŖÍrRÔ|QäéįėÚLņņ9ęÜŽŗNĶ­tÛQmj¸ŒvÍsū”[\kÚ* GĻęũÉQf˙ŲÚēĘãāÕuŨ_\Ô#ĶÆÚĪM›ėō˜]ÚwōÕĪF]˜ßūÕTÖ4ë­Jk˜ĩ]7ícΈūāˇü{ĄVũßûeúŽ8īŌĒÂai¯ęŗøKÃ–Ō‘öX˙Ķá äCčŊ­w)Ļ‘ĻˆĀZÛEĮ˛­y÷‹ĩëK[oĩéZ”ŨËŧŋ<_īč C<&[y§Œų?õÕūĸēÛw6+,Fϧ×7âØ<贑é¨Ã˙ŗ{čiõÂxŖG´ÔüQ§ųöĮ÷Vˇfõ§îŸūŋNJķÁÛ~ëNēû›ûÅ˙n?—ø?īžßĻåĮ&ģaöˆĸķüŸõ“ũŸîí˙j >_ü{§ũļ¤ļÔ-$¸:|Ll9˙[ōX|ßÅo&C6īîlíÜüŽÔ<5yŠÛo:Ũ›öGˇƒÍŨe÷˙Ŋ÷•—æūéĶĢnŠßIø6MÕûZk,“ũEŧg÷vCûÍūŅ˙>ĩæÚî­Ģëúŧך­ÃKvzįĸņ4h^Õm•Īī™]'‚<3/Šŧ[c`nWÚ$1œ*˙wũĒúkÂē-¤~ŌßHÔ/í-üœˆüī0ø îũ+¤Oí›ūXKũû˙Ĩ¨ëđéļūmāû(ķDŊá[>÷Gã\äV÷~2žDųZĀ#éöŠ˙ô:ôŠåÛKĶīĄ‡ū=bģŽ)ã˙oøŸøšb͖oË×| Ēj×ēMŞŋí}6_ŗOūßĘĨ_ņĪ^õØQEVMį‡tĢįķfļ_7ūzwŽGUđ$ŪAžEÔ?ķĘ_ķū~ŦÍ\ßöuį‡n<čŧũ*oúeū¯ũŨŸqŋ/§%suo]éž7Đnõûo´›x¤Ûqeûŋ‘ŲwnFĪMŊTŨ¸ëéš'‹ôOļĶQƒĘĮ´ņŧ3˙ãß{đ­m mmî!6â(c™ŧūÅZ¸ËˇķMĮ•å˙Ë_ö}ëæ˙Ž™>&°ģŽâi"ŊĶĮv}ŲīW“yĮĶļĪžœø9âŽ|ųŸlŠYã’8ši{ĩÛüœw2^Ę'˙Dļũ럸˙÷Ŋˇķظ’_ųjsS×'ãģ˜m´í<Ë˙Aũļ<ønoĖ&æÛūķü˙ŸåZ5ÍjąĮqâũ")@1ų3qŸ÷}˙Īķģ¨Ûy÷pI˛3[’{÷ÃmųĮüæ°5[yŋŗü™uŋ7Ę?ōßËķ_æ^ŒŸüOáŌšģ'M玏û^™ö¨b˙Q˙}˙ū×îûũâø6Úuįú­'Sû,?ķĘã7 ˙|ˇī?‹ķ_īĢņ]NīÍ×īî¤i’ęCõųŗ˙ęĒw–ŗ[Ü8s Ū1ķu¯§ü‹á_ m&ÛČÕeĩŽV“Rũלø^<ΟE¯#ņŋ„ū!j3Í­k6ų$˙–ļĨfXĮû;z-yŧÖķ[ÍåKŽAØĶc“éßĸ?đ˛mæ˙–^LŅ˙ã•ô‡†bĐ­âŽ*(ˈĻ…m×%ņ )Ž|+q]û­M΃m%¯úŖĶķ­j+˜đŧ ßxŠ˙ŊÖ¨GũûŽ8ŋš5t•ƒá[yGSĮåųûTßđ?ē?ā)ĩā5/‰.Eļƒ~LĪ ‚8ųä8ū›EÕ­u­* BĶÍōeûžjl?+méõŦxĮûÜĮknf˜˜?&?īŽ?ũXë^c{s4ļūnˇsVõõ˙ŽîSũ?QŠķī\ųwūNŗöŽņyS/ū?ŗøÛžqüë&+Éĸ˙K´ũÔßōÃūķn˙õņYWpI%ũĮ–3ûĖW§xOá=ÍâÁĢøŖZwËåZã÷×?ė˙ŗĮøû×kqâoėĪ\ZÚéļöēTB8Ŧmb˙]ģûŋôŌFę8ųGĖs•Ī=q§Muqo.­mû˜ŋyö_áyéŖ_Žßŧ[?;6ߙūũ¯ķŸFĮ“kN˛ŗē¸˙KšōŦ˙Īųžīđí|ī¨IZæOYŸųŸZúŸā'áÅŧ’˙Ŧ’ęs˙×¤×ã{xV˙AÔ&°û~.ūËöc˙MũåŲÅ&•.…-åĖGR7W’ËÍŽĒ˙ŧ‡ũ€ū}ëzܛiŽŅ„Q¸`ŲûĪåZ1ÉæõĒ7z•}m4-mķG'{ü#Z>Ą¨]\Ü_ÚZÚI‹?úgģ˙ŽũãĪ^ĩcÁ–:g„Ŧ-n_3į—1dw}Ēvæš_čŽŋ­_jšĐ#Ãē,>u­˜û×2Ēīß˙˛ķųW!{o¨ęz‡•ˇü{y’\ū ûÍŧüģ~æīŊ˙ÎŪKJŌmuKũ>ęCįxJÚęîâ9‹É’üyöü™õíō×H4MGá_Ž4ˆĄv…}¨/—?ü´ūîŨßîˇŨū-šôŽ(į2c?5QEUy­á¸Ŋ€IõŽC[øwĸj÷V×ņŠĩģļΐqē>}QŋĻŋJâ|]ā¯\ZfÁĒŨųYõųé›}ßø ?€gxOTņf§˜u]KíWgū]oå‡üīz˙•b7oükhöđjÛOĨKדæÛ˛Å—îķęŋ8¯2øÃn§øjîÖæ˜§ƒnūg?'×ōĪøÖw…>M}}e%Ũ¨ų?åØõ‘ŋÛ˙gÛū×vßNŅ~×ĸjڌ7vĐyļ×~b˙ߨÛĶķÛüļĢúŊÅĨĩĮ“˙m?ëŸ×˙˙9­ˆéõËøžIĸĩĶü¯úÛú˙Ûü˙:܊ÎŗåËI|ãW+“ÔíĖž>Đ$'ũ\7Ëķũ>Ũ ĸ8Ī›ö2_jÃé:‡Ÿ˛ūū`‡Í”¯Ũį˙žĪˇį\ÍíĖ×ZĮ•uįųQŦōžo‘?å§û?†9˙k^tvÚlļöđ˙ĒũķËųeü›åôĀ˙€ŸŪ|Ų{˙!{+ū{6?:ö|ŧÕČÔüX&ĩĩꖹÄŌŋũßįNÔ|iŽxOÄ÷:$6ךž¤~î n`ũô?ģû˙wģ‘Œ šŖ|Kđāō<¯>Âī¤Ļãž˙ū¯ē¤ŸPĐŧGu;kR!.<ŲÖ9|¯øaŋSøüģ¨Ūü đæĄd.­Mö–|Ŧâ3ö„˙žXoŦ_ü=Öŧ3â]Pą0ę–ÚlĪ%רß÷˙?ũ3}ŧíÅz‡u˜nl.mf&Ÿí Ŗ­ĪîæØefû‡ũęí̜ņw•ũ<īõ^oūĶz<'›ā_´ũ¯ũ~˙ûõŅÖˆĩØ1¸?<ĪũŅũOaÍsĶüYĸøvÆ›HÔ` ĘAķ`“÷Ÿ?ŪųŋŊũŅ[OŽO.4ũGDžĩšį÷~ht?÷ņ>īü-iiwÖúF‘8CˆĀ)†ÎTž3F<ŲĨës'ü°û‹ū}Ír^%Đnü5 kú5ũ÷ŲmåûUūæņ(˙–’Gũ×īē}+ƟŖiˇzŦ§ˇWߟ•}øú×ŗxkĀ^øsn5¯][ŨkQE˜â˙–PŋđãũŽŲ=úV ^!Ô5´j…ĪÚĩ¯ųE˙<ĸūôŖķi0ûú‘Yy_g–_ôš­ˇãßũĖüų˙dũ÷RâIžĪæ˙Ī/ķüö˙ĶˆœnŖ¨ŪK¨[ÅĢ}‚ī÷_ęĸ}˙f˙Ų‹ņ˙køõ-ĩČ´ī7PũÕäŋåÚûŊ}=‰,žAu˙ŗ×Cüëë‚Ūqøqk$‡—šrŸO0×ŖW9â•Īö?ũ…­ëŸÔlĄēņ ŧQ~ö7ūē˙{ûßđ/ׯÕÕÛéútš€ēˆCįG˙<†ß˙]> Mļ›Î†Ü‰ŊDĪū5ƙoĻX\Iin3Œâŗ5+}ŪÖŸŊķôųÉČ˙Ļg¯ųúq]•˙ {úâŸú Sņ\ÜøKW‚؁4–˛ ũיÉSü=ëĀ‹Ãū‚Ōî%åÄ?é™õūįüĨs2x;YĶü1âo›x%Ōg‹í7[žd1"lŽD˙ļKȭˋi> ü/Ō.##í’ [ŧžŌÆËŋų8¯@ĸŠ(ĸŠ(ĸŠ­qi Ü]Ė"Qé\gˆüiylŗZ[ĘeūY‡ëûˇOŗ~ņģēúą¯5đO€5[wí‘iŋŲö–1y遗ũ+ø¤‹Ŗcåęznų}WÜô}×Fĩ1@9ū9zä5Ģ/'\ŋ”>Ũ,cøūMŋ.Ū[úŗ÷—JÚ[ģßŪĮoæų~_îîŋŲüŊTū]u‘ÅåÂ#Š+–ņܞW‡­å˙¨—ū”G]+įoîúŌׯÉ-ŋŧ-/üõûD?ų Û˙eôü̞zĒö‘ o) ēģʸ‰>×Ģ.ŖiƒÎũßú,[#ųGū…Ÿ˜ōv˙ĀÖCy›cöˆĸ˙J›Í˙ŠŊũÔÛķ6ßÔ÷ųrœīÂiRM}¯j0yš§žŌAæŨĮöÚéøĢ}6Ö§>-[hB]+Ahnõ|s!˙Uo˙Åō}+ÍūI¨ø›V×.ާšæi9'2wä˙Ÿä3ļŊQøQ¤Oe5ÜžF|ŽžONŸŨ˙?w¯ÍŋŽÔ~^[7Ošž×ū[Žųö]žß‡žØíüEãīūúčhi˙/—qû_7ĘŊ1Ûî˙sļŅ]‹ņļŌč˜ĩ›o(ž?š˙˙ß]qüÍzNöMmwHÂę!Ö9üšĮü֞ēTÖ$Å`×ļŅz‰žŅ˙€IĪũķXš­î̍hUŧŽĪ3ū=r˙užôRņUĄā‰á˛đļŸĨ]ĸŨÛEäųūí˙ĪŌ¯xÅ:†`čųˇrįČĩ‹īÉū ęĮ^w¨O.ĨmqĒø–įė—w?čĐ[ĞoŲŖāDū9OSú˙ Õ¸_ų˙?įĻų˛/u¯°}ĸ)m ˙F˙[-×÷˙Úū‹ßßægåüáøĨOŲtŌ-d›Ėû|ŖË‹˙ŗü:~ŖĒÕŧ9wāBÃOē¸ûö”XŽëgü´_ŊûŊĮ¯~•ãW›‹ë*߈ķæß_zžĢø?ûŋ†š|;ŧĪ*kˆķ˙mŪģęæ<](Œč˙V€čUÉj73EŦų°ų˙ëŋĪû_×§ėUčü/o4R™Ĩļ˙[˙-Ī˙ĢõfėiŽ7ŒV&Ĩg˙ŽĄimli,b?r¤Sü3¨AŠøgOģ´æ)bSô=˙#ZŌI(d‘‚ õŽF˙EŊŧOĩh~!ŧ>gŲūՔ˙€ˇÍˇčw/°ŽoĀ?ĩg_šđ׈´ĩŠōÛīķüjyFí˙^=ĢWáāøBâĶŊ–Ą=ŋäúõčTQEQEQEQ^kņ&k8æŌ Ė9†Ú+ĢÜÄ|šŋuú´“Ŧ{ˇsîâŧķÃ>+ņˇˆ<™n`ēōå˙–ŋėĮŊŋxœm˙iģn$Œ“^ËŖxĶIÕüˆdŸė:„ƒū<Ž~I?û/ÂēŠåŧveÂÆX×}ŽĪ˙J#­mM/>Ė~Áūģßü˙Ÿ­`č:†Ŗöč-oũį˜yûßįķûŊqËEâi|ŋøH/ü´ģûķ'ųäūĶĪ$1ÍûČ3Û?īV\÷g÷g0'›ūôŸyŋŲųOŨ˙=ųû9!ūĐōĸļ˙UûŲūūéd˙ĻíįŽô vX{)#6éoVëī<Ķ˙|Ŗ?ņ˙ēŧ~?ĪzžąŽčzŪši¤ęöđÛM,XũŌĮ?÷?‡æüĢ—ļ|ũ Cû¨üŦI7ųõ¯aø Ĩ”ÕĩŽq$SXE'NŸŧo“ü*÷øF<ŽÕĪGq¨ęwW}š˛ĶTūūŋ˙_ĻÜėYš¸ƒũ$Á,Čyō˙ĪÖą5očz°%­„rzķūxūę㌚ø%kosöŊSšĶį˙§o“ü˙ŸĮD×~$YhVúĩÂ떤~ō+Ÿū9ō˙Ÿ^kĸļøĮg ˙e×ô[í?ū›ŪEũôÍuÚVŠáĪÛgKÔíīāa'ū:ß5a_ü;˛77­™¸ąŧë›_Ū‡Û÷>I?ôÆk˜šđϝuŦ\]˙iÁ¨^ËĩŦūeŦ¯û ˙ĮūÖîĩīĻ[˙ÄÛMŸOķwūdã˙BoSü8›ū˙3ČŌaU§›i5Ûy›4–]ĒŠūĶ|ūÛ[×{Ÿ YĮ5ô÷vj#ŌmŋŅė´ŋߗ˙d_öWĐ֟Šo~Á \\œyCũgĶãŠįíĨ—ÃūŸÄĻÖ×õ1#ŌG˙W˙˛ģģuųq˛~ë÷˛ū÷ūZK˙=&˙õüŪŪûK3ŧ#đš[éįņgG•ŋũ#ėDlĪŧŸŨ˙s˙ÕQë_f×nŋŗôᏇíđ6ķũŨũŧŋĶĻ}+Ī5WûjŨtŊ>Ųmáũߟ<§oûŠŧũØĮmŪ™5JIŦ‰šÂę ŽĶ÷ļ§ũfáÆīüw>ģļņĶļŪ'†/ŗÚ}›ũl^gũv˙ĻkķíŽÜ~"Ôu;&ĶMŸûJįw•˙] íū!ŸĖüÎÕÜøá%´ĢöĪâîcŌ×~GûōˇņČ{öė8¯PŠ(­mÄqqū•ÎøÚßHŊđüļÄæ!sÄWúī3ø|ĄũúųßGø{â)5 BęëÃwŌÅäÍåũĒ­Ķ×īzv¯ >éķi~Ķ´ûĢfļš/0¤ûÃ÷Öģá> Úũ– ?-îŋŗO’mnÕČŗIĀXv5#Ļö‹ ¯ˇX iy§zŋûŒŲųOáųVޟĸ yĖ–Ú”ä ˙Ÿķ˙|íŪLĸü懒8ē×âíWR‹ÂŪ”~ËåEūžQķ˙ĀWˇü §Ĩoiē=Ļ¤.—`<¨cžđ'øžšæšÍSáė:ŸjWXō˙ĪūüúחxĮž#đ‹ÁŦéÖÂ(ÄMÄēFøü¯úiĩ6ˇũõšGJ×🈭ÄÃ^ņĀŽkÉģŧûČû¤_-˙ßdųIĮ%xãxĮZ/‡5ŸCŦ˙  Nũ¯a“‡X÷ôI6nØ˙Zö‹KÛKëĩZÜE,GūZFr*ŨQEQEQEÍø›ÃkĐĀr"ģļ9‚\ô ōēˇû,8õôŽBÃá{Yęˇ˜ēũíĪü°‹ũT_wîũvõü{ į>$x \šŅíĨ†Ü_›iŒ’ŋį—éõ˙ëîfO øƒVŌ-íôũ?[šîhøž T?÷ņō¯ßOA‚G¯ņlŊŽüMŌüCámGFģ˙‰^ĩąūâSōHRUo‘ûũÚö..mū´ôŽ8‡ÆøžISÅŪ÷Ô$˙Ņ{˙JęîÎÁ‘˙ nųģVMÜ_ŧøü˜ŧÂįîđ>Dõīūq›! öÛKo6/7Ëû‘ÅŨ˙ĐzķūYm-îĩA–îä]Z[KÉō>B˙ôĪéũîŨŽs ņ…m>ŋãŨWR[‹{KyĨ†ÛĘĪ–gūßįÁéÚ%ŪĻÖđÚäŨÜĘŋöcū}M{Ī +Ŋ7Ä3ÚŨ_‹ŦiP˙Û?ŪŋËūkØŪQ&I;V<ÚŠûAĩ8ĩ˙E턺v˙€û}iÚm×Û§ķ…ĮîŧŽ>Mžwũ4˙ Ûĸŧ÷á|Q\ø랟7÷Ŧ$˙?įč:WCwá*čüöˏoķū~oīâõƒzmĖæk[“ Ŗũ\ŋōĶūúūŊzûmÄVņ׃?s§q¨Cúßĩ7˙Cųŋī–úéõŒt\éúև}i5ˇüĩĮš›ŋĪŋâ+F?CĒißņ)š‚[?ųk˙žûßėÉķĀĢ|Ģx4{ëkˆnížË Ī—öŸ°Iå}Īģš>ëc˙A_MģˇlŽ5Ũ> tĩÔôRÔÁuū…)˙eve[ūų—â+G_Ôt{ W×ÖZU´ÆęúR|Ø˙wĖ`yyŨĪ^”īkęēņŸĸy„žV~Īū×üôvūU˙žˇíõĻI‡ŧÖÚ¯‰u/ĩj?ęâūäî§üīž~^08¯&øãËĪ j;Cîíbų?īŦėßívûŪ^_yÁâ1ZđÍw >i?gōŒsGŋūZŋđü§ī!WST[¨MŖÛÜ}¨ŸŪ}“ŦŲëŸķũww^øIŽkp[]Íqũ•öbšaũįũķũáũī×ĶŪ<3áM#ÂhĩĶ-ąũé.˙įŌˇ÷×;ũˇ.ŗįĮáđ$ä:ŒŖ÷Ø˙žŸ‡ËīVŦ|?ii/ÚĻ˙JÔHæōāe˙ā?Üˊ×G'|ԔW'âMCHžļ¸Đ%˙Oŧ–#›+_õŸ÷×Hųūõr÷—ˇvŋŲ˙đ•ų¯úąuü{]ĩæ˙Ë6õ^=Fė.ŌÛJ˙–ļ–Đ~÷ũŋūvõéøŦÛŅî<ŨC÷ļŪoųūķúîŲŌĮ$>s\Įj#ķīg“÷}?Zä5ëØüg§Ü螸 iį§ęŸō ­š•;;ŸËÔ×9§|bōŧM‡åō5xZhí˙ĩl˙r2Ύ”l˙ã§é]įŠüK6X[Å-ũÎī/Í8Ž$_Ŋ#‘ü5æ?ĩ}6äĪäOa/éVË˙÷U~}§œnĪĄæŧį\ÖtÛ˙ĪŦEkĒZéÆ?ŪÚ͡(˙ķÉ?ا§ ¯Søk§Zj°\C|omä“÷–ų›#xäūŨIųŊé]÷…´MC@Ŋŋĩ”Äúo—Ųe!-ķŪŋßû™oâŽēŠ(ĸŠ(ĸŠ(ĸŠ(ĸšũ{šOˆt˙˛ŨÛđîä‹åx˙ŨŽūËmq¨Jnĩ ßę…×üŗOî˙ŧßÄßÅßī1Ēf-GC¸Å­Ėú\ąËŧ_ę>oúeũG??líĸĶū!fōuë_*/ųúĩ>bĀ×ī/á¸{āŽ[â›Û]SVđ~Ą§ÜAsiũ­īc|ũåoķūMz-fÜŪEĻŽ>ΈŊEsŅŪŪjZŊ˙Hˆ dķ!˙wûÜíö˙ëîÛŌÛŲũšŨǝ—ž ŨË/‹üAŅŌŪéŧ¨üļöūŸĪÔ×öÉėoū× Į•/ŦN}?¨¯Ą~ŪC}âë™ašˇš/ė˜üąÚ1æˇđ˙:œŸVŧžKx<ČÆO™ƒôŽK^x˙á%ˇ‰­Ūūo+ū=ĪÜ˙ö‰¸üūU§é—“k›û¨Ŗ—Ę˙T6~˙væ_§ųĮņ3vÔW đÕķ§j0ũŸÉōĩ ø˙ļ¯ūŠæģŠ}2ŧŖXŅ<īk×qˆFęŪןģ_Ŋ˙ŽûôęvŠåī<¯oq>“üĩĩ›÷_đá˙>ƒ/&âũ2âßū&_ÚWü˛Ŋ˙9ū9<ã¸;&^ŗ‹ũÄ$ņ^ŦûEŸībûŸÜ8eū™ūpWKĄøąo•ĨøŽ;Ę˙W/üŗ˙ļoūĪŋÔđÍWT1ã'˙UrĶj–ž%ņ°}DĮ§üūDVĶíûnĪžĖëÎÅmĘu(Ųâ­Ūx#ÁÖ6Ļ_ėÛ}<ųzˇũĖŋ÷ÚüÕcÃڔđ΍hē­Į›sc*î|RĒ?ī˙ õ#=늯8đ‘įčú„ÖڕõŦßÚˇŖ÷OōŽoāl­u-ˇîn­Ŧu;^įũTŸ÷ÉƟĖV"xgD ĶY˙jøl˙Ŧx­æû<Šs> ę2;OņŊ˙ũuû-¤Ÿ¯—Yž Ōŧ=áÍ=ĩ?ëwúŦ_ÃėųIŅ`]¨*ņ|LÔŧ\`ŗŨũ—Ągū=aîŖûßŪ˙wĨeü<‰/ū ø~Ū>ŸÚoû῝vŠÚ_k ē“Qōlãģû/ÛųâÚv˜Ŗü‹ļî>nWJ]ŌįVˇĶô˙"Ö+ųj>i7lÛŋw÷Õ[ ž›ŗũÚãôßéz—‚ŧ{a-°ōėu[ßŗ\IķH'¯_ņŽ'áMÖ­oâE7-Í×Û#ˆ˙uQ˙xŋ]Ž­_QŅErŪ1×tũ'GŨŨ‹yo?wúWsėũŋ­pv^9ņfžeרĩëāÚÍëūĪãČķíCBģĶn-æķØMŪw›o÷ŲÆÖüŋģūÂĶŧ=ņÆoî4¯[Üyļō´n‚<ƒķcį~īüu{¨ZjļBîÆq42taLˇ´|÷D\Ī˙=<ŦĐ¯ž%E%ŋÅ}fÚ+lųˇiō˙ĪMÁ[s×ņKayĢͧĩŋ— 1yŋf´ûōEģî;ļß7Ū˙ؚĩôo YØây _ĩë˜ūč˙? P:Z+…đ xļÖc—ļ­qũķ+˙Ÿ_Ōē›}* <ÚX~äUČŧß y˜ķ*ZķšĸķŌoųīg1…˙5ëø×Ë˙numkâ-ū—%Ė÷ĻÚëė֐튺â_‡> đ§†`ŋÔîtĄŒƒûߛøÚ˙€ÕOƒ?ŋøąŖįū›ü„Õô׉#û7‡æû-ŧ9C&>âŸß)9ūĩ'‡í<ĢĩK:į÷™˙cˇ˙õjķ4Ųŋ üw-ĖĮí7—]~_™öô˙žĢgÃ~˛Ōtī xĻæ(i>˙KŽ ũ?yTt/g\ņöT>ŋōŗŸ7ĪŪuĮõ¯Z‰ã”y‘ķīRÕø,îŦφūdĩ#÷‚ll?p—˙ tĩ–{ŋ ę7Úō Ÿ˛ПûgūÄëūņ–Ÿmåę-ˆŦ˙éÄß÷īü?Ųūč‘áŊWėēđ߈īôšĸ?ō Ŋųã˙k÷oÛūĮ?ŨËwÚÄũrÅŧ­{CûPĪü|iG'õÉūo×Û¨5ŲøĮņB˙ÄĢR†Yqū œH?ā5ŌŅEQEQETn‚U1ÉÍpÚˇÃm:įUŸXŌf}3Q›ũnøe˙y?ø’=kĖĩũĮš/ˆleŌíM­ßIuøõx˙Ûūč_îļ}ßēŌŧ{ŦZâ-gN7ŅĪŨ¯É'ü /Ãąū÷+Ws¤kúnšoįX\ųŋķŌ/ųiûËÕk柍ÖfÛâ­Ė‘˙ËĖ0ŸĮnßũ–ŗôŸjZšœę§ė°Å˙}îûŋwÛåũ¯OWøe¤Účž16ļļæ(ŋ˛z÷›÷Ãįoķôã–öˆK ŽNõžim)’q{Uš§ŠgsqöXŽ›ĶéN[Č>Úm~ĶõC¯ųé\ˇ€?×ø‡ūÂ×?ú5ëļĸ ˇš†āŽ+Hĩ…ž#øĸoŗA$>UŸe?ŧųŋņīģ˙|Ž}; +ak•ŧ1EØEYú…ÅÜŖėļ–ų—Öxw÷ĪãÅyŊí´Ņ}ĸ)ī×ū;íūĮū9ĮÜJÎũ÷ų˙?ī˙ãü‘ŊßĮīįx:āJ34rĮû˙ö~îßņ÷ÛÆ~Xø/ø\ņ´ķ .äĮū˛yÎO­}!❅žđ­ŧßf†ķTŸļ8ä?ûŨ¯@ŽÅŋtī˜aˇęėÍäɃōÁūų˙>ĩãúÆŖyâ­[PÕuö¸|™>ÍŠû¨>įŨųŠū=}ÁÎĘR^ŲØũŸėŸgķĸũä˛˙ Kķ˙w?7ÍōãŸģÛj×Ems Õŋ›ú™Õģūw~ģnķ}ŋC‚x´ˆ|ë‰å“gÎ_›ķæ¸;éúWÄīé͙&ēōfãî|–ëŋüūuŋĸj0˙kÜJ.D˛Üžb%ãˇËÁüAjÕ˛“\“Zš’ëȋJ÷pĮÖI?ÛŨYÖQŪ?ÄŨbYnsin#‹f>ķž~ŋs˙ŽÂš?‡_ō#X×[ũõá¯jˇž6ÔtũF܍æCũ‘qäėķvũ˙÷‡ŋø×q{z,´ųîˆķDc8Ž—NÔ!Ôė!ģ‡ũ\ŖŠųûÂļŪoí ŦÚjÁr.MĪ™ũŨ§šäū//Ų~#jt,VÎÎ(Åŧü)8QÚŦ|€ˇÄũ:CÚŸ˙Įõ¯ĨüCĻËĢč6ˇ"nFŋĪô̎’Ec§Í)ÄqEå^ŋÚ ôŨÜĪū,—ú­Į÷-Ä­ˇ{ˇŨËlüĢ3Ä~'ĩˇšÖl. ŌôčĮ–%“÷oWwæËNĮũ¯Ēņ^}ĸ^KŸsh.‚YcķâŠM˛Oũß_‘~ŸÅ^Ŗá}kCŅn7eÔ- šÜÜGüš¸ũCávģŖŗKá}hŨAÛOÔūa˙“˙­íŌ¸Ícė–ˇ_eņ†‡>—7ü÷ĮË˙låOķë˖Ŧx‹MˇÎ‰âA¨ZE˙,/˙Ō“ũß5>ō8ų•k¯˛øĢiĮˆ4ۍ/ūž#?iˇ˙ŋ‰ūØéēΛŦAæéú…ŊĐõ‚`õ§EQEQEQXZ†4­Hų˛Ûˆå˙žąđĪOĘŧ__Ņ$ĶüM¨3ŨOļ§No‡rIĢŧ‚Wô˙ëōj='O›Å^9¸šŠäkSYE?m—ūYđŋŨÂũī7įëéķtôũĀąq6Ē3/üđsü˙N?ŧZc‘ņŠŋę_“˙J˙­]Ĩ•ŽÍök/Ú<œW™éQũ—íßÜĪ?ķīkūĪÍ˙|~˜Û—gŖiöú~°mõ‘nÄpOųúÖ'Ã÷ÍĮŠ?ė9u˙ĄÕëëöÔ´˙;K¸›1]Įņ˙ö?\¨ęš¯ˆžĪcåZä^I™ûū–éũų?ĸ˙æC4}^íá‹í9ĩۈ<ŅûŲ€ûŌ6>ęzqũ+?@ū.O‹ļÜMŋÉŗü?Öú“ü€Žžöōh@’æe“äŒČxŨX7öë}s ۘ&š“÷˜ÅÖØžoĪëĮ˙ZŗėĨ›tÖą~ōo'‹_—§ŪųŸ,TŋĶņåĢ’Ŋûdļ˙d—ū{yßeƒæ˙žŸũŸ~ũ”íTäË,ßęmV?Ÿî˙veĒú”ˇ^0ķŽ×ū'ļ×sVį•O'Ëu‚4˙e•‘ņūÃgšÛœøzÆúxžĶ>•7™ūļ ŧ¸ķ˙ ßBŸđÜÂ<mWw—5ČĪũˇ’§Đü1‘¨Ü\ʰŽĐ ūé ŒøĮEūĮ÷*Ī‹QäđÅĮ'ƌĮ$Û3Ÿ-\3ô˙dÄøs§Moą~<č´ŨJëĪąļ–o7 šOûhrد*ˇÕĶCũĄõ Ļĩž\ŨÉî[įMŠ\§ÅQ&ĢņQŧ´ļœÃq,0ŒÃŗ÷žR|ŸīVįĀy?ácÜųŋōī§ÉŸo+ę į|m¨OĨø;Qģĩ˙]\WéļÖū%>(šļžKKm>Ú8-G[‹™>Xv¯÷›÷ė­R|A͝,?âiĢŽKiˆ#ûđC,Ž˙,IūÂ/ęĮŌē ü1´˙…p4~–æë7õˇf^0ŲŠū YĮoāũBH­æļ†ëP’HÃzmEųāJÕé´VŖá}'U—í3څģ‹Č?u7ũöŧÖhū/ĐĪüIu‘ŦÚ÷ĩÖOī?ā"˙č@ÔOã-æįû/ÅÚqŅnúą¨ãȗŪ9žīō5Õ%­ÕĨšû5ךqŌį“˙}õüķUî5 / Į­[ũ–.˙jÁ‡ūúéų×%Ģ|!đÍėßoŅÚ}ėt—N8÷Īøbš]GÃ~8đÛôkYįũm¯îîGüūÛ˙e]ŧĮüS’j?Ŋķü9ĢBëÆTūūŸ‚üũŽ•âßx÷7mŊgüõũÍŪßũūúį¯÷[ocĨüKđæŖqökšæŅīüģęƒČ?ĪiüëˇĸŠ(ĸŠ(ĸŠ+žņ†mŧCnÚg´ēũ]Õąũā¨ü'á=;Âz|öö OÚ%ķĻ‘‚Œˇü]-qž)ĶfūĐąÖ4ûķkĒÆ ŧdŸÜ˜ūû‰Wē™ãšģ?‹bÚŪ ŋižUœ×rYÁm˙-J˙”ß2Šúĩz™ŦéÚÅą–Âę pyCūĐūš5Ŧ ˛hƒŪĄ“K´–Ú{SK֕"‚ÂČEōâ‚.#ˆtJķŋ ŦŋÚŪ0ĸc4ZܗUŋÉæņū­ÛßüņœÚž×õt&ļ2ŨÍ.˙ŪCŊ÷8ũ?ßäŸĮcu}8K}qˇSÍw/üōú|Ūb¯Ę6üšn‡ŽŠnxzÜÄx¸”‰eķ|ģX~âŖũÆvū{ķ÷˜ēĘ åøâx­§ō‰°ŗũīŖ~ķôüūžUŊŧÖVûIē˜wŸģJįÁ-ą’ÂæŌ~īĪ‚*“æ—įęßĮ÷}ũÍ2 ^čã˙€ũü˙Ŋé^‹Uãĩ†9æš+x„˛˙Ŧ“ûõÎë‰wĸęÃ_ĶíĖ&!ĨmĖĨ”‘=YrÜwÚĩâ:Oˆ´ø.Ŗō/­$æ9zŠķĪĮĢ_[\čÚ]ĪŲl­nŽŧß*o.yŸí2ũŲ9ÚŋsøyõŽŖûgVͰ—Í?éũ<ŸüŒ›Ŗ˙ĮEkGŽÅ¨[M`}e˙U˙å­KÛKØ<ÛYâ–/XÎkå?ÛŪÉņ_ÄÚ*XîŌO3ßåŲQx÷ÆRøĮWĶîc¸1ũŠŌ8í¯Y_˙¯í]_ėķåkĮž,ū÷ũ´JúB¸_Š2[xXâëė°É.'—ũŽŸĪmqß 4ëŊoXÕĩÛŅ8Ķ­īØlåū ä_ûâ=¨=+ąņN…>ąã_ Ę|ßėû_>kŦtĘíō÷ãÕŨVv‘ĨZčzL}¨Äã´hĸą.üW éķ}žķX˛†oî´Ã5Ë5ūšã]CQĩŅ.,mt;)~ÎnŽ­>ÕöŠ?‹jî ązUohÚŦVú…ĩ†Ĩũ—¨i—_f’ <Û)†Õ‘_ÉcûŧĢŽ‡5ąsâ­KÃÃËņœ<œqy§Mæûôß?ū…ZtēąįęĸžlœĘmöãū÷Ôf¯,ڕ˛:Ø^zÉîĪũōßãTuoøĒ×ėĨ´ĮŊĪË,ÔWyđzm3÷žÖî-üøŪūúķų×ĒꎛmöOxr{_úzō~Ķoūā_úģŖŨÚZ˙‡‰'´˙§XĻûD÷ęOøŨÁüYBõö_ĩ6ūŲŅ~ßyēŌ˙øĶrā$ūXĪYĄxķÞ">U†ĨÚ˙įÖoŨM˙|75ĶŅEQEQEËxÎËP›Aķ4•Ũ[ųķŲ6˛˛~M^'ĸiŪ&ņ Ž¤ž}ž(ķe˙Sŋgúŋáų_ ķ7ûŋÅ÷ē Û+Íãíwvßeŧ˙Ÿõøū¯×€ėõ?ágøËLņƕ´„?ëĸ ûĪ/ø—x#§O˜nõįŠõ=ĮZ6Ģ8´/öÁ˙.÷_ģĪû÷_ū],°Cq0gepŪŠXŧ_ãkA61¨G7Ķ|hßįĮĶpčÂҧē‹ũ&īĘũÉ/ķ˙/×ü•Ōô¯+ėōũ›ė°ÅūŽ×;Žßī?ûyįŋįVmϚH§¸9Š7Ŧ˙ķĪŲ‡ņŽcLšÚĪ⧈-ũl,€9ūæ{ûûq˙v€ŗ’>Õ×Í_ûõŒ\˙k‰ĻˇũĖ}–/%?Öoū-ßĀŋî˙€§ø~ŪVâ+b2ņl{>OžßyŗūOSĪkŪOĪļšūâ~xØō{Ÿģīų–ãĨ8o[ÁĸøūÖS›ųŧŸ21÷-ūīîøū?§EĀé÷üBĮ͎î āÛsÄßŨŽ–;ÉŽeĖVâ)ŋŗÔyŋî˙ŸåíUžîÖĖé÷_ôĮũTX˙?Ū˙ëķœëdēÔR~Ņ­ŖķdO;gķęÕŅčÖ_éUßîĄōÕ]lķ_wŨÛū'ō<-zzuå֟§Å§˙Įä_ģ‰?ŋūĶ˙ Oŋˆ×ũĸÍ÷ˇzį†ôûˆ­˙´5Nu)Gī$Æß“ˇÉü?Ī×Đsū=ņEĸčķøz%–]GWc‚!ØIûą+u3ĶÖļô/Ũh^E„7cû&ۈ#Ûķ˙ģūīSųzWSEĀø¯FūÁ.ĐOŲníŋ}}˙UyûûĶûûz7Z‹Âvz[ũCKšĖ˙ÄÆöįé^]âËŨnßâo†4 `–Ö)íī$šÚÛʗošW÷Ÿėū@×ãĪ6ëâÖ¯i ˙—¸˙Õ}˙õiķĀ~jæŖĐļ.5‹ģOŪÅk˙=Ųûßį×ü!ˇ{jŅĮŠCcökO'ÎŲûˇ—zđÛŋā^žÕ§âŸŠž(ūŅūË͇úgÍûĢ;oîŗ{s7ŨĪˀ=ëņĢ㛛k}?Qi.G™ˆŽŧīēĘß?ĖƟwÚē߆Ū<—EÕŦ)Mj?âĒŅ'ąū_,˙ú˙×uĨkÚFģ™Ĩj0]¯ŦZÔQEQEQPÉoÄ>TĀHžõįš÷7SĖļ—ÖoųeĮú¯÷[ī~¸ü2 ⟇Ū2‹IžŌ&Ŧ'§üõßũíßãũ˙\‘'ƒõĪøsGōgŋráDvWãũX˙||ßN¸āc,ĸēŸ øĒÎëz YÕü“7ČûSīũß§¯oöŊōËí+ûÉįŌ.*ũR–ß͚)DōĮŽÃŊppmž/ëĶJUâSo$fO÷ÛÛü˙.˛ŌHĩI ēÅåņŸųīĶô˙=:čŨŪũr-§—ūš&j—s‹ˆå?g„˙Š1ŪUMHXŧę%ˆ#ũdؗō˙vŧĢâLO…uoôo°Û]}ž?6ä~ôū÷øžĨwˇō';|ÂûBŌm4û4ģ˜5 ¤›Īũī—î˛ŋ™=xųEsM)ōb† žÕúĖüųĒ-æŨ\dŸ2Y*îŸQ4w7:|ˇį÷x‚õŨiÚužģū‰´l˙WūûÆ˙uWø¯_v^Zž†đw‡ŋáŌ ˇ–Ü,Āu'Ėøzũ8üĒ/|EđΆfû6ŖŠw˙>Đ,Ÿ’ôük˛ĶĨÔ/ŧ5âģČ<™u-kíWüō‡ėî)˙žņzõę*”÷‘ŦÂÖ3™äôsÜ×-â+īé&æŌÛûBĮH?×öžî?ģøo>•ŖŸxŨnm5‹{ &;Š-nÄs<“Éąžx˙ģĪMßŨé]‚íÅž¨úŠŪŸüŽÕĐËr!Ž@6zV,žŗŒė닍._út|û÷ĘãĩĸēņŸü$šÍČŊšŪáŗų6y{ííūÖīÃÚŧ_ŎĻ/ˆ(–>ŋjōĪū8´Í B×_ƒJđųķaž˙_q˙<Ú§Ū÷āWŧé^ Ņ4}" >o3›ƒūļGū&f÷¯<“Ā“hÜjp2Ëc¨Mûŋø™ĩĶø‡ĪÆĶŸfĒŅĮŽÅû¯ėŲüŸúwĶßĖūĶøŗŲvāøB8ĩߊ0M~ĶųV>dŪ|ŋėũÔ~î7ã¸úû’^Únĩ§kØNA˙ČŠũCUąĒOnŧĶŽ"˙ŽCÎ˙Đ¯Û\Ãp3âOĨX¯?ņöš5[?íGėēu”Sęw–˙ëÂGˇ÷hßínįũÚã?°o%xĢN˙IšČ[͝ũė˛Éå§üŗßˇcgû[OF¯U¸ŊšYė4û cš÷ĖũäōĪ`Ũī[u•ŽéÚn­¤OiĒŠ–ĖŪ›˙eíX5mG^7Vē]‰ŧũŲvožÂ1ʨ_”gĐéZ‘ÔĄ˜I•uo)†x‰č}~„Eiõt–~:Ômt[‹ŊVÔ]}—ũgŲw'ũōß+~đ­]sÂ^=ąkIEŊĐ˙Ÿ[Čv7üwķZäõ¯öÍį…ĩ īūyæB¯ķúW)9ņŸƒ-üŸh“ŨZĪūûĪûëüŽāOēĩ˜đˇˆßÚ˙Įā˙Ÿy ˙ĪķöŨûž‹Nņ'‹t;ô]J VŌ/ųaŠ­˙€Čœ˙ßKĪü wtļtˆČ‹Äeö‹7Šũô?÷Ú…wē~§§ęvßiĶîĄē‹ûиaWčĸŠ(ĸŠ(ĸąu_ éZĮ7VÃĖ˙ž‰ÁŽ7UđÔ\ZŸĩZĪū—?ŽŌ˜ÚVĄĢxBßėļˇųQ˝ūų?īŸãü¸öåuú/Ž­gļÛVįM›ũY$ī‡ūūvQēĘžd|ך߯l~(_ŨÅäf];÷žo÷H÷wūëwüŋŊ­eq­q˙_"oųį/،;6ũíΟöŲv˙öXŲ¸ˇŧ— ƒkå˙Ëųg'÷~eįüôéL‡[ĶíŒ~f–n#ũÔ/ëˇüû ôĢfk;›˛ÉoûŪ¸–ģvūŨ˙"ŧûÆ^ŠÛáÎģ¨ęX›Q–×Ŧ§ũWĖŋø÷ĶũÕâžk¸Ú3­‡žđ˙Ë ũęš%—–Ÿaļˇ˙Jō÷Ü<¤ß*?ÉŦĮŽDķ¤‹ũVqš•â’čÁ _ŧ¸˙V#ŒW¸øX|-Đ'Ô|IoöæĄ˙v‘~ōåĶû›‡-˙×­OKã}Ož]eΆôŒ/ú=ŋīŋīüąüéø.ßZé|aá=ÛØÛhö:}ķ2 sį‹Ąũč§?ũŪŖŌˇ5[;Ģ7؈šīNÄĐįũ†ŨûãŠčmî#šˇŠhšŽA‘N’UŽ#$„lÅyÅŋÄ-Úæãũ }˛I|ÉëŸüŗEÛ÷›gAūõhjž>ūËĶmîäŅ'XoĨŠŪČ\˰4ÅÁûûŋՁūÕt’4Ëyå“ū>īeûMÎSĖ=vûúę&ĩŧŌmŅíášLË7“$¸Ë;nų_͝j|>"ŗ Ká6Ÿwšt0?ā2}Æü oQ_2x‡OÔu?‰úƟĨĮåÎĒŧ”ūOsĐu¯wđ—„,ü)§yQb[š9šē#æ”û×I\”zŒZ'‰5uÖŅßMÍ´ō˙Ē'ËHŲ7{äéūׯĒ^E‰u/Ú!‰ųßÁũGķ¯8øYĄÚ^˙hjŌ[˛ĮĩžīŠßæÛķŗ]´ū°Á6ZÍ˙=ųŨúԂ?Yņđjû-ęk]PÜ^}P°kYũO(˙îĩnÖŗ¯éÚmĖ:~ úlrų||¯ˇø?Ū9āwŦ?í_øGí×PēûTÚž!‚Ō ŋģ˙f5˙ĻÄ[ûœÔēĻŖ(š ŗöŒRÚų1öyĶũķģåīĶŊtPjGû.YķyäũŖėgmhņĒ×÷–ö0ŽŽ<¨Ŋk?Bŗx~Ũ,UÎĄ/Ú$Ÿ*ĸŽÄ\ûÖ埨iņj6æ‡įü‘Ū¸[ŸÃæ!måĶ(ŋøßŨoöw}åųO*+Ī5ī‡qZęÚy˙Cōŋå‡îZƒgû ÛžåĮ^š°jū"Ōn|ĢŠūŨgså˙Įįüĩ‹ũåë÷1Ķ;ŠļZΝŸqiuū‹7üģEŠAūīņûŽ+Ž—]ņ„-ŋ´4ũKûBĪū}gũę˙ߛī/į]VņgJšˇëVĶiRw”ūöûí­YÖžx/Æö˙oŠŪßΔq}§ÉÔ˙Ā~Vük‡Ö>xĶÃÃÎŅu!¯ZĮ˙.ˇ_ëŋĪãŪ°ˆĨĶnŸâ=6}R3ū“îŸü˙ŸēdKĶŋä-¤ÜĪĨĶÆ›7•˙ų~_éīŒy.•ã_i”ģm/Z†>žiû4˙÷×Üüũ˙ēÛ{M+⇇¯›ėšƒMĸŪĪ DyY˙uūë~uÚÅ,R@$Œ.ĨĸŠ(ĸŠ(ĸĒ^ŲZß[ų7VâXŊ q:§ĻíØ\"?ōîĪųô;TW9§\ę^¸ō­?â_ _ōī/úŸûãøā˗Î×5›Í[ÄÚ}ÎĄ§›cĮ›)“÷|Ē}ßâ\˛z/˜víčļđũĸâ[ŋŨYų_Ŋ˙Ų{|Ėß.1íÛbÖž—q ÜųŌÅæIū›˙.q˙{ũũŊ1ųũænš¨ĪĢf2?ŗŋĪųãĮĨ‹ģ˜bžŪ–¸8Š/ãßūšß‰S#|2׃ƒnMĻ“ųWÉ6qũĸ}æāEĪ_ķŪļ´Û[é:xŸÎ˙žCūą˙ÚîĮåúz hŌÎą}äéšqķ"ân~OûëûĮ˙Ô+šĐš×áö O‡Sņ6Ĩå›(Į8˙kāôūųįîã>ŋāßdÎußÜKÄwķ.%;„?ėGé]ũy÷Š48tkiī­`Ɣy}oæŲ˙įîîē}æūđ÷ëŖáŋ‹™Æ—¨KJ.<Ū6\ā‘?ßO›ÛæĢē*˙cŪĪĄ0 iķŦë—ņ'üŋņŌĩš$Q][˜äHäũiŋc´Œų‚õÅrZ­ŊžšņĮKēōeŠÛJ¸’Xũ5dOũu7Â7˛éˇÚ‡…5IüÉôŌ ”˛Ÿš{GûŸ]ŋpŸjî*!Šæ€IëšÅ“Â֑1—JššŌå˙§Yw˙~Û)úS_PÖôĩ?nĶ…ü#ū[ißë1īėŦ~•ƒá/ ų~/×ü[woåĪ6-#|ÉŒnöŨüĢĐ(¨d†+˜ r$gŽkū¯ ųŪgü#ē^}~Ɵá[´ú(ĸŗ5]*Į]ĶĨ°Ô-ÖâŌ^ Ÿķú׍hŪÔ´¯_øĻĘęúūīJÕfˇšĪå’YmŋŲgū=›~ŊŽk­mF+ëķĢooÃûŊúTŅꚆâK}+T0K đo˛]@ž_īnhŲ2‡ŪÕģ¨\‹M*æëūyÄīúf¸ģ}SÅē ´R]ڏižJ9ē‹dW˙ą÷[đčôéæbĩē˙I˜%ų$˙?JÖ¸´Šę*Q‘\žĨeöD¸üĪøûs~˙—åoásčŧë‚AŦÍGÃēvą§ÜÚMmæųŋŧ˙ˇņ˙ĀöņūÚ{×Ŧø"a§ũ’Ķ÷ŋš˙}ūg›ŨvîõūGÛęõÂKaŦi×–ŋnŠĨ‡í†/š=ūŠŧļéø~uģ˙ _üKíáÕmŋĐå‹ũmŸ˙o›īîĢÚEž“ũŖũĢŖë†)ŽxķlwûÅ˙Ļ|}ī—vxûÕŌh_|Gm¨Üiúޟü6ßōŪ/Ü͡ˇË÷đ×{câ øŌ ôüÁu˙=lo#ų˙ī†Ž7Tø!aŊŽŧ1ŠŨčķ‘ū¯w™ü:×oã .u¯ ģ?7?m°˙â‡ņˇeÅGeâ#SŸėŋ¸ēķÂ÷˙‰—˙Šü~ûé6—šŪg‡õģí+ū˙×C˙~ßũī÷ŋāGjõz_Äīi§Ë×´_í8s˙Z_ß˙ŋįõī´øsÄßģĶĩûGüûJ<šī–ŽžŠ(ĸŠ(ĸЧ}§ZjPųWp WĐ×Ēø>ę3æiäKüņ˙?/ųĮ mož÷ÄøqiĻf)|Ã'ŲīŽ öųsū˙ķ=ëŧĶĩč´ÍBâŌëũibōūÕŗÍŽgûß+˙æãiÁ‚„ė.5Qb>ÕöŪ˙ŋælß˙īŸîŸã’ßP†ĮH¸Ô"˙Š?į¯đsų˙Ÿ›6Ū#ÅÚĖ×ŪÖ%ēũėßŲū_šƒåŨō¯ží˙Ø+x^jC4ŖÉ÷ŽƒÂžšÔÉē[Ÿ˛ÚĢĪņM˙Øúū\šõ;GŌ<%ᛍkQļō´Ģoõv˙ōŌōoķøcōäž˙Ÿ Īû˙ëÄK­jš‘s˙,boņĮā8¯Vĸĸ.LÄkČŦ­"Ķ0đÆŋĐ\OqŖKŸöˇ˙Įá˙ĮĢģĸŠ(ĸŠ(ĸŠ(ĸŠķFõtCÅßešōf–kæ˙Ë$—lLë˙Oβ5qi¤xģHÔ-ŽįÕ,ūkYŦn&3N<ߔíY>n~N?Øã­mę~&°üJŸw,ž]­ŦōÚ_á˙wnߛwûU“áëÃĻxx}ĒÚiu{:Ú8­yûÕfÚģ:ũ?‡Ąúu–^#3hy KLjŗ4?՟öŋŲ˙"˛4-NøžZ ;C–Hāãįžf|ßdŲĶ×wĩv:īü€5úķ—˙A4í*HĨŅŦ$ˆ,˜˙žjžŠá­?T\āÃ7üö‹­sbËÅžô]GûVÕŋå•î_đ?õŸúúUiüEĨjWS‹G>T–ˇ?'ÚGûtoįĮNJĶ1ųŋŊ˙ė>÷ūĖßøėŠzĨ¨ÛCu§ũ¯í?ęŋį—Ëū˙áü~ß?Ĩqˇļ_ņ.ūÛÔ<˙'Îũī•ŋî/úĪšōîū1üžŌĩWUŌŦī´īŪ˙Žķŋåßû­ˇũ^īõ|$Ķ/tiįšeŋũöŋÔWeŠŲęV˙i°š†ęīDûĒíQEQEcjūŌ×Ļ}—÷+å]­‹o÷ŋØųvõā/N6‡fĩûßjWīf–?ôú˙ĩß?ųĮ áß ˙i[Ûę¯ú¯ųvŗįéô˙xâŊoÂ~ūĐ_ĩĘ<Ŋ8ôķ×ũ•íŗˇę§™ĶÄgĮėŧ4äĄÅíôGîË+Ģŋā?û5z>ŠÅÖäÂÚîyÉucé#Ē7čs˙ŽĮ~u§ˆo÷gܧĶOGէ֒|ûYąģ*Ûב&ök{ė˙õŅE$?Áåà ģ™SûŽ›G§īî‘Phˇˇ—_hû]ˇ•4ą,Ÿg˙žžWÉš?‰v§â;üŊ*É ŲßÛū÷ũw›û̝ųeģËųÕöü¨Įä_îąŦOÃW­ƗfMÉķ|ŋ"sžO—ūy}?ön7k–Š÷WĶ3­ĪîŋÕų_}?‹î˙Ž}Ū3K>Ĩi>ĸ/.tė—$@ūėw˙íZWŗhW>vŸŠØ×+_ūĘŊCAøą¨Åöí Yåŗ>d?h˙XŸõĶîīĮįü^•ęz7ŠtŸéÆk3ö¸ŋŒEûĐ+Ö~øgÄŗWI¸:fŖ×íztœ~+ĶųW¨ø/âˆËuđxŠ˙íœ˙ũü{î¯\ ċÅ:|`ÚęâÂėu‚ū?/į˙f9ęėĶÛéQ[_ũŋJķė5ųúŗ˙â>ë~#õâ>ÃJø•¨hãËņU°ēĶņík1˙Ŗcíūōņ÷}EzŦ][Å4'|R OEQEQY†‡§ęMæÍn Ŋ¤īūĪJá5? Íe¨ØC‹‰të™ŖŽYb˙{æŨū÷÷ŋŧŗŽļđö‘¤Üx‚[K›í>+Ÿ3û7ėOō|ōÅķŽ~éh×ūúĮJßøg Íâ[Ũęŋęb–HÛūšėf]ŸîņØˇĢ]ÜÚézl×S‘­´[É•yŽ;áe¤ĮÃëWöūUŪˇw%ųõØßę˙ņ۟Zīčĸŗ.ņ&Ącmîg?đūģW#ã¸Dw÷2ãū>ŧ?¨ÚūJũ oÅēƒė|˛Đ´ŠX =$ŲÅji×ke Āū!ķöŋˆ~š?ˆÚ<7ú Õ9ķ4ŨÆ_/īÍo˙-ĸŨÛrŠåą˛øcĢx°_]ë%d1Ëą•#_ö8ņūís—:õž—Ŗ˙jũ›÷_Ú6ˇ?ųn!üážU˙ļ5ī7ļ–ēqģ–qŦqų†Lņļŧ˙Ä:¯Š.ā‹U°˙@Ķŧė[Eķų˛vYnvįūYúrkŽđž´5Ŋ$K/q~îāīyŲnĸˇčĸŠ(ĸŠ(ĸŠķČ4Q}ņÄĐ}˛úÖ3kg6-.^ģyŠÍĮũsZĶKt?iE¨_Oos Ä2‹Ģ–“/ōēˇûßđ¨X9‘Ōd“ū™:ŠV‹æßķ\ņYĐëšeÕÆƒ.Ĩ>Ģisæ]Ī5˜˙SûßŪ~ė|͗oáaü|W_āŨ=2iŽaĩžÖ vČ.>G—c?ÎÉü?{åīëÖģ Ķ͡–?Q\~…¨éw> ŅíoŽ2˙gÛČ˙Ābų>÷û?qĢ{JŽÆe7ļˇn ÷î˙€˙ëTõ?ÚZÜ˙gÄŲ”’Jøā˙{ßړDŊ†{û˜íīæģŽOŪ~÷ūYŋņ¯oī'ËÚēZķSÄö׸ÄÉ*Ûų†?3äÛķmôû˙æ¤¸Ņ~Õqq,_Ŋķy/ũu_›r˙č^ŖĪųOjȓũ*Û÷?ķ×Ėķm~îīâųû7Ī÷öã2Žåâ˛ūÅ4ZĪ›ú,ßë<ØŋwōũÖOû÷ēE^ŸŨ?ÃU/no/´ë7ũLą~ū_?÷RÂ˙ōŲS˙˙ĩcUŖ´›ėßj´?évŋšš˙–Ÿ4fũßķŌ"oŨÕk™ÕntÛĢŨ[OûØÕË_“ũ¯â_öûüۆîkÔZЋybəˇyųûūg÷ŋÎj❄×Hs(Ũæ|˙Åũī˙]KeĒÍk>f˙J˙˙ŸīUë=DÅŦųÖčIÄGĪtkwoãŨ×Ūģũ+âŪ5ŊĻšmŪWüŊiyr˙sæ_ē˙Ĩz׆ž!éëC:ŧ­'_úŠ“ũõv˙Đs]&ĢáŨ'\€GĒéÖ÷ĀĪd¯:ÔžϜ Ū֍„c­˙ī­Īõ_×õ5䚇‹5-O@ŋŠ12ÛËåÍqßëC7đîõĮ¯rqĪËíŋ5'ŋøuo ŗų“YM%ˇĐōū•é4QEQEVNˇ§ [Fš˛Ų¤ŠxēÆ˙Â߃W’YøÆvšŠ°ģđėW^l†n;œ,)#ooM˙ŧų²đ}kÖŧ9ĸAáÍËJļ?ēļo=ũZÁø“æĪáOė‹Sļm^î-?>ū÷ū8ĻēËkxm-Ąļˆb(ÆÅfŠ+˜˛I/ŧqĢŨˇú›8Ą´‹ũüy˙ĄĨgøí7ę?ũqŋ˙Ōg­ī ȝĸ˙Ø>ũ´Įû]ļŗåE˙ˇ?ž'ūxíûß÷×Ë˙TŪ"ÍđƯ­¤ŋú¯1ŗˇÔu?‡VÚN•ūģLŋƒoī›ČnŽ˜á׿mŋė­r~%˛1O˙ˇ7ķ\ŨÃm_$ę%—oūBš*ô˙ø#RĶ-ā^Ö§ž†Ô˙ĄXŸšūÍĮ˜Wˇeí]Åå´WļĶZËŌAƒ^a¤˙høkW¸7&|[y’ƒ×í_ī/Ū_ø÷ÍzœrŦ‘ ##f8ŠhĸŠ(ĸŠ(ĸš"5˙…ƒây ¸˙UgšÜ—õ˙ĮĒߋ›ėÖ6˙ķë¨[ŸÁßĘoŌCWõM;ûNŪÜ™Ģ(ķSzņ\nĄ§˜Ž.,tģZ Z(c&{D˙G™Û;VAíøavķ]n‘ĸÅĨ™w0Q4ŋî˙wûĢí[4WˆiZŒZŒn"Õqũciæ×_–$n~gû˙÷Ö~ž‘ĨG¤jö°MķfōŖ’IGîžOö›n?ģ[iz|VđEŦ>T_ę†ĪģY—ZLļÖ°Ī`D—öÃ9”˙ŽğøT^ņ)Öī/m$ĩk[ģhĸÁ)ų€“w˙ۊæĘÚ :ßū™EūĢČŪžCņ-˙ĄbšÛF3ûBīOļķaš˙Ļ\_rH˙ā[ģŸöX× yūƒŦiōéíæËīõOķôfŲ螘ī×­WҝŅüŨBØŨCäųqyōÃüųmY7’Yy°yVĻXŋåā˙ö˙kø~īŪĒڍ‡ØeŪ–ųfbûŸũ÷Ģ%Ū3ĐTÖzå–VÚáĸĪĨwđfĨãë“Ļ›ļæūöđõîüß?Ōž¤Ō´Û?čö6-lâĀ’_næŧCâwÄ­CRŸû+ÃSKŸ˙-.ĸû÷?/ũôoFū/ĨxŋÚŽ`‹ÖŊßöŧ‰5iPœÚūææ2kŪ¨ĸŠ(ĸŠ(ĸŠ+‹Ô$›Yø‘§éņ˙Įž‹ÛŽ봛Ŗˆß>aŽŌŠ+ÄzĸéÄæāE)ÛRīģm_Öŗ´‹í#OĶ :Y¸ŋ˙–ßēũėŌy÷Û˙˛ííX*“W—PĶĻē6ö°ų7ŋčë$˙i>fûį噎ŋ€Gāũ?M>ũĩšY%ķ?áÕüŸõŸd—oũđkÎ|s‘ã‹í>R"ģÔmsäM†q$?ßÛōIš_"DáļĩhkZ2|gĐ.ã˙ZD—gū–ßûFģ]+_Ķĩŗp4ërļŌų2J>æīö[Ŗ~•âE [ÜĮ ąēģŠÔŨųYō×ĘéģwûÜc­c[hߨAŠÍ˙!}ŋéR~î)dūō¯÷?å›zŒ7đ՟ k6–:‡ØĪũ›s+}“Ī˙—Y˙ŠÛú§ü „W{EQEQEÅøi.õŪHæ4ÖãéQĨtö“ģ ßiRŸ–æ#Īķ¨|1¨ÉŠč6÷3¯˙U?ũuO‘˙ņå5SKsoãZČqæ‹{¨Įû_—˙ĄG]>ŠņĶā(ŧQ>Ŗ6Ÿâ3oTũÜ{öüÍ^Š˙ ”bĩ˙ĸy_ëŧ˙¸?āwõŠou‹k!k†ö™ŧ¸ĀqĪVcø*ŗW-Ąˆo­õŊŸík[O<ÁŸ’æÖG.7˙käÜž‡Ø×?âKĢ=[Vˇ–>ĨģXNly‡nߛũž•ĩĨjŋōéwûĢČĸ˙K‹ûŸ?úĪĻī×?Ū­ˆ˙īô_ŧ‹˙Ú˙(į—ü|}Ų[wūD^Ũ÷ǎjQĸKûØōžöÖ˙cŌĒXéķj—F(ĻžâXÎd/Íķs˙ŋūĶ4_iņī˙=?ģˇũŒ?ū…Yo3Jfķg'==ëĶžüģņV5=cΞŌOúžŌOôô_zú'ū$žĐ?冟ĨZĸķú׉øÃâMįˆnnm,ĮŲtH7gÍų^]ŋÆ˙Ũē.:ûđ<›WÖ>Ūrƒ2“žI}˙Ųô¨,’T„Kúá+üwūúõ¯Pøpm~#Ü[KūļæÁĮū€õôÅQEQEQP\MŊŧ˛ËÄQŒšãü˙;}GÅ[ySësųŅįū}Ķä‹ôŋāuÛÔ2cˇ>Xķ$ĩžÚ„ąŪ闾W¨˙û6īŌ¸ˆˇļzÆ€&×:@šKŦYAæyŌEü ķ)\|æŽxgÂ÷wžˇ˙‰œöļrC˙ļđ}›īãßw€sīéŒ/hķiŸÚEre†?^Iˇú´˙Ų›đãûÛŊKFĶáŌô‹{X`ãÆ+Nš<̝üõ„Ã˙}üŋÖŧĻ[ŅĄęö¤B'Mē Aķ&7ümmÆĘļÜĄŽ¯âŨßüH/í^sģûÍŊŧž_Ú ›ī&ī-WūY—˙Ží †ĪÃēež—§Yy‚oļq40Ã÷˙rŋsøTn9bãģßhĶxĢÃ" ­ŲÛ4i˙U/û[sĶų×á]CGđ˙ˆ5ˆĄō>Éú=ũĮņy‘˙čÅšēŸŧÛŠiĶhķBÂčgßK˙( ˙veīĢlųpö5ßøg\“U€ĮtšŠvQũõūL?…¸ŽŽŠ(ĸŠ(ĸŗõ]V×DŌ§Ôīåōímãß!År? ŖÔmômau\ ĪíiĻ›ūÚ"I˙ŗW}\}ëŸ øœßâ_ėLb㈎—î7ũ´'ûʞ´’øWOÕŽ?ļŧGj—7MK÷-cëŗü[×Ú˛ŧ=Š Y\ÛCĸęŌč_igĶå†ÛĖųæeōūøUmÛxé]ƙŠZjö_ØÎ%ĩ”ewĢÕÂøkÃöמŌ.ägԌ>`ŧƒä—į;˙ú6EhŨũŽ+oąëփRĶČÉŧ~aūücŸø~BŖĩŗ1Aö.äj°ú‰Î˙žžë˙ĀąõĒ—6šļ76‹7qË9a˙–ōüŅ7¯ˇ_ZĄĨZÚyæ|9ĨIåy1˙ŖÁåIũÅûŪ›[ŋJĀņõŽ&ŋn#ˇû4ÖŗZΎg—˙-6Ā“o\VÍÆöĢĩÅsö[Īøöķ‰˙úßę˙ņķU$Ŋ–{ō-Fuo$`˙ßq~jŌ)ôo÷k›‹Qŧ—ū>ü˙:_´~ę_ųeũ~VE˙ŋkũîhÛ\ÍuáëˆĨ˙J›ūYK˙,ŋÕ/đ{ü š[Í0øšÛûB,E(û5ŋ•˙Ēųļ7ęęq÷žnjÎĸ˙ړ›_ô­F×÷~oû¯ŗ˙}˙ņÔ˙fąä˙BÜy7Ņ}ĻúfëŊ›güųÅGy†ÆßėĻČ Oüģŋ“ķ}ũģ?īœõū+. IĨ+$ļÂâīΌF‡ūZmūŋĮēŊŖáŋÁxíükÅãÎ˙Yęŋë§÷ŋŨí^Ģâ/éŪŌZîųģb("<§ûĒĩáž6ņŦž"°š7CƊ+Ļō탏+oĖŋyūösÂô5yNĨĢK¨NŅG‘kæy‹2ãL–Ū6y=ŗŸķūGZŌđ´pũ¤Íuäˆ#•|ÉOđŸįëŠī~Åö_ø~äņ5ėSÆsũÁË˙ ū?ŠúnŠ(ĸŠ(ĸŠ(¯,ø•=߉Ž„4ûĄm›öŒūžc~îûįtėƒÖŊ*Ū­-ᆒ(†Ā)ĶËåŠÎûŨĀũíĪ—Ļy˙ĮpëTī|+öŗæEŦęÖ˛zÅs\ī‚ôī´ëü×oöß*īėūmäTģ”.ī|ŸÜųĀųģ×ŖWšxĘĪíúŽąæ¯˜Ķ,b˙Üîũ–Ŋ.Šä|z°Ëቭeā\KâßĪÎyũßņp‡>Ų¯:Õ­ūqi)ĸs/ú͐˙ū›ÛãđžMwÖ`øįáMŋúNfžĶãũīũ7_â˙žÖ¸]cLēÔô‹ŽŖöSŠCe4–öÖŪlˇw˜ÄqŽ˙•WyŠč+KEÖ|EáÛCã=vĘHu¤™üŲžk-ŸípģXüŊ:ôޟ]đŦëöú´f i@Ėí?<üĻߛ?ėcčÕēūŌĨđņĐͰūÎōŧŸ+ÚŧÅíĩOkT 5ßŲqu×ũ|?uö˙´›F˙ī›ī/>§ĻjÖzŊš–Ōp|ŖåČ;Æ˙Ũ5ŠEQEWã:î÷Nv°\ÜYÅ,Ņũ°"CųåüOũÜô¨ŧ;g'†´+{­ŋáģpŌ“įŪéŲÂŨy—û˛û˙CMšņLēåˇüSSĀ–xŨsĢÜЈr?īÉú/~xŽV[ŋŗ˙ĢÖüHp|ą›Č×˙ō˙ņŪšãŗmŌđįŒîí/íôŨzádˇš”ĮgwŪ˛˛ũxèĻ@ÜĩÛ\čö˛ÜũĒ6Öķëāã?īvoÆ˛ĩ yĨVŋĻ‹čGúģĢ4ËĮ˙ûų˙s4Ũ1 ˛‰cšūÔļŽLųą˙ĮÂpßûßøīûĩËøæķO“Å}Ô`]MöY˙p;ŧeØÕ§oäũŖĘ˙–ŌÅû¯øīüĘÜßđ*Ģqqö]BŪî+o+ū]?ām˙˛ī“oÖą/nfĩÔ..åũÔ2˙Ë/áū)—¯v\˙šX—w›§jEäEgūŗūŋr˙ä=˙÷Âū<î‹syĻĸKįÚųˇiũīúŋ’7“åÛķĪ/o—ŌŗõXô‹īŗÃiĻĪ/úÉ û/ûRlOáųŗåūmX–÷ÚÜy֟Ŋ˙ĻQķ_ķšK]ë_ÕāŅôĩK$@ķ˙,˙6öÍ}+❆úw…ŗ{0ząëOŨ€r!ü+úŌøãÆđxaŗí 'Vē†i"¤!cfŪ˙đ/ÎŧÅ> ŧģÔn.u=DÍ7`?öT?qŲ?™&¸G¸šÔæ†"rz ĐĶŧ-yŠĪs?ëmŋÖ čõ}.7Á>\ËįMËûĪū'ÛĐũŌĄšM3>ŖomÉÍî˙ŋ^Ŗāš.˙áqhđ˙­†ÖYĄ˙Č/ģüūxé_KŅEQEQEâÖâōĮÅ÷:€˙JûWŠü‰>MÛSj˙ß*ūØ÷íëĶܘĮ•ķ&ô§Ancũä‡Ė—ÖŦŅ\æ ŋŲ:ĮöÉĮŲdˆC|éƒōIúāûģ]yŪŗ˙!A˙}˙#™Įũų¯Dĸ¸?É ŗčÚqæō[§¸€EsäMōFËû§˙žŸŧ\Áé\Ĩɔĩģœsuû‰ĸO'ũ#˙h\˙z6ų%íƒ]ÃKŸ7Ã70˙ŖŸ˛ßÜCū‹—ųËaPō˜Ũ÷OJÎĩŅíÄšĪ„5 ;Jž˙‰Ŋˆ×Ë;˙xĒÃîí}Ŧ1ũúä5 Xø3_˙„ƒÅú]ΓqļīÜūO÷÷ēfÛōûvŽÛĀ:ĖŅ1đÖĢk=­Õ´Bm<]>įšĐũߛûÉ÷[đ¯@Ŧ?é-Ģi,–ŗų7ņ~ōÎãūyÉØũ=}Ģžøm%ĮØo­nŌ7\æ]>ßīÚˇņo˙yže˙gšŽöŠ(ĸŠ(ŽWÅÚūŖĄŲAũŸĸ}ŋĖ˙Y%ÅŌÛÁúģˇōŦoøšė'IÔíūÁuåyv‡;ĄēDųvũ˙ŗ÷ģâēKĪÃ4ÆîÆæm3P#>lũøūë?zÁûū.Ö`Bl´IšōyKĢŸú #ō;ŗ0ūīkķÄ}ĨĮŲĪ›y˙>°6_ûåz}OČkž$šöüiōaf3öYL˛°ō+m…ŊÎütŽ{í>UŋŲ"ũ՟ü˛Š/Ũ¯ËũÔū ß^ŋ?1Ōķ!û?îŋû_øá˙gî˙ U‘ō[C-ŊŤŋęe˙[ū_Īž$uë4_oĀ0GĒĩÅ­Ņ˙Džr|Ŧ2ÉåģoūŌē[‹ŨCMŋˇĩøeŠI?éŦ{vū÷ŊÖ…ĩŅõŠūÕ~×xķ ņ˙ŊŅŋīĒķOŠ_čWÚ=ÕÎ58bŠë3ˆüģ€<“œ|­ūĩqĀûĩŅé×°Åöxĸũė2ų~{˙ŗ*}˙ûå?&Ē:ŽĢ7öw›öoÜÅwü ‘öˇū?ōũVŗĩī&/´ZKsö_õ2A˙<ūTų?ā_ēé\ŊÅÄŌø‡ĘûO• Ī—ąĀ<Ĩo˙W÷ų9ÎŪNãQķ-î?ŌgО,?¸˙Įŋō"~5•ŧɨMBŽŖ‡É˙Ž~\cūķ?ëõÁŸÁž Ôŧk ­œ>U¨â{ĮO’?ūĘžĻđŸƒtŸé_bĶ ę?{1<§ũĒãüuņ> ÚãOĐnڔ[„˛˙ŦōvlŨō÷oŸéōļzbžÔĩIāÖ./æēûUü§ũqųũÍüŋúÕÍK,—™$9'Ŋw>đĩŽĻaš"qiå˙Žá˙ŲūęûéOö:Û}>ŌŪkˇ•į˙‰˙ëŽŅ.O$Ã7ŋįĒŸķģūúŪÃđüž^¯oá’hĮ›ũΜž+ŊøuØ> h}äÔ&ŒUh™wŸ˙_ÕQEQEQEyv̤ÃkãmBÖîãė˙đË Εr:AuĖüŋītŽÛCÔ%ŋĩ1ß[‹mFß÷wŸU˙dö­ē+>âöyūÍķ.¤äEŸķŠq´6æ+Đ$ŽHļI>C\¤wš‡†&ƒIŽãûhˆb?ņõ.˙ī'ûx{æ Ô<Ŧ_Ų\L|C‹Ë‰ ē’ }›|[>_ī˙ŪŨW5›ĪXiëW:…†ŸšųŌ[ÄžrĘ;†vÛøm}jūĄã]ÁãčL}aåûĪ÷ņ5æž)ņ†›ĢøšŪ_ųsũ—ĒM÷ūwķ#MÍŗäO~e<Š˜^y–÷͋¨e‰`šûSîų?.~ôķÎéāUĶ|5yŗ¯ÛKįūęō?øø˙]ūĨ>˙gé÷ĮßûŨęīŠį(đÅø ¸šâ ųh­īũ§ô­éē&­¤Ü_ęoÛÄV’€ųöķĒ˙ĩōũkÍtx5 hčIÔfēģŌt­8Į$Rü4ŌūûĖū÷îez×Ģë$ŌtÃ_Ũ,DŽ#šü+†Õ<[ŠjZq`k™ū-ב,ˆŋOŪ6éžûuÖx3NūĖđŨ¸ũÆ%wîáh€ßķcįbÜgøšŽšŠ(ĸŠ(ŽĮŪ&Ķŧ+o§ß_č׆%ũו÷"åģĶŋĨp…Ėž!‚{Øá‚īJûT?ņ+°œÅlnO”Ë+.wüŲe‹ęOŽ´~3Đmôã¨Üë–ÉŎ•{,‘\Cŋg™{wÎĶúV¯ÃÛËģ¯iöš\ y÷W÷_0ß#īųįŖķÉčŋĪI¤āƒk6ŗwÚ{éŸČßūĖk÷Ŋö/û9ŨÅaÄ%Šßʋ÷QK˙,-Q-Ą˙ž#ÆīâûäũvĢ1†(áĩˇōĸļōĄ˙ž_ūĪû¯û[Dl’Oô'üí˙öø’äoķ˙ūžųŪčE•öķũ?Ũũ8˙V•ąá ą†u+[­6ė˙íĻoúīųhŒw¯Í˙ŗ{šėžĪ˙‹it{ŦEöYąĪ™ ų“ūų˙€ÔmöAĒ\ ZÕa›÷`^Æ8/üôûËøÖˆm‡ˆ|/¤@.DĻæĶ&Y˙Ë– ôĢWBŌ­Ĩđ原‰bŠŌ;?ßÂ˙ėģk?Æw6Ų÷ŸęŋuæäuÛ˙ nŽvķū&wŊĶ~Õú=Īũ3}Šŋû%Æ?ë§ûUįž+˙EˇĶâũÅĻĨ˙<ž˙Čéģī{ũßzæĨēŸû$ŧˇ9ŠOõ‡ËųŋËW}ā‡:¯Šā‚ûV3Yi&O;wüŧŨ7ûŨvWŋYÚižŌūĪk66ã8ûĒĩä>*ø¨ÚßÚ4 gËķ|ŗUŽ•§°ˆÂ=įž˙í=[ōÅÕ§—să÷‘öŽ ãÂ:oÚĩm4Ûû/ũ";ļ˙ĄųŸÁû­įë÷8ü̇øáo@ļ‚×Ãz-ÅÔ1Awī´[GŨ_áv}ėĪŽ}kÍŦ|ãĪjėŊTĖzOwž?ü}ëÖm´)<=>Ÿ/ī~çÛËuwoūž _›*Į˙-!;T:ãžŊs]/ÃXßQ×âũĪ”~Íå‹yŧČ?՟õ'¯—ˇnôéQ|Eš7ZöiMŒWˇdõ/—?÷Wį˙P5ÚhĶØé#íWiûųßŋųūĩÃ'ŠFą6—ā-0 A/úVŖol=ßė7ŨŨūŅ­Ë/E.ĄũŖ9û_ũ3˙Y˙?øœ}kĨ˛Ņ´Ũ4˛ÚÁ¸æL|įęŨkNŠ(ĸŠ(ĸ¸ŸÉäÜéfc˙ŲY­îGĻņōŋĸ(=_ļk™—ûNX'ĶĩŊJ{YmŽáO°Ōb‹ĖģÛĩŖYũū÷ŨQĩŗ\ރĄÃņXûĨÍ˙ü#úsŨlKēO3ÉO/åû˙1o§ĩvū,Öŧą˙ļˆ>Égo—s,ģ˙ļ1úq÷›°l.\X~_›˙lŋĪËūĪãũīúhôŸķū]Š•ÕŸķūđûĶü˙Ÿ×׿ÜŅGūÎ8ũ1Ķ¸ŒŸķū'ßæÆ÷=7ƒ Õėŧ#o‚ęÛ˙ļũŸ?ŧō|ģ_€ßŽ+¤’:û_°–ô-F/>>›$įôuųÚ%ŊŪŖc­_ÅunnĄÁ'Ÿo÷Īß˙–đáüĢņ´Ņx_O‹ū[yˇEö“Ŧrēč øû×=áOËuũąw˙-Ĩ†ŗĶMŠ˙č[Ģ;Uņ›qå]Ûy°Åū‰ûßē÷’7åûÔ_øsZΊŧŋÜËĻĪåĪ“ŲūâũÆ_‘Ŋ6ųCūÕÄMywuŦAöo>YĨ—‹oãüĢúņé^Ņđã☴jž)ũäß~=?*×O_÷zW¯ęÚĩ†…ĨO¨_Î"´ˆr}+į/|Dŋņl÷‰qöM÷rGņK˙]?øúõŽ&īR‡K3Zčįˇîäē˙ŲS˙Šü°+7MŌĻŋb"˙?ūŽõÚ[}˛ÖŪŪ_ŗAŲĄ˙–ŗß"˙Ā}÷7÷‚„ÔļŊš×ėūoī|ßŨËö$ų~_ŧßđĩ@č}6ŸŪjI$?ęŋÕŸâ˙9˙gĘ.<īŗÜy_ē›ūYK˙ŗö?AĶbŋ-âģ™bЧĶã˛‹ËĖōũų_ü˙͎OV-\6™ÆŖo&ī/˕āUé6?c‹ÄžŋĶíĻgTŒfnŽŲ=˙‰ąÆ[;s_SQEQEQEå^32ŸŦRt—NũĮÉũŲ~o›ßrõÎÕl›‹oĩ[ųWŊ†_ķģüˇ¯ÍūąęÅŊŧ‘ö]oNūÕŗ˙WöŸ/ũ2ë'áķôČĪŖ„´ŨZÜ]øo[ŋēŗ?ōĀjķ˙ņ\|ŋŪöütô{í[ÃdéúÕ´ōéŊ!ēûŪ@ūë˙yÚäãīt&ŗüEãŲŧ=ņOĶáĶ&Õ!ž°Ęû/-÷ßvŪÍ÷WŊvšnĄ§x’Ā]ŲÜ aéF˙i=jK۝;@ĶÕĶ-bîģŋô^Ē|HŌ>Áö]âûTûwî˙x¯A6Ī3yLũ+Õč¯(ņ7›˙ ū `˙]ĨŦƒė˙ņö˜ķžxįĻßâø–ŠYx˛ĪÁÕüG%ĩŠj ö,îŽvÆŠŊēģƒąôéXū QŋđūŊâO2~î[ųáˇũ_ũŗ;ąíøuņÚéÚŪą“cuöŸßZÉq{§ÁūŽųvüé÷wn˙Uø×geiĻÚCiinļĐĮÄqGŌ¯QEQEQEq>3Õaą¸ŌtųŽ`üÉ ĩŊ˙yĶ~ööė?‹v1éÍø¯[ūÍđˇö}Ėßk–/˛Įs8ũöÉ?ģũÅÛëĪŨ˙zē‡vvŪ‚îÖĶė_J×g?Áü ˙Ž"W›[Iö¯ôš×\Ëöšā[ļ˙úžīĶįzģüņ‡ü˙Ŋ˙Žvūī}ˆ¤Ÿįü˙߯UÜŌ˛(üßõ?įų7ŪüāęYûŸķūģøzqĩe#ķŋå¯úīâ˙ū˙ū/ĮũcÖWˆ¯a°ĶüŠn|ŠŽw÷?‡øž_e˙Ųwō*ú™{ĸßx[O—Ãz”ÖŋeŠÛ÷˙Ī-é÷ã˙Ų—ķ­ŨBä}ĸÅu­gú<ŋōíĩŲžLœūûGíS\ZÍsûßŪĶOŋŗ˙B<~ŋv°ŦßTÕī ąĩ†kû˙õpŒų„ģ_Iü9øYeāôúzÔŖ™1‘˛ņUÕø›ÅZo…Ŧ„×× æÉÄ0÷—üú×ÎzīÄ [Ä >ĄĒÜĀ‚Âž3ÍüūUËz?ũķįڍųŊœĪ$č)l-åšãʄs˙,˙ĪõŽÃJŅáŽŪßū%ŗK1ũį›įlų˙š˙ĸ××.‹.\y6ˇņíaįŦ˙Hē˙o˙ŠŪßDŋÖOmöËĢ7OšƒÉķÕl˙?>Ūe?ÃûˇĮ¨ųŋg´Õ­ŋ}įŸüwúqŒ‚ãû6+˛i˙ĻE˙?Y˙ޟúūËūÛ.'ˆĩ™ŽŦŋŗõ |MO,ųŲíū—đ\ö˙Ŗ¯o§Ū_Ŋí^ˇk>íÂËaĢ/ü5vû˙í?ĖßŪîz×ŌQEQEQEy˙íüŊgÃú‡ũ|ZßIŋ˙i{}Er˙ž˙?ú¯÷?‡ĶåÎÄ—?éŊ˙öũ¯ü¯Ë˙,dåŪßRÔŧcå}§ėŋf˙Ī°yˆ˙ôÎ9$ųY™ŋģ×מÎĘãÅ:ž—ooæųđÉ46ūUįßÜßŨ‘ũßáūk˜,Ī…âÖ>×~5m.ĸōūΟ:ĪøžEtÉō˙Ø;TüŧzĮât´#O‹Â>-+¨ęWim‹)ķü_3žĪî¯vūŧuúu¯‹tkƒ GûWNôŧšũīü_ũ•—ū:W%ŦŲYßē–÷”’Įö.âÕöAˇįVßĘÆŋî­ŋÖŊÃÅzuÃ}›P˙‰fŖžÎôė?đ÷_ę´Í_ĮūŅUMūšfôō˙{˙ æŧ×]ņÚ-ĩŨZų0\ÃÖļR?—>Č˙åŧ3.vJŽ˙4}Bõ¯ ņĩõ†Ÿ›Bhãō­áŸįĢ~uô‡¯ílõ‹˜tMúãH¸ąívŅC˙ˇ ōų>ŨŲ\îĮõŽËÁ:đׄl4ŠDQÍũī•Ķq9˙ëWKEQEQEW?â/čšŨą:ͲË1ļŲ˙Š˙i}ŊxfąĄkŗŲ_iZ}ɗĖ?Ŋķßũ'clTI_ø˛Íģocŋ9Û^éhĻãÁņZÍûÉl‰ũöW‘Y~ëNˇ†_õŪTëû!˙×ûŧ}Ä­õV˙įüūŋŪūîŅ˙ŸķūzãŖacgīžĪūņîĢøtĮû8ķOõ_ē˙öŋĪëøīdd’CīeũÔ1~ķū™˙ŸÃûŋ/ú´ŦīëÚšÔæ˙–ąM §üôŲŊwîôf겊į’jîĢĸŲ˧[Ũé6ŪWúÉĨų?Š4VÚéĮãŪŊFņŋžEŦÚũ–yâxÎčNíŊ˙ƒīwãŪ´î<;å_ÛęUĪŲž'ú/üą—wūõZæVngcĪūÂv?įų ҏ’Ž.<­2Ã˙ŋå¯˙ˇģÛäÆqšš”šUŨ¯úŨ÷_ķËí_÷×ū„Ģų÷-Ģk-:[ø—ÜĪkyü˛˙€}ßöŋũŽÛCžââō˙ũīLû_•ģÍ˙–rŸūĖįīmĨ¨\Åsoqwisæ˙Ī{[¯î|ŋËn?ā?? ĪĒéîÖÛËqîá?~oö˙ÃÛۓ‹¤EuũĩoåA™Ŗ•w÷?ŠŊkJŸûO_đDŌ˙Ž}CũV?į–íÍėšûŋđ.Ë_FŅEQEQEËøëO›Tđ~Ą§ü}Û´Û×Hūaūįúuė7ZwÚí?{ ŋęŋÉūŋísėôŽ/o?ŅâŠÛũ2YŧĪúå˙ę˙žŗˇøŋÕÚ˛ļûŋ•˙ˇ/û]ũ]ąĩdÄņ~Ģ™§ÛË/ī{û¯øīOŊķ7C׿įīĩtQÉö¯ķ˙ęoëôoõY×ēu˙īeļƒūø˙ëgüŽ>âšö/˛éßŲņ~ęõßēĪ˙ōũßī}xŪõÄč—ēů‰e´ģ×/˙ŅĻHĨ˙N”|ŸÃĪûÍū{Wøi2ȡŸhœÃ$}%¸c–ūö?īŸ˙VŌÜ­ˇŲ.`0Ám9ģ’/Ũ;˙Åū?đÆŦ\x§WÔtĢ2FķÖā‰'?}Ĩuū>˙?ĢŖ­z˙ėņáøŖĶ¯õųm˙}$ŋgˇ“?Ā>÷ëüĢŨ¨ĸŠ(ĸŠ(ĸŠ(ŽWƓŨÛø~æ;keģ7IŲGúŲ7 |žŋOÖš÷ûsū˛Įߕöˆ?†Mņ\ĖŪ[ãŸ÷Ũu> }:ĶOūÆ´Īú/ī u6ōüņˇûŋÃõJá¯#–ÛXÔ-e9–;š<ĪúįūąwĀ[ųôųŪũ/ų˙{ūyöūīņmD‚H˙Ō?éˇų˙Ųw~Ģ˞yįũ¯ĐîŨøî˙kqŠ­ÄpÅoæËäy1EūˇũŸ˙ggļ6˙°åŪ/ņ%æ¯B zt‡ƒ/ú˒ŋÆßŎįųGãËdĶ4´:&­qŖęi RüģžŅŋä?{gû-͟ökšĐ|Eykoû¯Ūų_íũĄā-ģûŋã]}ļĩ¤KoũŸ/îĻ—ū]ūâßËūxŦ ßę>ņ Ä?đ’Īû¯ųe/īŖ˙?ŽkĻąø­ĄëļéÚũąļŠXš9. >mģŽĪ›æęžŸÖŧÚ_ Íņ3â5ũį†íæ!˜yˇˇ?s;~l}ģôÎ+č øGIđv‘ö2Ütũä„|ōŸVŽ_Æ?tŨP—DĶîę@~úP7%ŋøŋN?:ųŪúúŅ5+‰eķåķO›˙M?Ū܋׹Í\\Ks.e<Ķ|Ēémt9ž˛BĄîä‹Ė“ū˜'˙_<Ŋ*ņŅĨĶŌŨÜy>Wī#‹øŋĪŪĮ=wœādס´´Ōu)<‹š~a'ÚˇEå˙ögæĮ įī}۞|W:ŋ—kö Ilbâ_?ˉ˙Ų˙wæ“wđí˙Į™qĒÃ}öyĩiâ˜Ģŧŗ˙gqߡ˙úĢx•‹SifÔ?Ņĩ/ˇyRųqC/úΟj˙č?/üéM#Ãfâoĩß%Ĩˇú˜§˙ŲģmųdÂũIųwWgsEoû¯ųë˙ŗ˙ûŽŪĩcķßÛÅĸx˛ -ąûũ˛IA{Ÿá˙{üî\î|3$÷_|%,–‚Ô›‹Ũzm÷~]ĪvÉëšú2Š(ĸŠ(ĸŠ(ĸŧÃ_đ¯ü#3OĒi'ËŌq$—Vßķė˙{͏žßī/?Â@ųF9ûhė˙Ō.âũīÚvÉŋũœ|žÛ1ŋÛ¯oõŗ˙Ē˙?Å˙˙kߎī›ī˛q:Ė“jzÍŧļš”ōŲÅūŖČū UĶË˙ž›gžÔ\ēĩ×é2C.o/īüŸ+÷_jûĪū×ņ}īåÛëmÉįņßü{˙ŗëū×#įuƒū™ŸáÛõ˙–}ŋģŽv*ųŪŖeö_Ü]ũ›÷7QÛ?¸ŋû7ųa÷ôŧ|%Ãę3‰|īŪ˙Žn˙Įŋ]ßÅŋoĸ[ÚÛ{ĢËcœŸōõ˙Ä˙ē{üߞ+3Npo~ËŋÚæ’O&Ũŋŋ¸˙÷ģ|ĩö/…´(|/áĢÜå-ãäžįĢ~ώ(ĸŠ(ĸŠ(ĸŠ(ŽĮ,>ŸIĩŗĶÖë[Õe6öYáåsšŊ>eŦQá [Eņuŋ‰-'ūÔÔ?æ ų?hÜŦ­ĩ>ęãl{ryõīKcĄø‚ãÄjzRĪĨÛZGåÚÚę0§īüÆß$oą‰ōķ÷Ođ’ÜY#ņ{9Ô&ķ´ũVĮũQĶn?å _›tO÷]—¨ū"ŋÝ´yŨ[ũŽ/ŪÃ/ú¯ķ÷~īéģøw;ÕŧŊ´Ķ-üŲn`Šújū_ûßį}ˆŗ­5™ĩģ˙°hdú§•<Øŋw™ō˙|ģ@ūƒî›§Ŋđåáļû_Š>Î|×ũĮ‡ôßųz“øVYOÍ'÷›ĸõcXē˙… ĶüiŖÍ}n/5kĢYînfū9Y6ėūęŽí‹˙āĩp~/đ€6ÎŊkuæ˙fŨA ‘}_Ÿ?ī}~§ŠÂ\Ž;O(ūëĖũ÷›ĖÜ|ŋ7û_íUĢÅbmî­Gú`˙i‚ū÷—ũūü“X:Žš6ŠqæĘfüëĶŧđŖTņ%¸ē׍Ŏ‰Ÿ2;ųms˙įų÷¯ ô­*ĮBŌá°°€[Ú[•kËü{ņ&oŗÜiūÄíūŽ[¸šųÉŲą?īĄûΝ‡ˇˆ^ąŌŽŽ.Žķ.Ą!æ);wũįũķĶøēŽ>÷9-Ü×ų§;ę ‡nūÕ=Ąō˜?Ö˙Ë?­wúT—všˆ[Ĩ˙Žš—˙e˙iū÷Ļā?–„sj×SÜJ4ųü¸Ī/ü˙AįûŊNĐ>í2ãY†ÆŪ{{ ŠüŌåņ7—˙Ā}ūöŪ™-$iz-ŖÔ´čîŖĪúØž˙ü ũŸŧŪ˙ŧįŽÚ˛ŪZŲ@…sqæįũDŋđûëî¯˙Ģßđ΍4ŋéڅš72toöĪũõķr掯÷Ō˙Ÿķū?sžÄ\xĒßėš‘,ßę˙Ų˙>߇#&N'YO6kkŠŽī2LI<§įš}Į{˙šü#ũß­z‡ŽfÖ>,čūmȗė1\˙Ģ˙Ž{īŸ›júŠ(ĸŠ(ĸŠ(ĸŠņīčÁēü$“k˙:cĢ9?ōËûœļ~^üõŽ_Jņ6âģ{‹K_>)ŧ¯ø÷˙âvū]?ā?*ĢԏAû/Ú"‹Ī˙ŽV˙ģ˙]ō}˙ö#Ü}>÷ûEģ8­Ąĩû?ų˙ÎCĒū]˙{ūĪË˙Ž`}Åhd˙?ūĪ˙_ûũˇŗgk6S]h×Ķũæ˙Đŋ_öŋÕRÕ<™| æËmö¯ôO3Ę˙žĪũķū¡ĄŲ}ģGļ‡OÖ§žoüzėũ×û_đ^Ŧ}ûs]7ŧ?%ĪÆo&cž7}öGü˙fü§ŌôQEQEQEQYwz.›}¨Yj7V°ËwdOŲĨ?ōĪ>•i­!yf‘ĸ¤ õjŗnt}:æIäēļ†S,^TģĮß_öĢžøG.…cũr_ō¨?áWø˙æ[°üÖļŸáKĩ†ŌĮN‚Ū y|øÂŽũęŋũiũĨũĄäĩų~_›ßmUŧŅ4íJę ģëfžÜ:E!į`ŊQËámk{ûi4Ø<›˙øų˙YZÉ˙…eāŋúė?*OøUŪ˙ĄnÃūų§ÁđĶÁ–Ķ ađ툕:|ĩ×U[›X/mfĩ¸H¤q\ãü6đd|9`ā4Ų~ø6âc,žą’C׊ūw˙č\°üŠ˙đŦŧ˙BŨ‡åNá§‚â˙WáģûäÕßøCŧ9ĮüI,žNœt˙8Ļ]xÃÖūM΋m,|pG§J§˙ ŋÁ_ô-X˙ß&ŦÅāO ÃŲ#Ņ­üŦtĮ¯˙ŗQ˙Âģđî✰ũĪúž:V‡ü"ēī3û6Ëũßū!ī‘I˙ļ…ū¯û6 }?Ī÷›ūúoSYÉđÛÁ‘ôđå€˙€ŌOđÛÁ—?ŧ›Ã–úí̚Gƒ|;ĸ^}¯KŅíífA°2Œq]QEQEQEâŸ|Aũ§Ļ é`ÜË-Đ2ƒ”ŋ…3úŸMĩâētWūÕôũFęÚxb˙Yæy?Áúv÷üĢŨ#ŗ–OõVĶË˙-;˙‡ũĪC÷xÎÅYäļŧ˙Ÿo˙gõ˙bīOąj_ę~Í?ũø˙=˙ön~û$˛ŧŠãĘû4ūwüō˙–Ÿī{ûŋÃ×n9بg^Ēû7îë‡đ˙ŸĶÔŪÕû7•§y_f˙?7˙gßûų˙–Œ°YiPéŸņémûī–?ķíķ'NûO]tünm~'ęÂN~ĶĨÃ.?íĻŪ=ŋČĪŪ>ŋEQEQEQEQEQEQEQEQEQEQEQEQEQEQEĘ)ôQL˙–ß…>™EĸãîĘŸEQEQEQE˙Ųleptonica-1.86.0/prog/testangle.na000066400000000000000000000004721506303110300170340ustar00rootroot00000000000000 Numa Version 1 Number of numbers = 15 [0] = -1.000000 [1] = -2.000000 [2] = 0.000000 [3] = -1.500000 [4] = -0.500000 [5] = -1.250000 [6] = -0.750000 [7] = -1.125000 [8] = -0.875000 [9] = -1.062500 [10] = -0.937500 [11] = -0.968750 [12] = -0.906250 [13] = -0.953125 [14] = -0.921875 leptonica-1.86.0/prog/testbuffer.tif000066400000000000000000000343521506303110300174070ustar00rootroot00000000000000II*ū“"h‚7(0()h‚78``˙€˙€˙˙Ø˙āJFIF``˙ūLEADTOOLS v19.0˙ÛC˙Äĸ  }!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųúw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ā“"˙Ú ?ũüĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(¯Â->ū˙á¯ü¯ã'ÆÔģž/ Eņág[ĸŌ ã?Ã[h|=ĢÜžĐ`ƒMņį†ŧ1ö™ĖB;„Tåë÷vŋŋáY\|`ø˙\ø§ msX“á-Ī…›æWƒÅú'Ùĩß ÜC$l’A4>!ĶtįŽxÛ|Gį€(ŲĶĢ..Ļ2JN,Ŗ‰Ģ$ęTÂĮ5Č!˜PĻ›KÚb˛ú˜ŧ$$Úå•u8ĘŒgŠMÖÂĮ ¤ŠŧVg‚ÃÂrv*ÕpyĒÃW—–¨âmĸ—˛IčŲíŋđRû˙ü(Ōūh—“Ú_üO_ø—ÄsÚ2­ÅŸÃ¯ƒŪžøƒâ[‚Y]cKícO𾂭"4r>Žb`ۊ˜~|x„ßāŸūÕü$—^øŲāx)|zj??ā˜_ ­ŧ4—Kãī|øoņOáĩæŸæ RÃÆūŅ-5Ŋ6M/Ęų˙´/ŦãÔt‹pĄ‰mKåÂĸļ] Íâ•*x܃˜(^qx Öâ\,Ēaäšg(ÔČđx\× ¸ĩŒ¯ËV2ŒĢa䒖2y}:Qö5jaslÚ^1†:T2LD^" ›’x|ĶS.Æ>Yŋaƒ÷`å[ė/‹_íô‰Ÿ~Zø*?j?á0ƒÄÍ­Ž‘iá?‡žŌüKâ]F¤j‡VŽa}•e¤4ĩÔn§x†Ĩ \7…~Āwú—ƒ<;ņoö_ņĄ%öšû3|KÔ|-ĸOrnī~xŠ_Äß5I—¯úMŦÚĨŧ`{KxD„(†ũ‰<_7íGņ_â큨Ú]Ųé6ūđOÁ†ÚmÚŧqéIaĄi/ø­,I”oĩxÛU‚ĘÖúØĒÍic,R4ÛWĘOڗĮūČß´FûMļžeđoŃŪ5øcãkxZ+{kŋˆŪŌīŧuđžkŌ›.§âHŦĩOY]—Ɂb…€Ė*äĸōų¯ŦFRž3‹X…NŌQ’”ķ …Q‚åjĩ°Øzx,,%lO׸“F5eg„SöØŋ̤–ļxu?rM¨Ŧ6s’wtŖFĻ&ŊLG+úŊJyŦc;ũf}oÃÛÛOŠŸļ?ĮúãÛGđ÷ö`đŅøā­ZYOØ­üU5’x§ãļĘ„Wš,S[xręmM Č˛ã›öîøĪŦxSSøÃđßö+ņĮŒg›/5{o‰z—Å?xGÄú¯…tbW]ņ6›đĻëLÔüIue‘q¤GėŋÛ:}ŧ76ž&¸ŠËØ>xS]ũœcų5­OGŋņĘŧã?ž:ŌĖOũ¯â?‰>#ąÔ(đŪ‰û)kū˙„ˇJSuá]kW˛ø‹m¨ę#Âū „ž›âK-5u{[;ŨKHžęÂ-I.ŦVáįĩ˜/Į_ŗo€~č~ņĪÃĪŸˇí!û2|Oøaãßi^'øogûCéŸ<+5ĩî¯Ģé>$đ^…ŽčķŽ¯oâ->uÔ¯%ŌuRâęúím5"{î mû<,æÔ˛ėĪyÚ4ņ âp*M>Vđô0?VN*PŠ]VĨ‰U\ib]NšŠœgˆT×2†;)Â(ÅNR‡Ö2ŒÅB2‹jĨާ5zŅŠnU0ņĻĨ*^Īö/Â_´|Xø¨|]øā}[Į~"ļ]GOˇøUâ-WLøuâxĶŦR( ūÄSüđĀ/ü@đgŒ>,Cđŗ_ø“â˙_üKũĻõ é—Ū"¸éZ&§ã‹]lEŖDžׯtŅqgŠxž ?\ģÕ$Ô¤Ôā‚yûÆÂūĮUą˛Õ4ģÛMKLÔ­-¯ôíFÂæËûČRâŌöĘîŨäˇē´ēˇ’9íŽ`‘ážIbvFV=5asšŒeč`*Nœ”ŖõZĩpķĢZœ#%‘…ZŗŠą<õ90tų*‹íxéI¸ĮßRQĢ„'õŠTëÂĒMÆđs§J0”ž’“ž*ŖjpxeKĮ~:_üvƒÃZnû?xÂ7ž1ņ&Ŧ4{ŋxįW6~økŖĩ•ŨŨΌ/4+xfÕ<]r¯m‘¤čzhuNÃRÕVmĮR‚_—˙ā›6zŪđƒâ֝â?]xģÄ:oí9ņĢNÖüU}ŲnüIĢXjšeĨūģsmö‹ąi6­u ˇŌ[-ÍĘÛ4æžU@íú_Á>ČøōIÚãö‚$žĖ™$ö˛ÃÚņÚ۟&ÅNS–ކmь)ķ{´ŠĻįR|Š.ŦįzōĢ8hĐŧMũ–ĸ†mB*1ŅJRĘŗéJ¤íīNm(SŠ”œ)FØÂœëb§_‡ū õáŠ/ņ â7íĢŠˇÄΉ> ևŠčŸŧqĻx7á'ÃøgÔ'đæ‡āģmūˇ´‡Iļē“Tԓ]Ōõ=%u5yŧ‹ƒ.­{Ŧf~Ë_?hoØˇRđzünņ7†Ĩ˙…‹âīxOã„6zĮŽŧQđ‹Ã>%[Xõ ;TŸXŌ&´×ĩx!Ôŧ;iâŅs>›imŋėwZŒuķūŌ˙lø›áÎąûA|5ø%û'øZŸÃū4M_â…üņ/öÔėš3Ąé)}Žéڟ‡~Nä_ëvÆ;ĪÛ,mOˇ^ }ãŋÚáßÁ¯ŲúßâGĀŊ Ÿ>ü:Ôŧ?ámrĪá7‹ô{í#ĀŪ ´û-ĻŗŦZKáĢ?Û]˙ÂĻOc}Ą*ÚMũ)Ŋŧŋ°ĩŽ[ĒΌiĮÕDŖƒ¯†ËpØ|4›T}š­†TŗLrmRŖ,GšF¤ëōũc ŒĮ×ÍÜhÔ¤Ĩĩoiõ¨¨ķ}jŽ'ˆ­U+ÕS•WĩË0ŠÎĩUIĩV4¨ŨQ­ƒÁáđŠZœŊÄ:ˇÂ?_h¯ŲûÂ_ą6¯ĢŲ|c“âm–—ņįÁņī‰üu¤Ũ|ŗ…bņŪĢņ§MŋÖõÍ3Ã7Z$—VoáČ/ŋ°\ëzÛŨiú]ÅõĻ•>™ú ûNümÕ~x_Ađ߀4ëüoøˇŦ˙Âđw“>Øn5ûˆƒę^+ÖU#–Hŧ'ā]6FņˆŽš!o˛;=>{‹1Š-Ü?ū×~!ũ—|g xS_ũ–uŸƒúĪísâ‹ Ôūkßî<'qņ2÷ėē’Íâ īßø4>žž“ÂŌëâ–ņ›.›ÂϤ†á[ņwÁێĪö—ņĮĮo‡Ú—ė§â[[ũLđØ~0Ũü\ēÔūxJŪŪ)u›éŪŌ,4­&ûÄúÃO{â ˙ļjחŅEimŨ™¸ą“HûJ˜jqJŦc Į \ŖĪO÷tđyV"x ’U0Ô+UÄû(Å8ŧ,ĒæxÚ#YĐÂ' uåZ‡˛›x3ÃÂv”Ĩ7ŒĮSŽ+Ŋčâ'ˇYļ˙Úéa¨`'ÉņOOū ĸk~øcņĮÃŪ$ņū,ņ‡ûQ|ZŌuß\Į$W"Ö4õđõŽĨ­Íŗ\IšĨäS^ē<ķ24ÅZG#'ô~ŋ+ŋā›Ÿđžŋ´?h¯øO?áP˙Â˙ ÷âßößü"?đ™˙ÂQ˙ ‡ûcB˙„‹û+ûgū%?đ­~Éįbũ¯ū*´y_nũŪúũQ­fÛŖ—Mû4į“äÍĒiFqË0”ß,"”aN|žŌŠŠIН)$”Ŧ˛ŠQ­˜A{KC6͒u”Ú–c‰¨šĨ&å*‘įöu›mûhT‹m̞Š(ŦŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ší/Â>Đĩø‹DđĮ‡´xļk+Ÿëš^‹ĻéúĮ‰Ž4Ëcg§OâNŌÚŨfm>Ņ­”ē”÷/klL4qĩĐŅBŅŨhų\[Z>Vã'đšBkfãēV:[ĸjItRIĨ+wJRIvr?ÃīxwBÕŧ/ x#†uųõ[­wÃē?†´m3BÖŽuØü­nãVŌ,Ŧ ĶõõˆŋwĒÍyo4š„%ÛLŧW|nÔ>0|6øwŖøcö^øáīŪÜYŪøWNĶíŧcáo†^ø]b4—ļĐuøt[û8lõŊIģ1 <5ĄĪĻ]ũž†Ņ•$/Ō”Vu)FĨ)Q•ãJqĨN¤ ų9čQŧcA¸ÚQ§ėĨR‚tÜ*R§VWŠFŖHÔ&éÉN*<Ņu'(Š(ÕĢīJ¯,¯ OÚ(ՒŠĶĢ8GÛÂŦ9Ą/ũ›ū éßŗīÁ_|(ąšŪōįÃZ:Vļ‹É[ņVĨ,š—‰ĩ•SrųWúÍÕ䖂áLņX‹[yYŒ9¯Jņ_‚ŧã­: #ÆūđΌt›MB×VĩŌüW é^!Ķ­ĩ[æËS‚ËW´ŧļ‡Pŗ2Hmo#‰nmĖäțÛ=5ŅV¤ĒՕiYMÔUW*QŒ%)ÃŲÅiMRj>ÉFƚŒT-Ę­” ĄgyIrĘ2snRŠÎš¨ęÉë9Uæ“Ģ)]Ôr“ÜĘķ-ā§Áŋ øSņ‡†ūü2đ˙‹uĨÔĶXņN‰ā? é>#Փ[›íĘęzŨ†•oŠßޝqûũMnŽĨķ~öčJ˙5zm•–ē/†pz}ŠŠĶƒūė֓ŽŌZ4ŅĨŪ×vRŒŌí8;Â^RƒÖ2Ū/TŅĀGđŖál^đį„ĸøkāü+āũ^ÛÄđĖ~đęxÂúõ•ÅÍŨžˇáÍtá§hšŊĨÕíåÍļĨĻ[[^Áqws4S$“ĘĪĄãO‡Ūø‘ĨCĄ|DđG„|{ĄÛßEŠÁŖxĶÃZ7Št¨5(!¸ˇƒP‡N×,¯­"ž†ŪîęŽŌž8nn"IM"ˇ_E9{׿÷¯?jųĩŊOs÷ŽûĪ÷tũ÷ī{×Ũ”}Ërûŧ°tãËîڝ¸+ZĐn¤īŖįžžķŋŖ|7øwáËŨRđ÷€ŧ ę>đņđ‡¯ôo hz]îƒá6¸[ļđƍuccú_‡Ú%ŅŅldƒM7ŗo5C |ø;ņ.ūĶTøđŸá§Ä NÂĶėŧ áo_ŲX™¤¸6V—zî•qmiįË,˙g†D‡Î’IvovcétPõåæÕÆSœo¯,ĒJrœŖ}Ĩ9TŠ)ĩŦĨRmļį+‹ŨMGŨMF--Œc´ēF0‚ŠÚ*JĘ*Ø:Ī…|/â/]xGÄĐuß ^ŲGĻŪøcYŅôũOÃ×zt^_•auĸŪÛĪĻĪe“—k-ŗĀžT{cv:U–—ĨŲZiēf›ima§iÖĐŲØØXŲ–ö–VV–éŊ­Ĩ­ŧqÁmmqÃ1¤Q"ĸĒ‹tSģŧĨwy¸šž˛qįqr{ÉÅÔ¨ã{۞vøĨt’J)$”PIYEK—™E}•.H]+_’7øUŠįtOøKÃ6Zž›áŋ øwÃÚvˇŠęzŪĩaĸhšf“eĢë:ÛųšÎ¯ŠÚØZÛÁŠęīķęw÷qËu~˙5Ô˛žkĸĸĨĨfŦ­(:rMi(IÆRƒī Jn/FãÕâŦĶĩ­ŖŒ”ãm9f”ĸ¤ģI)I)-R”’vlų˙ū;öX˙Ŗiø˙†oá×˙3•ę^ øā?‡:LšÃßøGĀzדjhž đŪá}&[ûˆá†{é4ŨĘÆÍī'†ŪŪ)ŽZ4‘Á nėą ^ēŠ}%ŗ%Ë(ô”[O–KfŽ“ŗŌé>‚˛ēvW‹ŧ]ĩ‹ŗW]›W]§ƒ> |øqĒ^k>|4đŗ¨ZŊū¯āĪx[ÂúĨí”ŗÅu%åū‡ĨXŨÜÚÉs7o4¯ Ī S2#F—Eîíwh.XŽ‘Ü­öUÛvVWmîØúĘ_jRæ”ēĘM$å'ģ•’WzŲ%ĐĀĐ<+á &Š…ü7 øj=oYŋņĩŖéú2jū ÕS×uEĶ­í–˙YÔ^8Ú˙TģŪŪ2#\O!U#~Š)tK¤cÅtŒcÅ.‘ŒRŒRŅE$´AÕ÷r”Ÿw)7)I÷”¤Ü¤Ū­ļŪŦ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ(ĸŠ˙Ųleptonica-1.86.0/prog/testfile1.pdf000066400000000000000000000033071506303110300171210ustar00rootroot00000000000000%PDF-1.2 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /Title (weasel2.4c.png) /Producer (leptonica) >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 82 73] /Contents 5 0 R /Resources << /XObject << /Im1 6 0 R >> /ProcSet [ /ImageB /ImageI /ImageC ] >> >> endobj 5 0 obj << /Length 59 >> stream q 82.0000 0.0000 0.0000 73.0000 0.0000 0.0000 cm /Im1 Do Q endstream endobj 6 0 obj << /Length 826 /Subtype /Image /ColorSpace 7 0 R /Width 82 /Height 73 /BitsPerComponent 8 /Filter /FlateDecode >> stream xœŦ˜‹zà …Ū˙”ĢÍļē}m’Ö?‡^€oˇ1žOüwÃ_iÄęõh#ßųc퉇‚ōút]˙ü΍/FM…FôĖ#hƈfhĨŦ:GļRg_ąMQôüáŧīÉ]˜°-ИųÚŖˆ†„Ģy™ža&ú &d™¸€ël`Lö‹zDY¨<\į1;xXš|G|'Ø‹O‰Ŧ”’‰ų ˛FÄŌŋ]’™ĄÄ! °đą&rŞŽFâD&bŠđ„,MX›ļMÍõXx@ŌČJÃM¤%ž¯Įā iÃIÛĐÆĮWĀHXúø–IĻT;ŪŖÎ@jΠięMŖÔĖÍCtHŧ1ãĒŦ8‘Õ˜Š"\ŗå —1Ų šä%4v[9#ŽČššÉúĀf9ú"zŧŌI‘ĩ7.åŽĘ¨[^›f“îOwāôØŦ ŽnôäŒ 6ėž÷âRÖÅŨV$%QĻ[M†}Øe=ÆBŽ0Ÿá€lGĄ tÍ ˜÷Oãēp—°cÔXDMkvČÁËŠŊŌ­ ¸ ÎęülXĘ~uŲˇ7bΑĸŲ.¸ŪLh€č)ŽV¤sŖĖLEŒņĸ99ę0ú šƒĻx×2ádm$z'[Ũ" eŗXÁܸņ1,,ú›€wĸ}éŦo^5ĘlĢ´ílÁZˇĖK–œ„”­ž5ą^h¤Á1Ąœ)zž™ŲNÖw bã#÷Žwzš öį‘Xé¤YŽĻtž+Ú†eÔ÷H‹ÜôÂqʰĖĖfå­Ūœ ¤ČÉá Ŋ!v‰1tŗ7ģ“MsKė{gļÂ&—å ąļĐywĩbĖLŲČg&ÕȍĩDÔęé€ŋ&ޝ„ÚyGl\\œwKÂŌ™â•o$ĘNņmÔCÆ pŲü‘čéŦŒĐÔDü@Üe"+ĖĐ Û¨•Øų8F\œqÛXÕöŪ2ĨÕÕWˆˆkĶ2ú2qīÉŽeŪBŖ§‰T3Ŧf=jS°ņÜ؈m‰{eō‹8ę,vaæ¨˙Ũōūņ2hŪ5ˆDÖ‹ēĮix>Чsûƒ˜´ī?Ŋū˙˙ endstream endobj 7 0 obj [ /Indexed /DeviceRGB 3 < 302c28 e8f0e8 a8aca8 b89060 > ] endobj xref 0 8 0000000000 65535 f 0000000009 00000 n 0000000058 00000 n 0000000125 00000 n 0000000177 00000 n 0000000345 00000 n 0000000453 00000 n 0000001426 00000 n trailer << /Size 8 /Root 1 0 R /Info 2 0 R >> startxref 1499 %%EOF leptonica-1.86.0/prog/testfile2.pdf000066400000000000000000000045341506303110300171250ustar00rootroot00000000000000%PDF-1.2 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /Title (weasel4.16g.png) /Producer (leptonica) >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 197 175] /Contents 5 0 R /Resources << /XObject << /Im1 6 0 R >> /ProcSet [ /ImageB /ImageI /ImageC ] >> >> endobj 5 0 obj << /Length 61 >> stream q 196.8000 0.0000 0.0000 175.2000 0.0000 0.0000 cm /Im1 Do Q endstream endobj 6 0 obj << /Length 1396 /Subtype /Image /ColorSpace 7 0 R /Width 82 /Height 73 /BitsPerComponent 8 /Filter /FlateDecode >> stream xœĖ˜×vë8 E lĸĘ˙˙í°¨ē7™y8ÅņŠļ ČĮņ˙ˇĖ˙É<ųIä}ßv|oĶ—<žļĒøMÜ~fõęR:f<ÁīĀÛ[Ŗf[ûÚn:q}$ōUä!?ĒÆuûąRßŊa6Ž Ëbĸąü”ø‹BrŽ&UÜâ­ķ%đ˛íŋ ^ãķILd\ˆ1:“~Kŧ4˛/ŠzČåfÆ˙ޏ­§ÆB€d@ļŠŲD…¸mŧĩ,KNgĒG v`˛”Ö‰ˆ*(3ōĀ o‘ĩJ|õ3yc] čĀ×ĖÆÁT_Ę\=šÂĘkļ4`0Ɔü˛dB×øôzSxK-㠎Jzķ:QŅø’¸WĢ#ŗ5“>1o˛ĮõÉÛĘåpWˆū5`2’ęYãÃé[Ob&Rë™~äđ9uÜ: ę(]ĸ#Ķ6 ÷ôC•“×e@Ęš"Š˙´?!Ze*Ȥ’FPΝX”ã‡ˇ‡A‰Æ”k™3öė}B‡aÄJĸcŨŪoԈo§×eAœS NZč Ōx\˜NĢŗ°qV¸7…*č c°†"š#}Ÿ^¯uėKCC%^ûBN܉Šē´ žŋM7?i\{˛ëöp#vœ¸[3ŸÚ“)Ķš.Ŗ ëés4ãlęUÚëā¯q,uŅ9ڂO )x+YØNøÎ%:WO׸ļá…M8øÅ2QÆ˙%rZV<™MjĶ*{ œåđeōųJ÷r9ĸ|Į60÷Ÿƒˆk3°áPR~9’NÜ3ú6Ē×ŗĩzBRˆûĩNŧ˜õÚŠõâ~ƒ$ĸ=ÃĘÖŧņ?k§qøB@oƒ…āëæLœJģ|G¨••ŦĪklĘŊÂû/ëÂŌ{ÉLÄjfîĘcÂfįŽ‰wˆR#3}8´ œ°Mã}){Ž™ŌąŖģá.ķēh“2´ąÁ“ĮĮ^ûđZˆė€XŖFčĐ Čs7ž5Ž×ĩŧö2lāūŠ' DœäŲåģ(Eãsmŧģ!Į‘ĩ%ƒ"t!<¯WëQY¯ĖnÛF/ēŲđŧ øŗÆåą4‰¸›Fß&Į(“ųÆį[ãŧæ $txĒĩXtŪ‡Æ/ îĪ‘[r¨÷T4~+Ä╱[z/ŧŸ-†­u Kxsoe6h9qŦiôĪCr%EšŒ(Ûą˜ĸįÜã°QÕxKqáÖjåHšˆą>XĢw›5ĸŋä%Ų$˜9ÅÖŊ‚äåĀYÁîââfÍkž<Åâ„Úŗļ/fø%WX’0f…čIī§ĶŖ8ĘĀ=Š$faqĩˆĶŦT#zc{Q‰ãˆ"î5ŧPårywįĢtp6¯ķ˛bōũĩ„ÕéÃkܯEKÉ#ŅKeK ĸMx đöΞˇ1Cū|šzNs̞´m'•-a\ā4ÃJŨ؀\ŧáíõĮ§ŽūŸŧ†w9?:ųˇVÖwWúáĮŽ0å@ÕōĐĮĮë÷˙¸Û?˙˙ endstream endobj 7 0 obj [ /Indexed /DeviceRGB 15 < 000000 111111 222222 333333 444444 555555 666666 777777 888888 999999 aaaaaa bbbbbb cccccc dddddd eeeeee ffffff > ] endobj xref 0 8 0000000000 65535 f 0000000009 00000 n 0000000058 00000 n 0000000126 00000 n 0000000178 00000 n 0000000348 00000 n 0000000458 00000 n 0000002002 00000 n trailer << /Size 8 /Root 1 0 R /Info 2 0 R >> startxref 2160 %%EOF leptonica-1.86.0/prog/testscore.na000066400000000000000000000006061506303110300170600ustar00rootroot00000000000000 Numa Version 1 Number of numbers = 15 [0] = 9090650.000000 [1] = 1837561.000000 [2] = 1648841.000000 [3] = 3320445.000000 [4] = 2573805.000000 [5] = 4926207.000000 [6] = 6150297.000000 [7] = 7065168.000000 [8] = 8679735.000000 [9] = 8093272.000000 [10] = 9742700.000000 [11] = 9711060.000000 [12] = 9275647.000000 [13] = 9825966.000000 [14] = 9559469.000000 leptonica-1.86.0/prog/tetons.jpg000066400000000000000000000727361506303110300165600ustar00rootroot00000000000000˙Ø˙āJFIF,,˙ÛC   %# , #&')*)-0-(0%()(˙ÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((˙Āå2˙Ä˙ÄF!1A"Qa2q#‘ĄBRą$ÁŅđ3báņr%C‚’ĸÂDuƒ˛Ōâ˙Ä˙Ä9!1AQa"q‘Ąđ2BąÁŅáņRĸ#’3brÂŌ˙Ú ?Ņ[cg„u°€[aÖÂļÃÖĀ[l;N lÜí€Ô[ § §÷ĀiĀ[m°ÖĀ[ļ;N mđÖĀ[lØâˇÁcØu°–Ā[ lu°–Ā€# l%ž¸3N §lØ[`ÚpÖĀ3‚ā­€G[Rũđ [`­€ļ:Øí8B0Úpí8uļílYåY-FcU*V‘@ōŪÁT…&Ã~HÚ÷Û™ēĖxļåúcéå=øAÔ>y++ФŽYômŅ‚ˆŪ]W¸Ô Åė.=8āËūRI¯ #ĒkÚe D ĪƒĖĻØõqeŽX)Į†p䃄œXÍ6Ƅ‰§lŽ;NN§biļ„+€+lvœĀiĀiÁ`!ĶW§ß ´áÁpēp€í8í8[`ÚpX§lvœéÁ`vœiöĀiÁ`u°ÚpÖĀ[œ&œiŪØšđm*VgÅ&¤i~$‹ŒeÔ¤†ß•ÛîG 8ōēŪąĨáãīË;z~}ų|EĸÉ!†žŽēĩ„•5RkĶvd@ļ•ŋĩÉØ\“*S´ŖڕnÃäž  HE<1<‹)a$žߛø…Ųæ~7ĸ’›4åxÜʄ–OPĮcīb=ņė˙‹—ū9GÖū'ŸÖ/iHĪiĮ¨r §ÖĀ#­€b€ļ lu°–€̀̀+žN +€ĶôĀÖÄØÅļ ­‚Āë`°NÚpX §ŒP—6’x\āl1• A"āmŊpXPšpÚpX§ÚpX §€ēpX §€špĄ/°áXŠjĖÂĸĒ_ƒÉ"igi?‰ÜGëc~-~/ļøįę3B1jOąĶ‡­HÜøJ˛Z2”ŌfX'LE=5C “Ģąį`@x3wēGĸƒ|s›x‡$Ę"ŠJšJ‰%•‘ú1ē…F šŗFŪ›ö8×ĻĮÉę#$œjŒå-O‰sŠŧĒ—4ĖaĨ¨YÕŽē -ԝĩ€Úuj\XssXĸ›Š´øũūB‹“Ģ49í KPŌ5}44õZŸŽđ*Į ċjąķ_‚5n7;ã ŪęŌ+&5’4ĖĻŊņôĮŽ&œ!\iÁ`q\°S<í"Į¤ēFe*XVöÛÔīĮ~ØË&xciM՗ršn+‚8ÖČN lu°K`°N‰l[ˆB=H]°Ĩ%rt4œļ[X”F*EÁc…âCÍ|PôKÉü´āą§ÄfT*ļfvž”EÔÆÛ› g“,1-StT1Ë#¨ƒE]­H˙âWRî“ĢHSîH$ZūöĮ?ÛĄø“FīĨ—f¤ƒcČØã­IIZāæi§LBˇvy‹ÉG”ÕWˆz‘Á _@,ėAcĀšš=€'Ë$`éō˙bĄ. oáä"Ģ6­ŽŸ?¤øŊ5,tä°Cæ“Ė,ãkę Û|xũnidQ‹T×?™čāĮ[Fŗ5 ‚…ié*˛éƒXÃtĒcڌA…›HÜZÛzŒr✱Ŋpt×ÖæŗŠšĶ#=SĀ‚¤==jyf‚`ąßĪūeˇ#æāãØÁÖ,ŗĐ˙/ãßúœz} Đ6œvŲĖvœ&¸Á`vœvœ!M;ā¯Äĩë–dĶKŦ,ōЊ}ŲČíôoļ+* Ũx8ĸŠa$3ŋQä×q}ôÆJ÷[–íŋÛ'TۓōUũžĻ5KÔŨfĩšENCP)Ž ČŅLķ• åÔĢ"ëÔl ßš[qŊąĪŽ.2Wõä9=6Šņ&iŸæ‘Đ͘ÍĸYŠY˜B“mEKskŪ×܋‹ãĶŽ8aƒ•';nrŖU˜I-bSQĪOPÔúę3 SNŅÆä2•ˆĩ•[ôiú߉GŲÕ5W˛7Ŋév4šNuYW 2G;-<ĀŽŠä&$é °7]7[pmmûã’Jž–iꇷ†ŨéĖßMĀž¤S(§QY8;‹q|z˜Ȥ”r.;˙GN•ļÜYIQ”ķÉ ČÉ,lU”ō=8dŒâĨiœR‹‹ĻDT^Û\ūøĄÕÍ$&j—Xã-Ûš< )IE[bäéy"å˛į)C›=D"RŅ$Ē?/­­UWX¸7žÜ ŽwķzޞmáúÛö;1ôņüaY§„3Oøąŗ_Æ*ŠĒTą,€Ô*ųn-%Ã ą Æąé|rK¨YĄYy:# Øā*? ×f9=5zĐ*É™é%m%$0›X‘u>„_×tũsÅ-Įŗō1ËĶjZĸŠ™ÆB `lA ú|{)ŪįŨ7ũ0M8`4Ž  ū˜@vŸ[RM€ĀØUƒA"ՊfI%ĻŖŠügH%^ĖĒ?ŽÁž›ãÎę:äŖXˇĮf.™ŨĖŅe^ys4š…3>]*Š˜–Húw ZÂíŦĄÜGnHķgžS‚ƒãˇæu¨(ÉÉM_ŸVęƒk/HČÚ,1kíå 4ũ,-éŽõ‚ņ1ÖĪK+bA#ąĮ§gœSgYėYu\TpRÍ_^ëÕ4đ°R‘æbxīˇßŒDōF äčŌÜø†ģ0žĨĨ% Ɣ¤ŗ‹jūfؑĩøĮ—ÔäŽY'^ŸšŨ‡Į+üOQ™åīAđsGDĩŽ)¤üŊhä8!ˆ%–ۍ°÷ÂĀĄ5-JërĻÚĒ|–YeuN^ōRfŒ$'CŧcĘēĨ€ĩˇãÜXi8pÍ,oV.oާ´XŪÄíļ=”c<"2æĸ”ÅH5꡸ũ1,uiŊĘđåZĢaĖ4ßQ îÆĀbÉäķŠ˙WWf’Å@årߊQ ‚ ëSä!ĪônZܝˇļà ŌN2ĄŅŠĶ7ŋÏNÔõ””1A:@ĸĒcŅ$–Õ ˛Øų, ܋[kß/S‡FōîwBzļF˛ĒJšŗÁ›ÁQõ4‡ā&‰c ÔW*Cš¨;,Ān.1ÕQĸģŲ‹›Á“‰¤ “eNڍÚ0ēŪ`m鎟´7ÃdiF6ģÅÖR1Ëękō¨Ë*‰a@K`āß},O<í[pŽ›ŗŽQRz¨“ÃŲ‹&a6s›2š¸‹E)m(Ē„ĩ¸bm`yīëŽ^Ēōû1íõđ7Ĕ–ū͘QŌʉ"GxDLo$oŋÍÜ÷ĨĖb[Ĩ[‚eę#%8k#Ę>k–˛_Ë}ņqN7åõū„÷4Ÿ][AM*V^emN’ĒĪ 0Z•7$yö؎øįr[˛4É›2Ž#4Ĩ‚´ŌÅĩČęØ9$ąõíšĩöÁÔŧrĢŗ<¸–EVW×eõ?‰@M㑤qė{ņėáĪ ĘāĪ>xĨÔmŦÁ`4Ør@Â°į‚›<ņQęŪYļ´Jl~įļ´ø-c}Ī6ĪŗzŒâĄfĢ ų",cÚũĪsßŨŗUą°đ%*eņVÅŦ´ąõ%™ üÂ×6aÚĘmÁqäõSnN†vbI$Ņž¤ņ\žđĸ CK=uHV§ŽÖ] $Œk‘oRŪ—Į.÷ˇ˛Ŧtąöų˜Ö¯ŧ> Ž(|C%j׉)>™~“ ˙MĀÚn ą>›_›4§ -nV8(ģ° 9Ĩ¯ĪŪjĘ%ŠĘ2¸ĨĒ™!KËT”yKļĻĩ€{cL˜\ ĸŸĩ'^īŽŒíßdz^CŸTIžRšŠƒ<ōŌ4R°Ļšv'Uöo“ÉÁێ)UmˇĄˇ 6ziŗÉ*~0Z9'ˆĸNŪĩQ4õuļ°ĀpARÄâTŠ­Ŧ*Įä”Õ!Ë*˛iĻÎ)”¤ŅK *%R>Y?ĸö`yŗ Žã QJ[0OcĪŗ\ž’|Ë0Ę_ĨC›åķKHĒąÖFW¨Ŋ[X,€5or-ŽÕ7ĨĘ/q“VÚČs<Û/ĻŽŽ“7šŠn p‘Â$Y[5ė6 įĩœÔ[rĢß'ÃsgQĖ“ÍWC4’šĨО2iēā€&"ȎÎÁSTČļ+ĮĐŧ˙RtYAy§ƒsØĻĒĸ’ŠĒâÉSxåļįIųdõō›ŽÆãôæ]‚¸2“6Î!Ė3ãT´đŅ@áÛ§LĖĒ ÷mÁŊ”XŪÛņŅ˜SÜÎRŪŅeQâiĢęōéeÍfōĨy)e>y5š[~OˇÛí…, )¨Žy›|šīáfeš Ēy¨Se´0ŧ1%mHi* bíÜéŊ€ß˰ĩÎ9:ŦKđĢ~ī‘Ļ9ųšxį$J“M5 ÔUÂĸI‘GV0EĮQą$ ‚ …ƒa`†l{§KëˇpÉĸ|Ģ<ˆTe1Tșl***˛æ5ĢnûÅIP.wŊ÷ž= 7NOs¸Fà ËĸĖe4ŲĨh‰D ^+Ķŧ›’6ąÚßĨ¯ĪÔu3•iØčĮŠ1äÅū‹Ã^¤ŠËfi?ÄH^9 ŅĶn$*ZÄÚP+yˇ7:tųyKZ됞-@žĒŦČgjújĩøĘĻ]r€J:öAĀōH7žũ°ē—âm[!ãZMnIžÕ7ˆžŋ4t§‘–ikH‹W!€6ļüķž9'ÖÆ‰›ÍĄ,ux–kTú7Æ˜Ī ĖrjØ)ĒrÜÆhŖÍÚn­^ļ Ķ,{[“b>[Üņ{Į‚Z–÷ÁÆąļ莉iÂE™čî4Å1G˛Hˇ¸#ßÔ\zņlsžŖVđįš˛Į[2|ļŧĶfu3ÕVĮFÃI§)-˜¸`ÜmoMö=đ§ŠQV îėͧ‹sŒ´Í5]c ¯y‰&­ü¨n7ÔŨ€¸ãl`ąF[2œš+süžđjøƒÃR•ĶÖŠĒ ›KIJIĶķ¯Ė…ÅĀ GÛ›Čᓚä™*Šqā¯ņLš—†ęcSI™rŲbUĶ4Ă.Iš`Ē4ķ˛…Û’kĶ•i\‹&ņßą[MAO’ŦÕtÕŌf!ĨŽDDGäņtaŠZũûs|“”=–ā’KÔĶĶ5zdP|.pbšCĻ`•G–ÄKmŦĀöÔmßļ9“JnãąĨ6ļeŋ†ķšÅĒIŗe€×€cE1ÄE2+m#3 …, 7žŖk´æŒ^Đûŋ¯×¨Fûōz &mø^WUŸg†žĸ'–8Å]r¨Zĕ}ŅA;}ÉŋŽ0ĶŠč‰wJŲxs\ĸ˛‰åVŠX'!KŧWWō‚ ŋ jQ~6æãOŲE˜Ĩ5^Õ9m|3e`Øåõ/Ž6'#˛ÛP!Gĩ†-7kf„Ō’ĻRRŌÅU[đŒÉŌ`’)5SĖVÚ‚ģ‹›_ĩū ė;#×Í-Ōg3ébøt™dŠ—¨uÁÁ*éâ nAûchuŗÉ÷bKéãYåū'ņuLĻ:z BÅCĮęsîÃr;˙|mŊˇl*–ČÄU&¤Ĩy€†hõ9ŲŦoqܝ÷÷Æû"9 üÔä"ļ—Ēõ=aHZ˧k‹ØÜ}Á–8ÁfĶ“D¸4p¸Ú/ŧŸÖdķÕ¤BÆS,ŒbY;ŦĨˆ ŖČMšēœ1•äjÍ1ͯdö/Ędް×<á!s Âi§ą ČW„^Q>mŊ†8iöÚÍoĖÉgž!ËŗŠöƒ,Ĩ.:–fŽ^š¸P@aģ0 ´kˇ$‹īŖBܝVnōŦ†Žŗ)G…d§vn‘DŅG!RweošûrMŦ īŽ}[—Egü*Ą1%nOQS•V%ß@Q"¨< Ō/Á#šļ5]DĒĨē'Bå TeÔæ’žĻjVę ‘5 ˛ØÚåEË÷ĩž]§fíĄđ ø’ÍKY <]*šĨpŦއWÕČÜmˆŊ°“o‘3%WWū>¤Ķĸ”ŌÔŅ!]Z(<\ŪŪ°M]!ÅŌđ•^iĶQ¤Qī*—‘Ë:¨CĀEŨ‰ î6Æ=VhâÆī’ņAĘWØ÷J?áĖ’C4uĩéL×´qÂLˆĄˇÜ5š7Ûŋ¯lxęo“Ž‘Kœx#/ĢË#Ëā ­Ž)™´æ2UO”.ኘËocfĩ­s1u2Į-WdĘ J*–ĸlšGœE-tņ“w [Č=üÁlwéYÃtbŪ•ščyW‰ ŦđeEtqäĶfô’Ĩ5 ­FV”÷%ūm,ۍœĄ 7ĮÂŖ“L“¯CMVļ{ŲZđũ,ĩų•7FFęĨj$q‹“#5˝C°UæÜXl1ëįš„ÛWú9q§&Ŋį¨TÔĻyÉ—TTJ”É1–™gЈmV7a¨ß‚„¨•ž× ã˄e mŋåįšŌڒ1­•Åm+V$3Ō´‹KO FÔTą:˜(@Ōŧ۟n­m&ĸ÷å™ŌŊËüÚ:züĻφ–8æž 3j(ßĢĄ51?,†ëc{1žÖ8Ü'Ē^ŋŸú*JÕ"ļ’Ļŋ'ŖĪ˛×N„ĩ9|”o ÁJĄwߒĸ'sq|lÔg(Íy“ēMŪ<ĒĄ­Ėž‚iiĢ#pЈt*2Ē#07 ܓÁļû€AŋGJœcOvŒōģf‡ÃąĪâč)2ŦčVŧ´fJv¤hA§[geqyʂāßr;ã“#XexûŗTĩ­Áh2\ßËUY u‘tNšĖØÄî‹æŒ1VŸMö#yaT¸ú°QaÔĩPĶÁXĩÔbxœŧ4ŨáÖ[nIļŪŊĸ›’q~ĨvŖU|6AKO[˜øŠ •&Oqa* †WF 쏑pv8͡‘ŌCāŸ7§Ęķ,‚Ѝ*ä–haĻ‚8Š|Ļ9#MäÖXļĘNûJP’ŋ_˜Rk`: z˜Ũã­Ëæ*ߞ0 Ŋ¯Š/æ Eˇ ~–ÄNŸ š ¤’ŗ#† Ĩš˛U•–'7‹m”žI_{ŪøÂô–üRϤü=ŗ–ÅQGĶj[ĒĘäÜąˇ;ō/ôĮgK$ļLË*äãxôņÔæK›Ē-55*ÆŠ=Ôd-[}8÷¸ĶGb,§|ōŦæu ÍžR5CįĘbĻÎë’†ō§ĀU3DtÚC\ąŌĀcąÁ­éV¸k>rhégŽNŦ2IT*¯,ˇԓ{ų¸ú›ãEXĶ’īą/Ú¤j¤Īk'ĒÕ0B¤`•T­\q3”/ŗobw°°'•AE$žŦŌÛhjĶeôÃLKaŨėatÔu €FöųąĒq“Ũ“ēEŦū ZĒ@ņ´ôŲ´dg†]&Tū‰7ģių­`oŊķX´ŊøšKõUTå!!&M#H.ŦA 8ąķ\z0ˇļ˛“ĸã7ņdTT˙‡ĶÔÕF.ĸ9ĀTuŋ^¯¸7ãßbÁĢk&SŖËŧWU_ÔRP!?ōĄŗ„ĩėCi Ģ~Öž;đâXĖ%=F8’zM—)’F˛õZĒyļÜߓö돛2eÕKE×0’ÔÄXskų­\ЛܤéRVTM–U;ēiŒ¯…œ–:lģ[vė1”Ą$‘JMŖŅŧ=A[šW ļi".Ž"U`AĶŦy›ä=ĀØŽA8ķ2IGwšŌ•–9đ›'Îse‚džy‘ƒŧ įU*U’;ĩ‰(,ˇ ą1Z’ԁítCâü–ZjüĢ=ʧyž-Ē%S1•ĶCąļëĢ΄n5?šÃLY..3&QŪĐĘø™ZS(\Ø"~dU”Š,k 7Ô4ļ– Ā'Üobåģų ‘œÍj)#ĖŌ§  Ÿ.YM˛,‚›!;č+Ų­b{ l“qŠģōd>v/˛ Ã/õRRÕWDŌJʲ´zK]lúēd…ßP¸ôž×Æ3Œ´­E&¯cA™d¯]S4ĩ5R<ĶÉfgĩ˜ÖŨ€Û}ąš•-†ĐĖĮ)š–ļgÉęĒ0Xã3JĨĩFęWPb9ˇû_q‰Ö’Zø)+{ĄiY/†ię¤Ë䩖hôÍgpx&ŨÁöõÆxęOš­#ÅüWKWRæšk|%lcĨ)v†KėĄccÛ¸ûc̓OgšĖĖŽiáđÔ)U§@“*Å6¨MÍÉ Ö{ ģ n§Ø‚†—)¨Ģ’ņc_+o¤zžßĄÅš¤*ąičay–LSÕ °r¯~{aŊĪ%=*ØÔlĐÔåôí ÂĪ^+Āņ̍ļĘ  ¤Øšũxžiˇí=´EpjãņõŪ ü2ŊæxdŌzh!hŪhU]Cĸ$PcfŸ=…¯Žu¸íõú—÷•3ŧKât‡$˖,Ŗ-ËōjØÚ8ZÖZ É§[É[ ;Ÿ1¸&ÆÃmŋ5đQé˙Ãē‰sáęČŗ-Tr‰#ˆUÂth]-ęģļÂäp-ŽYÅÆM2ĶMZ/čkš‰'‚–ĒąÉ˜jR6$ËaímÅŽ-‰C++ëč*T’˛8@ÆĢ.ŽJėnw m@’.-cÆøtûĘgū ĨŦŽëem=|ôí R‘Ôĸ+‚.X€{v7¸åqJ/8ßvŸ%Ī⧊9ü93LŠČš€ß÷Å7íHJüŒ=eu?ÄŠŠÃėŠ+`/u;ll6ūÖĮtSŖ&Օ~5Š9é¨*"øˆåéI2 ąÜ+/Î7py¸ãôŌĻĶ#"´˜F_Ļ\œË<Ũ§Rũcp=–Ë}šÍm…ÛÚÃËiŌŪ˙b׏Ís ų9džxiĻiT’ EuąD¸Öwa¸ŪæĮ1ÔĩųũXJ[Q_ ЈRLʧŠ9C‚œXR×]€:ŽyüœSrâ*•w;1Î’jŒŒü °:dŗĮ%žk›‚ ŋ$›°cĮĒÔ÷ Jžčš‰ķmĢâ#ό˛G0 ‹"깁`7ą6ˇ8SÁ.B3eŠx’ĻzKT”ƒ¨ķŦ+tK6ĸ‹Í–ü{ZۘÍâIqe)Yč ‚‹ÄysQČ=‰:B&uŠ7Ú×@F×Ûq}öÚøåËĒIņɤi­‡.QšŅÕÔÁ™ÁP.ĸĸ_:” pß)ŗMļRœi4Í7…|)cáŲŌĄĨŽąĨīv*ŸHqk˛ûq“Ëb’ØĨ­đė”ĩ… օšHd†&ģ §@xŅnøÆË%ĨdQoāå\Ã/Ž€ "ķ>ÜŪę×ÛËnAúáI¸´ŧÔœø‹$Ë2ôžZåŠYThP¤ĒĩŽHŋÛcĮ9ąJIŦį=†˛ž8bĸJusŦP$aęۊ:á‰ÅŨ˜ĘI˜ėÁ¨Š"ęTõĖ„ōĮ›øéŒ[!ŗ ]9¨¨bĖũÆĀãdŠY,h•–Ŋ‰'ÖÜ}/û`Žāmü1âd ŠŽH¨ęR@c*ĨôîmcĒ×Ŋŋ8āËĶš/3xäKаĄĢ¯Îkâ9Á†I‹t!ŠI54ĒÎÛąųNĖ,Hš\íŒ2Æ8×°\[—%îǟVŗŌœ¯3’ ÚH]jĮMēz ČĘEÁ$‚ĨąĪJ{IQmĩÆå‡Šs?dķŌM•åSÔ´qĪX˛—_„‘YHœ’÷JŪā€l-zĮ ™6÷āMÅ1*ęŋ†}6š9ķ i+4Ęë2H mš=ų'r1J9ø}„ÜLo=Ō?†ž˛(’Ā ÃJģŲl6:Hą:ģûŽ”Û…L·ą{'‰ū.)ϝx2ébDX"¤#Ļėwc)bĖ.†#QīŒ<7Ŗšz“ä¸ĘŗŦŽž:i%ņ@Ŗ•# /Ä+CŅcąŗ æÖíšÛl)FKeMy—ÍešP§†´UäĶ3*22ʍŋˇ)pAĶqßßZNërģæp5uęŪiiúi0’5 4ą rX‹k‚wāĄ’SzVÄ8Ĩģ0uŲėϚ˜ÔŖ9…oÜÅˇ8ėŽ&ģ™j+GŠé˛ípCE‚Ē97ļ4đ\…­ Œō ™YŲ^)Ĩ/ܨā{sÛÃaŠjŠÛ%†iĀnĒHLÚôãm$ƒĩ¸=ŋ\yķoÄiĨėîCâY2ĪÎĸ•ÄcKÉk2k_vĩÁ°äī|i, OڝpVå-—Q'K6ČälÄĸ˜æŦ–@Ŧ¤ Fēoą[ļ]‡|\íīmčJ۔Aãd™ĨJåyĘJ‰hU‘Uāé!°DÖŖJ,’G7*X!$›@ĻĶä´?ÄxĒķŸ1ĘâEŸOÅ-†U rt>×ãØØ¸c.‘ײËY|Í~YãlĻ ­tô¯M M"I9J8Ø; ¨Üî.‡Øį–ĨikLÜåÕy:fĪ ¨§L…dŅ1*@>U@<ēEõ[æBŪ†ĮĘä¸JÚvPRģ,*EĮR_5Ŋ÷į°>wœWĮPÚ委ô1euãKÖšũöôtčŠĶų˜Ũˇfo7•ŗˆ™ :ĶDÚÔî5Éō‹ųį鎘{kģ2—´Ā+ëœVS”ž­ĄĻ)–vŋHt§Ę—$›ZûÜßėЛÜž uē†8ßY!ěęÜû~Øځ1f–š=eúFéæŨ/ÛūŽÖ8iI끴€zë1nš>äy¯kŸKcU+r.Ã"Ē‘‚ą†—Ōû}ą”ĸŦ´Éīb4QˆqTUr–É{”apö>ø‡Ųąđߊ+ręOũ›VņĖ#Vč,BMu(düĸáÛˇ{ną„ņ&÷__^f‘—‘o˙â?ˆZ8é*ŗJ:†5:D¯Ōˇ&ĮËcm͉=†éãĘA­đE/Œsy)¤Ë+*§Z.¨b˛iM‘$a¨‚ ŋīžéaŠŪ<Sá”ÕTmQš2Á;Ë ņT>ŊL­îĀYšąŋ­­I(Û[úVö)æ­„īQU*Ķ@Uc†Ŗ°†ĀéPƒk=n}IÛÃ͞_Ų{°ø$š“/ޞy @ČŽäÔ úîG6ļ/ĩIĀRTŦĘĩq›1Zē¤ŪáÉÃn=ũqÔÖԌģ‚JË=D˛JI™ŽĻ°ĩ›Øo Ã{p!ą[¨˛”$­Į'ŊíÍŊđ>š;–o-ī¸$-l'šŠĻĪĄĻËtČ Éi† ?—r,ÂŪ ļØã–),”‰˛ŸTQStūŸ P—Ž+VŪkmnûîq:Hˇŗr´g§Îf¨‰čžoˆb'%‹>Ŗ~ܓcØcĻ8T^ŋ/āÍÍŋdˇŽŽš:XŪ’B‹ŌIžöO6Ûbr ņÍ'-Í]VÅsžĨvyzŽBÜąūk‚y#Đ÷öÅÖ䊖v[ ‰Æ%ėĸIa‘v7]Õå[í|4†Q^ųQ359hĻC MŌ, ˛îwŸcˆœ5íe'E—ˆü]YžÖSĶÕBņGŦq#°ōė]Ŧģo~×>¸xqŦQžE7Š™ŒÖ¯Ą!E`ŗ"•[éÕqɡ}qŲ –čÆVŠp$īpƒS_|i°…#` ŅĮëÎ&Ķļ&ĘsōúĩššwW°RË`FāžFü~à $–č#*.Ĩ΁•ĘWSč,mĒ…¯o{_éŒ'åķ4×ęQRĩtõ RŅըƌ“r߲Ж“or¨ę–viY^arH7í÷šj—Ķiäy&ģ3’I'žŨđéVÂ÷“ŦÁ†—cļÁ؜KC°JđŦ?1܂GLiŒ™ F ,€ƒpƒ°–˙<[ôõ j‰zŽ„'ËÍŽw7ÆTš*ÄWˇ›@maļC˛u7š÷ŊûâZė;$JJéų ×—éé‰q ˛Õ3ˇzHéĒ!Ždĩ‡[#ąÚژ5ˆīëˆđéÚ/Wfģŋí‡Bąb‘PęéÆŪVō¸$˙˜ä{ājĀE”îŦu ×í‰qî‚Æ’Ė bF铨 ūۘĢĻsrĪ~ä’}mŠÚ…¸XĖ °ĮŖR :5ŠAäwąô;z[ŖK´=WŗĖb„0hJ„^YŦ×úî=ņŽ9ēĻL—ú<°ÎÉ,Z¤.  ¯emŊžōĩŗ‡pމJhT`ŽÄƒĄŽĀmo¸õÆz­ē*ƒ¤ĨË!¤•>Ēž¨00ŦĀõ-aģ_ˤīĮ īˆY&åv¨zb‘I˜-F[;Ō3!?’@ÖÕkC뎘8äZŒåqt[ŌĘŲ­t19cLŽ!Ĩfž‚mŠÉ$yNöĩÍņĪ8øo_ŸsDõlSSHLōÁ1åRŌlÃnmž6œvMĘ&͍7áĻXŌH‹ˇ•šĀöŋųヌ5ē RI*&¤ZM”ÆæÃkßl&’CNĮyŋ}˙ņ‰EzšDtđM"ޞëæ%TÚÄÛ醴­ØoÁyOO:OM%<°ļ‚ú–Č{‘ŊČŋkÛIĒjE¯@ŧđ“N¯U"" BVęlIqĨyØíÎOŲ*{­Ę<âĒī-)ëHÍŠšŠ[eÕëĪ;XwĮ^<ˇÎÆ2‘^)´ięļ§^wüûãK&ŠúąioÂZá¯ŗcDC#%ÜWJ-ˇ=°ĀqaĨ‡Š@:›OÄ'P>€|Úã鉛¤5ČQ‘įÖB{€ˇĶ~7Æ’Üģ˛Q(Š JM¸°qcĪųb\ŊF ׈°nWaÛío\_"=›“͈ûq…@:íåĐĻŨ— ŧÆ+;2ųlvųXm˙b0Uƒ\(_1$ą°ā˙lY%›E4  ukË<ÜĻ1RLąŠĢC3˛jō)IŖ•|đžAÜqî4Õ­Sįõi~…ŽW˜E5ĸY§C*…‰b(ÁHĐž6ā‹šÆY Ķ*-4$ĩŊ|ĖæB”0WyDu ¯čTąRž–û[œg{TjūW™U™(ŗ 4f”’Ä–Ž˜…CŊ‚‹›[oßĮVž>d:žB`CĖõEÁŒü;Æļķŋ#šīsßkŒKj[WŧŽ EéSŦëRH× }îI؋Ü}†:>ũQ—TÕ|LŠt*FŖHŒl6ÅÆDådë?Hą•ŅŦ ¯ŋĻ!š_R'lEÄĶXî<ƒø‹ČzD˚ŨP[K‚<ļ6`}­ōSĸb$ ×Íd2Č*N­;“qlh$;–áė”2´LÍ2ô°Ŋôßš÷˜'%| ē"xeÄ’Ž“p¤Ÿ6¸˙Î Iė‚Ÿ,&zIÍN råKÂÄš˙¨˙Ōll}F!I'CiՂ7^˛<(ۆe°`= Û ŋ-Ä)úæ(é呒īvēĸú“ĩą:Ģy¯‚FĻ1@ĖC]N¨Ā=H÷ˇļ#Uēc¯"Ih֖dž5*ëtÁØöÛ{Xa)š=Ē[‚ŗ´qŖ. ép ã{bŠ7í ļĀĘV 3ųIŌ4ą[{ũqŖöv;’%-K¤l"‡ųM¯{r}}L'(§CĻF’0š‹^÷ãB˛d˜€]ĩĒŠuíõĸöCąī‘ƒ.’÷¸6äá)ÖÃĸچžzjsR5E9m:÷MūaīÛN NÖĖ¸ÉŽKš2ÔĖ ™˛úé ēQ|ēû‚EŦû‰ũn1’ČāęHˇᘚ‰ ^šhdŠU%\7o ˇĻ;×™Ėų h i%^ĄŌ;Ÿ ÆˇHš´¯QÕHT[ôöÍđИ1fO1¸ãĐ"ĨĒ2ëV ĢIa)ŽåĶ Ĩp§¤b‘4LIŌØc9§ÍUK5 Œ°Ú lģ\īoĨšį댔Z–üjŠĩĻi"yĻ´ŗ¤Ü“éęī\éŅcč˛ųja.’F‘¯íå>ūŧž0K"‹Ą¨ļŦ–ŗ-’“BŊD #ް€@õßüė}ą1ČĨØn4W-É,;r;ãBN6‘öm.ŽØwAČø'’đĢ8^Ô¯[ Å=Á>ÖFŠIß{ܒ>į Ą’QÔEO"—„HåÁqkę[ōŊƒsą8m9*°N .[M˜C°1Ž•—iaPŽhÆĖI°íõĮ<§(:|š$žč˛–‰2ēzJĘÜÎĒŖtŌF6ŗEk1r.1š“›qKëŪ:­Û(3ZjČjÅ%kČÕ%Œ‹4w:ÔđĀíÎÖÚĮFI­K‚$Ÿ ÎæņēIe‘Ļ„›¤ŒOœzīÛXšfRĨVjˆĶU;âåÁ1äĩ›LRôū2žĻbÁžĸÖž9Öęė×ŋK%@P€`-oí‚ĸ+cŠäĐĪa啀ą6ŊíũąŦˇ• p@Ķ0Œm!rIãnÃéí‹Ģb°w2; gŲMÅÎ˙l^ȝÂÔĩSM,ĖÅ@cuą7Ķē$W6Ųje€SĀ%Fu °  ,IQĀ>Ŋ­lsīlĶbŌ)/•Š:Xá1F‹#FķęĐĮ“fü-úã+–§ÜŽÔŠ™š4*˙–‡ä\^ûvũqģ¤B.ríu ÖĖ7+qUPGĄ°ßûoŽyēėRˇÜ¨Îåg­F[ŊˆÖúƒ}vũ1҉-.ɓÜčŨXÂÖ6šāw˙gÕ nFņšs, 2īŠÄ{ŒR’âBŽč|˛ÆĐĘMË:„WQ°?ė`Iρ’Ã*<&Į͜-Æä ļ"I§c[ėEņ´ÔĢ"ĨeŨG‘ĻqÛõ¸‡87ģ+Ĺī™dÁE|1Ȍ4 ŗÍíßâ.íK ‡Ä9KSK]E<ōh"3Ú '‚NÛķŋ;ũÄëí!éuĀĘ û/†ģROĶĻģDŠ]HÃååŊmÍđį(5Z•‚M>ķŌ–ŗ1šg-¸O9[@yÎlpŠZ„á); •C1ĶT÷:/đ’ųĩôķí‹}fōÁ?# VgbhëĨ{é +¨ļßÔÃÔmÎøÎ_äpĨŗ)tĶîˆĒÍrÍŌ\Ēa %JI* ÛÜúß˙ōxW™kŖČÃ˛Č3*ÂÎ!ĨĨ4õåšIĻ–ÚÖ÷ĩļÛŌįšŋËãÆŽHÛøü™D’ƞļ–ZAQL´Ō$Ēõ­{Ŗĩš¸#qÁÛ¸'ĢĨę–vÛĢôâŊ?tcŸÄ̰EUj%p‹ÔĒęäĄ0˙OĶŸĩF[QÁ"BÚ%1¨bU&ÛmŠœĶ{Ą%°cJ%ˆ+2Ę [J­?QŒŠ§ä>F$p”Ž-M¤’ÚˇmøöũpÛ{žbžĄ‘%:QŖˇ ÆöŪÜũ{cxŨ ÄkyĀX]¯k_Û끄ް× ōų¸ôąßž˜šā•Ųĸ¨čĪhĪp{¯âyV‡{Ķ Ļ.•đ”YØŦ|ˇėN!ĶŽå.C)äz\ÁYãĒøŖ~ŧA…ąž¤ŌvÚæâ˙ß ­QŽÃēcķŪē 6WLCĄę‰õ,ĸÄëĐÖŌ}­b;z¨ĩR`÷ā’¯2žATÄKÅk] ¸ŊŽ ŪÖˆÁv“îVRĮ WLĘķît)`Û^Æ÷6ÆōoJ!%cü:k…*˛ėĀŊ•íq{_ëA÷YUWPe™Ø^ä_cÆü}-ĸŠŨ˛5(Tdqs‚˜Z$•õ,)Ø^×āÉÆ•Ë&ÆHú‚†ÂÃcūũ°%@ØL4fϊZn! îE‰&˙åõÂsĶ%2”mXüúyŠÆvŽV›‹‚ØY•Âü‚:4riŖĘ檊8ÂŲbQ2’Ā“kÚÖĮ%9I6löT€OR†Hb†˛)&‘5ē‰^Ā’@Ü˙įĶVÖÄņ˛dN‹›H,ģ ģũqI'.tޤŒĩ:ępŦڐ-rvž&nžÃėAø|Ā›€#eUf m z[âĚŒšydHŦI]ŋŨख¤Š mČt—:ŒUÁˇ¯ĨšÆFˆwB)Ŗ}ÄL[ų~R{v'ˇæaYnR3FžžĒ–9"QyŒ‹äAŲĩqëaÎ0ęsG57ˇëéEãĮ)ēF ü5c”$1ވŌíĢHD¸7k}1ķrš;gŽŠ-ŠĘÚŲäĨ˛5*ęō¤qŗ2› Čšą6>÷Û /AZZĎR;,dA €\ƒš$܃sɡ ãM4žÁ2W§V*‡Šm*6…j‘mАt‹ŪâÆāÚü‡§j'Sģ2§DōÃ:'ä}E÷K_Ę-ÜÜ÷>ĸŧ5bÖČ%šYz“:$b5)—›@;ėEÍÍöžŽŨ‚ŌIį†8]_ųK#‚Ûo}=¯ôۜRK¸ö ÉrÕĢmn43d•”+rZ׹ˇqr1ĪžcmūF¸ąO,Š ,?6ĸPŠ f†cd^ ]Ī$sŋ§‘Ī<”ĨÅūĖõ!ŖĶŗ+âLŊŪžžĸ‚sm")moįk+.÷~{ãlvtŊD°ļßŨVsįÃņ¯Äž¨čķšsTøJ”JlƔ‘Sv+qüãr ŸQÅũ,qõŨxeVš|z˙~‡Îõe‰Ķ\}}2Ë/]–G×{-ۜm‘ÛÜÁlXTŧU12ĩ#ÔÄt°=Īū}1œn/’ÛOąU—uŧÚu”Gą2X_ëm‰ÆŲ(ÍY,ËLZcT‘é  no÷ˇĨņ1rÛHöîWCaQ{k‹tö<ß˂PÆEJĮŅĩīa˙Œ4î;‡rdŅ"ĸÔ8üĸ4ŨI-ėlNëuÜugEPÔĒÍOxŲ…”Ÿė{`qmZ`žûšé(„Z’x'§¨u”4ĪĻX]F×īßrŧúc rŋTiHŠZ—Ž& R°‚Œ..ƒVö<Û¸ąīí|lâ›Ûb,Ž–š37qR§RĒ$qĢL;î}‡¯úaĪ‡ē–ŽKĒX㧐$Ŗ(ą’F-ÁūŖŋ{ûc 6ֿЗ2ÅR’5F_)%[Acą=ŦOĘ=0­§ŗ Ÿc%Z‘Į8ōAš?•!p zc˛-´bŌDĢ Ô3qéˆr^CĄ3\0r6 ĩž¸Ųä#Hé¨6Đ~kī§ß 9nėzB" ˙ ė"BHœöˇšâø—•߲=;nG&šĄt˛§ÎÛŠ<ņ÷ßļ“RЇÉTˇÄ;7œiF$yļoũGqúúã=rŗEķ¸=QFžV„]‹,Úļwۋ_ŋlRTЉúĘ dD'Ž]åk(eõßļÛm‰ĘšĻĸ­›3‘"YĢX ˇĀl;ãŊß%=žĀ4”Â[KŠ\ØZÜÛ¸õãES­‰ā‘j‰yFEåxČc(HķE˜, cōĒWEƒ}¯ĩö>ÎØ,ÉŸĐÆ&Ō×ę;Šv]īvܓëbHŊq^}Åâ 9|cÄu~YIˇĪP‚ũîÖC~8ãĀõč˙²†\Ž> bz†@B߀…ūž˜~ âÃÅ~DSøÁæevËâ3Č6ž×õÁā¯1x¯Č¸đÖq.{]Y-2SŲĒfd’[Ŧh5?-a¨({[õ81šŪü/{6ĀĨŸ"‡Õ9暚ŋ,M QYĢŦ€ Į‡<ĒRžüū‡ą9ŦZaK` w-G˜H@ĢN.ŧģŽß`ßÛĩ[{ÎtÛvvahķs4vōŊÖËapŌ_aúį +I1ę§hŽÎōå˚ŠhĶÖ!*Pyĸk) úĻüę>øx3ËĻn¸ōúîi“z˜ĢįĪë°ß æõSåûôÖhÜĶUBuÜ5ģwãĐÚÜcëđeYâõrˇŋ4Ī›ÍÃ{}4h ]BŨ¤Pëo-Žŋs÷ÅŌ{#LŦYÜČeē0ķwũ¯ëÚUhy^’$#iĩ‚ØÛûžøpŊ́0ZpaU .6 ĮûÛËÚą3Žģ+Úė™Ŧ9ûņöÄ/gaÖãl×s V‰<}0ív–4%$+¸Ô¯mÁėOˇ´ģ@ÕĄÔņĖZ€<ŦWRmo~ã N/x‚žå´-A%0ŠĻ‘ϐų‘Ũ]Oõlwįܓ´ËÛ¸-e2ŅĐʕp:Ž<Ę=¯×öƑ–ŋA5AŌE"™%„Ŗ”‚MĮúöąÆz›äĄ˛ŧs<ēVn–ąÔQ}†ãIė6õī‚šÍÍ;Mĩ F:fÎęTŗ[ŸC‹ÄŨr)W$T˛4HÂē‡uw7ūا%|0Ių“ŧ,WDNÉåą Ūä`RWlš#ĨPŽDÅË\ļļ0nxŋž*NøāՒMQ:ČáIkü¨Qū˜$Đ;" –Påt§NÖ×͍ų°jĩL(*$’9Ŗz¨Ŗ‰ÍŦėXŪĘČ"ø†ÖÍ!Ž)i¤ē‚ \ėT›īélTĻ™)2Z¨ę)ãÖĪŌ1ît6 Tú‘ßļ&.-ŌÜnŅ´’Č…$™ˆ`6æÖ?lĸˇ@>ĸ"‚ģBn\\_ũöŒ¯v $–Ĩēm/I€šļÖ'œ[J;ĨaČØÂ‘ØŠˆ7•Nú­ļ×Āü€ĘøŌĩg­†@N€ģ†§?ÍqnßÜ㇊nÔ,čÄļŗ6ÃÎĒ' ̎S÷æØæŌib”:wļ° ÎæŪäߨuitU›‚v#סū0ö=+b’×I$‹übmđ×`u;kŒ!Œg‡üÄąj<×H.Z3Ą īsnØØ=Ā´‰O•ËY"ušd@ô•$ūō-í˙@î1åõŌrjUõđ=Ž:—™Ŗ™LÕųq ’ŅD ûOūŖõĮ$ic—בŅ-意ķik!‘”Ų.—ĘK ,;ÜØĻؖ†š9gŦŦRļu”• Ûŗ›~§ ~ųŒRÂJ熠įe;XũøY#ŗ rj[G&]âę…D”EĄ °FJ‘õ˛ą˙â¸öŋÃõ ¨ÅöŲū{¯ä°´Û]÷_–Īų-H-Ģy…î[Ļ>ŠĪ“ē•!Ā( ~ĻÛ_\*z†ãå’āŗDúų:FÛlwûáEvLdqč4u”)°'qī|S“îɐŊW[/ķ÷?÷ÂRō„h[Ĩ&—×~-ąã I6*9c•Oå)[-ƒ_r7rqŌÜGŠM!uųl;[âY4(Ļ&F)R ØūíÍ×#ĸ>ÍÔÛåšįÛX¨Đ-ĪIČ Į÷žØĩ?QzeWK*‘`HØ}ņ:¯{˛8$tĊ{Šãí‡bĄ} O°_÷Á~aD¨ōeę{a0#ž˜Íf‘׃΍åqālĐhÚ!%ũCn?×x×Č´×Ėú礁kŪ×ũ8ôÄëˆSÅ0SikŪĘĮ÷õ>ø5G°Saœ“æīĻø­HTËāúØų܆šãߍNÔz֎w’WoÜ`Ąp9Ŗ‘ˇ ßĖTm„Ō|‡#>)õY,Ö<Ü ōÃŌ‚‡Š‰V$Ė3+ 2/}îoû`Ü%ôĢ+9b06 <Æ"Ņt˜Kp7k~ûŗ†’adr|GLÉ"IwĩØéûžø™ÎæH¸ÂRá 瘯ī1cF*OĨČį—WļæĢĻ›į` ß-Ė3Š'ĄéM U¤Đšœ¨7ŗnˇŽ2—YļČÖ=5nŲLŋÃéŠ/VĨ—Q;ē÷äéą?īëŒū×/#EĮü9§+=C?AB}ĀŌ}1/Ģ“ō+ˆm?đžPOÖEqrp¨?LKę§_ĐÖØr˙ ˛ˆõ3ŗ4ŠēĘŠ${‹îIŪø´ä+Á€ú_dye~Y5=’Ėĩ1ĘĸA$EU×UÔė×%P X—ãĶ—,™ãŒVČ}Gƒ2QU zJ–”—.ˆĪ)$ŪËČQ~xÄŧķēLĨ†5mų˛Ŋ֎‚ąėŒuIPVämk{ž8°b_TãËųēk4t7…ŠcĮŒÍīN"ë7R8™„LRä†į{-ÅĀæø&xîŊŸãpqŽíģūv “)Ĩ§f0FņôšŅȲš<ßQ;MĮž2žĻūé´WâŸ)BuKUHŦ%2€jzZXīÁV$mĩŊpÔ´ķ8ŠpČé2i&KŌÔeŽŌ.ĢEĪ^v–Hđ8ãS“æ ŲūS6Š"ëĩšŊŋaƒØ—gˇŋø8Úķúķü6šĸĶ|< 6Ĩ"OU Í­kž–>öB]‚3J ßÂĒ"ĢĻeDFëFU éîOWVĀžßŽ3ŒqęNŨš75ĢoĖŦĘ(+rP‰ái`¨I”Ō#:"š^'Ōn‹pvĮĢŽ„6ÉĩųžnNŽSoFõõũ­tŠŠęĒ 5Štˆj×áœt{~ÄŪãđĪŽjāūŊįú|~Ōf1é5 qļá˜hŋ뎄¯uš‹Û“ŖŦP6¨ˆ(āë`k° iƒ;–2Úoå Ÿ§ī†–Ā0 …ŠtÅÆĸŽ˙į‡Q|†ã™_‡ho§Uā¯ûaR[  [ˤFU˜qqöî1q—˜ô›Y5 ¨îˇīũđõ/1ŦR°Ä–5WtÕfŗ1P@ĩ͊›Û‹ŒN¸Ũ7¸éՈ N’V-}€oŽĮĖ #ލŪŅģ5‡”+oØííˇę1.Q ĮjŊpĢÃ<WЍ,l‰{.ÄXp~øNpJƓ{ˆęČŋÃļū¨Ķqķ$ÔĻHT U@Ú×ÖNũąÂķ!î)É^Ā=}8t¨ÔHRy6#ÛžŽŧ‡Lã‘%ŗ c¤ÛrxäŒ/y3ŽFXŲ¤ c}&Û÷ûáxëČ(žŸÃ˛ÕņŠ2ÛįXX.ܛņĮž%õ1E(J\!ÃËŨę]’û„„GŊČ{â[ČÕtĶ|ėtJČÖX% î,Ä ­ÎۏĄũqœēÉ>Ēéĸžķ øCh*}@†!ôÛÚüÛŪ÷÷ÆË9í&kq‡’ žƒ¨'4čUŽŸ0%¤Û{–:ļõąĮĒ-ļ6z4¸4æŽČmWköŦžAĢCÅ0¨ŌņĀáÉXk “c`?OšÂ…Gđ¤HÔŅÂP MdsÁ 7l@=ĀĀÁiāŌCü50A{° ö÷ôŋԝŽoIpķŦē2ūfŦg, ,Msar¤›ŪėÖô™RåŅJ2|#?UâÅüąK–SÆY\¯UĪĘ;…]ļļûúŒD˛-čŌ8Ÿplëâsf9ĨWSŠLÎĸt~šąé1‰!ĀŪRw'TbæĮI,ą‚ī_Ž˙ĮÄ'Ž>ĨäTÆ+Ēj:É[$QËN%§ J§¨Á´Y;qp9ą[ņŽw nãoŪüž‘ž- Ĩ_’ ĨÉ%WĘĒ?•ŪH‹%(čTę;īs¨ĻįŒ`ōGڏ†ģwfúeIøā‚(ōÜÂeÔņWæĨeĩ*u‰eBTX‹Ų ą\ŪØęY€ÚŠTø8œo*Mž šR˜"2É U+ŌDT†G>ģ7úm5ĻŨ(ūŋÁč&—âúøŒiéԇđüƆT¸ô­ÛÅ8ūõųâ'øžž$rBĩrą‚ĒJ€WK ō˙9ąģōÅ4Ō­)}{…6ū÷ĪûJIéŸLyu-“…0Ŧe?ęmąœ““ßôūm/÷ũŒøįŌĘÔÃGqĄ…ģßFã÷ÃĶĨû?_!Zk¯™_˜wũ āÖŠWĄąņ§ÆQguđęŠĻN€Äɝǭƒŗ [`}M…ąËŌûŲũlk™ŦZúÜķĘl¤G%\™tu4r,I$F’]ļQАŨyÜíúcĩuya[ߟûäĮėØĻžß^āĘLį?ĨŸƒŽ†āĸÖĐ˜Š H‚ÆÄ‘{ßqë˙åúŲĮ“üt_Ũū?¯‘dƒ$~ŋā2—ÅŲUP˙ QH&"48ûÜ_ëf§’tųÜ@VŽö-`7°ĩ͍ŊG녯͙č›Äˆ!cˆīmŦ Ōomíúũ)K͋MrLšŨC1°UK\L{ÚßÛõÂ×0Ķ܎ŗ7x+(¤(džEXļk$e€'Ô:ņu āԟą…Ēa'5- EĢŗZöh&ũ,Âņ&z˜ ea9Ļ]?â´ęŅGRTjC5Äw zV6ļûũ/‡ĒŅj)'šUšÎ™Ļo Uæ-Ī!xŌ ČsÜÛ2ĪrÚlĪ7ĖφZ”B“ÄzcQܕjô؃ŊÁŊą–ljܒãĐĶå)¤ĪJņ.[•ĶåÅ2účå\žŨfZ¨% ?L°kD Ø/›Ŋš¸>eĘI\yã“ē &ŪŽŠ<1–ŊTÉ%fdãVĖŠĖŋûŊÉÕė-ļ0ɑEéqųˇI€$4ÍOž×ŖÍ*ōÚB‚B d-Ãh[!˙0`1ž”œir“1sm5ęĐO‰#‡%đ&k“Öįtk‘ËR´mŅ4•2ĸÅЏ” ÛĘ.;ááöōÆj=ųßũ4ŖĻûz6M’ĶRVRĢËZHHüSÔ+FÖ ųH˙<<ú”­ 8ŅiM’ôĒ(RTkŦĒõĮ}ZŦƒpMļÆįûđkŖë`ZqIŠå–šz<¸Āá5„Žķ1°ë. u3sļâÄ÷Ņļ°;ķ3K˙.Ū_\YėŸ‹ørž!Ę*!ĖÆÁƒÆI@nGl;ã8Š5%Ëŗ9’SfŲDš‚gŌfTšÄEg UŠÍ{5ļ'×sLVyFQoūËÃËíņō,"ĖhČ@*ŖĢP„ôä‰ #“cqĢûûã5Įíü;|ū˙ČėĒJH2ØĻ–hSKüj“=–PÅC)“W†ÖöeĮ$ۖÕîū ąÎ2­=ũåfmC˜ÔÕŠĖŽ—\ē ­ ęBj5–ŌA7Žû ĩÅ5ĨŠW†y#M=ųõ-ë+bZZĨ›%§*ņ0 $ŌVāqąˇūũ7Į CAŧTĪŅ5C”.ū ^Æ×˙ŋ&<’”ˇ¯‡Š×8Æ1tŨ¯‘GI•Rž‚Ŗ2…3<(ōSɤZC p/mĀ}v>Œ&žM8ßwō<ūĸ2đ­ú<‚Ö”ISâ%P_§ ĸ…ŲA˛¨žÃcÉ7$œi‘M]-‘æ890Zėí¨ŧE._1Ē Аč T™ƒŗŪۀEīsů‚”ąę­ė<*Û¸.y[!˞šIeÍ(⚠Á+Ŗ4,ĀĄ>R šŊÆ5Å´e)PÖ'Ē™_-DÕĘG/Åõ Vy#dm(LĘM¯°ĘģmąÆÍ$Ÿ×aÅS°LŸ9Žø÷S%CĒ͘1 Žę|Ą—ĘųX\ú}Æ | Ō™$Ū#ëf96`LazUF$"ŪgD[ ˇōōomˇā›/ (ŊŠŌ–Å]Fk1‹/Ĩ¸pĩ50lÍPyŽž› ÜũģéĄ$߸K“f$@+ƒŽ˜öüÁũ‡Đc‚Z­ŌũLŪ=ÂŖŦšK 8ĩ—Xvˇ­ģvĮ€ü>; ГK0Œ™ēúM†‚›plîxš6Ƹ! “JˇøãkZ~¤ŗCW/Bp×tĒI˜)ŪįR^܀Ąū–Rq?iĤôĩÃū~eEÅËâ<´’`ÎąpŊNÚl9ˇŖjũmlv5â…RŋUųAV‘į˙Åg™slž9ĨISˇ™÷sĩíŋ–ô8õŋÅÁㄓķ_ĄœÕ:1ēĨŌŋũß˙Î=K~DŒ/>åRcˇfŋ˙n°ĩQKda餑˙ņÄÛ!厨 ût˙ĶrōĨ^ūq¤†¤Ø~Š‚äIUn›ŽöéūÜ6Úú@\x>­ãņ^PđÖCM*T)ŠIZ Ā:C$O–äXjšĩŽ9ú—x¤Ÿėk‡īŖØžŊĢ`ņõ\q´‘×MXŒM#‰:˜“ĄPlI<ظōĒZņ¯%šč{:fWäŲĩ2ŧąū!4DKQwmĪq>#ŋģķČÜ\ü—đY;åæĒM§Hiie% —NĮkßU+P_F—ÄĻ˙$ƒ#¨¨¨šŠúF‰UŊž;[ī„ō5^Ä~cđâ˙ž_É#Ô× & )0: Ąs~>`>üīôÃYšßJų‰áƒÛSųžZÚĶ?†zŠÖĻ<ÆŌKyi™ĩyîÃQkyČŨŽĮŌØéę'‘‹Ũ&ģ4Ŋ=|IÁÉ*{÷WüŽÎ˛Ôž™ę JVY%]4LĀormŽ­…û\c ×v¯/äÚYŪ™-ˇ÷“ÕŌÍWáZ<ēOČ4°S$i,+0‹B°W6Œúé öšž¸”á™ÍÛįë“ ō‹ÅJ¯ŌŋÜ­“%j‰#ys9i VĶüåUÉØ0úcŽY[æž' Šš­đMOˆjį™MôŦé$PŠu,Û€Ō‹1y˜jŊĪ Æ¸BĢæ˙q(¤Iã<’‡*†*üēϚj¤ĖĄ™bϤTX“UÚĖbԛ‹ {Ü,rĩ(z1Å(É{Ëėō†ļŸ2™[*͚Šwa4îŌFtą!Δ(¤ß`ěZÂûâqÎR[Ō ς·(ėõ5y ĸĄØ“3QN ?˜FŪÄûoÁÅŠĘšHŋ(đõ-KÅáV’Ē*wRz˜¤`„Ģ’q¸ ‹úaŠĘՉ¤Az6ĻŌžŦŦ†Ɇ5ËÄÅC!#]ÚÍŠ¯ÎūŦĀaŠ[˙bøÛŸáūj¤ī¤d4ĸŪÖÕļ4Õ˙Üžb˜xĶäĖj&’ĄĀĐHB ZûOöÛ)ö¯$“—Æ×葃~`ŸņŽQ244ŠŽņĢiT>ˇnŨí{ÜíīŽ˜‹xŪŠI‰’æž"†AI&VN§*ė^Žvô\›Ž1œ?ÆhÕĢŽŨž!nj3‰ŠĒâS9ŠĨV’ŽYŠĒŧaœy^Üym`Aۛ€qĐúXčŪ+˛¯DģzîÆÛ\˜¯âëYS˜ĢM}éČÖÕ"]#[¤*(CcōŽ=΂Ą…ÚQWûwoŸxÛžY—0:FÎh [—7 ö=ņÛâBé5ņ‹˛#0ĻcIŌHņæ„]6„é`ödŗ_‚„}šßĨÃĨ$K3FĸäK[ˇÍû`OW_1…ĶAS,Ë‘~YB•š'‹ _ŋ¨Æy3,M)wúķHjj6˜ƒë]ŋFÛÜûŪ Ģ˜xš„ÔËŽ”HzߜĀ*EÉFŊ íŊíĪįęå/ŪÆ˜ZSVmkbĢLŗ?W–sJšå4‚DËÔiJ;ŧ`Ífžm+yä pBXå8é|/ØßÅģîŲ߅Í<•sešeēŽŠ#ææ FÖą™VâÜ/Į åĮu7^ôâ%š):_™Q’Pš9cĖcHČÔŲ5ÂÖā¤Ž=môž#&kwĢ˙ĘHŧyq%ģųDŦÍŠōĘZiÖ ŧî NŒ†ZęHū@˛‹Xobļö"øßi:~ÎŪOú2É<†ß‹OCOUy˜ÔVQŖÅ4z¨¤‘™ ˙"$—C͚äIĶlNikiĮÉĸđÍS÷žŒōäJ,ËWL],ņ…×Î7öf¸ôãjPî—ÄŪYņ¯Ŋ/⤖ļ( ĨŦ¨—,††ļĸĄa•Ą­¨UWkŗ7ONåÉRŠģĨÉluĨŗIņ^ŋ.ūŸ3+M§įe­%H’‰'ŽđēMũkâ:’ly°‘•OÜc'–O‡˙R”cĪ˙˛/U"šĒ((„5e•:Bšeļܒün;ÜãKnŋõ‘ĒŽüPķ– )[U bHˇRÔĢJYMˆŽPîNã|8Ę-ė—ūŦ%Šwû}ü-ęO>_”áįøiŠŦŖęFÔ.4ž ŊØw°ØãŖ2^Ō{îcŽ\SĻobËdĨŽi) ĢĐYUŋ9$„\ĒĘŦA$đ<¤ũNÜúa“ī|īõūÍ^IBĢåüH‰ŗ<¨$Ôšõ6a—TH-L’C Hų$O- úÛ.‹ūũzēĻū÷éũš*<§)¨é7[,”´hPĖUõ(ŲJąōž8ļĮ,đdŪF˨O‡ú‡Tey_ø‰2:}GNŠŖ†;ļû,|G†ŪÛĖųmüJZLį#“8O–EĢRüK„H˜Ũ@¯Ž­V'Ũ¨/4cö¨ˇVeōOšøš§+FĖēÂĖé´6J˛ųŦZĀ 5ŦÖ3Į×;5ˇŋëbVÔĨ5üËâ3zŠoÆų}føe‘‹FĖF‚4éēܰ&÷ļæÛo cŒ—;}y.ĨÛŊŦIŧG” <ŗ$”eŲ•%Zu=}ÖDBēC”—g /ˇĄÖ*:õU„ōÆKFÆs$ΞöŠŽŸ/Ĩ–Š]zŠŌæĸK-Šdō¨ÛæļĮKc]J.œNXĘ7E'Œŗ ¯‰Šķ ü˛†zú…’ŠąãŽO0ŦH'Ė ąÜ㎔ ŌEJI!ņŽ]â|Ļ|Ē%4Ÿ ")Oœ+Ģ ^į^Ū_ū3nįŠŧtßË-ö-„ôųĨU;/M劘4ô%™IKH¨VU\‘ĒÄß|c*MBûōFSmÕæÔy-XK0…PSšÖįr ą$˜éÕÆ×cW:ˇ|rSœQQšxĻžļž˛Ž!Ķ<¨ČŌĒßkn„O<‚MŊŪ<ļŌDë‹2uū#āËĄOQÂ]ãøÚ§1Į¨ĄRL–S6ęof'bpį)+hÎYāi˛8exž%ō1_4ĩ¤íëjœRÎÚē!x‘,Ÿ'ËŪäŌQˆåtôĀ$íÍí{ôĮöœŊåķ1ÔČáđĒ‡â“*ĨXÕÔjÜ@ą;ėAīÛĮ¨Ë§fĮm“E—ÉJ“Ҥ+F˛Ģ0Hôú0¸ąˇ×Øb>Ņ8¯kyJM&ˆ~ cšIcdYĨēĘ^1¨Ą0=­sr/k‹á)ÎiFŽž__Ųâ:č$Ž“UÔ´˛ –+M¸×Ú×ŋ#ß×|(4åSMūao”QĖČĩÔT8G#Ĩ$+î.'k[÷öƓQV”~ëę‡[bIJ eRĸ9[PەãWīaÍą”ŊÜ}Xíĸy#]VƒQS6ŖdۃmČ']°ŧ6ˇ‰§ĩV6aEK¤¨ŠbīV’ Yõ:˛īŠ• ēė6;ŸĻ4ŽiÅĨįé_>ūŖ§Ũ*Ķīø~VĐÉS&­RęBK@UΑfĩĮ y^››Ũx˛K`߯3D‰>°ŗˆÃARęąŌÖ€cq~ Å­}Æ2SnՑâK‹#ĻÍŗ:5‚)k š`yXĩ÷fkķÎÜÉš#KVŋx–´ļc ņk–@đÅ&d’J,pTÜÛĖę,ã}ĮŽq+TŨŠ×א'. ’ĸ ˙ō††7ëHڝ@Ŗ3jŊÉn.=-‹sē“vû­¤œĶĸÂÅŽötdÕ¨wšŊí{ķö°Ą’›mĐ-H&‚Ję6č ŌÍæŽÍ§MŊ,6$mŋųįâĶmžB2”wL™ëkKÔ¨ž9_KHÉ(BH_°íŗ}oŒüY&Ũ­ÁJ\ äņf(„*ÕP*’ɤFGo[âŸU—ūDšI–æu‹FCņ ßâXČHíˇۏī„úœ‘Ŧ“á  éēŦ§á)ĸ#VņBû÷ˇļ!ÉKzBmžQ8ĨXHƒ ”XÜęÔSuŅ}Ŋ}}1NONžŪáŠËKŠá…QOSCĄiĢkĀļâ:ĻEmī°>Û\Î3Ę ĸ RÎcYtU;ÉX4°žbŒŪSå;­Ŧ=âØrÍ)ķú ÉŨ€æ~"ŠĒĨĨ­†‚ĒŽ(š5č_Fl-Įn8<\š"“{ōyÆ`ŋ]b¤‰¤“¨`‰C7%ˇ›‹Ÿ\Cę˛ß/b\÷¨Ëéepō),@ ĊģZãäQ~O#ŽĒRî˜BåĐŠ´ ā\{›mmŊ6įמ%ÉŊ†Ŗ@4YžQ SSÔeē9"O‡˙šJ–×ŋ a¸Üqluã‹ŅŠĘßéčÉ~h'2 ĨĨĸК™¤ŨÔ$mŏۿ˙Ž9Ôæō-öĀ™n_<ÅMã`‡HͤØÆÄÛmÆüÜāÍÔdáȲĀŌĮ-EZĘ/åöįëŧ6I;ąZt3Xębœ{žq ˄ƒō#ĄĖë)'ˆĸKoˆčÁî  ˇõ(āûrA8ôV”ģĐ$>ĢÄŦõQÉ: é@CrûƒĢˇbļØnõ~jÚÜuškMŸÕĩ* RN3ąŠŨKķšÚňØ^Ö>Ŗ§}¸*¨aË2Ęķ[Y– #¯*j¤ļĻXˆ:šĀüĨÁÆĮlL§7l7+DŽëĮpĢk^ąÉíōė=Ą¯I9f(ŠáČQæ'›ÜílV‰´dōYßB>ebæ×6$ā–,Š 4ˇ\ŠŠĨ”<hV—ēĻĩŊîÉą<úâĨ‹ņ|ÁEÕŲĸÁŗĩ*Cq¨ŖųWĩ€ąúũ1ŽDâšąî”ÍuëĀŌ`#ģ7ąĩžØ;ržaĻ>dųuĩ‘™a'§{ƒĐ7Ŋô›mÎÆ˙CÆ/ÂÛũEy†6QVbgbžP]ĩŖl8ôߝŦyļ„×qé^e{RĶ5=ęęiU„z$RĻöš˛ė,M†ûL%ŽW°´ĮģĒËÖŽnƊË*ú¸ą -ÁPpiW¸ę'WQÉFĐ+‰f‘Ô1Ģ]~^wÛvˇÔ}.OŠķ˛ë˛z†™kË ĻÕtÛuSąú˙|(Į$7ŨˉS\Œ"5š{\Š7÷élO‰í$ŪãT‘L”čļTBĘĨP“Ąv7Qklöį|';ģaßu@5ļ̆U=Åė7ØÜúáoø¸)FŪäs|AG1ÃՐ¯’;€Mû^ŪļÅE+ÜY §ōTH0ĒÅmĻāŪÖ÷ )OHSķ,áËjÄĘĢ)†E, î4‹ęŋ§ 8í…Úļ+”TÕC"S;F&"ÄYEÅģÚû×ŒˇB§T K ”4夨–A¤’Å.Öŋ˙lk)^ņBŒ_`ŋˆXcgh˙/k0÷ąũ.qĨuEܐ’TMÖhãƒXWéŸ °$Zã׎Į'ČÔߟ:24f×åHąúOĻNžˇ'Z%øŠ28ôŨ=‚بīę/¸ûd:9kfŒ­KŨŽccļĢZÚļīļ AŪĖvß'?Æ5RŖjh؈ÖĮ)ôũMŊ1*6ˇė÷ŖĶG XH2×ā…ãõīčF´ļˆ‡ÍC#ŌęT ÄiØ\íŋŽÛķ†ã+°ka–=-ú€öūÖũpÖ;ä4Ļ@Ō͝WP:›F‘e[Û’Oļ+ÃÚė–ëtUšŒÆQĨŪcO-Ô–ŋ ‹é¸mî1ŧŖnš2Ü~]_QPŦĶÆg‰,]•@eˇˇĩļî ņžLJ iÚ,#”ČBĶy­d&Āĩ¸ĩļˇžĨŗFĒc¤YŲEQ7 ū¸—^dęfÔĩ?Â=@´6WyVėĀémļ7 Û~;ūž'˛%˛ģ;ÉëjĢŽa—ČĻI,Tž˜;Xj¸>ĸöŪÆ×ÚÅE×ŗ!ĩMŖ-&Y™fąV$‘ÉOŅ‘OBQie*â6ļ‘{Ŋŧļ`}ėF3–6žĨÉ ÖäqdŲtą&š&+˙æ.¤€ĢiR,oŊŽ­ŊČÆ×*Ģ+ŝU™lÛ7OŌĶÖTĢkUŦX“fvãéžØĮ§„ŗOOÉ2z|õ”9ˇøxĄx:pūDŒ–taķ/ĨīkŽÛÛļ ›ÅS“f˛ÔŌĪŌĨĨšæ)ųI`äk${‘ļãƒ~q¯‚ąE'؟RU–‚†yéV¤Ō yēŠĄIŅk yŦŌ÷ĩ­‡5n>ņęĨHŅQ3S0‚ĄOOTÂE'S‚úXŸæģ˙Ô8§Ø §5ôŅTÅ jMQÔXĶRŽ­%€ on6ũ­}Íņ-&ĀÅøĢÄŲ5eZ،O$qƑE:ƒģ,tÚäžv,7øŌ8g11ųfwJÕB‡áēeeék$Ē;]G{ŽÄ>ļRĮĄX‰ŋâ=tkZ°K"ˆW[„:bn× ÷Q{īo›‚0(viˆÄ‘"æ4˙ XuÄōʤŲCFæ×­īŋ>˜™D|I’å2ĮÔî40#Y+€TnˇsûœsK oPĘÚÜ’ĒŒÔAK“ĀĻ1ĄģĮuÔUĪ,vÅÆ)ĨĻ’Ē*ü-â\¸SH+R654ŒÉ´cVûČ¸]ípIŽ5ɎJ)2u6šfųnU•Ã,i™ˆ‘)´I!*T Čļ˙ËbAŊČ'“i†)[ō˞ø˙E%TRŅÂJš–-Qˆ\( {l ߨsž7}$Z¤-FΓĐCAWX fžjgĒ@­ÁÜhãcŊžģ{ã•ęrĨîá &wK-^[;|A™ ´5Ôlm¨éksÛąž0”jÖā¤V­*× Ûllúwwc˛:úI)fč‰ĩ"ÍÁąæûmkã-K`4ũ2Ąe‘ˆRîĄ|¤Úûīmžø•°­čęM2u\+ü×VĩŽûņˇ>äī9Ļcd -:ĘJÚö `-¤ž,W÷úá$žË°I Čb’DyU ];ĩĮĐsŋŽŠäzއHšU%Ë,$’ŖnÄlļ/a]—š&_OQ=ĒgYnĒÚ#f@ÖÕĮ•#ˇųīWíHVseg6ĨYrųZ:ČÃʑČTu”›‚âĀ ­ļ㜓a}ĘS­ŋÂëßæcīōã–ЏC%-o^ĄčaW){-ö˛-˙QköÛļ=éĐŅkXĐæ‹—…ž&ŽO#2–#Y w¸ú@’ßWķd_ˆÉ=EcʈætJ }ZģÚā{~ø™B†Õ‚w–˛X|Ē Ž@HQv­ö;sîqI{# Ģ=#ŠDämôę*6úˇß *ŗIî“÷€V¨đé™Dáî ‘ĨÂÛ~Ä7í†ūķC”v@ū q[—|Cĸ†-#¸$°cŦąäí{ĩ€Ķ°Æy}—ą•į9Y[@õŌFJ¤|¨žĮG6ØÚûķs|f”ģ:&ŒOĒ ņ$ÔčÍQMJŖG LZ‡š×°bM¸ācXbIiķ\ūbÔËL•`ü6šŽŖâĨĒ­„–“âŌ¤>ĀZßûŊũo‡“Ë°ŲŸđömY™W=UT礸´S¤iŊ‚ĮĄ$‹z÷Į[ŠŒ)yOVüNH뀑HØh(vÛFĄûŒyÚÜkŪWŠ‹Í̚Ÿ:Y) dŠĄƒ×6_ôôˇZ˛82~"Ë#ŠÉĢ?2DŽZ‡ĒdĢI ú۞xôĮnōN߸ŋ ¯ėœÂ*LŊQâe/ ,ÃCš[ŪÆ˙ÚÚo–7/2mŗGá<ŌļLˇ'Íu@ąM+ˆ\yGķß}…ˇˇ~ožh*hfÄy57ˆ2üēžs$PO]Ō:[S1;sļÍō,EÁÆ0ËĄˇõØFJ†š’Ÿ;Žé|.v”oĨĨ 怑¨ m’-;žÖ4o˛ĖÂXk•H wĻoKęīëĪLrIiČ|XP•í@ ˆŲŠTHuy œŸAüž÷ž= K]j%ˇFžƒÃŅę=mdĢW ¨Aįˆ Ė æÜÛ}DR/{oŒōé¸ÅQ\EájyeĪŇcmøĮ RJy;˙VT¸64t…%}:M#%-4ˆTč°]7Üj.ny°ZØæ”Ü–§ę:دņl"’\ü3´ˆĖ`{Ŧę¤8ģ[ÔŽÜYmŪãL.¤Ąä˙Qé đˇˆ&Ģ)dI4RSˆOķėģŪ÷QĪ^ņiā‚ÂŲ^}—ÃÔÕL¯¸Õb¨Û^ÛÜîEš78Ō0Uîä†4Šđũ4‚8Ŗ‘%Š„AüˇÜúũ;ĶåZW˛;t‘B­J*ęhgĨęBŅ%\ŖXØ~mį8į‚öWÉ-”9=k”˜‰c BČËåęŊĀ=+]íslwÎNī끤_W2-#I,}IAT { ĩĮĀ‘éŽl°Mj+M -5@ø}LARÁŦy6#mˇßßž0ŒStSJŦęY#” Q ­Ī;-ūÛūØŠE! ˜Ę”Š%1ëęęPˇN…vīūī…‰kI°*+s~„‘§B¯UŌĩíbųû ¸į×Į´ÕņŋĖ—šĸ ’œPÔÕĪJ˛Ė‘ŖĄÕ¤-ܒ-öˇĐœ,P´ėM–m–RĶæTīēĮ8HV5}"0ęãÜöØ[Ž:üGĸüƒ‘ä‘ f§žhžÜ1 ŗą âü|–‹ønwĘ(ĩ“Âōŗŗķ4ܓ´€Đ ZšŽŖ˙Ųleptonica-1.86.0/prog/textorient.c000066400000000000000000000064421506303110300171020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * textorient.c * * This attempts to identify the orientation of text in the image. * If text is found, it is rotated by a multiple of 90 degrees * to make it right-side up. It is not further deskewed. * This works for roman mixed-case text. It will not work if the * image has all caps or all numbers. It has not been tested on * other scripts. * Usage: * textorient filein minupconf minratio fileout * * You can use minupconf = 0.0, minratio = 0.0 for default values, * which are: * minupconf = 8.0, minratio = 2.5 * fileout is the output file name, without the extension, which is * added here depending on the encoding chosen for the output pix. * * Example on 1 bpp image: * textorient feyn.tif 0.0 0.0 feyn.oriented * which generates the file * feyn.oriented.tif * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BUF_SIZE 512 LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { char buf[BUF_SIZE]; const char *filein, *fileout; l_int32 pixformat; l_float32 minupconf, minratio; PIX *pixs, *pixd; if (argc != 5) { return ERROR_INT( "Syntax: textorient filein minupconf minratio, fileout", __func__, 1); } filein = argv[1]; minupconf = atof(argv[2]); minratio = atof(argv[3]); fileout = argv[4]; setLeptDebugOK(1); pixs = pixRead(filein); pixd = pixOrientCorrect(pixs, minupconf, minratio, NULL, NULL, NULL, 1); pixformat = pixChooseOutputFormat(pixd); snprintf(buf, BUF_SIZE, "%s.%s", fileout, ImageFileFormatExtensions[pixformat]); pixWrite(buf, pixd, pixformat); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/texturefill_reg.c000066400000000000000000000173061506303110300201020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * texturefill_reg.c * * This demonstrates a method for filling in a region using nearby * patches and mirrored tiling to generate the texture. * * For each of a set of possible tiles to use, convert to gray * and compute the mean and standard deviation of the intensity. * Then determine the specific tile to use for filling by selecting * the one that (1) has a mean value within 1.0 stdev of the median * of average intensities, and (2) of that set has the smallest * standard deviation of intensity. * * We can choose tiles looking either horizontally or vertically * away from the region to be textured, or both. If both, the * selected tiles are blended before painting the resulting * texture through a mask. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Designed to work with amoris.2.150.jpg */ static PIX *MakeReplacementMask(PIX *pixs); l_int32 main(int argc, char **argv) { l_int32 bx, by, bw, bh; l_uint32 pixval; BOX *box1, *box2; BOXA *boxa; PIX *pixs, *pixm, *pixd; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Find a mask for repainting pixels */ pixs = pixRead("amoris.2.150.jpg"); pix1 = MakeReplacementMask(pixs); boxa = pixConnCompBB(pix1, 8); box1 = boxaGetBox(boxa, 0, L_COPY); boxaDestroy(&boxa); /*--------------------------------------------------------* * Show the individual steps * *--------------------------------------------------------*/ /* Locate a good tile to use */ pixFindRepCloseTile(pixs, box1, L_VERT, 20, 30, 7, &box2, 1); pix0 = pixCopy(NULL, pix1); pixRenderBox(pix0, box2, 2, L_SET_PIXELS); /* Make a patch using this tile */ boxGetGeometry(box1, &bx, &by, &bw, &bh); pix2 = pixClipRectangle(pixs, box2, NULL); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix2, 400, 100, NULL, rp->display); pix3 = pixMirroredTiling(pix2, bw, bh); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix3, 1000, 0, NULL, rp->display); /* Paint the patch through the mask */ pixd = pixCopy(NULL, pixs); pixm = pixClipRectangle(pix1, box1, NULL); pixCombineMaskedGeneral(pixd, pix3, pixm, bx, by); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 2 */ pixDisplayWithTitle(pixd, 0, 0, NULL, rp->display); boxDestroy(&box2); pixDestroy(&pixm); pixDestroy(&pixd); pixDestroy(&pix2); /* Blend two patches and then overlay. Use the previous * tile found vertically and a new one found horizontally. */ pixFindRepCloseTile(pixs, box1, L_HORIZ, 20, 30, 7, &box2, 1); pixRenderBox(pix0, box2, 2, L_SET_PIXELS); regTestWritePixAndCheck(rp, pix0, IFF_TIFF_G4); /* 3 */ pixDisplayWithTitle(pix0, 100, 100, NULL, rp->display); pix2 = pixClipRectangle(pixs, box2, NULL); pix4 = pixMirroredTiling(pix2, bw, bh); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix4, 1100, 0, NULL, rp->display); pix5 = pixBlend(pix3, pix4, 0, 0, 0.5); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix5, 1200, 0, NULL, rp->display); pix6 = pixClipRectangle(pix1, box1, NULL); pixd = pixCopy(NULL, pixs); pixCombineMaskedGeneral(pixd, pix5, pix6, bx, by); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixd, 700, 200, NULL, rp->display); boxDestroy(&box2); pixDestroy(&pixd); pixDestroy(&pix0); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /*--------------------------------------------------------* * Show painting from a color near region * *--------------------------------------------------------*/ pix2 = pixCopy(NULL, pixs); pixGetColorNearMaskBoundary(pix2, pix1, box1, 20, &pixval, 0); pix3 = pixClipRectangle(pix1, box1, NULL); boxGetGeometry(box1, &bx, &by, NULL, NULL); pixSetMaskedGeneral(pix2, pix3, pixval, bx, by); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); boxDestroy(&box1); pixDestroy(&pix2); pixDestroy(&pix3); /*--------------------------------------------------------* * Use the higher-level function * *--------------------------------------------------------*/ /* Use various tile selections and tile blending with one component */ pix2 = pixCopy(NULL, pixs); pix3 = pixCopy(NULL, pixs); pix4 = pixCopy(NULL, pixs); pixPaintSelfThroughMask(pix2, pix1, 0, 0, L_HORIZ, 30, 50, 5, 10); pixPaintSelfThroughMask(pix3, pix1, 0, 0, L_VERT, 30, 50, 5, 0); pixPaintSelfThroughMask(pixs, pix1, 0, 0, L_BOTH_DIRECTIONS, 30, 50, 5, 20); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 8 */ regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 9 */ regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 10 */ pixDisplayWithTitle(pix2, 300, 0, NULL, rp->display); pixDisplayWithTitle(pix3, 500, 0, NULL, rp->display); pixDisplayWithTitle(pixs, 700, 0, NULL, rp->display); /* Test with two components; */ pix5 = pixFlipLR(NULL, pix1); pixOr(pix5, pix5, pix1); pixPaintSelfThroughMask(pix4, pix5, 0, 0, L_BOTH_DIRECTIONS, 50, 100, 5, 9); regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 11 */ pixDisplayWithTitle(pix4, 900, 0, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return regTestCleanup(rp); } PIX * MakeReplacementMask(PIX *pixs) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixMaskOverColorPixels(pixs, 95, 3); pix2 = pixMorphSequence(pix1, "o15.15", 0); pixSeedfillBinary(pix2, pix2, pix1, 8); pix3 = pixMorphSequence(pix2, "c15.15 + d61.31", 0); pix4 = pixRemoveBorderConnComps(pix3, 8); pixXor(pix4, pix4, pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pix4; } leptonica-1.86.0/prog/threshnorm_reg.c000066400000000000000000000076331506303110300177260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * threshnorm__reg.c * * Regression test for adaptive threshold normalization. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void AddTestSet(PIXA *pixa, PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh); int main(int argc, char **argv) { PIX *pixs, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("stampede2.jpg"); pixa = pixaCreate(0); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 18, 40, 40, 0.7, -25, 280, 128); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 18, 40, 40, 0.7, -25, 280, 128); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 10, 40, 40, 0.7, -15, 305, 128); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 10, 40, 40, 0.7, -15, 305, 128); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 15, 40, 40, 0.6, -45, 285, 158); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 15, 40, 40, 0.6, -45, 285, 158); pixDestroy(&pixs); pixd = pixaDisplayTiledInColumns(pixa, 6, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } void AddTestSet(PIXA *pixa, PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh) { PIX *pix1, *pix2, *pix3; pixThresholdSpreadNorm(pixs, filtertype, edgethresh, smoothx, smoothy, gamma, minval, maxval, targetthresh, &pix1, NULL, &pix2); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixThresholdToBinary(pix2, targetthresh - 20); pixaAddPix(pixa, pix3, L_INSERT); pix3 = pixThresholdToBinary(pix2, targetthresh); pixaAddPix(pixa, pix3, L_INSERT); pix3 = pixThresholdToBinary(pix2, targetthresh + 20); pixaAddPix(pixa, pix3, L_INSERT); pix3 = pixThresholdToBinary(pix2, targetthresh + 40); pixaAddPix(pixa, pix3, L_INSERT); return; } leptonica-1.86.0/prog/tickets.tif000066400000000000000000004157041506303110300167100ustar00rootroot00000000000000II*& e †r˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū@|`Āø˙˙˙ų €0>?˙˙˙˙˙˙˙äAņ˙˙˙˙˙˙˙˙˙˙˙˙˙ü€ø˙ü€2 x˙'˙߲¯Ą×Č 9ÁČ ŅÂv¤Q˙ d EJëBFūũd €Ę8A˙ŪDxd|5!ŗ_õÂD ā™:h 5\46ĩ 4æđm’š€0ČmH{ĩw!`HƒôpÖĮwĄÜp¤‘ˇ˙ų ƒ\}!Á/4ÕIûųċ#>E".Û.Ē@Āí28 xE§­Æ™q A ‹ 0ūCCÆĒA/ō&Ëztfm¨i˙á+÷ŋŨ§ô"%XxPíēßë×ÁA;FąŋĮ_˙”z˛o¤mƒEžˇWŅÁ?“}H”wĻÕ˙ũē×Ŧ¸\3‘ÎBXL7˙]/mī¤ˆN# Dō#˙ūãßéXr ZņÖ˙ũ÷ß r Į¤Ŧ*RÁŽ&ÛÛמčÃø¤°Čl ňÃGŸi]û÷朜1nÚĶ Ĩmŋ˙¤“!bęÚL;olDt•Ĩ Č d@ƒi2w˛}õÜ)ÁÍ˃R ââ#Í&<2ĐÕĢ„í—Koˆe;M6ƒąé_ąØOÆ.÷úūØģä6CÃ#†X~°õpoŽĘÔã—ĖuĒĢNŲ#â!ĸ0GĀŋ¤ ŧ†Xk‚#ŦEĶûzÅä5œ÷× ‡˛]$dk!Ē?¯ėWXE@5}Úûi|29u‚ â˙mO ÜRú„Ōîëč1ęˆ(ĩWTû!¨ŸįÁ̈́Lm'č4¸Lƒø+>¯úkô‡&ä>­6éŪ÷Pza/Đķh6â¸m_ßôF=hH¯×ũmƒkũpŸ˙ūŪôĶ×Ōoj6Ûû˙Ōa‹ķ ßÚyP+ū °ƒ=ÚžÛü}pߨ‚ŋū@” CîģׄƒÃĶô×ößĩ3‘×ŋßøoŲ ×)Č.Mû×eĶü„ö˙ņmß!D2­ŋ ēëXm¨Ņ CúūöŽÃįé %:—‘ļlŌ ?Øû¯#˙Ŧ48¨(ƒAl4ĮČ‚Cŋa´ƒØZ_Û MnDZxä3c}ū:NųAa )°QȁqČ{Oü{¸$ī‘ ‰Y28!#ĪȆđapŋ}kÁd0ËĨ<‹e9Áë avŸūöWĻ“ ˂ ĩŋ×˙Ö:ũÁhTä C4xXL‡ü/Jšt…`îs›2Įü ;¯đō(áī|ØKąxčØ."Ã(u3Š ō(ä5ԇœ.øV{tyUtA QŪC \ŠūDCĮûpkõīMaúA2 |ƒ$*dod3 f °QfC2Öč=ũxúÕŧ—BtúڑG_Bfĸâ‘Ęw´Čmūímî@ĀOUõ M Ø-¸d68~ŊZ}"$1ĸ rCõĩŪB9 đaÍŋá!˛Ȋ‚aĶ* ô˙CŖĐ&Ę˙r ņ‡ų ņäßí¯}ôUˆF*A0ÅĄŊow „†Ö}á>Mîôî l‡~˛ûŊģōRIPa§ ƒw!ôÄnđ¤)pĖ{_ûũσŋâėsEž¯´•÷_üŒrÁe@ŊĻAC¨"?Á~˙ülH7|=÷ŨXŖ@!(ūǃ#H ‚Čhr˛UūŌ˙û_!–ëo‡m˙ÂA6m&GŌŋęAĶæÂ‘ūqÆ4ׯ˙÷ŌwģļŨŪ{ŗ§˙ÛH(T>/×uGž“ˆžÛ{‹˙˙‘đīžī˙ũ)(!¯qa.CŊ+CX$Xm]E˙á}?~÷Û~aߕÚ[TĶ!™ŦˆĢã I]ƒ +dAß˙ÜVú;đũžwę›ũūžŗ@`žĐČlsŊëv:AH(zl) ĄŨ/ßîíąûwģokũ^•ļė!vCļļg!ßPĸˁƒ]!žpÖūūũ˙kŪūŪ?ŋérõŨ˛ ÷ũä#ĪqÖ$W9ã†Aãl;monœwîØ>˙ĐuM×!D6÷Ēõī$>L˜čwezbÃonĄļîâ.Ûû ą¸pß˙ô’¤m ŋß!Įk= d ˆâg„čr&wwkíZÛģ˙_uļ"@xeũ˙ģOwëŗ¸/ ZĻ ÛNū÷ĐĐ7ˇëúē÷ō+ëŨxRCŽ/¤œYn]낪ˆ‹ŲŪûŊģâ•Úû××Ŧa:zëņ¯¨WCČ5Íf <Av7‡víĢČ՚ ˙˙‚Ŋˇ qŋûŋH'JApsÉĄC`â!ĄámĢå Č`ÂēˇūÕ{plXd`ģm´˙ÚČiø{xMęJƒíũĸ ĀcŪßÚĘ{ūņ$Bm[˙ėˆ9tē˜āí:ØD€sx*öíbĄ ŌūôÂÂAŽōD6™VF8éˇZˇ°õ˙­ļÅøŗÔFû}ŨČØtBgëņ| /Û ģĨ ㆃA´­˙˙I=plƒŦD†0Ę~›ę~žē!k}ÕPą ģũ;[t˙!Ļ9N]Ûŋ*€Ä%ō$˛k€zö| Ņ ƒˆŗå÷ÁīũāŪžˆ{ļŦōIŋ_]&ëėEz>eōāPīōc÷é.î#S|&Ũë’ÕöĢŌCųœ§$:Ú°ND͆‡ŲC°{˙úŪÄBM\†ZGļÖEÃ/Õ;u 熸ŠÅĩŎöÄDtģwuõ)Č7}ôëŪö×Ē›Aģ $ĪĢüЁ%øūÂ[Á Ũĩ,Ž uūÖ×$=6PīdM{pŊ°ƒI§­}ēúd5ĢģÂt+ŋÚ˙ätv)§pĢ!y|¸-ūm^ŽĢÃWŋ•­ßímqL6ŊĢâ:¯@ˆ8˛Ûow Ķˇžj_Ū‡ũ _ßėčwę  ”m}„Đ{Ųã—SJ˙’røūš!é†íĨJˆi5Ô"Rgjũ>÷!ĀođđÁ5këÛ˙@Ësä9‡ÚAŗ͗,úēŨ^í†Á°Â^ŸĨîÕÚĩ{AęąÄz@Ä5d.ģēú{nÛb›ŋž¸6Ô_ž…ÕéŪ¯oúė1Øiģ^˙Žßĩų Ĩô‰<7ŗĀA­§ÛnžŊoûp™õođBĮčfđÁļ"ģ{^áš~×îŪ×]™‰ŨítČ(Žo˙éĢĢÚŋõúíģ[1˙‡ūIō) :÷ūÕÄīw{ûHWëaŋÖéØL}ü‡ lūšļŌyģ{0‰p9Ģė(j¸‰"˙zø"ckí]ÜĮW‹Oä2ūīk˙Ú[čzamÛA÷Z!¯ē^ÁZãūÚ[ÂÂļÛ+?Nâ@đôû~ŪĢŋņŌ\Š"xíŊīēŧ2?ú_‚_õm‚ž&ą{mĶ˙%1°<HāŽûĮôŋđ¯¯uļķ\ŸųÁ“ģ˙`ŋ% á9ôé>é[¸M#ŠúÂ{āņ…ų ‡ĢäĢvô˙ ŅV<§MáÁļÕr_8†šĀõŋzŋĻģëâĢä(•ƒ ‡N˙ƒ0ƒ0na>ŋwtēd€Ë÷ä2ú¯¯°mÂi÷ÆĐõü<úßdĮ% ˇē˙|+đØvŪRā¨á&ûaģtąÖī˙ūũíûü ‚\÷Û×ßM.öÛŪŨú­íÂqęˆ WwîīöÃáãũŲ Äņŋļíáĸcû.†Ŧ?”^÷˙ƒ¯ü=ßāÃaÂt8! {r*BüwīgM˙ūāîî÷Iė6úWL'~?ž¯ßWūė÷gO˙íˇų ß0ä ÁÂëÚwvą™ß˙í÷÷äš˙öŨxŠß ÃÛŋ3Goģ~˙Û}üÎö–ŋ\6ĮUÕö,;ēnʒ1 MôR-ä(¨w ūß;ĩ°ņīŊaģi"†S„GW”ķOŊŋŠ­vũ}!íŨˇuØ}ŋđØmą”€xj˜ŲŦī÷öÛÚo"đHGd˛7ũŸžÃņvßõÃ`ܧÁXh_ĢßģīÛ˙Vīļ˙7ßũģl2û“ŽHŋõ˙‡Ųš ēˇ~ûöÛ†}A×ŪŽ˙߈„wëo÷ģŨ’Žčm¨}ö˜nĐëJ•ˇŨŨ´äa­ßÕoúŠM˙o• ÁÃcĻqoÜ=~GÉ@sĐ_ũU÷Ūņ h%­ū6Û!…õ‹ÆûĻgЈ„Päų„+˙K{|äk ÷aƒdtŸ}.AƒŪV™$ī˙ŪEôŋ!HĀFAĩ íŨū‰ä…wwų*ŒHn˙{†Ãk—̞Īw#a›dõ_ũ īˇx[QA ī˙ŨžāŦ G ūé;t˙}5ōPģéčeŅŌúūģû‚Bĩ tŨX`Û x˙ĩøûúHÂúKÛw ĖŅ,0’ЧÛ]°ĖĀösũŽîÛŨČ…[Ũūû{iŧ!Â˙kļņ˙điWûĘOu˙´žÛubFÃ+ow§†NAØWŋ°öęÛš´M@ÉúĢ­ûnĶ…˙Ã\o˙÷øWļ Ōõ˙ûŨ܁"āÕßãļÁŋ˙ũŌÆÃ Ÿ~×#qˆø'ũˇp°…~úØaƒģõëßa‘mļ/ô#ëöíŦŒ ŋđĘrnj:ƒ ŋëSk¤MÃöØŽ˙ŋī¸KüDCiC'aŨ÷î›_t7ok÷Ų ęAíŊÜ%Ú˙m˙ĶXÜ4õÚŋ}ęPNŨ˛ a†p /ˇž _˙ņûŠ=Úíņī¸v“wwĢnĶŨûKh0‰™!Ûn×ĩ]Ũ°ÃjöŊäk`ÉpSũ.ĐūÛÚo_Ĩí˛âÃb›˙I;˙ũ„ē_îí?zö0ÛWŋj ˙īcČ û{męûíĶ{d ī ~ö¤%’āĢOčũcũÜ5ūU"ãdĄoģģŨūĢaÃ]ôPî×[aāÂoņÄ~ôŪĢßpa˙Úđ…č[mA7mvÅîí¯jŦČ“÷ņāÂŦ>Ę ÷ũ=ģ°›[Xtƒ_÷ 6q܌wBGQLõ}W ÛMŋëĸ 7Ž˙!īę-ÆŅ9†ŋÚ÷¸aŗåŪ÷årÂų¨=ätökۃ!ĒGĢÚ÷¸a!B˙ŌĖĖFŨÜWƒô‰ PfũvŪK$>ū×LšĀĮãö 7L2AĩkŨ´Â„X_#ëĄgāi§wãčø;?Ø[ũˇƒX‡žâÁ „FמÛēb"Ŗ¯i{mēūÔû/‘ô‡ßļܸlT×ĩ#[ÛxdÁÆēmˆÎĮūôÛ _ũööáȸ[ˇ¸É5Á›˜iˇúE@^ÛÉĮ" îîÉ0:Âßč[wˇöĄ{zL{øeŌ s ¨ũøOrTëû[áÛGôũx˛Á“˙Ép9‚ĶŌīõîŨģ!­ņ+6¯÷nkáũö?mÂūÚhá^œí_Ét‡L û^ßģ„Č%˙ Nši˙ †đE85õí*íļ!„ûģ*€x5ͰÍeŊđƒmи?ŪÁ,ĄÃēŋ"Āx+¤0ßũ ˇNîū×16Ūų „@đhrãČƒn›Ouˇ §Kˇj„vÃÍRe×úa<3Ö˙ä¸[ˇ a˙ĩ>-ˇÚöhƒs0ŅŌHNŨ4 Û}={†™w¸ wϞrƒqÂfwÔ0ūø(6éÃīäáģ§aū „w¨2jŨîx€ÍnũxdvyŨēi÷šķŅ0 ;ä… r„û^ %íŊ4;ø´;mŖÁ;ôŠđi§ô푏ĩâ¨;ÚëdP2r8C*ØÕ÷Ķŋ#Ė7žÍw 6ë!–Wėåļ;ų Ģ xl: íāŒq[đC‡ažž#†ÃuC¸,¸īėĖ*Ŋöx aŧ<1÷$ŒDp6†_nČe:°A<'ō0bĖ?ÛĶ Õؘd‘eÈ?nŠˆ4Öû s/ö;aąX! x9‡‹O hxßá›ÁĢĘ}Ũķ÷…ˇtČņxŧN‚čžG ]ļ˙Ií&ÅŽĻ %‚r’ˆˆ< Įšƒ|EÕí†Úԁá¨?ŊŽđ[ܧ €g#‚Ãf={ąŌ xlëû o xl †@kfDåéxmĩ)">` ×˙N; ąTh™'z[v23#áĩũŋ~ˇ 2 ĩ‹kĨƒm°„āœw7}+wûāۂūāÜÆ_.†Áũ?ŋAlŸl0Čd‡ē(]†Øˆ˙JAéuh†H[‘Ôģ ˛V9Ūūī ûmČOŋŲ˛ė¸d‚ųôlbĶ"đōˇå˙ôˇ †AŽl1ŋ(מ"C đãžhD>tNëm˛YĘÖ5ŊéũŽÃ°B=īĄVHRCÚÉ đŠĄ:Jl>ü6à xhâ ÷ßīđö˙öĩÃK!cĄōSa˛Ûkƒlûô“wÃØd'<5Ãßú ~: x49!Čh;’¸Uŋėd‚ÖŊōœ  blābģ˙ĩŪ™@ Æ':>r ß÷û˜@ô5ŌßŪ ļŋūqë~÷ūĻ˙Øm­ëûŪž@ņGm˛‚ę?øŋø#ŽAw Ŋ•°ŋ¤Û˙ļ–Čč˙ôŸÛŃ Ä6í{Đ ÖÃĖÃA°˙˙˙˙ÃwŋúŽû`˙ūäw[t@š ¯~A§ ’Ŋŋ˙û˙aĨąw˙I­Ü7wīč0—‘ 4K îš~ÕP{˙˙ß˙\;ûû $)˛qŸĪũč}4LsÁ`4=ŨM‰˙[û˙˙ŋŪ°Ã´˙áĨŋƒmÛīú[Bšc‚´O×n¨í˙Û˙˙ũ'đÁ÷÷äcûvž˙Ĩŋ’?nMĨū˙÷^ŋö– ŽĩHoØo_ũvqˇŪļĒ˙˙˙é_˙pjĮˇ^ūī]`Ęŋũõ› ⊎˙˙īÕ˙ųH|C#ÁÆŧ?˙í/oæÁŋßíëöü¨nōOÃDãāÁB(~ī¤%>ũę×ö='ū÷oŊßû˙ņ)ęEžšk´#ū;ūFĢŨ˙˙~ũußß˙ŸmŋĶ]z$Õ˙^¯û˙˙cæŋ˙˙d|;ßü3ŦLJ¯ų/ô§˙õũô›××īÆúúė4">˙r @ wÛ]“Ÿ˙˙ūõūÛėŸūü2ú xh hņuü-ã˙o˙ū×Ų;<Į+6žúƒëīŠ@ƒI:˙˙Ōˇ‡˙m-ívüo¯ĩëg˙Pļ˙˙ũŋ˙ŋãęļP ī÷>÷´Âž ūNˆé˙īũü76Gęâ8nž˙ ãėø3Zú_čĀ>˙˙˙ˆÚöh*Ŧ2kčytf ?áä1ŋŽû˙ĩˆˆėžž¤Ãj-íw ĀæôNŸũūÚûäiîčGtČá™˙gId b{ŊBôl˙˙Ú]îŊ2āmIPjߊ8Āßŋ ˙×˙lĸ6˙Ļ„Y. ŨøLŦ2@*ø|øÃž˙Ķ&?kOH@ fŅ!īĄŨ~ū—äČDũ[^AøC*ĮäA`$ 5­>/ūßņ ]Ēh4â@” Ŗ5a đ‡†|ũ˙öĮ }øeÃDDvŸ`iH>¯ûˆ÷Š„ˆä Adũ{#Ĩ˛Luŗ ÁˇūÕōtl Ąî#5Huî|`ÉČ.=í4´2A\¸CZ>ķųˆāLyP!#Ol./ņaÉ ŸN›ˆŽÁū?^$2CšČ ä͐5  ›×[‰ UŒBž+XėųĢä`Ī‚Ų \0ÖÂyhjO!43lŽMIt!¤œ„ ~CYÁ?íbČų}ĸ s vˆd‚­Ļž|6 MūĐâ;‰ k‰oĻ$2At_ƒ{o¯ÖC$6üĒ × r@ČŠũĖ_Ž×ū Ø" ×`†›t@äNí‘ōčđ Bī˙õd|/h†H°BV—¤@šniڈēŋī˙âČčŽ/ä2e:ķaÛj@š„$_>YĀģĨžŋōÄu!˛d`v”Ø7ŋ&‚T|°M´Fûĩ÷úŋč/Ļ]œļü0…Oā›Ļ˙ŋ˙ü~‡R¨éÍŖĀßũä `qe×I&Ōûô˙˙ũ“Č6šÃN9NmŅ…˙úQz̈́}SĢ˙Ö×ëūAlŖČų€9ˇ Î9öQĘt=!˙û}úMúß˙ŋ_˙ņ: `N †‘vGÁqEŽXæ†Đû:á„"ū›˙Ũffô÷×˙˙Į˙nôũT!< #†Q÷ˆ’|œMúŪ­ûíų°žci}˙ßûí˜uįŋoMV<'5…#†â›G€˜ų"žDOíZī˙ˇ˙ë×_ß˙ÔCú˙kŪļžšÄč\ €ÕąÎœ‹­Ū  ׯßGÖßŋõŽ>‚õÂģ^ún”ĀGVC7ĘūĶģ¤ w!˜rsņËō7)ĖųPWĸwxá˙˙ö)˙ūßûŲ‡ ĘGÛŅęéāã7EâáM–pWū˜@âãD Č莉 ´2ä CTfŗ?÷˙ūßūģé¯˙d+Äú†˙îôa˙ˆŠ@ôyīNž"aōĸ:ķŅu§˙õ˙Ö˙˙o˙ødŅAr}˙×o¤Ã~ÕķbHbd"÷ä aĶį@t!Ŋŋ˙î˙ ëö¯û~ˇüwBûũõ˙úž×Ķá;Ė€÷\  '˛>GÎD~ÍÅÁ€ƒ{wßī˙­×ûOÚUûÔâ1ÁŧöŌ˙˙mtoęūŊļ–Ÿˆ¸Ž5˙×˙ũėWé_ŦCöxģūqÃ:|´5˙íz˙$:˙W˙Ģíū@Ė ßß˙ũ˙˙æb˙ũúbø›Đũ˙T¯î?ã˙ūŋ¯ēŋä Ã;HYĸ˙÷Ūßģˇe9T†‚ŪēPÁđH&û¯ĻīûëĢ÷Uī}÷īë˙Õ×˙ûž›ŋøGéW˙Û˙˙˙ëŌÕ˙˙˙×˙ûō `Ž˙U E_ûú_ũpBPīĨ˙@’|ú#ë˙ûßģęßŌ˙˙˙˙˙Ũ[ŪÚ¤ß˙ŪoūŊŗņņ÷öüˇ˙˙}6†¨˙ũ¤ģŋđũ+é˙ö× ļvŨw_÷_ßÛû¯:÷­ķĘ˙˙ûãõû¯˙˙SÕ˙˙˙˙×û˙o˙˙÷īĢč6ß÷ūũY˙_ī˙˙ũū¯˙˙ųņ|ē~ũę˙˙˙÷˙ßôũ;~Üz¨ékē_˙ú˙˙¯˙üzˇ˙õũŌīôßÛûüā_˙nû˙ū˙˙Åu˙˙˙˙˙˙ĐÛö˙ú]ĩī˙tĶzˇ˙~CīßĘ%ĶoúÔŅ›á.×ß˙ëm/ŋôąĻßūÁvīĢ˙˙ö˙öôŋõ˙ŋ ÃĮĶúMüūŋ˙ÚÚ[˙ˇé7v˙ ūūž˙˙Ũ˙´l;û˙včƒũkĩ¯˙Ĩß×˙ũ?Ũ˙ގ×ņ<ôģ˙ûŪũ×÷Ãú_˙îÚõ÷]7˙°[ūß˙>BÚ_˙ũÍb˙oÖīëû˙Žû!Ŧ>÷ˇŋ˙ü2‡^lũ¯ūl˙ū¯˙š„˙Ūũ}ūßëūūßũûa?ö˙oûۈ×מ˙ūlUˇéũÁĶüĪ˙úūŊ˙˙éPŋ˙Ú_ü-÷˙ˆë˙˙ų:z}˙˙ž–ą}´ČčCügÅúú˙˙˙˜ōíWúMļēŋTëú{Ū˙˙ūŒŋßĢI˙ãŨžƒ/Āäëzâ7õđßũ˙ëEŽ×ũīõüØlû˙ū÷˙ßmĢ~ßvÕS5‹×õ˙īʅ˙ˇëũßí-[ūũŊšÕ˙ö¯××nŌŌīúq!kFÄ#§ëá˙uū#¯Ū>˙˙bē~÷˙Ŗî˙ĶÛû˙¤Ũö=íi›B=Їōtl+÷˙ã×ū—ū¯ģˇŽŸ˙¯tŋ"Īlöéø˙Ļą_õ ˙˙Ûūŋũūžī˙˙ôßik'_ë}ĩá´ÕÂhGiûí?öŊˇ˙ßú]6ׯöŊīõļŊą´:˙ôÉÃĄūŊõ_ÛŪĄK˙˙ūĩūūģž÷k°ÁwšfÂô¯ëŲā[C˙ūģ_ūú_ô˙‘ĶíŽ?Ũöū¯ģ ´Ë0k%ĪĩN$2CHsqĮ ˙í¯ũkīõ×˙Įũú˙k÷üˆSB1Ží4$2A¤rÂč„YũūŌ˙Û¯ũzûũ˙ŋûũûŪÚüD†Hjֆˇ\—?ˇ˙ė5˙˙ūū/čņVũęīĶ&=đˆ`y¨!˜}Ē÷§Å}•Åx"q9P–˙ŨWíüĐąųĮ@…‡ŋĢžäiũœ@ !!ÎåqXæŅøĀ_Ķ=-öž"ČÆ|{{§öé˙6 ˙§×íĨû§â28dƒa|č(‹ö|lCŠMÕ -5ĩīėW{’÷ o˙ũ?ūŊĩÛ˙q! Îä1]ÚĖŊvˆ‹.áŠõ˙˙ŪKŒÎü=ŋîi˜_˙ž?wfô"č+߯ ëę"2āx`-ß˙äš˙}~Ŋęõö")û(Dy#‚=/û|DDD‚xv°×ũ˙Ķ˙üß}Ø_{§ŋŋÕDDC.0šũ˙˙nžĖåųFĶN3‚ŋz~“ūēĻŋũ´ž"üDaĨ}WÛēˆ˙Ø_ēĸY ûû×üz˙ögūˆ.æHdPäãK˙õ˙U r‚ŽCšÁ˙ū+y d!p.?ŋŋŌ˙øģ Ņ„ …‡r ŗ˙öąšrc„u˙˙˙zĩĶO29ĻDrƒ!ŦäŖ˙Ã0C 6āį­a?˙Į§ęfoĶÔ&¸ƒ!‹A”‚œ‡"ųvBqĘlÁÚ¸‰ €Ę}œ˙ũë˙§0ķ‚ŋģøĐČáA0„LÁ\¸ÃoÅūC !ƒßĖÅĶ˙ëõ˙~ßh/Yąhá9BŽ’Ūƒ „/øhHdhÂ.ĢÍĸ>lĀ#§÷˙Ō˙‹īF§ę› y°ģdr<_í…ūk /Oņĩģ˙ôŋßWIŊ$›IéĩC0ü 0mŅvŅÄ]ŋŲpČ“āA°Æmŋũ_˙ĶŽŋ9ģúû]'ĻÕ´oIĩæÁē„!ģņ!a‘+NHŠ ˙˙˙dĮ_§¯ŋé.Ō˙ôŸzÛ ÚXČžNō,iŋũë˙ūÂûë÷˙~õ÷¯ëž@Đ ôN÷Iß÷ßĩ͊˙˙Ĩ_IŨz˙û[õ™ŧØZ÷úŋüöë÷˙ŊŽžˇ˙˙˙¯Č㐎š8&›˜ūß÷˙˙ģÎ`ŋo~ŧm%ŋ˙ë˙ō`ڀˇ8'‡_ëß˙˙éčõÕŋ_~ú˙īōaĸĐ=(W ûû˙ū˙˙Ģ˙oKK^ģūüũ¯ ļ NĢé6­˙ũzûú¯Ū˙˙^ū¯úM×˙ãäæ=ķb=%˙ņߎ˙ßû˙nhŋũ0˙§×˙׋֟û¯û˙ū˙˙ļ˙Ū?ß[¯[˙˙û[A7Âû˙ûUí&hûoũ^ų ?˙ũ™†:˙ūģüŌ}¯§û_ˇ˙ę˧˙úŋ÷÷×ŎÚ_˙ũüĀ^Œ^˙ŦuIũ߲‡8áE‘ķÁŸ˙û×ûĖé_†øg#÷Öô˜e?í˙úXû÷úÃ8įˇˆŠÁ˙ūAŨīív÷ÕžyCPüUeAĪzQũ˙{ū—ögˆŽ†T?Ú{ÖõûôØ1OŦFŠá ?Û˙kI˙Âß˙÷wpŊ÷Ķô˙îũží6×ŧ„õBŋí˙˙^ßū­îˇÂIŋũß­ŊŌÛ­úf Ķ˙×ûÁ•O×Ũ˙˙ü‚šø_ũû{M†*ŌāĘĩÛŲ@€¯˙ˇũÅū÷˙ūŋíú[˙‹u HŖŠ÷Â(mwõ˙é­ŋôŋâČw8>Ū˙ëØV=­Įų°GĀũ˙˙˙ŋū÷ØwŽ˙˙røÚpĐhßOr˙1—§˙˙úßø0˙Áūŋ[kģR†„¯žīČbŌu˙õ}WšĘ߆â?Ū÷öOļfP/ũ×ū×ō~˙ąīĢęÛžũČa˙ģöpqZũëoũ[ûīũȃúŌˇíû˙˙ũŅ Xˇ¯úö˙˙žŊ} ßšëéúųô`ßßūé'é}ˇ[ëi×˙ˇüØ}˙ßú0˙ūá…MãŊĢ_m&×˙nĢŋßūÛŋ˙˙éļN¸ō\ëßÚ[ūéöģˇßīä1}ú_ßSPOĩwÚũvÚDūõ ÖCXö˙o}smÃ˙ĩîûÍ?§ī ėi˙˙wŨÅôΰ„C#‚„ĶTí5ũņ]ĘqmĪäy_˙í¯ūÃĒ’ÜDDH0;B 5×[õ Ũ؊˙íČa˙˙˙æŦ&„DEϚöŋú˙ŅčŽ]}éŌßúö`Á˜Ž4ĖEÅMUđC}áģĢ]†žDDDDDD0YÃģīÖú°×ûÄq˙ūíĩŪš˙_ū ôjß ˙m×lST"?˙kļōų#Ņ!!…_Û]ļ}ĄÉ0A§‡ NČ.äpqĪB˙_S6ŧD†@iš3Ŗ/HSM8ˆa \5Kåâ:#‚åÁŦŽĮÖČ#÷ģĩގöšv„E”č2đ¨!129ũ…‹}čFāĻzGö“Õ B0„0_Žú ČQČaČxČ/‰øMųš›é÷ø¸Č K" Ą×›ĒŊ*æ~f+ ŧxĪŗ¨Rá“Ä8¨]Ĩļûž “zS`‘a#ˆ úōpɋ†zīĒßõõˇĐƒz\¸dš G|â#•ëŋô—˙o[ôˇņŋečAõ˙kÛ˙ūĒūúĶōh(aūüu˙˙_ëŌŅB˙ũu~ĩ˙ŋ_˙ķaëjŋé×ũã¯ūĢĶ˙˙˙I/˙×ûõk&÷ũ:vûz˙û_ÜuĮ˙ëK˙˙ū—īë_üu˙ŋū–Ģ˙_˙˙˙O˙îŋ^ŋ˙ëū/ūŪ•ôŊ/õũ-˙˙]×˙ˇũzųí˙ëk˙¯ßŋúũ?ũqzī˙˙ũĨôŲ Y ˙h/‹ßũâä5Ȥįr&ŸúķÉÁœúß˙üWö@Č š!Ú˙Đn+˙ûÖ{r[î@ļ ī}‘˙ŋO[Î?˙Ŋ<Đ2ūß͂Á˙˙đžŋúún`˙Tęß˙÷6 UØ˙÷¯ŋé7ß˙īū˙˙īˇ˙˙˙í˙ŋ~÷žCÚ˙Ĩ%1ō1˙K˙û Ž?_˙÷î÷˙v8'˙÷˙ޝ÷í˙÷kģ˙ų >ßo}ūö˙÷{Äũ>˙˙˙÷ũn˙§˙˙˙Čaö˙˙ ņßŨ$˙¤ûī_ú˙˙ŋļŽŨ­o¸aĶīû~ŋyÁ˙˙í{˙öãēÛKa˙īûũÛodŨŠû_ø`“`—^õū^õˇĘOīû”‚ g‹-ÂĶ}ļŊ˙˙ũęXëߐÉ~8؎īN[ũúî•?́˙÷Ų?jÚۈe'ŽÛ|@eNŋíí6žĒŋVˇöûíƒ ø÷đĖåž“ˆâ$68´ūÖ;†)†’$ WŋŪÄy/[lD\ƒ]Î;[}…!ĩĐūũJ\DG††Za Ũs@]ôØņąS¨{ĨĖ{#Ÿ÷fhīū-ë˛zČā04c˙ƒ]œ˙Qãũ˙×üôGok Ŗī˙˙_˙õ˙ß˙¯W˙õ˙ö×˙ī˙¸2â_­ÉĮûĖC__éĢNĐ˙ąB#í4ΐ"#˙äE : įČd! 9Ã=Ø%‚ˆy+Áž|6<#0Îč}0Áß ?ČC*uō@Zƒúd#ÓtŋČnh^Íž ›ū@č(ä09ž¤ō0Ô ŋđ’hR6&Čš†Č0AœĐs×˙Ά„Ū…LÃ;˙‚ ōû M˜+& ×D ãč-z[\4ÁĖÁX„˙í&†ŌL.Į ŋÖü4#Â(Ž0tކíđDt,#áŖú@Å˙õčt Ė ?‚ĩņō°ÕÍû\¨˙ūŲPkŽUŸĒ^8Jf˂Ũ+ J ˛d Ŋá$…ŋõWÚõ„ ĘnīōÛ5äsaĐ ‚AGÚ˙6š4f7ÖíB ŋ_ōÄäG#€ƒĸ8(I˙ G$.û˙â ĶáwōnW A/ômié´Fƒ0Î×GWéÂh$đEGßä TpDCĐ0~yŊm Q73F4ūŽš>xYŌl 9ZĖÃ;@žĩŽØX!ę(/÷øđŲ0Ú˜hCHKĩà $l$‚˙_Žä ÃLĀX/í †(tK˙Ũ›28cũ„fā—Ū-(}…ÂA_íĨĐŲŋ ļ ,BŸ´ũuŦ†cˆ%äāã.9ü1JģÚŦøhh9Ŗ÷ë sņxŽ>žœC=‘!˙w­ŽÔ0J˙Pô“¯ˆˇ@ĨŖé*a˙ôp3˙ū\Ø/ o Ũę ´Aqā„Qĩ˙˙Ŋü%×A^ĸ  %§ä$/˙z0ŒĶ_×Âá^ÕX2c=ĐO~×öŖĖoú<\"‡˛c­ā=jxõęå÷ã˙ŋū<8‚‡‚ņ0äͧøQ&Áu̝ßŌ˙˙ëˆ%Ļ?Ö2 LŖ”į˙ž˙īõĮ˙ĘÂq ×õ‘4ˆŽŸ˙ũēûũ¨6 @đ˚ …qĘ$4}đˤ zKi˙ũë'd˜0­”8! Ú#æ28Ÿ ĩ ā-÷ũöžļ„0HE-DDkĐzßõ˙ļŊĶ|CG¸›ŧ‹iû¸"‡]k§˙lĪ뭄™'vjeÚŲ0Ha]É9cÚŋŋöA?ëä€ŅAfq1Ä_ņfaŸg˙[ߋ§Úėđ] ũ=) ģtAl0öŋ˙á…B7KÚ˙„ ÂG‘ôG°ÁčĮF?÷û5˜ˇ‚ ÷ ƒa›ˆé0B$2Chrņ{{ĻĢ^Ô¸ƒua/+ü0Čė˛Îâ"$2AĩXAĒ˙˙B>/ ÄPˆDh(ß­Íá5x¤Ú^d ˙ųtL˜i’éÁ?ûęāxKĩņ Üpdx)˜AŊ-dtKü%áét"#Lēa{̓}íūxH‚ û# Â a8@…†—õöž@ęG ģČ6~-Ž"í¯üƒŨy¨?é„éu:%[ ×>?ŋēûō@Ôāą‚_6LBfHE÷˙˙Ž'H‚Aƒ ‰ +õ<{^˙RC‚#­…ūÎŦ3g0ŒŅpįÃ%qOŋúĄūC(r1â„( CŋXĩ¯ū‚5ę"ÃAl´+4Ŧx_ú0éĪ-\CØ ¨2 2A˜ŽÍĻ]i/ßPŪĸNk„„6PébC$Ղ qá/˙úūŦY §3”DŠ‚ØhÖl¯ÕvõRoBs0ĐÔ":Ááū´s˙0DAl´i‘ҀށšÅÁũ×đ“īäHC$ <ƒHˆB!ā­']…Ūá L¯_ö„†H6yU‚0`­„ŋ  îŌü0AÉō˙ō0Á°XGA˙ú/‘ ū@–ājŋâC$(ä,0‡äõ!’<%öĶū@– Âë˙[åŖ@!ŽÖ: ôl[ø@đn;Ö×û*3ĒÂ÷†ˆd‚­nWAēČßTo‚ČBœƒW ˆ‹Cä @ČōpZĨâ$2A¤GtâîŽŊ Zœāĸ@”vz8-øsVo/‚›A}×ā%‚ (r†Î ĢP…Z…đAˆ.đ—čJ@ö:8Ù˛ų´-S x(VAĻɎXú œ˙4ß,0ázū ~  *" ĐB$Ļ@đÂL!Č0ģČA—§QK’ŌČC“ ŅN’tŋŊ'û@’Ģė(6@ōCN°˜Lá‚dИĖ&#Zč/ f Đĩ˙ú„Ĩø$/đ0đĄ†vŒŽ0аN2„Đî[áA×AxA„tG Đn™_¤Qũ]Đ"yÛé6@aĪphŌ<Ą˛‡!ŠŠ ›ä G_‚(w y°T æaŸ4ä ĄÂ†A ^ CŦáH ađÕē ČāãĩČƒ3–GāŖû[­QÄ`”:(  ĀjˇŨzū@đÄČmÍ`˙oøh3 +6…ČŪ^.a— jöR€XZZ`ŠpÍĻ 1‚.ž—<01.ĘT˙ūéKĻށĢė!>`ĸ@Ô+˜„!õúŽCô‚ ’7dQÁBčâ*ī˙ü°âŧāÔ: á5o k$øháxXRcķFōīũŋČāî"?]!Zo˙ü÷ãaáB32í0đƒWGē䋄š!æÂ`¯ŪÂI{=—ƒé|y ގßû.’ގ÷JˆoEĀG@΁á…Ĩ ×“æÂ ‚öÂP˙Ō_a† 2ˆ‘Ų /î'@[K˙ŦE˙|á¨˙Ŗˆ+ȂޑāŅ+]†\GuÖđˆë„ Á‡ˆ‹ūC*Ÿ˙ūøž>ŽĒ Áä ȏu"SKIÂÄđaÂßīß×°•īĮ#l/˙ũuũ _‹$˙ü/˙ĮĮP˙˛€[§˙ú˙˙ų°ÛÑ<¨EZ6ŠŋŅë˙­ú[ÛīqäĀ#‚Ø6˙ŋë×đŽ:úĄ3‹ācúü(0EÖũ˙náĩGFĀĖ'˙đ@Ŋ/×B?é}hyĮ˙ũpAŋøaDRŋ__ęāׄ}ōāxWÁhDāi— €R˙Ūü @ŋ]ú† ˙­–ü|†H(ƒŽˆ7úĨ¤8Q{˙¯ŌũûKŋcôŊm?$訟!’dé†˙ŧ"Č !˙×AxpA~CŋČødĒ˙īÔAÁh— #ų €j§0@­vÂK‚ėÖ B?¤Ū/tģ ~;„íň/\Pū/dpFļúY €Ī8š‚0Úīa†H<3{­Âúä%´sV ļO{ãւđ”C‹ŦN â t4Â3 īü6E€JŸorCāÖÂ^Ą/CÃ`ĸĄœGl0ú  „ā¸9@hhÁ: _˙ ŲD˙ŋŽ1u VáH?Ü ĄĢˆ‚_ōƒOøGēƒ‚‚ ü"4 CōããŪ zK‚#Ŗ‰]C!\ĄÂĖ ˆ-‚p&¯ū/…š§]r”O†‚é‚WáWRCāß ž n([8āąˆĻ3 Ž+úü%áéB…HX?ŧā˛‰B.ЋĮįŗ Ö x-YļF€Ė´"čØwßáôļĮ@´ Đ+˙"yč@đĘĐĄįÁEVøB÷ _ Ŋˆ"œ×/¤¨tÚ˙„ŧ X`ė$ā‚ė/e„ xg44E28F9Â˙íøKđ•áĄG0gh?ūđz aÃ]˙Ū°ƒf0 šÄC^úĨūؿɀ4 8K˙"øAxKŽÔ†ŖĩËívē‰Đؐŗ[ Žë ˛ `ˆũĐ/Ö(G_Û¤|3>‚ōŋũrė;wĮíŽ;ƒa,‚Ų8Oü EĨŲ Ô@…Ã7ˆN!’s˙_X_FĀđ˙DÔK˙Ih{ũ‡VC$Œ`č."ČlÕ @d‚ŋØ ŋŌđŋÚ ėxDAA˙ō^ä2@Ŋ„ú<y|H-ü˙ūŨëų ”, „ˆ‚†Wŋņ ‘Ņ2C,4}› ˙Ž×d °U„Pfō˙˙đÁ‚ĄũōWų Q4 ø"‡X¯˙VGHET_˙בķ’ ¤p<´f˙û#ĻHtĄŨ!ô˜0@I˙‚_‚Cm† ˙Ś#Āļh}ę‘mQ!Č‚Đo˙"†tĪ˙ Ē rˇēĢzDŸŧEP&Úą¨‚Øj”č ßū &#ûē ëéø/O‚>†§˙r`n0/āÁ­<8Š ļ8Tŋö˜A‚ø3;Žhë˙č$30Û˙úūën帴Anœ¤EĐ%_ņƒqČ5AÆ|HĖđ0Đ+l$“ũdG[Aw˙æ‹˙՛ŽEA‘Ņ€.•oņø†Š ˆņ¸Ž[ ܁}`’6‚´†`˙uâ˙Ķh(‹ ļVIÁDPKˇē‰!đ`ĸ"CE<Á‚#ü.9Ë(ŽÕē†QDÃQ€PJql(ŗá‚8*0ļ…†w=.øHĄx0ë!’ŖHˆ) lĀeCÁ'× 0ĸ"3ėžaDp‡ŧb'’ī܂Čé^AžÂŲ1ËN$2,pMÖˆhA4$ÄŌ^û5YpȰAÅ~ŦA —ØXŠ!’ °d#¯glō|ކĨwū&œE‘ķ|ŽEõΨÛ.`ÕVĐ$D‚Ŗ`Č`8" ŌP‡¤ Ęĩ„$Y‚ ŋļb""lŧG0hø$Gƒ5p@ʄˆdķ0a} (ôô /×a<2܂¸â"?Ŗaļė+8 „ Đø ”#¨_āo¯Îdsad žCLGā¤XI°@Ą”į šÃ០ŒáŸũP]…úŅĀÁhg[ xeų Ŗ”įâė‹Z!Aĩˆ„C$k@ū 2pTm īzY ü4XhĖ40T Pˆ‹ { ¸ ĐåY ÉĄĸ!Ža Û‚Ēa˙¯g‚œãšŋíSŦãą ēe9 ũ(R † H<ô@Đ7đU_ũ+ˆˆŸOū°@ˆf~ ,Ä6)ŧāÂZ< Y[ž šoŪ Ä!G@œ~ü(Mûŋāļƒ˙aoõŧDjNNy%""GĩPddGH†IxGÃCØf>ø" a¯Į°¤4“<ŋ˙ÁpgL/ Đ;úƒäĨ}#á 1 bdį Āŋ đ*ČlƒāˆČBi0ÁČ6zĢ˙#ē\D|_Wđč7„ ēYš0ČänC$:ģ]ešH—Đ@ßŨhdÄų ˜á?ē˙ü,ÃI`ÁĐ.„DS Š×öA¤t2 ŌŦKËüũeĐ/°@đąX*wA÷îø.†Ķ…ķS=ƒ„FaĸšĐ)Cnx‹ņ}Ü0Á/˙×Đ_Ž†€ÁˆäÃ#†Hk: øŪEO¸Uˉôo\˙öŋë˙‚ ՗Oūƒ#ˆ\2@œø`´`ĮōÉہBlƒ~Í|ĀÍOąé_~×ē7ûʁ‘à ā—˙ôũd6āĖØƒg/ô ¤ŧ†Hj˙É ŖÁ˜Ųy˙ œ7áP˙ø@ąđ‚Č1Ũ üDĮ˙Đ/ÆŅˇŨ¨:뤧Ã3á!Úü ŋ]< ˙đ‚ Z¸+â! ŦēlĀ5C\%áī¨û´ûøx)ąHûô5­pIB^—ä2CdĖ:>ÁŽ:D3PŦē ˙ Ր˙d†ūÃÅūhõ×˙Čd…šA†}APĝPŋđQ˙ÛKoéŪ˙ø[“Ŗbō$j @đŅT‡ũ/ū=ŋ›˙ŌĐ\0Š°É h_!ëéĨ]+ĮÁqÁr-…ŋ‚ ˙`ŋ⁃˙IUâé_AŖ<Ž Đ˙u_į@[MøK˙ č¤2AĖ¯ũ~ŧ ‚ ^PŨW‚CôÍ aƒú Ņ}x@ŋö`Áqõ˙ū‘Ã_ŅĀ<(} ŪKĸ@Ą¤ á!#đŨķĐYT~АÉÁ˙˙˙č*CÂ’^@đßDp3´ ÷ÂA 7ņü ´.¯dp[áĘ2ųƒ3ģ˙˙ā‚Ķéƒ!’AÜķZĶ aqđT ˙˙ }xŦˆūŋûāĨpaY ã ~Ōuüƒ†@đĐ $ß˙áÜ%ë_˙ūéhcâ|Ų—\˜Ŋ+,&/ ĩŸ÷kƒ3 a˙ūē‚"20d2A@įđ’ø‡ ß+@ė%Úu˙ū B˙ŋ˙ÔāŅë-¯íĨúÄÕH 3@ŋA:ū—+˙˙Cų iģūũz’;pKØa,‚Øīô-‚ ļ T?ũ…ū˙AB@đm#†ë?˙ēÁíāÁŽū°d"D2AaĪ@ššy iRž/˙ .А€f ûŊ°H ™đĖ@đjô˛ģ0L†Hi`OŋėD†H4ŽaĖįķԜ9ˇ¯KĢ\†e E?Žū˙ÁŖ„%ŪĒPņ —Đ) !×ūɎB9ƒŦ!‚D,Á“–Õ‘ĐaāÁ!õ˙ Eœr åĄĘÚō 4ā/čá”ū&‚Cūâ"Æ*g‘ÁüaÆ]E†˙¯ņ„#˙réœ:ā!ø+#Ŗč¸-zä0˙ҰQäėņ4‹ÄpÕB ×Ũ"x4ŅĪÚø@ŧƒ˙˙Ägp‚û Ø#āģ"š0Ä28-‹˙ō6 y áĐB!†^BA9Ķ:âb<:0Čæ…û˙âôŋPl,DŠO×ų8-†réĄ\%Ųj9 M&đQb"˙˙ëōp`hēPČzŲ.˙Ú†Đ;zŋ°ƒÄE‘Ã`% āũĐ"‡!“˙]BsŽđLBSæĖ ?øĒ< û˙b,‚)Ã]ƌūf;iNūɎē XKđH0„HŖžúš°iÔú- O$}ˆēÄk°k×Ä~' š{Ķ ! Ëeö¯ÉĖ `pBÔ‡áWo jeÚkXæ`\/ŋ č`˜K ¸äcž‚…ûa,Hdƒ 䓡ARūž†_â"-8=Ī?˙Ōų ˜ˆČdƒ/…û(‡  ä6l k˙õã˛2EdN_š7ū.…ƒ Ra}Š ĖĀđSƒūl&‹_6ūŋ îq˜pÉzûDÁ¸0Rįâū¸Ū@ô‚ƒqÄ0_°˙ÂZQE4°b@¸Īgƒ$ ƒPtŅËđ‚ß„Âd  Hä˙ūãH"C 6œ‹‹øÉ_8 Ãũr9‚´jO )\ x4¸‰W˙ũ՛fÃ'ŗwÕB°•á-ŧĩC­Há2†…38¸=˜sŽ?ŋā‹ĢCŨČ QČlĄUhōĸŽ ŒÃE}_´ ,—æÂ0ĄP0„Dd2 ˙ß㝄C$6ËĄAGō€Ŧa`ˆeúø _ŠČ4ĢŌláŧÔÕ á™ä2‡)GëĐįDQ ×šĀđmŋ4œĄČ, y§ ¤°¤€ÎՓƒšŸKŒ#0#:ft!d› Ž9cūé|EČÄGŒHm9đ<žä Áa;¨[˙ÁD Û'ØŋīôÜĖ45A ĶR˜åA‚7&?˙Â(z ž„t °Fwđœ%ž@ô;đŠÖ CöĪŽށ Aí đPCB",~({a!‘°Éđ!˜g}[ w@Æ| ĄČiš(J›aä4GøƒÛšÁ‚L ­SĐŋá¨3@ÎĖ<Đ2A§D õäÁ¨sœ#ėŽA?ŽAÜĐg]‚8á‚Č*vAũwū úš2 0`ˆëp„DHčØg †H7ōa=[â! €Ír”([Đ/û˙ū ëa÷菏lކĄ¯  ˙Č넄Uđŋķb•Ĩ~”„Ú É˙ƒ %˙ã÷…Ö‚ô P2B8Á*_Ō˙õ cér€ŅK ė5ūúķūŧ,†HŖ˜ôˆ Ž °g‘ōáڏ¯ū V–ØA%¸]‡üūģčå­Ė$ŪęÁ8Čē’pžˇŊŋđ`Ō oOūŋ˙ĄÕŅÆ ÁáDŗ D†@‚ø/ũŋöÁÁĨB†!Wø`ŋ¯KÂá˛!G<°|h5ĩō Ēúûށ>˛‡]đ…˙†~6 ŋũAúOƒÁņāˆd†×„F ÍΞՔ={ũøHt5ēō:˙§&đDt ¤˙ŌŖ0Νh˙˙ϟ"€§ĶĄõĐ(a?|<^ŋķ’ z\z‰OÂ˙û˙3ˊ\ā–ËĮƒgí ŋÂÄ4Ŋ/đŋâC 3Gā›ô<S 1ī˙˙Äpb?ᰗųÃ6ĪadŒđX Z^žŋy ‘ ˜Â„‚ĩJķbR„ Ē Ī˙˙¤@ŋ%ũ ›OßB:üt ‚($#˙B㠋…Č G˙˙„ ø8JHFŌ˙¨"vļ‚CÁ!ė ūũŽĢ<6…‚˙úíyû`Ö"§ ļ˙“ū ₝âõČžˆ)‰ŋĄūšäX÷_Úū@ņ`_aÔP4?øƒÕ…Đ/^HČāģ˙ÂhĖ6\> Ļ<—0ŧ0ŋÁ÷ {đtdŒŧGąŋö˙ ‚6 č[˙ÂĐ3āxcø%<4į<7Įēúũ2 Ŗ÷ AĻG 73 ˇū?đA. Ô'üYÉʙÅÕv˙íãĶ#ß˙ôˆmgVAā\hûú!„i%×A˛‡ũ-dÆŧ‚‰éx0ˆŋ÷ú§ŧEL ×ūMA” ôėb˙ Š`ēz×āAo{˙¯é*  Ÿ ˙ü EƒaÉ[ũm¯|*˙íũßá8IC0ŽŒF`EAƒō÷pHbjDęƒRûŽl# {‚æßØ ˙˙ōŽ Ã â#M„x3˙ųÄÂ-%×˙K˙A*˙ūžã†Lp´‘˙˙ Hdg˙ČOĻúˇ ‚šâ0§žC$5G Ú2ŋ üƒSą„(nĖ%ß÷øHH<ĂūBž˙ û˙j 0Y˙ŌI~ëõB†a[ Ø,r‡/Öņüāƒ˙„ „?ø0ū kų iôÁ÷û`D<2œŅ°Ę'ũļ—i•ëī˙˙|ëÂR*†ŧ‹˙ϧDruø0ÂÕ3ļ ė5ūŋ˙˙˙ūLŠ"ÜAyĘ  OYCĒÁŽžC$Ä=ĖėAÁŸÁ #$2ÜĖČāŸĮ˙Čd†¨ŌüPĄ„ŋúĮŧ8ˆáˆûČîČ.‚ī!’ ė˜ hÔč `Øhˁųôf2:ĒŨē Č0åŽå?ä‡*cÂ˙íxŠ˜d‚•Čdƒ+Ë‚bj"Úĩú]—Ā„ād†˜˙B ā“. /˙°@ąÃY`Ŧ¸dÁN ŽƒaGôž!°˙°„1 °?˙Áōb6N`Ž€{3 žĸC$RHaũkŃÖ ‚ˇ<ŦƒJ Á˙ōsY 2De¯!´\& ú8Ač)Ä#ĸ:ŧØF m@A„,ˇ x(ŋī¨eAĢĩá ûH * FaŊér€ØßūŅĀÎ4-2a?ū"a#Īߐ4ßFaž zŋęđ¤}˙î CŅĀĐa0ƒ x'˜2 (O õØ4ŦĖ3˙ O5 n¯˙^…Ŋ˙~Ô†ŒÃ=B 6jÄYNS<3†w%„ ˙ē[)Ál7Đ0Ęũ†@Ėf Áã­Ö°žīĶÛ§ é9ÂFŒĀ€Á&F@đ/čIÔĐUũ ą! 6¨āÃU[]%˙ļļĐ@Ú}„ž|3°g„>aĮš‹ƒIĸ!žŠé_îAlƒƒZp–,.­Ē_˙úV°ZW @ÚN"ŌTC$9X˙ †@,¨_õ2¤ęŸY× xf† *ūnˆĮ ÃāÛIĩ‚įÃ$6š˙ ÔÃԟõ•~žøõ<3„˛‡94 /!ŨaŅ˲†&ļ& PĄØ"!Ļ8.ûī&Ūˇ­°\:¸!ķku„ū†˙úÚÁéē1`~ģJ8Zōį{?›"8ARlŽP‚^ ĩâ´0a/˙˙~īuÔaũÖ  ČHF28ÜØ#æ`x9ęCcų0q5/âČâqÂĒä )˛ŒŽ d:˙JÉūēū˙ūŧīmq!c’ĀŒÃeGKE rg‹zä AÂŽØŽ@đŨʀ`…öęÅtā}WÕ5‚.‚_lƒXëÚš €Y'@ĖÄë„GJ: ^Î?ūdĘNā^ #ü3‚úßæŠ˙¸čTåҰĘßą< āĩū!2@‚ Đ÷účA.ûöÅ5†Hú˙kéøDtŋ } €ŅȈØ_Đ'ZÚō?ũ^˙t!÷úüũG¨-ŽáB3 õü%Ô`ØWĒ_Ö@đÖĶN Ą˙ö}Álŋā~ÃKaÂĐ ¯øGŸgä›ßũ{Ü_ IaŖŦ!˙ÁqũyđĖÄ 0‚@‚„ ũ}‘Ã$ô 1ũt ŋ /Á 6˙pQīÖŋĘl$ i¯‰ €/„ {đXHjģ#/øAa‡û˙áČčB×_˙\%_=Ī/دÂKƒ'ŒĖ vB_†ČG ˙X%˙Ą”:ęų0~Č˛+G„ĮßĐW{ø ^"úpš_¯ķ0ĪãŦ \_×Č ˛čaßúÂøkôŋ yŋ~Ȱnl2U˙˙H?3 Š.˙Aä˙úÁ`—á‘ÁlūާŅđĖā`Īh‚Ú˛˙öƒđ@ƒIĐ(-d€Īôŧ&ģú‚Ú č ͤ ¸‰  rc•ēĮüŠUõ@ˆeØ POOÚ ČČđ -äiØ_ x5fĻč _ÁF Ŧ$"!„ČdĐ˙ė?ü% T¸ ~‚^ƒ ?ä‡Áƒ aā DĖbü‚öÖ1@Ņ@/˙ß˙ô ´Á˙đÖ˙ x'e † iīč@đŲÃ?”œ0@SŸ ˙!+‰S˙ô đkõöčG×ɎKR†€q5đTā rŖ¸Tø$A¯AÃаĐ@Áø×ū Zi”8߂> ų€Ž †'ô-Zyę/ÁŌ›Ã7 [Ö@đæAl ŋ˙˙ôl!S×˙Ø/ũ„‘Áōų['Đ@–ˆ$Á ļ ÁĮ× nlÁ‘ĀĐ5ö•ú˙ø/˙øuëâH!ąĮ°‚ŗw6¤ĐÁ¯]ƒ!ĸ˜‰ ĀäWßôŸk˙ė ēOĶũŋKåĄ†ü4ĸ" ˙îÍeČ-†‡,sšø 2L0wũ×ëׄG€đ.`C ~ūß+č0ßĶ €Ņ Đ9ę˙‚؈NC$<¨DF ]zDŊ­6˙Á(ˆ4?ĸV`ŋ~×á7ÔĐ(‚ Ô `CE€÷˛…zŲ$2A¯ŽbB`Š× l?õ _×˙˙zņ𸂠#áŸ~,Ūc/Čāļ<Ö ßũ¯ã‚¯ęŽūCžŋũ/˙ōĮ x"spE8´¯øŧDDHd…ƒÂ3ᒠ^ųĨ×@Õëú˙Ä303đū¤pˆ`f ÁCI‘đĘļt  aļŽfø„ 3k57 Á [č˙˙ë˙üGÁÂ˙r l€Nģû‚b"†×"Žō ˙˙˙˙šÎ˙‚X%é28dƒ1Ʉ˙P„áˆ&'Ãūŋ_ü/ū?“đ3 ĪŋķP-‚ŗƒD0×â@đ^gsž ˆÔWanŸûü_ä‡ģ ;%ĀĖ6˙_‰ hr„CĖÃ;˙pˆę"-8ƒlT3Į‡„ ­˙˙ú>ĒĐXČ"ŸŊ>܂ØjYC˜č{8÷üâ,ē#äxũډ ´Ą„ ˙mlˇ˙P`ÕČd›Ąŋä2@œrČB肌@ĸëđlˆá…ëxĩũîĸvŸ`C0ABė„C$ô˛Đ& Ŧ0BõÄĄz˙đCŪÁ†“ X´˙%ĀđD"…”::ƒ -˙˙ˆ†°bƒhC×˙ūŲ C$ čęĨö$2Ŧr .Ž™t.f_Õø0œh2„ĶC˙ō-먄 ˆ fĖÁCA_RBhĖ3Đ"y˙äpSœ АɁÄD…˙äˆ/1ŧM#‚Ø%nŊšFÃ$ˆá˜:eÖŦø˙ų‰øä2@ÜC ˙ą}´ƒ ä$2°úWøˆ h`ÂØ˙”*qŲá3f}˙˙ Pˇ#†J *Úö ÉÂ4•˙öewßAC!ņŦwŋö(D†@4Ė Õ-/QK×ü\†˙̈́.’hÃGĄ5ā`āÁ¯˙ė lĨ4+*˜|-HՔä0O¸l)×/˜„ ?ēG;Ÿ ]0Pƒ(r‰… !•#˙ųPš gxčä Ã^ PûkŦ0ÂP„Xp˜zø%’˜L!aa .‡ â84—`4¯ÉĐ@č9ģ‚OĄkãęÃ, ¯](pädøhŖđ0Ąd ũ°A^"˜g OžzũKĄĖÃ1×˙á!’ZD4| #A„Č Č8¨hm ĘN†vHd†Š÷×ä2A— j x ^_‚…õA9ÁËķaž#øDuëōûø+ ,4 Ұ/ÁBp0B˜eõl‹Čd†ĸ@Ž€•Ü%ÂA|%ŋK ĄLmĄ6/Įũo°H RIĐh˜0QÔ1H4f ûëdæW͌Žštî )ׁŋ ÁŽ÷Ū?ūqŅCj¨ĢL?V…H30g^žÚ_Ž 9ÅÁB‰šČŽpŋû"b˙˙íqjöŧøhsâŊ¤@ö0†HAÂ>?Ōsjĸ—‚Ø$Čî¤3 u˙Q˙[^?ziĶš ÔCųČd€É ÃH qü.°—ëä Ā”qÁƒ˙eĐf€@ ĩßĮū:\ ƒ›Đ?(ņųéz ë킚1m˙‹C,%˙ū?hãë`ĸÁđD2CXba-˙"ŒŪhJ ø"‡ūÄ7ßdLÁĻc6 `‹×˙§ ˙ßD2AŦ #5Įđ@Đ,IMXi~Ųą‘Đl?ôöh `Y˙˙˙×ũ‚PA?ŋČ)Ū ˙Iū"Ø?äŗņ†qʏđųz› žõ÷ՑĀĖ6DN-l}$ÍŽĪ†@3‚´ž×Áaßéö&"fœqÂņ`š:M‡ķb܆H.ū9 i¤Ė3ō ;Á) 3ûę˂Gß_Po˙‚a¯ņWihˆÃ_āž?É‹›Õ˙D ä2ҍ ¤ ~…õ˙ËĻ Á/ë’=bTá§˙īČd+Á‚ Fī x8å @ĄÄ}Āäܧ0å[Zëū˙‹ XŽo0ŋ\' ˙õä2ŦbŽÕ.Č–qƒ(°Ōũ?~Aœ{ô –°T>CZ|:TIôlĶä2ĀĐFŸ˙„ }‘D\8ģđˇü ~(Šˆ-ĸˇđa €°@ƒ Áá: ¯é`ũ‘Ņ "Uį€Ė?Â_ö迃 C œ°Ø÷øJ˜iX*úY`ō†ĖGPôqØ˙ )€ũÄ_gP3 Ũé}{x†Ô0„†H+đAūCnh.ÁFĻnÂũPyČē4 āūŽ‘ ĀbA|(ŧ†L<Ô WML|'"ũA‚vT„ˆp¨Ą—˙ųÁûĐ#ŽŒ ŋˆ~Ž‘ķZü!Ô_y;­õ xhVČG;„ĸ, E8‚pB˙úā—‚B ¨Ģ¨@¤€!õ_<8‚‡­Âú>ļ "0oaĒ:¤@žk˙Ŗ€Õ —Ëĸúu\ ¨7΁æŋŊņ Š?ü*Ŋ~ÔI„ĖÆ0A  Ā÷úo^Â0Ŋø P@üŋūĘđjū ”:[ 6‰ŲÁŋ†0 Đˆ¨_˙đA-.ƒ0< [˙]vČāŒ‚”˙âČ`u ļ˙Ų8 /d}Ģ(Î$Čųp4zũւŦÁ7ŋ÷čX7˙b)ül‚iB$2Bá=d†x*ų? ƒbÂũw˙‚ø0÷ū†H†˜_ëØåB‚Ū8!cūŨ ákK| X Z^:@đ`gˇīŲkë{°ˆ(˛+Č܆Hm$A˙ƒh˙…\ XbxAoę˙ŋi— ÖûūB"$2A  ŋö˙ēŧ/¨ ŸđR_ä §ė‚ã‚ …ÄiũūČã#†H5‘â8)˜g~÷j ˙đ‚˙UeļīBčy‡HāŌ:6 ëŪ"C'ƒŽ_d拪†l&GOĩ”#hĀ-4 Â]Ō Ŋ" Ŋú ˙!oũÁg #W_Gƒ_äÂAšdЁ ĐQ1qá˜uÁƒ/ ¯ô  ‚˛‡Ö°`Ōb"”0ü0ŋÉr}ۃJ —â?\0Ō ‚˙„ ‹ü„ÎČDđICGnē™CĘDQŽŊƒ!Į'r† ~Îį‚oÃa‚ ×˙đ‚Ÿí>uĐd4r/¨,/ë°A 3Ā7ßb@đw5Í‘ņhĖds.éX4 Ō˙@‚îA™üLAG €V#åÃ$­ūؐ,Hd‡ō Š„NŒ#xÄAĐ'zėDEĄ`ĸ":įŧniÚTč~_Â@ÃHâĢ˜9E×_ Ed2@Žh+„"#qãû.ˆ(‰j=ázė… @—úL0ĸC _Áxa0ˆdƒi4’h‹}“‚ėHdōĮjÃĒëń‘ā<žQ@˜@ü/ƒP91¤˙ N"- đ`Đ-ĐH+ufaHâØAB)Åú^ ˜´ē_Đ0c6ŽA|CØ_Kā˜2œ!†9˜g}ī[×5™ô‚ đ@œDZj$ųB0 †V.Nƒ%†%ĖeÁl&ˆõĐ-Č-ƒIŠC ]ˆŸķ`xlÁFm¨4"C ‡#ŗSøUČdG Đ"~˜õ‘Á$ ō Ļ"Ž’I:ēfa“ \$ž¸ĻL%u„ C(t¯ģ {NCc“ÚČN@–ŖŗĒ1‚ė ‚Ø ˜dĮ&! å`Ŋũ8*3 āĩ°EĐČ4F8/ųÃp‘:ã0Á’U†b ˆd†ßž ÷➁Ŧ0-w…ę"Њūn.IЉ˜mà )p9ΘH6 !lŒkÂä ÁaČj$ xQL¯r@g×ô#6gsDŦ†¯<ˆhĖČųÃēĢ3¨d‚¨1GA~ë„ Áׯũ‘÷õ„“<0„1ČA|aÃL„P4)ŋĒg…Đ˙@ЏCC^ŋķᝐnœ0B á 0¯éAĸŗšđŲÂMŋÄC ļn =‘Ÿ␂ …†˙×Đ'Y˜gpĐhĘËHAĒĘ‚˛ĐÃ$Q:äƒ×ü‚ØĶ#Ļ/û…Ļa' ˙ Lŧ$ 5§Faž:1a †„ž ‰ €Ķ¸aëŽô øĀ`7ā×Zˆíž–<+a‚  BCú3 íPĖü"­‚ Zû"€ļú˙‚ä °.ũ¯öC2aX`0Ōnž| ŲtČd†Ë!Ģ…P¯ô Ąē ŖāŨū¸ ]Ķš>O_ęė_ôßhāf2‡čH'Á„"xä¸d‚Å& ú8ë‚_Ŗas?öĩjĖōéũāØUëūõÂĮPz†H.€ƒö„†@5yX@ķpT ĮHfÃČ5Áŗũ&Ä=_`%<Į˙ä÷˙ö¯‚A˛"§Ė3ŋ.¯*à ´0ž‚ ÄAuīcė@‚A ßÄ/˙k˙ëā×~#œDpČ ¤‡¯Ē÷˙D3fCŽI6ŋÂ˙ņČ8˙ãūŽŽ[ėD†@k|÷˙3Čđ˙āÄeųĸ˙ĮĮdĨȀˆážžę‚Ä[˙ūÁņ„áĸ'øũ)0h/ûņ!?öh ­Uū‚Č{¤ũŅÃ`åGt7ėZZ_ūž$2C…IüÂß ŧzæb›/T/áM@YāÂXA ŋ˙Čd†^¤@—†T`ĖÃgđAxē˙ƒĨ:d|â~Jûų a"¤ēDBˆ‡zWéi3¯ėLĖ3˙“†Šú@‚ȁū>C x ļ"‚á^ ōb8, HƒĨgøVŗ4ŊC/ÂĒŽXL•øVmP‚ptĄ8H.æsi^ `¸H)Ã?|PĮĻņ;YÃađ|CÂ*MūF€CģCDPč„ĀĮް@–ëŒ<č‚ ļ Īŧt|! @–HF'‚üá–8-Q>Ž,3<6YķČ`ũöč*ĐXd ˜HD‚Øn“ŽŅ°T‚> Į€đĶ> Ą!‰ÄŖ#ļød†z<R†îUHāfuė[QŲ#˜erķü Ŧ.D†H2ēū@‚6†ą°ĐžP$3pŦÁrˆ! °v >ņe÷úíĨbAl/„DUü XI X@ÁŖ0ËhEu¯ú\†õDī!]Ń˙āȐ ŒÃ;˙ĐAQ°/ēa°Zõ˙ķā܎Ŋ:h'#F¯éq LŽŸøGNHÃKũīÂķ€x.Gīú^Áē^ŋčÁQ0(ŽX?đ–" ہn9 yၘĐĩÛø%ū …˙ü. `–˙‚„ @–ģáß˙˙ød ‚Ø”Ųŋ˙ų}Z˙Aa@ŋ Šz ņ^ū˙šÔ†H3Œ({˙åĘpo!|†H.įü~đ‚ÁŋƒĐ_֗˙Ä ĖƒÚ˙÷@ĸAl5ÆÆ˙H‰Úč$á/Á„ ˙Á„C$˜E:#§ŋÜ 4vˆ-‡Â ú†Õ=,/˙ũ&ŋũ†\2CP6Ã_ büa 'I]ė0‚õl†ģßČ-wâ°Jßā3ᒠāxfšH2ũē@ˆč¤—ūÕ¯õöa$|3Õôū¸„!0X]}0`‚ŠĐ/˙Â]āŋū,E_üyŲ“Ã2†B4 ô˙h¤¸$˙áë@ž<7ĩáĘč/[ ?d0[Ė˜ƒĻŨōA6*;ô‘ĀTä ; ƒę—āŒĀđ1ëāČTø ŦŋØkÚ&› ĀiāŠĐf|öØVęō'î/ēúø¯×úĄL"@;^¸†ĐaË1)В3$cà %¯á @Ŋ Ė<Į‘Đ]˙ÛB ŋČAb,ŽŦ}\Ŗ0gpŌÔ:ëúVØapЈČ6Ģ~ °0åVn x>°ƒûä€ĐÄH<0)r'G\CB #†d% ˛‡‚āŧĄĖį| _ƒ $$09 A €SIũ…ŲŦ2A`ĀĖq IÖūƒ`Š„PüDÖ8g…b\â"ū`ÄHdĖ÷îÃĆH@”-×đN""A"ŽE™ÎāĶHƒ/ū]ņ…‚üNvr„\¯ĩöö"" ŽÂc×ôēÜ*4?ĩ˛8-†šœ<&Ö?Ž"Chv8˙Č`xg ]Ø9Á¤uĸ 9ßk ]Á ĶÖO ÃīB$S"ŦŽ`E›Ã. ~ Á˜ģkâŅ ÖAI…ŋĐZy 8ÎS֓ô"C 0¯›‚ņ!’ #ĢA(ˆ?´"C<09Cœ}ŋpx0E9 €n=…đŊ jáīų/{đ†„dՈgÂŽí|D†@#œu:8Dl õÂ^@Đ č3ë!†wūš áՐkÃXŌų 8ˆŅ Čd‚Lä.@Đ ¨FÃ8jū oôs#“ d2•<˙ëĐŅđÎ×Ѕä ÁZ€ƒŦ*ū‚&đ‡ ~2h!‡L†Ā2„&C.…‘ú­*:Q9ĪW~@Ė5†ŋŋ„_žXBĖ!ÃA„FÃ`˛‡VAIũB¸Čˆ5Ė㍠¸PŲ đfÄo ŅD\OkūA”p°­īK¤:ChĖi„  x1d=ú!iAƒ øâߐ[ƒ4f(30Ė9ũōPR:úėĮƒ y˜`šđ…ã ‚ †šČSO†Â1h)ũ21Éĸ^hö›V` pč>p@Á…ÂOŽJ Á<Đĸ†Ī˙ėHį⋍tĄ‹Í BüF$2¨Ō÷öôŦ‡ĨގøBOĐ+õ÷ô*f%´‚)Ū6¸Oü†HeÍ†ž/˙ÂŊ7ē_ÃBæeKāĐ/Įß°Jb(p“#¯> ‡C.ˆø2!ĸĘr `Î?ø* ”gũõŋô ŪCd'‚_˙˙õWā“á„˙~@ô˙ķ—ũÃō!ˇˆZ‚^#äüč)ŌÂØ _˙‚_ƒ ü D6‡đĖØ?×đ—ø2? ߥŪũĄ„ļP?˙~øū¨đfqõK˙_ņ"úßD2C]Ķ˙؆@ˆd‚˙ƒ×ŋŋũû도‚ ¯˙ŋņ!Y™€F ø@¤4`‹—Á ĩ ŋŌôl˙đ­ô p‚ü†ÂøßŪC$3Žu,=ũhFÉĀ(N‚l‚_áāŋū 2: /Úδ$ĩâ—ũô čÁ‚õ„ į"0@†°—øKõ˙ņa„˛HÂHUŪŋ¯ōϜH3ûŖŠ>Lru<ƒ„ØB8L0“āļ?d „ûŗû1ek| ‘°uj‚KË]|4&Ą~ JâĘ.ŅĐJ0f™#‚Øf˙¯B ˙Đágō˰[ė0@’ o_—ú4 ė§˙E¯ĘŒ! `„G˙đĢû`‚ˆ°Ņ´‚ĪųyĨ › xguKˆ:Û\: _īūL&€Ã#ŖH&A _ķ2Nū 5ؘ-†qyģl#ļll)<85ä<Æ× @˛†đÁ Í{Ԑâ~"4˜0jdČņoäPš åđÂĘ@[ ]GP0FÃ$ž 0† (~„‚LÛ!ÂZa]wÁĨM†˙QÃä5?ÂņLĖĀÁt" /í„a e]eø$=6‚Ų3đ'û~:XAB!—Í˙_‡ßŋö„!Ŗ0ĪúÁ a„5‰˙`†ŽHeÖ"2‡ŅBt ?ü%Wũ‚ ÷˙ A,” D ßú8ļ ūlâ>lF_…đAŋS`›O A†X2â—0W>ūĐ,i”ö8G$ˇ¤ßöEŽ ŋ˙WûŪ߃ ƒŽ#@Ø[˙[ !=†Tay˜gé8+ũ]ũ~Č%žĘÃAl1˙uÚLE õô Ą„ ?˙õéwŊņC$ ˙ëÉfŽĀBC&ŗžĩ˙ÂXFĀđŊđ–˙ÚŌä ˙]É ž_ú´ xR`Đ! ūšk‚ų…ס˙°Áá–„ ũy Ō…īųavG@™°[ΆP˙ zZøbxKßÃdJˆTJŌō Qáæa’õ˙ąŋÁ ĸ >÷!ļŊÔ"‡ ۝ _øørË I‘GƒKĐ{ĄPŋäNôq,B„x3ˇũ[\Ąŋ Ûߨ%Ĩ˙aˆ0!PA{x0ÔtũRN›$œr a­Š†?ŧ{3 ˆ‚ס Iä /Ü.˙õ o^Ø Q˙ļN ¨†Húū,‡ųŌ.aXa„ĄÁ/AųŪ˙ę$QđÁ‚°Kø0j L" ÚåOduKëļ#¸j86­Ūž—˙ķ@!„¤Püeà A}ød>Ŧę `Ö ÂŦ°aė* Ô•‚ ãPØ`>Īũw˙ĸ &2%p‚b'‹˜3Q÷ũ&1 Ą>ēZˆá‚ļ#šŅАƒ­‚>öÔ_ûāa!áZL!r¯ė3ˆ‚ ļ,č?ĖÁ ÍTŊ°ĸ4 EÄTāÃJŋ˙KAaČčH2xĀdƒ$6zü aÉČ":…Ŋ˙6—ƒ‚–Á\6õhŅ Ur˛ á8#á–ßÂč/V%ãūŽ85úYÔŅĀËaAÛ - €ÚôÁBãėD_Éâp3#ūo$]š‚8Xüp¸âŽ/…a¨#āCã}åD]5Į˙ŌôĖ4Aōģčę!Õ˙Ĩ˙ëjŦ=’9 m'ū˛ŅĀ_úøAd3Â< `ßâ0k×˙˙đĩ}d2CRiLīĨDpTí˙׌$øfw˙dp[āx ^˙ŧžĐ8\GũWŲĮ˙Ŋ/zö*lũtŋ˙Ž o ×I‚´ ”/˙Đ[…ũđ`ĐĄĩđ@’ũ}T%!’ °@đÂpžđD59E>˜!ũ Pc˙tŖ__ßôqîō ]B˙<2čC0@‹§"×đA¸K˙üāDõ@ĩ\ĪįđŊy €es9 Á¯û x å¸":_Rč!ß|†ĸ^‚˙ė%„*>E˙˙Č aŗŨ_ЈŠ#†„‹?üpˆ„ŋö!N#c„´xH$1åƒČQΆē˙AÍAƒ„ƒũBøü/đK Č3_y-ƒBčđmÁ›ä fO‹Ë‚˙ pßŋáČčĐŸüĄ÷ųŠČ-ޞcøKA1=.H ūCG×~@đh„kH×đDtČ Žg.bū×ėŽˆá`ģ ŊkĆH68&H2č,/x(MōAžd}Úž@đw°Faž/…ė41ĘwŧuđKvÁĐ[[ ū…úXAyÃ66^6Ãh†_t"ܐŨ§u֘%āà @đi˙ßåxĖÁĢ×°ĐņPDeđ@´:xļ"ÜēWÂzp@ē˙XewUˇ˙ųO ũX3Žs„°Y˜gúZ@„A˛>Ęą `⁇˙ũ2:īôČō ]˙é|,(ˆ¯H? bÁŋ x.íė5õö‚_đŊ°ŋZ˙Âä & áĻa, Mú xlˇ~ü@ŋũ/ô Ã3FÃîAl49C˙˙LĐ,2F{/„"Š~HĶ˙ôŋũ×Äur c˛ŅūŽ+Š ˙Ž‚Ž÷__˙˙ëü„ ,‚Ønc˙ :bŦ" aĒ9dū ?ëũ˙û˙˙ē<ĒČ^\†H(‚č}÷6 áŦ`Ұ`Ŗßš°g˙ûų €,qĶ˙˙ė _éņkÉÔjČæ˙ČĪ­œF¸d9 )‹ū ˙˙ņ¨O÷oøWō ظ@˜‚@æ`F÷!\Ąë˛1Ë"R#Āļ@äH2Aš\^ y^BŪŋ˙˙§éá‘Ķ ŅøP˙„.đb)—Íįl6œĖ2A\×Dõ§‚ X9Į(ũ˙˙ג†= † +6 `Á gŖa˜/רdæc•Á‚!”9C”á#ņë×ī‹×ž#¯ė†HG!'˙ū>ÄŖD X_‚ "0aÉ‘ČÜ!ÁˇŽ—É|Ô _ ÷§äĐ˙ŋāÍ?O böÁAAĢāÁ¨30Đļ`2@°Žb E87„ /‰Ûi?§˙ŋūÃ:NEĀđŅAÔ2œč /ûu‚Č“. `ÜYCĒ‹W˙ŲÉÃW '@Ō˙ũøŨŽaÍ3`f[ ãūŦlø-‚ŧ%õ¤5Ô^Ųŧđ°ÂÁ„˙˙˛’â/ļ#ãöPæãHd†eĖŅ‚/—ëہ}DāÃŋÄG*āØI×ŋĩė>ūę@ņA”ä2Gûø1@Ņ Y€M". ÕZC „GccØa @°Ø^NžÍ‚áƒ$悇I— €$#ƒc×Ã!0Ņ— S´Áč _D2Aũ?,%à ´8"Ļ \GŌō†”ÆôļGĒŊ)áĻ‚Â*  Ĩũc! „Âũaô'€†,Ÿū@đÕб֛øX‘&Ž[ÁĄķF}@đCßlP ģ…´žœ$ûö@đË3`ģ xk˙‚TāŽ@đw7Đ/p„ChÎ.g]&C$gsáNC;’˛qûÂ!’ˆUöĄđ‚ū˙ũx@ŊúßÁø":‡ņDŒž`Âq\ ÃgPh ũ#Ë䋂C‚Ot ˙õį˙˙õV_#ē ž¤hÚwîČ0[ Žé§ — ŪũõČT˛1Âeqũä°2@Ūŋ‚ˆŊ#>p A„<ƒ¯ÁÃ$gÁČāxgßö:ĐO¯˙áĐ'pB"/˙ũtqũ|(7B™˜)īĸ_‰ WX@ē˙˙CČ ūŋ˙¯Kķ~ßė O_ÉĄp¨Įō H ō ‚lî˙ūôp7üˆĖH,_õ_Pøëi˙É H5ē6ˆëe¨ĸú-×ũWü.™ĸëāH+6 ÷{c  dÔ%\rcáƒCČd†Z¯~ė VAAâ7˙Ō˛†x. 3í[ņōR†‚øC‘P<h{d%NC$› Å ˙Á† Ã­¯×üD„Ÿä4P7úY5 ¨2|ގQ˛á’ @Ã×ūôŲĮ&æÖT#1Pę 0—ū˙8 P˙+?‘PÛøA0BC$A: Al4?˙kā¤p9~Ú ˙õ 7~”[>Û˛čĖ0ž]tą†ŠĻēé1ÁЇîžŋđ†H3ä<¸$HŗÄFcŠD Z[Ø M„4 9†`Į×ū–ōõđZĘ=ū"ĄAū 4‚g€9‚ˇjÁ}˙ZĪ˙…‰˙ᄠ`‚÷Û:ļHEĐ!X¯˙×˙´-˙Ã:"āf^ĩ˛ôňf#`pG É AęË­- _čøfà KÅÃ$öˇLD!yÁB!ļGûŒ @څ!’ 7úC¯í €k=:@Đ2!AD1˙ŗ8V$Ąčøf/ xgŸ‰ €UsФœ&ƒÎÜbA´MˆĢģ˙ëûČd‚°Ä" (ÃPã0ĸĖ$Ö0eYuI|¸dƒø [_É c¤G÷hDE Á=Ĩ 2œ00h/KũĐ1"ŸÚ\20šapk`—‚g‹ö" ÂCėú"$ÁĻ6kf×ÂYŋĢĄ!<Ė3ĩ…ˆ)TƒQč'×h†@¸@Đ@ŪōžŽđ…áËĻ,Hd/ĐaPL<-a˛‰G Ų‘ōđ^ÎŃ\†HXBC hå!’8Á °ƒLáÜéČ4 •ˆˆ­ųŸ!’  hœ~ĸ„]0Ą ƒ xhÂsũV*‚´īČL†~F€ÅLáɐ0öÂP@Á9 €Ë„hQāŋI”A¯Ũ8#0!„P‚#ω€<)¸ĸ4 "8Į‚(xh"’AŠĄ:đBūļ:O>Ú |å Ų‡ x.û‚.ƒdpPČᐠ„pjŃá:LĖ  N“Ŗ0ÎŅđĻ = ôĪA(:m9Įî8Š•ÁD­}X~ `ū(2$Á˛‡ÛQjf‘ Âa ü†QÜ‹Dû ú_Jž˙Q‚>`Đ&G\DD‚ÁQĸSŗšū9 ÔŽvžø ŧ žö\ ˙Ģa!oCĄAԆHiYŗ˙ ŊÔŋi˙Küˇû)ûĄC!’ !˜#čHdc”„fÖ?û˙ūČ÷ãŪÔ( ų@ C„ŪÁĖ.Šũ øųyáttä <!A ˆđ‚H*ƒX˙˙ũ}*‚3 áę$2SÂ`ļž Jņŋ˙Q˙ÁũCÚMg‚W ÖđÔų¨iũ“/û˙Ŧkė 2Aŗo÷*K!’û¯Âa(ū°:Á;#§‰ €n8\邤2A¯ū ÂC˙úø$"ų hƒ— xŠČt§m˙ Ÿ…ŠüčŸú×ī6üC$( ?ø$$ŋáĪ>đĄČū`ŋä2‘Ęņũ’X`×ūœ"‡él‘{ÂëūŅÂ˙ôq$āc+!õ˙‚ !† ¨‡Ų§K¯đ›3EĀđUø":á!!Š0@(˙öÁá… x#𤑿r !gī@¯đ´?ÅzPUČĐ4ĀļūŠF†ČJˆˆĘ„Ąđŋä H xn:˙  –C$3ū);*h†)¸ēQúũP÷é{ x<Ō@ŠįĀÉ˙ÔrSŸÂ§ņKK˙˙H%čDķuü Ļ28"Ä[Ϙö ŋ˙ũ„ Ō Č īø@„Gl¨@č_˙ė5 >… Ķīđ@°`Á×mA‚_˙<,ü" ølá aOõú Đ Qņũ(÷ûc@ŊĐ% SgõüāŊv ˙˙āžēX.@ĻPQ˙BŊGQ+÷˙é ō fõ‚# Z`tlŋ‚$Ķ˙˙ŅĻ\z’Ė998+˛ Xš˙ãŨøC$7kũöDsšаÂ_ÔN hCuøhwļ•˙Ŗ€x3˙3ŽxS„×ųjú ^¤G‚¤Ō ^‘Ū˙ō š9Z!×đ@-ŌŽR"p;‚ŠNƒė`ízŧt ō…üDŽ˙ū‚žC.į>^$ĀÍ, hayžGž 0J6ôÕH ˙ƒ$#5ū۝AwøAj@˛pdœĄ‡pЈ;g8AëlE2>Hˆņ}C@”6—‚>ƒH5íÄC3˙đAƒ×@ŋ!”叐;Ņr ‚6×qb" ŽH °Á }˙~@đG˙˙„đ\ ŦąČĮ*  vaČfŠ"°[ xh÷ØA‚ä° Œ@ŊtŌ˙Â~ũ´ĸs˛ŦĀČG ŲŪP ˙ō Đ8h.#˛ 2œāĶÉw¯˙ūūâųFGdp;“.A‹‚dtĘ™;ŦD3ËÁa؊‰ŒFĀü4 Ķ˙øĻū6•3Ø! víyđ.á ‚ÔlDYÆGlŽ8e tEūĖÁ¸/úë[!Į (EŅvG°3zČfp œ% ŦDDDY„tÁqaWū˙„Ŧč@ˆ1ÄDÔ Ūēö–ŋBHv_Lē>Œf ĸ-˛œ¯8}Ú˙÷Í˛‡  uQo›a÷˙aĖD|ŽĪa`ÄGö˙ø‹ v ú¯‚#ø~?zˆˆ‹Sųz×ŋî°ĖķuCÂAȖ¯ŋũ!ī†ė˜éuūADņPĖB ˜ f…˙˙čŽC-_ūÁŦ‰ÔōĮÁ{˙đģ˙ƒd6xĀaLĀŋĩũīôl Ŧ a~C4{¸ÆDLØ˙ø(Žų˙đS0Ûŗ0Ëßŋ×ၕ xlü_ŋi }uûKgĸ8“׍A0õKđkļÃ#ŋØTŧ A_ëīZ˙ƒ˙H†h;đŲJĮī˙Čg#]ëúŠ˙ŅĪ|Wų XöüÎ34˙#`Ú`WúŽé`×ū˙RëøKaÕ˛āT ˙ôYđCāŧ˜ŋ­ ˇ˙á˙]Ž‚ú˙˙áz’û‚˙ôˇėĐAō.+ū ũÁmqũz÷÷IbŲĪ#@Ųãä…ßë Å÷ßŋ÷ķ¨ŋŽíöהo:€Āš1И/÷äš#¯d3Į W|Ė6˙ŽŒĀ¸|'†ūD—ûüđĖx: G?ΑR8 ˙÷ :ˆ[˙ûƒ C43kŋ˙ū:ą‡˙īŋ0ėE.#ŪŨ˙Á„ĖŅp[Ęp2†Īë˙á„"C$5h?Ų×ŋpČāâī˙˛8-‚˜4l!qƒ˙ßÚhHd‚‡-ÁDp¨ˇ˙ûB$2ATb8Ø_û†g<ûBC$1­ä ß̐!̈́E⠍Cŧûƒ3# ÉäŽpÂD X%īŽÁx(5ŋöQ™›Õžĩ˙čDt=‘Ķ_˙ôl3˙î(Č*€ˇ˙9 t@Đ ‹īûä  Í`Šė ˙˙Č@â P˙ģōĐĪ'š#O˙ūĄ î†˙˙Ķĸņ,‹˙˙ä ĄĐ‚(xd €ĸí˙˙ Mc! %‚ĪÆŸ˙ŋä aĻrßGW KĮ4ũ—×øČĐáAā”9u KįÅNüGũ˙ Jh+Ę:>‚"YN͟܁(!iÜØŸī˙ l7( ‰Šøîwȁļ¨2,cü(: 5Fi7˙˙ĮÁ°ÔŽG‘€:@Úh)…Ŋ‘í*i#ÁŊ'I˙ûû[‹BČ3q Ü!–9ųh2Aá ã‚3 í_Ŋ5H]ģ˙׿a˜Gj§ L†YōŧƒXä8ųhW0čhé xLÎüh،žîœ;˙ øŒøhĖĶ_#ë饀ĘāŌmÂXfâŌDxØ&˜4†>kęmZbjĪ˙^@¸åpâ?C8ä €ŠĐt"`‚ÕpKˇVúnÄ˙ûņ ?ų˜sŅP„GLá™„4¸Ž y`ƒÖđÃíwÖŨ+^‡˙ūļ˙8¸‡ž 297MƒĐģŊëWÕCÄV˙äžīũ˙×Á&Ė´FČČEéū¤ö h/˙ī˜fƒ3¯×ßģ}‚‚힅đÎō€ĩ§‚ ƒņ˙.˙čZ˙ũ˙`Ģđø:‡Ŗh&ō€Ø+ũ˙ú īŌū÷ßö %õ˙~ē6Ąę Ū@ŅGŋûÂ#Ĩ˙¯ô^{˙p˙˙ūČxpšÁĶ ō`°ĸRã‚õ˙á2‡˙zūЇ_āÁ¤č/ŋ˙ÆÖûä Áĸʂ ´Ķ#æ€xP˙øH˙ø´˙Ģ^ŋ˙˙ūü˜ŽZ„Ä__÷úAëū@ĖßûA> ÖAũŊõäĀąÎ/#û}? ėūí'ųņY0VįöZÚ ëƒ š‚# @Ú~÷Į3īú"÷_á/˙ūŸü6¤Î B ĐC_ķ~Đú˙ĮåD`4A‡ę„AŦp—ē ˙Ĩ~ƒw@ģę@Čāmȧˇė7˙ūfvûUŊB'_Ņ€%ŋũ_ëo‚í`ĐɘG[I”:_˙˙]đa  z Ÿ×˙¯ü0h5Á`¨b.˙ [˙˙ÜE;Lđ˛ÖЎė$)~° ˙÷üE5/™áŪĄ˙Õü† Áäh5āˇëxP‚÷_ëÁŋˆ‹¯¯˙Á˙°ļr.°i3 ˛s˙Õ<¨F8/ë˙ĖØ5k—OÚÜ%íúŋƒ)đą9ŋ˙AĄ>_ĖS¯Ŗ ˙˙p…‡'°¯ūŋėŽa †H)â¯˛>ÂSá(7Ą}Zī˙ \.īáw˙ū.$2CC›ˆH8~ߌcüĖÎ'ųH˙˙×˙đ—×Ŋ˙Éw?Ąqømz˙q"O˙ŋûŽŊŋõ˙Č1ŠŋÉčZh‘‘õá‡÷¯í˙ū{ ŋČh˙ ãūūíūC \įĶ›` ĢīūĮ ¸0˙Ŧ|Žū˙ėđc•e~˙ŪŋrØä8Äį Ÿ˙įŌØ™§ƒä/˙ūČĮ=_õÄD}ú˙Nķx‘Ų€Uķba7M˙øCĩō “Ž˙žųî—A‚Žßí+Q x( ‚hl §A6“˙ūˇoü/ˆ‰žŋīōâŽHŒ(5?~Úô@Đ´M?Iŋ ˙„}ĖĀČūŋø]w/1Ŋų'û @įƒ\ƒDîģ{… h¤-Îdz Ģ­÷ų˙úB"EĪëÁĐ\E׆š 7ä ōWM ×pž¯ f“!€Ķšá¸B÷÷ W˙ęßēÉ>:8aöÚ Đ@Â! Cļģ¯jÅ3 Į?Ϛhؘ'H8?ū?˙ũā˙āS0_ø[dtī ŅĮÃHd¸‚€Ö=×~Ŧ˜AČTáŗb:n›Ģ¤:÷˙ũöAˆ˙ ˛@koũרvÄB!’ˇ:î\öš ļ ŗMg“›¤ÚMŽģŊ˙īũūØM[Uæaĩ‡˙qŧ3A^rC$2ŠpĖ(͍ˇ\{M&ŗ@Đ\&žŸzoūŋ¯ ˙ũžôä4āȉš†hč9đ`Âr$2A­ČO˜Ci_ßŪ÷ûAÁį¯öŌl Zũû˙! Š{‚ēŪ„†H5ÁG!à .5ûĢõ¯ßũ{Õâ"ūđaĨ„ŋ˙_°eōųtG €$#ävGÃÃ@0\5ˆÉQ‰Ú˙O˙Š˙ûuYs§ī_ÃmĶk¯˙ī툐ČgB0ž ´ÖŖj„öēM×ŋ˙ū—Ä0E;. ËäŧŋöԌÔˇA˙˙ÁÉē6ŒFs.!á6“ޏîŋëųŽŪ”ú DD„qiÚü1LD.˙ĶĻ^BC 4Üî:ūĶjŪÚũã˙ū]4ŲķKD%ˆh0AØ-Ã@ÁsV`ŽˇŪ ôAŠÄP°äpáí‚ÚĶú\Įúŋũü ظ˛p\8ˆˆ°Lޏ‰›Kˆ†]˙¸Č‡Tl4AĐPûuĩ˙˙ū×øį„|UXˆˆ‹Z˙øhA0EÔ ŽėW˙ãéu[i<# č؏jÃBÂ˙D28 Q¸ÕČk¸÷ä  N˙˙ŋæ@m-zn¯r0qėļÕ@Ø˙6‡ˆ ˙ß˙¤ÚqW’˛hč7]8o jd6īöČ9@ē‡ū@Ø ¨ šĶO˙Ō˙øģĩCëí'wL†ˆF€Ü¸*Dp:ƒr&áŌŋōĀĪ4 ŗˆšŋ˙ī,rwé,øģ …đūũžTԃ{LĀę{ļs<ŒĀÍ3š ŠĄ˙ä @œá;OĄ}ūÂĒÂy˛Æ°Íc˙ۚ ÂjƒũĄ ļj?ũȆ” Á¨ØŠ7˙éqČb‰Si˛˙0#!hŒÁ%˙ģ˙ h õ÷3yą[¤ûÖF˙ķīá(%ē Ķ÷˙ęūę Ž ûiˆĩozjŒæh>˙ė4ŗ‘ē]‘úO„°dpˇ˙ūŽ˙č6@Ė ĢčB3Â˙ōpĢ­¤ßkų+*âũzä3ŨVö?˙úģ¤ū‚xČ2y M:FŌÃnŋüāV‡_Ž“{\E˛~Ųåˏúzŋm-˙˙˙ĻČ=¤Ų Y÷øTĮ xgĄ}Ž.{˙ôūđ›õtaG¸įb/ŌÚŋp—˙˙öL}wíõđPQëAųÛĻŌm˙ō`Ž`†­)†ļ°ō`W ˙žDuŋ˙˙×ÃV“īë~õ˙÷NļļŠ˙úķLĶ Đ t ¸O3‡]˙ø˙˙ßúč]oī¯õ˙'í¤ÚLlũoPļđ°Ō)rvˆœŋ˙ŋ˙ūē˙ũŗú_ëíĨ|t×˙ģ `šwJÂÄ7[téáŋ˙˙˙×ô´ŋ˙˙˙ŊëlģV*šf?˙ī@– Ēë[wTČz˙û˙ö˙ûa˙×ũ~“iqЈ˙ūŲC•Mu÷˙ ļ Ũ:˜āÄÔ Ÿ˙˙˙˙×˙˙|œ]>ÚÃ]Ļf_˙Äkũ˙ų ( Uœ ũ÷öŌ˙ŋl/uĩ÷ä ûi]m&ö+dú˙Ö܂˙ë§k_°û˙Ak˙ˇũs˙ũ>ÕŌáŦSÂ(q×ûŦ_˙ôÕurš´P0ô Ĩ˙Įū!ĩ˙tŽëÛᐙЏ˙k8/ú˙ô|à ĶmˆiƒũŌnŦ+˙ūŋ˙ŋN¯PÉÎ-Ē ŽĄ˙ë§o]˙ôlJúWŋøtŽĸŋíÕ6 Î>˙ÚWuVĐdp%_˙Ōm‡÷˙ûä6_˙ļˇ ŋöŋ‰ lĻëû~Ã) 5Pâ?˙͇_˙úŲ…}˙ƒÁķL([ū>—ũ6• ļ0 æ™p%‚˙­†-ë˙öŋ´ũ˙pLc_øū¯i6­ĢĶB#˙˙˛˙Ĩ˙ŪáAČG(ä3͊˙ëúŨ[J0ÖÎ03~˙ûõŋ×˙ō`°?áČŖ… ÕĮ;•¨˙ũū@‹Û iĶL!˙˙Ķ˙˙Úūü˜w[5(W˙î˙Å1AĄ_ūˆ] âÚŊī˙˙Ũcß˙˙ī_­Đ`ú˙˙÷,˙†đnCÂī˙˙‘i˜(÷÷˙ßūŋũá?Û×ĪXíß˙úėđ€ã˙˙ūū˙˙đp×?˙Éŋj-¤ī˙û˙˙ßßģXeōt†@-X˙ûëv–ÚN–Ú_˙ũ˙Ī ū Ļ@Oûí+ĻũŊēí/ō`Č?˙˙˙Đođ|†H/exCØŋ¯^Púú ũ˙éŋÃ:†H+Œeˆ9 ĨöŌēm']Šl%ēNá‡KļūŸß˙_ä *É !â6ŗ`h ŋũ[V+Ļ)Xõƒ Ū—k˙˙ĩŋ´C 8îqĶM-˙ļ“a(ÚÚkkØáé˙˙ßd2āb`# ûūÚpČāv uĩõj,›˙˙˙ĸ¯6%'A;÷ąL*g€î p×Ŋāģ`a+¯˙ûČ ÜŖ žŸoa4B Á4Ķ ˆŽûA ŋ˙đhāÖéŦØMö¤1øvG¸JÚēļ—÷˙‰ÁžŠCXôí-˙ņmĸč,6Hrܧ˜‘ #ŨkīŋųQŖë~ņũĄ„l‡B Ų õ˙ûä ’`¨wöŋņÚ+"6{//˙ĩČ îœâ/´lG˛=ņ˙Ļc/­‚" ģūûČ‚Ík<ƒAm'ÆîĒ˙dpÛM]ÚY0l„íD==0Ânøū@ĘņĻA|D~ü‚==d ÁņPh؎´˜i˙ébg9čAtcë˙ēzČ-‚›üsčŲ‘ũ==>ō?û¯,ũϚa ^ cõ˙ų°T–¯ZŨ*ũ%AÂĐĖs\âNĢ Ø­û_Ĩ÷é$šF×ēŋ˙˙ũßĶ÷Õ~û_Aø"&ĀĐ6㯏õũ˜sú]Wãú_ß˙ūŋß´ˇëĶ~GÕŋ Öõ˙¯ú¨Ĩ̓Oôŋ˙˙Õ/ũEŌ_Iō 1Õę×÷˙˙ÅŅ ) ĨöŊõ˙ū×˙ëu}$úžAßĶ˙ō`ŌG˙äí/įō9Å īŌß_˙û¯˙÷¯ģë˙ū¯Č†'÷ˇá˙Ąna;ŋôŋK˙˙_˙ņõũ~˙ņü‚Ø+z§ūŊŨM qî×Kė/˙ū—_[˙Zû˙äÃ<„s‚÷ĢøgBī͈t-öô˛OĮ˙ÚõēYŦŦtĩë]ŽŋĮ˙!’|…§ÕúTN›Ņ ˙öAŋōZ¯ũĩúČ0át7ķĄõŌũ˙ō!ĢhhĶkˇˇVo{iúP_^ž°_ũ…˙Cˆl3ŊGëgīō1ë˙˙!’ tMFFz ķqcēQĘéĩ÷÷Hqé^ß65˙ąú]O˜->ëtŪ< ķÃøëūžŪëHb)ČÃ`û˙ãú(@Ũ…tî˙KM×áũ.QžŌˆŊ› ]éēÖŅĩá6‚~˙˙r+īÚPÕ7LÂ84_1øƒ}¯˙ņv=0ÖĮtĒŌģ õ ˆ„ôx# #ÁÍ7Ķ˙M˙×īM˙Üôī­~ąQ¸‰fŽC?D˙¯˙˙] _õĨĨN–ä>Ōa¯īuÕ˙âEž˙!Ž:^ÆĶ$A Ž ˙ŋé˙uéˆétÕúDĻéĻęƒëd7ũũ|m_˙ëõ!ĸ_§ ø$ @^Ķ!ægOß˙ō ÷˙ä0ī~?¤;XAWĶ}ģ¯ßũû˙Ũ}6ŋ°„HĀžGŒ hxa&ץũ˙´Čāv‚ŋ˙˙ë˙˙÷˙ÄDDEĄ Dįwivĸ"}Õ}ž"@ę VBvĢ˙ũũ˙˙˙øˆˆŒķšöšk˙û˙">@Ô L~ Fí˙˙˙˙߯õûņd|ÃMVíûž˙§‰`iŽWēÚ¯˙÷ũ÷˙õíŨūŪ""?ūõŊ;@ā„?ūũ˙_˙˙ū×˙ū˙×&ũĨļ¤á—Äō%¯˙ũũ]˙]˙ßû˙_ŋ{Ōí÷i; įrÍËß˙×˙o˙îũŋ0¯ô˙ūžēûû Ô vã•H´?ŋ˙ŋī˙ī˙û˙˙¯ûŪŽ›K^2P7đBq[˙˙˙˙úŨ˙_ø˙ŋĶũˇĩool§Kj.ūūūī÷˙ö˙úū˙˙īü7ŋöą`–Ō˙ũ_˛:ū˙˙úũ˙ßŋ˙˙]ĶiE+_ūßĶ*˙˙˙÷ßŋZ˙˙{˙ՍÜ˙˙Žīũ˙˙˙k˙˙˙ûŲĸM4Č踁“˙˙˙éß˙ūū˙˙˙˙†)„ĪÁ˙÷ũũVŋ˙ßëū˙˙wīíĢL˙˙_˙˙˙û˙ī˙˙ūŨ´?˙˙˙˙úú˙˙˙î?ũī~˙ß˙˙˙˙õ˙í˙˙˙ë˙ûũ˙˙˙õūĐīũúŋū˙ŋ˙÷īö˙]ßø˙Ûū˙˙˙˙˙˙÷ī˙í˙˙ī˙˙˙˙üŽļ˙˙ũũ˙˙û˙˙÷ëÆ˙˙˙īu¯÷˙ī˙ī˙˙ë˙˙˙˙˙˙øŋ˙¯w˙˙ū˙˙˙‘˙˙˙˙˙÷˙ũŋ˙˙ŋøë˙k˙¯ß˙˙˙ßßŋ˙û÷ø_ī˙oë˙Ū—˙˙˙ß˙û×­ī˙˙ū˙¯˙ŋ˙ ˙ũũ˙˙¯ī˙˙ūŋŋëû˙N˙˙û˙˙˙˙˙˙ū˙×˙˙ũ˙˙˙˙§˙˙˙˙˙˙˙ŋ˙˙¯í˙˙˙˙˙˙˙˙ūŊ˙˙˙˙˙ū˙ûßŊūßŋ˙ū÷ī˙÷÷˙ũ˙ū¯Û˙˙˙˙˙˙˙ß˙˙ī˙˙˙˙÷˙˙ū@ę—˙ū˙×˙˙~÷˙˙ū˙Ū@ępũë˙˙ë˙ũ˙˙˙˙LŽ_ŋ˙ŋŋ˙˙ũūŋūūŋ|Đ2ėĄČN‹ŋ˙˙˙Ûŋŋī˙˙÷ˇ˙ t;6FĒ˙˙˙ī˙˙˙˙w˙˙ßų˜69ø!~ģž˜[õ÷˙ūŊ˙ũß§ŋ˙ȏā‡˙ë¸~í˙īß˙˙īû˙˙ō ,r8!ų{˙ú˙˙˙ū˙˙˙˙­˙˙ rhˆ;ŋ˙˙ú˙˙_w÷˙úī˙_õČƒf'ëī_˙×í˙˙˙˙˙××˙äEû˙û˙ßõ˙˙¯˙˙Ũ÷ũī&ƒm— Úũ˙˙˙˙ũ˙˙˙_˙ũųh#„?¯˙˙ũ˙˙õ˙˙˙˙¯˙˙ōĀX˛&Ģ÷÷˙˙û¯ûŊûßßŊ˙ë˙ī^@˜c‚˙˙˙˙˙˙˙˙˙ũ˙˙˙ä ƒē˙˙úūŋ˙˙÷˙˙˙˙Ãß˙˙ČĀąĐ˙ŋī˙ūū˙˙ūŊī˙˙˙˙Č‚"9܄ƒa ƒ<3G8ųXiÁXCŽļŋ˙˙˙ī˙˙˙˙˙˙ĩ˙÷ũüZhø‡@„|Āx ? K ĩ_˙úßû˙˙û˙ú˙˙˙˙ũ}45"|J:ƒpÎG -HįAŦ˙˙˙˙˙˙˙˙˙˙˙ũŋī¯˙­čZ<đg$<ˆās )P5Ųܨ[÷ĩ˙˙ūŋ˙˙ëú˙˙˙˙ũ˙˙˙ÕWŒ‰ŠdL!p†‡.ōĄ1†š.ˇī˙Ũ˙í÷¯˙{öˇũûßßßŋíû^ŋ˙ßĨŋiϏ":ϚC<ĘÂ#•ær99Į ]ōĐkŠä/X˙˙˙˙û÷î˙ūŸ÷ū˙˙ŋ˙ũģ˙ũíûĨū?AĄÄd'D$ƒC@įrCä ĄĮŸS~~ũŋ˙ŋ˙ī˙˙˙˙˙˙˙˙˙˙ũ˙˙˙ũ~d$Ų„8į†; māΙCÄzū?˙ū˙Ą˙˙ú˙˙˙˙˙˙ûũû˙˙úũ˙˙Uô 0…‘u G™ČgÂ|°6í6#M?˙Ö˙×˙˙˙īû÷˙˙˙˙˙Jŋß˙˙ũ˙ûõĐģ Ųd(į9į‚ q^B6W§{>¯ū˙÷˙ĶÅß˙˙ũ˙˙÷˙˙ūīéûˇ˙˙˙˙ŋ˙ú˙ö°í Ž4Č7r9Ŧ…â°ƒÆ@Ų_q˙īûŋ˙ī˙˙˙_˙˙˙ŋ˙˙˙˙Ģ˙ũõ˙˙×÷˙ËĻžŗāĀd/Ē ųPirņ?ã˙īūˇ˙˙ß­˙˙˙ũūŋī˙˙˙˙˙˙˙˙¯ũɏOūūˇä XäBÁũ>ˇ­ũũũŋū÷ģß~Ŋû˙^÷ŊûŨßĢūßúúūŋũū˙ūīÖūĸ*߸{ųá?˙éīųCūŋ˙~˙˙ũ>˙˙˙õī˙ū˙˙˙ũũ˙˙ë˙ļŋ˙āŋ˙¯4¨"k}ą~Ŋū˙˙˙ú˙˙×˙û˙û˙˙ũWū˙ú˙˙˙˙˙˙˙ˇ˙ũx[˙ hXŽŋ˙ŋ˙øū˙ûūŋ˙˙˙˙ū˙˙ũŋ¯˙ũ˙˙˙˙z߯˙˙¯Ē˙ä Ã\r7M˙oō‡ß˙ī˙˙ûõ˙˙˙˙˙˙˙û˙˙­˙˙úõ˙Öŋ¯˙˙ëü˜hš˙˙}¯ū˙ū˙×ŋũßß˙ú˙ßß÷í˙û˙ßúõõõ˙˙˙ũ¯˙÷ß˙[h š'˙˙ô˙˙˙û˙áũ×˙˙˙˙˙˙˙K˙ú˙×ûû˙úŪˇŋũ˙~˙Č-‚ŋCī˙˙ũk˙˙˙ī÷˙ũ˙˙÷˙Ŋ˙˙˙û˙ß˙˙˙˙˙ôŋ˙ūŊwČ-Š9å‡~īõûÜ;÷ũļôũü-˙ûĨí˙˙]Ŋûßߡ˙ī˙ī˙˙×˙Õûõ˙˙íëÉAČMn˙˙÷īũęŋ˙K˙˙÷ī˙˙ūú¯ŋ˙˙÷˙˙˙û˙ŋ˙ūë˙ë××ō ÉŪ˙˙ß˙ü÷˙ß˙ī_ū˙˙ūũ˙˙˙˙˙˙˙˙˙˙˙ŋųŸ˙ú˙—_˙Čdˇ „˙ŋ˙˙õ˙˙˙˙§˙˙÷÷īũß˙××˙˙ŋ˙˙_×ë˙˙ŋ_÷˙üu˙Y €Sŋ_˙˙˙Ŋ¤Ģ˙ŋ˙ũ§˙˙˙ë˙o˙˙˙īô]ū˙õõõ÷˙õŋ˙Ōūŋ˙ô ˙˙ũoĐ˙˙÷˙˙˙˙˙˙ũũ˙ũ˙˙ß˙ũ˙÷˙˙ū?õ¯˙ŋūŋN˙˙o˙ũ˙û˙_˙ŋ˙ũ˙ũë˙˙ŋ˙˙ŋß˙_˙˙˙Ūž˙ô˙˙ŋ˙ßũ˙û˙˙ī˙ũ˙˙˙˙˙˙û¯˙ī˙˙˙īU˙˙˙˙˙˙˙ë˙Ō˙˙ũöū˙ÜĄÂ#§ß÷ŊZß{˙¯Ū˙ˇ{÷ũîßMŋß˙Ŋ˙ī÷Amß˙˙­˙õūĢ˙×Ũū˙_˙˙¯o˙÷˙˙˙˙˙˙˙˙˙ī˙˙˙˙ũ˙˙˙˙ë˙˙˙ŋ˙ŋũ˙˙˙˙˙˙ūū˙ŋÛ˙˙¯ŋ¯˙˙˙˙ûũũ5˙ë˙˙ŋ˙˙˙û˙ß˙ī˙õŋ˙˙ū˙ūû˙ß˙˙æ˙ū˙˙˙˙_×˙˙_˙˙˙ũ}¯˙õĩ˙õU˙ž˙˙˙˙˙˙˙˙õë˙ü÷˙˙˙˙ũûūŸˇũ˙˙˙˙˙˙˙˙úūŋ˙÷˙ũúú_¯ū˙ī˙ß÷ũ˙˙˙˙ū˙˙˙˙˙~˙ūŋõ˙˙ú˙ë˙˙˙˙˙ī˙˙ŋë˙˙˙ŋ÷˙ūũw˙˙˙ß˙¯ũ˙˙ī˙˙÷˙˙÷˙˙ŋ˙˙˙˙˙§˙ū˙˙˙éīŋ˙ßú˙ß˙ú÷ü?õ˙ũz˙˙˙ŋ˙˙ūë˙ßû‚)˙˙ßëũßv÷÷ßû˙Û˙¯Kw˙Ũ˙˙ū÷Ūˇ÷ßū˙˙Ūūŋ˙˙ū˙­˙ę:Kūõ˙ū˙īũ˙˙˙ũë˙˙˙ū˙ũ˙ũ˙˙˙˙˙ū˙˙˙˙ß˙˙˙˙ũû˙÷˙˙ī˙ŋ˙Ō˙˙˙˙_˙˙˙˙˙˙˙˙ß˙÷˙û˙û˙˙ŋž×îû˙˙öūū˙˙Ķú˙˙˙÷˙˙ˇ˙˙ũũīû˙î˙ūīũ˙˙ū˙_˙˙úõ˙˙˙˙˙˙ú˙÷ūīę˙×˙ū˙˙ô˙˙Gū˙˙ūÔōC˙×˙Z˙˙_˙ŋūŋ˙˙˙û˙˙÷˙ë˙žũßû˙ū˙˙˙ß˙˙Ŋ.‚˙ũ˙˙ũ˙˙˙˙ŋę˙˙˙˙˙˙ž˙īë˙í˙˙˙˙˙ũ_˙ûú‚ßū˙˙ú˙ũũ˙ë˙˙˙˙_˙ūŠûũ˙÷_˙˙÷¯ũũ˙ûŋū˙û÷dāh ˙˙õ˙˙˙˙˙˙˙˙ŋßūū˙öũû˙˙Î?ģ˙íéŋ÷˙˙÷ûĶOvīũûø˙ūß˙¯ī˙ūĩĒ˙˙ūëŋŋ˙˙ūūũëÛ˙uŪ˙÷˙}˙˙˙ZũėÂC˙˙×˙˙¯˙˙˙˙ß˙˙īģú˙õ˙ũ˙ŋ˙˙˙˙˙ũ˙°„_ú×ßßú˙˙˙˙ú˙˙˙ŋ˙ŋ˙˙ī˙˙ë˙ũ˙˙õëû˙˙īüƒw˙˙ũ˙˙˙˙û×˙˙Ŋõ˙×ū˙ũÛ˙žß˙ß˙_˙~ŋõū˙˙WhG˙˙˙˙˙ų˙˙ôŋ˙ūõ˙˙÷^“˙˙˙ũũ˙˙ũũ{ūũũūđ‡˙˙˙ũ˙ũ˙˙ũ˙˙÷ũ˙÷˙Ûŋû˙ũû˙˙˙˙˙ŋ˙˙ũ q˙˙˙ú˙˙˙ūŋú˙ũ˙˙ž˙ūũĶ˙˙ë˙˙ß˙īûû÷õЏ˙˙˙˙˙÷˙˙ū˙˙˙§ū÷ũw×ëßûūęīũũīôßũû˙˙îĶ'X_˙˙_Ū˙˙˙˙˙˙˙˙˙˙ŋ˙ë˙÷˙˙˙˙ß˙˙ū#×˙˙ũ˙˙˙˙˙õũ}˙ū˙˙˙˙ũ˙˙˙˙úŋ˙ũũ0C˙ë˙˙õ˙ūŋ˙˙˙˙ī˙û˙˙˙īī˙˙˙˙˙˙ŋ˙˙í8ū˙˙ú˙˙˙˙é˙ßû˙˙˙ū˙˙˙˙˙˙˙˙¯˙ũPë˙˙×˙˙ũ˙_ú˙ßû˙÷¯ū÷˙˙˙÷˙˙ū˙˙˙LĐ ĄĨ˙˙ëû˙ũūŋ˙ūē˙ī˙˙ß˙˙˙˙˙÷æ˙˙˙ûö\K˙ŋ˙Ũ˙˙˙ūũ÷˙öūē˙ī˙˙ë˙˙ûũ˙˙ŋūЏ˙˙ßũ˙˙ū˙˙˙õ÷­wû˙ßũũū˙ˇīûÆ÷ŋzũ÷tęĩ˙ūë˙˙õ˙˙Ú˙¯˙ūßīú^˙˙ū˙˙˙Ķ×˙˙ū™˙˙˙¯˙˙˙˙¯˙˙˙˙˙˙˙˙˙˙˙˙˙˙ßēiĄ˙˙˙˙˙˙×˙˙īë÷ßßúũ˙˙ëīũ˙˙ũŋŋīüGûĩ˙õ¯˙ūŋ˙ô˙ŋ˙˙˙ûë˙ūí˙û˙˙˙˙˙Ą˙ß˙˙˙˙˙÷ũ˙īũ˙˙˙ũ˙÷ŋ˙Ū˙˙ß˙˙vpĄ˙ëī˙˙ŋ˙˙éU˙÷ū˙˙ūô˙˙˙˙ū˙ŋN#˙_W˙˙ë˙īë˙˙Ĩ÷ë˙˙÷˙˙˙ŋīO˙öŋūė˙˙˙õ¯˙÷×˙õ˙ŋūßģíŪ÷šCũ˙_ßöģûwŋūÂ˙ūéëõz÷˙īûū˙ũũ¯ũ˙˙ë˙ũ˙ë˙īūŋmĻGš˙˙˙÷˙˙ūũ˙ũ˙Oūŋ˙÷ûū×Ūū˙ß˙˙ßúxá›˙˙˙ūūŋ˙č?Í×ú˙˙˙˙Öģ÷˙˙˙˙˙ßÜ4#_˙˙˙˙ũWū˙_ęžTußģũ˙ßßūß×í߯ŋ˙ëã˙_˙˙ŋõ˙÷˙ņ÷˙˙˙ûūõū˙˙÷˙ß÷˙˙˙˙˙ūŋ¯¯Åˇõé˙û˙˙˙˙ß˙˙¯û÷˙˙˙˙˙˙˙¯õ˙˙˙˙û˙ī÷˙ūŋŋũ˙˙_˙ß˙˙˙ß×ëĪŦú˙×˙íũ˙ßŪ÷˙˙~ũ÷Öûŋũõīũ}˙Ģõ÷ú]q÷û˙×˙˙˙˙˙˙ûüC˙u˙žŋ˙˙˙˙Ú÷˙˙uú×˙ß˙˙˙˙˙˙ũ ˙ũûų¸h˜U˙˙˙ëūŋūųuŪaīß˙÷˙ī˙˙˙˙Ū˙˙ßũĮŨ˙˙˙×˙˙˙ãŽŊ˙ī˙Ö˙˙˙˙ß˙īŋo˙ ˙˙˙ë˙ö˙˙ø˙˙˙ß{ū¯˙Ŋ˙˙˙˙˙˙äā`]˙˙ß˙ßũWūŊ˙÷˙ú˙ū˙˙ø˙÷íbBĮ˙˙˙ŋ˙˙˙˙ŋūß×õ˙~û˙˙˙˙˙ŋ˙˙˙˙˙˙˙˙˙˙ģ˙˙˙î÷˙ŋÛíßī˙w{ŪëŋÛÛ۟ßī˙˙˙˙˙˙¯˙˙˙ô˙ũöŋ˙úŋU˙úũŲ¸e_õ˙˙¯˙˙˙˙āŋ˙˙˙˙˙˙˙wßú˙˙˙¯˙˙˙˙ú˙˙˙õ˙õ˙˙ũ}s5}}˙ß˙˙˙˙ßû˙ũũ˙˙û˙đũ˙_˙˙˙˙˙˙˙˙īíúëģ: 4˙˙ī˙ß˙ūŋŋú˙˙˙î˙Ž÷˙Ūŋũ˙ßīû÷˙˙ĩ˙˙˙˙˙ú˙Ŋ~ū˙īŋ˙˙˙v˙˙˙ßũ˙ëú˙˙÷õũ}˙ũ˙˙ū˙˙˙˙˙ū˙ī˙ŋß˙ûßúß˙û˙¯īõ÷˙ûīzß{˙˙˙ģ§ŋũīŽđÕ˙˙˙ú˙¯˙é¯ũũzû˙˙˙˙wû˙˙˙_ûū˙õ˙˙˙˙˙˙˙õūŋ˙˙ũ˙˙ŋ˙˙ŋ˙ßā˜j˙˙˙˙ß˙˙˙õ˙ũû˙˙ú˙M˙˙˙˙ë˙ã_˙˙ū˙˙×˙˙üO˙˙˙÷˙Z˙˙ũûöŋW˙˙˙×ŋ˙˙˙˙˙˙÷ũ˙˙˙ũŨŋ˙ũ×ūīw÷˙÷w˙˙˙˙¯˙˙˙ü÷˙˙˙ėÂõ˙˙ŋ˙_˙O˙×˙÷˙˙×˙˙˙˙õ˙¯˙˙ũt˙˙˙˙Ũ˙˙˙°]õ˙˙_˙˙˙˙_˙ū÷ßßßŊ÷˙˙ŋK˙ũŪxĀ7¯õ~ē˙˙˙ŊëŨ_˙Ę?ũ˙Į˙ŋßí˙žßīīĶ#čG˙ú˙˙˙ūŋ×˙ũī}û˙ūŋ˙˙˙˙ū„Gß˙˙˙ī˙˙˙õ˙˙Ž˙˙˙˙ß˙˙ūŋīĮ˙ī˙˙z˙˙õ˙˙˙˙õ˙÷˙īũī×˙˙˙””˙ë˙˙˙˙˙ŋ˙˙õ˙˙×īû˙˙ũ˙÷ôAÜ˙˙˙U˙đ˙˙ū˙û˙˙˙˙˙û˙ß˙ũ2ņ€Ÿ˙˙˙˙˙å ˙¯ē˙˙˙žŋũ˙ß˙ü?Uëú˙˙˙ū˙˙˙ßī˙˙ūūž÷÷ûęīõŊ…{ˇöáĄ˙ū÷˙Ũë_pą˙Ģõū˙˙˙˙˙˙˙˙˙} ¯_ëz¯˙˙˙ū˙ú˙Ŋ˙ëz˙˙ũ”?īúŪˀĐßũŋ˙˙ū÷˙˙˙˙õ˙˙īOûī˙ûC˙ūí˙ūž˙˙×ú˙˙˙˙˙ũ˙û§˙û˙~ũ8ũ˙˙˙˙˙Ūē˙ë˙˙ũ˙˙˙ūūŋwŋ˙˙ú˙××˙˙ŋ˙ŋ_ßū÷˙˙˙ßÁœ Ę˙ūŋ÷˙ŋ˙˙_˙ûûû¯ũ˙˙ũô#˙ũŋëũ˙˙û×~ŋ˙¯Ŋí˙˛:ûßŲ:˙ė!iz˙õúūī÷˙×[û÷˙ũã˙×˙вá°Ā7/§ÚŽŋ×ēĨ_ū˙˙¯˙˙û˙˙ī˙ûú Fƒģî˙˙˙˙˙īû˙īūū˙Ú˙W^"$ Ž"ČėŽ‚—ú÷÷ũ˙_˙˙˙˙˙÷÷÷aˆˆ‹.28ˆ`x_û¯˙ū—˙ûũ˙˙ũĐ0B""$2ĮdpÎq)Ų(pĶģ[ûũ˙˙˙÷ī_}PˆˆˆˆŒÃ7 Á?˙˙˙˙˙˙˙˙¸ˆˆˆˆ‰ãĶôũûũī÷žĐˆˆ‰ã—wû˙˙ū˙ž„DDƒqČ8koī˙˙ęGhDG[˙˙īy<„˙˙ë„˙ŋūmđ:ƒG˙˙Ü0B$ Ã,˙û|‚Įßß~¸B>÷ūô?ũô?×á‘Ā|áŠûÚīų/ÖOĄŲIö˜B"8˙˙˙ä €Ô>?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˜3Gã˙˙˙˙˙˙˙\Į˙˙˙˙˙!˙˙˙˙˙˙ü€Ān>?˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ųđ5Á˙˙˙˙ōāhņ˙˙˙˙˙˙˙˙˙˙˙˙˙ * Ŗã˙˙˙˙˙˙˙ųX, >ß˙˙}bAĄČƒ<ō°ËH9<(OEš,(áē!‘.×JÉ9øe@˜ Õ×}"Dd Ŧsų¸āĀôí‚07Ą\õ‰ôčH#jŧ (Røyä;ā˜IÁ@xDčŽ wąû熒á€ô„ƒHåL†d!ļ9!ũUÜ ‘t0†SčÆ\Haą÷û×ēD/ ؘZUEø˙ߐƒƒĀætYS+ †‡!šø) ã™ĘƒŽĖ&ÔO˙ßĻČâ‚TÍj„e93\D8Al4ô÷}˙˛vĸpũƒ,r0Bd2‡Uô˙úiņ†aÁƒë„ Ã•ˆ`¯b5îūņmHū!AævGĄū˙čĖĩšî‘RŠØpŠ.ąbĪ“Ôaūũh/Ăãüd‘Ņ4< ė!ˇA÷˙­ëļũ%nãô‚‡@[˙¯ ×dcĢęÁĄ‚`×j"ŋīøqņí$U´ũ$„a‚Îæ{ _ũߡœ}/ ‡>•lĄŪC" …Ž­Ŋŋīûô-¨4úL¸ZÔÍđkBÛ}ÕÛîLwzToŒĖdĮŌá.#°™Įta¤Ãļė6""’Y; bHdCérpÅâ,_aÂdīũ*h1r ßô;.‰,ƒ(â/ģ3đøāŨH`|uWC šyÎCHs9ŽCŽ#[ŪĒä ų!×ōÖũ&ŌŊhDë”āĢ{ĩÛ!°…Îûë°Ļ0Áļƒa_mČ:I´_D~žē_î-äņVgǤ5…_<3é=^Yp/ Ũ+[$qč"<ūĶû ßR?Ą1‘ĖĐlÉ]Lc˛´Q]/Ü0Ö¸ˆžf:X1…# oAŌ[ČjaĪL/ÁÖČXõûw'oÁ‡´Aí­w… œ u÷¸!Iú¤Č‚{ļAÁĪÕĨ÷_aá-9 ĩúMĢ÷Ŋ.ūjˇņ­čCO¤ ’īáī‘Gô”…}†×ĶĩæđŲôĩÁô˙ũ„Ÿęē$Ėę¤cđܛ•5÷ƒ4zũidAÚ]Z[ÁPƒ*žš5BžB!”>#äŪ pChԌc~ĄI0ÛL/ˇøzA0Ķ>ĶmZvƒ˙Á†6—ŧæŋõ ]&{ē~šõ¤Û ޏÃuuäH¯iî@=ÕôŨm:mŠ™¨lXz¨Aōp’n[Ĩßú˙öí_ūŋ× ĻĐû}tū’Ûa;ļÃL†ū¯ë"ø†ž¯û­pa‘ Ø2×ŌO÷ƒ¯}=W×qkV/°ŊUČĮRßÛŋA¯ũ‡ö•Đ_qڙ¨×é†ėnō]{ˇënž‚j˙ũ‡¯ĢmsŋĶûKnģiQ 2}U5 .ī mĻÆš‹× wCčjŨ.ĐTSƒc"ž—Ū×Ōî”÷ ¯xī@Ãv7Ķ´ŋ˙ûöfí¤Xī˙tíĶÁW˙¯×aŋkB Š&ē}>ß=Ũdh5—ũë×íŋ‚.šŌõģû\”¨éd#‘ũv˙C†īëŽŨUĐ[ļŊõČfsWd4X+$ ]W÷kûÃßūŋûmj†ī ‹"HØđE=īßĨøˇõų#}+ ņ#Š iÁņĐĪácūÃ_kČlĩx_¯ œ|{ˇ/üƒŠWžõģJ°é}õX^ūûWëã S ĄßX$Žn°Å°Ë„úœŽ˙ÛIõ¤īDlEÖ5}üÔm%ō%í}¯ŽC…ü2ŋÕŨ—tûmu§Åũņū…é§ĶBôžîü—¤+Ũü‡ũnÚ0é?ģ ÷Zį‹Á™ÄoĮt˙×Vßá4Ŋä54õšÁ¯oöˇ¯ŽŋŌ 7W‚ų Č:>ĐÛ˙÷ĢÂOŲĖ#ÁãˇÚęCd!™ČÄų-}…÷Ágũ/ÄCīōÕŒ˜B“u•0Քí­×ž ÷Ąk+—{jĘ!áĩ•jî¯ ¸äŸ^ÆīÖü4Äl0a^õkÛ¸K˙Č(îUžŸĐ<öáęũ§ņū×đ_ČAIO¯”ø´H}Ō˙uû_˙­û‡øf|īwûü/vŪÁūk§cŨ}Ų Úãģ˙˙ë­{˙÷ŨģŋũûĨō TĒ˙Ūß˙ũŪũ|†Qwüžėęŋü>é♘JéūûûōM_īčÂÖÛážÚ×ũwöŪ!-BģíöŒī×õŨûĪ,%ŊīÛn‰ž^#îۇ×VoŪ‚~KŊûĄÖŪ7ūŊ˙Ŋ}4ˇwx•8Á‡`˙˙d@ÎīV*ž™ öģmŋ3ABĄ˛:[ß֍y a–ßĨ­+ ū˙h’‹Ū˙ÜČ Å/˙T´ā‡ûڒ0{ŋęĐ"S”ūßŌ折Œ;Ŋŧã¤z˙ôx‘ļíĢ{ú~íüâ8%{ᄄWo˙‡ÚO‚4§‚ëîû7ž¯wzd`Ãûū…ļŋīĩHƒ,6-§ī꓁ 6ví8”č”i1^éøŅ°`éƒāS9{ úr7S îßqB‘7+‚_[ĒHN’āŽ `܎0Sî˛>Ŋ*!ôī‡Ú´IE|Ŗ¸P˛a$"„ē}˛8´ÄwđŌŪÛŊŗŲ+@¯T"7J ô† ēč{UE-ė‘ŋuûvô)-{ĨtB¨<Ɏ-ÃÛõA2;=ˆĖīŽ0ũīX‘¤GûŋH‘eÃUöÔ!^˙Ķ­Ûu„4ģ{ m(ž ' úČē$cˇõUÛí8/ū×AAŗĀęÛvĶžĪĄƒũkÛn“ĢŨ:× ™ãČd†qė]øĶí֗ûƒ3ŽģƒEūŪ@Å˙­îŨÜÖ Īīˆđ‚I‡`‡yvČ4ĸ!ũŨ÷īKŋeYnR)RVáĻAąŨ×yŪPڎ ņ^âŲ˛K×ׄI  tīŊÛy3KŨ¸”>Ųv›gŪîû­$؟¯ČMÛ7*b„F:sōŗîF„ ėC`ÛK´ūôš¸Á6CcäŨEŧ6ˆ¸Â Kđa&]íąM˙ÕbŦ†cēĶ÷vĘBCõÃĻží´˙ÚŌšāUŽaōÃíˇlč*Ė˙Ķ^Ũļ¯žÔī 'pcū™ ÷×lØĸĮM/Z’3ŲÛĩäÂßJëjAqįG >¤QĐ"ŖˆŽŊĒß{]Ú‚m5l…(E¨Œ$ŌîÔ%oĢ8 Oq¸iŊ}Ipu´FéĮ)ʕäqÛvĒ×Âa{mÚģW´ŋĐ!mÃékŨízú‡Ú ŋŨíBÂF@‡m-) ×m´Â˙XOw´KŸũŌt¯Kĸ1ĸãøõÛŊu˙ļÆ _ģTõ)ūą@ã>‚”aû}…ũo†  ˙Ū´C kŧ?Åî×ī¯vĶIxkØKT Â÷õßMw^ˆt}ˇA”å>ÖēĖČp@ûÁƒÃ3ž+Č܆ÁīMvŊd¸íŧX÷acÂ{Ü5hCŨ1a_ū÷b˙šÁāâĮû`Ú ‰SÃU˙ãņo. ¸ģo_ÚûpŲ+?wˆ"€9˙Á†!Švk>AĻyë˙îʀQČŋ˙ũa°ôB#zi5]&j{ļTCG\;Zkī"AÛļDĖ$h7Ōr6ŠP[îéūä˛1ĸƒPæĩū›¯ŠX˛P-úôĩļų@J;]sõømæŊ>üЁāČ-?Uv´š*ÁIŋū›dŦŒvî4žCCߎßAÃūÖŊ}‘ũ ¨”†¨zū˙§mÔ§%øõûl8 iúŲ¤fˆņp<5LeÂŌõÁą]-ė=ÚūūÛĢ˙´éŊúpõâ"$Į8æp…é}Sn¸žŨ.…§{ᯭVģl6MíČōM?”wmũH7ؚŖ+ļĮáˇ@ĶīŨĖ}ü7?ˆ<6šūČ˙đa´ÎzÄ.õwũÜ?\‰% îŨP+%Āđ'":wâ?ˇũt˜‹ū™}é˙ä ČāG§Ãç ŅÁĻô!ÛŨ7ļëŊō CwÛR ŽÛu@˙q8˙ÛoîNhāÜs8MSûÚW¯,ākoūɸm¸[Ķ\Ŧ Õũļ÷ĄnēŲc˙oîŧXĖÛŪŊģI§ëNŌ ŽÛÖ¨vˆÍˇāŸí×˙ ėˆ?cíŨS˙ëģl1Ĩ x6ô÷ą~Û mšƒŊČR/Ņ͊ŊmˇNũ{i ØvԓFŅvGÃ(äbúÚoN–íœDm9ošcāˆũ°ūš˙ ¨[\;c)ĀđŌ.Į×ÛãŋßÄGą!ĮūÛøŠCÛá,ŊûūŪCmt>.Ū˙[û ą x9æ˙ûÛëä3u0îĢ EƒējŅ_ÛmMJīÂųDü3ažŨõģûpЏéC/cwōzvKË'oäøUģú˙ÃmČ ˜ūž-ķéūxhmŋŖ 6Y0mČeu×ÁŲ „9āOŋ]-ļ†Äm„Gä aqmąßI¤đÃâ?ų ĢũrĮ^!ŋĮŽÚūë°Û˙ėVH˙|UåÚ褠5†ûû^ xÃÍūŸäc‚ģí3Ū/đ› ĩ×m´/˙LĐÛ˙û\&Sˇ|+Úöd˙Ŋá;ÕžAĸŽé} w˙ĨØl2ŒoßâũūˇøAoL†w 6 ˇĨÛa˙ëļŽ—xzā‚‘ŽSŪn2†Ŧ" ūá†ÃĩžŪšw­-ũĨ]1mÄHl‚­üŦ0aŋ×ßá+öúT žļD_ŽđØ7ũû_]ŋĮA}2 Cļ-Čę]Š}ļûÚüˆ=};{đ—Ķę0SČd[îԗāÁ°wú~Á´q÷mÛĨ ÚÛ Y8ûKxa†ūûŖ5Ũ‚ôöᏝŦƒ˜+6 †@@@ļđī˙ô+ÃC~ũ¯§† Ă C9Č Ŋ‡vģ÷Ĩš‚cßŋ­ũ‡lây €×Á"šP ä @›ŋØ[hY#Č3Ũ‡ú~ŸŲ”S†Hl 'Ûë˙]Ž÷¯ūF‚m ÚhY k!‰˙ j û†_ Wwũš\†ša‹Xŗā3ČĀ@ÔkëũĄ}Ķålæ¸ūžū˛ ˜@ío%OC˜mîÕeP>ßr%W_Õō'ˆ`û¸4ũŸÕžŸ%žI>˙eDƒ¯*ȁÁ|~#îą&tšŽßâĐEÖ >H_ûŲxŽ .˙û÷Á‹[Ķ甁Đ"?˙ ęČbÍA/×ŋmģ ÅČųT2@eļ :ëÕ8‹D⇀Đ(JuîũõgŗHD7ņŊ…ƒi‚¯Öž’$ ič=ûAžÂu ¨0ņ$ø">Š…d€Ŋ8˙ÕtųWũņ÷í S ~/˙Nđŋ˙WNÜJÆGē#Į‚ū’ĮŋôúO÷ų@Vbä ĄBĨõúDFũõ§˛ HEL-*Ũ|Ė!5éz 5 ĩ{Áų=ļȸ¨I/ū×˙īKŊīäātĮØ7B‘Uī˙IoëĘŋ_h, ßöä˜k •}į%{< õúŽíd…Æ˙ā„[ÛsP2Ė ]¤„ °Ø":m×ēVŊ?ŋČWv́ZD>?^aöëũĨ_ĩ5˜*ú~TÔ {ĢĩüCPŨû]o}ƒí ö›ä@C5ž+̝éƒúíũŽ, Ÿá>ë]u3J­ô Ņ Ręö {įķu vöŋ˙#ĖrUíģáāÁĢģĐöš˙ũ=ņ˙ë|@Ô6ëÚ]‘õw~đûü *oŽ­{\=Ũ!Û°ĩYĨGRíd]=WĩŌŧ¨)ˆÚÚŪ÷Ŧ|kÛéĒūĘo}•Ÿ™åō<ƒ ŧûú\Ō˙īŽ-(ß j ūÚáß×ũ°éŪũ~QßdÅđÂļĶo˙ t˙—_ũ lE÷Åøkõõííû ŊđĖ_­ŅH{˙á­q˙Mma‘gŧ苁Ø[á/Y×ų }U˙˙÷ÅęíÁ‚ŧ"cŨ zXaūšĶ/Ģ"ĮYūėđ€‘Ú(!ļ8OĄëoūÂ3ƒôëx?Ēí §N‰ŋūš lŅ{âīÂĄûļÜ&0‚™“÷ßW M҃ë˙Đ­ō `}a[†l]ÁXKũßāØuõū‚)úĸ ¤9ÎDšdGÛqe .‚öC:Ôˆ9 €(ĻÂ˙V:ôĩaÉ’9(BÁ ēmļ?˙ūlWwŋČŌ¯ŽéxČjĐŅCn­îˆÃü3ŽC@÷ëD=ĻÚzü†HnOœGҁNŪa]5ÄĻļPéú‹´úޤkëĶŠŒĐD#AŊx|5~AA‡Ąˇiŋøū•ĒōĨËŗ°÷tÁˇĮW*ÚKëGęūöëĸƒIôs#Ŗ 5˙í†˙ŅZĢëwū´Č@^Đ4H~NƒQ{ēo˙vžJ˙ŪÃVžŧƒ^ŋ´Cdč0DŨvˆjŽqČ0r¤ßęîļš´Ĩō.ŋčŨí'ëđĐČōh$80ˆ5DO|Ķūũũ š}¯ú[ĩJ“˙ÁI i]~A1=˙PvåĐ}ũäZũ×Ĩ˙ÖC5ÄĪōtk°÷FĶĒß×éƒxA­_õŋÕz!ĨDšĨ@¤¨‚x’BôæÂŋéī˙ûWēßĨû_˙TûČ=3BFŋ jļAâĄN Ũ˙˙ˇĢnš FĩOÁõnĪ ˆG!‹ōĄš¯8ˆáĄ7M˙˙ūûjØnŠūēO˙ēFâô†;ö}˜H0„G× hŽŸjēo˙ū˙ô­aˇUûîŋöڅŽ™D˜B#א4{Oú˙˙˙˙§ūšoúUIú„ų}ĸ G fƒTpZkÛÃ˙˙ûK ná;˙ĩõ¤úT՚ b q÷Ē}úú˙[˙ũXtŨîôÂÖĩ^ŋ˙!•"#[ʈ‘M¤“hŪū˙ßŌo˙å7‡P†ŊÚYUĒë EF„ØÁŸīŽŋūû˙˙æą'ļGLzŨZãũ×ŌüąÎä Ã8˙§ęßū˙ͯī˙ôĐl[˙á-}ˇUí¯@ÁR…ķû˙ū¯ũ˙ū›o!–:˙Čߛk__üƒI\ a­Ãz˙÷_ũ˙ūōFĻĮv Ŋ jöŠčzÕ.ĩĻm˙oũ.ģ˙˙w˙īįeööŠÕÃČ0O¤íÖ?ã‘˙íÖ)ūŋõ˙õžŨVīWęÛk¯ĒA˙Ûkī˙é_ũ˙ß`ÚūXė/úØŽŸ D|ā(‘lŠ˙˙ÛĨÛ˙kL?Iŋũöģu¯O¯ŌĨô598ƒ˙˙ö˙øũuûÁ¸ä—^÷Ö˙H‹—˙OßŲū­ŋīūūđÃŋ‹˙đēĐO˙­õõņāģ˙˙í܁ā@dÁŊmĮ˙ŪŽŽ„úm´—ŋŋ÷˙õëÎ9œ0SĨ Ōõ]W¯[tCÚd<_˙Ũúųą{ūŋ÷īˇb$6Ayŗ@U"Đd=/×õũũīFh‡˙îŋų ˙ü˙žÛ D†˜äĮĖ„…Ądp&ƒ~ŋ¯×^öą3W˙ũéūl˙¯˙˙Ęƒ„Gԇ§,Uû̘Ã!s{ŋaĨĢūß˙ē˙Ũ1m<đWĻũ+˙¯ÅČĮo˙Øôŋ˙om˙÷Ûl~ŋ_˙ū˜"‡ŌÕŋīû˙—_˙ˇ ëúīūžŧØhúZN×˙˙Ûëī˙ˇ† Čîõ˙×˙˙ōČęÚŨ˙ũ~ëāČXīmĩ.cĩ4:ūŋúßJC]ô?ũũ˙˙Û_ŗÁ_ĶM°d 8!CEDcØ9ā‚îW_Š™úš"8a:˙ EBõ˙˙ūŪ˙Ûa/ĐŨĄ`Ū8ƒĢŖR.Ī˃]ĘƒģküâWúëú˙˙˙ow†QũĻ\ˆm?Ö.2 ōČg {rĐ$#ũ˙‚*=|†glØlÚũ˙īöŋ%Æ+h0„XŋT ô,§ ÄŅDPĐ7_JCÖĢéSjŋĸ€6V¸ūaūŋÕū͈:úŨ˙a"V‰Úb×öŒüØĢí˙‡˙ä1 -ūëũ‘*ú Ž2}öŋõŨT7øõK˙¨&D?˙ß˙uˇ¸*ģ0PYpđŋët›__˙ÉūŊ–Sŗú3FúOîà ˇžô,k×éú&Œq[ë×­ ū—æÛ#˛Įū`Ũ{üōP†Sƒ+˙Uŧ&3x6—˙­¤ŨSĀhLĀÔ6žŋĢøD3״ЈƒõŽ×X†0Ę/˙ķb‚ÛŽŋm›ũ÷ĢᐰBV­mˇĢĢëd#ÄRë×˙˙tC>¤īīaRX†žā)Ā˙Ũ4Dn֐Ą_ú×úõëëq.ĄūÃ+õ§×úKOŠą85õ˙û~žžĐš˙ū"— ËåĀĻīūģžPô ŅcÕ¯û­˙˙ķ –˙­Ų„G˜+´˙Ōzč?}ĩĸpƝĶézū¤&°4ūĄ„ĐˆÉė¨!ĄČ˜aëŋˇ˙!ĸĮ‘€Į˙õę×õÆČ¯ō öâ$2CņæAļ¯ú÷PĮŋ ¸wõ_ū¯×ü¸wũõÉAXO v×_éū×Õ2#Á8g”ëŋĢ˙ūČ0ū¸q!’PAánsy°z˙UwČĀ&éŪ"$})Ëęû¨"?¯˙ũĩųŅ ĐÉNy‘4îĨD$mļŊ-ĸzuūĒĻ6ˆÔ…n›^ę(RĶ­RĒÛëhDHdĖ\büūx)°í&ņī˙"¸Ŋ÷˙ĶųÁ¤?÷÷o˙õ˙!Ž+“[öpõ~ŋéé˙ÚOäĮíôÎ˙ī d @Üsœ‹^Ō8+Ũ{W×ßĢ[W×ZVô‡“ĩûŦW˙õųPË˛Ļ†žœO˙א:†ģ˙ũ¯ũ/פAļ8ą_˙¯ëíúŪ5M˙ßá˜Û˙ĶXŪÂ_ūĄ đ<2’˙Ŗ˙û˙ hŽBÂiŗa>“˙˙ˇw˙HWK˙ˇí}H{úūģK hBé̈́{hQ­˙ûVĪ3ëûë§UŌG!P@đđí˙ēׯũd Á@ä° úfUč6­ŋ˙øāÃ!Į ŋK´šŅ=mÚZA–b×ŊUü%÷]t˙U¸_÷˙˙đÆ˙öšÜžZ­F–žČļ[‹]ãöū–AlĩžfŪ°ƒĢ˙^˙y¨)D“Uûûܓŧ"?ôVŽT'Āđ1˙Ԇû==ūũ éoŋ˙˙~| Ô_û ū×˙ŽôBEĶ‘Ŋ:uÆŋŊ:o˙˙˙ר{#āų_¯ū:o_ū †C<§=uõ ÂMĨ͉ŅĩIô—Ú˙˙úŧ_wŊ|‹ĩú˙ŌûhØz oõŋGŖ×§éĩŊũ[˙}Y ĘSē˙„éßīKôž¯{!Ž x}?ŋZtŊŋßũ§¯˙čxÉŪXęū’ũuĨ˙ú5ā‹ÖĢø#ūß˙uŠŪ“k÷lΰđʲëy '4:Ú_ĢÕ~ŨC¯˙æCŋ˙k˙ūũløUÅ2<ú_%Otˇ_Ē}VÅė‰÷¯_˙ū:ˇ˙ŋ BŪ 4´ü~á*zëūī˙@ŽėßE„p<5ũkŋ˙ú_Ĩ˙{ƒķXfZ˙ãë¯OXßJÆl0΀•˙ļúßĶ~—˙Scž@ėaŽŨ~Öė"ßø5ûëũ5†wē˙z˙Ģô ĘÂ˙ķ`ŨmáCeũđÕ˙6Ũ˙ú8+Čb"á„ŋß˙Wũ‹ãVūlīy°ZŊ{Ô5´Đ˙ôÛ3 }W§ōđ¨ x9 u˙˙{úČûxU÷˙oļSŊí./˙ėĄ˙ũ&ũ‰ ˙˙õ¯üX}S}?[ûÕ&˙žV Á„%ŽgÕB6.ˇ ]ôū› ×˙ Ő$Ÿ˙˙ߐ;tõ˙î búđÁ‘˙õũëdæ@đĪzõũ¤úöüØëī}ĻûA‡‡×ã‡ÉĨáŋqoUIēõæĮš€đk˙üŅ?oÁŋ˙ęņ v“î×û_ kūˇô¯˙ĐßûuÅõ|õÛ3…í/|‹í_ų˙ÚĮÖ¤0?ƒ­Ĩúŋķuũ¯é?Vߡõ˙ę=oô:õūŸŋ'?¯]x‘áÔĖ˙zŋMŋ˙Äē˙kä%6ÖĖ R€Į*ŋ÷MæĄ?ͅ˙īû}ũß˙čƒ €Æą_ø˙×ĢŖ|†qŪKģūûˇ˙ŅB#īúũß s‡*…>˙Í ĄĩÃuŋÍĀ•ũ¸D-„Ä?ûŋūßüĀ#˙˙nˆc‹"ED˛Đ×#õ˙Čí'ë×ÕŧāŲũ˙}¯˙Ú˙˙ŨĒwīŧˆ €Z@š ¯đŌ˙ô¯˙ôŸ˙ã÷ō ž˙û˙ļ|[˜ôŠ>x(M‹ÕœzÛ ×+ī˙˙ė'_˙Û!Ē=ëŊ~—ûqīiĩö„";˙õ^Ŋ}Đ˙ûũ ˙ûö׿q9Ũ¨[zdHķ´˙˙č&˙_Kü_}˙ëĄČk::Š` .žČâŊ'˙˙˙­Ģ­z˙˙M<ābūÕīūûú×˙Kūˇú˙īÕČeŌoã\˙˙øŨéukë˙˙~ī@Ō!/!‡"ōX˙˙¯õõĮŌOú˙˙­‘+ßMæ´Fo˙īõũ÷ë]7ZũjŊxMƒ#´}HĀ<3‡[k˙ũoũ¯ß¯˙ũŋüؗšĀčöȰ@đ`ũ­{úú^ü_Ŗ˙3?Î*˙¤ä!29Žš ĀđQ{K˙ũVŋü?ūœÖ&ĩjúũ&į<#Z.@hũŗm&D{Üä`ß~ũWžßĢ˙ũ×ëúũ7BC:"ÉШ˙ĄœM1}B×˙đŋM˙ë3?_Ļ‚˙J˙y°øŸŽ0,õZ7Ŗ‹Ō~˙ņlūžŸ˙ãųĖŽ_”?˙ú­LvŸū‘ zb×˙ߥ˙˙˙ô"Ģūū˙͋Č0˙ũ?˙×užÚ ë]ø[ii]*˙đ÷UęŦ:K˙īœŦô]˙o5ũÄ#`˙œAoj˙˙÷i˙Š K=†īMÂũą’į˙­zú"ßĩk˙Zīuúõ­!'Pc˙ûuīžŋ˙˙õ}U¯ˇŽĢũ:ß˙ŪŨúļ@æ ûkũûúß˙˙˙˙ ĻöD§˙ûūAqûŋŽ˙úûú¯ũ˙úëō$`A—˙˙únâ×jŊí˙Žŋũz˙øĒĶä;˙ũw˙¸´ÃKī˙×ū˙ßö˙ëô°Ų ‹§ûöí˙Ģ‹Z­kúõ˙¯ŽK]ë¯lØc˙˙đŠŪëëúũū˙ūˇūũ~—Ķ"÷ūCļņw]9†î|ŋũö?ú˙÷éjž’úGĻBĮ˙Ō˙ēī@r8 ĨÆžjEÁī˙gpW˙ŋOë˙K­ ú˙ß~ëÚíę"—“ˇ×ũŋl/sęqĶ Ö?Ą$Ŋ}ë^– Õ[K˙¯¯íkĶí¯öôž*Ū`+ÂbCF]kßëũywi˙q÷û˙ũ~@ĀÎŋԆŒāŌëųpO˙ō†ŋ×˙īúđ˙ģkˇė!oČ/Ą Œ}ŠĶ§UnĩôũÕ´—ú¤ũ%ëö÷UuģčԈâīŋëëß6(ÃZY;˙įē˙˙mĢuvaĘuŨÃ#ŗ`s­Šã[÷˙ã6du­>Ŋa>ŸĩĨļÄ+RXˆ¯Ą¨"Ą Ԇ@hũŋúúĨņwßé~ôĢ.Ö0MĒhKĢņj‚o˙˙ûģūīõ…ØÚÃ6ŒiĮ˙H>‘ pƟ##×˙Žē_õ§ ôžƒ<ŒÔ ?˙éüg ”į˙˙Ŋâĩ˙†ŋĨ˛„Ã6ЏũĨzV…k˙ūųh(%íĮë[0ˆ×˙ú6%E¨wúú¯Ąū–ëđ–?ëū•7vAÆ—mWûŪŌō‡æŌ˙ũ.Ŋt’y€›@Åä0w˙ü`ÂUûä8ëūÕŽ“ī¯ihæGų Y¸e8-ČÁbŨūč~>ŖU|WKIē-ņ( ‚Ã=?ßč‰iÚĢú§Šũę‚ī}û"āQ¤{ëøj!ŋ˙_˙ēõß­„äaÍ /÷܆>SĨVŋ=ųÁ¯˙ûhPCgw¤,ŽK˙ōŊ,õ°Ÿ ô“ô’ĩ˙\! Š A3ˆ*Ö¸†ĸąŋÕŋûūąëûįü§Áas¨]ímķģ˙˙áŊ-u×­~ŸĐ2ô’įņk_˙…ˇ˙ ˙ƒÛČD͇_ˇ×īÆ˙ũ,?›āŦ…‚p@đ+ŧzׯ˙žī˙ũWē˜Lū˙׎f ūŋ˙ĸødaŅĮß˙ųĘŨj“˙˙ĨxĐūŸú÷\&Áƒ×V˙ęļᙊĨûņũļŋ¯ĩūÚOŠīú˙¯ŽAKģ4 ŋĮ˙Ãáė Û^˙×Ü7Åũ˙ëI^1:˙čãaøé×˙˙ė/˙ŅŽŋ_˙ Sząí˙ÕũˇÁ/õ¯ū@Ļ%?ÖŋČa˙æÆ’o_ŽŸū5ū¯T÷žžŋÜjŧU‘Æ7Į˙ī_˙Vŋø˙˙ŋų˜Ÿũ¯ŅÔ?~œ†ŖÚ[¯ņūøû: ĪŨvģ÷wü† Jöąm+n˙æ_5ˆVņ؁׃]>˛…ų€O3GâĢ˙ũußä}ø´ûoûé?¯6 Π¸?ļīūҰ¯˙ŸPaÖ@AÖēĢáö˙‚m¤Ũ~ú_ÖC*ė#‹ūŋH÷éo…1ŋėĐG Wú˙Ķë­R˙Äm?˙ûŋZëä ˙ė'qËĪë̃ ÂŌ­Āę 5Ļt‚ŋũSŠūŧP$â#ŋ×ī˙ųä›[ūŨwčĖG‹ŋ˙ē8(_uäÂ#nŌī^čI†“h†PģŠm|ƒÆ˙ÎoÁ†&Pß’÷˙Ķk­„@ęqøuũ_é?Tf<Ô07cúß_ŋÐķ Ūy BČÃ7ĘĘ":ˇ˙_×Ũ>ÖŒ0ƒēq]Ŋ×pŋŧ0F€C Ä9;_˙uz¨7„Sî#Ž"ņKīOûāh> CWGŪ— ņßuŋ­„Ž…­ŊûŨâĪĒ ˆŋ¯íúú:dtG˜fU‘×ĮūĢ˙ÁŊdtˇ÷ČĖē˛Đk垜G€ÛU¸ž–ˆ/äü0Ž˜XīE8ĩÛ_ō-@äĀ.9Œ÷ŲPU+F×õƒd˜RáØŠwČŗđHđ.Č0LÃāˆ4`9YqKtA/Đ%ČW%8įrøãæ€zū"ĶMí×ä3,†­xB".":Ž!õõ vPä5Ґ%pq€Ÿ¤5ū.6…„t~úŽđK Ŗ0Đôrųm?ÂZ6e‘Ė#á‚øpˆeFBŋÁÂ˙ l ķ0C §Ā˛ŋõųĨūŦ_¯Ųŧšúč!0‚ü x1™PRč$ z ÜD6qõōU@Qp&œ&Í"ųq‘Ü˙ר‡áđEüƒÁDDP.˙ü  CŌHáŧĸđN…æ uOøø ŧ†e‚đUä Ā  xŖ?üāŋđT ÚQ˛āˇČ†VzũūDŋíÁ?úqᐠ&ž,Ņx"Ÿû_đÃHRĨPHt@€˜ 3Ã\„čCˆõØ#FŌõŲ ,/ՑÖPX!’ . B.˙8hp^øbĢü[FaL"éÃČd†š2‚'ÕQÍ}1û˙Ã@„Xy >ƒ_Uë8˙ų *Ёáą?á-0“ęM €'ƒū ]8LX[ō's¨Î€<2ø@ŋ ÷%Ã$5(D€|õđ’ļŦ"FT@->üQŦūŋnšądGÂ!î|41ž G^t›)đēëX2 C§X:$H/ x6Z8‹„1ƒH7õ Yܰš@ÃSb9`g¯û„ĘģčSđHFĐ'õ°‚b$r($0aw(•_˙Do# 4ߘžžá~ŨĐ@Âof ßaļģČ!ęĩU•zôBY g÷˙č9›øú[d2¯ī‰ĸ/‘ĀĐ1]'ûĸ;´ˆ ^#û#Ǟ:ØÁézŦĖeōčEëĢü‚# Wų!ÉiÁčâ‚B Ö@ķĻĄúčDģúV‡„/_ØDīPˆ€ČU_üƒ@˙Ĩhŋ÷˙Đt¨¸3 A]ŅqÂ%­üm}˙{´F'xA~5Ą7˛8˜.^Č/ë^ˇ˙AÖ%Ã?ĐYÎ˙Č!Â# ŲūŦĢuöŋūŲĩ@Ūá/Ĩ]"1 ¨Ąĩî°]}¯˙ōÔp˜=P"‡í/Č,Rā\/đēĖyuņ˙ũP=§đÚ|6—iN^JđÎCĢĶ5ô•¤˙^ˇØ!ō>ŧ Eƒom¯gtžfä ĮUà ×õ˙úoä@MˆúBĢPÂYąG$G ‘ĶĸŦcĨūĩ__åŗ˙Z ČdXŸbÁŠød|§˙úŪ‚ī f`xcú Đ`„†H5 .$<ß'įūē ąë˙øOũĢe:6 `\ø.D€Č†Ûũß´'PÎŖP-…ąWÂß˙ú ŋ1Č8…™”:!r—ĢĨPPõĸ3 ,×ũũ˙˙Ų!Čw&ņ…÷ũÃ}ÄēķHŪ$€É…ķáŸ˙˙˙ē> „ĩŋäGŽHsęC3úCsĸ—Ķ{˙˙†jeåßká nšŸŸ‰o‹‘Áßô›˙˙ĩßđD  õ"=bëâ— ĪŌÕ K˙˙!š=ūޤG@mõõD C<7vGUöRHXūÃW˙˙ _˙„"C$W˙ūf 0Ųáaâ.Ė:äL2_č†"¯ë˙ëĆH(N˙ō ø1>"˙Ī™˙ŋ}ŽŋÚŲ +…˛ė†Ā$rúú út†AŊ@Ä&ø4 Š!"YHôĩëwÜ Ė$C$4hˆ˜I˙ø‰ā<ĪęČ0á—T>Â< ?˙˙˙öÂâ$2A”P#áĄ¯¯Kj:#`xe™¯˙Ō§÷ÚßBTĐ"Đ7īëÉ=š¤ÆÎāĩÃõ¯æ˙×!¤$2Ctķ0WÁũ\Œ:r‰æ\ÍđĶ…_ũxô|WĨĒqC$ Į%ޤŦ/‘p ˙áQû #ā]ÄjÔĢ_ŌčØ%°Zƒ)ķ’ ĀĐŧ/öeė/ŋ!•ėƒČë–9Cūžŋ`ÃR˜V™°[Ų Ö ĩ ˙ˆ7øsŽC"Ŧ§ |G‚ų2˙é͊˙Ŋ˛!ĂØt#@Đ÷ ‰€Îôž*†2‹ō$ˆœË†~ģ­{ũé Hd§'gÍ  ´ƒKĢ˙ŪC)DBû)í.ŋČĐ-†Pˆz˙AČƒqâŋ˙ yĶLjw<ņâ ¨‡˙ėŅ'!’NK Ģ_¯ ˙ČŽÔ2ųŖ |‘Đ<“ĩ1Z¯üA9Ã$ A„B`Â˙ŖÃeĐWŽŊ(BUā´BČę>Ž$ Ī_üôĘ8ˆ"_ äp_‚ū¸Ž@Č n×^œXˆmŅ ÃSėGĻS­(¯_i:Pø!ûab"gŒ¸d‚ą€Ė_Ž@˛pÁ ˜GÅAw÷ Ž—á|"ŸõÂC¯x0j §HD†He“L$˙Ķ`ƒĩæÆĶōtĸũˇ ^üz\‹áĢ!ėˆį —DqƒĖ÷ū>ūvõrŅwĀĒt@đĶĪZī@:ŅđĖėF"(—6‚ ÷×Á¤CEëĶëĐųđSœe( ë¯ô-<ßā°Áfčo˙¨wę)ūĸ.@đK3‚‚K¨@žgô }ÖČÄl ÃY/ŠÃëÁir„ŸÖAŨ)˙ x5t<3BĄ $ !•OKāˆKÁ÷ƒ”8\2āf ­/0ūŗāxiÁFè`2}SĢüá˜†üb°Du ˙ôŪWzŅhRoâ:×CF€Øzë[üá a ĢŌϧ¤2Ÿ<'îŪ“ä…ŒHd‡āŋūŋ™ WawúëŅ8GP ˛ƒTëæˆō üũđ@—† Á[u w§á/悑đĐ2ŧĄõöū˛0 ąáũB#¤,+ų‘ßO´žHĄĸ Î9˙Õp~žÄYcßãū¯*ķ`xļ-fčAD!#ū˜‹ëÁėBd€[ ×ū`?Č4‘øGĀÃ#Š/7Ņ­]yÃ4äFĘrƒƒđ ¯›|†tŸëᄠŗVa— ]ijôh‚ĨUC‰á?ĩÕԆđä5‡)!ÁDđaŖāx4úvō Ķėā†ų˜-Ö˙đā¯÷al#ēū¯A¯BL!Ã4zoŧ6ŪCSMīüHd†ÁÎ:˙÷ä ĖĄŌ܁悝īß˙ P@ú E÷|Ė2_ôl+ÉgB‚ßK¤$ Ū‚W­3PšßëFWƖÛ!ĸuū Ņ +å]ü(ûŅũ,Wtŋū  ôˆd†Á˙Kšã’ Œ°šÔõô¤tƒÁa˙‚õųĩļŋî˙ë°Z‰¨3 ím/‚Īfxļ‘86ô%\zûČ‚üĩĒ3Ų‡-poøÜ ë^‘lîzPŽ@'zÂ#Ē ˙˙P@Š"‡ AČ7œIÍ(Zž¸!!’Ņ gi19Ī…Üĩ2ADÄ-|áœt!$U`˙i!ĄÂ:ĸāx7°a_ũ[ ß§~ģAŽ /Z x$},#î˙ũpBPƒ‘˙!“†Ę†Hkčw ?_A:Äęl ļĄä0<ŋë… xj?Zõ˙ƒØ‘Žq˜c 2Ŧ!’ )‚# ē¤žŧØK h Øĸ>Ÿ‘š˙ x4O˙ ë]Ŗ6a1!c xe9ClIä: ƒxãåĐ-āŊ2:a‹%@ÍüāD}Â\ß Ø9O˙ŖctžĶ Z 9†3ˆd2O‹G@Äl%ëÁ [×6âJxA(+ŅŽA ™@ŋâ2č‡A ā[r q@#0Đō†ŊmûŦ'BhYĻÁŋ܆k°TŌn˛.)~Ŋĸ@l:Žķ0S Ęė†KĸA˛‡qúÕǐTą#ˇ8åt=Õĩô֖h˙ŋđßán ‡ôgņy €+1d2įē p¸ØHƒgö"#a Ūw@– †r>ߎĮ¤˛>PâČ˙ĄÄ‡™ß@‚ūĄ/ī‚)õ›":lA_z Tēãķ@!Ĩē9‡ū1cô ÁÎĄ’Rƒ# Č××ëøč •ā™ €q΍3 IÃ~éGú|D‡†ŋņô GLl†ÎhĒØŊ¸$C5Ν/‘@SŠäČâ1K Ė@ƒˆąPëŌǍ{˙ręCRuÅ­öA° ‚ę…o<4Aæņrā×Ė´F@g^ŖāˆčCëã_Z:@hāē^ ōšßX-[¯ō†izL‡6[ãņŗ€fũĪŌP§ŧ@™OĄC„|^#ö. °T"HÃjÁ.kūtA‚qČ †—VC ?eņ'ģ¯MyĄÁ| ĩ‘ <4ˇčĖ2G÷úč]WČ1Û>`ĩÁ)îf$cøŊBph\Ņ <3p×˙ü š:mÄĐú¤>ôAŊ, x čkŅĮ>a@đl„`)Q+8ʆPčĮ˙˙Ks B‚Ũ¸_ƒxÃ<,ášæâ‹„F vC$6ŗņm€xjpPä0§&č'‰A!›Gō^˙‚íãø`ÁtļÄGˆ˛ų!bŌԝ`h>@ pA˛†mTb#š|]KQņ÷ xfČ ˙Ŋ턴ŋ xk§C,•đ[a’§â˛ ƓČ Sę°dyFŠé}˙:?Á0Č ËĨŅ ą´GK‹F‹ûhV@đŅM%â!é{ī˙ū ˆ-†}?ėHQÎGlų<" Žo!°gJCh1Á ˛9‡=ų €e ĄČI‚˙˛8 ?ũCÉ‡0ˇë3 b+TĄcũ!āŠ@3?”ėCäįpx‚!¯÷âß×ᚃ$6†ÁWúD3˃W?Bƒá/á&]4š…!¤ ¯Žŋđr‡˙ÜHd†XIJ`/\đ.ĶúK˛>ÚQæb—ßuá(pzųĀŽ‚˙ö/īÃ#¨ ŲĐ zõCE‚cėF-đŅÄ‘?I}!ĄÖ2 `Ŗŋ˙ō?Am¯ė˛R Ą÷¯Ĩčt. ­˙ŋöŸxGÃ;Û~\oųÃTŖ{ Ėŋc\Ö­;K˙ģ x^ø]$_đˆ0<}üD‹VC&ģûÁÃ,Ú.ŊAKËrĮČ˜6˙÷ũ`–A°x Á×üI0Á?™åÚĄ!’@ÂûZëāÁáŒ5 J˜E¸-aúÖ]čÔ†ÚđŋPáŦ4Al0`áFmũZVĄ•ĄéabBāŲÃdŪđÁĒ˜ÃJÃÛ* ŅHŽh=ŸÂ!’iáĒ='ę°R@.M‚íZ 4'Ұ[ģiWāx#ôôž„[ÄP0‰ãÄđ•áĐ+°4 8•h*h$CˆųtŗÚ _§ĸA5ŠņļŦH7*h'!’+ž4Faĸ@đĪ4Ŋu¤§ÔAP•‘PúČeŽƒ_„íČ0r y†ƒ!˛ä „YĄ4°ō!ˇ.ø;ČĪúŌ°H|˜n9­ĸ†˙„| „AGú4bd§Č*Žä ÉØ/Ą#˜(xBâ°R†VĒH jŒĀĐØf˙ Ahá2¸ ĄųĀPÂ*ō8d Ú4Ãbރũ6ŨLō8>Đ<†L ‚ápŋzA--Ōđ™ €Ãø@…ƒđ¸Cŋd@Á›Ēúî†AøCÅmˆ]<†@3 D …Ú˙ KŽ 7¨ø ­z!™ˆĐČø4S†¯ąÃh‹gYt í:B0ƒšeĀđhPāÁ˙áR× C$\āÜÔđ– rë ü!!įšÛ_ø`— ‚Ķ›H:!$ Č~ޏt8ŋū@đˆ.ËH ˆd†~ôƒČmP,āŽ‚Ä|[bSƒ f˙˙´C €ÔU¨vFÃ$@đÖ #œ@đi˙ũÁ(pē$析<ĻF<–d ´ ø—i2?!’NL %ÕU¤Ē„2´×Ļ~)$J ˙ŋũrÅŠ.ëí„ üá‰ņøĻ$Dč`×Đ ˇ‹ˇīČqœ?ûëøĩļ‚ †‡ø&C 3§ūöC$4œņ×Kæc/ŸA˙^CaölGM˙ĢųÃ3äb#hŽˆaL"‡ƒ äk‚C ‡üāED3Hxĩ˙ëˆ0žŧm!é´>ûA~`†#„†!?ķāštĮ xSä ŠĄũ[Ķ”=<Oø@ŋ!°Œ=¸%ŋƒāßė5Ôb÷‹dg Šuųąü8D˜d>•idh_¯ß˙lŽŋŨ‘P<8enGĨ°P`¸>]C_ˆč@_Ĩú0<í˙ė?üūđfÃGJx Á– ?Žqև(r Ÿ˙3 ú×ŪOZĩ˙î˙=ük‚HmP†XīÆÚaõ xIœr ƒqöÔ ÖāĒ„“(q Ė4 Ô˙õ0?§˙āžÄ3ãií<2‡f‚aä2^?ˆ:!á­ÍArzց!‡¯˙y0›Í˙ūÁ‚ą5ĸáŲCø`Č ֐˛:‚p4M‚$ĀđĖÃâĐĄûß ũÁü Ũ˙öC<˙Č <†C(bÁ+tM ¸@‘āf ö´W= ?.6C#ģ¤īŧ_Đ`˙ûˆš° :Ēd2ŽY9ŠCüR4 ˜vFøÃ":4bʄ@ņŽc5ÅĻÄ`’^ūäb4WÁ˙ßä2@Že÷ÁD†Š# ]ä¤GD3Ō$03 §qD82œÁ 0†ˇœ|q˛w˙R@hz¯ųŽß‘°É˛ø‡ųô(ä ƒHAjüHōO2*mȸ„4ˁᨠŠ2†^Ą'AiHa’ ˙ô ˙ëüød†ŲP Šõ§ÁeĖæĄÛȃđĐDĨ53ÜAô.C 7I3B:á2oŖ\\Ã0‰†H?ūŸ}đmAȀĄuīÃ"p†é5 4ƒj Ņ5ŋČd˜: †SŧĄ 'Áä‰˙đ—ßŨ m,BcKā•<Ö|Pd2¸î‚)āđÃ<`‘ĶKūŽø-Pø4C$G0æc˙ÁxôCE“†@Ķß˙Äęƒ^R⨘5Ѓ´1o˙ũ°I°H\pÉ1Oë×üNČ&đ@—¨fu‘´lëîū ~)# <,ƒžëëD32h˜°étē xjĶæd/‡ėĄ°K˙ȐP˙˛ˆŨeĐD2A‡D@iûęüÔ?ÖD-”ˆ`ŋäģ x6ō$Âä1S#†a ž˛“øz˙č_iDB!’†Oƒ'ûZã˙Aä€\ā•„K˜cfØF~ˆeĀļjđa׊AË˙¯e(Ié1ũ đKē ƒ EíúMbĮˇ{ŲĮūÁĐ b.Â!’*Āû ­ũ&JĀđ^?‡ xČ&;ôŽjHGx}˙!€ČŊÍB‡,|bp5?āڃ ĄÂ@ЈLŧĀ8x% $í/ Į’ąŽ!>6C"D2CdƄ„ĸˇ†ŌԆ@+M´Đ‰ĀŅ”€a˙Ãv0Ŧ† `ĨHĩ¨5ņ!ęëôFà 3ĻHå@(@ ÷|0‚(Ģb^LÂ&žŊ'XĆHŽU˜|ŋŌ@˜Ģæd ĨvADÄ1‚A4ō@ĩ´‡÷ē!,øu˙í‚ ļÕ˙ų qĘĐáú3 ÉŽÆC$˜ƒr HáĨ­/myđndĮ!’•_Úą@Ņ Ús_a aū‡MZøF`xm|đ.вã”@AAÚ>ļđë< " h=„|2@á0h/P`™ 2@DX"|Ōz ūũžK ._WLHG@Ė%WúCĐ@îˆLÚgtžČ`„AÔ-ūC$2įˆ4č‚>‚ /w™‚@˛`ĄßKü+ki‹ųō>6l2@š°<)pmë_{dāûÁKåûÁ9 ž‚Ä7ú^Ą†S™Đ'ŪPÛ\É R>(3ÃŨ=īfėU*A|G)Áô.-‡ô‘}H ˆ“öô†˛Š~ˆ- 0l×ü‘z Áę5PŲz’ÕtūHˆ`x4‘ø":*Āđ\äGĮ_V$0ûD2AW“@˜u¯øAīõá'øØ9& mėč ũi9Ą"ĸLĖ+ lqL#Fxp•ú˙ëÂ@Đ ĶÁÍō. n],2œP[@ˆ˙Ļų›b6Ÿä2EĻ Xkž?ŧˆ ˙Qô!†ų´cdĘsÁN„Č4ŸB†’8‘ !šÄ>†™uWBØI +rņRÎū8Q”ų°7G‚2G ú܁ÄD ē Še37(v0ß ÎÁQķt&ŲPøh‚ېÉt„ 0 ˜Á‚(KüŊx@‚ˆúˆe#QpÉązp<Pøa6Ŧ÷eЌûÅ=ŖFō!&ƒë˙ô ˙ēÕã!ßȀ<6ĩ ~&.ž 1 ŽH úĐD ƒÆC ‚zĨo´ßŋ h xmP3hŒŋÍ#G@×­ƒŦ@ˆL }‰9­U< @čč!̇32ėĮØ/ ŧ! ÃüØĄčT! ēZũ ƒÛ!€Ë|ŨČĖ"tö-r ãž…˙ƒrŦ2C*@đeB›ņ˙īôx3}7ä y‰ >@đ!Á+.üF&°@}Kc ĶŪž“†@=ũÐ\K x6YU#b8"ú ˙ûũČƒ( @đá Vˆ€†ĀÃū"C$3œ$×ø _ū Čt4AlÉ×đˆ.‚ xŽÆƒīƒĄ'5LĀĖeSí”>Äĸ<2Ē!šƒRÁō§=œxĶ˙…ŋŋÔA#†HkČa˜žQ0Dd5Ãū| ZAÄO>0¤2'8FhiķyāxˆeTŋđ‚˙û qCK›]pW@ČdW•Ŋ/ Ž É ņ‡G°ĸD‡ˆšĀhDĐČāļ˙øKûöɸA< |4|đl˜Øˆ°˙ĮH†|ņŦ†@hņđÎ?:bxÃC˙Á˙"w† N1 _ "ō čū°æĮõ­Ė]Ī…4^ģ-Ęŋ@Šō Cę–C,ē6Ú ū-ė9Ô8'ûŅŋt>šüĶD09GŌ]H7€l"‡â!øH_ŅāÍŧ-›ŒĀĖn ~Ō°d"ƒũFŋ' xeBô"ņP QHvŸ/éÄVû𒨠YÃ2ĢKŦ,ēiŌô äę zé" Ąâ¸o¯đ–aH;Ą4p3ēëČS¯RÄ ‘3××]Á6Ąø"ųV|.˙Û"Ⰴ†HމÂö”?…Z ˙IÂIũרČa…Ļ#íúũëÄB!ąĘ #0ÎÕŋ i‚_ŧ _ū‚PëĐ1D3"ĩļÖēô h†Ha1Čf—„Čé¨7ēęČ|x%Á,2†Ęßü ¨:ž –æīûÂÁ‘D2A°˜L …†CŋÔ."ŊŌG xm¨úú˙ã!9×(KBq‘Ųp")@g ö )ŋˆ Â6‹ŗõ„›đ@Ŧ$˙û‡ xjŽđČ%‚_ū ^C ÚáB"čAø?ŲķČd†Â`ĸ-ŽĢéA„ŧāÕ_ׄ2ģŸ›* ´ ũiQ¨?Qw ÄäˆÂ{ö”D1! ę'ƒ;¯īô (,áĩ?GKņ$8b Â˙¯!ŠÜ>Ą##!’ ÜVAlQt›Mą˙Ō¤&ĀđŨ?Ą |‚§ /ĩÖŋbúа<š„| °Dr’ō!ļGáˆRR Ŧl P aÁāÃ÷| R3đß×鈺Á’ īG8ß#Ž?ŲÖâ Wà šorN#áSi ˇũ‚Lēė?_!Ž@ū!ŧHAĖ_Bš™ļh)‰ ŧlŠĩš€h3ļ3ÁĢ…˙đČ`Wŋ ×ũ‡‰åU‚ ˆ&đa" čHbňČq×]ú %Å. žēô”âõŪ3DĄÕRXd4Y\ ”B°ˆ.wԂØ4ųÃÁZ÷˙ūYæ^/Ēø()Ī˙Á*ëWBSáGčū>C$!cũôŋÁ&"ø _3´ˆH¸-duKÁé `x#įÕ?öm"8d†ĶOûđ‚˙@ˆ W xwūŋô$āļ'Qfa€^¯†Ķf0Ŧ¨đøˆ…R†0ķÆģI˙ 4 Ž]~wũ~ĩ˛ßų.ū—ÃFCbq͐É„#á×˙ xhu˙@„†BëĶô GÎY™ãÆČpĘ˙ÁˆúöGö" įāx2{D4ō gā†Đ/ x!~û!æAl øî;÷„j  ^?%ėEÃ$6p¤ Į aâ4“ƒ<ˆ^!y ¤|/ E?ũD†ē˙RëÆ/á°œ6Ŋáą" ĖåGā‚<"*U}~O˙ÆüßõęhzoLá˜?KÕ9 €ŽYzéĪ œFëõЃũŌØ(o xn/‚ _D3‘ÁŌ>ŋÃ˙Ն@ē4 x7œåō1Č évŲĮũŗc#ø4 ´ˆÄuޏø ‘Æck„F}>s¸ƒ¯ÁA„AäpɆ۟@FŗĢ„ŋgƒ/?‚8á$ąbŦD-đē_î•Ŧ¨õčHaOđˆéhAčCđg3ž¯ņ:āĐ Æž@đ^§ēĄĐ"‡Đ"‡ßČ5ÂI?ąe á3z”āH9ŸjgƒđŒĀš0@Ķdō† ĩ˙˙Áū âÚ đāƒ x0*ę ˆâ‘ #Č )0Ԋ9Ļ3 0d?|ņoū^@ąđÁ˙kä ąÉ A—kÁ †Ä|*ē? ˆ ĩ˙õ˙KāŌõđ_‡ģr@!yŧųĢ„Iá—Á™—Čl°a‚ũīūđ_‚ Øh+KkȇčA‰ æ` 8šĐ2AŦøƒ2Á°ƒÔ#€Ô Č`×˙×Á-đ‚đm&Î9c–ŒuE d†GŒđÚūi6°AA>Čdn˙đ~ˇáx+Pb"°ËÁCCĩâ!—ā‘…)Ã$ HO´Ã ¸ •ŋ1×_ģ_´×Áƒ!˛pdb„Am ÃPTf0Č% āõˆf€xk Ģŋ˙Ņ­”āxcĢņœcD2@°^tEĀđiŖ7ĸ銑à ?Žf ¨!xT"N!Ą`‚īĐŋÃdN™€3Ÿ„sĨƒ\ĪD¯îŸŧ‡ÅČ“_ˆ¯äš6"t üđÁđBŠP(‚ˆEXd˙øtxÔ͇¨kÁbH •PGÃ$5õŋ:‰f‘p4R=@”˙? yākø^ˆĩMAŠČ ¯3 č%́âųÁŋâ„Hd†s‰×*ôuŖÁšõņĨK˜ázJ°ËāߎCBđd†Ÿōä4Sö°ĖëŖč"| Gf †ĘČ ã÷].¸.ĄšOĀ𠎈˜éēį!˜īo?Ü_đd`d‚‘Ī"€Ëô† ŊpŠ!28dËú˙ _Đ…#Ä|áüá]Câ ŋēŋ Ž a¸ˆ0GQ‡Ŗ€ļ’†WęĒ!'!†ƒŲ0א<1‡ŒAšžN"AAíüUUä`2CoõûˆTp3ƒÂá*ÂUƒs1 pÉ€ŌN—ü$+‹ x4$øk‚_ ĩ˙ö2s.P_\āB5 @ü†sŨ^Ŋ–åŲo¤ƒk‚Õä3†2 ÁîĄ1˙ŋ ļd€†ŌCá$ôp1ˆˆz<Į<Ņ jA r`Õzû„ _ĸ Ļ9 !!î@ŊĢ#¯čCÃI?JGØf¨Â/¨j‘@3ąQŠãũW<‡m/Û°ˆdƒi0¨āf=đGÁ°•á•ĮÆەķS†"6ũä}kČd°‚†ī~–¤ˆ3訐GÃ$ø6ĩˆAŖ@^ }ū¤Â3 EöDDød°@•h†yŪø-ōÉÖT~‹ÂI}û0’höõšâČ-ã˙Ų €ŲËÂ1Ԇ@3‡Á7j }ũ zúėA/ÚV"C ‡8äŦįĖ3´ˆļŋĐ"‡Db#b }Bnސ˙HĐSxd2¨.0BœŒpŠbGáÅu<6 ß_$9 UCũ‘4Č-‚âۂ ÂC ÁôĄÄ•%8d8cb/ ”?Ģwĸd ę”đ_„ †H)1kk"# °DY°bŊČd‚Čá: ^˙^ŋؚĨ,%ųx+ x°w3˙ †×d ŅŦ ô$€<ŽÂąiĘr `cˇT Ÿ×ĐA~‚ fe @ˆę'ô0ĐB ÎũŧԏĐ4 ’āČx~@ˆB‚ Ž!AB°KĮtĄ×đA4z AŊv€[?)+ RC°Ņ ŒE“ƒĸ†ufũl$$ qÂ_ãđI6žčĖŲa˙dH6: x=&`Āo`ŒĐD3Ņs<2̃!’ Ī!’ ãƒAƒA<3ƒīČ-†ÛōąŅ°(‚>‚üD4xBhÎHiRȆđ@đØ7v* _ČCô!ÁˆĻhŌ‚ä2AQË xŠĐ&ø ƒf‚1ÁRūâj htR ˙‚lŋ[!‡ x9{HđĶļ*­˛œ 49 “pš {Bõôˆ‡(Ÿü6ŧ ü6tū¤JˆHAü9 €Uú„ŌՑŌđ‹Ļ!˙ņđ2­}ičƒ•;˙2ŨÄđÄ}đŗ@<5ˆæ_t#¸J&˛ˇũMįuIÁĸ„\įuĢđBüāÄdpá~C$M>@đ(p´"÷Y0ˆ)˜gƒģŨ28d‚‚$ ã„|>…0Dt}Á/Šú膁č†H/0@ōƒ køGŒ„Ũ˙â@ņ9’ Ų xž@đá>ĐÛJCä›:GKđžátČŒũbÁP aöŋ‚%Ã!=-đÔ20ë3ú<~Ÿ¯{î”Ö ŋ˙ ČdĘŋd`/īƒb— yŽ@ņŽ@ķū Á>˙æō9˙ęP!˙ŋä!”9 ƒ~°Čņ{˙É ž@dHÕô…˛‡Ÿäü´¨@ģëŨfb4kˆ@@ąoëČ-‚s¨D|aųôÃz‚é7˙ÂP˜0ģ˙Ž‘ @€6’ Ŧ9Q°˙ņđÛũa¤†‚ûk¯Oū ‚XAûJÜ1!š>č7÷ë‚>7!†ŋ xgĸ5‡Ĩ `x5oŅÅ×ū$čŅ4‡A{°`‚%™ŠŨĻÃ]%÷Č/ō *ÔĢF€xlŖ1 C X$īų hō C”:ƒ~“¤CDįPÕĩ}Wô Û#`߂T1­Ī1‰ ˙ũ{Ķ`–^„׃`r`2˙č/!’īP@ІCKˆ Õ1Fgz‚Û u÷&‚!—đX%áāöƒÉH`ū@đÄĖ:^ ZCd3G <B] AH`5u †]  @ŋĐ?Á, ]†Á Å~Ą˛„ đ à _Ą˛:ä2B‘ŋŲa áĻ2֐" ']c“­R˙‹ë@ēų˜b ļ-“Gü0B\DęføBŪC%Œ °=ŽC2ã xmØg@āŠk_r‡ Ÿ_ΠŋėôŦÁAm˜ŋ|čpƒ Fĸ E?ĪÃ#ĘŠ8M)×ŧY¯B@÷˜6_h/ų@l÷ Z °1Čņ€ÉŗDNÖ› ­ Āä|ēr Ķõ'=…t8ŸõnÂė4Ŋ4j°h‚˙@Áū•‚@Á…‰ Ė0ÖĒņ'@ȨWbæ č†H9Ö=2s! ƒUÖžLدøWø@Š+)ĘĀ“#‚Ø7 †ũZd2‡Ęß0ëûČ ˇ+^@÷3ú4Ę@[Ģũ‚lū؈‚F ädŪ__ O3 †,†‡H;à ƒõÍÕŦEüĸFú¯# ™†|ØfĄp——MĢd9üđ ĢŽA3ō|KŌÁü†„PK÷˜õ Qƒ:æĀĖQū–ĢǃbO… ÄGŌëôFāĩĨđ1ƒŦ†coOüŒ˙øx l,Cˆ V ˙‚Ū@đl˜1Nŋ˙ō†uę­Ž!*Ėø_Ķ˙đV + ĀĐWû˙yÃP˜eĐ@ë_˙ā›@ßø5 „Aáö˙{jąA— Ø^8ˆ€ČĪ÷Ōū‰ ;( zÁŅËūšūĘôKŒ2čÚ‘˙¯ĄY C°„†H…Žē[žd ŽPå@ˆaŸPƒôĐŨ-%Ԇ‹ ^‘=˜F/Dâ’šÄ ŖDūž"Á‘Œ" Š„Bķ×ũūf šƒ %Ėæ×ĒũūĄė‚á‚0œķ? ƒČf‰˙û)PČāļ‹dœ č ŋū‰€ČduųÎ=hO˙āÃDĀ ėŒxc úęČëÛÛū 4¤HÃ-‹_ø@—á6|CđūŊ+ŖH1%­ŠáŖv´-äõ˙!”;ō#>˛!Ž8#<āpĐVáæ?ƒhĖPm E?ë˙ôGHH¨(r†ˇ3 a<ž”=M5ūn؄$2CKčpēū/kxhâ†ÉŲáGõú˙‡€ X˛0<2ęÁņĄ˙_h†H)áPPëD _áôĶ0c‚BØn Š0×ũ~ŽĮJũ˙ûh,3Ŗ8!ļ"*t‚¯Á-x`x6đv!„¯Ō_˙žG¤s0_2?ôđ`ÂXˆ@đW@ @ēPáŖ=á< 9‡Gōu´˙˙âŒÃ @]\MHØîŋ¸dG>Œž ¯Â jCaä{C2œ@Š.ŋ_|†@.˙Ä=^"„Hd‹ Ė`ŋÉ­.ôtAƒã‚d2¸ä2õ,Õiîų@Pú÷ö |_H†HrĢ(pEôžA?āũH28O ˙ëN@đŨŅŌ#†@f¯‚!ĄĘõ…ö¸4C$5č`Č5‡Ö‚C]XMú„Ã#˛>Ĩũũ˙â$á*­ ¸ũŽ€Éąj ]ŽgĖ0‚§_Ä…#Ž ”= †úígįøļ—ļĄ!’âa5y썆Ō#á…÷ā‘ĶŽ„đ¸L5˙@ŠrsS÷׉ŋ SŠČhā¯îēV ~ē¯  Æ˙ô„Hø‚‡*ûũŦHd‹ķ0ŅīW Čd‚ŋ…d4`Š~ Vˆ3ģĨŌXVPN x6C{d /jˆd†Đëƒ˟õKƒ_ät gW Ö&é+Vˆ vũŠ}—Á4C$5ŧ,Øf1"{\øV ŋãZԁá¤>AJļP üXé÷JĐâ"(/cĨ¯pA”á ęĐ GõAĢ4@h:šū¸9  Ū@Š{ "!Į*õ ֝ Ō‚D @ō$—Č Ķj!-B @úcUŌdt°FaĄ†GĪ!Čkz¨-†T‚Ú{Đ/m– •3Ŧá•ņA-pTCFî@ĖNjDpÖô #Đ8†#ÛI‚ØlÉR‚ŠŸë@Š|(…[.Á‡Ģz¯ÄĪe9ŖTtÃbįĀđ×ĢoM y ‘*Ö~žô :^’$@¯R'm˙ę DAüŒ €ßäæPū†CՐ=F Ŗ1 ÂÄ9Áq˙đ@ˇĶIāÁ×œOŗ ijWíõĖ˜û HƒŸ û| ÜsžÍ| .7 Š°Šāˆč 7_ļä3EBD‘ä Ã˙_b7Ú¸!> ­!¸GDč_­!‚tp$2A~XŅȏŲ8:pēÖŦÆŊ›5^Ģ {@Ãaa’r‚ģÚ6Ãū°0ĩĨôƒ†0`ë …ãđ› ŧ ŪžIĸ8 SŽš •Ņ i§‚ˇø%…\(&ÁoÄĮI˛ 8244ö@Š‚)ôqÔCø5x@‚ !Įã3ūŋë Za0ę"ŨÂÁ(E<0—¤8(ëãâŖ€xŽf6îDĪG`öSũÖ@đjų CX0‚Á@ū †@lĮd#@đßŋŌ×_ x_†Ą$°A}eށ7áAŋāŠ˙"‡Đ$4’‘žEP^!—Ab—úOēĒD8Ādī@ĩ@ˆ(™ “‰  Ŗo_ü H Ŧ‚Ál6¸GÑØaßä  B> Đ*AÁnDt‚< †W“ÃᲠˆ<2] ‡ę ˙˙ X$ˆĒ#äGKha‚#AÔ›^&ŧ5ū…Hƒa  ŖBx&`x*^Ã˙˙ a΀‘ŽČdƒc”ûKvC ģy0Ä[é`ŧĖ#`Ôĸŧ X°æi<3Nq˙Ģûū°h!×Ä-c SÃ"āëH†~ ĸ:¤ĸ˛€îŌ įl%_ŋŪøKAUzM‚D3ÎÁ&ō˜˜#PH.CR~ÃF°<3"‡Č Đ" æ3Žú˙ō(æĢĐ+Ž đyđ.؂<3Žz¤ēāax6ΉÁ_肉á&Ũĩã˙å“ŧā°_á¨9Á8ƒQf–-/!’ ƒéh1 a-×0“˙ņwÁikũėE8dÁhH8¸@ŧ†Hj°m ŒŒÁ¨Øj qg‘ŒēÉ …B˙÷ä‚ų÷[ ¨>•¯=¨!žD,†ŖœbKŠ ƒ“‹Ü˜lėáĸ}”>°ÄDB(@ŋūC?_Ų†˛ b uúd3Fä' V ÍIū Š€3  á‰ĐĖÅYŋČĮūųáÂãh†HkÔũÁ…  dēúP@õ÷ x !¯×Q"$4ø˙ é`—BC$3LI„ģņĸ:Eƒ" °a(%šD‚'đl†@…˙ü˜2"ŋëđ@ĩį@[ ør@-†ÜÉ?û ’°Č žBT•AtzŊČ į }yĀŧČ-ƒ~’?"?õŪžAŦ|BAš˜-‚ĩčāÔđE>AĄXÖÄ4”đ/_jÄ#āŠÔaĖÁp|GėŽ m/ō;$9PthĖ3ūëâ‡ Ų¯˛ų…;¨\7Ö6ž@đöCŪ¯oM|w눈ÚĻ˙û&ø80^"BšC4~áŊ|āD>˛t…ŋ ŖŽáŧ>÷ū=28†¸ aųĩđŠp<& ^ ÉÁĄĢƒP˙R‚}q† Īgs7ÎĢ˙‚ō$Ą_ũD„Īpˆ ;ę’Į˙ {pŧũ¤N ą˙Îûúė› Ę#æ0Čá’ŋ×ߤŋ¨ _^ņŒŽ@đ/D,ŪJ2>ú‡×ŋîC)ĘΈÉĀ˙ų @}`›_8 ÔŋúČig QÃáZHs˙ī˙ÄEä2AcåAåëôˆgĸč"ƒŒ Ž;¸]Ĩ xMfŒ-ČĖvÚ4ĶaL @Ų •ú˙Ũd2C\]9ČᒠŋūfūP@ĮiW˙"BxâØ{Â=(5ŧ?_˙úļ\2A›˙āũĶ…kĘp@Ŋ|$ÔĪ.™Á¨rƒ°Dtƒd?/á:Áī˙ūFØ5Ļ …˙ũƒõr P Čëã_ū¨!!#) `÷‚)ũ°~˙û"˙t$2F1”cܐį×] A<3)ŽŊ(%‚./0lÚjČé„ôƒžŋúūČd‚›’Ą­8/Â0Š×ū‚}jŋ\ \xbŧpēđ˙…Đ.CA×Ä˙˙ū, Pl†Cō¯ũÚ_öØ@˜`ģD2C\\Đ@ađIÚ¯õų Ē<œĄũh†ŗĄ8a~C1ļ ŅŪkĨž –8 ŋđ`đÃWđĐß!’ ƒ…’=ŋ˙ũâëk9D3hôfƒT!‚žÄĖ×˙ėPÉnjMfGŊũ‘CĻĖ8W˙Ö˛†`鞍āąÁÆČx-˙íėP0˙Û ļLÁ_ĢĄP@ÜG~ŋųÁEDĮ0ãĄu~ xGHĀdOÔ/!’˙ä4 ˆdG'P†ŧ"‡§d> ˙õāĄeáPSäĮ˛Ŗœ‚n8~‚3Áŗ„!”;õŖāŧˆd†—äՐƭ2-Úņ°ļßPKô"!†ãˆa‰ė†@h¤x ’ĐœĀąûĨڌÔė&G°K3 ī ų g˜ėē^øzü/Ŗxb$2A¨ÁCˇ‰đō: Ņ FC;˛:×Â5„ ˆk| -Ŋ ü‹Åš]}˙ x4Q!}HF î.¨Ax ˆlđG@<JrøAčB }âC& Á0øB,†Hk˙2p_˙Kä ĐXs@Sāž¨ŠˆŽ†vĄžu ĸ bü‚ØSKūČËÁ„ņ(7˙ô‚ēđaĪ‚üN ÄđÁ+Đ2­Q˜V MÉ_ÃEKũāļVϧƒÃG_˙ÁŋŲ ,\!yš#ĘÕ¨1Ō!˛dÃ@ü!!’ ŖĒ$˙Ä-ûV…L.Ŋ}< wˆ1 ZÃĄ!ëlđ xK8Čd‰Ãķ0Ņ˙ųN Č˙ f _3X@Tø _ģiüCÖŧ†qĖį°Ä2Ŧ BDÕ\†IŽ `Ņ ļŖ„ æŋų 48/ÄCékŽ @Õn¤ .Ąŧ ŧDC×ÃĄ*ĀŊUa/ōû聏Ģō ahnŋ˙BĘ>@ˆČ†áŠH`x*Č2LãüŽË㙃æpƒČd‡ŽĒÕûɃö>Dí2„đ×ūĩBu Ō§Ļ2œÍˆƒ1Ņí_h"?!’ĀĐÂŦ¸ °LĄ÷ _Ū¤0ä2ł˙ę ßČ’ Ÿâ!‚Ģ ČlžŸâˇ ĸtŋ! ]ëØē˙zĖĀ€éŋ‘`<6AĒ:Ēä Š x)šNQŠĩũØa!õė/“ƒŽŧđižČ T_ū2CV„rpa‚‚?p– 4¨0í‚ ]Y˙Øia!ûK!‘ ČjSČc×ģß ŖŊ˙Vŋpß Ĩ@öpb ž™8.#?`įlöBĶ!ūŧ#@Č õô3ú8§ú\[WūÁp؅áá2 kZ’j˜Ú#ĄR CŖ€x,Ē ôöø( x,؅˙Áė߯đ¤2FÂ(ņkБĀđÛ4/ß_ü#΍‹Éš Įš fÜ~Ŋ‚(pÍ@ļZ ĩ3Œ!”_ĐÂ=¯°Í0˛…žąŲƒ,u Ņ‡ũũmp]Ј>?øhF´ˆ1á˙Ī‚T{ąŒčp]ZˆžÃ*@ÅE:ŗ0.üú˙´^@ŧ˙Čŋŗ‚0†L?éŲ5ŌĮCŌ x)hĒâx >ŋe?Ŋގ' ˙üGÁŌ´h˜ūO_Kä ˁā͒@ä4L; ¨üphCō@gǝųÎíô œtˆ&žĒč˙Ô#Ļ ĸ !hƒ!’3dh!§˙ü(ôČé÷ī÷LŽƒ ëqĪOđįōŊB"đÍüū˙H;ą3Jŋôēā…ƒBj˙a,0Ŋ´  Aõö.–ī!’>@đ”!˜áÔ6Pä{ á@ĩđ•uø_õÖʆ}Ũ<~E}ũRÆČg˜ tņ9ÅgŒAēŌČd œ/ú‚tV¯í„ŦD" `Á]ŧ€ČúÁÂ:A~ˆ="ÛöŠ&Čdü’˙‚ā—õäģ 4ĸ„C$‡(oüƒŽ ƒk˙ÂgpH†HTä<~C?0e9wI¨ö@üq˙Zīŧƒ?"~ģ{# LĖČãÉ ؐÎQ}bķG_×âÕ ōĮ(d25ü@ĖáÁ^u2œN?Ũ= ŗ’… b3ü"P™‚uø…Čĸ ÷ā—]Štølפh4˙íȝœr āˆč) -ƒÍ@ļ b?RށČ6sūŠĩGtŠą"NH"‡ũCåáĮ ú¸'˙āÁāŕŠN)ĖÁl~ņ@á6ŋˆeˆr!žd4“ū?t5øŧZ ŋÂJ0ˇú’4@ÂqĖ3˙×a… b u—MÕ]l7á+ĩĄlđj | VwÖ†ä1HčĖũ„ Š’ĖP`ų°Oũ˙d!ČÔE‡ūČ s Uy ģ!˛d2CRaÃü$EˆúđՄ(~ģĩ Ū$1¯y ēwámH™¯ø„DH1îûāØPΈ [ũ~°¤ėũ°é™‚ûßKÁoA˙ú A’ ô¤X ĪėS0!Ē`2WČdƒh˙øę@ņG9>Âéũ=Œ  ÕV´g°‘ O xYĘpŋá ‘‰Ķ˙ęô-ŲĐ˙U[ŌÆDHęøH‡Ô"ˇkÔGK ÉēqqßũČ T@Å ¤Ņ6 *û f?\†hÆ6ʏøGÁGĐ/mXfq°Év‰ū‡Âz!\đWĘÔCO˙˙†Gč˜ĀšŪŋ­ĩũ.ø‰ Ûd0ÉŽ´—×č‹aᐠ_Ē_ø‘ÎhƒŦ)ØC”˙x8#0<1đŽ÷bšE^x3Ÿģ˙îĢ‚ļ! ˙˙ũ~ˆ"Bĸƒũ~ŋ ô$2šĘDÎ#Œ¯Áų D‚#ĨĐpGÄ WOõũČy°ndcābĒ÷˙ŋØDĀĀ#ų5ęAŗāĸ 0iŅ{ÖūžˇˇĪ—ņ˛‡˛qúø4C$6ÁŽü0ĩõˇUÃÞˇũS†CŽštXøDtlƒ. Î"Ÿ8a(šĐzë†UĨ˜ī†ĩļ—øpŲ €Į§ņ5‚ÆAƒCũq!’bHĖ4; t28_˙aø~Č(=°Kė%ū0Ã#ëõ;ģ @_ūAĸ1!’ZŖ¤\|kXBC˙ā‚×R–ƒxfĮ˙<Üî#üd|ē j ‰ƒũY[ܘĸ3  Č|†H2PŠ`˙Ė3>°ČĻPFGÔNEĪíwøBf֖ „E‡ÉÂ_Ü_"^ŊčABŋÁ˛‡đ@’}o!4!• ˆ6…{Ô/Áa>Âč†HÕĩīh†H)r ĩ߸_ņia @ŋÂ†Ī @.°E{/­Wä 2GÁ„†HiÛCŽ`õ8ô!YÔ0—ėg ‘Đ_^ Dė#āÔž°‚nÄH¸=ūŧō#ī‹h†"h!Ĩ x8Bp Ęq ‚ØkF /× î\qlGÅŽ đA_ū %¯úH8xo‡üb$2Hr‡ x(¨û2€`ü_đ‚ū¸"0˙ ĸ|5Ō ļEü°ž?š™ã6ü@u#ī|5Žž0`‚oūžŸoÁH-‡#‚!’ Ŗ…_ü˜H ߲:ÃÖ,Đ@đG0čđá†@ņįīŌ¸9Ü‚'°0˛c„|-Ußa$vÖ"Č@ĐÂD æS†4&úlƒ>„ÜņøaúC †’m, Cˆ)´äŸņ$fįNģ΀‹äãüaÄYįũŽAˇ‚ ņd†G.đ6 ļå^ŋ’;‚f ĶČdÃČ §ˆYíX"‡úâ˙uĐ¯"§Ō!’ YÉbd=ßü z˙pD}LĀđĖ˙>C(ĢKk!›­@ĮÉ¤d2C*lYžžž˜7w ãŪ@ųé €vö@đĖ$#y/Ô  B%A¨#ᒠņ@™pÉžE˙ôĸ"~ũ  Â{dHŋ‚Ô? j žŧ‰dp< ßä5Ėt—˙ČiËëđlĄÂPÉÁUô@đķ’°Õũ< juzņõČ)šAúßū.,ō8ŋˆ‚ôF@¯ũĩl xl‹™‹`ˇ8 ąūƒ˙ Øņ@ׂd2DĻ@ķŋđKHō‡ x% Nē!œ€Äû AHjp>˙?Á„Ča’ųØ"Šū@đĪŠË´ÃŦ†PņĄ¯1„2ép^ŋø":˙´>ŒÁpÁ?ä ŋB?ÃĒxhņKā]z_ßüs Š#ĸã#‚؃ ?ÛĒ\t@đŲ¤/ xj|÷úģí‚xˆø":ˇ a¯ƒdô˛xWwŧ7<2ū—øĄ<5‡D`dƒl%˙ī˙d 3áz€^ƒĒ đČ6}„"×Ãtā—Š ö,˜ i„C˙äĪ˙|zpM‚Zø ˆh Ã&×n%Xcđ{hĩ 2*!ŗC˙dÁũjÁ…IŦpN5šĐVÃhä2A Z†đ@ĄČĖdŋō€ūë!?ü2%”0⯐<^ æbƒH/~ęØ{&™Ņų äP Ŋ¯ë؈"‡v^_üSč!ĸv"‡o¯ę ‡Ėû< 5Ņ ¸ Üë_˙ø4,!ü˛0x'a•Eŋü+†•žøĸ\2AĻŋßÛėͰ‡ū$x: M´ŋÔ7 *DË×Fƒ$ }×ũlDí~‡cÖ˙ Øg@p˙žģ÷×ôC0˙†@đãŲĮ!t`É8@’Z[Ø…Úø":<+_ū˙˙Ē E?ČCĒ Û8ä§ ‚(R ˙˙ÛëúA?˙õ¯ø ˙á˛Ã*ň¯īō°r˙×D ~Ŋî5ŌĶüJ€<ˆî˙ô¤ a—ë‡Á˙¯ü7ũPeŅ €CĀxîāˆúüW¯›Šđɝų÷Æ˙á˙ Ö30Ā|0ŋB*"Ú^šéÍ5øވaĘ?ėmĨd L#0[ ÖÖĐDßãé „Cõ&†œF hc˛ų€;ƒD1°ūŋ°Ŧēkâ +Amb4#ŽØKūü_ԁ4  ad5đĘpPHČā€ŋëĐd §8˙ˆ3]Čkņ šøą3_˙jČîŽÁļÜÛë\]HsáC˙@öũČ-ƒWhū¨Xšƒ$ o ršŨTÄf#āāDȇ4íHqúxJÃQAđ`‚€Č7üL3]Dp@Š ūÂÅíÕúļŽ’ :Ãt/ęŽŗ0aĶ„GP~ŠÁ’ Ÿ ‡"Ą˙IđGôô ˜5Čd§ Ŗ4æ8b" ƒüā× ­xGúBømo"f0č…ĶÂ5†@E`ž2œ ŠOƒxf˛ÃTü" į)†hųp„2ëaę"§Uøb BķbĶúM˙ C LÚO˙l ÄböGO~0ƒ!Ē9cē‚BDá¤pU°ˆ-ǃL5ņQ ™?°Â/‚(p̈:õ ˙‡ü4Čd„<3#mDWR0Ŋk¯āˆé6Cc“ |0d˛8“āĶ:EÅ˙ĄĄŽá!‡ÄŠčz!’ 3ė _‘Žëũ ČėąĘ Wu˜5$ŋė†ÍC]PKĄ j>P,C$6` ^@ĻƒĒä3OŋM× ĀúĘĩD0) ¨šÃ$ ?ú8A`@äī‚cų  `R 2;Č d‚ˇ˙H†‹‘PȒ BŲCđN ä‰ũ/Ŧa7čG‡Yš6°åŽÜ" ˙י¸Ũ,<›°đ‘ ˙hč°(h7÷ųÃÎō čÁčād D$(đÔ Eß Ā– oúé‘ū2. C#Åō÷ŸHC|ŪR,ÁŧČß˙Ɓ†n(áDD„AYÕ;AƒŌ!Ttųe(ë˙Čƒą´?ãųᐗđōĐ$ƒXĐ˙ūŒÃ dtm({0ízúä-":.°ũ<4ĻŅ‘ÁúūD‰á‰Āäp<4ë„x_ã!(áĨü*Bä CZ?˙ x6HĮˆoëņÍ"\ A°øf˙Vōëõô2 ã< Ž!›GLˆĀŋ×ꁡ˙ LäĖh<˙Á#Çūĩ膊ä a˜ä4ÄX[˙¯ÜƒbH8åōú_ƒoųXR`xGuOīîĩ x2 †•b?…ũC "„`  Ļĩ%Ĩž 8LĄÂ8Ã(w_J—× ˙ū1 ĄĪĐ×ō Å‘¨‘ÂŐ<4¯˙å×ø>C%yĮūŦ†j†˙hđg×ĩ‡˙ø’āxeC<qŸƒT‡ { 6/‚ m 9 §?Ŗ<ô{/ŌÔézžT™Ã8Mĩđ/s1,aü'"-„ ƒ‚qūÂO˙$~9ŋ ö/ ×įĶք´5āã ü°G;§āÁ„°ą}J=˙Ņ č2 ÛB“č"|WøƒÚņēÚü&0ßĨÁ7ķã'AŲā¨<Ō!˙ä A’:ȆeJŗoĶū@ĄÕĻ×}'ō‡˜ˇ 2 2RŠj =KŠÃˆfąAd J Ũ-q_âƒW_đôš›d2Ž!’XƒdåXexÂąä Ždĸ?X}ēū8 J´0˙!—i Õ3vˆ 1Ŋ2Đnc hƒœyÛU˙˙Õ|H_ ęAS&c~°ČAĸŧ˜jŽ\ĸ# Õ=W )õūĩĮC30ō ‘א́´$d Ã1Î/đ~ŋū b÷ũ˙Œ ‡­`,bĻ`Ŗá{˙ô ˙ĮęôFûä f a˙˙˙´#úūČ ?üĢ˙ķāŠaö°@éčpŠp% ū—›H'û(CĶĸ\q˙ßŌ`ß_Ą!´=`Ú˙ÆDHffA‡ĒF`äæŪ˙û Ŋ Dô˜Ķ"?ū*!Ģž ߇Õ?ūÕ{ Í˙á$|3~žƒģūĢ ˙đūõ_Ž‚˙@đS¨†Ī8„Ÿ˙¤¨†S•3ŋ÷÷ö`eCū€%ƒcI˙…ę@ŒÃūū˜Gæ„H`K /ūũø„$'öCQč2Xoú^˜|ømo¨wŨüĶ{IŪßÚbĻëg÷á/ƒīۙÄxˆXeÚ`Öác¤ų‘Î@Ÿū 0`­|áŦx•xh3iwd€ĀKôƒUčHaƟ_˙„8B/ū¤ `°D/„$'ā•´¯ũ/ÅČ7ŋŽ˙Õūíô…‰đ<4t "Ex8ŋ_4Ú˙ pŽŦŽ WøA{Â˙˙áōƒIč†Î[āČdƒ0OúuUPm @ūĐ^ 4ˇ]‘đé:č,/Č-‚w‡ûÂüYC÷^âŋÆ˙ĩ Lr< LƛĒ\u ?†ŽTƒŊŖ0„|_ŲĖ{öEO˙ē&0ũ Ą˙ĮŊtŧ? đPf Ôņ Ņ÷æp¯ũVqÎä,ËąđA ‡†#ųX)Į}=ëēš ĄöDÁ€„{B÷ŨÄD_p‡ ?ĸp<zģ„ŋĒi‘ĶčĐfÜÔ^é{ũ°[­"†á_ų “N¯a¯ë†rÆúŸ˙. R Ž aƒ Ÿ†É09>@đ_ÚJø"Ā\Æ˙âl]~,0G‹ä€×ߏ6žŽ¨€9Ž/Ķ Ö>D‚;@˙úújCˆÁ~”ēÍ_G6ErŽ1{/~†28?ßûú~Á‡(Zv}?˜ D=^‘"jÃ-˜rĮĄ iÜhO]˙ũ˙ƒDŨ•ĸ:ĸôSú‘"Å Ÿ!Č$Įø˛‡8á!õūß˙Å0Œ†qä€lä3ūüøn` Č Âk!†1đČ Gė=ûö_ EĖŽl9 Z!’ŸPm~ŧP2Į+žDŒÃ˜Aŋá?Á˙éĄ _‚8^JÁėĐ1Ƹ?ûTœČáĮ†ų 1ČiƒūõéŠ2AI¤Ũ2:dXˇõīŨŖâäR‹ÄƒHđKˆCî˙Š}É % Bà rŽ _uúú†˙™‚}ˆŋ˙Aœ‡Аitm‘Æ^[ r Ē:Æ˙ūĩOÕY ¯Y,Š×:°äŽa˙l‚âí "„!ļLÄâÄWūūž–Cf} ;ŲÁ<ā„Đ A¯āÁ¨‚#Ļ ā¯ä@WåiûZ˙ëŊ}ãTsũáŅĄš€Ô3Ș-@ČjĀUoüHHü†Hfú˙MĢë†!ēø@ßîͅ6eC `×ņß˙_¯Đ@˙é°˙‚‹ū` Ãk ŋü=7˙˙Ŋ×ë˙VА3 jˆkˇ˙„ëūŋÔøā߉L!Ī˙˙ŒŽŋá,¸ôŸöũzaíC˙˙nˆdy”âÃúë OD2N?ßōöņ˙÷†ĮPHa‚א؁Pž¨A…ŽP˙T#z3fw˙ö](Š@ŽŋCŋQ]ŒƒŽŋ¯āß˙â Â!’ÎČÁĩ8&•'ôx3kßÁaƒ˙íÁĐ ĮûĐJž˙üūßŋ u— •ԆdUū>˙ū@Đ3`§˙˙ŦPD?žģb˙´0ŨW^@Мˆ3åÃW˙ā‚î×Åģ˙õü}~đ ŋßī×ōaČg„éwß õëĢLHÔ#€j$œtכ0,˙˙ûuéf¤o …Č-†^ĒŽ˙˙ëë˙TÄWūAlrž÷žøéRõĶ#ģ`ˆéTƒÖ×a˙˙äcŊH8ũ~$pčAuĻ ū M@Ų˙_@ö=?ü˜Ž-øáĒūÃŋ˙OØZ˙¨˛@EdŽŋ‘ÎŽŨü֝­ōßü2Ÿá×}—UüÔ0ĘīŪ‘'Ã)ä !Ã[÷Ǥ‘Ņp< Ät›ëú48ŋõ°A&y°NŽ€xií-}"`pįēČ6F“|Į÷Ũ˙t‡)XĐ6(>Ō}üDr‘˙ū—˙ö‚mHÂjČdG+¨Ģ˙PQū˙˙ū‡]b,ې!Åí&갂˙__1ū˙Xd!Žˆ{ ´Ã\%á/ôžˇAūáĐV‚  ™˜V¯Ī„ \Wôŋõū†@Ėīų l‰ 0D …û´@ƛ¯¯õ}-´˙jAŠÄdtl–Ô&@đhC4ë1ūú^ē>&õ˙ Ô0GēLƒĖXõ_˙ëĻÃx@ģp;Ŗ6 ë˙˙i°ŨŽĘyb@” čƒß„ČbÍī˙ôēāĐŦƒV¨%œGēÚ7°‰xfHއū—û\x1 %A˜°k}'ĸ%Ļä ņšĀÔ×ö;†]Ā–‚h`jëēēd 8Ŧ˜PÖūŋpđk™ŒÂd@Čq˙ĢK˜âčāĘŋíÂä Áf€Â!’ė† ĸ(H!].•Ĩ§< Ã*ŸčA÷¸Čl!€Á ÆDĀę uûŨ'Å j+‚#Š ‚‡˙ëāÂæsûõŊŧ‰Ž‹ HâBöëŗč(!đx*„…Dû›`)čƒc].Ģ×V ‚LPQ˙ėEĄø‹T  ­H7<˜ŽN_Úû¯@āÁŲ€€ĢúT\!-ū‘`:@Ē˙ôŊŒÛ!•Įü0D”9ô Žč†= ›ŋdu!š¯ũ~•ĩL™ÁĮ˙ųņ xht%Nl2û˙âà Đ\Õ¯˙éÖlJģĶ ˇ˙ũ; h|AˆCLĐNģW§C64*Ģõéč&ց˛š„/˙÷ČîA)kSb†¸?mkū@đîSī˙_ęŽũŌ™ ß0įĶ˙ûA3qÍDúŦöG{‡ Øö—č_˙˙˙z°ô„_íŠ0jâ;Ļ–iļ_˙ū—Zß˙ūŒ-=Ņ{k˙5Ä8Z›œû˙ōŋOõ_ŽŽūõ­ī_~Al6œ O6 ×­ŋ˙īŨd ßú˙ĨŠž8#ā\>×ũĸ aŽtéë˙˙õ˙zV_Úú^˙˙ũ„C$9QBhØAëd{˙˙ŲnTIŲ˙˙]ŋôļ×.ģi~âC$šÃTē.2á ‰č0÷ī˙ž°„øP˜­r,­~ŌŌ¯ę/ÅoBC$ šNi°OŌw_˙ū˙‹‘0aה˙Ž\  Y˙øé×ãû)Č.aŽ„!°Ņâ¯L=ņ˙­):/īãÕ  Ë}KŠ ž4S eY´ąŌ ŧŅ€ĩtŋģ˙ķOõ‚æaTט‚„É Vŋėļĩđ}a°Ą›EÃB›Ļ˙˙úôŲˆAčb5T’nf ƒ~*?ūˆ?ikä buđ‰Ähi°ˇŨž×ũ/ũUõūÁâBL!:6ū?ÖŦ?ÁHū¯N“׏ū^œ ūÄtFŋĩ]°ˆ™ëúT”Đnŋ Ā4‘ĀĖ ÷WoÛ˙ũ„.ēŋr,~q×đō˙×úä!¨~¨028‚Ļ“ņņ˙Ër§ÅŅ7^{W×~:ũ´fģd2´8˙ē¯ôžˇô YöUy0W‚i˙Ĩ˜øCíHĸ?ûoõė/öā.Á}öˇūĒä ˙ĻŌ$š˙¯ūž A.7ûŋ­?k„ûøO×ÅËęxOŽĄ°Q8ų0į {˙Ĩ‘ŨEÍ?Mė  ũũũĖ?3š‚ŧ†e‚> §§RīŽ AČdƒ~˙ũĩAäĀÄÄ…˙÷u˛ƒYpD$tÚC˙˙†:ÛgՃö<Ž×Z˙´F@i}ēŧ‚Ũˆh8|؟˙âŌž顎ŋ˙ëé:ņĩąØku~¤6đŨŪ‚(xy Û´ŅŒē.ē ēë"Fĩ>.°đ›Úą˙˙õ˙ÚGÕėS×ų,§yˇ!(Ã˙õ Éũ4Öpt„[]žŌ΋ę(].9˙˙īŋõô ąj÷˙†C €w˙Ö ų ‘ÖĒˆ'īJėĶnĸë Ōė[đ—ūŊlē_ūŽ <öjßú ‡ø°•Rũ7ÚŖZˇëúŲ7[!☿­´‡üß$ų gßĮú˙Û ‹Z]0Tpü=A4ĩ´›J˙ģˆļy‘ÜŒžĸ´ŋČQ˙ũ~°ÃûGĨék įaHiAņĻV—á tuĀā˙홂kßú‡FxžßBßNAw/õ^ē$ũĐû‚í}PÂX…¯ôčâŋ˙ŪĐūŨ7ŊZŋ8̓=¯^ŋĮéĩŊ×õũnjrī‚/~G~¯‰„ÁŌúûzN¯˙ūķb:ąŌŌũō>>é7˙¯ĨqũŅ<3OOûif˜*˙ßÛ ˜ˇW˙[í¤ëŌĐ_yŪé´­l(?˙üWäŠÂ!žd `×qú­XK!­‡zë˙ßuũ=~ޟûJÕú×ŧ‚īúÆ=ø2éwsLžk Eã„x Ä0[˙íĄ˙¯˙ŋíi^Â×îô´žôļęÛĻΠaøI A Ņå8Hi]AÚ[_ŪĶÔ7˙_˙ũ¯ę?ßéužAû]Ž)ĻGAYãé˙VĮ¸UŽĄĖá˙˙˙˙ū—Ū÷ÖŋŪ–Ã.j _L؆™ dĘ'?ū×ü> WÆČl†a-˙_˙˙ßK_˙ŌԆĮÉĮĒ÷.â"›Q!ãëđē]6˜Ŧßø„“L‡˜Ĩ¯û˙˙õ]˙¯¯ŽÚW´ĐĻCC‹"ĀĩPD|Ø.ˇ §?ŲXčJ?iŌD0<3„‚ú˙˙úŨ˙ô´¯ŋuš3āÛeĀÚ!XR †FOĐČef øŽžŠ/A‘f!†A‰˙˙˙ē˙˙÷ųīÂut¸2C†Â Čœ@đgB^­˙ČļįĘÚ^Ú͓‘xf -kë˙Ũß^˙īKûtà lrBb!¨§ €,ī°oë@ŨĨŽ´lBõûKīŲ™},‚‹˙ĢZ´“L˜āąė&a A˜7d1ļģŋĶHVk*?'!ę"ЁāÅu˙¯ũĮūéēK|2/0ÂÖĖDp%bęBFœ2Wûëū7ÄAÖģd3ú@đo×g…˙ßĶ@Ûŋęū΄!ąTЊ[ Žl%2 9Q˙˛ë˙MŖ}봘ÛC˙ÄW÷L‘ũ ĸ DWžßS’†:h2āKžAí[Å0Bũu?đAtDÉũ˙úSs!{ ¯đ_îĖ"ã˙ū•Ôū"&jHGzFlz˙ü$•<"=¤ˆKGP<pûũb?km¤ĻÁX…ŗ@Á/˜˙ëaçü‚_ZOWõãI<ÆŨęžl˙öPv°×9ĻNdpr8Vŋ÷tD‚Ę>ŋ˙‚^Ūä§Ē]-6‘<í°@ŋÚū˙Å­°ŦqLØ.Gh‘Ã$3ũŽÂ VÄ˙X-}šŦ_øUč‚îCCˆ|û˙˙ø­Ąņ֘køpnŋ@ŋŽKŋ×]¤ „h†Š Mū˙˙ūė Čņp%_û­ŌÚØwÚāĐ5?ä.ž‚˙Ĩ°D:āÖSę HdÁū÷˙÷!Ú Á„"?Ĩũ6-\0Du𗮤?×Âßt-0a”ūŸß˙ūž"+ûõØķ 8āü$@č§ņ­yĐqū`ä dü. ?žŋo×˙I/ÖāÉvū°EĐ%ũKƒKÔ"A´ßōãm~ŋĒũåÃ`„ę9 ^˙˙O¯ i˛pO˙õíûk˙fŸøË ŋ˙Iyáuõœ}´pF ׯ˙mK´ŋ\ ūō `Y8fy/úū˙6šnˇŠŨ7^ģI´›_ļ>´ĸtĸ$3C FĀč­/ÕTwíꇧ!‘#īnžÕ´ŋõž˙ņ4 jū˙(]ø” ˙rP?˙ė0“ĩ^‚ĸũr`Ž˙u˙ujŸôļ‚yĮ˙m[-ÂQĩ˛â+ô¨7ū:ŊĢ×ū”đ¯˙Ö&`hWüē1ĶL!XUüV—ų¯¨AßũÁSöö)Ļdp;†oÂB˙Ö :ž1Úų'ū˙ô<Û顰šgĀî UŌõ˙­'Ø-}í|H1áĄôŋũZbē¯_ĩü= ˙îĐׄŋūt¨(ļŋõlΝAŦ†XęŠp3‹T?Ĩ¯ü21ëI~ž=ÄKúÆ!—ÄŖŸZŌ^!jŦŅüŽw0˙é/û@AY˙ū ĐŲb#‚¯ÔŽĐˆ{iiyPYsŽbė4žŌUŽ) ō QB™ ũ˙ũ)0Zá AŪ+ë˙įĶ˙˜l#<ØŽéUž"ÖũõíB!oũ""ũ"/˙Ã_×ų ȝ_^ö+JēÕTi°—úŨ9­zļ…õ˙׊Xāë¯ßŅ ˙jčp×m÷ų0$¨ |jŋßr\eŪĩûJÚMĢō 4Ų ąéđŪM×!„qâū@´ ķ¨v–•Ņ0eHAĄ9 ;†q­o˙!˛ųN Åä¸ĮÖŗD˛pa÷Kõ\t}úüT ]ĻÕ´Ą3Iä3Xd AŽÕúú脏×F <Háû ¨ ä ÁZtŲ‘ÎyđÎđÍK¯„ß“uûiˆ„Ū–Cíä_+ dÔz°D᙭2Į!ĮiŠöKK!3ēī_oˆÎ RøZk x8ūŠ28œŽĶ3^ú˙ŋč  b×ú¸A#˙˙8#¯Ü„: †&ÂöGDtƒ) AcöE˜ö“¯âŲ‚ž"÷ųƒ0¨2°ŪŋÚõZF 6šŠŋū9Ÿõ ö•¨ˇ Ģ¨úÚgƒaÆGŸû‘ ^ŌĨö‘ĀÛÕūlZd 1˙‚BBr˙Á†™Ŗ_äÍúŪēŌp˜R ųËÁē×Ųh8įČ˙ôßÖ­¤ÚAæi¤H@lüv­×úc„ZúW˙õęÕÕÃõØh˙ô¤ ĄƒäÛŧÔ\†ãúũ7õĒd Ŋ ‚ŗũBW˙ų‡_īČAy‘5C˙õím)ÁŊÃö ũjŋdGV˙üĐ Fĩë˙õOĐzŦƒß×˙ōAŖ ŋŧĐ09rwú˙ëjŪ“wĐUü?^ŋA‘írôŠd`ąÄ-ŲŋáĨ˙˙ĒN@Ė4‡Žņ×˙˙ũ´*™š_ŋ s܉‡ƒšw÷Åu˙×ø˙˙˙×ū@mãīiō ×rc…ˆĶëũ_ũíd Ū’õ¯úĨNÖū– CäßüÔ:˙WŽ=˙˙ë×˙äÂŅgŪI˙ r9–=…˙˙æĮ¯˙˙ų˙×˙¯ŋØøKÉŋ&ƒSŧ˙˙ī¯ū–ž˙ūŋßĨ¯äŽ|•ĒųhžXũw˙ī˙ūõ…÷Ö˙˙×ũzč …~@˜ ÖC>Šũ˙ú˙ēO¯Ã]zūēékū—!ājÕü0šHAũ˙˙ŋûõûk˙ąj)'˙ŋ×˙˙!ĪŨr°h† ƒô˙˙ô˙ßũCôŧ†HgČŦ_˙˙_ô| ĸÚYXWGÂ˙û˙˙û˙Ü~—ĘpČß˙˙˙­ä^ä @¤ä3ų?˙}_˙ÕŨU!Į<˙×˙˙ũ|œ¨ lŠČ€ÆĄņ˙˙ī¯÷_ú˛éRHņÂ@s2}`ß˙¯ęŋęŧE‹ä Hrœ…Đ/˙īû˙˙]!˙K ÂŅ 2p‡†—ęŊR˙˙ø0˛Đ˂s:Ķ˙˙ũ˙˙Ûūœ¯¤qÂjA˙˙ŨúõūČC-ōĀYã#T>Ŋūī˙ūß˙ßũ~“Zč„ĩ_@†Ģ˙Õ*õ¯čƒg°4‡-Ęî„?˙ī˙ũ˙˙˙˙˙\ƒ|ĐO6#!¯jŋ˙˙˙˙y™`0į„"/ūõK_˙÷˙˙_˙ū!‡÷IŅ ė3:_˙¯˙˙Žŗ @ĸ@Ô5>dN˙÷˙ü/Ōß˙¯úūŌl&CaČ$5Bë˙ūŋøō2 đŽ˙ŋ˙˙˙īī˙˙u~ŋo_šĐƒHiĀoZéz˙õUûFbš˛€WĀŋ~˙˙˙˙×ī˙íöˇ“­—Čîßõ¤(0g<œ ‡˙˙ë_õū4 Č丁Ģ˙˙û{É×˙˙ûöŊūSôÄHš˙琐ˆČh˛ b;a˙ë×O˙˙ō`Ē9¨…Ũ˙˙˙ũ÷ßë˙˙ŋĢĨi]õ_ũBŌÔ# do ˙˙˙¯ŌŦ†qōa™čZũ˙˙˙üRģîũŋģķëĩė?ŽŋĨüUēoˇđÃÕkUķ˜u_úü†øCy°7sš;˙˙˙ß˙ß]{˙¯üwŠ}Õŋ˙ũ'äéŲ2rĄÉēVŋ˙ĐĐ˙ú["×˙˙˙˙ūë˙˙Đģ̧í/Ėwô›õFÄjDsŲ\"A­E„ ˙ëūŊō YQÉąČmú˙Ū˙˙˙û˙÷˙˙‹LUÕĨ‘c‹ŋũôb$āį!—ë÷ũ˙čM˜ pš˙ë˙˙˙×ū˙˙}ž@Đ ājP—˙aëûUIũAqĘpˌ˙õ˙ëÕzųČWČdƒō¯˙˙˙ûũ˙˙˙˙˙ãQŋ_<.N š~×öŗĐL„@ˆ`ĘâƒĒúë_ôŋô¸eew˙ß˙û˙˙ë~Ŋû˙ũy@Sˇf‰m­Cˆ~:.ģŽ!8eĀb&€j Ÿ¯_¯˙øŒ„ī˙ß˙˙˙˙˙ūŋīûüZbžĄ7l?ĩqū`KBy ‘˙úūŋ˙ũ˙÷ëīī˙÷vëīûw×˙ä AņŽÔmM.ēUę”0fę—˙Zé_ĒUŌK˙˙˙˙ßūõ_˙ũ˙âË ļ+ĸč?˙Čūˇ.'˙˙ī˙˙ūAÎ?˙˙˙˙˙˙˙˙˙Ԏū"ž“Đl”zH/ õŌ80Čm˙˙ũtŋúüJ–˙ī˙˙˙ûŋ˙õûúĮ÷k§žF¤žž“i ƒpČ ë^Ģ×˙ë_˙d#˙˙öˇ˙Ŋ˙˙ŋ˙÷˙äņk[‚¸i˙ũTüĐ €ĩ˙ëÕjŋ˙Đ?īŋ˙û˙ú˙ūū˙ŋũČ5˙íë¤ĩKUÕu”âŲ Ģõëūŋ˙Ōū˛˙¯ūŸ˙˙˙˙ŋëßŋņ˙ČPũ%ôˇí…X-Ą'`f/˙˙ũ˙ũĀ”˙˙˙˙˙˙ū˙÷ūģ˙˙ö‡Ō¯û˙Â̓r €]˙˙˙˙ë˙Á{˙ß˙˙ŋ˙˙÷ŋÛî˙˙ĒI%Jē\%Rí‘C!°zūŊR¯Ōõ_ũUl‰?÷˙˙˙˙Ģ˙ß˙˙×ßÖŊ}$°’^h(\‚ÅâA12q˙˙˙˙úũxü‚ī˙˙˙{˙û˙˙˙˙˙˙˙ú[`ëÄO‹×~•¨m˙õ˙×˙˙¯ē”(_˙˙˙ßŋßī˙˙˙÷÷ŋ˙Ō¯]ôŋĨ6#FĄ¨(ĒÖŋú××˙˙O:)×˙û˙˙ũ}˙˙īīŨ¯ō°8ūđDpcŌ žČ÷áTķmĸœ C˙ūŊ×īŌũW!_ßß˙˙˙ŋī_˙˙˙öõ˙ÂĸŒ0Čõt„ũ|ƒPé$ÚD%˙Zõ˙_ÕUi_@Ž€mo˙ī˙˙õ˙˙×˙˙˙]×˙ĨØˇô˙äīĮKIæÔ2˙˙˙úßëūŋŪ˙÷˙˙ö˙˙ī˙¯˙ū“˙ôũûL?â×éĩ˙˙Uī˙˙˙˙ @üŊ˙ũ˙Ŋīũ^ŋŊģŋ÷˙öŪÕ´—Ŧ+ TkûÖˇ˙¯ëßĒú˙¯Ö˙Ņđ6†Ī˙õū˙ūû˙õë˙ĢúúėÍĢßôš¸CõYøžūąī˙ũ˙˙ŋëô˙ŋŋ˙˙˙˙˙˙˙˙û÷Xė$Ũ?°U֔!oׯ_ŋũR˙_ūŋōaø˙˙˙˙ûū˙˙¯˙÷v™ĨŌĩZÛũh?ĨÕUÖŋ˙ë×­˙^‡÷˙ũ˙˙Ī/˙÷˙˙_éũ%‚ÔØŠĄíZƒūÖätķŅõ˙~ŋ˙ë˙ú˙!/ë˙˙˙ū?ë˙˙ũĩ˙üZbŧ%äŋdqŗĪ‹Ĩ˙˙Uũ×ūēūŋL…˙˙˙˙˙ûßß˙˙Č2×˙˙°éđ˙Õ˙×˙ëõĨõú]°2˙˙˙˙˙˙_˙÷ŋ˙âÕūDÕ}E‘Ņ\āWšŋ˙˙ëęŋ˙ũ˙ŋîu`7ûŪũ˙ŋŊ˙˙˙}ÚŨīø†+Ķõô̝BūŊjžŋÖŋKëKÕ˙˙÷˙˙˙ŋ¯Ũīŋ˙ā¯˙˙mo˙_˙ŋÖŋ˙˙Ē˙ Ä?˙ë˙ũ˙÷ũ˙˙˙˙ŧÖ í˙éOSÆÖēõ˙˙ëõ_ú˙˙Bȗ˙ë˙ũ˙˙˙ŋ˙˙˙ūČāA.t¨ˆ˙¯ĐéQ •šÉŋī˙¯˙˙_Ē˙ũ%Áũ˙˙˙˙ī˙˙ūŋ˙˙‹8ŊĨ˙˙§Ķ„ĸĶĨׯ^ŋ˙˙˙˙×ō˙ˇũ˙ũ˙ŋí˙ß˙ûņ#r¯ƒ=;ŪĢ_]Č:˙˙˙ūŋé¯˙÷˙û˙˙˙˙˙­˙˙ß˙ˆėVÚMĨ˙ôß>/¯úõKūŋ˙_ëë ƒ˙õ˙ßŋũû˙˙ūŋŋ˙´ũĨŽĩ˙Õ5ũz˙˙˙˙˙˙˙X Hø˙ŋīīŪŋ˙Ų˙ŋũûøb‹ oÚŋü†ˆ„í}u¯˙Öŋ_×õ_ÕVP¸'˙õ˙˙˙˙˙ë÷˙ë˙dé:_ũ{cõ_˙ë_÷ũzõõ˙ņ˙ī˙˙ī˙ë˙Æ˙˙˙ũûÃ^˙_{U˙˙˙˙_ūĢŋ˙’Đ6Ģ˙ũ˙˙÷÷ŋ˙û˙âėVđēū˙˙Ēõ¯×­R˙úK]Wö˙˙˙û˙ũ˙˙˙ŋŋÛúČÁļ^ ƒé˙˙ëūĩ[ú˙õ˙_áH}÷ū˙˙˙Ūū˙ū˙ŋßīˆ4žŠūŋÖĢöŊ˙ûë˙˙ūĒ™ >˙˙˙˙ë×_×˙­ŋú˙‹šSKú˙˙ë˙Ŋk˙ū¯˙ë˙ŨO_˙˙˙˙Ē˙ßë˙ũôĮˇ˙˙˙×˙˙˙˙˙˙˙ų˙{÷Ũ˙ŋ}ßûõˇß˙ē}\ZŪŋúūŊĨ˙Uũ.ĩ]U;úéu˙˙˙˙÷ī_˙˙˙ŋō@8_ɏ¯˙˙ë˙õ˙˙ũ¯üø†×õû˙˙ëŋß˙˙īߡĮ´ŋO˙˙˙ú×ú×˙˙Ēë˙ȎLrŖ˙÷˙˙˙˙×˙ūŋ˙ĢéĪa~ŋÕk×Ē˙õ˙īú˙˙˙^B˙˙˙˙˙ŋ˙˙˙˙˙ņÚˇ“w_˙˙˙úūĢ×˙ú˙_Œ…˙˙˙˙˙˙˙˙ßę˙ktĩĩ˙ÖŋZĢßūŊVžĢõ__ôC°,˙˙˙˙˙ū˙ŋ˙˙;Cđöëūŋë˙õ˙_˙˙˙úō?˙ŋ˙Ŋų‹÷Ŋ˙˙÷˙õøáŠÕë˙ī×˙˙˙˙˙˙˙õīŊī~˙úöëŪžŊ˙ī˙Ŋŋėj*ŌēÕz˙úZ¯_úũKú˙Ö˙ũ˙˙Ķ˙˙˙˙˙˙ō`WŖPÖŋ˙˙úũk˙˙˙õ_˙˙˙˙ŋŋõ˙˙˙˙˙˙ō`$†™¯˙×˙˙˙˙×˙˙ũ˙īû˙˙˙ū˙ŋûëīņ ÄØ¯ūŋë×õ˙Tŋ¯ëëũ/ī˙ßë÷˙˙˙˙ũŋīȆWŽqÅũׯ_×˙˙_Ō_ēú˙_˙˙˙˙˙˙û˙¯u˙°…@šU˙UũzõũWÕ}˙Ģ˙˙˙ū˙˙ß˙ë˙˙ū˙o˙á@¤ õ˙_˙˙˙˙_˙˙Õ_˙˙˙˙˙īī˙ß˙ũ˙û˙˙˙˙¯õūéõĨëúũīßûß˙īū˙÷ŋ__ ŋ‘Ą×¯_õĒô¯õũj$Ŋ*ôŋ×õ˙õ˙˙˙˙˙˙û˙ū˙­ 8ƒëÕk˙újŋõ˙˙˙_˙˙÷˙˙˙_˙˙˙ī˙õ}‘?˙˙˙Ōęžŋ˙˙˙˙]˙˙˙˙û˙˙˙˙ŋ˙ûúUëׯ˙wõŌūŊ$ē˙ę÷˙˙˙˙˙é˙˙_ūŋõë˙ō uú˙ëęŊz˙˙õúëû˙ö˙˙˙ũß˙ũ}˙¯ß]uŲ ~ũ×˙˙ī_Ēũú¯ëÂ˙˙ú˙˙ū˙ū˙˙˙˙˙õü)__˙ũkūŋ˙¯_˙ęŊú˙˙˙˙˙ŋß˙ú˙ūŋ˙˙ŧ„Ī˙ūõ¯ũ˙˙¤÷Ĩ˙ũŊ˙}û^÷ũëk÷ũģûöß˙]ttčŽg^ĩ^ŠkūĢÕ?Uūļ–ŋūé/˙˙˙ß˙õŋ˙ŋ˙˙˙ŋ×_âĘ˙˙˙—_˙á.˙˙×˙˙˙ūũ˙˙ß˙˙ú÷ū˙­ëâČ›˙ũ˙Ĩú˙W˙˙ëú˙ŋ˙˙˙ûũw}˙Ã_˙˙ĩ^Ÿ˙Č1ƒú˙˙¯˙˙¯ú_ĩ˙õ˙˙˙ŋū˙˙˙˙û˙ūŋ˙˙ęļB9N5ũz×Į˙õŊ˙˙×ë˙˙÷˙˙˙˙_˙w˙˙˙˙õ÷J…‘,ˇu˙˙õõë˙õ˙_ūē˙˙˙˙˙ŋûúwŋū˙˙˙˙øŸ¨6¯ũk×˙õ×õ¯˙ë˙úũ˙˙ß˙˙˙˙˙˙˙˙˙˙˙Ȝ?ë˙Ŋī˙˙ëú˙˙÷÷ŋ÷{žīũīëûū÷÷˙ŋÖĩë^Ǥ4@ę 7¯˙ëëׯ˙ę•zëëôŋūŋ˙˙˙˙˙˙˙¯˙ūŋ˙˙„ ˆ9Į$8ôŋ˙_ë˙ũ}Õú÷˙˙˙˙÷ũũŋ˙û˙×˙÷ũk úūŊ×˙ß˙K×˙˙Û÷ŋé˙ī×˙˙˙īû˙˙˙_˙‹ũ˙_˙­˙Ū˙ęĩ÷ū˙˙˙˙÷˙ī˙˙ũ˙˙˙˙éaúõ˙ú×÷˙_Ĩ˙˙_^˙˙˙ũû˙˙˙˙˙×˙¯ë d å`˙˙˙ë˙Žŋú×˙˙˙˙˙~˙÷õ˙ī˙˙˙˙úúõvõĄ( Āč :ׯë˙úŽē¯˙¯ë˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙û @č ã˙˙ú˙ëÖëũ Šŋī{õŋīŊû˙ŋī˙īû÷×˙¯îĢüƒ!˙_^ĘZ¯˙_õŋKę?˙˙˙˙˙ë÷˙˙ŋūˆlúõ˙›Z˙˙§˙Ą˙_˙ũ/˙××÷˙˙˙˙˙˙˙˙ûŨØ"œG˙˙ú×˙"{ūĢ_˙¯¯úũiz]îģ÷ū˙ū˙Ū˙˙÷ūŋė„#¯˙˙×˙˙b ˛@Ķ˙ׯ˙Ō¯˙˙˙ū×ûŊ˙ūŋŊī˙˙ø!_˙¯ã˙ú]bNŽ@ĖZ˙ūģ×oúūŠôŊu˙˙˙˙˙ßõūûC˙¯ë_ūĢī‚@č Sú¯ëú˙˙ë÷¯˙ú˙ũ_ß˙˙ûûytOë˙õ¯˙ō c˙¯ú¯Ē_õ˙ëūŋ˙˙˙×˙¯˙ũöø`„˙˙˙˙˙áČë_˙˙˙ũx":˙˙˙īī˙oûŨū˙ģ˙Õ3ú ŨĮę×˙ũkëõüƒ#~ĩ^ĩ__¯ãĨé}u˙˙˙ß˙˙˙ũĶ#´ė/õ˙˙˙×÷ŋ˙˙_˙˙˙˙˙¯˙ũõ˙˙˙ū˜!ūŋ˙ßũVŋČ1ĀÖŋë_˙õë__˙¯˙˙˙×˙_˙~ĖĀ”.ŋ˙¯Z˙ŪŋUČO˙_ūŋũ˙Õ%˙˙ī˙ũ˙õöGūŋ¯ëūŋūĩŪDÁ˙˙×ũ/˙×ëõ¯ß˙ß÷˙˙īvˆ(ą˙˙˙˙˙˙ë˛x swKú×˙˙ë˙˙˙˙˙˙˙ū˙Ž]&Gh¤pČŋ¯˙ũ×ë˙T1u˙úõ¯˙ëõūŋû˙×û˙ûū]h6z˙˙˙ú˙˙īėƒ­˙ūŋ¯˙˙˙˙˙˙ũ˙Ј¯¯ëęĩ^ŋ×­]# Bās ?ūëëKũ}/×Ō˙˙ß˙˙C¯×ũ˙˙˙˙ꎠs]~ĩ˙ë_ūŋõ˙Íūß˙ßŋũĄõũõ˙˙ũWü‡z˙ũ˙×˙­?˙˙ûĻŋ×ũ—ī˙˙ūŊzũ÷ūę0iūĩ¯Zũ˙Ūë¯ëŋ_÷ū˙n8˙ũūŋ^ŋõ×ų!‡˙˙ôĢúëŽë˙ī˙˙˙v„­×˙}ŋū¯ŋGĐ9ƒú­_×÷֗­/ˇ_˙Ŋī˙ũ`́0k˙˙×˙˙˙¯ũ ˙÷˙˙_˙Ú˙˙˙úq˙˙˙˙˙˙˙õŪČ9܁ĖAĘë˙˙˙¯õũ˙û˙ Đ Ą—˙ęĩ¯Z¯¯Zú¯IwĨ¸ąJŊ$ŠU/īÕ*]/˙˙÷r8˙˙˙˙˙˙˙˙ųƒX˙˙ũ~ĩ˙˙˙ũ˙Џ×˙ũ˙˙˙ũzūY ūŋ˙˙˙ëũ˙öū?˙˙˙ú˙ūŋ˙˙č2z˙˙˙ë˙Ūŋû˙Údp9ëõ¯˙˙˙˙˙īŌ˙ė„á˙˙ũÖžŋë˙Ļ„o˙˙˙˙×Ģûūŋú_Č0åC˙˙ūŋ˙§˙oû@Á˙ßūŋ˙¯__˙˙úÆ@Œ r \Ė:õ˙õũ˙˙í×˙˙˙˙˙ë˙ßúÚũĻW+˙˙×˙õ×÷D=kÚJĩ­W¯˙˙éuū˙éE‘0åá(;¯­W˙K]%ęŋLĐ ŋ^Ģ˙˙˙˙_ë˙ūĩū# ģ‹Ĩ˙ë˙ú˙ûL¸CZŋī˙˙õ˙˙˙˙¯ŋųq˙_˙˙˙ë_˙˙ī˙˙˙˙˙˙˙Ķ ˙˙ú­˙˙˙õ˙ëũ×˙¯˙é}Ü7úõ¯˙˙˙˙˙ūĢúūžŊWú˙˙õ‡d@Õfŋ˙×˙˙˙ūŋ¯¯úūŋ˙×é_úˆ˙˙˙ú˙˙˙ß˙˙˙˙˙˙˙˙áĒ˙˙ú˙˙¯­zŌ˙Kŋ˙õ¯˙Ģę—ęŧ_úõõZūŋũ˙˙¯ũk˙˙×˙˙ō1p§ĩ_ëßõ˙ūŸ˙ë˙Ik˙ũģ˙˙˙øūŋúõ˙˙˙¯ë˙˙˙íz˙_˙˙/.­×ũ/˙õëũ~˙˙˙÷_˙×õüGëũ/û˙˙˙úūŋũZōuŌúŋ×úõ_×Ĩú˙_ú˙ũ}ëü÷ŋ_˙ä`ąë˙˙õú_˙˙ī˙˙˙ëõ˙˙˙øë˙ũ×ūŊ/^ŋ­zU_]ŽĒĢë_Júú_¯Ē˙˙˙˙˙˙ëūŋô˙˙˙úß_úĒõ˙ũë˙^ũkũ××îŠ˙˙˙˙ú×˙˙˙ßī_˙˙Ž ũU}ūĢ˙ūŋ˙˙õ˙ëúūž?~ŋõ˙˙ũ˙˙ëūŋ˙˙×ūĩĨ˙˙ë˙O˙×˙˙˙˙é˙ũ~-?Uú˙_˙”=zúũũ_˙ūŋū˙˙˙˙ū¸˙˙×­úú˙ĨęŌúúBęŋ¯é×˙˙˙˙˙˙˙˙ī˙ā×˙˙˙˙^ŋ˙˙˙¯ú˙˙˙ū?õú_ūŋũ~ŋ˙×Ŋ˙ũ/.ŋû_¯¯˙˙ũ×˙¯˙˙¯˙˙ßãë˙˙×˙˙˙˙˙˙õ˙×č}~ŋõ˙_˙ßõú˙_˙˙¯¯îŋãūŋ˙˙˙˙˙ëú˙×ŋ˙˙ë×˙ūžŊz˙ūŊë˙˙Zøú_ë˙ú˙¯˙ūēß˙˙˙˙û¯_ũ˙ë˙×˙õ˙ũúũV@ė ÷÷˙˙˙˙˙˙˙˙_ūŋ¯˙‹ßũ˙õ˙˙õŋ^ŋ˙˙Õäផúūŋ˙˙˙ë˙˙˙Z˙˙ū=}˙˙˙­ú˙_˙×˙ûūŋ˙˙×˙˙ūŋ˙ë˙õ˙ų¸2ŽPūŋ×ÖēëÖŋõ˙˙ë__ū̇Ä_¯ūŋ§_˙õ˙¯_˙K˙˙üūŊúūŋŋī˙˙˙_úÂĢ^—˙÷˙˙ūĢ˙˙ß˙˙úĐ5¯÷ũú×­W×˙˙˙˙˙â˙˙÷_˙˙{ũk^Ŋ~×˙ō T˙Ēõ˙¯ũz_ũõWõë‹˙_ī˙˙ūŋ˙˙˙ũ˙#¯ú­R˙­kÕ÷ŽĩëáTŋŦHū˙˙˙˙˙ū˙˙ú˙˙ãZ¯˙Uõ˙ũzÕkúׯ˙˙ë˙ú˙Öŋ¯˙_˙_×ëũ¯˙ëūŋ˙×˙¯_˙_ß×ūŋ˙˙Ŋ˙_ë¯õëūŋ÷úõī^ŋ¯˙ūß˙˙˙˙ī˙˙ë˙ūŋ×˙˙ũ ļŋ¤ĩ˙ëũzÖĢ^ŋ­}ø×˙˙˙˙˙ī˙˙ūĢ˙ČCŋ˙¯Ūŋ˙˙×˙˙˙Õy €$ë˙ũ?×ŋ˙˙˙¯˙˙ƒŋ˙õU˙˙˙˙˙˙˙øÅ?˙÷ëë×˙˙˙úũ_˙˙ūžŋ˙×_¯˙ņ˙˙˙˙˙_֟˙˙ũH-‚ã˙ūĩõë_×õĒUęŋ˙‹_˙úū˙˙˙˙÷õū-}˙˙˙˙˙ũ¯˙˙úūŋ¯˙˙ëū@ĖYūŋūŋ˙˙˙˙×oãĒ˙˙ūĩũ˙/˙ëņūžŋ¯˙Kú˙ׯūß˙˙˙˙˙ú×˙˙˙õ¯ī×ú_˙KÅ˙˙˙å×˙ũ˙ü i9Oë˙˙īÖĩë˙ë_ˆƒ˙­éē˙đĢú_ūĮ˙õū:÷ú¯˙聨$>ŋ˙˙˙˙˙Køƒ_˙_ßū˙ß˙ã˙ūŋë˙˙˙âë××JŋÕõIzū/ē˙~˙¯˙˙ų€Ô9W˙˙ũu˙˙ū"}ũ}ú˙úâ?˙˙÷˙˙ū/˙ë˙˙ũ˙˙˙ë˙û˙˙õ˙ęŋäŧîŋūŋ˙ĩ済ŋũ˙˙÷ûY ĘG˙˙¯˙ë^ŋ˙ôŋņ ˙ú˙˙ø˙˙õ¯ÍÂâ˙˙˙ņô¸˙˙ú˙øë_˙__˙˙˙˙‹ú×˙¯ík_˙˙‹÷˙ëū ˙˙˙‹#¯˙_ū#úU˙ü¸?ûë×]%˙˙Ä_˙×Į˙úČ ¸įĢõ˙ÄE¯ūņ¯˙˙Á¯ë˙ōŖÎ?â5ā̓_˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙üQßX˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙%‚¤bqņČ™>Č-†“ä ´+åa=?Ŗˆ&×ÂHjõxI”rá™đ‚!ąÁŊ| D00pōļ?¤¤}ϤnBôB7aVĶR ā‚D\4ŲAŌ´ˆß]" \Š×û[ßPM‘÷a_KzČ#ü$Ä6ƒBoáJØ;ûV­ÂúI6›ū:¤C§¤ ÔАÎâúé d\ŌDU1ĢĘqßh‚éé!Œ0C"ú§_Š;!Ļ98°ĸ÷¯ƒZAl†eVg˙…ū—41Đ:ēwÖˇ…ČhģÚ˙úNËĐ6ÂZ˙ŖĐ9oŌŗR(†ËÅĀđk­ũęšãM]đx‹˙~˛qüžŲÛū˙ä8đ_Â][ōˆāxf?˙t‚ĶMôžŋŌZø÷‹ãęŪ¸<Ūî˙…ŽŋkđˇŪlmž˙˙ôŌWl†ĢˇīŌīé\~‘ŦĶpéÛ ŌĻíĩģl˛ßK! ŋû/Ü\&ŨŨ/ō€!_š#BN›Ķa+mđßWđDv—ØkĄ´,:†ßãŋT‘—ļ)roúî‘8ÖļŌk †ŨĢ÷ô™ 3ØXÜ/5B‡o˙Ņy´ 4ęė$ų˜ĖCncū4îŲ S>›¯3ˆāȟAä‡Čž 6 ãĨ[¯|Ø-2‡Ŋkà ]7˙PÃĩŽAŦqkKéˇ÷]ú˙VÚíäwŖčŽƒoŊiˇMô;ЋükZĩÁųŸõÛj7ü! !˙ö>žƒ˙^ŗŨˇđ@Člŋív˙wô?Ö ģķ´õ}ãÃļm°ˆ ,3?ļׯßĻA¨ũˇ[ Ō8)‡Mā> Úũ†÷Á F'é ~û|7[ûŋöŌōÜâ ē…ĶũëWĐļÎíŪŋûĶä_V Û_˙Įė!iÕđ˙õāøĻž÷Û¯Ŧ=Ū‚ũ}kū<'ßíø^h'īīÁYī˜pDtų(PŸû0ŖØHFœ‚/ÖÛiۄĢA„ŸŋŌø¤ŋîĢ…ũvüƒE[m ÷Ūņ_‘|/{ÁØĐ#b+öŋׂjû÷õöH ĪŨģ>ŋ"ĖĀ}ûu°—}7˙ɰŊŨßīÁ÷ŠūÛößuûo~÷˙z_ΟęûīŨôëŊ÷Ļ)JūŊ{ˇôČņu<>ūBŲcÄ.íûĘĒŽō¯üI†'ßOY x=¯Ō÷z|” ‘šÛÚũl×vŪūƒĮoūũģü“ĖCJ ũ˙÷îũĻ)˙˙÷ēėá Tîžž÷iČEB†x/ßûíˇVf„Q(Ž—_ë˙jÔÂ*aŝ×ŋŽûw ŸA]S¯_‡žų+GßßöŪŠJŸ×_míd 2‘„:˙_īɄcKŋÕ^ũ0Ÿ×˙˙ÐkDŒdplõ÷…kąØs¨2k˙ßn†l ;\‰"y{mƒtģô#îÛbŊ-{ĩa܆upÎ˙wŪŨ!}Ģ˙{íˇwũ%ÛûëúöÛ°OwíWîÕûío~×ŪínūšĘqŽöÛ°›ˇÅŋÛ iŊíŨĸ#īaēYÂŊ}{Ü ˇHš‡ę÷\;ä5ëQëíš@ŲN3Žwî÷^Ū{LC!–ę„^˙^Ũ¤-ĐUĢ^Ōûm1õė;ëÚDK{mŋûP¯v˙ö¤'l;īĶõ†ų+}ßéöîkH?OĩûŊ0ūļMđáÁ4ũ^ë 7 i˙ßũš˜1mvķđ%VÛ­éīĒĄØuOûNÎ2ņOļŨēûa4"#†îˇ¯Čfˆ 3@mĐīĶ>ēwĩ׋.āK.Ũ5×%(ē8 Ũ=­_eō4āL{mų ˛ŋ ī†:ōŖBC rāĶÄÁQöØÉÃ$B@ ‚yp[ '°ÁŨX&• öėT4$2Nv@^- {íčƒPį‚°†@iP†Į({ŅC#ČižÛj"$2Á8š„ĐB¨?†í”á’‚%à p6ûČOöd Ø!đ@ģ¨Nü+$xv ¤ī ‚œĐd2 †@)ė6Čd‚Íq§ę‚!Â2€!Š €mtȏd3_dzÃ!’sYũtĶôl2 ūĶ k§Œ0Ų €TJŋMų;Ō îíŠ ĄÉZ’Û)ۚdá÷~ ‘œ0aūž—AÚØļČdpHrqëø~!K˜vš{M?ūƒ xgâŦ†Q5õ”÷āđА0Ķ_[÷qÃĄ3 Ÿõoî0Ü0_ ī"Įąļ@ōp_ũnųĀH–fnČl|¨ĒD0:Aø`à „ī÷ûí tʡOûô ņ įÃm§w˙]÷ Š 1J¯VÃAž]ņôŦ?Ō˛Į§ČŖuũ´Û×ú§ˇÔ&#xˆũoƒXvõú՞ūé)|AąírßúæŒ?×ču]%Čfk)×^˙Čqđmŋ˙”!ƒûŌäBúßkÁˇū Aë˙ä ĄŦuڗLC#ūČ #˙˙Ĩáŋ˙ƒ­ČwŅ&0ۅĨqz‡ŋĢ_ü? ß˙îIÂhf ĨëoŦ=˙õ˙Ū×Úø¤HLÃÕŽāčæ.ŋz˙õ Ü|ũũ˙Â<‚!œeßîĶbÃ˙÷¯u˙ëÚPË#@ŊË †–ãė5míH.éä @‚Ŗ˙ßũ-kđÛa†>ß˙×áˆ;O˙#ŠŨ"ĐĪB ĐqŌ§{ŧĶ;Ūl%vî:O5°ô˙ô˙φ YQ ’0ˆAĘ)oÛ ģčDœMģy ƒė˙á Û¨H„†@œ~„C_ļĢôÃnõü˛Ĩ˙ôģŅ1ÂAá1ƒ!˛>š[æĒš #4;÷û6 ˙¯qāÃëÁK!@÷°ÅJ:åŲ1ë÷wĮ˙đŊP‚RîGaßŌlé ŋKubÛnâ:ŲėVí ‡¤!‹vŸHâąm!$vD“˛ūáé¯Ã(č†Née8=¯Ãi+Ž į;¸ÚúwĮĩ†a!II‚C)įÚÉ8ü)´Ã“+=Ũø˜B —ˆNøŋ$įĪņõBåĐzŠũCᐚûĒÄvš&ˇ đe"ƒÚ ”AģOō1ō:į/ᎊŎ¤]xũĄđ’ĪŽŋƒ X¯õ˙ jC™ü?û Ž•´]uPÃģÕ^× ũÚ ŽƒŋúˇNüƒXuÃë˙! °i\‚Č.:ū•ŋēŨ¨OȆÕõ÷ķÚIIŽ3@!¯ŋīŊĩw™vh W˙ÄH"¸1pš< /]T†Œj7õ ` °Ū÷ū:ĻAĄČŖÚŌDXûĒūĶ2€T×žŌ…ƒC†šũ‘ŽģÔ˙Đ2öīņTáĀD UÃtû Įd€l×đĄnoVœ(ôŊëļ˙0­Ž!´>Zõ`s i#úČfŋ͆Ûūƒ ×^@ÔXū˙ ë¯Ũ=RÃoÛMúh<¨-Ŋ|œ`Ķé_zj=ēė(uÂiáĩÛá•:§!ĪBitˇÛŅ ŨOdb~ƒö_5ž‡E:züCÕjŧ7Lkoéøļ¯|—˜-*ÖČ8;8îĨoļŗüq ˛8­~öT¯…R@RčûÄ2PŋŪÚOÎ­†“wߐ6/ĩķčķđ¨û‰đ<3>F9?ŋ^Ų5öéøoũĄîÚ{úJ苝cöL^ûŧ° ŸīM—ÕßĸĄāĄÎ?k}ũĢÅŋęž÷‚(~”8Âüs?§Â˙Ķ}˙ĒũøžĄžˆāt |$-Ĩö1iÚ^žß 'éūû#¤?d*€žcKoŨđ]‚]?ĻąR1æđaœf‡môžīoū—‘ ģOŽkë¯öà ņmũęŊî ĪĢ@á×גęČæöBŽ”[zk¨¯|ƒq˙!” Ū–÷¤ŊĻū`Û>b”÷eÁO_˙‘Č ūëÜŽ+ë‹úA†,S=ãT"Į˙^ė•ŠĄîëõø+ø/Ōm¯iQW‘Á^ūžˇ˙īôˇ˙°E?ŽÛU‚#ÁhYũ‡û ’Ö‡.÷˛ĩv!:äl•ų w]ļŧ]8¸PöęŽĖ˙ŋī÷ô ~#ū ŋm'ˆuęŧ|^ÛŪ5ú †}W]ÚüŨ6ūš}ČqÛđú§t×ȄĄ÷J˜uxkČlq :ĩßûģŦ…ƒŠđiėœĀŧ}ē‹uá“s¸ēDAīo÷Ÿ_ƒ§\˜DS’-†ĶĩöXŌzé0ŪÛvÛāÔo fU‘ƒ+8ƒDŪü?mįŌÕc8ī÷Döû˙ûČ4ŊĄAÎ9r8ĄĪA8‚ō!Įj+ĩow*nôéY7}Ūģúž`/ôĐÖ#˛(āƒ"ĐŽL‚‡0å9C•­×úåÛ÷ˇëģŋŊõûđŨãBė‡xˆˆ2d5܃K09ūßõ}ĸpÖSŲĮ‡úŋė‡îõöôĮ†AĮ˜ ī ԊNûĩ˛H!ŠČ#]ČŧCžÛø‰NcoÅŽîŪķ˙ū“­^ĩüØsaAM˛=›ˆųá‘Đ/@ԍ:r!4ûm/*ĄŠo|îīße[ōŦĪũëö“ŖüRŪ"Ũâ ØhjŽ'^§r+!˙nž\ũĘČiûkĢŋĖô ö˙Đ!kß÷Ēß˙Wŋ˙D$_ž q/´ŋm{žŋßy™āߒi)˙ßũvŋé?÷¯MĐĩC6žŋk qÂZéĻ?nÚôB§°{I˙Ļ˙×}~ūŋoŽcoMŋīkûI3ũ dBpÄ\=[Čŧ2vņŨW˙īˇ_˙÷ëĒ˙íęīzžš !Á„×vŸŠīũūŽ×˙˙˙ë¯UūúžC3‚œvG…ęƒ)ÍĶw­HŪĪjƒw˙˙ôŋĮ˙˙ŋũ˙öÚÛ˙ČgW/ä3]žŨžę:Aí˙ū˙×˙˙˙û÷ã_KŲī¸!}˙ĸ_+}õÖ˙ęõÕ˙ūõ˙õõR+ũd54đCaÂ…Ķ8ûÛiÄԓø]ž˙˙kˇ]?˙÷õë_uÛaxØwä6´›}9 ĸ,2ጁËũo˙ļŌ˙˙ųŊž­ũžˇë(ú°i~ŦúA˜D´+õúīÖžũ˙ëôˇ÷÷]{ČĀēę̰áĩᥠJŌũ.žú_˙_ûk˙kŨ{qOūĒC>ov¯,‹ĀˆZsĄŽŊû˙Ũ†—˙ū˙˙˙˙×j{Ŋ'ŰÅũ8ĄÚūëķAŋKcëû˙ŋû˙ëŨ'˙é~ nūE…(x~—\E{u­ü†‹„đĖ:˙ô˙˙OļHf×ôā‡Ât*ˇ¤ũiXu§øĩâ:oũī[_ߨ@žŊß&VŊ]ęũZˇ˙×Wú÷jŨ_˙ }2 D7ģŌXKīūl˙ëę āˇõ˙Íb3Åi~ôX§Ã2ŸÜƒHįDÖjôžŋ˙Ú˙ų°ŲæÆ­‡é_˙Älm|Ö¨[bØˇWidK/›dpOß]­˙ī_˙¯čÕ­ŋxéWNÛļŲæ—{„"?˙ĖĶøjŊ}˙īķˆŽÖ5¸vīUûģÚß÷Î:Ąüëũü!ąmo{ëzáļÛi/ŋ!ĄB˙˙˙ØoײC¯_īĩŨŲåø~đÄ+ūŪŋ΋˙×ū˙ŋ˙õõ÷U ģŨ§˙iŖ˙!īūģīâŋëWvûzÖäh!Úīi˙ļ—˙~˛āŸû_c˙˙ī÷ũ?Õļ˙žũU~û˙V—õ˙ĩßwŋWÔ5Ģwjė'í%˙×˙}˙FŅ+˙˙÷}o\SvŪ×Ū…˙¯˙õõŊú×ë˙o¯~Ŋü+üŦ 3?ûūę—˙íũ˙÷ßņmŽ÷{3ŋq×ß×˙¤ū˙ú÷ūŨéŋúÛzøĐÚ˙˙˙˙ŋû~úŗŨũ{nՃ+ëîK›ø4ŋöŌ˙ūēëīonūCßęÛĻąŋŋ÷ûÃ<Ķ=íŽ˙ūũ}?oü­¯÷#x-žĖč B8ßß§ėö^õĩņ!Œ_›{„˙´ŋŌŪÛ^AcˆLf9áūJFG eô­ˇAXpHˇÅę÷ņiÚ˙úüŽŋƒu˙oũz`›ŽÃüxĩžš…˙׈ˆ‹M>×{§Ô§DqYČ×ūÛm>J0IĮoö“[mČØjĶëõÄEĻ^N×ĶņÅ_(Eķ†ßwtㆇaūIR@f]äã §I*7öŧDZƒD8悜FšŽ"ûīÖEņĩ§pšģm&2A"×ø^""#/—EĀÁt\'jŸ˙b­îI˙a]Üāaœ6ĩtFለˆŒÆ_.ˆáíovy$Ú놕ļāŠ1õí ¯>´Mãúo ~ÛR†×ODĖ8[ĘŋÖÛūžŧ™šÎA‘ČlŊŨX•ƒ‘Ž×ū˙öŋ‹!\ ČČ9pAP{‡ˇĒ$p_ëŽīīõO߂AC× ‚hEŽČƙ cĘǤ§>4 ø˙†ōV}ßĒų€Žû"ÂĻŧ4,ŠäÍ2°ÉANÛ HĪ ‚(xĸ7­ú!lŧŪč?ž˙îē>OĶģ]5M´B ļá¤"’$%ũDÜ× ũx4¯Ķzráj”Ø­67zÆBęC8îîĘH$1Đ¯ø3Z°îi˙V]üŋWŌIá=÷ŲĶ‘üÚStôō+āķP2¤6ŋ‰˜HaˇA }¯k—FÔ'Ŋ[IŋAWßaP†īÅD‹hã}‹°éVēõl6Âw[†ė%ë˙Ŋ.ŌŊ´c}7˙TBGŨŗ`VÕīųOmšđ"ß^Ķ8ŋ¯^•}ž×TžēØa'Ûö‚ם׎ī_Ė&#˙˙ũ×˙¯¯Ŋ7ļö+ŽõīđŠÚd¸ŋvŋũz˙ūŋŪíõöGÃ`ú¯Ü†–Ÿ˙Ž‚ë˙˙õģĶ]Ŋw˙Un‚Įވ6Gú_øã˙ū˙ūß /_ūaĐkk‘db.‹´{õ~×˙ūũŨû˙KØnšũ„":ÂĒŋ˙Ōŋßč5°ÛĩzׯÛ܆S¯.ä2ģú÷}BoõÕ{ĮŪ××˙o>DhQ@ųĄ˙\%˙˙˙û Ŋ?õûęōpČRæ`;ãëûaũ˙ÕīĻß˙Ū´Ëĩ}˙Į4 uīéúß kĶȗ˙lƒã\‰ÁšdGלūū~—˙˙ۃW{ĄŊ°Û Ė ) zUôBæ•ö|ĖŋöŊ…~ŪÂôĩęîŨČ8 Į¯ž­ķĘAK¸ę˙ }Mŋģ(pŸ˙õ{!\ˆá ÃNC9{Ōöú~›  ß Īaažāʀ¤?öčÅ…zīÕ°ŲCÃf Č `d6x&Ŋ/^œ? ãb!ė=‡pœŽ6ŸŊąxČ ąĘu?ū˙öÃķ…˙ôŠ%ÃcÃmŖĀŒtšƒ §}˛ŦŽëaƒhG„ī^ŋ˙o§§øDį †{°öîƒe:Ã ũ˛ˇČũ˛!Ž=øAüŖ˙Ã_ī˙˙Ą„ íßC("‹ŋÜ}‹ ˛(t%Ŗ­ô˙ņôÛ˙kõžđë ‹"ĨAëūĒė2n9o˙ą˙ū˙n?Ŋ{ļėR#\–†zQÃrŠ_ü§Ũ÷˙ŋūß˙˙ž××$ˆ¸Úėrƒ3čB˙ß´˙Ņ€íH`{ ˙ūûá쎎Œ=ĄÃI[†@đŲ„āãĄūĢpöúžŸ÷ūŋĶ ˙û\6hE­{ĢÕHĀ5_ëũČiŋÃøFÂ˙Ķõû ŋĢØōCæß˙˙õ¯§ž7ŅŨWŋî˙ÖØlînũ$ģ˙īŋß˙ēū˙Ģ"‹ŧא‡ëūÛB˙é&īŋK÷ûoũ˙×˙žÛ„u¯{m´˙ūqí-{KŊ˙ĩÛŊۅw÷L0Ú¯ũ?ŋ4/īîÚM×˙×˙āÃniëKŽāõ˙š$žü†°ËâŖãÛ× wûĨ˙ŪÛ;íũ+Û˙ôIĶø—#úøŠ#÷õuõģÕŧ'{íß×đbúŋkˇ VßöĢũØ"ęAņļęŸß|ģīôÂÉ A„b˂…MmUnžÅ|ęÜ8¤íž›÷éY˙ú~īˆĐ¸´õOīō\ûۄíõĶX˛tî˙īō1üDDZ÷÷nŦw´iv†&€§ŋę -á›\DDZižFÁõ°ŠîšíĨ Ú×û_ˆˆ´",(Õoû_ũ÷ņƆkR4í”:~ũŋél6ũ֚`Œ2>/˙ëßÛoĢ}qo˙Ú"ûŽíęī†Ÿ×ßôëë`ĶikpÂ\3Xi´īũ:úȁbW ¸ä(ė6Ä]¨N۟ūš÷ZLN !€;xöY 6TŸ˙„7t´Ķ퐎CSR gŪBš7pÚ˙[ŗ~ē˙Ip~m}¤ûAĄjƒ"9áļŨ¯âÛŪÚ[A‚Ō"gNô¸´ôØpå?…˛= Đ¯ŲpĶ˙qøö¨Š>j`'æōųØkM&܁āB1ōøRHí åT §Šq›¨e?ōņ_ņ-īÛũ&õÄl‚÷0'ĻŨœĖŽhDH#+@ ˙ĒÖūŋŌo÷¤ƒzÃlDD2āvJwĮÖ>F?ß˙ĨŪ—áļÚŪG? …Ã˙˙ôˇöMÁħO×Ú˙ũ}˙Č !æō!/ƒ ítēõ˙×˙I0Û&<2“áøũĄ§˙_}^×"XĘ?˙šĀđb?˙_õĶgø?~÷!Ą˙˙_㤛 á¸ä.¤ x3a !Čeˁäã÷ā́ā_˙ūŋôąļ„2üŧ$9A„ãh!›g8P™WF€tũ˙ņ˙ū—­`ØjEĐ::x‰đ.28&CEd3ážN1=í'ߏ×ū—ūníb;ĶT Õ9 )ú˙ûë˙ Å˙§Á5¤ÃĢü.ŋëO˙P{ĩë úd€Ķ<;ü“Đ˙˙¯û'ß÷÷zL ŸÖA´˙˙×ßú˙„ßVÖŋ…ú˙z_@č ŋz˙ÚŌDŽC˙u(hf˙ū{ëü_õ÷é18]ö˜_˙ĶĮÖ ô.Ÿä€­ĻÕđ‡˙ŽŽžrl?˙„÷ė֌ŠPK˙ũëŊ˙ũ~ųŖ:%{ú%ĀÚ ]ûFïĢjGu{¯Ēƒ†A‰Dt›¸/˙ĮĒÛūēīíĸ@ZO‹û< ŋ˙Ã˙š #_Õ.ûũ¯˙û˙m†PöŋÖûÁ:‚ö‡˙ũßíŲk˙­ß Ąßø_˙÷ũXļˇ˙AģâĮ{g€”|žä0û˙āÎĄ™õųG ô˙|˙Ķīō ļ@č į˙üuī¯ļ˙×īđŊĩ w­V׎HeĀ–öÕŋ˙CëūšŪûãģ—ũũûiëŋÚlo´@‡*;Ļëm-ŋũ˛@Đ8÷˙ )!](B;e w]ũëĮ˙áõē×ACÃ1÷Ö×t˙˙đdĩŊD\}ęÃ__˙Ĩq|‡Ų:†ļģČĐīŲ e9‡˙÷kČĮ|q †] ÁŊ8ļģĒŌīîŋ؈P=0ši¯™‚ÍḈŅģ!°rcģLĮ•xŋõ"?ü  €Geޞ.Ÿõ­~ m1~÷ūŸMWˆ9Cõ˙¸M-Ō MŠČ°AĒ;7ŋ! r†ŦËC`ä?ũ˙"ņ˙éŠ! M2C"DsŽW3"Í#â˜ˆāl™›˙ųâxøItŊ[ÕuÂĄd$'ƒ ŲO„)Æ~4Ų›ČáÄp52@k§ôAœ}Z n’6ûu8Ÿƒ]ß÷¯B,dH Äd”îžĐ˙_Ē˙¤ kj˛cĪ„6œØMķĒ_~ąo]í|_Ån͆ųŦ'ü`…"đŨäĮTlI a ™6!€†ãsũĨ?˙øio[Õ[@Šá_ūŸNíPĐŊĨú/ā×L˙ëĶūĄö˙Fū“̰Î=úß´áĸLs˙ûß÷ŋÕ^ŋûߐ •-}û*‚?î˙ļŌõ˙˙˙úoūßÃ)ÁÕ~ģ‰u˙˙ëūŋīŋõ˙õČz÷wށ„>LzõÛKZ˙ī¯˙˙zÛß_š ¯˙ū?ß˙˙˙˙ë°˙Ęŋŋéīö˙˙˙˙ūģK 1 _í×é7ú_˙÷ũ˙˙ŋŋWōŊūáWˇ¯ūck¤ßŋ˙ød{˙Â˙ļë_˙¯_˙˙ŦGŽ ĨĨš˙ũ˙˙˙˙ÛK[úfđP˙ūŋ˙¯ū˙˙÷īüˆˆékļ¯īßÚWú˙˙Žž˙=‘ā†×§cëųŦO vũ¯˙[Iŋ [w) VíŲC—Oé7úņ]˙˙÷úZ鎆ĸ#ÖÚ_˙ęžû˙ŲD\BF›ŽČ°Ŋ¸}Ö­öŋŋI?Åď¨ųHûÖą…Ž×_LØlķ…īÖũĮņky#åĀęÁŋ÷˙¯§ßéúūl‹‚¯|'āĖaû×˙˙ũ˙˙ô;ĩ÷ä.û#]šŸĒ˙öŋw˙ũŪž¤4Ÿ!ĸŸą˙û˙ë˙˙ū¨ĮĩD0<<}?˙ū÷ø˙˙o˙JŪ“ ŊÉŲyë˙īą˙˙÷˙˙Ŗ‰ŲphGæˇįũ˙˙ī˙˙„ĩ°D|¸ÁŽ“ų„?˙˙Ŗņ}˙_˙×ú¤ú/BąIO˙úo˙ī}˙ū˙˙ô“üEŖ^G°^˙˙Ûßī˙˙ŌëÛ nŒz!š9AĄd$æKú˙úˇūŸ_ũĩ˙_ø}âĖ×G˙ŋ˙˙ũk_˙ö—~Ģķaé‘C0˙ûiī×˙ī^ģūĢM˙˙͂é8ČWáũÚëŪÚ_ūũ˙˙û_Ö׌ØéŠˆ?5 ę+āÁ{_Ū˙tĩ˙ú×uQ˙¤ƒÎeĶ´Ņ:#Ô äAŋ’ã#ߑHû°ŋũũĨõúL:Č÷â|¸}W×ū×{ wȁC)Á—žßÁŌ_¯ú|{î‹Ö Ž"ßöŋ¤ņ_|G˙ZMõūō;iđõN˙ēë­ĩŌŋ˙ü3ĸC\q ™āąĒ÷æõÕÄ/×ūŋĨLDD\GĄÕŋ˙˙˙ōpSé;˙ú˙/Ŋ ˜ mjŋ˙×\/ĻBĖÖP˙ß_ú˙ß÷ÍĻ„YũĨë˙פDˇD8¸ =ręôũ{Kö’¤!Œ$ėC#ÂÜî@ä aG Ô9S.9ؐˁåĮôß˙¯˙ĨâCĖĢE‘pĄāĶRõ"ēa „ĩĐ9Ķ‘!–äTäĮ(?××ûë،?Iũē`ƒW€r|wÃM0UL‹ Č&„4Gō˙ķPNē˙ũ~(ØBũĀä)€—æÄŽø}Ú˙hC˙Fŋ­ū—úW˙Ѝ‘ @ûũ;ĨD%Ŗ‚æÂŧ†Ž4L3iüâčö˙Õū˙ūŌęē˙˜ ģß@ŠtŸŌá§PâŋĐĖÁ‘˙˙TūzüŅûëŋúöõīVß[¤ûréęēŨ+˙˙¨CŦ˙˙~÷÷ũ_¤ß~¯÷ūÜ ū@ę ˙ׯüÔßũkúˇĨë_á.ûÛīÛ˙‡wäĸņVaČ`q×ü†'˙û˙˙˙é˙×˙˙K˙¯äˇˆdM8?õ˜ úųą˙××ë˙˙˙_˙˙˙õ˙]H1 %ͤõöŠŊ~˙×˙úũĨ˙˙˙˙ûGAM…w¯˙˙ß~–—˙ī_ū*–8˙ûK˙˙­#a‹/ú˙÷ë˙ū“×ü5ũ_×ũ^ą˙ņ˙Ē|DZö˙˙÷˙Ũ˙˙ŌŌéŋĶū¯ú˙˙ĩtcØIk˙Ûõë_˙_˙ˇtŋŌũõęû‡ũ}uĢ˙ũkûK„ĩõ ˙ūŊūūŸöģRũkĮß˙ô÷åÂ}}węˇ˙­bÅ}˙ūü/Z˙ŊDŽŗ@ÂÖĘ˙Ž›˙ŋé¯˙ûú˙ôŽžū6ũC˙WŦĐ ûũ¯ mGų ˙ß˙ūĄ“]g…zũƒŖHīôˇ˙Į˛Ą¨äėXUd)zˇžÄđ‡ÅZ OžyHge=?Į5Cä?}¯¤ņ ƒŽ#d„.—ūëútīíôŨî?ũÅ7˙]<4Čd¯{a~ˆ<ķf Š†–ũ}8oŌęƒ~û_î`ƒČdkä4ƒKŽŋ×ô††>õ~œ7Ė îŪp6Čāšˇë×ČKR S q ŧl}ë¯ũ|Øē˙ס˙뮇"Ų ą×›ÃF?ūüh 2]oļŋ˙ũWūßē˙˙˛8/ũũŋAĩŨ˙˙m šû÷˙¯˙˙˙ĻAģČã×´ŋ˙˙˙ßíĮ˙ī×Íb{ũ9ą˛Nĸ/äaž?˙÷¯öö˙ŋ˙īëõŋåúAī!¯ņ˙õw_Õˇß˙ŋûägA?ũ ŸI 3W˙ëī˙/Åõ˙˙˙ėW6)î—Ģė=S ”*ƒ‘Zˇ_û§éo!÷!¨ūCī0ī˙˙ũ?÷˙HæYü2¯_ũ_OģŽi>ŋ÷ĩ˙ėÃ˙ūž•ōŖXd^%]ŋ˙úßīūAq˙ō#ã˙ãũUk× ´r#§bÆã˙o˙ûÛwū˙Âģkû˙Úūŋë‡A=Šø˜ėÚē˙ũžß˙¯ŋúŋøk׏KI˙Ĩ´›FÂí āČ 5˙~—÷ í&Ō˙ú˙˙ĮßízŧtžŸo˛-…úūŋˇûi6ģūõ˙ļŋ˙q^˙_ŪûŖ¨d§ŋ懃+ūOvđ°×ŋíũ"ßũ#7ũk_í„mHlķŊ‘\‚ī\Ö-ę.$3ėVÛVß}™×MļÁĨ˙ü&ũoūŋé¸!G:Š=ā÷æ¤û×U˙ąŧ—;qß˙ĢĖúXũ¤DĪ’á ¯žh žFöš˙˙oÚ_õOđ˙^—ĩ˙Âɜî$ ŸņZŦ3=4Õ>Õzūũjģ¨˙û7Ѓ –-xˆĐˆˆˆˆ0˛ĸŨ?ûzMúˇęž­ũ æŅ 21b8ūÚ˙ëúßŋũ/Đ: 5˙¯úĶ|\õū˙GFúcõ(#fuõ˙įģõo¯ũ¸D-ųÃ^>-ˆ˜˙ŨkĶa‡Z×]jŊĢúd –@ Ú˙˙ë‡ôŋū“`¤ >šœg´Mđa}˛ šz^ŋõ÷;‚ããųÁáÁÍ"""!ŽĢ­‡Á¯žŋ˙;–‰ĀäQ„"H!Į!ŠĄÂŖųÉ8PL§DĀĪ!(~ŋƒzß˙ūēxAé Ņ)„h!påĀÚ Â6ŠčOĄ5‚äR6@W˙[n—õũkũ÷§÷ĄvēúΆŠ4#ÆÁ42‚ÐŖū‰ũžjO˙ū֍‰ō “fG]+iOö›hÜ!mFr‚‰c†yé§D5ģyąŌŋë]DĶ~ô ę”Āy×ä˙:C.ā„„ō㜀¨D2õgTŋŋívŋūã¤˙¤ßīĶë˙đ`” Œ%™ŖlĖÂBČ6ōÖžAwūŊ÷¤¯ôŊvô›×˙_Á ÁÁ."9 Séoëļ˙īķWúŋûëēĢëüƒdÍ>˙׿`}!’ Nw!ĻåA”_˙ŋÛĩøāΚß˙ÛéúZßģ×0†ûPŊhY #‡÷ŽCMÕiģ˙ˆv•”˙˙K¯ëū“õƒ^/Ōú¨N ĖzŨ,:˙ĮÔØO_˙ī×û˙Ū‚Įßę&@ÔĮ‹ûû˙˙ ~ŋ˙Į˙ũ/|üÔ#ÖĩҘgˆg.­„ŋōūķÜ`×˙Ũ/ņ˙˙ņõũV ąŋ˙FõæĮ!ŗ?_˙Ō˙U é%ŪŽpPHkvëũ" uúí0˙úôž˙õÂPú’Ą˙ Ļ C[v¯íĢú˙`ßÛũëūŠué¸A KúZ^5ÚNŠß˙õŋ˙z×˙ZˇĶņ %‚˙ķmŽ;ĨUßõû~—õ˙îŊ7ø%kĨä0>kâÔĖûŠ ?Öß[˙éézúø Z‰Ÿ˙–##pŋÅú÷Û˙˙Åé|_úX@šlYÃ<ûƒ´ úUōĄk~ˇŋēī˙˙^Û˙Ô ĄËÄņĄ KđŧX]ú˙˙÷˙Ī{;¯Î/¯x Uh|ČėŽ+´ ×Åīöëëę˙ūž#ü?fĻ@¸ąá.†ŦŅšt"‰|Ž ŋû¯´ēû"ÕûuÕ||X ^ <6Pô8]Ōģƒ0ëūéîŋûW(KéŋŊ/ ~ņp@éa'Hzb*ŋŋ˙ū`ŋũF( ŧ ŋ ĻĐ/Đ!i¯ĩ˙˙×ũ[ŅBâJˆ/,&xÅåõ .¸QžN˙˙ûīŖ` x XB!œ|FŌX,ƒX1ôAģļŋ˙ˇ˙~ô ˆ}'„´˙z_õī˙˙āxI/Á 2OŅP4/ŧ2 )ß˙Ũ˙Û˙×Áá•W&ČÚ' Ū¤ũ2$ lE'Ÿų G˙˙˙áqÂũŅ %´ō~˙_õŋČ.îß˙ũWAĪåP­P*;Ķ",/÷ī˙õīõpKŋüDC3 —†Ž ^S†@kĢ ˙ūß˙˙é|ū÷ öō!#Č ûk¯kßúŋ]­ƒ D§äė`æČdƒLô›č‚v-Å0áw[Ĩˇũ\Ž A ĢÛâ˙˙Mœy ÷Vš!ÛKũĩũÚø’áÅ_Úß˙˙6dzļCIØėŦR"v.ßļ–Ū"õŧF3†ū˙īúŌ’¤,E+ų ¨ @kž!ĢJCØ4ŋūëPnû_Ä8ŽņeÁ`ē ÖÁ(4b ^ēVõ†CÍ&Âëũ¯ÄE‘Ō§ŽKâ˙ũ}m‚¸DEĄäŠÍ+^"Čāxd}6Rŋ_˙¤s#™=Āî ŒDDDG…‚ Wƒ˙ô‚Ą ē"Į°…‚ö]z­ë†æÁų íd 75‰ €Ëø`‚˙öŋųąc<4 xlq‚(~Së˙Į_ĐOĨŲÅA“„pbĢ×ú˙oK´Ķi0_˙ĨúZŽŽlj@đQä5S†˙˙×Ņ aá…TĮ˙Õ/˙Kv†ÁA x(™äQũ~´ŋūŊûR‡pTÕ˛˜B PEĪúūŋ˙î°T0GÃ8ap„%u˙îŋė-G@ŸöČ(ÆG:`Šd4<>ƒ9 “=ī¯ü_øé~† Ė3.ž#C$A…X!@W˙¯¯Ĩ˙ŠÁŧÁ(v$f(Ķ#ƒÁ)ƒ ?˙ŋׯë˙zÃŌt!´…ļIč†HđŒrģúųī¯˙÷Ģū@đÄÕ a‚>Nˆg˜†!pĘ*”Ÿū˜z_ ģũíXaá&k×ôÕũWŌøK˙}¤Á„?a„Ú¯ņ_¯ūwú@×^ÚI ôf‘÷—˙Úú éõüõ…t"ũûëŊ|_ë_Žøø †&GŪß_ī0}˙¯˙XatĒڌ˙ũ¨˙߂˙„ ød‹Ōˇnŋ˙ô{÷õ˙­ú°ļŊŋūžēoœË˙W˙˙›Hqî*×ĸŋéú¯˙ÁĐ,~7§˙˙žƒ~˙ĨūÔ4’ũŋ÷˙˙˙TžņÛk˙÷Ģú¯ú<5 .ŋŗJŅEÖŨ˙āƒ=˜?đHáš HxÛĸ0š˙¯üDˆÁđ’H/[d{­˙ŋ˙ôä5f@đnŋGū˙ÃĶīũäiŖˆ(Pˆŋ§˙øds8ŋûa!pU 4@÷Īéußõˆy˙ėHáˇ:!’ ^V„3\ēÄG÷÷˙˙üā<Ąqãēī_˙ū ¸ÁC.zī˙˙ä5&Pôō ­9tđDa5˙ī˙čt ÛbÛˇø`Â_˙„——VČA}_Ōt õũp‚Č+yh09ĄŽü.ž(tŋ Ÿ„ĀZ‚ &ä%?āƒ4dôØF‚ãiáBČ ˛PSä1ĶG@\ādĪČu‚ 2`ŨŧøLđš˙§˙Ģ÷°ÂÕ5OæÁAÁ_īõßiæaāŋP?k~ú×ÂĐy˜)œGŅė†H(‡!ĢéúO0ž85¯īę o„aÉCCŋÛIŋĮ Ž {ĮÕ`ūĐĶ×˙˙õ˙[Fāw˙˙˙üįūl3  ‘ ũŽŋū ūäy˙đjŦ?ú˙Đ*˙īŧ!’,Žîüü*ũ&ēüIøGOĨë˙ø@ŋ˙ ÷ũ?é/ų0˙üžˇø@‚WöšZ˙˙ûīųC„6Ąˆ˙˙w—]ô  @đbaeZ`“O˙úO˙ø @1<(I 3×uĐūÚwū‚ĖŌŋĩˆ?×˙ëü†ŊT?B@ŋÖ …Å8¯ŋßPõo­@đjō ē”>@đʛāsXM /ũ}Čø¨Ģü J#†Į^Î2f˙đš°ŲCWī >ĐÃôؓŽūúú˙ oKĖN7˙ņ^ä5ō} A~„3¸˙ß÷˙Žđ<4ŋÆŋ×˙÷Ŋ/„ū˙ū×ü~Ö¨%ōÜF9ˆ(sÃūžAlņ˙û^•üD˙ü_ū÷đ@˛ķō?˙˙˙Ŗ°—‚.‚ŖČYCä_˙÷˙ŊUøfXō‡Đ˙˙×˙_øŧēīō˙×ũk’°Zā‚ ¤ß‚˙ūßøkšg3Œ§H0aqŌÕ2}ęû÷ēū7ĄÄv‹ÃĢWGĢ_÷ūÂvÃR+(rÜđ¸0Á+àO˙dvÄēū#.“ Ž""Ŋ@ûÎņö˙A‚ûÄYp\0@ü՛°Â×Žûũb,ŧbLÄT2 ļģ#āŌĒ›Ú´íxˆŽˆĻGLô ¸ˆˆˆîļgą⪐<Įdp8°‚i$ĄČ*ŽhÁÅ–ŽĀŽ!Ļâ#ą&@đĐä‡8äîl/Žü0™0ZhX!d + xhō /Ø[ xgÂnndyX aT&@đ¤Č'͊Âč4$¸†Ôâ§i‘ĐađNÁĢ49U< į9ÄPį~ƒdI恰öˆ †`é<ņ *]2 Iá zDœ§Ė`Â(0i‚EĄ"$7‘v\g$7īЉÄ!„Â@đDˆÆ˙nŖáĸŒÃ;GtŽ˜`„ęb!öë„4g—áB`„Y ÎßFÃ1 ¸LēÂtÁ"îHSāĀ4Đ~Ã~!lãŽ˜a0Đ!<Ąrƒ!ˇ0°`“!g‚„ ¤”ø2 āŒââ9}d û ‰ĀŠ4į•(r 6@įũWI†} n„ƒú>ßū@đe>ü Ü!gŅ7´0Ą˙_˙>¤Ú žûÛömTCh'Ą%0Ģ˙øäC¯Ē ŋ† p‚ú˙ņ öL8 üĖ3˛!›Ä‡¯÷ņמā°˙[ ˙ņŌöÕ&Âd=RoĮ×°‚ûņî¯˙×ūŨƒ … ؄¨ xhûõ˙û˙˙˙ō(ūĒÁëZ<0iO_˙ũ˙˙˙ģ˙ūĢjû`ˆé¯u_jūöˇõü˜Í˙œž ę˛ (;”ä €pũö^ô/ül믏{„ŋÁW y B%LV@¸æôē  ŋ˙÷ø‡Ų„ūŋëøO ģĄ:¨ŋÕ ØI÷˙¸*đoū?ũWų›0ƒû!_Đ(H3Ŗ.ˆų°<āå„Čžw-ë˙Ā˙ čĮü÷Gžä"„„Ļŗy„ˇākŗ@$ˆ‹(pŋÃ\!Đ$ ūđßĐ'‚C˙„+ x/2H ˙č˜h ˙÷§đäSq´íoÁ )Õä€Îä6~˙†öœãá†Y ‹Ŗėôo_­é0dĮE@Äj´!¯ëđ6˛‡aMŠ8 ūƒ´$YĒ_áū†gė0´„G _‚ށö„ŧ!˙Á"ķ x4ú7˙Ÿ ē8 Ģü}}ŗ¸PAF˙ ˙ŧĖŲ qVN/Ԇuô7`_ÚaîqÂAūŋņAI~“ëë˙ÕŅņ¨B8‚ŌÖŅĮé0éĶümc!’<_īū “ᙆŅā¨CõëØÁa˛÷¯ū°=ļĸ#˙ E~I˙ũ…ĨN.Ô ]?<|6@ĀįąÎ3ēõŋÁ°„§ī‚Bõ˙ä\ģÁĐ 0a.Hū¸Iúȉ‹ũ˙đ˙ú6 āŋ×Äp†Ąŋcôžüũ”;¯×HĀB>ü%˙_ŽŽ˙ß\#ÕtÔ2O„pũt¨2ߋ‚(r„EĨãÚ‹ŪuŠÁDúß F5˙īž áeŽAFŽĐ/ũ  âPĀW˙_øK÷˙đIG¤˛û˙tĄŽ¸Kū%@č@æöžŋÖŊ˙˙ ‚_é˙ø%˙zūšO¨FyČe=s ĒO˙mĪ˙Ŋp‚Ĩ˙ëĨėŖ>ē50í9BōQá$„‰er!Ô :ŋ÷˙ž@ŗŋúü#`Ękŋ­ø ^"J˜BKˆF"\2AL|ŅCDô!°ũOߐ Ÿō pŋũâ"#$eÚņd|Æ`Cų}AlDô´x?ä @C˙Ų§ JCˆ‰gÄDDHjXø`ŋūÂū@đ\~?ũ Gh3š˙ú ¯Mr‚S˙Č6d Ņ#õū–¨Hũ‘ü˛8d?ũ†@đcČ5„ėõd6‡3<5G|kđŽ$āÕÁ|$âDô ˙ֈĩ^ôhdüƒQ2ƒLsS &†AQĪČčvŽ‚Æ&‰Đ_BBYé A’'˙į=Ž—A…ÂĻ@đŠfUÎāš<I4,āՄ4Į#‚LGÂHZS:7‚ū"‰@d†ūÛû§CŸ ō…u!Ĩd~r„ 4ÃWČI´@đH˜ Čh А/…) ÁøgâĮ1č!8đd3‘_ĖŲÅękÂõ†ôl2˜!ˆ°DĒ4Á°„RāŅ2!Šd69CžČb˙<4BkÚ,F@ņUËƒŲ~wdtƒņ˛B4ģũ įęäš5˙ÁCŒ„/>čØ`ŽØ* !qÚö†† „ ! āîAĮhđ(<,֟ņö&?ųÁ&ˇŽ &ÁFôfáūÛųÃBy˜Čųdts„<ĀĪÄ3,ž6Œ;°_lL9߯âĩ˙ŋ<1>h Ą°@ˆfgkNĀärđGÃ0 ē>¸ˆˆĖÅ.‹åöšП €Ā_C*‡_ÄZ˙÷ü^Ÿ†­áÂCs0Éú÷ xfІĨžŸB#s0ÎN ƒ!’ŪÆüG¯ņkOŋôp ¯øGƒ2Xku˙¸šĀž˜@ƒĶÂ!žĮ›ÎFđÁdāĐgŸ ,r‘ÃOÔ~!¯ō ø/ŠÃw×8ëŨ_§˙<'¨0Á"D–É!sdGčI]x_ũ‚üü~5]Čëī˙ž’j䡄O0Dt…Čā˙ ęĸ?ũøDtrž õ˙ūÛúđ…°@— öÁä ™ëŽú_Ĩ˙ņ[_˙˙đLްŸČgͰL†@fSOÁüœūĩÁ˜[˙W˙ī˙Ĩ_Qa„7á2s¯E_á„A†y TÚW…Á˙˙×˙ß˙â˙…°”4ŋf4KäpČȖŦIՈz4PĐ>ž0mŋ xą ˙˙˙˙ŋîĒy øNAzāÉ@fdAäāŽ;Ōũ°•|˙:6ŋõũģdž˜ĖÁBŧá…D4NÁhØŲ  ~öt˙ÖA’đ˙“9PW˙˙Ģ õš˜ l‡n@đQBcđOL2DŅh ˇ _ąÁ|"‡˙˙˙ô#×m~–Ŗ€^ÄpiPíĸ@CsX0œ"đ?… x4ΰõŪLg˙üJ@<‚˙Į˙ lČ> X.ŖĐ†ĐW3 ö‚ZΨ˙ x.×_´U†@fĀņ˙˙_%W˙둁NŦ¸ÂŪ`‚膉ī„|˜^fõéaę!˙˙Č`E_°ˆ@c˙¤÷°Á0Č⁈`—ÛOƒhØū×IŋĐ,ų!Áŋ˙M¤X”€Ÿû×í2n,ƒ4Ž C2˙áÃ.~âßß˙Čé”9ÁŊ ô â¯ų˜@ÁH¸d ~9OÁđ„úí˙ _@ũWūÂ4 ÖH īÂ_˙TCDÁ2ß?b˙ŋ ũ°oͰ‚ø(?˙ņŌŽ ˙ûŽ„‚×ēc˙˙úZūßĸg€vČčŽ /û˙Âô úũõāķáČčĩu˙č“×~‹ m˙×ūA•n‡ā‚Öl/ūŌS¯_˙Á,%ŋü ]˙˙øA3dsXŋ ģßūn@ņ)˙˙¯ÁūŋŲp—˙˙ø$":ø#áĸÖßäķđt& Č ž@đų˙ß˙˙ø‰@ß˙č˙ū˙ ĀđĐŽ›˜ €Ņî˙˙˙˙ú ˙ũá-? ëø˛øqA„Č0ūŊÂ9¯˙÷ WŌĩ˙Á˙ ú ūtĸ!F Mä+úū–ō Yūŋü0ŋú_āˆčāfų }Ŗ0ΈÃ [t ˙×ëī÷oßŋ¸7 úÁßâŋ]`ƒ~x°Ö˙ŲN–˙ļĢM„´Ŋ{Ō˙ cĩ×Á˙ôõ¤ķ0û7~Ãâ>P‚ŋØuė -H—ō ūŠõŋ„ž ^:!˜ķŖ<Ķë_’°<ûa 0Au…ęÛûūAŗŋÂ˙_‚ ˆÃâ C].ėjÁŠwė3Ųv 0Õĩöø`ŋŨP+Č-röëõcėB°.ÉĀ[[^ąČÄm+GĐ}iŋĸÂ?ÛÕũ+˙ũ x3Y €Cä6Gŧ“ņ`˜Ā‘4áâ(†Á‘Ę´g— –ÁøaÁlĀ˙í„5ÕĘ ĩ˙ø%^ " YƒéŒDZŲ0… A'Z† ˆ˙Įv#ŽŪ X@—˙ũ ā™ Î?ąá‘Ėęâ"˙„_/‘û3‹¤”‰ĻÉÆœÎ 5íHÄH (ƒ+J¯Z˙†Ž Ö Čdîcøaņäb4„ČčDBĮk (Į{č­„—đGĐA ֓ņÄDC‹ pÂڝ3I AAƒĸˇøHk„iô$œŒ|Dâ‹ƒ #bģ¨Á‡ø L%u ߈gĪÄqeČÜnā‰+#ŽÂTĄ" õWü f9<|DDá•\ų¤\jÁh/aĒũ>9účZ>dņ°:šÃ6… íÄDb'Am;ixA8#0ōā§/Á™˙‰Ėødƒ8?MA @ †@5˜ Ô4S†Ņ €PÁĄˇ6@đĀHˆĀđ؟aĄ:Hr ũ‚‚yO x!2qĀļ“!˜LČäƒ5´ 5x ­jš!ąÎæGŸ ÜØĩA„Ķ †@ņR09ŧÎS™Čcø&™ÁŋŌaÄDƒ_ƒÁŖKÂ(y oø<†‡*hDœČá’¯¤äÆL†B"`Dt”:< ĮÔfâ8 j˛ƒr CČa€ŧāŋ•1„C=×č ېaĒAČ1 3#ŐŲB!@đ08L&C$rc‘`†Đū ŒĀ€s2.  ƒ xT„ “ r o•ņāƒĨū)†h)ĐÜ @Áęŧøf`Cš0P„IĀš&ÍĒŌÖĖh†Âd Ŧ†ØâČŽ—mzũ#0āÁˆ4 |[Â͆Sč=~š˙M߂ģ‚ 8"‡æaŖ5& Ą:°3ąãû˙Ô …Ļŋ˙˙pĄQ€0GčCŋĶųÂŖ† PíĖÃ<ņ˜0@ÁĶAŲĮ˙_×aÅbīāŋĢ#áuę ,:a˙Aō†?ÂA´(C‚ņaŖB>¨YĮ!’*B ÎPüOgĄ×„xęúdäúČë׈ã¯Á‚°˙ąõÜ ˆeúÜ!%ķ@ j…ŖbbAƒƒ__ūˆ-účx˙„Ŗ—˙úüoõŋA§¤ x.;pÂ˙ŋ†˙˙úN d2E˙˙˙Žm&Á&  ˇ3ˆáđ`´ä2„ŒC”91ÂD ˙˙üwđ@Ŋ˙ü˙˙üáŧ`ĸ:°X:õ°R×0ÄDzĐ'ë–õāu˙ EĨ˙˙û#ĸ84üu˙t ŋČāR Gī‘3CôĶ6žĩŽ@đĶ*´|$ Éāĸà x˙†ƒ˛†Ž!ǜá°rX@°}2‚ /`ԁáŊ8áū¤GØ'…A<0L‚¯<09 ųϚ@đ.åáXmÁCĩØ* ä3#Áë`¨˜ lÔā­Dx<a0„N `žg“á¨G`%B 3™đ<‹*\čdq‚|āEP„‡Ÿü”Hfz°_Ļ`xmę8˜ `¤Ķ"Á!”¯› 0ŠĄ$ā^-1ä ŠÁ?āˆëūé^a">ft4D€đĖiÉ i6đÎČlNL&AŠ ‡ xoä‡8û{#§ô†ĪøoŊVŌ~f4ˆėĩ †HĒČ2gߨG—&ŠŒ0P™“!—ÅL(a­ Áņƒõō œ~ÚĄÛßĐ&GMiá‘f  '¤ëáFĖ3„L!)Āđ¤tGp ĸà ŽÁĶĨžĸ?ā‚`ō‚Ļˆ'  D2ų@ÆWaƒ—Ø#wđDtũ&Č1“0ÁB  |.C3œ;˙Áđ]¯˙ x)L@ÁŽĄl  Âa.°×ū ™q{„kB™ ĄlšNŸÔáč čûãúõŽ×펨 Ī@ž˙üx m}Ũ73 îh̐Ésx9ˆ‡ū†˙˙ˇßã‚#ŖĘËĨúŽõđJÂ@Â!™. ˇ™™‚ ¤t!˛ÉaVJ™âN_ĐoG_˙ë{⃌%W^Ö|3~>ëudĨYĮJ "ŸŒiÄCЉ5hÂA˙˙Ã~@đʂé6“`ĩB!Čd‚ãœb˙˙Û!ŒÚā*Úvˆā’3 áȸdEķP>‡Ä°zĖĪ˙öĘqpQ -‰Ôü2;˙ņ@‚AÄ?Kũ xĐé‰ ßx2R Ÿŋ˙đbÁhę†mu°IƒZņ˙đø H$¤L įD˙ Ŋ˙đW4Ŗ ČQ÷˙üX7ŧ‘‘ÅŦ†HeZ˙īød#éĄx"'ųa:õÁÚ @vW N¤§_˙ūü?DÔ'`û˙˙ (¨ x'ö?đK`ņ#`ų˜)úk˙˙gT¯˙ œt˙˙˙@@ІPô ü†ŋđ_<6ĄėëQ˙˙Č8ä6Sų/bÁ2Ÿī_ü†ŧ Qŧ:áŅŽÖ ˆ€ČN€úūž5øŖį÷ˆ‡õ˙øA‚8ū“E˙<Ërŗ™/¯ßü‰˙øĩ˙˙˙č"ƒU/ÖB×øũŲđaÄ˙ô›Đ˙˙ųˇ!„_˙ĐH8?Ũ˙ũtf+@Н U_ũ|0@ˇÛĸ ]ūø‹˙ü  Kŋ?¯đGĀŧ €„p€ŋėžõę×A'ä;˙˙ū˙Čqü I˙ŋđK×DL2@ŸüD†ĢWPa„ģIũ7ī×ũY`ˆü‹ū@Št¯˙_As1›Ū ü†œUí ˇÁ´ŊzīũĩūA:ūHmuũéSô Đ$Hŗũh‚LŽ„~°a†á;Ņ €ZÎļ×Ŧ…ũU~ûí=Ō˜ä Ø yÁā×ĸ'!ĒÃX%ļ aŲ>]:‘Ķū6 {V× ŋũjēôCÁ–ŦŽ™ÅOM„Á< Á2:†˜ų ¤p–ü[!m/dŽ‚ß Z@ˆę¤—˙­kÂQ!đ×âÁ„@ƒ 3å8x6@Đ xhâP!ĒDā눨øaaž°Ö4W[Ąø /!sûŌü WøMÁáˆˆ¸i…ƒĩČyBÃŊ§ b Ŗúī ˙˙ E<†ßč͆A¸d‡–ŦD28R㠘 `ļ#˛œŠ?ãM`Á~h=߯˙„ŧ†„<5¨0ˆh˙č†z!C 3ŸņáŽä4‡! ī† ˆ† â8h^„¤Āđ`āēō'pf~ P_ā9á?ˆˆ‹/ĸ Ž Aū"Ėđ¸šF€‡\Žfy€<˜X0‚ Ē|E0õ* ŽŸøxœEđ˙!ĄË„qŦHŽõq4Ãv[„›  OT ĢD *ŲC˙AƒĄ!G<ëÄD0X‡!™ä4;{Ã+ rĩčYŌā–Xj Ž"$ d6cƒÄG|4#Œ!¸%@Ŧ$ ãa˙ hĨČz9 aņ`“’4„„[­ČÁ‘Ķ Ødū„2‰NPäśIš’ƒ)ËNđ–lƒkĢOü`™ÂžÃaxū`eÃ(Žc#0@đĖ‚b ˆĻ/āRā¤2 Ž×›Pƒƒ†B"ЉĀ<=ž˛8A“ä“ÚÆ0G™Áv’ũB^G 1ZĄfÁŖ2`…GL x@"~@ņxÄŒ9ŅûTc9ŸĐ3 ¯YÃ*sI×ā…á˙ōé?—r Į ÚeƒM‹ \Gāƒ x7C`¸ˆŽģt@ƒūF}A‡ÚVŽ‚ c D‚ô(t8œ —Å„uPH!’ B°Ž!ļįÁĄdʃYT Ķd  @ø#āx/pAŋZ ē;Zô!EÁ•™†‡Ę3ųF“B$ā`O†@3}†pd4 <ėp„Dää€ČK ĢØ0Đ]z D{Úá)Ųā“ā‚A<ØķāĘG͆piĐ%×ø#0†Øuē áIiēIpÉ+ŪØ_Gā“|ŒeđZB?Ž šRĩ 00`ēu„f# æq‰˙OĐßÃMÄL‚d7"Ápw!îûÁ†/‰ģƒƒPāÄWßž>ûkІčHy÷Âmöų˜gŖALPˆ Јˆ2 ų _ō‚ëuƒß˙ũiēûŖa–Đ"‡oōķ 2“@`ž„‹;AčA͇Ȝ`0ÖˇŽųˇW˙˙w˙Đ l\§ 0˙{ÁCyÁĨŌ| "w>øgx d2AyĐÄ8a ÚĨų°aúü}ņëG.‡jßęīL6ãm(0DtA73 Â*Ã(„DpÉIÃ6d2Ča€DûŧāF…à Øøßīn=Ė$Ą_Û˙˙˙ũô6AĖė#á 80Bõ!šFŸä š˛@cã˙˙Ћ¯¯û_˙õ˙ëÉoa‚‰ÆŋøeYC‚×˙õ˙ũūŖ˙ũ˙ũ÷÷hĀgĖÛAäTęČ 6ˆÁ(!’C“ē˙K[Đ/ņ˙˙ë˙a`ŪÚBú‚d2/Á‡üfT|!WßøAač%˙oĶ˙ū7^:L5lđËúŒ4ĢÅ‘Ė—ÂzÔ!3F"8-}WUA˙ß˙ū?ö‡°{j ąÍ•ö"#ŽC4x‹ö -xH.ÉĖÎV?_¯˙ų˙÷ëä Ę+‡ę/ž ė#PĢđl( ´I# ]„"ë‚û$ë¯ö`ˆ~úī_KIƒp•o58A`j Įēj"ņNN8˙ˆj%đû˙î@đj˜0‚ ÍøHVœö\ŧaŌÁō_1Đ~ļDīü=$ ģīÂûč†ŨđČ  QSá™ĶĐHd30˜páɊ–PP’ē_éD?˙ä€ĪK “Ģņ×÷ xe A¯PF °K‡D4wX4ā`3M< Mæa—Ü ¤€!ķ`ŸûĻÕjEXIÁ īū@đŅH4ƒ >Bŋ SúßâĄ-aŖ™ęĐTß_˙á—0éb„& cßÍđ/ĐŅ €P0đ]’h> ëGŋü ZVÁīČd†‚û˙ú`Â< čPR@r>]8‡é|Ö‚˙LnÁ´‡ ˙ <2æAŸÁ’@v?ĨM˙˙Ž ¨Eä0ÃđuŖF †C:5 xܐ@xܘB<А!:āĶô žŋūĐ$ PAēũWֈ 3H†y†D@ƒ BĮžĩČSJČ1Đ/đ‚˙ũ?‚(pPA2:~ŊÍëđ;Ė'/õõĨĮū]˙Ģ˙„%čX~“ę?¤ä;M‚ä ĖĄõũđ@˛†yā×â܄9CœÁ.Ŋūž, @’^ÕüaĢ˙†fĸā Î98ĒHk˙ëGđ´EĄÂūģ˙„( ŧ`ŋíj!ˆˆX#ᒁjDĪÂč/đ˙ūøKõ œˆáR×iƒf‰k_ęŸĒU ū—˙˙XA _ú6‚b#˙ĐD3ЃWˆd|ÂK­x0aŊō Ŋûø@ģ˙˙ŌAB˙Á! Ģŋ~‚ˆ’}ĐK_ߝ],î?ŋ÷ öCÆĀT#á ŋ| A§öž°¤qĮi3ëÂ] Zú˙ჅŪEü,BAā˙úĖÂÆ͆%Āą‚áęÃUü:Uųû„ļGAĨë<ŋ˙Az¯đ˙!’û Îb9¨ˆāɰÃ%íXa‚üo˛zÅÂõ¯ū^˙û<÷a 5 3l3_’Cdp’āÃk_ûëŪ á ¨:6†š˙Â_ûä @đ\ åXd†’ú`ˆf$ž"8ŽHFÆ\9€Ö°ÂÚ@ˇ_†NĨø`áž4 Č3_á/˙†díŠEÃ$%āāCÔÃëZƒSÄEķŠÜ¸Ŧh/Ã[$Ķd}pKGéū_ø%é‹Â< x !_°ÄČ ÷N´ŒPƒ¨-ũ…[ōƒÂ#čHøv Čl… `ƒ ŧ!ƒ;Íüo xn8 T˙ŲļŦÆŨaũĒtŸÃč}hĄÍŠ'Ø":ÄD$!ęÂ÷QÅr ņā¯Ü÷ü":É9NTázõÚPî3āÆÂ!ŖĐō ŋڂĮ>>Ô2>HÁ.@đĶÂŋr?ø˙úO~…Czīč`×Á‚(po ¯E ֓D@d,P":âå>Ŗ[ūŋ‚]āˇ˙ũŽC2ke8$,Ņ Âđx‚Øūõ˙÷×˙÷˙īõö?PH<(|𠁀bŌX0Ōß \ _Â˙ī_ęČoûŋūĒf Ō GC =~Ū’Éķč,°i~ wūŋū?ƒP˙ûĒĒOĶ C ŋø@ŠOÂ×éaë˙˙˙úÔg—pGÃ,:[‘@É Ŗ¨|áš A DtČ5ĸŌÄ4ŋđÁ‚‘"ž˙&^ŋĮÁ-C$Q[Áth ‘ü¤ËƒgÂH ‘FÍ\M`xCYÖĄ ŋŽ×,[˙ØA„¯é8Aīė˜(ÄčŸ}Pƒ´ˆ5(Úŋ °b !˙ũņ /K˙÷ށ‡ļ@đŲ`˙†G “ŪCéSĨø%‚]~š 5ŨĨĨKâĢt 0L†@ åŲĶäŪ$,Đ" žŗ0 į‘†CD‚Đ"‡˙îH ˙u˙ĸį_áäŦÎ-(˙ĩG—û„x2C.ŽŒ!8˜F`Ūà õÍr/éŋ˙ú-R×IŽƒ ˙āĸ;~ÚXWŌm/_ÂÂ#œ o˙ū`Â^ŊXB˙˙äc{ŋ† /đ@‡]˙úNÕ÷ĒūVđŅÁÕ t8‚ûāũ=AՑõž iAá&ÁzD€īĶÂbßûū:^, Y5fŋCa„ Á˙ x!5 Đ50ë÷˙ŋ„ ĐZT˙“™Aßž@đí—|/ūÁ˙Áž˙˙÷ z8pJ}õh_ū@đz(bi}*üđfdxšST †HfpGà 8&CF#@Ļ& %€|$@e’3lŽĐܸdÕ:Xû˛]¤­&Ōô ¸&ÂE‹æ`CF‘/‘ØaÖ ĢA0„C x5AÁ™Â!†@0—õËsqOo ƒ„0{#ž $Čø4 ‘ø":¤ĄĢ÷a@ņŒ ĒäY Á4 uvƒ^ĸ"Pƒd†dßÕņ!?\(ę0ãđf›J_ëõ„ƒŽŒÃ;Fq Ô"$˛( Â‘ĀØī„ ō ažĸ‡ūÁ˙úÕm ƒUč&ûÁƞ„Iø*‚ØŽ{.Ÿø":RAŋĮŌ˙đõũ¸UíAŋ xT,ŋ@›Ņ bА[íä'˙AQ ˙˙_ûã¨5¯÷āî 0a sŽ´CGĖœĸéÉŦ3D`dƒbl" 2äįß˙^85áŖú˙ˇ˙ÚÆ @Ū16 Ã$ÃXŌ²āQ]*ü/Į´ŸÖyW˙ô ¯ô˜=ËĒĶ܂͠bš‚ ΁āÕČd†˜˙¯˙˙h‚>˙õá!˙üCŖ0ÎîmŽâpà ­~š„xž?˙×ã˙‚˙úüŋ_×ūéņH†ßŊ-(z_ûËP.Ô~ĩ×˙ŋ×ôr˙Ø @ŲC˙ļ ;č@đ{&āä2C14ģ÷õ„/_Đ.ŋûKZüëũcú Q3ø|ô0°„y ØáQP€­õ¨ƒÖŋõÁū°a„`]˙㎞Pę C!š5˙ɘ*T‚G5Ĩęŋײč4ĩũũĢüâÂKÖ÷‘ĶëÄT@đi8Qt út¯üY¯˙đZøâũT<(Š”á:< vC$3Ÿ  ü.›(u!ĩ"†s„— Ē­î‡ø0hØ˙ũ#ĸ2dē‚6ƒ@< Ųũzđ@ń 3ŧ~@đŅįt†./ģãđ“`’¯÷˙ÚČ/‚ÅļסūÖA!A#‰qĒ_ëķFGđ1 ČQ˙ī \DĐÃDš6aČmÎ ~ ŪA3ütf Pķ¤a}/kč_ČŽj”ĄĐ/ō˄ Öš„C="PB^Ûß`÷˙ÂI Og˛;Ápŋō,Ęŧ$ĐŊ߈0’˙í=Íėm˙˙˙đ@‘ă.Šâ0Ų d4OîŧA‡ PĻc#…ĨļųëŌĐ73,3ŲN ëĢ__ö„`Â:FĐ7×˙úŊ_K Y 3ēō1š< \Øy ƒ—ÄM1×ā˙ë^Ą0Įŋúûüā­0“aäŒáēp@Ģ2NPûÄEŗšū+ä3ĮīÁđAk|†#´˙Ũ´~Äp´ß˙ŅÁ°A †] `ČŖ D ûĮ˙˙@ļē'D\)Ž" $ Įŋ˙ öž ¨ŦĀ4ƒ Õ2 ŖË"R]ü%ŋaaG×#Ą ĄÕ˙Á –CN—q„=?_íŋ’ļ¨^ C9Ī@đƒôDEˆík]{ü P_ōé˙éZā™Ķ–âøIĒ í}cķ<’ᐠ… ^˙˙ČrŸP_ŦH™ ēwßø#úB?ØdƒMŸ Āëęސ° Ûä2øößāx`ÂKÅúí_O×_ø˙ø) V¤—ē`]‚ˆÃ }6Đ/OĒ xfĮû_˙_ū@údę=ہ6?ø@žÕ‘úĘ"8 /VÕĩ÷ # P}ä^ū˙ũņ ž5„˙ŨpJœaėŽ„įū;¯ÂI!ū@ö9Ÿŋ­Ō Yā‡˙Ū&ũĐ% xj=… xqŏÁ82Fs ¸0‚O „ãĐ­ZWė5˙ō†‹×ü%ūÁ‚÷.c…F‘ d ē]Bk E|pwŖØ": ûū¯´žßá/רÂIĸŪA”âB9§ā5ƒ"Ģŧ– FĖđ†DŸ4(0d4: øŨA†/÷ō9Įđ@—×TJĀđ0 !ë#ä|ZfđÁqΨGß Ã–:ŪĐb ƒWÁ×­ Č3G˙ũ„ŊQ Ã ú‘éS$khŽAɈö™(ū|m/Á>ŊÂ#­`á’ƒÂ?R!žq<˛áÕ‚" ŽƒAtG28g.54^/‘Ø"”€¨ˆ@ÂũĄ`tÂAƒi] Ÿ‡y :D4OWG´ėE„DDDDDC#….@¨3čÛL§Õø<˛ÜHƒ~Á‘9g@N  EôȑŲã}™ā ūĸC5&!ƒ˜r ŋâ#j ŒtØj Á ”†Hi {/ÃHáĸ mWØ2ÔFA¯ÄEϞ``v›„ŽugŊ„ĩũ­ĩĐCf,=ŒŽ"@đĶ0ƒ53āx4¨ŽC5" IŊžŧ °6 xá,ÄD\ cˆe AÔi´J@đ÷ĩ DˇĐȐä Qø&o ‚‹´3ā„2@' ø#=~@đĖ:ŌdiČ4 x5ˆ‹#ĸ<­ŽČw1ØŦ ¸Ŧ}% be^ށëh0‰€<0F Í`x…Ųp&„ˆˆņAl”a°’Õ- 2C2…g0škĄ$aV† ĮL¸5Ųr8Đe:!‚‡dt§db ō¯ ­ū˜A‚ ŦíZ„Yú„ €ßĪ9ÜÎaÎų ,' 0ŧ:–>@đƚ< ôˆƒ¤Ī/ƒ˙øh|4Aķc6(`ËáB°P@îČ @‚˛ Ü|C6#črĶŋøčHÜđW˙Ž­ĄŒ‰ĸ8Óŗųt 0X4ō FĶ ˆÛü_!™E„"ß5 \ ãø#á˜ā,8B."8r?F„pž ČÃ^+Ŋ†<,,@āÔLĀĐ=6ˇ\`ˆø a´#Âԁw! é‚Čb­ũ‘~@đØ:‚?PĢ+@ÖāqÁút)† `Đ&ņĸ"8Tf ‡ÚŒŒ ?ÄH`x.+߆Ī?Ŧ0ø(Áá÷I†Pé  ũr$ ÁüZōë‰+ëÆÖÂKēĩmqT Ŋy,KOļC˙ÜÂcßôá¯ėŽŋęā0˙ {˜<@ˆ3âˆ2üāCœsbŠÁDø¨˙ûëˇÄGģÉˇø"\2F)‡‰Äb˙_˙˙úũ,āÉ ŋūƒ!Cƒūā˙ú¯¯7ũ-~˙ XA„âĶęÚHâTČ˙!’-‘˙ū û×O˙įÃE &†„‡„đ†¯˙tŊŌũ.˛¯ū¤4{%a’]õØj˙¯_a„ˇIÁc_ų ‚–-zÃd!’üéČe†g×ÁßᆂÃh –˙˛ ØĒđA`ˆûNa$CD&€h ƒôŊ}ͅšNS ĄŌõ˙X+!´@;ę—¸aųę?đÄDR ˆdX)ÂHÚ ĢA}(6"‹3ŽųÂ×Ú ҃ūēü `°Î1?ŌëØhĖ‰ à 0CIΰ'Ŗ21°A:†‰˙Ąü ŋ x.äę[Wõí˙B!áAâ9hHIá´p fÁūËŖė~—ĖÃ>+tģ×ũxd­ËŦīūDĪ˙ßü%„ ˙ü!ž‘¨dĮū"ƒh"‡O˙ũ˙ôŋõô Čg§õŋ† āÁØ…oė‚Ķúūũ ´ˆfY Ņ˨>›Ésīęā°ÁĨčŋë˙ÂéāÄD0Xnž„ŽžôÃ'ûĨ¯ūëõÁŽ–_‚ė3Žļë|6“~ŋ˙~Ą+/Q°@žHÁ~Čéø1L`à Ŋ0h& @Ã@ŋFÃ$ōƒPH`x6hāÕ|0Ę/øÃöGJƒX3VŦ„um&×˙˙ĩēČˆÅ}[âÁ-ˆQ:ŧ2C¯ëõũCõ ^ Ëæ¯iĻG GAĄ82  ÆÅ•á/×ĨđDtƒĸ@0ō c °ˆ4`2a|Ødŋâ""#M “" ģD0É?ņ8‚–7ĄZb?â,¸‡´^ŒÛ$~¸2dũ]„ũ,ú1ƒ˙ —V´"ŧ5Ų1 B„Ä˙ÄDZe;˙Ž,6Õ.˙ˆ^"ŸN‚Ē‚AČˆ*Ė87¯‹ļšÁH x@¨ĸî„N’oō€˛>Đ0~?‚irž×ČĐ›•3AąË­×ë[x´fĖ#‚UÁ~‹!˜áÁ”ä6ĮÁˆ/ë¯ņ’&ŒIÁ'­B ;Lá ™(VϞcĐWÅû˙[AÍÛūÂ˙‚Č‘IAuūßęH&„YÃ6=‡`×IpÚøŠ˙ŽäßŦƒ<ü+`ƒĢÚ4í›Ķ ՏD ƒĩa ĪÔ ģaöG—ã‚ūĢ{˙ū+ô.CEŅ ŽŦDÔ ŪđČ5‘t“āĶåpŧū¸Žŋß|ūøH0û)āŠ6 hä^#Īňū”ũˆíQ˙˙îČā×˙]āÁ{ c„}ŋ îŋöũkũõd~č6–C0l†@(x5Rqrƒ—Ü ƒŗqņƒū ­ôž“Æūŋ˙Č#ā†a˜…ƒø1°šÃUĪV#äC4_ŋí—Küo3Lø˙ęķ[8ä4Į úūäŧ ÷úÄÁī˙ ‘ÁCÄūũÍĄD~õ xbbÕ7˙¯ ¯ŋüak/¯Ū´˜9 1_˙ā‹ K /×đûāà ˙†Â­Éã’˙ ū ˆ ?ƒ(pHƒ6éé~ŋė?÷ø˙„!Č)˙čØŽ Ō¸1(ÂO˙|/Â˙ ŋ ?˙Ü0˙]/ŸÃ=HČ!ŠÄØ­tžë˙K˙ Ũëö˙ørŸđŸŽ¤0ƒQqfxMä&d2C,˙ę@đËû˙Q˙˙‘ ŽģąūĒ\$ ˆdķAôō ›Jđfō‡ī¯đO˙߈đŨū/Rb"Ãß]ÃH/īČ#˙Fõ˙ãü:ü%đŊ—YđáÃ|1č‚Ĩ úŊ@üáG-ōsڏīé¯čUĶċ09  §ԆHåhC1@ĢŽ ĨŊoņÚC ‡ÁŨúû\ ŊEĐ* ¨w !Čv6Đ"œHį4!Áaᐯ\0@œ6EļŋWŖÁ›¯ī\(7ŋøA}đ´ƒaų€Č#čÍ†Š‹Ō`ÄAIPŋ†íÁ`Úļ—„p2AGëęĄ÷ĨęĒA˛ė0B EŠB l†žĒÔ9V•°d0Ž-0Đ ØA2:mū˙ī ‚eī„` ASĨ˙h‹e¸Vɸ0°ĮQ\3ā[‡ÚÁû˙éî¸/‚ŋķFg†C>§ÎqÃŦCî@Đ\33á‚pÂØŠá–äAÂVLs˛ Į_÷_ëī ?ü^ŋAÂ#BŦŽ˜ˆˆáŦ0\DS P!ŸāÁqË´˙ƒtà @ŠAuúÜØÃ Õ ē.GĨ<3ųÆsS52áŸĐ‰P D{ũė2&õ.= ād øPčÎ#īą Ų )q‘â<ƒ1‘ãÚEō˙ņ_Ŋ¸k¯PmO¤ņūa!!‰î"""""C$Eb2>YRį˙Á‡6Päą/^ŋđj Č†]ô$>""?õaĻ" ģŊVŊGĻȏV;Lž™}āÁÁ•eЄrĄtÁĶ÷đÃGÃ$ :â"""$3<¯aqa ŋ˙lá p ųŧDjŋë_ã `;ŋ h P@đܙ I<5/ƒ˛8Bđ"‡ī^ėŽ–¤6Vˆá’$oÂČŌ.Lá‹!<†Ÿb"#ΠxmÂPû .#čD9Ļ\07áAL!(åâ0 Cašy  Ë!’ 4!ąČh‚ž‘W—ÁŖCÍfa}aÉ Ŧ?D€ė( a€x40„A<ėūsžĘ ĐSžšj„2ŗŽAø§ ” u8‰Ô+ąĒ41Vāˆg™ ˜hĖÃ; Ļ@đ0‚&„Da˛ `Ü~í8˛:‚-×Aü(#0PČd†0Ė:s–iĩyđĐҘg|OeāŅ­$ Ō‚x&¨úb‚Ų¨iq?Čk'.i~C$2œÎÄŖĐ/Âį.>‚o„$s@nGæ`„y÷̈́`¨Ā‘GČéN$Žq!—OČ2Ŋ<ĘJī°ÄXĨĢ!—2‡tĄ…†< @ÃTž†„9 / Đ'Öģb5C„‚˜ä  l[ĮB!#āŠCö×ī–ēØ,>†˜Y ˙KĒVÁ!¨sFžŽ… õ[˙ÚūđXx(,žĮsW‚˙øß˙Ĩéá muüoī°Uâ" ÐÉ-2 ‘¤:V„E ƒ oõK˙ūž}™ˇĢÁđDtŽ|ƒų GÁq8!ÅÛ§üI0<4Đa‚/¯üˆ9ü˙˙ÔCíŋ¨0Á ÁčA:atĸš"#ĸBë‚ Ģ :lP_Ø!(8^ŋ˙ŗŖ f Ŗ¤87öÕ¯āßļÁúvjs¸WAa$.:QęŊ°._õņiGÁúĻ˙Ô7 xkˆŠ#6 "†ũ‚ŧš Ņ4#ŌÂT- Q‚[|h%Ōũũo_˙ũwÁ0Čĸ?H¨' ģāX PA°ŋ`Á‚Ę80”ŋ˙SÂR÷˙ßûTČÁ ë ×ođil2†‰ĖÃ> ­iČfņôĒŋ_éŌ|õũy˜šŦ2Oģ[÷ÖsS `‚§‚IŌá—5„—@ŋũ*m˙˙ú!ĸ`‰0Č €ĄĒ8‘ÁŦ[ŧZĐ*@ģ  ]ˆēƒ”(GxA˙M„˙˙ū@đižˆĐd†hōJ$ ąÉAG++ü%„ PUĒd „/ÆÅĸpK˙ÕŽƒ˙˙˙Ņ ËF‚ƒÎįs¸QHE kŋČįĨxKáž-˜ `N_ wã¤æ˙˙˙ƒ„AÜē"'úĐ¯ö–„á†w\oāŊ/ũ' Ē˙߯öE˜ģœtũr€´:A„ŧãŸĄģÃAĻ/˙Õ!ˆ3˙×ū[ū@ņÖËĘ'ĀđR_ū‚Â ŌŽžÁ0@ēũ…ßŋ˙č§ÁũCE dp‘ˆāx4ßøyÉézäS<Î{ų+āŋũ]aÕ˙˙ĨÃ_x&,CAnA‡o>†ŋ˙Z^öŋ!’vw"ãĸd†?ũaԁ čEÎŋ˙Š ģéŅ0BH €c˙ęŋëéū"Ѕ˙˙ˇ‡˙õũĪ˙°ëČŌ_i Ų§ü ģ¯U Ā˙ūÕ/ ×ØD3m-đŲN‚!ŖđaÕ.ŋ¤/î‚‘īénĩu§¯˙˙ŋŒ ´8Âd!û_aĨ~4Ũ~ûëßļ—õ߯˙_ĨúN@đŨy¯a‚ņÉB.ģpІ J 4­&ũŨ-ũ´’ hŖ˙˙˙údāÚ5@a6[˜zöĸų+*j€Í xaa/Ģĩ˙ f Sũ_˙õÂ@ũÛ#Öû_q_•lo`ŦL5×cúÛKúûúë¯@—îf9 ƒ•1fĢâĖã @օÖÅC?1ˀŋĩŗ÷™ēoŽéļŋ‚>‚­|†Ã„$¸dÄ>"" Āf‚)ŲˆÔ“Đ0Xv"™´ĒH "Ö…Į ŗƒ˙öŋ„…~ņ €0?ˆˆˆ"$04!aą‚X Aa…úBx2AExaHg BČ2 NAx-ņ Ė Ô, ‚>‚¯Ļ˙i§dBuY°l—HD1I HCĮfÃčĐēžlĒ šj˜ˆ¸ A H]´'Ņā8đBũö 0#˜0ŅÅ@ŠHd†häA¤Ąp2ĄP‹đ‚m˙m{H„Š!!Ē72  2 œ‡ÃņAČ9X,^¤ jTŽ(áä3ė(qũŊ'íŨ_D,‚.š˜.H °GĀđmB#Ņ ķõ‹˙ę˙Ǥčöm+(đÁU2AAü¨ č!˛ y. 4 ‚uũ¯Č=¤Ú ĩn}+„""\ä_ÃNÁ0š" !H‘D\@đĶžH0D}.ãūˇūĩū.ŒeÉčāúA4Ô&Cn?‚0Ađâx@üF †U…Đ˙Ķ÷ūŋ¤ôÚĒ ´pVŗ™{tšĄ„`ˆbŒĀØ\;f´l tÁ-¯˙īĻ÷īIá>ˇ68 ‰ûM5ă_D§Í|ũ˙ŋz6ļëĨÖŠ6“|&ĐWTŲ ÍsÍĸuG„ë*Ŗāx/Ø+:rŸ˙˙].Ÿ]?I÷ĩuHˆ;Ģé:Ö/0ЃÁ3Äō ä5ú"!’˙˙˙˙øĢkū¸ŪÛĢúV“¤Û‰ ˆīVō\ŋ˙ũú˙ŋō˙˙_ūČkŪ—ÚOŒ{ŧ 0_aōņ2AG_˙¤ŸK˙ũ7_ū‡WļũĩzžFžÔŧDY ^˛ Iũ-õ˙˙úũôm_ņJŋ˙Ų āׇO *&Č öŊ˙ŋĨũĒūž7¸˙˙øû% Œ Ė?d ܃DIGeđx'Í oũ˙éú[ũŋ˙ę˓†lLãøÜ!S!’|4>>•}}-,Ÿ6–Xæ_õ_˙˙ņ!–pÄqü8@Ų Ī4 ø"‡˙Ãkŋ pąŨ8B˙Õ+_˙ũņ ~ģā~‡˙†XáuŦ!Û ˆ}˙ Ē—ú˙g ä,w߆ų莾˙ú]Lü0ŋĨ¯ųŋŋ˙Ć9đŸđë‡Â¯÷úļ苈säČĮÕ'~’zJ%6k!Į´W0ޟŋÃ˙˙e¤Ô‚‹ ķ…AĸŸ#š}+ZũSŧäŌp—› 2Nļŋųy{˙âũĄÚ č7\_H/é$Ō ē/¸¸Ļ^†ÄA0˙_öūž7Ļöāģę ¸ŌÚJ§‚ČúņA(ˇl†Ä{˙˙ûūŪMՏ¯i%Y9G>+ģJgHBA‹Ęs0<7.‹ƒB×_ũ÷˙ûûĐ[M÷L ÚŠ  b@ˆAŦCŋ˙˙õđ×˙ցĢ8ŽAŨz!—cˇ]76͉Zqc˙_˙ũú FvŊū„1r‡ „d4@í:ONÕ6Īĸœduëō(å_ˇ˙ũ×ģ×}á „CÃ{xŽÚMĪbAėXųb?˙˙˙_ũ_V‚žūĩl68ÃKøÛ[ü¸˙ũŲũiŋũmđĘrc‚ ū˙vŌtŊ´˛#÷˙X’Ŋ&g!˙˙ßböƒü˙Ōm-uĶõ˙ĩŌ‡ũŧ1ÃGK™ Ÿ˙īonˇČd˙éūŽŋ˙˙†¤€\Bč_ßoęŌ}í(~ūõ]-ú˙9‚ŦŌ1—ƒ{ŲŨ[^ļŌ]ī˙Ō×Ķũŋņ]ūˇtÄTSXfŖ„&ö "FŊØî\U˙ˆ0U˙Õ5LVĮ×]wú_ky8˙×ō@iŗ˙ĩXiϚé†ļö×tŊ/˙Č#˙äßÄÄD‚ˆ\“NÔN”:ƒKŽëÕē}ŋŋ§×&˙øˆˆŒE1QL3 r(ūÚM¯_ũĢz}¯´ĶąÍ!ųÜãëĨkļ“í×Nĩû6‹é˜I„û%ŒD aœųp i}6–´Ÿ˙ fÄDD2;#ÉÚ¯¸­ †[…ƒ[]mm/ņeķčĀ(Ķé5ąĖņŲtƒ/˙ÄE Čâ‘Æˆ/Û ­§ŠÖ?ņϘAęŋ JîJ Âc–åІˆ#aÉ ƒWâ"#!, "—Ž""8u´- ‚×hâXCKŽ\†n=™‚ŒÍ”"­…v‰Ã4Yá ‚ŖŽSĶŠ>öTsĐˆĪvANJļ0„0šfė5^í~ŒÁCGÃCFGˊ\ ”  5ăX׃{ū°ĸ*Dp\=…ųĮūmđÂdtÂV@đéŌō€ÍžÅūáģ !mXzü Páö yĘt›˙õ¯û@ŦāDé8?˙Wü‚>Ü/˙˙Ž”˙˙_˙ŋ˙w¯˙Û īû @ß˙Cõ ( ˜˙ūžĢkŪŋø ]ūũ[˙zķM„~ū’ ô [$Le tÚ˙„%Ž [i.#û_á•zūē" TĖböē ė¤\ÚWh%`Tƒ@.¤ˆã˙đO†! đ šđ^BTwĄ™‚˙a X":ˇ:¨†mwč|ƒSĄ<ŒĀ¨ACšđ^$OŋGž1~×˙ū ?3 8ĸ=ŋūÖ¤}ׄŅ` aŸ†ũĨâÃ× dAœnũ˙āČˇėŗwĐKČfAĘ ×|Än1á˙œ^ ˙īîŸ@ŠÖīũFŲ#˙×CīyÃ÷ßč!Ú˙wúúd4‡đaūŦ?Ģ\ƒ[ûä3{īũplƒßāŊzēõ×íđĐá˙!•Ÿ˙û đz˙˙Ņ8ÉÛö˛ëž›Ap]ūēĘŗ÷Ŋú˙ļCōĮKƒ0˙ß§'ÉvX`Č1Đ÷ŲXk„¸øAŋá÷û`„„ĪøÁęÚ˙"€Ŋ}fۙÄ| Ëß˙Õš åÔ2y°<`ūĮ Ä ]‚‚ˇ‰&AēwĒß÷Áˆ‰ĩh`Î?)>•ŸÔN˜˙TöČ0L㈉Ąé‚)Á§ØLŅ–‡ƒ ã˙ĶÄ18hDGšĐœ_‘§˙đtf/!—eˆˆĖÁãÁ˙ØAML~õM†‚r0¨>Ÿ_õūHH~˙ü‚ķoŨ†×~g$ūã|˜eČ ž"9NC†@‡;ãø0}\L^˙FĀŧ"pĐ\ —`„€Đ\@QX†š đh0\ O˙Ģ÷ßšÃC•všw ?םD`˜ Ț5 Ør ××ū˙ÂEō:j4ԁĄŽ@đÖŠ˙õ˙|Y8‰ä=`sŲ ã.?Úī˙˙ß˙˙ßũ˙ūĢ˙˙ūŋ˙œū“í-fĶ Äá˙×ūƒĶx?˙ß˙˙÷˙˙ú˙˙_ü}˙é7¤BXPE‡ 3õö˙Ēûī‡ī˙_˙˙~ŋ˙˙ū˙˙˙ũn“é„S†@…×ū˙ ˙ȁ_ __z˙˙ūūŋ˙¯˙˙˙Ė/ûdéē›AĻ#˙~úҰ&¯{ņ:ƒo—^ŋ˙ú˙˙û˙˙˙˙¯¤˙ŊûZ"FČéúųO˙˙ī˙˙­˙˙Á˙ßĩû˙˙¯õ˙ĮúûZ¤Û8Œ•l:ū×˙š‡˙î˙˙˙Ŧ¯˙_˙˙õ˙˙˙ūˆžíīé?˙[4č ü_˙˙˙˙^ũ˙˙˙Ŋ˙ūžēĨė†á¨7¨ K˙ūĶ˙˙˙˙˙˙¯ßū÷˙Û˙×úūaiņd}0ė V¸Gš ˙ī˙ë˙˙˙˙ŋ_ë˙˙ûõũw˙ũ~ÔGKĘÁpA˙úw˙˙Ũ˙ú˙˙ūÖŋũ~˙˙ũk{#†Á߄_˙ũ/ú˙^ŋ˙˙˙˙ŋ˙˙˙×˙ëū-Ų‰(A˙Ž˙˙˙ķ;˙ũ/úú˙¯˙˙ūŋ˙Ĩū@ĖR ē ˙úō`o‹˙}éöūß˙¯_õú˙ŋú×ëúÄø “i}Węëũ{_îĒ/˙õ˙úūŋ˙˙ũ/úúúødtjÃ/ëîļē˙˙ßëÅ˙ũ}}˙˙˙û˙Kõ‰zß­ĶÖ čæˇ˙˙÷ũu˙_˙˙ú˙˙˙×úJēņæĀš´Ŋ†ēđđŖ†ŌëKūŋũę˙˙˙˙˙˙˙õČlB_æŧŋI‡[ Wa„0DtAwūŋë˙˙¯˙˙˙˙¸O{˙_í¨دcˆũ[Ca„ē_ū˙˙Ŋ˙˙˙¯_ ū´×Uü^Ą…í5ĩŪAŦs9Oöŋ˙õ˙_˙÷ũ}˙˙˙˙ų ģĒôų ĄšGÖũa‚Ų ({Bî¯˙˙_~˙›ŋūĩ˙úúëßõû¯ŦøļĻŧāÃb iPĪ‹5hPČfų‡;•aGlûŋ˙ūŋ×˙ī˙˙ģë_ūÚ˙M5 Ą˜¨pb Áˆˆ„Å˙˙˙˙˙‡û˙÷_¯˙˙mšđƒ‹#“čƒnĩ/ŋûöŋ÷˙˙˙ū÷˙˙õŅ!ņą ^ŧDD28͂Ømú_˙×_õũõ˙˙īû˙˙ûü˜-8â?˙×˙Úūŋŋ˙õ˙˙˙ûũĪT3˙˙ŋ˙˙˙˙˙˙˙˙ā˙W]˙˙˙˙÷˙˙˙˙×÷­ļžAŒ˙ Ļ8õŊū­+úéúë˙ŋĩ˙ŋŊõÕ~Ą Mr´ Û2YĮ ÄČ7Ã˙×˙īnŋī˙˙˙˙˙ü-ü˜j…"- B|0!/‚ ¸˙˙˙˙˙Ŋ˙˙÷˙ķkûuGõôÂd5ĮGR ojM4Âd2@ÄĘ dqaËq˙ŋ˙īú˙û˙˙˙ũz kßŋ„,ãiNCLᜨvBŽHHFŲ—īL†HhĐ(42 ‚YX]×™CÚ˛ãū˙ß˙˙˙˙˙_˙ß§ũ´ŊT!¸#hÂčkĐÜØ‹„jŽ×jąAx!C‚:: FYŦĐ'9Ã9p[ë˙˙ëūģúŋ˙ú˙˙ūÅûsėĪ ÁD2?(}žŋ„ía s`Ø­ŗ,*ŖiĻ!ĩiØM áJpÉoŋ˙ëīßžŋ˙˙_÷˙ūÖÚ[tN5Ãd5&¸ū­Ģjęũ7ÂAČj8‰N`2ÜØŦ DHFÅÎEįAh&Ÿ˙ß˙õ˙˙û¯õ˙˙˙ū×(×ĨĐ#âŪŠ‡äéēëAzoĶtČá§ĩ] ûĐzæĀã6ĀŖbæÃ¯×_˙é_˙ú˙˙Ŋ˙õ†ēXė}­ë‡n@đAĖ?nēM­Ģ ](kî•6•¤ô PĨtôH˙˙˙_˙˙˙˙˙ū>ú¯§_opBtPm˙˙˙kû^œ†;uöÖę˙í&ĐO˙ĶūŋÛ˙˙˙ëë˙˙âÖÍ-ĨÔ¤Úöŋú1Įūël>AĒ+ĻéĩđúA÷_˙˙˙˙˙˙úß˙˙÷ūȉ2˜ĢKŋˇ8čØß˙˙˙˙ik˙x?ë}ũ˙˙˙_ũ˙˙˙˙÷oŖ¨dUĻOũ—׳Ņ3u˙˙ũQĨß˙öŋô¯˙˙˙˙õ˙˙×˙˙ũŌø1g0ŖzëāÁ˙˙ūŋČ;ë˙õã˙˙õ˙û˙˙˙˙_˙˙˙īöA‡iúôŦ„r ˙ũ/Ö˙üÚ˙ī˙×˙×û˙˙÷˙ūŋ_úū`-2L†@į˙C=˙˙˙˙û˙÷ã˙˙ū˙ú˙˙_ũk˙˙×ׯ­a ČhqaßáAÕž“ßũtĢúŌ˙tžĢú¯˙˙˙ú˙×˙˙˙ũ˙˙ûL†( ‚#¯ũÔ¯˙˙ëŖ‡^ũt¯û˙žëīūß˙˙˙ŋ˙˙ú˙ūŊÕ„Č:"!œ}j›‚Ũ/˙ßKK1î˛įū[éU˙˙õ˙˙ö˙˙˙˙_˙˙˙÷¤ØFĶ Îņ ĩ˙m}z‹ml ëđ‰ÃG6ČŖœíŌ˙˙˙˙_˙ë˙_¯ī˙˙]­č„ˆd†˙ā­Ĩ_Ūŋä=æÄĸ˙ˆņįG˜ūŨyn\˙_˙˙˙˙˙úú˙˙ų´ĩ´pZd @Đ (__éđāŋéĩúÖp%šá÷Ĩ\4ĸø‡ĶoVŋ˙˙ūŋ˙ī˙˙˙˙˙ŋuoá6ˆđa2 Ô ×úß˙ĮõÕ7(XNF#ųāžžxz“›īįŅt’‹˙ũ˙˙˙˙ßīũ˙¯˙ëIŌud|ÕĀĐ2ˇ˙_6/˙dZä Å<ØGˇ˙Mëô)á$W'ÜāOhGĪ ˙×˙˙˙¯ũß×˙ú˙ēm]D_Oĩ×ëëס{ûē¸ONÎ_ÚoA&IBP öײ?˙ë˙˙˙û˙ëũo˙˙úũíSī˙ū˙ņũUĮVüA˜ ņđ“MwMNüØž˙ũ˙˙˙˙˙˙˙īëūĩ˙õa-fÄ×Ėk˙ßūŋBīôĮ˙Kü$-Ž7ô°ß˙˙×˙˙˙ú×ú˙oú˙ęÚ¤ä īé˙×Ŋz˙ģ˙˙ôž­ZI°d}˙ū˙õ˙˙}˙ū˙˙˙˙˙õé7ëũž˙˙û˙×ū’ū‚÷õql˙˙ú_˙ī˙ũ˙¯÷˙ôŋ˙úĢ˙^ˇ÷ūi˙īũũûA/ū°ßūĢũ_˙˙˙˙˙÷˙˙]¯˙¯hÂøoø˙×˙ŋņazũßü/úõū˙ūúūũ˙˙˙ū˙×ë˙¯š4ŋ_žŽ×zS˙˙˙˙ū×˙õ‚ĩ˙ū˙÷˙ŋī˙˙˙˙ģzīÖŋĐ˙ûĨëH~ŊiX˙úũ˙ū¯ú ß˙˙÷˙ūŋ˙˙˙˙_˙ŋ]CGũ[˙Û …¯˙Ûõũ_ú¯¯ôŋ_×ūžūŋ˙˙˙ú˙˙˙_˙ļ˙õZũ/—B=nž˙ŊԜ}dG×˙×ëü ŋ˙˙˙˙˙˙˙˙ūŋ˙˙æū˙úøÂ(}ę˙ût¯Ŋĩ¯ģŋ˙Õ_ûũ˙˙˙˙˙˙˙÷õõú­Ũ.ĢČd†x !ßūžŽ/tģČd˙ˇä<~ūë˙ũī˙˙˙˙˙˙žũũũˇÖžƒ)2–˜a˙˙ŋ{¤Úũ^é=ú^̐Ø?G˙˙˙ũõ˙˙˙ë˙˙˙ßũm}%üƒåvēūũ¯M×]ĢuĢiZīûi7¤ŸÚõäã&?˙˙˙˙˙˙_˙ũ˙˙˙˙ķ5úôˆHE>ˇŗ4™šYc…uÛIë¯ë×K_Ļ˙Ûīô˙˙˙˙^žû˙×׎´ŋũŋ×c˙AB‹ė‡ãįČû˙ū؄ÅDSÁ‚ĻĄĩm&õm/ētŊ-ēŌtēm˙O˙ŋū˙ë×˙˙÷˙˙˙õ\Ĩ‰ûņaŽ˙ûNė-ŠlĐ C;Ŧ5ĩīī[Ĩmw[[ÛK¯ŋũ˙ë˙˙˙ī~˙ģ˙˙_dč,!ä ŽÜ¸ûLęH7ÖĶ´ė'­¨ˆ¨Ļ%ą\3ĖîŲ~Ã=Ŧ;ŽééŌŊĩúõë˙˙˙˙ú¯õ¯õ˙˙˙ĩũCˆl†ŧČqŲ āÄāk‘ÁĨ¯ˆˆ‰îaƈ9Į0í4áˆ_Ä[ČÁ ׍žČúĩl-¯Á˙¯˙ūžģ˙˙ũ˙˙ûU˙ëë[pƒ@Ę㸈ÚÔ#č¸{xˆˆ‹#„ShēM4íxaUą[LEGÅ˙¯˙˙˙ë}˙ũ{_ū˙õúäßäŅŒÂqAė†@=ĄļŽņįķ4œ4Ķ[´Ķĩņ˙˙˙˙˙¯˙ũ÷¯§ūŪ˙˙čmūđƒ0ä|‡ˆˆˆˆ‡!˛lŧ4ĶM˙˙õ˙ß˙ŋtŋũ˙˙û˙Áŋ÷¤ķ##0Č (7ˆˆ˙ī˙¯ũW˙˙ũ˙_ĨW_VŊl=zňķGPĻ ÍF‚ ë˙ī˙˙˙ú˙ë˙¯öû­wë]&øB0‰ l ]}ûß˙˙˙ûū˙˙ũṳ̃ų7û Äũ˙õtpZž/Đ&ū˙ë˙õ˙öŋ˙úũ{˙ûúVˇõ6[ļŊô†ƒÍ„@ƒ!Å a˜G˙˙ũ?˙_˙ú˙ũ˙˙÷ßĨūūj5ę̐wKÄ&‰Ã D˙×˙ũ˙˙ú÷˙ūŋũ{ö“×ŋũôĩë{čĀ” ‡!‘€ 'ô×˙˙˙˙˙ë˙õũøU†;VöÕ{ą k˙W[ ƒAÅČÉŋĒŋ˙ũ˙÷õ˙˙˙īå˙ˆĶLV‚Ōr$y!ĘÂs8\žŨĮīŽ„ŧ Äu~ŋõîŋ˙˙ß÷ūũ|o×Âxk~ēˆt"Ŧ'Ļģę‚ty°Ž 4 ß˙ũ˙˙õ˙˙×˙˙˙ÆĨë~8ƒ˙[[HGī˙˙éīûũë˙õõō€ŅĖpjžĶhâ7į‘okũ_ēxD,Û_˙ū˙˙ú˙˙˙¯˙üZbļŌĄ Đŋ˙÷ęč-H!û˙˙ũ˙˙ūŋõû4ˆkēátäQČãš ˙öŽFŸ˙×˙˙˙˙˙˙§äé˙ū Âæg}ũ  üÖK˙×ė!ķ˙īë˙˙˙˙˙ŋībŋßĮb“VęØ=ĩK×ņū`:“† @fw˙û˙˙˙˙˙õūŋŋ˙˙°ČųtoéQ j•˙â  d0?Û˙~ŋ˙÷˙˙īī˙ūē‹_øˆĐz¯ú­Č6^@ÄŽ˜D€ČdŗqÚŪˇß˙ūŋ˙ũwũ˙˙ȍ/ëá×'Î ˙÷ûFÆÂ•b"$˛œƒŽÖ×˙˙˙˙˙īöģ˙ã_ŋ°ąI ũô¸@ķ88xˆˆˆf ])=W˙ß˙˙¯×õ˙˙øät§Äø28u¯ū—0Ž""""ĪŪŋ˙˙ë___˙ŋ˙ “_ØK3”9Oū‚ Ģh'›ą!š8†GFŽ5_˙÷˙˙˙d `Ö˙ëúIS}Yž­‡¯÷ÚˇŽ"""t\Âf¯˙˙˙˙˙­áT~ž/õõūą ]Î8`ˆ`vGŦŅ/¯uŋīú˙˙Ä ‡˙ŸÃ˙÷˙ÄDDDD†;˛ô4ôæŋ¯ĩŋKū’ŌæÚá˙KŽ>@ä ĮG‹õ˙ļ—oĒé~ÚW˙¯ãˆˆˆvˇßV×˙!"ŋIēv˙˙ņ†CŲāēnŸŌé÷ĩ$ū_˙øˆąii7D‡Ō a˙īš"Ŗ0¤pÆÂūÔŌÚęŸĨ˙û|]D?_Č ėB†QîŸH%úõžC‡Î ņv=~ŊņqéŋKņiöŌI-×˙÷ZÕM€ĩ Z­˙ã~’V‰ĀĘ ‘fš†–¤ ˙_˙ŌQ{cu˙˙˙„ˆg~@h+;Úwˇ_ëū’<'˛´ģK¯˙ëKĻņŽhŽ0–¯ũ¤C+(?9¸“ŠÕĩ˙˙Â`íä Ą–>,(ŗÄ4­@Úü‹äMHåABg‚ãqČ7r‡Æ8˙ô;M:%AĀ đrčæ\6Ā(.Āh#Šl5K,¤€ŽÎíA–ëˇõöēx! AGQO&DđL„âB …raČ0äQČž"b+˙˙˙īâûŧGÁÄā‡žrˆÄ&„CČlr1k˙ũ˙ø"Ÿû˙ūøíV,)8„Đƒš;”(sŽB@Ë . öĢë˙˙ãõ_˙ëõęDôí͌„ĐˆįŒz˙˙˙ū˙ŋû˙ôüwë÷í˙úõ”?˙˙ë˙¯õú˙˙ë˙Ą˙_˙÷ÖP˙ûũŋ×˙˙÷˙˙˙^˙ū˙˙˙~ŋūū˙ūŋPũü~âūŋ_˙ß˙~—˙˙__õ˙ŋßū@¨~BG˙˙¯˙õī˙˙˙˙üÂ_ú ˙ú˙Ōö˙ŋū?õ_˙_˙˙R%˙˙ũ˙~ŋ˙˙˙L}˙ņd×˙÷˙˙˙ûø˙û˙×úåÖx).@Ų÷˙ũ{¯īë˙˙˙˙_˙ūÂp*¯í_˙ë˙į—¯˙˙˙ū?"ú˙ī˙˙_ü_ß^ŋ˙õ˙ũd˙˙_×˙˙Ģ˙ßŋ˙˙˙ëá2˙˙˙ũ?ŋ˙˙˙˙˙ß˙˙ d<˙˙ßû˙{¯×˙ôũŋ˙úᤠ˙˙˙˙˙õ˙ī˙˙˙˙˙×ō˙˙ū˙˙ë÷˙˙˙˙˙ëß˙˙˙˙ū˙˙÷˙¯˙ũ˙o^™#ũ˙˙˙úŨ˙˙˙˙ëúú­=|ãaĘõŋõũޟëßũ÷˙Ō˙¯ã‹!c˙˙˙ũ˙{˙˙ŋ˙˙û˙˙ũmrāw+˙ūŋ˙˙˙Ú˙˙žŋõ¯^ŋ˙ „å×˙˙˙˙˙ũ˙˙ūĩ˙Û_˙˙ČlƒĮ˙¯îŋ˙ũ~˙õé˙ß˙˙˙˙ø! ˙÷ũ˙˙û_˙˙˙˙õõũžČx!ú˙˙˙˙OZ˙˙¯˙ī˙ūŊ˙ũHHO˙˙˙˙˙ûũ~˙˙˙˙­˙éT"ëã÷ī~ס˙˙ž×īõ˙ūŋ˙˙ë˙ßCCũ˙˙¯˙˙˙×˙˙˙˙×˙úëWĮ¨@Ër˙¯ŋũ˙ūŋ˙˙˙÷˙˙ëÚ_Öĩ] „˙¯˙úÕ˙˙˙ë˙ŋ˙˙˙˙Ũk˙UŪCD~ŋ˙û˙˙ūŋ_˙˙û˙˙˙īũųõ˙ū÷§˙˙~ī˙_ū˙˙˙Uūŋ˙ Tß˙˙×˙˙˙˙˙˙ũ˙˙×˙˙úû˙ßõū¸×[˙˙˙ĩ˙ú×ũVŊëŌũÕRHƒŋ¯õ˙˙˙úŋũĶūŸ˙˙˙×˙˙˙ŋ”ä åA­˙˙˙ûũ¯ũ˙÷˙ß˙˙ë˙˙˙˙ū4"Č\˙˙˙÷ū˙öŋ˙ë˙__õ˙˙˙ū˙G@9Ÿ˙×û˙õúũ˙ßī˙˙Ķ˙˙˙ø"Ÿõü†{˙˙]˙˙õũúũ~ŋ˙ũÖŋ˙˙U˙žôČK˙˙˙˙×õ˙õ¯˙˙˙ß˙˙ũãú˙Ķ!ĄÎ9Ÿ˙÷}˙˙ū˙˙×˙˙é˙úī˙˙×˙¯Zâ"ņŋ˙ß˙˙ëzũ˙˙˙ūĩīūŋ×ŋôŋëy×˙˙˙ūŊ÷­Ķë˙˙ŋī˙Ē˙Žŋ˙˙˙ĐdH)˙˙˙ũ˙˙ß_˙˙ūŋõ˙¯˙˙˙ûū,ƒ˙˙˙˙ŋ˙˙īũ˙˙˙˙˙˙ūŋ˙×˙à ÷˙˙û˙ũ}˙ßũ˙˙˙¯˙¯_˙ë˙a˜˙˙˙˙˙˙ß˙˙¯˙ŋ˙_ūíW˙˙õāŠ}Č1_˙˙˙ūŋ˙˙˙˙ĩ˙ú˙˙×ë˙´ŋëÁ˙÷ë˙˙˙ú_˙˙˙ú_××˙ī˙˙˙ũöAī˙ũ˙˙˙¯˙ūŋ˙˙­ŽĢĶŌ¯Uũ/˙\‰Äíë˙_˙ũû˙˙Ûũõ×˙˙ŋ×Ĩ˙˙˙˙_õ"#˙˙˙˙˙ŋŋ˙˙˙˙˙˙_˙˙˙˙˙ë_āČA˙ú˙˙˙˙˙˙˙ũw˙˙¯˙ũīūŊĨ˙ų⇀” ŋ˙˙ũ˙÷˙ī˙‚8˙÷˙˙˙õõũú˙˙¯ŪA‡˙˙˙ŋ˙˙˙˙õû˙˙˙˙˙˙˙õ˙˙ũųĐ @G˙õū•˙˙˙×ß˙˙˙˙_˙˙˙ëũ}˙K˛ k˙˙˙÷¯˙˙ũëũ˙ë˙×ūŋ¯ũ}˙^ŋŲ ˙˙ū˙˙ūē˙˙÷û˙­Vĩ^ĩ˙õë˙˙^—­ëč ƒ•˙ī˙õmũn˙^×õ˙˙<ˇ˙ë˙ŋĨ˙˙˙úä_˙õ˙ę˙ũ˙˙˙˙˙˙Z˙_˙_˙ûũ~ŋĻŋü…ī˙×˙ë˙˙˙˙˙ī˙˙˙¯˙ë˙û×˙úũ×ëî˙˙uߑī_˙˙˙Ĩ˙õë˙˙ũkūžēK˙×˙¯ũũ˙˙ī˙˙˙?˙˙˙˙˙˙˙˙¯ú˙úõ˙õ˙Z]˙˙ė/z˙˙˙˙˙˙˙˙˙˙˙Ŋ_˙ūƒ˙˙ß˙˙˙ãũ˙_ø˙˙˙ęŋúūŋ˙˙Ŋ}˙˙˙Ōũ˙×˙×˙˙_˙û˙ī˙ rÁõ_Õk_ÕkëÖĢÖĩ˙˙˙÷¯¯o˙u˙×_˙ũ/ü¯˙˙˙˙t˙˙¯§˙˙˙˙˙˙÷˙ũ˙˙û˙˙˙ūŋ˙¯ú˙˙éŋ˙˙˙˙˙˙_˙˙ūß˙˙×õëú˙×˙ūŋ˙ũ˙˙˙˙˙ū˙˙Ē˙˙ŋ˙˙õ˙õ˙ũ[˙ôŌú˙˙˙˙˙˙˙˙ū˙ú˙ׯëß˙ū˙­jŋ˙˙˙˙ū˙˙˙˙ūŋ˙˙˙úūŋú×˙ūŋū˙ũ˙_˙˙˙ŋ˙˙˙ūžĢ÷˙˙˙ī˙Öŋõũ˙_˙˙˙úŋū˙˙˙˙˙īé˙}˙õũ]÷ūŋ~—ũ*úõ˙ë¯õ˙˙_˙˙õß˙˙˙˙÷˙×ūŋ÷˙˙˙ú˙˙ß_˙˙˙ū˙˙˙˙ë˙ũVŋ¯˙ë˙ß×ú˙˙ūŋ˙˙˙ūũû˙˙úūŋ¯˙˙_U˙ũ˙ī˙ŋîú˙˙˙˙˙˙ũ˙˙õ¯˙˙˙[˙õũ¯õ˙úīëī˙˙ū˙õũ˙˙Žú˙õ¯˙ë˙ë˙˙˙û˙˙×˙¯˙¯ū˙ß˙˙˙¯ūĩ˙˙Z¯˙˙˙˙˙˙˙˙ß_ú˙”/ūŋ˙˙^X˙ūŋ˙_˙˙˙ũoë˙Tŋß}ë˙˙ūđE?˙˙­}e◯ŋ˙úĨ¯ôžĩ~ŋķõŋũ.Ÿ˙ŋ˙ū*?˙é׏_úŋ˙˙˙ũ˙˙˙ß˙˙û˙õ÷˙˙˙ŋ˙Ķ˙_ũ˙ëë×_˙˙ũi˙_˙ë˙˙ũ˙˙ë˙ųu×˙˙˙˙˙×ūĩ˙˙_ū?ßß÷˙˙˙˙˙×˙üZú˙÷]kú˙§˙˙Ō˙ß˙˙˙˙õ_Zũ˙˙˙˙G_÷˙_˙_×˙_ũ}kÖŋ˙˙˙ë˙÷˙˙˙˙C˙˙ëû˙ú¯Ē˙˙˙˙˙˙˙ī˙˙˙˙ũ˙ũ˙˙˙˙˙ū¯¯÷˙˙˙˙˙ũ˙˙×˙ũ˙ë^Ŋ/Z¯¯ũWÕkúí¯×õ˙×õ˙ũũ˙˙˙Ũ˙˙×ũ˙_˙˙˙_˙˙×˙ß˙ūŋ˙˙÷ū˙˙˙˙˙˙˙ūŋũ_˙õ¯˙˙ë˙˙_ūõũ˙˙ŋ˙ëûúõ˙¯˙˙˙K˙ú˙˙˙˙˙˙÷˙ú˙˙˙˙ūŋũ˙×ú߯˙×˙˙˙˙˙˙˙ú˙ß˙ũú¯ũī^ŋ˙˙˙Ŋ}˙õī˙ŋ˙˙˙˙˙˙ëëũz˙¯ũ˙˙¯˙ũúõ˙˙ī˙ŋ˙˙ú˙¯˙˙˙˙˙Öĩ¯˙˙˙õ˙˙ë˙˙ūŊ˙˙_˙˙˙˙˙ũũkßôŋJŋízޝŌõ˙ũ/˙˙˙ī˙ŋ^˙˙˙ë˙˙˙˙˙ūŋūĩ˙˙ũ˙˙_˙˙÷­o˙˙˙˙˙Kë˙˙˙Öŋ÷_˙ũ˙˙ī¯˙˙˙ũū˙˙ũī˙ũu˙_ũë˙˙˙îŋ˙ë_ī˙ũÕ˙˙˙_ÖŊ˙¯_˙˙ū˙˙×˙˙ũũ¯ū˙õ˙˙_˙¯û˙˙ūŋõ˙Ē˙˙˙˙˙˙˙˙ß˙ë˙˙ūŋ˙˙˙ūŋõ˙˙˙˙˙˙˙˙˙˙ũ˙õZ˙˙˙ūŋ˙÷˙ũ˙˙˙˙˙˙˙˙˙ë˙ë˙˙õîžŋ˙¯__õõ¯tŊR×˙õ˙˙ūū˙ú˙_~˙˙˙ë˙˙×˙õ˙˙¯˙÷Ú­ë~žĩ˙īūū÷÷˙¯×˙Ũk×ú˙˙Ģ˙_˙˙ûüA‚ ÜpČōwww˙¯˙_ī×˙˙˙˙˙ũũk˙˙˙×ú×Q &šjН¯¯˙˙˙˙˙˙˙ūŋúëú˙ׯOЈˆˆˆŗt\ &GIڧ߯˙˙˙¯˙ī×˙˙Â#¯˙˙˙ū"""""ČņĀ<6\'Ú˙¯˙˙˙˙˙ô>žŋ˙˙ÄDDY2˂ *˙ī˙˙_˙˙ú˙Ō˙˙K2CKúÖĢę•u˙^•kú˙Ĩë˙ã×˙úú˙˙˙ŋ˙˙˙ë˙īĶ˙Ũz˙˙˙˙˙˙ũ×_ūû˙ūĢ˙.–ŋ˙õ_˙JžĢ_ú×˙˙¯ī×˙˙×áß˙ũ˙¯˙˙ũW˙õ˙/˙Öŋ˙˙ūŖ˙˙×˙×du˙˙×ũ˙˙÷˙˙˙Äu˙˙õ_úÕZęŊk×úČAĨß˙÷¯˙˙¯_˙˙ú˙/˙˙õ¯˙ë×Öŋ¯üCO˙¯˙úõúß÷˙ëâú˙˙û_õ˙õõ˙˙ãūŋũ~˙¯_˙÷˙ū/˙˙ë˙ŋ˙˙Z˙א-ņ˙˙÷˙ëû˙õú­øc ŋ˙˙õ˙˙ôŋ×~ŧGë˙ë˙_˙˙öŋüf=ëúú˙×˙˙ŋ˙í5˙˙˙˙ëũ~ŋū"AP˙[û˙ūĩ÷~—õøˆŋ˙˙˙˙˙˙ŋī˙˙˙˙˙īëū@Ęf˙˙û˙ú˙ũ ‘ëëū—ׯú˙ū!˙úúūŋ˙¯ņ¯˙˙K˙_õ˙Å­˙ũo}ũp¯˙˙˙¯¯üX_˙˙˙˙˙øŋ˙˙õÕúøŋ˙˙]/˙ũd§ęžŋ˙¯¯õâAß˙õû˙˙üZūŋ˙ūŋüC_˙˙¯˙ø3Ŋ}¯uũ/ā|ūŸ×õ˙Ŋëũ˙ņduõ˙˙ûüEĨ˙ôŋ\˙˙ë÷˙ūŋ˙ & .˙˙õ_â:˙ūŸø4×˙ßõˆe×˙ú˙˙˙˙˙˙ņī˙ü€¨fģ˙ũâ˙ëĮ×˙˙ÆŊkf‹˙ˆŋ~5^?ŋ‹X˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ā@´´ū´ŧ(HHleptonica-1.86.0/prog/tiffpdftest.c000066400000000000000000000122161506303110300172130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * tiffpdftest.c * * Generates pdf wrappers for tiff images, with both min_is_black * and min_is_white. Demonstrates that multiple cycles using * pdftoppm preserve photometry. * * Note: this test requires poppler pdf utilities, so it cannot * be part of the alltests_reg regression test suite. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { char buf[256]; l_float32 fract; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixa3; #if !defined(HAVE_LIBTIFF) L_ERROR("This test requires libtiff to run.\n", "tiffpdf_reg"); exit(77); #endif setLeptDebugOK(1); l_pdfSetDateAndVersion(0); lept_mkdir("lept/tiffpdf"); /* Wrap min-is-white and min-is-black */ pix1 = pixRead("miniswhite.tif"); pix2 = pixRead("minisblack.tif"); pixCompareBinary(pix1, pix2, L_COMPARE_XOR, &fract, NULL); lept_stderr("Compare input: %5.3f percent different\n", fract); pixa1 = pixaCreate(2); pixaAddPix(pixa1, pix1, L_INSERT); pixaAddPix(pixa1, pix2, L_INSERT); lept_stderr("Writing /tmp/lept/tiffpdf/set1.pdf\n"); pixaConvertToPdf(pixa1, 100, 1.0, L_G4_ENCODE, 0, NULL, "/tmp/lept/tiffpdf/set1.pdf"); /* Extract the images */ lept_rmdir("lept/tmp"); lept_mkdir("lept/tmp"); snprintf(buf, sizeof(buf), "pdftoppm -r 300 /tmp/lept/tiffpdf/set1.pdf /tmp/lept/tmp/sevens"); callSystemDebug(buf); /* Re-wrap them */ pix1 = pixRead("/tmp/lept/tmp/sevens-1.ppm"); pix2 = pixRead("/tmp/lept/tmp/sevens-2.ppm"); pix3 = pixConvertTo1(pix1, 160); pix4 = pixConvertTo1(pix2, 160); pixCompareBinary(pix3, pix4, L_COMPARE_XOR, &fract, NULL); lept_stderr("Compare after first extraction: " "%5.3f percent different\n", fract); pixa2 = pixaCreate(2); pixaAddPix(pixa2, pix3, L_INSERT); pixaAddPix(pixa2, pix4, L_INSERT); lept_stderr("Writing /tmp/lept/tiffpdf/set2.pdf\n"); pixaConvertToPdf(pixa2, 300, 1.0, L_G4_ENCODE, 0, NULL, "/tmp/lept/tiffpdf/set2.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); /* Extract the images again */ lept_rmdir("lept/tmp"); lept_mkdir("lept/tmp"); snprintf(buf, sizeof(buf), "pdftoppm -r 300 /tmp/lept/tiffpdf/set2.pdf /tmp/lept/tmp/sevens"); callSystemDebug(buf); /* And wrap them up again */ pix1 = pixRead("/tmp/lept/tmp/sevens-1.ppm"); pix2 = pixRead("/tmp/lept/tmp/sevens-2.ppm"); pix3 = pixConvertTo1(pix1, 160); pix4 = pixConvertTo1(pix2, 160); pixCompareBinary(pix3, pix4, L_COMPARE_XOR, &fract, NULL); lept_stderr("Compare after second extraction: " "%5.3f percent different\n", fract); pixa3 = pixaCreate(2); pixaAddPix(pixa3, pix3, L_INSERT); pixaAddPix(pixa3, pix4, L_INSERT); lept_stderr("Writing /tmp/lept/tiffpdf/set3.pdf\n"); pixaConvertToPdf(pixa3, 300, 1.0, L_G4_ENCODE, 0, NULL, "/tmp/lept/tiffpdf/set3.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); pix1 = pixaGetPix(pixa2, 0, L_COPY); pix2 = pixaGetPix(pixa3, 0, L_COPY); pixCompareBinary(pix1, pix2, L_COMPARE_XOR, &fract, NULL); lept_stderr("Compare between first and second extraction: " "%5.3f percent different\n", fract); pixDestroy(&pix1); pixDestroy(&pix2); /* Show the six images */ pixaJoin(pixa1, pixa2, 0, -1); pixaJoin(pixa1, pixa3, 0, -1); pix1 = pixaDisplayTiledInColumns(pixa1, 6, 1.0, 30, 2); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); return 0; } leptonica-1.86.0/prog/toc.99.tif000066400000000000000000000171401506303110300162570ustar00rootroot00000000000000II*ĸ˙˙˙˙˙ĘäfûÖÔģ#Ŗģ/F3ĖšGËäxģüĒ* _‚å\2 § á ĮA?Ū=w‡ß8ߨ˙á×˙Âá×ÚđŠĄÂ kīXA”>ĨŊ8Œv)]t*!ņ}Ž""""""""?˙˙;%Ŗ<—FPˆ ŧū]Јhė„c>ķ<ŽŊR?ų$ĘŗŽPįîrBĄĨЗEŅt]d EŌ\hC#ĸ>G˛ų‹÷ßî#¤yPĶČîČë˙(|đĸĄũã˙„Gá ‚ÂAË­„â-.##¨ž]?ũ|5Ĩŋ_ņ{‚d}¸‹_ĮnX@œVÎ9CÁõĶĩ{cå8A6aĘĄĘ„‚G‘Hˆˆˆˆˆˆ¤"""""""""#–⍯{3Ī"…;%FĢ/™:0Ž%ĒA*]]":ŋĨ.•K¤‹Ŗ_lō#­´*D|)6ˆö *#څB.ʍūõˆë„4""RQ)ĘĄ˙ĩA_¤ŋ˙ D{ŽHUŦyC„’ØYŽÔDDb"""""")G;%Ž#ņGØ´c3FhÆGÍhčŽ"ų„_ \/@Ÿē¯č/æî/‘ōčž]AHú˜Dtf”(Rū˛C”9Į5ČņŠ˙ÛŦ ‡*A 4˛: .´ÂXŅŨEB#Ĩ„īĮŊה˙ØAe?ŲŸÆœnŋÔĄÂ W˙ĒīŽĐ„GEÕąņ|BūX"ę##¨˛?öã„„ Æ÷‚)֖”2‚Ž>˙â"""""8ˆâ"1[§ˆņŠPđˆčÍ-Ԍ%ŊaÖūãĸ:ÖeDE!Š#|ûÍ"Ũ":… _îČņ Gŗq#ä|d|ė8Ä 6žô‚B!„G[ĶÄ ģhuÂū’ēŪ^?XßÕD..‹ä|ē0ˆú‚ 6ĸčôá—\| „ †Ė8ˆAô‚ Š-Đ;@ō: øˆˆˆˆˆˆˆëō~ōŸđEÖŌĮm~ߎū!~÷Gႇ A gd‘ÄmEėttB"#„G_ÕfĩüHū/…#Ŗ HøR>GÁ"ųto#é—Čų#Á"čæGd|›ö‚I ¨$ IR @’RZ„ ´‚  R#ĒEXĨ௒ü$"wHp¸_ÂXô/ˆŽŽ–A$Į¤œKĩĩM:°X@ƒGõÄDDDFˆˆˆˆˆŌX‰ß#ŧ#ä<Ķ>ĻFh“DuáŌČč‡Ė‘Ž><˙.ŲČōÎĖ‘ŧC„GEō#ä|ē8‹ĸņtGČ菑ŅČ菗Dt_HŽ‹ĸ>_#ŽËŽôA{õ(p‚`°ˆüíW/„ˆč!˜ČâÄi$CŋëĐHPC_ZCßu÷ũã˙é-q0ūĨ”åI.ēøø JPø÷Đ"ęŌŖI]v^ūPãŦF™=ō‡ ĨƒĄĄ­úH!HGˆˆˆˆˆˆˆˆ”į€@´\…ĄĄ>„DDDDDb"'Du*ČÚ8Œ#ڙb #M,ō'^ ZÎÉ…gōųtDeōų}K—ČčŲéđ@”Ö_1ßúŅ]úIč Nõ(p8@ĢĮ×Mi ›˙ūĄHū˛C”9Į4ëë¯I!ķŽ?‹ī_}恸 BŖG…Žļ<2ļŖQÄĄŌÔĄÁZR‡I=„PđE:ëīũJ ēĢøˆ0„DDDDGÄDpq‘ÔQÆÁ8A@œe֖ĄˆˆˆˆˆˆˆˆŒˇ-RŨGČöGē_B d}âCĮ˙{V,B^›Ŧ|Cb%!/úHēqĩĩ*‘„gY›5ŠnkéÔ-įj¨“G˛}øäœÃČũČų#ä{#Ødt•W|§"‡,&]oąÂaí üÆGJ]#ä|Y.ˇ„G_˙öŦBx^]‚(v’ĐT]5IR˛éZ^($ÁÄĄÄ „ ‡áā0ŋHD*BŠB"""""#Z_„.JHxļŖ*qˆĐŠ–2‹ätGDtE3čÍŅÕDNņAt>tU¯šfÔČB?čžSŧŅIF9cœsŽ|¤Y7‚™|ō<KĒI*įjŒ†‹ũÕŌ+ųu(tŠĄŌ*4‚HŽŖô":Ia! DtGDuA|â<#éa )uätGEō<_|ŽČųÂ‚Ļ­Gëé-!ņ¤üĄÂ¤"?ŌZI B I}—dx‚‘āŠĮĮ O}7 EÔBØ-ŌØBĒ?BėfĄĘ ēGQĄ— @“Â#đAP‚/^C[_„GB""""""B""Đ™Ģ˜r‡({­1§˙Ä":ˆAzņČé†Ų[+ˆ ‚ˆˆˆŽ.'ßŊˆˆˆˆˆˆˆˇ*҆R"øÖŅG-ĶÅŅ—0@ĒËŖ„_.‹¨Ė @†v¨Ŗ4HGDo/—ËúčãĨôÕS†GJĸ9Ëj]î‚ēH*JĐ^•%Ę ŗPųŨ}Hņōų´_7ũúÕ }G_¤”Eņiã°^D§ö<2ļ4ÄDDFÄDDúĄ”ëĘB˙}WV•'Qō‡ĄÜ=ģ Ōt„xˆˆ‹")ˆŠÆhŅÔDP+Ąˆņ¤s Ëĸ:ËŽPđˆë¤.‚ Á¯ßÜė‘Κzë˙ņ¤ēĒŽ´6‡ņŲjŸßŗ“""0ąĻš…ũņŋPˆéwhE!ˆ‰”ōųŠV(Ž˜%™ #Š&zVįjąĖöG^ŠģŊčHčē/—Eō辏fEō:áŌ˙ †AEƒAŌ/Áwļ!$ē!ÂâųQ…đˆ˙Ž„Dz÷Â ÂøvŦpøŨüD#­Ģˆˆˆ™^GGæ@‘ÅHvčåÉqĖ9Į0į÷o3] Ęp–BĄŪ*é‘Đ ˛ëi˙¯u^KĮbOV,wv›ôXDuøøˆˆĖ„”ÉŅ›įbčÂ3¸"„_ČüėM0IÔ#hŧ)ŗNˆøAwך1Ę T!ŽļL+˙ü§ü~á0…‘īûõoņ!ŗČø4"v°ĸ†f~ÖG‘õ @Šĸ’B"""""!ÅÛīeč">… ˆé•$IÄlDGŌŌ„BI‰C“*üC„Gá‘Ņ|DėU$UĒØ%B""#PEג3čž:(ˆˆÆGČųt]Čč o4ŌŽtŗ"ThŒeø I$*HX JŅĸ:#Ā‘| eĐR>‘taiD|ēŠÚÚ4ĪŖtʰI uŠ‹F/¤ĩÄ °@¨ TPåAh$ē@%T2ęv¨îŽ’$#ˆžoßŨb*~ĮÄi @žąZ ?AkĘĄÂđZdTF9C‚HŽ´ŽĩŋlDDDLÕļ5;•XD~ Ö8ˆę8æußŋ†–…!ˆē ¯‚#üĄÂ”8Ai8@ŊvĄßĨ¨ˆˆŨxˆˇ/mb"ˆ‰ßeŅB°‚ˆˆˆˆ˛ļPĩ$eâ<_ˆˆų# ‘/ŧ Ąū’čP@ĢõA×ūŋސįj¨—Eøp@’—[I—ę^Tt"""8ĨCáŅéÄFĮÔGáė0¨ÄDĘŒæFg:Cļ‘ĢēMžœnd,Ž+Ië0žvĢG˙:"랈ëúŅô_.‹åŅ Gŗ‘Đ ^úB*‘„ĩ h CAŧwˆˆˆô^/°‚Ęz˙đD}ēë˙ņđÁ=ī÷ãėG—[b"""#ˆˆ‰ØŒŽŽ(ˆˆŠ~mį҈Ž‹¯´ ũ§ë„ 8`‚yB |ˆˆˆˆˆķŗ$GDęv¨Œ/įbhÂ0­AÃ/…#ßũx@ƒ@‚e×O°°ŊĨīáøAx~„D ™ÚÂ!ŖDjĒëdtŖˆˆ‰ÚšČõđ†ˆųŠDGXEŌ—Á ŽˆėÃ#Åō:#ÄtGFÜt_é-‘ôt*áØ$üŽČôËS1ÜGÂ˙˙áW˙Ä/‚jvŠ‘öLŅ A—KīGĮ’÷4EŅōâô”DDDDDDD8ļõd|ĒōŖhb#é$VGK„ĸ1čwr‡!ãGĨKĘ\Õ Pˆˆƒ(Ē@興† D„kËåōüČmFҚ:ŖÂ1¤`a"_ĒYĸ÷ā‚×ŋ…õīđŋo‹ĸú Hâ/‘ō>G˛<ŽĨŌÅŪ†ņĮĮĒëSą/o1‘ā¤{H Tņ/ˆˆˆˆˆˆˆ‡aÄ_Zƒ  ‚Â#ûÚŋøˆ˙‚ õaˆAĮēü TC†"'aQ]rčDDDD D'ŸF™Œē$ÔDDėŧCFyŖ™Ëæ5/„ą¤š’Œŋ éPA8Ô)ČņôŒd|‘ōņt‘FGDt_/ÎÕD5‘ŅEđ‘~2ėŽˆåĄ(zHG’J5¤*Eė˙`]rčúԏ˜ČæGŒfō<ž’ PDtŠŠ …—DtÅ"‡ ‡0嘯Tž¨ĄĮHB \ô‹ @”—dq‘Ņ}Ŧ§HuÂâ"?„6*b"B"-m%uKaPã¯ÃI?Õ*APāYCžžąúĮ(sCQbHDDDDA”č]Skwčq‡¤ąØõXˆˆˆˆˆˆˆĨJÖ )C… !Å!ˆˆˆˆŠBA2ųĖÔ‹ÆøœFˆÍDÆ}mĨ‡Š’´tGßę]úē#ûĐeqž7;[FŧēÔēŊKŖ‘īŨUvŗ šÚ›ī(ËÄ ¨ TãģMG\z}‘Ö‘}`‹ @˛čÂ#ĸ=.GˆčC„B ß ˆé.,/ü4ĄÆ…!WZ@%Â#ûąûëÚ÷ØAáÄ0†GZô"#‚^#˙uôŒŽ˜„øˆˆˆˆˆõ(´"""#Ą;$EŅÅG,ú/‘Ņ] Ũ ķĩLžjEûO×-ĐDuėB đ‚ßŋŒô›b"""#Kß§ŽĄÕWhE!ˆŒČUS(žv¨ˆųžaŅts#ĒCÃ.‹ä|žGČų ŸŪķh.@Š RčX_ÜŅ #Thžđ—ëā‹Ĩžū ‚ÁGp”ŋ|!5uĩR:ˇė.Ũüē—Á Žˆņ†_/›Ččß*#a B"""""""":ŽžP‚ņŽ´č ‚āŸ#Ō G(@Ÿū ‚ ąû ‚kaĶ.–8û¨âãA8í5ˆˆˆˆˆˆˆ‡>ĸžøˆŒeēvFEÖŋI„QˆĻF¨×-Ččē/—ĐČ膸IgķĘvĻĪk¤”j‚AÕdxŽ!ŧŽŌ/—JGDtG‹ä|Yt´”ėIĖ("朿]\ Ŧ‘â? @’Qü ^'§ĨZé]5#á"ūGō:úĮ# RJKUÁĮQúÎ?_^ŋę•-#év†GDuūĄG•p@ŸÂĐåPābB#a4/ʧKPę— ŧpÖŨ‚P§rˆˆˆˆŽŦÚˆËtčÆo5#  ˆëŲRS;SEō—ˆų…Æį­}QôčWOíūÂČņČéH莗ŋøDuKžęSúúÃ˙eŌ¯­~"Öˇ‹Ŋˆ—BŒDDF[ÖÎ,;XFŦÂSvf‹ĸ:#äu;TIĶk ĒCū3ȎŠŨÂKûH&Âz&C„ü":ģ ˆˆˆŒ~"#ÎÕ#Ё|Ũ™ĸčĮá5Û2ú÷‚ŲŲ*(FŅ­Q…a!ō:AíÎÔŧŋkų.â"""#Ģų/Ņ ŧŽˆč‘ōčŋGúŽ–7Aõ×ė.ŸČ莈÷šC×ūĩ¤A”û@‹Ž‹¨‚ˆ‡Ĩ{ĄļœzŊņ„DDDDDDkqn""9n20ˆ™$ŋå‹)ŲZ4FˆÔŒ#莈Ä] IĶ#åŅtžNŒgÔėK0–˙ķĸ÷ËĸëXÕGFĮd|ŽˆúEōųĖŽ‹ätmŅ}mqw]K₆G2=e␠I( KF‚ k PDuJ–j*#ĸ:đ@ĩņ¤ ˛ŸĘŒ T-#ēž^TX%¤¯‚#ņđ–ã År‡î¨":Ģ_[īīëøãn˙^ņhj„ëá—×”=v›OĨE×B×íq؈ėŽ""""‚ÄDDIÂŌĻĸ"""""""0D|DZˆŒÉQƒÍĸRŒ#Č՘G9ÚĻF˛…‘ūŊ":I÷Đęé*\pĪ_ō;#˛<_#äxŽˆų#Á"ųŧž@Ëäs#ų/‘ŅŅ ˆ÷č":Ŧ ´ĢH§éR %H]RAY@ˆúR‡ŌZV–‡KÂ#§í!×]ĮK~’¯ZP¯Z­cöšûãCŒ¨BĐhDŅŅPŨkM„N„DDF"""""""0Db3ĩTtD„d3ĩL‰¨â"""(#hĢYŒŽˆ4K¨Ĩ™ĨJ„Ŗ¨DtGd|$.HsŽ ‹æŅȏ‘āHŋåKIi,¨IR¤‡ ƒé\!đ‚ŌĒUõ āhTE§'T#b8ˆė&ĨēˆˆˆˆÎÔᝉ#„tFyčí)QŽ/^´?ųB%kØexdtGDtGAHōG2čžGČūGÎÁp@“UK4DBûđ’ū&][īH ‚Ūˆå‘â:#Á":#ĸ>GČøHY´GÁHžGy|ŪGF%#äy"ūõØ_éîąŋĒʄ‚ ö 'ŌŌ¤”~‚ ZH$‚(}RGZÄDDGaØ(”8a.ü-$B5á\UÁˆZô–Æ48ˆˆˆˆˆˆˆyC•BĘt QöƒURZÚĻyGĐëķ4}" ŅŪ̊I/Ĩ‰ä]Fh¤GŅB.ŽĢ—DtGAHđR:ČøR>GÁÉŌ—IGtZCūĘĶkĐ L@2ę’@%­#vGČꔎA‘õ;|Ã˛ã#ęGČų#ĸ>GEđHŋ‘ōér>GˆøHž]B$ąô‡ mwō‡ $• ˆé‚@a¤Ž8 IGT‚ H.´ D}$AŌai`ŠDDŅ$—V—úAZX¸ŽãŌpę#ãõÖ8ŠôŊ¤ž#ˆˆŠB8ˆˆÕcÂ#ã(t•-ŌÕJt-%Æn\RHDDDGÚŽa!ĄĖŅ„<ōī.ŽĖ™!Ŗ4F#čú>ŒeŅU,)ÖČ莏ŖˆęĸčÚ0˙WYN„—EŅK„keŅ$GYDuøA0V‘Œē .”ŋ‘ķˆō/—ÂAHúåōū'>ōžãÆLײŋŒsNDœˆÜô˙Ļ†ÍŸ4€ŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåáJVŽdåá˙˙dëâ áR˛žqøÅÍžų˙ėȇËČūxCÃÍūa˜æpŲ'’í˛˙BũĘü§~(°KȚäoöŨōķû÷&´ĄÃ16›/‰ČFÖËxHd̟l7›­<× ´7ņ„°žė°šgO€w]XMÖĮÍfŋ6N֒Ŋ4NTÕV’7›uíđ0åš’,&ÚuIĢžęye_=?ˆĀ]Eöjŗy/vũ8¨Š'k"ĻaŲ)Q\Ŗvø¯Vᐰ†ŦMę Ī´Ÿ]ƒC²Cē†VČ͈š„dé,ë§6k$aŲ1+ÉíIyä!”“uP_ęĐ^ˆVNvĖՋ¯7™ī€C1Y›ŸÜ'IÜb˛SAjįK2­”Lײî‰}÷ņ‚šVJÖ¨,;UöŨ!o?ÍHŠ”ė Ęįģ'Ü\ž˛ĪĩøZc-–}_ŲYŨߎd˜aøČ*ƒš›áÔcķvuGŖėÁV‹ŒS%ëU!‘ edg]6§:NvZky—‘vxčŖõŦoÖ Û"˛Č˙MĪ”nmE+zŽ#ˇ]ĸ¸ÖV´"˛Ŗ]í6EvZŲû,"…Ųîē*ūĐڊVBv…éÕxSĩÕ&ąō1"f}F5ģļvįöÆc5>ŸdT6ŽrwKødŦ”hd š—÷Ëáņ—Œį֍ Ņ–éÉūhwÚģë?ˇRĸŗžŦßŨŽzā­ÁvŊŗČęxH2R& ˛ģöĢCQ?>OŽĢhŲĩÄĸ<(%wüÖĀø¨1ūÁažÃąū"ÉNDÉ<î;OöՁėļŨ|ģę›÷U-›Œv5(ŲØboēÍ_ÚõŗŧJuæ’54C>ę;ŸÖˆs×mēŲNJ–ûŒë-ē['`Gâ§ũÍ 9ߨŦ§×¨Î‰ėIÆ}sĒí$ûʐčĶîf(Ūã_4ÉÎ+l´ĖÎIüAí' ß2mPPĶļp0EŨĨdž§}ø›ĶŸsåG^v‡M˙áđ÷Q?ęĪ>bŦhydŽÜŨĖ=ËSå{žģķf?S<ícbЅ~2§3ÛÛ9+NĩW8ģnŽq#ōŨĨé?Ņšę>Û3įũŠ?škģŪĩ1˛cõ…ųF?/žĒû€C+ĐS;Šr‰–EæëīœwĮ!ûMrß=9Ū÷,´År#‹ĖĩųE˙2ßcĸáœëŲŖ!įk;—ęÍûĻ7žˆDRlŖåųj67€QEî[$ bdMUĕGæĢŲÔÚvûäô$û­H$miČ!ķĒe*‘ķˇĢ÷ÎU§EgWGęYšD˸?TŪÁĖē?7ƒûųíĸdĨ-ƒėLí×Íéīlę˙q¨p@ĒŪD$my¯3gz×÷zŋ\u›ķ¯nūũ×C*ęõü Ĩ–P™7•ÛˇĒf{zgķ×Âā `H˛0ОÛC5kßŲĢæÍO{<š—(¯Bՙ&k}5õîTˇÕƚ›ņc|84er#MJŽív‡}W­F/Ŧhédčüå[7ũz˛B“; os;=*ō!6GĢC’Œ•Á8ģšûßK‰\(ëÛ%ÉXŊûÃë}ËĘf“7ŗ^Ī8BöƒR ōx]ps’ŒUÛĮ}tÆ0°€6B’ŒŨ0*ÆČŒa*™Ü)˛–ÕÚ1ŋ~\ DRÛܛ¸Î jLd„•"ãS6—’•ȍŲqO]JVԃJŨĘGŌ#]Ũŧpx/ûÖ™0÷/ÍŗÃ6A&ēHįY›_ŅdįŠũŧ˜Ŧ ĸ%îŗŠ“(¨™˜JŨļ˙ōŊßyŌīs†Į§?ø˜ ęD‘ũzĸŸÛgĨ—_Ņâd˛'..žËV;eąåO'E¯ĘŅ Nöä_ɕX f›ÜņČÎu„ėķŠ˙đøäŗ_9xļ”JP´öĩd~ö~ ´cūš/ ûé__*ܓx‚ŲcBq2kūš_rŦf§>ūaF‘f÷íâņDb đ›ęėŗMŌ[;ˇĸEÉ:;įkiˆö^,Ō\-JąÛíR{wŗyã#ãÚrĮßŖdv;:ŲÎâŨ˜k‘Åšš-JÆÍFöXLŦžĮ%‰Oė$#ŌÛb-Œ!ËĸErŠ´ƒ}nE‹’™ųžZ:÷ūˆöŸ3­Į™)Oɕ(Ķ bƒ SŠĮČ+ũœ G-OŠĮđšŦÅ;ĪLë#oü=Ff5ÍC^ģīŦEÃįŦåc12c¯É]y6Äqû圧#d`g ĮlãīŦV_OĄŊ}’ņpŒĖhšH–ҰĒ0ådF”c0´f ęugÉuŧËÖ-ôQû’Ą5 ūę=>~t%k(9BfŧLĘ^ž…2-kÎ"B†kt§<~Ŋū}…î?ágĩ-"døqčT˜&üáôf‡LN°ÉŒĻ‰ē˙ŨÍ4E†'^OĀęČi6nšp¸ŨNdx Ģ‚9§kg“á§Ą­ÜĖīÆčXŒ•3ün“Éžæā*:˛H„ŗv‘Ž6Ž 4ßĪ[Ų™įĪhŽ ›Ā&ƒúœUŗŗ;8mƒ?G͑Ņ8M2,sXåķ=øûÛ(Zķģ6Ŧ¤,Æ@vwŌˇŌU\Ķ$kāŗŦ\<æĶÛxéhŊ‘1îb’Á:͋ØgÔwņ­M‘ ũd’ÁšĀ;dū–ü^HĘ]œé)o“ –7_|ĩ˙Y -í˙J‘Á—âņ˛'°“ įŠ­~Yš Ji1XBČætÆöŒ{|Ęhām9d°ņˆ“žėGËhŨx“)Û)Ũ8-˛% ĻGö|!§/o ™2QŌĶ"ƒBCtރāÉÚúît;ú[átd|ÉÆi‘A}.Úk žšęŅéĻoŋ 5Ģ“lœrĮ—æä×ŨT‡GG“LÍS'§E†Ē´÷Ųv$; ęŗų6ŽÚjú0Š9 2XAeŨ ~Čŋ~;.6=ߞž×|ËhtrēŊfÁįdŨ d‡hÚj0 ˇÍģ™ŦhIŗÖ C†z'ë!$iW Ũ]ŗųËFŒ˛Rbà CõS ĮæÛîĻΎCž5Ã˙ڍ1oŦ*ZJlÉnSķ­j9jˇCŽ du÷^{c9oK•ęsdHÚČĨĢį_ôdģAewÕ´âÖrD–CÚ)ąaŦVÅqúŽOĢÔĨ3ĖŦ<“Ã,)ąa†ÃM槟õGj+ˇBėÜA$•˜ 5in.<:ķ}Ū%ÉÄôaJl`2ô>\'õŨ†”ųđD “ŗ:‰Ū0&k*uJTŗķĻ:ÜŌæåŸ0Édx›k4Éj}ŠJÆc}Ūė6[8ˇ´ŠŌ Hˆ L:NėÕųËon*8ˇe’ÉâKôĶ1gė 7ƒ:ŧ쇕Ø&™”˜ ˆ3mv#=ō­ĩÉD‡/1ˆ†Éô3‹Ú¯n›ęc#F›Ŧá{&Ä&Ķΰl~y ׈MĄ5Édˆ[ Œ1-wŪGČė<“M nmāÉ´Jb éÜn͜ųĀf– +ŪIdM…īûíéđi˙qģëÔKøq$Ī„y˜Ŧ–gæ0Wŋģū'‘˙a„ŦáEw1™ۜėŲĨ1Ũô?‰ė2rú]›L¨ãdzlsę_¸E’h=$š&zdMULĻĢæÔ'›mŋ!úS¤Ŋ7†Å7Ū8ãŒGĖSˇiî eÛ2&ē€ŋr|G+HĻUĀ”I§ŒË‚‡7ŠČŋš&gT ,dŸÅŸ˜Ëņô›cKhĢŽ–×sCSąŸQ7p”g:—g)ņâÉhĨĩĩ$~ũÆ?üĢq+ĐQŗî~ûb˛yPb(‹ķHÖđģ¯ĐŸË JŧxŦVNķ¸Á ŗĮ˛Š –ˇŸ;¯ĄŅ™DÖH˛eäxĀ÷Įž}›ŊjpĨÍq}áŗœŦ';Čė§÷bˇÕŅeęæŗ?÷hBûˇ’d\UFįŅ™z`ą÷‡RūāžOŲ7×÷æÃ?:däWHŗ“ŠL^Fåf2:ŽūÔk°ÍØ.šWáčFxˆL5™eālhYoŲ4Ę+YŪė‹É¤­éĻN˛ßcĢ™ÔĨŅXŽĒ'D&•īÜö˙Ëöĩ?ũJ)ā_$?SÁÅ~LĐ 2yŋīŨ 5Ž BũPcgŽCÄá5ņžÕīÆĢ—H1õ„ČDĖĄ›xęOß÷EũŠ!#–Ēf¨xyL 2)hÃ0æŠ?aÚ5jh°ˇŋfĻĮEL 2ų"a8âŧŽ´V–Åŋû!*qL 2YøA Ÿ÷Á)Äʲ~ūL…™ kø1Q›ADCķ^¸˙ŅDhˆ LPÄvd"/HWŒd~ûEiŸėŊcJÉŠ’đ4!‹ī%Úl­ËÜŠ(M&߃Œ„j‘øđ @˙šq‰7ĮH,šL Zō’ėYÂŪ9™ú“7ĮĸŨŋ¤“Jhšm Kún›2…7ĮˆĐ)Ø í¯ēKm˛;Ō@_ō^V–Čš&ŗ'a™ņYÕ<Ų;E†Đ™ôČ"×ö/9˛øū;ķ͖"`U+ĸž™teoĒpéíĘŨSõÉŧ§ĀĒVD=)29ĘDz;Ũ›K6d-÷°VĢ0ĩQOŠė,öYĻ5ÁmŅ™ˇÜÃāgXBvü"~zķĪŗŧOĸœņmŦ#ęI‘„ˆĄu}™¤ĪüÄ ôr—ŲdK•Č ÷j`ŽķĀ\Ūr§Ū’-|¤Ęnä’ŦÛō}Z˜ŽútIPFŌČ Ž,›lõ$Siwœ 8TjenI%ŦÃØãļz’Ī65ŸÔˇ@˜Yd¸ÜY6Ų}E&Ņ-˙¤O™’ę –Mųdb~x{ö¤>\čÃîØį’‰wĐ.œhi“Ŋ#j ÆVO’L˜%M%@ęėšˇPô&ŸL´åVԕ}-ucÍVO’LúTČûíuj8ū´:Å4’­ž$™¨Wj°O,œn^Ģs4l21ÉĄšf'>ŖÔũa‚Ŧb&ĐLÅ)ȚŠ˙TĪIģ2Y¸ŗĀ–ÜąēlĒ'ÛNœ~Vâv9GxL6ˆ“îŠ0ãßÜNG e¤šĻđuėȜŽąËcĢ;ķL ™ŠS ĮTÕ4E—¯!Ã˛ÖĖž–L†™ęI‰¯|įE2įÍīo9ãŗz “afŋŽ“IWŲ4U5ۆŌĀ_YCkP˜0''“BC6Íß'U ŗú `¯DKSe‘ -ĻFš…ķõčaxīŌ2ģz“`aĘĖ/+LF>%ÖGA<‘ÃßæčŽh´=šJ€“‰†ĸj§ķm¤I%fK˜ŽbÉXJ J&…†Ü‚e,‰Q†wghŗ&™Ū¸…YšV ą'¤›ō¤ĢåøĘįo˙âžģ5{Ązą=a‰ZPbōu¤/čĐâ§jrŪ|ˇŽė[ĢVĮ0ˇŠ<2QæjŌŽæŋĪŨŧ‹zŗiĒîĢæ˜šÚ…‹Ú,2ūrĘŖHŽ%9wu3&2ŽGīžō5‹LW4ąĨ™hÁJœÉz÷“ļåLŨŨ Onūlmõ‡'â- Ë ‘ Š'ŸQvä§m5ŧqģënģ]Ŋų–IĻ6nĄãV%F&ķYwņÚęϟČú7ëƒŨ RËëi­ˇ”#qKqĻŨ´ÛoŒUh;ē¤íīíÕōę•r”'Ûŗk˛{ĸG_Ú¯i>jô!:~xŗį13Q›C&,Y­ĀčË×FšíųĶčåōI–Ą-ŌR+ąF˛1‰Įķ>"S‚2ˇYĩ1ú(ŒŒO(qĻãÜ_ZZ„LÖPVđ†ˆ5"%ôˆŠ4™Ũ’M€Ũj(FÆéĨ8NĻí×w,ļG¸ĖîR2Ū÷“â Ŧ4čžąÍ#{$âĸĸÖč 02>DĢÄY­žnßžÍ#;‰÷h:BĻÄ ›LŸųą.F&;ûL dņzj‹3˙]5žœļûY#ÆhŨ2$4%ãK5ĩP‹=sW’*ƒLļkZˇŒ6ÍČ*zĨaŋ˜•å+č֓Õŧ2Øéôĸn•’)(”ĩ—ÚmŨn~šžA&ô+Aü%ãžm Oø.S'æ8x8WĪûåĻ›i>aõDÉxķ•Bƒč>߲†fåĮēģ*–gRŌÆ†Õ“MĻ„ÆŪzÕ>…§Q˛ioŊī…ßô^Ŧ(YÜũ„X>;GQäīÛÆJSFGK°Lĩe‹Ė‡GҁQQ´ązĸd|î]ĻC^ړą5 zd…šÖЈŒÕDei:kU12ĄŸ( Vœ&™Ô’´qųÆĀVŠÅ—/5‚ŒÜŒ'%cUAVK÷Îã‚ēŦ]EÆ#ĨÁÆ0%cĪMowøŖ7NJƒ'%cōHYËßą‚¤7ûAôoM™ęŧēˆĮü˛ˇqŨÛdĸ lã$™2­]ŽõĪ&ŗ>—5„ķĀ~ŪĮŒĐTüž.u‘Ũ5ŸÛd čŪ8†dŦCSķû|éŽŗnī›dl“‰úAÛ>œ‡ˇČԞ-ƒöŸū‡?}b’ ŗ–m¤Č˜X‘C›T2žÆĻû?6›Íŋũ#“Lô9Š€*Ũ ĶÛ|ˆāŪšķößąÅÜāŖ* *NƒLMŅŌm‘›¯ûd…Ŋĸ‚W]j@à HBĀî•īNådsŖÉžų5l•ēļŽWŠ-UēAv–dl‡É´2fšˇūÃß× kĖN#ėqR˛:˕ĀŦao¤:ųõ~­Ŋ(QŒĮ‘_PĨyvb™ģîŨˆŪ˘cŽ>n˛ũŊûģGPqy&'x›Š’Ũōfū.[!y6×$rNķ=AFëá(ĒŦē?ķ˜ģC‰j˙ÚúP7žhžŖ^—AöFdC¤æ†múÚŠöØ57Nšī)˛}8~“§Å^đôî–ŪzÔ‚ÂØäēa÷Ņ|Gî$˜ŦûŠHŒZ¸ĮÃŽ ˇĸ5'–'-_QDȐâ$dä%Ԏ˛´A1Ü"T:"“;ŲčĻr÷ǟmÆOI†ŒíÔhÂĀxC ˆŊtHVņ{&I1ö……ÂxI ŗ5öņ˛–EMEE™l(3Ųpō.ˆ(ē¸čŧÅŗēāÃtĖĸĸBŋiú&ŲTÆĸš÷ZšuŽÎĩáĒs&'éč™{“ =Ld•ģ…îSqü>Ķ3{uŠÚATTh•NČ|4RUL…2ũ uš˙đ@ë/I 5ËšE×TD&Õë˜#Ũ›Ų‚ĀVJ~x;7æûĻlûHãŽĢtD&ø§ZÛŧ5ģĨæ°ÅuĮíŒs˙nĐüÂØ(2Í"e>¯6o†F5ņÁc5—Úé¯oEhzZëãÆF õ^´“Ļ“}g"›Ąųn’Įj6ÚÎŖđ=ü2}T7N6ŒíĨ2$ZÚôšĮ=1øÂŽc=ĢĄi@oÖučÆÉ„}´—ŽČ´¯ũØÚYĮ‡ōŽûôy˙ōvČė[ļ–S7N&jIáDČöžJ6Š€ÛQv,dbkĐyßĨģAdīSī<°š4­zQc#äY 7įī|eëOßßÍdģŅ„c0ҍ¨%B@€ŒâwK\Cwũ˛Åq'ÆNûÛ)•v$ÚōĒĨ'ņ% ŠÜ dŪ&‘E>Æ>4)_)ä0ĪąK÷ž˙¤RÚq2mĸŅĄw*IJČČŗ¯ös jĒ@φ°ęQž”ÍŠũ–ؘ~ߋ@E-bĒÜ™/tĄĐ§Ö4ÄįŽĢ\ũ~}š:īŨ~HéĢŧŨęÆ9”ČLbR#i˛IŜÂuĩíÔŖ‰8fųųoĘŨxšJÜAc™“üÅ´YK3'6æȄsûšÄ¨+ŽPyŧ2hąA™sI“št—ĩ™*ĖQMUĩlČíaĖW›A€L,ûsOĖd‹€ú1%ãĄ#×yŒŪîMŖh2‘ī™ÍŲŊŒUPËU< š˙ņ‰H‘–/%“UėoĖdKͤ#0TH„,6ÁŖÉä‚Äš__i”âAÖđĢ=+ô^ŲTYÍn^Ŋ3Ųü3˛ĖQ”ĻäYj Ic#9fAæĨÄ<ŪĢŖdCũ§‚L›Ņ§ĐĘȄ0æōËI7sīĸūc9ĸĝ¯'‘Kc#yšÅɸiáĘĻ€LYD Ä|64™P­ŧádˆŊiĶYĻ 'd¨ ú@€Œß ü&—¨"×ųŽ8Ąœŧ›ĘŌ:-_V“ vNæũĘm2ĩđŋ'H[Ž9;z˛“ sŲ•íËÚrŅVÃÆM%Nt;ßEĄBZšŒ×“Ī˙°ļ>oŖŒ -ĐČL!“ÆÆFŨ$Č@‡cl˙kÕ[Aųú*;OØKcCįˇü¸CᜃCßĐdæ>PĒ'INĐU&™ģĀÉø p3ũhßūS"ĩŅ'Ôp"TbƒČTę *J=EƧOįvÖlģŋ¸ cķ}#ؐL‰ ŌÆ"ë4ī9ˇü3Ŧizđ’ 3H“qÆb}šÜsßũúÍo„ķ?Øˇ€’vÉD*օ‘âÉ܋t2?`õ´?܆zL>*pBË”@#^ äŦ0%YČšo˛$˜ĶmÜyÛāՁŒBīÚŊ8îĄ&—0ŋ4YÅ"­é/×POÛūŨʓi‹Dģ**;(´BFļg7)2ŪÆY/āĩKõ´tƒˇ 6tHYNŒA ´P×Ų2΋æHˇ;ôļÚ LOūËŒÂŗ¸ĢĒ™”P×)x<Y`íŊf˛åFá…Ŧ7¯Ķ&[¨ë”Lh ˛Û–&ęÍŪē˙‰÷ęKŒÔJŠ^…ÚESēB•&+ínKÉŪwŅĐÚ§ŧŖh! šO™Ī3NFÍ}DaÔ~ĩŌŗēøį#‹rßܜVįÜĢĶö§wŽųSë´ũīČĸ\MF¯6äÁ Cé6ĻāzŠšEÃxX>‘ÕäGą}+ÄvqT“,}+ŧ÷Bî02n)2ĻŊX1øĸ=šī¨)õų!=×$Ī„ß4Ÿ,˛ũü—i|žŽÉAĖĶĶķ9 #@E“rČj@Æŋ;ģÜŅŋ Ã˙ôŒŠę=§g¤ØŠ“’qĶ1žgŦh=æ>>üY]Ņä$BPœd˞<Â?ãFxš‰fˇ…×§%ȍZEÆĀÁ;˙ŊjŧŋĒv¯•-”mܨUõŒõ`ØGŅy2cY“VrŨ}hY4ΏQĢō ÂLéų!æĘ?ãŸf{CwŪĩO=+[gdĩž•åu˜€ōéŸr>ĖĻ+š\Zģ#šܨ ļÆ^“1MæKÄWš f;î­+š!ÛiĩæF­*MšMŒĖų†F–šp˙håŌĄÜ1YMīQyf.-ņyí+*鍈åEĒĸ '4Ŧ2 IDATą^9ƒĖåŲÎēÕKK?Ô:Ũ†įŌiûœ“Éņ ˙$›ĀŠ’á¤@¯\NĐŪđvĨ¸e÷ “Uô–8ŲžüđEįR%…yžũ.KXI49Œė[„=ŠČčUļšúuwž םĮ/ųŌ'Ŧo¯;vÁ iĘ>3ĮYēĶŧ[Ÿø“RŠKQëu°Ŋƒ¨$ceMēgÎũė]R˜›ŅɋÆûLڊĸâųw^IFĨ¯Ã‹€M:ãƒd}Äɔõ(ƃ|=aŌ5NV“‹”ĖĩĶųŦšo$Ũ”æöŖ[ą–I6AæËčl2—˙O—*DĮiÛqī\ˇd˛%üƒ| 02ĻŗĨF7÷g=N; wõqa§ŽĢķō1NRņß ß-ČW–Ų^“Ņj{?ÕÖļ:üGĶO6ÕVjÚKZd 'õ ™‘1 LåŲž\¤å~;e[ģ[*>tŸ7ˇfAN&Ę/øž}ŲĶ*Ī,˛íŦŸļ‹Đ8r›Dš™ÉÆ)š'ĢÖŅØÆ—Û.yÆ:MŨN +CHē¨™|fļRŦ4Ųėãn×xü÷Ļ“Ŗlv;å`ĐI- >Ŧ‹"ķĖÚj´ŠfŨw÷xŠęD˛ ™Ģ-ĨoŸČUWpŦQc˛År¤Ú‚íæPpCC˜‹a2 C¤;åsǚ€°}•J“-Ĩi‘ ŸĢūüÍŲZ|=ÕĸP ˇĒž)RŅzĄ+)ëÖŠŌ$ׄŸĮ`ÔoįæÔōē ~ļ`į=ĄÎÜ.ōfˇN’QlJöh"ÛÜÎMsŪ>#TŽ­ö2SÂá?=D6-jÚNo§vŋš™ÉæTCåÚéžR*Ä2,a;zŗÃ#ko†Zũče==5]!ŖƒPięÞÖ-šF’˙ôomv8ŖdápHyxévYī´ėČBšŠŽīPÛG:“ķŸžĻŦ"#uŽüŒ›e9ä2ŪIĮMûŦjžŊŲÉÉ'ē…¨õúōR˛Qb dK‘,ē“Ž*mÚæë_ÛC~Ŋ“š70;œ12ꐸmŋß_ȁ^ņnÜLq×~íÛ5ũrßW }0Ų’ÆÄöíąî—…šn[:ĸ3ܰk7ŋZ‹Qč'ŅMw?N’<#5ã8eÔߟ­,×dO§ŊēM[ŸŅ8E79âņŨ­DÔ<š´ÍæÛĶŖsīi¨v>ĸ§ãņļŋévd>lhœĪ)M6HØUdD<ߍét_™Mė)õANYútlš#Ų–NŧrÍ)ŦÚ|˛ŗ&#Ĩq;VŽvū´ÎÜcHC;ČžŧEĮƯ$Âņ=Š":1.!fb˛ųUġn(ēÍķϚî^FoI˙p´aųp|“ŧŽPķŧÚšæev…eiŌ•5ážQĘ~ëŋ>ד‹ûŌIŋdŖOņLvú I_hNî÷ãšZšl)MRˇŲčÜrūģK,ÍīQ˙1ͅÃūƒūG}ķ5ĸ„DĪN,Pq7Õ)˛å›ĀtũEĸ?ŋˇMröĮƒle“rŗÄo7™DđŗĪ) WOŒšD‘<dM=Žŗąút {AÉÎ ]Îĕ8WOŽÍNēŦgtLĀ?ĶÉ6ÕüŌŗĄ5Ô˛ũ W>Ī{—į-ۄō ļų°0Í&[žŖŨĨđĖøēÍ/ĖdsŊÉ>ŧSĶ8-ۄR”ßž‘-ą›ß8ˆä!3ĸ}k.gĪž÷OĘÕĻÛR2žEėĩēüb2Œ6YĪHž‘w+Oģ ˛–3ƒąvÔĶ›-3.К‡‘U€ŒĘy™gėĶņ]ÜÄ܍'Ûĸi™qÆÕĄ'^.Y8ŧíũ,ĶŌāî‡âØ˙ļžß¤dÂĩ˙ZAjĖ<ô2wKņyęÛˇwķzo˜ĪRîA‰Č¨ &ČđÆķŲÅø¯Æ?lدW'°aĶ6œû¸”ŦYá,˛šTæ†3ëĻGŲWęYM~pąÁՓãü9!Ŗyn›ëîņÜ4ĮũyÆŌU~ė<Ī88˙õXüMŅ< Íų0ũ^RnĪ3ŲsEÆdēŊW.&Ŗ"'‹lnoĶīeđi¨?î-*˙$/#ãŠĶĩCšíÅyv ŋ—nĮãs˙GČŠˇ˙MžgŋÄČū."cc!˛Ę&›ū žđvĒ?byö’ūŠĶ囨É# ŲÎîád.Ŧģ,˛šÖ71S›šÚÕ!ÜķäīhĨo*zɑŅKkbŲ6ÔWœöíąŌ`I'â)Ė —?gp.AæEā‚3ūiÜõöĪî„?˙BÆæN>eßQÅí!MVK2¯j—“cu+­ŋVA2á‘ö>ũą–l:Ië¯'[ (l9ÜÕmjH&ƒrâũļ™ŲÉęŲxb؁Ē7čČWˆ›ˇX6 &‹ä­ŋ>×bģ=ÎíÜP˛ß‡Ô¨‚BUš†fL„Ė× ×ŽģNĀĐeō&Ŋūĩ'=í/Đ_Ėfrę†ŌäåYxCiv3Ճf÷d¯6›ŋj ĩoŅ_Ŧ¤ÎŗZ\ š%čŲ°ož\ >[N~~×­ũ͆Čx~‡][â§ûÚæ•&"›ģ'įˇ÷tãöåƒ#lK67jY•"ĢÅĨđD¨ÍtîôÎĐHC*ËwPn÷ˆėŽmü‚Î$ŖyČæ€q˜ę‘—fÍč¯w$_÷`áŪü>ušGÔA ›íĄę¯˙ķjŋqÍĢđėšÚYk“…ē2GũhĖP§T>™Fūį‘đæ=Mv2 n]ŒlČÂKiW;˛÷ŨxАkíÉnn;[…’Uá8’gîĻ“ ˜E‡# ‹ŠNh]žÂ’áaÎHžyH˛6cĸXĻx–ģˆmĄ­žsõ„ɈWHnŸåæl -dtQQ̚į§ũ™šņą=ĐEĄR7Mé‘Ė[Ëx˛9ˇNõ(Q2–M`§f6„ÆíŨÅßŪČŗY|‘<ķbƒäŅãgœtšĪL…ų‘KYA˛9nnŋ{.uÍ3wH6û­úyÚi¨pŗXÖ÷šÍÄNÃyĻ81‘%ĢÉĻžŦÖG‹<_a iÕßu呑T<Ųž'Äēã˛˙Ķ"ĖÜ`!"ķScd~…ÜP2Õ|&‡sĶŠŅžn–‹nŪúŸģ;ôBDj-ō.Š' iæå ›”ĶXsŽË9ĩLīÛFĩ8ˇÖV“ų&Îų´ˇšŅ[l3û’AËK‘‘vœž'åÔÜ˙wģŽî%ˆĒhLq22Wŋ֓…sˇ Ųy×Lwƒ ¯>gĀæÁXˉ’I8ŊōĮ÷ũŠšÛ Ø]mdÍT:$# “í8ØyrŠĀ÷Ŋs˙ õũšONļ Ļ‘Ø ' 8…d>ķ–FĮˇ§ôĀNßj#JFƚƒ/Å,2RšžĖŋč"ÂOžŅw…eŖ`rŸ …x˛ĐĀ!ŲLNõÅâɖ×?ų%`kžZņßļÃl.YˇLõj2Ÿy~ëh÷<w— ՞ހ' æv™1í˛%JôņŽĄĸŊâ'˜ģĶ‘s‘õ&™pšŪÍ]}sx ‡wøo6{ŗ§d•ē×3AJAŽŧxe‰?-+%㸟ęS…dKGÖËüÉīķ–ŸĻŌuŲVÜäÉü$CMŗW+ØLDM¯ä’‘ŲU~“'{$ĸ‡SŊüqš,ČL6Õ€¯V4úŨKPĶė•R§’‚O°¸ˆ Éŧėî¤øđŦ°i*ëņČBi2ˇ ^äķuŅk!ˇņŽ€#;Áë%dųÜ4ÃÜԓųû2$ R.B„OÖđw‹AB>F÷8°ÉœV:ÃëėÎ ™įČv€ąÕ(IĪwj÷в˙ĀģušdwŲdsŒĐųfšsOŅn #ĶŽÛ˜lŧ¯da'NfŠŗ˜ŖœėÉ!#yæ•Üs~|qv÷2řÔõįī‡cÖ­îîl|ˆä™ģ`\oɝč{W>4ũE1#îî$R3Ī •{Ž“ņÔy°•XÛČ%ËĪŗĪØixIĶ;1™ŋ×3‹ĖW>Ž´b˛L˛ ķL§!ĩæ‡Đuib˛IjTėgŒ,"h…éÆžz˛'ūžfAžņ]€Lģ‘=,“cd.ÛIqÛmŗō?}dړ¤Š’cĩĶMx§ōLčMƇØ#*@*ō>(É3R%dā#Ŗ$đ†û˜|kĒĻw9˛ęNƅŽĻ|ž%Ȟr2åãÅÉĐ÷é ķëŧšyö dė*Š’ ĨǤFŒė@“‹)'YÖDĀĀ/ВTWæ‹5Nf9*ņ’ôÉuyÆÉö1˛ŪR˜,䔩ˆ„ŋ“EÕϐvtĸœŗ“´—øģ1Įõ¨rÂ"yf–&ŌakŸ2Ļ8Oŋ'ëW–ϝël¸)ǜ$Ų>'ČėŌô‰'ČĀלY`Րļc8ŖR”gáČĮËV%ČĖ]nyF™•g”lČĸjS*øáJœ<ƒd 5k\Û__I–QĪ™ŸGĸuįeÕG÷Š&7Ŗšž,I‹Čôā8œ§^AĻy`ž 2?%ÂČhĘ 0ÍMÉ萋/ō„¤dūømXˆ†‰×,Í3ã Åü6€ÃČ‘AŠ1’5>B@Fåē5‚`XN°™;MëŲ”g€Lûmôđ;ö2R{dfžĄŌ|ĒØcF`Ŋ™|˛ĸ<ķ@´Á'ɘö"ęŸÎ#įļM+ĪîÔAߤ^'dt8¸’däYXˆL†V†;ã%:ĀŽgžŒî¤Ÿî]"Āáõۘ!Αgž ėˆMę€ū@Ž ÖŠļķ›KŖ(Īd ķLÍ –zū›ŌčKą9ŲŪåY˛ží1™ƒ ÂSŧ@†“ņƒ=yÛfSB–0eG’Ą™dA‡ÜclP3Iv6~ UtŠŌ´ōėÉę(YIžu+Éöø%õ j'#Ī™ŋ6Ĩ=Oą.ŠAV’g12j@ßëÅ’ŒP2´ō0%Ī&2˙œ¯a÷]sĮFųPāƒ‹„Ŧ÷¤Jŗfy'‹Î h˛žGĨŲ!˛=}ÎË#H–T›6YîIHņž\2f}a2r7^­Gō,œÃ- ĻQx2¸˙tR9q2ō­ÖLĩM#Ī|Ŧp ąXˇŽAdŸ"2ģ˛š\wį’‚–“%ōŒĖÃå"ŖÉf}'KÉŗ$ŲŪßÚ¤ÉxˇŽ‘ķÎq›\.i›(Īâ(€l‡ŅG"KJ3 mīũ­Šņ–1°ĩa„Ŧ"§kuš$ĪYbe ÆĀÆCæŲ^¨-$a`Â8›,#ĪÂŋŖ@KîĘÉzÔRyVeįYRŸK2RéV”æX7Á¨™Ī*ąíې í <īĨų däĮÅyV"z˛đPb:l lȅŦ4!ŲįUÉĨyf¤šCļ…‡ŲĨY?( Âd_@žĨMZAF d.ĩŒ<‹ļMûEdU&Y' â5Ãp´ÉÃ˃•fÜķ‘‘Љō,œÃöYEMÂXž“–īÁ"dkķ,Ėß僞!ŗōŒ’šxyf‘Šr×ë˙ƝRdy–´ļ ˛ũr€ōĖH[šŒŒd rŦĘ(Í`qÆōĖcŧö‹LķÉVÖ3DļˇÉúwŨg.5Bžƒ‡_`žõ‡r˛xžUá*×ydÁÚtK†}CĮzWšaÔīļœ,^šU¸ēĻ4Ã/Ûî›"LF :Dæåö(ī;‹ÅȚĘEՐ(YŽÔĀd+ōė\ųUϊ˚#dž ¤ōŦ*ÎŗãŪuĖ4™•gäĐ+ۇ/ÍŖ_/ė?*2#ĪrÉÆŗydîā‘_ũ•OFKČBžy-##+ą•ad•& ë-`ĒĖūžX¯ÎSS5AFpˆŅžEyĻ3Ο"V÷JÖa˛Pš{ym¸û#w.Nö˛‘ņŌĖĘŗĘ“éN‹UĪ(™;Č(M@É3¸™­ –}†Úf"Ī&^Ÿ@ ÛË´JÃ=øÚ7 +ĪČųė<ĢKɨą7á[ÚRC{`õŦbd (éĩ]^´0üÔCB‘ÁŨėDžéŸĄK! {(˛zFĒ}”,'ΞČüW^dŌz–MV—’ŅÁ÷9‹ˆ‡‰e!2˙ܝ3™gēžQ˛9WČâKÄë$ãR#+ĪHÚ/ĻæI<ō,yFČüv­Š<Ģ1Y-|ĸ|™íčĮGæ2Z€—LŠ<Īú>—žÔ‰×ŗCGęCĒŖ2Z€ĪŗŲtV¯Yyæ"gîŌ}{ķ:|•Qšūp%Ų^øD§Š”îÉôčy˙‡—UYvžU˜L„<YG‡¯f7‘Ŋû]ņ–gzÂU×ŗ‰ė´Čšũųæø‹ū{œör˛Jms\=<؁ė–mk9˛n%Y-¸Ū4ÉpÛĖ&¯‡<Ë!;ôwˇũëãîŧyĶîĶzf-]ˆ“í!Y É€Īž'ÛėOC7ŽäÅ~(ũÛŋBÛ#%ŖĢ=‰vˇ“õ‘v›fĶvĒ=U ŋ>\G–UšÁ€vU#FvŪlĩūņŠÚíNėØĀ<–f4ĪāWGfŪ2˛fs͟ęOu;’ņU€Öâ5Ĩ9^§ÉN“u›í`Ũd•Ļbŋ LÎË3Mæ’#ōc/ŽŨܞ÷ŨWÄWmV’mŗbd.yāˇÍ œv3Kĩ()ZBöŠŲČŗĒGÆ~Ëŗ)†ņ†G’ŦËČ3×.RdSĘZ9‚õœŦŸûņš<Ë%k9™2Ō-˛%üˆ˙äDj 2ŸhVžŠ4]ĻA–&##yĻ:ŗČ€ĶŪįŲj2a„Œ O‘‘<{Ŧ–‚ĖËëБ%\Nv`ˆO"–“%™ŋ”&c]§Ž”&Z‘^#FFR]đYȘYë ĐŌDë‹V“éŠ fäÃĀĄBļ´¯´–,1UGČhK‘…œw-_W¯‡ÉŗR˛P‡™žH“m­_`B,—,<ęzÖkĻ*8‘Ė`r§œĖŠĨd\u˜ Ė/d[AæÔ’¨ũ×M&ķˉXM–œŪáļĨAæ˜iVd!?\ôūE‚ Íķ2*Â#d.B=¸vį†cC8ŅŽ$~$ȍ͇& ŠŪ 2=Âa.đ0Y8L’ũ@ĻzˇšŒ+VēC_œŒ hBöXĻēt}ųęm™dáv4šCĘ>JF^đ^p€a%#p…Nn‡yVNļˆ6=žšåŨ>ŧmh¨}™d¤ēžÖ’ukÉÂÕ<2w,üĀA A„&w˛ÉÂUEæRÃTb¸ô¯€Ŋ‰˜k˜’g$ÕĨô ™ČS"wãyf‘=–W™;͏ƒ™hģ„ n ™KjīŌĐŪîŠÁ Ąņ‰F€3PĄ4ëpg”Ŧd ˇžEFlhJæ“õlQôŠL{!§ČņŸŲdŦåDÉ*A–;ä"úŖdXã"˛jģ–L\&VœMņyZJöœOtŌˇæO4QņdšÃr´‹Éî`j|i']Š;š Ûc˛Į °ĨįĪøĒ'“j5EæãˇČž&É2ũŧÄrTJĐĄ–Í"h2’+ÉÄUZ¸hĸb ™ėpú(âFm„ė:|˛LŸ%ĄŒŒŧņcq&,'Ēcdˇü'ũž"yí@æĨA>™ėÖe’ AKoFĶ$ĪčcYdûåˇͨ&­ŪRBúÔę5ēā UØÁƒ=LČÜz$ ėš…ŋņԁœ¤j’ôœ ė…-4ôeZڙÃg`¯¤4™ė´?âCÖÆČĒrāPzoLéĘȂ´L‘Eē(lrKŨéÖā˙%ņ ( s•Mët›'4ĸáĮiy6Ø ‡‚ōÉĀęqč3t›ĒׁŋČË1ä*¤bd[ŽC`Ąīå雜l‚Līĸ?—cČ3îČĀP0ˇu8Ā>(#C^Ž9dî"šN{ķ$üØ…É;Yp(¨€LĻG¯}¸ÖņŌ;!™!:Ļē+[Fé°–v ÅŲm°•KM üĩK'¤bdwâoīߨgS §›>ü|† “ījWĄCOÆ\ŲS}‡4ˇ™Ül6u7=”96ŋ–L›ÛÆĸŌOö“ÍÆčL҇>^%d¤&Js›O86a>øtŗÁõŸ÷KĄŋRũ˜d.¯"ŪYŠđgž_`ƀZSa2jˇ¯#ÛĪQēøÅ„Ķa@úĮŸūíá_Ü0YoĢ3VĖ{26ÄČ^Č[ĩš-æ.Į-V§đ†ÆÅ ėĸ‘‘§jA&ęųa!ĢŗČđęo_DEdŌÜVNīO`ö¤"S›DS!2ęĖÉÜ-ÚÜVļŨlž´W' ī/‚ŗ6™ģ;fn§—íđĀŪ„ˆ#´*—į<"Ŗbg!ķy™ ƒ•>y-=ŋ›EV)2_9s>ŋLŸ7 B#DČöŠL™Û9{¸đšEF Ö噸z"‹ÍD&éPāƒĻD䔑éoTųŌÎüņTā#FD`’ÕËAÄÜÎXŋOÃąĻŋHŧ O\Hv+ÉĢ"đÁ!ōl™—‘Ž@Ö×gqôė­™đC‡d‘Ž@Æęeøč(}+bņ¸Ô ɤš]FÖ2AKë(pv‰ų‚ŽŒģgŦw%ásfšdlŅFÁ4ˆøč L`’4pv$A˛HG LĨÂȨķžLQ2O¤#PĻŌ?ŠČįTįg—B2šâ#kËDø8ú3Læ#dūžČ¸{™Jį7?I‘üXGäsŲûėf’ŨhīIąö’‘ų¯ũ)ÕČŲ.Ë^)IÃBãĨdËs9~7:Ü[ŋKIŒĖK–@ĻĖí"•Îû€Ô-¤Eô„ ~7%d\•a2Ÿ}|`Ī Ģü)÷F>Ö¨[¨b>üĨ%ķö!“ævÔ-T„˙ŗb?)Ų>wĸúŖģIDATÕdŪîÕr0ÔŪ•ÎmmëCIsģDĨķî s]"î&>L‹É†Ŧ@qō[-˛ũr‡9™Ō¤F(Ŗļ@qōA5æēDŽlßgáÃ? ¨!cdhŒMĩų}á‡$sĪÆ:M•K&<žh5@d|`“ĄĘ¨LĮüž°pÅĄRŊd‘ŨĢČōՓ˜i§âŊÄČŧĐŖ]ûųRåĪḑ˙y‡}ZYd´,d!§˛Õ“É”L71ĩß'Ģ–Ú¨§?zĮļdÎs4¯Ņz”R2gԆxsՓđ’cõ“߁sŠŦĩĶRvS'sųŠ&W=Ŋ_ŗŸLÚ ĩôē$_ŽĐ;-e÷ž„ãU›ho#1|–&SŌšęIē‰22B‘Gæîĸe:6" #H?išÕ¨ģ'ķF䮅6ØZ™ęéĨ¨ŅĖĄĸ.%ģwmeęęé™H)IV÷,p2?˜Ģk(ņĖÍSOŌ­• ÔŠ“ģ+s2Ô¸“d™ęIhMĻ:h%ĖëK=rOšV–PŽŨô7$Û÷,p2dnk2™0(¯VúuęâdŪžÔV u?qĀ =­ØxęÔÉ}ėĶdK>Ō=q¤äMLÖ ŽS‚Ė]ÕF-Ũ‡&béÔĘ*'Cæö iŽĐ1Zĩ„áYM~č`éŗĒČÜãúQ"ÅršÔM1;@ëĢá3Aæ x)‚c9´ Ā+f;éʒ$ĢNō‘dB†ØP‹+Ø3ڏ,› ė…Dš+^OÁAÄ-ŧŪĄŽ“¤d2—CÚy W ×đ°z‡ēNq2đq;Ÿ¤nč…`2(×iŪj. ‹8)Y¸jŊV’ŊŒkZCæâ¤3 IąĄWđlF]'1$É\6— Ē-“vĐFž`‚–Ļž`3ÉĀü#•);¨Q €uk€1Ÿ$kH-Õk)ąqRÅͤ5}áŦ [i¯,%6´×/L†db(H’!§ö…Œ MĢ”YūøŦüéϘšd/ԁŪŋ‡Ki8iÅʐāvšd¤%:2ŌÔvX)ĀÎĐ sÉNęĀ͞ĩøQkŦááDȸ—Ŗ"C›–ēx¨Ŧ˰H$š[xU“ ĩ;’O’šõūŦ@¸÷–`AVÃČH%é$ČÂW4­ÄzV-đûåãGTg“šIöģs´áŖ…šžTBķ+$Ą™V=‚ }'Æ‘Ņ ´¸Õ…#h¸|֎4CO&‡‚™ģNģJ5ˆŨ&ƒkx8]—K†ž,ĸ>Ž5%U[dpu/āËČBŽmøa6¸ ‹WKōŦT}L’§võĄ§1˜M.•ä‚–f )2¸eŖ^×ŅGT˜ÜĸĨdÁét ŲrŽŠčÆb…Žáų}ö(…dûYpWᏆA+o{k Ûo°dáövęc‹&ŠUŽŒą ÕĘ}˙ /Čâj–BÜĄ“ ŨšœãÕ­đ×°ĄŦryYČŨZãâβŽ÷hh#÷e”OFj•ĢĨ|b)Ą3^+# M:ļ˛E'!rjw2Gŧ9¸ W’ŅŪ¸“$™Š(N×LųÄfĢõãÉX^$:4ÔĢĐ?Ā—/˛ ,ļ朘Ø<ČÖiŽ”ŗ{Ä drX#B§Ëh1ąŠD×ÁZ‘%æ`Šī^•M†\ĮŨ9AÖ qļ˛Lē_ķlY¨UŽ0¤ÃęaķMōĢÛ Ãl ¯D[^…rđ@‘ą^Ô=.'6› iНæJɈ{Ä*˛Pã,˛!ĶnÂíö‚D!4hĮ5´$Y°Č_w:Ęų–°:¸1WŊĒÁS6@âI“ųĮôˇhĩGĐa@{2|ž1ĢŋÔ ‰ČÁƒđžŌ~7Ķę͟ų'˙IlqМÛcÃ]ū(IėÍĀč =ÔøÚ-ĮĩÚåÄÄÕŨ%d;pôååøŨ´ XlpH´YĒ!ƒPBZÕ@ÖIÅCŌ™ĀbCĘRhP%Ū5MļGŽ~áÉā˙ëđÆSÀTڇš›& å­É —H:˛Š˙Ļō!8Ē‹›Ų8ēß/iÔ+ĀÔp3ô*Ė ot¯Ž —H.AŽnŅņ…d… ™ø Éô÷ÃYā9ŠŖ’U >ČĻIs‡lۚ& -‡8DģŖ5drœV‰•dAVû6Y´ŅE#ĒmFR h2müŖĸå~.š˙Ļĸ‡hé4114™čŖd9{Fã /_DVŠŖÂüSM“éĪ*2˛kf¨žĀ›5;HœÖüet‹Ŧö‡Zš¯PjÃZڊ´`Ę# ÚûŒVÅdŌ“IžĀŖ:ušŒ–đvŪįĩ\ Hg&­CÉæ…˜‚ĸō>ŖåĸV6MörÁHÎ #ĘŦž*'SŨƚüuPuYx§đžąhÍ÷ÔV™Œ,ŧhYhÉžĻ+5¯Íœ¤ÃÅŌdÄė ‘x [Ŧ”ˇÔiÕudá=ˆJß˃ܠÜphŽ“’Í! ÷ŨᎲœ/IĐŗĖ9iq¤ÉÂŖDĨ; Â?Ā^ą´Ū‘Č! ­„¨tīcUHv– €IDb 䐅Š€úëkqĮpŦÄ –éĄ5čJ&Y(ƒBĻFáY—5$˛&#z"äŧĪĒ2ĻĢkܨJį‘…fęŗĒL i˙!ĻFɌxI›ôŌũUE$č9m–įDt搑ü}ĪĻ*!ĶÃ}´Ą:ËÉÜÉ"Ļå,Ô[%‡Œ.QđGžIYhzv–oīČĀwÍŖdhqp‰@;¨ ņˆ”ôÚLļ—,hzN‘‰3āI–K†gx“ûĮŖ yßÅɀ¯RO ą@lœtÉŗ‘^BĻMZDVųC’}>‘;ŒÄŗ!"Û˛Čđ–Āžzå‹ äĀZ6О`)ú4!ķÅ`|ÔP˜üĩ´Ÿs6ąŪGž@á9¤€ ÅČ´ctO[xÔ-4„Ž~Ü鉐ƒ*’MæãĖlœŸ&Ũ[XĄcdhaMßT>öŧ&đ}P˜Â¯ÜG‰LZD†#‘ÔßI‚ás4­Čl ´3Oœ -āĸųąĢ}—ĀIöR`Ņ{‚Œˆfōph=yMš; īmBVg‘ĄÅ•ôuU…ĪŅT,¯č$ĐX&"ÛŖ'‚ĀÎj/ĄģcE‘æ Į)˙OVPNCSĖ5ũE”.d`kžÕŠ -­x=“›ĀpL‘zO^kô?fičp†ŽhÜę$Íõ\DKbėĢ…_0ĀÂäBƒ6`8ĻČBŽ7álsÛwOĸ`GčŊÁgí(ęų2úHČjĀlâĨųú#ėŧÄgíhÃ1E‡_úõîásėžÁGFĪYĮȌĒI*Éégãdΰ+īÜP2`8Ž#Ķ úD¤øēíU‹˛‘QA§ņFܓúą7ĩ„°ĶФ@÷'ČH–SÛĘp'wqfyՒöĮX\ôÃ8X8GŌ1ŧ„Ä„:%ĢĘÉčPBM‰§Q˙eO•”L6ôîō¸•-S8*ĻēIŲ"ķ ’‘ēIl=ÖW<ÚÅix•K1jE"#’A_tn6SØ^år|ËØw2AFn$ĩÅ|°LĄÆ*h1&ˆ=DdôˆŪ`x˛ŽV–‰뇙"#‘vĘ/ÚÍæį{ZĶãąŠĖD”$#¯ÃÛÖû›ÍßΚY&ûöÉå툌VÜśžDåųŌ'Â}“63dj@2*øpGjē˛ŲüÜ{ōɈ_­ČZˇ ‹$à Zv¤Ú#:âž*ĮŨ¨ Ģ&lü”ŦdjŊėfà ĩw#Y&ŸĻųE3$ŖŠ#$ĨFG˙ã/…ŸG]‘›Š˙Ļj3Ÿ,<õœĄŌH?ĨŪĮ Wdé FŪĄ€,ԁ1ķ_Ũ؍ߜúŪGũ?ųoMNŌ6˜œG ÛŊŦV}@ßí¨īôŸžCX`‚Čđ×åYhŅ˛Ž ˆĄ `*ÂĨfŌ’jĶ ķˇ~Ę:€ĖįÚ Ōä6Q—č7 Čč­É-oēCj}¤NRĄc2CĨ—ē‘Đ 'Ԍ—'!IF^(gw1+H‰C…H™U= ŨHhŒōҤÚÄdl­Ô>ûÅų ö‹ĸ}:\˜ Ž/+˙ˆXĘ ŧd -6fŦÕk¨Æ ü0“jĶ Ŗ+,iÉV븀ĘÅF ˜ĖsHlÆcÕX}Šā3I2övkÉT`›íá3˜ŒļiōēņÍx"A6f\ô˜Ėč įÎēĒ UÁ†{–AF¤BŦĀY#ž ME˜ĖPœkÅ†ŽŸ´Å-˜ĖčqŽĀAŽ‘=ΌM aĐ/”ėĶ™d†â\ĩ UĪ´ °æŨ ř9SLä5EUæCs°D´î>e=!šĄ,2¸5AŋRlčڙî9™dp;‡~ĨØĐ €™ĻF”™eØ­jœ:ŖĪɰ`ŠsN×Ļ0mī–9jYŠsN~aôÅ-kƒŒZ&ėŅԀ `’Õá˜ŲŅ öpP}^žVũ0ČLûÉŪ]Ė āeh>]@Æ?×}ųZ,Ncvü 2Sj˙T@.1éūI{6ĶÍ1āFÄzĩņœ•™ßjS*€АSæ *‹Œš)ÜkL' īŅ °É¨cĨ´Ī‰d3míæˆ„EF`ÚĨ‹ŽÆę€ŪȜ‹Ėß2§ŧŒˆ€T 4æâ{‹ĖÖšY΄>t¨‹š#hM2ĻžX䅲6áDc/‡ŗČlÛŽšy•Īw¤¤4öدEFû \ÆļYÕUŗĻÂĮ<˜ÉØīu0#Cņ×úŗhÁõåI낭tKĖ ¸ˇ"íL؋hM2S D÷ķá܏ōdķ`’Q™#|@ *ôwĄQÛkÍTč#BNĮŊĪhĀžMôEí]NL2šÍBˇÅŊĪØČšc=[8šd´jŠņJŧ™)ŒŊmP‘!“,˛)?Za‚§Ø­ŠHTvöÛd>CŽD{šæô=eĖ$˜dT=É7+™PøUė‰F"›œ˜dlë{šåOžÜ8áRgŋđŽ)ØiPƒ@ÔS¸?4ˆfíZÄļ Í#SRíMĢ^#Ām"ķ’6Ĩ‘¤œ§p2ÆÍiՈl'e“Ņę ģYÅid,į‹äŊMÆôî^\Ä+X°čŠĐˆmđ!Ûãã)œĶ=(ĢÄi\ąũ‡l2:„Ļėģvķ^kėš%EëlSŲDȍŽÁrįõÁh™|J!ļųŠMƔ€žŌJéNŖeŠ­?"Ød]Ô$°ŊS—',_4îd}1đ!9ÄŪyžU6ļ;^DÆeĩĩˇvßÍņZ˛˜YT1Ų!Ŗ/˛=æĄ÷īķ]ëŽyå{gŦ҉e×įQ¨ÛF%uÂbž˛ė‰)kšŅŠĸL2hŽXŌ4ļ]3ƒáŋÎ&ë’&Ė´Ą#v%Ŋ÷ˆõ5čƒpüĄĶ ¯Gˇōڌ’5͸GgŒ ī IÃAUõ˙xÍ26ŌũģÕZ˛t÷ë,ĒÔ딓4kšņIųmÔÆØā.”i“ģ•ķŘ 'c~78Ŋ–¸ŪŋLƒņĻw5’ÕÁZ’6Âü§ũë¯ož6ƒÅęŌ*øŅz2jo›ÛˇlXØGã ád#cĸÖ^-äąž’ās 7đĩļ&ņĢR\ũ§lr4áĖ–MĶž?ÜüĖŅ?IqBeO~%ļ.Žž¨ąÃáęĀ'áŖ–F‚ŒÖ­õūĮ!đšÎ„z”Œu§/Xļā›éNmÖ%Ŗų}ɲøghFÉXŨZŋlÁŗ°jÖTņģŖdLYŽ_ļāŸ°J}Ā!JÖTäĮZ˙ãø$_*ž(ß~´^ äwBI•A”Œ‰Ú‹Å†˜ãKÕÛ¸J𨑐.͒NÃq2šãų›ÅWŗ¤|Œ“1RėE%#Ģé¯äæõņä¸#á~Nĸš%õpœŒģëU+xBĶī }ž$ĢiԗiN1“nœBœŦŠČ 'ī§ũųãdüų‹§˜yL¯¸Lņ+Öš fĄŌ•6! Ų%S~˙8m"'ČX *vq$An;–Î˙˛ÕËęz=š—ž MņM+×7Y˜KmRd5ũĩvYž…ʐ ˛ĻĸŋÖ.Ģë;Y˜U6AÆÅÎjãņ,‡!3šy‚Œ×‡ÕúI}Ė:ÃnIŨÂJamPێåØz)2îŧŌDSâä¨āTZÜXY§Ÿ:5ΜS-Rd\‹ŦX…ŌŖmĮršRŠŒ ´uÆŖYËŅĀ)˛ĻbŋÖ4ΗzP9§ŋŸ"ãmÕâjŊíWV7,E&ÜŠÆ ŧ˛LƒdRüõVč'āŲ‘U]“dŧJŦ0Ņ€sSVO’q–šŲ6 hĻ1ĢN$oâ­\?Ąmī˛ÚQ’L ĀŽBé?Sęyļq’ŦŠØĪĸÅCø0 ›'¯“drq@Q_āŸ=GͰyf^’L.(’h¯ˆ&ķDO:!š8 ąŸ/ŋnû˜§HŌdBĮåģā÷öĘÜĸ M&†“ō]đ§,ĢõŲLŗ M&ękgû¯ČĐũt5Éü’sšLļņšˇŨÎI“Éņ¤cfqŽĩ ÖõLK*M&+ė9Wn ĩŦB§3ß,#™u.øũëwņüuîĐe™43åÆiƒ=įrûdr}čDĶĨ*ˇ˙•A&‡刓ņ”åí’ÛgÍ Sō'Ãŋ˙ÜÚ3ģ““AÖTâ„Ų Á/:=á- Æî3ČÔykīúäšģŊ8Û^ĪNŠÃܸzqŽy‡fû}䐊šaî\íBkû.e÷ sČtk:$Ŧ´÷m‡Úė^~™.€&îĪqÛΟŋÍ!fKØ(´S×Lā1äŲ䐁؆ŠôK‘HíXķ;ų9dH\ę?e§?šR,ŸÉŸģĘ2iPŨ°]-ŸÅ|äō=e˛ČPtgĢ4†1…‚҇,28įm¸ôūwQ?Ė‚Iĩ,2ØŠÁúėįĮX–}U1į&Üԏlđ9üaÂuĩ`ō6‹ ۝Ūūøœr-˜PČ"3lĒÚ:O~gĢË#ZOfŊęčIûÆ{îהaņ5Š%Ŗöyd'#Ŋ ægãÕc†?yŅLG™iÛö›‰xJf‡ōČl1tĻ`ĒŠŽK­äŪHÍũÜsŊņ<MÉøsæ[<ÚÛ×ūé_ČØ×} EĶV™d—;†ŽĄhž#“ė!ŧļ §G3ÉÂkģĐß#“ė÷–ĩ‘äļãKŨ/ĮP6–›âj÷ĘfásÉ.ņđZBĄOEîŨ+öq”Ą`oĻ1ä’=@(œÍÎá˛@á~‹Ų ^ŦJ]w˛oŋ¸ Vŗ|˛Kœ§PēKk6ŲÅËJ}Šō Ŋ“ãŠ=ÄōīŋP ”Ė>N!ŸėÂ&PļAe_BVîDÂڗ>}įeM kW&ōÉV>c å;;´˜âŨ|/{¸€lņÖ>”oė\Bv‰!ô0›a[a­7íŠeF™qŗ^ÖvÅ2ŖŒl7íJíŒ1”­77Ö4ž˛ ĖĨR¯xĻčæ}ycXÕvŠžYŅÂϰJŪ‘[2KXeĻ‘ÁŊƒsŲ¯y¨čîR˙Ë9ŦëĢ–‘•ų_^öTY–•õZžXg¤”vOW$˛˛v>UāéÃĘ]H–įGÅÚˇé‹ÉV kėŒ1”ÖkĪM;ŦÉæ1”’•§ŗ˛0‹Érw´váužÅ-:š•Še.č4ĄŌJ‹ŗŧb.Ą˜Ŧ-ļæf°ÉPž×9^Ž!¨•›ŲĄüÁķæōoŽ8ĻB9Y›žú ÁÜ 6Vdö1ŋęĐ‘ŖZ,ŦZ(—Ũ<#.rɰςseZÁ;谆,ļ/( Ø ?3ŦjÔĮŧF`Ŧ\Č ĢȆLû…}ōŽg)—xX'Oåų‰åSž֑ui–6Ŋ‡b<ŦTMÂijĖąRĢD„ĩjí}äJÂysaYŽ'ëbÕģĶ~veĖ.Ŧ6ÎŅM­Ŗ›Ôæ…õŖÂ-ĩIm^XOÖāšôęÕF{fŽ Œ¤?Sĩ˙|ÜĐ=íS˜.q)8Šöú?˙lv‘ģi—uÁ­÷ņ)|įĻūB7ŒvŖÃ—ūŅÀ]č Ō(°įƒÕ_ėēÂrí­OūüÃ@Máb§šãÃH/Âãí‹ W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōp%+W˛ōđo.Ų˙„‚8wÁßitIMEŌ( Ϟ IENDŽB`‚leptonica-1.86.0/prog/trans-2bpp-cmap.png000066400000000000000000000013701506303110300201400ustar00rootroot00000000000000‰PNG  IHDRRIĶS™P PLTEUUUĒĒĒ˙˙˙ÁbŅtRNS˙˙d˙˙¨ pHYsb&2‚IDAT8uÕŋoĶ@đQ–5ƒĘŌ.^ú'ÔŠ˛ā”^†t`)R坐Ü‚Ä’FmĨn5rīuč„T$„ÅŸĀĀĐ)ę@Qĩ>î—Û17Dō'/Īwß;;Ā*Æ%Të!)ŽžTZ‚bŒJ:ŽÔÉĀÛV…R̃xUÔ$ō:hĨRmˆV衙ׄ%ZC¤Åxō ;­‰kŨIs Ŋ’ŠRܓátĻ*Ōĸ ŠsY‰¸Œė|­¯ƒ %Ļ}}ŊčâĨĢđU6î§*gĀ“­9&Ļ9øĒøN´×ú[éj?‹ŠčŊP BK}I—ōÚB­*õŠ‘.Elgš < ye1ëdHJīú C;Ķ}Ĩ 1ö[b&yFVæĘJ,"ŠG˜ž¤w†ŧ†éI,W°;oå•ÚÔą1Ŧŋ™ęļ8ĸHmtž,Εņ@žv ų­vĄ¤ĮîĀÎé:ôƒ­•i}†đH´7ĩĒ•)ŋ¯}-h ÷ĮiŪ(MtŽâÃ}ĖŽ ęū4bĻRßV{Œ tŪtģlF ŸlYÃsķ!›Õo°<ĢÁíē?ĢÃkW>ü/ úūO•~ŧ\— š™q}ū˕ēœ)ômūė•nņ—Ŧ ŧ[I5ÜÜōčĘŪšĐ‹8Õha3žķÛ/ÄdīgķĨõÅĢÛØ¸ĮĄãOÕũŊūn<%l¤k+ŋÁ‰ÔK#ū˙@Ĩūåœ31×čßíIENDŽB`‚leptonica-1.86.0/prog/trans-4bpp-cmap.png000066400000000000000000000015431506303110300201440ustar00rootroot00000000000000‰PNG  IHDRRI\lđPLTE???ŋŋŋ˙˙˙w7AÖtRNS˙˙<øĨqÆ pHYsb&2ëIDATH‰Öv PĀ  €ā,ôN¸˙™hKCą:ŪŪ|Ûû&­Č˙â˙Ōé/ÃlōÆž–RŠÃpMÎqNyų‰yž?ČÃt–¨A\›œßË5=hYŋ€]<‰™ĢPh}Œq=•5čÄA§>ĮԈ”Ũ¤Ī3c NJœčw3͇€ušŅzôžIZ#ŒĶ•¤–%ä%2šĮ¤ÄsI>-„,ŗ´W.kIraG9°Ŧ†Eú7ro0Á#ŽōP m´Âmx#ãž÷!â ÷.ŗŠÉ1&ë`Ë`_û!dPaŸ&m&—‰ÃēÛåø€P…öræ§'äô˛öĀeI‚ÁāÔē¤ŧCxj‚`jIĻ•Ä+ŠČ Än¸K'ÃÛ~J^ŅžÛô}PĐ<&‡ØėōašÜ‚ŌŽ)™|ŋ–=8*‰ËTî;ÔԖ;؃ËnßS ÛBô!Ã[šn"ŗ1Ŋf§#i]”*­ņMÔKöuzč?ƚ]ĸkg× ĩĪã(ë%¤—ĸœ°7ģI?ČŔßÔÃ/E p’}2Û –õrâKv C“ĩb]‰72Պ֚ÍTĨ9“Ņ Đĩx…Ũ€ä˛ö‡ÖŌøP$č7¸ĮŒ­AŠŖ|‘a=—ĄĖzæ÷gwˆIRŧP!­oÎüVLb+šúÜK~ŠŅ.WŖF0e<‘AÂÚՅŽĸî qˇ'Yõ‰’,y–Ŋ“öūõq–\ÍĪdėešč.B-ˆÉRv­Q9,Īe˜¤¤Wz;Áí9uSJÔ-ŪéíŨJ-øC÷,;ĖO!.ųģD™Ÿë"}–ÔųĄáŪžHjŗŸ ŽMSŋ—! ŊgÚĸ=ĩ$Ŋˆ“4ōƒ B.}.ķKé]ĻËQNÆ.ŨvÉŋT“ŋ?GiŅ–‡)NˇüŽ-į æAJ@K˙ũŊeĐM¸ë„U]~Ūŗvō§Ė0ĐažŽ+OIÔTčcNRÃĩÜ%bčēīoŋ›Ėo^xûąŊŠæüMæ&˙9ū ũeXģIENDŽB`‚leptonica-1.86.0/prog/trans-8bpp-cmap.png000066400000000000000000000016571506303110300201560ustar00rootroot00000000000000‰PNG  IHDRRI™ãņPLTE???ŋŋŋ˙˙˙w7AÖtRNS˙˙PPŪX& pHYsb&26IDATX…ĩ˜‹v!Dö˙ŋš2žÔMRÛĶ“lvoFPžŸđHϝOHōžLôįfđ„ˆH<ЈņWnŠō0†§C )¯ÃÈ:&ër`žU6*eÎ| :čd¨!5úŽâ×|Ž’‘ođū%R/ĖĀI!=•ãsÎ5’‘—š҈%î?uŪ’šõĒQŦŒī‰C(K’ 1EÁDž%"~=ė€ŧͰ HžDŽ@­… O*ä…Äfšnāō Ԑ'mUd3ŌúÄ+•ąxܔédüLœŗR3™6R\`­įēŌ¨Ų+tƒ—¨Ą šh’Û{ģŖâ-ä˜L›—.ŅĮÁi;žz¸%h*H$ČI.$60,”ÉG>RV¤\‹Ōęęâē‡ŦNąĘ$WĨŦōœwraĻ*Üę+Čš™¤æŌ•¸ä!Ĩ”ę$uGk—=dv•JŲČZú°,1ėÆÕėô¤”—Žj[ šW¯÷H|<ȓéŲō‰Ü ÛÄA6XŊÆV0NČēpŅX¤EF^ŠúWWĖ䒒ĩüâķ‰g-)#Ŋąfâ)]zZ8ĩwą4{V=!áuløjÎU—O$ĢmL­.ŸB‹įšŦoÎfpęmųoAâ‹:””ŧÅzöö—f_ŽkYˇFß*ÂÛ ē@ļö/)oä w"ßäæRyŲ‚wH5Uį ŧS¯NŪ¤Į'R<Ąæ)‘VœņöÄ7"ųl`¨?tå%ž,[Ō%YˇlUõÁ´M´AƉŖģĮßH„yäŊFjuk%Bōû|y­2íUįŦî#$#–œwĢŪáõåđ“äGøR%Ã9ŗ…ž@ĸžõeœ7[0ˇm¸Ā(.ŪBXuŦyŊA–V $%öŠ<ĢD/lĀŌyŗĘ3’ĶąĻuo€tõļŗ#);¤ÂÂĐĖ$Í[ˇ–ȍ 2-…\›ē3„rÍNŊ¸EĒEæ;€Äbš QŠ›…ĸcĸ7ŊM?CžáķšpŠ[›æ–OˆhäÄ9úđš*âļų<5ˇ_üãvB>ÛSéåxfä×ĖgEūvü é@F}ÂŧIENDŽB`‚leptonica-1.86.0/prog/translate_reg.c000066400000000000000000000134021506303110300175210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * translate_reg.c * * Regression test for in-place translation */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define GRAYSCALE_IMAGE "test8.jpg" #define FOUR_BPP_IMAGE "weasel4.8g.png" #define COLORMAP_IMAGE "dreyfus8.png" #define RGB_IMAGE "marge.jpg" void TranslateAndSave1(PIXA *pixa, l_int32 depth, PIX *pix, l_int32 xshift, l_int32 yshift); void TranslateAndSave2(PIXA *pixa, PIX *pix, l_int32 xshift, l_int32 yshift); int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Set up images */ pix1 = pixRead("weasel2.4c.png"); pix2 = pixScaleBySampling(pix1, 3.0, 3.0); box = boxCreate(0, 0, 209, 214); pixs = pixClipRectangle(pix2, box, NULL); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixConvertTo1(pixs, 128); pix4 = pixRotateAM(pix1, 0.25, L_BRING_IN_BLACK); pix5 = pixRotateAM(pix1, -0.25, L_BRING_IN_WHITE); pix6 = pixRotateAM(pix2, -0.15, L_BRING_IN_BLACK); pix7 = pixRotateAM(pix2, +0.15, L_BRING_IN_WHITE); pixa = pixaCreate(0); TranslateAndSave1(pixa, 32, pixs, 30, 30); TranslateAndSave1(pixa, 32, pix1, 35, 20); TranslateAndSave1(pixa, 32, pix2, 20, 35); TranslateAndSave1(pixa, 32, pix3, 20, 35); pixd = pixaDisplayTiledInColumns(pixa, 4, 1.0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 0, 0, "trans0", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); TranslateAndSave1(pixa, 8, pix1, 35, 20); TranslateAndSave1(pixa, 8, pix4, 35, 20); pixd = pixaDisplayTiledInColumns(pixa, 4, 1.0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 250, 0, "trans1", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); TranslateAndSave2(pixa, pixs, 30, 30); TranslateAndSave2(pixa, pix1, 30, 30); TranslateAndSave2(pixa, pix2, 35, 20); TranslateAndSave2(pixa, pix3, 20, 35); TranslateAndSave2(pixa, pix4, 25, 25); TranslateAndSave2(pixa, pix5, 25, 25); TranslateAndSave2(pixa, pix6, 25, 25); TranslateAndSave2(pixa, pix7, 25, 25); pixd = pixaDisplayTiledInColumns(pixa, 4, 1.0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixd, 500, 0, "trans2", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); return regTestCleanup(rp); } void TranslateAndSave1(PIXA *pixa, l_int32 depth, PIX *pix, l_int32 xshift, l_int32 yshift) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_WHITE); pix2 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_BLACK); pix3 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_WHITE); pix4 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); return; } void TranslateAndSave2(PIXA *pixa, PIX *pix, l_int32 xshift, l_int32 yshift) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_WHITE); pix2 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_BLACK); pix3 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_WHITE); pix4 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); return; } leptonica-1.86.0/prog/trctest.c000066400000000000000000000045311506303110300163620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * trctest.c * * Example: trctest wet-day.jpg 3.1 50 160 /tmp/junk.png */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 minval, maxval; l_float32 gamma; char *filein, *fileout; if (argc != 6) return ERROR_INT(" Syntax: trctest filein gamma minval maxval fileout", __func__, 1); filein = argv[1]; gamma = atof(argv[2]); minval = atoi(argv[3]); maxval = atoi(argv[4]); fileout = argv[5]; setLeptDebugOK(1); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); pixd = pixGammaTRC(NULL, pixs, gamma, minval, maxval); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/tribune-page-4x.png000066400000000000000000002446511506303110300201600ustar00rootroot00000000000000‰PNG  IHDRc\*1ģ pHYsb&2 IDATxœ´Ŋ `ÕšđfgÉl0f6`K¨1ŗęĩ— ­Äwˆ­-ØöŪ~ž%˙Ŋļ@é­É%d&I¨Ø€´UJëRûyûŪûjk¯Ök/;$x‹,ŊŪžęõc'$­ČNˆ˛ŗėėœ÷9gfvgŋ’lô”ÍÎėĖ9ŋyÎķ<į9gΙA"†dâLJ8üKáņ“”ģٓ2ŲÅ` ĻÉá)ö\’’>Įũ|ĶčĪI$ƝBĮIá”C$:ģĖËr!b%˜SNÖ lCRĻo˜×mz‰‘}ÃDHR¤°ŗäÁy öáôĀ ũö6ūeô¨$C&Ĩ]9d÷ÎĘ0$'Č&KōAJ4Mi/™&ÛuÎ’ĮībH¸~ŸÉj"•ÉI P'bsĪ3˛šäPČ06Qžb‰ũFŅŊ’Í…­ŌÆLáßæĄqëĸä5N ž%’äœ<’“"ÆSfđëCž’ —#9_ãT4Ĩûčšfü˙lnđ”–CēČ>;Eœ/fécōŌMŲ¯Ô:ŪļžšcM*Ęc°rĪŠÍHáeЏÜDĘ%E“+Ëænžu)ūÃä1„ą}ā¸IĘ!,‹!“^ƒ˙.ąž ąĸ€‘ty –ŌæīŌŖp‘“m=—úŌÃÛū„˙y‘'—ū<B–ÁևŦ›Ë­¸p樈UüyËÎ~;´Đn¤7øBŊ:i ãD w%m/L‹I`)æ>6–ųqۄ*ŋ=!ÕÎ7¯– í"Ŗr…ąķLĐī1<’‘CŒ2ŒäĘŅ\íۊY ,%žLá 83•žL‘Q vÜöĸHrŽ‹&i(ãNcaÂĪ…7fėŋT}HJÉčūöƒaøĮm7‰ÜˆĻŒaĶ:*’Į3šep˙TÂà D(CÆøŠĄÔ˙|ō÷J)%YeÁá}֎$օ‚ŖR ãH [‰H^]ŌŦ$ûŦÃĸ;`2ÆŗÎ—vT!âōriÛO‰™3­cFˆLõvŖŖÉ{M-ČęCæĀTŪ_š„ˇė+p]Ž+E­? 3—@>Ū-8ž¤¤ū{ä÷S)ä2d3É^IáTūcēĀ-Éfqļ˛'Āį’ī|ŋíw ͘ŒlûwR"[ ũ-v)‰L–yā\æ1s~LĐ_p2|ęĩ!$gë"3Ÿ!V4€&ŠÉn jCFJÎ_Áú“Ä7ļų‘7`18ųä]WaD™WĘPņŨŽãEøōĪYåõü°ūXāV¯â’C*Iį—Áų)#"ɝ=e‰Kų†Ī~ščڝžšéË3”iČ—Ã[~1wšPlŸ–Gëⷚˇ´d,ûuÄ\­÷úģĐÕn_]Xå…2Ļš†|tg—d$ą-´Dö …jī‘NĩõĘ%"YŅĩÛ*,âlå‡}ņ¤XČP4I8nJŋōäĐnoQKRH&_ėęĶ™x€D™šg tw„-иŽëW-悑œŒÉ#nF"ŋũ(úŗÍ $ė~ÕČeĀ„žšwÅO“’Â9×E4ÄÖI¤Ü­°4N$Fp^ĸîXø\ßôfí†đu ›Q÷‘vÛ`_KÄū…\fNäšÍꊀŋpįb"ö•›=úp 6Χb†đŖŽ™¤ĩh"úŋĸ‡%ÉhčÕ×âēĩqÁ˙ĮiĶhog/š0$#8›’–Ļ‚÷gíĀ'Šs’uzüUg;ž>;v[wgûpyD"fĀŧĶPųĸdÖ:eA˜ÔĘSųœL’öO=V ŒsUĪ ™pž @ŨVļNŽ˙ßēņž?m”›O¨n^2…s |¯dV­Íž'Ŗ~™w\+j’j\ ŗ¤„˜ÉäŽĶŪ#ÕKŗ•ŗ9š2â–&˙Ęė|7qqđ¯xĄ.nۊ1{āŦ`0€dGrm< ô/ÚįŪI$¤Y "Ųf°Ė”č1Áīƒģ‚’Ū ÷ėĮë…Đ2Ádfƒ7Ë`"Ģ~ķS.ÁŊ“`ZŊh$ŅsąĖa1\l# Ū nģĘđW;ü÷f`ĸZěŪmé˙°í 2RĻä,ƒåČ(—!B°(Ų4¤rųrĘ0DŊbėļ;ūöįPÛŧv3ū]”3ŊëvûaGŽŋÍb[gf=? b”Û)€2Ō Ŋ†lęH´â™kĮļ™ <ĸzEÍŊsņŅļbl˙Ā×|Ė™($ûílAÅ8¸âH&Ę*š¨°crãV8Į:זCĖĒ&{lŌæÍadTë „˛}žf—x ļƒu!4†Ķiíē.ˆ&/Š9úK–|ÆÎØYȃ'å[ öŒPë$ ‰46O?†ÜÉa8"`ÔÔKæ: ŧAj×´böf=‚hŊã.ZžČ( &pœÉØ v?Üvš‰{Ū„~?~Õbđ!”#‡3öˆtlŦ0P;î?“L ņēÂP:ä2}œNŅLđ jŽEM@SyM0¸6­ļ|‰†ÃUDƒ7xr(Ķx ä  ĒŲÆ §BÁ3Ļq:;æHˋު&ūG’ēÎĄÖŅ€įcÉ4ŽĘĘÁa UĄĘ‰˜4ÄU8×Ų!Ŧ[ g)ƒNt^įIDA~ĐxT^騌DS$ŅŅz•ÕĐŋJ 2Gđģã•] 5ųūvä‘k—‡\ y)Mä@äŅ2'ŗVN*3f1 !D.WãFâ ePAĮ 'ŖV$nædICp2Ŗ’ƐÁq*ŨÃøõxĒKy‘ī žļ’ē ņƒļ–ßų>Yg@Î$BãŖXÍ*C|ÆAà @Ā+¤…4Ų&V"™E`ūŌf~FđŖ [œbˇq+ëŠÚ5V.hũĖ øETk3Tĸ™ž?šÃ 0ē—.ŖjБeȎæWĘ’JX˛ŸW+€Á€@ h(#ČU‡ xžlņ2iëMËãę}ņŠÚĶĮTžųįˇžíč¤!wˍJ^g_p3ČĖô/4A°•Ūėā7ƒÆ Á c(4Šļi‚í3MĀ@īŲíAõĈ7h˜˙#Øwíæ3 ÎÔĐwūÛaØÛ@m¤Úo'Mž3 ’ŅH­ę Ē—ļa2‡P(œĖkĐMjD’Æ‘Ū"–E`06C$܁hÖĸ×PŊGü#lƒņ§Áš¤ĩ+^ģŪŗ<}ā4sb9rˇIßیP›CĄ‡yF° ōˆ{bL ŖŊŀ*Ēĸ doa´ˆNÂ~"D~Š#A‡ĢģGķ  NX —tØķo>r[OoĶ ˙×÷ķFKzw‡ŒÚZĐąîrÎ0C1Čc pĀ ‚īČ0pęDęÔ8SLÛr€iŦ 'AwZ‡37i,ú€NJĐĢĒūĮeŸæŋ˜¸ũÛë˙ĩ1ãŖ.ū>uËÆc]Hāēŗ $2Ëa¨°ēØGūĶXÚĐ ‹UEĘ{8]åô5ĖŽC8U[˙Ę莺œčßü3 į2ˆ”a‰Æč6ƒāb8ĚTP:NŒeb$ĻĮADęäËíB!üéW˙ĸtôž­hÉĸ_ŠPM2ÆŽŋkÛ°é…ē9X "€Â.‹â9´ÍbH’NxOŌ^°v\m3ü]ĸ üo­6@ 3ä;ī Ö>mMe+‘ƒîÍ‹ĮÁ7F:0ŗŽ9Ž„D)`8n1hLFcƒNt2—˛>K.lšđ+•ķ‡ČįlšŌWG´8Ė÷_ ‡íj‹ā*`āÍļ9P…í{Ø Ųērä`P†?ēä`ëƒÂ‡ąÍ†@>¯’gÆë¸”o´Ō1‹á$3EZļé0(¤?:b "Ž0tÅ  ¯•eP›á8e¸üz!oßų!™2€Ŋ!Ϗ ôzĸЉ…vŠĖÕ…Ča:IŖČgHą‰/f’Ēmâ6ƒÕsMāŗŦQ‰Žj ^tÍāÆoBģ :™„ëS-ĄĨX!9l1`\ȰMåTbFŠ5Ÿe›ĩĄl]…uĄ&ÂqÖĻ5Āû“%ĶíU4 Î˙›aŌ` 'īD ;gĖ Ŗ’Į@qļ"‡ŠÍŦ­“%÷›ņG!ˆHŽ^ÛđúÜË;ūĐ;Û_@w&Ą%_Ė ļŒ‰ēPŠęÂdÁ´ŊÕîļëÁuŽ`ųjœÎ2 GHd šņxÚ1Q–Ą%Bķ^øÖ!Ē^ŋg•FīEp6ėŠF›á´ÃĐã0Û\ŽMK*˜&ÜPi5ŠČãíčl-B‚‘Ë DhŪՖŸÔB~Ä ûĐę…ˇ:ʡBcōx›AŽ’^dz°í̉ūQĢ.Ō.$ZíE…˜ŽReGļÉ+Av(pÕv_đËrå0x­žáûūˆÁ8 N]xí^–ŊŌ h`mģ°x檘xĄ Ļ"VŽ2ÃÄ ÃWe Rä‹!$wŖa4‡Û‘īsęBt&•ÀŦˆ{+^i%œj3ā>‹Y :iërÆ/†ŅRŦøŊč͞¯ĸŅ‹ļ>ųŌIŊũ_æ*M°J៟ėR%`ȕtˆR$ųĻ ß2(\qģ0ˆNfÔ ęz‡õčQ|ęŸžøú9c›Š—~ēâŋACŒŽ) č(Ī. ûĩ„dûƒ9"í]RCg ļĶ߉ Lh¤ãŧS~ážpŲĮŸ|ü,e¸`Åģā:Ō‘Ŋ|¯#$X ĻË?XíŸ@¨Qc‚|cDˇė‰ Ú´z2Rzđé¸í§€ôĶ¨Ž Õ#žÄ´āŸÁmŅÆ— ‚ęH5Q *Čb@mŧ1FûŪ(•ą‹‡āĖ !$ %"ä ”č¤ÁˆNVô”ÃĀhˇÔ‡PŗŒØAÛ.H_ĨĒUÁU“Ë oĄŲ`›ôvMŌ@ 9nȄî 2Ú Îšb‹-°|'"!/ß Mp°=Ąũˇ¤.T:ķ@|ÍōÕ_wŽųƒ5#īz•„J’Åāƒ†^E,G‡Ã=üšĐG´Č LԄŊp†¨‘5E(šV0zH˙WGā6C3ĒhCß!ôLvœ˙iŸ’ęürĶ ėŸƒŠc›cƒīDŪ!•ŠĻ; \!Ø M.Ũô+DëvI ĄÃĩÁ§ŸˇJN ŪRč“ųa‡!ĸą4‰[jBØJ ų&†ī¨šqõI4¤ÖÔ§č, čØ@Q,í)ʨ˛ãéĶęũ’nŦHoŨÁkÄč× ¤sm€rđ 7ÚÃ$wU@ôÕ´§*&čtšK8õcŖĐMڎÔyŒƒ8DũäĸĖ^:’[r  mdl’jĒĨ Ųķ8[Âfb“–)q˛¨Pš dŸô÷H"ž9#j2›ĮYwyLl ;–sƇ]72É—R8ŒÁŦ‡ÖQ!ę\ŊúōŚˁ˙6$[I[$í‚,Ą›LēâĐķ‡đBAPɨŌęúP0Û ,ÆZ-ģ¨q1$2 *WyQ‡nŊ$cYRšƒd¨~ "4ÔxH#ãĨŠu‘*`ŖOéZ%ČK’Å Î^&Į0ruŧS^KÆ Ė|ōϘjÉ!ːIP”&˙MęąËXmÃ$´‡‡‚ĸÉâ‘7ÄßD+Ä#˛gąaՔT¨‚Î÷=´°œ=JĢĸšęfÄvÉũęôŅąRŊ‘• ˆ­A/K |i<ÄZ’ Q8Q§„9sĀ ĸdßi$ũzÛ1ŦdÚPT“ APČņp˜ÍđЧÍāc='É÷'ī;ÛyĶvûvLîí` H0ƒĐ"âT6=cÄzt‘2čÖMžÜ:DĶaĀÔɘԍ‰uøI—LQ¤ îŧí!đGãZD4‹ĪŲ‹™ÃÛÉP¨ėö9DūĨqŠäBāh:ÛéRĢÎøvƚˇ …Ká1Zd$›}æžP,n|žuĢ SEįXįŒåZŠĢđ¨IĨ(6ĸ*=wQ_]d)_ŒæO <šwTŦh†’õ'3#olôÔ=Æbéâ8 %ķáøq~¤š+9A;AF$ëžõĐWF^Ŧ‘^ Ą…å˧õ@Įŋ2IĖg˜8 b‹ž‚”(r›r¤æ–+~Ŋ°K Üŋũ}{—ĪŽ$ĶÚŊȏf„Ŧ[Šdj”?{_ĪI‘ņ Oũ=×gÜtū;÷üéüŨž¨æ ˆ_ūUz?šø0Æ7ģÎZ‹ã˙ÕŅ&Jôļ1¸ â‰R”0Jy;/ŦQw}[ÕpQŠ}aŅ7ī)CĖ’'sYb)Šū4Šb,ÀPš–wNYD2ßLĨēá´؋ĐēX>WédMÃ$ˇub8ëÄądÅW—¤21ĖJarOĘģĨÆøÕ˙ø‡¯šķŨq.×NÅO¤2 äîsėI| ’”!b•š -žLĪî{Ŗae_ÁoåĻ$ņŽqŊlÅ}ĻhZr¸9> SĢuær”LkG ˆ]>4‡ ŸŖˆu8Æöĩˇg“=ŨēSm‘ČžŠ*:X= Š˜Æ0Ļ`…×gÄ(į;pŒ“¸˛ĪË.ĖÆ+ô0šąqWīHæ?…ŦŖ*bZģ‚Övš1™ŊsHFhūŖŊD‰F#m˛˜wĸTY•Ē}ĸ“g?B֍vĄČ “€Í Š6ÍĘrh¤É=l֏ķSĖõŨՈ•Ŋ†&)ĢÖån ’ā[j´õĢ Oņ›ėNĘčz˙ĐÉV|tguĩˇ÷÷øĶgĨãÁ3bĖŠ+}˛zĢØ,Æõ(mgĩ­ëqøDũK"´Í2ˇ ÷›ACü†âēÁg͍ŌÕÂ]ž ¯wü ´‘Ž4Ÿ‘úô#žŌ× xƒMÂ.´3nú ŧyîr,CĩĻ Æ–@—ĄÎC>ŋ4<ÛuRē4Ãą^yž]wG`x]ŦĪ3§I*M*0ėđį3dŨ„z[pQß.˙Î8‘ƒēzŽUˆˇõÁXį­ŅU¯â HŨ33ŒĸKáŦ 6iŦÔĘKMąęd¨¸Į3§qËm›1¯?ĐXxN†ĄĒŖĻoO {„īßÃžŠ˜íZ ‹˜ö7ĶøáįõĮd<}ņÜIYąRųuÕĘGÍÅž3ž*ŪUqgã–7o1ųQ•:ęژžŪVæsÆËÆį̘ĪLs2áßÅc[ÂŪšŽ“ÆQũŽZô'3P7ėë•ņ+nmŨŠåÖ-ŋO–ĨŌ ĩkž2Gė#dĶI/ūAÎm0#ģ6–.7‡Ą&ĐšŪ{ė6Ÿޟ ­v‡ļ˜5ŖŪqäpĻ ų…ŪÅa˜¯„¸čáWƒØua§râųvúēOEÕ­ž‡úęĄ=ëŖ¨Ĩ× V-*}ÎŲ6Ö'úønžĮĮŠ ××Ü&†ŨvgÚËhé<Üé'éŖÂqžūüėW‡ī9ĩ1jœ'“;_ÛVúœ‹ÆŦ:ą~}øT,úã…cį¸Xs‡ŌŧM0¨]Øs´pR‹ņāĖĖÄëŧ }gvŦ#ô1Û6IR)EâŒI3L.冑üŸŨ $)¨-Ķ*žųØŨ”ˇÖJ ō,H¤ŋŗž]]ē$Ąä’9)˜…ždbķwˆyr ‰l˙!į0ŖöĪąžl†‚$:ūĄŒvØ #v^{n@¸`€„]Åö†AĖö׋dĐ­ÕĮĘâÍ)5WsÅΚ0‰eí.’Ė›ą+ļ'iŧŖ'ZŲ9A*!kSĖg Šĸø)EâSXåœc^Ā aČ$2ųĄ˙ą[•OĶ­Ëeä•ō­1ŸdWˇ8C4™˜€ĄxJ忎Ŋ{.Û¤iČ(zų í9š˜“maŠ&‰¨ī{dˆāIˇr%ĻČ ™Ō€ÉÅŧ˛ĸwK™ Đ> {ąÍTÔqĀdēLVa}ëC‘ū)&­qá˜Q?g'bũ™ƒŌ,ö˜ 2›Á(îßÔ" 8Ô=””°vNĄNØi˛¨)Ë)ƒfÉ-O.âōČX˛›!8U†ÍÂNŧĢļʹߎT[šîŠÜÔķČ|zĘā^Ŧ™ C‘a¨ D•l]8+Ąą•Š€sRœlR$ME[ztĘŦ] qŖ|ö:œ?äÉ! $8eÁ^’k9˙Šé$0°xW0(U ¨œË`?–Ë@GÕU‹|ÍÔÆTx†2„BÕƒ[ēĻĸ“ō¤" ‚Å`GŦ‰÷‰ņnÃļH%—!ŗĪ0Ä0Đ(‡Á›eĐ2 „2 5–m*–øĸ Báøа6Ãö8~økĩl9ȔatW#ņQĩˏP™s/°LK:#ØQˈĩOĩbtß_EķķSķÕ=ƒ„ÁßY{Ôf€RUÎd5ĢÕ,x,ƒÎ΀Œun§3ĩ–ĩöЌ,’9Đrk0(Ÿĸmļz‘åĢ-2Ž&CŽ*GæmČtU—Å yX ‘yŒ‚l. Č|dÔÄŌË§Ļ“ģ2ģîpi ´‹„AĨŗ–$Ę-¸Å@š$Ę@&m &FgZy’@9 ŒÍ@Öąā?,§ *}`0ˆ1-2či@yŠF&06ƒH÷C‰„iđŖ*O>‡ĄáXî‘!ŽZNëÄ 9`Ãb ˆA&4ŌŠ 6ƒā0 í$ 4Õ۝,ƒ'ûĩ]]¯´I}ũ&§,ī# :bu’'™nAHĮŅa@Ūa¨%GāxĩBF›ĖŠéƒ62ŦãYí?BL,JæÆp*a،Čŧ‘ŋE:eĐl†Íy ¤Î€Ą•#JRž]xōú„rÔx­‚ģÍŦÆčŦÉ@ģe9é8XØ VcëdšQ8šķ}č_P°ČV›<Î˜Œé00dA+e ŗ¸lŌj`$† xo ĻÅ ĸV„Ē ßÍd! ™5ė0Ō‹Agm˙Úb0°Đ/ĶXÃē1e9H”A'wDC+a`éPŖI&qƒ•Ú\™:RđTĀHôš¤BE$‹ÁČa`R YĒ#´ŊČ02Z‹íšīUĖ" ]YĀ`ˇ›ļA€!P7Ŋ}ˆOÄp™äbPH]øA†Ęœ¤  7[cb„™ē”ĄÎÍĀ’i$Ļ­“}dGų†yd^\0Ë0A Ã0 Äe¨ļC‹.S™´”Jk†Z‡AlQšl]ä3DtIˇ¨ĸŠ FYĀ  Då šČ>ŪaPŅwˆ‚L­¯§Ŧ¨b5QkŗzTĐŋį4J6sdu\5Cĸl‹ƒ?lb4ĐÕfä:ę=áŦpqž ƒ ŨmFÕĻu–rV%ēNÚ U 6ŅęĪ2OgrN?Ģ<*"kūŠGåÃX˜*REĨÖf@´Áė9´Ņ鎝ŠĨY r†ÁŪ'ÉdōeĀ]*?Õ~ÖN`XØ §čÅC+äbāŦ›"Ā X-ēJė~7´ˆŦQĀ$Đ mˇ4!C&vđf|ëņŅZkļáyZ0j†ē€8†!ÖG ‹ÁZųbÅ0Ö |KĀ IDAT#zœ˛Ã dû8CúES‹Ą!5āŗĸtZ)ę†NR‰åHÃb AĢŦXŽ4LŦ›ÁĄ(Ģ.šŗ U ¸Įa Eʈč¤D¯“SiÖPNY‹-‰îƒC0ÂĀŌ;›ÉI3H=XeûŊ=>ÆÍ ‘‰Ŗ´ d/øfŪzZDÔēÕNÉA+ļ§ãrqđNYƨ…%sī&ɏĘv™04ƒ5Ō@  ņĐ2ČX­ĸŊ,úĄ#ŅčĒhđ#Šõ€&I…âYNĻøM!žd€# RĩÛŦI$Åé“ÚM]Œ.B×9\¨^ˇSv’YËXí߀1UMRF“eHeЧÉ~`H¤Pr‰ĢĪĻöžžÚŽŠ0ä%ëų7fĻ8ƒ=ŗÍađuÕ5‰đųž2ģ˛ ÖĨzJ1 F;ëšß;ƒPĀP*å7öž]ĩ;ĢÃÎ÷ 0Œsųų‰ČĄß×)ôø–ž'9dÆkĨ†]ūūÚņHm˙äT!O"3ŸĘa9%¤ ĐlīQüũHļģ †"‰ÎMšZK^v–AÎ2 ƒÚ4øž˛06Ãæ’ žĖˇËX jc+ ÷ũa03 Ĩëß%‹!ĒĩqƒXĶĮŠ097oTąxšR194—,:āŽ”*ÛįŒÛëtü͉ũåĖRkÉm{Ôė&uę&–ō)Å\9Z+å,*C ((¸ËCX!Ô. ¸.ļDĸ­wíĄb ŽÁq›Áz‚Oš]bRHā  ļb N0WČāÍؚŅX”!+n›ÁŠ 8ĘĐäēí ‚JâŽ}ÃeËĻ›Z‹2ˆų ô:5‹ĄÅķ˛ˇÍ†ęI2,=U”AČg@ #¯–¨ 'T—!„Đ_ØI2HŲēhŗębĀfā&b(HžÜ͇†Š2dĩÎÍ`X:Ų‘Ģčdž]HVũÉ%fä@0û~&OžÁ¤÷ĪPgŽ]°`›EåP’!ˇ÷ÃĖOž.däė•Z ÎŗĐ(ƒ$æ2€×6 RŽ‚pÕxM{ŋ)ôā.SŦh ƒ’Ī`ږb1¸Ë›Ļ1ĄļbuQ’ÁŸ# Žb{wRîēzzz°l=ĩaP Ürp—ĮŠY†D.Ci{¸7ŧÚĸ@J ˆ2t4{üī…ÁJc2rÄáĢÔmrŗÍĐÜ\ámžÎ}Ģm9 `a‡!n3pf‰ē(•ŧCîÍŲߎ”Ûģëęg÷ėėÁŨÍuA?ļôÁ  &–kmƒ1ņ: ļŠŠ tķŅb(ô%B6Ãu˛ŊC!YØČŸJíĒĢōčÂQ!:ÉōĶ(ņ“~RŠŖË,)üĮÛŽs’rČ3ÚM_¸˙.`¨zX`hrĀ˙’z#Įn/,™Üš†ZtŖj1§ņÅÛnWĄš ĶsžäēmģęĒ,†ļúzŋíŖ oĶÍĀ: 2eđĶÛhƒ0ąrÛęŠŲnĻ-7ÚwÕV‰„AnĢŽ¯•ŦöBļt‡se@tŲĢÅ –[Ūז§MŪŌŅŪí0č|ĩÍ ĘÖM5m c2d:ä/›ę֛ˇÉMUâ.6ķÕuĸÃ@Ûք´,ƒŖõ+“ĩĀ%ë"_ōŌrw]°Š%/|¯]nĒzj€ĄąoWŊ`ÅrHĢ4YÜnåG6ŗ ™íÚÄ*`‘ä‘%vü0ĄNæ&æĮî-ö ÛÕ.ˇUģ€aWcĪ‹ K+ĩœ‰Ŧai’_‡ÅPæ äi_XíøĄLīÁ9œ9*ũ˛]֏ ģüĀāī9"8 XņÁņṎ́ËaP,vbÛĖM܃Ž@č‡áÅŋo—7ģx`đg›gXˁĢ`,Ncʕw3 ˙fÍ:`8"ėBnr QÍaër„,ƒ^6ˇ3gs¸ 7ļw7zޞ8‹Ą–!Ī@-ÂĀR†&‡AČg&gÛrļZˇb- ĩŨHÆr âˆŸ2 ÂēpÉĄé=ʁ,ôĖ&yĪFl&w5˛$šUĐøĄn|Ģ.›Ąh,W*MSržŋD2Ûw1Crwx„uŠ?ÛĖšva ÂeÛaČØ§ēⓓCEÎæĸÆÉšĄūc îRųF ĮÁŠôļ•áōÍĀaû[’íCk9 žÜycØü‚õpœQ*‹Ąšújëá$N!÷¨>dũ$[n]äLŒĨõüYOqh˜Hģ™ĶfŅ-ʀ,9Y†˛t2o fE|mĒƒ\’´›–d‡+WLîRŒĨ¸ūp~‡081L&~ [6ƒ%%!2y94å"™KŒ" Ja,G4(\vä ĸɡ›y\÷ĻuéX)ÆĀ‘šÅ2Ŋzg ēŅDŠÃ e⇉ë"Ą5g÷ĖA\UDT–ÄöŠ'W“ÛV”AuęBw¤˛í"āƒÍÜyАA!On"Sá8đĮuÖ¸l ¤AĀi1ˆø(Rg… Ō¤ī%yŅ•ŗ‡ 2ß +]r6ė;ō&+“ņ‡K< >JCä)×rGYũ wōĄęāōķú€'•š•6ķ¤B9 ĖfQ†Ø„ ĒQjŠp>Ãō|†V×w/jHa#Uā$堖\q”ĪČC`rvø.߄õ)30%~™¨.*B9›U#ÆéŌ:i?ŠTISeČCÕüE”Ã˗Ã8 ĨVĄMĐÛfęųoíHbSL‘gΤĸxŦo˛uQ‹,K™ Ē‹næ“ØāGÉŗwƊ1”ēŖŅ‹¯˜™ƒûæ*¤¯øëˇa0Ė'å0ÄJ1”^˜X– !‰#ļ™X6įUŧ\ĩ^Û#Mņ .¤˛ Íë1ÃąĨžÎ*Ī {Á'NÄ0ņēĖ|_éō™@U¤Z`PBČŦ}`ÆĘųcĖ„ cÖŲĐ@ŧ[dÕ!Q’IË!@īģuŨķÛ̈́Aö™MûfŦ\?ļ{˛ Ĩ_ƒŠČāūO„-@'WĘ ĖĻ×ûÆNL¨™ĮV¨™DØJclʕCŅaŌ€ķĨÕCũ[Ÿ^ۆ _ŋĪl>ē¸jnʘyÅO=e`ƒXÂĐEž­\[ÛØzTkÁPŋƒīzB üĄKëãWlÚ÷:˜W˙kĀpŊ øĖÚyG¯&ú€YŲ:ŠÖ“–ՁYŧŸ 8ōņåĪ{ؕ¸q;>z>…SO_š.˙ nîÁŋ†yˆˇe›J5aßo†knŊfÅūķąŽ'!ËĶōzaÛ¸‰mÆĘ@ä “G€’ēxæq—vüGô™žŽ7ȃīy›A´čKę‘ĸčC?ëŠ&ënŪo}@UŖCÆĢŪŌOHāŸÍ|ī Šĸ‰zaāv† /ØaˆŊ_ Ķ^ēûϤŦŸĪ%-ÉāË0T÷žÚærŊû“z—}4œĀē(ļŨcŠĒæ2€—tüäûðķEųĨ§ˇU>ŋ“§›æ3Œ` Q$ ;)i-Æo/HōfÄ Ũŗũ™TÕÃ#É(VąY(ĄŗŽĨvA–:C›ÅË2T•!ôZ÷ęĶjxSLÄũ‰"ã0*Ģ;>JĻB$æY›Ĩ>=i† ä Ą‡%Gg Đ2ċŒG‘9Ûvü VWsäAŠčĖÚ,Ípąi˛ 7Â?ö_ę“:~œŒ˛Ĩ ĮiĄl’E‚FÛæ!MāĢŦ@,įŒĐ•f0Č+î&Å@n#ŗZĶ'  ™œtaĸqšŧw?—fxėc“e ‰ÕĐ&#NĸWŸˆ!÷}hã0ôŒą“×I*ŽwЧÄļĢđ)7ÏFâK—ÚqE ’ŊaeįNCz€Øf(ūÆôņ„}%ZYšuZڋ¤AŊ{Ģ>yÃ':īͤDåGqōF´Ú—H‘t@82†ËO]\Ũ'K“ķÕvbÍí!qĀHâëPhåܙ’@ębøˆĩtéj?›h-ķ€XiīGŸ‹?pė7ĘāA›A”f$šœŠt;CÍØķŠÆ)ČÁ{%čdÃ^ä‘q`…<™š „AŠŽFš™€!´wË ÍöũÆōļ.ÁÉëÜūŖ—đ“Ō_:‰ĐøQÎŌí—+ĒPëÄrxčËF‡ŋ ŲūÛ)ˆiãdi¨ÅPETQUhžĐ6ë:KŗË`XfCœYwŌ`ž1Kq`!ãvđŪ:`¨æšUˆąė"2ÃŨû˙ŗļüē`Ÿ|“ĸˆbÖHā?ŧhvT_ūĨ3s~`ZkČ|5Íä,|Ãˇ˙íûŒđKž ÆË ãjÃ}Gˇ$CcĢWF­“˛Mū‡W×Ú áړs‚žyōHz—ėô" ÂdšP‹Œŧ“b@(b c‡Đ¯oŸų‰Ÿ?öQÂpמâ âdŦ|ar~˛úĻM2š}Ā > Lü˜_6ÂōUFåešËņJ3Čđ¯0I„=MæŦ1UD“ā~õT„|ĖˇĮ•ÃCM“Ŧ ’tŪÜō‹üÛ1Åûz™Û7”ĄJ.‘¯^:A>dT>ũÄķlÁˆE°‹”2\^$Gbj˚rˆNz>•6’ A<‡Ÿ3âø;âÜ" /Ŧ‹ĢJČaQŲņÃ,ë „w,č;Ɵ0V¨(ČhãX ßūŽxŽ7•ÅvÁî#yšĀ°ë7ë;bpę4`˜hūœÜš$ZėU¤×RĻÅbøpߑß,<Ö§ƒwb9g­á˙åĢ*€(¸\†eHö†˙KßąčÛæĻ ß”'ī„úH|ß ņĮÖ/ÆŠ§#ø‰mˆ˙ņŨQ’ævD•Č´ĖēøØƒ‘ØHĒ`ŒŌÕ§žŋūîîʙøĨĪã{%úž0ãÁ§ā‡TdŒ6ų)ĨXŽheš R8’0ˇgËĻNÜ÷üŗ[oøČ̝îĮ~ ü/]ōRˏ÷_īÁW÷ū 0„áŦWŠ!T”'‡„8$`HX¯;‹Î܃ų#ūv'ÅúnÄ#_Āg™Ę>ãûŋ˜‹õáŪ1:OÎ|ĄHž\•\Ž>a4čdę‰ņžÛ/ĖūĄÍ°ŋgį5Ī80‡9đŗōÆžā­äo˙”ĮûölĨ ąsÂ y_ū<ņ×ļĻīš Čr¯Ā\!Ų G¯yîĀŗ×3{VYŠ_ÜP)a¨ėŨJŪagɅyú<å1@]X“ËÍtãį>Ķé]ŲģC@~›_?ķúoÖ‰ø@°Ŧšįë36ßMÚˇĮŦ›)†ŋ0O_Ā_¤1Śéše„Á# ´įļY12å"ÕWLü$exęÂ kCP™ ÛĖķ´.}4dn¸š/%žX‹qÉy ą C%y ņ‡‚ü­ōRšL†ĻHJ‚Šmē”ķĸķĀ[ëOŌ)Ÿ XĻ€ƒMĶ,|‰Áí,—aöŋo'*‘?alžd1HÄ|ĩžčŒ§søM˙ĩiŒÎY4@HTŽ>ØŅr>ÛøĘŠ?1׋ŋ;ŲyĪ•b-ōŸËŪ–<œēÔ×Ŗíđ.&ŤŠ•á#KÛËdāŦ;›i“ÃWÅņSāŽ$Cē(Ŋų.Z6ÛgŦ yäί×,<Ēķ'–]!zfž^9öxĮŦåÅéî‚9`בĮ-”ÉĀD¨ĀĶ{¸2úöž7ƒîÖo˛Þeá[ļrGįĘ}‘ŖīĖ?ąĖ/zfŊ^陙e(đÕ4Ֆˀ0i/ .Õo8Ņ5”[.|tQčÜ3žeģžåĢ~Ôš˛+|Tû‘Ãôž×™éÃäŪŪ"9~ĄlņŌļą‹Öoî9ŅĨ6˙ķ§.üÛĮVž_äûĖsŊ†gæU'¤9ūØŅŅžĄĪÜ&^}÷#+|÷ĩƒXęŲŽ§Ëf¨–4lvlĮķ‚ū™QƒUĢ´}ŋ_iû‡S–ĩŠÖV$Ŗ˛Ā@ ųBŅ•˛<Ÿ ˙û%`ø˜xÃQPPémĸĨ6ƒuûĸđ Ā``ëE§â•ĪĀ@I— ËGe y;ķ”īžąH¨U´.*ä˛yũÅüæmëÍ <&iq(Chā0NĮŒ­.–_™í&Mõ$˙öųņįI™>‡Oë/myėÃz=6CŠįŽ–Í€¤M*jĖ?-ú÷ˇNë†JuîہUÃâ5„a~Såšīw4Ÿė&rX@ę‚Ü}ūuąėŧå1Xũ¤Ú¯#Ôū§„+Ÿ^÷šŋ¤Ї†sKÎü ĩž×\u[ę>Ô˛ˇŖ.zlô§ŧđŌ+)Ä1{Û_üQåˁ$Úŋg#ĒKt†ä=ØiS“ŅwĝŠ‹2ˆ8wFķûÂāJŅŧũ䮛+ÄSxcm_ ŊŸ ÉfŅÎ>†WĮGŌQėrYĻíž22! d °Ôģ Ę™gî’C@X’ŒŲWŽ}@œŗđHčMœÍÕ¤ü<˙Ā=Xętü'ÄrĻ(ŋ„Õ9r˜Ė튺îž=€æŽ2iT#ČŌĩ O|äYœēŲ\Ā)ŖcėÉW:pōQÜxßĻ Įž{Čf¨¸$ā?{˛)9*Ķh–(KĶį+םX5ę3Ģön­íh¸ĸˇãęäžNİ-ĪÜfŊöpLA|Ŧķä eօ×Įi•Feø€4}Éņëžũ›1ÔšŌŋ|ÔĶą÷ŗžŽ“‡‚Ū†ˇ<÷ЀŠC"ž§DnãęCą°Įbˆ|’ΧEÄņŗsĮIĻwČ[Žī؟<Ô kž­ō­Ĩ ĩčãÜ=æđTØÅOōåÛæ‰%IҞƒžÎooĮbãįū†Ę–ÛŽ>`1øĐõ q|Ņ9_.ƒ/ÁāoˇĖ2“NnLn7ŗG7aëe¯&vwžÆüˆyŒÛ/ŽCų—Ą˛¨‡' cxdđÁ‘ŗ¤äaéúģīæ.‡ĘīúĒâKúÉq|eŋį,ęmgĪ¨ĶŽXū ú ĸšāwchŖųH6žĖ}TÕ¸ Ķŗ š­MÛŦ!Õģ†{EĻī:ŧŦÃõ‘Ič\Ŋ€­ņÉĒ™áŦũ—Áā)ņ>;ÔļbH ~ąvGp†WÎc0q,ĸ‡jú~q_ėÅÂĀ͉å⚍ËĀš˙į:ŸAí3‡†Ļ]ÁÅÍČĨ'KŅŅSšįUcE¨1Âû Ũ#ėí“=[e˛Îī“e Œũ&ČŧgšeU/šģ>ä ^a„ģõäņžŊĶÃI— ¯ŪŦÚĘ` Ģå!Ŗēϐ!Ķ“0r(Cē´¤oᥗ!uQņĄ7›Ų„J0íX;ÂМŨ[ļ}Nwđ¸t._¤#ŌéØËIŽ_ŠŊza`n8úŽ#‡Pî2ÄņPVWd7ĢĐļŠåzTmœG&‰¨ûķ.JyļIÎĒ;ã¯n-gÉļÁfČa܆VčÜđ—J˛ôâî[ÄäÕÅ%ģĸâÖ;’^Ļrøųšę °f* N’)ڍ:?üÁOÃK˛_xĻ@~O*䚨‰ÕīŲpä&Âđœ–]}æSCŽė'Å0ębPČ mhžÕ*6HH¯ė~L|;ŸaYw/>ZŲgHgÁžDė‚}öcš&1srn#dôĄä“ū ŠĄ,v+•ÃÚ\ ČgøēWÆũˇûƒį×'žDę‚=ņEtƒÍP‰>T6ƒ;Ņ'§æ¯īÎ0ˆPđo™ˇ˟ƒˆ^Rũȡ äāđ ŒläŋeŲ1m#Q ‡Á‰Ĩ_k˛ˇ…¨°ų‰'žÅĮ6|ębđÅ%ÛS[á´i9tČĘÁ*9­7Íe˜ė Éul[rųōS)ņwŸ˛Ę>•ač1DÁ=Í B]45ŋP<Ø@N–Ā ”Åā'Ū6Ī\aFEgũūkMRƒS?1ĘŧėŌ<ģõš1×äd™ą‹É>2Ųb˜Ã&÷5hĸũœW]ôŅēč„ZŠāgĪŽĀĢ“_ąīB“×a@^Í­~Y}˜4¤mkôũ ŖĸU$S9ÜĄŅg– ‚ŦĖęZ::s+]÷cV^ä¯jt?{'Ëš\ņôcëú’ŠßŽe†Ū\ $ ŸĐ;zsEWhtÆbŌ‡ˆá™ŒxÅũG‡AŸ,C­LōlķĩĻAåd•v᎚Su„ĄŠƒ# ˛ėíZŽ1 ŪH˙RÎä”ãʒMMrcĄx­I yQkk¨Ļģ* ËvwōĮ<‚đėŲÕ]•ÉÅôŪĸ” å˜ZOq}LX<Õë&ōāÃDÄt{ Ãę×)Q†š_ÍČá˛ÆSe uŅÖ{ĘMę0&‹qŌ¯ Ŗ% vąrË!ī™ĖÔ6YüŨ¯Ę!'§Ü˛˛ ĨzæyÉX—ŗUᤧ˙7ķÃŋ“ŽÜĩŅõŌ€Ąą0Ėĩ‚iLgH5 ÛHÔ_+g‘û˜ęr˜W–ĘäļÖĸŋĻODd~ˆ’úĐŌē,Đpœ•—žmg2¸{Ÿ÷ā…ŸÍ=Ķ ļ[Ō^Ũ™ahĘŅžŦš\b^#VĩÍl™+ãũ2øykōs§jCŪ0ąîęz§ķ^t]ͅnöiČO˚îL.Ķs""ŽĖ6‹{§Âađ_)ũČF‹FËŠ& ¨AĩūŋŽáÎîF랯2žŗáÁl´ũ$y•\Ÿō^ ‹A’öEČF|ų8ÕäOƒĘX ­]ŖŪķ–^`æ+Ķū†%rđŽ•v›Q$:U9á˙@B |Ût4›AÂ)b$ö†žG"EN„Ā*““øø{aĖ&›Áĩˆ?}ĒÖf¨é^ÖPh›OËPPRÍæ\$ŋ†ŲFŖÍnáyĶ”béđŧj-}ũŨʐY&‡~/y˜(— ĄđĻ÷"‘Ū(ŨVqëŠážc 鎆C§jo†]Ս`j÷\ė\qū\ėĨdr˙üág“7ÉÄIé؜n¸qŠ "ÁhEô „+TáØGŊúķĒ>`hR[Zī4ėŦíŠo}¸ŖĩsŖŌÂī֒žųũ—i¤DÆ=ôˇ$įvJ9r <Ŋ`†€ˇõx–ŠĸÍ@ė[ˇDŦõķwyÍÃ-}„{6Ðõ‚ŗsŠ+—ĄbT& ž;V‡˙ė°qĮņįįÛŗ‘žĩZrũĘ kâŽUŽRÉģ;JbÎ`A9uAgĶžã6Ģ]$ĻAÛĮ,ƒÕ–ŨsÖÜtę™X:….‰“ŠĐš +Z‹1˜ŋíĀCešŅfČ$3‡A ŸyļI$%›“ķ~‡ÁJŋž‚2Đ@pÛZ̤gČmƒXæ}î™$Ņžw Į^Nŧ…q3e ‹‹§ŋTb‚ IDAT\†l:_Xēkļ\ģu §Č9ŧĢT¯RC¤p—ôōíé*ņ1N˙Ē4žd |ÜXĐģēīŋ] œģØâ ?).˛īOŒ~›´wūĨŋŪUfôlA]ÜØĄā4žOYŽ-@ZŦKŠËĄXIĨR[ÎäĢtbH>ÃúÅŗ†¤„ûŽ}6ų›ÕO$åŧkŋõD1†RŠøs]ō÷FķžåeH<ĄlŠáŊSÔÉb öĶĸ֖hŋ=|SƒUV6žīy?ȃ'đXĸõ•/4GÄųĀ@&–Ã?™æ•7éÚbŗ šOz"ƒyšášZ w:ęįēDōû†Ũš TÔfJ­÷ŧ ķēqĘ΋ <Ķ‘á nˆîtē)CkM9lÎösÅ÷ƒÁÛ%sĘĪ.ŪŊW7‰ß€a—PŒĘĄy›ė”čœÃAŸ`ōŽÉÔĮNv?xfnâNžŦC<'E­'%hQÍWg*ĻČpåXĮÆ1|ë8ę˛Mę(ĸ;ã?Ü´%i,‘vÕm^#T?>CŦÃOt,ģ÷†•?ĐāŨ—Â’)™&Ä÷ÅĀYDĸäVavųũ¨ KŖôîgؒRŠļčō×ŗÅΘ’Ė>‘VîEŸčŌö]ž/yåÆ‹Ō{÷]{ģxPßeēŧäQįĄ{‘߇°ôúŌŋnøÎ˛5xxŖYuÂ7›ŸëF÷#Ü&Ī0c^ōŋæIģnžā]ē/ÅpgĖk~økŖ÷7ˇ‹—éŨҚŖUčVÖhääĢÅŌ`čږē“WANˇ¸ļ]hD"n†ø¤mķm{\öĩx*Åđ5îÜņkãžß|VŦÔ{ĸ5UĐ\°Ž!rxsÍĩ-^ôE<Ė™ĶäË,ļ3` ŊŪ)É!'Ĩjø3fčG ŒŪ˙ũ!ņ~=r*Ë0HQ/š˜)Ī7Ŋō}–>°8ÃPÍēī_8 úÜZ¯ąéņ/­âéM˜8NEZ čÕŖ)k!w67^’^ ŋ\ÄŽŅāS~ÂĐ`ĖuRyYē˜é’ZvÁd:9ú{B†ŨžŸˇqūOŦÜtænP遲Pũ†DĮôģŖ1~ôÜKPîö˙oyQz°ā–ęŠZ`XĄ™´.j…âļ‰ļrÖ-S”" Ģ|‡tÎŋlŲFĩĨÆäģDßqΜ–ļ.­%ÔįëRzûŧm—Nz‚HöŪŗ›øÉDĖ€. 0 čĀĐm3 …”éøÄ2â\°ŒSqĖ›Üš ‘ƒŠ–/ëah<ŪúĐŨP㛍īˆũ65˙õĶĢĔžOôÛ mvšĖëÛfÔ02 U…ÚΌ•U‹ĄĶ ķZÚök$,g™÷ęøä˛:0+`¨ņb~w õímYĒą'QOUŖBk|>ŧNū騡ķëį›?¤{+ĻuôJîMĊÕCšŦ.9˛?ļVĀwĪŪß)EĨí˙[ēã;ÃÆĶīŪ)ņũĶņ˙ ÍĀ'_ Ūį“^NMģķĮ!|īčį(ČA Ã.OÆ[Đ?2×Ū^š|đ’Wt‚ö܁%éë„ŲuYŽÉÚĻkJi7§ĩbî§´„A]C͊:Â0WØUģ¨ļoéũŠÆtĖņ¯äA~ĢÍBĸ=ߞåĢķ=ŅXÆá§Ī“ė#znáĻ­~´Ÿˇš)5ķÛ$fŽŠ/§Ōđ늎čÃíÉ~są Ļ~íæ+'Īu.6ņü1ĸ–6ÃUļN2ŗž`æ}Ĩ!ŊŅ1IĮÍĸƙRĨAŪÍ7†ŸĮ#†$â üWcãOäî2aȓ\‘ūfŽmZ Îj9Žœ\Ū[Ā srƒęÛŦ5ûÆŧ_g>QŊRŨ€Ö ë+ķšWŸ8ąˇžĸŖeYįęî;ƒ\éØŪŐņ`1‡ÁVOäæē*̓͞ Ŧ*kŖÍhČہ|^$Œ‚W÷ŗ*iėš9Ų‡ęCČ„orŊז2Įķ˙ür>Ã:l\ĀÉÎßßš[8xŖÅĀüŅf ˜P†.FŲŖ 6{.xuÂĀCpéĩŪĒ ˙Ī[OĀsr-Ēgô–Î K#û’3Ė–.??¯côŊI´Ųô ~¯Í0Íf`Ėöœé(™q˜čŋūėüîähseōįúœŋ™×ģp´æŨo*°ĘsMgô„ī‡â;Z—IĢė rÉ–ÎšĪ lŌcîũ€°đôė|† Ķ4ĪîdČīéôĘĪđŨíë öį==PÜ6íEŽĖFpöŽ ÕÉĪY w˜§§ ŧr ŸĄua˜— tzQŋ×f`ė)čéį4ä g˜8Ų|—Z:[Z„ƒŠķä_Ä8~>Ÿa“¤?p_˛sčqķ†eĪŦ}ÚapæqĪ¸'Ødę‚\īNšĢß%Īũ‰ÄŪÅđŲ6øåĖ‹ka,ĨĨ}ņÅ 8eäÎÃ*a›dŊ)‘ĸm™9V΁sâ(Ũī80ü꾋ŗ^;ŧéūYũÛē ˇĪ›Ŋo^Ø×đRX›yũ§Û¯<Û˙äŲMÃ>[äwÅœä08*°úŒX÷P’Ä!UfÎøŊĖ0×Ë*Ã+ēj†Û‘ņō•¨WĐöĸ–öša†ŧ÷¨GIasmÜ3Ĩb ›H¤L>ŊŪa¸Ë.´˙Č=#†ŗīã$gLëAÃĀPŗQŲŦĸq?­žŅë›ãįoœž;œÜË\ŅÆ zį*}ę~%1×|ōˇ;įH×l<;wle\Ä#} vįá´ßōŦüâu}šÔ‹zyŨÃØļ™šÅ…õ9îēpڋ¯UäW+ũHcOėT4v÷Ė3mP—?<;°{˙č^äí`´VŊexĻ’Ŧ×üMƒüMĐÚođį<´G:Š<@››ÖßT2s¸w¤Žk™>Ŋ‚q^FĮk@ė4*ËY‰ŽoŌDĖ‘$šOcKœ<ŝŦx[ë’3Ä5×~X ū‡€aač• °Ј~ŪũëJÖfxäāԅŨĪ€hF+ÍP$}ÖpŌ#Ą@ƒÖymį›ŽüLģÍÍ@FÍīX°n7ęҤŨhéÁäū8 >ĮgēG(] 1úLēŅõJá¸%Õ{_â: o7E:lŒ&´íD˙ ]_œe˛ębsx Ų—ĩ ŌČF\vá0š-ŗEĖ+—\ž{{đ‘ĩø¨¯l{ŪÆx‡äģõŲĻŧüQœÖÕŅáģįãÂ11ÂЇč¨Ŋ‹ÁJfÚap&@ĒhdZ‹153‡(4ę÷ņrË az×đ^Qæ}Ąę Õûä•íH“ĩ–9\–!•&ʼn/†īC>Ÿî-†H '–ĀKK†i˛Ĩ!ôŊšJQ†ũĀ ×j~ÄËUĢ-$Ɯ/´Ü×ĒöuŖ6¤"­et<’ ¨ž,ūYO~äqéo?{Ū/ŨĶ’zēŽųČ(Ȗëŋ9tĸí@īÃĢ{3:ɆČ'­…PÛ†}~ X:č÷]vÄģfɌŠæû9Ô˛}Õ_í;ڌԚ ĮЧĀĢŽ8sĢßŋTØŠĄ3Ėåįũ‚â !ąG>†ŧ°nFsčf͆Pī÷¸īNslĶã\|K SҞvî;hŽG )įũCā}cøëéĪMģôčßö§Šiƒˇ…Ö…Í0˙ōŦ†ēX€„˙˙ČÁˇâĖqĨ!ĩđĖoû×ÔlĪyB-"’Á? ˜Ņ3ûĨXbãčeŗ2}=TbŪO–!RÃ[ŌywGÄa`äc”!īĸr fîžĮ{IvŠ/ęÚŖŪ*˛]ĮÛOŠƒk‰i†vzŊO †€Å~Úé˜Ņ¸ÚpOŸõģÃîįÃæ2„ōĩŌ‰ĢËeā͙}ÉÅũ/ ãŋ>›2(’Ā@ÚúڊŨ… ˛ “–Cz¤Ä)ãŽæ?÷uÍUvw|y‹gÖŊ˛úĨææĢĻ›ĄE%īOČy•Ã`~Ŋy´¯÷ž#ģßmŋÖk3 fZ×DØŅW‚!¯&\ â Åy¸“*\šŪä0hŲg­ĻĖģ:Ļ͗įžaÔ6‹˜ü~ÖÖŋ_ũRīŦ ŪP CPŦYMŠķ`:•׈”Z§dĩĶÁ†čüČσcĐŲ5b…a,i›4U‡ä\†Ė\V^ąÎ”…U ƒė+ƐWfaĶŊ'’ËP˛Í" øhCå€&d0qA’Tr=ŋņš1üö#7æ—Z‚SŦĶ] IĨ›ÅH‘‘8Å1|I(”Ã>é_úķæoíhy$¯íÎ÷Ø|iō°WlaøB†›8õ\ßp÷~Íéô Ŋ c•Z(ô ¤õvžnūÔ¯s –'ČĄËÉGQ ƒÎëÅ>Ā̍įCŋCÉ'|ˇ .Ƙ ˇ„~žÖČaS~ÍdäĀ–`Š2ÜÂŋÁôŧųĶߊ­%*GÚ{āŌ5AOĮOäŲEž>LÄ ‰EjÂo´ôŊ}˙oĨ;IŠČũ šæšËĐT’) ”b˜(Iš›Oå0ã29HSdH€ąHRšZnŽ>ä̤kžŊb }p^+ ԋĀ@üƒ G17ë! :îëÅa𖇥ÅÅI3 -wr›%¯€īš(íĮCŋģS<ņė/FGsüCáB§íƒãz8°Múų>üƒj3 ƒUĢY  §winz3}éØNņņU‘ũü9Ŧ‰ÉÅ{_zâí΃âi_xĐŋTėÍčåߙŒĸ !ŨÉšŧ)G|u+e¨GmŒRÅaq Īqr‹Í'úē{}û„šU‚wá_đ…/ĩH˓M’ŧûŠ–Ž? wĩāī ¯Ã>æúC2¸Ö>hĖN–ĘĄÚaTą^‡š‘âŖ 2ĮqHc0ūü ū Ēú~/~ā“âGA{ČÛé̆›Ž¸ÍØ÷ųõwãnáõ¯xl•ßĮįÖEkiHÍ2tąœŨf9 ĩ4MôųūIęž¯ąĘœ)܃ņ ‘ô“ *áH,Ī6•qĒîôđĀpļ‚%0 ­”ĄļYT•Í"aāXŽ‚WUMŠĮc÷?Ī˙cílā›8΄?Ģ–LK˛!‘Ÿw-›pé!Cæâjeؤ¤†|\Úë]mĀ…´GŠizÁy+´kė`AœČ†ä…"BŌKš^_ ä’æŌFōG°Lúq…’DōGlr5xe´BĢwfõ-ÂåŪųũ,Kû5˙}fæ™gžž‘ķĨ˅ ĘŠÕjæ¸ø菸ŪS(›Ļ•ÍdrB2C§—C M*)CĶÜLĸÃŅ<Н ŧn!ÂЌx>}ŽwzØQŊČúĮûžĨÕŨ7dĐ#!šŅĪ&č2xëĖP@Ë ļ Ä RyOLc˜>–$QpÂÕü& ;ŊĪ&3ĖĐĖ™Ã ĒdtN 0ƒ1n‡jcĒHîD Oc(‚•3ÅqŒT9Z’ĖĶn•ÍŪ™ DåĀc3hYÔČ M¨lēA0”ÁĖYUiauBG; ~>ˆ›i¸kųĶCĄuĖ:fXНüĪŌ"Æ@&1hQSÕ-Šbrp#搙™Ŗ¨Ė[Ī>9Pņs4Qw˙×>ĶŧEģļ­ŨD÷8wFĒ~ Ėį @'”¤Œ90‚žņ"›Œ1xͨŪ4ŗ÷˜×čæ"Ŗ*Ū8hZãh17Vs&­†Ģú~!|ĸdĢŗy– žņģŽß Œ2xiː=#CsŒG—‡lšözöÅ`Įnh*tĻJĒeÅҌÕĀDj¸Ü›”Í›1P˜Á˜Ėā­sË6 f脝ąr!ĐĶíjá¤I'3dpĻ\ŠS%1°00~ë Ū°×ČDĶë(€uĩ :¯§h$Ė€ubOc;LË5-?°ßaūÔņ°ƒÍm§ô/.i^hH7C}až)? ÂÛĘ€ŌBú|€šŪĒ jĢClwģ Âņɸzp&1ÕŨ.ėQvP˜}ųëIˇöVë,Šã ž‘I”M/Á×Éļ}*Ū‡7b2ŪĮŸ=ä :<§{ûˇZķĻŲr^´ Žĸ”'M–G/Īšī+3|ˇq0C]”AÃ)@#ŌQ:~oÅi=€°XÕĶlûíĮĩŗA šmæĒŅ[•jo QYOĸb Âr€\…b­°~Ā{ŗĢ€HøB•S{ÛkÃķ oŽUŊ á_Ž : •ķ‘m͝ŖwÜĸŽ™!I% ƒŦvj¨Ū^*•08‚ŦČÆ-ũ"…ÚŨžō4IäH(wĘŽŖ€ŖĩĮ]Š´0ÁbwŪ¨Ž _„Į%ŠaÃÁ¤’ŪŪŧÃ˙(ŒĀwĨļÅ1.N"„'g´‹\Õ(G˜Ī¨´Æf^4ü•zĶLĀNKžĐôč¨1üËŖčž0^2ˆž”&1Ę)îË0˜Ļ¤‰Ųœ¨Ä ^-Ĩ°m¯õŋekˇÚ Tņ/¤bÁ<=-îđ&3ÜúÜŤr…åY{pūIŧ´Ģ%|€šĒ>S2ŋdƒĩ^ÚÆY´°‚ęiå‚HeøjũrÅ;ķ‚Ú&-:uTĻj4a?¸äĪĮ”f(bĀ/ -ĒŖrhˆkĮĮ(ūÍA˜đũ}ĮU…@i JŨéesSŊ¤´Ō-u,°ŋW,Ž§…;úŸ¤ÚĶدĀ@úÜU҈Ā’i ,NĻ×"ëöļ…cy’\äĨŖŲÁŲđŋg( Ž{7X":į2yĪŌO§=0j?°å‡#ĶŌ"zˍzDS‚<7túnj=ŌCĐčuū†C.÷§ã<‰gaøŖyō~S4-2u7bhvŨ°ė oCw„Ŗįh lĶĒ +=b4%‚.*4Įüp ".m…ÍKØgáÉŧõûŠąRÛ*æÜë4ß>Ōbųy9SļĢ ßˆŽŽ&N@āž ™ĖK]™ÄĐ¯d_WÖĩžŽŽB nÄ +PZ * 9?ĢbžŨ°ĀÜ ę–TÉ :KE˛ëWÃ×WXX3lφmļß7ĮQfRe杒›Ŗå‘<¨2qĪ(ž™rtŠ`+/3t Rūö!čđ5{)DĮŠÄr#ãéCq‘ːwÕŗ¨mBûŠá-lė„$÷MÉ ŗ5''žī=:ƒ””WĄQØH”=h°Ē["Ŋ„o:ÄiŊŅDō ÂpÍļ5‰ŊöŠ|faJĀ 4wž$W¨ņŠ“ˆ0@™ÁMĒ2PsĻ‚DɂŒzŦ„¸ŗc D”Á•É´y¤.ĒÂe1Lb'\ōˆĸĸŠũL8@É ™Ąå ;9ķŅWĖPŧ@Ū„JfĀŋdø% ÔG§”ûwĢČR0Q=qj‘ƝGeĨ¤gĐ ]­áôzŊ5wŊ|…*Ę`nw„7)ëGžšHc¸ō#§ûč,åžÍ*ÔGã Ņėģd‡+_đŸ´ß¤Ô¨š34ŋ֗kMؘôåååFcCb ĸ ‘r!™. žo:¨ŦēP4¸'OõĄJ¤Oœ!1p‡ŦīöËļäcDšHÄ@ƒ8ÃZ÷–=ŧŌMļ…}`N¯@: h|ÔĨ2UŸĐxŦ\$\Feܡ åÔ÷§—M1Âôå ÂAžļ1Ę`ŌĈƒč,~Õ~°cÎĘūĸۃyË.š˜C <å5nžĄl&–ĪĒlÖūŨL ˆĄh1J dd`†ōƒ ×É )…Ã…Ŋ2UƒT<ÕYVŽH(ā ˛ĩyÃ‰ÅŖ8hX#ÁōØ<u‚ wEœA>ŧŪ†Œ34ÍXozā˛+^8DÍúS˙ėŒõf‚!ׁ’Ģ]ÁĨ1đL3Gz­H?čÉhš °P-åmĖ"p;Ģ\Ž=bõĻįg˙î”&ƒp‚=dÛŅo0Xíĸ]GŨŽ3Ņ ÉWO/ąŦy"…AÜ ér@yßMō"bČ'9Ė ŠŒ1āMMQŅÔoPoöŅG……ë5_Ûo3˛¯ēB \wĪ΍XÂ%´įúŦ(]"{§ÉÅ b( ŨT‚Á„Ä,nķ"kĖ~H`aāBĄÁDŸŅjč“&ŧŪæŦ–Ęvæ:4+Ÿ/‚ÕŠ äöā„@Ä}HÅķá{CPYaeTxDT™3Í"+ądJ‘ƆXŅIQN íŒĖE MʎÛũ!˙56 =ĩ!mä3p]§|æ;ۜÎpBÎ^÷ƒc˜)Lk˙'2Y}}ĐίåÉ>ŪŦĢ0Ĩ–6žÄ™ĩNâ–#ĄZ^ˆ™Ō]üíĻĢžŖĶËæLáÆS BæYü1žgŠėēzûúŠĨŸß¨|ėsB&x°āŖW“ƒØâô#ɍv&uÄ07gH߄&Îp;Tpķ2ƒia:Ã4˙r‰'¯~* cÜbžƒt9Œ}O°_wû}píJvjÜÃŗĸĮËuˆm)tÍŧŽ$ĸKŸoČ ™ņ°Ėö{ĐËH;…Ÿ;'Vg—žY}ĸ˙7ča 靈ąy3˙<ĄLécŠĪΠ´K?:ÛĪ?ų=Ô°:V‘Š0&VŦxԟ$~ u3†čE&ĒM ĨOü‚:įûāéŲđīvŠyÃ|ĩ¤ØûžBũŪüy7|P,|…>Ō`){ zÄy X™Š+O3Ĩ|'Mš-Ā.Š~ŋ‹VÜ §vvîfŨÎ¯Ė°‹šáõĢĒš9ÔõûՓĄ_ ‰/ŋé=ø>:ĩđ e–ë[ûœßnf–'Üɤ=ĮŗääWe`˙1Hšäē+ņũ†r(ôĒBÔāWdŒ—Erx°ZšĒ–¯–÷›šĢG/ۈAĸyškkúŠ ŠZȓ~ûĐÂ^T‚ųÁŪsC†BĪčL08ž!œE\ōiį _ž×2@¸]ŋ IDAT~#U™Ō‹}ũØCŦ­*w‰o­đ<]A‡npXÄW"Û>Á œn<Į‹‘O;ÎūȆ—>öFKđKHŠÎÃ^ÂdDy ZĢė [Ÿ{ØŠ˙ƒ§ŠũĖæt97ÖĶf“i‹–ônœ*ĀĘĻ B Á 1agOÃéMO2#öFöܡĐÅYÂŦĘ Ėāë?ģ.˛: ŗY˛ŽK§ŽŲSo=WLQģ ŊõösĻí9*>Âpę ĸjj¤ãąŽ$(3D5“cŦt˜‘(ąjzį–ƒ}ļČl<,)mÅbæžKëk^ŗĮ"ŽÔë¯˙i#íŽ0UiU>m#PšJnĻ"z<šĻŋvē‡ēsĨ‚üüM§ 4ŪŌ:•X0FZĻ­ŪÆ %˛gĒõ6ÎÆ‰ā€aČB YģáŅ×ēmĻIæZ(,k„īžˇrŲHŪî;ĄŨĘ<ŠWƒŪ Í(c‹Tk2C›Úév7ŠÄŦ,5ČÉŌx3)fUĶ-\Ít†fĪÔ ŨaØ^_[ôš3Ÿ‰Ž~LũrĶą‘Ëb*)į €Ē‹Ø,0Pr*čféîH5Kb‚Ą§ĪéļcKßZÎėāŗ EbÛÚuÛYjšą~ė€äØæßČfŲ2āĨ=Iĩ3Ž7VrefX­_qįO+9mŖvŸ9ķ=Ŗb…v7Ũ*™A>îFO0Œö9{ÔM*AiékkQ#†’"!kmO–Ė}XœáFŠ™%Ÿ¸ā5iג–Vۖ„øÍúT{Ĩ"Â`ŠÕ€Ŗ{JĪ܈a ĨŅá{1(׎fžI_ÂPįhAĩqZ`2›ˆ%üj…™ÚJ+jA­ŠPļoxá j˙nŲUŖ– Ĩ§éĩôõ ¨5Á#%EžŅŦžęÃĖL !†=‘)ĢɁ„á TGuĐ'ÉĪLö‡9Ķ:[ĶÂéÛV0ŨúŒŒđ¯QžŦČx3´ TlIÖQRļŪŲéŪŖķyŗôCgŗƒĄČ?œU_y¸w†gÃ}ků`ŨyĻ˙8*žÎ!Ū”é.‰é…Ë1ÃĶÜɕ¨Ų–QlŌZ‰›Ørđ7ō:æhZP_‡ãCŧš˙u?,@ō߁ÛPn›Dˇĸ?Ø+â­ d†×„Ŋf+Ļc/öŲ¨åÚeÎ,ŪâUK†•>]™đ<{îyMÚģÃÆÖb °ÔĐCÕ ?Aø0ŠālNĢŗDkzęĸĶjõâĻåę1ŧĢŨ €ôú‹] ĐS˙뚭¯Ē!ĩ­ä6ßĒ ^ō›<ÁÚÅMŒč„pđššA؇´tSäšaO6“$‡[`;đģ‘,´ 6[Í+l•×îD NÜš¤Z`m)ōU Tę‚~Ÿzģ Åæ=Ų+*ģĒÛŊzN7 ”€..SŪË2AJĪô¸”7¸0ƒÜėFōt—He&oĄ÷‰Ã^OŒjā|Ģԗ‡ÅåúXÎ.$˙Ë~hP) q7ÛLôČk( šÕUž]—\gøĄÁāŋY]3 ŨÛ"ũN 8˛^y9˙3ŊlĻÍNųŦŖˇĮžĢÎļÂT2ģ´|‚ud bPƒl°˛h‘Ų@ēY›Ņˆã "~QfXŌYeÔ šŌAXĀĘ 0Ę ÍĀāI- Ōå‡{{fÚ:û=ŗēģ_ņ–ÃDŅžâę5Ų€ė1_;–ƒZĢlĖ–§W'ä€ŌQ"1C™UÖ2ƒģjļÉr`wŽ÷ú$é iŋÚË=Võ{kÖ ‘ū;/"ŗ8‚Ē,Ņ3¯îxœ :Qb€˜‘ųĐ xTŖXĄoęå…ÆMZéüR†Īžī=7ûŋJl M› [‚¸6 ‰đŨ(@_}8õ†Ã`đgˆA•ßuƧ$füŠī}č{˙ Ûéī>ŪØ˜¯æZyžŧH H ÛQ 2ÛÉ܌÷÷Āmž´ÅIgBƒúũːĀęđ;ĄŲÃŗú¸ŸtÔ$3 "ŨYÂ:2ÔFĶ ęz}Ūfd¨IcmTkŨ­¯%ĩ 3@ęZöŨčU™Xxá æbŲb6į´f„¯tČĮ‚ĸŪŅÂNPL6ņĨãŊʧxlÍsĒ:ÃX‡Â<Ær %6Ļ ”Xœ>ī8Ō§ĶXvAhļë6iģŒLÁvÍGŗ2 ¸ŠÁ&NûyrČEŊ=¸D"%Pĩƒ,܁ōäöÃŲ%Á:čú:ļ3T”X(ßh5;âÖQļ2ģān ‰!ÄĀLËÁfÍÍJôÖKŖŽw^Š>”°Ŋ1¸ ˇ14Nĩ1Đ31ĄÃ°™†=2ƒĄÄÂøF×2#ˆAg¸V‘&†t32ėŅ\Ô'Æ)îL¤đ6öU§›ėR‚•œ1üˊ2Ô%–ũ˜AUĘ4”°Yˆa5b¨bFÎč(VĮ!‰&Ff”CzeręÔI ō ŽxÅ[…f}ß˙öã;€Ų—`lōeĐQ¤ĻŲŪšf}1T#94Q,ÁņúV‰‘吞@Ī“Î@PmŽË%ŠîN4J–ōdœA ËĄgĮa¤COÁÎŪeްĄą 60Ōíb {œĄ|ēԐ~/ébhŨ˙{8îôáÍŊĸ\qäķp͐ÄĶgSŒ'Z•,3°_ΐü~ķ~”yī(Ģ (2×Ŋ•bˇŲžTÃũīŽ}ی!ą›äŊŊ]Ũ*ét/ĪĖĀĮXåĘt ŋn$õ}0ø{T.@.§Eĩjse¨|jđ4 …šmvëē’lZːÚ|ŸL, nĐë×ę5jéƒ;ōæą™žáķyĖ%ãæo;|9[OC÷O`ˇôäË?Æ?¸ö ^Ë!ûĄ3č¯R“ Ėæ`~ˇŲM¤3Ü04TäkCcyŒ!’Ŗbc˙ŪŪˇžÖ;‡¨T8xƒš^ĶÁ#fZ XŪ Ö­ZÂg‘œËÁD€B/ČF ˜:/’JūåVúlļ坃^ŅÚ à ‘ēWĄ†Ģŋ6?ŠĖYˆė†c•đ0āúęŪŽ\×)5yF&ĄŸ ŧ7×īû¤ŒĢŨ¯k˙_HwœfGÍ’¯`œ!vØ3ÖöĀ<ĘģŽ˜xÅé[l9 Į‚āĖ43ĨV‚ĘɏrEūá­ŋål%'øW`väëËDvwŪ|ʓՄ‹đô?ŧ5égũ—pm˛ėYspȍR%[ŧ‰ÁHÁ¯ČāļëĩZÚēĄ%¯ĶĘfrÖÂíūĪåíVTŲÁÆM}={2ÜP9ė?Ũ/m¯ ļ@l,'–nß5Ī…%SĢĮa؅$3 îp§ŊC—ëĩÖĩõwPčĐÅøÉ”GŠRB-bÔ+‘MKbīzfÔmčt™Õ€‚Lę›úÛ'.Ų ú]øÍpļG‡_ Š.ô…M“T¸1^Šá@ŋNfpA<ēēoōŗķėŦW¯ĀOÄI,æg]5đ \Ŋƒ'ĩx%WŠ8ĐÖBĀ Évkf  ×ŋģã`YÍ@ŸëMÔpęõyāĪ^s=˙j°ūo;Ƙt†AĖĐ+5Ž0œ?ĘŌ %ĻCĢņ͞č׈y/‹ŗ´•š›y‡ˇ1v”":ë¨ĢskAã?â%­[’BË÷ÜûĀĀĖ=‹˙Õž—j58įĨu¯#!8h? ĶÖA¯ÖáüđįŖ6z¯Äœ´lû¸Ā+ŲĢÄģDđRpV†Ys 1ĀC([ÔzŦ›ĢžĒ_ã*æ}háĶEjŽ*)-‚ųīY;đ!Cģ™VŪδ˙3(_.ĢņNc8x@Wn„MGôZ™؀ÁƜ[†8ØũˇîUâ™A 4^›bŧIĩ]Œág˙vpéÖŗ\4JĘSüaĖĐō[ÁRZĻébŌî bũ$†PcåšâĪ.¸ė'ķŸ÷m™üÔåpŲ*Ã/‰ę&ą˙Ôˇ5ŖÅö8^ãŅ+ī3.^Tį°~–ŠÖQ†đ/ö,Ú0¸>‹Ļΰ~Z;ø[ņŗˇáā_Ōķd’ũ ÷Qzĸ?ĸ—ĨĢũĀĩĩđũĻ7:[C[6÷šl;wCá:ÃÛ4Ũ) qķÂ}ĸ &3šxS†ˆ 46•ņŧ€ę4bāAąjU@ŠéãuS6Ē (uI 7ëEl@ ė‰AÍâZ"‰Ažëĸiŧ)ë86PM’/ö0Š&hcv  •ÁÕę´ÆĢFš¨šĻÄāNî§M ><¤~;ūzų#ĖĀ{‡Ú&Œpw~šņ` •ˆ.ōĒŠC[00Œ*Ė*4áYŪn/MÚÍ Ô{d…žXŠęŧŠ1ôÜŋâ-[nŸeËYË÷°›ü‡÷äŨ~s흜~Y^'ĘôzÍû^ˇĐXwšF Ū:zƒ˛ēîÖk‹öDū„UTHȕ!ŲKËP§üûú’# ׎ĸÍ$´įÄT‹{ŗđÜŌMdÆŽÄ;įãÆt˛˙kVĢq›Í‚ÚŧšFmīFƒÁ ×Ap ˇpĪęBøŨˇŸ÷\ø›+Á"fK˙˛Í#‹`ưūw…ypWéub t€Ä ÕČÂG œ€QĖ`&ûuŒáKš)å:ÖáļT Āb6#w‘ĄÄ /‡ZŽČˆÎ :ÅķŽėi&U§ĸÄ; ŌfŠ~ņŦ5RWŅõĘŌāwŸUŊáŪß2qb˙ĀHŅ“åŪØA^ĮœŽŖ<1‘†Ø$ķɨĶé‚ÚVË %%Ey"[ļĮ_žGĪųuāy(u#†Ōū%ķaĄÖ˙hū÷ R âs¸ĻÆŒũqBnČ ã(^\¸qvĮÅßĪĜĒãüĀÂŅÚļRhTԈ!8H—lQ•kŲåv-ŨtÉAĢBrĀ d']2TČ*ĢaåHņmĖ5U8gŅ`¤*áfæ¤äIëj—zádá}öˇÖÂūSŋ=´ÔãTsķ"wN4f …Æ ™ÁC׍ˇV!3P^Öųs>|’…ž?×ô„lĻŌî'~ˆîxîã„tčĩ|° VBŠeđØ[*֖ö>…íû۟Č/*3´uī-Ės"ØĶWe'æČSpēHSĒ\ uI ačIÎAi™iZŨ=ŧÄ0 ōkؓ™˙ÍĸŠõĘÖĖS[†uäĢãũ“ũUVĪĘÔWžîĢũĩîž&˙‚okč<Ž,ĘPčKN 8rãELōNęžDąōŖÄ0áU€üVÜ?œ¯ĄķͨÎĘ!ģT¨ÁČ8CÍųĒķßˤŠÍƒģû=ö K›ũ րŧĘØHZ”uÄNc ƒ¸$b} uzvKŸÃCˆáEœąBĄŠMÔĒ$Ü9 BĨbųë€ ŠŠaÄĐˆC_UwąZŗ_=čŪęé/{ō%_‘Ž:p°#ÂĀ ÛQZ rŅhi8=ŊîŠ|­žųĀéļ+8ąÆ}ļĪŅžĻ %Õ:ßĘ̊ĀÔī‡uÃKķLƒ$°gUԓ‘nĩÂ]Å!†xŨ= 'iØ_}:”‰ąŧAĢiu#sƒ{:˙ _5UŦp¸9ƒ!Ŧqg÷Q-?˜C-U¯ŋēōjNĸŪ¤âß<đĐÎŋL^Ŧ8ŋ"ÉļO ŠŨ!|~c9bčF ÛŊŒ\oâÁQŋIösÍ|îPPîƒBÔteģ5))ƒĀz1ļ20ÃķSí´7…|kŖĻu¨Õ>ĖāeåYdūÃrkž/ōš45|ĄäŧTë=;9x¨Ž’Z*nŧŋ2t(ŋ"ƒĀČGĐé ˙ŅŋŖ ČPô‹0äCĩXĐÍH˘ôˆ0xRo–˙eqĀLÁÃ9‘đÎ:q†@buČ8¯ 2—…ON|SxŪˇĨ(Éë=6¤ÃJ21>˃‚tc†č׎p`x9TĘēŦôųr|ęáqąEPA­-°4Î ~īe˜`’ôlA~ÃH0ŗ×~ Á?F9š;ō&a9ę˜YŊeÜī„}ŗvV°‰§fN‹q‘hT+ ~ę‘`åËI%K7ėÔ2ĪéŨŲŦ./ĶĀæ2}†%Ķ]yÅī>rų"_˙=ëCĻU ôíËĄn6ž 7`âÍ"r @Ŗ’ß”>91čĐ2§ËtE˛Cß°„‚+tĩ] )Œw:ûũgŽĨUËxKûf…ķĢåÉIQJ˛‚aķ]T‹O{f^ĸkWęô E™ĄģÚ)HjŨü­ZCƙgž ”bŒē†éĮfX ›ƒš˜áEq‹ŽŧlÕšû‰Úū­‡x‰üvy=āvŋßĖ+%#3Õ;0;'÷ί(‡›3ŨKL ŖîiKĮrã’V<žƒŽ†ivĪž"s&.˙R†ĀL rLîFåîû÷ĨĪÉD6í&Uųōni˛{ųŽ/­ģŋŒaF9LėˇŨąFW|ĨĘŊī.T”~R‘ 3¸đšL’’ėĨ)8ʉ>mŸHik"8Č@É4=ļ0ä˜ æBđJm_×åõŌĢ3Ũ—.„XΞ@đ=–¯=.3|đĻõBAíâīPË:/˜,;HąJ ĐuŊ”*ž„ažfä/ĸ–…šÂŅÚūĶ…ëĨR%ƃî3LU‚įtĘƒųĀoÔS5™:æĀsđŽÂ^PK¯ŖŠÜœéfđ”†ĶŽĀå1mĖā•Ī4ŤŋbüyYŽđ–įãwގmЈĖ)•ģf`øŨΉ#v÷Ū÷^šRq9ˁl(påꂚÂuÔJwnØA‰UAŦã{™‘›¤Ed^7ˆ1DB"/5bŖo0ΐn?œ{I™­0ƒÃ{†ĒÚˁx”s5t.Eē›ŪSėČØZ%4t“L¯qÃn㍨Ąw’; Üü†Ķģl>úĪz–Jö÷>ô÷æũt‘ũSų +ōôĄ°T‰Æ&‚éĨ 3č™ĐĮ0fō ÛŽmƒŅ q*:3Lsz™8æie3ÃR%é"ÔBL AĻ0°1*Î ŊruÛ? ]ČÎ]osĘ Ų7”CZ˜ÆP`Š‚ē<ŊĖ œ™}Œ`?"č)—ßQdīžZãU‹¯2—\#|î‰ŌLč ėĀ Žt˙ÕAÆŖsXYxnÂĀžž™Ab#i‘_ĄÍļQC=Ɔ|3l}^5JˆŦˆS× Įv¨¤IĐëķ’äsųãŲé"/”|ĻūgÖđÃū<įĄđŌoNcPVņē&=ë6)fĐFR4-ĘõZĨr÷ĐF=ƒlÅWĢŽ=&ętÂĶo_oËŨ.)i5ūČ~âh˜!Ę`´Ũ6Æn1(´Ôôkļ‹u´1:­Ũbą<%e­Îšŗž1Œ•z^Žø{šKKÎBdj>¸ĘÚ˛ĀdƒLTĪ͟›Ę ĩowKL›(t7dĐøŽb`šOĘZąo_ũķBjŦõÜ*ã׹ō\yĨûŽeāˆX!•F%zZE*3ŒhÕ1lįN܉ zˇš¤ĐöŦĖP–Ĩņ ëôv3öëžhŋĩš$\ GŸ^ˇ2퉒ôM…Ųîč Ĩ~Ák+ đ­yČboКąŊŦša*v„¨}ˆ!ËBãåYđʏl9Ë´ÅRĩ¤āœĘ7‚ÜjĸŧöįôgAv¨ī’˛˜9 gŨHúˇ¤Jm_é =b ˛,E]XWîŲ{´íģĖœQ"¤…ģ–ČiečRŗéŠ…4éuVø§_˛ũđÎR<+UĀiėÖēĸaŧWzí† áBđy%ĒÍBãk&2ūķĩ§?eŪuˆÁ\ b!&‡jVƒ•e’“lø)#˜÷.Ŧ„:QŨ=žé[Ī:>–øeפMrōOĻDy9ᇆ0C‘3\Yú•äa]û¯HJ? ģ&ĸ Z­}ĩz‹76…žßAyŋčAÚ÷ē„ķöŊk ŽÎΎ?›•?oŅ–ŅÚƒ•MZįœnĶ6*•ОlÉ1dU9ĀâŌßN?8/íqˆUSŦZÍĪ 3%˛ŽUg§Ũ}‹ļŊW¯‚ë(ŦĻ1ddÄĀ“:ĸ-#_ŠŅ+2˙ąš+ėđŋ8Äõh†> 5<É­ĐūÜW``ąžÔc†NT_Ä‘Q`ŦŲŲXŧ1d(Šr…NŊ>k…zÕąĘ“šŌˇhW‡"„ŠÛrÖrßl:Ũ(`]}ųŸ¯ą§ŲzW^ģ˜:=éĖ}âÃ/ų;ōl•ÅüŨËO°Â§a* Ã}N1}¸”ļËsŒOž†qũ^ūī͂ŖÕd#˛î¸†ÎË[Ž2f‹mĄ‹ ÂfPĘFn“MŒék…<"ÄŗãX' \ĮC€¨Äp‰˛Č oē7â;ŗāI.AėA wČbˇ+î˛eyy ¤Ų Ā 'Hų yz …QĻûúËĨžįĖĨ˜°¸æĐ’äŲ°aY^ŧSK‚ĄÅÁ˟HĪĀĀã_Ĩ<ļÆDËđÅÖé ‘öü8|˜Ž/(^´žŌZžŌÕ9Ļ4D,*)-" ) 0™AŽŨ&'ãML9ˇaŲDĻ}¸d]Ņ&¸ ë-yšRM8Ox}ũw‹U֘ÍO=TSĻ-IcđC/žš`(g Ch@Ÿøa¸ĶéVÚŨLęĪØEJ…ŌüUs)ŨÁgtĀ 4@ą“¨ŲŌå€ūĶTˆ!ōšχ/cČØGJwIsoŸC"1QD\ L›?Í qTôZã—0\†ƒ.Ŗf!õĎ4˜ŗ´H*„ē­Ģ2įÁ鎴ŗˇČ`ŧ9ÄŖ_[īa°Ēšj]…ŠL‘É[áčŦ€bČĐg“ĀHē7ėÎĪ&yP‘AˆZ­Gn´–öŠķ{`ë¸ >Š4Á´ü¨AG~˙ôŸÂ„ŋŸŌ]ũÁĶ%OŖÍÄōGšÆ iVz*šüˆAĄĪ'€–ä wë3C9IH@Ëg Īˆ3$ĻĘzōKĘTĐ.Ã:‹mՃjņĄ§iJį3€â ėø¤âQN(‘Q1˙z,#3hC%0rÆ ŒDŗ¯P­b&ęÔ—ŪŖĪũ—­įw`į#‚Ûč ųâ“ļ”z&ØķŅ:îûtûÔ&'›7â‡|†ļҍÔvfią‹âÍÆĄV‰ŪŽė m—>Ώ%"‡AŲ֍$mRšg[{Nm}D4sž4DŸÛ(–¯ØĐVÆwfjģƒ¤/J­;[ hfđb†!w6:gâąČēzĸö4'ZβēşË9érXVįZúŊÃpŌã˙8ÃølĐM KŽŦQæōÅÍÆ\ːĨOc€ҙħ1\ŽũÃĸåģĖÃwÜũ>Ãø“đ;˛% Î0ĶŌ#Ī$ca¸ö*ž ûh!÷ȚŦũ|%ŨLīĮ Ųj æl= Å×Ŋ͡ĀđĮiíw™õOŽwÉ ÃG›ÖŊ_tzÅßâūPZí-äąÅęū Tņ[‚šKMĸđ9G*1ƒ˛ŲØä‡į$Úļ; !-fhęėD Šü8CÅY”BņIaü 'J‹žqāģĖūˇ ī•ĶbhôuĸēČMēWp>EĶģxÂÛ7ęÄ}D㞋:Ö˛ā6ĀÎZ9Õ|ĐP æũ}+6´ė÷f-1vË €Ų *ŗôÚÄЀššŧ˜AʏįŊR՚Gtwˇ ]E*š\DŦH`†ŧ ‰ę-ÈáDpãžCs~A-)ÚÖī^ôV}?ķʅP. ÔķûėJžÕ÷÷ģ „áq˙ ø v /W¨•zÄ ÔŽQBƒvCfčF ˙'+ÆĀë•$ŠM¤0l §—Íˁ„?R}úƒ~Cfč¯h'1ĢjĀŊč„ÖN¯ bwĢ/Ē™_‘×_õßîHžb]ˆ PÉUĄQOp°š‰'ŗŗõЏ˙(^„4Ē6n\8ŋ‡ØØ“bīáĩ8 gÕ~€>˛S@nw‡ĻšĻ.r IDATeŲ`7f(oThøō|Ō ››Ä &ã >ŊŲPĻÕ;t”0LÁIQ¯9OÂ•ũ9™´'˙Ļ™2æÖœyÅsú{{¨{žŸvvzŊ‰ä@ģõ•n[Ŗˆä`-Pyawˇ¨Ōdg‘\ƒP‚—.D -Đāt›Ų;ÛRÔ,\L.„˙—…“ÎÔpßąįËÃļöæāÁ0 –ŽK”“ĸHŧo[2‚W‰8¨Æ Ā >˛ŦlâŠDWņąš%wyüWé3H32|™kĀ(ÐÚb0"Â!đ2CTPŖ€iWŗ*žš¯zjÁūK¯pš¯6ŋônz :’DŲ^ōģ5†¤Œa°G¨ŪC8 —2Rta1æz@î%(õk‡o{éĐÉQ—ßĪl“ŸŖˆ/z /˜ŗ˜ļ WаoõW“ÈŨ˛Ņ¨C Ũ†´kĘrĨā)ÕũF͒‡Ģ› ÖŦ#§¨ēäčųGŨčķY Õ;âís-{¸Œ¯ÆāUGōFžeƒKîZ $ŽÎ™šŧëØ°ã’ĻŋēŊ~æ3c†ĒQû\%‡Fp ˆ/BøēûsšyÛ;Â,iū6bxNvĘ2ôÂøkp“vĪ|0ā™zđÕŗĩ} īģķÜÎŊ{į(í(-ú)ūÂÁŠĩ˙Ú8pŌ`͉u-{nÎā–M$ĄoBzR@ ĸųYĮĨ×ÄGōæjöãEĄ÷b[‚‘õw¤ĩ5xjIˆÅ+g=“ōúļä‘?—û×{W^ŗ´7‚×hĢŧ=ŖX)3Œ÷\ 8öŧĶÛĢ ‡=(ūÇßQĢ™~Ķų´//Ø}¯“›OUÎqė}úája:ƒ+&įwe†‘Jī ’wˇ[ÍMķMFÄ ‰2¨Ząû]ÁÆČnx'SŌÂÄ?†Ÿųâqsæ[Îßû÷O!%bāæ ūôé9vÁUķbrˇ ŋĮŦ–~xfŲä5Ī)˙ŸcljQ@Ú#6XՊwĩä­^Ŧ™&‡´PA‘W8÷0›Å;œ´ZėŧSĶAûÖÄ/ jŗÍRm(âí/ķGē ę2%f@ÍUĢ@FV=HÉMŠ[ķĄíŠũ‡ƒPķ‚ŽĪųvü¤ŗTyÁ°…ũ™Ģzņž AšĪf ÷8o‹3PPÕ$,Ác”,b`žDLō§ghÍ Køōī$Ėĸ%īčŸũeéUm>ŨŌo[œËŋQ/0EËCt›ûÎÛWaŦtOĘ3‚jūpJØW›z$Ÿ ųūeuëÖ˚2 Ķ+ģ€PK#2ÆĐŒÜ~Ā6\üÕfdĐžÆ€õ[F‚ķōÕĮ‰ĸâŖkt•¯UŪäķ;Aąi„˜[´*dDbˇTŪlĖ Wč7ķ—2Äēđ ūŊļy~û˛•ty"ļ͏0¤¤’[Ŋ=§ĸé1Õ>7eЍ™‹Üų…dsvf`¯Wf€) ¨ž4DČĢĢ!ĐG€Uͤ$7jJ /€œüEˇĪĒÔ:˛öĨ’E#‹WĀeËũŽgÚ0Ũč¨Sq;¯ÖM™ÃH™GBˆ)J7f ŌpæB “1^ų €Šš&-ą@ŗtáKGˈĄ¨Ō.RsÎi7 I?ƒ¯â/¸Beũ"ģ|ĸz>‘<ībÉ`C\1 īå`CƒFŽØåĮŋ-=y4´„Yfķ8‚‡Âŋ¸ ö)XQãÎô5áŧÃôŨz)ÆĐĨkŖÄÅ(-8‹y gú¨ZpWĖE—H—÷ø¨š`´t+¯–,Å_įáĶŨäā„Đ„J[ß÷Ą× Æj‚Īørž_t8eâČŋ€ŦËĮ ^čžcDʓœŒĒĢqļõ•‚šb.(E Ŗ‹>C ¤AÅÉbūúŗ›ß†ĖŽĐ)MđЋÉŲŋ؁T†ôųąLg0ŌēlFB jw]͍ē¯ĩŨfQ‹fĢŌ\ę%]cŽQ5`P œ ˜ŋ†2Š…ņŽųc”uYQ~nš ’âM.œ Õ™—7”=ĮĀ ¤ŖŧÛģG? žbá'ØSĒDąĪ(é"Ē~õöu7ĘۏGîĮŊ4a3ēŠ˙üŽę‹­ĩakș:õ%E)°3IDf„Â!Ü.ö }ė´ LޤOī+ļ/ŧãęđ:sŸ|?øĘĄŅĸ>ģ4ŊĒæ‹msJÎčuÇWÔY=K°'Ú!x6ūԄ$ãzŅ%nú$*”íT4×Đ¯p‹¨ĩ⠍–ļđJ1ėåÔ:hįi–_Éĩ:Sī–`Ÿ(9ĸô ŊķŠŋũŽ'ŨĀ4Ô4S)Nvė-ķ ËÖ<vž€Ÿ†ÕŌöč˛+ŋ ´(éúŌč cdÔ4¯… ¯Uõ1ĐKĐę´ũŧQüI ‘/¨õ2 ĒRžrB;›đ ĩNpåˆvåí-ĸrA^“ĖA­qs•÷[ ėRėemíT•[åL탋0ÖĒÜ&rˆ6¨žfw+ŽÎːcæÔ9.ˆô ŗrʕ¤įļk>Ô:Oœš%–≞ņäŠs2m6ŒĖĐ”ģ KŊ&Õŗķ’OɑĪÄāś¤&…“Z;Áķ PÉ3 žsįzy˨ȭXäŅ0!ĀŠU§ŸĀžŲG´@Ķà ‚Rų@ʁS.č \ģŽ2čš-ö)eŗdķ^ۊ –'ęŧidˇÅ~¸`ēģĢé ‹f*)á7ƒ¨ņË$~_E-MJkŪ’‘ĸn”R:ŧRõC`ĻŠŅų)’CĻ38!^×vĄ'`ŋfb°r†¸oi1dō(OZA‘O ņāŊ¯Ä'ŪG#88ÍpššbßŌG )×ܕ_-˙ûŋöLĄĮsĘFģ"áßú*hĖä3# ØârbaHŪ˃o…R'+¯ŒuĄįģ„šũÆ ą0ŪhƒŽ`ˆؐë2úŨŽq A æŦl™Ęíą>M—WĪN0\+iÔņ™°Kŧe.Ā;ū|#”Ė‒ûĻķŖ;/ü0ĢâŲ`ÉĄ[ʓp\(ūs!xŸPōá_s=ëčXwŦŊ@7Jpss_˜"ÜYī—Yۏ͊_Āõp øuņܸ‹Ü‡k™n܊•V`ˇ4î-0+­ö§ Úŧ^œÖÉåyF† ŨÄ<Ô Ę؊EŒŨqBģā@ž/$#[x•; ĻdĶ@@HTSžŒ1ŧ_}LmėGtÖŖÁ…ĮōZņŠŪ¤Áș”ĀU\)TīŨuœáö¸Dč’.wŸšö§īūž4׌ˆÁ“r1\ķÖuŅĀn§E'‰Ā_Ą’D…"¯9‚—˜đ`Če^’(8Î[ÚŠ&f+2(ŽÆ•”nœS8b ^3˛ŸT°›ßޞŽ9/ ĒX)Ũ.Õí›×Œ>5ËՒšŅĪĪ 01ļmԖ J…Ņķ.Oø;á+—Aö°Ķĩ3*ęˆ[ Īü—~‚ĶÃ{ÂŨŽá‘VœM=™Ŗ1xËIe3’\ÁæÖŸĖđÚú ņáãn‹YåļiAę.m.øÎZ˙÷čģ>Ûüøŋ âL'ÂũA›ØČ礠sT’žļ­ RĘÎæÍ˜Ō †ĄļÂn-˛~ēuˆAV7ŲWˆĖФ’P~ˆ3ÔĸĪąYAí\ĮÁUJU—TYŋ%ωÃô“–ŠâYEJpJ’å°Ÿˇˆ}Ŧ]ˤFKl–Ávõą_Ŧį5JķąâĩÚåˆa3 DīÅ nô4r<÷Ė{úũīD`tâ^û€áN3æ8Ä`õõÎ)(ģĄˆ•ë~ ŋökEđR.Œ3ØYÎ jGļu;ŽŊ´ūjMąųõâĩ@fČJbčé(u“ŖĪŒŒ:uJĮ]˛2˛H í+n4ŽôĮ×%ÁĶeAŨǟPhēŦú­ŖŲ+ KYŸÂ „‚nnnáI0UœIē-ßât™ĄC0[0G­€B `\´¨Ķ„Oƒ ¯ŌĘĻ1Ė&‡Hīm#^ ¨5{éw8ėŦû¤A%‡bI*›ŽXM1 †ĖUzļōsy8ĶÅBÛ×^íQ>ĐōBD‡$ˇø!Ĩ+sŊ›2RwûBĘ˛ĻŪ{ 3p…Ũ8Ova†sę"ÄđˈWCĐÔ^C2‡üiú!āA&ķ¨ZQ—}1†īģ"įŽĀˆ”(›‘yŸé I rščÉ,ō‘Ŗ{†Fk2‹)ģ=1@HtÆĸ~ēcypüg{p4ģ¨îë˙‘é{m™ŽĐ%ģ…ÅÚUrEŠØd$“Į\ūĪņŲGeq?1ž¯Ŋ˛~H(ÕOН9Ĩ1tg)Z5ˆ3t¸Ųē´æ@ËåĘvĩ§Hw:ÆiH2vĸĻ͎ŲkpPŒŧųģ°wT;\5gQE}ƒom›ķŦ‘´BĶ;" ē(ŖũՇīWZ ĒŊēGÔwî2CJš‚-<0gvtŅö 'Ē÷üûžũÃųíŠyâÁšą›IÕ§BDĨ.wjķ6Ojœ’'šZ!æG åŦ¤mM“ÃaĩÅjhŨĢŗ!û!ŽËģáĩZŧíķX—I|@ƒí NŨļëÎáLaÎ:…=LšĢÜ?ŪCQ]R5iÁëĢŌēŲ7ØÜ,įéžoQ]K˜—ßiQ–3i čŖEŦtPš•+ûšypŦPÜo›ØĪžlgŅđwN!hÁŊĐÚ§g"†\_æõšëÕáĘYæ^÷Í•N•ŅŖkČ1÷?Ĩ3t1Z–P;9ĩY͍Ļŧ–– ÄĐ+3¨c ƒgŲÍđZbsŒšš•{ģÄtbŊÎúmˆVÎīčā ōš\!ÔŪ˙x_U•{ĮįgPM2Øciyä…æŠēš`ĨÚՉÔŅŧŨ˜`]‚!õ&Đ+îZŸĮ!ĒžõčÜ(Îđ~×6ûáĢ8yĸKpxGÚ,‹t7 ’R˜Ëkm1Ũ)‚ÖÖXZ`‡ūļššā˜qÄ`œŗFÍpÕ_Ė„\]&"šH‹å+Ÿ_āLc8Ī‘î ģNß6OSMË[[ŒE"Pe)PÚŲWÆöo­0Õtū¸ĸ….Rä¯/•žĀō„Ėäx(¤{Cš¸÷ĐvŧĄá2?R‡[e‡`8|vÁŒą\ļu;ëÂ~˙TĨ3Č!M<ÁV f´ŽKb8 D @ŖÖ~6§ÖŨ¨­g5kAáCåžÕõB~;õVuĐ5O3vfÎÃ͜QŖ ™Ŋöškė2Rsé i}¨ˆÁ¸I,G F]§Ŋ*‰áˇLÍaŽqũ¨%_ą%ņšdŸxĒũasæg6p Ė/V´SsĒÃĄęY5į‘cĖ›õ-Ė TÈA\ۛÎĐĢ GÚ((„E<Û0"6öl.׍´õÆvũßÖtr  ųU㞟Ÿ‚aéÎq‰š:ŠÄ ÖÄ`Æ­eu3€0ĨԜyäŪš¯14b@ZwzŲˇUaõŦt÷ņŅĒeđtŊM[l9ÔÆÁƒÎ g}…mÛø–ßĘSĸ'G×+u§-ŦOi#æTąZÍ i`ũžBŪ$oŽĢŪÍQZ P„Ŗį‘{,āžŋÛ|š=VČØÕUCĖŗķÃÕĒt†ŽãŸ‘§q+MĢ•Ģ@2Y”š6Ɗ<ŖëęWÕ¯‚SJÛĒšUP{›+V7ūåšûūŦāo:]˙ē@dBđƟŪÚŧëž.8‰MÉđ„æ|l9Ø1TĮ’cRßņQ’A ĢLĢ{ū8'™äÔ(ŠF z†ārØã=æŽöĀ)`ĶŨƒūƕ:7MŒŪ ĄtŸUđUOđæÍU/ŧ~ŖžĐ †ôrŒžÚë•ĶĘfÚĶĻΟ‹2DU“pፖĐp9U“!ŦVœø4ŽōCoXšĮ6ŨæSŒĢOކ9'Pũ‘×ՂĘõzAĢŦw#†Q5Ģ- –ŖƒĶŽ'ˇpŲ0´Ėúíã5gBÎËīzĄ'æ‰oÛ˛ÄĘÅßôZH]xã°ŅLę@Ũ¯īŪŽîxú7MΒ‡ūčŋķģ˙˛~ bČÚLgíC vV[,[ËÕ8Ķfa˙€Ŧ1Ĩ1¤‘ž^$LëŦˇk-ĩ Šg\ōŅĀÖIņ‡OũĻc`ĸÍŠËí fÖ•õ<ČÚaÚŲÚq'Ė;l*æ˜&‡§莩ĸ¨Ėå Õ7`HJ3Ÿ´ųĩ-âFĶ:ņöŋ_W{ Ps<õ1ūĸƒūßßģ;Šlâį{" |ŗ?ĘІ•TĀ5ŧ#ģØÅôĄ&Yĸ\Ū­0xhižsĒDÚô°X ,Ô  i>Á†a?yŌ…MãiínIö’ÉÆ~GŧĘŧ—´Køc‚5Ŗhyōf0 Æ÷Ž—íÉßĢĄNĒ?hqđ ¨K[  ō,+ÂP[­‹Ą.žņGp}ÚÅIŅķE Ã5ÛO~r”Ē<&ļ{2âë‹ÄØķ)ŦĖ!îŨ/¨­%E>ē2a@N‰HbøHubq‘˛uj>ĖĨôēûícsÂ>šfŊJļ_ßÖvhtÛįņÂΌÁđR^3mēĸá;žcŌ|ø}˙H0ĘpOÔŊs܇QXVŽ—C ŒO܋0 cK¤‹€†×!†á-rÂ&æœ::Įɡˇ)ŲáYL'X˜Õ1Ēę+ą>SŨd°î1h0ƒš˛čŌķ•&U×]¤ˇĖ)ßäWÎIeˆ…ˆēi =jHJā`Æ īŨÍ\ׯá!˙ļ“…r#Â_ەîÎ`íŗ˜§!ëéQUŋŌúˎŽ.÷ŽÃĢ&3üüG¨•ņĪäP´îĩŨe`q—uH˛FUCDŨč*I›ÄF-í†MŽ.ú˙qv.pM\ųâ?“D”’ļâJ™đP¨mW”ޞWʤ‚Žģøęk{wÁGĩ÷Ž-vģ˙oĶĖĐĩÔnĩZC­ÛÚŪŨĩÖmm¯­ BŦûÚęZ›đ(ØɖLČdÎ˙œ™$$mī=Ÿ’d^ßųs~į÷;ßÉš †ˆˇaÛõōã‡āWoQŒŠŲab•ŒÆ°įa&[!Ë!)7)ĢSŖ+PVŨ)wÎČģ }×Frģ_Ú ŸVĀ]ņzl>ŗĮ!õ|ˆÁ#Ž8Ža §§Ø´8ŖŽQ˛¨‡Ņ}Å~ū˛ŋ×qíü]Ũô{ߍ ÷yßīķį:ŖÆZŠGˆn•Nß°V¯bYÍ4s‡}#Ųl!šM‡)^`đã‹(Xũ÷ŊŪŖ#VĪĢŗõ€Vė…´ ¸ķ › bX”đē‰ņÆv-ÃįŧĐé?@Šį %Čģ'}B1bHœoļ3Z˛€&AcgA†Ī?œ:oŽL[Ģ}R5 ėîžüĮ,ksNåĀląÃáÄ~ögįūž…¤Ķc0ŅŊ×ßQ"œ?Āāoįė÷q–„ēšļ2Ä8yzčë͝oFF)f`„†ÁuTd¸ }0˙ūŗhĩrNˇąĻ=?ЁŋoŌw†öeŊ\w_Ÿ)ÕßÄiâW’ REÂĩ đ˜o{Ÿū“Cœ‰ķí|Æl 2hŅ's°nfŠ Ĩ°1›Í3ĄAÖ;sÂķŠÅZuŽË¨(Ŋ΂pt+3Äđ+AoŌĨ€_ļ(tú¤iˆÁÂÄ01”G×Máķ…Œl&T*ĪtĘĄ%ķ‘ü•zbRz\ãĀaÖÍđ–Šĩ(€ÅéeY.cÜâÛáŨGØ!ļ ‘ĄLĐĮčōˇLHĐk–Ąō°—[ō°˙¯Ÿ¨wOõƒŪNųCLbŧ<Œ!jg—h›āũęC*§TV9ÁūûRp7TU—œKH7ūÚ簘›!Ü7Iв]žz̓ÖЅâ'Y^\RŪoŨ;3€fy*Ę0†¨Ôë üæ€~ėÕŲ‚ŋã˙ü¨›ŠX[~vÂę‚ûĘuĨúbQĩûŦ†Ã-ˇĐ˒Ŧ‘â˙ēĨPûߜEéj¤[ųâĉ'0!Ę3!ûA\m;ƒôŲí5Ūátļė]VõÔĀôv˙1›Ķ((P?TĩŦ-īHX-—ëqc\CëĻ'ÂÄųĻ"Å\œÃõŨ柜žø„Ų"18/p.2\ĒŖ˙É2ajÃîuŸŗÜ^:ŲZ×ļ{™NéĘüĩ…Íu/ŪūYĄh‘áqÁxyhßjã}dŅŋ=Úü<Ž˛4D0Ŧ}…S8°‚ ʋi"ƒ9ĀpAũŗ‘“E†ėˇ&Ëū™_E{)U]]ûNŲ1ũ#˙ƒ6īaČh’Ō„âôšŪ‰^ĶĪ?ūũ+RĖ;lîœŧëÔļ¤đŧ¨ĖŦæĖÖi3ˇ0ŊtžÉĸĐQÕHæĶÂČ;ĢFN–"†{ÛHÉē¯öžp z`øœwŠÍÛ_)’ÅōËL´LŽŪ’šĪyĄZ“¤uÆrøA•ęĨ°įĨ|ąJŲ… SŖŖĖ ø4Ôú¨Cr¸ÃÂŲd†ėšwdK æÖ I c†ZXÄ'˜hSÎ/CŽŸâ‘›$Xí3X’Ōtj@^°ŦáÃ??ö¯æQ†°ĸ!&cĮ ŸfRÕÂĸSâ4Ļnú>„ûęQ^0´IsĪËĩŪÄG3 Öˇö-ŗÆŦõW÷å3Ii@ bÖuvAû[ÔåbBĩ¸ūč3uė¨@rĐ4ķ9MĒįÉĖ3'ĨętĮđ[ uŧōūÜÛYp “¯Ö¨–’: ĨŸnˇ =lŨ™„äĀ?žÅ œŖŽT ŋÎY?9æ5‘¯ė<Õjķ÷BoīËN:’Öc†@ IDATa¨Gwđw1—^ļ9‡¨ONįĄ§? BŌņ#†s"ƒ1 ŧV/Hd‰ZųHų| iŠTü˛>‰Ë1&á8;~†¤Ŗžĩ"ũāđ\4.:§wAßS=ë¯.ĶšĢ—žƒöģԚ˛-‹ĶĸŸâ˙§áXUÎ},,Ū” šüž}Ÿ4*¯^ŲŊ\nOpef´hJ5+N÷}cQoßšÖÖŧV Ô ‹Ķĸ^Cp8Ŋ'—7á ėbˆŠņ$­æ !{Ÿ…#˜{ åH–Q7õī^žŅI\Ud´Õ[d+Î\Ā•ĢîĮ­ˇ[į¯Îx/ŌŊ?ßRڞhH˜ââëȒžÂ҃t8ƒIt{=¯™Ū7Ls÷ÏįdŦ…Ãë…×ëvĮÃã8ĐË:QGøMIˆÁĨČ8Ë´%âÍį…áû¯•† ļõ‚ʐhXö`?́^ҤģGŦČН–5`#ŗŦšwÅNúŽöŪߔ­pøUáéL­ühÕgPC‚Ž G?sŠp"ûë‘GNģ1CØĀ˙ûLŠäÔKÅ\ŗĮ 3,[áâŗCûŌPx:_C6ëzÂīÍõŠEË6“žƒÜ}đp˚[!['lǐË˙qUĶÉ!¨+áVŠč8P}KœÕĢiÕŪ¯ 0HiëŲļÍš†O’ēQ^ĐĘnŨž+‚GãXŠ cčÕŽŋ>1X“ˆĩąą´×ƒĮέâP5]; 10F˰jžwĨ0ņJÔZÚ>Uũ›ÚSBĒÂĐ6mč Į{™ĒÜJ(ÅQR;„L§V‘īą9*‡JYį} A÷%ĢÍĖV_}Ü˙˛Ícũ$”˜= k4C͙\īmđŪīë6DØpd¨†‚¤ &ąf*ŒĄY0F0ŧdhŸŧŠ}*eÎižīŸ˛ŅčĮ—GÛî*-áŋ˙A7EdŒî°„øb•wĪ>$\(•{W“ŋ5?ŲJ™Šæ"Ŧ‘ÔlĐØZ´ˇ…ßČŋÜ@Ŧ,iĘøœ[YžĐ5#ãé}?|üP—‡wâ6|Čŋkvš xæ>80gÆjud`Š/xo[tPbxHî]nL\e~ę4uôžƒš;ōôyŨzĐĮ2œŽZn ģIŸîYbĨōâŦ/¸ĪËtÍXđM1Ë,íHČ7ˊž-Š9tâ8eÍ˙Ą¸é |Ąâ#Od¨I–s˜×aÎí'3†välŒ‘ĮȔė)ÍF:Äpžęˇá ×vé=yAÛŧnáķ˛G\é ū‘XĘ2Åš”×ÁŒ{댜Tˆä>AKĩÍĄ jžmD’ÃÚO˙ëļ$i#H§¨ žrûԉ…sŸÚĄÕ*d2€´Ŗ væđ›Š9/9vøŋŽŖ ;gҏ JųႝˇKoưÍÖĻ ´F-EČs%†KŪ—CEŌbãíH΍‘É5{J\! u CX:ŽPø‡¯‘Ž"Yž˛ę–]wf WŪ…'¨;Ą‡vÂūšƒŖ i6]Ú <ęjü6éãĖ4Äe0EÚ4Ĉü7ūZZkķJÄÛ8žö×9o9ëUŠÎôŌ÷é׎œI¤’´FŌ•Q÷â?ëûÆ:DæƒŊ,ÍĶV°ŒüCzĒ÷’ÃņÃãđ[$t*R‹ųĢ*JøWÂNJ?Pg3K-Ÿ=}ˆöÄė‘y<|?ÜÛ_Ĩ(ޤė섞Á,^—¸‰ŸÁ|'Ū¤gC1U•ÅY,u?ÜMšÚ…yŋxGŲãŊŠ?”p–*¸Kģˆę\[ũ œ}ef˜Ŋŋcį}÷amäŧš•ķ æ)ždЄ1āū6ĪqØO¨ķŊ~ĖPHĘŲv‡úúŨ¤+VČøE( TėĮÛ_ÁŪ­@{„¯ž“ŠŽ^åŊ‡ŗÃ&&īįj–˛Įb¯ĸjhæ"dOÉŲ0†¯~ˇâ@ī;û‹ķR[6O¸Ī¨ĶrÎbR_ŸNšĄîž]‘#œ!"9ûvü­~Ŋ ŽËÄY˙“ÔøX°P <ÜņŌ7 Õ>Úĩ](ÉâŠw"=Đå#ôz”ábņ…Ô×˙‘˛ôßRëõŪ÷„‘†JA¸fũáCÛĐ9áøėŸMŠ`øĄĪčÕûĒöÔ§SŠmÆb•07‰z[Ť)%hS?Ūw´ĸĄ_=Ēĸ< ĶĻMcˇĘķÂė[/¤fíÎ×åĨj6*4Ņķ>ŖÃ-t˙Ūwĩ!{Ķ_‡ŪĶ6ž¯JUŸnk¤ˇu!I˛E^Íī‹ü>¤ĒĐYzZ¯ g8ítZį}qāüú™wÆúŨ‘_ũĩˇŪ§ņ&’ ä.*œÁŠj52ŠĄe4°ī[ņaäéB{äũ<;*Ō“HņZÆ™ooˆP[Cō:ÎËãsIΘW#8šõB#‰ōũôuĮ)ÂĖR›×ÂjK:ø/‡Wöxô¨9ũKę *ĄjŽėŲЉR9üđęōđčĢŽ3Q c>Kūf×îS˛ÆHžW˛Å÷€8ƒ.ė:›¯‘eTËØCų5úĒÉÅØį ÷büļW!%8CĐŪĢËUárč[nÄGė¸zŸš=˜n¤Î*šO T÷¯žΐÆ*]€ęõËtŅmˇŸL+HLOŠ Nœ~īÛÄPpˆM4<ĨPnĀĐą…ÛåS_×VöîBôŽ6߇ÂģlMBßxëĸįpĨFoå/ĶȲtDčtį˜Įü8Cßū‡w\6’§‡_GOh°…ŽåũoŪsöåÚ×Û˙6sMčpŸēŅ(K˙$°Hų&ņOnĘÅí;FŒœƒáô7*ŋÛĻ 7lÔāœÂl‚–žEųŧ‘7w߈!*­÷öŅFÁ*ÕN~„ļmA†ŖWpCˇãKųŨÎĖæČkčŅī´‡?÷yHHZցĢMīÍä€|k<wXdø¨āMžTo-æ§Ž˙fpŪ[[Ŧs>â__rÅ2Å~qFtČč0†šŌpĨt&üiáĒcpCŨČŨpo}#†^ëO;/ąk_ØŲÆ×lō>W°#Õ-Ĩ~õňü­Xō—Ŧ‘›™šÖPˇãö¨[DĢö÷k‡ûŧf˜ŦiI‚B= Đ)žŸÁ^˛[Ĩ/zņö/˙xā ū…y\lAēÁ:ëôY?P~1ĸĖŲÂRąŽøFūąģœÚ4†ÁGG4čīúŨ›°m mžÄŖ‹ģÃeÃ}ō‹ lã?ūxPŋ{ô‹ŽüĪĀk#ĮŠ/ŧļW´€/MSp¤)Z?¸GhäēįŋvLėÛ™āÎ)PČ€øÉAųQ›áĄ)įFļž˙Ōîķ1úAēŨd7Ŧå­5Wĸ¸b՜ĖEéΞ…—8Ŋ–VLč•Ö[}^ØnÚ1Z‚:@l/ĸüîņõC(ųÅy Ąk|ˆabõÚÕrĢ "ģ5w<†°ĢZŨäņ]z{ņ˜ˆ˜ąīâ'ᚤfÂ/ĩĮŸ-yOÍØG=Mē šĩģđaÁ<"Ú.‘Ÿ’­ŅwƇnÄ ­Á–ŪߊæĶãø]ŠÖ^ĮGp,ņŧūöœü„„ŊÃģŠKÜ#搝 p+ Û F&ˀ#ʑcÅąęžâ‡åˆRdøŽ<˜‚ZûË>ņæ´?eLo‡Ä€§’Ÿ„ģŪâ3:ˇnŸŪČ39¯ÛÕ§čŸ%ōwĢ äŨyJKēüÔ댺"`n­ -˜a’T7Đ Ī_e#ĮE†ūX˛'Oœe[jšíƒōncÜ^rËÚãƒO 롗rŅŊ^TJē(j7o[9Rp¸ž‰ųgÁ­eĢøŋäÁts'bȋ#VgŊm6&ŋT7fĘĪ0Jûī ÉĄæV‚b`BŌmŅ[IŠŋ­Ŧgé‹âG&–ËYķ‘I(ß^esQ-E °h2Š.Ē+P&í[æ,<ųf}Žė4f€īå¯OqôTö@U_ĖÖ˙ĪÛ4ëŌ+-˛§˜õ§FõCÜEŲVķ4ěĪ|Q´{TdOŒ” ābGÖ#†¤ōˇN•.ĶQTGP[&Oæōūš^ļ”š/™ņTXIÂ7æVĪšÎ†,{tß ˇä°Š›uūÅŪŦĸnš$\ņõ^72…äd` u^Ē3›+ÄpūŠmüË ‘{ˆ‡Ē0^ųĢ÷…â)ö=Öví¯ĸ‡\Ĩ$›˙ÕëO Šjn–‹dJ  îRwŒ_7%S­?¤Ŗũ[ŨWā0퓂į“Đ;õ•Lī Ë^´ĩ‚?ËāተŗĪZŖî-ÕMÜ66yŽˆ{úŠ žQV1<ŧč|ãØęJĖĐ O:ĸūQlņŪCĪžœ4˜í+¸œË/1ŊÁãåD@M°qĒ˙æĪMu“NÕ/%ļÛvš†Íũ°C¸Œģ˜^Ö[>Ŋ¤•l)Ļ3:cN‰b€9ˇZčÉÅIWėŋ°\úQhũÜbe3Ëßۗ­õyĪ;,/$ķk§QūyŽc•­Ü ڋž„ ëŋ>H1™rJļZČ:X´9į[n5nī\8†Á_s_-{+0yöw9đéQwŦäĻ…ûŨ-ŽZ…‚¯J ø ÁÂdš1-U!q‘F0/†ī[ļūĀ›ļÃŋžPđ ũ°Ė¨´|–4ego1Ūy&æd]4ÃųkĪ L.OúÅąáŋyŠiYRßöhZôJZĐ3Ø-uĩ1$Ņ~šPĩU›ÅmÂĢxÅ*4ŨHoP˖–üë Õ¸ÖNM9%ZŠ62xyô‘mužŅ-ĘiPaGy!-m@‘5°sUÃĐĮ °ūųŽY?dŽ5ŽņNˆü%åĀÛąz1X÷¨x8Įēn+Єo:$@Í7đ Ž)Ú.1LücX •ļĘKÖ\8o}Ëąō čZ PíÃī*æÅĮiųįķ=kŽæöĖ^^!(§ãėĖÃwđûäė\V¯é&÷ÄņÖ=GÎÁm”&}­Č)õ`Ūüæép†2 Č}jmiÃRČP=áúA*Z"CۄüÅ4Nē0(īŠ^žzШZ•lĖ`'6ŪÅoĮ ÁKBÛ¨‡Ķ2#—ã‡'oŧ"4fŨVĮāÍiģb‘|>lag\snaÃVę›y¸äâ[:=‚R”¤ČĐ>=qūģnŸ§ŗkšsL ŋh†˙mē¸ŅëL˛$¸•våÆz ÕOÁæ.^ũ´ēų^ĒS´gLÂĒđoQ;#9G?zPųūch€éäP&÷§p#ũā§°Øđ¸râđy#ā´üô”Wæû °î‹Äæ jB›Ēkŧ7Uąī׋Kũ9‰ŋ‚ÄP:ķjܘIeūėā‹šÉ|5§ü_2p}W­a ÎĪ\((ÔĐ1÷ūūÂMž7æil1næč¨xq^yęDšøĮ•ü_üėŸHZkՀüx͈f<züÃŌ˙’ŽbŨæ¸˙÷ÅC‰›<_‹ņđRŲMÍØˆŊņ>ÅMĄO˙[§ú_’Īmnxæ.|öIųs7Uv>eō–Ũ@?\Ŗ­>ĨōxÎ×Đ{xœīĩ20Κ7Ø:õĀcGNI>¯_„p†OÖq)*™LŲšĻ‰]dˆœ'#Ōĩĩ°{†ƒ][ú‰đpÆ{b@ōÃũ÷bœæHšĘP‘a˙*[Ož¸ Ūßîû§ApĀŪëØā§āđJÄ ËgT@>¸ ÕUdØîŖáqQæÃ.§0>üėiTsqāVĄŠšÃĐíČh†~ŦĨZa¨ÃRbø[OŽčwûM?Ŧĩ:’ĩŨOîm¨MÖZ] âÆnD؟0DS­xœČ>`V78 × œčߑ†æĘDÅäŊ™~­rī ėŨcš-Ŧ%]%É cWNĒr•#%1øí~X7Œąx ao0‰ˇPbŲ\XŸ¯Ö*bĮgÖîõ­˜‹ßFYŨspbدž-ŦŖ:W¯˛Œ#ÂŽMA vW^JĘE ŋúŲR­š[g=]8›‚ūkû*Īá#94­Ō˛YōHbÃt”•{ĢgŽI¸˙>w’”Ĩ§[ÔÄ{ĻúÂːžŲ>NŊĐ<Ÿ–Ü:&9N#2œ[ ƒÚ^ē1ØkcЧqõë āFĄU2"CLam@}kî˜z´s‰{WūsƒŊ=ˆa6b¨āl¤,û ÉjúĐ×TßDņT—ļŒ#‡d‰aGQג,ŠõœŠ1ģ€Õ^J †—2Āũ“FĀá€K2øŗÚ~]Ądôĩa2X7xK6XJ¸T%‡~Ų8¨PЃ™{+¸¤ ŲB¸Įøz1ESO(Rĩų:ŗŠc~p,I“ŋįŽĻ’Ũ‡v‚Ęŗō°ŪģËBŋå…øŊėŽ?M%ˇnÎįä“ĢįüîđĢ#UŸ(üę33íÖ6š6 J OQĘíRPē¸ũY]ˆA됯2°mŸåāŠÄ!1÷O ėkŪ5ĀČũÖ)öĢ’fķÆę—S?VĻ] Țŧŧ @“˜ģčpõHU1Ār°“vŧu/yq1„Ũ@ rûÆdš1˜\du§žˆ 1ˆÁĨ$á8I8]´´ļÎbĐe¸8`Dyąö퐠ÔlV)#˛•`2AŌį=Š]*›wíęĐČņĪĪ åg挨ĪÖáŊ…×ÄåÅÄģ!/_Îähä ”ĀĨF^^ bpÍļčCW׸ R⌝Y×ų>z–XÔ¯]>â{æÄ,s÷ëŽîĩÄfmÕįm<NJĨF¯¤ņ"ZtBŪĒ8jkJNŸ—ŧJĄŅ4ŠāŌ&G+;ÛRšoÆC!u=aÍģ8(]7‹”ķÁ'?˙õtZēHWųI¤ /¨č¸´˜ä0Zb ‚ cVŖŒ›pčęĩG\Õ#ZZÍíĻ4j×Ę >g™ō/hÁ_7•_ΈdHĻã2pyR5FĖ@BÄ@„1Œßu9^ęQ˛rVKËę1CqVa<˙yfé_Ĩŗ|sÖīz{RøuD†”ŧf!>™FeRdČCåaA3[ņ#=ÍŅ Ģ6n.œäũ'ō(Cy‘cĖÉ,ÍtJ§ŅŅ×1ųō¸´­ Đ Aōü8Ä †j\/$Ī8ƒ7gKîŅz!ĀM'Ũԇ@ ژĤ ‡•Ŗō CĶÅ Ēi§¨õ3‚ŠMŠÎË IDATåō)ˆģ䂌W7}ŧF_"5—ŖŒ!š‘ŲG0 [Á— 8ē$†1ŗÂÆO= Ëęėûā÷äË­đ3Ē€2T‹BH'đJc™ĪæŖŅ NįLŦôufs/tĨĘí,‡tĩZšŲ834{˛zīŅŠ[i1Ûe™Áō÷P˞wœ8 ë~ ąņ%Ŧ.ˆ%H͌‚’ŊķÃīĀŅuC>~ ’uÍ]fS3‡Ú‹&ÄV/če O›øl˛Ņl  ¨āEúĢŨe 2ÔĘįĮîJŖ„˙4ęU?Ą`ĘŠĨĀģlė}šCãlG͐SūäOgHęŗrC6ŠUļ3D$Cyãj“:;˙đÎY"A7Ü]0åüā]1æ6|Ääu7ĶņŧLģqpŨSĮŦøģŪHĩ˛rŽ„Á8ĖQ >¨>˙ŠAN6ļļTeŽ2TŅ;v;ߎŋ¤ÖæŽĒœ‚ŪeŅ>čë§Ëŋyæ}~,šöČŌ'ĶVTgHĘUŸO6ģV Í]AŨ…í¯ Ãī?X/ŧ<1×o}ĶxxÚŦą#ķŅ ‘}1ĒÕŠŲ§ĩa Õ.ÂĨ„ĘŽŽ`Xdņ —č(v“ØpÅ=Á:0^Ũ;‹**†ŋÆÉV!†ķ-ÉbõÔ§`d~)›ēaäŧŦČŠ Scč,c†×yuC šlpÔÉmÎpuåŧ9‘ 2<Î`Čę&(ĮCbĸ7ÚDq‰`(,!įbŒD]k€ĄĢ[täĘ`ģ˜U'fØNˇĐ{}ķ(?üŽ‹•΃´H†8Ė ė0ˆûŽrŽ2Ôč( ሠPĒƒŊØAĄPDĩ%,Š?â?ŅöųJ˜9°úU/ų]úÃČ3î*‘äŲ­ęôėĶá „@Ē]a ŌCF@x‰ /bĀ[sJķĢÍĀ;Š…ÅTÛRE}[0Ķva%œ~lu–ˇüûuKŸr"oŋLČBcĄûbgט3۞Ņ"0(‚ LCŽ(‡GnŖ×žĖ0ių"ÄP”CŪāŠåŋfĘŽSOÛZ–Ō{‡Vgųɏ×&¸ŅYĸßččø æĨÆäšÖœgHUŗ˜á8 >žc”Á-møTÁŧčšī |Â'R=Ë?ĒR{ŠĀa­z|Į l¨ ąR˜:RbÚ‰cŪûîĀ Átv†3|M琝 ]Ė0 ÷9Ą|ĘxuĶũē@ŒáBöšZ,Ŧ;ŒÁŨVéAĒČ`$˜cg*ōâH–nâ(—FŸōTkĪ-[7=[W†´§vīũ†ÕͰ$Š)˰vJíCbÆáelã3h$P4&ģ=YErÒ.°1.ÍÜ­’ŧųą1zÕI×ãøŒ°[ ĸãöÍŊō%ÜņĖšë€ČĐĖQ æ›0 šéT2 8T¨ƒ"ÍܧČčÉė”É ¨M hĶž#ŌÕ=‹œŲ;īũŖ›m¯úVĢä^ž6UO¯˜SéŧƒōyĄ• (ŒC ÕĒO^ î ­ēGĒRj@Ū)%‚mV›bĩēŗ4ŸŠšR¯ųeÂ*ßj"ƒŧēeåmô 6Ŋ 3PˆŸՎ1 cRš›•žbT˜aU Pwß]Ĩå­ =f˜œŖ•°ZyjAžjΔ†Ä<íĒųą¸´ßCOé^įDe2U] Ģų´yŒ˛ÚNÖ?fĀaZÆa@~0bpI M˜‚[Níbt  –lZ7 ŋöUžq,ûV;ūõųˇTMiåi¸LâĄãķí'h÷Đ7bHQ"ƒL!'ėŠ`+`•¨Ú)îč04ŗj‘!žRŗÍĒ[“˜!SĖTŠ’W99áˇE0l( šÄĀčšƒ;Č "û4ĘķĒŠ2ąģ8Ø^ԝ6<1°œžĒÖA5đÍ(¤÷üųūŸĶß ĶĐÎ@b9 yJŗ*g•›ŸÖīą+_54ŌPoĐ Hģ’ĪË+Œ ’•^íŠMÖ×Ēķ*,‡ļĨ3HUlĒ 3ëæŠ:ûŊÅ$âīÖéęä žÕ­ßĐÉīÜ˙Ÿ­ˇĻŋ/´šš4ŗš!ôf°ąÃÍį( ZeūÜģęî>ģ9‹–\jÄ@ÄāĒHۈˆŽępUÄÄQũI G­"Æ0|¨øãėßܝXT7ŠsÅ|Yoũđ;_Ėtvß:ņC~Y8ƒ9~†C+õÚ]ųé¤Ę´ŲžEã֎âH!?AÜlËæm¤ėj†Uw°ãS(ą(÷ųl ž•å¯ Æ4;3ņÔf°ą!>SV¤žä"|C´îŨûŋHŸ/ 04qĢĖ濏œ CM>a–˜•›ĩģRv$ĩ CxōrŽvQ82ËŠ įHõâ€XÜBÅwuÛíR4_°ŽđåNXÍvŠQ›ŐBI Âg<ûۃé‡lĒŨ†ĩTÄũ#6†Ũ¨. `ŋ[{Ô%†ŅŊjœãÖÍjNކ.ĐaŽiV„ļÆ!ÕFŠîm`áGũŦ>@đÂznĶ´ĖĮxTķđ^$¯j4Š>¯×9@Sĸo$ l´I¯æ”jČŦR&ˆlM.D:*ToUéÅyŦnÛčC~ŒĄpÆåĐ 2¨]%ÁöBEo€ž^^™MEúܗô‡J(ļk°âWŦæ'g•@Yš‘žLF:Ęƒu”ž vŋ ;ũūÃ"gÔP: &˛\ÁzŅ4“Vq @Ĩ/dãgu[æ?ppŽô^_RæĘŪamwÂV´"/“SnUWƒæøRÛöŧ|‚×Ų*˛MÜ)ūĝtŧâø1†_!9āNeČę2ØgŌŲۘĖĒͅ?¯ėžšī×fąÂëŊ×K뾛 l&gājR”z-„SųČål5›X—Á@økm:ÄPäM˜šž­ėƒ7G€}´ÍOĮĐ1M{+TŧŌŌ“ŲŠ ¯&sĪæÂĄŸ—}spßmsŗ  nž^jíœIØLãŪJ4đœ@Šoˇ‚lFd(iS^|Đ0ff@Dr}Ä9g ˇiOP_ųWxOûæĨ´øC/Ô;ģîŦ§8ØĻJO”(‡˜”<ƒ¸Č/ĸđ[ĮŗĢĮĢ›cų˛ŌĘ#„}Ø+~6îÂ5ãQ(A\…~vkŠÆA ú§¯ 8\zu€Áŕu>÷ø ã%–ŧá!}Øk‰ ¤¸„EˆO|>>–5hķd9éDZ› Ī‘ėI÷Ž^ø ęEšC÷/ņ‰vSd߆§ũ]‚e¯¯ CŋãīvĩČ0ƒ 1,Yô29ĶįČJcĪTāΉĄ¤žątzŨŽūŒ$RŲŊÄ#ŖkŸėxd>íķí¸a¯e ņ‹Z Đ9BQN3ĒÔëéˆãveAĖ ĮC“ĩÉ E;”ĻZËO 2(ëÕNˇ.街OęVøūdĄŸ+ŋ ŋž|bÉ÷ē[ŒQ°“gģ,ƒeEQĨÖë#eÔl–hiPĐ?0đwhõ`IšŨ•ÔW•-‡jÖ.‹ĸlR÷Âgfúåō “Ž/U~?PzŖ!/•āÔÕ-.ŋΕC€áŧ6Ą:Y¯˙ôģx^tkĨž ČvflŨĘĮ6Ā7§­‡Sp}+Áå1gbˆCūa×AäÚ`†&äđÉųÆŠuGpœR€z~­!X7›`šß&6x¨åvCß<œeĪŌA§3ô mxÆw‚‚IÁāŒÂĨ~q&„€ “āėØƒų1HWÕ`%ã úT 5ŋg3k4„ SļĄV‹Æ -wV7áŪû ˇėëö­qũåq1XYš—2ļ˛Nå|ß ŌS[˙ ž; ųKîŋc‰ņn~_ļģGp8†iÖ@Õ$/Pä0[0ôöFøŧņ;fP0ʔväûō !ČpŽhéŗƒ ]y6[ÛNT_Ũ˛ōŲûކ??ēütF–ygåž'ÓMĶaAöĒr˙%Įß!ˇŠdđ Zõ)á´qFiYûŽg‹ËXÃŊ"ŪÃŽFƒHPˆëf…BÃÄ †TûD-¨ļ[4œ‚ļ›M2á•Á؂‹åw°ĩމļęīļÜ˙ė­ÅĶ@Ŋ]ļz3føfgååųûÜÃûŽæ´­!ũ—îzrO’×kųĖpÁXH”ˇ'fĻ•°(/Ā{ųÕä †‚”˜ĄŠFcÚJâl d˙5áx°Lž¸ōŲŋ ˜ōĪ"ÂĨĩf}GL0LP1ąí1s1Ü4\ OœĻ‡öïĨßūĪ54ßܡōiål_ŒáŅEeM‰=č}ŽÄĐdrÄ@4×hĖUˆú,jähŨu‡=m e[==CáGĨ9ܞ›āøĢÃ˙ -8Ņo¨pM÷<^ynšņP%Ģ×*’å˜]†T‘AŪĖhˍũ:{Ã[…õÅôX†Ņ)i?ĄŨė đ’3üģļ)(3+1œ’”ˆA‰Úņ6 1Ą„ÍŒ’g‰+ĸŌą4ú˙XĐQŖA Õ,-1ē¨xōĘ ĖĐ˙$3":x#ÚÕĨÛfPŒ÷ĪîvAũ™gšā 9’LBûŅDd •ĐįˆčéĮ 9 SÍõCs<Ų`0#†ŗ h#fP”GČĄ l#FH¨/kŌ4EÔ Ëú›3įÂúî_N?Â—ŅŖ9ĪÆ?0ķÉéį‹—ėŠ` \Š] 03*CuL|ˆÁEÃķt^Zč*VG1üKŽ4õ%ß Ķ5Ĩ'ZdôÕÆXęú;KŸ0˛í/+ųMßÃÚÃåŪ-/ũÛtž™Ä=‡îŖīËã%ŋä_PE2ČYEŌ“f`0ŌQ”KĄ1š‚šžõކk–dGÖhę•vŖB##Z}­13d×ņ+ŧoüĨ˜/ųÆ2å[&ÍTđ‹­õ­ËŨßūŧMQSDđ÷Õá ÉÆįmTfS€ĄšŠâ4öCx Ô ÛÖüüN˜ ųurû „§/ŲŽ#9Xų_Í˙˟°Ļî)īÛ2˙į5|Šu§šcyåˇ3Îo-Jß°oĖ}ŊęÖÖVŸ×ŖöĸŲŽÛ,ŠMA ã-Äģ&ČĨēj˙}˙Únģ×˙ā÷đö+egßŲ•ŽāŠŦU֎ÂYß&.ū͖ĸ´qĮV}ávw‡ģÕ\ÁlfāŠĐr‘p†ˆųįŅãYÎĀ_éļäP§pŨz˙ēß*į>2{\v|G9éobÂĶ4œ<˛Š;…KãūiŨ†ŪŖ‡6Gš…PŸšŪt< "ŒĪ@ې“MĐdXRb6jvæãe–CŦ=÷“šéÁ bĖ9rŠ@p{¸žgm >ۘûŽĪ@ŨÁ+û1Ü25&_E× †ú!Ũô †œÛę.Ļķ%‡čõüŌÆõÎāsÅP’8šōĩ^)ˆ\÷a1ĮEĀīN”jäĩ) hAŽæÅɚ'5&E`üöŨÛŌų=Åԟx`Q^Py>G ›ČÚxuA y …ų§r3–œœSrŠûĻÃ˙âÖÚ×Ū’›RĀF˜%„2ĸÍ:îų&p}îmÎ&ĖPAx]ã”ËC?ė|į‡ÁšåÎ“Ģ“&quļÚdčŸD‹AažĮPķÛbî▲Š@9Šģdü§‡Ļ–6áŗĨŽ|õĮĮØÕR• ¤=h„Æwë.5Žøí ėwåeÍø}iÃŽėČ+Ų+ŸŊ[Wđ⩒?ŋ˛B­)^ËąŠLŠížšį„˜;¤=`‚Ibh’F¸ØņށđŌÁ˙ínqųú-sĨ VŽĖœ–]Ėo(>‰.0 ÜÂė‚9K.ØRu%ĩėŦeģ.9ā["ÎQ†ŗÔ3'¯Á>q<†ĪĶ•×Wü›Â÷qųƒÍŖŌbPš˛˙ßЂ>}eÁh°ũČã%2×ÅÄzSŋ' ūÜn 1ĐOĻOŊēą”8ķú•Ŋ4_ÂwbY…÷ë!Ą<ô”HĨųš;×ōŗē vR~–ļol!äīm¯ĮÅoˆnznŒvÁ @Įæ+tF] ƒƒƒŽHųˆ¸úĮØÜļI–ZŽÎŸč=¤ũ*ütŨ ƒ)ō.Yųéāũ$ôxi\MD¤ųøŊíöŖkč—[ĻK"Â'œ}‘qŠ ŲüšĨ˜Áb¨z‚H!ׯØÜ–ImÛIX‘?“û‹A§õU}Zĸß$ú­?ŸÕ™°d×+Âŧ™įŦЉT'˙ASƒßBÁÍŨÚŦūQtŌôg_<ŨąĮž9€ßkS@DŨ<Ų˛¨›mĪč^ĶfšŌYÂPĄU}Jlĩ⠂/yņûŧŒĒ×+čÛģAAôũ`íœ0QĶ(Ȳ'Äō嘁ũxWF#˲g=ųNļV]czûšC‹÷֝=ũRģIÛ|˙t>“/[¤S7=x>´ŌyˇÂu*VöÚÃĸKH/âŊî¯*rņ0ôÎōBWŽnFåÄ˙q>Gå=jXÅÁū‡îCŋÂ&ĨrB*-ŗ‹dˆ† 2HÔ}ļ;"ŽöķæˇˇÕ]-~Čomû¸\úŅ*Ō fەY‘ą .ûČ´A*ļ––āĀüˇáô Ũ#ؚÙú¨Čüė9ĘåŨrØėÚ=™'/šTF*î n!i9}뙇īö~ŗëĸZHęĄáŪŧub`T ÖE&3~ž$xOŧېũ\ŨEîį•ŽĄĪ Ü>†ÁŠ—/¤e'°n8Úmâ÷<kvÕīö[/î(P‡—qK­ëĩDag7]Q ‰sážĸՕĻãĸÍ å…ī/Jæ1¯S¯íu j†+.éb´uíN<ĩĮEÜ%-\ŧN#9Údđ7—qā”ōčr×ŨĀī9Tkž^ŗÛ_öéT•@ĨrKmĒ éĢeq5ϝ#‡&ô$"‰5 O‡Ö Ryą\žn;АCKIëH7ˇ;ą`k{&œŽôČā’OlöĮ„…Ņ äãj͞sũ¤ĨŊT ĩŋâ4V YˇJ—Ëƙžš&‰ “ )$DˇV”?-Cšæ’å\ŨEwÉG;1Cä3ü°°\dĐ5YíĢ]å K NŦŸķTÂ<ŽæØ×>!āh˜:3EШoŽxZüōÖeJÄÎI6;tnŽ„?Á†ÂŲÍb-ķŪ-@ˇ„QōÅ?ÂLc.;ŊTu¨Š°å1S9RׯYŅ‘kĄ•Āø›Ô“KG^ėŊ^Š+` "Õ \Ô¨¨wabw_pYp č&M‡ë¸´ė}0}iv€lŌuCaæsđæ—āëXŲFã„äĀSLfd 9ŨßZo*‡VÄpjü¤Ņ:îœ$d‚×ģFlÔŧiĢČēfjčë~*č_ÛQ6/šŌrhâ(eš‡ėÜ$xŖŧā^Ō=;dC~+ž(jk"č˙ķI›ųH›âa0ÁÍÛÛ`‹19bPĖ|šžĘˇ,Ÿ>¸Ŗ¸āî°šĸLhĨŪyíØŧŽ\xL4ШM-k\İ€[zrmækĘĢˆ‹Sk$bØ;É.ī0,ūér ¨Gō}ü[3bhbĖí+[VrLĨo 5ÚÎųŦ>[îlĸ|Įg›8ĻĨ ÍģgˇČđ§3”WÅ[„žëœ”/gŲĶ\úļŦŸÆ°?°Hŧ™c„û‡w|Ö=RŨW›ÕX\ˁJ1؆h( ôؤ‹šQũ ėĄqe˜ŪĖ-ˇå¤Ī˜Ō5Ũ*Įy;6ģ"ÃWANEÃČŐgČ÷åPZĢ%QK^œ7ŧpƒU:2ūŠ ¤ .–ûđϊŪz[âųi ‚¸vž•3Ā(œús €ēņ­įÔĩƒ¯v̊m?bŨ]*ķf˙- ëp;tˆ!Íh‰áŠ€—’ A ĩoߍĖ}*äjŨ<],ČnԖ\oƒĖŒ_ĮOcāŖvex‡ûQ1śfqāˇž×úōąĮÕĻsOé}_öO8orˇĪĘXmãt%_÷7ę €ų§3"ƒá,fhHōiK×!éjŖš­DÉÛFOīŠZüâMîvq 0ÔŧÅŊŋĘ^  1Ü Ä-ũųʘĸÕëŠ.3¯+†)É›\‡žSŅŧDˇŨ=§Oš Ã×°ĪŪTCpmJÔ|§æ„ėqî˛ųFW}eˆĶæäPMf>O‡ŋ7dđ9YH^˜Ąß‰%ĩ@ģå2øŨNß3^¯Õ/øV3 Y“āĮ/ ƒ/.ǐĻPđj*Ä Ph5š1 "ƒX/p0=R8KûW÷m\YjÍÜAgÍĮf(˙¸ n7>k-áŪķ¸Ō(ŋŒâJ<›û’P0!ÉZ‰§’ åī͎ũō8@C ‡ƒMH+ö+[Ōåhi’ axŨ”˛°˙ĩ4R1›´˙–CéJŖûÚĶūŋß˙Ė@ØÔ¯°tŠ&… † Ã|~mggŠö¤¸xCbđqAô›ôb|qē<ĒĖ0OČōKjŲdXģ4O'Ŗ´ā˙=V°´fBzođÁ+lĄŽÕ6æß‹Ā@¤ļ<Ļ“@kÂjq+>Œ!8ĨÄbŋAą %T‰ Ÿė9ņ8ä.˞ xžŨŋÔPœ} [”ĐYųāxA/āEÆp}ēĘ@v¯]ĄÁ{Ē‹ņa8Ĩu”ÁΠ 0¤ f°ˆ ĐwŦĖfĻQ—˜bˇ(ēËĩųjĶŊŊ‘ãcsãĸÂ2U† ˛Ūk/Ū‚ĩŋ¸ž+~/TŠ Ũ(å î1 0čéDf`D†=“bŠáGˆAH†kWŗ#RĪ:š-ęudäDũę¤1gÆÃZe §Ė(%—MņyŦ‡ųĘ@ Á“ĶĮđ빎ėÉkI' Ē2¨L 0PXkVN&ڔûP†B;E×ŪŨ‹Ūœũ×Å]ū’˛ØĖ„t*ƒ~u¸ĖŦ7YB  §īMyeA†ü “5ˆ´ ĖÔĐ•FĨ˛C”C‹Œ¨§ąÄēyéÄ´Į­-_ž&¤§Qĩķ‹ûw% §%HC UÚ+!ģÍBp`FÖõ´-ÕH ĨŠÆŦÎtcņ2VÕ0§Ė9&{ÄzÁæË#JÄæ›Ü.‚IFŽO/ôد/^M$ ēÉŠBúŋs jö',åī7ŅZŧ8vY d_RÉ9žæú&ŽbhAĨ9XŌ™Y°ōAܓūŅĨŠ´zŨKpŦ÷ 2Œ@ 1˜Ŧ†v‚ÉA @uYTVkfC1¨ā8mw“Ž_fÔQĢfZtŦ(ƒƒ/1ģ¸äÜ,īkfPHŠ@UIį\ãĘ/Y"'}Â% w)fg”îĸÚöqSA†™ZY­Œ‰‹KļVB‹âET7“gÃĻV.%J{6…oĖÁ:~2’Cė6ĢˌƤO ėĸčžžûhēō˛LŪŠCEīĘË4ĘP™ŒÁ ŠÔ¸”dŌĢ›LŽİŅbđ~„û ņëķŸ„]žÆĘßŊÆģw.Õ¯—Áã8@—u†&Ûl#Ž.b|÷ĶüãÜ#Ë@ Ģté¤=ƒO%ŽŒb`\b`iE ֔"kšŋ%ɇĖs_;U`Ԝ˙!ąKׇZâ:ę IDATŦœ^\Y˛¤BĻ4Žü!ËĨ#]úģ֐( ʁŠH{fāhĨ 3X#_ 1xįb†%DĐAļēGLŨÂ3ŧĢ-€\ŖĀ vPŨäԊr0*E74šĄ;Ë÷ū Ē×NjAĸ/•Žd¨ú•vߐ˜;:zĸæäĸÎēķĩ$ĒzŪŧĄdžõR8˛ZS,€5ƒfp;ąG qy  ‰aŦŋŧzßüOøJ_‹,ÂÅ,ŽŲîĢ'^ŧJëčŌdÛęØÛéז•ô€|đ%įâReKĩ›$1ØåJĨČĀâ}ßPqEõ1ÄĶ7õģqęûæąˆÜčdbgÄr  ¤}×RFpļ&İb bP\ŦPMU{)âOëŽAAMԀ¯v!3pĀE€ëÔ^āŧˆfđÛ"ž÷k*"úˇŸÜÎ÷K1XPōvņļË1Ÿ_LË`¯ŧ¸úšĨdZma=ĖbéQ›–æZëĖöø”’,ÁčE=‰Úî¨ Œ8ųëm itĪ_O9éÉĮ+/Ĩ7u7UĨebĖÂÎĶ8vĩ’[cį•°ųHŒŊŊ÷Ģ:ŋÕáZØ>>=×íĮ§‘,(ĮŠŌÅšÚöI,ĩ4ĒÐûæļ=ŽÔãĖâwW˙ ķĢëÚ'3Š•ÅŅJÉį†4Oâ"ģÅqnî#”ŠąpD:ėÄÁ>ÚŖmTÔIJ?Ņŋˆf¨—_×ņęēsËA…ŠZųP´ŧ‡j×ÃŧŪ0‡Ų’žŦüĘ>~-#ņ úmHGŲŊĄw´z[#č=Ôxļøč÷[ûihmí^ú\Ž–Rģ‘’ō†8Đh*÷6#†_X&¤ß_Ž)ųÜ0™ÖU/ē)[t‰BĶ–MŖqrĸÕ]ƒCœk)zz,ôÖM'rÁæ>áæåđ: zûxŊ‘P#†øg`E–•ŋåüÂpĨ3&ŋxUaĶ^¤Öģę§ A¯Ū ʼn9ƒ8Ā{c9Ôq¸¯RœŌĀÕn¸ĘĘÖ„M¯ėxۃ×˙ZŗŪÛeõĀs5-ķ|đŨ2;ŊÂÃI.`—.Ŧw–’w AŒ.åŖ&ÅÛqã—˰^ ˇÁâũĶ ä3ā}ģáŖ$§y6e–l+ׇ͇ßÅo…MļÛ~}‰Ęę֙X(īœLž"$Ø*—ÅM”4ę-úRhr§1”Hũ ˜Ązø%ÛŊsŋzã*…ĩ”ë­7Ą}ÉE1Œ—.ÍÚŌ‘ljqĘĪL€×p{ƀeÅu ĮŠäđĖ— obcų SIĶP…NîM Üđ˙Ųā0lžn…īÚJėĐų%QIŊCHpÁhķ>I6ļ]=­ģđdÖ<lģyOūC3ėōä€ļLĩš|ÄCÕŪûŠČēIÃá9Įõ_ ũ´žÕ ųyŊ5Vl@XÂPžŅüņüÖŪž‰*]ü?“¤$…J’ļ.° “žH+ē—Bë;)T[Øēß÷ēû+" ēē‚zīZŽ13ĄÕĻXiKqˇ2]pqwQYÅ]‘IĄÚĸ``ÕĩČKŌ[\N 2™ķ?g&īM {?˙ķŅ’Læå;Ī9į9Īs^ž|˙Ļ.l?čIjl†ã[˛=²œ‚,ĄF,IĄę…›˛ņrÄøE…Žņ!Ū˙=€N¯—¨RË2sÛŖŊwöwI:†ÍsIwHESȎ }ķã&* ƒƒISë=|ļĘ`•+ĘŠHŨ„įYCÁŠĘ/r)xŅŗ1ŧúKĖđ˛D-ļäÎo{Ôũ¨HēūõÚ㠖–‰°Æw]äŠųagō‰ŧÜEšVäp†X5ÃhæëywAödCœ]-WĶķåj1ļP_-+;ģĘŊëī`yBēķWå´ę§eg:úÃĸå[Sŋ 4Ú:)Õ5TΈ0ߤ+š§­ÕCĩ¤=XV­|<­fėĨķ)Ąˇ`‰m0Ļ÷įl‰ú2aN§ž•įĘ΄§ņmå7œųî.÷ū ^č’Ēī*ÎC ŒA_'4-.ר?ËĸI›\„œ¨F:_Í÷4 Đk  )ž°Ž“–æc9ˆpŅæāNĐĨ<۞ŠæP_#†Ę3#c;FDjĢ ˛†oYzĀĩvxr/ŨÕ@˰´Gx 3€ĨĐ!!‚Õā`b˜l/]€Œ›"y7Û \Äd vîe˙A÷ļ=”0¸0ˆĒ›ôœũ…€~]€Ø%ö qÖtE Ķ o ČkVBåA3,%0ƒ[a˜l‚€Ĩ ] OgMļ›ËHIÍ÷Ēe†|"KĐQõū…ƒ7"†+ãŗēáŲ’IƒdšĶBŲ›āÂ\ļŊéî–Â@Õí0€cVI ĒTŠ›bp+ <ĖbŠ –>âF 'e†F)‡Ÿ¯׋ā:ęåāŊÁîTAõĒ•QÃņūkĮđ-RūM´ÚŸÕBŊ¸ãØO :&ĮŗØH1âŗTz/ž€áL é(ä_¸ m”Ų’aāKÜn=<ųHˆĄ`™:žnĸ΁m! ŋŸŨ8ģ°‚ũígū ô­÷ZɔoĨSu° ķSĪŊ¨õ‰Ë÷I ļvļ“ļš¸ŸŽčjžpCmMr†-*“euR6fŒ°Ī֒ö¤TÎ6'—?$˜čŗ\ ÍŊ nÁŋ¯ ŋ6˜l9ž{#õˇĨpŧļĒjBˇ*ŌfiČ÷`ˆ`u˜'°›īŌģMŲ&šLnž!q\´GUŌüėÁ3)•ˇĖ8Ā-˙ÅeĶhCŽ^Ti—øsŋÆ @fPŠĖL¤nĘ ŧ3`‡ßŊÔ,É Ļ0c7—ęĢ—™äēš.Ûō ;Øt!+Y •“×6jæ˜XÍ/…tz9ą¸^XûK*­C¯ųMĻ°ß ™4ō  ÖĒC Ā,iÃõ‚×ÃîÕ{G)égŨ†v™Ä\.aƒ”qö’ŧPŅâđŋÉĻꇧÃJĐé˛Äßᄜjįt[ÉAQ‹å ŧ=…a5b(xŌä2\{Â÷\g˛´ąšļ‰Ę –,øWâ3/ũ2ļU„)é§>pž_”č<[]EQMǘ…1v5‰,Ō:ëJЎÜ…@đyĪSŌ×K‡&Hd:aÔ–ČĐģíĄØ=÷¤LđPfU¸3ۚĮ˙éw Žôxü#ü R™UŦ‡HH¨* ôß?ô/:¯>NÁOūqu TøSĪH†ĩš°ļ˛ŋËūæŖũŌ n(!/ސ\#ŽŒžßÁčiÛōS°ĄōûŋöÆŊŧõXƕNŋ\EAÉ:)`“0\ų™\ü×āÛOŨÍũI{öŗ×ھ䭎čÄķmá 'ŦD˙,ÉčĖ/—Ķ-sNPIf[]¸$Į‚z)¸nÛAˇuęČņŗÃC~u÷ KÃ+×–5ÖÃ÷ß+ŦĨÁø\ ˜Ž’Í.žNP§W#vĖ_}˛ĮO„GĘÖŨYŽ\¨úëÔí,N_b:uŨMTöŒōEČįã5#ƒČ“ é`đ*ĮyåĄzšßĸ&ų Yp¸Ōu Š`ö8wqĸwÉô´TÚ÷=tî–ę&A“ČāŽ(Ō^8ÍIŨ6¸ŠČ!Ą‘ķõrUĮö’Æ§Ę c%éĢûãžwãTĨ+Q“u †/Ŧˇ žD†ŗ!† l¨öQŅl Bņđ+Ÿ`˛NRąŠ¤ûŋŽ;üíÂĮ7À?zB|™ėwLNŊÍ ĶžX1eđĨH\MNĢ+>ĨúhįĨâíjüJCrMÁ•—҆|Né‹Īƒė!6x<ÃķúG_ĶąWt:B_/Ké͗ižu%0¸Ų&5Í;=íHîĻ7_‹,já´Ā´ē”nghƝ†|q†Ŗ¸ŗņ(Áīœm­{”ÎllėjA˙mc÷ģę@JJ˙㗰õĸ)1œÁƒÄē É#'Zá)­ÖnZ1Ō%-ŗÚTJ3ˆĄ3¸7n†_*KąHĨÎŖø]š\K‰lđŸ9ēû\Sưū[ōÄĩ˙ÚD†ŖšĀÚ˙#´z˜HÂĀE?Ædą¤n°fw@ģfː™…4æ8ē5ėßLIųŽãjŪr-ĩ2ƒ;Ĩî,3ů˙Œ=ĩiL ąO)”€$xÂSeđûNnļŌØ?Nŧ3ä4ŦÎq@n˜Î|•ÕĐũ/“ÂøæŦįqĻ~æ-–>ŧ›ä6Ą„ÎÅŨąū ]/^Me”aoÅæ›YlĖ‚đ“‘ KCZŊ^m@ ]l†-@w=-îÚ{=úķ䤨d‘—;ÁēĸÃHKŽHŨôˇtœ˜‡æd!×`#>ŖkOgÅ1DúŠĨW(ÁŪbž”22ætIÎ/7ŌėÜņ×ʖyRđųĐĘa‡˛7‰ŋÉŅ™†žšéYôøĒC@”õÉéŲ ķs´Â@Į×ÍĀhsŠb —ÜÄĒf˛ĨvÃĘK“Ã|•ŋĻĸņ“…ÁMr¸Šp^´tuÎã陉…čņibí„~kÎĪ_nõŗßô.89ģá.ÄАF7ä`†ÁŖPĸF|‡’°ÜŠōĸ3XŗڔÜ}āā‚“ aŠIE1ˆa5b7ŨÉŊ?GĐķYeŧNB™w3šqÁ…ėë3 ķūĘY_ÚĻ=#ū¨„žũæę„ŌĄôW?¸nĮeŗXÖŽLbĶâ: ķ¤īp}ÄVĶÉę†ĨwQí ´MĀ{uÜÉļŊRĐ †ņxöa×Ŧödf3°45¯t‹ã$‡ģ>§n7¤R!<)ģĮcö0í7ŦŨ–ôaēîęõĢ‹ŠžĶ°S°ßũ 8ū\°r˜¨äU˜a/’w īŽRTOø/&œßŗˇ˙FúīˇÃ]ĮįJ~(Ā@”D‰Õ3(—lV˛B &tᜌųˇákpÕåsRVō—ˆ$ɔÃëDSęúQęøģīšēŗÁšŽáĩ‹ƒMŪīņBš0Ãww ‹Kd% 9DV¸†—é¨ÖvÅ3\)nŒ(8y°I2­äU&™ÕÄŲ `Iwv…ŸáƒÖšBd-mīõųĖBåĨy_ ļ>õ~ā{Õ4…ÁŸĀāOÆ@ûCë*ņ ŽöxQš :…yū˙]eÍĘã‘íj Ēûî,9ŽĒđ.˜îy&ˇ@g= ČķĤ˜Ļ-/n,î8ø•4ŋĀûũĸzŸãQõĪ_Qk.ŽúČ˙Ä ôōC~j\ŠøJ#_æx‹ę}œëš'ˇļ6@2õÁsâōˇŗ­€lDÉņėrAĮ°:×JÄŦïnh]¨7JG뚤ųMŪĖ›}7ŪÃ~•9ķ­‹ŲēŸ$Ę\2ë,öē ÚoåõīäzĖĨãá:}ĀļXõ­œĀr ŧ˙ū—øÃˆ^‹.G͉ŒM'5{ččĮ%Ĩ"ë띧ō.Đ8?ēĶÍsr„w8?tBúÛ÷Í]k/ßøĀ`™&}âdO_aŊž´dą•Ŧ;(õ…ŧKËßŖģ3u ÃąÆ`("sŠī>ē;jÃČũ•Ž­ƒÉ"xš˜LsY‡%§°Īhņ*G$ã~tķčõ!ŗUhõĩėĘë6”Ģ2ܡ™ÁšJĶtY4pÚÃ) GŪpD:Ĥ˜ë:,Ërŧ~Æ ÖÄīŠ=Đũ›éá]-0m~ģ­–Jd§ÛNŠy­ÛąkĮˇ÷”§g¸×ŨšĘüéh ÉÁ1?Õ¸X|CčÖT$cH”ƒØe6—9Cf8pļ=?îgG )ŠĶ_yCGY0ŧ2÷Pīũü& 6û}᨞ĀQßš{F}ÔĨOáčDėŋÉøã]Ü5úBĩCœÂĩHĢēëlnŗaiMnÆobä48bT8õœÚSHuÁņyxRūtˇŦ1ũĶŽ¸’Waø ÷Šū1^L-1JeŨ5p—6™Ö0ŗVâU­ ēpxO ĩå ړ'š•ĨÁ8‰ŒšKõ°-˛N5œB  ˙ō;Tƒž¨ÔÁņ%)’ą;¯Ū}7s›iÃ\ژ(‡Ņ“į•Ų˙ NAûr0ˆÉĒ E˛Î0 xtû/Áv jô|GdĨīųSãķġ „„ëæų´¯ž6™UāPˆ†¸cÜ‡Ē K"j*8rPĘ÷Įˇîa#š“’ž ęQw-\…äÚ.ž›úČĻūÛa|`ŅūâCÆ­+…ëGDŪņũų*ėˇĢMŽXφ/î7üW=?īÁPl^6;ä5ŗ?ĸ˙˙yhÚįĄnՑ 0†áđũMŸÕ_(Æ ‹ũēÍP*—)š˜ˇ†uSÖŅ“”™š IO 9%Ú]ŧ@âãU…Ąī–÷Ęŗ<ÅČ7+.õë&$Ü[6†|ĻŽn?Éū› Æ˙Z ?—hĘŨôæŽa]Z7K •.¯ŨÚ[/†”ėųUp_b™,Á‡ŋŖ(ëŨ™ÉĄÕc§ 1 ™S'ÃCâ’´ÅŗÎ.Ą—h]ŧŨ ¨ln^F7ųØäusÃŨw. ü“ž¯ĖŊ+ķÔÃeôđ7x¯.ųg†3ŲâuAЉŨõÕw‚sKÍ?ן!č{~åōÚ õ键ō(ōˆ'›âúĂ8v`R†ãŸ †/éûôÎŧ§Õ~Ŋā ¸ ŠÅūÁŅ&]ņWˆĘ"šØtęė/Ī-Ą ­ËÃhl˜áĢ› ”.Ō/į~ oâyIfp^~>‘Ávįņ4°ÂWm˜!!šĮØÍ ážeUO"۞*ˇ‡į‘z˛KĢ ˛´m…dũ†Š Wpŧ7N¸u¤FūæˆŨJ8ĄU‰ŪLZa5›C g˛kįj΍f1ŲU ũá‘ä#“$3¨Gcˆ3iáTŅéÃ65žãKĶ­/@ø2'Į—ĄcbœYVąfą)ī,˜Å,­RŠYųjīių6ü:š  +_ÅąS(̈́ u›("gîOÅ˙ĄŠÖ´2H|ĻĪXa$/`đáwoXVgËǞOxØĻ´gŪ-˛Áâ…UCƒđķ€ßåßøšō#/3LĻ’2 _4aéI UĐöĻQ*RÅÚØĸ…:rXŖë: Å<6ːeģüÖĶ*û*lpƙ˙Ė;›íúöe<ÖôcW ƒaT†HŠ”/ëzM Ã-t‰đb¤pŗJHŅ„ˇ¨OĒėëeŊÂāĪļĶžÉv"ęíĻņ ƒ[ Đ \Vâų`F6(‘˛hŖßv bđß<^—R…"úAÂ"q!=‰ú¸Ė–ĸ§ûęôūÔÎ/V]WL Ų­?štÁáú/UŧÆ]‘AHúŽCēÅĀ—É  ™“DĻ6Ü_=$–ž‚w-m`ëáX°ĩdĩĢĩQķŌĪŌĻ‘íލŒÂ…NÆāŽl˛ÄÚcÃD/§LADGš­_YJ­ãMö(ų.iû¨ŽI•ŗÉH ęMsĻUÔŗąwˆ0€1ä ü¤‹¨X/<%âÅcxÖ#:}KŦ6ˆ2Åģ,ŸÍ4pMÔ_IĮÔÆĻėŲSŒ¤¸€PMĶ…,ÎK;Q 1IBŋ)…Ō%ŠĘíMŌĘūë8ą wáˇNĐ#Ûī@L¸–ÃũĸŲZ4l3ĩ‘´›{‹0ÃŖĶįNĢŽĮu“–g¤ô[įr_ŨíÂ׉Ŗíjũ ĢJh0uŅLƒ4‹×QŒAlŸŖoqht:Ņŧ‰LŋŅųŠ0C€†ĸZĀģŅø¸×­&bXY3ˇÉA¸äzŽĻN˙ļX×Ák rÅÆ`ũFˆÍo"SDĘ.ˇ¤<ĖāPĨ´8ƒ|ŅlĐ€ÍˆˇŸI^7][ ˛lFVZY3nEZųíĖ—īD ĨžŽ~%“Ãįđ œéŖ2„î,ŅūĪ[Ĩŧ~†e€8nŅjF? æÚĘôEŠĨ‚™īĄCũš8đŗ. :!'Q—wŊ{7Mž~˛2גM˙G)ŒTͤíc˜Ž;ęįwK…éÚ-'§LT-Ō!†ûa“ߊ!‰„Ôûá[Õąķ4%ķ…;‡ šé‰ ķi" ‰c,ō+<˙ĀÔ˙÷e(P|täüŒy͞Ĩšyc°áđÕĖ3$s‘ÂŋQ Cŧ8ā‰H,'čüøļ|T?d†KŲ])ũšÅšîģPmjNô/â”÷b@R'c˜Ęąz ,„× ÁũTLīágRú—/5îŋđü Ū čâ*T!Ũ{ņf…ĪųÎ0%›NÍŲ‹×#ö‡|ËÄcž÷¨ö,šPŨfđãĄãûĖ%îPĐåi&ŊJŖFHϤ˜(ĘVi\ü¯Ũ9=  u˜ŌŠ:IŨ BOī˛0­3˛Ú°{ŊEŌü×įđũŦįĄu2R„!‰‚›"xsVēĶKÃŌĖ­ĀDö’IõC Āĸŋ[áĨX+PÜõVĄ¤ųqĄ“ŋŸķü\f# #+§Âg5'Õã¨Lj;Ō @9}‰<Š›TĀx›Æ‹ ]0ĀÉ v'ô‡NîÚšūĮ¯?bũ~ĘķÂy.Žadå<-ŸWQbOĢkúžī­Ęú“jzēi’#ÂPŦ+ķļŨeũ‰0§lĨGõ|ŨÚßŌö‰ÅÕ/Â=ˆ+øŲÛą¯Iè*LV99Lyč}ÉNE?î_ŨŲDãąôš—ĶũÔĶŦmX”įk‚\ĒkÚ4q¨Û“z ürPdÔ(mR†nXŒ— íĨÃGģZf0XÛ.kÍ4Ī{ LĐ1šÕĀlŌļˆ]ˆtųî=ĸ$/Y‰2Œ@äᇪäÅ&ÕŧtķŨÁ:—˛Ž‰éIr“šg V t)‚fĒgvu`˛ŅhˇMn6QķĄ¤ŨŋŌˇˆŌ!Ėā]!†SbH‰›Lû@k¨Ģ--ÖÜ}""ÔFü ė8i=wųÄķŋá?ŧ3{"Õ[d42j™AxŨ3\ŧÎ.ÍüIe(}2 ]`ē"ÃĐ^bQ0¸ųĪq<ž;Īņ˜ŪWk.֘mQ†ø ˆkČŪĸcFûf™Ą;•WMß6SšyŽōeA:6 Æ4I”ōZ VjÔĪ<iPJđņėéH/m(Î,Á … ĩ@MM+98oōœ6ĐÆ˙vē]'Íü~ģ_* ÆfÕ­āC`ãĢEu“ƒ…˙Íía0 ”OĀÉĶ×ckƒ†ßĄļÛŲš…ōYįŨvüāĮ›~쁝tRāb†^#ÍE’ēyF>ŧJŪ˙#IrEzb÷g–Ë͍_îĩ…—éktá14eåPˇ'øNŽ‘7‹A‘Cfā’0°<)á؁.:2-”1”u%ŧHßT65õŦŒÖR IDATĘ Q„‘ §Â:šØ /‰›ūX%TҐæBk@0Ãx BH=M*FW<5ĄôԈĄ<)Ž!BfP•IKGak-:ÍDP•1li”ûųÛŪ^“—ÃĪQũQ–C\:NĮ*Ø tRšÃ[!%‘!+6Yt)$¨*q[jW`lŊōsƒōŒ jDTYü´ģ8*) )wHņ?ŗB“¤:ĖĀTĢØ¤úÁđ`üôØf.i^ 3Ô  'ÆîpId4”$Üķ@5÷Ą‚AīåĘK0qæ1f¸°otē(°†ėĨ”Áâ&ømÄ0 m%ÜԕøĻqr Š„•ō°ž 14"ˇåCdöąr•?Y~(áĨnļ-,6ˆn0œM TęÔp°.–!¤Pä™câXrPށgÃeR;îg“¯ĢŖŧŦ<Ô ˜d Û4Å@¯2ōėøˆģ5ŗ¸ö)—›‚~)З3ôõ†åO&0PaļpRō‚ īōíëSŠŌtēĩ¤įļŠki¸AeJÆx{ŋô…H}ÃSŽËĮāëˆÁaTiųrģnJ§¸ŧ…ŊŲ՟ļåt:TÎŦJ`HĖ …Aađd/›Ļŗ×ę=ˇÕ¤"âÖ'qu3T bZžąØÜ.ī’3oTd?ŅéWd C6bČų‡Ōt] zá6ō6ˇ|–°$HJĐÎ퀤w€ZhÕČ4‹*—÷A÷ÕējõŖ˙xíɊ2ôč9:\/ÄPmG kČیähë/$Ģ•^‰ÕŊpü}@zē>y'įAxØŽãššÅT—÷aßPœ˙,ŒdHĖ @ųëä2âSeƒRŽĘ Ôh —KË­+ųŖoŠ=i5~0UŠ Ŧ,*YŨŒeĐ'ęÉP–ôųꞡB7å°^ô׌` # nƒĘēŌmŪŠöčØß æÛ•ßšđ‰yķŠšD*9ÃŦ€ŌPČöė>ę<‰ό.ˇáĮ֕=æDāZsbģé K¤¯F0$œî•IŠ3q,tûˆC î„üS|œŠr,[ŸËļøįL…Á¸ûēö'šß?Nf͘AuW^!/΄ʤTæKS‚8iT à Ō0+Ŗëš#$ŪH8œēŗ_XŽ'oø¯fĘdĘĻģõWĮ@a†éã°øĀFŅ"pÛž–ЁŌč+Åšˆar5Û¤ĸģŽÄŽĘāô%Ŧŋāb>_ŽaXåR"m„Üĸ‰aPYŋĶOŋqęøôĨ'å%0WÀōBaˆ[ÄãJbįĘs›ĨĘ­+ũsW…}j5Ä-1 ÕõĻō6|@,ŠĶaYÍJĄėVIËCr°…/V"‰EîÀūü̞ņ3ųa4oũĩÄ5âÜÄ7cpĢĨ'”_u˙€buøęà ëŠ$ RØīvūuŨšÚ7ÂęÉÄĘ+>čĄ˛ą•ŒD\đP›uÉë 1„KeR†¨Ū_­ųāîQPĶôĶ`āäînFšĶmˆ->GnAčƒL€aÛÁšëNŌ1 ‰ŊĻJ˙dÕŪĮĒWrUQ.öĄ{÷)˙ŽÜÍŪuģ{Ū"0CQžŋ\JŖrЂYA¯K6*|56•Ļĩ ŠˆZ[ԗtJO˛ēé•┰ !†™ė×~ ™âŨŧģįO ‘A+3ȅ@š3L9ŖCq¯CqiFA“b JP‘Ûš æ`CØōJĸ™,îų€û‘ŽbųUš˙ŠŨįŪz•›ŨĶbËƒĖ k*"‡ å•ávÆ×b›ˇŧ °9ƒb˛įįA¸åi¨¸€ĐJU…Ą]Â!˜ĪĘG¤Ēi—*Z5-ūô ąëŊŧn;{úĘ"AŠ ;mƒ"El8ƒĸQŒ}õėŧ…}F5ĩŪt:cbāäx7žĐĻŽ CŠŽ9Ŗ87×:GW+fd “`ÕlįK¸m­v„^qkb(üŖbÔBYU'3´ÚÆŨĩ:§1<ōiˆėÉĐĢ9ÜÔVŦŌÚ@SĨ  †ˇŊĨSÄėĩ!ĩAE ށŽęÆ0pŦŠĖÚrpíÄęÂf–ʋ}%iÉ^ãÃ#„o‡¯WŅ4ÃĒI“^Z „ôŠ’•Û$Z?ØãO_(éÖâ}HiI^TAWÁYū!T î°ŽËÁA†§Îø ¯“ŸÛ\D­/(Cīŗ…0ĒôîG&ôĩ §ąģ’CጯŖ{Šoɕ˛ģ1#Ū~Āáq¤Ÿ~!žš¨/.ĩęt‰ QÉč#r@e#aúŽDšĒ‡eĩŪ]ĸ1”Ø„É -5—rž,Ėą›ÖmãřŠĘle~ŽĖ ˆ19Cx7Ģ}OsH÷đˆŨ(L6Dķ">%2ˆķ­Û֊ģō°j&ģbz'qĀ á/^•ČzĐ>Q=ĩīĶq6ŖāÉPä†Bŗ¨dA†ˆÅĨÖR ŊyCŸÜu÷- W'2Dú#đåĘ"˜0 1Ŧ}öyÔjƒúSjōŖøtK CŊîŠÍTÃ&éŲ)“V<_›÷ÅåĒ/!åå$ŊŲP¯ō ‘%ü¨ T„B ‰vԖ§m‰ä`(1Škĸ élj|iĨŗIK *Õķĩ9ĩæ˛ĩķՎÖ´á;ÛG œĮ1`åņyČ(N6ÁrkßÁ=l_§\&Ģ zĮ‹T>bt›ZZ^Ö=\{cSyYČŗ1Væiĩ#rš/ԘŊcŽe€ą ¸MŒO–XųNC/õ´‹ba,­CR5Š%PĀÔZ‚Ņ•İĶJ<Ŗ0 Ķ^h:ĢŊCPȍc Ŗļ\9¯ÄĀ%Qōé™u÷ ˙ø˛”aT=ņĶāö~Ã2=Ķö3 ˙„#øÁ“Ŧ‡vújĘá_æõÔÁÕ1í&5hwz,9Äu6Žhģũō~ .Ŧ0†BMŸ¸ŦŊHw§ižPCũų(CĀqåŧˆ‹úZ¯įSžHĢŗ§ˆAüyĶãpũŪN(b"ĖĀQŅBĒWî™Ācŗ‡Bl$0āŋ^čôŠ(•Ī5'˜bŧ_°=tāQd Đ1n‚09*õh Ņį˛ūšwā•#r׈ĪĢė,ė‹0đčvõ'׆NâG Ū)÷*ņČ&Ę LˆVQ†ÁpĀŌčĖ×fÁJĄĨø‘)ûdN@F^JņõÕ>É]"3 ˛Īu)ĶUvņ`WrIŠąaÔ¸žÆ0øÂ aqû ^(ß w]+ũã^ēĻd­04FnĢ0˜ŠŖÆ3÷Šœr,`B ;=š{Ckí~¨bã;ōe†Py­‹Vaa9 ŋÉwĨĀ2˙ŒôģKöũĸÚ×7ä#ˇ“žKîhÆĄŒę0C.3ŨxcF(虇3öÎåb!°E¸Ŗ Ž$ á>EŽo߂äĐ2÷Ib‹Ž`)s°F°WŦ9Ņeđî•%N‡ŽÂļũĨ0ā õ֋B3.üŖ|[ų!W`ˆœ ã’gKĒÛÁØÔÂär“Ŗ]aHH‰>ލKcCĐJŠšĀwā‘uųŠL¨žÆ1Ŗ-įŲR]fˇÛr„ĸrˇš>†ÁPē䞅ˇ÷Ā@âü‡ŗī+˛ãŽČĪ4OŒŧ9'Ė K6IEa°hív#]w•ãŨõ" { œûd§”ĻMĮ§&xķN˜0ĢÅ'?3ŨÂ$2äobvī䂱ebž™ž#ø+¯‰an+„ÛĖ `Ü öŠ)ĪÍÁ挃q[xÅĘĄaŋc¤p>âÆ[ƒnšaԊî!į€Îa: nŅ™ĖŒ<_Œ+%–aWÜIÜ 'ÁņËUö Iu_éīķŒSgtŪē>ĀUŽd‹ãSÔ€ã:sQSNŲLUfˆ fųŒųŲ?y¨ĖO°7WؗīO[í°a†.Sšmz”áSSŽdŌŨ+Š  Ũv*b`:ĩSĖšZuíĶs‹õĘGäg?ōPĨ‡ú´mŸÉ”˛(Oj­ ú¯>|0FCs á˙<Ŧ×&L•@&SŠ5Î_Z—ĘŦN_蔧ĐbßsČ k" ƒ‰ e9āĒ‹oÎĘģ øšMĻÜōJųŇ Œ1ĀÆŗ4ƒ‚ŽiŌH˜Œ^k4š´jĐętŖY%8|ëĻb}+z& `9Đąå!­2œúCPŅ„¨ŠîĄ!+p_´;‡Këņ¤Ŧøž__ŧ~Í™Ī‰N-ŧ4¸÷Ŧ×÷ŦĶ˙V ã×Åo_Ūqf­uww^ČtŖ<Į ãđ>!ūyÂGCĄ)=Q5īˍŅ˙@ûŅRŽ °%QG9ũđ?ũTņöËģŨk­ŗP!%„ü "AYĸ\]\!Y'î?aāâNH+…tķBé.z#!–NõĄŦ‰6–>§˙ĪĶˊ?ėõ‡Ģ:ƒ\/8™%ŽA-3āÃÚHŸOĸēTũ*„Ącz i˙žō)’™újļttęīū9éTį7‡Šõ;0û 3Q0}nĨAā“3ā_ĩ)(ɆYQ~:z1 “2÷ 1,.Ÿ,ęčliņÔĖkĩö:PN29ÍĶs;G臃2ƒb>ÁXŦą$šÖ…ã9b†Ļ§„§)üä€áīb `Ž_]ąP2ĐM…ȘmÔÚķėåäK8øâĪJīwArUōĢøegĐ寓KôOa’0›å4å>_ziõüR‚åš[™4aĢsĩ'đž;^PĒe´öōIÄÁ'V\ëÜ$Đ\)˛0Ÿģđ˜ÅÂē ëÆâÔĐ­mâˆ2 ‰Ķ P6!|éwúįßų*I2õ@g9z7įņ%Ė#HÚ/wi ˛ĢL|ø›ĶļƒĮĻ/_ĐesĨšÚO ûgš_Đ7J´¨Qv<å‘Ū!b4Xâ8å :üąĖ NáUåĩ¤žŠoâŅCĪÃÁ°kī‹g˜áeö‹*”Ÿqž?zÃ6˙‹\ŽIۛÃĪ|ȂPAĐ"†›ŧ’[Ųi FPÔDēåōĪų7?r‘Ô7Ų7Ŋ!:ę8ŪĐ<°ô›Ã.ĘzDiņoˇI KĘf[Nēôs/ĢCT\‡m| ÷'ö_jūÆ'­l#ŽÚŖH+Z?v+ÍŖ;†!<Ž ŒÔMĨH>įŗŋ3”Õ6Ķ†ūõdØļ/ĩ/‘ZuVÛlÖöÖOũēqPŠNéqŽpōV á„pđŽD:ėvãLrC˜D?xąĮ°ōEŊęú¯—¸'†zŽm[_ĶYĶŲÚŌēĻŠšĸ­93ĢŖ #J bŠhj/ĐĘÃNąrˆa÷@ÉĐÔėÚÚÆq7ŨŋÄ==Āî˛(ƒP ėųĢŗįÜ5V˙g{xNŽĪwáPĶō ĄlĀ ¤=qZfwš5­îĐÅĒÃ,üO:ˁAíĀ C[ˆ}œ„LŖĻŊíkĨfŸĶˇ™Ãĸ˙°Ô>y×ęėiŦžôPfč/sŋ•ŠŅųËzæ¤#ĘĀã'XĮ%Ä0 ) 8×pE‡GoôP\Šä@ĀpnpĢī*ŸöMsLĢUĶ€†ŋ¨)2paŸˇĖÍܜ„ĘæÜ)¤ŖP"‘Uķŧ—‡ũG ČĪÔŦÆ JŪ ē0Ņ‚vCa)ëC˙ûx` @įũ€Ū/˙ŋÛĻĢry÷Ō"† 뇲ŪZkŊįn í…ŌLãėJ&×î/ØZáŲlvy.C¨, SfvČ VŗÖ™S€j5b Ąw)Ūšö, z„‘ QÉúŧOŸËábYT樈yĨ™c§ÉtƒĮ0]Ã˙¸ÄåĒ`évŧD*xųņF™!Ub0fāf0Kŋļģ1˜€á$uĐ+ŽJdØûEļĐBūEÜY^äh;é¯aúĩüԅp`ŧjÚraĩnæk;w‡90YaĀq*Ģępx_0 €§Ē…Ŋ|•‡‘Šą_ņŪ´JYQéžŒ0(m${‘VķJ&ƒēŗĩ–YĻ—xԈA§ĩmš´ƒj}ęĩ3 Ãx ˜H/b0Ēs2]¸^Š€áIÆīÍ%}0ŋņėgĮņH÷*<Ķi“ą´”ÎáÜģ:ŊC\;iģ餠˙IúŌlXŸˇâYmígå…n;€˛-§{á‰9¯é”ŧ¸FÄÍE˜}z†ūëíƒģ! ÛõÃ%E(ņđ› *ēgėŒžļŌ^ąÛî×][:™Ö!ûÃ\Æ22×Ŋ/š¯å7ÜIõčrŸMČAčitÅ@ōN€–šÃeČ ßũhÕ /¸qYHKīãáTŊM֎“™Yĩ•Lųîļ5Ļ“FƒzĶĖŋįÄ0š‹RK1Ģo4bŧņ,žG9Ξd 1h%ŗ–ÉĢ3nŦ]SO=*2ˇõcĻéâ&ņg•Ék´vŗMßPƤ™ųˇ÷ŋ{ÚõŊĪŠĘ1ôšuõĘmÄ9{oæWe]ë–NúĨŸÂHĖ@žG E!_b°á$Š×įĻÎbn1ųwĻīō)׉•Îßėūü…Ÿpō.īŪ/:/Ēr‡Ëƒ;‹8udöÃúÜ7˙a ĘėÚÚ;õ ŪH) ÜåÃKՐĸđā­gPŊbôk…p¯26()Aͨy“% ¯wj‡¯C¯P@˙yh„~P^Éúמ/_;‡Ÿ–îŽÔÕcOžū冉Î{Ęū˛Ŋ6ÖdåI2ä‹;à Øķԟ!€šķŌfā¤o.PâˆNŪI? }GäȈļ{7ļ˜ĩ}#3ˆå…†oyō>Ũū)]WkÖĘr¸ÁĮčëÚČĐUØ'Π˅×MS ¨|„ŨOvR#;’ZS ×Ļs7ÍsŅ[Ÿ‹c‡¸ī‘YĪîËa`˙€ū“NxnHē[v…isŒ;^áoũtģƒŽc@ž\4C ˀJ„Â0]E¯&!ŋ¯z;Cņ>xZ)îUk-ÍÔ¨(ÍŧÖjC^ Ã5œũ&ŽkU`™ŧŽúÄ9Z‚šånįĻāÜ+ÁÎāģŗdŨLBÄāŽ0`eũĀŽÉĀõĐŗ…†+yęBocЏü]ŧ %~ŸA×ĻŽÚ;Uw€}ēj uEålíļŨ‡ĘēSØÚŽšÄ¸#mZ ۋˆÁA…1‘õ ˜AŖgČ}Z(ˆĪÁËy$xķâ æüîĩsŦķŗ—vnÚtŦĀcķSSM5ČrĢŨĒq•!†aTʗ×ߙF÷X ™Š¯ŗAL“/Ō¤đú_pP ĖāÆÃ;j÷ô#ÛÍi“˛† IT3¨ūÜ<ҘĘĘō Đ—Šž÷æ:à ĻGá+/—LÃ{č^„¯~4­QķŲûž’˙/ ŋ ĄObą“Œėoës0Ēč0”›Ąļ⏂"† îyh\cĸց÷=&/iĖ‹LT?X fĘũÕņEDņõ¨žØÖ;°ÅŠ)šnšÆ<í.KÃ3Ų++ĘasúĢđæf8ŸîŲØ•?:,T-,øž@v3€G 40šqũĐgDr0¨™)7X iÔ,äüƒx[˜^*ŠZĄäúa‹ķEâ—Ķ4 ‘JgžD7>Đ3[ å–Ü'’ƒbėqøģF.“Øįå–Ŗ@ŖĢsh¨OqP/2đŪíO¨ō¤›S[›‰Ų}¤éĐmÃgƒíCīBą‘N0o愉_( āMG÷øę-bņ Ņ1+ôEfĀŗ_nÅ'kphv8”EœŅÖĻĸ‡4žÔ0ŦÃQw”qŪë÷’¸† 3´œ[xŨŧ'͛_¤Š7#m!|u¯ÎÅ5ôüĘU˛ėqņ E6Pė‰Č\ĨoP—ĸFn˜Ö=+QG5!öĘd,á+ˆaPaČĘp[6Z&„§‡ę6wš1E ŠMq ęØu:ô§äŌ>Ô'2´‰,ÄJx€"vuîÃßYš,B[āž•ąS1B4āö‹eĀR;Løŧ‘}bž=—éĮ^)š” †ÍúÃõFۚiQßb ‚Ô ?”‡Äíõ _–@DS uW”›Q–†åÜĀÆļCī…—,ŧͰW>Vž"čōâ.ąĄH™t_~ü\HčŪ\ęî:4œžņiE!b\>/OÕuíŒô­;đôÄčÚn7V LƒŧŌ6âwGÄCZž{ōdwINģNfČõbígQ†đēŸPŠ:J(0ÎŊWÕ瘌20­@3Ngk7,¨_ŸķhĖ#•_'PŲ7/Ļģ s͎ŲėVg9ʲĸ…kú<ŗéŗúCë"y!Ä0¸â–ī%&ÄPHw†Pv@ßeĀr(1dd=āKûD•ÚÖ.“đĀØŧ„˜ŠˇAãbŗ]Yũë‡>¯tę åqЏ(…Æ7ũ>4rāŸå#‡&é}…âĒ^ōäūjk5ƒ Ԝ€{ķ'‚X/€×—ĻäSČx˜_YÁ’Ĩ Sˆ!64bˆß郋ÎҊM^ėԟ‹āáđB›Ė´ĀŲĨše#ĸ/OÄ0¨By҈ŦĐ‰§ĐÍ^ŋ€î||ģėûˆ‚ŖčqŨ÷xNĨđf× ¸Ŋ¸§ū1H?ļŊ ‰ÅšZlkÄ1$P‡ōbÜØKŠŽī‡ ÔlmڔËkœŽąaÍTréŧŒ0Ę {éAĘÅ#˙â×To>Ņ(€r;ē?ã&æÃf­”Ži–€š­.üXšéĻãW֚Ŗ™hŸÕ”üĄ´ÄT×oöc̆ZĮYc$iģ‘X\T}ũ,‡QhhėˇyĨĮ¨aķĸ 0ĶøOž€įsö˙û .,ū°ų[5cĘ$aV䐒‰ü™æĨŋī/õƒ)[4ŧąNf ĒL)‘qœá9:;ՐFÛČÃÍ’™r˜ˆ:Ņ &@€Ff—ĸCŸcĒĻ9†A-Öûr “†K„tŗ)ÃaAj+2´´ļtT•&M„Á *^&3ÛCˆmúÃÍ-Ōôŋ˛>j ŽČ?$ŨrGw2wr#ąTčŊÜ˙ûe „Ŗ‡ōėHlmŲ„ėbቄ?Ŋđ0™ "y^#Ûë!DPénJCq砟ÆMÉOČėöGäĻ›­j†Ę†^š›?l)ĘÁFĸ !„|œėĒ8(ÄÕՋĘ$ 9EЇqäwŽCO¯Žüץüu7ēKEgøŨ匝Ä0DS˜!:†ĢôÃp0t;9yįŪüé IDAT<8ˆgPPô \ģ7VÖß_ĒoKškģģ4X†Ž|:ĘãMI>ėĻžŨ|ë÷Pä|čŋ”į*ĀÄôŨ0Ē;ļœŪl×ҁ+P[e[‚&įīÚŪŖ ’ØĸÂu”_Įy%9¸|áū0œ!ÁV;e7ĒRÉūWĶË<.—3A ‘J(ų<æJ ÂčgŊcĨ•-‡\šė† k 7ŽÁWAyIFĀ E„w…eģŒDǍ3ŒŖzCŽD(™ÁD#%g˜øPr† Čė­ēˇĢQÅ•fu$ūÎúÃŪ÷tÍė8ꐡ0!Ļ@×̝>/ŅŌ^üp†B”9ŽÄʙ¤ M E3nÁgzĢĒ}2†aÎÜ<ÛEĸ\ߤW‘öaŲĻu"0é #„I’#ęmŽÂ YbØZ…Ī␞Äí]4zĩCô€ŠX­ÄuG‡{×ŽËŗ] éßŅ/#׎N´Ģ]“KˆuGŊÍQl“ĖĀŨP™‘û†vĮŲŌ…Y2Ë×wöēŲ;ļnxŌ{s˜áüÚq lB§eĻ’rXIŪ‡Āw2ÔđņWdØeVä@fUšÖ™ˇw,–'sIDŠū 0÷Ž<x˙‡ēoāSˇž„…‰ /‰ šėēc䮜‹…æ, Qos>TČ?TÎøW…3Črāéī)%đ‰/†áŌ7qĪ”zÅ|?Ûaą7qŲyGÉ]YĀåōJ!Ú99 ž•íI}ŗ~NÎrgM‡æn#ė÷í:j–´æYx"ŲŅ\‚~” ú‰úáė×"ņ§Ō:o¸ŦST°c0„Ú,ÅQf}CĄŧ!ŸÖXMĻ2›ēĢ^OFäĸélÆĩô#IÖĘŨ)ūųC.ģsÛ•5ŧXP¤(ü¨ r^xC¯'Ël7–ƒųąĀŧ|SYŗÚAü>b?Hâqm¯ÉLdZMÚ†@X>ß'˜h_ƒvÄփîtŗÅŒgę  ĩ•‰Ė‚Ū ˙‹†båN@Ž“{pGŒ”â.āG1ÉkxÔ˛Ü˜´ŒÚ"ļũS&.А.ËÁ&o‰ Ą‡uR¤ ”gQcYl‘OWb¸5”¸<āžáˆ5û=ĸ`XG5¨ÄMj÷Œ `ōS .ErG“§Ņ‰í˙ŗĢ\Á!˙į`ŋŗī‰āŋĪ0•ˇķŋ§aËsÃüĪbˆDę 3 ΰ*ŗB <í­!áđsWĀķZ'f8§IË΃öģ2÷váo”rõÁĢfĐXuŊŋS ´n&…øØ{Ä+úC…Î?čŠiŗb3ŒIÍâįĶfķ“+(ԂžĶŊ$˙×}§wˇđÍĘqĖāį•­külãO…ĻJ7sMÉßŌ˟ɝWÁoš>ぅŗģôÃVZŽīæ]ģ0‡w¨ÁĘ) ŋ×l VšĻîbeī­|3õī2äŌ:ũÕOyÄ`Ō•ŧkHã™JWãoņ™“ķ<ܘį;ŋÁēâŽĘÃī{×/Ėķ0sLFOĶÂ[Ķixî)ųQrįĀ*ŋŸƒ éJ oÂVWī‰'„ŋ¯>˜õôģ ßđBé3Ɖ%¤ˆ0ô¨h&¯?Åh*§Ã¸g}yžwm‘iЧy!•N'̘˙C|z7ŨěŠĀjÛD3YŽI†ųU yũDŗč<:%cŊ.¯É„§Šœ”B[‡ŽĀ˙……Á-.÷ŸØúÛGrÎqa~QՖ:ˇXTķĩŠ^×´<īÁ§_y7ĐTAŊ‡{*^å-ĖQyņwŧz6Ė>@ÕĘ;āŋßUmÉéZēœ/ļD¯Rb¸Ÿé|U<ö‰HÛîŅIô”8†Ģķ쇐âũ)܁ŋŊˆrJâã" ø€īĪ;ˆ§VG”O]Ļ÷Å%)"­Úá" v˙›yąƒ h¸æK¸îąclīŊÂū÷į<ĮnYa9qÉī#aBŨŧL+Ov…žŸ 3ŧ+–”ĸ§cjw†,’7ĄÎ@3fŖū;ã{D‡1SģvkvQj/HO`‘ŨSƒs­‘ĨũJÔĄŽŽŋ‰OáMâöú‰bfÁ°čÂr(“!EaXL3ŨGöOŲ€ôÛöm+"zšØX.ĢÎāUĻĖĩ-6 !앯f0Ō[Iėj?ŒņÁĪ&ī¯3hHŪ€rˇ ¤;õCĩ#Ũ gļ€"ÂŊpƤ0ÃÅgû„?P‹ôÃoJÉd2ėĐCBr= Egr†˜V+÷X ÷žĪ SāGĀúß<§÷Š˙ΝšũĮĢėëŗĢēÎŅFD ôc$4ĨLFÃKFd6<˛ģĩ“kx¤Q™ã ŨJü¨x%†8ũĀĘ{ĒĐ0Ö"R´=CggĪzæŦ0oČh¨5h{ô æT])ŲPĸ=ōÃeHõ?×ûwëƒU#ŗeh´ąƒd rĻ'ŧA0ĀŖBcÛɇäŊv 2õH ›ŗ \ŨõöåũĒ›ô}éV#™(y‚aõ˙™AŠ2”ÅܡŨ YŨ…&ëēƒļëÆËû'Ū”7h°.aGæE_|˜ĩŅ"˛gc$Ųo/AnĐkĶÕíd:˜’˜S‚,đËûßûUnÂ*O#LH^8´L†ā^ 8Ãm=‹žIŦōY‰'`H ÆôÛspOŪŠ-lVáÁÚ)ęļĐ4%­ƒœ“•įÂŨęCa1AÅŪwČāCc2\—#J™g6…m`.ļGcÃBߐh1¤!§WŰYxøÕ‹Įœ_?OyIR7㍠ņiÉ ÉŦæu†œCLę‹0ôNr[,RȧÕŊŲ€ÍŊex4F:/*J1˜tÛŋ+ĘĄ6KxÎüfÆ3„U­Ō'†^PĨ ĮĄz"Ņįuö?ƒ=ąŊA>ûŊ\Ļbå€cqŒÍ@*[&:Qņ HUˇ{öˏāz}8‘áÂü6įĢöļëÉæg-„{]ąR¸ƒôį •Š\ä`bRúH•*$Ųcüü7†^Ũdŋžmž×ĄmnjŲįkč*âo6CÄDĻp~K‰ ŽáEoÔŲ6e_ĪČ t‚ĻûwâĘäP”!œĻĪę•høĪ —,^w]ēžj^é¨ėHԌū_ŧ1 §Ŋ^K9”ŌÍæų4O˛ū¨˜Äūģ ¤×ģ;zz€â”l¤ņŸ‹Q†Á]s†™E’Ē,B -đvaéŌqĘĘĨ`ԘÉqo5DÍ°°é؛BkJnéFŋ1u^Í(Â_ĸb¸WŠR/TĒ&Ė0n!˜O ˆĄšu)ĐĐnôđËĮā WKų`8`ĖØ  žyŖZߎ7fzǔr ļk•° Czö°f‘Ļ?žŊˆŽļĀ–Éš÷l¤1Ī€åųqXß)ƒbcëIhŽmՕzeÔŦ†å+đâ§öŅą ?†ôåČ /ŦŅ-v Ũ¯/k¨‘ã›ąØ+2āÕ⠚Õë0 õÃi~į ëßũ˜m˙QĄ>Âā]wį=˜s [)ÄP&zw"íŠiŧ‘4~6v^¤ëŒû‚lãuëå}8yĄÖTKÚv•ƒgŦ¤Æ;¨ļĀí L…›ôü‹čHY&Ŗģåš0¤G%0¤EûĢCˇų°@gJvc–ļ]ĩ ‘…oI5ŽŪeŸ´$ô?š‚ô÷ؒŽC–`;Ÿr^Œ2t™R3LZ‡ĒL‹%*ĮÉšá-U ÍÂ[pCãPŪBÅ^#Aץyå×6ûYf@¤ī`?ģ#ŽzĶ7FŊˆgŸ?4“ŖM—‘JB čp(f’˙Ė`(ošū{¨ŦōCß åץŨĩ¯¯-ĩĀ"öŊgЅ†Æœ„ž[ė­ŨFēŖ*¨ēŒB”Dķĸŋf 1 Û:]ī6—g€|OSi“-ēãâF ƒ ˆĄų{E¤Ė ŧås‰˜aL{ŌˇęČܯwXąZwé‚ūkɏģ늾˜{ØXØØ3÷‘¸(ÃĨÜ΃įāß]—~áMŋO7hÜT –\ŧ֒ãę*ũõ’wũú“ĨŌ^÷)Œ0Đx%5*;˜ Z&{ °ØIĩ{ąēS“JEV“ã—QĐ_>Ū÷¤"õÜ5ē%—Xļģ‚ĄB8 Γƒs,˙‚$ŊÚŖŲG5–zRŨÔĨšE¸Ø´ĢCQŊĮ°ʗ\ÔĖŗÅ<–† IŌŽÉ #IŸēUEhDŠŪô&pĄ+ŖUĪÃ@˙Žd‡§ĶŪgCęy 7[IôCXCŊ Á}Úī\cúY¤wĮņí> 6ręAË ÷ãUę%Jĸë`§ĪjĮCr¸L÷ÁåMČátڍÛîX‹1–a)ũ<$b†ņŽ!÷X ž(ĩüˇH+’"];áĻĐ!…áäpi“š›Ö’Ã1\ˇĩŌ }^œcƒfcâ3cnãĮôyÉDĩŸi™!@†2DYCjžZ~ĪvXax šŪ”;#sÃÂņYÃ˞NsŊ§\;"/"‰‡'ļ1x5 áüãöĪŗTZUĶP:;5Š2\ŧžžÜœsA)`ÔĀåŧ=§¯\˙WRSrXžY𝄨åšeØ Ôc3(ļŽ4Ų‡dČWúˇ¨Č¤††Ä†ÜTÍã{#ī&™!Ŗ§œD ģâī:1š<*Ôēą'‚Lđr¨ĄčaÚũ“M”:ykeäZ´õ&Ė †ū#ŽÜyíx4oRģ—˛ĩ¤‘8×qŅŨ&(™Sœ‘ Ŋ’æ…7 n .5¤`6 FEŽÕm+fā’Ė—C˛ķ:Ąg;RIž\ČFi‰3¤Ha„!1c× ÄĐD ´û€Šš­Eķ *=Ū*f˜,߯Ëp/Ė‘tMŨ¸bÆTÎc^BXP)d(/ĒąôŪ Øä(=JĨļČ2yžž^—k¨×čHy@ÚŅ áô¨Ĩ?HfÔ¤…\‚ ”¤¤ x}´˛m`4cęj$‡ĩ4ãĒüœ´äyĖEŦ$Í:Ū@¯qŽYŸå3” î˙Ģí|€Û¨ÎūVĢDR ^ÉĸÅ‚%Ų>œô`âÄwIhU­‹Ziá ezC¯t—L“ö NJ§qĄ]˙ËGųíŲ„ĸĐ2…ļsG!׿¸¤$&Vڀ{ÃÍā4…•maõ†$Ziƒĩ­öŨ{ģúgI ôz÷ÍÄR¤Õîoß{ß{ß÷Ūˇß ^&åĨSg´Zŗr#|ã¸ôËgüI˜›ĢbÃcΜgÁė5Į,›P WRH J¸´wö‡ĀkÁ „“X­)™ æ-’Ųčđ*YÄ2ø™1Ț{’×fXųëj)Ģļ‡í¨u¨Ôđ!hĐŊŨ•ʁ ķ„čiV†į¯\WÉāWט%u%”Ũ8ûį1HÚŪUŧũNžV܂ũm’1ƒ€ß0/šĒۃ*<‰.{ûlâ t)ēū8ĸæ ˙/îyĸųūûĄfMdpĒŊwOãåíHJ“/úÛs•ļŊĸå}9ˆÎ#†Æ™Ä̝m'įķ‡ [¤Y¤?xŖķ‹cK˙ÛĘr`´9RüœbH@AFGLĒ8ĒTa•AyĢËÁ'/ĸû‹ķ“÷Ŗ_ggJƒTJÂęģZ–ĖöņN“-Đ]Ąü7%Ņt3ŒL÷×Īž9Ū%Ái‹–/›˙ŖTÚ Ķxs=uî"~žīâkĨĶ×ĘA‡#^üĒ—ĀH´„*Ž<Ã3AąG^`•Ų'V‘č~]¸4’iÔ<Ė‚!Č3¨EXqŠâZBåX-´>ļ>ÖáļÁöķ -ÄodC0†\^‘¯3… Ö $ļ2{plՏ ‹ėˇo3đvC: ˇsâ p•aå.Š•{*ĒrÉŋŒw&ėn"Ş ĶÔÆ:Ō; !žņ GlĢx˝ã…įÔxvX4ārčRX&b^V‘iu.ŊiV^0CŲU´ˇŊų˙%¯:?_Ģ‡Âšp>Ą" ŗę”S2Ä;ÆNēƒĶļ™Fv¸ŒĄG9ƒķē/ÃKœĘ =KÄî´.ĪPLīRQËÔå2Ũ¤ˇ˜M–ĒūA|p*â6D¨ßĄÁŲØ? ÃP¸p~ŗ8EŠ´ū=ŠöŨéûdã]ĩ ķb¯_aČĩÆ>}O5Cg™1œÉ`†dqėÆ÷‡x1_Æs¤šGĄĻ".kĖ@×dāj^]Û3bHYã¸A×YŨOū÷3_œŧ.uøwD7 ĘÖÜq…mˆ÷žØ™ö2T8>§– —JCåáŒ1ĀĪCˆØÁ¤q É Ü1Ŗš €ÉbÜāŧ r ˆËŨ§éī<ˆDĐî.+‡āÖžr†Wuōīę)@RũNûi0îušE÷jŠ÷Ņĸ.ôœ™€ĘįZ.lŋ1‘žId ëõ,ŠÔ‡ØÉ=?krßcAļBÉįWBgy†‚įß }Pˆ#Ŋ1ØŊEgœ[ :ˇ–3ėœtPãŸąÚØm;ޝ'œc)˰Fßg^ÍĘAīčØB_Ë´l‹YN ‹Æ.›Z“`] q4]ĮČ„|`XeĀS‡šķŋ*]”[|’n,gxpĒ…-g*0ër0:JFúZOĐ#Š9iÂÚË$4™;õĸʀœ…qSUuœŧÚzđß>oƒxbĘa˙Ē Đ6āãúqÖiåŨz7˛×}Č5éģ1ÄúP'¤ü MGZZYbN߇Į ö˛>Ē(ųgHoœ͡-0ÍúŠ]\! r'(“ĒūR;=ÄúČy˂—í:‰Œč‹f•ÁˆĘaØC?L,Ÿ‡˜—č+m¯@‰ķà Lš^žĀu°vœéĨlÎŧ.ųŪĨa1Ļ7‘Mf˜%P`p›i‰”ūÉv’E 1"æA7ÖÔŒ&ÔÅēČHĪĐ!jDZōËÕēY”|cž!ĮI.#÷ō Jéđ\QŖ‹uzŗv˛d23‚˙6˛;—5žl}×oq í§XАēqĖ|23á;PË{€ū^0~™wé‚qĀ…ū5‰ũ-†r¸Ũɕ/W˛pę hė*e‰æÍ[Büfė­˙ąôš„ŨáŧMëéŋã˛k[(îÃÁã9áPˇ¸p—w6ļ+Ŗė¨™[yREv)Œô=58ˆžÅ/˛‹ >đÎ\’ėčr8nZ8Ĩ–HvĒÕͰžR´˜@s Į†íŽ™Iģ- y†yKgĘå}û´Ÿãr8dāÜ@å=|šxĒ3ĖÂLļČ0ž~HŦ?lģīwķ?ĻÎJ¯ŨŸĻ™Īļ÷žĨ@qKü@ûaÛĖ釅ZNlŦīMeopÜ­C ĢzāÆ=`1Ŧaģcë 1Úäŧ§˙nŠ8Ë…!˙ÜSũíĘŊz8NSžA­æ f`§¯~Œî ÉČģĨU Ũä2ƒ–iO—¨ŗ÷™ÍTō¤ž­#Ŗs÷ŧ%ûWŽģÁĨč)č°VĮņFfĐÃĪęģ¨ˆĻ›čÎS‡ËÆEøƒAž3“˜a}ᨠ‡ ŋëaæŧi.jfˆAįņÕ÷S„›&Ū͎ đH#ô-‘]¤Øl÷™AĪėI7ۄ ķD–hE&üE„oŗ˙h*‡Đ Ō$f` 9"‹˛ Q[dœĶLÁA“đœæG-Žņŋ˛ŧ‰Ū(>žų–EŪ¤Cc´™ Ä ˛{ÍC[Dīxô&Ī U ‘§Ėf1T´Qĩu%ŗčü/3ļȧČC"„zˆô–øĄ`c 2¯Ũã<ųÅËVúVéą§âV¤-÷#Ŋ åâĻ&”éėÆûŽ@îüæîøß@yį~/“]N†áą$ž‘Žˆ[ ‡‘YUļâ]œ‚lō§ëéO.˙8ÂRāgU< ąŗČÍíđÜyšƒn•ˆņÖļĸnVŪamÉÎ\dōëâč´a8ז ĶĘ9Ī’ôÖtaŋäō,FØøŅ#–ā—™Īüä4<_žTvs‘~°1ØĨĮ&Z ĖfĩE˜ ž>DƜ~õ9x 2a4j'UĮŒ.<Ũ4xŅ&vÔ'¤Íģ­ĖĄÉ9ũ80 ͈Ŧ…¨ëąö*:kxîq/ŧŒčCĀn5SqŗßŦw3ÆnŪŦÜÁ-^đ7ė^ŪBoĖ2ßŌĻ(ogĄĸKāۏ+LBÎ(Î —]bDø–Ÿ ũF<˜€ČâˇrˇN,mĖĨ‘e)5ßJlŖŲĀÜŨ6ã()ö‚Š”lZx–bGˇõâą%Č­ O˜Š÷͊û˜Ŧ—b(Tēeƒl9đ‹ĸÛftE:-ŽæVhu˜›=ˇ[NÖÕ[ĸ{- Í)ŗũũÄ‘moą]]’ũļN7Ízįė›ļ5ŒYŅĀį@ŨŪŽMcxŖ7{ŧÔ €ŠEįŒ3äíU.͏ĐyIį^##Ûë›bÎaļŪî>@žŦˆˆŲ ԉu\Įët]ĸŨާbŧs€uãägČßÁ †Â3¤Éĸ —]PÍ.īz¯ãënF4\(Iː÷ũq[Up;čÆ ČY˛cĢŗƒd¤X#}Dl“¯yƒ"{rũ`VØôAîģí_=Čüš™ģí÷ßôF:wã.ĢÚ,(ĩņgå1éŅŧ(ŦT5Ĩ¨lS?ĖĖ`īæũíßėÚ9mēÉĩŠ]ŊÅ?á`-"č9ën^I>,‹ę‰ä.‘Hä.,?ōŪ´?3…į'qîAEŨsš ŗđWų“sųĀyĶ0›ËâÃ=Ē2sG/\ė=į$ūéđŅī÷č<;’w)0¤îũđ3*ƒUôvGônjz° c°ˇxjFŽšFÖģj1¤ČļŒ– *GC'zf™~xdŸm†—‡Ą$Öãá”Ņ4{â\öđ''šš]ŪVûŽ 5âéžkB^f ģ€ Fuķũ{?t55{XĐ%ßŲ_3ZÍÁČriã+ôĐ_p‰ŠY9ļ}́MÛáā b €s$Ū â}kR­ĻŨÛÖ­ßk›IõūíhōÚZõ33ņāîaG˛ė'mĪZ™Ōu]'ôž¯ÔY}‘5Ā+ęžMīßķžËÕ|V3ju ĀB˜ezŨ/č!Be8q1œĄŲ1Ä`Ū bĀßjäõlSëfX įƒŠÕ ¨~#°Ąö> 폘˛Ŗ_Ūņė:'΂@‘'€'Z‡LzRcØĄc c÷üʨ,Ąq“Ûvrģq•C=ķ‡_r‰SŗrÃvĮú/ûY§ãIDATb8ŒusĢ9ĻC €×÷7ĩēČ3*ęk8Aۃ!˛¨@mĀŲŠÃ Č^ˆR÷5˜I 2¸IœŲą<^NÁO aĻ0;›°īˆ#õe'wô‰Ķ2Ã%9ÅŋņßļZb-æ˜ėSƇxC?ĪÄpĘnÂåpj Ũy[dMöÕŠã6¨<œųœĸļÔ7šl({ôČž•÷ŅéW1ŨT¯:Ū&ŽoÜÔ#XŠĸ‡Ë5:/e.íÅEœđG>ČŠj † á # ķŊn˛btÅ ųÛÍÍ"ĢôŸ˙–)>ō]f´_dې  )+˛Ū_Đ~XÍp•mg*$ŠÆ1ãˆi¨ā­o‘CIœ`gÅ´Ė-÷†´ØƒėƒF7(ĸƒĀ $í÷øLĪß|‘6jņ%Åg[vîEįžõ[q(Ņ ‡ĶØžÎ@)”žÉÍãJžuÚā”^eáæ™åW?€Ö]ŨCĶgĪP–ņM[G ¸k ųøŪáftˆAˆ!f%šāw;Y– Ŧ/0ŧĮä‹1XW;'ŊœîÛžôŨéŠé[ÁÞūŠĻŽKgę[ÄģÆ7FŖą§ŲŨģo];X ėN55,ķhxëfŨ^d&é@ ŨûĐpQGæ–*p,÷đÁ֞TŦ1—ÛifCãëiĶs*ӈÎ3 ūå‰…žNŧ÷‚ô)…Ú<ŅDLŖąLdÔG6üjú $KJl_‡ˆX°Ö\°•$#û€Ę Í- A•{APkLÁ˜ øúm1n~ëoÇŲЌÁĖąb ¤zdÚ"i˛NãMŋŲq2Š:r0ƒNb |XĨ2ä {øp #}CŪ÷§ü Ė;q#”wÆį ŋûD}3›čĮl[˛åڏ8G÷Ž, 1x€´ÖĶZx֊ėŗČâãą ‡vĀZ’R?ę:šOÄFcļzŗaôĄŗ& Մ "hĖgגå~ˇ—ą'5Îām\Vŧ‘é7m¸0[Đ ˆs­fr߸üuČK¯_âžPΝƒ-ĶɎ÷¤č™|33glƒûgõú œ“f (aõĩ´Bį—Yû§JķŒ$)É´U4đēÖíõ #ËÉEfFyôŲpî˜øãk™×ãe î2õ/|\ޏxîĢB‘gÃx‹ˇe8Œē“ųKŒV’JëB6¤ e˜7PoūŧsķL‚ˆúžĻâ,\|tm˛ƒŊu]ž.nxĪ„ ķ%m˙㠍œä, )Ąėn˜IpÜŨ{ŽÖž­c‰}ßÃė›7‹›o>w„cÁ.à O”V^SךģÛHø†Ķ„Ŧ1ˇŗy8AˇŸŲ‘,\RDÆÆsĄ¤–Rņë[2Š|:)¤+Ë b¸YĘŪ´…ž´/†ŧđå$Ą%1{˜˙,?wTž^:tNž 4ģLÃņíi{K$ $<…†WœĒųŨ¯QįÄX#@åĀcVch‹Ķ[|z[DÄķQx‘=T(_ŋytjČ×Ēķô“1í°ĮR‚œvČ eHĐK[x#!%–•ŅE,GúBFŧˆ¨A^Nēņ5V{–1(=We6ëzžáÛf4ôāŠ;ācģ4,áƒ]īĶSŦg_1Ät6¤ņD õn¤(FrOyĄ[ä žEÎõVįĶĩ׸ÆpŌ Dœ×É0„AQŋ’Ņx‡ļҝŠũÎŲŪÛ0úĖ÷F츕JaÖĢÎ@}ũōfŧ™Ž`čâ$æĮa-†Ē&Ēi?>.ÄæõbáĻíq˛’+å‘-ÜĢoœ>Ļ0ųą;uúׇR¨É Ķ„EŧírxđTCÚŽÎP“UŧN^vøŠõ?TŦQ¸'ĖårĻÃˇōcˇã¤“Ũ ˆ!Ve؁MëaÖŨí˙H†ü-žƒ­h\ĩÁj‘Ę{-4¤GŨiZĢgĩ„˛JĪ-ÄE v4 TŨ#Ŗ`˜E–g˙ŠĶåŽ^(H5FÆÛ~ãĄŠ@č@ZõrPŨEIyXģ@î6ˇzT†Eö‚ģ{aõ2+—k2°8+[“ų÷}°Ä@ †LūžĐ™÷įT†bđ?Ÿ:^(°IVtęōjÕÄ1jøN’°¯Æ% X0˛†ßHŖvÔ3<ķWEåŖĘžf ëūDx‰)&'_ĻCīųwG_.2”¤Ö… rGQ“aŌL.RĨžíäK ¸v%-–•ŠüĄ\ūiEØĪjXã'—„‹™=5|–Ū=~tfwA;C•Qg)æ÷,¨úĨę2Q`'ލÉ_ëĘ>-ĩ”Ē åRē.GW0ûP›!˙ƒĘ÷×°é¯É IßSöĖ䠞qšà É~ŧ ]›aĨˆ4|rᕛb5jFؔ'Sų?&ΐŽUĮpū? ]ųˆ?y~üēøsE¨Z{QđÖæ™¯eŽŲ&aÉpÉäū„zāj}˜‘Ģ>âm0™ų\—C¸úEąßíÖ^>*C…”Ũ|ņŧâŨˆ6x†—jĩÉraŠīō3`59}ŦT¯ƒíĩåđYŗM–M”NĄÍ}$Ce•1pū‚Y)ę6"ËŽŌO֐$ĖÔ0ė>žüē&&ûøē™ÔŽŽũÍ1W;ėĒ+Ĩ&Y˜SMĸ6Šä2oũ ÅZĀÍōĒ W•ę⯄x#ĖÍîģĪūņû‡d՛˙C)oēxãg/Ā×~¨ö;˙´ŗ¸Z_âIŊ aT­ē’Ņ–Mūœ_Ŗļɏ }Ģ-ĄZfĒШǞ˛ ž–žs˙;.’ǨҍIENDŽB`‚leptonica-1.86.0/prog/tribune-t.png000066400000000000000000000034011506303110300171400ustar00rootroot00000000000000‰PNG  IHDRîΎäágAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IaIDAThÕŲąŽÜ6P 2Â&›tq 1 OI€|@RĻB)RúâOY.Žô'Ŧ ¸"Åép,Ã4 9$gHJ¸œŨ„ÕŨž%93$W+­pÎh‡íÆÍįlâ7-nˇËĶųĶ9 üąâ{Ę÷įüŽÛm‹ķ{^įwzž…ŋŪ˛ã|sÎŽfSÆW°ž%¯~(yi§û’WMųīŠŲ”oJ^ŋt×ÄįŊ}F‹?fžĢXėMÁ_W: ōí ,z?/g?ÚäY”ŊWŒ<¨ŽˇYāģ°}Įy ŧDēÅSb=ldœ3˜Zį•eŧfßh°0‡ŨL‡Ol25OÎŧųš-c’Ûę؈ƒî‹įsWđĘYŒŪŪûją’ŌŅ÷…ĪD^ŽÜā×{L_‹*phađíˆ%.ÔsQåå› ŊU^!š lĪe^žõ 0lÅ2/Ō€įCíΚžYO­vnT%ļaįVÚØÆ—c֑Uķ]pBgVpĒ´‹Ŧë-%⏖Å9Ä&'ÜõÂČ:ízž0Ųšmî#ĪEÚ;[r,øÆč\ā1 –{lŠ3GķÚ9ŌĐžgšŠĀ)pĢXė#đ sÜî—øUoŌ6xŸãd6ˇNŦÜOnÖ¯Šŧv^°âÎ(^T‰Œi›XĻāUÁãæ'$‘yNUŲü„ąđŽäÅrK%ŸčWŦ¸L…‡ą"Ãj2¤Mcžß9ÕÔā„Ëŗ85 ž6ÊûfödÅÆ3ī3l5c)œ_ 9nĨ™ KU˛I•b/†ģÖĮĀ×vī˙UîJÆ%Ūß, ļ)/ž˜Ę‡ŧšŧĨŧšŧˆô!áų†ķÄķ&_^T ŧĮü€g‹y]&ÎĢdŒ5VŪŪú2íĀŸ(d\V_EŪ°*Û1˜>ãŽUÎČpoãĘθā ũōÛÃĖΉmØ6XS˙é1Ø5°ūGØp€ąĻ&œėin—Ōí1Œü.đ$IMך;R´Eyī1ë0¨Â8û}Ŋ rŊÜ%ķŊŦŠĘĸdmÎC{ÛG%ÆCûxP–*ō#ŽŽAģ7eßÅīķąÕ;ą›yŸōåœģÄļøÛÄÍČûsv„kÎ{W+öyÜøDŽš:ßíŪ)1…‘đ{ë&kÆlŊ59ū5ۑōX^đĩ¨yâÅŋøĒU–/Ċ˛Ššš$eiO—æˆũ¤ˇFŸņ~xlqƒ#ŗĐļ´“ŸÂæœ˙*ËXąũ,},ų†ņPōīŒUÉ}dd‘ˇíNŲ$žÃ’!ëĮqßfxKŧÄ5‰ßŊ<ËČk\ƒŖ¯‰ˇXUƊķX"/‰ĶŨLē×íũŗÆ*ü1 O˂ãņĮīČ"~ôā’!ëĀV¤í€Â!rGėOI‡lēĖsf‰ŧõ%C&xŌģE– eÂoųŊ› /:áIeKÛÃįõjįPcGÖDļ”ņĄ›ÎŧQÆG‚#ōÕöøDčŨMŽ*<8~ĄCh ”mRCäû öŒ{‹˛XÃÕnÛ:ĘĄ.ņ?ø҇„8Ë*ŪSųŠä!1>)đ{'=IÍ<¸øā'—-˛ņú§i]âcß5Äü(ß-â)‘1ņ°ļt^#ĪŠû54ōœ7fũã(kæōˇ‡ÁåģX’Yl#įōņ¸vų&—$ŽÍ¯Üüu~=1ö噞GžĪæ}úĶ‹ĖkÍâ×<8}ôáßylū•žūLLcëjžËĀ­¤LC§XQĻuĶžGöu™ËgŦ˜ŧoqž\ĩ8fhą-§æœ #Û\•’íD˛ŽƒKc—lĶb6ŲĪN~Ō,žÚ¸.Ūü˙å}MB˙öøŧtIME×:,dzvöIENDŽB`‚leptonica-1.86.0/prog/tribune-word.png000066400000000000000000000155471506303110300176660ustar00rootroot00000000000000‰PNG  IHDRū€­ąŨgAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.IĮIDATxœÅÍŽå6v€y-c4Œ(ģ˰yd/Œa%ĨŽ)cŪLĐÛ, Ô#d™åUÃ@j ^ ĀUŖé,”:•¤ÔSj1"Ī)ęį–Ë.Ēu%ū|<<<<ü‘ZŲį„›å­Ļ´v2âÆƒMnpx+ŽGõĸéÍ1›úg(2ņDY€ë1Žx “J>øėŗQC1#˙ãŖ]~"Āûu€Fã4ũ~ģw'L)ĀÀt€Ū=`Tˇņ Ÿ×Į=ŗŽ„ü÷|¨üĮą† nļ;ĩ°Ņ .k˛áŨ¨€WîĪž>ŦL×<’ÉáVŧö ĀHw‡Ė"‡ãKA  oMvÂā˙ž?0ŦÜ.š`Äĩ^Ø/žüß7Į·].§z+û}Ã…ÄŪ•ĀXå3žģĀ­> °Ģ„Ô˙Œf`c€Ģ ōĀÍz Ŋķ€ķz’,Ādö{Œ Ü4q}8°+´×†  äŨlÜWâúûŊ|éâr –äŌ0\ °o€AËģ˙ģ đģ|7(y7īd"e‘-l RßfŊ1)v¸į?GBŽegß\G$ î2×ZÜĢŨŸ´rŪÁ āŖõFũM¸›]b€Ë ¸–#;ÖZ`5‡Ō]­ tGķŖYŋÎ×# đĐ9u˛kÏŨ|˛ŋ=•đąõĘ$ˆēķq€ÉėŲ `H§W?e((0ŗiĶ,!Ā 0üyü¸Õ×MŸpļ:ŋO 8“ô tą­ņâq Ž^pފŗđqG.Z(!>nj‘*˜ØęĪiö7ž××ōU îH*I…`}'ÆÍį"­4ÅŗY*YØˇ‡jŽz†>X=&&:õ`Ļ] Ŧ•’ŅīldÎûJÖI†Kpî@ęC:€Û l„€ņrõՍmUŋöˇ  É@4åš@ųHoæ˛JģSN/އ,@Zž÷ æ&sŖ˜"Sų‚ úVQėPæ0Č2{•äįÃæŌTBė*—žęŖĘÔočåÍ&'ŖãĶ"H{ĄëFˆ%@ßÉ2Uāˆ7,Ō^čÊ7ĘčۛÛĮc`-ŧĘÜsi/L”1h`.Ü´‡ô@ˇIŅ¨Č<€hn­` guI.ëįô —€v kq¸D€šŸÜđ•IåĻH7 YČÚ!Wë‘4G ˛,ö–Č“ürvˆBFžƒŋũ‘$ˆÎĩ &no‰<ȚTž:Ēö Ã–L¯Zîš6zĄ^&h鿏pŨ:Ŗĸ™yŽÃäāū*ĀŪ$6rŖg€ķi—™Ô KFÜGģKƒf  mnHX1¨zSˆÃåzčL‹FX13ĀÛ-€Ŋž<@KŲ,†åLî Ļ⠀e§ŒÖr@ËÜC¨—ŲAį;ŊÛHJ”s„ŒŖ04Aؚ]€>(Į´%)åéqõ°˛u1€^ÆīöŌEF1Q3€PļÄ5YF?đc&Ųzđ!—V–Ÿë…mčk9ˇc `ŠgŖÛŊ6íĀĩŖ°¸˙õĜŗĶ…ūšP{ˈyĻõÚ˙å đã2ęu O ™}ē°wŧ –Ė Å.#Ž]Œjpmũ0'ôXDžÁ@SA ŖHŽįžÖ'įˇ`në ŌĖã&ĘÁ?1RIÃfÂh‰ žˇ˙:?Š\/ŦeSx˛Ō }Ũˆ6ūOīĻ26ÅÔ b= ũs uG&@-žPZ€™L•(¸#P'ˆģUËh@.†ųļŊ,¸|žÚ¨GßđÔ¨r7 €2Áģ#U~ kúrßčđC‰yJ.č‡bô†Ké„9š…rũ˜Ųyb€‹"€Ū7/jÂŌŸ}Tę¸d>ąp §—),j5ĒÎWÕˇb ÍÛr $ÃįˆP Ā¨IđEŦų)ËLđ´Xšž­@˛āčøyj†N)0Ū$Exđ  ß˛ĸ^€l @īš@Āę¯āÆ0īžš… û@J âå;XšŦœŊYz$ EÍ뜁Īx Đ ąÛ{…ŠOö4˜ŸÛ§™rcąßíč"Lėü†P d%°\޸ŽÔÁœ–į—#]9=ÕZ žũõ€ev°i `ĐÂģĮBgøįI øW f€’/AõGĐQŧˇ‚ybRDÖū‘“e ęFX@`Č5WnīeL@Úßh+čq ĀĘC0 s\#×+kâā|?´@ũėŨāÂ9Xą)hįrŨøI6Y€ā ,@€zuãÖ×˙š-€xZîbÚp&LÜ wZģpt‡AĀČŊp€Îēevf%lūāūč WŧPâ6–šžĩŧ¯ˇÎ°Å•!´4ų\Įbã0ä €ëĨōwÆ#b^ôĐĐPå§ņŨė~ĀÄ́ŒGÄår[4k—v@úËPxĖŧZĖĸ<ĀPD´dT,ŧ'ŸX:uŠž“iÜ%g`˜øH îA;–x‚\GVBgÎÎ2âī>x*€jŽá߆æ.Ÿ˜ũŦ›H4ÔũOVėBœ°'Ķ>Š—ĩKĮũs"€ž°ÁyéŅ­yPÆĒ‚[ķnĩŧ@€Ââ*˜˜Đņö’w]˛eo•اrÂŧƒZ @=ĐĖĄKģlč ¯M€šc^ōŽK6>īZ ‹œŧī TØ@ãU› áõ;&r+-.ǁŸžtā;{Dm˜YđÖ Ģ •Û$+¯#Ž}3€WGZøh!× ô8O÷̝ŅcŅy„4˜Y¸ŠĶuTŽJēāĪkõh‰ČõĖņôŲŨG€Éįãô~bžĘ*îŌ–]XÂZôf€‰4M8€sO€B€Á§sz˙@á-ŗÜ˜‰$Ę(„üFMėb€ī ŊƒÉĮžzŸŽ—M0ōz)Zâŧåô¤äæč^ƒŋ™|Ĩ`ŧhÁĀ­ŊXĶGã—0`ĨxP`~چ-į|oûzÎķ3~^āz–tqč Ā Ōk?2ļūƜįėÛ`Ԏ´PŪ^ŧ…hÍą¤ĩåWZ|E˙ŅZžŖ€9ĩķĀŧę5ø^ōkGc %ŸÖ`ĸ“wAđ{WÍÅÁļ€ ØĀ ŠW[͆†Q›hᐔv.HOaĶ΃ōtą´Ŧ7P {ŒęÕjZJ7ĩô˙¸Vļlp(ĩrū~‹Aē‚(6)ĩu Đažđ¸Ņ´Ŗ0Īą4đŦz qĒW9ëMa:°gŧK]o`ø Ēl]ĨiƒŨ:/ĸ’mŸ: Tûä#RAŧ$Z–ŧpžSd|ŧōÍĘ.*õ‚A‘kņVPÅĢp2 1ɝ(€¸œ‡ÍSNnA0ä]qÂ)€2œļęÂ=Ō,đŅb.įŲk‹&ĨЈ^ €NÉ֛/yį)ĀϚÄ!fåÜĩ/¤Ú!s›(”ÍG(Aœ’VôtŅ €ású!:%Æí0$ßâŋĩP_ô§ p P„ YZhP-•30TǜQ1ßpļhąy< —iä1Ķ€ĨÕŸŠRÄÛI æČ§ îš.ÃV`  @Kb0 ›ų$y…7’ÆÜĨXđ Øĩö˙€a€&’€Ķ†B|C „ @ŪŗAŦ @d…´C:¨Ye"¯)yW"ĀŗâąšŲM„šŸ‚¸YÚed‡š`HX'a0ūš’ˇu Ųŧį¨Öv¨üՖ*@‘DS}’H@e%ĐcŅP6` X‰ö9ļX—îW đ ÕvĀ6+[¨IŽũzĄ„= ŸLuŗ)€RŸ"€?•Õ h([ˇc’}fžß@Ģ€÷¯I¤†ķ0‘‚}/,HŧgdmÔß‹ÂSČķ4‘Ũ›]hė…ú’„ƒ¯´U|žM˙.ÚĢs—ŋâ‡ŋ–>Y2€ÚyŅūęR‹*(×%āMqđ!˜īs×ć_V=#OpžÎƒ0H-`-g Ā.:˛e˜ •* ‘*¨¯~ŠY?ČįØ;bĩ¸­$@A¯ąŒ+¤Yt a<ÛČæŌ°~āQ7;$€Ę3´šKĸŅđ=Ŋ‹Ú)–ü*ĀDÍ3ĸlĖČ­Q Hå7VC–{”šŌĶœ†P‰ ŊũČ­QQä‰H\CxÛ. kFXˇ đ­& =%+ī|õ WÍœ& H wjČĻzĮž– 0ë~ŸĖą˙34`žœ>J€)€"tĀoŽāMj^ĄRĨ?āyQQ_ũ^šĶ6ũ*Î÷įȅĒĄŲŠm8ät—p[Ž&Зš ^IąN(ZEæ'8‰v0ģ ÷ ۆŠGQô¤ôŨŧ€"fmņ29€‚šŲ‡eT“ę‘H… Û‹h9ĐÂ-€RŠ–¸ņŲ1:ܐāöa9˜>MÆ<€å((ej~Öy€ķ&@ ǐä%0>sˇææFŒG. ˆ´Ĩ° 0Ĩv g´`¤w+Fl’@bW\¤R€~/ÎkŨ0 ĀQWš ˜>ΏšôĢ}06„Cí û<Ձhqŗ^ $@Mß}•P¸Į°pĩHŪX0)Į7/đš†e7_ Íˇ`Oۀf0å0כéEÂ>¤^ĐŖđĨDŽį(Öę5%œŽč@n0úEKĀæ’Åę`ØīA!Ō\ŨĨâÂ!Cũ•Ũ%h—JøqĪ=]š ;ãėeĨüDS|’ĨŲ‰ÉĪP,žĶ ž įu@Q17ŋ ĀĶNęŖ˜´8Āp –ƒ‚ĨãČŗ? 0OōxÎŅæė>Ā Î\ö ~ ‘+pã6@ Ü–Ā W$[Âã@ €ū)H`ŗø995Yҁx0Úp‡W'đŨA€HDķŽč€á̍H3ęD W#TƒéŠŅĐæŦ°K€Sŧؐ€ÄM°˜zĢÃhxāęŅp$MÍIî˙4€ÃČĖî€Y0ÛØXŸž[˙ĒÆm ]ØØëî=Ãķë5 ėxÅæ€b€~Đ9ŗđnäÆúhtGšĶevÂFÎ"Ū˛yq€n“õ‘øđ$Š8'å ¯Gđ°įČ €Z¸uâßŊ¤FŌzNP/š vĀüˆ…”{G,aOĀŊ€MÜRũíēŠĢē“Ŋŗ–đGԃ @ˇ!5Ÿ°ĸ/~¸} €Z Íŗvu Û•@é_Y{ŒJ °pH^āŸgGJû[ƒŌîm•@”kjˆ–ŅQŊ]PÂŋ0ԝ2o]Žŋ? @Aą,ÔŽčĩYU5ĘŊÁw/üŗbŠŸ2‡ü`ä"h.ú`ZøVŧŲ‘ö 0§>å,ƒÛv'û­^“‡ā:B—| Ā„ĶzŖ šÃM`ĸHJäwJyžåâ]áuĪĀüưw6ō¯8<=cœŽå˙4!2˜~’Z• ]Ēs œ>KŒĖõšM_'Ä[@[| VčŸ Ml`ˇDųWŦûÖHėH` āiCEĐĐãāí3fFkMĐÅÔ "€*xũĶ$°PåĘāģ—¸ģĀô—y€–Ú%˛ęĨnoíaÆĩĖ&Ā´°å’šL.)Āũ#;ĨĀ˙D§j}&>Ū*|,ŧbū¸pz1€ ŗø¸``ĖŌYTĖãsąHŽNk:đŨA€Č'—ƒFˇÜŊh6 •†CĐĀĮ€Š>’Ā €Šîôˇāsځč,“ ™ųS}āϰJÖéX Ëąîžø ´'#˜YđŸŖ0ę(杉R5O‹ŠÚ:–@1UítÛĩtw"€.āË0úRü­{q1’4“l W@[O @ŨĀqøãˇ%ĀģÎ(­ž”'`SéāEåÔ88YŖĀŋXÅū`E]¨ņ-Sǜr_ÄáŲLKĸhđžŠŸķ‡Ō pį– 8Ģų?Tš €–ÁįÜÛZJ@ũV ëŲ’čŧ‰Ü ÅPډ 0ō ŅnįšB/Ėģ ŠøžËôA|qÆĢ%ŅĶ z?ĘŋԌRÁļ’—á4ām#TPîåh|_Q1ŧĐĐr‹bu;•”Ļš-{~Đ%é9$”›ŖøŠFD~s‡/ë ŧ^TÍĨMį¸×0Đ]ĀDõDķÖ|ĸĄŖČ6j*ŅŌeŌAÍˎNŒUļėøŋt¤ęÖáx˙Vhw9Š/4(aļ2T˜ËPÍ-}Jj’RŅVPNøžËŠ­@Õ¸iĀÆA.ŗāõu§KO—zCĩAŌâ˛Uâ=`ˇLjb*F~ŅFs:Čv¤™2Ūūd}ąJ˜<˜_玝JҌâc§šē÷†Ķ%Ū‚_7x˜566ūfk冗 o„“īęī+*6dąl~°_ŠŋÚĘĨ 6÷ēˆTP~īÆŨn‰˛Ąúq@HüFqÅŧ˛#¸TÁV4Ū—3ĸ)*Ģ[ˇt+zwĘįč‹4ĸ!´€õÂB°ÄëUŠP]=Ō-‰y‚sQŨ*–5´*,éP…`S*ĐD(Cui*#ˆ…¤5ˆV-Í@ieo*â.ĘĄ Ĩ‘,ęHN• –Pv0øe@šhB>eœ‡ZHŒlũ|+ŧ”YKâ/ąAxŽ,(RWÅ]TÕ•&€áÂuĖBšŗ@q•žį⠴ᡨŠ&ĩÁ@m$0\Xŋa9…„ ´MÉSāÔ pĩMԝm Ā}=#1 _Ži8aH{qåĄĐǘēIGZ+ÅU†iůƒßä}ĢŽ†/5Å/W‚Ô{úâ@ĐTĘg fĻLjPņ.ˇ“Æ2˙¤9nD&RáįKĐpņĘŽĒø(׊„Û°[ztË @‰aĪ@|Ģ*đŠYŌ§ (Œo~á€2Ĩö‘fį bčāõúÆpa•ÕB;â+ŨVPꅓâßĪ›•ĨfžâĖlÜÁ/îSîËt Ãv 3DüŨķlrč"t%>žŽRišfãœ3ˆģptĢÄū ž˙Ŧ,N•Z¤;ąĸÁ7>5e†o­9€÷aŨáh‚äc_A”ĻĻ(؇į‡đE NiņĀ:OĐ]1Z7JŦÃ[âŊX ąú†%i Đ €^(HSCĶW(b7‰WV7*ėD¸üŪÁwg$•­° Đ30āĘ˙,‘ŽĻĻdwQS̓8 P~O.ë Įx°Eųа(M6ÎUŒõ_6 *Öō‡Œ€Ÿ}fîÎ>fČnr-Ą–aƒ§˛x‘>C§BûЂŠE€4•×\Ú ,(l m!T Ŗ„ žÚĸ&€FXÆÉŖō“z|Ö:6˛¨Â=9Ä5(@į(._ZnŨ‰ŠÔ€]%8‰ģSœį >¸×Qn\œa÷HŖĻļaYo@ē"Éá'›#6Ķ€´-p”htbšˆ›Á mą6ũ]Āa'föÖ bƒc?eģ‰ļ`ų(Lt3Ŗ“•ŋ|,—íb&ÖÃ>[ÃĪÎeė‡^ŽŌʆĨ/ÚÅdŠ EõīÂo—-ę˙Áá­ûH‘Å˙Œ`‚Á Į~bОmäQ. éôÂë 5áY¸ÃđĄ_XD ˇúHŗš:`˙NZ īRų0‰ËXm-Ŗ QŊđ¨ ˜iEx#$ŧ¤ëĮ-(| ›|+x¤ãĖ=@Ŋ ʝ˛%x˙ĸ?lĨO†Ôäà _u|Ëxœ¸ļ?tûÚn„ úžî€pÄ v•^Eš{€íFXüŌáYGūG÷ŸāūO ÁŸāû,öY¯öŖ —k‚Ü_ ã˙•Ą`’}ŲJRtIME×9™û4IENDŽB`‚leptonica-1.86.0/prog/turingtest.png000066400000000000000000000331521506303110300174450ustar00rootroot00000000000000‰PNG  IHDR—C6 ~gAMAą üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I IDATxœíĪ$ÉwĐ#'Įķ…Ļcėš/j*‚dmšé\ ÃÉÜāæ]ŽčÛ_ųŌMgļëĢ­‹ĩã˛„ĨEâ€Ëå˛ļH^!8pbŖh$ džßhåņædđŪ‹ČõĢ;k:ŗ˛,úÍnvuVVå§##^ŧˆxīs…6&Õ3+žyYpgÄ<į&R.K'nęĨJUĸ#áņ>0s}JÁ)ŋd9“*6\ŋ°‘3|n"ÃXĘĪĒL*ĄūÂŽ™`iīLÜåė‚IëX˙¸aΌįšĶ)“Ä4‚÷D&2îfÄÄ{gʓ˜Nā¯UŦĨöLÚŧxįfnZąŅÎx‡rŠwĀ”%öäHŠ1°¸šqf:Ÿs~r"‘)%>FĀč:Ģ>‘<“Ší%0Éņd>wsëĖ™ā\LŠŽ’C9×bŠŋˆk~Ķ{ĪÍl÷ŊžŊqÚ9Ŗį?BĻ—Ékd:…Ÿ įNĖĶ|L9;ƒ29LfOŽ€I:c>-Ø-01*'üi8+°œNåĩčŸÉ&N1bbŅ3ą3öSã™8Ô'WĀΌg#SOq'Lö0x& íÎū%ŊÄĸzL3ˇ#ĻS™ŋōåMoœcŠÉ#e)qžééįņĖL;yvČĩ ę¸pĀdRSD3bJSšƒō|"ÜΘōSLÔî8´ģ™EĻą/'ᙒ_K¸CģÛS"ė1ļ;úéÆMÉEc}ôĶÔåXמ‰1č§éŽęô- ŗáū<ž‚ú¤42M3dbbLL#Î'ņÕ™;‡:NũŨĖaįŽ{…LÔįĐßą(ôwÄ¤Ōž™dÆ@‘ÅšO!&Í>˛—#oĢä#°"˛ ˆ‰ĪUŌ3SĻ1ũ$@?ÎtSũōoÚK™Ĩˆ‘ƒũÄĻ ,¨üg=“NwÃ$Xx¯/č|xŸŖvpĐā~߂r^hw¯ßšž™œČ<Ķ: ŋąöĸŽ™ŲFĻbBīŒ +“SkoWȅ_Uŧ#Ļ˜R—ķuoį‹LY´#&ËžXĪ”,üēC&zlkKž.üŗū‰ˆÉø?žEqŋƒƒō6 Vå6Lŧ_eYŪ†Ąž‹VLšØĶ oĪåū‹UŌ¯LĪ´ļŨ-ĘŽ™Öë§EŲĶë;™Ā,ŅI͔ŦŋĒkϝI][RRķU&‰ d˛k˜^÷Ābaė+Lū™ÉŽ|ŤgĻi¸yũ ĄoŽŦ•æk˜ÂĩŨuĪ“¯4‰Ą˛zK/ÁāU LéōWxÛ]ˇS1yŗß3åh(„į˜ąēԈ)YΤģ›'̘Ž\ÍdŅ j0•e=Ķ8\'ģf jŧÉ4-™˛6LŒĩPpÛ1ؚéõSēĖôUõiĒ\ĶĀÔY%/™ /™ Ä,鯒)ÉĘę‹LyŌčIKĀuˇŊ0é§%“Ž@§ãōpõ‘¸ZdŌĩAĩŽo8ŪĻߊé%=-bRpfœ×Lg|œ-0á0,EåOļđžuⲴcĻŧKMŠš¸ÁtžĘ”âÔ jYzĒ0ÎMĮŨ3Q…šcÅLūę‚WĶáĀ$s¨^ŠM4 öˆ‰Ĩ,úΙ,2å–æ(đ)ÆļbŌ§Ŧ˛Â”&ÎÂ$P˙¨×Á2…BŌ}1Åö#†đÄĻfJ€)õÃ^ä§Îf&Ülań‚BîœÉ0i#K‘Š&´ģKĻŦÉÄ퓍96|›>g 2u\Į5KrZ›B‘Á †˜|“׊Zbb—ĸĻ"žš1(6Æĸ,™9sŲąWŧ€oOĻæ[ >šÂ×zjŪ`Ё .€÷ˆ)Įyĸ8cg.:fŌø(Ld’iæ™2,ģĀdĒTͤ9(V`*„ŠLŒ:ܜw6į˜āû2#ŦT똘Ž€*ˆ‘ĐČąĒ˜ +˛™xÆÍĪĶ™ė– qeRøĢŲËW¨”ŖĒCûĶ$~.ôS”ŸāБ˜Dš 0 ûS؀æ,é–)÷LNhöōtZA‹“´Ō3,?:A&†•š&-ž|†åôQ/LÎÁŗ{™DdđēĐĪ{&Í=“c' Cş"Ķ>e›L@U™ŽíL{Ļ×ɘTti]"Ôŗ¸Á4EĻ$0Ą/ž€ŠíÜG;CŨ"ĶčĨtÁ7˜üd˜g °C!Ļ11mgģ›.ķLŽbē|‰MZáƒh0‰Š ę8^ŊŽƒ sWWŽąëaÜBLôė.^rbJšL9o2áú8ž;°ÔŨ4KsSÚ1Ķ•×Č“(í'bĒË ôžÔŅ>ĒŌy–XÁˆŠc=˜rŠÎđīU8íę™Ŧ\('ԙx‹æšgúsFd 2uVĄLgR16ÂŲrĘÉ÷rČTÄĶ8?¤ \ö cotz øTš;˛[&´ÃĪū,ƒ~L[–dōSÄUL3Ôõ`ÔÁØ žüHĄŊĐŨĀĨÁŊī˜+pų5šYaÂŅU!4•ˆrŠLúXĐōBĻŽZ^`;\ŋôLPFō[—ĮDãgí‹ČëLņ ã™ÎØy„ĶvĐWcIgšŧÁtDL8^HüČSVWEĒAĀ09'&{Î\„ã` ę Ÿ[ڙ6(Ē72c6R˜nŌ\k‰üÍūŧFĢP.b_ˆīĄ ]“ēŽVd‹U‚÷t| e‹åØÕ,lk%N/ōaLËōâ§÷Š)?õ‹­oūo×~1EōŽy囯ë?H˙@˙KķŖŋúƒôüwēEß,éÃę¸ęƒéínAūųĮưŌZ:dZ‘"-ūčĢ˙đ?į˙úÛ7Û}n'ĢŠÛÉ#S;ydj'ûĘä ĘũdR‚ēōëŲ‰J{!ŋž=d;ņBi/äwh†ĻXō‹6nō~nŌW‰‘_ōŲ’ĪĶ@Lö†Ÿ2Ą¸Šgë|vΔæ–Yœ)YŦĸŊ`‚!aįČÄĮcÅĻ;ņIiÁdĪOGb2™Mõ|O˜æųņ…ɉ˜ÍĖ|đVX3%#9sȤ÷†é2%3­Îė Sq\ “Н­Yõ7‚ÉūRqœ#SLvēL6ĩŸĻxvmėßÛĻÄ@}&y-i'~Æ­˜ŠäP~†Lų>0åRk,§Cņ™ĶāV'2ņ+svLėŲalÁTDå,ēĘ g™:sOŨŠ)L*Ŗũ`ōėž)&ägWāÁąSžŨ5“¨™"dJ+&ôiŖ×NŋæĢLVRÉŧõ°_ “M4ē+(ŧ;4}OL>‚&É1¸įí’Ā„ņ‹čēĶžįU<9ø“7fŠv1Ąß&'Ļ]öz5očd‹~ę˛É„nrĻ˜nâ™X`˛Ō3ŠîøÚ1y¨[¨Ô ˜ Œ/(™×ivēkĻ”n$QOSÎyÅTn–\ī–Éë3Â7&‘ķI`JÉ&˜ĢcĻSb+§ĸ\ÔLšāšė0Ē%ŊЗUåLÁPÅƚÉHž‹3ųy^œã„™†aIÆ“„ÉG(ŽĄû`ŦcÚ5˜R`zļk]°ÂŠ“rŧä=ģ{ĻØ3ÅđėŌ&S†īˆ…I„Ũ2Q´j2ØP\ėtũ ˜Æ &K:sęâ’ÉÄ`kÆģĩÉ+&n9ú dš%“Ȑi<“áØÛ‰ ™ō’ -ôĖÍv; U2ŊõL™Ė@›ĪlÍ$a,<Ûí„OYĮĮ\qŠQT Í§& öco@ÜėT F¨˜a "C=`Ņ“ž" ũ¤ŨÚé”2 ôköLY*Åāéô­é0rģ<4ËD)`Ĥ™‰)l›fđ4ÕĢŨ2iL˜(nښ&-¸‰ōØĪdāĀkÖŽ™āÁ@ˇa[8ĄîUU9ãęŧĢzļc& ö‘#čÎīÜõb†%Ė6aw\Į]V9Šõ›wŽ­øųĖōÁė “náO]|Ŋ[&õ>ß7”5nŋ˜–%ęjŦõŋ3V?ģ'ėŸ>…ø˙‹ãō7Ž˙ËGNøä—ž0?ųw6ÜS´Üųé­ü}o~âœíåa>Č?ü[Ã0m3QđŸō-o/žZ÷5ûęĢŊoōČÔN™ÚÉ#S;ŲW&ĖĖžœ)sHИ÷¯…Ö¨Ķ}eJ‡FŠd_™˛Ô×ņoŨ{÷îūô.Ĕ˜ųķķ‰J´ė7cv;AĻ$¸ãĮNˆÁŋĄ‰<́TLøoh"Īt(ĮJëŗÃgBđÃÁ=kŊĪÃĄœčsv)'â3Ųy†Îc‰‰žŲķËäZüžė<“é‡1IņÚSž\ķŧxVũ0˜ÄÄ8Kp3\bâČt?AėGģŗž ËIsŊĪ3ŊĻrJ\Á‡÷˛ņ-ã‰gú2ų,Ų]`ŌŲdŽLō3ųåžč'ãĻãéܜōŲŪčLíĻÔßĐÛív1ú.ĻšBģ ŨŖ>ˇŪb–ŊJ÷ČV™ģ[ûŨüāS@Ļ;] ß û:æÜ7ydj'Lí䑩<2ĩ“Ŋeú:>W0Ij0-\f"ĐôšˇiĐ?ĮqOY™<%Ŧ^dĘ™Ú:†ĖJšžLĄt{J7T1%>ˆŦbZŦŋđvœKĶ\oúI7T2Š%ĻĨ4ūë˜Ŧ0ũ((?FˆŅŲØ6˜˜Yėƒ Ī+&|ĒYŠL=)ōĀ”ã&:˛nw•…’dZU20AMˇŧ'E˜ m5áŊ.“‰°ĸÜ# ™"dęË L¸‹Yd"ž—L¸‘LB¯QKÄĀ”÷åĀ홞 I˜Čž‹%o¯™ŠĀԏąRøÁūÅČ$+&¨äĖEĨÛ6"6˜80} ‰I͈UTÅ$]vĘ0ŅQ8ƒáņÁ2VÔõÍäČMcģ`¸ŊF&UĻWÁúėį1ĮÚ* Ęhwž™|e5\=xB9T;ĸ ílJ×QUę•IxĻĘÁĀ„CvQĢķ۝¯÷S´Đ;Sę™*žE¯‡y€Ũ`’EßL34?~d)€Šx&Ü8¤ōÁëbŋ—ļgyßLdbgMŖAkË3 Á0’)™đˇqƒĶ7{…U; 5Įžéƕëč˜8ķõnė*Ū3S[mD.4obJšL‡ŦLŪã™č|Ÿ}K`ŌįnظŖĩŨY>JÚ2mē*0]Í:ZŸGŌēIíįá‚mÉ÷ßŨĖēb/yv™3x…ø|ũâHÅÔŅøĖYÎ#ŨBMåōpũ`ÉtĶ“rö0ĩY•ĩÉįw3uÕģ(‘ŸJ>™ļ!›äķõŠBKĻێ˜4+Nåd2iQ=Mz“éŽÉ˛ËĶ˜Z¨í>—kīJē˜LWS¸ė4Éy+Ļé]L)0uæ¯gFIÆ'm\ŖÆw2Í;d=Îø¤Ëi|“MĻĀÔŅͤ8<'­˜ø]L"ž™vÅÄŨá ´ģQƅ¸ƒ)ÛW_tWN'Đî^ß_ĮsySc}!ģaŖ“„ˇŅO™6é'—Éŗ˜&īÃ%ŗŖŖS>ßĪdâĪųĻž…œeģڔSąŅS_ĩčī ‹7÷w$]1ivúŒEWę~ģ€˜6Ų*ūŠŽ˜ K9›N[ØOÄ$ībęjŗ2mĀ´Ķ\š÷Ié 9Ä^i›¤ô…4¸mIˆ‰mäĐ(• šĪtÆôđėąČ„Žģßt–ėåáÖ!͏cW]5ŧ‡6hŒb7ēĶ“íÖ7îáŲu(ž“^uÃ4ë ˛ įUbęx:`ēEĻŦ&ĸĨ,sôôyxd0ÍČW§č€IŖ'lü`“•âC×ÙRüÁ3Ȟ ĘŠ‹Ŋ‘)ŋw“{oL¯=Sz™´ŧ‡éūÕ4`úŠ˜ŦôŸxSâ"•ÜÃtwÕWŽ´é(„FŽ,Om“¯ŽĶbÆ^4‹L!áALđw!SrįEjAWPŦmeį÷Ž›TLđe*yŋ–i›ĒoqīžŽĢ´uhÕ"“F’pĀ[ÅMĻ,5k™ļQ[ R60éšiQ§ŌŽqõ‚û*ĻČGŪ#Sžõ‡ļq3ΉiĨëI×ÅhŲĶĮËLÕ@ >‚ÆĖôVL˜Ō;˜ūŊ ҞļŒkĘp+ûgčĀß|vy“‰7ĻļqU-xą†‰\=ŧ††67ž18ņbåČŌ8ŧZ` ˙ėŒˇ÷ËoԀļqÁ\Īdļę,ŧ*„ų48†{Ļ12ÃĢ“•ZÔå”E^‡ ˇøvnĄņ:&lä&UáUŽ‘Š5má–Ĩx HĶK0Éßy:´Ī}{ĨIÉ­ÖŖMLÖG_—LļÁ4ĮƒF&ŊČT9ņ #Ņ´ĩÚ­Ęi-“W<,ŧĘšŽĘZŦņ¸‰c8úŊÉÄ+&¨NēbÚĘõ9+Ä:ϏoĮĐƒqŒojwĐ´ŪááÖŋÚĖčß5 cˇÛU5ģ\äŌ((MF> ´˛Ų1úÆŋZĐOČD>…ŽÛØ&_e)2mˇĢĒZËäĸ“D•‘ŠÕ4ŋM-ļzÕd‚Bĩq.lLąZ<šüŒ%cĐjĢøH5BĻĨO *(•˜ĸ@y„Äā&Žw—´r…)Éc?ʍ"ã“ØíâmõH¨•ČĶ&Ņ`Jā‰á!Åmo˜āų‘‡2Ž‘ ūœ‰•fKĻSdZ2%ô…ZU•TãžĀp0Šß!¸É_LŠ˜’¨nÉ9ÉĨŪŽÉŽ |W§üŽ0] õWØSw1Õú 7 ŋÂįU1 6Š'вcŊM'l72Ĩd‡SīI‘Ą5nņ€JģŅßáöÎøŧI2bJ¯&ΰwږiĨdĮB*z\1ĨôŽÂÁs}đ&¤gÂĻĸŠƒP\Pē‚ģ92Ĩ[ųåĪ61šeτۙ"I}h–1åhFDšÄ-M9wˇ'˛íōÜŒöÎ[>ULõŗK0<4™áĒJ}X)§ü@€&{ωpˇW.žÚr†úiy°Dvá•@I‡Õ §>čā#Ą<Ė‘ÉyĻK`’Č4;+ˇeZYđŖL<Ú¸bĸÂ3Üp¨>Ŧa’žI͏dÚnz2&ˇ<Õî­V<úWą×ViâęC“ Ŗ˛žŠ&nL™ģēÚrĖž–É+ԁ,0ų=6=wõa)n0 #[ Ķ4[éŊZ0•ņāAū˜Hrčw˙¸dĸÎ××'‹8y8,0+Ļ)ņ‰CĻšJ᠟ļbR™–ÎQCDÃŋ"…ÂúύŽÃīD+U &_ŸĻ`ĒxĻ)0)ļŨŧų:&Ÿö@Õ L Ú냯Ŋ Ļ‹0lŌš‹q†{Á@,ŊÕ[æ—PFŧ8üōasŽâ{<žfŅÕ% Ö‡ĻŊ*_ģ1]Īr0€oˇÍĄĸ‘ią‡ô$ÚĮ9VLNJ‡L̃[e:ĨÕ)Ę ßēęmķ•˜UĻœÂ0åF^1Ué=TÉflƒiŽ9JĻÂ3qŋ æöL‹D9‹3ŸŸ…^S^.9Ҙ†tX`¡“1ŽN÷ûNŌ_ĀąĢŗr+&+Wf}1uŋŖYxe”iŖxđžĨfŌȔ{ĐŗÔL™džÍŽb˛˜rX˜}hvuõžŒYPJĻj,<,ÉJ9%ƒâ4ę8ۋ‚[¨ã{WNUA JãĨbĘ÷О}KĻt`”ĸĒFlŖLŋyˇ]üFGLr͌ôf‰>`ųúC˜ÔLĢwųû¡•g4ū’ā"ÚWĸëBJ&ÛüeIT4 S#ĐN˛ŪˆžULXŗē5čžú‘ū3ėā—˙đ0ũõßŊ~mõ›ŸkŦße{ŅŲš&ĩ[`ŌûŅŗ,0™}ŗ 4˜ėL4˜Š}ŗ 4×Í÷¤Š/0-ųÄ&MĻW¸¤É´/ɐ÷Õcß䑩<2ĩ“GĻv˛¯L_…—é $ĩ ĶįŪpʓ2#&6˜T ČÖėŌŅ?ĶĄ7zk&JnPíŗ:CĮī†[xē#Ļ´É4ĄDĶ.ÂČŧęŧŗĖ–™ŠŅYs_d zĸ&S„×ĩĘ0ū&YŲųjūz˛Ā¤q8ÚdbÄ$ûdĘOé[W;íŋÆZÍ*&ã ĄæOė†)OXš]\$Yņ*á“:v)ŒûíTbūëB6v /¤NĄ<û/§S–°Ŗcv’°S6ŠD&If’pË-2}šķ"vcl„>ųMŋLöRÚ `A& b‡‘Ä(ÂS82›Ø3ŲØF9+ūōũœÜY‚éÍLGGGĮ/N€éYô™F#dŠt”'øėLd˜e ~ągOŲyTbzĘėå‘<8>=:9 Î ÁŨĶŅHˆˆ])æ™43ėūá/ČtÜ3σäā8=:Nåäu!'îđp$O§˜„žOĩągįĮĮ™ΟŋėõŲbzžüæqz˜Ä×Ȕ1›ĪĖEÍ>ŗs{–ŋ琅`æâüôHöÍtΞ§921b‚į"žÁŨ‘É"S?Ųž]ž~1ųųå¨_&¨ĩžÉ&œ9ŸÉLˆëyÆ hX<ŸÚ4;“ærσd"0_…øUhw“œ+ŦáĐöôÁĀ”î€)ũī)Õ§F ”“æN¨“tđķ 4Á0IˇĻK‰E„íū+Š@Ļ#‰LW&LŸ’ąc.<ģíâ̎fbw2m:Ũ_0.ÅpÅwŪ\¯=ÛŖ´cŌl—k{ČEw2MŊ?ÄîœÚ)É"6äķœz_d`ŸžIDAT–Ũ-Zaë5Jŋ†™_æßŨâę'öŸ_’zk Åâb‡‹ æ^ĪTûĶāîy;t¯&•Ŧe*Ēå<˙j˜ōš)ÆtģÛ%„˜Ö*:ƒôpĐĄŦĀũ1ŅŨĢŨÁŪĐQ×KąsątĩëLK&?Mį•b‘:sÕ\ļUā!˜ō4ĖTf/™ėN™RœZUŠg˛IÉt24Ķ-K“ ÍėbH&œ2ÕL–LūIŦ9 n—ëSŸ‹ %Sƒx‘)jfËCBé*‰ņ.˜Ā>*™|ŖĪã&NLEeFm“ņ™0RÉä3l[žž‰īŒ ,¤rËJ߉XŅT’Ā„§ëU}ZS •vÉäS”šÄ„}pQ™Q}Z •ļ÷ú´aāfŌfWpKĩûŅdŅ;`J1ŸhŧĘÔŧŒ—)ßUBšŪúf‚Æ„Æô­{o… “ĖËåTîj Ÿb˙LDu*ĩĮa—hfÍ-‹§ŒĐûŧƒēãķîvVŲĀ”a7LB;/3ĸĨÍË0'…)s‘ī†I`æKÃ81%ôÆâXķČYʀ†ĩ=ŲĻIĻ˜Žë¤_ ĄĐodJ7GrGL–˜"}z4ĩx<^‹ŲëR76# Ξ_&EL9<¸ČsÚüÕâUPË,3Ō“>E&Ų/SJé[š‘Wæķ—ņzĻÔQ–ëÔÍt=úr’§t˛Ā4…*\ށųâz.sʇũōLŧč5&Î3aíÛ˜Ü"S5Ɗ‰é5X5ãqÁûĶ#&J6?Ļ[`ŠšLU–Ņ˜Ļ;‰ Ķn÷:U3Å6%&VA¸2Ņl`rĀ$]ĖņŲõn`Ą€.LįÄäoįÕŦSÅTpôŽéb§žVL‰gŠī`*¤€ú֙Šîí\ę3hwaĸ)^dŠ“Đ‚Û01-zŽLųË0ŅD07Ķ•¯ã…PwŲ öûԜ%öå‘ī„}&ŪEĻB0Ä]ŌúgšaįL¯¤:‘>ķ1–VWLS´Ô J‘cæįÉÆoėŠ ;¤öcŌ§͔3žĀÄĩĖÁfa¨0ˇŲÖå˜ĻžÉ*$&Ÿĩ C1Q1Í(  ˜bĪÔįŦ]Áün(8Fų c…ôÎX0&€ņzĨgdkÂØT¸,RŊ3‘{=æJ”ÕY:b24%žÕ·ô|q’Sq¨q}Î$Žķcũ~ĢĖuM‚āKqēUãš>gĢøāø?cÜWZŋŗ~å`Ü.4ėĄLęŽX8ūÅâõŗĩ߲[Ļ9ønī~Á[3Ũ)âCžkáŽß|ũūũ§ŋ˞^e”|šŽ˙ßŲēcü iã?^|įãŊcēGūđ“.ÆųÕŪúŲī›<2ĩ“GĻv˛¯LĢ[ÜŲÔī@0LČ 2…t¨&Xž÷‡2…)šjmĖ8+™™üË“œ)]dēÅ:gú aųmvøŅš´ō‡\ĻoŪyĖ70=O7ąfOÁPÔ\ÅJÚØĖí1S,1ōK9ĶAÂbö †@ež Å'L* vŲ9SqÄãéܰC`ĘbÅ œ~Ö31‘ņA˜Ž$ŸĪnÍʼnø1O•†:ū)0Ŋ<8z†0å#`ē6&?‘bÂįSLŸĶųÉčNĖvŽīãĨÄ­ĶÄ4ķ2A9]$r"núœÖŲČ4âÖ2Īôcžéŧdēķ>—í721`Ōė6?IČEžéÕ'z1xÚč2–dâōcĪ”īƒĖŽ×yĻĄĶSĻ”˜öA?áaæĖ̐ÚsđÍIʸŠ3Į>>$<ũ?=;bRAgöģŌž)rķĒvŅНKKĸ‹Š)Vû0nqąĶ6*‡yą¸’—qZ•6ģZkúúLЇ ŦWnį^ë˜fĐÁTAš ߛžfXÖ!ßŪĻnāAgˆ%qÔÖJĻ|p&r;Ԉá=.æ{¤žøÍŸC7é'ĪKĐk„V;Ļ–ŽŨ//ŋŪ;ĻģäĮ÷éyöôIôH;l=ūöüģ÷\_ĮHŦÉ(ūëũ˛~Ķũō_U¯L§8˙ŌũÂĶÕģũyúņ|ĸ>úÚĨîũ×>ŧ¯žÚû&Lí䑩<2ĩ“}eēÁTĩ¯•7%ĒĖ7%Bö•IĶĐ$ĩ„X’GĻ{™XŠŅo_+xŠ;O0ŧF|,‰Š ͜%Y2ôŠgĘ"Íô3–āūôC…¸äW#•™ Ú#&>i}1:žŊ°á™ōŖDL'ZÛä09Hö„éTŠųÄ›~.+ųbhĸPNRÎ_›[Ëãbču ˇLs`b—C¯! ,0‰LîIģ35“j?ę¸Iš„:>ˇ)ĻĸŲ&7žéגƒt?˜40Îœ[ĐNûÂ4wŗÉÕTÍķҁ<íĶÔͰžįĐÛ žh^1)´ Ü?mOtÁĖŨčČ>ŋuh=í‹ũTĘūíƒ+ųžŽƒ÷M™ÚÉ#S;ydj'Lí䑩<2ĩ“?ULrãGzw>ØÄD )×J˙[›˜6‡ûw•ÜÄ´1Äs˜6ŽŠl˙î›ČôÅēĶ›˜Ėn˜^¯žļ5ĶRvaÕŋK)2­)ŗÂTj€LôžŠĶ&&^ôŠ*7-&wȄŽkļĖSßÕ÷L†U×īŽ 2 ]î­Ŗä“ 5;œ•.lÕÕ“ßŅkuÎʤžĒž‡ōŲsË´ŪĩTî„É@ ÕLY]ÉĻū˛Āä\ŅëŒΏWLļbbÄTāK˜ÂV3 ûõŦ˜p÷S1ETVVL<„)ĸũ%ũŨ81Q žņLÁ?Ō?ģ~séÕL¸]oéĖîį¤}”’Ļ.> JĶ+Ķōtû&¨Ė•1L˛Œ*ÉRŒĢÖAŸĒXŊ3ؚIŽ2QôĻxϜ˜,íƒŲⓊ ›fßɰ¯H*ĻōVž]q… œc•.ˇ6d´åÍn˜P9VqæVϜ#C„íčĐüAQávEŊ3ĨSi×&nđYEöP8}QÖƒÛ:í€IWLūf^ ų†u:˛`$h[ŠIUVÁ~™hˇƒĩL:˛‘Ipßî Ã"iÚ3SâÃq“†°´áĢ2)nŋoĀHĐgIũ‘ĸ_û—˜,ĸäQØ%Ėšƒ˜dū3cr>IĢΰķ]1e¤ĘŪß3MULAÖSdj<-}Ü;“õLoŧČdpŖž\ŽA7éÆ8Đŧęwģüs>š˜XdĒ^–öÎT”Līą‹ķL)Ė'1nÁsÆ'ĢÔøHīö=6´AęŅ ÍŌéŗČ‘zkŋqaøˆaũÛãh"S¤.O*=ÎņÖøPŅ.õÎķ0ĸņí~ǐ 7{Í7Eĩ/j#Ą­TÔLŦfrŊFÆ"öōöWž.eŠņģ6ĄŽPLķ"õÚĀøáV¯ķ‡ČDųy¨„˛Ā„Ĩ‚›H“W:ļĀäĒr’Ž×-¯ˆŠC&WõjøÔđ%ÕĄ[ŋY˜w=ĀwŌåŨ;{`Z#ēŲķëøm|]_ŨRĄ[&UG4=Éž—ũ•Ôš7zČ@xŸ{bKyÖ¯wâ1Ũ-F_ŖŸųûEĮX‘5{9-ŠIßíĶ’˙]÷mū‚ũÄ>1Ũ/ßĖØ'ė{ßžųÉ­>õ§js@ydj'Lí„ėĖĄ!–„ÆōzhŒĄąŋî Ę/(=đ;pĖɯ;ÛRļ}ūF˙âëߥy•qwLša4ũ†›- BäF&“Î\gĪNą‹dí ķļLķîļž20i7˙’‰ŽÂØž´drŽof‚1HwL“ŧ=ĶĻĢSôēŖŅŅ$%˛‹¸Íz!Šŗt3ĶõdŌ/Î;‰U‹IŽ\­Ÿ LדŽ6ŧ;sȎbÕBMŲähŊ§NÉtŨS–ÚŖŅAœĩ`2é=LŗŽ˜TŒÛĀ>Ŋ˙RÉĩ¸bęHCi–Ÿ¤Bˆ6Lî.ĻÛë뛎˜,čņ˜Z4™Š;JÖŪ•˜æ××ķŽ4yv’dB´Iq7žƒISWžöä”ĩcâw07ģž61Éü脉ÃļLk÷†Ą>xÜ“(ŽN¤âíŊWâŽr˛lēŽœŋ€éڝŧŸ)—w19ĩ1ņüčø˛UģŗÉL9×Ē+ĻØž_Ę6úÉ$wč'ˇčŽVu˛ONžŋ||7Œnę[hbš3&vqĀâ6ũfņæūޤĢm? o9dņU […˜ä.˜LTˆh2k‘ę˜’ģ˜TGL[IūĶkO—LŲQ*Ų°4Y2í|ÃK”{˜vž)Ę=LƒČ#S;ÉĶĩ§÷uîpß䑩ôÅT¤ølOLņé‹É>`ĖŅĶCÆA}1éŦT÷ŤāeĶSöPĻå~iČAĸü­ä×ŗ<|xXžAú‹âxŲx˙§ĨQÆÃöPCæ‚?`nÛû‰-1=ĖJsŅ(ëģ#™VáŊ?]ŧtîAL8h͞Átg*úbÕu™˛%χíEP ĶæŽ6hWoVúŒ6Åtˤīb2ėtųn4×ŗäF¨ÄdSũĩūĖĢÁxõŠą“ÄĮT8O-îÔQø>tÃ|ˇ-“öLI‘Ėë*ƒŧek*_ÁCzÚÔÜpŽ•/3„īÊpģ-“:X˔#:XúĐãŌذH'äĩJ˜”XbĘ.Â÷Ąŋ´ĪõšÅŽ´j´ĖÄh2 ×ĐIŨ‡›P‡ ĒÁDÍ ™ĖĻÛVŽģĐíŅ3ŲöδŲ)2ĨõØ­ˆQ™t L¯ĸޝP4K@CgčĖ‹‡ QiyĒ ˆÂ÷‘Ģ-ĩŸb '9všÄ”süģ42Š$ ŪĖ:ņŗ&*F_T†.ĸYžŗžœ–§ Š8|_ŽžŦÄdˇa*–™„™!ÎÔ|ĀēJ|‡H›6VėŲ2SVū]v™Iˇg‚R^b˛ÂŒ‚ēb*ã Âû†­/dųmAeä"0Q%Mā-÷>w1ÅĢLht&“zvĨR… šßˇ‰7. ū™øĻvå&sV}Wüĩ"0ąŠVJy™‰ãĒg–ŽiÅ1ĩ¨č•g‚æSāIpĐXĖĨĪhB…X2ų?Aដ`OÛ"a)/3ÅXʙ0AMŦ™ÚĮ"UL˛*9Šr &ŦTģ\j ÅĻdé^™÷Ī„Ķčp´Ä„vÂútų^lŔĻĒÖL9/™ōr7Pj…Vú] ‰‰Áso ôĶ…ô*ÃKQ .ļ싺¸ŠSh!&Á’UVAņķН1tĩdÉbO' =&Čå“и%cŽD!ŊĘđ;?Û#épeȞã_ŌžBUá„uKĨ}[‘ ž.0…WҘ˜Ō&¸X‰LDã§īÍH8eJĻöÃ5˙[°ņĖuD7˜ČāĶ5Sö)'%LLĨ#ĻS`‚6a)đNķĩ @Ä%Ɇƒ Éiᙠ3‰. ĩ ēR…Ÿ>Žp ´õœ~ÅÔ|Ú‹ˆSEJ)œÆŋBąŒâŲo‰ ķũÛĀ”såx!}ŸâomNA‘Ųs¯˜Û2ųRV+L˛Ā-@ą(ĐN‚W)'L*Øjy`*ĸņ2ĶžCeȔâøŦõ–įĄģ_abŋÁÉŌôÃ$´ƒ]`Â`H(ŸŠķf\ÉäˆIx=W3a¸ 0šm˜‚Y”.l´-|XĻg‚Ļ%ču 9œŸa<ä,¤ąë˜˛š ž×§˜ˆÉ5U?ļ=@‘ôĘ3ŊĀÍAŨÄĄĢúTp°|¨ũŽkĻh{ĻĢõLE`šUå4 LGÄÄ+&˜ōh’SŅ`‚¤;SëúT15'g¸W憞<ķLWT`ΎŠāĖyc>ąĀäLÜ"“,™Z¯ÍÖL“X92•ábá•Ã>3į‚Q0õsÅēdŌbb8Ø4“Šé–NCŦãb ũ´‘ŠĀΟv Td{=oĶ,UŦŠ|ꔌ…æÁÄDWLôeW\s2$€ ôSŅēo!Ļ[`jjūq`’”™™d™ŖÄĻ*U—”‚ė&Š—’ØA]yˇ_œĶR1V@T*öXB™æ­™ü_DûFŽ2y›Gšō2I('ėæé@Ēa‘é+úVŒä)˛/…–[Œ[0÷ˆŠÖ0åĄŋÁ›uV2ËYJ1ܚFëĩí ‡H—ž‚ “ ‰Œ)‘|ūė‚m˜đ;cÚËr…)̤nŒF é@åįc#xXļdí­`k`2ŦĻTĩ߲b‰ųR“Āēe“r‚‡˜Ę?éh’7˜ ö8§:|–0´08t<8ž8‚_tûY2ƒ_(—&Ną’E&ŊuԘūΉIēōāĮwoŋųŖÄŨžqåė †ļō2áĄrPÕp*¯­Xú‹–\˛S˜ŧĻzˇ ŧSÎRŦ X>bļ”>đÛÖ@·ņÆnÉu kEŊHŽ“æ{ Y sæ™îņäįī‡Ęœą›¨ÉŋÎžĒšūs0Ŋ2mų T”īūĢåĶ/Øüņ[Ũāä/o,苏ûÅŊK>¤tÕ2Ũ#ŋūÖ?”!™(˙?ųaMqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ÎĸŒRTP`š^ԃüņJ 1KÎ(Į?ĻGõĨĮŊ/ķé@„įüũ)Fxü)@˙?…ˇá@؃ˇáGoÃúŌãĨ)éĶąūt‡’ūgųR‘Éüi{įß×ڀGá@ ūtáÔ~ƒî ūtÁ˙=éOĢPz§õ§×ęhĸOãũ)o §cņū”(ā}j&>Sôū´Ŧ9?SKŽĶúŌ˛äŸŠ }Fã,>ŖųPĀúįNæõʐĐ: ˙€&8üķ§Iú˙Jāũ ('ëëíAL@;ûŠ1…OëJOĒŌ‘‘øZ]˙C˙ÅP:ÂœG'ęhĀČúŠbé÷?üč äū4¸ųüéHäū4Šę'9˙JAĐ}<}īøūT€qø ?ā“˙ooĀ͈ÉüĨãđ=ŠØįņôöŖ¨ßųŒëų B2Đ˙:x;ÔĮā{{ŅĐ„|ߏô¤ŋ q1ë×úQŽŸ…č0åũiqũiÄc×§õ ƒÛۘúũãq–üŠ0ü?­<Ž*B?ëH_đ‘’P?ˆūT¤`ūtúåO¨tŒŒgõ§Œū”?ņęúŒãõ˜üķ§ãúRcÃúŌč/øOCøĐÍøåJz~t¸įņʘˆņÅZqč)ãķ¤WQ¸įņĻöüĒC×ņĻãĀQĐHi`gņ§;ū4u3ԐŽԜ•ŠtŌ?­7Âž­!ūTÉŠB:ū4ō8ü)ãķ¤1¸įņ¤âŸnô˜Đį >x=ũéÆY ??éLeå0Āî;PŽÃˇŊQ9+ķwʓĖ|˜ôū´‰˙€_ ķô4ė|ߏôŦâīƒķJ]ŗ÷_éGQ—øĀ˙€Ņ۟Cüë<3ę†Œą“Đ˙:- u4Ū<÷=ũ¨ÜŧúwŦüļî§ŠūTŲžÔŋ‘ŽŖ§¯ŊŽNáßŊgsˇŠûŋև8’{Ņaõ4ˇ.áČę;ûR\}áÛŊeÃ2ÍķFNŋJ8īĐ:˙Ņܸ?0ū.ôoNNá××ÚŗĪøG4Ëī|ã=ž”uL:`|àīA’<}åčgŖ@ÃĄõ÷ ŽĐ÷ĸÚ nh—@Įæ^ŋŌ›æGķ ņTqĪ'ŋ¯ĩG4‚(÷‘īE…ĐĶ2GũáĶúŅæĮŸŧ;˙*ĖÄą‡3×۟ŽHúĶüø–?īԆXļũáĶúÕãđ¤ã§OëJÂ/ųąäüÃŋj<čÆ>aÔvöĒuúšä}GōĄ č^Eˇīvô¤3ĮũáßĩQĮēQ§zĨī><ũáÔv¤ķãÛ÷ģŪõKŋâ);~ųŅ`˙€]3Ä27zöŖĪ‹#æî;{UīøŅŽüŠØEß>oŌŠ˙õŠâËž|~žŊŠ Ņįī ˏ¸ōN1šoÚGšŠķcšĐÔķŖĮŪ=) ąķķũĢ2iÄLĒW;ģúT†äcŊę^ķŖĮŪižjqķ §ū4Üt Eã$xûË÷…RíH{Đ>ĨíčˆRoOī Ĩū4”„].ŋŪ—Ÿ˜~uGôô ŧXg¨üé23×õĒF“Ÿz]zū´dzÕ,œw¤9ĮS@˧×>´Ÿũz§“ę{Ō}M\˙M#§áU76zš79=Š%~V'î}j—2?áVd™#ûįéīTQ'jk0U$Ÿ^ôÄš‰Û Ų?J‹P'jzdĶZõA8B}ķREr’zĪØ`‡Ë‘ëPÍo˛ā¸\ö  ’ēÄģ˜€?úÔčÛ~õū•SQs´&Ū2 }œÄ¨R˜ŋáLE :~^IŲ.c@88Īŋ|ác\ŠrŨš–5(Ŗv!—zŽŋį4‡čj­ŨËĀĘ9ę=ę?´ŨŪģvœö .hc¯ãü¨üĒ kŸ2ÍÔg?•WYᏗ9QīL =xĻLâ8 z/õŦ游G¤=j[į&8Tŧ9ĨĐ.00ŧš?6p*6•ĸœ˙hŦė‚>Ÿ)¨ū ¸Œŋ!ŗœ{Q`4­Ÿ˜¸ČÛ֖ÍËÛîlgÖĄÔ#"œ(Ze„,G™–Æ3ŽÔ ¨ļ„›é=hņ¸ō:úûV3ŖŊėŠ€į?ĨKsjöéæÜÔĐ5GqMÜ zzûÕGģ+d}î1ÅAokį!’Lü܌ĶʒpAûŨ ;7â?•dĮ+ŲŨĪŨäzõ­øöūTàÁĀü1ψdyŠ:÷÷¨īĨ0Û?:­meįDe“¸$sH}KÂhŲ°$Rrzj_20ꅀcŒ ËXZßPX؃Žâ¤›N  “Hā&N0ŸÎ˜^)Qļ¸+Ī#éKqÅĢķüŊPĶ˙ãÚOĄĻĮ}K61Ċ|™7üÃˇĩI$ņE÷Ø.G§ŊTŌÛd7Ŗ †Ú6ŧŲۄ9ÁįŊ 4ę;UÁ?7jƒU¸Ī¸ĻŨؕ;á8äŒ(ĨÔAc=A0,[ļˆÍĐ(ūt%ĖRąHؓƒÚ˛ÚåĨHá ) õ­;[e†<‚yÅå‚2Įę?•Tԇú#}]#“õŊĒž¤?Ņč(B kČbļEbŲž*Ô71Nq=úũ*ޟj­˜ÄüÃĻ* ´6—yBph~[ČĄ#į8MKčdmĢģ8ô÷ĒWIæß"tÜJ–îŲmíÃ!9+ہ%ŋ†9NâFzRÁyÎäŽŋJƒNļF„JĖ9*ø~Ī"șíšȸˇqŧ†!ģpãõ§ÜNļëšķԎ+5ÁŽxe?Į‚iú‹™f¯8ÉĸāÍdYWpÎ2;ÕˇE—o”`ūu^Îo.Î\žA¨ĸBmf÷€´uą¯ÎiđŪĮ4›@`Iīô¨4ûthŧÆÎH"™s†ũᐠ04{Âĸē”C, ÎG0ûĢôÉĐ<-œđ  ‘l҇ũâ$ö­'‘!ˆĶŒÕ]1ąÎzÔw–õētâ—@'ūĐLĢzŸĪ_+Ė#=;ĐöÉå•įU+,­Ņøyύ.VsÆFšIn’& A$ņÅS¸Ck0eīČÍIg •šWúŠ@%ú–ÚĀu4Ī,‹ČÆ; Ōe¯Ŋ!_˜sÅWģŒ<$÷QQÚK˜0zŽj͌ÆÃÚ¨YßʧĐĐĀŗÂJø\ū5/Ĩ2+u‰‰\æ¤Å4ô¤"œz~”‡ühĸcŸÆ’”įF?Î)ÚOZZ "’šJm´””†–ƒ@ =hĨ#šN␠ŗ8’Sč*5eyØĘøņš’ĶũlŖÚ˜›#ÄČ„Õ . @†‰†sĐU Ģql›ø8=*)Ūâ(‘‰=¨ž9<”ec9ĩ0Ųʍ”#æq4ļLmö§Į| áđ G#Ŋä>” ŸPۆī‘üĒKuØwʒų ĩĀíåLŗœ˛ųDĶÍ:%v}Ā7zK… yūē—L<™|í%Ú7ÚĄ!IßZC~?OõĢå”@QŅģUKčŨĨŒĒ’įšĢå~R=š˜Vãũ_­YŌš€öé,âhÕÄĒUI=GĩC2¤›­s"ä~tvŠū˛/\Sn¸6Æĸž9TķAJˇ} X˜šš]žTũzv9Æ{åPŲÉæÛ+{VįœõƟQô*jũū‚™§mqžvôüjĖŅ­Ú.ė2jĨĩ•Ä/ëˇ¸u#ˇņ3”{ĩŠöGúåDvoãÍšvœŒgÚ§ē„ĪFˆį>Ô 1Č&Ã8ČTöļąÍ °ÆJŽÕrŪĐGlŅ9VÎ?@4ų˜Į6ĐsĀ^h [žs3gŊl(éĮ§ojŠo§„”É#‰ $r*ōã#đ :úĸ1ļČįķ§éōĢÚ*ƒķ*œŠļČ °+éīTŸLŲ’fPsĀX:•î%YuE+Ō‹ŗŗP…› ˜Đ}ŸRD[ĄÉ­+›DšEÜJₐÛ™ã[BNpČ@Ēzwü{Iø˙*œiišYÔđYG˛Ģ1=Gĩ1”´Å-o2ŽĨ…3O”A<ąžrĮū5Ĩkj– „,wyˋ§;ÛpaéĮzVĐ¯ī<‘ļ2wn>õ ņv° į$‘VcĶ!GÉ.HĪZą5ē\ ŽMØ$tĻÃĄ–ÖAŦ’hĀ 1÷Šôë¯1 OęSWŖˆGAœ~uą…eimüž´RĮøŽūÕOQėMôtõīÔ*ŽX–XŠ8;H÷ ] ũ>é>ĪåļĸžIëP]1ŧŧ´~5}´Ëa÷P÷ū*–H æ5 ’G_j͔cS‡č*ŨüfK\/Pšũjsk˞•;×9ŠHų1íëīI ËĶîV8ÄR¤g’jŲ~×2ĮĪNG5Ĩ%…ģąo/’NyĨ†Ō\2&Ös瘊W°ĄÆGTZƒMC-Ã3ržĩ˛č¯VsĪŊGŧPåĻŪŊ ęaÜ#G3F3Ījŋ4b=7į`Ģ­m ČĐãœŌ˛#Įĩ—+€1ŸzAЧĻ˙ĮšņëPßČB1ė+E#X—ljFxÍ#C¸gPX}ЈųWč)˛å?ŅĒLp?ôÖ8Į=é ™ē_Sõ5Ō47)(šÔHcŒŸ-ķØûRŠõ˙2î8đBãüéã‘ųw ŽĐ÷÷¤>ĸŧxî{R8úŽÔķ÷ĪûĮŋĩQŋŊäFĄ‹°4ÅСˇå§Ŋę1ĮÍÚąÖîę0üÆ\r=j[\%Ė!Ôc;¸'šH}I1ĪNãˇĩ sč;{ĶČįˇQßړŊēūô ūÖxõíīKnįˇĩ`#1ĮĢ[ÉŽd"uūL pŊ8=ģRcÃĶŪą‹]Á‡o1`œô­+;Ąs8‚ō:÷Š`œũOj@9zŽŪÔâ2{u42:uŊŠąt—ĄéũhÁÉ˙RãÃĶیsĶûŨ¨ŖqĪNãųRōūųĶöķÛ¨ííMåvŊéüŦ8={ŅŽéN#ƒĶŋj1‡ü}=Š€ÎÃđ¤ ķô4ėtãĶĩ!Čö¤>ŖO_ĮúR`ãō§‘ĪãéíIƒĮ¨A‡~ŸÖƒÔũM))úz{Ör;6Ļë۞(øíøS{~ S‘øvĒ×d­ŗééH OéÍęĩƒļûõĢDs˙ÖöĻ ;ĢļwœĶČū´ėNԇ§įڐ "“)Ė1“õíYrM-ąc^ž”Äh‘Å&85œŅOŨ† rsVmg픂 R>:ŌcÚ¨Ũģ‹’ĢŸĨ7eĮ÷ČÅëÅR†wY:ōx掜{R„sĶ֓įNęr%*§éVapčŠÅ%2áŠDXECm6ūķîiąII!Û>Ūĩŧ"äŸÖõ$=M%;üõ¤  äsĶôĨĮ^={U n]cwˑÆjkįÂĒŠÁ-ÛéZXi–ąŒ˙žÔũ•Sŗfß$ã<ÔSĖEÖāx§`š¤:g8_jQÎ9î;ûUKé?pwÁéV M¨ƒŸá4ČŽÜ%šÃÜ`fĢŲB¤Ŧ†E-œãŋZ–ūĐųÔūô–QÍĮ#žžôú Ši¤8v õúŌ,Ņ9*ޤāôúÕ8ŅŽî{¨ÄāúSŽíŧ‘æDBōrËė6‚NqĪj‡í–ûŋÖwĪOj§=ÃÉoŒˇ<Õ¸ŦFI#æÛíE…vX‰„ŠŦ™##ĩ8Đ:β- âŜ‚{֘(ãœŪô†2GĄfÎ'õĒ˙ÚPŅų'õ¨uZxã#$qŪŽ}‘~_${{S˛ˇ$ÄŠOúûTŪ¤EWk1Ā<H {h¯^˙JƒK…dŨ#grˇúĐņßG#lÚS?Ū>õ-ÍĘÛõƒ¯Š[¨ˆJšČɨ.XŊ¤ Į’ÔY ė˛ÚˆÎV#=síKöõÚŦŠš¸ųAæĻŠÚ5€.͌úûU=.gva­ĪŊš;đīå´{ ã“īQę–îōŖ"–ųÎp)/ŅRâQ‚IĪ>õ¨Fzúžô™i™‰m"ęČûNĖ}ė{U›øDļm–U⭁ķƒî;ûS ¨īīHHĨĨÍæ[ĪŪEĮëZ|Į^ŪՓĨ ]\/z×ĮĖzuõöĄ Lr8îŊŊЏÂdöžôáØņü5OT˜Ãm…°ÆAéÍ˙€Sŧwžēh"Ã,dœô4š:íŧeôĸÆâ8!Ë.AÉ=j+ …†đŗ†=čt9Î0?+;ô?΅‘HĮ*OzVtozÔwt=OōŦB7kõšü]_OjĖÔ,ÄŽ¯;Ą‹ĄvdÍŦƒũƒŪ˛´Fiũ“JĐŪ<;$ˆĒĒō{Ņĸ ûL‡ŅHé@u6Hįãŋĩ7ˇā;ûԘ9Î;ŽŪÔÜ|šöŊčøSŅHę­Ūąl.V͘J¯Ôô­ÉäŖ3ėüĩYR B=Ųb7ĀĮjb\Åuœ0†jm• ļTîŊG6‘ÆL^fė dÔzT’–ÆZ‘‘]ŪÜ%䈒ĀĶĨ’öY}ËÁ?âtũ{֕ĐÍŗîÎ8ĪåLKb´wŠöfP e^FyÍSŽ[ģ–fYZ5įŠm„Ģ ŗl –Ū[Ų“0ėŲÎ2) d7SEvąË!piÚĖąKČyŊBé2ę(.1ŧúT—Ã7ļāûRbZ&ņĄķ|æäíĮ5bÂåĻ„īÉ`zįÚ¯žDl9čk/MÎ$Į­U€­Å˞”Y“ŒúSå’æÚEß+:“Š›H<‡Ÿŧ*McũL}~ņŠ@:ęäĮuBKŨ¸Ēˆ—Os;¯NŠŽ§Úĸķ¸Ō"ßʃĻ8ëM‚ØŽĘáĖŒ[Œdũj´åÖúCwgĩKfo$Aa×č€ūՓ>ũé š„ ŽĀ`‘R<âk=\jíŲf}ÄãŽõ“˙CœĐĢ&Øîb8ĢŦŗ]K”vjEãLEgÃE˜]UsКQ4ļĶ#š­!Đ0Į"ŗŽmîlˆŪœÕøXŅ}hã‚>ĩ“5Ŧ¤´dķô­Yœ$eš8ÍV‰âģRXƒŽN(Ņt’ŠVsĮ&–V"ĖŦ§>”’ŲDTė\v¨lK <đ) lø$Õß1ņ¯įTnS}éZ›ė)éúĶę.…iH’é õzC˛"sÛ֒+hâåAĪÖ ŋ“…AÔŌ^üâîŪ•%“áŒZ"Ļn­EķÃ8gÆ}¨Õá˙GoŠhöÉWnÎm‰úSbMöØ Bŗīļ'ÚŖŗ˙WPî1Œ÷Ģc÷ũjC'"ŠSūx¤#üâ€åī€Ëßu:6ûEÂį v+}ųmëëLŗļ0>įeĪNĩAbœÃr%QÁP*8âķmŲûîôĢ×1 ã Aã’imãHĸØÎ‡$wςЏž5# Åi—HöîČûŊĒĩ´ĀûŒ¨sČö§Î‘LPųÁpO­ĐuØÍ”Ÿ@Zm&Ёéũiîax|Ŗ Æ1œ{Ņ AeD™ā˙Ŋ­ĘÖŽ!ē™9cŠŸP™Bl$ąhš[i›,ėIųE1"´FÎé ĪôĻ"ŧą2ZDzáē Ō†ę&„>@ÁöĄŽ!q‚[OjĒ"ŗã䓷zm 3_,¸ĀSŽjāšQ7•ž}éąM +ˆÕĀāū´Ũöūo˜"}üœįېę1?˜˛¨,ņŌ§[čŒ{ō›ŗ÷ {ÜŖä܃žõK}Ãũã#ųSY$“Ŗ ‚@¨m%6r4s ĒĮ9#ŪŽÅ8@Ą-Ø ƒ€iŽé ËZä…ę~´ē ¯{p.18`r:b’ō ŦHĀ‚¯ŪŦŠ>[@8ŠFsķZįœō3ژ‰ĐëÔvöĒ:W 7ûßÖŦ¤ōŒbߌŠDy|ļŖ‘éīK ßųõ5ÄļįŸŧkH¯ų]¤”đm—ŒöŠãËŽį@­ž˜ö¤ÆŋĖp2ž~ō˙*d¤-ģąėžžõ ę8îŋÃT5IDÆ2qŒ{Ōčm+;î% œsV4ëך••‰ã'ĶĩY´€Áf#ÁÜēŠŽĘŅã•Ĩ•Jģ`1ŠhlvÁôīQË s&$PĀtįŪĨĮûvĨÁõč{{Ōü¯Ø-7ä¯ņwŦŨ:ÕZõ„ąeã5ģ‚ã=OĨ'Žy#Ō™&^Ŗröâ!Bāt>õv'ķ-ÕĪRzŽöÚ[¨ųúՅËˆ"î‚4¨qģˇŪõöŦŨJ)„ąÍ 1ÚĘš­\÷ëëíHĘõ;Đ.†,×WSB#X$CŒæŽØZ xpH,wdãĨ]ÛčCßŪ”ƒž3ßŋĩ qŗ#Oš‘ī rnô&´ûväZ‚ŌÉĸ•Ĩ— !#Õgi+ß§¯Ŋ ˙€G2,‘ēļ0ÁģV1ĩ𴜈UäAéŌˇ™IČÁīŪ­čzžūÔÅ˙ÖKŲ“jÛēœ‘VŦ,ūĪ;–.ë’éÍh*°#ôé ’§¯CßېÎzå$}NA ’ŲÎX˜^ܨˆÛ˛Ž2EYŽÖUÕ^L`ú֊ĄŨ͏î}(ØËm?6ũžę q{o–-ëÖļvtíę}i mũßīw4Ђ֗fa!‰‰Ī­Yšļ™îmŨc$(¸éZŪYĪŨīę})ģwœ_ZLŲIB1ÎéT,­f‹ĖFFIÅi4m×o¯­)ƒgoJb3tÛia.dBģ˜Ū¨Ûɔüį<÷?ÅíFzséüTú‰íōĩ?¸ŊđŸZ .ĘŊ˙‡Ūœ3ˇ¯aü^ô§ŒôīÜŌčWP†?(ꆀŖ íČū1ķvëũãéBãåéÛšĻOA6üŖåíũßz?/L˙ *Ž;tõ>´sĶŋsKū]@/Í÷{áö¤ĮO—ĶøE/×G¯Ĩ Æˇ­ •ˇÜ89SĐö¸ ũĶß°ô¤ c īڗ1ûŊû{P‡×ī {Ũ…&8čzzZP:p;vĻíāāŸŨ÷ĨĐ?ā Ųž{úQÎqƒ×ÛŌ†'ßøh#žëũßjŽĸé÷ˆ3€FzJNvįžœôõŖ8đĐTmč:wŪ¤}A‰Üqž§¸Ŗ#$žGjSĀꆐ˜qÜĩ2z|„ÉÆ2Gžôœúž7w§cŽGoîûĶHīī }@1'œõõö¤Éāį°ū*qëø˙wڛŽŸAڐĀŗƒø˙Ŋķ×ŋ÷ŠOøö÷ ũīÄöĻ/ø#3ČÁôū*Lņס÷ŊéũĮˇjo;qĪOOz]Ôi<yįø¨$ã¯qü^Ô§ņīڂyīÔv”uA™ã¯ÅHĮ¯>ŋÅNūũģ iÉ=OJÔ Áûßøõ3>ãˇņSÎAīúzSyã“ÛŌ€NAätū÷Ŋ!=rGSüTã:žžŪ´ׯJn}ûâĻäœöõ§sž§¯ĩ7ĶŠü¨Üûû搟§ũõNėzū”œûū”uÜûúwĻ“ĮQ˙}SŽGsÛŌ“ķũ)Üûū´Üķ×˙§dûū”‡ņĻgĐū´ÜņÔßTãœ÷¤æ ĪŋëAúū´ŧ˙‘HĪ C×˙¯HĪ4Ŋ˙úԇüņ@†ūûŌūĨ'ˇūËHäú*1íú 1íúRĪAųPĀÕ\`tíëëN#ÛøO­5OČŧķ_zp?į'Ö´-‚€ã˙÷§ĮC˙|ûŌ{SëJzv?Ÿ­ÅíĐūC֔Žŋ{Ąė=i<ũŊéÅG<ü40ęx=ũ)ÄHįøģJMŋ{ßø}Šqķtî‡Ú˜ģ ß?û7ĩˇ=Įņ{Pãtė=)ÃąÉūJHOaĢØävū*\Ŗ‘ĶûŪô œŊŊ=hä§Ąî=hˇžGCßۜqę:ˇ¯ĨĢrHî)sĪ^įŋĩ ?ā€Á#‘ųJAŒą§9“ÔĩG=‡ņ{Đ.‚`cˇėŸZRĪÛøM`ŸÔúŌˇR=Ûš }~aŒõ?ÃíJqŸoáö¤ã=ŋ3éJ¸ĀÆNæ‚z ŒĮ§đûĐĀķÁīü4ßlžū´ŦĪOâõ¤Pî}SØzQÉį Û°ô¤{ąäö>”Š9č;vĻOA܁Ņē0=hÁ8a׎)  t?ģīJWŽīü4ē÷ųŽÁĪCÔúzRŒņ÷ģzRųŗ×ûžÔĒĀĀįÃA=>AÎŪũqëAÎÁīÜQˇåč8Ũ÷ĨÛÁã×øh˙€WPū yÁ?Ūö¤ÂA=ŋŠŽGĮđûSFx qĮđĶ˙‚O@Ī“ĶûŪôüú˙ĩãŋCڗœ‘Ī~ÃŌ—ü˙Á<õî?‹Ú“< cˇņ́<ōzOJCœwč=(č%ūCNÎGņ( 7nIū/jSœIīéFNzžžŪ”uūb=F0?Š“§éũīzQ8'œw™8<žžŖÖ—A˙Āņę3Īz^?Ųëę})XžrO~⌓Üõõ•DôûÆ šę:ô1Ôt÷õ§gÉč;ŠBxāžžŖÖ¤Žĸ§§Së@ÆGNŖ×Ō”“¸ō{˙ ' n#$ĩ6OAŋÃÛô4œvĮņv4îŨOOī{Ōnã9=˙Š„>ĸ`{uô>”œtĪ;<ž{˙{ڛ‘Į>œî¤đô'Ž˙Â}i7įą ô<ú˙Ŋōp}Š˜/ķu‡đšn>^ŲĮ÷O­8Į>é¤Œ{{ېŋāqĪN˙Âhã=äĩ)čyõīM?^ū§ŌŸPč&8üŋ†›ƒá§1øw4„ŽŖĐ÷4‡ÔB?¯đŌõŋ†”ã'ņîi8ū]Íč'oÃû´‡Šã×øh=?SAÆãÜĐ1_Įû´ÜtãĶøiĮúúšoõéÜĐ!§ū;H{ņ˙ŽĐy‡Š ūûšÔOÃ˙ĻãšúR“ĪoĖĶx˙$ŌA ã§oîŌ§ū;Jqūš¤?_ÔĐ103Ķ˙Ļ˙ž”ãŒ˙õÍ7üõ Įũ!įš˙ëŌŸũzBOøSxŋJqĮ¯ëHOųÍ7˙ę4œ{~F—>˙­÷ũiƒį4‡ÔŋëHOŋëH QŖ$ūbžŪßŪ÷Ļ€Gđúöķ[Ž0}+R1äķÆOņûĐÄ`å‡âĨ=O>ŊÅ x9o^â€āČīÜĶŽ>n‡¯¯Ĩ7Š?7¯ņ{SÁĪ~įøŊ¨Â2z~GԜĖGđŸJA‚AĪëíJ¤9îŊĪĨč ƒƒOáĨ…úá÷¤^6ō;w4  ~×րc€8čx˙gۃĀ<ã õ¤=úwõõĨ*FûŨ‡wķwė=(Īņ}áééIŽz sÛڜČāuÃíGQtŨĮ ÔzR€Bƒ“÷GqëMQĀųFxūP8/oîûŅĐbœķÉč{Zqā÷äŸâöϰëĮcü4¸Īn˙Ũö xëũījEčĶøũéW$¯ĮaG;G^ƒ°õ¤đ'ƒČéũ˙zŽ~aßøéyÁäô>ž´6y뜟Jlų€<Œ‘Éū˙ĩ"‘ĮC?Ž—$‘†=GqéH ĀAÜzĐ.Ÿp Œu\cûĮ֗ ‚rŊOsHí#qéę=isūŅäŸâ‡ÔQŒõ^ž§ŌŽ>īoZr9î?ˆzPĻXãø¨Æ;tô>´§=;ö4›¸āôøŊéwdž}‹ÚŸü€GŨę?„úR axŋ„͞7 žãøŊŠšĘŽ}?АŸųÆN‡øMrqŽ˙Ā})ũņwņ~}ĪĨŋęééüŌ“ļ1Ûûžô .æŽ1“éę}hč%ūB‘×ûßÃA=;˙wڐ㞘Ëw4qģ_SéO¨?ķÆ0oáŖą8=?ģīH1Áã õõŖ#āt÷õŠč5ūB}áŖ=_îJF˙Z8Î=ũĨ2zč>÷AØRãøēuĀõ¤ã׹ —:z{ŌQNrGÍÔöaˇŊŒŽÃԐãqāwí@‘Āę;{SO€Ûē{RHÆøģ 002;vŒrŖŋđĐ> sŸâũ=)§=ƒvôĨĀĪA×ûžÔ˜dßÃHAÎßâīéëAÎãÃu=Å!Ķ˙÷ ŒĀę†˜×ų€Īû]GqMįhûŨqëKˇ,>QÛøi¸tė?‡Ūŋā Î^ũÅ!Î{õõ”…}Ŋ†â<ŋŨö§Ô:3Į^ŨÅ'nũqJ#Oá¤#ŽŋģH}D9>ŊûŌûöīJG×ĩ'~žŸÃí@†į×=ģŌīëŪ—Ž=;R˙>Ô sßķĻgˇĶøŠįŠã×ĩ4g=?J7ˇáëH{ū=ép}åHũЍ‡üüÔܟōÔ§$ôũ)>‡ōĻ.‚éëM'ßõĨįĶô¤ĮˇéHbŊ˙:BzgųԜį§éHsūE†úgųŌ˙:\ō?JLtũ( '˙×HsÛ?)ßĨ7įgëųŠNũ˙1AßĨ!ßĨ ŸŌ“ŸԌ{~”cØß4€ÖÆ _āö§mČ^˙Ũö ŋ6sķsôôĨúžŖĶŌ‘G ŽŸÃíJŖvžŖĸûP.‚ŽxëÛ¸ĨSĀ·øŠr3ͰĨøÃցąA‡ņ{ĐåÆFqũ˙z2q˙ęõĨ9į“Đ÷´0ę y<Ž˙ÅJH,y^§øĨ‘“ģ׸ 1ÉįŠūđôĻ%ūb‚?ŲüĪĨ*‘ÁĘ˙­ nÍÜô 1ĀËvÅīHB‚ūŨ­mčŊûZL€˙÷Ĩ'9ū÷ņQĐŽŋ1N7á4̌ôGđJ3ÉįŽ‹Ú€FīŠĪĨIéōGNđ˙  Æxūáõ¤qΧsKÆ:ö=Ī­.ƒ˙€ œ;ā įĶŋ÷=¨8ôõõ íĪOįéLų€Īw_á tqü>ôĐŖ§QëG~‡Ö—@ˇč;'žCØSšĪFëč=)„žCØŌ‚3Œwô>”ú€ņģ9ųēŽÃŌ“-…ûŨaëHqč;v¤ 21ũÚ]ūîH<ˇCéJwĩúzSĀQßøiBüĮ˙|ûSüã>Ôw” ãø¸÷Đ:e}?†” ē?īz]˙š<ũīâî)rIī߸ôĻ‘ŒŒ{øE)Îīģ˙ŽJ}Cūƒ8į=ŋŠ”Tōqī{Ō Ž1éü"”įiāđ=­O@Kô‘œĩüT™ų¸õū÷ĩ'<äödäpzú }DöœöĮīA?)éĐ˙Ŋ Î;ôž´āõOZCë÷ Hõ˙Ž“=G_īŸJrzãŸJUÎG^žŖŌ¨žƒŽū3C+Đ˙õ§vŽOAÜRqÉ=qëRSÜCŽy^§øÍÃ•<ã>”ĨˆcÉ<žãԌÃ“ÔôĻOOĖnŸŪ4dsĘ÷ū#J ¯oī LįŋcüB‚ēüÃ#=W¯¯ĩ4‘‘÷{w4ây?7ū<=)Ĩēú! ‘ƒ÷?z \ŸģßšĨĪæíũīzBŪŽOņSœgĒõ÷¤ãÌ_Z <|ßøõ&îÍØ!ĀŒZ7sŽž†Œü§æõū/zBÜđ{Ÿâ§ÔlL1ˇ¨ėi8Įnž‡Ö—pĮ^ãøŠšã¯oī{ŌčôīØĐGÍÛūų>”īëüTĪ_üz˜†đ1͎đšoĶūų4ė‚:ņĮņRdmę?:‘ˆqč;˙ Ļņžƒūų4âzķëېŸSúĶŪ=ģ Ļúđ?ī“NãŽ};ĶIį¯ëK ÄĮ^˙†ũũōiIŋ¯zCŒõũiˆn1é˙|Ō~ūų4ėōišŋ­!<úß4Ãūų Ÿķš=Z`†ū_÷Í!ĮĮũōiO^ŋ­!úÎ üŋ#Aü?#Køū´Ō}˙Z@ߑ¤ gˇåJO=ZCõũi€œ{~F“o֗9īúŌ~?­!#¯÷ĪĨ sé˙}JEbyŨéüBœ§ÍÜh‹`¸89ãšô§.2Ŗåę=})ĒŨxĀū*r‘ĮÍĪč@Á@Āá{ ĨB28ŋ€Ō)ādŽŨĪ­.Fļ=}h*Žūø>´ qĀ?šīAĮųĪ­üũ}hĸ‘ŒŒsĪđ{Ķą÷˛ûßÃMnK~=)=OcéLH^}_OjPGŪŽÃԐ žœ}Ĩ8Žëü4r䕯îŨ… ‘ũîƒĶ֑FãĶø}诎÷}ét¸§8?{Ąôõ§rN[?7qLaÁų}†œSŸģԟá”uŖ=yëę=)Tž>÷oâÕû§¨ūé@ōžƒ° ]gŋoâ÷Ŗ×¯ū*Cœ´˙ß#֔ņžņv¨¤žF}ÚŒķ×ĶøũŠ2O=O§Ĩ(Č#¯oJ ĸč ö\` āŠ^ŸÜ>´€Œuz2?CÜúÔôPîxOđp0āuũŲ¤$’GSÜŌ7žãš§ÔžŸ •ė?€úŅŽ t=PúŌē1č=}hã×֗BēŽ#'§¯đRŧ8īũĪjBGķõ¤ã?ŋĨ2z;`!åxô?ÃīH>č'ĐzúŌqŽŨcHŽŖS׊ū9,Qü>Ô܀Įņė})8ČúŽĮŌ™=>BķīĶû´„ņĐ÷ė)=ģĮ֐#ØĐ>ŋ1Į9#ŸČzSI9žŨ…õ8īč})`z ¤įÅųZF'ŸŊß°¤ü?ņĶH@9ã×øin)΋¯ ¤ä>nƒŌŽģ˙wښ;qéü4…˙^p~÷éëFNã÷ēŸJCĐņú{Đ@$ņÜ˙ 0sÉnŖŌ›Î?‹ ôõĨ§îĶqžŨ‡đŌ%°~÷Jwsģ¯ĩ!Ķ˙ ŽOËÜ˙ 0ž>÷nⓒ;ūbŒr8ôūoáúRøsƒ÷ģ÷˙ĩųŠB8ûŊŋģC~īé@Iãīvî)š>˙˜Ĩ§ķĮķ7Ļ?JB:üŋ  bdûūb“ŸĖPAôũ(Įˇč(}˙1HIõ?˜Ĩü?JißĨ O¯æ)9÷üÅ.=ŋJn=ŋJ`>§ķœúˇéKoŌ“ßĨ 5—8æéíëOŒ}îŪž´ÅhųOOîZv1ØņūČõ­ bŒņËÄzԌúˇnã֓oSƒ˙|Z9ô==­õ ã$˙ßC֎p~Ÿß÷¤9äc×Ķ֗ãé@ [ƒžŧ˙Ŋ†Nū/ã4„õü{ŠRy#¯ņJbB <Ž˙Æ})Aę:˙|úQ“×?ø÷ĩ˛GĖ:âö B‚2WˇņŸJ@F8۞8,hVû§píüTdcīƒøũé c¸Æ~_ĖúŌ9ûŊũ}hÜ0~o_â÷Ĩ-ÉäņP0ãæāwėiHē/_îŸJBܲãœüŪÔĒĘFU”ō9 žÔúŠúōā.r?€ĐĀSĀūëH˛&å]éģŽ7sJ0=ũit¸ųOŋđZq“‘ÔŸāĻžéß֜qŸūąô _đ@/°ë˙<ũŠTt8ôū 2=;LŽ:t¤`ŽßÜ÷Ą¸ĪŠūLŊēzZF#'ņįi¤>ĸõ=ķ“Õh‘סaLāŸĮû§Ō“=?á4ÅĶä;'9äp;ZRN^ũ‡­3øxôūéõĨëž=†uųŽ$ķ÷ēŸJrîČ??oJ‚Ic‹™QŸîŌÁôĨpĘxĪđZ’ēŽ%÷ēžâ€N‹¨î)¸Éû§ŠūJāāöčĸ¨ž“÷ēãւISËgø‡­&8_”ãøG­p§ŋđŠž…uųŽÜyÎĄIÜ:õÄ)ŧúgûĸ•C8=GaOŠ=>@ĘOAü^ôdúö?ÅH ā`žƒÖƒģ'å=aK ú‹“žžŋĮH ČíČū?j9ô?Ĩ ÎôôωčŒzđ?ŪšĮŽžŋÆ}iy>ŧéëHsŽũ§­"ē#'Ÿ_ã>” =ĮņŸJ 9į=Oqé@'#¯QÜzSO€Œu˙ĮÍ!#Ôt?ÆiA xúŠCœ{ô¯Ė '#¯÷ĪĨ&}Įoã4¤āžņīj7ũîxū*7vAûŊ?ŧ}i7Qßø.N:öū÷Ŋ!>ūŋÅA]D$g’:˙xúQ‘ĮŨíüF—<įwū=íMÜxįĶø¨$BF:¯>įֆĀ'{÷4n÷?ŊīAcę3ĪņR+¨œNžĻ“Ž:tÍ.îzûëڛģ§>ŸÅ@ēÆŨũ}i ?wŋ­˛9a˙}{ŌäüÃŋņP0Č˙g¯Ŋ7ƒģÛ֍Ų={˙z€GŽßÅ@„8ÁûŊ= &ˇ~ÔŖūú¤'äwū*'į•'ƒōĨŨū×ū=MĪŋū=@ēqŽŨ= !ĮˇåJHõ&}Įį@úˆqžƒō¤ã=ŋī“JO=GįMĪŠũhc?*iĐß4ėûū´„ûÎÆãé˙|ŌĐß4¤QųŌŊŋ:OĀß4œzû攟֓#×õ oûæšzö˙žM.G¯ëGãúŌ=ŋīšB üŠr=ZBG¯ëIa.˜ßĩŋ–UÎp•_ r އø=ëxŽĻÉæ¸|˜“ZW÷minŠËČŲäÔiš[qŸ”wū FÎ@åb‹kãšn' É؃Wtëß´+G"…•AČ9'Ĩ‹ägwŋđV|ĮTš<|¸?ÃíZ‡ūéôŦ;‘'ö›ˆ$ĐÆ*‘-ėoāž™˙ž}ĒžŖ<–öûãî‘ę+2x'ĩeJøÆCg*M@4öK8-ˇ )Ĩ¨›ĐÔ´gxŽr@ė=*ļu,폓øH* >ŅÚß;äųąŠŠelĪtÃs­Î>´$„Û:¸ã%ģw֔įÉéęžĩĒųŠ,+ėāÛ<Ō6_'Íũįš;r1šVCælØ$á˛[ž9ėžp[Šî=+7O¸iãx¤_Ū*ž%´°ĘåÕ°O=)44īøÔĻ1Z'GĨ:ÁZ;TžpxaUuRŌ4Vāą ĢŒ|ĢRä•Ač)ö%u)Ú1›Qw$â3ŽHõ­0ÜIāôozÉą…¤ĩ¸8?ŧÉĮ­;K‘–YānąįÅ \ięj#w8?ĮJ[ī`qÕũĢžēšeÕÁ8ÜAéWõ‰OŲ•FAb¸ééO—QsisIdnGGĻîU.ä>ĩf^Öū8ĪŨÁĻë34aIʃIDnFŅ ČÆ;Ī­7͌œyŠz˙ËCTūŌN”“’„uŦ¸ÃÁWāŗ`ķG(sjtÕ~feQ‘ÕČíB2°2°ãäÕ ^oô@ ũâ§īf›¤\fŪ@Įîīb•´¸“čh #l€č[7ŸZq* WŋņËĶĪ™wq!\näiŲ›ĩÍ1ˇjũĶĀūëHp3Ŋ˙‚¨éwM4l˛´|džŧÕâFO+Đ÷5či{ģy"ˆnĸ.{ĄôĻG{hä*Í$Ž6Vdūeî¨`ßļ1ƒ´ō*ÅΞP0mÆ9U9Ēi\Í6âh€ ƒŋķĪŪ ’ōÖ'*ōĸˇ#:Ģ<’AϜąßŗ¯ Žj; 5–!<˞3‚~e'Y%ŠWnZ0Í ãtLŦ9éĩ#ÜÛĮ ŨCl5•p­av m˜Ø´Ļ]ÆgÕ0å7(äÅ5EŨ%ŋ´,Í\đØ}iŌŨÛ‘Âä~îŠ^ÚG™tÚW¨R æ’ÆĶ͡2Jû÷€ĘN)YZå]ŪÆ„7\ÂÁēōÚĨî3ę?‡ÚąíTÃĒɡʥĮOJÖųrŖ¨ūéIčÆãōtz !”ŸÄ8Ī#øOĨč/Ķ?•!ĪŠ{ oųûĻ‚}ģá4 q$ׯ ô¤į=ûvĶÔņ˙ŽûQÜ g§đĐ.“īųZrz÷ô¤įå¤ãĐ÷ūCę)Īû_§Ĩ&N‹ˇĨöõííIŽGĘ{v ]įŸŊúzĐÄķËwôŖ“ÛôĻ‘×ƒßĩę#›¯ĩ&H#öô ƒéëړĶĶĩôū/ĖPIį–īÜQĮ÷OåH~‡ō BNOŪüÅ7ŸĖP}ÁīØR}ü…&OŠüÅ!8î1F=ä)8û§ō€C“Ķ=ûŠCœõ?˜Ĩ9ô?Ļķž‡ōĀ9÷üÅ&Oŋæ)H>‡ōŪ}ä)î:BOŠüčįä)}ä(úŸÎ“>įķ ƒčGåIĪĄũ(ÉĪSųŌdúŸÎƒô?Ĩ'āJ@>˙'įųŌūô¤üéHCŽ[n¸§wUëģڛ­}蟝#œįĩMe%ÄË4.Šāc,Õ/Ų{A Ë+žF0ø+dU‹‰"˛‚cwŸJȰ*uy ´‚2ã§­*Yę ‰.bz ÕÍ:ÍlĶ–]ä‚JŊ\tČíügŌŗzkKœrŖš­lāävū:¨ŅĮ ŋ4Ņ,–ô˛aÁāĒ*sŖIČāŽįÖ´&h倯&Œd“'ŊWŠ’ŅākˆŽá×Ŋ5ĸܛMu6é‚21ÜúÕK6Uŋ¸ŧzũi֑ yrob(Ũ īIql;KÜQä“ÃP!ubâ8ĀcÍiy‘4EÁR¸np}+'T(Ņžr;n Ųüi ƒR@ž™ãĨ6„™&›‡žšDaaxéZk";íR„äqŗÚĒÚ‚,Đį×wĩGn!ŠāČ׹08ã=)nRvVÄÚÄgǍåŠõ6ÛdP .Ɏõ¯Ų⑤k¨˜“ž{sKvmŽ#ö¨ĀLäzķG˜´ØĩeÛDFv˙sŪŗ¯ÃYŪ<Ē ‰IŽ_VǤ âĮ u¨/MÚö¨× œíBē`ėĘĐ[ôĶ&>mŲáj+Iōō%u(ūéZ0MgB/´DW× ŗ[+W/ö¤cו⍭îŦ-‹ŪR[ŽTTØĢ،›]ešMĮ ƒWîīėāą?.0ĀÕK›Ë ” #KŒƒÂUŖm56fâĒŨIébÜĪ,úk;1$Žy4í2ę3j";•‘NrØŖûVĐ(\ɀ1÷ET•ôŲ$g>væ?­­G}t7ÚîÖ$ŨōI'#Ĩ9Ž5¨˛„×vÜÄ&įÔC_XĩĘÎVmāĶĩ!ĩ#ū'?Ãũīz4ķū‚œ˙÷W—R´š#‰Š‘ƒĀõĸ=JŌ„q‰€ŠVvąWW¸Ø˙ä5/ĶûĮŌŽĪu"°ÎHū3éT…õˆš3„›Ėn3W'´†éŅäRÅqŸâ‰n8¯t˜T{ã4„ŒuėŒŌ¯Ę pū*BxëØ˙I]~b’9é˙}ŸJOâŽŖøĨōA?ø÷ĩ&îŸ7qü~ÔAŒvíüFã¯ƒüF—pĀį°ū*i|ŒîņûĐ>ĸąôīüFŒõŋˆŌ?0īütnį¨ę?Út ŒvíÜŌvíßš¤Ü=Goã °ĮQßøé¨ũ;÷4q¸r;zŌ3uÉ˙ސ°=Į_ī{Sę.ĮˇëHzvīë@aŽŖˇņSK:ûęÅlsĀīëIßRnûÃŋņRnę?īĒb@qč;v¤ãåFAčGoâ¤Čõ!õĀīڐãĐ~T=G~ô™¸üčãĐß4Ū§åK‘ž1ųŌdzÎ€ô•4a˙|Ņ‘íH~ĸ†9č?īšO¨÷Í)?O֛‘íúŌcé˙|Ō=ũķKŸ§ëMãÛō4 1ė?īšB>Ÿ÷Í)éÛō4„oČЏ§ũķMĮ°˙žiN?Č4„ō {ûæ“ô÷Í—äh˙= !ĢĐrz{zĶÔāƒ“ÛԘšÚ8==­/#ŗ~CÖĩ(p'ŒgˇqëJ ĮŪnŪž´Ņz}­/>‡ō´ÁЧr1ëU[Nļv,ĘŲ<Ÿœz՞sĐūCÖ”į‘ƒĐö´ îUūÍ´įäc˙÷Ŗû6ЃûļčŪ­œŒđ{ö´6pH ü^”R¯öm '1ž˙ĮN:m§'Ę=˙ŽŦœ’Ü7J=ę}=(S—LˇoõiŽ{ŋĩHēmŸ‹¸ū?jŗÉĮôô§ ņרôôĸâ+.ŸgĮîGoã4ŖNŗĀũČč?ŒúՅĪËÉę;Š9Įáę=hL_û>ĖË˙žĪ­/ö}Ÿ?¸\ķüFŦ„ũ{ZVČ''ģ!õ+ũ‚ĪŸÜ/â>”ŋ`ŗũBuÄ}*ÁÉ'Ÿ_âö ‘ΧņûSę.…qciĮîō;š•Ļî#č;ŸZœ7'Ķøé{öū˙Ŋ!˙Ā!û§?¸õ>´ĻÎÔg÷õ=ÍJHÁų‡ãŖvIųŗ×øéą ;l˙¨‹õôĨ–Ũ<ˆģzÔģ°FHëũ˙j@ÎGoã¤.ƒ>Ëoø÷‡ˇcAĩˇD]ûT›†>đéũ˙z uų‡ãĨĐŽŋ23koĪî"īü4 kųáũķíR?0īütĮ,ŋ÷×ĩ>¤ôök|ÜEÛø(đ ūâ/ûâžqĘöū*LŒGũôitü†yũÄ]˙‚—Č„!‹ūũûS؎FG~挌œ•?‰ô§ÔKüÆyqû˜ēųgí@†,Šˇüŗ§Œd`ŽŪ´;•ũi ūß&<Š§üķŖÉŸŨGßūYûRäcˇ~ƕˆį8īØúQÔ}D&īõQö˙–~ÔĶŨ/oųgFF{vė}(`~Âh@1ĻüķĨ1§?"w˙–tĶ͎á4§ôīü&øę.ÅΝũûö "ņ„GüŗöĻđOAŸ÷OĨ/(Āäā>”!t*ā Ŗ ūzqwąū `Æč?€úŅØđ:á4׿;1āuūįĩ9Ŗø}Чž_îJ?ˆcÔô žŸ!Gnnԇ8üozAÛĶø !ôãå4׿<““œ÷ė=)9Ũߨė=)§Ģ=„Ōúáö ]ÉuíØRĮ~žŪ´™é{ ŋîûŌ19={úP=OQééA8'_áĻ㞇¯÷}Ј\ũ{zSI8ęOZQۃÛĩ&§§Ŋ.ƒO9'ŋĨœõ=}GĨ#wëßĩûõô”ú€™=‰íÜRqÔôõrāöė)xāž= HĪ'Ąî) ô'ķãĄü…!ÎO_ČS>§ˇqI“ę1@=ä)9ãƒų @!'Ôūb‚}Īæ(9ĮFũ)Úü…ķÔūb›éÉüéNsßô¤įßô : ŸsųŌדųԜãĄũ)ŧûū”†)>˙­4Ÿ֔įßô¤9÷ũ)ˆOĮõŖ>˙­>˙˜¤äzūbOųŨA>˙øõ?äŌsëúĐ0?_üz“×üh9˙&œwũh?_üzķ÷&{įõŖwŋëH \u3ü4¤›Đ˙ 4ā1uūéôŖ¨=;˙ ô­‡ëĀīü4Ĩx?(膙Į<ûäúRœū?Â})!^ŋ(īü…zđ1ĪđSN <Ø>”ŊzßøOĨ]ë€3ĪđR•ŋÅíA<ŸŊŽ{Š^yë߸ô§Ô`HČÉôū/j@qߞ?Ё×ŋnãԌņߡqH:IĮįüF”œŽ}˙ˆŌgާŋņPO^Ŋ˙ŠŸü[‹žīJQõÄiõīũīj`Œãøé!t#hü?ˆúĐO_Ąū#Hã¯oīûĐ[ŽŖ8?ĮA]EČÜO×øĨ‚GÔô¤.sÔwū?jM܏˜uĮí@ē|…?.æ“åĮáę}i7p>nxū:BÃGOīûŅĐ}~bąŸĮšŖŒū>§Ō“pÉų‡ã¤Ũî:˙ځ ôõ¤=;t÷õŖw$vū:nî ņũ˙z) øúŌĐu÷ôĄŽs‚;˙ę:˙{ځ#ĶĶą¤'Āéč}i7zŽßÅI¸0Aã×ŪŽ€+wāwíAëĐuôĻäsČüč$dō:úĐ0ëŽ?JNÁÛĩŽžĻ“#Ô~fīĀééF:đ?*O^Ÿ­!#=ģúĶaÔ\{ûæ“ÃūųŖ<ãÖ›‘ĶČŌcØß4˜ëĮū;Gߑ¤ČÁéų ę)€÷Í&=ŋņÚCøĀŅ͌ČĐ!1ė?īš1í˙ŽŌ~_‘¤āö÷ɤGũķF:ņúQĮ ˙žM!įˇū:iŒ?Ō“ßĨŋûHqé˙ŽŌĮˇéGáúRŸģIøã´ŋįĨŋúԜú~”Ÿ‡ū;H'ŠOÄū”cÛôŖüô¤#O?1'ŸÄĐLtúŸJj$ßg֕HäuÆkb˜ äSŽįŌ”}SéMR8˃øÍ*°ųpGQüt 9ĮáÜúRŽŖđî})ŠÜGoã4 ō9ŋŒĐ!ĀôãĶšô§)čztîj4`1‚;Ĩ Ķ‘ž?ŒúĐ zãÃš vü;ŸZ@Ã$ßG֌ņÔtūņõ įô÷>´qô>ž´Ōzō;˙õĄ^Gã40p ~>´ãߎį×ԘHÉäwū#KģԎŋŪ>”:ôõõôĄ}qÜzúSAäc÷ŅôĨGoâ4 §Čpė1éë@Æ3ŽÃ×֚ã‘ÛšõŖ?OĖúŌč>ŖÉãcëAAŊŠ„ƒžsN$sČīëLH^ũ={{RŒgįŽŪÔ܃é×ßԐGNŪ´!íŖˇđŌcōûįŪ“#ģv>´cwė}i î8¯Q_á¤Û’x˙v‘ĪŋcGč?#éGQ Ÿē:áöĄFqōŽßÃMęqœá>”8āvū@ēÛōũŅĶûžôc¯ËžŋÃMãētúĐFAāwūHŽŖöō~Qßøhũ‘˙|SxĪAœ˙pŌ dp;ĻOAØų~īaü4q÷ņßzoč:ā>´‡đ˙ž­.ƒ{=Č_īŖŪŋÃíM=[cæūAđũđ})õáÛåôūIøãĸ›Ž‡híüŽŨ;púŌč?øĶŽ{ ~={{Sã×ø)H᧝đ{SĮĐzQ“‘õ”Ūsø˙wڅ#ŠÃ@t;ôöõ įúJhéÎzwۃĶŋá¤>Ŗ˛s×ųQ“ž§¨ôô¤=N˙ž}¨į=Qü#Ԙē|„ņÉíéA'“ĶÔzŌ ņÁíØRíīĶĐzŌč>ĸ’rrĮŋqFãŸŧzúJBO9Ī~“æĪ õô”Ä(cĮĖ{w›˛8nŪŖÖŽxëÛ°ĻäãøēzZCb–ëÉ={Š3ד×ÔRķÃwė)sŸ›ŠôĻîč7~ĸš{âŖœ˙éIÉõ=) ĩúŌ“ĪSßŊ!Īû_Ĩ!'žJÔ7s×õ¤Ī};Ԝûū”ÜŸ~Ū”2q×õ ˇ^}{ŌsŽ˙˜¤9÷üÅ!‹žzū´„ûū´nú÷î) úūtĀLįãGųë@?_Λ“īųŌ'üæƒėSA?įu!>˙øõį˙Ži?ĪSA>˙øõ!>˙øõ˙94„˙œš21˙ŲRgß˙ üõ4ŸįŊ˙;Š23×˙¤ū{Ҝvūtô˙žŠ3ô˙ž¨{˙öŖ>ãķ¤ĪĶķ4„‡éGáúQų~´Ÿ—ë@@áFo_z]Ũ9ũ}ę­ŊäwŲšqŸŧ@¤“P‰Ņ„™QÎ1ZŒ¸ũޟí{ĐŸŊéü^õJ-N ¤ØĸQŸ\ ŗ,ĸ(ŲØœzë@éķ~žôŲfÆ\ąĀĀozĻ5{vp›“ŽƒÖ¤ž;ė¤#$m=ÅË1L$Eu'ũ¯z“vsÛ×Ū˛lõmėŖWgpīW­¯čņ€xl Šcv27w?ÅīJ[¯ÍëüTÖ'$ķ߸Ĩf<õę{J`…-ÁųŊŠœ[$üŨĪņ{T3˰Æ]÷āzcŌ– „č$MÛIîGĨDģēä˙ãŪÔĄ‰ū.ãøŊĒŧ—QĮ:DÛË7LcŌ5ÂÁ™&ėf€&8ųoâ <āw÷Ŧøõ{w‘W‚Hę*ܓŦpų§vĐš ž´ē%ŨĮŪũ}éIÁ<ú÷¨ĸ˜O‘ `q’3֚׉ö–€īŪ2s‘ŠŠ`žŋ7¯z7d“Ÿ×ړ'ž}{J° ĶÄ=(āÃ#æôīMVé“éŪŗÛYˇFÆÉŽč\ˇ'Œ:d  õ )#{zûĐxÎO<÷5RëPŠ×Ãą<|¤õjđË&Ā’Š9Æė hÉįךŖ#=SéUîŽŌÖ=īš8ų[ÚĢ>ą <š[Ąāæ‹ĐĐŒg¸îh§áÜÔ×Ir›Ķ#§šŠr1×˙ĨĐb’:gąî}ir#>žĩZîņ-B––$ 5W}b$r<Š[Ü)‚fŽyĮŋŋĨŽ3íëPÛ\­ÂnC‘Áj‚}J;fTØŌ¸ų¤„\ČĀú{úĐqĪãÜúÕ+mN9˜ĻĮŒā}öÆyŠ ō}¨Á†ģø4 îZ$dũO­&Aüũę Ë´ĩC#åžb0 Ë2 §ûūÔú‹Ą6@ũ=iŧō}jĩĩę\;ĒŠ/ÖŦ1Áū}it_¸Rzū>´gķõôĒ—wņÛļĐĻVÉ#ō*ՆđŪD<ŗ)nęå-ĸŪĀ@į#ĩKT\zÖn˛ÁŦ?0čŲíVã•"ĩ—/W"t'ÎGNŪ‡Ö”ãŽp{ĖūÖ` û$…Gņn8Ģp\Įsõ* +ŋ8 }Kéëړ¸úŽŪÕRęõ-ŗ€˛>~č~jÕNõ[4`ŸŧĖp(ą= Đqéړˇ#ˇ§Ŋ5U”Š„Ґnžū´t+¨ãŽF={RíÆģíURđIw$Ú9<ԗwÚ#&ĐÜãŠ:ˆ—8ôū:Ž‡đûÔå+íPqÁÍT:” go÷˛zRhžųøí˛;˙ WļšKˆ÷.Ėã9ÅGwz°¨Š$™?/9Ļ2ŪÜū;IŽ:z gBEaį[”˙Í]FWPÃqŅM!tŽ9øí!~__᠁č?ī“PMs 9čž šԟž?ņÚB?ŲôíYr^Í9+ ÜĢzI'ĪČlįæÅ-ūŠöũ*ƒß;I˛Ú$—x¤[ųĄ'‰#ŨĐ⁗ņíúS\íRqĶڎČ˙Đi“Ģ~;áŖ¨ˆ­. ÂŗcĄĮŦsXÖw2FĨ"]‹gU¨¯¤3įPž˜†^=)??ŌŠŪ^5ģ(US‘žE2+ؘåŅuČ|õĻ“TMėōšû:#/а^39Ž`ú@ŧē6āûĮ§zKIϐfFØâŠ\K;]ĘĄ‡AW|écˇÜāö€,įßõ¤'ßõĒ?n“ÛūųĨŽņŲÕ}}Šë›ĻŠEU'“H—,×=Üc֖æ–XŲG“’)ФŌHqĶŽE y÷ũhĪŋëUmnRĘį•ôäŧušØ ÛøPŌ}˙ZĒgoĩˆōvã֝u;DŖa “TžG[­ĀØëHrRMOz/ņSü”›Vpũä`ãœTR\ŗßG1c*Ÿø›¯æOéZ Õ!_)dCúÔZī ~éjĩŠsdÜ=Ē ¨$šÖ9#eÁíéL ¯i@bį8ägĨEö"ÉâíĩģƒP V/$äüøÆ6{Sė’Vĩv”rÄãJbč3HˇOŗ™9ÜŲ’EúšĮG.ŽŅôcÚŖŋÔ!#¸Ŋ¨Ŧ?ĪOJ^™úúJŖqyäĪG0ÃíWœĄûžÔ<Å*y{zVn“!†gļnģŗZcqéü5‘ĢDŅÉÄc€ŧņŠļÍÖŠæ gm6ņÚŦ1ɝ¸ĮcHˆ¤ČåČn™īQj1IÄwQŽBdą#Ž´/Oh’[´dã§­f[3ũ’ęÆ# ą.­€ėe2~]œg4Ë+I ´Ō:Ō†ãĩYŌŽtôīÁ¨$ã\n8+ũ*+Õ´ˆÁ>—?Úds™õu“ 8Āö¤nog?ÃŌŗĩĻ?cÛØã5}z¯áü>ÕSQļk‹Bā1BeovČ 0ō(ĩ˛[idtÎԏZ§mŠĮ>\ä,ˆ1€šéN˛ynn$˜ŒÄAÚEĘÚZ^<˛oÜŲéÍVÔī`ēU‡Člō1K‰kŠLnI\įf—SŧK˜vÁ‚'n ;jƒ:jŧ?•\ąļŠ+tUČ ?7zĪģK¤ĢŽĖJÕĩ?¸‹á^ŸQ}’†œĸ۔ ŽõŠøūŖÖŗ-üLî=ģZŌ=ú÷ė*Jëķ35Ņšbģ‘ÖŽÃmP—!yū/jĨ­įdGœyžÕĻš uéíéOŠ=>ķ/KũŌÜ*œaøæ“D‰¤•ŗŧ?]ØĨĶÆénž_ļ*yŸLŖ›åÎFN([ îYÕāC™~úr ozŠrÍäÚŨķ“ÉÍ>îėß‚ÜåOŪÜ1ŪŽÍj?ŗŧƒģäSÜP]UÍÜŠ0ĪŪɇŊIŦôNŋĮëUgi,õ—’¯ĮËÉĻ_Ū5ÜxEp€į )‹ąnxLö ĄĀ8õ^;§Š.Ki@ž1V&ķ–ÍLNŒ*„j@Ãąã”žČ¤‹„ŖFÄr3Ígī#P•üŖ1įĨZĶae2JÜč3ƒQL˛Y]´¨rŽHڜš%Ôō\DPÚHŠÉÅ[Ķ7ũ›g9sU§ž–p’2OVĢÖęéYsqČlv D۟ũzĮŧ´—Î2|ԌįhĩŗĶŸOâ¤ĪüxŌč>Ļ|IÚöârM]ÆčYdRŊĪ>”É`†^dEcÎ2Ƙ`TŖMĒO hU'įČļs÷–ĢÜI$—1o„ÅĪīO´™­C)Ûž ‘LĻšTŖāt_J×_¸>ž†™sÄOô>´ąœÆšôé¸Ķn9…Āäā÷4*i‘¯’X¨,IįŨABÜÄT ũ*m=J[€ÃiÉāæĸžG{ˆöŠ w Œ¸ī!R;zT×ÁRÛåPŧvĻI›č˜)Ú'ĩX¸ˆK NpM ([•ˆyvá—ŗzŌņūT褚.CŠŽm_îûæ“h˙žiė{~”„gˇéIé˙ŽŅoŌ€3ZOŗÜČO~œTMØŗžį5jōŲåu(¤ŽũĒW¯– îĮĨVFûUĀ=—׊XyžrJ–ŌŨĄSšH'ņĨ†K‡v§"ÁTĒüŖō´ĄFFTgŽp)¸ĮoŌ—ô˙Į}ëaŽÚŽ}°)UzqéÆŅMéØß>ô íü>ôã1/oáõņĮižœûįۜNoá÷ ;ŠŠ@:tZ) ˛r1•¤Đß>ôŧ`p;Ŋú•îmÚib>QŒļ9ix Į@;SéĮū:}ixĮAĀūéõ CĮŊ;{ÖMĖ“ŨËä@PpHëŒÖĄž~‡Ö"Š<í÷ Š1J˜ûŖĶŪžĘ!”Ī{Ō‡§~ƃŽxû 6đŒâ$Ī?ÁRc‚ādđĩ4÷ã׹ôĨî:~GŌŽĄØi‚691)˙€{RˆãAä'ĩ(íĀüĨ ~éãˇcH]/lNÔ ` ƒˇŊ7đģã éč}hÃÉ1/×gŊ?`@B ^Oiqė{Đwėhb@ŅFäîIį’žÔ‚(ú—î{SŽíßąôŖˇAŽ?„úPQā/–6ņÆÚ`;ԙŨēûäŅĐØ'`ŽNŅëAÎOŊŠŋ€éĪĘ}hŸÅFî:˙ãÔ úžŪ”™>ũ=Šã–˙Į¨-Éį˙¤įOéAĪ<žū”Æ!nz˙ãÔgß˙ “īúQ“ęJB Ū­úĶw{ū´ŋ‰üÅ'8ę1@Ã<žxúŅģßõ¤ÉĮSųҟր ûū´™÷ũh'ßõ¤ĪŋëH9īúš3īüčÎ;ū´™˙9 ?įšOķŪ‚}˙Z3ūs@ĪZ?Îh'Đūσūy4~Ĩ'ųéAúÖ˙ž´€?Ԍ{~”ž”ŸįĨ.=ŋJ1íúRcÛôŖßøí .°ųˆĮOaéJGņíM' įũš0;üwÚĩQįŋŊŠ:g^Ūô˜Ÿ§ĩuãסĩ0Ž~™íīAīĮéīHĪŒu?_Zyã<~‡Ö“ˇįØúŌ×ņõĨ=˙Z)ëĶšė}h=ûuė}iŋãÜĐO_Įš ėõü{ ū=!=ÄúQߡæ}(;=Ɨüô>”܏ōĮԌŽ úw>” Ÿ˙_ĨČĪĶąôσœsĪÄh ĀįĶš Šä~&xAëëIžœúŖ8‡÷­!ąßįŋ­Ā<úúĶI$žĮø­ƒž}ˆĐć×ņėisןĐúSIëø˙ôŖņīũãéLųŽœúQž?.Ɛ3ܤ§>ŸÄi ?OZ3˙Ö>´Üņ×˙>´gú˙Ŗ už8÷ėis×ü 4Ÿ_â4gžŖūú>”Āv{{úä~ >ũĮņJ@zséüF’ØvGč; Ā˙ëZnsß°ū#ëA<y˙xúĐ68žOãØŅžŋā})§ŋ>ŋÄh'žô#é@ÁߡQØúQœcđėiŧv=ĮņJéø ]>BŽŸ‡Ąõ ô˙ëZLņÛ§Šõ Ÿåęhč>ŋ1O_ĪąŖ<˙õ&A'ņîi;ņŽžĻ˜ŋāŽ˙ëv>”ƒ¨ãĶą¤ãđî}(ęGáÜŌCä(ú~”„qøԜc˙Ž}h8ũ­ŽOŊ¨÷ĮOjkc'§Z8Īnžū”u' ŖˇŠ;tôíī@íĮ§cIÛˇnĮ֗AŠ~žŊ¨#ƒÁīښqč?#CcųöĻˆ9éú{SGĐöíG^ßĨ& íü4ŧņÁíڐôč*N8āvū1ė:wېÅ=:ũ…ü…4a˙|Đ@ĪA˙|Đū ¤üAØQč1ūí&ßÃ@ē3ÛôŽĮō˜ã ˙žh#Žƒūų¤0=Æä(Į?ūĒB ˙žhĮˇū;LH9˙8¤˙=¨ü?JAūx¤úŌ?ĪJCūx bū?­&Îh=);ú¨Îũt™ŋ­ŸéG>§ô¤‘ëúŌgßõŖ>įķgÜūt™˙9 ũZ3īúĐOŋë@}˙ZLҟ֏Įõ¤œ˙“Iū{Ō˙ž´ßķÔĐūĨ‡éGųīIH kŖü=éGn=;SqĶŸĨ/NÃūų÷­F8vã°í@ú~‡Ōy§Ŋ¨ü;`Įž‡ŌŒĪØúRë@äÃրūzJ3“Īō>”Ņūy4 ô9ôîhÃŗūyô ˙“éH ‰ >čĀô˙=¨89î;ûSAč p9éŽūô!1ĘÃ×ĶŊņ×°īīIŸķŸz ÷ė{ûĐ6.r:Ž?Ú÷Ŗw^Gâ÷ “Ī>Ŋũč-ן^ôQKžGCüTËr:Ÿâ¤$úú÷Ŗ<õ?ŸĩB—ã¨˙žŊ¨ŨČÉôū/j@yŸĪڔ1ã“ÛŊVÁŽŖø¨ ͟ü{ۚ÷'ˇz]Ũ9?ŸŊ$ ]Ā)ätū÷Ŋēō;˙&p'ĄīīH[¯>Ŋ鏯ĖqnŧŒķüT›˛zûëڍĮ'Ÿ^ūÔdúŸĪڎ¤ô<ŽGoâö 7NFxū*@܃“ÛŊđ9=ģŌģ¸#§÷Ŋčb9į×øŠ2}OO_z äō{÷ }E'ŽOsüTg“Īū=íH[=Ī~ôgž§ķö§ÔH\Žävū/jdŽGoâ¤ßĶŊēséېē ģŽŋ¯Ŋ!īΝz3Į^Ūžô1āķúĐ>ŋ1IäķÜ÷Ŗ>ãķö¤'ßšīFG¯~™Ļ÷ũ}¨ČČįĶŊ&O¯ëH};ŌūBū=Ŋũi ãZã¯ëHXāķëüT q<ŸĮ֓#?ŋĨį<ū´Üû÷ūņô§Ô]Ķđõ¤ëúzҜcŸüxĶsīéüF—@?į†#ŸĮą¤ĪųÜh'¯ãüF†rúƎ3ųv>”™˙;˙94øv4vü=­ûūĻ“ü=M!°ČÁ˙AęxõūIūzšø÷4ž†Œr?ø“Gųęh˙=Mč˙U!˙˙­ ?į4QŸ֌ûū´žôŸįĄŖ¯˙ތžiiŽ dˇĩ":ȅ—‘Ī8ϰĘ>ÕWL9ä†#ô­GÔŧ{ū=¨Īˇč}jna‰ļČáO^žÔäš9A1ļáĪ#4&OcëKŸķƒëYĸåWP“2ūīˇ' 0%NAšb?Éõ cđõõĻ3Ē]‚riCerŽ}čĀôįõ÷ įĶŋŊ7Ė]Åw ŽŲį­ "/Ūp>§Ū€cķĶ‘˙}{Ņģ€2?ī¯z`•;dSôozRáz¸žūôüû˙ãŪôgŽŋø÷Ŋ4’2sĮ=čÜJļG= C‹uäß^ôב߸РëΝzRĀg-ŽOR=(YąžGâŖ=N{žūÕGS”­°(ãīzƒÚ­BŲy÷ę=(ę“wŠũ}¨ŨČ9ôīíM 2>aųJPAƧqBĀō=ņŪ€zséې1ãŸOJ3Į_ÔzĐ \ŽyéīīK‘üûĶO“ÛÔzĐO'ņô b–ķëÜPO^ZĄĒHČąm#īÕĐxę?1éCÜCŗĪ˙_ڗūž”OėûúwŖ>˙­7#Ž{JŠ}q$ B¸sƒœzŌáúū´¤õį×Ŋ4W9ė})sÉü})°SÜ÷Ŗv˙^“#'žūŖŌŒôįųPP}ũ;Ņž>éš÷ôôŖwŸÔPįųzĐNį×Ŋ&īCúŠBÚįžâ€ëķ[žŋøõ&}˙ņę äüߨ öŋQ@n:ŽßÅ@'#‘ÛøŠ㯧q@=>oNâ€a¸c¨˙ž¨ŨĮQßøŠ2?ŊúŠBqÔūĸõ[“‚;˙&áę3ŸīP͂rØëÜSwŒũņ˙} :‹ íŨ9÷Õ&r:ŽßÅAl`–Įâ)<ÁиíüB>˙øõ‡¨īüTngwī ĸˇ25ûĄlQĮ"—‹{ûę‚yę?īĒLņÁĪ^ô3cĢ~´÷÷ÕņÔßUJĘåä‘üÉār[ÜVĀ÷4 ž:Î‚{äwîižjgb˙ßTšĪ֐úŠOŋęhĪ?ũsGãúĶKĒũæ õj) u ~t€‚2#ņǎŗ)ļm’ŽxčÔûC›u$ķŪ€'ëĶúŌOņĻâEŨŠČĢô&‹ß˙Ŧhī˙Ö4v˙ëšCūy4_ķĐŌž”žôP1ŦęŊxü)AČĪoĨRŋ'|`qÍI<ĢfˆāRCq}…žoMĩ'oūĩgYŦnrdËúZ€üŠ~ōŖđ?Ĩ2IR˙­4°HĪÖŖŽâ9FTŸÄU)gSv Å4ŗĮQųŌgÜ~tˆûԟƝŸķš@&}˙ZĪo—ßëRgü抯7ė}<|ŖĶŪŠX’ĸpHJēp8?…Rĩē¸NŲĪOzĐe{Y! Æá†ėôašqš8î”ĀûŒ•6ZĖë:!VnŒĶšhä™ŪR1@ $)ũ k.qŠĶ\(Āžž•t|̍Ĩ#å ƒWĄ‘e@Ęr8éŸJhB\ĮæÂÃŋ$uô¨l&ŨnQÉŪ€õ5kļ?ĮŌŗ.ËÚÜ3ĻBēāâ€%´>uÜŗģŽ2i„=åėˆė6/!MX°O*ØÔķúTļ ėųÚÃí@šˇû0ķmƝ<€sÅ6î6(%õZšúå<‚¨wŗqōœöĒĶFɧÆ$6hj9ĖOĪđžūÕSLlÛāžäuŠÔf ŲíŒdgĨAĨ6cqū×ô HŅ'ßõöŦŲ‹ŨŪųXĮJŅĪN—ĨfîjŠĪ÷Hę(;ë/*-ņđƒËdՙî^hūņ¨ĨÔ&QhĘIĮĨAp é¨Ã°Ąøtá${Ĩ'{`đÜSŦį’)ūÍ.;mĀĢŗ$–čĀô9ÅSWja“ĸpx  @HõíéëYîZßQøe?Ö¯ņĪ˙[ÖŠęQ–@ëŅ’E ĩyŠ˜ÔIĢ sģO2œäƒØU;"n§•ßs ¯#HŒm8Ûģ>ô†>ea§F͜—ÍZOicŨ)o0˙u†:QŠŽÛDčÃˇĩ_‹”N;ŪÔú‹ĨƚdÎwDܕl b˜-eš˜›žp68ĻZ—ŗŽ9éMļ‹íō;HÅvœ|ŧP  Ė>Q8sÎãžôē¤?ŧ‰ų˜j¨ĸˇ¸ˆ#99įwÖŦędl‡MŪ”ēnÖ"-Ŗw~¤Ÿžz÷ôĻFC +Ī^ÔīĀ~^ÕLB6k}HÆÄíqš“R”Ĩ¸@NįÆ8ŨR,Ä&Qķ!Ēŧo/bl ¨0p)-Ë+ZX>ūҌāÕxlMÄ~lŎ8ČÚÃ6Ļš´$€gŠ’ĘT’Õ6 €xŖ  –K;ŸŗÉ÷ К|RaÎ1žÕ î'ÔUcįaįŒRŖŦz´šî¸é@-Ë:Ą"БũáéSĀO’šöôôĒzŦŠ-öŧX•jßũJp;vöŖ¨ēÂmŲ9ÉĮĨA§JL ŦgĒÚöéÛ°Ŧ[–{idqļNy Ą`¸oíĪ ØéVĩ/,0‚zäô¨Ļ‡e”R.7 Íyiį’i18Å &ž §œŖ•ō‡L AwlļŠæEAĮ-š7—˛G' ŧŧS/í­íãųËįšČĄˆŗ{#<1ęqéQÁdfˆ4üž6áąÅLš¸öĢĐŠO ô :Ŧˇ,ŌĀĮåc5]m•¯äLp9ÕĢųJ~•nR”ˇzÔĐPBŽŪô“(‘ Ÿũ — ô>ž”1āķëéL] Ģ ti a§qRŨK$ˇ nŒ‘ÎM&œáYÁ8;Š&aŖļvãĩJØ÷°E‹t{Cœî§ØÎŌŖ#œ˛u9ÅK-¤%ˇgŽ€ŒÔp`$ņŧæĸén#ūúŦų ]Ū4EĀyÁ5 ÄāķúÖtoäęoĪ#ƒLCo­8ˇÅ€QœĶä•ĸąČ4ũFá|‚ŠŲ$ö5Ōd„dã @:5x÷KĩŲšÎj8™íîŧ­ŲFčjŗĖfKÆ Ud-qxd*ž§Ŋ!š9÷ũi žžo—ž~´˙ĮõĻŸ¯ķ¤˙=čŖü÷  7Į3F)÷ˆĻԓÔ¸¨ī9šŒTˇ§§đ¤!,ĸQļ9úUŸÃô¨­F ^;Tŋ‡éBøß,iČÍJÖč°É uîyģˆU‰îXûzQÔeHØĨ“zÔļp$9É-늍#/f@ëI ŌÅ— Á^8€%SŌm?xķFĐ×͟OZX•Ž'ļ6ŽŠŦæ+ļl   ぀Z_ĮõĒĶÜ4j„gæŠŅ‹(9ëīH'ßõĒQŨJ}ĒééUmŖa,…ãüš8ĮoĶրÜŦÚl,Åŗ Ī'‘ëSÁ@„&īĮ´ķŒŸĨsĶŠė(8įƒĐúR8ŪŦ¤Ž‚õ8÷íKĮ<ʘ"+{dˇG¸į=qHmck<îŨŽœcĨMŽz}Ŋ¨:~žÔ=ēÜĮą÷‘Ķ"Ą@€; A€Įjp8ôí@t#ŽŲ#•Ĩ˛ØČ8ÅBútNå÷HĨŽHĢ@{~žô§éK N›MĨ¤8ᎭM-ĒI‰‹asƒš—׏^ÔsĮé@Č­­VÛ!ØũėŸüôö¤ÆO^Ԙöũ=Љ^]E”sķ06ûTZ\F8‹‘÷ˆ=O%˛I(vę1Æ*EPzv¤#+‚3‘č=jŖią33”gœ*ØtíéAtũ(č>¤PZĨ¸!76sËM¸ŗŽs–,¤gîâĻ=øõíAŪŊЇR§ödG*^SĪr*Ú.ĀdŽÂŒsĶŋ§ĩĮũ)^}=; ‚kHî˸Æ1R㎞¨ãŽ=;P65âWˆÆsˇČ›ēÛĻÔÜF;â¤ÆGOŌ“íúPH'ąŠiF2>„ göt;H˘>⭑ׁßĩ!úzö MœF$īÛרÍL‹ąBŒā`”wč?*?NÔ Ą@Š!‘wnnŊ*9Ŧ♷¸|ûV?ĐRvč?*C]ˆsëŠ^yëßŌ›Û˙Ŧ)OáßԘ"š˛„Éŋģ?Ū,°ŦÉąÁ#ŽâŸų~”žÔ„T[ƒĩ˛?ÚĢ#…tĮ¨ĨãüâķڐÃןÔTsÁã÷€œĩR­÷ũh°°ļĮ)ŸøNÚ:zn§nõ?­!<õũhXŲ[“ƒŸöĒXŅ"]ąđ?Ū§ū?­÷ũh?&/3ĖĀßëēŸĮLū´gßõŖ>ô ˙9¤ĨĪŊ! ´hÍš:C"ēá€#Њu!ëHT`.>‚—đũ(ŖŨŠNJ‚~”¸ã§éKø~”‡éúP‹Â“hūīč)ĪJ)1ø~TgüäQHhą™ ŊÆjEā`cZ_ƏƐųëEũh  ĀëúĐ=˙˜ žŧŅžMj:ūĩÉ˙õzR3˙×÷ ĮJP2:~žÔ¤qĶסĩ íÅqÅ)ã˙ÕAīëĪcIÛĨúœP‰Á˙õŌg9ü{ŸZCĐŅÛķ C‰÷ũhĪųĪŊ!4üúĶI÷ũ}čĪ^}{ûŌך uį×Ŋ Ÿ֌ûžū”ŌsŸĮŊ8žOãۘ O^•ŋ^ū”‡ŋãAÆM…<ƒøúRž§ņôĻ“ū :ú‘@˙ëúzQøøJoįé@íøPģŽ?Aé@ᎧjAÛ#ŌÛNÔ ĪtĮj^ÃŌ“đôí@ú~žôˇáéīGnG¯jCͧoOzSɟĨ(ę8ôí@ātũ)=8ôíGáúP ;OJëĮéAt?—ŊéúRP#Û×ĩ᧝jSĮ¯j9ôũ)‰~Ÿ§ĩ€üŠ;ôũ(ôãô íĶĶĩúvíH;qéڏN=;R/×ųRtíúQoŌ“ˇOԁŠ{ņëڏÃô¤#“ĮéG~žŊ¨ę!Ō“đ=ģ 1ĪOŌÃĶĩĐ=:ūB“ŸōéúRqéúRãøūBū=ũ)1íúRŸĨ įßôŖķũ)3ūxŖōũ)ˆ3ĪŌŽ}˙J?*Oʐ “ęJ_ķڛFhŧķĪę) ÷ũhüZ3ūs@€úįõ¤'üæŒûū´„ķ×õ¤œ÷ũhĐū´šį¯ëIŸz3ūsGãúŌ~4­ ūzĐĪZ3I@ ūzRcü◚Nh~ĨįĨöũ(ü(ž”‡üô ŅÅ ū_•&x˙ëŅGNô~?­ēū´dúŅøĐ1?ĪzSūx4RRoķ֌ûūžÔ‚”VŖ õ˙ Ŗĩ&Īá@‡güņHqéüŊhĪŊ!=z~t p8ũ)Gn=;R~T}?Ī4Į˙Z—đū~”€sŪŽ{Jbbķ×ŌķÔúR ņ@íøR{uũ}¨ĪŋëíHOūŊôü(sž˙¯ĩ.}˙_jnzRƒĶŸJ`…ĪųĪĩ{˙/J@zđ9ôī@l(=?úŪ”Čü=)č~čēP‹Üp{zP;õŠéŒvŖŌ€b÷õééG@?ÃŪ“ˇųõ Ÿ§ų4ztũ=č8ÉãôĻįÛĩ)īøĐEĮp={PG'^ԇüh=O¸äúsڎũ?JOķĶڀ=ŋJQ× ę;P>ž¨GáڐvãôĄŖž¨üü(íĀũ)?Ō€būøíëĀ˙ži1ė{öĨ9įŌõ=‡áŖßøí!ú~”Ŋzԁā?īš1ė;vŖđ?•'§¨AĐP:p?īš1ė;v¤Įąü¨î8ũ) AųQoŌÃô¤#ü⁊G^~Ô§¯jB9<~”§éúP Į=?Jöũ)öũ(ž”A}8ũ):öũ(ü?AIŠ\u˙ Lœ 1ūxĸÅ˙=Š9ôūT†‚~”Ä/~˙ĨŸéI‘íGåH: Ûŋé@ú˙*AԌô˙_Įõ¤'ßõ Ÿ֏Įõ¤ŸķšB}˙Z(ĪŊ÷ũi3Ÿ˙]Ŗņ ž´QøŌs@˙‘Gz(˙=(˙=(¤Å đũ(¤Ŗ4žÔfŠ3HņũhĪŋëFh üõŖü÷ĸ“‹ūzRcÛôŖÔ~nIķŠ\œRzŅÚ´>>´đîhü)9ŋÎi€šã¯ëF}˙_j9Ŗ=(?_åAéųúRķÍ)Įų>ÔŋJ?/ËŪ“#žE.zôī@=ŋOzųãۃۃßņ G˙^“Ļ?úū´ķÅ3ū{Ķ/§øŅ؍'­üūt ôįõŖ=?Ɠ8īūsA?įņ Īŋëī@úūžô™˙?÷ũhŲ˙?'ųíH{ķúĐO'ņī@1sĮ˙Ģ֔ķŸĮԚĮŊü{ЏSøúQū{SsĪįKš^˙˙úԙ˙>”güņ@ ø~”ßáH?Ž(NÔŖˇĨ7˙­éKŌ€`ôũ=é}xũ);ŸZJ=xûRŸ īړ׏Z öũ(ĀĪOԊ;˙õ¨ę1ĪAųQЏÃĩįĨĮá@=éF:…ĸ0˙=(#ü⒊)ßĨ'áúPyÍ8ôũ(īĶôĸŽ˙ūĒŸĨįĨįĩ%-!˙=(ĸ€ ˙ž(˙=¨üŠ?/ΓĪjLûŅëū4?ũtgیûŅūzҟրņũi3Į_֌úŸÖ“ņ ņũh'üæŒŅš@'ųëJĪ4”PE“đ đũ(ü?J;ôŖĨ qĶôŖQ@8ĸŒŅøū´gü挏_֊)ŋũz?Īz) ķŪ‚?Î(4cŠ1ôüŠ8įŌķڎ=• %ĸ(ã×õ­.§éAü?*OĘÆ˜ ëūO¯­%‡­/ųęhü};ŅIūZP}čÎĪĩ%ôëLüū”ŋįô¤Ī#ŸÖ€Gō¤ž˙áA˙ԙÍ'ųíé@…õ˙ __ƛūJ^ũ:˙…1ŠOZĮ֓đũ(˙==¨žãÜŅžO>Ŋé ˙ĪĨ˜¤õį×Ŋûū´ŸįôŖ?įđ ėûú÷ œ÷Ļ÷˙>”gßõ hv}û˙J3šL˙œĐOņ BŽŊ•ôĻŽŖŸNôšūč‚÷ü¨§˙Zœū´gßõĄ—üöσūրbž”šëMü}iON´ Sū4Ÿ‡éFzū4Ÿ;đũ)1ČãôĸŒô B˙ž”ž”Ÿĩ Ķ‘G§øRKšŠ8¤'ŠSߊ=h¤&€˙ž”žÔ”w˙ëĐ!ĪjLô˙ëPųÍŸã@0ÉõūTgŪ“üõŖ>˙­ ŸzLŅ‘ëúĐOŋë@Ã˙­ã­÷ũhĪŋëIžzŌĐ Ī?ũz?ĪZJ)ž´QI@ŤīE…!ųéGųéF)(ŋįĨ%PGãFÎh ņũhĪųÍRÍčŖįž”}•…'ųí@?Î(˙=¨ãÔQŸqųĐ0˙=¨ĪN•&}˙Z3īúĐ˙Ųleptonica-1.86.0/prog/underline2.jpg000066400000000000000000000652371506303110300173110ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ? ũj\Ÿō)?ĪJ_ÃôĢdôsīH?ĪŋũnÔ¤õ˙PáG¯ĶúŌP8įŽyīFzwū”‡×žôŊûu=ũĒ„ úRķô oÞÃŪ‚zū4ŸũozNߟjvNO?į™ū”¸į˙­íGÄ*ĐAĶō¤ėôīūĩÃĪŋķŖ ú‰ŸĪųP ãĶųR“Éü{ûQÜséßڎĸč&?/įF8üéNôvíßŊ!õņ?ʔsÂƒ×ņ?ʁÔ~ÄĄúŪôķΝjLqøZSĪëڐú€Īëũ(āuč(Į?§ĩp>ƒĩ1tį‡õĨ<“ÉīF8÷Į§Ŋ)ûĮę{PCœ¨ūTšôžŸQڂ>^Šü0˙éJz~t¸˙?…˙o§áKÛđū´cøPsŽ˙äŌ=OÔ÷ uΏīJs“׊ uzŠbč7ŒÃųĐGŸzP>_ÃúĐyņ }DĮ?¯ĩ(ĮōĨīø˙JL}{P!1ԃŽ~‡Ŋ)íôū´õčQ03G§áJzŅéøw CqĶéAūtęCū=čQ03˙× éŪ—Ŋ~TA¸ ëN ˙'ųëI˙ÖĨīIÛō¤Pzš\b‚(´SŠ(”‡4¸Ĩ"4™4ãIŠ Ŗš\Rcü␠Í!Ĩ#üâƒūx ch4ŋįĨÄ7Œ{Rš)Ü 1Jh˙=h˜¤Ĩ Đ!2h4PGĩ!&ŽČĨ˙=)đ b~†”ũ?J &!ëԐč;ŌžĻũZļ:Rõ¤_֗ōkA ĀŖéÜvŖŠZ1ĶđíGųéīJ:ÃĩŋúŪô øŅÜķëŪ”÷ühn§¯zaÔ;˙õũŠQøwĨ˙=}¨Aúw B‡õ ëKŸqųûŌvüķ¤1HäņëÛځ÷ŋÛڗŽåH:ū#ˇĩ1t:~¨˙üčúvĨíĶąíīK úęåG|{åG9ĸcúRcÃԜ:¨¤ĀĮáH?ā?önÔcžœgĶڗôīGĮúSę/ø"c§Đv ŽãÛŪ—č?!ž‡­!õ1úúR߇jSÉüh§áڟQtˇáéīAúzöĨéĶĶی{zö¤>ĸwü}=¨ô8ôíKŒįę;{Qßđ¨„œQŽŋjR3˙ę¤#ã×ĩ1 #ŸūĩãōíKŽz~žÔŸũnԅ˙OķŌ—֏ūŋj0;zžÔub“ųRã‘øvŖõ¨¤qF)Hëūƒ˙Ö Å&?Î)Øéū˜ãđô #üâ‚:˙….=ŋJųâ€ŋOԐķŠP:…˙8¤!¸˙8Ŗį¸â‚)¨Ō9ŖëKŽh¤!ŊčĨéI@ÄÅ!§Cí@„¤Í/ųëGųë@ H:R˙ž´R;RRš(”RšJ&=¨"”˙ž)?ĪJLPE-! 4éƓņũhųæ˙žiŪųũiŋį­ -Ži}yũi1˙Ö§v­ BŊZ_ĮüâƒßņŖ§įëíL@;~cú:QƒÃŊ;RĮ^?Oz=ā]¨íū}hĮņíL}E#žŸįČúåAŸđöĨčGÔvö ]áüéNŊzUÂŽpzô?ΐĀ÷?ZP9üGj~}{Đ>÷â;ûS‹ÛđĨ=?üčŋôŊŋ_z]¨˜äū4ŊøĮojSøŌ÷ëÜ*}C Đ?.ÔcĪĩ(ûŖ§j;~}Ѝ¸į§sÛڀ9…søžŪÔŊĮáڙ==?ëJG'ęi1Áúz{Ō‘ķŠíH§¸˙{úRƒč)ĀaŋāCˇĩˇĐv •°ĶĶđ?Ηšįõö ôįĐŌã“õū”ƒˇ>čĮ‡¯Ŋ.:~ßĨ.ƒ˙€Šį×Ŋ'§øĶą’G=MˇÔSę!ŖîūŋŊĄü{Ō˙úįJzĮŊ!õ~÷ãëí@ę9ô§cæü}}ŠéøwĻÅĐAПoëA˙^߁īKßķīBĸˆūT˜ČüŠØôöīIü#ü}éū‡ühīĪŊ8÷ĪŋzCũOzb_æ ëųRõŋ;ĶđīA~žôƒū‡üi0?ZR:¯z_ņõŖ¨ ‡ŌŒqøZpíøw¤<ŊŊ}čč>ĸĪįH~÷ãN=˙ôŊ{úĐ! wúQéôĨ˙ëwŖ~´†7h˙^įΎ§ņõĻ!¸¤ô§õģŌv˙ëŌčD=č4ãūy¤˙=h;Ōv§ž´ßOņ  ŌúĐh§­%:“ÜQøĶŠ)Ú)ių☠IŽ)ĮéúR§é@E´†h4´PhĨÅ'ųë@%/O˙]% ’–Žâ€-váJGtįŊ;ééīZ!éīKŽĪĨŋãڗķīÛژ€g?• ę9ôīNųŖđ : ūZāū4Ŗ§ųõ¤=ū‡ŋŊę)ęåGqĮqÛڃÕŋôŊ˙é@„^ƒNÔcåü?­p? _áü==é×ņĨīø˙JëøöĨxŒwôöĻ/ü(ūŊŊ}éW¨ü;QÛđū´ē‡Šü{Ō÷üGjS÷‰įŊûõƟQt€Ĩ=?JúPyŸzEu×ņ?ʀ:~ėsךīíHOÃŊ2DūÃúԐ2~Ļ‚>_ÃúԐ2OšīHoqäqüŠā}ķ§ŽŋˆūT‡Đ:„#+Ķ×ĩä˙‡ĩ)/įG~ŨĨÄNÔ¸Č?áīG˙Z‚88ô?ΐ˙ā9#ÜöĄG#ę;RŸŧxîhQĶđĻ.‚GNÃˇŊ 8?(éøz{ĐG_Įĩ!õū?ԐqŽ=)ā|Ų÷ŊŠãđ¨d­„<ĀŅŽ?åKŽŋj\søžŪÔÆ4dŽ=¨íøZ\NÔvaõʐ ôū´ÄŋČCĶđ4ŋÅøúûR‘×>ôŋôŖ¨=žņŊxúPGņīīKŽŸAJ{õīü騘ųÔĐŖ~āyīÔĐNŊŠ“Đ`č>ŸÖ”÷üi{~֗×ņ¤PĐ=}Gō¤ĮOÂ¤īøåMĮč;ĐÄŋČB8?/|{˙JR3‘ū÷z1ķ~>žÔú‰Æ:{Rcå?OëOĶŊ&8?O_z] ˙€4Žŋ“øĶĪø÷Ļ’É8į֙"c }qøZ<ô§§āiÔB>cøĐOâ?•.9?_Z\r>ŖŊ2z ŽãN$Éņ¤ ­ĐƒÁīH}CĪjAÛę)øį˙¯íIßێôÜqHF?ZO1:nŸŊ<āŒũh`4Š1ũ)ŨM&?¤!¸Ā ŽßZR8ŖĪã@úĀŖ4îô˜ū”  Ō8¤Å:Đ>ŖqÍ”ĐhÜRSŠ(Ú /i¤4ã֒€›N¤ üi)Ԇ ühĨ¤4RJGZC@E!úSŠ ŠJS֐ķCæ?Ĩ/P?Īz1Īåڔvü;{ÖŖbzū?Δô?uü)īô4 ;ŸņöĨ^ŋˆūTz˙žÔŲFģMÃŋĩ2o åíøQü?‡õŦ īægų”)‘ŪNŽČĖ際‚zŧzŅŽOjŠÚo>ŨdÆ qšŸöę•1ŋķGN=(?ā#ųŌ¨ä~ÉG1ėšũh˙"ĩÆĄŧ…6FzRÚę\Íå `zķôŦ;‡3\ČÚĨļ”ÛÜĢú]BįN:‚}¨Įéũic!•OŽŪՓ{Š´o˛Čz:Í—1Âė:€Õ›g¨ŧ×H‡8'×ÚĒɨ]Ȅ7Ũ9íLĶ?ãū*:ƒz č?įGcøÕ{ÛĨĩ‡'9*1ŠČ7÷’ģyLqĪí@_S īøŸåF9…`EŠÜG':ŒVĨÍÖtĶ4DƒßĨč[#*qéũiĮŠúšæĶPš'cņI-Ũâą-#/4‡sĨ‘õʲîõ&ļ—˧ŽôëᏁ—Ÿ0Œžĩ9ĘÆRwgŊ6#Ĩ´—ĪļYvęŸū>žÕÍ@nüĨ3lį5ŌEŸ-wuãųP†˙Ė\!ÛŪĸ¸C šė8Šŋ„tč?eëŗmcSԜķG@e3­\g;¯ĨjéˇFęÍ÷āW:°3Bdå{E¸ōîDgŖ‘IŪĮūt¸ūŋƌqøwü˙•Á2ĩ[é­%U EPĩã §č*¯ũŅF‚ŠÍ6ā¨Ą’‘ę÷!ŋy€9íZöˇqŨ ÆNAĮ#ÚŠkH#3']Į8ĻHcž‹ž éOf˜tAI‘‚2:įYēĩų…V8Ā%—ŸjĖ‚ŪâīsFÍĀÉæīŠŌƒÎ:õŦũbGŠPãæ•Ü֒ú‘ÁŨZ´‚[㚨Aē,ŌI$ŽqŠÖb9#ĄŦ]ũtŸ…&ļÅnšmî\õ}}¨VRFÎGzæĸ†{ˆ˛¤íŖ‚y-Ļ :ƒÎhĩĢģGl œŠŖÎīráÜci5>Ŗ'Ļ$žŖ=+"ÜHÎD]H }NŖzgīžžÔ7ŨãĐW-*I áŗšŨĶ&iíˇUĀéHFT0”Iü_Öˇb8…wžyŽvf"ņŋßūĩŠŦ,ã#ûÔĄŊ?ž:úŌy‰ĮÎ;wŽj1ßbu4Ž ŲĪZéķ‘G˙^Ēis4öãwP?­]4Ō߅;Ōõ¨ƒOJ_͊B:ū4QŊÍ%:Š6’IŠ4ô¤4ęLPcšLSŠ1@ ¤§R@4ŅJi(`!¤§JLRRŌPJq¤¤w¤Ĩ¤  ŖƒKŽáKüGëëJ;~ëT11ĮųõŖ=i{ŸZ^Įčhc“õ5WQFk6 ×pūUo'ņíFÜđGOj}IkC“=i1é[3i>cæ<€zŅ’ČÁŸ0Z›E1JŲĄ= ŸįW{ū'ŋĩ"F#M‹œ â¤#ŸÄ˙*cŖ3éT5Y„vÅ3Ë.:û֊õ…sÚ´Ūe¯?(Å!2ŊŖ"͙éˇeáĖd'ŒUÛ=,\@$cŒŒŌjoŲcŪ§#v(vÆāɧąĪ˘Š?yp3üOÍ\Ō\ųÆœIUŽ!x'9ŽAĄš5ŦqŲ2Đ7jĮŌ˙ãū*™ĩdˇōŒgŋÍQijÃP‹*zŅÔ:uĶûø‡ĸÔÚHŅŗcæÁÍIŦY´Č˛ ÉUį™is5“ļØÉÜ1ƒ@ú’k1ŦwÍ´c#šuš'Gœ€Š¯)šöäšB VœļßfŅär@=('Ą—b]ÆLÖŽŊ, @ųˇ˙JŅŲ$VA–*ÕÜ÷7g0s€)Ą.‡˙ËQęëļđâ´ôkī–âĒë6˛yâERC{Sö’ŠÚ|gŪĢøãOå\ÕĩÍŨŧb8ĶåÉę+Ĩ‡-“׌ņíGQ°č‡=ũë˜Õ&2Ū?9 N+ŖŧfKG* mœqī\ŌZO,žNI 7bÁxąY´ „’ŲÍW…ĖS$ƒøNkĒ]:ÛåĖ}ĮōŦMKOxî’„Š„nÛČ&ˇI3÷”÷ŠHįņ=ũĢ?FķVÜÅ"‘ĩN+H}ãõū”ū ƒâõąē)<>Ā4ų8āTúíŧ“ĸčbjā‹ž}8­Maąã°sKĒØ}ĨDûĘžŊk*4ŊļĘÆJ‚âúÕļũž]˜Į*ÄáŋąÆīQQC§Īq6eĪSZē•Ģ5€Š!’6Đ-‘G@˙_/ĐSuዑøÕÚX&Č¸ T:˙ü|¯ã@ŲkC ly†?Ęą¯J›§ŲŌ¤ĩ~Iû;0LöõŠm´Ų¤™LŖ HÉŖ [RÄĀ˙bGŸJƒCÁŊ`@?!ëZš…ą6"(Ā;AOIŗš ˛Ō.Ō(_ŧ‹^O/aV4Oøô—ę(ÖmežD1ŒāTēUģÁo"¸Á :‘‰q˙¯ūũkkōCūÕS¸°îÂüģŗZZ”5šĸ ßŌŽĸčečø7ĒÍKŽ Y" c"¤Ķ,å†í]ÆKĢÛIpc1€p9üé n‹ū ũ+SüjŽ•ÁY _= úRŸ…;˙­IÛđū´tĶAīøŌŅÜĐHæ“ŌŠJn)§Å!īHšB)ÄR`6’IHĐiqHhĻŽôŊé(JJu%%!Ĩ¤ ¤Ĩ¤¤i´ęLP†0Įë@¨īKŽO֕GOÂĩCž}číų÷÷ĨŠ{~ցˆÃ“øŌãŸĮúRž˙zv9üOj4ĮáHWđŊéÃˇá@áüč#ƒøöĨÆXũOoj1×ņūtė|߉ūTåxôŦŠ<Ÿ1ˇBÅģņīZ r? @ ŒātŊčūF|wb4ؑ0P8Ĩ{ŋ1Jŧ,F}=Ģ@ ÁāwíNĀĪA×Ķڀ2Ŗ‘Ã-ŗÁĸY Éķ[ą8ę~ĩŽ#NԜíOëHއh?č§ŊH˛2°+kƒ‘ĘĩŽA?ä}Gō§Ô:†æāŠSÁŊC •ú[Öļ9÷č?)ī×ŋzCęeGį'fĨ2ųŽĨŗd009­žũO__jܸnGč'ĄÉ[[J&VIĸļļÜų„ũzú{V€†5…ÁÁīīR÷<÷õö Ŗ5Zđp!‘H~ØÃ˜TņŪ´×<~é9õė{Ōč$eˆŽōO’ŊûT€ßvŒv­,søžūԀr>ĸŸQt3ą|G(Ŋ==čŲ{ũÅīÚ´qĮáũh#¯ãA]JoÉ*õʓËŊ8á{v­r>ŖųRc§áHŸø—}胃ڗʾĪđ˙‘WČëøŌĪųôĻ?ø&w“}ŽĢÛĩîy^žžõ €ĨĮ^;įK u3žĪ}ŸŧŊOjÜaר­r~Ļ€9ÅEĶäfųØ˙XŊ?­5ėī’dũ+O‡õŖŸĮĩ1õ3VÖņFŖ¯ô§ [Î?z;V†?Ÿ§ĩtü;RO¸ÎלūøtŦũBÂåå˰nĩĐcŽozđ;ö ?ā˜–+ Q AģĨYû%ĐP<ņŽ+DoNŪԀqøŪôēžm.đëKöKŦ˙ĮĀęjųĮĩųŋOj}@Ī—EŋããŌ“ėw8˙ŽßÖ´QøRōŸ§õ¤2‡Ų.pŌ=hûÎããŋôĢäpB9üĨ1\ ,î?Ō=)Æ?ããˇõ­ę? ooÃúŌR´K$ģÆÅOßņõö§ĮįIįũ(ę.‚߇zoøzĶũ? oo—AõôüûŌŋũzv8?!ëLCúÔŪÔū˙•'jCzõéųæHGZ`7üõ¤īN¤íHCqM4ķԚh”‡Ŋ) ô šJ^ô†€’—Ŋ””´† IKŠLPRw§RP‰ę~ž”å? äũi@éZĄˆŖôcÃúŌ¯@>”¸ãüúĐ ëøŌ÷üOōŖƗĖ˙*@:~¸ãōūtā:~ʐá@ ŽãüéØäũOōŖąü8÷úšhûÃđ Ā:xÂ“Œg=‡ķ¤!1Áüivüߏô¤gPXt=éwŠ?xuõöĻđEQČúŠ1ōūžôŖí@/ĐZ]:ū=Š@įņŊ¨Į'ņ§c‘õʎĸč0Ž?üéq×ūQK2FpāüęHØHģ—‘ķPWQĀ|ߏô ĐRã‘õū”ƒč?ôôüķ§cæüĨã§cKŽO×úP?ø"‚? LpįNúPzĄĨĐkq1ķ~'ųP#đ§cŸÄĐO‚z Į‡õĨ?ãK—đū´ÉåÆYēsLcņüĮōĻv¨`ŊI¤$åKsrļûCdZ@˙Șô˙žŠ{įß×ÚĄˇ¸K€vœãuX{ņ§Ô]>ņ˜ūCųŅëø˙:^Ãč?)č~†—Aõßņū”Ŗ~Ŋ˙éIéøPÅĶä7(úZVŸĮųRöü $ŽąŽæ8=ũ¨˙€CüĨ'§áLŠt‘ļĢr;ûT˜éøRūCHãđ4Ô{ŸåJƔ›ņ?ʘÁô¤íøįOáMĮđëK -Ä#ƒøŌcæüĨ$Ė#RĖp9¨âēŠYBĢŠ9ė}ŠõBU?Ԅ|ŋ‡§Ŋ v&ī@ g R3/—ÆO}ét)oc@Œįņí@ū#ˇĩ)īøŅū#ųS' ÁÛđíIÛđ=ŊéØéøRũiÔ1×ņíMĮķŊŠÄsų˙*Oūĩč7Ķđ¤ĮųÅ9ēU)5#bŒë‘hč;ęZ#¯ãڌ?éTΧoũõīRC{ § Āķũ(8ę? LRú~”†ÄaĮįHE)īøŌ`4ŌU õŠb§UØ›Ė‰[ÔHBž”†œi§Ŋę!ëHhc…'ëYŖQS&8ë@8¤ rõÅ “FKā’ôâ­ÆÛĐ7­8Ōb”ŌNÔRŌR &)M˜‡ŠúĐŖš^įëJ:Öß…˙?8Ÿ…įõ VĀÎ}˙•ŋUÔĨ0ۆŪ#ôώˆĨÔáĀ,NÔAĒA#…ß×̜f,rĮ?Z@HäI‰3´2äžiøūfĒiŦ^Î-ܝŊ¸'ęh)î Âŗu;áj6s–^?:Ô‘\ūŋ™R@2ģqHL‚9îî‹qíK+_šߞ{ ­gvöŒØc‘ZiŦDãlŊ ė=ЈŋĻÎĪf$—9šnŖr’z¯6Īėš.„\õ‹ˇÛĸįø¨{ nuŗHą ˇžôÜG+€„ęžŊ‘`Hūõføt“yGQt }Ũ.k•íWtģÄKü×įŠĒ^#˙ˆ˙ŨĸÃNk›0I ‘HfÜWĐË UuÎ{j™Q$ü댕dŗē!NZŲŋŧ”é‘:–P  ] ōjP!Ú]3ĪzrjVîØ&IõöŽjËdͰ˜ŽFrjôļq4ĢäēƒžÔ čYÕ1#U7ÔíАd\ŒŠŖ­]ŧĮ1r*Ļ—do ŧ‡9掂NėۏS‚YŦŠI=Is{´Š˛0ŒÖtš9Žá^#ŒÂĒø"â÷Đ×ūŌ„ÄX:āëQ]Mõ‹ėl€O"ąl,¤ģŠŗ; ÔK&ŗĶ¤Sžô§¤ûza‰ ÔŪ&āĀzpjކOö¤\÷Ģū'ę?@öūŧĘē-ÚÛ ąäzԏYˇ’UPü“éYZ- šyv Õ-žÉyąr8Č WĐëCƒ~ÛGķĒ7Z¤P9ROqŌ¨CxÃE|žB⯞­dãtĖH#ŋ4‚ú›Ë­Ā_'ûžÕĨ‹4a—‘Ås“BäO_đ܏‰‰##Ą‚ØÜ˙ëÖ>ŋwåÄĐ î-[?āk'ÄęÖ­/ņρîciwŸf¸ÜŲ#Úē+;Ôš‰˜dmÆsõŽEgģÚŨ+[PŒYXÉŗę? čz´PIˇæ<‘ĮÖĸ]n2āā“ÜV^—ڎʡ8æ´5ËŠ90@ 66-æYŖVSéŪ¤ūôūĩĪøzb%hû+ ĮĘ~ŸÖ—A­Ė­nëɄĮƒ–'šÃ°¸6÷i'$Âē-b’Õ˜ŽA5ĪéQ‰u҇Øē–×ĸî)@VTkœ'eáoGÍuij°DåGUŽU×uá_WÅž#^]h#ąÍ\°ž[ąÆAČāŸjĨŠéé™u ˙JŠĄôā(&æåŨŌ[ĻIį3Y‡Xb؜ŽyĒzÄ­%áSŅxļˇĨŽÆF-ƒČ f•ž¨ŗžå'=OĩiyúW Ö@ĀÍu°œÂŸîŠCč ÷Ōš+Ņū›/ûÕ×ē~ŸÖš+ū/Ĩ˙zŽ‚{šqiqŊ¸n2sYŗ¤ļsm Gq]™g\˙ž+#_*gvĶöuįĀKSÍWģÕnUîÜ̧ąK’:âĒŲÆ&šž´†÷.˙jɟš2š­+[•¸\ŠúÕ=ZŲÛz€5OF­ØAĐæŽĸ!ÔãíĢXMäéҏėĸ˛ĩ?øûjЗÜŖ¨ú.¨X—ˇ­7ûQÃ`Ļ?¯ĻIJÎCt5>ĢÄC.M 4ĸ™gˇ,ī\é8”ŸzĶŌ˜Ũ{sYŒ31íQĐLŧu'P^õĢ–WbqƒÖĢŨZ*ŲīP2ĒúQ˙H4 eË(šqĮZĶķ<ģ! ôŦ‹Īøû­iˇ:_üŽĄĐŽē‘=GëMūŌmØ*@úÕ{Äŗí=1Rjˆœ  X% aO5KJ?č˙CWM!…%)¤¤ļ94ā9¤Į4ā+aˆ;~¸ĨĮô t ?ãQŨ@.!(}ÍMŠwcøĐ'ŠČMg,NWa>ôëk%R8ŽĨĄG?0Í*@‰Č\t40JÄvqyVą¯p¸ũjĮsøĐGėdįë@úˆĖ>ĩŸusÍäË´eAú֐ëXēĨš\ĖŽԐ˜é,í¤RUŗÁč+öĶ č:Uáo2d ˜T‘Xy’‡–FcČ$Ķ%€sĸÎŦIÁâąíXGwĢŽ…!HŒ`Œ0Ŧ+1RTļ?­w[¸GąOVĒ~˙ÚqĶ÷Į†‘Īĩ[Ķ-Îã~N2:ĐЧâOøųčjö‹p‹Ļ¨=FEĨ¤wn¯ĪĘ;}jŸönÅÂŗŽŧ@u7ûEë2ķ‘Ž•ŦÉiņE0á”b›g§Ä“+0=psWoí⹆5ÁųGjŖ&M>-„ŽÁīYŅÉ$2ūčōÖĩ~Á´‘ķzš×O‰$ÜTõ <Ęúär8‚R ųMK ]¤HŅšÁĩĻKÆS€+*M2%$ĒžsŪ—@KSNmEEį-ØÖG‰ãæūÅO„bE}§ ú՛ÛhŽÚ6dÉP4 ÚxdŖIZ:˜˙B“ņūU‚%š˛…Ā"§¸•eFB8?á@ÎgC˙¤_ZŅņ@âÆĻĩŗŽ ŌU@ ‘SßĮØ]ĘÜõúŅphÉĐnRpÄ ƒÔÔŧßkŊ>~\pkKû6@EīKŒI"ˇ–8"XŠ;'ūĮeÁÜW8Ŧ‹uōšŽšfEˆ(^6ãõĒVĘł(ëHvŗ"Ė`ī¯ôŠ4Q–b„ŌĄ[÷ąq‘üĒí’ĨŽíĒā:Pö@˙CTĩ”/§¸'wôŠĐ ņÜ÷¤’ádRŦ˙J˙Ėæ4‹…ĩŧ ä=s[7r&Ŗe ˆ†(;}j'´ˆˇŨ^ÕfÕRŨ\ŋ0΁ØĀ°˜Ų^ã`ÕícQK›*2HŖĩ/i ˙ĘšK)~Í{ĀSÍu tAÁΕP’Øäę;SBÍŊō]+Ēá}+›`~Ūx?~ˇ­Â@1Čū´†(˖ųsĪjˇš6Ž3§7į‹Ą‚/—ƒ[rÎ%BŒgúUxBBá—¤#?Yŗq9•GŖ˛žĄ &wsÚļed\:Z§$)¸ãOjc*Ü\Āø‚N}+z`O÷Vŗ$V?*´.° zH:›î7Ķú×)¨ŠûtŧŊ] ģāũ?­V”FîĖz’{PJQęf8Br=Ē›,דdŽz+XĮGĨ:&XČ zv ,,6";LrËÍbė’ŌãĄāúVņē?ä{Õ{‚%bHįžÔRũņš„FĄēįĨIŖÛ0›ÍaŌ¤X”6Hũ*ÂMåŽqĮjĄ•Ē+˛@8Ģîö@˙r–MŽŲaĪŌ›s!6Ļ5ĮJ™Vs˜%-‚r1ÅI{p×O>”–‘/Ė1éW–5 œʐŌā1@Åē“Y.öƒÁûÕ´'`0üĒļpsô  îFtâ?Ų™Ļ+ ŽE_i‹&Â>”Äų*å@ŪæuōˇÚ߃ִpŗöϏĐsô§͸8úQÔ] :j‘uČíSjĘKŒsRϞĪŌ–Vķ>đ?•7J@sëWę­ąÃmôĢT†%R@lԁÍĸļūŋũj_ʎãđ AŠ\ZZ_ūŊ o—Đ?€čĨ#¯ãF8ĨĮ_Ɓ€ę*Ŗ[HXĀ*æ9ƒú B)}ŽNė3Í=m$ÉĮ_éVņ×ņ§ķ~?Ō€)‹I2?yéIö7aĖŋ­]Į#đĨíøZĻl›´ž´ŋcl˙Ŧ=ĒŪ9üéqĶđ :>Æv˙Ŧ=(ûČ{ÕžƒüúŌ‘ĪâhPYųčzŌ‹0Wũač*Ø#ę)Āü) ūTد?9čiE’įīžŋŌ­Ÿ(ū?ԘĘc\}öíۜl“ģũęĪoĀRž‡ņĨĐ]JĸÉ}ã×úPļiĮ'ĩZ=? t+}ŽQôū´˙ō¤ŋČor˛Åģî÷ʓė°ãîöÎŦcæ‡ō¤=ūƒųŌč%ūDÖ.ËëKöXŗ÷;˙J›×ęÔŋôĻ/ø$Ú,“ŌŗEƒōvūĩ0č? 1Ã}?­"™ ˇ‹Ÿu4 xˇuĘĨ#ųš?ˆ}GōĻOB"-Ēv‚ƒ|üƒĄŠ@ā}ķ ŽŋF¤Š{üČü˜ķ÷ųŅ ÜĒc×ņū”ŅĶņ1t#0Įōōh1GĪČ?Šž~īáũh?ÕŠ‡ü3{žā˙"›å!ūÚĨ=GųíMíøįHų 1'÷Gų4“?tu4ķßč!ę~ρ˙ÁåĻáōŠo–˜(č?IüCę)ŋÂ>ƒųŅĐKü†͟”tū´Ķ'åM<ô?!ūĻŽ 0"ä|Ŗ­7bā|ŖĩIÜ}E7°ú A˙aEÁųGOëC"ķōŽôãĐũ(=˙cD{ûĸ“búÔūãëIéøP!›WĐS^5aŒ ôü)§ŋãH}HŨ˛­<Ēį ŠøĶM@nŅč)ģG §˙õŠ;P AH@ôūÔĶ@Tz iĐS! 9āRm‚Hh¸ĩ´”€J(ĸT R wzØ`?”…P? Š^įņĸŒZ.9 tüŠEü(vĨõühŋũz;Šqø QUîîÖ×ȁÔûĐ“ßči{Ÿ¯ôŦĪíhšÔõĨ]Zô .iz~u_Ā˙:dŦ¨Gūƒđ4ēŊ˙:_ūĩ!#ÔwĨ?ĨĐ#đū´î˙7€9ôū´¤ŒõîhŖ¨úŠ;Ĩ‚G=Åŋ A˙?úôŋãũ)¤Á>´í˞Ŗˇō§ÔB€Ĩ=˙OĀR\ž}i¨Ŋ˙é@? BĀ7^˙ŌĒß]­´!ķØS&úĪOĀŅßņū•Ÿ§j1Ũ—žëZƒĶ×úQÔ?ā‡oʎĮü÷Ŗü#8\äú˙:‘õõühŋ i‘zįÔ‰">”Éžƒē(úPzŸĮųP~īáHō*““Žŋʄ7ŋŪ/Ä*ocôū´ß9ņzS˛6gÔĐAzįYZŊųĐ'p)Úeđ–_¨ųŅ`ŋči1Ā9÷¤p{˙JĄĒ^ˆ­÷!ä“UtŊDË1cüŠ˙О:¨¤ūôū´Ø¤Y ô"ĸ’åOoëK ˙CIū?Ō û\d‘ŸZ˜0#péŸéGPu…4J…n¸E'ڐšį˙¯K Ā&õĻž˙Zqč~†˙Zop_æ'zo§áNMŋ @!éøZCū4žŋOëHhQZm;Ŋ6t“4´‡­Ņڃ@i§Ŋ8ŌiĸŽô”RQE ’Š)ļ)ÔŅO° ŋũjAÛđĨá@/¯ãE/΁‡§×úRđ uŖ˙­@ē ڗ×ņ¤íKëøĐŽĸ°ŧMūŽ?ĨnŽŖđŦ?Ēé@™GC†9šU|p23Që0,YŒŒÚĸ°ķ”Čđį…æĸžy&”y§ĄÅ1†]ÚŨÒ@aŠŗ}~°šį‘Si°¤pLa€†´4Qôäbë@.Ĩ5ˇIÂČģ@#'5ĐũĄ~ÉįÆĖæš-n5ŽųļcZĻG]u˙WŠú ¸ÕZIöA†ä÷¨æÔ.­dbŒqÍVđúĢߐŨÔÖΈ!C§ŗ`Ŗ¨žˆŸLŋKțgķŦ‹ŨVXod@!Zĸđã0¸“‚jާ˙!ißĨĐ{´hOŠÎĀО‡Ĩ3X–fˇŒ°ųYFkv(Ėj~ŸĘŠëĐĒéàĻ.†&“įy˛;yޟLi 'ÍûÁŊ=ĢÃLō†ĮŨŽ™TģŽŋԐoĘąĩûŠ-Œf3Äƒ[]ŋüëžņWHŋŪ4 ‘ĩŨÍĖ/\đqíUSš‚p$<Νá´VąÉī5­ KŌqBØOGc§Kúx›Õ Ŧ)u7¸¸)÷Å]qđęíūáŽv×&ávœŪėŌē–âØ8íZ:eųŧĩš>wĒÕY­dy0J“EˇōneäcúŅĐ3ÎĄq æÉü­‚+cYģ0Ų‚†lY ˇ0ę āpÆĸšá¯d‚!Ī@hęOB֏¨Ho$bA ~š{"]lˆÆER숨^@ãŽTR9ŧŋŨĪ&õąĩĖ–ÚG&YˇVLwrÜÜĒīeŽ+ĸŧ‡–pĨ` )ˇŖœŒb€ķ'd–6B’1úŸzˇ¯äé‘įŽķX˙l•%ČX)­M^_;FĀÆ\ŅÔ[Çũ,Ōęz“LIé‚AéÍ7Ãßņôk>õJŨ˟īQĐ ŪSS'˜ųÚOZM+Pu¸Xܒy&Ĩ‚ö‹™)Î8îc OZĘúĖL“+’pÎitÛWš&e$cīVŧD0˙ē)Ú¨ļîķëI‡R RÕãļV$đOz§ĻĀg›j“øVæļCØŊ2k/@‘RīæīūØÉk ) <đFk")ZęcŧŸ 5ąŦbk)ÎŦ+Eˏ$ŠžÔšđyvO_ZÖĶ.Z{6-ÔéUd´˛['¯SSéˆ 1Ķwô§Ô:¨ō}§ NwqÍ]KIĖŅģ7|ãņĒ–ŋōLôß]NÕãĶúŌcAŒĀĐz˙ŸJVīøŌķųPOO›Ø})Į§åLôúPØũ)Ɣđ? C@Ä=i(īIH]¤Ĩ¤4 CHzŌŌP! !ĸ’€ m8Ķh”QE “Ŋ)¤ Fā§RRÖŖBđŖ˙­@ëųQ˙Ö )}J=(ëū})GøP(á@ē;šüi)Gƀ˙•bøáj“ĮjÚ‘øU Î6ŗ—üh3|9-8‘HĘ÷ĩĻ4S"RC€V´ÂÄ̆Ÿ#Vn3éíO¨t+Š”ˆ&B@_YĶ_í 4`Ų8ĮŊh¤[pCœ‚1ÅLėΛKqƒÚXȲœÃŽHß#5:Jf¸ŒØr95a­Alî=û{Sã‡f99=(aĐĪņ/GĐĶ4Ģš`´ÚŠäEKŦÃ%ÁšíRéļ…-Bžėäö ,P6“ß^"§ŠčžÆLō÷1PEÂ-GjŸ{ãĢtô¤8–—6{ŅNEZŊšæî/(!ärkNXŧÖ$†Ī=ŠĢh ڝÄGĸØ}ˆå€5›¨XÎú”Ž mŨžĩ¸ģ•v€ØĮõĻ´!˜ąV$“H}M8åU5[ssdČ:ãŽixĀÃc"‚ŽnEĐįŦíîlį.1Ђ3]›+Éķu¨Øv7~õ"FÉ÷U‡>´ŧc¯aßŪąüAj÷+Â8$œÕ­˛cŖtõ÷Ąãfr“×Ŋ!ĩr-mjcr3žŗĩk¸ēŪŦ cÖ˛ÄĘ~U#'×ښacÉLđ;Đ/0°„ -ar>éąî4ŗ ÆøŠ€JŲ:ŒĀÁīA›ĒgŸéBūfRÉq´ §jˇĨŖ¤Ō<…~aÛëS‹B1ûąĐSŧ‡Pp€qũhč r vĐ]D ° ­féúiŠö'iŽ+iĄrpWŊ"Û°#äEąOZŗ[•ˆĢTcõǚnž!ēÜîå5Ŧ`sŒ¨˙&“ėíÉÚ:ųÔ]MDÖĨU€9ôŦm“/Ęeãĩl˜$ÜxĨ0Ú1Ú;PMŋC-<<ģÚLä᧍Û$–+lÄņS‹fāũŊéMŧ‡<ĻŽŖ3ô›Eļ¸ ŋ9"ŠXÅ1Ū žĩx[¸#Ûĩ4ÛIŽqĐ::ژë‘ ‹)Ú3ÚĻļ‰žŌŽō’ū•ĸ֍“œwíJ-›#§_Oj˙ƒR†;¨-ĐYQژr#‘€"ļÅŗž2;SMĢr:į@ėB^ÃĘvÉį“Ykd"“1ģ[fŲšäw¤6ŦOQÛųSVÉ[ēHÄî#­RžÍË!a×Ĩk fãæô¤6ÄõnƤ}Lq7ßŊ_˛T‚&LžOĨY6¤­5mŽã–î?•>ĸčeÅi],¸<6kXL„iŸf?Ūô [āƒģ֓ÜēŸÆ“üū”§ŋãGųũ)‰ Ę›éNíųSjF÷×ķ¤Ąõ¤§Ô›éKži=)™ĻšZC@Ä Đi %%-%%%/Ĩ%%R@›KE7iGZJQ×üúVŖBŽŖđŖˇå@ę? øP˙õéŨĪãIÛķŖ˙¯@ tü¨īų*Aūâi{ŸŠĻ˙õéßâhGáMؤdœįOGáIÛđū´…Ÿ”wĨØšûŖ¯ôĄģū4áĪįũ(.Ę;Qąē:QĶōŖü .Ô]Ģžƒ¯ô ĀāvŖŋųô tACƒ^qČ?­9#TČu4§úqûߍ0(ôŠč:zSģ›H`nč;ö Ķˇj;ūtu#đ ]ĀĮAĶĶŪ”nįĩ'oÃúĶŋÄĐ7¸íÜv¤? õvü)tūBŸęhīøŌ˙SKÜ~ú‹ ƒîūֆīøŅü?‡õ¤'úŌ˙€1GQõū”‡ĐP:ū#ųRŸ…đI˙€ãFŋđ*;ū4u˙0íø Bx?Cüé;~ųĐŨ?üčč ˜ŋô¤ūīáKßņū”ƒˇáGütxü?­!č~†ƒū:ŋĐŅ˙kŧ?‹ņū”Ū߀Ĩū/Ä*nxüŋ.‚˙€ãüé{ŸŠūT‡Œū?Γ<ū'ųSęoŧQÛđϟģ˙ū´šā~Ķ÷ëGAõŨOãMī˙ʔõ?'ņ~#ųQÔ]ŋ iū‡ųŌŽŸ€¤=?HŽĸž˙ō¤ū/ËųP{ū?ʓ¸ü?•2z Ûō¤=?:Oʓ×ņ¤W_˜ņūTwü¨ū/ĪųR߅2z íųRņĨ?áüč=Į֑]D?ãH”˙SHzūT  Ūߕ!éG˙ZƒŌŊÆˇƊSū4Ķ֎ĸ˙•'Ĩ˙JOJ@!¤4ŊŠC@Ä=M!Ĩ4Ú€ĶiŨé´S{ŌŌ”J))i Kz—?ĪúRĻ—üĨlŽß…ŋ/įBžá@éų:_ūŊ(ęo˙^•˜ “īüЉģGá@˙ ɟUHœ|Āp(ƒW‰ŲT¸ôũi0NæšwøŸåLV šißÅøŸå@Åŋ F`Ŗ“Ž?­(íøVVģ;ÛĀŦHĮë@3LƜüŪ´ĸD'†GōŽ^Îææíœ)4ų§ģ´l°ĘįŽ)Šú8<~T§Ļ~ĩ‘Ĩę‰r|˛~n+VG„“ũęCę?ŋãũ)GAôHęƒŒŽŋԟär ] 8HŲ`j8îRI0'˙­LÔ R€×= ÜI&ĸ›#õ:ąÛđŖąüj ‰Ä ēqPhGĩŽGĨaÜž:ŸŠĻ–ÚšôÅQS¤Æá×Ö­;†ļf°ĻOB$Ŋœ(nO­['“õŽ&+—Rs´?õŽ’MV4|Ÿĩ õ4{ūU^âéa 7qEĨŌ\ŽUéYēãmhūlpi$ Նu™K/ŠŠģÂŗtŸøôŪFZ›ũ­|GzÍ>Ãéũh=OãY2jҧņÅZ˛ŋŽį;XĪz,WRØūŖųR…(Æáø*iû§éũitüŧ—ąŖ•8Č,)ŋoÔuËę˛8Ô§Ã7tÍiÛX¤‘+r}jšÔ”îh¯#‘ düęÁéųÖUĩŠ$čëÔ`õ÷§Ūßy”ÁīĐRą}~fŸĮúSGoÂąXØrۀČę=Ēíú\ŒĪ‰/éũiŋŅŋ•WŧēX“ÎķŦÆÕˇ°1ëĐS°īú›_Ä>ŖųUIīÚÄķĒvú§™0Bn8Ŧ]Jᤚ9ČĮАŋājH$Œ0<Ķŗƒø˙JĀąŋ‘mŖ]ŦzŒÖåęÛ¨Ī\įôŖ¨ŪÅĐz~„üŋ‡õŦ$Ô¤æ4bY˛Ŋie(ĘF­+h>ĻŖOãGņ¨ūTÁ?ōŖ¸úåA=įĘƒĶđ4‡üūt˙uŸæ•7ŋåJO?ô¤ôü(A ū_֐õ?üūt„āŸø!õõ˙>”ßOŒ˙?éIžŸ…č§ųõ¤=OãA<ŸZCÔū4ĘęúšCÛđŖ4žŸ…"D˙ëR˙ŋĪ­!īøĐWP'úŌøŌ´u@˙ëRzQ˙Ö¤=Іž´ĻĶ„ķHiM%! ž””w¤ ’”ŌP1 %)¤ AIA Ōw֔įũ)žŋįĩ8vú˙JÔbŽß…ãüúĐ;~vü?­.zū5_QsžõėßŌŦņĻÍ• ‡?ĘŠnL•ŅÄģ—bI'šh$ŠŅēŌåŽBd{ŅkĻČî<Á€ũi0Hč4ŠôøK’ϝwüĨV´‹ČļX˙ģ‘V?‹ņū”‘LPy…cxū=ü÷­ÛđŦĮš~?΁2Ÿ†pn%ûĩˇ¨Ā’Zž@íüĢÃķ,WR8ƚĶÔĩ2Ģr@â›COcĄ ûø­kPhˆEûŲ5›¤Û´×‹.>UlÔū!‰–ė6>SšĄ>—bnā?$’*„¯.ŸtT1ãžkc@ēl‚1ä5djīįŪüƒ”™éøPzū?Ō“˙­@ŋāéū}hn§ņ¤ėĪzSõ4¨‡ú˙JLã…/Sø˙Jnz} č§ųõ¤'“øĐOį֐õ?SL:‡ø˙JOOŒ˙:AÛč)!oķëHO_ƃĶüúŌ˙?֒ƒū4č@˙ëSMü))¨v¤4RSSM8õϚ@””Rf€ (íI@Ä4ŠM'j;ŌZBi1§ī¯ôĨ§Ö›ü_ôĨžĸļ@(íôŊŋëMáKū֐Į×ņĨīø˙Jię^˙ô§ÔAąXŒJjĊ8ā:xę? ;~֐ĮË~4 üßđ/éM=IúŌ˙ãũ)ˆPy…gęąÅsBØÆz}jøíøUy-Ë9aŒ{{ŌĻiąÆû–V‘š•,Ŗ. ČĮ‘ÖĩūĖryûP-NzŽÔÅĐeĒÁd0ûŖųŌŪ­ŊŌĮœšpļ?Ū˙9§}”äŨÍ"ē˜‚Ę8_ģ¨'ĩKmi Éæ6âx95Ŧ-rĀ“ßúP-z|Ũŋ­’nŅäā‚+:ĘŌ [ĩ•†8­/ŗuųŊi~Íķ}î˙ԁúäë%‰QœāVF• ČdÜ qŠč§ąYW’8Ļ[ië lqœŠÔĄœ>hbŒH8É­Uš5‡h)˙fē÷¤Ã“ځbŌ?š";ŗœū5Ŗs4sÂҞøTŸf\OCGŲ—=O_éHŸg V˛īHąĶĨI|ą]íŨėg­]ę_JCn˜<žôtĩ ŗdļËXđš< Ļ-b펈Fr j}3øĐ-ĶųP"´'ËŲü$U8aHfŪ°€yéZ?gOŌötĪOķŠ˙Œ]ō>OJFē8ûŸį5'‘#JCc§oëH?āķÆ˛ĘÎb^IëVĄ¸1¨PƒĩN`'Žæ dqÜSę~ÖØûŊŋ­SšA3Øŧæ´<ˆņ͎õŖÉĶքLŇ^ŖųS‘60`ĒÁ­düŊĮō¤1&>īaüéü´Ķ4UīU"N@^õ¨Ņ'F@‰°?ՃųĐ?¨¤ė>ƒųŌčzŸZCÔū4Įåũh'ũM0ũi đ? ^˙4vü)¤ņū}i äū4ĮáũiSøĐ0'ųŌgĨ­%ôi3E&h+¨R %֒ƒIHĸŠJ;RPhÍŠ)(4†ƒE!€ō~´ ôúŠoņ­(?Ōļ@8QÛđ?ΐĶúĐO¤68žOãJ:¯ôĻ÷?ō>ŖųSđz~ƒ§áũiéøQŸ—đ?΁õzŸÆ€~oÄ*Bzū4ķ¨ūT8áGoĀŌĀú OĀŌ(vyüOōĨáMĪ?ôŖ?Ō™=áũiŨĪÔÔd˙/ëNî~ϐúŽ‘õ€üŖéũiä}EÂ>ŸÖ!ĮŠüh˙üŠƏ_ÃųS§§ā(<įņĻöüķĨŨ×ęi¨ėō>´ƒ ú ?ˆ}iAô ū§ú\ķø˙Ji?֌ķø˙J:ƒ?ŌŽĮņĻöü Āu>´QŲįņ Ÿ…4ŸÆŒķųPžŸĨĪųü)‡§āiI˙?…˙SÛč) ãüúŌgúPOŸķĨĐĪÍøš@y…üߍ'qøS{‡OgÂūŋōĻįÂ”žŋōĄÜRzūʛž?ëK˙ÖĻ˙áũitūC›Šüi¤˙:G<ŸÆšŌ.q‘×úUuôûĮŽß…'oÃúĶUÁv ž?ëRWQOŪ?SGuúåHzŸŠūTg‘õʙ=>Bü…!ī˙Ŗ?/áũi†Tå‡ņP‡Ôy<ū?Ō“Ķ𤠥Ī?Ԍôú A˙Ą˙=éOSõ4Ōx?ķ žOÔĶ˙0ëųŠooĀ:\ō>ĸšōΗAĀũķŖøÔŌŸŸķŖ?1úš}FĀGÔSsü‡ķĨ‘õÜņøįK ŋCAęiŋĐĐzū4üĪ#ëIÛōŖ¸úŠnx¤ü…=?ëH{ū4¨=˙`­%˙:Lô¤.Hi('ŠÔ=J '­ŠLŅ@ éA ŌR¤ĸƒ@ ëIJi(4™ĸŠL ą÷ŋøRŋ•ôü+TŗĮųõĨ?ãL˙ë˙:R{ũiŒ~y?įĩ/qõĐy˙>”ÉdĮŧö"™7ĐS2&68ΔLĀ`NķŽ^ōöG••X¤Š†;Ų‘ŗæL;1É?ō uüGōĒzmĪÚmVNäŸåVĮo¨ mXPūtŽá“Ķæ¤ĪįÖŗu˓)´õ$q@˜ëY"rģ‡\ĘĄ]mGR;vŦũ&ØŨMŊÉ#‘ÍkÜi‘ÉnĀ Ŗ   6×ąÜ¯ĘŲ8ūĩlžOÔ× ŌZ]íá[iŌjf+A2ķķJ悜ãę)ãđūĩ—ŖŪĩÎwv`)ēĩëZ˜ö˙"l͌į?.yüĢ;Jģ76ÛÛũĒĢ}Ēo-[ŒSfÎáĶ#§õĨ8É÷&šŠ./R?4¨ÚzÕŨ/Tå9Ã`šVSg8<žâšŽ¸ûÃüšČÕ5?ŗČcžĒqKy*îBģOŊGI¸sĪ­eŪękopPžĀÔV´ōE.>ééXWæCtŪoŪĀëíŽhÁUĩIÚR‡Š"˛t˙ĩyi´ƒ–jŪģ)Š(ĪŠ"„ —tÉŪe%ķ÷ŋĨ\,īp+3B—Ėŗ,ŋũ*…ö¨Ī'“9éSaš<}áŪžŸįŠædKĀKŋ#“ŒU#T2Î"œžôÄŋĖÚi@ÉĮĖ›sģ×ųÖ>Ŋrđ´[2ĩNÚk‹¤`đ   °<˙JržAúW"×Wˇ%]ÎW¨Ž‡í?ņ.ķŊ, -:&wƛöˆķ€ŨĪōŽ^KŲ.fqPMZ{iIYŲįD§##ڂxü?­Ah[ėëģŽKžĶúԂ˙"†ąyödubEf[MssÁõĢ^"UhUŗČcÅbÛŨ´UFA9Ē%l_°Ô¤(Đ+ĄÎToë\Ɲ{–ûҜÖĩž¤ˇ2yjGŌ(Ņ'“õ?ƌō>ŖųPOĖ~ŋŌ“9ũ(؆æ_*Ũ؞‹ũk˜’úvv!¸&ĩĩˍŦ`ōĀŠÎ˛´ZģœgÁîjhˇFhJšËū•ĸNčsLūMâ‚x<éæ"G÷Gķ¤?øs}b¤ŒŒÖ›&ĄšMsō׌šęøĢ—ö&8|Î2 06 ¸YĀ*GQLžé"‘œįY:įíĪĒē„’— NÜņK ŽkR>FGz™.ÖDiũ+ Â7ŨŠŋcųN ‚ ū”u&‚ũ%™P’E>ęå`@Ię?­sđą‚ųrq†Ģ:ŦŪkDĒ{RRŪín7zQÜß,•'Ĩe鲘.X?Ž*+ļ3ß6Ūrh Š`Ņ N*”ÚŠĄĀ4_ą‚Ā*õ VM´\—įë@3M50̓WŒĄĸ.Ŋ9Ŧ –0)Z Mƒę3GPԃ> â•/÷Ψ:ʡÎ¸ ękR==ceqÔ{ŌnoÄlUzНũĄ!ūüĒÂ2ÎÄķÍJˇ ˇi€5­ĻķĸŨõŠOZ­dWĘų}ęÎhRuw¤ ’Š(¤Í%´€)(4PĀ %)¤¤ĀŲ—üū´ĐxįŊáũk`žŋ/¯ãLĪ_Ɨšü•8u˙>•Ây°2zâž?—ō¤§áLVĐä.#d™Ã>cL IĀ×Qscį,ŧ˙õę8´¸’Ôu¤Đ$;E‰Ŗ˛ ÜĮųVŠžŸđb™×úRƒČú-zŽĪįÖąŧF–‡ļķ[āũķĒ畍ģˇ)ÜEz™ū‘pP‘ßŌļŲ‚Ą$ņ´:äãØ]+N:āU™ĩ†’œ‚WĨyķ_ɡģÖÖ¤Ĩt|7PÃųVu…“NâW#gšÛÕ 3X´i×#ųP3ŧ6ā;Šë¸QâŦļÅ]H9=~•Ÿ¨é˛E)’ Hāā “mš{pžQ*WÖĸąŗ– ´b<Š|7ĶŦ{ -Â⧲ši¯™*ķÉ c5‹'–2!¸ā Ļ’ÜŲÆ Āzú[˜ŽÎØŲ”Š­rĶOŅšĨ_,ķ•`āž+?^_œtU­ÂD˜LāŽÅ;\˛’YDąŠ'b€{š@Sb‡¸?Sņ/ú˜˙ß5RÍī!žYÚ1ßļjîš ˇņė\Äš˜ŨŸė×Į÷ĢÜ˙ÄÉ ˙ĪNkwC†HmY$\õŸĨȓyŒäîäŌčW[›ĶlŦ1†ŽWOČÔoŠĢŒ×ÍÍŖŋzą¤éĻ)VYĖ=钐Ī˙Ëŋûĩ'‡€06} ?\ĩ’ãÉ1ãåæŸĸÛŊŧL$Æp{ŌÜĖ×Đ.ĸØTVŊ°VŌ€oēTg5KY˛–æķzÆæŽĮe˜˛í­>ĸ_ ŽúiĖ’9#—Á6ÖrØĢK ä)uĮ4çË<û¤u÷ fΙqįÛ Ž•lžĶúÕkH’ŪŠ@wŠ‹Ž#§¯ŊK˙#ž×ĨszҜ…Š,mĄš°*Íĩ÷~5ŖŠYĮsķnPŲ<ÖdvRÂp“ÍWQ-Š^cCæD§ƒÁĢē_´š'oø´Õ!Œ’O9¤K†Bé6)ft$ķø˙JLāįéUā™D@;Ųū”˛ÍŒ€ã8 m÷öŠ1žņ”tSK 7qÆQÁÍLļųūcJO͚×ķ`ÄŊûQÔg/"=ŧƒw 9Ž’Ō:ÄōfĒjđ\Č>1Å:Åcļ‰Ķy ×ëH,d5#ūũnę|Øž}ĨPkH>ĐeŪsœÕû™až#c‚Ĩ0[Zü|ū55Į‘,ė _­IeŌ‡ö¨§ˇˇ’V“œžzŌč;¸ŖŒ:ö̚+He įmGöhP:ģo,.ŋŌŽ gjŅyWA‡B3QYŠžé3ČZŌģhnvîRqŠe°†Ũ‹*žE&4ĩ)ęQ˜nŲ—€i4ØĖˇ`ž@Ģ×-ÁË!=zŅnŅ[ļV<})õ.§–Ô…ŒV5šJ|Ā?Ú7Šx(HâŠĘ"sŸ(R1Ž pŸjŗhCYŗzŦ#ŒuŒ~Uaf›< ÎĶŋãũ>ώ\á3íYčB>õŒg>•1ēr>å čPk•.Á‡9ôĒķīōWœn9ōĮå@Rv `KĻFŅÃķ{ÕĶÖĢ[ČėÅJā`Ճ֒w¤ RPE”QëIE JSIŪ€ CAëE&#\ųīNõúZ`?(Ĩ'¯ĐÖÃO_Ɨ<ū?Ō›ÜũMįņū”Ä8úQž?üéđ? ;~ųĐŗÁü/|{ŸåL'¯ãN'æüOō /åGL} Ô~ƒ§ā? žãüęŧķÍėĒܒ?*˜žãJp[‘Ü˙*a˙Īw•Č,ƒĩcÜØĖœ´ķ]B…āvíHQY0@ûžžô„`ÛŨÍ ¨#ĨiĨÅÉ uĘŦ}ž<ž={TĀqŽãˇĩ0faYI‚‚Wų›‘’yįŊÍÁûß­]n‡ņ¤Ī#ëBÜų”žČø7§z>Æq÷ģzûÕĀxüķŖąúįGAĸĄŗ9ûŪŊé–zˇqW æ€yQüŠ‹ĄLYņ÷ģįHlÆ>÷­[ūôū´„ņųŌ˙€2¯ØÆO=˙Ĩc\uôĢyįņū”Âz~˙"ˇŲ×֗ėiĪ=ÍX'¯ãüč'æ?SGP˙‚Wûg¯Ĩ7ė‰ŽŊ‡ķĢ ôü)šãđΗA˙Ā!6ŠĪãڏ˛ĻOj™ņ¤'ŸĮúSę/ø$"Ö<ŽŊ¨û2cđūĩ(=? OÃúŌRmŖ‡ŪüĨ ?(úįIĀ#ę*šŒáw ā֐ŋā;ĄĨ=éMĪčhū/ĮúSø#ãōŖ<~tĖ˙!A=Cü_‰ūTČü*Ģ]Æ˛m,Ũũ*u9 }@ĻÅĐy<~ųŅžOųíL=?üé“ΰ€\āũ([ƒ&Ī?•&x?J‚ ”˜‡8ÅKžĶúŌüäõúšä}E4Ÿ›ņ4)éõÉčãđū´×ņĻįƒôū´šū´ŋāÔ\ķøåHO…Wšö(dÚíΝĩDu(1÷ģzĶb_ä]Ī÷j?‹ņĒąŪÅ+Ŧ;÷́ ƒŪŽ öûĀtAüčĪči đ>ƒųŅžŋCK úŽĪ?įԁÔ}E7<˙ŸJ†{¤ˇÆürE2zgÂŒ˙Z† –dܸÆ?­Hz~tŠ˙‚8žéM'øQžüŠŋā(č ü…=˙įA?9úšŽwŲˇ 5Ÿg¨ũĸč'ŽM> jĶđĻįÃúŅéøRgåü?­.ƒ˙€)<Ɠ?7ãũ) Æyõ¤ŨĪ^ūžÔƒ°ü(ÃúĐN})šg=ŠÔsŋįņʘ]r~aßŊ9GōĻ.‚ö…'j2äúS ŠũáK ú=˙ įüúSwõĸ éøRvü(GáIHl(īHzQۘiĸ€i !Ŗ4ցõ J &hĪ4QI@ĸ’‚ŠJ3@ŌįŠJ(ĸ’OūŊ.y˙>”ŪįüöĨ§×úV‡œ~聸wĻŽß…ŋüč;<ņ÷Ą_ĄīIĶõūt7FÍ@2î  bŖ’ôlj­1q{V}ķ3\Ũp*Ŋ ęJØë-§Y㠇 įŪĻ'Ā÷÷ŦM ˆŽÜVΝü ’Õ÷O'ņīíP_1[G ō1ßÚĨ=éP_se'Ņi’sđÍq,‹ÉÉ8bTŊ€ngČįĨVĶÎ/Ŗ˙zēy:°<įu 2,5S愛8=˙ Ú ƒž0Ŋë’ŧ_.éÔv5¯yvŅéčAd\. Ō_ÃÚÍÎzX¯á•ˆVOzÁ˛ˇ7Ō9įhÍöÍc?îÎ<é‰ųsŸNõËÅ#˙i(ÜqæZØŌnZâØīę¤ Ä^5?ûiũh{øŽĻGĄsĐn¨ūa†§j/Iû+ũųW?§Än.„dņLHÜūԃ;r3ĀëīVŌE‘7)ÕĪę6ŨVD錚ŗĄ\3ų‘ąÎ"ú”5eÔã"ļ[S†ã‚vŠÅÔŋãųũņWdĶAŗßüAØĶļŊŽä¤gŖÕvųqãwôŦM1Ų/Īb+W]'ėy˙h*k¸˜í$!Č{Š|ú”pČҜddUOą1ËūđŦíLŸˇËõĨĐosj]^$äyô§ŲęQܰ\āävĒvÚrÉj å‰ëŠĖŗ%/ãčøĄˆë3Įáũh'ú˙*bŸŨĨ)<ūʂŋāœöģ˙ ˙°*[=29íÖFÎHĪZ‹\˙Áūā­M+›˙wúŌbŽÆMõĢŲ>ä8BHÕũõĻ"'9`jMko؎ŧqYz.´̍ēwēļuEüŋÖĒbLũÖŠ¯n!Á?3ƒųÕ)î„ņąāsÎ)jŲßĨÉ Ÿ›¯_jĘÕnZY‚ōĶtcAŨ5c\E]Œ$ ]¯gy$1UfÕĒ×Mö6͏įŠĢ¤F­$dâ­ŪIáēd€)‡C8ßŨÄmK¨Áą(ôĶúGm¨™÷Ŧųsæ6x9¤#Ϗ`öŽÃĄVŽzĘCĀu<ÖĖG:R˙¸k+KP×ĘdsC‰%ŊšV†ŅZ:}⏌¯ņ(ūĩĢ}Œļ U-Ÿ=ũ1I‚ܡ¨I8›lC#šĨ$—‘ĪĀcPŊ 3*¸ĩZ_´ÉnZ@vĶbč[ĶīŒ’Û¯ē…é„ųkÔæŗ´ķū›ÖŽęv­$ģ͓ΆWíS ęÃŦØŧËr#äuĒ@\Û¯MĢVŦ.ËL‡'Ŋöųˇųqũ3UĖų~gš1ŒõĒĶįíūõ[[iŪ!†ųHõ é÷lešãĩĢCĘIkį#üúP†(ę? J?úԙ¤6ƒÖ˙逴””g§„¨4RP>Ąš)3š3@‚“<ŅE ô”Q@vĸ€4QIš@ĸŠN”§ü_ôĨGÔSz“õ vü+`;~Ÿį֛ž?ëJz~ųĐGįëGR}ÉūTĶÕŋ^˙ôŖ¨šŽže6<įbŗŌÆbØ(@õމy#>Ԁ tė? H¯§Úũš2NrWŸÎŽ˙đ.ÔĶÆSÔũOō wžéPŨķg'ûĸ¤ÎHü?•E1S BĀnQŒũhüœĩqÚ3t ]ÅüqĄ!äŽ•’tĖ|õīNo<Ü3KP)×W8Q’Æ´ĩX˜YEÂ¨ÍYĩļļ„Ģî]ĀŽjyL2ÅąpWúŅ`2´Y’7•]ą•❭Β0U9ÁÍ6m9ŒÉ8œ #Ķ×Ėįgšvč"Ƅˇ‘Õ…fˇ‘˙ޟ֎Ąh"jēÅg=ŒfäËįŧ['°Ö÷5/9ļoĮųV“*Å|ĨÎm]Oˇ`$¯ōŽzÚ5–pŽû=i‰ēÅÚ< ‘ļr0:B„'b¤TcOƒŠ¸éĪëZpIm{VEīHŖR˙ãøW@Nlí˜Ŧ˛kiî<Ã>3Šŧ.`ō<ŗ(áqO ‘‡eÅ˙įZúé͑˙x*ĢŊŦSų‚cžjŨäļˇQÚ\Aâ„&Vđųųfâ¨jŸō—ũę͞k[0Ûd'v*+˜ŦŽ&iKœœŌčWSFÄ˙Ŗ'ųí\úqНũt­¨¯-ĸ@ŽĘŠ„˛ w6āAĄ’u?(úwsø˙*ĨũĄēS¨ĀOV˙"˜˙ā™zßü}¯û•%žĨÂ6Š–åí.\<ŠÄ€E˛ČûļüŠE{ËŠ/jW9Ā­ "ĖÄ<ÖÎâGjŽ)-b9X›ōĢ#QAŒDŨ¨ę [ĀÉvÅĮņfŽ}ēŗíXÆH=ĒiĨ‚b [’qéLS įĮŋjbĻ˙ëô5w[FxՀāš"–(œ2[ßJ‘îĖ‹ĩ­ÉvĄeöTeÆr*ÆĸísgĀpNiû—ĩ¯éR‡+ŗėß.OŒë+ŋŗŠs“š¯<†YYđF}ĢT3öļŠwɏøö)th?äŖũƒXļŌ< NGĩkų×;HŒsLŨ>xsšlBâęk•ąŌ¯i–ÆgnŦŧRƒqÆ"^Ôī2ķ*ŠC3¯āuērOaNyî/Ë8ãĩ]cvŨBĐ×û=h$Ąc ‚î2Q€ĪqVožĐ—Æ ĻīÕE.Û9aHe)âTÚҜÔē}›ŦĸWcĩMä]ã•(‚ëūzãđ ]olYœČ€äöĒ藊0{ė÷s/éIöY˙įŠü¨RHn>Ņē^˜=ëO5Kė’į™\įōĄAsĶđ¤íGqøSrhOJ ņA94RQžh¤IFi(ĸŌ)()¤&Š;PEš@wĸ’€’Š)RzQš(GŊ'jAÍ.xü?­lúū4˙!=SõõūT§Š˙=ŠG_Ä*nyëūq@<Â˜ē OŒáëH Įųõ¤'å?CüétŖØõühĪ?ôĻ“Éü•(ëøåLBŠä~ öņÎŋeãŸzŸ‡z3Įā!˛ŗXC“×ŋz „9ã××Ú­ÉühüЈĒ,!ã9íŪ°Cˇđõ÷Ģ@đ? BxüķĨĐ}J˙`ƒ'ņīJ4ø3͏ūUg9?ŸōŖ<ū_ʎĸčVûzzwŖėc§­Yåüķ œgūA]J¯§ĀŲwū•Zdjā°pzUđy_é@< ūtĐ¯öđއųĶ•žNuôŠIųüéOŪ<÷ū”˙„YĀĘŖĩcƒ ééīSį8˙€Ķ„ũķŖ —ų›82v;öĨpvíR÷ü˙• =>ĸŽĸ{}–Ģ==éMŧ98AßĩIÛđū´×ņ ŽŖEŧ[ŗ°uŊŠžDX č*Oņʓˇå@ŋā ōcįä /”›žāëũ)ĮĄ˙QŸ˜}Ĩ˙`?ē;R˜ĐdmķĨĪ€ūt„õú]ˇ ‰ũŅր‹Įĩ.yüĨ ?ԟQtĒíč:R•^xé ųJO‰ūTĀQ03Đuū”˜_Aڗ?Ė*Lņø A˙0xûRœg ę{SOCøŌ“Éúša˙ĶĶĩŋOzNãđ ÷ö֗@[īøö péHŨ˙ÁõuØo“<Ĩō? Ođ4ÔZ=>ĸŽô˙* čéū4™ūŊ蠞ßZEuūyŖ<ūT‡­&z~Đ_JJ3Å%ę/­ãHhÍūĩ%ũjJE1Mé !ë@‡RQIé@RRëE”´”Q@¨ĸ6—ĩ€ J=( ’–’ÁĨĪZm)ëųÖÂퟯ—'üũ)3IžGÔPéøRzĨ íøQÛđū´ī_ķۃ˙ÅSIëøŌį“õ?ʘÎI˙=Š3Čú¯ō¤éFĨč(č>ƒųŌĮįIĐķŪ”˙ņT†;š?_å@ę?åMīø˙Jé˙Ļ.‚ƒōū_Ηą˙S;§õ§7ĢRQAųŋü¨Ī#ūMĪ#ëũ(öÅĐq8éũiIų›ęi‡~‡ųŌ“ķŠūT ržGÔRĮā? ā¨ }ßÃúŌø“ĮįKŸ›ņū”ßūʗĄüŋ•0˙‚ņųPzĮŊ'lû Î]¨īâüOjE=? ?ˆ}Ĩ =? ĐvxëÛúŅ˙×ĻgųįKžOãüŠ˙ĀāyüGō¤Ī…&xü¨Ī‡õŠø“Īâhx}i§ŋÔŌᑸUuĪ€ūtņ¤ū=ķŖ8ĪãSĐ}Eīøú{P•&yüĨ éųSb[ œÎƒũOōĻöüéOõ?ʀ˙‚ä~ƌãô¤˙ü¨?Ԑ˙ā NsøĐO?4÷üiOŪüiõü§áHO‡õ GáA<~֗Aõzū4gæõ¤?ãF~aõu@áIž?GaIžãA]EĪ4õģR´õ¨$(îNÔ˙"ē4õ¨īI˙Ö žA¤íFOķ }E&“Ŋ&s@ƒĶđ¤íKIڐØvĸŽÔw4gš éIEčŖ4”fÃ43A Ĩ¤4PEh¤IKÍ%”´”QE%^ĨĻŌŽMjHŖ­˙JLôŖĩ(âƒĐū?ΒƒŽÔwcøĐ>÷ãũ)3×üö GÔ*}EĐoĶđΐ`ũ)wqøZCô?ķ ã'ę•4žŋ¯ãũ)‰žŖųRgĀ:ō? Nßր˙€)<Ąūtėō~ϘO_Ɨ?7ãũ(ę1F2>ĸ}Ņô΀z}E ?/áũitâx?CF~oĮúSIāū4Ŋ˙üЇüAäĀhĶúĶAéøPOQõ¤1˙Åų˙*3ũ?•&yüOō¤§áUÔ]íøįA=Lņ˙ū´¤ō~Ϥ}EĪĖ>ŋԐŸ…Á÷ƚ: ūt1-‡g¯ĐŌ÷üĨ7ÛëFyüĨ0˙‚;?/åHO‡õ¤Ę“ąúįHđž§ęh‘õŌyĮš vü)‹  ä§õ¤=˙NÃéũh9įņ¤>ĸŒįžä*ãōŖŋåüŠŊÔ1-…Ī/_ĪúRzū4ãLđGgĘ›Ûđū´ũ(ė~ŸÖ¤oü…=˙QõĻž§ņŖŋãO¨…ôü)3ÁúZ@z}āũ)tQIÉŖŋâ)=Ŋčį?•čô žŋ  ô?8¤ĪOŠOūĩÔŋ¤Ī_ƐŤÍŸũjĐJ ™ }E u¤¤æ H:QFi 4´™Íë@ Å%Š™ĸŠC’Š3Í’‚h  R-%”´”fŒĐH(ĸ€. ZnisZ.hĪ”gŠ;=Byüé(ĪO­0¸ėķū})3Āü(‘øRü‡ķ¤į§ųīHOō4ŋ:S×ķĻ“×ņūTČúåIĪųúPO O“?/ā āŸZøŌîšüi‹ņʛÜū?ʀOōĻ.‚ƒĀü)Āüķ¤ô˙=č=ãK ú˙ë˙*ūŸĘ›Ÿ›ņ?ʀz~ÅĐ\ņøįJ{ū4Ū߇õĄ'ęiqŲųž§úRĀú A÷‡×úPč?2z ž?üé}~§Ŋ4ž1ėisĪãũ(ūâ“<§õ¤ųŠLüŋAũi˙!íÔū4Īãũ)¤ž~§Ŋôü;ĶüzĀ:SĐū4Î߀ūt¤õį֑B÷˙JøRgæĪŋô vü(' vü?­;ŋįüŠ™ãķĨīø˙J ę.Ĩ&x¤īųPyüŋ­!/ōžŋSGƐõ÷恜ū4ÃūŖˇáFHéũiéøR˙OëHc‰ū´˙Bzū4gŸĘŸQtĐ~ésĮáMā~gų‘õ>ũčĪ홪?ĖSbčŠøŅžŋãH}EīIŸéIŪŽß•ĩ'?ΎԇŋãABæ“4dæ“˙­Hž‚æ’ŠBx }GIšJNô^´vŖ4Š …ƒEyĸ“Ŋ踅Í% @Ruĸ€ĩ”f€Z;PO†€ŅHhõ aE´ž´č)<ŌPh¤˙Ųleptonica-1.86.0/prog/underline3.jpg000066400000000000000000000756531506303110300173150ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?¨šßSQŋSÅ1‘âRmģE#´đĸ—h  HÎŽGz ~ŅK´P1E?m.Ņ@ ÅÅ?m.Ņ@ ĨÅ?hŖmKOÚ(Û@ Å-?mi ƒ•úÔâšņîsFÉ?į¯é@Å.)›e˙žƒūųŖlŋķĐß4I‘pIčEE°ŒđIŠvËũõ˙živËũõ˙žhiqMÛ/÷“ōŖz§å@ŖßßąGīŋé!ÅĻūûŌ?ΌÍũÔü訪ÜĖ??īĒ7K˙<×ūú bŒSwK˙<‡ũõFų?į—ū=@ ´b &ų?į‘˙žŠwŋüņoĖQ`Ë\`Ž)Ĩ ēäz_1ģÄߘŖÍ?ķÉč° ĀUyÖ›Î˙ĻR~Uü͝˛ ˙ŗU z•ŧ„YLƒ;<}ßÄ:yũŋûæŒ07HūTÚZēĀHĪmâĻb•ŖWMŽšØâ øAa,i4eĄô¨ZÉ\Ąyœė9^KöDí$ŋ÷ÕdūZËųŌ'ŗV/ļRĒ˙xc­XUĄAāt¨Í¯ũ6—ķŖėÍ˙=äũ(° wū ãÔ:™zĨEöMÄ™˜qSāPh§Rb€Š\RâŠ@7SŠ(´bEŠJuÚLS¨ ŅN¤¤h§b’‰IN¤ š)ÔP) >’€IO4˜ sE8ŠJi¤4ėPh”Ō)ô†€$|TâĄÆ\TāqZˆ)hŦÛéĨķŠÂÄm8Ļ•ÂæĨĒö톎ÚQy„Ę Ú=¨å`OKY×wá<ŋ,œIĮj˛oaŽ%wcķtæŽV,RÔ0]ÅqŸ,œú‹R‘⡠bqšu°1EfŧwKoæũ¯ Î1V-î‡ØÖiÛžô8ŽåēZ­ ô>ÄcģÜbĒÉpëå. 2ŸN”r…Í:ZŠĘGh’Nũ3RÃu äˆß$v#š@š–ĄK˜¤.˛S¯ ÍüimæDŲ$ādQĘÆ\ĨĒö— `|Ž `Rg÷w|˙õĢaä§`ŽœŌ†“ ?ŗž÷_z.l…{f—ũ^:ö9d—SSo‚üÄT†YL~YĶÉOJ#–HŋÕéėšôĨqA*E%Б‚žĀ÷ĻŽ”Į¯ÍVËžį͘ˇ­*ĘËA§¸SÔQp-Y4mn› ôįEŪiõhQ\'š–)Ė ˆė$P})c¸1dĨ„ŠO'ļ+&’™b•B–°*;Oŗė¸ķļîÉÆjÃÎO1ŦeŪǐÆŸg#ääqL‰ūĘûģ¸Š. ą‡o™‘Ķ­-äĻ[a V’ĻĨĩŧE\ŲËŧ¸ DDI-ô€ųaą˙-:SÔŦ.$a*č‡,ķZÎÁ¤´›#¸Ĩ3ÚyIĩ”'ĻÚ.P _A„D ^ŋOo sjsųŠƚ­bĨH‚`TäTąŨÚE3JąĖúäRl ˇ‘4ĨU&R{V´´ŲíËÜãæëTĻ}>i •™XõĀÅX‚úĘ pû4=@‚U™õ‡Č#lu"›v—)uoö‰VO›Œ•0šąfãt›ČĮN)n.ln7y9SEÄWēŲ<ĶW•”s“€ĩ;6›‰8z™ÆœŌŗ‰ä]ŨTƒFÛŗyi`ģˇ)Ü–Ū3Š( ãnîz3\[dŽAĀ`ØÅ[—ė2L’-ŲFQŒÖšņYsë ŧzw.&¸6Öđģg8cšSoö}VĖĪĖsRĖļÛ¤Bä)OēŲäS"Šr“=øv_Z]]ԙ–ÂR¤ƒĮ"ŗe’f6ˆŗ:—$Đē’ÚâŨâ1ŽîųĒŪDíØ]Įû¯~´–ˆCŦZhyZE ĩ\ŊˆOjņ— ģĄ5^$‰/¤¸ûLd8Æ3S\ˆ.`hšdîĨ'ŊÆeąhV¯Ą;žYԗ—īö¯*9Z4QÕW$Ō›IĨXâšî&‰cÍK5›-ȞŌXÕą‚ņU ˆŖŋ™Ŧ%%ˆ‘F3Lû]ėqÁ3ĘŦ˛ÅZ6’ĩ„‘<Ęō9Ī'MšĘWĩˇY7FFîhĐbß]Oü’Įžy'đĒsŨĪwĨ–f_•°ĮjĖÖ3‹Ö–?-Ìeŋ†™Ÿ:éōĀvī-sօd!Ļú{[xc-æ1čX°ŋk‰^) 3/!—Ą¨ĘíÖ(ËĮÆĖõjÆ ÄŽķEyčĒĨk%äķD‹ä bz–< ¯kŠ;ųÂURcĘt4ē´ōM¤~j/TÎ*;[ˆįœų*×åūí$•€XuIädũŌcŒ)ÉĄ<Ļ+w“ēŽkŲÜ4ŠVÕĸ“w,§ ŠÚ’$ gæ\IŲ0[–öksngš•ˇŋCģTŒōŲi͙„ĒAéQ$0[›W•TåJt¤ƒN™ŦeR››r‚iú °qmæųōyØŨœņP\ŨI5Ĩģ 1l17ÛĻ[_'ėōyøŲ͊†âÕĸļļ×$ļXMyˆYŸėŌDĐ]´¤ļ –ÍhŨģ-”ޤĢmÎGjXėí҃¤*¸¤ŋč2˙ģQ{´2„+3ډųSŒāՋ[Ņö5Ãt8Ī­Rk}9&‰O˜ŧ‘ëKu žÆŒlTo˜(éUdĀŌ‚ö‚B1vaŠoöą“`“œã§FŲ"{ĸË<˛œĩT•Œ-ÖD ū­Æir šŽg?mōüÕŲˇ;qÍ=/-ŨÂ,ĘXöŦų0ڃīʃ8íUŖ"&ˆūîXÃ`c†ĄÅÍEŋGŧhAPCęjqqmĸT-éšÍE‹ûJmÁWåČĪjĒEĩ™RHÃ}ô848 LßÍ‘9PGqKŠČ ¤Í.)1@¤ĨÅ&(””ėRPh4ϐŠ4ŌqŌ(Įī ˜T89Š…j =*ŧw{ĜrĒÁčk?i;¯¸4z)|Čà ûԛ—Ü1õŦΜĮ1ˇžzTŠu”nR=ĩ1—ˇQųŌ†ŧũk,9lKĪîøĢVK”2Žs@‰ ÁYŠ8Ā!ŗÖ– ĖĒXŽÕĪ=jô “ëŠ[ļŪ0ŧ.yúRl0=ƙ4â(˂ŽŲĒ| œE÷vķŠhEql|ĮŊh¤›”ŒžŲĸGtǃÜÕ+>%"_žGJģ'úĻúPqO,‘īōĀZ–9I횯o˙Gčjļ7En āĩjnŪ.}ë0FžlãĀô ŗ˜ TõÉāŌO>ôš÷Íg`“/˜ˆ§  œSŦČIJcœdŲ€/Ō;„RÎpSLy|˛Įl˙tfœUd\2äƀ!ĩŊKĸūX8SŒžô뛡n˛–ŪqÅTĶ€[›Ŗ5.ŽE= Ō@)kHö÷s,Dā&@'5vKx'YXČī‚3֘”~ÎZ÷s°Ā㞕’Wû"ų¯†ûØ=išĮ ü¨Ú=åQāErpŖŠæąä¸™V9cy6ŗã,Ũ ÜÚŋŨ•'–ŸÜ_Ęŗ ˛Īw2y­8 qPĮw9ˇ §t‚ũčŗåĮŪ4üŠžL_ķÉ?īšŠi,‚ö[vręŧ‚zÕęg‘üņūų¤û4ķÆ?ûæĨĸũ–ßūxG˙|Đlíü°ōЍ  ˙bĩ˙ž ųR}‚Đ˙ËĢ4QqNhå‚ūt‡Mŗ˙žķ5nŠ.§ũ—g˙<SHtģ?ųæīŖW(ĸėe/ėĢOîˇũõGöM¯ũ4đ*ģE`QūɡėŌø'öT=¤˜ĀĒũų˜?˛ãí<˙÷ÕŲ‹Úęûę¯ŌRæb(˙fž×“ūtgH:^ÍW¨Ŗ™CėĪôŋ•bší|˙ˆĢÔQĖĀŖöKąŌøū+GŲ¯‡KŅ˙|UęJ9˜ŧ‹ņŌíü“ÉÔ?įâ3˙ĢÔQĖĀĸRōÚøPWQĮہ‡Ō¯RRæ`Q˙‰ˆãlĻâü)D=@īZ”sA ôyÛkõÚqL"ã~ķalį9­EC}Į™æߌd5Dģ•÷˙fáŗœƒZ”Qq™r>ųD§šqß4ĖB$ŪtųAÎx­j(æˆÁ‘[i\ö=ŠÔQRQE€ƒE†Ōž´†€ŌšJCHiM! aŒÍNBŨEL:VĀÁíC)>ÕJ9]Ŗgk­¤vĀ  ģnŨŖ”ĒŠŖ  j­msŊT9ųČĪÖ§YQœ 9aրå§MŖ¯¸` URŌŊĶ"ĘQG`)b’A+Å#d¯ úĐ’ũā֗h#=*ŒW25ĮÍÄLpĩ4rēŨ´NŲĘũ(ĀÂ¨ØRėM¸Ú1銪5ĖÛähÛ¤”čži§u튁ĐH ģp;FE.3ÅVļ–C#Å!Ë)ëëQ]\Íäh§÷Ä1@‚(\1éG”œ|ŖŽžÕJöęXä! dÕuN@Í-rNŅ“×Ū) í(6úT3ÎŅĪî ­œæ›=ÉYŅ#u ‚Oz@YFĒT õĄ"3ąįŌŠÛÍ,ąîkĨSé´Sä’qX`āã4 +qŗ /îķŌĄŠöGh ķį54ˇ;„ĨI&•Ā˜¨ ‚2Ē˙fZđ66ČēPˇ3ĖŦđĸl7ujk_3$F%]ÎpCv îí‹NJۖp[ņ§ZØ/ؖ)אsÁéR›‰ĸ™TL8ā­%Ĩņ¸Y7 VLņë@Ák Ė€înŦO&ĻÅCm9žämĪj—rƒ‚Ã?Zv(Å!`Ū Ā ’?:\QQ[ÍįÄ$یöÍDˇrH_ˡ,āŨhhŠ1PĮr’@e(ëžÔË{Ÿ…äE?/đž´ŗECÂIo၅ÆNj¨ÆU˜ŖŒ.ī(ĒŋnUž)ĮĨNō¤=dâ˜ĮRâĢ%Øu °LAčvՀr3‚>´ZJdĶ$ šĪS€SLŽæ9`ܯŒá† !“bŒTMqÎ -ûÂ2â!?[÷˜Î(&(Å0J†F@Ãrõ•ŪÛąIÔāqH ņIЉîāGØōÃĩkƒf˙0Î2hZ1Q%Ė26ԑIô§ŗĒā3O=čqÅĻ™8BĘŽyĨĨІŽŖŌ€ 1H[î°?JC*ˇzįĶ4ę &Fqži2=GįHÅŖ#=i3LQš)˜ ŌŌwĻb‚(ĸ Š1FyŖ4˜ ŅHM”Ļ’€„RšJB)Ĩ¤ ē­L#Š˜+`žéúU|´…•ábÜ˙ _'4ČfŽā1@ĖMĒČF9ÅOf‡ËŪÃæ~MG Üļ0Z|Sīʤtã­D[Ëŧv*ä95‚G2J¨ĀŋĘž¸õ­is@ÍÖÜm‘ÉN@Ĩ¸yQΈL€`¯zŋGã@ ,q´—b BŪMĖ…Ņđq‚5ĄFhĨ˛3M$ĖĨCôĻÜBŌ\ˇĘqŗ¯Ŋ^Ŗ4€ÉXæx‹ÉŪ?*ĶFíį#¯&h  —Qų—0å7(ÎxĻ\ĀĢsŽ0>S’^Ĩ  ËOŗ¤8–#ŋžPԓ"MsĀá<ŒV†ižj yų‡QH Hkv↓xųķøS\Āņą’&ŠqũĐrMifŠĘy]„PLYF2Į}Š÷o ˜ųŖSĪ´č  hlÁĘ`68ëUãˆũŒČ€īLņę+Sđũ(  X#›a"œ`ätĢÛĸŨ ŒšëšŌü(āö  ŗĨŧ Ä̧cŪĢ¤Û $Ąi úV´Ŧ‘Ą’AÂõ8ϤŠ$~f_ö†(‹+CzŋiręW÷l{Ž$"ĖĪ9Läⴞh@Ø;ĪËÆj@ā )é‡ušZŖxņ˛ĖĘĒ`2ĮæĪĩma@ĐTr,*ĻI0I"€2Ö%‘Ž™ōHQŽzqD[@ˇ,vycnMjDĐʛã UģÖœŅDĀH2:P],ąĻĶĀÎ),YWĪ,ĀaĪz¸Ē¨ģUB@)†Ú$˜“׊ËÜæ.1“4„œqS'™o|ģã¤ŖķWņ Ģŧ8č)ĪIę#=e;2Y/W—ũĶ͈I”v„V™†3  .8 ÜPđE!bč aƒî(­Æ—ƒÜ>ĩ$€=ÁëåœĶÖÎŨH">9S9#šĖ–]˙iečJ†öõĢĶíK5FøBäāã,vÆō0_õŋx”Ãc@†IL}vÅV€Ę÷’˜0@û˙J}īš ŒČŠO˜8Nõ?ؔJdŽI#$t\b•­w…Lîˇ âKũĻö$š.Nî˙J–ũ3ŋt`Õ4ļë,ąÉ¸Ģ§qßڟ$bH™F Fc×ī¨W۟n”Ģ ŽŪ{’pdl)ũ[[4[3nā˙zEŗP°ŽōV.qŽĻ˜Ęļ 7JI¸:îĪŋzC“­Äƒ1ũęō~ĩz{q6ÝĨroJˆZJ‘´IqˆĪbš }inVû1#L6sІVf–RČPųĢÁ5Ą¨†bęŲ@ĮŌŖ’ĖŧŽÛĀÜÁēzP[BŅO+’J;úH‰’8aÜBšbyäŒÕÄ´Û¨ĖōH#ĩF–-¨yą’Cv 1ۋ€‰.܍Ŧ™<Ķb‚?ĩĖ튂ãÅL`šIŖyYN;š|p•¸–F Ģ㊭ MqJŌ8vû¸8ĄiĻs#–¸ĢKÄ*ņÅ´Ąû¤ŸģIĄŽH°rĒIī@ ’ŧ 6Sh UœUX-¤ŠîG8ōÎ6Ôí3‡;˛=â€"ŧ"yFBŖ€:T/#Āa-+˛ŋQŠŗrĨíŨeˆâĸx™¤ˇ8ČNžÔīĩDcߓŒãį?J|r$ĢšERky8|8ÚäázāՋTØŦv¸ÜŲųĪ& ö˜ íķėã§z>ŅÍûÁōũīj¤¤˛ËÆK>ö=é|ĻĖJœ‰2F:Š`\ķĸ)ŧHģG|ŅæÆWp‘vú抰W2ČU•20v÷õÅE+f0YA_0r  čWpu*;įŠMĘFāˡ×5Ÿ ,ĖŅ"Ü3‘ÅzĀÄ_æ 0 4ˆÁЇJ‰ģ}jq[Öû§éYhǰŽũūĩ­Q h€h<ŗî'ũ`Ĩät$~÷ĩhųāsøŌųpuĪã@įæY¤w!ÔņĪJLĶH\ˇ8Íh5ŧ,ۚ0O­8GIrx4 ‘&ŲI95J@ÚIØHÖĩj€ė*œÖ˛JXŖäũüĐJ'šämQˇšbË$Hą>`Āú֏ŲĸpģĐ1'•/OjËTŧˆTļŅÁ/ŒS‘^K˜Ä­œGœ)â´^Ū).€ŸZQ aö  ĩŒ‹7{nķ89íšvÂæåŲÛ+Ķž•ĨäÃˇaUۜã=éD1a€A†ëīH čÕĸh3`s“Ö›™ã…!÷}âü~UŠäĮōüƒåéíMû,÷ųcwZĖ*ė—4šO=*[Tų˜“ģh=j˙ŲâÚ˰až÷Ŋf‡Ė° A¨d¤jŦW.ÁĒīæ5ÃÆØ*¸|V“Ä’cx"›%´RÎš> âvÜ:Įŧ–ã•WÁúĶ|ŌR8•ä› Xō=ĒûZÂĀ:`⏲Ãåų{>\į­U¸S'dĖ~aßĨ$ķÉÎU‰Äy­ Hl›2ŽMŲÁU9#'ŨVcēc!ŽhÂģ¸9ȨūÃ/–ņīMĨ÷Ū›¨Ļö…c`$c´úæķĄmÚj†+ƔŠ„ã!š…ZDG@*‘´•ĨF+á˛]O&Įā|ŖåÛŋ?Ō†žPXˆËF‡ ųéQ.žQˆFĀļwąįō¤:yWp!Ãļw1éøPßQEi1•ī04ôžF$:4cnāOqQ›9<Ģ…s!ųy§Mfōŋ`ž^ÜįŊˇ¨O΍# ˇqP›ŗ-Ô*‹"#däôjjØŗ.Ƅ! FōäūBŸW>lãP‘ ĪZIupđË *–pp)^ō$ŠqÁ p)n㑤…ã]Û‘íUä†lMĮ‘+gvzPš%HÕYŗ‚p*7ģ…Š,HėiōÃæ[Ī\qõĒb+˜âBUˇ3û:ŠœŪÛė X€NĮ9§}Ē/~ü(8äsŸĨgė’&ž&$ĘH É"Ĩ1HŌ}ŖĘ`ģķŗâ€-ũŽ›Ė˜\ã§zh¸‹æc.W=6ž*ą‰äHb!Z\āŽØĨg’˜ŦlKļ8÷  +seŊOĨ>9A˜Ø0öĒRF Ēų[˛ŦÉ^MKhŋŧ‘÷3nĮ%vŠ%–â9‘WË!ÉÆAâˆî •ã˜ĸ•āã4ëū“o×ŊV¸ˆ3]1\ž0q@ŅR0ÁHë“Í;rôÜ3õŦų'ž­X q׊T‰Īgųx8éÅ_ÜBãUä+4Â#ülЍHás´eŖfyë@đehŲ ãŽE4_¨uY"xà ‚j%ĩhâžÜ[&Ą6SÉ"f2 ‹æ’\^™ˆęŦ˙{ąŠÍō)?#”‡AUÄ{!„Ä6Ŗdļ{R 'Bčbg Ų~-ĨâŊÁ…ÉOjŗš§mÃ4ŽS qŒŗ ų¨=3āžQŠHŽäÄIÄS~Ķ#jw°„)ā{S崜¤Ė‹‡ķ7'Ŋ'Øæ Ÿ/>Y õ¤"DŊ&æ8‘]ŖdÎHæĻûl[Č änÛģfĢEoîCk!¸mΜįڒÆōO*Y.Ÿ 6ĨFöˇČ‡ ÉíŠsZMķ°BBËŧī Y–ųņįpāæ…[ĩōØIædüęxĀöĻĘęQ B0Tˇ4帝ŧĩH1?9aĀ ‘¯ G(Îr8Õ&)G„"%EcÆqM†!a:ãŊMŠB(n1SÅBũĒQŌˇIÚ¤ž€Uvēuļ V8nĩ4ŋęÛéYW0ŧ‚2%ī÷ģUK4㙙ö:€ØĪŅåŨĐŽ š¯lģgÆũø^M-Ķ}žo;ŗ ­ÔdËpĪ#*¨Âœn&¤–aE¸Č3TŲ ZĄ=Y¨›Ëhæ3Ÿœ3EŽ+ši *āgÔ͎ÎGįY3J+ŗĮĒ9…f`ŅķĪj9BæĻáŒäc×4’9HŲ€É8õĒvĄ˜81†ųsŌŽ`Įj–ŦÆ@÷{m„Ą2Įĸ敎ŠÁ2\ŒÕX—uĪ‘Î“D@ĩЄį÷y5VBšv ‘2’@Sœc4é'Ō`/lk4Bĸ $ĮÍŋƒøŅ2†ķˇ á‡Z,‚æĄØę7`ƒĶ4đGjːfhĀT1íãqĀĢ6!–" ãĒZhĻ2Jéˇ3DSųŽęF6UXĄ]ĖKēķü']‹*†mžg$žqNÁs[p<‚?:2=k*PĒd—fN Iæ+ËWūœ”šBæŽáę?:\QYJĢĄ 9ŨÃ+søŠiūi`ĄÃpĖØ"ŽQÜ֑öF͌āfĢ}ŽO+Íh>Nä6M=ķöFÉįmB’"éü°åqŒĐè`x=)dIī7JË '˜‘ē†]œØĄcũüq€wQʅs^ĸšs –dʏCÖŗŽÚ6ķ™%p7Æĩ5Ũ™eÉ'…īBˆ\×SšAėiFŠĖ•įb|ÅĮ@Ø+W`uû:žNÜg&ĨĄ‰-äpΐ°9nū•c5•ļk„šAíĮ*ÛŊ)ņ\&€“”‚3۟-ö —ŪUBĄŽ  ~k…•ã,ď4€wTŌ īp^FSü b‡\Ōf–=ÍVšˆČ-äØ;ņN‰™­7RœÕXaéė~ĐTm<`RH.hG"ʁĶîžE åOŨ$uČíYĄ•ã…2û‚įbœ~53HË.Äa‡&šˆ\ՊQ4bEĻiųŦ¨ Ha„Čț7pq“N†i °)‘–ĪZ\ĄsI¤TÆæÆxô’H#ŗ…5“.e‘wHØ0kBčbÎAūÁ¤ãfíŅí ŅĘ˙^*T$‘‘IܸÍUUššÍ"ÛĢ“œœT|C%Īī cpëŌ“ šY4V;Ī4fEY%ģČßÔą •."V•œ:dƒëIÆÁrūi˛Ęą&÷8\ĶĒĨˇc*ĖĢÉĀĪ5  -Q‰ä6ėˆ ˛s×åy ČذÆŒ@3ITÖgEr]‰ Ž1A’XJ–rᔜcĨ[8Į?ʐëœqî*„ō.AÆ)†i H|Ũ¤Œœ.I  yíPÜDĶFQ\ oŧqÔUDi&–23Û­<ÜČYŠ–áą´/õ  bÂ.(yáRUsÜUYžYĄ‘ƒ€ÛŠ|NË<¸‰Ÿ‘Ķé@‹*cpv:)p@}TũôjĄ@F‘ŽAįráØû‡Ûց—3EUyä É;nh–iņ•QŽ Í-RR)$ëKHaIKI@hĸŠJ Š;ͤĨīIHŌQI@ĸ’€ƒE% č>ĩ0č*īTËŌē:˜aˆœ˜ÔĶęĨÍđČ<`rÔÖ ZHÕ>ęô¨ŪŊ/čVœ&\)'īt¨î.Ō$rAÁYˆq‚B3gėŠkZ–9ir}ÔSÍĖjĒXãwAŠ‘$Yå9FBÖŦĀ›8˙dR›feÚfãĶh¨ÖņViFû§Ž*gšŠĪ'?ŋë×äÕtē”´`°Ã1Šąö¸Cí/ĪNœQfm] 0õų"Ų˛œŦ d—W‘ÄŒ|āvŠárņ+ɝĐČEŖ+n€}v V´fmÆU-ë°Sîf1E•bpGļė"¸9î¸ÅˆÃ1} cĶ`¨Å‘"DũÁCK,“ųQ›~ķiĻâXšHä °\Ģc­`HöŌIōĢcĻRÚ9…éōtϏû/įŒœĢ0Čd‰\ņ‘šÆ@l‹–ŒŸt§}•ųũâsūÅ<]Â_h~sŽ”­u žÖ|ZY윺ÆOû”˙&}ģ|Ôیce>K˜c`đzÔi˙IÛ¸y{7fBã–Ņpŗ ļʉŦŲē´gœũʛíPí _ƒĶŽ´øæŽQ”lŠ5ˇØ˜ LÅ´ŗŊ+Ú;ļXÄOû•$S3ŨKÆÕÆ)"œ´ŗÆÔSHļn˜Ú Î>SM’ũŒšÛæîێŲÍ\S„°8ÉĄŨ…V´‘•TˆpŊ845œŒŠ„Cĩz`*ÂO‡ 8慸…ÉT‘IĨ¨žÄū^ͰíÎ{õŠLW Œų%HÆ9§­ÔÁVU$ôĻâ û ‹ģŌ@b­Ę(Qä€:u¨žÚY7îHNüg“Vx‘ļ4ŠŌ‡ž(Û"ƒčM-@ŠöˑÖ52Ã/šŽËĘ1Á=*Wž$ÆédddŅæā+ĻÎ;š5„”čQ™—‚Į$Ō,Ņ3˛)#°4 ác…• =ĨfāGbĮ9>†o >cģŠ'š_:-Û|ÅŨéš}!‘-ŧj[%˜‘˜æ‘mŖCœŗc“œQq$ąŠt@õĻåM†@€9ÆAé@[dSĖ}< iĩåÁuÚ05(u+ģp#×l{Q˛^Ē2Oĩ[û4^˙}QkŖßFŸ0XĄrb<Ŗ ę)č†FBUFĮJģöXŊūú4}–ŲŋīŖK˜,Rdr Ą_3!qÎ(“tĻfXÛČëW~ËŖßF—ėązûčŅĖnwD§{§'ČĖ"+û¸Č5kė°˙t˙ßF—ė°ãîŸûčŌ¸Đŧwå $dqÁĒíæHbȐrFÜZe‡û§ūú4ŋe‡ŅŋīŖO˜,QŽ'Ėci1¤XX!‰Ú\į ~u{ė°úûčŌ‹X}ũôisŠ$4MDÎ[î3W uTŽ6áˆéGŲaô?÷ŅŖė‡?ī¸äM$@§ŪS=j´î%ŒŽA7Lr1V~ËĄ˙ž/ŲaôoûčŌ¸ŅÚmėĨ•Į$rAĄÕîIBĄpšęjĮŲaôoûčŅöH}ūú4s ŠŪĘ#īVĪpZ­ípéQ}’F˙že‡ŅŋīŖJāSĢ*ÂīrŒŧƚbe2Į+H76p̜ū5{ė°ú7ũôi~ËŖßFŸ0Š&&ŠgŪî€Æ4Ķfī"Ē—'īõĢ˙e‡ũ¯ûėŌũ–/F˙žáb̞ÉLČņēœeW8ŠŦˇ˛ļáÆx8ÆjO˛Åūßũôhû$_í˙ßF•Ā„ŸŗŪ;:Ž jģ ]$ØŦžsātĩ{ėąˇ˙}>Ëû÷ŲŖ˜,VšÚXV)D…üŽ6íĮÉcs|ĒųrÄÕΞÅūßũöi~Ëû÷ŲŖ˜,Sx[û@G´ųdīĪn•nî7{I:ãķĨû,~¯˙}š>ËĢ˙ßf—0÷G,%"ˆīōņ¸ĮĩB“ČX†E;øÅ]û$Ū“ūû4}–?īI˙}š|ÁbŠAļÚÛAßĪûsJŅÍiw˙w¯Ŋ[û,Ū“ūûŖėą˙~Oûî—0XĪ’6:HûKļ@Ų’|Ēą3ĮyQ•tÎęģöTūüŋ÷ŨdOīË˙}ŅĖ)ĘJģ~íĖ|‚š›ļGeÄ{XÂpĢßeOųé/ũõGŲSūzK˙}QĖ(.ÖōV$;ĐütãŊĀ R‚_ž*øĩA˙-%˙ž¨û*˙ĪIīĒ9‚Å "8Xđų¸ËķÆĩ¨~ČŊ|Éīǘ –î4Et?Ņžĸ‹u##uZ ŌŸ"$Q'9éRÚ¯īƒŠ(ĀĢ\zQĀč1@\<ˇ?ģ+ˆÆ>aŪĸÚUX ‚ŠBęˆÚË(;Bņķ'CIü2Nßŧ•Đ}1I€:>‚‹@ã'ėø˙WÎ)ãČōNĖoÚzZļ ŖjŽŠáEĀĄ!BĒĨW!:šãđĻĀĖF8Ũåđ}ë@ĒžĒ§ę(*šÎÔŸ”æ0ų9Á94(Œų'?ŊŨĪ­_  ä(ĪŽ)6.wm\ú⋁Ø%#āī4Ļ'ûōIģh8Æ*rę¤4CfØĸĀqËdã4ĄILLnásÁöÍ]*Ĩv•zbšcBģJ ž˜  €‹hųpßtˇņŠmņ´€ÁéœÔÆ4Ûˇ`ÛéŠnj({PIŠZ !˜Ĩ¤Í Rb–ô ĸŒŌP?ŨŠW ¨ŽûĻĻ_ģ[ˆZŠbFrē“ŽjŨSILLøÚrs֐˜čæ1Š –!°=é&ēamBFj6HĖ`—RÛ˛Fh"3ãb“Ķœæj:FĪr0š"¤2´îĪËŗ4Õu2+ŗ(pFi…PÎįÍ]…p)8ē<ēõĨûX>Sķū•^!˛ƒŗåū"sHU7HD‹á 5,›žpŠ“œjh¤i܅HNJȰ*nG=ķN‚Eˆ1,ŧž=( IäœŦ›=팞hk‚.ŨĄyUeķ#e$ŽA¤y2RO1 ¯Qڀԑ¯6ĻLgvíģsGÚßqO'æ'šƒål3Hģ‹î5.øüŲĖeĀāŌ KQIæ qÆiāQPZãČ 8ôŠŅ‹*āžôĘE[­ŋl@ęÎ6ôįdŽhŖd$ãštŒ‰v˜ RÍ4ÆTÉúDŒxAæ);Ôg9ëMšC$ęya‚3HĶO)B÷`H§…ß ãËQ€0h9Ŗuhv1ŨÔķÖĨiCOg)ÍFŒĸD- !="7[Ö_ŒƒHV'˜Á)ō1Ā9 Ū€ĒvąÁéUã!Qō`îÁÍ ąda'ĘGĘ0zĐ–Mæ<’p9âφV“;ŖØGžj’2%ēĻåsœœƒÍMg´3a‡'îŒāP5rŪG¨ĪÖĒßãd{Žw<Ôæ™÷”Ŋj+Ŋ¤G¸†Ī"†6BD_h‹ėĮ‘÷°{TĻķ>_îÁÆė˙JŽGˆL˛ÄāŒ6žEDĢąB gq‘:–ūÔ6ĘÛOî˙ZŽ+‰Z鲸nzô¨\€eēí“Ô)ĘȲ“ŧmeÚx9 5&[Ėí-ŽÍ ž%ü“´zš‚!R ~öMHމnČKœ8 5,Å3ČÄ4{x뜃Rä{~uNĶoœÄš šÅZhcv č ôˆo˙ãßęÃĨ2xÄ9"ĘüĀžĩ%î>Ī€@9ÍBĶ ™ŦNJs€ ɤ&Ho0Iōķ8-žõwR=Ũ DZGũ=(7€dųg`8-ž”Ųe‰Ž#0aAĪĢ•„3ą•›;Ž•Šiî–ÛeOŧŲéRJŲļvSü9¨ēÃæ9]ŒšĪ…ZyĄ6í¸ŽĢ•ŋr-Ŧ§ÎĀĀ I&Ŧ-ÖŖ(rƒ,Ũ…Él‘(%7×mF^’rŌ$ÄĢv  aIëDw[đ|Ļ Ũ­V‡ĘF\ėG ÉÍĘ&Vܑœ•'ŸÂ€Ô˛ˇ[ČÄM´œŠë<2Š ‰ķd˛“ĪáZ ´S””´Ph4´””RŌPQKI@ HiԔ””ęC@ IKI@ Š)i(¤4ęJ@%%)¤ 4”ęJ@5ūíJŸtTo÷jDûĸē:“j˙t~TĩRâåãf Wå1“@›,-H gĨ(1’Tm$uFYLĸŨČäĩ>×ū?&¤+–ŨĸA—ÚŋZ Äq*ÖĢÜDÆt}…Ô bŠnĖ[XCüĢHąĒ˛DĘYYHM $/Ŧ§k4BŌyĒ8|‚TtŠ#ĪÛQLeA\ë@\ŧŗBí…e'ÚĨĀô•Qš5Šî2Wjô\w5bęV†Ũ1¸tÍr` üŠp=åTĖÉ$AØq’Ļ é3ŠčØØĩsKĐ~T¸ƒōĒ w$rØ W*1ŪŖ[ŲĖaN<ŌØéڕØĶâ–ŗEÕĀ›°AĮ+Ö¯Hûa/¸:šcš'‚ŒAųVjŪN&I,ß§G5Äūīv„ČŽ.bķÉ`*2qŌž0G~U$v‘ą`ŲâifšiÚ8œ Qé֋…ËM,já€Į Å?AųV|û–öäœSög ęIÃc`^Ô ˜ÔĀô•ƒōŦéŽn^žTxÎvæ¯FÅâ bG_Z{’`zƊŖųi„n€dãZŧ(wQE-'ā?*? \QHü/ā?*1K@ GåųRâŠJ)h¤Qų~T¸ĸ€ōŖđ¸ĸ‰ų~T~ōĨĸ øʎ=åKŠ(Đ~Tqč?*Z1LĀôŸ—åNÅ%!‰Į ü¨Āô•-œzʓĐ~Tę1@ Āô•¸Ŗ””´Pf’—R %-””´†€ƒKIŠ`%%:“””ėRPRRâ“””´P´”¸æŠ@6’ŠJJJZ1HšųMJ‡åārĸ¤Oē+ CķT%ˆ—“nđ¯ËWņEf•ōFģdų~īZ’!˛g“d‡wlUĘZV %y‚‚TĮˇZŒÂ A|Š7ØīWųĨĸÁb‚ÆËŊļĖ]ŋ‹¨Œ™ŌVb1œtĢÔ´Š7Ū­"Ęûz*YËMC €ĩK@Xĸb,ҟ*O{sH!u$"JĒĮ$ UüQH,R¸„Ît2 Ŋō9¤û?ú@›É“ tČĢøĸ‹Œ÷äl´r•ÎväU‰7Ɍ۞Ō=EYÅ ,g WیRSŗ $TąFņoÄwõÉvŠ,3žĘåäÚ@ȧ<ŌoX¤BFÖֆ(Å+‘GČs"9…ÉQŧ)>ÎāąČĒNJ†ĢøĨÅ %ˇ’Ru"‚0@qƒS)•#ļä1÷ĒČb€ąF+fŽ@ūC=XUáKF(ĸŒRĐš(ĸQ@ E&)iQF(ÅQŠ(QEQE€3Eb€ J( aFhÅ 4QI@hŖPQKIŠ)3KIH4QI@¤&–“f’ŒQŠ`%ҊC@hÍ”f“4´„PšLŅE!¤ĨÅ%¤&‚(īHŖ4Q@ šLŌŌRsōš|gå}ĶOîŠč&hÍ%€4´”RšĨÍ6–‹š\Ķihii´´´f’ŠvhÍ%---6– š)( QIÍvhÍ%šĨĻŌŌhÍ%ę)( Í¤ĸÍ&i( fŒŌQHĸ’Šu%%´RQ@Åĸ’Š@-ĻîāO֊`;4”SK 8. úf‹0E! ’õĻųąã>bcëE˜ĮæŠ`‘á]Iö4ę@.i)( Í%”€ZLŅE†ŠJZLŅHi€š¤ĸ’€ )( QšJ ķIE%-&h¤ĻšLĐzRRsIA¤ühÍ!4f’€“4RRciņũŅL%€ÎętG(+ D”‡•UīŖIš'p3“Mjm.™–V™¸CSũŽ”ŋČzÍļËŲÜ0qPŧÉũ˜‰¸nĪJģ&#b[ČaUiēS ü&Ũäŗˇļ*…ĐB!o3dxČâ›g!ũüeQŽŪ]{ŌI{NŊûJĮ/ŸJ—P ļ%đĩSH’?$ #~zwĻęLķ^E8,ŧķGÚm6æWwŠvˊžMJŪ) nÍšz€+=žŅm}ŗėøųiŅmZR@?/z,ˇJ ¸nŧmĀëžÕöĨļíģ›Ž7cŠĪK[ŨĸsڐÜ@4ŋ'oīzmĮ9ĸČ Wú•qFNέÖ™. cŋRĖūQwāÃöF—€:ԅŌ]]pĀ­=,#JŪú…b„Ŋwv¨˙ĩm÷cŒãv8Ē …ĻģDęEUaōK,Û÷cËZVC7.5mŨQƒ1a‘´TņĖ%„¸V\Ž3Ö˛Yę6ãžŊkŸ¸ßJ—ea6QMvdfģ•pØžŌy`ē{iܰQÆĢiˇ[yĸV –ãŠtn÷7rŨF‡bŽ#­SķÛjĐŠ˙W!\ãv8Š–ú6¸Xv°,2 čky Đėæ@~č¯]ŠKHncûČ(˛ šIx˛]4 ¤•ęŨŠ×WKl ˛ŗp{ÕM!’Ķ?ېæ›ĢM,mRV3÷˜ š‹+*j‹ ‘DNŽŖ;MC¤]É9q"ą9ûĮ Ē– ‹é6‰6˛đ_ŠĢ:Lž[ĬŨžœU;[A ¨ŨËü(¨åaüU^I¨X¤•û€Ôڙ1Ū[Ëą™WŽŅL…ŒšģH‚•ęE;ĢrßRŠhFR›>đ5jĘYwBʎpš§ŧ“EvФŲu¨ †&ōŖû4­ <’HĻŅŊ4ĸ8OAšĖļĩ7›‹™ŸsũĐ­"ķ-Ú/UÅeŖ4[Ģyō”i-€Ŋh­ilÆâpęŧƒž‚ĄąÚ$6î!'ę­­”ōZÜ…7ũĀÆ‡’y,VĖ[8|āļ8ŖA"ũMÚÃŗ ˕lõĻ˙i(yˇ'îâęŲëUīmdŽÖ'‰KIaÔŌ%ŒĨēāų¯ķh÷FKŦKĮæCąā6ėŌļĨ!ģkxm÷‘ß5FÚßsDŸa`ĀüĖŲÅ\´…ĶU™ĖlPėˆÚŦŪ|‘%ļæ¯54zœfČÜē•Į}ę xe÷Lc`­Đã­C”ōé­ÂŽp Ūte•ÔåSžØ¤rt`h}Foļĩŧ0#œ“UäûUōÃ[´j„cS[[Ț´’;6ā5XCÖ6˛ûEܸ;šÚ;S-õ9Ĩ–5hk÷SœUë•vļuUŽ:7CXąZ\ˆÚ+wˇeŽ~_ʒi­FkßĖĐYÉ"ũā8ĒvÚd2Úo”ŗK ÎüôĢ×0}ĸŲâ)/ííĖgŪ˸Ą˙?Q˙ß5~Š\Ė ?gÔ?įí?īš>Ë˙?k˙|ÕėŅG3 ~Ë}˙?ƒūųŖė—ßķú?īšŊKš9˜XĄöKßųũ˙Įhûįü˙ûæ¯ŅK™…Šbģ˙Ÿæ˙žhû×ü˙7ũķWčÍĖv(}†ä˙Ëķ˙ß4}‚įūäüĒũs0ąCû>ãūåüŠ?ŗį˙ŸųkBŠ9˜XĪūΛūæŖû:_ųūš¯æŠ9˜XĄũ›'ü˙OųŅũš˙ķû?įWčŖ™ŒĄũ˜ßķų?įGöaīy?ũõWķIš\Ė,QūĖ˙§š˙īĒąol BĸG~ząÍMš3EîbŒQš3HÅ´” LQFh4J1Fi3@(ÅPRb—4”HhÍ””š¤&€IŠ\Ōf€’—4”LR撀Š)3HŒQži3@É :!…ĶéŊn!jœÛäģP̐ŖŊ]ĸ€3”:Ŧņ˛õäbˆūĘĄųŊ°+J—€(Æ­ÛÜ šŗžfp¤Ü÷ŠxĨ  —^æ?”‘ƒš¯ųķŠ•Ā5§Å-!‘ÄÅcFķ SĐ øĶρūŅąT˜ßšŅĨ fl09™ƒĄŲÂûŌÁ‹2ˆÕ•?‹p­ZÄ„~ė¨>✡‚üÄíNĨ  ?ĩZM§a_ŊRęŧļnˆģ˜ôj–Œ§ĩ™Ĩˇ!8UÃJė— –ëwļCv­šZÉûĐ\,ІAŗąēkpĻ,7™ģí[”gŪ€€„ĐVDöWR,ĄŖķĘÅē ÚČõdzÎ-o$Ã'˸. “P[ÛÉv“ô ŋ#Ōļd‚ˆ2 b:XâŠځPzP(­g{´šPQp=kCšÔd¤PE—ČĮŽh­Đƒô¤ŅIšsŒŒúf†eA–`Š4´R+ŖũÖ ô¤2ÆiuŨéš}fŠ(χRÅC èĄeËu;zãĩE1f‰ūëƒôĨ2 pĨ€cĐzŌÔRĶDrB°%Nĩ:Š3EQE!…%ÁŗpɤG eåOJZ)h ĸŠ((ĨĻ4ˆŽŸ˜ō­:Ō+*G֖€ƒKH:))‰\•ÛėiL&Œ8ôúCKšBGĩ”šÆFjĢ^!_,œ>δf’šŽHˀŋ)eۜŒzæ€ ( §ĄéUãēHã䇡Q`'¤¤2 \—\zæŖžo*0aš%Ŗķ•ĸĘŌn7ūëvĐšâ¤{{Šœ…V+´sR.ŲöųŊsŪ€"™Õ¯°ūc.ŪŅuąaB‰ đFy5-ĩŦŅĖdŽ˜55Ė-(@¸áŗÍB/-ŠÄęBžMEiå4#t1õ­BŅHÅA\Å@ąœwÍ 'B2•RŪšG’BK1㞕uCųĀĪĩVĶĮŧBęēní@Ė ˜æ“Ķnäwš9“÷gŠĢ fË$ndÜPrOz}ÅŠš]á€ųvŌœ?žxbrvÜFzÕՅ w”.>īaQ‹"ĢGĉ߱ĄėĨ—y’n[ŽP$™VatdÉvÁ\ôhm¸žm˙2ÆĩXkXĖ-ŖÆqQ‹"Ĩ]$Ā`ļ:ĐRK M#F$+ĶSâ‚3`I1‹šŠĪt­,ŌŒcR}‰ŧŗ˜ˆ‰åq@˛rÖ¨ĖsÅJ“#ąUl‘íKkQ€JvŅ@._ė÷m/tũj¸&Ņ_ŽeLū5Ŗuh—ACąNx¤žÎ9üŊč‡#č„­$0›t!G—œãšR%ķ-¸Ũ´üØĢōÚG+–by]ŧzRGdˆŅļöbƒ4Ŧg+ËYXŒúÕU‘ŖdLHÍ^†„šä“ÍDÖžrXÛ˛C@ĘBōuwa(„Jāâ_ÎĖĀ8ũá_Ē蹁™f>`Ã4Ģa´lĖc ÍQ3ŨųIįr˛mĒešHĨ‘$›ˇ0čjŅŗ‡ËdÁÃ6ãĪzY-!ąuÎåÚyí@’\J7'™#+DIŪ1RYĪ#š=ˆ §÷Ŋęаĩ?6 dc%ŗÅH-āmŒvp¤P†{‡ĘžgĖNíÄcđĨ‹íZyžs/Ķ8ãĐU崁[!Ķ< >Ë•ålų3œf€!ŗrd‘ I•ūįĮ˜÷s/šęŠ@Ŋ]ŠĸÎÅÆzķA… 3m˜`ŸQ@Ūw™A¤‘ŸfHSÄš†ÔųŗĀō;ØpKVŖZ[ļ3;FÖÜm%z{PrHōŖy#3dæšYŨŌ!+ėzŠŌxí†Ø™žBâŸäÄ aäqԐLíyąX¤#įŠdo!o$ģdūķ9íŠĐk‹@JËrWa椉 •‰ŒËōŸ—‘í@ą:ČcK‡a—‘ĪSLŒŸ.1ũæĀ5Ža‰€4 ttŖĘhSí8^Ä0„‚Á°Ü`æĢÅäąv¸lMæzķZ!BŒö¨ä1$Ē÷čq@WRFÆFP,Įu8ŋũĩū•ĢåĄ9ØšõÅG÷Gå@"Čöá†GĖqøĐT ~ä;d•¯´vŖ–r IåãÛ Đ]7fÉ6}Ũį[bĢndũߚw`V”ˆShl’rO­IĨdėë…ũŅ”•튷zģ­JÁ `U–ČS“Ž”€đ3í@ŗĮ‡”"`Ŋ.ŲÅ%‹ Ģ.søÖ‘ü)’ŋ—>3´gĀ‚ė3[`.NGĢ4$Į/îÎYĮjļ÷#ßŗ‚F9įš—pîÃߚ@gĪ3Čdƒ´t§¤#Æøˆ$dsÚĢ _2Y Č8QV"ŗ üņFŖn29&€kÔ¤{ Œœô§‹Įvo*ʧæ M=Ä`ˇî'ÚĨŽÚâË &Ö9Éę(ē’+Ģ‚#,Ģ‚rzV‚Ė "SÂã5[ėr?. —ĨXHqn"nFÜ@EĖŌ($ym’y¨RūVDv‰BģíÔą[OˆüÕōÔ094ß°ˇŲ’1 ¸6(ŗŪ•gCŦŖŸz ôžc*Ŧk´đāšžė\ŧĀ—`zzSæŗ’PČŌ‡ÕyÉoŲdtMƒ`É ßéMûlˇŌQ„ÉŨīR›"˛Š@ģ†W4bKŽfFeÚĮhÚy?a=qUÖöv0Ŧj‹ŋ9ãĻ*íŧD bÛF2jėV6ˇ“ŗ8÷Íg<“#y˜ÜŦGę¤sIÚ¤-ģkœ UØ īÁ'snæŖ6HZ\ŗm”ōž”ØĻ™n9YX:î”—wR[ˌŦŋ/ûÕ$V‹‡.ÎĀ`ė)×ÉqŗĖĪČۆ(ˆŋŸËĪ‘I~;ͤš¸‡¤ Ŋ :´ļPĢJpO™÷ŗM1r]˛ģy=Q’i‘ •ķ#•<Ō´-YšÍ&ōÜįŌ”[FäŌÅBL€Nqš@C)˙‰Œ_î¨æU{ŠRBģ_ īZ&$2‰?Œ M6Ņ❎=h™¸—mÉߍĢōûqIÍ,î<â ĀíœUŠ, å“9<žiÂŪ5,BX`Đ:HF]¤ß°œi 6ÚVœąe$‚zqWŌÖÛ*œãœĶVÎŨ_rÄ3@<Æ2ÄVI1!#%ēĨ=%‘ļ[—;Õžcžp*âÚ@ŒbŠd00šI¤ ¸Āė(—Ûˆ‰C2åđH5UÔ¨œųû˛6üŨ+M‘[€8ägĩ'”‡?(ųēņր3ĨmÆfw!Đ ƒ8Ļ>X\;3ncž•¤aŒÍ’:)v/?(į¯i—"ų@…'˜ryęsHČĪf$•QŽzqZ›WēN”m?(įڀ2ä(Âo<ÁFÎ}ĒĶqĻ˙Ā)ķ[<ŒßŧģsĄŠU@PŖ ¤\›‰p2äÁ§8e…Ķŧ 6:ŠĶ"“SĨ YX8ā.C:ūõØŠ H3Æ{V†(õ¤ žØārESŽ9 Ššæn;֕!  ĐŪ?Ũ0Ž@\øÔĢ P*ļҜî^ŸCWŠ?žš>ņĨÍ4}ãZˆ’šČŽ0ę÷ĨĒ÷28xãC´ąäĐÅ"P>U)DdeŨŪŗ§yX„iQĮ"œVOĩ>ÉÂdŸZŅ1DG1ŠúŠS´ĸ‘éŠÍûTå!f%FIĄĻš!s&_Į$SKˌ l\zb—bqxö¨e,–ŦCÁzÕDyÂÍ+6đrJ@im\rŖ˜ĨÚ¸ÆŅLVX–_$Ne9/ŊŠ7ĖŅÜIæ¸ áFzP°P:(AKéYAeķaC3á×-Í(”ų^WČ| u4ҚT…70ČÎ8đC âąFũâØ 8c’+Ngdŗ,ŋx @K$늡J–˛ƓÛŋšK$äæŖ’Aōŧeđ_‹uü(s4f˛YŪ Đn;¤?)Īj҈lE\ōL)išŖ4ę)(¤¨ĻŌĐĐ)( RQIšu”f€#đ‡ŨåŒį9Ši( b,h„•P ę}iôÚZ@-”PŅIE-”R´RQ@ E%´RQš(¤4PŌQHM-”RQIšJZ ¤¤ ¤4RPŌPi(i)3HzĐŅHi /jJCԊ(¤ĸ€Iš)3ր )( 4QڒÅ”P04†ƒHzŌ= ûƌŌ효CņQË ĘI§æĢÜɇ \ĸã$ŠkP¸ŋbaR[“’{æžļČŦ[$’0sT#ēW.­•éĪZˇ$Îļë"ŸMßJmĮũ’=Ē#oB4ĸÖ?—$’§ “LšvXĶË#sž)Ë2Ē’ōƒƒE„LŅĢĄSЌoŲãų8û*ŧWaæ“æųÖĻK¨œā7ŋ4Y…ÃėpīŨƒ×8ĪīŗEĩ—o riĢwļÕo§jE6qž=E+#Ü­ŽT`SZÖ)ß?G,’=†6ØË7zkI$2˜Ų‹šRzŅ`š2ŲĀ3ˆĮ<œÔûFÜÅQĩŊ Švâq¸Ž*WŊD'å|‚Øâ‹0š"ڝ¸F3KöK|˙Ē^ĩ jĢ2…vÚ2p:SŖŊI@VēŪ—+Mģ=ؕ…A…Ŧl]ÛąĪ­UkÕR3í'Ģ å‰ųHž´5`$U–OļF$b3Šlr"\ČbbbUÉį<ͰŽhŅT–û•Ü›UēŌĨãHÃü¤ã¯4ŦÂåÎŊ)j€ŧ ‘üå°zĶ_P’2ᥗg­>V;š4…•~ķõĒą]HōˆŨäd`Ķ/n!ų7õ╀ē$CŅÔũ ( ŽEe͑ps”<ŗŒĩ$sąô'Ŋ5â}ĖárįĩoėŅzûę—ėĐ˙tūtî"“+NŌ•B€ŒņšrÅæ’û‚‘–ā ˇöhšúĐ-ā=Ǝ`ąQU˜EĖl<ąéW•ÁöĮ­'Ųá˙žb" ãË\ÔˇpąšIÄČCq‚3Í1ŗ<ÆFÂ(RÉĢ>D?ķÍ*(ȍáNāPEsq0U Ų-‘I2ČᔐNx;đ1Z&8Te‘õÅ)XUwLzâŽaQ@Y˛É—Ķū\A‰(9掄ˆō#Oʗbq*\Ác)՜Ė„†ÉbÕ}nc”īSí\}ÕüĒ'¸ˇö3(oLQ{†Ä2Ų…9 ¸{P"Ũ%R’âGL)PÁĮ#ĄĢ`ņÉ RFHĪ4UYdōį•€Îb‘į–0Áö“ˇp PĒCUäÔœcînüi›æ.‹æ •É8  fšĖ'“ŌĢyÎŅĄ2ĮŽIĻĮ#I$EŽHŨÍ[íGcFxüi3ŝŠI¤&€ qHh'š3@ یqš3Iž(4†”ži3Å!ĸŒŅ@ IKšLĐwĸŒŅš@KIütęC÷ÅjHĩ^ôâyûÃ8Ģ5ØĖ8Ī9Í5¸”Ę#Ą'ŠéO‚FE€\îĮZGĘ_  äâ˜Tm`ŦylôĢĐDßmÛ¸:a‡Læ—ín˛m’-ŖČ5WË\ŗ1Ú;aO‚_:qšˇ(\eEļ.ß ^0ēsH/1mUVn™ĸŠĖĻüÁļE$–ęÄ+$+ĩa'žI5֒K&ņP~đŨ֒°bY&ķâ gω|눙‡đšq‚S¨PcN{wtUō”mčCsEĐXĒŋ}3÷D†–oŋ&>čqšŗögōD~ZmísJ–ÎąÂGĩēäŅĖ‚Å{žd“oMƒ8Ĩ”†hÂuØzUˆí¤ˆ0Uæë“š"ĩ’"JÁ4s ą\01Û*ũíÕjņˆpq픉hęûĮ–×ö†W3ĄĮ?v•ĮbŽÖdžBí•n9éZ –´>Ĩ)Ÿf|Ŋ0zü´ņ cÎģEÂÅo5?ŗˆ-Î1zbŨ9ߞ#éVžĮÎ|ÁŸ]´īŗļIķŽO^(¸XÎ]†[4ģOZxpr…ÎŌŨĢOaēUc)Œc/ŲFÜœQĖ‚ÆddŗŊ<Ҍ)Ī´@Ë"6˙OzŌû*ūąčû*’īųŅĖ; ¸É˛aáĻĮ2ĩŋ–¤ī+ÅKödîîāT}–1ŨŋīĒ›ŸE’4,Û×°\~´×!a†&ŒīqZ_f‡ũ¯ûęĸt;÷3;zxĒæ į2HØĀīû qZˇd 7ņ–$sSũšî~´ÖŠŲN(>擐XŽŽąŨĘīpqƒQydážU]ÛsĐUЖÄā4˙&/ųæŋ•.`ąœˆCÆI\briÃũbėÄ6OÍÆ+Cʋūy¯åKåĮŲōŖ˜v5 Ôm$ģÆāxЍŠ´ļėĐ".7/–hdb›pTTžõ;˛ÆĨ˜ā n#f ’ 鑌Đxí]@É^3ĶŪŦCH‚ĐT”R_˘+ u*ŊÔR rŽ 0.ŌŠLҀİÂđ}¨Š—Ëvį4\WD_gũŌ.á”9rɆaģ9X¨e›ËtEBÅŊ诎,„į ä•#Įž-ŒO֚ŗ)Ķkzԛ”ƒ‚ã@\‡ėã‹“GŲĮ;™›#4ö•YˇdāŅ‹*+)āŠäBŲ@9flŒr{SÄkģwp1MŽáY79 Î)ę4(yĀ"\>Μuô4Ģ!RŖĻqÍ;Ό>Ōā¯ö‡ķ1Æ7•ü( –%B'EPY÷dö ˜Č ¤xɏZNõ š y;ŗ€iL98Đ%īHzĪ]Ģōᅬ<šrã:ŽŽ}hVįcAĀp™váņÍJXĢĘ   R¸\¸ .k0ģ̰Vp6g“RFZŊŽîš4˲J"M͟§­F.~uVF]Ũ ĸãab;TL^&L8‘Iāĸ€.gې1$ä`}j”AsJä0o^”Ų‡›°“ķôÍÃÔQ¸g¨ŦÆRMĨ@+ŅNiÛ<ˇfw?!\ŅÜ3ÔgëFõÎ7 úf¨ÛˆBŠoõšüsQmc¸1UmŨ{Đ;š3IåÄÎvŒâĸ†įˎ2° GQK0?eqūÍUÚęÉSļL@Ë6×FX‹Č8Š„ņíŨŧ`wŦũŒ•;VBHĸDķ<Šv;Peķq)Û"ņۘ—JĶų@䁜Õiĸ!ßjņ˛•˜ä™0 ģ-­ĖLÛCķDwČåQ˛GZĻ •Š0¸el“SŲĻÅ`F &˜ĶeŦÔ722y{N2Ø4Ļ"ÎĖ`=JŽđqáŗ@Ų;ČąĄf< Œ]Ļr¸æĄšA4EFõäĶ‘ļ—ց]–Ŗš0dw§\KåÂÍß úÕ8˜ AŨĩ@äg9Š.9°ōĮ&ÂÚGŒ´rļæ6iÉ{ģiōČV8šŠT„0xNĄĪĨ åD›žáÉâEŠ3^7ÉMØÎhkÜn!FÕ8$š§$€(…pŨžœÔĸ5 JŽCä¯4ƒQâãdĶ9äqR}ąž`TQ‘´æĸhՌ™ wc/Ĩ97~B VęMī#aļcāŌ_*›gbxæĸY%ķœcŠ’bĶDSĘqšcčâ#UQģ¯ē¸1Ģüŋ3mÆ*Yܧî˜léL¸EAa[wZV˜=ԑ YHãօ¸œīUː2 Ĩ0ģ&._ÅŌ”C.*NF2Z€ŗŪW2íi 8ÎÁŠžmŒÖ9îE2,›ØqŒ–ÉĢˆŽBŧ%]ļ‚FŊBí$O,ŠOĘGQSÍ‘v€¤ģĒļ‘0Ų‘Ķ$œQ`ąI3âE ÜäņŠIå9.Œįį9ãéV>Ęû÷eëĐŌ2X’S$įîŌ°Ŧʆ5ōn ';ũ}ęI GcQÅX6ŦKe“æëōõĨ[g^’Æ>īj,¤6á„ČAP ōg4ųèļ6̓Î3N[bŸv\záE8ĀŨLÎOĐQ`ąŅ2Į,…ËšĪN*,!|FH_/æ+VLū{IIöeōŌO΁ب!ÕBŋîĪ*?Zĩ ˜ãŠ_ŗ'÷Ÿūú [Gę˙÷ŅĸÁbĸ!/åčĖy¤ U•8{UŋŗGčß÷Ņ ÛEũĖū&‹)PŖe‘‹œļx~t!Įņ“VūĪüķžDX˙Vŋ•;)U7DUÎdTQāĒIģĄ<Á̞ZĀã ūS„Q¨Fŧ{R°r•bē6åg?6i Ē•pčXÆjöÅ…•°üŠ…ŠR¸“c3)e=9Å,{ˆGęššŪŽi†2Ģ™AõÂæ }Mڒ˜Ęš‘ˆŪŽBôqMØā.ÔpÃ#Ũŋ&3žôžCœōœõâ›q,Ņå—nŪÚĻ5Ė­!Dpš9 W$Ŧ9ĘsíOÉōüÉōôųjŊamŊ–ũ+\ËöhÜ–ę{ č°RV2.?ŨĻ­ŗ!Ęēƒūí2Ōi$g rá‡z–KˆâpŽNãĐ@\ClĖیƒ>ģiŪCķûîŊ~QMQĖ›žQÅî"¨ d‚( ĄEą)Áôœ <~ų¸éÍė*’~~”=ôHĖ~^¸ .‰ŋ9ķ_?…gÉɑķD7 0$+¨¤šäDØ*ĮŪ€ēöpzÉ'įGŲ×ûōßU ÔD’bãÖē›íK—€FzŌ ĸĪŲĶûĪ˙}QöxĮ÷ŋīĒŠ Ęŏ†?60Oz’y¤kiFSŒƒšåoėīĒ_ŗÃũßÖŠĮwåĮ`Ė3’iĮPũÉp™`pGjčˇöxšNXŅU@¨m§iFX(úĶfŧžÖC@î[¤*Ž~eëMÃ¨aĐ͍ž\Ü_ʗbq*Z(ÚŋŨ•.Đ~T™ĸ€AųRņéI@ aąsŖ>¸ĨÍ%€vhÍ6Š;4„ŌQ@ M¤ĸ Fi( bæŒĶh Í’Š@ĸ’Š\Ōf’Š3Aéå}jßŲâūīëG‘÷ZÄ6 ‰]ąą@h™syŽ@š›Č‹û‚—É‹û‹@X ÖėŅČ2͑ĪZšĐËšÁË5Zōb˙žkųQåG˙<×ō ,gˆį—hû‡4čãÜų›F9 šž#ūy¯åKå§÷ō¤Ĩ[B"g/ ôRŲÅ6ā†œ¸du#ŌŽėOî¯åKč?*ac1bÄ1ŠtĘžMO+)¸IQĀÁŽāzʗJAĘf”ÂęÎ2[pĀ53;É#?`ĻŽŌæŲÆ%ũÛ –AŽPāԀ7”W-¸œņw4dĐ)Û(€ģvf9áp)'ˆĪ&æI:` UėŌæ€˛ÛJØÔ”™Ŗ4 pĸ›š3@ĸ›K@ĮQMŖ4ę)šĸ€KLĨÍ IIšLĶę)šŖ4„:Šm bš)´f€IIš3@ E74f E&i3@ A¤Ī™æ€š) ¤ÍŌfš8ŌRHM/j)¤ņA4´v4ÜĐM-%ķIžiŊé=i3E0Ōf“4´f“4™ īIE% IیŌf˜ ڒ’’ ԐņZ’8tĨσKš@:ŠLҚ`--&hÍ ŠLҚdcĨ(Rf—4´SsKš-™ĨÍ-™Ŗ4´´ÜŌæ‹E4°QÍ"¸n”%™Ŗ4ę)š¤gUb÷ŖpKQŦŠßuƒ} *1!\:āôĸĀIEFō¤``ŖÔŌ ˆ‹ė úQfÔTRJ‘Ąwl(īMû\!oģīE˜ŅQM:A’C…\j–Į,sūÍzŠbžāīKš@:Šnę7{ШĻî¨nnVYøbŊŗM+bŠŠ|ØVLcpÎ*ļĻ&šx]BāņīBW š4•NƖîXJ€ŠĐԟkƒ~Ī5wgĻhi…Ë4•×pÂ@–@¤ö¤kØ)l'ŠVcšbŠ‚¨§Éˆ“jĢŠ\ĖŽ‘[ļō~”%v#BЧkwžËÍs’ŖæÅD5xd›IÆėqG+ š4•—=ôƒQDEr˜č;ûÔ1^ÉÕÁØōcļzSå ›T†ŠF1hŗāķĀ_zj_ŋœ‘Ī—ŋîœŌåar˙jJÍmFrōŦPŠ÷&—íōypÉ´s†öŖ”.hšcȑã{ĪL÷ĒĢs$—Ļ$Į–Ŗ“Pj¯‰-Î3‚x%­‚æ„’¤IēF :dĐÆyŦĢû––S Ü9jŧŗ]ųQ?—ĩyj|Ą}M.σY u:ÛJĨūtl¸Dž{0síK”.k´†˛EİÅpĄËl)4[ųë4M†õÜųÍĄs[ŊM7=hÍ@ÅíHzPO™ĻŅŪ“4„Ō{RQšLņ@ IFi3@ĸ“\žĸˆ$˛…_3gûĎĩW û%IvÉnš§]†’{dŪĀ0į˜c˛Û´ÜHW9;ÍfŌDû¤&>˜ZWˇģ˜€š5†7ͤØ™Iëšļ.-Vv˜$Ĩ˜`üĩ-Ŗû‰Č<ā(¸6_ņéûĩ“ šH˙ÖFų~;ÁKYļ¨Āâ™ŪNī*ĘA¸äŌNÃÜĨm#Č×. î+ŌŖŽ=ĐFLŅŠŨĀæÍhÆí3G`ŽSšE+ī]=Cz曐ŦW¸5ˉō!Uûė2OĐT#( ˙ËJĐarīŧŲGģԚPˇxĀĩ„ įš‚ŨT,HåŦÕYޝĨ– å…ZÍ˙e„Pøt0¯ĐT§aا’uüĮ‚ZiFūÉ@įwL{Õī*øōfˆĀhō/[•E§Ė‚ÅyÃĮ} ž[2íĮ’Ū9<ÛĻōØé‘ÖŦũščõģ?‚Ō}’r9ŧʎd*‹IžÂ=̇FŨ´÷Š<ģ‹ĢˆšHŧ´×šŠžÄũîĨüčû=n&?.`ą 6ŌĢ]¸ß÷yëMx„Z_—1 ã‘ĪząũŸy%?đ*CĻ۟ŊŊž­G2ˆôÅŲ÷#sōI4ëČÄŌÂË"‡'&ž4ûaüķĨû ˇüō+ ąčKˆ•Ҍ6y5 Šœ%Šéc|`÷ĢdˇōÉi~Īé~TŽ(ļæ?´ĖrÍN2[yąŋœIAŒc­^ōb#Oʗbˆŋ•>`ąœĐyšfa!Éh€Û¤ŠWÍsĐn+Kv•íK˜vږŠ*@);Ræ“ĩ”š¤&€Š(Í0Š3HiRRįšLĐw¤ĨÍ&h4ĶKšBiŸ41âŠJԋŠĀ&t§P2ŒŌ$‡ ļ)#‘c%ŗķÖŦÍ7”@ÆsJķŒ0Í;ˆĒä*-ĩ+326dĶ&§ķØ2†æô4ĸWv"00;š.d2!ĘYāž:Ōū÷nßąŽ:ã5u ķ €\7žŅ‘Āčh¸ ķŽņl?:iûAmße>ĩ47ŗ0qOÆFwŒ´\ äŪ63g´ģ¯ŋįœXķŖÃæéīH×)9n”\ ûo?įœ"ūųd*Är,ƒ*r)ųĸė ˜ŋūôTží$CđŠfY‚˛ėP9âĸą™åFŪsƒ€}h¸•zzΟ•(†ķū~TĀj&ēhī¤VÜČp;TÆú!ŋ'qĀ­`'‘vzŨûæŗ\÷ģ?÷Íū0ŽÅX2uZSzŖ]§įÔŽĀO˛LF ÛūUŌPũéÜĶ×P ¸„íN ÍImtg<Į´v9Í`5tũĒ\Ęô4ŋ`^ķĖāTû›“ Põ$ô¨RŨ¤)ķÚ­c%ūĪŧ˛ŸøMƒģHāTĪļĘŗˆäEŽėŠhŋ—bĘQ|ļl{ҍg[ú?ũõNu¯÷ üjÂļ@>´´ĩŋØ-į—ęiE¨é Պ(im˙Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ÂØ ɧmČæ–Š6Š äb—´Æ4(Sˆ–Z Í;Q@ÅĸŒRĶ(īKE Z( vĨP(´ (RŅF(hR†(ĸ.(˙ëŅ@vŖ˙­A8ŋũz^ô™ū´´đĸūĩ¨´ ?úôw Aڊ( aۊ;Ņ@‚Š( Š;Qځ…Q@„ĸŽÔc JZJ’–’‹¨īKIŪ€’–ŠCIKŪŽÔĀiĸ—Ŋ%%ƒŌŠJJqĻĐHii)€”\qE7Ŋ´””RŌw ¤§v¤ ĸŒQ@ ڐŌŅHŌSŠ;PSM:ŒP´´RŌQڌRĶĨĸŠ)i( RŅEŊ¨ĸ€ SE (ĸ–€J( v –Š;RĨĮ4”´ ZZ´zŅ@Ã˙­Mn‚ŪŒt Czsč)ŲæZ^ô ?úÔQE ˙¯ESĸŽÔ´€J)hĻQۊ^ô”vü(ĸ)ˆNÔb–Š%'jZJ(ŖŊJ(ĸ˜ F(íEŊ%-%IKI@ A ŅL¤4ėR%%:›@ƒĩ%-%%´”†ŒRŌPbŠSE6’Iڀ“Ŋ)ëE6’Hh %:Đ´wĸ”Tˆ)i(ĻŌŌRŠ(íIK@ (¤´ (ĸ€–›Jõ)ĨĻätÍ/˙^Ž RRĐ)h )}i)ĨĀl´ņ֔SC ōE! HŌŌu´ ;ŅGz(vĨ¤Ĩ a˙ÖĸŠJ){ŌwĨĪ4QIšZ@ãE ’ P)5-%&G¨ ¤&™3댚‚'vn‡ŽŽôĸšH­(Ļ!M%ŒQz¤¤,Įz 9 S{PzR1s@ƒ4RnĨE<Æ6S^”ĩ…š5+ÔõŠ#ÎÁģ­!ޤ¤2(8Í;Å&Ģ™Ųžę*kŸõGëQ@?pŪæ›°Ÿh$aWštsÛX`Ķ-Tr{t¤øųjH dœî؃&˜%xȸÍ6ß~Z¤ēÆÁĶ4 YfÚĒWœĶRY3¸ŠŠOõ1U‰ ~(‚If? Š3+ė|qPąŗ´‘ôĨÚ€9Í /Õi]„ĘĸŦŠŠ7ü|Ĩ6 –gmSHæX~bĀŌI˙?Mv?sŸzE>æˆ6~ZDfŽ-ŲāŽ+ĮĨ#ƒöd¤‹,̏ž)ĐĘÂ@ŒIŠm˜y@zUpw\‚:f€촌ĄģŌČ^5ûĮ­,#ũ!Š×ž´ė 8Ė,~”‘Ģ˜ąa˙ã×ūQÚ}Ãô WnÍæí$šaÜîwąQK ÄÄĶTœî`1ë@ÆšØß+–§\ŽNO"™( ø㸊nš}¨Ų¤*ۉÍ+HVŲ@ęM,ĖŨ#4ĮB`Sī@Į%šdÜYŗÚšŽTēØÔé2ųy$ ŽŖ|ŒØãš$(elqG1L'¯z–ĖuúĶ'˙…úĶčē­yœUĒĢz>Jb!•›Ë°Å4Ēų–=ĒFlD€ŽxëL‘P.åqŸAH P†7 mÁ">)-w%Šķ¨NŨŪÕ@Q@…rîCzT°oØØįĨ4u$°OjlE†íš C šcį1ZD!gX•÷ĸ5Į{õĻä FŪ‚™#nŽ`I8&–ęNŠĻŸ:nˆ0ė*ŧJdf˜ŗ’(m¨Y >”ŗ.%įĨ+"*IíHięi̞nÜi î„1ÍM €GĪoz`Gk÷ˆĢG€j­ąĖ­VĪCū4Нä#;GŊ!f‰‡ĪŸĨ ēYvįķĻȁé$Ԝ.8ČĻčo>”ŽTƁŗœSZ6AŋˇÖ‚€0:Ui†ë€*ŨBŅ1ŸjˆîÆ0­3yxŪvúUŠĸķŊCäĘFà ĮĨa:æŦ‚¯áQ΂8ÔƜ–Å”eÎlPH=ĒÜnŋĐTžP)ˇõÅEöEĪVÅ; r$nÄTöƒ÷U(‰vlįm9F¸QĮ֋P0LM]´Ã 3n+ÍIŒ §0?jJWæė}ZØšÉQŸZ]‹œíúQ`(Âģ§#Ū…ÄRųĮĩ_ āʍ öũ(°Ęa‹É„Č\÷Ģç_Z@ ”îŊŌš'5QfČäž*íX VŅû˜Ž™§ŧlnwm;sVŋĪZQūyĨ`*MųÅÕIĨōŨ§W+ŠˇF9§`!ž6tFN)ņ)X‘ČņøRūĨ!Œ™ ĄsLŠ6XJžĻ§ĮųÅ˙8Ļ" xš2ÅģûĶZ3ČÁĢ?įĨ-!•ßšZO!Ũv šį@Z,+•äƒxPj]™]§šj^ô ŠöwC”|})ŅÛáˇ3n5b—į4X.%Bđ”>qŠœ˙žh˙=h[‚ûķÍ>XüÕÚN9ôŠ?ĪZ?ĪZ„Ā [2qNg^=*J;P2ŠĩŖ5I>™?Z›öŖjrU‹ äŌË É÷ŗRãéųPĪĀÛÎ1ŠHâŒ.jLœQķЉ`UmÃ9¨ÚÕ8?Y˙=(˙=(°ĩ‹Đūtö…Ypz}j_ķŌķŌ€š_ėŅã§ëO¨]€|ŋZķŠ_ķŌ€*›XķĶ­Hą*Œ(ĀúÔ¸âŠ,jŸtcņ¤hQ›qŸ­KIÍ0C}ŋ­1ãWaš—ŋzO΀!0ĄH0[Gœ•c×­0Ē`qHĘŸƒŽô~t€ŦÖŅ“ÂŠrĈ¤(ÆzķSbū4\ÛFOŨÚ!ü#ķŠņõŖQˇoo­5aD9QÆĨ ­0"’5“īsøÔ_d=?ZŗŠ #í>ĩ ĩBzÎŦãüâ“į@‘œ¨9úĶÍ;į„œPwļV9ÉÍ7ė‹ÜĩY˙=(?…ˇRĄyâŖû.N 6*Ū>”‡ā(Ŗį¸˙8¤HQKEņŦ˜Î)ā`J(üZ`sJ §Pb–ôũ)ĪJ(üZ){w –“ķĨ˙=hÅP=˙(˙<ĐųÅ.=ŋJJP(¸ö4bËōĨĮųÅG4ßáKūzRž´w˙ëŌūt`įŊį­ŋR÷˙ëŅūzĐvĨÅį­į­˙úÔb—ü}iųæ?Î(ĮˇéKÛĩ LœRŅĮĩ•9ühŖđ•ú~T)hĮųÅ˙8 `?Ī4ž´cūĩ/ųéH˙=h˙=i?ʏΘ ֏ĮõĨüčü蔸ĨĮ֏΀ųQūî}é?:mîs˙×ŖüõĻ!¸¤īO?įšCūy ŅJĪ4cü恍Å&?Î)Ø˙9¤?įšLs˙Ö¤ĮũjwųëIūzĐ!ŋįĨ'ųéN?įšOķ֘ ķŠLs˙Ö§qūM'ųë@ #ü⌜Sŋ/Γŋ˙^‰ķŠn?Î)˙į­'ųë@ ĮųÅį˙­JĪ4Ÿį­’ūzŌž´ JJwųëIūzĐRSģ÷üé?:OËķ¤˙=iߝ!ĪŊ ņũi?ĪZwįIĪŋå@ J'ųëKHĨ¤Ĩ˙=)Œ:RķÍPūzԊ(˙=hhg§øŌСéF=ŋJ.(ü)i1ūqKķŠ\œŅūzŅūzQ@ųëJ:õč(éŪ€ )?Ύ˙ũzķŌ—ņũhįšB_đĨīĶô¤˙=i/΁€įŋ‡é@Įĩ{P ĮˇéK­•įˇå@>´~tcéųRãü⁇z?ĪZ1íúQūzP ˙=h˙=h˙=)y˙"üZ?ĪZ\qŪŽqہåųŅūzŌū}hįŪ€—ōŖķüé?Θ GåKÛŋįGųëHbwéF?Î)ĪZ?ĪZ'oūĩäR˙ž´ž´ LœPGųÅ.?Îhī˙× Bcü⌜R˙ž´Ÿį­įcÛôĨīڎ=Јn?Î(Į×ōĨ?…ÔÜqĐūTcž†—v¤ gˇZN} ö4¸íųR`z L÷¤Á÷ĨĀô•& ü¨úŌsNĮ=ŋ*BˇåLĮčįی}?*1ė?*N}čįی{ƌ ô•!ĪŊ'>ô¸íųRcØ~T~tŪ}ép3ÛōŖĐ~T BŊ'įKíųQíųPcëI¯åKĮĩԘ˙8¤ĮųÅ/Ԝ{P~ŸĨ'ųéKĮˇįIĮų4ž”œ‘KūzĐGųÍ!‰Ÿ֗ņ¤æ—?į4ˆŠ?ĪZ?ĪZ`/ųéGųéEįĨ/įKIķŠ;ôũ(sūsJŋëIK@ųëK@ĪŠĨßõ aEį­/ųë@ųéKß˙­IūzŌū_üņJ?Ī 8ö ü˙*\}i1ôüŠqĪAųPŒûŌ ûŌãüâôũ(˙=iĪZ;õŠ{˙õŠ~?­ë@ĪųŊģĐOĮõĨã=Z9÷Ŗņ4Ā?/Ύ1ڗņ4¯ëHī@ü){˙õé֘ íKūzQūzĐĪ4ŸįĨ.ųqūM&ÎhĪJųâŒä˙õč˙=hž”ŋįĨ%/~Ô \}*ãŒūT‚—ō¤ųĐ֌jP>”ĀN} /įF9íF>}(0qŪŽ}éqôü¨Į°ü¨9÷¤mØã¯šĨĀô•˙8 b?­į­.9éúRūq@€˙ži?ĪZ_ķŌŽ˙ũji˙<ĐĪ4ėq˙Ö¤Įķô ŪßũzC×˙¯NÁĮʐƒīųPĪZCõ;÷ü¨9ŋ•7ņ!?OΔ8'žž”sī@ üGįGę?:^}č÷Ļ!šú~tgéųŌķīHsī@ÆįéųŅøÎ—œwŖœ÷ ū_'ãúĶĪÔūTœãŋå@ Čõ&~Ÿ÷Õ8įßō¤ü˙*Lûū´úū´ŊģūTŒĀuūT ?ĪZOķ֗¨˙ëPĪœ˙“IƒīųĐ˝ō  Žß•ûŌûŌ‘ė?*0=ŋ*@'į@¨c¸G8ČĪԜePáIäûR$—üõĻ´Hõ÷ĻÉ*Æ2•A9Ũ4gąĻŧ˙œĶ^@„Ž}ę).|`“íP<žl‰Á=čūséLyUX)Į4áĶ˙¯Un?קֆ4Xi•_iÆOĩ9& !AÔ{T2ē‰ö”úÔp°[—$āb‹~Žũ VŽf‘øO”w¤yŨŸdHĐŅĪŊTŽwIJsVĮOÃԁŒ’e‹9ôŠĪ9ũj…Ū˙4d3ōûÔ­<‘F>zb€-¯ëJĶķĒ%ŽcČ\U¨%ķPķ@g¯OΗ#Ô~tɟˌļOĒŖ\Jģ՗€ŊųP? ­ÎŅ6ãķ uœ"Į84œ‘ŽÕĖMË&8Ķ+‹ģŽĶÚĄ“wÚÜ!Áõ¤3@O~TŋįĨQs5šËI‘íRÜJÂ$db2=hgrŽ įéJXŧ~E–o,He&’%–ānķHôxōŧ*†&y…×t¨­dl˛ą'9ĻGžO4o#fŪv˜œø °>‡ōŦû8Ë6wãĢ@~Ā 8čqô¤ “Æ*Ĩ>æ—˛/­E2Ŧ@į.sԐxúÔ7,R#ŒôŠ#æ0O íQ]˙Š?OJbÖRa‰ëSƒŸ_Îŗ­­ŧč÷`=Šöėb¸ō›}i ŋŸķš Į__ZŖo˙r vĄĀZ`\Īū´+†Î==j„Ĩ¤’8Ŋ@éNžĐGå-œsš@_?ūē:ūŊW°æÜzžOõMôôĻUGũõK¸c9gAšGÎp=)&Â8Œį`ëëH *“ŒÎœHä~ušâØ&cfŨīSŦ…ė‰oZ–ZU\rŋ÷Õ(eaËųÕ+KT• 8=xÁĻĄû5Ë(éL Í"¯V_Κŗ#t*8õĒ`}ĒīČüŠ×6ˇŒ9äŌã2¯R {šaž0~ōūuRy –hÍÉÍ: Dt Ãõ ŽbnXų{dņWxõHnųGAšŌ?1 8Įjkē¯,TsŪ¤ü˙:§Š¨˙zĐÚâ%?yãNی‡iSÁéU ´âË.IčsQÛîŽæHģ`ŒP€m›1šäįž†­ŧņ§VLúUŦėèĻ#ÆdvKįĻ(ĸ“Fį†Lú sȈ>fQõ™$ˆ˛†ˇVLzՋ•i7,6ãOZKö¨ŗéRMģˇ.ß\V|l õÍ—k)<EÆ[7Qg“ëR+̌Ģ)Âŗbk/l‘ą|uĢĢE0aŽØ43ÜFŸÆ„Ō¤ŅČ8e'ĐVtOX΅ÉéŠ Š“€2JÔãÛō¨Ė‘†ÚYAôŠAČžŨęü{Y%_^yĻļ*IQUŽ ËVPŖ=E6ælڂ É5Į˛Ķ§^hl hU"\ēž:žô‚hÉÆåR›?gˆ˙ ![ŋJWnäoAļE_|Ôs9Žō}AĻÜ+-¨ č)˛"›D~sŠYˇ“t ą÷ÉŠ ÎGũõUí S᜞*[x|• gŽh+\ BĨ@JNLņŌĶēä0֖hŨ$VPN=):īĸ˙…2Lų‘})Ŧ%•(ĀTÍ™c;NĐ94Čé΍4ë…ÄņãŊ ‘Ëž5Ü(ĖōĢ´xĶØéUn9šO­\ü⠒iŅ€āÍ˙Bĸuf•ņÚ­É™÷€1N†I]›aëE€ŽÕ—É 0<ÕxUŲÎÖ*Õimž9‹!OŊ m"H^ õ Ll\o“'Ū´*ŧvŌ4åeoĨ[Q˙×  wŸë#úĶ'ĮÚž•fâ6 °zĶMąxĀf‡ņP2IJˆ‰8ĮŌŖ°Ëo¯Ĩ'ŲĨo•ĻČôĢQÆ#\Ō€č6mĸ"ā×Oė˙.č‹0Ģō ‘ œtĒÂŅׁ1 č(Ęˌ„tôûˆÛëSCn#ß؈o–Bô Á xįšrˇĪģ<ÔąŲˆßvōßQK%˜y÷O ¤oˆmį9āˆ#úTég‡ Î͎ÄT˛Û‰@゘IŸąĨCũķīS4!ĸØOÆqK$Ú2G¸Ą(ۏŪÉõĨĩĪôĢij¨Ä‚ÜûRĮląīÁ?7\Š­§žŖëŪŽ˙žĩŲĸÉŧÍYÁ˙"ŽĪ5ÁMØ÷Ļ]Dą€3ž Õé,ãî;ŗM|=÷ūt ’Üîˆ~é—ę[éëSĮpšĮŊ‘l☊–2/’ĪSPĻeŊ ­{ëëSCB¤ #=yĨ`šB&ōī_wsŪ‹ų›bāķÔģ-ŦRÎ ?Z`°ƒ<ŠüčT§ņ‘S\\#C‚HõéEãl‘ōcĮJ‚CjW+÷ eŊ?ū=ĮNĩbOõMĶĨEb… úՒ2¸=Į­BÄ~ōLÔW(Rä1/Ž+F8cˆ’ŖĪzY!I8q‘õ  –0U‘‰)Ã-fI@ŧúUg<Æ?:.T,(ãĶ4X ļS"FUƌzĶ™î™€ų}EKgo‘铞õr8c‹î(zÍ\ÛŨåÆîjKšÕĐ$eX‘ÚŽŧ1Čręęj5ĩ…yō×?ZĨ4f; ;ģŠģú•ã°íRIE'ÔŌ:Y”-ž{ŠKĐÛĸߐ1Íh­ŧHr#\į­ 8•[ŽôĀΑāXą–>„SmŌŪCᏭm˙–i֔C‚(Åg –3æž×Į@)–ą;îÚ _ZĐ6Г‰ųSÖ4NTsڋ—X™–Sˇđ§4ģĻÛ>•}āų(„úаF‡"5ÔP1ĀŖNÕņų‘°>‡ĩKĮˇįHqíųĐŲ§āĩ‚ā~•tÅ]ĨFßLĐ#@ģ€ž™Ĩa•m%QŌFāzTĐĘ%â•mĸVČ@ąĨH’<ėĪ^hūē\œŌ÷ PHƒüķN R÷ Å.)hĀ˙8ĨĮųÅ´ž”ėRRЏķŠ\}*1Å-CJր?Î)@äPŒzŌķīF8˙ëRãĐ~” 0}čįš\œRūq@„ĮųÍ/ųëJ?Īb€˙õé@˙9Ĩ¨â—{íŊ¨˙į­;OΗŒP0Į͝­'åųĶšÍN1Ô~t¸įĩáQ$ÁĻdÉâ€%ĮԌqڜ3Gųë@ ãڗJ_ķ֏ķց ĮŌ—ڗņũiqūs@ÆãéųQÛˇåKūzĐ1ūŊ˙8¤é˙ę§~?­zū´ooūĩ.9˙ëPxûõY',šĀ>´Ō “˛ ~TՁTįĨ-ŧžjg§=ÍKĮų4† éü¨ĮųÅ.9ĨãũzLrŒs˙ÖĨ OQ@ Ž?úԌšõëéNã¨ãÔu Õ]ŖūT~}ûRņíFWÛŊ&9īųQŽ;ôĨüŠ8Į8é@{ŌvīNãÛ­4ãځŋz1õíFGˇz;öí@ 9Į~”Œ¤úã4¤žœPÃp%b6ÍÉ6ŊúRāäõ¨ŽdÂzdŽ)mÉhAaÉö§`ÔcƒÁī@*OnŨ¨8ĮnũŠ Nsß­7ÅŌÆėduôĻđoʁ{õ¤įŪ”`ôÁįŌ“Œ~”Æ„įßŊ&xÍ.GlwíP]?•`Æ(°2^pzô¤ ûĶbpŅ+ JyÁ=ŋ*iÎ;ĐA˙hԜ{tôĒÛßí,Ļ?—ց“ō:æ“éIŽ;v¤Č#ŒĄ¤įŪ—Œö¤=ÅŸzBŋåNĀö¤ã=¨ü˙*CøūTŧR–2"Ž2qO,äž>•TŽë|÷‡“tJ\ĐA?žwgô¤[”'ŠüĒ&E@>n})˛ļā>@ŧõĀŧ=Fi$F2Ųĸ1ōđ¨Žcf¨ n— ԏ2ĄĪ=*š}Ā,ŠÜ Yņ”ÁĪÂåĻpąī䏭'œ{ųÆ=iŗĮŠúSĸĨĮ°y ØŠâ”Jšđ&™ ŗuĻZ HāP¯ķÖ {Œ*1÷§sō¯b8-ī@†ā9ÚTƒîi$¸ÃT,GqN•#ÉlØãše˜ųģũhŅ\îmŦ›OŊ+Ü될wĐĶ.ĀķŽšĸ1›ß›Ō˜ .™N.Ŋ3AšpA1 -ŌæX˙Ƥš¸QíëH +wæĢDÆ(<ÍšįŊ:F"Ö5ÍLŅmŗņë@ e §JHgķTœŠĒ´~W¯ĒL ę{ŒqNša.r퐎ôĪ:i9Hr=EFP­˜näĶĄYB|’`PđĪænVXvĒ۝.Ÿb†>”øŖa)%Á=éЀodÍ*ÜK…•ƒŪŸ5Ã)  [ÔSoĀōũøīL’EÂ(Lž:Š[ˆžgŒš™į"ÛÍ\ŸJ¯2ČW/!Æzq˙qúĶĢ5ĖŖ+ {TļĶŗąGá‡`)öĄ|‘ŒtæĄ@>ŪøÅ!ˆ×LhĒ <éáp%P{RĀÚÎqNŋĸÔÄ-ÍÁ@<žI=ÅFĪuīe\Pņ, g ĀÔn˛@2۝}úPŠ%&Ûqî EbË'9&›+ų‰¨' ĢRĻË}ž”JØ\4dD\÷Šā¸r]%á”qŠ’Ëo“Û¯5^A›ļŲĪ\â€dļŗŧ˛ßĨ>âWŽhÕz0į5 ˆÅɝxA¸‡¤—3´`$18æĸoĩƞa Ką‹…'šˇ;'’rF8íCB&’Hdv<¨âĄŽ[™žéûaū7ĐĶôđ6;úP!’O(+œ9ö¸W{2ã5éēéAČÍ>KmĢ—vļi,—Ú#'”ہļü–á~”ĀIęķ  €3€hšæOŗÆęÄy̞2¤[LÕFņİŖ1ģ°¤†Äí-‡2dgžiĒĶÎîĢ&ĐžĻ¯/É@éŽĸ¨2åØātP! “ÛĖI7či÷SēėTbĨ‡\ÔD"”($ļGŦ\,Ną‡bo l ­ĖKŋÍči×MžĐ“žŨé’C%¸Ü ‘žôéd2Ųą p(A‘%ÃĮ”€MIi;ŗųr1'ëSÛsjŸîžÕZܧ?JCę\=?úõLČ˙neÜq階¸\zU6Ô[ééBFŌÍ4ģc}Ŋš4¨ķE&Ų ú(Ĩsåģô˜Ky˛pN>jššU¸(ŽE# ˜€vqŽŧYˆáLÕbä¯Ų›Ũxâ€[ ždAšįŪ¤=sĪįUŦ†`áVqĪOŌ‘B~'9īKØvôŖųö¤2Ŧ#0jc>i ĐUŒ\úĨ\úĨN¤MģnáM™ÛQSíš?Ä´Ą.ž´ÂÂëáI4’‰ †\ûŠ~˟ųč´ž]Īüõ î”ä}jI`cÚ2Gĩ$"į1MˇÕ¤%HĪN)|™˙įŊ/‘?ü÷ !f!ŖÍūí7/ŊKöyŋįŊŪc˙-Í2(]äß"•úQäÍ …ĸ\ƒëRũž_ųø4}š_ųîh‹’ČZU+ߊ‘!qwŧŠÛŒgŋf“ū~ /ŲdĪü|Iá‘äB̐:Ķį…Ū Ē9Å ĩųîÔ W˙ží@ ō$%^šˇƒīųT?dc˙-ڏąļ×ĩEŖ‹€øųsšuÅĢŧ”dgšZųîÔ}˙Īf  !ĸØsŠŽ‘]B6ĻÜ{Ôŋc?ķŲ¨ûũ6zbŗÍ ų<cÚÎ'iûÔÂËū›=c˙ĻĪEÂÄbŪid 6ö4Mm(uxą•õ5(ą˙ϝGØx˙Zô\,C%ŊĖÃį*yõ¤–'ŠÄĢõĪcSũ„ĪW¤kGúĮ4\,A W!3(Vĩ=ŊģFÅäÆėu…°\ŦqKö˙ž’Qp*lwēũĶØîjam4Ž ĖŦŊH4õĪßqNû˙ĪI(lI šĩķ@ōđæŖ0]HģE+際ė ũ÷Ŗû=?žô\,D–Œ$RHĀ÷ĢS!u*ëëQũ‚?īŊŲéũ÷ĸãą]-§‹!%QŸzšŪßË,ŌX÷œ4øņ÷ۃ§Įũįĸáb'ĩ‘f2E"¯ãMû$­"ģHŦGŊXūĪûĪIũŸ÷ž‹ŠÃ.ŧļ!HËgŽj)`™b;ĻVQÛ5`éņsËĶ€Ī;ņNáa–jW dc“SÛEä.ŌĘpzƒIũŸ2 ŅöŗÕé]ۋq&U€ëš‰ ™đ¯:LÔ˙`‹—éGØ!õz.WŦvL̎ˇCPà žXdTĶ5i´øˆã~~´‚Â,sŋ=zŅ}ڍˇˇļįdvõÍ2Kl6čeDîpjoėøÛüé?ŗáĮņôõĸāB-™Ÿtŗ#sRĪʘ̌wĨū·ũŋΏ°Cßį@PĢRːûÕPZ”—rLŠ=3S›ÛīŪėøsüČíĄf‘Ioz[˜Raà lõÍ/Ø!˙oķŖû>Gëë@2Ў‘žVšRž„ĶæˇF…Q]ŠõŠŋŗāĮGéëHl ĪGëëEĮaĀ ‹at=9ŨTÍŗ#ąK…PĮ 5dØAčũģŌ?ēũûИXĒlËĩÂęMI=ēȉ‰2ŽšŠŗāŖã>´Ķa3‡üč¸$Vkyåk•#ÜÔ¯<ĩtŽšŠ „čũ}iϏoΆÁ ŦqŪ„€yÍE*—gš˜ôÍ<Ø@;?~ôŸ`€ö΀#HJČ\ˤŲ¨˜¯ö‰9Į\Ôíc ŋ:jØGüAŋ:`G%ˇÍž9Q>†[30i&Wúš—ėãŖūt}‚tΑV*]({°€ČëšŲälH‰ŠM„[¸­/Øa˙n$IĒ UÛĮĄ§wãQÅjžäŨžœÔ¸>˙•"ē Ûđõ¤?įšv8*B9īųR˜˙8ĨĮųÅ/z1HĮųÅ.?Î(┠`ĨÅ.)qūq@ ƒJ(ßĨ(ôũ(Ĩ( œRéü¨1Ūƒ@į¸˙8 ķĨįŋįKëū¸į˙­@ųÍ.8īųԁūqJ?JLu˙vų4c¯øSąõü¨ œŌãü李úÔ œPqūsKŽúôėuãôĨĮųÅ4žhĮųÍ8oŌ—ÔÜœŌūsNĮր(¸˙9ĨĮ?ũzv>´cë@†˙ž´cü杊\w cüæ—į4ėz0HīLãüæ‚?ÎiØãŋJ\}iĖōhĮũz~Ŋ&>Ŋ(&ˇ_Z03Ûķ§`ûŅ­7ŋ:\nž´ģipsĶŊ3J0)ø>ô`úi=Š0=ēzĶđsŪ“Z7öīیsÛĩ?ŋCیwĮĨ ņ×Ĩ.{u§hÁĪã@ ĮĶĨ!NôėtëĶ֗õīLc0§jLn†Ÿßō¤=;ô4„7Û­ /n•'į×֛Î;ôõ Ünô˜ŨŠį¯Γgˇzlcpzt4„ öíOäg¯~ô‡>ũģŌÂŪŨ)0=ēĶĪŋOZC’{õõĻ fˇJBˇSOĮúzĐz÷ę{Đ2<};S{ęOΎzN}û÷ `{uÜ véR`įŋwĻžœg§­† ãoZn§JņwëëHyúzĐaÛŊ&ˇjyĪŋSŪ“Ÿ~Ũč2ˇCA=ŠĮ§~‡Ŋ$÷ëëLdxíԐŽŨéߟOZ0}˙:Cßĩ‘ĐRœûöīHsĶŸÎ!8ö¤üģSš÷ëëMįĐūt1ü¨8ĪjqĪN{Ōsß­ üõĨ˙=hĨÅ!ųëKūzŅKLüõ§ž´ Ōâ€ķ֗bœ?ũz@)@úRŠQš§J\RŒ˙“Jũz&:ĶąĪj1ūsNĮ?ũzb˜Å.>” œŌĮ˙^ÄĮ^”¸úR˙ž´ā?ÎhĐ>”  vĨ§øŌ€q˙× b`{RãéKŽŋãJųÍJ1ôĨįš_ķց‰ŽiBũ)ĪZQūy C{vĨĮ^”¸ãđõŖüõ }DéF>”áūyŖüõ CqôŖō§`˙“GųëLĮĶĨ.>”¸˙9Ŗį4†&8íIíNĮųÍã˙¯@˜Ôė)qüũiĪZhü(#ž1ųSąĮ?Ύ˙­0:vü¨íÛōĨí˙×Ŗüõ¤qžß•íųS‡_ūŊ˙9 Hi=ģö /͍íKëįGãéŪ›¤qÛōĨĮ=ēúR‘ĮįŪŽ§ņõ¤ f8íĶŌ—Ûŋj^߇­gsۘ Į͎jCŒvč{Sģ~]é1Įā{Ō˜įˇ_JNŨ¸”ū˙­7ˇž´ #œqųP@ģSûûķŪ›õô鹥¤};ö¤ Ûˇjy×Ŋ&üqېtGēzPqžŨ})OL{zĐG?­11§íĶԚzöę{SšÛøzûŅū>´ ŒôãģQ§~ÔīūˇzB1ŸĮŊ7=ēŽÔŌ8íĐö§ŸđīH}OŋņPn9:úSp1Û§Ĩ?ŋãũęn>Qôõ Ķn§ĩ7víÚ¤#××֚{`ņĮzf8íßĩsž:úSéĪņRŖëëLđíĶԌc°üŠßË´‡¯˙^ÆãéÛĩ7Ûō§˙ž´‡Ķ˙f cx'ˇ_Joו?ŋNū´Ÿį­†œ{wíIÆzƜAĪΓüõ¤ xĨ˙=)áKųR¸öũ(ĮųÅ•/åLĮųÅ/áúQųRūT¸˙8ĨÛô¤§~Töũ)ĀNԃÔáøvώéKŽ?úÔ—ˇjCxũ)qüũ(õéKÆ{u ķŠQĶ˙­G§J^Ũ¨cü❏ķŠLqڗ鎴Æ(įcūĩ(ÔQÛĩ õ¨ķũ)xöĨ{SüâķŌ”cÔQųRūqF=ŋJ^9éJ1í@ ūzQķŠ\ v ãž” §ŋĨ˙8Ĩãڎ=¨cúö¤ī˙ÖĨãÛķŖƒÜS˙=(ĮųÅģtõĨüŠcūĩ&?Î)xöüčíÛ§­öũ(ĮųÅ)ÆzÎŒQÛŊč&8˙ëQķŠ8öüéxĪQ×֘ ķŠR=ŋJ8ĮoΓōüé ;įúR‡Ĩ/Ŗ¯­'íųĐ #ŸūĩŸ‡jSŒņÎ“ņģĶ`§įڎ˙ĨšÔuõ ˜ãđô ƒúžÔ``r:zĐHöę{Đũ;RíKĮŽŨé:zt=ču=;úRvéÛŌ—ŋQ×Ö›ÛˇOZ.9˙ëSvã'ÔÔėQųĶIŨz 9ū}¨īųv ũG~ôgžŨģĐĀB8?CښG?§ĩ)Æ:Žũč={uõ Ūq͎ĨŠú˙vŽ1ۑëīHqžŨ}hßūˇjS~Ôß=ģŅ‘žŨûĐOéښGŸđŌ“Ī8íېãÔwīB¨úúSqō§÷iN3ÔuõĻäm¯OZ9üģM˙ü4ší×ûÔ܌vč?Š€ úû˙ 'ūƔ‘ę;÷¤Čö˙žŠ€ß_§÷iį˙ąĨČ˙g§÷Š3Ûūú bcú !į?üM/ß÷Õ!ü;÷¤11Ī˙cHzt˙ĮhĪ~?: ú~tŽx˙Đi0sÛūųĨã=GũõI‘žß÷Õ!ž´ŖëúĐ:RÆ ?Ī4ŋį­ņĻ˙ž´ŋŸį@ü*_ĀūTŋŸįKūzŅųūTŋįĨ1 ?Δ}Z9÷üŠ@öôí@˙žiGãųĐ3ĮōĨí˙Ö bķĪøĶŋū´ŸįĨ.9ü}(GQū4ķÍcáKūzP!?Ηķüé˙8§c“ū ã@Î;ūt œQéū„/âi˙8ĨĮ8ū”Ā^sÔöŖ'Müņ@õŠ _Ä÷ĨįŪ“ž0;öĨī˙Ö @3ŽôsžĻŒg˙ÕGO˙U(ëß­8īGQøúQÛ˙­@>ũé{÷¤ãüŠ\oʘ8īŌ“ŸzQĶԌzwíHgۃœw c<ãōŖōü¨/~ôŸŸj_ËŠíIĀ=ŋ*bŊ(Î{õ¤ãŋ*?/ʀŸSAßŊ ĮˇåKĮ°ãԁ†9īšNqßĨgˇ_J1ôü¨sž§Ŋ'>ũŠX žûRqíÛĩ œu=čä7~´=ģŅÆ{u œāuéAÉõęi8Ú3Žž”§ąÔĐ Ÿ^ԇ8īĐŅųv¤8öčh¸9ī֓'ø|ší֓méÍŽs“Öšr:g Ĩ gøzŌqūĪAC{žũŠsßĩūôqÛojsęzsÔõôö¤8Įđô4š?w¨ūTœãŋOOzCœžŊ}(āáéG?w­19Į~ƒĩ9īßĩ&FßáíAÆzŽy “ëÛĩ4įßŋj _UíHH˙dõĄsߨííMÉĮCĶŌ—özŠoˡøzP4)Î{õôĻķŒķĶԌŒ˙ZN1ü=)žz÷íIųöíAëü=éšėöĻsīĶŌŽs߯Ĩ&F:¯zLއ­ƒîxôŖßŋj8Įđô¤8į…=i ŸƚsŒķųRäŗHH˙f įßō¤ÁĪʏ—˙• ķ֗§֓ž‡=ûRū•1 øöõĨüZ:ū^”yëųR?­ū^´d˙‘Gnũ=)‰äū>´õģ҃ŸĮŌ—ųv : ČZ^s×ŋ­!éßōŖü}(Žŋ­§Ώ§jBxãĐ˙ ŋΓˇSųŌäg˙ąĻžŸũBŸŊßŋz ÷=ģŌĪįü4gŸËøi°ĶŠüčĪ=HÁõ¤í˙ØŌƒķtīũÚ@ÄΝOZ9÷ę{Ōv:vƒ×ņ9ųi€sę{w¤íÔ÷ī@ü; 'oĪøi \ķÔõõ¤ĪOOZüģIÆ;tūíœõ9Ī­4įhäôũéO^ŨģH:vč?‡Ū† >ũûŌsߡzSŒwūB>ģPĀ 8<žũésߨīH˙ÃAžģSįoVéũi9žsGcͧ÷}é§í×ԁÎ:ˇAüč9ÜynϐāŽŨoz?ˆôę{P BOŠíHI÷īHpxãˇđŌ6?Ų={P€SžÅēJiŨŽ­ĶڎíÛĩ7ÃųP^sß­'>ũ(懝÷iœcøzzPq'=[ŠĻķęŨŊ( gŊûRqūĪnԄŸVīG9äˇ_jN1ü=ûQÁoáëé@ÄÉ˙kĨwĢw¤ĀĮđôô¤ã?ÃųRyø4“ęh˙ž*CŒģ˙|Đ1y=ړæõnԜgø*N=ŋ*B&ZpĻĮō§ķÅ-8SGųâķŌ€ŪL\į˙­Nüå@æĪķĻņß•/Ž;öĻ!Ü˙‘NãŌ›ųQ‘‘Č ßúRƒ…éúSzŽŨŠr01ŠzŽ3ę}ŠŪŧzöĻqܯįNĪĶŠī@ ?ũjwnžŠ ũ?:PGˇnôŋįĨ;×ĩ3#Ûķ§g¯NũčÃ˙õŠGoÃĩ7?O΁ūčŪŊ?*\AųSG§­.y˙ė¨Ā`˙õ¨ãũj1ūwQÛđõ Āöīڎ3ĐRsüûŌķž˙'íKĮĩģūt~;ŊQž{ūt~?QÎ?‹ŋz9íģķ ŒvéKĮ|~t™8ĪÍԌŸ~ôqūMc¯oZ\ŸzN}ú{P\ŽyûŅĮ_§z9Ī~ū”|ßívô ÂqŽŖķŖŒķŽž´sâéíJsū×Z`&Gˇnôc¯oZ9÷í@$ƒ×jCÄuõ¤ÎG˙^—<õ=})2qß§Ĩ1/ōԏ¯z8Ī_Nôsīßĩ&OzŽÔ0F:ú÷ 7ãëAéßŋj^ũ}(&xOZךīFxīĶŌĪŠí@ ŸéŪ›‘ëØ÷§}ûvĻäãķūCę.}ûúĶsøzĶŗĪ|įŌ›ÛžqũÚbB“Īŋ÷Ššã“Øw÷ĨĪ=ú˙v“ŸŨ¤8ö˙žhŸSÛŊ!Î;ūt™į˙ą¤?įå¤^ũ{úŌd˙/âŖ<˙ö4‡üü´˜icL`šõĨIŖaËÔÕĄæK=ũégŒC ÁoC@EÄEąŊ:“z’ÚĒcˆÂ>OœŽģĒė֒#í8Ļ Ôc9ãëJHÎáųÔŸôE˙vĢÃÅŦ˙eķ*â˙ĩR 8#ŋzË´ŗŽX7¸l㌒͊<Č Ú â‹ \É÷ÕWķ\ę ž\zÕkxVņšI7sũÚtˆuƒ8Įz`j߇zŠqpņÜDŠØ ×ķĢKž:öíY—Vëö¸×saúŌÍĖΡ*Ÿ•?]Ũķî{ÖMäA^”’:gŊ:âĪȋĖI$$†˜\ÖĪ=˙:]ŨšĪŸ-ŅK ø&ĄHĄd n˜Ž(¯×֝“īŪ¨iķīWCƒˇ€}jéû­ĶŒö¤1ĐyÍ(<ŊĢq<­æ\y隱h­¤o2'šhäČ?•îīÚ˛Z_´Îéæų!8ëւÆÕԋ8ŒfĻlgØöíH§ px•q+Ír°Fvd¸TwĪoņrÍĮJvÍcŸCßĩ;ęåYr´†Ę)Cžø=jâNĻßĖãķö¤ œ}?JIŽ:ÚŠØ<ŽŽÎĂxÕŠqå?N‡Ŋ5¸2+šh‹˛ķcVr08ũ+Ę)åE7–šĢË-ŊĘÅ3™7c=)ĨÁũjųâŗŧų#Ŋew,÷FzTē„íacbž ĶļĸšoˇáéG?Ĩ6=ŪZî9;GzĢŠM,1)ö’ĮĄ¤†]ČÎ8ëéF@āqéYĐ}¯p•æ ŊÆyĻŦ—7lūLĄUxÃbš§Į^:žÔ™ôģVrĪ=´á.$Ū@§Ŋ÷3Įr‰ íŧŅ`lĐČöĪԜHĪQÖ˛Ĩ7ĐÆ%i”¯ĩ9úá<ØåP‡Ļi§‘íڛ ätĒvwlöÎōą%$T)-íŅf…ÆÎŲôĨaÜĶČĪn´œ`ôéYđÜĪ Đ†éŗž~Z_ĩL—‚9ė|mė$ËäŒöīUî§0íڅōGLĶu —ˇ‹td†$€O5 ÅÄņ@Ÿ˜‘E‚åÕmŅ‚p 9ĨĘîę3ŸZĪŧŧž‡Ë<ŋ\ŠlŠ"[föĨaŗG€#§­)#ÛŠīUaģiæŗ•~l Ŧŗ_\åáÚcÉÆqL.i¨íېíĐ÷Ŧčo.ūØÍˇ¨´y#øēJC!¸šH>đÎHči—q&3ōôŠjžy‘xų21žš§Mįũ€ųã/ĻJeøeÆ˛p3ؚvFč;ûÖUŗßŧ å"”bÂōIÃŦ¸ ˜QIr=GâĻäzŽßÅTfŧî+PÎF)†æōŨĶí*LJ8Í Đ'ŽŖĄū* ę;ĩ"°xÃ)$pqNcĪVíü4 Š{t-UIÉ,?…ŠmnEÄ^`Čųą‚ÕFe7׆>JÆ;imIĩŋ6䐧‘‘“LF–xę:{Ū‚FHČęŠĢŪÎöđN¸ū%÷Ēkq:y‰ õÅ!ŗK=2xãøŠ^įøĒ­ã\+0p0ĢPMyq%ÃÅlŠásۚ.îžÎä䎍RŖo@ŪŖûՑy5É+Â*gYēē’ÚÚ"€Œr´eėķ÷‡_īSsĮQĶûÕF›ļ‘]áP™äL7w3HËo¸^§ $ōrG_īUYîŧŠ’<1ŨŽÅ@—“Į0K”XĮŽŪôû›—[ˆU*ØÉ+@‰ã¯cüUĖÂŒ™' j‚îíãa 3œđVĒ]Iyä0– ¨zœP„2ųĢgڞÄ˙øõCfŅ“¯ŨôŠ\„sßøi!˛”Ú€W*ĒÜwŖ]GæW?Go/Ųea/˓žFjÄĶAtäû.(š4Ķ„„ÉÔgŗU?íGܓķŠn"ōŦJ ظŠ,î¯Aچ!e˙ˆ Iy4a”tĢGō§:qĨ!”ÅäbnųņŒb˜!qi#÷šĢžTdįbß4đ̌`cԘ…ÜbÔ(aŧ.1ŠH9˛•ŊE\đ˙Ī4üŠâ8• ĄOQ@ˆŦĮú"ņÛŌĸˇ\Ü\;zUÅUU€ô4ĸ4V.ĒäƒÖ˜u)ŲȰŽRŒõ§$Ģ&¤ @^ĸŦIo­—@[×4č­Ąˇ$a[Ô˜cŽĒá w8ĀĢèü;ÔrÁĀyŠ[ī@nˆk¨ F­ZŊ˙vühû,Ca ~OģÍK",ŠUÁ įŊgN¤éč@Ī5p<˙wo!ąĐ¯–Šz š\ų/ÁûĻŖsč>•#&PŽG Ž” ĩƚSƒÁœ†=Š—,Q€ äRŽ™´’— 9ė*kkE…ˇ3‰ŽXr(2=F3˛9ĄÉ¨ĄĩßęĒ:VŽdŒBęY3ƒÆj-2 –û˜I=i‰ĮN‡ íTuQōEŸīzUßĻ;Tvßh ÚsI¨ųî͎ĩeŲ[ŦÂC– A[ vœ{Õ˛p堘DP(ļĐ$ĒGž†¤¸ņ4€uāvŠ!˛a)’y^¸ÍI%ą{Ę2€¸Í0¨įėŋ‡ĨIfĩN={{Qu žŠ@8ęM>ōĄH$gŊÖæ\@›Kœâô̚k)ĩ`ŧņīKmjaWW*ÁÛ8ĄûÄnÆŪe8Íę7Q!ŽãEÁlŒ€9§j"™s”ž)ööŽŗųˇ ˛7¨<ՉŖķadėFZ‚zÆOļÜnjm_›Š—TÆÄĀĮ#ĩIedÖŦÅļ–9SNŧˇ{…P¤pGVĸãkBįŪĩé×Ō´n0an>•ZâŌIL$ũß\šˇ*—B žÚ  ¨ä7Ō­é˟bsÎi ˇ0Z:ÍČ#'iĒņÁp2ÖlŠÎ<Ķd*uXļFqZ'ŨjƅdRŒHrĮĐÖÎIÅĐ÷Še"†¨GÉĶī [ŪlFûĩ-ũŗÜE„ûāŒdÔEÛÛ4rxųpE2lObŲ“ūĒŖj6ŨÎ1ZVčŅD¨ŲČô#ŌĒÁk,w2HÃå|cš×ų"G’ö]˛ygŸÆ¤¸ĩv–įĶīU‰­'Kƒ5¨Ã乨žÚöæEûHRƒÁÁ Eëu l‹¸6Í%Üĸø8Įzz.ČÂ.ā :U]Bîd|Š#9Å$6gÛ,›ž`HŪ3Mš$Âⓐq[0ĄŠAģ…Æ8Ļ]ÄgŖųŽOĩ0h§{ ’ÄGŨęŞŅlƒ Ž{ÕAiwöF‰—§ŨĩzŨ8U0#>”™iōĪ8}iÚh_>bÛs“ÔÔÖÖŌĮq#:ŦF–×Ü<ļŠ’s’ؤDÕv¤mŨ‘ĐÔz€ÍĩŋNž´“[_\Ɲ,cåĮB*{ģiĨŠ%E$¯\â€DŽĒļ‡n3õĒú^ß)ĪËģëÍ_ØJmĀgĐVoŲîm¤fļL†ęZ†Ģˇj‘ˇvîĮšmˤ[Œöæœ-n..Ũ!Āūî*K›y^æE%S40+&¤ÛąŒq“Vu ŋe~ģĶo-]Ųe…XČ=zTE¨\&ĮEĮļ(ęĢ2>˜ģëRĘáˇÛ4ËtxāEl‚L ‘†āG͏ ¤†Ę‘˜.Ôą‰ēry¨.mUŧr"cœ Vĩ¸†]ÖéÁįæ4׆öl,Šģ}ą@„ŗé­ģ“ž¤Õ‹2ĸåsĮzY-H´0įBEVH/ŖPǐ͏ʔL)Į?­.đ;ū´ūãüiA÷ũiČԊ`ÅįšQūyĻįŋ•(į§ō Cúæ—˙¯MĪųÅ)Į?jw<ŌŽŊú˙JnzôüŠAԘ‡ŽŨ{v  ËĩUy\\ĸ*|§nԍˇI>đæ€-㎟Ĩ/ŠúöĻäzĪŪ”‘Īãہī˙ÖöĨáÚĒÍp"•PäįĐûU€}ũ;Đ.ƒÁíųP{ôīÚĄš_&"į8ą§Å – ã8 ‘ÍԗŒöīJ1íړwšīßڀO|öī@ĮnŸÖ^čįúQĪŋz2H"”Č¤úšŽ;HT‚Q1Vy÷ë@Ī{PHƒcŒ`÷§wü}}Š=zôôĨĪʐØŋũnôv'>ŊéNųãĩ/n˙•úúŌŽŋ—zN˙Ĩ<~Ј¯-œRÉŊ“'ëVFp:sGoÃŌņôö bķīŽ;ԜãŋziëÛˇjLqÛŋjxüzŌsŽô‡ģuô¤Āöü¨sĪ^ôs‘ÁíHp āw č:Ї!z”¤CÔöĻņĶĨ/ŨéŒ?>ŨŠ9÷ééGŨ¨íÛ§­ ŊAúQ—ŋnÔqž@ëëMĪĶwĻ/øãßĩ'|ã¸íHHį§~ôg8´‘1ŠåPKæãéIéϐHãh=ĶB"^FcžpzĶÂHéxČėJąã4ˇRš™#°sÎ)/”ŠIGđœšmĻfæ=â€$æiĖqžĖ äô5IqlĘ^`ęN0 ,˛I5ÛD¸Ú9¨nĄX]qŲīLEĶ;‹čĐ7ĘW8Ļ9˙‰”Xôõώü„b˙v•øÔĸΧĨ9§¸šVHHNęQ=Ė2ĒÎF‘Į­Gæ=ÄΊ˜ pJÔRÅå\Į—,wrjŗŠ!_Ŋž3Jķ^ÂĸIvŒdŌŨ•[}*{˛ĸÕˇc  C.¤ßb\g•ŠVāCe?1R#­Uŋŗ[>ƒˎmí†qG@.y× o0.*å´Ë<{QōgۃqĮ?ĘĻĶŖōĸaŧ0-œƒH Ŗü=)N9ü{SAū^´¤õü{Ōî˙Ĩ:Ôwü}h§áۘ…ČĮn”ŊjLũzzŌįųúĐ6(Į\ŽÔ~Tƒ¯~ÔšãŊí֌ŒõģĐIį¯ZnŊ¨dc¨éëJqíųŌvīŌŽs˙Ö až:úwĨ=:ú÷¤Ī=ûv¤'ƒøö g'ņõ¤ė?ôsŸĮŌ“¨‡jlHRO?z\œ÷ëëM<ūŊŠGQõ¨āuéëJI÷īŪ™ØtééKߌwí@1y÷íIĪŋJ'ˇQړąéĶĶېÅ9Ī~´œãŋAGí×Ō“AژŋāįßŊ“ß¨Ļœgˇz8ĪAÔPĀ9Įz_âī×Ō›Æ:”t~Ũ}h‡^ƒĩ/ŋ=OjhÆNƒŊ¯nũčOÃĩ'8īĐöŖ?NŨéô=éŊ9ëéIĐwééG¯­'aôū÷Ŋŋ~ŋŨĻöüj\˙3üTŪÃč?ІRy?đĶO^}ŋ†—šĪŋņRũ?І13üđĐzŸ¨ūj;~ÅGį×ûÔoQÛ§÷i2 sŽŋŨĨč'§÷¨'žũŊLcN0xjF<öę†ƒĐōzâĨĪ8įŋņRŊģvíM${wūJOšíŪ‚ON{÷ĄûvíMãÛōĨ$žĨēúŌgëĶց īŽ:úSxöéčiy>Ŋ}iÔūt‡íßĩ7Ž:vėiÄũ:N}Oį@†“ŸOČŅߡåK“īųŌdįŋį@ÆņŽß•đ˙ži{wéëHxõ˙ž¨?ĪŨ¤?‡ũķK“ūZ“ˇûę€×˙ą¤˙?vƒū~jCé˙ŗR`LĒ8ĮˇŠC–POÖ¤Šh‘B‘ũÅĮãRö˙ëŅ@ Ę'bÄ6OŊ*ŲD¤0Ũ•éÍN?Ī´Ų#FUŗƒDŦ1íRN3ÔSŠŪŋ0+Of$Č”û iĶÃfbAęE\õĨĪķõö DfĖé.îTŒR›}×))aōÅN;(éųP&ŗHĪÁ7r@ĄŦ¤gWi`IĪ­^˙?­û÷  ×v­pFփÜĶ ĩ˃d˛Ģ&GĢÜįķĨüŠ‹Ąļåí|¨đäĶ^Ķ}˛!Át=ęČ˙ÔŊąė{RR——ŗad#šĩm‚"Ē$‚yŠ1Īįڔuč;v Dvâe æãîãŌŦzõīLüģvĨüģĐ1ųįŋ_JnŊģSxŨÛ­(č:v CŋÃԌķøúSsĮnŸÖ—ŋãë@ØáëôíIŸķŠAūčĪũz‡gųžÔšé͎jBy<÷=čäuíŪ€ ŒvééFA9â“ũŠI8īHBįžŨ}i20:vīG9ī֓ž:öĻRF:ŽũéAí×֚zwīK“žũ}(ā}=h˙ë÷ĻķôôĨ?ãڀ ˙Nôgƒôõ÷Ŗ<ū]ŠCôô÷¤÷ü}i3õíŪ‚yü})OËĩ0Bœķ×ŋz\Ÿ~ŖŊ4ũ~Ôw:ŽÔdãŋOZRNîũiœc ééKÆ{uô Pį¯AG>ũé;'0;Đ1ÜäuíHsŽũ gˇjoyĄ¤÷ī֓œwééIÆz´ƒíԁęˆséIĪŋAڐūûŌgŒqÛŊ64/ŠįŋjN{gv¤'¯Nũé2§nô˜ O×ŋj_ūĩ4ôüzN3øúĶ/nũ?ģAëø˙v“¨ü?ŊHzū?Ū 'åīÛøh=N=˙†žšöū*_ĪøŠqüŋ†šHĪ˙ÃG˙[øŠ:wõū*y˙ėiOūƌƒų˙zž?īP\ãķūí3ë˙ Ōœ–¤Î?ũĒ3Īįü4™Ī˙ŗA ŸĪøŠ?ËPgūƎ˙ũã˙˛¤?_üz†p?ûã˙|ŌŸŊFx˙ė¨ü˙īšNŨ˙*B~‡ņ¤ĪĶķ cëųSN}˙*?/ĖŌ~_ ,”ĸš)€cüŠZAE8KMĨõĻ˙ž´žŋzOZSū4u/ĮúS{˙õŠ{˙ŸJpā˙õ¨áڐv …;?įžŋ4__ĮŊ;§ëJ?Ôßķ֜1üŠ‹  qĶĩ;ōčiŖˇáJči¨ėŒžûĐ?—zOūŊ(?ĶųSšā~és×ņīIžáFx?jCę;øŋZ>ũŠ?‹ņô zũ;SîĮ¯OëKČõëL=?Oz\įԁąßŸj^ŨúzSAúv¤ČĮn”„‡äū§ĩō?ÔŌ™ĨČĪåۘ z§Ĩ˙^ÔÜüŋ‡¯Ŋ/sø÷ bįúv ‘íųRwÎ};ŌgŒûzŌâyí×Ō“Ž:vŖ<õīë@=9=ģĶ?‡z_âí֓'Ô÷ī@'w~´FŪŨ(ČöīŪ“<Ŋ(Ī×Ŋ.Gˇ_ZOá=:zûŌsīKÎ9ĪOëHüēúŌgúwŖ'ߊíIųöíLBįú÷ ېžŋjŪQځ‡8ü=hū/Ä÷ĻķÃŌ”ũīÄöĄęņôčÉ÷īŪ›øzvŖ×ßĩ;'=ûwϜāuč{ŅߡQښž”€w9ī×֓'úRÉāuô¤ãēzS8ä˙{Ŋ7Ÿ~Ԝ{u=¨ãÛĩ h\‘ũîô‡9ū.ŨŠ ž:BF{v¤’qߑéIÎzž”„ŒvéHzöëëLBžúzQ“žũ})¤ņÛĨ!<öëë@Å=;öíHr}{öĻņíÛŊŨûŌOãÛĩ'8īųRgģŌ=ŋ:\Ÿ~ž”‡ņü¨$gˇ_Zi#GOZSøõūí&~ŋ•&sé×֓?O΀ū?•'~˙•QßŊ4‘žß/įųPsž˙•7#Ûķ ‘ĶÎÎ?‹ō¤įž*8öüéĨ…ü˙*N{nŖjo‚ ĪŋéG9īHyė?*?ųPũŠE4QÍ>–›J)€ã@¤Ĩ Ĩ˙ëŌRįúĐ!E/øĶiGųü¨Āôü;ԌãōĻŽÔŖˇá@˜îÔŋŸzoj_ūŊ˙×Ĩ.ŪÔßūŊü?•1téøvŖüjE=? ūŊé¨ū=ģĐ1íÛųSsũ{ŌįōĻ!Ā‚;vŖ#žéšãōĨĪõ }Gnž´ ˙NôÜķųĐ ãđ CŗĮáëīKŸæ{Ķ;~֗×ņí@1āũzŽô™ãŋOZoøŽŪԝ;zPÎ}úšPyīژOõíG~Ũ¨îŨúZ įŋzi ÃúŌņ“ĶŊuž{öíF~_¨ô¤ČöíIž)ĮŌ“ž>Š äôëëFzgÛŊ0ūŋj^ũēúSsĮįŪ—?7ãë@˜v:Ôg¯NũŠā}z ūŊčšŌŽŨēZ@Ÿ¯ĩ&xīĶ×Ū€˙€8‘žŨM!ëÎ;QÎHOûP!r=ģ÷ u:úŌdû÷ õīց°ĪēzŅ‘ĶŽ§Ŋ&N;ôôŖœįž§ĩv‡z ü˙Š“Ÿåڏ_\ÔŊ˙/âĻô‡÷ŠsĪåÚ›ĶˇoJ;ŋ~ž´Ūqß§­į§JNŖđô H_~{÷¤$ŽÍÛŊ'ƒŋjBG§§jÅ9÷č{ĐI÷íM㞝j8ôģP&ãøēPsū×ZiÆ:ž”wí×Ō€œsģĨœ˙ZN1Î:zR3Û¯ĨqÆîŪ”sū×zNŨjN=ģŌy˙h)9˙kô¤ãڐã¨)˙u¤äâü…íM8Įj`…''øŋJNÚũ(ã=Š3ž)ûū”ûū”œcĩ'Ëí@ “ū×OjBOŋéIÆ:ʎ=å@Ã'Ū“ŸΎŨŋ*OĀ~T'ßķ¤É÷üč8ô•'ā?*9÷üčī˙ŲRcüâÃô¤ũ¨ĻŠ\ĐŠsMÍ:˜ KūzŌQ@‡ô¤˙Zm/¯ã@ š\˙?éM˙?Ĩ(4Ä8vü(áHOūĩ ž;Rįü{ĶyÅ/˙^˜Įgú÷ĨËŋĩ7?֔Q@…ŊŠ>ôŪÃđíG¯ã@úĪ×ŋj\˙1Ûڙžŋ/˙[ųP!Ũŋ.Ôv?jhč? 3īëہīÛŠūTôíI߯¯zūčėņÛ§õŖ?NôÜņøZR­Ô\ķÛˇz21øzŌgŸÄPzĨ‡g?¯z\ō>ž´Ō¯j;đ Cģ~žôd‚z÷īL'ÃĶŪ”žO§=¨QēëڌņßĨ'üģRvü=(Ų9ČĪSFN{ö¤ČũM;PįúÔdîĮ=})šãˇCFyëہ1sĀúÔ×ņíMČã‘ĐwĨĪĶŋz.yü}=¨ÎGáéIŸ~ūžÔ™ãđõ ?ā${u=Š ŨģRgœûžôgŽžčŋ&Gųœzʐ Î{ūtœ÷ĪįGˇéHqéúPĪŋįAĪŋįIøʎ=?Jûūt‡ņüčã?ņÚNŖ§é@ ûę›Û˙˛Ĩü?J;õ¨‡üüԙúßT§ņüŠ9÷ü¨ģ~t=ŋ:^}é9Įz@J)ÔĀiŲ HpĨϚZcŪ_ƒ—ց ii3ÅĀp<õčÚZpíøQŸéMŋ PxüŋĮgü┞ŧzĶsA<ŸĮŊ;4ŖđíMĪ?ũz?ʁt;~ésüzh=? 9ühQį¯įŪ€˜īíMõü{P:ū#ˇĩ1ĪNŊ¨õëŪ›éøvŖ=CO?‰í@<Ãĩ7ŠüM(?NÔÄ;ˇáéīA#ųöσüŊ}č'¯ãŪ’Üp?NŖˇĩātéIžz÷č }=hN=;Ņ‘žŨi¤ŸįŪ”uī֘…ĪēzûŅÜū=é2HīĶúĐIÉëŪ‘Cįņé3Á˙Nüį¨íGøzP/øŗÉëßŊũéŖđč(Čöī@É÷ëéíFO¯oJiÆzō(Īē ūâqųžÔđíMČĮSیûŽŨé€ŧãˇCڌķÛ¯÷iŊēŽž´gŸĮ֐1{cŽž”ųĮ~ԙëÛ֗<õõīB/ėöíM8˙gĄĨ˙.ôÜũzô ^3ü=i20>īJ\{õõĻäãŋJ.FONž´™ôč;Ԝ“ži¤Ÿ~Ū”dvĮ~ô3Ûˇz9ô=é2}nԇđéũę;˙öTúʎsĐõô Īũ•üØ÷ūõģūTŸÅ߯ĨÃˇ˙eAĪâ¤įßō¤įŸĮĩüũęCūyŖëŸĘū?•į_īRã˙¯GĮŌ“¯˙Ē€B˙÷ŠŋŸũõAÎúÔsūE ‘˙íRgŸūʃŸCųQÎzʘ í˙ŲRŸ_ũšŽ}åIÎ{ūT ?ĪŪ¤?‡ũõKĪĄüŠ}éqíųŌqíųŌäįĄ¤įŪ€o΃öir}˙:NÉ üŋ*:įîūTgßõ¤'ßõ¤ĀkģŦáqōšŗL( dŽiâ!iŲĻg­;4Á ž´´Ūôš fŒķH(īLĨî? hĨ$~čÃˇáHũz@ĨŋĪ­Įgƒū4¤ķßŊ7ĩ)ũrhÄķ@<ū]Ššæ€Ĩč;ĶđíJ?ôĖôü;Ōį¯ãہõO_Ɣ§oåMĪõīKž.ūÔÄ.xüģŌį¯ãŪ™ųöĨĪņ¤ŗĪâ{ŌįĶ=Ššįņ=Ŋ¨§áژēÉĮ~ŸÖ”“Ī^Ļ™Ÿ—đô÷Ĩ'¯Nô‡ÔpČ ûŽÔ ãđôσČéÔR8Æ:PyëĪŋj\üŨŋ*a?NũésĪ˙^˜…ŽŨ==ésÉéۚ€īīJO'ņīHĄr3Û¨Ŗ zRsŸÄw¤ÉĮ~”˙v~nŨûŌđīMĪ=ûŅÜuę)Œ\ņøzŌįŸūŊ7œwééG~‡ŋj1AúöīF~ŊzhātôíG¯Đö dûõõö “ŽũŠ3Ī˙Z›Ā—j@<“žũčÉ÷ę;SIŨûQŸ§QLįúzQŸ¯_JnF;t ‘œdu šãׁڂyü˙†›‘ŽŖķ ŸLwīBsĶđūN9úv€GļxīIŸqĶ֐ ‘žŨģH@Įnž”įņūõã¯oZ=ŋ*LAڂ}3ųҟ¯nôĀN1ü=čééڌŸ~ũé9÷ÎGz@ũŪ”dü=}hÉ÷éëIĪŋ_Z‰Æ;~td{~tãŊ&N{Đ0ĪĶķ¤üģ÷ŖŸzC;Đįžß&qéųŅĪŋZNqŪ€ ŒķŽž´™ߝ/$÷¤į˙JséųŌd{~tsīG9īH$cˇįGߝãŊ&N{ūtĀ=ŋ:?īš9÷üčÉĮΐÄãڐãŋ*^s˙× “ëúĐ!8öüŠ8ö˙žisūsIŸ§į@Ãō˙žhé˙ėŌgÜ~td{~tŋįîŌž”dzÎ“#ړZZNôš BŅIGųéLw˙ëQMéK@ ڗ?į4Üô˙Py ôëJ;~Đháڀųŧ˙[Ū›Fx˙>´ĀvzŌ’~ϚO_ņ ŸëŪ€žúūÔ ûúwĻg‘ū{Rƒũ(AŲé֌˙Zooūĩ/˙_ĩę;˙¯Ú—ŋåÛڙŸ§z\Žŧv Bú;vĨ8į§zn{ņÛŊ.zū=čÃíÔ˙*Œ~]é3ķ~}ũ¨÷íLBöü=}éIūŊéŊģôū´§ņīڐúŽžũGz3Į~”ŅÔ}Gj;§Ĩ‡dķ×Ŋ.N{õĻ×ņíFy:úSņĶŋAÛې˙jnxíĐ:=yé?€sî;{RÆxüŠ3ČÎ:ŽūÔg‚?:8ãÛŋj2:v¤Ī=}{Đרī@ ‘ŽŨ(Īnũéš8īĶ֗$v=čAÔQåŪ“?×ŊŸ~Ԝûô4ây˙ėŠ3õíŪĀūTÜņߡj8“īßŊ.N{õÅ3?×ĩ(?ĪԘ “Žũ=Eįŋ_jiéøzPzöëéHl\Ÿ~Ū”ÚīMč;víGnŨûP˛sߡjLņß§Ĩ #=ŠšíŌ€CųĪãéIž?îŌdgĩ&F:Î€OųÛI˙ÖūBG¨īېļ};w ō˙žhãÛ¯÷i ãˇįFF{uūõÃˇoûæŽ=ēúRžũŊi įņõ ŧzʃŒöüŠ3Į˙^“üũę^=ō¤;}ŋ*?֓ˇ˙eH`qí×ŌŽ1ü?•įņõĻ“Ā˙⨧‹ųRqūĪåFÎę ˙;¨Ÿ÷ĪåGƒōŖ9ī˙QŸüz€>Ôqč?īšLũ?īĒ ˙;¨Į°˙žhĮĶūųŖ?OΓ#Ûķ¤ãŸĮû´ž”™ߝ&Gĩ0 īųQĪŋåI‘íF~Ÿ•!‡>˙¤įßôŖōüŠ1Ûō ĪÔūTsŽ˙˜¤˙=(˙=)˙Ųleptonica-1.86.0/prog/underline5.jpg000066400000000000000000000443261506303110300173100ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ãčQABŌRŅ@ E-J)hÅŽųĸŠ%´PiqE”RâŒS´RŅHBQKE1Ŗ´P!RŌJ(ĸ€F94¸¤4Ä6ŠZJ”´PQKŠ(”RŅ@„ĸ–Š%´P!(ĸ–€Š)h”vĨ"’bŠJ)h ĨQ@ P:Қ("’–‚)”RŅŽiŒJ)i)(ĸŠJ)h Š( bRš( ĸ–’€ (ĸ€ (ĸ‚Š( aEPEPĘQEQK@ KEĀ) -”wĸ–€E-J)hÅ6––’€Š\Q@„¤Ĩĸ‰F)qE’–ƒÍ1ĸ–Š4Ōu! Ci)ؤ ĸ–ŒS(Ĩĸ EŊЈm´P1(ĨÅJ)hÅ%¸ĸ A´S(ĨÅĨ%QHQKE6ŠZ)€”RŅHbQKŠ(”RŅ@ EPQKE%´P1(Ĩĸ E-%QE”´P ĸŠR(””´PQKE!(Ĩ iBJ ĸ°úRųf˜ ĸŸåˇĨ/”Ū”jŒÔŒŸ.ilJyÛąÅ0+ŅS}Ŋ)~Ėū”€‚ŠąöWô4ĸÕĪj­EZûzQfįĩSĸŽ‹'ôĨû úPAĢ˙`oJ_°53ņIŠŌ{zR˙g531F+Sû8Ō4Đ#+˜5Ž4Ú_ėÚĮÁ¤Áô­¯ėÜR˙fŠÄÁô¤Ú}+sû0Qũš´ĀÂÚ})6ŸJßūÍZ?ŗR‹ŠÆÆôŖaôރû5(rzQp9ũéFÆôŽ‹û::?ŗŖĸāsģŌ—ËoJčŋŗãôŖėúS¸ī–Ū”yMé]Ø#ôĨû~”Ž9ŋ)Ŋ(ō[ŌēO°ÅéKö(˙ģEÂĮ7äˇĨKzWIö(˙ģGØâūí›ō[Ō!Ŋ+Ĩû^”}’?îŅpąÍy GŪ•Ōũ’?îŅöX˙ģEĀæžÎū”ŋgJé>Ë÷E/ŲŖūčĸácšû;QöwôŽ“ėÉũÚ>˟Ũ\oėīéGŲ›ŌēOŗ§÷EBv‹Íũ™Ŋ(û3WIä'÷E'ŸŨ\pÛ5fzčü„ūčŖÉOîŠWû3cĨ'ؚē/%?ē(ōWûĸ‹…ŽwėÍéGŲ›Ōē%ē(ōSû´\,sßfltŖėÍé]”¸ûĸ“Ę_îŠcėÍIöfôރĘ_îŠC˙tP#ėÍéGŲ›+{Ę_îŠ<Ĩô ,`}Ŋ(û;zV÷”ŋŨ†%ūía}Ŋ)>ÎŲ­ß)ģHb_A@ŸgoJO!Ŋ+sĘ_AIå/÷h‡ä7ĨKVߔŋŨ¤ōWû´ÅōZƒ zVĪ’ŋŨ Âž”\ _)Š<Ļ­“ zRŌ€2<Ϥō›Ōĩü„ô¤0¯Ĩ+€ëhCŽjČļZŽËĨ\#N¤"Ų})E˛ÔŠ„@ž”ī%=*JZÉOJQúT”ĸ€#ō×ĐRųcԟK@†l”ú)€Ũĸ”/ĩ:Š@&Ú\RŌĐqF)ÔP!¸ŖęZn)E-.(eÅ7îMÜQŠv( âŒSĀâŒS˜ŖėQ@†âŠ}&((Å:Šn)1OŖÜQŠv(Å Š1Nĸ˜ ŖėQŠ@6“üQLbŒS¨Å3bŸE3˜§Ņ@†b“úJ3bŸŠ čÅ?”€f(§QŠf)1OÅ&(¸¤Å:Đi)ô”ÃAėRS´†E i)æĐM&)曊n)1N ĐiZu! ⒜i)”†I@Jē*•CW…4XS… Ĩ ”P1KŠ1@´´”´R— \QŠb—´HĨŖJ0h1KŠP( BQNÅ ÅĻČá:šls#œ@KŠl’ÆI¨ãšGl(p(Å(b€“Ų\F2jē^ÆĪÃ4ĩŠ1N#"›!ڤЊ\UíÃí,3WŖ`ęĻŠ1OÅ&)ÜQŠ~(Å7bŠ1@ Å&)øŖÜRbŸŠ bŒSņIŠf(âŖē“ĘŒˇĨeCĢ+Ė=N)°@ŖŠŠâMoöŦ¨õui‚gž(kb„;Zv)ĖQŠv(Å3bŠ1@‘F)äRb€Š§b“ÜRbŠ1@ 4„SņHE3˜§â“ÜRv("€ŠLSņHEŠi§â“ĶM§‘IŠ4ŌbŠLPMâ) a”üRHCi§b“Û†¯Tl:žÍĸ›' M>™/Ü4ÎkŌ˛m÷­wķ57úķõ­Ģ#ļhŪ)jŠģElÍvŠ3šĩKŠ ēŒdāšģ× æÅ(ĒĶ\Ŧ}MUmMEjbƒĀŦČõT-‚jķLëÍUŧģņI§\™ÉÉŦ›û,‡Ú‹ ¯"Nzę1EUJaßT&Õvą 3@špĪk˛ž†¯ØjKpÛO€Ēd@H8Ŧ}:gk ÍlęŧÛ7Ō°tßøüZcFöĨ‘jHôŦ=>W7`8ÍnęCũũ+žĶ˙ãô}h× ųE;‘SņH :ˆ?gĨrĐ;  7ĩÖj#ũž•ČÅ˙cũęĀŽÎÜ ŸjK‘û–úS­ŋÔ/Ō–ā~龔!TĖEÛrz×[§sj¤úW#s˙õŽģMæÍ~”úˆŗŧg ēŽĻší^ōX'ڇZ”ōGˇŊĶy˞´đC Šä ÅА$f´tÛŲRįɘ䔀Ü2(8Í=HaÅsēܓÛĖ…5&~ōģG+döĻĐĮŠÎLã"‹§Ų>ÕÉÉw4ˇeQČůšįUęERĩŊˆi8Ŧī&ē”ˆÉ‹ęÔyûÂĻV85ĮÉÜkŋsb­i:Ŗ¤Ë§ƒŪ“CGAxĄ ÷Ŧ8l\ps[WĮ6ŒĀõĘA<Ÿm_œũę`ŽĸíqfGĩr1ĮØ˙zģ ‘›šŊīSčNŌÜ~á>•&)–ßęéRâ¤c1F)äRb Å!üQŠGŠ1NÅ C1IŠ~)1@ "Šy†€Š1NÅ&(¤RbŠ(„sIŠq” n)§âšh¸¤Å:õ ‘IŠv)(¸¤Á§RB)¤SŠ 4Š )¤īHBbĶŠĻ€c4ūõ *†ĐրĻhÅŲGČiâ›(ų 9Ų˙ãážĩŗi˙߅cÜĮÉúÖ͟üzūtOž@=ęx­¤™zņQ]ĮŅúÖՂ q@W4 ÍhéR1B¤Ōk 6ƒŠMŽh[Q•ŧũšâkr¯ĖF}ę}JČŗīQYĨ&‹ĻE0-Ic‡ųpGĩiŲBë F<Xiw$mÍniˇ‚á0F 1ĩ s§Đš—Nĩ.ˇÃԚ ų!–Ž-Ymļ)æ¨Cdwüõ̍\ˆ#$Ö2ÜÍ;â:b$žļ‰#$š§§1[ĩĮ­KskqŗsÕ{.”{Ō`Ž“QæĖũ+ŸĶŋãô}kĸÔlŌšÍ8˙§­4 sŖÔGúúW7`qz>ĩĶęũ ũ+˜ą˙áõ įe(>”úlC÷céO¤M@fŨž•Į'cũęí/—6íJâXėš'ҍ{íí?Ô!ö§Î?tßJ‡N%ĩBj’æEH˜“Ú„ â¯/_ë]v—˙KôŽFäīžb=k°ŌÆ,×éGQīˆF.EZĐm–X÷0ÍWņÄâ´|3ÍšĻÆ‰uk8ūĖYT^E`XLō_Į¸ô5Õjc6ôŽGMãP_­`[.ąkö‹,ČËØĖm¯ôÁÁŽī`xv‘ÔWĢÛkÖĀ✊{Ąlnę׋ö Ęy"ątx ÷9>ĩUîd–!]‡ívĮæ֐Ņˆ[Ëļ8ŦM>EŽāŊâh‰„8+ LXäš 'CCˇ5ũģÂWĨs§"ãrâČŽĄôģuw*ŠEf%Ų¸g8§Đ:š{üÍ/'ûĩĘÃÅę˙Ŋ]„‘ĒX0^˜Ž>?øūīP4v3ŒØĀkņû˙ŽŌA›ø q‡‹īø `ęvÖßęéRÔvŸņîŸJš¤cqINŖf(§b’4”ęB(¸¤Å>’€ŠJ}! RO¤4ĘJyĻĐqM4ķHh”SŠ(ĻĶŽ) 0ŌS'Jm%:’€Hiô”ĘJqĸ€M§CHDzozŅŗ´Ūõ¤)š ŠIČiĀP˕"ÕĮü|ˇÖļŦšĩü+>âĘC9`8­K8ĘÁ´ŽÔĀÄģâčũkrĀŖ¯ŌŗîŦ]į,§gŽ­Ö€3õ‘ˆę- dœUũFÕŽ#Âõ¨´Û7ˇo˜RZîũ␥č.á1 ÕÛŨ=n>nõ›ũ‘ <LE{õ‹?ģäÕ­“=ŠcŌ$Ü ÖŊ­ĸÂŧhcë¨AŠiˇŸf—æé]%íšÜĻĶYŸØ|õ õY~ŅlyCNšķ ã"ē(´åû7”üÕFДļGJE}¨ĢÃĩ;ŠÉ´l]Š=Ít1hĘŊyôaÆpã=ī69ŨŽrĮū?Ôû×Z-ŗ”ÜŒU8ôhã—xëEšøfĖũ+–ŗ_÷Ģ´xCŰúUŅâY|Ā9Í~!ûąô§â„]Ē;€cÆ žõĮęÚt\3¨Ęší1QMn“ 2ƒM1MĨôöŧ.qéSOĒO:m ŠéG€œí• ŖĀ?„R™°ąyĨ GÍv6Ņyp…¤‚Î8~択r^$‰Œ Wŧ2Ĩa ÖÄÖqĖ~uÍ,ŠÜĄ°D:Šĩp=+°‰—PRAûÕŨē\•\XBpQš:X:’Æ>AôŦoؙĄķe…n…ĀĀĻŧa× 2(NĀp֒4ęOZíŦ`Û¨ö§‹8AČAšœ.VúÕn d5ĮŨiŗÚOō€x5Ũâĸ’“ī(4î8Ī´^´[>oĘĨĶ´É%˜;įŽkĢqv ‘!DûĒ ZhąfPzW$,Ļ[íÛN7zWpT‚*?ŗĮœí\er„ŲcžÚä䰛í…ļœnŽßhІë´Qp#ĩ\[ >•.)Bā`QŠ@7b–ŒPqMÅ?„PH¤Å;˜ â“ėPE3„SąIŠn)§bŠn)§bšE4ŠB)ô˜ LS&(Ļ’œE6€ÜSéĻ€AĨ4¨)´ãHE4ŌS! šB3NÅ!,´Ūõ¤féMiŠĸÅā)8P!ģGĨ8(§ MŖ4 RŅLBb” Z)bŒ Z\S˜ĨĨĨ€LRJ)h˜ĨÅ--¸Ĩĸ€ 1KK@ ŠZZ(ÅĨĨ ÅĨĨ¤qF)ÔS1@§QHÅRĐ(1F)h ÅęJLQŠZ(¸Ŗę(´b—ŊÜQŠZZabI@ ÅRŅLâ“ĩ:’€INĸ€h4ęC@  Šu! âĶ%0Ōq¤4€i¤4ęC@ 4˜§)€ÃHiƒ Ļ‘N¤ĻH¤4ãM4”ƒŠu74”†–Đ1´†HhÜRu!¤:_SZ€V^—÷jŠĸØĸ”P)Ô)i1K@-´(Ŗ—RҊP(Å(ĸ—ĩ´N N RĐ!1KF)q@-¸ ĨÅ.(Å%(ĨŒR RF(ĸ—b€QJ.(´´¸ŖÚZ1KŠLQKŠ((Ĩĸ€hĨ4PQKŠJLQKE6’–ŒPRRš(´”ėRPh4ęiĻR\Rb Hih"˜ "’–ĐM%8ŠC@ ¤4¸¤4ĶHiÄRPM4ĶÍ4Ž(Ļ’MÅ4ŌS%4ŌqϚ!âŌŌPRRšJCHiqIHD_ßjÖ˛t¯õZ¨ąE:’”P §TRHTiĮcO•“rÍ.)ˆáÆEIJà RIQ‰‡™˛Ž+“b” @sNč) 1J "–Å¤ =iI‹ŧbŖ,6œjš(OĨ; äÔ¸¨!˜89=*pAči4Đ'qqKŠi uĄ]IāŅf;ĨÅ ĻM rhJėMŲŠŠCĻiŪjôÍŦ.‡â–‘H#Š:TŒZ)8¤.Á§a\v)qLyuĻ}Ą3ŒĶåaˉąE4Čįĩ(`FE+ÅÅÁ 'ĮTĶåbæHš“#4ČåY™Ÿßã4Xw%ČÎ)qU™ˆģĩYĸJ˜R”ŽÁFMV{ĨĐĸ؜’,†€CtĒļoŊԐZ›2|RUwšÚH4čg}ir´ȖŠ‚[€­ÉĻÅrāŒ|Œ9‘bŠ%ÜåGjI%Ø@õĨĘöÉ)*)ĻŽ}jrۆAÁĻ ė.erŨ!¨Ĩ˜"ëP ‡ČĘņG+°sÍG$ĄE$’â=ÕP‚Fį?…8Į¸œģ‘NI•ęĄ} ’ŧR&^?18ĒqV%IšĶP,ø‹&Ą3ɂĀqP Ëį.RUíî €įĩ1įfr#íG(sŠĩZ;†mqŠuÄûxMē‡15!ĒfYS ʘĖ<ôr‡1-4ÕA$Ž /J[yšGe=Šō‡1"JŲGjyĒÖü\KL’fi !äPã¨^Åž´˜ĒĢ3G(W=zUŽÕ-XiÜCÅ4ķPÜĘP…MBLІ=)ō‡1lŌdUif8u4Æ2FąâŽQsĪ™ĩ˛“oŧu¨3+&ėôŖ”9‹šƒ‘ÖŠŖÉ*ävŠ-œļAėi8č5!tŋõĻĩÅcéG÷Æļ ĐQJ)-*]d8=ŠUãeÁŠduÜģĶ^Ũ äVžĻ~ƒãTāņNËƒžÆĢĀÄnN¸ŠmX|ÃŪ††˜ũįÎÛUæÜ.FŪĩ ŨqC.†i­ z‰žH˜čjiæÛ#Ŋ%Ų<´…UĄũ(ėĀjųœ0lÔŌĘV1ëUäV‰r§#Ō#îXŠvęMúōå+¸5:W'ŪĻYĘŽ• Ž8é&ú”Ō4“nâÕ-쉺RŽ<ŸÂĸˇûJ÷ X†Ų°xÍK<3lchĩ‘C0>´˛|ķŒvĻī­É^A<š.i’XŅ2:–T{G9Ļ"Ôž0MGx›ĸ5$ĸäf#ŠĘ?¤ļ*§îāSÖßzdži™nę*xf_=kG~„+Úģ,•pôǐ Ķ–ĢĒ%šqØ­nI…9.=j4*äîčhšPķ"ŠĢkro°ëĀJ¨ĪZI-Į“žâŸr>į3ŒÂ~”¯°[rÁ{Rjmŧ˜‰•"Ĩĩē ÕK„hįG ֚ŗēb–›Gœ;ÔpHq~yĢ‹î1ę*Ŧ8‰™]i§t&ŦĈ•šų~驉˙KFCIÂņJĀũ¨Roq¤$œ]Š‘Žœdƒũ)OjœÆ§¨Šm¯bĨÄÛĶŊJ!S#ĩ‚Ÿ(æŖ˛Į´¯5K[X¯q,—bēŌÛrŌ}h˛ÎÖ,0M, Uߎ´>ŖDhæbFAŠ"‘ 8āŅæ2š šq–œ°Z[R}[€ķ1>ĩ3āÃt5ւRÐiw<˛ÂĨīr“ŌÁ˙IqEßßO­5ÕĸŸpŖÉ$ĘqĀ4í­Å~„ˇq—EĮZ€ČPëVn7l;UyKJJãŪ…ļ ÷Đ|ëæÄ š„Čҍŧ ™Ŗd„m<ŠŽRŌ&Ō´&&:f‘Ķ5ŧʋڞņlˇuĀ2Ÿ˜Pļ¤×!V*q¯4ŲVISšĒ€ũ hwÁįą5mų?…FĖ*\!ņEŽ;ØK~LSí1šķ×5ņ†ëšs!ÉC֓Ö蚉y*×4Į˙^™Š ¸.zRÜ"°Ečę:ão’~•Lgėĩ+pž)įbÅļ…Ļ€Õõž@úU{sū“&)!HSÅ6Ė…•ōhĩīvIü|KUŅXÜ> [@Vlđj)To܇‹ƒ#’&Ūģ›Ŋ[ 2j˛Ž_.zT’°8 zTŊXքņđ„ôÍX‘”'5Ąy ]ÄÜS°\k0ķĐöŠîHōéM‘c*ę*"ģ¸cÅaä!ėfĻP>Ė>”ŽPŰ]č#ۚ@2×[}i–üH˙Z’&XÁëIPĮ­&1ē_úķ["ątŋøø­ĄIîh:—Š@)H  ×Ģō"˜ģņÕ;@į4}œUĻE†ÂĒ äōi…6š*Ũjoŗ wŲ֎`ąH]åŠĶF¯ `܊˜[­/Ų×ŌŽarË Į"Ļ“ËtۚxˇJ_ŗ¯ĨČv+m`ˇ8ōŧŊϤû:zR‹tôŖ™ Å]Ē8 ÅKûŊ˜Šü„ôĨ'ĨÁĘ1f@›iŠ$iœĩ7’ž”ĸôĨt;2™X÷–ęX™úՑúRˆ—Ō‡+‹”‚GŽAČ¨Ô =ęį”ž”žZúQˤK:€ pÊ„kéJ#_J\ČveE*Ŋ…'îšģ°zQ°zSæ)Y$Ø8SOûAūéŠöAFŅéK˜v*9rPŌÎÚģ´zQ´zQĖ.RАˇđ)|ׯ6ņVvJ]ŖŌŽ`ąTHĘ8SHĖĖrWšˇ´QŽzQĖ+y’ciŒš+W0( QĖĨEŪŊ”™ ÎÚĩŠ1K˜,TĖ„įm.é}*Ö)1G0r•ŗ))ž\‡ĩ[Ås0å*”tŖlšĢtQĖÔĻcõ¤Č:qW¤ÅĖ|¨¨c”õ¤ō¤ [4QĖÅĘT1HzšO&OZļi Ė|¨ĒbŊIä?÷ĒÖ(4s1rĸĄ†OīRyŠ­ŌbŽf;"Ąˇr0^ŖûSÕzŅĖÅƊ 3÷Š~ĘÎ0ÍWqIŠ|ėQKė@ 4Īŗ>q¸â¯šiŖ™‡**-Ļیh6ßíĩHis1Ų~ÍūҤ6ßíĩHhæadUû0õ4†ÕORjÍ!ĸėvE3iĪâjĸ­R9˜ŦŠæŨ}i ˛ÕŠi]ŽÄŨiĻŲ*Æ) +…ˆ ˛RdŠÍ4Ņv!6éIötŠÍ4Šw ũ=)<„ôŠŠ1Jáb/!}(X•N@Š)Ĩp)éŸņķ[bą4Ķ‹šÜĢ{•ĐZ\ŌRŠ@-(¤ĸ J))Ô´´ŅN€RŠ@ihiE 4š ´”š BŌŌ PhhĸŠ@;4Rg4´´´‚ŠZ(Ĩ Š( –’—4QEQAĸ€ (ĸQ@%-%QE%´””)3@ĸŠLĐi(ĸ€Š)(ϚSHhϚ\Đh´))€”†–“4€JJZi4”†–Ķ 6œi(´†–“4€i¤§i4ĀCHsJi3@ HhÍ! bRSHh %-! 4†—4”„RĶúUn °˙ą[ĸ­î>ƒŗJ)ĸ–€J)(¤ԊJQ@ J))E8RŠm8PŌĶE: J)(4 ZQM´pŖ4” p4IKHP)( QIE:ŠJ(h4”´fŒŅEĸŠ(sFi( ¤ĸŠB Қ))Œ\ŌQE¤ĸŠ)(¤ ¤Í’€ LĐh 4„ŅI@!Ĩ¤&€’”ŌPHh¤ šiM%&i -!Å&i3JiĻ€šLԚC@M4ŌŌPCJi´€CԐŌ÷¤4ĀCHiM4ĐIJi(”†ƒŠLĐHii)Ąc˙k[°,˙ãí+xUŊÆļ)i)hČM.õõKRfX>RA5 ZĖP7˜h°U9čik*Úy"šōd9ô5uī#ļąæ‹Ë#­8UešB›ķÅ1/â-ˇ4X.]ĸĄy•1Pš¯EdÚę2NC!q֝%ô!Xq֕‚æĨk~Z_*Qĩęy.6ÜŦ~´XeĒ* ŠL1§@ūdJūĸ‹ip%4U;éÚŦ:f›wx ´ķ}¨°‹ÔÉbfĒZ]‰ŦüÜöĻ%ÃIlîz iËĢ.跞0Ü/”\TŨžM9ŠUŸėRų‘M!6mÁ0š0ÂĨŽ~ÁŽĨ€„āW´û™Ú)~ōšM Ņ4g4Öčk>ŪåÅãB˙…+ĸi ŊPŧše¸H“ŠëP\\K,âú÷4ė5wŪ‚qXŌĩœ+ŗByĢWWėČëŪŽQ—é3š‰XũŸ=ņš­e+I„ž†„´áuÅĪ"šøÅÍÍԀ9 nBĨ#’M&Ŧy u8ĻyŠˆVuüŽķŦ1œg­WŧˇšŪ ņš÷Í4…sd°ÆsÅ0ĖƒĢ ĸecĨīĪ͊§mk,öÆGsžÔYX Ŗ*’Êę˙uŦ[8Ϗ-Œv¯%–ø.Ú"IŠ4Ģʉ÷˜ jĖ÷XĪž/6re|/aUIX/Qb|ƒÖ‹ŠrĖ0zš†ōfŖõ4Ëį!âĮ­7PëÖĒĀhTSŒ“JŸp}*ĨúļŽõ) ûd9Æņš”0a‘X÷ n­ķ ąk3 <šä⋠å™.Ŗ°Ė3NIVEʑŠÎ˛ļķãidä“Ūž!{Pä1ĀĸČ 2ŨÅÃ0Í>9–A•9Ÿemį#I/$žôã Z̞ąÁíE€ą-Üqļ §Į2J2§5FĘØK’O˜“Ū˜€Ûę;HéE€ĐАĻy’Ęąã=Î*¤D˙i?ŌD˙Ē˙zĩfiÖ%ģÔū0بu@Z8Ā=M:[T[^œšV5Äû-ˏ¡Ķî Ƀ֒%ß§ŨĨĶP-¸"“fY<´,z Ēo—°ÍK}˙Īô¨-mÔZdõ"1ļ‡I[ā×?lŌ“ë]ž*žå-…Í8Sis@ĩREžGZ†+Ģ)FÎŨjÎĸ3JžŨWÉ^;SFŪ $šķdôĻ?R!ēZÃU(F5ãĩ4†å ēD§šŗ=š}œā`Ö™¨FĀŦŠ3´ĶdŋĐâ1Jâ mĶØ2ąÉ^ôûkœY2ąų—Š“NˆĮŠæŗî •o” ;­ P!r9ęÔđäiŧjÃĮļШĒĸ/`PŒwĐ ,íŅ­ža’j =2Ēô¤‚ííâ1ēGJM-žK‰Ш=3EĀ…g#R}ĘXÔë™įŖˆ¯<Ô΍mxe šOZqį•BG´w¤Øpą1Š=qT5žhĐô&´#áFjĻĄ8V’:ęŨ Ą-GiƞÃŌĢ\]\5ąb;ąŒÕ›4uĶČq†Į"špŌĄAI¨äV¤6wëUė.&ˆČ ņV­a’k“4ĢAIŒ§4’˙jeWv*[Ķq8_Ũ`ƒÖŦ][ē\ ĸ>”Ö{›†UŲ´wĄ-Đ?Ųę¨Ļ\¨:r ŗu =žÁ÷ǚGpö˯JiˆˇJ–ĩ”kžųĢ‘§ú8CéYūLöŌą„e[ĩ.ƒę&Ą…žˆ¯\ԓļ/ĸ&’ie¸Î:t&Ąlō˛ŧ_yiÜVą.¤Ā[jK#ūŠŸJĖšˇŧēEV8ÖĨ˛āU=…&ô}™nŪĩˆfûb Nã­t,7)›o§ųWÍ7cBbąŸöd~ĮŨēV ËĶHöÍEuωī’oîÕųcßAéŠwÔvĐ­kΜÕŗ°H;ÕØ!1Ûũj”v2Æ]C|­Ú‹ęŠcLPļĸĢĀHÕ\vĢļąaj4ļÛvfõĨ}Êo5“ŠŗĖ.GAÖĩsYúŧ‘›fŒŸ™¸ e{ûlæ~ŨŠŅ0RpÜgĨXŌ Z¨ĮZuŨ˜™ˇ֋Žęmļį’xĻ2ÄšwvĨ]<™Hå€ėjÜĐŦ˜ûQq­’tyÜ1Š­Ĩ¸xdaГHtŧĄMįiíVm-Ö"‹Ō‹ˆƒL|‡Ū´ CÄwŠŗIęÆdÜ~įPßt÷§ę—Q­Ą4狍!\p{ÖmÔ1)ö?ŊĶČUŅcū ‘"H× 0(¸öW+f9N4Ņ3Ũģí ĢĪkœ˛iÉF¸UQpąBÚámÔ¤‡TbY.Ųđ>LqWŪÚ79eœ‘Ŧc   .;֗"Ū3ŧxĻÃēæøÍ”t­‚69*3J¨¨0Ē ,fĖæ ˙0”ŒT77&yãTh>•ŦņŖu\ĶDQ¯E\,TžųXį‘S\äÛ°ŨЊƒÉ( .Ч‘bTŽH¨ė$e2§ŠŋŽœRQĐRab ĀZˆAĘ\TäôœPt\'Öēé\ô?ëĐû×@Ŋ[ÜkaÔ RRŠ@ †ĨPĀĻ4LJõ§äc4ę@‹ģv9¨ãŠŠäS¤‘ccÅ$ 0ÁĻ#;E"NŽØĻ ”›œ‘J( `ƒ@P) Å áē<´=TS•z QԊ@)UnŖ4QĐ )hhāŌRŠ6¯ ¤u܅GzZZAioäĄŊY¤Ŗ4 \QFh& @Å&h QMČõĨ ĸšõĨÎ) ^(¤dSę)›‡­čEô•^âå`qÆjTpę9ĸĀ>ƒQË  ŌĢÚLķncĶĩĐ'A\ō“æ§ÖēÎQ~•or–ÃéišĨ¤=E—ŧu!›ũ?ĩIr›áaę+,OûŸ#?6iĸB×|7a؝¯W5Ũ˛1üT˨öZ+ĢPÃ/ÚŽ"#Ŋių‡4ĻÚę0r:U¤Ôe "CQËmI3ڤԔƒČ\ÔÚT†KvÉÎ;Ô –Æ×s6[3KŖH R*Đ"ŋ’ŌƒëMĶŋÖËõ¤°˙Y7ÔҧäM/ÖŠõ}Κɂ#urí'*´pėcšĪˇ›ėˇ˛p¤Ôė…Ô—ėžDĻD$J†ÍÕË´‡ v§Éxg›Ë‹•îj(%6— æp§Ŋ/"û,Ņŧ|yj`Ė‘ ã$R]Möš‘#ä’jkÅ Â1ĐС+Ë4[0W†­öjlÉ~N:šĩy“mĮĨgė¸ö¤2 ,Œž†¯Õ ĸČOcSÁp&Î;@ŽR#Ž*­ē´%›’ÕnåwÄEgCrÖ ÆĀˇĻ)ôČĸęd/Ĩ=SĪÔūBô¤6ĸYT퇎šķ@Čî)°S…V ā`ƒÚĸšf’Ū%'ƒEÄŌ^PžMMsnMē…ę´ŽŋgOŗíĮĒÎR•zRÉD^XŒ“Ķ5%­šHŪnhštKä–=IæĄąę`/‘É%šeA¸fĸ´.úŽ_Ž(Z˙˜—üĒLÍũ JŽâ;UŅ}ŧž>\u¨Ž"xįķŖ>”ÛŊΟ639ëZpäD7uÅR&æáĀ+ą{ÕŠˇŦ@F2Õ#+j4ˆLՖTō†@Æ*ˆL‘‚~đæ qu"ņ…õĻ!ŗiŖîƒVîBũž•–§Ę\uZ‰ĸš”nŊ :{UˆP !ô§´ļō֜¨V žƒ€¤ÎŋZ߈ü‹ôޏ'ÖˇĄ?ģ_Ĩ[Ükb\ŌĶE-!Šy’lÛûCĖĮËZÔ3LC'O2žĸŠi–ĻŨßpīÅhԌRĢÄÆņ\)×Ņ´°íQÍY▝ÄPšļy-GŪZŒũĨĄėŒfĩ8Ŗ€)iĐÉ ,’u5PL“Č1ō6kKŠ8¤jÃ=ŗ7”2ĻĻļ†f˜É/åWxĨ†Ŋƒí2c’*=2ĐÚÅĩēÕĘZĨwjÍ ’>TfИ zV-ŧđ€ íSÄģ# {R斀”ŠÍsÅ#›ÖŸf€3"ĶÜ\‰‰5jæØM‚8aŪŦŠ\ŠÍû ˛2ųŽJŽÕf{E‘ŌŦæŒĐwØ$vd„¨íV&ŗWŒÁjŠ@g}Ø€ōŖĩ^X•aōĀâŸFiũœFBšöŠŦlVВ§$õÍ[ĸGIŒƒŠĸxDÄgĩKE;Ä 4^YéImn-Ķh9Ѝ¤‘ų°•¨låc#VŽi‚5Rp:͏Ŧdą‰ä}Ā‚ &­"Š īZoí§¤j6Ɔų+æų˜æ–H–B Å?4f¤ēM‡ĨFÖčcōČųj\ҚĻ4øGjšxáÎÅ5-æ€ą*Ö‘#T$ÖŸšLĐJ°šl°G/Ū\ԙ¤ ã‚8žęDĮ'ŪPjJBh$‚8ųUœČŦFE:’ˆĀ‚(ĀqA4™ CJ¤ÖĄˇ‡ĘĪŊOA åÖŗvΌA@} jSHÂÅ ;gYL˛c&¯¨Í.1HiŨĒ:JqŠ)(6AMq•"œi(8Á:3m<’ÖÔĮ!‘ÎXÕÊJ.4‚“´Ú))N)(8¤âŠ( %Š@”)ËnÕģũŌũ+ ĢnÜūå~•¤ˇ؞”Sh¤ÅRĶ–˜)sHRĶiiˆZu6Šu”´€ZZm-;4šĻRĐŠi´f€KMÍ€E&h QMÍ-:ŠnhÍ:Šm- –›š3LRRfŒĐŌĶsFięJJLĶÔSsFhM™¤Í;4””f€’“4PŌf“4”€Z3II@ šJCE”fšSHi &i€ĻŌPiRJBhi(ĻĐæŅIš) ’€IE% J( 4QHh¤ĸ’€ (¤ @i(ĸ‰E„ŌœFkbÔūá~•ŒĮŠ×ŗ9ˇ_ĨhÆļ,æ—4Úvj@\Ōæ›š\ĶÔRfŒĐ!ÔšĻƒJ (4šĻƒKšvisMÍĐķFišŖ4ęZh4š Í.i Ōæ š\ĶAŖ4visMŒĐ1Ôf“4f š\ĶAĨÍ4f“4™ fŒŌfŒĐŗIšLҚvhÍ74@ š3Iš3@ šLŌfŒĐæ‚i3Iš\ҚLŌgšvi3Iš3@hÍ&hÍ ҚLŌf‹ži3Fi  4„ŅšLĐš3Iš  4„ŅšLĐšJ ¤Í)4ŌhĪf€ ŌIš ¤šLҚLĐ0Í&hÍ H3Iš ¤ `M%Ŗ4LŅE! ašCJM! AHhÍ ) ĸƒHFct­{ūŽĩ’zVĨÍē֒[Í-4QÍ!ŽŖ"Ŗ¤ fÜ ˆPžús\0ĨŦĢu¸‘UËđk@¸ã@ QP¤č˙u…J(isLf 2OZ[¸ö6ÖĻ•ĀšœŌÕk7/biÍsĸĀN)j5‘YrŠ qx¤”TK*—*"”ČĄ°O4”P @ׇ†hŠæ94X ō)AĒ7’2I‚EZ.cM $ĩQob/´°œŌ°ĮŅU$žįéRÃ:Ę84Ÿ4…Āęjŧ÷)ų5JâôHčĒpIĻ•Âæ°9…‚õ8Ô? úV~¯ta‹94Ŧ Đ#+iųŦ‹)(­œŸZĩōJØ^”ė.ҚĨ-ōŖmQ¸ûT],ŧt>”ŦĒJŠsx°0V<šˆj 6m‰Ŗ”.hQY΍áē|žĩv9ˆw ’5¤U]ÄņU5)ž+v)ÖŠ­Ä’éåœcÔuͅ`ĀŌ”ÖLĪä.Ä$ÉĢļ×dȤĐËŖ5FkŌ¤C,(‚đŗ„“†ĸĀ]ͤŠŪŨũ›oŊ \.\ĻČáąíYÆîeÃ˛üĩ<Ō lŲ‡Ĩ4ĩ,G ‘w-;5kq3AˆĮJšgreʡ :ĐĐ˙ Õ ‹Ļ2ųqš˜ˇRÄáfīŪ•€ŅÍÕ+ۓ AלÕvšį`—ø}(°ŽjRfĢÃ>ø7žÕO͚剈ā ,3Lš*…ĩËyžSũęģHbĶIŖ5›w<ĸäGzv4r=hŦļķ­Ø31 Õš¤ $Q`,n´„ZĖh$ æ4§w\fĨˇ‘åļoQJÁröAĻ3`{Õk9‹+<­E4îŲųV€ĩ3X÷§´ˆŊHRÚSåČĮą¨"‰Ž™ÉĮaE€ŅŪ§Ŋ#:¨É8ŦčƒĨčFn;Tˇ1™$ßjR°„ņˇ5ÕÂĀ€į’jŒž\NžK –ú=đ)=N(@[ŠetÜ 7íQîÚfŠÎ|›tD8ĪZc/•žoZÔ 5ōˆŖ-íPØČ^.j[• gŌ„6Ekr%SžŖ­9ī#VĮ$ûUT]ĄÛÔÔĐ[¯“ĪSŪ€,$ÆE"ĘʎÕV×"wQŌ­,j¤‘Ū“‰­=?ũ@ŦÃZZyũÍ[\ĸZ@-Vŋˇjąš‚ôfŨ¨lú2Ÿj¯.éŽögå5ü{-C+nüÃ÷M4&%Ė&Ø #8Áæ´!}ņ+zŠĄy:΁#9$ÕÛpV¨1•īŲŽÔSŒšŽ{!ö|ޏÍIzåqØĶ&ŊOŗ‘žqԚčĨ‡E%ĩ°–-īÉ4[%‰÷ĸÖéaB’œC ŨÛCœŠéNˇÅ,ˆOа5é”–ŖÔŅ‘Ã§~ 2ŌWûivû„Õ¸ØË~O`*ŊĖ,ļ§ŪëSé* ī÷#ōŒÚ‰üŖĩ>â!o4lœdԐ˙Įûš[đI´ú€_šî)ˇÅœĮ8­-č$EQIx„uū’KDp0@ëLąv{vV=8Í5īÔô¸ņEŧR%Ŗö-ÍHÄoāFâ{Ķtų]>܅íQÚÍhÂT%ķKfĖo˜ė!M0'ų×Ė[;R_[ĸHŽ0hĩŊŅ“Ѝ.ޚâTTCŒúQÔFÄg÷céU58ÃC’;Õ¨Î}*Ŋø-<ŌCęWģŒ}…jX X­r8¤¸V6ˆæŦŨnúSė"žŸ˛ŗˇ$šŽuōoĐ¯Š#•픊až(ˆIst%u*JLēÍŋŒ‚Š[Ģ"Œcš|¨ÆņX>ņYÔ`wĻ÷ƒf…E–1ĐT–ũE, ›mŊņIfŦ€Õ,bßÖĪUJĻ`ĸ­ÜŠxXõB19ˇ12cŌŠ=…Đĩg ­ĸŒv¨,ŽŲ&QŌ­Ā @ĒzUíbešBÆĨĐ}J6ōLˇ2×w5#ĨġHėĄ@<Ô­ļō—‰sšXÖâiƒKōCEOĘ+?PĪīZžŦŨWqhöõÍ8‰–î~ĘŪ˜Ē–ų:{ĶYnå@ÂÕĄÛcô¤žĀÆéčßĨAŌVíŖ1Å´ÔQĀËtŌ†õ"ĩĮڟwZ]L.ÅõÍ,öÎ$ß ÃTkm4˛;dÔ\Av7C>ÕiÔ R=ŠŗÃæŒTŒ¤ÅˇÚ‹ė(sö'ĒÖpÎČvIšŌ†‘<æĢ5¤ĒÄÄûE ŒŽr—[žMÍéZ[‡CU-íLlYÛszŅ7™ö•Áųj@ˇTâ`ĩ^ŠƒČũ˙™M0"Ô?Õ­2ęc˛íęEYž!*â™5¸–0„ô§p)5žaķSĪlÔēn<ĻĨ`ėdb=*{{u€¤ķR —6˛Zļeą'ĢsROlŗ0-Ú¤ÚmíNāRˇRĐJ=émeĄVãac!ÛTÆîwĢqéFā*Ę%Ô^‚’sæ]má)m#ÍÁuRqÍ[–Ú9[sŽiŸqäŖ¨ˆdį“VŽšļSR H‡EŠZ5dÚG1F¤rZRöËųjŧ°ĸĄp)ĸŪ0s´f ĩĪ—’ģ}ŠķŒÄßJ t¤8#˜ĖÔbŅĀäS–äƛ$ÕíŠ:)<ĩ=… *ÚFÃtŽ0ZĻŽFw ‚Šp(Ā  ķŌ´4ãûŦV}]ĶČjØ"ūyĨσKHÍ  E `M0*āp)5q†§Q)[F‡!FjzLҚ`+ÃT_dˆžPTšĨ¤"*.ĀĻ5ŧNrT“4ÁÍãXÆb‡_īh âœHÅ0ĸ•ÚG¨Ąâ0=)Ų Ą‹cšRuR怨ldg⠌Å74š¤ƒŖ5!ĻīąŪ—4Āo“~čÍ8"ƒĸ—4„â*ˇQšAŠ)ƒE0ڂëÍ&hÍ Ž”´ÜĐTœ)@ Å% ã4u¤Í b“GNԔPæ“đ¤ČŖ"€4RFE0“ŠäÚĀzĶŗÅcA4"GR{Tš´f‡AFh¤Č¤ҚBE! PŌf°õŖ"€¸¤Ōf“4„Œã4ėŌSK¨=h "‹ÅÍ79ĻäųxĻ>vŪÔė+“fŒŌSY‚õ4Ŧ;Ž¤Ļ Pž +0&‹ĐėŌQ™“֝¸E˜\Ri3Q™”R̆XWyIÎ ZE”1ÅaqĀč)sQŧÁN 5fôĀĸĖw&¤Ļģ…\š‹Īöâ‹ÉķMÍ1äũŪV™nÅēŅmäų¤¤fdÔV<Å+ÉķED%2i›ÜüÃĨ; åŠBj5“rŸj‹{ą8Ĩ`l‚ŽiŨU,ÕÍ?ŠĒe#@RĶh¤Ēžũ’ššĄÆfĒD˛D›-ƒM™Ę°Å$Ŗ ¤Q/U4И#nZ‘ĻۏzdƒæZ$ŧZzMĪ=*Fo—5Ē<ēt\Æ3Rû”ģŨ”ÍG‰Ĩ”íJkqM4&,mĩI41 ņÅ5ĮîÅJytŨ–Įä&œĶs…¨ââ6™`NyĸÁrÂKģƒÖœ˛e°jē†ķ2F)Ī•5CģܚIņO"ĢæJaV;TŊ™üŧSä“iĀëQū‘øRČø~95]Ič/šĀüÃˇ BdT2—8Ü0*Yy„Sę.‚¤„E–¤ķō:S%˙T1Bų…: ,é eÎj3#3Ŋ$*@9Ļíe'oJJÃw%W$ZŽŪaĨŽL’æ–žÔljËĨ@Ō31 Ú¤cōÔPãŸZKD7Ģ+ iōIˇÔÔRcÎZW˙Z Ē$]Îŧž•'˜<ŊÔŲHōÍDšōin;Øv]ųŠ|RnČ=hŒ•ķ!ĀŖpØ{3;ŊŠģŲ\)ĨˆáŽi˛°ķT :_ž´˛ÉˇwĻĘ~uĻN9^Ô!Ŋ‡Ę7g5,ošsP”ųyjr/ɀhvrbG­DŒL¤RČ9ÜiŠq1Í+vRI˜‚1LˆQƒÉ¤™Áe։ē-=…¸…nėķNV-iíū¯đ¨áû”¯ ė,o”$öĻ+YŠ’Ū¤TÄGŪžÂ܍pä–4ąļ$ÚÔEįu9īųE ėūú“ū[ŌËz?åŋáIÔ€[,xŠ €qŪĢČs'ÍŌ’@Ø9QĻ7úĄQČWĸŸ/úĄUÔ],CË÷ĻÆNÖ FĖwĸ5!I=ę@lH’hÆŲF)ąÉˇ9Ĩ\ģîÆ7æI8|žiQ”ˇNiYЎ#"™‚+ēaéK2€:Ķ•—ŠRZB8 R? R2.šéĀ#ĩ4´„mÛ@Ģ4čGÉBŽÔĮzbîPF)ē}ĘHĀŲIÉ†<Ķ>`0ŸK‚8Š6S6€¸Ī4ÎznP§!ŠbiĨUp "˛¨Æi0*Õ̆5WĩYą?9Ēe#G4 Ķiiĩ?{š“ĩFS'­4&Œã´H2ŖÚ,úŅåŸīwB°ÖË(õŲŽĶŪ¤ō÷Š $÷§t+1 3Œ”|ąāg–s֗Ë?ŪĨt%° +HžQõ4ygûƋ ŗę1Qîp¸Å;Ëoī<Ŗũę@ĶA AīMå ÛNō÷Qūõ;ĄXqlž*IFåÆj?(˙xŌųGûƕÖãŗoSOf;¸éLō÷QõŖ@ÔR3.i$SæZ<¯ö)ˆ˙xĶē˜ĮŪũMHFcÆi<¯öOšĸč, ĻŌeĀÆiŪOšĨō‡ŠŖ™…A…94ø´õ§yC֓ÉĻ‹ hH× I<šQä‚1Kå uŖĘô]… Ī&˜OĖvSŧ•¤ōW­  i‘r%œÔÎAčy B´y+éG2Ŧ3“÷›Š“ríÆi<ĨĨō—Ō†ĐėȈ=Ÿž…Tu§yKéIå/ĨAkŗ+1Á¨É@wfŦ—Ō“ĘQڎarąՈ9éCē0ëNō×Ō-=+ĄŲüšûõ*Ɗ1š]‹č(اĩL-a éëQŗ#ĩ.ÅôŖbú .‚˝ōœ“OiQąžÕ.Õ¨Úž‚‹…ˆŒËŒsH˛ĒŒj]ŖŌŒJWˆYՎH4žxÆ0jBĨ”\,WfV9(iUÂôCSqéKéG0’ ķ9ÎÚ<Ãģ;jo“Š.;—$įa¤ffꙩčĸábļ[û”9‘†6ՊJ9ƒ”„6ã`¤&\t=%+…ŠęŽ3§b\qŠ˜ŅEÂÄH{Š6Éę*lŅž(ģ "ŋ–ûŗģš_.OīÔô”]…‘ Īņ<ĻūųŠģRR¸ėEåīO'ũŖSQEÂÄ^HūņŖÉ_zŅš.#ō–“ĘZ–’•ÂÃ<ĨôŖË_J}% (U‹/õ•_=ŸúĘŅT´ŅN¤æŠJ(sE% BņKIE.hÍ%€š)( QšJ(h”PæŒŌQ@ČŖ4”PŅIÅĸŒŌQ@…Í-% ^(¤ĸ€4Sh CŗÅ”P1h¤ĸ€Šm-RQ@ š)( ŠJJvh¤ĸ€ 3IE-'RPæ‚i´Pö¤íAĸ&i €’Š ”RPMRZLŠ)(Ĩ¤ĸ€ )( ƒA¤4Qš)(sE%†QI@Q@‚âŠ) ĄSZ­¨*kSûÁVġ4…;&˜ :‹E&h´RŌP!h¤Ĩ ĸ“4f˜ Fi(¤ģҚnh ĨĻŌæ€4 LŅ@ÍÚ\â€QIš3@ E'z3@ š)3E4´”™ bŅIFhԔf’€”ĶsK@-74f€ŠLŅ@ E&hÍ-&i ĸ€4RfŠ;QIš(4vŖ4™ BŌQš3@ÂŅšJZJ2hÍ )  ƒFi3@“4™ ĸŠBhĸ“4´Qړ4™ ĸŠJ@.i3AŖ4Ā(ĸšXϐĪ4”‘EQڒ€ JĻUm𿟜ŠC(÷ŠmŋÖÔU%ŋúÚ҉@ņNÍ0t§f šFpŖ“Š*žĸÄGÅ^qHX Ĩa))ĩēŅ!TžhčlŽ)sU,ßũĄŽÂˇŨ$P˛h EĢ"*y0ōn<NÚs4fĄIÕÎ6K•CŒgé@3Fj§I:p}*Z@(4f –uļO ĸ+”ņÁô4ÄN .j/1wíīJōÆ{Ņf™Ŗ5“,k¸ô¨ãēGl Ņ`šg4šĒ¯vˆq‚~•$s,ƒƒøR\ŌæšHŖI•˜¨ę)Ø ŗŠ3Q<Ē„ÔĶd¸XĮŠôĸĀOš3UĸģG8#i÷Š^ULdõĸĀIš3L,æš˛†MÃĨ\Қ§öÕ-€ įĩZ#4XfŒÕin–7یšj]‚ØuÛéE€´Î­(9éTīŸljÃ֚/HQ„ČõĻւLŊš ¨’UtÜ—g8‰wbË™¤&ĢÁr˛§†ôĻÍt#“f9ĸĀËYŖ5InØ0.ĐzTōĖąĻâh°fŒÕ´ËÛ~Jĩ Ë*ei!lsMIŒ­$‡ä?J΂Y>u¨4í yŖ5RŪá‹ė“īRÜLÁļ 9=ék4™ĒlŅ0ķNAôŠįŸdA‡ząēŒÖxiĀÜaW#bĘ ¤1ųŖuE;•BTdÕB’ãysôĻ"ūh&ĢÛĘdˆ“ÔUei'f\ë@Ŗ5Nd—Ëcšˇš‚âãËĀ_ŧzT>mČå€Å-ĖN\:c#֘.™xu'éH 1MæFNWˏ•ÛcĢ:4d¨Å2Ķøž´=†3˚._æĢ)(dŨI0 V€ūᨭ+ÎÅcāzŌ勿Ü[Ú¤ŗËĢ恌ŠBɖĻ5ÜhØīN}Ĩ*§™’}iu%2*'ēEb:šŠĐäąÆ)ąFgfÄXk… ¸ŽŊĒŧˇ%×JæœĘpAKrŠs@"? úSķQĮ÷:‘BæšíĩIĨĒ×O…Āęh .ößéVb|ĨUXå؊XĻUŠ˙Ųleptonica-1.86.0/prog/underline6.jpg000066400000000000000000000513451506303110300173100ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?Ķ ôĨĻ“^qč M4ęi ¤4”CM4ϐšbHiM4š!ϚSM4uÖĻ“JÔĶL4ŌiM4Đi†œi§­1A ÷ĸ° <ž”ęJC֖õ 5¤UûĮ´´ŠÁ†TäRŠ1A´PKŠ)ib’–ŠLRŅE%´PQE€ Z( a@Ĩ¤ AEPM4ę(@2Šv))Üá@Ĩ€S€  pR¸ĀSЧ CÔmÖĨ#ŠēĐ íHiqAĻMփԜE!Ϙ†ŌKAëL⒜iĻ€HE-Ūôw õĸ˜Š CKI@%)éI@ 4”ã֚M%4Ķ醘ŪĮælcĩˆČŊ#^"ũîjΉVAōļqũáČŠŖˆŧ%HËbĸÅ›ØÄŠŽv–čjg“jį­dÆĒėTpAä0éWß+oōüÄzRhØÄí-Ō‘¯Q2[ëT ÜU“3ÎG5<1|qšvB%kčՔ?ēSI&Ø÷ŽEe(™(Āō*ҌŌr1E€Fš@7•ÆMA%ī–ĄĘ’ŊņÚĢ"ˇ$Lx< Q!‰š W7b)ØW-‹•fāåHāÔouĶœâĒ9hO˜Ģ”Ī8íC7˜ŲuÍAräsyœsPËp˒Ŗ8ė;Ô°åŽES‘ÚŪ~@(Ũ= 4€“íaķˇ Ž õŨŦŒČāŖŠīŪĢĘėÍE ?‹é¤î‘Ī?Jb,I8—<ĄâĄ7cs)ëÔQ4…”8'°ĒF&eFČĘ 74ŌVl¸.YØĸđË֑o VJȧõ†…„é‡VûÃ<ŠGÄŋ2XœšV ągœŽÆ`xīSGr|­įG^%ä5qų[ĸŪ N2§?tĶĐZ’Ō„7ß\āãĩ=ŽČBr;{Õeāė|#Ôĩ$`$ŨFņ@ÅŒ~īŪ”=ji0ãÍöį=Ē­Ā ä>ûH XŒ–ļÚĖŽū´š2ŲZ9[ J1Îjē*㠂jĀŠ{l-QHaE 3@4bƒ@ šLŅF9¤š Ŗ”ĀPiM%€ ŌæŌö 4𤤠fŒĶh Í¤ĸ˜ IžhŖ€QNŧŽ´āiĀĶ)âĮ QH:ԊCĶæži†š¤4ŊŠ zŌPŨh4ĀLR´ęCLCM4ĶJm0ƒE! COŪĨíGz( ŌP(QKIH=))éH 0L4ōiĻ€‘ēRĶOJ`n›B[vWwĩ/Ųå;…5Ž@˛ž8ĨkôGPā€ĮĢ=JöŒÍ¸‘ŸZ_&P0b§’@Џr*ąŊø‘HSü@p(ՀÃfI'#'­ŲÁá€ĸKß,o*Y;•íD—|üƒ ŒƒNĖC^ĐšËOŽ) ģ0JûG(_Ë8cštĶPëØf˜ũˇ†gų‡zsZ–ûĖÔSđår7øíI%īR˜>ÔYˆqļ8Æî=1Mû.:0…đIu}CuŪ“ŊY#Ąėhŗ ’}˜ŽúS^ßåųŸĨ7ímĨOÍĐúS$¸}Ŧ˛! GØĶŗ ‹` Å4Ûĸ…A˰• #qڟrÅÕʞØė"QoŸâŖėÃÖĄŽg ĸžE x~duÛ 8įŊatMöaëMû*އôωåWų—râô5ˇNƒ+†ĮUŦÂč—Č\‘žh+.AČúUw•Úā2t#$Sã¸Č 1§f&6Āõ9ü)ĻØzĶVéŌ_.QÕĒ6ē•c.;O#ڒL.‰ūĖ䃸R‹`ĸ–ëpvîfĻļ”ČŸ8à vĐ$*GåR’dœ ¯4Ėŗl^„u¨ÍĮ™ą¸*ëúŅ`šxRÖ|w2Eå‰FUŽ2;T†áüÆUĮOz —;RTVĶ‹ˆ÷āƒØÔ¸¤Æ-ŖTŒ1E-!Ā(ŖP ĸŠ) Z))q@&)hĻIKIHŠ(Ļ„vĸŠhS…6”RņNĀiâĮ pĻ p¤0õ§SOZ%-!ĻdsF)Į­˜  ŌĐhÃMÅ<Ķi€Ō)¤SÍ4Đ!¸ĸ–Ķ))Ԕ”RšJ 7ę(„RO4†€E&)ƐĶDÆ]X/ô¨ŅpÅJ0<ƒĐÖ¤q„\R˛ƒÔYÜĸˇŪ„ Č=ŗṲ̄ŐÅ$d„õ @ôϐ č(šŽņ†‰ã##†ėE"!Y3”ã¤@Į"˜@ô§p)9aŽMGą,Įr+B“§j9…b’4Ė›v°Į­BŅJÁ‘—iėGzÔÅQÍ`ąš×cíČč}E)ČĘczō3Ū´;Đĸáb‰ß8—iôĨŽ&˛ķb¯`SOZ.(Hå€ŅīOÕiö‚HA.¤įĩ]¤ JábĶ0¸WAģŽE .ææ5iĸ á‡QR¨ÂÅFŒ´ Č<Ô)#G9!r§ô5¤ĩF!]ÃŋZWˆíSk1õä՚qE&1h4RŌ(4Ph(¤ĨÍ0’ŒŌf€E 4f IHMШ¤—4QE%0’“4´€)i3Fi€āiÂŖœ $ž* iāŌcMŖ4ÜķLR3HM4õĨĻįš\ĐIÚŒŅšbĶiM!Ļښiƚh””Rši¤Ĩ4”Ā))M! ŽÔQ@XCM4ãI@i´ãM4Āé3HM†˛(i4„ĐzŌ ĻJiϚ†“HãŽ(ÛöųĪīņƒČ5`Å/üķņ¨ÚŪBûü°õÁëJčĸG$§ŋCBĻȉã$R9]ģ>´¤ÆĐBwŽôūō:x œ(Į֙"Î㠀úsLE)ԆfM˛¨ëuv&  C%ŧŽÁŒ`0î&œĸá ŖZw•Á#m°zzT‘€ōÜņOkiËlž¸=hXĨ\a9§t+,?ē‘#iČ”ĀÍ<%ųČ9?…XeœʃžŖ4Č#ž<áFj.!Œ"’(äC태Žĸšˆ˛ŦģÆsœÔŸgpå•1ž t§˜6BEŕc°1€OJ–ŅJ\1úāđjFŠFB*{RG ąœĒįëNú‚ė/n*$…fR3ŒÔŌ¤˛ŽôĄdčšĪZW YR!ģŒiƌ†BŧdsĪ1ŠFŒŖF žŪ”‹ ¨1´‘čiŨˆæP–é"œsɤNŒÍęQSâP… `ŠėEG/ųTãŌ‹čԚ|™qÁÔŅŽÅÅ@ÆRAŲČīSÆÅ—æ†2AE(ĸÄÍ´ĸ†( RŠC (Ŗ0 ZZ)´”Ŋé¤ĐŠ;ĶAĨ&˜ E74f ۊLҚc–›žhÍIIžhÍiišĨÍRfŒĐ0=hŖ4b (ĐEĸ€ԋJÔ-1 Hii­Ō€KŠjĶÅ )M4ЀZ))2hŊé­JsHzĶ{QE€’Š(ĸŠJAKHhÍ!ë@ šLĐŨ)ĸ”ž(ąöȃ„c´ˇLĶdŧŠ3ķœ/­AҘĘ:|ųä0æĸŅUâ‘y#pę*l†\’åŽs‘‘ŽôĪĩÄŅ ˛šĮŌĢÆ˜‘.8¨äMŦā.ėô§d"Ę]Å#2†ÃH4Öŧ‰\+ģŽ=* ˆōP¨Á+ŒÕE\Ģ#6<Ģ i ÔКé"É=R* /ʛåqÔTQ°‚R˛ōųN84’4jčápšÁãŠ,„]’UE Įåõϴȧ“Ž3š%A$%{Yđ‡›z7U℀ļo"Ž3О• •K2ƒĘÕé%ģDˉäŌ•ɜy™ų‡€ŧ’,‹•¨ÍÂfĪŨ8#Ōĸ˛ †Į­AxĨ.p>äŊh˛¸›.4ɡ¯dUŪīË1ķšOĨVļW%Ŗ`~QNác‰˜pڝ]“Ĩę̞šųAëVՃ(e ‚21TŖYĻ5-—ØRvF×d‰WŖ/ ԐŨĮ&ĐNôŊVpže7‘K$käÂØä7Z,ƒRԓĸ6ôīRĢPT䆲ÎLîŦØ>‡Ŋ[°RíížĨ YdĪGĩCšĻd ‘ž@ÍEÚȄ“‚§Ą,åpsōÔ ˆĐ°Ũą•ž÷Ĩ+!]š"UpÛdʅ˜ČúÖ|D¤ŒŽŋ1_žŊ 6$@įÃCˆ\ŊĀir ކĨY‘›†}+1”G$ŪVqŒâ“k:#†į9hq@›5Ų‚Œ“H]A‘“Ō˜TÉ VęEeŧŽŅã't'šJ7)ģûÔ3Ō•dV?)˛ÚFxÄŲ8'ŸĨK*äŠHÛæîāŠ9Bå֕@8# gØæWˆ9ã5NķV$‚3ŠdG&8Øā0⋠šufsļAŠj…ēywîeqÆ{V…'Ŗ1˜¤ 21œņTį`e`9ęv6ew‡ā÷Ēå š`‚x9ĻÉ EfëŽÕL‡‚áJą!“‘Mt2Z4Ąđ.]Båô`ęw§dg­Gm˙éŸJĄ+ēČŪa*áĮCIFá{œQYōÎÍ0Nŧg"š˛Ę!™XįoŨj|ĄsF‚p Pc,M ˛‚)ŲyÖFVÁ\âŸ(\ĩ‰0éNĒÚ~M°'Ži Æ+‰ēÜ´­¨\šHj’Ęįbg“Íl‘Jņ9ĪËšMĄrčĸĒ4Ė,–OâȤ2H÷ā`,-ž•āšK–)lÍЁL†xîr)ômÁ— äĢm *­•ĪÕw,'Tc•a֋ åĪ1qœņœRž•“åu<ÉR=Ņ$…=;Så —V—p ŒķTžÖZ8ŲG,ph.æōx89Ĩ`špșÁašPC ƒT­ĐK$ЍNƒtWIR2=¨h.[$ϊ†éö÷lTFå˛áFvuĄ+ģ˜É yFęā´1˛ŠbĢ…ĮZvËt•_íkå÷ÁôœäôĨf,QUÅØ!¸åzŠp¸S¸ä,Âč˜ŌT+rŦXt`3І+Ÿ2œƒģ˜]ŖNĢÁįiZd §<7JVĮbŒSRU"@E%:’€6Ųœ˛‚}qLeFûĘ*.œ¤eĀęZc]ū­ Nõc-:SÔ ­öĐbWT9'OPi÷;Ã!VQžzvrÅ1Ņä¨&Ģ‹ĶŊ! Ũ›-îÂvŽā:ÖšLW,:Š M؛vācŌ k°@1ŲÅWšíĘŠT*āāŠ§a\ŧËōm^=*"(IldúSˇÉ߃3ŠˆŨ.ÕaҍH.JŅŖ•úĐȌ0ĀUž÷hŨ°•HíR-Âģ€9 2 arUESō€(e ÔQÅ0vaŨN)pHÃ/?Z,ÂäģW9Į4…ŠA­BˇhņĢúUy.JÆ­O͌Qf/,h§å§*Î*€ģeūRW#ŌŦ-Ú4JëÎ{Qf%h‘˜1>´žZíێ*ī‹ŽeÁīO3¨_øM+0ē !GÆå =#TQURč›ļŒƒˇąôĢĘ"žũ(iė$˜, ‘ĐŌSaB2§­$wQ¸npW¨4ĪĩĮŧ)8'Ļhŗ ĄÉmT`Ž”ĻÚ2Ėq÷ēZk]ƌĀįåëOûD~XprLQf;ĄÕîŽ= )ļ—iĪŌ Aî ŠĘíäzT‰pĒ‹¸į=­at=-‘pęx9Ļ‹8Õ˛šԟÄr*Ã+ÔzS~×āĨ°I╘]Š‹ėņīfĀųēûԌÁTąč4ʛUŗÁčij1Šn‹Sژ–Ї’@iíq™Šūbüŧũîžôõ ¤*›ĀčŨĒ6´FŒ!ūGQR™qä Ō$¨į sF DļģļrÄbĨ‡pŒ9"™<ÛQ÷Eö‰cuķ”cÃĩlKhc"œÔv4‚ĖeĪįņŠÚT^Ŧ2iŧĩW‚qOQhgFîŖYcpV!į•,S‡.MHŽ­ĐƒKT=‰6F큊ŦöŒK ŲFūÚŦ™‚2@nĮŲĘęqŠÂčG´åYF>ĸlLn§ø¨kŊ˜2! {úUAŽAĻîXá,‘Žčj6ļu‘üļ;¨ô5e_q`xÁ§dzŠ.ÂȊÚ3 AO<ÕkÕķgoŪSÍXK€ō”ĨIą îã4j˜ˇ šÜˇ–ņœ2~´‹ ;“ŠĢ\zŅÅcąŸäMå‰ČSĮŌŦG[†~Ä ąE …Ŧ6DFČŨbĒÆ'Š?(ōûUĸáXy=)Ub;Š."”°Ëä.Ķ’H4ŁĖčøāu­E;°˛(ˆFƒ&˜`xäqŒ†9´Š§s0˛),N8&Ĩ’2oUņōíÅZŠ.(AæBŌšËg5,ŗLen¤b­=(†ÂÅkĩ,Ņ`pšd(@Ÿ#’N*ဠ. â3äیtničL7†L†äēTzR¨î3|ĻÚ8á¤ÍX•3yVļŒc‚ œãš.$ŦT‰?Ōn JŦ H#R =+ShÉ8äõĻ˜ÔŽ01G0ŦgF ē'ĀqH€x@īæ´Dj@ Bƒ īš|ÃąNP%ũāH¨ãSû„9ÆâjûBŒŲ#šSåN>īJW ž“ ĩd`Ž) cq=ČÁĨjãŌ†î4”´C/6ŪV #v¨ĪžprˇP:zŅ4ÂyЏÆ'aŧ)ëœRĪ2qW0ĶLV(ŧlmÔc•<Õg„Į#nBUē2˙ZÕ4ÃBac8F𕕲ôaßëDÆIŖ,ą’TįĐÕúNôî+ÄÁ㚨Gû[Æ~āNĸ•‘–ųI*ųĮĩi`QMËPąF 5É`8eâĸØčģ’Ž@ô­0 tQéK˜v3؋‰CF1…üÜÚųdĘ܌V˜URrTgéEÂÅ!oaãƒR_1 āíĪQÔU–E8ʃŽ”ÁRžˇ cĖ!Đ ĮĘí5^5˛sČ=EjŦh§* })$-ģhĪ­W0r• @f”0Īūíˆ;}ĢL(Îq́ƒÖ§˜v(yē09OΛĪ”îjúŠrĒ8Džžôų‚ÅŖÛ<žXÁ*ÖŖ•ĸ’Ū2Î}EiI`qÃcƒTŦŽÃĖQs‘Ū…$&‹Ę3Ą›ã'ŲÎ~CZ`˜@ĒĐÂ|æ‘Į&’zÄ0ųdËßy{õŸ.8÷ĩ_‚{V„–ņČۘ|Ūĸ”ĀBZ9XŠ#ēb§#eIcōƒ÷ŠRŲäqŠ‘F0Ŋ)7 ėTģ";¸]žáāŸJžYQ@|ąŦ¨UÆEBļȤ`’j.€¯++ČÁp@ę*(Éû 8qžÕvKdi<Áøī@ļ@ĨGBsøÕs+ Å9JWû”Yc`HnøčE\û:Œ†ę)Ô# 1 tŖ˜9HmĶzĘ䜂qQ˂˙ŋWã„FQ›T0LäQĖ ŋd`qĘĶ­2-ÂŖŨ‹YPÚĨŊc9ŨļHĮĪÅIĩĸēŒ%\r*Vļ7=[u=âŨ$oŨ*Ž+Ēį~ M(x r+į'}EMöe)"UŽ~”Õļl¨vÜĨ |’JC`)âĸ&_˛yĄū`jäPųfNxzoŲ˙ҌYīœĶ¸X‹2G4'vUúŠlō7ÎCކŦIķūåBmn\åXņžÔ]™ œ[’pOZ“Īeiëģ§›WT‹iųŖ?+ÚYpXîĐŅt+1ŦōÁ,eŽQø>ÔĀķ:JĘ~á8Š|™—Í9ÛNŠ°ČØžhē ÂæHQĪŽiį­E´h‹ØjSÖ¤ĄE( tĸ€ (ĸ!Ĩ¤ĻŪ’–ІŠ(QE1 J(ĸ€Đhĸ€JJSE!¤Ĩ4†˜ÍŖM4ãL5!Ļ‘NώJiÃNϚbIŐĶ4”Q@i )¤4”š¤ ĐM¤ĸ€4f’ŒŌh¤Ĩ 4 CE:ŌfƒŌ€tĸ’Š@--% Z);Q@¤ĸ’‹E%€\ŅIE0IE Qš3@ F))hi(ĸ€ QERZ((Ĩĸ€HE-”´ )€”´ PhÃJ:RpĻi¤sN¤=hE-Š(ĸƒH¤Ĩĸ˜ EPQKI@‚ŒŅIŪ€ SH(4QšJJSIš(”™ Đ(cz‘A›ĶČŦĨWI P*rāԘŗlŽ‡'ĮƒE\ĶĘã9¤5fÃsÄĘČŨH' ũ*č8¤Õ‚âši¤&›ē˜Ļ‘A4f€ CIšBhMÜҚZCHM!4u›š3@ĮQMŨFi0–›ēÔĀSH('Š+´†–Đ)i´Fh¤1hÅŖ4 ;QIš(´”´P0¤4wĸ€ƒJ)(@%b–€ (ĸ€—ĨPGz( Š( PhĨĻRZ\P ^ÔbŠQԃ@ĸ€ۜ(Į4đ)Ci1ÍIļ€ŧŅp.*@´ģ(¸X‹›j`”ģ(¸X€ŠB*Į—G—EÂÅlQŠąåŌytĶ_b§ō¨1Qp ĸĻōŠ fÂÄT„T†3ACé@ˆ§”4l4Åâ‡=(Úh†ŒSļ@CEÆH–ōFr¨1éž)Lr˜Œf%*{fž×j‹’ õÅ=nŖp…NCô4j- Š ¨8?SŌŦB_fH"•îwdũŪĩŧË*Ÿ˜ âXšiĒĐŪ¤‘e¸9Æ)ßiŽD}Ęõ”ėÂ䆁P›”P7œgŠ‘$YrT÷X4œT1LZg‰Ā Ŋ=ÅF×Íe§a\ŗEFfDq”:’ ädR°\q¤"1H$Ö›+퉜v ÅČfITFOjx įž”XŽÔĮ“ 1Č4E0’=Ũ(ķäQQĮ˜Č:‘RAéJĖ.- zĐpzQ¨Å†”QŠCŠZa•D›\f˜‡QHŒdRģRO@)j0¤į4ĒÁ”x4Ķ*[<ƒF ;šZ#4´€JNiÕJŠpĖŖqæŠ:RĐRf“zã9īŠu'z) Œž´ŖĨ0 3KE 4f–Pš3K@ Bh Aq@ƒ4fŒRLŒŌâ—m 4 pZpJ.; § xJpJ Í<-<%<-Kaa›iķS…ĨŅp#—(Jw—H@§mŠDtž]´Ąjo.”GL6Š6U.—ʤc¤Ø*Ў*˜ŧąIåÕŋ*“Ę4PÄ !ˆzUĪ(Đb4\ &ŅäÕß(ĐbĸāQ0ķIäûUī*ÅNāQō(ãĩ^ōŊŠ T\,aŖ%čYc t50%U%äZDgŒqH@Æ1Z\ÎÆs?šķ•)î¸hØ&­ü™Ā4|§Ž8ĸāfy"*GŨ|:S“pã îNÕĻQI9'­7dkŅ@§pąF ,a†FښČlķ Ũ*ĀE :Q´HĪZ.+^“Ĩޜ7ŌĄ ›I$îÜÕæ”†›ąBmåôĸâą˜Ûš` +Ŋ(VŠ įËnžÕ}Ą”)P@éBĊ…@āõ§Ė.S1decÉÄŨ+HŒZ‘ūÍđŖoŨa‚)Ũ™-¯6ËôĒq ˙6~jŅ‚3Aj­_2~W9úTĻÚ¸ÄyĄxˇČãĻĩĶģ6ͧzŗ$%„^¨j&ĩtvŲ‚ŦsƒÚĐŦË6ŌųЇ#¸ĒR,žtŽcŪŖœUČP¤`fĄd‚6QģԓCh’ˆŧĨ ítĻ<Îō˛EŒ­:;u…aœToÅ1’Œ0E%`w!ŠF9aÎüS¤mŪPÎÚbÛÉä¸?xļęi-’l †¯pj´bÕ&Hcf–Á§YŧŸh”ģŸĘŖ†&{d8ä>HŠ GŽâL•š“ØhuÅĮ–áSMŽéŨ\ų͜zŠK¨YĻYTgRFŽ›ŨSĶŌÁ­ĮĮt%Į–:Ž}CorÉ´7qO†Ũāœ8å\|ÃĐÔf "# p÷Ŗ@ԙ.˙zĒãēCxÛY‚ķLHË:åĮZ’(˜[ΤrIÅ-QĪvĀŧ–4áá ASģJ‰Ŗ>\AŖ$ÔuĻ °ŪõÅRvšÁ!Tļ:â”Ũ ‰$†8ĻGēŪIĮ*ÔÔˇ`°äqŋ$zRĐz–aœI#FAV8Š&”BĒXpN)ĸ#ũĄģlëNŧŒˇ“ÆFūjt¸ėĊåŲ1†Qœ{T‚dō<ßáĻ<$ßp?器Ÿė˙+acŪļ÷(ˇ’qŸÂ^Ű?đžū”Cús’ŧÍGņ/Ÿ+É'ŒRĐ5$–įËē@2U—¸ÍąiQ8Ī#Ōj_ǎ"P$âĻJ “Žæ žQäįäR[”ËC‘šk:ŠŪéJ‡åJĨw —BíŨųRK¸ĒrģŨ7(ÍI˛ sTSíSúíȧq2Ü3¤Ē#'ĩ<ēŠÁ Vw”Ģkƒ!Œ^IäVÁĀéO”.ÍAíHYGR*ŊŽá sƒÅDSÍģ”18Ĩ!ÜŊ‘ëւEf̞Ã,~Y1“SJįíDÆĘ|ĄrŪFzŠ $vŦ­öU”9Ũš—kEp¸bC¯"ŽTeČĨYW*iü ˊ3öV‘\†RHÅ+\<’9éÎ(åcNĸxÛqúÕ/6A)'!†ĩ]… ''9ĨkqĢ*$žPŠÅfRâiû´÷ķc‰'œ‘•õÜD™Ąš*¤2iōx*!,Œ€pXirŽæ…5SģœU1,´ĒĮp"›:˲&'*ė8Ŗ”.hN™#yq3ú ŽĪ]BæĄÚŧą•JIЃUcSqvČÄí@8Ĩģˆ[I ŅdÁXzŠ›!—ŌØČÜ)JÆĖ&˛Ũ™5O8´0R>´ũEÚK˜ö1 ŽÅ>Q\Õ¯'ۜ#\cŠ^¸w[pûK “S鲙mWqË!Ú߅MŦ†Oå!* 9cP¸éO”u¤S•P H¨ Å8 \P11NÅ(¸ J8 \S RN—€QŠv(Å&)@ĨĨÅ&(Å-.)€ÜQŠv( cqF)Øĸ€HiæŌÚLS¨ g2J8<‚)¨¨ŋséT|‰˜Gœ2gĻ|ŠĐJË0Ín‘…ËĶJ"ÛģĄ8Ŗ žĩĄū F]”Ë4ƒq.F 4…rá‘U“ÉéKY­ēAnĖĮp$f˜d•ˇX8SåÍCITCI4ę7ĘįņĻfcŽ$ Æ:V šŌÁHž•NY‹m!ČČĪJķ[Ą-ķ+í&Ÿ(sAƒQL7™ŸÂĢ4í8=r9§‰&ŠUUĮ Ō°\ŗ°oŨß§ÅPˆüŅ‚ĒpEK4īģ @ã"ŽQܰBŠĮ4V^€Šĸg3G ‘†ßƒŠXfhēōžaSíCˆsB.1´~TãQE1yGEŠęZ°ĐĐĄsŒŅÅ6y<¤Î=…TķŨŽ‘YJåOãE˛đ¤e 0܊Ŧ“…ˆ į†įĖŽUÁWQš9Xî‹kĀÅŖ€—Iî*´ë"C’hH Âĸ’y7‘ķc§ĻB ŨqÍD÷ŗ*>jI>qÆ1ėĮËM’Ų†# QSqŒŠ¤ŌLáŪ2CĐ÷Ąn8Äk…¤!~ä`ÔMp~ĖG$S ”Ŋ°‘†N:Sŗ ƒ[!ŒĄšjÚĒžė’qŠKk†–yŒŌ­RwNÃ܃ėëäy}Í+BÕģ¨Å:9UŲ”uSK+yqŗz 5ŊƒB°ŗ Ŧ@'$SžÔ ¤ĢŒŠoÛXŸŗ°’Ŗ‚TƒŽ´ŨÃB/˛æ2¤äį9Ģ`iĢ2ÚfœpMHČ|€^By0EFļŦRä č N%BØ 2zSÁ‘žhģ Íj|Ödb NŽ×h‹œė&§Ū˜#œ$LgpÅadBÖÁärz2â™öIHE/•C‘V%˜DõV8ÍXBŦ8 ŌmŽČcF$‘ē0Á¨Ö]‚&l éWRpÍ<œ*nĮbmĖsHŨ˜ Sí!0Űú“RĘâ(ˡAD‰cÜx]Yí Ë9?vEĀö¨ÖÅÅĻÆ9}Āæ´đ1֔ WabŖÛȓ‰á#$a”÷§ĨžE2Œ*œâŽ SĀĸė Ų,ÅČîä>âZKöh÷}ũᚴEyUëR⋰)CkæHōL2ŲãéNĩˇ6ג…Ī• Ü=]” WĨi„q—nëI‰4{Đå}hQKPĮĩjāfŨĮ^*J#ŽīvŌÆjǞ[23Í:T)4Â1“Ę?žhû/ûm@2=hâĢũ—ūš>ĘįĄĻ"Å-Vû3˙ĪCKöw˙ž†€,RU&OųéAŠoųé@)*ŋ—?üô Įqũņ@Éé*š[ÜRbãÔP+–)*žn=¨&ãĐRÎ{4f’’ē 4†Ši4JLŌö BRc–’€ŒR´Ŋ¨1KIšPx bbŒPO4f€.)3Fi¸ĨÅŠ1IŠZ)˜¤Ī­:ŗu)ĖXŖ?7^*’ģv4(ÅU°œÉm–哃RÅr’ÆĖ?‡­';ĸjB.Ŗ1yŸÃœRGy°7`hŗŅ=Ti:<Œ€üËÔPˇą`ŨëJĖ.‰€§â K¸KmÜ2jŌÔ´ÖãNāsUŪfûrDŊ1“S]9ŠŨzJÎöú’ĨÛLŗs5˛9ęELYT€Ä ô¤1Ą)áiەH€OJqd_ŧ@¤1iÛy§) 2"”:Ã?Z@&ÚP)ĀpH§)Rp&ˆĸœ@.ãû_‘‘ģ<„ĸ3(É+XNŠĖmQ’Eĸ!› Ģ֓´ĘÅĐĄ´5`&šP('‚ B.×íßfĮ͌Ņ`,Í(͆)x b S֔b –é"šŽûĪŌ‹`QN┠6—Ŋ-.(ihĸ€RúRJ'zv(Å-4RҊ\P:ĐhÅ.*„'8Ŗ4¸¤Å ķŠZLQLŊæF('fŠ(ŒŌÅ­)4™ĄēR3M&”ĶOJQŌ“4””Č}¤qŋ* Ęw ųTiy88=ûTÁҤdĮĖ+ĄœãĖ~˙•!¸×ôŠĘJi}(!<_Ūī:?īŠSz i…?ē(ķP˙ŖzŒ?:o‘÷E'ŲãĪŨ †ę?:RG¨¨Í˛zR}™}˙:Š.EĄû0õ#ņŖėūŽßRnôT>C}ŋ:<—í#Q  CåKÚC@Žoųči °)jžŲĮņĘßúĘ(Ēû§Ŗ|˙Ũ‹98ÖHY'ģyãiĀÍ_ķ%îƒķχu'M; Ģ”íwÚŪ“¤Ÿ•6č5ŧō*ũŲzUÖbÄ‹$RģīÆčŗŠŽmEĘWŸũÅĪZĒũ*ČÆkMäģZ"EGļ.?rxéIH|ē܆ķ6×K2ôqƒKŲÉ+Œîæ™zŌM„ õĢhéäˆŲ1‚1MŊ’Ô͑˛ą°ĀŽ‚#ûĩ>՜"ˇÆ6}*ÚNЁyÆ1ŌĸnåÅXŽĶ÷—ŌËØp*Å˙üyIôĻ@ŅEģn~c“Å>I"–6F' Qzå[K ĻČĸÎ1¸t¨ĩGĮĀņģ­5-mÔa\S40In"fČ úQt˜ęfâÛiīڝ˙“E# p)E¤™ )ŌĨšf”HkŽâ†Đė4bÖÖ*Bøė{U ]íD ‘&rkN Kß×=ę!c ĸSŗ9ÅÖ Ŋ’G™%Yēâ({mNŽH~Ŗ5j{xĻ1āygŠY Žk˜ĻŪJžaØĸ×xäŪ›-ĸ=ā¸IvˇqZDĀų…);‚Fn ?âmj*ÆąpÖÖëŗ‚ĮŗÛ¤×qOŧĒ[Č"ŧ‡Ëfœƒž”]] ĖÍđ˛3ßyMNū'Îū‰š’%FyCéS% ƒ\–2āŠ9Š u-Č™Ã˛í?.:T˛_LÚ8”ü˛†Æi˙Ų­H!ynsƒÚ›ĒB!Ō–<‚w ĶM\æKĢ{HŽÄ™é‘ëMŋvŸR´*pJæĨSMoM 1 ą%‰7đL¤mŒcŽ28.gƒVû4šr=ŠRâ{ۉVÚąœgŪĨk6mYnr6ÅDļSÚ]K%ģ’œ{Qti¨Jņ\Å7úØAäw¨VōōM4܂2œũEY‡Ot‚ā“™ešXŦ¤]­¸ß‚(ē FKĢĶᔌ<œRE¨O äQČCĮ/6}.ItčHÃĪ֟oi3ÜĢʀëF–ŗęs}ŽHTųe:ĐօÄˇEØ ũąĐÕ+‹[:@ņŦˆŨqRéļŗŲŲČš%*jėŪV‡÷㚟5^Õäx”m~âĻíHcŗÍ.iŊčī@Įf—4Š 4f›ž) ‚LĶ3Í&xĻ™Ŗ4ĐxĻæ€%Í&ęfi3Á .Iģ4™ĻÅ0ĩš.ęBj-ƍÔÉ Ŗ5î) Đ$Í&j-ԁų¤8tŠE•JFSžGjŅˇJۓ 8Ī­:IR2ĄģôŠ8ę+Ĩļ÷0JÂCKۘXžM Ež( Ņš 0 J(¤KIA ¤ĸŠC QIKLŠ(Šh¤ĸ€ ;ŅE`QE`zQéKE!ˆTzQ´z Z(U‚ž} § Lc‚/ §×ĐR-¨j\Ši#Ō€#7CûĻ´¯Ą§qéAÛč(Ę9[q?69¤3Ëķ˛îĘ{¸ļČC‘M’ŅYŲ†Fî¸ī]1ąrI%Á—섐•8;ąV’oŨÅ2ę2 NA_Q5Ą]Ž$Œ:ž7.}E>i[vÁüHH¤6ĖáĖ–aŒĶ|ČŲÛ;F)Ũn+2šm°ƒ’A÷ĢíđX (Ŋ}j/"U@ ”lqKåʁŅ@(į?J­Ė‘ŽŽũ¨ģ˛7 šDą‡ŒÕxa)4dōāԖČcWVų‰.ĀŽN)i™æ—(n\Kjˆ™îŅ”‘ÁäTĻé•ÁĀ8Í)™f?ĀpijL‰­32Cg9¤[R$,OU*jÁ™8į¨ČϤČÍ´hÔZÉ5˛ 8dÁĄ¸S$ņãī‡ĢĢ"3mf‘Š+eˆ„Øė†ĘĨĄ*ŊqÅANŗ‡Ā U ĘFr1JĨ[Ąô+]Â]Ŗuíę 1”ģę1ОōĒžA8§š.+"ŧ/˛•qÁô¨ŧ§0F6œŖr=kD`š\G3‘@FO˜TS#![9f­€jR)\v3ĨRŽåAŨœãĩ=ÃŗJTíwh=E<(ëŠ9ƒ”ĻÅ\Âbp<Ō¤{­§$râŽĒ(9ž¨0F:õŠr„„“n¤õÛTÄč;ų܏ί Āt§×i\p{TÜĢG&ÛÖ p * Kă'\Uæ…”2:S–Ā\Áb˛Ãū›$y;væĄbZŪį&3Z~XķwޏÁĻ›hÚ=¤ g4\v*Čío+ˆÉ+ŗ?CH."‘HÉ#<õĢąÛĒÆr1KĒ)‚•Æ2Ø4ŗĘğ‘°*đ5qˆŲˆxäԃŊKĀ́æ˜Ŋiã­>€i ”`4đh´´”S–š †:–šN)7S Ž4SA š.hÍ7bži hˆ*}”¤fæ9Ik6ė`ãdŌbąY-• ūqLxv<Ž2CŽV­šaĶE[Ėpķœ“Dņ™]z`ŠĸŦāM4]ŠÅ#žXˆœ¨Ÿ•+̇5⍘ÆXdfĻļœNNĒFÕĮ’āĩvj՜e،Šv°É¤ŸcėQ–Æq@šXm¤qƒQHŽ—~rĀŽôĻJŗ8S´ģ‘KA“5ØxχAš[i™ŽBž†0ÕUmäķf8áĶ­[FËrŽ<°(vđõ§´‚RŪ” )E9§ )hĸŠ(īKšJ)€´R3Jā-!éIš3LĪ™¤Ŗ4„ qIAĻzŅHM!4ęi4„ņM'š`?4Ōi™Ļ“Í$&šM0“šBhäŌ*2M%į­ĶA␚` hĪÖ4ŌÜP‰âšM4ĩ!ÕܙyįIÄjFˆ§ dg* ęjAŌŗeŽ^• ¨Öž)1’-渑A#"‚ú€`RyiœâĒ,Ž92pĮS|ų bšųO­ĸæ.„PÄã¯ZE…˛U{‡Ũ‘œc”Ĩ€ÆHŦÆJ (5īzPūôŦÛ¨ÍBôX ÷Qē  Fîh°î¤-Pī¤ßE€›u&ę‡Ė¤ķ(°–Ļ–zizv “Fę„?4nĸĀJZ‚ÜT;Š Q`š.ęBõ 4™§a\˜ĩ!jˆĩ7u}ԅĒ-ԅ¨°–¤-Qæˇė"]ôn¨sA4X 7R¨Ë3E€vi âš[ŨÔĀy4ŌM7u 9ŖĐģ #pE=Et0ÛĢ´‘Šc@QXķÉJœÎéĪĨ/œ…<ƒÅ-CB°iÛvpSÅ9!`P>SéSĢFáOWWû§46ƒCn”ŧ“iLsØX~F§Čęx¤i@\¸RÔdÄĀőō‡?†jô‹û–P3‘Ō ŠádƏZ˛zŌw)XĄut ģĪjxų­v≔ÕÅQœ€3NIÎi\,VD/öŲΕ8ąÚČ ÜN XI‚ũîôü.ė9-ą™ûœ‰w6Ö qĮ5”žŖ' Aj‡}č°\›"šZŖßMßE‚䚤ÍD^ôX.JZ“uEģšBÜĐ%ÍĒ"ÜŌn .LZˇh'Š“u!j4f‹Į–ĻįšLĶsÍ1\—4„ĶsA4š¤&›š3@ÍĻĐM)4f›š3@\SMĨÍ%QA E'ju%&hÍ.i ¤4@\\Ō)(h)(´f“4w =i)i(&›žii§­˙Ųleptonica-1.86.0/prog/underline7.jpg000066400000000000000000001004071506303110300173030ustar00rootroot00000000000000˙Ø˙āJFIF˙ÛC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc˙ÛC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc˙Āā€"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?åii)E#Zœt¨ˇÖŦIŒ @čD›Š°Fj/$|ĶĀ…¤ÜŨŠ”ē‘Ö¤ō÷@õ4ĮÄ‘“MōŽĖdqSũœzš>ÎžĻė;Ҟ8§*3žF§}}OįKöuõ4 „Eō8Ü2M#´G*oŗ¯Ŋg_zaęĀH¨<ąįoČÆsRũ1ßķ¤0Gܟ΀afÜHÅ!ˆų„‚9Š<ˆũOįNFzdū4 Åļ7Lšœc™Ĩû2{Ņöd÷üč H›‘#*((NážâĨû<}2:Qlžôà Œ#,2i× %P—ėÉīJ-“ßķ LE”ÃrôĨXËHČãŌĨÉę:_ŗ'Š ,9Šŧer9Ēĸ'”ČÁ5cėÉę:CjžĻ€ąÄL1 #+֖Hذ ‚=)æŲ}M/Ų—ûĮķ dqń|‘–Ī%ĖaxĀŠÅ°ĪŪoΗėÃûíH,BbrUŽ8Šĩyœm§}›ũļŖėßíĩa‘DVI taÅ"¤‘‚ĒŊIöcũöĨû9˙ž†€#’%XríIžü°S…šūųĨû9ĪúÃHv ã2GĮQLEs´ĀMIä7÷Í/’˙ß4‡aĨY&.Ŗ ĶÂŧ‘Ã”y/˙= (…˙ŋCߜĮåíīÖ¤t ã­(ŽOīĶÄoũú–1äp­Úœ2ŽN84ЏũáO '¨ŠąW$ˆ™Ģ r|Õu܊™wÔT4ZdÅFT÷0ûŲĒę_ڞĨÎzT´;“Æø÷§įzŽ7įĩ/Όž´$;Š_ sL-ĮĩlëMmØÆ dM!@ÔlIžÄSūlghĻ6GđÕ$&BXsÚĸGÄc>ĩ#–ЁÉ+˜ĢH–=ĘMTŽōĻgÂíØqQų›FUb™ŋtËPtōÛ°ŠŲ”į(yëLinŨ§J¤K4…yÅ=NPZ‡1įŖSüôūTÄAÜīžÕÜŲ=ęÂŧhIäõ¨Ī–I;ˆ¨‘ŽÆš¤ˆ€OĶĨHÆ6PcÕ†É`h‘ĄœŅ)*č3N*2v¸ĐęŦ Čõ –ÄävÅGŊ‰'ôŠ?y¸i6HR1L Pî@ihQŒŌŌ %-ĶIN4”ĀCM4ęCHQJ6ú= !ę>ĩ` €ãrãÖŦ jŦ„å‰ëÅZÅ@ ĖlŽr(#¤cvI'АK’ĀŒ3Q˜‘r9ZzÆIbF20(ķŋt¯Ž§Ņ#yä€RŸËTĮCšy‰ŧÖ pÃA?Į˜fœe>nĀ3Æi‹ ۀFzԋûc€'%ˆ ĐÔâ h]› õ`¯ËŒĐUįUUf9ÜGaSo|Ô/´ÛˆĘŽƒ4Â6Z†~[T–ČV OSÉĸhžE@0y`WyH›Ë'Ļ‹’Q›o Ö¤ōÚüĪáÆ*1nūC¯c‘@1]žŧŠ_´ž!4Ļķ"=”sH°0YęįŠĩ\dÆûôIpxĒ9A֐[爈)ÔP°9iK7Ž($åaRü–éīOŒ¸#Fj3líqĘ~ĩ ‰‹1Øs@3ų„ `’FØ›ąš‚(\JŦFĐ:ŒÔˇ1ģÆuĪ4XŦᤠŒ(73%TāšjÂ˙hVۅ+Gˆ0A=hcĪ\!’ũI‚BA#¨ĒÉ  Ē3ČŠíâa#ČÏJ›QŒĶąKŠCG SąÅÅ ëJ(¸¤1ĨĮtĨ†ĨĨƒÖ§ JQ@iËM§ LĢ’ ~OJˆ)āúԍ2U&¤SP­<5KE\˜\úThÃ''{Ņģ4X.<œwĻ1␞)¤Đn:ÔnÔĪZ‰ĒHMcQ৚ĒŌ%Œ'4Ō8§‘L4Ä0ũ)¤JqϚbTz aQč)æšiˆaAč)ĨĐT”Ō(?ē) iũŅR‘MÅ1“ĐSL)éS␊€Âž†›ä/ŊXÅ&)ŽŅ“JE?”€f(§Pi€ĖPE:ĐqIN4† J)@  bø×ëVBīŦIŒNŲíIŊ}E,ŸęÛéUÔ~ãũ^xë@G֖ …Š„SČaÖĨ‰ĖŒÜ| āP!KęiUƒj9ŧĐøÜ¸éQą]’2eXŽA  Xâ€9¨<ÆHãnjApÁ°@āā‘@qF8ĒípÛČÆp I …¤dldt"€$$<š €zž•Ų1í84;1¸‹rã  ¤ŪŖ9#Žĩ ™öy˜3zŠN|ķęE]ĨÅBîępģ@ ŪŖūXP2ũhkdn۞j¸¸`­7nÚ)P?ÛpøÎŪÔąŠĨ$/Ū RŒcŠ4 úRãĨR—÷$ ũÃōÔĪ9ũÖĀúŸŊ*•ĘĘ ‚ÉÆzi™(ā|ĘzĐüĮ"Ŗû4|đy<ķLˇĒ„|ŦŊ9ŽŪBä) ­MŖĐRŠˆČÛ_zĪ­cō*¨—<ž”€Ÿ Sb%×,0sŌĸ†éĪbģ¨8æŽõVŨŒoš˛wŠ<ŌÆÆ+Võrq@ū”‡¯Z‚Û1Kå1Îá¸SpI Āã<Ԁ´:g4šĒn p§Ī¸oę=)÷†UۑķÔ ´ -QąI$ø$Ž|…!•€4€ˇ@¨9–v!SĶš§ˆūbü§ļy dí(ĒņĄ3ČĨ› ͚r#6I ) ° 85TgdY“•œ’ ~`3HeĀiAį­E~íOĩDŌ6ÖpxÎ!ĸā4šĒŦZ5 ¸ŸjĘĢÁ<Ō°ÉsīMfχžOJŠY€Æ9į˜M$Ō ÔõĻ´Š1–ôĻHĶ #J€ōE1¤Û ĄU$!ƘiƚŨ Ļ!ϚiŠŌ:nqéJ’MŨ)ˆSM4âFG4͊CMĨ$äqĮ­2G ˇÜâ\ %8ŌLšJ\ØĪ8Í6FŽO­ JA*äF}E:˜ 4„Sˆĸ Å%8ĶFzJCNĻäzĶ(Ĩ4”€AŠZQîS†?š@†¯2­X cÎ^1ÅYĄŒcŽä wIDa8éŒÔ˛°Ž2Ū”Õ•|°ėp C2áUSķÅOl@?:Bņ¸pzĶˈ į­1Ŗ3zŸ¨4Ķ6öb70ĀÅJŗFÄaÍ 4jØ-Č Œ U3ÉúĶŧ’Qƒc'Ļ;TĘęą ‘Ö›į&ŨÛ¸é@ˆ~Íû´Ęs“ŪĨŽ2ŦYąôįG°ļáˇ=ięÁ×+Č df"gY3Ā(’-ŌĢၜŠd7 $nsŠ™åHÎāâ˜}™öyy3šVļ$>ųˆ"§2Æ6áƒĐÔsMû­ŅāRĮˇrîTƒ¸cžÔ°Û4l„‘…§&í™ųąČ M0†sLdԕn@mû…:8¤ķĖŽG#ë‰Õ#}Ŧ7Š™2bRz•É B2+}ā֑ÔųeS‘QÛÜ+GûÆŗŠ™äDl3hv豅eã“QGlë"AT9J˛ŌƸÜĀg§ŊXĘî1œ~4€ŽÖÎV\ Šo؜Č \`UÍ˸ŽFā3jE–6 +‚OAšĢ,~Uĸō7ĄŠ[`Ģ‚ÄäæĨsü9RĀ÷=)ėč‡ Ās@~Îųs€Ą—A§\,ch`̃õĢ# š#Ö IŒ—Ą”"~f rIÎ=)ˇP<ģJpzĨXVFûŦ= *˛ąųXĨ*Ũ@Īņ•â•ā,ŅŠģQĪÖĨš“É‹*2ÄāZE”ĩĢK¸‘ī@Ë!ķ)î{S‡šĨƒ/˜§Ĩsļ Ģ™aOß"JĒęnëڐÅŧAĮ%÷č*k”.Ēg XÅ “Č4asģŽ˛>”ûˆYJ …YÆr1KĮ­!l1ĘYFån Qp&ÄZąÅ´€dy8#ŠDũ͎Š9âžōԖ< PĮ#å=Nh°îBčĖ’š,0ŖyjT|ÛpEYŠC¸Øō”J„örŧ– ŌŦŠb Ė^ÔX"ėÚ듎ĸšI9$€ÃŌ¤y˛ƒüGķE‡r¸;6 ãÂO—¸ƒųĢF˜X HÉč(˛Č\ūų‰8 88¨ÂüņHį¨Ģ20E,z  ƒŽŲ .U”„ķ1ƒĪŨ"’n|žÄš´0Üãķ¨Ú=Ō‡'€8BÃ3īM ė;ąœT§­4Š`SYĄáđ2{S^0˛BGzˇ´ĀÅ4¨$9(M-.@Č<zR2’A$1ÛČÍ[hՎHšņ#uĐ"Ļã˜ĘįĄĻãrÄąoZģå¨ÁĀųz{S į;yÎiˆĒKšsÎāxįAÜîäą\ā˛ĐŖHäŅå.Id`ĐXÁiP’rVŸr?v1ę*C ü¸Č+Ō–D¸9  ķ— €GJIl?NØŠŒ ‘š‰ĮcMkpwaˆ yĀ]ŪB24‚RrAķŠ”Bw=F)‚Üüšnļ(ŨÆî0MGJޤÔĸ&ųsIäü­ƒÎr :BV2{âĸ<Ŧ÷ÆsS•ĘāÔ%.Õ#o­F–CŒ’)ūa+2sԃR…?„w¤16=ÉÉ„Xĸ€)E0ī‡ŌŦPĮūģđĢRc"¸¸qŽÕ8ōâ xŽ•lāzS7Įę´Qs.áŨ8ëJĒcWWyÚŽ)F'iéC teé‘@Á HŠwƒ“I#–G`įqWŖ@ˆŽ?Ԙ¤Ė%]GßL~44f3 ÎęqĐՖ‡|ŠĖĀĒô6(žč ąÎ3Æ[(ũUđ1Ķ0 P31qäH›NōÜqRŗr­ō•\gŨW¸öĨ{c6)ä샴ÛĄŠ'+$'ËR>a“ŽĩÔ`zP;UZ3$$Ė2­ëMUŨhXî€ ֎(Āô˜HKiŖu&MŪjú܏÷ĨK´{R€)”ĨM›Fķ ņÅL1ŗyŨJņĮ^*øQč)vAL,fÃ3[‡ši\G!Į .kP(Č80( 2’]KÉ+åōE"­ ŽŲ=8Á ĐRėįhéHFfßŨʲ:ƒģœŽjBǞŧnØ2uĢûœ•ú₀žT¨ dŸ5˛ģ}Ǥ‹ÅÁQ҆p;V˜\ FÁƒĀį¯hƒ„3¯“Œygv*ŊļBÉÔâ5 ú P¸ā J@T<×@&1'>ĩîˆĖ’`†:VˆP3€zŌ4jßyAúŠPOŨˡÜ1ŸJ’gxŨ6Jąû gŠļcRģJ‚ž”‚$S•@¨ ŪDWŽ*ĶDAEÁįpĢė3֘°F§„ĩQPĻ`„ūãwÔŌ•.Ķd ƒÁ'wÉBJ Ŋ… lrČ   ą‚ķ"ĘA8įƒNpĢä„l¨~šĢ/>(8éíA†2› ŖœP)ūf¸į8Å=Ķ2FŠH9Ģ"Ū nžôĢ)RĢ‚Ŋ=Š ¤dwN ĖkĪÖĨxh™AęKuĢ+ ØæëīHF„92h •đPnrĮæûĀņWJČ=\ã_cŽhÃ;´›P6îÉŖĪ,¨AgíéOH69 ņˇhĻ YOáLĩÁUûŋ6í¤PfmĖ6d¯'š>ÎũN7ÜiÆ&ķ%õlJĨĘä;į­&3yq3ú ­iž)‚ĘIķáŸ_J–áDÍe|ŧåŽiŗĀ€+ÂŲt9ļi˜Éä›~ŅRĩēŦx2‘']ÅģĶV$R!YŸräĶĖ‘hA“É#ہ"ÂąrA8䊩ÁA)ev ܑڭ[ ŠFe$uÁNJ$Xægß<ІYi‚°UF|ŒņMYãĄų˛ŲĀ˙•ŅÂˊ˜SīM‚'V寺ĪJ,€’Ūažį%‰rîjO´ V$0)ÔĩÆëoŒ”’šįéciŒōF@ϐjO$ʅWŗF)-%iĸ܃ž¸âŖåž#ą”*s늒Ë"Œ ˛“×Ŋ ¨É&1Ū;ˆ+ŠÚ#ō„œāœcæ›!)|$(JlÆ@¨D.ąŦ¤ûÍÛ{E\ąöˆöģAŠxŨ€###¨¨fF˜Ī"Ą€ ÉŠZ3įĀā)Ĩ@8LžZžNāqC\FĨĪĘy qUžc QlmĘüņīRH™voG?̆Ĩ`L™ĨDÛ¸Ÿ˜d3Aš?,>~S™gGf)”ÆTgŅŦA™‚ų Ž”h”‘$ÎÃ͍"ŸP[34˛gæ^ΌfŦâ“]X›—Lü L’FYĀLŠ{ŅfÎÆ\fĸoŪ4Î í ´Zxķ|Ÿ3~xÎ1KĨåQĐŨDVęĐĻæsĀČĪģqx  ” –ƒN=(Å zPiƐ͏¤§‘IڀIŠyĻãŠn)¤sO=)§­0¸Ō)§Cց =))äqMÅ0E!üRHņHEHE7Ŋ0ŠCRÅ0Šn)§âšhށĀ{Ҋu%4ŠJq¤ CMDЂycŒį1„PHö¤Įzu% $ Râœ)ˆHīXûU€*qûĮĢR)=i\ãp'Ķ5ĶŒpXã"›4 ļä¯ Ŗ!ģͰ‹gô¤1Ą9( >ÕT;ĩĖe@,ÉÎjež-ʃpm¤gE‚ä‚$ĮÜ_ʔDŸÜ_ĘĢ›Ļ_02Žä<wÚ%‹åŽ\dsŌ‹Éü¤ūâūTĸ$ūâūUL흀ē`)ŅLí?”ę ‘Tæ‹ņq*w”˜û‹ųTfA$!ä÷5#Jūk$h A““E‚äžTÜ_ʏ*?ųæŋ•,æÄŊGĨDnŗ„E;8ÃE…rQy˙Vŋ•/“üķ_ĘŖi›ĖTUĘä†8Å4^f,āoŨˇnxÍarcCĒ ü)D1˙q*¯4åĸš'0\Œ‚*X&/ą#PĘĒ76zQ`¸˙&!ÕJ_&/ųæŋ•:hŧÔ)œwÍFĶ0‘ãCl98ĸ×˙"/ų柕ŗū­*d7k#ãwg?$wM!"ˆÎ vŖ•ŠäŸg‹ūy¯åKöxąū­*‹íŋ$ecË9ÚW= KŝŌEČ3×9ĸĖ.…ûŌš'Ôfå‹Č#‹pCƒÎ ŋg‡§–šŖėŅĪ5üŠ ¨ŗsŪ#ŨŸéH—…„dÄUd84YŠãūÍÕ­f‹ūyŠcŪm ëtC‚ĀĶc”§ä/–”Y˛_˛Ã˙<Åe‡p~t%ĪÍhŠŦŸu‰ĸøhũšΕ‚âũš,ũĪ֏ŗEŸšúĐĶímˆ#*äãĩiBĸ–/ŅGZ,ÂáöXŋē:O˛Åē3B]+Ŧ‡cƒQŽ´p^2Œ°°Īz,ÂãžÍzûčŌ}š/F˙ž>×&Ö"rN:šd—! Ÿ-ČCÉŠ7~Íû_÷ŅŖėŅ˙ĩ˙}Uš‘ßœ'ZCt¸cąČ^¤”Y…ÃėÉęß÷Ņ ÛŽ:ŋũõC\ u@˜ÃhíJˇʄgį8Z,ĮpXB6AoÄæŸŽi Č@I:Ķ ĸPQC#°ĘîÍ+É1ę)1íB†HFü–UäúšŠ Öūlœc¯X.KŠ1íIŠ#\‚pF*+Š M ÎļŊlRPM809ˆĘGnjG#Âą;ąž;0¸ėRHĶFĒŦ[†éÖĸš|Æ­qŋiâ‹ÉąHzQæ! 9a֒fōâg=…+i¨­Ĩw ˛ãxįJ`ü€ØŲļNÁrsŌ’ŖapŠ!ųå@ÅI&V6aÔ Ņ`HzĶ`™]W,7‘Ōœ]m,3ž™ĻÅ4ŠWtS†pĄ42FOJâ~ÜsNÜģIČÅ `FAPE7üƒœ~”™ŒƒøĐF‘MÅ<Іyŧ’ŖÜ*q¤ĻÍ(Š0ÄgĐR‚Ol u HiƓf)§7āŸĨ5X6qØāĐ ÁÁĮcŠ(1M§i#v3Î)(eõĨ ž´ũĪÛoåJ˙ŲüЈK~YÍY ļ3ũjÆ)2ˆn4{]ļįĄÅBÎd@"îGSW UĀbzf•Š/ŪĀúĶLL¤Ä,ë$N›BíÁÍ4Ē„‘KnÜĀį´@Ôā ĸác/`&B^1ģ âŦnŒĪų‹… \ĀôāŖĐQpąœB”p%PY÷wäSĄÚˇRŅĒã\ր—o°ĸáb•ÃŖ˜Ú9rķšFp˛ģĮ"ãđjūŅč?*i– Ø,€įĄĸāAo$1DČ3ÔÔ2˛ÉŧgŖ­—v2{SļAEÂÆsƒŖ‡I]¤9Ą–&ˆ|҆ ¸(éZ[G ü¨`Ē2ØԊ.3ˆŌA˜‘€øĶ×ˊHÚ).ē˙ZēļŠ>‚Ÿ´c ü¨¸ŦCįÃ˙=VĒČ"읗 qüG5Ŗąq÷GåKąē?*›,q´1…–4qÁÛĀÁëN‘aY•ĐĮ"íÚTļ1Z;ûŖōŖË_î/åEÂÆpTŨ ŨíbĖôĸõē4R&įų[ĩh0‰>đE΍ElŌ—P…ũ¨¸š’EQ*` uĒ“ív“ˆÉ?uÃāŠĐTē*ĀRųIŸõkųR¸ís<¨.I•îļä°äŌ•u™Cķ|´<¨ķū­*O&<ĢOČS¸ŦfHLķDĨYI$6áԟAƒčD;‡ZļlmËī1 ŲĪZ”EÁĄĀQĖ(D‰˜ƒ"ŊXžGáSŪm’Ų•K;ûՏ",˙ĢOʏ",Ũ'åJãąIâU¸gĮ˜ŽŋÂøÁ¤HŒO¨Œ‚Ē˙‘üōOĘŖ’Ę p01ũŪ)Ü,PF•Ë&íJcc1eRa_™˛sZ i.ՉH÷æ”ÛCõIųQĖ+[ –ņĢFj¤Ë+ŦĄ•™˜ápp1WūĪ÷#Ŗėđ‘!Ĩq”~ĖÅâ`<Îzb”ÃąĻRŽáŽFÃÁúÕßŗA˙<–˛Ã˙<…;…ŠĐÂRä¸Q= DąēCl$¤„•qWEŦķĖ~t}– Ģ™ĨpąIĸyžĐBŨŒgž)ņFhŽ%%;šĀhÚßõcķ4Ÿe‡ûŸŠĸáaÄpGĩPíeŗcFÉŋ5sėąpūf˛ÅŸēīŖBabˎ‚@ŦW#4— æ° ’ŠūËŖßF˛Įâ˙žJuiLŌ*ļŌiį÷73Š!Đ`ŸÂŦũš<ũôh6Éę˙÷Ųĸáb”qŧ& $¯t?"2ãœu÷Ģ&Ų?Ŋ'ũöh6Ëũų?īĒ.+A˜ĨhXPÄu¤ģV•ŌČæ'1ļ_īÉ˙}Pm†?ÖI˙}S¸ĻG†d™˜¸?)ĀÅD¨ūBH ’Gĩ]6ÃūzIųĶM¸˙ž˛~t\,V¸pčLR9ôUŠäėížģyüŠMŋë_ķ¤6įū{IEÆQM­ úĀ߈Ąļˆ§VŊ/Į¯ĩ\û>9ž~‚“ėüįÍlúāS¸ŦUTY‹ °A×éLˆ…kvbØFM[06Oī›ŸaMkv8R@éōŠ.*(Wƒ%€ũīč~´ŒO—8EŒd¯CVÚÛˇÍã=6ŠA¨ J=FŅEĀŦĢûĐw"œ…īīME´\+dđĘyüjȁÔüŽŖ?ėĶEšVČdĪû´_@$ÅWš]ŌF|ŠĩŽ)Œ °$dƒÅ!” 2)ūYŠĪ֞ˇÁVŧ¤Ã|ŖæëīM1'<F? b˜Č‘pOSœĐĒvDwąįš´ @AŸ\Ņå¨ ;/JbŗĄÔÌPŠåäÚĀ|Ũ1S´Jw$J¨ĒXŽį&ÃLdōä(,áHēđMYōWsÉÍ4Â1‚Iį94ˆœ• o=:ÍFå\õŲV^ Ė[$0qLŽIĀÅbØā(Š-G/õĢT6Ŗ†úՀ)1•oHQ#?5<Ŧî0ĘxCÛŪ¤šrg<ôÍ2VV•%Œ°aÁʞEęK${ČhĀQĀ'“@šW”"mfâMDČ[Ėđį9(r*h串‰ošˇîš˘‘°,TˇaRÆōs”bŊ ž D‡Ë‰Uä1$āŠnÅ)(ÉVrʧ’;‰<åF(á†~N ĶĸžWÚwGÉÁCÁß$„€cåCJFōžc´įpB   sHè™ öĒŦŪ'Ŋ<Ī)VÜA?)Ēácō•ÎÎĮiČ ’Fh™a\ŨŸ™ēĶ!’XŦârU—8>¸Í.#ķ†mĄ ōhI#ŽŅĄ™¸Á phcĖfšō×Bäš.âycP˜;H%Oz†ÆEH‹H[{uãĩK<‰"ŠINGë@tLm: #0H§å#ĄöĸĪÍũųb­†8ô4žs§œĀ"œáAäŌ *΂L,„pr(ââQ$jūYžō*[YeŸs0@ĄŠņÖĒ…dLJ\)ÉĢv[V2˛r[Ĩ‹SC!ā2“č IŽiĢjw*(oP) Šz?Ō-ūMüŸ–™(iƒ0˜~cķzûTלM Š“'Ŋ1¤J†VUT;°š94l˜Ą|.YĻ*ŊMö†F‘&P .ė¯qP…O(âPIŊx4¸IZG•Ô] q@ĩ%[‡ ˜€,ƒŒuZŒ^Iå<žRėVÚyæ…!ŒBWPąwé0ŸdxˇŽâäū z’‰ß–čô,5 ŦĪŦEy{ļîĪ53˜Út:áPŠúÔ‚`HĶhl’ Xk–Ũ'–ŠD}rpOŌĩtH0uŨ’zTL‘,’#? ąéR n÷ Q͊QíÄm*Ãē58ÎzÕ´ų‘[ûĀ͕„V˛ÂތĨ˛yĮŌ´ĄȏŋĘ(.9¤#*GQNx–Nr)4!FP2“ÛĮũĄmJE5I†öeŽ=Ãh8ÎN˟lICŽĐ¤i š™÷Ž9 AöÂ=ˆKH œb¤‚_47YNôĒ‚% bŦPT6*{S'jn=7gķ ŧ$Æą)ÃH@ü)-_d/‡-Sę()×,ō¸ØŖ †ũiĨ)ÃÂTĢ 8-@%Áp‡Ę`¯ŅŗšiēûåcfUl*5ô kæÍ6éml)ąĪå,ĸF,ˆ@ Ö¤ŽŨ Ō´ˆ[‚MQ˛ėGQĀĻ× áōÅĮ4†xÄjų$1ĀŽiŗĄ[• ˇ/4Ī-Vv?/œ÷ô/Įc‘ŗ¨#„™ļŒ†ÆpF* ã›p.œc#Ņã:…feä°Æ(r8Ļ‘ÅHj3īŨæŋŨÅ"¸sch˜…¨öĖŽŋ7˜§ī tŠ.˛+(ÉF ZoŸšF„“×<`P^F“tÁvļÅ7ĪqlÄāÛCc­,^Py|ÕŪq‘Ú„ĘBäG˜ËpžÔpķU”†)āātĸåŒpŗ/QԘÁ<Å6ų HČ1OģˇzaЍĻo˛ųc"žÎ‹Ė>ĻĄģR‘eA!ĀØĶX,›Š€WÂ€ęX,ŧō84›—ŽG=*ŦŠČЌë´šHĶ,ČŲÄ`Šå ĘN}¨5Z< #)ã‚ŋÖ­@ƑHiÄR@ 4†”ŌãM!§bŌ`+˙qŠÛ_û@ûÍųŌí?ŪoΨĩ+z°Cj>FúՀ*XÄÅ/AšŠåĖh6°žõ<ŌFü€š W'y{÷™Æ}ęQĶ5•˙0á˙]+]GČĩ™ÜDÎ8ÜN1St5Nō4F„˛…Œ7Uæ­OKn꧖P$ņ;mGúRŊÄ1ļÖp g8xūĖĻ2ާZt2Ži ëŋæÍ1\ŅiŖŒ€înžõ$lr§#éUŪI&[ˆŲU>PEOe1žėn‡†‰ąÅ ŠÜ2ƒõPÍ3^É ˛…QH¨Æ âĶ{æÛ͊,+š cŒqKŠĨĖž”Y_råXô¨ÍôŋeRĄLÛ°F=(°\ŅĮ)Øæ¨›š^E€FÍĖ1Ū–ÎæY¤Mė˜9Ęô"‹åÜ{RãL¸s,ĘT7AģĨUŠōOĩĮUÆsŒP/cškēFģ€_SU!¸šf Ē„$:Ô #0ČûdËôaīJšĒ#<ڛ#G •āf 3ģND›‰#PęSmœ ?˜:t4Ëā ô•.ŅŽƒōĒvÆåĸB‹ąrKw4Æŋ˛,ŠŸ6í­Į‹ËÅG üŠvAųTV˛<ĒÛöMÜeTe'p8#×ŌßŠ.Ņč?*ŒåIĸxƒ¯CÛŌ¤@ Øšč:zQąē?*“˜æ€ û,ˇųKģ9ÍK´=)ÔŊ…6“iøæŒP^Rcî/åG–˜"ūU!i1Ā yQįũZūTžTy˙Vŋ•Iیs@Čŧ˜˙įšūT†ö˙Ģ_ĘĻÅ&8 ŧ˜˙įšūT†ō>EüĒb)äP>DY˙Vŋ•D_ķÍ*›Ōcš‡Č‹'÷kųR}ž/ųæ*|u¤  ŧ_ķĖPmâ˙žbĻÅ€+›h°>AAļ‹ûƒķŠČ¤"€+›hŋšúĶM´_ÜũjÉŌÍV6Ņw!ĩ‹û§ķ5`ŽÆŽhšļ‹Đūfaä{ÔäR`0ĶHâžGJF ‘ÆsĮĄÅGödõÎŦ‘Å7ĀŦm“=_ķ¤6ę?˙:žŌšˇQŅÜ~4žGũ4ÎŦoj`Wh?éŖūtĶož˛1ĢR”\ĀOYŌy$dųĪ^*r)JŦ!ÚŲ*—ę(4ĶOJq¤"€c?’ži1@ Å!ķMĄh p  \P!ÖŖ÷gëSPڏŨ~&ŦHe[¨÷˛œ2œ‚EG{fiĖbÃå­)hŒß }œC‰8mŲÛVÄŖn6IĶŦ püh Ûļ‰ ŽĒŲÁ^iá¤3ČH—ËeųxčjđüiÜúĐ3ãSæ#MæIŗĻV‘ĸē0Fįq]ĩ¤3ëKÎh wüŗiUqˇi\Š–Ũ’‚*IĮ|UąKÍQPĢu$ؐīÆŪ•ļėæ#æģpmŊ jsJ;ķ@XŖ”<…ĪŖH#[ļ—mlüģO§Î:Ō÷ë@XĖĩ‰-ÖNd,Ü´ņK~ú9e,Å3‚‚kKąæ”gրąJīeĖ;>u9ĻĸT&é'w$ Ā iŽŊiAc>Ô$)*ąbįîž*#ũÛī;svÖˇđŽiÜæ€ąšĘ<ôš&!ÕvTāŌJ<č^V.­¸•Ļ;ķGa@Ŧf˛ ¸ib?|`†BiŲũÂĒĘwƒ’JpkFŽôŒûO.#1ËHrp§‹­—!ŪB ām=kCĩ/q@X­dˆíS“žN:𰏿”t bbŒsKÍ­Ž  §֎ÔŌ9ĸŠ1Í7cŠP:ĐzPHæŽôŊčĮ4”˜â—v ‘F)HŖŊG4˜§‘Í%INõ¤í@zRNíšJn)§šiĻH¤§cšC@ #šC֜iZ@0ŌSûĶOZ`4õĻĩ<ĶM4ĶHâži§Ĩ3i§­<Ķ;ĐM%<õĻž”Āe!§v¤jgZCN4Ķ@ HzĶąÅ4Đ ´PiĶN4††i :šit+˙pŌ…sü`REÂÄVęV<SSQÄ8?SRĐ.(ĸ€zRÍ § ĨwĨ\P/jZLRÅæ—P1{ԁɠv h qGJ)q@” 1J;Đ ãŠP(ė)EtĨīGđšZ Ŗĩ(ëE'áKۊ^ô€J_J=iOj;Đ(īK@Ä=(=E/UŖ¸ BRv§w4v íGz^ԇ­ZiéNîi;Pz;Ōö´œRvĨ¤=(RwĨ4%'zS֓Đ!))Ԕ NԔ§Ĩ%%ƒIL4”§­!ëHBRZJcŪ“Ŋ;Ŋ7Ŋ4õώZwzNôĶ֚Ũ)Į­!ĻOJe<ôĻĐ{ĶZ—Ŋ#P.‚vϚqéM4 CŌ™O4Ę 4õĨ4””†œzSM4Ōw§Rv ĶM8ô„R`kcšQ@ĨØžé˙xԘĻE÷?RPk˟ŗĒ…¸ –KčcYX+/ui5åŨÛČßpMM}<Ņ)’"†2M>øƒ=˜ŌŽPšĨ$ŅDG˜ásęiË,l…ÕÁQÔƒŌŗnY&ŊtHÃ:ŽKG§įė—cØņڟ*°Žj ģ~?zœûÔWׂÚ%*AféôõŦčāŒé!Qģ=i÷j›jė>lã>ÔÔUÂėÖ[ˆŧ•ČģHëžôøĨŽPÛ[pk:įČÁĮ¸ã…ŒûÔZheÔåRđrĨ.U`žĻ¯Ú`ũjä{ÔĒęĘXõÍbØÛĮ1ģg\ã8§ZJ‘iy…ŠīĀķG*ÍT¸…Û *ØfžĶćkHĄŊ Ŧ …Úđ:Æ#RFܡ4k.´Ēã#o4r!s3WΈŽī16Žų§#ĢŽä!‡¨Ŧ{kd}Bâ2ŋģP~\ņIhī›uå’6ˇÔ8 æfŋŸvų‰œãŠąÍc›kė7ƒ&7nĪ9­ 9ėĸ/÷ą×ÖĨÆÃLA,†íã&?,Ķ­KöˆįĒūuœŖū'ũƒüĒŊĨ´ri÷20ËĮĩW*%6npĖĀ)čM"Ë6Õu'Ķ5‹7ÍĸB 'į˙uŨēFm `Ģ> õŖ• ļlŦˆü+Š#°4­"#aAô&˛ŧĩˇÖ#đ ķQĪåÎn(ːNYéG"1§ytļÖÆQ†ĪOz|,–É)aČįڱʇĐÃ7%ƒéNē_.ŪÚ8†ā‘žŅȅĖÍĨtüŦ= HՈgP} Ŧ¨`ž+čŨQc ƒÔTw0ēÜLÍœđAåE.UrŽÍ°ršƒHΊ@b>ĩ[Lt{LDXǜ|ŨEUÕT=õ˛āđqIFėmšjęėB°$zP]W† }k28–ßZT!Yy…ņ‹ÛéüōHNiōŠėÔ2äŠĢ¨]5ĸÆĘĄˇœsPišŽęâ$ƧŒöŖ[˙UûÔ(ûÖ érūā,@Ī­ Á— ‚=Ģ4ĩjžL¤ųh …õâ‹pmĩG‚2Ll3J9C˜Ņ2'÷×ķĨČëž=kÖŲ&‚éܜŠ8įĨ<Í"čŠC–ÛŸj9™šÁ×ûÃķ ° ’@æąīm’(]åąžz͝Ūæ@,ģAۜfŽ@æ5AAú7¯0üë6Í&Šâ@P¤l§å'84Ũ*ŨdV‘÷¯Į4œRCLŊy9ļ‡Ė ģ TkvÆî8LxŪģ‰ĪJ´ęa€#ĐĶJ(mûFå’9 ~4™g V"™nLîcg98!ąļϏiŋ˛Ká€Î{Ur"y™Ģ¸2ãHHH<&Ū;YQÛ{“šuė. "ÚˊŋuN9Ŗwf¯Ŗ…‡¨üë*/>8n•• ’š9ÅAåĻ}ŖĖ}āņĪŊĸæ6ō3ÔRdy‘*ŧ&Ömė]ČŨĪZœ9ĩԜ1;$\Œš\Ŗš#=E!ĒzpgNĝį€Ojf¤îd†bĄĪ$QmlĐģ×Ĩ'ĸĢĮjmæ.˛’˜åIĒvŅ5đ–Y%`GŌ…ą§ÆaëY<§8,w#ãp¤•d„[ēJÛ¤ëÍ>Pæ5úš­ȸi6sŪĢD McJ°Éɨm`ķį¸Ęāž”ųU…vjž”ÚΆvûČō`ĄĀsUüƊâ-ÜŠ#%ē\Ŗæ4…›Ÿ$}ā2iį­fŦ9ÕK‘üYÍGräųŒ%f`‡ §Ę+š§ĄĻÖuĖŌ6 †!‰Á4bH.`ũá!Į ŌåË~z´æ÷€É§ÖtqíPį#œúÔ/$›ČwdbÜzbŽPLҚuŠDB_Ĩ$3ŦŦÁAųN UÛæetq,eŠŒ94†ˇiϜiϐÄ4†”Ō`!¤4ϐô¤Ā×´‚—֐ ų?O)ũÁõŠUēšÛ&Á<ŽžõeĢŠeHČ^ŧtĸ1i+â4ŒœgĨ ŨėŪínLß2ŒcĩB"˛š#į*x}ŒļÍąîÎ1ŽôH-#mŽąƒéŠ.+Ql–ŅíŒųF9É<Šo•fmüϏ,ʒyZŅđg>Rcé@ļ‡ō“ōŖ˜,Qƒė‘L%kƒ#€Xô¤‘- í$w&=ũ@5ėĐ`~é?*Sm?ę“ōŖ˜v+ÛKio–’Œu'֙;ZÍqĻp th[Ã˙<—ōŖė°`~é*.‚ÅRÖĻųn|đÅ2U´yŧÔ¸ō܎JžĩxÛAŸõKųR}– ˙ĒOʎ`ąZÔÚ[FÁf˜ōIäŅzmŽÖ0g ´įŠŗöX6ŸŨ/åAĩƒŨ/åEĐėS¸[IdYp’/ņKj-mË9œ;ˇV&­}’ ßę—ō¤û-ŋüō_ʋŠÅH´1J‚pD‡?JiûV—zįˇZģöKųäŋ•dˇČũŌ~TsŒŪ#"Jī´đaZ3Ĩ´ëyá$AÃW>ÉoŸõIųS~ÉoõKųSr¸(•íÄŗģ܉Æ2M-§Ųíc('S–ÍNm-˙į’ĐlíøũŌÔŨ€ÜÁŸõĢAšƒūz­!´ˇĪúĨ ŲÛ˙Ī%ŖAØĸĐD$Ãv#Wę§Ëŧ–kœ rOZŗö;~t´Ÿcˇ˙žKO˜V+\G ŅBžz/į­%ĖPË2ÍĀÔc õĢ&ĘÛę…!˛ļ˙žBŽ`ąY#‰a‘Zä3H0I4Ã_aû7žŊsœÕ¯ą[Ī!Iö+ųä(æ î#†U|õ^9ĪZ­ĢM Å.2=+@Ų[Ī!HlmŋįĄI‚†(U‹ōZ†ņ!šQûåVSsRũ†ÛūyÎšlm˙į˜üé] ‚o2kä ž*ˇÎ`šTWŒÕΰÛgũ_ëMû ˇüķũjš…bŗÚÃö?!&PIÉ$Ņ4)"ĀĘ<Ŧgžĩ9ąˇ˙ž­!ąˇ˙ž­Abųn<ÕĀÆj¸ļhå‘ãšP\ÕΰÛįî~´ĶcoŸšúŅpąXÚEö3œ “¸ļ{Ômj[Ë-:’„céWÆßû‡ķĻ›đ΋…ŠōÁ›“4s($`ķP‹RĄĐNģäúÕΰÁ¸:oØ ĪŨ?Áb´–Û­#‡Í\ŠÎsRM’X\Hŋ&3Í=Ŧ ūéüé>Å÷OįEĮbˆũŦÍĒ3ךŽKw;‡šŒ§×¨Ģ"ĘCųŌ(}įEÅaŅŠ%Œ8Ā÷§†Ą û^‡ķ§Gn‘6Tã֖ƒD”†”Ōw¤CHiM4ņC‡­”ĶM&&lŌŽ”‚–‡ũXŠj8ՊPKĻ"ölĀĻÅ –íîaP`ƒÖŦ´!įIrrƒĻ‹`. Ąą¸`¯cNâ+‹š ~jœķ÷1ÚŦ,Ėo„ĀS8ĄmJ Ģ! œRInZáeGÚĀcëEĐåšY-gËãkācŌĨiÚ3!đHļ;SÖČdˆš;ÎséOû)&6ßķ§ã¨§t"1u'“6ydčØāŌ´× j’ũâŨ@*cnLŒä—īéN0%#W*TuŽ0´‘¤ßšÕđxĮQV Œ* {%ärrĪÔÔ­9€$P/ãĘ÷ cZœČ:ČĒGâq[ŗEįBņgÆ3T˙ŗčO˜t0G÷šĻ„Ņ[J& kœR­€[ĨNˇŌ­ÔÄ2ɐxĮåR5LD\ūõˇgŌ”Ø;M 6|Ž€ WC [‰įē *¤mĮZģ4^leŨŽECkj-ä™÷îķqéVGjÚzNČķ'åVęjÆmNŪáßcč;V•Ŋ…§Üw‰NH4Ų4øšxå\(ŒũŅŪ‹‚Eã÷Ē9 Ę ÎOjŠ/Û%ÜÄÅü Ņ{l×HdØšÉ÷¤dūĪur ĒH@ÛÖ¤“÷7äĮƒŽüUķndˇ0HĀĻÅ6"’ŖĘûĘ&Õî3˙‰RËü~nsß9ФŽHūÔĶF\H™ éÅZpá ūä9pĩ$ÖōÉæ(›¸ÆÜt§qX]-‹ØB[Ž1V‡zdHąF‘¨áF?Ö¤bV”ũę?†Žôc­(é@īGjj;ū…Å@Ãą öŖą ôw¤ĨīIHŽâŽÔw‡­'cKŪ“ą “=)OJOJķHh=hĪ4ž´i}i(JCKڐĐRSIL¤Ĩ4Ķ@jiĨĻž9 ĶiÔĶԁ‰ëM§Siˆm4õ4îôŪôĶH{RšCڀzS{ĶJm4õ¤4§­! ŠFĨϚĐ)ĻMj ”QëHi€†šiM!¤Ä%!Ĩ4†“dRĶis@ćũXŠEEúĩŠE"k„I|˛ļ3€;RĮp’HPd0à ŧĪí#吗ÎE1„ŋm!Øo1ü¤”ėjI$!vûŖ“T–âI …âVl1úuŠīŋãÎ_Ĩ Žûd``áN9#а¤čEgK;hāhļų€(cĐTŌ“E”¨ Œ(É4X ŠÃ­d­Ėī˙1—nėu3ÜËNĨˇėi=ŗE€ŧeT‘QŽúT…g‘o­‹Éŧ•$×GēĪ–VqJ,+—šæ4/¸ũĖnöŠAã=ąšÉ¸;…á=ÂÖ ˙U˙ū” l7Ü16vđ}ŠEĖfāÄįQ’+6ċb$<,ŗõ°—~wņŧLä˙*,+š‹2oTÎÆ@§I*ÄĄœāŠĖ7,%v1žŠ.YŽŸŽûōāņۚ,4ģŅØÕHîÄŗ’B ?ģ#šŠ;Š6Äāŗī?2ã 4Ŧ;—ĸ•;Nvœ­H:šÍäHfhĪœrGaS%ÁC3<ÅEÜ4ė —JjĪKŠ?rû‹‡8eĮLĶMÅÁ‚ywāFäŽŧŌ°\Ō$Ič5š3”7ÉëO_FGŪÖjäBÖžŗcŨi¤4xÚ0o“Ö”ÍĮæŗ˜Îk9‰Ž)m=Mvc3ClsąFXØtĸšu\”é ŸnƒĖ|­Œ}(°\ąö¨v!.cîjG‘QÔ1ÁcīY+–D= 7õĢH^Ktž’`˙ˏ4qŦ~cØQįÆSpl€pjŊžŽe#,$#Ôø^#tĀ!IÉĪqE†8]DąbHĀņĻOģûM<ŧPäĶå!Ē?lq î 9“fę’ Ųæx˜îĀČlQ`š3ē ,ĮzĶd|… œt¨Žp÷pFÜŠÉ#ÔĶ/@C ‹ÃoŽâ€,+Ģn s´āŅT˝vҐNyīR4ėë#Ē+.Nzæ‹e‘֐õ5A.åt‡n7;&”Ī>éÆGîšĪ­;ˇ­#vĒĪ3¨rs֖Öc4%› G„LŨ)§ŊW¸•ĐžTČĩ\I1ULŗq4Į}K ÁÆTäRĩgÃ,‰ H¸ÜîAÍ=Ļ›2ŒŨ÷ĮZ,.… ĀļŪô†Ģ† ÄcũVáõϤŌî‹y8'‡rʰeČéHHīUDîbˆô N[)“;ēÆwƒķã"˜\¸iJ€<†áĐ@5žáq Ú€š`˛œĐjœnÉn§9Ë㟭9å|HęFÔ8Į­!\˛h5UĻ‘žM¤PŠŅ‹D­ÜŒĐ3n—ĩ'z^ԐċũZũ*JŽ/õkôŠ(&ƒtūjČUąŽ)R†WbīŽ§° ČĢ+np#ĶŪ•.av\Ũ­1ZDæYđB“ōįõĢrÆ%‰’uÅ0ÜDĄp8§ŧņÆpîëŠ5’Ũ%€DŨ0}*?˛1\JC۟QR5ÄHŗģ§ŊjƒqA‘×ڍ@Ž;E\9;_wÔԏjŽōŗd‰zbžĶF‹–péīJn"Ģ—IĀ9ŖP"KØĢXãoļ*7ž8Āāy’4*ÎāĶŪ€+I`l–?+ LmTČ|›1íMĩœĪįr ĢāéR–@ €ÎŪ˙ZdV‹‘6Iō×h÷Í7ėCË)ŧė߸Oj•n"gdRONiļ×I8 ‡@qˇá¤ĪģY{H홯šv!āb¤YŖs…pOĨh‹æũâņמ”j=ÅŽÔ`ŽAgŨšQj ŽōėˡĻ8ŠXÜá\׏>-Á|ÅÎqŒŅ¨ˆãˇuÚĻLĸtŖėŖėōE¸ūņ‹gŌˆŽ’Y&Œ>æ¤*ÄĨÜsß֐´(ôĒßd_ļœœãîöŠŧØđ¸ÛĶ4$ˆûļ¸8ëŠ`DöĒ÷iqœÕ}iņC˛y$'s?¯aJ&‰Š"’{f›k+KæĮĘåF($ļW˜Iœ|ĨXâ›öyV/)f;9#œS„§í ÆÕMß­˜wÚIŠŖ Ģ\v // ÅPŽđIlĮ ûg5qeÛ ęN;S|ØˇŊwt ÜÁį§]ާ*Ū”Æˇo0Ȍ0˛:ԁ°dÜãôĨYđÁ>Ô ÛÄVL:w#­Dl‰ŠD2|ÎûķŽ†ĨŊ¸ō#R Äšp•WIu=E ÆšU”0‚HāĶMą""_%qã­NŌĸœ3OAQ]Ęaˇi¤1%ŠGf*āÁÅA<[a‚Ųrry>­,ˆã œdH$‰œ ę[Ĩ0pxĻôč1PÃ>ķ.ōFÆ}ŠŋiŨrņĢ.Лŗčh°\|Ņy’DųÆÂO֑ĸÍЛ=n)Ūj*Îš"Č›7n}hŋŲ?vFī˜>đqRG#3;O`0)ë"?Ũp}qQIp‰p‘7V€xD ĘrŦ;Tbiæ}Á: qš"š ŌeŠDAķ0ZåcjáĻ+.SČÅ!ĩ!ÕŖ`0›pFjĐ ŒŽEDfŒÔÚ€Đ¯ Ÿ–cËįcé×4ī#™ų˙[úT­")¸ŠjČåzõ  æŲƒŖ+ŒĒmäSíĄōĄmŲlæ¤!ƒSMķ‰*āã“LDÛ3<…\ũr:SVՓiđĘģIĮQV<ØØ€Ž #Ši•7.7zR…xíJōŲØKg֜`˙]ĪúĪŌ¤ķSvŨÃwĨ'šŒØ ôĻ&ۃķuec9ûƒZ™˜( gL2.[æ/_j…adU_î“ÔuĻcåãwÍģviépĨ¤Āa°)'”ĸ9V€0(`(‡į“Ë€*!lÁ“/8ŠĖ¨¸ÜĀ3JNFAâ€+‹rnėÛ…#@Ip Į$R™Â˛)`wgš‘Ø(Ë @Gäķ!īŒ})ęģP.sŠ Š FW“íM3 07){Si{R@Ģ_ĨIŪŖ‹ũZũ)ũéJä>~1RėÛö0Ŗz{UŊČ_a#wĨ8ŨˇŒœP"ģĮN“._yČĮ&ž#ģœĘ0F܏n•oœāgéK€z€ g[ÆwڍÄږ'‰gŧãœqÖ´@p8éQCäcƒŊˇ:S¸XĢl RĀgáv3ڛˇr/ËkŒ¯Ō´đPáJc ëéJâ*Ī*‹Ŋ *mOŧïĩUļ %Ģ0āHœ}kTǜ ū›ļāzNãąDä\\ou‡†r=¨ˆn-ŧâZ-„Gzŋ´åAúŠq p>”Ž+éÅÚ c æSnãí˙ëĢŠįhéK×4\ åRŪËxæú‹ÄN$ÜxīŠĐĀãĮJ€Idõĸáb‚.öļċ•søĶ6/ötį´‡ų֐E^B€}@ĨÚŊ01é@X¨UcŧˇÚ1ûŗĶéUĻ‘^ŲB¨i0æĩ@p3ëH#N>AųP‚Å(ʉ/Āb2?*lD)´2}͇¯LֆÕÜNqŒâ‘‚lų€Ú=h ’€ņ¸÷m8ÛVNدĨ;~Q wĢ›WåF;qFXãœQpą”îĩ*ā€ŊGÖŽØ–oúęjq>EāúR€āšÂ_NÄ<õĒĖĘ^Ķ'ĸõúÖĻIĀÉ4ß-áįŌ‹ˆËdfwˇÁÄ$¸ū•wOo1dœį÷‡Œú ˛TnÎOZhČ\ v^ãąRâEûJĄU ;ŸĻ*ĩ¸WļRÎl§nzV›"°”īADé´cĶˆ-į]Ēä˛ô4۞omÁį†ūUeT)m íHÅ2 é“@đÛLÚ[nœ}{ÔĐ0ûnÜ!;>ōUŠˇ…=qŪ•QUŽÕé@5-ŋ¸ß÷|Ášk—Qēƒ w5}”0ų€<÷Ļ…P¸zŠ.3CĩÚã`āũĪJVŲcnŲĖāZĐ  …ßžZn'hĪ­‹*ģŪbŖ#š| ū”‹„'gŪNßZļU~n=}é"ãjôĨqõ Ðī@|ĩbLoÉÆ}1Æ*û(8ČÍ!DfÉPM;ŽÅtŨw˜2D=ęmG›Jœ([=3A†dQqX¤Ë˛î!ÁōãP Ÿd€'úī3Ÿ\įšŌbŠAbĮρlŽŌ}Ešä! •˙Jt†#s?•õ<â´JŽxõ÷Ļ„EÎ=( !E{¨w â‰8HˇĒúJÔĀ ã čÅ@Œ¨į$Á ,WĩŲöë/îāRÜđÆaš’Ū…äb7?÷zR˛ƒ÷€>™  ÖEō/î§6ī´ÅB˜†7tĢÅFĀÁëHĘŦ9Đ;Y‚ļøŨ¸dāÕ@b^oÆâ8ĪŌ´I 1Ā^8É+° ŧ‚8éLE[T&á<Á’"īõĻÆĒ`R[i3Ķņ­\sŌ›ĩq‚=1EÆgģ†p pFJô4˛•3ŨōÎqW€QĀ fô\ERШį?ŌŖ LnŦá[§5ĸ@ãĮOjBŖ9ĀĪŌØ§-ÁlįgđĻF@–aێGÖŽ’Ģ’p3Q‡‹wsí@†]Š0PîK–eČ?ž#?iđW֘@ôP6ŠE—tqÎp)’ƒ‰z˙ĢZĐ `đ9ëL sÅŅQ˛&}ÄTc#5<#l 2O!õĐh‚a|’ÃŒļxĢ žŽ2*\AH})ĪųØÁˇ¤pÎVŸģÅ[ z BĨ v6)EU—í ~⚯ ąĢnb‹čTŌM ˆČ\a†:Rę1Ģv~BÁvČp0yŸl“dŽ#]ąļ=j(Š(U>X ÕģšQŗė˛Įæ.įbE=ŠiŽI—d{sˇqÜqL¤ĮDļ‘ž†Ąc˜HĨ*œ›’w ØŲ Qd“ ™LŽ‚5܃'ž)ésšĸĘádĪĄ¨•ĐI3y‹‡ŧqŲ"ų‹æĮČ÷4Y0.Į)’I•3ęh’fŦQ¨f#'=…Ck,IÜãqäũi%‘EÂÍŠ8ÚAĨmFJĶēCš“į-´/­#\˛YEÜīQ;ų‚Ō ‘X0§ŌšäJdwt Sh͞¤ŋkyEĸŊ(ĪJmÄėÖˇˆLtĨ,…í˙xŋģëųTsâā‰įÆ(VĖs°hRDĀuāĶdēxōĖ€.í¸Ī?Zˆ0’HŒŽ€F8ĮsP2–ŒĄd/ģ%ÉëE;–ížV¸œ661íÅ)ēu(]VmŊy6Ée"EÚā`įqPí%bĻå`ĖŲäŅ jZ7n|âą‚ą’ '­ ,z1-ŖÎ)ŠPEpģ×.IŠÂ9Ŗpč@M§š4(ēvË*ļāžjhŖŲ$¯“ķāÕ)ˆ“pĖa‰áÁÆ[Yây€ņIų‚YHU@F:“U^æI rÍ,î Ûˇ#ŽÜ'Ą¨Q G #–Æ{SIXZÜÔ'‰ė Ē–ęža¸ąīÚĻûDM\sUŖ“Č•Ķ9=)!ąË*Aßx ŨÍLĶuåcĒnÍR* "ųŽCc°Å<9k“#:/îöŒôė…Š/ڝJ‡@ļ:ō)xū[¸Œm°NzÕpšōōP9fĪ-Rŋe–=ëšØ‘F‚Ô|-'ۙIĘl%ĶÆ 4`(luį­08K áÔŠ@§ÚĢ:–‹ad-ģ%ÉäķEõ-ĩĶī™R0Dc$“N3ąŽ&E\žBĨ¸%×÷€ųTd€° ęʃsŪ‹ ԕ¯HŒŸ0}˜—íųÆ/,nw^1U‘@^]īqéV‘ũ­äŪģJ`Q j(ē&$*šw;@§Å)vta‡LfŠŽ4!×z18ėsRÃ" W`ņĀė)4­ +…Éî-Č\mĸũXúT™ z–ÚÜHĨŪģöņģ#]?ãų˙ÜēöAœf”Ö1Ē‚Û@Īz%A"2G=Ēē%ÛîäFЀ°<ļŽŌ=ŠJŽ~čüĒŠoæJ3‚2Wĩ1g<~`díE¯°\ąĩyųGåHBã1ôĒk—Éyv.Õm¸îiâg߲@>dÜ1O”.X {ĐUs÷GåT-æ’+h™€ōķˇß­K<ōŖ9¨ČōhåÔ.YÚ2x•&ÕĮAųUHäy/UY3Š&š–0Ėv¤a{‘G(_BŅåH@ĪAUšyZWXÂ€ĢœšÍ’YíÜ)ČŖ”.\ g üĒ0‘ X…]ädņP<ōopĨWiā7zœ(Ū$ū"¸Ĩkcú iu ´‘“ĐRÕY×}Ęã¨\ŠHeÃ8Ī4„ņUüĀfF˙`äSÁÚ­•!Ž6÷XW-曞*ģNáplĨ=$Ūî?„cėŊrT˜vĻ—\íĪÍŒâŖœmũęũåëî)‰Äm;rĖ3ôX Ī#>pŊ1dq°ą?oJ…ŨŪf#ąŒ{Ņ`-æŖ’EFųŽ)‘šw$(Å:nQž†‹ß9psøSĒb–ĒFĀĻŗČZLĸĀOHzÔ ī˜Ë‡íéL3ķßqE‚ú{SI¨]Ø3|ÅGn*Prz)ϚRxϚ…!4Q@i ÷¤ 4†ƒA f Ö ´äpi‘ļčĪ'w™¸uĻ"ãI!—ʏ…É$TfæFHöš˜ŠĻ´ŸŊķPÅprŧR Š#ÁlŠ,xë@ËČæYČ%Áę;† w žP’"Ī#Ø|qŠF‘t“æųA)¤ų“FU …ä’1šiž_-ĻØ6ûf¤7 Ã~UXũĶ'Ë'?wšabi'5Āe@W?ÅM&Fģˆî)œ I–`¤í#+Ō›Â´E |ƒ#­ .šcʈ~vԜzSH˛F FÄNÃĶ"ĸÛ.@;†OŊJÄ$Œj§–T(ŒÁIūī" 4aĨ…<ƒCIžx pÃp"ŒĒŧeCá9i­´ÜŦ 8Ær1@Ŧŋģ]˙ÂėAŠl˙Ô÷FŒĢ ŒĢIįë@œđ{Š"v8ROALYVOēsŠqéHqô ĸ¤Žëtû.TcÚ¤ƒo•šNXŽIõ¤fÛp_ NāT_ÆåU¸ÁīA63Ŧˆ<Āۉb“Í—Ęy7`+cę)ĄNS;ČNƒŋōÅãØß1ÎqL,ĮI# šEĀ ã9Ąäo-˜z3ŸĨ1ŲÉ;C€FÅ4‚mWŠUšF‰đrUąœv§Â噆ũÃÆ DĒĘŦ|ąÎic,Ŧ]‘ËŒĐ§æXčI§ģԐ7•¤Č¸1°Į úSũûŲˆí@ČōŌIbæ)Æō†9ĀĘÔ{Å$ƒM•šYTym•<ûĐ"Äyō×qÉĮ5Ö]Æ ¤äŠw˜ų˙T:ˆŖî%U”ȁŒlIåm>b÷§Nß3ᛁü=¨dbŠĸ26œƒškFėĖvģ¨ĪZ`Fi$Œ lÉÅY5]U•”„Æ:öŠÍBRZi 4„ŅA b֌ŌRf!iĻ—4†‰Ū’”ŌR°!NíQƒNí@ŏũXúSę8ĪČ)ų dĶdF…ØœĩZyš¨ŦAĮŨ^ĩšōYĖ$ŠĮëA-—ŧô܃'/ČŠYöŽNHöŦãūļĶéZõ4Á1Šu8įąį#uF?3tVĐīinĻp>•°’â)‰û̀3ĐP4^â8› Ø=NL­¸dƒYŠî'¸p€ëŸJŋ ‡‰YF( ’ƒÅ-gŦĶ;O‡G͊SxÆyŸŠĮJæ†isÖ¨Ŧō*¸¨Ęļ:ĶZōO.2˜,~ũsGŌ” ×2—“ĘĒ(ãŪ¤´äpÔåsŒ`Š;—3ÅÅAq!Ž?•‚’zš†+™ Ášr 4‡rđīMyQ– p*’M<ļ˛Č\ g hwK( !˛Ã¨éLMšyæšŌ¤`8,p=깖GšhŖ!vŽI#ЍŽKæßĖÆíÜâ6_4g­Q{§ydUpM w!‚7E “†$t 9‹Ųâ”öĒöŌ4ˆÅ™XƒÕi'¸1:ŽÜäpsÔúP;–(?vŖ†Q,aĮqO=(ėķIëIžEë@PĀnPqę)FĀ™āQžhsÅŠ3Á¤&€O"u4č­)û´‡­&~QA<Đ÷4™āQžM&x &žhÍ&yĻëFx¤ĪZLņ@ M!<ŌHIÍ.y4™ŖÖ’…=) !€išéJ 8S¨Á§@ŒĶE.hŲĨÍ43@ŠAæ˜ (4üņFyĻgŠ\ķ@š3MÍé@ SsÍ fŒķMÍ æŒôĻæŒô Í⛞hĪėō)s֙žEë@ĮgŠ3Í3T57 õúŌŒÖB,ĒQŌ69,OZąģČžÉád­'špéžj9æXS{tūuZĪ.ŌNsķœ nĸԓ÷wsBJöƒÜę…Ė8Nšīа“+Ä >´]„ļ6bĒ_mŽ6–ŁfiJŘƺgĻj'ēÛ4qœeēœô¨.aHŦPrÄdÔO¸A0ĒI RúČæå“ °t9æžd@p\隡—ĶãjņųQmMw'q<ļzRiËSHęęn\š{ȈpÎ÷5JëKpėw¨§F;}yr šĸŌ(Pŀ_ZO5 `8'Ķ5Ÿ#)ĶđšĀnô\Dǰm-ÔúŅʇv_YQÛ Ā‘éN&¨íj`ÍOtÅmÜŽsŠ›jĐqž-ûwŒúPōĸš€ÉâŠ2D,CqģsÎiˇh`ŨĪ4ė‚ėēŗÆĪ…`M1XœŽ qU/ĸÚÍOpr˙CEĩ„— 'Ë!ųģ{ŌÛĘÎōī9 x¨HˇIWī)įÜQ€“šĩ; MÔE€ŨÎ}*)îvNĒĘ:ņUĨ9‰TŅGjšbÄE°9ĸČ c5ÍäŒgoaH×q†#$ãŋj€sq>ßCŠHäŒZ˛nôīš,-I:ÆĄŽH=1MK”w ‚ 隭("ÚŪĩ$ŧ\ÃSd1ō\„rģK×Ē;™ÛRFMG#î’@į<:ĶOüx÷ŠØEäûƒéT¤ ÎâR@ū¸Ÿp}*ŗH72Ė™ô RC %Č tÅ"ܒę ĐæĸšļaĪ\DJĨ”Č#Š4h˛LæB‘¨;zæ‘æaũ¸n˜4ŌZœí,Ļ(”I$ŒJ4Ī)Sųąši’F™‘1Į­0īwŒ” -HˆEÃļ8= DĖŤ u¤F’4VĪ˚–Ūd‡ Ԑ!) ÆŦ -4RŠ‘‚tüiĀͧãNĻ72BAŠF õéLImŌ-\ãÜTŦÉæ„d‘ÔŠh0™JykŸ\S¸†[Ŋŧ‚Ë’}E,ME˙|ū´ô있ÆW¯˙"/ųæŋ•; v„N0Į9ĄÖDp  N ‡ūy¯åMŽ8œF88Īß(ÚsÖ¤ybxĘyĢČÆsMû,ķĖQöX?į˜ĸč,1cƒėĸ•Nsšh…X¨–ä2/Aš—ė°ÂΗėgî~´\,6áVFI•YzŌCK3ÎŦqĪ4˙˛AũĪ֗ėpsõŖ™l"xžv1Ü(Vėy§ˆ!ŪWššëœ÷Ϙ­2FĶ‘ÖžļļĖ2#ëNáaąÄwŠ–ä^€ļŌ!B7¯#jŋØāūįëKö;îΕĐX[UH#*Ō#dį­6(–)ŲŌUØŨW4ĸÎß?wõĨppūt]™„Ąq ÂĒ7QšeãFĮžæ$æ§6vādŽ=j5ŠÉØ'§Ŋ>`°ų# "ÉʏŒiđ*ĸŋ›0v~ŧÔ ’ũ끸ÔËinĘRA÷ĨpąĘä,dôÍ:xQã@’€Čz“NûÜ?cƒsõŖ˜,5â-ĩÅČŪ<uē$Nō<ĒÎŨéĢojÎČĢ–^Ŗ=)˙cƒûŸ­  ą$ĻŖ(θ>õTÄÛ|ąt6tÆ{TßcƒûŸ­!´ˇPÆ„Ō \"†•Gš4×DkE‡ÎLŽų§}’î~´}Žî~´]˜Ų’)=ŗ*ē4°ŽRōÜcĀæöH?šúĐ- ĪúąųŅt#c„Č|ä;ũúQB°´M*°cœæŸöX?į˜üčû,ķĖQt!HĐ2īš Ēx\ĶoįŠETS–¯lU˛ÁŸõbŗA˙<ÅČ,,rÃJ‚EāzŌK%ŧŠĩäR>´ x1ūŦRũžųæ´Ž‡ŠTĮZë)ũڒ_ŗŧ ”(S‘Rũžųæ´}žĢųŦG;Á430īQĖ ĄķđPc"Ŧ!Įúĩ¤0E˙<×ōĸčv CNd3g#Tem˛@œ…';GJˇäÅ˙<×ōŖÉ‹ūy¯åEÅb´lƔ…gūøüĒÅ!ĸāWōį˙žŋĨ9ŋį¯éSŅEåIŪSA…ģĘÕ9¤ĸāAäō54ÛįĢąĢ’•ÂÅÁJ)´á@ž÷§dĶŋ֜)˙+#új5áVOöĒèuÚŨ !L{?†˜ÆvĀīģ›­*;ŦĘpÚŠ|Ĩōö …C†É$zš."8ŲÄŖ{‘“Ķpķˆb0{Tĸ$“ƒœRˆ€3÷úŅp°Ã!"ŸŧyĨí$ŖyzbäŒ Éų:RˆĀg9ûũh ķ˜ÄœüĖqš 8•ã.HۑCĸĮŒƒÁŠąŽë†9$c‘@ ´vĒAÉcžÕ(vI‚3g#9ψG—°œŽŪÔåŊŽæÆĩ Éåŧ›žéÆ1VŖmȧÔTDɟŧsš•Õv/ĩĨKsJ… ‰3Ĩ>(ö3įqÍ:D. ĸGI\įpôĻĮ3—˜q‚)ËÜ›$ <’X|€sEÆĨˇČKgcpõĄŽ2’1†9Å=‘€8ĨÔœ0 ŒƒÚŠË‰ŽcŠ Œä‘Ú­6J§ŒéUāˇx œ’G&€ Ŗį]Gđ™ĒØ8…WXqtĶnÎF1éS@…Ėæ eÜÀ1֝įĘ­æIÔcĨ8Zâ "Ũ÷ÎséNkpŪIÜwú͏†,Ė&ēÆÁ‘Å0\Î ŠVpwœŠ›ėß<Íģũ`ĮŌÚƒn‘o?!Î}h¸ŽgkŠPŸ•W"ĒK4˛Ú+3āīĮh۟4ȏ´°ÁĻ}}ŸĘŪzî•Æ\2Ü,^fĐ%ąÖ›öŠZÕʂ]N3ŽŪĩ)€—Yâ@0N:Ōų'Ę+æ6âsēĀKYY؃HŒt"–ęVBĄ_i>ܟĨÁåČŌÜÍÔ≡ķ$G U“Ą¤0Üə•ōv ŒõĻ<Ķ‹d›Ėå#L–â3#ŗ.9÷ĒŽ7đĄs†áHé@‹FIe¸tGبš>椴™Ĩ‡-ÔGƒ2W*Ä`ãŊ>(ÄQ…^‚’”f›ž(Ī4šæŒŌÍ%8ž) !y8gTĄŽAĒǝX\<~ƒ­]ŪZBv‚3ôĻ"Ø4ÅVw’8š ą8›#8>ršopö °Q“Āj–l=[aš=Å)‘o$õĨ2(]čžĩLņĮįž~‚‚wD°ú>ö  žb✌SÁĒRšdq…p=æq# Ē8Ü:ĐŧŅžją–BcEĀf'°Ļ5ÃŦmĀŪ­ļ‹w4֑˜­CįäÆq@§ĘF$ĮĨ!ŽFz8üę@rĒ%Wû<vúT‘ĘáŖÖcĩ0-f‚j—ÚÎ å6įīVK|…‡ĻiX.9ĨE8,ô4Ĩ€$jŊē+B€,ü’jb uÎv8ÅhæŒņU–YĄ °ČÅ3í+ bŸ3`¨ę(°ķÍ.j™žSæ2… „­9&}ņîlę(°sԊŠ,īâJ šd¨>Ôę < Ļ÷!™>ö6Ž´é$’D—f¨Į=M;h0 Č4gš¨’8ōcL ĻI4ž|ģōCƒĮZVŪáœgœQÅViˆgÆ8M‘e—1#Ø”X.ZV Č9Ŗ sULĪå‚02ÄŽ‚™+ģÛIķ†ÁŠģž(Ī5UÚ@ŅF­ËN)'•СīÚ8g4X ;†ãĪ4+V2Īt­ž g ‘@8fršô  YāĐMTydE•we”drŗŦ҆rC‚Hô  9¤ÍCrėą§3QHåe–lÉ dšĩš3UCČ҆<œsŠiˆdÚ䑌dr)…Ëyâ“āÅ[ȨžÔ †ÚÛIÆiLß{(AQœP1Æ/”Ė9Îy¨å‹¸fldž´ö”Œ9ßŌ–Y<´-Œâ‘ ’IŒö¤ `rp@Īß=ˇ…ōūb2hķC*’ŧīۏC@Įųk†^ĪɤhU°NF8=Ē6†ō‡šV•‹@NM"O,(œĐ#PĨq×­2ԟ$}M:F*„¨É‚DˆrŖœPû†ÁīÍFfũāÌįۚd,Ŧ ”Íš(Xņ´‚3ŠVÛ¸Œž*˙Ö§ũs§ČÄ:Üķ@ č lŠē2ŖœÔ^dž^ũÜnÆ1īRĪĖOƒŽ) #*Ã*?J$Bä üŖˇ­CČDÛîôšD‘QI<““Ū€,rqEA*a,HÜ;ÔĮî}Å5Õq$’XúõĻr<Ā:qšZ,;â˜UCo'žŲ5ƒæ'ƒĮBzSX’WˇoņPx¨ŒŖŽĢD# ‚sQbaŪ€&W :ŒâāœdfĸۆLz`āČ>œŌà ž”Íāž¤—ũYúSHų—ŽÔ˙1IĀ<ĶNīZ`ãyéŠn$õé@˙Ųleptonica-1.86.0/prog/underlinetest.c000066400000000000000000000071061506303110300175600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * underlinetest.c * * Example program for removing lines under text */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *files[] = {"underline1.jpg", "underline2.jpg", "underline3.jpg", "underline4.jpg", "underline5.jpg", "underline6.jpg", "underline7.jpg"}; int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixg, *pixg2, *pixb, *pixm, *pixsd, *pixsdd, *pixt, *pixd; PIXA *pixa; setLeptDebugOK(1); lept_mkdir("lept/underline"); pixa = pixaCreate(0); for (i = 0; i < 7; i++) { lept_stderr("%d...", i + 1); pixs = pixRead(files[i]); pixg = pixConvertTo8(pixs, 0); pixg2 = pixBackgroundNorm(pixg, NULL, NULL, 15, 15, 70, 105, 200, 5, 5); pixSauvolaBinarizeTiled(pixg2, 8, 0.34, 1, 1, NULL, &pixb); pixaAddPix(pixa, pixg, L_INSERT); pixaAddPix(pixa, pixb, L_INSERT); pixDestroy(&pixs); pixDestroy(&pixg2); /* Get a seed image; try to have at least one pixel * in each underline c.c */ pixsd = pixMorphSequence(pixb, "c3.1 + o60.1", 0); /* Get a mask image for the underlines. * The o30.1 tries to remove accidental connections to text. */ pixm = pixMorphSequence(pixb, "c7.1 + o30.1", 0); /* Fill into the seed, clipping to the mask */ pixSeedfillBinary(pixsd, pixsd, pixm, 8); pixDestroy(&pixm); /* Small vertical dilation for better removal */ pixsdd = pixMorphSequence(pixsd, "d1.3", 0); pixaAddPix(pixa, pixsdd, L_INSERT); pixDestroy(&pixsd); /* Subtracat to get text without underlines */ pixt = pixSubtract(NULL, pixb, pixsdd); pixaAddPix(pixa, pixt, L_INSERT); } lept_stderr("\n"); pixd = pixaDisplayTiledInColumns(pixa, 4, 0.6, 20, 2); pixWrite("/tmp/lept/underline/result.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 100); pixaDestroy(&pixa); pixDestroy(&pixd); return 0; } leptonica-1.86.0/prog/w91frag.jpg000066400000000000000000004144731506303110300165220ustar00rootroot00000000000000˙Ø˙āJFIF˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā tL˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?õÔmŦsÎįįõF{âŖ ŅŖ$‘ČÁöĄrĪŋ įNvüš#ž>\Ԋŧg$ūTÜF$ôéLķļH “ƒÁõ¤y0ƒ9ôô¤EķFrHųSū‰0ëCRüŠ™Î֐{T{ō”|Ŧ=i›]Čvl ķÍ,äÄJí+œRŧ˜€}GJnTēŽ2@4¤…\ŽįĒg%†3Įۜ‚ =ɨ÷~ųŗƒÉũi¯ĸœ Éã5"9Xō:2 .ėÛЁŽÔyûĀ$qÎ3Ū“Îc#…˜Ō[Î Y=ņŪžų-š˜ƒÜQ.w*<ûÔÎW ō:cõ¨p#lį!‡eęŅØÛM}>ī..Ø^@j 'V‡Yˇ6âæ$#ÎB›Áî=G5u.`™™–MāeNpGjƒíļ’\-°ž—<ĮŧnüĒ‹x‚ÄëëĻŅ\@V€l œ•Ą$…zŒÆ[‚=˜n/*›o$ԐΊĖdWPHųH§ŦË&JŽ>÷ĘrMJĄšE qßŒŠ›w˜ØÁ@į4Á(ō°rǧ#ō)ÍÖ9T’ÎčzŌ}Ąe…ãü§ °5[IĶtũ"6vë“—ÚNŪŖģŌl5+䚸ˇVš/õoš”¯ĶŦÛˏ2dŠE*Ũ û@|cãŊ$Ø ĢwĻE4m•A'Ô6ķŦŗ''?N*kÂą2˛¨.1Éj5›Ė€¸USëŒt& ˇ[VÔfŧDÍË(C!įĻ>QÎ=đ*W•Ŗ˜ ryíN‘ķ"FŠ9<’8Į¨§Éķ …ÎTö¨‚ERČÁb}ĪųæĻ‰ŋr\yƒ$/ ÷ü3QË&ÔGØJ–Čų…@.‰ķ$T2 ß(8đ¨L­ģÍå`Æ@=(š–9m‰TÚO p?•déētrĪt’M<ˇį•÷č8õ­;id€ŠJŨE:æy]Æ0¸ū,j&U{ąwîb~`>_ķÍBҟ´&ȊHN . U‹a4ÛŖ]øÁ9õīIw!XÁÉeCĀ `{UXer:DčT ŽŧbŸ4ąēEm6Ā’ ”ôĮjz%ŦGËHãōrĄFyíԘÖvd[x dį@į§ĨW{<îe‚š?™AAújÅĶ4ˇķî.>Īpfréē‡=‰í[/^ÚĄš†9ÆåÜ? ŒŲZŗ6p.õ@P ÃˇŲ,ŧŠŖŽŌ3Nc ÁÁęETšą˛Ųæ-œ"%9Á@:˙ú¨Ų§M§4ičĪī<˛ŧ'¯Ōĸ[ ao"Ejd‚9>•LéÂ1‰63Į8˙8­EŠ{jcųŸ.ŸĖ˛Îˆō—qOøUMKFÍēÅc @3n'œĶŌÆ;ka7•˛p@~{tįĩTŗŌ<š¤7°Ģ r„“ˇõĢ“[ZÍVˆ4HÕÚ~SøUAkj X…¸ēį?7ŊCö T˜ÜŧŽO­ mWŠ#¸œsØqNK dHÜsˇæ Äã4öu™O āÕ!om‰™b2rpMKũžŽ‘gÆ2'"­*Ŗ!pÍČĮĄĨ*0ˆ ‘N;BĢ į SQ”]]xā8h•‰›$‘Ô fŖũĘ Ė;“ž´ą.ûJqõ"´aHŠĖr0X€?Zģ‰ãܰé ˙õŲ[ægž¸'¨Š¤ē\( NîbĸܒąÂŸ—îāôĨ17ߖNGoi!ÁŖ‘ˆācņŠYÎШ6íāņJ¨CtlžâĄœDĂûGOzVļũÚ `œäž´Š’ĮqB1Ā=ŗS"īEۍĘIÎy¨$?;‚Ä–SĐ Š$w>xį$ûô§D9ŧļSwëL“lhßŧRąãį5$ŒX¨8Âõ!Ē2 M÷Žā ¨ĩ5åv\‡yūßĘŖŠYGbY8õ*% œŋéß§Ö§}¸-ŗũâßáU–RōĘxÎzŌų‚<ģnŽ2Fy¤Ver cĶ SZMæ, ĘOcV]örr{ūT$›˜,l1×8ęqRķĸļI9S˙‹hÉ8§uL7\ô¨ Ęģ°ŒsŠÁņˆdđŽŖ´d g“׃NĐėĸŋđf āˆÍŦ`íbšq\—†Ĩ:wÃínâ&ÚŅÍ>Ė˜UkøâĩøOeubéY'Y€ųˇ—äįņ­KéūŅã ČËķ5ŧŽ~Ĩ+ˇ ‘ķãōĐęzt–Đ\üąIŧ6ô ĮĢÂqö5åĪödÁmfōĻMëšO¯Ķõj×Å)tš¤qYIX‚]$eŋŋˇZ­'‰­Mĩĸ%œŌ\Ü'ö}ę…Są$œsŽ*FņžŸũ&ϐÜyhū\ˆJ7ŋoƧŅuĩ™å+kw\8ySj¸#ĩhŋú<ŧÁ‚;ŽĻšÍ[]žËÄ~ž–ŌJ&%܀ uÁá­eË|š_Ä7™­î ĻL1‚äúvé]5Ÿˆ4ÛŊ&]TJŅDŽT‡_˜7\zôéëIoâ [ËÅątš ›Ō9ĐãÔcŠŗ.øĖjH•U¨ü;ÖCxËEûŪGÚˆrļ§$öûi–Ie#\’.+"FYsÜôëJÕ“wcs+˛^DōF…€¸=Ŋč‚öÆöeĪŒŠÄ*@õĻĻŖcqyöîc-Œá[œŽßũjeÕŨĨē$2\ĨŦĄhr? dčwוœˇW–7!v(äUûÃ"éRŽŖ†nyxQëøÔ‰*$\_D¯ĩI…'ãųÔČ.aßūfÆÛ˜Ę9<ԐÜĮhˇNī˛ÅģúœÖîŠ$ú!Ŋ´#(yÜ{g*KIËŦxt/"†`¨úS {™nŽUš/$1°l°íĪ4˛4ŌKmDĀR¤ãŊ!‘—`“Ņ —Ž•!Ë‡į'õĻŦ{ģˇ)Î ëžÜSŲ÷eÔĄxŌ!‰đH(1ÛɤPr!WķšįŧdßņHjĨË@ØįÚĸĐu8ŸÁödéĸ#x e'vŅÁÉŦO éŖÃz†•¨YK\4§~åaķcœÕFŌõ+ß Ûxjk)!’9Ud¸gYE9㜜āqŠš¨Kl˙4m%IM´RĄEaōŧé]>—ywd'ģ´6Sî*ai7dųŦŋĨÍ׆ī-- žæk‘U;pGZ]Í´đtOapˇ6đųmĐYˆšé\EŽ…¨Íā›Ŋ*[ImîŖ¸1ųƒ ũąŸ^ĩģĢE{âĢM3NK ‹vŠd–y.j <įÚĢęŪšģņŒņFÆ=2ö5–ā¯röüNįOđ˙…ī—AÕaŊ`.å‰ėā/Ų8#ؓPhŌČļPiOá`ēŒ@!¸– #?|ˇ^ž•/ˆ´ÉüS ؜[ęQˆo Ž\1I­éˤøą/æŌš˙M’ŲbÛ{Ėl:qøRëAåđmôvÚ3Ú­Ė‹äÁ_9ÁŗĶĨlÉĢĮĨxVŌõ­.ŸdhŽĢĖ I§JۊXgŗ†ā)á]CĮļ;W#âf’ĶÅ:& ļōIk"“eŽHî?¯ÔGâ$ˇ,’$_cØIˆģЉ •Äūžō­¤fˇÔžŌņ2^>œõŊĄ]éWzÄiz4ˆŅŠķ&–2ž^AārrkŽiČ$d ãįēĢagĸëļĶŌÍ<Ą"Ų’ŲõVæÔézg†-î†&IüéS*…ŗÍlk€i~5ĶuI ûEåīÆB6_ĖsYwpIŠęZŪĄcē[o°”gAďĮ×˙­M”Ûę^ĶtģUY/K Ā<ÆGŪ-ĮŸ1ÅZÄVō+ĘÖ>\{OV 3øņT´Ų´I´Ë{Iíī%Ô‚ũœ;ā°îp+RÖâÅ|}zŌ•ž9a€Ā ķųÖS@žģˆēy­r ¯ę?Ĩz5ŦĐ\é6žYČhĀČôĮ\Öĩsio¯ZÁŠÖqsy7$Ÿ” ã5ÍC)o\$NÎcŊ:cŸūēÖÖõ-:÷UĐ$ŗš&!Ām Ŗ€Ļč÷YIŽ[jF8îZF'Ėū%ÁĀ˙<Ötl~[/ČfDy$֏ˆáĩļƒLš~ĪjĶ+D1ČįIqŋl’-B{™'ˇa3Ļ  ã“€9Ē0N,–];QȆÕÖ+¸HCëëԁ5Ũ¤mg,K4ÂÍÅ­Ä'˜īųRYEĨÉĻYM.§ –&BˆģÃg īW4Š­fÖĩ‡ŋ*_$(“ûœŽ?J„Š˙cH‘nķFÎ; ąâxĐøjā•W]Ĩš=@돭e_ZÛĪĢhˆčˈyœŽqĶ4ũ?+TÕc„b“5lzô­+čV].đ273 ũøôŦ/˛¤^iĶn÷žŪŋ{Ō5¤6ך)|ļ•˜G~sųšŽ`¸Ö-üĶT“ßŌ-Bß,2ÄđOåõNŽ=JØš‡ũ`ÆÔb@lvëÅsqÚCũŠnü× 7OâĨ‘ŧ÷‰]äžAZ2pß5–m |æf+÷Žj{¨Ÿylmåf2™Kg>õ]_EöĄ4jå‰.ÎA\OJ[¸ZMNÚwe’0I8ü*ü‘ĒFˆ­ ۀLƒ‘õŦđŸjŋ–)ä*ąŽ}j9ãš+Ÿr¨%™OSĪ‚Ib–h¯ŗËŪyTGÎKh'ķd,íˇ¸"´žØ‘íˇX§'Ą`?¯ĨJ͉q}Ē;J]Á”d3ŸsÍ$„€3“Éųp3Im–@ΐ2JöŠ DâNOūjg>v 7.ONÕn(rVČîpˇãVĸu[}ëØÆHōĻ,ąĻU‹gžsúâģÍ_ÂVúg‡u‹ãy4‰4įoŨc'žŠĀcUK›ĨŸû1؈°N2^Ŗ­CŨŨ҄ôeēš(u2\Jī|sˇwŊlx…ÂچqĻM(K‹•ļžŨ¤.˛ßõÖ˛cÔuOë:–Ąē[o â,YĄ`Onk§đLŠ=ũÄ/4/y Rō3ü€ņŒšéž@å€Ü>”ČÂí–eĪ&ž¸#,pGNœÔr€°%ŗŽĒEËĒ‚pŖ‘Qųa2cgqžôĒŽí‡'ˇ\T27”HĀŊjHq—a–â–W`à `ŒpzTm mč~Ã2‰sYr ™~įŽx"…ÆŪxÁã”íōö¨<ÆE{MI¸4JĘĮ9"‘Bí' 68㯭U–ģ¸dy€zÆŋÆ}ĪĨ-Ä~d2A2”Š^šĻÁm˛ŦpA|€BĻŊ+!ÚÛW+ž¸ũxúP@hNOđũjŦļËr×ke Säūđ"î>ųëWžL¨Ęã&ĄŠSå ȧą+  ļ}z­DP0fōsÎ)ėå…SÁęO^č4J$ @\ŗ`¸cĨ2&2•‘˛=ú uÆlģrÄcšEF* žxPqĪJ™ĘÂĄŗœŽŋũj…åU‰70f=9æŖŧĩŽūÄÛĪŊĸ$U8ߎĮÔRHĖ‹ĮʉÆôíCIxÜg'?{ąëŒT^\(îHŨœpGĩJ.Éą†8 žžÕ Žmį’B™ų8P~žôÂŌLŽģÂdšŲĮôæĒxA‡D‚R—ROŦdE7r+L¨$–Uw qŒT7ŗėU2$lzË×éL…×ėėT '+Ķo­9QˇyjĨÆxQĪžjŗųM,ąWgrĒŠ;O¯>ÕIÖ4 2F‰:ŧr=:ũiŨī%‰1'ĖIŒū5+AfŸŗÂǜāÆ1õ"Ļļ‘P"Ē”Ōžņ[Lį‚)Z?ē1Æ} tĒØ‘}3( ÜwĮ^õ Vv*˛ÚB6PĒ( Ÿō*W´ˇšdžâŌ H$dęjôĢmŧ§ĩˆDŠūėp}‡ųéMkXäŗû+GBÆ}:SmŦ-2–1Å0Ęaŋ­VM7NrGi f@ŒvôŠ °ą°Ą…"‘Æ28ČúöĐŦ#ŋ3Eo;üĘÃąqQŪi–—S,×VjÎ7íëėjxmmŦŽÎMß6zųRŨXE¨Zˆg1Š Ę_ŒúãņĒŖéæâ2–á%‰F–ų>‡>ôi–ļWr<:;–,NęŽ` rråHÚÃ=GĨT“DĶΚmãĄi˜žzvúŠšMĶeģ7šD?*7˜A^k>]ԉØnËw199ęi,í­c˜s .Gb}ņôĢ×Hëi2c͚HΟQܓŠÅ˛ŌŠŲFnã“ōc/ō‘ëÅ\ŊĶm&ēûI.—iUĘîôŦkË ļ‚ŪÖXwd°ūU~ =bž)ĨiL`#åöĒĢĨÚų’HRŠA+ü&¤¸´?mķˇÄ R7‡­ŪęŌ÷Qģ¸ž– ˜<ŌĄPú€  ũit­+S}\KqÜĻIR]¤dŽzÁ§hÚeŽ‹i%’˛Cæ3[8ÉĢ#ī!ؕ#hÎų‰,Č7mgVéķc+;4ņÆŦG<ƒéQ^¸2msŸ_ķūEI Ų°mũˆ'Ĩ5–G)– ķ Ķâß7÷jĩô“yŅKŒÔâ`°üüg$Œâ˜ w"5ôëŸsC~đgpWô 1€¨įš`“iÛ€qųzzČÎw |ØČîE9IF$ąÁã4Ņ+I)R01ך‹Ėu_ōN08ĮųÅ24ŨtČÉķcp9éíV !¤nÄû‘ÍJ"˛¨É_j„3ÉnÍ'ŨSÎ$SGō@BŗwŠw–û9nBœ1šTGûŽÅ˛x=1S´cŽx#>ĩ ÜąÚZKs;ĒÅrŨ€Žb–žĮÎŌįK;æÛėAĪĄ*:QÜxâÜĨ¤Ļ¤žKÜĢŽ3œŠīRjž.ĩŌ58l#Ķîîdž?2/)2c#ĩŪ8‚)í­?˛oŌîá<ŋËų:Ô°øŌÆ}úúhωėß˖ q|ֆŸŦ Nækca5´Ņ"K‰1†VčAڝĢę–Ú-„sʎK¸Ž8ĐrÎÜĪõôŦ][ÅOkáûûČtûˆî­¤2JŖÄ į‘ČĢ âXíôK;Ëû{„–āŦiÁēGĀéĪJTņ<Y_Ęļ×h°ËnGĖ?XÖzėZŸ‚î.ĩeēļ˛Hb $ãiöÅlĻšĻéöVéstō[‰•Uw9yĢ3TņŒv‡JûŦ˛GxáŗårSĄÕĒė—–+ąˆÜ]Įv!f[vR¨ĀŒüÃÍ2oé÷‰–_-$ōŒë1ĢzVîüGĻX4đ$Ā•ãŒ˛Ãž…ˆéšČņMܲj^x.œCq:†Tl#¯?­tōۂ왏āV=߈´k)ŒSģ,…•Õ *Đ1‹ŨgMļ¸t’g‘ʉq*Ŋ‰ĮARĻŠĨËbē‰ °āHXcßŊsrëæoiđŲ]L-dVķ!dÚ@5Ĩ§ę6bīRē“ZY-ÃgkļöĪzŗ‰ô™îŖˇ‚ūi1°ü~Y§ęZŽ§ĖŨÜ"ģ(;3œSč*Hũŗŧ—ąÆĢ ã˙ÕL¸ŋ°°EûSŦ,ĮåŪFOā*qĨŧ/¨EsFûōĢã8ÎüčQŌî;DŊļy\åB°$ŒVMž§$>'Õ-ĩ  m Aŗp ˇ8īZ°Üéė!csÉ YÆÔ}jä–ËŲCrÃßڛäūįk 2Ûsž=ę-‘î2œcn:‰mŠ‘ČŦxíÎyīŪŦCpĒû2H^(WŌ¤FF,ĒŲ œc8ú~Tf—1ōNëŽ1CDR2"9'šāÕi!hî[æe2NOéū{Tm„m!H8‡?5–äų"GerpžŸJXĐo{o9Û9`r~• ĻAšŠŽ ëŽj2eĖ@€UĶ‚G4„–¸18L|ĒséĪŌ€ ī2ŗĢmã#“ū­SEyĸšrî# ‘דښ˛í ,xā`đ?.);ĢļŲsö1éDķĘN9OSŒ˙õę¤Īæ(ũd}6ž´ØįV;ؓ _ēŨzÕį,Ę2TFFNãČöĒ’ÉĘ#yÍT#b Ŗ“‘͍éڜîĢ0R9+ŒĶūĩWĊY7€ŒņÔ͜@a)etô˙"’0ázN?Γk%Á9 G!ŋ§ZŽQ"ŠqŒaúÔ#ŦXg æÃ!BœœâÛ`í8ÆIę)ŠÚÁ˛Å‰súĐG´( ‹$ķBy€ļF?.{UƒF›Ō@XĄ•_œ’ĘĮ­9âËîWáŽ@ũ*ÁËā†\Øî9ôĢfŲ,Ģ'Čx*84†F^uõbsüĢÜ|…eRYŠî$gĨ=Ŗ(Fw2Aū5b8ąMß>>÷Zdđ€†åG S"ŽF@rUúá¸ÅVPŽ‹,OÆŖuÛ `ąŪš°3:8‘•ÍÉĪ•),8'8ųģķM–Ü cīKXī8„† 7:ųœTuĮaPøÁP1čy¨d‰Œj‹’¸ųŊx§*ʕ\žEeŒ1;ĀÜ+Ž3UŪŨ–7dp{āņšX•ü°ĄžcÛßÚĸhËÜ4Ām;vŒœŌĒËö’p¤pO b§ÎÄlŸ“޴ˎŪápprilLjŅüĮ94¨¤žâFķĮŌ¤Š6$™rzŽ˜§I€2§āûÔd pÜ:ö¨§Y.JũĐzU€Įh“zį˙ÕK†aŧsČĪj‘`ā’ŲŦoYKŠxnöÎũėҐ™=O\W= ęēĨΙkŖļ‰u ĖH"–i“lJ `°=Î=+'CY´>M÷²^^G#,SˆGäį ū•~ķíkãŨim%dˇˇ)+à ՘ĮJ“Vidø“ĨOöYÚ!ey( ãéXļh­˙ 7ÚôËšāšēV ä8,…ųaĮPk_Áļ×vZååŧ3ÜÜi c{…*Q‰ûŖ8Î+KÅĸŌīMļĩŧ‚YbyĀi!´'Æzį\™‡U›Áúõ“4÷–đē Yš3ēA¸î@­=_Y‘ô=-ā¸Žę“Ür^ r sĪĩPĐÔĻŖâh"ŽđũĸÂķFŲq´ōIõĪ‘^Æ˙ æą)0¸‰<˛˜ļp8įŠ†ũ-Ž­4įK‰,5 khŽ!_¨(}ō?Z/.n~ÉáMCR„Ä#•ŒĨc#Œ=ĀÍ]ÔîãŸĮÚ{[ČrÖL€AW`qŸCČüęŋ‡u;;]´MBÂYuĨaöfŒ“!ÎAãøÕ=kPk‰5ëf`uPĸŪ4ųî1ŨŽ2F?JšæöÔĮāŌ&”ÉĪ+€Ŗ'ņŊI^D“Ëā…ā‘ę+Ī•8ŲK0ÆOŨëøÕčícÔ<]â;YÜ’^9ė?•RđĒOyŠZiˇQ€šTŽīĮŪ=ú×w Ũ•ÛJöķ,žKmr§;Z§’HŲJĄ!W“Į_ÎĢ Ú˓•qúÔ3æFŨ ũáŠĘŅî(ÜŌÄvpHܤŠcíEyÄh0@_ÖŖ•Ņc ˛…p>UQÉЍ‚‚ë,€`“qĪųÉ6|ĨHT<0Āã˛ÆŽą]ār=Ŋ>ĩ""E!v—ī8÷Ē×1Ŧ¨ä†MĮŠ?‡UÁBŠ•Ž3íŸzXcÅÛĘH;ũ:æĸž"VåT{ČæĄ„žc!\ŲÛ×ōĒŪKDģŒŊķš•â2€‹ō•Á÷=*ų4`î-ČëÅ:4Á'ʤŸ›p\§,")"9LcĪzœJŦĀëōÕi\ų¸hŲW$ã­W!•WüåÉ4˛#1iY`c ÷ĒņDΏ‘ˇyŊ*Ī–°Ä¨ļF0*¤ÜUBîāqųSěsēbF<ŗwΐáFF˛zôŠ–]āįoœtĨyV8Î$²†ģc˙ é Īö×R=›ü+EgRpy síR Ü–AqŸJMģX“:ƒQģ¸m¤)$œâēžrqúR;å3ëU.īíė,äģ¸}‘Åː ĀJm…õŽĄf—ašIgđŠ–CÉΊU5Ö´ų5wŌVekÅMėO×==*øų¤$ŒLĶvĀFė<ƒõĨ$õÎvņ–ôŠVRW%qÎ+:˙VĶôƈ^Ũ¤>k@Ėy>ߝ\ķpÎ'4Šģˇ†\/\äÔ|6A8Ī{Tü`*ghsŠC¸•*j”Ō‡+Îėx4ŒÎģĪ$ž¸ĀĨRJ’\;ž;ÔGx`dl¨äsĐöĢ*<õĒ(:T|m!‰œgĖŽWË}åNŌFË´Ę ’vœÆĻ2~éļœpqȨá Đ)ĘäœÔģUrįpÁôĒÆxaETg ëšcė#$ 79#ô¤dŨ’švĸ„Á*ĨÂcœm$uíVƒ"ČO–ģČÉ#ƒPâē$iluĻČ![”jī ũßķÍ8dîÉlį°éÅWŠ qp'(žgEmŖ?ëQŨIo0ŒÜ[¤œpYrsūE5¤„E$jČÍÄj ƒÔTąØŲCĩĄ‚$9ā(é[Gąō¸´€‚9?…Sû™*m’Ö¨ÜeĮáX˛x^÷ûBâk{ËQÇ <Ųxč*öŸ¤6jöę2dË;€âOQØS.­áŧˇXī-#‘Ŗ &ėUĨéŪR[X,“‚€Œũ(M Kž$en|ŦėmƒuÅ$úLQ´˛éĐ[ÁxČvĖÉÜúāsQčöéž|Ķížūāī–E€-XĶ⡡yEŊēD_æbī?|Ķ ēvŽcšN>?*IZHĸZsŧ¸'Ą¨!™Ú69eR2[Šë‘Hr˛ŦY,_Ąú}1K$×ļé1†3ƒŸ˙U;í!Œ‰į œž{Pí/3ĻŌSiaœ…ô=ŗQo!HāEœ`œqM3'žUPíüVĮY=;ŗîkŅ<ÂbŒŠXĪVŨ\6Нkž!Ô4Í7íJļj ĩ¸BYØgũ‡ ĒÚÖģâ‹ YŨ\Ŧīžq ˆP6đz7\ĨY˛Õĩ}'Æ#MÕ/ãģļ{&š$DËÆx•%Œū%×txuĢ čcķ&%,ŨFÁ$`ˇRiÚfŖĢx…ĩ9moŜV“bTŒ6öYŗÛéTm|w¨jv:uĸŦPjWMlōã*›q–Ûߨ§q§üN¯/~ĶŗOgY ;Fx8ã֒/ø“Qŗ]OOļ•ÖIÛan 2dŽ_9Í\ÔõīGâģM"Ę[h–ęßĖdd˜Ī9Ī<ž+­ŗžņ4ô[™#–áW:ŒÃŽsúū¯¨ŲŪŠKĢ{ o9Āv’LđsšĘ—Æš™đ õŧVËp$ōå ¤ƒķc gŠ–?k6$ąąÔZÖX/`2)1ãܞj¤ÚÖ§â Xšŗšm"Ƒ˜Ë’[k=ümŖÅ5ĘFnĻŽĢ aqœŸ§Ö›ĒøĒĶOŅm¯tčĖéw HČSĩqÔANÕĩ¯ôķŪÃ0%âˇXŲ|Īb1íūsSÛx›Kē˛ŧŊ‰å1ĀyēōûCkÚeŠBßž—|~hcfeS܎Âļm&ĩÕtÄšļ•$‚E8luÅd^ëZv•)‚Vs:§˜V(ËėPzœtB˙Åļļš„]Öé<ĮqTŒŒzöĢ×úŪ›c*E-ÉķQC¸H‹SŨ°8íU5ŋÚhÖ6ĶCļvģ“åÛĐĄęsEÕíĩÖ­ĨĩžŦmŨŽálWũpĮNĮz”kēS^5°¸ÄĻCN7įĻqŒÖm¯ˆŦuj}5‡–ąüĸAŸ˜äįđ÷Ģz đÛĮpÚĀģf?? ëŒÕûmsJŊ’xíŽãrŠŋj¤^qųĶĶYĶĩ Ĩˇ˛ģŒŗ”#r@ëZČĐî¯ÆĨĖë,6Ø03üÎ+ĸģ•mĸy$š8Ā –s€ĸŗŖÕ,ī‹-ŊÜSėOœŖōžõ^-KMģG ėo1<ŒŒŸ_¨ĨžŊˇĶË+]ÅĖ?wæyÆ3ŒÖN•{¨x6YÎĄŊĶĖBË.ã<ÖˇŧûK}–ķ]F’ĮĀÎ9'š™n!š€Ím1ĪĻ(hÚ;IdŒĸČÛļ3/Ę­Øœ{Ô6r4›y/Žáķ™~ôM…=ēū4F Û,v÷1ą'!:d~u$ķ'ÚlˆĐƒŒž™ÅU”/ûû€›‡ Nr~†˛õ‰.ôËũ8BÖæ@ƒ#‘Ķ?Îĩ͑&‰.ûĖãôöĢ!7¸;X1ųv5ŖĒEžE,ųHÆ@ĢBåŦ1šØy8Á5Qa’&"I|ŋœ–āđ*ËSš›_žÅ–0Pģq9ã˙¯Z•%DŒ}ė1qëÖŠ b%ŦÖUi…Wŋ=3O[y.!.pŖŪ˜a”)ŠFn9ŨŽū´×ŠF•Øi#=3֘%h÷evp[ũŽ:­5åÄWKˇÜˇ ĩˆ$čr}ęymĖŅĮ$äŖéT/ŽdˇhÄqˆ#ŊF{Š’æ6`ÍŨ–á[šoīZÛ2œeą“ëūįŠ`¤åÉÉ9Į˙¯­5×vī”nîr9=8¨„~YË)į’ĀŽ}ĒHĘėvf;€8Rxü*ĢËōë3’ pj0U‘ļ \ņ×úŌ áJeN žiâ6t.ËĩŗũŅÅ$r39 ú㊊IãiÖŪ0ÄØX/ŋ:°Rh‹Ú u›ųsK”áŽĖ‚šäū8f Ÿ+§ßį֞]b`V̀jšpųÚĄ°rI8ĸY`Äā ŨĨ;qwƒ;°2OJŅH‘öæ4až7ŌŦ#ė@0ŗđŽëTđĻĢĒZéĸMR’ĘA1f€Œ°č0J˛|)<Ū%ŸTēģâē€Û<">LcƒžĩZĮÁ:ĩŒN^+ĨJÆ#ěIÎŨŨ…v+j7}k“žđž¨ž$ŸXĐĩ8mžáBĖ’.õoj‡\đnĄ¨éöQßŦ’}ŖíĪ0$ŗcø@č=ĒÃxZūãÅvúŦĶÛ4QÛ}žH‚°,¤ŸÖĒéŪ ÖôÅ}:ßYtå”ķ*Š<¨=žĩ%ŋ†5=Pž:Dđ5Ŋīī wŋvŪ ŽŊ{Õ)>˜ôģE˛ŧ ¨ÚLg8áØãp#́VbđÆŗuâXĩ]JęÍŋŅÍģG 7*sĶ'ß­E§xSÄēDoĻÚj–éĨ—%\ĻfE';Ušŧ;ŠØęąIˇĩˆDŒÅØw$ã¯5Ņ ‘¤‘v'<~fš=WÃúĩĮ‰ÎĨe-¤‘›$-ÎuūԊĖ> ׃˙°Äļ-‰üĀûØqœúuÍh^č:Ŧž(Ōĩ3 ™ŽÚ ČNėŒqە߂îĩéõ[ëÕ[YîĸÃļā›pAb:äŽÕR÷EņVĄŖéútÖ6¨læG2y˙|.@ãUģÄ:>ŋuĨÛ[ŨÁ|Ĩ‰ß[Ž´ßiZåū‰ik$Ist×ByJ0DŒāë]Õ˛¨ŠÉå3.Z2AĮˇėíqĀ8Νzˆŗ7OByÍ#e˜+7Ī× H0XáTˇ\NxÂrvŽ;ķé\vļS\ņ=Ļ…ēX­â&iäE#,>ęƒÆ˛|e¤ÍĄęv¯kqwsu€mn%G' éū5$šĸØøÖ zXfm:îĐF$I‰ģ‚;süꕮ¤Qü[{“˞•x–h[k 㑏|âĄĩŧŠx~íæšž0…ų%Uē ƒ5ŖĄjÚnŸĢx™/%E/tÅTŒīœëôŦ™ôë‹éō\ĀņĄÔ–bĨyD9ëū{ÖΚ¨XÜøĢÃÛJž^]˜˛•Æpį×Ukî\i!ūĪÕnŽĘ\Lž?fĸöš_ŽoÛXķâļȖ'u|ĩ×xUmHa§ÚI ™•ŧĄ1$¸?ÅĪL×+â/)ĩÛëÍ>õ-/­`d3cdéƒĀĪåŠmŪ Ŗ\đ­ūĄYĀmŸpÆxÆ1ų~u_[Õ-åÕĩČŖxlŋŅļ–+—šĘđz~ĩVwĩ>đ䛁XŽĐLŲáO$įŌļõû›)ŧaáÉa’6Œī;Áę8Į?Ęą6ōĢKÍ6âôfÕ˙ÖĮ&îÕ­áû›8|a¯ĮtË“:ˆ•Î āœbšĻržÔ *ZĒæ`ŊãíøgĶ_Ũøfā=ėqĩÄÂÍՖ€Ŏ‡œV$W+ũĨá‡k‹xā]ÅcŒ˙ŠŒÄä“]‡[Æū!ų“°†Ûĩ?Įa ˇĶ$“æļ‹öŽ3Į^ZÉņWöSZ]Ũi2´—’Dĸc ĘŦyœp3ĮåMņ 6‡ÃÚMΝ 7HÖLnÆ=ŊÅ;@6Ķęzōjf1pæã!q€kˆÃ…ČVuŧāõ+“[†›msãm.)"FYmˇH1ׯ!T-TAĸøž;wōcŽb'Fz~=)tkhu cOšH!‰- EiįqЀ9÷Ž“[„6~î]Ŋ˛Gë\äÍáļ?xfžŧ‚M^HĩOŪé –Ī”V8ŨÆ÷īU4•k֡Ў!ĪØįg˜…ę§æOä*ևgm­i:Œ×ĖėģîgûɁ‘ATâš[Ģ †,ßidõ*Å>ęĸjú†ažŒ}›#ûĮú*˜iæOÅŖ™­Ö(-†Å™Y•ØōN=hŧŌŽaĶĨÜą\ōsˇ#Ø2V—‡/bšČmákYwüņˇ"#áüTÕÜÜøŽĶLžM°:ųŽņˇ8×ĨeƟŲzÖ°ö§ũEžä=pp)öš}Ķ[ZękyÃI#;ĀžAŠl6(Éá æ&Âđ#ō¨.läümœÃå¸ÉĪđĒJˇiˇō šöÛIōį׊õ5bygķ4™ZWŨ0Æx=9ũi¨—WšŠ}Ž`°.ņķcĩ6k›—Đ-n7•Éå—SËzūTˇĸę]QmÃ"ųAņÆCĄus‡.ęû7c8Qi$Ļū5Šá䈨w=p}*ũĖ„[M$rœē Ąo3KėęŌ4mpã’qÛŊYŋIc˛gn\sŽøŦĶwļÎI#rä°UW?2sJ‰x%@ū[ Äpqڟ¤Æ_Īvƒo îÆŊZÔŽĻ„CJHø˛\~5VFžÖõpxį@Čũ)tXÚIĻ&lbCÁã&´“{;¤dōĖĮĩ)’ėĘXŽ0H§$Ŧ€ĒŊąƒ“ÖĨLėqŅ€īëQ~ķČfxžĘj2‚\đ*Q |ģXgŋ¯åS‰ÕKŗœį„ëéJnЁ†)ę÷¯wÚ#2¤ú Ôn1&A檐:P–Ī<͈8Ü1ĶŠcÁSĩ”ƒŒMdĪâM. Hi¯rĢ;0@†=ž€ûV˜Če,AāįŊ8Ģ( 8ŖĩP:ĩœēŗiirvąīō˛sЏSË+ģ1€O'¤œđyĮŖUÚO'Ÿ^is’Š3É'ĩ#p:dãœ~RōöĪNˇ2ÜMQœ(w`Ĩ˙ &†ųS˛$ŽōņŖûgHœÅÔ-IļGļ@w@+X(MØūÁ¨ãw,CAČĨ5đ‡,ÛąJ‡s ¤į‘ÜUÔ4éīZÖ á’åI5pXcÚ§™BŠãoëOMë†Č8ãņŠ„ŋĪ´1@nŽũt՘chīũę0X+(įœPĮcÆsL’F‘ Ķ9Á⟔ ĮžšíU€Ú@'āR&ÔVÎ8Č^iÃĒ@G=Š"–#9sÄŖŸz’VŪä8 â<ĩ8îûŊ)¯Œ†Į–TcwsNhŅB•œu Xú_‡cŅŽ.ŽÅÔĶũĄüÉÕ:žãë[$)Lų GŒm m>†ĢL›ö…ĀĢdqëSmE"Lø ˇOztŅ[Oī[ž7(<ŌHŸŊP é€xĒanōIįĒJĖŲųÔ*yíäÄĶA†ōĮŠÔrÅšVû4%ĪŨā>ϘöļĻ?!íáhW&Ҏ?J‚[Y7šÚe`(2 ¨D6V×Ī"ØEæ*ī,Cv~¸Š#˛´–čÜËFgOšMƒ8ôÉĻZZZ++xŖ<8TP{ņÍ$6ļļH➂8åČeHÁ 1ЁHēV› N™gÃoÚ"_”úĶ­lŦmd7v,Ōg2"…<ûĶŽIš3ÕŧS@Įk†sÜ)l-,­Ëke Fü4H Į~=ę¨Ō,ínÖK{ xdČ ¨/Ž=)_LĶõŖ5ŕŧ˛Ž ēĪĄõĻžƒĨ˜EģØÛˆUōWŸzyŌ4Ķu˙d$O•\ āp9Ŧ]SÃK5ĩÔZ\i ’0.žWÁÎ5ZĶÂ×/o5ÕŊ…’ĀĘįėܖö5ģ¨ÛĮqŲM‘d œq?ËūÂĶĨ’+qÄą.Ā)õëëZ6ú%‰ŋkĐn€ÂŋšN~šĢXCfķŪyiįĖFķŽH˛C˛–ūI^)Ąs*ÆåUŗëƒīVo4{ ‰­É‰‚ĀŖÉėĄô­O ĩåäWĢOmōĢsÆqšÎŋĶ,ukĨķâv’ˆŠöi äŋčãîQĮĩ,ZdpÉvéw!i×kgiôöúÕ#¤§Øã´7Rya÷(Ú:ũjCĻČ.ÅÚÎæPģxQĀÅQŊĶå´°hŖ2ʓʰœÜ˙*ŠĘļĸ[IsöâķFßÂĩ/ ŽūĖ@eÚÁ ךĒkĻƚ€™îs"Ž Úú{TŌ‰.c‰Læ&nRŖ&Ąm H'ķ_/)°LmÅWŠĐ[˛´×&m¤āƒÜŅkhö“ąŽlÆäņŒ~ĩ-ė"æļ:ĘĀõꡖK•šWVx×( ā}O4ļ6ío$ ē2ļ[Ž}šĢq#uČ#vK`/įOfsvžáĮ­XuûÃåÚqN85ž×ĘĮŅj ‘,ANčōq’Ŧ#°ĒŧõŠb*eĘüÜsš0>cœā÷8Ļ’I;Ŗe?īšôKísĝŲÔŌ™d¸HlfP?yģšP{cņĢ>ĢŽ6¸ļ—°Ë=”‘īûCۘļ?u#<ŒWH„Ļ~_”g5‡â/˧Aikf¨×wŗ"Ü8_R~™ũj‹kēŽ‰ŽÚéWŗ[ÜÅ~Ĩa˜E´Į ėFy+?Āv÷ķęÚÜŗKnņ-ķ‰G—Éqœ9āWrķoŠŊ+Ä:Õæs§éÖKžÔ$+|¨ rO¯ŌšËGÔSâˆ7˛Ã,ɧœ4jT8ĪĄ>šŠ&ņŽĢa{d÷Éh=Ī’ÖJs,jx X~•#Ūkņ;ėĐO †+]ë)ÆÂF~­L×üSĒéS_Lņ[[ÛÛČĸ(e?=Ā'Œ?*ėl.š˙O†í#Ûį m§¯"•ß.$›qĮˁũjĩî•kŠ=ĄšdpMæ nA ĪįšãíĄ‰ž/Ov-–íãĩRņ…ŒZeæŽÖęZMDĘŖqĮöVŪ“âëŖyĒŲëņÛÉcžZ&, c8æ¨GãÛŠį˛‘Ą‰­n% 2ÆHč[ŒÂģs6ĮPãænëTõi%ļŅ.fĩØķ*Ḕ?,ןøkQ‹HđÍļ­wcŽĨãˇ‘[2HîĮ+Ķ¯5ŌÉâ{Ũ6öÂßYą†(ŽūT’-ą˙ēÃõU|cĒĪ­]iÖ:#I-ŧО8û¤Ō/ĩúŸŲô6°ļn7ÎŖhĪōíšxņÜßņ/š}!âĶī$$æQ¸1˙dv§jū2Š×QēļļŽ^ŨA”É8œt^94ë¯Ĩļ‡a¨Áa4Ņ]7—€Ā|ô>üÜŌŽî¯­žKËąu“hI6åėr*üŠÃs.wūŸÎ‡RɜōO$÷Ŧûëø4ØdŋŧE ĨŽxį¨^ÃÄ]üŗB&xæXŒ›%B‡g]Ø#‘T"ņŋ†âŒˇÛļļ„NĀ{ž:U‹ŋč6¯o%Åôq™×ĖFU-}0(ļņ.“|—Mgv¸…7JYYGs‚*_衐[Y^ žlŒí+ŒI$Štū$Đåž2×gæ}‹&Æ–ƒc­Muâ=ĘęH.ĩÖh×;FNáßژŪ"ŌN}E/•áĻōxVí‘ÖŠMâ "ûJģ‚ßUŠō˛f˙žyāžĻŦ[ę6z~booÄâTLW™OŽM>ī_ĶcĐßRŠā<12ŊKtŒg?ZN×,ĩ DĪ y⎠} "¯Yjz~°\Z\,ŪW,ŠÄúŠŗ˛ iIQ°rXøúVU^ēÛÚ]Ã4Ŗ“ƒ‚GsRÃŽi|°Ø<ōJũáÉôüéŌŪé0É3Mwo „Á¤î3ĘŠ[OĩŌßR–î9m×pŪ„xŪĨĶoŦoŦū9“cÆ÷¸;3ØĶĸŧĶîPÜ[ŪBŅ ÃļåÂäô5Z+û&v”_[üÄĸŸ0sūM&•­Ųęˇ7qE0/o€N@ŨęGĩh Ŧ¯UR¨]Ŗ ™äzâĢĪ‚âŨ€yr3Ō4­kfxöžį8Ë’°ŗķRXØ7ĖŽmzôĒ×WąEk-Û]/Ŗ26î‡ü{UiīnŽt8îtńË&͉oøÖ‚\<`FĖĄÕ#9įÔĻ`Öë#ēm‘øËuĒŽŗÁvÅvŦ$ž§ô椚ö8,¤šâEF2įŗo.î%°ŠķN€Üŗ*_åM^g‘úƋ&ĐFXķUŖš¸Ē[×%F{ÔîĖÁQ™™Âü¤\SUnā ÷™Ī4‰,†i!ÚÜq‘ōņ×üúÔĒŌ!ØÃaō2~žõ–Ūc–Ø?ŲRÖĩŸėQ-ŧårKtÍ]i§1īTRāõôČ÷Ĩhå–]ĮæPŖ$œrzņTΠ’ë/ĻwY[ÖGa‚8ĮÛ§šËOķŧ‡–EĮʇņôǞęŌÃ{am5´ąŊČÎ[.GoLSâ˜Īq4 Ę!a‰X|­ô¨¯ŽƒÄ×p#ˈ˜Ä}úŠ,į’Xcf íŽãŋ4ŗ<ŠzîįņÖĢ:K Î>ã@Į­0ÜË(•š6dVÆßSI.ەUĻ íÚĒQ~ԐBŦß1Rį•$uæ­G+ųM;Uč¤ö*ģ*Yū]­´ŸŌĒÜ2[F˛ŋÜĀlqéJ—Q^ƒ(ä<äõ§Å(HÜŦzqŌŖ¸œ™˜pøČ9ã˙­Uå"Ŗ¸'Ąēš|S3)yāqŒtĪJŽ{¤HŨØá vúSÅŸÚÅÁęZ•Y.AÁaŠąŋÆxĀÆGŊUy—gÎ8üŠŅēc!œāåw1S.Y Bãäm>ŋΐ,Ž’'€;Ķ™$ķ$ÁV#€4‘g: ŽžüTąī,vĻÜ6FÅ÷æĻiˆ‘ˆ-ÉĪOđčú—…õ]sG•uN!¨ŦŠ,>P"8Šįąįœž~•wIąņÜÁ>ŗ}oå@Ø­ACĶ.Ooa[ŽCą÷y<}+šņ'‡§Ö–Ō[Y#‚ęĘo6&`vŸcųSdĐĩ_[°ÔumâŽÅŖŽ9 īsŽIĀĀüéūŅĩ=*˙S{Án"ģ¸iÃG!%Ií͚褌´ BBŲāž•ÍøŗDžÔ5 7QŌæ„^Y9eYĮUė~ëÄ˙Ú÷"ÎÛuĄˇ ŗ<ķĶžk ø/Ä'KŗƒėöuĩßÚc)Ũ9Ī~8ë]ú.¯ŒbÖmŌÔŖÚŦ‡‡9$qÍa_øG^š[…ĸ´¸{š7ĨÛËķ!Į1]’ø†Ú"Ų­í|„Mˇ_9$``c𮐨 Ķ´qŒõĻŋ*ícķÖ¸Ģ}7W_ˆë2XĒÚŧ^OúåČ|ß§JąâŨ'PÔu ė6‚Xíe;— ‘č*ŠxoQš×õ§žĶËĩÔmēKæ)Ú@ÆHŖHĶüSgfšIąļ…b~Ûŧ´Ą{ļ+´XJá”TP9æ¨_ŦįIšKx Ōŧg÷`€I#įŠâāđļ¯wāĢ}1ížĪ{c?Ÿw\Hrx>õĨĒiúŸ‰&Ō’].KDļ˜O3Ë"Äv\úŌč:¯‹u[ëŊ>X ē ÆÅ”ã¸ĒÚXjˆ´ŧ2§Œôõ§pŖ+ƟözW3ã[Īė˙ĘīgĶPD‰šW'īߎ_Cŧ€|@†fŧ’å%ŗØ˛´[AlũÕtžÕ4›o ø‚ÚîHŧŲ.&ũÉûÎãŋ5PÁũ‘ƒcÔąÉ$w¸ gķŽīkwãŲĩ+6_ą[Y‘s2‘°ŸLô'üĢ7Ãp}ĢáöŖ’Ŗ^“ qŋžŪŲë‹Û ΆqXĄCzĄ"Hũį˜vëëSŲ­ĩŸ-#ÔŪ0ņéˆ H@ˏëÖ¨ŧ6âĪÅא]:O’Đ;Žģ}y­6K8ž4ą$!ŪĖ+¸$úëšĒ5 H­ŧ/ %ē\˜7-Üäė‹åņžOꖛ$Rx_ÅQ,ÂiD˛>áüKũėz—Tģˇ“Âž1Ę~Ī‘}­ĄÁ)ĮŊĸAĸŸ-ŞŖqu,$HTŠU_ö°5cĮŪzøJsnŦĖ_4ģ3Ídk’hwÚT7fŲ5jËĀrUvķ¸˙Ģvš|ß Ą1´~|j…@Æá&îÍ-ļ•m?Œ´Ø/âGwĶ•å 2sÉ÷Ē6ļņ/ƒŧP€°Ũ0ģČäTúģÅo x}b•c´‘ãûC*‚¸wîyôĢözv“ŠtŌj v.-˜ĖŠĒ# ųŽ:Äđ¤VK¯­ę;Á†{"ā0'¯š V—‡ėŦE¯‰ĖĪŗŦĶD˛ã5Áč:ãéOĐĪöVąi§ęVą,‚Ũ„ļHúüÃđë]včŽLS[NŗCŽŠ†r~$g¸ņ~Ÿc=ÄpĀ ßŸôg$ŽFyĒ—z2[é—ēdŧo#Ü#ˆö@Į8N§ĮJĪēxdŌ5›yė>É}ÆŌÆ9BAĀeôÎj}ZŌŌßĀö/"Ę^2Å-‘É5bëIˇŧņävŗ3yOj$uŪFN:qXĐiQŋ†ĩ{Ļ,ßeœŦ$šųFGAøÖĆ+Š4X˜ŊíË[䍇+÷˜ū~Ŋ*¤*føs¨ųüų7$Dģžī#ôäÔúͤVžԚŨŲ IpŽy,ŧņŸaV/´Čîŧu”ĶÎ`k_1—Ė`3ČĮ͊Ŗ§´đøW\ŽŪL=´ėąä.Fp}jMČŪëVrØŊĖvŠn­pK2æN„s×ĩnøŠ ‰vâsDÜĨN ĀĪķŽb[lü/mŽÃ}8ē2 äOL~Uj{K­_Åq[=ũÄk5 •‚šN:AV´›SĢëWöwˇ ’ˆŖ_4ĢgĻķŽ§ŠĀŋšš›M–ÎâV—ėˇÂ˜õ#9öÅmK փâ>8¯Ĩ–Ūķ†Y$Χ?­e]^]Ûē†ōâw[LŨ"?ėžkBîÆMCƒ@×ú(%â8$qéT$žÔ Ōõ;WšŊœ $ŲÉ98ÆjÕį™.¯ ™Y‹´9%Æ;~ĩ–éÛZĩ{‰!\‚āœt¨m~ĶgáFē‚yҘgąP3Œt÷ũ)%ģģžšŌÎ%%ü‘#” 3 zš’qĢZéNŽŋ2Č0T‚û9ĪJąĄĪį[ÎËre@FÕp ÷¨ĩ+ŠRæÚŌŲļË;dŋ]žÂŠË-Íļ Ök:ʙF8Ɯ~Ŋ*=9ŪŲå Z0į)Į_Z›^ķŗP‡ÂīÚ@=AäUg–fž cģžMŖq—“´ÚJÂMą–VĀĪNôŨ2Gž5ŽTōĶ÷›€%Ž{f’[Ģ›ŠÛ#yq¨¸ū{T“ÜŨ ˆ÷hf^U†qP‹Ûˆáš‰Õ^HNąĀĢZuÂK)d–= `Ž=ķŽÕ§†ØN7ã"˜ķL˛ÛÁ‹.íÄšÆgšy"›j߆@?ZēąĢķŋ9t Ķ%8XēwlÔÆ2ǘCŧz¯€ĒÂęĮ,ÅyQô§´°ˆ—ņ÷ģūBŖwP̰ŽNAI BŠ\˛“ŸģŽŸįŠš+…E+"Žū”žięc”nܞœäæŊĩõ-:Öę+)îá[Šîãcķ?Ÿ…NX"†q…< V‡÷e•Nzã4ŪIn0NSK”`apxÍ.Æ(TŒgÅ ˜uÜ-ɤXã Ī­Pw˜8ëJ9ÂõôéI"ŧ‡pz€*&¨Pɜtė*6Š4e;@=ųéO @ÜĮp4˜ ÁČã"šT*äĪQÚĸķQĨųˆĪÛA×`Uę¤uĀ4ŨØįõÍ “î€đ8Ļĸl`˜/oCHs#īQÆzrĨ*Zf821éëJœ2Ŗ/OրHøsøĶG+6Ų qô5(Ü3ōü vᚌ”.÷éN+Æ_iĮ¨BĖPdį8'…Lv…fĮŒæĄ™âw”Œá€9ĻÉļXÜGåŦŠVÛ÷k ÃŪ‹EI÷Č.L’FøĀecדWđņÖuk+Īĩˆã´'do`s×<úZâÚŪ;c1ĸDFB€?*†cĩ?¸ˇHÔüłŽ*H­lü÷ēŠ(Ö\Œ9@ô<ņX3čMâwÖ.Ū ĸhü“į*=Éëī[ëgk%‚kxZX™ĶEžĶlļy ۄ{Üúâ–}7M–Ų#k}ąQZ1…>ĸĸ[QŌÅi y‹‰pƒ=­E•Ŋ›Ú­œ+‹šĄ6ŸÃüôĨĶ,ėô×tˇļ‚y;>õn-ŖŲ+)Á\>#§5BËIĶ´éŦ­ãĨl¨9öĻ.‰¤Å}į DÁˇnUčŪ¸ŠGĶ%Ŋ7Me\0?ŧū/ķŠŽ=Lļ‚x`˛‰c@•xo­@š.š-$ĶE´Kfy0‘ü_ŪĪåQÛøwG‚ÂâÚ;dōdo˜s–Ôõ¤—AŌÚ[V’ŨD*Ŧ$3e@î9Ŧģũ­ôk¨4ļ–áneV–)8,ÎAõǚV‘yo¨[Ė–ˇ6QDÛĨßqģpĮL Ø×ZâãG¸‚8I$WoS‘īTô\é–ņj\nŌ°‘ëĮLö&ļ?˛BëÃWķįY@Úå*ͧNj9ô•:ąŊ´š{[™Ų|˛nœāŽĩĮ†íM:~dŊķĖĒw;?Š?"X*Ííė’ŪLÄ/ŒFŋ@:uŦãáh<ŗköë‘n­įFœžũ*äē@:”Wļ÷rÅ9ˆFX€wã×ßĨCsĸÁ&•-”ē—“|Ō0 ÎsPÉŖŗ^YĖnäŨhĄ÷ctũjHŧ?äÜ_H×^`ģdM ŸCŸzĄ.‹ršCØ ŲÃä:gŒÆĄ›E!š;ĻŽh`•Wīz°4ŧF“%ëũ°Éæ4Ž23Æ3Œ`ŌXÛ-Ŧ—W/"Ļ9`ŠĩGĻ?Z§nˇ)ÖRŗDsĮ§­*Y\]LדHrj|ŋ(ûäĶôŨ9ôåhĨH,1ĪÖŖÔ-ÚöŅ`…;ƒ/Ö {+‰fŠígQqËģk…BÖ39–O1Zâu*NŌ¯ĩ2=&{y ’Œ:Œ7Ępß^iŌxޜÛ\lI -•Î3×$ö ×6í ƒd#œˇŽjˇŲŽĸyØJ€ĘÁ˛3ØĶ­Ą1Ũ5Ė­™RąΤž†[Č Pēm,2O¨˙cZÜ}ē Ąō”?áSØ[Moq<’Â\ˇËžåR)`á7(ėI?įԜb%ųpŽ „TŪP•÷‰Ã1–˙õS,#ˇĄĮ9ũ=¨iABT€Ŋ ”āõ¨ /ī1´mā|˜…!U1‚|Æ/ʨ y1Ģ#)bΠ᱑ĪZc2ƒ€Žøū,õ¯Aņ”÷pkžŸÉ‚KĐdĘŖ„ņŽzâĩŧ5Ž_ęZžĄ§jq*]Y°Ī–rŒ#¯zčŽ.'‰$xcķP˛);AöÍrz'5MFˇÜi‘CĻDdķįōģFxũ*ŧ_Ĩķí%kkvĩēpĸ8å&hÁčĖ1Â¯?ŒīĻÖ/íŦm sdáL.äK&z•Ô\øÃS\éV: {ˆ6įœ( ô'§|EƒûæîîĐC}o0íŲēČzsé×ō§i>6û^Ģ%…đˇR"ķ–[iwĻP}¨˙á4Ô^;}B!ĨĶf›ËFV>i\ã~Đ1Ž*= ^Ö¯ Õm|cĻéö–ááxÚBģĀ2đzžØÅfOw.™ņö[-5îe{%cdN $ŸĨmĮãKiü*ÚēÛLÍG$>qŒÕ‹/›ûŊ6ãOhĩ!ķ–5pD€öĪëT|âGXŠækÛfō„¯å¸#jãf:ņë]öĸ–VNņI(…w”Aɝrą|DƒČˇē}2õ,Ļ}žvŅ€Ūƒ×ĨiØøē+ÍYôŲôû‹9–#*ųĀ|ÉëíU›Æh,ÛQNē“LGÚ×#3Ûz‘šˇ}âXKX,ã’öâę?6$ˆōcīz æŧ'ŠÅm­x–ōāIoeYŌS’sÜ÷ôފׯÖķ_ÛZOm=ŋڗ÷!Čä­fxEĀņGˆĐŧ…|õ ‰Į_Zė|ͲcžO ÷Š(ünįļ)Iá°ØčET–X-âk‹™aywlYÚv­ĻjFT´ēG˜ÛÁč{Sc×´inÔß#Īģ`ŋ‹Ķ=3V5 SNŌ‚ ë˜ã-“ĩ›æú×-âi­5m[mIŗŽ‰ ŠQŒœús]7š~¯lZÆé%ōÛk4o’ĨZ_-'ōđH__ķÍP}sKI<–žƒÎ Wip}*ėv6|Û¨#b y8ÔVˇ6÷qy–ķ‰áŨ‚ņ¸`?/ŠĮĒ[Ū_,÷ 3!åA}kIIüĖŒzãŪ¤}ʉ¸:’xÁ¨aŧļš¸1[Ī„÷d¯5ZKĢd,—7)Eų˛āqVRS%‘Oš9a!ÆŽqĩ̝øKlėRkgļå99õ?ZÚY'w_ØČôĮ8Š!mĢšĻRą×‘ÉĻJŅ/›1”ĻTmËãYēŖęQÚC5„°•i\Hx+ÜæŽČŽĶ(idsŒÔ1Ŗ ßpRy#Ąã¯Ōž÷ ÄåYF>P9 Ë%‰ ãLj_oŠél^[~9Âä ã"ŗ4f}ZØ\ĖĄ 1]ŠĪĐģ$ÆyŪ YUą–ĪôŠnc›/"l'nö¨Ō)ĸe O^šéS\īh|ĸß2‚ØŨŒķPŦŦŗcí~Y‹ŸaІIĨf‘pÆĩ<˛H€‹hƒČ4§Ėa"Ŧ1ža¸~Ÿ¨^ËĨŲ5Úۙ1Ë ã֝ġÖ×J›YÆō09tŠZægŒJcÚĄxãã§áTdÖĮS´ŗxÛ78ũčn?Îjųģ-å,Ļh”F01ĶķŦ̟-ļžˇŋŲŗCæÉ°ĀÆ:u˙ĩJ×RûDFčE$ åvIĮOëJn]PâCĩ‡$j;‹€ÄQļîO˜ƒŽiEĶ;)`q ÎŌ0* ^pzœÕY˜āē/ĐœĶˇÕcmĮŒņÎ Gqp!Oē ŠFJyˆØbx;x§;˛HĶØœū4¯)sČoSZ|l4Ží’2 nŋ…D¤',~ųĮĪÖĨ‚ܨ'9¨üüĻv!$wīS­Ëũ‘cMÄā•n{V§†ã…<{âc ˆ0‰Āá—ŲūŲĩv ÆãÄū&G´ŽD‚ QHáI\’+. ĸĪį3ķŧš­W‰Úyˆ˜ĸēíČ č_Ō¸Ģ >ëQđũũûęWt9E28䚒îō÷Rˇđņ{Éã’ā”}­€ppëÍ[{yWÄVúŪÜ5˛Ædw.C?ļ}UÔ$šÆ]cH3ŧÖĸß͏yÜPņÆOÖ šÚīLĐ4ũJ+é‹0E1ʕ# ŠÚÍÅÄovÉ}4†5VŽ8 ]ŨŊxĻ_4úŒŪv‘„ŌÆxŖŸZˡĐtČõÔmí“íNN郟Z¸ }Ąžå'īsVP›¨ôô¤b¸ŽæŖh€* ^)LlÃhžĩž‡¤iĶÎövG3†ßļzU_é+ĻË}9Xã–ę\”ˆ|¨Ŗ§ãÉüëfp—)%ŧņ,‘ē•e# ƒëúÖ;xKC‚5 ac}ā’r?ĪĨ,~Ōa{‰"ā“÷Œ7‚{ķPĪáũ&ÛOkŗdĮyŒą;O¨9ČĒöŅí/î uY"\Ŗ3Įįßük\É;Hģ˜a—Ą>˙bŨøkHžÔešX䗉DlB“ëÁÅ=ŧ5Ĩĸ[ƑIƒ"6†B8Ī4Ká]2hmėÂČŠ —˜‚˙õ>õ#xjŌHßų—tPâSČÁŦmCÃ`h”’:Í2É4š€äāž„ņPéžx5(/VÄéđÄNô7a“ģŽŸuépfļ | 7'ŋ‘káĢ+k˙á’xŪã' 6–ę@ĮZŽ/ ØI¤4ĪxmüÍĒĀķųS¯ŧ7aŠOžmÚŨDĸ?66*ĖŠĮZ’ ÚÅ œv˛MlđHβ+e™ˆÁ'#š¯u é†ÂkIÄŌĪ,žd“ķ3z‚M§hļēH7ž|×SãËpåŠAéÖ¯—LLę…đĨˆŒ?™í\W‡´‹››;ĢKŠŽí"yIxJ… =‰ũkcQđāžk'ˇ¸xĻ 0×'éV/ôqŠ\[],­oyųg’GpGz„č–Ņ[ŪũŠžââėly2ąØĐtĒëĸͤSÜĩÄäbe 2:ĀæĸŸÂâk›ÆŽöXRė’đǃĪÔôčü.ÆÖĐ}˛UšĪ,’2qÆ=*Ęč„[ŨĘ÷&[˔ōüö\á}€öĒønqĻÚé&øŖ“ÍWķŸ~}ÍZ:L§^ƒSkĐÆ5ØUbė:÷īœÕ;m"DšûėwŋēÉ$xÚO­V˙„WQŲIv7Æûâ•WIëžjčĐŽeļsuŠ´—6Dápœ˙N´‘iŽ5Aw$NņĮ劉6ī÷>õĄ$ØPÕ\į GN3\ô‘ÛŨ[\KąÎwâ0Cę3ĮjiĶ.dæxͲw"Ė@}*wĶŽ“V:€ōĖF=…Tg Ģqy^c Tą8ĮnzŠËšąēŽú[ë ŖjâEdPĪe47sÅ6ëĩ{J>R:˙ZŠâĘiæģ’Y`ŽĀ̜(īüŠ_Lģš˛˛UhÛs¸’3ĪŌ›-ĩÅŗ^ŪČaŲ${6†9qÚŠŲ[Īy¤ŦAĸ–Ã0'v3ĶiėĻMJ)áTōãŒ(Ëvô¨§ĩ¸KÉ.­™>p7ŖdŌ4S"ƌR\ƒæ$œOLqĮJ­œņmŒ,rŨ˜˜œŌ“ė“}Ž(„‘…Y á˜đ}1ŠtqÉԒFÖNHÉOåM—Ou´+ž=å÷žN1íŌŦOō^Cp Ўīd÷öĻB%hH•‘ü~õ+Š ČXwįõÅ,2•Œ˛3qܚU$€ Æzįüæ‘Ų‚d BOįPr `¤äķŠUbėD…ķÔqÆ(,ZBá¸ūŊL<´lc|Ä1ÆMH…ųŅÎ;× h÷gI×^:†įž;WMĢkvÚF™5íŪī". ¨žĀÆą%ņd‰ĻßMũ—t“[[‹… T†SžAۚƒOņ‘‡Â1jú­ĨČ#øŅ žãžNĩb/ØOi=ķÛ]A!JŧącÍŨĐ/­-Ÿ‰-/ĩo˛Mk5ĩáĖT—tääMVˇņʼnšŠāZÍ9‚;†Qą›ĶŽJ}ߌôÛ=RK/"öK´]Û"€’ßãõéUOÄ=$Û ´‚éŖá$o$â#žŒk¨0ÉjŽ•uŪb˛"ņ„÷7–[f7‹ēdōÎHõĩ øĢK}2 E$˜Ã4ŪLQ„ųŗĐU-KXĶnt=CíSßYƓ‚$mÁĮOĨ_—Åz6‘ö;YŽgy!°ųLÅÆ89Į'üj};Äú^Ģo=ÄH‹lH˜J6āõĒ+ã]Y#ŒĪ,^o0™!`$##ŠŪšŊK+ ŽäŅÆĨ°‹¸=ĢŽŸÄ­Žøūö?>Úę4w •pœTŪņ•„ö:eŒ÷$ߔ9TP[žĻĨßŋåUãĻŦ}dj‹ueoĨ˜Āvc4˛Š*€@G&°tũgÄWž$Ô´t¸ąŨf L' Ͱn:Ö͍ė˙Ų"m`Ågr$el|ĢÑŸQKŦŪËm \jštČaŒÉ–åH'Ą§i‚ę%ÕãÆ“Ë9 ã$ŽÂŦĪ41žb†eĘlhR7FŌ6Ö‰j’ÚHŽ´R)Œ284Ķ*:-÷8ô˜ĪãPČņíŪ7ŠWšŠád#djFyRĮ ÷íŌžl¸Ün9úšz€…™‡,ÖĢ"°Ähy#éŸ˙],Á%„†v+ē A"duہ€qíëߨĒŌLé ūŗ$įéUˇ`;Ģ| tÎOjbI†RĀ’~îNOŋÔՈŽKļÂø9Č隁î-$f„\FĖŧ•#ŒœSLĸ°@pJĒãŲ%ŽWAæs’j´’í¸(œx{Srvą-“Œ`†–Lė;@Ø:ķÎj ŽÖ7ĄĮ_˙U1˜Á!26‡Ę ũ)ĪpŦŧŒŽŖ#ĨH퐇+Į#ņĻ'ŨŽ;æœÃgņrG0?‡÷˛Œ¨\™ˆ4’Âãnˆ$céRŪX^wį¸ëRJ ˛XŠŽ0ų!HĀĀĪū´‘CēFaģ# 'šĒŦ›÷ qÔâ”H{"°ėO˙ŽŊ'Jˇž—Rņ^û˜~ڍä3ÆBˇcŸ\НnoĪÃI´–ŌoŌå"ō€1‹g×īNŊIä—ÂNļ˜ĩ įūážNįPjD-ˆüO{wi2ÚKkĩXŲÂŽÎ8Ž{FžãN‹L“XĶõ°´2倈XđIęG5ë70™må1Ŗ2ē¤ŽœWœéĐ]ˇdđęé÷Ú2;.ք…P[īéŒUšlÛMņ—‡mü̉!ŗļōQ F8Šŧ7Öū ņŸ5ĩäMypė—ĄTįw¯?ZÔ´ŌtkĮ¸ŸQÕĄ”*ŊŧŌoā°Ër:ū§ÚŪGiŽiÖS\ŨéFŌ>td2ČAųG4=ßÚ>=Š[]ųęŠF„ōہ8üĒ÷ˆ­įŋđ.%ĩģMög‰Ú¤ 0F?“Fģ°ēģK@dš8ØÉ4ŅmÛÁųGŠ'ŠäīnåŋĶ,帆ķíßy“Áb2z1ŸÖē;{ËøXĶŨ>V#`;ĄwŽq\í´Ę~kåH™Žˇ*•9l˛‘ĀôŊh§Ōí<ŋõ^JŒĶŠägŋƒEņūą-ؕæŲ<­¨[q 8ükH˛˛ÔĖŽÛeĘŠä†ÉãŠ××÷MāŨnÖōénÂܤp\ƒ>É÷ĀŖuyi7Š|(VeōŌ"X“÷w(ÄUHgŗ7ž3]˙š‘ 22Ā’=yŦßęw7z(Õ&X~ԈØocĶstâŊJũ7iĶá‰cm§Ũé^}ĻęvŋđĢîėŧĐ&H]OŠcÆŖģšĘ-/ÁÛ$rJŦûHãĻsøŌyöēîģm­ŊÄFy‹ÆDŽD=x¯@đčˇūÆļ[ky-íÆ|˜äÉ;sÁį׃øÖȤPŖ r;RUX¨'<÷ëL'äĘųžŧuĢŋc˙‰ r,Ō+ũĄ@ÚÄdĮm"Ū/Úięf×ģįA3fB3Ôį=E3N–;xŠ oĻﺊđÅBY”g úđ*M.9ÛÅŅéé–6—6´BL—ĮŠií92xYÚ_ļũŧfRĮw”9-Ÿ ũkĐõd˛•@V?Jķ =5SŽæâ;¨rčCŖįÆé˙ë­8ī5k"Ռ{c´š'‘Ŗ™AfųzõŽÃļ—vV-íäW3DÅvň õæŗ.]GÆĨ<æ+x­üæPå|×8$sŽ•—â&[ĘÖMAŽOöŠĒš?2zŋ§­Ö›ãiėūY kO4ųŌúÖ4š…ÅŗŲKmysu#^„’č’ąI“÷'ų ÖÖ-îīœûŠvĢŨIĒÜ[ę!´BF)üāŸÎqâ FļšžÍã˜ĮaĮŋëY°jÚ´×zlM,R-Đķäá1Ô ”õÔuĢFîÖĩgōã#ĐT7úÅõšĘîņE‰ŽÜ —^äœäU‹ŨVüę66ļū@ĻõÜ2TŸ\UÖuy ē]Đĩ'{íåąč*kzižNÛuš=æWŽGač+VĘIdļŠ[‚ŠÛI;ĀÁüzĶon”ŗēîDŊ{V;ę7–öQ^ËR[ģҐr ôįŋOJŠKËšĩ7ˇŗ†vųŠ\õäôĢs.ÛV•ČGEÔƒëüĢ0ę¤ |°ÄĐî8FûØõÍ$÷OŠÛy$¤O1UŗČīœT$Mbql‰¸F Āč(mHĩ˛\<×;Tg€E"ßI$˛(@X)ÚĘH­×wĖ ˇ]ŸÄųéīRŪÍöxVT‹*ŠÉ8æ‰'?Ú –ŋ:îvj¤ˇĶģHâ_,á†if•íKÄŦ ôü*ŋÚ%3͸.Õā‚{TąĖdXˆŒm<|§§Ôb­‰\ģ”ĐøSūg\@ËíĶpéRŦ™{$ôį4’ @ u#'ŸZŽüíWŨžį✱0C‘ˆÉÎNzT;€ÎܕôĪlĐķV]§waRG EÚPņ_DĖģų†áۘîëõp8p?‘Kɂ~ņü@Ļ_Ų[ęVogqx&RŽĻ+ĪÁ-Œ‰&'œÆÁŖYggUô Šéų‘ÃÎ2x>•ZEsšˆÉį4ÂU&AÁŋˆTĒË 8'8ÎáÅ Î0=Î)ŦmV^9ëÆikˇrą8' ŒĶ˛Y~`Ąëč*9C.иÉíž*8—yÉH`õ4ˆĨFå ž¤Š­•D(āŪô`Ǟ€0ΘËuųĀ%E7Ę!Ô`mé‚:k !€ ´tĀĒĖB„ŖĻ*理EŦéWŽ91‰äsĮâ+2×Âî˛@ēŽĢs}LŦ°:…\Ž›ąÉÆ+ `ÄšXöžpsÅB°D˜Š€Ŗ7Ųĸb Æ›ÜR5ŧ38ķŖŲrËƚYwDI9| sObHP–Ī'4ÖP&i:€¸ų‡z“ƒwûņY^ŅŦoåĩˇ—9<ÉŊ>üÔšĻcĢL†ę=ōÃĘʄĢėG"Ąo éŸŲ¯`öÛa‘ˇHœš÷9ÉĒ—Ōmd¯›n""VsëP^xODžŋûeŸ37$+ŋę;Ô×Z&Ÿ¨jv÷M‰-ōļHT.=…U_éRŨŪ°ŽV3€.A‘ÎėāķĪ_JвŅ,tëŖs’I aĻrå=zSĩ]&Į\ˆA{æã;‚ÆåyūĩQtĢC¨ŽžĶFķHĀĒđŠéKkwo'Ú Ũ6é9?>r{ûÔĐøcNĩēP‰nŪęŪ2#ß9ųøāoŌ ŌmŽgÖîuÛûŗšhÄImĮĢ;ô…txŽHŠHû‘ÆĶžãÎÃá+8@€Érö+&åļgĘg¯ÔãŌŖÖĩĢaĨŪZęˇSLöäIķ1‰ÛíŌŠKá­IāšˆKlÉ,›Ä…ūfįĨ[];PūĐŗģqj~·-ž§§ŊU:^ŖˇP-˙Ķ `‡åĪáīL6WÂÚYRŪX’†?3ĄÉÃ:Ōġ:LvFĐI¸‘(<’ ũ­¨ŲÛßŲĪ Øŗŋ@§ŋoéY#NŧēĶᰖâ]ËžPų, Ļŧr }ä–%˜„XßÉJĩ:Ŗh÷”ŠÃôâŗ’Ōīû8éŪ\l>ũtˇ6Ú_ZÉhT† ‡sĪ­B–×CQģíˇŒ€ ŒŽÕQlŽ–Â Šļheȇ9˙õUĄ-ņ2HÂLԂ[ņ¨Ŧb{k*EhäĐu9úRęž°#˜8mŖų Ä×ëvÖĄQ)…T"UŠčõ‘?´Ë5’GŠę[häōĨšŽ<ƯéŸđbëÅ\ImoÍܑ y…´aŧĩ##'#ōëP\øãEƒIŠüM)ļ™öŠHĪ ÜCQ/Ä Iä‰ūÔŗ¨ČėįtƒļŅŪ/Œ´Y4'ÕŌYDI'–ĘĘwôĮj­§xßEēēŠÜK,m?úĸņV>€šščpŨKj×ųąŽĢsJĩ{â­/O‘ŌG™Œ`š(‹ūņŠu߈´ûŗ¨y&iĐȋlĨØĮũėԓxŖJKkV‰Ļ”ÜÆ^8Ō2ÎTu8“Ŧk~ĢŒÉŠÜZy͆‹jeãĐf´îŧC§iķÉo#É,ĐŽéü˜šO,zļ-ĮŠtXtčoež‹É˜â6 ßūĒnâ-'UŊk;”k„]Û • ;‘‘Ík9 db ’8ŦKč÷wŅCāf-ļ&*BģÁąƒE÷Šôm>ymޝãIPɓ•Ļßx—JļŽ/>íW͌H…Ac´ônĩ"{{ģXį†q$NšYŗģŌ˛5˙ÚhWļvĶgšpxØšĮÔ5öĶŧqeįę4šíLĨNô8÷ôŽ–ĶVĶõ 'žļēI-Ķ;˜6Į\įĨU˛ņ•¨\ {{´iČų8Üqžŋ…L‚¯$ž`\:õ ;А2Áyãĩ#>æūéŦM_TŧƒP˛ŗĶė„ķL‘öĒĮ'ƒëY~'Õoukí>-.ØÜZŦÍÉ ~‡mGoâ›ģ­_Lŗ–Ņ­…Đw'ÍÉr#ĸē‰Ĩ1Dō8-´÷ü)]Z@XĒž˜95“Ļ=äēĨôw°´pÄĀA&ā|ĖķšÖˇ‰<ĸ#bT1P´R+0W!IëĮ^ŨЍŦ]‡žā¸ĪAôū”–âTgMėäČpžüS‰|3ũáĨyü(hĖqŗI–ë‚ÍcčúįöÍÅė o,/há9'ŸOĨ\yŽäŽIOĘŖ ČŠƒUÔ%ŌtĻēu–e‰IeŒŽzĶíŽgÔtˆ/!`Ģ,aöļ8ČčqYí4W“Û}ŽáÚ(|Ī<(*Ãû žõZu/´GÕ"ĩ¸•UŠy[vįcˇ?Ĩk[âŪ Čą<ÜŦnlã$}jģaŦeŦS‡eųÁ>F™m#ĖŌĢŽđĮđ“øĶ㋠Œ•/ŒAęi—žrŧLF$^ŊHéHVF•ĶhmŧŒđHöĻ*„„ @’qך¨’ŌOĩģT%xP3֗N2ų˛Š`vzRŧØ+’ ld(úY"2‡u1ÆGųíTĖnęx` ``Z•-#ŠxبÆĘĀ*wc‘Čû¸‡>•—cqm},ĐE)2Āå$,9Ύjˇ9UrU#Â`mÎöRW "íw‚~đÁE"ĮDöō“•ČëĶ?ĨX3FáCFĨԟ›Žžĩ‘áÛ>^JqœdæŠĩļæs>Ãˇį PXÜCvŌ7FPÛ{gëôĢe# ÚJí-ĪáĪĩCg>rŌà $¸zuÆ{søĶŌ(ÉåĸBå@qô 4QBVRdeûÅF3QŨIŲˆƒššaÍ@UD`Œžã īĮųë@–åu‚â°€vāHãņĻÉodhŲ×8Ëw?E隷Ž@BØā*ā÷ĪŽj4ōĻT–%Jít9§åÍåq’Ëė2xŖōã ˛ ėôÜN|Ō0…Į#pčOcôôĒÁåQd ĨœTmB}Žø;I#yųyô¨¤c2HŠ\ŽO\tõüi‹bVr@fųˇnĩ ĸ‰ČG,Iįkg֑ā‰YˇK'¨ĮኄČ0‹įŽqŸÎ–H—fč؃{?Z‡ėŌaļ3üŖŽx Ã˜ßdųeāáĒ!nåļ–mŖœƒÍ @W9oĻzŌĮjJœą^zæĻŒ¤'˜ū‡œlL™>ņÆIčiEŽy¸”sšCj@ŧãŒc=é8˕ÆAëšhŒFۘ68§K°f'KY‘vŽÍŖ’*Ђuᑞã5Ū^ßG¨ü=ƒDŠ ?´˙w،d0e#$ņĀĀëOIĮâ–’ˇü{X‹w“iÚgŒ˙žĩčī%Oēė ŨŒd‘^qáŊn F—ÃēĻ›<ˇąL؃ĘÜ%ÉČ9éøÕŸŪ§‡uÍv _ÆęO:);YNx íšæî­^ĮÂČĶĢEŪŽ.!ÔäD3Î=+ĸšōČ|R‚a"[´yŽYĶcČTcĀÂõâŽę6֟iĶūĮ+čwđYī€ĖųVqÂļ{āgūÕLNu5Ķ.Zãû#UKf’Ä2.ãÆ¯_ƛy¨ ģ? Ü^G ›˛ĖĒ0 îÆėvķZūš‡LÖ|CkĒŧpI,ÆeiNŅ$g8Į¨˙æ^ØZøĮlW xđL~¸ôޤËkÅ[.D#ė;r¤I8ũ+¯Õ.–×J¸—ËķU™”˙Á8¯#“QļšÛÃō íā/CHēBģš,O9ŽÅ…įÅH÷yÆlqƒ‚7dņõÅeĘl­ücŦCĢ^KbŽĒ *p­:tôŽÛÂ1ÚĻv+2Ú+?”eęÃ?x{V?ŒŪņO†æ™Ņ"8g~t¨ug}ņ/Iĸ–#dĖAŽ+”¸Å øĸ+OõK¨ęŋķĪqĪáŌˇ|T`ēĶ´͊}¤ĪˇžBãŸĀqYáĨŌī 1ßésj’'ųeŠ`ũGâ)ö˛[_jzũŽŗŠÉdōNۑļ éŅpXƒŪģĪ hŧ;j°4ínlm(ÕÎ˙ ×S´ƒ‡sL ckrrGJk"ī߀ãœæ¸_ EŋĮ>%aČWŊÍ3ÄvßxãDĩi4{y 11SŽr3ÔV]ļŖuĄé~&ŠŪwt´¸ĀdmÅ7¤ÖžĸęwúvĸˇöņĀp˛˙¤;ųûēpÜgš­§‹ĻF×÷ [ļc0î\#ĩ\đ6ōiÖēŧēÛË"8hÚLĻ3×ØČŽ‘CËs¸z× wí÷˙ŗÎŠwŧļžkØ.9ÆĨTõh|M¤iLâÂ/6Éųúgū•Ví /–ēņÕ.'¸¸" '+{ũ@ĢŽŦūļĶu+û™üŲ)Ōg,˛îȏĢ7IĶ.5-cÄOoŠOhŅÜdŽ9<“Ü{T–Úĩí˙†lgšÔ ģ¯.C&YĀčõZ•å˙‡üOms$ÍĒ‘ŸĖŠxcøTSCĒčžĶuhu)$‰Ä`Û6aĶëÚļŦ.ī$ņvĄc%Á6Él˛,l Î§Ŋ`X]^éß ŨĮ”â䃀rØīøUŨRŪâīÆē,BōTķ ,@;NĶ’1Î*äēĨŪ›âÛøn.ŧÛ{[6œ&Ā ­s6ą5’F›P4¯/Í´°ûŊETđ{-u303mųzfĩYCÆÜÁ'ë›ļËâ=Ql"‰˜VCŒû SĄ×äÛH-•VY R–'ån?ĨlÃ<ˇ:Ė ˜ Úģ†y<Ō­‹ Ą‘Ī–Ũ7ˇ5ÎE=âø’KflG÷I=:ķYöח6𤖐Ž92åŽ0kFīY…íŦ¤Ģ,ë‘æ7 ęI¨?ĩúeîëdsä2?ZlˇŅÚYií †á2Œ.îôõz?´ēĢMmögÁKg#Žj،g*ĄŠƒ…ôŽz RkĮŨöf†"GÜŅzŒëJfGTQvŽ\níOEã*´—P{sR5ÉRŨ=ęēŨ¤h¸XNíÁXäwīSĨÉY IQz S¨FĖŽbÂ;‘ëÜvŠãÚ#ÜíĀ=*•ë”ļgŒũáƒƒĶš§ŠlŠĪ|āéSĩÄb˜[{čj[gIG–™āĢ™5k€JōƒÆ<Đü¸cŽŋ…? ä¯#FW¯#Ŋ6o•ƒāˇĨC!Ëdˆp:ũiŠ”„g–#éŠ]Š]XxÃڃŊ—(ô⧎)2˙*ņ÷‰<Ôeã ×͊ú9”8ÜĢëœõ4üĢR€Qڐ‘œ"ļ@ÎãÎMHSå?*4‡žÜb˜‚'`Ž€°=*¯9s#*”Æ# sVZ!IT'oaXš÷‡“\ŅßO}š6`Xĸ‚Xž*֟Ļ-…Ŧ0‚‘v™aKcĻqW#† YãnĪ$ 'ļ‚WBņFėŊ}Š$´ˇ•Á’Øģ”l–ļĶed†7 pĐ(6vō"ŗAcôãĨE5¤ō+KLG÷Ô}8Ąí-ffˇŽEQōnP@Ļ‹+1"ÍöxŧÁŒIåŽG§8§˛Ŗ†YQ][‚zõĒ_Øēlią4ûe˜ĸ!‚G~•!Ō´ôœLlíÄšŨæžšÅ2ûMĶī$ēļ‚bƒåßlTĐĸ ‘ Â¯JŠîÆĘņ. †u •ŽėØŸŲ:sNˇ/gln>sČã­6 NˇYMļŸl†Náč}jŊσĻŲĖ'‚ĘŪ[Č€ôôŠ?áŌāNl ķwų…ŊžŋZu߇´‹ëĪĩÜŲC4Ɍ;¯>ÕtĄ„]Ґ0 â‘ķķß\uŠB1 H'’Gjl°HČę+L𭞙ŠM¨[]]yķ6éw¸"CīĮŊ2ûÃÖ÷šė:ĢOpˇ0..Üt÷Ēqø>Â(u572& ?|­ƒĪ÷‡i4ßYirĮ?Ún§XNbŽy7,~āb’ BŸÚF+û°ē‡…Ī=Įu5Ąĸé‘hv)eŌÉ ga—ÜžõĒ‘|Ā1Î+€Ômī.>#,öĸęÚ5€Cö…ˇÜģšë‘Œ{Öáđĩ¸Ķ/-Öæo>û&âä€]ķÛĻííJžĩ_æWš€(TfųJútôĒņøpš´ŽúūK¸-tP2‡’8Ąŧ/äŨŪOe4ß6é‘Q[ÔĶõ¤ēđŦļÚpĶį’Éô÷&' ģ$õČ=OŸƒüĻÔŌ}FicÔ‰”Ē‚[{ {Ôđx]žŌŌÚ÷PkĢ+68V ™+ĶqīŠoü#ˇ0뷚 ÔUå [!…\qßÚ¨Gāë‡đÁŅ"Ôĸ3oßäķ×8ëëW¯ü1wq¨é÷_ˆ.ėâ(ĖągpĮ8ŋZ†_Í'ˆŽĩ;쏿Žx 2DaÁ،c9ëYļ~žļEĩ˝3v|•L>đįü*}CÃˇW–÷6í}ÚÍ *˛ÆKÃė§>ÕšlâŠöâ5 …Û°ã?ʨkŽé—6‚)¤ ëœūŲŦ¸ô-]5-?P7°oˇO'dpávú\ķÍ_Đ´Ģí7TÔnîæãģ;Ü*0*yÆ3Y–ūÕl%ž;TŽ+ ŸvÖ]Κô÷÷ކŠ%ŽŅ$•Äjįū,÷͆myc5‰p"pT°ę+"ĮB×᷎ÂëR…l!čbŧe=…gŪčˇō¤7lō,ÅãēÜD‚<įĮ?[=í¯‰îo-Ĩ­Ž‚î[ĶķÍf˙Â?ĢGĻjVĪžûé|Ā|ÃōŒ“éRO¤ęÍ>‘”ĩ#O^G™ÃtööĻËĨjo¨j˛mxĄŖ’TĮn⠋DÕmî4šÅĩšRT…$–õfŠ!Ōī`Ö5Q´ē?3Ã~ņ¤ĶėuûūŰ nv\u*§“ëM}7R´×fŊ°ōįIP,ßĪųõĢ>°š˛kxąŠ–C"„~žŧ~UĨåļŒ–:úõŦ5ˇÕ4ÍfúęŪÜ8œåXļ6ũsQ_ŲZXøvK;›”7NLųåũšéZzJ›(ؘÎų’Lõ$Õņ3"ąÚ %~•„"žˇņ4×Q@’Į<`nV.ĪōĒQZßyZ°û‡ģ$  ŊĪ×Ūĸ—KÔ"‹Mš;f3B…#$gĩYē’úâĘō9-•d ē`‘ĪRÕN[;æąĶcûÁ`p_§oÆļd`ní 7áÅ" räÛ §ī~_JÂŌ­æVķFcķ `°ã‘ÚŠŲ‹°Ģh-T9ųDŒ8õÍX1ÜĮŦÜΑv’cĀuüꌋ+›iŪÚg–93+1ûÜđĨX•f‹YiQ$a"Œ=Ŋ;TöŌģ] "uY ˛ã4ÛKg6Ķ,ØēMŪ‚’XBE/Ųx>æ­ŋĖ„Ŗ*CÔÕ’VÕŅT’Øā ûÔrîx-‚Ŧ„!įåÕ]ė ą™{äį˙­SË1‰6—;OSūs@Ė‚2čTƒķĨķ°6. ųNzšFēS!pŪũ*ĖÅĶ|yܯÔcކ˜ŧ—Kē0Ģ´0rߟĩC.ũ×2JÜ*īێļ*=*ōÃVCsm/˜”mËĀ3Į?jK9Tš,PØĪĄéL$°Îü ôúTĢœŦ`c,Ü~^´Õ¸|.æ`1ĮÍD^(įt2'Ū°Jt“Ŗü…ņ€p0}ĒĻá ÜŦ€:Î3Q0ōŪ%2n%¸ 2qSI**6ĐŦWå;{SúĶŠųf(hæĄvU•ŧļfÜ9¨ˆS!•p7dÕPwgq sōđ8§Įķäg¯ŊĒd\îņŽ)›ĸžėnAŽž¤Ô ŲB[ž1É Ąž^ģT žųŠchĀ$¯@9úŌĸ̧ƒŒ€Ļœ¨{†Ōå!Å˜bä`|Ā3ūânjĨ˜ínûųâ¤H Ø8āš†Et`ƒŒdÁ§ ‹…$e›!Oj™åTƒį@Ė3“ŸĘĄųŋ6SĶ“^‹¯ë];QēŗĶ’ņ'’1$Ø"6~Ŗ'Ûž*ļ…}øŠd¸Ô­îL–;CĻ7dƒéT`™áīˆ•]qöļ8Ī<˛â´uØäĶ´ßxžŅUšÖ4Ž`ŸÅ <Æˇ4}BÛÃZ,7:´ĸõŒ˛3gߜ~ē3(ōsĄ ’„wæsąlå2 hĘۇnõãëok˙ ĻIŧ˜ŧīĩŧģīé] üÖŪ3ĐEœqÆæĘLĀįiÆiž–Ę_jv×Ä-ŌūŌ$áˇķ‚sßĨfÚá‹ C†€Ũv’1úbĩŧ5}d—ž(Wh’íæ|‰ˆ˙VÆ3ÔW<ÆøUf7!tŊĮ^FX˙Jču+;KŸ‰z\o 2FÖ{˜2į'œëY¨!đ׌ Ša irÁ@ÎĪN=G>‚ļšßˆ´›­ļĐ­Ĩ˛ÆŅ™™öë^’Ž{¸dĪšĪˆ(ā[Æd]Á¯}ŋ0™ŦBÚŨüUá1qf6ļ!÷ƒ…ã5ßËIÅĮ—´ūˇjŦĘ%ŠHäUlĄŪ­Ņ¸ī^kbæĶá]Üö‘ĸ\´Å$‘ž={֏‰Ŧ­-ŧ;ĸ_鈑Ü,ąZ>ō:{ץ|˛íĩH•íëY~$XŽ<'¨+`!Čΰ$~ĸ¸´ĩˇ‹á,ŗGhōBĻF–;ûÔRYÛiš§„Ž,"1Ë:ūõŗ’üŋ™ĻØiŌxĸ]iŽo­ĸgd>|Ež%‚§pÅz.†Û´;UŽôŨ@Ļrķ1ÆJŧÁ¤$l]¸=Îi+…ËÎ}=k–ņ^Ĩ{m{ĻiVķ´¨MąĻSĘ ÆqīÍf…ēŗņ°ŌSPģ’ŅŦZM˛K¸Ģgũ?ZȋXÕ¤øyy¨>Ą7Ú`¸ÂHdĀ`úõ5Š}ĒęWú͎“‘ЖyÚ)V7r{=)—âßŊíËEqlūeŧ™WvN€7ŋŊS[ÍnĘ÷Ãwę˛Ü& @’&P ĮįVí¤ÕŧNڭŝûÛ4-âBüŊۃœĶ“PÖ,<[acuv/ąeDQ´qߨĒē—‰ukí};Î˙Z|¸‰ĘØC“œãŊI¯kúœŅŽîęM> _ŗÉ‚žaî8=빈Ü\XÛČőY¤C‘ŸQ뚩⋋ģÜ]Ų:$°Įģ{.sëÅqÍŠøšŪ įûJ7:™#18äúõĢĐx‹SŌĩmbÛSo>ÅoæĢĒÎ@ãëQZę$¸û Ҋi`•%TT=Õŗ“Į­EâMRūÆúöq{+¯Ų _ĨËwQųU[ÄwPÅŖĘfû%ĩä;åcßĩˆZuÆąŠ[K ¸ļ•o$+!xaž9î;TÖēļĻū!Õ4ļ’[hâÁ c?déZΡwo&Ĩ;Z‹+y\ˊ¤38§Gâ-vęæĘũ-$– &ˇl*ûûšŌūĐÔ5}gQ´ą–(Đ$’&âä˙3>˙Č"í]s'ڜU|iöŋí !ĸ nUÚOĪžūÕ=ūąĢØjļē]Ĩ‰’x‹ņ3ÎN;sŸZrę:–ŖŠŽ˜‘ÛÅsmk—l˛î=€ČĒW>*¸‚Îī˰„^ŲHQ¸„ œ=üAĢ­ÍœØÛ1ŧ\ۅ“îžų5FÕo5ÛČ/ŖŠ9ėÜōú04šÖš.öXÔE™ØĢ<ƒäÜßšŦū#ēˇą‚ļ…īne)VųşCÅ'öÅõžĢũ›}mã/!Âąįƒ‘ĮCY)âkõĶŋ´Â5ļI6ßÎO§¤šÍÃj–ļwÖ+Nžj&ã~=Ē ĩYu6Ŗ2)ež=ČŁQÆ}j†Š(ēŅRVVĖSųjN>nšü8n=CΐZÉ‘JpRŖ‘׊§՚[]JŠņ–Š-íSÉ;ÎâY FAģŋžEfÚ^›}.(Ėr(v*%Įy§—K€Î7úqT’ęÖ´IR€ŌmlõΧZ–،ŠĮ°`Ģ^{UKš^€*“Ŋēāzô§%ÁyŰ ä†Ē‹Õ@ģŧÜíāķV ÄR™ee^QÁÉúUUō’ÕĨBÛ m\ũâ})ßhČd9VŒr9Ĩ3,ĖąĒøÎ1ÖĢ+9ˇ¸&FÜ­ÁÉÍ>)Ō0ˆāąe˙úęÜ'W(ŧĄÁČé˙×§•ĻKÁ'ŸÂŦ$JT*2“žG¯§‰I|cēÆĄšŪd#ųI æö‡`HįŽÆĸÜæO˜`Ÿjp…ĪΏŪÆ3ŸZ´–<*ÆŌã-ƒūĸ äSˇ“ÆėWŊޟhm>ÉöXMŗcØūXĻŽ—ĻŦĘĸÆÜlRųc€OAÅ Ņtŗ Ætëe8ˆ‘ÜŒVV§ášoŽbˇ‚Á¤(]öiđs×°5sZŅZĶŌĈã„8-”ÜÅGeô=ŗZŠ Ã€qíI4QÜÂĐH‘Æx#ÜV{xoGXGM´1†ŪPB1Ÿ_LԃDŌx§m°–,o,eqĶĄģŅ4Ч7siļŌ\}âZ1“éõĻ6“a}Ôtåšļ˛ÖZ-2V.aeÔz)íõ§ßx^æxo ‚ō˛¸UEŠhËļ¨^zņųÔÖPj‰4ë [Į—O‚Ô,ņ´x āîõ'ˇĩkøŽĘmWE¸˛ŠxĶĪʖa}`ÉámB[}MÕ°iVŠųņAN“Ã]kú­ÍÜđų7đJ(;—GnÕ—†õû[8´û­V#ĻÆA_-˜ĘŨĪaTī<)ŠoÕŌ+ĢsņßēD&E˙d{vĢ_ØÚŦv–pLöW0%ˇ’öī•Cއ<ōĩV>ŧƒGŌŌÖâšą¸i€“;['8ņÅ\°đöĩk­^j˛Ëi$—Q…ō†áØcžĀ~5‹ĸOaĸŪiˇæ"—%ŋyÃ‚8Ļiē?‰-íJÖÉdœ%ƒæėĪAéI.‰¨éž!ēŊĶž `ēŊŽfe}}ûÕŋ éwZ.Ÿ:ۘwM)‘6O#Ū ņ.}q§MmlļJÍ,˜ÉĪNœtĻ]éZ…Į‰ėõ4ĩƒČŠ=Ŧ<īQÉéÛ4ĮĶ/,uų5‹’hîT,´H ĘŋđūĄqc0‰$ŧŋ˜Dn#U9ëÜÕÉôŨCûSB¸?-ŧ{\ ÉĮ?N*]&ÂöĶXÕ.Ž­ÄpܝëķƒŽ}Ē_%ÅĘ@Ö;›FVY‘Žė MbÛxkPˇĩ˛ģ‘§‚v’;f~‰Įõâ´fąŊŋÕĶVžÔ–ņ‘ ⴌ}úÍb>•ŠÂ.ēqŗa(œžwŽëZˇ6W÷õ…Éŗhĸ†.B]xĪĻlÕ{u&Ō]9,ãš"ÄÃtÎ\÷ĮôŽ‚8œGķȏ(O–FāąĮé\Œz]ë_ZÜ Vˇģķŗ,Ą‡–ËëŒõö¨ŽôJîå–ÉĨši7ŦæA€ ô´%´Ô¤Ö4ŲŔ¨–Ņ…rŒ¤Š­­Ņ‹Xf´™MŅcČį9ëÍDæKY<>­jūlDæ0A-ĶĨ^’6ŧÕ.u-ĻŽ$ˇ1D…F÷'>ŸZʃKŋūÍļŲũĸŌmŪKëÅkEååÁŲŊŒ ¸lũįíŽ1Å+xjČāŠ˜…9Žsõ č ‡zÎ@D„cķĻĻ™nĢ,*Ōš™<ŧI!?LVŌ.ūĀg%ÅÄ2‰@ęš?×ôĢڔ2ÁĨZX¤-/— v(7sß§Ö‹Ģ3ÄßhXĻXÄ[X„$į•”-æ[&ÄNŗGqæld#p­i5yîmĨf˛tE„ÎsŒqëYy’i6čŅĘÎ%ÉųON}Ŋëm1¤UĮSõÅbÄņ›;”– XI>@Ŗ×Ū¤ĶÖDic,í#c0Æ}ŠúˇÉ5¤ģ ‰ téUõs,WV˙+7ČW¸Î{Twˆ–Ībģ˛Ģšs˙¤_=ŌŽ!DÆâ0 ÅTEe´†`–7%Æ:T÷WĢ$La€p ˛õ¨ĸxžŪŦŌ9]Ÿx¯oj`t[;Ąģæ-•õ4éHk8&AķÄ΍Ģļp˜!Oœc’=Í^ہŽįŒā žßãLË C1 ¸ŒÄ ”°YrYyÆj)2&ė•^w×ôĨŪ€åvˆÃrĮžjÆH9'œæĨY6c'āj›Î\gy;sōāö¨Ėōą-ØôųȝH>$×m"đܡ3[…Ô$TX°BņŽIô5ÜEuėnÖˇ1ʈH;{Tpjv“LÖËq•8hÍÕ+ßYÄXĪqíˆgÆĐ}iĢ:˛nŽEhە*r?J‚Kč≙æH¡%ÛmM ĘĖû÷’ĀläĘšīøŠãMÔ4¨ė%ˇ’9î– ×ī0ÉíĪĐëg%Lˆ¯¸Ļ Į"¤tU@Ō0lôRpj­íļĄ ĪęŅDJą āƒUmõˆõ]:ōãK˜JŅŗĸoûĨ‡đĢZ4—Ÿ`€ęBxËķˆÛåü*Ų—ĖfWp÷éU¤™Xß’ ?dm†āíĮ¸¨‡9*ÜdgÃN{€UFā9ÁÁ4ąĸæäœõéD’†ŲM ādúŌ JåK1ۚĪÖnßMŅn/mâI ™6+¸ŋĻjšjú•Ö“ŖŪZië'ÚŲ ā?úĩ#’+ ŪŦ›@ÜxÎƤōūEÆ˙×P‚'–Q‘ßGW–æŌĘyl 7 ™XÃ`ąĪJŗe+Éi Ī•,ˆŅŽvr? ąÖĪĖšžÜSØ6 03ÛĨDvĄ]įnsÛŠĒĻY ČW!1ËfĢKuŸoqq&ß*!ŋjFIõcîk*OéĐijadōîœĸ„’AĮ>•Ŋ ķC3`gœŠ[‰ūĪĘ6@ÁlwŦ¯í› 5‘¤Ŗ°ŧe2`!ÆĪ^õ­$Ë(^2Õō–˯'§^•…žeeĀFrGzyP…ÂÆžgĶĨ"ËûđĄT3˙ …ä–6a&Ī)‰Æ8"Ģ-ԓKˆ~P–2 ĩŽF,FæAÔtČëMŧwōą †ÎĶ×éYæyŖŨ8Á Œäõf xØ4 Nš­Ô|ŠUŒ‘ģ$ŒƒŸj˜NÛvq´õüę†û)eĀ$đ8椊w†ûƒíõ¨Ļ!t}āg9Čž”Cw$ŗ´l†ELp§úUāŅļ(9nūUy¨ZØmi$H–B•ŦļtÚNā8>˜5VÉäT}áļ í͝jĐļrņî!:N{÷>ÕUæ1-ƒŒn&ĸ‘Ąa0i"[\cĨF.-Æ œ ¸#ߟĨ*ĘgŖ“p9zSgˆ4gh?{€[—m˛ŌÜA÷ƒ`ūąéUb’Ü;0–VrF2púõsN—¤J!ų€GåVctdxˆÂíŒõü? PWėҐXÁõ>õ$“îĘ›ˆėŲ gØvĒˆĨ€7tÎsÎ*ĄŌėŽ%[‹€hÉ w•ĮĶÖĻvų ÚäĒ8=;Qo2G9VÜK [ĶéV ˛¨fË9ę„H¤‹`‘´cŊW•Zo1K2‘Âį=j%V`\ā¯ĖŦO˙_АÜ 3œ0F}ę%ŧ\˛chÅëQ!š ļs’2HíU§$š?#+pĘ@ČüéÎsî‘(ëQ2ŠÉŪ…Æ|ßįņ¨rüėĄ[ŽœūušwIsÉã?į˛ČĖ[. įŠxU=č[ üę ˆ->Ōf™÷tĪ\SeĩŠGo}Č~Pã˙×Q™QČ8äöŠU•"+ģ#ŠĻHGĘˌcH8üŠÛĐģn\1äōü*9æų<˛Ŗ×Ĩ0ÛG;),Ø_”&xãžjâ…b‚ˇNÔ!.HÎEDŅ…,¤s׎߭(rîPŽŲĨtÜ $€;~U6ÜVÆQĮôɨ÷Få22 ’Á˙"Ŗ1’ĖväíĮŊ;ËÚ'váÉŸĘĻRŠ ;`āpMzŽÖá¸ĨŒ=ēÜcëōņÅRēfˇâåŌ€‚4ąY#Ž/”´r¯Zn™ŖØMŖiZ“ëQÄҞČ<´_4ŋu$rrjÔZ%…īÄv‹xäm–@¯Ķ$ Ÿ­hü6Q/ƒö™ŽVWœí¨|P–Mâ-6ŨbkŊCc4p;b¸ûΜûôŽbÖōîĶáūŽņLT­ų‹÷lG–¤Œíôūĩ¯â-&#áyŦb3wķ#Ā,ŧHëTŧB-ŽnĮ:]L\\ųrJīō÷zõô§á¸eēņ•ÃÚŨŪ>•A4ŽWy#žŊÍjøÚIĄđŊõÍŊİÉ]=qÉükŸÖî/mdŌŨƘÖKį-ŧŦ7#īœî4 b—B˛{{ƒu”žßyûsīZEŗģ§t¤ÆāQÁÆOĨs~$–úÚcm<Đ´ÛfšB2ŠūČ=Mcé:ÕÎĄgâ Y%ķÖÍXG+Eĩœ=zzzW;ĪÆ7ÖūÕgŋXåēŗ¸6ČUp‰ÅMĨjšËkvö÷1Isi0&IMĢEå7ãÔWW(S*áŠ*Íüą\†™uĢÜx˙S yŠŪ%Ę8Øppŧđ}Ꜿ.Ôîę6ÛáYJ%¸ļv2 <ã€}ĒOøŖUĶīmŒGĖ{ŖcŪ­¸y뚩­Ī¯Æē/œĐA%ÕĘHƒœäsČõŽčE,pFgd3ķ,|kž×uÉtũFÂŲ(–ã~n.ėč:ŽĩKQņŨ­šK I}v[e*ŸŊÆI1õŠtĪɝŠKŠ@Wėk”tVU”Œ÷Î:úÔŪ(ē’îŪŪâÚ)"ģÄÂĮ lŽjņ^°÷:…ŊŽ› ‹L›¤ĪAôį8­.VÕôQĒF<ąPvįŸåTuŊMŦ´+gÚË+Ėą‘'‡ą>à ߈'‡M–[¸•™bƒČlŦäŽĮԈĩK­/Sˇ‡VļXôūęHŸ;OĄčũuŌÂpļâ~c˜÷8Ž+P†ãQņãZÜXÅ,Iũߙō„'ītāûUš|@Úg™2ØŦa—ėųfÞŲ*Ƨ¯› ZÚÎßMy͆O˜ œv˙Њæâ{įžÛȕ†<ļūü*™iéŪn¯‚nį×ŪšÍoH‚ËÃ3JĢ’ų›ŒãŽ[Ļz÷Ģph–ˇēU¤ĢnąÉAØĒāɕč1Y:ļÚVIbí ”Š›pûwŽŽû_[ –ŪYĨÛæ˛—qŽOSíYzžˇm¨čks-ŧ¯ldÚȝĮSôНĩßŗ]AkŒėĪ1…ÁĪĶõĢ0L' 4Ąĸw‚°åEE¨kQØO"‡iW(P㟯j† n ˰ËoqĖ8s㸀;bĢÅŦĮu'œą]G R^iWŽÆ”kFŪŌ$ˇ’8elGpØ8ÎŗŌķėzũáHžddS„íœF~ĩŠŗhlEĘy§÷›v‘– 鎔{ö×Đ4s$ņFÛ׸āđk>Ã_ÚM´SĮpIũî>^š˙˛nŦe×Q”ÎFpT¤˙­Q°ē†=+PûCNbyJîC’j™ĩ1šmŊ´r@ķSGöbsØd/Ũ=úV]ĩŌD˛ Ļ“p“Ž ãëSIuļrJžTCb¤Šæ)CƒŽAūTŠÄĢĒŋ9Éįĩ5nŌgXÕ°ė@Æp sœ†uldzÔ-rŗO"āpz՛XĐ@ā\yŋ7gŽ*] ģ qœ`“ƒÖ”Aōƒ„}˙¯N–2H ’9ä“QD6īķ §zĀ;Xį^™Į,l%;Ā^3ڜTp yĪBãNW§›čšū”ōŽōX…$t J’Į]ÄcŠã5ėwĶĩ”šģ´W’?õyc•>Ø4č|;¤Ûęs_GYä;†cģ>š5„tk-OíÖö0Į78$ęAO‹ÃZb^Ũ^5ŋúMÁ(ō$Ŧ )õæŦ隟 Ã,6ų19Ü@%˛zt&ĄÖŧ7ĨjŌĮsynX‡Čā° zpj;očVbå ˛ė~ņI%qÜc Ÿ€´šÁn¯t˙´ųŗ&å/ûŊ*į†4ë}nĢq¨ÚŲ*0‘o&V2q…Æ:ķ]6ŊŖ wMk æ–(Ü‚Æŗ7Ûm¤:‚|ÛŖa† SÉõíTäđ†ŽūąŅÄ֌mŽ<Ī0–äg t÷5ŨÆ[ÉV“@ģ[iČÎ+˜ņ‹¨ęzŽ™¨iæ(垑Ž&ÎqéQKĸëxÂÛV&Ֆ+s]ė¤úžœrzVl žŸLÕloeˇîî>Ķ ‘šm¯ž‡Ž•ą¤iž%˙ÛVßgˇä Ŋ)č7J蚇i6€N2ÄuŽj=S´ņåũˇŲŪÆíQe.~e ā~—eĄxHk*ÂkWĶŪBŅÉ.KDˇsFĢá}SUínč`‡mĄ3 ´ŋßjmŪŽŨi@š(ZúÂpüËĊ;įąŽĘ ō[Æ÷;v:Ŗd= súå…ÕíÜKũžˇē{ÂÁáŪĒĘŲá†zV øK[ĶŦ´ëËi"kÛsä;ņąšÛž‡˙¯ZWfŗâMņ/Z+1"…Š;`s¸Ÿ¨“NÅ‹[kģhmcƒo™8`æP8ĀĻ}j­ž™Ģ%׈æ’ĀļĻ!byķĮ\Öŋ…-n,ՓŽHĐëÚD’)|eļÆ7dqŌ•`{^įRH%X’.5uųœž8{ÔZu…ÍĮ…į°Pé>Ö%mī‘Mn/tôõĩœ\¨ÁĐíP;îéQÃo.—ĢĘķ@í"…*7€8ã>”ß&ūĮN3$l­qqæHŅŠä`zĶmRTŋԂÃ8ĀU ‚s‘ß>´,S\hqiko/žæÜ˜ ķg$ÔÅãOF ˛Å¸ˆ0F9 sÚŗV&:%Úyry­6Bė9#Øb­ČŊƍpņJR5ÃáI お–gû_‰$?2īˇdLŽnp*•ˇØâŗkYė]ĩōĒáŽzæ™{ŽY^ Ņ]+1€JËô­áŗE‚eA¸8'­c]$ÛVŠ ™ŪqĀĪ­W‰âUÕWpˡëĐ~5›VÖ!NĐAH% ÷§iņĨÂ_BOŪ9 ÜvūtiđšI/H1Ž9Í^„,X{ķYP:‹K”“hbĮjÉ'ÚŖxZŪKo´†T É^ܓڭÃ/Ŋ Wō˛į=OõŠ/­ÔZHcÜ_hä.3ëT-ÅŠX˜ŗÉ.ŒSŽČgGÄ°ŧœÆãsRÁå‹Ûĩ2ū”c­6Ędŗf‚Eķ<ėašãjô~”#Æd'¨̉17Íŧûđ3õ4‹yjOĖ䓂ÜsL—p8ŋ/ŌŖ’fIIŪģGDî*kHĘđĘGvôæž ƒĀ)ōį#$NI]™|ã?ųŐ);ã :zLÁr6rsķM{â°dķwį>žĩÄ˙:˜đéÂâŦC!ŪP’6ƒŸjā [;JãåÃuĄ\HįÃæ )RØ {¨úSC¯<úg­7–:õčsQ4Í(ĀRröĪŌžwâ2ŌŨŅÁ>´Āûc\ĪĀ%Ž)¤¸dŒŋį4ųÛËuë֙ķ‡l•įŠĄ.¯v7÷xŧû!`ņĢc摟ƛ ęë­hđęfÜÅįË0ÛąƒŒįđ­PĘÉķ˜ŒāĶ‹6íœsPą HH šéĶÅû€ÂĢtŠíįR"ļöߎ}j Ģ“k “yM)D-ą1“ßŊSđö̎¤G¨CD’‚FĶŽĩ6Ŗy”“Ȳ?–Ĩļ'S­GáŨV=oFMB^8ä$į$`‘ũ*m_Pm7Lšņ-ĨãÆ#–n??Ō¤†Cwi ˌŒęcu Ne@<`õ#Ĩ<)WÃ(b2y^åÄYv:>ŋ8Ü"ĸ;’l_ja(p€ÆÅV` ų$ē7Ī^iī:€JGĐ€Ã§ãPĨņ‘ĘÃ#<Ôë#:#fqŒķQÜ\ÃmĪ6č摘>Ļ’ËQˇÔĸÛ8–Üį0CsŠ[­B ežy‹šĪe=ŊÄW6˙h„ŠGPĘĀđA¨ŧŌ]“hSęyô¨Õ”¨ubAbAõNûK›É#ŠUšHœĢ€rPúT˛Ož]ž^ÁĶwĻ:æšŪsî1ō¤‘Ō–9 ¸i IŅŪ Ē0%}2;TR:Ša¸"õ8ëūx¤‰÷*Ē šgÚ!“w–ҰWÚHnū‡ĐķL7/æųr¸Oē@į§_zŗ OĖ›FrTŒcŪ lBĖ™ÎX‚t˙=*}ąŦ ˂ƒŸPj‘¸†gHvģ/ ĮžœTžbZFŠ7*‘ˇ#ņįņ柞5PNpqx#üæŖ›Ęh˛FP’NæĸŠRŌŽåU@y`øūyéRČc1nvm¸$åš5Vhđ­b™ø†FjáōДË>zą9?OŌ‚ņ0€Ŧ09?J‚yU™˛„ķ‚:zũ*˛á@ vëɨå”G 9 \āmÁúôúÕ)åW|@č:äđ}éŗč–÷„ČîŽ1¯ (ĮÖ¯Lą1ķ ?s8āZ‚Øîe.Á› ÆÔÉCG4Ÿ;€ėž8?…G9ØÜ>ōÎ0W ĮЧ¤žabeä˜2ũŅžū´5Ės\í#ĢuëšbėIš8ḿܜŸđ§m‡-呏áÆHĪĨ2æ2;†ę3īԘXŖ‰ƒŠ“ÛũAĮŊ'šV1ÉÉ˙ët¨cØČFXŒ ŽHú~tŲĸMœ“ËíRĮĨT`#$Ę@b2ž”*FKžP2ŖŒ`w öķ4j 7Šä3ÍSؒ°& ŋ7'ąŗÁöŖk)ˆ>3 ÆF=Å nļđíFĘŽO'æ=9éQHÂHã`ŒŦyä’xúĶĘ/nÖį¸6$ ˜›ˆūg4˙-$*1€:í/ô¤wDú` nÛ˙רaŽ5ljŖæ8ČĮ㚔, ™]#w'˙ZmÄ*ˇ ŖQ–ÛŸÃ4Č`FļĘyqļîHāᏧ‰QĖģ‡L)Īnjë[”´gV É$ķÔPĐæCņ‚G_jŒ.dæ<…ųIÆyĒf,JÍķ/ĀãļiZvļ: ž´Ē¸l!Áč§ĄĢÖU*|ː¸ÎOĩF ĒŽ§†ĀČĪ$į<úPČåŽO#Ž2yޚÛXģĐėÍÖČŽ/)drHØ pAĮã].‹Ļž‰â#^Æō"VÖČ@W0Ë꧎WFėĖ’ŽÖ*TcÔw¯$ŽČŸŪjísvnāēÄNfl/Ė?­o9tĪø~K{‰Ė׹9¸2J[Ė!Aį'ŪŠØXę~-‚îø^C*%,áāđcڝ­ĩåŊÄW“ÄÛOŠŲc•­ä ÄŨä}:Ôz­Ä˛ÁaŠ!¸Ôt„ŗXÜ$…dģšŋjŨõė7ShąÃwu¨Dmˇ%Ē’ĨņÆ÷ ņŒ†ÃUÕ˙áZęWNæHg1Ģ%‘22>Æ§ĶŒŌkĸëJšŊū͆ĐM*ģļß4=}ę.ĶZ×´•Ö"ŋŽ+Ŗ)s;\8Ø?.ÁōâŊŪ‘üá÷ %”ũīqI2,2Û]HČ8+ø˙ZķīŲ$~×nCĖ[3Ļ ‡cŽ:gŪ˛íá¸Ōŧ!ĄjÖˇ÷K;ÜŦf/3÷{IŲ0÷¤įwáĐUĩßļŠ{ĸ͚æÄĸlļЧœcŠ<ŌÛxQŋđ¤z¤6H÷¯1€˙Vŧũ˙§JŸEņæĄĒéĖö˛Ooøî#ÉFČčFOzËđæģ{gá[ígR™%€Ęä(Îörq@3Wt˙ŪOĢZZÜC°Ü¯ n<–ėzz}ÆĩŦiúģéņÚŊœá&l–”Î=ĻiŪ ķ?áŌü@ÜåđqŸ˜Ö§Š'];@Ŋšûw1dnÄ ĮžzŠĘēņ5֛‹keĻFË{ųCĖÚā|ŖŽŲÕīë×:–Ĩ¨iwÖqÃwjTąC¸0#Öļs1ōŖÉ^ p–zõžŸc­j?Ųâ)cģōž4nĪcŽ;Ö˛x•ŦtûË­BŨDŠå<ŧN[8ãڜ#’+ëu[3jˇG÷2Ŗ†\žÍéÖĸ5r÷ĐŤŨLög2ļđ¸^ä˙…ké÷đëvÖúŒļHĨŠąSôĢĶ`ōTmÆN9ŽoUšĶÎģ¤A=´íq’a7Č=röĒ7>2Š;ģŇOšdˇ˙XÄ ĪĨnŲjđ^YA,H#Žt܅×8=ꇈu;#Išę(ōB#g!zaˆúÖŋ{%ŪĻjÃ4S‹”VPq¸c9Ā=Č­ģO%ö§%ŗÚÉÉæYF2=j´Ū)˛• Ė2Āņ‚sÜg8ãŌļgvk€ąšÜ2ÄātŦ{íV+2ļ­ “]9.@ĪÔÔ2xŽÆãNŽHâs,Ž"ōЀů8úTŸÛ1ŊŨÕš†kiĸ‹s)ąęëÖ¨EâŊ9-†Ë{€…öų†1…ôæŸĒk/oŦZ؋w’6@ėĀ_#Œ~5nķXŗ´ģ„žQƒ1‰AXĮŊfjzÂ#@#/$2üĐļΟzdū h4Ų¯-íåŨ¸F“åFįŒ÷­ĢyMõēM;Îy.ãTīfˇĩ.ķČJ& r[ĐU;=N–H\lÔbŗ-ĩdÔíīŖŧ;I1˛‚0î{ĢĨkp&•ŧōą™ÜÄ9=ÍhŨŪÛ[L°š$“ąI8õĀíR ŽņVkpĸä>낎_Z­w,6†I.|ļoŊŸ›Æ*5;ĸļđΏ¸?^žĩR]JĪ2Á4ĒJämÛĐįÛéMūСˇM’1ČQÂįˇ&Ÿi¨Z–JÁ° 3œU[ÛČ&j\ļŋ#Ú­5Ô6›VYCČÎGLš‚kģF]ūp)œä÷öĨûT =ëæ‘€œtëũ*ŽcšŸĘہÁ!Tú˙Z°ĢäÆŌoĀPôĪãTeÔbûQUåŽ € ČâœōÛĮn”ØĘnĒķĘË-ŧjvÆĖCß§ÆŽĢÁ1%É\änNjæY‰U‘YÔķƒVâ ĢČ îĪŪ‘˙ęŠNŌß*áē–#đŠüųԔ—vÜžô!+ąY ÂöŠ ˆĢŧ7ßįúͤ.eTÜ!Žr§­VPŦÅ =6ŠÁ>ãô¨Ų0 pz‚85+HnŽ a€9 úT!Ĩˆ2˛JíÒjx”˜Įđ‘׿Į5ę–Ū Ņ×D“KžŨü†0!;b čiÚ'†,t—iā āI,›Øzg°é[RÚĮqk‚Ō.x&6įëšĀ‡Áz[hōéĢ%âÚÉ&öĨ<ŸZ´|hז7&k­öcl,eÎåTnŧĨMĒItĢs”îž8å(’sÜ šīÃ:a¸2C=ÕŠ–!%ŗmWQœ c×đnŸ g5åĒD"p ĪQƒĪ'š‚_éR9íŨ¤°G䯑!SŗŅ¸Ī¯įYZˇ„OđôļzTW71Mr˛\@ōķ°™črŊG¤hˇpëVr[ZęvP!&eēœ8qށsúÖĸxÂ+Š+›Čí¤}ŌZ,ĨboĀvöĢ1i2Ÿ­ôm4v‘A˛EwÄlŨ‚/ˇ_­tšžcĮUõŽVĶ–֧QˇˇŋŧŽ+Í䯌6Ļî¸ãíÍE7ƒa:-Ž˜u+¯ŗÛKæ r_NŲ4ē§„ážÔÍõ­õ՝îžKĮ™īcŊlØiąéļQÛĀK9•œäģÉ$õ&Ēø‡B]~Î;y.^҃°@9=ĒģxjIõË]TęsyĐEåQpGĪ&ĒEāĢ'RĩģģyĸŊ“ÎbĘWëšqĐÔöū36ÔīäŧŠĐæÚ0 ‘ĐąęqPMā÷Sŧ“MÕ'˛Šī&xcPA'ēįĨF| č–úR_JÖS$7@dcØcĩ\°đĩĘÚÜõiŽŽå„ĀŗČšŠë…­ čÍĄé)§} ÜؕÜģJ‚søĶ|Iĸ˯iX ĄHAv ģ q×Ö˛nü9":iÆÉ5ēA*Iåã8 nāķ]‘§GĨčöļPģŠ= ÷'ßņ̊7(Á9 ÎO5!;‚I=+œņf•ŠjúKŲG Ei8˜ī“>*œ:ĩŋ‹5 TÚBĐÜ@"Uō1ŒņXįÃēõŋ„cąōŖÍŊҚHD™ĻrWåŪ´4-XˇņÖĄ5•´—vę˙Õā`1׊Ĩgá­PøNûCŧXb‹y{yÃäŗnČāwCO_I É ´ÎŗFŲyqü#ˇ=ūĩVÛHņ…̧[XÅsgx]ĸ”ĘĄaÜw­ß鎚nkg}E,$îÚÛ˛3žqõĢ^2‚æûÃV6ūtĶ€Cˇœ’sôŽvm;Uš÷à ũ—.Í=AŸ÷‹×qĪ=+CBˇÔ"ņŽĩ{-‹ÃmxG#˛‘•į<×Eu+Ā20O%‚ã“\•ŽŠkgĢŦÚ,’­ŨīžĐɴ{đj“øNūæĶRK(įļ´ “ZÛÜ62ã¨ęqŪˇ5;kĪĮĨZfÍh°Ė˛ÜK&0œæŠÛ[ęö÷ž&ž 9KĨŨlō(įūŧņXövē€ÔôkÖŅī${r~ŌԜŗąīĪa[Ö÷KņÖĒ~Á,đŪme‘GĪ×ŋĪbę—5ú9ĸ¸˙jEtÚ$đ?Âļõ6›Åi‹)āō&\I4[ārŽj­ŧw0]xžcevåL-ķđWú՝+W›ÃžĶ„šlėÛĖrģvdđNG9Íu÷ ēäŊrZŲ–ãÆDĢi;¤ |Ų!ˆ°éÚŗ!’D›ÄōKˇ*D! bOQĮæ+gÐąđĨ¤rÛ˛<9V!Ÿ^ÜÔ~-Š[ŋ LÂĖÁ”…Q“Ũą×ŠĮ×.Ö‹Ĩy6—Aĸ]Áˆį 94Éĩ]ēÄč’Ų˜’FŒ€¯Ž*Ļ‘"ĨĒŲÉ ¤×CåWx~_ŠoJîY$‰—f˰ÁėųįôŽOTY4-ßŲ¤žÖH6nA¸Ąīū}ę Øn$žĶõw˛•tõ€rÛŧ@õū•,Û/ĩã|ĸCoąC&Â778QÜõŦqjëá¤Ū{͆‹ač >žõˇ}r-üM§^Ŋ´Í څ\FN[œ:Īb–zĻĄĄa$ž|ĨãuŒ°ÁįũEãģĶ­ôÔĩ[YI.ˆ@Î9õ5FY^įÂNJģ KŠŽÍī]…Ŧđj6û•įņŦo@ëö)㌴0HD8įĄĻ]GŖŽiŌYb„& pOįÅEáÉ"YuČ&F™™ ë[C%ļKÆĄœîËcČÖ‘sž™ŠA1+1w;JäcĩžīđŞ`yĸ|‘ß˙õĒāšÚziu!7‘*ƒĢĮĨlXHŦwĮ‘[†Ę+gæۓÅfëJąæfûųcûšúTĪkq§éÚ3‡V;„cœúS­ÖŲõũMˆŽL(؜O–žDwßŧüÃÂąš§^F- ĩŧˇG@B¤ķƒŌ’ūĩŌ퓃#8wÉäķüĒ[YU5‰ŪiŨc'ĄQ•se|PŸ/ÎxāōsĪåN•Ą7Ö[\žzS yŖhŸĖ‚I3âS]ļ܌­#yMƒ…į­b…„kųŒy_.ė ž)–Š’é*áw‡%‰ëŌĢHXÚŲ˙Z ë׊•¤VҘDО+bN>osK6Åa“í,Î ŠOˇŌĸŽ4hī•2ŧˇ§^ž•Ŗc1–ë´cn <ÕĨØŽÎŅ{sëK™KđŖ8ã?AW-$&u‰üĀ`÷íQHŪsíl¯#Ąāz)aZ38ũáo—ĻeWbŽIę3)Iųā›<JY™K4ƒ9ÆÁĮqS}™Ø)UXāמ›˜ôÆ3U*Lą…ŽH I P]Ņ”}ÜsS<’Æ„øÆ~”†F– ŋw€I…oâ6š×ĩ-+ė$%¤{ž]Ų,O sČ­=6ņõ=6+Ņo<úG*íaõø–-„ã y9Ŗ) Íæ`‘ԁɤ“Tí<ˇęöÔûW=iq5¯„ĩ]fš…åõ؎$`ˇÖļī¯uØ|KŖčÖ7í,Ģj$ēÜĐŧN3ūEU˛×uĢ}Ä:ĄœŨ4LĀė:ՍīTģņ-ŦÚ­Å՚@$ŧ••JëĩN8í^‡äōŠÚ~)ŗÆ$€Ļ “́Á¯5ĶÄzŊ†§tšô‘ŊĨËÅˆĀ W×ڝĻxŽ˙Äw:6˜%kY%‰ŪâhūķmČÂúg{ûCT°ņ æˆ÷ÆU{c=ĩˈ §ąõīT4)5íc@mFmmÂ4RЉ"P{āį׊‡D7ļ? įÔ`ŋu+HŠĘ¤)sŽ3ÍhC¯_j7ú> ËÛ´ļKqq2¨Ü~^‹ž0jēĩ†ŠŦh­x$–+csoq" €9 ã>õššįˆ-ô'W}E%Žâáb{ `‚OSëÅzC˙ŠB„¯¨V^ĄŠ#Kģŋu2,QîPNyūąX3ęúõ—†"ņ'ÛRLí–KC؏@zädsšŠto5Oˆ\ŅŪŧû:2cbä{ũkŊ…Ö$ í.Į@ôĮOķéXū-yĄđôö˛˜%–.N;jåõØĻáE¸–áf$@SäÛĩxã¯?ZҞÖu?ÄÖZ^Ĩqö÷0DŲå3€{ôǃÅæŠ×Úm´’“?gÜAÁËįƒôŽîŨäšĘ6hĖLęÆĮî:ŸkŠ…īÉ4HW‚>éī\6ŽZûâ‘Ļ:)‚$7NŊ7 ~XũjĪy7ôkUĩŠH@‘’'r‡nî8Į>ĩcO¸ĩļņ%æ›А][Zf7Feȏnj-3ÆW×ĐI2čĶ HYÄŌųĀí 3ĶŊ\ĶŧMyŦÃÁ`ĒėŽ%ÎÍŋÂÜpOãPø/QÔ5KˋÅ3;ėu|í#.=+KVÔŦ´[$ŋtq¸ėĮÁ‘A×ëTgņÃĒŲÛjvl.¸ŠHäܤ˙tä u¨cņ„—:Œļh×R4,rëōäö÷Ļ_ë)ĻëÖļ/yon¯ĖîÜ;G|Uk‘čŪŌՐK,ō2<œį­#I ŦžOÍŋĶŽĻχÄPZ;;Û+‹iî<Ö1ô$ QÕ5ˆ¯4ũU ŗššŖd–xˆ ’õÉĮÅG j‹ĻxONķCI$äŦQŽ 9ęzđ>ëVļÕ´=WË3Á5ē7›ļ ņīU­ ûG蜞Ųĸ„Í™ä2’ré[Z­ũą ÚŨ8ũédxŨĶ?ĨIq|ļļ77k’-ŧy1¨ãÖšmGRŸWđ#ßČ×ķCŒųRLļ0=p _ąņ%ĩÂØXėž9L+噓 &8?ÖŽ_xNĩž åM ˇ`'–ʧĻMO,ą†–h˙yà 7îãü+oé@<+ ’ÉÎŅ;1ū1Ö4‹}&ˇ¸Ã3#''ŽĨBēĩƒÚŧņ‰‘ûĘI‘ˆėĩVOÚĮ#™„Ē!]Bmd'ĮõŠnĩaϚä8ōŽäŽäūôĒÚmŨ´Ũj)¨K剞s*“Ī\ ⯞Škup`e–'™wÆŗ!RãÔzũ*ŦŲÉo4Ûæ1E&„ ¯ÔĮōŠn5kXáĩx¤’WšųãPîaž¸ÄxŽÖŪkF+9ūŽôÃâūÔ9DiY• ÜcžõVīV˛[y.á™ŨY‚ˇîÎwę=ęÔˇ$P#Ī"É"yĄ6˛~ƒĨQƒXĩ•ãR¤ŒS´ôĪ8­wˇŠg1€}ŅÎxíY:nĢã]`pÁ‰$| g$ôŠlzĨċÎčXáû§ Ā&›üēˆnPÎßgHƒ0<íÎ?•9ĩ” ˆå |ŦyĮŌ–)­g‘ŽĖ{aûÁē{āâĢFŌ{“w ’˙)#ųSo.!´™ã–nHÎÔā¨÷ëÖ§û°7„D9%šÁūu—cpn^[™đ­ˆōØUõ¯Ô7A„W &c˅S¸cëLĩžĩ‘ -ŧwæĸšx°iãf“ĻöéRˇ‘öWĖáÔۃįķ5ĖąNso"’ųÉā}j­ä˙f`D‰ŋö“ßĮz–Úõn4āķ" Xũá×ŋ ~Ô@į“ƒ“š•_ėĖSæ<8`yįŌĢlUųU‘Éį<ĨU¸ŋ’-‘ÂĘۛąČįĩNĖnw8pyëVO)ŖÚI8$:šžŧû…ŪįjžvéRd)VPgsš•ØųŅ™‰ûÛ°E:Ü!’0ž3ūGzl–Áe;ŽÖc…ąAˇō-˙x9c€öŠ‘&s¸qĶŪĄdˆĘŗ2Ė9įڟfÚĖxÜJ‚G×5r# i´ŦĀŽQŌŊ>×Âö6ū:ÜÖåXœn$÷Î:Õm+Â_b†;yu+ĢĢxTƐɅPĮaĪ´š_„’ąÛ.ĨxÖ1?™hį8,Hö¨íŧ ļ—wkiĒ]ÛÚ]JfxhÉ=pŨ@Ē׆[ŨBDÔîc‚û™a\|ĮŪëjĒ~Į™ieũ§t<‹(nāēŊZÛĶ|/ŸĒŪ]‹‰å–æ5‹sōŅ€1מk‘Ôŧ/.‡ĻÅĨ<÷wr“u•[[Ō$Õ´{Ģ”GæÄPp+™žđž¯{áH4iŽėŧČĘႰÂ/OŠüĒ[Ÿjw~#Ķõ-֋¤^[)c“‘ķc~*Ļ›á_hķMmĻęvë§J偑KI};fģ‹{o&ÚLĻBˆ윺cš>´æQƒĀÅIÂã§“\‡‰Ŧ¤ĩņ›â+d.°æ+ Ŗ'Ë?ÄļMTÖ Ŋēņ†“ŠÚXËsamfhŨ~}èÉíMû=ęøō˙P“N¸6ŌZyhĀŽ[n:sQøFĪQ°đæ§ ļ,—fG’$ŠV$p85[GŅ/`ņ%­Ũ…ΟÆßm‰ąågįÖĻđĻ“s&“y ęVĮ‘ÜÎnėFÜsڗ]đYĩДhí$ŗÁr—)$-ģoé֓S[Ÿ_魍ÅĸZKįÜ<ɡiî^•/…íg_ë˛]XĪw.)$B ‘øVUŒzžoĢčŌiWW pŌ<BšV ;ŸĘŠ.•ŠÚhÚ ëéROö‘fĩu˛ą[6RMs¤j3ÃŖKc"¯“ûé\ôĀéZŪ߃ ˇž a–"Ęë*É,OúÖgc{Ģk(ᷞGŽé]„q–€rN¸¨Ė„|@[Å´¸ō>Ãå‡ōnėįŌšČ´­Bã@¸0ŲÜyÖڙē14EK§ļG'Úˇõ`ž&Õtac ĀA/›4¯_,qÁ'žk?N¸šŅô gBē˛ēk†ķLO%–@ÃŽES6Ûi~Ô.ôŲįŗļWŽxá“מūÕ˛Íe>Ŧ]Xi-glöåC3œāéīO˛šŠĪáĘ‘pŅR2¤1sÆ1ß­Ga1Đ­tX'YæÃy€ ›‹A5ĐkÚ™Ĩßmg wÂĄëōô˙ëW -äOđßėIžr…V3÷ˇįđnęōŨĩŋ ´@Š2š ūĩBŨl4ëŊFĮYĶĨ’āĘí cæxí´ôŠ=$+n ‡8ĮoĘš=2ęÖÃÄzû]MlėV\î<ņ˙ÖŦģĢl|%܃\Ū D,ÂúãōüëgÅĸ8äŌ/Õ{'ĖØOˇš‰ÆÆV!Éę9â“ÎšļŽæŲÕ^CmˆæOîdH#ĶžĘÕŪęC*‘û´sĶĨ6×șoŖē™Q‹ÅˆÎ§­Kc°ęS/’d Wã øÕIVÛRŒ(ōÖ@Sœ€sƒŠŗ,QEuĻyq…-ĖëĮz­ $đ^<Ę|ĐĜö8§Ú} YCöh”“œą8ü(Rķjû.F'Ũn€Ô-GŋŒsĻņˇ =ŠÍPčkP Pž3QČĒåIbPt>ôĖ•ÜėĀ÷éíڟĒØ$…\sÍH ’ įgÖĸBĨˆR 9ž(Ü$˛¨Q“Î)‚ux\|¸ÆCg‚*$E8ŊÔũę†E´ãšhTÉá ģžŋJ‰­-gŧ†ōvgh9 ųC­ŽįŪŽN<ņķR§/'‘,jŒ”ā`ŊęļøŌ@ÁPÆSëškė™”L‚8ã¯øSŌÍ+deĩ§čĐé—÷7&âYËnrʸŨی}kJh’EÃÁũNGŊT”Į€Œ”ŧļđ?OƟAæüŠĒ g8Ā8§9eG§ÜåęsMUIbx˜Fŧ‚vŸŧĶëY÷0ÍomÕQķË(ĶĘ§Žt; ŒË ÎíšöÅV6Ë,‰Ē°ŋ('>ŸÎĻXįŪģp@ųz™¨Ã!–­†!NΛۧ–1,ÁäŒ|€øÉ>ŖéUábŽXŅcQė9nŋÔÔzzÛÆd•a„áX =ōJŊ0™Ŗ”ƒŗ…cĶž•RÛh“—û:$’(ÎW¯ä9ĒM¨pŅZøųßf=EGj–˛™íŖ]Ä Å_מÔ}–ÕfōžÍY1”$cđ§=Ĩ’¤ą$mbpģO¨¨gĶl& ÚF¨¤îFrztü)F™k8ȡ‹z í(Į­\˜¤APmāãxäuŦiíV[ŠJ€žb™1ōˇž=i˙g†ƒÚÅV\;mįļiĸÆÍ|VŅ+€Xˇ¯^9ü(ū͡’V¸x#yr8#8÷4ˇV\âgˆ” M,ã”ųRCą!Í!i`AęŖ:֗ƒõYõiKU.áōŧlĒ’G&yĮJŌņ}ÅÔ~Ô^Ōs‘DÍŧ đ#˙¯\>¯ Â|$ˇyŽ„ģ„% ˇ`ČāķĪÖˇ,5ÍwNņ.ŸĨę3ÛĪ åš‘DhA‹Ļ{ôŦæņ>š¨%Õū•nī Îc†ĩ,%Py%ûĩŨÛ\Í5Ŧɉž0ĖÁSŽ•ÄjRęĶüIĩˇ†î0‹jdE1ä"“†g“ĮZœëž(ēņ5ū‘hēzĩē#‡“v6œ~§4šį‰u}"{ų¤û%ŧvá|ˆäšãԌĘĻ×@ úõŖ]ˇ’×ÁZv­mģąŽ)@y ā}ŽkǞž[ũ&ÖųI 4JåIΠ튱$ą˜™™†ĀŧũķŦCâÛļ7\›=Û>Ö"&0sŒúã=čēņf‘§M3É&ųzyq’c9?…hÁwmŠØEy ‘be ?JâõûĻĶ|a¤É%ÔŪC#îEf`HhīÍo[kšNŖĸÜȡ3FļęŅĖûIqųķFŸĒiúw‡Ŧ$ût’Á'îâ’@ZI ė3P^ëZnŖĻßÛé÷OđÆîʕԨ÷Ö_†ŧKb4í2+Ûˇ7L­ųˆÉ'ˇLô­ÛŊBÂÂFˇ¸“%WĖx∞ŅÔ1p*ŊÖģĨYYÛĘ÷‹ä͟-ōHaø ˇa¨éúÔLöo•ˆ•cŸÄ{Ņw{™&é]cWb]šfbO@:Ô6Úū,ēfWY}Č"Ąˇņ.•"[CtŽō†s“X>'×#—NŨĻŪH”Bųį ŒqėkĄ¸Ôôë4Qq9I°ģÜāv¨gÕ´˜tøn¤ŋA™A?6;~&ŸŠÚęqĖÖŦÚHíīôĻK-ĨŗÉs2 ŽpĮ§âsYÉwi;ȰMŧjK†%p=pyÅ;OÕėgž8#Ôcf‘J É$ˇô­$Ûk5Ē6Ћ¸į€9ĪĩdJ/ˇí°(‘œį{Ķ,nė/åkxŽÁ›%ŲģĐzįvm~ÂԐnccđNŌ}N8Ē7:•”sė{¨‘ ę)ƒT´‡lëtžKļAüXū´ļŌĮ%ą’ĖÂGę`ũ;֌ķ´VĶŠv48/ÆßROãT´ëĢ+‚Zĸ–dO˜ķÅ$Wļ˛L;ˆV`=ãŒnŋ•VģÔmmî%šŒ<|0 ?ĪŌ’-BĐÛ*ĩÄJî CŧdŒcŽjYš+kĻi'HĻh°C¸Tn/eƒNēšŗš2Ęwī0>´Õt“Oĩ¸šœ,…gÚ2G5aīĶėåžĐŒ„eXŋĘĮüŠŦn”l™%KpGĶŊ;~öž c‘Į4×0Ü´pyûŠ‘”Y>æ˛Ž%g*”HŒq†÷íVä?*@ė˜sK"î™_1Ē|Į9ĮøRZ][ÜFgŠBČËc°āRF›]¤ ŦŖ$0nŸũzƒîâGGĖ 9ĮÚUä’?0yˆ2BŒu÷ü)öŦÁ]ƒ#gäũjÛ8 ‰NpwÕFâæáŪ4jČÅ7-:le>oE曰î&@Wŋ˙[ę(‹/#А¤KØu&ī…A@ ‘‚éMĩ æínė=yį;Ęû‡Čã€xõīVCļp$Ü2ŦxÍ,÷L˜‰gvO"‹Y“ŒĒíO˜›ņüh.w$ãp{:C,°‚ĄvÛpØäŽŸZž?1Ú$ېíūŊĒĀFvThōC íîŖœTf9J7“Âņ”~N3ëJ–—…ŀ¸čî<Ēɯk§l-oĨ3ņ 9Čį§Ŋ\ŧđŽą=î…,×VntŅĪČËægŒ~BŦŲxbūwYŧ¸–ÜAŠFPĸgr``uëÅfEāívÍĄ5Ũ“+ü‘Ú¤’I÷öĒŪ HßÃÖ~šõeXÍģ@¤ŽAۜãŽ3šî4Ŋ14*ÚÎĄ`@ŧž§ŋëšÄņO‡oĩk:ęÎhD–’ī1\Qū¸īYļūņ­îŠr—ļ)-öŲ o•Áéôëõ­=/ÃGâ–Öîc´ˇ& †+f'ĖsՎ@ĮŌĩõģ!¨čˇšr˛ŖO vČ=q\…߆|Gyāøt)O @Ŧ†yã’qWĻđöąsâ7S)hŠk•"ųŦX’0Hų{U=7Ã>)Фģ´Ķ¯,>Á4ŦčĶdŧYę@ÅuļĐ}–Æ+y%yvĻĶ#œŗ{šæîô-Y‡YxkUĶ?´į°ŗŠ;[—Œ ¤ Aųũ@ČéPZønö(õΰY5ĩŊ횆+3(?9-œā}jH|5ĢÚ&ƒŠAÍ>/"kvqķ¯<ŠéÜõÅ\“FÔ/5é5ší vĻ-Ų×{œ’GsŽĩ’Ū×G€ ҆ž>Đŗī'ÍM¸Ũģ=Î+ĐŖ Ö°´ĒҰPYO$¨úT‹…ĀUjxrŦKíÚ3\GŠÖIŧc I­ĖÛģ"bĒäU7’-{Å3Éit#¸ˆ˜Āß6ŠĮϞ,´ûë}7Ã灞¸#M‘Ōâ6wŪļu>oxnôä‘!ˇą–#4ˆSs˛° 3ÉÆk&{ûøW˛xzM.ø_ńeX S†Îr*{Ëaa­Xjšž‘5֝-‚D@‹sDãÕ{õęθIā}DŲhīc ō/‘Œ‡”äÅ@ã§ôĢž!˜]øĪOˇžîö8Ą†2>lđIĮ`0kOKÔmŦ/`đÃ[Ė&†Ų@‘“äl(ÎzŋĢXÉsĨŪ[Âáeh8ĪNHõŽŪũáäú$đ˛ęJļ(wŗÁ¸÷¨L_Ųž$đĩĨãöļågôRGŸŌŊaˇ|(`ƒŠâĩÉ­ĮÄ K¨Xã}ųčš}+ÂōÕ"ņ› cnãŒÏÄūĩJîâ; øjhI7ĖYTW=NqΧJÕŅĩ 9ôßŨIv‚öę&w‹i@œĪ^Mf^Mk˙7‡âķ#ķčä ļsųŠēdĶŦ|SĒŽš%Ä1\ĒŧÆîĶ>SÍE¯.›…,ÖļŠ[ĐcŽS–1Œåšä•z-˛DļҘdlî=xŽSÄ l|iŖ_ŨĢ % …ÛîŖœõôę?*­+EqãkÛø6´†Ä­Ä ü…°p3ëĶōĒZ§ŸđîėÛ"=ŪÉ@ōã'œūGPÕtųügi‘}ĨâÆyü*Üía‹n_Wškx&ˇŒÚːŦ¸dT:âiø=RÁ-ÚėLŊdØgœ…vÖvč/Ų•J:ƒ˜ņķŠæŧY˜u-îE?fŽoß6Ūä`š–îkīéīfŅ´qÛŗ\˛T&3LđUĩ”ļ×rˆŅæ7Œļä¨ėsÛ˙¯[W°ÎYp̆6āšķ°-G$ Gᛁé인VÍÅŦÄÚTvÅTŊŖ‘´Î͊n‘-§ü úŒLĢ*y‚Dl/ÎōŦˆ­‚Káøn@ÜėYƒŽÄŒ~̚՞YxŠÖ9%6ļŪWîŨ@[<ö˙9­-ƇO¸y"F îqĩŸŽÍ7ÅŪriöķH]ĸ¯žŊ2=˙*ĢĢ˙g=ĨÄļ8{փ ÆÛ‚ĮÆsŽéššÛËāû) `eR‚ ŖæŨЎ;ÔqXCwâ;äž8÷­ē’æÚ2g 8WÁBėĸyĻãh~ãšĶ–ÎÚīÆÃ2§–öāįxāō}ęĢAöh|C '¨hŲķĻ`.Ŗ¤ŖJ‘#@ Čę îÆ;ņVÛO°OÔãkļ™pPį÷>•_@†9%™.UÜ`tP8Å[ÕDąŲÉu ų‚‘…<įÖ¨ÅkbÚeœæUYFJ„foCQYÛÁsáë™e?ž Ė[ätÉ˙=ęēBg—J7#"lƒœō ņRÁ‰õ{uCå„$(Î5Åŋ‡ĸxĘŖLÁ\É=ęx´ô†æ)LĐ:H ųh>đæĒZAÔūĖãt[ØĮžŒGlÕģ5‹PÔrB Ø5ž+Ûxg‡lŖvÉ‘&}kEæš*[û>\gŸŪ/zj]]GļSŠī†üŗHŌŨĪk0’Öh!>`õeč‚ô\Č.āãíOŽKJņ•ˆ$F¤+9^Ũx§^Å-ž”D“q ģKFŨcīV!Ļʏ›Šˇ.N͜súÕõi%ŗŽā‰"-¯~=OŊ[ˆ4Ãb`ägŽ/ķš|Ņūí˸RüœvūtûhžÎ1ŒÆä’@Į=3OŠŨb•ˇ„Áųzõ&­ŋš\ãsÎŦŒŽ¤rŀ@yãžjD$_/s†ųHū΍Ī+´›H[ø¸ēôũjxî™ ÷Åz¨WĄˆ û°I8ĪŊ.ō§2{í4ÆĻšą[ˆ¤Š8ac%Uũ)đaŨåD‘Š0EÆ*ˆÚÚ¤û’ÖĪÉcɤ˜As [˜b•?‡zöô¨fˇ´štŽæŪ)QxMČßoĶõŠü¤ŠÜ„Œy|ĒІf†éŧąŠČ9x ū•Aoh0GG‚ŨĮĨI1Xļ#ļ†Ų,Ɗŋ@qQLsĘ+ĨYz‘úôŦštû=ë>ŧžPĮ^¸éŌĨūĪŗ Žļ0‰w”2ŧņІ}2ÖišY­-ŧĐAßŗ$ũsŪ¤}6 ņ,öĐ;a@‘ã˙õģRÜZĮ|ž]ÜIRĀuÅeÍŖ—×y mQ**vö?­l5ŽšÖKˇ_)šhĐņœ÷ĒīĻŲ<)k=ˇ™d„P~ī|gŌŖ:vœ-bƒČ_-dÄdûÔįJ´ûOÛQÚKgx$SŧŊ™‡ËļIgĩgCĻYZNĶÛÛ(|g{žŸAUÆĘYˆœl¸¨'>•Ą&›§\ÍÍĢÄ]˛qĐQĮĨZ@%ž5&IA ûŌr¨ĪĨSƒN˛HåˇHƒ+ũā퓏éNƒEąĩˇ2#Š‹ōŖÛüi­ĨY2Ĥžmū⇠ķÍ)Ķm%ŋ•Īœ]ÎnāäuüŗPÛéÉŅ‘æˇ—•Œ1Č\úUĨĪ’ĘëĪB}G<cŠS… ’{tĻÎō•œ˛•PŖšúôŦ›5š×Ëģ2Ē)Üb,0qŪŽ\iÖ÷2Ŧ¨í _)°H˙ķQĩ}BCJÛą,„ī¸ õÍZ’!pĮ0ŧgüûŅipAeGœã#Ô!3"Žņæ:’ģqę8Ģ1[¨.ō.Ķô<’éš|’ĒÎdMĀĀQÛ'4č¤ŋ sŅG@Ž)М÷•Ũœu˙ Ņ˛<ĩR¤ŧãÚĩĪŽ5[˜×P´ˇ3DĶm[_˛ģ8ČqÆkĐš[dA Ā­ÁšßxƒUŅu=.ΠgĪŗ2–û߇AÍWĶ<]o}ŦZkqۃĻD&ķ-ÁÃ)Į?…UƒÆzŧ×63 užŪíÕ^íä =ō0}é/ŧ]­éēåŪ-ĩˇÚ$ lŠÆØ›'ŋ<`g?JnąsâŧgŖiĸæŅI…¤ØĒÁ `įw9>ÕÛō˛Bá̉ם5ĩņî•akqÆČō*rp~ö:ûU¸üAĢ_kzĨϘ YŽķĀž:Āã­sž"×Ŗ×ŧ $ŗÛ,–׊č9 Āķƒ]f•­ŨßO=ÜKhĐ.Ãē@%G 9æąáaÜāēŠŪĩ–]žRn3*vcÆ? ģwâMZKŖXévîūI™Ix+ž ãô­_xõíįžŲ`š)ZU9é[3#—`XmÆzW?âÃĄ%ĩ¸Hšk‡Ä~cíAŽĨ§JÎĶüg%ÅĻĒZÖ9gąņ ™IWÕN*¤><ŋš~Ŗ6"°ģ”Cæ ōĀ“×éÁ­=GÄwGTē˛Ō,ÖîK$1–B$pĒSUĸņeÅų˛ŗˇĶŲ5 ˜Ė˛E3”¨ã$ã<‘Å>ÛÆ–č/íĩ[sisbģŨAÜ}Tū_sū-Ôoĩ-3JšēĶdŧĸ“Ėˊ8#dcĄí]­ã?ą_Mci2Ël›å3Ė#^FB¯ŠĻÂo iēUÅ´§Ô\ĸ¤’mT+ÁÉÁö­í*ō]JÛĪŊĩ{iVGŒĄmŨ2ĨCâymí<5y,öÍunų‘Ģm%OZåĩ~ōÂ/Zi6&;{­Œ¨\r¸ËÉéÔs]Ô@Ģ+/–Ė Č„įiö53ēČa'hāŠhPzp}+ņ•ÉŌüKŖN.fŠüõF$6Üc*:õ­í7Ä^¯ku42˛}“ũpu(P`ōAúK/é—÷PĀE3å­ÚXʉqÔŠ5ZčpÉq ^î’ÁU˜Žž‚ĨoéËĻÁt. ÖķžČÄjK3zcŽjΟŠÛę(ķŲn*’e(T‚:Œu­y],āyåp‘€K3œŪ°bņF‘s<¨ˇ%!qē6RČ;ŽG?…-¯‰4™tĢ@\–ˇCƒ&ÆÂûS.œúT’ęV ašŧŠ6wų|ĮÆF{dÔisæÜ$LŦ›Nv°# ãŠ{ė†ËΚuEÁÜĖ˙/'­6ÆæĶP šŠo-rv°;xīŠ}žŖjĮėņ]ÄXļīRIëŽŊk+ĚÄzuĨËÛ\Áâ&UNŋ,˙œUģMD/‡­.¯Ļ‰^TVg‘€ļ;Q-ôW\*y ¸YC‚=Ži‰$/æCÉp†%XqõĮ5buDģ]đ2ŲéY÷-ĢMĒ,P,AŪgBrsŒG5‰cĒëšĩ­ķĮ%ļmœ _,üŨxëß%†ą~ÚōŲߘãėË)mÚHI=Ģ~+ĩhË+æ.u=@ëQO)œĪ42#[ˆĀ;@b=ę8ŒŪLąļ[åÜ7>ß\ĶÔE,dš˙ōŅ_xãŌ‰˘‡eT'ˇOįUícGVžBŲÎŌwtН<‰cq-ĄV‘l’HAYÚTŌ]ØĮ<“$ã”Æz1Įĩ$÷#_-Ú3&UpqøÕПdčžag<…Ī_ūŊ:gũÛ‚ƒ€NrsŪĸ/ļ/08?.íš~”<Œ ĒHWø¸ĖåQÌsĪ~zT/Üā•Üė3¸Œ­OHC!-׎3ųŌĖXą`cƒĮ5l¤$ģ›vGsN;Á† AĀįũīØmd”Cģ+ķV™lVōŪ;‰Ü~rģģ¯zŽŌīΏ¸ļ0˛<ŇųÍ ą10ÍÕq‚_ĨLņ$Ėxv Ī=yĻG2܍¤í\ŠQ y‰rģpTŽŋ¯ājʈŌ=Šę›#ĶŌŖš¸ß¨‹o._™ ip;õãõĸę'Bģ†įĪ@¨ō"‰AbI¯CŠ‘FŒÉĘ9ãÔáŪ(öî<0zŸÃéSÛe#bËķí8 Ī˙ŽĄ‘ˇ:´‘å%įŽã?•?zE ­pĀžOlįüū4ļäK7`īBĀôéĪJ•Ü ‹€2Ŗ§áøTŌ/ŲÖĄ˛pŲÆ#ņõ¨RAģ÷ãŲr1]•áŋhÛôĢIė€vōޟ%ãS× ë]ĖqˇXK;ocÉW5â}+Sž×´kĢKd’LŽZ@ŗŽĮˇëUÃW×ú˙ˆ^ę4ŠĶSƒÉY@Ė„Å3HĶŧc´:MĮŲ"´ƒoŗ# čõĮ5S_đŪŊŦŧ癇ĘÔ`™>Äqĩ"r}Iū•r˙Lņšö‰­Ge O ņ°ĒO|÷öŽŲ™J‚F ^p8ÅkēN°Ū+Ķ5{ xî(Ņē46įžŽÛLÕŧ?â FęÖÍomĩ%dIhߜŽHČæąĩjĮÃsB–~}íõīÚį ūī'žĩwGĐĩ6ę÷LK)ąoc!wHĨ­Ų—œsĶ“Kĸ[xģNą] l ÄvG¨"gŽŪ¤ÔįOÕbņüš‰°í…¯2åˆį8ĪzĪĶ\đˇ†õ [L "Ũ4āM"āŖcĐõžõßŲĪ%ΝÃÄc–X•Œ}v’+–ņv•ŠIuĻkdkq=‘`öä€]Ž)äë:†“¨Ü]ifŲÜÅĸÎĖAų‰č+šŅĩgđ.‰§Ļ™qöĢkĄ$‹ōđ'=}ęį‘ŽøÄסļēT—ÖšW*Ŧ#cĄũjVŌõËYø†{cuæBbš‚ß–ˆHĮ÷€âŠjŪÔ5ûcQkvĩi Xí㓆r¤:gĒ÷ōëÚļƒĻXļ…tŗÚ\FŌHv…;AUš!Ô´OßŪ MFŌø#üŠŖp:JšŠZĪ{ggŗŖ‚c#ēZĻįĩéŗī×5ĄāģKûM!ŖÔP‹3}ŸĪûâ.ŲôúvĢ^.ķgđĨüE$˛L›#]Ēk—ž´Ôb´đĨčĶîĨû <+]x8ü+ĐĄs=ĸČbdv@LoŒŠô8§ˇiÛĮŨ8õ§+ ãąŽ#Å˛Û¯ü8ģ“÷r9“?Üc?eZŪCo­øÆâVã1)Ž,dHÁúŒõŦ¸īĄ›ZđÅÔˇ~jĢ24lvų ūŊméwēu—üJo'†Æ=ža /8ĪōŦxtĢvŌbK™eĶūÕ4ö3‘´FÎq€q]w‚n¯'ĶŽŌÄōCtŅ‹ˆ× 7O›=ūĩ7ÄîŽāø¯ãĘ\ŖedÜr~`0?:ļŌÜy’Žf[ ăœdÕ KotÔžû\1ŋ˜Y¤9Ū¤zœôĢ?aŽëį ¯#ÂÖâBĪ<“ŠÍKEo ÜŨŗšxåÛ,~Q‘ÛņŽ–$"ĘgÜ^ 9’qYZÄ"ÆâŌč+ų@í™sôŦģiØ‹dŪŋh A¸ž„Ö›Á5îĨ5š˛‘oĸn‘†22[ŪĩlmæŽĐGq4W-!Šą8éŽ~•˛<Ŋ6U ĢmÎA=3XúmÕÅŽŖļ!*"Áŧ¤‡ŠŽ §y_nđũÖŖq<pI  /=1InÆyôû>ZƒžŌTˇƟ =_S‰g‘†c–õÆj¤A¤ĩķŨČÎ(Œœ­[˛MF'ˇšG6žų˛ŽˇjŽŗIö÷Šæi"”Ëō8?# ô§Fe†ôÃu$–Ķ™AF$ˆŲsĶ˙¯]Å"œųî:šÎ/s˙ $vrū_—¸ ”˙Zĸ“ęŲßŨ5ûĢ[HB€ŋxä ŲŽF¸ĩˇžcûĮ ÜwČøKķBF9īÍ>E]ĀŖ̌ķß×feT‹ųŊAėLÔĸ?Ē–f9˙Ŧp*)Ë+lĀs“œôÅ:Ët˛Čä2€yųž÷jģ+D‘…\€ %ˆ÷ŸJ­#o*¨åį&žã{–$18ÎO|WŠÛjVwÍ/ŲgŽvŒáÄlŌ{qRĢ38XųoĘĨ|÷~ö "ē`“‘“Ž=ąÄ„ Ÿ^sM•’ŒŗKqŽä€įIŅJ†HÜJ†F+ŽØ"Ą–uSˇi;Ž>^pj"ūcPø$į°5!f'pUe<äžG4’M´ŠĀäįĻ)Ėŗ6ø¤I7)Īą'šVV0ԌŽ\ƒ‘Įų¨.í šŒ-Ė*é¸0g‘ĐÔû†pœÔ/&ÕS€ĮŒĶfŋ…ĀĮ%}}Šb‘eŽ)Õx=Ē_9Wn9'…ĪŊ$sl`i$@ᘹ*=ãhluëĮZ@3äāŽÔá…| Œ|ĮŊ !å˛ ãĄV=Ŗnp~”éHU qß4Ąˇ6Ú:sĮ4ė R›@‘īīMãh$dúúÔYÜT°?.âvã°â†HÚ‘ +Ęü W9eáçëw焎+p×d3ŖÄtÁí]Ŧ3Š“p^6í§[ŦhĨv„ôúT§؜ĨVŽŪ´"ŗ˜Ŧ{rhMŋibČĨļã!~nŊ˙Z%Ķ­nI<ČËʗ@qLŸO´¸ $đE.>ë2GļM'ØėÖëĪŽÖŨf<™vŒúuĸVYåJ‘€œįüš­>—§O$w3ÚA,œ|Í'ķ4^ØXŪm’æÎ F´aˆ*ēÁĸ ĀÃĩ,PČeEtqŅ— ĨSšŠŪí ĩŨ´2DBē‚žÜlZF—f[5”Æ0€eOoĨ2m=,ígGH-&uĀeˆ`Äã­7EĶ›OŠââútšŊēmŌČĢ€p0˜Ļ&‡¤*–uš`8›žô÷Đt‰­Â:X¸÷`€{âšįđåęęWRÄtë˜'“vë¨ 4c ØzVŪg•Ļũq.Î[h“× Ø*ą4q^Ûų70G,Lvíp>cū%Ž›ĻŲųĸ+$PëĩČÁ8éŒõ§iúeŽ–$û-´pŗį~8$U+Ÿ hŗ\K+X@]žņ}y—ZF™s´–Îof5UiîF:RļĻɧÅdmTÛgp‰>¤uĸ}2ČiŲ˙gI-؏Ũö¯\į­Ož[t0Į,hģQAãĩ2D7VŖí vI@' ‘Yvļzai,-FHũáV8÷āõŖûÖM@ÜŦx2ŽęäŨ~Ÿ•,N“mi=§Ų×ėŽ˙2ŗĪĄžøT–:f›¤Å#ÚEąä’XZļņųldi7y s>‚ō]ßÜj1H‘O#0Ų1ūŒg˙×Zˇē>{1yĸˆėQʄ÷ĀĒ÷ļVwqĨŧˆ]co•™Žå?Zu•…˜W` 2íy'%œŽ8ôôđũ’ėEvH›zE$„ oīŌĸ}ŅĩÔĘ.Náį 1ú ΋Ãē{Ũ´ŅÆË†ŪŅŗ¸ú}jŅŌ­…ä—Ë=ĀšuÁ`ũąĶOūë_°}‘f¸´›ĨMÃ˙8ĢŅZˆ!‰2Z5ąãĻj9Ŧ’ö ­.0€OŋČUUĶâk‹iü’ĻŅ§ËŸĖR]čÖ÷s}¯Ė– ”Íaˆ÷ëW!ĩ†ÆÜG mP9%˛Iõ¨/täÔ,DRÉō6[ĖîŸō1TC…/ĸ™¯%wUÁÜGĖ=:t¨WÃČÉ(ŽęhĄ‘°b\RĪ ŽČ O,MV91ķ`sĪ­6-Čy¤[É]įM¤•>˙Ζ=-t÷ĩyL‘ž1€'{n˙WÉ=ûÖ­­ĢŧĒÎęŌ"„]ŖˇoĨ,aŖØ‹ŧüŊ1Å9/F]ÛģŒUËC?# ˜^{Í@°"Ü7͌R,ĸ6" NNr'Š2Ÿ;3ŗļFŽ1Ī$ÎĪõĀC€¸ãĶ8&ž’„y{‡N\úŊ:Tđē',xÃuރĀ8ĩėWûA”c'đŽæxķîžĪZåĩ_ÜØŪ\ÚÚéŦégoįI$˛yjÃŅ~S“UīŧpļžąÖíôégŠä…#x]Ķž{U;ÆW3x…t­KJ6RICå}+3^׿×ŧ/ĒÉiĨŦļŦ‰į<ÜŗâUĮ@yę+w¡‚ôÁĀg\“ô¨bņ#Mâiô6ąeš8 É q‡ôíĮZĪOŠđõŪŽ4é‚ÚL`–0ęyã'>”Áãö…ėžûC¸ĩąŧ!cšg“Ķ"­^ø€ß]ßXŲiĻũmŖÛpÆ@‹’3´qÉŦkŅhžŽco,Î÷FK1āg°Ž–ĪÅFę}NÔØē_ŲF$1 Ī Ågx{ŗ>¸ÖuX<¸ŨÄہná@ë‘ŌŦZøÆ+RÚÆęÍ­Účˇo1\v8č}Šö,]Fæ&ÆV˛’á IÃŧ3É^ q[7ˇMigq8…Ĩ1Ą*€ōŪÜ×5ˏx T¸ŧĩ‘v¤Ē@^3€0s‘ôíWŧ?âä´Ķô-6âÆæ4ž$Š;†QĩÛģū5̍øĒŪÆîhâĩšķėc}ËDTøô'’lØę6ēŒw–Î^ Ô2‚0kSņĩž˛Úiąž–p›ÂÅw}?ÆŗĪÄ]?ėBææHÎ&ÄęŽˆôëZīâ;[imâˇY.Žn“ĖŽ‡Íŗx’p?4˙i×Kxfķ-åąĪŸĀ€w8ÎGŌšokk¤ŧS탨{¸ˇōå€%Ŋ=ęva%æuEc’X€ldÖ6ĢĪ}ĒjļŗLVNĄ>„ōNkP5Ŧ› ĸ˜m=>•XJ †Y.%Û[ˇŗpG§õŦģß”đÁÖ´ÔF1ābCĐĮozŲĩ.!ŽäÉûöˆ;Gũ*7ēHĻWiAbĐ\r)g—ėČ|ŲÔČį;ŸŒĪãPũĸH-ŧÖ1ĸŒro_éM’_–1 ōt9<Zt–ōĸ(ÉnsøÖUŪĩwk¨éöŅI Ķlķų”ŽŋŌŽ´2‰Y0Ŗo÷p>ŖŊ@/Úæ'Ÿ 1؀r㟧Ļiŗ4‚HĶÛqp9ė*mJâęŪÚ'ŗ‰'“ĖPÁ›nsüĒ›jķŋˆ%Ō|ĩ_J%ßģ=8ÅZšéÕ]ä'nIUoJ‰ ‘IĀ(BļNãôŠ 6N2äŒįķĮøVUÖĸö‘AomįÜ͸(-ˇyôīÍhÛÍ4öŅĸ—dÜ*šIŽŪŌIĖx\dŒqÆ*ŖÜí}Žå žHÔUkŨGė÷VņĀÁ'l+Šāūĩz–7Xŧ˛ŽNIķėE$Ēč™vŲĀÚ:döÍ2+Ļǰ6wx9hĖ’§ČŠŲčyĪ˙ސI#ŒnË? vßķ4¤"Ŧ™ãåÚI<â‘eÛ˄Øŋ(\ú˙ZI×kn(w Ā ĮáõŦë;˙ˇžčČÜĄ'¤…›lr|Įß”ąî`p{ƒŒA4"‰*¤ŽsÛô§$¸qˆÕOžæĢČË xšW\ā†Å#FŪLeĐļN1Å:_‘Ų–dAÁĨT$x$V%‰eVéëVQãS+‘ƒŸnâŦG$n¯ą$än>”ķCåĀ7Ã?/ŊCt…äV8r0ĻøÔą>å3Ž0īš…6›–ų@ ’Ė3Į_ŌŽ*%ŧ B¸'9ųæS… ¨˙ž}{žĪjY w<ĸž‚zÔ 'î$ōö¨Ųˇ“ž•bÖôGÆÅsœßō­Íu­×ÄW‹¤ŋ-Ë\²2¨e'ĻsĮ×c¤ę2ęē-–Ŗä˜L҇hËgôŽ'^ŗÕ¯ŧC¨-֝5íŖÂRĖ#mŽKdŽAõĒWfą'ÃŨ3L]*ëí1\`?*’wu÷¯wk{?Ä ĪėûŸ˛ũČiJũŌA>ŊŗYvúæ•áKÏĸŨ\%Xn"û…[<šî|+gqiá[ {Ģf†á#Ņąâš­B-CJņķjÃLšģļšĶÉÎÆžztëīX+m}gđīÄßXMlŌLfC&9‡Ŋh\ĨߊtmK‡Oš‰chžiåˆĸĸĒö= >ÔļęÖĩˆ%Ķo.`ŧ”Ío, ģ“ž§\V~ŋĨx2Ūė/" xMÆÄĖžYęTuükCÃˇū.ÔĘi—Ņ[^[…‰æSĮ–$õ'ņĒz~ŠŪü:ēĐŅĖWP?˜<Øö̐ûļƒÜâ´4Kļŋš´ŽßÃdš‹|ķ@.:í<MRĶlîaÖl/4›kË;™î1}fҰˆ/ņ>HĀöįŊzĄšĘdī˛ũņ^mĻOsÍCI“NŧYŅ$S˜N 18֟}Ÿąx=E­É6Ō#Mû‡ų09ãÔPąÛhŪ#ՓYĐĨžŽîc5´É™ßÃí]ۃē=2ÜKb–ƒiaoâ5Īû×*ōƒņAŽ 2ųQŲ÷ė`dœŽxŽz?đ…köÆ|ųŽŲãS e#~F´tÆ:GˆtŊbâ9M„ÚzÛ´› ōXv#tũjSHģ×Ļņ.ĢĻÅ'Ųä†8ãH3*[Ķ Šnĩ­ÃĢčēAt.-îâ3D o“h öŠ/EĻã-JMrÂyíoIo2+ØÛĮōö¤×ZĐôxá°60IeŽßpŒgæaÛ¯Jõ(•*ČrŦĻ”i ŧOņ¨|ˇ]Ņ’xđMq^$’ _ˆ×G"s#ā/_­DV ¯‰÷ ū\tđFpyĪoĀ×=’ß õŒ˛Š‡jį§ĖŧVžĄm#Ī ū‘yÛíôčüëy@),Xíų*ėü72_ø[O¸Kqn­¨Œķ€8ãōŽcÅļÛËql˛—æĀņĒ7+ecã=^[XŠØĮĻąģXFcێ„ŠĘŽ}ˇžpöööŪcĸŒåŖCŧĮ’MkéZN›sãoG=´ ‘ė* .á’EsK$öú=ŧ^t‘éUp’uGŨ'=ŗ“øV߅ôķš~ē•ė7’Ü[Ÿõ$šœpDڂK ŽGíÎ+ĩžˇ†ky„ HLL0yWŸh–ö'á…ÖčayL3;p7dÁü*K-?HĶūŽŖqmĩåļ +Âpīš¸úâ °IŽ4¤[ĀĻĮũ\]—œ?Äk=4‹‹Å˛4ZŲÜBq÷zôüĒaiwqĨhWOÅŨĩŽ˙˛KČtÎ úĶtíFÎ÷TĐ­ä‡ėÚv%>L•ķ˛zûŒTž%ŽËHˆÚØÜ”KĢÄkĖĒ“@8Î+VĪF°MkÍūĐI^æÜ¯Ųâ@ĒëŒäíéõŽItË_ø@nu„]%ÎķĐnÎēh¤KØŲjį@–*đ¤œĢšœ§¯åY‘YC$Ū*ĩĩ•m"y#DÉāđŋBx­ Š]n[;Ûąę+ įĘĀIŊmëļĢ'‡oÝę-™ˆí¸ ƒų×)-ĩĩˇÂķ$jiãBåGŪΧņŠN—âČÜĸâŌåŗŋåīUėôįņ*jwßAÂÎĘCĮ–‰AųvœŒŸĢ$Åíu1ęļŅ[§CÃĪÎlã¯ĩV[„Õõ[ eQg¨hã¸MÁ|€FOÔh:!ĩŗšÍ¯ÅđąeD7SéTüc,öZ2"Ü:‡b‘†FøU CLĩ´ņ‚ļŠå,ŒrČsģsõæĢZi÷~$PœŨCŠ; žíņĶ˛nŽ>ÜĨķ„A鏠ĒpEũŖŽčō]4€ŨFYŲ\ƒÜqéŌģ&IPųJrŠ8fäöŽZ(Όo‚I+ˆáÐO§ĩEag.ĩŖ__ŧÎ%RÁbĄĀƒÛ­fOŠÎÖÚE܉–›‘Á}¤Vŧŗĩŋ‡äÕbžy§—k1ÂzíīKoiŠ­ÕŦ­.Ø'›>đxę28Ŧ÷3>­ģP›mą%0ØĪZÜŌ|ûŨ4]~ūy8?áUõ7¸€Û~ôÛÂíąörí돿ŠÚÜ\Üéú 2ČĄ&7u†3Á÷ĒÂæú7Oŧ7NÂiv4lĢ´ŒûUä–]SVšˇķdH­FGÁ-ę*o† ޟrĄrŪyVnũŋúôũWP’ÖāK;ÆG)UŽĻŋŌĄ–G¸ķíXaĪ;ķíPßM}cgmpķ"”ƒ*ÉጠA=õÆŠsw^RDž`!;c?ÖŠŪŨOuĸĮpŌaä“c€ŋxŸĘ´nīŽaKK,]–uAš8Ā隉gÕūĪ3Ų%VĘŗF?x=Į­2ŌęúîÎ{Ĩ…~öĀ[~9ü*4ŸŲÆGē–,N‡ëøÖün<•v#Ė$‘Đãĩ+’éÄ|š'Fę H¤pŧ„ęqOeĘ‚AŨš¨ĸcįHÛsˇü˙…_VFÜĖNvŒc€=EŧĮĪpĮP¸"ŸnÄP“#dŸtu4DŖxo0âúSQAןî€zôöđŪÁ$W ž)˧ŋąö§íŽ(ŧĨBcp˙ F$äu§€Fįyi™žx5$ƒĘm d2{SU] ,Ė@Ææę~ž”+ āāāö=k;WŅėĩ›#iz­ØŒĒ9\ũqO°ļŠŌĘ;[Wq#hߖ8ĮLš™cÎ~n;jäG'â¤Aģ;F8ôĨÚGÎqÆ*2û[GÍč)×+Æ>nTƒÁ#ķõĻbpp})’~P01Ôczty8ROdŸ\Sˆ;HUäđz{АOR ģŽrE5š‰ö ŨŽ7dŅå*Ļq‚=éÜĒamĮnÔČđÎHgĶŸ"īŨš”‘ŒdqL ĒĄB ëŪ¤UųR;ŒžM’ĀŒäôŌ7ay'=}Ēĩƛgw´Īo (Ō b¨'ĨW:Fž×ff´ĩiÍäĮ>øúŠˆčzBĢÆēmŸ’~b†Æ}z{Ō6‰ĨH 6lÂ5 ĒbSÉĀãĨjĮC **ĸ*āā: å5ī OŦëÖÛm^ŪßwîĨRÛķ×8ôí[ņé–6VŌE ŦE !ŅcosëT“ÃZĢĨÚa[pũĘõõéXVžaâ=BûSŠÎx¯m\’ÉŽ8ãŊt§Nͤą:{ZÄÖĮŦN€…’ßDŌŦŦeļĩą‚8¤8‘UŪ=ũhĶôë>7ŠÆÕ-㓒ŠĀ'5aŖˆNw|Ŗ"ŗbđū SÄ4ø9¸‘Bcw|}=ŠßŲēiĶOû,bĖŽb *ŧĐã0Țt^l\Ŗ„äSĮ‡4tŽæ5ŗP.e]įįúķÍA'‡4€#EļōÄ …1ą=5^įAŌæ°[YtøšŪ,”U\üE'ö^œš{iđŲBö˛œíÛĮâ}}čĶt-2Î9RÎ×ÉiFec¸Lį4æđžŽtļ´6ĖļåÃðõÆi.|?Ļ]ÁÜZo0 ą1fĢÛæëŠQáės*ičåK˛ļI ƒ×9ëSXi–ļ7 ,*Æf^IģmôÉ=*ė$ĐŧnĄ|‡\uĩb/…4oŗÉb#v€J XsØuéíO›Ãú[^Apé0–؉šg;@üj­ī†´‹AŽMŽŲXn`¤…“ę:UŠ|?gv~ĐË,,Ņņ†0Pt\ÕVķÚUãC [öe Œí+ßŠĻØ[éö­´vwdĮԞæŖģĶaÔíæ†î{ięÜđzûU  ØC-Ŋ™æ–Üūéžv!~œô¨Ž|/Ĩͨ=ԉ,m#fDŽRķ܁õĸ÷D͝šHh~͑ŽMœtĮâ™/…leēšęi.N HŠ! ÃņÖĢÍá[!aml&ēÛ ī‹÷™Á'éR[Ųäxüˇo3†SۊKMÖíggšU…‡Î`BägëųÕæTíJČ6~\qĪãŌŗÖ^cZC=ĘŲČwI¸Ųžŋ\S.ŧ;n×_Gu4-Ȉ˜Â¯ˇ>ĩŠ5Á•Œo'īcžÕ“.— ęmŠGq4Sėųã‰ļƒŽĮô¨FƒåA3ZŪM7G2B˜#ŸBG”ˇ>ˇ“닯lČÔ SČæĸO ÅšˆÎí ųĖ[@įŒzb§xz8ĻQ5ä÷1ÄģĸŽOē§ĩW—ßgŠė­û1¸8“1ƒ×Ž+GItˆŖĪŧĻ@.ŖéüęŽĨĨĩíÅŊČŧ0Ŋģ|Œ=}ĒáɗíB;éÛI|ąß’O"ĸmi4Ë;_ļ€ mã1wįķSIĄÜA|×VžCƟžĘd19äķ֗MĶ—Kĩ•ZVŸĖ“r’›H'ŋéNÕt„ÔĶ éĄ˛¸c5Ÿ&ķ#E¨_ÂĢąpžžįĨ6įK•ŖļĩģÚ>ę_3Î*ĶįƒTšU–ŗFW%Nt ĻÁ¤Í7‡Í§˜Ą„ģАyįŊXŊŌnîZÖåVōĀaX€Tréڑˇ2ėd✐Ē=Ŋ1téŦoÛ<f˜hōOnONŊiltũB×O’ŲF|’Ŗ'$÷­ëWf°ĖŅ4ÁF˙—‚yTÖíā”ß‘…ū‚ŖHĪ÷Æ<ņÅ%ŧ,Ë9,¯'ĩBģ?v\”ĪĖX§h€y\ŗ‚ģš<ņųTŪJ›F_›pî$įĨF°Éū°–čI$hŽcg ›Œ˜“•`OnqVb•öq’}­vøÎĘKģ(gKÃū+Ē•ú`FsÜS ņ…ĩÍĉ¤ōÛĨČĩ3¨PĒųĮLîÆ{âēō;SŧsĮĨrמ*ēˇņŊž‘„­‰¤“hŋ`FOsšÂļÕWEø‡¯9†ōāy(Â(”ČzO ÖĮâÍ*ãDƒVą‚VŲmËŗį@õŠ, ÕĻÔĩ›˜ckĮŽ+Ÿ™GĀę+¨očÚTvˇwį͒ Q™>ņĀęj{išŦ7YŨä[˙­Ę+õ•QGzl’(ļ(˜.W?ZĄė\ÜYĨĀy-Ô;ĮߞƒëĮ­]Ui"ËŪÆ8ėJkčmîm­ZeķĻ$"ŸâįųU;]niÔˇSϟ •ĸ,np§%O^)ēeÔZ•‘ÔÄlą€FXō¸=JĻ2Ÿœƒƒœ÷ĻŖāžÚ~÷$cëéR‰!û@ā.åË8'üzS>ĘFö^H$ļîsÍV‘Ü žÃȃĖ:úRŲßŨbŒ†CļT?y˙]Gnī,’É PCc…# Ĩˇ*¨å÷,UN?J§y¨Û۔†I'—CÉΝnĩ2‘Õ˛eĮŪĪ͑Lˇ„D“3ČšŨŒz“QO,QÛ¤$‚ËßÚŖB’ʁKˆ—–Rãˆ"íBH yÆi~ÔQxL‚>R:‘ŽĩCut–ņīšt¸'$§?į*™-V`Ä n˙ëĐ]ĸÜĢōŖÛG'ëR‚Än`Ācšõ˙?­9ķ´›ÔĢqˇ<аÎVŗĘ…Î1ų RĸĸFD‹–õĪŋųô¨!mÛՀßÂķĀéV­î#ŦÎėwč)đnžUċŗiįšüŠĶK€wnŒāsÛü)"?PcĩclsŸ¯j`rŠMôāt­m â Ĩ˛´Â~^Ą_6i ‘•Æ[w\úZĻļŌÅŽ&ĄĄĮyi5Ūۛŧšw/œcįņ¯U€ä qŽĩÁk3I§üN˛ŋ’Úáā{?(41–Ëîų¤ēļ(Ae'¨øŽ×Ãséwē€šŌtˇA]KÓü ë]\Ž­„Ά8¯4đÎŽt/4 SL¸žīĪvDH‹‰ˇžĻŦhW'ÃŪ)֎´­l/e†R¤Ą˙dvÎ? ÁŊŗžÛÂäíĸęWÂKhöĖĄķœvâēĪŸ öÆsį,b0–!†,UÄĶøWGŊˇˆÜÚÛM’Ŧy \ʛcuĄ^‹ĢŊ/JžuKYÄŌ]ŋpnęOĩgx~IŦ5›[=2ôßéSBōyR.^׎„öኧŖęļ đÚōÁĘIw#HĢ>vf<`wúÔÚdSøgÄ=ÎĢšm›O,¤|ąŋ]¤ö˙ëÔڀŽįPņVą ĒØŊ$ūe*8_^•Rî{wĐ|ĻE&q ʁÔūuąaŠÁĄøį[ŗų+v ™ĮĘČķŌšØnm‡Ãŋ3 %îcĀ˛‘ČūUŗ¨ŪÚ\x‡Á¸š6Ũ†PQZIlú‡Ž§ų^,ƒ9NqëÖ˛ômJÂņ´ŋģŠ/ėđB€ŽZBq€r01õ5ėy{NNĩÂ[OiÄŊ]îäŽöŠ´Ępāg­sז‘Ûø_š_ŨÛŨ߇ĩSÆå9¯å[zåˇ‹|1u<¨–ËjųŸ—;}kĐc8IK…r8ĀæŦ#mwdõÅ5ŽÅubyī^uņmÔŧ8Œ cyģŠÔēŊĩŗüMŌ~ŅMÚš!ĀÁ uúWqŗ¸%q•ŪÕÃøÚq ΏÃ0ĶæģũųnŽ€ûg'đŦZéēMŊäúdŦˇF1:Bß*GœgŽ™ā~uwÅ6VÖøzķH"š1Įˆ`ē‘Đã¯OÖŠAĄXŪø—ÅbædˇŒđ¤Š9úņTāģ˙ŠÂv—O‹)Ĩ“Î,~SĩžPŪŲ=+CÅö%žŖ&™rņĪvbƟr4Î tÎ?ZģĨčļöz͝ōę–čˇų+omÁ0#Žį뚧áéē†ŠĢĩĖnæÖųŧ‘æ0 ƒĮzɏE´›HņUËŖ3Z\ȰäėÁíĪŌ´/-īŽ,t;åHõob­-“ļXŠŪJë|/scsáģ7ŗķVŨrKÉ'ÂŦköĐËáëņ&Öãč2?•q––Ņ|&ššX•e–‡S†ĀĻ }+Sđ¤Ö$s\§īØš;†ŅÁüÍŲÜøĻ]ašâŲfŽāĆRÛĄU?.Ü:~5ØéĒĪĨAģK’ˆ™ČāUõKxĻŅoRåIO-Ūāļ2:}+ĶĄ´ĩøz’ĩÔÖ˛\°Fh˛Í&ü€gŒÔúEõƟâDElÖđÃ`fû+6á¸Ī &§Ōô¸5oŲ杍ŧ7‚S4×!ŽG')Œā †´Ëy|_­˛ÆĮəBeĪ|į9ëø×c$f*VÁëõŽ+^°‚éŠ&ī*H 'yÆ}ø¨¯ô¤ŋø…ujŌŧQ}‘Yŧˇ+‘ĮŊTą’Y<ōĪŠŧXšō”āŗ¸Â=ÎjŪ…žoęV.—ļjČy *N9c;JęG˜H=vôĪŊu2ÄvHFxaˇžŸqzVŪ?ÕY¤˜y"9$×ÛÚąŌÕäĩņ5ôwˇ=ŊËē,RmäõîkHę××ëĄi‰&ߴۉæa)C)ÜGCNžĶVĶôMM'Ôp"S-°Iwēž #8÷Ŧøž˙IđįöÛßË-ÅĖJˆ˛r?Åõĩ4ģ VĪR´ŸÎŌEa%ÆũíØ¯jée ›ˆRP Éíú×%ŽĪuĻköŌŊÜŠcvŒŒĄ°ĀĮEeiZžĄ}iËuqũŖ5ĘŨŽÃÎ!ú×Em-ĐņvŠi5ēC¨*ŒĻrO?a”ˇįå˙hæģtŽBaX+$`eŊqŪ°ŧf­Ÿk 7îžu Įnp ik˙mŗ˛GŽę X÷*ŗČ_öqßÚ˛,/įŋm^ŅŪFTˆ´rJ 8JÍYu?éīo DšS+œäŸđ̆}beôīíĖ!1 ¨€ĻC¯ŨŽŽī##Ũĩߐ“ų’\Õ.ĩ#SŗYįk¨.NܲÁŗŽ1ÛĨGĨj×熤°Ëtą\yÄIk"@8Áīô¨4!zÚĻĻōO¸Ŧ…vã$g@) i­ oyy 2­ŒĘĨ’t2°ŨĀĘWĢ”( ÎiNæ#•Âõ>”ÆPwzÔņåų† =ģRˆNŌŧŌ ũäe•77%ąÚĨq”<ôęŗęw õĪųúŌ‡ąi3œ)PĘŽrHÎyãŌ‘ŠųœĪPiĖ7ėÂnΝ4y!€>\ō 1"Ž5 @^˜ļûâ‘ylĘ@ePH÷ŦÃ0xzĖÚŦĻáwF‘W=yĩž(ĨAž5 Œ3Å)HÚžR„ļņLōĸ(ĄĸŒ‘ĶåéJ–Ņš`$<Ÿ™7ö§ImhЈü˜Ú.¸+LKKE‘[ėņåG`âŗĩ}×SŌĨĩUō→įüŠĄ…%¸HĸÔĩw lŦ"$`퀓Â™oám3Îģ™c•~Ø Ė|öË{j'đžũ’4×ļ&Đ9dBäícÜäU›_ é6š|Ö1Ú/‘*ūø?Ė_Ķ'­EĸøWHŌ^I,íÜJT¨‘˜ąP}oÂĻøLŌ^g´ŖÍĖŦĶ1Éõë×ŪĢÂ-Ĩ[ÛŨÚĸ\y7-ēaį12ĪŪĨĶÔÂa7<‘–v =:ôĢ–vpéz|V–ˆŠ t_ĮœŸÆŦĖĻâ7ŽD)ŠQÜĩÍĮá)4šėÚVÁe“Đ“§õ§?…ôųÚŌC-Ø6÷ŊčAwá=îūK÷ķŅĨaŊb¨—ë[vĄ"ˇH­Ŗ)Œĸ) Ž*ÛhīlŨä“ 6ģGō“øÖđƜ4ĮĶwÜ=˛0’2[æFŨ8÷55ŋ†--uHīġRNŅė"IrĩëĮáNŗđ^™iz'‰Ž|€ÂaIûŦõoūĩ^‡ÃöQkrę°Mp˛M‡tY0„ôéŪĩ_:r˛00TrGÖąĩC­^[^ŧŗÃ5žT_N”/† Z¸ÔEíߛ$~QbĘFÜ`qˇĩgIāí54QfˇWF¸Ģ‘úqō˙?J›NđũĨŽĩöĶyy$Λd28ÃvįŠąĄč֚2Nö—W&&9ōäo•3×~Ļ´åĄ¸Xw}ōO~ɓCCâ ĩ8ŽîbyyĢŨb c”ë+ .öúëÎCi+™ m%Øį ?Ic§\ŊÅÎĢu˛;ĢĄ…Cü?¯ŖĀĀ8,KíëČŽ}ôKédÔQ'ļ)t3ŊķŧAíū^hڑ‡LÚĄÛ•›æéííNŋŌĸÔučnņē0€HĢüXé×üņFŖ EžXe]ō’‘š<ĸã#ųÖBø{QhĄTŦŅMģvķ–9īV5ˆ Ôõ›Hãž7¸%Ā8rsŸĘ­kmäōHŌ) t?˜+FßįųUĢtĩĶmâų’ŽUˆûTĩ„—:\ĮÁ‚¨}sP› ĢØŦíî Hbļ!˜Ģî.@Į~ĩ 6zĻ™s:ÚAĐÎåŅ™ąˇë[ŅĮ"[ĒÜJŽę3#mę}ŠČ"g88ĪŽqšßyŽĒäād•r1RF—1ė^{‚ZŽ(•§ūđ핿¤™ŒŠ#hʡ\œu˙?ʈ˜ēŦlq´ďåI&a…äˆ!z ™\*Tŧ˜ĪAúPĐB횈f=IPs^…ĨøšÃTŋ6%eˇēō÷ˆįˆŖ2ú€zÖŧof^~ĩË_øÁ,|]mĸũ’VFC$ްą?ėíĮQękJ÷ÅuĨĖÖėĶJШyŧˆ™üąęØé\īŒĩq6‰ĨęZNŖ Š[ČĐ´O´2’r~ÕŊģ§ŨjĶX¤ōŊŎ-‚ƒ×“Œ)Åú4ˇPÚ¤ė ŽV'1°ŽB:…l`šŠīÆÚ •ĖļĶ_/ų+1ëWôíFĶVŗŠúÂO: Á힄´ø ģNŌzëXž*ņ>ŅÚōXËš D€™ŊĪaX^*ņ‚ÃCÔė5 `‚[ĊQ ¯SœŒöޟMņ•ŦI46‰4ą ē`Įžĸ™˙ NŒnŌÔŨ¯šĪąz…-čĄ>Ų­"TnqĀ#ō*ĨÖĩ§ŲMĩÍâC4¤,JxÉÎ0*ŦéŌ]ĪhˇHĶ[Ąi#Îū•HxËÃč¤IĒZŒĒō*õÎŗ§ÛÛĮ5ÍĖH“´–ûŨÆ|×7áßIyâŨm˙ĪĶ`"@ ™äô^ž•ĐZx‡Hŋ™`ļž…ä$”E?{ÜzÕOi—^&¸Ōc”nˆ*‡-Ãŋ9P=°*üÚΔ—‹c&Ąnŗ–Úc,Χ×ڒķZĶtûŸ&æî(níĨ€Ā=ųéWãu!Xe#!ŊEføŠi!Ō¤0ę‘XLÅvM ķÖŠŨx˛ËMÕŦôۛ˜ši“.ä…Tųr úúV›ëúuŊ×ŲgŊļYIo˜3ĪOÎŽ•V<‚TžŨ(ÚXIž)X*Šeägž9¨f"gĖDĮŠŦۙ5%ÕėŖHĸûŒ™ĨŪC†ėôéEļĨiŠKvļ“n’ÕüŠņƒ€zÕâ6…į¨Ī'üûS&ōÖl3¨ņÚĄÔ5k )nnfUļŒe˜ķø}jžŠy}nÖ2i°Å:É |mSԏzÔ “s烌sØŅ2‡ĮšqÜw¨ H‘X1î3ÛŊ čģlûŽ)üē8lîīšÎĩēԛVēĩšČĨ˛ 1ÜoÎöęF?:žÕYĮ|ŸZŽLŒ˛öūãBXX~HĮŸūĩ:`Y q“ŸķÍdéúĐŋׯôļ´1 EV ŧ6ėûz`Ս_PŸMĶž[{VšžÕD$“úUÅRȤĄPT1SëXēŽŧtíNĘÅ­ÖęM‚@@8üs[ËsûŗĪÉčjfWäČÆŪ‡Œb¨ÉŠD,ŽĻļvĩxãÁ#ŒãĶĄĒ6˛ÚŨ­ĩŌ[ŧI8b=iĮ'Ūĩ!¸š!™ØmīÖ˜’Í#Čĸ5 Œąč@Ĩ’Ų‡Éôõį âĒ™ŠM'œ78mĒĮę77+Tûš•LŌ ˜,‹˜A+ž8䙤ōí&]ĮxF<Ô+$ĘU|ąˇ[’jŽŗĒ[iWÚäŪ-ûvĸä¯Ą5i'B¨YQ‹€ØÎJd’I$Å ŠÁv,yÕļÅ ķ$\`ã ũi^}÷„.7+68ëüév´Vņ:ĀØā¨ãõú⭙#fķvƒÔEFŌšaäˆūBzŒnČ9˙õŌÁ,i$ģ”.ĖåĪ úŸjv"™ #āqÅBÄ áÁ㑞™ôÍ2č;ÜF…FĀŨ‰ô¨Ãˆg‘#_ē@ĪN”øn _#>T|Ųã'Š&e¯9V%†õëõüé%’4ƒq@Kz g?įôĒėVY™Z;qķ}O?9Jíy4™S…aœúãôĨ˜ĄpǤÆS¯Lœ÷.ãA°sūqQÄí4;Tf8†Hį˙ÕRMļ ‹ũãN8öĒ—Q[ĀÍ9Û8ķ8?WƒČ–)eRe 2Ŗ¨ö Qj“ƒ 'nZtŸģ“jĒą A 3ƒũi ŗÁląš;/V=šĄ EÃļKåzđoëP™cg ŅČĢ•íĀ§]F“g/´0­ČĪęHŌ8đôü}šŠe”H˜RĖËÉëū~”’@¸99'$2đ(`ūVŨ¤.:ߚŽx–}ģˇHëƒÉ āõ̊’9äƒÔTDÉįg‚ŠĀÁ9Į=*[…bc’ëËmīĮĨVŗ%ŗžīØĶ‚Áˇšx=1ņĻĮ œy›9eÛ'õ¤œ$ØÉÆÎ˜üĢĻĐeđūŖŦÚ]čļSÍr ‰f“~ \ĨģöĀŽÎ%Ā}āįéí\Vŗu›ņJÂæåŒp=[åˇŋJĢáģČt-[ÄÚŧŸf–[–¸ĨųDąž˜'¯Ōš+Û)m|31ļû^­į[ĢđV,•Đhē‹Â7­xeʍ]c“Ęd?ņ폐{’*ŧ9y¤iö¯ouqĢCĩE™’LŦ€ã8ÎīíZV—6Ÿđ´ĩG‘ã*ļ!NXaHÆGáPø^ŌôoÍ=ėū\bņ×* *[§é^ƒ 2[,ˆæHÛ šôę+•ø“nÃÁw #$ "%ēņ¸dÖ?Œõ=>÷OđëÛÜFņ čÉ9ė úTWî˛ü@Õc°•LŌi%cØGĖøč=ņYš7ü#ˇ:ĩäˇm €l„¸Č ûĢë^Ŧҍ‰rHĀĪ#ų× ãy#‚÷AŊmļŠũKą3ÍTĶoė¯ū%j-ÄrG-˜D;˛ŒdgŊghgIĩd¸0yÆIA\Ä˙ŋŌŖŌLš&ŊáįÖķŋöyHÚ\€ŒI8ö8ĀüjÄ7Ö â?Ü7—ulÖęÅc9Ū6ō>¸ŦøŽ‘ĩŋ Hnm"rRÛ8ĀfÎI>õģŖOˇŽ|H’ʉq!AbfÛÚ˛4ė;¯ ĩļ¯ŠÜĮp’ąžÛx dŨ‘Œ’jūģļ×ē†ŠĨĖŗ*Áj7# S`ÁünųŽëK›íz]¤đGä‰QXDÃ$ tŦ‰[?á1WĖFFGû_§KS{hž!črNŅM“|ÎxĪ=ë7TgĶ5SP´h5 "[ĄöËi8xÜ2ŋĻ+ĶÁĒŧaÆå `ũ)ąŒœr sŪ”Į– °9Āæ~&…ā×5;ë‹_í.EXåxÎd´ ÆzuĪãW‹C?Ä}6H¤†}4ŋ,pA ™á*Â[?¸ˇBéq4hOđ ŗĻ-'ÂŊ>c12Gu´œ€\×AŽÃm>ŧąÄ$Ô.c˛9ĩbq˙ļIīú×;6nžÚI?ī;­ĒĖN@-åÅnøĻĘ ;ūÁeē8ÍâĒįōxÍ.ƒjž ÕõÅÕK\=´Ļ•øōן˜ÄúÖ÷˛ø2â).î ŗÔ~Ī‚B LŽ­oG§ +Įļļ֗ˆîlšID’–ÜFy9ú Ĩ 9ĶõË }^)Ąŧi™ĸŧVŨĐ`x'ņúv¯L0$q0åŽI'­p–Ģ3ø›Ä𠛏*(SgīŽPíĪĘ{s\čļ¸OiēÚß]›ĶvKJJãqĮá^´">PŪ~v\1Åyöŋ!Ņ|WÅÍĖßŲˇëíŗ,Ÿiō÷+œ°ÉúÖŌ‡×ŧSŠi×WSGmg „HœĻæa÷‰qųVVģĨ][˙Â7aq¨<ķ}ŠĐÜ)ų—îāgž@5­áueâũ[HûL×Đĸ:™[qßņŽÂx¤{SI÷÷ŋZá<#h#đîŗrŌÎĮ˚2ģÎ́מõ‡oæá 'Wˇŋœsåˆwa,r1ß8ë[×rjZŽŊ¨éļ¯7—j‹…K‡s “ž˙Jč|=k}.•Zģ Ŋ‰ļnR e÷ĮĩVņ•Üú^Ÿj–ŽÂ[›„…X°ĘŽ{ž?ũuŸ§iēÕž°ë+O„Ņ4áŲŽGøWŊ-ޝ?öŒH4ŲYvˆG΃Čöĸˇwˇ˛čö]įēƒĪ•ļ‘@čõæĒ\ĪŦiÅŦŽŨd–îčEo4˜ûšä? žEÔ4mbĶO¸šķbž\E.Κ&úztĒŅj:ŖøbūøLígĀmŊp@Į^:Ԛ…æąks¤Gm4CûATüĀđø§"ĢĮ.Ŗ=Îąis,_hļPâdã¸úT:eíŪ™áUžšE‘ˆ…6œ—,s“ūzÕë ­IĩD‚XšxæB|ÃnČšāį¨ĒļwēåŨĤE ‘XĖU÷g Îqū{Ķ´ÍjįSž€n€bŗBąáãQœ{ÖôÉÄ pŠŨ$āž•‹­ßŲ‰dŠŪ(ām‘Å ųĻėHæĩ¤ŨŸnefŪ Ë7Šõ­…äôÎ88ĻZ㠛×Gõ`ą€8ôĀŦK¯ éס7RŋžÖ<åŽRĢ #đ§7†´ÆÖbÕʡ0¨6ĘBĒŽ0L{Sm|1ĻØjwĐDË-É,ęÎväõ!zVhø} 4&ɇĖŪ#ķÛjžā ՛iwŨ4sG"Ä",“‘Ŋnri‚4uŅgŌãũšV߆”¤ņéQ\x7N¸ŠÖ)fģeĩmčŪqÎsԓÔÔĶx^Ō]BKø..m.$Q­€$üu÷¨¯|%Ĩ\iVÚxÅnŋž7ˇĢ95,žļēÖ!ÔdģšķâĘ_œ`Ž9;äÔ6~˛´š×ĖžęxŦNčgPôĪLŸÎē$$ŒmP3‘ëÍs‡ÃQE¨\ĨũОõvMĩ—vĮqÅB|g&•öËąko/šƒrį?÷ĪšüëĨ‰OŲ•ģ•.p úâ˛õŊĮYˇŽÖį$G*ˏöę?*ŽÖKĢ"‘;Â"ã`õü°? Ĩ†|Būú=FäKzģ%ĀRĶŽÂŗn<-"BasyЏ)Į=˙SVõ? ÃyŠĨäWסARË Ėî>”ŗøB ÚÂH¯f‰,õA,äōđÉ5> =jëT{ų ˇC/(Á§jß_+Ë"#ž3Æ—Zåāđ›éÉļ§2ÁtXųdˇ^;œU{į@ļŌ?´˜Co'š1ÜOQĪįV/ü*&ԗPļÕ'˛žō•'•S‰1œzņúVƗg“§ˆQšw,Ėō“—v=IĒū#Ō#Öė>Į2˛āÆéÖ3ØÕ+/ŪZšžëWšōę(Ų`ķˆ‰ã8îk:J4 (j@Įq(‘ŸÉį¯#¯¨vãÂSHöwöš“ÚęņˆšE"ErĩĮ„čÛÜG¨ˇöœRyŋjrĮ¸#͌cĩLŪûUėךĨÂĪ+ÃöpĢÔXÎsާ>õšūŋmôaŦgO,ŲōØÎqœÔš‡…oÔ7ú~ĻĐ^ˆ„2ģ'ÆHč: u˙†.o<>lūųf—Íšžd9b:đ8ÅnŲ´ąZÃĖĻ` 3"axö&ĒkšTzö™-›Ÿ(ˇĖŒü§<ÎŌtUÔuUž+eŨ J¤d€q¸õã5RÛÃڊéúŊ§ldÔ¤-Đüš9?…>ãÂ×âÛMšÚęĩ ōĀŽƒ×˙ÕŪ›wá‹ÛûužįPĒ$ĸXŨTųkáĮõĢCIžīTĩÔuI-ÂŲĢ*GnKeĪrH•e7†ĩĨĶ56Ū{E´ē˜Č7îßÔtĮĨIu¤j“KŖmkVūÍ$ŗ.˙aÁėLš.ĸuũJîSn°ßDW ėXq€zōjĨˇ…5 <7>—uqnžY FI;˛O9č9íV­-uŌbûuÄŦBNéHé¸úwĻhÚV§iũ¤&XTŨHdR¯¸Š=OÖŗ ĐnßT°–â8 ž 7Op’s&=ąÖēĪ&)Ô§–œô~uÆÜčœ‘jíæ{—Ü—!ÜítŽ‹MK„ĶĸIhÁBØ8ĮVfģĻ]ÜEfÖąī– ƒ•v?OÆ Wö:ČԒ—͇˸‰$ÉSĮ Ÿ ¨ot{ÉSē0>õ@Ž%pv/Š?…RĶėĩæ5ŠŲŪŪT 2Rޏ9ÅZą´Ö4‡žÎ (Žbw-…Ā ¨§Ŋüē֛#Û4ÉlŋŊ”‰î=Ļi0Ũ[ꚓÍjč';—8=ķØÖŦûD2´jĖá2Uz–éßë\ēé×?đŊĄŗŸíBBGMĄrzՑopēž›vösĸM˛d‚sÛ5Đ,jQ‚ĸ䟝ˆÉ?•rWÖwŌÜ_C=¤ķ?ü°)÷g¯×WGŖ}eEÚQ°Å]¸•R-Ąwq‘ōįhõ÷§Eæ  œ;Cđ8ūēĩ€Ûä`ČĀņŒãˇ5˛´Îģ˜l,zIá…RIÛŋ†ëNŪ˛Āģ˜(P?Ú-LEƒ)'hQūqšrüÁc`č˜#Ø ×؆ ‘‘ūxŽūĪĚúÎÖڔXļQ$§8 ž¤Ķí|CĨę7‰goyûŲz#ĄBÃÕrGŌĄočI#[žĢn$Gãw$žÕŽeKkv’gS,Į¨WŖøĩÍZîęMq--íîX}™lxĄ$ō{æēË_hú…ÚÁi¨A4Ļ2ā#d•ûoi7—âĘčžfÎÅī×Ŋ-߈4:ķČŊŧ†'āícĶ=3éøÖ¤n’ŽcÁ 8aČ"°ŧIâk_[B÷|ɤTŽ2q‘ }ŠÛÄzDI“PļE—%7H0ÃÔSÄ:Û%ĐÔmĖ2äFŀޏõ̋Ш<^‹Ø>ĖÃ>o˜ūuZIģēÖˇÖŌÜÜd‘×§Ō™ũĩĨĨᴒöšfÛå—Éč>žÔˇæ‘nė˛ęVŅėĀmŌ€TŸZiÖtĚ–úØÍ0ĖoĨAæ\ÂBCęĻĖ@OŲå¨lõöŠŗ§§ŨĪäÛ^ÛË2įr, ž:ņN‡UĶîĨx!ŧ‚Y—ø@N~•SEžáŖģkëëYŅgo+Éãbú7=j垊§ŨHņÛ^E4‹÷•$ŌO¨ØÄXÍy 6į)üjÜDŧ;–O01Č>šŦŨwZĩĐtÆģŊ—!Uz3ŸAXž"ņͅΌlžŨí¯.V''’냜WGosmx“,oåž|˛ž)âŨįhæ30éa‘øU—V¸=i¤1U$ /qųÔRĢ)!qæj°•Ūí@āmų†*p[i*rIÉĨ}įnßēOQښ۔3 3ŒŒfĢ.ĄÛ#°yGÚ$C"Ąęgõ"™w$åz+lÆIÛÛĒ—š„6p%•cŒ¤ˇŠ8ŠŠ]›ėĸM9ë֒Ūą˛°AƒÆxŠŽ$ČŨŒqXÚˆV÷ÄÚKZīGˇáM‰Î0bĪrĮōŠ÷PexSYíĩŽĢiare¸lE„āƒīZ“ĖȸÆā§ŒŒÖŖķ[Ļ `2đ:R,ÆQ(PuŨŸŌ˜ŅÜ $zT5™•~^Ēqü˙ĪzHŨVP1‘ž~l‘øTMp˙h1*í-ËĮ§Nũ*ŌŧnwųKŧ1=Ē-†lš#%SüšŅbÉČ Įrį$úū{T2ŠČ!9cķ`Žĩ_P¸û$?hš™cH°‰ãŌZI ÍĸĪUųÔ`‘šF–@ÎNå;H¯—Eežâ]‘ō]˜ū•^ĶPˇģ„Ío?œĒÅrœãžŸ•)&8K)&@pÄgˇņĄ‡%ŒŦ¸Ë’2Gķô¨$ōÄâHШp0Į¤d.öŗs´ō;S.æŠ-ĒĖĢp;g#ō¤‚XŽQŪ'I 8 Û=ę)Æøķ1į uö§=éxY °áöņ°q“ŌĢ\ÎąvHA,Æ*ēŨ0w$FŖģį5gí%ē2„į%›÷"Ĩ2˛ŗŨ”Ā>߅W2)v)Éá:ŸSø‰ŲŖŪ€Ū@-Č`~•cÉs0)Ņ3ŋƒ†ŒS%ÉqåŠDÛŋõ¨7 q°e$aōqëÛŪ–!ķŗ6ÔF.ėgąÅK +ĸ>Ō¤.#8ČÔN’7Į&Qˆ<ũOĩ\ˆ˜íą?Ú8Æ}ķR*Ŧq˛–f`„dÁë’*#'”ämTʒ’HĢX™•psŒ!íQ‹5ˇrčYzų}*ŗ¤ĒŽ]Ęî|‰Éį×ĩOĢŧ@ī8č:qWdqÔf¯x´ÁŠOá†ŌäŽK¯ĩ+!ĒŌąãˇJƒÃvöwž9ņ1’eÚņ”R ōoÆˇėmŧO¨[Pŋ˛’Āg1¤XlsŽ}ĢÁĻŲü9â_0Ą_ĩ\œ`ŒU-Î%øG5Ũē CȔQ~|9úTúkxv˙JĐåmBæâîO"ÕwŦœ6œ}{Um4iˇWŪ#ą×õIlĻ{𠑺LJøy#Đvö¯@ĐĐmRÄĖ TÄF_ŧTt'đŽwâ9CkĄČĀ]R ĖzƒT<`šu׊<,6Á,RJęä`†ã56Ŧ,-âīÆ^mœoädŕû‡i9œŠí< Î<ĨģHsåã'ękârE'‡­ÄĒŦâé0N285,lŲŧ3kQ-ŗ^…dAƒ×øÕEŒhž*ņDzLbN$qށqQéM•ƃĨę’k+ Äâbéų†LōĨēœž+Ķ˲°Uū!Ԏ)Ž7 įiÁČę)\pãŒf¸ XĮ‰|C¯C{s0¸†Ū4rģ8??“ŸZ¯iÄž)ĩđŨÖŖ5ͤ†G`åL¯’9 įĶ=Ē %žĶõ_hđß\}ŽŪÍŽ`"BLG€ æ¨0ŧĩĐŧ7ĒĻĨz÷wW)›æ%JœņŽĢe4čeøątX˄´Y‡ī˜|Ų‡§ˇJĨl5ĪŽŖwm2$ĸå’NžNŌ06ƒøõĨņTēŽ‡iĨęËŠ<˛qÔ 9 #÷€Cš¯¯é@x{A‘īŽ.dšŧˆ<+Áä ũ1^—knļ–ĢgmĢÖW,Įņ=k‡×ofŅ…­_jvč˛Ũ].¤÷ ´…Î勉ü¸üjëiō^xĶÄb+û˜#!Ąl3ƒŠ¨SÄZŧŪĐá3ÜßĖņ´ģ‚ąU$c=‰ãšÚĶ,ĩû{‹ä¸¸h-&‹÷AæÉņœ9}kB¸ÕS§Ä7ĩÄâ›ũãiĀ8Ī~ĸŦiëâK›}.ūr$*÷[…1ēÁ1Åw­üİgž 5ÄÁw¨ĪĢxĒÅīeō „4ep dø~kĀv˛Įá[yÚáŲeS„r0‡stúĶŧjƒĩ#¸•rÛzüÃõŦhn5}XĐ!—P{ˆoĸ*Ņ&Æ8ãÍs[ÔlUœjyš_" t ¨šķ28ĪÖĻÕüEsĄ§Ëq4öztöĄ„đ ;f>šĨuzS<ē=Ŧ’\ĨĶȀ4ŠŅ΍Ŧ zķWÅ:n™ez KĨpËäĢĮSĪZĄgâ]GIˇ×ūØ˙k—O$20 ’N ~fÎãÅ&ōÕÂ]< Dí*ÄŅ“ŊT´ÖõWŌu;{›ļū×†í ˆí\äœ t⟠Ģ3ęzŊŪŠ{af÷$ØÆÉ HKČG%č=…žŗâ/ i÷mV—’N!•0KĮĐ:WIĨ[jZLšĩÚO#>õ1Äé\Į‹b¸—Ä~ŽÜˆ§i,Œ„€xįé&ņ.ĢĄę÷Ú~ą2^F–æâ0„ãéųTZŋˆn.ėnVŪâxæ#ΏČڑŠčTįž=i[^ÕgēԟKYU-œÆĒ–Ū`‘‡]ĮļiúŪŗ­[ÛhÆ8Ŗ‚kōHåBYXāsíSøzûSmvķIžx¤0"ēËíČ8Ā­­UåŌ´›Ëԋ͹… (P@?ūŦū•Ĩx†y-ĨÔg¸ˇēļŠÔÉ!DŲ$rw¯ëE—‰5rö%­ÚâÚåą$IjāÄĄ x4—ž'ŧ2ßÃĻÚM æf{‘ÂŽÔš§‰5X­t‡‚Î$kߗlšÜ=1ũj֓ĒęÚŊ擨, -¸W ;H>šúŠŋŽ3˙`ęhøÁ…ČãÛŌšM7ZÕ´oØŪ4ŌiĘ0V>b‚O5zķÅg¸ˇ˛0m‰CŗĖîb3€gx‡PŧÔü=§Î°ˆ’YÕY īÉũ8ëZÜMiĒ ÚÚÕo%Ė× ¤ųkúg=*(ŧ@æÛRŠK@/­ī-[ädHÎÉĸĪÄ÷c-ũæšĮĘĮš$™ē)-ĩاŋ´ĩ¸ŽŨĖĘJ<2īØyų[Ž+cz,sd䓍Āpã§õŦÍUc:eÄM?îYˇĀãËrncl@IįųbŽÁrō@·@HĀ*AųBĪZœøŠ{S Æ›Jnj‚OŪ>ÜÔ7Ü^l¯S=ŧ,U¤@6ZŲļhîlRXåߕĘ6ÜwéSÚBŒ6An˜ô˙>Õ ŧ˛(Ü|ĩ$*gņÍ_—D…”Č1ŖĶÚĄÂ4bITäúįŽ8§;f…K—UĪj_(+16ŖŅģúöĨ>\ˇ0HÆėũā=¨Ûd^=ŋΝžøÕēg°ūFŊ6+xEš†;x㈌UĀüĒ;m>ĘÎF{k8#fā´q€}čļąą†WžÚÎen ,aMX(gŒÆā:†uĒŅhÚdQČÂÕ@UÂÂ9֋ [Kk|[[ENsĩc Ÿ¨¨ Ō´Û+•¸ˇąĩŠfÉ-jū"–ãIŌīn’âæÎÖi‡GxÔˇæE]!vâ0jĨsaoymökĢxî#ßģlĢšsô5 š—$°<ēm›lųT´CåąéRŨčÚ}ėņŊŨ•ŧĪ Ō 8úT'Ãú9‚X›Nĩōämō'”¸cëĶېč:;Z]>Õŧˆ˙vÁíéQ˙bibįĪ6Â@æMÁŪõúĶ·ôį2éÖāÜ.%`ƒįúúÕoøEôy!H[Nˇ0ÆIDØ6‚qÎ=i?áŌMÃOũ› LPĢ>ŪpF0MžŌmXŧv+ė(\…SÔzzqV-ŧ9Ĩ[ēKog0RŠ?ē\߅EmáÍ"Ō˜#ą†8æâEېßPim tŠ,gɈ0rrŲ<“žĻ¤Ā;ûtŊ?kČØ8Ŋk˜Ôüa}Ŧ}š&ē´€YÚM‚AūҧŨxZÂw´’Ũ䴞ÍvÅ4$nö9ÎāyëīH<-hlīa3Üũĸķ帚b<ĮÆ:` z ­'‚meĶŦ,šúņb˛I(y3ĮoëV§đŦSøuĩÜE(caíķsķqëéT'đ=‹ęS\ÛŪßZ-Ãîž$ڏÜûÕˇđĢ]I!žCļkxáÚĨ"R9ÚëTßĀÖ˙Ø0éÚlÎ%…É]Ņ‘žœ{ÖũŒMgj‘´ōN@Á’VÉnyÍT×t+my`Šë,!•eUįGĐ÷¤ĩđ흞ģ>Žąbw…b+Øc¸÷ĀđĒPxa­īõ+õÔåķ/ÆĮĖc Ž>ƒŠ¨<f|?’÷˛“m!– Ôaâ'ŸĮŊXąđãÚÅq,ēÅåÛEå¤îōëÚ—JđÚi~¸ŌšĩÛɸā.ûŨ>ĩGNđgØå[gÖ.Ž,"}ËfqˇŽÄúgĩuō…1äŽŊAí\Õ¯…äƒSÕ/¤Ô|ÔŋR˛(L`r{Sŧ;ĨKĸiÍj×ísŒF¸U3üųŠ5­MwA}>;…ˇImģ˛ÎNõB_]\^é7OŠFœ6*yßĐâôFŨ\.§o­˛Ōōc3!ˆŨž…‰é‘WÃZ¤Q$#QŠt6ĸÚHæ‡r nÃuëŠÜŅ4Č´m 9ŋ’šÜÜdį“ôëY×Ú Äū"ŗÖĸē#´ 2„–s“Ÿ­QƒÁŗOũŽ—×1K§ķæ$ ŖFMM¤økYˇxbÔu´XڐŅÅí-Ž›\8Ģmáx¤ņjkÛÔĄ‹˜ņÖAĀoʨjÔĶ_ŸUŅ5ļk…|nšôÎ)ēΆī/´ëK85ä’)žŅ4Ķį,ãĐƒÚēˆüà 1 r¤‘žäVˆ4k­CQ͝-%'˛ē¤ í|ãĶžß­#øtj2ßÜjŽsuĸ!ōÄžŲęsÎj†‘ ø‚“MģÔâ]:Ä‘”{ cxZŌ5‹É´[ËakxûäY>Y<äTÚ§‡u ėv†xf’ ^K‰tÔņƒÅIe¤ęū/šÔŽŌyjÛ#cˇˇ­njļĶMĨÜZéīåŨ2åĮČũ+‡ÂŪjw’ŨĮ„r[!l‡sü^˜Š´/ÄĸtÉîíãą„ėķŖoŪ2ËøqšjčZūŦŪļ”-§´ģs.&b ßiږƒ­\MŖ˛"Ũ9L˛Čîą'$ØzU­7LÔāņŽŖ¨Íl‰Â_Ū‚A`ãĐâĩĩ‹ ī4ģĢuud(8ęįķŽ^ VŧŅ-´ íŌ#`&›Ė*îŠ÷§5ޝ¤kˇwMŦwVw{wFŌ(G˙¨Ô~ ąÕ¯4{HL&{ÁqįIĩ”*œ*į“×­%ƛ¨[kÖúä6í&õōįļŪ<ÁĮ×đô¨N‘|ĪĢęb‘dģ‡Č† Ãpc-Í)ĐŽî|ö b0\ĀPî0͜ö=ę֗6ŗröŅMĻĮf°%¸lØėŊYŗ:Œ×Mqd ōä>_͐ë늇]†A§Č‘DŌĖĄq$ПNkœ‚Öú\iæÂįí ũ<žÄį9ü*ÅĖ7>n€æĘč-Ļ<ÜĮŊ_ÂēĢ‚<֑˛ãŠãty¤Ōáŋĩ’Ōyv1ŧq– ĮŨ'ĩS—Kģ´Ōôø>Ī+Ëö:@‘–Ø= ëO[Žé5 ;S†&X“ǧpĪ|uõdž+­K[ŧ‘-nĄK‹Sm"ĀāûTV‘ČmaąūÅa}Ū´ķ÷‹UÕg˙„ÄKäËåˆŧĸÂ3´7Ļq]ŲãxĘĒ 9ÉĪ~k•E’ßÄ÷[ā” b ŽŠ~\€2}ĒĩÉŗŅn´éâ+pۂŽÂKä}+wCĩk-%N b¤}Ūrh†Ûƒ)ΐXāôf[Ÿ˜8ŪŲb §ŋZĶ@&iÃnĐ:}}*¸% ‘’Ä|ËęvŠmĸ¤W(9äö˙­Ohá3 ¸"<åO së˙רíáXĐn`¤v8{PĄÄx\3ulc*˙Ž‘íÆ_ƒÔŠįō¯UCž23‘‚&œ–įŒŽZ‰”–ĀläoķŠ• IÉÉéI<¸Â…Ā÷íP7f$ņŅyüŠJ–\ŧ{TČœ‘ĩqփÄ``?Fō:)`ŧõĀŠcpä°‡ 4Ųä;‘G~ĀwĨųC€{õĨ|)į+žĀU|rŦHQ“œu5cŨ¸…pBTBW<öĨpÄĶ<úÔE–4V`>\ ôøœcvsŠs•vçŠĻ´{w/`2)7ų1ą`J)ÆBõ¤ķ€u'iíŌ–98ܨsĐƒÅ/PPąÜŖ$â‘BĘždg“÷} 5Ķ–ÜqŽ:TyÁROcŽÕ"rŽpHÎFx8ĸi DŪXg˙eMUhܕ‰oRyĪųÍ:Ę0Xą?6;f™,ĄÁV<įūĩ4—•6…zŌŧĸO1ŽŪƒŸŧqFö‘ÆāsÉĮãYöŪ$†ëÄŖĨ[¤ˆĘĖËō•ĪnkJā:Œ$¯9ĸƒ{&[M(%P•Ú:Z|gljwxŠ O™8#4Õ ŗ.@ä/jĖĶ5ÛVkģ{më%ĢyrĢĮˇŸlũ*ęnŠ-î]ē’¨ĪjbNDŦSrōFFpiŌLŌ„pŧ`z}h î¤ápŖåRsP:.3ÛvHێjt˜¤‘Ŗ NÅ^ôdÅxĄNĮÎICɡųÅJ‹Oŧ"žG#ĐuĒēfĨąĻĨí´€Ā˙.YHčyāûŠ{Ä‘Œ §į-ĮåRĮ(ƒĘqÔz})ėJaˆĮ-ĶĶüõU1Ž9Čæ›öŒĘŗ0}MgKŠX-ü6uŠōa˜âeäŒgōâ­¨h•;A9ŋūĒg–˙hķ‰Āˇįū4Ļh¤ŪĀ€ęxÍ$ōgpU ĘŠxĄ_@Ņ’0>”ˆ"‚Ü ã˙×Q%iab ’ ÎF1MļÔ-ī$˜[\¤žWßhÛvŌ{qÅI$l$Ūd%ËārqQ4ËŽEPŋ/oō˙=ęx%! 3ā“‚IíEŧã ÅōÍĮ\öÍ$ĩØŠ88#<Ômu “ĩ¸¸MT?#ßĖ‚07ˇÎÃĪQɨüô āĮ0OLûԋ:îNåųH=MY¤ŒČ °õ'k2î{‰TĮ ȌUžfū÷oÖĨkŖ˛ĖUÜ.×bqÎ3Χ˙^ĨY i,ä†ß€9įJ¨îęrp ō§¯ˇųæŸŧÆĀ¸Ú“¸Ž‡ˇ4Īĩ"ŗH˛ģí8úū˜×ThÍМ ū4É…ŧq sąį§^j$˜[Âcc‰ ÉĨ%ČX›qæZi$B2Ė0qëū}ĒXßr( (ã§ŊHS—rC~$Ÿč* ‹˛116ã׎ŋįĨ2';mä@ūžĩp\%ÜÉ#īŽBíÜ:hˆË3*"–ģ<ôį5y &Œä•Qœvúšf؜mŨ€[8Ī˙Ēž‘ä,ėģŠĪAŪĻ™–(Äi÷Ęā äg8âĄXØËŋa1c gĄĪōĢJĢ$gxÛķtëĮŠĮ JŅ<‰…Čųš#Ļ}ŋVž9Ÿ-AL)U${ŌÎäB Ąˆ Îz{T‰ €Ŗ<áČLW§ĐžæmÄđqôŖyu` ƒž¯åLûQY•%˜M;xˇ §ŗ`ZV}ä¨ĖņúSBæ ėÁ[>Ŗ4čÔŖ|¤ãûûTŒ{A\‘éP $„qMV•bRv“žũ1NVpÅIʁéŪ†f1`EķOņŠŪŧ§ÜöĻHLc` ôĒņ,ūbzš°ōH ōúSĖëĀĘŽzÔm33ĸŦ`ŠęIéøSfž)iVmöĻÛ°#œ‡Æw•<.û[;JƒÁéŸJTeÛš†3īD’dŒöīQšQëŒũNiŅšŪ4ôéN™ˇo\øäú †Ôˆ”#r `c8Š\‚ÉĮ\tĻmØå”IäԜ€üĮ?õ¤!|–΍õ¯:ž˙WÖuŨZŌÁî-ʇʕPūķdr3ڏ_øŠÃ@Ō[Ámy5Ę[L"Îyũ:ZŠ-J˙Cņ&Ŗew{5õ´v tŖ•#ĶgNˇ×uM"ÃYļÕĘJō $„å˙ēČĩ…ŪĄâ>÷Q[ų-™&híĸWhČ-ž¤Õ[ęÚčÚtr}–âåg8_îSúT–¯&‰ãíRâk‰.žĪĻ4 ž7`pHĸĶPņ~Ĩާh“8•ˇ)°6…p„íIļgž*Ŗ_éņj˛]KqpΐįÉvã×{æ§ĩēŲ}ĨVŽF(˜S†'¨ĮįRÉ­ØYŪ"ĘîV#ķ˛Į•ö4ûŨfÂō%¸ĀpYO$yíԈõ; ÔZšcæ6OąõŠ–V–í1¸å “žƒÛš¯ũĩeo|OœPĒä);OÉVĘĖŨå'ą"6lŸj§ ėW…“a‘’AŠî$/œ¤23ÛĶÂ­Û6##•I-ķ ķŠišĪŲņûÂų[ŠÉũ–$Đyk´‘ķb;Ī5_jųÎár„˛“ô…÷qąŧĀA*â­%Ũ×wČãĪĪ?Ž)c{yiÎ{`~5éHíæįfâ:āÔąŸ1IdU“'u*ÃĐ8oBO4×älžŸō+EËZiÎâŒ3Î@Đģˇ =€ã֟ģl˜G4Ō€¯Ė ֑—'iÁˆÔÃķ˰qŽ8=)ęYÉa{Zi.„`?( 8ā‘œsę($ƒĩܜƒÚšû‚2)Ú§ĩG尓jŸ”'§­5ØĒ~ī#ži1’Ēx$rHį5 Mä–Y0\ž´đá ŲxāÔĒ"ǜí'œr) ķ/N0j UÁÎO5,NYJ’r9ãĩGĖ~sĪ=Å8 ãŋ֙dR™Gō§åųƒ§cŠ{;mbžFwwĄˇ¸/וKká;6K´ŅõokvŤ‰âßåˇr§#õÍEwāKHė´īėģ‰-o,›1M÷˛IÉČ>´ëOũąqŠęFíŽ 6ō¨ˆ e?JŠĪÁwÚpŸÛ“6’­ŸŗˆĀb¤ũŨŨq]g–ŽĀ•ÂúĪĨaxĢ@}nÚÕ-îü™­§ĄeÜŦG¨öĒžÕmĩkíIuHŪk¨BH<Œ …ãŋAUOõđ‚č_oƒjKæī1Äg8ëëV'đŊôZĨžŠ§ß¤7æ†äŅ4-Ü­11 ŦŪ•Š| Ģ˙eũŒ]ÚŽãíĘTīįølM¤ęŌxŽßX–[/ŨÁäm”ˇŠöäÕ+kļ_Ļ´VšŧûAäĀõCĮLüzÖڙ…líšûjy+#lŒ­ĶŠ=ąŪ§šĐ5iåĐútåųvÞ?ŲãĨHē&ŗĢŦ_¤vgûBŠžc|¸îķUdđĻĨ˙e–ŸēÔ]Z\‰Pī;XryČã­uVBe†3z!i° yGåĪãÉíÍG­Ú\Ī`âÁQgŪģ<Ãō•Ī*G¸Ísvžš‘õWŽ8lbŧļō–Ũ$,Ĩņ{UI|7âIôũÚXlŅ,dXČI w8UÉt={HÖŽŽôąo<ØiF#c‘×õФŅ5¯č×ŦŠt-UŧŲK…Ū[¨°ũ*MÂōËÄZÍÍä Ũžä"@qŽĮëščZ%œ¨^ Šô>ĩÁęžÖ..uXäĩŠėMÅĩĖ’ĒQÎ~•Öčvs[čv_Ä"ž8Âá cĄ=ēSõ~ŅŖ^[ Ú^PN:ĮõŽ.맆#ĩû:C>Ÿ h˛ã.rIúu­s§ßë7šlˇVMi”žt†GRdn0̃íXđŽëk¨ŨęļļSEz.|č>d!”žAæĩoŦĩ—Õ­õč4Ã#4^UÕŖēäc¸>”ēļ­}áĢÕ{-˛\•ZÆW1¨=X÷'ü* ė/ÚO ”ĶnØÆ&•×is‹Û8Ũ ‘ PdR >)×PĘēM∈ @1ÔcķŽJ)~×á(ôh szdÆÂ‡åų˛I=‡ŊW¸´‹FÕį‡Sļ2Å,jbq’2ĩoé0§‰RČ[ÄĒA#ÜU™Hœ?#Ļ}+ƒ´ž&‚{§uļ†S"â2OĶ=1[)47ž0‘Q–D–<Qéz}ĀÕO•XÛŲČd@{“÷z~uN%ąļ7–ēĒĖ.D¤Œ3a‡ĐT’íMSHYF Ēf`=2Æ­i ÚŪ¨7.7†_›ŽjŨHŠĘ1‚:ãųũkŊx¤‹R*ënĄD ŌzŸnŊ+ŗĶ'ŅíäH@Č=ņȨŨ]ÁVMÅv¨ũGZŧˆ¯ŽPĻO¯CųTÄlĀČڃ 1×­Ud™UBŽėũ*ߘIr_ƒœíëū‘¨ĻyHÄ œ°†yü*h.FAŨŗ¨é¸ōjD#`•ČGĪīëĮøR$y"`õĢŗš×måŋĶã˛ÔĄ„ĩĶE*4D™6ŽTgĄ÷­iw32Įp…fÜA Bœ68ö¤ĩņ—{#AovžvÂꭑ•ūđÎ2=Åaj~(ίĸC§]G$W7\¤ÄvēúĢt#ŽŲŽ‹Sš{ .ęų!3=ŧNč€ōØâšĪkÚŽ¨,.âŧŗģ†lũŽ8ĶnpH}xæē(ĩũ2kÔļ[Ø|ÝŖ?xŽ ‡ÕXxŗ@i‚ VĐČíąq 7×ĨGoâm=ĩģ­]–[e ōĮ œ~š‘ž”ƒÄC[M*ęâ8ŋÖŗ8IéœôŠ´ũWOԑžĘę)Ä|7–áļœdtŦŋk—Z4– ĒËÍÂDŌŗũŨĮĻ=qQk—ū ˇœ2+%ŗŽ Ī-Û¸ķœc°üę߆5 ŊOÃÖחËK7Īĩ3šã¯ˇ5vųÚ(¤0ĀōČ!ŸŠ5ËCâã˙dÚÜÖȲŦƉ_ÛļŽišŠî4In ÔcŠI#ĩ[˜ZT?;vœį8æŸuâûÄz´pŸ2ĐÜÄĐį’:ĄÉëČæŽXxŠđę–V:Œ1#_Bf„Å‘´ŽJœõ8#ščJ—$ũ3ĪČjū$×ô{t¸{;E†[ŋŗBŽÍŧ‚H ,ŅŠx—[ŅŪŊŗ´[y.b‹ÎV;Jžs׸ÅlÜëvíŖ\Ũé×vRȃ†y@Œ7Ą5a5kA$ÜŨ[Grč§ĘIéŽį'ĨiPŽ™īFCŽOQOÎWŠãŒö¨[ÍNžÃĨC¨ų@ɨegPJxΧ!CŸ^Ÿ•#1Y0AÕGIŊ‹QWēˇž97*­8õũ?:ÕûB& –$ü¤g§z­.'R0ĪFQŒ} R’EV*!bŖ8ÎyįĨ^Á”üÃæškN-”áÕ"y ?§ĢwÔPËk"˛ō¸WíÁĪ­(o5ØŗåS€Œš­q} “Ä—āŽÕ,ĀcéP^\Ę%˙FۀāȲđOõŠ`Ŋŗu’æ;¨L pĖ\mv'<–ââÖ6$• ˏ$)Îã×åę@ÎTœ&Ō¤ŨķŌĢųĐB¸g*Ī’œœ{SVõUBŽpsĀ Š—ĪI!ĀfË~8¨VvKĩ}˙&GĘ9ü˙:ą4Û ĻĐq“Å"I @HŲŋ­Wšqŧŧm쁴ÅV°H,ĸ› ‹,Ŋņü^äūubĻY×Í‚)ķséQÉ<ŅÜåŖû§!įŸoJ[Šä1đ ÷˜íę)HÂD7ã|cĨ-ÅĘĸ“# ŲĀbzZ¨ķģÃĩT€[æęqC0ˆ”î|ĖFH`cķĻËrÆ%ÂđpÃ9ãĘ– W{*<nœšVœ<@¸g ŸķéU$fˆ2|¤įų~”Öwc*ā¯QōņŠĒ„BŦ˜ķ03ÉÉú GîPŦpØ8?z¯*}Ē  |íÚT„$1‚}øŦĨŅm–Ũ¯nd„cämĮĄ>•˛“ElHâŪ0:ti˛N˙i œ˛Į8ëŒTqēŗ™Ĩ@Æ5$dįëI<~kĄˇÍķOnõ"MžZŦĮŠ Čü}*į–ōaˇŠn :ôéCÛÚÆØkd2˛å™gڅtōßËŸ•T`céPJvLa׸ūīN)&y<ØË ˛w!Až˙Z­FĖĪ´–Ū 'IG™UŅ›ËųNQíD0ųweũāsÉõŠåōåļŽa'åmŨÉäķQĸ퍞ęǜ;7ŊY3~ņQvė>Ŋ|ÔĀ3Ē••qŒ|ŋūĒĶŧĐ¯,ÛÂņÅk%Ã[LŌŨJ‹‘š‡$ū$ÖLzŦæîÛN‚æÖÚîÖa-ĩĐųaôŪ„˙õ毟¤Éu§´č2Ųj fđ=ÍÜn*Wääį'đŖ†-Vá|1jú5Ü/ĻÜ(™ö¨\ÆAĪ>ĩßj“]Ûé72Ú[™ĻK$gøĪ\WÚMÍ׉m/46īN–Dļ‰c1Į‚?"séG†tψŲZŪh7o´æâI„`ũå9äŸ@*…ŧšŸ†ĩMÖÂI.Ļԟdĸ?‘>qÉnƒԟLÔ˙ļ|An–ŗ–Ŋ˛Hᜓ!0r{sQhvĒ"ˆˇ‡īaģ‚Ųã–k†bŖå#2wdûU 3N¸ŽßÂqžŸr˛[Ī!Ÿ÷íņž)ŖOŊas˛=wíe<’•ũā1ĪŌŦęÚūŠ.ĢĢØYL°HĐp‡,@ę;cŋjk{kŸë3Yhú”s\[‹\oi$~Ā.IĀõŽŋ@!Đ,R8 2ylÚŲAŦ_´¯š‘Ãq3E}Ōyq  œœW|Uq-Ά–vĢ1kųÛOČ­÷‰ôųsÖŦE¨Úéú•–ˆąN­,_ģ'îūQ÷sëZ77)Híō‚Oä95ÂxvŌŪīÁWZ~ĨĘ!–I$S+rŲR29=:RXøh^Ũ__jæéėˇŲā?ëv’Û@ãÛŊfŪxZ÷U†öu{ˇ† Q’Ũđîr ````g“[Í&Ą¯é:Œv× 2ÎGŸtdåq´ÔņŌģK9ÖúŌԎXÖU UÚÃ=ˆí\§Ä'2YéŅĨ‘…ėr- aGSĀŖĮ-톌‰’!žŠF2pƒ9ČĮŊswđ‘ŒĄ‚ŌA’ĢÁ=8õ$Ë,z¤7v+$’7Ų’[Iâ8— ¤2qˇ<ũ+Ô÷‹Ķ§#Ԛ7! ŊíŌ›#Ëæ*–Âu8î}Ģ…“Wņ-Ήĩm*ÖöÕÚ1"3DIO^jŊŒīßÃ:Z/ûGP¸6ÂF*āāąŌ´nuMOBņ%Ž{t—p_!XfdÚcqëŽŖĨbˇ‰ŧM>‘Ēß­ÅĸG§Ü4eDDī ŒŽŧ ×Õ5ÍR=^;›k;Ch˛ļäŪī!įhPø›[´đõ”ˇŅGöíJP"Fv§•î}ŊÅ^Ōu=uîīm'ˇgˆEæAs4 X Öv“âmz}%ĩģĪą.™æĸƒæ63Œv늚mo]ƒÃđx•ŪŨíōŽÖ{NDlp0Ųäō;WeiyõŒЏG*‡\đpF­fx“Z6™%䁜āÕ‰ųÖN“â=OûbŪÖâÛÎļ™ 2Gm$b&ĄŨÔ{Õ}Åچ¯xĸ7ĩÎÉ5ŖŠDŖ8l“Ī8íQxNķV¸Õõųn$ˇ“˝‘•˛å=ĨCŒom|ũĢo§ZŠ7M"eG^žõ$Ū!ס"Ķ%ĶėÄ÷Qų°m•°˜ūņĮ =)ö^$žšŌõG’Ä5öŸ9ŒĮųdnœgķĨĶüGqq¯Ļ‘y Ŧ“I”IČB?„õĒą~ˇZõîĸđ›{i$Uvvƒ€ƒŽ;Ô6ž*a%™{hžŪâPvÂXË= qƒīZ÷^ žēÕnėtËXĨ€ žfā“ü#ķ&™đŨŗáŠÛníO¸ãĨtĶ00˛Ē8ã#‚}둃Åz­ë_[ØčÅśpfĻxéɨîücĐí5[âYü§V` >z{“WΊ/ –k4%ôō뎄Č0TŧHč*;Ī‹‡ŋŅĩK%†āÚŧ‰ĩˇ¤Š=Ā9ëÛĩcč^$ēŅü+§K6œĪ§FÄ<Ģ ŨËvúsë]ΈöĪ,6V-2$iyd}ŠWNM`øĻūßTĐô]^Ūd’ņvŠw|Ž~ĸĩ-|Dį]†œöŌČĨâ]áƒđr3Ķ<ž¸ąģđ6¨ö–BßmČŪ—Ę凧\V´—ļ yáûkģ'’rŠ`”Ŗ=ķéQXø–øęúĘËdō[[õHã(FyĪrjęøĻ ­ Øígyŧ„@ę[q­ÄŒI — ”]Ŗ×ŸëŌĸU‘€vuō.}‡$3ŸįN–$2 ,ĖÄ)ØyČķŽo[ņ_iē’Cis5ŧAĸ’Q€ņĮ|œĩOFÕ"Ķ<-§ĢÆōKrJÆĒ~ņÎ{ž\‹Å{X\ŧ‹$2Z`Ia˜ö9杈m•.ä¸ļšO.5”ŠE9\ņŒ˙Ö¨í|g§ŖÚÍ$7I‡jÎŅaũsÍ8]XˇĮÚ¤šŠmĒr¤cŊöOCe˛FŒÆ<ÃåĪĮĮ'ëNŸZŗInĨ¤u/xRT1ãօܯjÉ Ļđ 5SŧÔ!ŌUi•ō9RsÅVMgO“Ėž;…qÚåÁĮ=1ëøPˇđęvsEm1ķ— äã=_JËĐīŲtĨŧžedIHķ’sZŖQĶæŠSÆ<°Kî0øëúV|ÍŊūŸ<‚uļ)ŒéžūtëKûxí`ĩ“PI&~ôČõŠÚūĖöʅAũā ÷zuĪŌiukqq)ļ˜Es¨éÚ¤ŪŅŖÁœ÷?cęē°Žk{{k•€žDŽyØžųõŠ–õ!ĩ1^_Ã$Á3ŊHæŦɨAmiiãRëšI"Ļ æ'ČÁÃü䯯­YUP€œyō‚W…Æ?úõ]‹ ČÉČ|F1Įëڝ+–v’LČū§§ãJ´% ęÁ°ōpO'ŌĢo™aČų™”zNGJ–Ø‘e ädÆ?HLÎĄĨlpŧvīüęÄ•ļ–-Æ@ĀsŠK’‰0]ëÉ%ąŒ7¨Į­ oö…&hĀČÁb3Žø¯WķˆFßōc‘Á¨ŧô‘“kgđsR‰>māü§°īB_÷ƒæĪíMf įå-’sMķÂąØN0~^øŦŨ{TƒMŌfģåG‚æ c8ãŌ›ŖÚØXi^v›اy“’FsÉëXđøŌŌęâá ąž‘ā.]°gaãŠŲĶĩ;}RÁnbܨĖF×BŦ$ŽÜՁ&ČŲ˛dŒ/QīUõč´Û/ĩH%‘#]ėrqĐUčæ‹‹™w Ü`QæĄŽĮ¯Jc\'šG`?Qŧ˜š*Ė •Ī^Ÿ…SūÔĩūÕ:fŲ<ᔇn3ŽžĩlŲB.–đ…3„ØŦNvƒÉĀĨ‘‚œ¨ŨīŽ•J˙QĩŌ­dž¸R!AķRÛGŽPƒÆEÍIJ2}ĄG”ōÆČ$úk\aqōä('4ąImrrzSËēĀpp=Í( -Ž•"”Į~•lŽ $ÉÚŋ3w#™iĢéë}fwÄųÅHÎę [ȐũīķŪ• ÛĀ+ΟĒŋ‹l5SdÛųmûÕ$žŸBk3û_ûŧCäK{qæĄYFpO*HčqKĻhúĨˇ‰tũDivöļÉč˛Œ¯<ąã’j{]QIuû m‘,õ dušßČ ^ĩ&eâ‹x!ĶĨŗˇ…b Ŋ.ä6¯sõĻĮĻë:.Ŋ¨\ŲX‹ë;öū°!F÷üę÷ôËÍ+Fž+č’&3–8lįĩoĖG%J‘Įá\qmŠx„ZéōŨ<—MąãÆsŒäū´Ûß ęVžĶl!ĩk›uöšŒda}G'éZúū—}.§¤kvvŒōÛq-ļāƒúg­AqĸŪkšĶę_b{8âŗx‘%`ä`Ū5RÛOÕ.|‡ŸN–)Iē>6*nŨ‘ÎIöĻęZfĻēœ–Me=枖Ū]¨Â m¸ËsØį­V~¨|ĻDÖŖØ^  ˛ōrã[&Ō}c]ĩÕ͔ļööqļA‰$cÛ•Ī­øđŽĢdēuО{ ņŽÃČČ˙ ŋ{mu.ŠáĮ6W,ļĘ<ã唐:ūUoJˇŧĶŧcĢ lĻxn]HœŨ…ī’~¸Ēz.,^1šļkØZËö•^ 3Žā3]˙†-Ž.čŪ_!vÉXį#ĀVzøVŪX]CRāįi¸éRÃáġēŽA¨_1^@{‚TŸCí\Ŋ´÷zV•Šč÷—,îîé$HX8*G_ČÔ-§ÜÁĨhwĶXË<Á’h@'Ž=+JG´¸Ķ¯%ĩŅ<ģ­ûŊ˛Hwē`9Ēpml5{KIäšŌ…Ŗ2Čņcb>č?Îĸkģ}CÁ–zT Ķ^’ .ÃōsԟLUčLPxŪ(%RÍalķ83Yúp’ ęúbÂ˙jŪōcaā;ūbĨԟJ¸ŽÉ!ĶžMEpŦŒX ˜“ĀŽÚx †GddPŧcƒí\—‹Ėi¤Ä„(v™O^¸Īã˙ëĻŪŨ[ÛxÂŌéåũËÚüރ ’O™%ÃYŨÜŨXH­æ]–ÎQģ$7 ígĻ†#–Î=qX0(ē×s¸*;õæŗ5Ûx­ôŨ6h˙ãÜē—(yé×5bËû)ĩšËĈ[{ŗ’Šé’k2ÚXĄđ´%ŖYäíCؚ’Fņ%æûˆįf‹Ô°:øŅĻKm˙ÜEã€įi<㊂[mš†ĸƒ&‡ē“ū?ΒöÖxôø/'VU¸˜<ŦŨîĘ´lã˛]]š.&xņ”ĀU_ö°>•ĐI€œî+ˇÅs:¤!uũ8ļŌōAP8ãü*íá¸ņlˆŅFņųy*xj¯ļ#ĒßA,Ū@Į–‹´—ĐgĨ^´7PÁilŗÂ 2—Ąč=šŽŽf´iDYBōŠr?ķŪĒŧč…e(Û7øĮO­K3DąČĀÚʓėÅ.BލäÉëHQŌuãŽT‘Čæœ­˜e*ģ˛y9ĢHČVG–?'Ķũ)'?ž NŌ A#ŒqųSL^qã™Q˛FsĮ^J`[„UWv2p2+WOÖgÔĮ‡ėĩKŲ’ÚâÎGy<†Y`ŪĀfŖšYß]ˇŅmõÆh#ĩfK‰œŠ‘÷0?2‘’ŋj5KÍNmdmF]FÚÚÔ­ĶZĘcqķæīŒzq^ö¸N–ˇk3ZûČįÎOŊyî‰Ŧ^žģĨĮöģ‰-n­æ,ĶI“1ođûbŗŦ¯õ´ũ/Q:ĶË.ŦmŨ^\Š'‚? ›TŧmWCņeÅÕÄË, p‰TP@^ų¯@҇üI,ųDøÄxrËPēÔŧJlīŌŲžÚā)Œ8-Î^*[éî…ī‡tčĩ)"‘ ģō$sŋĪūÛÔ-ü5t­{+¤ZÁˇ.͙| yõ&‹ËŊVĪÍčžēoÚoo˜Eģžyį=ųéW5k‹÷Ö5´MNî(í4õ¸‰"`|}:qQ˙jjzŊņœ—‘ÂĪĻ$䴆2ō7|Î1œ{š’}OU¸ŧĶ´oí wwĩw’dĸĘáŠđ@펞ĩ äÚąšđũœšË™&–Kyæļ#iÛøuŠŽĨŋŗņŖb5+‡XtŸ5öîŪ?‹§ĩAĸjzĸę’MNi–ūŪV–9Ā*ŧcŽ)ēĨŦjš“‹Ë“™åûr`‚ŠųB’1íÅv+E˙„;VۋW ~į‘ŧ÷Mዠ`%žå¤°Ęœīp8V'§˙^ˇõÍb˙ÄžŸĻ\Įl-"ŒĻeØ2Fw´îâ¨Ũë—ÖÚÄ2]ŪH,ŠÁ‹‹B%â =ųb§ĩÕuÍVkģËKČ ‚ŪđĢ#Íĩ|ĩ8 ŽŪ¤sœĶu]~úĪTy-/åEôpĒ<¨ÔõCũæī‘Ōޤú•Ī‹ĩxĩ&Kkãbŋ0Á%ztŠ|?qĒYŲk-ŦaeßįÛ0ŽÕQ؏ƚ˙ Ūjn›áÉĸÔdû5ÕãĀöÅFĀ 7#Œį>õęËå•ڍÉÁÚŋJtŽBœe›¨ĮOƛŪ2áZhXĶ 6sËzšˆH$¸`‚ž~Z_”nÃsDJšgA^™SüŠú/žíL/## ļĶÆÉúŌ(‚ä÷8ĨRc8$`‚F9ĨFf# p8Ļ‹ÛO´‹6š„\7+Ḍg§Z›sT1#€y˙it27209ëŌĢÅÄōC‘4‘cĖ@ÜŠ>ŖéOi‚¨@zķÁęi^så+ķ=>´ĮžFĶ܎‚š$@…A=~m§ĨFŦ „)Ũƒ‚?­SŖMĮ9ĪQĪāĖdPí´uĨ2ČÉÉį¨öŠb|Ášˆ;9éšiAĩŽâĒÜ78ĮĨRŗŅ,tĄ5Ŝ*“I“ģqÁ>üÕÍĮkēäcž=Í'™‡?1<û™Š 26íĀũ;úÔįp¨ĨČ ß' OÉ*C’I=9¤'ˌ°BvŽôČØĘŊ Šd’%“iRųúsM1ĸáÉãŽ9üŋ*†h–î…˜4R.ÆįŋÖĸŌtģMȤ„ŪĮs3e˜ôęzÕæedPBĩ˛´KVŌ%aōŠTãđéMm.ÉYĐÛĀAķ,~ūē-ícˇ{s,.0Tc>âĻž$šmŧ´u#k(éĮˇųéP[YCnËŦ)b $qÆji™˜ o—ŒtĪ˙Ģ­R}>ÂcēæĖ›ąŊŊ W a8+žƒ'šAqą‚ŋĘÅp8É˙<ԑĘWRrŖ1ębI¤f‘€1ŒĮaLÖRäĄd ;vŠįō•€nTrqčERB^å[äÁ†ŪG_CN•q!V“i\ c5ęsø{I¸ˇŽÕŦ-Ú#ē8ö Ē}‡Ŋ&Ąĸi–đ%ń¤“xŅK-”2QąN‹éôĢĖQ×ÉHÆ °č:JĘ_č6Ąd].ß1ĘÉČ=ņD>ŅZ(ņ§ÛŦhūj.:7¯Ö›qámæō[›>Ūi%8%×­hCko Ū5Q €°|+ FEĶā į,yÁ?JžŅĸ’ļ¯ŲØ´XČØO'õ“­ø6Ūxb‹NŽÚt‰*I[ų†sžjM+Á60Á2_Eŋhug†$1ÄģAÆ'šÕ—ÃzCK3ũŒnž1„ąų—Ž î8¨.ü1ĸŨEom5„lļˈAĪĘ=>žÔûÍJÔíá‚ōÆ'Šˆ€\m튑ŧ;ĨČÖ¤YôN Jˆū€Ši3]És<,fž?%Ø; ËŨzô¨dđΗ p›h OlŒ–ĪŊ–H=}ëžŌ|-­ÅŖÜ‹DkwæÛ̉%ÁšėotëmNÅíoQž)~RĄˆČëÉJĪ—Ãz[éŠĨ›`öŠAČĖqCÔR\x;Gģ– fąķƒš˛Āv<ķøĶįđƙ5Áí9%K.öJũܨāã˜ūŅ[Q:“Z*ŨŨœ vb3ІīÁÚ˛Ëq4šY’1‚—ūđđj厇ĻŲęߌ.'HÆF ę ÅRļđļ‹et÷6öääHp7u*3ōŸĨøOHHŦáH_Ëĩ“͉DĪō9ôæˇ”,ã>‡ŌœĒã#qô23’LJúbšfņ.Ŗ¨MŠIĨÃoö];rŧ“‚LŦŖ1ĀũjŠøËP]/Cŋ[85 ŧ–Œ•;ˆãō­øId˙„ĒķJŧ‚‚+cp%įÔ}+?^ÅU˛Öb†ûÄWQiļ¤ļ:î“äūYĻÅ㉌:}Äē[Įevâ/5NœtúÕÍCÄMi{uee`×-mÚ.0ávŧuÉÅihZŸöΙėPËlÅP9ž:ņôŠ/īŸa<ūSLįbrIôŦK_Čuø´įĶ$ŽęEš§búļ:T=ļ„īHŲ­<ā/˜ģ¸8Č^¸Ģڟ‹"ŗÔ!ąŽÂæækˆüČ]ÃņÆ*8ŧK5ÃCkŸ,ׯ?:KrU|Ĩ÷'šãŠŊĸkVúŌ\WŠâ+=ŧƒ œÕĪ5Úė¨9Œ)Ę1äzs"•#q WĻOĨp+Ö.eÔcē°bm´ŠĘWÎŨGž‰ŽÎ}rŪ-!uŒ3ĀČ$ųN1T-üohķX—ĩšŽ+Ė,sIvzgúÔú†ąlngĶ’Ú{ŲĸRŌ¤#î8$“Ö˛ž8>šmŧũŠųcČāc?•u7hˆōrBe‚u’ÚŠ$ßgY„YÛÎNŋ&›}â+h ҤRČ-đĶ´Q˙ĒúôįŸ¨ø˛K;8Úūú;Į d Ÿ“8 {Ö˙Ú Fd1†Œ„`ƒî?*kĪ*Z %œŊœeøŽZûS]?Įp3Ms$Klv¤ŋÍČĀQô­š¤÷K+°Y$b äqŽŧUÛ}sMŊuˇ´ģhÆNHĮ#'ķǚv¯mhڕôúĄ¸…[>Xōũ>ôŲ5¸5= g‹RK Ø į?sžƒÔâ´ŽīíėĄíW1ąš!ĩČåŊđ*ĢØ>ËŗwŒ|žfp¤˙>-gOšÔ#ˇ†t‘Éų¸$ņÚ¤¤Wt$ §īgöm„™Ų÷ÉŽ}k1õk[^M?ĖIS’Gŗ÷GŊeéúŦ‹u}o¨ŨDĸ؛€Qž•ĩs}ĩ˛4f0ŸxBŠė}3P>¤˛Į ņʎų˜?ŸŌ’-R9%1´ˆāĘ^O§áQE{Ė‹…#%ˆRŅīRĮ–ˆļ7 ƒ‘ü8ëÛ¯z†öK¤–ÛėōBˆķL}ĶéīVÚâ4”‚č§‚°$;URø!ŋˆ&'ߍωL šmŧŠĮáĶķĄîĸ.Fķq÷Į^{Rĸd牁q’0çoķīRŦcî€y-õ¤ ĀÉV^N[9˙ëՄ@įtŠĪ č¤ūŸ­0Š™HķpC<ŌAFN×a&pG9ô4õXÅÃ]€?6Åõíõ˙ëTŅ,rvÎāß.ķĒSžān9åx­JŅÆÅ|U˛@cķsW#ũÚæ@ŨHVé^gÍc–8Ú:T˛ļˍ¸ūTô‰Cʎ@?4Iļ\uČûĀ Ō3m‹‚Ģžœōiķ9Š Iār)¯2|¸ã#uĻmW‘ķcīdˆāâQ‘ëCov‘• `:š‰ZBˆŽË“ԏ_Z˛' $ķęhiÖ_eėAëP$Š“7›ļãQË,RD„F7ͧáVĄ”/ĘUņŒœĶDĨáÁNAĮJRå3ō’Ŗ§|ĶImÛÛ!ŊœtíJ$Pœœz:ÔrgR“'¨éSGģĖ /ŽjG œ†>õ „d)ōci5UUŧÕÉĀĀ^yŠŨ3ģ8éÜÔÛÆcUE ŠwËå~ėät)ģ™eVrY‡@Í[Č' šāö=Ēŧģ\€ŧgû¸Ĩk>‡\†Ú;yôë¯2d•ä*cČį#Õ+-&÷Qđ‡ĨĶÂŧöw^xF}ĄžcÆ}k@hzÍįŠnĩ Û{x­î­žÎĘŗ’ĘáɤҴ˙i–_ØË ‰#Ŋ/÷Ÿîã$Õ÷Ōõ%ņŧ:ŖÁæZGiäÜ719Æ{ÖøSW¸Ņ5 w„Ap÷˙mļ%ÁØãĄŽšĘëV–$›[ˇļĶŦĄR&ˁŧÌ}fąü  ĮoĒjWŠ0žĘ B>`œą ĪÖģ\$•ÆsÆGQ\ļĢĻjø¯NÖ ĩ70C#¤lÆsÎëëTu ŪëƒYŧ˜-ŊÍÚ"[ÄĮ;B~b;’;tĢzLū!™m šŌŖ´XJųĶŗ+oŽĐ=J˃OÕc—ÄėÚ]Îu|€2zŽ~oqT§Ķ56đŪ…fē|Æ[;…yč ÷÷¨uˇßxģQ›KÉķy2*į#wqŸ§ĨvžēŠm V+gĩŽÕĖ&&9åzō:ÔúœŌÛY]ÜEÜJ) Œî9ĀũkŒĐáÔ­YŪm.å¯īœ‰î&L$h}9čWŅbžŌc:TúÚŽCäĖĘ<˛y$ÖĻĸ—?đ™é3Ŋœ˛Åk—4ąDB#{sC[ÜčŪ4¸Õ$ˇ¸–Âō0ģ RZ2Æ@úTz_ÚôÛŊgÄ gq$s:Ŧváq#˜ŽŨk¯HMėpŨ•h™°Å\`¯ƒTĩģöąŌæ’(åšuL*ĸ–,OLã Žr×Âö˛č 4Ō^ĩÅĖe§]ėŋ1ęJ÷ūĩ•ŖÜŨÛøOQŌîínÁTqlßgb ŒtãŸįNšW—Ã~…mŽ Á:´ĢäąÚįĩ^´žŸBņ&Ž×—ÃzVHĨŠ2Ü ņíéøUĪC(ŅīažŪxY§iš›AcÕ†(í,š SŌ¸+ 2Uņ„ÚP`ÚkJ/ö¯Nø_ûë•WO°éēŪŠoĢé“OįÜ4‘Hˆ[p<…ëīRë{íNƒpö†ÖŪ9ÉōTnō—#¸í[kŽ[Kâ(-6ÜĢÍtgRÉ=8­†0ÚÄ)ČÜp õõŽcR+eã›K˰bƒėÛ|âÖlžĻ™kĸ6´úíØ„Ĩ­ā F aœ{gúŅā˜&ēyoo/kŲQXœņÔ˙!øWckˆĘ“Νsž™úW-Âhū8ŧ“RcSÂN8#ķÍsƝu¤ëonY˙ŌČ´y<˙*čtit+NÎkAw=Ōō ģ$cŲããU´K›eÔŧBÆXﴌT–w^G¯ÖąĖˇÃԏĖQ šûšäōĨh”ˇ1Ōü¯/i‡đŌĢÚē­ŋŠ=„1lé“Ȥŧ{i< •23ÆP23“ūM]ŗ‘bņ†ëŨ =ĸũ+÷G˙^˛%„ŧA,e °aˇ#‚Ųíī×ķŠØAlŪ–0Ą‰™é]j^Ãq$ņÃp’\ÆNøĀäTbÖ'WRcÉܤqøÖŗÅ/$v‹ ŖfO~1zÎ[h& šeI$ŒąF#‘בUäyÛFŽWō ÚpėĪŊLmmŖ]F19Ÿ÷eÛ ƒØņÅT†Ų#đ䗑FDØÚŌsĀ'ƝZÚZ§ØŽ…üyP¤q[Øā×@f.â$(GV9ūˇƒŦ•ƞYža(ËFũzŠ?—mws,čˇ6’OĖŅũøČ=+­"ŠJŽq”sÂ×7âHsŧ››æ.¸"¨Ë Ķõk„ˇÛlg<ã­KŊŧžkÃ&/CîgæČ=+Ĩ°intˆd’æ=Į=ĪŽ*ĶHđ{F8ÍHÛV"6°]ß3sšĒ˛rLQ–ęxíīJިˊîÅžV'å<÷üĒЄlxFH'üúĐ$Hĸd2õ˙=h’VFÜvg§ųâ¨4.ĖūSíW,ĖČ:}(rĒådˆHÍß0í^Äåcˇfc´rzÔk)|F@╤,ŽčXíāåOPĸMŪQ;xËSĸ ėí#;ˆ yâ›;ąP[)ãå÷Ĩ” ʨlpGØØĘ…ÉéN ĄŧÂy|u8ÍG1ā) “ÔƒÍAĮöl($’HSRÚhTįkđ=Ēŧ°yĨŖ™ÃgžjtąpĐdžØéA8Q!ļg*G~ôėß&w?ĄéRũÕ!ão”ņŽsLet“iÌŠéIČ#œdģ„čŠĩ—’Fyôą v‘˛sץŠJÉ4‘•Xc­5¤•Ŗ •ų-žiĸ2DAX‘’H5bŽåųÃ|¤ū>Õ*ėHˇĒĀp_ƙ23šv‚ž”d"ÃܑÖĻXšc乤”ļAÛĐcœĶŨ† ĸĄžŪÚæ‚æ4–6ꎎØ5vvÚm¯“inÁ÷ŠF ʙquģ†Ō!ÁÜ/\Ÿ\ÔĄŸyÜß&2×­-ŊÍŊÆã+2ppsNmpœą'ãü˙:m՜Wv†ÚņhŨpņ˛ä5Gœ6ļņÚ["G ĸ5ābŦÅ8 Ø75đéäŒÔ+,‘€Þ{ú ū’biäÜHÆĐ9CånMĘÄw4ĐąÍ ä¨@rsÖąn|'ŖŨ_Éw-ŗ_ ė%+ŋę­Čmí­-– xÄQÚĒ‚ĸ6˛î-ęyúRH@-N=GLš‡h(S(~f=Š".Ũ€ŪŸĨHĒĮ 2œräū5Ŗ)f^œtÍX•ļ… (Šl~URk?‘“Í8Ũœ1ׁũ*GÁ€Tp9Įĩác2|ę28ôõ¨QáȐ(@æãŒqR)‹rR~fÎwqGɏ(9“Ÿaõ¨įŒ\ÄÉŊ‘@ ā⌜ëšĖĐ´ģM Yvŧ“Nüy“žNlū5Ĩæ,’'žūôĨ„¤€Ė@Į_­eĨŒ/Ģ. ûå!JFšÂÆOß8Åhcå;ŽIÎA<}iŌĖОŽÂF7{ÖvĄ×ļqÚGu-ĄÜĨGäuā{Q§Úŧ[Gn„MÂBĮ-#rOšūuyUTÆ:H9öĄâI\<đFĀ’`ķéQ%œÅ@¤rĄp§4‹§[ÂĮQ3Œ‘÷ÎĄK VļÚÂ$8Ø?oömˆˇŠ7ˇ…×?ēž=Š&ĶŦĄO3ėp–_•UĮšĢ•Ŧ ėl!‰\žBH=øT­Ļé˙dEŋ–rB˜—~•JūÆĘâ4ˆY#G ;T¯žŪԓi–ķŲ­ˇ‘ÅÉT •[û6Ę}‘-•ąXA]Æ>zöüéļöQÅĒŪ_nPō ĄQ1ōúû“V|Õ Á†r1Œį?…SūËŗkÄŧž’CŽGUābĄ“LŌãWxíAG8u yúĶįĶt÷Ķc…­@…+'#=yę*Ķ,á´6ÂR`熯~§Ŋ,vvöķA%cčûÎUēôÍÚFŸ`ë$6ę&aĖNT{dĶĖCˀ@āđx$ōj "Îíãk‚Ų_š‡#ßđĒĮHĶ’äų們ōą™8c×ĨkFĄ0Ę;1ĩz`}k>ūÆ=JHÖUsŗĻ×ĀΝåUáŌ`û[\ŗČŌd–Čú_Ĩ=|;rģdō‹îōˇá3We—ˡUŨˇf Īā?OV–6Vvāci=ŊĨJcŽö”įž¸íĶųT{Q`22ĒrW¯4Đ7FdV, õĪô§ƒĩ|ՍŨ>÷Ė{gĨ;΅ĸUšF?>áë€sÛōŠKâEi+†'§JB+c¨\ņ¯Z¨m sēE%Ŋxįõ¯TŌD­¤¤ˇ×jî"FË;sĀ#qX:=ūĨâ™.ŽíîËNŠFŽßdAČęI=^ŗÕeĶĸ– vhĖžq[sg2ĻČQ“žĩfOh‰h—ĸū$ˇy<ŧą#æˆ= Fž4đúŠ—ûVĨö´äé×­I}âmÎi"ēÔāķŖ•ØTßÛD“[…ŊˆŊˆûëëYúŸ‹ô‹.+˜ĻÃ$Â"äĪ<öÅO6šĨZ,bkøãܛ”F8ú~4O¯hÖ_ēŧÔ!IZ0ÛY†p{ĶõkĨéz„PųŦ‘4ŠāņšÅĐõWPußÚ­nėĻíRhi uõâļŊĨKyötŊ„Ę€ņģw¯ąÅCeĒÅÖŖk)f`’ÃÂ7'ī˙ęĨ—\ŌãĩŽGÔ XĨæ2d§­[‡UŌîtķ}Ü/mĘŌš5kšsÚ´ņŪÂÖņŽÁ‡Ę} \ąŧĩŋ‰įŗ•$ŒœVŨ“éíP^¤ŅÛĖöė‚tRSxĘį9Ŧ¯ ęwē÷†ŽĄp`IdÜąĒ)Âā‘ÎO=*ļ­‹).u;Ģx[Īx‚P;žMj^ęÍĸIsĨŪŲy‹…I%—ä<‚AŠĶPĶÚ _[ą‡á–A„=9ô¤žŸŅĄž„ĖøАdƒĶ´“]éņČņ\ŨÛŖą‘œ“ĐcŪŖ]BĘhŽÚō’(ËmķF˙kž9ĒŅøŠŌôûMVęÜ]Ū!lÂĀĸŒg9=Ŋ+E5 -’â;čCėæ7ŌŽud.§ 3Įj—,Ár0¤cĶŪ ,ˆģœW¨øŪ+[ĢŠlá†xm%Ų!yÂģžåž*Ô^.ûfŊiĻ‹š.ša¸0Ä_  ũsÎxŽWÄÚÄWvš6Ģn.ĄŒŪm` žxĨt:‰ėõGš‹Ë¸†ktŪŅŧd;/\ß˙¯T´mkHŌü?%ÔÉ™ąįäŗ1=¨uÛ_éÚĨ¨V×pÛ4€9(Î#đĒŪņm¤Z~›itŌ´ŽĄD’!([ĶwsŌē֑•ÔŖšų@éœ÷ŦTņ:?‹[Kû4žLHá'y=~˜=j{ŸéąÉ>LŌEÉ$Ņ!(čHü*úJ—ŦĐČ6J›Ŗ“9í\ļˇŠ /iæ{ŠMŗÄí$ eK €sÅmÛx‹MÔ-î.bœā˙Xm1ūéRéz֝{sĩŧ‡s.õYP¯˜ŋŪÆ Ļū$´:Ą‚¤ ԘUÄgfüũÜã˙ –įÄuÁ[‹ŧ琅$ ˙xøÖ‹ÉĒH…Jœ7¯ŋūĒÂÕ|S›­A`ųĪŽ×5B]}´ŋKÍû}‹ėûÂH8RN@ĀÕûũFÆãD–ęÛTKe”ėŽaüŠU‹fĪOŗ´†æõe•âV,FwŽ>÷ēSŌF–/ĩ++BB˜Šą;=j jÎŨöOt‘;Œ˛9ÉÎ)!Õ,įVš;˜$‡~L›đzôŠaÖôų–Úō&“Ë.¨8õ¨áÖ,/í–ō6yđO¨Ŧ­/Ä=QĩÔ¯cû<,ĸ"ā(đކKË1 Ė÷ örwāŽ=LVMö¨æÆū}:ę3å)(āīJEÖūŲŖÚ-Íäm{(ˇĸØÚ]ē=Ôā+•ā1œöŽLöΏR‡Ææ*?ĪķĻĀ‚Xb˛ųdã#ˇņŌĒËūŠ|Å įī“qõĨR‰IŊN äũãĪ§˙ĒĄēēĩKcpn|Ĩ°AÆ=?¯=ŨĖÖ°ŨiF2îÉ@Gķ´étŲîŦŒ­$ۍŲ #=iĶÛjŖÅ:ôúk›uâ0!Ũ$`Œ†#×=qYWžÔ¤Vģ3ųwZē\ųrR5ÎK{œô§ßiĶCâą™9kˇė˙ģûØÆHôĸ Ö×Å÷JÚl÷Ú\hbH÷Ūū”[h:Ž˙ÔæŌk¯˛ųÂxāŒeųéĪZ‚-#V>KŸĖ‹W r™ĪņĢW:t‰âMFKũōúôâąųÜ|šĩĻ~ ؤÖbŽÃËl!(§¯SÔ™ŽŗZšâ y­-ÄōD2°žwûcŊpŋØķ\ø’ÚãAąģĶÖX¤ûhxĖQ‚WƒÁ9ôĢZÚ Ķ-´ûÍqsb˛¸dų@ÁåņíXÖēmõ†ƒqsĻj[Û,ŅĪA–D,Ų €AÆ*ÍÆŸÆŠ-ô™áļK˙8Åĩ¤(ž­×=Ē ,õƒQž :áĸW[ŋ#ĘeķĸŨ¯5w]Ž[ø,õ Mō;tēI.¤Ōáqģž+FÂöĶA˛’î=+PŠŌâuV2n23÷ŲIāgķŽēņ°:,›YŅ€-ôĮõŽ'Âw¯Ąh/Ĩ_Y^-ÜLûB@Î$įå cõĒZ–ņ^ōwxPĀŲ!ŋ jÛęš[čzĖ}Ėé ˜ĩš„g?ĪJš¯Ļ­Ŧi–×ãK‘Ōé%KYį‘qķ^Ū™­_Í%îŖ–ÚĶĄE&Ieˆ#1#…\v÷Ģž&ĶfÔô‹ËH‚Ŧ’!ÚAĀĪa\Ŧ‚{ßGĄ­Ęę$,U\0ų‹cn8õĢ0A-¯lËÃ;Co§ w›ÉmĨ€éœU¯ĢÚÃĒĮ$BÍvō)’2šSĐō*îŋĨO@ŧĩÉČBĘ͏Ŋœ¯ë\šfļ֖Ō™EũÃf\ļ2ģA>Īã[ž ´6cÃÖ(Žëo:3lRÛTpOG2CãŨNáÈZÛbɰ€p@5ƒk ĘxfÂá-åYjiĸØsˇŒ~­tzޝk¨iwķZŲ>Æŗd72DT–=qÍb]ŧMáŋ ÂUˇE:™T•Š"Ŋ5a†1Ķ=që\“:ÚüBԒ]ŅũĒÕRÚNæĀÎŗô[‹{ ßé烘ŽĐēų.eŨĶŊt>ļ–ËÂöPÜ4‹(ˆĪQ“œsYšą†ĶĮZLˇ'd +ģ($ũUŸÉˇģņŗmjˇ&†5 ”™¸ûëTtëØÛÅ:-ÛÎ%S#M¨‡ zdRAplîĸ¸Ķ&Yí.nđú|Ø/į¨ž´Í/û.īŦuÖšŽāNĖŅp%Ļã¯ôŽö֏Kļ1Û´(!QųdčJæuƒã]iäAGË7Ũ{úÔ3=ŧŸĨutxÅļFæ9Ŧ[sm˙.ŦDũ¤yiģžĢĐT÷EģŽęÆę8îĸŗBcoģ$xéĪ~+ŦҤûn…c*Bö10;XĘÂ|ocį@‘ƒ$IŅŽN:ūļ„kZä"}…mˆ“oÜ߁ĶļsUĄĩĀ&âŌk‘4Šƒp]Üķ×ĨXÖ^Ú iæĐ'ž1Áî8į˙¯RiPZK¯ëGRØĖ¨ŋ¨äķYV…môˆ’x^Q5ŪmąTî}šĢvŦVķċ,ą4†Ü˙Ģ)8=*ŧö–cÁļ“āo€Bƒæ-ģķéZvq˛øËk€Ž,rųîØĪŊbˆ||ÄōˇĀäU™aCŠčžliąŖÁƌ0ÅMŠ)đöˇ,ĐĒE{nR=Ŗ#yãų˙:ėt9,´‹{d –<Î:ˇR:åĩrķxžŪŌYŖŠ$˜ŧÄ sÛ8Ē7– >Ku$˜‰Ãˆņ… AãŽ9ôöĒrKiz„rۈŽÁRËØõķŠĩ’/ØÉŦmæ&âšČëN’ŲoŧNb}áZä3“TŪ#Ą^ÎŌ9–ļÄwŸ”dtnņÄĸÁL4ūH&‹ĶŠ5DģÍቌXÅ0ÛÎp=?Zģ|æ-.Ö‰2ĪÉäņÆj֙k5ĨäąMuׄJO¯ŋJؐ˜]"‚2ÍüąŠĨ’9Ļsž9˙ëVN‚›´ûÂÜâAę}ОÛE.ˇ|¯#Įļ WË8ÉÚ*ˇÚ&>Ū&‘]eە?x{ĶīZh§>y”Û˛6#c`r@īõŽ–ÕÚK;rŽJšĀëRÉŊ+Ÿ˜7*}{fωžŽW*è=G¨Ëpåŧ˛!=ÎĪåNŽYŒ™’ŧzõ¨3<Ņ<Œ…āāžøĮhš‰pH¯pr3úSXMĘÁX6¯_|ą*Å\cũ͜œÔ"ŗä6ėq—Æzũ+ÕA$Áú~5™iĢÚßęZ…ŒQÉļ%UĖ€c$g#šĶˆŦ7PAĪéR)ĸ'8æ”ĒōŽœgŊSM°‡U7âÚ/ĩ:üōã jūCĢ2ļ}ČŦ¯íëŽÉ¤y„]ŦaʏOņöĒzĻŋe¤kö2Ãs$×+û‘gqG_zv™ŦÚjŌŨA›ŨšÄąH 2ƒĐũ+ZŨ Ώānã“Xņx‚ĶûFæŌŌ ‹š!âSePúHöŠtÛč5XϚÍĨ")Lo¨PŠČ ũEZh|؈•ĀŸëPIŗVÂ! ‘É˙=*Hö‰vÆ2Á€Ē¯­ZjΤÄo#„HWn†{ŠŠ'ļŠxåUvŽU* =Ž*-KU´ĶŽ`ŠágyîTíXb.xÆxZ΃Æ:D҇Cta3|Æˇ`ē`œ`sŠeŋ‰ôCUąHÆVÂZ6]øūéĮ=*摭Øęâfļ—tļįÄTĢ!ô ũ)-üEa,7~l‘ÁnûĨ“ :Ž{æ›7ˆtõĶ!Õä‘ÖÅąĩÄl}z€8ĢzŨ…Ž•ũ¤ffĩ˛"ëĐņÍj6šU’ß\\ųpIƒûÅ!ŽėqŽŋ…kJD›`A8ôĒēN‘a¤Ã?Ų`1´­šŲ‰bĮžįņŠNEĮ˜§Ø$mû­ÖŽH˙ģā/yâ o0Ą•ķ‘ĐbĄ˜V*Ũn=*E@ĻA’č*9Ã*îžßQQ†CŌO¯­*ĄU18 ‡îqDQų\+R2 vúR‰2č¤ä“œã­>ü@(\cw|ԍbŒcž~•6Ųąōáx=†)ÎCF ’;úÔiČ$ŧgįdRBŒcƒĮZŠQŊÕBņęŨ FöâL ;žĪĨ9bDEEęsŪ ”"Ę<)$sׁڤ•U]vU— įĩ6EX‘N6!ƒØĶŧ˜Ø€ÛJôéĨ#B ¸ ”ÁãÎ?ũtØâęˏė ã‘M¸‚6*ō JxVôŌŖ’™vņŸP}iŽ"”e×j§ŨnÛŊ)Ū\%Gœĸ@A ¤sųSJ(Úrļj ƨ†(˛Ālûš¨ÍšÉ4’ˆ#ŨÂāūtyV˙hŪÖé$Ŗ€í€Ę=*ĶļėĒ€Ä.ˇōČĒrĒų ĪmîėV\•?ãLm>’vļ‰gqķnŒÃĨ2="ĐČåŦĄÚyÚpqéQIĨXėí\į(úcÔÔöžZ´‘„ã3qÁôü`ęšķ_†öVļ’Ō$ōÂH>ōķ’}ëgû6ÁŦž´ėÄgnŪā* kK{Q’šÉĪ™§ĩ”ö^ĶŧEíėīŠk¨žáˆtã#ÕÕhVņY­ÍÕÃDú¤í-ŧ2JxSŅ@>ØLņ×ÖĸöĄgĨjQ™dfĸ–âC v…¯Íßŋ5nEM7Åú„‘ßHˆēFņ4‡Í)ķu÷õÅOá‹ûÉüH-fžvˇ{%¸sĖÛąģßJíŽ-âšán,j@~āN?!\—€ ŠķÃ7ĐĪÉ^Éà ÷ÔĪ ˙ˆ­'vZS2‡Čųä<_`xú×:4ģĢoļø—JË\C}:Íxš į?ˆ­]C¨xGXē•qĶO")‚E"ĒËđŽŨ*a@N?Û‹ŽÛ^øRÎm#æšŌo°mœõ‰ËTūU'Ž.Ļ“Í†æÚé!´hŌÜųGc‚Íģ§Nãë^‘c,WP[˚ԘÑNáŸ\ō*ā_)de>ö{šoČČ70ņͧĨ?c|ຜsė*)dŲ…FČįīW §ëúM…Öŋ¨‹k¨dŠAö‘!Ũš˛@ 3Į˙^ē=#\mBymžŌ[k…‰e˕!Î0A>”Īk’čēÅĖp<’ ÂĐSí\Š/dšđŽ“}<ÛēÜFŦ ĀpFIA÷ŽžËÅÖZĩųĶ…ĩĖ2ˆÄ‰įĻŌËę*)ŧa§FģĖWĪ’nB~ė6q×?¯JŪōÔF_p*S!âš(Žĩšf×&[Iš@™˛ŋČG`ĢëÔæŽÛkƒJĐt˙ļŲ]%Ėš_+&Y ’ŸãN˛ņf“t.ŒrĖ‹l7Jķ!P‡=ŊOgâ‹ģÕŗa^*ÜRÛ\Eô&FSļLđ}qū{T­éé*ĪwHˆI¤åE7ûWO6đ^Cä4°#éšrkV7#-ÜM 3“î‚:ûT6zĨÔ˛ kČfŸĻ7ĶåŦOøš;ˆī†ą{—í DœqŌĨ×uk­7TŌ#ˇš?ŗ\K†rHŋjÕģÕíŖM4h_’>Ō~‚Ļ[¨íČWš4ßũæŸjŽ]FËÉ3}Ēƒ8yŒéšÉÖ5KËK(§Ķš IÛÁ<÷§ÛjŌxš[Imf!ŨĩFYXãƒîNiX’{‘ÅRĶĨŧ‡Æß`’öIāks.×P0sĶŠß™Ö)ša“÷FĖÔfWP•;œē3Á§Ŗ""í ŒrOQšŽdPÍ $Žqõæ’k‚’G*!“#ĐŌŦ‰4ˇ$‘č@õ÷튮÷qŦޝĒpŲ<æ–YÕpE8;xĮzœ,>dx ʐSb¸ķGŨ•9ĀëÆqøÔ“Īä íséUŒĨ›v@*0Wƒ×ք¸ÜÅÁpv˛įĄ¨ždîmÉĐ9íU§’8ĸ/ËP\ļiĐ8šÕÕ¤}ėŽãôĻ#„™‘n'kÁ˙õRŽIØÆ2p #ŒRŧÅļĸāsHeUr ™˙Ū‰e’ač*åEs lX.rOoūĩ&všÉbzˇŌ­Í$ÛUB ČW‘Š„Æ ˆņŧgærqíũ(ģOŗĄAKc=sš|SŦVŦĄvô z}(Fũâî š‘ˇę(Y•nL/ķ)\t=2ŠfũÛ(Á@ŧnßJ˜‘°’ĖĘĮŋų7›f‘†UÔŗ¤FRKŽOĻ?ÆŊ čšTŒí&jdfŪī䌖KU𾟨Z´P´•Ũdy#‰~rFāG#ړMđĢĖ÷ ÃK”˙¸TB3Ÿē¯­_>ŌŖˇliր•āD>eÎqĶĨWŋđō\X%Ĩ­ÃX؜‰Ą‰ĢŠęŖĶđŠ¯´+;ã§,ˆvrEĮ99ė8ūUoRĶm¯í›tž0så˛ädTŲZŪZˆbšØ*…ÔÅTŸÃZ i“Lļ]Ŗ ġéMšđū•6•5Ĩ­ŊŧQMԈrGséšĐŽ;{X ļ‰ˆTj&9 UKßč÷7qÜËhž{ŦéÍõĮZm{Ձ^Î-øEÛƒÖ̧†ôa 1ĨœKäHdˆ.p=•?ū}KYa{Ũf“͐dũáĐõāķR¯…4E†hRÆK€<Õ üØčJ¯oá] 5#ĩ‹{Ãå9$’Töæ‹/ é:mÄS[Ú*\D6$›‰;Oķ­[ˆc{vI7m‘H!XŽšŦí3DĶ´Ģk‹k(v$ŋ}DŦ~§¯JhÖ7Ζ!eW,Íc´ũ ­KÃJŽXí!eGmĖ­#8ÉÎO$ŌÁ4ŲŦ’ÔGÄą1]ĞrGōLJÃZ[iéūLĢfz ™˙Į8öĢZmĩå˜ĩēA%ēų’r:sœį=é÷šužŠbm¯#ķ!Č;2{Ž”GĨۍ\ęJ¤\DD†8ÛéŠÔ">˜Ž0FÔ“•ÁéÅ(Rcq’: †^$!‡ŨmÁzū5åí2øœÜé÷Á=Ę6Ī)(_‡ČÎk_Áą^Zk—6–ĶËwŖĮ*ķĄû šÖņŧĪáA ŒĘ ^v‚ ūFšŋjßøCFŠæų."ŪĻ6í_˜ũ9ÅYēd—â ÔôĢōąŨÆeY"ŧÄôĮ­_đö‹¯˙aØŦZ§Øļ'0Éc’I}ˆâys_t´¸šÚ;FŠFnî*ƒNķüDÕCŦrH5—lökē՞šsqle˜‘‰,‘žƒlRË=žŸ­čRÉ ĐikˆD§;I' }3ÁŠ–H¯|IâI,Ũ$ė€Üƒ œ˙#XˇđéĢ: Rä##–äúVÃ\Ã˙ Ĩãj—˛[Å%ēiUđŦ˜õô<ūĩWYNÂ>^ž­–øyNKú•öâ´.ÔAãģ5˛EI ƒ´ !ąŌĄĐ.tIü'=ŽĒWΊRŌFįįwŨÁäžÕ¯Ū¯OkiÖĄP .6šáŋ™?zkĩœņŒE A0=†qYˆwKsm QlVLÜsZČkxĸŌüLYŦ [÷UpyĮōĢúÍ•ŽŸāũ"khRv‹ír"œēã8'ëšĶņ%ŧk~ŸOLgÆSēpN}GøÖN‘§é÷ZˆfģŠ"Ë<›deåp20~ĩKmÂÚøY.>ų‘ĘîôČĮ銚 xĩ-GY‹Pžō%ķŠę¤ė0O#ĨIsicq¨ørŲî!fhüŲƒ"ƒõ-ļ‹ĻËŽøŽaļˆ“˛Ŋqõ­Ÿ.īi¯#åTšRĀ|ŧ‘ĮĨl‡RŌ:¸Lļr$ôÉü?Ĩsž/™§đŧäÆīNŨpßũzÛē@<5) -[Ÿ–Šx: ū´mĘ[9ōk+JF“ÆĶ~POŌŽōž"oaŌÒ~ĩ¯$›•Ų%%YˆÆxüę8˜Ę>O‘ūędäTQļÖeL—-‡ü…A:ģ@ÂVÁ`B¨Ī'>´Čf+~ėŧŸķßųÔŽEŦp‡$´­€T~xǎ°É9‘ÃĄ°„qõÎ?JĒVFĘĒ’8‚ ˙õš‚VhÖHÎņ“Įæ•E!1R’,¨$Ž™ë֞§dr>bN[‘íQ>Éw8+€8<˙õ˙úõ ąÂãi?6y'֖P~ČɸŸ–ɨ‡™pZ$Ė„võö&“'Œ)= =zū B Ūš-’_8Ī×­IqnH”7ĖAĨš"(‘žW¸ôúÕ<Ë#Xû“ŒŒæ•Ųe)#n…víįŋsHØļMÛSvOįĨOjŠ}íŊG°=jæ~Ѕ‰Ë $•5“d¤mÁ\m˙äŌNDÁdd;XņĮTQc1y䑒9äķũjDœ<“:ũëÁõõéQÁ DÃa-ƒœÃÖĻ‘šIšÁšÎBįŋ…"ĻDcĶĖ?CL‘|ŗ 7tųpJ°JÜšãÔZé[Å•ž‰a­KģØ]ÎĄU;ŅI įûb¨Üxŋ\ĩ]Væ;[3oat"u,ۘNĩ{ūŊbÍĩx.m-ŧûKAv›íÚ{÷ĻÁâ­b4įŋĩļúœ$Ābf;_ŗëMŗņÅô֚%ËÛE˙†Ôōá°üĒüOĢZjž"ŧŧt–ÚÅÂŦC#đ }Iæĩl|EĢ\ũĩ.tŌąĮjfŽaąģĄ,?QéV|)}Šk }{oV˛Ļč|š lä‚ÖąÆ¨CãIOÚeĶĸû0ŋ6ŽDĐŲíĮJĶmPē쏛LĶ–æÖŪä[¸‡fū&ĐTPxÖIŽcéŌOl×Üē,qŧņŒgŪģ P6!@Æz× â"oøu\`MŧJFÚ8w5ą¯ÛFū И¯ÎŌČ=Œ¯5‘7.§eš]1’Ņ/>Å$‚`Hlöæ’÷Ä ŖëZåÄ:d’Kn!9Ÿct`¸ĀĮ~ķÅËd×´hâX•$I8w~BNs銁üjë¤_Ü>žåėČÜĒß+ŠîĶéL“Æ—Š–‚]8[›’|Ŗ4Ę€Pzã‚r84ËŊdzՆŸ0ŧ6TV”„ūŋŦũ+Æ7įKĶŪūÕYo§ōüđāų¸ČĮųÅv:>Ļ÷đ]$¤qNņ#nŨŋoũ3Y2øœĮũ§5­ƒ\A§ļŲäČäíņŪŗ'ÔgņŠ´ûHÄÆÂ{O5|Ќd䏟ŽãĮÖŊ Ą F÷äŌí(ŲÜqŽžĩģà ˜tŌ¨ÁũsƒŒŸzˆRw.Ō ÚsÉŠÃī\>cFiÛ  'ĻGJklo”*–æ ĀbqÃŒ°Š#hfÎGQ˛l ôĀëI"Ļ˙ŸiÚ?ˆÕi„P÷@ ãTpŦQ (¸SÉ€ãRĮHĨâŠ48#*ŧÕf„īķáČēĶUÜĖQˇ.HÁ˙?Jtļ6§40–cķ1Œ?J!ą‚ ZDļ‰f9>h@'Ū–K G -åŧ2J§åy#Ž{Tw–ö74w1Å:Ō@Ŧ-3ÃŌéž ēÔDđŧW å˜b‹nĐįÚŽÁ¤Øn ē}ĒîrÄy`įĐôĢWZ}•á qco0LŦ{㠏ĖqI&—ep)ė­ž4áâ/°íL]7OW†á4ûQ2˙’7ŒtÁí˙ęĨMM{é/>ÅköĨ|—ōÁ9ãõ÷ĒvÚ-ãkßÚ:ÔwkskŨž^{ŸS[SmÚ0X}įŠå[Âw^+—Vš†ÖK9FŅ’XĮëū5ˇqŖXKgöVŗmķÄeFŅīŠ`ŗĩK/°ĩŧ"ÜõEFŅĮĨš~›Ļ•–4ŽM¸̏č3ĐT3hzQ’I…ŒËađœ1÷).´}>ęâ+›Ģ@ōE€„žž˜æĄŊđö‘Š]ĩĖցåúũ}jy4].iāž{dgB2Ą1é‚)ŸØzP{‹„ƒÎ‘č—õj[;;; soioåÁģ%I$ ũO<Đ´Ņ`:Ü˜^;Ö­¤]jž{D)ĨųēŽ}‚[m5&Ũz‹rČ ôä÷ĻXév–VŗZBeXķÄo) zcž)ļžĩĶŽÚęŌ9wÆI™žcÉų†yBîķ^šģÔūÍRÛ5ŋ—„õéZö–ļz}—Ų­‘„( †äįü“RFDN…Éäõ>”ĶnP Œ˜HĪąĒ“BŽĒçŖŽžõÛ U‡Ü@G‚ų7’fōŅøHÛĶŠĮ"ĸŠ"$vŠ6x>ŸäTŠi jŠōĢeH=GjdĒë lƒ•ų”žNj1GjĻ5*0žœBÄ^@ĄŽ@Á zœuūT›ģFđ˜*Ē1ƒÉĸ0˛ˆ˛Ä`ķīŒúĐņL"HÆŅ•ų€9#ũŠm-Ųž@>S÷ä÷üŗL¸ƒyAÎî/‘“Ō–D;‚ČHgOaøT0Úæ]ʅ—Ž_zK¨[ąbI^‡}j$ÃD͝ ŸNÕŽŌCÕ#kާĨ%đŪTĒŗ‚A zTđæ5Xΐ;>ßέ:„P‘¸cčzķQF‹,ûË618ŽÔĮ2*fU;ÁáČīŸéH­§nÖ@zĀôīôĻÅ[¸ w2§€Õcˆæ ą‚•Ã`õ=¨˜d‘woâĀĀŠYQ g ĀéßąĒčĻãtŦ¸a*ŌA$‘ŽčŽ@ĮĘxŽŪ/Å 0XŲdĶmįķŖļeäŨHÕkŋŦöúĨĢ_Čūág‘ŧąÁ8Ü ZđÅבĒŪÁ<—7WvBÔDąž0;ũjM ÂķŊ–—>§;;ŲÂR(ˆØŒpy=ĒO‡æ)mûZ_ŗXܙ ŒF§iÎH'Ŋ\ŸÁ0MyĢË%ėŋfԀ2BĒ>VėAī‚)4˙\Ek<7Õň#NęÆëâ=˛k[FŅ˙ą´+}5îĖë¸MšĪNj…6ą5ũ…øˇYâXäŠH÷Ž@ę9ôŦÄøz,â˛}7RkkëmĀÎP07'+ŸĘ­ˇ…emWNŧšÔSl’,žjdËŋ;šĪ°;U}/Âs؁u™fĶ"rĐÛl A8fę@ôĒ‹ā{ƒĻ›_íHÂĩ÷ÛCyÅé÷ŊjŨˇ„îlĩƒgŦĪ}e!’6eʐz‚? žĪNŋšÔ#žÕ.a–[U"`BKpX“É8üĢŧ~úlÖĻî ī¨ ŌÂ3“œu­+o É&§ŦO{4r[ę1,lˆ`cŠĒ#Āâ? Ļá[¸Ĩ­ÁÆŊ éŽ? }Į‡õŊGAēļŧÔ ’âáU*ŠšÉ8ęIŠu öīM´ļ+e$iI━ ŒÎĒŲxGPˇÔ-'q<ÖmjXįsg'8ôĪ—qĸÜiž Ō‹™ĻsöCmŦAc۟Ōģ#K:vƒo`N$Ž=Ĩģ1îkøcRĶåÕáŗšŲ­u"Yˇį13 ëÆ}(ąđåŪâ=>ę„ŲÛÚ aæHwNIĀëÚģ$vbĖIäpÜsíJímüžĀuRIvŋ˜cŽ9õ¤7â8V\ũīj"”Čˆ]9lcšĮņ1š?ęQ]K ÅtØ@ÁPcx\ˇĩđŽĨĢę/ēbŚLˇ98ė+fĮÅz=ũįØ-owÜʂ¤˙tãšĶķ]™1œ/cŸ­UÔ5Í3K–/ļŪÅ HFÄs‚}ū•_Lņ&‘{s;Û_Į#FĨ˜1#hųíīUßÅ:-åÔVÖúŒrÍ,›TOÍõ§Oâ $Ū}…īJ\¨<íŨĶnėcđŠ,uŨ:æIāŠâ9ZĖÃ?tÎxĒ7ēœ—z[Xk–đFĶd¸c0éŌ¯]ëúm×—w{0歟”tä‚Ļ›Vą…Ķuåž&šÜãæÉíëKũ´ˇ/kÔM$ygˆ8ÜžšĨļÖŦ/fh-¯`–qœ*H2q׊”;ĘCl`ČØåģŖũĄcfķĮö˜U$•Ū2  ķHu]9l ĢyrdŪ1ŸCúĶįÕôëyPMsm÷“{‘K5å´hŗÉuq1ā–īĮzįüMâ ĢíäĶîad7"rĐEwo1ōU:ĢüŲĢQ˛ę Î>`N?*‰īmceûD¨ƒÆÃÜuŠá–ÔČŽĻ!ŅÃeE3}Ģ˴΅ÜP˛ķͰÍ-Ã$Šß(Ü]¸âĢŗĮ$N&ڛˆ t§ÚH<†!Õ͜c×ü3\÷Šĩ{MûE¸…ä+žFN1ūy­´uļĶ—8( +‡43'•ŧ•Č;yū!ŪĢÜË$ˇ&(m)’OéTl¯"šģ瞴^K^X;öŖHžųėæ—RŽ;yw•TFĪËØ÷jäō€„1Xōzc9ĢQ>Æ 4˜Á#8šŠFČ9 gę1˙ëĒ‚ßs;™ Vę{…J’ēČŅŽÖ ͞ž˙ĘĒ5š˙^H9;—#$œzͧōÕTČã'¸ãug[k+.ģũŽĐ˛…ŒČdg ‘×§ų5Ŗû¸åU;ˆrŽÆĢÍ1‰'•S{ ČEÆOãÚ¨čē’k6jØc%đPļsŠšīQ’ VŪ {))—s?LU[Mf-Iu/.ÚhūĖ~eeĪņeĀ9ëĨ1&‘1…g%xãņŸÎ¤ųfQ&ÖYÚ>nŖ×ŋ­Kæ"Ĥ*Ģ““žOjŠY‘“nėķʎ?ũu™ü2Op‘ŨĘĘŒ}*ÜJ^2Qž„qšwy›|°p^ŋJ™ŗ)mŋ)^3鎕˜ĸ°-ģ8Ũ¸ã ĮķŠ –G“nÅtQČUÁˇ4ɜĩØ8ųņ“ÛëVAXãÎAWå˛?Ī—Ac‘cxÆÜŽŋäSŖ`īŽ€_¯ãPĪ,“ã7DĮZą˜Ū3š3‘Ā<Å5vŗ€\U#Ûüiåat*;“ßŊuļž!žīÆĪgĖļĻËÍK F¸ ō:bēĨe 7)$đp8âĨsˇŽĮĮå Ēå”ĸõéžŨi†,äŨx¨ā $l1ĩTéJ˜o3b99'“JŽHEØ>nI<ԞG ¤‡œž)¯4ēž§˙¯QÅC˛°fū.Üv§<ãÂĀqĪųúÕ>"ŽWd'iĀī@ˆÛJ°Į#°Ĩ1˛ļ@<įĶņ/–UՃ0}ŧúcÖĸ?'V%sžGŊ$"T,Brp1ɧÎqąōĘĖpB÷ŠĒĒNœį¯ųÍGĖ"ĸ }āq֜c Ŧxs×ڕƒÉ`:w¤ Qš=F* ģ9ŒŠaČĨv]¸†^1×Ū•‰Ėad#œķëJ`ŽR2ŋ*ƒÎėSÄJę>VcRŸá#ÅBbRĖß!ÁtæĢIDĪ™A€ô”¨Â^W$€ČãŠÆņÄžÔ„Ėą´–?x‘Œø×4–Įāôh$ˆĘšųŗæg•^ēû8ņ¯† Íš‚8ųx×Ŗ$A@;°=@ŽĮëoöŨĨŲŗíÃ{?o}ĒBÚ ßˆ2X„+Ģ5͝Ũ ƒ€ÕGÁöđMĄjŌ[ÃŪ ‰|ĻĀÜ>_—ˇZÉŌŽ‰uáØ­õ+ûĩš%­C ÆLņ´c95¯ĒĨׇüHeĶĄf:Åŋ”<¤ŧN??ΝŽYŧęŪŗŒÆ•ŨŽ{r_ ˜[û~ H¨šķÜĘ$î¸Į~ĸšČąøsD79û8Ôķ7L˙.ĩŌ<–sx˙TÍÂyGM*dB2:gęqQhm'XŌ,gH/-åö ČøerzW ‡ōĨ) N§Œ’kƒņŽt_ŲëÉož)•­į{#ķíXš=•āģ>šˇ ¯*]H@é7müđ+_ÃqÃyyâ¯ĸG¸ķŒ{díČ{W7$&O~ûįŽ-Gˡr9ØzãۊÛņv™mĻh–ɧđīŊFã<œV—‚Ĩŗ˜\Ī4XÖCöĘ7Lz é÷7Éxb1’¤‚2k“Bē‡Äwĩŋ ņEn<”‘~SĶ$ÄūUyĩ˙„ĢOˆ–ąˆ #…G>Ÿ™…JtØ,?áēļCÅÃ/˜āōŲükŅŌ"’#k˜ņd–įO´ŠS3š!Œ`ÎßŨlöŦ;ģŊ;Rņ3Å@b€:ÃĘ#mĪUMGL˛‡ę@y—ŽĘĪ)lŗØ95ĄĒ´7Ĩŧ[MÜâ˛b؎>>ų>ŋ…cĪ$ķ|<ą•§”:]ōũÜ÷õ­ ũ8hZö’ÖLMÛySĢ9māãŸÖĻđ–“f÷úîUÃE3FŒŒAU9ĩŧŌø4j(ey-nØˇÎ~xō2ãũjŨõĶ\Úę:ũŖēD‹0‚OSÍlâĩ4í2÷O¸°ÔŖģ…!}Š ķXųÛžŊëŽ1Š °ÔģX~ĩÉx­.TŌĸKÉ Žyŧ˛ąļį¨÷æĢÛÚÍĨx¸iŅ]ÜIounÄī|˛qœįđũj†–“ }fkëšdļ’@ų™VĀ{ۚ’Kiåđšëböãí¨žirįiųąˇ1åPD‡ZņB<-ŗË`ŽLģʝmyw–Ģa6Ŗå‹w—2 œg•õÍ&‹q3k’Zīš6æÜ¸Yß-Ÿ_lÕ )ĶÂōjV÷ķE,RĢ|¤j؏PÔ.õÍ šbŠsöˆ €F}ũj+:ŪĪÅ‘^9 ¸ãõŦëķ%ŪĄ<ˇŗĖā>zôëWīnnôn;kģÉÚĘE$o# ãŋį5Ŗá֛ėî&,fĀl|ĢĐJą-ÁˇŽōmšFNŪ„ãŸōk´›]šŽ Ûu™šFåK(”vé5-Bí5kˆ..Ԑ >áōqKöyŸÅËڝvÄÁzjú÷ĖÖÜ){¸ØÆÍe‹­I--.>Ôf} ֝ŧˇĐëVsĖ—"/ģÛéTãÖ.ḡ-r“4Ή"UĘ 'ąŠ­áš>,™Rs•@y\‚§ÕšœĐh´ĄYĸ"”\ įŌϏģŊ°†ŪęY’hå Žú#Ɖ§„RJ™g ũ+§˛žâ{în­ŪŪāŽæ‡vv{f­°tĨUēÔáß-ONqœÕŋˇûTÖ\Ŗ\ĒîhÃ|Ę|~5g ʝŲĮ$sL1ˆb嘊#=?HĐŋ¨ÚxvĄÂ¨ r' 3øSZIM§äaʑū|ĐÆzđŲUXnūhŧ°ÄHrHúôpŌ,¤ļmųēđ9Ģ13Į`*°b“CÄäž1éNi )ۆ*pŲ=­FŠ$ąnbvmÎGŠÕ$8ÎIÜ1PÜ+yX%~`OZV‘JsĀqŪ†€) K|įz÷ĻĖ€z‘ÔŌĸ Éu¸*〠īSũÃąđKžsԚŠˆŌí Ô :ˆļŗ.NpsOŒFbsȆ5n5 ōF:F)|ŌFí§Ž? o˜ĢÆ#ÚšJ,ʛĀfäāāTr(9ESĀČ'ƒÍGo-‰dŪŸ…G$qˊ˛B’ŒdPÃ>´Å°´Ë%´;Tdüƒi8ëQ-7Ŗũ–Ü)(š\tÅXŽîF”ÂS’ ŨÚ°ŧM᛭nkûT1ĨŗīØņÜÃמ•ŖĨĨ­‘Hl­ãŽQĩÄh\OņĻYYZYÍ'öuĨŧlOĖQįņĻ>—¤‹†ēûi9Ũ!A¸Ÿ\ÔōĮķDæc .úĄÆ8üę MŊ&¸ĩ†i—ŖČš?¨/ôŊ6éÖk>fÛ÷öäŸjšķO´žĶŪkH¤v‘P1īíPŲčz<˝oėÚĐIžÕž—aĻŨÅ5ĩ‚¤¸+QŖž=? ŋq0bŠgã-č?‚čG{Åyoža Ū:0<ÎŖ‘-ĩĨŧЏōÄbNyˇŌĢ]čš]õÛÍ4@Ü2áŒLP‘čpyühŧĐ´‹Ûxm&ˇ"+|ė…IUøįš‹TĐlŽmíāš' Ā„ cܜōjkmKļŋKøã‘/e˜ČĞgšÖ+pIÚŗ5NÔnŖ¸¸ŽEž%^6*Āz* ÍN]KXĸÃ;îrîs×,ŲÉũj8ŧ=ĻŪEdģ.XÚ ō—Îq°úķÚˇžHI…‹• €ƒÛÖ˛ĩÍ6ĶZš8.Ą‘67™ˆ ¸>Øü*­†ĄÛŪIuI,ģvLBĀä`î˙ëÕi<Ŗ&č]Á,Įh9ôü˙*šãÃZ\ˇ‘Îĸæ'HÄ,Rģ”=˙:Č×ŧ-ömiúEĖĻK‘+f@BŸzÛŌô;Hn ŧ¸ûDŗĮÔōŗÛŽ3QA iđęˇWPËwŗnwT“€yį>ĮCŗąŌĻą†Y 31Ę9ŨېOŊ:×GĶâŌ†Ša ˆįwV=sŸĖū—á+N^]JblÅŌ|¨Ūç­o ãu2år2=ąšäŧ[iu{¨ifÖ)äŽ)<Įž!ŧŽ™î1WSJ‚ŌâKæš–k‰Æ%pšAß)ú~…i¤YKhˇqo(bÉ1Žz ÕEđĨ¸ą[_ļÜ}„žãoĮ9Æėgˇz$ ¨%åŦīĸ1ÔPĘcĮüņUŽ|1c&œl’RŽĖ&iÉË;úūĩŋ‡R HŪŪ_Ę[ËØOˇ”[xN?ŗ=ĸßČlī1āüŒúT—ļĄiøėĀ$0„/įUĸđûEoę$ũˇ;Ī•Č<įŋĻi’ø]›Jļ€^ūōÕÃĮ&Ņ€:ôĒēÅšÖ'ļŌŧŠæž2ĨîŲ@\wįĨnĪoŦA_”Ôt^(â™dŠāíķAV+œāŽsųVu§‡î ‰­˙ĩ˜iā“åķcŽ3ūŪ=ķÍj÷‘y2ŋ˜Ą–ŒzM¸ŌBkkqit# ƒ žoÂĒĮĨŪ/öƒ,ņģRä8­2Méí,íÖę!;Á Žĩ9ĐîäÕgšK„HĖlP; Ŧūŋˆ[Eöˆ?pû“yī“V›Oģ]e¯mî" *„}˜cˇéúÕ1 Ī;ŪÅs$j× `‘†Î´ų4Û쏠´ēšmt-é×Ĩ=t›¨ĩ ̌ÂŪ|D ËqØvúU6‹PŅt¸āGf2d–Ī8éÖē‡lcz)rlzõ5ɉ|ÆwŒ7Ū”BŖpVųNr}=­Ũ•B˛üš+íMŽ&c¸tįsõĻ‹+uš[”Ž5™øg7biv €ĀƒjĸHŖ(ę$^î*epÁHęĮ 9§g|W 1ŠŒE'–ƒî“Œˇô¨§ļ–e*˛CœāōsøÔ1Z­ŧJŖq î˙ëUˆāe`ÎĢŽ  |ŖĖĮ¯ojĨåpŪfNAÅI °@F2H#$ķė) š c :ƒØTü|¤Å2t/ČŽ3ÚŖdÜĄIƒ“íRŽí‹ˆĮ’ŊęŧČįg—Ôc9ëŠ-ōîŸģëJÖä")NÄįō§HI‚xÆ8¨žTŽW$ķž¸§y;X2Č`†íøÔå•ēôˆPŊģŠ$ "į‰ęO95Jy’.w'%ØđAšĻÉo%×Û-„ Û ž`ÆīLÔwÚĩ•ĩĒ1ē…Dāl/ ųî*+}RÎxˇYŪ[Ė!Ŋep@>ū• kRˉũŖgēL¨aÎ8õŠ.om­DpÜÜÛÆíĐ;€qūFKšfÖtém5U˛%„‘pLƒmõúÖÄúžkø  `Ķežn'iÄqėÃoįY÷ˇ.“u6yoįc #Č Šī“R@L6p›Éá{™# ø“†8äŒö¨îoÔéˇsXKŌE “•ãœqU|;¨O¨øzĶTģĮ˜ęÛļp  VÄqO›F˂ ^‚šīëĶhÚk\ŲyS"ĢĢļHŽ€ÖŌfM5˜•3ąÎ=M+Č^áY”¨FAã$÷¨¯ ;į֝0ß§ÆB$(sžWōëXj—iã+m*5‰­æĖ~ģ•F­t,Â&ˇ;úch:åί{Š-ÄQ¤6˛y(Ҝī99äū_ŧ’”+pH%NpA§˜ÉheSŽúU€ų ‘!ųˆķ=BđÉ+cx ÉÎ3úԐŗ"ĻJ•$(m'§¯ZŽBí$ų‚3¸‘‚ØČÅO+ •°#s§?äTosæ^‚Œ Œũî;zū4ÛxŧĄ;ƒ™$sGËíA2E*î įŪ’GY7É6GZœ62î,NJ†k•ˇ‚âCĘFXF‡—öũ++FÕ×Yą”q4dHҐÄŽĩ`Īö”Ž8 eUŽæƒŽŖëV‚<’ÂGVÛ{SäX%ÕP—Iæ°īu˜´-<ÎâvR•@úöæŽC2IĻ šAûĀ `1ųsëīI hQvļXg'8õ4ų–?ĩŧ†_›  ČĻÛI3f@TGŋ*qÛĄúvĨž]Ā +’Û˛Ŗ§­PžÔaĶíäšXˆŠ ā잎õ¤†Hīcˇš:H”0 yüęqōĸ7Čpy=NyÅ2ōØ ĢuTSHę1ę)‘ŗ‰vd ã8Į¯ô¨ÜųėÜPŗ|Äļx¨ã’q|ŠXä˛į€U{“ž 2ė_$ cČĀīEŌČDL#xÜãqęÉéP]jÖâō;=åg”cnۃÜԐ€÷g ļč~´Ám Ž­–nTéKM°Ã‚wĪ6dxå"FĘF1‘‘Í1ä”Z.wpB“‘Ÿūĩ<4’;+c ģ$~YĒÉČp$JG™ģ“ŠFv;ŽHā‚{Ķn¯-ãž#4¨Ēü.{ô•[3yėŗ€ō(?0Y!8ČČŠ¨Ā|ØŽx?׊‘ö­Ęąß‡ųģœSˇ2Ŗ6ŌģxéÔБ˜1\”ę““Û4ŋåGÂōw(Ī?J¸!&ā‚0@ä˙ŸëY× 0¨Ę’>•7—š6 eĮ#FhRÂįØmÁĮlzU¨íŅ×q'8Á=yô¯b.œzœŽ{Ķ[vĶ‚üŠĻB-÷)$ž)#}ĀHŨÀŨjSœ†Æ8Æ:Qå(`JžšĮQQČŖÍÆ3ģąįŊ=Č÷īŠp*S–^i—Ĩŧ;žÅ^rFqõĻ &EŽ\šF}˛°hÎ^)’š1„’ūĩ0̧ëN}ąŽōķųĐY\ĢũzŌžˑģoåJĄ|˛ŋÎ*$ĢŠbFF §DŠ’ĘŲôįŊ9“8PŸüGŊDWt™S€8ŲÍIĨēxËÄÖéyĖ”ü ôúÖ]–™§?ÂŲîåHūŌI(ā ÁÃzÕ˝9nüGá(u(š[l\äļÕã5Ą{§Úéū?Đ`‚R¨:pqüë2ËHĶĨ>3ymb&ßx‡õ+tôæ™g{ÂĄ!ūĪąmßtČ ?N+SÅ:n‹káíuŦŠ´ōySHĒr¨Å°1Ø“ÅSžĶí/āÆē}cPK&k‡Ō(ؒŪŊ‡įÅy’Ų_ÛørÂGš’)oށ…ļđNKļ? é#imÆŪéLˇ×/-ŧ5¨LeÍ ßŲāy>fŒSß5ŌZč÷6–׉ŠČĐIĮ3î262ĪOūĩqļąŨŲø,jļúŒņ´WXXP€œžsë[ˇˇwڞžtëq/—ol–Ddą-“ØfĄššņ †‡]ŗ3Eqļcƒ/”r:đއÃé{ĻM4WržiHy#…'ŋzÍņzíđeÂp H¸Āė\Vtqjî‘k%ûĪä ˛:€§°ĒēŽĄs`.įû~ë¨g P ŅĸgŖuüsW'Ŋ¸˛ņ$K}vËcqš›€Â693˙ëÕÕuŗĶíRYžkįyáw¤C ĀÉķZj"îâ+õŗŠDd*[¯pĻĨņQAž§ŊsVöˇw>3žv$AŽávõũj=_XÔ,d›Ėš1Mļ+q†%=IíU5ëÁ¯§Ũ;Fr=*÷Úīt7í×O’M…Ž$ õ ķPÅ{¨­ĀíŨátÜĄdÚØéôĒcVÕ$˛ē~ĖąĀáJā’~•ŅÃÛėcœąˆČĄŠB:V>ŧˇ6ڎŸŗ‰ä܀Žā÷=ÅL/îŽĩi--ü•–(đîęH,{øĶ4ÛŋˇyâXÂ^Dá]Td7=JÄR46/$2ÄcˇˇN=ë?TYWC˛3üő„Ī#or{ÕËMRčj-o¨Æ¨D^`)ØcŋáP7ˆįeY„HĐīÁQģv3×Ōˇŗ•-Ę`8šäõę7˜—{æāƒÔ{UœÉō…ÚŦĀŽyÆ}OõŠ!P U‘[åįˇO_åMWa!(€uûÔË"2ĀcƒŌ‘!áŅKĸãwaš|H†ŒîĮsÂĸ’ÕÖYeÎA;p§ˇôŠ~ÔČĮ*…3ĶÜWŽŦĖÁ¸FĀ#ŊJŌūčļ yĮZ…ËŦ%Øíāb fÜ ũĐ3‘ŒRbÜ7A×SâEA„ÜOĪ­.&ÎH§LĶ‚yk´î@ TeåQÃr0Fi“Ė\<^_w 72ė 2¤|Įõy.$Ë –ã­(“i#h#<œãËūĄŽâGÜ'iæN~`8¯{~`æ=§LEPOĄų•!ã äžŸJq“íĘã)Ļî‹åÂõ'>´ų…ųC)įĐSKHØÁ ŽqQÉ;Ú¤’=Ļ´šu ¤›Ĩ‘š*û§ÚŸŋĖum€îŸJ<õÉPŧc‚?•LjÁÚTŸŌ¤ue#'æéœĐü€ŦrHãŠŦĢåoßÂÁ#ŦÉ|9ŖÜÜIs.›nŌI÷Ø ËQuĸéIm:ŲŧĨ< ųˇãU/t[Eå͕ē^ĘŦžaã;¸äõŦĪ x>ÛKĶĄQˇļ{ˆÜ˛ĘŦHcœ‚AČ­ÛŨ MžÔ–ōk8ÚuÆ$ÉČĮĨEqĨi—w‹¨Ok›˜ĪÉ&ãĻ økHˆ\„˛8š_ß vË÷įŸZü3ŖË§%ƒŲj¸!'OĄÎEO˙žŒtĪėŅjĪ!ŨˆÜŪį9?sÚĪ…Ļē×4ŗŽ4Ë PfvW úŖw­õđö—ka=œq8[¯õŽ]‹ŋÛŽ;SÂÚLš*ijMĸžå]ä”obNE7‡ôÍ.  †ßåœrėX˛údõ5œ< Ą˛ŧš|…}ūY™öƒžÃ4ôđâĻĸ˜a†(匧n€ëu–WĮ Ŗŋã\´ŪŅ~Į0ōĻ;ÛxaųyÉĮĻqVOƒôģģ¨eĶƌB+šzáŊitũKĐ.n^Ú979$9Ú§¨_AÅ]Ô´Ë]SK6Rī &ŨŪ_¨8Ēú‡†,5F°ŽW–8ėō480!Q]øVØ]ÜÉiqql—D ĸ„€¯úd~=ī„,§ĩĩŽ&{WŗmÖī Á_έ[XĮcōį–[™÷ŗĘۙˆĶĐU›Č"ŧ°žÚ@Ÿ ‚úŒ×˙DpÚÚ+ę7LÖōų#€=i–úEõĮõ ŪYĮ0 žNUđ9ĪNiŪ(ĐãĶü$ēvŸ ķÉ,áŨ–,{ą?•liÚ ģ{KũJök‡ļ_ÜÅ,aHîzTžđܚ^­}xoK‹†ËÆP|ÃúrMT_ fģ]?Q’ÖÖņˆ– €=ĶږįÂļë-„ē}ëŲIeNĐŲúũOįTmü'nļšŖjĪËî`P|­Œ†ϧ´đÜđF>ŗ%Ņ… [îQˆ†:ã< W_9đãéiĒŖDĶy›ŧĄœŽŨiu?Ę÷אjMm¨Įå}3éREáŲb† ĸÔ.„­,—¨a)aŒžžÕ§ŖčđčņÜš”K5ԂWhĶjŠėĪŊGâ-]kOû:Î-„Ž7î]ÄāũGzŖu Ū6Ĩ§ßÉ 6‹ŗ#ķ`rzÖ5Ī„ŽÅÕēęHmĨ”ĘĒcÉÎ{œûVū„5.ŌŪyÃKlËē]˜ÜŊÆ=ÅIĢh‰Ģ[[=Ŧŋdēŗb"`3čGáO°ŌeļškŊB÷íWDmUŒmUz~5ũ—öž“woÄfe’sĶĨaI¤Î-llĩ˜~ÍlĀė\Rh“Ã÷ŠquĻ_EžeÁ _§4ûĪ Nmí%ĩŊ˙Oļ<Čį†ÜsøTséz…ÄW+syˇ71„ã!}‡sM¸ŅoåĶôË6×u“īŨ¸ķƒôâē 9JItsÁ?ZɋKŋ‹_mJ ˆ|šã !xÆpŌąŽ4ßŗŪۙ­ŠÍ'˜&|īnzTwÚ-íũŨģMösQųd#>¤dv¤Bž—JûÄŅe[| ŦIv#Ō¯u“勚Ą!÷"$y‡ą'ŌĒÁĄ_dŪĀ%ěp;ú{VŨ„XičˇEITT`9ë;\ąžōæĘæĪË&ÎĮ8Č8į=ęg}gĢ=üIÆtdaąĩąÛ×˙¯SiēT-Üōē ŽI%$'qŸÎĄÕlešĶ&….@`N>béYˇVWךu˛,6 ÆŠ'Ķî›Tķ^<ĸK‚AÆ3úĶlbÕm-Ā[C´’faĮž;Ö˙–ÉlĸL´¨¸;G ũb„eIē—Ž1õôëJĒ ģÜŦõX@F oÆå'Ĩ'œo-_vs‘ßÛßĨ>GH QĘČãvzķŌĨ “CąYUúÆöÍ2 wüŦ˰tŠ=>´Č<Čîɔâ9G^œûŠdNUâ.Aę1^Á Dy€J§œÃĨ;iîŨŽ˜â‘Ŗ‘ĸd-…LsŽ{U„GmĘę{įƒíLŠIôâĸuÛ0vBwt& *œeĮNĩ˜÷|tŠ#S€ûŋ6jF۔lœöljÄ;’!æ`ģGzLJ€Ã IQL`YO,OŠíPĖės2¸95 ’’Āۑ÷ŗĶūŊ1ä1>Årã<õ¨X‰ }ĘĘIÉŌ’ ´ĻF^5lAĀ āöúÔōaœ',rįōĄ€Pl9<áGnŊj/?3Į*p0T˙ęŠDžJądų Ü>žÔ՜ŨDō*”eę=:?Ī3"ĻŌXûp* s%Îā¸P1‚:jŸjųE—aš=*×ũåēũÜqžßBĨáˆĢ°GįŠīR,ą¨ĘŠ+˜~•9ie>KFrA#øĒ+ŧ[Yīo—oaŒš[ä Ĩ°zN•Zôæebü¨éĀĮ˙މ$ĖėæųFîžĀT–†w21#“Æ9ęŅ*&RˇsōŒTs4›ČĘIíôūuY‚íæ+;ŽŦ\b§šLļp“ę(…×ėK”ÃÜ8ü¨‘Áœ?*vä`õūT‚8Åēīb$g?•G>wá#VMŧG>ÔļŦpę6–QˇjvĪ4— ą07îp9¨Øŋ›; v Ž3ŽõXˆĻŽ1lØüāãŊ܁ÜÕÖ$ÎäŸzĢ$,F$8!Á88Ģ2ąwÆāNRĒŦÃr¸tœ‚h‘j6€Å3€qëO•¤ØT’x8Å)áŠVB7ĮFÜퟭ÷Œ3ū5!^ƒØį„ÉœÛŌĄųÃaˆ,ÄœĶ‚(ųÎ}1íCBģU{(ëš#X“€gUvVlqĮÉ9_ŪmÉ鞴ÂS Ž1×q4˛>{“ŒŸZ‰[{ ņÛŪ¤ ą@ įŋ"‚v?Ę}†iŌīÁĮ"Ŗ%IÎŌqČ€´kķၜ(ëFüsĮ|­7*ŽÛŽ;qI”QÁSØũhLG;TgqãšjĘŨrynF1Nb>P ų‰ÆqPK†gĀųąÆW5\ĢcŒ íŸn(fVÎ% y&•LsŸ)#ŒqÅ>0‹Jâ1œž´ãķ">Ä#'¨—pĘ3ܜô§FĨÛæ8UÆ2?ĨI>ÜnpqŽ€r)! $*íÉĪ֒D’%ÜĨUˆä7R+;G¸ĒõéQ–^ŨÃ=@įü˙…6B‰:ØŪ2Ücķ¨Ž ­ę6đęĒFĐ;Ÿ˙UKj–Č,8úsQ—ōáË+`ûįŪŖfIãˆ0Pã Ū› ĮtC‚JžŊjeLã#,§<Ūõ Į,›ļņĮaV"?š(}qœņŠ‚fd(‘ĘĒā/]ß֘€‚É+;†§ąĢ°*+ėĀPv“ĪáUæų68ÚŲ8ÃķÚĨw@ۛä×§áLBŽ|ôĪ=3Į_ķúĶ]îȐ‚1•íˇüķP€ĸIFĶäŠũ1ÔTŦUaU û6îR[¨ ™>l)+Čō)#@|Æ*Ä8¸¨å€Īn ķ îũM6E`H 3Œzū”O qÜo„í•מOÍŌĢÜZov´bHeˤoĘŽÛDRƒōũÆü¸¨7FËō+}בÅ6?‘„EÃ˛3ŸķÍ\E0#‚Ēŧåyę* íĸeķLl8PGŊA*™.°˛ģĘWĨ: hüĻF+ĩAÜOĨEåųËCˇæŲŊN0˙^ĸX1(Å8ÁČ'ĐõĻ]ÃPmrĖWŠ͊jΓ‚!R¸€ād~TXĮÆą‚휓ŽZQhÛZ]Îv’ÜtJ§MįŽÉ™É`Îiī16%}Åöō:ŽØ¨ŨÎWq FĐr*›,âÜøŒuQĪū\ՈŅՓ/ˆŨIéøfŖ¸Y#a2”Ü2Bd˙œT‰ã ā)R ô5Lęėθ‹ JŒÂÉ;`ũī”wۜÖxƒËrZ5lŒķŪ†WŠFeŒ|¸ČcÉĒķ’6Ü~eÆĮŌĄ‘ä Œ0Ŗ?‰ũ*å“`'å (ÆõūU; ų]ĐũÃtö§DŠ€¨;˛pH=OˇåV.SĖTYømĮjR‰/™ ’īũüãqĪáU’wmŨæ߯øÔ°€&}›¸'õüĒræŌ2oE=3ßĶ?ĨG)ķcŪpU>Ē=?$HâžTöF}jhQ”âL‚y$téDNí<{ãr§ °b0=jéØ87Gl¨$ûæŊ>Y˜ĸģķ`ņR@Ō}¤¨čFHõŠd”…?MžĩwŪ<†\g?v‘g.ŦģH=Æzq׊_,KŪĮÔķœĶI{kw 2ŨˆęGĩ,(!ÛĪ?ĖPیÍėxëQ‰¸%†ÕQƒ‘Į,nNA\“ôĸ6@Ē$įsŌ‡b2IįŽj›ĪûÄ ėĄäԐŲ9#ÕpzRėŒĸícČįwaKqä9l fŖUv Ü{žôŨ˛0q¸ îEZM‰ģ—ŊąQ‰"Ú !R9éCI–ÚŖœzr>´/ĘĒrĖĮ¨ėj2äÍģæ' xį4×+¸’v†5,ewíų°§Ô2>˛ÆėôĨŒŸ/āpqĪ4åbĶg)x}iĖß60wã¨sP4€°PÁĨœqŌšČ ‡Á$€3͊ A@ī֛#eˆ'Ŋ+ųJårĀļAQëN’0m…<õ¨ã`(2IáĨUų'œuÍ#üÄä ¤|ŖØŌĒŦczį8ÁÚ>•!–5fcëÚŠ‡ š~ōŠĀĪņ uÄi 9ëúSĄ‘8p2āę*ŧōĮ)Æ9ūēCŲ H~A¸\iâm‹–`ä}Üæ ŠÜ6Ö cŸ|š[ĶDĒ>Sŧ ËßëQítlE ]Ŋ{œ}j`ëÃ SŪ–Ú&X‚Û #ę2i˜G¸Š’¸^ji ŒĘų ãø‰Įļ?I–ĒX‘רė)â äŲLúįĢėE‰‹HŃrN!V2]ĸ$.y?•ys ^ũzԒ(1ė)éLšŅĘlU@ÆsĶüšdë#'Ėn›4ÆQŠÉlnĀČëÚĻE ÛBíĮb:ž9ÍE4 Šãk’šc´ķôĒØFŸÎÚY€![ĐĶŖDu%É cŠéŌĨ+V9wÉĮŸ!É ~\eIašÍģšōŲAļ‰evÂîXՐdp gŽô8ōbÂtéÍR‘yĶ7ÍÕHéÅ_â;lļOZ¨¤ųHīŠ–Đ—bČ TRēFm 3Ipr=›úՈ%vPÄäį=)°ŗ$W’ā‚’ŨCÎÎz–įJuÔJ>nrG9čpsT`wžiˇ1oAõŠcwQÜŽqÛĨI;ōqOˆu {›iœ¸ĮøÔ’ #āį'ŋZSF‡õķ׌ĐĒBŗolî5I_0ī*ģ÷gv9ę¨Í<Ÿk<đ`væŦ$¯‰Ž~`p~æĻŨ‡7'>ų’ktK$p[vB䞠æĢˆĶËÎ9f y=ɨdc¸ëŧ ~5~7'ËČ0$˙ŸÂ ÕX‹A"’Ŧ%Uqū4É$•šOŪ¸Æ;ԖĀIą°Ę¨8üę7‘ã,Šä*°5ąC)ë•“ß$OļuMĒA¯ãUn%cēÃ6ŪOËôŠáÉŗˆl¸ų›<ÔR62Á‰#¯Š ×-°Pq–ä÷4ƝÅÃc"ü :[iZuŒž ž8î*Ŋåď¤ŗ3dō™ūŋ^iē}ĖŗZ@îŲb )÷7’¤˛Æģv‡Ú8Īƙäuf9˙#üiŒ|× €ČĢ…Č$Ô÷sšŒ’'Ô|ũš/]ÄįÔÕ;š-iĮĖGášeŽRÄÎī ““ū}Š!æ…‹ãˆËzšUYaˇ Ŗ ďJkĖņ`Ž2ÃķÅEvÆŪØēwãĨ2 ^u íĀā÷Ģ6č¯:‚0ôLøŗĖŪųUwj­čę1ųU+—p1ŧü¤0=ķSZą(¤Å9¤…ˑɏ‡qO#hĀ' ˙>Õ^Fgų –#ŋ5,’hrīב`¸ųW$N9āq[ e¨ŽÛ˛G­˙Ųleptonica-1.86.0/prog/warped_paper.jpg000066400000000000000000002452271506303110300177120ustar00rootroot00000000000000˙Ø˙āJFIF˙ūZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 41, Smoothing = 0 ˙ÛC  0;*-#0F>JIE>DCMWo^MRiSCDa„bisw}~}K]‰’ˆy‘oz}x˙ÛC99xPDPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx˙Ā`"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?čÂũ¤Ē‚ÅG8¨î<ų|ĩ -øÕˆQUܨĮ8§0Ũ,cęhŸgBŋ9-õ=)mQRĩ@p)nfŽ]Ũ€ĀéMŠoŨ Ž&l dņ@}넊H568ôĘŠ§ž÷w"(P8õŠ&‡÷2‘Ø…'Ž)$.‰u¨nŽP´HŠī™āzsũ*ÄPÅ( jŽnn \r77׌Z_2v?$*3ũæ¨6ÜŊãfD@¨>ęįŠ?áWUÍAMĖíÜaqëÆ­SŸŊpėONƒ?•Uĩ´„ŽŪcæVū6ėqũ*ņ#Ÿ—8ãĩTŗš%ĩWisšōOĢH •Ē˙Ëũ˜€sQiąĮöˆWs zķM›TŗŽ"â?ģ÷UÛĮĩEkŠ@-bDY™‘bsÛé@ ņ XtKŒ/ €0:tëWl—e”îÄŖo÷¸‡âKæ—Oō’ŪtYdÉ3ūqZkuyåļ ;i~čmUŋâYu´äŲsž‡ÅYŒ/FåôÅdęS_ĩžÃknt\yŲęãļÚ´ ûG÷mÕIūķąëôíO6ä/ŨtdÁë“ÅZÛĪû@6:{VN¨šƒXfDųcnî=ęsm¨2ôČņŸē-ŊúōÔēßEÖ>MĘTŽ9ÉÆjŲUØP/ĩckˇ­hߗ"'(Î\~>õlXŨÚu÷g%B ī×ĨKĒatەV1¸U¯oëVˇ(Sķ ƒ;Ž~ídj{›_ų]:3*ä¸Į.@*Īöičo.÷ö_<ôü¨]YÄzeŅ'‘•į¯ËIĨše°^Ņ&üįûŊĢ3]ąX´›‰VæåŒĶ3:UË}&%ˇLˇļ ŖĪp:~”zVXáÉÎĀ2ŊsĶŊE§ŒYۅáÄHŽ1ŽÕN÷Lˇ[+†qō#nĖî{}yŠ!ŌmQ>|ūŸ^(÷ˡœųg9ÎjŽŸķ ˜Ūy˛`āãąũ)‡Iļo—3îĪīä˙̧éVßeÍ>Övû˛¸ū#čh\•ØįæŲÎჟÂĒÚāŨ]õŨįazãˆ×­3û*ōų—;ų#÷ōcųÕ[-.NūuČ_5ÁÄĖ~4Ž>ųÛ÷˛7į8ü*Žå:ēO– 99É~˙¤:RÁģŧ?.'j§˜_U”-åĐ)n>qČÎî3Žz Ũųöt]˙^+_hšûLVˆĖėYˇt#té˙ēR5;¤đ|ÁĪéXēĪöƟŧšGbĖ 0ĘÜPSģæÃ`üŖwŪâŠęGuē/ŪĖŅ\“æØnÁĘjĶË2ĄÛúUKë=D”ęDîBæįžJÛ˙íûÎ>oj¯¨āi—Lc;<ˇĘ`sīU–×SōĐčÛ§Ęm‡Ë˙T:œz’ØÜs(‚|’š°;¨§ eb‰z¸_‘ļđŧTƒī1O_Ÿ ķĮjĖ Ē-ŗqhWÃkŠ4éeÕU“6öĖܐVũ(&“ėØ2pĘrrNIĢ››=“Œ nŲëXšeÖĸ–h#ĶĀ(˙—€;zcАjwËĶfįu‘u -Ų–{‹ėHÄyģD™/Ęŧ~ĻŽ37-†IČĮ-ôŽzĮVÛ%ĘɧÜėyY™-ؕĸߨČŪÛÆ3Ō€2õ8ŌKHŖžåYæũë0ãžųĢ‚ pÅ5 ~^åCŌ ŋdķl†ũ‘<į,Xƒģ W˜žãœFųÅf_G|.,Õn!“tŧn‹Â}ęŲ7čĢû‹yôÚåĨ6ä1Ô-#9w^>īˏëVōķĐr;v  ŊFęā[Ÿ6ÂPed >đĢRˆž¨rГK¨åÛ¯8ķ“hŨË÷́›?6~nƒwë@öĄi.•$0΄ą]Ќĩ¯dęmaÛ"9Ú ínfø¤ĢXF­ŪrĢ{ŊũŸbé“m06˛đ[ŠšfÕ윍-ŽH-Ō­ Ēڜm e_XD‰‰î"2JŖB@ĢbŪå7yzƒŊ|Ä ū }æHˆ­*dv^sSpĄL}öĮ^*…Īۖ[u˙G—súĪëS5ÅÔdoą,üķ—?ĪËüoĩBĨ˙{Äyû§5lƒģÕŊHč=+.}B/ĩÛųąÍ +ËĮÛ*äwļrqÄ~ģw`ækûetVˆqžKŸN~´öĶmIȄ#ˇMš]ŋ•/ßÕ ˆN:œÕ˛`O>¤Đ5ĩ‹5ÕĶEs" `€“ģ$}jÃĻŖ.׊^ā2mĮåV,˛ÆV<ŗJß/dĮԟxÁ-%É#åÁ#‚Oĩ0(ŲŨĪ ¤{íŗÕ‘Ļ]jVėcˇ#yŠ@u*´áR"E  u UŽáŽYāGQ°žNząx¤I‡ąëQ[`ÜÎŨÆûĸ™.›lųũØV=×øj­Ĩ„О472"–;Tퟭh]0îH$c§÷ŠĐ.Ø}k:÷íą@ß:J1ģƒS}Žx” -› f€TIŦÆpˆNßJŊ5Ŧ)ßŸÂ˛loĄmJi)ōķ Ւ戕‘O´j)ˇ&cBrŨM4Į,—‘đ~ęÔĐņũ9Ļ,Š%—įķĻ!ŗCĮ€Ŗs2~ĩdcđūUFkØËƑĢI¸įå;ÔģŽœđŠîäаs$­ÆwcëĀĸęHÖ3¸ŒÆĢŲÚą‹2ĖėI=ZíâV‹šŨÎi€˙ĩF~æ[Ô(&ljšüāl"`n;q’?´@ācūjŧxû\īŒOˇSũh‡íŽ[ũT~ÜĩWļĩœ™KˇPd#*öū•§ŽŨ˙„Ô6§÷[ŊY‰™$ĐYl"ōœĘŌž[tŌ’ĪM´ŽÖ2`vÁ–eÎ*{÷U°—ŸųfÛOáR4ąDŋ3*Ž„i Ô1‹9ŖDT&6xĢWn?€ũjŪ§f‘m7q™z8'ī ū•kÚrāũ¤nī…c@x‰D’iņ•ËĩĘüØíé[#Ž‹˙ãzå5=jÚkë'‹{Eīaˇū%m‚;+ˇcĶä=iŪ ÉnšÜĻT!ŗ×œ˙J˛3œ˙‡8ü+›š×.¤‘6i“’Ÿîž:{æĻūŌÕØÆĢ¤‘ũŨÎZÔŧņėŸĀĶ&ß^2ĨYįXō-v˙cõ  @+}‘>čiĶåôÆ[úUÅčīL?5r÷‰¯Éwn’ī/\`ŋũsVūÍâũ:ŨņŖäũ(Vņ˛ą/ņ4ąå3ĶæĪôŠ÷ ƒæų0ŲëÍsŗŲë†XMB#ēQå°Q×i9éíS;Z`?âl7qšBũڟÄ͝"e'ÅWh=ˇđ­A´DFãŗNNAŽSXĶõŠ/7Rķâ–UEúšŧ4[n˛ūouįÍję_5”ęxrŒ“Ž˜æŦƒÅzgįÎxãĩswzNĸ"ČÖ$’"@lįŽėzÔŋØÚžmj_7’Ŗœր7¸Âƒŧläį§z­Ĩįė0ûĖ ļIÆ5‘6¨*3Žĩ1U~sĮZŽĶHԚÖũ¯$JČžZ úghĸųvžYčrsœÕm=ŗūŗĖ”ž>ųŦ¯ė}Tā e÷ņŊyāU{=3VkHŨu_*&ärz“@9e ä7ÉÎæ-÷jģĒ\‚ØÛåĒ|ß{å'úÖIĶ5Đ05Uķ9!ryZŪĮ\77&=E>WÛ#–î{{Đ3­ÜÛTėį¸ĪJĀŧeoiĒ' ؃ä|ŲĪ×ŗņĒíÔ oAĪū;Yļuؕ™ņbĘđ¸UæĄ9įĄũß7ŋųõǎŖ76c;ŋ~Jļ>īČՓŸĢ}Čãī|ĩNâã_ÁæŲŝÎʁGĖpAĪ>†€:Õ<`7ņŋЧŠ*˙gíÛˆŲ*íčw ČūĐ×Ր>—#•ĀéĮÖĢŪęúĻÂŗi…ôËØāä ęžm盏|c4ÉVüE†ÜåžísŖÄ—)Ōæ ‘†Ūž)gņ@Ö[ãm¤m'Ž{šnŲäYÛ†Ę‹‘ķüĩ7\eIÉ/%sÖŪ'ąX7† ÅGËÅX_i§iķ]?Ŋ˜ū÷wKSäČÃi”ĘûŸoQŧ՞̰Œb#œõ9Ŧ=/YĶVÕb’u@•R¤cæ'ü+F=ZÉĀ?kˇ2tĮ™@ ļZūõž5ķ7áW?x_ņКÆÍËnļ‰÷IE;8Ēútņ;Ū,s‚­+&đHáĪáWËeY°v î\g}c"Éõo,@ͅÆü“ČÅYūČļR o<(ØÛļW5"*˙mI¸ÂōžSōũîĩuOĖyø|Ü ÁģąoŦãŠús7,U¤°xfŽ‹}M[÷wņĘ1÷žųd|„ļŠhŠėbfdüŽ*áÆĀY1Įîöô9  Yŋ´Vú-ņ[?É!ÂnLō2jéŧžII§’Ø8ĖGãRßÚã….°a‚Ãü*×PB9ÁĪΜāįĨc^jM˜ˇÛ\ÆÂ\†d ŽƒkûZČ\Įģīī”ž>•-āVžØ:ūīĖmɡ;ŽĶÍY?{ĻAĢœq@öģor-)#,āá[ļ;×@_•ebySÁ Åaë–ŅM¨ØDģy#nln+Aô›ķyZŽÜŠũ(%āRđY~fÎ?„Õ’}A˙wŽúĮ¸°–;Ģxṛ%˜í/ģŧũjב¨Ŗ.ō98ë$_ĻE&˜1ŊˇÆæSŽŠō1Äũė÷ĪJĮ3_ĨÔeíĸuÚqåšL’ÃÖ­h2’gŗšO`ĄÂūT€‘؝R sūа¸éČëRÉ2ßEãī:VdZĢjNÆeEō‚ŗ8(IįĨi¤ŅČŋ#+ށUČõ  č´ûVŋ¸Ųð(nO<ņV>É<{„7ŌņŲĀj,šģŧbCH$ļ1ōãĨZ‘ļBH€r[ŠĨj/cļM¸–$šæ›yu*ĀÂ[IwËšH`*Ր?e‡8ß°sŽƒŌ™vÔX0`÷č–ØÚîS×z•Í ‘%ŊFGW;!¸Z˛Ø9´÷9Lj´ˇ’ö\ 6í8ĪŊ^aōôãĶŪĸĩĪ‘’y$’•ÖĻ(ĸē•â9-ôpF3€Áâ€&ē1.9Ü;ciî?gËu*ÜDŗ[8į9Sš™¯āÚrÅûC ´ØRIޤuRKíéڝ}§[ŧd…ÚŨˆĨŅ™>ĘJ°ųœžĩjs’ƒÕ¨ĀŽw/°cĩ¤HŒė7s–njÛ°T$œåT˙´-m C,Ę Æz÷Ļ"ÉQöˆ×8ũ?­Lzu÷°Æ˛gēŝ´“āmVč?ĪųW–ŨŨ„0¯9^¤S^ߋtĪ(Ü=*+›¨bž=ō(Ú ëū}jôĮ`÷s9Ā"ˆôÛAtÃËÜģA;ŽpI˙ëP —X´\ėß/rsU-ĩšdÁfĪŊōŽ:9­•‰;#PØį¨Ŧ‡î ēŌ1˙Į¨œÍŦËU ˆĐõõžŸ¨MnĨõrå~•ąrÅ-Ĩoâ)ҍXUs•oĶĩaŨčˆ#V{ŠäųÕc×,ZMOMĄŖf ä37^zUģĪõļęz´ŖžÜeŋĨLŌÅüΨŊÁ`6ĐuΝdž^Ûh՚D 1ĐjęÚ[ @°ÆûŸ'N*­åũ˛Īl Ô\HNwįø_ƕĩ{¸,Ļ@s•Tf&ŽU[ÅĢ䌤LĮ ū mÜá}r>Jæ×RŽO4ČŗHŠ–ĄbųĪĨkiJĖDzuŅoî°Uß­MrXßÚ¨#{žŧcúՏ— ũÎwuÍbŊíԚŒLļ2üąˇ *ƒË/§ĶwĪԙ¸˛‰âœãôhIÃ6ĨnšČĀã§ŨÖŦžŒvņÎWząKę2jũļ#Áv?yĮˇû5lŽŦĪÖÍN>ūÖ?‡ZuÎĩ­~>INq÷~čūĩt÷ãŸN>~+hĩFŋŒ¯ŲKˆß,ã—=ũĢf-T¸ÍŨ¨\ŸÉû§ĶīP÷}˛Ųwp˜ķ÷p¸ūĩcĶ'üŧũū+XuSûEžņŒŋēë÷G<Փĸđėįsy?sõ  úŲ >œ›žct…—?w˙j‚ģoų6ļīŊ\ūĨ ˙öĻŨFė]š6ōąŅG'šĶj;û|}ˇ¯”>N;P׍ō&N$ķ#ʆãÅNJė?7îŽrÛš5“uūëu7ęņ4Šĩŧą’y?ĐUŸ#QĀ˙NO7ryco^´=ûmŗœąÃˆœĒîę1O‡ ¨#jŒ9Ũ÷xŦŊBņa?üLâ(ÜųC9ôŠūĪŠ…ĮÛâķ;WĘáĮŋ4|rØQ÷NīŊÅWĶüKíąËųIšwt÷Ē×ę)Ŧˇņ0î/šĮnj;K}Qmĸ_ļĀˆĒĄ?u’Üt<Đ¯1ŋä#ũfīzŠeūļņąÉ™ŋw‘ķ`(ūŸ­Aåk;ũĻØšÛē?+…ũjŊ”Zļf+ql‘˙xbĪ;ąëí@ü#oü ûĩ-ãųųŽÜgũŋķšģrēĘÆJ5œ¸S˜ö0ßúÖ ąÔ›Äķ•‚ŲŽ$įb PYÆĀJ‡ģÛŌĒNę–Ģš|Ҥ1^1•ĒË.´ŋŅmKĄ›{ãÚ¨Iy¨ũļŨ›MāD@E”į–“Û  ļícŅ9ß×5OQëh¤øø_,nëŽyĒĮRԖ`¯¤š—i*aˇĒ7ÚĖ›âi,.Qc›sÎSĀūt čÁųģĀÜģ¸ZŠŠtģ•ÜJų-‰}Ē ×ĸ]žm­ä@ũÖhž˙[R×,%ĶĻ‹.Ô(‰ĸ#i FȆ?'-؃ĀwS&ąĩ~Únvf.ęĒkzk‘ļō/7oĘ@ĮĨ>MNÁā”Ĩä>YVŨķáŗíHe]3J°—OžÖ&r ĘH>™â¤mJ‘WũB`muüÕ6™q °ĩO>=ëíU“ī|ŊęčpOgqŊŋĪãVNß/œŦG°æÄZ%ĘŨ\yŦˆ‘`;œƒœfŦ˙gkĐįËԕņ÷Cæ+Rؘß^䩕[ n íÕΚÚŲëķqōP3–oíäÔcŪ‘O2GōŒ (?ūǞšžŗ‡ÍŌ÷°Āb€ō+I:ÍËÚ|ŧŋ^•{ąIĀĪîĀ$gŽôËĻžôÉ-¤ŅŠĄCs×5 ž$ąoõ‹*˛ÉúÕëp[P¸f@[Ģsŧũjy-ĸ”ūō(܌eÜ( ëS_[2\&Svæe*=ĢN;ĢilWė<îsœÖtēVŸ&Ŗb1eIlŽ´7‡töįˑŒĒI÷:f Ë'ˆ4õxÉ1Û×ŋ_ŌļųŨØČ?Œ×&ú6Ím--î]1ķ!ę*ø°ÕĄČÔÃ!ûžgS@Fų¯aÚĮnÆ;ŗœō8̆W z.:įMq/40Í"Ļ@ĀÂ˙œTŸÛ:„ÎšãûĖš¤3a7’t.CsÂõŠO sŖīqËņ\ü"ļ;M¨ãÖ´#Ö´ų~íĘwx* Å6ŖpˍŌUU˙f.Ÿk/<įx_͊m…ÄSKrb•Y_•ˇäˇĨ[nmPQē}ņ@:rŦRŧ3Ëwo-UņŒ}iאßÃo+%îõT$—Aųf­éœŲĢÎōĖ͞‡=.Ŗƒkˇoß`qß=MUˇ–úxU­Q—hÚđz{Ķ&ԗí0‰b–’ĖšíĐbĩWũī÷›=ĩ@ę­}WĸąUĮCęh"žļ“ũ\¨}8?6Іžåƒnų€Ũ펂¤šÖŪ`ÛãVĪSŽū•BĪMMŽčōDĖÄĒĢ}ĘŋxvÛļ8ĀÕ*Œ GLúÖ]ėkܙ˜ŽÍSų—Ņ}øŖ}ŖĒœPųŨ{אœûQzGŲd%Tŧ*”:€2yĐH˜QÛ?.Ą}–nŠ(Ë z@Xéđ5ŒY_˜Žr*94ųæ?"á×ŋĖsZvÛEŧ`ŠhųŽž‹@nŦ/Ž"vžķgĒF0Ģ–š=ļŨ‘qČfæŦ]:* f,0I÷ĻŊė Ō_šģąųSûuQ$ÛWhÜn?úôûŽcĮņ3(úķT­Ž.ĨŒ´vûrIˇįԟ%ŊĖ’B˛\a tqŽøSC*“ÔÚĒ ČæRdáp9ĪųÍJļpį,ĨĪ}Į9÷ĸÚĶ~ÅQķ§Ø dŋ d‚fQЅÆ?:ŽŌKĪą KuČAĪ׊ĩxÛ,į`?˛?>jT]¨ŠũŅōšÍŊPh ™aUo“å^FHŠ~Å;˙Ŧž˜°ę 1ųU‹žB(ã2/Ëøį?ĨMé˙ŽŸņ  yô¸ę’IHfųä×™-wŠfA´üø^üûՐē¸n'´|œ2ųg÷|}hÍ˙6ė3É* gĻ[­Oüį㟟#jÆŊ]_ĘEķ­X#Úû/ķ}jOøžā6,ŗÆbÁ㞴PlY\„FÜ{Š•xP>đü>N+P:ŌŲƝöI”‚뜌œb§ßŽ`Ÿ"Όî]Į2q@ØsTšmiXnąļ‘IųvÉ÷8ĒúuÖŽ`]š|Eŗ–Éā’ƀ7¤o”aöđÄp+MÜŪ"Õ¤āÆ0Ŧ0IPÃåČ،úwĒĢ“ĢąãĖX0ÉĀËŸ•Tū֝w7öUæŨßŧīŽ;UXĩ…ūĶ}öw¨6"¨Ų–8Üyúįô¤3{+åũü!ū=Üį5Vķ&úΌ]ļd|ß/_×õĒÃ\‹9{kĀün‹É?'ŊU›[ąkëv¸dũãFxÎ8éL Ō>oī|Üp>N?ĪįTuXÃZ2ė]ėņĢą_ž7 ‹ûwK`Įí Ģ“ŊJŊGŠéōCp0ķŖ(žčuũhyŦíWļÉųvŽÎAÍTÔ´Ûoq+ZCįŦL@qëõĢih͔ēˇgā0ķxü*FhŸJ¸Ų:˜Ėg'ԁ•ĄĐtļļ#Ę#æ“wÜ8ĸOØc)ąlëĩ˙Ö }kW#ËåN#Ëāî÷ĸ\…=ų1’ŧ/č NŅWėq9ŧģE|Tll>õ`iˇéū§V—ÎnŪģ—{NâÆ }Åߜ˙wĩNڃvģīĐŒ:¯™wäę˛y¸22äŗ`úĒé:ēÂæH-$\ŅŽA~zÔēiܡę~yĪîø;yÆJŧCnã\pÅxÆzPw7ëĢĖ_Oķ%ØĄ|š0Ē9î~ĩgûYHĪcvĒ ŪÜ6Î*{=ŋiž*q“ˇ†Ā̌z–SÆv0w ÄĩÖ-Râáäy3#—ĢŅjš{ėæ5î);qĮzuœkæÜļŅæ›kāpI5­´ži’ČõŒŨ¸ až)5I%W" ĩ˛“Ōތö팱|V?öEŒ—ĶnˇÂÆĢĩũū?įŌĻ:ęîûÂąĄŧŧŽöāɧŗČģo•Gų5hjĐāīŽæ%ĪúĮˆāô cá‚)eē-;ÎĘŠŠmM”|ÖʁƜĶlu )ƒOBpŲŨWÖxØ’Ŗˇņ•pBP ŋ‡āt‘’I#ģ/ĘĀėĸ¸Ō/lā–HĩGŋ{vFkkMėœ•bʼn^_'¯瓞ŲM€ í#nîƒÖ€1­—^ˇˇˆ ‚T 1ÆE6īUžUnėõÜčzãž+ĄBÄ;‚¨ Ä}ņj‚į›ÛUÆX1!Ač¸ëH øŽĖ°Y’XĪ÷YzTÖڝœ÷NËp˜*ļv’}ĒėļđJ™¸îYsēŗ‹c<ķî…Wk66Œu  bᐕe'wŪĸ˛ĮŲ#?ŪäŸSXˇz Ánīos2:wRĮkŽ["ųwČû§øhf|´đ×vsũŪ*~ߨÎ˙hęQŨ'Ú,K…AúÕą¯ÛāųŅËīšhũē†yØüĀļ õĒÚ­ŧRF‰´ngUČíÍ%†Ŗhņ'IbpN0)פˇ–¨Žߜ׊°tč‚ūí?Ũj­ ĩâM!Žãp8­SQ[rŊZ€ą‰Ž"2ķĮÚ¯m§ #ÔUinĄŽķHĄ•:gŽO˙ZĄēŋ-nßg†WŨōĢmÚ3øĶzØ~â!ūČ ŌžnĐ)Üŋ•WA{"üÆ8W¸ûÄ{ŌGfítūmĖŽUF9ĮéĮԘ¤•#wU>¤ã5FBŲcc¸ą.ąRqĪZ­-‘ŒJWžyÅ:Ō1´`( gīq@÷×Ī$+vĶåBŗ äTŪn¤ę [ÓČv$ŽzÔ÷dļNĒĶ° ū•`į›ŋz€2'‡S’h•ŽŖS¸•eOE˙ëÔĮM‘ų–úåÔđę§>ØĢRmûdcwĘēvåEO“ģ~X  eŅ­žöU™å*Šœ÷fãō­&•`¸ZEœ|ĘÜíŠbhÄķąÂĘqōüšū´­{lƒ uGŨĖŖæúŌ­ĩ•ĒŪ˲đŠ‹˜ŸÖ¯„UŪʃ?Į…ûÜVdz­ŒwEîS 'lœŠ8ĮãK6šb#fYˆ°ˇË@ đøS ÛĒlVšr8gJÖ$įũĄŅs÷ĢĐu.Ā'ŲnĻbĖÍåĮ•9>ĩ Ú¤… ]>ėŠ8ÜvŽzu  ­ežvá Ø'=0Š*áûĀŊÎŪŋ­aé÷פHcĶ]ŲåvæPŖīN•`Ũęm+§(N~õĮ?ʀ,Ųį}ã˙ ˜îÉ8UŌ­c ãũƒˇîņXš|ēĢ#ė‘˛Ō>nGŦŗjûXų{yĘîrOé@Ųî7÷īœáŅOpƒüjčĮ/aģX6V2Ũ4qÚi›,ÅžRkū'Xs˛Äc¨Ã|üPģpÆîįæä2Žė}ī—?ÖŦz§'-c[.Že”âĪ_îˇÉ…*ЏVĪúë@F77”~ր!ˆņ4˙ŧ?%˛ŒņũėÖŽN3´˙šĮ>õÎZ&¤u‹ĸĢllaÁC…î8Íiyzžė}ĸ×§yGžzu  åÉÔĸ]ĮũT‡w/+VšĪB0zqķÖ(]M¯Čcj‹”ōÎ-õöĢ,šļėyļœáĖgäũh{Īŋl9ųĻ^?ģ€OôĢ8=3Ī6ÍXwÛ^|#mžD„”üä!äÔØ×‹äą*qōío“Ў¨ķh8Ú­" ¸õqVŠœāōüímŋv°oNĩē$’+F>ba×?1Ũ?J˜M­ˇ}Š×gxÃõ  sĀv'Ë÷¸ĒēXŲ֛‡ČUJ§Ž*”÷ZÔyßcŦÁ–CLĶ.ĩ1kϘĨT3c<FhmūųŲ÷øÎ}+ŸđŪZMM܁Ü7Ė9˙ëÕģGP—~”åK|ģf ÄđÕüŅ *ĘyŨŸsmnáë@q'ẁã;T7ŪĒVšūÖžaķ‘O?wå'üũj¯öŪ!.l/„\æMŖåæĒÛk%íÛ<*]ōGɁÍ: nn1ķņķÕI‘ūđå<§ų6grsU_Ķ˙姚 …hOîø¨×\ĶÚųíK‘Ör„ĪJkI3ŅÆŌāėcV~ĄadÍ-ĄØĶūôíÁû§ü*eÕ´×_–ōõ|6sQ^^Ā÷v{.!gą ˛đFÆëúP1íŖé¯°=¤* /oãŊgęZ‚ZŧÉ$‡`Ú¯÷2zÖōēąų[~O'p;8ǚ—ü{(Ÿ6 Ė@ųÆáH CÐ!›¨äĮ힕ƔđY\‡4ZÎîŲĸ”›˜ŧļ‘ķķķËqWËįĢ áuĩk§XŧežË Iš˛íŧŌ˙cY|Ÿ2#ÔI‡×Ĩ 'ˇÉŧģÁËîų\¯ ōŽ?ZŠms÷c9Üy5‰mĨą34w×PĮæ• Ô“Į&§û.­e5–@?ÕēqŒõĻ4o›RÔåÉcæíØ;ķ[$ü`É؊öĪJæ4FÔš’Ū¤-/Ī#dį+OûFá3éŗ¤l~_,äîÍYŗ*ÍrU°†~w$ņÅY#p”ķŅ1œZŰÖ-†ī;ĖI^CšJđ•tęv^\›nŖ,ƒĮ‚Üv Ō۞媉ŋÖšSũj "ÃČ/öbüąž_Ўhßčp ÆÔ ÷¸š)g;ųÂ1ŪGAéH Û=*xíb1_Ė“mžUTöÅG¨ĮŠEk…šKˆK._šLž•ĩł œ&Á’ U{åf{d}Ĩ š„]_ÄTMbŽØČō›…Uū؀ŪÄŌ$đƈܚ.Oô­ŦŒz)ÜĄCm;ōĢmÆ?:’â$XQT|Ë´ãÜUž};OzeM5ô—qmĩT(°ĪœņŽßZ˛cžb Í.>ōĮŋ™ŠŽMÚÕc;XūjnxĮĒ˙ZÉwr^žûįQ~âÁ'ü*cĨÄÃ÷ŗÜČMŌˇ<$5ħ$āĒŠõųsĪįS1X°ū {Ō*ÛH˛g•š#,„(fÎėũsWb˛´‡qŠÕXōĘ9Ōĸ´ģĩX\ŊĖI™ä¸Äi[Vą_›ípįĄčÖPĮ—FĸC$œãļėJuîÄĶįcøö1)ļŗí5̎ df9-…F';‰¨ĩMb&ĶfĮ8yas h4{Q§fwqÎNqWųôįēį§ŊeiWnšmēũŽáÂÆŧ€ tëÉŠĨž¸Xw}ŠnrĪŨĮր%ĶãÂ"NāįŠ,MYųŗūŪ98ÅfiĶŪ-„*ļ€í‰AĖĀvëԟ-Æ °‚,ãÆ2ÚOū;@ißōˆˇŨ›Œį%ŗVąķ˙ļ\b˛4æÔÖÎ [qrŌˇ#˜Šˇj†5ũÅŽŌxËž•KĻ€mebšWžLŒļjáwû\íltŦ]1ĩVŗŖ[@nˇô$š°WVōËe´ŸģĩũhÕ§úŠX/Y_#{œU‚9_—?ŨãîņXö+ĢUˇYō]ƒcŒĩNSUØøkLs•ō›æũh°ęڋgŖF§ßäĢøWäųxÂā|ĩ§GŠ5ÕãFÖģŧėŅļ ņÅhÕ˛ĮĖŗ ÜųMķ~´<\ęSüË Ø÷jŸaų>SœĻ:Ö5Ējj¸ÁĩĀ(ģ|ļ㌎ūõp.Ģŧķgŋ{c˙O0&úÜwØtč?­OŨ°1ĪÍĮŪâ°äūÕûj~î͈ßåųÉĢeĩ1s ™<í;ŸŌ€'ē=šōF:|­VyŨ˙M02pqXķÉŠũĻm­ō˛dâFįä>Ūõ?Ÿ¨ˆĐ(ļmÄíŸũ€,_]:á˛D~[äķœÔĐ ŠšÃų@=EejWW˙c¸b ˜ˆ;gČ÷Æ*ŨŊÕŪÁ˙ų ķȕO?-HØŪSœ}ėŸģÅbøH8Ņ×wČ „ĢËTúŽŖFÆ ņߚÎđÍø‡J ä]LÜŒ2¯Ō€:CĘōŊšŠĢb7KrØË›cîđųúU툂+.Ã`~đÛõNÃY˛XæWķ<ŽÅ<–9É  íĢķ€~—īņYâŌŅĩ=ŧ{(üĄŗ§ŪëųRniÍĪÚT8ÎŨĘĘ?†ßUą:Ã‹¨ļēF gĮMŨ?J]:u›Iš­`iv€ÃoÍeŨčēkŨ[D‘‰üÆiŋJ׊ōÕÂĒ]FTc %ˇĩW–E}ZÛø‡’įËā÷^hx{N'pĶnrŠ˙õĒ—š äŦwIžU7d'žAŨØÉ†ÚûxÕZõ€–߲NūšáJ§“s+Uēķ<Â܌{fĄŧĩÔ”ž^§žŨ”cz ą'ĻkoĄ@Nđ|ß{Žõ ŲĖ\ōK )‘ō|Ũh–ŨebËI1l?7=hšMb9?ãÚÖVÚÅ]X€žÜ֘ ÛLŪę3Ō ŊhŌÆrŲHv6â24“Ļß]CĻĢgČaUËēÉĪN ¸uo,:Îî1ü?&íüUĢ<­Ŧ ß}bâ0ßxqS¸8|6O;X€Bq@ēn¯§­˛¤’lËŗ)Ä|“Z1j’11\ÂĪÆķģđĻiŅÆtÔĖJ×2åqŋŽ´ˇ}‹Ē‰-ĸ~æ8-Å;N}ÖPüāŊíV8*›Ŗā‘…ĮŨ5“eĸØĩ¤NcbîĒK+°íĨ:CF?s}uQûÆ-÷¸í@ôīš#pdķ_wP1¸ôĢ#•[åā‡ÎwV&mŠ­ŦmōÛ-2įw^ĩ<ÍĢÅįŽÖa׌œP|4ŋņ- ü‡”˛€:zÖÉį[ŖüÜ/ĢB¸žßKĘØČņd–‘\dũ_›WŠÛ4(vô)Â€'°@ļ •ÜK_?ūēƒSąĩkIK[ÅŊQŒx\cŠ‹OÕ,žÍ}Ļ/5P¸m ͊ąsq֌!™€Č|äîé@×BŗÛûƒ,gūz¤žũ*ŽĄ§KšŦwŗėfP‘??1=Ínžq•ā㠏ē}jžĸFČÔžĀŌ ‘ķŒcž)Í^0BĪm1îĖģvU;››åēˇûFŸō‰ ‰˛]€ëô­Ō?ŧ 6õĪŊUvÚKœnX›{rãXkQ)ÄņO cY2ŠIe¨ŲÍ<ė%EWpOąŪ´Ę‚0Ã+ĶiįwŊg[ŲZĖŗŧĐÆîd`îW{PÉe_"F/ w0?tâ‹E k …ÛōŒ;ûÖmölļíä‰PãUøö&ž,oĸ\E¨ąėŪb÷ö  ˛œÜÄãq$įž:T˙†==ĢĖÕøy‘C+*8ÛīV$Ԍh|Û9ĶĶ94fĖ 8Ęŗ?ÚĻ_[Å*aŅ~b›ū –§iöt 8 Œ’Ã€ŠžhĨ¸…RE';°A@ “L€ũĀҜ éUtĢYV[–ŠvÆü|ܓZŽFÃßúÕ}f՜õw$ĐW}]#px÷ŠEė¨?{lãũŪjÅĮ,‹ęÕ3t  ­”,+×œzōiqēé=ęEA“˜ãXíöĀ26)#Žáî%ķg   „\c¯­P‹ä€¤žņJ†)âH´Ģģnsžĩöą‹y7nv HÜÄՈãŽ4¨ ĶŽÔRæō6–D’AŋqaīRy÷,WËĩ9õw ŸË5$™7‘qķ*ą?ít˙˜ãĻ~\ú÷ô  Ä’ŪĘsxU‚ũĪŌ§6×-ģ}ė™ĮW?Οo“svärTā}ᴍX=1Ÿ—ØũßjËļ°F2ŧ“NāČĀūõ†qĮjœév}'û͖ã>õ5ŸúŦŧY›Û‰ĨšaŦ”) cîđM )éļVŋb…ūĪ,€œ¨ãŪ­ŧqG ;jŽTúņI‘Am4¨ģ–wWPÔŦŌŌp.Ąge#h“'8í@,ĸHŦâUP0ŠŽŋ-Rņ.ÄŅf ›†T'Ë÷yĢÚÖ8âáItĒŗ*ÉņĄ Ö"7ō ĀÄÃwâhzŅ|ģX”)P ŧ|ÜS/Ûe…ɁĀ~Z€j#o—žÍäãVÔīäk9TXŨ.õŲČ\sÆzæ€5c"EÆ ŽgīqMš8ˇ˜Ž~SģžœU3}såœiķí'šT?A¨^_}–\éå2ß¯O\P¤Kļ(ņ´ŧûw¤v+ˇ€ų˙.ÕKí7ûũ6ķģ7=?J‡PšÔÎMÖQcËl9;F>œĐŨ9véöŠũ<´ÛĮ|UŽ}ˇ€2qÆ+*õ5€°‹åP3xíÅ,ˇĸAŸ°ÁˇoĘ<ãĮJˇ`öt_‘|ģyÉĢöķ0pÛxÅeZËĒŦ(‹gdEšSČüŠÍ6Ģäƒö+,ã æļ•?Hæˇ<Ŗ\˸c$ķŠĐ#æÆƒåûŧW=ĸËŠ}—÷6ĐĖíŊ܎­ČéëWŒúŸ–íö6sŊ|Ķ“ôųh՞L÷mÆ|Đã¯Čĩc ĩF?wÆŅƒ‘XÖsjyũŠ´ŦW2Ÿ”Ž==ĒȸÔōäXCŧcwīúũ8  1ÔÛîīXGĶ–˙ëTįnÆ˙ž|îëœÖ"^_ũĩÉĶx) 'éÉ#šĩöíGĖ égĖ œc  ˛įí1—#s/å˙׊sÉ#¯ņüŨ+MNqp´éÂė}ØpHåsŪ­Npę¯ĻŨŠĪ˂ŋ7ų  u<ģžF(ˇ}ė°âާ-’pq÷súÖū¨L8k+°|Ø÷Ŗ ‚ [ƒW‰Įü{ŨíÆC˜?•$ÕÛn—xyaäšŨĮËĮJ¯áҎDˇÄe>\°ĀųęžŗŦ[6›s&Ū2Ą"šĪz4­bÆ-6Ū9n˜‹€ÍÂPæÕÚģ—÷.ÔÛ÷jϘŋčÛ¯œY‰8ãÍ3ûgMÉ+wlüå¸ĪĒ/Qąū΁î 3 œ÷  #‰âue_%ˇn$ķšĖŠÂŌmRí¤ļˆ˛ŧ|ß/˙^´Vō9Yâi1÷VQŒfĢØ¸{Ģũ˛d~ūGËō-1´=5˜Ú)/Ę:'›˙õ™ÔRˍ åŗ÷ūjčķĮm?7ŠĻĒŋÚLY~O).ßērßáHE Âŋ4w—q@GÜ sœÕ[.ú;ĢxãÕ%yIvŒ9Îä~5Ņ îū6îN1š§1VÔ-Õ_ ļFķ7t9­1•ž¨Œ<­Wz˙xÔėâĢŨ.ĩÉm  f ō+y‰*ő°3ōpwÕ[ņķ[ŠÁc:˜ū_šĮ˙Ž€(ųú˛EûwļíTbĨOŊG¨^­­Ā—Nu+ VPĘ įšÛ|íÚ[ I×ĶĩSÕ>m2EW!PŦ;ķڀ)[ëQ-Ē‚ņHŅįđŠfÖ4÷†Ev(Œ­ē6‰jĶꡝĶŨíiĪZ¯Š)ûÁÂ4ËrW´iö8ÜÁæ¤`ķ1ÛŊYš¸ŒZÎc”?ČĮp`vņQÃcfmR! F,}ãĪ5WTĶ,ūĮ4ÂŲceF(žĮŠĐˇÚ'Ė6ũî)ōĢÆ7(&5ŨŒņŪŗą D) ŗG.2ŦŽĀ ŠîÆæ%x59|ĨVŨæ܎ÔĄ§˙Į„;XČ>n>CŠ[ōEË Æˇ|ŧąÛYĐEĢÅf ũžTo”ËÉ…3XēžŽĘUžŲ7Č2G' ĮJ_ŌEĨÛĢd ÂĢu-ųŝÁSķ؇#8öŦÍ?SX´číîÕ€$Ųģ4ëíVÆkI#ķ-€#d*AĪZC/-ĨĢ[$M ~WqķU+Ũ"ĘB­äåvU>YÆÎz֌71IĖsFíŒ>Ų2Ąŧ u`Å|Ė7Ū6“L Øëæ ë˜B˙­mß{ŠĢuĢÕ˛­ÚNûÎČŲ@ĀĮŪ5žxá.ĘšĮQōڔ!XíXŨ÷đwr8¤_´j°2ÚC6Ņ–’6ÆG< ­Ē˨f{;ˆöÄ"Üæˇ8ÂíP2‹ĶZĢk†ŊģebFå˛#øh5ÕŦXö…ug]ŧz “M’3kÆSÔĒĢv'ŊIrˆmÉhíRŅĢ/N;ÕHt›ĩŒ ŊO,hÍö J ųK¨cŧ3ĐUžŸūž‚ąn4ÆK˜ÖæXÜļå r¨¸ūu9S…O—ę˛āŊZˆnŊ”‘ĀU^GŪ>ĩ%Īü{ɓü8$vŦ˜//!–áŽ,Ëá°Īč1ĐT—´^ĮI"s‡^œõ  ŗÂŅ"´IĀųT¯JĄ&™l׃blIų7Uد-ĨdČsīÉ4DC]JAč?Ō€(ŨŲË ŧä@įwé€(}°5á1Á3ė@íیŸöž•1žņƒļDĮPō@*Hąö‰ÛPTöīŸÖ§ô9Į×ë@–qŪēģŖ‹sˇDÜF:“íRĩ­ÆÖß(#’"ņëŌĻąĮØŅļđäšSœŌŨļÛ9īā;[?{ŠĢgdŋd‡Ė–v܊Gī`ã=Š—ÚmŠĩ‘ŒEœ rÄî?‰­ŒŒ 1üĒ īõHŊˈz|ãŠ@1tûÁÅ´!Oņm{R^A”ŠåFȘvÜ*Öā äŨIŊj•ÕåļmÁ¸ŒŖJī0{ŸËĨ^Įäúį5‹âWŸN—.næĮôūU}ĩKcēōĀ üücÚąu-JŌmGMhî­ãmí…9_­t˜ãîäw^ĩWPæŨīn–1ģū8¨ļlˇq#–8ų–;ūœU[ŊZŲÚŲU'•Y“É`WŠ  Ą×§ÍŨsīÖĒę'6Lå•sŸVĄ]UÜAvĘqļAßĒ×z“HˆŋbģW2!*SŽ?Ō€62sÛĖĮ ž1UuC˙éöũÖR§×'ЇûIđØo6a°3œũjļĄ,–å …Ōąe8Û÷‡ŊlķĶüíëÆ ŊlYÜ0čˇuôíU?´¤Æ?ŗ¯väādÎĄŊÔ'kié×*įå\‘‚ķ@Ę6Ē)éÆŪžčb~lŧcvsÂŗÎĨ0ÉeŲLüųÆGĐf›&Ĩ(SŋLģ>é9ãŋ4ē#Fˇ/÷[ž=KŌ;ŊˇöôÅaiWķCa GĻÜžÕˆÆ1ę9Ģ-Ē2 ÎŸ{åCį>hՉfvĪČeˇ\ũãVOŪąœü¸=xīXÖZ¤‚Ų?â_veÁ!Bü¤RaW'ėWž_;˜Į÷(ŨšcyrØ\åšéĮ˙^Ŧev›ä8ÚÛēÖ%ž­Í;{ŋšO”Í…š›ûv!‚Öˇ`œnSų(ë:ŠüŖp‰ž\˙´?ÂŦzá˛9ųŗ÷k5ģ3xXË0O,!ˆōsĶĨMũŋ§í,]ׯîĖg-ī@ËwܘO߯§ĪŽjÔCŒũҁ„ĮŨŦK­bÁî-qr­‰KîÛ ¤ZŊ̧žü]CšqšŗˇwWĸ]ä°ËíQŋˇŽ*Ɵ #I…<­°ūt(rMfø†úÖãCeˇž7ɅžšéZļ—0´p§ŸN#č­Áû›x{ LW&<¯ĩSĶtÛ/ąD~Í ģ"ų›‡N*ėĶGöiš9 šˇ}ĶEŠÅ´ H\*íÁû˙-*6‹ĻIOŗ N ¸<žzU+MOvžVˆ:Ù­ŪĀ•ÎqōqōUM01†SÆķ4Ÿ6ŪŖy eSĄ[ĻåŽ[„v$ÆË#|•V=*VÔæōu•ō‰ l“Á­ÖŲå7UŒįwPsUm˙ãūė–ÃīWwŪų?úôOû:ü“Y‘c8ōË($Õ'ļ×ėCíPË(ŒüĨFūŋÂē@Nīīsķ “ЍŠNĒØ?2šrŋ|n?á@ņ¯$ģĐå;IF=Ē­ŨūĨ–Ķiā ”îØį,pzVūËûĨc'îí į5^ë&ūĶĄ‘K°]ÜŒQ@ίrŽ‹>™rŦ~āBwV˙Zˇ’ܤÜ#y‰ņņ5ŋ×![9ĪĪĮČjŽĻŠŅDŦƒcNž`+Ÿ2€ĩ§ļ1tø ÎĨw //-%ĶäXîc(ËōâO˜ŸJ¸ööė"W‰ßõJW§Šéļmao‘Ū4}¸9ę(U[pŒœ   īUu >Ęāō˙(ߡąqÅVšĒˆ„‘˛ã2+ŸœU{Í2HâˆC}pąŧˆįo4ˇšq÷ļÆzāį5_RËXM”$˛íØ0{õĒĢoĒ!uå~ĢD0žõûjqZ˛•‚líEāļOAū{ĐēŠRs x¯ĪJËņ ãF—g(ÅpsÉųŠËyxąÅģM`‡îĒKÎzķYšöŖįZy/đžõÜFÕīց )ˆb ‡ĸü˜!ĒzœQŧ*$T%ĨE•˜cŒöĸ-_O`ŌQOņ—RĨøíEĖņI%ĸÃ"Č|ĖĒ,Ÿx=i $Ōlm>PŊ\bŠ\i*—°%ŧķDÄŗ‚áW[x$đAnĖGOjĻJF,|ĢåąKá@ūĮz`ÕĘū1C’};U!ũĒēĸîŠ ¤X˛ŊUcĪõ⡞bÚ=¸!*Ĩ¸SyvÄmRQā‚ÍëúĐsĒO>~Ÿ:ŽíĨŖ`Ųj¯eĢZų—fh]ĨĘŦ‘ņÆ9÷­ĸI'׸ÎBûÕ-:(žÅŧÅÜ$vŪJãyĪZ.omĨŗ—Ęž6ܤpü–ôĢĒÕãĄ+7QĶí¤Oõ‰• .>@OZwöLI&[ˆGL+O­Xs›č—ļÖe䚰}_OjĮŠ ņ&ËÕ}ˆ3Žp}O,úŒH7ZG'R6ž1îhՖ<œÃ32l÷ĻŨƒ•Æågã;Ē•–ĻÕ<ËižwmÎãOūŌ´–î,JŖnI,1jĩ-…Ŧ™/ nčXqŠĢšĨ0ŧ‘|ß( Âֈ‘|Ŧ­ėëLļæ,į;˜ķë@:„iå*ܙÜŦ:֑–ö%ųĄW˙tÔw_>ĄjŸí'Ō´OJˇR ,†hdCœtÍK.Ąm"…Œ“ĐÕĢu‘ՍAug˛F­õô  ‚BĄbx†¤ļĪŲЏ”Ÿį5FčŪŊŗ’°Ä¤a‡,GŊX[9H[™¯÷N܏¨Cî$U¸ƒs(#sN3ĮO֚×փ?ž3Č\ąĪáQ-¸ģ˙V íū#œņW*䄐ZŖmzHŅÅ+ģ1# ´>;Ņ=åЉŲ,›`ÉËČū•fĪŲ~o•É`sęzSu~Å?1]Ŧ=~ŸUˇ]MmãUČUåˇņIqo}$NųB7ĘÁ#vĀ­<]šĀtŽ6ûTW-ŽŊ~\öÜ?ΟpÍķßܗǐŖ•VŸI‹ĖYĻty9V”ņÁ9ë[#nS÷x=j´ÜŪی|Ãs>ūû5WMĀmßvĪĘĖŲßI&bŗÄEŦ įį{m?ũjŅgUCš‚Ž99eSšîŧŒĸF+ēNŋw¯ë@-­ēU‚1ˇũ_ËĶŠĘšHÛÅ G†3?Ë÷¸ũkAõ-=Cæō ŧîfOáXÍŠ[ÂHĶĩĖ^RÁąFhĸ ÃĮÜâĢ\ŒŨÚ.2C3Ŋ„?ãUΚĻ퉎w(Œ’ÕZ]jůĸe™ö*?Ė"?/Oo­mđ3ĪĮ%Vē˙YhŊz0Ŋō“UNˇm’+ĸÜáDįĒķë5ĖGu…ffQų>\ZÚŸ~7.~íUŊų–Ũs”i“ žŧįúUsŦ.āŋdŊøu÷øĒˇ:Â5Åŋú-Øe“s)îü§ühs'=>~ëžÕZûØr†Dį?íŠĒ瞐ƒė—ģËûõÚĄs›+ĩ“re tį˙­@ĝßíķĩsÖĢj.SNēt9ÄožzUcĢ.Ėũ’ķĘ?ōĶg|Õm[RY4ëˆŪÚę'hØSŒzН€Ûcj­ō‹ˇžŋ-L̀ÍüXų—wJ̓TTļOôkŊpÍåũĖ mæ¯vō†å0Æ1?wOĀĶíÆī“Ë\6jrĮ=>|“=k.×V…mãMÉeD ‚ų}úR˙nYíäÜ#‰L-ŽŊ:PģOųx=Œ­–ĪŨíV=>cĮĶįŦ[MnÉb”—îŪXˆĀˇĒíí7<Î}˜Æ~OŌ€-Eƒ}1Ųü6ņōũę°S?Ũ/؊ÖEļŗaö̆7H9_™†7ŒUŦi†5?k‡Ë8Â÷>” }Ėq›¸”žY.]vrxĢBŪ=¤yQãø~Z͓P´}JßeÔ â7įĢA.mZ)gMƒ;›OZbx–x,âu‚$”ĖĄ™R´?˛ôÉXÚCåļlc&¨xšPĐØŦe\}ĄJüŨF+q[œŸŧ@Üģží2o4}=-fqjĢ"ŖĒĮŸÖž4;<&Ã:ãŖ,ĮäĢzÅ„ã$ūėüü~U? ۄįríë@ŋØĒŦÍ õėmüGĖÎū*•–—pÖu9㍛*ģ3ƒšßl Œ˙8ĒÚWãʍüôī@žŽ˛†]N7/Ũh°1øUkQŦ¯ÚĖRÚI™įlŒ6Jß^To“‚¯ģ9Ē–)påN ΘøįœJŠöq æÂüÛe^;ËÕÔ$2iO DFf3ū&ˇ™~aĐŋ%o U-øŋŧn1ō ü˙¯@—V•B´ēmÚËĀp*¨¨_X´ûd%ŒéĢ1Ŗn¤Ž:VĘãä]ØN6ßzĢÉ˙!TęÃÉû¸éķh°×4Ų“8Tä4l‡&™yym5ŚÅqĘ%,¸nÁëúV‘…[†Diû˜c5›yeb×vĘÖđŦN_sciÍi c`å$rwļī¸qPߟ’%ÁĮœœp|Á×üũ*ģhÖ'-öb˜ČŲãpõĒ÷ZNÉ­Ö;Ë æC°–ÜŠ@lŖ¯îÆßģĮzĢxG›n3ķ×< )5[ė7Ǟy:›m$ī2F:ãą¨îĩcšŨOŲĻebT ÜSaxP'ÅÁŪ1Tī”mˇ]ŖũjyK‚6ãÖĒ5ŪŠúÍ5d~Le!8éUîĩeķbÚÜ@ģķ+īˇPîīŊķsŅÎīšÅcø‡k}Ž&RCN3Į/Į˙^§]nÅԗ”ĻŪ62ũņTõ;„ŸTĶ– ␉ dJŲ–Ų†ø‘ŨAōÁb˛ī4ģ)¯!Dˆ bη;V˛˛˛üû˛~đnųéU$ųĩHˇŠĀˆávįiÜ9ũ(]´x•†âę?uÉųŊ{ÕDļÕųüģõvXÔHÎŋw9˙?ng,˸ HŨ1Įj­ÍsrNHVTÛÁŪ6ņ¤2ŖIĢÆæZ[Ν#aŸŪ ˛ÔĻK‹§šÆ}ûū}‡r ĮķâļųŪzŌ šĒšwüzļīv_›&A“@¤ÖlD8™Ĩ@W¤‘Č1OĶ/mžÉ }ĸę˜`EOŠ.-'l.ņÃ2𸨆—bĐD>ˌˆ2˜ęÜw  nJģ[Ļw)qÁ߯sVsŒ’FGŪn˜‰>ŪÄļōK ųIá}XûĄũÅų|}đAãŪ€-ÛüĶÎOf ¯Nôˇ¤-ŦģQ‚G5™m.§LÍmËæĖûqKyĒ:Į˛{Ya$€ÍÕTPŧkˆ”t!@Į]ĩQ­`–ûį‰ÄƌzŅŠe&œöWüi֓G,Ķ´nŦš!皊m.ĶË%uųOŪ¨­ėn#<ĢĮ^9 2Ō´.Ž sß•>1ļ4QØPDbüjiŧG)E<1Wåŧž4&KWĮǐh´ųĩ †ūęĒįÖ­\ŠoĨTļÔ ĻâČqŨMH—PKpģ$SVDk°)QŌŠ‹y.Œ``v  yōB/ņ_øÍMÁ úU'Šc4*÷d‘ąqĐTßdŒ’dŪųā†cŠĄ ûD)u3<ǘJ–úķCß@Šō—` ą“Š[X#C!eÎŌ^1Oģ!m&l|ģIÁíī@­î&[hÕ,äĘ  ”ÅGz×­iäāBąrØäuâ´ÆFûßÃĪ_­UģųĨĩ\­7#€ķ@ ō¯ØsqsĘŦ_¯&ĢÜÚNŌ[Šŋ™•ß‚6á'°­LãũėpxųĒŧÅZî O\ļ;põ¤'M˛Ī5Ëãī5žn;Uc¤ÚũŋfÆ+å1Érvōę~ĩŦA-׿ÁÚqĀĒČŋ˜ėā" ŋVnhŸf"ŌãøJŽ}ęiiũ q{<žp;–˙ëV‘ī8ŗ9öĒKuÔ&/4JB ŋģPĄâ4=ÍbØGž!ÔXEōU ¯zŌ:•Ѝ&ōœm>g9Ŧ}'Pu-BYŽbRî¸nĖĨt[~nƒ~8mŊŊ*ŽęDų|šõoūĩ@u7ëÁN07Ą]fĮíŽßh'äPFÜōxé@ävĪŽŽ=Ē´œę1|Ŋ#sˇ×•ĒßÛ6D|Ģ1õŒ@Üs×ĨVÕŠž/™Čā0„õ-éŠÚõįŽ~oîÕYōoíF>îöíqëUŋļ ä k­ßķĪČ<ûÕyu‹c¨Ä˙ŋ‘¸-å7ĘIŪÔˇßųŒũʆoõ–ëÛ ŸŊōš¨uˆ7ä]nįjųįũ* ĩ‹´Ā6\ ŦK ų>Síī@üõĮÍÆS=+;^}ē\~`åWwՇŖWˇ$e.Fpŧ†ų˙JÍÖuH&ˇŠ5Y‘ŧÔ-DFs@8éČwÖĢj\X\wĶåâĢmYŒĶ=$0ļ:ôéUõ fÍ­$Qæ+7"7ķ×Ĩ6Pa@ä`xų¨#åÎĶŽ>L–ŗ˙ļ´ū?|Äg¯–pœ})ĩ§n?é*Ŧ1–e#u,دú8ĀÃĮv=XÔĖŠĩĪ–6sšvũęĖļÖ4崌It˜Āų{ƒS˙kéåņöØ<ĖpŸÅ>ÚŒ×Ë_õŋ/ËĶä7ŲáŪO•ū7jžĨcļáÜA|Æ-—įđ̟lĩ;GÚbäüŸ?Z¤ö-}›hŧŸ(‘ō÷Ü*éąĩōĪúúl s+jĩҜDģ”7NM]Ü­Dœ{4ËkÚm‚^Ų$hą‰Ļ"B§é[ØÖ$*ų%vcæ ÷ꖸwk:Z˜ˇîJņķt­ĖsëũŪ>ī ÄÔ4kT´wA2Úĸ0į wT˙Ø .ÔŊģķĀųd2jÎŖ˙ā’ Į~aV~_,rD]翀2ntŲãŠW‡T¸H‚ą}˙75 –Ēļpíԕp Ä†1ČĮCZ÷îVÎr~ø‰Č\õëp¨ämÆî>N(3Ë×ÚĘN7Fɀ•[L—Yō›eĩģė|ÆlgæäWAëÔÕą÷Ēž˜iĐņˆÛ•P9ĐI5 čã-&”ŪAÎí’eŗš­°ŅŨÜyš}ؔļUgŖ­oäîėeĮŨĪÍWĩ!šāĢpd?>GĘp(Šø‚ËwīéĪ;Ŗ˙VqQÃĢØž¤î.Šv\oäæļ\.×ܟ)ÎåĀ;øĒ inúŒÛāļĒžNœ´īˇÛņ’ēŽjąÔîŖ”‰tŲˊ>o-ˇ fĢmZŊôNí,*žgNš#Ō-ī”üĮŽæ\ŒgĨa^AfúõŦ>R,NŒHÛˇ'&´áÔl% ˛æ ¤üŠ§=j’Heņ@o‘ļ[€Å[…˙9  H´b‰Ņ¸ųc€‡ÖŠ&4wķųZ„é˛5ķ×qlįĨnŒpp>ņےãÕRßū?îļãzíT\6í:­äęĐãeÄ„TeÚXqÉĒö—:”o9k•ŧŌZDqėúVįŪû­Į÷¸=úU;ūŠ­Œowd\ƒš4TęëcÍŗē…zÆ6˜â›ĻęVeŠ/ĩ¨”Žâ_/û5Ĩ;í‚Vߏ”î}ßpâĸ†Ūĩ‰dv0Œƒ†õ4üđËhĸ'VķDJ›<毎s†>įŽ=Ģ&÷Mŗ2Ãû„Fy6ģÆÛ6œgŠœi1äĪs9UŨ¸ęs@}íAz|ąe`ŸZ˛OĘH$ŽšëŸjȊ åēĄŋGUc"íôŠ&›UŽ6ÍŦ26267Üâ€/Z¨C€ ų€Æ6Š=)— 4–ë÷†ü…Îw{Õ+}LCmËip˜Qˇå?1īNūĶŗ–õ10–,1˙  ōÊÂDVĪ JõĒiv˛yŽc ėÄ|§îU˙6=ŋ+¯Ę;‚›g˙Čpyįëī@ˇzk* ‚ædË ¨["§1ęQ)Ų,s(ūđåĒÔÜÍö-Īš,‡O   ­2âédši ŪÛđJU›J0Ȓ!$}åŠtuÅĄl}öcSˊōFŦ ŒĐ%åŧƒå•:[fVŪÁųŠŗY[¸ųĸZ­m§FąeD$öjÛ87Đ) =3Š•›o$€~Ŋjœvî×2'‘Š…š…=ím‘ <`¨[œ{sT!–÷–ÂõĒw3ĒrAŨč*;ģ°ŅmXfgrĢū¯hέZÆ#ĩŒ„”}).ą˜œ”a†8Į8ũ(ĸyŨxĩp¤õgžŲĒŗ›įŋ„áGUfûŃ/ZĶÉëßø†zU\gQĮüķ‡ål}ܟūĩ3ĘŊ+ķ]Åôų"ûžÜš€Ú\žĄ‡ž—)đĒŽ ú{VĻyāsŨ­W‹ w+g+ĩ@9úŸëH?ŗ‘‡Ī=ԈŨŒŦ9ĒđivÍsqŊ]ĘēĖäįå}ë[ž¸ųŋ‹ŽŋJ­hī›ą”íãî`cúPkĨØ(É´‹Ã(;jŊ­Ĩ’\NüŽ6ü~AíīZO*Į÷œô$ õNÆhˇ]š•BN[wLq@P€Ėą§ûXŨĢ'ÃIŠåŅNƸm™Ĩ_ûuŧvëēâá>@Ōãwë/Ã×öéÍįÜB…äfegÁ  ā BßĮĮ_ĨWˇHūŅ.#.ĐŖwūŊFÚŽžlƒ?ÃķgķĒĐjÖ"[–k¨°_§÷†ŅŌ€5Bķœ øl}ęĢ ƒ}1ōū]ˆ6āqˏûcNĨEáãîņUíõ{´Ü´ĻK/;OĖ6ö  m§×æūū*¨ԟ÷|‡ËĮv?áP˙léĄW÷뷌.ÃōÕxuM>KųÚK˜ĪĘĄY‡­līë†ūíV˜fū—ĸšĮ7Jޚ•ą™eS'ä*I<ÔgT˛7Ē~ÕļEj㞙ãũšÍÕĪüzŠQķ\ -ëÔ˙J“ûZÃ-‰Ôc;—ĩgę:…œ×6;.ĸ(ŗnĀ?wƒ@JU†6üŋÜÛĶžĩ ģĄPpXȘlļ)˛j‹:ææ Ûy$ũīĨVēÔl ÅÄ% Ģōîäsր4Š)WųÃËˇīSe†" I°wåûŧT_Ú{€û\fĶģŒS%ž´0JŅÜÄ@ ģæö ˛ĩ€ZÅļ÷ėMħ^(k&‹k[Eåvų9ÎiŨÄ-acŋ•ZzšœĻĻ^7ĢF0>•fđ6ÜÁ›æį§Ęj× Î9ûÔ‰}Ē–3ƒy‘l?ŧ)†>Õ(:ĘBKAhā5$÷ĢzŸ6nS†Ú6cîŨjÖÔ9Ãmã—5Χ<Í>):”ōåûŧwâĄĶu Ÿą!tĖUWwÍÔcĒæĩ.Š­Ŧí÷Sk9 Ž;RZļ–č˙)U] ŊōĐqÖŅ#O6Ōö$8Úå3ģÚĄ´×Ŧ6Je.ģ¤'Ë1įŋZŨī’ g/%SĶcCĒd2>į+÷†ķ@ ]_O‘¸ģ€ÉÉRÜMĩģļk‹ÖKˆü˛Ãsy>QŌŦKeg${^Ū/(Ÿîķģ5B&ÆYîKeŪ$!cVíū@lnéĪN€ķņTãįU|Ž@‰6 ŋsī…WūÁŗyČį%dW?%C˜RîëÉŊ¸E19cÅ06Á+éŋŖžƒđĒ›ˇjP(oBJļėīäqUžÉŠGÄzˆmŋę’D8ĮzŦ­ĢŽĻÃķ?”=–:Ûęrpq„ĮŨ5{žß)ā˛Äģ­TūÛ¨G¸ÉĻgo4o÷¸íPÃĒ*ŪMæ[]!ųBŽÜ“…č:@l Ž×;x*ŲÎú­åĢ߆x‡ĒWîjŦ؜o˜ŖĀ’2<ŗŠl7öoypÂæ…]ˇm,yé@ĨĩĩHf†"ÄbV+ĶŽÕ…™k.ˇwVō AˆŅ°_åŅy‹Æė}ÕVxŦ-•ĩ}MūQ&ũĒė8íL šŅļ Ô.VAŸ/q܊=9¨mĄÔ–Kƒ ôL†_Ŋ"rĖ1‘ũ+_åû" \rAÎú­c (ėíķ<¯ōä˜&€ yuHĐ4–vōįĸŖcaį“š­iŠW˛B¯øĐģ\´— ģæ/Œ˜ioqöW~˙ËĶ’Õf×Kc¸¤36O|;ûũ)×ח"}ĻŲ”3*ģGĪŋĒŖåëõ ô>•Uíâšė‰ ŒíLËĶ&š5KoãfŒúH‡å÷4–ˇ–˛Ī+$Ҝ>ö7@Ũi–BŲ/qąˆ&’>XâMôŖŒÃ5rf F9ôį͊2Ŗ¸$ Čb€3|ŊEn2Ã&éŠ}ŨŨÔP1{3Ķ­œ}jä5ÞĀ?ÆĄÔäUĩuŨËqîM3Ož†+(–@ęqÔ­N—–ōÜŽÉTāÖ§@ĢlŧÂÕi,ākŪ¤|ŽÃnG]„‚)a‰~•s§Ā‘’ŧy醧ŦJŋēšī ۇ%¤ đ_* S/%Dĩ˜ą rqøĶ-í”ÄZF’LąÜ uüЎ°bĖ,¸$›‘šĄûm°ÚĢ2ąt¨/üĒŧ— ŨCåÛÎĀnbĨ6ãߟ­hPŅōúcĄ¨:߀Αúũü˙ú¨†{ļųRĶ ”É'ķÅV‹íŌ^\8Ž*2œˇž{zÖ§õR}úÔ0æÎØųˇō@ûß(  7íÃ^FŊÁH‡ÍíÉĒđÚÜŧ— %ôŋ{kė ?„{V§zá{ķ÷jŊ™ĘšĪĖd|sÛ8¤GN‡ššfūķ•UļĶ`6ü‰_{°eiæį¯_JÖ$m'ĒwæĢÁōÃz –Įc@}‚Î<ĸÛ+îqĮļM7Oĩ´hˇ­´aË6AQĶ5mÁBĖrˇ%xāúÕ{&Xlby\ ʸ;ēûPW6öv–2 Q˛@æĸŌí­ÛNˇy!O=”ã#'“V5ĸûō#ŖKå}WĶf‰lmüéĸLÎ_œúPŅom ˛%ēyo–ĄĩŠ)<ÆHÕ&Wm­ˇ§8ü¸§É{n˛[ˆKãy•VĘúŌ V’{˜Ô31Ûģ‘ķũh˙—jÍåwûÃoZ†Ũc•å Wķ SŽ˜uĻ>ŠfádK˜‹qĪ˙‚ĪP´Tw’tDÜįōrhD'’Ŧꛟ?9Û÷Ē­—‘-ÕÉH@Ã(ûŊöĶ?ĩm÷î1°cō˙˛)ļڕ’Ëpætß'Ücz&Ÿl ĘŧœuǁD—î<°Ēҍ+ˇũŖÍ2JÅ­6‹˜Ž~čĪO­EĨhuI OžÅ'‚(O…m௠ŒüØéY÷E6ŖhË.ÍĮSÅKũĨfģŠĪFĮĻėÕwÔ-#ŋŠFš‹qVįw8Āũ(N@‘|Ĩcü)嘪ÜÅĩđā9ãõĢ/Ĩ¯—ĨŨŌûŸ7OŌ§‡;Øņ晜vÅZlātĮzåžÃ}˙ "ę eX4ŒŖĻzZbŊ ĩ5Vōņ2ÛŗPÅ厊¤ËV ķu˙ŲÉęF[ēg§Ŋ0îŖÕÅÕˇīíŨÃ9UØ@SU#Ú××lWQū_ŋןÖĢՑKImm*t1ĄÁ<õĒö÷×Éysæiîķnūā8  ŗÔÃ%8ÍWļ–īųĨûßŨųTU_íˆ@;áēŠ3œČŅžzw¨Ŧõk ’ų“€FųzäđiŠ$q´oæ"˜ÎC‚Ÿ{ŪŗcĶíežģ2[BîŦW ÛWÖę $Ûņ<Ŗ°nŲ¨ŦJššd‘§$>ėį§ũ‰bŌŠ6Oã2#cũÚĨĻCæ,íŌ¤^nÁŗš­Ô*Žw.Õq•]Ŋ eøz3ƒykģs’ė[P"soåÜoœnpŊTŗšŊ†D˛IcÉŨĩ°ĪžõŦė°AĩōĀ)ČëŋŠŽŪ6†Ō%‰CJTsØ PŊŧ%)­%Ę펕ÚHûĶÆģ`™@ėĒŧå×Ŋ…ZhņŗûŦĘG͒ß6M9ā?wĘWįt{”a(¤īou%ŖZË7™š@<ĮķĢá–?–%,>öėũījΚŌÉ.-Ņâ‰UË7lôúS§Ō#.Í ž6nTĮ)YÆ:fF‹5ėŽŖdĒĒ íûŖ¸Šæ‘`‹„& āõŦË;)āûCG{&ZO”IÉfĮsOíhau‘ā™6ōā`a@āښtl| ģÛ=)×/‰­Ô.ãģ…ŨÛjŦ—Åg´Ø˛¯đŦg8ĻI¨BĶB˙ŧTU'æ_Ŋšēą,›ÖEĘŧûŲĒąEo0•š*X‚ËÛéS[][ʒí–<AŠ,ãuļEQŸFŨž3ր+ËĨÄŗÄöĖņn=ųWß)[ˆŸO•ĪņĻŦĢq ōüqH˙7›õũq@#ûlsČžZē1å—Ę™{¨yNg_˜n=ĢR҃[Ŧ‡Œū•Rę&mJ .õÉ}š  jļ‘<ĀÛH䃯jD¸}́Í,Ē‘Āí"Š-Û\ØÄū[ŦŞ(iŠEĩQw3”âPxÛ"÷Ŧû­=šâ7‚i¨ R,7ĢHķ)Āū!@đļę[īm÷ǎwļąÉ ĩÂlߓ†û¸ŌŖ]P&’i= 7AéNMĸŨ&ÛtÚQˇ9ôĒŲ5ĢãĖ210T?5UM`=Ė’Ckq*Ē^xũki-ãLlDRŋtĒôÛhÂË;/F~Ÿ€  ĶĒ1c˜AwIüĒGÖ$\Į´jYžgÎTôõ­ũŖj‚Í[/į%˙3šÍ1kN?ãæÚ6ôTÎ}ę+KFKucО#üØXųÉ5ģ!ڌ}2Ømˇˆz(¤<ēMĪ–ĖúĨÉpŧã€ičđGæ]Ũā¨ųCũÚŲģ8ĩ—ũĶRŽ —A†w+=Á*šų˜ū”äđí“ĸ™„ŽÄs—éųV­á˙E“ŨqRôĪjZ-Ĩž›4°+#FšSŋ95f ÔC ŧ{ŲļîņSx…‚é2ŒũâĢų°Ģā/–āŒP{é6{Ø‚…PF?ŽĶHŗkXšXRG*3¸V„ÍPHÃj€¤ŌÛ˛­ŧcpûŖŊTūȲEÄp"ŧ eŽ™lđ+InŨã­_’hÕ—QëQZMĩˆ‰Gz‹û.ŅFԆ5OMĸ ļŌmq#yk¸ąä€kG͏}:†ÎhÚ ‡S–nūæ€!]&Ę?õpFšëōõĒöú] Ŋ‘šnÃ#§ĩ|Åūđ¨!19—%[įū”ŌíLŽÂ$8ÆŪ*›h–mŠ|Ņ‚,ãß=khlQ…ĀĒqL­ĢL™$KüÍBúŸ#n’sĐg§éP`ØĨŌųQlVS¸ô­œZ#íŸá4œ4 û¨ÃŋŪëU/ŧ;hŅē@K(ÚŽĩĐT_uĢ¯ķ  ”đ͜|E-Â{īáQÜxv(ã–XŽnUöž7 7é] EqūĄž”ũ‚ͯöŌŽÁN1HēĖY1jˇ!ąÎîEnĐzæmt­IĸvŖ ,ÃîûÕ§˛Ö”ŽÍN6 pûĩô$sÖ§:ÆŦ‡÷ēCÚTœVæÕūŅ-˜EŒū5>Ҏ å.ŧ@Ūd>u„ņâMj˛ž(´čņ\ \`•o­lÜÆ¯ukŸáf8˙€š• ŗšŊ2Ŋ(ãÄZlöģw:–+ō2tæ¯&ĩ§Hß-ä^f8fāb¤ŊĶmd‰TÛÒ듰 ķJú6žë´ÚEŗØ`Đ%ŋŗ{IŒWQÚŲ"NAöŠí~Ë Œ*°ų¸Ŧģī Øũ–GŠI’ĄZá{x˙ÔĪ29{#ŠÛlqÆOn>į[N˙(Ûøļ‚įžüV4ē ĖJđj3,~n=Š-ôũj8!ō¯”  ĸ7ͧJčnÂqĩˇrÕ^Árå†wLä§oÎk0ÂCnmæö8ų•EiyĢÃoėõ%˜unI ‡߯[olÕ;¤LĘØæ$6îIôįéY˙ےFgĶn#Q÷vĶ,üChˆÆe™Yؒģr“@Į‘–\ú§õĒļpEågËBäąf+Ô&ĢG¯iīĀ¸ÚØgB7 ’Âō×ė–čn"jí_3œãŊ m/O˜ öņ…'*ÆcéT,´háî"c+aRN#Á8ūUļ$ “ßœU]?ūöčøJmžĄi4’”–1ŊūU<ÔĐÍioåL|”$|ËÛˇzŠ < hö\ΚQ’Ŧ>jšėÆöį ã€AûĮŌ­}ŅĐqíĐzPJÚ]%ņ1ŪļBrΚęjI[TŠ6%`õ'ĻÚˇ72œũĐíëOš˙TF:ņøĐt7“Į#ÚĖĒGEÁúæ›mŠG&ĸ~vxŪ+\}ÚĨgÉtėĄą…éŌ€,5Ä ĨŧåsŽšŠ`B$ c§Ģ^ØÛIĖKŸQIũ˜¨ŋēšT˙PčĨgÂ1 |Āė%Ûv=zV|6÷Š,….ũáNš–ú8Îč‘ŋŨ4ĶUf¸&;æH^îGö+sōē™2r Ž['͚H`‰%ŸlHáYBõ8˙ëĶ+^ÛŠÛænlgĨŋ•WļŋVˆ‚wí´ˆúō}já8ëÔto_j‚Џ˛!ėPoį§×ŗŦ2ēŲIō÷™Goƙm%đ‚%ō`EØ>vž~˜Šī˛-&éģaÚØŠmQ…ãûŧqī@÷­¨‹)[}ē°*ôúæĨHo6ŒŪŽŌŌą ]@˙Ŗ*îåB|ØŪsŌŦį‚īąĪé@ˇļ×_eÚ×ķÜĄ°ŠÉíÅMöęחd7ûxÛOŧņîI•vtĮ<ՏS÷†ßŊ@wÚzyĻâå›zŽf??5cû:ߒLĮ?x4íō~´ûŪZŨ9a¸ų0*ÎOĄČíũęĀ×l ŽŌŽ2ĖĶ")i ŨšŌM.Čsöd΁9ÅSņS%„fMĄŽW'?vļ3Đ‚>ī?z€2u-6Átų?Ņã_—änûģU˜´Ë5U͜fĐmâUž~FÖeY>|lqJ…Aģá;žõg^éú|vŸŗD#ÚNBķš’ßOĩDZÖ4&>īíMņa9ĘîŲ†ē ąÁųknäĐi4ûŸ˛Ãŗ’ß-WĶtûFą€Ŋ´%°JŊGŊh\9X]—i”)!wqPi…F—×ĘųmŨ(ūΞË˛Ã“÷ūZЧé–-o˙ņ”ŪJ7sÍjąüĮŨëUtÖÍĸļybK ŲÛÍ'ömžíßf~1ˇĩciÖ’ęڒíũĘĄˇŸ”÷Ž°¸ėŲëXž;¯uI;™ČؚĐūÎļÜ×z+|ß­V]>íÃÍūŦnfų?ZĶcŽ9įøŋģUĄųĩ+ƒ‚6ĸƒĮßë@ ūΏ`A=ČÆ>8ķT¯Ŧq=Ģ-ÍŪĶ& oĪã[=‡q…ĮŨĒ7`ļĄf<Õ$ī+ÆÜt bũŠUVUŋ¸ÜŲÚß)ĮéUĩ {Ŏ5 8e ”^yíÅjüģ÷9Ī­TÔqļ$oķWËë@ ßEō”?wtT×]Qb8žŲĨ;LdgõĢāķīüC=*9N ˜íÛŲ  í>MEŦá`ÖΌš-ČÅXķõ 6°6:b_ŊúT–>ß+ŨŒĨNÃˇ~vœ}Úį4KÛĪ>öQbĪæOķaōJØūД>×ĶîsŒđįT|1ŋÉŧf*XÜļãŽĩąōíá8ÛĪ9  ¨ĩˆėĖÖ×*NJbk ķJą76ģmŅei0ʍŽ0j×öL …"–å3ük1ãڐ¯8ļqę1RÖĨc*[īKûĨ@ęĨ[æĪĖYû.ĸœ&§šŨæ˜WlE4ąŒFŖĐV-ķjņZH|ËY ?ĘA_ÖŦ%ÎĒšķ,b}ŊÖ\géH 2Ē(ļ‡(Æ;qTdÕ'Šķi͍#øpÔÛMZˇ$ŽtdEÎbcÛژ…zûÕ[KX…¤jU\umĘė͝`˟ĩ ãß/ķŠ,n ’Ö!¨Į`ā5AwĨŲ´“mB¸]ŊǍđí‹D€ÄۊüĖĄÅk\ķm(˙dÔĸÕĮ‡!Ž^+‰ã F7nüŠļúNŠQ5žŖ†Û•FÎŽ†ėíĩ•Ŋ˙*‘FJb9PkPØHˇ2E4 Øf\zôüęhĩVŪ$I´ņ(¤sëŪĩõÄßizt­_ØšcŽ[Š g+uâȋ=¤đ’ęd>˜9â¯Įâ-2EųæeţŪ÷­¸VK‹M܅rvž‡å4M§ÛKū˛Ū9ä´cĨ *Į¨ÚIs•ēˆO™ˇcåĪķ̊ęUvļåtxÅdËáë'›ûUUv„r9æĄ ŽMŊÍÄGŨÁ˙ `jZßŨ?üÎ_ođāqRÎū\Ādĸ’Ģģ¨Į|×9gĨęąÂk´b¨ųĨ:éõø­]dō捸,¸$įĩ : Tōí"RÛö ÜÛ~đĮĩ$œ^D8Ę+¸ÚžĩŠ5ĢÛpÆ”ËˇĄP@QD^#´k­Ō,Ȋ¤yÉ>´ĐōāŒŽ˜#;Ŋę„VĶBæhcbėÛÛn2sړûcO‘‹¤ās¸`‘č*Ԋmĸ ːŖ![   zMˇ™“ž'gŖp•7Ønc‚úOUY?Y”nē€G'īëSąųOøõ4‘kũ§ČÃʝKžø/N¸žēMĢ5“˜e9üĢFĶū=Տ|ˇ˙Z‰FfˆzũVūԃŧD{î_ģF“u‹,Šę7Čx=jäĀyg#?ZĢĻÚ@ö*^%%É$â€-LęÅ`rÕ6xŦŲt¸ Ây{Ŗę~SN{9ãCå]?Ņš  tcęԓōU}ZŠ[B8—ũ[ŠFģnIlßđhĄÜǤ’‹ŸģU"ŧˇįi.#VķVíĶúS†kŋ-˜ũČ[>üŌYې!Ž\’ĘÛ~íPˆn5+UĩcŗS‹‡č¯Ī–Ē–—%Ô` ˜üjÍÎ<Ļq¯䁚”c’TũŌZĖģš¸’ÆMŽËˇĖ`9Ũߚ”I¨?Ņ Vīē_ŋĮŌ§šh\æA¸cŽØ˛1•ķ[ úҍ‘å ߅2Ž[#äĢ~œũ?Ú  Ëûd°•‹HĢŗ‡ķ›ŸÖĨĩ˛mb_Ū+„A3bŸĒ1|Ũō¸##ä÷ĢŒD‹ģ< ?­WšŌ/)Ī›0\ŋœ~ZƒOąUąˆo˜šĀ”üÕríļÚĘÛ3ōŸ“Ö‹aļÚ%ŨŸ—†ô šÉqūļ|zyŸvą<9gæ­Üž|ČÆv•žõt­ĐžžŋíV/…×ū%ŦÄd4Ė@ĮŨ  rØą‰ĮÚ.6‘÷2*Ĩ„Æęb/gWļŽ?1[_Åū×÷ąUm6oē`¤!“‘Žs@ČūĮr7mÔ%˙k1¯?ĨgŨYŪëD:ƒm(|žA÷­ãÔg¯đÕ2sĢŽÃ’ą0xéŒP_gÔÃd_DĪŽÎĒ_EŠūé~×Ɠ—ÚASųÖßaķaxÃg­Tē$Ũ[ûîøįŽ´ūÕ\gėͷБŋŠŠō]Im%&Ö>č“î{ô­^ũsčģUīãŌ~?„îãīq@-fŋKX”Ųî‘P~đ8Á§M}2Dėöųx;€Á?ί U…L ŖŌ‰Ë,NW@§œ æü5z°Øē˜';ĨfRĒH5¯ũ­nβĢq¸Ûåũ* hą7÷‹1>œÖŋųúĐŽ­dnîķp]˛7¸éW×Sąh™ÅÄa9Üšæ›c eމJ4Ü&Ņōđ*ÃYÛģĐDdĮR¨ĒÍ ë#8ƒ1āöÍ^ĨŽÖŽŸģÅd &ÂKûôtl^A# “VhšōÄą“Ų%#uMpŌíâ$7÷žSÅXãg+ōāĮNkm$­ũĒĮwr+ķnōđ*ÚØ^Ŧ…“RrøˇÄ0EO¨nũƌ|ÕĮ\cuZČ āüœåŗĐÖ-ÜZ’­¤bęS(Úė¤6y<Ֆ}][& i0cÆ5<ũ‘ūRFāĨŋČĢ$cūøãîņXˇ×Zšĸ$– \Č ˛>GPqúTĮUuĖĶî’3íŽ‡Ú˜o[mÃ īį§ËRÂģaEƒũņŠĮŊÖ­ÚÖdu–'ÁUFCķÕČõ[dQsO+ģœPˇŅÄlŸ|J@BUJũ̓QĻ›dbíĄ, 1Ž(ŧ¸‚K“¨Ë´Ģ{âŽgq÷Tž1H ­COˇŽČųK,{J˛CķJ°Ö2 ˆīސˇÜîÛĮ|ĶĩA˜âMģ™ĻMˇ!9ũz´vís¨s¸ō}Ё}ŖŠŲ¨,‰Â>ôĀūĩgÎÕâB^ i°q„b¤ûÔځĘF§œĘŖg¨Ū9ũ*Öėđ_ûØíž”…Ģ_Ü-ŔSY8>h“ļũØíõ̃\´Ú­"Īē^&æĸŧ%ĩ5~īįuįœã˙¯ZX$ŒŒ“ô!)IuK¯b uXōØįūŊhĢĢŽä`ÃÔʒŌŌãR”Ën…<°rōXļ3úS›Hąi ?Cå9]yã~™%˙{ ŠJÃ˛ĶåHŨŖŋģM˛2œáˇvÍMpē•ŊŦŦ/b•ŅKņcåü i[ĮŧgÕsLēc  âE##§5M&Õ!„k›p>YH'ô¨gÕeŽtYėgM‡,W:PžÅũsÖŠĩŒÜJō"žv™Įĩ4kyĎņ0ę$–ĨŗŧļœšŽxÛ-Ų¨æ‰bĐČVÚ0øųq‘Ёŧ7iƒ°ÎŸîŋZ۔üŋR>€9ƒ¤ßGvūFĄ&UGĖāūTŗ˙nÛÄäËĒ'Ž+Ą™d?AIrĒŅ`hSPļVm9ļÁZrx‚Ü܏6)#P;Šč6-Vû,RO#:ĢtŠŖ>ąc%ģ휌cšŋ`ņ‹8”2ũŅŪŗõ]*Õ ĘĊå‡#ŠSáë`Ÿģ–XÛCP !Ž:ôZtį5aE¤ŪĮ+ųÍĮ÷šĸuÖa\ŽUĪĨo Â(ö¨×›ƒė+'ûSQ„~úğu4Ø5čüĮ3C"~ÔÉ"ĸ.1ÉROZ­Ũ¤včxžč ĨģņQÜØZ-Ŧ§ÉS•ĮĖw>Õv8/š+ģS•B)˨ÛǞ3’à ¨NîsŽL/”•Žcũáå°ĮĶ"¤•IxTd)nƒø~SSaē÷9¤uÄķ¨m$,79^˜úûÔžuŲ9[!ŽęŌøÔĻ<Ū¨8(¨N=ķSė<üŨÎ:ĐL¯|א °' TųšŨíŌŦÄĀļwÛ)ĮˏcŠąå˙ĻãËĀ_Njmŋw“Įë@Uķ_(71acųH‰ģúķíV~ĪxNMāøąōŠãEûd퓒Ē?ZŸhųŲé@ßb¯×7˛a#ųqüš5gėS““>îä*|ßĨYDOļLØäǃúÔÛWŽ:t YŦŒž#HŒŗļȃųr•˛,ū.w{rķúT›_Äw§Ŧhĩ¯ĩpJøąÍõĒų÷ 2ÍŗxųÚ̟a˙§Ģ÷÷Ę§eC¨#müŗĪåV6Ž1ŠĮŊ°FxËps'1ųŸ{ŪŦ˙?W?]˙v­LÜBJŲ8>œTģWĀÁ  MRĀũ”ĩ\ĖŖiaķķV—O!T}ĒįhÆ+ōū•fņQ„[”Hģ}ĒÆŅĪzĐ6Ąc*ŲJ~Ũ>võ;~on•$:|̍ŧœ&>æÕ˙ ģ{5ąVPWŽ*pŖ9Į4—-•ÖŌ´%ÜÚLkĮéYŪĩš:ZŧWEܖR™Ž‚åUmeãiÍTŅ"EŌmp1ōfû5āPâėãnbįņæŠØÁŠ .\Âd2r3į[ģ@ÉõĒÖ1ĒĀUKcĖcœûĐBšF =šCœąVČũjĄ:¯ö¸ÉˇĘG† 8­ũŋ6JĢXŊˇ’JŒgøhXKІ$Û@ũ>Q/Ũũ*Äú—Ûm‡ŲpÜw‰Ü=+woN~ŧuĒŌCēū2v”T;W  ûUÖ>m:MŋÄĄŸįPj“-Ŗī˛˜7đt8úāÖļÖëÆú­¨FZÜ +°ŨĪŊF/€äÁ8n7üÅVŋÔíŌ ´ŅŠO–O-‡?•jí'¯đôį­QÖ˜Ļ‘tå f3ōúP~ƒmŧ 2Š?^kOíö™ĮÚb$ũߘqP葁¤Û Ŗw—ÄU‰míš7ß~_;N´WJš‚D¸häBŪsy‡Ö¯ #(ŋ8ōÛNîĩ—§i–OjĻKh˜ųŒSŽŖ'gû&ÉIŲ ~ö×#mIƒts—TĻzjÎ=<áąŌą-4•û]ŲK›”*ę‰>đÚ*ÉͧXˆPPõVPyÍXų ! "3ŽOŨĢ<| đ3ōķÖ°Íž¨5~/"yR/—r`'Ú­ƒĢ&î-ĻÉėÅvŌĖų7–Ün;˛Ë‘ōü§š˛ė~oīÔV$ˇz’ßÛîąåU‹mpwŽ*ĀÔĨS‰të„N6m\˙Z`YŧM˛ž#i‡¨;š5g'w?û õĩ.ąÚ-LąK†ũⲟ”`ķúÕČõkm‚äÜgڀ¨ ’ßg š×@8ų‡ų-m|ųg;˛œæĢOyk4P–3Ɵ(ëŲĢû†ū ™@åwzĐVŖĨŲ2öuIw(P‡€§˙bÂî..cnv˛ÉÂûUĢŽ|•V8iT†ëß8ũ*”•Â÷v˙zĐæ<~JĻĄ7”ķrrwzū•gËÖ#|­Í´Î l¸ã=jÍˡÚPIJîÆœUąœ ĀÁŨ×ubO6Ēŗ[Ŧ–qHŪfCÆãįęqÍZō(Q&ŸpŠy@ŧķĪ\šl5í Āæt\c˙:ą×pŨŒđėîP;6ĨnÚôRÉ,ė„ĢSûļ?…jާ§Ę­‹˜v•—?3•U1/‰Ž7Äv¤ ˜*îz֌ļ°JäË2H:–OáÍCm ’ūåÃ+2„FÚÜÉĪëVN<žė€sĀ;Æ+ÛFąf’' ˛|ž\„oGŋŽjYôļ…­¯ŽctRWqŪĒžœũ)vÄļOģ“–ã '4—ŋ5ĄUc†Āįx<ZĪĩļÔāļ‡ė÷ÉPȒ& qŌq6ĢÁ-¤SeÁ ôä|ŧũ([ņ¸wĮđúT'›¸ÆÜ…BG=¸˙ëÕ/íGŒ3MšN7FĒšĪ×Čõ‹u#‚ (ûęA<œå@ŽĒPî”đß.w Ĩ…œ°æKx˛Kdã ÉŠ–ōŲԘf‰ŠŽx?uj[n-ĸīōŒs×Ū€(MĨB/!凜a\ūu)ļŧ]ûĶ 95ađnOĄÉĮ_횘÷įØāô  ßÚjŽĖ-ä%š+I=åŌŧk-“rßĀÁĢFûĄī“QÉÍÔCĐ@6Šß$ŅŊ¤´Ôm$.DéËq“Šŧām9RŪŌŪK|ŧ(w~íG}2HĐFާtƒĄĢųâąn4ËfÔĄXÔĮÁ'iĢ2iōĸ“ äĢėÜĐč9}Z’^]ŊgÛĮ¨GÛ,n?Ú}ĻõnPIlũĶ@Œ8ĒđÁĢNOĨBú’Ēūō)ę´û[Ûv‰~pŊkŨȑÄ7:ŽYG'Ū‘¯íāÜş@âĄ}>ĐŖöģ‚lã?tq/˙Zĩˇ Û{Õ{wS%ÃĀ|ʀ û]đûÚy˙€Č*í ˇÚ|ü'l˙ZÖÜ8į¯J„ow?­@5üV— ˙Ē÷ē¤*ˆ9†éŦGÖĩr*ŊŪ”§ŧ‚€"Ĩ§y ˙ŧ¤U-oRĩ:MĘĨÂod*îy­œÚ˛mŦ§õŠÂ€sī@ UomI›™HķÍYkN3ķéé&yM’“ŽõoÉ-ŠŗîÉXž\ōdöüĒÁ’ˇŪõ&€0NŦĸô‹Kˆq NŪ„íäcéVÆˇbÜÉ+';v:ã#=yĢ*ûFV+œDĢ€{jã ÃwĢ2ƒ‘éH ].â95BQsũŨ­ęžÕŽŦģaq˜ĀoŋÅ`hö67OxæŲ|ō"VcĢDčö|ų"H8xæa°ûs@,˛Ņ9ZI62͌R^˛‹96€2ÅårÜÕ->_°ÂcžšŒ8 žlį=*;ČuXáÛöøĨęŽY6íB‘ß ÖŠ™ĩd?Ŋą‚až‘ÉŽŊÍWmMŌé>Õcs>aQœž:cëúĐÖA΂y;ģúT¨y§m 6ā#;~Qū&Ē rɈY$h\đVE#gŋ"¤˛ŧļ‘Iļųy'<*/ė­%÷[œ’Ÿ. jgö5ĸķ›rŅČyöĢsžåEĘœē† ÷ČâĻĮ|`õv€2ŗîŖš>NĄ"Ē/Ô6Õôũ*FŦ+÷ œŒŠ>õr ˛íŽĪ­>_¸Ø?­TŽōō(S˰sōŽc`j%ÕāûYķŖš/ņ%kô @4Ԝz ĩ;7‰Š\&qКąnËötųj ëX$„†… Ųe*ūCŽŸ.9ŠĪrũåĮŪĻm­ä„ČVÖvfv#;FîŪĩaŽn ļ-o|Ę2 >Ķū=Æ[‰;ž§ĨO“’‹ēᎭ (ZËvÆB-6ã÷ĨãĶŌĨŨs´Ÿ"=‡¨ŪsŸĘŸkū gîŗ>šŠ[8$ãxúb€(Úũ°Å°†%ˆsŸZ‹Ũ§FŪé´ūu-¨˙Eˆ0ʐ8Įz”ƒ×ŨÛŸlˇĖŽ|Ø–o›a=ū´ų–ûĘr¯8?'—÷ŋZžĶū=ԑNqŽœŅtJÛČwm`§įÅaøz;ļ´‘ŌX‘F;ļdƒųÖŗG}Úxūī—÷ŋZ­áĩ+¤DO äíükOņįûŪ”—o˙Úg&âģ€'Ëûŧ}jĪ•}ĮúT_+īū´ûoŊ;ļ~_ZąūGû4”ąßAŋ}Œ/îķõŠĖzAs?žcũ:Ô°įíŗô ?ŪĢžīËũÜt  ‰?´žŲËnHV;9æ­¨įˇ9ÎäŠ97ān„{õ`ô<|Ŋ×h6c¨yІŽ†äî??6ûė/ú<;N>MĮ+úTŌįí0ŒŽä{qSwĪâ÷  -nkÕĶĨI­Ŗå@2+ņÉĢpOxļĒEˆ•ķ>cLņŗBŽ6´ˆũô+MsĶx…3įŧŧDų´ö<ģdéļˇ×R°M•UŨķŌ¯Ü[Éģƒ“éNNãcہ´˜FŦîDgø° ĪŌĒÛjęlÛ\ų›ÉōÂu­œ÷īũßJ¯gĖOƒÕÛįühWûjÛē͌ōÆ#„¨ĸÖŦĶæ||Ē2ČFîĩŦ@Áųxū!ŽĩZ8bk‰ ‰Imųzq@ _Odé˙ āæŖ¸Ŋĩ–ōŅVâ&“y+†ãĢŋg„š&˘ŽŪ՝w§ŲŊÍŦ~Db,ŗns@Iq oōåVážoēk+ÄōÄŖbœåĐ/?{š¸tģ"ážĖĄ†pŖøĢĖ0An+$˛Ēg?pb€:(ˆ#89ÚQڙvîļŗm#~Ö!ąÅRMGq:8Ææ˜UmCNhėe)}:ÃˇîąĪ9  ‹w˙GŒ˙ ¯ÍŸĨIŋqĪŨ÷Ŧ˜ėõ‰âa™BĒTm#ۜņę¨O—qĒs–dÆĘša1{PÅ~bíšAûŋ1Ģ[žl{uŽ{M“V[5dˇÆI,[J˛/oUSĖĶaÆĐ’A÷¤ëI•ÍÃō›ˇ‘ėZÜ7mĪ'ĩ`iú”ģįķ,n ģÉeQ[ŊļˎœŠzHŅué@ĄekŠđAÚOëSņXvÚĨÚ.‹JšVS–āsWÖúÖF;˜]đJ€ôö†)/IhÕąqīN’ÆŌOŋm˙€Š­ˆÚ…ŅIr6¨fŨ÷5tąëίz€3›IŗûrlŒĮō1;¯qéS˙gūŽęå?íĻīįBČ˙ڒ) ūčúõüĒΙͧ|įîĐkŲŪũšvj ōÆpZ5=ÅYęJ?×ÛŋÖ2?­=dÍôŲSōF¸˙k¯Jŗ¸dZʎ]Ao§&Ú)0Šŋ,˜õõõ/ö…Ę­Ķgū™•ëS[H5Ķ'čZ  {}^ØŨ\|Ø~ęâHČĮũz¸š”ƒäē„ûoû\¸oY Ō’ę w…Úh#p?2ƒ@|:ĘörĘ?ŽwoÖ´Ļ å6åGĖxŦMJ´“Iˇ–Hŋzā’ĘåO_ją{Ļė´•ĄŧģBá|ŌÃõ  !Td|zú Šę=ŌÛĮn˙ē{āgúT?eÔŖûš‚¸ô’ũ¨%}Uo VŠÚlo‘Š{wúĐŸ–{ā’0Į$TJ­öŌvũÔsęúÕ ß]/úí6qũj8u(ŧųĖąĪ_š&ôöúĐÉ#VŒŦ‰Ŋ~ë īĒé–2Zƒ%´Yaķ61ŒķĮįV­`Uąw@č̓ú՛vF62‘´t4‘6n&‰`i`;ē$8<˙*“û:ę?õ:ŒÃ'8‘weŋ´î*Ęiė †äŒZɡ]QUÛˎ“.sA$qŌž÷ĄÕdąĪ97Ō¯Û§îAĪ^G)ØÄ€qŽ´QĩDũuŊÄ~æ<˙*ež§fūaķÕK7Fâ´[ooÛ.ø•ˇdō=čfš)<°’+e‡CVüĻŗĻŌėŪxˆ!ä’ŧR\iĢ b¸0?ŋ‘@iC0Č˙ߑO72 ÷Ŧí:Úõ,Ŗ1Ü/#;Yiåõ¸PŅG&đœPŖt¨ a>ĻĒË{2!ķ-$îķEžĄ‰wîOǚšâätV@yôĸK(}Ā>œTk{o%…•xeĨBŧ0üčäl<ų› Rnųũh{˜cĀiã]Ō}ī­C •žé …ƒq¸ŸŠ”ÁlĒØŠ0§ŠĄôĻ"ĩŊõ˜…‰ž2Ûrƒ’yŠZū  ėËÃĨKfģmãāۓÆ)Ͱ3mųq1÷h­æÛxޏo”e|ŧm§=ë…˙[ƒũÖĘüß­[Aĩwūûâ›9ÛžÛNŲâ€)[]N ]ļr(Ũ—QųsD×bū†ĮČ|ßnõyŖ0(ĪZeÉ˙G—o Œ74V/D`-ŦCĖxúRŧ—Á?ãŪ ŋÃķŸ—ôĢŧđ8Ũü5įũB=ę§oöņlH8Q’Ių…VÕZųtŲKEŒ¯Ũå}ë^1ļ4S×/ĩQ׋.‘rP€vá¸ë@ôUŋ]6!@^Ésū&;3‹|āÚjm9JX[ĢsōŒqŌŦsĪ÷ģœu  ģQŠ|ā}œĖwāúÔßņ1ÚĮmž9ĘāüÕbÛũ@'îąÃv¤yzŒ˜˙–…€8ãĩVžˇÔ– ŋlGMÉ´˛ōü÷  >]ĄŽ1÷éŗ0HÅ~@­šq÷Ģ<k,A™-Ÿ8 Į=j;ĢN8¤V´‰Ü!"E~  špÛ§Û)Ám€§ˇex$đ\˙ŦįĨcÚjÅ`…´ų„*¸fVįđŠ›XUĮ›ksÁÚģ3ŧb´Ņū‹€I]ėCį;ūcVHRŋ:ü‡&Ū†ąôũZÍm<„ũԜFjüz›ũ˘KŒn$ã4Ë8QĨ¸vŽ6ŸĖ<íū|š}”¨Ę`cKwÎj=6hšÜí•|ŗ+m;š?1ĢšĪ$glâ–` +Ģ`ôŠN¤Ę™’Ęå#fÁaÉŨž•=ĄF–čƒˆŒĀ īĀÍZįp,>n…Aā{Đ5Ļŗjs7˜ŒŌœÆS ādūUv-JĘFųnā2 nfųr=ŠÚzâØˇņnbÎWīÍK-Ĩŗ*ˇ…ąĖJWģŌ-6DkrҞ•2ģEĩųq“NÕ$hôëŗ–É‰ŽxÂņŌ¨Øé6SY#ˆļŧ ą‘[ũYôģ§Ã™4ą4ņģåīl3nÆO4ĀÔŌn—iŲ ``ŽwT—ŗ7ŠTyk}˚Īļ°ģŠŨ6jr+Ē `PcĩA~šĒQÚ …ķ@ ŗ\ äūT€ßķ:’Ŧ9ĮJ‡ÍC~Ãw1Eķ{d˙õĒÚõ8ŧÛ‘“–xäā¯=3ŪĒÅĢ*ßJ^Ōėb5UMģž_V˙ž¨ĄČ¨m˙åŖyĪøJĪ֞s›1É.„9āS´ĢˆŲMaš•Uú)nūôrū(åĩ‘]˛¸äTM¤Ø7?fE>ŠōŸŌ’ņȎ ŦÄyŠ0wŒŠŗŧ¨å‡Ë÷Ž(‚én\Åus 1‰7<ĶĻ‚ū(]’ø>I"ĖU˜df–]Ár Đb–æP"ÁVųÛgJ¯j1DĄ ‚L÷\æ*3¨Jˇ?Ŋ˛v¯đ€ßĘ´ƒŠŸjdx2Č~‚€(ÍŦZ˜3:6:2V-níšTž6 ÃSīUZ¤ģšÎŲĮÍgū@ekŽ8Zn Ûlä˙tÕXôËc<Ĩ“+PjV,‘(Žęo™€Ú͑@Đ.Č#_E¤Ngsč*¯“ü—ŋûËQC5ú4…āWįĒĩ_¸˙ViûhGJΞũ”ĒËo"äúf§šą_÷†(°I;‰zzS.4ø›“čj[[˜¤.Ë"õŠ'u)Á  HŲũŅ“†ãŽzR\ËåÁ+ Ēå†z ŠßOļ6Č˙‹æryĨ¸˛ĩ0ņķĮŨĻ K›h≠Äcå2ŪŨęŊŪĄiöyq2’~VßJŅH"@D‹ôZeŌ-WYAöØwa8á–"qúT7WÉöw")ųųqå}ëR ēûŠ=X:­öÃ÷VÚäŒ}í˜ü*)ī&1dŲ\ģã×ëZ• ÁûƒÕ…VûDûļ‹)öû—?Πēšēû3bûēœbĩĒ ŋõ`z°ūtWÍģÎŅfÁį2 ÖnŊ-ËiŽŗÚá €“ĩt5“âCū…~t­,R^Įj–yL|ÄÉĪJWžø#îąá~î%ūu¤œ(úSf8‰ĪĩeZM|-ĸ"Ëæ#æĖ•7Ÿx2 ‰ŲÛ æ¯[Œ[Įūč§7Ũ4gs{ä3‹Ū]ŋŒc­YûMÎũŋb—aûĮpÍZŗ˙e>¤ŸÖ§  Ģ{ŠYį?c˜o—§ØčbœmPsˇŪ¤7ĀEŊ­įû›:Õ¨ųē—ũÕūĩ5sēĨÔO¨X.dąųOVšęĮs.ĶÉ+÷Š×![Rĩõ\Ú=eOŠZŖ>j…w\)#š˛/mËíÆdÆGŌ¤šŠ61†E?7ĨJ`ˆõ*§%Ũą‚VY“bįÍKk4BÚŌ(ʍŋ7^)זV­o&č#û§øi‘éV^RfŨ8” ąæ)' ĨûŽzTV„}§‚íķ~5ŅėÆâą'ŠV" ´Ō [R‚Iv–=$>´Ō$ ņõ÷Ē`í&Ü8ŽŅģÍKųՖęā2ôųŗU!Ķį[۝ˇŌüĘš$@Í^wv߁ŸJÂÖ6>ˇĻ!rĢšŽsߊŅ6wĸ4UŊû¸ä§&˛nãŧ>$ˇVh„d¯@á˙ūõWŊ¯ŦĢŽ>íGˇSXÛåļy9ÚۈĮéQ]ĩā–û*•2eöŋ^(@g<}ū7uĒēŽßėŲ˛Øˆ§<援Î2Æ`Š÷v°9úķU5-Cm“ų–× Î•+ÂĐšdFš`ŋp´J>FÁų°vļ>íRMV×;<ĮF>cÆGáIqŠØ=”Ė&O,ĢŋÄMMgmb™A†Qæå~÷$–vÎd†<'úąjKYSɅ7Ą“gĘĄēŒTû—kmlŽrŲû´—gĨYI‘­Ô쟘÷*EŅā\yrO.72šÅ[ŗĩ‹(ŨĮßâĨ8F1ũÁøw  › Cš/gDyÅ÷É뚱ä_¨^ĢIÆådõ.œŲļŨ‘¸’_ ÂōjĪ!xĪËßį`ē–û†­ß÷Ÿë~˙åôĢhžTŒÉdģĢœƒ×š“LėĒJáFh—n6rx5h66Gũ4;¸^;PEŽŖ"–šÎ}Æ_Ūlų•8ĢÚöŠ„š•0ŋyâ#xÅKĻäYnų˜nsؙFO5-×ËđšUfåáxī@´ÛË_ą[Æ.aķü‰ģ8čj䒡†VI†Ė6d >CíUá˛ŗk5W‚=Œ0ėŨwp*ĻĨĨXĨŦĶũ™wcū@lm°’< ‹”Ûž}j—‰[ū%ū[°Üō"šÁ$cōĨHhTyW×HȑˇpWdž¯ox’ŲBˇfeiG’ŽxXĐF8@¸,aFāKŽ;ÕKĨ-ŠÚ÷Ķsī)ü= ˙*Œ ]˛MßyxĪ+ŪŠ››ŋí+mú"&xŖŽ^A=wg€Ų*…ė3î#pĮz†× qvWŸŪ›ƒŸ”eJĢũŦĄI{kØÔļ7” †Î6ŒfĄŗÕ4˙‹¤Rģŗ${vzšĐš>Î[ʏ(ĨŖW^ŽsU-ô̞‡6ҏÚ[øœúSī/-fą”Cr‡ ļNKz}*úäôū„'ĩcÜhöëy…§Œî-šXđ¸č*רŽ"˙S¨KĮŨY0Ā/ŋ+|×ņ b6t\ƒĮ_ÎŦ–2¤‘Ôs÷Ŋš  ‹UÔü§hå‚uiß_ž:gŠ.Ž5hÖkDlČ ´o÷ģŒf´lÆ-•ŊFīģØķŠ$ĮÚĸ^ĀO^‹ë@˙ĩ įĪ´¸1 ¸)ü)ÖēĨ™LË-ŅžZēzŸÎ’Ņ Õ[9<І[˜&x•&GËvjš‘ŠÍ›Nŗ–í:p1N}*SåK<_îČhÕˇ>czĩWžųŽ-“ÕķPÚYŨ$ cŊnyÃ.j[˙íH”´RRÂ(hôĻA÷3ęMV’âę4;íŗūëSažŲī‚eãû´eÆé~4écFSšAü*šjīq÷ļāÅX’æ+"ūt6Ví|ĄÉíPĪ`›Đ#ēķũęŊ_)pGJk|ͧį@Ņą ôĶ.ÔRG.)ĸÚ%R1#cûŌŸÖĢÜZÚųđg,rĮéLEö–5ûŌ(úšĢsun$…ZxÁߟŧ*U†%û°ÆĶĨC3ļ[đģNqĮ9  ūÕé*ŸĄĒ÷7p‰!RĒũ”šĩ“ĶŒŽŧUyX›¸?ēsŠÚãô“ūũˇøUyī#ķ _.n[ūy7§ŌŽåēg‘Ôã­U™›í°}í¤—=čStŋķÎ_ûöjŊÍāŨų3ōãūYššÎ1ŸĮÖĢÎÍö˜:ōy_OzwÚŋé„ß÷Ådëˇ æÍD¯S÷~ĩĩÎ1ŸøgjS2ߨ¨îsōūhāš8˙Q/ũķPŨŪmļų;-[ÉéžŊũ*Ŋûŗ7_§­:;ą§îĨéũÚlׁbsäË͞IëúTw,VŨÎz įր ´ģ_˛Į˜Ĩ/÷ JovOûāĶ cäFyûŖŠ{giįր)Y^ÄŅ3bNXõCëV~×Ģß&™fŲˇV퓞=ę}߯JĨäâŸĄŦũŽųęŋChK<ųÛ¸??•Xųzām  öšˇm]?zšXĪzž.!?ōÕ:Í yÁEĮ“Āük@à ˙–(}x Í,FX†õÎīZŸz˙xU-mšî0`NÁÅLmmöįĘĮԁŽŧaöY9vĨO¸ŖÚŗīlmĖ%1'ÍčÆĨ[‚˛Ė1ßĖ4¸Į j?øöOÎĒÍgˆI“¨#ŽsLŗ´-ŖUŊģŨE4ÍUˇæęāûúS|ĢąŌåOÕ*­šß,ˇŧ-—ô#ĩjÖ#eŧXŋė[˙SZ;īü˛ˆ˙Ā˙úՋ ×?đ“ÎÍm’ą¡jčęīāíäj?ĩH>õŦŖéƒUĻÔí°+E*ũãĘJ@iÕ{Ҙõe­7ûBÛģí˙yH¨o/­XDĸxų‘‹Ū€/”SÕAü*ĻĄknö’î…ʆ­,ąˇŨu?CQ^öWŧP+ĨXí_ôtŖŠŠm"ÛȑPːrCƒZCĨEvvÚĘ}ĐtˇÂŅŪÎĨåč@Ĩ’ÎũbG}ŨŲ:}1ZQņjlíļ ŅM02lŖÔ’Ö }Ķo*r }MJōj*ŽÍe˛ķŲ>īĄÛcŅE,Íļ'oE&Ú}ÄąÚDĻĘā guä÷aõ–'gŠávō4Gį•^´]ļ°¯ĸåN˜í…ÛŅI  >úÖ;HQŽbí,ģøØ=*Kë›i4ųüŠã(āŒ‡įwJŋ)öh•‘NGĩUÔ4û9!æÚ=ÅÔd.Ū°Ô|Ü€ƒžĩOUĪØ%Oʒ1Ož¤ôúĶŽ‹eĪ–’DHÁ1ČÃúÕ+ŨÕmÖųĀIbž- 5ØĒ¨Ŗ*?t›ˆČĮzËÔG›­é¨’ôg|ä˜ųJŸėšŧjU/Ą“-ĪéT&ūĐ:ėEí`•ãˆ˛Ē>'¯4ē@* Ę)\ašëTĸ!ĩKŧ>ƈīŋî?<Ԙo.—‰ô˅Ū?xŅ0nqÛĢZęĐ-ÕĖ× 4Eä ąá@xņ@æå”ķü$°ōsUlŖI,ÍUe—æ“*Fæ'­C&§`ö˛ŸĩDā)Y=_ŠŗdÁmbвFĒå_…\phžĨai*ÖņŦ’2Ŗ2ã÷|ĶŽj9‡Īƒ<ŽÜ7÷ēՋžf´F Ëæ`‚ŨōđÆŦ0wc?uÛgĶdEa:ŪÉåj3ŽC3Äžzsۊ–uÕc…Čš‚O”’ZƒŽ[iîXœ6í‡ ˜֒ünļÛˇ—!TÎ=MUˇ–ú"_ėô8\ŽŲ1Ž{Đēƒ}Ŧ -.UBä`oÎO^+K?ŠõÆZĸ‹›™[“Āô?…Eöûb2Ī÷ĐŽęŗ ÅžÅUž2@Į )JŽ›F~YÛIū˛Ûū@ F vÄō­I;m‰ĩP‡Kļķe(Ŧœālr).ŦdXņäÃ'cšŅˆm‰GĩTƒįÕ%oî ¯Ŗ_–xßũäÅTĶäŧ\9…_æÁÃPŦį÷fœjĪžöEÚÚEÉúÔßÚcæ,Ÿī.(EŠ7•ÉE=ēTWvVíũØúS­nĄ“{,‹ÉŠ&ub 0äĐBÁFĮu˙UxíŽVäėŸ â­LņPÁ÷ÜûĐĻ;t=›*ŧŸņųÂįÜÔ_ŲČßz{–R~鐌Z‡û2z 4ŽQ?ŠBwÕŅŪŧ|ÃîŨj›\F5™Pl÷™ģNūÎŗ˜=süJ‚;_íũÄ[ŖAą}}Í -›ËeÚâ!ŸģķUFÔ-~Ū?Ō#ųīį¯ŌŽũž­û¤Úß{Ё!ûEžEŪ‘ŧv ūĐŗã÷éŽßėũj›j6‡SI÷c;ŽĶķũ+Sdxom?{ŽĩYQN¤ŲQšå;z Oí\}ōG˛—ëU_RļmF ä)ËygįúVŽÕÃaxū.:Õ]ĒuƌŦ/v€ûB߉0{ygåŦ‹ŨB 5Ģ"°‰m‡œ×CŽŧ}xëYǎ‰m×o *1͚šũĄnGI0‡Ë5SPÔ­ü´]͒à °āsZØįũŽįRņU„+ˇä21@ ũĄmŧÃÔl95 ūŖl–lK …ZU(¤ÅCqo—#yQ–ÛÎEEe{[řŖķ įĒĩAĩ˜L›GŪ;ēTXÚũŽ40ĄMŖ’)īcjNīŗĮŧ(–7:ģ i“å;žõZķ˙Ī÷sŌŗltË?)Ī’§sļŲĢŲ–¸GŒcæīP;GWņ Ū%ÎØÔg=+_=ú{z×;§iöīĒ^ƒ *)PÕ:dg¤Ķīį ŧņ@Įŗí”ķō’ŧ}ÚĩÎÚõŦėŋø™–K™ÔlÃüܟĨ[ûŠ“ãøy=Ņ.>éaŸÎĻīĪ^ÃÖ˛nlîąús—Ü>]ŖjȂđp.Ã~fAÅ,Nq žŧsíE¸Ä€z(ųŊj…ę_‹9ą,]?ģ÷ĒH…ōÃ+ r1@Ž6ž>^ã^×—ÔČqL2_ƒūĸ&|v~*­Í؁ËÚĨÛ%XqÍ5sé×øšŦ]? â ōđf¯Ųųíf_LwVF“yÔīåxdRî>]™ÛŠč÷ŧsūíW“wÛcíb?J`ÔmŋįĻՔŠŽē…œ—ø[…Û圝ŨķH "Aė0>õUŧ†%€<(Āŋx57tuĪe Öĸ™ēˇ]Ųų‰ú|´ŋaŗ j€û/J‚ōÂÜĸĒų‰ķ¯ŨsëWĮSëüGÖ ¸?ę}Ķ"ãųĐ~ȸܡ3¨˙üjë[ŸŗHŠ|܎Œĸ¯ũz÷_Oz‚īũV:’Ę7‚=E@Äđ?Õūĩ 䚂Ų˘!”ŒĢŸđĢß.ßD?žj+Ãûĸ ųøAėZ€ÕČAžÅĮûŦ G{ļÎmöķ§ČG)ŸåWščķü^žÕ Ûˇ|p˂=ņ@ Pĩ Ëŗâ%ŨÔ g.Éã?!čÂŦn8+…/éíU/ā‚X°đFÁ™@līPĐF҃Q\ ŪRúČ?NĨVûĻˆ2ßÜ%qųS&ŗO56]\ĻÆÉ;ķŽ­hÕkŖū‘jŋôПüuĒ/ŗŨš¨1=ˇÆ§ųbĒMũ¨/āPÖ˛ŽÃ†_Aīë@™ ßâƒũČ2MIįęJ>{8_ũÉŋÄVm…ôƒSÔ%’Ęã$ĸ€>Ü č*ŊŸ)#zWũ?ĨW:ŊĸŪ™a˙Ž‘2˙JM6ūÍíS1n9bģÆy9  uh$ĩ“Ė‚7$`Ŗ­4é~û,kžģxūU-ÛŽ0¤Ō§ķĢ•.“]!Iîc!ee$öõÍ<é÷I'S—€$EođĢ æėî§ķ?ũj‘¸S@ļvúœqKm2–mÛÁųÆIü(¸“PŨKbŦ†öŽN[ņĶĢi˙ąUĪįCķÍŪÜUk[?2fkh‹īÛˇ :ū›×í+ģˇĘÕU5Í8^ĘŪîŲG;[“WžÃhÉ´[Eŗļ:† su;}ž=ā×˙­@ü$güü ŽŸ+V\zŗü$/reũɇfí§ŽkoėV›Jĩ´e_—šĖąŗļ}zķ÷ŠģPŋøH4Īųų>SUį×töžYÁųžcƒ€+Kû:Ëæ˙F‹ī|ĩZ]6ĖŨÂŋgŒĘņրkēaų~Ôģ¯y­Ø2&۔fŪ8ļjßö}‰mßcNx'U{"Ã1 ˇ@ĨžõXƝÚō.züÔˍRÉ­d"ę>aÍ8čÚy`ßeLŽÕZīCĶÖÛnn˙Ũ  ą_Z“÷ņô‡!¸…ŅļL§īT?áĶ™TyÛß=i’øOUv0 >č4vÂhšÔ0a‚IúķV<ÄūđööŦK Ú5ĸŌ#;ƒSŸÃvŖ “LzáēĐē;3^ę]Ky¸ĪáZĨ—o_’šm3GY–l^Íd!Bļ úÕļĐŽÕSŸ|ĩ5Qķ¨Čšų‚ öĢY˙ëûW3“¨‹Ųvj-€\õ>Õ0°×#VųXö ŋz€6n>ôC?Ä>oZ›ˇN?ģ\ÄđëË%¸ķcvŨ tŠÖo,­û˜Ö€6o?ãŨŋŊü>Õ0é˙ĄW/wŦũ‰l”)nH<õŠÎĩ¨ÆČ˛irgmnŋĨt:üŊ­Cg˙āûŸ—ņŦSâ)™§Î0:cĨ6×ĖņÚÆ˛C2ž9mœPD3ØúVF„­öA‰÷äoü$šqʗeR9 SĐõk…ËI0FyY”7ŅíBdžĒ-ŧO¨ČÍŽ0=M95K'Á[˜ŽīöĮŊÔy8YАnĪ^´€”éք N‹*œÚ]ŠŊjŧ`+ÚÄzV˜’6Lîjˆą7ãî—œ ûĶėíšŲu:ŸāķUŽm.üû}—ĖNîw(ųx­|õÁāõlô¨&˙¸xā?^?úô€Ŧ#ÕœKāp˘ŨP\IŠāÚŦëōĢ`ŽõŽ{t˙dcĨA9t>ģūoo”Ķģē0{ŪŨļ@EAq¨ūæ=Ö÷4‹†+œüŲÅjzp:īTröüpĪÂãîđi_ûRĶ;\Hƒû­ Zlڕ›*˙¤Gŋr7cÕĄģ$)|įÚŠŨà u1+/˜ģsÎî(ÄsDęĄ&RŧÁŨQŨsäŽÍ*áq÷qĪôĻ6›fĮ-l™EûœU+.ÜKז0ų…]‡Eë@šÚ¤ļ8ŧnGnÔÆb&0x¨ĪŪãYįNģŒ?‘¨ÍŧĢV!˛=ķQ5Uŋ/"”Ŧd†tĮR8ãé@ÜrŨ˜ŽžÕLlmHpUD\ Él˙ėĩ[ÎÕR4/enęÍ÷QАŲÎy¨#ÔŽŖģš’}:Q…EÆÁļ`ŸÖ€6w|­–ÁčønâŗtBÆ}B]ŔÜ2cœfœÚŧ Ÿŋ‚î1Œ’w{Õ-QŗŽÕĖ“Į+;ųœdJܚS3`ėRĪÁÆ9¨`ļ„ÚEļĐģ*¨Ú@ž˙­G&ŠfĒwĘPú:•ūbĻĩ¸áAČß(čԗDũƒm9ųOÍ#Z[H’Ú{üĸ€%Čk‘ĪE4ˇ ļ>՞šuŖNûH›„Šm۟*ňī§ä†!¨R!ļ$Š)‹ÍÉ>‹U<J1ōÜÅ'ûéåPÃ.¤˛H^Ū)9ĮĘø  ZĄÅ›^*ĖKļ$_AX÷÷“ŋ—–r).šũ§ņ"Ȅy XDV™ÉP{t¨Ží tæ%ĪŌ›i}m&ō%^[šŠd–7dÔķë@ ū΃oËš?Ũj†&Y\¤î>ŧ։#j8:1÷  wŨ¤glĒßQRŖ]$`ãąŠ§čŠŠģPōG­Cj†bWs9ÉĮQQ›{Íŧß7ü5¨Ŧín Í}/$ž˜‹Å0leäŸųjŪŋZĐ8žjŖf‰åą,q¸’IíéNžÂ ŸŪt˙ž­ū5žŸnmļŋ%ŋŋƀ4z…>­Uíĸ_Ū—?Įũę”ŲĀ§ūú5BŌĘ FYX“Ë ĐhÔō˜úf˛´ØÂ_ŪČOŪ`ƒVŪÆ˛Ę¤qžŒÖ~—g ‹ŲråK0qâ€7ÜįwJĢš>Ų¸3”ķ‚EÂ.0ØQĪÎj…ZņĘ+`'y4oėÉĪņ/ū…PÎUŽbÁ,ė2*Si ąu“ũŗTå„6Ąq—AÉÜh@meášĒ÷d4x\•Ī8\æ”ÛFōmß!Į_›ô¨/]ŠåĘÁwĪzē¸aÔtö¨§lDÛylsšiĩy@aq"ž‡§åPŪGpļō,7mÔP‹PžB čqŪ–Gų€$Ž˜ PĪ$J`ŲĨŸí‘ĻQ‘Ô›hĻ”q§0+—gbqĶ9õĢä2m%˜ŽüU 9îN’˛/–Ũø]–KĩŲą"%ŊZ€úÉĨ?tœmŠwû1ôm‡Š§f×FIŒ‘.ķ€ßJo.ū÷ØÉ_@Ã4Ĩ•¯ĄÛčۍI¸qĩļîãĒ}Ĩôr}šNTū5+j[eÚÖōė ē;„drۇMŊs…Ë{œȔžÕpŽÛĘ{‘SļŖj EtP?Ŋ@‡åzÎGZ DŠ%MŊ6ô4Oyk-ŗH$Mņ˙ĩSũĸ5„e;ŊčŧÖöĖųŧģzíY:6›i=›‰í×,íÉękzfXâ)’jŽ‚DúZ :œˇëHdčZc°ũÃ|ŸŨĪ5RXÍ$øķîÂķ͊čŲ^8‡–UŦķ$“ÉŒn|øSø]@ŠęEq÷Ē%ĐŽ–éŧ­AĀ 0ų9úWQƒøœõĒņdÜ˕ėƒhû?\Š#˛đ?û'š\ëą]&åŽgvžŨĢĸįũŋ\T9Cp{.ßë@'RÖ#Iė†ÜüÄgŠI5۟´@eąeŲ“Œũî>•Ōœ÷˙wÖ uŨxƒ9!ƒŽ(ž%ˇųŧČe—å-)×ŦdžY”r\•>˜­y-íŲ|I°įvWŠĒsi֏xŠmc$FÄ(ã=(äÖ,|ˇ)ō}Đ[¸÷ĸk˜e¸ļXî–rà ߐĶ$Đtį ŨüAËTæĐ,ZéVXĶknúū4´Y ģqŗüu¨ĨŨöØ@˛ŖšíÅd˜ÔŦ˛¤šČĀÆj/ėŊMo1ĸ[j|ŽÄ÷=?Jčēä+g;ŋ•Y6ĩü„ĻÔĀ+ҞĮ5ŠĐxŠ5#‚ßwjü§ßŠ€_k–īs#Û,˜ÂĘqĶØûĐMũė‘ģe ‘Ž;U{oõˇMķIˇ`ĮĖ6¨Ŧcâ čYVãMqōôɈ¨í"DōÕ(Î2ÃrôĪ˙Ž€#–âØĢ*}ā1ģ_ō*ÖüâôČüjœļwOĩēd~_J–[4ˆ(KŗŖmsÍ>ŪD6ō§qcÎ:ŸZ[•ehrĖŲnx¨b†o°y‰ręwnÆ{éI0ŋIâ 4NNOθíí@ˇ ģŗÅEnß+ļÖÁcÎĶUQī×y–œ!ĪĘߍ$”â%g˛—iįŽhy{ûp~ņМá¤ųIį°ĒKu ęI7Ė€!ÎWjyu8•ĻĮ=hĐC B NyéUäŗļ{…ÛOî ļģK 6°ÉÁ˙>Ôĸ\Ü2Įˇ1ÍTšŅdĮ,ŠGlЖŗĀ‰ļá›9ÎW5rb$ˆžß*FržZ¨5eJ×bdŦøaާQ†„įŌŦÛ:ĮÆiė|Ådq†‚(Jcļ&>‚™h1m˙dU+Čo>Ë&nÔ|ŊŖŠ#ĩš¨7¯Ķ˛-1.ÎÛiû4čFØP˛*…õ¤ÆÕķy7ÛšBėé@‘ĻÖäŒã íUŽŖmņ*•ÆüķL[gŽ^n›•ęØĒ’ÚÜ5Ė%oۏ΀5ˇ@^Xõ?ãP^ĢĮ´‡õ4Ņorŋvu˙žjü7ĢŲ2XtPšūę>Xojk#ĮüŲ@ŧf Ũ¨˙–L{’MTÔ ôv3Š@SĮ˜h՚˙Äĸ0¸ävúÕļŅ1Į­eiĻíla˙FČÚ?å§ôĢ -ĀÉû+÷^€%ĶÎņ9=ä"§Ų C z÷ŦÍ2é„™ d%ĪŠ™.qî†āqī@,Š5…†?ĘĻÚÍSŨŋĨeG{ Ôd9T*‘WPĩ^72˙ŧ I#đ3NjF‡æ%U7<ÖlˇÖmķĀā’7WV{fû“ūëP2 Fbą—1Ģ;z ‘ôûy<ĻHŖâ™~ņ ^~fQœįŊZ ˜áˆú6(;QĶ-¤´’XĮD=ŠƒDĶ– .9$šPÅ…¸Ģēž#ŌîYŌ#=ĩ*˙ÄŽŲ›–ōĮ&€š}Â0dž—i䃃ųT6ļ÷…¤hîÆ7îLäæ´Ę (ôĢéƒkŽėĮõ¤Dz‚˙ËhūGõĒļŌęhšũÄO†īãˇŌĩęϟɏoYM4]]¯ßąoø ƒU“RÅėĄí'\*ģŸZ×ĒļüŪŨ÷Gé@kYį.]ûQ‘Q&Ą§ŊÛž…ŲõwExe†ŅųÖÉVmArĒvÆĀũ đŠ62Ļ”Ēpvw Ɗ-RŲvĮp˛ ømÜ÷ÆNGĩ:ęMf;yWėđ‘'ãŠĪŌ´Ŧ”}‘n7eÛåûĀä˙ZK°ąĸĒąO™G€ugĮŠ]ĀObûļí;I~•jØģŪĐē(R6žv’zÖÔEc—“ÆÜ ͝Ãך­ k5Ėå˛ËŸöš'úŠŽuí> ĖĀ““”īëÅX†ōՑLWō!Ÿo5æfĐ9khˇ‘‚ÁpsÛĪė;aŖĪl‡å4ueA6DĒîGbáS"4Yŗ_JįÛÐK+ėštĀ-Î)ąobÚ"Ô¤)ũÖČâ€:)ũ“ ͧëLÁ’edĮĘŊëėõøOîîVEūîj(f×Ŗ’Fû8~~lqütĒÛŖ”Ÿ\~”ąÂé a´ gŊ`Ļ­v‘Hˇf2O­ø‚CpœPŊšC¨H‹ƒąBũ)ˇvđȲ‡N[+#OÖlDŗ4ŽcÜß/QĮáWŽ­`åU.W–îhōÚۘCĀ rGjĒ4ĪßI$2ē†íēŦ}ĸÖA•™N}–ßaRQČÉū  ÷MoÕ¸gwėEO$wMåŧocžxâœá|ÔĮRzԅŋC@Uîc*F­Æ:Ņ-ҁIŖ`qŽ*kt9\¯= ã9cī@7ŧÁRX+.ėęÄģ`qüFŦmŋūüūiˆ’ķ˜”z˛˙:žŗn’øŧ+æÃË˙p˙Oå^÷¸đ˙¯@ž?č¯īÅLŖ >•™ãFƒí+Ëā÷Ģ"Ūëņõ˙ŽPīĪú3{ņS/ >•™orbQöžŦ?‡ŪŦ‹{œĮŅ˙žEKrĢäģt8ę(?p™fûŖøĒ•ũŊĪŲ_g§÷EKĩĘÄŖíG§÷E?QÄZ|ė0‡ųU.ŨÜŗUõČŽSKĪNFŪ´ũ&ŪétØ@¸P6ôÛ@ÍsUlúĘÛϘ¯Ÿß§ũķUŦbŊ1ķã9sü4Ô5V.oe>Š)6^˙~#ø§oö˙´Üsäô­ŠĢ/ü~Ä=ĻgPà üMUi/…úæÉÚpPŊUŊéõqQų÷í˛ūTīnŽüëpmû5lÕ-aļé—ųhûdÃīZKúUfü˙gHĻŪQģ•÷  [A‹X‡û"¤ējŒ:„b$ĖrŽ?¸idÔ­ŧļËĮu4-Šŗ/Ô˙:ąT,/íŦŊQĮzŗö¸35:Ž ôįŲEYÚŊĀĒVsÄ÷7%]OĖ_jšŊŧ)NH"}I7F§{TÍglŨ`Oû昤6 yč•j™:–›hÉ"ôãŊYūĖ€•Ĩ_¤†Ÿ}Ë[YEZ  zÄĮĨNËq6ûĨ˛ MĻŲ]-„o~AÆŅÅMâ*^3œÖŽYļ‘DVHu‰ļÜÆÜT:wö‚ØÅōÂÃnzâ´ŽÛyû&›d6ŲÂ?ØžõGÍjû¯TôÛé/g721ƌ÷­“ĐÕ]3ū<ú’Z`GũŠņ¤ŠūôfĄŗÔ­[†3*åøŨĮaZ„U;(Ņ–f(§2ˇj™.­äû“!ú5Cfę×WlœütTŌZ[H>x#?đĪŗĶ,ßĪc˙ZĀ`ô  Z¯l?Ōnû@ãĸ :L?Á,éūėĻĄ´ą”Š^Î?xG8?ΐĩRĶ›ģÆ˙mW˙ãLû=ō’õ[ũøŋÂĒX˙i=ĮŲß2œį#‘ĮôĻÁĒļŦíë3ū‡ŌĄ7Z‚}ûo÷%ÖĒYjmĖąēģļā™ą4€ØíFoAU´Á˙ÛlŽąŠũ*îˇgö9ÆéöFÜ}*Åϧ``Vîĩ@Áp(]N8ÚÂ}č­ōdSIĶØaŦáüš…ÄOgûšQ÷:/ žŦ*öh›Ô´ģDÕ4č!VˆHĖN×=ŋ•i˙e˛cĘÔ/ęá˙˜Ē÷?ŠmWūyĀĪųäVÅbÃo¨­õĮ—~ŽQUy^§ļ*ĒjĐÆĖŅZJgäfCúæ§ąų§ŧYąų*Ķõ&ÛapG]„ Ĩow} ´Júl„*”‘[ĩ2}Z14 5­Ô_6NøŊĨltǞ|ڌ+ũØŲŋ•Cũ¯Ļŋ p‹ėęWųŅg=œ˛JŅË%ļŦ:`UįUaķ(?QTlėíĨļÜöņ6öfå÷X¸E(€1…ëīR•˙kˇzΟK˛3BĢLˇ; ^ŪÕ#iŠŋęîŽŖúJOķ  áBL™*~oNøöSš~šëYö֗ĢcÔ–<Õ7{Y?*¤7ŽoĨÍ´Ŗv  SUn9ē€{Ō}¸w‚Q˙Ē’j1B%)(“ʚÖŦũk›,zēüxTŋÚ6ãĢõCVÔ-š(“Ė2¯ķ f°}*9Õ|§ųGJj^[‘ÄĢųÔWwP-Ŧæ/OZ>ÖūËØŋwԜÖļî>hPū[ȞJ|ÃîÔĨ—EeŲéļžeÁ0¯ßĢGMļėŦ>Œitö$9ë!ĢT ɋOŒ_ĖVIGĘ?Ž­ũ‘‡K‰1Eŋ7—č*Õ 2¯-Ž<û`—Gī˙CV|ģÅ˙–č~ŠOŸ›ģqîOéVhņ—qب,̏V„_,( ˛”Tņ?Íĸzu­ĩû‚€2ī¯.RĘRÖo÷OB IøX#o:üŖø*ÆŖ˙R{ŒU…@=¨”š˛ÆÛ‹/ĤTzmõ¨ą…Lčo šŊrŲä$ēj+[h~É´H~Aڀ%°ųeSøÔ:s+[îĢą˙Į6]:͔“n; ĢaĨۛ(ˆ2)aŸ•ČĻŠéUtßø÷fõ‘Īūž´ëģ[Číßf Ė1Œĸ’ ¨d™ˆj´Ę¤rĸĢÃm ;“é@ fõĸÔæŗbŋŨq!ķvv§7oÎ-ĨãéLCĮ7¤ú-OY‘^J×/ū‹'`9cíSsūŠü{Š{ķzžĘjÅe-äæ÷ū=xų…XûLų#ėÍĮûB€%fî?`jjËûd˙j荍Ŋw ąöŠ÷cėÍųŠ’į™"íTõ•5ė˙hˆ}‘ąŸQV~×7ėĪΏ  ~"’Ų?Ŋ2Ö˛pƒé\æĩ|˙kŗVˇqļMÕ°/h?gf€,OūĨū”[° ˙fŠ]_É‚Nž•$wĒ"SåIĶû´q¸SUŦÕ1õcL–ũ”“§÷MCc¨BÖāá‡'ǚŌ5^øø”ũ(p‘÷ĒkČĨăīPÚĒTõãĸš—í|T)4MzØu$/­ZÚ§°ŦíR(Ųí”ĸķ(íZ×ûŠ^˛ĩÕ Čû˙ĐĐ“o ëūUSPąļkWJ~U#ÖĄģæPI§[yj<ŧqØĶ$Ķ`Úpd_Ŗšŧ:R?Ü4 ĮĶ´Å[rVy—,z7Ŋ[û  `^Køâ§˛ļZžÖV—k5ÁûY??uöĢ~Uōôš6ú­Mi˙-sũķV(FÔŖË|ß•kĪŊ^ļĀ˙ēÕ)ÔúF˜Ģ4Ëk×S5͒ŊŗŽ%ŨëšÜ[î>ky×ūk?Xųĩ5?Úc[”ĀĘÔ5~ÎŪģ™G*Gz¸/íįēФŋPË‘œČŋÎŦĐõE?… *ŨŨĀm%"hĪĘŠŦDëå  :zÕMJŌŨ­$Ė)œzS˙ŗm01ß÷N(Äė z)ĻXļP¯ĸ Ĩ}§Fļr”–eųOü´4øŦ'H%ėŖ¸€/LvÂíčĻŖąl ėåT/!ŋŽÎR.‘ĀSÉÍIöœq"íĀQ܊ŋ+m‰Ī ¨tõÛa˙ĻbŠŪÜŪĮg.ëA§•’Ÿ ô‘ŠöW :hŨÛlĩ•ŊŸŌ’ŅvÚBžˆŖôŦíGTƒė3)YQ™JŅ‘ÖŦĮĒX• .PqüGíWŲˇÕüéĪck"öņ69QUõ ¨$´ “FÛ¤Eáū!Zƒ@wÚ=‰š´D€!yí‡'ü*ÉŅĸQû››¸ŋŨ˜Ôķœę–Ģč’7ōÖŽįŸOŊ]R$‹S“rÄÎĐ6Ū@ĮųôĢŋgÕĐ|ˇĐHé¤8ūFĻæÖ&?܁æÍūpô4ÍéjjnåŽŪ wÎÛž}ŋ0ôĢ—š…ôvs´×A°üË*ļ*O|ÚRI˙=ßõĢ:¯6.ŋßeÒ  ÖڐŽŅėoSj…É€‘úTręÖm¨[Eb|ÄeÁāŖë[P(mUō3˛?2€ŠXˇKËûú´ļ2$Š#Ŗ+n‘ēN?Ĩ>kKYTų–ņ?ûČ+:ĪGĶåĩŽGļ]͖Č$u4z˙˜ŅŊ*ÖŦÖ-Ƒ ÜÛŦ3\G–$í”ņīVŗîP~ëS¸īĒŋô  VŧÉ;zž? (ŧåŧę?ZĪŗ‡SXw%Ô‰ųã÷öĸi5Ežh-äÃdlr3ĮŊkÔ6ü´­ęÕPß] ũî/ü•Ē;]R5‹2Áp™byˆ‘Ö€/Í÷ã_öĒSŌŗ?ĩlžå?|ûÃlŪÛ2“Æ~@ŧ1´lYîbyJęĘŪ]Fō—$āV…Ģ)ˇL0äf̧ÍĒ“ũØč˛évÛNĀÉūëIo`É ėš•ÕÉÎ"jz FŖÚ€3Äbābā6ņ->fŊD?,møÕ˜ų™Ī Ĩ¸?ģ4VŪk…‰wĀ CvŪz…Įü¯¨ÂĨDŧÜ}1¯" ÉĮ֋kˆš<‡Ôŗ*”9™ŧ^PhC÷œãoĘĨ˙?ZĨØdcåJrĮ•!ē8$C/×oJbߐãŋåR˙Ÿ­Qĩēv ~Ī/Ū<`Tŋh“ņī'׎(Ņķs!ĮaøTßįëYÖ÷R´Ō˙ŖH9éĮ5`ÜI˙>ō~œPכ–ãø*—üæŗĄģ‘ŽeÍŧŧc͚ąö—įũOĨ9ųēO— •™öĮ7Øō%ûŊqÖ­}¨ôō$ĮĻÚĄŠüÚŊŠėÎ ?Z×ôãđôŽzîņŽŊoûˇ˙ lũŠGXߞŋ-:ëˆ[Ö¤ÛíéT/oPDWûÃ)Ģō<Î~”4ßęĪŽ8¨­E˛`z†ęúōÄ.:Ņm{ ˇC¸:P˛ĢŽƒŧ( ļÅŪ[ԜnĄÆ|Áųô¨ŦîĸxÉYSķzĐūL]6/×Z;hžŲ#yj0éÖŦųŅíÎáJ‚ QŽĨ†î1í@yuŲøU ģx~Ûjœų›‰ž˜­-Ã'gŊeŨ26ˇfģ¸Úäsր/}{3€:üÆĢŨÛUÄŌ˜cæĢųüũ* ĪÍõoʁōe ÄīŸJŽâ+‘lšíÔ­\˙9¨.ʋI3÷0x  –"ûėhLŠĶēÔåīUsˆÎ}ękpDƒÛxž{ūžÔBÎâķcīKn=Ŧ­ÔĮ†ļlz‚(ŗ˙Qøũī^jÂNĨ 3…ö5G‚@U?ģÖŦũž÷ƒĒšd\ßËģžÂŦã“úûP Ũíŧž ŗ;ūTVÉ5¸ˇP7ITū5‰4k'‰áVjE‘ūÕlx[–‰N{m ¸’6–ŧ}˙_jŗ¸zÖMՔ yṅÉcŽ8Ģ?b‡øZE_Pæ€&Ŋæ z˛ÖŦV=ũŧŠąl¸›>j€š<ÕÁ œ ’sę´Ā’˙›GŧTã ŦË÷ēŽ|Ȉ۠åHīS™oTŨBųéķ‘š@Kͤ‹ę1SŽ••yyrą ög”ŦzŸûD¨>eĨÂãũœĐڇ6r/÷†*qŌ˛îõKmˆ­æ!g_ŧ„wĢKŠYˇKˆĮÕą@ Š€ÖģŊ"/ū<*ÃE 2)úŠŠsqžBŦ¨Ų•z7§?ŌŽnŊfę66’5˛hžy@8P8Á?Ō¤:UĻ?v¯ũs‘—ų–ãæģĩŒÍ˙Ž‘ũjÍbf˙ÄØŦw—K˛įĖÜy>˙J˛ÖWëūĢSûišą˙ÄÆw˙ĻhŋĢY  Hõoļ]˛Īlä2ŖCĪíõН.5k{I]āļuT$˛HF?:ģ§Ž.ûķˇéō˙J‹]}š5ŅõBŋŸCGŧšˇŌíÔéŗ:áŖe9ü)×Ú´gėë-ĩÔ#ÍV>d]‡5Ч§—§Û§¤J?JeČŨhŋŨ,˙Ļ?öj‰5Ŋ9Ž>ŌĒ۝6ÎōÚ[Û§[ˆŽJĒá‡<õëAŅaÕX{ŠÍŗĶŦåY™íbmĶ62ŖŒqũ(ũā-ä|ũÕ&’ŅvZBžˆéYˇÚ=ŠZšŠžÖaÖŦ ,'úģÛÄöķr?Z°ÜŪĮūĘ7ôŠemąŗz ĖŽÖč^ČūCĩ/ž¤˙…>ņ5ĩ“Āãn9ˆŠūtvĐmĩˆģE4ü×ĢūĘŽS@ōmŸødeū• wwbęV{8P>G ŠĶ”â6>ÔØ AíT.ĩ °‘%ĩÂgŽc˙ •uK<`ÍŗũāGķ  |¨äērČ­…î*;ģ;SmqũŅIkym$’˛ĪÉĀųĒ[™(aķ0éļ‹Ä[N:Š"ŠÚič×w%™āpæļ ųjĻ›Č˙Ŋ!  ÷3ǁäŧžÍLaŋEųgF˙yjÔŧȃۤoģ@–í~ĨɎ7įąĸ{Ģ€U^Ųš=ŽjũŋúŧúŌ?3  >Ü |ņ:˙Āiļ÷Đ4ŽwcëW[¨a†6V%“é@ šę"œ8Ģ ë´`ŠŠqgįĩHÖQã‚Ãņ  (?Ռuõ§ļ6ž8ôĒĐŨÁäĻd^œRË{ÆÍæœņLDļã÷^‡'šyéĶJŠä&ų˛1Įöŧˆ îįšÁ [õ‡šnĩ7nœzU;Č^äí$ãå53]Äwsô „~ōSŽsÁŠŋÉĒVˇēšÉÁoJ›íQ{žÔÔŨ9ĮaŠŸųÕ8.áiĨÃwÁĢâ!Շĩf2Æ|B¤į".âk_ŋŋjÂíÄ3ˏ, æļ<čēoõÍEwz°ÍOéÚĒ]\EæÂ7 îûšëVŧÄĪŪ?ĨExŖČ~qŌH"UÚ1ޏ¨¯dAų‡øÔĘé°tÛé@ $Qė9EüēÕk+X„tKķqŽ•jV#v8ĻZ‘ä.Ķõ 6‘-sUmŦāķf`¸ģĐČÛíUízĘßÄ[ĨcûÎ=>jɒÍNŊ ųXÉ<ũÚŪ˙9ôŦ´ĩö9ábįہ–…Ģ‘;įÔÕK›iüØļÜnäÖĩ8Įû>•ŋņķū.h?*čmj‘ÛŠ­öåˆŋ•j}?̍˙ĮĄ=ąū×ĩCn׋lƒbž>öę•å¸ Ė€=jĘũÁĮû´Ų˛#oī`āĐ"ĖĸŨ|Ëw˙dŌŦĮvŋĮąĪËNĩ˙tĮ§Ėjuûŧ;R‘kÚîFæTČų›ÖŽũē܎dŊj;5ˎËÉ|môĢn )>¸Ļ$SÄŪ)r]Oî€_A[‹"œíe$}ęô‚ õÛĩx”ŧCZ§OˇéŗoĻÖë@ ‘ßÛŽü.ŌWŸŊW3˙ėÖKiņM6´ „ėßr­ 7_šu&îėps@ y“qlŖīīČltĢ\m=”õŦ{Ģ{ŸĩZ(šų7\¯9̘Ôŗ˜\˙w‘@Ŋåí×Ģųœ.zкޏ<úúVMÔˇĸâŲL*Nōw+uëÅZ7nŖ2YĘĐy ŪāŦ`Č7 rjÁëūØûŖ=Ģ&īRQ=ąhe$čTũŪjĘꖌvųĨGPĖ1øPī97|­.wgĄĒwŠ6ûņ)SÁ]šük>{ûWē´ĖĢĩ˜üž‡M^Yâfm˛ÆÎ¸Üsڐ/,-äēļSEˇß.LūĩŲB€Ļ5(ŧƒģ9Ēzįī$˛„r˛ÜŽæŨ÷Hė(xĩŨ;bŠ™“ˇÍéBęV3jËu&ļ:‘ūu†ūĢ÷ē ė<ķT~Įg5ėžeŧGåQĖ|–É˙ ŌYce[čsQXôD?ß%˙2OõŦËŊ+Oû<ŒÖņ#mų™nÖĮj-´ˆÖŪ=˛ŨBåFā“#b€4ī>e‰?Ŋ*ū‡?Ō§Ŧ9ŦnEĖFād’ĸE ´€jĮ—Š ų/a“Œ/™2}84v™îũ ŋ§˙^r7F՗ųÖ]ŦšĒŖˇ•k&Y W$qŌ5ũęIɧÎ뤁¨^ ˇûŌˇĢÕSĒlͲēL “°äi–Úĩ§•ķ3ĄÉ'tgր.Üķą}XTŽĒËķ(?Z¤u 9'Œ ˜øįīU“q !Û*ŖPŲÛuÅI+_Ē’&ãŗUĨ˙^ĮĐRÍ÷ U†k”…w[ž1o ¸ų ‘p=+CĸÔqŒĘæ€+Ë}ĄŨ¸}E>Úęˆ|ÂĨ¸U(r"ÛÅå€c^”š6@aV—j˜˛…Ž2ŠĶY§lŒ(^5UŒcĮ4ŲĀŽÜSŧÅūđĪĻj+‰SĘ?:ã×4ÄI¨ŒcĻ9Ĩp6*o˜œ ËģĶ4Ų§‰brd]ŊÎh-@.?‘‚íöíQÁ*\ãĻi^dĮzûķŌ€ØrsR1ūÍCo"y+ķnzÔĻE¨Ī§ĨE€ō6>lôŠvŽxúÔŌ++ÃīšĻ,ģĨdYCkWOÁÚZžZį;F}1YšSĢę­ˇānü+W#ր)\A\ÄģƒœâŦyuō×ō¨ä+ö¸Įl ąßŪ€(jŧjĻ1ķ0ĮĩOö(v€{Ņu‚cãpÍXŊ;P+›8|‡å‚cûƋ{5XwČ?ŊV.î×ԟ¨öë@5ŠĮž•Vąļ‘Uȝ°XōGZŅoēOų5 Ž<Įđ=(?&`§ņîĩ™o˙ÛŌęYcēVéĪü ˛ė9Õ/X}Ė€Ož(oũ$1ÆÃøÕYëíq‹ˇÕĨū~ĩ˙ž™ųzzP!†ià Ā~€Õ-JîU‡›wÎáŽ>íkw÷õĒ—ĀŒ˜7{Đ0[ĀĖRÜí4˛ØŨÃn ´öĢŧ`zv¨oú;ü œt¤v÷›xÉ`ŪŦ,¨T‘ ˙ jC”Ģĩz}ėPĐÁå6b\wâ€+iō# °Ā°îoZˇšvu PĶėáä믿%@&Ŧ›TĮŗß xĻn’Kjú‹Ÿŋ¸ Vסū=é\ū‡mžęöD™ĀķH Z×kyvņ;cЊ@ ˙! 0<}ęŗé˙ŽŠÎ†;¯ˇÍ™•ˆQˇ+V?Ō€oõgÔįĨ5ųÕ#Į,îįîÕŋnxīëYFKŋíOõ  7ŪĢ?i~õŖ˙ŗŒqLJŪÛî%F:ŗĪļīâŦ¯ˇãQ]ĐH¸Œų‡iũ*Īö•°ûÎWwpÆę@,ÃuíĒįäu9ûĮ?Zĩ€pJõū}ÚĖ7ÖĪŠE‰”æ6Į#x­–2•†ß>ŧSŦ°Æú”yD;cmä¯^”æ°ŗ`ŋčŅrƒx 0:› éc\õ×ōĢ'œ€z˙÷M 2IĩmC‡OŨ“”|lSíb­´øgĩcé˛j‚Ķ)o žc4ŠÛņŗ-Ę˙:5 Bá-$ķ4Ų7S´‚žOĩhiˆĢ§[ Ĩ•NŨŧîęIŖQÃZ2ŗ ŗĸHC2GO΀)Å­"¯ī-.âå‘ļ#`tĒwzĩ­Æ­bí#Ƒ–.ޏØ{čŽs’¤ž…r:gīV4‘Į/ˆöÉqˇÎJ}ü÷ũhÜzžžéķ]ÂAų<< ũ)m§ŽIŽÜË‚;+ãoüęYŦíą’ŪT|œĸU ="Á‘˜Û#bFUŋ‡8Īé@u?c”䍘Ü2pŦãŒ0$}ÖĘũãëX÷ē=ļČÄbq™X‡'Ė_ūĩXm9“$jJT|ėNrŧô  k^üØá šä|ÄŽ*rr­–Ûž ÷MdGk¨­Ôßņ2 Y/8§\Ž­ |Ûi‚˜Á˙{¯ZŌļĀ„ŨĶĄ˙&šFnŖĀ`ēŒ~ΨÄú¤qĸĩœ ü<>9˙Jlz…×Ú\ž.ėm¸?7øq@¤árŧ÷Qģ­$C Á#fĪĢ(ˆī‚æ<ô,ũ*TÕl‚üŌ‘üHFGĨXxb’ã÷‘+¸Ë/SPŨXYŧMēō}9Ĩ†úÕ¤sö˜Šđ8jšY‘€Ôä€pŨ(¸Ō­ˆËß*äTqiÅ.’îpûY­,Œž*8qšČæ€35+{ąTģ-ÎeĢhē‚FŖĖ…°;Š/°ŌĀ…ŋ‹ÖŽ”B ĩÎ^?FĨšúáJ‡ĩoĀæŽC÷sęi—_N´ÔGĪ‹Į÷i Ô mĮv9î*ËtõĻGlåG>ÔŲ.Ąl æŦy‰ŽU)­`yW1Ž´÷´‹iāĄ  ]ŽiŌũÚĄok´1Y¯­:hæ;BË@ßcˇÆ<ĩúúÔ76vėŖ÷J9éW7Qū ÎģŖ:bi\×ĩÍ´K)ztĢ[—Ô}=* É@ß0úúĐEgDF¸ĮZI­`ōŽb_§­X ¸ž•Éšõ  ŗ"\ é×Ō–KH “ņõŠ•—`ôĮJIXl<oj§gcÃ÷:žž•,–qmaČ8ûŲ§Ú•ōƒõ§ĘĘ"9û¸  MÅ<ËŠ 6Ī4€ĄĢXÚ&~ķû|ÕG@eky™>ņ•ŗųÖĻ}ø  ÃeH2Í ÂüÜÕŋŗųí _­"Ūļ{/õgüâ€2ī-f3ÂáˇnéŠĩö{Œ\g×+Ō–S›¸ĮãēŦ˙*Ύč[6Ų—ūųëS"Ũ—,>î)÷Ÿę€˙hb§­U”Ũ*Ÿõd⥹{¯ŗc^ųųĒäÄ_'åĮ&’Ûū=͎ DĶNũIĮŗVf—q)žŧf…ŗģˇĄ˙8ŦÍ Ũ0ęe?7­ZûIį1?×*´w¨ov˛ŧåz֏oöj´J>×!=p6Đ!ßj‹Ą8Rōö:ßįˇôÍh퀞õFîŪ).-ÔĒíÜ[v) ´."=$SŸ~• ėŠögÁę}jFĩš1/ąTĩ AB|ĖÃn;SEYv/÷HéNrÂ&Æ3UŒA@V|Žŋ1ĸ{`-›mĊ1×4û}”ŲÉ$ŸJ™žéöũk>ÆÖtąŒyÄ}Ō*YŖš ÄĒH^”SÃŋ5ŧîWæbŌļ;˙ĩŪ°ô¸K'1ė`\’IÅiy—!W1 vÃõ ×k‚§åÜ>l÷Ģ]šđͲž_6äĩģŦč1Įgí$Z7 ëļ Œí)ŗË[=ĒÖFÖėŊë.ŪūwrŽY#ŠÎjīÛ <ųĢģûģŠ€Õ˙Œ‡ø–1…ĪQVd`|tǐK^\mōüßŌ­eJ˙˛{{Ō‰´‚KųāM`WŠÍHÚuŽp!Pũ‚’)đķ{1Č2ŖÕ?xo”ôlū”“^Ü4rĖĒÄŊĨNÚ{íĀģœ)?tášĪZš×æ–áˆāČÜ}́SôÉ8Čûį¨"ŪÚô^Ũ8ž×jŗ4]F3ëīSyzŒiŦđ8^W ‚üwĢ%`?åĄ1Œũė*vä6ķü\|§Ō€1ėäÔü‡)/žGeo3îôéFĄyt–SyÚs,L§î°8SíZVjĻÎŽ€;v˙\Ôą˙A“8ųŠG)ä`Ûķ R1@ž}ĘaBĘÁNŽÕÖŗjĪČdB˛ŒŖŠ_ī=Ģhp@ÆvŒŨÕxäÕyÕZâ ËŋigÜTÁųŠŽēĩƒÍÔg`ų‹c.0x^Æd“_ŧu–&ˆŠTņˇ­i=¤ @h!b>æcā/V™§i÷RŨÉä+§œD+’:”ŧ$ÆÁ¸Ũß÷×ũzŠÄŸąŖ‚Xdã>rqTn´{4ˇ‘Ąķa*Ĩƒ$ŋšū”°čĖ‘Įå^]FĘšQœĒzŠģqĩn­—hĘą*vpoJœ|ģB˙ųAc÷xëX­g|—°Ŧ:aĩ¤Ėœ÷ĪũõV6ęčŋģšļ”grî땠 v˜&V \ãw šuĐ&SüLŋx˙×ŦëYĩU‹pŗ…ūfl‰1O Q5ŨŌŧK.˜ëĩ†60?/\~”ŦqÎī÷IJdD´’“ÁÜāôã˙¯UĸҌIerG'Âúđj(5kUŒ—iWæ=b?ƒ(ũĮĖ ęÃĶåŠ6¯(ād|Ŋ+5ĩ[)$Œ-Â/͓šqĪ­[[Ûg˞3žWæęh‘ŲÚ1vō#<÷Ē)tģ6’0"T˙tãņĢVōĢGĀä’0z͞`1ž:úĐFŌĄ÷o4gũ—=}iļö2*|ˇ“rr+BC„$ŌEÄKūy  Š`ģ7ņ(¸Ŗ, -Z•oU7úŽ(‹įԜîÎÕéVĻá S…īV%ĖāXĄn§ķūkfüjđáqíŠjríÅU’ø*Ņ:˙Āiņ^ÄPsŠšléNØģq´Puē‰Ž 83ʛĖ*ļ…§fōĮۋ8ļ>†€,@Ëåž´3"Ô1ŲíŒ#TKm/ŸÄ§ZÛû$?ŨãŋŊC-Œ-</¸æŽįžÛĒdûBũ 1ŲaĮÜāu÷Ēזp˛(ŲՆ=ĒūîzŒöĒ÷ Ą“'‚ÜĐ…ŦCĸō*Ŋå¤O0yéÍ]Čã§ĩArà ĪqšEĩŒ(įũęŽâÖ?%ūöÜsÍZČĀįŽÕËbįœPVöǰ ,ŲĮ÷Ў6ÃČl;ôįæĢQāFxĮZŠņ€ĩ“Œ-døzՅ†æ‘Ô39­_ŗļ?Öļ}*ļ„ģt¸žmŲũ+Cüæ€3!ˇ—íŌ°’:Uŋ&QŸŪū”–üÉ)č3ŌŦ‘@RÅpoâũꑃÆ*æÛ˙y ›ãŽĄy5cŒ{PmīÚļ(~øĪ5guÎÕųķ§\s$^ģ¸?ë@.Ĩ¸X\ų98éš-f›ėąæ&ÎŪĩbđŖ¸Î=ũjH€/\t ewš`‡÷MĶž+?EēÅŧģԁæ6=ë^n#o\qTtE`–bXū4cí‘õ?zĢÚŪB×Üg­_Ú1íëU­Ŗ]ōšAËtÅKįĮž0?Z­,ŅÛ|°ÁÎÕĢM g‚Š•Iėā{ôÄk•_˜ŌūõĪP^Ģ^2‘ 6—Žißbƒ°!ŪĒWļŌ@Ą¤Î˙ģē€5GoĶŪŖēl[1+ÛĨWûg“ü*-F‘e [žÜåhå¸"öŽiˇeEœÄđ›[uV….Ō—rĀÅG}%âŲÎJ!"3Æę`;@Ō`õįÖ´¯éY:<— ĨžA?/ š¸÷Lî‚@¸9ã­ <~îSßĖ;›zŦņũßáŦŨ>ų>Ę7Ŗ)ÜÛFĶŌ­}ļōžšíLŲ¨2\1š|0ôâ§0DËĩ‘HÄGZЧ]Bņ9$nŊW<Ä8äs÷GĨ )ÅclgšÃ0c§ ą‰~îå#īmr)öŽŦ%mĘNķŧúTŨ1č>ī?z€3­-{pÉ<ĄK|§vwqSĩŊÆÕÛtüödm:Ī%ģŧö*s€Ŧ{ŋĮZČŗŠü-ĉ<\ĘۋFyÅOJ=€-ģ•År*Ő"Ų:oų™W=ŗS?Ũl1Žė÷ô  ‹‹ņlOŲ7‡‘›rĘ8ųēsR]jGo+Éa:ĻĶÆāúõĢ–#ũ ܕ 2—\ĶoŋãÎmØÎ͒ļ1‘ŽßTˇÔŖŽŧČgFT )17@=ĒíRĐ­°œŦËō’FWÔæļ9RrũÅŨÔUKĨķ/­#ÉÂģIģƒžËúĐ’ūҞî7Į͝Ęr9â›æ+ßÂą˛ĒgAģ÷GøÔĪR(ÜFStyŲõŦ˙ėŨ>mFLÛEŗjņ‚>lˇ˙@E—oČFÖ9O››“ŠĪĐ =‹Č~S<Žå)ĪJK2Í-åuFˆ…%Œr‘°âĢiZ^í6ŨžÕt›Æí¨ß*žšÅj_åí]JāÉōŽWîĮõŠūSĐcsqFXúĢîÆņDjēƒ”’U !’ÃŋéS4:¨ß‹ËfĪČېŽĶÛúШČ{ų0ŨrCtlôũ*ÁÜW¸$g<‡Ōąá“W7Må@βci Œũi÷WˇÉ´Úa Gđ¸l7­hÚŠЌ Û.WîņÍ#dÜE° ayĮųëTƤĘ0ÚuԃĶäū!ô>ÕÖ-MË3ųČÁ~éFûŨĮé@Ųųršeę>oŧ 2Ė ¸dĪ{5J]^ÉŖ}ˇ 63ƒüĒÂ^ZÚˇĢØ˙ĨA —ˉã JõĻOag"6ø"įŠÔĒëį>]pĒį §ĖßēoČķŌ€)G¤YųkˆØg*ĮōĻĻ–‹+l¸PēˇĨiŽ1øt¨á ŗ°įŌ€(Mapˆ|ģézc Ī ˇžTâíIĮ9N•nb>Qžãŋj{}ÚÆ˛‡ÚnlEÁ&Ļž{åÚŲH˙eĒ֞§ĘvŨģs“S?úÄĮŽh§ÛĨQķÚĘŖÛšHuūmĘãžëWÛîĶbQŗĨT{ø”žõcíP‘Ä‹ųŌIÛņĻ[ÃtģŽõ<Đīėš3ŸˇÜm=>jŽ4yĮüOĀäî­Īķô¨“ũssژŠJemßmŸžj§q¤Îg‰EôÅŗž[ ­ū˙įŠŦüŨ Ī}h‘ŌĻŪŋŸo~j­Ö•t]ž”’Üfˇ˙Î*ŧŧĪ?QūÍģų1¨IĮ^VŊĶīŧˇÅķGÍoŸ­As÷Tz‘øPbéúŠĀێīMĸĒęļē’Û;}¯z;žQ]ųÍgëdŽ™68Ę⁙ZEލērųsŦjz)\Õļ‹XT_ßD}ļ֕ˆ"Ō ØŨļĻoēZįŦŽąįO(üܓŌŦ u…C˜Ą<ú֍ú–ūîãz°Č qo5Q¨`Û)ų~č5iu @3oąaķ+f€7õīíTĩŽ4ˌ6>OŊëU?´¯”Ļí=ąß ÖŠjšŦ“YK–R ā)=¨vÁvØBŋðqSɝ­ŒoĮáXÖúėÃ1J9^I.šdŅHĸF\ hũ’¯ŲStŒæĨ‘WcL˙ŗŽĩŸkĢY}š,Ę̐ĪCVö x˅Îsڀgk ˇ‰ bĖŪœÔelC,ū")ļ2ÃöЏØG\÷Ģ,üíģšÎ´Ķá,Ø !äfŦ}Œ…¸”cîą íŠ,ųļL6s’ņéO”¨‰‰/qŠ@fYŲÜ-ĄÛtĘ˜ļPķÖĻ’=EI+<.ā)R8Ģvyûb­ˇ`įšŠiŖĀROŪ\āĘËĩeûÃ8ÉúPũUöi—,Ņ–ųāį°juš*XÄĨpĸ5Gųyo—˙¯Y:žŸ,6RH—ˇ Įj6ūCŠ<ÖŽ­žĄԃ4kŒ4\m˙(ÍÃ/ÚáÜĀmË?$¸?ãV2W¯n>÷oīV:&¨ˇ‘5´Ū\Gi ęHäՇ“SHÎč ¸A’vŋúÅ=‡¨Śå$fˇJĀåG΃€J[°L%xų™QÎÜg‘ĶķŦë;›Ä´Fm5pIeqĘļO\ęl’ÄŗØÜÆĘŲ8ämëë׊×Ī]Ėđą Đû~u[šyXŽĶšÎqĮ˙^ŠfŨ?ÖĨÄxáƒFx›Ĩ6 ^Äį7 īoâ\sũãųP˨c‘Âę>KšĮןZŠ+k훖ûŠĪĖkBL;ŋSbĮ”ŧū´"ęK2,2Žr21RO%ôqĐÆãž­\ëp9č3ŠŽõŠÛšÎ(”÷ÚĻ-žZ ßh­å1Ū´ ]ļ觲€hNecøP)5H‚Ë"ũV¤PļØ?yÛŌŦÎ Ž Š 1˙Vŋ•AÜ-1ċ€=jYfM‡æCšv>RĶ.l`+‘ô4n_)i7:ÔÁV0WzÔQÚJ'b.Ŋh9â’õuJhŽ•x•OáOŒ]$KōŠ  \Ūc;cúg­W…¯Œ˛e#ųéZGõõ¨aū3ÛwJb"Íį÷cüúÕ@×ßo˙W}~íj˙:­7RĀsī@ ŨyĶb{ļzÕW–ķí‰û…+ƒĀjÔ˙" ņôŨæ€!’KąÜŠ>ÆĒ\\] #˙F;wsƒZücÚĢÍūž!ß4Ú'fŲŊ€5—â Š~ÄĘĐ8Î2{küšÉר‹hÔ.s"ū<Đ2[;Ļ‘ūæ]ģzâĨ–čŦD˜dÎ8\uĢ1˙Ģ^;t¤›ũSsøĐ"†x­o¯œœüŋvŦũĒoģŽjįÚĄĪߨí7ĘÛW~îMNbŒē1Ū€)ũŽž ˛)`ŋ7=*ߝ8ĮŽj§ŲbkđÆ5ųåĢ&Ú,įË e{Ųt@°ÎîÖ­†Ŗü+6öÂ&‰@!ˇgp=*Ųŗ‹ŋ=h-Yą§M†íäÔÖAEœ@}Íĸŗ5ģU ûĮę6Ž{Õ¸-e[tÄíŋhúP×û§×°¨løˇ䞾ÕĐ\ˆ›eĮûÄt¨ėRđZ&æN1ր4ÎjŦŨNváxõ¤&đōĄôéU-&ŧWĄ ürŒPˇ~ÕWŽĨĮ'gÍíIö™B`|w5UoOö‹†EÂđ1÷ŠĢøāzúÔ€‹<Ãå¤[¸Ë`†úméPÜŨÃö¨T0 žsé@ģ˙ĩÚ˛ĩņūƒ„į‘CgëZhˆâAˇ×5™¯HŦ–ËŧdĖŋ.zК›2/8ëU¯­`û4‡É\°ôéW3“ëéP_ögūīF÷ Iŗ1"´ H'j ŊĮČwmų~\õŦ8 ?īš†ķū=¤õ#ũšÉ‹@ƒėņōĀ$éDē,‰Ŋ⾙NŪ¤į5ļŖ§Z†īåļ÷~QéL X4ŨElâŪ•^)(šZ†9ŸĪŽAŗæã ­ØūXĮLāöâ ŋ˙G>Š3÷č*u¸māQ nŖųaLšÔ5"d¸ąÚ„aXs˛ē ĪN>íVÔ6›|Uøäō(0ë3ÆÁeĶf GÎTuúT7> …‘CÛˌ`ÆÜđŽ‹øšÆņĐgĩSŧ^kd#+æî yĪ q@—Ä:ybžtŠÍš—¯ĩ#k6ËnVå?0 >áÚzūuĸö°I÷āOœp ˇëT%ŌŦ$žMÖčPîÂã'#֐Ĩ§¸l]Áą¸›ž”–sŖŨ]ĘQˆ~ZŦūĶ› æ įëTāđõ´ĖUį Ŋ‚…q퍠 ũÃn2ÎÆ2ņĮ5 ü{+cŽį-ˇ9Vbp+o˜VG‚öehĶ ã†síIoŖęqÅ“Šųw"āœĐ†´-œ$rgAûĩĸå]„‘÷Ŗū˙ũzå.mõ„š´‹íK;3™" ˙ëÖŽyž$@~H¤į¨ÛĮˇZÚOøû™•˜íUįƒžX•ūTë‚cˇ‘—h(š_—î¯q\ô:ŽŽWūÍÛķ‘ąŠ.õšü†Ž]1âŨ÷y={ö÷ ŠÅ("Ŗ‘ōņšcn" 7*†uųžđāZĮ_[‚w[\/ņuĪ>ŸJrx†ÄÜŗ™&U ÆSߑ@‡îķ—øx¨-ቭūh”Ģ“ģ)×'#ųÕ#ŽéÅN˕ÜŒŽ=*kmJĮɌ}Ž Ę ļ8 Ëci-Āķ-âÎ0Ø\zb™.—`ęÄÛĸžåN0jhîbiØ cÚ̌‡íRĖßē?—QĮŊR‹HļŽÆ™N3•ņíLūÍuŸäŊ¸UUãœāzV§Đ}8éQDTĘå §-Ĩäh|ģŌxÆ{Sŧ­IW‹ˆOåzUšJáFîūĩ'oķųĐ\M¨ųîL1f¨ĩ ‹ĄY,ø$ckfĩ!äš˙kŌ ģÜĶ@ĢŽ_4‹w"§Ík*ā~”Ø/W.Lr{­^cÅ2ûŧûĐWž„ēŒ•įēÔÆō ŦZ{*´Ŗ*?*%Š6SšߊŽŪâ&Rw¯'։¤RTnhŠŌ/ũX栒Æ&1•úžXc­E 9ÍC%žä•×ņĻ[ÚˍJÍÔ÷  S*_áŦŲŖēŪ 2°ÍNÆéWîƒøĐ“Īr?gã°ŨPÚÍtUŋŅđŲ9ųĢMŠíjd%|Ĩ÷Ļ"Ąžãn~Ėv˙ŊÍUļšškЁļ;‡û\bļ ^j r¤;íր ûDø'ėíŽüÕXī%7l ´Ú×ãĨCß6Fü(ĩI˙<=ũǜˇ˙éq/“ _]Ŋkcå¨ Ąš^™€"û_ŦOôÛXēõꗷPX~ôHé].­cęđÅ%íĸ0ã~q@Ëiy@rzuĮZŽęö/%øfč\ũĐãĮe\âŖdGņרÔMmŪ¤íÍLn"ÁÏsšm´0%¤Q…tpií Á@Ą ,g‰ĸbmÜpsÖŦųŠ{ūVÖŌŪ4l.Xą88ŠžÍ p2߃@Dāß8Ũ“ˇōĢYÖ¨Ec wr0,uOZąöu'äSØ(Éʛ¨A?.xe™Wī0ļMfÍhÂū&Ydb=ņVQ Č˙ŧcĨ ։6Šņ:‚}*ü|"nžĩŠ[O%ǰí•@žõ ĸãj€ĘOĄR(-É$qģI Ųn›š8íTîäģÉąU›FMÍ?ŲP˙ģžy¤ũܑ‚|Õ{<4ģģƒëIq<Ģ*ūá›å< ĢaxÛdß ĢéˇîĶPúãđǰôŲ{ļ:QöčũwûĻĢZ^Ãö‰Ã‹Ÿâ&€4ÔsĀõ^xŅŽĸŪŖŽE*L<Ī3ŋ =3QŊÄFõvNĶøPƒ däÆšôÅck6ņĢ(„z^ZļDĢܕ÷aŒÖV¤Åĩ[s%ļÍh}–p ¯ &ĒßŲ†DU‘ÖŊëA_sˇÜ*ž^‚˙z öy pøîOj­ĪŲ›l üĀ`¯Ūæ´{tãŌ ēÎcQ÷÷ }3@ Åâā~éĪnŖZúk•ĩ“÷ AáˆzŌČĮ_—Ö ŧåPÉqōúķ@ũĒUĀkYx5Rúũ|Ĩ)”™ Sîō+[ŋŋ÷ĒĩĐV{u#åizcŋ&€#ūŅļū&dSÔ2PÜęĖöøš2ūg#w­|Ų8ŨŽ~•Nxb’æŲJ‚—›ūŊLˇˇ 29p9¨]Õīm׎UØ<ëR5ŗũč#%ŋØ-Qm6ĖßîōļĒĮ†Û‘’O¤ÛpÛētn:š…ũēRqŊQAįĸ’ÕØc'›*‘ÉÛ+p*Ŧ6 'štŧšęáÔīųsÜ{Đžpœn;FWæ˙X1PÚ!X°ŊK3†ÛĐÎډ­nTü—Ōáž4 {T‘ß+RŗÃķ(u āã<āĐ›ōŋa*ãz,m#Ž˙Xx p…ŋŊüCˇéYw‡Sí˙FpōĒĨ†G­X3ęq6ą“Œŗ—ß‘@ŋī|CÎC$ YCgaÕåß/Ī~hņA'Ū^O^‡iôǰÛA$Ķŗ"’@Ŗoüjt¸‚A•–3ĪĒžGņS-Yŗ¸<‡§¨īŸÂ€+]ØŲ<ũŽ0XGˇãúŌM~–Šęŋ1jcēŌ0¸;¤^ũÃõĒO3#åËģÎOĨd&§ģÉĩ\¨8֛'‡`\ySΜ×­kĀĀĢŋÄxĮéúPåK/ĘĖuSŌ€2A•ÕęW õĪ_ÎŖ‡MÔÆâš‰ûŨÉäÖūāAųŊ›­G /‚IÃ{}m$@.R^ãĨ=Ÿ^~hĸ{VĐmĶû´JãË%A Ąh CS0Öjųô85ęŗ›äfŗ­t˛­–ĖeļöjBˇĨÛ'ŒJĄ&ŧ~ky”ũ)Đk–ĸ zŸu­+€*÷y0šãÜ  Qjö˛O…|ņRÉŠ[#ÍPŪ™§Agj×;„KĐÔ:]ŖĘ˙š9ŨÕhėW\:ôõϤŠ×xtĒŸØ–…r›ĮŅĒŧZJųåĪ?ĻWšØ•ÆÎ´°‘å ƞÂáWäŧsÛĻ’ÎúAÆî;­hg3Ršâ°c:šĪÆ×#Đ|ˇš‚ 5ŊtSŪĒÆNÉ=†Ū´[ŪGäĻ‘ŽģzU‹õMüéČEãˇJb+Ŋâ'kãũŪĩZÆū&Œœ>K}Ũŋv´%!˙8¨lÕE¸ĀīĪhĻöOûØĒöˇđ3HwŊ÷qÍh2ŽŪTcŌ ļ~sĩwäĐö¸s÷Æ•UŽöŊ|H>Uų^1ÆAųF*¤vđ›Įcî ÅXûL88ÁéYĶ uģHÕ×#vîz ×û}ļ%nÎ ôâ´Ĩoš1üYū•Iū”‹č & tķ?V¸kÖāFĨwᆭ-߯J†G_>%#žO͊‹Ī˜7ÍnĮŽ€ŠĢsxCۃ īûÛ{VĻW$âĸ‘ci ą%EWûl#†WU낆 —PˇkģŪŽyŨžÜVžÕų¯ZŽđF×p“‘ņé@š€Ž%Sö‡ÍP4ŠÚŒjåŗ/û*ÃŲÂęŲŽ2OL¨âĒeÛ5ûˇ’<ąĀãœĐ˛WiČų ÃqÉ5 LMüäãrĒ)įŒdšoöl@Ģg˛°âĢÅϞKrëqr>aŸ;žQë@üŖi,Ęķ÷ęCģĖ÷•öļ>î8ĮéQ5Đ#Ëž”qšâĒŲA~-‹˜ˆv.D~ösØĐÛæXėåb¸MĨ”cøš<ĶáUKuRp6„rđØŠĪŋûyŗ™ėė¯ō3)`Wg#<ÔÄpÃîˇįéķVT——?leĶæ}¨ŲÚUˇŽZœęNélîAyŧŦüŋúPzhvŧÔd‘•Á#az€ŊĒüîcŠGãz)ŨÉĀ^qøņXē%í´PJÁdĖĖ Ģãa#Đz ˇw¨Z›fO?Âģßëõ  đ/— i˙<Đ)]ŨŊJ‰ ŽKĀŌD$؛IeSģ$súPo­Nâ.#`ŧũå;ĮĨ$W5ĸš7Ŗ;yų~n? ?ŗí$sæZÄBcqōą¸ÔVöļí2ĀĄ}w0<ôĮįV‹ˆwįhÂņė;SŌ'Žvũî‹@^Æ Œ`K2 ä)ā͌yž\7(^Ĩˆmĩ7˜ąÜ,g'jüĮûŧõ?•>ā0ŧ°šn¤Žū´V+i_`ûIbîP~T„ß ‡—$ŧ¤UČ"ōöôÎŪ1M0™Œdc¨Đ.ž=˙šČüÄqNŨ"ˆŌūPųúTŗH°Eˇ%ĮŊ=ũäÚÁēįŋŊUYd›}̇^8"‹ģš"A‹Iv{ ąōÕ÷0.íúŌynŽĢģrgŒúĐ |Ÿcķ62Î ŸZŽČՙÃ}öĮÍW.ˆ6ŗ‘˙ר-cķmŅÕTüÄķŪ€ŗÂīĖ‹€ß¯Z›íĒFå+LķM†(¤‘ˇFŋ{ž)$Ķâۍ‰\s@@cf#›õĻËqûõ^6†Å2xlHąéU^Åíđî9õö  2íūä˙ŸĘ›‡,# €qQųGÉßæ°ĀįÛÖĸKK…ĸ˜Üá¨ÄØ‘CmųĐÔĶHPĸ¨5gJˇáwvįŊO7Ú[cĸŠĮ=zĐĒÛŦ`g­+Ÿ5Y úŠ­ĘËæ"g<s^U9éÅhŨ^@#ŧ^z ˜]Eõ‹ŸZŠę˜Čŧ‘ž*o" ykˇ°Å1Ü]ĀļîÆEŲE­Ä^D`ēîĮ­pDasåĻėzQ ĨēĀĒą.ÜzPqÆ>bņÔæĄŗž6ƒ;—icŽzĶĻĩ€ĄĖKĮAPŲØÛŦŒžžÔsĖ_ī Õ[i§› ĪŪÍHlāÛ÷qīžĩRÎÂōļŌ2Ü(4Ŗ¸zÖ:˛ˇˆˆĮ"?Ę´Mœ|ü͟]Ũ+ÖČ6ˇ>%pĒŖ?7&›ÅøI_ĄĒ÷JŖg<$ōiße˙ϝŽÃ5RîŌFšˇ ŋw~”Ō* ĪCėj Ąąd–Ģ”}žaŌsîMTÔ!š6ÎøN´v-¯ĘąÆÁķ+}iåUAnOדU Ží`L˛gw˛ũ°)Ą8ę{P1ökš [ŒqŠŸ`Ī$ŗz“YÖwäҝŪ99ëVLŗ…æ.=$* ÔģK*÷ÁęjĮ–ŋíŖk6Ōęsu>ø>ƒĨ[ûV:Æ˙\P[ĩ_íKUä6ô|IT“Øå˜ÖD—ˆÚÄ9V!ųˆëZ_lƒĄl*KîāUŅ4gŖŽh9áO-ÛnæĮņÔvÖp TP¸ûʒęDû;üøΟ_!=00)Ų°R¸ô=j ü­ÎY˜ą+–ûĩ~SûļÁąQŲãėɃĮsL[4"Iw!ĒŦVMįĘÂâLq‚O5Ļ>é⠇–÷ēzRˇšĮ3n˙e‡—]z}˛Š`ƒ'ĨtĪšŦ}3ËmZų”`d `[åU–¤w;š5Ú.´@ksÄ|ÕŠ˙ĄzUhÆoeįøGÍ@ û[|Ų‚AīŒâĢ=ônŒ:H !ÎWīV™Æ:qéëUņ›îÅÕ8úf€/­É˙Xšwīî ÚžœP¯—íÍĮ)ü‰?üM8´I〰úVtzĨŸŸ)ËĄmŨŽy<ņūÕ3TÔm Â%ʆ1’¸|۟JŸCEEĻX‚Ų~Ŋy5bę%D¤†Ė Œķ͜~•WMžŲl­âK„'Ë;×ä8TŽÂK‹qÎįUĀųNĶ˙ÅP†ĩ‡ÜˆāüšAĀî*”ZUĄ’vû,$oųA^ƒ?ÖŽŸEĀĪ(?{žĩŗ~蜌ŗąQģ9<~”VīFŗōˆH6|ĀŦyÉŠŗUW 5ځĮË9æĻ™˜” ķųûŨĮoŌĻÜÜāąū.ߕeÅĻ:Ë6/.vđ‡8b?­Y^ĸ ü°R b¯ĀíûĶ“Ã“÷{RÍ&ŸâįŽÔR¯"•ˇŨÄĎŦ¤sųÔQio•…sŅŲsZĨ˙ŊˇŽŧĶa`S;GS@“K~ģWėˆŲ`r˛g>Õ)¸¸A͔Ŗ×a?:¸Äc=MHÅBôÆfÛŨü„ŊŦüžI\ĐnŅĨEa2Žā†­öˆ×éMLįžBĐ+‹Ëa ūđŽ3ŒŸåIgqnļČØ8ÉųąVo•MģƒŽxŠ´^X]ˆ@eh {¨<ŲGš€{šV‘<‘ûÃ͟œĐ–æGo%?*I´øC@ŽÍ€gŽ)‘cĪoëHÚ|Xãxú5C †Öb%gŪ€,NĶ‚FÚ4ø—lK´°ãąĒW6“`m¸nj_&åS (4*(ûGž:š|ŠN CŠĨ Ū \Ļ‰åēU˙UúĐØPÆÜ¯ĐĶJƒ*į,}ų¨âUŒf&¨Ōķ3ōŒ1í@sēų‘ŒŽŧ Ôû‡¨÷öĒØÄ×w>G}Õ?ØâÛ鞴ÄŒšį˙¯S)ųĶĨPŊąFEŸ9įîÔÂĖâW÷9ë@N؉šüiļØû:vâĒ^Ųîˇ#͓o÷sN‚ÎE‰?Ōž:ĐÖ?-WŗÁW#Žã“QÍm/”ظ`;š‚ÂÚå`ŸåĪĘ1×ë@G}ĢMÃj÷§¸ cđĢ­ØRDĒ[1ÅdhņŪ}Ēíƒ.<Ö4 čĒŧÜÜF;zĶqv?šįU¯žÜ›ŖB¸áAé@_튭|t2Iãڛæ\ųd õÍSÔ.n ōÍß1Ī4ǟt}:ĶfĮ’ßŨĒëtÁFč\z TwWÂ8X˜œļ:cĨY´˙Pŧ}Jj­ô>BōzrØŠ ô nÂûŽ´ ,đ^R?Ŋ÷ĒĪéÅgX^Û´d‡3|ĢWEÄDđę[ë@ļîÖFpvĮōJŋåŠ?tgŊf[M ę픐( sZ{†:ņüč…Ũ´R\BĨfėæ­5Ŧ Ɉ}*)°obĪ>‹V˙fߨĀmØm9=9éRĮbĢ…–@@äîŠoÔã?)<šœtĨ (ÜZ7ø¸‘Wo­%ĩÂZ 3üÛ~îÚˇrrū¸ééO„Žûź.ŪŠ?JĢmö %'aųãZ¯–}*šī“HšK•Qû•>˜jËŌgŸíwŦĐd—įĨn9ų[ŸĮŌ˛´û̆Ũ¸[ŸZ`\ûYæ†AīŽĩą5Ėû•Ôd m­N>ƒŌĢÛžvã%ūoʐ öØ:ī÷¨`ēŽå *ã Îîõsb;{ÕH­`’yŲâRI ͧĀļO9îÔPœÜËĪ#hŨëL6øáqޤwĒĐéņo”ĢĘšo”>”€Ņųpž‡îНn}rďŧsĶå¨ZÅú­äËũī›ĨCgkrĢ# Ļ9vā¨;ģf€4ŽBúã ūõAk–‹9亐ØéĪJcĮv>í’VŽĢY­čą‡ũK‚9ëÍh>ŅHÂqŽõ§Ëg' ķzqUnæŊKk†ōb8R‰}*XĻšEZŅ˛ĢĢ"œĐˇꂞėĒ~đÜ9Šy<ļ9ŨķJĄqu kpÖĶs.sōž98āûTxŖŗĖ1ū¯÷'åãڀ%e˙M‰WllÉōũßē?ÆĻųxĄ9^ŋ{“YcQŗ7ŌdȊuG6ėú}*ĀÔėØaŽ‘ ˜īÆĶ횖Yî2B†—īßjŒ:ĢŽím1ĉ˕\pv6iÖWļĪ´Į—‘øÜŋ/Ėp•E̞Ɩ¨˛ŽáUú|Įր-ũ†Û`Sk>č p}jĄĶ4÷žčĘ . WæĪČ֘aˇ÷˜ū됧“ííÍ@¤ũĒá¤Ā]njCtûĮĖPvĶmg2D:“8Ã{S,ôđļŅmģšBTgũÖ=ąøÕˡ+o1°BŨ÷x850P¸ĮlqĮŊfĩœ˙h…RūqÕ°ÁiĮĶŪ§[k°Ģ‹ž~đŨãōúԄnŧ/! ÎßâČįôŠ™‚Š$p}ŪūĒŖgâĀ‡Īˆį.‰ģū>ô7ÛžŅĶ(RܖUČFØN9ę})ƒ\6p:g¯ĩWyoŅ3äBøĨũzRC5âěŦûvuëëV§˙TŨĮķ§ãŒ{:Đxģ”ÜüÖS A×ķ§O~ĢĖ3¯ĻPÕ¨ų–B}”ũh˜įÕŋZuFK.?ŧ¤Smī yœ‰WM]=*#CŊŠ)Ëzu /."mŠ%_™€Ģžbmá…Q쎅Žā_)~÷'mY{X6Ũô Á"NáÉõĄäbÕ6PyC†Ú5ąŒÎ0ō?Ŋ@ŲđŊi°9)œ÷Ē“Y‘Û;Š!ĩ™"\NzzPŠįQĮZ•›Ž•—å]}Ąz§4ŋjUā!  p°98īD…NŊSļk‘Z<ũ #\Kæ(15h¸Ļ"ĄbxĒĪt@ų‘Šļ÷jA$ž”°H7+ô•Ÿü{¯9>ĩZņ.ūÎáeQĮŪÅ6Ė^ TĘ ãîĐ÷û†˛ô<íšcŪVĀüjÄÍvą‘IúôŦßŊŽ“g.rŲ÷ gAüęˇ[ž=94ž|Árb8lju/ÛØ< >_” iööǎ˜ķ"Ī'wöŖŸõmŸ§J§u|‚â U€ĪŪ"€5*žIĪOZgÛbîq튂öō‡–į°  q"y)ō¸éD‘FAĘ)=Š‘\DQpã8Ĩ’hüļųĀ\u e{;H<ļ>ZäˇĖjCcnWXڋ)ÛŠŒÕÃր1m,`}Jį÷EUq…ũëCė(!ßwnzTwü~ŨŲ9֏ãĨc›ūŅ9Üŋ;ļlįū– Ú¤ۜö_”UŸįü¨ōÚûä˙H wp¸â­lŋ^ÆŪøéS\ŦG÷žõOÆ=Š—v÷ÂŨūDĀęs÷ĒÄs\ˆĶ}ŋ`S^Ģž~QS˙]0 {‰V˜wĨWļŊ_ GQëļ¯ËÄ]j8@ōS#ˇJ­5ü. —o&¨č B7rĖ@5Šw‘o!\o y5SD‰˛ĸÜŖ É  ž|$$\ÍGjčQаûĮ=jG‚#ķ”°íPAg”G–bNīNilŸūĩWļÆ%nÛÎīzkŲA´đÁ{€O5ZÖĮ“ĘŽYŠüŨi¤ ˙¨mžãäđÎŲ9éPY€ų/'ŠÁ栂åˇRŗĢ~ë/ŋZ@iˇLāŸö}j 0|Ī$–Î;éUdūŌ@ø06Ņä}Ē;Y/ŌÖmã`TųąĪŊ_‚Ûģc ˇ*1ۈ~H”q€üũŪ*…åÕĐĩ›6FÖ+'J—íŌŠė§ē0r?:šøfŲ”įœ \ũāHаry\ĸōv˙ųAËn[ĸ…Û,WŸá;Gô4æŌŦ—?ģËËm•— ëQ[iŅūø ‹ž%ĀÛ1 ˙:ԁ´ä™~ož?ɨ­Iō7ažķ?ųÁ'ŠĄw§Kåm[ëœUÃ0mĀ‘ÍNlî°Ãíîz+nNúÜՙöųą+)8lįolŠ”,íŽ~_á  ¨āÔ ÔäŨDßu h×ą÷ĨŧūŌōüö§pØØÜáųÕÛm€ĖŲ Aįĸôū”ˇ<„Rqķ(?7AžŋĨWķ5!ŸŨ@sé)öéMŽ{Ũō7ØšÜ:HŧqŌ´y÷ôíĮŊGJąõcŽ:@gŧœ c0ˁOjC~|öĶŽ?é™éøU™eęXdS؀ŧ}Eg[jP|ėÛ×-ŽUēSßPĩyPyāzķŌ­Ûq ū}{RcuĀĘô^´Ã}nɑ2úũáEŦŅA 9æq›1¯OîĶVŌÜÄš:v€ ķjh7.IĢs8TnEg[YÛ5ôÅb:U››HŠcæđ#@Ŗaå¯=Јs3}*°Eˇ†“ūú¨ĄąœŦ˛}häė6SׄJĄ5¤šPˇ ×ŊHaš ÄāũEM3ŸaO”á QļK îw+sK;]÷^ˆÅ0s8ö¨|éÕFb57Nebca@äû´ØQv}ŅU&ŧU^TÔŅ]'–(R.gŌĻūuŸn.üŲsŗ¯ŪĢé>‹įLBKÍÔcˇ­X˙8ŦÂ×oLĸŽzU­÷?ķÍ}Îh.ķē0:îëéVEe]ÍqöˆƒäŨĐjߟ8Įî~´ëÈARőgŽ+7Pŧ•aâ˙húTņŪ( qéր,\œ@įļ9ĒZüƒ‘ŒšnĄ¨ĩ|Å&í§ Š‡EŊtø†§'(ŗüę´8û\ŸN´Ÿnƒnw`z‘U­/ yĨ9Āéƒ@, Š2Ģ]DaS}Ē"~øÍT70ĩø ā°ķŌ€/\ũҚĢy m6ŽSVD¨GŪĒ÷r'Č u<-HļЄUō×héQÜ[BblĮž:UÃÖŖœūåđyĮZĢgc Û¨į×&Ĩ6ˆ†`;ķRÛā[§Ļ)î~Sú béV‹æÜ˛Hęģø­o0NÛŊÅGĨäŦĖG%ę÷oëH ¨ašû|›gÜ1ËŌŦ…ŧųĶN´ë~g˜ã ž•kŋŋjʝ¯DđePŒũĐjߝr˜r}9ųŧO§>Õcüũi›uu(TũÃ`°ÉĢ?jūôN=ąN¸ûņ8Ũ÷j~ūôVęî$ˇ%ƒtôĨ†ę)>q͚–ķCd bm\¨āp(žĨqö|ßŧm㞴ēK*éĐŲųGˇi§JD@’1ôŠlėᑘŒûĐļo”ášĮŪ¨íˆû:á"ĄžŌ! }āāImkļŪ0%|…ų¨ÛdĶuEi˙ŠčFsQO Ŧ/ļá€ĮôÛxnŪ%ķųGUéH Np„‘˙ôĻ[Ü§¨Q“ŽĩĮږ ˜É É ķJ­tŠųHH( @\ļĪūé(? r`&3Œ1ĪJĄqr-dfáŽŌCôŠžŲ6pÖStč šžã”âo¨Č§āį¯#øąÔzVtú†Öķäŋ]ēÔŋÚĘČ }Đbn(I‡ī­Õ@qdéōŸņŠHSØØxo÷Ģ=ĩ6ŧE3íą9žôIutg…^ÅĪSÊÜ1˙×ĢöÃmŧk’Ā(ÁãōĻEāīą ûŊA=?J¯$U%ėnz|ß*œūF™o|ĸ/ãw'÷G“øUŲÎØœúxíJ€,aO`õ  ?ÚVÆ~KŠ<ŖiĶjvĸ'Ęd ÷Ģ)ÍÃä퀧šKĨVˆ‚ į{úP!ŧļōÔ ĐāxQ ņ<ÎDŠqÔTĻˆæ$?đųTÚ[6ō`OŊũÚ}ËŠ‡ĖqS6õĒSØÛy‘â%7đæĨšÚ%Œũáôc@ ĶÎį™øå¸Šå ˛zĢĻÛ¨ĩÎæų‰īJօŽ‰ä  ĖFÚdtŸSUæˇ”!ÄíĶԈ`bž•NÜĘĸ¤~•HGqöž§Ÿ1¸T?tņë@ۏŸzIyuõ -:Ä3g/žˆĐæéQÂŧą¨eš*§1ĩ6Ąå唊šuR: “ʏoŨQī#2(ŠūĶ÷¨Nã?ítŠfŲĪrQŗ''öEĢatųû'š]65]>´ļŠëˇ‘ :A¸|ÃUģ)ãû,_0Ũ´P2ËF˜åG°ĒÖĐÆd•ļ.î†ŦSiųĮšĒör#+•o—wį@hpFÅÁëTūÃn× ˜ĀÚ8÷­ Ã×đĒąo_œļ?*wØĄÎvķüĒŪŸIƒįīgĨjUyųš1Û4Īą(¸^üõ¨/-ĀÃĪ|­/įP]DÎ(ŧ6÷+ ū˙/N”KØFÄĢĶīWSîĨ2䁒>\t  ­%nÖŲŽUÆãøÕĶ%ԁ˜ôŌickÎM\=ęh*Ę{Ÿ:mĐÛšÁāU¯ĩ2ƒ˜\\SŦąąņĶw_Zŗõ…f›ŅöĐ'QˇûŊjĮÛaĪ'§ˇJpŧn™ Sm^xīH RŪ@n"ųÆ{š´ŗÂØÄƒZŠXc{ˆEÂōĸĨņnĪ–3üŠ€Ûš`‡=ĒPÃŗ­Uŧ´†MƒnáÍ)ą‹ą`žŠ_^9ĶČS€XīWĸD€õŠÆÖíBÅ™Ÿ{JÉ­ĩ•PšmŊÉĻ÷'?͚‘8Eö=k>ō+ŋ ūüuÆŨŊjmˇƒ4dãŽ)-įīęGÔõ'ļ0՟y%ā„ūé –āõæ§ûEČ#uļ[Ņ[ĩMuūĨ‡||ĸŸÆ8?)ū,ÖuÍķ€û4ÛK›õ7ö„\oIWũ’([žDcÕ×åüj^}yN:ŠÎ›QĩķáNwe˜Šä`Յŧļ8 4}>AœPĖ?nĢŽ eđū5)ۆį ßxįŊV7īzĒŗ/ÜlũEZŪ ÎyčW==菝ŨŠ ˆÕOļI˙ Ã_š0ûŲ}G ũõÃdļÂ˙ĩō˙õęĮņ`cpčqĐzP|˛ OŲâɕŽJvũ)—ēmŸŲe+nĒY~Ld~unĶ›t#6]šÉįķ§ÎFÎ9VuÉĪ}Āb€+ :ŲpĨD<)YœséUĨąîŲEŨĘũâ{§ŽŪ­nHîĨ†|†Ģ}íDeOË>™nŋøíBlŽ06_\/?ĨÛOåT4{{š –Uŧ|ėyˆ6XĩlĖÁas ܀aūOŧxįéT´5A¤E¸`¸Äœrxūt˸ĩ‹å¸ˇČ æ"§9ÖĨ˙‰–-kķ^j{œ3ÄŽ@%đøn€"ŦÉ$ãŗ|ßtsƒ@PÍŠšŪ.\.D¸ÁĀãĨ-åÕ÷ęląŋåâU;Oų5zŲJŖ|Ėw;g§žJK•,#^Aiđ÷įô ÕĪũåņ‡Ŋę8oŨK›)Ā\ųËëŪ´ąž@>Ģü^ĩ^×ĻašCˇ¯QĮô  ˇWʉąíį^@ģ=*oísæ¨rĶ×ĨO) Ņ/P[rķRˇũĮ=h6 N×s“)8Éūtéu+Fduåŋ*ˇnŖËÎ3–>œĶ%…â<ƧŽrŖķ ûmąYãõę8ĸÚâ"Dõŗ[@Pî†?ûãŊ2; _-qOJV–3t€2đ3×ĩ-ėĒļÎw­@š}¯Ú[ö5ŖaÃōī }úŊdBÚF3ü4ä`͎°ĒëĻÆ#I(ãûÕs‘<ƒšģ;a =p}+:{Ir \ˇ^âĻk{•_–qøŠž#™Z1ų*•ŧwcqŪ­Í$˙lāaO4ĸŖĩFŧĘM@ešQĖYüj8g›sˆĐŲ~éĄ|ąĀĒS^0ëTĸņB ‚? Ä0ųE=āˆ˙Ēą]ÆĶjÁšûÔ§oūĨjCúÕ{yãōSæíÖ¤3Į´ÜSļ<ŲOŋZ°~•RÎhØ;0[V|ÅĪŪ  ę Ū“Œŋ•YĀöúÕX%F¸Ģ ĻŦî^9ú ĢtˆĶD ģēzՓ÷QíÅW•ģŒg-üĒÎ}č'_‰>ÂØUÉ øÕÛ{x–ŲbãhíTõâ>Īž†EãÖ´ãâ5úPR[Űæ1ôĒövq*6’ß•\—îZe¯úŸlĐ1†Ö<`úæŠÛŲ/Úåu‘Õ~ŊkPôĒöųķ$'­7ėÎ?åĢ{ §5ĩĮÛ"Û>O|Ž•ĢūsUĪ7K銏Ęē‰F=qU¯Eī“Õzôõ­J¯uüĢf€#v f5'ĐŠî{•‚M°eą×Féģh>Âú6„’w1Ō­ ØŊøš,‘E°ā`œ“Sã e(œP=ˏ~*ؙņĨA ŧFyXÄģ*_˛ÃŒmZ@Gæ)ŧ0'oåVUčj€ŗ„Ũŗ… ėzՑj ũįĪûÔĀtį÷ąö¸Š_~õNk]×1‘3Œ{ԞDŧâvöã­ )ęį2Z(\ƒ0æ´û? ÆŋŠs{f‚aŲŽ•Ŗ‹ OˇÔ☚č‹Ôîū57˙fŗŽZķˎŽî™ŠüëN`× Ōēë?x¸âĻ^=}k:âęA5ēĩģãvr9ĪcíkŪ)Ķåé@¸åĸŽ>_Nõ.>ßxã­R–ō<@–IʞxŠžŲÖĻá÷Fęlˆ Ü@*đŦĘ1ô˙”ÅōŽŌy>õT][=ų :q]Ū§˙­V„¨ØäsÛ#zŦ-āk×f2 mryũ)ÆÎÛęWäęvŸŠXXîví¤+{üŋũz›ž7ģĮP k rfڛ\ČH ‘Ō–k8LË$Ēģr¸•‡<Ôöņîš<;3/=Nâhŧcö9ŊYH?7Ũlc€+[X…ļVîu@$IŅ¸âŖš´¸ŨĶԌ†ÚvāžžÕŠé‘ėWŽ=ę´Ā5ÔĘ[īãīqŒ˙ãÔˇŊ˙ĨįæÁ œûņU‘5ĩŨ7íē#ķqžĮũĒÕ'if=T|ĮoUįĨUŗĀ–ā¯Ūcœãfū”OR}F++†oŗ0ōČbģÁÍ-œ—đÚÂĻŪ˛!˙-Šüž¤cڝ¯:-—/´ Ũ÷”‘Ö´cų#UCŊ@ų~ož(5ŽoEÜ(lŗąņ89 ˙ŸZ˜ŨÜ*üöåįwëSšųų-˛1éķ'ŌŸp|¸¤nč¤įoQé@m¯Ë@…ėŽpÃæũÖCRI¨FnaW†qÔļaaž8ūu~$ōáE=Q'ođĶ6âėdŠ¯C˙ę [Rļۗv^>bcqũ*;=FÔÂ7ˍ\–lą9Ģŗ°Hœŗcjķķt´–ÉļŪ5` sĶŪ€*BÕîSô-ÎĨY7pÉķSžšą#Ũšh×îĐpi—vļífŪ<‘ũÁÅM *ăpĖšęߝGfę|Â}īŊVw Ī6köÅ`ė8ëëV~ĪĮßJjo:ŒíāzUœĐšo!šØ I>g‚ĩRB KTucēúŅsÆüÖ¸č(Jæ9ü‚<ĀĢr°ŽJįŌŦ\"=Í,?ęWéց7ÚBœ'ųU[&š÷(<ōŪĩĸ˙púT6ŸpņßĨË(ëĮĨU[™~ۆ…ēqŠŌūu]0n_hŸjįî7šÅUēŊ@ņŽÖ ŸŊŠŌü8ǎ ­‡īUO´[=ß&6õŨß5kÍRßywtԀ†n“åU8Ĩ1DËĢƒüTÔek—Ãį 9Ī^MKéúîĐ%´ˇ{ÉY NЏĀã­<ØÛmæų~÷É÷Šđ˙ŦœąČŨ†ã¯Ę*c‘Đ ŽŸJ̓Mļ&]ąá™É\1*Ca2˛ĖĒ~éˇZąjrfbĀįŠÜhš}ļōˇû<ũʧic˛Ö ˇs”nųÆâ›ykqå*‹É~ia•Oņu­AS€6•ūĩ ĪúČCsķüĮoŪI ZŪđ+˙¤†ãt îũ}ꚀŋĪyp˙Ī3П¯û5Š‚¤ŒŽœtZ­j•“œ*ėēõ?û5D Ĩ~ĖÛWåqÅCd÷ |¨tŽë‰ˆŨ’ŲéÍi6đß)9SģŠô¨lNë8cķ¨|äpxĘ˙:ËÕĨēskˇVß8#lģŗáéZhšū<äë‘ĩāwjŊđ2ęÚz+lûōctZXČʀ3ʂŊžh.É>Ņ; ūRǏEųF9}é//ĮŲŲĘåáscÁīW­†å‘€yX¯ī˙ÖĨšÉ1*†“ÔŒŸé@˙´ábpršúw¨ĸÕ­>Ķ!ŪāÜ­Ī\ö­<˙ŠüŨOĨAmĖ—9˜`Žp:PK­VĖÛ˛‰ōOˏP{ՅÔl°ÚŖ8ā嗟z}âĢ*.Ũãzö#=*VŠ2cV˙€ŽETˇŧļieo>3– ÔsīROģŠÍĸB‚Ë(¯ĖkR!OĨ+ũÃ@VÚ#!ne åĒoė™Ã[ŲsîkJ×ũV}ęjį#ŌoâO.õūn¤ķVM–¤1ļė`vÛÖ´ĄægŠÍq÷öú—ö¤ČŽßÂ1Ā­LjęŊ"-ëRNwk¯ĸš× g=y6ĒącČLwÁ§Ã{¨,Cu—q†­{ŋõu*”}( ]RíbbldŨúTVZðöŌõåļ×A([p*+X×Č_”PpÖĄÁßĒĒõĻ[kÎōHĮ`č°bŒõEüǤļí,¤Äž(ąęV˛6ՕKT-}l÷hŠ*œu9ĢĻÆØ˙ËüĒ”šU›Ũ/îTqڀ.ųņm:í=9ëTuIĸ+ųƒqaš™ô{GÆPņ͚ÎŋŅ-•â1îV,9Ím#(nZŠé—ėíĪęŠŅTŽÄÃūjĩŪ0äŧ—Ž€ĩlG-}1ĀĨcÁūõe 2ũGË|߈ĻÉgĒŦg`˙ĀhN×ũWâyŠOOķÍaÚ&ް/1˛ú•ĻÕŅr`Ö€4m˙Œ÷-ĮĩN¸ükÚûPT;ŦËrrAĢ1ę“˙ËK)WéÍ_\ßđŠ9ôæą"֕f—Ė‚AĪeÎ*íË^ūbúå4.ízbîÄ?jaHåxôÅsÖ:ĨĄÔîefsZËŠYˇKˆķßæ¤Âŧ|Ē– ;{ĶÚŪ]­ėΧz¯ŨŗÜKļeã|ŨjК3ŅÔįßĨ0*}ŽģrĐ/ Ķ­/öeŽ8B1ÜŊíRBęf˜īÎŌ÷â§' ‡ÚąiĐyōmŪážīįĶūVÅÔęŋō͟ŊÅZ„Ūļ~RįwōŠ 9íŧvĪjʂÆqšĸž“xbn˜Î?Ĩ=íīUË˙“īĘ2ĮŌŽYķė =~cIvÛme8ū˙8  6ŅjKm[ˆŽåWîqMŊ:—Ų_+Ö; ķ–ÉÆkQoËĐŽ:ûÔ7‡ˆÃ}ī17vÎĨWķĩÜZÚ&(>v ~ač*¸žĒØŽQIP$ūjúØĘ žžõ\mAļļBĮōüŨIcĮū;@‹é°ĨlfÚ~hūqķzķPÛj'ĖšÖä+Ë÷‚įÛúÕę>ņô?túUk1ē ÜūņÜöųæįųPK­UŦ§ĘšF(zÅū­ąN‡R´XcR]ĐhČGzą¨mXųd`„męKšŸhÁŪ ōŋË÷ō  3¨Xɯ+ŗŽÅ‹īĀߟū°­/í9ēƒ“ķ|Øų¸ũ*(WĖÕī]…6üyĢ‘ÅöyšHãČRØsŠŠÆōŲ­P›ˆ†ū_÷˜Ã­9î!’îķ×w,vŋCŒėÔčė­üĨGˇ‹!vˇëPũ‚ҝXH°årpJŊŋwņc?í”úT6Mē Ā‘Ŋ™û|ŧô¨eĶl–6?fAÆ3´qīIkĻÛ}–?ÜírŖ×īzõ  ˇúDqÉqōôã‘S*ņŽGËĐVkX@oĶhu™¸oÎĨ¸ŗŒ@æ9&¯ī_­Yļ`Nœ/éIĮÚē•py¨’ÅU@Iį/īOJŠ+6ķå"î~1Ÿˇå@.žN8ĮZt|FŊŽ=zU ģYv’ā9ÛĶ×ĨMökŋņöߊŠ–.f˙ŸĨ:āü›OséTíaēÚÍį¯,zĨGwæÆ<Ä<ä|”}ÆÕįĩUĶÆDŦ{ĩ}Ĩbl´xĮ\*šŽØp‡<õ  rŦAīR1ųj–ë“p2‹Āūõ:igT?ē˙Į¨Ô?sëLnfZ†9e ÄÔĸs9ĖMĮĩ]ái°}Î*´÷[PüųSĸē_(g4+āČĸ¤`1UŌņéRŊĖaO4ø‘prĻK d”RÃ2ÎE!™ Ē3@6ņcîŌÅk'ũę{ĶâaĪ4oɗūzū•^ō9ü“‰GåZZķîb˜†Æ—5ų—Ĩ6ar#lĢcîŠd˙ęS´7BŨ2̟­J^ä¸?:š!OĨ=žé  ÛIŽ|ŲwEßĩXķåōČĶ­zČ}ęsŌ€9ÁtįÄ4L0¸ĩö¯TaøV}ˇÍ¯L}VÎĨ3o/QB‚'ŌŦ‹¨°9¤ģU%QÖĻōĶtP{›¸–;ûRÚ\DmĶæ(ŧ†/!ōƒĨ$°ˆl(s*cī ¯dęÆS¸}ę{ÚÅ´ābĒXŲ G!˜ezŌČõĒáŗyøR}—ŌFĒIi7۝–sŒw  jŖ|ssnŋíRųC¤ÃōŦû´ŧūҎÕŊ¨vĄēûĒ=ÅC›Áü*­w5ÚÉōAųŊhVŖ˜â&úU´\°Πŧŧ•mÜũúPëõ ô§ŋŨ5F ā!LÅ ãû´ŗj,LHaĮ÷hͰũČŠ0*­äŨ>nÕ7ÚĄūø¤mãBd;G-éR5ŧ$sūU œņ4D‡ąŠÚDÚ~a@Úeŧ×wŦŅ)MŖŠŧÚM“u*¯ °hî?zV­\Đ4:‹ŧ§Ë?{šyđũŸđų‹ôjŊfsˇĢšœôĻ eĨ)s2a°0Õ)Ņ&_õz„ãękJČæ&oWoįS9ÂíH +m6üFY5'‚šīJözÄhJß#`wZ×ŗæÖ3ęšĸíļZĘۊhÖ i-ŖÛ%šrĄ‡JmįöЁ•ĸˇ`äļ篨Ôz †ė˙Š_īJ?ĮúPOÚ5ĩmÆÆ&8ĮUæŋÕ[um;”bĘgwūĩŌÕg9Ô"_HØūĸ€1ŋĩī•~}2qķg ˙õĒ×\\;ØÎĨ‚˜˙õ×QPÁ‚ķô†Ū#ˇßk:Bƒ¯­Gi¯Y%´qȒ´yŸ'S[ˇÁE”Ĩ?!íOЄ å&ĮŨ  ­vÆQŪÜČžoĘGĘ9ãņĢkŽiü´Ž~éážīøôĢSŲÛ5Ũēũž/âcōLZ{é–,m"˙žh#NÔŦ’âęSryBÍÕ@5jīQ´kRĸę6É ū°rjKą¸ą2Én­žF+žÃ8c@EõˇüüFØųOÎŋ7ŊE ĖspL¨ãåŒō>o֚|;ϟųbGŅVƒÃļ#’$ÆâÍī@¯fė˛üĀälQI/Ü4BĘņZ6;X|Ū•`ŨGƒKh•ĶŊJęģO€0tÛ¨ŸWēlûVßÚ"ūõdé1ŖßŨšQ÷ąZæĪđŠT¸¸ˆĪîjߚŸŪNâÖē(*sg ūց vę`?0ŠŖ "ķÚŗī,ĸō° ÆŦ-ĻbF dōŸŨš†ĮũGՍGqnūKâSŌĄ°ˇmW÷´ĨU ææZCČū5Ē–‚ėK1;O=hVŗĨųĩxŊ”ÔûîGTœŗNu“ē.‰@UZį›˜Ŋ;ĪqÖ6Ē3^ÄÂ1°ëڀ5jŊīü{ĩkNųüĒŊíä^ZŒõa@ ‹ĮjŽåWČ~Jâ,˜TwsGä7Î),1 …ŅĶŌ‡Š=§(ŋ•*:í_˜RJëå1Čé@í-aû8ũØį&–{8<§;{zÔļ¤}ž>{SoÛm”ÍčϘ:š=‡™–˜ôjŌ{<)ÄŌÆĸĐWn•Ķ5vSˆœûR:ÆÎQjģn\d“ŌĻx.•۞ŨÖŦYļąē)n[mŧ‡ŅMgXG|,ĐŦ‘œķķ }Ė—ŅÚČZ8Žôjšf6ÚD?ŲÍ@˙ĄÉî1@ šņ-ã_˛g :5A¨Ū܋V_ąIķšČõ­uáEUŋäBŋŪ•žhí@ųŦnā* KuÕ¨6͍ Í÷=ŋúõąUœgP‹ũ˜ßų­CũŠûŅÎ?í“Uhõ;SŠHĖĖĒ"US×'˙­ZõNĐŧŧoö•%˙ëĐũ§dåē¯ †Ąjabn#Čį–í¸Õ÷ ’JĢĻÁöužčה Čõæ€#ŋģˇkmĢuų!=ũXņ5=Üĸ;Id|¨[ôŦøtģ/nsmÕÚĮCŒŸæ* gLąƒLžXāĀpA>´wBQl?ŲÍZ•‡Ú!_Ģ~ŸũzŖmŖZ h˛ŽhÎ$aÍDt¨ eœõĶŨV}ŽĘ:†ęŌ!n˙{§÷Ēîj Ķ‹g  ŗU…w(īUuˆ iŗ0–OģĶ5¨ŸqGĩgxöérĩúĐiļ˛Ĩ„!gaōŽ1OģŠém¤ÄãîŸáĢvŖm´Cũ‘MŊ8ļ~(ŧ1ŪŦ(<ČÎ÷j A¯–Î^#mFũÔcü¨?íH;ŦŖëĒëĒÚ÷&BŒ•>Ļĩp*ēĢ_]6ôĪõ ûRËū~}MWĶī­HÄ`ŧĖynŨ?Ĩh´q‘Ę/åT´ÛhÆ6hPīËũßRM>öōc;,ņ’#laŊĒkw‰`¯Ę uĒz••¯ŲņîfU/ĢS.Ä˙ËŦ÷Í>b­yoķ—s~˜ūĩg#֞ޙdu‚ˆ“ƒî?úõ9Ō­1¸úHßã@°;žé˙Ŋ1ũŌĢxˆįOX‡üĩ•SõĪôĻiúd-hĖKŗ7Ë+įĨVÕ4õûeŒ"yȒ\á¤'î=č  Ux~kû†ôU_æ­CũœßÃ{t?ā`˙J¯kc34îˇĶ¯ī1Ÿ”į{Pûãū‹ ūđÛųņSÖEåÎØ×íō6ų`ĸú՟˛ŪĐ@˙ßĨ  ĸų¯g>ŠĢüéoOú+Üb¨ÚÛ^—™…đÉ|sįëEÜ7؍MÜgsųeë@ƒ…ĮĩC2Ėßícô¨|ģņ˙/0ûdøĒŠÕ/ļ3y°|ĖO(ƀ-Üķą}XTĮĨfÉöã4ęŠį†æĻ‘¯•Ë ˙đ  ížë7Ģ›„UˇkՁuī÷˙úÔՒôÜįȏ…˙žŸũjŋ!ÂHF!_ĨR¸šđFŅ×đzxšébčŲãŗPÅķjēĩbģYļsÜĻslŨqÖĨšælĒũ™úĐ€áŌŖ‹™ÕvŊeāÂŲôĻÛŨœ11?_Jĩ(ôŠ6ŽĖBKÕķlnž•+^Ɲߕ>8SÎl üŠ'‚-ŋęÖŖĩŊ˛9>”Muđ¤āįĨN-ĸØ>JŠ;XŒ¤íũjcq>đĻA231Ü(ŗZĮˇŋįKLjÆŠĶJžĩ(uØ9  Ÿe>hčR´2Ä”ô`eІ(˙Ųleptonica-1.86.0/prog/warped_sudoku.jpg000066400000000000000000001377551506303110300201230ustar00rootroot00000000000000˙Ø˙āJFIF˙ūžSoftware::Wolfram Mathematica 8.0 Creation Time::2012:04:19 12:55:44 CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ˙ÛC    $.' ",#(7),01444'9=82<.342˙Ā 3.˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ú?÷t˛ˇZw Đc­/E'=N8ŽQ›Äˇzē6ŅZiöԌËĘ3Îa]´n˛ÆŒ~ë@ø§Œ´œtķK'$ đ{TrĀ(?cڜ‹ˇŠÃ™éCDrYņĮ$ņ\žĄãí* žŌÖŊBl”ŲoFzué\ô#›Nąk[ÛlŌ\y‘Eģæ?Å]áĩM^Éî ¨ ÂŗšŸæ=ļüŽ„×žxÃIoęą-ƒ:Š Ēîã“^›kĢÃgŖÚŲÕ§(2$ĶˆôĐÛK0“ûģNkLĘ$[kmj.#ŠHˆ”)¸oJ­VŽbH›åÁ‘}=)–ąØM’ã!PU~îjqĻY(l[D7õųi%ŗļ‘˛ĐFįn3íDv°3yvņ oŊōĶ&]?N‡Ė’(‘7tuĢlc–5܍éQ hR=j§°QQL֖VĖįĘU1čIĸŽL)øOaQ_^ZXŲÉs9R‹ÉúĶlõX/gh`WĘ(oģëWTŋņ|´ķ×Ō•r'5ÎøÔãÓķÜ:ĶĩēŠ=6-ŌĮ‘ãwĩcxDųŠNüģ]6O°âĩnY[Zˇņ m!öČÅCĻ]í]ü‰Ĩ‘œžƒŸsSļĄ9ČōŖ\t%ÅV:”ü“qû-DsÍ,¸3\°ĪüŗL uęŧv2É$s|ģ[{ɒ0ðŠá$eÛ"5YķŅ›ũb/Íũęx¸C3üËĩW­B$XŗdβāĶõ;t˛’)m÷øuÉäTĸ÷XBąK§+/ ˛ˇÕ$z÷ķi˛ėnIâíEĻīąN&Û÷ ũîi ēœß:Ē@…O.ÜædŅ.u1,¨*G~”¯¨G4î7îHÂôĻ–;k‰UŒí ģKÜsšÜ70XO*IvyÉÉe •ôČ×Åö{HŖVų<¨-ÉŋëX˛ëæŪŌúōŪÆYÜ0Šŋ3Søšæ~Īã×Ļ‘bÜí|Š…ė|áŪßOöũCļãæ1?NÔõņ‰üD|LdcΘcaWŦ>%ċuâ éoį'%KƒÛØŲiVZlKŦQ(ƨ{Ąā}qJ@īŌ“8?Ļ)Ũy tŖŠ\THņĸˆËGcUõF×L˛’îî]‘F73v¯:›âĶę.öūŅŽ/įčĒ*4ÔŪIõØ ˇŗ*H~ö ė4™ãšĶâDy žÕĄōāļp: W qJvíĮuįĨUÔu(4ģē¸Ī”ƒ’9ÍsąøÅīäōí4ۙŋˆŽjöú}7K™ ĶŖļ”Œ#dÉęxŽBđÍūĩŽ›RF*Ÿ3ęïá]…îĄŦ&§­ŧ:.cŽMjjw÷ē~ž’(_4õŨÉũ+Õ‘õÉmīg‚B›ĀeÚF@Žž Nžž8¤‰€ãZÂņuÜ:$VĐÚBždŌ ōIŪģ;iƒY@ḐqøVgˆī ãÉViv¨^k”ĩ–öÎŨŖļ’âX„ņ¸ö+^Ų¯Ų§‰bŒyIŸŪ1õĨēÕõ|Č(×ĘH˙‰­MŠ ĢEY§uÚ7ĸŠšßņíÔA R“‡uČÛĮĩrØÔ§´ˇ†ûĪxLÛÉį*]HĩXâWoĩ%Œ“}ßųi°RyzÔmo+Ep֞víŸĮëEƗ}¨ÃįŨÛJÂk Æ6ę¨+ ÖÚîßEŠÚÆŅ›8VŨÍÚč:¯–É$rėša”oîŽ}ëŠđõŒļĢu%Ęė–i8ú•šÕ~oÎŖoŋģ¯ĨJ2TÁŽkĮa›ÃSūō˙:K :sg [HČ9v'ĩOáČZÚ]BU›qĮNFj ĨcŖr>ôÎ Œū•ĒšLBãif*Ē7qÅK—fŸōÅI÷æŦaˆą¨€ ‘OĻÚĪÕŽ2ĄCI/îŅ{dÔ6ú}ŽhŌʑ’ŠēGaŸs\Ŋåū™ũŖk<ĨĨžíŌū÷!Ā>”—Ū=đÔMļ K‹“Ķ÷yQüëŒ×|S¨^NÂÖ{(GmåĢ6?x‚ Wũ6Ueėߕh[ø÷Ä ņÃ-īĘėܞõęvęķB%ƒUŗēBŌ2AüELŋÛWjcYmaP0í´’ qŪ8Šk-íâÕî'ŋĀ[tP7ŒŸņĒ~Đ5khĻ–æ^āƊcnģ[-ēģK8f,¯qąüÛÆį qôjsx‚$Œ&ŸfōK´( ĀŠ+/ū­BéÖRņ@,ą\FÄįOĨbk7šÆëeļļiËD$‹qMĄąũ+´Ō.ĨąŌí—TtŠaÓÆrNÚÁÔtøĸAˇRKM8ąČ‡Šãô­-Ā&ŽDžGÚn8&YūbMtĘĄj tcŠwP­Ŋ=ę ‹ģ{(ÚK‰Ō5$š¸ÍWâv›ĻÛLŽMBäqļ qŸ­kxSQÖõf“XĶÅĻX4@JúéŊqIõ4Ŋ>”ĩ8Ø<÷zSŪÚŪūĖÅwÉv=+ÍoĩĪ ø;Ä2ŽÃÉæH­ĶäĪš¨"ņ׌&‚=bkX`Ō$“jĄQ¸¯Läķ]·u!u%ÄNģ"ũ tCĘ2>P8§û‡>¤R*ĢŽœS. ŠáBH×ŽN)RŖaĩ1Ž˜č+Æڝæ–ņiˆĨûžūŧWāß_hú¤ļ:ēČžaûīë^Ĩ<ąGæT@3¸ˇȟAtŨÕČÅÁé[“ĮqĨCĢ,) ŽŧcßĢ ´VņÆß9Uũj+›k§F¸…d+ČĘįŦē€ƒ•žLQų’TwU7ÕtčÍŦk*3mOÂŦ\\A đĢs#ˇËP>•§Ouæ´hō¯?{Ŋ^Ė[ŗŊ7vR "•žVVĮQYW~ ´ĩÔŖ°ew˙…„ZŌ7vÁUžU\ķ÷Ē$Ôle™–;ˆ™ö˙z›¯a#˛Gužŧ6jõËA M3ŦYbŠšĮ͊‘õ‹LaŽ#_7î|Õpš8+ķš“–_›­HĒv˙JSģœW7ã}ßđēŽ›×ųÖõ?bˇöŒ*ËILZŦ¨zTf IĨZîã™Xúœfˇ˜ãĢcĐP#–‘€\b˛5}.ęöx.mnV)aÎĐésTßLÕīÕ­o¯"6ÍūŗËR¯Ĩ\ˇđƋ ŽÛܯB˙1ũjôznŸũՕē˙Û1S}šÜ ŒÛĮ° AŠÎēđŪ‹|šŌ­˜žęQŠā)Ķ-­†Pƒ•?1ü}Ēŧ>(ŅŦ­'Ŋ/9Ȋ,eŽ8üÉëYÚoŠ5[„K Ģ…Ÿ2#ˆˆōÜõö¤´‹ÅŅŧ‘Ø[Ŧ6Ōu8,ŒNN1īVSÂēõô­>ĨŦDO@2é]‹ĸž“šžúkŒŒlm•ģŒ9īL ŠČÕüO¤hąŗŪŪF¤¸$ūÆ\x÷Yפk iR˛“´Ę0¸Š-ūjZÃ-Į‰ĩif'“o!GąŽĮJđ֕ŖFĘĘ(Čļ2OãZĘĄz~tKžƒõ ƒÁĨĪREûEš{¸¨C´1ėŪãJŧĶÚ6ž2–˙ŧ‘›vį5Ÿa ×wqĒ[JžDdÉ.üųŽŨđޟ{gq1žą7F“Ģf™?‡Ž.gÔ¯YĨ]§&‡­]´*Đy+oÄųŗ¸žĻ¤ŸÂwK$ihŠ•ÂßŪ&§ŸÂ“,ũ•cU†ßnsˇsŸZ‚_\,°˜ÜHĢB›ņ´÷4û \ ā6čŠbP7ŗį×5ĶŲ}¨Ą*̆ĀUū,UĻ%‹mJŦXSˆĪ^•Íx؃ 8˙Ļ‹üë]ŽĸąŅÄōē„Ž1“øVã‹}1+ėkÉ3&98<˙*°“­Ä-Οö~b‘>đĮb*ü:šHĐĮw[Ė˙u_Ą>Æ´ČĪzLõâšYBįåâ˜ŌŦj0˟Jaģ3F=ęĒØ&wÜÄŋV ž"Ņãožū.{nĒīâũ ÅØcū“üĒšņ•›ô{[šŊ6DjŊÖˇy¨ÛÉlšÛŖ‚8^ÖŗmWÆQJŠmoۀŽáÁãˇ"´&ĩņUÔ.sim¸rS$ķQXxGPļCēŧ…eûøA“õÍZƒĀS¤YĻ“vIy1ĪáZ‘xoE…Ã&›aаÉũjÔzuĸVÖ=ļ Ģ x Ĩ5°Ōco>´åœô…6PNîi˙ÃÉÍs^'ĶõŨMĸĩŌoŖ´„ŠķøēŽŸŦŨ+ᖓk šŋ–MBäō^c‘Ÿa]•Ŋŧ6Ņā…#UāqRķ ¯jFadļõŦvņNŠēœZwÛĸkŠ[jĸœķŽ™­ŦcŠâ“øR튊Üü¤Š­zÎ؜zSm.×n:úVįÄŲŨËk,—HÛi+Æ~ĩŠĸkPkđ‹hŨ` V“ĘņR¨ā08'¨§gž:ĩNęĶíƒkļjėxD+6hūÉūėŦ*Б%”į¯ËDú9¸ƒĘw8ˆ|b]˜ÛŽzaëbŌÎM*/"ŌŨ=UXkû¤ûĐķôŖí÷! Å[‚C %Æp*l1`j0[?wøƜĨØr6úĐņ‰ĸtU☰,cƈ§øUEMˇũ“ųĶžî„­#QŸ×4ärëß5ZéŽÅĖBƒÄ~ņĪŨĢ($ۂߚdŠ&pˆ ûĶ<šUÁīõ§´o \ŸÖ‰ ÆĄQK~5$lZ1‘ƒŽEax¯OšÔ4W†ŅwËŊH:ÄŊ˙„“P´†Ū].?)S(ųĀíL´ĶüGīšöȁ ĒË.BÔĶhúüۚŪÖŌÎCÎø¤ ÕXü3âo>9§Ŋ†wVܞtŒvŸĨj˙gø­˙æ%lŖŲ § Ä2Ÿ]Ųūä_ãJ<1~í‰uë“ęK˙pvũîŠ}'üäđV”¸ķ^åĪûršą„tHņū†¤˙ļÄôüjÚh:ZcĶā˙`U•ĶŦâ˙Wm ũTʋāôâžĒ$S0āníŠ „÷Å(BOįNÛÉÆzS†qɤ#Œõ¤Ę9´¤¯R=ķMķėĪĨgī<žryÎ*'vP cæę*EpčTJXÕBíí§6āū5^{˜maiî$D‰y Mqz§ÄhVvŗŅ,&Ô.yQ°š÷5˜tøŖ÷ÚÆĨũ›hy0ÄpqīBÉā¸d"÷P^A{įúWs kC]ŌãŊû4ļۉ)Fį­jƒÚŒ{Ô6¤ybĻt …}jŦ6)nĖęKÎŧûÄPx‡S×SNĶôč-Ŧ‹ūōãËąßœWceŸgŧ+ĩPĮ¯z´AÎz{Đ\néíNŨëÅ3z)šrŊFiûprĨÆ}:hwãéKŒđyĨ#Ū›ÎOéQ¨ÁË-Iŋڍüã3`b‚[=×o9áM.x=*ar;ŸjPX¯Q“I–¸ˆķŽiĀîZA¸4™9Å œ€)Hƒ×)=éÔŪyĻ–mßwé@žœQ´“NQīH֗ūĒQĀbšî9"_Ioâë˜ífšsUŖâŊ~';5KáūŅ™ŠÃÆž"SíkŗÎ9–ē=Æž!Ød’ķĪAĀWPr}ĪZŋ¨ü@×!ļķĸû2˜˙Ö/”p<Õ8>.ęa›ei!xŽáÖ´âø¸‹úF’KwŲ7¨­ _ŠēdČZk ¨Ŋ— ūŅi+ĶuŖ‹92Ў#ķ­“*gī¯įNÜŋŪ7(:`ãĐf—rã-ĮûՇ{âHlīm K9Ļ혍xņ´VīqMWŽ 8ž)‚@Ũ~Tū1Ō›¸X~4›”‘ŽiKgŒiÜcëNĮônQŪ”zfķÔ)9éJįqMiHU'Ū‘f%Û×ۚ'fmĒiÁ˖_—éžiĪ"E‘Ø*ŽĻ›æ ųwdõĒöúĩËÉ+ēyĻ^^ÁeK,Ę3Ÿ›ĶšGÕ,ã´ķŒĘq™ĩ[œc4kv0ĢG*ōšđÍDúŧØ-ûļ`?ÄŋÅYãÅö’.ø–G‹äË/đî8Û z}CYļHãŲk, āˇ;°G5JmRūÆöPūdōûv0!GlŠĩ-îŠusoŠsų˛$dtP@æ˛nmĩ­JéXįxDąÉŗĻŪšŠ“Ã:•ÃģĘß<‘Vy>h†ü¯NøĢ áßI;ÜųĸBF¤Œ{ÖÕ֝ ØˇË2KÄr#`¨ ūĩiÚV—e,­ė(Á‹7Ū ķUlõ= Cž(Ö1ÃŽ–%IĨI'Šl-ãķcķ&…(ŧ(cNÖĩŠl.cŠãwx^UŪØ ˇ~k&ojĶĖc `đcxųRSw?P†}cVa‚i¸‰LĄÛīÄ0ÔéŠ}inÎŲC¸ōŲ`sĀúVŧeūm˙§z!1äáJ\írGĻ<0Ü Œu§pyīJzŌdĶ!bŊéũzŒúRŒ‘é@ ō;Đzu¤8ÎOZN‚˜šųûėíŽüG¸´°’Ũ`įë]§ŠSÃū†kUđã)ˆįÜv–üęļģŖéŪ ĶŽVËwTHŽAÉ­ü ÉŠÛ[˜ĻØ-üŲ>âüĒY<+áÃĻ^ͧK*›ŋÎ~eǟđˆé ­Åîĸ֟i'”däôëXđÖXüI›äbO1d#†”ŲžŨD/_íÖūE°Į˜ā¨vöĒē‚õ:ŌÎv0bäĒĸ–$פhƑgs¤^|šŪ˛ŽÆēeœžē{PAS‚*7˜6>~~•$¯>2́ëD0&킨ĪáL’í!bfÁcĩw§‹ˆE×ŲüÁæ•ŨŗÚĸŽūÚk™-c™hžú˙vŠvĀ<‘<ÜĢmcÎÕĨŸ\°´o'Ėvmģ†Ô-Å\Šxõ U–ķ"z•2ŦĢü+O.wãpÅAw:ÛZIqˇvÕÎ+°ņĢIÄŌĘÁĸ ÂāœTíâ{ß1QíQFâžģDž+ži5ąųžāëũęHŧKĢ\UŗEf`ŋîäâ´tíZúMbk+œt+Ō¨GĢjví4RH˜ķ‡åĮAøÕRīP6:eŌ†Ė™•U3ūsYīŦkxĖH•;˙uūĢžÕU›\†~ˎ ī1"Fô÷­]$_jWs[ŪÉžÚ˙ķО߅XŌ,õ¯îMÆįˇu;<Î:ž•MôAZDĩoŗÅÔF͑Ųâ–O ^ÜHķKqy|ĖÆŲ!wwü*Xü)›q¸SmųUųŗˇĪĨ-ˇ„ĸîš0WÜ`ū}jāŌ,ŽtØ´ķ#4vŒ*Øč:–ßÃÚ]ŧMG•m †oʒ¤Ø]7•äG Sõ^äTļwē}Áž[U‰äŒeļ/8##ķŦeņBnļ“랴2[<Įjāü¤dÕČ|Mo{¨ĮŗÆÍ°IØfĒßë÷ ¨\ZÅl`ž8Š˙Ü*›ŪëōYؐØķbŪJ¯ ŲÆ*AoŦŨĨÄmįĮvĖÛeŨ„Á ~ļūÔ͕OŪVŽ^G+ŒūĢv^Ki­Ĩ3oh<ą€¸û ¯ō5ī„ŦäŸdNņŎSķnõ­ģ:Ōîō æMīUnœãü*âŦy`ƒÔíôĨŽŪ(Áƨ3ØbŸ°’𨯺;hĮSõß)w‡ūīJWPØĪ~)ˆ6žkČ6¯Í–ëWôí&=>v‘dbÆ$‰‡MÁAųĶmôkyHwTŒÆģŋēØĘ֜Zu”2ŦŠ#/CúTqYÛÅ}5ЉLĶ0Üû}éVŅ€~^اlų Æ™$Në´8¤HöKķËڛ$ļví™fE>ŦĀVu׊t+šē:Íc\üOđôˆįyđåšVŧ1ãK_Ü]Em Įä€rũÁÍVÖŧfúVą%‘ˇ*Œ3¸ą‡Ĩoę2“Ļ4ŋik!ō“'Ž?ZæôŸ2KûY“R–â_6ErI*PƒŽØÍvH…Ö9ô5.FĶÛ—Ē}ŽæÍU…ÄĸÄō2 ¨­CŌ—4Õ?'Z^̓֐įogĩqIÉ9+ČĨf ŋvŽŪũĒ ģŗZI.2UIųkįĢW’yŽ>ÁrČėÎ+cīVdÚFĢ,‡Ėļš-ūŌlv:¤JĘą\Ē÷ëD_ÚVDų_iŒˇ÷r´ä[Ģ”G–FN†LĩZ:Ūˇ§Û›kkۘ…ĒēvŊŦi—2\ZŪM˛ũ÷îÕj/kQéōÚˇhĻmîvwރLø•ŦÆmŖšŽ)ĖvG\°¯OĶ5 u‹5ģ‘\Ė60•qÔ~y­”GÆU† Kļˍė~”­Ž]Ę{T3ų˙ūŋJe‹Ā÷3ÆvŒŽ{wū•a‘ufMį?{oŨ§˜ s÷Pæ¤(Ą>íFČĮåčĢ×ũĒrĮsĩ7TƒĻ{T^PY7T˜P>íPÔ­ĶQ°–Ôü×Ē‚ø[MHԕv“ŧ›šĨŗYŖķcvgwjyđ֝äŦoHJĻæõĸMOōŌ3­¸Ž›ĒÅÆ•e{*ČÁ÷"ã†Įđî•Ë ˇųŋŪ>šĢM§Y˜f‡ČŨ­ŊĮ÷ĒĄéĮË_˛&āŲĪzēÖp01Ģyp~¨˙˛ė’2ŠmĄäüĩ*ÚÄĢō"ôUõ‚%Rv.>”ė6*\Ž)ģėxúsÍI°Iø~Ûå}Jßč§?ʲŽ~&xr å#˛!Ŧįø¯bŲÚmÜۘHüC×.åōė´ wuōx5'ö—Ä;øķŒ6ÃŽYyũi‡ÂŪ6ÔąöÍmbœ&ĨMÂטîÔ5›™p˙ZŋmđŋA„ūúf'ģ=mÛxCA˛_ÜéqŨÔį\Ðļū=×­Uv¯Ėöz×ņĸY.Ŗæ0q3Æ6Éŧ*Ļ:7¯ÕŨF×ē†ß÷’ŋ_ĨhJÁÆ>×ũö)Pĩ;€ģ‹ŸģĪJqŊąVĪÚaũņCjVJ~k¸qūđŦš¤Đ—T‹ß¨œ(Ly˙/ˇ3xŸDSÎŖmīķŠ…ü_ B˙ōļĮûõ ņį‡.u8?īnj|BđČ6§^”ßøX~ “¨ĮģoĄĨ<2N?´cÅ(ø…áˇ?.Ŗ=iëãī1ÁÔĄđ*zøÛÃn>]JΤ0đûĖJמqAņ‡†ßø™Ú˙ßbŸ˙ g‡ĪüÄíx˙lSO‹<=Œ˙iZŸmâ›'‹ü<¸˙‰¯ũö)ŋđ™ø}XįRļöųÅ0xëÀåĩ(GãMoøiFNĨŊV‰>5÷OE5|Nđé8ķŲąĶjøŠĸ b‘Ü?.GOÜļÕēČҁކ'ß?\¨4üSGôíJ6ãŠ3•âšdŠRIãmžīŠīC wõσōļOÖŠęīåh÷'ũƒü̃ø]g ļ—“Éš2Ÿŧš¯B:u›}ëHŋī‘Q˙déėk81ūíFt-)›qĶmĪũŗÖđöŽĮūAĐ}vÖvĢá Úŗg@ėgm1üáŲ#Ŧ”ģUᗇ›îG*gû¯PŸ†Z);D×cĶį5ü.ĶžKëĨ_MÔÕøYaģūBWŸ÷ÕSžøsköČ5 ļ.ØûÕū^”Ã÷ˇwM˙Ĩ˙…Uĸg™'÷š¤O…ž- ‡ūS'ÃO Ģ|Ö[ąęÕ?ü+ī ĮörũyŽÞŌnū$j2ÚĢ[@§d}ĢŅŋáđØ#T¨eđW†ŖųßNļTŪāU/ėo´žX‚ÉœvÜ?ƯøfeÜ4ØØîŸūŊ1ūøe–Ķ•qßqŦŨ+áī‡î-ŨĨŗÉ@ų\†ža͟=žcI˙ ĪÃyč‡ßæ4ĢđĶÃJ[ũ ˙4§áˇ†ÃäXįÛqĒ×ßŧ;o§ÜKŪĒpwJąiđûÃrZBĪ`ĨŠŒüĮŽ*ĘxÁąũ›Y_xu7ö]žGĒÔ0éŪûq˛ŠŌÄ܎¨1ÍkĻĻ ,-Æ:~ėW›|U‚5 Įh<îB¨Åz|1ƖŅí@Ø1íY˙Šôß ŦBøH<ĖėÚšÎ+“âۊîāšląT¤øÁbFēuŅ,@F†a,Jøûā0ZĘžc˙ ‡Āø?…låŽF=iT0Í ŦÚô¤T9ûԌoâ9ëY˙„–ĶķÍĮë[íįzŌģt ×­4š+ĮŌ„v$œtë@ ÉęHâŧĒË6ß§^†@ßǃ]'ŽĸƒmĢŧŦŗˆÆÜŽA$žJŲŌ•ađÔY *$8*§p8ė+?Mí˛„˛ĩešąŽzė[ŖÄœŌüīũĐ+ÄvÍ7‡oƒ|ĮėîCZ4ĻmÕČÆb^ūÕtũE4ŽWüé2FîŊ ÕvņšU^3ëH°Îę\|´î3ƒÖ˜˙ėū5â§xrņ˙é™ūUđ˛ßËđĶKũ÷5ەÃrÜSöŽÜzŌņëH>īŪÍfęˆ+g2+D/ĘŧķŽ”¨~^ģ¨čqúŌ¯ŨŖøĢ'S%ĩ+%˙jĩ?¯z2C*Ō“š9fûß-÷OŌŧŗÁŖĖø—­>íŨEz™-y/Šu ˙xÁ|5§Ü´6‘˙¯dãw­k\ü/ІœŅ[M'Û1Äžg,ÕĨđū×]°°¸ŗÖ˙ríÉ"ēųså°ĪŦ­?ØäŨŪVūuą°úŅŽ3BƒLÚwœž=j–ŗķi3˙¸xü*m„ו_+ÁņžŲ÷cĖÆ#úWYãQ+X" ļÄۉ9– 9õöĢ~ہwFę7Œ†Č'ãĶĄŽkC–ŪįÅŦļĐĸĻņŠ/•‰Š<‘€q^‘Æ1Hxā Ĩ¨Bgąš„ôhØ~`Õ/ 3?†4÷cķÔJÚVÜč})ŖŸÃ¨¤Q‚}{P‚ĢO?Ĩ&y”?úÔšíųPĀW7ãšD~ģų° âĸø}“á mŊōkĨĖo§ZwđíëJĶJĄųzÖfŦũēÖūLÁZpĨēĶ”Ķąß5‘}ķkŖŊkã˙ÕFĐM&8ë˙}SUinūíyÃ˙ŸĮēÛ˙´z|ŽDN;ķĮá_?é6ēļ­ãģûm>á­ä•Ü<ËÕTÕŲę_/ėė¤ģ°×îŪí㚎ŋ­jü8ņUÖšg=•÷7v§ģ°é]́°ąūígčxy˛ˇķ­!ō­8ŒŌē(*3žõŸŦüēTåyų Oc•Ķ­÷uØ?•U×u{]JšúéącR}+„đu“kÚĶøĢZ•Al‹Kwn}yĒzmĖ1ügŧĘžVÃķnûŖŊzēJ“&ämËũáŌŧËâō€ē;wJôģnlâ˙p*~2ō¯0øĢĢKuqaáË&ųî\÷8ķŽķCŌâŅô›kW ĪŠîkKלVV¨qĒi˙Md˙ģZNwķÜT¸m<įĩ0ąųz҆Ú+'R\jšsîčė?5­Ŗ­&É ú 2@9éM~ĩå)ßâæ‘.Wįō°~¤Šî5ŲuÎ-´´Ŋh(Üe[<’^:bŸáˆ zl‚Tpī+3Ŗ&Āōp=+5o4­:ũdĩͧ’0ÛÆápšį+¸œz×Y…ĸGuōŨ€ĘžH>”æp¨éųÔrN’8“á- ¤lyŽIGa[Hvģpp{ûĶÍū4dįųS?å§ŪæĨúTešÛKÆíÛŋ†•BĶN[žÕĮ|L/ÂŽŸß`ĩĢāȌ>ŗRßÃ[rČÛ{ԊßëGͲšŲĮ÷Ģ7P%ĩ hũ_5ĒĨ ÛëB˙z›ûÁôĨPä|Ák:lvÜgîŠ5Ē}ēÔ-#mĨPw¤%°Ģ÷IĻʁąũĶ^gđÎ6k˛ųęyükĶÍ,dųÆ+ČæŨāOK¨Ī 5…Îs"ŽväÖöĩņ;DKąL×7&5SōœcšĢđ§Aģĩ‚ķWŊË{ŗō)ëŒæŊfÄRúíŦī—}46îŽßδųŨģuIƒŠ@H`*<’ŦOJĨĢČ&åē|†§°rÚ}šŨÆÁüĢ3ÄžƒÄļĘéäHÃĘu$ æãøQ§ÆŠ?´¯8ŪãŠâ-|g7ę´I'›ėé“Ŋ[æcˇ#šö7K‡GĶ ąØÅ ŋ“×5Āü_Sö})ũ'5č֟ņã?Ā8ü*}ƒšō}7OēÖ~,O}qm'Ų­ŨŠ3ŠåákÖT* RŖ8Ŧ­]BŪéŒzųįŸÂĩÜ‡4§ž;Ōįši ëMyc˨Ŧ-fōu§H%åŸįž1Z'V´ā$ģ‰ėĒMEũĒ“ĘĩÎ?šŽÔĻîųĪÉdÃˇĖĀw§;ę,šÛΘ-īáîöŒr=y§!6>;ĐæiMÅ cÛŌŊ+YÔĨĶlĸ¸D]žj,Œy šäņYzvšwŠę°ŦPȖøIŊ0 ¸ĀŸZĀšq˙ é ÉÅs”Y7ŗ`°ĮV¯@„2ÃÎęōãæ`¸ã¨÷• {Æ*'ŠåGŨõ÷Ŧ_ 8+¨FXæ+ŲFßĢũkĸ_ž@)!G§ĩ"ƒžV„}éã8ŖŽũiŨM9^GãJA/Jā>*hÖę[åy…tš%Õ­ž…iI‚#ĸ番 ŪbĶÆĄhW>zR‹ģ`ŧNŸ÷ÕjļŨūŊīĒÎģ–Õm°ęXr~jĶŖJ§Û4æ–1ÖU˙žŠ GũåĮšœI?2ŌyĒ šËyQŧDŋ7HëKí ũ䨍Ė~fS˙¤kÛUë“éēę6ŠÃuÂsūÕGsŠŲ‹YÚOņWœü1ŧˇ‹QÖf’D ōņų×ŖVɐ~ûІî}.ú ĀŽE=CŽk.ÛEđŊ´ŪjY[!ũŪõŗĨdÉ"„Š%ÔŦŒoļu$­UĐīm#ĶLę9?yŊëCûFĐ°Ų‚Ŧ˙jZîĮī3ūé¤]F~Hf'Ú2)ŖRrp-'?đõ‚ÃeŒ§ęEgj÷7M%›5ļÍŗ™=OŊh‰5#œG /Lî'ŸĘœąjNNûˆ€öSGŲ.Ų°×Î=‚Ū™ũ•ŧ2æv¯ÍŽÔôŌmČĖIū6'ŠĄŦZÃn,^8T´('Øõ­ĨŽ4Ŗo )ÎUp~œũjŽĄ­išZĻ]ÅyœdûÔZw‰4]Zo*Îū d„3ųVĻ@9ÆOķ¯,øŗûcE¸`ž~Œ wĖ’ŋ‡_Č}’ģNā=:įˇ<Õm îtŲ=Vé&’æ@#učH\íĮl æõģ%ˇņ3Ũ "cöĨuˇ2’Ä–\Ķ5čė `ĻۜŸJg”Jāí˙!@Ž5ÎO'}+Ãå#Õu¸gA˙ŠkqĨ(x\ŸJ‘'îÜŌ})=}&3ˇĩ8ŧ AĻįæûÕįŗénŨ™‡Ë]֝]>e\Āũ*Ā‚`Ēã͊ ­ŗ.4¤û ļ1ä-0iÖxĄLÖTļV˙Û1Ååü›yĨũ™n­ūĨiŗíXhę&ŌmüĖ…|ŊOūˡÆvČ=~jzévËŅ[ūúŦĢ{W 6ĀŊ7V“ivĄįũãJ4‹/ųāŋZ‘,-mëŽôÁelŋ(†/ûæ›} ŧZ}Ë,Q}Â~č¯=øN¨íĒ9U;Ĩ¯N1G¸|Ē?ā"˜ LœÆšīōŠw‘0AõÛQ%¤XĪ–ŋ÷Ȩ§´„C+yK÷N>Z§ĄZÆÚR3Å’Į’ŖÖ¯› Sģ÷˙ß4ŖMļ˙ž˙ß4ŅĨ؃ŸŗĮĮû4ŖN´_›ČöjĻŠ§Û&™rÉaö´ũ?Nļū΃tũÁü5aŦ-üąĶik˙>ņ˙ß5 °ĩŪ<ģGØ­Ÿ"?ûæŧëâüQĮĸéæ5Uũ˙eöŽ÷LDm"ԅ_õ+ÆßQWTČUö§0z^ŊÅ4`¯Đ÷ŦuW$s‹•ũk[ cԜ[Â“Ļī•NAöĻy™ đzø˛ŌMo^–[†•ČD'㚏Į~ ˇđ͜z֏#ۘ¤”7sҁúŽ•č~ÖŊá{;į*&#ūđ85ÆübEirwWaŸČ×xÖąjZ q´›‘+ë‚0AüÅfZ项Īu¨4÷&o7apÉĐ>œUoÃچĨŽ››såĸ,°$>ƒŠë,lŌÂŲ`§\ÉĪ~MYUÜ;ž”„"ž1XZaøŋXŒ˙Äãî‘ũ+ aœ|´Nū´šzôĄ@dŸĨ7–ž@Qü¨#ææš=>Zķ/ˆoįx¯Iƒû­šôˆŽ×ũšáüA ø–ûTilu_ŗÄß(ޞfđī­WĖūŲãũĒÎđÆąâ­CÅ?a˙h†ũë¯LWąā1͍ŦÅmÚã{.ÚÕc°ZD9_ģNÜ3ƒAĀã֛“šV˛m_ū&÷Ŧŋ1ZĶŪL~ūĩÂøĪÆ×Z}äz.‰›¨Í߲fą.t[Y6 ÚÎéGÎ`ZéüâKŋi­ĄËĢvÚĮûÕŌk 헨‰ŋ•p"Ũa¨ĘßÅ=zHb#m ÆÚ 6zzP§hæĄēų­åĮ÷MTĐOüJa īZLIƝõρ•Æ8¤ ā“Î;Uo#H¸Įf*{˙gÁî ›ũj~3īJiŒģ˜s÷z ķŒō˛Ī_´`~FģŊīŅm=āOåVĀ5.ŪãŋJA’_īSÕ{šĮņZˇĨÂ>ĩĒ#8ŠõЁHQs¸ĶIPq×&SĮjĮņ*îŌ‰Æ1"ũVĖlLCĩs=ŌŽ5]ÛÛŽé€*úā䁸WđûĮ:~‘Ŗdęîmä…ÎĮ(NAį4Έ>-‹ÄSXhčķZÆD—HPAĪšŽ—á,cū°[§žßŌŗū/ÅģA´”vŸLƒūÔÛyāˆ×ÎXŧË"CŅNŪõƒá‘ëæąŽŨÖŨޯĘn\Rø›Y-¨=ĸ^ųvä#FĮtewd`äŠëlɧ[š“{”īū÷ÍY@ĖXŒ5)ŒŗŒ“ũkŪ?'ÆĶÜÉfŒ=đÄZßeÉ?…8ŸÖ‘Æc␗îķNSr@ĪOjI>m´ÕVûÍB† 0ĩæ"ßuņ6ÂîcŠôō ģ𤍧¸Zķø†ę˙R‡ÃšC~ūl Š˙Ë1é]w†<=oáí&8"2æVîĮŪļFüīYvmfåļô­E%›~´ úPĖĖŧv§rĒŋ­7%WvÚÉĶuõëm˙–•Ŧ[ĘIn0ģĢÁtß5ŋu @[5åÛČVŪ/~‚ē›˙xßN‹í—ēJ­§RŠŋt{×gáXx‡JûM”+˙ËDUšŅ׉] ņŋé‘ūUÆü#Cũ‡tÍŪSÍz/8â˜Ų´a°ÄphÚÄ˙ CtHˇ—'8CU4f-ŖĀ{úV€cŒz͉ãŽĻ…$æ“ GĄĒÉė{Ÿ—ø X˛%´č6˙Ī1üĒe§Úž2sIķs@Č?ZķΌ  Úšíp?‘Ž×B9Đtķ˙NÉ˙ ŠģÉãúĶ€ãu!_—¯JËņ˙ FKcĄũkM@?­<Ŗšh`Āãķ¤$/lŽš§+kÄNĮF—¸āūL+JžŪéĮŊ'Œ&ŠĪUˆÄ˙gķĸÛ;¸([įžMušŠ}Éቒ?(SÉ⯟3°ÆiĮĖ*[AĐV*§,¤'ũm¤Š>oB§ú×E͟ZC’ÜR펚Q֓xĻ…` O?!9 3Æ+Ęâįâã ßqkÕaŪąüGŦGĄčsŪ;|ʧoÖ¸†CŨËuâ Īžiä;7:ôū‡Ú— ?βôÜĩíÛ˙zJŅĀ-ôīRHØÛLv Ã= .~Lîâ˛t_õ—,Ŋä­ Á–Údū&Ršü+ĮūC §Ä-A.ö,áŸËŨīé^Ąâ;Ë;ŨÉtČŠåŸŊ^}đ~ Ęj7Cåļy Įé^âGÛáCw_(×3đ”áv#ŧĻģĶ‘ÕŠA-ĩŠGĨ5‡âjŊč˙@¸õØy¨t`N“oŽŪjæīËԐ-ĪNÔč”ĒķI#žGjĄŦ’Ú<ũžCSéĀ˙gÁž…\^•gmŠšÁõĻTkĪū0sá‹O´/ō5Øh†đîœq˙.ņ˙č"¯|ÍĮųÅ*œ‘–â†mĮÂšÛÂķëY^$ ũ—ō˙ĪD?øõk&|´öéq4yx\ۚ6įųb”ĒHīYšūŅĸÜļ{tüsV­~Å;Æ0jY‘eŖuÜŦe=5᎟ [Ų.4ŊF{0įîë×5Døs§éˇ‚öîwŊšL0iNTí]Žpƒæ â~&ųsx.įlĘYYšÆ@éWŧ —ÁäČĮQÁ"“LÖ.§ž´ķ ˇû5ÖāŠwÄg'ˇĩ7ÅvöŗŨŲũ¸ŦV¸}Ķ n Á“ÛŠ×đãģhVŦō,„. ršã§ĩjˇßę9ĻJĮ)ųĪęC&Đå^Œ¨úWJO9ύÉËqéNÉ=zSdb*ŒS+MĪįK×úŠa—?Ãļŧģ€\üIÔgûÛ+ÔÎíäüęړĒëZôŗ[æ>[uz•ĨÛé6YÚBąÅācŊRņ“˜ü%¨˛˙Ī#XŸ O—ĢšîAĪg#ڜ9Ļ‚6ÕMAąaqōņ°Ķ4ˇKˇ8ū ´ æžÍŽĸ€w}(oĨPÖOüJnNŪ‰V,›8ã`ūU;6;sBäØŖ'“Š^Æ+Ī>0|) =Žųë<6DžĶßųw?÷Č­sĀã¯jA‚ËÁ Ÿ—Ļ(`qôŦ¯gûBpWųŠŅI ˯=(kˆæyŖŨ…V—RąDf7įëéQ6ĩb|Öb;&kÉōĮė?Ü5KVŊžįM¸lĨc?1ã%ÎĸtčLVq°bũxĢÕää´ŧp2iVĪQqķ_*úlNŸL‘˛ŌßJAô㊧cĀįį’Vŗ<×9ãŅ<¨IxeE ōz04ŋ ˜Û'÷KÔ˙féĶ"øĸ‹í¸ķØK/šeÎxzÖ׌bˇx`iŨ—+ ēH<÷ãŠŗāđN†ˆQŅ’FŸRs‘õÍtX˛0=iŽ@^Msū#‘…ö‹"Ž1z?ī+ é:}ąIŽzb†äûQŽA¤eĘļ:žô( =iūôÁĀ=ę+šDVršãå¯-đģŪø›V™'hŋx~īņWĸ>äũŊŠÆõ[‹ö Ų_.?ĶßūųĨ[=Aˇ§˙ã´É­¯–'oļ>˙vŠiVˇíkŊ.öĢ1ūžĐj;[ũ7æ˙r“ėš‹/ü~îôųižN§ģjŪûæĻû6ĻßōøŸ÷Å2{mHDÄŪĻŨŋŨǚL7íf˛%ÖąųvÕÖļÔ~_ôŅģũĘĘũˆ?o˙ĮiE…æ>kö˙žEFúuĶ8˙‰„ŋđį|m§Ī„oĨ{ųØysĩVøqĻ™ŧĩÔ鹋aZē´ŅcÉoĩܰ˙zė—rŨ\˙ßT‘híƒū™sĪũ4§.ŽUFÛģŽŋŪ¨/tŗŒÍöۂ Ôiúl­ao˛ú` ƒ€Õdi“Žâa7ü ŅĻŪķFOĻŅN긄Ÿ÷ȤkCū‚-˙~ÅQÕė¯F—pÆũ˜ÉGåSYŲ^}Š猘(8Ú8ŠŽ{ŧÄĘCč6ŠV°ŋoö„„×1H,uŸōn?Øī˛j+Œjû Žâ­ŊâxYLˇ>l~ravã×Ŋt~ƒQ iÎˇĒŠÖ¨TlÎj‹-@§:‹ßcyˇP—žŸ(Ĩū˸,Û¯§#ĩI;@{˒O}՟­iqÃŖÍ'›+ÁÆō{ÕČ4kŽ&(䕍ĮŌŦļ‹eåámÔũjXôûU\ũž?ûæĻDŒ/Ɗ1čĸ¤á@ĮáUo€m6ä7üķ9…E¤ÚEĢŨ.áW€9?Z üT™\ôëŒRdõ&°ŧbžo„uAˇūX’?káDŦū‘üŗ€öČĒß˨>ĒōÁˇÛŨ‚q,cplrz÷Žŗ[žŪ=.9īŦüņšHˆíųXRqIĄę‡SFh­Q#Cępp1Ā­ÖųG˜TāŨzV‰~[KH˙U{ 'ūë]úÔcũ`cßĨ?5&wRÔR1œ–\Ōˇ"¨ë.pĮå"3ŠāžĻá¨Īë!¯IfŨ§.ÚO—?/åJĢĩ~ĩ^ņüĢItÔ:Güƒãų~V­€t¤PPJ“M?~ĢßZJŪ‹PčĀ.™}Íh)Z8ūí ĀzRgæûŋJäū#žß_|ŋÊ_†ÉŗÁV_/ZërĢīH­ōįo”…Č<ŽŊ)ŲUU=XĻ\qÎÃNĶOüK >ˆ*}ÜrX͎ ĮĶ4›Á_—¯jŖ­t‹œ6U‹ e÷Ø*fÂn=+Ī/ž+iļ×ķÚ ™Mŧ…K&1ÁÅ1>/i„˙Č6īž;Wgv—–p] `%Œ0¨ČĪ5Į|XĀđa^ūz:č<#´ø?Jõû*ŌļÎ1Í&åųŽ:wĻîúĶÆ6}+3\?ņ%šÂsˇÎŦÛI›8ŽÜ€ƒøRÍpļđI4§ ˆY‰é€3^Q˙ /‰üoĒĪm ŋØŦĸ8iwsŽƒ'×éU5y|iā*úmKívĻL2–Ęä˙ ÍzŸ‡ĩ•×´;MF5eĻX{Ž _ģ]öSŒį1ˇōǚؖØÛÄ}>• S$ã֜€¯­qî8Žrsø Íņ^o‡uíögĮũōk‹øE&íū/îÜđ>Ē*-An-ŧU4Ir¨˛L Y‰”€1‘‚+ļžWÕtĪÜG9ųEÂd ¸Ēúžēt—(×PI4Ōodˆ €Āü+¯ÜØ=ĢÅŦąøzWí‘ŋäĘkn9ãSž pŗFã…>´„’0´›˛wF ŽíÛiN}Ģœˆ<3{'ũ3<×;đĸ,xzYŋŋ%wĮ§˜ž´JúR|ÜÕ]Q€Ķ揖–Čl°…Wûĩošap8īŪ—>œJMã< ŠĒJ"Ķî?†“Nbē|ũ‘W7}Úi‘ąģn>´å;‘ŗÖ”}ßZâž(KˇÁˇ#éú֗€Woƒ4˙úį] ļr}¨īNÁšEīTuœ˙d\ûjk5Û§Á†į`ūU`zwĨČ$Î‘F}éŧų›@üjĻąė›Wø Of?Đ`íō KÉ<ģ9¤'îĄ'đãž×´&FįWž?6â‘Jī8į§ŊwÚ_‰ü+Ŧ\ų6˛Û' Üūbē ĒģQWp?.•ÅüUū‰N2D‰üësÁg> ŌŋëŨkpc'ÖÆr{ĶĮS}jž˛3Ŗ] ķåš[#ū…nCg1ŠüÅ&Ŗd5 2æĶ~Ķ,l…‡¸Åxˇ†õé>ę÷ú^ĨjŌ+žKFà Ž„}E'|pž*K}*Îŗ[ŧĒÍ-Į=ā+Öü/ĻE¤øfÆĘ)–hŌ>$<’1īZ˛ü°8ęëYūĐ ˛A`īŖZ‹ÔŽôū˜ R7npiū/ÎĢjKšŒŸŊĖķƒŌ/VˆrĒ0jīŠ¸ÔnËōåŠg7 HČ!GŌēíf)nôWHwÛIØáI‚FO¨ŽgAˇtņ3yBË—c9r–čzgÚģҏ}ãųT[‚’Įk/Äę$đÖ¤1°–ü†kRȉ,`lcSúTã§ZhûÍéMlÜŅ‚ŋ/ëJ@`==(ÆĶÁĨĀ#-Öšˆ×+„Žíģū\TŸ [oZ˙ĩÍu`ņũÚCʡÍH (´Ŗ¯ŪéYēßüƒÛŪŽÚí[x×§Ę*R ŊÅ4.æäö )ŨŒ~4îß+V^¸Sû>CëW-GkũīŨŠ› üMēœ6¨ÛJ}hãķŽâÃĒøFEūķú×CāĀÂ:hĮüą­Õ Šbœ v3pŲĮŌŗõﯓp1üĢ@5ŒžAĘŦÚWŪ‚vÔ?ũĒn~sU5˙{œˇđžÄ°AĪđ ‡S‰nėn-ž]‰4f6>€ŒgõŽKÃ˙4 (<ŗ/ö„ŅæP@ÃĨa|EđfŸ§hįYĶm.-ˆ,#āœt×xW›Yđ…ĨÍËî™ Gs܃ЧņWÁYėé˙Ą Ōđ#đ>—žtë]ÃŸĘ™!ā”üŖĨ7wÎsÅTÕBļxé›søQĻHŋŲ¤|•ūU[ÄwíĻxnūî!™b™~¸ë^qđŗC´ÖŖģÖĩ%û]מP yĮîį×5Öø×@ŌŽŧ)}+ÚÅą@dIA#ķŦOƒ×—7~ē†ffŠ ņ[ #8ü+ŅH>KǵYžû$ ØÄŒ?ņã[ Ĩ[ži6“Āl`Ōņ)@]¸÷ëL˜#ÛēõČ"ŧ¯á3ĩ­jß=ÔūLÕØk6Z4ZŒ—w÷‚2ņķ”üĨwcŽpHĢ—7ļú‡…î$Ķ•n#ōąŽsÆzuŦ?XŨØj7 ":ÂweŨ䃯1Ôbģ9‘@ĪZP72üŧĩOXˆž…¨ ęиūMĐnŧŨÆFäŸ|VĄ;OĖÕæĮŨīJŋ{û¸§ģ­!8Ú‘Oü ŠXîjāū*HAŽ-Ø/"­t~„ZønÎ3˙<Ã[?*üÔŽp(0ö¤æe#ņŦŨ\ƒ*{Č1Z{vǍŖŋŠ‘”ëB䑟­8€;VFžÛtõÚŋy€­8€.ē)Āzũۊ W4rWnyõ¯<øļÄxj$^7Č3ēēß ūīÂúz˙ĶZÁ‡ŨīM'2b¤ ‘H0zVvˇėŠķˇ§nĐĄÃŽ›ōŠ6¯÷}¨9#ŠØ@õĻ}Ö⿍ëōšnŋ%YąP,­ņ×`ūU›âm1õ­ōĘ|šdO‘÷c :WšøwÅúƒôOē’8Üė•W'ëÔS|MâÛßDš&ƒ§Üä ĘîŊpz{^—á}ū˙ÚéĘUÚ1—oV'&˛>(ŽīŪũP˙ãÂŽxkxL˙Ž'ųščöí<Ō9ųđjzrŧū4,æĒęC~—tÆßĘĸҰÚE¯´c5%ũ´W–[N™ŠD(ËėEy=ˇ†ŧaāĢéÛCÛui1ûŧ}2;VoŦŧyã-/ãŽÂň8÷éÔ×ĸxkÃöžŅĸ°ļ^.ĮĢąęMjŽ1ƒĮb+/ÃĀ%„Ëž“ŋķÍkU, T ukšĻŒqũáÖĄmcO…s-ė ŸYWüj•Į‹—t? Oø[ö˙ô ģĪû”‹ö§ūa—y˙r|_´ ˙ ›­Į¯RķâŊŊܐ˙IJãämÕqž0Z/]*īåíļ”|`ŗū-.īūøĨ_Œ6y´Ûŋûæ—ū›ˇūA×GÛe/ü-ũ<íÛĻŨ˙ß5ŸĒ|Tĩģ‚8×Lģ]ŦŦw-[?mņ„Ō.øãîĶGÅÛ}åŋ˛n›Ú”|^ƒībŨR‹ņ•_ø’ŪS[ãįåŅ.ŋĪá\ˇĩŋeņXYéÖÖËĸŨŽ0ģˇ}洟ÔîŨĸ\ãũęSņzÛ6‹r)?áqڕÛũ“súTĢņŠČųŨĘĒj_ėo,%†=:éIN=jÜ?ô”…é÷\/÷EK˙ “FÛ˙WŸ÷Č˙Æ-#w_÷Č˙wü. ˙ËĩĐžQū4Œ#˙Fē?đū5WQøąŖŨXMV×^c&Ę*X>.hqAfŪčē wĶņĢâöÁō.īØ˙dŋ<1r1-ŧĪėŅũiŅ|SđŦ)ûģyz€ūU7ü-ŋė˙—ŸOõũzÁņ§ÄM]đĩ֟gö:]ģwĮÁÖĻđ—ÄMG𭖟u$Âx† #Š5ē~*øaēM)ĮCåk|SđÆsö‰3ĮSSĮÅo ᛉyíåpø§álĮ܁ë“U=C◇e´žŪá÷!UÄ]r1ŪŗŦž+i6:l0-ĨĖ’ ŽŅŽŸZFøĩɃG𐑁–Įō¤˙…ĒKƒoáɉ>š#ôáã\|–ūn}QŋúÔÉ5ŋ‰7 ˆô¸âô;Įæi ŋÄëĻåŖ‡?í ĒÚ‡|sr.jŪH‘"‰qķœgĨYŧQ7ü|x…ũĀw=žĩ2ü&šL}§]¸~ũ ūfŦCđ‡NTũūĄu!œ;UČūøz?™ŧöôÜ˙áWaøqᨏ6[ņŸŧĞ•Æø"(´ĪŠ­¤ åŠt0 WmâmfH¤‹kŦj6ÆÎTnܤôõą§Ú=މ ÃųŌ,[ŽIāôÍr6/ ~"ôØ/ZHŅüĚPwÜœäzWzœ1'ˇp})åņ׌Ō8ܤŽEaxA€Ō懧“s*˙5žFvúĐäf¤2ũęV\ķL_û椀1֎ c¸¯)ņâ-ߌôËvų—w#ņ¯H‹KŗFĻŌ.q°zRļ§0Ûö8ŋīšoönžŋ2ŲÃūîÁNūĖĶŲˇ}šûäR.Į9û_÷ĀŦĢ­6Čë–ęļđ÷Šė5j˙fX›ėqßšúv˜Íko˙| A§im˙.Ö˙MĸƒĻidä[[øĨūĖĶ“Ÿ˛[’z|‚ŗuk;O>Î1i2 üĸĩūÁg‚E´_÷ČĻũ‚Č ũš,úm§‹+>ÖĐ˙ß"“ė6`Į´_÷ČĄŦmJ˙ĮŧX˙vŧĶâÔ6Ģi§Į*¤ËŅWĘŊNŗˇ:UžëuųbyéVÖĘ×ņīũķM{ 5#ũ?ûæ‘tÛ˙—XŊōĸũŸeŸøô‡ūų•¯ØXdËūKBZēšNä!k(~čĪîĮĨؚ[øņļĪũsi‡EŌ‡-což˙ģZö&ü‹ LėŸØ:PäéÖß÷íÂŗĩNM"äϟlgc_đŠít-Ų@dĶ­rČ91/'dxD Äž×õĖRh€Č2Ô˙ĀDŪŅ0?âWmĪũ2_𧟠č€déV¸<˙ĒZæŧ iVž ŋšÛNˇŠT ĩŌ0ų€ëQøÃÚ=īƒŦŽ.tëydmۙĐâ>ÕŅ˙Âáāt›L×!ūÃāĪ´€˙dÚcŲ<ø;Ú\é6Ų˙pSdđ_‡Jįû"Û'ũHūĐbĩ“f—i¸#`ųcĐŌčē6št{v66åŠrvkY,m#X#Ā 8§‚‰o-G$đ*´֝q9‚¸NČŽ§ųĐõėiģģž:VNŒĮízœc€ˇÄVž0ĨqXŪ ņ-‡†ėžÕ}' vĸŧįÚ¸7ø§Ģܓ5‡g{~ĄŠąĘķĪJÜđ—Ä/ܛ9Ŗk[ß≛!€į‚{×n2‹ũkÉô˛-ū4ŪGũöÕs]Ÿ‹ŽRÎ(e–Kĩ\|‰U3Đ횺áYd¸đėFIō\.ãqĀ'׋†uKyāh¤°‚X$ffysëÁæģ(L‹ ,Ė­ ĀfŸaR úúšht#i8ŽÌbŊÖ o ė@?Öēl-7oÍķ~5'Ęŋđ*‚ģhfĮA֗'n?Šš„oZōTũģâÕ¤x%zŅĀÆi€7áMpāTŨ§ũŨ´.˙ŊY1ЎËōĸÖČf;WâŸ_øƒP[ˆuYmŖ ˇbæ°ŋáXj¨ŒOˆn/^ĩĖiš>§¨øŦéún­qs ûëįbã­{ŧˆ­âˆļíŠ[­PŋÜÚĩ’Ē˙Mkí$QYÕŋ†•”/Íßĩīá^cņU™¤&ÜfZô›%ۧۃÚ1üĒeAĨäsI€Īä}ŨՕâ”Ā÷eūuŖ‘wâŠkš´:&‘s0ĘB„ãÔöåē5‡‰ü|’j—Z´–v{ĘÆąäĀ)𕧉~\C|5&Ŋąc‡ĎžõëN ēļ•mÂĖĄąLÖԍįœej{hŅŦ`%s„ö⤍œgÖ¤ >R{öĄB‘’:Sļ†ÚHÆ+—ø‡†đ>ĄîũS>˙5Šméģ˙B5Ö6Ņ€GZLādM9i>”ÉŒĒGNF)“’ö˛ü¸O?…gčLÍŖÛ¸ã‘5ĸ€ųņ™gÕž#xÂ[Ž 2wlÎ6†Æ}É­Oá4Ú|—MåĘŨÄ Žöā‘ĪjŅø_â{^Ę}2ūF’æĐŒ3õ(z~]+ŅĄ•¤ēލ¯˜§˙­‚ãy¯2ņˇ‡5oøËN) >—Íė`ežoŌŊ ŌÆÔGōDˆ8 ÅxåÍŊžĨņrŪMˎTy^/ē1‚ÆŊˇœ{Šō;’Đ|möņ!ūqâģoÛO$6“Á™$RļEæ =FjĮ…îešĶ\K´IŦŽĻ!R0q€q\šķá$E¸ē”GÎØ§Ucbų*OLāí¯D0ä žicˇĨHG8\×;§Ę°ø§YFkˆ¤ŗƒüĢ~Sí÷¨ū-ԁļԃŋ†Ĩ'ûŋ…/4dw~å:LmsņNáŋįzšRM0åGû´įÎÕÃsGEåŠB‘ÆęĘĩ`uˏeâĩ[;>ZÁųšŧÛâG‰Ž"č:fķywō;/UĶx;ÃPxsDŽ$ɚU3žŦÕŌ ¤nŦĢĸ[_´AŽĩiļā~÷¨›īRz1žčûŖĢË~*uMKc÷ŋÖŊ2~Į|ƒŸÂŸ‡_âȧāŽ˙JnNq•#ԐƒĶ§Ŋgk§vĶ?8ĸ›ÂĨfëē,:ö–öŗ$R0,S¯íKˇŅ4¨l-Î!‡8/Ôúšķ‰ž&´ÔĄ@ĶíWRH7˜›p=Íw~ĶįŌü5ge*ūú8Æā{ĩoXûäžp Ģ喇(>^våR˙~\Ōį§Ŗ’qŒPAŽĢ˜ņūá Ô?åŸ_ÄT? ˇ7ėÉ=ß÷ŅŽ¯-æ}Js1PN)Ē[Ė'b”ŗgM˜%ÂôÁŦŋ ’4Hō1Ës˙5Ģ"—F¸ū1ģŪŦ[1aī¸Wš+apwɰ8×õãīl#ō­Ķ–­“´vŽ3ÄŪęĻāęĶÁFĘNœ~5įĶÛę˙ 5¸ž9–âÖëī|ŧH ōĄæŊēŌušĩŠæ3••7Ąä:ō¯'â֗7Mī?‰ ×}âs:Xiƒ°W,ŪWcŪ˛<l˛\Û ā\KŊ!ųŒÜr{įfö "ÆæInõ_&!0™­ŒĢŗ\ã¯^kĻ‚ę+¨’X^V_­KČlt§t8õŽx/‘ãk’~ėÖHÃūÄZč `¯ŨF[ĖÛڔ°-˛‘ƒ3mūFQŗ§Ũ§n 7 DÜ$ž›kËŧ<ßę3uĢÕwŊ)ģˆjIwÍųQ—/­ŗ˛ÖM’–Ôīûģk\*țj­ÜÉĻØI;|Š–&ŧŸĀļōx—ÆˇÚíÂîŽ;ō¯b•ÜVž‡åŦˇÃx‚#éiķ†ųŠšųG͊Pq÷jLqƒÍDŲ—nÚōī‰ŋō0hi˙M?­z„cÆāgō§:8ã֞FÕ4͉? ÎÖŋäô•sųÕü°aūīæĄoĻØÍytë1.éŧ’ãVņ7Ä{é-t ÖšJžÖnGíįØWmái~´ 7‡ŦĶ`‘ūčí]vūqÔöŦŨmĮöTã:~5nĐæÖ?¸*¨ųŗÜÔeŗ/ō˙”Č}@æ”î&š¯|¨ķŒF?˜Ēŋ Xˇ‚lūnīĮü×^?Z0sžôšdņęi2Ī\Ķd ÆËę cxs2é<7"Gūú5ĩ‚ŠžŧWžęQø_ƚëésn7đ‚•n=ęHüáÅ6Ĩs“%ēĖī•ãũšÁøMj÷ZŪĢŦėÂ7î×°Ü[$a^ļŒO^Mc[1_Ū(ä˜PŠÚqšxę9¯&ø‘qŦhž$˛Õ-įlÉBČ„ܧ{r+ŽĶŧáÛĢîPHXŽ]$Č`xãĀxĶX_kē~—ĸ¤’¤Ns.Ü œdũ¯b˛ļZuŊĸˇFąîú W—xüž!hrößOŅëēņlq>„Îōaã’7@Sxf`}MdxxîūŨ<číʖAUUÆ1ôæĒø›ĘĩšÔ<šŦ<ÉpÆ)žBqŒ téÅuē:\EĻÄŗēŧ‡•+Ė)Ģş?sëNo39PŖë\ˇ‰%kmrŌã~7ÛHŋO™+Ģ$ų‹O0Å5ŋī–Ŗ';hŨĪû_ŨĨnvÔR´™™8 kĖūˇ›â}ZoŊûÆZõ=˙JUl¯J^:ĶpūÔÅ]ąüĢYÚSoēģmŋōŌĩw>í`øĻÂķWŅ&˛´dIe\ooJŠā ?…ôfļ™ŅåvÜÅk§ŨčŋzœÍĘūĩ”ōøHPĶ:Ö˙€Ķ ܝԕĘĒæšŽ$]ÛiČâŧ¯â\ĄŧWĄĻßâūĩę0’c@ËŅE?pČĻą|´ŽĘÃojp‘Cm­¸ĪiWhĢ ģĨq˙ô­G\ĐÃKMÎԃ Œ¨Ž7Iąø‡ĄX  XŖ3ĩzž˙Zļ.~(nâ˙žRŊCkæŅ­›U]ˇ…3(ã¯áM֊&ãg]jåĻœ%y!GōĢ€üi2¤ō3čj=Ûd'ąâ¤ß‘ÁŽwĮ˜> ÔԞąZ§đČ˙ÅkĮņŋū„k¯ĀëNĪJÔÔ,W#æâœÅNbøt„°u+įķ­Ÿ3ĨyΉü {sŦwAšû-éå×ĻOLÃ­fÜxGÆŪ tļÕõ8ã´nØŨp}įņ¯CĐt{]KŠÂÎ=ąEŸ›ģžäÖ íÅcĸ2xĸNÅ­Áüm1;zāö5RîÆßQ´{{ČŖš'ęŒ˙ëW4˙ |0Ōnû+ ˙ķŠÛŌü?¤h•ąļŠŨX}ãøšŅ&2(>¤âŧĢâ›Dēæ2ČŦ=va^‹ĢCƆÛĖJW .v‚ ņĪjįü( ļŗ¨XŸ˛ž@‘ž~ņ'*rj—Šåš´×Zæ2 4@#•RA9'Ŗ]Ž‹Ą¤[M é7îÔ;ĄČÎkKMtšŽŠ$VūwīŊíē›/üxĻī÷éËwЎŨŗOûîš/ĩBãÅ?īēCwŠí˙ü~”Ũę[[ũ>_öꎙu~ãežwIĪĪ÷kDŪęJßņâŸ÷Ũ'Ûu Ũ§˙ãÔŋmÔBsa˙|ĩGũĄ¨˙Đ9ŋīē_íđT.˜ü˙´+8^Ũ˙lîûīÛū¯uj Jđ/üƒĨ˙ž…/öĪm2\˙ŧ*3Ē\Ÿ—û2^?ÚĨ:ĨĘŽŗgũ)cÔŽÉ˙|ŋ÷Đ¯5ņíÔŗøĪF&ŪHÜ0Â7ņs^–ēŌÄŋņ-Ÿö…4j—'û2ŌíKúĪĮŌ›ũŠ89:mÎßœÚĢã>āŸ÷GøÕ _Rimâg21NY}úUīír@Vąēã¨ÛH5’1ū…uœvžÚļ9ûĀĪQ˛˜ēŌílŲŨßēh×FãÎë#ū™õǚŽŦ$°–5ļ™ eŖÆ>ĩz-Z%†1ö{Œ(„ãĨßē4Ŧ…˙—+“ßîzū5›ĸę­ŧØ˛ËLÚIkHj7†/—O“ŸVŖ–ĸĪ˙ üŲqŌ¤ęģÁ°ŽîsŌ™'öÉq°[žû˙U8GŦķMlĮD>ŪūÕDÛßoŦfņD†w„3ĐŠĶ—OŊŒę.ĪEQ×đ¨ĶJ›wī5 –˙c×Ûۜ4x˛D—7,?ëŠīđĨ}Ԝ1•=Ü˙žæ—ûČy GĄbkΞ,ØÛÚ.™41Ēüî=ļšô)-“RĐRf ,#æF@æĢéēļ‘7Ÿį3Ę⇑°7läū5ĩqĸØ]ĨÍô~dķ @Ē…ÎĐxãņ­])l“Mƒė*؏“o^äĪZ@ØĀ=Hä×/ã›oĩéP"‘‘8?†Öޜŗá§Š ķSdę´šāŌmū*?öjĨŦé_6>CüĢ„øT€Úß8ū)ŋ­z:ãø—mVŧŋ´ąM×W)˙´Áj;=_NŊ;m¯á‘ŋēŽ ^ē‘›÷Lk?F#ė˛7ũ4n+Ap\÷Ĩ+Rį‘Ž´¤äũŪiļšČ„nņß7Ũô­„9įŠ4šÛHËéO­yWą'Äm~˜üëÕŊ*<“N#8Ŗ mŊi7v5—Ž.č!īûÕĮįZ>V0zš0OĘžôģ=[Š:¤g=!Œ/*ĢÍfëĒNrĪũŪMh[ÖҌ`õųsīŌ—ĪõĄ)Ũ€|ģp;âšßă5R¤Ē? 0|ōŅ˙v¸īMĮ¯ô¤pũ:Ķ@ü>ŸĨ9ŖxëŒVFˆ!ž Ô]9ĮÖĩņ–BņL1Œåŋ*WĖÃ˙—?Ō•ˆĮŌ˛.˜/‰ėÉīŠ×$ŽøĒ×w)ei%ˆ)|uĀ5įīņ‡H\ųV7nߍ@˙Ą|yZ4í˙˙^ir×6ĐÜŦ[DŅĢāžyÅy˙ÅôcĸXÉĩpŗc?U?á]NŸ ē—‚­áđĶY*ĢtÁ+úÕoøEĨ"KŊZō]ĨI@áFAcĢxŋėđšeš7¯–˛&&!˜‘Į"ļŧ9ÍŨD¨ø˜Ÿržs×ŊiƊIq"„ŪsĐUMI!0.vōŲũ*ĶŌüÃnßâŠíū*‚Tö§†¤\āûSIū!ü5•â/“Ãˇ­ŋūYå\¯ÂˆņŖÜHŠO–ģ-Vëû?Nžãīl]ÕãZ‡}ņVšģÔī&ŽÖ6l"˙!VŧYāøC­ĶUŌ/&]ķ.úôĪꍭxbÚîOšF]Ŧ~•ŗ1 |ŋÃTtD̓1ū&5 §nī—ā€Æ›´ˇōĄ~_Ō†UŨY–ˆ?ļî=”V°OZnŌzū Ŗ?)Āų}iĨ7_­yg‹?Äũ!U°+ÕáFęŠŊiWĄE ųpŊsC(`2ÜV6¸vÅlīõËZāqÕŋČĨōōÛŗõĨØ08úŌ.Ö?)j“ŦŊu‚čķũã•Ģ6ĘßgŒ†lmöâ¤ØŲûÜzTģ@ãŋ\ĐW#ķ¤†ęßJįüp‡ūŨTį'ČϞ/ʝMcßxũ+`ķÔgŌąĒEpŋW@´đŠ\ęĸŅd’w!įUÎ:gé]ĻyáÛš6Ų=‹šÆ6Öā W…cĶW ņj2ŪˆŽ‰pŋČÖĪ„Iŧ§:ļ[Œ ÅrōÜŨ-ŪžĶM­´æBmÚŦBŸ”fˇŧV×Rivæ9%dŲ¸WŨˇ!I?‘ĢŪĪö€ęT;”•ˆãqfļãVķŌ›Tã$â™<9#ŒœR$N/$“ī ]íMŸģFqI‚WßŊ#•ėÖŒœ'†n˙ŨjÅøVŋņLŗīq]vĨ7dĐÜ6ČŲ~f¯ŌŧCyá ~æÛFOí vo™W57ˆ|_Ģøžæ ;S‰4Ûf“ČWõ¯iđũ­­Žƒm›y,|=h]˙ĮĢņōíĒÚ0˙‰bûæ¯ģũ‘NÁāúS>û.NĻ‚•8g0k2ŅŗŦ]îūčZŅPģ[ũĒzįnô˜Ü)@ Ō›ģæûŋ-yWˆĮü]­-~öWĢ6E •Č?…W™ H§ø}*Æ Ēú 8īšĘÖĐb× ˙-…j8Û×Ĩ)–•[+Í&3ĮJMĖžųéYÚé˙‰DŲãæjõšÅ´C=ūTđ\ōŨ)āÔ´Ņԑ\˙ˆ_ęŋ7XųV?´aāčÃ(˙\ŨëšÆáˆ?\{Ķö“׊Lvô揗yŦm ŸĩęƒŋŸũ+cwˎųĨ*Į¯­æ_zQÆiÄfą5O—UĶĒîŪÃķm;N:ú×?âm6÷SđĩŨ•ŋ—ö™Ķo-ÉįôŽ#@øKƒÍ×n$ķ2vAđžäÕ|9‡AĶVŅŽeFˇÃ:äsÔé]ˇÃŸK¯øadģ}×6îcvîp2ņĸøĄ“Árœō˛!ũqVūēËā=<î2ūLEbÅö~)ĩ72GpEĮËښGŒFí¸­ŋęki![ī P6TÜt9ãKáØf–? ,ŗōĄ9XōG=9Ž‘Xį8ëÅŧĪ NLtP=)ŲŪ>ZJR/ûÛŠQŋ†—wĩ';q\§Ä ]<-uĮËP|2F‹Âqd}æĻüKŧžĶÂĶų:ųŸ)Ē ´ģ8|6ˇ‹I,šŸī5Kņ3Oąo I<ņ"ȟuŊęo…Ķ\OáĖÍŅžOĨuˇYûûŋģPé SMŠē d|´)ãq äžS4Ŗ=J7|ØŦ<–Õ¯˜sķV™vnŌî;}éAų€ÛMÜ䌮֞ <הęÅĻøÅ`6ôÅzĢ ´ūôͧ;‡zq b›Đpš5Ŧ7Y|ŊfŽŦĮī/Ԛ7ueÜJpb†‚[<ŌĢ}Ū•“¯;e\|Ŋ‡ˆ­ V?g‡r˙Ģ=š¨üÃŋi^Ŋ) 6ė|߅.æ'qXž2?ņGj›†?pŲ?…a|'rŪõŲŋĨw;ŽWé@É$m§'SHÅvķķP[p⚉2…đ|ãûÛj_‡āĮá+aŗ‘Zúî•ŗĨËc'ŨeûÕåVÚ?Ž<3Ûé įÚ;n§Iá˙øĘâ5֟ėļQˇŨûŋ ¯VŌtĢ}N†ĘŲwßU-ų˙A“äūM,ô¨ˇv­‚3ģĩ7,N=i]öŊJųE!*÷Mei'uÕķm˙–Ÿzĩ~đŨßĩ+p ôŖjš@įu'˜šÛÚŧĻâC'ÆxîĒ(ūUëČ!O4Āûwnūv! BáBį­‡jËÕŲ„ÖJ;ÍZßÃÍ4}ÜwĨäLÜwcn{Ō—=úV^žįûp[Ķh[ĐÆØį`ũ*@Āļ߇.:ú Lɓ튓<ôâ°ü\Cx7VĪüû?ŨúW;đ?đ‰ˇߡōŨģN9'ĄŖy žĸųČíŠja‰ųŋ xaŋhüëNkú”]‹Šũ+eŅŨę9 ‚‘ÚĻûĘ3Įĩ?=j-ÛOŊekęĄlܯå3ųÖ¸qŌ –8ä‰â‘UÕ¸*yá5_…-ÕŲžŌil‹rV<Î{gĨ.•đĢG˛ŸÎģ’[Ōŧ…“…ČõÅwh‹„MĄ@ÆéūqY>/@ŪԐķû†įéÍs? î|ŋ\’3åO!Į¯Õq~΍M¨ŲŊÂØ‰RIbK§sm' =yæģMy§m*CjŋŧmĒNŨØRpN;āVƒ-î-Ž/ŌXØŽ˙šB `Ė8Į`fģOđĨPPķß­<ļ:Qƛī}jEœ˙ÍFÕzBå\Ōl*ëķW ņ^PžTŨķ3ÕĪ ę_eđŨĸ-”ėģ>õlž´Ų_ø—Ü͆˛Kcė?īPúÁn~ÅsíōR ^R0ļW?÷ÅVÔuwk ĐŽļõ§ZjrEa5ËZ‘õ—V˙;ž”áŽ7Ū6;Ŋ6ĐÚБžk —ũŠp×K7üx]í˙ršuĄŒũ†įūų˙ëÕ #W‹†k[†f“qڟv´S['°Üß4æÖˆ˙˜}Û÷)­¯˙—+Ŧ˙šB닂ßbē÷ų)#Õ×,ßaŧĮû•æ |$øģö“¸UûŒŋ?Jõíĩm§ėw?÷Í7ûn%fŨgs˙~éßۑäĸŪßēš #ũįūũšĩNÛkŧúųu“ŠęâKģLC:}įtxíĐzÖ°×â?ōís˙~Í ×á›{˙lÍ?ûr7}žãŸúfiŋÛvĀäÃsĪũ34ŋÛvč€ųw÷ėÖvĢĢ[ΧKĮ6O'|gÔUčuģŗ Û6āŖūYŸJzk–ĨxŠl÷ũŲĄĩË\ā­Æ?뙤:ũĻáˆî0?é™Ļ¯ˆmāEt1ŽZŠËņ6ąo7…ĩ(–9ˇ=ŗ˜ČÛ\˙ÂŊ^ o ËŦĖDįîFHä í_[ļÚ?uq˙~›Ŋ$zÕ¸W ŖžŸē4fßgü{Ũs˙LĪŽ(Ô`ŒYŪgūššpÕÔɁetAčŪ_šŦģmE“^ŧY\9••Û‚˜ëHj“ˇ)ĻÜßC§įôĨMFíūcĻHl¸˙>´h_œcMoûėfšu Lä={ûßūĩkÕ?ĐâšsūJËÖåÔŪÖ#qAtoŨäķëšÕ?Û$ņä:šnÍ\ņįĀpõ╭u9ü}F:āėéíũ(M?RÃÔ3Û!íŠFĶ/IįP—œ’Bß>•KZŌ.BžŨ;˙ŖšÚ[ƒ…=Ģ™ø<ėÚFĄí0Īâ¸ū”x‡Kŗ°Ô. ŦļņÎ0ÉŲ—;ˆČūUÖŦRÁáŲÛUî”!v6>Üd.Ĩcčņĩˆb6ē5ÕŧWQûŨH îëī]ĢF°Kgi›x^´Ļ$Ú3īēœüĐT™âĸÎÂÔäÁ^ÛŠŲų~Za2כü[‘ŗėãūôĩÛhKåxzÉvË*Ņ܃u?å+ĩMGž#&Ũéš~ōŅōíųv|ĩOVŦ‰fûÕq¤1ĒüĀ- "ü”âčĢLûŦR°]ģiWkĩYzƒĞŗ3VĻŪjqQéM!wd¯ãJmû´ÔW“ix“ã5ÆåûĒyü+ÕÔ Í÷iDkˇĸæ"žŠ´Ē ÅpiW _›ĩcj‘+^XŽÎLŊ}kˆĶo¸§á~īËL`Š=OzTT`Ęi ĮĐ*ŒņYÚôHúDíôį͝‰ötãø(T^Sn1Í?ËL ŽĻˆâ ’ŊiárkÅ ęcof“¯Ōš?„8 ÜįĩŅüļŠô=‘€Üq֐låÚ8ãå Ēíöۚ12>žôä*T`V=ŽŠ/~^LHGõ­Œ¨}…3Ό9ąĀ4‚XʏŪ/_QM76¨gā@S÷Ģ a´ƒ‚r=Ģ/ÄL?ąäī‡\ū īZąļbFöŽ('fHZRĀ2ŧЇq%ž”ŠÄJƒQS5…ĖjW&˜¯2øBî§V‹?tŖüzģ=__0ĨēŧŅʗ n.Øü…2×Xš˙NÔĄŧ…VkeeqnųmČÚzæą´KY´m–ōV•/#-K‡f@0prqéČŽį•`Ŗ 8Éũ)fV=:㊋ cŪĨ$ã‘øŅķmĨÉ?.*#š>mœĶ€,̎åŖ-^]ņMĖڎ—më*üĩčē|-™n¤ãđĢ ģusž6ņL~ŅŲĐoŊ—å†5ŽáMÅî­ŽŪ\^\ŧŒs+;zŊišGũÚ§ŦžØc_ö–´U~D ÷vÕ-Fî +Ožö_™!qZō 5ņ?ÄĢųæŠųėė#mĢ÷‚ū¨õø›ĀÁu}Yæ1žŋÖŊ_šČ×ô/ˆÛ#.×ü+fFũËÚĄĸs§ŗėkCæÛēČæ‘c\R‘ÔS\+¯&đØ2|aÔûģĢÖH,GËԐnv‘üß/ËOiĶúŠĮÔÉ]ON#î—?Ęĩū\Ô3GoĪ3ĒGåœôP9¯4ņ¯ÄÛŌåŗĐæiîd]†uČƒ×ŸZÕøYquwá#-ÄŌHæR7;é]ĀV+ŠĪכn7áüëF<˜ŨƒîcÔĐŲÃmü)â?Z}cx áO>Ėãô5Č|įÃWy˙Ÿ“˙ ŠôC’tĻĒģ pCĐô§rqíڐn9?ĨbDūЇP`R?Zōe€ÛÔZáŧaā}GĚē]ŲęŸeU„!O›¨$ö>õ„>jmĞ!nŲoņŽG_đĖÚwˆíôk=RKëŲ Ŗ#a'ÖŊįJą“NŌ-,Ĩ1ácfõÅCâŨŖ\úž=Žjõŗų–а9ųüĮÖŦ• Ō2ŽW=iT›EC,{‘ĮĒkĘū‰õ‹`zŽ~oF"ģ›Ũ^ũÆŖenöŠ G fô>ÕzÛM´°ą’(RĘyrF2Ië\Vƒ5ž§mÛŖˇŒ’ōO*đ ōŖˇ ŠôæŽe ŒŦ¤d0äƞŽū"ižk/ŌžŽå9Jrļę1˙}Rž1ڏŊ÷¨ÆŌ y/Ž÷ÜøëK€ ÛZŊV%#ÖWˆĩÄđū‘-ė˘Uų÷Ģ‚đŪ‘sâ.ŧO¯&âˆßfūęQđ™IÕuiģm¯Xä+#Y,Dã1kSæ˙€ãЧĢi°ęÚl–7[Ú)æÛÖ°ĸGÃũvĮŽÔ7đüōyīŒū Gâ˜ĸŅô˜_lŦĒŌÉō×ĻxCHmÃ6–;ˇ6ß1™}ënáŠÚČßėĩSŅrēoüÆ´Ā;zŌĀSw[ ÷im´ŦX'ŌŧŖÁŽ_âžĒūÍ^ŗ–õ`öni ϐwnŨK6x™ŠÚŽī ×äĩVōŌ;Ûi-æUxä\8ö¯;ņĮƒt#ÂwWvšzÅ:/ŦxÉ÷5Ĩđ‰đJIßúWqšž÷ZÍ×˜Ž“0>ßδ"|˜ūčÎ*FÜËŪ›ķį͉ãvę8Âļ{æŗõåfđūĸ=`äkˆø9ģûøĶĮūĘ+Ō $ŽWéKšˆãđŖžģŠrryü)-ģôŦ2|c×ļÍ[ˆ×§Jæ9ĸąhü ë|gŠ^éŅÂÖwą@Ņ˙ËW˙pãŠáéŒú, 2Oã,.p_’zâąãçQωˆä—Ë[Ŗō˓Œg¯ZëRŨ6GU ĄxJx›ų~ĸ!R â”1Gįîˇzyû4„ gi?Š•Xį?ÃIĩŗÃ}kÉ5–kΊļéü+^ŽėäOŊ^âŨSSģņ€kģ Ģ>Ū_ŨˆÛ_ˇ{ņ2ühīk‡į…6lWųļúV?ß]iŌÉ ž•%ÛÜJštŨĩ3^ä 4jÄmcÛûš—¨#5åŦÃæî5˛pˎՇ¯xžĮÃvë.ĄŋlĩBĨXėî Í IŸ2‰?¸‰>ŌŦôFÔm-ŌŪhž`ËōÖ÷ÃMBâ˙Â1}§Ŧ(oökŦŊaŒė;+~ĩSJĪöTŪeŨWĮÉŪų¨9cuˆuŨÛ­?!NOŨĻä•l˙vŧ§ĀCÄMfOģË:õ›īSüéģqš•š¤\|Ų=iŠĻīöēV=ė…5Ŋ?æūųĮá[§‘ÜŌ.6’ qߤĀ×Ä{:§đ˜ŸøCåāÎkēËP>îŪk7Ä'LŊē:š7ŲboöqVUÁëÔR.1čhÛą‹P02ŲëYúæ°ī˙ë‹#\/Á×?ØēĩĀ?øč¯I2c9=xĨí÷¨ßōõÆ*8ŲË`đzæž sžĩ‹1ÅĐ7­ąũ o /gk|ŪÕã˙oäŋņáøē‚ātÜĮ ų õ.Æ-3Iˇ˛ƒîAAø ´§ üęĻŠ—Ķîwŋ•GŖ•:M qåĮ˙Ž´3ŠFfO&•WåõÍFäf— CqĪjō]MˇÆKÄéŊåĪåšė|fņ­´Tŗ îPgFc’3ōāfĢø6üÜ#ÚG"„6äØãæÜÁcīŌŗŪGŽđļßeŽøbĐģyĄ‹cpü@¯BdŪUātÃ%ģœ‘ųĶ„õr?<7'ˆt&Šß渏æJātoëž´]6ûDše‹åVæŖÔõüGš;84÷˛°Ũķ–BĢõ$×ŦxwIƒCŌmė"˙–+´ˇ÷š­ęl›#–ÛōŅĻmDtÛWC PŨūÕ! ģšV8FĮjŠi fô^ĩåß Íņ~š;7ņ7?zĻTĮîŠváž(VŠ@Ē:ļŪ¤`6įmdŪm~ÅvôCZ§ø‰æ”aWīWņ"7‚¯(ŲߌROZ‡ádRAā¸xÚ7ķXáךėđ>đæŗ|BGöD§¸ĮķŖ˙vž1‘úĐŖ ß…<Fi8+ĮzÎÖ@ūÄž]ßōÅąųWđhįKÔGũ6¨¯L§‚W=iÛU~”¸_­ Ø(B…2ąîš8üKfĮŧ-üë`˜gzJn~î+Į­tmOQø˛úÕ„ÉiėÛŨH\(ÂāûâŊƒv\dôĨ O=ĒĩņÍ´āôōČüÁĒz/ŖZî œgØũ+T{5#9Ũ÷[Ĩ*°éßŌ¸äqMŨÉúW‘å­ž7ķ îTÍwž)a¤ímZ78“ÉķNJ‘ŒV_…ũÍÕÕŲÔZ[q16â16@ųēg¯GPMVķÄ7RŲo&@žhŠ5*x8ķĀŽŌÆŪâÚÅcēŧ’âEäČĘúqVv–ĮĪīR…9 ˇ5G_FŠIĀcŠb†#ī|´ģĮŨ áϞŸ-ƒ6׃[øŸOđ˙Ä ëëԑ•[ĸW^˙t#*Y]2ŠEøĶŖ¨˙ ĒzühŌū]'ϟŒú+_°Ũm÷JüfŅ1Ÿ˛]nĒņwF:Œs5ĩЍØĢĮã6€~Íu˙|SÆ?CEuM”Æøģá‡mÍo?ü Xž/øl&ՆéWūšTíņ‡Ã`ãmÎOûKPøąáéŦ¤Š4šŋØĢ˙<5 ¤Q“s€ģ~åNßŧ+ũéÛūŲSâ˙†waZįõʞ>.øTŽZIˇzyTŋđˇ|*>ôĶßŖAøąáI!aįLIčžQæ¸ŋxŋFŅ5mRîūg.÷Cev§âī…öîYåŨ˙\8|ZđąÛûųŋīҤo‹>Vn&Īũr4§â߅ĮÚe˙ŋF”|WđŖĻæ]ŋõĖÖuĮÄī 6ŗm:Ī/•œŋ”kQž*øS+›šīÉĻÂ×đ™l}ą‡ũą4Ŗâ§„ä^oŸīBiáixGf ão$˙…4|Tđ¨9ûc˙ߖĒēŋį ŪXKWŦÎp@ōÛąĪĨ]âŸ„ÄJ ëˇūxˇøS˙áixKwüļë‹…4üRđ–3ööëŸõ-ūīøZ^Ųōß7ũųođŖūŸ„ŗ˙͟úâßáTīž&xVâÆâŋbΌōĪSøW!đÛÅÚ7‡íuĩ+)Ĩu)…' dvŽá~(øT`}šŋīË…/ü-/ ?ĶdĀ˙Ļ-ū­ņS€`^žë“S?ájxMKw/ũųjiøĢáU˙–ķ˙Ž&˛îž%xn]rÎî9Ž Q#ũŅã= h/Åŋ Ų’ã¯O+˙¯Lo‹ž†ē$˙Ķ/zFøˇáÆSĩn‹úg˙רÛã‚>ėGū?Ƙ>1čiō‹[˛?ŨãQ?Æ-)âe' ŽÃúÕ-7âō…„vįO™rKnrIūĩ`|gļ'&S˙øČ€M^ŋß˙ëRŒ ŲCr=Ü˙…4üZÔ[…Đ;X˙Joü-}uÛ áĐ{†Ž~Ë\šÕ~%Øjļŋe•ä@cÚGlĩë^,Ũũ‹“´ÆŽ­2‡ØY;€MPđUĖCz-žKQ 1Beķ>9čNŦĪ[ÅŖwuįX,˜RK†W$/ ´vŽŌÎC6nãîŧKÁĪq‘ך˛€ļ}ąN<}h;āT›—~Īüvūôō9ߏø 8ãoÍUīeōŦ%qü+^Aā=2Ë[ņ^§5íœsĻöû˙5zbø_BC‘ĨZ˙ĩō-@˙Ã^ƒ˙ īÃĨEÆ…øwámģ˛mũé‹đßÃķũ›ÚTøyápāļ“zõ˙ÃĪ 7ü _~Æŗfđ†ŋļāt¨ŧŋ,’9ųŋZĶ?<-*,ū?ãM?<+ģūA1~ŋãJŋ ü(ü‚c˙žøŌ?Ão ČŌc˙žøÔđ­|*˸i‹˙}ņŦũoáī†ítזßLU~;sõĢŠđ×ÂŌįũ˜ŋtôúĶ˙áZx_oüƒīņ§/Ão üßņ+OŊŧßãJ~øSËųt´oûhßãMo†ž<˙e¨é˙-üj ŋ‡>ŠÂYLPá RŽ8ú×đĪÃFģ¨Ú•ĸĖŅ:…;ˆÚ9ôŽų>xUN˛ÕŋāGüiá[øT?ü‚Ŗ˙ž›üh?<-ģ?ŲQø˙jü+¯ g#IžûøĐ~x\˛Ąõ<ŸņŦËīxvgN‚=2Ž]Ûן›Š×đČ]"Üį¨+CxÃd1ūÉĩ˙Ī>Ü˙Jž đäQíūĘĩ>Ÿģ§§ƒü8 ¤ZķĪúąÚ¤Đļ4›Bũ2ZxđۊˆqĻZ`gē^üúV‡t-ôļßanH•†Z1ëëŠØFœOƒŋü˛^ôáĻXE¤ zđƒü*TŗĩÛÅŧ@t?(§ũžŧ"AöE8Á~âãé^GãĩKo‰ZTĘŨ|Ŗų7øW{âËxįĐ$2J‘ˆŲ< ˛äp@ëXūÖáūĶ’ÂSiLgļhÆA#’iū+¸1_ĩ›f§ûZãæ­BJŠåüoâ9ü-ĸ5äfm¨­\>7øs Ī‘ē7ų—÷5ĢĄøŖĮ7ēÄŪé^MĢ7ÎūNߖŊ:'ķI˙fŗ5ļ?fUoģškUŋÕ ´ĪŸīš“æÛ÷ŠzôéFÆÛ÷¸ĒšŠŲŖŨaža¯<ø?6ú”?}ÖŊAžī­pž5øƒ†ĨŽÂĘĩę.åOîį§Jæá,øo^ÜiIö_ŧWĘûĸēīxŪ@đē,ņ|ĪfŽŊą÷ž†ąæV“Đgūyũ+d^ģqëAĘÛ¨ū-ËÍ.ÃH„ŊY^!cũŽėOņįZąĒO÷hÁ#'×Ĩ(Ë/ŪúŌ9 ü§šq'ĻjŊčfą™Wû„ĘŧËāŪAÖųĶšŊIƒnįm"‡ĪŪÍ)Ü3ÜúR’Ü*\>në VVū×Ō›+ūą‡ļ1ųVÜ{°=;S˛Ww4/qœž´‡œŽ§ĩ FaÉÅ)Šį“XžOÜ^y?:ŲeØŊZ‚2€öíKŗ dãڔŒ¯¤o”ŗdu¯#øĻŸeņ6‘?mƒŸŖgú×ĻŪ,Ĩ—’&@ŒhĨ‰Į#×5›Ļjš}ū bŽŌxŽÖ,æXŠe3Đ} CŠYßjzŦ–ņMyeGŸ20ĨŸ¯"ļ´Ëtí>Hˇ2ƀdõ8õĢáz/ZO—ŌœpAn'{ -6üĻwŨ–ūí<ÔS;€ŋŪčĩĪøöá­ŧ'wūãnŦŋ„ņ˛xhģ˙}ęî’˙îĶ×+ŋš…!Ņ*Lüԋ÷>jĘͤTģŊb˙ÅZ #ŠÃŠō˙‹Ú€2iļ ûUŸtŸîÕč>)xgOĩŠÍ]Ųc‹nåOję4/i \é×Î?‡ø–ļš ōöĢ\­˛°ųšUųkn3ž8üŋ55Ÿ˜ŅūM+d§÷k3Äŗ@žã'Én áū ēMûnų|ęôĸåžīŪ¯.Ō<#ŠIņmoSƒ÷™ã;įąÅzSlhĖŲĩ—ô¯đ>É>,^5†Ī˛æOģĶíŠrqü5”A>%P?†ßúÖĢ.āęLnãķÅrÃSˆÆãŖ5‰âf'G}­ˇæüëN D›ŋģNŦÛēS"ļߛĢ?+­5†Fsô¨%ÃYKÜ5æ? ë@mu$/ã^­ßúĐr‰ĄŽWëFd‘—å ķV.˛ûu )ąĪœF{ōã[ĄŽÁŽ1ۚ’g‚:cđB;{ͰFįA/ŪĻķ–ēV6‡„šÔŌáąøū•ŗžvmëša-ååK¸†ã¯nŪØ^‡"˜ã#ŋå˙SK“¸.>ĸģé.%˙„lÍnëį5žS-›ok›đŋÛ‰%ķ$žxÕ2Ü`ā¤m=}sZ^%Ö¯´ÆaXcyæSˇ Œãų­?jĒhą\8Q&JąLíl67.{×9+‘Á¤Ry'ĄéLY7&˙⤎ˆFr"Ļ ˙z‘”ŋËü5pífl|ÃĨqŸĻh|(ëũęŋđî+Áöģē7Í]*åJ—Ŋ—Ÿöh õĻ3|YÚLk!¸ī=jíSÍq*økâ­ZŪęæîD…~V?ˆUåđ'†VËėŖN‡güôū*ō†´o|F‚ ŋs#/ËūÉj÷ÄpČģY:ˇĪuf­÷ŧÕâļ#ÁAéH0:S¸q¨ÉņO;p?ŲíXŪ+u‹Ã—ōĶ6ūUĘ|!ãÃw,Ģģtܡá^‰„SƒXÚĪÚ5æĄ0Š5ųU?ŽCčy^Ąâü@¸kÚ=Ŋƒü˛:˙˙iĢĐ<āĢoŲHCyˇŌ¯īfū‚ēß7Ūų{ÖrĘ?á%›åũ?ÖÂ˙w­ņ֑ .}M4rÛwVOˆ×ū$ėßÂqøÖĸ(hW=vŠcgŪā­*DĢ÷yĨN>n”¤Œc5ä}žUí°˙*ō៎ ũq[†ŪŋĄ5ęųČų7 OZB@Îæ 0 Ųéڛ…Û´wīXÚōm›M#.W?m”˛Å/–Ŧ9§|¸Ī­ŠfW>Ƃ}:XēQŲĒęģ›Ŧ ÄžÕ˛H8à '”ÎG¸¤RŖ‘Á4î W™|bEm.ÂOîĘGæøWUkco­ø6Î+¤R¯j„žĐü+–đŦ–¯â[kxmí-į´–Y#rÆāãd~5ÔxĮí‹Ļ ,ŪŲJfĀm¸ūxĪ֟áF‹û<”œ(bœĘĮ=đAÆ+yd;~įJ]į2P-ŊŠw/ŪÜ)ŋ/ɇĨ,ģžõFX™ŋÉčĩįŽ#ūĖ´´ūû×aá8>Īá›D .Rˇ RŸ.)¤ }î”GąI)QäÖf†ęle÷v­ęû•~õxõįŠuŸ xáÆŠ,í§H˙*ˇŨÛ]ĨĪÄ Ágį‹ôsˇw–šŨ^á¸nüqņëRÛyv6í÷ŋŲ+ÛP€ģWgĩfę6ĢfšŨēļ qL}´ĒĘ#*˛í-Å"…U_š°|lʞŋb܈Î+á"xA›ûĶ5wSËŧ2Hßuqü+įŠõm;Åž3’īÄ˙gĶĄfōâ\ô Åz–ãiļŠkg{'@Ē^+cKņŽƒ­_=>ų&›nâOjß(ŸŨZŏūFysÚĶ5´ģ)Øų{{PTĻŖ`̆ū.ÔũĒŖīVVŋå˙eļGņįZqí¨öĨTđ@Ĩ /8Í QTqFāxÛM•‘'Ķų ōo„ŖY×ū˙žzâ¨ÉĮJ1æˇaO!XüŨ$gxÉüƒĐŽdx€[^ĸåqZ؁€:SŽ?„r9¤F?ŨãÅŦųˆĻĪ_.Ŗ6ēée?Ú)˙~é~Í­ąæų=?Õ~›ŦÃŦ%‹5ÅÔOaĢ÷I5§–ģå5ļíĀũß4i¯RˇĐsü>_ãJ-uâĒŋn‹Žŋģ§%ļŊŸøūƒéåĶÍļ¸极ŊO—QKŧcoô›cōô1ö¯2øoûx›YKYĸŠLû—#īúu¯OXĩĀĮmÍļŪÃm7É×|Ā>Õn˙Ļ}ĪūËJ!סĮÍēûųtãoŽüĖ.m÷ŸúgQ5íĖ Ũž?ëRÕ×V‡Nu,%7ŽpCnČÅ^Hŧ@ææßÛ÷g§Lũ{Ķ„Zūė››p;.œ Öųcun}?wCCŽcōpDu–úņO’â Ũqˇ\JzÛkåFoac>_>ŸũzĄ:𸐪]ĮįIKmā(=j}—[Ų‘{ĐĮLk=mˇí(Āė|ąéūŊGöo<ę+´˙Ķ?|ĶžÃŦ2mūŌ\öų(]7UÚÁĩVÁÎÁĮoåú×;ã­:÷ūëš%žipÛ6ŽyoádÍ/ƒ"F<¤Žŋ­cęémg­I_ZfÖC~"OãN$ėŽ⤞WƒgUū&ZĐø|Ą|bWø—uu š¤­Go)psOAƒŠ\c Ö-žˆīą÷V1[yĪŌŽ{SYw ~´†åííHī—ĩdø”ė–ûß4ˆįZ°“äĄÛü4ėŸ›ˇŊ.^Ļ€Sô¤%ˇqԘŲh ÛŅyä˙ €OkĢū˙čõë€pŨÍ ųš˛.|U [ĘĐĪĒZ,ƒ¨ķE_´ŧļŋ€ImsČ{ŖÖĨVÎæíųV_ˆÂcJ[ e8ī ÖR­PÓKÔcžÜ~4ÄSÃŨj|qŒĶ'ƒĀŦ)/‡ũ¨?˙ëVöīn•„ˇ†ŗ¯õũ+K.úöŪ&ęäüĒ;/čúœéžĄm#u\f´˛7är_­axŲ7ø7RÂķåŸB s Ĩy|#y;„‰3ö%j„ˇ7ķŪMsU)U6-3åķ~å?åŨŧĐwm;ŠûÉŌ“uõë7ŪŨ[O’˜F[;? TP´…!s֕ŧ°0W5į_e áØŠšģ Â#𾞘ãĘ^+Sbģ|Ôõ@ĩFoæžŅivėĪËÖą´Äk:ƒģĪŊnmQÎ*5H˙kûÔáÎwPĘ1÷~´ÔeåOJÉņ`é{ūZ'ķ­Q˜ÕĘvö§l!šôŖ˜×ûÔ0 ֕Ŗ ŲÎ*6 ä7 ¯#øt„|HÖĀûŖĖ'ūû¯a(Ĩv×#­x/OÖuø5[‡˜Om´ ōāŽ+¤šH-c/,‹qŒ’큊ņ/kŠãOŲišGīã‹(ŽŋÄĖFOĐbŊ˛Æßėļ6öûšHÂĀUO"˙a܏Uü*ŨĒæÎ[î uî*ĀL °ųzR†ŪÚĖė7P@ĪŪĀ ũæÍajkŗÄcŽåöū•šåüųŨĮĒ:ž›¯¤ŨØK¸$ņ”'ĶŽ x–…âk·zŊî›p‘Ũ@Î7ÜcwfßŌ­xˇâIņ˜úmĢÛÅ&<Ƒų v¯CøyáåŅ<5ķVY.œĖœ¯<`~Ōęq,ēUŌzÄÃô5æŋX+ęņ|Ãū…[.ļą:‡™>ĄäMå-E˜—Ļˆ­tÚsË{áXKŽY-qģÎŪŧtŽGIš5]6Á5î•\RؑS•ĪFPkŅ )äü)ŪZ˙v€Ē‚€¸;ņõ¨ÄgĖ9’œę6U}B_/NũĢË>Dķø‹Wē˙nŊ^æm–˛H?†ŧ˙Â><¸ÖŧGsĻ]AoŖüģ+ĐĘ!/žŧSŠ >,Bšw—÷×vĘ÷vų"OEûՕ¨ēũžÅøŸīVÃ6Ķ‚>ZbûŨi›ŋ{ŗûĩ"Šfb~ëT¤|´ÍÛ+/Ee’K×|ßŊZˆw'ÍLaķS[îˇ÷Šœ>zVRÅģ^iņˆíŌŦcūôõÜčˆbđõ€ßˇ÷KüĒülYYvԋ•5†9ûØĨˆî,Ôđ8ŦM-ˇk:“îųw.+JRY7ˆŠÎŨÛju]ĢōüƏ1ĘQ%ŋ*Ëņ3ˆôĐOBč?Zŋ•e^ŨÍYH Ĩ1Éۆã4å!UBüÕ&ϰ¯đ øŖ­gūšü{ŪŊx>>÷OZÃņˆlŧ7Ļ5ũņĪđĮũįoA^RŠū(^ĘVEļĶšcÛøzG…<§øVäF&ēõ—ÕŊ‡ Ž ztöĒ:áÆ…v?Ø5bŀͭHį÷KüĒFbįø…J Učy§ ÛĨ@ā÷Ĩ cv9ŽZÂjš[ŋëˆüø­Ņš›ļņ\īŽu)´ _Ũ@؛`@ÃĒdã?­pŸ ŧ3§jVŗę÷ņ-ĖūaEY0@āûõŽãÄŅĩ‹ #0Å0O’HĀR¤té\?Â}^îÛ]ŊĐ.&Ũ+2#ƒjõɀxd^ˇųW’ü(CâZߥÆ&ÅtēΉŠ5˙Ųėõ2'-3YHÛ‚y øÎ3]>•HŠŗÉm„Úb-¸Ž8ę+ˆ˛šęÖZuČ- šL†Ņ’BŲ )cĮ~ŊëŌNĪį@ sëڐŌ,€‘ŽÔâFĪ˜ËōV_ˆ$1øvûājāū+,:ŒÆ?ŧ˙zŊ%4o•ĢÉŧIā=^Į\m_Ãŋ3īŪŅ$ŸÅTįÔ>'jP}‘`’-ß+2WSā_6€˙Ú:œŸhÔ[æ ÷ļfŊ Y¤äĩ—3™5ĢtîÛšĢTū:V$ŸîĶH;žJU}Ë÷7R´Ŧ;*38ØÛĮËYžŲöi~oŧõąŧ}ę%æ<Ž´R65‡˙eŠŽüŠZōŋŒRoM2?úk^“Ĩũ‹fŖĒÄŋĘŦG/͡øĒfm´ŨˡåëūÍ "‘ŸīSLĘĢ'G•´ĩįĸ¨?…k›6ąûÔĖĄ~FAjČŋxP]UZ‚BÄĩdx‘‘ôĩ_úhŸÎĩ‘Ņ•v¯ËK¸GzĻåÜ?w–pzTĄ÷­#˛oZō/ŋõŸîŸ7˙Bëہ^xgÅûŠî|Ooo˛Wļ‚ÛS=XäķVtߋ/ĨØEimáՊ׏OĘŽÂįš1˙Čq˙]øW§iZÔô›kížY¸ˆ>ßîäg­?X´ĢĩëûĻūTÍ!Õ´{F~H‰yJē ît4ö`cĩ1v™7“OgŠS–^ĸąuÂĢ>Ÿ&s‰Æ?ÖŲaģßúVWˆ4čĩ ķOs2 čzƒų׍økÄW˙ĩ[;V˛‘­ōBõ ĶrúäWQĢ|`°û ޟi3Ü7Ėā ÕO…>š[û­vō9#2ąey$œ“Íz×Ę#?7jō/‡Œ øĢBŊH?'ëO0”`1šx+´Ũ3ŠķMNōõîä¸˙‰ĨŨĩČ;ƨYXpįƒ^‹irnm’W‰á,9ŽOŧ>¸Š‚ cÆxŖk<štĨũÕ ÁģMY7!ū3Ÿ–ą|k7•á Ų÷+…ø[¨ÃĻh×X.{îܑ×nū'ąŪˆđ\ßēpņM™ˆî?īÛR˙ÂS§īû—÷튋,`‰Ë×6Ŗū­;8ũįû?ģjÍOXɯ†ķ6ĒrĩGŠô’˙~O›ũŠXüWĨÉō“ūø øˇJŨĪõŲK˙ V”îq3üŋėRÉâM3|ãŋũÆĻMâ%ŖØŗgũPiZŪ›ēØÛųų*īü$zPų>Ķ˙ŽPŪ#Ōņ˙;j#â}0??{îü•4^$Ķ$¸ū_ŊO Ō¤-ô-yÅMRÎûPŌã‚T‘V]Í^‘eŽiXÛ'ÚĶ%Ģ+­éŽßņųŗĩR6ˇĻ…ĪÛaĻĮ­éŒœ]Bŋđ:SŦXmĮÛ!cũŨâ„Õtá7p¯¯ĪXú>ŖfˇˇĻYŅwÉÆį1[ÚZ{|ĸōûėS–ūË;žÕũö([ëfQuî˙0ŖíÖ,ŋņķûBļZí)÷…eøŠęĶ˝™ņZĶ‚ę@Ļxˇ˛ÂĻ7Väßŏ÷… ž üĶÅ˙} °ųĨLg?zš'„žb¨ûßxSĖ‘í?ŧ@{t¯$đ[ øˇĒ”eØ|Ū^šæGšˇHšôÜ)’Gm)ŪņÄíūÖ FlôæÛû˜8éōŠgö~œŊmāomĸĻUŠ4XĶhŒc Ŋ0* LĄĶ.“ą‰ŗĶĶéšD´õōÆÉĢČSÃëJHe¸į4 *Ž>\PĮ ŋv‘Xd*ūu‹â ž]Ŧ–åúõąŋ÷d ōĩ”>˜?Z§ĨXjQėŧ´†~27ŽŸ5BßÂĩ›ĖKĩØėĪķ­Õڈ mūTĄ•Ôãhõ¯ đž øˇ}8Üō‚;õÍ{^0Ɣ°5æzÍũžŊy´Sæi/æ/H\ņŽs^‹ ąÎ‘”އ Χ'™Œg§ŌÛtß~› ?z‘#ū3ML'îRũk–ø™.Ī]'÷éŸ -„~ „0ûÕÕ*(œá7-=b†CĖtĮŠ?9ËO÷ŠL0üûŌ:a‚&ŪÛ#ÜŋŌ˛í#üC8[mOģZŸe‡úАXĀŠ-*$ą‡~vG˙|SƟmģ&įøi˙cˇoųcũņUī,­–ÖWōSîU=Ō'Ōâf†6/ũä­&Ķív˙Į˛5BÖ6›ūkx×ūH4Û?;&ŲoûŖM˛c˙m˙r“û6ĮÍĪŲ!ë×bהüLĩˇ_ipE .æū¯R‹I°û ÚCÂāö§GŖéãæû,-ģũŠ{čÚtŠTZÃ˙|T  éŠUZÖo’˜4+lũž_÷joė-/ū|Ąoødi:>Ÿ4×čÖ¨û&Úŋî֘đö›÷žĮ HžŌ˙įÍ(ŌĐî[Dώ‡4Ļ~ĖžôĶáí,/üz"Æŗ5ÍNļŗY!ļÚŪ`_—= 每i’cl›‚ōwSá­3 ÆÛ§mæ”xwN/î?ņãM˙„kNvlĀØé÷øĐžĶMÍŠûƑŧ3ĻÉ˙,›y†,m$øĢfęËų€ãĻ1^Ą'…tö“~ŲīáĨ˙„^†Ŋ˙ŋ†—ūˤ¯›ßķĐĶ[ÖlkĪ‘Čũå"øjÅQŽë“ŸúhĪN* [ũ’SæLp„ķ!úÕ]3DŠīK‚s,ÁŨO !9íųšž<7lĘÃθįūšžŸ—‡Ãpą\Ü\į'ūZ¯ķŠá‹%ÕØ#Ļd ø~Ģū“uÛĖíĶ—ĪøFâŪ§í—[ģūķß?βõ­ZY‰ŨÃåÆUäĪÅh Į,Ũ]/<ÎØĮōĄ<9üū]g’s!īJŪBėéwyíûÎ˙ūēAáČÉ'í—Cųč}1ü¨sŊģ*{=xūTąøiŨŨgœŸ3¯į^mĨÂ4īŒ& ĖGœÃqį9\˙ZöcÆqÁĮ4ŽNÂ:tæ¸ÍnO Ũ\JŅ|đCHūC°É bē-.ÆĘĘÁ› Å ŒÆs̓íZLcj­Ã?=XŪ?ûzŽ1Ltķĩyįř<5ą?‰öWAā8ŋ„íG÷Ģ $ēäy•")Å2T\ŋ~ŖXÜ&ũôôO“edéĐįXŧ›Ũ­Œ0JcKķlJ77S.Úi ¨ŋÄsYÚ¤Ą,.?šNŅ•SJН åŽÅ˙,ŧ53XÁ ——ũãūú×&ßü[lŸj¸Đã[Oúæßwũęô/øÎĪÅvŽņ*tûŅt§8Û^=ņsøûIƒøU–ŊwnQ~ēĩĪäĮæHčąÆģ˜×˜kŌ;÷ĩŅ´÷ŧ+ōŗˇņcĐ NøÄVæ85]5핛nõūÎŊBÎę+Ë8Ž!•w+U”Ũ†ŦŸ2ûūģĩmœ€Æ˜]ÔîJüÔ6~oJfOE_˜VŠUΟÜįÎEíëZČ]UW×>{ 4–€Ûũęä4ßŲę>,›CˇŲ—8Ÿŗbēâ\ģūMHŦJîÛÍxŒÚģIũ+؝ąˇŌ“qŲüéû€âšNOĘŊ{Ķ~îĸē'ė’˙¸OéYžfm ĢŽš?k` Âõõ'ûŋ&ņ€;õ¤pĀtϰ;¸įéXŪ%Üty\ö#ô#Ūļ-˜=´lē3OqČäfœX†ÆßʙæÚƝÎü‘ĮaJī|Ŋ+Į¯Ë[ühļ*1ždã昝a-ÎJsŌ“qük†ņ6Ą(Ôî-fÔÆZ5xƒ Œƒ¸zãĻ5Ôhō3čļčūWî—)éĀõ­%Ü2ÛzÔ1Ģėß?TŠņúz ÅF›ëĖ~0?ú%Œߞģŋ  đíˆõŽĩPĘũڑzUiŠĘŠSđ:U÷{ņęĘŅ—}Íã˙ˇ[@œ{Ķīoš™´‰~PiČ>}ô¤á‹vŦũ^Bš\ŋŨŲV,]:-ŧü”]ŋ“e+'ŪTfÛ^Aā?ÍĒxÂ÷VÖlßlOē/5?ˆũk×î↿Ņĸ•7/ŨÛ^/āG[ŠVöoû­Í^āšvŧƍį|OĶ—ûŦĩëėĄÂüßvšOˆ1Ū?…§ƒM‰ä¸“åũ×ŪÛŪŗ~xY4_%ÅåŽÛé›įķæÛéÍQøĩĻiãà vbE¸ ̝š­/„âwđd-3n]ÅWwĨw,ÍąļĨcxt„KŊß{ĪjŨĪÍQ#.æVûÕ(ĶHP>õ | ÆąüE" =įĸqøÖŸœËįüjG9įō¯)ņnĄãëBúÂÂĘU°Ũą$…fO­rŋ âžßâPÜĻ$ûÕš9Å}܎™ĄA=:WŽhMå|jŊÄY˙•{)탏Zŋ{ŠMۆÚc9æų})c?)%š¨įeh%x*EexiĘč‘cą ~fˇ6üߍ1Sånô?PĀķ͊pRē÷¤ÎÔĪŊex?âKwķz§5rÅĘØ[°åVÕÁÅ!`9÷¤áFgÔõ¤čãjĘ1h•ãž.?eøŗ§ÉššxŽO×뀂­Üô5Ōl|ščkƒņÍėëyKyBŸ5¤x9õVÚk¯ŅN‰jDRÅû°<š›įZŅVf^˜>žÔ›ŌHéŒÁčĖgũōÔš%ūhëĘ>-H_QĶĄ˙oå¯KŅHMÔ÷aZļĩˆū~ “æT/´|‰OŪY2#øiūGŦŨ*ŲI+}ĢdļŪŊ(ΚHŖ ķĶ8gߜ¯ŨÛYÚŲΔé÷~uZŊh YÄŧ}Ɯ“æĒ7w–vĪ5ĖŅÁ_33גøĢâŒúŗļ—á›g•¤Üŋhū/ø oü1đEƂ˛jZ—ü~Ü•ēĻŊr_—˙€×Žø‰<ߌCvī™wWŗpŖÚ ‘K7NkÅíŽd*ø{ū>÷.ãūÍx‰á%MFøKĖ–ģšUûģ}ą^õዋ ­ĘM56[ÚûŧVŦßę›ũßģXžųĸšoâķŪˇ˛vîo–˜ŠüŨiŌ(ø !]Āŧ:Ō€>õbxGØ!ųöūų9ük[ÉZßN@Ú8ϐ6ļ:ô¯ đvã Įũv›úך2ƒĀZU ˇæë^;ŖĮ˙ēī?;ņøW°l ōzRpÛžZx`˟JcîšÅ8 baÚŖš-ņ°ėsY^ҏ\âWÆß­mBņQI˜Ûˇm§í @ëJW+Ž‚Ŗ`Höėk;_´[ŊŊJJ—LËé6Ä.sįđĢh ĸg‚)Ė>ęü¸4ĸ2­ĮJRĄ°ÃƒMe sŽH"ŧoâ"˜~!ir×3ų>+Ų#bŅ+ƒŽ?*kÃæzâŗĩ MÕ}ĒÚ9$Q…“ŖŖjí…ĒYŲ¤ŧ’"GÜߝZGŌĢĮ´AæSßäũŠl„“å­ ëå§Jō/ˆîĶøÃJƒīūōŊfØ$Z| *ÔäÉs÷OđĶžIņP˛‡‘7˙ß42ŋ${j;ņÚĖvŸíUm=ēlgũæ­ā|˙ LŊ˜}*€>ZaŒ‘˙˛ÖWˆU…Šōūg­×b!Ų÷R›w ŽŸ5ÄΞ8“sWˆE¯ņWÄ›ėúLOÆßē‹ôūõzž‡āíÃvū]¤ŧÛķL˙3=t Cœ@¯Ô?{ņ–/ö]kŲ/?ÄÕÁüBņnĨádĩk–FųŲžję´Gû_EĩŊ,›ĨMÍŗûÕÎ|N[_øCnZpžėYųžjËø6“7…§f˙UæļĘôY”ˆ›oûYŦ œ˙M[ķÍm°íũÚSĢQąYš…L SaČŦŸ+5„JüļO›ņ­ŒoEÛMĀųWwÍRĩkÃŧ$vüdš-˙=Ļãķ¯q@jS…zŧoMų~8Ü|ßōŅŋôö%VËeŠ[#üi›ûßZvH?{ĒĮ8"ĸdbŦ+#ä‹î<÷ãņõ­Ą¸ôû´Ã÷Y|ĘSģvÕjRÄũßʔį¯~â¨ęČ_IšNÆÅ7D|č–dĪ%ū^ÕyF NmÄnÚŧR‚å=čÃāķŠ`,OEĪoį^Eņcpņ“/ˌuú7˙^Ŋny-afÛŊ”ĖsRorxv4Đ~\Ÿņĸ?5FĶˇÚ€d¨â…VBĒŲžX|å9ĨVžGĪņSČb>W¯ņœ‚‰–1÷Ŋv7EøžTõŠ“iğ-mųÜ´U\r?ÚĄŪ4]ėâĒjeÁÜҤm]6ęâŒpĀüÔõGŊ e#wJÖ}ĮøiĀ;V'ˆųvÉælŨ2Öē  ģŠįüeĻ^ëž’ÂÉãIfūũyeŋYG˛ÛRŠ$ūęHËRˇÃ¯įSũßßĩuūđŋ‰4}BiõŊCÍVMĒģ÷WĄÆ+Æ#?iøÎíūŨ{+séŪš˙ør/hĪfíĩ—æI?Ú¯-ŗĶž xEŪÁ[f—oĖ´ŖÂ5ņô'^•āŗO›˙@+Ø4m*ÛDĶ`Ķílp¯zãˆ_økÃíˇJÜG +|ŋle‚ĒúŅbņT˜Ü9¤ÎÕäŅÃ§Ė+ęqä˙ËEūuފvŽîƒûÔ¤l¤žĶĩx˙†ô=N‹ßMc2Û4’°—oËÍ{ sëQ€JˇÍķWZnã|›Ÿ8˙č5ėdōHühlˆØÍ1‡î†îŊMIĶo­Ã˙ÄŌ:–#ĐvŦŠžVč—ųëųÖę8Wˇz@Wī*îĨ šwÔæč8įĐR=}˙:­|žnŸp:|úŠĢ cû؆Ũ…Æ{u­1ÉŨÛRķˇ=éĨđ2zö§$€ËŠ7|Ø-ŌŧŸãAntŠērÃųW§iRųÚMŦ˜ûĐŠũ*Át3֔Į¨Ĩ<&G&‘;‰éž*$ߎ3IÆUSÍԊz#o˙ŲĒWp8¯,ņwÃÍ[Ä˙ö­ÄP˙v°áŒĸ8Mc?öŅŠŸđ­ŧmü§ūDj|>ņúS?öŌ™˙7Ä/ūBr˙āE"ø+â&ãūOûųDžø’Ęč×ō:{ÉQÂ1ņ"‘.äD_úiS âd:]\ŊæS“Iø§ŗäģ¸ų˙éĸĶN™ņIúûûøĩ2XüSū¸˙ŋ‹Lōž*Áüw÷ņj m~'ΎÎûC´_u~Zœ?ÅC×íøí1§øĻ‡î\ãĩ*^üTDû—÷íi­Ē|S9†ûáiËŦ|Q]˙¸ŸūũĢTMŽüP˙Ÿi˙īÂÖDV>7ļÕßWM6ļˇü´ōëyüOņ1W›7˙ŋ+LÅĶæû üßôėŋ%H|[ņ+ūĪūË}šøLž#æÅ˙đxß⠟›L˙ÉcCx÷Įûvļ“÷ŋéØÕ[?xæĘßĘ]3÷{ū=ŪŠŋácøå>_ė­Ë˙^Ƒ~&xÕæŌōYŠã⌗Ÿėt˙ĀwĨ<[ĩöRߗĨ_ŠŪ'OŊ¤'ũđõWPøâøV94ĒŦ­ōŖüØĢŋđˇõôNtd˙ž #|cÖŲ˛4d__ŋNã.¨ŋ{GOÖĨ?õ3ũŽŸ­'ü.̰˙6í÷˙úÕ2ükœ}ũ˙"ŸđŽ8xÉׯÍâFąufmŪJˇļ:×dŋƒ3įFûī˙­@øÕlļ“/ũô?¤_Vėßō —ũß7˙­RV˜įJ—>ģ…đētōȨ̇OØ}áN?ôÕÛ˙˝ßī•SLø¯ĻZ Ÿ2ÂsæĖî6ãåŨZIņEY75…ÉŨü\R§Æ]yû%ß?ėņ§˙ÂæĐļŽmn˙ī‘ū4åøĮ –æŪįđQū4­ņ‡@Ãenx˙Ļ~˙Zkü^đüÖīۑ•Æ|ŋ_ÆĢčßô+ .;yūŌ]22ąņëZKņwÅx7ßģ¤_‹^'“pŖŋîÍ?ūŋ†$¸Æį™Š?ákx_ ųķcŋîM5~*ø`üžtĀ㯖z×ņŚW‰ĸ˛tÎÆ;ƒÆGŊzׇŋ†4דlœ˙ĀEjŠũi īKŗ=ų¤Î9ėzSHIböĻ@뤪˙>I_ÅM,yŒ|ũqRŒ˜ū~´esĮŪ¨\ųŋÛ§áqōSЏjFÁû-8a‡û5Å͞Ŗîß4ąåãųģŌ°WĒTüŒ“ĐSxųą÷¨$˙z‘7šéAwVÃco­+|Ã4ģBļúB_zvå"žGŨ¤]ģŠ•ĨÎvĶ6đŲT¤ l•L÷§)\c FÔ%”ĒmŖĘƒûŠMÄĘŋģJFŠ6ëO’š°@~S?÷Å)ˇˆƒû¤˙ž§ų÷‹ūøÅ´ˇĪ6é˙|Šiĩļ1´ˆmúS~ÁhÃū=ĸ˙ž)ŗėvĮŦXõÚ)Ląáœ˙ ĻLĮüxÛˇüRKÎͧ[ķ˙L…3ūũ%‡:u¯ũúx{Gy0tģ_ŨđĻÂ;ĸī˙]ĻËū¨…Âē˙Ė2×ū™Š…<>Ũt‹_›ū™Šađ‡NŅũ‘k‘˙LÅFūđîäŲŧ÷ōÅ)đW†Ųv˙dÛsūÍ4øÃ$˙Č&ÛéļŖ“Ā^)ƓOû5ø}áœdéãŋZCđëÃäßNƚßŧ,Čŋņ-öƕžø]šūĖQ˙?ãQ˙Âĩđ¸?ō__ŧƓūŸ†3Ÿ°ãĮˇãM˙…aá†ÜM›ßÃHŋ ŧ3Ž-[ß÷‡×4ŸđĢü29ûd˙ĶCū4õøcápGú+q×÷†ē›+(lŦᴄb(P"/°éR˛á÷0ĩ4|ÍÃdĶŲK(]ÜûTA‡éÅ5  7†”IëI +{÷âj‘˙ŠŖÁŠ]̎e#/ËÃí¨™_vĖ|•KŠ•G”>Ož—į˙Ļ•:œŠnÕfųēĐ2SRnR¯Šj‡n´,„#šéRĘníLbŨWūJŋũÚ6Ūž[åÍ1Nō¯í÷i_iŽå˙z•WhĮūÉMoēģ_å§G—ų˙*k/÷jE%ŨBŽ:`P[Š”(ÅEü-O6cōũę†3÷ˇ/Ëڟ0ũģSĀfäw§îõ¨ĻÎVšÜm]ÜņS9ÛķģéKŸ—vî”Ā ÄßĨ,yÂîü)[*Ŗ{Ķ 0ŨķguFÎËģÂÜTĀ˙uíB}Õūí.NüˇáAÚãôĨBJüßJŽf‘yíO](<’Ŗ§­;ūYĶ{I¸*āúPuÎėSoQÜŌ–€üiíÜ;Ō3˛/ŋjj&cģëšt `úšnöŪÄĢR Āåx\š\ū÷=w=¨BĘė6úR0wŨü†Ąr„G“ūõfø–ōįOđõÍ͔›es?Á\­œŪ*šŧŽĪûlyĪũūOÉZRéŪ0‰ ˙lÚü˙ôʤ[?D<´Ô,ūŲÔWŽwƟhą˙ŋtŲŽ'ņ(ëáY?īúÖ|Ū?Õ-¯a´—Ã7tŋę×ĖZŅOkģū ^ßÅώŒu…øZķūū-'ü%úĒ>?áŋ˙ĮiįÅ÷ȟō,ßī˙€Ô3xŪęÖÛÍšđæ§I÷™‘ho¤K˙Ė•7Fŋ.įŠnl ęĒ}ԜŪ7‘U[ûTĪÜŌ?ŽƒĒ˙\úôņã… ĸjË˙l*ž!XŨ+Ŧ:^Ŗ&ÖÚÃÉŠ#ņíšN“Ē{Ŗ59ž!éņŸOÕũģ56/ˆ:^ëEKvÕŠ_â–ÛPU÷ļjĩaã}úí,ÃÜC4§˛Â˓éščō›7n1œæ€Ē,F=iUTŽW€iGlVVĄŽiÚ{A ÷QŦ—QÃ¯¯,¨“ÖœĖ­Å e“rįéOf¯ÍéB:‘ē0gḧ3ĸãuFUvõų•ēĶžEC’>†å…õÍ8€~füŠ@Å7pf'?wĩ) ĩüé ŅÍ(īĪ=)7ŋŨĨ|lëĪ­3!ŽOAŌž1ˇånŖkcŊ9qÃŊ3hë’?ũTŦĄ“Ļi26īÆ;}ęb¨Ų¸7"ž@'¯jFU(Aā†œ¨3ģ=) `œ“Í4GOŸøĒ!ƒĖąė…ŽwĮ“mĐ@^'j4ë öņ:‡ŲŧģdļōÆųs];3ų9QOQŗ‚*!´›ÆJ?ZĖאGĸ_• ?—ōցá˙ŠzÜŋûõŌŠũįŲO\‡?Ũ ĒųtnÉõūíyÄ7š}ŊūŋsĒĮž˙sīī­?­ŗÃ}=ž<ۉ7˜’=‹učJ7j Ũąũę2sžMĩĮj€ˇÄ +ođŖWeŊžũH>ëPWxÃ}ÚSĩ+Ƨū)k¯öНū=\îĩol.t‰­ūÎŌŖĮį/Ū‘ëŊDŒ((´­Í+6íûԏ´Ģģ÷ĢđK*[ęRŋŨûT›ššu=KÄĶŧ:Ë+;[Ptų™ŋØĻOiō&ûÛĢÛÉŋŠIf? x2{ß蚭պ rŋ˜ŋ­\ŌüC$÷ÍĨjöémŠ/MßrU˙fĩõ[.ídšä72erÛ@įųū´āŗļõ—íW$`§ę*ˇ—2Ė.€ĮŽy§2Üĩļų8˙>õV;=KPŒŨ[$†Y°čAjˇŽßļ›Ĩ]^D›šgųēgÆxÄŽúô0Ũjo=Ŧņũų-ö&ūE5ÔëڝŎ“q&š‰5Ú/ ŧa}ÍZŅo ۃe=çŸ,*Íõ"ąžßĒę÷wŲf-mähˇČģĖÄuü*„~'Ô5C’[ÛŨ2Éö‰&ä&ÆÛĀ÷­kŗŪŪ_iŗÉ ķŲ˛ūú€˙…u1āÆŋ)hZLĸũÚwŒ}j2 K“Nkį֐íōذão"Aû¸Ÿ(ĮËÕiģą'ˇjsôŖ`Č'Šęi7{SļŒPG#¸ô¤Āķ>”‡'¯NiÍČŖ°Ļ,|í4ĄB)ÎėzŌ,|ŗ`Đ¨ģŗžhÁ^ģ°zT>dOõ”å€`ŋŊrž8eû%œߑ+Šĩ ÖņNØęČ؊põĮ4cą|Jâ?Ūúg÷ę? ‰á[8Ûūyķ[$ǧ2S˛Ŧŧ|õũŗ˙€SŲ‚Åķ˙Ī:å<$‰=Îŗ+ĮŧŊĮŨzéŌŽŨ‘NÅ˙ži˙yū¯įĢ(s#exTų{×rsņÎ3ō…‡uv*ŖTlöĻ+gũšvōņ˙§rĢũæŽgÆå—Ãīŗøô*Õĩąˇ1%ÁļŒ\2.X}ęŧžŋuŋģO,¨”Æ?&äû´˛˛ųl?īĒō{)ež´ūĉö›íBO7g÷Zõ+;l-âˇļMÆģUjYķŠ6ļ6oŽÅZ9žĶEůËykûč_øŋŨĢsíÕ´›‘r˛Æŗ÷đ6ūĻ›oköģĖz}ĢP“öĸTdãŒũ*†¤—RHŊ>ĪĪ'­M ŗˇģ°:UMĘûlÛ~÷”Ŋ~­QøĢMēÔ4Ÿ.Õ|æŖŧ-ōŦŠ:Æ˛ĸŌĩ-bâŌKûXllm˜2[ÆûžB:dⴛA´ļ´žûļۙãe'q;‰úÔZ†­%ĶŦ–ú ×PBŠ>rŊąŦ5ĩÍ"ŌM2 +{ųŽŅÜo1''éDú'ö|VpÜéī¨ÛĸīúŔōIéÁĢŪŅe˛¸ēÔ&ŗûŸōÅlŧ˜Đzûœ×X/ĖßîĶ[åųG÷¸Ĩl¸ĘuŨH# Ë}īZsH#ĩ6?ŧÔÉrËģî˙>OĘŨę@g=¸¤ģr°ĨYņϜ0ų[4Šōŗ/j~Ā{ĶmPGZEnr9īHėĮJpČ]ŦاnŽM4gæÃséOV HčéMP@ę:Ô"ũŖîõ~”ÛggI71?S\ŋžæ˙]+Ž%°ÛĮԟM˙–B›7úôŦO3Â/yķõ~ĩkÂŋō-i˙õίKĐũj+vmįæ?<˙ĮáúÔōĒzã| íöQˇŪ\ķ]&æūņüęf˙[V—ũMU‘›b|ĮķŽF?›âl;š˙Eī]Ŧ_ōŌŖ‰™žķõ5"ũßø"}߯šŋ˙Č/úęĩŋjĮû5[';:͇ßJˆŗ|Ŗ'qš|ŒÁö‚@ôĨr_÷kÉŧ˙#Ŧ_Iŋô*õ–c¸r:I:Ŋ1ŊOįVcį9į§ZɃū@q˙×ūbŦØË?ĮúÕų}˙>”É˙ä.ßįŊ\Ē7üÉ˙\×ųĩnIĐ}iĒÅû´˛pxãæíô¤‹ælôŠ"ũâåēúŽ)§‚¸ã-Î;Ͱ>n/ø éøįJßuiũ_üמøß[Ô´ŲŦūĮw$;ūöÜsõÍvwŗÉŒfG"A!ŊëŒđ~ŋĒjWĪåÛJƒ8WŽ=…f¯Š5Ÿˇų_mo/Ė?.Å˙ í5›ûĢ]*IĄ”¤ƒŖ`uĻxWPēŋŌ|ÛŠŒ’n1vöĒŸÚ—ŋÛWÚËãåĀ÷ĢÚåõÍąŒÃ.Ōzœ[v˛<–ĒėrƤnqži˙Ā*1֕š#5W͓ûHG¸ėĪJ¸?­+ôĢÔũj"N=ë˙Ųleptonica-1.86.0/prog/warper_reg.c000066400000000000000000000110411506303110300170210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * warper_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void DisplayResult(PIXA *pixac, PIX **ppixd, l_int32 newline); static void DisplayCaptcha(PIXA *pixac, PIX *pixs, l_int32 nterms, l_uint32 seed, l_int32 newline); static const l_int32 size = 4; static const l_float32 xmag[] = {3.0f, 4.0f, 5.0f, 7.0f}; static const l_float32 ymag[] = {5.0f, 6.0f, 8.0f, 10.0f}; static const l_float32 xfreq[] = {0.11f, 0.10f, 0.10f, 0.12f}; static const l_float32 yfreq[] = {0.11f, 0.13f, 0.13f, 0.15f}; static const l_int32 nx[] = {4, 3, 2, 1}; static const l_int32 ny[] = {4, 3, 2, 1}; int main(int argc, char **argv) { l_int32 i, k, newline; PIX *pixs, *pixt, *pixg, *pixd; PIXA *pixac; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-word.tif"); pixt = pixAddBorder(pixs, 25, 0); pixg = pixConvertTo8(pixt, 0); for (k = 0; k < size; k++) { pixac = pixaCreate(0); for (i = 0; i < 50; i++) { pixd = pixRandomHarmonicWarp(pixg, xmag[k], ymag[k], xfreq[k], yfreq[k], nx[k], ny[k], 7 * i, 255); newline = (i % 10 == 0) ? 1 : 0; DisplayResult(pixac, &pixd, newline); } pixd = pixaDisplayTiledInColumns(pixac, 10, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixaDestroy(&pixac); pixDestroy(&pixd); } pixDestroy(&pixt); pixDestroy(&pixg); for (k = 1; k <= 4; k++) { pixac = pixaCreate(0); for (i = 0; i < 50; i++) { newline = (i % 10 == 0) ? 1 : 0; DisplayCaptcha(pixac, pixs, k, 7 * i, newline); } pixd = pixaDisplayTiledInColumns(pixac, 10, 1.0, 20, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixaDestroy(&pixac); pixDestroy(&pixd); } pixDestroy(&pixs); return regTestCleanup(rp); } static void DisplayResult(PIXA *pixac, PIX **ppixd, l_int32 newline) { l_uint32 color; PIX *pix1; color = 0; color = ((rand() >> 16) & 0xff) << L_RED_SHIFT | ((rand() >> 16) & 0xff) << L_GREEN_SHIFT | ((rand() >> 16) & 0xff) << L_BLUE_SHIFT; pix1 = pixColorizeGray(*ppixd, color, 0); pixaAddPix(pixac, pix1, L_INSERT); pixDestroy(ppixd); return; } static void DisplayCaptcha(PIXA *pixac, PIX *pixs, l_int32 nterms, l_uint32 seed, l_int32 newline) { l_uint32 color; PIX *pixd; color = 0; color = ((rand() >> 16) & 0xff) << L_RED_SHIFT | ((rand() >> 16) & 0xff) << L_GREEN_SHIFT | ((rand() >> 16) & 0xff) << L_BLUE_SHIFT; pixd = pixSimpleCaptcha(pixs, 25, nterms, seed, color, 0); pixaAddPix(pixac, pixd, L_INSERT); return; } leptonica-1.86.0/prog/warpertest.c000066400000000000000000000232201506303110300170660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * warpertest.c * * Tests stereoscopic warp and associated shear and stretching functions. * * Puts output to both a tiled image and pdf. The pdf is useful for * visualizing the difference between sampling and interpolation. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static const char *opstr[3] = {"", "interpolated", "sampled"}; static const char *dirstr[3] = {"", "to left", "to right"}; #define RUN_WARP 1 #define RUN_QUAD_VERT_SHEAR 1 #define RUN_LIN_HORIZ_STRETCH 1 #define RUN_QUAD_HORIZ_STRETCH 1 #define RUN_HORIZ_SHEAR 1 #define RUN_VERT_SHEAR 1 int main(int argc, char **argv) { char buf[256]; l_int32 w, h, i, j, k, index, op, dir, stretch; l_float32 del, angle, angledeg; BOX *box; L_BMF *bmf; PIX *pixs, *pix1, *pix2, *pixd; PIXA *pixa; if (argc != 1) return ERROR_INT("syntax: warpertest", __func__, 1); setLeptDebugOK(1); lept_mkdir("lept/warp"); bmf = bmfCreate(NULL, 6); /* -------- Stereoscopic warping --------------*/ #if RUN_WARP pixs = pixRead("german.png"); pixGetDimensions(pixs, &w, &h, NULL); pixa = pixaCreate(50); for (i = 0; i < 50; i++) { /* need to test > 2 widths ! */ j = 7 * i; box = boxCreate(0, 0, w - j, h - j); pix1 = pixClipRectangle(pixs, box, NULL); pixd = pixWarpStereoscopic(pix1, 15, 22, 8, 30, -20, 1); pixSetChromaSampling(pixd, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); boxDestroy(&box); } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "warp.pdf", "/tmp/lept/warp/warp.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2000, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/warp.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif /* -------- Quadratic Vertical Shear --------------*/ #if RUN_QUAD_VERT_SHEAR pixs = pixCreate(501, 501, 32); pixGetDimensions(pixs, &w, &h, NULL); pixSetAll(pixs); pixRenderLineArb(pixs, 0, 30, 500, 30, 5, 0, 0, 255); pixRenderLineArb(pixs, 0, 110, 500, 110, 5, 0, 255, 0); pixRenderLineArb(pixs, 0, 190, 500, 190, 5, 0, 255, 255); pixRenderLineArb(pixs, 0, 270, 500, 270, 5, 255, 0, 0); pixRenderLineArb(pixs, 0, 360, 500, 360, 5, 255, 0, 255); pixRenderLineArb(pixs, 0, 450, 500, 450, 5, 255, 255, 0); pixa = pixaCreate(50); for (i = 0; i < 50; i++) { j = 3 * i; dir = ((i / 2) & 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; box = boxCreate(0, 0, w - j, h - j); pix1 = pixClipRectangle(pixs, box, NULL); pix2 = pixQuadraticVShear(pix1, dir, 60, -20, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "quad_vshear.pdf", "/tmp/lept/warp/quad_vshear.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2000, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/quad_vshear.jpg", pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif /* -------- Linear Horizontal stretching --------------*/ #if RUN_LIN_HORIZ_STRETCH pixs = pixRead("german.png"); pixa = pixaCreate(50); for (k = 0; k < 2; k++) { for (i = 0; i < 25; i++) { index = 25 * k + i; stretch = 10 + 4 * i; if (k == 0) stretch = -stretch; dir = (k == 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; pix1 = pixStretchHorizontal(pixs, dir, L_LINEAR_WARP, stretch, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); } } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "linear_hstretch.pdf", "/tmp/lept/warp/linear_hstretch.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/linear_hstretch.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif /* -------- Quadratic Horizontal stretching --------------*/ #if RUN_QUAD_HORIZ_STRETCH pixs = pixRead("german.png"); pixa = pixaCreate(50); for (k = 0; k < 2; k++) { for (i = 0; i < 25; i++) { index = 25 * k + i; stretch = 10 + 4 * i; if (k == 0) stretch = -stretch; dir = (k == 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; pix1 = pixStretchHorizontal(pixs, dir, L_QUADRATIC_WARP, stretch, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); } } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "quad_hstretch.pdf", "/tmp/lept/warp/quad_hstretch.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/quad_hstretch.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif /* -------- Horizontal Shear --------------*/ #if RUN_HORIZ_SHEAR pixs = pixRead("german.png"); pixGetDimensions(pixs, &w, &h, NULL); pixa = pixaCreate(50); for (i = 0; i < 25; i++) { del = 0.2 / 12.; angle = -0.2 + (i - (i & 1)) * del; angledeg = 180. * angle / 3.14159265; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; if (op == L_SAMPLED) pix1 = pixHShear(NULL, pixs, h / 2, angle, L_BRING_IN_WHITE); else pix1 = pixHShearLI(pixs, h / 2, angle, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%6.2f degree, %s", angledeg, opstr[op]); pixd = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "hshear.pdf", "/tmp/lept/warp/hshear.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/hshear.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif /* -------- Vertical Shear --------------*/ #if RUN_VERT_SHEAR pixs = pixRead("german.png"); pixGetDimensions(pixs, &w, &h, NULL); pixa = pixaCreate(50); for (i = 0; i < 25; i++) { del = 0.2 / 12.; angle = -0.2 + (i - (i & 1)) * del; angledeg = 180. * angle / 3.14159265; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; if (op == L_SAMPLED) pix1 = pixVShear(NULL, pixs, w / 2, angle, L_BRING_IN_WHITE); else pix1 = pixVShearLI(pixs, w / 2, angle, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%6.2f degree, %s", angledeg, opstr[op]); pixd = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pix1); } pixDestroy(&pixs); pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "vshear.pdf", "/tmp/lept/warp/vshear.pdf"); pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 1.0, 0, 20, 2); pixWrite("/tmp/lept/warp/vshear.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); #endif bmfDestroy(&bmf); return 0; } leptonica-1.86.0/prog/watershed_reg.c000066400000000000000000000130041506303110300175100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * watershed_reg.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" void DoWatershed(L_REGPARAMS *rp, PIX *pixs); int main(int argc, char **argv) { l_int32 i, j; l_float32 f; PIX *pix1, *pix2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix1 = pixCreate(500, 500, 8); pix2 = pixCreate(500, 500, 8); for (i = 0; i < 500; i++) { for (j = 0; j < 500; j++) { f = 128.0 + 26.3 * sin(0.0438 * (l_float32)i); f += 33.4 * cos(0.0712 * (l_float32)i); f += 18.6 * sin(0.0561 * (l_float32)j); f += 23.6 * cos(0.0327 * (l_float32)j); pixSetPixel(pix1, j, i, (l_int32)f); f = 128.0 + 26.3 * sin(0.0238 * (l_float32)i); f += 33.4 * cos(0.0312 * (l_float32)i); f += 18.6 * sin(0.0261 * (l_float32)j); f += 23.6 * cos(0.0207 * (l_float32)j); pixSetPixel(pix2, j, i, (l_int32)f); } } DoWatershed(rp, pix1); /* 0 - 11 */ DoWatershed(rp, pix2); /* 12 - 23 */ pixDestroy(&pix1); pixDestroy(&pix2); return regTestCleanup(rp); } void DoWatershed(L_REGPARAMS *rp, PIX *pixs) { l_uint8 *data; size_t size; l_int32 w, h, empty; l_uint32 redval, greenval; L_WSHED *wshed; PIX *pixc, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; PIXA *pixa; PTA *pta; /* Find local extrema */ pixa = pixaCreate(0); pixGetDimensions(pixs, &w, &h, NULL); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 0 */ pixaAddPix(pixa, pixs, L_COPY); startTimer(); pixLocalExtrema(pixs, 0, 0, &pix1, &pix2); lept_stderr("Time for extrema: %7.3f\n", stopTimer()); pixSetOrClearBorder(pix1, 2, 2, 2, 2, PIX_CLR); composeRGBPixel(255, 0, 0, &redval); composeRGBPixel(0, 255, 0, &greenval); pixc = pixConvertTo32(pixs); pixPaintThroughMask(pixc, pix2, 0, 0, greenval); pixPaintThroughMask(pixc, pix1, 0, 0, redval); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 1 */ pixaAddPix(pixa, pixc, L_INSERT); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixaAddPix(pixa, pix1, L_COPY); /* Generate seeds for watershed */ pixSelectMinInConnComp(pixs, pix1, &pta, NULL); pix3 = pixGenerateFromPta(pta, w, h); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ pixaAddPix(pixa, pix3, L_COPY); pix4 = pixConvertTo32(pixs); pixPaintThroughMask(pix4, pix3, 0, 0, greenval); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixaAddPix(pixa, pix4, L_COPY); pix5 = pixRemoveSeededComponents(NULL, pix3, pix1, 8, 2); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ pixaAddPix(pixa, pix5, L_COPY); pixZero(pix5, &empty); regTestCompareValues(rp, 1, empty, 0.0); /* 6 */ /* Make and display watershed */ wshed = wshedCreate(pixs, pix3, 10, 0); startTimer(); wshedApply(wshed); lept_stderr("Time for wshed: %7.3f\n", stopTimer()); pix6 = pixaDisplayRandomCmap(wshed->pixad, w, h); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 7 */ pixaAddPix(pixa, pix6, L_COPY); numaWriteMem(&data, &size, wshed->nalevels); regTestWriteDataAndCheck(rp, data, size, "na"); /* 8 */ pix7 = wshedRenderFill(wshed); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 9 */ pixaAddPix(pixa, pix7, L_COPY); pix8 = wshedRenderColors(wshed); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 10 */ pixaAddPix(pixa, pix8, L_COPY); wshedDestroy(&wshed); pix9 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 20, 0); regTestWritePixAndCheck(rp, pix9, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix9, 100, 100, NULL, rp->display); lept_free(data); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixaDestroy(&pixa); ptaDestroy(&pta); } leptonica-1.86.0/prog/weasel-113c.png000066400000000000000000000046461506303110300171700ustar00rootroot00000000000000‰PNG  IHDRRI™ãņSPLTE$!99&!1)%$#))11)!1)151$544BRZ!F6%F91R9)kczB9BIG7RB)VE2RR9cJ5eR7sZ9IIFRJJURGUUUZcciXFcVRsZBccZxcHscR{sZffewwvˆ—„1!ĒŧˆjIŒsJŒsR”sJ™wTˆ{s”{cĨ{Z΄„{œ„kœ„s§…Ÿc­”sĩŒcģ”hƛkƜs†††”Œ„””Œš™™œœĨœĨĨǜŒĨœš¨ĨœŊ­œĒĒĒ­­ĩ­ĩ­­ĩĩĩ­­ĩ­ĩĩĩ­ļļļŊŊÆŊÆŊÎŊĨÆŊģÆŊÆÆÆŊįÖŊÉÉÉÎÎÖÖÎÖÖÖÎŲŲŲŪŪįįŪŪįįŪëëëīī÷ī÷īī÷÷÷īī÷÷īũũũJˆ,œ pHYsb&2ųIDATxœĩ˜ũ[ÛÖĮO5ߐÍŗ’Š1n\%åe˜Ff3ŗ^2‘Č¸0ĘÔU.ÎÖč˙˙iįŪ+ëõúI×g;2~Ãúø{^îšĮ‚ônđ@†Æ'ėŠ¸[—˙w°†\ŸÍîgŗŲôž~KØQĩøûXbÖz iĖ’)~ú~Zŋ%Ķ{üĪ´ā1Ŗ4ãÜ|'īîâí/§ •2ģ7ĻļÄ´ 19ô.žaø;ĄōûiMåB›"ą"Ō„õ čRzG)ŊĨ4D;ĨąeĐäį"3+4ÂĀ÷n¯éŨõÄTŲæeDɇ˙9͉<÷=īÔH+ģŽķR‡€!úe* ‰îŌ #ZDw=Ī÷|6ō_?™ÄIōŖ RōDÁ—H4Ú'>#zîØÛˆüXC&É`LŖsĘ5ū3ŽC‚ē<¯ĢD¨qėqwH?CäŦ‚Äb MfŠßDŖ Ŧ&ņšĨ[CYî¨ úĖg ūŠÖ&ōg~öw@k,HžÆų&#ėN´ VxÅ oũ’PļЛŽķ—ļa‡qND‰“Š^ķUöžô0älY†ĻŠĒa–j„ų\écERęāŖ&’÷KąÃFļFø[îc‰(ÎŽ|™ĢH[p6Äņuș-ļmB:n%’2Į=¯-Û(ØöejšÆ×23Į9ÎVO_Š=ÚqÜzP}ŊŠ2a*cÃ4ƒĀÆ0ÁÛÛējÁtž/ãˇáāR‹›št;›;NŖ6ÆãAŠËũōîā ° )ģčÄV=C=ų)¸j `ÅãģNËîüėA–lĸĨN…@áF¯éxĖįÖß°"ÕßægŒ{‘•Ņ“6zŧ›ZJ%ácŋŠ2ÎRÎį ĩ—^܏ē¨+‚}ŽŲŠW+Ī~ŖĶyaō…¨ˇ¨“.B:GKP˜SŲÕĐ÷'M•”AŠ~lL)ĪŠ;ô;-\Āļēã÷ b'‹ĸ¨yŸŅD:ąa’3-…ö’Ūnˇ>S ;À8ūQkNÔGššˆĘL°į^“ˇr TåeĨžŧųÚÁí&)ĢXB+‹ˆ˛XN0 ˆ„8{*û1Mŗ­E*e8Ū+ĪT‚KÅ|8\%F3¤*7yÉ4 !CLÛĮ6ė הæĪá4UmŠĘõˆå%ãXëŊ¯ąŲ% Lë(đxø°#!ÎÔPŠÜ,˜ÚļaĮļeŲApl–Kîī)›d‘Ôņ§|cāöí¯VGåmŒlŗėõÁ†2” M˛ mĖ–ĩã9Šãģ-㇋čėÍÛõ6~€ÂÃũáĐ{ĨxS‚Ė3B–ļúđw\‰ëŋfۚKÃ=¨­ëØRÁĖŪ;Æąęƒ‰2•Ãv뤏IąM¤’cæ÷ŖáūƒGD|šMĘaš1ķ/‘QŅ"Z'ūøČĶģiÚ=e.OŌ4‚GûûkŠA-ë™ĻeĶ‘f—ãĐpüo‹.Črûũ§.ë2ŗjĶtĘ~MØÎx)[EQQ ŒÆĶ2-.ÎūB›~Ŧ#Sž`qKr¤ ŪĪ 0M˙ühL ^IENDŽB`‚leptonica-1.86.0/prog/weasel-44c.png000066400000000000000000000030041506303110300170760ustar00rootroot00000000000000‰PNG  IHDRRI™ãņ„PLTE' )#/,)JZ!F6(rB9BQF2fQ7JJHZccnXEqcQlllŽ„1!´’rOŽ{kĨ{ZΊ„w§…Yļeƛl’‘‘œœĨœĨĨϜ•°¨œ¯¯¯ŊŊÆŊÆŊĮŊˇÆŊÆÆÆŊįÖŊÔÔÔŪŪįįŪŪįįŪúúú>ƒO pHYsb&2&IDATxœĩ˜ cĸ8Įââ…â‘ú€´uŊ¸ōũŋßÍD ęíŪŦ­m%ŋũg^y@ũĮ ū¤¯¤GH^×7|ŋŪÆ/K˙^1ÉGHQÛ+ūũvŋėõ†Ÿ\‡Ãi8ũlŪ/›ķëDĨĪn͋ÔöŊØá/J;`ĸĘ ]‘8Đ(€s`Æ\Œ1gc4ڗą˙—W‘­õ4ĒĒR ĪGs9Á€L\ŪF>œi Ģ5 äJŠôo¨ ‰e”QBRVd%ˆ7‘„úu™#b ‰"n€UÉAæ¤ĩ! ē‹Ôā0 HãČ@ۏ ’Æy™=āą›÷.Æ mˆUũéÄi`˜Hs NˆT9jFu3ĩöØ>ώ΀˜3~b pđúrđĢgÎT{c'ļÆa‹œGz€Æ|„ˆ(“Ÿ§Y¤—¨]!ö8ĨęÜĀaRiƒ@ 6BÖ*K“$a §ôŒî˛ä!_R•ˆœÆbF¸ĶŊ˧2Ž|-Ø:‘ž¸tȘ˛’”ąą[SėžžļáZXˆ)— Z]e6 P(âP¤%öŸ@Č]/šVû•†O€{fĄęäéęvėģpÎü ĐšWUļ8Û:įĖ>ŸĢ*Hõá–ÂÅ9ÎĢ\ĄRHũ ’Äįsn, !ąnÃ$~{m΍­§ČGŋ´F˛ļR25XægFēĨPCß^š}X(,ÍģCŠr§TƓd4z—OÖtf‰nÄíh˜Ü3Te´æ&“BČē­té]*×rŌÁęāū–“›ĮH>‡lēŖķšJwŠT ‘VŖĢÅģHöp_ÉYëÁ”fœ×¨°12ARÕ0>Pâ˛1Ũ„o2Ō ƒ&[æ„a먗X“õ7Œ´mOĘÆ›;ąwą—­GĒŽ‰žˆnЉŖ$F÷1Ŧ{4Ôĩîˆã}L™E¸}ķ#ģ–Š]ŌŽ93¸ũiÖGŗV(?™öËv38\}š¯ŋīHŒ+ã0Ë%Bfj@ÖŗC3ņ‰•Ž”Ø'!|ČŠČnõųŌ_rŒÄú§p%ēļŦĄE—æ pĘŨŽzIÚlŽšž´Ėū÷XķL ún7ōíėeáĪĖ΀á3Ņß?"ĘŠĪũápū§IéÆÎŪīË‘ēū†Ŧ6ĢūĄËēb—ļ†'HtHą,–Eą\ÂĪģ>šŽî0äĖŽ'žÕlš*6ÅjI”ˇ—¤O÷>•aû:āb ‹EąBj´Šær|yI›‹ÍfšÜüxxī7ŖĒą“GKô$˜_Úö-•X|ēÉĮŗøŽJLtzf‰)”„ˆo!Š5æ Å´&å{HėA{F÷g"Ú '}aâ¤ví×i‹ąv–Ūģ9æWÉûI­Ü|c>ŌŸ°°Āœd^¤~Ļ’ļX16–­DĶz+]L$`éxoU,˜gHÆĘ-@oˇå†°¨@Wúĸ#oĖ Š}+ü*ŨĘ~āqMņŽ tåôjŨbž!ąJ˛ÔaÛņ. "* LËņŠ7ˇ÷í\õĐQ>†2ZOčŗ-q›"Zt§35ŖŪ yN%m^Ęu•`tŲMŲСöJ|JʏÎËLöũ0AÎ_Üūõʝî¨ŨŨũ…kō5]‰ÖũûÄ˙hŖ‹ÛúÛŋ5đÉN™*këIENDŽB`‚leptonica-1.86.0/prog/weasel-4c.2.png000066400000000000000000000010731506303110300171560ustar00rootroot00000000000000‰PNG  IHDRRIĶS™P PLTE5/+ŸF1ĚkÛÛÛā‰ÃŸ pHYsb&2ÕIDATxœ•ÔąnÛ0ГgP°CŗdiÆB“? €YēD@ÛĨS‡ …ĸAûÚŨ 2X÷Ĩœč¯0í’áæH،īĖ!á`›§ķņ(|f8ČĢ9ʨŽ{žÚ&§`2J'—ŪÂLk}éáŖV‡ÆÕZ{ŗÆ•Öh*\ę[#TøCëPīĢ-渧T î+W•Ņ! —,”ŗā+Š.ĸδŸk]˙‚°Š…Ô°Ģ\ąęƒāwÜĶÉ{ŧa]‰ŽģjŦA*Œˆũn×iŠb‡ė<Ŗ4Ų"^JfÛÅ]õļHˆ‹m Åį¤Ë”—[ie;é‚ūŪÕŌBĖ{ ĩČPĩÛ˜&)Õ=‡Ũ™R\ņËx4ĶĘu‘ÎĀhšĄ'…kP5pÅæ~ {æøôŦ—pĶËī‹¸z?îĪ[Šņ•l:…pŒ?ÁˇRÃØ\Iéė5|ãy)ō]œķ'xŠî‚“ōãRgŸ:—/Žģx?(íZãĩ:Š‘Ū?(ŠØ7ŊŖ.~ŠŽÍč_§cīÂlŖMR˜Āƒ”Ō;îa3”ą‚¤îękCÍp L•\qĖôC-ĶÚčāÔҟišŅ<ÅÖ_ū“Ÿ–á]ŲŽMßāãžųĖx‘>Æi[\â*dIENDŽB`‚leptonica-1.86.0/prog/weasel-64g.png000066400000000000000000000045231506303110300171130ustar00rootroot00000000000000‰PNG  IHDRRI™ãņĀPLTE !!!''')))...111444999===AAAEEEIIILLLQQQUUUZZZ^^^bbbfffjjjmmmrrruuuzzz|||€€€„„„‰‰‰ŒŒŒ’’’”””™™™   ĨĨĨĒĒĒ­­­ąąąĩĩĩēēēŊŊŊÂÂÂÆÆÆČČČÍÍÍĐĐĐÕÕÕØØØŨŨŨāāāæææéééīīīņņņöööųųųūūūž'Ņ pHYsb&29IDATxœĩ˜ {ĒJ†›Ļ%ˆH âFi‘ŽA—Ã˙˙WˇēÁ…Åš3ķĖ”fSyķÕŌUĨ¨úŸú? ãl^›=zvn|vŗ3ˇSīžŗÛՎ?Įã1û•eŲwš}Ã-mė;ufeiœķ\r>uīų‰=sē3†Kâ†ôõuũiĪOe9 ō1ĩœyäĖ…DLũ‚[’¤œkĪ~†æ×k⎅tOâä+áFƒ  IjqŪRiüū—2ĪĩĖŽš”.‘´¯$˛„„Ė/ۈŽŨ#õĸ8ŗ{īÆîLj­ˆ!˛(Ĩ ÁOâ$ņGXŗ×ĢĨ†ŧŌ(ũ››Jž} Ä@Ō’äp°%íƒ2 А?]•ėúaîų˜ũ°¤3âAzÄÍãø ?ų´&ęhÅTļcY€ŒÄ,‰ö.ōW–R)` c—ø[øuK}Eōž˛h!ŗ8Žû˞(ŽIÅiĶ$Í2KLā™HQ‘Yk¤S}%ö<úiĢbr.ģÚá‰} ĄüŽÃ]ô•ęęb&Œ1ëAƒ$FЍĢ2Ž3&Šaø˙㜧@Œâ,­aÆi¤ D4sąô.ũåú’yĻũēԏ€dΗyr¯pŋįŲŽBûģY[smĒM4]1–ü:=ĐélËÎéaĸķjąís“š0\āAHÄņ„UûXŗVīWŞÄō"áøĩÂ5Äl…G2šzŸŸ JüvuZČČ8Cf9¤÷–į:×ŦÆC_Crā`¯&ŧ[ũ œqˆeU¤a@ųiihĩí ˜‰ųũįAĘ)U…pPeY&qH™ŸŅ•¸ÛëŖEčĘ%2ú%Ģpæ1™Fč1øŧ =—Ô>ļ ļz*3v ^@I’eĮü˜ąvFu4^ˇäŅÁŋl¤õŠ(ãŊâ˜]W•”%z! ö?čĢͤžã)ëŧåB_Ņôß@„)Ĩß  azR÷˜STLČ #LĮŧskãĢ—ŽŒ¤Q+]7‹mg}Į3ž°ū§\yžžÖ7”:åŪü <ļ+yBJ×qŗįøĄ.LP {E(ë |gŠyĘFžĘvSƐ|HŠÚķŒ5 ut+Æ-}w&ĀS6Mĩr[w‘ķ^Šŗ†­A9ok ¤<‚˙f*IÆBļˇú¨t‰CEÔŸ´˛.dI“ŸD,ë /øôȊnÄ QíũKf]Į㘯Yy3ļŖĀ”e™Č†ë‡!ģhÅæĄÅyĸēlGzmˆhÚOOÃrPéu`cŒ˛AōËWÛ. Xo+ A|‰*o`ŋĖk‘1=(ŸŽ!\ęáҞŊƒĨ%#ŦŦ΀đôNzôÃá\VEzÍÖģPØ8ŽßÚá –$ęūW}ũJĪņCŪ/lûF(÷ÜÚÉSŊNāũ–U'<ķk‹$Đ 1Ė•ųŸŧŊē\——NÔĒŸæS8’ęËķĄšü¯Ø–Ų 9OOŋˆîDF°`Õģ/CÄĢļÄgΡĢrjJ‚˛úæūzũN”ų=‘oXûf! ˆ_ęëķë‹6E—đ…"ē˙}AxũA‘ŪVߨqũēdQųĨR§ŗWĮ2â2yŽN°äwoāŒßī•Í’ĩ¯‘tk UTäWCuFxeɚ톭IS –ú]fģ,‚!U ŧÃsœįŠ3EDqŋĢž Äō*īš™KYŌp%x•ČôųY$ņŠVÕϝrĪ=­Ŋ›Iu!̊b38ä ĮrsâŨ^y%DûSÅŠ3GÚ­|˨K ƒ)†hUÅâ닂üâÂ}¤˛ĩø†7 ėæŧöåə (@jÆ Ę9/™¸­eˆīČįd4sžÅĸO,•Å ĘŲ-'!u]Ö{ˇaĶ áwUĨ‚b:OʀČB‘ķøÁw؉dÃ06+×]ųūÆ%,'ļč˜ēh s>püęķDũđ°¨(a$XĐ^!^!”ti‘sÜufOsøĸp#zW4õ#ŧ?ĄĄ.à büôâ<Ŗ¸HjúÁ~ƯeH’e Kxßą‡8Ás ķÖŊž:琎y,IVķØÖĒöGOœČkgđâ‰ø&ú]­€v&æˇėŧ™Ô$ؔCęÛ ëÚ<<=lĮŌäīšxŨhĸŋõ7T›TåbwĸĒÜ ō‹ų,ęąëÚZŊaĸ-â;O!–íļņŅũ(ļū„ÖÔųįÛ#ÍÛąŦĒSV×Ņ­ ũ‡g§˛<ņQ˙[û9æíŽĮ>¯?Č*ŠĒ(‡nåāŖwˇ?­‚Ģŋ´Ō4Ņ8^ IENDŽB`‚leptonica-1.86.0/prog/weasel-8g.png000066400000000000000000000020521506303110300170240ustar00rootroot00000000000000‰PNG  IHDRRI\lđPLTE...JJJmmmššš¯¯¯ĶĶĶųųų^Ãf pHYsb&2¸IDATxœÖËwĸ<đ Ķ-¯9ŨFPģEôÛŖ„ēm5Ņũt€mgú•üûsÃ3 ļÍąS~ŊÉŊyōģ ž/wÁmŪÉGíßĒĒ*.ZÜ˲(+Ų| Y–ísqEN†ĶD}…Eįãōēlģ§šœąS|ēSÖ!Me"?ØË›˛úCîSx„M/1•EEb ŅlŗęĄˆ48ĒŌrܡāf“5K7˜˙ÎŌcV:ÄŲNĶĀq\p<5õqVĨÖ7&„ÍąÁ ëČļŪ{Yå#iûŒo­ļ¤4ĶdĄCnûuJķ.ĨĨžQÎH 6jÛ;] ~ ģųL =ŖFŠÚofã v ĮT7ˇØ‘z"[Ûüˆ\M6{ ¨R24ų>АœúSŌåGė8AęR`nŒÖguÄĶÂĩŒ_•EÁĄnä˛{WÛÕĖQĘdëĀ鞯¯Ë`žĒ÷~xą ~÷ģ;ÚqEÎ ļÂŊÛ<\ ũŦcYBé üFI'ŗŠ|ŠÍN}§`ž[”tŊe.^æŨ’PõÚjUFgJĢŠ76Ļ×$ŽĻ#isŊC-û™u'RD`;uō&M5tŠļŸ9$Ė8K-L HģĒRJ†ŪOũ&ÎđŖäqļ3ƒqŪiRßÄ{ĮÄÔōāX_OʝÖ{ĨôO:ō„B?iõ]Ė"XãęHc<ŋįĒÔ;ã†ä„ļëĪS…ÆÍĒe¤SlŪ ÜM}Ŗ|Dd^jãÉd˙LCZ_gÕŧr”Q>–ŗYāüPŠĄŌäčXÛG'ˆCSūŽÁoîŠAęNđ!nBėŦģ{ę†Äķ†ŦU=ĀĪeíâĀYƝ$§åĀüZ2"ß<úđĩäŠ%Ÿ{ßŗõ ÉŲö^Ō é¸×%į,ŲK;´‡ŽŊ ™njȨŦHHéO%ĖqĩĨDž›ŅÃęn*_ü„¨}ŽõųcØV/˙ŪOe´‰6ÉR°Ãƒ|6V}9˙§įŠL ē‰đ¯% â-|ĩ—õf´ 00gįåŊĖĨCKi—‚Tk‹vb{=dT tÔņnFŁŨÉ)ž"ję ¸ICÂtšPÕ1fĮr[Æ^rC ÅÎ mįéÔ%õNå(~âį¨!u-fÚžš)%eĸc]"šž§Ä Đ`zS ēšÚž…§U&iLĩ?’rŽ4ŌĖ#d’gresuÖC¤Jč`NLėaæŋ-+Ā`āÆdLŦœ/FˆE˙Ļ4°$€˜,ƒųv¤÷á‡§Íc˙Š‚†NS‡œ×Bō,—晨 UÚ,õmã)~ azH=øzö#už˜dZņYėu%Q0Ũ_ŧ Ņ• Ž5ʒ›WģC–hÍĪSæ)18í$ZG¨EUמNsÔĸŪ#äÅ/Ú,4[ĸ홱@iŖĀuZ{€âāįÄ  ūžR,[UŽŅ”&-d= ŸĶ”–ÕöP ÔO(ÖīLĨŠ69Ú˛r ­W+רjâ}#T˙×ŧ¯xW •´˜wØų^ĢŪ ;ĐXą)ē’Ō#R(<*n„šjß`f¸˛a ŦWíáEë÷˙UÂc¤MžiI•×+æāæŌÕ)Ģ:7`ĩH%ŖŊjôHöįq:›eč´Ĩßę><žŒrۆ'ÔevūĩŋVĩ˙ĘŊÆņ~đátIMEŌ ¯§Ō|IENDŽB`‚leptonica-1.86.0/prog/weasel2.4g.png000066400000000000000000000013501506303110300171030ustar00rootroot00000000000000‰PNG  IHDRRIĶS™P PLTEUUUĒĒĒ˙˙˙ÁbŅ pHYsb&2‚IDATxœuÕŋoĶ@đQ–5ƒĘŌ.^ú'ÔŠ˛ā”^†t`)R坐Ü‚Ä’FmĨn5rīuč„T$„ÅŸĀĀĐ)ę@Qĩ>î—Û17Dō'/Īwß;;Ā*Æ%Të!)ŽžTZ‚bŒJ:ŽÔÉĀÛV…R̃xUÔ$ō:hĨRmˆV衙ׄ%ZC¤Åxō ;­‰kŨIs Ŋ’ŠRܓátĻ*Ōĸ ŠsY‰¸Œė|­¯ƒ %Ļ}}ŊčâĨĢđU6î§*gĀ“­9&Ļ9øĒøN´×ú[éj?‹ŠčŊP BK}I—ōÚB­*õŠ‘.Elgš < ye1ëdHJīú C;Ķ}Ĩ 1ö[b&yFVæĘJ,"ŠG˜ž¤w†ŧ†éI,W°;oå•ÚÔą1Ŧŋ™ęļ8ĸHmtž,Εņ@žv ų­vĄ¤ĮîĀÎé:ôƒ­•i}†đH´7ĩĒ•)ŋ¯}-h ÷ĮiŪ(MtŽâÃ}ĖŽ ęū4bĻRßV{Œ tŪtģlF ŸlYÃsķ!›Õo°<ĢÁíē?ĢÃkW>ü/ úūO•~ŧ\— š™q}ū˕ēœ)ômūė•nņ—Ŧ ŧ[I5ÜÜōčĘŪšĐ‹8Õha3žķÛ/ÄdīgķĨõÅĢÛØ¸ĮĄãOÕũŊūn<%l¤k+ŋÁ‰ÔK#ū˙@Ĩūåœ31p<IENDŽB`‚leptonica-1.86.0/prog/weasel2.png000066400000000000000000000013201506303110300165670ustar00rootroot00000000000000‰PNG  IHDRRIÁæ6ž pHYsb&2‚IDAT8uÕŋoĶ@đQ–5ƒĘŌ.^ú'ÔŠ˛ā”^†t`)R坐Ü‚Ä’FmĨn5rīuč„T$„ÅŸĀĀĐ)ę@Qĩ>î—Û17Dō'/Īwß;;Ā*Æ%Të!)ŽžTZ‚bŒJ:ŽÔÉĀÛV…R̃xUÔ$ō:hĨRmˆV衙ׄ%ZC¤Åxō ;­‰kŨIs Ŋ’ŠRܓátĻ*Ōĸ ŠsY‰¸Œė|­¯ƒ %Ļ}}ŊčâĨĢđU6î§*gĀ“­9&Ļ9øĒøN´×ú[éj?‹ŠčŊP BK}I—ōÚB­*õŠ‘.Elgš < ye1ëdHJīú C;Ķ}Ĩ 1ö[b&yFVæĘJ,"ŠG˜ž¤w†ŧ†éI,W°;oå•ÚÔą1Ŧŋ™ęļ8ĸHmtž,Εņ@žv ų­vĄ¤ĮîĀÎé:ôƒ­•i}†đH´7ĩĒ•)ŋ¯}-h ÷ĮiŪ(MtŽâÃ}ĖŽ ęū4bĻRßV{Œ tŪtģlF ŸlYÃsķ!›Õo°<ĢÁíē?ĢÃkW>ü/ úūO•~ŧ\— š™q}ū˕ēœ)ômūė•nņ—Ŧ ŧ[I5ÜÜōčĘŪšĐ‹8Õha3žķÛ/ÄdīgķĨõÅĢÛØ¸ĮĄãOÕũŊūn<%l¤k+ŋÁ‰ÔK#ū˙@Ĩūåœ31×čßíIENDŽB`‚leptonica-1.86.0/prog/weasel32.png000066400000000000000000000064671506303110300166730ustar00rootroot00000000000000‰PNG  IHDRRI!_æ” pHYsb&2 éIDATxœå\+”ã8Ŋģ§@@   Đ Ā€@ƒ PĀ A@ƒ  `Đ@ @ Ā €@ <įE‘”ôĖžŨšgNc;ŽŽŪGī#÷?ÜĢÃß˙Ü@åū^äkÚjŦūËšúŖNĶiĮ›ŌŽĒĘŋEQpæÔÉ^70ē—sNAé#_ĸ3|ōéķÚîėúËS—ŸpC˙kŽĩuôīRjŊŠ§ŲŌčŨ‹ G2 Ji ø~˙#˙zEįGHøį™kÁ#čcĮįúqƞŧįœsîéķzöišN&ŲãĘn-ŽeËwžųĀŊ†:{ í´‰[đúØ´…3ũū¸Ÿ>¯ŗ,“#ŠĮIą)æķSÃu/Î|+ũ˙üĢ4_]p㏘”¤Ē*æÆļ-lšĻ…Ōv¯ŽÕ˜8§i:šСbļ.ˎ2Ф¸=¨†{q¤ÖqSc5ķĻÉŊēīëãM@Ŗ9Mū™āž`֚`igģĩY–Šą"ÎʁŦo¸dęĒĘŽ–+k­”2MSÕ@ūâōMĄ?ęwyļĶneÛ:hˆ´UMšl[­:{\I)įŋÆ|’f!ū)aæEžE!GōaĒ"QĪN¤bÂŊå›2˙š_HۗX gĻÚTx˙†æÔëš4Ÿ3€bS¤iĘ'+÷`Grˇ‚Û'ėcŊ)ČĄ`wļ7mx2le~~ ‚ĢdēŦĸr$[W/ķ­”Rǃ¤‰”2ߔ“Ođôy]lŠl‘69WîíaUXkËEüSōôyíywšŠi—eí“$ACˇĪ90ō€°¸BߍÕį…B˜ŌUŸL<ւœšĩV“SrļÖfëĩīöˆĸË{6?XŸũ§4Oōņ§%„lRÜ R?vgy.¤–Ļ0ų‹3[¸hzœĖ~Ŋkwž)õ8ižīįÉAØO•¯'ÍãĻz31"\[ϤÕ$˙ǞQ$é/÷âh5šYK ãQĸo‘ČV 3ČDÃÚQ͎ÂWV ŖMĖÖĢ@ŲĐˆ-­Æ´VR*uXŊúÂ_äę3 ß؊=mšDāš~ĸĒ*_ué ŠÉM,‹bSčq29aˇŊLˇ{u¨Ū ÷´“t&ę$Â8&؜ø&8ęā˜ė2Đē'qëÕ.­c‚ŅôՌw9yNŠŊœ¨ø Ε{Ë7%öVĶ´¯. Øš ,€ŲģŗvkÖ§ũO6m{?KÄ9[¤ąj—RGDbPûp›ŸųŨķčDģĒ*ŗ5‹:rÚ§5œdRä9€ÖĀãĐĒļŪ”­?ÚEsß§]ģŽ}€%Ė„ņž†W•ĨĢ;įĘŊ™ÂĐBÕ =NōMÉĒ øŨįߟ›œd_ŧ>Ūuf”*¨•{sĨ‰PTģÆ@,ÍÖÅßâ–õIҎ"Li(iņŅ/J#¸Wįļ.Å cŪÚĻ<ũ3§sX‚}ǐÎ3&ÐRĀÖÕiôŽ”R’éNÆ ŽCWąŠåŗÍ˛Li}yŅŽĒŠV2ōØuqg{ņm]gâė“ Ĩ¤œ™2ĒJ¨ČtiēČ­ĩųĒkéĀėNÎŦ…ÍzįÛĄmS8Y–%;0Ÿ3ö™ f{Ŗƒėq•e™”2[¤ŗ; €ŗHæL'ũ ´ ČX֛ōZiGQ„ĒÎhĐQ$[å|Fā,įük^l øE"ŗ¤ŨV#1˜´''‰Š|SN>õîm„ļEŅĻ´NēzUeMih•"вzųĐŋ$ųēČWœęĄWží‡%ÉTÎĩž Á†ĀŲ€ųlŽá? 䨂Í%žžŖ­z߈×Iˆ0q&­fuŖŽPJeYFÅ6ôÍĀ4UîÕÕU‘áŅÕ:n„åTåģ>Į¸*Fv<Âeßĸ(ZÎvgåPÆI|÷‹ĸķ<‘įėqEB^,Ņ›ššH?ԎÍZ’vG´Ø6Ĩu‘įvg‹ĸX-WtIŽ${V*"ŧ˛Åā/5aōÛ}ÎąP7´+y’$ZkšŠ[hČ?8„ŒGBÅ0…Ą…ô/ŗękĐ.mŋr*>q+ŌßĻÎ9ũQSĀ˙Jž))樓BÎÕŧwđt¨ĖÜë+5mö$mŗ5ķ9­Or$)ęhĨ œ*QŨÃl]<ę9Uî­0HŪėeŲxüũŦõXˇŲ]Ņw(Í$cŽ“XÔĻ4ÆSÎ3=Nô­ rįŠúî)TîmŊ)ũŦK˙ģœũkŌë!K>ŧpŨŽĒęîįģåī+>ã^‡œ\ũāJģ|ļųĻĖŦ!ĨŒGBߊ.3…Y>ڗiš’ãČw_žûN__´(y3M'm§€‡_‘ŠW*& 'ĄŅČg{ư}ÂÄVJšX.ą/<Ŋá’:Q/„‰§ßîōÛwĸHÚmKw†>’|XiƒŸņ§Æ—0ŗÍ˛÷îėÖŊ-|€ É^ÚÎḏKÅŅĢ“Ø4oǍøúĖȲ,Nâĸ(°ä }Ũ!Ą—Ž´ØļOŪŊ†U¤|SvÉ1Č3SÄJg(VOã Ÿ-cŌÖÜúą8jô6{]Aĩ”âūõ æD•ŠĘĖV•Ęĸ(”RTë­ųōX+ĖÖÉ>:Ō"m†ŨŲ œ'19Ą|Sr„wæF`ˇI)åH*ĨüŽE–eɛâÉYÚz(&SÕ}ô–_žÉ_\“ģ$[~â͈"i'qū5gEČwNJÁTũ**¤”ēļ ŧoēJíazŽ”’wQ^˜x2HÔhĢE‘L?Õĩ>Ž=ņG>ÜMi|6ûõ.&ÕŽ¤`ŽC.à šáiš*­ĩÖYļĸÅĩwÛGĶ“ųđkLMŲú—čLŗG7š=S˜r ŲARA2šŸ’åž ī Ú.,ûhÖÕ¸w†zG‘¤NPaĐŊHHë<ĩØ"(Ĩ×úž~=ĶüÚfkēTÂ΃™Sá@Q€JŪ,öĩ^ŧĪ @°ĄCõq˙”ÜũN[UUeYRƒÍû’"x_ë~˙‰ßÜ;ßņōëjŦ{’;¤ëëÖԐRꥈÆ÷Jë$Išž˙x6ßJ.HĢąō7†÷HE¸ÂÎĸJˆŊ*ä|fĩ\I)ŸË@$„ ÷Ö=I‘īö›8TŒjP/T̤nT€<ĪšhGËdļ^Ķŧ°KëˆöŦŲÄ=Õ÷ķÁŌöONgS1žŪ⏎î˜Ū@Žę$äô3k5ĻˆĻ)ũmĖ íõꎃ´ũ°,hâvŲ Ŋ=û2gÍWz(`Ũę{}ķ“Č7Åķ׌vũ¸ ĻÆj:›ŪũĸZĩ@œÄ—īB¤o2É@ąģœš”2˙š§ét`ÂøäŪ:ų ž>¯‰6Q-ōœŊˇĢSŽûJhûËā‘d™wtīūū3*HŨ%‰Ũ9=OR[† ösT•C “l=—#yJļ×Ãŗmī ØČŨņY͈h?%öf°cŖD%û˛ž˜g_ÛŽŊáîŽn˛õļŋhŅą)Mą)ËEöĨX,ųÎMođ$ëšŪĀ܈lŊ.y.ËÅrylOmÖ:…PÚŊā;mÔXÉÉSPSEëû•\YkķË÷†ĩ|\5Ų_ƒC[˙˛NhôņņŲĻPã#ß̇bõäĖÕXũIœûmŲé+p&$!tLÆÆ¯3”ei­€')°sŧé˜Īfüßˇí ÆīÂK‚cž§(¨7Vį§ëĮ­Û ’đ^ų/Cs‰îģnwŨ…H”Æfėį[õČŦĨøŦ†ąÄ¨•üfˇÖßž€•xú`ˇl`â$fėEōį…Âc­īé Ī<į;ĮŌ~’BŪ\[ \w5ˆÛũëįh3Ĩ‡ųܯ“ŅUę00ū8hŨŌãCæD/rđĸīœËîClŒĒ˛ļĮ^šVœ¤Í LĸŖ–}:Ī(‰Z/cōép•ōm”^ ūØŋËĩĮrąĀūƅŠH–3‰.[¤ŅĀVopx=oēRcõ°XpĢ@Iʖ´ŽužįÖZÖp=ųÎ]&+Ę.‹M‘­×ģž< ĶAœÄRĘtžĨiZíJT÷ĨĸOúiâĀ9=Ėį~í–^pģߗYī­ËoBY‡Ųšė÷ī)š>3iîf8vWÔȲl9QFĘŲēČI}lé|6ķߝļÖ>xĩnģĩņ÷ÚĒëČtįšãöwN`ŋš; §ŌėF;¨ŠrŒIíû‡}­ÛlˇŠĸxX,č˜Ę G~;ß95VT'Ą3AŇ+Ĩ•„¯fz„˙Ÿ¤@ĨŌēcēZĶ.aûßŊUŲ;8íÕFēį˙͂‹ØŅÛĩü$Áû›Í6hđ"okĢ´õįģ?ĄË“OwÁ بcIENDŽB`‚leptonica-1.86.0/prog/weasel4.11c.png000066400000000000000000000017311506303110300171620ustar00rootroot00000000000000‰PNG  IHDRRI\lđ!PLTEXI4˛ÞķķķŦŦŦƛl SRN°d“sRS čÜâ pHYsb&2^IDATxœÖ1SÛ0`ŽPSēya`$ųȝ=Ŧ“WõS æ)ņđ —NÜĩ@˛14néTŽ×Āņ+û$ĮŽlŲ!â|€ũņ¤÷ôä°AÖëË0ąĮļųË8—›oÅēČå¨ū9Åë ĨŽBÖĮô'mĩčÁ›1åĐ6~Q$Á*éyzØŪārĩdW<Åxđüø;Z-%ĘÎģbĨô?îŅpĀ9ŋi’U÷=4@å-†##TāņĪųā†<‰Ú…›’RĨũĄƒY@ųyĢĩ”ĨT]ƒxįÎÍųŨ˜ÖIDzø0ÔLÉK#Ļuur9nÛ˛€lX@îļŦ*0„Yģ@Š%irĀ˜ßIUP|šÎwûé-ĨXLF‹ŠueĪ”ēéĨvĒøS<[ėē'–,N1?ū˜īÁˆ 4Ĩyâ螪φØ÷Č}“$€36ÆŌyÚũģ† #ÂÜųrō¤Q˛>‘{° (še@Ā×Ë­lÖqž‰]#fdÅēņ%Ič}LüSWŦlp—ĩZD°•ĸúũĒ”ŗtv7ĸôSŸ°ĶŊBz2°b g–âÎˆH×íįadíQéĀÁâužaBą–4”ZëėÎæ¸|xą;'ú„,P!Ã˙øf#—•Ķ^3H!×ëË˙CŊGHDΧ˙IENDŽB`‚leptonica-1.86.0/prog/weasel4.16c.png000066400000000000000000000030271506303110300171670ustar00rootroot00000000000000‰PNG  IHDRRI\lđgAMAą üa0PLTE($ P HH@hd`PH0 ˜\@¨Œ`œh¨Ŧ¨”ˆČĐČđôđØÜØ¸Ā¸ØMËF8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I;IDATxœ–MLGĮgąē &ëâ¨Đ‰ĐŠ7SģR›ÕČFM՚V¤=å°g8DJn–Ē §UÕ4joO 8̀7NģĄšä„ü‘HœfQŽČë’ĶÆaûfŋf°‘Č[{ąŊ?ūīcŪŧ]DßÖz{2}‚] IŗÕ‚—ÕbfēįVÕĩvģá´ĢN.$[G­YoÕ°×ڎ¯†“ŗM“Þ’/8žåęœô<ģ<üÍF#ûšÄ(bNސ#|Ę;5ۏĸęŧî8+2B_įÖŒ,f 'ŦV—žTŗ1‘“‹×ûŌ4)Đėå‚Ėû˜ĒF{â U-GŌ!ÉÄboĶ2ĢuĐtĸj9†_¨Ēz7Ę5[ Ą.k™ ŧŠŋFÆŲ[ )?Ė­Y>‰+,>×?€ZŊé´ ĒåB"Æ${…ÜĩÃpi[Ø>lŲX{ųÁ4B‰Ģ@ŪūÉáŪ×,Ȉ2į-ÛÆÕ!Ú2ŠÍÜP™ŋČPrĪ’Ų+”T}+~š÷ĨˆRĶÃĀRŗ*'ž‘ßσąĮnDCP-<ŧû`#P\E7C°Œ4kz$€ŽĢŠ/ÅUAķ/§ƒlj˜ĖXÁC;R%?HĮIå"ûģ}ĸ&äũBĮš›ĐJ|ą492ũ‰ŒX÷ĸĸæ^mO 8 %dtv֍BÖ˛ÕÚÁa-É*’ūU˙~׏aūwl°lÜõ!ØH Ėŗš J˙‹@šļCÉTL- šĢwzÅÜm‚uĖÆÄą”"bî.¤ĩ1!÷;AHIôî@˜Õz•āMŠ TŗũîŊYgŌ&ĢōT¨ûųŽŖģ™Õf˛9×-ŠŪ‰pŌ<Č%™|*ŲÍąm,hšfs5+3{ãM‘dŖĻũZFî2vŖ<ÎŨëgTŧ\ēr6Pē’ņŨaî§/oĨ ˙&ŖOƒĪ?õžCbĨ$ÍxPÅēÉoB7–ĻŅ f‡˛‘cHIUŧ|Õõ:čōŅŨž”WBō 4č Ÿ[dEØ@Įyķh/{;˛<¤ĸ[¯x7y•‡]Î獜“Q&y×%ģë äž )%ÎËRÆ0Ū)3°'¨Ø4_Ŗ 5X%¤ŒNˆ1  Úī^AJWŌņöĨŽ Ũ؊Ģ˙Lkp]ŽŽo š{Ūū…ž×11ø°š7,úĢ@îķ=LŒÕ`†”&‘ô9Üá[ŌĨĨŌâu˜ß?C͕HØ! ŗXĶŧíŽRÁ-’>f™ŧN ÷ŖÃ=6ģüņĨo =š†’ā6\|:!]°„Œ`*i>y{iN™w⊜Ŧ‰qž9đG ŗäūögŠ2rŽ"Á5],@7ÆGE‰ŌƒItŅ˄“0lÍĒ´"õŒ*Ępž?īŒN7!˛ëQHŠFãq†e׹ŽëŲíû=ŠTĄÜDMn„¤jĪ:C%ĩĶa‰"ôų¨W$NZš¤Nļúč’2ŧby1ÎpÉá06†č âé¤ģâ$`ēŖv›+sÜu’ ]įŨ1.ëŦ‘Œ”ĩßŖœįäšMBd)}1Ÿ7ļbt÷” AŗˇƒÔ7Ī%wØõŌ'§æúBr÷ôҌÜU‹SˇŋÂÆĘ]ŊÖ€ĪRëG4!—háf~}2NĮå´>’ŋë\#¸.Ä 4G˙IßWFۃ›xkLúļc5Ą7ãå[ ú!]ZÚŖ _ČįXЙõŽÕ<éé7’M|‚…OĒÍj—ĩÄ/õđé—L‹ÂãegøÉ˙č}e‡g˙W~~õGŌK+tIMEŌ ¸`ËIENDŽB`‚leptonica-1.86.0/prog/weasel4.16g.png000066400000000000000000000027641506303110300172020ustar00rootroot00000000000000‰PNG  IHDRRI\lđ0PLTE"""333DDDUUUfffwwwˆˆˆ™™™ĒĒĒģģģĖĖĖŨŨŨîîî˙˙˙{ pHYsb&2jIDATxœ–[L\EĮį,—ŪbrØåVę.´Pž„.ļōTļ…íĒ Rą%M‹,ÆPÛēoĢ6l rąœŠ>h/Ą;'ĩ5ņÁîYʋÖČ.íŗY.áĩr8QcÆ=ãĖšĖØ­éŸåéüō˙.ķ͗øyžŸœlú_57ąÉ×Ô5uiŅúŠęĸŠ”Ŗ0#ŗĩJ)„I&čxŲ&טÔĩ%uŅpMũTԕJ%J’xÎg“„ĩc‡šōĸû&Â3šH*Ã˛\V”[^ēÂw´Ü¤‘æW'(ųŊ¸÷Â{›ŸIž ô(Jw„°āYäõL–A)_ųn7'79¤ēāI4C,ŪaÜ=ĄäģÂČVeÆÆ´ĩ4JĖ/&S?6@)TY@,'^TÂwŦÚ[”öÉęĒĸ Ī!ĸ¯ÍĄÛ͚{€ëC@ĩ);Īēž‰Ŗię!õú„CU“Y“Ũ%âšJnow‘oĪ}hD*“DæŲãזĪo°4ÍX{…;øI N•ÞˆÉMōœ:Ír 2kEđæËøŪŽ0kį߁Yž4&¨$˜Õņ§q[_ø |č=Eû9ÃGŸŪ-iįđĘ(ŽčuŋDŸ9ąĄ€pj]įOsQ.øqžw÷×ņ@K_]Nûfן&÷úmÎųū Ú¯JŧāœQNÉöKgr<×iÉ&1ÖČûËÖ6ČęÄŅKjkUiIENDŽB`‚leptonica-1.86.0/prog/weasel4.5g.png000066400000000000000000000015241506303110300171110ustar00rootroot00000000000000‰PNG  IHDRRI\lđPLTE???ŋŋŋ˙˙˙w7AÖ pHYsb&2ëIDATxœÖv PĀ  €ā,ôN¸˙™hKCą:ŪŪ|Ûû&­Č˙â˙Ōé/ÃlōÆž–RŠÃpMÎqNyų‰yž?ČÃt–¨A\›œßË5=hYŋ€]<‰™ĢPh}Œq=•5čÄA§>ĮԈ”Ũ¤Ī3c NJœčw3͇€ušŅzôžIZ#ŒĶ•¤–%ä%2šĮ¤ÄsI>-„,ŗ´W.kIraG9°Ŧ†Eú7ro0Á#ŽōP m´Âmx#ãž÷!â ÷.ŗŠÉ1&ë`Ë`_û!dPaŸ&m&—‰ÃēÛåø€P…öræ§'äô˛öĀeI‚ÁāÔē¤ŧCxj‚`jIĻ•Ä+ŠČ Än¸K'ÃÛ~J^ŅžÛô}PĐ<&‡ØėōašÜ‚ŌŽ)™|ŋ–=8*‰ËTî;ÔԖ;؃ËnßS ÛBô!Ã[šn"ŗ1Ŋf§#i]”*­ņMÔKöuzč?ƚ]ĸkg× ĩĪã(ë%¤—ĸœ°7ģI?ČŔßÔÃ/E p’}2Û –õrâKv C“ĩb]‰72Պ֚ÍTĨ9“Ņ Đĩx…Ũ€ä˛ö‡ÖŌøP$č7¸ĮŒ­AŠŖ|‘a=—ĄĖzæ÷gwˆIRŧP!­oÎüVLb+šúÜK~ŠŅ.WŖF0e<‘AÂÚՅŽĸî qˇ'Yõ‰’,y–Ŋ“öūõq–\ÍĪdėešč.B-ˆÉRv­Q9,Īe˜¤¤Wz;Áí9uSJÔ-ŪéíŨJ-øC÷,;ĖO!.ųģD™Ÿë"}–ÔųĄáŪžHjŗŸ ŽMSŋ—! ŊgÚĸ=ĩ$Ŋˆ“4ōƒ B.}.ķKé]ĻËQNÆ.ŨvÉŋT“ŋ?GiŅ–‡)NˇüŽ-į æAJ@K˙ũŊeĐM¸ë„U]~Ūŗvō§Ė0ĐažŽ+OIÔTčcNRÃĩÜ%bčēīoŋ›Ėo^xûąŊŠæüMæ&˙9ū ũeļp ×IENDŽB`‚leptonica-1.86.0/prog/weasel4.8g.png000066400000000000000000000020041506303110300171060ustar00rootroot00000000000000‰PNG  IHDRRI\lđPLTE$$$HHHmmm‘‘‘ļļļÚÚÚ˙˙˙_Ģ* pHYsb&2’IDATxœÖK—Ē8āđΖ‡įô6<´ˇœ=Bŧnģ•čöžé+loOäīO ņŅĩÔī$Ф*¨īųžĖ‚'ĩr^ŪŽã~ŋ—:øcy”]đęĄü°g,É# ¨V…’īÉSÄk)ˇ6!ŗNžÖĒjŖŦ/ō-Ō˛°Ã„[ŊėwŦV혞Ž”‹Ha YĄíŊ,Ķ!ˇS€™ŲËÉú(÷ 0ļŒ gŨg$÷Ŋ„m,Kš˙$s €ĢIŸû ÉR°9[Ī'„ęUĻ3$P6§ķNŒpŠįž#ëöTvÄ—H˙F˛ē†’Eâ‘ėáĘė `ktš}ÚíÜË^9’}™Ĩ–x4fŲ×cŒā ÷ųp‘˛hW™ëEd–5ž[n­<|?°‰>öÜČ )w”âØÄ ›‘,+Ü5 mleu)!9€›6)E]J8#)4Ä V“,îB‘8ŖŗŌ÷ĀęBExL]mPÁ2ŖË‘Œą<7¤mĄHŨŽ–”ú ×ú~´ĮPd’'î8Aî2ī„&ÅõY—;h&OĨn\¸Xô1ŽĨ‹dí;ڙ" Üö˙äĻ<Q@ۆŨŋü\IMÃŲ…!]“w$”%œœiAã—ôļŦKų5›§ĨOĖ/‹Ņą<(]wg ‘CrtEnÍ~hޏ÷iģD͚É}Ķp;ãœ3 ŊŦ‘]î.–'ŨŧŽãÛ:yShØ-Ķ7°ÔíQø ׅȧ‚ŧTUÎč`öKÅÃk!´Ėƒö ¸m2$qëŲۀũõ*…å ĩ&ÜŨ‘ã'|Ķâ.†J :rîÛ$Ō˜áŒ”…ÁšM"ÔĶše„—)W/\‡¸Ëæ8-hTĄuž°L7) Yķđՙ ĄŒĮĄô9÷'đĪ‘k-Иr0ûĢōĐTŋ9‰Î/@/°Č(õ‚ÄænŌž>w$Ü74ņÄ;(õXŽãMJ‚žŌ캺擐‰z.…Ą~yėõš,rKŊq{ĶąäŽ,ÄęEA>ũˇAp[…H7ĘY?ĩ7’ųR;x*Ē ^N¯eaĶ ‚jË õeFëÉĩ|ŸĻ´šė&ęĶŗ­NūûãZÆËx™ÎĨØž¨7—wÛų;\˕˖1üúųĒü„˙¸Ā{>ÚĪYXŦâę×F9œūĨoĒ"÷é|ŧķÜt>$úv8Ņ€ÍŽ†gôôë7l%ū\¸í—ĒĒË'Ņ~ũĒīÆ˙ĮįŊ2ŒlˇIENDŽB`‚leptonica-1.86.0/prog/weasel4.png000066400000000000000000000026651506303110300166060ustar00rootroot00000000000000‰PNG  IHDRRINĻà pHYsb&2gIDATH‰–KLTWĮĪe_irgģ°ķ°"Ģâ\̞( ļƒ%ĄJŒRFéÚĒŨ¤%ņō¨Ücģh}įÜX]tQį˛imĘ ēn†GÜZ.7mS›6{zÎ}œ{`ÆÆoîŦÎ/˙īyž€_ÔĀ‹““M˙kÍÍ­ųĻļĒ--ڟĻ-Z–u-ÆČÅB[ČfUÂdŌô[vČUfÚę’ļhĒfōvgŗé´š!šķ…$aßŅ&Jė>„éØL1’š)YûFTõV€îØŊ8i†ųõqJ~/îģôÁÆį’Ļf#„~Uí9!,{š@53[áTŠúŨnNnpIm‰3h†HūŧÂ=JĪ0„rđ #ÛÕĶWs(=ŋ˜ÉūXåh¸ŒHNŧŦÆîØšˇŠœÎšĒ>Ō2HųaŖ|­„kK3ÍļôǁÉĪĐu-Ŗ*ķ9„Ōׁŋë#H-Ņ­ē$“ĖghąR‚]ĐļÄ{i×û2BŠ!ë@—ä4u;ȌŠRHQ/g Œ~éÆŲnƒ9ęšJN{㠔ÅÕ0Œ| MS ųLP8´kŌ$k ĢD4WČííņ#Aߥay۔H@=~rG)ŋÁrd4“ĮBž–O“pĒ FđĮíŽ7xÜ8gčm7'ūų(9õF—­øa ōîG歛n]$yëŠoĩŽ8ī+*C‰wg‡Č1Ņķ!Üũų€nĻ û…ŗį††.ži…ÃŗdMōY‹Á篎ũ$2XŽī[ÂŨo¨ā2ĘŗíElâāo;#āõ8J“ķ_{JZ—š8­¨(ĻčØč7pā-z”˙BŦ~„IF,NkÛŪĮF#Rh 9yZ_q…Žæ|Æ­’ĸņS‘°.ĮŋÄÄēel‘ŽĻŊ­ –ŧéņúC’x!|Ö8Mgk[6Q)H!IØõcFrš rĘy­o4QōÎ`Ė‘LSQRHöČã'lÁkHĻé¤mļȏŸ„qQÍ5’W7á{’8ʰ‹ŧĻˑų߁;"ĀMg/§y"ÅĐd&F@8¨3˛šĶs’ƒ ÂÉ5•?aÎE•—pžw÷!h;ÛK—ĶūŲĩŨä^ŋÍEßŋ-ÎĢ/¸=*jŠķRÅų"Īß5ļäëäũåÖי]‰˙vjü7EaIENDŽB`‚leptonica-1.86.0/prog/weasel8.149g.png000066400000000000000000000060551506303110300172720ustar00rootroot00000000000000‰PNG  IHDRRI™ãņŋPLTE  !!!###''')))+++---///111222333444555666999:::;;;===@@@AAABBBDDDEEEFFFHHHIIIJJJLLLMMMNNNPPPQQQRRRSSSTTTVVVYYYZZZ[[[^^^```aaabbbcccdddeeegggiiikkkmmmoooqqqrrrssstttuuuwwwyyyzzz{{{|||}}}€€€ƒƒƒ„„„†††ˆˆˆŠŠŠŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––™™™šššœœœžžž   ĄĄĄĸĸĸ¤¤¤ĨĨĨ§§§ŠŠŠĢĢĢ­­­¯¯¯ąąąŗŗŗĩĩĩˇˇˇšššģģģŊŊŊŋŋŋÁÁÁÃÃÃÆÆÆČČČĘĘĘĖĖĖÎÎÎĐĐĐŌŌŌÔÔÔÖÖÖØØØÚÚÚÜÜÜŪŪŪāāāäääæææįįįéééëëëīīīņņņķķķõõõ÷÷÷ųųųûûûũũũ˙˙˙mx9 pHYsb&2 IDATxœĩ˜ũ_ÛÖ‡/A3ąhqĶŠ¨ã%ŠĨ(ĸ§Š!Sc–ē$sI&ŠŊĖ8H‚VÔ2ˆ @,ęâ4ræÎm•FđÎŊ’mŊ8ŋėŗ dôø{^îšĮBî˙ÜĐ˙Yxįy!bø¤w,⎸yüÂNûĮ"ŋČīD×;WN§ũ*zØøŅŗ—­­VËúÁzf›ÖųŗsËôíÜüâēķæMÉwė6\ķĒ=ėö+x§ŨZ`į†î“NOŊ×ŗ3ķÎBÛq‚ČųÎP{åX-ļÖh=+Ĩč,ž™§ĻaĀ X~ū‡vÔņˇYˆvˆ5æwš:2Î Ã81 ŠVĢ)†™įu;¤RøéíLΰį/0˛„Ve‰''ÆŲI3Į"jĄėY^ĐZ?‘\ˇÛÁGė,ÕS Ä}´ŦČōŊҊĄFe‚ēšß(•Ab )t‡ū˜J’nˆõÔUÃ8~šOe˲"+Ûh/~‰¨Ä×įvZ֏ô—@|vœú3 ĸ]Ę]Ē(˜(ׯĄōPųkX%Čx Ņ2´ƒ§Dä?-SJÕd°Š„Ēéę.üē+WŲ”xŽ‘ŨŌŌu=ÎtēŨ–Ą5uĶ‚Hš'Ļõ,7ģĢČu1‹Øi´„}†ĮåqíĖČ/h/ÂĸŅqĸÚáCByŽĢ íÔäĻī}ĖĐEŅ“Ü6øŒũŋaœ@EUęē…Ea ų!tlˆšnŲ UÕTŨl˛g–î­‹„Gl‹ĘA…æcŽĶØÂ@Ī4 W)4Yİ="O&*ĢTūäĄXūø:ŒlE PU¤Lxnėk:‡2âž"īĘ=ÁŠhÕ85âé1:Žã€Ķ—Ļâ§C,˛Î ĸ"û)éģŊ+/Q ´/bą´ &áBž{.6›Zå$Ŋ.Lé=WGĮ5?–áē´=ĸ‹{DŨs[ũ^ĸĮ+œŌÃ*˛0"Љb Ōv×§v,=d8žZãÎXeĀ žĘuŠ3NNķBŖåDD"ŅđŗFåw•€ÆĘWđû>wÚņT†bÉĩ‰wl#¨đāP‡8645›¨nn,’ų(3•šÆ&TNJyPN÷Ņį$–‘ÕƒEÛ6ÔbØįƒ&q[UKÔģ4BÉŅääԇP퓙\yĢįũ“ԇĞ"aų…¨i‡„¸ŋ¯î—Š }$>ŲUėhuOVv•~hs¨BęŌ‰!-Ō;Čŗ—k­+ą’FL­@‰^ŠŋYVúš!ČZâņXŌuģĻZ“ČjņhžĶZCĘRô­ŋA˙ ¤9|xžQ‡ĒtCW%8?Ë÷}CÉŌôōã~ļ˛bz‹Ü¯Đu”Ģ´p…cˆ5ĻĨƒĪ UdP•ŊN¨ō`Zr.ļz,ŧ R@†aY-ģeáv&qhōëÁĩ{Ą†ą7đũO( EBōé-Ģ7Ē<7!j)5’—ûg°‡oÕŅT´mđ&îŧN‰+Kf $>?bCėfČG9ū—.s!–ŒėvÕ<7=Í2\NĖŗŲëôä×ģÁ>ÖWĻėÆĀQ IšēˇÃjŌ)Dlyũ^yŗúd˜*Wz[O@WlŸhۖuR#Ėd!ŠJL°õP$‡9.Ë ¨tÃ*mŧ‡ĩ˛ĶĶĶ)ŠJ‘ëuqãūō™Ģ‘ĢÅģëõhP•™øvfc•&—͉•„ŅãhâÚZ] ”Ą”?›„O›ŠËJ°9ëDŌs\Wˇ¨kÕęÚÔ8´œ[ÁŨáÉ´ĄDzŌrDĨˁĘĐɓŌCÂÆQßāKļ7–`ߞŦ÷Ž.2(Uĸg]Ļŋ@’ĻŨcuŠ[dĀũ V9;×ŋĸzƒ}B˛"~r <Îģy´É#ÄĮ›Æ¯ũrœ?ö TÂ\Ą~ĀÁįöû >ĸHĘ&*ŗäõĒÜ_Iž2܂ų§F×ķÜ hzb'°Qsw xėCŋZ‰m„v5đ}!Zę<`đd“ļVB™mœSyģēv“ĨQJ(1Ÿīq"ëG‘Ŧ'ō:Ã7#ą<ō—ém˛ÅÄÄ“Ę0—’ †+‰ĩ‘ū‹ō0Ų#Îl†š°üx952¯ĩ~ ĢÔɘeûÛļVË~đC3|ąĸĒX9ƒÁ2á%gÖŊî¤øk~ãF]ÎÆš›ĄÃpātÍū,ۄ*ÁFÄo rjūžYú˛ęˇ¯ÖË —PōvĶcEt„kŨëëZĒá&Œ ˜bâË^ÛŨķįŦ]š~˙3Qlš‘‹tuîø¸ãŧéšŊíҟZ´ũERĘÔZxĄo‹Eb›Žŧôx güč¨ã‹ôžÎ}ŦS’J)”ēģļļQŨÚĒūumí7™ē€’\åĖģžJŦmãôļ_(ŽĻ*&ŌY’*AŒĀ÷ą3s÷ģ‘kģFŖi!ËGĮą|m‡G—ÃŪđĸJSŗŽ“|áōûÍ~ēķņsīōŸõ|j”$Ûc ҝ‘ XÍÃ^‚jôĻûí¸06_X¤øÁUļ”M°åqÆ‹ŦžŽ$Â0Ũlx"YqųŲ•š•Ûé+čÔŸĘ#šĢœ÷ ōE¤ˆĖÁčĢųŽ{cvœųԝŊ2ŋRČ zä)_p4•ŽŲ„˸nįJČ:ôĘˇšžČ2+ˇRx‡*į˜ôĸÚiˆĘØWŠ@f|ķ5‚ĘYžá sW —ÍĪŨ¸aäoÐxžŌvX>’ZŲt+ˆž27w‘ÖÛΠë>ŠრZoÂūJrĐl¤ÄZnwA]ž åų*(ûS`XŖĶ¯ŨÎÅ+…E”Fs†Æ’Z˜¨ú&IE$šŽ>ļr›E•!ÄRq¨J^? âŧeč%…MÁRųôŊ•ôl2- UšHJƇĒ Fn!ŅueĐ|aîb7NtØŌP•ķZoICã-%Ü$ĄąFI¸đo×5GŲlá=vˆČ.S#ČhŠ/ęũnĨ¨ß1ÃJūƒygB) AæčŽįx#2ų‹OÛ€6äDYŠ%šį͆$}Įũūáˆzīvaéą@J흌×e¯ƒī×RŠå[#_Á÷ŽCˆŧ÷áMxĘžģ˛RāF_†y I9ŋw<ôČ 2"o4û%”¸w‰Ž,ĄŸÜ2ÄŽC?rŨ7 S¸M3ãäĨ“˛*Uōlš~ķ95˛P‹īqõHéde¯úPÎLšÎ”âēĮŖM×i\`ngᯏŖÕÕ;éioË Ķ%=āŠČ7Âmã1šK+đŊûĩÂuüÂßäđŊ[aßŦŊŊĢąĸŽĨëļ­#’õAŠZķ-į};˛Ú¤Ķ&7Q˙[{ҞÛÁ ’Ü÷nduģn×öp†ž <^‡nģ˙hžÆĸŗ1IENDŽB`‚leptonica-1.86.0/prog/weasel8.16g.nocmap.png000066400000000000000000000031011506303110300204440ustar00rootroot00000000000000‰PNG  IHDRRI‹V. pHYsb&2ķIDATxœ­˜k™#9EO÷Wb!-QH 9leZZFÂ\ĩ?¤´ķå™ŲŨQŲŽ˛Jēēņåˇ/ūéņũGäc)˙×~“išwSßōOd ėø2™öû_ĮXâמ%¨/ÕņĨ=ÄXdë7{ũ?@ÚÕŅ2džLMPōl€L“€v˜—˛€­`+ĸ€Gɔøė_E¸vŦŪAØ-(Ĩˉôh @ĨĀ4ƒv šÄcJĪéöPš jIĮ iÔÄâXRJņî9ķoíh‹ŋ€”žŌĢÍΉGÜÆ|ÁŽõÁÆ3Ž#$Ė;"–šŦ´¨EŸy9A†ēŲō …N"ƒÚąŊŨ­M+Gũč~ąŨ˙`ėÜIŒÃIBf"ZH r^ÅHÖŅŽ7īsũŨcQR÷wĸŸÍ<ųöxõPžĐĨ[gŪßâhüa˂į“ŋ0v?+2¯Äq¯izcC]~XĒX‘5éķ™!4ŌEŠø8˜FЧ@=7@[¸ųq# bWēüž?%"Î;ß bYqá,ģBĄÛ3‡"ˇ7jœ¨čä—[Hí5‚QËÁ0zI’kŒ`ØüŋĮx8°—Y6Tsš+zz´˛•vĒ­ĢäāD퀸<Øõ Üh˜šûSîeēŒÂÎũ´ŊR‡Wž2ĐŠô„|ÖelôŖ]ʼnĮÃ?3CķŅßŗÕk]ēB’aZqÍåĩؔIŸÉ2‡áuõã=dĮę7ĢVĻ|Üq ŲJ¯˜[HfęAmĢŠc‰œßƒ –Š™–ë‡ãtD•ę×AŗŠÅáØ™žEfÔįļč2Sœi‡u]öhɓ­ˆ*ÕßEáaXj\™G$ĩŠpKQ“šũ™û˜ÚabÔå j­ļ™ĀūÄĐ[šg‹w–€pĪq`U€aˇŋƒÉIp™LēÄę–ŗK‡íG‡rÉŌ„ä$j2´$O7G´€4s1.2ū!)jÎDkÕ,ų´ĩ†ÍEíäÚ×=҈B‰J6R"ĸüŠĘVÃn‹˙đûĮ“āĪîP‚!čžUGvRkͧ–G…vbŠŗā¯îlŋtP´îxÅ÷ 9¯YŽĒ-ĀÚ´]­Ī†Ė§ü&.ŖĮ°^Ëōc™W85Ér*ŲR}nđ“­íÔŌ@Ũ'Ķ\î˜\ķd†däļ*%MĀZuāŊ:‘ÅHå9Ն…šģ#zCkš˜į=ĮhM騝æ‘ÖļÜĻiäu=Ë۴Ќ/Âō4=ęÖ´kĢÕm|š0dgF´ĀoWđƒU“ôÎjįJ‚ĩÅÜÎF4‘>§~Lp]âá"j" këH!a)§n•Rķ•ÅĩŪĶn/¸‹{Y<€™§QåÔĸ4ŌtižmĨ-ϊ˙ÎŋĖĨPrwÃĖ^)r˙Ė~eÛjKû‹xÜ(xKIÅ~>E­U>OĪžü¤Ë ¤Nũ‹;ŽHu¤5ÕĨZēí.Į^ũ…({^š×ã"ĖŖdĸļhJ?.*k ëŊŅH æåßaōĀaąh–|NįbņöōÜãoĶf™dŪ,ƒh˛’žiŽ Å¸–ĪŽöy{܋›~“Đ{–2™ÉNabjdæ‡Bđë”(ß°üŪˇ§'8€h)išH†¸s‘īŖöŧAÔ ¤Æ1OÜģbųąŪĪmPm‚ň8× >‘ļēü~žĸŋ$QÜ ĩˆ”/ē ĐĶū;–z^A´Ū9Tfˆp#Î÷:ĐŠ!éö2t‘‰Œ 1FgŌ¯‘—Jļâ(UĮšÜĖø_"ˇõTY(‚ ƒČ6u"›¨!ˇí¸–e)ÃīL•áhÆNL–Ō:#Q efx'Ž"ŗ‹¯Ž&oŦĢAüšžgÆ%4÷7i&DØ*ž 6ģȖc˛Ü‰™¸–ú[eŊî×ÚwũC@(”ē5CÎĮ8ĸXëKQŠHĶXÍ–F ÆØ_–Lč*_Žo pi¤e<ÁĄIo`Gj*_"÷ęrƒufļfR(æMVcš>[š|îŅ,ĸFLFލ|ø} â‰ĖDŠĶ­ÎSY•7ä~ŽÔ,ወĶČEĢË탸ôxæwS<ÃĀ&ŠŦØíŠpˆôRôŪ‰ĄÚɜ˛Ŗ¤\Wšmņ´h1āXįäč Ü¯@XŌ2.´}ß^N—;ŌŽĒ´æVŠ*ŅÂÄŅ3Īå"&glƒ”|~ņG,÷uÉšVö&Šņ†„ō™ōėĖō‘q ō8„7 Ņ$ëeQëęëHv?€(Ū†MÖđˇŧS&yš@ļŽ[%˛ąę1|Y0N?ãאÁLhįZī“á ĪČúgä˜×“(˙ės÷ÜLéäž#oÎYË>ë™~äķ9ˇā:ę„]ĸ#ĶvLũôCŗãeDÖš2Š˙´?AZmPČø’ŽPΞX”vãЎ“A Ȝq™=ØØû„~Ã$‰•tĮēXŊßĨ!'•§ãeA°S N( Ō†œ˜Îë˛!qj¸wˆ*é e°†"š#} _ޝuū†Šŧ6‰œ¸#Sõ8hH|Ÿn~Všö”×Ŋâ†ė<ņ¸æ?ĩ'S0į3^FaփčhæŲÔĢĩWßcYęt´å'ž*RđVrą¸đEœKU)ĸŽrm'*œp6ņ‹eĘ$ė—ĖiņdžÖŦmŒ°ė-x–CÂsX”yč[8ŨËëˆ2vZ,Û¨xĖÅÜ$.~LÆÆCeųåHČí1ģoÃĸ:>[ĢÛ(( š_‹Æ Z/žz1nKHĸÚķŦ-ÖûØ f•â7Îahu°|]މSi×ī¨]Ĩ˛°õ9Žeē—z˙e]Xa/™‰XOĪ}yy ŪėÜq ũ‘C~dÖ¯ƒ‡‚ŗļéąŧ¯lĪe#S:b4;ܒ^WmRŽ66zŌbųØ|Ž ’];ÖÚ‚ynΊĘõZą–×ֆ-ŨØ%-‚Č“lģ|—ĨŠ|Ž•wĪ39˛60¨dPŒ.„'@¯KeŠŧŌC¸Ã ˜ČčIdÃķ^á*—ĮR9DâŖZæ¤ŋQ9oƒÉ=ŸjMøĨō‹ˆzd˜JČ}5•ßą–eėž„fŒĖ×J ×Z†%ŧŊˇ2.´Ä8VUúįqš2#-G´íØ\QŒķíđqبĢŧ%:‡pëŊr§$ÅXŦUˆģÍ*Ō_“ė˜bkfA’sāÔ`­ņ r3‹ę8_ÎbĢB ZÛ×6ü’K,I(ŗ‚ôôŅ6Nŋ#Ft”Š€{ÉÎÂâmŋYŠJôĘöĸËIܒxÁĘõōūÎW)čél^'gŒäûk k՗ã¸ĩ‹–’GRĸ——ZDĪđėíŋeSnŖ‡üų&J*Æ+ļiiäNJ\BšĀod‡ ´ēąšxÃäøĮˇūۆׇˇ\ūŠ•õ<~øÉíߨūF5ÁíS,åq|ŧ~˙ģũķRÅ IENDŽB`‚leptonica-1.86.0/prog/weasel8.240c.png000066400000000000000000000070541506303110300172560ustar00rootroot00000000000000‰PNG  IHDRRI™ãņgAMAą üaĐPLTE˙˙˙!!!)))111999BBBJJJRRRZZZccckkksss{{{„„„ŒŒŒ”””œœœĨĨĨ­­­ĩĩĩŊŊŊÆÆÆÎÎÎÖÖÖŪŪŪįįįīīī÷÷÷īįį÷īī˙÷÷ŪÖÖįŪŪŊĩĩ­ĨĨĩ­­ÆŊŊœ””ĨœœZRRRJJ911cRR)!!!9c!)9BRks{„Œ”œĨ­ĩŊÎZ!„1!Œ{scRJJ91B1)9)!R9)œ„scJ9ZB1„cJĨ{Z­„cΜsƔkœsRŊŒcÆŊĩĨœ”„{scZR­œŒB91kZJ”{csZBJ9)B1!!”Œ„Ŋ­œZRJscRœ„k1)!ZJ9{cJĨ„cRB1Ɯsœ{ZŊ”k”sRĩŒckR9ŒkJ­„ZΜkcJ1īįŪ­ĨœJB9)!Ɯkĩ”k­ŒcĨ„Zœ{RŊ”c”sJÎŊĨ­”skZB”{ZŒsR„kJ{cBsZ9kR1įÖŊcR9Ŋœkĩ”c­ŒZĨ„RscJZJ1ŒsJRB)„kBĨœŒ91!cR1JB11))!B9!{sZ÷÷ī˙˙÷ÎÎÆÖÖÎŪŪÖįįŪŊŊĩ­­Ĩĩĩ­ÆÆŊ””Œœœ”ĨĨœŒŒ„{{s„„{kkcccZRRJJJB11)))!RRBJJ9!!RR9JJ1BJ9÷˙īįīįī÷ī÷˙÷ÖŪÖ­ĩ­ŊÆŊī÷÷÷˙˙ÖŪŪĩŊŊĨ­­­ĩĩœĨĨZccBJJīī÷÷÷˙ÆÆÎÎÎÖÖÖŪŪŪįĩĩŊĨĨ­­­ĩŊŊƜœĨ„„ŒcckBBJ119))1ÎÆÎÖÎÖŊĩŊ­Ĩ­ĩ­ĩÆŊÆB9B1)1×Wđ‡8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ũ.I °IDATxœÕ˜ũcwĮī’´MŌ$MsĪšä6™uĖ˛ °ė›ŠLŨŸ6×´ ĖX¯mčēęփŌéN 8@ҊŒ Ąî‡cĀjŦē­č`ŽŖOlčĻŦSųū ~žßģ$w—ėķ“kB/ÜĢīĪÃ÷ķũÜQÔ˙…E|ēO×uŸÃđIãX„ŋ^¤ŸÆzņ´yœŌOéĪ:ˆÅÅbąÉCÎCƯŧŊŊFĨw¤ƒŌ„(MœDĶ&Ä÷~§<ũ´ŠĮäI¸æĐ¤ķ'Á7“pđĀ&Ū$ũČøŋ4Š(VäéXY;dX-ļ(Ö( š]~Ί‚`ĶīLÚŋT#ÁĄy"ÖXŨKŸœFAX L$š(ˆ—m*}W}<Ķ0ėų<Œ ĄŸŠj7 /˜FfgĒ+=†Đ†‘€‹ūՊôÆã1|”ŧđĨ*8}[Õ´=cĩ/ĩŖôĒÛKĄ0F^mS/køĪU’ėx_bWû*A8w9āNíÔ4USŅ)@^xŲĄ__ž‹J¯Ę×@ÆŖŌÁsî_r5z‰į/{ĪlU1QëڋjŽƒĘv• ãcˆ’Ā_&"˙)‰Œ{‹ļ/ÁōAWĻūŲĢeŌîđě€ŒÛĪķĨL% \/JIqV”V×÷ĒZ×ĀQē aŸáuG7"qķėĸSœÚá‹×EåĪfšŗĸˇrĪ]ũ}4M÷ w ‚ĪØī†ŨÂ,‘S%ĪKXƐōKLČņ’ ZYŽåř „RC{ēØ.ú[PĄĮËiŒb a㇉Įh4ŧÃZˆ<¨ĖĐgˆËWßļ#ŖN (dY q ŪŗĶīEЁUëÕō4‚@Į„ŗÂņ•BŒR( 0& ā2ĀXüv‹ü”mW53%ˇ{ĩ!z!´÷Jb)A!L…<į]~Ŋîõ:n59WˇV45˙žk¸ßŒĨŊ.eƒHáE.‘7Üf?d\ [-85Uĩŋ#@'*Y2ĨP&5&ņ6Ãņä˛oūgk‘cũÔēčŽ¯Īž ø˛QŁ$úāˆ‰B‘G˜zc¯jҏcëcđī|n/ũsCĨ-–Ū( ąķŠ,XÎá!ŽYŽõ'2ƒÛWwļŪ™ÚŸÚ—Ú›Î%čö æA9­CO‘X^°ĢÄĸejŅîķø q›eCôī]åÆrÃûž Õ>œzrÛŽŧ÷;úÛų2ąŒ‚HX~ļ0r$lū4;]CöŖũkw€ĒôXĻES{ÕBhŸDëÜ6”¤$Cz‹y6rÍea%ÖVĄū-wĶFŠ×´Ē…Üä–Ä/Kc HŠŠ‹l„!ĢÅ ‰wžņĶ}›ŋũĮ’fKōáŊ­‘=^NĨĸ<ËāĀ™YÆ?<ŋĐīękŨYČļJVL~‘›ڍ6”Ē”p…cˆ5 ĸÄsįŲ,ö 2šŅ),UnŦBKŽ䟝 R‰ ¤€A’ĸrTÂíŒņĸī+^Ûbk-Eß„Ē|Ü<ۂÔ%Ō+ĸR~TyF„°!wãF­ĐyŠk°x˜–s;ۆ.âÎĢ„ŧ5Œ‰ĪL1âEém>jĨŋ™įRWJԃ‘ņ8đVVVxŧÕá@…˙’ëÅûz­}Ŧ Lí-¯F%HŌԍ–{ĄĘˆĩvīŲöPfm9UŽt ļ+]ŨąQÄLĸ,KŌl„0s9„h:1šî˛E˛œãšÖ*)ģJīaQeeĨ›ĻsDdw×@įēÖŨmĢWlęîrUm+ŨÎdŦRôúĢÃĩ!#r5 ŅŊ=]ĒĨteÛãÃđ×Úē4ÕZ Ē–ō•ėãrŅqž}žŪ›Éôėk€–ŗŲē;Ŧí6”ØØav¨Ô:@Ĩm‡ÔÉi a ķŌkđ%ƒCi„†ģōWoīGí!×ߨ0LE$MŊw•Ô%/‘y÷7Xå_)\‘Ų^K˛2pįđx#@īęĨ‰ã–McHį^ĩ9ޟ3 TÂ\Á^סĐg0øîũ4IŲhm=ų\ĨV’a€´ˇ`ũ˛7<—pĒŨaŲ¨×lÚŧôęvT´NÛŽž?ė,u0x ’I[ ĄÔ Ί6˜éųEēš}!ĪS-Ebڌ"YOäŗMŸqÄrĘ\>ĸąÉŖŖũíŠū3š÷=ŪP8ōlØõCuu.Ol{Čքĩ­íœæĸ/ÛUōdĖ’Ím›‹ø¯ģÎãōčÁZ–eĀjÜ0´^Ž­ÛčNĒšæ;wįĐJš›ĀÃp ÄÅÂ,C ËL·ĮŧABÍīy 5ôDÆl%F­o{ø Ę}ēŽ —ŅŽuŖ¯sy(‡›0ļį&üūųļÛbÎYŊZ×ēĮûūf a¯c&ō>SžŽ‹ųíŅ€žįæŸâ‹ĖÅēĮžĐļw@lī]˙ƒ€§`{ƧĻbĻH8n蜏u2LȍÚ7õôtfvíĘü´§gsĮ°û Ę=ē~ĸ<JIÛ8ŒĶcØæLĄ8šl8Qĩ¤†NĐ4ÂũXĸŋmĶ#ß#—Æ…ˆ×åōųu‡ã8–oËļŅĨÎ5ˆĘ“õ”’ģū ˇ_Pũĩ_ŧįūûŋ˙ãōĢų€{Ėãcd*ėŧáƒņ?vĀ"’ãį`VÍ'(âz—zŖá–%7'oĨõâE2ãw7VÔüƒø‹3ūŠcõÄe+†é™ēqC$ ×Súg››šW~n9úČ Ģ#—ˇv"O•E$G_Ît}n&ī¸įKTũō››“Ÿŋ%yÃ1ˇđ=¯‹ŽŠČB¸$ãŧ`+Í!눁ŧøœU.^ļ´ų–ÍÉéšjOÕņ kßiH,ˇREŪܸņ25‚Ęz—-K&›–'oGފāUjųJ9$ž¯øņš|U’ė0lMãģT-ēaySĶbRHQGKoø`‚ægāíČ W7>Sg]ŒwLĸâŖh Ô傞—q˛´.ķ|~ÄŨŪēųƒĮāžãÄ žúû xķĻš9šbė5;O zPĩŲ;ŽúxĮ2"o4Ķ!”ØsĻoëēŠĒņCsĨ¨ŋx–&WŪ°´< T`Rf™Ú€ĪÜՅæö˛öXž€ZĖ~ČB(™ĒÜ֖Ėj-u’RN^¤¨sc3”’Ŋ˛tåmMKŧSĮŽŊYUilŽĒoņ4Ŧgímãˇä)­OĪ?¯õ]‚ˇô^üėÖ÷/]×ßēä|Ēë° u4”IiŠd}œ›ãĘÛĖĮœ7mJšt •Iōõĩ Qyōå0ãAV˜m6`Å×Č`……yŨä‘ęîė&11?û€ë"…9áĩ‘ģĶãéhuđ˜w&ŸÚØŧšģÅWĀ\ÂÎæöąĄ“—*ëáŊ8ši–ųž‘HS8čËĮr!ąDęsŗļ͝Qævlč”ŦlsĪešų†ŦFo„Ĩ‹kŽžîRMÍ"âkâ=RÔđcÉÖ!ũ¯‘ĸË{WÄãËI_Ž×R€Čq­īaZvŧRY[ˇī r[oœeåIĨļVíŠ!2(ėâ.Qz¤JõßEõΤe_E~DšS°.ŖČ€.¯´nÔ'ƒ‘€aDõ<´‹Ī\~+TîŸĢ˛+Ÿ—‘[RØÅæīN‰% ¯ąÚÛ\å0¸P —ŪÔO\íVb5čĒÎۄ…IlÉįM$~čÃíųËéë÷ŋgĐ´˙ņ+ū›ČëįŋĢ˙‘ĖÚp@}IENDŽB`‚leptonica-1.86.0/prog/weasel8.5g.png000066400000000000000000000016371506303110300171220ustar00rootroot00000000000000‰PNG  IHDRRI™ãņPLTE???ŋŋŋ˙˙˙w7AÖ pHYsb&26IDATxœĩ˜‹v!Dö˙ŋš2žÔMRÛĶ“lvoFPžŸđHϝOHōžLôįfđ„ˆH<ЈņWnŠō0†§C )¯ÃÈ:&ër`žU6*eÎ| :čd¨!5úŽâ×|Ž’‘ođū%R/ĖĀI!=•ãsÎ5’‘—š҈%î?uŪ’šõĒQŦŒī‰C(K’ 1EÁDž%"~=ė€ŧͰ HžDŽ@­… O*ä…Äfšnāō Ԑ'mUd3ŌúÄ+•ąxܔédüLœŗR3™6R\`­įēŌ¨Ų+tƒ—¨Ą šh’Û{ģŖâ-ä˜L›—.ŅĮÁi;žz¸%h*H$ČI.$60,”ÉG>RV¤\‹Ōęęâē‡ŦNąĘ$WĨŦōœwraĻ*Üę+Čš™¤æŌ•¸ä!Ĩ”ę$uGk—=dv•JŲČZú°,1ėÆÕėô¤”—Žj[ šW¯÷H|<ȓéŲō‰Ü ÛÄA6XŊÆV0NČēpŅX¤EF^ŠúWWĖ䒒ĩüâķ‰g-)#Ŋąfâ)]zZ8ĩwą4{V=!áuløjÎU—O$ĢmL­.ŸB‹įšŦoÎfpęmųoAâ‹:””ŧÅzöö—f_ŽkYˇFß*ÂÛ ē@ļö/)oä w"ßäæRyŲ‚wH5Uį ŧS¯NŪ¤Į'R<Ąæ)‘VœņöÄ7"ųl`¨?tå%ž,[Ō%YˇlUõÁ´M´AƉŖģĮßH„yäŊFjuk%Bōû|y­2íUįŦî#$#–œwĢŪáõåđ“äGøR%Ã9ŗ…ž@ĸžõeœ7[0ˇm¸Ā(.ŪBXuŦyŊA–V $%öŠ<ĢD/lĀŌyŗĘ3’ĶąĻuo€tõļŗ#);¤ÂÂĐĖ$Í[ˇ–ȍ 2-…\›ē3„rÍNŊ¸EĒEæ;€Äbš QŠ›…ĸcĸ7ŊM?CžáķšpŠ[›æ–OˆhäÄ9úđš*âļų<5ˇ_üãvB>ÛSéåxfä×ĖgEūvü é@FnŧqëIENDŽB`‚leptonica-1.86.0/prog/weasel8.png000066400000000000000000000030711506303110300166020ustar00rootroot00000000000000‰PNG  IHDRRI‹V. pHYsb&2ëIDATxœ­˜mšã8…ßî'j!-Q0„BĄ áB ˆBAč!ûCrâ¯ĖĖΌn’+ÖŅŠī’ŋ=ųˇĮ÷‘Ë4˙Ŗõ&Ķ0nĻžå/d l˙2™ļëw—}LņsËÔnÕūĨ-Dŋɖ+{˙ßAÚŲÖ2d^LM0OäŅ™&3m0/§˛€-` ĸ€Įœ™ãŪ.E¸6Ŧ>AvØ5(ķ<&ŌŖ&Í5†´ũ#Č5  CzMׇŌhPæ´_ņ§Ö@MLž)%`ž}0€ņˇēˇÅŸ@J/éU dĀ#Ž}~Æ÷Žuaåûæ ‘ žĒlŽQ“îy:@†šŲvō …čN"ƒŌ°ŊŪŦ Gũh~ą^AĐWn$FaŽ$!35$9/b$kh{‹›ˇšöną(Šų;ŅöŒˆjž|ŊŊZ(ŸčŌ­1oo uqÔŋØ4áųā/ô•;ÁŠŒÄ;qÜJ>ØP'‚īnU,ŽČ’Œt‹ņČ*é$E\vĻ‘â%PË P'Žž_hļ3]~ßîĮ•ąŦ8q–MĄPõž]‘•ë5tđË5¤6€ęÁ¨igŊ%É%z0Ŧ~o1le–uŜj,~BļĐNĨ6•ėœ¨cî_ģ=3wéĪ}NŖ‡x‘xÚVŠŨ+ߨ4ˇ„|ÔeŦôŖMʼnĮÃī™ŽÎqīīŲĘš.]!É0-θäō2ېH÷Žd™Ũđ˛øņ˛a5‚+‰U C2N"äMŗÎ­bŽ!˜Šĩ-ĻŽ)rū ÖYϞgŪY.ŽĶ5?šíH5vÛvČô*2Ŋ>×I§™âH“ØŨwiz°GMžlAÔ\üSî†ĨʙyDR-ˇ%ŠÚ_‘š\wŊö(gP­Ĩΐ ė Ŋ~´xc ÷7Vvũ ˜{/ģôÜ­[@,n9ē´‹ŅļuØQ!§,MHNBĄ*CSōÄ~qD H#'ã$á_IQr&j-fÉ× ĩVlœUŽ}Ūõ(”(d#%"ęŒŋTYKØuō~;ãxüÕJ­pĪ*=;ŠDĀp×ô(P,uüŨmİ@Q›ãÍ^šČyβWmV‡õQ+ø0 Ôe>ä7q=†ĩZ–Ķ¸ĀŠJ–Ķœ=•×?xŅŌNm! Ô|2ķ “ ažĖŒTMïíx/NdŅSyNĨbaîîˆÖĐzžĖķ–cÔĒ´oƒķHK[nðō>že¯ZUƎayå KÚĩĨčX˙4aȎ*Œ¨_Ī2ā…E“´ÎjSėK‹šž¨"Ũ‡ļMpę]âî j"&fzë-!…„ĨœšQ4Ī%ŸYŧSk=íú€k1šĪS‡0ķÔ̜jĖ•4œšgŨ_iŠŲį?æR(šģaæožå~Ī~f[kKۃx\™Ą¸yØ×ëĻ(ĨČĮáՓtš‚ÔĄajÄŧô´Ļ2K×Ía`ßĢŋe¯Cķ˛}]2•1gĸÔ¨J?v.(+k kŊQO æķƒæž6YTK>ĻcąøxxnņˇjŗL2¯ŊŪČæüõĄ]8+ũXļß;ęũú¸U‡āį1 ˛üKĮļ œF˛’ˆĐ×^ŸX~oKÃ@ÔÔNĖN:¤ŪíHņQ#Tb8ü ˇßÎX^–“âą Š 0Ōą>兴Ņåņˆū–Dq5T%ķ“.ô˛˙†Ĩ^GEP%-g…"ŦĮĀqÛSƒ]ė<ņîÕž@DM.íëKƒŒSÁ/ĢØ™}ÔMÆŖ—QqĨ),NUy{0æi_kŊ"[žÂĻ „aG§š~ļ —ˇ­Ũό tMILÍ0;Č:•~_&íSŒÛø(ŖO× q‹/PjK˜Ŗ*ETYūųŪe뀗Õķ”bWe‘Œ2B•ÆŸĪ_Īį¯_Īķŋį‡ųõëņ?IÜĸ "ÍIENDŽB`‚leptonica-1.86.0/prog/webpanimio_reg.c000066400000000000000000000066051506303110300176650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * webpanimio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for animated webp * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests writing animated webp files from a pixa of images. * * webp supports 32 bpp rgb and rgba. * Lossy writing is slow; reading is fast, comparable to reading jpeg files. * Lossless writing is extremely slow. * * Use webpinfo to inspect the contents of an animated webp file. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 niters, duration; PIX *pix1, *pix2; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; #if !HAVE_LIBJPEG lept_stderr("libjpeg is required for webpanimio_reg\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ #if !HAVE_LIBWEBP || !HAVE_LIBWEBP_ANIM lept_stderr("webp and webpanim are not enabled\n" "See environ.h:\n" " #define HAVE_LIBWEBP\n" " #define HAVE_LIBWEBP_ANIM\n" "See prog/Makefile:\n" " link in -lwebp\n" " link in -lwebpmux\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ lept_rmdir("lept/webpanim"); lept_mkdir("lept/webpanim"); niters = 5; duration = 250; /* ms */ pix1 = pixRead("marge.jpg"); pix2 = pixRotate180(NULL, pix1); pixa = pixaCreate(6); pixaAddPix(pixa, pix1, L_COPY); pixaAddPix(pixa, pix2, L_COPY); pixaWriteWebPAnim("/tmp/lept/webpanim/margeanim.webp", pixa, niters, duration, 80, 0); regTestCheckFile(rp, "/tmp/lept/webpanim/margeanim.webp"); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); return regTestCleanup(rp); } leptonica-1.86.0/prog/webpio_reg.c000066400000000000000000000117741506303110300170230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * webpio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossy read/write * I/O in webp format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in webp format. * * webp supports 32 bpp rgb and rgba. * Lossy writing is slow; reading is fast, comparable to reading jpeg files. * Lossless writing is extremely slow. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include void DoWebpTest1(L_REGPARAMS *rp, const char *fname); void DoWebpTest2(L_REGPARAMS *rp, const char *fname, l_int32 quality, l_int32 lossless, l_float32 expected, l_float32 delta); int main(int argc, char **argv) { L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; #if !HAVE_LIBJPEG lept_stderr("libjpeg is required for webpio_reg\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ #if !HAVE_LIBWEBP lept_stderr("webpio is not enabled\n" "libwebp is required for webpio_reg\n" "See environ.h: #define HAVE_LIBWEBP\n" "See prog/Makefile: link in -lwebp\n\n"); regTestCleanup(rp); return 0; #endif /* abort */ lept_rmdir("lept/webp"); lept_mkdir("lept/webp"); DoWebpTest1(rp, "weasel2.4c.png"); DoWebpTest1(rp, "weasel8.240c.png"); DoWebpTest1(rp, "karen8.jpg"); DoWebpTest1(rp, "test24.jpg"); DoWebpTest2(rp, "test24.jpg", 50, 0, 43.50, 1.0); DoWebpTest2(rp, "test24.jpg", 75, 0, 46.07, 1.0); DoWebpTest2(rp, "test24.jpg", 90, 0, 51.09, 2.0); DoWebpTest2(rp, "test24.jpg", 100, 0, 54.979, 5.0); DoWebpTest2(rp, "test24.jpg", 0, 1, 1000.0, 0.1); return regTestCleanup(rp); } void DoWebpTest1(L_REGPARAMS *rp, const char *fname) { char buf[256]; PIX *pixs, *pix1, *pix2; startTimer(); pixs = pixRead(fname); lept_stderr("Time to read jpg: %7.3f\n", stopTimer()); startTimer(); snprintf(buf, sizeof(buf), "/tmp/lept/webp/webpio.%d.webp", rp->index + 1); pixWrite(buf, pixs, IFF_WEBP); lept_stderr("Time to write webp: %7.3f\n", stopTimer()); regTestCheckFile(rp, buf); startTimer(); pix1 = pixRead(buf); lept_stderr("Time to read webp: %7.3f\n", stopTimer()); pix2 = pixConvertTo32(pixs); regTestCompareSimilarPix(rp, pix1, pix2, 20, 0.1, 0); pixDisplayWithTitle(pix1, 100, 100, "pix1", rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); return; } void DoWebpTest2(L_REGPARAMS *rp, const char *fname, l_int32 quality, l_int32 lossless, l_float32 expected, l_float32 delta) { char buf[256]; l_float32 psnr; PIX *pixs, *pix1; pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/lept/webp/webpio.%d.webp", rp->index + 1); if (lossless) startTimer(); pixWriteWebP("/tmp/lept/webp/junk.webp", pixs, quality, lossless); if (lossless) lept_stderr("Lossless write: %7.3f sec\n", stopTimer()); pix1 = pixRead("/tmp/lept/webp/junk.webp"); pixGetPSNR(pixs, pix1, 4, &psnr); if (lossless) lept_stderr("lossless; psnr should be 1000: psnr = %7.3f\n", psnr); else lept_stderr("qual = %d, psnr = %7.3f\n", quality, psnr); regTestCompareValues(rp, expected, psnr, delta); pixDestroy(&pixs); pixDestroy(&pix1); return; } leptonica-1.86.0/prog/wet-day.jpg000066400000000000000000005703361506303110300166150ustar00rootroot00000000000000˙Ø˙āJFIFŊŊ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙Ā|’"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?é;iy z:ã:É E<}ÜŌpΌŌAĀ4ĀvsÅõĨUfšVÎhYNFzv üŊE(;Ž3Iøô  u8ĨÎ[Šւ8 BŗcĨ žĻ”Š@phĖ9Í/QIÍNĻnØ€äĶÜôÂp2¸ ãšB01@ŪFi@õ4)ÂŌįœŅ´SąŌ€ŠUĀôÆëJ í¤1­œū4ĨyÎhÉcŠĮzŖœŅÎ9ĨP0h7â•Đ”Ĩü)ŒŲ"˜ œŧœb”¯zHc[!ŊŠß(ÁÅæ—ąéLBcƒŠP¸įš€q@ < i\€Ôæ8¤#š@ A§qԁ…¤?z˜ S 9§đ—$ĐHĒ;͈ČĐE  S°E0ä°æžãš`FĘIȤP?x—föČ4€7v"ķvéHØĄsëLō) öœPNxhāRō*SKĮjo;y¸Ŗ>´œš@/&‘ūQ͚QĀɤ'#š`7p$d́ČÅ5P4ō0}Š 9¤ŨÛ™9ö¤#ž´ y\ æ˜Aę <đ94™\â€sÜŌąÆ8§HpzšL)yÁ™į₸PFHį­;9#4€zR¯šqĪjBx¤$õíIŒŠ2AúŌ2÷ÎiÅM‘@.ˇmŠs)BžøÅ;ŒRŦ7ŠãÁ7ëIˇŽzöĻdô{“Å*n-ķt§ņŒb€ĒO9§ šB9ā͆ ãškbžz į  ˇĨ#žé6ōqJ~÷JRpI͘äšQģ=8Ļb3ŒŌĢąÆW9™ˇ(oJ\Œ‚(Ī?Z@'ƒHų"œĘx ā/z`1K` q$œqIœ‚).GZM§<ã™ÉÆ)Ā6iF3É ØŖšį"ž0:ĐhsGĶ’zŌāíÎhG\Ō’Å"r)å8É Œ Mŧ柊k(Ŧ¯4ėm^iԅA^´†Fđy pqš`R•œĶįŠP ԁÅ4“Ú€ĄÍ89ÅŽ´’p(Žæ“kS˜įĐĮŒb€ 曚˛E(<K´†=čĘ2iNÍ"€8āĐomīHNxŖhŨšyĩ0ķŪ†&œFGJ`㔀ZF)Ęšäž)ƒšv)1ĪžM)84œHéKOJ@=…!ž(Ųž´¤mę)~lõ“æž8ۜæœÛÍ0ĐĶ[–§57RŽ4Í­zp'€E ’N§¨ƒA\)3Ī"€n !$\ã¨Ĩę8ë@ÄFĪZy˜į&¤íĮmQŖž´šn=éíŲZz1銉A=*@ë@Į“†Å(5 8Š+×€“pĸŖį֊eTsNâ„OZ~Ū:U&ŨÜã8Á§ 5€LAžĀķHT°4rr)à œšU z\sžÔĖsß4ā1švÜŠyRqLøIæœCzĶO0&H<ŒŌ–Īn(x¤ĮyφįĄĨۖ4mã“HTqHsŽ)˝´āxĀĻ‘žiG'ž@#Ļ(0(éۜAéMcĮ€[ÔRįŽ)ģOSŠZ@yÍri@Č4s֘):æž1ƒ@94ÄO—æ^:RņÍŌ€ví €Nh’ øųˆĮŊ(@:\dRĮzxéõ¨ĀųšPĀc=éĮ‘‘HČS@ Āb)m8æ”`šs{PrE"Œœæœ R {RXüŊiĒ=é˜PĒ4ĀŖ¨úSŽM49í@ „7jFR§8┧ëNŪ6Ļ€#ÂąÜh'š3ŒuĄAôÍgŊ |jLŽE €Šˆd})UšÍ8Œāb—f œœS‚(=iÁÉéK¸gĨ0 9Ļų˜'Š\dæœĀԐÄ0âĸmū` Ūõ2°#î␎[Ŋ0ŧæ‚û—OJxNsÅ!‘2’8ˇ=éIųąŠ^LD`ļHn”õPŋ^ixôĨ`įŽi0&”¨¤ 9Č ƒ“ŌœĖâšdŠR0)JôõĄWææžÃ=čšãœfžpzRmųŗ@ ŲÖq֜ŲaSր𿆔 9Ĩ$‚€Ŗ ⁐9§Ž)­@8< BwŠÂæō(wãšhn´œŽp(įnH§ɤÎî;Pq‘@ģqBŒĐŽ˜īM>• āôĻíšLđ)@lƒF1֌ŌÎ2)Ŗ$`ĶąÖ™‚O›0}ŠIöĨúĐp@ÂŌ`ā‘R…Īzc`S$õ¤ įŪœtārsŠ@4p0i@ĪZR3Í)ė)€×â—ĩ;¨Ĩ<Ž)ƒpāŌãŠAšR2sŠ8NsŠ“¸•})ˆŧsJËģĨ)\ņJŖĀpĀTäei˜PyŠ0HÆāQNâŠC2†x4âÜbŖ9§€3Z ÉíHx=iÄđ@4*üžôM8ĻiŧƒOÆZB§ Æh@Ā õ§)îO4ëLrM!Éãĩ)Đ9í@ n˜ tÍ;8\ĐO4JB3šR3͞†ãœPĮ §hĮ€iwŠĪ4Ķšg–ŦŲP™âž´3Špāķ@†…É<ŌãzƒJ:ķ@ 9¤n)ÎrxĐš c€üiHãŠEo˜ŠRzĐ˜ĻžŊ;vE7ōhš%ŠÄIJ\näš`(”FŠ‹ Sv‘ÉéK͑ۀžE/Ŋ{Ōw žp)F)( iHhč)šČëŌ€`QœšA–&ŦO\b€ļ{Sˇ P04Ö^)R€;Đ@Łš2FM5‰#"ÜQœņJN1Ā h=č'Ž”îĻ›¸ ûRēšPXŌoŨŌ”p:ĐK=)Û˛8ŖG4ĶÔŋÜŌ‘ī@‡š1†Ā‹“N=}é€ëHFzQœõĨÎ:PTÆ)x^(<ķšÉäs@ ֎Ôi§!Š qQŒŌ2Ōį#¯Jfyë@-Ķĩ;Ōgŧ• Î9¤ M)ÁhÜĐö§´fƒŽ2h'ڀķÍ'8Īš¯JO—ö IíJ8@āŋ¤dæ€Ā)œ8ZŒķR”€œŌuãڗ4r)ˆAō“CuR“ĮJÁāRšĪjVäR¸gŊ7qĐ įš]˜ëJ¸c֕c@ b”°ĮŊ@į4AJÍÁ  oSŽ”ģqÆiHúPO<õ bt NixŖŋĐ ŠhÉëNb;ŌgրėRž‡Í;g4Ö9PŖ—māõ =:S^”íüŌÉé@ )ؤ š7gĩ.8æ“h'Ļ ÷4™8ĨÎ(ÆFE7$u§šL(ŨíJ ãĨ8V pāzSWšiS¸‘MVœĶ÷ri÷¤“ÔSōäRōš@ :ĶŊņNĀ“HAÎhŊhw`âšÍOۓ“IØāRAīFyëM HéJ:įŊ H9ĻwĨΜ ԃIH Ô1ĘķL,j` ÉÁöņAúĶF{õ¤įm4ķõ§GZLuc@ĮŽôâ›ģ'&Ÿģ+Ō€€9ĻŽ‚ŒœāŠ3“@äpPŖÖ—¤#m}h īÅ0’[ŠPH8Į4 vzņH¸Í $’ <0Î8 @02qFĐph$‘ŠĘ.2øÅ5Ѓ֕s֔ôį‘@ \/Ŋ5ˇ1ĘņNÁ íNcë@ČņīNęŧĐG͊Q@ HT‘ōšŽ„Š^qÁ í${Ō4õÎhĀô ˛@—98ĨÆ(p4CqJ4îĸŒ…"œ@ œE49cí@@ "œ’qJXf€cC§ĨžÂĮ<Đp§ķ`ĐŧšB>n) RšÍsŠLˇ ô ciˆ~8S õĨĪi{PGčÆy ãˇZQžF($ņHFâŽqKœÆi 6î)TmúPXã@9Z7o9§cĨ曒8í@ €zĐF(@8 b2ƒÅÆ)Îh'Ž1LCU÷§ā <͎2G4†5×ԜŖåÅÜ3Ō“Ā RŧRČ§ŠB@šby*ļN)ŨģRŖŽĸŒsA8aéK͚&ŪsԚT†Ī4îX朞´ŪøĨûÔætĻ*࿀W#HI š cq4^ivŒfšŲ§cĨŒRįĮZ\:Szą Æî´Ą8ĻÛ­K¸ĸ˜†`f†dQß4 õ) 1L éOHĮwJ@GÁj—å#éŠzS€4 P2¤#S€ēŌ0āõ CAĀõ dö§ @lv bã&1×Ĩ!bO(ÎzĐŒSąĮŌ›ÂŽÔ œv ųR€zLsÁϟց ā-3lņOۊLä Q׊P Đp)B₴Ũš=ięĢۚ æŸĀ<šWPE(P!杌ŒRqœÔ€ ĩB§€i nŠÉĻ´SãlœP°}h§bŠ@`¨Â|ÔĄOn”‡8įšpÉ<ŠĐ‘xÆ &ŪÔwÁæé@†íÃS—ī{P1ŽzĶTķ…ëL‘Ž´N}ŠØ'­/ZķíFri‡ŪāSü`ĶY€ëNÁ Ž}МāNôæƒĶ¯ŧÁ ŗĪJB9§Öš3ž´r)FqÉ ŽĀŌm9Á4ŧÅ)8¤mČ 9ÛKÎÚpn ;o ŠCÉÍ(ÎŌiš>”…ąÚ”zKŠ#ĩ ķŌ“–<ĶŗžÔwã4 1ړ9ĨčsKÁ C &įh*ip *Ž8í@ÄąÍ.ڑ8”ž”ĶīŠrį§­ <Ōæ€kM7žŊŠsÁ šŽ)š'Jãp¨Ālæ€ÁˆĄ7zwR3JyÅ1&—€´¤|¤Ķvž3@æÆÚ\´mį"”G4€E sAäâÂŌ/Ū$SœŅąŗÚžqŠLō84Ö$ b•A^ÚyPi¸Įzipô§8;~SKŽrh+ƒšŒdv§¨'­šųhqĮZhSž´ō3HG4†"€ RƝœ¯JbEcĩڟÆŪhœąÆE6œŠo~”ģâX‚)˜Ũę*NürŽE0#ōÎ~ZR¤Œw§“Š`'vEŽiŨHâ˜Ė7t ÄRa›šUpF)Ø=¨ФœŌAÅ8!æÆā“‚)[=;RāŽ}iņ@ 'Ō—q#œŠyQŠ7­Ojp4ßĨ0i sÅ/8¤\œĐA¤8u§qԜTi aáiž ?ŒĶO'4Lm4§“NܸĨ*Å1AīK°ˇqKŽÔ‡å  Tōh+Ž”ē€§Ö˜ ;`Ō[ڟÁ4‡¤€:i1n”­ŒpyĨ„÷ &˜Åƒ` Q‘N'&€GëK— §væ€{ RŽA攎A ¨Æhā h<ԁĪ&‚>oj!8ĨĨ|Ô­ŠNœ‘Kī@^:Ō āĐ ’y '­; c­ ‚:”MKߎ”Ķ׊AœĶ˛7RôëHĸ€=) sÍį rhíOZnÜS°HâÁ‰ĪĨ(éMÚŲäæĨå¤{tŠPíI´`vr8¤PíÍE&Ę)†1Å<”Ā„6iíZ7¯4ņŒqQŠĀÁ§Ŗ{P&8&zĐ^‚¸”›Ži€€üÜŌpO§”øPžÔ7#Ū—¨¨Û õ D ü´ģsÉéHŧ.iŦ͏—š`8¨ ãĨ8Š`Å?ļ &GzEëARœ<šRxã­5‰Å 8ķ@ Á#4iĘ0iëڀ~aHxR ž†€S@äv¤+Č4â8 ÁÍaŗKBõ'4dĪzož:Ž)¤¨4Ŋ¨[­&0)F3Ō†Žx gšv3Í7Ž (=hĨÛëJW Iš˜ÁĨÁÎh=i¸ČëMۚrœž˜ĨĪļi€›r1F0ŋ-!&…æ€īJ=)N)œo=(Ūų¤ši$đ*Š^ϐÅîA§psM$Z=?)æšHĨšSĀ÷Ļœd Jo8âŸÆ9¤ō ›Û­<8öĻcôg#8⑈ Bā¯Z@Ĩ.xĨĀšĻsœĐ”sMéŌ—;Wšäb€9¤Ā‚Ã9üŠ8Å=ŠN1īJ2F)ÁG8¤îIéNP1@ <iĀ` 04)$GN”u¤´§Šg8§įĪ&š;Ķŋ‡Ü ķšPšīH€(Æ)Āäãĩ4Ž)@=éh'PYģQô €i­´ Í.îp(ëī@t”gŊ8('8Ļ•Á¤ûsM‘Fp:ŌöĻOĨPsÍ.):@ 9Í;“FA'֑¸Ā0:Š^ZAĐ 9ÅņCˇ‹ĮŊ)äŌĢ÷@žF1MÃëN=hvî„ķĐQߊ1Č 4d1 Ōc“Küéƒq4ėm怎Ni1y§ 'â€p)qŠiëN ė N8™”œŒŠ ãč{Ōõâ™]Ĩ‹cœšŊ ¤-8rE4ģ%į8˜SæÍ=F͚ †( Æ 1y)C€P‡ĄNG'4Đ >”(!š4†IEĸÜÅč84IĻ÷įĨ8ŒU8Œ­!ČĨíK´1ÃP!3‘ŸJ x éHÉL ŠMŧõ iųp(›¸#āI\kFŨE9㚆čiIŖ)r˜ 9ϟ™ŠÜ”ë@¤y h šB âšFQAP4ŖŽ)@ĪZ@Fr(Á=h ƒŠ ¤͏ɤQ¤-ģĩ.I $fœ­&ŅéNĀîx āM&Fp #`‘ŠqPEœuĨzSxô§ōĐ“ÔĶsÆM;hÅFS-ÅqÅ8gŠRžJSĀĮzgCGZ1Îhx¤ÛŽsKÅ.ĶŌ€ŒŽi§Ž3N#Œ‘Í3¯4Ž2FzRīO<Š:b€Æ;Ԝ*Ҍ6qFŨũhžlšvA”}yĨŨĮLPô¤ĪErq@ädҏԅāúRįŠCœ QĪzv~ZEš4zp¤“JŧĐÅ­ 2hQƒ@Ƒ“O Š(ëHc#ÜúR‚sŠqu °ËdvGzŠÉé@î)qÎE(-8GZCɧ äScŠ‘:žhäéĪZ\ķM< Ķ—€1EIE-į< œT›€Ppš­ NpiŖ9&—w)Nî8Ļ!ą–ëŽ)å˛})0qÁ§(8éŌ€{J2Ŗ §u˜õ Cwœõ§n dҰRã'œRļ1šhojNĻŽz P~cڔp2)v–9 ž(úĶHÁéNSę(ŽyĨ"”Ž´ßĨ/|Rā…ÎsIךRX6JE#=iŨj0šU>”íŊéGjv@Ķwzņ@nô§ ‚)UqÍc¨ ŽzR–ɤ" Û ­ßöõÍ4|ŨhȝšL`uĨÉ$sN Å7f9Ŗ§JBØĀ4sޏ Į>”¸į4ąĐsˇŠhČë@`N)Ŋ (ƒI@\~ͨ͞Å!äv RKv§ķSsÍäĐ@âœŖۚNĨļƒ@‡äĪzgŠįné@ĮŽ)™ųēS‰8âšr0q@ņS˜ô¨ĪĖN)āŒķHtëHyĐß0 .F)€gæâšAĪ4§§`°āĐ@ĮN”¤’8Å ØĨ#´€e˛hUÉĪ4ߘļ)zŠ%ŗ@ÎqšQKœņFĪĩ) Ōv äš WëšĨ7ûԌˇæ€āö¤ķŠPUô Ī4âpŊ)§­8āĐqž´;RœãŠë@ 9č)V€}zŅĐ@Ã9¤aÍ(æœzŠAéŠSÍ'Œ7t4ė/LĶiE+#įm*žGJ_áéJ89 é)¤ŧRrMZn^OJ\v͌Rsģ9â€`dCŒ’)N:ŠEæ€Āf™ÜŽÕ!vĻ⠚EĀ84ōxšA'4îqšp”ŌÜãĩ9GĀĀž(sĶŠQĪn(Î;R–ŧ4)ÎxĻˇÍøR‚p=(­{ŌÆ†0yũiĮdQŽ(wpM1NėšVû´/Įz^qšNqN=qIˇ=č^”âiƒŌŸØkŖ=é¤Ķ‰æ›ģ<‘@c֏™{Ō€1šRZBhžźR č0)Ŗž)X OēhvŒûR¯9ô qž´ƒå$ @9€ĀūTÎū”åįĨ!āŽh œ“NÅ'lzSēS ĀΤúSģjMÊAÎzR…Å7 QÁ¤@ =iüŽi¸ųŠ€„ņŌ”c…zŌž¸¤đ)4w¤į4;LãŠw˜į4 _á pFhäƒMÜq@ ÄRÉÍ/‚E) PĻäcŠšâ€IžxĨC“AāĐ{â¤ÆqIīí@ö '‚GRcæ§‘@ܑ@5øŖ­!ÆiK0)í‘FÜķšh'4îhĀƒœ@$RtĄ†WŠĨGZ23ƒJN) œĐôäŽ)gĨ=J@€´sžiŲ'­"§<šqĐÔ¤֚xéNŽhģ€=(Č"—ĐTf æ•phęqKĀ \Sˆ¨ÉÆ9§gŒĐIŠs֔œëMÁĪ€Ž9ĨÅ0“œ Į¸4Ŋ äg4šķ@Č4+šSĪ“hĐģšBw Ō¤äԁÅ9p9¤ã“KøŌ~4ŖĨ!ģҜRƒß žæ—<âŽŧ␭ ƒž´āĮĨ5søSˆ€ā7Z1šTų<y¤0B@§†T%Ālĩ"ŒŠx=Í?ļi‡æœF) Lš)vš) Â-€1JsÚĸāTŧŽqÅh@ĒG"”€9ƒÉīHĮ͚8‚)ĘvŒâŖļ ✠ƒŒņ@ iéKˇ’)Ā Ǘ§ZbĒœ§‘ĮSŪ‘lĀ  OĶzö§ģéJ0Ĩ0#ĮŠx sI‘ŒPGsBAį4§ 0Ĩ |äPŽØ r9 ļ1J r)C֓>”zP`“Næ  MŲlP¸–#ĩ;=¨*¤Īq@ íŠfņŋmH:t¨š<ļîôķģRsH#šv:Píã4žÜŅŧŽ1C Đ!zqJ™×špįŊäįŽ”„íÅ?¯¸ĐiI ō‘KĮjOâû´Ķōt§¯<æ‘Æ@õ 1@hę t¤ÎŅÅ´€z‚iįMRGZIä8íKšbŽ• âÆė ŲŠ@ÁÅŗÚŸŒw ۓFÜsš:ĶĖ0)1†ãEM†`.zŠPI8&—n)p?Đ€ÛŽ)ëŒä fyÍ9$ķ@šlb¤Pj…˛ž¯ē˜+žŧP ˛˛äži sž(ü{Ō`„æœ1('<LLæœ9ĨÆ5OÍÍ&6ļ@§M.E"äĐ”„žÃđ8¤>ԋīNČ#ۘF <(ÆhFiWŪ“Œ’Mäf€v>ÔƒĀĻǐzS˛Gj ÁāqڐœũirE5œÆÁŖ‚2EÅFŲŨÆ*L)Œpāõ§į=(‡Ĩ RyĨšQšN@æ“Ŋ)Æ2i0"€ŒtĨâšīK’4 CœæœŽ0 Ü3ŠLŽ”84IĨ<Š7c  `ĪZi$;ŌĢqÍ!ųģĐ.ėāŌ’:SĮ4`g­ €xĨÁ4ÃĮCNÉÅ&ĶÍ7Û4đ}zĶHįŪ€Hâ€r)Į§JO€ā 0)ÎßjCúĐ ĪÍJXiŖÎha“‘@ „h9â•p4¤ŒqÍ7u(#ÔQž3ŠLäĐ1qŽ”å9“­4’Ŋ(㞘¤=0iŲéMëš8c›ÍÍ@æ—ZbįĻ)€„3>Aâž0O&Įn(#ڀĐ>QšnHlS‡=š î$ãĨ/QŠzô/$ĐļähÆŊ ĀÍ#sĪ9 #'§4qŽhô4„>ÔģĮĨŽ´€€php PÎiA&šxčy¤įˇZ9Å/ŊÍFT’ ?hÍ p8 gŽhƆ'ˇ4Ŗž´œv @7Aiz 9ÆhÆx&ŠnôÃÁõ§0Į&€/ɜŌīKE`s@9¤Ú3OĪĨ4ž´ģxŖôg=i¤x A‚zRž´¸ĮJhu ‚OJS(ÉíJŊ9  Ž1A?6qÍsM.Nhå‰íHI=49œsŒŠ'Š °uρÁɤ ‘ī@ Ę'Ĩ*ž:Ōã)ÉæšrhÄq֐ät4¸Ā4H ŽāO4ĄxÉ<ĶÎ1)ģ†y4ėŒsLÎOünúR.hëHH¤ŠāŌÜäņJšP08Ĩé֘ųE5ŽqÍIĮÖŖį4â:R(Ĩũi9ĀČÅ8ˇcIĮCAã¸P 4ŊE'CJ§Š@ QŒĻ‚9Å4ņÉĻy9Ĩ-ĪJi$šPx¤‚1šCĪ&—ũi úŠ`7¯­;ļi1ĪĨ<1HŒŠŗASž .ŪœĐ¸4)”’[=¨ŧqOīŠ2ŖŪƒŒdPIŽ(Ü{ŅÔc ^Ô”qJ) ę1@ ‘“KšP21H8é@ cJx"œ8äņH@lĐg<ԃ@QÅ &”xĨۚ`M­Ö€y§ f`ŠCP€2N( Í)8ό@ Ā4“F1MÎ(ÜcšL æ” B9Í.28ĮĨ(ŧP#ĐAÍ/^ÔqÎ( īGãBāũiHÅ7ŒõĨëJ0iS@ Í=žUĀëM 1ŠqäP;ŒĐ0{Rcš^ŲīHÔģŗÚ—Šh‌ŒŽ´œ…÷ĨiqžhFJŌÁÎiŪĀŌmĮS@ Îĩ8āŠCúPs¤H:õĄšúĶTqĪZ}îh'Ĩ0iˀ(įĩ!ãĨ;ädĐ&€tŖˇZRÃ8¸ÍEŒņO8Æ($gëK€M šJ3Î(Č@Hã֝ĶëIךD9'š/QK´ŠNyÍ4ˇÍÅIĀíHNG4‰×šBrp=hđīF9Ļ÷ëAlb€A ”Ō1Ī “Š f—vxĻķœP<ôŖžsJsM îÅ ÜR`oĪ4ŦpŊ Į~: cuā÷Š0Bõ õč:ĐÍÆ1@ åīÅû )sŒ(<Gš\ŽÂß/ƒķŧŌvžyíĀ1A\‘Ž*%į’iLĒŦ418¨ˆīNžôãŠh;qÍ;ũ)¤öĮãOSŽ”Ōģ¨ėķŌ›ƒŸjnH”.ŧ§;Ą ûš,Ā׎:́ tŦQŽŽOî[ŽųĨđŨ(ôõĸĖFĪVŖÍcļē åšoööF|Ŗ­`mģƒM cąˇ3ƒåšS­…b F•˜ÍH=iĀįŊd˙m&Ūb94 mGۈŠv`kÅ 9ŦƒŽ‚xˆķŪ‘ĩÄ ‘ČĸĖ ’Ŋ(ã8ŦíåĀũŅĨ]q Ī”ÔŦĀŲĀĻ“ĐV;늤,ķīHu¤Œâ‹06;:Ōö÷ŦoíčÉâ#OMqɍ¨°Í`;Ō“īXã]C˙,[ķĻļŊō›ņĸĀlsëIËu“ũēĨx…ãNūÛQ‚aa‘E€Ôelf”7¨ŦqŽĄ<ÄŲ§j2qå0úŅ`5K{RįĨcqĮ”:p×cl~åķíE˜ĖjNvÖQ×cũĶ=M15ä$%ŗE€ŲVĪz^1‘Y ŦŧÂißÛ(ß(E˜ƒ“Å)•”5•~ėâũšãËcJĀi`P[JË]q;DÔ6´›y…ŗõĸĖ N¸¤ĩ˜5˜ČȍĒŽÆ[o”ØõĸĀmqŠ\(īXÃ_€dyoųTŠ­ŖŸ¸qE€Ņ9b)ũÎ+-ĩ˜”āŖR j!ÁVĸĀi–ãĨ rŧƒYm­ÂúļÅ[‹ōØŅ`5F;šF>•”šÜl1šsjęŧųdŠ,˜lqG ՘5e`O–p(ēäâ2=(S 4œÖ_öĖ{ą°ņÖ¤:ē•CE€ŅéAëÅf˙k!pŌU1ƚ,ˆ<ķI‚zÎm^0§ä4ƒXŒė4Ŧ tĨĩ˜uhēmjąÁÚØ§`5"šk?ûfßŅŗLūׇ MŅŠœŽ”`âŗŋĩaČ9ĄuˆąĘœQf4 2M-QšʞhūĶvĐŦhåat_<ÍQmN5?qĒK[øîˇԍ§œŠC- šQÍ(éšMÛ¨ƒNôĐisŽMw6E;¨1Åųi›ąÆ)sÍ —ÔŧŒRũîԙÅ‘ĮZSĐR1@î9ļCXČŋģíŌļŽNa|zV*~ĐŅ!ÆĐ1“K¨$đ 8`üĀãڀ0H9Ļ@Ũ‘Â›äüži­ō’O ˜é“@ ` Ī­HĒÜŖ4‰´›­!`‰z`Z1“Cĩ(r§Úš@a“ųĐqœ™<Ub˜$†Īօ.¤sÛ4›!ŽÜc֘įæāqIŋ’i§‡Üx”&Õ#i<‘šBæšÅĖ€ƒ•ô§’\gŽÂ€¸Á!SŌ”š#;q@]§åÁ&•”dn8ĻĖPcJCsMeG5)Q†úĐvJ1Î(Ā`p5#ō0)ĨųĀ qLpqĮ"žŒôÍ1žæęz’Ãĩ  áˆãŊFæŪ”ã‚ū”Ŧ0hąäcŠÛx4Ô R>Ķí@bģ€?Ĩ5ëš=0H\įŠ/9ĀĻĀ Rr äõ w U /^ôÎ $ŽiŲĘäöčiAĪ´¤%ëŒP íČÅHģJƒž})­bNiÉÁ<(ÉyÆŪ)B uÉĻž8 ҏáŽ:PH*H)Ÿ3uÍ0˛ŗƒ’3Nų‡C@‰Qŧ´ā0HR0{Te؜tĻ’Āp3ŠäáTōqÅ6BĀüĒ?™ļyôō94†'ŒT ã;@â <Œæ•I#šĨaÜrņ–lb—åÉ8â™#¨āŸ–œ¸dę1@&Čϰ r[Lߌ€qNŲ¸m-ųP; 1RĒnųCۘ ´$õ W"Å"ƒāf™¸9$b‚q;°ZqĮæ$˛bž .üŠĢ*ē|œŸSHÅņĀæ€¸ķŠS†ĮĘ3õĻ Œ9§1Ô@Ž0ƒĮæĻŽ2'ĐqÜæĄgįī`P;“ĄÚÄcŠ$ĶÁųAÎM0ÎhÁTãån)…6@Ŋ:sFI\î9 cåp)Āí~3Iąî=G{…ŠîĀ BöŌ Č* 0œ7Ėx4¨pO9Í# ZN‰"Ĩn8ÍBS9¨ÄAˇĻ…‘o {S‰Ú)p Ä(UÎTlŖ'ŸĘĒŲ\Ëpg/Œ#šî*Ū8\š, ‹ˇ#‚(w2Íķh`XŠV `ã>ÔÔpØĀė–õ>”Đ  °§åB€; FëÔæŖÉ'?Eg!¸ŠAČ68 ŒNzc‹Á úT…Āfšnâ€!gŠ y`IõÅ4˜Ãå‡>Ôåpzb›Ü>líˇzt`ķ‘H<Šrœ;M2ß(¤ pĶËŽÜcT,rx4āÛ[žŠ˛ƒ–¨öļđ"‚Į°/@tŦ ž´æ 2i:( cÚŖŗķ‡Ļ(q"îÁ9ĻŧŖv3ÅQۚGûŧĨcøŲĀČĻ.ņ~Õ,qŒj—j…ų‡"€UqÔĶvc84ĒÁĘÊaRWŠ'ځ ‡ĐÔ¤‘ĐvĻ„į͞ m"€f ķBŽO&ŒœRāÅ " ÆÔÕ@ã­F ŠVʎ{ĐíÁëŠwÍĐôĻ);vô§eSš`üĀR%˛{Q•…š\uäĐ3ųRí$pM3i O.7´@ŸÂĸ ­ĪĨ<üĒx$Ķv˙hü‚zôíJWƒP†ÉÎjE$r:Pš"sŠo8āāĶH%˛M&ōX@!Ė89č)ĒĀ‚ą Í7 Ā⁏l‘iģHęqžÔ…ëÉŖ-Îā( Œ8,1Ž(rTŒ @ОŸĘĻۑyÕĪRiX•Áėiā‘Öž>n ņ@†€Û¸âœlķJÛTō~”Æ š<î8čjDP~SÁĻ ÔŌoÜIj@:HĶn1‘L •#~đ4ŽÕÆy d{@;ņÅ),ÎsôĨč6õäSģ ÁĸĀFŒÅ™pE6fueTÎzU†BO-ķSG'iŊTysS(lg”Ŗ##4px4፠šwzk/.qÍ0Á4 bžh-ŽÔ€péAãŠi84îOSĮ0Iœô5„8­Ų˙Ô8=qXN29”ŅH€ōˇ/ZĮ­9AØxČÅFq×õ@J€Ž摚ÉŠ‰'# Š–90œõ CHnäāĶ…l fŸæäãÅ3ūZŒæ€ŠcŒuīN„9Ī4Ŗ$ã‘OcĀS\ƒ‘RBœ]ūXČ^=čÉ۞™õ¤ ØĻ, |ŧ]ÁCNXÆÜ…ĮšĻf?.qˇÔTq€!‰ö4é >O?58 0 ”Ī H¸Î3Ro+ŖŠÕÉãŋZHĮ<ŒTi `G&žŠū_­)@Œ?Z1˜(ôĒ@SŌ‘”3ŊéQp~c@€í<äj0ƒŧæœËŨqŠi H1Į­0@cÛÎ4ˆ€1Šs3nÜ0}¨ų˛:õ XéQ8Úr[51PS9äúTeUXƒúĐŖŸģHW$rÍ œrxÍĮ#š|aw“šlŠ0vŊę“ĩŌ•uw^õ<€ō -Ą~@ëK!%¸č@ ĄŲŽ3JĄ@į­ …žĩ6{„ģ1 Ū¤Ë3@F Áâ‘ã,p­3$c'Ģ0ÉĮ4‡aRZ ļđJ—xc"šāxÉ”ÜäœĐ}=iĻMΰ ´gšbĄlo'ÔŖį­8˘ʐzqQFÅr@Å ĪéL‘7}ŪŨŠũX`Špʐāõ4€bôÄ ƒ‘Œ•,8ĻrÄā÷§déM.ÂLõÍ?pS‚3HcK`L'š€#šŽBœ9 œŪ† 0ËS”’š#'qf€%Vr:Ķ×MDŧĨ<ės¤ˇ'ũ pZŖã 4ÕsˇŪ˜Ũ'ŠBųĪZ6îLÍ5CÚE ČrsR`äÅrHę)7úõ pq}icŒ”Ī#Ŋ lšRK ƒ¨4ō8"ŖŒn$§’ {P!AØiŸlTd’ã—<`šMûG$T‹’=)=éĀ1ÜSäNE<2*­ģ< —TېĀcwZ6cĢqMĪÎE N0ZMĀļZRäˇjM€6AĨ Í4.폚VeVĮëC7c Ī&€Å3˜…ëN⊌ˇÍÅ(ũæũ(; øäĶT `H˜Új&'~99ŠCg€) 0n@Å=ĮšíR)ˆÅ3+¸R…I úŌN§#€jŪ“ŌįŽjĸ6­YŌČķ%Áį5)Äi^) 9柁žĩ#r)ĀsHTĐ 8qAÎėšjZCËqH>ö{ĶņéM# ž(KおU›qÍ(āPÁj]ÜRdm÷¤ÛېĮŠĀĨÆ(!ˇR¸ĸÍ„‡+ÅK‘M‘ĪŽ@´›AÉæ•€,)rGNŨ¨˜Ī,ߕ+ĒŽ”ÂŦ$ÚZS¸.Iöâ˜ÅP¤S‰`@õ¨äpjBxÉũhv īÜ2)ûƒŠįĨDʅrGZxØĒé@ ŪĨ€"œáI{SrĨ¸ĻƒķaēP!q‘ß>Ô¨G4¤íā)VUQƒÍ NHÆ7ˇĨ)pÜiҐ­ÁĪRįŽW=é\œŸ›Ŋ4¸.Wž(œ  Žy>ÔæįƒÚšTœPŁāb€A`väŌÅw7Ĩ0Ž1MKĩqÎ3éMÜ ä€)˛8ĀR2MFz`qL 3ƒĀüi¸Ū ĪëN9 œfsˇš@5PĮ?Z¸-¸S”’ԍ’įÔP”–9ãŠqÆpsMÜŧqM*Ų4Ĩ|Œw#Í ŠœŠ‘pS;Nh­÷r* Q‹‹Œõ5+n¸¤s“Ø¤4#Ÿ,¨Æ{Qŋ{övĻØãœRĮËrsĮzŠNXíęié’Ŗ=h Ž@äSŽXdf€Ÿ›¯įCa8¤\3ČÍ8¨ž(7°ã Ļ1&ANbÛqŽÔÅ$¯"€& āÔŦ‹ķ š\í¤tR3’h⧐: LāōÜŒŅ… ÔāP2UeE8ÔnęH=č'īb˜ĘĨēf–9¨ãpÄäõĻp=i á9 dŦŧ÷¤  pzĶ[wbh û’dûPķĩ0§9īHˇpxÅGTœc֞’ų4ĮmtϘĀ'žj]ۏbšFÖ$ôÅ"Âž 9Šķ´äō*¨‘7d/50%°h@ÛōāT )@j4Lˇ>ÜcڐČūE9“MČ,y§ Ä0÷¨@'Œ~4āØn”ãˇß5đTį'Ú§Pzcņ fĀčiÍōņM)b¤ĶTæ€Ķ‘Ml1֞芌‚˜=sLDo/vū4đ2ŧ%I"‘IQԁŽ\ךVĀ“L`ûŠr’ÑŠ@NN Jƒ*č;Ô,˜9-Å9[ čho#Ë#ĩoGy™îjĒ‚ËŒņéW´ÄÁ“§ĨD‹F˜š āƒBđ2Ô“ÅHÎhúRŒH cĨiü @ Æ(\ÍqI´öâ€rG(Į­R(qĪZ~}iĢÁ§ĸÅ ? \ŪԊšÅ.=Š \Š)vJ(SœĶÔ9¨UĪŠF1VHōGjŠ=éœäžÔõ Ķâ~_z`4áNä°ö g41íšRyéMęiˆ3ŒĶ‚1I´œķNā- 8Ļ‚{ô§Œ¤ųG­0$ũ(œõnPH¤íŌ€œœbdu¤žôāsŒĐ’0is×4…†HĶē †aēĪ÷k›UÆtĶgÉ~0k›#úÕ!ŽBz1§ōšį5HŦĀéHäōšÅP‡†#Š U![uĻ/8äS˜‚B°æ€RÉ´R¨ õ†ė.i˛ŊúúĐ"o7÷gT[9Ļ“׃JˆW Pķ•åēPXnôĖüßtŌį#ƒ@ļH=hR§%öÅ8íČāRžÜ{ĐËaxņĻwÉÎ1ڑœƒƒČ÷§ r:s@A4œsۜ2šmMÜ­1–!€ĮôۂBķëQ4ƒŠq'Œį¤ĨI‰âĸ,ĮŊ5‰ŲÁ RĻF23@Į€3JpÎ>÷šÃ`lņŸAL w.9\€äJvrŋ7JŒŌÄ(Šw¯đĘ˜\œ'jrļGԟ!GS¸ĮzYŨœuä´âY^)2sĶŽ´ŒĀđ4Đ2ŋ7ByŠ‚yÅ!Œ Ž(Lā#°Ī)ž[u “D`‚CŌ˂Ųž Ē…a¸Ļ™ĩ‰ãN,:L3rvõđĄ—ļqÖŖ=ÎzĶUˆln¤‹Îi cœcëIĪŪ$`ĶŅ$ĐŒŧx?xw§(Úŋ9昤+cŸ­+ą#œ(ûŲ&“øļö¤$Š1•Îh`īiBđ}éX+×4Ær˜Ž}hÁÚTķíMUÚqĶ<.>`y Šf'ĩîŽ+įŖ4â Ž>´™*ĢÎ}iˆ>c÷€m>´„°ÉíMČ<HŽū3ŠB€zš9æŽIõĻ3üiØĪÍÆhŲčšÅ5ÛËäĘ€™2C b—Ė@'iŖ-’ĖryĨepy ™˜`GÎė“š‘žP*3×që@îÉ W ƒšŒ)ųTâ€Iđ(_”ž´Š¤ ã Ÿ”ŒpÁ”§šw—€ZsJq’´ scœR†íųS\ŠÁĪ֚]ŗ}¨ld–^ŖšhLzą ´šCÉĀõ46‚ŨiČFx搠×&¤ČĀįš†GÆp1K;sÅ&ũƗŽ:Ņ€¸8æœrž™ Ū Å9P įĨ*(ČÅ!fÎ:ŠFĘIĮcNEÚN@ĨõÎE"äü§ķ ?)-œ})6ŗ& 'Ū¤ m*ãLElđßZFPŒķSxÅBäĩĀž{Ž•*† w´X.)ķPd6ĩKėPäšF%G\Ōoāœu¤4JŽŖrLšĮ) ž)v2:Pˆ=TsęiÁÎ9Ļ #)@c“Ķ4Ŧ3ŠEãƒŪ‚NvįŠByéÍ`Ã:T.Iã'ڞXŽôŌA bo㠚V cŠcr9Đc°Ž |ŧšV'$ôãĨ50iGô 0É8Įj•0g5rĀÕØ  |ny*ū”A2g­TxԍëVtĸKIíQ!ŖW“Å*ˇoJ@qJõ¨(p>´ØPG™ Į#…¨įĻäˇJ@?”ŅÜOS“éF9éLÚsÎ(3Č<ÔŖ.3ÜÔAYō OŒ˜z‘wÅIŊ\ŌĄųˇuĨ Ž´˛֜AŒjfp8īN!‚îīH <0d9\õõĻ+˛ã=é sģ‡”ŲŖîĄ†})Ą×fá†_š€–'‚:rE7\4ņüšJ …Į'Ĩ5—#§JW ¨ĪQM ÉÉ BÄ@ČÍ#ąÎ@ČÕr#4’Ã==¨ü8a—éM^@'ŒQ¸ŠįŠ+īl!>6`̓œāŒ)ā|ØëAtüč!Qģ’)C)b§đĻ B3“AMÃĻ(vĀĀëëDorzŌŠ0pI§Iäņ֓øÎ.˙Ą w?ĘĮԊp8‘ƒL8v8=(b@$įĩ!wnq@$žN(FÅ7Žrhë•==Ё°Įž­•p§‘Md xn3@‡‚95*ü͚HÆ>P)6ã9ë@’ŖžÕeĪ˜P‡įÛÔT›Æ@ ŒP”…@YNiŦāړy-´ô °ū”€r–S“øRÎ "Š~§ŠPûO­0(Uį­#ČéCˇ!ąŌšyķt z“ØSYÕķ‚1RŪ Žj#(zXcúŌpîWRH͞1MÎNsƒ@Įî1ƒß4n9ÉéIÔüا¨RGĨ ×88⭀ëQĄ0 KM$Ü@čjæ•÷äôš' @<♀P“Kåsž=éˆ{í$Í4ŧŒįŊ!Ü‚øØ’höT* ëéP‚Xô§‚sŠS„8Îs@ÄP•‘JįV:žõ*7y=(͘“4ŲUI6)á‰'$ú fŌ~÷LĐ1c:Ō•W9e˜Ø €ö§ĒåOjcR āö Cafwrāb¤bsÎjš°${T†RO@h €n“B͘0cƒH¯ĮžxĻČ[q`sžÔ ]Ü ôŖyŲČįĩ7-å€I´õp>ņ4°9➲‚ÍQžŪ­ëÅ å=Aé@X¨īŪĨŽ0yŒzž”øŠėęy  HˆGĨE’9īO †ā šŌFlôÔ )ÜÜŌ)VÁđõ¨ü˛W“ŸjrŠ1Č=Ё#ĪŽ‡R,l§%N)ËÔw5+7cԐ3rp( Сō Šg8#¨ ps@4RnŪ§¯jpLc+ÍNXcR1;r: …ՁĪZ Ąu .ũŨj%¸P2ÖQU|žOzdŒĄũ) Ģķ{R›€ÍŋtPOĩ=šÆáŠzĒlúTr“ŒŠÍ"$pMSģå¤1įôĻ'Ž‚’–:SP† ŽÔ›žm¸âœUGŨ4$“nZĄdž”ŅĀâ€~A“ÖŖ Îx!Q2ÉīB ¨‡SëH<ž~‚œIÎ"›lŸJ e›<ÔžYōō;S†Zp0($ä…&Ž/mĒƊ˛n=jĖ$ąÁã4æÉšˇ¤`4˜9Ēl1ÆyĢēBáäÍDļ-ÛšÆ)XF)qšAÁëPöĄ¸‡84ФđzвvôĨLŽ)3ˇŠ7ڐÃ6x§†öĻQO#åë@ e“x ņRƒĮԚ.CĐų4Ŗ4„äqŌ”RāŌĄ'¨¤4r(%⊋ņĸ€2ƒbģ+ŌŽŖĨqTH‹ĶĨ=>cŒRŠrƒģ#Ĩ1 ”ķsŌ•ŽiB–#šL¯ĐԐ)Ŧ6šEny CĀēŅĶ;i1–'ĩ8—Š`ナiāņN?wƒåĐא)üÜ 7sÅ;g~ôÁéN AÁ§‚1ŠiëF .NęZWģ mdÛ×iŦ›U3Á#­t7}žOĨsäŧr;U!ĄîTj<íUĀüīõĪ­Ž×'9Ļ0U=hfų@ÁĄŸ Ō†éõĻInČ;p=)ęŨqŸÆ—np@Ļ%ļô lœڔāj6É=ÍH„˙v€#(Jō)ęHJ$’qíF>^”…°œրį8 vĩ4‚§hzĐPáņ‘Í/;úM*pvā⚓02ķL`ŨŒi;˜į§ĩJĪŊ~´Ā…îū´‡€6‚)€Čœƒš˜Ž9¨do-2AÆh@~NœôϞ¸BrI§Fہúæž$ķĶĩ!mĒŊM9Kãkp=Šyāc4ĒFxĶ'œdšUĪ4 1S‘JMŲš CLoÎrM(RT=*U/ŽŖ=)Ĩ[8f $€Ķ؝ŠÁ~CēĸĮ̀h&\āôĨc¯zhÜĻ3ې‘Č4ÄuPAlcŠh|e@ëN­ Ä iܧøhQ‚iŦh}ęi*€r;ŌüÅG|Ō*aHΝåM¸#ŋ­1ˆëš]ųP H}N? fđ͞3īC?ŠĶ€%ßōiœ6+.@ëMG X(ČdcĩžƒŠjíw •[#@ Ožw¯áAÎ0sQ“‚7-9W~XŒZRė šĨ\r¸¤ÃÆh5g8ČĀŠ #ŊmĮĨ0­Ķ’(Á ÁëRm2HĻ08ČĄI•<{Đ„.”Ā7gŽôĨ”.3œRBG¸ –Č^hØG'¨4˛?΁Fėí(PH'ŠcqÆh.ˆaíš]ŖZŒŸ,ũÜĶ÷|¤‘ŠnŅžOZRŊÍ"ļWÔ}§,4Ŗ4Ŧ0ŊE¸Ģķ‚Tū‹œá¸¤ {n~|6~´$ÎĶĀ Ģ͚pĀ0h,: cŊ!Ž™Ĩĸq´œ÷4ãōŒįĨ&âÃ!€ö4g(A=)Ä!#“QÛČ´˛riÍč(OŨāRƒŌš¤špw¤1É×4§"˜XŽ‚¤äãšLŅNæŠC2C̐ ›´Ō÷@ÅhˆŒ”úgŪ=iAÅ ŒĶÅ(ÁôŸ1 1Œã4‡éFrxíI–n1@F§ÁzŠMĸ—ø:Sۑ͍ûiĮ•¤1J[?…4S‰â˜ Ā<ƒÍv!{zŌãĻ$uĨ(+ÆiC^™4×<Ž*6#¨ėzTĘ['ŸĖSzs@ ͆cŠyÁ8<“M qŒS×Á=¨¸XvÕPëéQî]Į‚MKÜÔ29VĮ=č@ÛFâ qۘ ›‚¯qšUäacNTe— u 6w°ÁĮŊ+í#“ČíHíˇĄ9 W,Fh˜by=h¨#Al°ĀäSŠąŗŸZ)‡sä) ml@,HÁé֕Tą,h§îõúŌ;ō$cԜF8é@NÄĐ$ Į¸)'ÔT`€…9ŠđvāĻĄh1!‰Í0¤šČäTģۏĄĨVõŠB/=čD>e ¯4đÔĢđ0)”6G4æE øČ<{Đ„(īP<„ļJ‘˛TqMĀÁ4ÆŪž•(o—8Å8āœa!—õ 3üg4˙˜ô4ųëŠxl ŸŌ€"BÛņļŽĮ*Ŧ$$dĩ$rd•<‹ ĘąÅM¤æH Wä–â­i y’‰lR5Æę)y )Å@Ä9ĮĒ !ČĨ ƒ@ĀĐIíO€š9í@ íÍ*ũüĶO&ž„ sڔ‚E'ô§ˇĨ 5 ĄÎEHžĻĮ”)ŨÁĻš9;iPņÍI“E&E†egۜŨ) ä PŲĀĢ @9Ĩ' )@Æ3JFOĀp4˜>”‹ĮZRHäô QīN^”Ū§&—‚hcžE(éւÞqI€sÅ09íJIč)îãĩ)ʎ) žô™9Æ)Ã8Í'­0}):v§7<Škr>cڐ‡ į=iŋ‡Nô(ÂđiH8â˜H DėŪ†š¨Šm;âIŽ–S˜\ŸJæ-ˆų‰lÄU"“Đą†Žž”ŠÜņ×֝ŖŽj=ß1=)ˆ{;*Oĩp}ŠX’Ŗ8¤%Tu昇n&3ƒÅFTœiJžéJŲ9ô Cv€G͏­8`ąãō¤dRA=iœí☠“´Ho9¤R ĶräĮŊ äõ4ÖQœį€)P+õĨ?*°Ļ”9Í9ā E`SԐI“@ K7NiáķS#q’GJēí4c&ÖáĒRŖsõĻ “‘M/ŖŊƒOËMXÃwPwAhRPv¤ÚFhcœsøR1>fs€E<āāĐ22ŒĀƒŪ…ĘŒÖĨdųwĮĨ4mÆXžiŠÁ´ņīք“‘N žc¯Ö€"fØvúöĻôûŖš”Ē“œŽ)Ÿ.î´Ö]įžÂ‘Fš›vÔĮw¨ĮīIÅF9ÚqN'#ž^AĪ4›2Äô4˜bNOԘY‡ãéRÜ ~4m# š@H`sÍ‚*1Éä~TūGņ`SįķĄļā0ęx₎?:M‡iÁ怚íCįS m8&ŅN)[aį€{š{œ{ôĻĘ:æ€) ~t2˙|tĻ ã$éNÜ@úĐėd S‰#ŒûŌŲĐãŠwļö ųdĮ4ԋ¨,E*u ĐN#4ÂÃNUĪ&94¨FŌ)ŽĨËôРǍ õ D‘ōpĘ>ĸ˜ņ‚8lb€Ų<§gĀĪց0*~Q֔Ûķue™ÆEEļ0 #94„ ĀúĐA~ LĖĀät=Ē,Ŧp:Đ2LgŽjŗ˛¤œž†ŦEœœ““ëHbÉ'Ĩ!ŽCdúzR:¤“ÉĨ_:RoČZ1OĪ­*ŠR23žôĸu' ͇=¨ģ99íŽ)衏ÍĪÖŖ”2˜?ZzîČÜpibF˙gŒP˛Û[šO•NÍ)aéøŌ›—<đ) ų‹‘Ō‰WzüŖ§zUb  â˜*Ŗqô>ĀĨ1íäįšc+ōô  6df‚vŽŧÔbGö'Ž) ŒLČziėŽĀßĩH ”}éĖ0&˜†€ŒŽj"Åādæ§UO5 ˜l `F$ž•&vá9Ļ#+ddæ¤$(í@d|ō:́'ĩGË09Í*Ģä⁕8ĶFėŒŽ)íĮŠU}§šIqĀâ'$qN'wcD`ą'ÅĄĮ=ũęRģGZV8)¤7 ÷ BōS“Í0͎ôÉŒm8§(!Iõ a!ã4mƒšhU$“S| psLDN6ûšqR@ RåH¤`Āõ¤1ʁN*UûÄB›‹Ž¸ŠÔ~đ€3@‰00H"Ŧi-ûŲGzŦcØ2gF‰>Ņ3ķ¸ãŊL–…#c$SÆqÍ'~´1ĪAYŒ6äҎŌƒŌ— ;QĪĻ‚zQqHCļ ĐÅ!n=)F6äP19Zp9Ļg4ėq‘@qÅ?Ĩ!Æh°¤€š7:R*œb—a aš(ÁöĸĖÂ}œ­ō ĶBŽ;ąÅYlŌō:R„ãŽ)yĻĒc­ÉŖv:Đ[æâ ֗ hluĻ'ڀ$'ļ(<.)ĒšShė;S¸Ŗ õ¤÷ĻŧSē`Ō3Å.ŌE!Î ›’zŠwJF)Ôb€Æ—9ŖëLDwęX>S\…F9ŽĸUĖOC\ÚŽ7eF;¤4( ‚zgŊ"į'€E!ęjM¸^ŋPˆIŨ&:R0îÆE=Ԁ6ŒúšŒœ.ī@Į¸’ *+ž´(Á4ŽĀ!Ā#ë@† NyÍ9Ā+ĮZ`on´+“œS6Ķžũ)$‘™0 9¸ 0ŨLUäãõ aĀæĻ1 .)=OS@väTDon8Å.ār¤LG^hļ8yæ­áY8ô5J]ûÁ\Ū§„îĮ`)2Ŗ “NÆphuÚųíëIœŒƒš`0ŗ™1œ}iāõ x4ĀFė‘‚jF¸=MFKŒō´æųXŌœ‡ Œí͎=ho`0EKöĮւģéNWlúĐeyéJ < Sŧ˛Å›$ =МĐsœ:‚)21§g O9÷§›A=hŒēP1Đ)$uųRgwĩ#›Teˆ#š”˙\ÔyËāŽÔ€xl§­4  žÕ<R•ÁĻx Bx%Į’;c xĻD›ŗƒČõ§7 ´ūuCãhĀAüû͞8œõ§™ mĮ=iˆ~Hô¨‹sƒČôŠT9~ FĀgå¤!¤+FF)ƒåQŽy§k.xb˜ p[pSNŠbļá‚I§đ:šĀ\/_JfōGiHÚ9Į4›&rs@ÃpM9æēPņa‡{T{@$í4sr…‡Z’"@‘‚)™”ƒ#=Å0[w¸ ļ Ļ)# ߁OœbjHĪ{ŌČpxĮšFępirGN´ j;杒NN8O|ŌČČ:j–4',GJdŒģņÆMFzqR!8Č_ƚc=iãî3ëHĘąØN)ĒUP¤ŗgm9”€qŠ40 „ŸåOŦqˇ÷Ŗ&áÍ= >´d„)sZŒ į<öŠ\…|œŌ6ŌŒv Ë1Püi˙*ú“MfÁár ™†qŠk fÉĨ S üéÄã¯Zßæ#rméIË9įŠj“Ę‚O ĨËM1† 8f&¤#{IH¤Ép3R'îŠhŒ $p}ŠPápFid N!ÎîÔcžI#Ū“aŪ9Ģ—ææ›G4†"m qÍ,›x!x N)ŽÛN=yĻ!Û×#æ’EM¤Ķ@;Šy ÜäŌ€#XĀį={Ríõ#&ÔäÔ.ÅÁÅ šAÎH=¨`ہĒ6˜Šįå`Đ2U -Œtƒ€â‘2IČ”3“LC]Č\m¨ˇî^˜51`P‘ÍDX*ā æ€+ĮZ“aÚzâ’"xÅHX` x  dc*öŠ'ņíOō¯RhíLž)æAŒã4Å]č0}éBØ'4…8aēš„ ņO,ž}¨a…Į­0~ø1ÉâĸŲÔ ‘0ƒ’?; āsQ€'­<ĖF3īQ`HĻ"N8ëHÎÆ:SNģÍ5äU`S@Ē—ī‚i’Eƒ†4 ‹0§–ļhĀ;uĢP€ bŖ / |Í!¸Ū¤ŠÉ÷Ģz6D’‚0jŠÂąĨ\Ԋ™¤õ¨–Å#[ąÅ Ü"ž ĸ `GŊ+47ÍA'4zĐė(ĪĨ(<Š <|ÔŪ§šrž)„qŠ&žiqß4ĢÁ§Ž94ÕŌŠäŌ#4ĒG|RmīFĐE"‡nöĸ“֊.(öëM$Å5˜¯lԁLôĢ 3ōŒR(Ác"—7ĩ0 })M)ûØíF͜žhrG&œ§ŠN‡ĨGZR@¨Ī-ÍHy(##Ĩ@ŧ 8Ķ‘K¸öĀj7.1Iģ"“Œr)\ĶAËĐzŌŠâ˜Å'ÔĶONā3šnN1@˜Ų9…€ôŽs… žšé]ķvâšÖ ąsЍmŦqúRnŪyųM?åÍ0pĮåëV˛2E7‡@ÄķéK;¸>”6:);9íMĪË͸UũiÁrŖŒSà n9ĄŸųĶ„cõÅ0=xĀØlEHĢ•ÃuÍF¸gšœHüšLąÆiûqĪZjú ĒGSLbF4Æų›Æœė@Č< j0įšBYUOæ—suā g$đ0)ˏR:怎Ŋwf¤äāS#„ Į:Ԙō –é@ÆČIšL°<ôœüŧvĨlíÁī@F™MĮ­5‰$ ņBJYvmÆ8Í4‚§¯4)Æ1ģ#ŌÆĖ(ÁĀ+¸āæĨeaķgŠM˙ē qēšŋtîÎsOE'¯Öđ9ęh@F}Š8 ō*58isžãíšĀíM9\ātĻĢėËqN ģžĸ€7(8¨ßĻ9Š]FĖíö¨Ę“ŽE*’G8Ō’Ļ€3ĪÔ i,ŖvxĻôÉ&œė9 HļžԐ ÃUŋZ\ˇę)û>aļü¯œS+ģšŠ#%ų<ړpãœS™R,ŠŦŋ{\ÆTŲÜØ8Ļ2Ü5 á~n=)D@į9 0á†y¤ˆ'9˜ cé‘MRŨr >aģ§J‰Wh9ëšBslgšTRÄ˙ęŠ9¤$™úĶd@šæ‚8#ĩ4ļWÔx`Áphʸ!53oāƒÅD 2Jŋņõ ¯Ô­Œō*@ 4ԅFw(§É4žSƤLķf€NįH‘åŽ[5c° pEFShųqÍF3šPįŌ•Ø/äĶã“ĐSôte M5Đ‚š uĻĸa¸§4Œ­ĀÍ6HÁŒc$J@¯Æwb¤V;úpjRœž”ÅQ՘ÔņœāÆ1UÜp2DęŧŒP˜G^•oHVČHëUŠĻ2*֌ؚ\’N*%ąHÚĮz}(@¸&ŗãķҌ L├šĀÅ4ėt¤ cA`y§dĨ ëŠZ@- ÍÁԚ@OáNĐ:b—´†(§/Ŋ4sFîų ã֊MÔRŸŋ "MÚOSJWŽMY$€ņHIĪZb‚)ŲP!Ėģ—ƒÍåÎM7œûRm‘Ö˜ŨķSŗ“Q•!ÎiāņČ BąŊé ätρŽ‚€Ÿš”đ>´Đ: ÁäĶGĩÜĐģH÷ĨČÅ Œķ@¤đĶG^iGOJlŧBäzW4ĖlŽIŽĪîÛé\ëH n•Qˆķž¸WŽX{P[pŒZŒđĮôĒ ؓ~ ĩ)+€OÕŽĀûŌ‚vŽ:ĶDąåˇÃō4§4ģ•FM)(Ī×4ĀzžÅ5Ų@${T*0ŋžÔģ‹RĒ鿐Š›pŨÉųMD€y§šC’zĶb[°ŧvĻdąÁcäĮB +É9¤2^6 ķëF0}ŠYH ŒsëH­Ã+c4g˜@uŠTåÆ^´ÎX¸üiËŌY˜õ dĨŠŸjMá†)îĘWĩWūÄc™!ēT™;r?ZŒžá…=yNN>”Ü•č{šx9=rqNCĮzBģ ķ@…<˛Œƒ‘OŪYH+ųĶļiÁ@Ī­ "JĻAéPíBEHA?6yô  úô§(îqLÜĖĮ#Š]Ŧ01úĐœcœm#Ĩ4( €j6$1ö§!ęIÁí@%‚ã4ŌŲäõ§€ÍÃŽ)1ÎäPãAÆŊ!Û×Ŋ.2™iŦ =h0IÁ§ũŪŊiЁÉ'49Px94€SŒgŠapGoZLÉ'“HŅv=i€ĒYģpi@éƒÖœąl ĢĐ Nwc=) iÚ ĪŪéwIÍ5Ķ,I mXČaŸJ@Ę_<÷§d!Ā9"˜ĀįmIXdsęh¨§n[ŽjR8ÎE1ņœN |ÃĨŨÄę3´ ‡‘Kæ/@ c‘ˇ84āŸŌ§ˆ¸õ¨āâĨ.O4rŦ= (c*ķōâ€ÁˆÅ T9 įiõŊ5IV&žŅœ× P0ÄāŌƗjäœ“Ō…;đHĀ0EP@ŗQ‹Ëd´!Æ^)ģ7{ãƒMÉ ˛E;y^ŊOĨ0šĀß1†sĐw§úÔLļ3H`sž)æCÁšˆą#…$ næ'cŠXRÅ4„€3ŒæššÛëšqŸz*í'æëڕˆ. I*į#‡6ã¨ÂÄgŠV.Ŗ×&¤ØCg>ԀO›hįv¤92`tĨw 0¨ãvܒ@ ČŽF=č_ģ–#š|°j¸ÜŽ2xĻ1Å•ŖR>fÆ=(Û¸˜§€'"˜…VPž¸Ĩcž)ˆŒ 8ČĪĨ8íÚp2h a‡ËœzÔd`3Å8d/ĩ7x# dŠy#h9)Ūx0¨Øp͟j• ā`RĘ[9ĻíÜüŽiNGCšaf9ãōĻĘBņĶ&¤MÄ`°¨ŲIĀĮZB¤O€’mĒĘAįښ– ° >cPģøbEųAQ‘šjš$¯§ĩnŲÅLÚ=čäņéQāŗŸ”wŠ\rŽ œŒc­1¨Tū,æĨY\lÍBĘ­ŒR™UW`7JvįŒŌĨ…6Xō)ŠĮƒR ‚ $fƒ<ōi~] āЉKϟŊF'4Ä0ā`ŠxØŨ֍¸įô¨ÜŒP1œqĨÎz žÕÁ<ÔĘᇀkĀįŊ4)ë’*V’>•-Œœf˜†4ažf|RĢĀ|ԍôÎA¨öí@Á=¤ÚŧōsA*œį€)‹ķAīLc•ĀČÎM †NAÅ0ĻqRåGE l Üæ­)ld‹*m2í-Ī"1ûƒŽHĀ̚8ÍˤF*›*ƒōŽ*֎ā\Čĸĸ[Ėž(qŖž08ŦÆ#cŠAÍëG¸ ' ‘IžäR€Ō˜9âœ9ī@ 2ČĻUir8Ŗ ŒĐ{RābƒŌ“$ô¤+͚CW#4ĪZEãŊ;ži~Sō( fhlŽ´ƒiīQå—&¤^pjÉōŸ­?Ž3Jx¨×l JÜqAų@Ļ‚ â2ŧÔEÂ65&㌃Š$\1?•Aĩ”|ˑÖĻfĪšĨg;1šUe|#Ūĸ•Ö3ÆKûT2ĮŸž3†öŠQ“Īz8\~đ+ ŽôæÃ{Н<>|,§đaÚĢÛĪr@éķëHfŽôρšēĶ"BAķŗ{T¤mā)€™ÜqˇŠBW#'”r;ŠB‡9Îi6î1ŒŪ›ôĮ“zĐ$9šfr)Ž>`:J’žô(ÎPÎ@Ĩ;”˙"Č B)K0RG8 cC2x9íOcŒTy,ŋ7ô§Æ¤¨éë@Ä?%yĨNF3ƒØPP†ÆqNEÍšD7+dŽqRn NHö§}͌õ¨ļm%ˆÎhnؐ0TûSÃvĨĘļú͞ģ°h™n­Č>”Į ŠôŠÁāTE7Iœq@'“ƒLq‘ž8õŠ:gĖeš€\cĨeī@%zŽ)˛eî2<–88īC)S‘É4垞Œ:zPŸēx&—klĪaŪ›=Îy5!$ ŊģĐ Eb˂q@*ËĮ&—#9ĮŒ6Ö,GŨĀĄģzŽÕ8ĀŊD ¸ ŗ•%˜F@_^j7C+dõŠ„x"Æļxæ˜Ģ—.'ĩHęšÆęDøxĻö9…G°JäĶÕöåO$÷Ĩå¸ j`Ž)Â0n4ĨjH$Ôeؘ€?:N#ËL;sŸZhB~VŖč(ī—ŋĩF1ŸJV‹Ėu9"˜Ë´žwSį—dƒŒƒÅ>998öŖb”cŪyōđG­Kr@¨<ƒĮŊ*ŠĮ=OZVMĢ• ˜´gičųAž1Ø÷¤Bž9§ŖŨ3š@  Œ÷¨Xė`0ÔÎĘāj5%Žôõva÷qJčÑHsJe¯Ė4„å€ôÖۓHÄuœ"Ũķ@ˆ•2Ų­#ûАœXnã“@Ä@Û2T~4Œėä(=*mŗ ô¨ČU$ã­0ƒžĩ*(f;ąÅB8aÖĻ@ásH1Á¨ÜüĀÕ(*pqM‘T’äķ@…qÉ4ŒšP@¨)‚i~OÄ*eÎ1ŒSŠƒÁ TpŊ@ČĻM0ÎUEĀĀ ÔLĮ>⚮Ęお“~AČÆw=)[ŖhëNŽX÷sR–‰ī@Čw€@4š 8§˛^J‹îˇ€%Ž0G&œŋ!ųrE*æĻ‹xš`R_9ųM]ŅņöŠGĨWvÚīSčęMܞ˜¨–ÃFįCÍ$“JGj@0M@Á94Ŧ@ŖgÔ*ũ×­ˆ'“@ưüœ ÔČŖ?tcŽj29aĐwĨ”t™Uäō{ŽÔ›ōîOŊ!uųr{Ķe*G  îƒĀúS+2GĨ5HÉ8=)ĮdņHŒäq֞Ā`ûT>jƒōįņ§‰ 0 ”šˆä™0xäJYĪR*UE8ëE†4˜Ķ­)RyŠ6ų8Å9”2=;Pa•!=zSÔ¸?ZģPĀD ‘BƒĪNhÁ Ķx~´ø÷Ģ’1K!8Žiģ€=Ŋ.ā[åũiÆ.>ZÄNZ1 .Ts1 œgÚĢCk W2\(;ߨ=(*6ęXg]šĮ#šîPÃĨ úņ@ˆĢ1 Júv?w< Ķ_kؚrÔöôĄˆé@Ęöâ@ĖÆã(!¸âš0OJUaƒˇ¨õ ¤cœŠ‘X(銉1ÆãÍ=zz•ßwj‹<üƒŪĨÜ:Ma€Jô ōŲÉæžÁ™Fx¨›–ŖšR9 cšßũáŌžT)Č⚭ĩqÎGŊ(÷ë@†0bAíNČãڞކĄ‘[8ë@äcíH͸}éPcåÛÍnŲ†0‚ė 9Ĩ~p(†ŪzŠBß.h +Žx4ãyĒ6mŊšŠøŽM ¤ĀĄöįpôéRdc5–X‘š&FÎqĪĨ*ÍíJˀ9â›ŧ¯Ę¸ÍWi#šk>:šMČęX08ĻH…€ãŠ,ķ‚xĀĨ-ļ3ƒ’zfĸU!H$ķŌžˆˆƐƐĖCm§#ā6zv nėr*El!@ŧĶ.2O­(~AH„ŲįԚ™˛Ã€˜Ęvô¤å†;ĐpxÎE1‚Į/SĪÔÄ+;aRn]¸¨Ę`ŽAīABŧŒ Qpą"úR:ã“Ö™qƒKÃu0éĶŊ.ÅÆ\S|­ØbiÂ0[ŠCƒ8ôŽN:ņHĒI¤Ä;ĐQą9 “ÖŦÂÅԆL7JFpÃ8Æ7‚hÉ0„ŧĶq¸RHŧg4ĖŊsHd›­DņƒÖ¤/ÆsL<õĻ"@n´õ-ģR˜U×#Ō Á īÉ#4á-MES!&œI+‘@†ĸŊr)'8įŸJz ČyäSŋŪäš1@J™c §Šb <õ§œĒņژI p2i6ÁąMBIŠA‚i›C8ī@ę)vü\SI ëہŽ`s´Uq 8â§UĀ4ÖČÍ1åo›å¤#æÉ§‘ÆG>´…ČüЈb aš•pƒ8¤RœgĨ+íg¯­æ#hâ˜Á€;€ĪjTPdëųS›zžį4›ķ^īVĸdUSĄR9ŠÔt=)#°ëŽjæ’˙é/Įj‚8×ĢXæOĨDļ67uÅ&^h Ķšâ cONô ņFIâ—ĩ S1ķ q>Ô~i \zR1!1JŖŠ^@âœxÆ:Ō*ŒŌä–u<ŒRƒœ ‚qH“ü{Đ8¤čGŊ/QKĮ­€ÉWGbTō*Q’pj%U*:ÔŲã"Ŧ@ŖƒKÆhŨ“KÔĐ! ä’)ĀĻ€ 7¤{š`īÍA4‹Œ‘žiÁͰ/COBÁÍ éJ¤S¤aŗšvÜķšCŒŌ“ŠĀ⛆šFcģĨ& Aâ€2y§+dQžzS#Šo”ėž˜¤āu„5ö„9=̜ îO$ņ]˜hÎ1Ō°B#|ĩhhŦHcƒĀ÷Ļ7ČĀ ÷Š™2üw4ƌ’Ĩ0cLĢŋ éQaÉÁĩ9•Ŗų¸ĨʰÎ0i’0šc¯;:ö ‚Ãâ‡ÚŒ0IÁ‘ôb3Î3L}ÁsŽqR`“M’@WîŒô-Äȇ pI"šü)rT `æ•Ģ7­6G$‘ŠTPĀ€jcF)œ ņš@$™ €ÔĀK\äq€¨2˜ĄFTŧRŽŨŧōE0"€[ŋĩrHŖPäîÆ Hä3ŊûúTDđ2;ŌĢÎHö  6‘Ø8ϟŧx§nÁČīëIŨĮæ4 wúÁÅYã<☸ œúĶÎá$ũh€pxôĻ6GA“MÜ7gžiû‰æęA=éÅöŽ{Ō° ß=é6ôĪ9ėi€íĖ ĐԀíÔ$Î8#Ĩœ dReˇšXËg9ȨŅXœŸ­HFÂIéõ Cđįŋ50Äîâ”>rsM' c‰Ãøš@C?ō¨ōĀ:w§Æ|¸ zgŖ*G9ĪŌ‡–ÜséFÑųŌDe†qI‚ ühŸ›Š€nzŠ ôÅ<ą$)Æ 0žņíJAd{Pān ŊĒ6mÎyüâM0CŽFhå#Š4ÁäāRAëøR =hB  ô8Ë)T‚yÍ8‚sÍ(éÅ7pR~^)žb–8ĪNÔ<“LV*FEX#tc§áPƒģ8ö cÉV4GØ#Ą\­9ķĪZJŦ dcéCį~qJTxËīÎô VlŽ9&™#`朊žsČĻ9## Ō¨…;†)Å cĨ0 /*GÍ@ Ëž –SéJĮ4ĨB÷Îh „Šä‘Æ)TmQëH\Ä i|ôϞXcša<đjdãúSY 9=(+ côĄ”tRhįŽ(#ä$R ųÃ 08ĪáNÎá“Æ(q•v¤0Vl`HÅąšOzc´a°Oj,Ga@ įp4O æ†oŸhÎjTVÆ0)ô 3°†j]ģ‰õĨHÆÚĖÚqÜtĄŗ×š{/ËFrGˌP0p>SO]ʧŊN¤c8ĪĨFFå$ņLōGOJj’i$Lũ)XÆ1H@NÆM9\ē‚ƒQ}ÅÎáOW-Œcō¤ũęPŌ›ĐŽ(˛ ¤äâ˜ĘåĶR$ÜŠbŧŽžô†'–Ä|ÜTņm+†Ļ>üuëH ĀŽ)€ķ‘HŊn´Đ朎ŪÁÍ1QĘ‘I*3‘žÔãÜ /¨ĻąËúš.+ lŽpsš—jä1ÉaīI‚*iBdär{怰ā§ŒäŌ`ūtĨX°ÁŠárÜĐKSš<¤m‚Z”áĶž• x`˜Söƒ×ƒQ’Ŗđ¤iļŽ9Ļŋ?ZŒļã“ĪŌžÄ8=Fj ÁqÎ(vˇ$dĨ ;ä~4Ģ#89Í3qVÍ1XŽMŠŽš§+Æā1CüŪ”Š×šCÜ6äëJŌ3&y¨ŨąŊiûŽ=)€‘Ģy€ļp{šļ¨uČöĒĒXČߗ֭Ŗax\ŌbšN .˜ßé.˜íÖĄŊqV4žn$Ī\TKaŖ`Æ)OŪ Ž1špÔ @E.0=ŠÔî§Ú^)¸;éųĪAMäŠqéJ3ëH3´Rvë@ ÎsšSsšA€)OJ@.~jpāSķO÷ Šįĩ9pGJhô4¸=!’qE7mŠ2×tŠqĮ“Œö2ļjŅ NM!ēSˇc¯J7N(ƒ}hÉČö¤äRxã­0Œ’EH¸"š3Ž”+zĐ!psŽÔÁ4 ŅœZL‚:sKÆ9ρÔԃÅ0‚zR°ĪJ(ÉëB \Œgš¤$R…ĨqĮ4ĀÅķ‘§i¤Ž˜4€kũÆ‚°J‘žĩаųOŌ°[ī6GhhxÔlL’Ø>”ü(ī‚:S ä1=ũ)‰ąĻ,žOįM Á\ q\'-ŠŒc+øĶÛrŋZk!d~4î<ŗÉ÷jbūī4ŲW×Ĩ9dP0:{Ķƒ"ŽNiĄ2Eœ”¤n´‡ålƒA‘XqÁī@ ÉbŖ$)ĀãĀ6sMųW“֐“ĒĪ­Cæ6ᑑR<€õĮ­WŽer˃@$œ*MŦ~^ZTGŧō{TBGby Sāq#ČÃ#oQœŒš„ȧ9ā2hĩ"`ŦxëHƒÔC,ĄH9æžH(wuĻų™'#6cH  Šq ÁūuŽüz{T˄ ‘@lbĮôõ*„Æ›ģ[JcJ3§ëL X ŒuīH’<ģn9ācĩF.T9Ĩi2v@fČÆŨ´Öáŗ“R><˛ĄŽMĄƒ)ãĨrE9§526 ÆjŦRųŠí'ÖŦ‡žôƒqåf˜YČbWڞņĪANØĨqøæ€¸Ėw9Ĩ^9'ŽÔš ƒQˇ?(ĪZ<Ēî¯Ōƒ!Q€9õÅ8|ŖŒSp7‚rhYXõ4ؕ°x5&vđ•YTōphAˆ…XĮ¯J{cŸ–‡cŒ`Ōqķ(2Ã0i띀cĩ1Ônãđ¤}ææ’劜ô¨VR2ǟLŽ~´ÁĀųø ŦœAŌ†úSÃ)5eÜŲęiįÉéL9wã ëR‚ŧĶAÚXtÍ0 â¤`žjUo|PĘ20 ŌppéIÉ~H8ŠĀ@4 h$)d=xįŦĒA"Ŗ20<~ĸ!\œ˙ĨmÄäp)CdķĐõ¤fÚt dy'!ŠÛU˛ģ)ŨŽqƒŌšŠKöâXĀĀ8õ§t8ĪZúĶrIāgÁËsŠš&!IšfĐü‘Å(dB8āPģFM>?›ŒâŖÆpā“RdČ e;ūé€ŸJs!aÁõψ°r(Cĩēšy~äqIל~4âB:ĶāĻj0ĖIéŠnķ´ãĩ"†ÆHë@‡ŋZCšWšœō3õ§ŗ´ RÄh2` ķC×=i§æL‛đN{PÎ=1@äđ(eķÜāûPæîč)W!˛ĀķīNHŧž æœė8¤ ÅFĮæėįîAŖh sœĶVƝ& äECŸŪrJ7Ĩ` rM–#$‘pp SüąÉÆM$a†2sš‘Ų@Æ*¸Ž3A W€ÛqōįĄá_?KzŌ™$dąâ€7sšfŨ„ĩ"G•#Ą¨œ0lÅ&fĪL ‰€&Ŗfۊy`@˜ hōx?• ļ âĨ ĩsŪ›Œœãšb#xĪ<ži˙"€3ÍHĀā „ŽâC@ $7J—ĘúS l1RFŋ) bÄy¸d@ÎjCF1SÄ)§q ŗĨķÜzS Į Réēíũ1Q-†œäqB’§šLíR‘Ū bäf€ŨŠ1ÆEŽhāÖ“ œŠ>ōҌ ąŠSČĻrXTŌ€šŽ)œ÷Ĩæ =ŠĮŠhl]Äö bži7ĀP žĻ”y¤öŸZ)yĸĖq1Ú¤SĀõĻ`S‡N*É['Ҝt4ĐãNČ_ƀIÍ(ô sšÉ☇vâ“×"…8Ĩo¨ CGąĨŪúĐŦ1ƒGņB‘Šp4œNö L@y9¤'†ųqAĮĐyšUáš4ŽÔ4ã×"ŽŒQÔP!¯÷éX%NįŊnÉ÷Ō°U÷JTtŠ!˜•;ˆČ¨ÚLŠ `â­HĘĶĩVŪ§…ũiƒ+†ÁĻ*1Žüæ’@ŲôŠUCdãŠb" X•Å#9Û´u÷Š‚( FTIõĻ =i¸"A…ĪÖĻTûÕÎ˙1X+ˇ&—Ā$})x Jū´mą`I¤1ŗÎ@į*5L 'ˇ­8ãhā“MgUÎAÅÛI ŠlH7.:*M™LĄ¨ųSƒÅ!’J€ B¨ĘŪϧ=y¨ŲŽĶŽ)ÜÉ]Į# MqķŒņœTŠĀ‘ōį=MFG8=ŠÜBŨpE¨É4øŲOzņš0#ûÄį4$}㌑Io´ÕdcœĮ­&rAڐÅ-žŪŖ3ÑRŖŽĶ¸g>• `ŽIhîAsŒĐš ´ ØĻ†ä7´Õr‘Æ{SeI)Æ=iöƒ“ÉéPīíüŠęÛąĮĀ32|ØžZãæĪ֒@Uąž)âMɀ>Ļ€1ˇ‘͝5!Ë)aúSAQ‚ũ=Š äšPh 2ŒœdĶväA§Ą|āŒâ¤‘ˆ=0)ŒsōõĨ*#ųˇdԁwrN)BÜāĐrOR3FK|Ũ1S8ųNx¨āķ@Ļ×Lœ“BÆį“MVÚNHĨ9ÛîĻ[ŽGƒ-­Ō‘÷°Ī S€ žĻ ''­ $t÷ĄKînMM,:qUÕאjĖ_*¤Ōãīd~ĩgNĪÚÛ•]ŽŌ\ԚkŸļ7Ē%°Ņļ E.sJzR €#Ą§€*.ôáԁŽ' i$ RØn”ŒÂ€¤­)äSŖHĶ€īMö§& Ī4 ž˜ĨĐx4ƒ ĶĀ'Ĩ5NzĶ”qHcšôĸ“ņ4PVI8Ĩį<⛌‘‘Å.FėU‘OlŅ֙­K¸~t%8qÍ4 b´šb“Ž”ŪqÍ<į¸P!ĄqÍ)ojwŨĻg94Æ*Œp(ÜM4ô§Îis@¤Ž)šę(Aã`nÅRqŋ›āāĐzõ¤$@=Í!ŸŒW6×|g“]’šæ‰%˜äã8ĢC@ėK˜bšbū ֞Pm jr@qLĸ6“ 6ž˜Į4õGSšibīgĩ2vØ<ņLcû˛¸Á4Ą23’i’)P$Z`(R0I¨HËąĀČO9 lnÉ'#ÖĸmŦK` •\g#éQË;ũū} @€°<āRˆˇ ž~´偃íR‰0ČäP2‰Û'ˇJnÆÆ8Ќá@§­Wiķ#qÁ ˆß8ČzSAäœPŠ7d3NhÔuëL…%AĪ#ԟŗĖÃvĮJbįŒúÔš`Ŗą4„.ĶĶiõ§ä$ŽOJF_Ÿƒ‘M/či!,v4$üĮu!UásœöôŠŧ°ąīځČ0ŖĶĘ/—œdÔlŲĪĩ9‹”d w C–ÚxŠöm­U™Ž~•&ü&@ńrrëNB¸É8¨Œ ¸ŠzõÁī@`ĄĘŒæ“9ˇôˇQC($¨4p2Ļ•ßå˛hû§æ=)š_0ežSí@…ķ#T8Îi7–wĨ#l'‘Ûč×_ԐÅwÔĘOJO™ÉÅHä¨ĮŪÄGō‚sõϐŦāį§aMÚKchЇāt¤2]ų;OJR;‰Æj0s!'JGc@Ɂ^pz c‘ˇ8ëQōŊ:SÃeqˇ4ŨøųiÃ8Å1 Ė6â˜FZ~zc/ÍĮJUô`âŒgŠqė)€ŠÄĨ/^Ũip!â3Ū†SœšNE‘Ö˜ <œSÔ QŒ Ō‘•„$„Č•ÍđYÆ;ščÛũYĪĨrōˇ#ßĩ\A 7˜I\qÉëMR@ÆsBļüĮU “''˜zãéO—&—xQúsB$j¸Üqš‘”´c‘L+“•ĪZBÛr=)€ŲT$`ũ*ãP€jR €y¨ÃûCtíH`HŲ€ipŊiĖ0¤ãšz!<úSņÂĒ~fįÚœŅ¨mŨ­&ī1A_ƙ#Ūĸ ÛC7­FÄãuŋŲÆipI´€vTĄL1 ššw–ŽqJ1íLŽTœäSÂüģМãŊ!‡~Ŋé~eųAú `Dw0;Į>´āÛWƒŸ\͜ÎOĨ7îŒëHI)Œ—#ž*3*ŗdŽŊ*WĮ\ri…–OāÆ8 M͒Į­NŖå*\ķPîژSN^FGã@@#'ĨG+†n[ŸAHؔöŨ°mš5 )ÎÜf¤FÜHČāöĒø9lc°§.QÉRy4 ˛ĀŠÉ7ĻŌŖ uÅ*ēŒdŒĶŨCƒŒĐ ‰Ø•ā|Į­L y€sOCÔQHÆI=čMÁ֘Ĩ-Í($dí듚@8“¸{Š ąŠko#ާ‚:Ԙ PďåOÉz÷¤éƒÆM*ēō98¤20Fō éNŪ7­! ÄļŅDq“'Ūü(wŽqšrˇ ãƒLČWöŠæ ‘@ˆˆ$Ÿ›­*‚‡Šü鎟—ŋQMXƜî'ô*áˆb3íRŗ8\fĄƒ`Ž)ęĮœšČČ 6å'ĩ# û§ŋŊ4(ÁįjŽÔŦûG )#•Tc\Ôd.3ƒM'œ‘‘@W9,‚xÅ"ÆŦæ ŪČč |ĩ21/éô Øw…HcųA$f˜[ž:Šl†F#ŒŠIˇ N4ģW`8įօMĢČŠ7€˜4€f7 Į^ B[k6ڗ=—šPƒƒŽhƒåĀ8Ī­;9ÆH4mU ~Đ`~4Ė”į­=HÜ éŽ”Ü‚@ĪJxF-Īé@Āđ:u昚\7ĶØ0ū´Āϐ &ÄÚģĀ'ÔŌ*žO9ąĢ¸vä¯j°%x>”đzdĶä4­pöâĨ.¯JU ĒIІ1qü'š‘OˌŒĶA#%ē”Ā`ph&wߐ‚Ã8įÔSK`äĐšģåô d„1žiŅžHaԚT”ĪlõŠnÜw ŋÍĀëB€Wæãĩ4r}éãpôühÁ´60p)@’ (f-ę3N*ģķúP:ŒĐŖî)Í7°qj~yëųŌĒ‚H#šŠ{š-ÆzԖĶŒ)|°ėû úԈœāUg”E"‡8'ŌĻR[$7áHdĒFXĻd‰ƒ€jULGĀ5Âdīí@c 2§JSfÜsK$XÆAÎ*9!…ŪBq@ˆ‚ļŌՓ­Ë XV6ÚYš4ËŊYäŒ-ļWßk-ŪōöeČŪTⴌYKbŨĨÕÅĩÎÉ\ŧoĐúWK qé\ŸŲĻiŧ¤ãôĸVžF]6;U8\JV;vu žô둜×/5đáČú՘ĩ+ķÖCųTēlĨ4uژSŠ­yvöÖeÆÖnƒ‚o¯dVĨųO)ą™ Bŋ|7ŠŖNz, öXä|Î;TÛ07íäÖ$wA"‰ōK‚ŊĢM/öQĩĖxęžĩ-X,&îi§æĪ~)XJ˛ caëOųTį†Dkgn*EÁb)Ļ NrqMØ’¸;h¤sPÚûAÔėŧ’MEŗ’)€GōgpÍL'%xĻ„sßڜFäī@ ĒŠ+ÍLŒĢÆG5[š*HԒ9õ¤Ė䁃ÍXԃ‹æ$ƒōÔXÆOJąĨ![Į9ČÅLļ6ĪŪã–éMęip@āÔŖƒAëH9§EôāRŠ'šh Œ p;zŌØīLęũ8§g­ 9´¤`f—đŖiĪ&˜ BėŲnK€>”ÎIãĨ.â8ÅŽÕ'8¤čN *ā÷ dbžœSĀÅ!9Í0$ ԚĮ×­ŗÍ7“֐ n3Аi¸>˜Ŗļ=i€Ö<ņŌž¸8¤ r)zr"†žvúW3…%žĩĶ1&6õÅrŽÅĨÚÞ*â4rä>”â¸Ô sBŖîãëK(f~ŖT& ]Ŗ¯zEų‰Ф ÜņK_pČ4‘@T#Їį$‚)åÛiMŊ;ĶpJŽÔĀj–“øTre[S’jė ųG\ĶЗLô4啎yĪz•CmĪCQ*…;ą’ięNNN;Đ–;zŠEl°$ö¤ ûūa})á˛rĨ$f'< ´nTLʧ`Īz~áåáhŌëŧ”†š]AéŸZqGķ.séQ}ĀxĀ4V”ocm*˜˛žĩ ø•3ļGPđ˞ũŠĒí(RŖŽi¤1a•āPĘú“C!Ļi™4ˉÄ;ŗ`i‰ęéi Ãö•Ģ{å‘G¨Ē˙hkĮi=íH­™0*­b.ZšÔį<ŋ'ķMŗ¸û<ģæ Īv¨ËmQŽsßŌ‘d,WĨģ,Ü\Å-Ā1žqÔĶæÕ`Œ§•&H?5QN[íIäŽŨÁ@ü(˛Ų­ũŋdßb{ņWmõ+iXIųŠæcUg8AĪĩMéōãŠ@¤ÎĨī­¤8‚Õ‰ŽŨ´ŧ|ƒËbŗÚEŪsÖĨŠßbųĨˇĪ4$6Úą$QG´!ãÕkËč!•Q $Šĩ• ĪéY7ĻæP˓Ž+DC6YâxÁR=ÅWōcšŋEE˛†íŪĨiĄ‹æc׎hČØOJžXÁ${RĢ)LŽ0j'r­ƒÆh¸Ŧ= ‚X öSg' gĐR‰T¨EÎsÍ ûH+ÔP€P„2jĻĄ$°,MÚAæ­É0@ǎ`Ęģ:úR@΃Jž–ō=îAĀ­&!×Ĩ`øh˛@ëŽAÆk|˛ŒœsYŊÍÅ}˙60qR/'hČ´ģ_•y4ŲpH4†+'ËÅ@ęäŠļŽ Ra>bÍژDŒ áN M¸ōŽĄTnũ)Œ2;⁍ĖlqŪŦF@ācЁb@āæŦŠ#o~´ŠH'qV4ŧ ×įĩ@xĩ6š[í‡ũڙl$ĶŒb™84 ŧĐ@â `1šp´Üœô æ€”ŨĨ sQ"dGzw~ö­1`î4  DGËģƒ“H1‚IéHh¨c×ÕåX2=iÅ@MÚiV-ø PœœšcŠÚ[nŽi[ &’FŪ'ÔLîáHÍH‡ŒcĨEĒäĩIüY q@✌ã° įS… ÄÍ0Á°Į x(‰FƒČ栈ę9úÕ§•NÎj`Bpŋw€xæŖb c954Č åj˜~§ß"ļæÎy÷§8Éô`l‡4‹†ž”ą0ØKO„¸ö ‚$ųņˇS›ŒāĐŗŽöĻ– Į?QJÃ#‚p:Ô@ncŒãŪ€%WH1ĨgāvĮj„|’dTYĪŌÂFfƊ6cƒOĀ^Æ:ÔDōH1$†9Ō‘‹ÁÅ?‘õî)^Ϙ‚%ŒŌļDƒ V;@# íHä2‚)~õqƒÚ˜d.‡qQ1ázûĶŖ.;gœR0PÚ6ßԁĶ`ĘJvĨ\+…ÎxÍ0,š$@Ȩ¸ŨĮŪ”ą8ÛŌ‘ļõ'8íH2Š~OJLįîķƒNŨģ%LvĪÔĀVÃÄāôĀ¤Ęž”ŽĄxįÖŖŒbAĮ"–ą„Įz‰¤,HsĐâ•]Œž‹Ū”2†!zŠ@!.ĪLS2˜õĻ–f|/LbŒ2HÛڀ§oZ3´Šq]ŋ(äžiŒ $’(´’\Ļxųz P˛>0äœôĢ[žAšd…XāPœĨɂ2)U1€y NR°8⁥Ūaį}iģúnįĩ'Rr2 ĨRHmŖ֐åIŪĒr1šRN:`}i@ĀÃą§) ƒ@ÆšņRŠ,žâ™†n0Ž´ô‘WåS@ˆå•Ąˆų;ÔĒAPũC|ˆĐ›ĨAו`­œ8˜h[<žŧÖW™0Ŋ‘V\(Áę“Í÷ĸĪn*ģExŌÉ2cMG¸9ļĶ‹¨ÉÚ1œf”ĄÎ dé÷OiI‰Îp;U—Õ ‘@ŒāōsJÎát_h؆āŦ@=âŗÆ­ {ŧÄeĮ9ö­a*,‹÷[‘íIY9æéM š$MÜMÚzwī¸MM,š$sQ&I9ÅJą…Pۇ­+&JBŌ vĮsFöÆG¯z‘æäĐ$f3íO\ŧ8ģãĪÖ|1æĮyŠLŒJ͕īQ5ÜlĖ9ĘöÅ,l%‹Ė\\Š`I–<’+Xœ PG\ĩhË3ÅēŸģČŽfâW(esķšÍTQv,ÆŠ#‘HˆėLˆ …ëÍVŗĪ–Y˜ącßĩYÄ&4ā¸ĻÉA,Ęz¯¸Ļ¤Č0g5!Ž5ƒ#“Ū›q“Ė|SŲbØQÅ2Gp¸éOx@8ŲO^´čÄũã0|r)yq?…J¸däqQI gæBÃõ"ČĢVõ`8,)ĀĒɐh Ü´ĸR*B“đËŗšžĨJępJāH 2"`\(íIŋ÷‡q⋠2CØéLRˎܚ`kéq[[ÍÎH9§Ō– ¯ë\ã3FNÆOY”ÉŊ”íRâ>cuõŌ˛a-Y—šÍ<ø‚ŋŧŽÕŒn œ¨ĀĨ3ĄÆW'ÜQĘfękVn2dÛøTĮV´ōķæŒW.Āî,Ę1éL@­’G”rĄķ3ЇVŗ|–”`õ0ÔŦ˜'_ΚEļGÉN~j'‚$ä$RåAĖÎĖ]Úd~ņIúÕ¤hämčĘâŖäghI—Ė9ŧ\Ŗæ;I*đ3NĶ\›ÃéŠĮĶîį”ųN7ÕĢgLâí‡ĩg-‹FßZ y ⑈Ā$T x9(ĪĘi ãĄĨ=úĐ )ÁĄ×jĶ;ēqH ųhR2sAã   ĐäbŽŊhÆÕÆis• wâ—”‚•N3@ 3‚iTƒ@Æ)6üԆ>ŠNh fbōwSąķSAہڟÆj‰€rięAéQœgĒ ō;Ķ$ Í"€(ÁÅ/lS§ŋjPFS@ö¤Ét¤ĪĨ/Už´M„ōhQÎ1J3ŠALâúҜŒĐ 'š@&;Š9§ˇQڂF1MŪÜuĨRqÍ74ü`P!˛“đŽfDÆs“ŠéXf3Ž+›yB’ 8‚euĢ~4Š@8_ֆq#dTe|“V&o˜ãšĄ"pģ~ņõ4‘V'Ļ Ų Ŗ„TĪĄ“äa•Æ=jrásîj9¸Ë â˜ܒäąĮ°¤'å'×֜@į¯뤊 ghę( eŲ÷¨ÉeO”nĮ­Kš\Œ`P&DŅ9|–GŠLjĒ žAĨEŊM4ü’dķí@=I#͊<Āįo_JUMųƚrFgōĻ"7VV Js7Ę2IĢ ——ûŲëPČÁF8éHd\ŒˇëMfHū÷SM~Ęy§íZ`1K;“ü#Ļiû—wLãôĻˏē; A‘ƒ@‡˜Ëœ‘Å0…ž1Ū¤*ßå=G$Žô `oŨúæ…`šc5#0EâŖ,­ƒŪ€cmšQÍOEcäR#luČĻ5Áķ„j8Æ~”(ĀČįԘį ŖÚ¤G~*2U9q=(Ęŋ)<6x¨¤@ûŋZ_0îprE!Ą#Ч‘ëMĮ ģ ģ)€Ölä‚i‡€Ą‡2)íĩIÉĨSœäŌĄ]vĀīTŽÂãD\Ē ÖšÆ€`;“Y’”[†fČ$ôĒBd€"Ž@Å6FÚŋ)éÚĒŗ°āœúJ]îqČ?ĨUˆÄŠéž*79pĮQN’9ãĩV?"А62âMÛc^įŊlč“ų–Ļ74gŧ=Đ8 éZēDĄo¤\đW8ĸK@‹ÔÕpŪhôëKŒ‚ßwu´@Č9'U­¯Ŗē&00G8Šŗ.ęö,ƍHPrsЁ@F ŖŽi ėI%žAېËA@ÁâœGĻ+6]^Ū&ÁbĮۚ_íhä“Ú‹1]hœ`‘M1wW;6ąrō°FØJH5y<õK‰°=)¨ąs#ĄũÔ?hÅA&Ąf¤ƒ*ũ+žŧkģƒ#1ô­æ†rātĒäî.}t:™öIk'”Aųr+˜Ž–rԌ*Ž w" [n9Ôņģŧ ƒŽôŌą-܍@ķp8ÅHŦāãâLŪ”LC’y#ĨJW ûŋZsЏ•XĘîw1ĀĄœž &€%.§;z⥋n8ÎiA!ņ‘ŠG?6?QLE”gV*ę{U9L€ž•Œ6ėN˜æŸmåÅ ^ũh įĶŊ;Ėã#9§ŦyÃāū4ÍË# štSā`ķB3+œĶW’éOÎÖ ô=1T"iåRÜQĀ1žôŨۊŠÅ>5N[đŠÆÜ Ø4ĻGÜéRË}:wĄÕ‚ŨiˆŠRv6;ЧÛŸâĪAW&Ņđ¸5|ĄÎ9įUc‘ 8§€r0~•cybPrz‚`ÁąœĶíė¤Žĸ•=[ųTk0EÃsŠtw!˜üžÔXd¨›ŖÖŦ:äÁĒ—ž  >QÎ*Ü.X`Žs@ HÔ废ԚĘšúՏ’6Øč,pĮŗvņƒÚ¤fx;e*õĢ)•wœéUļŠ›h$Ū—ÎXÕĐ&haąÕZĨ´H|—ß“É&´,ún÷k†´¸œÉļ2T é<;$Ē9‘ËŧV3Z\Ō2čuā⏨Ĩ(#Ŋf11“J æŒqKŽô B u4`ņØRtĮ4üŒķ@ $gŖ3Jqš^¤c9Ĩ^x¤"Œ‘@ ‚ĶēzEÁ9Í.ßzÅ8ļ4ƒ>ÔÜäāŌLZ)›GŠĸėgē¤Ī EÍ.x8Ģ$nyäSĐņQdîõ§ŠųŊЉ’3dh_CMfÅ(Îr:P˜`RŽhå"Žhŧc4€=iq…4€Ž‡­ 8æ”ĩ;åúSOOZ`ƒŠ ät ('=ŠAį€ų&ƒJŲĪ<ĐŨ8 `ķAcž)6āg4â ąųŌ¸ųggsēģ˙Vk‹“åšAžŦjĸ"PNūÜĶJōxÉíN@Á8$ԛH?Ԙl, Ž Žâœd 1 Í,@m`Wšk?b1ŠbģHö§ųƒZfx=éî0Á‡J$\ …âĒČæ3Æyę*Ãɒ84Ə÷œã TŠl1ŽÔlUįĐĘ7åhu-‚ Fi`Ü |píäÔeŒ“Îhß°p9  Á#’pqM@äō}č(<šxWgP!Ę>öëN•†wšzy~S’i­å¨Ú8 @˙0?75 āriä‘ķ 6Izœt ]yĀ8÷§2ãdŽæŠyJ”Œ&p:ĶAšD|ˇLR'–ËdŌā×"šģ~cŗĨė_‘Ā)q!'‘Ž*C÷ûcžfO Ķ‚q@}Ã%>iÅ ü)ŦIԈŅAÉāúĐ ŽÜÕpYnXúÔ˛™ĪājŦjŪ`Iī@‹›‹8(84ĒŦI%@ô4đ9ÎЧSbØŨHcß`į=iĒAo—{ÔlŽ\ƒƒJEŽ8"˜ ŒāæĄōČ$ŒŒS÷°JäÛŒįæ z剤ÃĘãŋ‘ŪĨÁĀ;ˇf!JüĨēät5ûŊ)ėĖĘ6¯Jtkģ’y4Ā`oSÍNŦz …‘CķÅJˆüš"`P*d-Č5(B¯ĐŅŽĄ…"`%1ú{S#ž Ln܃ŪĨn}Ũ;í╎@ËuĻ"fÛ´cn;b”“ˇĸŠĐņœvįŠ”ü§iĮįHhj|ŲÉS•öķ€OĨ(E@Ü ĩ#0FŪũh5efRÍ\ôÖũ:˜ėāĶ|ąœâ€ \+mC‘OVÁ#qĪĨ8C´’įMrŨ@Ē›Ø’Tāaqž*€#īëR2äƒČ´†,mĩųéOaŋ¨ŠVÏzYČY€Ą b¤˜cōū5^æūq˃9éY÷‚Ž<Î=ąef™É5j"lčRŽoõJKTö÷* ”#{šįĶ|,¤?"›uw$ÎŒzŅĘ.cĸ•´“4høÛëŪŗŽeWģf'€}k-ƒd8p¤ô¤ĖÎ]w{ŠĨ„åsBIcÛōœ0īLŪč05QTŧŸ?õŠAO”ŸÆ\pœ+wäæ™$…ˆ?§ĨD_(FÜ8Ļ#úŽiˆ˜ŠS‘Ôv§y›ÍRÎ2)ĨY~cÜSš$h€Īž*F5în&Pes&:O´.o$ =ķQÆĻ6ĪđšlÍníõĻ„h^j ėcG /zÕ?´É( š•lÕWādæĻˇe9'9‹ —rŒ`Ō$Œ<`zĶXŽO&–!ŋæR1či,ģĪZãŨƒ€1ëO9V;ę'’ â™'¨"”’äš‘™AÎāĩ &÷9EĪú’0P’Z`X”*Ą!qĮZĄŸ-Î=ęYČÚ[ ž”́H ąĮË 66FSžjÚT†šĀÆ}š  ĒAq#Š_8tnąUcãi9õŠĀM§å"˜‰Tƒ’¤“V#,BđÕ-ėŸtuŠ…@aH {_–ÜОIķdŋn•AŽIbŋ05aSrÔ `8HθĄ–3m!<žÕ`mr8¨/IsƒĶ!Rž1€Ž¤Ę `p;S™Pzā~UY$ÉlđÃ֚CœM#ųPÄHåąFÃ#nŨŠkÆ ¸žhĩ@-ÕĒźƌTc×Ō†ShqOI‚/Î9íIŒŠv&į;Žãڟ ΚÜT‘Úš]™‹ųx#ĻiąFŽÅ‚üÍ֓9n pE:ÚMę={Õļĩ1ˇˇzjZŦ`¨i\v-ŲĒŽâA9ī[ūĩ8ãmsP™Qv8Ž‹Ã2cS+×åŦæ´*/S˛)IãšFÆinãŌą,RqԐG´ĀS$Á§‚ŒÁĻǰ_›-Žô­Ų4 ĖG(ôĩ•@sK&ŨŦrsB§L㎔pN 8¨Ęƒëš{í3ĪZif'Ĩ†lš4ԃ”äĶČ\u;‡Z‰äeĀUîi€ō]p08ĄŨˆāÔg2)9íĨHČā rHۀ:R;āņ‘J{Nh œÉ÷¤!Ŧė‘œ ĸ™s–ÃfĨ–=ā)'éLXļcŒP˛‡bō)2H8>”ĄH'īJ(l`š5P“ĀâžĢ‚G3B €ipŲęh×#­*;ÎxĮJqGq€qžÆ“g—÷ķ@bû3Æ=)ŠInãĩ=Áån)Ē1ķäįŊ1Ū4b.TįÖ V iÍIq™$XĀęE@蹡^ũ(ôm€šĪcÚ¤ĘėĀÆjÉC´t§Ä`Aô ÷Ɯ¨äõ§¨Ėdņ‘LÁ#Ŋ8įĩšîzČtä` yč@\T;;ŗĪJ y ûTĒã`āqÔĶŖāäÔe6’7cځ/ß'<Ôō[?*ņëQ"2*BûWŠ cŲcqëR+@QzŠ9Ã}á‘ëRąĘđÔĨØãšˆœũ ĄžlíČõ¤yB.?!ˆī!ųxĻĸlō <Ëōî HdÚF HŲōđz‹vÆįGSC>FGŪ56F äRb6$Œā}i͆'æįĩC –äšsÍL78vĻ ÉVúsRo8<āžÔĪ:)uįQ6j_ßIčāŠĖš2ČrŌūĩˇIŧ3g´Ī41ÜFsëM+ ą„Ēš8Î=iŠĩXŗqžÕ4`†Í:VŒ   úâ¨Aæ&A۟zŠB͜/NM §¯ZS÷÷`üÜMV<œm9íV“叙0)ˇõÍ'} ’{Ķ(.s×Ĩ/™yāuŠíãI÷+°EEÎęĒā€ÜPPÆ[ņŠ hĒ[ûSTŒā`bÉ¸c:ĐÃ×čjPā)ÜĮāvĻšÆ9†JdrJ‹`wĪ‘f ÄíČ5/ɡœķځ2ąé‘õŖ>BvÅK$›[úT!›Īôã8ؐYģÔąą^8Į­Gä*(ÁRE+Qąš`ËR37p}ǞđŲ¨Y?˜;éšŌŠæŲ e¯ĖÊ FœJi˜Žr?*jĢN>^Ô؟$`c44¤ŖuéīK`_Ë'“ȨŨ]ˆQĀÔą•„­×ĩY%díU˲>0Ŋ(` cŌ™ sģž¸4†XiĻJDûšäZ1ôæŦDápnŒ6Ž B}ėæĨA~Bî÷Ļ"ÁPWp8āp„ œÕlȃ–ãļiņĖ[ø‡Ö€$1äÔNĨq‚HŠÛ,ŊAÅ4ŽGP(°$āįŌ—ĀķVw(mĖ1č)†į>8ÔEģœö¤•įJq“ĶŠ"• ŨGĩ0ō\“Šb–ō‰Ũߊ’GYŧbĸPŠģ#ŽĮŌ’Áv•$äԟhe$˜éLé´+pJQäˇVíŠbŽ •Á<ĶXŸ´Æ Ī|zUˆ g ČŠD’îaƒŒsڋ€pœäúT o™b9¤šaŅ 椇œ9~;Šų Ēqž)ąœįĻy_ œ†lŒ|͑ژ‰T+ē’OĐUŋ•¸#éÅT2Ē.åŸåKë$…¤ČãŒRcDō•EųךР¸'bāûŌČĖyVi rF)“Ō€&. ‘Ž}j5Ų G4*änīHY™ō ņ@‹.:gŠˆ—bš{Ō‚É‚ĖXžŖS÷.ā9 >Ü:XÕ@ x§HčŖ(RƒœuéHc7áČ9#ą§åWæį+#¯`*<0Č4Ā`} °ŌķHųēúš’!ōí=i„Á^§ĩ=cōØrZšAÉ*@éT?8Ē×s´03œzP āË׿¨Ļ‡!É8ëÅE fFķYąžÕ<‘#DAÎîÕD+¨eäĮœtĢr/đŠŠĘ…Ū9 a”( hFāÄ䁃I”€åH,r>”š`œgôŦsÂqQŸ•$œņ@ *Åø&†SƒČéÎå1Ž1Öĸ2đĖ  ų–Æj=ĘI#šĻœ qīJUc;HīBØ ”¸$ŒŠgžŖ>ĩ # "““ÆáRdۚ™T'ŠlԘ°ųų{Õv“Č5+6T!čhS2aY_ƒÚĄ•÷Ū*‹Á$%Ÿ„ė)Ļm¨¤É¸{ v šÁöÄ@=j6Ú䎸ôĒ‹v€ ĘÄ Oŗ&4Îy9¤ŅW-*…LƒŒTg IĮ>ÕWíR€Ęæ˜%™z°Qf4Kĸę3T?™ųf9¤ifxÆá{ŠdŽĒF+Ī4ŌËH]Ho•Tõ¨nn<Ė8īUįŧķžĀÕg‘xVų})¤4Ečˇ!TbĄ“Qy‹qŽ•žō"žąH8Ī4ŌÉf;zß5ŗ“œđ}(#įÖ¤Œ¤p:“LDŒíķSWcUÛŗ8ĒæDbAn{T€Ôp)6X>"6ĶķŧÔCqS@qŒH w$.˛SÛĨ 2\¯WĐĶK°XvÍq“•6ä“QÃĈpųÎzGc#^;Đ ųĖįrŽh,Ø9Î@īÍEuŠ"œČpTũM2TPį9éMÔ}ėN1N ŒŠ<ŌFØČéŠvN2Ø9ö L9ĪáLmÛrNiĶU]œ9¨ËH÷Å 2ø‚j@Ø}§­F ™#į]…I?J`NPšWķ¤ęsÁP:ˆ9ÁÎ@÷Ĩ2/Ũ_ē}h—ĸ(Âj˛+<€ŧՆE)÷ž”íĒv€9 CF7ndöŠ\‡ŒgSö GĶ5Vā8äPÛn)„IÁŠKl“– ´ãåųzR Ųv6íĮ‘Ԑ2āõ8Er§Z_!Aí@ŋ8či§÷™$ {ė'HĻŦeÉļũh°‚ąĮˇ#Ū“vTcļjÍŊƒ\äųˆ¸ęÍŪ°B¯ķ]Žāz@ʸ%I'šˆĢ1Ī\˛ŅfB7t¤Á@GJb+0ķÜįڐQÍJĢîíJŅĢAæ€$#Į­J:įŸJŽcÁœSŌ6QĶ8¤ø-ķ7+Q°Ú3ƒzž=ĘrĮJzĄ‘OCíEĀŠ+2ŽC”$ąéRŧ|Ÿ˜ū4$dœc$Qp"*č>îr*vÃÉŸJ˜Ž'Ų&•Æ9ĩŖmoZ„ĖĶ‘…,zT–ö‘¤ûu  ĢU¯-Ą€EklĄ3ĮŠ V3’Ûˉš\FÃĸĻŠ4æĢ3ģdŸZ[{6˜žÉčiˆŠ…Ž|ŋ֜sš|é,iæĸQž3ķuÅ;…X,ĸ6&YeĄ|Ē fīu“S‡™pAôĒv@SwŨ=Š2]ŦeaŪØäŊg´ķO6BėY [wäúRäĀsE‡r$ŽRųô§¤dg=} 8𐂠ŠLnXr ö¤6M‚y8Ú+GÃxūŨîšŖ!9ĮZĶđûŦšÂíA§š™ü,pZį§ŖÅ\Ą=éŅž+œąĮ$ķL#æōyĻs@ā¯4€ P2#ņ@蔃Ĩ•¤!ąŌŽÁöĄ‰)WîûĐy€L“J@€ā rá4r1JŧŽhčŪÔ§Ĩ!‹´QMÉõĸ€2Û"2UrE= Ú ښ¤ Ÿ–¨\N#w4Õ9<ô§Å0”g?Z Ā4uÆ:ĐĢŒĶ˜R(Ōį-Ō„!ųiŲ÷ĨÎx¤a€1LS…§fšF)Á–€*^G4ā">Ä=HëS[İFr}O­LXw¤cŽh¸9â€ÜķšP Í4üŧ“@ sŽ)Ŗ<札•ɤŪ3ļ uųŌš0‰_‚Äs];6PŠååÂŗsƒģ­TJC%>y¨|ÎŖ9÷ĄĻqyíb:iƒe<{Ôd…;ˇæ•؇>”ĮBč>\=æURNj-ĆËŊ=Ēޟ6ėŠž(Wīˇzb¤iŅ@īBŒrûŽMHĐĸŠ œPĪ3G´(RP û§ŌŽcļėj(ĨQ#qĪ8=*ĩÔĄ_rîëŠv5˒ƒQY´ÁBŗ ƒ9@‰_%ąĐdĶVI!CļN™ĒHW5Ũ7Ÿ…Ĩ í=k2+ØŅŅ'ČlrÃŊkBčÜãß4š°Ķ%Ī>´ŋėįJą8Č&–WÛõŠ) ´āæĄV9]ÃéLĒŽSN‘äŒ  â€¸ĪÍõŠJ…PAâšdˆģ"œrqI†“æ_˜v恒—ã>ĩâqŒäԌ6¨ČaHŽŦHÛÎ;SB°¨BŽš#­ W's`ö¤1…MŊI¨##q,:P;ļüäd‘QÜF F:ĶÁÁÆŌZŠV8|푁LFl`$Y'9éV”㊨ÕA‹‚˜_ dp)“äF°8f“5¤bURÆsU6—ÆÕĀĩpF¸ÉäûPÁ\ŠB{˜“Û#ŊpŒcˇ­ˆĘė?<āĮZLd/ ’y=č%vaZzÄŠúķP0Ž[qô„=sƒĨ5äglcō§`'vIĸ`O'Ą5Xl”ĸį õ¨÷n`8ëÍ1Ĉ¸n3SD ąÎ}ęw7Ėr(ÎĀÁČĮĩ'wPpN)›ÂĮæúÕY$ ÷y¤‡]šX.M%Ö0Ēp3šˆŗ8%ųô¨dlžiÅ×ËœZė ƒô¨ ‡bŨ5/ČĀ;7ËéCy|R;Ķؐ–ã*jĩ— qíPŠ,„đ~”âK8ôøÔĮR;Ō26Ũ×ĩH‘<ލ˜,z es‘õ ‚Æ„0ũ*U;ÎXí_ZŠCĮãĐPdōĮĪ“šŗ!+Čč ĒōŒđxúTi)cĪŨĨ<Ę9ĄīH2‘;I÷¨Ĩœųb6?/j•Ļ.˜<éTe‘Dƒ<ŠS*Ŋûš|fI—ģëK$JęĻzQ`˛$’3Šb4Ö4ŽįqÅ5ĮɑÍ;sPķQ6ō<įĨ!ąĒ7ąÁĪŌ¤`¨˜ã>´Ä^~n|Sō@ČX€r[q§Ģ3đØŠi‡i=jbĒ‹ŧĪ DOb:“RāÉÎ={TŽFXcĐŌČ:y4Ä iފ;ՀØãĨC*g=ÍģÁvŠON´ô@ÌäôŒî ‘rT#ØÕyūF¨5gr €ņ֙(P˜eĮŊA´{˜JÛÖĢąÉįŒtĻį<œū`ŇÔĶÎ~īŪ^9JœÅ.A|†8Ļ"G@˜8ĨYĀ})­ķ€ ŸÆĄHȔŽƒÖ€.eÉĖcSC0bv䊺€ķ“ëPH Ë@Ŧ­ģ.1VļĢ(!‡JĻę œt¨ŌWsJ˛WĖH#ÜSV!Æ3éBK‘œķ@ uĻ„jŌ|Ų$PĘšųq‘OfÁŨԟJˆ°f#;i4ģ‡<úR•e9=Ēp¤ņ×5oFUŗĮZ@1Wq‘šUÜzņ֖E€ ,Ų§ÆŲëō°ę #¨hˌpįBŲ€sÎpEL6Âg>´2¨?( NÎĘQĀÁôôŠŦîíŦ‰ōĄÄ¤}ãÎj ƒœåģĶ@€q֝‚ė’öéõ š%Ę÷õ¤‚'™Äq!,O"Ŗ\<ÍܜœVƒjŅÅncĩ‡c÷ĪS@ĨœŒEÔ q€äšŖyxŌf8d=€ęjŽį•üÉą=M#š ÷¤!…™ų'4ąFTpŋ7\Ķ’2‘’ŽOÖĻF3ŧg)Œ]„Æâ֐+?ŏZPO ãĩ1‹ŖcÆz Bz´4…×Ĩ:7"œc :†vÎxĢ11V{Ō Fr=icfLˀžÂ0kKÑųzē㠕5Â7šÔđūīí`ŲČ*qQ?„qÜîČĄp Í7,=i@$äÖŽŨžÔmīIÉéF{PúŠiĀ¤ÉÔP1xÆAĻäžEŽ7;zRE>´dšoQ“NUs@ ĪJxéĀæ…ÁÍāвqA„÷Ĩ9ëHc°=(ĻæŠfŽRgÕâœTœU9HĄø8ë@Öƒ÷ēq@)FŪ„Lā`)ËČâFĶÁâŖa“J`ûĩbEYq!˙ëQ`Lļ’ Įv}Ē ´€G&Ēĩī˜ûT g­)’Ev A唕Õ1’Ä÷ĻČû”“œã¨¨Lį~Å^;ąĻO"ųxsø-1 ų›ž)?ŊúŠ#°ca žõ8”!h&™†ÜķíVQAn¸#Öŗ’vG ’y­*m09íCÆîH¨Éõ;qÜôĻĖáS'ŒÕi'ǝÍИˇ*š^›Ē7UB[nĩēVÕĮJŽf“’Į9§`-:äčE"(L’K(M@ķ(i7ŊDggBŦ~”aŸåÜÂV\aúš¯ķ߸ŽŨhŽBņ°$L 1œ+c¸¨Æ…SœsO܊€nËSļxĀ&˜…d†Ī$tǐ‡RĞ3S¸DûĖXâŖ,IṔÜĐ;ēB1éMyĘÜÄãԒ1Î7d †]ŒģHúņ@ VŽESxHäT-ŧkŽI=ępÄ\GōĶLģFJsQŦ~aÜĀāĐ'¯ĨJ†P@ŲĮZ1ÕcŌ–0IîjYÛÔLNđO ¸QŗHŦ›°Įôų]ˇpô§Áoæ‚d!YFqLEŊ9q)NĻ;fÛķv¨QųÚØÔ™ÚFāū´†1bwHíLp á€ÁéRÉš>b@ĪjĢ$ ü§īPü˛Bōi› ŽM Ŧ~qŒŸZ@O@HoĨrĐ1žĻš! 0@úĶĘĀš’0āԌLw¨ÂRĢĐd j9îūÍ0UNOZ´Ņ˛ĄeÆk‰‘Éf%ŗžiĄ3[ûQƒPņš´§{βáņ‚+J ¨1œPĐŅ$ŋ*î÷¨t„+Ę@=M0„ƒ#åOj`?2\Tv4ö˜”Ø>_QU‹ą“ĮcJ-¸ļif+”ˆmbM<õ:)T ~” ļ¤8÷…7BãŪžŒ p9ÅJ>däū€`BˌŒÔeX}ę‘ŽĶ“ži8ÉčzPųHUüDß1Ãgé@`pAúÔM““š`ûä1úR1PŨÎ=¨Čc’Ų4I’žæš>F9枠‘Å1ĸ$ƒžqSGžŒĶ FeīR$A—kriĒŽâœB09Č  Km<Ԍį951pbœ„íÜ  PoÉÆ4”ÄA#’ĀtôĨ'fãõĨ*ŎgđĻŗ°$ƒÜ‖ 7: Dˆž„í§*ī’*XÁRGcڀbBƒĐĶ$?0Š„jĢšĪ9¨Ļ|9úĐÂúRÆãp9TJ6°mÁŗS/=3L@Ãq;421QžN})ꄐTdu&‡u,UTdRĻ/,.ĶĪZŠ@ĖÜį8pŠ r BÍąČŨÁįštkōqŽĩ$#įyķQŖŠ3žĩ$ 7œdIxŒGŌĩ<8?âhž˜8ŦČØ"…fܨ­]ÔęĘ`ÔObŖšÚ0ÁÍã4§š\X P)įšRiM—šw¨¤įĨ(¤ãå¤ œ wAHOhā‚4.6āRĨޔЎZ\6E; 8ë@ {cĨöĄx^zԐ2) Ú}hŠp( f9a€Í<¨‘*T|ÕdÆNsJĮ"‘W9Íō(wqũ)Ũ=Š›Nw SÛ Íœ9§Sz x4œbŒ‚ÜĶų¸§Œ´Ā~xĮziį4ÂpEÔŅ,RŸ(%ŽÜô­pąĒ¨üEfFCEˇ'4ÍōE:šr1ĮáOpZmqÃą”îūözTXÜqˇƒĐÔ\Ã+lU!ēķŪŦÅא~”žå!DkŗÔŽ”Ē3Áū{{Ņ”ûĄÆOjC5ųÆZ”ĒĢ`Šã­†Üv¯Nõ 9wZŠÁ6rØQīQÔ>[i Hģõ<j@>HÎĶ–튋s¯äSäa#æįķϏmŖ?Ĩ6s˜”I¨ĨĘÚ§fQƒ´;Sˇ+(ÁÆhœJ­Ã‘N‘X6TqNØA`F}¤,4Āj†f8"§Ûƒ×\’ˇj{ŗhΜ6øTŨN<úThÁ‰šœnQŊGËŪ€¤`}hl° šSķ.@ĨRGĘ 0QTāԊ‰Ĩ_0°>‚žĀã9äÔ~Y'ZvQĮ=M0mcĩAZ Ey ŸĨ.N:gŪ†!’&ÖTĘÁ”ĮšH6âX} <,kc,Ũ°h bČ@īNIwŽ{æ¤ųYöāâšĨ7ēĒäŌv30`ÔĢÁ;ÆH÷§ĸžíBq#—´œŖpĪŊ*dŽN?V`@ÂŲ qŽ´Äūû+ž”ģ<ÉOëJ01ÚŦæ$ˆ„\įš†ˆĮîų8Īzsēāî*ģ ėĪ5,Éûœ—ųēm”i(ŅĪ# ¨™4„äŠnH!F3֜s!ˁ@&æčOT 7Ė…”ûŌ˛¯7^jTE‹ 2sëLB‚…%E3i-ĀÉ4ã†SÎĻ L}?JILĖ ØĶnU7.ÃķÔÕmî lÚ§ƒĖëHcaƒV"æ&ĄlFā)9ŠâÜs@wĮn*÷‡Hūڏ¨5UcÆ<âŽh{—Xž0jgąQÜîqÉ4c&‘Ia“J3Áé\剓œf‚H"”€Į4@Äæ§į'Ĩ5¸§hœæ—­ Č'4œ’sHbô4îsMČ”œ¯¤äđ)sŠAĶ=č'8ė)Ø 0üŠsži n ŧúŅE†eĮĪQO#ŠŒ:œRĢ U鎔ė(͆*žN …ĮCM$Šp?-Í1ä‘Ōœ )Aœu Į­/QŌ“¯jU$ph3ÜS‘ģq܃H÷Ĩbx¤gšVĐFā:՝ŗšŗíMq”ÛĪ5Ĩ‰lWœˆÖ4#9§ŖŖ!ã íP*'ŪčËS† ´íīÎ(‰ĖÛëÍLÁT̀đÔ@¨’ØÅ,6æGŪŽqžAæ“rŦøÛķS_ $5B°˜~}ä1íIšŲšæ•ĀsėUAīQ]ŒyՃhwd¨ˆsUpã\ Ž} H#;>đė*åžfÚĨHiÜy´ UaŒ`SŖų¤äā:Hö7ĖO^ÂĻ.0‰œRô+ģ8¨dfķܑĶ5*Â2Yœ‚icT TsHdN›°¤äŠxP°“œz˜ŽÉŒšTD(Q€>´PnsŽpiĢäG­Xm—tĨ}į€5T•'‘íMa8Îīz{ĘŌ6⠑‹‘ĪÍßĀlŌ;Nr)o Åy"†éš€ôĒŌĘTņœ ,"Yf‚#Ą¨\äįžjX% ƒz‚3Ū”ÆŦI'ĩDYOĖh €2 "!ķU@ :T­ ĻNNG\SŽvÆ06æĸ1™zĻj|ãÖĸ’AxJĒD›‹@īOOž2@é֟¸˛…ŠÍ$#lŽŦp¤ņ@†Ā$āšR€žFO\ԅvš@7_J6vįІ@ā¸ĮS `ãŽõlĻÜĻŖîlt R3ŗąšpdg8§ˇÍ2FAÁ DY%†1ƒØŌņÁĻ8ÚŪŋJ~ŪŦG×Á9ČPzjHŊpIĮ¤vWÚ`T‹„ åđ1ĘäôĸÉ'œSųlņœÔaY[v ‰ƒĮŒ M 6IɤķQzŒšpɉČĀ8éëFƒãfŪI늆5ķ$ôĻ…*2sŒāÔ鐸UëŪ€"ČL¤ûÔ¨Ŗ%”j—derXîjŦ’•m¨3ĪZœÉąžî÷Š>Ô eN2zUbŲqÅ3ĖČ*qŌ€%ßÁdw5„`=r)“vUŽ F`C@J˛I‚qS’T?<Ôi^Oi ”láĀĘēģÜâ' 9¨€bʼn9÷§¯23`.M,›Lœ÷Ļ"Ku;ö•Ãi÷qS"§ģÔVōėÄįĐzÔĶ;ÉnYōa@účd†LĪ„įŅ* Č=¨•2āôÉ"DĪ €})eA†#9õ¤Įđ§ēn„í@ŖæD+A­ØĶvCŽĩ‹‘W8ų¸­Đ œúԐŅ€–ō‹}M@փČÅŊę،°,>ũFsķŪ‘DęL1î'œt§@Ģ3 0A>õ—s¨äŽŧÕiĩ‹…‰Ŗ†= ˙ĸÂm/uy!š’FŪ>ĩ^ËRīy[ĩ$w—$“É&¤IĀdæĒÚ úg›¸r6Õ¸,d–Ņîc9Vą­Ĩy¸ue\}īZą%˰ĄXŨ¡_z‚‡‰ öZ`+"pj6Ÿ(Ēzž†ĻˇFŽ6U9Ũր%^=A¨d%˜áEXaˆ•vÕĸ“ÉÚh\Č+äzR*NĶԜĖûđĨž”a!˛ÍĮj˜eiį>”˜pÆ~ŊĒ]¤˜Čˆ 0ûĶFᜎ•e÷„§„fNޔ…Ã2}áAQ6åíRȅr=ЁXŒsԚ`|¤žūô˜¨ ׊QĶ”ĄŨ¸Ž­$TlqŒSå9}ЊáXĒą>ŲĻ–s&: Mūĩ8=ę1÷¸;I§)(O͜Аd€úu¤¤ī0Į֝3°|mzsL‰P34™>˜Š%5Îī”J`4qęiɝsģ=p)bR„đ{Ô‘î …r1JáaąŽÖ9=§*ļķč(IŅX–ųŊé<ô’sž”…@!: įˇ^§‹Ë´‘ĮjØ`;ņÍ#!L§z c°EÚI'¯Öv(N¨|ėŠúS4RDyÎЎģĄĮ {Õ$EY2[ƒÚ¤Ë&00;ŸZXFb1Gš „ @#“LHķ.IĀ#֘āų˜WéH !—ių9ĀŠrĨļj@f?/|wŠ"î!Čô´†?Æ5,vî[9¤SûĄ‚2;TË!Ûķ(B'I‡qĮZĐŅ_~­Wŗ”Ŧj0wWô?ļ“° ņJ{;ČÎ(#) 9ŽsAØĮJq@éIģšqåiĢģŊ)îI¤N (õ nĮ<ŽÔáî`ØÁĨ `怌¯ÍøTņ>Ҏ<{T~Q‘†8ZRĨËɘ'Ī…ËT’JņF¨Ŗ¸œS˜Ģ‘’N) 2~\’s։ãۘn}Šü?1Ō›ĩs€Ų=éÔT9ÎEí ĪĘ;qSļ^=ÜÕ^RŽījÅw“oĘ5$;šcžÔŘŗŽ¨Šž@@ņÛրڐġaPÆōcsp3ÚĻ04™+Æ:ũ*QĩIlĐŌėáy4‹2x-ÅBū`@P4øÎB‡<Ķép7tĨÜā/¯5°f8HīJ~ņĪĩ%úzSN1ĶīT`ėB@Į4đęÃ; AŽ8§šsŽ´Ā6Ū™îiáX)ĮĨ)ہœĶC(ãŌV=NiJáēŠxsË Š•ÎWåTNP…ÆrM#9Ģ~ ;€ãĨ46X. =ÉÅ1ˆ÷°;R’’%#Í4“ŋnr1J?xÄĪŊ5P–"CŒĸ€'P›A'JĶÍÎ *u‹…lÔqĖĖÛAĮáL ;KAÚ§XˆqĪĩWI@$gŸZ%iژí‘@!΅"8P3P3’OJtí ų]ķė)"F•HûƒÖ•Đģ€T3ÂÛ˛N~• ` ´‰>¸¨åŒ23ĮJRŽ<(Ā94āš,zb§8Ü1Nážj‰_ Œ}éæn$t¤“îc4ąĸ&'4Ā2Hû¸&fÚĮ€: bb0HÅ+EåBÆÖ-œZxi7QĶŠŠüŧÆ  #!›G^´€@™>Ĩz†HŨ%ÁNĨLAaō1Jˇ8Ģ6˙z`WgHĪJĨT”ęzԏâO@j'ĩeā08Ą ›j:VUÛ|§ķZS“.N0@+™æmÍTIeÛ˜ĀÜ3Z GævdžŸlÛNãJžˆ"|g?ZLøÂ‚IŲLg…4æČ-ę3ÅS™ö9ĀëHp†6ŨƒQĻÆ@Pr9¨TiU[!wsVĻku|[’F9ĸúØ:ēÔ č°Æq‚iąōŲT}ŪšĻ#ÉPjUƒdžĩB!v,y"ĢpvŠ U‹–ÚBøÔH‡ŸOZFwŠŨ ĶÄĪ+~ôäã€j&,œsM ¸Ķöm™-Æjģ!-ģqŦëH뜌 WH=ÅIež”˜ Ø`ÔąČUpGåHe„G“ŠkqũÚXĐ0Ë~1œ}=(´ĄąŌĩŦ%€› ŒŦ™7OJžŪoŗBÍ>a?Ĩ&4lÆdd*G§QšētĻA™-ĸ”Zypãj’†:~đâ¤;Y°#Ĩ5Ø9ΧjŖ ACցî<™|‚ØųIÆiĄr˜8ÍAtō‘ō9Ú;T6÷!Øn#Ĩ_ō×ĘÆ@qĮ4‹•RšĻ솉éPāŗcĻ€!=ĩ9W+†n{f–)Tļ“ÚžČXüŖņÍGژäw§ 8 žMFÍĩ9n3Iŧ:Ž{‘@ äĘ͐ OQRŠËčzUÛhūMš ĩRHĸŠBĢÉcÔҏ!‡Ę+!aīLAĩN͏t¨Ė ŋ ŽÔ#2ŠnB ˜° ã •w-ĮĨ*NŪQŽÔÉS|ÂEĮQL–?Î)Ą˛åōp)Üį'ƒĐRÆĢ d č<ôá€'œSv’øĀ>ÔCčŦî*ĘNŧÄÛx  eVC’¤ũ)é Ŧy ĮlRÄæYÛ*ť ˇG\w YÛ+ĖrĨO¯­kOf"‰dRERŠt2€Ž ˛îe žxĨ`šZ\˜Ī˟z§Ã0ŽiĶ]„ųFXú ­•ŸiŨšb4!ˆÛ#ƒÍjč(ƒ]ˆšæ°Ą,NŪq[^ ēÜ_/Ļŗ–ˏîz**S€9ύéCĩbP|Øâ”})ĒsNĪb(ÖæJzķH>õ Ž:ŌŽô0į­5N)'ļhûŊ) ä“ŠvĐhĀ<ĐO=)¤ō)FK{RäŒf›œ vҊNô†”SŋEšœNzĐ=*>A§rqО@Æ3NR@Í&Üö旀q@tĪzEāsÅ;™Čۊ8ļ}és‘H§b”|˜ 1֐āfŒ¨āži=ûP¸‘MČÅ;¨â€hÎ: š\Đ\Šy84‡9Ĩ SŒRۘrM+ŒFqÖŧļč7Û'%Į.z}kÔ$û„{W–\ˇ—0l‘ŧÕĀL…ÆŅÆ:ÔD‘!ŨĀ=éKn~v5r8–å1ŒŋN*Û°Zã#@FâšOZ‘ķĪqÅX‘Ú4d|ųĒá°OåJ÷‰sžŊi a°ĖŲ‚œō†š€ ÜúS§h#'Ļ*XÃn&? p‡åÜn)˙6TôīEĀÎWjƒœöĄQÕ ĀŪ¤ųŖ;”ƒƒÅCq 2‚äķÚ‹ŽÂ܀yíÅ<)R˛ũ*vä‚F{Ķd ääu Cä—AãŊD%/à œĶĪīTįŌ›å&õôņ*¸bËÜzPčXRŖž•ōwÁGĨ0ȊĄŪBĨ{Ra.ņŸ›ëMĀū™Ē)wŨ đ}hgp@a¸w EЃærŊšĒŽąîÂúSdŸrcn; UL&ōxĩ+•aĻ2ÃÆ~´2ė IœS rY”ņKVÆæ$vîßģ“)ģS6`-ßÉŖĒ@õ!“jōq‘ÉĻ!Î °byŠŦę¤är{ƒMp#ŸÂĄ‘9v{Đ"u`Bļā=ŠArsTžaëRĮ ™Ũ‚=(>sÜqéQŒXrHīڅPØdSģĨ<,Œ0¸q@Čū`Œ Tf6,â3VūĖbJ;w20€éФģ×qĪzkI¸|¤îô Ą2˛Œæ§ō‚¨sLEuW‘šŠœB€ŒäqV•awžØíHņ´‹ÁÔŽ;Ŧšūî:æŸæˆlg-RGōƒߛÅD,Ũfč0z⋁īelw5ĸcKxUs’zŅkĨĀv'ŌŸq™˛Œ ņL(C!ČÆ=*¤ .yzׂA|c ¨nUrÎ {â€(īķĒ|­BFÜ+•4^JíaÁĨvÃnUëԁ ÆNä÷¨&ˆųĄĮ ůØĪ8īPąÃ6ÕÎh Į ch”€sRFáØe Ôq[n?)įŌ§’ŨbUŪ\uĸáb+¯(Ÿr}挺:’Ctô­agkr~Gd~u—pŠdUĪ=i!ŗķNXÕ ũãĪ?ʘŦn})"FyS֘ļ.ĐTÅD˛3”ÚiąÜÁ“Sŧ[hÕã]ŲõŖČ]AūŽā˙v°–@Š1Ôv­õä’Y"ųˆ8ÅE¤ĩŖČÂoŧOÕ-¤îĆFxÁ-ŽÜUĩ8ÚN*ļŖhļˇ*böŠV` !a’8Åh ĘFqĐV]Ã*­Ö§k‚°“ėEdI?˜ų?JIŸ* m;ŗMŠr€ä ˆÉę>”c'Æ’Ce¨åËd-Y[’ÄU5Â.ÚVã…Æ*É'/ŊË7<÷ĻĮ˜ŗqH ā`‘N…ŒlFqõĻ2 ‡išSü=)ķa‰#š„mRpNMMŒôŠ$$ĨA`ŨWZ.NzRcEÛĢŁ„j€ˇrjDœÜE¸`cƒY1–å˜õ'­hiėƒĖØø .G'›1*Ž›ģS ĩ €Áue ‹…ÛÅ*ŽĶúqAH…`gFR=a yUÄR#8=ēˆ ' ~lô¤rˆ˜ÁëP—!øŠŋ,¨äú ĸŅüßt¯4 z•pr>céM+ää°ŨOUŲ“‘Å8ļå/~´€FpĐŽĐīUŲJōA"Ļ*ĐôÅ1†Rԁĸģ¸Ā!y÷ĨĖÚXŽ´ā…˜äp{TŠ d ŧw ,A–‘BíŠŌØ*ŸŸ*ͲÄĨ‰^3€)ˇ MĀ1Š+Ū€ą É)QŒāwĻ1g!›–íVLrl8āgĨDŠZ^TĶB"ŒÉ ĮX,’@vÍ)ļuų׏P)ąĻO¸ŖPE7õ)ōæ˜ĖJä3žĢė!fÚÜhÛ›j/^´\ QĄÆ÷BHô¤ōŪFųrTõö­X‘[!xž(.!GSž´ÄPCö`2ŖĐTlĐāģd;zmë—mšãŊgųeĨ' úĶĻČb%qžæŸo¨F§k :ãœÕLķģėéÍFö€HYËIÉnĩ(!˜˜GÍÔÔąøž?ŗh[~1‘Xķ[áK‘Ū¨įįČč*ŌDģĨÚŨģl[Ū´ãP€ų˜ĪlVv‹ĩšŽ=j=GQNbƒ’;šÎ×e^ČÖY6J8$ÎnčlĩS€{\EŽš4aŧ؃jé<3{ÖŊlĘXØöМ_+§ŦŽ€ŌšE9ōkÄ#åã­; ¤¨÷1 pNhŽ´~4df€ˇ4mÍ ”SwZ(?#4žÂm&”Œ˛G4…Xķ“JiFw{P!‰ęhЧ†ČŌ~oJ`Iži:´.ip?kã>ô˜Í<āņŽiŊ:u ‘KŸJi??…8iÄdS~\b…”$ģ€#$“ĮĩHī°í,SB$EBå={Õ ü;ĒŌK´0Czͧq´ Žh,HaĮjŗfŅ ŽW˙­I/”[ĐĶ7ŦrÎč;šmc%Ëâ0AįÚļėôĢ[i7 ÄPŅ Ë–V­ˆ3ŲÎ;Ô6R ÔŦaž…ŖAĩו W<ē=Îķã‘ÔŸJë¤VH¸>ĩR&hË3IĄ1´cAáyˇŠō*yô;{d-$ŒĖzcĩhŨŦG>¸ďpģšš:a0˜ŲJöĪj’5|Ņ!ãąĢ+ļˆ$Ôļ“7ņ>´ÅÔĨu TAQ ;aēŠÔ¸Ž6îÃJŦ,ÉÉF¨¸ė5Ŗ ǝN§Ķc‚ÜžiYäˆ`sP0’I9P D‹ãęj¤Íæ-›íVÖF0AāuMԖ/ˇ ÷Ļ„WÚzsD‡j ļ éVãĩk˜‹+Ø Ļņ¤1É÷‡zRøŒqɤ\3ŌŒãŸÂšŦYĪÉԐXē%#_* fyIg|cŒ„!|íééUæ” †Rx"˜˜˙4îā•> Ô.íŧį“PšÃer6Đsŧ$ÍU‰¸æÁL †¤‡-H?Zj†.['ôčöĢäõ=i2ŲG €āõ¨/VI-vĒņ͚´ŌšÛ ¨˙ļmĻžŠ¤Á˜kg6ÂLmÜTļ“ iüąÁē(P/8>ĩƒ¨Û›k—Ęá‘MJäĩbƯwiwonv°ā¯ĨcI4Ļ@Kc”â¤0§Į™Ā jļå¸&2&ÆãŠŠ ųfŽÜ!BŒâŠy€¨]¸ĮSHczOJ˛’&ߔņš„(fõÅ^Kč’ĶȒpr)A˜œ’M=Gf•äI[*ĄGĨDr¨F„?1Ú=#W ‘QZ+Įv0)îû“q"€!vđqJÎܚkǞ ãŒR\n•qޏ­ØnOĩRōųs𰤄<Đ2fa´íJŽ0ëP3'ņsK¤QaČF@įĨUÆG§gųĒ%aŧŸáôĨ`†VÉüĀš, *UIN=)ą¸ ~côĸd;Ī9æÁæDJžiˆĢŠj'K+æÆNņ•ô¨-GŊ/öÖĨƒĩ‡‚ā}ix¤#p É4ŌŲéFŌ”ƒ@^Ŋiç5px§ ãš@;ƒA`ÖR@ÁŖŒĶGÍÍ4ōy§N(W *ļIöĻ2œņIČé@ (%^ĩåz†MôáŽŌāū5ęĨ˛†ŧŋPōNŖ>ė–Ū\QķéÉ:ÎŦ7ąÁô¤hųĀü*$‡cōxĢ9†îšŠCĸÄÜ7z@FT`R +“‘ƒ@Į!P™ 2OJpr‹´āc֜|ŧ֙…fÆ:`4åˆ<đ*7fØG#= •cŧ•_j‘Z5=Kz@U`v€Ėp*HČōŗŒ“íS>ÉģZEÛ°lŽÔ€¤Á‹p3Or76{“RųK惃ÜĐĒKˆ—žqõĸáb Lå${ÜķÚĩm,ĄŽÁä1&q‚zU˜-WMĻečĶÚ˛Íæo~sōgœž)\ĢXißjRwmD9ÍGĖĐoˇŠ|Œ÷§^]'–é‡'°|ĀrN ÷Ļ&oÂß+ãņUQŽBü€ŨŦĶq+ĀTąÆqÍD"!@b89ĸĀ™ri‚DáˆÉĢé˛āĄ$7\֔Ŧ ž:Y×, iĀÎ;P4V‘zäŒÕ­=GÚ8#…īUXÛ€§[šA‡ÆÎš0Ál)˛§i;­@“2ã<î*VųŽOŽ•$LJž üæl‚ÅŊ=ĒQûÆÁäTļö-qpąÆ2äô§{ Åí3B“Pd.æ1×đŽŽ=ÎÎ?õbGÎrÕ%ŊģY4{ĮlNÔuH-T4´Ö§rė‘,p`pĄGLR`ŖáŗíPÚ_ĨÔ)ÜqLēíÁŨČĮŪ=…+î^–O—“Ā+>yTáSīĪ“^HШ_5ĢmBf˜ČšQžž”Ōfë™"mĀ{Ķ’vx‰nm u§[¸|…\SEÅceŽm­íTĢøéīYÆF•÷IŨy¤ō‰nO”sS•PļI'֐ČÕ˛jP›`ķFÚpÃŌ$D€ ¯+ˇ@5BrXüÜUÉІÉ8ôĒrĄ•ÆÜäUĸäæ›˜cĒRBēúR‰đŨ>”ô—`éī@”ųžNĻ­ÃųŖ>•,‹÷†7Z˜ÂxŨŒŅqØŽb+ƒÂ‘AŽ& Ō¯0ۀɕ^ā|¸QƒŪ€8I›Čt ČôŠ4ā žŊ*†ēÛõFį Tú{fr1Z[BSÔÕh°pŊŠ­ūĐüŠ#o—–É>ô­*¯ZDąƒ6N1R´ )ščĀTĀį­"ō“­UžĮ#UÉ #¨ÅW”q֚Iâūj3ti—Ôjiä“@ˆv>1ˇu7/^*Ø.GÂëÉ ‡œŽ”đüz ŒŽ1LÚ¨Üs@ÄnÛRˇø¸¨ä\ᗭ.p6ąÅ A8Öĩü%¸xŽ×$}ęÆn:Öŋ„KZ pœÔĪác‡ÄuQōĨ!å õŖŠŽ2úŠ:dŌr—i¤äĶĢ͝ŖĄÕÍ+q@ĎԠbŒö¤^¸"€#“M# ֌œũ)ÜwAL'Ĩ8“šBx¤›ĩ8qH h8 bŅIÅ‚Æv8â€yëNR¸Ĩ’qVH™R•xĄ°)q@ œT›iĢÍ8œP ni3šQØPŪ‚˜ ŗž‚œI§4Üāõ iĀ´Â}hĪJrãĻi\)ŧƒÆ('#“@œ‘OšjNGjJvCRĮ(ōiøË`P!„|§^k¨ÂÍ>Tœ×Ĩ’EyŽĨ6uY‚îHséW!0 ~”ĒێŌĮ|Rų!Âã\ĘVRĨXmīV2ÁÚĒw8Éč*%F.r8¨€wrÛpzyķä—gĘv6OĨ$jW¨$zÔ$ŠNŪÍF¯"p_¯8  Rck9&ŖS bʃTj;˜äTĘ@'/րŌ##n 1÷¨ČLm8ÉéI¸œü€‘ëM-æ mĮj@XˇŒ—ãŽOÛCuĢŲ' ĒĐ*TōŖŋ5…ŽĪåßųHNíBWvėŽÃQÔâžgÃī`mŦBŽFp}ÍgiōFã÷&ĩŽŸÖ›V Đ˰ “ԐÆ7îīīRƒ 6>bMw?\~´ƒb)$v˜ÁœÕRK>á1Ū¯°ŒŠæĄxId zP)WrOAYĶČ̍7NkgɂAô&˛/cÛ&:ŒįŠh{°<ôJH Y¸īJ tRÄ?|Ƙ3rgĘü¸āúT2ŦĀįØĶb/ Û9Ģ ŲF ÜT=‡fÒ0*HoŋŗîÆė€søT-sŽy?ĨgęĖëkŒaOŌžäÜíŒt™Âv }GJÄÕŽVîáŒRy‘uZâÔzkĨ€ kˇëMÅ-„¤Ūã˙ĩn´ˆ‘â?)= i\kSßY(`¸qœŽĸ˛5‚ŸaQß##ŌĄk¯ŗÚFy#Š,ė;ظ„då€ÅJ ānlƒYvw $Œ’ Äô5Ģ…Q‘JMX¸Ŧ…FCmīÍMŖ$(cu §øģÕy›äŽãÔsLF$ Č09ÉĄ. U›p<Õ*BŦāģØvĒ@øãžEOŪ\„ !쿆ĮbķEąK(ãō Á•Ru¨Ú}ã$ũiĐOƒųÅKģƒŖRĂ=MLņĢ[°8ČĻ+…\’1œÔÜŠÜW­*2b9ĪŊ*Ģ!Q€¸ëŠyiUÆHÁíR; n诀#ķ‹9 XR Øšô¨„0 䚃Pu‚Š˙3{ˆ’âô[ļ"Ã.9¨ÆĸÎĀWœāvæĻ*djėEËI#pĮ<ÔYenßZz¸ 7tʄ°VëBrBŒsC<SĸMøČæ–@Š÷š4ÛjŽ[9ǎŽā­^“˜ķÂũjœŦ;œã֚§ÎHÄŦ:fŦ]ŪŦ1íOŧ}+,ÄŌɐH1ˇ)ŒļMW ģX[;ˇŽbŌ9*kV;ˆŽIU~AŦSRHiļ—ŪíÎėhjzĮ¸ˇč9`{ÖE $A­]_Y2D`…˛§ŠÆƒ—ÆqšjöÔÔĩoZ°Jsք=ČŅ:ņV c8ôĻØŠÂÔŅĄ ÃæŠLšwLŽHĨÆOÖģ8l€0EsˇO„YUОœpkb „–ņČOĖG<ÖošĒėH9sŧsĶéNcŸéP—/’šĨ_‚Ø„ ÍIDąÛŦ¨§=ķR,[ˇœTņ´qÆYˆU Žūčų(C&û|+É$‘PÉŠ;dvíP#Ąp7üŊ(ĻŊļ§•FĪ=ÍMy$fŨ¤Gį×>Gņr ­yzŅFčr>^ôŌÔMœíķ‰/e`IųģÕë |ŒįŊe/!bFsšØ°\Âx­EË)(S€)“Íž„RŸ—ÚĒ>ɤĻMāwäUøä Ą˛Ŧ¯(mĪj™@Ī8¨Ę™ÍVcŽÕ¸,¸ ÷4ŨáíīLCY¸ži\áG<ĶŒriĢķgu0¯?JkOŌJõS6ŒōNiĮ9wĻ•¤úŌtuôVdbÄf€+–Čā~Tf\ž>´Č~čÅ1äßÛĨo›ƒø×Cá?ų­IlÕĪEfâēOÄÃĖ›šųĒgđ˛ŖšíhL÷Ĩ÷ĄG¸5ČPüRJEÎ}ŠāŠj€3š2IöŖžsېqŪ€sM2@Á§õĨg‘Hcp[§ãJ~P1K÷OéTdōi€™t ”¸ÆhQģ­ Oj2IéŠV0Ĩī@ÄÅî=hĸÃ2ŧÜđEHÅGˇĐS†qŒS$r8æœrËQô# o–˜„ہĮZ^äŌ㎴Üō3@‡ėÁÍûS‰ĘĶvŽÄĶTni¤Ũ(dûĶĮûŖÖ—8Š š\3@Į `R$Š^ bŸŒĐRŽ”§ånô‡!:PŖvj“ÅBšíį4WWšj;#ÔîC`‚įŠôŦƒ‘^_Ž”MR`xmÄæĒ%"1‘€lõŠs¯^;ņT`ŊØĮ8#֟öÅ ÎJ“œUŒģåųqn$äĶĘōŦųu9|ÂgËíÅ0j(ŨuãŠËÅQTŠœž”žQf8'ŠĖ}IU˘H'ÔSáÔ!*ČĘ)ˆĐ)˛<įæĪJ‹įsŒŠŽ5(÷*:)tŽw‰psÅ!–Ô¡֟°&@`=MVŠp“ķ5A=Ō°ÂČĐߓ'÷œuæšMFo>ųŨN@8ČĢ7ú‘ō|¨zž ŦȘ.rOÖŽ*Æm–ŦŽ$†uiUnq["ë+‚™'§5Ī@ŨsR,Î(äcÔĶjāŽ–)Ā\l#֞nbã,AūuĘÉu1|—9úĶîlrĮڗ s™V,¤8یã֚ž[‡,ØÁé\ŊšEûíœzŅöۆLyī́Ėuî )PF1šĀŊ€Fsš‚×Zž†ÁíÍO4%ēIĮÍÍ.[\‹i īI˙HąÍ&wŒĻEî@'ĩ4<(\äcŠÎÕækh7!*ņWaÚmĐuŦŊwq‚5ĪÉēĻ;“-Œ?1ËoÜIëÖĩ¯˜ļ•;‰ŗCŠ~ŒēL[ņÆ+Wšš2ōĀ~Đ<Æ`ß7löŦ€‚ œqI%Üī”Í•5pNÅŠî¤c†læĻŧmąÁ†åæŗŖRFIÉ÷ĢHˆąä­CI`ķąéÖĩƒ*Ą‰V5‹¤Ã™¤ƜVˇĪ2FzÎ[”‹ ,1ŒzÔjØfÎ{U&Ô#,UŽqéŪ—íĘA(‡"•Šķ,ŗíņØÔąJŽŖqÚG8ĒĸëÎÁe Ôų‚Ē3ŠНKX׊š4e8=øíP[>æ|zįĨZķŌRÂŌ ŽV†ÁĻG8ëÁĻ!°ÄqŠ`lōŸJ?7JƒLDŖäķO īLgž*tåëS&–ãI˛=…—9ééAlqRÉlcaą°äšƒ$ļüEJ’–ÃqhŒƒŧ’)Ū^XœSČųÆzT›z…íT"1c$āPÜH ŋX`]vcĨT•vBՉ‘p9Į5 ~Æĸ^O4á÷jÉv–˙ ‘_¨==j †ĸŪ@ęsL .a—i$÷5mcy+Đ÷ŦČFü/&ļR ’ųd‰âĸZrŊüBŨ÷‹TöØ6čC€qëUnínöy“ž3R[iuoæĮ(Î>éŠ{ˇ5m˛eNr‡­k*ąÉ*GsXZm­Ô*áߎí^ļēŨû‰83Ū¤ĸYäŪ)úšAێqRĪk*øĮj‘páW˜ĘRÜĨąqČgܝ;¯‚`?mŒ÷¨›ÁW;fÖŦ,Ō‘Ã9Į^iÍ<Š2%dĮAš|Ė,ģōø7PS÷Đ¯ąĒËá D’Dyë[j˜ãtŽÃëR%ĖęÅVáņØfŸ;%Åv9÷đļĻ­ū āSfˇ’tÔŠ÷ŽûFņ\–™ąŽrkSs!NḒhRr*Ņ[ö´įĨIi—‹Š$úS@ r8>•{H.—čČÁHšw‹éZŖGˆ•Š‚i—š.ĻĐãȕąÎ1]ŽŠp†į’3Š™õĢÂG–ę}ÂŖ‰ÅRiZ‹Ģg.}vš–}+V0”’8 ]jkw€áĘd÷ŖmRęi6™\bĢÚ1rDã>ÃzÉ˙rœwÚj5Ō¯Nqi/ũōk˛kšUqæŲëšzŪKÕ\ôãš~Ņ‹’' 4I@͔¸?ėšĩ.‹Š2FÂŌO”cĨtO{rdĘÜûĐ÷ŗ‡˙^㎚ĨÎÕV.ĸ÷^cĀčƒ‘ŒÖĄđõĪ-#9ÜxQV|érgl“ëA¸ēūą›i964ąčđĒ™-$aÆH<ՔĶôÅVŪCĮ<ôŦķqtŽÅ§ažÄĶāŊšŒ$'=xĨrŽMö ]Ģ ÃßŌĢ%‰11WfFz˛u@hË.\zUUēh ÛÄõÍaĄ4ĖĘą•ųˇsŠ’%hX:˜rjHm–y &sԜģmæxÔoĮsUs;ƒĮ<{ąČëQĖ­÷AëÅBdf›åڇĶ5n)-Ä{^UßëšMu ô0ŽZuųsN xôĢZ”1—GŠU$đpj¨UTÁŠĩą-ƒ–\ĶՁaķ­ ŠĘyîMFŅüßÔS:H °rIöĻIƒ’ŧCM l¯?Z••wá×րąF#ųŊj̞—bFĢ3ž×Âghõ¤‹Jžō:2…œšĄ4ö#˛`•8æ¯ ŖIĪĩf"42•Ū8=ēT1 69ëÅ&€ŋ23Î3ULB>q“ž9Šašw (8w Ü@[G5ÜzõZyÕæÁũ;ÔĨˇ(QÆĄ0n|ąėgešl‚\qĩH…D–ûßqQZebō×ä,ŪõN^nHĩZdØ éžfUč)íāuĢN>eöÍ@ÛG'ŠĢ‡ũÕÉÔ į4É>æ+Ëĩ•5; :—5ęRŠåzĒíKq÷ÍTF™=ÄevAĄX:ũjĩÄj’n`sژXî sŠģ ģ4ļŽ2N>†ŖU äæŠųŦ\žõs“rÃØR°\sF[œŌ ŲĪ Ô?iÆ8*Ž:6iX.X‘ŖĪ+Ī­CË(Pe„¨\üÔü¯”rFIíHwBįæÎ}Šáˇr‡ŽÂŖŒ)brOj{Ÿ) Ō‹ĀÆčįyëNĘįx§+Ļ0~cīPČāŸ” ÎÖÚ) ežņ v4F€žüæœŅųŒH CØŊH$Ķ›Ügĩ1‰ŽŨ0Ģŋ$íϤŒbšøBŲõ§$!nI3B’pŽģ~´€kfd(ß.îõzŠ{S}kQ‚–)ÄŽĸ˛oĶbF `n§Ģ ‹ĄĪ­Kjȡ)žüUŲ†1֖ĖéØ ģ ŗzŨŖX0ôŠp‡ig9īŽõQL`Û윿ĨPĖã#˛`‡‚yĶ4 €ø8 Ô.Acß×éC`¯ ÜPå#$āņS*•<äŽÕđ„įįŠƒ ’24~ aōãŊ7¨dqķzŌ—ŸŒŌËrФƒëëEÄ O €?:q9cÉPÉt‚ŽNsŠ–7Y8*ĐŅqØFOŨnOŊ".@€ÍG7™œÁįŠ@ä ƒŠĄ2vgÜŽæĒ2“2å¸5aܑ’ÄzÔ[€9=i +Á8´‘„‹š=j9oDĶī@VĨÕ!'LY¸Ā|+6PN=j•õ&NĖŗ#—w5PI‘1 Œįô§esĩNGzdĘ“ŽGĨZ?Ŋ­5ČGĐŅ‚ cČ DŅ•ķpNj9ˆ)æ”ļã•Ēŧ¤n;i¤2dƒŸåVSæ¤úÕT)œŠ˜¸U›9¤Æˆg9ĪéRYjfÆ3•æëšlŦ€eI抸ųēduâ˜1$ųåvUÚ á})U”¸Á÷Ŗ§­Gĩų‡zb%ļåwtĢ ŦÃŗUA‚qœU¸”×ëI•x‚§s)#Ŋ&Ę2ŽFĨA aU´5F°B Č'8Ģw-zv4žã[˙ˆyņ `cĩ[ąRļ äp*Žŧ{ qŪĩ4Æ Ļ&ō =ŠËáš )•Á$ŒŅŗžƒĨYqrOqÆ*“ÎĢ&œš‘üÖŌäcnHŠËå—{P M/bž”˛*C†^†ĒácQu3D1Íj}Ą|ų”töŦ]Fm×āãĨHėÍ:2“Čč;Õ5 ‘nK‚LD—'+;ZŠXg_4 Åsô­}:Yw•Îrk/_–Iu7Y8QËcwôĢÖ ž†¨˛ė8=jÅĄũø­ sMãiĀŠ@-Œ@ëMsˆ¸ĻŦœqRXIą9æĄX•*1R–PüÔSĒhY\ži„ĮJbŗlÁāúŌã$Í1 Œđ9ĨÉUæ‘[k8䟛Ĩ Û¸ĀæĨXA^•ʧ Ô¨pXķHä cÔRBwgšk†'Í46ÕÆqL ĘSŌ‡ųX g5Y'tãĻ=˖Î3ŠArIQ•žnõąá‡#]´äŦ!$’}ķŸJØđŋüŒ–ž›éKác‹Ô÷TlŠw-֙ņ‘OŨī\…x œt§)ĪZŒãŠ4 ’IĨšpÅ!Í4ėņMԅw͆`cŨšâÅ.j@4¯j)8Ķ~\怟j)3E3–žŊ*0Ôõn*‰ƒÚާ­7wËīJ­ķRm♍Ɯr8 °#ŠëL`ØëÅIŒœ8'ÔP!ŨāäzЃ=Šß(w¤ €hĮíMÎN)y#€§¨Ļm į4ņÎAĻsJŦwĐ€ŧRŌ¸į4Œ1@  úĶņƒLEųzŌ’(¯ĘšōŊbRē­ĘíÆķ^¤í“^[­Š]fä1o5Q2¤Ũ įëQū~*iPv‚qŪĸŨœqV‘ÂĢ÷Û¯jođÛŪ›æām?Z|… Dr ƒÁ¨v~ķœzĶ÷!ëښîŽp=hĘî'¨§ˆČ#Ŋ5vį ĶÖ¤ō’O†&âĨšô ‚OjnÅlíÉŠ|§vE7tĨ‰lm¨X2ķÍY‘ōyÆ* W'9 @¯ Qž‡š“Íp>VúÔb<÷#„Ä1☠÷.˜Î9ŠRí@ä–ÍVaĪSL Īj,-‹ÆäTCŒõ§ŧҍ Xą÷ŦæV0A4ĸ@Ā3ņJÃLԍâhËî qYZŽR8ČmŲ}ĒĨķ3D€tZ"ĩ*úgæ8§[gí*HČ5ĖčŧjH’GuĀÚZą6t)ĀģE=Ã* ßJĻ.YGĘä€0jC„ŧgŠŦŦ`Ęā’E@ÎAČĒrÎKÂ¤ŠqÉÁéĮ4Úɟ#hQULŽd*Þ)ķJYry°¤YƒrŠzÔŲF:<žĘ×#4ûˆÄh9öW+HįԈ„™ŨÎ=)44#;“Ī­8’Ŧ<Ž´ųvĖÁãB¸ÔFŨÁ\ûšE^åä‘ í9Īօ˜žõZ0Ęßŧ5{c<Ķüŗ+Ŗi÷§,lŧ’(čFĘôëHrXą<š°Ņ¨|äĶ$%G cˇ äXX*xXöŠŒāŽų5fß1žĸ‡°–娙‚ `ĶÄā†0×i‘…n9ȧ…bų ëY˛É4Ē úöĒ’ĀŘ c<{Õ ÅräUkĪ2(üÄįڄ ¯c+nNÜÍ2,49đ)%¸–u?) ÜÔ0K2‚šĮJŌÄÜšŪŖ+Å+ĮʏSČĻE ōÅļVíá‘Įīy9āŠLhŗmFĘX4¤´dzTĄvÄÁnÕ`~ōīQqØ­å+ļŌ:TŠvŠŊģ9l UKÉy ĸŠn#6LƒČ Ô,7÷ô̘f8s“Úĸ–68úÕ\EláxÍĨ›•Č̉lķ.qž´˛Úĩģ|ÜûŠ.*[s3) Ŋ´įÕXmÃe7U´*ų •Įj™\ŗíŽ#Yá~3Vnįi;ǍâCŽ3J*ÃlxrI^@ŠQFsQ†ā ŗįĄæŦ‘0Bîūuj5;sˇ4֋€ŊĒ@)9ĮZ!’dĮÉô¨ ¸Jš=^Ŗ8=ÍYšsr~ašˇ ŠėqY€ã~jšģFp'4¤†XWhÜ“URtĮŨíŠ-fŲæ}M?Tq&”į#§ŦÖå=‡xn]ēl‹ŽwUéĀ °a¸Ž•Ąą0>=sZNäÆsT÷ą‡­1ķ!^ø­[wUĶĄiæąĩīõņžAÆkFÎtūΈ8Ę›Ų nM#HĪŌŠK’Û‰ü)æ`Œ“éQÆq}i㙞Î1Ôz§%ÔŦÛWzK3‡o—¯lÔņÄ۔ ŸJŒ=’Ëĩúæē[M$Čč]€b*ƒÃå_ā[ƒČŽžÍTČ0Ŗ;JŠ$IdļÖŌ9ųIé^uŠLĶ]ģ3dįŠôÍNaŒũŽÚōéöŧŦ3Č4āLĀqī¯ëL‡+8#ĩ1 Y2ŧzŅ–$ĖR§GĖŋÖŠą$Ū¤Ž]H”ånq×įbļHĒņäšįŠ'gRA­Dįs0‚ 9éJŖ,iˆqįŊ&FŅÅ9AÃgŠPÎE Œ ŒŌü¤ādR˛(9ŖV‹ŽÂ°P@íH\ 3Iķg˜Å”g­““ž1LdĪAAÁé@aÕ¸ 7#Ī'&”¨§ }h 3ۘ‡"€3šÛđēâ6ÛÆūĩĐ ØđѯZ ÎL•2بî{’ãŠSĶ4Åhæœ šä(^ĸ›š^ ë@ íFâ4‹ƒNց'ž”åôÅ!ëšPx BąÅ õ¤<œĶ˜Ž(ŪAĨč)OJhäP‘‘Í&ĶڜN(R™4SļŅEÅc!WĻå÷ĻîâœķLqŒ÷Ŗ<äĐ‚i6œsLCׁ‘JKf˜ Ī!ƒLCsŸ­4ÔSÆ ī@ =y§ž€SĮLPEɧ€vāFOJ\怃ˇŪŒayŖņG9 ¨Č<Ōˇ­ƒHFN)õå94Ņ×❀)ŋv˜čÃŪŧ¯^!õ{‘Đī5ęo)Ũ€ĻŧĢ\~ąsÎ sW2Վ9o­F܎zа"06;š‚Uá°Oja°žc"|Äbë/Ž;T ­Ž~ni +“’žÔųBãžĮĨ* <ŋ^Õ˜Kg&äW9Šhi“ <ŗ†"Ŗķ˛äö¤%w ëSE›Üj¸Éfhí€N]Qk땓“ŒV„‘8ëJĖ”fsĪOZ¸‰ĸßöœÎč§'ĸĄH ŽG\ÖČpyÎ+hHW7n”0Hxą#ō¤dGČÃnõĻ%÷튰@¸úÔŊŠÂ,t¤ ÆÅēžÂžė ī‘Lwb§åĪáBbjÅpĄXŗ. §ÉLĄ9ôĄbga–?J”įnGzˆ€ų€ÛĮ­)Uäh;š'ژU›Õ@œŽčˆ„aÎsJäÄš‘c>ZŸ7­ Ęp8Í&ąäÔm÷‰f öŖĖ!9ĪŽhÎ ļJž;ŌĢd­ĮĄ¨ŧæ –lûs˛°]¨GE;œ6ŅŽįŊ72&H#Ō.ŪŦÔĀáØŠéõĸĀ[E UˆĢF8Ö2É&sÔUXžUÁ ­NŒŦEKW$Š4nã=i$ļg€õĨQˆ 9ãŠi—cmÚxëRâŠģĐíÛģ“Ō„ÂļÜã&Ĩi°B§ĩ1Ø #֘ˇ'RģH?…3ygx8īM3 ,=¨Ŗ(+;Ō°܏Ū.ÜíaŒZÁI6+Š8ÚÕĩs&ؔŽBļr+íûlĄĘNEi‰øš“qÎ(”eÎķR™¸njz͌‘ė852,T#­Zy0>•]Ë 1Øŋ jŪEˆäļI­[™{$ÚNāyõŦHÎėg°Ģ尀ŗsŌ–ĖwЉ÷ŽŨœTÂį䁈âW  zuÄXˆüÃ=)ķ6w Áŗč*e$ŸŠĒͅÚāôŠäl¨PüúĄŗg5ZE-'SŽõ$m‡ ܃éOr7üĢĮĨ"( ŽEI G§ÔŽ@r7*lZWŧæœ#Rpß7n)Ē׊tiûÂØĮz#¸†4ļ‘U05ĻÂąažkbO-ŗÉ鏭fؐˇbzU-„÷.đÜtÍBYũŗNc€ØāSí‰i {† ŸZŒąciéRY$cÎG• ÷8ەAųšF¨EZŽđ)‘™‰ĮjžF'9ĐbģŒr:æšNHĶ9 ƒQK؜œõÅZ‘ s´ā ,]sŽœS˛†8Ē—S†Æ¤ai×ÔãŠĒcP9úЄTS‹ŗƒÍ[ˇ'ôĒā/žÕÕƒŽâЉä]́×ÖĄÁīÛŊLŠ 9b Žif`3…ĀĄĘë×­\ˆ0\š­géV•I!@ zŌ@Åžn⟸í'¨ËmmšãŊ?ash. öĻžr¸Ô™;ˆ^”Ö9{ži€‚5B \˙Z•—%OEE’Pžĩ<,9-øR{‹đ>Tn}jMETiŌ`vĒāɰm^(šöA'‘ŌĄ-Fö#Ņ_ī!| f´w˙.YsXz^7žr0+afXĶžW֜Öĸ[z㖚2܀1RDŲ—Ž1UõWI¤L ~5$[„ ĀĒčIA ÚŖ’C3mį’+mČāSr ¨VÉ>”†…T Ā Üį­nYÛļC:aŊjļ™ĨāųŌäžĩŋEQ…Í&ËJĮ7pĄĩ2ÛxéÍtļČˉxŽ:×;"ĨûąS×Ĩ-Ū§"‰æcŽĒjčQvfŊÜąĪo+LĀ@ŧVöÂ\YŦ햁v đ kĘō\ũė……íREų@°ĮQI;ÔśI†āŊļĢ´[\…ÃĻzbēWÛš+ëųÕMFŪãRJUU6ė žĩIŠŨŒÆēO4+xí@¸¸ ŌĨ˙„vô>)Į=jÕ´ĐšWRŽŊŊičÉwEŧŖŒ ĶÄqėÎáŸjÆ É›æ9?xŅ`æ6Æ1ŒŠMžõæIũãšzÜOŒoĸÁĖlšÁ¨ÉÁĀŦļē”`“Ō”^HFSNÁĖi›¸§| téYivˎ)Zõ‰āb•ƒ˜Đ`įŊ#lĮš .›ŠĨ7Gp%Z,Åė€>`ri¸čœÔÚ.6æžē‚¤5tKžGOĨlø]ķâ;0ûũkĩ˜‚{Vˇ…î ž"´ÛĀßS/…”ˇ=Õ21Å8|ŨĒ5ÉQŠ”fšJTž1JŖâM5GZ\Kž)zŌķ` QŌž cܜcå8Đ0 Rl'œņHēÅ/;q@„, b”ŧæ˜ëšQČ4 Frz zeš4˜ãŠ\ãŠ@.~”Sxöĸ™œcŽ I'šŒ° S”úS6F¤u5x4ū4ÄBôĨëԐ‘M(Ā9 ƒš3Å.i@ÉÍ7 ֔įڗ#Ŋ4äĐ¸ĻsÅãŠĄ€Į€ Iˇ'Ĩō¸ô¤ŪJĶJŒu¨ĮŪÅ?œu"ŖÁŨ֐’)§æ4šųi L¸N:ō­l”Õ.HÃeÍz›d)ĪLW”js,šĩÚˇâĒ Pų;ą“U.ÁFp5~V Û‘Y—§2méWq1ĘNI8§9 Āäĩŋių% ģWƒI°C’ËōŒSÄ.¤åI>Õ7bÉÕ?öŦLŨ ŒuĸĖiĸ•ÂįÚ‹iĖoƒœõ ¸bqĪzŗŽcŪ[ę’ėšW܁”ãšË—&rkEļ€â¨;eˆš)ėŖLã¯OZŨUE…Y#ĩaD=pka_tkĩŋ:$°’dØö¤mģN*"čŦ02EI;ĸ]Į¯!¸Öl ÄžÕ—tŒ6Õš´{č­üį…ŠõŦĐíæ“Ķļ 4;­Ë 6äū•"L„•ÜFj¨æ-œûS `xõĸÂ/t-ĩ2=j ąî˒1IöĄŗhČĮëSĸĸÎ?CZ‘?ī!x Ã*Iū•(ÚŪ ĐCdl/zAk•Čã%ri’LcT’Î ĪzĒāōĶLVĐŒtíBČvŽqíRĒĮĩrNqĪĩG(Xūldf’•ô†—$ÎHĨ8å‡Âŀė)ROl•d–"ÚU~öjĪüŗ8=*œn§ŌŦ+ļ~qĮ¨īRÃrUfd\g"§$”;˜fĒ5Â,L§å=LĖv€ÄŌ.áˇh÷ĻĘYb9 ÔO0VÆpŪ†–Y’HļķzŠ–4> Q”/ŌĻāåPqYņ~í‡ÍWã‘A’M …Š“ÆdČéĪjÄÔ"h/šxščöƒ!9âŗí5lØcĩO­4ÂÅäPI9úTĒģšÆ)Öđ–8<¯L՟#f0Üæ†424!}!PHFEXaœā:SāTTß´Ķ“SrŦBbcœPŒc%[$ãĩNņî|€}i…B’¯­ #äpW¨[KųryíŠŅØvæ9íŠ ąŸˇ` ´Đˇ/ü3íRBÄ`û deˇ0‚O$lT‘×) lÍą1ˇ¯9Ēđag<œįÖŦJŽüĘ1ô¨dMģHéŠh Õ&ti7PyŸ1Ü6ŸZą ûC (8R1TrĖÄãq÷ C÷ŠsĀįŠ¤‘ˇ}ÜäzSvl žÔH2ŖÄVšcģj"K/zBŜ–<ĶNņ‚H"ĒÂ3ąļāzžI `š sįã¯5|‚SŽ*Ų(oÜ_›''ĩDˆ*ŌŠ'­!1—'n~é\d(ŅWi΍§ķČΨ›†Ú1Į§-€K‘ÜRD rOCÍLX+|Œ>•$qÔĶ@R #'ڐĮų‡LSIĄc RÆ .HʏZnĐēž( ģÅKpŋ.*0¤°č@АaōÍÆ:Rr'ųFãšuĀ2ZKƒÉxÆė‚ž”;f) ŋn”–ã(i-ļFVbĩn#c* =øĒNÂÎqŌŽ†åēU=Äļ2¯bÚ¨Ũy ēĊŲãŊG¨\,„"sč*Í}iXĒv›zWeTi'ŒäŌļl´‘n§œÖŽ“Ē…UÕÍ됀 *[4JÃĄ@ĒúŌM"şzI.5+Üõ“Š]ų’î<Æčĸ’Î{Yŧ)"̆Īz–Ū2ņĢ˒H•t ģf~ώí€û$g đ*åąßQûvĮƒĐĶHePuĪáL24‚03SļvāTŒ{"ų8a“V Ņ$6Ā™rŒ2ŌĒFu Ķ=ǩ cv.*į:ĘņBįxcë’Ij/$që]uä0ėÃæĮ‹ĒČMĀû¤úSŒĩއčĖģĀãŊEÛŋko€‘É<ã։tÛwVu_ûžĩ|ärū (āV¤v‹ģc/ÍÛ5;i€tÚO §Î…ČĖ2 qOŒؒ›ŗ["Ō%)Đv”AĩvŠ9ÃËØĖŲÛøQäČ+ŠØkpAįĩM!äÚũŊ¨įA&3ƒLhœõÔũš āĢfĨM6 Ãå#Ú§ÚȎ@Ŗ/  !ôŽŊėmŲ÷…˙´)'Ķ" 1EĀëļhƒŲœ‰Œá&ˇŧūk.ŋ|VÂØÛ˜ļĸ‚1éSxN‚~Ö@Hmũ*eQrąÆžÄŧSķŠbļqÅ<ˇ€Äš§ t¤ÍOō0)<šRß>1ši$jãëHNGJ†4šÉÅ(ûœi>b(íŠQ=h ÍÍ9‰Å5ryc1Ĩ9Í :ķHäQFßqE!™Ę294åÎīj@Ič1Kĩƒ ĄœĶąÅ0)Ũ1ĮÄ8Œō)9ë@?6/^†€ÜxâœiČÅ)#ī@†ôlR’į4b˜Tž(ÜE&N)šVŽ(ģļ‚ŨĒEÃ.áԚŠō{ЈBâ€N)1žÔNsJI AL+Ž” ņŌ‘Ž;ŌŽ8=h7bôÅxžŊsåë×~XË ¯kpw7Ą¯ņ *5ÛÜ0ÕĀL§otí iKĮhãŸZ¨ŲFÜ9š$rä9nM]‰,īQÃÖĒO2’vM$ŒÅB†Č¨XÎŪ´ŌÅÜ`ž)@ ֕9_zzrH' ˇĘ*įŸj¸—"C´ ÚĒČ7 ŗŠšŪŗĖÅ-ô¤¸õǜŖ‘×5w‘7'­V¸IĶô"ú(bŽHÖÔ(Ģã'Žŋ}IäfļMÍžÅFSģ6l e“ƒĩäšĐFTr %ëŽõV9Š  N}jͲģH[n qPĘDķęפIĻ=j¤ApĨŽ•’SÎPV˜ŗĘn=E=- c={W Éļ”nÄĘŖŽ8¨VeÁ nūÕŊq–Ō–EÚ}V‹T˛ģ&+›pĨ¸ķ¨§Ė.SX؁îjän¨†'ŽÕ-˙†Z ĩĩĘČž™ÁCėWāFVö OF+4M+œTƒÖ˜˛`’ĘET‘Ž`be‰ø•$w"XÁQƒß4Ŧ&û–đ­ŅIÍUxā÷ĢXŠ`0žOiX̐˜Ę’AzÔF%u*äMYa•+÷séQˆŲ2ŠŲÍ+XwҞ/PĀ jļy#ĨTaũ)¨ĨÎŅĐU&Čk°čĐđF=jÍÄlmā:¨ÎŨ™éīT÷7%x=ąHĨ˜áÁ#ĐPØ$1Õßšĩ<.đ¸Ãqîi3•ÚÕ=ēâLÔļ;t˜M6÷ÍN#ūéĮ֒DčŽĻŸ›Æ7Ŧ1ãū!ÛŌ›œSœōyØ)ļāŧŪ´-=QkîõįéYÛocōž†ĩšh؀A=+;Qˆũ†@ËČį5qÜOcķ#“PÃõŠ$`@æ´ąŸBĘÜķRœÕ@ä-Xˇo3 Œ“éRĐ'В$ ’EHFáĐqIå˛JW¨hįŒb Ą!MķˆČäæĨ ‘3d ĢšâmážcP:œ—|’}ęėK7Ō r|ÂFÃ͚%´ØĄã;‡ĩdÅ!UڏCZv׊cÜZ›1ßšæ#Įĩ0•ÔĀĢ2<|ņŸz¤nÖ7ÁĪ(H.kÂÅ$ÃŒ ÔVŒį:W1 Ė’Č]ˆtĄmvģĖāĶÔ Qĩ•¤á@õ¨•’CˇiëÛŊS“RF€ĸtõĸĘs4Ēí É÷§`5~@ŋ0#ØÔ,$Įb*éG@ZE%FĻ*FW_ācõ5 Ė— Ė0Ę*g÷dāŠ@Œ° ֘„ŗHĮ5+•åˆĀô‘åe/ÁĀéNbĒģSHD{w‘´=ûSdęã<ĶÖfž8< ŠG°OzŦ뷅TCpČÁ\÷Š$vRĖŧ(€3 2ņŪ¨70h$šlō6ŸÆH‡j‘éL*͖Į=鈭å˛7¨§”ČoJV”…ÁëŌŖÜFJ­RMI7@ŸZÕĀTŦ˜ JAÁŨZåã9ÃŪ›s‚@ɨd`ÉÁĢaÜFpëQHƒ“œRßl„7ÍĮQV܀¨ë×5ÍĢž†ĻŽRą¨Î lÄîĀČôĄUÚE y5?ʧSÉĻ6ČNG1R1$'pSŒJv͌Á¤R f$`ž†œFâ[ŽŖ€Ž0U˜7CŪ­øÁî*~`ɌÕ7™ŧg€qړ) P*ԋˆ›åãˇz­i#FsëRÉ.ŨŲ8$t ʰeIdæŦ™‹†E=ķY‘Čaš'ß5nAåĄpyozļˆCwÁ āy™ŽŸLŋĩ’.CvŽyKČ ôb3 @Uļã¸Ąĸ“=NIĪ>ĸĄ{Ļwڋ•îqŌšëMJkdq#§Zŋ¨D–‰-ĢmļyŠąW¨jÜŸxôŦˆƒÜ\nėÔq—¸&i˛Į°ŠŅÕ@ÁÆh™•¨í´qŠŊ›mŅŽqŠÍŧm÷ŦHãĨ^\‹xĀč}jžÄĸėYŪ§š‘X3ļãŠpe+ČÉĄdĀČ89īRQa$@A<×R¤… Đbšr~Ų ķß…uŋ7ą#ÔVrÜŌ;\#'­dęKæi2§œmãĨiž\ąÆJĨŠīcŒR[„Ž~ÍJ!AWiååžöx4Ëy!š3 ƒ(ųœÂ@FāؐIm´ !či›O™ąˆ ?ZY%>vŠŽ™ĨW„"D!Xqī@u"”°ČÛõĒĖ ­OĒŋŧa¸wĒnŽōsŠi‰–vÄ#ųO=ķI%ƒE5Wg\sR”ŒEŽ9éHf’š6üūĩ*F‘ÃÉ%Īļpm—#Ė>Ôė20Öld /* Zd˙*n\ôéVžãjm`:Õ9våF~”îÁū žAô&ŽhømnІÉÍPF•¸\sZš4EuĢPqģ~M)=ŠęjŠ1Å5sŠ]û{R $͈ i‰Á§n;hãi7{SCh-ƒŠ1Íc9Ĩ¤b bNÆ3BË‘@ās@ ׊nvæ—ÍČŖ ôé@>cC (8Í0ũáÅ!Žĸ—>ƊˌąÎF*PÃŊFXŽÔǃ9$Ķ!ũŪ”3J8 FäõĻ!Ûr3J)Ŗ*0h sÅ;õ4z)Y†(ÎįšRqÎhāŠ"‚.A yĨčM"Ž:ĶÔzĶ žôâ2)Í&ŌGĩ xã­ŒŌ…ųzä҃ŒwĻp3@ĪJF;GNiëķž 1ÆA¯ņ\-ˆ.‰' äס0ų5ãŪ1.ēŲĮúš¨č&sG;p9r;vĨV z āņĐÖ¤îEšHĀ­<.9ĮjˆĄC–äJb?lSFCrsŠ€2=*Ũ­œs@Ė‘“šO@Ũ‘‘ČÅ*ÜÉ…WųsŌĸķ0Ûs‘Lgô⁖ŌášLĻ\6éFy♠ãšYް&™kaI;”õŅÚØF#V“Čâšč#V¸IÎHģĨ˛T  c2eĨrēZĸÆ09éÅL‘*véNf1Ü v§<žbЃŨjĖĄd¤ÔđŋsXŪ<ĶyŒw(äúÔĶĘņōŽjœlJw,ŪKšUo˜÷Ē‘Ē @Ī>ĸ¨)‘§9~hE!“ ˇüT­`ŊĮAnMÆįČ\ūtIlĖË,1€ŠÜãŠĨ¸¸‘Ø[ÛŽ÷čHíWáōôģ× —6ÚI6WqN×2šŠsá{iQĨļÍeũĒKũEŽyhV…ļŦÖō˜’Įĩh\×ÜÁæ'hØ0Æj)G9Ķk–ŅßX%Ր(ųĮzäŅĘļÆ'Ž•I‘¯QĖæ4'֝¸É’~\zSJ´€“ÛĻ)F÷ĻhĪfŠ×´Đ˜n”|Ė֕1WË\0ÉÉīOdˇŒŒŽ‚Ģí+Á õ§ŠĮ#$úT4Rc•+pr;šąJ ĮiXK+õâŸ*ų9ĸÁrėŋ48>ĻŠ…(ß.EJyö<(‚AķvīK`܃ÉIÎ:f>NOĖ1Sģ.HŒ€{œÔ!^ fŠ\Z Ṝ Ē0ģxāTW; N„pãĒ .$ g­[ō×%†ÜŠ{1&s „vSØŌŸŧjmBĄ*ҏ5 ŒŒg&´ qųZš)&ĘzTQ9ëS$y‰›ƒƒI‚E…r7nÉ=sM‰ĨC…ǞۜtöŠH§Ą4ۜė=*.ø9ųE[MŒ€~u„‚=ŠĻKEbĜųTŅČÁįĐŌlŖŸzŗ yÅSŦM$†(‹ÉéøÔ+fŌŠ”Ÿ|zU퐔PNqڞÃrŅQĖ>RŦ62ŧ{ĪzԞI‰vļYŊ*WŸä1ŖŨÍU‰ä3‡s„čՆÔîāŽ•ŠĨ&æfaČôŦy™XŠČö­=/íBŲÚ8ōsÆhh"kO1T îĪZX.”™~5Qb‘Ž ‚Į–_CWv‘aONĻ‹•kģ‘2;åˇlöĻGō>âw†Ĩ%ps 'ĩRÃĖŅķū´yP‰ŽĻĸēW š“Îe?6:b›q!۞ p1üËÜv¯LhŌk-•Xį5Åę0-•ųŽ5Âc8¨Ršmu)™‘lö=*"{“Î})n#ķsŌĄ@RDb}ˆĢ ΜĨ7Öļ#‘ZŲPxÖ=׏éšÖļP-Aõ§-‰EÖĀQŽ3PĖIäšG9NšÅWFf-“Š’‹ÚPŨĒDš˙ëWQu18×7¤ûrä@ô­éžuڃf;šĘ[šG`ķ"ûÁŦÍbB4ŗ‘›ÖŦpT‡›ÛĩRÕAm0̎CBÜoc2Ę+nn8ãĨĮ Ø2tŦģWeRrS[š€Å˛5W+fmØŅÔā’@ÚĀdæ›áčwBîO$ãÍk_]Aãu‹fÖĒ:vŖ5tHˇŠįĩW+åą<ڝPŌf^G AŽyÍdų's=={ŌKâųšĪČō2žĒŠ{-ÊxŠnū*\­!Š]–ō¤a†mŠÉî:Õl(LšŸzą@üÍČė3PQ¤‹˜Ü@›´žĩ5& Œšâš\ųy#Š‚„“k9ã€95 -´ôöŠ`urGz“åQ„QŠbH•9oĻ [ŅĀÅĄäĩgŗ;´ŸÂ¯i!†¯jXsģĩLļ-#՝ĸžyõCsOaž( QœQÆ)Ôdįâ€4ĨsH3ģ“OVĪá@ ZNôæ8ęh^h úPIīJM7ĐŊOc"`S/Á¤œã4ųrM;æØyŊF ŧúŅNÚ´R4 g>´õzSJđ2y§ŽZĄ ôĄ?-8ãŠUu<Ķš¨Ĩ#Ԑņ͟j^ }9ŖdŌ摎îs@…PO°§đĸš1īN8é@“§Ni6ûԁÔš`0œđiČyÅ(&ŋĨŽ”SJ#ŠFaŌ€FM9p) ö¤c´ŠS§é^1â)…Ū­}Ÿ˜Hv×ŗē€á>'mž!Ŋ`Ø>aÆ*āŽK1Ŗ ŒËžAŠ8vÕh˜ŗķÉĢ ãĩjČDÛr>”Æ]č{~ė Ļ9ÜÅIE2˛ ƒÍ*Háv) TÎëĪÔCšäՓaŧ¨ĪjacŸ—­=Ī8­}CŸP“€ŧĮĩ+Øi]ØÍĩ X†4ŒŊ8Åm^i–Öŗ˜RMÎĢÉ÷ŦYW¤Í­dKkƒw;¯F2¯•ŨŸ”WšÄû.šā×t˛ĩŠLØÅLE’ēú3Õũ+ōy§™ím$UEwū•jņĖöå´ižJžk?ėČ,ĮŠ4+!ĩq-ÂĀĒQräāĩ>âC#)r …*A VBĀc§ŊÛųíĪšĨpˇBĨ#j=ji]ĸEŠšCĀs!–,xĀíS,i¤Â.%m÷/÷TvĄ]Ø’ÜÅŖ[<“srã$V4÷3_Ü đúTĻ+Jc,­ķvöĩ§é1[ÅēEËzâŌ3Ü­a`Ą9lgŽÕą9s6ôéšÜ  ą^8ÆU6m$ŦW==Ē9Šš• ĖļOˆūdĮĖKsgiĢÚĩUŠáGJtÖ˛[;4‡pdV|r´3‹!Ŋ*–ēŠæ1[Ėc”e8įŊJĖ26ã‘]Dö6úŊĒš ˛c†žõĖŨØOi.ÉTƒØö4͏XŒđĸĨV⯠WÜHo֑%#$ņÚĒĖA^øĶÛÖĸyŠRÅ"í’MCE&‡† ûŌœHFäÂĢ•UôĶ×a|õ6Ëpė“€N}).E$=écP§;ŋ*dŖ#;ķíšÔÄ [$†9Ÿ!ځĪéQDe`zuĨ™ŋw÷ĒÖæwĐHœ,ƒtîhH)úÖt$;8=ëDŖŒŽ)ąŖR%‚TT9ĢÚēíŽŨØ`ā‚k46O¯ÖĢĄ;1ĮåīԜ&Ú¸ŋJcSĐĶQ>lg9Ļ"u‘™'ė“ĮCMŲ´ƕķ×5% žBƒĪĨJđ}œ¯9õÍ\;-ífĄ¸rŌyaˇ`ōikqč‘.ũŌdôŠ‘—˛qUc#pÔŗ>Ā#+š,"äNÄŽ´é2T*1¤…Ub [¯j–0ÉÆ**Ä3fĮoQŪ™. WfT| dŽÔŒ+žÔԄâB%‰#Įr)Ë|Á G1¨eYŽĀvŸŌĒŲI<ĨVŒM+]IíĨF2y&­\ęˇ/t‘Â3c ŦE„ĖØÉĀë]ŸŠÖ7P=hŅ×CHG‡$maØ÷ŦkgÛĒrĮo#Ąuuä¨'ŗŌŗ­~{֗nF Ąl7ОP;ŒŊhž7܊Ž9]›ƒļĸKąs<‘(ûŋŚ‘Œãp;ą‘Ō€ĀĄũāč:S$Ũæ|¸™,kōåēœUkʨAf9=qLû@FŪ¤įØT:ã#ŨĒ cmoʘÅ*ģî-Ī^)ķ8+ŋ=ņU8l`zTšömĪŌ€ÁX›LUb™n;Uĩˇ/^•! ŋ;ŠÆtą‘9 2sÅhŦhÜqÍTQēđÁÎkEˇœ(Žj›$‰ŖUõšų3č)Ķo-ŒfĄzggõŠĄÁ'v~”ų#ŌŧŽOzzÆĄĮĖx deôæ•Đü¯Î;Ķä'pÚ9§H(z{ŅpĄJ–ū!NĄéIn2§å<đM.īŪlnĮ%XV%>´āā'$õĻČɒšÁôĻãî‘H”'-ÅBĖŌ …s֜I wvõ§¤ĨpʁíMæ<öŌĢ4›2™ëWŖ†3l¤1Ü;¯w4CĖE 3Î3Å:ņj ;bЎ`Ōä7QeМ~ŗ …ŽāawfąåbvœōMtĸA+œãžÃ[›V˛ÎnîTŋ(ôŦ bå˙´?{hČ=Ģ­†Ü$æu8b€W!¯ÄÃVw$|Ã^+vH‚î'ŌšíŲ$™ņŅsZPşœāāVmjhžƒöˆŖcŅēšÎÕdŨ¤p­ģķ§YŪ5đˆĘgŠĄĒIO˜â„ĩîˆŦY9oÎĢÜéqM>åo/ž}ęk$(§åČÍXƒŽĐ:w§{= ßrŖØ[[Y9ŲÉčĮÖĸŅy˛ä8ĀÍMĒūĪzzŠf„SæÜPõ•Ĩī>Ņ5ūœ#hTƒ’zŗeuŠHUGzĩ&ÉŅ›ĨfÉkŒ:|§ëY§Ĩ™d×q‚yPj!ltcJ`š}ĸã'û­SÁjKŊ 'ļGlœqš’\…ÚøĮĩY†0°0ME2ƒ8 :V}J+$L‘å9ĪZqۅÎ{ĶZV6Ŋ@PĀrM0°˛b4QzÕũFū×ŗųwUˇFMňoCZJÖ-H'uLļ)&zĸTfĨā ÔHvŠā€([ˆHĨúĶIÚxĨäŠUÆî)z@@jR}¨<Ō9 ŧRš c ņM\ô§ĮĮŊāqB¯ĨÁĨ^4€Z\ĶNsK’G4 7QFĘ)÷)Ę9ëL°âœŖ­P‰23ŠnFę4ü duĻ!Āqžô˜&Œ1ہ@„R€OQCA§ãš`!āŽôëHÜķH¸+Í :{S‡ړGĩ.FŪ)€ÜsKœĶFZ07PöņMažÔŧūŧb€ ŧhÆ &@đs@Ißá*eūßŧų‡8¯v~¤^☹âKĪy iL™la•˛N$piģ{ Ģ#QÂMŖ ņQĩÆXãĨFŲ*yâŖātĄ ¸íä“MsÎE…jčšKę‹Ŋ”:šISnČĢglnf IÚ+ē´aoŖļ]˛ËUƒáë‡î^99ĻÛ@ˆ<¨ō@8æ˛ršŅōœũûI ‘’ŋŧeËZؓ.Iī]?‰GuėĩrÎ “÷jŖ¨HUÃJ<×YĖqAmķ¸QƒØW3m yĶ‚­õũÜG;sØPÄ9åfÜōoJtĢächāSc„\aĨlÂŽÅÔĀ\įÚĄ˛’–™LŒƒŽ† ‘Ũ›eē`÷#ĩZ™Ö(ÂîÚĮ€´ī´ZiV;䝆J愘6T“eŖL@.ŨIĒ)5ôæI_#Ž=)ė$Õķ+åW<'aZzm /Û˛3zģ—lė6b3īZB-÷E>Ũĸíá1Vw\MdØĘ­n¤đ§š_ †ācЏ 09aô¨dsˇ'&îgOnĨYXžMaÜYK-eOLŽEulģųÁ ¨u)"r;Õ§a•ŊãZ1Ū§iëŠĐ¸‰5;m€ö[ĐՍKO%'VMÃY˲TĀcŒUîļæÕŗÛĘ`™0ÃŖzÕ'WCˇ÷ŽöæÆB͕°ø¸ŽFōÎ{)üģ„ voZ¤ÂQ3à meæĨB¸š‘ĸPČ?ZDeNŋ…2l.U¸#š|D<M­“Ž}éˌ“Œ–;Šō…4 AG!<ŒÆŖÂ2ÜûSHMŽkˆÃōy•J]‘šš֕ēéš,{ÁĪcK°„ęšŦĢY&yŠĢįšÕß1Š”84Ɖ ĻHĮ$~PĢn+ĶEYīĐ`zˆŖnğPĀœÔ€×*A€gŽsĀ"0‘Žj`H¸rFÍEæ(% įی””‚¸üŠâ5–p8žOĨ3›PųW<ֆrƒœ×Ú hüdĸášâ´ä´) ŸjRcHĪ0žāCäãĨL°pŊéí’OCî*31 Ü WŦDҐ¤’>ƒĩ1Ã1Ž)Æe ¯úÔëœU"D•ÉÎxÁÅ?vФdņQm‘G"œ”ŸJZňVIr#$š ¤ Š¸•K˙w5JšŒgĩQģY`8w'×4՘7cŽ i€cöÍd߁ÃƙLõĢ2¤ģE,͸{͈’w õRh˛Ūä’JJ’Ŗ¯cL€ŋ!>(&š à úĶūÅ$dųōĒĐ- ĩõ2¯Ô‰ãššĻÂ$l°ātÍExĸ0­Ãšŋa&ûœÛĐKFRģĘ{Uí1Ėr•9ãJč¤ĮœöŠlĸšKĩäœįԞÃ[žŒēˇ§Ž7ÄØKÕÆ+Ít7ÍÔ6ĀHéī\ßz rv÷¨ŠÔš;˜ąJĀäŒÔûœå€ĀĨX”zwĪ´‚0hgc%ūiÉ'Ŋk1  ķļŗ7Î@õ­GF܃â› ˆ3“OAĩ›žj]‹;Ü.w~”Š6ôR ÜúíĻ4Åô–^Ŗ~(БļŨ8n6㚭æĩ*AÛŋ¨¨ę_BöŠĄ,Ĩ9\Ú¨ę˙ŧŽ&rIāÕŨ#"Ōaü5OVED…žqš_h>ÉŠ+ËÆ=iwî|”ĮŊGuCĪ9ŠŖų›AĄ€—É˙æoĘĒhD Ũ0zrjŪ ØØzœfĒhåÜ:į9öĒ_ â4g¸kgÚ̘ĪJC:ųEØv§\,d2ļ Îē‚Hm‹üÅJÔoB)5GcˇjíŠŗkĒHœãåö<ÖąônŨÉLŽÕ̊3RgJšäD… CzŪžn„ŗl Š=ëvf’ps[út’Kf]ÁGQéYÎ +—6Í bų°-3w”#æíŠzĸË œƉ—Œ(ŗ4'‚upT#=*Ū•ąuËl“÷¸Ŧø˛@95§ĻmūÛ´îÛĒd´)3ÔSîŽ)㎴Ô Ĩ;ģT.ÜŌãå4ÕÎiIĮZ`/JAžôĪĩ=HÛÍ7“Ō†-.1šL(• Œ:Ō†âäô c{Ō¨$šNį­;#ǐdĐ94ƒ`Đ~SÅIĮ­ÍįԊC3'8§éJ§ )ŲU’ §.) âœPsšQš;ķC€&Fy¤éŒŌíßôĻ!ŲM`÷¤+ĮŠpÆhŒöŖwã'CÚš˜Ŗ2J2¸Q]-ũÂ^[Į.Ŧŋ,&B.qVļ%ęXˇ…du t­$°k\pGL-íÄq#nÁš™Ë0rŲėj[F# Č­G-˙—ˆĸR]¸Õܲy‹ y Ž‚¤‰cŌlžęáÁ˜ôSÔPîȧh´¸L÷MæÎ˙uOjˆ95KŸ>␙éíUäûVĢsæˇ*OÕŅZYcTQ“Œ`ÕŊžėžb… ,\˙RĀĒācŽzSR# €žĩûÉ v÷íéYdËĒŦciV#4æÖŖŽDØR9Ŧ'W1–ķ‹}#,ŠBWbĒæ3”™ŨĻŗ 6H<ķRlĀĒL@īūéâŧîŲe–OõŦ ryĻ™åëá¸9Ģö(^Ņž™ ôw1—cŒ}åôĻÁs€ˆÛŸCX÷9ĶĻ”p5ŖÛˇœwŦ¤ŦZ‘ĶIe?.ė÷ŦkŨ7ĖbĮ‚zVÅŗŗÛ† 5×xų†ėĶLŖœķŪĮN¤ĻzƒZ­ žĨoą€deā÷ë‹5š…”ŽĀĪjÄÍÆ›)MäÄOUn4Ú0ĩũãM›(ėОTįĨc‡qsĪŊz…´ļÚĨžSÁ XZŋ„U•§ą!p2c=ęŖ>Œ% ęŽ!Ļ—=qH.Ļįæ59„Ŧ…H ã¤kU í֚ØĻg‘ē’iDÔš˜Ų°#oō¤{w đ§t+,ŦĶüé{sJäņõĢ2ڕˆ2¯ãJčJÂiOļ(ķĨÁ…4+@4ÂlSőu:Bʲ­ÁSĩ8ņÆsO{ô¤Æ3n0q¤8'ÛŌ­¸ܐ*šÜsI1ĩaČ2Ø qR­HŸëâœNO4ZHĘᕰEXžōIFH ßÍU#æö¤P|δYn+Ŋ‰Œ*#,5ņW€Ũ\T&›?$ûŽŨŠÃŽ•").8āSŪôŠVQĀQÍS%vmŧž=)öãoŪõĻáäm¸Šāĩ|léKb­}€Ī/SÍ4ž,*ËOˆļzŠĢÃ9ô¤‰eÔŊ AųTße—pa€3Yâ5 ¸õ­‹7ÄOā÷¨zlR×FS’âF@tęjĢdŗÕĻ`F9ĢXÃ=š“ËÖŠĢdČ`ˇŌ­[ãa÷45ą8=Š’U!~÷cJaŪFÆ!žĩ"EpO,§ԅc2Ũ¤ßË[^c$ÕuĶņuæ–Ú2qúŅ'q­*ĮΘ¸8ę*´3“…;OAWüąĀ䚆0pN•(.g5ĸ!¸úSLøô¸§4sŦ€˛1ĪĩK› ,ghĒ[>8,#î)-ęj77;3<‘Uņzã6❀uÄ%›å?JÉyžc‚~QVæžUS} QēƒÍ\Q,’Ü;‚Š6cøĢVŪÎIöëÉĒ6sÉ´G”ĮZŲû0ہÅL™KšŪ•Č„lĮQÖI&´~Íã#æ¨ūÎ]˜Ķ֕Įk™ˇqŠIĮĻh˛O2@„â¯ßÆÂÍs<ã4iŅÆ–æW68ī ­ŠJíbŽXÕzƒÎjŪ™,ę‘ų`ĮØRŨXŧv‰;™›Šĩĸ¨KĨc€ŨŗCؤĩ-J įˆ>SĖ|Öv°åī™GUâē`ō¯.nx9ÁÅrw“{$‹ũîsSAĄXsƒJî0Ų ŗ"œõĨfÚŽÄöîÆėCZī¸ēžkŲąp3ÜÖ¯Ú@p¯ČĮä%ą“ė˜¯jc/™ ;° Ē÷V4 E¤ę4T$ÜĻF6TIoˇN}íɓ8ĻxvPßhÜ~`ĩzhš;p<æŗękĐv•2p0I9­Ō[ĒŽ@­kIVEqģ#ĩej’!’ u Í%¸=ˆ!Mąå†jT!˜dô¨ĸ]Ęû_9ėjHcFāpÔjJŋblrk?BÎläšŊ¨üļ ‘ĪĩghÎÁÕ/€´l” 3I:l™äv¤8|ĮŠ¤ē 7PŖŗORÚĐåHb)ŅĘŅ;'ĮœØéL'šë9Ā6_8ޝA)įydđËŌš H9Ņh×qÃvÁ$Žĸ˛Ē¯J{;C>vīU$ˇ;KÎzUįBHqŌ pÄđqŠåLŲĸŽåVÆŌ­ĶŽi*É­Zƒ’ R͘ õôĨĶHu›`ĖoāúU7 Ejzŧcå§zĶcå;–Ä‹ŽiÍœŌŒĐN1@r=)pq‘GAKČ~4ƒÍ4ķÅ!H {qJĢ“Á¤Ũ• 6;ĐTdķMĀĨÜ Ļ‘Hô^™ Ž403FIĐ0ŨE.Ėōšã´ˇĸY"N T‚ÉĀķ%SœúͰõ4.l…vā|¸Ŧ)ã’V\'ČŋxŠčÖhví1lU1 ÚË´uÅ1Zå4ˇ‹ËP?ZƒËō!@U‰XE¸`c¯ŊC ‡ Œįېy‹‘P^]ėqJwûR_ÎÉ"Å ‡Œ ’ŖŌ­^îéˇLyÁíôϐŸ`YŖŅíĖķ2i9ÁíX2Ë6Ĩpd|āžž”Û›™ĩ;ƒ#Œ <[:ušyq˛įæöéTôD^ė“O˛ wÆ+jåbvŽ™"‹{}ĒĘq‘ĐÕÔAeųâ˛lc$D‹'9â°u‰Ũ€Ú0:bļŽįn>UĩS_Š1§Į"¯ āâ’&[ҧî†öã=k3^‰"ē‰bPąėČ­mÉœc­SžHÄŦcĨmKs)ö1Jΐ NäT/¤Æˇ-íūÁ bŲ\ņŽõ)˛†IwMĨĮ­9ē…ē b¸ŅæŨÔ¸ ŠÕßjŒV„qˆ,î"ČĀaƒëMąŠ6į'šÆlfŪžŒ-‡™úUĻØØĮ)ņFŠ8÷ŠļėØīRļ4EF`#!š›C"G÷EnØj1ŪBâP9éDđÎWMaÜÚÍm/› ÂŽĻžãLĩĢiĘ­p‰ķ÷QXą[œŽŊt67ÉwĮ}˛t#Ö˛ĩ:k 2ņ?< +3K܄Û)•âœma áFOĩ čSäbpi[r¯<ÔļĮ ĮĶáĘîEéž*ė66˛CˇËĩD?SƒŒTęv“ß›c˛1ĩ*(‹˛ ¸rüyžĩŲęŪØr0z×ü?¸5Ŋ&ÚÔÂĒÔkpŪ”āĜŽ”Ũ3IĀÍjeqæRcÚidæuõ\œöĨaĻ4[ž´â}ĻcæĪZŪ•†!&zRGôŽß.(…sķŒUt'Šo$A9¨ÚQŒM4ɕĀ<ĶbMųf< ‹~ÂŦJFXāSD#!˛MKŋ?(ô¨d9nGJi;ƒjÄöĶ*dž´ųg{™• ĨWh#&ˆži3œSĶrw-ˆ)’@îj&dAĮ?Jx‰ŽyĪãQ BÕŠŲŨĐvÍMū\ĒĀtĻ19ÅDíĘí<ҏ3ZMŗD=j°ģ–(™#<)a˜°ŽŠ XĨ“#8<S°ŪĻdĄYVųģÔļōš"2øĮ¯zĩ6–Ķ]˜­‘˜û Jxn K÷͎Ĩ]ô"ÅØŽ!DÁÎėrj+ģ WvėtÅ$>\m*I†8$Yo2ąSÔđ(VsQdķíĘ2䎆¯čPLŽĘÖą#ycpFkJ)L6€G!Ūy#4š*,ĶŋD#(íY×&hđĄ úbhŌĪŊąŧÔFöS"’p$UĮĸ\4FURÁGÍíL[ĮXˇ#ŲéëVZY$ŒŦ9\žj8mƒH7˛—­ ¤É=ąV’wv;c z‘KH˙ ŒníWE¤ˆŧ8÷ЏėgŋÚ¤û˜ô‰ŠĖŒYŊjÉpŽũņP;ļF:P+bb›ˇtĩĘ[å* XŽ@$š–9Ĩˆ˛•=ņ@Ęō´ˆĀ2c4Â>PWvīJ†•ōü“Í[Š Ŗs Šw 3Äŗ$‹'§Ōą.āXn  ĀĮzęŨBIĀęJ­u§C}( ō:úÕF@âVŅ\Knc\n“WäĘHĢģ#ž*žŸaũŸv>å#“WŅyŽ•Ī$ ™=F‘*ø%HĮC@ųqķ ևNŒ]°?ģShۘ÷ úTÜĢ”DYî^FiēuŒ×H‘*‚ëéWu™+eDQ´ž•kÃģŒ;ŲJņ€jžÉ+YõĢ ­ôČUÛæV5&™§”0ČũqšŋâHØéëÉc¸qYļrKĐīÎĪģ‚{ŅöGöÛȂYĘĘ܅Î+Īf“q%pI5Ø]OtZå|ĸ‡ŸÂš°LąyåFzãŠP &ʲĄŒ õ4æ˙PĐN;SŽ2ŅãVO•=1Z™˛ĩŗpœ÷Ģ÷;@Ũžj„,Ą°:ÕāĢ?ŪĻÄļ"Ûŋ ÆŪôŠŠĪŒ‘K$ úĶbųX`÷¨7ô%Kfœō~\œÕģ]J´’WĄāŠg‡öMs*ždæŽÁa’ČĄrĖr;V~ϤÖŅĮmĀŽ+ŸÖUMā(p6×@ ų2cƒ\Ū ė/ cGqH-Tė$”¨%ÉlTÖËڝ†=sRDU¸(–ĸ ˛ÆMQŌnĘį’+GWb–˜*5OBTūĐÜĀž*×ĀČûF„°” šK°b˛}ŨMjŒ9%G*ŽĄ‰ o“ˇjĘ/SGąÉą%ŽiŦFiō)W Ō ~õÖs0ޕšĄŲš‡ÁAĮ‹ Ā5ŌøeŅ|ÅÜĮ5GhšCs^ Š­ØÃr‡ØÕĩe'ô¤šVž3ĮŌ˛ŗqi(–×ŌšVĻĪCTåū`6û’Å Õm˜õßKnŅēëĮAڝi…Ö-Ô6~`GžĖéˆFŅNČŠ2TsKžqš,“į"ˇ=)2 ¤nژ`v́ÂĶGJâ€čúĶZ•I&€ 9/NiĖ3Å7n&€éHF 9ëÅ {Pˇ$5įŠ;iŧõéHbėĸ›—ūõSƒN\gšo8¤j‰&éī@ Ž*>M8/ž(ôŖĻĀõÍ8Œz/fƒJ@F9ĨųZ˜ 9¤,sNÚ1QŒĐÁ8Å!Î(iAÉ (ÅO­(ãĨŊhÆiNvöÅ'p{Đy'Š\āķųĶxŨœŌˇ"€qˇ=kÁį¯z”:É;~øÍ>fĮdŠŌ¨ūĪ”§÷†jļŸ“p€Ã&´Ô/Ų..8ÎMQԁk ŨŪĻLV:ĸ–ąĮŌŖķ1ʓĀÅ'š]Â4d{ÔÍo‘€ÛOŊ•¤.A9ëŪ…cœŸSOeÜ ûĶņ€ }(ąoL7JĨ:rŊĢA‰cœp*C"ã?!œ­äMkt1Ž{VĩōÜÅą€Čæ{‹.N8"ą@šŅoēNAĒZŽö%Ôôόųö¤ōrÉũjšHv Ö܉t¸-†čMéŪmĢ4@1īõŠeÄĮķH8Īz‘$wwôĒŲ1šWR¤TĘB¨ ŒRe “yVAČ5ĮĖ6NÞzWaæoÎŪĩÉß/dĮ]ÕĨŒĒ­.Bį&‘”dúŅŪžį+c/jqG›“ģŠąˇ&˜ˆV€Ŋ4÷Å7ž Å$cŪžŠÂˆĶ2 ôĢ3GåõhWÔŽĖāŒTˆQUC\TR•Iœįĩ$Ž‚öc™ŅųYöÍ@OĪ’iØÉÍ1†Ml{¸äŽ)b!Ē"§4™ÁĻĐ&i¤ƒėų§­Rķ ~¸Í …Å0ģŌ’@ŨÍíK!mÕ,bØ9ÉĒ‘NQ į5ŽY˛3Snãæėh8ŲÂôÍY˛flđ*šÉē,E>Ø02AëŠM‹ąj ô”1ž6ւŨĩåԒ` üž+œ—īāki’ĒĮƒ‘Rö†ę6˙6øÉú¨ąēĻŌrMj\˜åFAĒjž\gæÉ4)h.]H#ßæŲĀ<ņZ)šĨ•­¤ĢÆcŨ‘ÖŦÁ0ˇƒƒ—==Ā’4–(Ųņž´‰nX`[ĩ$,^eiŨ+vXĖ+GÁjM–‘•o@忝ĩIŧĖîŅŽéWRÛtGÎpĄē –+dEUņ>´Ž;Ë<ą?šyšgo;ģķWf˛™QČdžŠä~t\,24Hwtīš\ŽĻ§1°L•üj=ËCcČ V$Œ°!ëƒRÆû†â}j‹LVO”SÆ˛ä0zLdŗ8* ÔĶ<ü€9 Ū§‚Îi‰,1õĄŠ#ā€N;Ņq¤f‚_ ¨ĪjCc%˂žõģ&4 /SÍ9ƒÆwqÅ+”Ō)A§*(,ÅØõgˆ•xÆzâĻÍ\įi5ą18'#ڀš!‘Ddw)ąL]vĢ zg”0 Č&•TÅÄkœķšfkjvŦŧZÚSÅ ´p"zæ°ĩۙąĻî}Ģĸąe‚Õo͡$‘Tö%nCŽe,Yœs¸cÚ˛4ÆûeĘa[`OsVĩéž{\“ĩ=j–•v~Ų˛Œ&sš>ÉMęk^•ŠĘU Gę˛KĮ‡ÍРɎÜօō‘i(l­cFĻ%Āäc#(ĻsNģ]‘ÔĢ5RîÕĄ Aų1šęõû#­Õ˛ī%røŽbęRöÄgŒVŠÜĘJÆLc.0NjŌ1O”ÕhP´AįÖŦĖ2 6OzļBØyāQŠũá§0Áë‘JĒ7ņP4tž‰%š;ŽÚč$ˇ1Ŗw uÍs:uēųN>ZéŲØŠ^õ“ÜŲlS;–Í™TŠäīZųŠŒsšėbˆ‚ŧĶÖšÍM!šüŦã‘ŌœX¤F‘•ˆQÚ¤„2{ ã–"ˆxã­HŖŒnÉ E nFdsŠB$\“‘ĩkQLY1'æė*ŽŒĄo;ũÚŋ°FŌ6™öągš.[f!˛íN 1%ĩ.ô#NcXšœÛZÉ$ŖĮwCŠqŌŽįkôŽĘŽ1íŌ›æ:°Áīš×Ú3>Dsđhˇ7 49÷ŗ¤hOæIŸk!āzÖär’#É…YČeëŸZĘU$ô-A!­ōD3ĀĪZŽĻ7““ÎjI\?Ę2xĒņ€¯Ķ“Yĸ˜ˇVĪi­› ũÜҤ‰u;f•yWeâÎF} m"ęļá°T?jméa-ĪLUų 2sŠ@IAŠQšĻ‰bœīK‘ˇšh8§c<ŠĨ‚h3Fėũh¤Ÿ3qNŠ0r #›Š]ã>ôĪi¤üÊ `đ(K `R P2rEį č)7gŠqSrĀņHÚ=hĨųũ( eœphôæ)sģ¨Ļ!ųÅ/U´ ‘Ķš|ĶüđĨÅF §Ą'ŠÜsŠ|i€Ip})ĘH AŸ—Ĩ"VaH:ôϰiĘiw@ĐŽ9Í'~)p1Mۚp#ŠĐŲšx=(ãc­ŒfÄö Ž§&Éé@ ÎÍx7™GНB˙īo€§ĩx׊<<÷~ ģ›í1ŠgÎ֔ÚORd›8~ŊiŅ­íZZžũ–ņ(™eŪ2vvĢzo‡~Ũ`nę5qÖ685¯2%EŪÆbNÉ÷O̐¯Ú0Î[ŊG™ œ¤§j÷Ģĸíá~Qל—BãæXiŦe”ŗ]fŸ{ ŌEĩÆHäŪ¨¤vDT˛‚xÍP—N›NœKn|ÄÆā¨~öå%ËĒ;Ąc9ëŠÍģš[}ĄNdni–ZÅŧÖe¤fWA–ÖŗÄw&~^0x8éQkn]î´5ĸ†(W͗įsÉ&ąu=Mæ”[Ûp¤üƝ­$ˆļöųĀá›–vČQܜ“ŌĢbo}ŗĶÅŋĖęrzbˇ QŒ2GzĢâ0NjÔmķŒzT7qŊ q) AÆ}jĮšDxÎH¨—úĶ‹nāϐ‡pF=zĶãˆį*8¨øN1SFGr@4“j“Æj–ą0]<ė}ŒHZšĩČmËči^{œ$¨4ÄĘ'L[ûuē“,€ƒÖ¨ŨÂĸđÁâ0ŊëĄ €*Ĩ͚\m9d įŠŦŒG…ä…’Bî1OIŪ %GzĐ:Z—Ü%rjtØŪÜ֝ÂŨHí-kfg|™G´€~~cL Ôg4öFUŒgĨM§­ˇžÖDDu_ZX6߅9'*øŠŦÛwļÃōįŠ@ä04šŲvg 7wôŠ-îdˆĢpV¨I&îĩ5ŧ‹€¤ķRãĄIęlÍ t)Á=Ēĸī‰ŽãÁĻ4 duĻ´šÆîŊĒ:MgąĨ`ž†¨›]ĐŲÕTšCåÔö—Č<Ū’šMf„fQ,ŦUAÎzč–ōÎ@ÂôÍ`ÂTŽBy čjiõg¸ˆ$jS=}čˇq&%ôë=Ā{qÅlZ@X5ÎŖåIO*5Ĩ%ˎ(Dr:Dr)>σ(,Bc­R{|ąlgŌĄŌ÷S1rŲl šŌ…’$į"ˇ(­¤Î‡oŨ@4É lzfŽÉ4ÎHŋN)ĐÛÜŧƒĖ<ĸ•ĀH4Ä8ķāU˜â‚$ĻGŊ:U>YĀëŪ‘GÉ´ãņ¤›ūl(㊤2‘ÔīŌĄ$…čAõ¤4…(ĀûP°äÆyĪĩB]ą†ÎsMUx×.ycÚ­(@ ëõ etw,p8íWD.rÄPÃ8"Ÿ3ČSnHČ㎔°ÖE ŒnĨ8UĀĻ(hŖPä’9Í"°˜¸R(@ÎgXoôØū\÷5Đ UüŊÎUGãXš?o1’8^=ĢFYmĨ˛ļs qsøH‹ÕŒņÁôđb\¨#‘T´ČäYa”/ËК/'"Ęh˛1Žž•E˙eĀ1 Ô^Ņī#ZV œpGE#YBœãâ [įšQõÆ*ėkąHæĨs@ˆ ˛Á›Ū¤•Hsŧqš’ÍÚ˙{ ųO öŖQ=Éáyį+ĐÖĪs%ąûŖķĨ…ž|ĩ0>î3LÜT‘HĢB—ũ5BôÅt˙y bš/ 2ĩų3ÆEuė›”íʏjÅîlļ"WT (\ātŽBö÷ÎÔ%‘#Øãƒƒ][8XXØ× áÍôš<į8õNJ&LŲĖĄK°^iģO˜qĀĒÖîCÜUÅųFwnŠØ.QÕY’Ô¯\÷Ēz*´¸gm[ÕAkcœņU´@˛NFÜ`u­ÂCøļ$¨SŠBpĻ|ÁņÛ֞į'?Ĩbj5\Ģgž”íŦfîæŦ”5<Úĸ”ūđNhrÜ ^>õaË€=njeŋŊ‘úÕĩÂāÖĨ”Hnj¤íQ œŊ+æ vãŸZdqģŋ-×֒Āf'ąĮZ’؁¨Ûāīi#‚ŖæĨ‰ŊļŖ!Įj:ô¸ÎPSĀâŖ‹åARœP‰#Ķ”ņ׊nĨ(ô4Ā\dõŖæ›Ūœ9  ŠĖM;$i!ŗ@8*iĒ3ČĨUĮŖ;N(Î4š)3žMŒPfØ9¤?xR`“H&ę)´QaÜ ¤Í{Ōķg”õÔr…&ŒôĨāt¤š`80=.F:PĢ@>Ô‘Å86Đ ¤Į<ĶÂ3L“‘ŌœĮĻ)¤§)PgRà ĐB‘¸Đ ¨āu ŖŠn8¤-ķ P†b”¯ĨZ ō=(ezW–øŽ NŋpU Rs^¤ĘGJā5Ö#X›r(Ŋ+ŗ›cH<ĮPOŊ7û<ÂĨŠ•īõ­†Œĸž§8§Ë™įđĄL§û@>•Û äc¯ÜÆD¸ 0;Õi˛ąāMh‰ŊŒF•mäelõíS D.2ų^™5OSFŽu$uæĢÆä6OJÕE4fäֆģ\Ŧ¸‘qŧũā*í)ĄˇB¯Ö\'cüŖ$úUĪ'11ãĨK‹ŒŽM§ÆŽĨŸ:Ûˇ*Ž) yÁŽ~ÎCĩæēI2B°ų‡J‰ž†„H›ˇ2ä•d­•āŠ#¤%›…öŦÁˆÂG`Œ°ąs×ę5!(z˛¯ōáŽrh™rģĒu•<`t¤ QîĮž´œ`p=ŠUޝ­3ĘÉĮ< •C+›īP€`Íø ƒÔôæ•ļƒČ¨ÎãGé#Pr3Iōô#Å` äútΊ˜8ڄUI9ÂF>cL¯ßpˆ 9ĄGR¯“ōƒB°Áū =iîHo˜îôĻņbđϞāp=i?ˆŒî´ŗ€AZh_J ōđ¤‚x§LŽäS>UÉéøSd$Ąâ™ŊJäT›RÁãĨF0‘Œb€#Ûš‡Vˆ¤ĐãsŌēõũ+™ņ\Äęq´Đ–ŖLĨü(ĨLŨęĘl6rB+ŪāM:‡‰[yëé[d(Â)āu”•"î‰6cÃ+“ÕÆ5)G^kĒ, íÅrēļßí)’Ŋ]-ČĢąDœ”ÕųŠîĨHČāŌp:WAÎ5Ī< U$Rš0(zķMÁ&¤“Ŋ0 ͉#ŒS˜ŽiŽ~‚†ÁéÅ+0ŽôĖcŊ¸4 Ŗ“Nee9aŒŠDīÆMŗ0öœ ĀæäHâ€+ZrsHŗp8§đ21HbČæLg Ty"”)= ĀÅņMÁ&”J„†é@‡E K @*ÍĖ)O)÷>jlw€9=ęģš&‹)—#šš, "Ēfė)âFĨĄĻ^šãy ŋv wû‹…¨Ŗ¤÷Ģ匰‚ĮjNõ<ļØĩ%ԚÎ5”.sŪ´­î>Í9IT°eC7’ŖÉ9'ÖŽ9i•d~¤uŦåsEfŽ’ÆÔ_”üąįîÖÜvŅ…dĀÚFač“É%žĀÕí[H@mŦ0Õ)•č,z}´1ė‹åÉɨæˇĮĘŧ‚*eäŦ{q§"€"†5UۏƧŦ †Î:Ô%Š1r>ĩ fÁU‘͐§Tm†š­+|¸n´×]Ė P@m8=¤Â.8Î}*UŒėËÕ ėĸAˇJãgŒzyFĀ,~QÖŖ[LÔčĢËv÷Ļ&Kæ¨`āŠÍ$m"œ°ĮCHvįƒī@ÜąB2 éƒLŒy#“ĪŊ2LãpĀ ķUfŊ ŽĖ0Îh¸ĖxmÔ72ËÅ>ÛČĒąķ'ž•ˆs4ąH8ĮÍ>Ũcļœģ~ĩRiÅÛŪQĮötĒ>n:Ķô)ŗ§Æ7‘‚sI{Ssü5WFlY7˜7ZŸ°/´nDĒ×JPî9­3˜į‘ČŦKŒąÁḚ́ĖÂā‡äˇŨ&Ĩhh™¤Q^2ą.ekgŊ’´$xã[đ¸a‚ß:öŦ]vļ7rc‡ĀqÜrØÅĐ#˛ģK…ŧûî>V'ŊbŪX=­ķŠS°ĩ_ŅãõãÍvĪagÔā§rNiQP1”ũāĀū<`õ"*˛O ’`ĀĨY †P"a&ÆĮP}jA‚3ÖĢ><õ21ōúã4Ā|‡‘ˇ&žĨBäö¨~ëģ$S™‰ū(!vnã&ĢÉĪQš‘äR˜ LÆå'ˇj@FŽW‚{ Rā?ÉúŌąSƒÉĀíL|ÜЄIķ˛Ž@õ5“¸ī֗pÛÁ9šm¸UĪ­2—^Ö Ŗ' §ÅÁËŽ˜Ą‹Âū´ÄBrØÂđ)ûIBF8íM“jā3ûTąŗx4 ŒۍģI )\įŌ¸ųūņúTxbX3L ^é\׌ĸA`Œ-ēēŅžEäqX^/ŗwˇM5¸ēŽ–Ģö• pEt,Sa`Ų&š‹EŌgœ×Aƒ€1´æŠ‹Ré=FHĮ\×9Ģ(ížs]4@ų€œ0ŽoYÚˇŽŖƒš)üASb„œ=) #"Ą*ŊXtܒx§$Īmą ßx•Ōs‘¨ÁÆivāŌņŠ1L‘1īJyÅ4qīOΤ0/ƒJrFj0yéN$c¯4ÎM!Î)á3Í.;ö bg¨ëOff ąĻ‘ÎE*ûиäÔI!e *Wĩ!fĮË͊ƒŽ M¸æ•ÕG50ßZ͞’KMå I‚3N၃HįšŅžÕä_:8XEëTŠÚ.; jBcŠ™ ¸¨J’~QNâ°ŨĀZ@2Ã=+JÖÆ7*fc´ŽÕŲ’į` vÍ+•ĘČåxÄjŠęjŒ`äÕÛ[8¤“lŦĘ?J¯sY™#9@hæMØVę%´&Y‚ĮzŌ¸ũä!{ĸāqVtHmāĩyæĖœ"ÖŊĨ”7ĐÍæ2ŦŦ0 ¤Ũ†ĸs:dfâú+p3¸ā×eGĻĻUbî)Í ōũ?/Ĩ…b I$ū,{eeC&zTw*j0ÄH9 ĶfÔRI œœÕŊJyĨĘ­ĶnxĒčEĖi$|zætLZ}ŒįiĢ[•Đå4O-umŒ¤āe~ĩģæI-üģĘ:{ ÆĐ­ÉÔ$™ĮE8÷Ģ‘Ęâé÷ƒÔÕËqGbÄęąâD9 įņĒחW71ÆdPU}*y$ „cŪĢÁ š3“€ ^ĩ1ŨHąĻEO?Īu°… ģCms¤ X-÷’ō¯j—¸Äĩ`) `öŽ3X˜ÉĒLPœ]ÄP¤~fÎA“\–žœüFœE!֓Ėŧ‡īĐ֚_NņČŧwB+Ęy5,ŋ,AAäõ4ŪãKA—ˇėđĮz‹Bģ6ڂȊ Ą§ÜÂEŠ ķzÖ}›m¸ĨRJÄ?‰•ŪĒōāÉ 9āÕCnė>F×Ö˛yc?Fˇ Ģ.SUcx^BÄg'­ B †öŽlKģî’*Wē2ŊĨĘQ˛ķŲČwŒŠ§ĮqjčJœâ°üĪ”d|ÆĄŪF@üqG(ŦtŠqjS O Ü ¤×.ˇƒ ņīOŽūdã‚irΰj1Ã1ŌĢÛ]oÔám›WxäVwdļJ~ Öž™}ÛíŅ×#p¤ãdRG¯Är¤ž(xúTQ°1/ōŠTœž8Š[ąYE*ŽÔ{sGaL@qڐc9æŽüPÅģb€üR0Å*î=E 9ö `¤cĨ(Í!8č)ģÆp(ãÁĨ"šG4ėš)ϞŽ9Ļą$qGUæ֊nÁEEE.IŖ>´å šb{ĶŗHÄ9zP æžĀ4œsNū<ڜšĮ5qRĻ!2iĘŲëMęi߅0 —§ƒƒÎ(É-žÔJ98Å799õčø äž´ģrŲ&“hŨÁæ€F:ĐzŒR`îŌ‘Ū€ō0EyĮ‰%ës.=ķ^Œy¯4ņVį×%ڍĮŠ–÷ApI ŸJ¯-ۖäzūū;ŽœPČÄr9öĒHŦÄØFGŊZ ¸ÁÉ>õ+ ũßJŌäØ%1OQ\üĢåģ&:č6ˆŗĀõĪLûŽûWeąsŊ3VāČĮT‚\Tá‚Č@éVAØč’Ŧ–ã'•pkŦGG'o5ÄčģE‘8ųŗ[ē}ÖÂS=kš[›'Ąą+ŽpzT$¯a×ĩ9@*=j6’㊒„bJąh÷4—hË ˙:¯¨:%‹sôŦī+y„“Û4ŲĶ‚XšW ¤Œõ‘ĻŨe‰‘‰Ts–›PtIŠŠõ¤ĩ ›‘&åČ=ŊjÄ`įĻīQ\äS6rĢ+SīQ\ë7kÛšT#,.kilŒÔnÛTŒšä“V¸+I+^ŲŽ’Úö;ģpÉÔđi‚w$.¤ ­HS9ûĩ@í9Ô¯SˆĪzE" øÆ“ Ÿ›ŽzŅ$a0YēSTŗd/9õĻ"AąrKsP}ēÚ6ÃJŧ÷Í2˙ĘBŲʎÕË)>îį“F‚lėŖ¸†D6RŊÎi§büėØĮSž+–7exa$EØzšąŗÉFÅļcŊ;ÍöžŨ”0‘~š§‰PË *jååHãļ‹å˛xĸ+–DÚšäį­Kv S°nœŪĸÚYĪĩ2ЋˆM܁Í]Ųą~Q“Ū¨~džW8ÉÍ`øŽDm6E'žŲõŽ‚gŽ0IoJåüQ™l3ŗn“GT3ļšCī]0lƒÚšë-ŋj@Oķ]!UÚŒZuĨRØPęŖ­rēą'P“œ×R ‘’{tŽWURēƒŅKpĢąPF}(¯9ƒŌē.sČãŊ8œ)8b ų[šdŠFí@>ÔĨˇRvô b•°Ļ“ŋZQĮniĘš;{“@ 8éšāākpxVîHĘëąēäÕ;ģ{kDX‘ˇH>ņŠRžÅ8ÛrœŠŠĒc}ďČÔ{¸Š^5žoŨ ô–K9­Āg^Aš`•ÍKE–ãI6Ņ&öfĪN•B÷Lģ´Ĩ‰‚úãŠÔŌĩČŦ⎠!Æ9.+B÷WŽîÜĒŽõoZQZ4q‡× ŠÖQå…¤UÃŖÜLßš‰Šž‚Ą6—6˛(xHÁĮĖ)Ũ •ŖwNŠ÷ė@G"˛ājiŌŧÉĀ– ŒßŨŠĸÕZŅ#ˆ.5zß]ŠW˙HŒ!č*ËMlRJŽZH÷/Zeę@ͲŪ(Æ{…ÁŽ…åŠCûŊ§#ĩT–Â9NîūÔŽ]ģvVéD…rF*ņŌ`dff=ņV`ļ†7ÚbéÜķšŅ ˆĨr9éÅ&ÁhswĐAi „EšŊkÛM–â_õd)ŽÁ,R[§–~G`jį•_ŨĒ Ą;Õ÷99؈„°jƙa-ĖŪaÜ#Ī,;ÖÅΕî˛ŧ{ČĢÖÎ!ÄAUGĨZ —QNļ˙ŠB{’9ǎ:zßlåH<ŪĩDÉŋ§øQ…É8āÔ]•c øŽĐÄ ÕĶá’O›&æ<ԁĸBŲäzSZu3IļĮeš/é“Ū˜Ė›l'ĐSD‹4dįļ(ķ““ĐŌV[rí˜x=ķBÂņÆrÁXúÕĨ–>J°' §€¯ÃōŊ3FĸĪЉZQ™ã°Ļ´!]—yį•Ŋ8x#ŽŸ0Üŧ."cYrŦ9Č=j}„¨ÚÁ‡¯­d(c•?Í%ŊÁÃcšë@$€‰ ‚sŽ•ŸĄšÔŗ’+Å$°FíšÎÔmåÚÛNOQE‚÷æd…#Zs ŒõA]üŦ—ã9Å[uqäS°q—CŸQUŽ"f@ár*u8ėŽĻę’g9OJvB9[­írG<{UĨ¸ķlcŒŽūuUž.ɉT†8Ē \÷OLÔHžŖŌU 2)$‘IäãژT Ļ3oíÍ@ČäÃrZt +†u{ԁC į‘Ú”Á ȧp$ĢŠHo¨Ũę“Ãm"I’1€MY\DáÔp;U]im1æ^=ETĄĐOšmÄüÜUĸÅgÆ:VG…$uiSĪ5Ļō&UĮĖ7sZŊĮ…ü)‘ŒÕkʐÉ55Ū|ĻpÜuĒÖaāûĐ•ē§(Ø {ŋ˛K!cĪNz–ŪE7ą‘ōį­GŠ"Č@,NqR÷)l]ļÔK6aË'Šä!S5ÅðęIæļtÆ{u”ō•88Ŧl¸žlž”G¨5ą´á)Ŧ{Q“ØŌmįšw4ˆĸ€6’M4ąí@É”dfGZF@9Ī4‡īRƒAėiĘŖ<Ō´Söj(šÜyĄI'§gŒRĄÅ1  KĀÉéKÔۚTđ ō)Ã4cŒb˜āŠ3ƒŌ”/˚nA4ė:S“8Í7u§I4éJ:tĨ]ŧĶƒvãŒSÆvōy¤8ôæ—Ĩ8ĄsŪ…æ”ŒŠ sši|uģJŽ´Ķž”ælŽkÍüN ë’lÎp3^Ęp1é^SâģŲĶÄ7­…Ā*ĸŽąAÔ C zS]ÆåÚŲŦ‰îe,0õÍ>ŨÅhĸK‘°Ō “ŒfĢI1åųžĩ•įĖ ;Î)ČßÄyëT .bkĢÃ4n‡åöšŊ}jā€ryĢ\¸\sV‰a&4Å$6s×­#ąIyÉÆ8 Ō>î9ä̓ÎsÅJÁdŗg+ŒMĄ•UŲvžŊk¤Ō-vDĀōAã…oČä WMfR8ÂÆzŒYŽ(´‡iĀ zt’ŽIĒÃCž´įmŲĮ÷ĻXĒÁ#85V,= (xôô§ Û׃@Ũ+=œ¸é´“\’(‘Ę–8•Ø\öŌ)ÂGČYŖyĪ´p3Ík‰îZąÄ›‚‚āššæpۏ֗N|Å ˙(äĶ$(UĮsÍ8‡K™—ŧ8į ĶŖ…–0ėŲĮLU{ŗ‰@fü]ˇ cQˇ;¨‘+SĄŅŊĢ.;õ­bŦ2FjŽ”žLyĩu‰ĮŠĪZQØŅĘžgAČŽsÅ>ÆS$é™ ų ĩÎø…VHcīķš<ĮšÁÂÍŊN:ĩÕĀÁáW⊪ŸGåļ Îjđ UŽ(œ“eBĸN03Šæĩ…Åá8í]>Į8Žk[p/ŠŽH4énv3Aā€8ĻņŽ´āįMqŠéG3ęOqœŌōöĢHmā„—Q$Œ0Ĩ1XŽH­íJsŠržyĨķ 0"š¤g“H@'ž”†ˆüCv-ŧ’ß.=*Š[Ë}pŏ4ÛXƒšÜÁTw5ŗo¨ZŲ ņī~ėiz—vhiú h>wĻŦKŖD˙3’p{Vhņ$ā`ĒíîhYj‰¨+ēGsYĩ"ų–Ã_Kĩ<ųkN6ąB̈ĮáOD*Íķ’cTîõ$´á,įAFãŊĩfŒW Ė:ôU[Ų^ņö$E•9lôõA,HņŒŠĪzģg2Û>ņŽzĐ3›‘9;˛¸ėF*6‰ĶĢr8âĩõˇģÔä.Đ7Z6úžšÂ(I8ĀŪ:U]‘§s™†iĸ|­Ų=T÷Žžœ!<ŽwU̘­ĸĞR´ƒŒŠŽŨČåč*ši$FâE—–>•2îR2zu$TX+q¸ōzą™$ >ĩ##’ŲįpÂVĮ Ģ{RĒČ… "6ōXŠWåmŖÉíUĖAœžŸjÚ=ãwŪĮQR;ļbŊ@Īčbą˜"ãŽÕĄed÷9™ÎÕÖ~ž–îâiÜũĶÚĩˇ4ø˙v.bvĻM놭ģ,‹8˛Ē3ęi foš0ÄzŠĸ5ũ4Mƒt™=9Ĩ}kO^MŌõŦųeØžh5špW" §<6ō ´Hqę*˛jÖ3˛ę,öН¨ÚČūr0Q’ĸŌėŅbÜ[éđ¯˜ņŦ`zVtW1Ũ;ˆr¨>ĩŸ>Ē5g!/L÷Ģ:YũÖšą‘[(´ĩ2m7Ąe÷ĢęGCQĩÄhė¤įœ–d䜑ڕ`I9nĮšb?=dQ´ųÔ øc“íNpÂfJ‚pA+ÄH =¨K.6ž)Å<ĪČqĐæŖƒĘĪzC##co道˸0ČN:ŠõĄ¸‡jāëQĮ4r 9û­īQyq¤dn!ׂ=iŠúذŽ@āöĻ(t›ËeXgņĒžyĪ– õ§ĩąƒžqE‚ä7VĨ&fŒô4~đÅÂgęY$ 'Ą“īŒ€áb˛–ã)ÎÛUH=;i—ÍU>XElV^~•ŋ#š€-*ˆĶ“O Ŧ8ĮœÎ6’i›Üļ1Å4˜Čã?ÎŗĩW1i˛) †ĢŒK( cGRu„ƒĐgqVb{ü5tĢw"mÉeųEj8o˜۞j–ƒl‘BˇjŸ>jŨåÔīv\Æ<˛{V—\Å/„&Ĩ¯ī‹•´Ûhˇ"Č@U#ĨM­ÉÖ°˜X.ŅŌĒÛŗ5˛ ņŠŽąrØ¯ÛŖ^1ŸÎŠÅæ\;€@ķŠ4Ø܉Ŋ;R‡mÁÃäqSÔkbš:ÅnĢ"õ^í\ôE¤š)āĩoܰhƌ€ž+žˆys7æ”z–ú6øÆ9ĨLG&IÎ{T3dē–Ķ!ˊ˛ØĘNķ ›ļõ‚Ŧ.2yƒ)ŪŦĄ@˙ēeV`_¯éNŠģ°(r<+tÉĮ4Ā2NsÚ K†RAč{Õ°ŠŸ3đ€ž Ë΍̰ė[Ër¸$¸āU#É$œƒVmrڄ đ7Õ,ŖÔĸ9EúT¸É¨áēAíS U#‰î5ō1ŠļNiÄ ö BrZiĩ8N1@â€WրphÉė)Wņ@9 €qHy›ķ(9č)Äd`ĶT06h )Ã4Ÿ1Í(ÉúŌ2h§aŊ(ŖP3xn 8.4 Œ÷Í0ŒĐsˇŪ‚piŨ>´Ä1CJ Ĩ,@†4§šRTcŠ1žôĐ3Í<‘Š^qÅ&~ZPhFqFyÆ)}ŗFīLBqK۞´9Å3Šn ´åÜÜ;TûV7žS…ĩ)ˆũÁĮŊCwŖŨ@@00=ÅzĀîŠįŽ1C[Dā3 $t⚭!8Dķ &;‹i9beFõÖé1¨BÃ9ô5~DI_`ŒmŨÎV§Ž>UÂŌr¸ŌHƒ,œq͊R>`;Ōģ°§Ūžą’ÂB1Ú fF­ŅÉ8æ˛<°ŽPōŲæˇ5•;#ĮO°XžâX úÕ˛ÄcƒĩēqU^2ĶüĮŠŌO)YŲ3Ā5‹>§$—$í 3Ō´„nˆnÆÜqev¯ZŽáŲ"(^ĩŸ.ŠåĒyG’9ĨKĶr€0čy"ŠÅØ9Žiéķ…”L†âˇ­—‚qž•ËÂJLŽãĨv6ÍēŅ$`>•‹.#™ˇ1yõŖq ķcŽh#įÜž™4×;đ1‚h(A8fŒ{õŠcðÉā~•PŊųéK (ž({ĨÛ˜į"š;6ŲvC6$+§¸—l Č zW! ėWŽ{ĐöSzÛËV+ˇ89ŨTŽÜ3;. “Æ)-îØ‡PxĮj­&Ĩg"-ĪŠpB“EeŒÉ8Ú>õ¨‹…ÜÜcŌĒ5Ô2”(à 9Å^ˇM‹—ÜyŦę^⍎ŠŌÜ-˛€ã<ŌČÅ[Œ x,#×Ēŗß(=iėh8ĘėĻ5āõŦ }IX8įą°Ģ†ė:šČ×É NNyÍ+•2sšÁīSĢmMBîÉČÕ(—h#īKŠ Eæ“Î ËęśP•ˆĮ5Õ?Ę ŠpEswĀÉšūöOĨ-ČĒŽŠ,‹Š…šˇ ļ‘QLŸ>+sžÚąĘņ@į4âzAč)ˆ\qÅ!8§é¤gژ„ÉĨ€0(ÉâŅ4dąĀrŊq[ļĐ*ŠXh=k—š2—RĢÆˆęÂZ+Úfĸ‡IōŸá­BČl0NkNĶí|õČ x"ē8­¤–ŪEcÆÂ>Ļ”­qÆö8÷—lÄŗÍhi’_ŽáœŽ=Ģ&xž9Ÿ#=ę})˜_FĒ9-ZIhgŲ,bI%Žy9ĢļØP÷2HØ"ôoP)!flŒã‰ąZæaėšûƈYēã>´—; ØfŊCė‘ŠMXiö5CЌ.NiĄ”1ų‰ĮZd#( ĪJr‚Ų #ŽjJ$PŒŽ=ÍIÆėdtāT89ÎāF;Q’SvߘSâYÚ×MCíÜpHŽœģnķ]gŠ'vĶŖFÅ\Šô­é­ *n#Į4yŅ‰ c¸ Ēã5Ĩˆ™ãl̰/fíČÁæĒĨ/<E€ë´eilKíákŖĶ‚-ŸĄ5ÍéRmŌ‰ĢcG˜6’9ÉŽyŖh=M$ÎģëQ™D`’0ŨŠŽŽwÆGLs(1Ã‘Ūŗ4 Ÿz 1–qKy"ûŲÁüĢ=.í,7 ŦpjĖ[í&pĮ)ÔS1ČĪŪĄ;›ą4G8‘ļŽzÔŦTž*„&ņ' •eāTŗZ>ĄkæD@–?ŧŖø…UÁÜ8&ϊęKĐä`đØĻ&fÂlr8ĀŠtđ{ÕŨF×2¨3Ë Ī•UÆXõ$8l1­‡ūuj‘umåˇ$pj´*‘˛ †_zYaōn’XÎĐÜQ8Ũ\¸•ž&ķ Œž*-Ļ3ĩ×qWg?ŊINÃųÔŌI“R­ÍbہbŽ^ŧšx šSŽT  ×Ōĸ ōAĨqsÁ9ëU.#ķ-äTęTՄcžiėĒކŠ;­ĻÄÖökŸ›¸Ģ-āéJ¤#|Ã509d§ĩ&õ¸Ö…-Ußd†z›O˛‘ŨK&ÕOÖĨÔ#‰ö>pÉé[0CūƒĄÁdÕÅ쎠(õŦMA›í§ûŖŠÜC•ŨÆ+Ttäķ–Ē@õ+ŨÂŅ!-ʰÍaÆŖpqÎO5Đ_°‘ÉÁ^+Ũ@Äãm#E¨ņ…‡hnõ^VŒÎŽĮÉr{Ô/lÅžlqJåØĢ0&ĮLdâąžPŲ=3] é˛ÚNkŸ–—=+ZoCģŖb •zzR4  S­´!ĄĘ¯ĄĻ[~æ8Åf÷7[a,Š{ ëŋŠ‘ŽÔķžÔŽÎĢÂáMAv{‘ƒ€)† 5"€ę04žCs´P"4‰›īqRÄŲ8ÉŨۚ•(Áj’(ļ¸bŧúRlĢ`IHđ:WíF/āä¸`TՇ2¤œjx<Åŋˇ—Į5,ęs}*N§ŠŽûĩįĩI’­ZØá{ޤ<š `ĐŠ&sŌ—´œQ¸cš2OŽ”Ŗ×ŒpzPzķIž)ØžôĨr3Å4gfÂđiˇcĨéM%ˇ xāg4yÍ $ĸĸČūõ ŖÎ2:͐ä{ĐA⛂ŧŠb$S¸=ę0Ŋ8Œc˜‡íÉÎhčM3%Z’r}hr:ĐGJyĨ, SÜņNĶO#8§ŒãŪ€94ƒ= ŧõ rĩä _­7o͞ÔáĀ¤äˇ b—Š7 PŒsMÜ)Æ2…hš5Áø†ØK­;O&ģÆÂĄĀí\6Š#ž°Û‘‚ž7zS@ŒũööØŪ>n*Dŧ‘‡îØķØU éSû@( Åh[û>T*yĪzWČŖšâ9]“ŖvõŠZöí™~}Ē:ņU–öŨŽZ%pXvĸķ‹ËĩAĪŊēΆŪåŽâų~đëS(¸ękĘfëÍmHų¸äT'rÆĄ$äcĨ(%dõ9ĮjYƒcƕ˛vôĻ˜ŧrŗ=)Žáøį§5ÚOĩÉČ*|`nĀΚ0 \Œt4 6Đdđ8ĨĖE°3L :šĢÄ Ž‡¨Žjā(“*r+ĸÕ$Ú9bsôŽnŌĘŒąĄ.Ļr`ĀË °%@^•Î8"C“Đ×cũ›,QJdáqÚšģ˜!ŠV Į$úVôÚąœ•ĘnPø$tĢē4ŠŲķWtl"ŦZAnŅyr6I9¯¤iГ3ÆĐ¤īU)č =ŠˆAĘĒņØ×KφkG‰Æņ”`šÁúWGm¨éÅsŗHĄųōĮ›Ĩ fĮ\ô¨šNqÔúRŠägߊJĔ „SL8mĘŨ:ԍ1 … hûšéš`,ąˇ`ŋxŠį-mRk’(ČĀ­övTm§:V-˜o õ'Šē‘DbŠWEG­s7x7rc‘ž+Ē€4žxōÎ88ŽmmKۘ[*sÖĩŖĨȚ`ؘ(īÍvšeŸÚ#G˜Ę‘ČŽF+FŠwpÜ'֝ĖŠĘąĘĀ÷•MXŖØí§ųFŨŲ'õĒH76H¨Ōyn#BÃîõŠÔĻBí!Ģ6l†”Ú<ÅņHŦÖf8 āZč26Ø;kņtĒļđĻNíÄâ”UåaŪČĖ}R!hŪĸ‘îkh˜œšÉŽđ4ŦzœN“r"„Î1Íj ē;ęo Ã[e9ÅQš%‘H%UAU#ģšĀ#oŌ–e2G÷Jeˁ †ŦŅc0ÁNæĨČ.߀¨ãÁÜ[ ö#Ĩ>L*Ž;☎oş41í\×&28Ívž&`œ­q­€[s[Ãc î'~MYXÃGÍU-œÕĨp01Z0 1’qÚŽ•ã¨ĨXŗ‚:ĐĀØĶã#MĀšŽ‚čm&{ŠįX„ņZĶØÂŽæõ‹ģZĸ…õj6@ōĐŌhjˇ,@Íh=ēŖ¸Ž9Íg-ÍĄŦQ[Ë´€1Žôã y`ąĢŖtU$ŊG‡Ü×=EAĸ!Hũî§Ļ)WËŪČsЎ*Ä ĮŊF0DëHc@aŽ*guéČ#Ŋ$ņ.ҎđĻ<ŽŖ”ƒÚ€ ķČnN~•bŲņwÜr\TÆ =ĒÄ,Æúß p‡°ˇ=fŨpŋJ˜€ŊEnßšOĨJš$î4ÖĮÜR29ՐiųëHO4Ä4ž1@Ņ´S° ƒƒŪ—Š܂z͉怊i'Ļi~čÎiAt °ãšĨrđiš$fƒÔŠ“ôŖh+žôƒĐRÁôĸ—֊PŨ“ŒĶ€÷âš sOQŠd‹TŌ(Į$ŅŽiŨųĻ@<įĨ*j\q@ą Aŋâ”FM äivūTĀœãSĪ Mܤny $控­;§jCŠPp .IĻäZ7 p( īOX4üm īŌ–<đ)šüéÁķëÅ @âšmV1ũ Är1ÍuÖšS)¨ļĶĮ naͤũĸč˧ôĒų—Mŗ@Ëœq]eSÁÁŽgÆ. c¨'špW–ĸšĐæŦdvŊV_Ŋī[Đģ™Į< åfĢ‚:Jél%]čIÉ=jë#(š‚M˛†*pxށ_|HHįÎ;`Æ+ŖƒjÛŠbxú×:5ˆu'éPˆđĨOzœĘ¸Áâĸc–%ONƨĸœJÂæPn3Wƒ)Ÿ(pÍÔöÍ)-œôŠĄ &Ė隄—*všœöŨÍBY›,ˇ4ÆTÕmŪæĶbNk˜žÆėN"Dl¯RĩŲ.Tc§ZYCÎÜį¸Ļˆ”S3ŖYæĶ•Čũ5FM Ž% )F'ÚļŨ tČĸ>ŦáJī ŌF;øq‘ę*핑ŗÜĨúûUįŪqģLw˙g“Ū‹°˛ FĮ*Jk3yu ŗÁôÄ!Įķ¤0‘•Š•cŪž§a Ž1Q•ŽN1éOIVBNiˆY2íž´…ūS“ČíQ˛1‘žcĮLRFK>OĐĶd`}™ÍsįU{=Z]é˜úbē ’’ũŅLšÎŨ¤,!Ÿ×ĶBŗ*[ë1°!mo°ŦŲcī~Ō‘ĮŨôŽ“ËCTÚ¸öŠaŽ(ԍrOĨ5+´9ˆ"k‹ĩ„Âv’HĢzu‘MJV0íŒgmt]ۂ€9b›ļ•9āTš\iXƒ ÎÔĮŌ€ gqÁĢ+šØ…×4ƄŒ‚:žjJ# 0~^HŽCÅčÛ!r¸Ëcšíd å¨ôÍr3?č°n<‡Æ*Ąņ OC™¸‰cĶĄe'qc‘éJQŸOi:@ü*Ë@×:\[1ü)mãķ4Į‚+[ŠÚ”m!IfBBāązÎhŲŖ#p<jŦĒĐÜrF b´´Ģ]öī0l74¤Į!$…ŖČÅd^ `Q ¯îČëŠÔ’m‘ģŽÎ1ÜUÅDxĶ#'žE Øm_C6! o#°'^ÛOKŠ$Pv•Që]#iėerŧđJ­ĨØ4wîdRģA5\úɨš=€]ĀĀ<ZŨ–ƨv:*ĄčGjθš‡O9<îäTęöü•Œ´qwŠŗz•Ím{û.ÂÚM8˙…OđÕ9­¤Žgōđ§ĩliš'Ÿ&ōÄg&­ž›š6Îzîĸâˇsœ´ ųĨˆ¤˜Eģ°ÍjČë1ÚíXš‹Ŗ• āgĨRՒö%„Ä÷)œ'œÔēŨÄļÉļ%P˜ŠÆÜđHĶī59.ˆN‘/jģjG5ũéŽlx(pO­>üFÁBŽsœĘĶ5GˇQ `ÆˇfA*ĄpÅCVe'Ą¤[fwlĢ7aŌ¯ˆ7G€>qĶŪ¨ÂĖŌ‘‚0p2+T6ÕÜã ‘œuΘņŪ1›! '*+KLĶĸIãž9I9äVŽ\L0I?JŽÕŲ[jƒĢoAYŦvŽAëH̃ˇ9ĮĨAh˛%˜į=ęôJ0I>ĩŽåa”fMFĪļeSØgĨZt@j¤ŒÆV!FīZMč4‰¤”Áāš–= į•QUÛī`‘ųT€:œ ‘ĸA(ÉpÁĄåÎÜ0 īVƊĒܚŽî$rĄ2üЃ1xLsüęėČɐà uŠmÄBÜd oīÄЊŨ?}#mUíTŽ. ԁˇÚŦßKˆ Ŧ›‡ĩRˇ¤e ëL ļ››h#åĢd*>BãØSŒb\.;Õļo.U‰(yúTcIwG[‡)žQ^HÅS[ļ`S>ĩ*Íąüˇ§ĩRË+ëFĒĢöÃsŽiŠpNĐĮjžûcC‡ûŋ΁3" †ų‰=ĒĀpTŲ㚍í_†Q‚J`RŦģ‰Ā8Å Ĩą~PX…8ێĸ’â"Y#ûŊĩ:_ēŠŠXÜēųoÎ{Rjč6g324DRyÅZRJäKwe*JB˙ĢoŌŦĩ™ŠÜ>AP+)h;¯ōŒžĩ>)ĖŽsėiōFĢ6vë,lßĒn"8+ķMëÔqW~Î#L– WŌĨ0h>C€zÖĸ@e#n5ŒXŖŒ Y‡Tx\ûSĩÁ3hųÎ=i–öCí­.āWÅEw¨C%›Ę¤`/#ŊW°×íäĒŽîÜ•ŦSąWWŦ,ÂÛ>VcÉŦ¸ˆēÍiëM Åŧģۃ$W;¯w ˙*V5L¸>[ŒéV&sˇš ˇpÜ3Žõ`J:ą4š)¯¤c •(ÄkĐgÖĸ.Āž´Ũ€ŠųŽėĐ!ī1hÎĖ1 Ō€œ†+( pØĒųāî]æ€cœˇQÆiHUĀÎ*.Äl|v"œ‰IõƒŠ[4ErT´âī&VV (üÉ؊’Ld ŠÚ°âĶéœÕD€,ļ á˜|Õĩyn–ÖČŗPhœĩV‡>Öģ¤%¸9ëZ6’2ü„ĀT*$–cŗî˙*Žv{R˛7 §œUî€ØˆW<Ú¤e,Ėø~ĩ›%įú8™HÉãĒđß<ƒ;.PlԋOļŧģTnÃĶŊK{§‹Q“ ;Š“O¸ŠP­åĮZš}+\m‰P)Į'Ԙ7 Øeķ!_îã ¨ī’O˛”z÷§Â›j€1š­ŠÅw(Ž ã3zP­rnĖÔ˛’ERÎ úš§ŦXÅ12‚š=ënËO—K˛=üÍŧ‚+RÔŖž´jãkt"ŠnKĶCę ¸'n*†ĶŪļĩKgM>ŪL ž‡Ĩc7Ę8<ÖąØĘ[’ÛMåJŽ;ëáŊķ’/“æ"¸Û|y鞄ķ]Ũĩē­ĒH0N?*™•u‚Ä/8ĻN[`PNM I ÁŠĖx¨éßĩAfNWÍ(qīRĄPv čzĶZ?™‰“ÖŦAnPŒ“Îh`‘vÜ6͛zzTę `š8iƒāÆ¯F¨‡8ÍKe"ĘíÉ:æĄŠH/^õmŅeĀry9Å4@¨1åĢ)ęjnUˆJ,ō„Ž}*đųq…ŨM1U(? “æ(N>™ „AÉČ&œ`Ø8%N)Nåe=ZŠiÛæ^y^Iā×iáX--ĻےÍÖšŲö-¸ųÍmé×ŌĮĻGlwTObŖĄĐ´ņH[qĀ'ĨG2ÄFKāgŠĘļķÎHŽõ¨Ãz€ādv™e –ŪBĢŖŌ§ļ¸Ų‡ļ*F‡Í\"/åU$ˆ† ¤Œu qg™× Ü{ŌÂ"Ŗ1ä÷¨y`ĨIdDY€bUi r*"áXuŠdŒBHôĢĐAkšflûzĶ&ŊHŖũÔ`_J`ôéinYĪÎGÖ {‡¸]ėđĀöĒsŦ÷‡Ėc ŌÛī†2¯ÔP/2ô,Û2…ôõ§"–›,Ŗį¨āũæ8g Ÿ>᎘ w$1†bCŖ°ĒÅ~ķŽOĩ“K!îƒÉŠVŨâ~šSךCEk™O”ĒŖ$‘Pߙ‰U88éSĪgœ”Č9õ¨āũîč&áĮsC2áFzwöĢQģÂC!"Ļ}2X÷,gzž~•QÚXÆĮ\zV-Ũ‹É1f'Zą+Į°`Õä `õīJKn?Ũ¨°Į¸ ­W‘C0ÛW6ĻÁßÖŖp…ōŠą+‚Ž GáąÚˇ|;keh^(Ô?0&°‹ԀÜöŠEĮ•9Ŋ9ĒLWąĄ­ŲíÔë…vZå-­Ėås‘Öˇ.oÖöÔŽ 8ČÉīXĢ9ŠāG´…'œvĢ[)\—Č|Ų éŠvÖÎvåEiPáO+ëIÔ陗æ-ĮJŦHvčsëR‘m–‚ îŠzíĪ^j eséRDTČ8¤ĘLĩķŒúÔҧ™&Ö#ĐTyaōX)÷§Ė@ Pä֤̒Hp*8N/áįpéOYÆ!ģâφܛˆJ¨Îāi=F܃nŸJ•¸č* ~-”÷ÅX_šškc‰î5O< FÜM9@&—€iˆCĶ‹€1JH'Ĩ{ĐM.8íJ>Ôw€¤$ 1‚hĀ€#oÜäP}éČ$q@hĮ=hLāņHíĸ—>ÔP pxūÆŖŒĶĮ\vĒđŽh"“ Œr‘ƒ@ Ž: pĻųPy€rx 1Hš ÁĻ!ĀvŖ<Ō{š2p@ cŒSBirHÁĨĪPA¤ ļ)vœšC‚(ۆqHIŠQÁõĨęs@ E9†E!Čn4…ˆ÷Ék_6ĸÅOak­=+’ÖĘĻ Äú ŒÔ[ ÕØPžõL2+ šĩ@Į“V$U…7ę:UÔa AyÆMHà ‚E5”ĢcŦ+U–U(įå<ûՋ}r9ļųšWÎ)Úâš­žōeû“L{fÜp:ĶĄh’ˇâĢOŽ;hy=Øō)´Ë%bVÉ8#ֆ(ø-Øg=Ģa%Û+=¸ĢzdđÃ/‘&L'ƒē—2όsĀØbĘ9ĮãOšhÔũēY“Ãjģü™¸Î@ŦŲīĻ‚Ve 8ĀĮ4'p:DÔmŒ~_˜š÷Ĩ’ö#Rî=ˆŽ7íAŽ0AÆyõĻũ¨2-Į\WbyŽ­õX|™6ÍéX’ŨH˛y‘šSÔæ˛ŧōÃcĩMĘXF|÷=Š43r×TķJĮ& õ¯,Ŗå ŪšabË bØÁÎEh_ë°AE,Û~f´–ģmÍėA,fÜO@*6Ÿ#w Į×9a¨-åÂÄŌyCš=ĒÕūøĻ m?ŸsMŽá~Ɖ•d™wp)ö÷ČÛÚAīXkv‰&pҏĨ:”-"ôRPk7qŨu:G*‹‘É=Ģ/Sc,a@į#*ŨG"+&p'íÍÂneįˇĩEojē‚4,vmÉöĢCB…}:Ô-nîÚqØÔ\m÷&0ØGvŽNå‰qÜúÔcUˇÚöō/ÉÎßaYÁš&ØĀ‚8Õ č™\9ČīÅZ‚{‰Í­>͍ß9Øy_z×ŊŅ`ŧˇym|tėkŸĶĩI U'œdŠęcŋŽ[16ī—ž+Dƒ™äÚÁĩH'īÎ+EtKR§ Ũ‰ëVDŌĮš 29ū>Õ5ĶČĄ$›‚;Ž•LI•lmE°ōûį“WÄ[\ŋ]Ũ*ˆsŧH­Ö¯n,ŖœHDCąĶjq"ĸ–Ûž3TĨž8Ës–ĪjĢ%ë2íLîúS°Ž_kįlƒ)ÜW5̘äģQa ` VŊŦyM,„äôöŦKĨōޟ~zņT„ÃQ‰—F ĮĖ}Ģ—={ ėu+ȎŽbÆX f¸ŌA`3Åi9:^•=ėĒҌĸ°Ü}+Ŋ6-¨į5á ŧ›IļĮ“¸eŊĢVæöiY‚§Ę*%vˎˆb+Ŧ€8§ēoõ& ŠYsuĢqČęێsÅC)īY6Ž>ĩ~Ûa@$÷" ¸&g5nĐˆ…āĐöZŽ?ģË*ôõŠS*a‡_JO™†“R"ã…5ØTŒsša˜d`c`íYKÉŽĪÄÖP&ŪhԆ Šætûa=ÁB;zÕ§Ą2Z–ôä Ššüŗ ¸[Ž'lGj(äû՝J4[FĐŅ}BÚÉ*@ū.•Šd¯*ē|TPĀÁUđ@ĩąháĶ ÅL™HŗkŦØĮž)R9&c´ā‚žŒĻPˆ@zPn~Ī3 éP€xŗ›;AÚ*-íāYg^õPË,Ä37ˇ5Zų“džĶŠYŽl ÚPG\U u:c˛0ļhŠŅ’Q–}éōiÆiÉ?xtŖ@/U_¨§%ÂÍÆŪ âĸŊą†Ũ–8d2{"ˆ@ˆ.ëHoBÛ,`=(9*?uČčipŽT.IôÅJîYB3mÚ)’EæųCjĨ3y1ģ­W#cĮ>”ŦĖŅņÆ=h4s0bĨÛ§6ķ<ÜúĶ" šČ‘ÅI°œT’â,(ų…A,žcg”u9éÖ­ĒĒ“’OÍeĘė.‹gä#ô¤3 6§šļvŠĮ¸“ĪœĘĢ€8–÷r¤ RĪ”ŽâĸrčžYĪQéYMXw¸ÉnTžÕPsJ\÷Ô2[œF)ļ.ɨqq”;@ĻnmŖ*OŊE8QžjI"šߟúĐ!^&e°>•ZH÷>ĐŲĮjŗŲålžôß'’1ši‰ęW‹÷LW/ō§]ĢIl<Ą’N em՘zöž[Ún!wFiÜfÃF2چšv ÛĒOm=¤ 1it#šģÛ,cË?/~jYe`šÁ>˜ĨĖîmĖfÍjōĀXDPˇņÕĮˌŗ˛ą­wˇ2M-žĖcŪ¸‰ā"핉ûÆļ¤īs:›ŖVßNf…Yq´ÕĻdĩaQ‘Ö›dŽ`RŒrCRÎŦWsMKÜŅHjĘĨ˛ņÚŠČĘ$ÎãøQ)pHäj„áˆĀ"šAĖÉā¸ķđ ZYc‹æŨYQŖ|Ã$sVŌ \ÆE ¤ËŠqۃÍXWhCY/ĒJė"ŸŧJãÖ§•› ģJ˜”zԂiÖæ<}ŨĀqUm\Û ' =;ÔÆđyņ\|Ã<Ô;ĘįĢÚ(û<~āUœãåRɡ[FŲĢ#=hŽĮ<ˇäiG IÎh^ŧĶ)ÁĨĮÍģ4§“ũ(YŽ2:Ч֐ļ8›œs@ĮãqĻsŠzšF\s@ äžh‚)FG4ēĐJ…ĀÕ9ĪZv Öj@IŠ)žhĸ€)Æã֕[=Š 'ĩ9xχ^”ŨŽ­×"ž Æ{Ķ/'švĐĶģ>Ô§§^h wĨĨ#æ  tĻ͚qãœqHËčhč=hëČČĨâ‘I#Ž”fæ”;ķN N Zđ~´WŊ qÍŽ(SĪ&Œ÷ CF29ŽOYv Āõ"ēÖŽÄ›ZëF6LÆTdĐR"DÚįcę ī„wæ>ÕVâëĪxâļl#u&Ąšˇˇļį?vî#\\\I¸nažƒĩ Ŗ9ŊĀÍ>ÚėĮl{Õ=ōÉ1 núÔĩÔW.Ŗ!$’ĩhŲęÉm#°Ŧ]˛ čiĻEŒFæô¤Üģ¨ß‰˜˛Š°Íg­ÜŅcl…G\fœĪŊIíTåäã‘T˜›6-uq:#ˇ+ČĪzڝr v5ÅÃ'—tŒ6šé^ū;xŒ †$tĒûš>h‰ Ŗ­QŸYIŸ›žk]rá˜ėF{ĸō4Î]— zí šĢ.Žû˜˛î~Ū•šësy!p~lĶÂą  œl‡,­ķ7j›Ø[ŒŽŌ4'ÍštąĒUi]ÉÁ“ÖŖi7&NIŠģeyĮ’ĒsŪ‡ Œ(9j8nmnĩ"”di2sI+‰ō ŦwSK'uEķWĨ!Ā;˜}Íd˛2F1œ“Í29zƒúÔ.wtĻŽŒ“¸Õ"Yd˜dQ˜†}qMkH@F3īRãpĮ.FCrh¸ UPqŗ‘€éH<ˇ°Ã ĨhđŊI¤ ˛@C=)ßA‰ōŖyųđÕ'ĩG”ŗ#œÕö ėZ˛9JIÛ`h„ėDĀ8âŦZŨ”÷ģĐ †L…û”#]œæĐöcå\ 8āôėjŠĶ~öÍÄzˇį%ŋ‡Ĩ;sn*¯Áæ’ml;.Ļp–æĀܒ˛tæ’H^â<žP“Å]olĒįoԘ[ĖØÕsŠÖ,ØFÖöâ'|ŽĸŦlę6õč‘G$štŽ Ēîę:šË­Á”į|Õî ķO¸Xgh jRQŗ´sŒNąĶŪöY°ÕqÔ ÉíŖ6åŖâoįÛÃå3ūäœū5umŧ†xqœf-ēĖ ęš­ ­rĖaæ˛Ą?{?J’ãTˇ†! o0ƒš-”ÅĻ:Ļ “Õ—>žī€įŠ ÖąŗZŨŽųĨb \ä U׸œŠ!?j+tˇM§ī7OZ—÷žx]ŸģīT"ƒų¯ÉB 9ÅhŲZģ˜a4†4 ĘIįĄ­4ûƒíHYČōĘ.TŽkhd{ŋ›}kĄ|) sëTXƒv (öĄ)jšj 8ã¨\ū5ËXY5ÍÁP…€Ĩwš€ fėĀ’GĨs–Ŧl ûD]_+Џģ"dĩ-ø`H°Īö5´° qõ5GÃXōnĢÉÅkËæ"íΊ“ÔihRpQÂ&2:ãŊMĒ7o^h‚?Ū–<ŸSR´[XœņŒŌšHŒ—œŖĩ91ģ-Ūĸ–B#ų2(‹æ^yɤĩ¸ž„mĮ&Ļ„ŧīT×~Ėū•r' ;Ōe!(vãŠRHÛõĻ ¤ũidĪ=}hNEidČõīR™p„žiÅ9v1Î*Dmí¸{拊ÃTíģƔ•ÚT ŽidUb čEBû1ãéM!%ĻvP>•‡4_’Ũ}+ĻHĸOB`Ü îĘr3*âDˆĩĩ1éņĀĪŊ‹d}+™ŗÅŲō‡']Nĩ ˜#”ŦŊöâägo5q؉nY´´hÆéę I­Û˜-m°{qZ̓%ĖkŽ1Ō™âAöKbX +ę;hSŠēUģ’I-ŌĩĶFÅē˧"ˆ"ŦmŽ6œÖåē‡ˆČô¨“-#žÄqąH9ëLX’RA d÷­û›[w„ˆ íŠĪr+€}é\|ĨUˇHāCŦŪa”ŧf´å´eBPįŊB°\ÚĘģsÁ§tM™KĘ#rsëŠŗ)0Ā@ÉQÍ9m#Œ—Č:Ukû™D[vƒžôÅ7ĻpŊO @Œ“‘éYîÎė§#ŠšnîčA#ž´9BŽ ĸ)cÃgëNrpāRÚx ´AÔeFGJ…ã ¤‘œŌyŠdÎū=)Ūrķdī@yEB’M=äōöœĨIæƒUÁĪ=)Kš ņL33ÅČĮUfˇp›v“š“{1ÆIĢ)rvė‘zwŠZ¨­aķYC8 k:Ie›÷ĮĪ8íV/m%žttBˊlV$mĶykŒ•¨j sæ&Ōę-ׯĩ^ũÅšũÔfR}GĮY$;€ íYl2(bmކ‹šŒč4°\Š4Ėņ‘KĖ^CcCĖ|Õ¨™]za‡Pj%H…Yn/wĸáaWŗœf¤!] ‘P#`ģIÅLە°§ƒJāW…Փ2,ƒÚĸ–-éžŦŧÔQ vŠî4Ëfo8ā \fĄ ų:ũęëö•”tW-Ēē““œZŅŨ“3VÅZ)Æ3VˆĘāō*•“ŗÛ cŪŽ¤‚3’š4ĨšIŒkA / šĘ1¸é×5Ž÷lČᱎŪՔŌēČHāvH¤Ņ‘Ę­X‰š0¤ļSŖŪŲf>Ԓn| ´ØîX7JŅÜļzT3]#0\ `FV\TëŨ’›‰´ FÄëģ ĨHŦáIR¸ÅK !9ü1Ōφ1ņ3ŽNáQ&4zĨ‡üzD?ŲtUlˆ6čqŽ*Ã6NL>DˇĮĩ.3ɤíGQTH„SÜvŖ{Đ˜æ›Ū…94¸Æhŧö¤$š^…ų}(”ģAåW§\ԑŒąÚâLœ`õĄ‚#%%NzšEŒã ƒŊJUÛb÷§nXãÆ'“HZÆå“ia´ô§āŗc°§Ŧci ^E1ØĒ‚Ü@Čdv-†n*6'ŪĨáĀSMōĪ€sČÄ*1øĮ"’ķš>õ Ú¤ásšPŦ¤0 ܝۿ–wQŌ‚H?!8i˛'›Ōę&(9@ĎFEHIŸ¯ŨĒ!OSHŽĮ‚؝‰%‘öBĖ[n;zÔ6÷÷VÅžĘÜ9ĻŨ ŦjÄztæÕä jš,iĮAŊHėe{Ũé<ÛG'5^áäü¸ Kƒ÷¨…ü¸6ŖŽ+GNą7ÜŒÕą"Õ­Œ­bžs1ģŠtpÅʆlzķWf•<¨É#âĢà ˆ§>ŧÕ-ŠąXJ†`}qÅZ!T–RIÅ2=Ŧîyį51*TųS äÄr!'njāÚČrOjĘŊž=ûJąaŌ–ĖĖĖŅŗą5IčK,áždaė1VĩØŋâ[<ķŒTđ[~ö2@ĮŊYÔļÉj¯CųTļ4Šv6 ØC—ųēŠŅ÷ <ûUQûģuN=jESˇp'Ŋ&RÜ&wØÁsžĩH;ē’~_zĐÚ]I# ëUŅáđ¤Q\<§ ŧŸaRĮ†Á ŠĄÄŁÃPn¤ `ŠëL’ÄļĀ"“ķ Ģ5ŦN‡ƒÚŦ}ĄLdĘš„8 ļ3HzÅDYĢËb’0AâĩÄjƒŠŠ§ĄĨqXįSqpBšt´’Į隴ņ,S‘ģåėMC;G&8ĀéŸZ¤ÉhŠ0āŠ{[*Ą*ŲÉéJĒ".I>ĩvĐĀjíÜGQķSՑĪŪE1!ÚĄ—95Jv’ #­!ÜԖį˅°yū*‚E ōÍÎ*ŦŪmŌžaV^áNBEc9tC°ŽénŲ=ûîV_” {Ô.Žä3ØĻÉ-ŌĻČWšdEƒ’r)`œ¨â’9XõŠáIÎi rí4)Rüah$ œ‘ëJšfUr@É5"Í†ëYâlČ1ôП;7 gëE‚åų™pÕ$aÁ ÷HČ5™†§cO•<Ô ÍÍ X ÍČbp7­rēŖ‡Ŋp8ÁފC& įšį5ą}'9Éë[RܙltvZļ—Ēw)eą‘PnëéWt‰– .%ęĀRĖæáōãhöŦœÍ,Œs\)Áģ"žâA܊†BčŲ85ĸļ#ĀëÍ<ÛķtĢ+0ˁĮjœ•ŽÂ}M ŽådļÉËf­%ŗV\€*VÚ:œ Q3ø< –ŲWjÅ$÷¨ųIãˇĖ95,p=Îzļēl‰"3FED˜Ņčyû*}*psPY [§ŌŦŒƒÍT>f÷'š^ØĄÆiéÅPƒoĨ)␹í@8ëրÅ ȧƒš€Ŋ qJM9”ô 9ĻžZœxĻŽhqÍ5˛M+dŠ$RæŠv(ŖPĐĪO˜üÂĨ\üTcƒRb˜ m§Ŋ9ËH8ę3OČÅ1 æÅâ€ŧS€Ā }Ū”.OZ7 S”öÅ1 }8¤f§wN)zœb€Í•Å)ņĻõ<š;°=释@Ø4)Ā bž™4œRž)ČÅį4œ1§pĒ)Ŗ€(ÁøGöĢ|ŊTs]ã`Ž+„ņ'X*zm3ؤaŦL✐ϐžÜ`z֙oŨíP2xŦŲap䓎՜]Į"Fœâ˜¯'`?Ũē˛0ؤ۔ŖÁŦÅ„äą ‚1NâąX)#“’xéN’ `zŗå Ū§(Ž0í“íK˜v1Ú=ģ9°§Â[Ļ1Íi\YŦˆLcčjŠ!‚;gwĨR•Éĩ…›Ŗ|ŧãķ¨!ßæxÍX‘šEãŠ#Î#æéښņB_p'4í›NŌŅŪŦDlŠdŋ3)ÆsÔT\ĸĢ „‘øb—ÍÅ`9M^ģŧŗ Š–øp0sÅd;ääbŠ+‰čX,ļzšüģc\÷ĒË)fÁvŠ"ųĨ˜į°Ŋ;Ɋ̐2)ŽĀ7Ō™ 1Ά įšŽRK’sÍÉE9ËOqN H'š¤¤oŖßŊNļĮ<ĐĐ\˜`KdV¤ļ6éŠ0}Ķ:ä-cĢe°ŧ t4Ōä˛HIíEƒaĨöŋ$ß< -Ī>Ļ‘ W Š4ÖSŋʆÃa܆$ļjVt mīLŠ?-2ÄGJäÜZ“$i>Pģ˙J‰›ųŗŌ˜įk|´3–A=(°îgĄôĢ1Fî*IĒØāT›‚¨ˆöĄŒšH€ocÍ5[jŊG­&~`¤įŌ‘đ„rãR–F¸æ‚QšíQŧ™É^qL%°āu§`l|švāSp†>q‘My8ÉÅ8öžW$ô dk ņõ Á…Č ĨXxŊ)Ĩr¸fü(!ošr>lw§ !¯>ĩ*H#MĒ1šÉۖ4\a)>TžõŸk"´ā(ÆMhŊ@Î;Ua§ gg`z Ĩą/rmBPļÛˇd÷Åd[šā˛GJĶē‹ũ*F=ũ*ēŽd–4ĶЖĩ6  ˆ…ŽZŸu$rD@PjŸÍ¸|ß(ôĻ8gå_=3HĸČ\@ Î; pi5O­F¯ˇ Ŧīš<ЇÉ=…+•˜ē•${P°–õëUž›vö§¤ėčRŖ4‹L•ŖxĒÍk÷ļ=ÍJ_9$@āž•Jk—jļ) dl— ÷ąˇÕ e‡'U—ĸšuo˜zU¯ŧ8ÉŪŗŅH?tœ÷­ Hä1Ø?SRĘLl°€Srõ Z[´x*Ļ*yfC”äq"ށ˛ėđØŲM–ÉŖÎAΰëZO埛Š^án(5Bš“™#>_įOōŨxa•ô­3ĐpÜÕkļÂrh.åü eP~QČ–÷Bí7ˇ< ÷­Ūc•'ŌŠOlÁūRÁŽ ØĢ$R|ũÅ $ŒÚĢ’,š&­)P8ÍD…¸|ÛIÍ(#Ą9Ąˆ8läzRíSߚ€6[úTĒDC,AŌĄą8aŠf[ց—…„ĶÃįÂŖkUK„xdƒiĮ"ŽYŪOj¤) §œzTw—Ģ{ -¤¯p+[áŸuO(\˜…Í2Nâ„Ôė >Ɔ"Ŧ° †Ī|ƒS+)PŖ¨ĻÆ’ģqNX°Ā×Ŋ5•‘Æ:įī#axāžõÕĮ üێOjæ5\‹ĻĪ<֔ØĨĄŅØqa'n ^hoÎŗt‰÷Ų.1Å\܅‹XĪsDôÁKcŸ­VšŒDwāzUõ(xāäU4Éw ašTtã¸0ōcÆKHĄ!Ûķ/įY—Rƒōą 1Ö´%uˇˇWL–=[DĻLņ É5ã#=>Ūö)#ÎÖî gŊđ’ā§QۚclØŗēaŒy­I'ia•Š‚{Ö ‡ xÅZ¸—%Ė*$Ž4ĪFŗâÕ9ã­N\îÆŪ* ¤c?Â*Č\ÕCáB{€ĮLRŊKŒ´œîįĨP…cĮŪŊi@ĮJJqŠD!š"˜ōōzŌlšRĒE(ĀZ;šhšwéí3Ŋ;ŊŠAÁ怃ŠLķۜ¤ķAë@ ‘Ū“ÔüPayä× â’cÕō;¨ŽôôįŠáüNĒڨʓ…ÅLļbÁģnâųNI /ÖĄųŅūQĮŠĻI$ĪŽƒViãĨšštM!*Ŋ– Tdô=ę$0 n=ęÉuaČ#éD˜!ŒÄž[Ú”3g…ĪĨTü¸;Ŋé0ĘęVdšeB úU]ž3RHá˜đI۝Ė߅ZV%–å6Ãoī qëPŦ Ú:Žõ_xĨøJ‡ĩ KķÉÍR3æäāôŠbbģ[iČ5¨ÎĪ~jōĄĸæL~ƒŌ¨Dæ[ËĮyœSæ9É­, ­vc—jჟjMękäČÅHŠwŖå÷Š6#Ž BîB“ģŠWthߍ¤š8â¯A ÜŨûqË?“cx-īÕÂîĀā7Bjõæš{xæ&.1ü+ÆiØ.‰îĄ†ÖS ,Ŗ1SʇĀņŪ™Ô’s“ŪĸrÂAÜS`b•e;¤ų‰ė 00č5bP.ÕÁĮzˆ&9={ŅpØ]Ŗ Íې…Ī8Ĩr9<į4Æf`AP9æ„Ęī\g“äyɍnX ž•&ŨĘ9ÆęC%—p Įw™fÜiʧf ČĻ´›X.=Mlnė 3OĀ2I4Æ!É*:QģjąaÅ;rX%+šUyqŠ’XeąTĶvOʧŊEg¨A§ąē™ „đŠj#ŦÉĒjNō&G éTĸ÷7BkŲŽ.cY'œƒ!AUsiá‹“QĮší&v$䚹ŗMc¨ŽriˇmÅk“„uŽ5#oæ­Ų[ ŠNöĀ_ÖĢÍ }ƒ9Ú0El[Z,6hBīķrj#Ģ5ˆ˛8\/uǞƒ#$TŽüąÆqM,$‡`\fļNÖq+IéÆ ĢŒ ŒĨH„9cØT3ƒ´/ãL *ųa– ÚC×éUD-ÄŸ›ĩ^Â6œô¤r#o‹ņyDہĘúÕØˇ0n;dbĄhä/…N{拁(•™s€V‹g-!ŒvĒĪ…9aOĶöųŒIÎ=hφW€0OLÔ ä1;ĒŌ4?Ä Žf‰%S;…!܂9ˆpĄ3ëRŧ€Š$€j´Ōŧl|ĄÉëULÎp¤;☋ŠËŋs ŨĒO0)ĘņŸzŖ“ƒĩąžŲĢ6īŊ9œc4:€K"Ĩ@^*¸ƒÍ:7d-“ŸJRÃJ™ČûT‰#;Ž*¨BWîōMIč¤$ļGĨ.äą "…=ķšcįbšĘ˜žŧ Å~ 8öĻ1lĢôÍ4‰2Ģß5:ļŲ0Ā0†ĘŪ[œ–?LSäŗÆvü ^xã’5Âã]Ņ‚Åk‹}œúĶ"Ų„tę*fĘ'9ǰÉģ‘Į8ωzˆNĢK :ã"­ŦŠ0’j‘ßæčEĐ¯ä8RõāûՈPB2F_ৎ~4eˇ˒GÉ@\0ųŖÁÍJO ÔÕaĀÆæ F('­IH$ ä{ŠĪ—åvܙāŠĶ Ēáģ5 FĒpŧsƒŪšch˛,T¨ĀĒėy Ļ+VDVČ1ëT.` ûc=ęŽKDpŪÉė@õ­8/X˰ÛéŠČHųeLš|EՊ¸9Î1I†Ļš—ˇŗH‹ĩŽ[iôĒŅ7ĪŽ@¤;†;ũjFO+G4G!€sH¨BĀf¤„Æ Įå@ė(ģŸ$}jŧÁĨ3VöFįäæœP§ dũ)…Œą؁99Š%‰HÚũ+GËÜ*7Š{•nîš,LRÜ,e]’ÂDDwŦ¸ÕÉ+‚_==kWKˇķ­d.H;‰Á§‰-mYŲÆéGŨ¨i‰Žæo–Qļ°#ڜĮ"œĶų˛—đz “*AĮCPÄTfĮ(3“M3à œÄPxĻ,jFæ\ĐŅŒcŊA$ g&§åĀÅA$dļqƒM ’Ff €ÄUą˛ ȏNõZ7Æ;šģŒsÁ=Ēd¤Uäļ8œNX$ęŽēį Õv`Xų÷ĄjčäRNyĪĨršĨŌ›ųĄÅnģē’お㯠=äŒAÉ5ĩër$ÎĢNM°+!;HÉ­ˆWv;Vn‰ƒĻŖp{V‹L~P+îií¤†0ҌŸjˆ˙Ęē‘Xr_iˎ+4 ēƒąÍT<Ée[ŠÖK‚āmæ­]Ü,Öņųr}ŅČŦËÖ-zÛHŸtDk^ĨFqZÛbSķ++bLĐUxŽ%Č ÁĪzÕ{4ūĘķZOņU}*Û͛…”ĶV¸íŠ'ÛŽ>ÍÛĖĨ‚ũæxVFųƒ S5dH•¨úUH$ņ1čXTŲ45šîļ$}‚,õÚ9̏5WO?čzmhk(ė‹{‰ŒrM?ƒßŠani ĀÍP‡Žš¸&œ~ö JPGĨ(é@„¤šVcڐ‚Āƒ@ V'ĨķĘæž k  Ö8ãĨ?88ϰRÜĐgŊE;Ë_z(=‰`Tˆ~\ž´ƒ”UîŲÍ9N7?…;åaŠįšČÅ8„­wp{R…ĮJĻ{RƒLBāvŖ‚@4 gšC×Ĩ8€GZ@}čŠBÁGæbqŠ›…Šîe/‰ŽÃŌžĒÁrOcLÜūfp ÅĖ]ˆÎ¨6 iršÜ}j „`O­Oį,lQF{gŠĨōYÂã×ŊŖFå˛äzSŒgfÜ{ģö22ę21ÔtĻ*0L1æŸ0XĻ7!nĩŦ,­mQ..dʰĘĒžMP1 0E#—v[Ķ4īqlXvŽBōĸ•ŒŒjŖyjŒ=FEJɰrhŽ7y  ģ!@ Č8ĸB#sˇž*Ų*>Cš‰c,_x =iķ Ģ<ü6ōHúTąH7ãŠÎsI,nbšNƜˆš§kNĖėʤãŌ¤*ģąÜÕ|ŊÎ}ęF›!AĮÖĄĸĸÉxP˜=ŗĮ"ĸ•÷)aɐ3 í 'ËFéV”IéUœ$€}ķRFĨÔ| ¤Įq_zåGīQ’ŠĪj|‘˛ˇĖsíLÛĩAĄØ „hë×4čm侕mâ9fo›éPģm<ķíZŅ2čēcNÃ72ŽGû"†„Ô­­"’(#sBŧˇŠŦ}57]ŨHÃ=°*}6I.ÖK†'ŠÚt/ÍĮŪcÍ Ų4ę4/—a$mRsÍM` ´AŋˇsSĖ‘ã r}*Ôz|Ķځ8P:Ôs] -t+ZĀ$ē‰ņģ­uŽŠx`XÚ]Ę\DX3Õģæ8ĮÍëWK[s*ę6vÚ Z#`˸đ;z֜ ŗî?JiCŒúք”’7g?.{ԞR(ųÛđõ§NÍ’OZ>g >nôĀa‰P—S€†, ƒNDÎwã-ڕTÄĨF~´ 0 à ¤uíHČųËcŌ™$Š###'ŊVķYH#'úŅ`š`”D-ŒûÔ6øPĖ@Éũiŗ32: ‰—?xsEė \Å&tĀUe§Å#ČŦĖ ZL¤’OáPyAX‚:Õ\V BˇŊOæ¤ąÎ=*W€?2ûS„e†UHæ"âIŧ šuĻ“ŋpĨD¯´Äcļ)K†RŅžž”4s˜›UôēI—`@Ļąˇ¸_˜nĪ Š#•~ZCL×ÚAĶŌŦ, ņØ9íY&ęM„u5oNš"B$`WКŲZōŌH‰1'°ÎŨ@ÂBX0a]ū†]§Ĩg]ډåTö44Ų7šį‚bnJ†JļË"Žwd÷kQĐūĖōN‡9įéYPJōĖ›ãëRŅ% įabįRŖå@)Mą‚wÅ E=Ž*4ÖÜyíNxō;Pŋ"r=(w^šã§ƒĄ…ÎxŠØų`âVLg „#ŠĨ¸lC-Ų ĩ]gpÛ00Õ4Pˇ$RK >•jÄę' °´×/~ŋé˛ Ũ뎡ÃiSÅd]č\ęĄÂ?9­)É'¨š-ø}Œš~ĀrTœÖ¨mŲM§Ž+;MĶæŌÚHŨ Ō´@`sYÍktRĶBA1œÕUŒ5ķŠôĢŽÛ1Î+9šũķéQŗ*ņ6ęHÍ>ņGžŠˇ™:â:Չ“7 ;ņ[_boSfM4㊏C2ŦNĀ coSeŒJŦ)–‘hGLž=ę/î—ÔÄÕ]đ}ŠąĢ–PūŖˇqų—¤NqVž.h×wcQÜ#ĨÜŪaĀ$œĐãaÜd„'v==ĒaŒģ`’:šžŌÜ^ĘŅŠ-Ž[ßԟ{egkyŸ~é4(ô™RŨ‰ļk†pˆ={Ņ]ęš9Ē7×}"ˆ•–ĀĀ隚ÚVŽ 3ĮNjĨ#DHy#žÕEŸ|ÛTgš€ČĖŲÅ_ŗ•"Y ĻėŽÖĻÖ$„G~6v÷Ǎ>bK {ƒ’3Ԙō,131ÁôõĒō$–O,…ˆ6]ˆąoũšÉIŧ˛äŸJŸBŗyæ7’øEKĢyrˇ“€Î%Ŋ*’ŗĒ(Ú´…LO ČŌI“ŽiKF " cĩ5Ô¨ĀÆOQRƇšYžxÎ;Ņ€d7-ŒTö ū•$!–NW¯ze\”äcëP)Ũ+3@ã9Rß/'Úώŗy¤XŖL;w5ZâŲYĢH×qc'=ëâōKûËĻgÄj„(í[Ú­Äp˜ôËy21™õŽmc o‚žÅi3cC˙xQĀcÍIĒNö–¤Ā>f88Ũ(§ÄGEK*<ΰ…ŪIâ˛Ë[iÖ΍MĮuNŠa€Ŗ ŠajļP ˙)îjĖĶ ÷\“ŪŽ+ŠiXM¸Pš¤‘IbįŠ‚Øš”–5bGãiį5bšU›yÚ qÔúR+˜ĪĖGĩC$Ą\āãĩ:,œ]ÕDrį?(aڙųI-´úTÎîemž‚Ēš$8ŨĐĐ “ÍBáTįéRáŗŌŠ1$‚Œ=ņRųÛWl€’{ĐHceŒ{Š‹oû_AëS…R #č* €ß($-=„`†Î1NYc †#5ZY FN3L„Ģ˒})‹rōÜ BņMY˜ÆGŠāSp @?J„ˆāp) ~ ‚IE œIAM2…É iĨ”€ĮԘ‰ĸ+,„1Æj_1GɡûÕ 8ۏqC f$š´T"đj?3h#õ§*ą@¤HęŠŨ8敆‰$įi"]€îŽ•Z,*Ž9Šw=hÅ´*ĢבÅOü#õNŨ\ã‚@=ĒጒԊC ũãœˇ)ƒžON”Č#ųŽ8Ĩ2œRg—Ę$ņۚ€)fVôŠŧÁ’IöĸÂҟ-ˇsQEåĢ.9ˇ]ËÍYU%IĨfZFf3nČbŨiÅ!6Cpæ]EzŽE[‘™õUč=iâŲtƒ•ÍZŽŲ$œLĮNH"Õ]ŌÔc={TļN-ļOŊ>ōßĪ‹ËzRÃH|ŖĮ¨ēå°ú•,ÄW7.įĒœÕ‚‚kÁĩC ô§Eh-!‘—ælšn×ˇ$ā R{˛ĸzžž6ÚF¸ãh̏ã­VĶ@k(Ī_—­['SøPå¸ ãž) į4ėāDlõĒķšBp@õ§āi?ˆqԁ ŠR9Í)8āĶ恏>¸ r¤ŠXž3Å<.Á ŒˇŌ—§œSŪÅ)į֒2@ÁëN#žiڐ ĪĩŪ}¨ĸãąKpĪŖžsÍ2sšUU($Ž´ŌŸJyāP08  ú攏˜RãŊĶņÅ4‘ši4  ƒ@Ĩ ĮLŌgŒâ…#Ō€áą@ûÔĨrAôĨNæShâÛ¸įqÆE;ˆ‡bF;ZcHōĀĸ` 9t§FԁëHcŅÕp\n#Ō›.Z6ōÆwŠb* MŖւc?ģЈÎQÃ0'Ô zž¤Û×ĨLx,̌ĘbšcĀė(Ł :ŽHLŠH8nÔ*°8w5cfŌ§ޏ  vņŗ˙­R0{ԛ1&šéVDlŦÍģ9ėi6ÆŽ$uÁ k æ’L3ô&ã#tĘÔ˛ØÎŌ(¨S—bxö¨ˇČǍ$÷ĢĻܸĀSŪ§ŽÚ0Wpč¸ėPBû°3’:bŽ[ĄU!f̐Û"ũÕÉĪz•Sl„đ1Jā•€FFߗŽjPQœy5ž=M:=°ÄŒŌ- ¸sÍFXǚŒÔΠŽŒTlvœ.*@Ë$“U‹æeĪEŠFįU#ąäT°(2 ũ8éLCY îÆ{U”q°Ģpø¨äÚÄqœR+ÔkoozpA'Ĩ+‘OŲ‘@m$pqš2¤ōŊO…sÅW’P€ķdĶZcƒ•éK(lNÔéY°Ž;S6Hö¨ã4€s1e ŒĶ>b[Ĩ.ŌXäãŪ•ĨÄaE2Ŧ@ŋĨ9’I?VÜÄįÕ!RūT†)Čā öŖ–nŧTk)éÎ¤ōÁū,ôĄ…ÆČ7ch!‡SUĻ ƒƒøš´ŽÆC6ãŊEr7Æ@ëM ™ō|„g'ŊMyÄáŋ:‚Db§-Il6J9Č<`Sjä …Âã§SIŧ2ŸJ‰Üå†8ôÍ"°ÆOĻÃ%WĻiŞ ⨒æB†œ1۞)X|ÅÁå‘ķuĢVjž? Į‘v‘'’Ũō ÁíT„ŲŌŗĻx==kžŧ…u+‰¤wz+¨nã Ō'ŠŠí­-!,É0f=ŗTMûœ%ôkĻJĘŖ{¯ Öaŋš‘ƒŗ'ĨwúĻ›jáĨ‡r+’ ĶܙŒBKE¸Zåˆâg„ëۜ FqëNÄН˛Æcö5^RCüŲ ô5‘/Aō&ãÜÔŠā‚%9ÉãëV‘“8<ÔČhŽs“ÆhV\ō*ú¤@ũŪ U–Ürʸ“DʸÜ1ŸjXʕ ŒTDįôĄf&Ŧ:–ĸ*ņ•Ü3Q˛…~(@÷¯B*Và Ųü*naņĮAQ‘“)ЎieFA¨ƒ¤M!1ŌũĀŠá`Āŧ Ļ_dšž6ųHÚ[$éM ‡֘ĨĀ <Œw¨(˜H õÅ"mp6úÔ\ļĩ6)p5&´Üõ]-ŋĐbíōÕėwĒo:|gũ‘WO*1‘NŸÂŠ–áƒ“AQi4ėÖŦ-ކ“9¤ ÎiÃ3@ÅSž1Me­<)¤gŊ!Lt4¤m.sŠCķ Px¤ĶQŽH4ū;@´Á’rių⎠įڊv(  ņOčzŌ nÁĨČôĒĨ°sØP{Ō˜Å*‘ž‚€ Î)w‘IŸšŸŽ9 ã#Ū”.4 `ņųĶ”ëLBŒt¤Ā_­0Š œņRphŨ‘Šq֔(Å'á@:ĶÎ:RqŠSŌ€):Ōî=1NƁ cš^i9ɤų…[ŒW ã4ŨyRJ×pĮ8Ž#Æ2„ŊŒq÷sJ[vr‹!Tō [‚F„üŧĪ’bH{œTÂBp8ãŊgvt{2kŠĘĄQ´ąî+(ŲQQ˜ˇ¯ŊZLî1ąs@`Ā‘øÔ[ļž9ãšYîwsÍUŠ-Ā|§5ĄŽ9'ˇB" 9ĀÅ;Ú¸jĪŲĀnĪ4-¸ – ԊšÕäc4A0zĶŲhĀɨĖG;›Ĩ2^ŖČųx\})c'<ļ…āūTæ 7Ž!=zŌ4hžõ\įö$Ž” ‘€ĮŪÁϜ˙z ‘ąƒžE019$Đ"Gsŗ¨Æ´ķĀō*-ÅI=€­°z÷ŠĒŨzÔ9 ƒšv@\ úĶ :qĪÖ h؈įĢ'™5ōHQH ÁEDŒ$ĸÁ'šdŠ…Ā9Į­2HUđA85>æ'̜) GåRŦģS'&€%VcŽôŒTzä~TžbļHLU§ĘĻwdúS@ČҤä2äRÆČį÷aG5 'ĘĖqz’Ö0ŋ1\ã¸Ē ļÖāĻâĮ>‚Ģy*N2@Ģ3;Ɯv¨c –æ¤cŅĢnÆU•BšōĮ5<ęåpĢ…nõ”"”déÜQ`+ųeúą RH6ĮƒĮŊ5ģƒŸZt›eÉ$;V-ģ•ĸ+īE\‚rjš§æęäm=ęąER Oj}Ŋā´qš1ęjãŠ,écĩ 6æ<{͝¯á°Œc‚cÜę۔21ųĨĖS@Đʋ3ãjˇĸƒ¨_˙i^ŗŠũÚÔQHĻ]¤ cŊHŠ]3 ŒyQ֝söF”}”aŗXļ;hDņ–ÎŌ2=Ē5coŊR$Ÿ1\~4Év—ÜOÍH’@ۀ ÄgŌ•‘Į*w&=jķ7“œŽÔ‹tāíŊ>Q\ģ€@Üš5 Œ‡* {ÔąŨ'ƒšŽyŽš¤Ž2XķÚ@aHā̆Š­+Če#­'Úā6E; äԐã;‡ŌĢ €$l¤;'-DUJ¤„Įų€Œb¤„€ ¨ u_Ξ7Ĩ6$\F'¯Jqb­Cs´’}ęDÉY–9ƒc!ąëHˆ2§G4×SģŪĨIÕÆü{Pü†ˇ=_L!tøÉîĸŽd5SŌ€m:/÷E\ÁŒR§đĸ帄QדKœvĸŦ‘0)Ōž´˜ÁČāĐ1øI€xÍĨ&sš/ĩdqA<Û@##ĶTœĶē“š1Å‚5Ix"˜WœƒH 3E3íEQĮ9Í;=i:ÅĻ"A֐c8“Ą§Ž0i€§/<šB~\ŌņŽ´U ŒS”āāSPeyĨ+Ö˜ëÍ(ëH×4 d性zæ9íK´dNČÎŪ(™Í9O„cĩŽ´R 9„SŊŠ{uĻĮSOŠkR‚p3HŒđ+Īüp™Ô`ÁĪÉŌŊž+‡ņŒ`ŪDØū™ģ#j ķ8ą2œzŗ4a"QŒš&\MLëĐž•Îë"¨į$ TĒ‹ÆūEIąˇ`€E.02Ōj[††ėŽč L"†_­$a™IltÅ<ČyĀ÷ Á0ÄB6 tÍeÍ.%욎¨ČAPŧj¯ĢÜ1rpŖÖ­hŽMŽËļdĩ¸üęŠ4P`žĩ  ŒĪĸ”’Ŗ!ŗŸZ‡ŠkAĶ|ęgņ¨€ä Ÿzy rsŸja–Į'š2A–R­Š#†Ūf (Āŋ­( ¸cÁíJ¯ÉČöĻ™-K˛Ø míU%ÎãږwW NāųĻĢ1ˇ5¤^†N"›}ûAõÅM¨„ÜƒØĶba•įŋzą"¸8ltĻŲ*$28ŽÅÚ[€@ĒŌĀĨÍķŽšŠe“œķīU$geÉūuQbq2才Ã1Č_JyČĀQ×ÖŽL`œšOŨ)ųԀG­nG)MŖb§ą5,Í/ģ>ĩn(Ôîl¸īMŽPŽär¸éG0šD[DbY׃Ṳ̄0ÚĖŌ Øē×)€;Vd°ŧÎYO˚^ĸ~EŸíā"ŽŊĢ^ËŽ‘ۑ–>•‹ąLx­HccĩbČ=ÎyŦä×BãÔ§qúsĮ’„íS[:â˙bøab›Í“īUŨ&Ę9.Œ’`G<ÕO\ŽĨAĖĢüCֈĘí6DŖŅ6œĻkœ6xæēaõwAČ5—ĄŲŸĩHĪÆ8އė[O¨īUVZ™B:晍]öÍtIÆOĪ|Ô0YĨŊĶČiją÷5—3Đj6‰˜ž~lpiŒDg9T­æ0žĸŠČ™!T’3ÚĄ ž9¤ŪJ“îkJ=AÄaÂp9Ŧõ‰Œ túUëH€BO>ĩIØiÃ1ŧ$ Įrjč]°a{Je´*€đĪj˛c ƒ+Nk•cTxä]ųĩMoÔîĢ“ĸLĨ$ų_ˇz Ņ5¸ÜĮvN? ĸI‰8'8Ũ’:cšrē€I-5ÚˆėcøĐg,r˜€Ę˙Z,Ŗå'ŧ–IÃüĨIčqMUbā1ČéˆqļcŖ;Ũ3Ԝac–ē|m—'ڟĀî#č) ˆŽÔÃŪ›&Ėí ĪCI3’H_—"‚TV9õÅ1ėåąĀ vĻ‘¤99šō… ķČ>”"„‰8MNn@ĮZCHJž”Gšå˛Đĩĩ‰pIãĨbŠoN:qÚ­B ŖäÎ}ęęYĢrp™íS‹XãčÃđ¤Ā­ĨzwŠ\ îjÆ"Ž?ģɍ؁ųâ˜„@[æÆ3ÅY‡ĐG­@d6ū4äpX˛ŒRF-ŧąâ•Xã;ĩtęi†L}áô¤2ߙ¸p0}j&r_o5‘p2y”Ĩˇ“ŽsۘRFwqčií'ĘsŠ­ķ xõĻ|ų'=h°QĐåHŌ28¨Wæa’8ŠÉélyP úš‡•aƒĀ*ԁIę*-ۘūī€!f,3ĐĶwg†Æ*bģ›'"˜W œSĄĐ|Ē9<ĶÚM¸'ŠnŅĀņéMß ƒH¤ÉˇĻŅŪ $‰x§Ļ94€œ‚HÍ0¸ä`œÔ„<ņÅFĘG;~´ņ÷4SģHíJ¨Ã#zQ"–Oz„;â'ŊL{ŗD0y đ*iî+´Tš÷ˇ=ķNeã֘Ž@"31ōæŦ*,iˇĨMURLÔS†ČÉÄ)L€ĒîYIã•(l/^Ŋę)ŧÉ#<÷ œvėbyéŠrĮ¸mūtˆ¸L3īRD“ŗd° ;PFÖ9ųJđ*ŗ+ˇÍÁĢwņ°mįšãÚĒTsÅe-U‘ސå2qéQ-ÜŌn)éZ°…ÉÁ5‰Ė22i'`!Šę@އ uĻųąÂæP§Š@ģËÍEååö7CUÍq”îĩ8 Ét ĻCp“Iō7=Å-Ū‘0,čģ€éЧŦá?{Ō‹'°4i‰Fqœ‚ŽKĨĖļ‹tvöŦt>q°>ĩĸˇ˜ŒË'ĻxŠjÄØŦ˙1Ļ=*1įúÔ­ū´Ŋ=*@wņŽ”6$…#ņ§>FhVäĄZ‘2ŠĘ‚J‘Š+.y¨•Td’(„ģf<ĢtĢ*š%HĪz{ŦČÍČāSÆjŲdČ9ĀĻųh[ŽũŠĻL›ˆ#8ĶĻCߜŒō*ģNw ƒåĻ“āŦ˛­5:‚yšŠ<œjŌeHāÔ˛„Ü8L|ƓĘręx;M=†éLŽ:UĨ@Ã?w5-Øi]ž—¤“ũŸûĸރÁĒ:JŸ°Dsü"´{ŅOáEËqcN"ƒ‘éIÍY"c šBiųČéI“š6šo|R’AŖ ž”ŒR1ÁŖ4zsHxšyû´Öõí@ÅP3Ū“øēĐ ¤ÁŨH (ŖŠ)@œLeŗŠOĮ4đØíLCvķOĀÍ'~iā`Đ 0;PīN`:Š6‚9ë@NœzqH1J)€‹Œtåf`Ō€ŧw4›NwPpOž3øP!˛8ëJŋwۚ1¸“ŌžĐŸZ9#ŒĐÃ4ĒØČé@8õ¤ÎO4uϐ3žhÄō+‹ņ“ē‡Œ‚ĩÚc‘Åqž1ŨÂ0~銞Æô>3•HÔžđO5& H‡pų{Tf@Žx§d–ŦŌF"F$’¸īJ‹”ĮŊBÎĀ:…T}jl2O5$pMDĖ'ĄÔ¤” 4ؤXæ$ Sôĩԍ;帕`"ĀPšÎZC0=)Ūb.æo”cFŦ:‘˛ŧc֘[$‚?c˸nlrx,!dV?uģP;¨bØžÉûĐ ņëR2ĒØã¸¨šQ6?Zb]¸ÜIĐÔ' ƒŒÜT ųŊW#Úĸq´ŋtžô!|į&‘@Î0AĨĀ'qOˆįpûŲīU{Ž |ļ >•)“q•eäS˜å>Q‘NäØcr[ŒŠŽT'9?J•ĨĮbĻ›éŽ0)Ļ&ˆŪ<Áxõ‚-įéëV!;°Ŗ ëNXņôĒæ&ɑ$|OZ…”ʎÜĐØÜrq@l| ņß5I’Ņ^@B‚ĢÅņG÷Oj˛Đî'Ĩ5§ŠsØMËK"Tu3ŦJjŨ’ķųąĐÖj,ģäĪû+SjsĮcj‹˙InĀôˇŅ)$ŽËžšåY}†CŸŧŲäše•ĶGĨ§˜ ĘN+G2ßĮģR{×A¸)PˇžzUÍY$a{ąÚ|L’Hã!ŽjܗEū\ŊĒ >ŗĮ¨ˆfb¸8r*ģģ%–ˇî;ö5Ë">c퍪‘–nN@*ÜúkŧҞîbÜæ‹XKSOO1\Û´MÚģm¤Ä€ŗyâ¨i–ŗE9f\ q[ 2¯'Ŋ4Don€áW˙¯Q4r1ĀwĢr.¸lcĩ@ō…QķdŸJHEe\Gzq•‹d@ĶąqQ)&I9=… …†Ū^Ād|ÜՈîEČôĒ"Ų Éœ(Ī­X`ÆŪ*ųɰ÷ĩâÉ5T2¤… üĀâš× nÆ1´qšŠŪFuķIËMZw%ĸ™÷n9ÅJąásøSÖE<õ8¨]Ø`gŽÂ¨By/ĪĪÆzS0ČwmüęO3lTfLœoÆ;,1˛IēEŠŠXą>ŋĨ?ËËgĪB*d1ėÁ_˜zP !ˇlir1M Fŋ.p{Ն2ąQî ĨdہLd įm;z”A$čۜpiU›-åŽTôŠūm€œ(P+ŖŖ`E=uV‘vF0ŲĒ_ģs‚OĨLŦŠFĀîh°4Z“Q˜0 “í&El3JĢ1ÜŊ7gŊWYÚ9vŸÂ?lq€AĮ­9.œ¯ÉëUDŠø-œžÕj(YÜcåw¤;–íŨ‰ÜÃƒŪ§vqÚ \GSšAģwå¤2_˜dõŠPí^ŧĶWiqĪŌ—rŽ™ĻĖ™SīMR0Fi›•x'Ĩ!m㎔pBIËc)䍡r~ĩ䁞Õ!dŽjJ¸ĨŽG"9\žĩ˜čšŨŠhbrHëŪ€%NHČĻáJi$€uĻî#‘œ _ŧ) @2@§†O<ÔLFŪ‡&€‚˛)Cõ¤ŦŲū)pé͐ē—Sā É9ėięSÆ*&|ļG"œ Æ WBƒČíUe}ː0]R0N3õĒrĸ+Ī'"1ąāF77ôĢ1õĀôĒ‚=¤sēžWjš4y\+RlĪŲ’ßlĢģwōĒW~´’BÁŠ“ÔVÅĩėSIûļ:TŌÃŊË­R žs}ŖLŗ2Áģjô>ĩ^1=‹“"–õ×Ĩĩ˜;Hũ+˜×´‡Ë\t$Ķ Ė5ŸÎŒKéÕjhfŠgųR*ŖYK ­Ä(Äg‘ŠžŪ{k°ØR’Q$MŦXi`qš_1–2ŖĄĒáÚ7A”ŠąˇAĮj‹ âdā˜ H1Éčj9ŨYr5Ud<ZĨ‰ŗ@|ęvž*Ũģ‚F*8…Û“Vcá‡^æ–ÃÜŽ™_ylzލq×#=*äŒc|g Ķ0¤Œ j¤Ä>RåŪ¯ō€HĒ"L9Tˆä• ļĢŗ!š§’ԐtĒ‘š9ÅOšŖa"œÔ4Rg¨é-˙čŨĄŽ+?F;´Ø ūč­éNŸÂŠ–älpx§ĀÍ)P:Ō‘ƒV!wŒRî{Ķí4w aH=ixĪ&€G"€ŋĐRŒžÔŊŒSØđ0h3GĖr)IôĨÁ9í@āŠ9õ4.pA¤ Å ŧúQKÅœ朎IĻ‚1īJ2:Š`<ƒŒO2iž\f¤Ž)ˆidĨęRDŅv.Į…Š-wÉ+˛ã•|DĒ‹¸ˇ'’Ņ”Ę@ãéCZ]8ÉH>ĩNOžP¸ČÍZ›y¨aĖ;—†Ĩ ëĄŅ3ÉŅs‘ēĸˇÔ–ÆFœ v=Š^îČĢØęü†ˆtÅB’—ō8ŽNīÅwúƒˆíã1'LŠž×WŸNˇË§›+ ė*š9ĶŪ Š+eÎ2+?n9$ZįĻņĖķoÆjĖwōLPüŨjeŠ\ĶŪŊņ؊ŽiÄYEGĘF1ÔT)nb‡hrũųëP‘Z–bsåínĪĨ:"0vŪų¨„ŦƒÛŌ™Ŋ`@Úĩ.Ö,Ģ’zæ¤Y¨'¨åÜ1¸‘@ė9 y 1R‚o'ŌĄIÕ2H 3ŒÕĨ•6ä­#V`Āū<Ō:dŗũjf(Srū5J@ˆã d,Û°1ÅI ĘúŸjž-âL6qÍ)0ĢmÂņEĀËõ}™ö§Ŧ$Ž|ŗÉ­…#`Î}¨Î(ęzæ•ĀĒ-InŪŪ´ņf¯‚FÖ­ íoŧiPsœŒ{QpH¨mB1e#Û58ÜąÃ$ÔŽ0¤-”ųqëH,!l}Қk˜Áô!}ß:Â§b#Ë#­0Ę9íQ|Įšz:ȄãéJG­)FáƒÆ(M¸<Ԕ܀ŖŊ*đTč3sW´™Įsë@0Į<į āęWŽ´IËqž;Ô/=ķ@‰÷d„"’fō×å@EF\îtŖæ<†# UW•0āŠ•cl´āSE˘āĀj¸ˇĸŒØëLüļ]ŧg>ĩ:BdR¤sí@‰ŸŸząxN ÔÆÔ ž)"—ˆķœtŽVA5ĩįĘ×5čķfhŠņÍpšŨĩėW§Ëí͊L ~ëxõÅQģ' îcč*ŽũT7ŨrGøu |ĪßE=G(Ųr-ė˜aŒ{V•Ē΅$ųGPjŠŪDĀs× ڄŽåaj”ÆŦŽĻÎÂ;e,‡qõĢۘ ŽVßQÔ0#\‘ôފĀÎđ¸P1ZĻ‚÷'ŠáՎNqVX$đ‘*+gÚĢí\;ž”‹+‚PôõĒ\ÛĮn‹z+ŠÕŦžÂ9T#œõß yÅqzŊĨüúVŨ3Æ;T¤;ĸy%ļ€É¨â-ĮĨ>ãO쎑<ÔeˆÔ˛F0flŅĸ3hŒŽwcĨFĒĄ‡58Č#pëMa€~LZB°œ¯ dTī0x†5_$œŌüĘšÎ!€‘АWšhsÆJqĮ4͏ģLDˆIlâŦD Sëč*˛œ€*Â6đ*XÉã\œŒQpB3ÔR†ÚNO"3Æę€ōIŦú”PŅ1ũ—ĻŅZYâŗ4ųÂūZKčiĶøJ–āy cŌž”€āՈ ëM4ėķÍį@ ?z“Ĩ;#8ĨíŠn2iÃÅ& *újŒ1â‚Ū”¤āŌt bûŌÆii9āņHqE7PrŽƒ9ÅJ9 Žį­ZoLM<8nŨ(Ũ„đ)ʸṔž(Ž´åĨ=3H=;Rä֘ <-8gœ#žÔģāP@āš3Ž) s@„Á4 Á4~4ŖÍ#`īCqŽô‡Š&ÜņĮ=ë‹ņĩŗIqlÂ@6ƒší Ž'ĮVˇ‘XņœŌ’Đ֋÷ŅÉ´…ätÍ<šmBGÖĢ 26õ21EÎAÅ`Ņč˜6Åš°OĩSŠÄÜęQ aĩ95>ņŧ&ė÷¨H'&3Č=sԈŨ Lŧ4¤Y.R\ŸtƒX¯š\lā֌7Lˇ?ŋr pjœĘGÂîį5vŗ%;Ģ _Ūįp <͑§ŸJh”,XÉÕ/5ČiĨprąĄoq4 Yî?>ŲÜÜąķV ļÛfîädôæĸXÖ$rĖjCzƒ“,0O§J’D!”Š‹´6áōķQ4Ûōãˇ§zĸšÃ?īĪ_JĩÆß/ ûŠŠ%,qĮ<ÔÍE‰÷☠ÁWgŌ¤*Ĩpø,j;Đí ÷‡j`üßtž”‘e dƒØŽdųw2ôôĻI#nËãĩDŨW>ĩIØée.w:ŠI =sØPņŧ˛(n2*f´`§õĢēBI˛;`î Xˆ—OZ’hJF¨ĻÄĸ5%=ę[¸íaĨü˛GVíPH pîđj•i<ĮUŊ:ĘÉ^ââ@-âäƒŪš%húLsföķ ōĄ¸ÍSŊēSÔ@âáGn*Ƨz/įöĮ0:V%Ē”ÔÂpØÍk›9ĨĢIlZÕ"TŗÂŽ3ÅZąVNqš5e&Ô(f­CĨ’sōô5Ūé|ļ‘kíF/īZÂ=í´—Š5BŲq}(Ųž2 jÄʋîiÍęBŅÚ^#jĪBsģĐVíÜ0ŊĀXrUF3ęhĶo#ŗGc™+œgĐT7×YĀdÜC1ČQD¤ŲIв¯!ˇgŊXû:l^éYúeõŪĨs°DJŽŦkeíÄnŽ$qS$րĩWDpELFĪJÉÔŽ$’ôG dކŽN—,ûC`tZ}• ‚C$’sĮ=¨NڃWĐmŊ¤qři1ĩrĢ ų#ÖĨ1DĪæc 8ĻËĀ,áAīG5÷)+l6W8ŽāS#f,IÉė)ėĸEĀĮËúÔaļädzžis’Œ1mĮ íK&ĖB×ĒåF õ¨N÷'-•jv ‰#&æVn{T0D 9ûĮŊM$ ¨zįļhŠ2s Õ+N>@P=1B´˜ų@=é㟭M$e8ČÉæšbYJļI ׊Ž^ÎA#Ԉ‘ˇdœĐÁÚ^ŧÔ ’Aj#WSŒķƒPr F=ŠdtÁāfĢu'GĨ0.ÅqS`ūtžk,„Ģ:qQŦxÁ$ĶŨ3šz<ōL? ęIĨ$ŒÅĪԜąŧxã9ôŠŌԝÄ÷įšB,[ČJÖĨv`Nqš"*¤g§Jpā’s) IīīJ…3ŽwfAáŽIéR*9¨6-ŧį%} JSn1šF_\6z wđļæ€š žGĄ¨ķŊrx4Û;q×ŊJ%ļ€zS˜`mŨĮcUš?/æ'<ô32HÜ1ë@BS$5&åe<}ę7 Ī­*FXe4ŌÎA‚;PÅW yŖË9ëÅ Û¸Ž}9 vvÎiû€SާĩDHĮ84đrŲķ  [ãąĻíÉôĨ ÍÔā c’ ÛøR ŠąrwƒQėųĘŠÁŠnÁc‚)˛dp;ĶŦ˜‰ÁæŖDÚĀŽ=>]ŪX*ŧįšdjDŠōh!€9äŒuĀŠX•Áč)vā¨ö¨d‰f<‹’=Š< æĸ8Æ>”‹$lîQųTgL´gâŨëŠožÄnÖ5*îd GEõ§"obCg8Í@Ņę:9Nˆ˛*˙$ŠŖĨø—Ä?Ų{#h§đĸå¸ãԚ4ŧ‘ŠhĀ5b N3N$Ō PŸĨ8ĨŌdĐw šNw{SģSäį4­ŒRi[šNsíHaē•F{Ҏ=iB‘Ō€ošĸŸŠ)˜6ãšpŸJnŅļ”ž j‘Ž”õÁÍ1lđ?=ŠŠ3Īdt&”Į4˜ëN @…ô đzͰ09ĻŽÔĻ”šLhĀQĀ4„Ž€ŌõGą¤ۃ€q@Š Ą›4ĢÁ¤nzPgøˆâ¸mŲoÔg=+ļl÷Ž#Æč[UcōœŅšPvgžĨĀY[$’*ãN!ÎچúŨmå,ŖƒŪ¨ųÛQ‰48\čUŅ—’bĮjrAâĻGo87#=k:ÅĶyŪā~5ĸĖ Ž4œuSMM7ļŠoą;VS‚\¨'5¨“Ŧˆ ņƒīT%P’ˇ9=ECLĩ$Pe7ËÛēž-JäāŽÕ¯kSČ :ŽsU¯mZŨœî<ŌæÖÆĒĖ`š’hBŒ(‰ÚEaœõ¨<™Ą$y;Æi`ŽCŧįŋ&‡ša§e‹ÔžŧS#šaĀÆči.Ÿr"Æ#­C(1ےKqK”/bär™ea‰­™õhm× ™—Œ‘X:sFpؔžô_€Sn:÷ĄĨ{ ú\[‹á+’ÜąčiâRa^‡– ›zäqWãU*AČ=*šH”ßQŒÁ‹c9Šb‰ØØÅ>(0ĨŗųÔʃpäŒTļ;Žcôõ§dœbŠl’lP ã=MJ˛*@ĎŊ*K@* ŖaŸ 4ۛ8â`<Íį5BHÂBÄĀT˛ČĢ`>sĀŊęBą‰Ž#ļŒrįARkWIæ&™i…EáČîiĪ Ō4ķu>>× ũØôŸĨÆ'WšfˌkTŦšŒdîųIí-í퐌’įšŦk_ßkXQōî5ļŅ’ĮœY:ZˆĩgfĪĘOāôl™­R450<ĩ<šēƒę1ü5GSlŊÜԁĨQO'ĩCvŠVVĐôķy¨Ü98EÅj^ÅŽ#‚ cõ¤Ņ•íuk¸GŨĀ&ŸrÁu Á‚†ĶžēģÍŋ—÷Îy¨ęovcwRÆĩg¤ĘūuY@ä4„ŌŒē™žÆĩŠŗˇĩAQ!PE,‹į.ü~5KË*ščj'Fpža%‰ëTŦÁļ_hÖU! šŒG‰v˛’W’OzŽ)ZPęsØÕƒ>F˙“VîG ˜YpõÁĢxF Šĸ†)Ž:wõĢ).Ā56*ä“DcŒl?QYRĖO ûVĢ>ü2}jĨÄNU•HV<ä͈™^0& u ĮĨ%šiņīģxÆ*–›koo#MvrÑTõ]uÍÉDud+hĸobÛ¤„ԁW;rOCNļ¸iŖ IQS1]šՈb3pŽĨ+܂ĀÍÛ4“mP¤6â:■YCnR(xd ÆķĻä➟ÎĸŽXüŌŦp{Z|‘‚€€=sH™<ØūfÅIšŪRŋE5p´Ŗä8ÛĪ>ĩŠnÎ" !Á¤5ĄY„a úUŸ˛ĸČP}sRÆø$ƒœĶՙ™ƒ¨ĮPhžXSČ ô§Ŧc¨˜Ļđ7Rt#@‡4yíĶĨ1s˜ŒzS”žNzZBw.`ŠÕ2 .1úŌ'PYēŌW¨ČŠ€p´2d‘FfÅbIõ§ųdūÕbAœP!Ģš[;xęR€cv)Ŧ%ÜT‘ļ‚Ũ’zP1™Ü7cå Šc ¨ŨÉõÆFĀSĶڜŖÅ:O-:šj ËÆĩ5ƒLT‹´sہĄåÎ)"c éĀ“ É4\cÄaœrM ģ˜ց! 0šÅ(.[*4€” \ŨGCP–ĀŠso nëMEų‰ÎsڂDI89§† ŨĒcUÔm’N9öĻ7*AųM@ĨwĢgŊMrĒP\TŲPtn= j1ĘáI9¨Į_˜"*đ.ĶĪ­,1œĐdŒ„Æxĸ6ĘįZU›4JáB‘ĐĶ 30Ž1J ųXķN]­“×ŌĨxn3@ ģ,āĎFFqPį&<zÔ¸`'įŠ°&Â9ÕxO˜õôĢįi@IëĮ5Ō§h_|ĶËsÜÆ:ÔŅ<ÆHoŠüŦĮŊ!P§ĘX҉@ų;jx`Ž0ň`{zVDȎwr Ģ-.T€N(û€Ēųã*\)ÎĨ į<“ÍFŽ7÷=(ō*céNe ĩY‹`š|Y+ķb ĘØŠDÄ`‰›Ļ?JQƒƒš˛˛ÎŅ×ŊOZEËr;~=)€H^”Ų$  ™Å&ĀëĪ&€+´0˝ȧđĒ“é6r &<jžĢph ī8éŽôÅŠBŪÎÚŨJĸ&ąĩDž)ņ&ß(ũÚéeUEõ“¯$Ų$rI튗ÍyA˜ōrx’HšĀÛĪj´ģ.Æ;ĶZ6 pû•}MgpH ä‘ƒÉíKŅ@kwÅM"!“9ęŒo['ŌÄ(!Ŋhå~`:v§m`ø-JømįčöœÔŽËúŅ-̤Yîëž HŊŖ6í6ē*ņ6k?FČĶa\įåĸHīJŸÂ%¸yÍ&ŪIíNÅ!8b8¨Â‘žiā’)I QŠVÆŪ:Đr 7øŊ(GSGlŠ\:Š 3@Ã9âŒįŠ:s‘MĪ4ã€3@aŠA“×Ĩ)'Ԑ ¸QIōŅ@ėJĶFŠRä `fŒäŠ`?ĻE*ŽôœcŠPĮԘ‡ œŅŧįš`~5 Á4ËdŌ‰2M ÆE 1@‡ž~´ãÅ5s§āĸ˜đrháZP+Ø Aĩ{ 1Ë8ŪĨ"œ‰->ÕmsųÅ,Ú˛LĒŽ¤?Bj1¨bŗÚ€p+ o5';¸4{;ŊDĒ[cŠļŋ26ČĐąéœt¤9k†ˆ/–ZČĶĩvą$Ãįš4÷×%’1ŅyöŠtßCHÖîh‚ŠdI>f)˛2˛¨ÛĮĨ2éƒ2Č Ša“Q¯ÜŨÉŗå5ö„Ģo´ī§j´ņŦĢ€pqžiņáŖBā’F1PÆĨbŧ K°nvô"¤”UŠ­ŅRŨĪJŽF}ۙx4¯Š]e* äõ§.Jä3M.ŽĘPüÃŽjÜjŪI›ZLh¨FVų§#É:å1¯Rj•ŠātĢpHËjąmĀ<ąė;‰ŧ"×Ō› Äk!ēŸ8š {šŠ]ŌČ!„ŒįŸjŠú1,‰meī0īëU÷"r} šô礝s"áĘĒ:b¤Đ\‘"tEMqiÉaFzŌč0‚fęsÆ+I4ādŖięhHаāįŠĄ¤ŦgUšGč3Å[ģs$ąÄ *ĩ”`M3`đpHŦ֑eˇĒSC-Ė+“—āVčͧŗ‰ee!ČČÍfÜE,&\oR<āV›_\M2ɸãYÉļ•‚ölŖeĢ4Zá’<ĖęŌŦk†ķd0ė+nŗŽ´b,œrk VÚx *į} .ĩ!ĸõVMžgîԜuĢ<´–'Y™ŗpņ€)$MÉˇĢŽFr:œŌŅŠ9 ŠŦĸMÍ"ÆY@ŠėĄķØš$/\UX6ÔoĮŽ)D$6OŨĮJœÃ´o, Z§>Š ‹ĐqV“hw°ģP6åāˇaV|´ęÎ2CQÄĐIMÚYžcœVl¤JōlÛˇ>ĩŧËm)š‡JsėŠ01¸ö¨ #ĖvnĨL§Šy¯äõŦû}25mō’íščĨUu*ƒŒU&V qõ­c.„ÛŠb€ÂôÅL`0=éǎī‘JvįbŽŠ1]į;—ƒM1Tųc銜ē"€N@Č.ƒdīԊ #Œ1Ei#ųûĶ„l¨ō)$˙tš´ČŘíĮëNhœƒĀũi\ tČ_i-„dzˇ4flųÔ6@۞=*äa‡=‰¤6†XØ.î)č͟˜ļ@Å[–!Ū¯ƒéLōĨT9ũ(Šđƒįaŋ Ќ€OŊAlŸ+HëƒVäˇ8¤49Žxâ˜ÉĐ)Î}iÛFx¤fڇjäõÍ42¤`ZSÂõúSQԏœrjLŠŒãژšÄdãœpiģ”į‚ėe OËRô?(Čö ÉāIÔ¤ąŒR §Jxé“@™XnVĮ¨Š  Ŋ ŒsÉëFåfāc\î]š+IÁáW˜I,ĻzԜ/<įڐČ[–įŽhdÄ|Í=ˆĄ4‡™ķÅr8öœĶ—¯­/Éģp)2EK!F⠎AĐ¯CJí‚8ú杆ä{P"Wu+šhÚ¸Å(ÁP8â“o^:ô bTœæŗįļrŗ‘éZ%ö¯Ė9Å;¸ûPk\Ā›_<ôĢ9ÜsÔ{Ts)Á,3íQÛde 8=)‹bf9ʡéJÃsNÚ3œr=iÅwp:Sˇ—°õãÚĨtÜ>œĶ°ÆA&ĸPČØ#ƒ@˛ė dúS[`ÔđÃisœ z€…qī@"/€ÜjB€6Mĩu˜! ķę*´ŋŧ`<ô>•Iˆ|2*įBî#ÜAo˜õ§˜'ĪÆ;Ņ$lQ@ûšīF‚=kBoø–Ó“´V§­fč@.—ī´V™įŠŠ§đšËq ĀÅ \ q˜¤ÎOQVH‡ P­.=iŊhXšL‚zsNĀšÎh@Á§đG4ŌzĶT“@ÁŖsJ(8 cp}iIâ“đi’H"ąęq@ šhĨŒŅH ü†>ô/LR(ų˛zSąL´qN-‘Ō‘wŽĸ—sÅ1 2;R|Åšâ•NO4ōyãĨˇŽ˜§°éJŦOj6åēĶSÍ?’)€|øĨ gĐÁ ‘ԐŒS@ NhÛN:ҜG4¸ĘŌ`P $RņȤĪĖ1C.;Đ11š1“Å(8īJķ F3Íp˙‡ÉkÜ×qˇšáū!+˛ÚlādÕGq?–†f!}Ģ5&X‹"‘׃š×KU–2˛|ŲîjŧZ!ÁÂg­jš[ƒM‘ÁwmåūōBĐTkˇ†MŅĄ$÷5Že“V~ŌÆÕĸA…'“Y2å`ņךĩs˜ąČį8œ# ŌyŠ)2ģˆíՙOõJŌŽ!ķŠß‘×@ŌĮ ×Rt”rę>{-LyākOôXŽn~đįĨXĩļ‰b ͡sÔÕ{t•įŸũcœ“éS7?6~‚œģ /ŠK^(cEĻj_äŲšÎĐĒë`ųq°&ŸŖM˛ÁÁīUrūîÄ9{÷/\~îî3÷‰ĪJM\\Ü!TžôļĖĻųZCÆ8ãĨWĩ%onSŒę+6Ŋ֊žŠšw ¸áÉ¨ųБŽK’kV…9ÚáģŠĐÛæÂbW 0晌ąF >åéŌ¯ XmŧÚšØ ÉÅKiψ[ wˇW‚ÆŲA\¯Ĩ&¨ũ¨84ŌĐw'žÅLe$ۊ„xrÚ7&¯,ŠÄ‡$â’âüC8Čũi…ú™’ÛØîásŒ lˆ…Tô˛_…PC†ŗ—Îi‰s€k6Ž;…Ãų| įŊVŠé‘ÎäŨV$vcĩ†õrĪH‚hŧۉ| z õĻ•ƒr4š9@Ëm8éUįLų<מ& M›q÷py5ž¯ē҉zāÍ,r?†š••ēÔkĪßæœæ[ķĢųyp5,`ũJˆ ÜKŒ‘éRˆ .C=3UqIŒ&ņ“HÖŌ$šÆ;Smūč ęÛ0V 9Ī­BYe$ #Ö´ÚDTCTbA8ËJ°Ÿŧm‡ƒ@:z’ę@<Ô1Šįq$“Š{!Fô€,´œwŠ\îÅF ~yÅHĨP´€V!¸¨†ōøĮŊNvŒpi…[Œâ€ŗ`ÁÁ¨ŪLdHĮjüڀB˛98Î(ę3‚yõŠ ÛЀ=*4V Œ`Sß ryĨķØgÖ¤UÁĀ÷Ēä1n8"ɅۍƀļĻG­:1éÅ7ĄNs@Į;šaĀô¨™‰ĀCR”,$PäÁ÷Ĩ Nsڜ¤ ų‡Z18cČĸCūÎOcHväāUöāáNG^ičŽjmģrYFĨC´íˎMH7 mœÄ8ÁĒÄIČëۚ(áˇņž”Ēqéۃ÷Ī wČĘI8 drā‚3“LˆģŠûS—¸äûš@­’3ÁĻ!ûAS¸ōjšI#’Ŋ*Wr3@fHÁ4Ü<€1üiÄėĮĨ8+më‘JP‘‚F­°#‘Æ84Œ7HH”(ĻH¤É qۘ…?xĶ՗ “Ȥ-ŲāŽ”Ö'  `‘ĀÁŌ™‚įéPÁÂ䜜Ծ`Sƒžh0ˇÍƒĶŊ+íÚqŪ™¸š%øĪJ]Ŗ>ÔZU(N@ÛP‘•Č*>ĩ V7@¤ķL6ą(ph,*Ã3ŨÉ5h4oáĮŌ§û AœäS^2c\AHa#;šõĨ“rŲĪ4Øō1ØĶÜpíLEÄ`ā0ŠÁ8ĪĩR´mŖkvĢŦáŖ P2ŧŠW$äŌÅ +Žæ›4ę‘囟JʒōC!ÚB¯n)6–ānČä t„cĨeÅ{4l6å5un#fã!%$ĀŧaČŠåāŽ*Ŧlsߊ|’ƒŪ¨L{˛įŽj"yĻãŒæ“x1 ,Aų^ĩNX˛ŦÁSš¸ĶmĪŨ>Đø‘”7Ŋ'Ļĸܨ×âåĖ„äqƒPÎ>nĨ2YMĩNNy&ĨfÜ=+jî$Vaŋ Ž•ROLT耎xíLhĐ784 ä(gŽĸŦ<`…ŒŽ3ČĻZ’(Ôō“ŒŽĸ“zfŠ›4ØAėĩ yīYē+yš\-ūČ­;æŠ .[äį­4õ¤ĪŊšĢáԚ}Šwâ“͌P>í4uãĨ<7˜Á cž´šÁĀĨoQH“šæĐsHŊķM?5?sHņ́ ␞~”€2ž”RfŠ`Q$mö¤¸ātŖ8Špt + węj1“ŌœsÅ1éڔ ŒšĪzP3ÅĪNÔܝÜR€sŠ~ĀĀÍ8/~)¸ԜŖ“@ ܏z@ŖiœR€Wƒ@j0Gz:¯.qÍ—#)§“A8 ŪČĨVîE4ÔūHÅ('8Åq~9ŠY…˛Æ2 œší1Î3\ˇ‹Ûd0rq“Ōš†H9fäpE]IP:„ f”I€ØČÛN’1î)æBHīK§A#ƒ|øXđv Ēč.é÷)xōF ĢÆpsŪ¯Ŧ!\ąûŨĢ6;ĩX|ØŖkœ qVîhmˇJ¸“š¤€8ĪZs’ƒ'’j”†XĖ lúU˛œģš `*S*~aš€#+‚ÍšzŸ˜Š@Aą„„“•Šĸ, úSY\gŽ Fėp##“īHéšF „)ÉōásÉôĻDČĖFÜ7Jy$7☉ Úyæ˜~~š]‹ĀāúS”.㊠F\r)ryÆ)­æ.\Ō‰ņP|å˛: +7Ržƒˇ­1”Ž ?…8†vIœéP’zgŌŠ#ļhi>R3ž) *¤æ˜@qÆ)J´ƒqãˇ€iŪy'?Jvæ ?‘§Ú1Œc֑ÎčÎ[Š ~o›•–\ bˇĘ1œTŖs ¸Ā4Ä1™‹•aëJĒUr}é%L_jz+c€pi€Ū™äŸJ9-Ōd“éRš<†>”XOœāņOũėTJŪX āuĄ_ ƒÁ>”1'ļ3MWÜNWĨ ĖH §2)Ā´ $ô€ŒįR…cÎ"•A'€ԘŠ÷HŦ~áëH2pŨMX‘KđZĢ4b<ŽO44< āÔģFܑЧāOlÕôL¯-@"Æ}ū”ÎwüŊúĶå?^3Ö¤Ú`Š€ü˛`wŠŖn4ĶķvÁĄî?6GĨ<9ÜWhÚiŦĨåäwÅJGĘ3H8$žôÃSŒ•Ē1 ÆF9÷§Č§ŧ{S•˜>0 ŦņIæä0û™Z8šqœRÜŠdôĩFHčÄ㊙;˜š$ŒÔč€.X zSQĄhË8Æp`ŨÆ9I0UūUĨ °@ <zĘ´ ׸Ā<ÖŪÂŧŽęâ†4nŪv‘JB܀x.ՁÍF@c…5ą"ĨH\Ôlå@sīJ˙ģõ&¨^^l` æ›$’k¸ĐbLdÖNŠpWo˜Ļ]īÜ$ZĻLĘ+'0ąAcId-3dÜÔé&"ĘŠaęiĄA| :V .EKw'b'99Ī͞”Į~@)īš€@\ŒŌ3Į°åyĻ´%lj*ĖęT``ŪĄ´  ãRHģĪ JÖMęR=B é‘ökH 5fč`fDMĩĻ*é|(šî)ãĩ79íG=č­Y!ߚ8ĨiŒØĸ€§JrˇËČĻņ“G8 "—¨¤Ú)ÅH AŠ^´*š\‘ځ œĩÉøĐ•ŠĻēĸ9ÎMsž0@mb8į4Đ$’Á9=OĨ0‚)cŠWF€ØÅHęÅAĀq[Yî1‰$*9ˆrqĪĻIœ ]đ3TC1ÚKŲIŠëOŽŌRĀK&ī^jėŸ ÆGN‚Ģŧ›WwNÔ÷kÚÎŒcŒÔŠŋ.3ĶŊfZĘŦ2\šļŗ&Ic…úÖlÕl[2#dũ*ĩÔ{JŽ gŠŠ­å NÆuÅYŽ/´äœ @SŠÅŠ+GÆxÅM’ >f2;×Uˇĩļ;ųĄŦÉŽ É'%qĀŠc%Y3ĀFōÉĨ˜°_ģÔÕØÄáßæ_nĩfK˜ūĖø@7TŽæŧŅĮŊeŒž>\T{@_ŒvĻ:7˜Ođæ‘°ŅĄīŌ†\FyM,›"RsԊŪ>VƒĻ ÄŽ8Š´Hâļ‰Ļž<č}kS‘ĩWËė_åIjʓ˛1ĩ´ßF÷“’?(Ģ]ŅIëģšŅÖc騘WU ūîŪvėOåZ7î™ĨihhO.â#¸4ÕE/´/?J„ÆæMÃ'žÕŖo÷xNk6h™~[’q’xąĻL–Új/r2k?UU —ãš›Ę&ŨHč)lEŨĘ:„Ÿh˜á¸Ī§ĸ2ÄŦŊģÔŠd€F}ée`Šą¯žĸĻũŧËQꎞ\ŗąCÛĨ<9Cœ{Õ2H R´î#āķRÕÁ;ž_›qāöŠW,dܑU˛ƒ% æ,í8ĸÃ/I'ŲĀéƒŪĄ7ėųT8ę*ŗĘŗĒ̟ĘŦ[  Up*ÖŖ­nĻ'“¸ô­X…$‚sYkĩeÜ'=ĢK퀧 ˇëW¸%b Û;ŒbŠÃlVŒ9ä’jÁ›,yāPdb õĨąØĮˇ„ÜZIuŪjü1‘måH¸~œt§A§ũĻÃáæĨI >€`ûĐŨđTÚČēc(>r1éRY[…¸20\gÖĨPęzœŽÔ۔™g†âœ ĨŽĀG¨iōšxŋÕ:ÃŌŗ,ėØY™Pî`z Ō¸–îö/ˆ‡z}ŧ"ŪÔ"Ÿ—šīUwau)Ŋ û3ūąĮFÎÂY#“ÍÜŌ„ö­ä+ģ׹AcÜP3B““2íMÍ´ģE™ŪŽGos$I'Ę犺üā:Ō´Į’ŠōŽ3úSģ…;+yâž&_¸cĀÍ>ҁûU–ėuÚ>ĩq,[˜o# ¨ņÚ|ī/k‘ƒŠar!ĻȖ°ŦrbHų RÉo=ÅŖG+‚ūÕ!¸fáx īOķq…Á÷ 73 Ķ5žJH"\öĻÜGĢiÄOįPuĩ¤g9âŸæ#Œ:ŸĮŊ íĨ3[G!ČfÁÅYd€–!ģS8āŠ č)ģiôI3ƒĶĩ2æÜ܆Áϐ1Ā5:9Į?+EŲĶ',Gz—Í$d¯ĐT)(Up ¨ˇ8äã×ō¤<.}h/=čŒĻNOJ7sOĨ*(<ϚÛōē}*5mŽ €&$nÆNE#9郊k—,Z@ãĢEÍĩFCSPsßšŽF!”…Č5crmĀëüЉ ųKŸĨCžw*ü ķŠ— ÁéM pŲö¤2U2gœéM,ļT{Ō,ŧí#CIķŸ•Šāô  •„Dr ŸJ™™6`TößČ5^´§å4¸V„ŽāĶ åšĨã9Ą†9Í/ ņI€:äMũ8Ĩ'qé@ ¸Å3w˧`7Q@O΁ˆ>đâ¤$SGzĶyę(š'ū)€ojSōđ) g–hŠ2hĨ`(œõ§¨QH)$ÕíÜcŠÛNĨÜ02)HĪ"˜‡}îĸ•F4™ã­9OĐ’ã­(>´Æô¤/Ÿ–€&c:ĶTüØĄqˇŪ”qژ€‘ØŌ ÷¤cƒHF:P˜ĀĪ­*°Å4gĒNhĮ'<Ō€BõĨížôÖ$tĻŒNČĻ˜ õĨ$R„ŒtŽkÅXhá÷ސ žkĈ8¸Éæš9ˆn$/Ŋ#Z¯–~cŸNÕ4ƒgņڇ™D_/9Ļ˜Ū†tа(c<Õfš0äŠÆjėĖŗG¯œmžppzVŠ÷0’žÄRH˛rȨšaĩ—đ­ėöƒN{S¸ā~5NhJ ¯o ŒžÕĸ`ˆ!:U/d`:՘TŽ[?däl‘$K°U'˛mҜ)Šˆ>äu¤`2[n1ڗ5ÂÃ啝–ÂŽÔÅa´įŌHFĐŊĨD]”ôöĨpą1îŸcUŪįcášöĨˆ|“Æ9¨cV’`ár3ž´ŠH†āģ)hĶ$ž•ą¤iq>Ņ2ŨpjėXLM$|u éQŨę ƒĻĐ8ŠÜŊŠZŊŲû;ÆŪĘ*•…°ˇ.zܓš–cēPK /8¨%¸F°ãą§äMõ#Öí=ŽzƒÃęĪm*¨ČÍ&Šp­c´ ĄĻÜÍ MäˇSČĢKŨ&úÕŠq ųģœ*ĢŃĖi)­„ėBːđlúŌ ȟj­pšq´t=ŠŧrePš, Ŋæ1[Ō•rO*ĮŽ*—-!Ú*â3…GŒn´š$–ČŦ1–=ę Ÿ|“éRK.͞ED¨ ßZqŌåō23ɤ*Ą0­žäSfų œS]å`8 BÛÆĮ9ųsŪ›Üī9ÛڐģFCgJ–2>ü}î RC?•à ą ;Û{Zj˛aAÎircwÜ ā~Tė"o0pv(ķÁč2ŪÔØČ•zÔą¤{ÆŸ­;ØDBm˝„zâŦÄėØÛĘûŅ,((O=EE;Fi\ M$qˇÍRAQÆ_ šif g¯ ´ĘÛIį#Ļ)UĖ€˜ãš-ŨösŠl~\“ėÁČæ€3\ŦW€*Úohr@4‹"’Tũ9Ĩ!IųzQp#nöl‘Ĩ&<œ÷É6™ÃOCLE!Ī9ĐĘĮžj)Ã%jKō\dņQÁæ;Ü`zPA.ØĮsSG,lÛwgÜUi"%ß#*hTXØhÎHŨ†• ;›žū”õAģsv÷¤&c’c TČpp1éO-ĩzô¨Ŗ<1ž)0vvįąĄĨÁ#Ĩ4Ŗ• ††9Ļāœg<jõ ž¨ųz1ā~”ģO +HJÎS'å§ÄĖĮāJ1!Ëä{U„Œ$`ŒgĻ(>qĐ`ŌōsĶōÁNŪ>”+ī8*¸R:÷Šp€äõŒ ‚G8íIÜvĻ!pŽ´ŽžGJ|GŽOJqb ‘@wÚVœcwîXü§“ژà ÉâPq8¨˜ ÷Ą%ÜHėJ°6('ĨV; E;ƒ!ĮÖ¤Ü$`R”sԁˆãXz͎“ŸZB Œ~´˜ @'9 „ņNV(É S $uį4Ļ=Ģļ€ AĪČx¤TuB7۟°āÔÃ`\2Ÿ­1“!‡z’MÜ8§ŦyqŽ)$\RI'u2XēFGQS)ũŪ;ŠaS#ûšŦčIßŪ™å99rMj|BzjÆ?ˆpiXw3QiëRĩš ‚ÄU˛Šŧt9¨eŨ!$ņڕ‚å/nC)RsÚŖģģ–eĮ *y %HÛøÖdņ8Bs’=jet„ŽōFĄäųDˆ„ņŒŠˆOP€*Ŧŗ>`ŲöŦėØ\ֆū[-Â5VVę{ŠVÖî!nH(z†Ŧ{Îv‘ũjŊԓÜ2œíZĩŲjōņ&ēy×ŠŽfîq4süîhš -ŒUŲbĖ3LØĀAÍYv#–ByĒVō7Bā‘Ū’bÛžXŸŌĄ­KG°xx†ŌĄoUŽA`+Ã9:=ŋû‚ļŗQOá.{+ëAG­œsŌŖĪ"´$IÅOJS×&ƒžÔméKĶŊ5sœNIĀ ŒQËuό¯Ĩ<äĐI掀Œõ¤b—īg­*äbäĶwÜt§ęi Z(Ū(ĸāPëŽ)ʧĨ8äP#¨AˇŊ86;q@i§< qqNnĄW īN#å A­(;J`͇CÅ0:šN” ŒiĨąī@…Į¯4›ĀЌäœP89ÆE;É3OāäUqšģbœK f‹ 匌õĄÁ= BŒŊs“RX..Ī—¯4ā20h$šB{ŌüW;ây"‡=2k ČÅrŪ2Ī•oˇĻęc[œÜˇ ËōŒ“ĮŌĸ1ä‘Īj[b0Øį­Ü˙…Bf’W#‰Hv%zĶĨ‰]ԃŧņC+G"ääR6íÕ\͐Ąb)[-iZ=Ø%øęhhÎũĶ4ÖQaI4\vã (įyN6œôëOYppGNÔärlšëH†âqŠŽI2~öqVUÛ;ÔSKĪÍ+…ŽU;ņ’xŠĨ˜ä‘ééVî" )÷ÅS/† Šw ŧ0Áæ­ÍKdâQô•_F´Iå2Ęŧ/AÚ§Õõeˆx БØQ¸íbŨö§ °a¸1+Īīu;›ëˇ’‘+v­2ÛՓĖ%‰ę{Ԗv+’ĪŪ$U)(‰Žc0}¤ŽHb1R-ŧŒĄ˛rN8­øm"V9nGíQGÁvPŖ<ö¨ö—)›}b[Mc´īŦíķŪ ¸psŠëÔ,ҐF8ŽfęĘ[Mj9âW8âœ%tĶ—TiŨ[#ĖŠå`8 éB8Ü˙Ĩl`<(îaëL–U#åÆzb˛r} ąiĻė š~aŌ¤[7ķw1Ū¯9^K>ĸŠî‰ ą?Ĩl,ŠÂ$“##ļ+BŌÆ9â$ūÕL^¤Syf>ĩ­yjŦ(nzÕ;ˆeϟąoģdp+V2Ļ.G>”Äd“=*Xä^z U^āA*,Œ ŠP:{TčÛ\FëN,¤Ø+ę}j$‰“æ cŠHĶoĘõô4ÉXˆĪ9Jc¨1Q,Í#ÁQīACž`Ņ•ëĪz§(e5yŖryiĢ‘1‚{ƒL ë{R[8Į~iī …Š•ãĩl$*‹ČÅ GŪė&Ė,÷0PNqÎEF|ØÆŽJã§Ĩo´21?(>ĩ\Zdžm œRbÜĮ@쨓ÎĩNË&ÍÄā/8¨Ž‹#õJ„\äŒ9ĸ¤EĨ“åųš§ĩ2I9 œtĩCīÁéS(o(åFîÆŽA$č2€Z҆Õp6ŋ>ÂĢÛŒ?Jŋ,GÂ¨CžĖŋ>¸Ą Rüã§5(v‘˛įl0mšĪ@D-cEųAÍ4@;ŋJ˛ŽJN§& s‚M”đwãR/æĀ/—†ûߕ8sķc†C$@€G#ֈáLœfŦRFÃÅ Š[Ž(°\…ū\¨#>Ô¨ˆ¨>cĐŅ*ħZQŠ”Xew‰CōN{Ôę›rų[ĨIåtcŒĶË|˜Æ 6)I?O”/ztP¨3’{ՆpܯęŒ r>ÔÖĩÚØ,Hô¤û>•K¯NŧVvąV%sŅĀéÆ*(PŠĪËÛ4‡ĘķÕcVįĩ4L…d}ģN(°2in'ëMaÄîÍQŽuY2¤‘Đæ•îÄ|.1O•™—Ą´IÉō›Ÿ%ģ  $qšŖm}ĩ˜¨ š•Žå‘ē2äqšM;•×ŧ6Ō öP+g¨Ŧo Ú,ēí°ÅE/„šüAž1HÍ8ô¤tĢ$…xâŒsCŖŽh<ž:ŅĶŪž0y4Ũüđ(…ˆíJŧõĄŗH #(Éö¤įĨ;$Š i)0qÍ8gš0iÜ )ØQa\ĻzšLņKÉônaÚ¨p8ĄNyīH¤÷Å9Häw Í(nqIȤäSâpziÚz敘 39=hîx œšibN)'¨‘ČNI"œsœHĒ@Ā4ũëÅ ‘Ú†cŽ@§ Šz§Đ;C1ęŧTŠŽÜã0@>”ā3ߊ..R8Ô¨Áj”žxÅAæ“n "€`暟°1ۃŸŊØWM´°ĮjlļŅL‘€é‘HkFpŒ >âĻÇÁB0=+ļû,!€ō×ڗȋwúĨüĒ9 9ŅÁJ§8žø¨]$,Ël}+ĐžÍ_-xöĨō"˙žkųQČčķg†|įĘcøSD?>S JôÕˇˆ“ō/åL{XOZÂŸ(š‘åæ)–^"cĮĨX1Oåå°zWŖ 8G"5?…8[ÅÚ5…;0n'šˆfÁ&ÁöĨheTĮá^– ˆŒykųR‹hąū­yöĸÁĖ-)p a “ŒgmIeĨËvæIQ•ķĮZôã@å¯å@†1Ņ@ü(°s#ĪõŠlíÖ [v,ÂJæŌÎöGvxœąįkŲ<ˆ˜įĘ_ʞmáĮúĩįڍC™!¨YŪ*FąÛČdĪe8­û;[Û{XDČw2įĨzgŲĄĪú´üŠ|¨ĪX׎ƒ¤›V(Ūį›YÃųM¸÷ÚmĐo1Kƒô¯Qō!î/åIäĮČØŋLTĒmu<{m‹“íQÅi47NėŒņˇ##Ą¯KFũŌķßī&ü ŸĨ¸s#ĖäŽņبˇru¨ŌÖėē&Î=+Ô<¤î })Ļ(ÁŨąGáGŗtylļwŠĀ˜œ¯ŌĢÍÚĘĨ`{í¯\ōSŽŅųRĐņå¯åO–ÂæGšÃc ö§Īļ“Īi¤[‚ŧŖŊéžLgŒcéCÁėųjOԟ(s#ÍcķČd‹ôZ•Úp„*¸?JôUļ‹ō—ō¤x!'ũZņíE†Ĩ͒Kąßļ;âšbģ”,.ŌŊ5`‹û‹ųSŧ˜ú„QøS°sĮąæ ot‹÷9>•?ŲīASå1ãž+Ō<˜úųkųRП¸ŋ•cįG˛SÍ™Į÷iŽQ‚ˆ¯ûĩč%Į*?*_)1÷GåE˜œŅÂ*LG0HN}*xÖMüÛ¸Āî+˛XĶ?tSÄJNHÅĖŽ;dæ3‹y>Õ Át˙pĮJî c°  ÁR ŖĘĻŌ¯—HXôâĢŽ“z›G>ŧWŽlåG”§œʕ†¤ģT4ÛØø[vÆ=*[m2úF*аzt¯O*< ũ(Eä~”X×cĪžÁx9H>´ĸÖéHßnĀŽ˜čEF: ¨ U I$\æÉčqNō.Jáĸsƒé]ĀU?Â)BJ9#‡6ˇXĘÛąäbš°Ũļîŋ…w`zb°cĩæG"ē‘­ŽJā@üûWs坠ϕžĖŽ뎑Į 7>”.ōręØęEw$(Į›´“Šw Ŗ‰X.ÕrĐ9÷"‘íųî3ĮJî‚qŠ ŅEdq ŌüĸŨÉ=ĀĨ÷„"qîEvÛzqJČ0(L9‘Âũ–åi…˙*|vW‹\væģRš8ÛNÚĄz .ČâÍŊŪ6˜[ÛœÖWL€ũœäûWdūí5Opü¨¸s#K+ĐÜ@ÄRĩĨØ@Ã>ÕÚBđ)9ĪAJáĖŽB+ŧîōIjÚß0ÚmÎ}ëŦی“J§"‹‡28ßėëâNmŠ•éŠŸzÖ@ŲëŌģEĮ\Rg$ŒPĮö—{p°ãŌ ūËŋßēcžÕÚ°ÉŖn:Š.>cŒƒOÔX$DžÚeۍ­@é]x=8§v# ™jé—jØX[3ØŪ•Ú°°÷ގ€0yœãE…đcē"}*C§Ū¨ĮOķŽŗ9¤#­19|:MæIhãR 2ôyXZë1éM'Z.Į(ú5ķ6vŒS×GģXČ)ĶĨuÎ3JÎp)\9ŽFM+QRĸ4īš–=&ø‚\ Ž•Ô‘Ō”¯­;Šį.4ĢöC˜‡ÔšŒh—¸Œ {×\(Į^´Ž>c–ūČŊlaWķ§ķË#åÍtÁp)ĀdQpæ9Q¤Ū’Ķ­?ûė.ķŽ”Œ{Ņ‘Š.Į.4KĐß2¯#֚4;đ1ōâēŦ֝æ€æ9…Ōo`ĶÖĸ}ų›;VēĪ—4h¸ŽrŸØ×ØÛ…Å ¤^.>E÷æē°1ĪzLs֝ĮĖs#HŧüŖZjé7™áO|×Sži•Ø掋v8QøĶŽ“x¤`Îē0>niM‡1Í˙gßîáT­7û*đšæēR2)ÅÍäsŲ7™ĘĒū&ŖEöåLzfēœwÍ ëEØ\æF|2>@OŊ=t{иf_Ā×G×ĩ' ã4]…Îe´;ĸAČĮąĻ6ƒzĮ!“ԅ$ķNĮŊatpW^Ôg-ĩâõŦáā=Iąš&üMzi^¸ĻCIę<ōĶĀsų†K§Rq…ÚzT‹đâÜÂęîÍ#d†ĪJôÅgĄ ›áļ°˛ŽXŠgƒ“N‹áļĒxyáĪÔ×­“’GzR1Í>fv<ĩ>jŅžfļ+øÕˇđ ČŸĮÖŊ#uw¤ŨÄghļéútpJAeâ´ĨĪ4…†zT¤’˛wwœĐxR“ÆGZÂULķւ nzR…fŽHÆh1œĶ1ƒÅHFÕã“MÁ␠'>ôŠ­œŠw @ȇîķMsJØČ¨Ø|Ų x8 0ĮSšš@=)ŧúš)Øĸ€)*āg4áœæ›üôgč|ĐÃڀ¯J\u¤Û…ÍœP äŌ¯&ŽŊ)Bdu ōh<”c Í/oZL0 õĨÜ3ÖŽry Å4ŠĪ4îGZ^Ÿ&(Į4‡4e‡Z@&{Sŋ*  ŸĘ—¤Á=)€šâšÜ°"—Ĩ¯QHäįšv(Čš¤ČĪ#4ą\tÜŅĀíŠRŲ ÉČ āõ Ræ2qF0)2AĪj2Mh< Aõ4’Eš8ëN\c‘Í7gŊ‘̓Įzp8ĻŽšÅ?‚hééM"—ˇdãįĨ$tĨ€hĪĨŠéJG74H Cx 0‘Kš `Ŋ/UæĄ¤Ũ@E)^´ķL"€ Øi&—ôdfŽsE( ¸Q@g4Č<ŅBđ9ĨāšiäĐĎ<`ŌJ`=iØ9ŖŊiŒ­ â3ځœsLSØŌwĀĨ¸¤°@¤$Ņ‘KÁƒžÔmĨ'N´ Ž”b“‚)N)šô ͊FSŠ@zЏJ@2iŨ4œĐ09¤qR 0¯S@Ĵ뿐(<ŌéLCÎ:QĮcMe8āķ@@'°ĨĮ˜3Å(\ô4¸ Ž(ņF0y4Ŗ…ÎiL Ō•Ļ ãą “Ž)ĄiĀ=éd•ƒ9Å.F(' b˜ĀžŨi>´¸=xĻįži§žižf[…8õĻŧ›NHČöæœ=2(Ü7ҜŽ)ķžiŔf€ŊL§+ƒÖĄ* T˜Į9æ˜ˇzĀæ…>´âŊûP"6<ô ˇ .ĶģŠRŖ€Qķ S€Ŋ"āŽ´ģsĐĶãœĶrsŌŒĶ‚āc4ŪĻ—=ķNĀiŌŖéI‚OJrˇšR@Ā˜†’éF}Šp:MŊÅ!ƒãĩ'9õ§“Awj'äRļ1Å ëČĨ+š’94švÆ)C)' āæ”ˇ F8¤‚)HéC0@ {Šh'Ŋ(>‚Œž†€¯zn1AāņH¤ƒƒ@=éŧ“Ō”đE8ž8 czœSņëLúR€{šPĸ‘—Ž)AÅ0ą/Š\aiģŊE)Ũš Á4Å984cÔRā”§ĩ)ÁĻüšëKŒsœĐąƒ‘AäšLœR†ĪZæœxÜŌ’1špbxŖÍš!4ō}č ÁĨ Å&3C}(¸į4ŧÍ éI¸Š8„ķFIƚ ÍÔŪ´ā(ČĨãhž)NqĪZ@}¨$” sFÜPgš“nM0rhfãŠsŽr)§#¸Ŗ9ZEš(Ĩ â“'4L RíIžqŪ“vH§ŸĨgĪ,Öķ.ÔiŽ0;V†wb˜Ë‚) @í¸c8īíNuV ã‘H ũiáM5q‘Å:“œô§/â@ )8āP:ggŽi€€æ—ž ™äb‡íƒHÉĨÎ >^i§­0ÕsI~´ IĀëSJŪ›šqé1Í9x4ŒöĨ9#šiĐŒöĢ‚1FĶڐ;PČ=)ÄQl"mۏ=ĒR=¨JaV#Šq#Ļi9=éґ֗ôgš@h`ƒÅ8 õ ZRh ֌ķÍAwpm­d—ûĒN*†ŦkŲ´ŒĄdF*ëéO•Úäķkc[úRū4:v õĀéHĄ1‘NhŽÅSßZißi˛˜ ŒüãĒũ„­y¤Å –’0wZŽ].MõąŖŪŽ1ũk”đåÕŅÖĩ +ˆ‘ĸ#h'ą­nI#Ķ[Ȑ¤¤€˜õĻága)]\Ô\cš:žĸ˛oÖa ČZfI–<—SŽ@ŦZO¨čŅ]K¨\+žz7Ŋ WŨėŽģÁ¤Č#ųÖ]••å´íæ]´Đ•ųCuĒIŖN#ši/î7œĒÜ 9U÷ßcww´ “ÍpŪˇēÖ,Ļ–mBá]$*6ĩuēmŊÅĩŋ•<ŪiSäQ8réqFMô/{ĶNSëNĪĨfkëŋEēÚÅYPAĮ5)]ØĻė Čz0üé@3\…ô¨ī´8nn&œĘŲÉZˇq=߇îĸ2JĶXČÛIoŧ„ôĢpW˛d)ģ](ÛĀéHFÚjĘr¤fšĪëwmŨ¸„f ÃÍú˜ÅÉŲ)Y]6GCLÎôÍ$L&…]O 3\~˛gŅŧIo¨ÚLv:į…&ˆÆîÁ'es˛?.2iF9Åbjō}­ ŗ…Îé,Ęz-lā"Tä…PՐ'¨ íīKčiŦ~|bž IBu4x RsšU8ŌûŠ@3K´â€9īN<Oē);f€jPÍ!ÉæÍ.:â—8…¸Å'đŠp õĨ'Ķ4ÁÅ)4ėä ĐGŊ40üiNÍ8Ō›ßĨ oJSžÔ¸ڛziqA=¨8Æ:šF'){ĐO=(¸Î4Ĩ(äĶąÅ38íE sÜQÎFiôīŠR=¨GSLį֜>ԄbŌ€úĐ1ëF;“Kˇ4€=č<QJFJNŖš`ÆsŠSŌ”€GÂ:PįŠ\ņM<Ōîô '…ŠzŌŠPūԝNi—€zĐƒÆ ô4:Š`p͎ô§Žh$ƒŌ‚2i3ķPƒīOč)¤ĸƒČ É bžpi äâ†ĀÁ bSHÉô§vĻįœRyü¨‘r&œNEsšFlŠMāqIÆ:ĐnÃsJܜŌM@ÅĀĸ›EVĀĮ¸8éLPwT„‘ôĻ!À('Šh9  į!ôĨzĶCό@‡fŽ­HnÔæ˜ ÃŽ´‡8Å8Ž9ŖPA b‚3Í.sHGhÃĐPĄGry§`““@†8$P ÷§ôÜîí@ÅÍ# ãŠÕ´mđ™JīS˛Āëš@=xǚuØž˛Šučę \Ú­bՙĒz_[%՜°°áԌW;á›ß'Nšĩ˜á­—Ķĩu'Zâ¯ėîaņAŠo"íG˜Āp=kHYĻ™ŅĻU+&™â -UōņŠIč=+¨ē?lÕmáÆR1æ6?JƒÄšwÚ´X‡ī!͏Ĩđ–Įíw@Ŧ˛€0zāU9'a$ĶąUÃiw Ķ(•rž—W] Ú(0ĮivÁë]^Ēâ=.āˇaĖø;WĩˇŅÍŊĞ[ŖŸŧ=éGācģŖK¨ģ\hƆBôÅi\ņm'ûĻŗ`׭ޝ–Ō×2ąå˜h]8K9Yē?ĘĄŪå+[C•đͅĐôĢŽä|‘ix ųČ×^3ž´ęüLTūØ ëšĄ­ø“]×&ūUĄ“ëYúÛmŅî¸ëÎ*#šOc7Á„ ێŊKâÅSá뜏ēīšËđž¯ogĸGĘŧr)9R‡Ö­ę3ËŽĒŲZÁ'Ė<ÉYp0;V­>{™ßÜąĨĸ\4ú´ŌŒX—Y_é÷Âk˜üÉr'‘Ž•ˇ¨ąŌD0Æp@Œ*X4Ģ1ƒmųG%FM$ŌwžÆgƒõ?ļčƌŲxNÃøt­-bÆ=KLš UČ>†ší>4ŋÜà -n9Qōƒ]UĀ" }Ļ”ô•Đãĩ™Íø5{ynfmŌŖôē’p3Šæŧ“Cep˛ÆČLkší„q5Ĩŋš]°ÜtĸzĘČ#¤u5ÉĪ<ŌAéMŨāä]ŦT=ęBxÉ5™wvG=irG8Ļ•'‘J7(į8§n¤ ㎴¸{Đr=(ÁƒŽĸ”ŒĐģRd‚i$qNĮ­79āŠLRQ¸îôîqGS֐ãģS0:ŒĐ„ô >i ûR† ggŪ‚}Š&€ŲāqIƒÜæ”äv¤4ėņŌ“ĨãĻh#Œâ€p"ŽA iHį€̚^Ų¤ŒR⌠7(ÜëAN3Q ‡éÅJAjLãŒS†@¤Î}č0§1@Z9 ɤįšP)2@¤E7ëJO4`@Oĩ4ũ)M7'wĩ ãĩ)ÉÉÍ(āt ōÄb–›4ĩ æŸÆE gŠ&œG S¨Æ94ŒĢRüØõ§2į‘@ @&N1H ô§¤ä@Åį§gmŌ”Ž(€‘éNŨƒÚš(#ž(ûŗMĮZ‚(Č Š"LhĒ[“Ö‰aŽávJŠë褯)9Í0°ČâHP$hǃ ĨíHyâčh=Š<ŧÄ Ōė`r . ĸā!Qˇšj¨;šP) GeŒĢ€ËčEAöSĮŲã˙žEYÅŠÜV ŽÖ[1ċūčÅL@`Aô^ĸ€"ŽâFŠšūčÅH>”§Š;t¤ņIË†ŅœvŖ9ÍäĮũÅ…8($â“<S˜ų§qš1ĮSMī֐ ƒĶ4ÜSē Cí@ÄÆŅĀĨá‡"šīNĀĮZ`4ô Š1šNGZ@. "÷æ•Ŋ4ž”¤ņFŪ 7v)āäPž1@āŌn`y6N1@ O<ĶIČ ŸZfr0(Ų4z҃ŠF84z 0Iâšfž€P=iŪöŖp4O’Ł֓„qīLCÁíšCHŧu4œĐ’ĐdķI•ÛíH3œƒÅ!Žāœô¤āšSŒŅŒĶ f‚9¤ā\úRGĖÔš÷ĨvÆh šCÍ&OJ`IFZhÍ Ī4ņŽô)ŋZ ⑏§šaĐcHr)M!<Đ1hÁ攌šBėƒ@ į4šÍ)ę9¤õ p{sGNôƒ“šR8Ī ÂizŅÍ3ãŧPyƒĻ3@ÉÆzĶNqšTāR Ū”Ū3֔Ži1ķPN3ƒÖĐAļiÄ`s@ āž)Ū—hÎsL$g­ Œ`n9āĶĀÜ|Ų aŠ)xõĸ€)Ŋ(ū.5O$TĘī@…ĮLSĨ7<Ōũi€ā3@ÁĻ|Āõâ•:ĐđAÎh$Ÿj]ŲĨ%hÂ8æœŊ)^´Ŗ9ωÅ.p:Szõ œb€`ĩyÅ(Û×į„S”ã¨Ļ‚âÆ9 -Œp94ĐF:P ŽiˆR@íCäcԃ׭Īz˛ÜS3ŽŊ)s@ÅĪ>´§š`ÎępČ C‡Ĩ7Ÿ^)߅!ô(E!ŽOAN\㞔ŒzĐƒŽ‚˜XķÍ9÷¤ ”œäfœ¤dŌwÍ- FiwsM P4Ā\ûRđ)¤â—¨¤1IŌH4đ´Œ(ƒͰCLĀšrā`; ŌrOĨ(ëHdld2ˇŠ“§Z\ž˜ĨÚsLBc4tŖ'Ĩ7œķHîã™Å!8¤€sÔĐN1G'­tĻw dĶ€ēҌRøĨ<{Ō QīLįoíJF "¨'8¤1Ų>”rO"›Ō” n0zRõöĨÁ):ŽiˆhĪ4š#ĩ/ëKƒHbg=Š´¸íHiGZOģFixÍÜķœĶēŽzPzt¨ ‘Š`'đ§ #?‡8 ŒšÅhe>´˜"Ž¤īJ s@„Áσ†æžxīIˇ4gŠiÜiücۚ:u p1Kœ÷ bŒSšŖ9ëIôĨÆ)L‚9Ļė9ÎxĨ#Ū—h͌ԃŠ4â­Í)Î0)ō 4“ž´âī“M, éM''9Ĩ ģ4„điĨr8Ŗ’¸4: rŸåM#­sŸj8c5( Ô@äbž7b˜‡öĻ÷ëNÚqJ}čŠëN$mÁρķRās@QNÁü(Ĩ!<ōh$Їšōhüf“žiN)?@wRāæ—Ō(#š@;ˇJiÉíKÍ/lĶ™9#4ŖžiBŒæŒæ izvύĮzvsÅ0ېzv9ĄŠĖãŽiqA÷Ŗ gŌtSŗM<šLR0Ī=ŠßZį@:qJF¤éÅ ÜĐA$S… #8ώ_j+qJLŽĸ“’:Ōã夞3KÎ3M$ƒŒR ÄãĨ8š{ŌîūA‘Ū€ũęR~\w§c’i†˜ 5 ;Iې ˇĨ3<O,qŠŒš3&Š}YG9Ĩ$įF9¤ärį4îĢƒÖ…<öĨlĀÄ4p4å ņL<ŽE9@UūĐ@nÔgրiˆP¸öĨÍ!ɧr(4œ“A=(S“@ĪJCĪ8ĨÉhÚHÎh7`ŒPIĮJUš ^œĶĮ3š uĻd†§“Ž)$Đ!3¸Ķˆâ€ŧŅÜķLoŊ ņHzsJ'­/S’i;ã4Î)zŌyŒĐ3ÍĨ0ä÷ĨÁ8ĻdîëOęzĐ1AÁäQģšqŽÔŸÃ@‡Rd @Ğ)v‘Ú€Š^ƒƒN'#‘M8ĐöŖx4gŋj g‘@ Œâ†č  7N)Į8ë@ V9ÁüšhR{Đŧ“žÔ€$äšv<ĶNJPN9ĻāķGA@öŖĐŒõ .3NƒĪŌM9öĨ##Đ9Á¤“š 'ą§ī@Å0î(aĮ§ŊĨ7§4cžqKGÔRŖ äŌt4qô¤ü3Li0;ŅŽ)Ā RŸÅÅ8nīF)_z)ˌãņĀäŌbˆ(#Ž)q’hÆh:ŠSŌ‚)A`ëÍ/9ö§pM!Æ(ĐAëŠŒŌŸ­“Ž”št Ōcš^ԝēԁīFÜЏ­)āRéF9ë@€ŒQ‘ëF)A E\sŸÎ†ÎzS“Ļ(#š&294 ķÅ´˜ôĻOŌ‘O°ĨÁ#€1Ԑë@ŅĪãIS@ íG=čQŽiAã CÁé@#ŧæzĐcƒ‘ƒN#ojN %1‰ÎJ“†ĸ+†ęh ĶØ ŧP)v†ķHņ€sOJWÅڀ„𓇛´t Į&”õĨČb”u⁊lQ×­8gŊĀįš&1Ō“iĪZw^”gĨ0‘Ö›øS‰ë@„cš@ŏB)Į­Š@!8 ¨šPFsJ@=h\b”ŨŠ6J1š`8ŠoAJp &i B3@Į4 )€c”pi{Qš@'Z9=E#ž){dĐvōi69§ņŽ) â€i1F6ô¤æ€héKßĨĨsÍ4äž(ĪĨĐIíې9¤4ā8æG”Í8ôĻō:Ķq“ži3O#"ŖĀ š äU\͜q@ Ļõī@ĻâāŌ­ÖiĖ>^G4ƒô4§•9ÁĨ'&ƒ× ]ĸŠfãEU'8ÁĨJh4āOCBGérF9Ļzxžiˆ^sĪJxQļš#S‡"ĒI$šĮJ1Í0iĀäķMĮŊĐ˜duĻŽ)IÆ.(wƒKģŽ)œSŽ ™yߞięI“HzôĨČü(ŨēԊo8❜´p[­;¯zjŽy¤@‡ō;搏SH­Á4HĻœÅ8cŊ3‚)A4€q r(<ō);QĐPsGԚ=éÃëL8ØŌíĮZLŠC“Ķ4/i¤ķŌ”M08íFsA84)â'c"”cžÔ˜´¤=é: bŽ3K¸ŠĨ ØķHxáh^x4ážÃŖŒæéŠq= Ōm4āiĮzbxŖqÍ8ôāķLāũiî܊vęf2qJ@˜ŨI֐´(ĮLRO#rŒœRö ĪjwáGlæŒSįc"— Ĩí@ Å('Ō—piœšP9ëKŒw¤ëLwQHyæ”` BtÅ&OĨ/n(š@#uâKLî Ž”â”āRj`&Ūr( ŌĢ{ ī@qÅčÎM)Ī\Ō)G֛šRZ`&=čį֔r:RŒRĶĶ­/$f‘‡g 3īFi§ŒŠ7zROZR=Š8ĀŖš\Ōã搄 đ:Ґ{Ō)€sցīŠQŌ‚) C’hŅžyŖ=h9Ī^)x¤lŒt  ö ļiŧäāSØd`Rgļ(īL$æ¤ĀÆ)Œ¸āR-;úĶ@§¯ĀaR;ĶpqÎjCJo×Ĩ § HIôĨãÍŗLl$įāŊiäRgրxšvh8ĪƒŌ€įĩG4Ŗą§qé@ ¤ÔҜôĨÁ§(įš\PmŖ4Š;ĐJ:æŠ2iÖįĨ.ĶIƒNãôĀ)6ԃšpāP(ëA )Ü`ŌŲâA Ŋ!Īj\Ō9 įŊ7$RžGiŧįš%Š֗¨ ÎīF{ä͊÷ c֐†AĨ"ŽiN=i€JnŪi@Í;€ŒRƒž´֔9k81sœÔ„´Ķ÷x bdž´ĶÁÍ;ւph{R°äRôâ‘ēfÃš)2h  +ĮnjUéPĢ7CR’JŠb`iøĪB)ŠTG4ĒË@Ėĩ?Ž2)‡–ëN'­?Í)¸Č”å9¤ãŌ“āŽ”´ƒŠ2ix=é0}i€€`ķN´‡š@8môæķMÆĶKÉ Bí“h­-.A c{õ uŖ<Ō`ß4ņĻõīO#“  c0Ĩ=éŨ{R7é@ #4dį̃F@ Í!=h\Ō‚Ŗž( |¸Å F@)r !|R—Å!āņMÚIÉæ€œzPzRíĐ’8§ëGQŒœP!FßJCJŅ×4PHÜÕ/jCĀ cAĨ¤Æ{sJ8 ÚsN J:R`gŠB8Ļž˜§ãÔSp(ƒĨ8 ^øĨ"€ Ԛ@H┌PsHxĶ"`ŠOZ◊ié@×4š¤îsHŽiIÁÍ-5ž´ iäæ”zRzx F8\TcŠsri1éHiį­(Åf˜ŽĸŒ€(íš4€F(ä æšy"€l曁ëOČSqŽô 0sMaN$ŽôŪIÍ  Fđ¤ÎN'Íہ‹Š)7¯Ąĸ\ĪT=sRĪZCxĶČÆ9 dŧJU4ÅaíOã4Ä;īOE÷ĻĄROģHÎ9 ~4~”ÜœsOÎF)ˆP7ŗKˇŌœ`P†BãĩŌOzMôâ0œšz ë@Ē[ØS° ĶÆĻ‘ƒÅĨ{æŽEÍšDûÜĐ įŠLüÔ!” į4 });ą@8ŠxŒšNž´Äæ—=ũ(eÉÍįڐKuÅüŊiHƒ̐´ņƒMÁ"ÁĻ•Í/i3Í 4™ Ōã=M.A9 ņHŒRîĮ‘OéIgŠsųSp{Ōä@T“x SĮJLÍŲ§qŠL`Qš*•§OzM´ŧĶ8Îy§žy¤QíN,xÅ!”Ōj^ôg&˜„Ps֟̓IúPOĩÆiqĀĻæœu  Æh zŌ¯ŨäԜÅ ãŊ-!éÁĨĮ Æ)^iqž¸Ŗī@`KŠJ2 RÉ§æÆ÷ĨČŖ€(wéAĀíK¤JLdúR€s‚h$ŌŽĨ.(ĀŖH84)0{ Z1Š`&ÜhĀëJi R:RŌ’)sœPcš9Î)Hĸ˜}(ÛڝŠLw€\` SHæ—ņĨÆ9Ļ1›yĄsÍ8ŅÛ­ ’OJ~”€ŌãÔP ĀĪ4¸Ԙõ§bŒdŌö¤oaNôéŌ”â”Š3īuĨ#Ž(8ëHˆ1Jr(ȧ@ņGĨ)¤ę:Đ`…āsJ Í h9î(įĩ4ŒĶ‚ņ¤+Ī€8b-8ĢĪ4Ā1ÜqJ?:AÉĨĮ'š^ŧRäį¤ĀÅ(āP@ë@¤''Ļ(x&ƒL;”‚:S‡<“@ ֝øĶqŽ)húR)p)x —>ôA™Ƞ$qIJ0) ãŠ^)Oô€CJ)I$Rs@ "ŒāSJi(?ŠŒq@'4¤ķ@Ŋi>”1 PŽišÉéKģ+Š`#4¤ûRƒCŠ`Īĩ7Ü"”Px搝Ŗ4ãŌ›žhûÜârqŠ\ķŠ(6Š)ÜŅH ,œõ§ Ō`â•AĪZ;ާ­į4ŊOQFGLĶqĮZLāõĨÜ l⁆✠F đq@–íMۓÍ3$ž*eSŒĐ!ę9âžĢŽ) ņŒsOŌ˜ ž 4dōiĀ@ĀÍ4r8âƒÖš8î(›X;a#'ŠpÉæŽzPpsÁĨ q“úPÍ?ØĐ*´ęNqŠCÁĻŲč&њxõÍ#ô(!ŠØöϝŌäአū1ƒOÆxĻíĀÍœŌzŌnõĨÎ !Î8ŋÃAbx¸Į¤Ͱ 3ƒÅāg4˙jL4g#­ Áφ )8ÜņJ¤šC3֔Ō;ûQ߁H:uæ—ęi€cہ‚0EԄāô¤1sƒÅ("œæŒc<Ķwdt ہH<Đ!Ø ŪŒ`Đ1ČĨôÍ(âÖ“ņ@ A>ÔĶÁÉĨ9ĮZ84yĨÎ) Ĩí@ i6įŊ ätĨÍ!ŽƒŒqH-1 õŖŊĀë@j@Rg”sڀ=¨hPXf‚i€tæŒs֚Xp Š@)éI’xÅ-&yÅĨ/Z:š\Đ!§ƒÚtëO&šN\š]Ŋč§8 Ž‚Œ‘Ö€H œĐq@ĨÆiŧЉĮրIĻæ•zĐ0#Ŋ'SNÁíIƒ@ Gz@qN€E!9Ĩ'48Ļ!¤ņŌ—­i9Í("“šq¤d9S‚Z€ķdĐ#§4üҜPtĐ4ŊE#Ŗ"€´dŌĒ€2( ‘JrGc4˜ÁĨĮŊ;Pi¸4î´Æ;ĐFA§ri¤Ō— ¸ëH8ŖŊ(¤#4Ŋ;Sy€ŠLN¤Ī4™=éŲ¤´™B~n´§Ļh„Ž)vŽÆŖ',*Lsõ CšĨ´{Đh īĮJSČĻŅČé@Ú3ÅŖ­.E.x¤ã֝ŠbôĄpiĨÍ!‡CIŒšSM´ŋĨ8L­($PZ iĻ€”āS: QøĐd敕[Ōc'ƒKŒĐöŖô¤< @I †E&â:Šqæ›ßž”›—§FĐx›X(Øį9ĄĒ"ėŊięÛš ā4¤Mūt€CĮj 9sF:S<öÅ'ĩ)B  QIŒqF9 g'HŊ- āHžô­“Å ČĻˆ§Į¨1@ Œ i4įô˜4€M¸Ŗæ”æzæ”ry¤<š"€ų Ō ynõfŨ‘@ÅaÉ œ p>´Œš4ŨôQųŅHf(=ȧ3īMačE"Ģ ė,Ų'ŠvJ‘HU”3RdŠb!Ũæ‚8§¨ã¯4„Kģ 5#Ę !Ny4ņ=9¤Sũęš06äq@HxįŠ™bP8<ŌŽ”ā)ˆ`āŠjg÷Ŗ'ԁĮ4dëJÅ4āĶėį  é@8¤ @IuuĻžN)お@4du§3škqŪ”=čIÁ”wz^(íԐP14¸=!&9 ŒŅ֗¨éH.{PrNE&1J)€ÂXE;ˇJZ¤Î3ŠwáMÅ)#<š(nĨ7œņAí@ Î(€äâ”q@ <ĐzāĐ žy @zRKړ¯jRã})I `(=)3JqšLdņKĐRãŊ   Ō—ß4čÍ8uĻԊ`/zSŒSOZ@iŊ)zŌn Đ!­&†9=)9 $w iØ&Â†ęJô¯4šäŅē“iįĨ!ÍĀ`éN=Eæ€ ŒS \@žĻ‰Î84§+Á4mÁëJFG4Â7sIÍ;§J]šŌÅ3Ū¤ÆiŒ0hœb€;Ō‘čiœƒÍ'$đ)y&Œ°8Å0KÍ7Šāh?8a‡ziu(8¤){R’G=ŠäqŐœšpéM*hžØĻŒ–Æ(É\R÷Í!ëHGŌđzĐEEŧûŅRŅ@\Ā,IÎŅR ƒšoCƒČ§äcŠC%''ĩ41nGëBäž9§*ۊbpĪJkn,éRí–¤ …ë@ų°EX@La‘ƒÖ”eiˆx' â¤P{šj‘ž”â9Å+ ņJ8P &GĀĐ~tSŽ ŠqÍ4žƒš&€Ã'Ū—Pqš^q@T~4.9 ’xÅÎ2)€ŖšRp):sŠ^äRÅ!Æ8Ĩ< M™˜R÷āRrŖ­ķš@)Áë@"Ōũiˆ Ļ‘ŽiIÉ9Å Đ^ĸ›ŒŠP c…I˜ÁëJE‚”Ei2i€¸į&ƒ‚zRΐō) vÚĪSHĐ9Ļ!Ã3FyëMJ(āKM+•Ŗ‘Ö€ĀsH[Ži ŽÔōúĶÁ₤ۓÅ!ŽÜ1J0z♒ŽG$SėsšP0hę($t¤ÁĨÎiƒĶĩã‘@ôÅ;ĩ0Ŗ FîŲĻ™Ļõë@9PhčhĮ4‡Ō”PyĨf“=hčzĐž:bŽôv Ōžôc=hĪĨ& ;Ū”ā÷ĻāŅ@ŌŽ”‚įđ <ŠJ1‘JjQGQKŠšĻžŧSŊ¨Ŧr(ė Mžô \ö¤â“'=i{ĐŽ´MƒŒĐŽĻŽ”ƒš ÅMŽé:iÉ 4Qڐō(į´ŨÄŌöëH>”Ā^)2ĨlԘhĮ=h֓’´Ō¤Ž SƒŠBŲQژ ͊\Ōš@F sIĪĨ'Žh#ŠZ Œt¨Û ŌLQMÜÔSÎjHОHâ›ķV2¤uÅ!ŽR‰Úœ+à ‰ˆE*‘Øb˜‰ ž äs@]í Č!{P‡ĖpE?n>”ŠÉĨ?0☉Žĸ—i‰ĀÅ8‚('ŒSpN8Ŗ$͆s@Pž”R“Î)ĪZBŲ4 R€=iKcŊFĘŨš§HęEķJH4Ā\ãĨ(ä{Ķ3ļ”gqĮZNŋJBr:R¯J@'|SÁÆ3€r)qĀ4 9ëJĢžĻ˜Fiã@. zv C€‘—&ƒIœ (‡åé@9éASŽ(@ Ū”qMÎŪ´Ŋh‡%ēRžGƒīuĨ'ā1M+ĪZ3‘Í!9´Áh썧íĸ–Ŗ2ũ>_ƝĐqMD'š4ō0qŌ€;sN9ĄG4îĻ!ā(éB€;äŌ)âœ(ŖžhįŠNO­*įĀô Ž)FE/¸ ˇZ]Ā 'SŒqHsž;<Ԑ=)8äQ‘@QßĨEšbpô¤$R(îixį4†ÁĨāqM#ĻÚ^´ĀvGĨ'õŖŪ‚GŊ  f‚GzBN8ϐxÍ;oŊ.8ëIĐf€Üâ€m…†x Œ@9ĪjvF3HHæ‚8â›ÁãāĒÔŅĮ^”„ät  84Ūô„āp)G4\´&ƒĮ õϞZ21HFí@ šPiŖīQš¤›ąÖ“šbĮ8Ĩ'Ĩp:RƒMÜ})zĐīÁ§nīMëړ4Āĩ*ãیü´€ŌüŠR}ŠšÅįĨāŽôŖIœöŖ=ą@ÅäĶ”‘Å0g֔ë@ÎE7,¤ƒKēRŽŧŠw>´đr:P1Û°(ëMįŊƒLšp8¨Á ĶÁÎx 4„“IŒķK֐8â—9ëH}Š0hōE!íIŒQô Ŋ(&“Hhgšp=i§4d
ĨĻg'š^ôšÅ.}%Å;‚:R)yÅ Í0sKÍ0Žx4å4ZN3IĶ­ŠŅž)÷ĨÛ@ ŸJ2sF4ŊM Īj2AĨéŌ–€NM&qڔœŌ`c  ,hÍšp^hœQ’h#=hÛĪZ\(ÉÅ4Zvp(G”fš\RƒIGQ@q֔šn)x æƒÁ Š(ëG~h”â€RĶsÍ8äôĻ Īĩ‰ã{Ņ֐Ã&’ŒõŖ<ĐsHN9§­!¨É4ŨƝMÁÍ#š=Š%°)@"€ԐšĨũhÁÆhĨ¸ĨŠNM8gHI¤4gŠ:ŌįĨ8R”¸>”Ķ‘N÷Í!Ž´™4ĖsNíAëī@š܊qīzBŋbŒúS1žzԃ‚01L ãĨ8Ō™ķžÔÁ CČį­/J`ÉlŌ“ëLgŠNOZ;qH­?# 7ĩ0ō8 )4ōŲč(ÚŊ4đ)TžĻ€8áMÜ{ 3žĸ€v:SžS֘GĨP!ŨņAĀ˜24ŊM/ô\Ō ãĨ.p9 bdĐ­ž ƒŠ3Š“´Ņ€h98Å_sAÎ8éMŨž)Û°x ôĨ4™$Q€(ܓNô/^”‘šš§Ú™ƒéJ¤Ž´ņÍ'Nô™4cր Ų¤Sž b“ ŅÁҚhĀc§qžišįŠ3ųĶ;õ¤'Š ņHcˇ{Ōg'ŠëIÎ}¨Į­(äuĻ῿ހĐˎ”Üāįĩ39ôâ€$,"€ø¨ņÛ—ļ(ûŊčŪ}i Œâ”rhęGãFA85ČéF#ĨJqڔ7TcžôáĀÅJŒŌîĪŌĸČûĻ”ڀ$īNŖ @oJ“ˇZíšg4ĸ€یûŅÍ%;pdŌ(ôuĨÍčÅ!4qÅ)š1Å.AíF}Š œã§šPE›p(Áã Å))ˆ@NiH1š8ƒIõĨÁíIېÍ'4riÄq@ ŒĐ("‚íLíI’)Ô‡Ū>”f“ŸJ:šp#¸ĨéIŽiI9ö Ž:ĶsNbi3ž´ÜRî"€qĐŅ@ “Ū”FhÎE=iCf“ˇ4‚€° šQIŠ=Í)ā įĄŖ­! qô žô”ā8 84gŠP3MįĄ “ŠPM4õĨ !Ōr§ÚÚŽM&áԌ‘MīNšæ”jnîhÁ 8ĪJktâŽCtâŒPM) ŒĐ›ĪJ@!>”™õ žELĩ(4™Ââ(ĮĻE!üšR}čÜúŌ’qMŠqāq@>”ŧcŪ“œQ@8Ĩ…Fi(NI¤ëFh†‘A-KėEÔ pāŌ<Ō0lqHČĻ!)™bŨx§cHTÎiâY¸Î)§9įĢ׊MŖvi€¸č{Ōäõ I†"€֌ņŽô˜ã­/ZhČīO'4͌QŽôe€āR†$QÔSp1@ [ņ§ íρŽôrE(ëKô¤īIëŠp惜ô bãրíHFGZByĨ Ī4†ĮZRĀžiķœŅĀ&€ §í'Ŋ3žŨ)wb€ ķH~÷ZôĄ”īHbŽ;ŅĶŊ āsC`ͧ`ŌLį4ü:Š =Š: Ņ÷iHĘŌ zCĮ=Š í§u $šĮz1ž”t★Ī4}áHH”{P0t&— ûšh$zRõ֑ˆéM^´ĪCÍ>Q֓v:Ięhu´ŖœsO#ÜÔh SÉÁõ wŊ.î:Ķ 杴šPØ=ięÜTxÅ&i1`M9GdT+čNiāŽÔzœtŠwÔ@ŒzRņ@Î{ŅøĶs@äPŖIMíJ¸Į4ŧÁ¤ :RāôÜ/\Đß­Îhf”Ú€6MēĐ4gڀ2:Ōįĩš(ÜŪ—뚏$Sƒķ@㇄œņHI'š9Ĩ#Ž”ŸJ čĐAv—vE íŧsH"—Šh47)€î´p)´îÔLķKÆ)ŊésĮ4qJHŠN=(āŠ@į84qBŽš  !ˆ28§´œ֎0Īĩ!#ĩ ƒJØČÅŠBŪ”Ŋé8†)zpaļŖã­ņÆ(@1ۚyëKŧHqšŽôŧSzPZ‹šaæ—#4ō ­06)AÅ7æœ ‘Í0:uĨŽ´ĐĨP ëփHGZ: @õĨãŽi3IĐĐ1ÄķK‘Žĩc”qĀ<Ķ[šO­& bŽ”„â—ŠPKzRƒ‘MÛÍÁ @IdîĨaīMÉõ c!é@āf“9 QīOÁëHzđĐ:SđiĘyÁĻŧs@ ʎ)<Đ{sG~ĸ€ŌąíI‘ëMį<Đ1Ø4Q‘éE+”rsŠr1Į"ŸNĐŠã’iČqHF1Š:šbۍ›FiāP´ãĨ/lQœQ@ 9S‰;x8Ŗ4æP( <šw|Ō€9âŽÔisN) <ĶŗJh?0Ūô!lõëJŠn8Ĩ^V€7$fŒÖ‚ŖŠ@PwĘĐ7ÉĨZ’0 ĄÁ’})OąĨj‡$g ëÍ)#˜ŦIŠX˜†ŽiG  SOzCMœbœ§åŖŠĻ!ĄĪÅ8ôĻ5O<ԘĮJc p¤12i `ĶĀĨÚ)ÜßJ\ƒMčH§`i„ P N)˜=)`M7ŖT­Ō MÜæŸÔtĻķRˇJQŽ”×ŠœŅŒƒ@[đ œKœ¨ @SÅ#ĢɤɏČõ ŒŽ ĀĨ<);Pƒš}(Æ1F)qŊiÎė͈īHœƒ@~fĨæöĨ#RJq9č)­ŸJUčh$úĐ)Å4͈īL"€$$į­ÃīM¯ZXúPĄ=ņCp1NĀĻ6Ž¤ŌŒcŠFäR¯+@ ¤´žŲĨ{¸ų5sšp8īHxéM-@‡Įzzžjâœ>îh`A§P­?ļh¸Į4Í1iwĶėņMų™zbÚ‘yÍp0iAϚ­ŒĐ)Ĩ#Äã™ŌIĐq<Ņ֘ Á§¯J9ĪJ\¸Ĩ)=iˆLĐFGŠĘÚCÃ"ž3JĀR0€)ŧĶ—š\h§Ĩ(éHiAíLŊJQŌ”Š3'4u8ĨĮ4›@9īHaŅq@įĩķN mŊ1ĪvÅ(ûÔü PkÅ­;Ąâõ 'ĐÁēĶŠ €!…)t¨Ã‘:ĐĮ&•šæĨ`1PH1@ /Šp9ÅFۚzö tjvęNôė P[‘Hŧu§Í'z\ƒéNm=zĐ9ŨFü’éKŅŠHÁ BgŠa<ĶÅ!ĨO"—¯4ƒž´đJi曂žTi¤|€øĄŽ;˜Ũh=)ĻÚŒ i=¨cšŪϚyįĨ4g4ž•"¨Í7$NįniðíJ āP2GŊGК›¨Ū4šĻŒîĻcžĻžhãëK@94´¸ÔRdŅHG˙Ųleptonica-1.86.0/prog/witten.tif000066400000000000000000003234461506303110300165550ustar00rootroot00000000000000II* Ļ& ,˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Čd'Â*Ãa‰ &€S ŌÁ0s´āJ <0ü†@öjøaû b20Q°öé°ûAļRM ÖļĶīĐ~›˙éũŊ˙˙o˙ßō—„ /ũíHD˛ Q˙ÚĻžä w˙ kč2yų— f-hRƒ@d2Xrž×íEh&@„T4Š–xˆeąˆ ˆ ¨ †Ö+Âā†jrƒJ{ˇ Ĩ ¯éÚÄ2 ‚ąĄlE k 2t„Xä"ô† ’ˆ(Âß°ŋŊø ~á x0'@j‹ ‹ KĸtGDxŽŽ#€yBpÂD20ũđøAŪaŋøˆˆ‰ ë)⮑u* ā° ‚§zŌ%!Ą(D{„zaëūœG%x.  ÉÁÁÁ€ÉŒtCҍ+!ĻŦ†ēpާ;jŸÜ/‚Lƒ 6TØL“ tBŅƒ# g $H„u 2j6ëĀ Ā"X_Áú°ˆl;#ŊĻFĘP š‹H Øm¤ƒ † °°Č0Ô ÁŋNÂú„íztxNíaˇH'm豈Á¨1i„É1~¤UF ĄÔ[õ۟iÂMÖô“vôč Ãm¨Xv‘ŖÜędr5˛pŽ€@aū÷­ĐO[č Ût“¤Û|,4ôÕĩ“ƒ Q‘ĸ m`ĮŌĒëŨ'˙IģŌt›úúéôî°íH6 \ū–ûŋ¤õ֓wúAģ¤ŋ÷ūē§A0č?×÷úO_¤ß̤Ũŋû_ë[ͤiũ.˙Ũ'ũŌnú´›o¯˙û¯}&÷đ—_×N—é7zē]˙ūú˙î“č-é˙]ũ~˙Iŋ¯˙û¯ô›˙/ëô›t›ŋéģũ˙ũR˙K§đAmm{UúMßēˇxõ˙ĨúM˙Xãâ¯˙?ôé.ü}vēŪ›ūBÁkúZé7ˇâ­ĪĻŋõĒŽ>­ī×ūׯß×M˙ãŦō~éÃ˙HwĻöûVö˙ü.ū)7˙Ģ{}ūß˙Wû~Ŋíö“{o˙īëũä6^C2ß Ū×Ûī÷˙ôŋĻū˙ũ?éŊŊ†­í˙˙~ŋȁzū—ūũūßūCd{ūßáú˙ũUöøtũ˙÷Ĩ~AģĨūŪŋ˙ũ÷Ã[Û˙˙O|†eû¯¯˙ˇÃũŋũd l÷úŪŋë˙ĨēžŪÃß˙„AĄ ˙ûĨézūü5ö˙˙ŋŽ˙í믯˙ˇ°ûÛ˙×~˙˙÷Ál/…˙öøß˙î“ūˇ¯Üqņ˙ŪŪÃßoã×ûõ¯ũ˙˙ßŊ‡ûāģjūģé{˙¯ˇ°˙oøūŋ_Âũ˙Ģ˙ˇļž˙˙ߨ_˙˙}ŋÛūŊ_׏ۑ5ũÛÃö×īzŋˇūįPc:‚ŠÎ Į˙ÛÛūúšˇū˙˙žá˙ëo ūßīúß˙÷ûū˙ũáģö˙æ _˙ˇŋžß÷íá÷ßŋÃûķ¨1ų¨ûūÚ˙˙ˇ†úÛ˙ß[÷ú _ū˙˙˙öđÛŽß_ũ~˙ž¯ŋû˙ûā˙ˇßīĄ~÷ī÷˙ũûuˇ†īÛ˙˙˙ûö˙kë˙ÛÃõˇ˙ũ˙Ö˙㏋˙íīũ˙˙í˙ßõˇ‡ŋo˙˙÷˙˙˙ÛûÃoí˙ãßÕ˙í˙˙ŽŪũo˙čøøõŋˇūßõžöģ˙Mū¸ũ˙ūߡģÖß˙īĢģ˙ˇũmīûūžũųGö×c{Ž:˙Ģ˙õoũ¸×îģ˙ęūŨ˙ëíĨŊ7[˙ũūŋˇÕö˙ũČ7‡ŌŪ˙éũē˙Đ~CN2ą¯ļ–á=ŋũoõũžũ=6ëÛ­ūŌß˙ßÛ¯Û××Û_ĩŪéëō—×ũ}­¯ē[ûio_Ūˇä5aĩũõôĩÛ¯m[_˙_Mēūõõ醗ļ–ũ7J˙õĨé}ļŋŽ­¯ļ–÷Ú[ßëīęÚúˇivŠĢkíĨŊ¤ØK]ô›Kîõí-&רa-í Ú[˙úWûuzˇaSMmXiZm¤¯jÚ[˙¤ģę­Ĩéļ˜K°Š…a…]°‚ŪŌa ­õímoÕ´ŧ r`”ŅHA#@à i†I>Ōl$ēöĄWûI°‚ōĩ‘ A„Đ Ķa„o $Ã$Ũ4ÖŌMoՆ—„ėŒČ‡!´–B†T " d@nà &éϚ*ˆA§Ļ˜VÂKĻáP0Š(ƒPŠ ĄPÅÔ&ņ0eˆ74ĶC Ę-Ϝ$a}7ôĄ…ႡiˆD5R9ĖP†XĄDȂ¨X h0˜Ca„‚~Õ~ †á„V÷h0ļAQ!âD2ƈ5K„ öFAXrˆŅ ÔÔh!)°d"@ÛČ6Ü0‚ß˙íP0ƒˆj b"""""$ Â<ätG}%Áđ/r Á‚¯îŊ|0¯ Ib.CL‚ƒeBķa”ĻaŖ:RĀđ/ūƒâЋˆˆˆˆŗaĒ™°]3@ΤāųÕČų @^ Јˆˆˆˆˆ2 Hᖱ KQɎ#ˆ˙˙˙˙˙˙˙˙˙˙ū@˜&py``xAéá=áz č ւoH>“é>—ī¤˙ę˙õûë3@˛ûîũČdoa Éa;KØ"@J@đØ2Âö$3EĶ x` ‚ œ)âüč( q ĄÅĸL ADx9 ĄŖ`ƒP@˙ĩˆšĀšú 0AŨvˇÜ§„_˙pDDéĸ0;! “ æ.Ą ü6ŧ"͆đÁr û Î1ģAd@gɃPbN‚e žŨĩA đTvöD ÛĐNĐtˇ­&ƒđéė$žˇ{éözMũûđöĶIöĢöÕūúOß˙Tûˇuũkü?TŸ˙˙ø¤ûÖÕhÍwØ}ßô8÷_ė=ŅõIŋũ~ģú´ŧ~˙}‡˙ŋķë^;ÕŌkīmaũ^?__ˇûĨūÚūÃô¯˙ëđßīäŋîŋˇĒÚZŨyņˇõ˙ūžžëo˙Û˙Ã~ēZ˙Ĩūú˙oõÃß˙õūŌ_×ö×ëÕ6ē÷õë†õ˙ ÖÚúáô•ø˙ëÂāŪ•]ēņáôŋ˙ŋđŪV˙ũ/Ãä Š˙ö˙ÃäÔ+w˙Ĩø~ķP/ũŋDēíõWá˙ŌŲÔáø%Ûßŋ:¯˙õūøgÁH_ŋîĢŋâŋ˙{÷ē˙úN—ûö˙ũūûēŪūú_˙'ˆâ?ũ[õŽ• ¯ú^;ûwūĮųXFõŋũ~Õ_˙ĶūÛ˙˙ë§˙Úū÷[l#˙˙˙úūŋm%Iļ˙÷˙˙×ūŋē÷n˛—û˙kĨvŊ˙ų Xîŋo×úôũ_mĩ˙ß×´•-ŌŌūŋîŊíuũũvŌÖÛ_īūģ û u×Ģ׆–ļÚV’~ëkØJ÷muõ¯K†UL0ÕīíyP$Ķļ * M5tĶ ÅĶL0`’i§IĘ°ÂØD3ČjĢ \i* 0ƒ=0‡†“ „ÃC„3eŠ šČs<0¯Ã M5Đa,_a‚˙¯Á‚šŅ^CXNžßōŠDH9BlđĘ„Ęõ(äB#Ĩ%ķˆä]–@˜ H8ˆˆˆ‹ˆˆˆˆŽ"?˙˙˙˙˙˙˙˙˙˙˙˙˙˙ųÁHr ã”9Cœ| ¸ˆŒĄĘáŠ„2,āO ĸ&hDZ‚î <NPįĄÂŠĄÁžÁÃáDtˆ’ŖęŽäĮ ļČ‚9`öĐÄowõ!° …! āŋZrĨ`‚ˆČ-—čD aí5øL) T°ĄB`Ģāî@ôø@˜E>#ųÃ*Š0PU @ķŋ!\‚°ä4‡žˆčސbø@īMUBĻ×ŋūA¨}ĻmPžûčß[ĮUÚô˙Tp|>T˙Æôƒ6‚)ČmŽ]įÂ2 Ɓ| I™ÂↆŋeÁíPAÚ÷z˙ū–ˆ†Cų~K͈h4c>VA§ĐxLh\< aEâ~Šđ{ĩĩëēęŋËĸ:LŽˆę:.œķhÁ4w&ÄrFÛF  ƒŖâGš0Ãđ́āBČ#‰ĀĀû[ũ< ]WOB1‹wbšĻ×Ü=aá=6ސ}鴜8?ēŽ$đŅÃ[‰đ d|"ûëęé_~ˇN­žū̝Ž>žÁ>Œ҆/Ûq„baÃÚd¸&dæ_„\Ëđ@Čō|a|2Æ]8‹ú˙ú˙WûŪŋėUu˙ HæÃ†‡Ižœ°‰°fĻŌt6—š0l4FÃA ˇá=ƒÂ0‚(ũŽę×OīØŋVˇū̝ûÖûÛé=+é6•îÂm[v’oĒĻÁÃíƒ6ų´Ą#˙ÄfŽŋbf ˙˙ī]ú˙Ú˙úÖ÷¯I+Ū’ö›×ãa?Õd!ā˙øČC°d˙ũĒz˙˙˙÷˙ĢkŋZÛû÷­õôŪ“˙đŽ;ũrļË˙ëa‚3 0GÁ‚pĘ §Éų< C’ŗ9rcĘōâJČW%;ÆbĶČāƒx˙˙Åxcĩ˙×˙ŪˇŊú˙˙č,˙æĀ€Xl _úü; ˜P˜A Đ‡„ Á&‡M ˜TÔ `ŖQA†ËĄĄĄę!fAĸjA̞xCE#i_˙‚ėĖ$Búâ+˙Ĩũ¯õ×zËĸ:Ū‚Č܏?ũ,Œré6 a5uIŋü˜ú^@ĀäKÉ—„Gú_Ŋ×ī×õüŽŗČ"‡m5´´ívŌÛNÖ×ūéŌĩ|0ųŖ iÖNēØf•Õ'A†OĻPĄũ]ĒûŽ•ĨŽ“č噕ęî“˙˙¯oëë}ē˙i?öũGB.$t¨JFv’li°Âl0I´a†Ŧ0Á 6°ÂVö‡ũĒü-= û xBŠØõ¯oZëî­ôA´÷tĢ˙^ŋõ×ō|ˆ:˙d ņõąß˙×ŗŠÂĶ Å1Oy„AÄžÃÄ*‚*‘#É&)°“ûbƒõ˙ū†ˇZJ?TŦ&Ļ ˜M0­ĸācČūÅÁũwᴄDDDDDDDDˆ8‰ 8ƒ0Œ#y˜2~S ü†ŧ%ŋęC ¸āČāÔ{ˆˆˆ`šxBi„Đh1 ŋK¯ÕqF1ĩ×õũū*ŌũSÖ°°ƒúĨ눐3 “ÉˁAw#âL†‰hr9kō YräŦ†Päˆ,†{!žiFFęžÚX‚xA„PL a „ ˆr:L&` `‰Ã0j`äČNG@.hÁžÃÂH9rëîM:čáZ—ƒƒ@áçũņ˙ˇõ¤ņīuö­˙cŋ¤8[úë§kWû܂ģžŋ Žëũ/ëÕaw^˙ü>ëĐë÷C˙ōœ¸įÄ{ b˙˙˙ũ ?˙õŧ!Øbū—ũī _˙ëôģČhŒāŌá˙đ×˙˙˙˙üđ4í~˙ÛņųüŽ ũųĐ5?ķŒå éŖ@đŅúãø[ÛKū˙īõoũũīūßú< ŋúÃŋ<K˙ûđŋiīūž°ģ÷ûÂë^ŋ˙Õ>Öŋ˙ũ˙ā/ą_˙˙ø(l˙Ô?…ŋ÷đ_úü|Rkk˙_đ‚ë ˙˙áVÁ¯Ûđ_˙đŋū˙ãŽ@đ·r'ų>#ō$dtȲ-‘Ųģ?ūBˋ丕2&r|C˃D¸–ėØAF{đ‚ũ…˙û}„ Ũ}Ü?„z÷˙āŋ˙˙Æ0áŽš‚ĻšáAB„ôÂ7°áĒŖiá+‚a2^žšhH&KĐģôģŅ€Đ˙˙˙ÂXp—×ūßAÛ˙ö_ũ¯éH6i&ÃhēĐoÄŧâGtƒia ŌáF ŖŨ\0ƒAœ -҇l„˙Ōoöë˙í,î—í˙ŋĨŨ˙î—˙īëũ:[ĩVÅjûíéēũÚWŌum\1_Ķΐ{ ëø["Įúë÷ļD}m˙Žŋ bé{ģõí/īÍä|Eķ›'ķ!Į4Aļ–Ađ†\]ũéŋIé¯÷kõo˙zûßnŊúØ`ŋ ~› %ûuhļ°ÖėzįÖû[˙öČâȏûöB:˙øá5FđƒŪFđÉų$gĖ3ņ?Č4pL  ŪO‚ }ëļ—ã˙īO_ļ—}ēßĐ˙ÖöņWvä`A˙Յøh‡¤ÚͤÚ’{ôĩ8đՆ#ûa…ÔãûwÄģƒĶĎmÚ88fÂC6;ö‹Ē0Ú7?FF|1˙[Ļŋęũm¯ÚŽĮßöŌ÷îšUcUƒjÕXi10ŠĢE_a+I´ŖŠûJĐØ¨¨aâ­ízoIéĩ~ŨŨÜ8|­&ŌÁÃi|ĐtŨ/Ä˙˙˙HAy˜eq ˙×ĖĀđÂ0ƒ“č Đ;h&ƒA°Á*„š{RiDŋ´›Jt^Ō´˜‘ÕĻĸ—UiØ‡×˙Õ˙˙˙ĨĨí6“{;ãČ`˙˙Æ Ū ėõŊ°mvĶVļÂM4ÃÔ ČziĒbš¨Ļ)¨&˜¨Ē­Ļi íå šmõöûj˙˙˙Mw˙¯ˇ8eÂęl„lūŋ\āĄmô}ŧ#—íÛYTM #ˆœ0™ŗÎJq Â (^S`0šjŠ˜Â &*jšh0ši0ƒL&Âi ƒ6H×ü1¯Ú˙üUë÷īčm}˙˙BNŪ‚Ŧ›˙⨈ˆˆļ""""""CŽ ˃0‚ aB`˜L0ƒ „Đh0š˙a0šöādoöh QũëÔzŋČ ŽEŋ¯K˙˙Kéä‡"Ū—íĨ“ōCƒaÄDDDDDDgÃ$5ƒ?đū2*?˙øŋõ q]_céí/õc_Ũ´ŋ˙°čØ^#ūôp8˙˙ũƟoƒí‘×˙öȏūŊžBū×˙¸I˙ō Ūč/˙˙›˙6ũĩkKūÖëôĩkžû]×û¤ŋß$8?é’˙˙ü{VŌÛJí>Ͱļ›k§Ú÷ēVžÖžˇ­~Ŋŋõë¯˙˙ĶđŌbšb‚ ‰ lHøq@ƒ6)‰t1#āÂv`Á&$|iėR ;ĩ˙˙î˛u˙˙˙!lŠ?kd û#âšÃ[Ķĩ1…ė&N¤ä|Pbši}Â āŠŖuß÷ęÚë¯_kí˙ū¸ˆˆˆˆˆâ""""" ČāäpSA„"4 Ĩ…_žŌm&Õ´íu×õm{I´ŧGÂXD1ƒ0ƒ†‚<$ÅDƒ‰4ĶbG@ĶVI† v“ké1Xƒ#‡ ‘õ#ÂLBh0š m Đm8A„ ˆLP qLWÉ hØIˆˆˆˆˆˆˆˆƒ"  !˜az¤ AˆŽ#§7áŅ`iŋƒ#é„>"$Á@ä¸đ˜ Č,†@š f<(v ˜PP@Č)ĀAé…PPRƒn5UTĶ @ņ3Ũ–ē…O ļčC${uh8uFåøGkŊ žĄ ÷„‹`íkīBôC!áÁ¤|†@wI˛‚ĩßŌøA< ųߐ<1ÄĖ §“~$õí{Hņ‹Ķ˙mu×!ōwŨđāāúĨúūē¯^AĄß Ēīūļ秝í~×ūģúūēúã˙<5Į!ĄÔƒkՐj˛'¯ë­ūē˙<3Ė2\0‰ãē×˙˙ŖsÃxMĨė&WŋTaŊ:× ĻĄ0˜Föšé„T„Á5`K0GC3ĖÁƒ Ådd0äĻE™æCK”†~Čf9؊C8äÂ"Á đCR/õ×ũi6—p̈́ƒƒË¤Õxptƒa‰y†pH8b]‰°Äŧ%ęA´›‰yŖ KĖ(*a5Âa4… š Á0˜L ‚ Â…0D bA ‚œ3‚:s|<œČļW’ŗšdČ?~ˆ1d>˅¤10ęŋë­´ßņ[ģü í;ĩ[ ĻŌēZ}ļ‚… ŖfŽL*ÖāĄ0PĄSML=… „Ô&aSL Ķ xM0ƒ0AĻdũ2ŧ&™/'ø@Ņ a„ GãxD‚›ˆ cˆy"ōVPä‡ _2Č5Į]=Ķ]ßßôĶõ͝NŸēĄ¤Øf`”j ĖćZAÂa PA°‡(āŠŖ†Ŗ‚„ŅʎOO †BϘ3b›mŅtĘĄđ#iŋ„`˜3 6Ėk„ß ŖaƒÜ. „02S/Â' €oZũ˙Åŋūē˙û­˙ëk­ŲA5ošIãiöH: ÖC„ģi<‡CKĤØ3áiĐŌtl„ô.6˜HáÁQƒháôœ1T B ‡÷¤›A K¸f‰vŌmÚ8t_xa‘ļ4`› „‹ŸÅo˙­/ņß˙ũ­nƒ]ĩøpͤī ü5îÂutlĄ„N•†mÂ8ŪÁ¤û¤Û(7ēˇRCÍ ŊSétũ]=W˙zˇûMôé?öõíŌNģ´“ũ­īäcאô_ú­˙UįäŠ×ßëÍ zĩÖŽÕ?´ũÚŊŊ×iÕŌo Ũ?IáÕ×ÕņĒ˙ŋ­'ëęûIģã¯Ē÷ũū?˙´œ?Â<ŋ˙ëņũ˙úŋņt?úûīĻ ūûēŪÕ6ĶØ¯ĶtíŽî“Võßīũz˙īúŋũúŋļ–˙6 ˙´cká?˙˙ķ`˙ã˙˙×Ĩ_īõ˙˙×ŋ¯÷Ū˙ũõ˙âŋ˙_­°ŋ´Ŋ¯á˙ũ~ßĐnŊ˙¯˙˙ ŋ!Gũ{˙˙ũ…˙˙ ũ/ûû§÷÷ĢÖ˙˙ü‡§õ˙Žĸ īø…oƒ˙$?úN•ú¯ų!˙˙˙ŌüīųāŅ˙×ôfDp˙˙ũũ†ŋ˙kī˙˙Áŋī˙Į/ßä-4™8dŽ÷ūģõūŋ˙ũũ}˙ŋõû˙˙Â˙˙ŋû˙zoØw˙˙ žl1˙÷› ŗ`Aˇ¯KÁ¯ˇļFų?Ú˙Dc˙¯˙˙Ų܊=kõ˙˙˙˙…˙ũß˙Û˙ūÖū˙˙ü ŋõ˙Z ÷ũí ßÕ­~éîƒz×_ë_˙t­_˙ëī˙ü˙đŋßŌūŪ˙˙Męß˙˙ū˙ü˜˙z_Ú^‚ü‚ų°Âļ•­Ĩ 'ęŨ6m„íl&úĢi6•ÛkßũūŋáëÁ~ŋŋöī˙ÛVũŋ¯ũtŋ˙˙˙¯Øũv2(áö)Š@ØĻ%ö6°ÅDēq/ÁSč0ƒ  ÂÅ1„Aďƒ0O˙ŋ˙˙Â8˙˙Aŋ˙ģû˙˙áŋ îŋ˙˙ļD˙˙ōw!˙ũjÛÃ0ƒ#„B;A°ÂÂi§i„Ë’wü4ÂÕĻ–˙o¯ŋ˙đ‚˙ģđ‚ū˙īđß˙íĶöûuúļģkĢkkūžÚÚVžĶkīÖ"") œ,qū˙˙û×˙û ˙õá˙˙Œ7¸l&ÚI§wûÂÚM„˜a>Ķm%ÛIĩĶ˙]:ŋ§˙ëû!˙ßKũ˛˙öëõ÷nžŊ§íČáÅa0ƒf|6!5Äē `ƒ8 ØĻ*$|0ƒZbGA°Â0ƒ{\†@BÚūŨ~Ã_ĩûõū¯õūßäŸ˙_Čw~Č`w ˆˆˆƒD0„0‚ &DXAÃL  &“7kŠz„U=(˙ÖÉŋĮí zÚÚe?ė0—Ø"?SũĨ_uĨõīũ‘^ôÄDDDDDDE!eÁŧA‚Õ&ĩÛJ?kN?bCū?°ļ‡ŨŊ6[íĨūßw_W[ .׊CąMi°Ōi;i;;x—I{iv6;UmcVëīm/_ãĩ´Ŋ ÂMaˆT`ƒh  ¨ ƒ6CVA„A:“é4Ķa„&ØI4í&ŌNKęëjë kÆ@ũŌÄi¯a{ Ŧ)᧴ՅjÂi š Å4ƒb‚ ☄q0ƒx ƒj:ŌOÄD†d0  „C ‚G €ĨÁaHâ‚dq#Á)É4Âj{Õ Ŧ0ŧ4ëNšMĻÅa,DDDDDDDDDDDDDDDH;ˆ‘ !‚ \rC —$A„Õ1XˆĪ)@0H8A„ "@.H* 0AäS‚'Dx ^ŋ¯ám83aK“}3iE†x4taŲņ„`›O„Ņ†ŅšŌ0aŖ Ŗz˙ø=ZOĢaÁ´œgĐ8= )æöÃ6ͅî“h+ÕŌtœ9Šx d4¸˜äpE˛dƒ)ČjŲ&@Ŋäø§ Č_8ä4ü@fÜCų 87üBņÜ"€Đx8@Y˙Ŗ{F'Ϛ1čŪ ŅˆaßxMØ&˜AŖfû? EY?Aúú ´ƒx1#›I°fĐM†$w éÁ› #ŧĐMą/4m´8pÎ &ؑū]Îä,Ö˛ī&ęAXUWëIũ'i´ž¯j&à ēowh=6 ØA’āƒđBđ@Ņ@fžƒ'Ä=H/ Ą~KōˆqČlãŽCNČkY‚ dôŋ÷[ŨnŋWúu÷IÕ˙W§‰ŊTa‡čÛéņi„n`šÖŒOÚ Ÿôa ĸ>g„ 0ƒP3č¸dŋ×ŋ˙ÛÕũ}Õ÷˙Õ×M‡KI°āé3z‰ᛠCėHíĐl:.™ņ„“z6‚EĘú6Ú0čÃhÃĸė}š˙¯éū W˙˙^ūŋuąZģôãO´ĶĢąM;I7̏u}ÃĨĨi7AŌâ%˙ũęˇNÍĢ˙k˙ŗA?˙ˇ°ģ˙īĒžëÕ~›ũÕū“]+ßũ˙‡˙ņ˙Ã˙˙ņK˙¯ũü[Žõ˙˙ÖĢW_õŲ˙˙˙ ˙üām ˙˙]˙˙ú_ßÃūę×ļöū‚˙˙Á˙ú¯đ˙˙˙ĩ˙ō :m+˙öhFa=:ĖÄ>—tŋúÉžõä‡"Gų!ũ˙Ėāߒūŋ˙zūŧ‰å_ņ˙đāũx¸p}¯ũ˙Úũļ˙¯ßū×ū˙˙´ŋũ>ÚS€Įü6˙ĻČŖëūŋ˙õu˙y?O[˙ŋ˙˙ą_ū_õ˙ƒƒ˙͆xom{ũë­ëīëÛ[[[ūģ¯žŊpŒ&˙Õo˙ęHr%Í÷ō 8…îÖÂßmĨkÚVļļ—kö•¤õivģĨ˙žũ_¯Å7õööīČaÁËb˜—ÃA‚ °”P@Ãa A„M„‚`ƒbĸ›J§m¤šõŨjŋ˙éūBē˙īŽäAō}Ķ|0˜MnĶĻ+äxPbŌíM¤ÅK₠ ƒbai[­ŦĖë˙íkß­÷ũ‘jũ˙ˆˆˆˆˆˆˆˆˆˆâ" Ž`„D`Š„•´Ą„umSû_aĨŊ6Õ¤Ún­öˇßâ4Å ˆLKöÂqAaď†6˜`’m„ĸ]kk: ƒ C˜a+JŌņ†a b!„ˤ )ua4øblS ‚?ÁmlPb˜¨Ļ_`Hˆˆˆˆˆˆˆˆ0B `„0ƒR; Gb¤â"""">ž}{Ĩ‹lČÃYČ ã†!aBŽĄH0ĄSȁ‘' r‡)ʲT'Änš ƒōČ+Ž@điōIØpņ„ĐhŅđāč4bd2ŧd }¨M4ûžB•Ø;<¸h4Âa4@Øŧ‚Ļ÷ūš é˙zĄÂU„Ę‚#öUĩīíŋƒ †¤2Ļ˙Į˙ēKIkČ)˙˙ļëûŽ˙˙¯÷_Õ2āxgĩúëūúĨ¨ãc<6Y A{Č,æCá XR î¤ ƒ# rĮ_û!˜äõÁ"đA„AĻeøAádũ#Hø5ƒP dá¤rBœ‹ŠāĻbČYūö•*ôžŒ҄ҏl&‘†ônaoi„ÛmlÜXFÛM{FįŖ ˙oĒ…ũtœ16“ģJŪ‚m+ Ā[IX`ŠŲķtØfÃĐW¤ŪB𠙐(roņXU h ”"Y|CöAGg Člâ đƒm!ČW ŧP˙tôīI?ŋûôÛ­ĩ÷^Ŋ¯¨!eĢ'@ƒ!‡'„&ŽôCĨŽ™<ƒš.Fa0˜CÚ-W„ÍáK‚ (öÉxA‚ŧ"qsâÜxŽ1 €,ũj÷÷­Ōû¤ēūßĩũuMø]P`Š…ēP˜BFĄC 4œ1/4qŌ †pScŖmē0oF ā4‰tõFFįŖ#sFđŅŧ0ša0TÉņ?˙ũŌ¯õkīß~ŋÅõ­|*6H0@ ¨Tl¯ázG6UØON“ĩēV[ Bá„%Õ&ŌÁĐAŌmč&Ã<Ņą#ļÛã˙ŪŋOõۏã˙üi āÕ\ĒŠ=ēJđ§Â„Ã}î—WīJõ´Ũ4Ũk×īM­¤í1 ÃN>@đo?¯¨õŋÛZō ŗÜ_ôôŊé]‰‰$īít›„ī×ē˙¯­˙ôÕ6ŋë¤ĢtíÕī‚˙ē˙˙ëāē‘_ņûŊé;COŊ>él.ž˙öŋ¯ßëíęöˇëßđŸūųĀ#˙ēOá>á}˙›@Üā”ģzíĨîÕŋíŦB˙é˙ûũ˙ĩÃ˙ŋûũ÷î•}}ú_ ŋ˙ß~Öē÷˙Ō÷ f 'ô¸˙ų:˙]i¨ķAüú˙_Ģī÷_ÉĨú^Š~H˙K~‡¤ģëøüĮ˙¯ũ˙ãöu˙˙’§_üSd ũųzö>ēūŋ_ũūíkŨĶZ˙Đ_üØ1˙œ?üØ?np2ŋ˙×ëū¯¯öž´ë¯z˙í‘G܄~ŊÖŋī˙_Kö˙˙­˙!ūŸ˙˙ũ}ŋm-é´Ž÷ē]t~ģ^ŌĮī×]Ņ„Ōūp6tŋ˙˙oōCßūHp~˙˙ĩ°ƒí°›VVŌm{KuÛNŌ´Ö×m-´ŋta5˙÷˙˙˙\„üˆ?ƒ˙õíēa˙¯ī¯‰~0Aą.ƒÃ6)ŠĶ ‚>THøab‚ Š6+û§ G—ûJë˙õ÷Û_Û__ĩ&úí‘ČŖūŲō+ëū•øa4"L¸6 Đ†a#‚,1A— `˜Sz &škk ­¨@ŋßu˙û_ĩĩŋŌÛKü'uęÚ÷é6“÷눈ˆˆˆ¤"#ˆˆˆˆŽC8÷Ŋ=Ģ~Ō˙˙bGÁ„ ˆlRÚlRl0’}ĨØ]°•¤ļ­­ĢĨū–Ÿúüq ž÷âŋõa5…gøa   ƒb‚ lW6)Š0“ÅZAN)‰tAlŨ/[ÚĒ˙Š{ûņĮ`„B!„˜‚0ƒM2—­ĻõiíĻĶ^H|Œ{!_˙â´Ōm§×´ũmXij—ė Ąą.ŋčŌlm:°ÖXa$īüD…M4ĶAd=tSÅ Ō_Ļ ža…OĩA¤íŸ‰ 8ˆ†hCô,  !A‚ˆˆˆˆˆ‹Xų Ëŧ&@Ė?C ėáā#{ßēČƒTČ3ž–@ę p@đ× ™Č,ų ‘÷ĩĩŊ´áČg‚†d/Ž*$€Ęäß Á$îÁ˙ūžˆ(¯õü[õÚkõÕzüGČr(åYxEâ Yˆfq ö\Ëâ &A7ƒ“ Yƒ×˛; ū†UĪdČ4ßí¤ˇžœ4Â6™.  EX&ûA’äÉøL—&hĪ?Ÿ3ØarF|@dü&@ @N­Žŋ†0AˇFH6‚ †%į†i'<ؗž‹Ē0m„x—Ú1´`˜gFb]4\Ąl3€t‰ ZôuŨô›ZMĨm>ô¸4 &ÁŌŌmē &!:í¤Øa÷ĻÜ"@Á„Hˆf3‘đ‡ŅpSjEôE6/††l0†,†UÄiģĨâŠuz~ëzöâžŪŸwßÕé×Jö‘†ßF&šhÃŌ1´ô/d3ōa —äų0DâHžS‘;˙ŧ{ĢĢ˙öëÅ]´ēĢ˙̝}đ̈́A°Í…¤Ø1#ļ“Ú¤l /—>š0mo‹Fā҆ôbFđöÖĢĒ˙öŌk˙¯´ŋëõûą[˙ôžžēJ÷ž8:N‹õ´Ŧ3ÆŌtƒéAūÕ}u¯_ßö+üW˙Ø?ûũnŸãWúxŽ~&˙§[ųuãã×÷HžúˇëČZüœ˙¯÷ûvĒ˙ŋöŨ~ˇũ>ÚV—SúīûÁŋúīūõ˙öø˙ßÃ_ë፭uÕŋÛ­˙ķ`Fzû}˙ûé˙ _˙‡˙ ŧ˙ūN ˙ø>ŧ}׆?ēO_ŋũ¤‚˙J¯Oũ/˙Č'‚9ũ/Ø|û'?î2Säåøã÷˙¨×ŋūĨ˙ú^M˙ōnū/ßđß8 ëö˙˙ ßĘŊ‡ū퐃öBíkĨūŠ7ß˙ī˙õéū×ūаĮų°k6|?íVž¯_ũÖúM˙ëũ×Ûēų1Ōōc÷ų!ȑų1ōCūAķ˙]āßūÚ[ikûéÚVŊŌßūÖëöˇ_u˙×Û˙˙äÜ>˙ÖžHpÚvI6I´­VĄ„a0’n’ÚÚÂí×Ũ:ũ/ūŋũƒūŋīŲ>Dû¯W˙Ļ( lSa{ķShP@Ø ƒA„  lHõŠ Š ☄Žēí˙y8Ũuŋûũ[^÷":ũģÖ. wDh0ƒ aa„  ÂaaËÁ…ĩ´íwKŋŊ´ŋ¯īÛJ˙JŌמüDGĮ¨‘đØ ƒm ƒ8a,ƒi 0“Ŋ¤›jØK†“jÚūéi{0˜MlBų[Ķ@ƒ0AÅ ˆLP ☨‘đĐ8a&×!’ž""""""BŽ Â%ˆaÍč0ƒ ĨdxSĩ¯ÄDDDvŌ_â‚~_â#éč< x4AžČdcā˜R†į2 BĮ!ŖČd ŗä Âá°ī‡ĶĻ;Û‚–C ĄH-‹Ä6OČdEÖŒā@îAdrƒ¸`„I‘wŸ‡ĶrA €Đāƒ!’ ų €ļAŒīģßiĢ}Č4;YČdqöÁĶšhŨ„ÂČ ß˙ž×˙ĩ˙×D#<5‡Ō˛ ppāä ī ą¯Ū¯Ž#¨ûīßTš €d xĮkÃŽžģßūŋãŽŖūēū˙˙˙ûëūē˙íoŽĢÚǝǧ˙ë˙ãŽ.Č> DËˇē “‚VNC<^h„ˆ›Ŗä=ǝęŋ˙ū‰0ƒDŒūĪÄũ “äH8 Á .0A’đA‚/Á0FbA‘36u2ˆÍžƒčģ9 hø‡Č B8B;8GdøA8‚q ä˛< ˜A¯ˆv\eēH]u×ü3ŒlZ/ŋ āQv‹˙ đ”ŅļoŖ Ú0š0Ū¨ÁŋL# Ē0m­ĻyzÂ0ƅ„naš6›‰øL&´ôA„ —„L Á2S7āƒ#ė2\ ƒ)Č4yd¸ģ3@†Æn<G„a<ŧ øC^grČ`r:ëūķÆŌŧ=aÁŪpīÚ@í1#&Å&ÁˆA´›‘úžęŪ“a› i„°ˆ5NöŌ Ĩh Ø3a!‰yŖAâGmm6Œ‰tŅ´ŅļŅŗ„mļš‹Xĩ҈aƒF÷„đ& 0ƒ Ą0ƒ!—ÁK‚ 0Dâ%Įđ‰ ÷"PÉđE.͊x93͙ „=$‚ “rcũ:žĮ_Ķ~˙Ķté7ZˇīąUOūí×ôŽĶ{Ĩ¤Ũ; ˆMĢtŨ:Ǐ0ƒ›Iēm&Ūķ`ķÆÁÁ›IĐM†%ÔąÃą#ļ›l3M… ŖâGž‹¨FÛEΚéĐ@Š˜F ĶæäÂ1O‰üC "€.|ĪaĖāā’™~Íg‚üŽ×ë¯Ą˙í/˙˙§Ž‡ũ×ī˙ö×zūĩīūŽ›I´ŋÚtģęÛĒwĢo§¤Õļŋwiēŋ‚ Ĩa„Ø1ZM¤é6‘̓0 ­‡al%T›yŊ6‹•Ø—ÜHû‹h4ŒÔ#sF˙Ö˙˙KëõũoĄĢëö×úŋoÖģú­_ûĒûõÛJžŸũtē¯öĩ­_nēŊŌz~Ÿv+IŨéŊ+Ü8a įĒ§Jéŋ˙˙ëö˙˙ī˙žž+ũ{|øŽ5˙˙ũĶMũ{ąīũpßk|ũ+ßzēö•íûī_Ūē}ŋ¯WWęééļë}-'˙ŽĢ˙´ŋ×ĩãĸ ĶãČzū“'“Ķ˙˙ũTD˙ē×˙đcĩõĩ˙˙ũßõûũ¯Š˙ˇ×ūõuú˙íΟ˙ßŌ˙zū°Ž^ŧËíĨū߂ņ˙čuĮ!ĄĖ<[Uũü 2Ėįâji­kīüĨ˙â¯õß×­°Į˙öęßĒŋūŋ˙Ž?öS`Į›!ūl„ ˙öŌ ÖÃķ€ŋūx4ŧņ‘ŌÂ8˙áŠ7˙û|~ ŋ˙ņ÷ŞsäJ%‚Ú_˙˙ĖÁ§^ôúŗáj0cŅ!˙ÉūLßɏņ_ú_ú_ļ—ø7č/Ē˙¯„# ŋįL.p6˙ ķ`Ƃ8˙˙ū›˙ü‰Å_˙˙ņÁ˙ßŋėĐ2O˙˙û_ū€_ū—˙ų1˙ōnŪAŠÁīKû&?ûßÚ_ú t˙ëÁīí*˙˙æÃ[ķaÍƒũvë˙˙Ļ˙˙´›~ūŲõõ×ú˙ë!ü„˙l„KũŠū+~ŋo˙˙Ũ*ũ˙F˙ü˜įr$D‡…˙˙ū—QŸâŪ^ŋ˙üØh˙úøoÃ~ŋÕû˙äqŋ¯íūßëú˙­˙NIī×VČŖäG×˙!ü„|Šũ˙ƒ×ƒ¤ß˙ũģ‘GČAûU˙˙&˙ũd08oü›ũoä‡˙˙Č`r.Öí¨6¸?ũļKĩ×Õ¯˙D1Zûkéûivŋ_­'ÕũÚˇ_ūÚé6•Ĩ¯öˇÚ¤˙õëũ÷ūŸí˙ûdG˙!ˇl„˙׊×˙˙°˙ëũ\Č äKؤՃ 1„Ø‘Đ6(&ŸŌqIĢ °’§a..ĒpÂVØ@ÛI6ļ=;á„Ŧ+a+ Ĩ˙i]6­­¯î–uJõíŊ´›K˙˙¯¯û­žë_ũuŪžël„wûũwíö“0Ä&uTƒAû„H4 °ÅA†( lSAaŠ8‘åx tĶÁ„ĸ˜‘āØĻ)ŒaaÅAi1LS #4ĶMƒĄ„mÁ„“†§i'jÃVKŌ°ŋē[kíĨká}´žéŋNēímuô¯˙­jŨ["ø`„DD!ˆiĄÂŸL0B!‚ÁˆaaƒBІō;Ļđ˜M0ƒ …†¨1L&˜Ē σb˜§b“L  åņAņQLP llKᄠ0ƒa¤ŠL&à XI6V­¯ØVĶĩíw­;­ĩ´—í}īín‰Ū"""ŒˆˆˆˆŠ‡ÄDDDDDD†2āpaa28+…A„&ŧa5´Â×ļ)áƒb Š˜@بĻ( `ƒb˜‘Ķb_ ¨¤a&$tP•°Á+í5´“ûKm+ũ.’ĄDXaaHė Â!`M0ļ[IąM=( ب#Ė Â pEL ÂP„a/ō aŨ/ÄDDDDDhDDDD! ˆá„AŪ/Nԏ ū“ŌŊDqĄí-$Ģ! ¯]lTU'Ļš X\&„ ũ/KœVĢÃi6+A°ąČVC YÁbČ)ÁąÁHn!rĀoÄ F˜:aÃĻ@đđ ‰ĀĐČāJOûē¨p˜d8f„¸d‚Ą°3{˙îä2AĩŨ ÚŖ{°™ AČųÁŽņØ_Ué7<4܁@ä2ĮKpX:a˙ĮÄ}&Úׯä6Įpũt›Ukō ŽC1˙˙˙ük˙˙×[Uë|W˙ xgˁAđ‚y,âō@ˆ!Ŗōī!pƒ.ւ –Ađģ ¤ä‡!\ƒÁ AČlz×_$?˙ús\2\a2^ah™~dšW„xA„¸Ÿ“äuŽĻ{ !d2¸Ÿ‚ ƒW aG°ČY‘đ d'”äOEž #‘ã<Ė)ė¸ĪeÃHĖ6s̐x ŧW‚,ÎäU~ũu_Fčh4ÄžŅ‚lKíŪē0Oa‘ƒz.ē0N$yčÁ´nŖč Î,Z6ūĒ0Ú0ņ šĻŒCÜđáĒi„Đ"š ÉpA„ūĪá2 8Ÿ„A‘đ@Á‘æqN3Ųņ’aˆđC ØĪ„#™ĀCĀÁŊR„Čf^ŽB?ëú ۃ:¸a1 ÁŌŊ÷¤œ:X>ôŌ´°āáŅ~đÁžm&l ÄŽlT›IÃ>é6 Hí¤&Ã6Ã<ŅyŖĐ čÁŅ‚čÂhÜ?‹Fkžš7kŖ{ĶÁ4(M0A„L—'$flø70E•Ä2t/Ęãq Äø‡Ą á Ī6°Eō^]l°ž\aÔ/ĢõWôĶūˇŊ[ą^ˇ_ē[ėU>ôõŊqZŨ;MĢtôôßVĶû{Ķí†!H?ƒļŌŨŽģúŌkĄß¯Žšú˙˙{­ŋŽŪ¯Ģũõ×˙I×§÷¯ÛÛ§īĻũēÖÚm+ЧŌĢ÷'Ꞙ§Wi´ŦX§W 76N!ž6“a› ŖaD젃z˙â ˙ˆ…ÛÄ/ˆ_×Q˙Kũ~ë¸1ūū W×û­†,1Žŋēĩë­/ŋëĮ˙ņũ_ųÅ[zję¯ë÷Žë§÷éī~›_Ũēđ^ĢČH‡?§ū?ö˙ī˙“‹˙š95ūĢY Ļĩ˙˙_˙˙ÚëūˇĻūļ˙ßÁūÖŋ˙}čzīū˙zéŋõŦĮ˙Á}ŧ#—Â6˙˙ú_õõ÷˙ė8˙üˆˆpČj˙¯˙īëį˙zWëū—xŽõŋ˙˙ĩ÷õ zëũ×ũŋT ûôô=a˙6 _§˙m/ų°!×ũæÃk˙„qÃa°G¯ūŋ˙˙ø/˙úņû}y Út‡iäë×K˙ƒüWë˙]/KúôŊĩKôŋ˙ûũX¯üŸ˙N˙ũū  _û˙6_˙ü#˙ūüöG˙Ĩø#֟˙üˆēĸ=}ō€QōŸú{ė~ŋū—ú¯×˙˙î°Û˙Ø=˙Ų1Áŋ]Ōɸ9œ‹i÷_˙õū‚˙˙ūˇūw͆†—ūŒŨpŸúÛüË˙ß_¯ũ‘ŋņUú÷[d í‘Gũ˙…˙ƒīũ}ŋī˙^û˙û¯˙˙ūMŌ˙&ũm˙u’Jũ.‡˙ü%û ŋüô¯Í†@5õ÷˙÷õŪ˙×_RqŽŊu¯ûk~“¯­6D~Žŋ^ŪŪŋöëÛ!˙˙ũ˙­+IũXúŌīc˙ŌũŌīī!ŒÉč'_ũŊõ´˙í+^´ūÖëm$Û[]˙ÃOūŊZŨu}Ĩ̝ú˙ĒûkĨú˙ŪŨ}W˙ëä ˙˙ūŲ=˙č¸h¯ũdœ?úŽLw&˙ėAŌ 6$|0ƒ0ƒ ąL0Œ`ĶxaAĻŦ0 pEBJà lTHčtšiÃMSØiZÃIĩĶĩm[[Ģ^Ķĩĩm5í[KÛIŌuõĩûôˇŽ­~šuõõ˙__^ŋß_­ūŋŲūá4ØZiϘiŠh éˆN0ą ¤˜ ą[Mapƒ0ƒl  Ábĸĸ˜ A„ $ÅE6lHøpŌ†”K ĶMˆa†’Ģ %ÃJëm[ÚPÖí[WKĩîŊ=´Ģ˙ī˙ģ^û˙˙˙ō|F„DDDD!DA‚A„0@ÂĄÄDC ^ b0ƒ0ŠG„ Âh1ZĢMKâž)„Ō 6f›‚lPA‚ ÂÅ*%ø@ÁP&PíĨÅtÚI°Đa6×_û |č.ÖŌūûKíu×Û]DDEÄE"8ˆˆˆˆˆˆˆˆˆƒ#‚ ! x{Čāá‘Gŧ Âa4Mn›ÂŒ1 cA¤N ÄBÄ&‚aaď`ļƒbGÊMS°•¯ØF;JÕ5m-.ŸÄDDDGA‚`”0B ÂÂÄ0@Á —A0šj›M„ķi&a`6( ÁÅllPA„ ŠČQ¤ŋøˆ¤""""(ĀąĄ$8a°A„ÂaŽĐkŌK_ô´ƒxˆˆˆˆö’MĨū@đŪ2–õ×ÅSŸúIĒ_††A§­Ĩ¤Úøˆ Â8¨ĢJņ­„ĐbAâ"#ãūC$(g!’ AkČd†Žam|†@6ēd §!ĩä|†H?<¸‚a ‚ ƘtÁß!Ģ !ųŋ!’>Ōr CųĀ­ō ãšÃ4}ÃØ:10î¤X xjŽ@÷äŒ G_ēú]ō#ë¸p}0ä hWjCQõ×ņũ¯ëzũÕ]PNž“˙ū?Ģūīé{ūëë˙ę¸ū-o˙ë˙Žŋ˙øãĩã<ŽCCaČgr ŋ!G ÜpŸĒëú˙úä&KBĖ‚ š‚˙pFc9D™Œä}ŸėøSã="qœg›>ŠÉLŋ%ųȸn#ãų>!ø„ƒpE=‘ÁApÁĀPN9°ƒáâ Yd a ŲˆË‚n@đÔ|á ˙ôaŊ4aĩŅļmÕ 0ÚičÃiĻž˜FāÕQ†Ķ ē7†îáčŪŠ„Â7†  Ô#x˛y>Aࠟ&rF|@Â!Ŗ‚2T7‚ § xg Lø]‘ЉfėÜC2'äGøHAm˛/NA‘ņ đDŧ‚9ŧƒC`˙I°ÄŽm&ÁŅuIŲz֓`Ďl°‰°bGbGpĎm'‹ĒN]CL$`č&ÚiŪ‚l3í†%á/Rl1/Á›wb_aœ4`Ú6ŨĒ6Û<8FŨ7Äē,4cFá˜G6'„ÁS\žƒ!›é Â2\<‰0ƒČe8e†iņ Įƒ”†V„˛ eŽAŧŅŧ†˙ëĶíÅubôĢuŌŨ4Ũ=6ÅjÛžŽŽô¯Ģ´ÛM6“°ƒzN„íO6ļ“ƒę“mÕ¤ŪAį›Ļ ŌfōõXAļ%ۉy†Á›t`ŪĀŌ¨FÛF ÚA?hâ0Ú8†ŒFš10Š„o !—äü& ’āƒeđ@ÉpAˆČ(ā@Ëō„K7–˛2 ˜aúoŌÚkīééúzūÖéūŸ¤ēžĒúēęēŋ˙§éŌzēëõīÚnũéŊÕÃMĶž“Ĩ{†%֝vаčŋAI´t›IŌ“ 1#ļ‚mĄÃûF6Œ6ÄžåĪ„mŧ&ŒÕ4Â6ØT.ŧÕ ˙ķAūŋņ_ûņXb×O_¯ūŋÛ˙īõ_˙KõöüØ/æĀ‹i_˙üØ1˙ü#ę–Ž -)Á‚˙˙¯Û˙¯ũs˙ßÃMü˙ØqũGŅOãđY85Ö˙LĶß÷˙Ÿîœņ˙ûÕûũ˙b'¯˙˙˙@Ŋžü[č˙æÁƒ˙üØcķ€ŋÂ˙TÚAž×Ųēūļ˙öÔå˙\†Zd2Ņ˙˙ëėœ]~CĶü‚÷˙ķ0Č ŋūĩ˙Á˙ú_¯é5ž—ũ˙˙“Ã˙ū˙ ŋ˙Čc…ˆXAU˙āÜØ1ų°a¤=|Ø?áÃa?ũ˙_ø#ßü˙˙Ø?˙EÁ¸§˙ī÷ßKØīØ˙¯˙ūėõ&˙˙äß×ú팊87 ¯˙ɎaÁ÷ū)˙ž‚ÁŌ˙æÃ ˙æÁ…ƒú˙„l˙˙ūŪŲlˆęŽIÛIēũ["?÷ŨzõŽBä ūē_ä ˙˙ûūŲ?^B˙‘ū˙ĢpŒz˙÷ÚaŊFÃ˙ŌÉD´ˇ˙ũ˙ ųßáūá˙˙øo×í.Ĩ¯ū—ö“¯ûˇļ­6ģuí¯é]˙ĢŽÚõļŋëī×ëĨ˙[ļDōĐU˙ƒūļé}¯ëų7˙×˙_õ˙ä‡"Ūà -ļįPë ¤Ũ}¤ÃKUM+ŽÂõkimĨēÚ^ļ—ßö•í¤ŨvļŊŽŊĨuW˙wũkuūDēīÛVũū×ōv˙ß!û¯_ũūˇ^Ã{0A†( mûØH `ƒcb‚ a‚*lP lKႹ# lUE ( ƒ0ƒ a0ƒbĄ„“McM6 ´•°”{a@ĶĩīĩØ[Kī[ÛKĶíd1Ķ˙Vũnĩzö×˙Û_ũ×õ˙Ķūßī˙ !Âρ„„$‡8á„B$Qöƒa4Ö ÂpÖÄ)wl$Ķj]  Â  ˜AąAŠĐ m1Nq@ƒQV6%đâ‚a0MŠl$ÅZzl0J‚ 6&à 0ÂvÚļ›jŊ¤Ú­Ĩ}ũ×˙ë˙öž¤wŨb(œDDDGĄÄDDDD˜â"!`ƒ Á0„0ƒÂˆ!Ga7°š›Jîڂ*m@ôb›bc„ ‰„ÄēlHö*$|; „b˜†M5l*§i&ÚIĻØ@˙ė'ëŊmÚ­úN—XˆˆˆˆâŒĀąÄDDIŽAqÄCˆalaa0ƒ4Ķ Š0˜AŠö™ūƒM4bA„ælPA„Hō0ƒ0ą#Ė`„ &ØH&σĶĩŌÍ@đnëúOˆ¸ŖbDDDDDDDDDDDD…DA‚`„C0ˆƒˆƒ#ˆ@ 5lBļļĐpEOŊRí/!Ŧé$ū–""""""""!ÄA…ēZZūŸ­%]Á›¤ØĨôŽ´ŋÊ a8ĻÂIĨi%ˆˆ†GÂA´Å1Ib"" !b#˙[n!q €bōƒj‚ŗČ Ū hŖéƒƒēyx ļŽ@ņņÁ!üA— /ä2r Cä\á˜>ƒXø{Or¸U xeų < ?uūũÁČ1ÐÚÁÇMČ7‚PAĻ Ž@đŌėu˙ö_ëÂNé&à [UU^Đ}¤Ú¯v’ÚS ģ ui'uü†&ũpƒ˙ĶŌī'z˙ûk¯ßë˙Ō˙¯˙×ŋūļ˙¯ ÃLŠ—Å4Âmļ!KâM&iϘ…A ąM ˆH@ÃLPAą1Ú6!@  ‰ŧž)ˆA0AÅ ´˜aÅCXkÚĻÃa‚ 8hÅ} Û^Õ;]-W´Žģ_moūfM}ŋzīūí+¯˙ÉĮâ"""3ҁXˆˆˆˆ†āĀB$$† Ã!‚ƒDDØL* Â oÍĨąZa….…KâžĒA„q1 ‰@Û@ƒ=Š4‰ÆÅAąHP’m‚6ƒMXĨM?C;ļŸi/˙!ƒwē_Ũ^›¯ļē Ō"""""""ĸ""8ˆÍ“DD8“Dg”B!„Bí`˜MƒËÂÂiĻŧ5AŠAą ÂaĐA„A„ {ü aσÃa „@Á˜NSi&ąÚ\4“VÂZũV‚8 DHЈˆˆˆqÁˆ‹la°˜[šZvÜŪƒ0ƒ¨#Íļ0ƒ6+õČ‘ŌÕÕ'čQ€‘DDDfâ"" †i„"^“ĒkõUŽ—¤øŽ#°Ō°–•j•­%ä Ȥŋ؄…› I´’K×ũ,E„0Ä!b’ĢK­-,D8āÁąNaĨÖ" Åâ"Eˆ˙<2üá™ä~CoČƒáL!ܛîČgˇ2 ›„¸L&@Ėø†ŋČ YXLJF%Fí§Ū Ėō äŧ†Hö@đ ũWI/ė†@kŽáĶu"9 €Úōƒ.Ī„ÎũÚëJĢŨ×rĀøwPāę@đԇ x5¸M0ŋę>×^Âūßüá°wģš10p}ÔU5¯˙Ũ­z¯K˙÷øp˙ũÅ­˙}}ô’_ũU¯×&ä4Bš w%y7˂¯“ƒkîúI/¯úũá2>0@Éq?<2ŗ4ĪøA‘ųx d4ŽAŖÄ?‘ųŧž!™å9ˆH#Â;.Čü„â|á.ȃ”9d Š’‚rø‚q Į‹Į$ˆka+!Ž ąd3ŐÎä#×˙˙ö|Jz.š0ÃŊ3kĻĶ5§ŖsĶF á4b}cà (P˜Fæˆ0á؊a0Bô0LŸ&a BÄHfxL ÁN…ø@ÉøA„Cd¸&@ķÔŽ69ķųžCņ ††^N ¸Aī|qÂ˙øi‰Ø:ZMƒƒ¤ãîĶĩ9°tŽ$si6—m&Úh0’“aÁÃĸũ&Ō  ƒ`Í‚ŠąÃŖg›wb_hÛrįEĪš0l4Ō0Ū›Ažš7 4ozza L ÂW_‚h9 3 ķ'Ų¨E™Dˆã9ž°‡ĀÁā†#‡€ÁĘC.Čė†,AāąČ7‚ @˙˙OīŋÂmŋ§Ōëˇi´˙uˇØŽ•uŋwĒAPv¤ęCƒ<Äģjí4“ƒ9°Í…A°čŋI›EŨč m‰ÜKÍp‚ ŖmÂb_hÁ°Îz0maᄾFÁēL*‚ŖaÃĐaÃdø—A‚ Ÿ„C/‚K!O#åų B.ˆ˜œgÂHL˙öß­˙ĨßûZßĨôûôŊ7O˙IR]7W_ĶOŊŌŨzÛ¤âĮŪíÂtM¤é8aŌˇŌm&øN„“xpfåÔ'A6‘Ũ Ú6áØ‘ę/QƒlHûEĪŖ ń`žŠĻƒj ŖÂĨt5˙Ö˙_U]ī}ēßĐÖēßūēūŊĩŊēĶĶé{_M{]{­÷õĢę•ôZßí¤ÚģMĨi;m1MĨ†ƒi8:Mƒ<}đbGbG}°Äģ`á›0ôm˙õũí4ŋQņZū׆?ū?˙ãC]†=}ôˇūô5ãŋ{ũi=žõ{ú^—é+Ķ^ˇMמûTęŨ>úWVˇĶNŽĶî“é?˙ūõüē˙ūCN{ËĒSAũu×˙ŌKū悚ŋÄ+kũú}ôÂZI×îú˙OŪŋĨīø˙¯ŊuûõuīĢĶŋ×Vúßŋŋ˙˙ļ•˙ūįøīŊ‡˙ņū’˙ÁūB#¨˙üKŸ˙÷ŦĐõŋŌ˙ņ˙¯īÖÕęĢ˙‡ũ˙ũoūģé~ŋūà éø@ŸæĀŠOM˙×6ŋũkô›ođV˙õŨp_˙øØ?˙˙‹øš ĸz˙ū\ū˙Oø1˙ÅĮ¯z˙˙¯ø…Ģī˙ú^û}Š _˙˙˙é/įD?čk6 ~pÚXG˙ū›˙˙˙ô0Gŋüņ¯˙Įėœ_ø/ų˙ū˙ōcūëčÚ#†ŒŨ~ŋÛ×˙ˇ_ˇûßäßúúņ˙˙Á˙ôŋđ‚˙˙×˙ßtįÃëû_ĩö֟ímvÕĩĩ÷ŌŌ˙ĩēŋūŨŋūūŋ×ÛÛō÷öũ}^ˇũŊ/ũ[ûũ˙$8?ūŋũī˙ļ—ÛiC9Ôž˙°Â_i”>­¤õjõiö­¤õöĒĒŋļˇõūŊĨö“Žƒõž˙é´¯ŋ¯ūũŋī!×˙ČAŪŊČGũ˛ˇúôŋõ˙îŋã0A‚à 1/Ü aj‚0AąA<0@ Šøi6“: ØĻ$à ͉Ž4Âi°ÂV°ÕUa„6Õĩa„“gA^ž—mĻÚļˇ^ëûi:÷ûm¯ézvēũÕ˙ú˙ī˙˙ë˙ŽūÂGA28!0†ÄwGÂfÔ0E`ŠØM†MKÂb˜L$à Šbh6ĢÂAą ĒA@ƒ4 ‰zėP aÅÁ‰tPA„ÛJJÕSm&)7ĢKŊ{l$Ø[öÕ´›¯l+iëíĨÚiW¯ūžģ×jGˆˆŠ6,DDDDDDDDDDDDDDDB""  ÁP0BF8dp5A Á;L*oa4éUŸėB TT0ƒb¨ ØĻ(h0„ h6*%đâ‚Äē Šl$š †a„aĻ› %Ģi&ÚV­ öŸëkŋz ÄDDDDTDDEDp`„A‚p`„!Á„0ƒDHĮ! Ža4ØTb‚a6)ŠÂ  ؠA„PAļ@âGáalKႠAļ’Ä?Ū’â"""""""""""B! !„!ˆB!„ÂéöZÃMˆA ū˙R°8u¯ !av’uøŽÃ ii. BІņh1 x‹X˙ä /! žAlČ<<GōČn@đAÂa xkq°žC$ĮÁÔ0˜tbyÁŊä2L@1Ÿä‡ōwKƒŲ0Ōpƒ*dų Úī¯ĨüƒS<5ßpJhÜ2ƒd҉$…ņņęļŋpũaÃJė˙ŧq˙zKAkŅ!Čîä6‡ũ×üy€<UÕ¯ú˙¯ēŠOˆ¯˙¯Žŋ’˙˙ x7ĖØG2|OŽäœ‡ō/rs!Į/'d ᇠ˜A<ƒá 2–Gd1a2ČbüƒT`†3-Č.ä5…r 0¤rŒpŋü=u× x' đƒĩF1‚ #‰Ŗ°™/44,܃0ƒV‰ķ=†ƒ2=  PđEÁč0ƒ*Ø `oÁ0A’ō|aĮō\l#š(Ė)î@Ŋ^;/2ËĪ @ˆ!›d˛ ÁąČ;P9hī×ũ‰q0Ą„A‚m&ÄÂhÛĸå‰hÁ҆ĐA°fÅÄēiŖ ¸g0taŊ‚‹M6ĶÄÂhÃjĄŸ„ôojžžš7ģFĶh0Ą„?=HJa2^*†đƒ%Á2sh3Đ2g!f5›ü‡âЃ—ĘAGiA Ē놃 ģ[Ŋjû†tžœum-[Áà ‰é6Ēt›Ã@Ī1#ēļaB ¤Ø:/´› K¸3al:ÄŧÃę“aœƒsnŒ:0V/P # é•ΚéŖsFöČ;MMÄjÄÂUiō|˜EágĖôÂÁ øĪGAą›g‚Čė S0B;8x)ĀŌåŲ bõuénëÖŊ=kĶ~ŊMZÛūˇôĶ{ũklU%{Mé[ęN֓ŌN“íĢí†xņô“`ōęė$› KēM ž†%恠ƒ6Œta4mčŧÁ›&ŒĩôÂ6ÛJឥS Ŗģæ. „Ģ4H(A‚ sl `͙2ŋzwũkˇîĩ{}÷­oęē۟ëũ´Šēß¯ŪšÛ­+ęŌ×õé÷Ĩ¸Ē~›i´­m]„ũŽ!ëĢKv)đŌNG`áŅ~•lP›‹ė8b]ēÃûA:0l°´Ņƒa‚MS ~ūęęÔ1kīė{kVŋũ×û˙¯˙ץĢ˙JčkĮ}_w÷ūæīI=5Ōõî’÷O}C`āßĨūL˙ÉBį˙Ĩūŋ˙ūŋ× °mū;u6 [ßÖl!?„líĨSaƒaˇ˙ĩúŌūŋ‡‚×Įųu{Đ]׹īö/ī°÷¯ˇ˙˙įp˙ū–Å˙āˆ˙ë|~Ū–MČņ/×˙×÷Ũö–Å˙°Ōūl5Q˙˙Aŧ#‡ūp6žËîK×ęßlŠ?˙ëũjŲ|„˙ō]ō˙ũ˙˙˙ōũ/—îą_×˙×ŌZ ˙ū!Ĩ˙d?h/ú÷@Ÿũ/¯õē'z÷VŋŽŋūßũí×˙īĶdAöȏū­‘ŋ˙ČG×˙˙ß!Øôŋȃ¯õŖŸ˙ú0}´˙ų1Áŧéų1ũ/]$k¯imĨ}ÚöÚßiiļ­ĨŽŋkŨ_k˙éÕŽŊĨ˙Ú]ĨļēM¤ß­úū´ßĶūŲíuõŌÛ">B˙ĨūBŠo˙Ûë˙˙ëš7[Ōâ‚iÔ5MŠ´ļF0ĶMˆvļFlS $Å-Ļ›a$㴛 wũ ûĻJÚ÷ÚNŊŽÚM­­­­Õ¯ĒŊŽ÷_i:_öˇé6¤ī˙í}Rû¯˙ũG™?ūŊdĮbD üƐh7—Ä ƒjŠėVa6pER„Å;LSA0ƒ0ÅQLP  ÂlHõŠ|S6( `ƒ8 AÅFÅ1ÄĢiĻŠļ÷TĶmXka>Ũ9ĐKjÚW¯ō•ÛIu˙ē˙ö×H”k˙ō>ōOD8é/†E!&88eÁP‰7 Â ĀhL!Áaö ! &A„L ÂĒϘ\Ūa?؜ ŠŖ3A„ãiŠ1  ˆLSø`ƒHøl0ƒ`ÂL0]m5Ni°×î–ūûJĶžŌmS]u ŧ%¤žƒž5ãŽ"8ˆˆˆˆˆĐˆˆˆˆˆâ"""!npČ0‡ aai„Â}Ļ´Ø„Ä,  0„l˙6!(@Û‚0„0”S: &lS â‚w #T8;ĨBŊ$ĩÄDF„DDDDDfÆÄDDDg¨a†.2<„1A„\ i„ÕĻ S´˜AąNôס#ß!̐[gKT} B Á`˜L ôøaz¤–Ÿ3ȝI/§Ö)/ zKIKX@ځÅ*̝é)/à Z@بa$›I$•$ąa1CIj–"C%`0CQ ,DZČdä2 ČžC$ŧ˜ä. ļ z 9 ¸4Â!ā¤\4B@2†@IČžō ã‡ˇ!’F4njÛAĶ|†@k9°jâ ÷×ų €\t’X+a‚ N;āá×!ĄÁHk´ģZŽë@­ŋų €dw!Į°ö!‘F>>—ė¸ ÷×kÖč†@59ĖwW×˙]čH—ž×ī䜁á _Z˙oũ|¯k_×Õ×_G xgÂāA‹"Y("Á bdČ+FCÁ CiČ.ų !Č`r P:đüƒ[öéúúūž2>2\dų0A’™ŧüO ÁD†x d¸&~'2ü0@ō "Ė!fDō> "€XPċä?‚'3á–äH#˛ė˙ ž.l _ 9IJ]Uô`ÜHķ‰}čēŖm´ÂâĶF °‘†ŅŧhÃzvĶHÃhâFÛFāĶM˜FāôũƒF&Ŋāš7ˆÉøPš6Ÿäŧ&‰A’đ† g°d,ōøŽ Áķ7›Éy˲/"‚›ˆ'hÃA0‚q a aH4A/4ĮTũWVÃMƒ ÁŌŌmčæ$wW ĀTÚAÕ°čŋi¤›AĢA81#ļ‚´› HæÁ˜Ŧ†6‚ †lZ3zŅ~‚ īąlø‚ô`čÁĩM˙Ņŧ0˜L#xki„m0ÅđL`ƒ$GŒūA‚ †lÉLŋ%2<7„H#č¸fŒ  œ2ãfÂ;.Č2ZÄĐ9 ä3ē~ôŨ7Õˇ]4ßéZN“ą^Ū•îžŨ:ôôß°ŌoŨŌąw zM÷†xØaO\‘ÍŖgØa0ƒ Øb]PMƒ6Kí Ã@ƒÄŧŅ‚hÛŖ †p\ZhÃhÜNŒ6Šē0Æ´GAØLķ: ’đžd ų?A„Hd|`ƒ‘|S‘ā§˛á >ūû ]Ōë˙W¯Ŋ¯­ŌzÖéë[˙ ö­˙īTŋõõûī]=.īĢĩĢđƒtû†{iZNāāĪ1#ļ“i;L$› Hîą …Á› ˜A¨˜MŅļâŨ‹ $aŊB0aŖsÕƒPš1~žč}´žˇ˙^ē×õĒũ¯Áĩëũ˙˙§÷˙Ŋ×éĢēĢŽ¯­&÷ßũ[úiÖéˇ×ižŸzÃÔl+œ8pĪ`’l:/ŊŌpfÂRpÄŧĐOŠĢ×÷î+˙¯íĨ˙Š˙Š^ūAŋú˙˙_˙õ|7ú÷_ũ|W˙ū¯Ō˙ëé×ēĻëũoūēmëÕ¸ĒWÖ´› ûä īúÚ˙!įà ũ”ë˙i˙˙Ú÷āßéūŋ¯˙˙Ã×Ú_îš_īîŊŋ˙UÖŊ_¯ũģũ§Ķë˙OÖ×é~ˇWžō˙ū˙ā/ņļ”u˙üä#ēņ˙˙ō€#ĩë^ú˙ūŋŋõū?C㊠ˇČ8ú¯ëūŋú˙ū@đ\äŧØ"<B~@Į”åņ>'ÅáS/ÉyËō<§"Ė‹fâ|Cų ŋœ()ü‡ōŽäN!—Ų Ä~Oˆû!8ƒCŽl#˛„Ā™}z˙ūžžŒ7¯„mŊƒŅv5\+NŒAĶHģ10š áŖũ0íÆŊĄ EZvz —Ér  Ÿ§("€[ ŗáĪ„>FÅ0!s6⧃œŋ ƒN1„."†w!3!˛;õ˙ũ āčēf°tŊ'Ō‘ûL$› 4tƒa‰ŅwA6a†l %ęA´thŨA6L$oF Äŧâ]Q…F ąaœÁŅ´7†Ŋ‚‚eøGN´Âķ8Ī>a‚a2\hĸ=<ŋ Fx!ō6)ąa€§‚žË"89° Ā66́†cŽAw Ē˙qM}'¤ßžė{ŌO×­´Å6Ž“ģĶu{ĢiIŨ¤¯Jà °Â B Ĩaž6Õ:6‚t›:/›T_h Ú9pĶ4ŒFÛFv› Õ7ĄūĄà …đL#xhÆ0ÅđA“đ™^O‚ °äüŸÁ ēÁŗqÁŸÜxĪåáCŪÕzÖˇ˙ĶW­ˇīO_Vˇôęęõ{Ģ~¯ĢîÕjôúēMĒinīXIē}ŨĨm+IÁ‰Û HũCčŲÁÁ˜Ø´‡ ᛠH6‚‰ˇEĶ+˜˜M3‡čēamŸ´øT҈0Ą0œ%蠟^?ŋũŋã×ézßZŋ¯]~Ž––Ú]¯u{ŋuūē]~ĮLU.“ūĩuĢu˙ßOûŌnūõ{¤áĻÃĶ@ႠĨb“ƒ‡KI´Ŧ€°ĶA›‹ô› KÂ^a› %Ķ‹–ņ˙ĄëāĮéĩ§~ ˙§˙[†?ũũ}ũØī´ŋĐĐ÷˙ŌēÕtũ5ú˙ë_úēŋ××N“ėWZ_ôėzNĶOÂÃĢųÃDëũŧœ_ũ­ÔĐũ_ՙ‹_öé?_ęĩ˙gÁl7Ö×˙Ĩíßūˇū/û˙˙ū—öû´>˙ūŌŨ~Ú]5Ũ4ũ}=`ŋü{ļ’Ŧ?ū5ŋøāĐū=c˙˙ø:Ō×ßÕ.ņ˙čW˙ú ũÃcß˙¤ũë˙Ž*˙˙Ū8FĪ˙͆œ7˙Îwˇ˙͆o˙ŸˆøAšæG××˙÷÷ūÃ_ū¸˙yuŌø˙Č1Mõ˙VfÍu˙˙õĮßzîŋ߆:_˙āßī^‘˙˙˙‚čGæÃ;Jl˙_̓˙ũÚWú˙ā/_˙˙ĮÁ×_Ú˙ĻU?´ŋúúöKōc÷žAģƒ÷Úģy˙ī^MëČaÁß˙˙˙˙ȃ‘ķ˙͆?î“üØ1ü#e˙˙˙įvĄÃm˙û×ü˙˙˙ō€Č -˙~ũqņ[˙ũ¯˙á˙د˙˙ Áũŋ˙ũûīũ/˙˙˙Ą˙íĨ˙8öŌ_˙˙o˙üŠ?ƒöú{Y;ÛŊƒū˙ä#ūBųûdG[˙é˛×~ŋũŊx¨Žŋōoס˙ßų7ō‹„r-˙üWû_û˙˙ø?Ēëļģi~ëí­}¯íĢ×ÕíĨnÚļ­¤×ũZ_ë˙y8×"Ŋ‘G×ōvũß\˙¯ëū˙˙Ø{Ö€Ëũ_“}ŋ¯˙&?ä‡"įiíĨl5V§ +OjÂOi=~ÚVŊ¯ļÚļģim­˙ļ—v•ǎM¤ę˙Úų:ßĩoūŊ˙ȝ¯ûdGūôŋę×ōw"üWõûßö‰ q‚ ˆAb†bGÃŽI†0ƒ6)´@₠lT5b˜†Ål$›iEi°`’Ŧv•ëjÃJÂęé6šûWM¤Ú]ēúí˙í¤ëézV÷W˙¯ūˇūëē˙×˙†Š8ahCYĶ#Œ— č0Ē^„ūĐbļ–ØRø„gĻÂiŠAą m˜A„„PEQ ÃIŠbĸ]0ƒ`Á&$tA ‡ÛIІÖ+mÛ ééÚÚ{~ÚÚWéČa§íĢk×_uūŋے|DDDDDDG0„DB!„ Á4Ä Âi… ;bšûĒbš P  Á‰@ƒb]0‚lBb]qAÄ(iXJ)4ĶM†ÃÂj› (a+ ũēßßũ¤ž–"""""""""äpÁE„!„„EpfL* 0 ļ•Š|TS˜Ō  튰„ Šb˜ ƒh aÃHaqAiÚų3zÄDDDDDDDDDDDG Ž Į› ˆƒ0˜AŦx &!UÛIĻpGŸĻž2á""#B""""",/KÕÔxŽú x:[A^ŸŽ„´ą6*+h&"?ČČ <@Ė5ã! Č,9 mpLāĒäG x*yˈ-îFä5_:i‡L&ė#{!’ Ą )„Âd YÃn„2–Č5Ų#hƒ`īīč+JôīL#ČA•¤Č6y €8↝˙Ŋ~Ŋd5Į C˛ô‹hÄ,88r‚”`¤ Į!Ŗ˙Å­Ļē_īI˛‚–îA¤wPāéŋŽ85M-%<•zMĒ×ūîĄ˙üqŋiĻ•¤¯Ļ\ĩîB?éúõíãŋŽ?[úä_õÔUo˙üČ7đ‰°ØĻÅ?‘ÁDüCųč2nEĄË A@ä1d ņÍÄN!ĢxaȃŧAŒĪ„r D ¸@Ž/ؐqÕ;Öĩũ_Â7<& ŒCĐhÄÂ7Á 0ŒLŸ“â~˜Aö7ōü&Ëđƒ'Á8†N†ō xL ÉĖŊB œÍæōŧŸ „¨0E ”Íæđ‰Čœ9öH#č¸dt7‚:gÆyŸ l‰8Ė9čŽ !¤9Ē˙˙úMƒ6Pz9´›A3Š—Š68t]fi„ļŨÃĸé˕Ņ益ÜôÃ4öŒ6Ķ9Ņš´ĐkĶFŲžļŨƒjŸFÜôb„ôÂi’ĸš0…ö~'äC‘đ a#Ã63qã<¤ä\)ā’0ž]Å{!Č3mĻö'§JÖĮa6“nÛ¤ÛÕaÃąT“aŌp Đo čŋVÚh&ÚjÃî“mPl3b§h4 ب6•ƒ6 AđÅĩ†/}aŖoūļôõ A Ôü´Ņ á0“đƒ*eųE™N@Į˛„,Đg‚$žCæAĄČ8\ģôŋ˙ĩzwŨoéÕÛIߎ¯ëzb´ēŌvîļ›ŦWŌmģŪôēúfœ3ÂŲ§Ī„¤éđāô1/0ͅ†Ã;ŖąZ7ŖnĀ‚Ņļ҆õ ´aŽ!áš7°Toa †Wš`ކH(A˙}öõÕ˙_õm×ũ ž¯^Ũû ŋû˙¯w˙ú÷˙~ī ˇ}ow[„īģLBou~Šã¤ÚN#÷h= ņŊA3hĮ‚mvƒ3ĀĸũáŽÚ˙ũ?ëlRM ~÷÷ZôĩŨū­īūž˙ß˙ŋ˙÷˙˙ĢÕúzĩn7Õ×§īWt›§~įāˆũf€cë˙˙ÕĢX˙4 ˙ūŋoūí.ŊEuíiXJĄŽ zŋ¯õš8-~¯ú¯Õ˙û^ޚëßŋõÕŨ÷ŌoÖ?áüvŋ­˙ũ0˙úÛøô¸˙õō”ãåÕ\Kž<˙˙ëõ˙˙˙Iú÷_ūú˙¯ûûM/˙æÁ†ūlĨ˙˙<Ž$ßû˙ũ/o÷Eú_Ũ=ũēŊA}ƒ˙˙Ž8}yO˙˙×˙õ˙K`Įņ_úŌ˙ú˙˙ũŠũëøB+ū˙û}M†͆wßîÚ _6ęéa˙˙Ļō˙đ_˙˙‹˙øū›ų8fß “ŋĶ÷uũ˙_&?’‰ ŋ˙ô˙ČQȡ˙ūžÚ^é>ūÄ ‚ũ˙Đ__˙˙ū|ē1ĩôl˙˙˙2>MGŒųžØ@Á#áĐz$ d|l*…÷~G„vB~n!›ā‰Ã9øûŊ~ŋ¯ŽĢ˙­Ëƒ@˛ō܂ãĒúúęžŋ˙ęŋæĄx dĻy›ÁĖöH ãO‰"~AOä,Č_"á°ķ/ˆ7ō'‘,ÜOˆ!8ÂJ ˛/c aŦ œA‹Lƒlf á2,˲„Čgrc</__o__ÃIό6Âa4Œ‰|0Īũ0ĪCôŅŊŖjŸ„nhÄPšhÆŅˆv Ļ´?M2 ųŊ’äŅ#>gŒôôAÉņ“ô䃄A„.2Ļ_ Č?#ãa*#Ŗ<ŒDƒ›ˆ!—Ų „‚"ȸ@‹˙.0>ŋû‘ͤÛģI77M‡l ‚oFÎ ĀQ#ē6“aŅ~ $ÚM†%æ‹Ôƒh' t]PA°Ä°ŒM‰i7ĸę Ø—t]bGš0L3ƒŖ ąmFÍaÚ´Ō„nzhÜ+FđīÂi„a4HL ÉpAXAŗ Ŗ a¸"|đÍĮÂ"‚.đSŲp.p)Ā ØÍ† ‰!G Ũȃ…ĸģú [wíũ'}~ž›[IŪˇĒTž˜ĻŌov˜­]„ĻÚt›—¸l1]] t› ņ°Ė<Ú ŌpďÚkĻÃĸũ&o/ϐMƒ6 „ ŖŅļôa´m°Ī‹Ē6Ūž:hÜÂσ[ Ļ āƒŪ1Œ  —A‚ Fz ˜Īa‚Š ŸČ _ĘrVE‚đ‚xOŌŽŋū›[˙ęõ~ēÖ㎗íĒu÷ëĢëiēļ+ŽŠę÷õzúummö÷Iļ+§i[ętޟIŌ԰Äģņ#ļ“`á‰Á›—˜p̈́ ›AF ŖmÄžŅŖm† Ta‡ĻŸĻšŖ‚aŧIx2[Ĩëvš_˙˙Ģõū¯ô-­jûõkøĢÕ>ëãūÖßũ]?Oé=5Đ¯ŌŪĩũ:ēŪˇKũ6Ķ}:W´Ūí;î¯ēĒMƒ ˆN“mEö“†$v%æ°ĸ^ ›A—šA›[õ˙ú˙õũūŸõkęĩØcũ˙Ūõū>×ë˙é_xŋŪ>Ũ+ũ_i?NĩĶK×Ķī×ô˙Õî—WM=|U+{Nđ›ũŨ§§#°_ûEĶĸŗõŋ˙OūŊ5Ŋ´ąĢ˙æa•¯ß¯^ūĢ˙īīū­*ë˙ŋ˙ũo÷ū¯ßę˙W_ÕūÖöš­Ē~&˙§_øŋ˙Ôå¯ūž?ã˙õ˙Ž˙˙‹ëŋȔ˙˙ã˙ĐĶiúú¨ôˇ˙Ž˙˙˙°Å&ģ˙üVé¯˙ˇëĢūsīO„lŋ˙üØ1˙æÁũ=üā0˙õũ/ëđGŋ˙˙ūÚQī˙˙Į×ü0ŋ˙˙§3ņ˙˙˙õõáß_Õ˙ÚÚI~õú˙˙˙Úī˙@ß˙˙8 ũ˙ūl1˙œ6“i˙_˙ßü˙˙õZ˙ũzs@Ÿŋũ˙ß}.˙ü˙úäß_­ēú˙!‡"ß˙ūũ“˙AũūÚÕ1_˙ķ`Đl̓˙˙Žlŋ˙üā0˙˙ë˙‡ûūNžßŋ¯Ú˙˙˙ūÚņ÷˙ī˙˙]ūžM˙ü›˙˙^ƒü˙˙y1÷ë˙ë˙ūŋ˙›¯˙˙6 oûK˙oîˇūŋ[_˛ û[ä ˙í‘G×öȏoũoߐƒúëŨkû˙˙d ũlmƒčĀ7ūŋū˙ũ˙ī˙ūL!‡"ßũ˙˙˙āßė0—ŋßēŋ­ĢÕ˙îžēęÚŊmZŊ×û¯úļŋŊúúũ×˙ēļŊī¯ī_ûdGČGėˆų˙Ō˙í˙ī÷žŋo˙ü›ūC5ȑúŧ}ží*Ģ@î›JÂv—ļ–ÚwûiZKļ“jžÚÚ^ŨkÚV•ũ¯uĻÚ[¯vžÚ_ēv—ĩkßūÚ[Ĩ~ģūGšû˙ūŧ„ŨČŖ˙ų?ŋ˙˙ŋčĀđƒ0‚ 0ŌwbG˛øĻI‰t0AąAσŠ ØĻÂAiŠm$ ØĢPƒ ļM4â˜a$ب‘ĶX"Ą+Â5m$ÖŌU†m.•ĩYĐ=ëŌöŌĩí[KûKĶ_´ē˙ũv×õu˙_ē˙ũ˛ ÷˙ZāÁˆbS …A„„BĐd|pÂh4íU4¯iˆJL0 éÃbi„ƃtÕ i1LS´6!AąAlSíŠģ $lab˜ ›b˜Ĩm%OM4ÛK´˙öũ´­&ˇ]mĨîĢú_­˙Ûøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆâ" Áˆ0A‚`ƒCE„" Âdpnœ0ŠēbtŠ´MŠj‚ÅA⁄AąAA„  alpՊ´“MXa-[­VÚļ•­ü†#]q8Š6/D Ė`  ! !ˆ*¸˛8: ĩđŠļ•…/ˆM(  Å6! ab0ąPŌ4AÉȆ[Ĩ­S¤""""""""""""""" !Â7„ ÂdxB×l5Z~Alĸ´ŗ>"""""(Øâ>–Š%éĨAøĢÕ+KI/hlRL0”WãL!bĢŦDE°–ÅcūC 8†Aņ €(‚†đC 5Įōî ¤ <āã’â~CgÉ⠃!ˆddh|:`áÁÂn#x}UrÜ`ƒ Č †@iöC Aō ƒä‡Ũ÷wKxpéόMõ"Á €mAl1[ī˙õ´ō#éd08pgƒvä ė†@i¸ ʎíE ~ž˙ūžī†pNš7_˙čwĮkŨúpųQú˙ū˙ū˙Ū‡Úē_]W¯˙#ÖŋũĮeÃ$6ëĻŋ˙ęõëäŸû\r† ÜCų$3c83qĮ?´fÂÜx ”ÜCųÄ8åŲüŸ/Ä$Č1™vAđ†nd.øaČL ŧf˛„ü¸ OdvCCCDx,rpŋD(äG×O_ō1ßđM0ÍSÂaB§Â7<#{ éŖ{Ū> Ū"Ŧ Ér &ƒÂUĄ„¸&Wáaá'2üa d¸ Â@Â'9’™~W”"YvJ(¸SOeÁšáAŽl ųîD˛ĐCCƒaōīŽĢ†$vŌl<ēƒ6ķÍĐl°”l1#ļ ØA/´h&ŨViÚ0WEį;hÃhÜ4m:0Ū‹ĢÄŧ҃a‡<ÃA­U6Œ‹EΚūĪí;FöL¯ŗøAĄ„ĐhtAę ƒ%2üŽ 0F‚œƒÜ‹,Čy„1˲,Č1„°‡ÃôD˛!Žëí7VÅ~ī]:Ŋ}´ŨBt›W[Õ{lSĶi6“¤ÚAŌÁŠÃÂm&ééęƒ9‰ÚÚ¸3ÆŌt› Øe°Ta„A‰ôl:.ŽÁ!6ŒaŗÁ CƍĪTnt֞šaaϘCÂ7´oĻ%á0˜CÔB — ƒų> å8Dšs>øCÁ¤Gģ8 Ã!ŗ„4œ„ŋtžšū:Ļ˙uzúoęâŠõī§­+I˙×­öũ'ĻÛĻžŸz÷ĻøÖúiēWb°ôõté8i‚ãi7M†š K¸b^ķ§%捜:6‚ Ú0š.¨Á0ÄžŅŖÕmĩôŅv:Fj˜F扐ĖđMgā„ Ī™é„Wø˙C˙õ˙ZÚž6•^ŪūˇŋãÖˇû´ëOëũ;}Ķū¯Ŋ_֓ô÷TŨ4ęđž›uuÄ1ZģLPzxŌl<ÁÃ9´ƒƒ6 HæŌm&Ãą#ĐfĮFĮ}Moõē˙đ×ĒŪ˙˙×ĢU÷ëĶ×Ļŋn´ēŨ/ë˙ˇß›uôˇûĮ˙OWúošå[~ē§ũ×û§ßēj÷Õ¸ßi÷ĨëĨIˇiŧ:Ų–“ë˙ø‚˙˙ë÷ˇXˆ_¯×ø1Q¯Ķ÷ûë×ø1īßļ˙ļŋôŽßŋ˙ ˙¤˙ũÕū˙ĐũWķo]5÷÷Ūë¯Ķũ>ėV•˙_îE?ũĮūš˙Ú'?ü˙ÕÁŠ ?“ƒužú˙“Ĩ-ėĖ6ôŊũžēk ~“]ĩûÃÖņëˇß̝ž¯˙ö•˙œ˙Õa?˙˙ũ?„m˙ë­ŋ˙˙m/ãö˙Ĩ÷d"7øā˙ū=Đ0]ŧKŸū ēЅū˙†;_¨k÷˙ū‡˙¯˙Đ_˙˙6ũĨ„˙6 >l4?ūl1˙ūĻÁƒ‡đ߯Î;ū°Ž?ūÚ˙˙ÅŨX/ū ~AsúĘSũ4 sü˙˙˙ū˛CëÚĨä‡˙\˙ūū—˙ū@ž˙ûuū‚ü˙/a= Ŋ~l3ˇ˙æÁ§Î˙„l˙ø#Žõ‚8˙ˇ˙ūÃÁC˙õūÂ˙˙ëëūúûõÅuũûîAqÃõ˙ëū—äÜ˙ÛüGJŋđDr˙˙i{ú ˙Đ]„´ø7˙ˇ„l˙Î ŋöëø˙ČGõ˙˙÷¯˙˛}"˙ũ­ƒÛˇūí÷ąūßũ‡Ōū?Ō˙&ū ˙äßũß˙ĩ˙ô¸­/Ü˙ōôŋč~Ŋ´ĩæÃ 4ļ“iwëõ¯öŋ˙ĢûļĢ˙M‘ũzČŖũ­‘^Ģüˆú˙˙ŲÚ˙˙û!ˇë˙ˇČAã˙ŌũīKFÁ~¤Ü˙ōndĮKũūū+˙ēmoI´ûKNŌŪĩ´Ŋ´Žēm&×í-[MēŊĩū›VÖÕūí.ū÷§WK˙O˙u÷^˙r#ū×˙˙kü-÷ß˙ßëûŋũ=|l0’lq.ƒ ÁŌa„c4ÛI4ãUa„›I7†ļ?‚*†m[ jÃK[I´´āŠ„Š4öÖÂëkjļÚÖˇkíĨļ•÷^ŋi+k˙ú˙ú¯¯÷’¯û}W÷"ƒ˙č/ūmÄ ƒi… éŠbĐAąAƒh aÅ( éŠbGh `ƒØ„Å1.ƒb"Ŧ$Å rđĻ(1.ƒØ…„A‚ Šb]0ÃH6@Ábœ  [Įv´›Tí/mSl%Ié§ÚûkÚČbuūôö×˙˙_ĩmIĮūļžBâ"!ÁŽ#ƒ!ĸ70B * A0ƒ0 ¨0¨28€˜A„Âię^Ä/aRØAÅ4`ƒhaŠŠb@Ø A‚ Šá0ƒ0Aą#āĐa6$tm„cÃVF5ûIBv—¯ii6žÚV’z˙4ûkâ"ˆˆˆˆˆˆˆˆâ""""""8ˆ†`ÂÂdx „ ÂÚ¯ũ„ŌĻÖbĒÂÅ4ƒ0Â*n a „@ÂpՎ$|M66%­Ž›: AĻÚ_¤ˆˆˆˆˆŽ""""""#<؆\abHˆ9<ŧ!0˜L-0 S„M0ƒļ$y„ Šō `W 3ČČd;é#""""""""!ÄDEœp /´´“H /úũtĩT–´Ÿ8…ĨĒIW†ME6’MŽ""Ķ•Ĩ‰ €YágŌÄ‚ĮōW €'ō äÃkČ ASˆd?<8‚Ž`éžCD^АČ!’Č&nĄÃ¨869Ášy €UŒ†“„Î䜁w! <@đTĪ}ũĸ #ģh Č+`éŖ´ĶŪԆ@ų ~öŊ¯ŋT`Ÿ<\Ā˙ĨúVÚøøúū“¯¯ëäGë x4ģ °˙ßéģ×c ­ĨüāV:ä3˙˙˙ëõĄƚūŊ˙ũ}Pzúúãū+äGdˆ„4ī ߈?Čx"ņ đE‚ dāÃ’õ]×˙]}r‡đƒ0A’đ˜C/ !(˜A‘đA„EŽˆeƒ/ —ŗų å9 ?4ÍŲ¸‹Ä$ķųēpØG2ļG„_8äO! SāÖ|!˜I ų áxÂyvCAUČb‚ãØ8]Wũ‹F7.M‰}Ŗná&ŒŧēhēŖôa4åΌ0õFŲŊ¨F Ä=4\ÆĶ ­ĄoL#l5M˜P¨Ä-ƒC´mƒ<&o/đAØA։ ‚A§Dƒ%ĸF|Bq$ėŽÍÁŒŽŽÎɐ1„=m˛g‚#`u §¯ƒ<Ä'W ÚNm[zŌl1 ‰é:M‡‘ęNE´]w ņbG6“ģĩ;ƒ×9ēpÄē¤ ƒ¤&Ҏl A´mŅ‚čÛĖg‚mÖĸŅšÅŖ čÜí?F÷‚„ĐyüŸ Éz$GÄa[ — ČY„OfÆ|S‘ã< e7N!ĩ„ˆg€¤#OéßŋŨīŽ7ˇiĢßv>Ž)×{i÷ū›tŽĩvĩŨéÕŌ}[JÕŋÁÁõv’qH°‡¤Ø3ͤØ3al1#ļ ĀJÆ%č`ƒą#íÁ›ļŅr„m´a¸´Ņ†õ ŖjOĶF0Č4đLd¸&‰Ô @e’n!˙Ēŋ§¯˙ĻžĢõēkzŽéû÷ęŊVŸēj¯ũ+ŪĢIKßūŽēééÖõļŸŨ„ÛNĐpøzoz´› ņ‰ÚM†lW#ôƒa‰vŅvÃ6KÍ ÛķF gPÁļŸ Ŗ˙˙_¯ņi}íëĮÜ_îģ~×kßÅ_í˙õo˙˙÷×Jˇ^›Iũ˙Ķ÷ŨzŌĩuÕęĩŊKj+á6–ÂopÅn•†3Dģi7ū!ņ_ĄUųđl˙¨ūŧ1ŋ¯ĮĮ¯øcéí?ĢëŌû¯Wß÷ĨĶû^ĩ˙Ģũ}ģŊ;ĶKtĶzZˇēŪõŋͤ߸/ūCĶō Ķų@j^ĩĸOߚÕZūģ!Ĩ?Oäå÷˙čwÅ}4é˙íī×˙Û­W˙øīūũuoĶZßÕ÷ūå˙ÁˇX#ßÕŋÛŦƒņīũ‡}¯˙‚ņÖÏ˙Áōüi Ēöŋâ\˙˙˙íŸ (ĢÕkk]˙Ķ­˙ãĶũj˙á˙ôØK@üû]˙ÃoO˙øFĪ͆ˇnxŋú‚=đ}Rŋ˙ü_˙Žīû_¯˙˙qZŋī˙ũ/˙AlV–ž ëą Đ_ųím/īĐ_ęCũ˙ _ë _8†tF?ķĩ˙œ˙„z˙˙˙°˙ū?ú˙Xû"SÖúũęŋõÂ6 Rßɸ;ú8Ĩ˙“p÷O˙Öŋų!Áŋ\î—˙„ŸŽŠuõ˙×úë˙˙͆×ķaĩ˙˙zđG/_ū‡ūˇ˙ւõ˙˙EÃ=ü;W˙Ĩ˙ØwũKīú]]š!˙˙ Dų!ôŋ÷˙ü‚Ž˙ũ˙ëūl6´/˙ūp2KūžÚęŋ˙ۓ{­ëī˙ō+߯ƒßų;édWũČŖ˙˙ƒ¯¯Ų?ūŋë×ŋ˙ų7ōp_˙ŋŋ&?úĨû˙õ˙ūß3ęŋz ūũmÉŨ?í×_ļēßk­ī߯k¯˙j’’÷[IēžČ˙¯˙˙õä ˙‚#ß˙ú˙ŋūĢÉגßũ°é°Âka@įQíūŌÛIgQÛNŌ^ŌW­Uĩî×l%iŨ:MŪ•ĶiZîē~›i6¨ißí¯ëî—˙k˙˙ūßnÚßûdG˙ëë܄õŋí{ūđA„ â_@ƒ6%ĐabØ@ؑúaÛ  °Ä‡a } lPMďƒ8Ļ!à Å16ÂLT0ÛÄ5†Ú6Ō^Â_iZMÕ¤Ú÷inžŋ˙ëë÷ē_é{Ĩ˙ũũkëūŋƒá‘ÁŦa†XA„â !ˌŧ)؄ApÁ o5LNÕ~Âĩa5aĻ~ËĄ Ļ´Å4Äŧ‚ Ļg Šv˜¯b6*)°“a8͆´vŠĻēí„ļJM„Ž“[mWmnũ}ĩĩŊë˙mqFˆˆˆq`F"8ˆˆ‡ˆG ! `ƒ0L!a0„Œv Ļōģ[†ÚLU0•6‚ ˆM   a0ƒ0AąQLSa˜M´‚jŦRià ZPÂm&ŌôŋKIôŸÄDDDDDDDD8ˆŽ"""!G €Ø†ŧaxa áą 4  ƒ0ÅA6%ø@â›H liĢ %¤éuū"""""""""!`°Â`ƒBĶФĐaŠõ×ŌKq!GÛI']%Ôv ü”0‚ŌKđă‚ a/ˆˆ„ÅŽ?ä ÃņÃ~!,<ČöEŒ†K…"<@A2Îa;Ëá›Ä Į!ŗĩ°yė÷4bhŪ,'iä2d äČ\@đŌė†AA|ˆ;ÂpäGwŌŌō cƒØuL'y €kßĢëõë×Ȏų§ xL˜m˙ãô˙†ēY´šęŊ˙čā]ō |>žŊ[¯">>>ÂkõČdXīÚ˙˙ëúū#ūÂW××˙ū—õ[üP¤ ĮūˇOũu˙_üāŋr'‘&C(øĻŲŗ63qāæibd$‰aû ĶĖ…Â ?åā\ÖCAī!ĸˆŒ.ČkŲi/ A 𙠨ČqČėˆ9 ƒŽLu!ļë^ĢáÆŊ„¨Fö& 0ÃŪÁ4Âdš<Ÿ"F|Ī0dčDƒ ÁyŽÂA™ŗæ Áü3x ÉxAĸ@02s#āƒ?H(GÆ{>Ī„>‹ælS āĄœr'ū!lŽa2đAŽH!‹.Čhr×_áI´`pfƒaåÔ8bG3} HķF6ĎŪą-„m7>‚ †ap ‘ā҃hà \čÛ7ØM#sFæ×ŖsŅšéŌ7=¨ÜĄzŠĻŒc &’6DˆøĄ’ä œ˜ `„ 2> †ÉžfüŪCņ åŲ‚—„ˆÃAėƒņÂĶ ĐäG ï¤õ÷]lVíIĮv˜„4Ūû‡ ęÚO¤ÛĶĐum&øI:M‘Û´‚t› fÄĨƒ ›$sa› ô™ž“`čē9A› z†%á/4Ã†%ø3aLFĖÚ0nj ā´m‡Ļļŗ}ƒĶiĻ­0Á“äÂ7‡4c ž0A„AĸF|Īa„ d y)“â?"Ų¸"žË†ƒ. p„p= Gõīõnšęû[ĻŽŸ˙^ŋ×m.Ž­_Kzū•´Ÿ}/[¯ŋĻÅ'Šwč6ÂiéŨ„Õ´ą KũˇIÁž6éZNE´a‰vÚi¨‘ŨØmTa› %øH6‹“bGm&ļÂ6Øg‰t„`Ú0à al&ƒŅˆi„ 2žaÁ#āƒ!ũ{zëúņũw˙ī˙õģģKŨ^¯K÷vŌū˙ūŸõûëŌú˙ßJ÷j—úēâŠ'Ģuv{Õ6ļÅjü ÚZNm^´›hA‰ÚM¤Û†Mƒ9°Í„:¯ĄĸäŨL#˜øbĸ?­×_ĩ˙˙^“cÖÅU]ká(cëé]ĨZŨ__ét?õ]ŋ_õâ˙ĢĶ´×÷í§×OMS}tß×ëÕũ4ëi~­×ú/ä}"ëĸí+lB  ƒėФ4OíŪ„š˙˙˙4Jī˙ŦĖ4}ëT˙ņ˙ņ_˙ú˙ŸÂ˙Ē˙ŋÆŊôŋôˇ_ũ×ļļūĩū­mŌŽÕ鴆›Ē"=ôõđđ_ūđ_˙˙ô6߯ŧ[kÚĮ˙ä ū˙˙åy^üA˙__zß˙ē˙ûƒkVŋū˙{Ö˙mÆ4ŧRŽ­_ á?̓ÛH#g˙˙˙œįFŋūq6Ũ-ųÄG—¯˙áûi}{ūí˙ĮŽAŅ˙üwũũĸéÕpʧ3Mëĩf‚q/ņĶ˙××K˙ƒ‚C˙ä Ĩ˙ūÅ ŋ˙˙üĢũ˙ĻÁļ]ĨB3`Å˙›>/m/˙ũCķ€ģKã˙ũOWK˙÷_Šū8~ ĄũWmņ˙'öÕ _üāƒƒéy!đD_„|*ë˙ɏūä08?ĸëdĮ˙×r ä[B˙˙˙’ņ]~ŋšįūĸŠ˙˙m/ũę˙›3`Ņų°ju„lüā1˙œ4Ŋļũû~Ŋ˙F/˙˙ūõØot›˙ēũĩt`ą_˙˙¯čđų7˙ɸ?ø"éÂŌōc˙˙é}Ž—˙ūč/k˙Ąœ õ›>õH#oõūŲ˙lˆ?˙§_×û­ŽBũƒĢuĢũÛ×ŲÛ">Ŋ‘Gō˙ëŅ€a˙×˙o˙ē0õ÷˙íŖ`E˙˙ũÉŋä3GīKī˙ÚŋüƒŊ ‚ ˙ûõĩŋ]}˙ĩī_íĩē$ūĩzęũÖūģŊîģú˙ũk˙ú˙ä õ¯××ų<.˙j?˙˙°ūŋä‡˙īKü›Ãö¨*ūūöZéZMĨ}ķ 0Öī´ŋí[[KĶÛI_Knų M6­Ĩũ¯i}¤ÚķėŽ%.˙˙ŋīJÕ?]w_õ_¯Úöȃų?ûdGūŊ˛(ų>ŋíä ėūęÅ$Ē˙đÂLTHø666( aaq#á„L'šąLHč: °”4°LĄØa °Ø¨"Ą+IĩĐv“ŪI†ŋbļÂZąØ@͈v–ļŋëkû{iN‚[_îŋm)˜b˙ŋú펗é]ZéęÚ˙ūDĻȏ˙o#Š1ôˆAë˙åņML&jŋm„ŌŨÍč Âm0˜AŦ1PGũ Ra6’ Pb‚ 8ENƒŠ`ƒh6(0ƒĻ%øAÃb‚lP@Â@ $0ƒ Å1L0ƒ†´ ŠVŌTĶaĨ:ŽÚIõV­Ĩļ•÷ˇßijÚZV—ûi6“é^AŨ&Ō%tBžģŽ"""""#0,DDqÁˆˆˆĪQ`„"!„  &a`Xa8i„ÂĻĒĨá TÚ h6!SA ƒ0ƒb›aw@Ø ąQA0AąV”S #ll0ąÚi턘ai†—vļ•­­éÁĨk÷é= 6""""‹›dp<‚Ä0B5B!„€\ Ķģ ˙6“Š„„ĐL  ØĻ!8b‚ lT0”S֋⡂6ĻŦ0ž—i:Nq`#ÄDD!Á…A„"—…0˜OOAĻ!4ƒ6%ĐŌÕuīB""""!đâ"" Ái^ŋŌUt–;imĨikk­{lS ZN–‘ BĨÉ ĄÃPá„Ä&)ŠëI,DDH-†Ž M+I,D8°Į˙ xgƒgȁ_=ak xkYö@đ,Œ ō(L†Û‚„ĀãȃČ •Č>#‚ üÄÃĻ˜8:`Ú17N… xkų €Qäđú[7 Î?äAßŨpéƒM‡A„o`á“ôA’äOŅ"!(˜ d|`ƒŌ'ĸ"@ČāŌ|/!§d1dˆh|$WŊW×Ãl:.Š6A„“áÁĐA°Í…†$vŌfø3a4h l1#ÍŦHíáÁ›t`Ú7 oE× ĐFÛFᆥíB6ËL#fÂŒÛό7Ļž•Ž@˙ˆí0ƒō8 Â Čø'—Cx Čŗ%äø d<ËâōቈqËÂXA8&Pä2ėŽČb<:äã_j­ŠÕļũĩ˙}§IÆŠöũĻ)°ĶīNé:ZAŌl,é&Ōv„‘ũ8gؑĪMŖ‡­Ķ7‘ŨéÃ𗝄ÁÁ›ÄöŒö&FF čē{4ļ҆ũĪCF'' Ã'á4Âq'Á`„4PPƒ!fC/đūĄ›Ã8G2€Øx)Ȏ§‚œ æÁĸXäÕéęúŊßßęûéŌnŨĒzŋßŨ[ŽŽ+ū´Ÿô­­ūˇõqŠūšx­ūĩü0A´›I°é{ÕZMƒ†$wAXtlé6Á › Kė#FÛ āļ%ĶFF ĸæØ+Mm5M‚aKŦū´Â1Œ&.<˜@Vâģõ˙˙ûõkũ?ŋū—Zēž×Ōß}4¯M]ôūūõ{M:=˙ž˙ëwą^úë{MŽéi6Á̰˜„Iļƒ†bum ė(‘ÛI°pÄģa›—ĄÁ›‚  ƒŖŅ‚nŒn%öŒ7ë˙i5ūŌũjŋû_]_ëúßũßžū=˙Z˙÷C_ÛDLū•˙ë§ßkęē~ēũ× ÕīÕūí×ũ:ˇÂ}ØMŊ:WēęáˆAáŌoūŋÄWŋī˙â˙˙˙˙_ŌÕ*Z˙ĮüWöŋ÷˙­¯÷^ēŊimũ~ē°m^ĢWú­nÚéëŪ˙Õ÷¤˙ŋ[˙ãm"ä!˙úū,†Š˙ūņסÅ˙ũyôü‚OŦK¯B˙ą_ŌĮ˙Į]r¯īß˙˙ŋõúūŋz×ZúznŸũQĀ#„q˙Ų˙Û_įƒ,Ų˙˙ßú]Jŋ˙đG×đG•×ëÛū•H4Ķū2%=ŋūŋŪÔ˙õ˙ŌāĮū˙˙ũm†;ĩ˙¯˙ģŌ ×/ũ†—đ‚ ˙˙ũfÃ+Î ~l˙ūÃū˛ÚTŗ˙˙ūãũx#ßôŋ]˙ã nī˙Į˙ÆÉÃ/\5˙˙˙™†b ˙ßûöŠĨäßô ˛Cū—˙ũ“˙Ŋūë÷˙ôú[Ĩ˙˙ĒT‚˙æÁ€O[˙˙˙6Ģ˙čō#Ë˙Ûū?˙˙ƒČŪgũõâĢß×˙EÁŖ˙¯÷_˙˙˙Žë˙×˙ĨŖ€Ŋ/ë˙&=j‚˙ô÷ūú˙÷˙íũ|Øl͆¯˙˙œ„qūŽ?ëȎëú˙ūēūB_úũ.ŋŽBėy=˙×éęiõ¯ëK˙ęžé~ŋú˙˙ų!ûü‚ã‘o˙_˙ցˇ@ŋęl2N­ŽÚ[¯k¯_÷ûkzũ˙ļ­Ķí¯ĶkūÚ÷ęÚū—ëäW×õ]u˙ČAëøđD_äA˙īë˙_öė7“÷˙üūCEģKŽ×û­ĩjĶí;N×^t ôŊ´°žˇĨúV­Ģamm/{I´×zū×ũ9 .×í5KOô]R˙öûū›W˙mvöȎH~Ÿ˙!ūŋ!ūŋ˙˙÷}õī˙a ą\HøaÄē ‰( Âmą ĐlSč0ƒL'šąą# lAąLCa‚A4é†bí;I5VÂÃ4á„›a´×L$ØNŌŌŌĶûÛ]}í&Ō˙¯] Žŋļŋ˙­×ûdA˙˙õėˆöų˙˙đÄ-„Đa0„ËŠAŽģiT4ÂjĐiĖim5L˙a{†) ¸b™ũ„A†(  ؗ“é„öÂ%øA„AáLK퍴­&Fkj„Ŧ#kL0ļē{ .Úl5í&ëÖŌ´ģöŌ÷_u˙˙ŊzöëZúlˆ>"""""""#0,DDDDq`„D„D…F‚ !ˆ°ƒA„Á „؆3Đ aS! \(Pب„áaaŠb„ ŨŠ P@ lP lK ØŽđl$a4Øa(ÕWa„Ą­Ĩià k÷ū–ÚÚVēvļļIņFˆˆˆˆˆˆ‰ AÄDD  Â#pÂ!G ,0ž˜„Ä.ĐaŠi4AąPEQŒa A„ Â0ƒ lRlT5b˜aA­Á 6–¯¤â"ĸ"""""""!‘ĀŦƒÂ !„DKwˇL0Ĩņ Ļ!8A„Ä&+¯úDhA…Úũ4(Q†[],1 lUĨˆ28ĐQX‹X˙ųÂų x‚—+â! žAl6ī†{pūE‚î@ķ‚ †@fŽHrŗČ3y(.d{܆`ī‡r˜EĀ{MSUČīM0™Ėr |C 1„¸áŽûäˇ˙ ´=zČ5>DI |ÁÂnŒ<á§˙û ū˙ßô’÷mČd |ƒhøtœ9Ã^=|}wÄqĮĒÚÇ^ō ¯Uīõ˙ũ}WŋÃ_^ŋ˙˙‘Ž˙đá˙ū?ĩû^Ģúëę¯wé%ëę?ļ ą “‚ /VŒ˜ä2 ƒ˙$WũU}˙4Hጸ¤á”H( Éy>c‚' d|O‚$@??%2üøn"aüŸ´"ḆŸäø„Ą 4ÍfÂ9Ž^ ÎnLƒqČ7Į W„ŨČeŽC`ū‚A.ĢúūŒ6Ī ¯EÎā”ü'ƒ 7ûÜtŒ0õÜÚuAĄa0ļš B74nϏ2~aC3Éōh3q?/äŒû4gĖ<ē⁄P°˜DøØCųÆâ|CĶ'Äa‘|…üh‰‘|ąĘ˛vE™㑸\ØAųHkŽš!ũI°Đƒ@é;Q#œ1#—„“p›A6€ŌAė&Úa$w ü%įM†$wF΂  ™´^Ŗ ‚ †%á/C†%ö ؐáÃ6$0˜HÁĩ ÂF ŖĶÛL#pzxMƒz¨Fæ†!Ači„m2S 9AP`ƒ Ÿ (( d?1äJžqȞˆq˲ ķ!pƒâd‚%{Čj@Č(Öũ÷éŊĢĐ_MīúÜi6Ũ4Û §Wi´ˇŊ\X¯Úiˇa÷wÃģI^ô¯NéXbG6“aŅ~ Ką#ēMāķf’m:ŽØAĻ °Î0L3€Ū‹•‚‹ÃaƒÁ´a‹F đŒA“ā˜@@аhĸ?°ƒ<š—åp d)Ép Éņ_"ņĮúí˙}ô¯õŋūs˙×´˙^˙ÖÕ_Uõīŋę¯˙îÅtí=;ĶOoô´ÚO{{ĢũTņŊˇģ y´›IÕētƒ`Á$.¨&ôm ā´]0ļŽC ĸÂ0N,&˜Fæ†/×ūūŋôĢĻëë~ƒÕū˙ŋē_ŋã[N˙˙ûuWļ—kė%žÖöǝūŠ˙Kļé§§ŋŌú}ē]ŌtŊmŠŌoVŌÚOM Ēpģƒ<Äģ`é]?˙ķ0kīר¯īøûŽÚ_UŠ˙âŋM}~˙ûú˙žÃ¯z˙ôĒë˙ßņë˙ˇé×_íûééĨúÕv:Jūëžé§ŌŌÕƒ˙ũ0__ŧƒdūÂ˙ū ˙‚ū ŋôŋúé~Ū+×õ˙ŠøĒęím§Öé/uũ×õ{˙KëãŪˇũ ēOô˙U˙o˙ģ~ŋł7ŋÁ~6Ō¯đ_ßĩÁ˙˙Ûãôˆ6ŌFÖ˙Á~­|A}!ŊüWØ1˙čGƒūęŋé˙ŋnŋūúúų°c¨o˙į8Aũa>ķaŸ˙á?ë‚8íÕm˙˙˙˙ÛČjņ­‡Į˙ūDGĨ‚ŧēāē_´ų8l֞¤6{4Ķ˙Q˙ũ|õc˙ä‡#Īé´ũw ŧwK˙/˙A;a, Ÿ˙˙m)°c¤aęl˙_„pū”Øc„mí+Áv˙Ážßņā°ã˙ëũ˙ “˙Ų d_ōoø|›˙îÚūëÖHuū˙ūŊKB—˙ų1˙˙öô˛ ß˙ū‚˙ü ŋt^Ģč/pßķa™ŲÃhā4õ˙ūŌđG–ŋáūB˙o×ūˇ]Õúú_Į˙¯Oū¨Āgë˙˙ūMö+ãĒ$ā˙í×^—éôļęôļéũųīü ˛ Õ˙6g˙ū˙„l˙øoÛū×˙˙Ũëõ×lˆízūēŋ×]ú˙˙îBŌŪûd ˙¯ūž’ŪŋR\jMë_&>IÁōo˙Y!Áļ˙¯k˙û¯Aø>ēÚ_~žˇíļēOēw˙ĨëūžöŊĒ}¯ūúÚī]ZîIõŋ×˙˙ũ-ČŽŪ–īí}é˙ûļŊŋūũˇ“˙ZŌ˙ō9ũ†ĩa‚šM„“]SáÚ.Â)Ōm(a;I°ƒM†­_jļĢi­Ļ΂Ŋ5[õ×OĩŨ´ēO[]´—zīõõ[KVÖŊr:ũ}múû">E_ČA÷ŽČAü„"û׹ú˙÷o„ Šb˜—Ŧ"ĻÅ@Âa0›é1LSûbĸ_‚!†,a0„ ‰`ƒÂ>‚$|0ƒA„Ķ4σ Å&ė0JŪØhÂt›kí¤šũ ĢaXiéíZ´›kíúúNžÚM¯wM¯kēí­¯^­­_ũ{‘GüA‚ ÂhDDDC.A‚ ! 4!…B `‘Ä#„  i„Éa4ۆ_ ĶVšiáLPAÖÄ*‚<ÂÄ „0ƒ0ƒbG ƒlSč8—Aĩą#āū5[ÂÅpÖÕ4í&VŊ°–õv•ÚM­Ēˇ^ūÚ˙Ú߈ˆˆˆˆˆˆâ""""""Œ  @ã‡fšPˆ âBBŽČāÜ&‘đƒäƒ0°ÂkiĻĢaAą Ļ‚U ƒ0Å1LHķ† 1Al$b‚ļ 1Q[i0•l w~ÚWZI8¤â""""""""""#‡`„0„A‚a†A„ԏA…AˆVH0Å4Đ@ØĻ%Ķ lKča`ƒbĄ„˛Āw˙JœDDDDDDDDDD `†„X Јˆj_Ļ—D2AšŌ×ÄDGŌ×Tˆ†ˆI*ØĻKI%Ō j PŊ1 Ф´ąUĨˆ`†+ą˙ xPd2ˇČey0dō՞ŽÃ[ã!ĄÂ †@mC ŧ ĩÄO xlŧáoŊƒĻŒ:z1ŋ h ƒí?ä2@Ũ˙!–:ä24{IÁÁÁČd †C‚‚î@ŖˆLąČ? IŪû_[­kNĒAI˙ Ø:ĒaÂ0a̝ž>8ũmt˙ēšąČō ÃēA‹˙˙QĮQ˙õß]'"ˇäcūēë˙Ž>#ô˙^­ú˙ú˙ëû¯˙DK!Ģd3ؐ|!ĸiŪAŊäl† ģĪ3ŽA!¤9 ƒŠ‘ȍuõ÷U×_˙Ä ÉĐŪWÂ`’āƒ<ŋ<0‰ĀščāÁ’āƒ%ÁG2'”äY‘ā hĸȧã˙ã x´˙ëúí}-1ÔAæa5˙˙˙Ѝ×OđÅõČeĶŌ˙ŧfĀ¯á˙˙ƒÔØ1ų°Ī›?il˙†ũ˙„qÃ~Ë˙ūĪûë˙Æōéņ‘ĸ0_ö˙í~˙Á{×öf ?˙iĖW÷ŌÛK˙K÷÷ŌČ>ø7˙û_ā˙ī_ X7Đ@žl˙́ā¸/˙˙ų°jijŽÂ6˙í˙û×úAøĢ˙ŋƒ˙Ž,‚ãˇ^äu˙˙˙U÷÷Ĩ“pû˙Ãƒ˙“zô|—îHp|}Zū–@Ãę—ų1˙ôúī˙īŊ: į6_ø7˙íĨ˙8 —¯ü7˙õo‚9Á_˙!bŋõŋõũwīöČA÷˙˙FS˙aõëcũ|?ūßú˙ũדâ¯Ō鴟ü†qȡ˙ņ_[Z_ũyĪ˙͆eė Wūŗ˙îŋ˙¯ëē‘ŋßäG´ŊmÛ"?õũkú˙ũ=zÛú^D!˙öČAë˙˙˙ö+×}÷ÉŋūŒOŧ›Ū—ä‡ßōcƒ˙ßIWú ˙í/˙˙oīAë~Ú_ˇßĨú˙}˙Nŋk˙ŨjÚë×ūŋģ¯ūŲßČA˙ŋ˙ˇ˙¯A}Ōˇũ¯Û¯äß˙É_ú˙éļ­'Ϛl0öØOl'Úi-­¤ļ´˜ijÚß΀a¯Ģö­Õ´õéßjßjÚZ˙ļ•Žēī^—éVÚūßûkī[õ¯˙ƒ˙‘Gĩ˙÷ë˙ČAīõũÖŊĶÁba0ƒ8‘ä ؗA„ ‰tďa„‚¨EL aаŦP Â(avď†  Đa(ĻÂIí¤œ0Œ ė% %a@ØĻIŠ[M;JĐ4ö{im­ĢimZVī ũ­úíĨķá›ū›^Ö×÷¯ŋŋ¯oŌ×_Ŋ~üC „DD0ƒE„ÂÂ`„ÂdxPdt0ļ˜ Â—„ ĶAÚm„ÕÚl iˆH7b‚ Šx#Îm bM1NaaĻ$zabGA‚Å0ąOąÄē ĐpŅ„i°ĶAĨ {[McîÕ´Ŋ6ŌŌ[I{K÷_ĩēŋ_uÕ_Į"""8ˆˆˆˆˆŒ¸‘„Hf"  Á0„ Á0„CLCØáĻ ĻŠ Âa?ą Đa0ÄžTØ †! ėa6)Š ‰ Šc6ŌM;TÕ8¤Ķl%¨VŌ´[M´û]/IņDDDDDDDDDDDDA‘ÁTˆ0A„!‚lDŠ;A„t „Đi…†)œũaáaŠĻ!E1#ĐA„ ‰$|0›: xƖēXˆˆŖDDDDDDDDDC"!4L" â Âa z¤—Ņ €ÔŠŌqI/U_ö*•†bžļ ÃĄÂXˆ‹ ƒ+ą J~Į˙ ļÜASˆdÉ ä9ō!• d ¸˛n @õ丁á—Ä2ųęÆĶō 8Æ۞è>0Ø8w!ĸ;DāĶ )°Ëâ•ûųÁĄíō c<6ҁŨÃØ8<8tn‡ ˇÆ AaČ ˜F …OF÷Ŗ!™Č< ÉLŋ^o0‘]¤K‰đD€0N3âfÃ4ūČ[#™8O§§Ļ×_˙ßęŸ^ž­z¯J×zúØĒŊ~Ŋ*„Ú]\SKuĨĶôõŠŧ'ßtĩzuoĻŨ+Ōl3Æ$s¤ØbG8fÂ\]CL Ďm&Ãĸü°”zM†$vâG˜aÂ6ÚKļ´b (L#p’6Ŋ’™~WĘ#6|2/Ū+×ŨŊŋ[ëũuûøúūö×O­Đũ~ßū­īM}?ĶūˇŪé}úV—W¤úŋ[î“ģzˇūĶwą]i^“m7 úIÃĨiņ„DDDDDDE"""""" Žƒ`B ! !a4<Ä ĻaÖI†!Liƒ¨"ĻaŠ„TđB Œ6Ō8h8‘đzqNŊ}8ˆˆˆĨˆˆˆˆˆâ#‰1Ä0„MhXAĻ!niϐoˇų1ÂIЈˆˆˆĖ ÄDD0T˙éyP8tŊRqÃ]öք’Ō\ › izū@đØõõM1QKétšĨˆˆ´0ąL0–’X‹ ‚b˜ĒÄE„8ūAl[ `rŦ†@[ C”9 ‘<\†TjpAĄ×p˜!cȃ<ËÉ Ī!ø‚ØjŪēhŨPĐ8:vANˆø‡ƒR Dƒ8äâƒ&jâ ųĻž’AôßÔÁ*–aÃσÂUnúČß!•ä2A#iǝÚŨßw ¤:á6î™Ađč'L8pí †Wâ#ēí~Öôĩ¤úō§u÷zÄnaõĮĮÆŋiZúëŌČ.î@đkˇ˙˙}UŋhŌR ŋë˙’û˙]GÔu]˙×õī^˙_˙_Į|áĸ˜@žÍ¸A<ÖAŽM—dfŲL Dd-ų ¸ ŧK÷!!ąČ!‡  |ƒ\Ē˙×ęž@đœ˜A“đƒ%Äø&GÄü&Ą„@Ņ Ąd¸Ÿ&CĖķ7„.OAŽO‰pA‚@kÔA‘éN%ĮđFhŧH"qžŗ"x"ŒđC4Īd¸–ũō yĮÍĈüŪO q܁ãģ"ņ0‚a,‡˛,Įdm2NC`ë˙Žŋú.š0m҃nÄží‰} ƒ6ŗ †p8š0omP Ō6Ū„rúhÜå΍Fį§éŖ tŒĶFæšę¸Fǚ7‡Ē1A„ڄ2ü ’ā˜A’äĘđƒ0A丌0EHΈ SqâȖl<ËäōĖųvAė†,‡˛Î@íu×ÁŌŌl[ ƒ†ƒi8¤í59Õ°áëúJÃĸ˙„øpĎm'IõI°čŋ‘Í̓0ØbGt¤Ø3bč3zT$ņ.¨Ûl  K—ŅļâŅļĸëš0Oô`õŖpzoĻŧ4baSė  —áWa`ƒ ‰ø@Ęp@Č˜ a n œA§'„ x!,†eë“~*ŋ¯¯¯Ōŋ§­ãwz§bĒ—W§Ļ÷ŽŠŪ'÷iĩę÷JÅö+Iĩ§„IßĨpčŋJÁž6“ƒƒ<Ď˙‡˜:ļ°´†%Û ØQ#ÍÚMē/Ã0›Á7Đ ņ#Ímm7蹌#sFõ „bd4pL#h9#kõ_ƒž˙˙vŋëuŋ­›?ũ{iüØí+˙õ¯ų°ĪõëđŪÃ˙8Ŋ×ųĀiM˙˙°˙˙üīé<ŋ˙üéd=>P >/!ĸ'&ŋ˙­b˙_˙ūŊë˙âų!˙ũz˙ņ˙Č(ė_˙!ûA×Ä+ę’"Ž ˙ēNz›?˙„lžĄ/˙˙6éŋlūúÁžÃŽŋøŋ!˙˙˙ũ˙ū‹†_õ˙ØØŪŋ˙ōp¯ōcƒy!Ō˙ū/¤¤09˙īŧŠ9;˙˙KúK˙˙˙ô´áūl/Ã͆o˙›žŗ˙˙ū‡íƒúõū—_ûd ũUZ˙˙š >ũ˙öúëø"?ô\3ũ´ĩøĻ;ŋ˙ũ~‘'KÉŋ˙“ũvũ/ÉEĪôäģ˙ëĐ_õ0ŋūl2SëŊw˙nŋūŊīס˙ÚŪH_˙˙ûVȎIũoōtģtžŋČAīëũK×÷˙˙Š×ûũ¯äÜ˙&?ßĨä‡˙˙˙ÛKŋ˙ä0Îë´Ŋ´Ŋ÷˙]}´¯Aī_÷WZ~ũ¤Ÿúî¨wũ˙kîŋŽŋ¯˙u˙ų=ûúū÷Y;‘G×÷úë˙××^˙ɏíé°Â[¤šĻš§ŌN=Xa$ÖŠ´“ļö•¤Šļ—~ļļŦ0“jŋ: ĶáĨū¯M=Öéku˙¯ĨëÖëúûjõ˙ũäãV×˙[Û";ũ¯ä ˙¯˙ƒŊū6+b‚ Â Â Û P@ÚAąA7vH Áσ@Â0ÅC°@Øi0ƒ8a&)‰|0A„ÅX@Á†Ä0ƒlŦXa ƒ ØKĢTØaVÛInöĻĄ+LĄí{¯oUm+KkĶûI;¯mtīŋJŌ˙Û_˙ũ×˙ü„a`Ëāšš††ˆ0„jƒ„…0˜!Ķ#ÂDœ13`CČé0¤xSLOMûŗõŽ_œ0ÅSÁ@ąAlP@Á0ƒKč0ƒ‰m„‚ âaÅ6AęàSĩāŠ„˜a&Vƒ°ƒ´˜i:Ū—ļ–ēv“§ÚMĨëíŽ8Ŗ"""""""""""""""!ĄąÄDDA‚Ē †D0„DCĐ3ģ#á4ĶN„ûK´¤éb„AÁM&)Šb˜‘ë>á…b›Iƚ°ÂIÛ #8á„a› []´—m/KĐN"""""""""""""8ˆˆ‰7aA„ !dxB Ä*a&ƒb‚ &Ä&šb0Ä&!A„<bŋWĄÄDDDDDDDD!B  ! !˜Z¯IV´"""#ŊZĨj@”%¤ŧS’lŌK <5×_×~?Â70ǚ7°¨aƒ  Ô&š„0ŸÂ7‡„c #ÂU„m2\ƒ2^_„FĐČ7ō|a$aüĀf†KĶ>"Fg™ĮČø3„qž 7O"AvEōˁh˛„ŧ†]ÅÆĐęC0rƒlz¯á›ƒ Ø8bGmāčÁŌl1#¸3`Ō%ÛAÃČü°”éĐAĐM ƒlKí˜pÄĮAoģûF ŗĀÔoz0M‹FáĄhÁ¸´qši Á…L' Â8˜&˜FöO‚ @Ž0ƒ%Á“ō|a. Ÿ‚$G‚" K ä2Ļ'2-›ˆ'‘ ŧ#žAĸ™ŧaŋ­í:Vęé;Mė&ītētŊ+Ũ-&à Šwa6“ˆpÂģH&=°ĪH<ķĢaŸtpfÄM4“`āĎÚ; ƒaŅuH6‘ܰ1EÛF 0ÄŧđîŒl#҃čēv Ø´a´\úi„m‰Ŗ …A„a°MB0ŪC?„Â1‡‚8ƒ”GŒÍŸGĖĸ3gÃT<ƒ7›Éy ¯!8‰eá, ™ū•?VĢĨ÷O˙ĮWĒęûÖˇM?OßWģ¤ŌôõÂoxM¤ôÛuMôôÚVÅi[MėS̰›ŨˆAÕ´›KÁŌo ƒ9ēm¤› Hî“`čžŌoEÕ Ūa›ÃA§ ؁™@!†M4Œ0҆F Âa0˜@ūˇū×ē˙˙Đ×ŋ]ē˙˙Z˙ūģõĢĨû˙ūģî×OOOOÕÕĶûWW|U~•ĨôébļĶkqT¯Å:MũīTz`Ōnši&ŌŌ †$vŅvĐMũ§_׏˙ũ6?ô:Ü1Ú§¯˙úÚú˙˙é}/ÕwZũ|W˙Õ˙ũ_|WˇëŪžž¯Ŋ­~ū›¯z 4­î’ŌĩÚb&ũåÕúë˙üõõš´Vú˙ņք/X­{íŨvũĶ÷÷ũ}˙×í-}ũūŋ¯‹ú__˙ŨÕīÖÕiēĢ˙û˙˙ø˙đ_ū6˙õø/ä4é~AļŸ˙˙˙ë_˙˙˙ę+˙đ˙˙xūž˙o^ęīûí-ūˇö—^˙ūŽđŊÎ˙¯íqúÂ=˙× ˙čŋU˙øø˙˙˙øČJØM“‚ë§˙‚īø¯Úũāßvš_ĩ˙˙žëë˙íá˙ô ˙˙íĨú ÕQ‚˙Õl˙û}ÕüáÄÎO˙˙ú„s˙Å7ũņüt ÔyOú Ú8˙Z˙ü˜÷Wûũ÷˙“Ō$?ųĮú˙ø…ú_ĐKëõI˙ũ/ŋ˙Ąč˙˙ųĀ`˙́öŌ›<ā1q˙Áŋinëo[ČūŖ˙ô?ãbŋ˙û˙Ō×ũŋPû˙ūŒŋŌōoõößéŽHwا˙˙˙&?˙˙´—_äõ{ /ëA6 PO˙÷īöļ¨āf˙˙÷ŪŋČ¯ëƒ˙ß_¯‘_lˆöų{_˙KũSŋū–ŋúĮõ˙˙ũ˙˙ũĨūMü†˙O˙K˙A~õî•÷Ŋ>÷˙͆@j]ií}Û­ŊĩũzĩīÛ¯KÉÃjõ˙ß˙˙úõ¯DG˙oú}ü„}˛#˙_×˙ä ú˙UÛū‹ƒôĢũW&ũ¯“{˙õŌ˙ũûŪ›ĨÕ°ĒÚļ—ˇÃ]?ImvÖŌM´­W˙ÁŖúv“¤•¯ļēIëúwOM×ūÚ^—ëîŋūÚ˙ūŲ~¯ÕČAëlˆ˙~ŲúúĻ+]Šŋ¨Ø˙˙ž*ļÂA lP@ؑĐlP ÁŠŠbGà Å v)´aM4áϚpÁAĮaa„mTÛI;{ ; NęžĒÚ[i{ˇ_˙Ĩ¯ëëđíK×^ŋ˙Ū˛OtęÕd ųŪŋČAđÂÚ BÁ` D(ė* Á;MLa0ša0”0”0Ĩá Ú BTĐa4Âm„ 6!;1#ɈMM™ĢėKЃ>اĻ! `ƒ@Ø ąA0ƒŠ4a$ĶM4Ķ`ÂPÂ0ĻŦRl0•Ēéŗ ÚW°ŌV×Û^Õ×kÕ¤ínŊĩn­mqÄDDDDD8ˆˆˆŒĀąˆeÁPƒ#Áˆ0 ˜^@ČčdpĄĄÃ5TĶ UˆA0ƒ4 Ļ!40ƒh ÃĄ0ƒ0ƒļ(`ąA‰ lRr|RđE@IŌiÛ 0ÂŊĨúN""â""""""""""""""""!„!‚`„E°Â1ÇpÁ4ÖI†šh Ü ÚŽƒ8‚bēb˜ĻH  &Á„ŋIŌ`HˆˆˆˆˆˆˆˆaaĄ! œ0˜Aˆ_aŠôĩŌqÄDDDDD}.’ôĩIĩIh‚؏á!SĒibAlذÂZXąÅbÂĮü˜b2ļä2!žAŖČjƒ?ČŽ IÄ ŋ x1ä2@úa0îl†@4Gų €#ˆd~ X9‡=˙< ĮČ îŠčヨpáÁßB'N@đ0ä2GČ . Š„ˇúüā …žC w|âŽr=AĶF&@đʍH cŅūŌ†ŋZßÚũīĐM?Ë+Pp郸ã¯[ŋ˙õžúų>öDôūūŋOũßϚū¯Õ_ú˙ūģüE|R܁ä:ë×Ŋ/ęŋī˙˙<1ÁBøL—㐃—„ †Ė ž@‹ 1™ „/r  @“ˆg˛_“‚ Á‚ Ųˆ!Œ!ĄÂyrųpC@ä+P>L}ũU}}*Éņ?ƒŪ0á“ōü Â8„ޤ? ÁA’āœ‘ŸW„ĢF1„Ņ 3Ÿ á‘đA„2 ųEG0A„P(dāƒŅ"ũbŽí7N!Ļ×[AŌôŊ÷Đ^Øb¤č&>y´› é6A´›‹đh'Ōm'œ6]iÁ‰vŌx—š6‘ÛFܰĄĐAđÁ ƒa ÔHķųË9,#mū˜Fæ†éÂŖ ]„b *a<oa*ÁUĻd¨_葙ŗāA˜ä%O8ųŧ‡âŽä1åņ<# yx@Æm}+~•ęú~ëŪ*Ŋ}[W[Ō[ÚWZuĩëĻībēz][Ū›bĩnK ī§Iô¯o¤›v āāđš„úMüHí¤Úļa̓68bGmh&ĐA°fÃ`A›T]4`Øa4ᜑ†đŒFí0Áĸėzj~Aá0ƒ%ÄüŸ ũ˙­_­}˙ūŋ~•´*ë§Ũm˙Úõ˙˙§ũ×ßÚŊõĐKéUũ%IuŋOMÕŨi=+m=i6“zNGii6íiĒJô›§‰z‚m' h83aDžŅƒ…Ö˙ū˙ūÚëé­m†?Ķ×_×îŊ×ũt?ēÕÛíâũ_×ū—Õū—ŋëĨ­NēNé{õukŽžļÅUŋžŨ/Û¤đ›_§á:M‡/ŋūī˙úŦAQūf Ÿ_õßû`Įéą˙ĄuāÆŊ¯Ō vÂë˙ßÖļūūĒŋ˙ĢöŌîĩ¯ēŋņ÷Kūŋ÷§ĻÕßū›íøĒ˙÷_ũ˙"Ÿ˙Ž ƒQõ ĶOũz㓘ü„ŸëÃY8hô%Īņņ˙Õą ĒúUø¤)úëlW ŨZũ˙Ļģũékû˙ūí/õi¯×ĢĒ˙m|#_ķš „múr˙Ĩ_íūō˙ņ°˙˙ČlG˙ä48Û˙ŌKA•?ģ[Wvh'Zņ]ņ^ž×V }v˙õ˙ãûûa+ūá Ŋ˙úl ŋ@ŋ˙_› îp3xFĪ_ķaūŗ˙á˙ ŧâ~—ū—ņĮđø˙÷Ŧ‚ôm}˙f‚/Nh ë_õ˙ų!âũEz_’ü†KÉ„ŋũČ(ę]˙ūAG~_õH/˙đ‚ęæÃC˙Ōų°+üØe› œ7Ŗ€Įį+}­9zûKČL=ÃøØw.šū˙õúū€_Uč¸4:_×ūÃ×˙˙õūCˇĨ_$?ų 8?õ˙éø"?Tēoëũ$ŋ¯íH'm]mĨ Nëīø@œ7ķ`Czõ˙÷§]kī×]Û"šû¯ũū[˙ƒīƒÚ˙~ßÛŨkû˙ūũ{ėwúDc¤Iö˙ô]<āŪŋ˙â—ŨzYīČ7ínŋ˙ĩû÷_ŋ˙ëמōq­ŽDũ×Z#Ûī×˙×ČŖí‘ÕüŠ?u˙ũ˙ļŲ?×ëūBôúMŊžŋîëŖEwKɯĨ’ōpn÷_&?˙ûÕ¯R@ŽŋÃCKOĩVũ´¯O_´­~ũROũzmm-Û_J˙õû[Ģ_muéWŊk]RŌũHĮūȎŲŌ˙!öČŖŲ?č/XũX˙íŋ÷bŖ˙îŋÛJ$t ŽŌ[XqV„vļÁ„ļÂV–Ã@ØĻÂV4öĶmUSM[ ^ÚVļŨ¤ļ’°ÖÖŌí?m{Ķö×Ũ[öÛIí+ŌT—o ÷zZJßuí¯ëĢußõũ6FūŊ{ƒī×˙¯ûéÃamĖiŠpƒb‚ ŠyėHōĻ)‰ ؑĐlHø§ ÂÅA‚LR˜‘ø Ø ąAbĄ„ Š´‚ď†`ƒb‚`œK Â 8ƒb›JÂ0§l0•Z°ÂĒĒļĶöļĢk}ĨijÚMĨ¯3ęũĶ˙÷ũ÷ģúûúø`ƒA‚œ6"#6\0— PB ƒ!‚ †`ƒDC — 0šq )ˆA…7&hM4A…/T…L&Ŋ„°šM0ĪZbš0›ņ $~‡@ØŦƒXalS¨4í(Øa$퍆m.u'hēzëL0•éß턭*¯õēĩņ@ƒ ƒâ""8ˆˆˆˆˆˆŽ""""""""""""" Á28æ@ ¸â&ˆkU†0ƒ ôāė ÅA°˜Ļ! °ƒb˜m ŠØ ›4ƒ°A„ %izlPOt˜a5ŌŌ˙ą ƒhg¨†hC ƒa5#ÂaŠ‚?´áŌ aŠb_ _¤éb(ĀHˆâ""""""""p !úŌČ<>) „>rb°¤2 †x Ôúy1×ūŋuFp°ŨŅŖÃ6ĨË<Ņram6ÁlKό&Œ0Â6Øa‘†đ›>!sxF Äž0ی6ĖiĻž†ļÂh45\Âđƒā!„@ŠāfäĪäø Ņ#> 2\0@Áƒ‚Cųl#ōÎ8E\đ Čeæl!`aČ7˛ >k Ļä6‡ }aä~“aéÆ!Wt›ƒĢui6āØa!Ōt›i¤›$s†°úŧ ÚMé6‚uUŌĻÃ;ŖgØpb^a› %æ‚mt`Ú8A7ĸéņ#Ė3‚Ņƒzhà ¨ZašĻŒ0҆<#xicxA‚ žđŋPØA’™|2Į/‰ņ B.‘A›ąMĮđ7F9 Ų ™ >Æé^“}_˙Wz˙õZˇ]¤•íé~õ­ęŪčŋEõ.ž‹]ĻŌzWxNđ&ŌtēzÁŌÁÃAÜ:M†$s¤á‚`(‘ÛI°čŋI´œ€Ę6 Ø(;q/6jpč&Đ@ņ/6Aa¯a0Õ… …0žF0ôēõ˙ūß­oëzÖßŪžÚ˙nŸ­'¨ĄKĒžŋ˙ß§_uouâĢjéûiĩoéŌmK§Öö›„īI;Ĩi<&Ũ¤˜ÃƒĢƒ;†l$1#ą#¸0@éđ˜ĐAũžļžĮļĩjŋÚÖūé}û˙_˙§Å/ŪĩĒë˙´ēūŧ}ũĢúĻ–÷éú÷ú˙oëũéŊúiēŌoŨ'ū˙üBėĖ"Åq_õ˙õúøÃđŋūũwUûx#Ÿ˙ũč$ũk˙øū6˙ū˙˙ė§īf‚¯ÛИ^30ĘíÕ~+˙˙ë}pĮæÁūx? žl˙̓Y°ŅY°cáŧ Oķ`Æl1ũRŲ˙õ¯˙œÁ<ô›˙ī˙˙ø‹‡˙˙ĢĶú˙ķ˙ß˙õؘd‚Į˙ũ/!˜9ũ/ōc˙ũ×ų3K˙˙ēA˙Z˙×_Ažŋ˙˙˙›ŧØ˙˙ÛÛöũ˙đG-˙ņ˙˙˙_&öŊ}ūŋß_ōc™Ãz]˙ú悝ũVž˛C˙ųĮ˙č˙˙ũoß˙úDüûKü _ūŋķ`ĮÃō}ëũôĢlŠ=ƒ˙ūBd ėy?ū˙ūB˙ąIƒ¯îžĩŪž˙¨îŋtŋü›˙ä08>M˙˙|Š8?dr-û˙é˙˙ūĢkÚ˙ũ]~ē믎߭7ūˇ^Ŋ?ļDÕRܓä(é%¯ßK_˙ŲũČGˇ˛(˙ŽŊū˙ūßÛũ×Åa˙ õĨūL˙˙É ûkŊ§k}Ĩ{i6—ßíĢi>ŋ˙éÚVŊ­ä6E7IŌ ŋŽ‹Ē_õūÚŨ{¯ũ˙_u˙Yü„ũë×Ū˙"ū˙˙˙˙īØ}8im¤ŠÛ #8ĢJ*F66IŠ[´Øa&Tà &›j āŠ…a„ļŌl'tąVVv“­ũ­Ûi>ÚŪÚ_i~ëîŊÕÛim­×VŊ˙Wí­Ōjúë¯ū¯ūŲû_Đaˆ[„MˆNÔS˜Ķša1ML  Šbœ1 ÂĄ@ƒbG´Ä&(aŠb]:m“<  ‰ta0ƒŠ „Ø0Iˆl0JŌcMb˜¤Û¤öŌė/ÚíĨ}Ģ×iũĨũS}¯­˙˙[öäã Ž°ÂA„ ˆˆƒ ˆaP`„0ƒ  &L'­ÃM4à „Â[ÚM0Ä&zlB‚<ØA9PAąA6!Å aˆAbĄ„˜ĻÂIÅ*o %b­(E:NÚÚ.„ĢkiĒ÷ļŊ§i.4#ˆˆˆˆˆˆˆˆˆˆˆ|4"""""""""""!0ƒA‚ !hEĸnR<) Ä$Ɛa:‚*a„TéŠĻ$ubĄą#ĐA„S: ĐaM† +:×˙KDDDDDDqÄD!C†BM p &Gö˜b 5Áß x6_¤C@é~ˆĐâ"""""""" ũi&’_Ž>ēWĨä5m"‚ŗ×ąAPi~’ká‚LXBiéixˆØAąLRâ"Á ņüāŋ:ƒdĖ9\w Ė9 €Ÿ„o3¨iˆˆd Č!H xgV™Ã><0 ˙×=™öûũȡÍâũ.‡N3î9ļqÃŖyđ/ũ˜JˇúŨôœ>@Ė2ĮAaÁõ÷ŋßjŋ×Ōų…FˇÚ÷ú˙ũß˙ņ¯×˙ũēë˙ŋ˙Č(˛ė†›—^ēū˙ŋ¯āŸÂAž3Ķ7ÜĮ ”˙!E™ŧŒæŸų¸ƒĖƒų‚vAG|˙_˙Û7ũL#mŽ!0ƒÛŦ Õ5Į2T ža ÚĪä?‘pØGäP„ĄË˛/P9xK'#*ŲË!ąĶ˙›#°ptēoG Ŗžē8l1a ×8Ãô§Ŗ“Fß0ÍSF&š‚L# Į„ÂaKĶ#™|frøŸGƒ‘#Äré7¤ūŋõ¯Úû×÷]kL*ø1ūއŋĄîŠß­´Š˙˙úĢūũ˙ŋųĸë×ø…­×ũVņūH_¯Ö+˙õ˙˙×˙˙ëé~î—čŨūB‘÷^ņ˙Ą°˙ĩĶÁu÷Ä/ēKô+_˙˙˙ûi6@m˙[X#5÷ūëûīøøČgGä)ū˙ō›˙˙˙˙Å~û˙úũ¯Ôø?Ž|}s`B›ƒŠāËø#g÷¯đG/˙˙Įīú.zŋ˙ôŋbŋúéÃ˙øKá~—öŋč˙˙üØ1˙Tĩō§öŋ˙ü„˙ČaČüœú^˙Ĩû˙é˙˙úūŋęI÷ôŋ_Úũ×˙!çûí˙Ĩ_ūŋä‡˙˙˙ų˜bžÚIö“÷ũ˙÷jé{kēŲüˆúų?ũūÚëK˙¯˙˙Ū΂†„°×Mēm ›Kh;ÚŊ[IēĶ´ŽžöŌÛ¯Û_õöŊûū×˙ü„ vÅ`ą  1LBAábGá<0A„ÚAA°ÂVēi+al'ÚZí¯{kië¯ēûkÚâ-ƒDMPaˇÚkĻŋ 1VĄŠŠhƒHab‚Å1#Á„b“L'aÁĻŽÚσ´]Om(aOūÛ mތ DA‚D0DÚÂÂa4Ķ 4ĶbI„1#öļ) qLU‚  `ƒb‚ ˆ=' wXĄ,B€Ú0„DC# @ +g¯éĒCˆˆˆˆˆŌ×ö–‘PŌ„Ŋƒ>1Ú^ B…ĨâLRx°‚˙! .@đÍŋ ‘\āĘ †Hų ŋ h—Ø:a™¸w!’đ @đƒ<_ x5y TŊ|ėpÂ!-ÃØ:`áȰdĀŋwëļC _r C G!ß!’cęīhÃ~¸û˙ũ{īI(˙˙ņ]¯ü†I÷ūžĢøøĢWčŋ×#˙õ˙Įūõ×_U×ũ}'!Ž!p…ÂA2XA0ģ {ņ"á [!žČėƒá ö† ƒLLČ#äԃkB<3]¯û@аƒVK‚a<ŋ'Á0‡(z„ÉLŋ+‚ ‚a.Aĸ@à yeņ?ȇ(2C+Ęr,ȧ‘ |CqÆlSqāæiŲB ÂX˲„6Y†ƒLYä3š†ÁČ0>@âõõp‚l#m ƒohÜ0ėKí3|3aLÕm„ZqhÂŖí0Ī0ÃFÛF čÜ˙F ē14`Ú.ƌ6Œ6ú10Š„ÂϏHęŒA‚arA Âdŧ&W„@đ@É`@ČI‘đ ÁR|Kä-‚ūEÃq ^ äÄČ/K!‹!™d1d6Cšã¯×]i6čŋH;†tœun4›z$r†xÄ ŪāĎm¤-[ĐVI°Í„MĢiJŌ°†ÂĻÃĸü8bGm'tƒƒ;Ŗ3Ŗ҆ĻWm´\čÜ(#mÚ0š0àĮĒhÃ:ŖxjƒÂa0á’ā™)“āŸÂa"Ŧƒ`‘đA’9_ū Sâ›fČö\2§â „ˆO!§†„Âė†x Ā˙kŽģUõ}Ŋ^•ŋVÕk×ĢtŋŽ˙ũ>ūŋ~“lVđžœUéˆMĩBëõū˙ęWęŋŋī„ 667I6!ÚwÚ@°`“§iĻ›h5O´›ĻJĐ=°• ûiZÚv“ -ĻPö­Ģa+ūt ?[KÛI×ÛJûm6Ōĩ´ž×ø}_˙{ĩíí­Öŋ¯Ųõlˆ?Ų>Euŋˇl„ū˙a0ƒ‚ ŸØA„AļáŠL1 ‚  Â$zaÛÅ1LHôlSé„ ‰b˜‘āāÂLTHøØ¨Ļ(`ƒ0ƒļ$|0ƒ0ƒŽÕ†m$ĶaĢj›jØ[ 6=†Oį@!ŽŋÚëûkiZßÚūé~ŋ“‹­&ë[[õnŸČˆˆ0B""#8p`‚ÂÄDD0B"á Áa0„0ƒE„ Âa5/ Âiσ ŨÃļÂkö‚aÅ1 lT"¨ėHølTS B0ą.ƒ0ƒ°Ō@ ƒbGÃm&› ml$ØF5´]2‡×†•¤Ú]¤ž“jÚļ­§íĨĒíĨŠDhZb""!aˆ0T' ( ÂÃ4B¸28tĐ4 6…ÖаšTđ Ø Ä("ĻÄ*3c0ƒb˜Ø Ã^đ“aÁÄēL0“i{kîēN"""DqFňˆˆˆˆâ Á†0„XL!a0ƒ2:PėOLPa˜Ļ˜\Sb˜ „Ĩ<Ũ$’t´!DDDDDD8ˆˆˆ0B$Į†Xâ!…ęŸëõ¯ˆˆŽÚZI]%ų €H¯Ø¨¤› %éZZX3Āx,U&à iib"(6!EŌÄC Į˙! Ž@îōƒG‘ Iä ÃG“â†× gb{„Áß xiøL‚Ø,ú ‚ŋ<'aōwC‡F&C$cFĶ Ū<†w! y Z‚ƒūžūä2A˜t´Č5‚u˜rĒā¤8á•ū×û^žŌē˙äGtÇ|VĢë}ëōĄß˙úøŽĒĐøûK˙Žžũ~>¸˙ú˙ë¯˙˙ä ņ„Čj^Bá | EÅÍ˛ ļGd4Á H!ĄČe_jr CäĮČ+Ž@đׅÕ˙õ˙ xœy$gŒøáƒ%ÁaGŒųžØL@N…øA‘đL? ßBL‰2œš.ĪWŠ ā6Îdtn8Dã=Ÿ h™/"áüŸūD‚ø"žËƒÃ'åãÁL˜fĀđĐp)đ Ø*ČgrČ0>CJ2 ŋ˙<ë āú7 6ļâ_hà /é§.ta°Âh#l=0Œø—MmcFÖ&z1ļÂj†š0ۚ7 Q‰…L&Ŋ‚a;F!„m#‚aÃL  — K‚ 3Ķ 5'Äü dOPDãāāá‰Ďm'Iˇi,:/đū ÚMĐzŌzlPt]RpĎÚNé6 HėKԃ`ÄŊ Ø@ ķ„ ĸęŒ6Œ‹Õ:UFæ?ÛažíT'֍ėO2~™š0 ÉreLŋ ü+Ëü Á)Čhԗ’™>%äK.˲ø„‚rø‡đ˜O/>f˛A „3Áã&>Ķ˙ęęÚWÚļ—íWēWÕ6ÅR˙ëk˙î“jņ\SĢtôâ“tĶi\&ßuvš ŽÅk̃¯uõũ˙C_ī_ׯüØ6ŋæÃMúøz›!˙ũ°ßüā5›?„l˙iN˙œū¯đGđGŊ˙˙Ôy ütkūAzo_ų‡NN5îē˙¯Z˙Šū=˙˙˙˙×Ī öž‚˙ü„đoū‚ ôė0•_ƒßúė,#e˙˙˙Öl!?īA}˙Á~×ū#oūę?˙é~=ō Ķēōtõŋ&˙¯˙ipßūMÁũëŌ˙üÎgīúũˆ_˙ä‡8äK˙ŌņŌ˙˙˙öũŋÚ ŋ˙A˙͆vÚ_ŦØ1īöÕūž‚9ũ˙˙ßl„¯÷˙÷ę6õß˙ßwũĩūŋEÁ˙ëo×zū—˙y7˙˙õúßK˙ôēm/ü‚ŽbŊŋ˙öŌūl3~/˙û˙­oԛēûdGŋ_īȏ˙ôõŊŋאƒëëúVBû˙ŋũdQ˙ūŊ˙˙ôĩø¤ĢëɏĨ˙˙ÃƒŖÁk×˙čB˙ũūõŽšUë~­¤ƒēûKĢ×īĩiēõ^ÖÖë×]×˙_Ŋē˙Ŋ××]ũ˙W§õČŽŲ˙˙˙˙˙bĢ_ô\ė×čĀ4Éŋúëũ˙i^Úà °Ķ´ˇ[VŌŊ°žŠÚO]…V×í'Ģ[Kē[JĶö×ä1ZZí¯ÚV•×iiöēw˙ĨÚÚžŨuëûZzkëë˙ų=ēßY=éŋôŊÁ0A‚Å1#áą#á†+a„ ÂÅB*Á(—Ã0„0“ $Ķ8‘đa8ĻJJTā$ 1#áωšpØ0I4Âl0ISŽÕ´“†”0Œ öJĐz¯wīM§a[ Ø]ĩ˙×ë˙O{ĶÛ_Ūĩŋ˙ëėˆũų˙pÂaA¨ „" * B !˄#ŠG… °a. ˜A¨)ŧ Ä)xTž!'LBØM Đl&“M°Ä$ĶAą mAaŠ9ŒSáb˜‘č Â0ƒP@Û 1# Ø—@ØĻ('> ˇa„c a lVÚ.ƒNļĶÛJŌŌÛKīų ×ÛJ×ĩí´¯ņDDDDDDDDDfˆˆˆˆˆˆâ ¸ áB$4 Áˆƒ† ši„Á0ƒ M&ƒ Ķ´˜„6‚Å8AábGØAąPŌl6“LRiϘM6Riļ‚*NĶ(a¯ëé>""""""""""8ˆˆˆ`„2áŦ„0„C ‘ãąą )CϚpĶļ‚ ØŦ1 ؑᄠlB0ƒô´ŸHG˜""""#0,DHAč0„0A„"!?Ĩëé%¤â""">—Ö@Ô7„ˆd\i:O§Jà v’Ĩ¯č1Aą ô´Ž­qØĻ)°“a,E„„Ä,D†@0ø˙<ŧ_<2¸†@?4 7ČPūCDdœ†[jrƒIČ=C$7⠝áè:iĻ‚ÜČd´ xeBÎä2܃S<4yÁWČ)Ëėāŋ˙íÕjø:iĻš<4CĄd܂Ø4q ˙oÕWId2Þŋõ¨pg‡OČ ƒøũ"?ũnõéd'öƒä‡O˙åĶE×lq×í{ŋŊ‘×˙UŦqĮÜWë˙˙K˙_˙Į×ōÃû¯ë˙ë„PfÂBy å>~"Y°ŽdK7˙›ČH!/'„ķ! ž!û ×d^ Ŗˆ(ž!›„ä>"K öCNČg|‡˛܆m×r˛HfČ˙ōNë˙…Fđôbhģƒ ˜Fa4Â7;LŸ“đƒÜ0á„ĶC Ŗ“ŪÉxFđÉų>L—“ā˜Fņ}Ödš0ƒ9—áK‚ AK‚ 2X d|a#ÁŲd99xA<&Ay"Č>dpƒEh˛˛ėĘr A Žũ}p̈́ Ÿ 6x‘͇EúAÁ‰yĨq#¸81#ē ›Iď4mÃĸę‚l: °ėHķ—š3Ũt`Ûĸé„`Ú0Øa‚0mŅulC ;P›‰}Ŗô]YņÂ6ی6@÷ÄšŧHę´.0†CdŧŸ/'ÁX@Á=ƒ!GÁ4PĪ>9 ä'üHŧBAvC4rđ‡Ã ž@‹!Œ!l†ŖØ9†SúûĨ}7ŊlVŧ'Ž›zm\{h:NÅi6Ōģ†ƒģ Ōą˙I°ÅjÚOŌļ¯IÁ‰Ķa„I°t°ĐtŽ’l8bGšAô8t^hۇF 7tcnÄžŅŗ1 °Ã8 ‰hÁŊ6xpĪÜŅsę†*d/“đƒÄ9@Ėa’āƒVE@ d¸2`‘fG„ģ!; Ĉ~!Į.ČĮ/ bĒZ˙MõŪë×ī˙]=5÷Mõ}_ö—õU¤ÛuWO¤Ū˙öņ^õé[ÂzqÛbƒ¤îŽ18p ĨcNáĻŌlíĨzM¤øT› ĸę‘Ūƒ†l*Ã< ´aĸæÛFF 0ļŒ6Ģ Šđš #xdų2ŧ Đdš ˙~Žßč_ŽŊúëúĩņ[×˙ũ÷õooũ_éĢé˙k×ÕũÖīĢßĢę˙§Júnø­ôž›øÖØ­Úm'uvƒÖ–­†!ŌŌŌl@ƒ†$wH6EÔ—¨ŊpÎ@fū‡^ū?¨˙ū;˙_÷×ī˙˙^ļŨ­ã_mx˙_õ_Ĩę˙Ŋ?ī˙íoúęũ=?ŋ˙Vēļ•ĶĢtšWžŊ7VÅtÅ6¯ūÖN_˙ūī˙˙˙úõí.¯×õÖŋĮņZü˙Úë˙ŋũo§Ž‡ëęíæÎˇ]ŋ˙]jõÖ´¯ũ>ÚŊ;T˙˙ÆŨ7t_͍/ץ˙˙ũoëņ~õũͧ“ūģOū„/˙ũ˙ū?ę?°Į˙ûąÚéÕŽ˙ûß˙^ēņ§˙õæÃ;ę‚6˙û G˙œ?˙íũ˙õöŋūåŦĪ˙Įûä6˙õŽ×ūČI˙éŦĐoõüĖ,Bū+÷ëĐ÷˙úß×˙ū ßĨ˙˙ļAk˙_˙û %ÅoÔØ?~`˙ ģÂ˙üØ ūÔ#oû˙˙ī_ø#Ÿ˙‡˙ũ0y Sø2§˙k˙˙ŋ×˙äĮÛ\‚ãƒëĨ˙˙Ą /ī§˙˙Ѕŋ˙÷_ū‚ũ/û˙ÛAŽŋ˙ũĨ˙„ ˙æÃ;˙˙oq˙ū5˙÷ø˙˙˙wP˙×ī˙Ŗώ˙ŋ˙ũ˙Ũëúū—Y1˙˙ŠK˙˙÷ö+˙Au˙ƒx˙ø7 _ķa§ūl ˙˙ų°c˙˙äWėˆ÷ūŋŲū—˙ō}ëßôļŋōwØŦ„ˇŽŋ˙˙˙EÃ-˙˙ú0?¤ŋ“ōp˙ÉEŊ/˙˙˙ũ˙˙]´Ŋ+îŊ~×ūíÕv×uõõ˙!ž/ŨvÖëuČG˙_K_]˛7܄ôŋ˙ë˙Đ]_û{ī˙ũ†ōnŋ˙ūßëūŋ˙˙ÚĢkkĨļŊļ•˙Č`a¯ëÚ[u˙ōĩĢēútžęĶÛKmoĶ˙ŌíŊ}ĩŨũ_îŋëČŖöD{}ë˙¯×Üõ˙×˙ũ䇨 ƒb“b­(#ĀHq#ā &ÅÂiϜ8aÁÚlHč4Ø0•6’ĻĻœ< nt“a…mi†ž×´]2‡´­NÛIXkmĨü† ?ßÛ¯Uų˜(ivļžĢkŊy8íīëūû"J}˛#äQßũū›"?˙ŽŌa¤aKÂ1R鰚Ķi4AĻv) ƒ †´ 1[a˜A„AˇŽaŠ0Ä&!;Â ąQÂ*lS`Æ6( ؤí8v„ ;†uiißiΠÅ{KEĶģöŌė-¤šŊk˙k§íĢkw_¤ÚÚVŊ­¯_˙â"""""""""#06""" Áb""#6Q˃XA…@Ââ„,al&A—0ƒ  6؄ĐA„Ø—O P aaAļÃAŠąPÁÅlT5Áv’vŠÃJÖŅtk %i+¯l4˜i:ļžÚŨ6ļŋŨiqqÄDDDDDfĘ ˆƒŽ! B0˜A `š ͆ŧ!5ą h0ƒ‚*lSá0†(1NÃA ØĻ6Ō‰ ÄS í4ĶĩŌõ~AÄqFcˆˆˆˆˆˆˆˆˆˆ0A‚ Ām„N B 0ƒƒP‚lôĻôÄ „A„Aą_Čiii>“â""â"""#ˆ0B""×ÕĨj—ŠÃD}~#ØKÛI/Ž—ëÃÅRmŽŽēų0ĐāÁ<5°B ˆQL ´ŧDD  BøˆˆAã˙Čŋ yqhiæEŒ˜#аoä8āŠä øá—Ä2oaĶCD?ä48 Č ŧC 3 x ūä5œāĘ9 €Ö!ŪŨCƒ‡š0ŲÁD x@@О †@9ŽNd {^ĒאÉũõ[}Æ@đÔ˛7üĐ˙ø˙ĩūõ<#×üP`„X}/˙üĮkkŌ÷ÚČGõ]iõqŲĐ­Õ¯ĶÕu˙˙ĨÔQp(ô?Š ã°CX|‚쓎&:Ē­¯˙˙÷¯„HA‚'#6|äø—ČZ. čĸ?Į†|)ņ Įƒ9Dg™ĮČø7=‘Æb<Đ9đ‡†P2âāCĀ ø§⧁ƒ‚˛ 9 ŅČlōaŧƒ6"ČbČ4YÔ‚Į\›Írw“õ˙˙ßTaļšÜzhÜ$u‰hÄúkF&ŒA…OiÚF Â0Æ š14oaÃŗø*i„bhŪÂvŧ2|”#á-´.L č†x"ĀA’āƒ2pL Éq>0‰{‚GÄMpŗ#ÂđGÆÂ>ȞD˛ī?,ģ#™ â ŲxC7' ᇠ^Ķ!›dhuōC펞°”_ii¤Ÿ HæŌÕŌl3a-I´› Híƒ00šIéÃ;iĐM ƒa› HķEæ“h&à ¤l1/0̈́:j‚Ã<ҏičÁ¸—Ú0ÜZ÷.pgņj¨Ã8¸Mm5ܘCF „ô„Â7 ˜Fāđ™/'Á0ãÆ0AŒ0@ÉpA„H3„™Ęr t!<§!˛°^&Pä4pAk‚&~’ūÅWoTßģÖ)6“ôÚNĶîô“i;M̤šī´Å:M¤Û×°›ŌyQuWa6“Ž•†¤ØgŒHæÃƒ¤õ탤íD줨:.Š6čŲŌ ‡—X‘Ė0čŋ ØbGm.%æ1/4ƒ6Š&Á‚‰}ŖÛEÔ3ÃŖ čÃhÃF ĸæ0PPƒYø#x”ķ=0yŸŧŸH)ģ¯^õū­oÖ÷éuēŋŊozZĻūšu×ēIēŌt‡÷Iä}ŌŊ:VÕŋ Ũ\iĩ➝Šé×bēŪĩÚm+„Û°›Kunƒ7¸zÚJô›§I´œ8bGpfÅ ƒ1˜PîˆûAâxZ/ũĨ ũ úU_Ķ˙ÚÕīũ¯÷÷ūŋ˙ßo¯ũēÅ}~ŋWŪûŋ˙ßõĶuK{JõtÕ7[×]}=>ôßZņŋ¯Ĩ¤˙ģ´ŪéX‡péi70oôƒ†l —oŧv˙˙ū˙ŋ˙¯}*x1ņčëëŽë˙†"Ķ_Ķ‹×ĩ¯Uü1ëûõņއÕņüuũ˙í×öū‡ëö÷ˇß§˙øét›ö÷ØOų'Ōû×Ļģĸę’k¯÷zÛ4ŋé˙Zz~ēÍŧBúúĢūŸ˙3 ˙ĒÕ˙úúüi˙û˙kũk^]˙ūûĐÕĶm×úßŅÃ[k˙ßņ÷WƇûĸūŊ‡X*Į˙qÆŨGûD3)˙u˙ūÁ˙˙Á§DC˙]§íāŋ˙÷ÍgüS¯Įø1ƒ˙˙ņõŌúúĐ_́ÛKæÁ‹ĢÔØ9Āc˙káŋŲų°cũM†QĀ"ŗ`ÂđŪŲ˙Ũ{^q‘Ō˙Û˙uø¯î—üƒĸŋ˙Շ˙‘)˙Ã<Ų8jŲ (˙ëúíû˙áē_û˙úõũ¤˙@ū_˙ũ?ūh/˙Žž„đoũ†—̓˙æÁĐFË˙¯ˇM˙XFß˙ŠlĪ˙ëZm/˙ōCõß˙„l2õäĮŠŋo|ėzOĀāŨõŋ’˙í/ōc˜r$iúë˙ūHpÖ![˙֗˙ūØHƒ˙÷„˙͆v'˙ö×ųĀh#„ū—˙~ģŲ?ú öČAũا˙ZŽÖß×ŋ_öÛc˙ģmW÷îŸ˙˙Pų1ũŅ€#ûũ˙ú_ūū„"pũ/˙ĸņƒ˙ė0‚ū“ãc˙õ˙×˙Mu˙˛#ä ˙û_ũk‘_!˙ü„!§!ūēEԘ˙öąßų?úÛ˙č/û_ú×˙˙ô`ŋ˙_“û!Ãk’˙Bú˙˙ëļ—ü>›KZwIĩ×§ŪŽ­{m&ׯöÕĩí[Č#ÕĨ§ūŅ {k˙˙˙ũ‘˙×!˙×Û"˙Õģ×Ō˙ų!ˇĨˇ˙ŅpĪ÷ĒkōcūÚJØ@Úm}yĐi6­ĢÔ4›KíiÛJûJÖÕ´­~îŌŌi´¯ĶW]}´ôŨ×Û[õūxĢŽõˇļŊ×˙¯ūŸëÚëëļģũ˙ũ˛}vē˙Œ q#ŨŠ a6åáLTUaŠb6)é´Ą„ĸ˜‘đØĻ)ŠL ÂaXĻ Ø`’a8¨iEE0Â1†ŠąļŌģa„­4á„ai6—Ŧč>à m¤­Ģi]Ĩá;VŌÕ}Éí×֟ũ×kzvˇ˙ũ¯­dŸû_Ø@Čဃ  ÂēaNĶ0™¯b¤xB˜‚a4A„Ō¯a„„áŠMÔũϘ… Â Ÿõą ÂaˆAaÅpGœPA„@ė ab‚à  ‰b‚_č0˜MŠ Ϛ§Ōm$á…aĸø{i&Ø[l%}éß˙ČbWm'JÚ˙üDDF`Hˆˆˆˆˆˆˆˆâ""""""""""""#ƒˆˆ0B"!p`ƒD[ !b0L* (TÖÂi;i4Đh0ƒx#͊^Åab‚ Ѝ lHđpÂA˜AĻaą# i°Ōm$úVŌũ/ŦDDQ€‘ą Á°„! !; …#ÂŽ‚]4´ĐA†)ˆMn8 ƒ='×KH>"""!ÄDDDDfˆˆ284ĩˆhõČ(I/KĒIÄDDG´Ŋ$ŋ­iöJí$­/Ō_ B8tà XJŌĩÄCB„ĨĻŌÄH†Ë1b"?ų0,â߉qÃf<˛-< ā†x y<÷°žˇiŠv˜§I´ēŽĶē^ęū“nīĢą^ŪáĻŌētœ›Ōm/^žœ:Zˇ¤ÛMSaŅ~i Ū‚l1#ļ‹ļ‚ †$vÁ›pčžØA¨‘ÛyhŲ]Ú6ÜL&ėHûFŲŊDŊMmƒFF҆4b &hÄFæĖ2\jDķy|Wĸ‚„ `ƒ#ã`EšlfãÁ Ūŋ˙ūšzi׎¯ęõ]ūĩîŌéē×u}÷÷Ōĩũ÷Ũé?×zIدĨõڊuÚoíꞩˇ^­ˆAŌ¸'AŌlCA°t´›IŌnƒĶ¤$wI´›@ƒē/= ĶNĀ”ŅļÂ6ÃŅtÜ#„Đ~×˙Ŋ_˙˙Vĩ_˙˙˙ß˙ã˙WWûõ~õūŋë[ôŨë{Mõ}7M]]}ėĶlU[ĩuĶtôņZV’Ž–“ĨĶi7KÛkh;Q#›KIÃĨ†`"l81/ĩ˙ëëŋÚđ×OĐjĩßNëZŪūūŧ1‡˙ŽĩŊļöū˙¯×Đé+ëū¯ŋ] i}úëô˙W´¯ôŪÕžŨ:ëÛĩ÷Ķôé-[]ģp›˙˙˙ú˙_Oõ 6÷^íĄ_ßāæa{ũãŠPc>B+ûk^˙˙˙ū×˙í/ô×˙ū?NŊũ/õ×ũī¯×ëíī˙ūB#˙˙Ž?ČD°ČiŸ^ŪG˙ųÚû'?ž?!é'=HhŸ§é¯iiúé׈]´ŋ§Į˙ũëĩƒ {õŧ4Ō×÷˙t×t=u_˙øFË˙˙üØc¸FÍļŗ˙ÚŨ‚6ú÷íˇ˙^æ˜l?yxŨ(÷ããū?Č9ëéō Ķ˙ë×úûMš hŸũDBũZĨūŖ_Š˙Ē×ú_õ˙õú Ŋ|Auõ͝øA׆ÁŋĒ› ~'Â6^l3žpß6 fÁÍƒÛî—Đ#oôŋí×˙ÆÃa˙Į ˙o.ŋūƒ<ü‚ķ˙˙_Kü˙˙˙éäČļ—ŋēõū—žžXäxXā˙˙ĨÆŊé~õUĨ˙˙á÷ūO÷˙Ú_˙6Øoūl2Ą?ö•×˙`/˙˙­/ũ¯˙oú˙ˇē÷ŋõ˙ú‡Ãú˙Ĩ’pæp}´ŋĩ}ŋ˙˙Ɏ—ŋkĨë˙ėWÕūAFų˙á˙îŋüØÂ6_˙Û˙˙_˙û";dQ˙˙ȝo¯Ú´û×˙īÛÛ˙ä öEũ÷˙øĢâŋ˙˙¯Š˙_ßü#›_ü†6g ˙ũŊ_˙ū—˙÷Žļŋ~ŋ˙Öŋ§ûięõ×k˙Ũ]÷[jëéß‘G×lˆ;äGß!܄ü„ũë¯ō ˙ũĶdQũ÷ë÷U÷ŠōoîūHtŋ˙ÛVĶ´×Ōm;ģģØaXi/kũ­Ĩ§ö–û×köŽ•÷úßļ—­­ûk§ëˇôÚöŋļŋŽģ_Úûk˙­ÖëîBûŋí‘ČŖ×û˙ũ‘G˛]Â0Aąą#áą#Á„ ØĻ$|0A‚ aaÅ1A0ƒbGÃ0˜&ÅCV #a4ÛI­6ŌX` i§ $ÚV”4“‚;¤Ŧ0”5ÛEĐwV’°Ō´]ļ“M„­ÛKm/ÛJ÷ÛM{Kīí%ûä€Ų^éĩĩē´‰ŨĨũkõũuú˙˙ė eÁ\åa ĄšGÁ2ᨠ—@¨A„Û°šzp—„&!5i†+¤ÃlA4a9´!1PGœS=ˆA„ ƒŠx"Š6)ŠpAą[=Š6(  ؠƒ8¨‘đĶjđN#h4íŠģÕ6I7I†“ %}öëíĢ ,'íģ]¯mĢiwZ˙ˆŽ"""""""""""""""""""8ˆˆˆˆˆ0A—„A„A,C0A„!„Đa eÄtaaVĐa5}1H6!4a0ĐL ÂapEL lSÅA‚PŠ€–ÃA lœ4 a„c &›Ö¯°a&ÂIØ[@īŋÄDDDDGĄg. ƒ0…#ą ƒœ1LĀ@A ĶŌiŪĐAąAlSlS=A„é* â"""!ÄDDDEÄD!ÁC0šÂkō€¤ũ$ūČāf ŸM"' ĩ¤Čāftũ+I×Hpƒ8­+KKC´Å3é-b"$2ccˆ˙ä Ū@đgr†d<  Îä2,ĀĮ<x‚Ølí=4b@đ՚ƒ¸FĶ!܃c?āp9Á‘ÉšÁŽČ>CluŌÂ0Üã8øtĻ›#āHŌK"Á ËÃá €'īĢzZIēpųqČ*žC$7uČīĘdp<¤GI {ôc~82āxkĻë˙ú÷Ũ—Á–´—Č@ū•긧Öú˙Ž*.ÖžŌØw x—˙ŋ˙úũøû‡˙U˙ũW]{Đi˙ęŖĒŠ !ß÷õ×Õ×ŋT’ë ˆčŽÍŒĐCa…>ÉŸÃ8ͅ<öGŗáĪeÃXā( †Î2 vEÁZōė†mŌˆ–Č=…ÉÁāƒTÎä#Øä‚ A;"¸Tõmõęŋ°CM˜L#{F÷ŖÔ#{Ä0áŖČ1äųgđâPgĖôÂxĄÄ aN…đ y>'āĸ@Ô`ƒ!Ŗ‚ —Fd{œ ɜ"@§Æz8 Č Œ3ƒ>ú.ĘÃ6fÂe.đr;8ö\# Ūd>r.rČ?oĘCC7+!GČÂĒI/ƒ6%TƒaĐA´`̈́A°čžÍh&Ō‚  ƒ‡‹Ėąh Ėf;ĸę‚m-6ļà ¤`ŸčÁ0Î0Û<Z0ÜK§jŒ7ƒhÛ6¨ÁˇÜôŅšĐ&Ąš1 ‚„nvF0Ér Į„C\0™|4P0Á"G2'‘á.%†ė—Ãq0™ ūBq åá† Č E…I"\C<itīĻ+WI>›z§Iēu}ŨŠ}ÖÄ8pÅjØKJéˇk|8:í$ÛSͤØaÁ‰¤Øgî“´“a›aŅ~‚l t]:m3a2ę•ƒ6% Û<ĐAô`¨ÁáFFÛŅ‚†p!ļŅrhÃa0×B]Ēό1#Ē10Á“đƒÄ80Œa’āƒD€U ‚ d¨‘gĐ6#Ą˙OúM­kl˙ęũ?ĶũuQ=]+õŊũô¯§[Ļũ+wWĢÕļ+[âšIŊö+ë§IļŸvöéŌt+Jé&Õ´­+à Hí¤í$Ú °ÄŽé ØTØ3`Ę\žŒ Â6Ãa4ÂĩFxFæšū?˙õĐëvīÕ˙ū+d2īĢWtŸ˙õ~ēĻ•éû^˙ŊĒ~ĩ˙Ļĩũn›ßŋ}Ōn—ˇëõ÷ßŋiŌąJÖÚnŸ[b}[ B– Ėĸũ āĖm&˙ zôÖŋ× k†?˙ũn˙ī˙ß˙Ũzņīˇūžēŋģŋú×˙{ÖÖŋÖī­oéū¯Õ*z÷ĢũĻéļŌâŋĶé~„ĶQ÷õæ€Ú™˜˙˙úŪ¯¯BŋŠ˙˙{uū+ãë˙ëÃĩkŌaŽ× m˙~ŋëZ¯û˙ßuūß˙˙ÖúÚkŋu˙!ƒņ˙× †’ ˙û_ĐÛū6ԂSōœ_\˙”z “÷˙­dâ˙˙æ€ņ 3Ė_Ž!uĮĮ˙¯č{øcĩĶī×[ix˙õūŗķ`˙ūpapßūõüūˆh˙čˇü#—¯˙˙Á÷‚<ŋ˙ŧl?˙˙‡nv ƒúČSņ/M˙ũų ‘ ø¯ûãâĒ×č/ú˙ mƒ˙íĨü§˙6ę‚˙̓GæÁŖ˙áŨ ŸúũgŋũûirļߎīāŽ_˙˙î—ũ‡sū@ŪžƒZčÁq!ōCéØ"?_Č.9ŌɎ ëüBÖ´˙ûÂ^ē_˙˙ū‚â’ũú˙˙¯!g„ Áŋô ų°j ˙˙ũ×˙oŲ˙rümø#˂äžēūßŋXü#GÛũ×z¯}/Gų7˙K˙­KÁ_˙Čaȡ“—Éëä܋zY!ČļXāūŪ‚ũī˙˙°Â ˙ČĐ_čķaŗá>ŗ˙ūžB‘_[ūČAíû۟ú˙!¯ü„5˙ũrū˙¯ZF…û˙˙ŋ˙ę˙īúē‡˙UÁÚū´ŋū„˙’Kũ/ôũáá…˙ûki_¯“Ŋoŋõĩõ¤ˆßēmZ××_uëÛ"ûúZzũ]o^Ųí˙Û"¯ÛÕvöīY˙ü„ŧˆ?ß˙č¸4˙đų7_ōcĨûËī$>—׏iz{i6ēM¤ģ +û[K_ä0›ÛIôÕ×]ū×Nęũ[K´¯ûmuuí¯×õŋz˙Õīoũë_m[¯ë÷\Šī_{ú˙˙Ú_˙¯ėi°Â0ƒØ0“ÆÚH0ƒa‚PÂVØF0vĢiŪÉ› $ÃK6ŌaĨPÂ0ė0ƒmAØVI4Øa+Ku°“a ĻPí­ŌŊ{ -̰ŌŌí/ĩI´īŊŌ´Ŋ;VŌĩē÷[_ũ´­ú˙Ô¸˙Ȏ“zëô­‘GÚAą Ēbšh1IĻ…/ ؄Ôü  0ƒl*bƒ°ƒbbˆTlKø§b˜„ĐA„TÁa„"§<˜lHøâƒa °ÂA6*QA4m¤špŌâGƔ4›IŠNFv“ +Âà ÚPÂŌ]Vtí^žũtõôí}´•ģ­×ž×ÄDDDD8ˆˆˆˆĖ""""C4qG°B ¸hL!`°Âb0ƒ …°ƒ0˜„ ¸4@ˁâ Â—„&ĄĢA„ƒ R 9|RM5/Š—Å1MŠbąLSûŠA„A°ØĻŌ  á„ĸ˜` Ķļ+°Œ ií¤ˇjļŸ„ÛKč ƒb"""8Ž"(Ā‘8†CAÜ0B 0A„3pB"  BÖG„&˜„ĐA„ÚmˆMAąA0ƒb‚ď°@ؑđØŦāP˙Ķøt„DDDq""""""! `„DB!„,hXA Öž—úZZOˆˆˆˆúIkúŽ—˙V’ö•z[„1 Ķ`Â[iV"a A' $–"(0bâ?ūC$6y/ m ¯'Ä[ Eä2˛ÃŖ ļäĮ C A[ˆkyž x/ÄO!qî•Ļ˜ptpíŅw?pVC 4˙! īūC!>AŦrq˙|á–>îM›$.E‚aÂŌ­Ĩūŋ¯ō Ãųqô°fÂA÷ņņĮüwÚũĨõ¯ßPÁúĒãū*×ģúú¯û˙˙ĐīŽĢ¯úūžŋū@đŐl‚„4BĘĖ…ŧƒBA đDu Cjũ˙ōNë⁐ËāƒŅD|G„"ŒôÁ%Á2 0J$ Ė3L \5ĖÆr<Ė3ČøĘ>Í3ᰕ$ |!ô\3O‘™ž#á 3a˜fhŧ ˜Cá‡"á‡Í™ ‰| DÖ˛ŧ†”d-{Č68__˙҃q#Ė#ųtÃ8:0ی6-M7Ϛiŗá 0Ķ´aĩAŖ …TôbhÃčjŒ0éš.ƌM­˜*aŸĘāƒÄF!„b}Ô EZ$ VOÂd1äø Á“â~<  Į“āĸAĪä?1äĻ_’ĻGdvBP"‚0đRėāeœČī%×r†`ä Čŋ¤áĻ÷–Đ:W¤Û@éjØbG1#›U $ë¤ØbGt›$s†l*m&™Ņ}¤°Š´ƒ¤ÛL$›‹ĒAŋbGm&ŌAÃsÍē6ĀĄŨ_MoônFÛFáöiŖaƒi҆&šā˜F Á0ƒā `ƒÔ ÉLŋ+‚Gƒ'Ä)Čøū@ĮävBP‡đ™p]‘ˇŧ%™ãîŸļ*Ŋ}+âēÚ­čŧŊšŌVĶkõzMĢbÅRúMúMŊ$ÛĨĢûAŌn'zoIļ’°õƒ†$sĨáÁŌt›IÁÁ‰Ø3DŽØI´ĻO‡ ØfÂR ą/4a›æ ęŒ6 ,'ĻF 顅Á°Œ1L# 2\aD|>ūūšúũũ„ˇģÕĐékzŊtÛĶëuīŪžëw¯×˙kũzúŧo´ôžũ=i?_OOMˇĢū¯ēė'IˇŪ4›z$r†$s9´œ1#›F2?ļ“6‹ē/ŌÄŊF.čÂ}m­kô4õâßŨ?û¯˙˙BũUÛ××x˙ĶũŊŋˇ÷ÕĐũ­~ގũ?Nļŋ]˙˙MīŪˇ¤ßöÕ}͍ģĢĢ‹×Û Šo B¸Žž?˙õúãĨW_˙×ø˙ÃwZé¯ūžÆĮ¯¯_ëß˙ũ˙˙ęß˙õęÕ÷æßÛJŸwūé˙Ž:ŋ¯Ļō†(ļDĨĮë˙˙ūŸũ¯āē|Đ2ũ÷â ũ­ĖÄ4 ũëúëôŋ˙õí!˙û˙ëŨú˙k_˙ĄŽšđŽwÁģ˙˙˙_ˇ_ņ_čv•Â8Ø~é!āŋūÁ°˙X˙˙˙^fŊ?ūĨ jųŸā¯˙Õâ~Û˙ŦüÚ˙ëÂށüØj˙ū˙×ūl5žķ`Ã\#gæÃ;ûįˆ#g˙öÛ˙œČė˙ë˙ĄöŋüGĐ/ä!˙˙ōGøôĢü‚O˙ ˙~!ŋĐ_I˙Ķ˙˙õ˙û ŋũę´˙āŲ ˙ô#˙˙˙ÎëūšĀË6ęŗūŗ˙úøFß÷˙đG?ū ëÁ˙­õõKōo˙ũ~¸"?õ˙˙PEú<Ĩāˆü†í^’˙Ū‹‹eŽ˙āˆ˙˙˙öŋ˙ë}ū‚˙ũü ŧfÃ;K˙÷á=Õm˙˙¯˙˙"ä ˙k˙īą]˙Ú.={îëÕë˙^¯‡˙˙˙Ûũęß˙&˙}¤ŋéjL˙ôŋ˙A^[a, ŋũē_ëmwũ˙Ņu&?ŨSūä ũoY?­ũ‘Ūö<„˙ĩĩˇŋēÛ!Õ˙üˆ?÷y=¯˙îÛUúīũ×_Ũë˙õĄ K˙ūÕĩm}{Ž×úü‚ˆĻŌÕü…Ŋ/ĩīöÕ}mz÷­××úzû˙õžë˙_]ŋ˙ō|„ģõÕkzũuū?ūŋũt`3ë˙´Ō´]Xk°Âė0—m¤ö•¤ŨZUļžÚKöļ“!‰mzl-Ĩi5iz}ÚÚŪŋimĨ͝ûiwˇļ­˙õwkkëŋīúû׎Ųw˙˙Ûũk˙ũö$~6fábÅ Š l0A‚ ;n0ØKļĐA6( Ķ8 ÅCHø66*ē[MƒÆŦSĨi0ŌX"Ą+a„Ŗm/Oa¤›„Û ØI°ž¯ļl$í¯k§ŽŨ}ũūĩ˙Úũ¯˙¯äqzė Âà „Â††ˆbˆ´Đa1 œ1@ÁaB 0Ÿa0˜A…/AŠh1 bƒ9Ŋ1 „T⊘A¤ǺA„q#áą.ƒb˜—A„ a0AąLUDƒ ą# Ø‘đ╴“VŌM°Œ aÃIí4ûĶ]†žœ†&Õ}?ņDDDDDh4""""(ŒDDDDDDDpČāpDD  #ė! ! (A„Âĸ „á„NÂjØP˜TŌ ˆI„bAą ‚ 1T0ƒ0@ ‰ aρ„>4á„cšié§úĒOˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†\ ÂÄDHĮaaž­„Ķ„ØĻ“0ƒh  ũ/ņ˜ˆˆˆˆˆų0x¤ēÕ˙¤–šh.é/§a*†ĶúĐaą B–¸ˆ† )†–!‚b#˙Č ø‚§ÉÎ ļq; x*áÁ˛e?Ŋ<4ā†@b0ƒL†Û8đ@Č-‚¯7™c<_ IÄ öC.5‡¨tb`郪!’—„z`䀠¤38áŗˆ ŲĀáß!Ŧ˙š Ž–C\tŧ!ƒƒƒÂāöC 3šÃ+ŋúß×˙ō!‡ČÂEwvŌw{ptß˙Ä~š]­ZÚ]_ūžéČĮČdøū˙‡˙åĶ_ß_Č|†Đúúú˙˙îŋōëøūŖë˙˙¯ëû˙ŋũ˙…õČ-‚Žŋëú˙i˙˙<;›ˆZ"‚›ˆ^8ųü…đŠ#ņœxgÞÜxŽ ÑŲĀCÚ! r øaČ ÆÂLƒw"Á ø@ŋ„^Ķ!|ƒâd6^BŲ îCjČø‡Ã4 §ōāÄ"@ÉÄ0Ī=HIbČš˙K ÷÷/A†]WđĎm Øf‰véį ¤ ØD0’m ØbGmSI°ÄŽķĶPāô8b^i3} †aAˇAmb_`̓sb* °Î0oEÕ†Œ7ĸęė&‘ƒhÜ0ÁZ.¨ÃqiáĒ0mŸ„nhÃô҈9@J`˜M Éúaö–Vx đā‚(͜g3ÂĪä/žS„PSqä ņÂܙC<x\›ŽīOOM¯ū“k´Ú/´_Jí6¯ģēNė&éĮ}é&ۜaũ[Ki&ÁŌŌ“`ÅaŨ¤­'h´›y‰Ã9ÃĸûI´†l-&Ō°f‰y¤ė3a œ1/4mŅ‚‡EÕcßĐA´n0oFá„m´\ám5âGš14\Įá4baƒāî_āĸˆø€ÉpA„N ” d!Â( €ĘÕīÕĻ˙WŋKÕĶ×Côéhŋ˙úu×]ÖëûuūâǴގé]'ãŌēiˇn*ŊwéR~¤ÛÛiŌ}ļ+§˙VŌt›´ž›WKEÔ=6“i83DŧŌmÚ Œ8t`˜gŖôa4\Ąœ Ŗ˙ëũĩ~íjÕũ(˙öĒ˙ˇūží:Ģ˙úõ|U÷ĮnžžšWĒéßžŋ]oŨl7¯OēôęũĨÕ¤˙¤étôœSŊ6“{đ&ũ'Ũ]§JÃtíDģĢa› €iՊūÁ˙˙âĐ˙Xē_c˙ĩú˙˙í*ĩũz˙­Zū=˙Ũ k__õ~ īÕĨŋ{úŋ¯úŨēÕWë˙NēMī˙ęôëôŪīø/ķ@Ņô÷ZOĶŽ˙æ?x„Ÿ×ú¯Åqę˙úß_~ŋ˙ĮĮÔ˙!™=…˙ĩę˙ū“ÕÕ?ŨSãĶÕÛ˙_¯˙õuÛõ˙ø/ė?î]5ōgõúöīP{E͍÷˙r Oū¸ŋ´Ŗ˙˙ūˆ?˙˙Č.8> ŋ¸‚×ö—Wëëüãũü1˙ĩ˙Úũ~ė}ë˙Á}Ã6 ^Ÿ›8 |#gūí|7ũ¤Ų§ŨgĨūÛ˙˙^˙˙˙ׂ9˙Đ˙CˇÁÁß˙ãũ “žĩĐ|œ6}}:üBū˙3ÅÂ_ä?[[KkôīŊx7ûi ģĢëmĐO˙W̓ęl1˙˙ü _üākūp2ī‚8˙āŽ?ũ×˙˙ˇ˙ÆßņÆŋô˙öōéy1ü›†˙ɏ×÷éĨ˙ZęHpâ^Ž—ÄäĮŌ˙˙ũ×˙˙īĐ_û_Õú ũP_û˙6~l4?ūl3žš°Ë6üŗ˙û‚9ūë˙÷ëö6+˙_˙Kđ˙„`3;ĸáŸūĢäŪë˙îŋ˙˙õü›ũä‡ö˙&:_ú_˙ß˙ųų˙äw˙ū‚˙üü OúŌ˙ī~BūŲōEԘúũ§÷˙_Ķd ú_ũm‘G˙˙!Ž6ČAŨ¯˙¯"û~ŋßõ˙×ēõõ˙íĀáģū˛p|˙īú_˙ƒū—÷Wŋ÷é6ŋOĶkä0õĨūû—k˙úģëß˙úûŽęß{ëē˙Ĩûų|„˙!˙_ũ~ũ˙ul„mr{wũ_}īõōoēų1Ãy7ôŧũŽŽļ•í¤ÚŊ6­Ĩę“iiũ­[§ō@g§[ir@NëÚˇV•×~ŋM¤ë÷_ßÚë×jړŋöÖŌ×_muūũÖũ×ō(˙}‘˙öȎä ˙Žŋ˙Û˙ë¯ď‡8iALTW°`“A„q°Â1†šlHč?‰IĒpl0Œaí6N 4⓰Œ l0ļŽ’m„Øa-7m(i§ē˙i.›iZíĨi-Ĩö”4Ŋ´ũŊĩÛU¯ĻÕ´ˇMēēm̝ëúŊÕ˙ūë˙¯ūš0Фų|RLBiϚ Bb“M„ÂbI„k­Ē‘áAƒ7bûm„A´lBiŠbƒ6%ĐlP@˜Ļ$|0ƒ a8‘đØĻ( Ø Å[L&ÅL ÂLTK ĶMˆ;Æ [ „„i6‹ĻÚVÃVÂŪÃKģI°ļ•­ÛjÚßiéõēũÖŋ¯øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒÂ#› Āã8qÁ0B Á!‚eÂp „C„Fb ÂaTa; Ķ * SL&a6ąM lKᧄb˜¨lP Ø‘đØ… $Å åö“ b“V$ØI†$t„a .Ũ}­­­§kë¤!Å""""""8ˆˆˆˆ‡dp\! †ĨÅ#ą „$8ô„Rđ„Tb˜‘økbąAbA‚Vb6$|8¯¤’ŌúDŠ8†A‚ b Ąh5ä ÃUŌ˙ÄDDDGíRëKKīA%i6ē^pbĻ!'^ < āO>""ųĀÄ=áÁ^0U Îā¤9Îdŧáĩä ˇlâ‰d2w"F ‡LŒL:äH < ü ×äÉœČ>˙Ž@|āÖ;ƒ‡Pppppę@đWāß˙ë Ėõ_ûŋ<0?.>áĶF'ū>;_ūúŋ~ö—¯úŽęū>ŋũ%˙ëKë˙˙í˙öĢū¯¯ãŽŋŽŋ˙˙úá<ØAđ†gd/L8äL;Ų„/ä2ø†,) ¨!ĸ,‡‚.]^5Áā'“××˙DƒĻ"Ŧ#{ #°Œc7„Ģ<`ƒDˆø€ÉpA‚. ĸA dā@Á‘  ƒ lä äH0åYÅ!<‰ã ߈f~AđŽČ=K,p™ ÎđšpA‡!¤˙áœ%ĶAĐMá&‚‚EĮŅ‚hÛ`͉ÁļŅ}† 7ĸé†p%Qsq/°Œ āZd ‹‰ø*Ņ‚a<ŸŖa“äA‚Ņ 6čp‚Cg7ŗ#Ãyäxn%Ä?‘ ŧ “ _ ‚‡"Á˛VC@đ`r cûPƒik~ŪûēJˇî•áöÃaļ’l-âG6­†ovĸG68bGš6éÃĸë‡H6Œâ_hÂhÛhÁÁ› ŽĀ•F‰tđš0ÚφĶA„Â70˜A„a†œC „oyt7A’™æo ߉` d2ޏØJ„L7➝[¯õu}{}n—ŌŊ˙ŠŽ/×éŨÚ“ĨlWēZøa1=7Oīī9´› ÜKēMƒ9Ōl‘Ø‘Ũ&Ãí¤„Âa$Ã:1´a†A„WhÂhÁˇĶFj „o]k_˙õ˙ę×Ģ×­ãö­Ķ}ũũ^ęûî­īĩZžúßôétôÚ]ZŨ4Ũ7 íŨęøLB“ī@áˆA´œ0AŅ~pÄŧ%ę ŋūöˇÛi¯˙˙§Ē¯ũūŋúëĄÖŋ÷zĩ˙˙žęëõ÷ˇģI&ôĒŌm˙§ībžÚiĩoû_V|!đĩ ŠĐũ_ë˙˙˙ĶŽˇúÛ_^ģoŋũj˙ęūˇTõÕ˙ëéŨũõõ]ÔuôƒƒōéĖ§˙˙˙ŲĮ ä%?˙˙˙Ä/×ķábŋūŋ_˙ūˇė%u¯Ō§[Õ/˙ĄúiÖ˙ä€oÁĄ†~åÁ˙˙˙ˆüË˙ëņׯ@Ŋ?ūP9Šđ××˙˙ņ vŋ¯û˙ãø˙˙÷6 ÁÁũ| ŋ˙˙¯æ¯ _˙žķŌ˙q˙ŋor˙ņ÷ņ˙īĮä!ŪGü\ö‹§_ĖŸ‚˙äQû&?÷Ĩƒ`ßĨéw˙û˙˙„ŋ˙õ„?̓P_˙ƒx@ˇ˙G§ú8 ūlá=­Ĩ6 Oũ÷_ÁũĮÆ\˙˙Ōɸs8}×ëōc÷_˙’īëÉŋë˙ú ˙ķ9dĮK_ö´Ŋ˙õ˙/ßæį˙uáü#gūl×Ķd ų÷ūČŖŌëäA˙˙íü„×Õ˙˙˙×˙ü?uūLŋ˙˙˙ŌŨ.ē˙õzũú ˙ Ž‚íI´ŋžßÖ˙V×]×÷¯_ûK_ō7ũßlˆūí‘_˙ˇõ˙˙!˙ë˙˙Ö8ũŋö8˙Kõ˙Ä~ģm[^ÖŌ´ļũ}m/îŋūëÛKõēôí~×K×K˙ÛKôĩũ[¯ČAũëöȏõ´ų>ßŊU~Ŋu˙ėz°ÂLRv„ÖÕX¨a@Ķa„cÅ1JÚZiļ•ļØa(a&jŋ§ĢjÚūÚé˙ŊZũ¯˙ļˇÚīé}¯M¯{š˙˙ä ûAaˆMbPGø#ú „Ä&‚ ŠĻš0Å Âà AÅAąPEM‰LP@ÂbGA‚؃`ÂAšl0”Hč5M0­­¤Å6ßa/a­¤ģa-7­Uĩũ=ÛKtĢO÷[õũĩÃDDDDDDA‚ ¸l!!ÂLa‹M0Ŧ$Pė˙bŦ ĐlS ÂaƒbSą#Č ÁÅAąPEL abm„‚  ŠA„ØaÃj˜a$áĻ­ĨĩũÚzÚkö–"""#ˆˆˆˆˆˆˆˆƒ.ĄˆˆaŰA„B!ĄÁa„"@ˊbh;A„ļÄ&ŊŠ „A„ ŠA„3˜LĄÂď†aa† t""""8ˆˆˆˆˆˆˆˆˆˆ28„8ˆ°ƒ@Âa4書‹ˆˆˆˆ˙zZéh=,BXūC y1Čy°Pä2Ÿˆd„˛†Ķá0jäÃ8;"¸R†¯é0äÁFp0āä2Kˆ2q jâ\C ãIú û<3ČmšōHŽ@đ'ō ü†ČeņüāĢÄ2˛ú}¯Ô8{˜8: 8>Dr ށáŖŊ˙Į_rΐÚwM0á˙÷˙˙Úöŋ˙!”>ä6Į Ō;ÚM˙˙˙Qņņũ­­W÷üŒ×]{˙üTū°ä܃CC(ęųH×_˙˙ŋũx0ƒ ŖÍ3v0A‘đ ČfL †TĘr/ūByN@šüHü”Éņ°ÜDŗq?!hDŗq ŪČė„™0™ ’Ą åá,!™ĮƒWåá ؐŧaÂyvAü'Žŋ˙˙ūÁ„`Ãi„Öš.aéŖ éŖhÃ0ÃÃhš7Ē16ĩL&šhš°Š„(# 4aˆ°¨ÄÉxA„Fŗq?âxL#ˆ4cpƒ9@åÃArŽHrĮ_ N?ūē¯ėVîŌ9°¸bG6“a‰ØIč:M¤ÚN“ØT›h0ƒ;`ĎÚ.ęØbGm6t™ŒģĸûH6 KÔb͇A7û@ĐAÃ8Kí(fĀņŸŒãÄytP@ČZH ‡>‹†Yņˆnų;dGŋû!˙˙û]tž˙˙˛(˙^˙úüW˙W“×ĸCä‡"ß×ũüR_˙ņ_ē˙_˙kB?Ģŋ„ ûWĒkÛKíJöׯ×uk˙×_õũžÕ×ū˙˙騧ũŋôģû îŋû˙á /úūŽ˙ŋ÷˙Éŋ˙ëč/á¤ÚO¯jģ×ļÚV•­Ú_úéûkļ˛NēũjÚ_k}×ë˙ŋ˙ëūD˙íl„˙­}˙ŅpŅø¯í×õâŋõ&îMũ*ÉËĀÁÚU„A†(  †L بi0`“' ÖF0d!ƒ 4´ĶM†Œ4íˆiÚ/ƒaĻÃÆí8jÄi§a@í+ ö‹ pÂĶŊ{zūŋŨ6¯_õ¯õ¯ũ˙˙ŊאƒßļEũČAúūēõ˙bb´!—8†!‘ĐA…#ąAˆAĻG„ Ä&œ1 L&šią  ƒ ŗũÁĩaÄ&‚a0ƒ‚?ŗô0‚ ؄ÔæÅAąNÅ=ZZÛiZvē]íĨkũĢizß!Šû¯ķáÖģj˙¯[WÚÚ˙ūž¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÍŽ"""""""" `„A— Ģ „‚0ƒŒaďƒc8a&)´ &Š`Á$ÖÕ6„aM6A˙: ĒŊĨļ´öVžÚ§Zēë˙~¨&ÄD] Ä! `Ļ „ō<) Å*iĖa! &aÛš0ƒb_aal Â:„TÁb˜‘ĐaÅ1I´Á‚RûI‰І’iļv––Đˆˆˆˆˆˆˆˆ¨ˆˆˆĖ ˆˆˆˆŒō#Ļ">BA…DW 5áˆXbM4ÅN$zÅd €­^AŅ€šÄDDDDDDCB!„A¯JÕũ-qí&Ōúō¯^Å1 ū“_Ė:ØJ×KÄ&Å0Á(¯@đj°ÄAˆˆųÃK„2CVČY †@k„ĢVT<5‡ Č¯ ļ \OČjņÃ[ô ˜ČSá܂Äd@ãˆˇ˙„aˇ Đ8l8{[ xQÁH ^D†H*ų nŌŌĐAŋr‚?˙āáŌ™ Ū; f œAŽúŲ 5˙ũ{„ÕAÁČ-Š=ŪŖŽūžŋŽ˙˙ėŽ†Ŧ×ŋ×˙ũ/iވd‚ ėކ§ũ˙˙˙Ĩâ?w˙kw˙]˙ß´Ÿōƒâ2(ä'„Éš Ģ"ö¤3pCAŊ–>]Åä-ä6ad°¤X!ž2dČÂNCjŽC*j9 ƒoC,|ä5ũûü#a4Ęôb:?/ĶF Ū‚x%ÁŒ00ƒā—ü đx%Á("Ŧ—A‘đAāĸ@à ;qŲĄoÄ,Ė÷_˙˙˙ßëŽņØ1˙ũwU˙úkūŸąņ˙ú÷˙ũ†˙HŠ?ūAĢū˙˙˙æĀū_6aP7˙ûiMu˙ļoÂ6|â#‡ūBžž?C˙ūõ˙û0á~NM=´ŋî˙˙ĮŋūŽ˙˙´ŋũ/ô–˙Če˙ũ˙˙˙֗éd2¯˙ŋũ/ú˙!Žė ŧ#gÃápŨüį˙˙÷Kŋū#]¸˙¯ô]kũ k˙Ų '¯õī˙ŅpĪũ/¯Õ˙¯ũ˙đE×˙ëÁũdŋ˙Û¯Ēũ}Ō"õéx?ՄƒĐüØ˙öŌ˙ūl†æÁ‹ižÚ˙Îŋ˙Ø˙uũû×é~ä õŋí‘ßß×û"ŽõūŲ?öēúä ëv˙˙QļB¯}˙oäA×ŌōNEˇŽ’Éš˙˙˙ū+¯˙|ƒ÷˙ũ×˙Đ÷˙á×˙m*­Ōíģ^ÕTé_úūÚūŋÖŋõëíúõ¯î­ké×˙_ļēé~öŋŽū¯¤ß˙č¸4ŋü“‡÷¯÷WKũ˙˙ČŸą_ßŊ!‰Um$=ŋÛ[×n­WVÕē÷VŌ_ĩūë_ž×û­´—ūŌ÷ŋë˙˙ūģwo˛{ō˙ŌĩūĢȃûüņĮ˙mõúä‡;‡ëũū–ÚIσ†ÄށĻà -ļ’i°ÂM„¯m(‘Đ;a„i&œSiZiÃKa„…a„›žĢh4ĶMŌÛK°ƒžŌ×ĩļVÂ~ŊīWß˙ëúûk˙×ëļD^ß!ßŪŠ§¯ČAō(˙˙û××ĸáŸė{0ƒ ļĶ ĒØ„aÄ(#Ė&lPj‚ ‰„Ú PA„LPA„AĖb‚ ‰ąAŠb¸EXJ$y„A„ $Ķ6$z0@⊘ ai† ب—ØAÚ­Õ¯zwļÚÚ_˙Ά_ûĢÕēõmzûßĩũ}×]ío÷]WúÁ‘ĀŦĀąCˆˆ`„A‚`‘Ã\ `„G ! †0L! b0„DAˆXaa4tpĐ0‚äxB & Ēa„cv­¤Ģ #;Kmà CI†Šė4ךĐ64—ĩÛI°ĢtÚ_{ĨīKļ“kuũé]Õũûâ“Đˆˆˆâ""""""#ˆŠB"""ÅPAÁF(  ˆOŠļďļ*cÄ ƒ6$t@ và  â‚Å1A†Š ēiļ“M6•ė4˜0“¤Ã4Õ´­/uÖt¤ëø28)‘ÁLˆ0NB ,0„"A‘Ãi†!ĖAa0ƒ ^ƒ]&aŠö(  1LSﰃ8¨`•i1# m„Âi×­y gHDFÄq`Hâ"""8ˆˆˆˆƒCB"D=¨† ƒna;AŋŌúá‘Á’“鈊B3ÄDRØa$ö“#‚ŋōƒ3¤‚H?ąBÅ֞’ZXØA°–Ōô‡RąXˆ„œSu¯DL6 ŠÄDCĄb?äÂųÁG>ō ūAü†§<6qÁ¯°áÑaŨČ  d Y÷wPāáÔ:0(`ƒ ļœC"Ė‚Ū;mrO˙ŋ¤Ų €Îáž‚Øf˙í~֓y €TzÃ˙˙ã¯éd2Ađ}˙ô›˙ü†HŽ˙Ē˙˙k¨˙úęŋū¯ŽŋųĀ‘Čä`rrC§0:¯$ú×˙üâáŧ—BĖ `”á)Čŗ §Sq tP o!üƒ_d°„Ą 0™đØGB.‰ņ /"yˇjė„ōĘr'‘ŽJÉF~!û˛>×Â;!§†*ëëöž‹Ļƒ l#mĸæ4\ƌ6‹˜Ųđš0n˜FS ƒhÃꩄaĩ „Â70Œ6 a š1 #sL¯ĶF ×7 Âx!™Č0ƒ'äø Er$är#„8Fƒa$=Ī„‚ Á aČ0äŽBÁ㐃¯¯†$saŌŌm+IŌt&ŌpÔHæŌl0A…;¤Ü āé6“MEúAÃ;ķAZMƒaôlčŲŌm&ÃČü$vIŋbGš ļ$yĸô;h ā́â+‚U“™~2\aA’āƒQž˜@Á@ĮB‚ 8Ī`Á!ü"@§Å6Îô\ŗĮ7ūBņĮ!8†cƒŸŌ˛ d4Ŧ†Į!†¸ëõą_¯Wžé{Õ?īMí¤īn­‹öĶ ×ÛßIëIŊéXūž¯Út›iŠmÃĶč č Øa‘ƒnŒl°Ļ Ŗ 8‘ö ŲQtÂ0moEæŒŅt҃zi„aļ‚0ØMQs;á4b # a˜ `ƒoy>'áT\Á c!ũƒdxfãÁĪōˆqËž›ØKu­˙íī÷oõĨĢ˙^ÕûŊiúēūŊ4ôÚŋ´ÚíWûôé_JØboKIÁ„ÃĨĢi6ĻŌl:ZM†$s9´› ØDØ:.šģM0ĸ]´›§Iļi áÄhpŒŅt҆ôÂ0a°‚¨PšFāÉōĐĶ­Wcnŧ1ë¯÷˙ëúëÖģūēęíëÅ~ŋ¯ēw˙÷WnĒëÕĩoö*ĢVÚnö*¯Ēöõn)Ēvūi:N“o]îôŪû‡Ai6‘ÍĨl88bG6Øm_˙Åyđ€Įā˙úÖ˙ü~ŧWũ]†*4ūˇ˙ŋ_Ãëõ÷뮟Ą[¯÷ÚŨ÷_­ĒßŌõŊ×~˙Ōo~Øé[i÷÷iŌÖØ¯ßīƒf„6Nŋ!į˙k^A'ų'˙õ˙ē|Đũõ˙æa0Åm´ˇ˙ĩŋ˙^žē鎯īŪú÷žŽŌ¯˙_čkíoūééé˙Ĩũ†ÃÛüģ˙āŽvŌ G?˙˙˙ún7¯C˙Ø>f/ũ_˙×īą Š¯¯¯Á¯ũÃöŋ×aë×Oũkū?˙͆†l3ŊpķaĢđ=Ĩ„ ˙û˙ų°Îũz›Ν8˙öö7¨ëãū8ü‰L‚ôū ĄÂö´ÉÃ/.Š}lĖom! ˙pbŋ˙˙­×Žõä á™ú_˙ú[ Ÿ˙˙˙Č(ī{ûWë˙öį Õ2:_Í{_×^ģ‚9_â>>Ū¯˙ƒČs˙ <~ˇ˙˙ä,˙˙rpæpų $;ęų1ōoũúZ6 W˙˙õ× ¸āũzī_˙ä܋y1Áē„#üØ`!˙›  NOH/ų°c6AģW¯ŧ76ÚÛ˙8" ‚6õ_˙ūņë˙k‘˛}÷ČAí˙é˙˙Đ.—ũũwßm_˙úö˙ũüøä[ÛI˙G˙˙ú ĐO˙ų øūŋä'vĄ˙B „͆§˙_ÖlũÖôÚë}í˙¯˙õí‘××˙öČŪëûīȏ{dQ˙ĻČŽÚ¯ƒ˙­ŋĢ˙˙ū˙Jē¯ūōpÜU˙æ}/ü†K˙˙˙_ÛI´¯ŋ[ī^×]V˙Tû_úu××WĢíuŋH”6“í¯˙úÛļDv+!˙l„ČG˙˛|„ÖžŋßūßbŋĢmâĢ˙°õ˙õ“˙˙´“m(jÚV•¤Ã ZMĨö„ ´­m[I´ÖĶgAôÕvVé´öĶm; ¤ÚWé6’ļ’ö’ûk˙[kúëu˙Ģ˙˙Ųõlˆ˙ĩû¯Ų˙˙!Ũû_˙˙á0ƒbƒ˜¨#Îö B„T₠؄ÔlP ÂĻ$tÂďabGÃ0ƒ Šl$ď†lHølCb5b‚ ā&+ 0’h6)4Â$tIŠĩl+V•ūÚM¯ûi6jžÚ_¤ˇ[KŨ]tÖž­­úí‘÷˙ũöȏøa 80‚`„0„CCB!„L†0œX  A0„CTÉ™ƒA„T„pÄjI„a… _Ô4˜`–à *lS $à *zl4Ŧ%iZ.§a@í4í&ŌaĨÚŋîˇļĩí[JŌoÛ_éÖ×ítŋFb""""""""""""""#/Šb†( ˜Ļ!A‚lPb ėÍ ˆNaaŠŠ P@á„ĢAļ•„˜§†ŒlHča+[„—m+I´íĢi}$â"""ÁĀāÁˆƒ A„"B"!„ !‘Ø…´ ÂbA…AŠi6˜LTæÄ&‚ 1A6I‰a6$t Š ˙B"#ˆˆˆˆˆˆˆˆˆˆˆˆˆ28k A0˜B  4‡ëâ""""=ē^Ŧ0K 1 qô?ų0Ņ丁 ø‚¯d ܁āĪ hrä2@âČmÛ‡P{š`¤5¸†@â~@ö ũä‡ xėāĘ>C Ah|ƒS<6ƒ‡ xm@pũíkÖÕũ~š €X|†hî@đhŨį#Žúޏããë¯č'|†@e¯ú˙˙û_[öC$ x-ë˙ú˙ø˙ˇũëúĒūĢ˙õūž™Į Ó˛/ǝĒúëūúë3ŅĀ\Đ/!ŸŽäėÜBЇōÂ(#c73‡šá™ŗã<Ã82@ĪdpÎf2€sÆpÎŧ!܅ėŧ!­Á2 „‚/~ 1„ fuŋ˙×đša:FFÅL#éaŖ ‘‰éŖ ?EØÂiŖ Ŗ 4bv M0Œ0Â7„đŒCÄí4Ͱ™o _Éōh0EY? „AÉņ%Č0…<,ąÂ{!‹ ÷Ž\\rA¸ä8áHfC˙úŽ‘̓66“˛;ĸũ[`*ŌmĻ’l:/Ōé8bGm&ŌÂMƒ0 Híĸí¤č&ØL$› Híƒ6 éÁ› á0ƒ %æIâ_aØ‘æ ØPƒn‹ĻŒFÜ3‚Ņƒn‹ô\Ą  ÂE#0ĻdzdsEņ‘OåĐžĪä?Íōœ‰Äs'Ä|BŽ_Č&N ÆÔ˛„49 „49Č0:kôôžâõī¤ÚMŪ“lWßĶ´ÚēWMũ1Nļŋ¤ÛMęęôīP›i+„îĶéXz÷JÚ•ąAŊ҃ƒ8Á´a´s<Z0Ú0ۚ0ŨhÃhÁŋa>:hÄ҈aƒÔ#{%Éĸ@Ėa„Érd2ą/A‚ 2a>3ŒŲEÃ0đCá’<  ŗĀ†Ų2/˙M¯_ގĨû_éŊ?}%īUutÛtŊ˙w˙]7´ŪŽÆŌßúŊ:]=%i6‚Ôķ¤ÚMƒĸũ&Á˜ JŌoð¸‘ÛI´t› ÂA6l°¨6ŒbGœvŒp‹¨F čÂiŖ ´†Ô&‹˜Â7† žŧ2|˜A„]õzõĐ˙Ũ;ët?˙Ûë˙ūŽŋ÷ũŋ˙Ķë_˙WBú_ÕÕÛīĢĢĶjÚWĨú÷˙ôé7ēWé6Å>–­†› 7¸z÷ B HæŌl3a`܏Ōtl‘Ûl A°čē„`n˙īÅûĒņũ†>>+˙ûiWŋb÷TŋÚ¯¯_ũ¯_ėWû­'éëßioëßŨ.§nž¯Vë§Ũn7íĒÖéxũ×Ļõد´Ÿ˙Ķüƒõ÷[đ_š pZ˙˙]?O¯šWģūņ˙˙Ä.?ū΁āĒôëúëxīëUũ˙÷oūˇũkuÕŋCûŊ?MĶ_W_MĶVû˙ņN¸#—Cîę<|=ûȨã˙âãzö ŪGõ_˙ütAs˙ŋÁ–,Áë˙õ÷õ˙ˆ¯˙õÃļŌúõŊ˙˙ú­}|mÕ÷˙÷˙æÁ†• įŋuFĀ„/Ã~ŗķ`Įūl › ígļŗúÚ˙_˙8 B6˙˙°îP?˙Įũ…ü†‰ûi}§ÉĘŋ˙ūŋâŽ+˙wõ:ūŊ4°Į˙â—×Wž‚ü~Õ˙˙[Õ~C‚û¯úŋ˙Ŧ ŋõđq ˙˙˙ü‚9˙ūŖaÆé!˙ųôAŠTûO“_§ˆY˜dOüŖE/_û×ĨųÜ?ĨWä‡ëīĩ˙&9‡KÉęõ˙˙āˆũRü˙ų1ȸú˙ūl1ų°cám.š°Ö͆wΛ80_áum˙ŽŖÛøōG`˙­t˙vąß˙ŋ¯˙˙ėm˙¨uū8˙˙˙úũû@đdĪ˙˙˙¯Đ_˙ø7ŊWũøAxA̓°b›?6 B6í˙ûƒūŋ‘ę˛#ëũŊ×yÛ">ŋų;ƒÖB˙~ēĶũäW˙ũ˛#ëäA˙üáŽáđEú˙äß˙ĢÉŋĒû÷Ōr$v¯ø"?ôŊ/˙ōu_øA87˙uk §õéē÷nˇ_ũum-.–ũĩĩÛKõŋģŪŋnŋũzõmēû÷ę÷¯˙ČAúōō õ˙û{ņß˙õ]ø"?ČGēđD¤¤‡"ß÷jØJ&ƒv‹ v°­Ĩļ´Öí+Iĩm&Ōĩ˙m&Ōiĩ×KítŠ˙l*úūÚí­Ĩin—õõ{¯^ŪëēõļŋîHō#ŪŲÚČA˙܄|„ũ}˙ũ˙˙­Cāƒ0AąLB°ąNÅ1 Šiˆ@ŗ9„ pÂPŠœHølSÅA„AąLVÅ Øá„˜‘đا ƒ0œRa4ĶMŠa‚IÃÆ 1QĻÚV°ÖÕÕÕŌŊ×Ũ[Žë^ę×č'ŪŨ_Ĩļŋ­¤ÚũĨ§ëûdAõlˆ?~BúļDûņ a6!‚ &aA„, ЌŽÄ,0ƒĐh0šdpáA„C¸0L&G„& Ļžų„à ;M4Ú BAą ϘIąA4ūԊm&Ōa„Rk %i&à v[ŸÚ~Ø[I´šm/Ōm+Kî­võ÷[­{Û[˙__ÄQ"""""#ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÁm1 Š KĻĐA„ 11A BbÅ1  mP `ƒ +ą@ƒAąąAŠMØF0}„a´Ķ†l+ %ÚM„ĩm&Ōí;ôŸÂ28i! `„G ˆa2š d †[jpdî ū hüAôĶA:‡C ü†Ÿ[ L x7˙õ÷ßr•ŊÉ § Ahr<ŋČüC 5\†Ķū×ÕV@ņ_˙đéZ`郇 xAPwPtĶF&ūŖ˙ūē×ŋûųô˛˙õ˙ĮĮžēë˙˙˙ūĩ×WqÚ˙ČÆC 5_˙×˙ũE6ƒ”9xJ„K7OÍÄ%‘ŲxA=2 Pˆ9C—„˛VEârˆ(ŧ!›„“ G!•„Čg€™ũ¸CᇠɄ-ä&yvAø†ž1d1dČkš Bšßũuõ×˙A‚¨ÃaPaž˜(L Â7 B70…„ø(F&OÂ1OÉō —“äF!„oh ō #xdŧ&‰á īV*O‰ū‡„A’Ąŧ Â0A›‰ų> Ÿ@˙_Ŋ×âGlÚM†$wA\H탃;h'i Kļ¸t_i6l:/0á‰i3}Ãl3‰vĐA°čēƒ6%&íAĐMŖ īŖĻ‹“ Ō0mmmoô]=Q†Â9ŒāĮ”åáŧ…ōËâ˜"q™‚eÛ6G˛āŌhö\g˛â|6Š …â0šv&är†•ëßĶqTŽĶkĶoO¸Û°'bŠ&Ũ}ŠíIÅ_iÕØ¯•ŌˇN•¤āáôž$sĢtŌZN•Ĩ‡–‹ô›„# v˜Fæšá7áa„nxF „ŅxaL#xҌaÃLŪh0ĻƒČfyĻn?"A  dŧ§/‰qü…š$\I 2XDá°đS‘ͅ…Ë‚ ?O˙]uû¯˙Oëôß_WŨ_Wô˙_ZÕjßęôöíĒļ­ÖģėW–Ŋ HæŌmaöđ͊ƒiXfÂĻÃËĒAápƒ ƒ ›ÛnŒl(A°ŽCi„Ö ØJa‚ĶFEĖ~š7 Iū†. •öoF6‚$ ÁöĐūë_×_ÖŊ ^ŋßëĢûū>ĩĢvëU{õÕ˙UÕ¯˙ĩM+i?×MŽęûũn“ē^ęęûĢø}ô›§wh‰ė(—t›IÆ$si;/Cé‹đᛠĐA҃`Áp%0Ī¯ ?ū?˙˙}}Ũv×ū˙Øú˙˙ÖßÚũSũ?ęûk×˙ÛŽŊÅj˙ēŊZ_~ēO˙Tü&Ō÷zéĮˇ­÷̧JöĸG6“Ђ×˙÷‚÷ũ˙˙û˙Ö!kņõgÁZ?úŋŠé/ø¨˙_˙]Z˙ũuęø˙˙Ģ˙˙~ú_ßëîˇ˙Į[é6ޝôôßų ˙ũō Ī˙Ą˙˙ŋ_~D§˙bõ˙˙´oš/˙ü4ũƒ_iU„ũÔ1k†0Į´šÚ˙Iî˙¯¯íúŋ˙zūęŽŋ_ü#g˙˙´‚6úœ?˙í¯ūã˙čÕ¸˙˙đG/Qú_ü4÷ø/ˆ\Ų kؘ†büq ¯ú×˙˙?˙í/úö+ũ]_ú ˙_Øa$˙×˙ūÚ_ú˙ėØhdcõ˙ĐNë6_˙æÃ‡Ü~BŸČs˙đČ5ž !OĮī.Ģ˙ū˛q?×â˙ļ|ú˙é˙ņ /˙˙˙ø…õéūC‘n˙˙ôí˙_áŋ› pŸÂ6˙øl#gl7_„r˙Ũ_˙ú÷˙!OëĮŋü5˙_ũ˙Āfũ˙˙đ‹†gî—ōc˙Øo˙õõôŋ˙˙Ážŋ/ ˙đmū„ æÃWKūžpļ—á=84˙øû¯_r ˙ũkīöBŊúŊ¯ūDČA˙Gŋīũ+ŋ‚#ˊ?õųÁÜ_ëôŋ&˙D+‘m,āŲ‡ßôŧû}˙˙´A[ŋ†ü%˙T!ŋ˙› €Öęŋö–Ģ÷˙kēú˙˙¯¯ÖģkēŨ6ˇW÷˙Ցę×õü„ō(û˙ëūŋõîŊ‡°ũ_ūßÅEy!˙$?Ų aÁ˙ˆ/Ōī!Čˇ¯˙Ũz~Ú¯÷!ũūŌÛ¯ũd0Đęí-;ūŌģKô-w_ĩvŌut›[ũĩĩAÛŪŲÛ"ëõļE˙ß_ßW"×ų;jīë˙úŋá?KîMūÃoų!˙āŠ„“bGÃA„ƒM4ÂpØ` Âiŗ4l0–ÚJĒw ´–I°Œ ö)6)XiCV &ö@öhēV´˜k %a;ļÂMĻŋĨik˙߯N—ß{öŋë¯×ßúūD{˙­ūˇ!˙õ鞃l&•XJšiĻėBi›Naˆ[aA„Mļ( sĻ!8@Ú0ĐA†*ŠąLBbG ƒbGÃ0ƒbÃĻ!)‰ 0@ØĻ$tiZNŦ4ŽĶ× °ŌĩmnŌĶē´Ž›^ĶöŌm=¯¯ŋÛĢ˙ˇũûíĢŽūō#â"""""#0+ÄDDF`XŽ""""" Áa†DC4 `ƒ0ƒDC0˜ đa(EMŠbÍ Đh #lTSi4˜‘ĐpÖļb“†Ú Ša„˜hēo§a~ŌöÂÚKķ Ŧ/iũŽØJÕŌžŊ´´é>""""""//[0ƒ„vL&ƒA„b/Ša5/ˆRø„„ÂAą σÅ]4lPA„aÄ(j„ÂؑđÂF0Âk› %i6’ąûik<GéüGD0„A„Čė1Úƒš†›IąPGö( t`ƒbž“×ŌÄDF\$DDDDDDA‚ /ô›Kôą† iZĒZžÄ&(1 \DC ēÄ m„ą BĮ˙ xų°Ųä2A›ˆÄüāĮ~ WÄ2D`äˇ xišÃ27ŋŋ x,8&Al5¯|:v•‡0r†¸@R+Č@gōYߐjā`r`ųQōoÖūä]Č ƒø3åŧ>@ĖOöģũ­Ĩ¯˙ZÚÖl͝Ãø˙¨ãC˙øôîémä2L|†@qČŖŋĒK˙ūŋū5ŋ˙˙¯˙ë˙ū¸¯ęĢĒ˙ëūũ˙<09đAwČjĀL† †,œAČL C@ÐÕrO&8U˙×_#ũõ˙ xZđA‚ ūO4Ha <@Ņ a‚Jeø Čđ Â$2Ņ"8ΠĪ>͔ |gŖ‘§ÂEÁ Æ|'!<Íåáˆ~ķq)—Č æâ Ä6^ķ!\ģ R8S㐜Bņß_˙õô\ۚ7Ҍ0Î0ØFŲŊ¨F †p)†Ņ†ØMa†˜V|JhÓPŒ°Œ6Œ7Ŗ =4Â74]F'čÄ氌0§WL#xd1Á¸2~žoâz1†Ū$^#ō|MËârđ–O ƒ—„3qH7ō ÆÂžAŒ#˛ ?ųpAx!ĄČW!¨9×_VÁ‰č'!;¤Ũ6Gr?ŨŌm&ŨĨpy†HæÂX3höÁŌm+ ØUaŅ~“i ؉ŋA6Đi¤›FĪ9°Ķ@ͅ<ĐAļ$vĐAÃĸé†l%ېmែi’đ˜L#h2\døađ#ä qÂ Čø&2 øa%Äø‰å8E˛~!ø†W”äN!Į/ aâCiäČ<Ô…‚ÕęÕún•´ž7[ĨĩoĒn?Ž›ãÕõm}'bž›÷IŋVßĨ÷Ļúč6ģOÛ[Ĩé^ö&ÃA Ä0Äŧ҉ °ÄŧҎt`Šc1ŅuÁ8‘öŒt\ŸƒL#l<&Ŋĸæ?A„a†ŒCÜ?0š1†ŧž)—čAoƒ y>%„'Ÿũ?˙×ô×ôõŊ/Mtëô×õ×­íkĢë~ŊßV—íũu{ŋū¯ŧi7ĶAØLBm]„ÚNm+é{a Ä&Ō~xÚáŅ~– Hæ$vÃíƒ0BG6“h č&Á‰zŒL$h4Ō0L4 āCĸęŒ6š0ÃÜ÷ũ/¯_ņ_ģZŧĢņõŽž‡Ģß§úŋÕ÷Ûëõzū‡ëë_]úŋ˙}û÷ŠĢÚ¯úéļ*ŠŊ§}'é×߸LSužÖí4ŌMƒÖ“h'–“x˙˙ũū?ëžŊ}˙­ã˙ŽÁūģ­}uļŊģ˙ĢZÛ gģKęŋ­/ŪŧwŨ펝oizĢũŽŽ›ôŸ­&ū–í/ãuēwÖéŧá¯~Í?ĸ SŗOí+_ô×ĸ¯­ũŦĐ3×ũî×Mũ_Oą ū?ÁĶÖũ~íûKõKUØ˙]ũ˙¯nˇTūúŋúŨ5NŋÖžâ˙˙ÆÚX#—Š˙ū?qx˙ū6ßûČ˙ũŌߏȧ¯øåxũ÷_ę!ņ_Å™_˙Kũx1öūūúŨß[uĶâžūĩ^'˙˙›č/›ũē›?͆_ķaṍ˙û[Jlũ˙͆WÛ˙ķÆƒ~‡¯û´˙ČzZä§ėčÎđÂ×û4úsA˙˙T…uūģ¯ņ[Đ_ëëėB ˙×˙ũ˙˙ä˙˙ũ?˙ŊøAü!÷œ ī˙Á?ūÛŊ`Ž_Ûū:˙‡ül˙ËŽA(ūˇÃ ŋ˙Ĩ˙ûāˆũ5āˆ˙Ūŋ$=W’K˙Gĩų 8>õúēÅoũŽLô’ü˙ä0āøÖ—ū—˙ †• ŋÃ́°k˙†˙›ŋ˙8 m+Á{Kū?ú˙˙˙Ak_ŊF˙ûë¯˙ßūūžüũGú˙_¯ūß˙Tŋũ.+A?ä?˙¯Č'Õ˙ūŊŌ-˙ų°üØdĩWÛ˙Õ˛#¯§ĢdAũėˆūŊŲ?ú푲(˙¯ļD{~˙ēiō{Jöŋō{˙ūČŖöBžÜV˙Ĩ˙ęĄ*ŋ’7˙˙ų!ÁōCõi˙ÛĢŌí-ë˙ī˙õõŋJ˙ŋVŌ§KęöŌë˙­uzūŋz÷úm^õõŨĩé}ëuŨoōw×ß˙úáu˙oû{ŋmëúŋ˙ÆÅVūM˙ß˙ÛNöĶūŌaĨ:ŽØOI´ŸáĨÚũ…ĩí=°­¤ôÚ^ÚÚJÚ_ĨģiZŨ5úÚV­¯¯imĨkë˙ú~ßú˙˙“ō#ųûõ˙ÕČAíŪŋČAß^?ĩû_ūi0@ؑđ 0ƒb˜ĻÂûb˜ĻI ÅaÅ1A Š´‚a6*ĻÚ„í´šĻVFhPؤíĩ†°Œ |jĮļēļŌ¯˙_uíY@]¯÷IūŨmĨũ÷]]Zũ˙ˇ×­tūŲ×G™đĶ@Čā\(B"Đa8† σ1 aG ´A„M0˜MaϚbģ )xBMˆH0˜bŊˆAŠč1 h ÂaˆSxĻ!46‚ 0ÅAaa„=umAĒp ;„aM4ítûl*Úßá;ít›J÷K]ĩÚ÷ūŊ]om.ąFb"""""""4""""""""""4"#‰8ˆ`„!G@„ ˜b¨  aΏA„b_aÄ&Ŧ lBpƒ0ƒ„U0@ lBb‚  ‰t„ĸ  à C 6’v›a'Øa@ęÂļ–ÚL;°›a[]'üDDDGG6!„"#A„Đˆ†† ąÄ8C#ÂjƒƒČđĻ)0˜Aą šbNÅ0ÂAb˜‘ĐlK ØĻ ú ļ ßKHP q˃t@ă0¨0™(AˆZéäÁjôąÄDDDGt´—Čd<%élŗK v–‘`+ĮƒAŠbAéZZXˆƒÅ1V–"C Ž+ÂĮüâŲ €Õō`P9(Âäg!Ũ2 ž@ždÃKÉū4đtbž@đÕōƒ/<#rÐ< ĮōíŌ°āáČgļČâ˙ũi! áüá˜;áÕ×}Z˙˙ō×ôúõÚÚk˙˙˙˙EĩÖ]?U˙˙ÕuIũW×˙ÍdK ânqČŧCņ0"‚›>1X"y,†‹!§†‚Ž"d ad=ų CÕ…!™mš0ęCAĒęCY˙õ¯0ŒA Ķ¸°ŒMƒ%Č?0ŒA„ŧ2\™^#Ų>'čŧ2æ_„đOÂrˆø‚U„ü“dN0ā„N„ —ō| PŅ@Á‚' GŒøĨræ_…Ë‚NAŽlr ųˇ%iüHí¤Ø3bL$›I°čģ`ĖķIļƒ ‹¨tƒaÁŌA„‚l:.˜fÂB6Ú6‚ėKė#lhÁ°Á#m„`ßéĸåÛ 3 a6ļįĮ҃~ĶHp’đ‰Á@2>@ōŧ AŸ3ÆHĖŲ÷č6“{í+i6Å? Ōmé]ŠŨ+wIúIˇĻëIŊû ôé6ŌZļ:/÷IēJ÷Ģ Wöš āJz.t`ۘN%đÕ3k­4Ķũ¯Ũ­Zõû¯˙O¤˙īŽĮú˙ēOV¯ßKVûIuęęÚ˙īíĶQ#œ'I°ÄŽbG76“˛;ƒƒƒ6"kë¯WĢĢëĢm'ņûû{Ēē­oûŪĩõ×úuŋŋIwû˙éũījŋuÅ÷Ļë÷îĩ¯˙˙ũŽĩūĮ__V̆+Ö¯Oīŋö?Öū×īū—ßŋîôßß˙˙k÷kĒ˙úīB˙恔õëņų˜˙ž†¯ö }\Wq_oëáõ×˙˙ī˙Įŧøã˙¸íHzoūÃŌ˙C`īũ˙äæ?ȧųO˙ø1¯˙˙´ŋį}­Ĩ6lũsa§ FΝûoÎįĄÛF˙_úoûr×āŽm/öNŸëú˙ūŋ˙ūÕ˙ų÷U˙B Ũ_˙˙ū ͆×§ž'˙˙lģ˙̝ũĨũy!Ũ+¯üũ~—˙Š!ÁŨu˙ bÕ˙ßû˙˙¤ˇũ/ôŋÃa˙ûu˙õ˙ņĮ˙¯ėRū˙áîˇÉŋš ;×úõˇ×ä+ƒˇ‚/Öŋ&ū—í˙ä_˙ŎĢdGöŸ!lˆ˙ūŲ?ûõ÷ÆŲ?ב˛{~ũû_˙˙!û×ȃõũ|VM˙$8u˙ŊŅāĮōCéw]ZôÚõũ~“Zë}¯žĢûk¯“…ŧŠī^E×^ßRO×ëkúéô˙úo_˙ŖŸúą÷ļŊnÚMĒöˇļžŸēOwĶivģi6•öûjŸí­Õū“i&ęõĢĨ­ú÷˙˙˙õ×˙ZT˜a&6ļI† &œRĻÁ‚M0Â1†ļÚSL8i; %q\l0•Ĩ„AĻ›h;m$Øa'J ÖöÕm[JĐ6ļļ´ĩi}¯öŧ;^÷!oĻ!!5Ķ„ƒM¤A†!lBt Ã×#⩊6‚ 0˜¨#ΰ„0ƒbGŪÅà 1/0Â*ŒBmŠa„˜‘äÅE1#áą#Ё‚ĩūŌ´]MoĨiŽ—â"""""""""""""! $‡Cƒ.`ˆ aĐa°ƒA„Ķ0ƒBMTÅA‚ $Å8A„ pG @í‰6*ŧDD\DDDZ„",ŽÅ0L! Â ƒļLŽ!€Ģ­-!b"4?Č‡ŌI$ŌKKI-|‚œ}TWJ–"Âa„˜ŦX…XūC <<4>C _"@ōō Ëø:aÂ72ĨÁ˜r†ņęC(r cŊv÷ČŽ’ŅÃCÉ%ņ×÷kéũQQ˙×Õ/Uú_ũuÕRČ A ‰„2 đ&ž]|!ĨaH>ļC<`†,†œYŦ!ĸj9ÁČ/4C*ƒaČlHd!×Č<2\˜A„ÔŋV‰Üp˜A‚ —ôH2>0ƒ0A‚(‘đA‚ Žgķ` `ƒ#āƒ?āƒ 2\( cã=|2Ī`ÉņáŽáD‚P…ãšG†î$}čēhÁ´mĐA°ÎiĀ‚ŅƒhÁŋ āS Ŗ =4҆҆`‘ƒvš0Ãa­MƒĶôĶFįiáƒÂhÄĻM4]Ņˆ0Œ1…PžAÃĨĨ͇KiŠãijØpwJŌpĎbG6“i;I6 Hî•Ŋ!ĐNá°ÄŽÄŽÚMƒ9°ÍƒbpÄģi81/ Áäā͆e ôáØ—ŸÛ[jîĢõíÕŋŽ­ĩZZˇVôÚNŨWļÅSĶOM×Ķp&á4ŪûūęîĶôŪŌõõũ:ZŋõÕûí×ũ:ö–ÚûūëĶë}­˙ęūˇŋOũ Zū×˙˙_Mk­õ˙n•ut5Mu~õ×õO˙ī˙Wūŋę?ëÕūĸŋ˙ø¯ÖĮë˙ë˙˙˙û }Ž˙˙˙×˙īũ§ö éĢ[vŋũ¯ęūŋ˙4ˆ+3˙^˙˙˙ūŋÅ~AŖņ×ü~ŊŋūÃđX?˙æÃ˙ų°Ķ˙û˙6_üØl6æÁŽ˙ķŠ˙oÁ8o˙˙˙˙˙˙˙úAu˙_˙úé/_ųū–˙˙˙’&˙Ũ~Ũ˙_ŨŪŋ˙ūMß˙˙&āų1ô˛nEŋ˙Û!ũ˛(ú˙ļB˙îD˙ßé~ČAŌoß˙˙˙Û˙÷÷¯û¯V××úũ]uÖû¯Ü„¯˙TŽęȏ˙ļDč÷ūBūļôē˙˙ŽÚOíÕ×ŪÚ]_í¤˙ö­­Úûi+ęÚ_ū—ē„ŪŊĩũ˙žõŋūŌVÂPĶV[ /m¤ÚM„iXVŌMSm&ë´îÛU¸iZ­ë°Ōîûm/´Ŋl-Ĩ¤í­×ü"Ļ6(1#ᄠŠb˜ A‚ ŠbĸGœaŠa„‚ aÅ6 ‰ `ƒb‚aTÂ0ƒ0AąA8­´‚ Ø š Äē Xø‘đvŠĻŸ†ƒ0„CA‚0@ bDA‚ BÂa†äQđ !!m„Dpaœ0ƒNÅxaZĢ ^šm„Ôü Đa2 Ĩ"""""""""8ˆˆˆˆˆqÄDDD†@ũĶũ&G €×(7˙ˆA˙é#…Ãū‚A?áb“ĩâ*ãūAāV˙ęžŽĢøĒũĒũАÕr+äō‚Đä2ẢqÃkˆcČ6!üC$ų†ŽĸaŽCĀ dĸ:”2™ P‚đNĖ‚S҈ø ÅÄ#†H5\á§ڑaa¨*`ĄB ÖÁ0ƒ0Ą;ôŊ‘Ã$áÔ83‚ÁėĐ-AAUež4m´lÃM„ÂŌՑÃ$ŋøwČd¸ų×a‡UЗÚM†|¤é6ĒĶ_0’ßĩûôžÃÆtŠæeJÕļ)ëÄUŋü ģ3“´ûĶũaš{]˙öúĩ˙UVč^Ŋ[˙ÉūĄžŋū¸ū­}ūũ|7˙˙ęŊ=yNČi9 ëĘrPEr cųĄČ)ŋęųx]Cũũ˙ĪīÁg„ƒ˙˙qūņî‡˙ø/ūB#Ŧ†ü3 ūBû˙NūŨuûj˙8 f˙ũē›!{˙Á°ßüØijp3´ŋÔ#g˙Â8íŽŗū˙åí+3÷čNTYoėSŽ˙ą }§R™˙ūģ ēũđpo˙Æŋ˙K˙Đ[ -ū áöJ5ĶX‰đP*î˜uuøFÁYÛČh?˙íū—ôXāŲ‡˙öØ˙Ũ/˙KB—ų7ũ/Ši4ĐwIĢL0’oú¯d īVũÔSz˙}öö˙_õ˙ĨûŽ–‹†z˙áōo˙“pÂitĶm ˜A†ƒûūŋúëžųũ:ôĩũû]˛#ų;˙˙÷ú¯¯ö˙é}<$.‚CD0A‚ūģi*WēÚTÚ_ũīWV—×im­úūŋ˙û×Úę"õ #°ŌO´Ą„aéēNÚJØAÚvm+īĶKmvÂZū­§ÛwÚs ģ_ím}Ķ}˜X@ÂÛ„ 1APŠ›„ aĒb‚=AÁm„Ąa(EPr𠃠BHÅ40„A„$|0˜Aą# Â ‰ °ą#á„A„4ĸa8—AŝqÆČQÄA‚„ aˆ†ƒ!„B8`ƒT 1ˆaa`ą""F8`˜B!…L& ö ¯åáM-°šh$õ @ЊB""#ˆˆˆˆĐˆˆˆˆĖ ˙JŌÕ'é†@3:I>¤2OëOûĨí}+VŌKa„qM„˜3ũ`Ä ƒiˆLBk iķX˙Č q> x6q q Y˛!´9Cäū@đjŽÂ ‚ãČ!Â@đN ŠúaÁÔ8:14Ķw!ĸ<GŋúZká°upö÷ūīûŽ˙Oããé4:ĩ´C!Į'2~C$üá›„30áĸ×Įüqõ|)‚ ÷Č ^ xfqÃ>˙ū a88>ŒLážēĐ˙Ēúž×ŋh/ˇpnūēÕß˙×ú yžäõČ<§ Õ?!˛ÍÄ/žS‘ųN_gë!88äO!øƒŽEĄČ^! ŧ žBq Æ‚ŽąËĀ™ârvG2Á ߈„>|ח„2¯.Čeų Ë'd5ė†xoKņõ c˙ž@ōô]Œ#… Ŗhģ.côa„a†ŒCF&Ŋ˜rø°Á‚aš„bhÄ0ŒM2 ņ?9@ĖL—&¸0ŒN ܌a’ā˜F1áNdø†&y›đ™x ÂC3gČ2\}˙ū?ū8:AŌ HæŌm é8x„Ōm&ĐAŒ8: °bGt­&ĐAŌa†lÃ;†l*l:#ú „› āJA°Ä4x‘Û 4A„Q/ˇIŊÚ0M3j mļŅ}˙ūĩ˙˙ũûM¤ûîôôžé6ģ˙M֓{¤îí7Ģlzô­:VĐ}éˇkz„•Ä'Ũ'"ßTØbƒvĢ˙úúûīoû÷˙÷Ķ~Ŋ>é7Nē˙ßĶõtÖëúŊ^ôßOõŨtÚÚûétītCž\^Čjŋëß˙öõ˙ĢÛÛíwöõk˙ũ}î¯˙Ģãõũ_īîˇ~ú×ŋßŌŨ‚„ dĻ_‚C2d¸ŪBˁ~6ų L†_‘(BA¸‚fE‚˛a„<AœA‹!•™°ƒņ öAđģ ĸbÉØ[×û_î¸c u}xc˙ë~Ŗ\1¯˙úkÚõ÷†?~Šõ˙íûũĸ˙ÜôÂ6mĻ‚6ØFÛÂhÃza˜FØxFæļÁS`¨anÂ10ƒŪ>L GŒ ÁGÁ0„ a„GE?ū@ŋÄģ!<„ōœŽ()°‚Œ0˙4 ×ÜĐS@žëNh?˙˙ß4 ›˙õÄG÷Žf ;¤ŨõÖ>+×Ĩ¯ŋ¤“q#ˇNĶI6“a‰wI°čŋIē}&é°ÄŽÚ6pčÛ¤ØfÂĻÁ‚AÃĸęWũ&čŧÂ6fŅ…‰h ͨg Á‡§ŽŒ0ŅsøA’äũė0Gũvū6t˙čl5˙øō?˙ė÷ō?˙¯ bīĮūßOOÛu][M­ąZMĢôĒí6–é:ģ¤Ũ.Åu îÅ7N á ÚN-OK‹đāúZO†l(—ĄĐAü6ƒ˙øl7˙6 Nl1õ›?6?˙æÁˆFĪ˙ûĶŽ—ßāŽ[^ëöëÖé˙Ö׎Ÿ¯ī_ëß§˙ž›§_~ÚuúuúöØĒIŊūoŋƒa'˙|„âŋōë˙ųū˙˙T‚˙˙ũĩēŋ˙Âļ–ęŽ]/˙ũ÷õčjßëũë×Wׯēūžúëé×ÚũoĮ§Õüāõ˙Ũ89cƒũy ŅÁû˙˙ ¸ā˙˙Ū—ä‡˙ÉEŊ}Õëûô¸…Ū˙íõøíĨũ˙돨ëū?˙t­{ëu_˙õt?ũŋ˙ú‡Uû¯WW˙Õ˙˙öÕîŋōoęžģ¯Ģû˙Z0tŋŋĐeSČzz k¯Oĩ!gāĩ˙āžŋøø¯ßũ˙˙ũpĮūĮī¯õÖûũ|„öČA˙܄Û"ƒÛë˙ÖBÖŲīûé˙ȃúély?ē_„sļ”kī/ ˙ŋä!ø˙úČz>˙˙֟˙|Đ5?ŗ0ČŸäî×ŋēÛ[Ũ&ÖÖ×õu÷¯÷Û^ũë˙Ļžž›_Öē˙Š› >/į§üØiŠĀ`Ųü#g˙ü#gæÃK˙āēúßē˙ú×ÃÖétûĩmm-VŌļŌû Úļ›i{iZWļĢūē^›iZ[Ĩ÷Ú_˙iĖâ8Kļŋ˙ ļę›õú/ ˙ũõ˙øA~ÃKöŌūl4×ķ€Gü0ôá…m‰ &Šmk $åöMІ`ÂLq#áąIĻÅ0`”0“iZi§à ' #68Ķm$Ķ´ Žé=4ši°Â^ÃÂ}0Â]ĩūž­˙˙_×úū—‚#īúũ/âņ ˙ūˆ(īđúl[0ƒ ˜‚b™™ŧ1NLAˆL÷ B j BdxBbL Ķ ´¤bL&A†( ÂpGžÅSáaÅ ؅N7bA‚ĻČAũ-!ë×Ũ˙××˙ūŋEÃ:ô\5$ß˙÷ ¸āų1˙$91„DqÄDDDDDDDDDDDDDG`„C64 !õ˙­uû"ļDėŠ>žūūŋƒī[dQũKôŋÛ˙ģūÃëéŖ"-mĨŨŽÚˇ^ëÚZöŋöŊ¯ôÚúúūŋw˙_‘×ČA×˙÷ëé/i´Ŋ°Œ&Pí6“­Ģ %ml'ļ•§jÚ펝Ģi[umĨ{É??Ã2žÚ]ûi^NŨŋ_ h PŋėP ÁÅ^Å0Âab‚Å1/†lS4ƒ0ƒbGÁ‚ ‰ď‡ÅÛIXÕ;žX5͉Ā.ÖÕ´“l Õ°ˇŨ÷ö–—Ú]5†ˆ`ƒMbˆa0ƒÂĶ  ÁjĻ‚h4VÄ$ lSAƒl  ŨŠ@Ø ƒ‰abĄ„¸ ˜A§k¤ŸĨj"""""""""""""""""#6Qœl0B Á0„CČėBp֘AÁņ0ƒŠ BA@ÄDDCˆˆˆâ"C 1-/Įũ/ŽĢmmR؄3âY– A#˙ä @ĢÄ Ã8ų¨AÁĻ2H x5šÃG<ŧ†@OÕC†aß"šÃUȐ? xGp xŖä;‡M0ûJ˙īäA˙Ããę+¯ģūŋ˙â?˙˙ūĢęē˙ŠÂBúŽŋä §dN;ĖķŽA›gąLGƒ™íÜA8‡ō YæGđƒ^tČ áãbypA{!ˆ!Ą×&?āĄcF!xMAA47 tÂ7†ŒL—đO%É GÄQŲ^O‚a `ƒĪ2ũ2Č5ų Ä?/ŲŽn%„ˆW6L0ä6a,†/Áéč83(烃ķI›Pf‰h&ŌmŅ… ÂØ‘ö‚ą(ēģûFĖچp ´`Ú0ÃŅtØA Ái„a°Œ6Ą4bh`™>L&Ŋ’äF!›Â —Áũ]&ļ+xON=ÕŌl1_XaŌwXp Ö-OIŌl:[Ķ $sjÚM†$si6Œ1#ļ‹ļ‚l1#ļ‚pčÁˇFF ûīˇĶû­õÕ­Õ7û˙ŋĢõöŽÅW]tÚˇN“jîĶęÛOģĨlB ¤ß˙uã×˙Ģū=uÛô==}:Ũ]4ŨtëÖöēOÕ]]^úŊ?˙0Įū˙¯éé×û_˙ë_Ģ[¯ŋ˙_˙ĢŽ˙Ų 4 ¯ú˙Moŋų˜]?˙Ú˙ˇũ¯˙_˙īđĮūëũ‡˙ø˙Ōũƒ˙īū=ũ/í}tōį˙ú×3 Wņ˙l7˙Ú^ķ`˙oũŋũŌúõ§˙ū5¯ũv ČZ~A<˙a„ŋū´ŋ˙ö]saŨ}M†§ų°Į˙įЎ˙@Ž_É89‘/$?üAdĮũëoü†Xä[˙âŋ˙uë˙ņ˙úđoūĐ/ũíõ˙Ā6īã˙ äßũÉ7īūü›˙ū÷˙ŋ“‰~ž—˙˙˙×ūBŽ×÷˙ú_퐃ŋą_î˙ß˙Ūöûūŋ­÷_˙zûjõäãūē˙ūũnŋĢėˆũ~B˙ų?ī˙×ũÕö—ü† =VŌĩÚŋīĩ×äāÖŌöŌuë_t›_m[_ö×ī{¯˙8a(a( „Âa8qH4ØĻŌ ø jœ4­.Õ9Đ3Zûi7J÷÷ .žŌmWûK[Õ×í}Š|Tž(5Ãģm¤Ķ ! uσ8#û0ƒ0ƒmŠ0AąLP@éŠ0ƒ Pa„‚ ÃσA„i†I;´ļŌûEĐ4ņb""8ˆˆˆˆˆÎ6!Á‚„"LA pÂiíSMŠ0œü ؄0Aŗ:zOH8ˆĐˆˆˆˆˆˆˆˆˆˆ`„:ZĨ¨ä8KČ o_Kôšė0–´´ļ!1 ƒ+˜ŦD†Hl,G˙ȏ;c‚3 €×>š` ÁE4bČ @r pC 4āá°pLåä3; uqō ƒĨjëiƒ‡Ĩ\†BōŨ˙wíŽĢkk¯ß jx@đÔÂŽC +ČXQņQĮßÂ0˜L=õōƒTĪ2ŲāđUÎærœāČ:NŒ\‚ ôĻŋëū„O†@ƅĮOzwMČjЃ$ Ē•WũpÍ+A„Õi .ÕЄČ&ʲ°¤Čg‚Õ˛ đžŋė wéĻŋj˜T¨‘˜ dü Á‰K“*…đ#C(€dxÜ °‰l!ņČO ĶÄvn!§ĮrPn!æA<„ā‰Å.ŽÎ Ø9ĀW9ÃX†Ã9€˛0äb?wwÔtąņÃ8-M6Ú0ÃFÛgÂoEĶ>4Œ6Á#â]0ŒPÜđÍBĻ‹ą„Đaa„na›Éō Â1C7‚1 †g&2\x `‚ üüG2øƒOëÛuDrãÃĨũSƒĨ¤āé:Xi&ÃĨģJØi&Á‚ol‘ø3i7¤Ø8bGm ėHît­&Ã6‘æ‹Í&àŅt҃q#ĪF „m´a°Žc‰tN´âFrĪåa܇rÎäŖë‘G*á”9!ÂÁ“pĨYcŽAqôĒĩâģ}[¤õv*žŸũĩxũézoiŋižŌŌov˜§K}ÃĨĨ†›ÕëI¸AáÚa ŊAzáĒâ‚+¯¤‚Dqđ0A<8ūAō†ÛÎ꤆Į Đ?ãũk]^í¤ˇßOôׯ¯×žÚõ­ũ4ęßŧU+m7úV­¯Oęû†pƒwaBL3Ķ ";v=….ĪTaœpÎ6T¸k¯úMzŪúô?ŋ_oãõõũo¯˙ũ~ø×˙­WOV鑏AˇÚoo¤ŊĻĢ}ØuúZéRŽž+úC˙õãøõøëôđcãã_×­đÆģ§Úũuū˙õÛúĢũģ¯wōA(th3 §”9Ų,!0‹œ‚üœĐTN˲(ävJČ[%Ä ŊŽNxČāŽ–¤GȐFęPäKĸČūAzq˙í¤ˇÖd/ūŊīķA. §˙_ķ0͝Ū+CßíŊ5˙{vǟnÛtŽ8ô7… ka* ĻL&Œli¨NĶO<A=0AŽ „ &¨!a0@Âdv°G/˙×ūįō><ņūÃđ^?ū=ƒãü‡Ÿ3˙öĸ ĄĶ{×.ŊŌõ˧Ē1ÁAÚ¨A6ÍŒÃŖÛjA6${z0Ģ„c…Ãĸü!Čč6* Ŗ”*0­+q×gEëPčÄĶũõ6˙m/Âú0_ūl6žđFĪÎ˙ųĀlˇSÉ~Ûņ˙ų 3īíÆ–˙ļí˙ä‡ÛäC„a čžŅtЎJčQpĢ‘úSŽĐA¤ĸûčdēBuEę^"z V…RhUļ…&õé˙˙˙ ŋ ūž ú__ũ`ß+æÃÛH#gįû_xA}ékž:„bCõ)zI.•¤đ†ēD{ĒQO¨é‡ŌÕŌÖĩ×Ōđ•kĸõ €Đɏ¯{x"ëėSÖŊõų!˙˙!šāúĨû’˙ČĮ"ßū•˙ ŋ~ÛŌKŠ÷ŋû]Ŋ+A{z_ǐkj? ûI$ëKŠëĄˆUĨāëŌé61_ëųúízú^ĩÛŨ˙¯o_˙Wū´ģ˙Ļé/ßû÷ūôžãØk×Ĩé%ŊiW×÷WúIzZĨ¤°ūĒŠ$’ôĩ˙lˆ˙÷[˙úë˙‘Gėˆ˙ÛŪģdQō˙l„ˇÜ…×ü˙ÆžŖöëÜŪ˙_ęq÷é¸I*I`‚nÕuũRũŌI´žŠp‚_}%U]-%˙Ķí&ŌÕ×§ŽÖūûû_¯˙K]]z˙Ō˙ĩ˙WVȃŋĢëũ?H{~ņMoOˇĢĒūĢÄCļßÕtĩKíûi%]RĒ’ēũt!M„“´]M„˜a&Ōn—m.Ķ´­oI[Kl*ëi]6­ĨiZ˙ļŊûiZ_v–ļˇUûũĄËÅĶ˙‰uŊl{öŌ¤ēú@†ī¯ĨôĢĢûIUk›ôļú¤’Jp4.¸ ąO†)ŠŠM„‚ď‡Í  Š6( ؄ƒ4áŦT0Œ`ØĻJ)SM6ÂIÚIļ•Ĩļl5m&Ķ´Ŋ?÷¤‡ÛŌk¯­Žē]*­h8zŌū’÷VŌßũR¯ŨUuáu¤B ÂÃ0ƒ0‡ BG 0ƒ b0š &ƒA Â ]=ËÂۘ„ĶAŠiaƒb‚ ‚< Š‚*a=bb˜‘ĐrûIĻÂ0ƒō~ĸGûíūŌ}û¨mWׯũ}uęēkŨRǝT’é_õÄGĄDDDDDDDq$8ƒ !   &!lB]_ī֚ūŦˆ>ųßÔÃŌ]¯ģô—IiiZžaÕéL:¯]yŨŋ0ú ¨Ã÷ô–ž#ˆˆˆˆŽ#ĒÚUU{n–×ŪŋÕ*I-S¤•’ôŊ~ĢŠŌ ßĒ取:K­}$[¤’EĨ­úZä2J2‡Kô¸a%'u}ĩ ×ū¸t3ÂčÆ .–ęxŖE7ũRĒĨ—ĨfŅVŽ’‚X^Ŧ˜úĄGuÂZ놊9!ûŽŌOü†@lÂUPAĻ `‚ôj¤ŪBˆUuM×>ĪŽ’M„—AQ<ŠōĮ>*)ŠˆTO&€ī…ĸĸĸ–T0Kt’ũ/Âihę’īĒmĄM*h=7ÚĒ@ö)&M1 ØŽ+ŽĄ5UU]4ƒŽĄT(ULVØIâĸ“×K` Â„ĄÅ‘ÃÁ„" Ę‘†……@Âh0„L(B, ‘Á@ Ķ „Ķ „b† ÂØŦDqĄ\F„DDDDDDDDGƒŽ—ŌĄjĒ—õTĢ¤Ģ ém}r \Al‡Kâˆ|´‡„ęu‚Ø$ČdŋXâ†Ė!’ /˛ôC „Ö"ÁÃRü†wV@đlr‚Ŋ ęg†@,LąČ*Ū"""C ‡x8tĐOd 1Ņ‚ŒBČ ŧC8áÃL/˙žBŲŠ$éXA˛8*‚0ų €í5í*TŽŠ:Ō0m‘ÁQ;áHv@ņ-qkŪĻ4—j˙ä4‘Ï˙ã­>"–ûųÁI÷f ’ p  ĀŦđ!ā73P$ūĢĨ÷ū•hŪõžA÷Ú˙ëī¤ĶīëĐAúhÁÃA„ ¨9ōƒƒúęˇę7ūēÕPíÕ"FgĮˆĖÉņ. 2ČđŪByܕœDÃq<†gŽNķa †YáĘō¸aÂd‚đƒáwV$%]ԁ‡%4܇í˙õÖŋč4Âim+íSL#sM4aŒ# 5 „a‡„b  „'aà „b ‡(ėüO“Æ> ČI„Ož%xA’ŸpĊ9—ziū•0í$Ú881#ą#ļ“`Ďnœ&Ãí¤Ō ‡E÷9°p͆`A°fÃ( ÚAÃ6‹íÃ<ÂA›Ue†F 0Áa3kĒŖ Ņ1öh—á„‹ĨĨBF>­<˙[IúiéēŌ}n˙ßUM˙zé6īXvtã°i6—@Ũdv‹ĒM¨GÁFC F Åëũ§],ēzū•?˙¯ŊŋOŨž“ą˙ēOÛõą×ēûi^ßĢüSĢč7aî’Ī?Z_­*Ĩ¯ŊëuôĶÕ×úŨuũĐĶú˙Ûô=ux7ē˙_ÕUĎo úôŪ–CŖ’ƒ‘ŽEr +ŖÕ¤BD…“†`ä3ä8ä3!ĮČ8ä(ûuD(ũ¯ę˙ë÷ ö—_īûÚė˙Člšõ˙Šôø7˙^–Éz SÁ47 5E ČÜ&JÁ´\&NāG†yƒ#ôÉ÷äN.dā¸ÂN Á<"ņŦū]RķS˙õöh'üA˙˙Ŧø_ũÖ ú˙˙÷^AKūšßđŒIr•4b„navÚ]tíT-*jPĄš1ŧ# ¨ZoĮUôciϘF&íÕ˙˙ü÷Á¯˙Č4R¯ßČG4NĮ^¯ú×oũFŊ-'D|§ E:.č.´¸lU]ú#ތUIUI4cĨ„†`^˛õ]$›Eō:HOĒZ¤‹É(˙W¯˙ūláŋü#g˙ũlá‡˙é{ÅD}ē_Įų g˙KKQI ŒTĸĩžŸ­ôŪ-"?AVw "ũ‹ôĨÕ6‹đ—Ū”cUžN‹Ô_I Ss÷õņ˙˙Č~ũp‚˙˙˙A`˙û /æÁ͆—m/æÁ¯Ž˙ūƒ_ũФ’I%ˇ‡IRúQŠZˆBÅuĨŽŊEué# kõ­E Ĩŋ’*˙×˙ōn ˙é˙äßô˛ "FHø„÷˙Q_˙ß˙čiV–•Bū’ÛKTąūŧRƒŌIRƒVé/JŋI!_.ĩØŽŸ˙˙ū—˙¯˙^Û×ũo˙ŖĮ˙˙˙ҌŽé(ę’ô’…J›éu~ēô’ŌŌũ/×'ôŠtĒŌI˙kuŋũ˛#ūû×ūõÚũ=tŋ˙éwä īč-ĒŋV˙ĄĒŌIx‚Õõ¤ĒéRU¯ø…UÕSz…/ZBCˆVˇí]:˙é}ĨÚũ¯k­oÚ÷Ũu˙ĐíŨ7Ų˙ũ˛ îŋūEô—UTŽž`'ę‚ūŊVŠRZ8ēŽõ8TžppV“î°ĶõVũû×éīKkÚŊzwÚ˙É>Ōt›K´Įtũ[ĸ8JŌuo˙tĢĨ uŽž´ĢŌZÕi|/ZÖ8Kép’´ąU°Ōb]0ƒ0ą ÂI6ÂA0ƒbGÃAļ’rûI8ĻŌM†|;J4ĶTā÷‚*°­ĨėLÅhē{ &Ō^Ōģ×ô—]kI~”†×EÖŊtŋ­%ú­*ū*—ßé§h10¨0EMh4ōøŦ1 é„Ō†!'†!&Ķƒbš‚?°‚ ĐaũĐbƒ˜ ‚ØĢÚ]AŌ‰Á„“]/SēŌ¤aüīú_ŌX"ę“ôXũuĨ0õ‚#˙ÕsXûßK]?¨ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒŲ1q"¸0@ÁļB!„„ęĐb˜[aŌų|%ĸ괒[ō:ŌJ‹u u E9‡ŌTŠz]WVô‹ĒŌA¯ę—jûŠ7Adp<L HDD!}-(kĨŌéC3äßKĢTԊT­+J<*á%­*Bģ$>´Š wÉŋ„—$?NHx¤ŌŲ ´éŧü)ŠŠ‡ĄLT4§āôĸĄ\RERĄKLĖÃĸŊiÕÛJ"ļÂTD°”4—ņņ mT*jšv)éˆPēa4”.@újЊ„Ø Ēa;Šg–ĸļ)Ž×[#†`PƒL(C0ƒ ‚h0Šá0š„ô0ˆhZNÂh1CX`Š„MÂĒaukŽ"""""""""ˆˆˆˆ‹B""8ˆlL0‚ëZ°1 ¤ŧGTŠ- ‘Ã(zKQ†’äÁ›ĸ ũ¤Am %Ž x1„2EŧD¨*^< Ü)ÁŸČ ŸáŌ´Ãƒƒ‘lāYąē_Úw}}­zëÔ|GũĻŋ¯ņ˙_×˙õ x‘úū@ę s)Â$GŖ‘ã= h™>;Íō%–n̈́ˆ5đLĄČfų0‰„W!™††Xä>f°¤ †#!Į!ąČčÃiŽF Hę†0Ė# …O0ŒA„b Ä/4 #ŗy-1‡„.'č ķ=x#2=C*d¸ÜO‰q¸‡Ą ÂĻ_Ęō8"AvEârVG}83a(ŋ Hæ×jƒĨiÃ;q#›IŌl€ÍA°ÄŊh5AÃ͚H79°áÁ›ˆpáš7 6čēŖ čēŖpī „`ÃP­‘†& ˜FāÍÄüž0ƒŌ}Šúzq].öĶi6“ęė&Ū’w„Šu{îˆN‚tŦ1ZMƒĨ œ1#›Wä~Õ%ƒƒĸ?AaÆ%ö‹Īˇ­¯ĩŊ˙~˙ĩŋéŪļž’oo˙ĢWVéŌn+WÚ}ãŪ’^=ovũ×C×÷UŌ×M¯ŋ˙kI}ūõ׏ã_ßĶW¯ĶUũ;đc˙ü1Q˙˙ đĮ—Û˙ũÖé_Žŧ^ˇņZūŊƒ˙úf—˙úŧA}´˜?ī˙ú÷[¯˙ņęև­¯ûØûđō #ũđ_ø=(˙˙˙†˙˙ Ÿ˙ø˙ûûiôl˙ķĨđGۘzSé/ũ˙ņ_˙ø#‹ļ—˙ūN™¨w_à Įa˙Ķúũ¨?Á˙_üØ1˙˙ūŋO_ų¨2Ž ä‡˙ˆ"poK˙Ōũōƒ‘oK˙˙˙˙˙ Ūŋĩúūß˙Ņpaŋ¯õwZũÅXoHŒ}éü˜úūŋõ˙Ĩö­ū˙x˙¯ú[ļEŋŋ!×˙˙Ir}˙ßzzŨũë[˙ēŋūíuĩũ[W¯OĻŽŋo% Öēß÷Ųû˙×ŦŠ?äAŨkûôŋįBtÃKMtŌ´›_^ûô•ĩO[_Ķ÷V×m-×˙ŨĩöŌ˙øa&(0ƒ0ƒ¸i1Q#á ÂpEBL0I´‚l0FđĶMí%Ca‚\"&$ti1# ĶVM°•é]§¯aĶivÚÚßō;šG ĐA Ķrđ ĐiĨč11 ˆH6!4˜N áĶž˜„ÖÅ0°ƒølBa„‚‘đÁ0ƒbG˜@ö0ƒMŠbGA금ˆˆŒĀąDDCˆˆˆ0„D0B ! B„",&‘Ã:aRm5‚ ƒŌtąÄDA‚ŌĄõ ļBI/ÕŌD ÁĒ+a„°´ŠlS……˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ä fdĻžščÃä @œr ßAԁāŨČdƒ8sŒúZZАräČhp Џ§ôĐhÚ $ ÜØÍŽŠ…F  ƒimÖū‹ũRt›KnŋMT›§IÛ˙Tšu äH!fiĨúéyŧ„ōü„r‡"ņ. ķ!øq “ „P9,„˛°(˛ aļä2Įé/l3l0ÍÁ†h~öŌ÷wŒ"í¸EÆ "íāŒa i…Â#™pČeĀđ0\ N¤4Ÿũ.ƒxmÚÕũWi í$íƒi>‚ 0Đoj’GHĄČ.ä["Ų9 eŊD…ŗĮÚrŖŌ˙ē˙é÷}%| /IˇaĻŨiVĄƒ@ŒéX´4áŧR øG„xDrÄxG„xAė…‹d2ā…‰~’éŊûũ˙UúnĢ˙}&đŪé$ĸČāŌÂ_ĶzZiĸ>ÕmM4^ašIŽj˜Aëë˙˙˙_î¸é>:M÷#Ģuøt›VŌOûņEŨl]kDwKI°’1ĩPЧŌ^ũ˙öļž—ļ•é ëî­Úõ˙]H˙˙éŊÚ­ļ/ˇô‚~\Ū‹›—}$´¯úũĩmU×îŋŋoēŨ.˙ũ!š9r_īz˙ëmwZÃ֓z_ũöÂŅŋKÛJõoKßm´˜'KžõJȎ{5‘įƒD‚PHs^HsY!Ępƒ$:h2 ä3Ŋūh$äɎD{_Ōūģ_J­Uũ˙Йá÷øKö$}$‚ ÛVP˙õîąKumktà 65TÁÛmĐa´ƒ#Č-‚â‰Čá‚;.~Ąļ¤Ü¨"<Ė9‡Úé÷ûu˙Čëúõé&‡ĨŋjpÚ˛89ĸąPũ‡īõą‰CĨąąĖÁ´Ķ¤Ũé ĮzúuwwĨĩn°•;ŌŽ“îßũîĩL6ÕwK˙÷Ōįū•~ǐo°š øo˙ÛhG!ā‰ô֝Gwßo˙ũ&ükoõßøo`õ]Žiu˙īôĻhĖ.ā‚˜ŸõÖôØ~ßūŊuT܎_í/˙ū˙ūÂ˙ī¤ÃöoũņĒJČķ˙˙˙B %ãˇôĩŋžÃ¯˙îˇü!˙ö˙ ‡˙ũŋmĪ“Í*Dy›:oІqÁ˙˙é{~˙t—¯ážÃ×#ŽēI}?˙āˆ˙˙ ˙˙˙í¤ßˇbûūŌI$­é~ŧ_īGĪŌ˙ÛũU˙÷÷í'ÕßI/˙˙Â_ū˙˙˙íømõúĮˇ/ū6ēT—÷ũWõ÷ŋū•7é$é+Ú÷˙˙˙îõ˙oų ãĨ}¯¤F:^“úŊ¯k֗ˇīúI~×oŊ.ŋ¤•˙û~ßkë˜}ŋ´Ûģ^ô܌˛1ķGąLRZJŊ%{kÚ^­Ž–ŋˇúI?˙îCũŽ—zb!„ŠĻšl;VÛÕ=YP͆ÃjÚ ÖūŌ°ÎNģA4åēI ‘>NÚ (­bŖŅN Ŋŋŋ!I+Kü…o0ëļ–´øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆĐˆˆ‹ˆ´ÂlZa&˜1i­¤ÚkZ˙ô’m-SôļÖën­ē{ˆˆˆˆˆˆˆ†–AŨļŠ¤˜A›I?Vü0ÖŌV KŊ!Đa0A„0ƒa”&( h4Đp Øa&@†A Ž4ĐyaņÄDDDDHqlD†,A†" ŒŽ`]"""!,˙˙˙ōÁ_|˙˙˙˙˙˙˙˙˙˙˙˙ø€õ" ;ÚĻ" ϧ§(Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) ĀĀleptonica-1.86.0/prog/wordboxes_reg.c000066400000000000000000000226611506303110300175470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * wordboxes_reg.c * * This tests: * - functions that make word boxes * - the function that finds the nearest box to a given box in a boxa */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void MakeWordBoxes1(PIX *pixs, l_float32 scalefact, l_int32 thresh, l_int32 index, L_REGPARAMS *rp); void MakeWordBoxes2(PIX *pixs, l_float32 scalefact, l_int32 thresh, L_REGPARAMS *rp); void TestBoxaAdjacency(PIX *pixs, L_REGPARAMS *rp); #define DO_ALL 1 int main(int argc, char **argv) { BOX *box1, *box2; BOXA *boxa1; BOXAA *boxaa1; PIX *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; #if DO_ALL /* Make word boxes using pixWordMaskByDilation() */ pix1 = pixRead("lucasta.150.jpg"); MakeWordBoxes1(pix1, 1.0, 140, 0, rp); /* 0 */ MakeWordBoxes1(pix1, 0.6, 140, 1, rp); /* 1 */ pixDestroy(&pix1); #endif #if DO_ALL pix1 = pixRead("zanotti-78.jpg"); MakeWordBoxes1(pix1, 1.0, 140, 2, rp); /* 2 */ MakeWordBoxes1(pix1, 0.6, 140, 3, rp); /* 3 */ pixDestroy(&pix1); #endif #if DO_ALL pix1 = pixRead("words.15.tif"); MakeWordBoxes1(pix1, 1.0, 140, 4, rp); /* 4 */ MakeWordBoxes1(pix1, 0.6, 140, 5, rp); /* 5 */ pixDestroy(&pix1); #endif #if DO_ALL pix1 = pixRead("words.44.tif"); MakeWordBoxes1(pix1, 1.0, 140, 6, rp); /* 6 */ MakeWordBoxes1(pix1, 0.6, 140, 7, rp); /* 7 */ pixDestroy(&pix1); #endif #if DO_ALL /* Make word boxes using the higher-level functions * pixGetWordsInTextlines() and pixGetWordBoxesInTextlines() */ pix1 = pixRead("lucasta.150.jpg"); MakeWordBoxes2(pix1, 0.7, 140, rp); /* 8, 9 */ pixDestroy(&pix1); #endif #if DO_ALL pix1 = pixRead("zanotti-78.jpg"); MakeWordBoxes2(pix1, 0.7, 140, rp); /* 10, 11 */ pixDestroy(&pix1); #endif #if DO_ALL /* Test boxa adjacency function */ pix1 = pixRead("lucasta.150.jpg"); TestBoxaAdjacency(pix1, rp); /* 12 - 15 */ pixDestroy(&pix1); #endif #if DO_ALL /* Test word and character box finding */ pix1 = pixRead("zanotti-78.jpg"); box1 = boxCreate(0, 0, 1500, 700); pix2 = pixClipRectangle(pix1, box1, NULL); box2 = boxCreate(150, 130, 1500, 355); pixFindWordAndCharacterBoxes(pix2, box2, 130, &boxa1, &boxaa1, "/tmp/lept/testboxes"); pix3 = pixRead("/tmp/lept/testboxes/words.png"); pix4 = pixRead("/tmp/lept/testboxes/chars.png"); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 16 */ regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 17 */ pixDisplayWithTitle(pix3, 200, 1000, NULL, rp->display); pixDisplayWithTitle(pix4, 200, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); boxDestroy(&box1); boxDestroy(&box2); boxaDestroy(&boxa1); boxaaDestroy(&boxaa1); #endif return regTestCleanup(rp); } void MakeWordBoxes1(PIX *pixs, l_float32 scalefact, l_int32 thresh, l_int32 index, L_REGPARAMS *rp) { BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa1; pix1 = pixScale(pixs, scalefact, scalefact); pix2 = pixConvertTo1(pix1, thresh); pixa1 = pixaCreate(3); pixWordMaskByDilation(pix2, &pix3, NULL, pixa1); pix4 = NULL; if (pix3) { boxa1 = pixConnComp(pix3, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, 1.0/scalefact, 1.0/scalefact); pix4 = pixConvertTo32(pixs); pixRenderBoxaArb(pix4, boxa2, 2, 255, 0, 0); pix5 = pixaDisplayTiledInColumns(pixa1, 1, 1.0, 25, 2); pixDisplayWithTitle(pix5, 200 * index, 0, NULL, rp->display); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix3); pixDestroy(&pix5); } regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); pixDisplayWithTitle(pix4, 200 * index, 800, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix4); pixaDestroy(&pixa1); } void MakeWordBoxes2(PIX *pixs, l_float32 scalefact, l_int32 thresh, L_REGPARAMS *rp) { l_int32 default_minwidth = 10; l_int32 default_minheight = 10; l_int32 default_maxwidth = 400; l_int32 default_maxheight = 70; l_int32 minwidth, minheight, maxwidth, maxheight; BOXA *boxa1, *boxa2; NUMA *na; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; minwidth = scalefact * default_minwidth; minheight = scalefact * default_minheight; maxwidth = scalefact * default_maxwidth; maxheight = scalefact * default_maxheight; /* Get the word boxes */ pix1 = pixScale(pixs, scalefact, scalefact); pix2 = pixConvertTo1(pix1, thresh); pixGetWordsInTextlines(pix2, minwidth, minheight, maxwidth, maxheight, &boxa1, &pixa, &na); pixaDestroy(&pixa); numaDestroy(&na); boxa2 = boxaTransform(boxa1, 0, 0, 1.0 / scalefact, 1.0 / scalefact); pix3 = pixConvertTo32(pixs); pixRenderBoxaArb(pix3, boxa2, 2, 255, 0, 0); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); pixDisplayWithTitle(pix3, 900, 0, NULL, rp->display); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* Do it again with this interface. The result should be the same. */ pixGetWordBoxesInTextlines(pix2, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL); boxa2 = boxaTransform(boxa1, 0, 0, 1.0 / scalefact, 1.0 / scalefact); pix4 = pixConvertTo32(pixs); pixRenderBoxaArb(pix4, boxa2, 2, 255, 0, 0); if (regTestComparePix(rp, pix3, pix4)) { L_ERROR("pix not the same", "MakeWordBoxes2"); pixDisplayWithTitle(pix4, 1200, 0, NULL, rp->display); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); boxaDestroy(&boxa1); boxaDestroy(&boxa2); } void TestBoxaAdjacency(PIX *pixs, L_REGPARAMS *rp) { l_int32 i, j, k, n; BOX *box1, *box2; BOXA *boxa0, *boxa1, *boxa2; PIX *pix0, *pix1, *pix2, *pix3; NUMAA *naai, *naad; pix0 = pixConvertTo1(pixs, 140); /* Make a word mask and remove small components */ pixWordMaskByDilation(pix0, &pix1, NULL, NULL); boxa0 = pixConnComp(pix1, NULL, 8); boxa1 = boxaSelectBySize(boxa0, 8, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pix2 = pixConvertTo32(pixs); pixRenderBoxaArb(pix2, boxa1, 2, 255, 0, 0); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); pixDisplayWithTitle(pix2, 600, 700, NULL, rp->display); pixDestroy(&pix1); /* Find the adjacent boxes and their distances */ boxaFindNearestBoxes(boxa1, L_NON_NEGATIVE, 0, &naai, &naad); numaaWrite("/tmp/lept/regout/index.naa", naai); regTestCheckFile(rp, "/tmp/lept/regout/index.naa"); numaaWrite("/tmp/lept/regout/dist.naa", naad); regTestCheckFile(rp, "/tmp/lept/regout/dist.naa"); /* For a few boxes, show the (up to 4) adjacent boxes */ n = boxaGetCount(boxa1); pix3 = pixConvertTo32(pixs); for (i = 10; i < n; i += 25) { box1 = boxaGetBox(boxa1, i, L_COPY); pixRenderBoxArb(pix3, box1, 2, 255, 0, 0); boxa2 = boxaCreate(4); for (j = 0; j < 4; j++) { numaaGetValue(naai, i, j, NULL, &k); if (k >= 0) { box2 = boxaGetBox(boxa1, k, L_COPY); boxaAddBox(boxa2, box2, L_INSERT); } } pixRenderBoxaArb(pix3, boxa2, 2, 0, 255, 0); boxDestroy(&box1); boxaDestroy(&boxa2); } regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); pixDisplayWithTitle(pix3, 1100, 700, NULL, rp->display); pixDestroy(&pix0); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&boxa0); boxaDestroy(&boxa1); numaaDestroy(&naai); numaaDestroy(&naad); } leptonica-1.86.0/prog/words.15.tif000066400000000000000000000344461506303110300166240ustar00rootroot00000000000000II*h8˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ū[­‘¤y˜f?—Eķų>Dxú$Ĩ¸0…ĸ8ˆhXCLøÍDp‚ Ø9&NķMė›ļ‘wéļ‘våŽL{$?u†)ßmĨ›í%uM´×S˙úũŊ^¯Â)ûû`ˆëÕūūú~ūŽ?QÅ>úĮG8˙u]/ųŨ˙ëí.7ŠôaßŪŋDŪĩõûōßãßy1ūŸī˙Öĩréjū/=îßĢ—W}Å>ÛÜĪž˙ũ}_­UûíUŊUŨoĢŽ]ĩl%^vëÂĶĐhiĻč6)4ĐíØ¤ĐŽĶĶī†Ōģ xˆˆˆˆˆˆˆˆ˙˙˙˙æDÁČņ%dIÄIšŗ°y+ČV@ō/˜DēÅá5L&šÚ…L'š ŸÍųÄyúŨ÷@“ÚiBÖTnųŲĒŽ ŠåŲ+˜‘á.—‹Å§‘ã„HČėáŸg2ų‹0f™B/—đšæs#Îo/ęŖKí|\M4҇hÃÖÂ,wbÔ!h4Ћ h29„# Úi„,&„2#f3Ž<2<^6Eâņˆķ q—ˆųsōcŌnBKvXųoI´ŸĒnsӍg~Œ=Úg´Ō0îũU=u ÅŽĒŠ¨NÂĄ§ëšõŋ{ÖúŋĖõ Ķöŧˇ3ßwö ũ'fŽĖôgŖ=ōĮžčĪTaėR3ØôXę ķ˙ū+×ŋ¯ÕņņOcÚ˙Įīéi{TŪ—ÔˇĨP’Šoz^—Ú˙5_˙øû˙ūjŦãų§ũ‡}Í:ūĩŌC뤐ŌHt’¤ēIi%c˙8ŋE˙÷ØĢũ|âĐ˙ũļ#˙˙^•%ūŋ^ũq (¤›˙i˙]˙čÃŋ˙O˜wāŽ?ŧ"Ÿ&:˙Á˙_Ö4ž¸%U­$oūŌ˙žū¯m^˙ûKßmģw˙í˙×qĶ_˜ûĖ/õđE?SŖ~c§ÛšÜ~›ÚQ~–Ãö;[J*˙žŸáÏÕn..*ãÖ"#JĄ‘Įlk÷Mvŋuúbš Å']°ĸ˜Ļ•=cé4ũ¤õú“5U]%ČQËrĮũRלDDDDDDGSĄaK8Bė%GÚ !a4Uŋ†xMSM%Pƒ a2Ü&ļǚiĻǟB#B"""""""""""4"""""""""ÔUÖ V“ĄŽÔGŦŖ°yØJ 2}yØ^îJtšXë—Ī3Ļ]"„fįėƒFzâ+N4ÂÁ02âĻĘA i›#'”MÆČœCdxÔØB÷´gz3Ŋ FwÅŖ҇Ē,wŖíQ‡jŒí#֝ڙūËģ+,rßü˜åŊ&ÚIļŠ¸JōŪélˇ}ĨĩUũ´Ž†ŸũĒãㄓņ÷ín“Åė×˙sZũ˙Á˙ŅcŽĢ˙û¯ëõ˙ø_üy§ŋš˙biö˙Ūsī˙ҟūāŠ~§˙˙˙üĢ_ŋ×˙ũ}ėĮũ˜˙œyŋÚßlWē_ũũđ׆ģüz\WV­¯æ-§´žÆš}ƚöÅCb“ŠļŊ7ÕĩЇũ¯kÚ˙eīÚi­¤ÚŠÚŠbš¤ëˆˆˆˆˆˆˆˆˆˆ‰­Ë0Ú`¨øŠCđ^ŊnļŦ"ŨJˆˆ_2H_ Qؤb"™%Gy‘BčZޘ*a3ŋˆ†RØL‘ŋ49Û˙Úëú˙ŲĮēģ´Ôß&/×JG<g™œËæ#Ƨ æGú9—Ī172ųŒüCĪD éG?‘o}ß~8Æ‹L#´Đ‹[L!á0…ĻHa0…Ļa2C/;Ė ØĻÅ@Ė pd‚ČņÁ˜eGeī0r<›3öæĒ3˛;ЇčÎé˙čÎø"?ägŖūŅnũÚčÃíz0ø´aũ¯úpô˙ĸŪ–Ėôļ*šnXīßļ vg}žÛ-ĖúŌŌwåžŽĒ–=ÖܘôŸ}&öĪ˙™ōĮčĪFxOüwօčúc^˙ÅũZŊkuū­c3öØ.Å˙î›˙pküÖžkNĮü¸\ģ_ü¸\?ÃüïßģŊ˙Ãü?˙‡×Š˙ Gū+ãĨũC˙Đíūņ˙˙ūũÛ˙Õģü}a˙ΜíÛũ›û7˙öoßôX˙Î}˙˙ûŒ˙ö˙}ŨŅŸũŋûWíWũ˙˙˙đŠõßk÷Ŋ}ûë˙„wūē„wuëõæāßøĨؤaÜkĢĮ˙ą÷˙ßvŋĨē_>ĩûíūé}ßõ×m7„mw\z{PÚM4Ķé8ī¸ØØ¨ūŌûõDSm‹émŋaŨRŦwŦAīŽđŌɎXũíĒkūÚéSŲcÚi–:Šb“V)>Û÷Žö*øôėŽ+­¨¨ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒŊŌJA4^˜@Áa Đˆ4 ÁtlˆˆˆˆũA|WVĢ‹ #ÎÕ3˛„QŦĸ,Ē „Č)L%ŦĨ˛ė‘˛ Ŗ*ĩ#ē˙$×ëúë­-Ũ]Ūēũ÷@ˆû/›ˆųƒ63™6f á›Ëéœ`–GÉôōųã$3ĸ/˜ō>fķv&#čē$N{"žûkĘ]ŌCM4-;M M0ąeÍ5‹L)ËÁ AÄ0žša°ž3bœ ģ/>`ō=›0›ˆņÁ“ÅÚ š$‚pE˛;0įҟ&;¤gŖ=öÂFw3îļ´gÁdwĮhĐôR3žs;´ač˙@ˆô^"<Œ= F}یīFũ;Bī°]´đ“˙åŋKJåģ#ÕÍŊú–æw-ũûŊ;Ĩé\ˇõŋ×ōĮ}^Û3Ōö˜I7÷ōĮtÛPŠhWņÃCū>ˇ˙ãąÚ­'īÖāŸéë^Åëęéô=ßũ‚û§Ū üšūiš§ųŋÖŨ~aC˙Ŋâ‰Īß§˙ßϐĨũ˙˙Ū~—˙˙Û˙˙ã˙ØĒūqūŨ˙…ë÷Øz^ ˇÍW˙ũÔ+˙üßõfŲzÁá˙ŗx~õÖü?ū‹ßņ‡cîgõŲŊ˙ūžčÃÛû˙í¯ˇjú˙iŨ¤×íāŽ˙˙w×^˙Âwūŋ˙žēá˙˙oIX‚#Ûđ؝Įü?vŋëKũĩîûĢánŌ÷ë°×_ģ‹î—×÷˙ĻÔVÔmwÖÅzjÔņƜiÚIÆŽŋ# ˙ŽŌX¨ĩļ=Xøļû[JáøA‚šp &Ŋ Đg&Mv…÷a„[ bļXûb•;Ž÷b­Ļ¯i¤ØVÔRÛ›ÛÄDDDDEDDF„DDDDDDDS×>{x)X4Ōļlu~š…Qd:8‰5 ĻH‚dŒė ’27Lƒˆ¤Fŗ ¤úßzjšęŨ÷oiČ^ĶyŊ(">KíÎÂŋ8Ŋ˛ œGIE^‘Ų{Â"ÜŲŲ¨fG@Ė2ĶKųŸ#‚V˛@ĖF Ų˜Íæŗƒ8Ė ĻÆ^1‘Å$ļ`Rär8e„ÎČᜡœ”ũ%…ŲTn‚m¤¯š¸Íä}N36Ĩ:/›Gėē3ˆČ|ē?‘Ņä]ũ}Õ&øH Âq &ƒXA„ËŅ 4vžƒBÂ0S†qŠ1éF"ėģŗP͌†FŖ1‘ãėŪ^8Î=žŗ=ũLíQĖ=û@ˆō0ūŖFwĖ= ŠĄÚ]īÚ,wÁåBÂiڅ —ŋ™úOŨKs>ŸåŊ+Iˇyc˙ė"ĮĸĮŖfūūīMëÁųc´Xî4gH_ô¸÷úOûzoUqĮõĄpUĨ֓[ú_ūķV¯éĐO&=.–aûy˛/ՏëP˙ŧĐĻrCŦV´ĩēK<ŋõđ÷˙TĒ’I.z6ž!~ŋ˙i(øĄQū †‚õõ˙ ũzOHWK_Q „ŦĪo÷˙ôgmsŽÎ,O÷ôaé*I~—˙ũøEŽíf—õŠ˙Á/1wčÎ˙Õ%õÕ×õ°G—˙‚)ėRYĸ˙ūëwõéjŠV 0_MbŋŋKūöŊĩ†ŋí­ūžē¤G\<~×z˙õŌ⓰G—ņ„m/ļ“|÷i1QIÃ[ŠãŽ-ŠŽģ‹cíx˙JÖ ˆâ1ąédË{_lSŌŪûĐk{ļ•ŲcŠ1ÕWNūÅ/…1 Š1õ_ÄDDDO Ę‹B4ÂÄRˆD3aPˆ†[ô""ĸŪ#ˆˆéAA-%oÕ6–Ú^›¤Ũ(´ô/QæJlî*ŽŨ4FÕ2&Ķ •Y2†˜Lė–"š|îĒd&ŊtīĩUMi Dt@÷rFĶ´î•ûÎÔŖ\qšk‰†iŽ]Ŧâ#ŖŌãĐåАkŌĶč2;.Á4ˉi„͍8†l°…§h2ã84Ív_‘`ģ$ôČqƒ6‹Å،š˜eâ9 Fpf83†lš †Qâėؘ2=‘ã„]˜‹•{ÔīFŨ4‹vŋG¸"<Ŗ;ūīFǁäīTøĶĶN҇…Tģô#@ˆõ\Z0˙ZMˇJé;,{Õ[GMKĨz^đšÛIÚ–=ŌåįzíWĖūIčĪF|˜î{ɏŪgs;åŽßŠ1Ëíí^ßS;ĮŒtßĢãĶĮŋcéÛÖūõon×mŊ{Î=ūŧ[kKIU}ŋώ÷Yo÷ĐķZz™Ö˙]~–)Ãŋ~÷úúønĩø7đÄV˙˙ãw˙ŦWĒÅuøū?˙˙5pIŋũũûūâ×ŧ/°Ī Ŧ?ßūo5Z˙üŋÁ[Šļœ]¨"Ÿũ˙ųåĸĮ‡¯˙Š˙ü6Œ?b)ĶęcÃ˙˙˙˙ū‹Ŗ>?ĒzkĨī˙Úõ‚*7ßĨ˛ßū§ŽOKåŊ/¨`Žīú˙°™ŋ˙˙ŽžļŦņ¨îâPã˙ĩŋVÂ˙Ŋ_õiū›ũõĻÕŋ{õkŨú¯Ĩßúīé¯iXĨŨĢJo\;ؤâīa§jÚÃՊ]~=øûãēÕõØļ'qOu5Ŋ‹íbŨŽ×°šŠĢb•ĨĢb˜ŽĩNęû#“Ũ;ņņÅ1WģMlSŊéôģĶQ™}A ‚hD2„– eZ:)„&†`°ÂgĸϚ ķ´ ĄqÄD[āž ´ļꮛanˆˆ2œK •qIΙĻE3H‡<Ūo;Éj;PÍJąjĄB„Âám4„Ôä Fã÷}˙ü’¯SEŨq÷Ũ§j´Ũā‹¤Ú…Aäxā͒i—ŒDxáäæ^1ųŗČķ›38ÂËępōgm=Ė;´g{ Dyßíæv•ÁoËûd{îšĸëou-īŧĪmúô]Ũ™Ûíī¤ėĪڙß×öū•¤õËz[-ūūõÅaū˙õ´ŧ6ūŋøĢ~ŋß­ßũ֖Į˙ũĐÕĒ뱏žŸŽ­Ĩû8-˙˙ü}é{ë6ĩ_×û˙Uŋü;ī˙æĩˆmøsBßēæĩ¸¯°æØR,{{˙˙ĸĮíĮčïøŠ˙ę"¯_˙đˇīũ~8_o˙QđŒ?Ûõ„wũ˙˙^Š{ú_öoeũũ˙~ŋ]7KoãõXŊدvÅ+ÚĒzlVŋ´Öēm/˙ģ§|qŦWr-S$8øĻĸ“Ŋ6ĸ˜ž)¨‹"""ĶAŸaPi Ī0Ąz n-~ 38U°™oaa¯°Â 0™oftĘ0ƒVÖė*ftũ5ÄDDDDDDDDDDDDDDEâ"""""""0B"#ū•¯¨ŽĐa'WS-Uaudœb*2Žâ"Ŧ˜d|ã3Šs"ņ1šŋŪˇmjļšŽĢ;[ÉŖ:'÷Ļōgäktä‚#åGäĻyØ[UČųøÕŸEđŠyąW(Xšæõé_PîĸĸūE•4ąh0ƒXC4Ķ‘ā<Ä`TüĀĨ˜s8I—fŲ§‘ã„™ŽüfČá&O2‚ĖDxģ8FÉ2rr<]—‹™†^Û “FŖí=Û]Ŗ;ÕP"<ŪŠčFúiņiëwš0í#ģM#ÉčEŖ҇đDzŋ@ˆ÷˙ŗ='W–>Ÿnš™˙ģ,v•ôËËíî×3ҟRĮĖö¸U,{I7NÂ}æ~Ëąé7Ŋ}˙ūö—ū8éëI˙Đūž>ęéØ*TĢtž/­ū¯Ũ+û¯ë}íŪŊˇĒžqØßšÔ×õ˙˙˙K˙ŧWÃO˙˙˙ŋÛK˙튱kŪ*ü:0˙üq˙˙ųĒ˙2?ī…˙šŋÍW˙¯ũØqûûÃū#cn—˙œđGß˙ųĪūÎ/ū´g˙vqœ_˙ū˙ūҟĩ3é˙˙kkīß˙k˙ŽaŽ—f?u_í?˙ū˙w˙¨#ŋKåŊ$°Žī§׊ŠøˇJīļ+ũO˙íXõ‰C°ŋÚ_˙ŪékĩūŊûöģÕÛ[XûíĻ“Mâ“ĩé4ĶVŊSâ–>Ķ mná¯ļ•Ŧ>8ģžØ¨áĮü|pΠφanĖ8A­ĢÃ_ģ_}Õ˛ŪUmU^žÚģMŠbjLz¯ĩTËtėˇõ„Df6!úX-+ĒKQ†<Ęy(ʰsšDDd"#3ĩ”R”(N=S Ļ@˜L&FŸ!:™ËyZ_ŽT/ĘEßzŲĮĻĶîŌnî¯; 3 Í™æ™Ÿîų|ņ‘ˆÛ<‹¯=y!æãÍËŦâ/Ž]gVjFĩŸEB3"ë4—.Œãą§MT&¤sŧq‹LœĶL!i„ =74â„.âĶLŽdvfÅ › h0š—i§Ļ™Õœ#ŒÁ—ŒeŲ6A:3ŅoFw3˛;k×F}hÎúŅžŒīFŗFz}Ŗ;F‘Ũ Dz.ôačZG“ôŧZ;°š„Õn-fúũ*ŽžX`÷˙zßyžėąíLôēw¤šngË~“lˇ3ë`.õ,zÚ3ҟ0ø WĻ‘Ÿˇi|Wŋéãô?ŌžÆé;é˙7Ú÷oŽŋčbŦzn5¤´’ßXItˇõũ/ô]ĻÖk_īÃð˙˙äĮĖ=ĄUôžh]`˙ĸŨPô’ļ)tŠŖđŒ?ã˙Ąëôaûnŋ˙øCŽ ûúx_oú%ˆWĒÖ—é~˙öocÎköđë3ß˙˙9į;˙ūįčĪíŋķŸđOÕj‹īûqõ˜˙~­uđGwĨ‚;ŋ˙û[Õ×õ˙ų‡„TŋS×9úūc¯ÅÅąPũ?ãØŽø×Úívŋ˙âĸ§÷ũĨÚë˙ˇ}ûŸā|]v¯÷wOM4ÚvŽĶdœZqėq­§k mÚV#ĩŊ$ؤû‹M8Žíj*8âĨXĢ‹’ Ī2Ž Ēvž˜M5°ļ™uŗ=¯ũĢØM*-Ëŋĩû,ĶKa„–é…ÕrŨ;-ÔDDq‚hF ­.ĩ¤âŽvŗ›ÎĖÔ*ãą)2Dvg‘hÕ’3ŗV]‘Ŗú§¨U]~îæ“Oīägžōüė.Į\]w{Åa<ÄlyŲ8†Ã.ˑ˛4eŲ{#ŗq˛Čņ gÁËÆČš’ 2ƒČņÂ0fĪ/dxķSva3†o/f#‚9‘ã.f¨ÆlËÆ#gš—‰ĘĶ6fËGõF¨~Ŗū5F‹ŖĶ[UON-P"<žœZzéĒhZiÚhhÃí4Öí=/Mi#ÁŋËĶ-Û^õ¤Ûüˇn—,}7OΚG‹˛;.͘SlŧG‚ĄFwčÎڙÚ3ŅŪŌ4ZæhÎ҇ÅčÃ˙îŠŨ­ëi¨N"8ôôâ?ķ>šnØ$ēũÖÚĢŠnŌļ[éŌm–9o÷߂w~ŲžōĮē3ūX÷F{4ŦÃØA>Hs?fwũ~>–†5WëŽĩ¸é÷ą~Ÿø˙§ŌäĮ†Šŋk‚åŧ4’KIBēú˙2uķNQu˙ô]¯ŪiëØ}˙č¸_ũuZ×I -VąčU8˙˙˙Â,_˙C˙˙ˇ_ô?ú¤´ž’ëKށtˇ˙üįū§×voŋūÍ˙ø"Ÿzģ&=U|O˙ũ*×˙ŌŽPTOû˙kivē[a>›˙ÛĢ]|ß_ũ¯˙ëū—˜ôĢüOÁõĖ__دãíbqĮzPū?Ö?ũŪŊö5˙Oé.´íSĐŌN͇hw˙tÛQI´›ĶMąOjÔSŌ}ņīđá°ģNĶĢXŽ*šcŽĸĒ'Gϟ¯ S†ļgAĻĩJØaSM~­5¯M5úĶO^Ķ „OMSM0Š…PŊŽ"#""""""32˙õ§q…vKGjyO›ÎΐļkČ<äÂ"0Er4‰'\(TĶ[°Ģj˜L,ė/|…{ģ’û­ĖåžˇŽ*øŌÁUZMĶģ×O#Į3HËÅãÆ§ Ū_5ŗŒûËųB/ŸgHņžEķ†&äÍĮ[D"’_å<&Ųėžclœ2F_1žyŒãņiÚiÚha4Âqyˆ!a0ƒ „-LIÚ`ƒA f"ėŽÍÂ/ŒR;$tm—›ƒ#™xe 0„ZĄ†žƒNÔąú0ų=ôŒũčÎįöŒôgs;¸"? D~"?3ļGŋÕUoūũęgz3ģnwčÎøHÎũ6ûËtßoÛßĢËüˇ÷´“ŗ?nļŌ}áhΘųžŒũí÷­'frß3ģvh3˙Ĩ˙đßãâ´6—Ž<{ûĮąīąâŠ.[ˇöëÚũŋŊĨßŪĮö¸¨˙[ôjQŠ—Mú/Oü>~úKKĨã^c#ūÚĨø¯_Ãũųļ÷ŋ˙ú0û˙˙˙oooö˙ôĢöūâ˙đŒ?Ŋwũ˙ ŠöoėßāŠũîq>ׇÃá˙ÚZũë^Į֗˙†˙Kŧį˙°ßíŽÚææĐû/ūļC×Áø"Ŗ‚;ô°G~ēU¤´#ŋņËüˇ_ū—Đ"Ŗ˙ŨŽŠŨ/Į)n%=8¯ŋãŋ˙ˇŋo÷҇vÚiw¤ŊĮÚ×ŪŪëņs;bŽņö›[WŧnškzmOåMT\U$ÛĮu9ÎÂČäGŽ#ÅãÆ™ˆ—™ˇ”FėÕ#™|ÄyŠÄ_0g˛ûgCÂåŅötEķōjyžEŅ´_;vQQĄhB-= SOTBĶŊ´ė!ώ  î-0„0špĶXBĘvhËÉĸ/qJm™ôܘåŽŅĩē3Ņíģ}VŒî´hws;aUŖ;įvÕ#;íŋ´aÚ0ë¯ę­SūÁ{˙ķEŨešŸîÁvË~“ī3ëfwõ×-ûž“˙Ûø˙üZ_˙˙´?Iëû˙CßīC˙ū=Ú˙Í_æŸ÷˙˙÷šŸ˙ßūjø—ęŋ0üšÍkQ˙˙¯øE˙˙˙˙˙˙˙ÃęĒīô÷ĩŊ}›˙sú_˙ũ}›ū˙˙˙9ũ}āŽ?˙úsŠ;kú_Ú˙a}˙ū˙_ûKū××ēžŋĮÄŋj_„s1í%ļ5ŊЇėN=xģÖęÅZÚ_ŋßą]wvÅ_ąqÜk ;ąŪÕ龚užĢ~ˇmvÅ&Ÿ­ĩmļ×ŪûW"â"20˜La0˜": Ī Ļg ßiˇĒa5´×†ļŊ¨LĪĒk]™Âfa„Ö×DDDDR‚kb6ūž—i[IcŊ[ "ĐĮ˙˙˙Ė…cÍįi3qØĒ8žŊé§ōrōƒ!™)? LčČCķūŋ~škëöŋëßū>">">=ūÆĮ߆wLf­҇˙ī&û/ŧŲįūģjŗ<Ŏ?ŽaßąąwĮë#qČßGãŊ;î“û´ûU˙8˙w}˙ˆˆˆ´Đˆa8ĩ0á4Õ†TC†™ŪöwėŲTDDqú˙˙˙2HGˆ#ÅR7ã8Š2Q<Ō2¤RGzŧhjSO]WĪfƒ˜r‡‘žķī!{ž@žžP”EN‹ßQkķčėyČh,qČė i—‹ŒšĻds#Ū`¤v‘ pÉȨИ#c.āÎFĖĸ#ÅŲÃLÄGĖÁ’/3 Ŋ"á2 ›ÁIÆ`a<§ã@ˆķKŖŋ@vū_G‘cžõF…ÚĻ„ičhôâĐ"=ŪžŒí=ی>-ßųcēŋcÚ^ĢŌåŽí.›„ŒûöäĮËē3íÛN“|„íõ,vŒīŨ™číũæzO×ĒC§šö˙ũ=!Ĩ˙4_ږũŋvg-ņđ[ŗ=™ĶûôÜv—ûĨlûūæ…ûm´ŧîXũđÁ˙§č˙×ü­ëÛ˙ßaūŪúëÛÛ˙ õCúū˙×ųéũ˙¡ß=ūŋo˙˙yĪööãôg˙œ˙ą˙Ŗ?­˙ëŋī˙F|UEœ_üŋ˙˙ŋđGŽņk˙ûīëũÖļÍ˙æ˙ëūĢųŪŋ^×X#ģũ/6ˇģaŋŋ˙ęÛW˙˙˙ĩí{í~˙^ĶWÖ×ĩô ×ßī]:ĻąIĒĮ÷ģ‹×Š´Ž.ÕXĩŊëŠ_Žôŋė]]1[tˇ#CUŠ[m.žÃWw[Ēģ›LRnˇ}÷›WØaią]Ũ§ģIąß ŠēŊŠļ¸ˆˆˆˆˆ†0B"AĒÂaˆ0 &†ƒi Ķ8ˆˆŽ ЈˆˆÔDDDDDDDDDRF¸Á _õĒ… ĮĒĸQ–^éŸėĒÄn1‘‰vv[¨ÄHfqUŠŖ *WęĒē¯Ē괖ˇw|‹î@ˇ÷#y#ø">gŊ+ü_×ßUwÅr…ÔøË‘¸ĀϞ0FŒĀÉå˜#f`ĖFČÁäņ—ŽfČŪG˙¨É‘ãÆr#öNeã˜)͑AĻžGŽAˆņÁJ y zœz0ø"<ļŒ=~š~ŸG“@ˆōhÎĐ"=ĄĻ„Aä,X@ˆí@ˆúwđDzųĮiüZ0ízŒôgã@ˆõVũ-åŋo}–>gú4tšŸģ_žË˜ųáÔĪ’ëŖ>XúwĒÚ¯K™Ū“ĖíĻĨ§IļXīŌvKĨ~Ÿw÷émŪŋūˇîąm&ģ魐á}võĨp]ŋ˙īĄëõĄĮN“˙ĶĮÖü?Xxąū8­ÃKk˙ú†*Ãß†Úø¯ûK˙˙ũ˙Ĩãč/ęßßūļx_ų§švÂß˙ˇ×‚˙5C˙›COū˙ķl+FÃŊQŸŽŒđ˙HĪ˙FFw˙ūFxo˙ۏįú3˙ķ‹˙˙üōô.Åé`Žīī˙qé`ŠˆG}XK˙Á}‚8đGzJī×ü"ž×¯ūsK˙´ėÅíú_öŊm˙ËÖģūŋÃ_í÷Mĩ_û__r÷v˙uéŋ˙×i_˙iuúŪŋļŊy‹ģî;Ĩ]‹ö*âíoâPã[튆Å]¯]ēđ˙ũ=mŽ.5ļ6?‹t¸zÅ^͎ûŪ;ũ4Ú^*)]íWiÚX¯=ŠOŠi4ãŠVŸīi¤ĶiЎNÚØŒ‹ˆĐ|X&DDB Ęĸ 0\0˜A„ãP0ŠÃ  Â R0A„Ę@A„"!Ŗ\hDDDDDDDDqß­­ÅU-Ú̈Į…æō',Č.HĘLĨePáB…[Nî˙˙ũņiČĨžŅšŖ}7Ėfōúé}ŖFõŖ;ûōŪļûé;-éSĖ˙–ô.[˛=īģ-ũíũĶŗ;oŊqÔ>:˙ô7ãũ˙áĶĶØôŌß˙~j›|Ķ÷ûÍO7úÛ§Ûģö˙߯ûī˙˙˙ūßû˙õô˙›đŠ‚8ū+×9ūøũēī˙ũŨ÷Õŋkđŋŋí?Ļ—xÚ^ī­nŧÂęĢĮ{ņ_WÛģ¸ģ_īûK{ģuôúúm,i´šĸ#´ö쭊k¸¨Ļ8öö)?ī h0°Âà wjļŧ0ƒ8á0ŊĻ0Ąuĩô”DDDDDQĸ""""#ˆŒˆˆˆˆô*Kj }Š­a4Ģhc˙˙˙˙˙˙‚‚Øh#Œw˙ķ!ް˙ķ^Y s×2—EV1ã8ÄŧBfGg|í>ęĢĒwiŽĢÚm§÷Ŗ{M\¤Í[š5G_Ą÷ĮÕr —.Ę*$7O0)ÔeŲ˛6Yv^1ŲÁĖŧcķg‘į6f‡&tŒŌ7‘âėÜGgŲ&lÍÄvšfČÔ6GŦgœXNČnĶũĄpDy;î-P">úGĸôõMUP‹B҇w Dz?FvŒîįzG—œwÜ֑Į–>Lz[U\ąķŨ¯ë–;ŅžŒ÷a<ycŲcŌnēåŽÚi+ŪgúM˛CõvĨúūí3?áE{ū7_ôüv˙ítĖú}áW´˙ēWˇcH}=_ī˙üVĢũážî>úØ˙˙nēÅûßáÖß,Ļ|?˙Á}ßéŊ$đ_æ˜ˇ˙ĮŪ˙˙ۚ}*pēá˙0ū˙Õļ:Mw¯ŋí˙đD{ĢFŋ˙ûx"žĮœũfîŒ˙˙ĨwÅq˙ĨúŲļ^ü"Ŗ˙×ô—˙ÕëAOĢ˙K˙˙˙ÕKŋ _˙ļ­˙ūŋß÷ēNŠö—ļ—˙ú˙īâīŊnˆõī|z\Aęá˙ßi]Į|8n•ũ]1[ĮãaéąpŸjˇûÅÅ~ėUĩnœRÚwÆŽũģąąQLm'M:{,}.Ë`Ģß đžžŦ5PM3ÂaPa Ú Ķí<ŗ„ė&TĶ „"BለˆˆˆÄDDDDDDQŽ8ˆˆˆˆˆˆˆˆˆˆÁ}„’ņ]à „ąųL…ÄV'ÎËÅN YØČƒ2Fn%‘!—pĢ„Â¨OTÕ~÷›[’ßΈōāˆ˙žũĄMŨ]ĶLqwō‘D#Žv Čėŧ\fâ>`f čF83H‹Æ"úš:!˜Œŧŧb0yЍ’äxáQÆĒpĖDx‘˜G×0jlŧĀ˲;13ƒdn[–€ÉGeâãYqĖ;BŅžÚ0õ[͏îôÂŪžšw§iŦaSM;´aßĖ;ũ#ČÃīĐ"<ūŒī˜wIļĢ™čĪéāˆ÷ũZ3ŨŅĄ‘īF~ Ú´gz3¸M#;ØĩŅžŌMúNīTŨ<ĪvĢßÛ`’{ëOŋÅŗ=}ĻŪˇ™˙Žö˙~đ\ĪIz˙Ø)1îûûũ^Ū†žßûô“˙î—ū_đßŪŊÕëߤ+K¯ãĐúCJŋ†?úģ_í¤ß˙Û˙ũš§ũžūũ‹Ŋ~ųŠ˙ų“š§š§I}ŋnĢõJoëøXŠ˙ņ÷íīũÄWú0éØŠû˙úúú­[ūīâ+˙=˙ü˜ûëÂ*6o˙E=–=K§äĮį?˙ķŸ‚8˙q˙NzûŲcđŠžÕrß÷ßīˇÕˇß˙ˇúÛ÷˙ín×ģ_ĨČûúûÖöˇé~ûĨßĻ­+bíX¯bũëĩãĢIę)m.ũŠØĻąV’ÚūŪĢjÖÅ1zŧ_WĻÅßb•âšīЧūũŽ­;NÚVˇk˙ŽØ¯bēi¨…Rc騭¨ˆ`˛t ÂđÎá„vŊš†‹[ aVÂØM4Âéϰ`¨2Ļ@Á†Ž"""1‚_QōŅĸ;ūv(“Š”QˆŠž@˛ŗ(˛<5˛VîŊáB„Âj¨i˙öŗ‹rZŧč'!>w(yŖ:(žˆ'ÄD+éģĻ+¨ŠãšGšVˆér.Â74saš 9¸ŒæsYÜöōačąú0ôg DzÚËŖC˜{˛ĮrŪėąÜī}öš‡oHŅũüĐŨîwčÎꑟÆÔąčĪatŽÖ𹞓{×íú[3ëˇWN˙N´īŋ3ŋ¯oũāšo[¯ëāĨéûŨ…cĶ{üt;Ō¤Ô_ũé?˙˙û_ŪļëÛé ŌëŽ=t=/ô+öÕüU|Wŋ×4˙˙ũ÷×ø[˙EÖæŸšjĢų“ū˙×2áyŠ˙˙˙ūû˙…c鈯ūžĢ×}~˙Ã˙­ųČ˙ҟāŠúÍņ_˙ņRc¯ÖgĶōcėßß˙fûÁ÷fõ_û7ūNûũ}4–ũ-´×ūˇÁ˙ÂũëuWûöū×õēŗíŽēžõŋÚWļŊ­„aÚ˙犞?ęŋô]Sđ˙V­^ĸģJîøö*íŠũ;Ö*ūę­ÃíŽ65‹Š[‡bš‹M?´ĶX‡ŌzwąTí[ž›JÕģK_ií.œtÅ'^Âwvƒ ĢŪ#dtĶM4Đa ˆíxg„Đa8†Š…ĩ´[L&˜_ à  pÂĶCB"""8ˆˆâ""#>1ÄDDGôĩU† ]E a0ĸ#å žAQÄo%ŧČxÄCŒâ5ŠFŦ‘Š"¯;ĻJ`Š„ĶNĒuUûMĒģģú_ļv?ôokČ˙ņtœE×}FŧL9ØQŲ{Ė#š˛0d†`Éb.Ė n#ÆČÁ3p͊‘ãĖEČÄlÄwda’äxáÅČņą—3dlÉxÄb1č‹rÜÎZ 2…'iį~ūë҇ D{TĶĶBĶĐ"<äæ§Ž¨Ã´6ĶO#× DyzG´Ķ[××õMSāˆ÷ßúæwĶ{čĪ™îėąōcļ‘īē3Ōôgú3ô›eŽųžŒë‚#É7-ōĮÖŪé\{ŌLĪãŨ.ačĪa>û÷÷Đī{}ß§iá*ū?O]īnûīĄ˙]ûtÛ –ÅL{Z˙ɎŨ}$•~Į ´ŧWūöÆūßÔp᥎ąûc×_˙ņŋÖ*ŨW×ĨĨ_ZHqIpí˙‚˙4Ãáļŋ˙4ÛsŅŠáë˙0~Ÿ™?ī jŌë×]R]pĄ{vãôg˙žm˙˙mŋûđ˙˙Ũ]yÅū¨ĪžIW¤ēŽžŧ ÃÁ-˙fāø#ŧ"žžŋŲ¸8EF›ü"í÷öobĩõ_ô°G}¯ĨŽ–’UĨĨūīß˙}vŸīoũĻöíŖ]ĩõ˙/Z‘č#ņ{ž×­{]ØjŠ\]ß}]Ũåėžƒ˙ŌwļÄÖęö.ũ+b-ŦToŊŌļ—öÅi‘˙oØ­oãŽ*žXõã¯ū)Ž“ŽūŦąėBVU‘Ę)âĸ•¨¨ĻžÚՎØĨOÚâ˙í¨ĨöXöƒ]5M0šg…ôÔ&ša5°ŖˆˆˆˆˆˆÍ2æƒD0A•\DDDXTâ68ˆŒļéIn""ØŽž ŋ¤–ĩÛę*Ŋ&­¤-ۃ ˆˆˆų\ŧAbgˆqœvjÍ2xÄ]˜ęĒǟ˙ōSîûUŋ]ÕũüߏäG; ĀˌÜGŽ Ü^7ã„mœÎäxæG͙ÆC3"Ÿ›yÎ3fmčâ8Ž-Vĩ!ëOEŽĐš‡khZi¨Mn,!jƒPš~ƒ‹ĶTÉÚa0šáhҝA4ėąũ6ˤÛōcæz3šLîwÖŌ3´gÁÕz3īFwGŽ/úĄ}!@ˆũiØ$žžŊÚԊŌūŨæ|_Ģŋ˙4t—zdĮ[J­u¤ĩ˙ũ_˙?ilãClm|WøėF“uõ×Ik˙˙ü߸á˙Íæ¨7¯ üĶ /úŌԊ¯˙˙˙ū‹ß˙†ãôa˙íÕV’˙Á/Ž˙o˙ĩ Ö˙ ›Â)īéį'Õit´´ŋī_Õ¯á4qŪ¸#ŋūÕSz˙ë´Üŧ•jˇ‘×Ū_ŗŌíuĩc]‰Ülq¯ą;Š˙âõ؂#˙÷ą§jÆž)6);bžÚiÛ#–ˇm5ŌiņIĩõ˛ĮÕWTטŦŖžx">Ķ „ĖéĻŋiĻŊÃ< Ö =l(L&šjA…UÄDDDDDDDDq u§]¨˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙đ1_899(––leptonica-1.86.0/prog/words.44.tif000066400000000000000000000451401506303110300166170ustar00rootroot00000000000000II*ĸI˙˙˙˙˙˙˙˙˙˙;E a+…‡"l‹ÔĶoę›.ŪF—GļtÚõ^ū1Į|Ū_)Å<Īåå<ˆĮ¯P†GfPƒZ &]˜a8NĩÛnhŖFëwôøĻ Ũ'í—ŋMî”*˙ގÆJdŌ˙öŌ˙ų‘˙îÕ˙˙áē¤yũž˙ũšŲRÕ[Û_˙/Ŋ’÷ļļ—ÃínąJ8ââ“Ŋbī°Ēí“ɎƒV´›&:Šˆˆˆˆˆˆˆˆ˙˙˙˙˙˙˙üČŧc*ãĩŽĘĸˆÄvDkĒPžUæZ'˙ķŠ›NīGaīģM/ĮqÄnv•™Ë˜Y œĖŲtKŲč"')äO‘ב¤iˆšõ HÄD9ŲK.fÅĶ0â†aåĖš˜ вėÃ<fÂa!…†G3‚ Â"8šˉÁF3ab0ÃLĖ0…˜fOē-ķĩļÛŨĐŅŖčÎô[ĶIzĖøš‡ú3ģôgĸĮhˇj‹Ē˙§ķģÕîÂyĄūî˂â“ģi}[.ÛîËâ“m2Į[Ëwé]tė›ēÜ3[Úw ŅwWúīîī˙_õīˇģņ×côĨm:M{Ŋ~˙×û÷˙ëë˙kŪŦw_^š]ũqßņ˙˙ũąüĮ˙˙ūŋĸÄ_öĖ2;˙Ë˙˙˙˙‡ü?˙˙˙˙ĸĮūß˙øDĮ˙×˙˙˙ūßö˙˙˙Û˙=č/íŋŋŋ…˙Ųå˙˙˙˙‡ũœÁ˙ú˙˙Ũŋ˙āŠšīÜ÷ë˙÷`Ž?û7˙Ũ˙y}˛ūÕĩß#¯Kû^ûū˙ĨÛéZ_iX"Ÿú^ÚZßúúųũéâãOmc¸ī¸ØâģOÖûãģŽ;Ķĩî6)´—bŽë‹]‹ēîͧޚjÉÚXâ–*)ĨV6.(&­Tv­,RoÚ|}š )Į …A„lˇ]a­–č0­— g aPanPКĐaVA Á{ ˜uL ĪUy”āž""""""""8ˆˆŽ"3If"""""?ūŋõéϘO˙ųnŽ!"¸îqĩ˙Â˙™kūSųØūüDlTz˙;) pSb Ė ā¤va˜ds.gB0˙†GeĖäG2æn6D8ÜG3„pŒ Ä` LØÎŒÄ]ÂA—yÍŗ Ám˜f0.ŅcĩŅn×Ѝ5ЋB-4aéĄhÃÂǧhĪT-4XíW‹ôŅcŋT[ŧœavļŨŨ“îg‡Čqėˇ&÷ŨŲoŪg&öļė˜öMÚ šžÂåģw™ôîīMÚmn_*Ųģ´m|¸MĶNūôëĨL´ĒŪ§ßwzļŋŲąŨ÷_˙Įūŋėlq¯}ׯzģßņ¯ũ˙ū˙á˙ßũ˙ū˙W‡˙đÄ˙īūo˙ö˙˙öí˙øEŋ˙ö˙ũ°‹˙˙ũ/˙Ã˙øoö˙ũ/˙ŧ7˙á´˙õ˙¯˙Á˙˙ę¨ūPķŸ˙_ūø"Ŗ˙⊊˙˙Ģ˙Ö˙÷˙˙í˙Mīũ/˙ũ+˙ˇûûö“¤°zöŸ÷Į˙úzū“}đvŸúWßŌŽũ8ĩm-Ŧ5O‹ļ5UŽ˙M4ö+ģU°“ÆˇpՊŠÖŌ¸Ļ-„Lí˙_×ŌĐ_^˙˙˙ē_˙†ßô\_ø_áŋŨú]āŽũ˙ŗ‰âŦį˙⊈#ÃŗŸÖđķßĨūīû˙˙˙úīŪģ¯˙4ëū—o~ŋ÷Ú˙úî^ũ˙˙Ũ§Ĩu|Ĩņ÷iō<đßėWÚ{Lk÷M6)4ĶîØ¸íXk§ZąŦ=5xĨŽ+UŽ:M8ēâŋĩúϞn™7Ä&*škÃI ŲcŽØKtŌpŠ„žÉž vMĶLˇUQ›iF""""""""""""d_ôžĒ>J›M¨–2Đ B!˜32ŗY¤Xk6ÔJČÎ%Ŋ? Ũ…×´Xí4aŨ?^˙ôŪ“÷ķ{ŅQŅšéķyÚ6’uIēâ>*>8øúũˇ Io\í:'D?“ÆqŅ-Lâ=™ĸ:Rē˙b`!¸ĀĨÚ ģ0Ė#ŗlÁ‰2ėÃĖFČč3b›#c9gt a3a†ƒĐ L! ØDˆ'jŽ?ŧ4Ķ˙ŅcâÕ=nũ5EŽív‹ĄhąŪŒ;Fz3ĩEŋŅoCFvžŗb—^ÃeÛvė'“ķ=…°ŊæzNË%͞ãNŌOچŲpĐO°ĒŲ7.;&öĢĩUđÃū‡˙zwļęĢũކžēū 4š§ßöĐļŸúA­ü;ŋ˙ïą˙ú‡ŽŖ¯´—ßüWú˙aĸŨĨü6ŋ˙ˇû÷÷mØũų˙˙ūdēxˇŠŲF˙īû}íūŋmĸß莸Eŋ˙˙ôX˙˙ö÷ŋûūŋ†īßíģöëîŋ¯ŋ˙ũ˙į×ømva×ī×ßŧžõā×ō<é~lĨųĘÁ÷˙˙kū_wÅĢ]Ō׎§­÷÷Áø"Ÿū÷íŖūũ†•…´ž×Ŋm~žũęĮk§ĮuëūÆĮ­ŦZqXO¸´ãb›ÕXĩ‡ĒąJŊŨ6j+QKi´ņI­ÅR~šąO´ÆƒWļLR{IĩϚ´´ąLV–ĸ?,čYN˜Lô):z˜TÂe¸Tōœ&kXišÔĄĶŗZ h0A”ˆ‰Ä ”8M0ƒB"1DDDDDDDDDDDDDDDDDDDDDôãų‘âˆėÖ2¤vĢĄu´îųVL#´‹ŅÍ3¤ŌjÖ<~¨ŧėŦĪåŲ†åãč&j5įž3槈ņ#4gMHō1˛ėöGŽ3333Æz#ÆÄ7œ3Q#Ųxž\Ė":$ÅA„-8°NĶA„đšh4’†ƒ0š &°…„0M0˜AĄ¨PšĻ†œY†št[ãŋFwĸŨķ;FwHĐæmŖCEšëw44ghąč¸z.<Đæz4>wîŒõÕ˛ā¸ĸâė$…^—í+îî“Ķû ŲpŲqeŽŊ'§§`ˆũo˙ė¸Ģŋo˙īoâŨ&ēūë¯ū›ĄøēŌčk뱎ģéí˙wëõÆžU爝ģū+J?ĢâŌöļ#˙ŅhË>]?ßĨäâūŋ‚ÍOā­Ė1˙ú˙˙øm=ŋEŋ˙đ‹˙ú-ė?Ã~Â˙˙sëĪ~ã˙o_ē˙}úđŠßßÖĪ/oÛ˙úũ¯Žëfūō<ũūoK˙ŌŌípG}Ĩ÷uōûųyë˙בû °ŌáĨk˙ũ¤Úßũũömm{ī†ŋ}§Ņwb˙m.6)¨íŠáĨtÆÚÅD=5]$âØâĄ¤œwãbŽâ˜īžšiÅ&Ķ[KM4ÆÅlSM4ŠÜU˛CÚiŽŨY!ÕRjĶ,uđePǐ† „" Š e &ƒ(€„A„, hFbˆˆˆˆˆˆˆˆŧDDDDDDDqŽŊ-ĩLa‚•ÕĨqÚiĒÕîīŅTT@ŗ%ŧŒîĶJ:üEWYŲa‘ŅÍtD<ÆfgōņļHĖG‘Ã:Ŗö™O—͙ΛLƒĄ3ųvašĖņËÆ2ėųˆųÃSÃLņB]˜a0†\˘AńBfBÁ5XAŲv\ƒ!ŗ *vĨØA Âša0†°ƒZ „hģhĐŅpŨŅĄÚ.~čÎîh{‡ŅomŊčĐôhļčŅbҟ47’ÍF}#[ŠŖIīv\—ö\}…ėˇU~û^ÂWūåÁqJŌynšt›fņˇi&ū˙×ču¯UŊ}ĩ]ãî˙ĮÖ˙ģžÖۍ7ŋ×īõÚ×˙ę˙˙‡â ûˆU˙_÷ž¸˙ŋõ­˙_ßūb˙˙Ûđŋá_ūdPž˙˙ë1~˙˙ҟŋ˙˙˙ˇčˇ˙„L˙˙á˙˙ß˙ûū—˙gŋŋ˙ŧ?Ĩū°ŋâŦōũz_đŠ˙ū{ī˙˙ö—ëú_˙—ßë˙_]­<ŨūŊ­ū•ũŽéwí}vîÕ´Ŋŋ˙Ž˙üÚīū@ԃģW˙û Ēߤ°Ō‡|–66ĶŽ.;ģ[ģ[žôø¸âø¸žDüqÅŽŦSixI†ļĮÚ[ oÆîÂMXĨMSU Å*nĶ&==¤íĻ°ÉvLziĻĶœS­SĶ ņ į=„ŪÍŠÃ iÚwi”8NĶ9´í3X`˜N;84A‚aLPˆŒqDDDDDDDDDDDDQē#â"#ú¯ũ…_üUiÂi´!5Ŋ2‡ !ˆˆĖ‚GfšSŽôq ôbϚ˙…˙ū÷iĸ/}U4üEqvXˆņ ,Ú0ˆÆEŲŠ™ŖôqĮÍBžFB7ŸG —F#ėū_8gŒã<˛hsEųĸŨĸĮú,};ē44[Ōvļ‘Ÿ4QĸķEúwzm…Ŗ?Ĩ¤ÜŧOĢŽ“ė$ē}ØOēîčuĶ{ÕŋüŧÜž˙¤ûÛŋkßöůßÚuąöÆŋņŪūÅ­!wßĨ˙û⯯Ã_üCˇ÷˙0įĒŋģb áüB˙~Ũũ°DĮ˙áÃöū?ūÃˇ~cü1˙ūÃī¯á¸_ū‚ßß˙>ŋõtú ūũ{ÜĮîū¨¯˙`Ž:Â*‚<;ūÕÂ8ũ|ãŊœ^ž—÷ø#Įkëo]ũëé÷ßúÚÚëī~ŽĒē˙īũŲ{iqéöĻ°ØĢ^Ą÷QÆÅE]|÷éũ§ŦŌÚb“oŠ‹cú‹N7ŊĻ)S¨ãi8ĶMļ*“ŠģO˛c¤ČäÉēdĮI´Ķ&:iރ,{- &šú„Ë„ÂŲpĩ“|˜á0šéâ"""""""""#ˆˆˆˆˆˆˆˆˆˆˆˆ‹ôŋŌĻ>>Y‚|ˇ"ų‘Dv'•íHdųņÂĻ ĻĢųĮ~‹†ĩw;Õ§z}c1\×ūKlÆiåZ#ö—;*#„m˜d0††pŽ `gC#ƒÎ‚ŧn#ŗa˜fȆ)áL 20†a„ą›va‚ ؤ1œ „ÁȘDv¨ãîŒ=5Tũ5AęžUEöļŒ;˜v„Xîî҇iú-ŨĸĮiÅĸŨĻ‹|ÃØĨÛî 8y'ļÜđŨgĖôk{&íŨ“romæ|ҧIØHĪA;¸a$ŨéļŠļ\ež­–î›ŨŌÁēč~Ķ~‡/vöûí;7Zië_Öģ{j7ę6nôķj:nž:tŸtë}û˙ũŽ)_ŋ˙í/žļ:ŋūŋ˙Ž˙ Qc×{]…˙éjíÃß˙˙á‡đûs#ķb˙žYīķ#ûtˆ>Ũ˙Ë?Øm˙˙˙M„L}ĐEØø˙ŋZ˙ũļŋÃyõ˙[ūáģ˙˙ü6‚ßA;ž}Ÿ_˙g—ũžKôŪípG}¯ũÖ{ßx`Ž˙˙˙ŧQø¯ÁŽŊĒũĨéõúx#ŋĪŗjĒí¯éwkÚßģĨë˙ö›üĶŽnēĩū×ĩm/öZOĢŋIŽøâõŽ+ë¤ûûĨ˙cĩĶDH§ obŖØŽ.Õc´¯Ō†•¤ØKŠÅ4ņNŌlqąLRqÚiϟĮÜUaIģ ¨ĶM¨Ļ6)ŠáXL&gĶ-Ķ[ ¸_û-ÂahVË„Ķ˛‡A„Í80™¨0Rč@Ę@ Ęp@ˆŒŊŦfŅhDDDDDF„DDGë˙[ —øûĻ›BûÔDGįey3Č\TEtdŒŪn&uBøTÂw˙ũëģš˙vˇ¨øŽ.#ԗĘt}ˆē%Ėú"‘¤fŖ6F#¸ú1œŧĮ“™Šš§e,‡†lfÄũĩč˙Į˙×­˙ąą^ąWŪī˙âŊëØ¸_ßúĸĪ×˙˙ė6åŸkūŪŋģāŋû9‘˙˙ūoūŋũļë÷õo˙Eŋ}öŅ7˙˙˙ú˙ŋ˙Ũžũ×}ĩ˙ũ/Kđđ–Ī/_îĮg?}/õ˙ōûeđG‹÷á¸#Å×˙ëũrû{ëīūÖ×īû#¯˙[īNøa/°ļ—¯˙¯ëû÷ęÃ[U˙ņv˙ž.ëøØØĢÕ[âîīU‹´ĩîĸâĸúiÛM'nÅŌiĒiĒoÅ5´Å'Å4škvžÅ'iÅm:~¨0ƒ  Í3@Mn˙´Í280„3—0OƒĪ4ͰĨh3ØA…M0B Ą@ĸ""""""""""#ˆˆˆˆˆˆˆˆˆˆˆŽĢ¨˙2ÔČņÖ"y$Îã&qUQū֓üÖéØ":–ę¯ôņãôīßüS^…´éФû˙č_ũ=õĐãņû˙Q§˙Ú߯pŋ˙ lÚ_˙iw[ÜB¯æ?ôÃ˙˙ĖŽëîØĖ˙īûøY—Z˙ũÂ-˙ī˙á˙ŋÃm˙„L˙„L˙ĸßÁ˙ô˙į×Ĩ˙ôØķęÚ_Âū˙AyīÕ¯öoõ˙_í~ŋŽđGy¯oûUö+ŊtŋÛ_ëũĒ˙ú0ī^×˙ũũČî˙[_Ņ˙Ōû]m-Ĩû|>-&úV){N;[Tû珨­>E˧­¯ÅĮ¤Đi´ąn›ëé§öÅ1\kĶœ5ظĻ)4ö°ƒ_°ļ\&ļh[u†L¸LĐŊ…NÂŲnƒ šÂī Đ5 Â *pĪh0ŗJ†ÚÄDDDEĸ"""""?¯úé~ŖĻˇ°ĸ#ķ%(ė×2Ö&*ϟ2ĩūdĢ´s;Ũ¯âĢBŗ˛ČŖSLO%Ņäa͏>ĖҌæFŲff§Ųüģ0á ĀĻÆfÅ80…‚C0 &XA’ Ã0ƒ4&˛@S ÂaXM0ƒ-†0„]ô[ŊôXôXôXôa÷3īŅĄÆú44gŖ;åŽŅn—Eģ˜z-ÜÃô[ŅcҟhĪEæĢĢaWZA鴝–:JŲqv˛ā¸ģíĨ¤ė*tœ2áŊ:žé<ˇTŪû†h¤Ũ; Ųp\~‡÷oZĐĮMīũ~“ü×Oŋõûâ…īũu] ž×cū:˙´ĩ˙øû@ŋø‚°Ã…ĄÚ‡_I ŋŪd]‡ķĖ‹û÷˙|ČĮ˙…¸ĶŨ‡2<Ôá„Mū7ˇ˙˙áû˙˙Ņ1˙ú-á´[ũ!˙īEŋü%ŗß ö§ö{˙¯˙ëĪĨ…÷ú[h/ŌÛŗËė"‡õ˙ũ}Kíß§f˙ôŋëũŋqÚē÷˙Y"sŸä‰õũ[1kwæ/ļ•ũũļ–ģa/đEģî×ė-ŽGûŋ_÷û zîØ_a…´Ą˙vž.8vÔqąWĨqąÅÚLSlv’ÅÚQlkiE*ÅGąũĒŽ7j“j5ôĶVLtĮMSoođ“xĻ“ļ˜\é4Õė¸A„Ķ.2Ü&TPļ™­U;Ma0šf°ƒ<4Lö™G> ÂišĶ(‚˜!ˆˆ‹ÄDDDDDFiÄDDDDDDDkëúßTÂcŪ#ķ \”įeąĶ)QŨ*iĒi˙˙´s5m;NæøĒŽ8Üė‹ÉŅRČZÍjDtf‹ĸFs>ŒJ~!Ŗ3F#qķ>ķ˛ąO Ëŗ Ã#ÅÅ/  ¸Ĩ㠎f†n#š ę!†a˜đ†/lS¨ĪCC6 A„!˜i‚ č a Ļē,vŒ;FŨÄjēĒĄ‹wķ;EŋUEŊíôačÎĐ׿vš4bŅĄŪƒ¤énō+ö Ũ“vī&äßM;īOģ&īnēt ė¸-ØeÃÚWdßļÍÅmš4¯÷w`™ēîÍ֟Úię˙ŌŲēĶĩö—ũûĶžÖͤûŧ{÷ĄI¯˙˙˙õūŋ˙Õ¯ņß뾅˙˙ëcõ˙˙˙˙‡˙đâ ęŋũx/÷üČ˙ë˙˙˙˙˜˙˙ˇ„X˙ß˙ŋˇ˙_˙ûŋ˙˙˙ũ~˙éh/˙˙ũ/˙û<ŋøE9˙˙˙˙ßé˙_ŪāŽ?ûëëû˙×Ė{ÛVÂë˙÷÷˙ß˙ũöļ—˙ØE˙ö×Ķļ”qQÚÜūůąÅéąkĒÚv›Sö’ĮŊĨĒÅ*øÚkM5ĒMSO´ĶwcĶNî8Ũ¨¤ĶXĢiĶMŠNí¤îá‚a0™nŋi§ũ–á~ËÍ3B ĐũhLփ3„@Âjžh šf„í ˆ4 &ĩÄDDDDDDDDDGúũ.ĩM1íÄ|ŗ1ķ1žs"´wˆæUäo7¤s+ß2-8! Bs% & Š…Á4ũt[ŊîĢ˙˙ũ: ›‡ũ>ŦŪíē\Ķ˙ąqĄŋ˙ūŊ‘oāęįebĮ†xLģ…˙×˙Ķí;[ôôĶŋ˙ôŨ˙ë÷˙˙û_˙_ŊĒ˙˙Ú×kßIŋ˙Ō˙2?1Ã˙ūž˙Š‘˙õßß˙˙˙˙˙ūŨ˙ú˙˙ū1īĸĮ˙˙˙˙ķëüú ˙ū˙_ųõ˙ũđĩĐ_ß˙˙˙ĩūÔQûūū˙Ķĩ˙˙ūũôŠë˙Ŋō÷_[_ļÕ?ßū÷ũgwk÷˙å×§kßíŨ¤¸øØĨáÅ_ņÅņvŧkąQļ—üvŸiëvļÅĒÆÚũ7i4ÚxĨMŨZb“Ōēv4ĶMj5¨â“brcîŲ1ĶđĪlČ é Á2œLĪf€°g@Tæ°a3B Âv5„Đa{ Ya°B"#ÄDDDDDDDDDDDq˙ũSüGįeqØ<Ŧg2Dv"%1 Ü&PŊ…˙˙Db|ßŨÜæįdTęíqņWÄ|VvόfyB#ĸFNˆÍĖ#čÂ5">~×0‰vAŖœ¤ÄUŖiLŲėŋäaHō>ÄxŲNʘBÂ"X†lCc: B !#ƒ8°šw3 à ‚Âƒ/f d6†ƒ „/0ĐeŲsL&CAÕ4XíÚsEŽØūwŖCôŖų‡čŅĶô[õŅ˙îŒųĸÛz5îˍ4–ˆ¯\ŅeŽqúé>íM Ũ'eĮØNīMģ.,$–ëØN˙ß°I]˙¨ũôš^…ęÚīßŋž˙é÷ž7ūÚúĒß×ëU¯öĮ˙Ø~!_õŋ˙øb˙˙ōĪļõ~Ö˙ūŨ8_˙õæGÛŋ˙÷÷ˇē[Đo˙˙nÔ"Ū¯˙īë¯á´[Ŋ˙˙žũģNøß˙˙oęĩûũ|öûūõÚ˙ũ§_#Ī›˙hŪ߯˙—ÜŋUß˙Zŋz˙åöũīŧŊũĨûļŋ÷V—ätŊöé÷î¨Ūūü…õƒĩŋívû­Ü‰cûJ+Ķīm~=XģKž.5‹†’jģ§ė\T\iÅtĶᴞÅ4ŸĩÅ*tÉŽ˜­=“I˛cĻ+ģi¤õjLuRn™n°ÂėĄĐ`‡ &œC ¨Oˆe8M0A aˆ¸0˜B""""Áˆˆˆˆˆˆ‹ÄEĸ""#ˆˆˆ¸ˆū’I-ŠŨDĩŠĒT1­#žGz#%¤v,ŽfA‘ņœvW) ŒAI¤ƒ;I&A™PÂa4Ž×…NÖĶ˙UĐOU~ēzÎĮ[¸wîs›iÜ4ĶĩģIĩŋúüGGû¨4/Îeãæu3ž^? ņžĖGŅvåãČæ_)ō;7Œņ™‘ŧáæ{/œ5%ķ™vxC‡‘ĖųnÜģ0Íå؃žáâ„-4ÂÄ0Š„ÂÁqa0…‘Ų†XMB 4Ķ0eÍ0…„Đa0†‹qa5õđ„lSaŊöŒíũčĪF$?ŨŨ‹Fw44gčˇģŖCt[ß´Ī1ÜņŨŲ7&í l-íŗ_íŪkŊŋlģa ÜĐŨ›ģ4{i'ßĻŨŌVlM°šõĄÂt9y­ūĢL;zzôšĮßą÷}÷˙ßĮm&Ÿū?_õĩ˙ßEŽ÷˙øÃ˙°˙˙ū˙_˜~!ūacŪēũzo˙ˇūØ_˙˙ũ‡û„gū8_˙˙˙O÷Ĩ˙øoü6‹Š˙˙˙†˙Tŋđ‹ūŋāŠ{ū¯O×˙Ī EGũë}˙ũūÁôŋĪ}÷įŋׯ÷Ķž—˙ÚÛ˙’7ëß_˙ōF˙¯úßūo˙í~×úõōö¤yL:˙ėwú]úzZZë žŌm}ol$ēāŠūÃX­&+k¸˙ļԊŽšé­FĒqÅÚÚúvÅĒŦmŦW|\wĻ›ĮIéí­ŽÅS ļŊĩ[–™1Ōĸ~˛c¤ĶēbƒJË{-ė$ŲnĢ_eē &a~ŦĐOˆŒDDDDDDe Ëēë­]ÔZĒ]|hi§Qųڞo2;/œÎ隞WASÂiĻ[˙ųVģ´tˆÕ›ŨĻ_Žâ/ũTí>Ļl‰4QŽCDtšŒĖĪŖ™žËĮ ņÎË1 Ā̈́A›#„pBėÃ83 †Ú ͊Hˆæ0AžÄ]˜fȐˁœŧlr&h8°ƒXAĄ„ÂŅcÖaú3ĶÂhÃÂ-ūŒ=5Ņnô#FvoVí}ē-ÚĒ3ģFwÚ-ö‹~‡ĐNû°•ļMė)ĄīNî“l¸ģI7˛ā¸ĨĶžûŋVīŧŅŨ….4Û5éļg]īß_­§Đׯã­ęļjĩƗģīžōûûuõ¤ū“â‡cKÛ×ũą_×˙~ŋßøcí/ĩî?˙˙Õ˙‡A˙˜áõōÄ˙ųŠõÛņ}üŨ˙ß÷Ė€˙ˇ„[˙Û˙¯˙ū˙ūߡøEŋÂ_ũû{đŪ—ū}÷û<ŋ˙īÂ(wī†ũ¯_×˙˙]žAāŠ_ö Š¯ë˙˙^ŋø#ŋũõũ/ûūūÕ<Ŋmm7ŋü"Ēow{küũũ¤ÚúīŽŋúWäßöũ°ļë‹í(q~ĮėqqŨŽÚKŪĮņů§ŦCŽøiZÚIÅEv–)§M:aE;M'ĻĶši­:oúiąÄ&š ›ļÅXi§ƒ=) ŸSA”8Lã„Wg …„,u;ϚHA”4sžĶĐg´ !aˆˆˆˆÄDDDDDDq_OQōĘP‰R–eŠŒ‰ÄĒ!3´æD؈ė6™PĶ‚áAB… oĩ[Ģģŋ0÷ÍŽŠ|;Ũ§wwÅÚˇ?˙Šëķ§üü}šyæhŒyŒÍÖc4gŲŗčÂR!ĖÅR3#ĮBĖg‘ÄpĖĖæo1'—g.fÁ‘Ėظ&a a ‹Cˆa$0… Ë˛æZ—h2;0™s#œX&ƒ „„.㠏FŒ>9čąÚ-čˇĸŪžŒîҟ0ũî=ė"ãíˇŖGjŪχ3öęLvųnŨ'IåģIúęĐOM˛ã-ÚO.4Úģ.ląĪ>ˍnNėŊvéKŽ–ōâÔ'ô˙ũ?ôč~“×OMĄūņĐû֓˙Ō[Ķ^ûŋ˙ô…GßÔ˙úúlw_˙˙˙küAq˙˙˙^æ?īūcŪc‡ķ#˙˙˙1ĩąõë˙ûģđ‹ëīë˙†˙˙˙˙û÷¤ģú˙ũ×øE?Ō˙Á˙>›û<ŋū×˙ŗËøŌ˙ŋë÷œÜįé}‚8í~˙û^­A×_÷×ÕwíWfũīôÚÚ˙úļˇŋ˙kĢj›é6ŋ¯Ú˙ė5V˙žÂ_Á˙ûŠŠûObĸ˜ģ^õb­(ĢKX¤øģ¸øq§ļžņlR§|&š´ĐM8Ķßb“TíĻ)¨âš´JŽžö×ÚtÉŊŽöĩOÖL'Ã5Ē Â ČíPa}e -ÁR4Ī@DtÂU &z# Áˆâ""""1DDDDDDDW×2/TęÁĐÄ~vY‘|’ĮHėŦāŠ­§Ї•hČSģM>7ņU^Rō:% ŖFUŖh͙Ŗģ>ĖōúŸ3YšŒūb>gĖבĖäG‘üŽiž3ŅåŲ†a‘Ėš›ŒY Ė3 &]„!„¸†a4Âh0„4M29˜hZ Â… Âa0‡īˆĩ´XíõF~¨ˇwhˇÄ^‹~čĐҜz-ęŒųŖ$;¤krCžxoÚv[—“|&ŨŨ-ŲpĐMė›éļh.,*m‚#đŊ)ŸTÛ.Oė'`ˇa; ymôūö˙˙é§wŌzÕŪ:÷¤Ŋøßī˙˙ø˙¸ũ˙˙Ž.ĸņīī˙÷˙1û˙âŒ?÷ßæč"ĮüČīīŋ2>ŋ˙˙˙˙ ũ˙ˇĨū‹_˙˙˙¯Ī¯ũôúõö{ãA‚(ué÷Zųīîŋ˙kūs˙˙˙Û_uŗ}Ú˙[¯÷¯ŋ˙Û[û_íKß˙˙āŠpŌĩ}~×ī˙āÛ ~/ûøâö+öę×´˙í$âØØŽ-UŠˆzIÃJŌã¸OM5TĶkZM>+MXÂi„ĐlwTĶN´Éĸļ*)ĻŨš˙öf€°Âß 'kf„ i Ę8  e&ƒ(ā†a37RÄDDDDDTDD×Ō2ĐŋUiƂ} ÁQų’ĖF˛fķ´Ŗ:Å% ˜TÂĻ}}Î÷Ęĩ;$Ãģ´ŅŨz´îqqûūRŅBķhĄĸ'jOžDÎDī0šŒĖR0Ī™â•LØÎb#™ÁæÆl)¸ĀÁ6.G3tC8(D%‘č h2âĐdvač‰  Ræ\˜A҇Ú3æĄhÎôgvŗŊčĐã[F}Ŗ=īųîú3ŅÚ-ī44kģÍß4{°ļŌjMęūė¸ēëjōŨŧ¸ĶŗGÕÕØLąŌAØ_ô“ˍ7 ŌŨŌm]&˙×ĶN××OÛUUtũ6…īmUØøũO6û˙ūö?ą¯˙×˙ėqß˙ūĮvúJ˙˙ņÁ˙ũ‡žü>ö˙˙y‘Û^īūŸ1î ˙÷öđ‹}ū1øEŋ}‡˙˙ûÃ˙ī_ŖGEŋ˙à ē[ū‚ú˙˙ŋ>ŧ;ī÷ßö¸"ž’^—˙á˙‚*)מŊ/\áØ#˙¤­|žūGÛ÷JŋˆVŋë÷ëzˇåęoüį˙ßũÖˇ˙í¯ßu}‚)÷Ũük~Ŧ?ĩ÷JÚm+ÚôŅũ„ü'i-ėSi*ŨĨŋļˇQŨŽÅŦ‰Ŧ%ÅąĮk¯ŠiŽĶMŒ&ĮÅSĢŌiÅ1QM&Å äĮIÛ ˆL˜údŪɏeēb&!U„Ķ4+éš3B…LĄĐa0šĒ ㄠĶ 2‡0B §DJ"""#ˆˆˆÄDg興ˆĖšI˙××ú]„ŧ{„uØMÄyfttĪ9’ĸ;:2-Ę^@ĸ%@ÁBs*šiš5NûFˆA"ŨÖõ˙¤›ASwŦ­dĪr7í4s§ô’øēˆŠˆß_Õ}HLĸ(D3´—šŲY3Ųxاˆöb=œ#„{.˙Ö#™ČŪ]ž#q¸æ] Î„{.Ėã\ŧ`ĖEÉ3y¸ģ82\!¸Ã#™Á Č2C‹lĀC 6*EŋPš„Â4Âa ´Ķ^ā„a#´_ŖM4-;McFzēĖųŪ‰ųŪÔ?Ėô\=ķCôgŖFH|“Ũ“ŒëÉž[&9'Âvˇm{°ļ\iŲqypꝄ&ÕÚwW´\īŗrŌv\_~ØL×iˇ§ŨúÚۚ´7§ēŨßū›Ũ÷ũûoŊ:oö5ëíŋĨHģõõõúîÕūũÖ×ŋë˙Jßė4hû_ë¯Æŋ˙˙˙ūh_ëüAũe‡ŋ{˙VE÷_ūd˙˙ü"ĮĩŪ?Ũ7ūc˙öëôļ˙ Ģ˙Ũ˙ę˙˙˙ß˙¤˙į×ėaŋô˙õú Ö˙Â*_{~Ÿa;<ŋ˙دūŊ} Gũz_ÅåöõËížôÚĶôúoõ×˙ũOūžũ¯ū˙ë˜ŋ^sō:]nŋēŌĩëöģĩ_l+ /ú_Õ­ÜĻĒÅC÷žûNí/Ņņöö—{Åm(´ãm}8¨¤ĶNÕnä$ę/˙Mj*•4Øø¤í[OX”>*)8ĻaŠdŪ­1 5Ú •WeēOi— 4Ô0š÷ĻŊŲ­<ĐžÃ ‚h0„f]HDDDDDDF`3[Q|DEĸ"?Iéu˙Đ"‡ĨÚ]a…B̊ēqXĻĐ^…ƒ)瘈ˆüÉB*hí+;.ĻZši†ė!ŋëũüo›ŨÎÆ|E\wũzúšeFAƈÅ;,gŒôGŠo9›Žds.gHÃ1f583QŪ]ŸÂ7Ļb7Ëŗtˆäa˜yąåŲâ9ãbfÂA‚l @̈́Bá0˜CT¨B->ĶMšj†Œ;Pˇv ūaÜZ3´->ŒīF†š4=˜z.Ŗ_mŊŨۚš(ˇhגnxŊ;˛nLw$÷}.LzVË%ģĨl$—žO.^ļn[û5š˙Ŋ5ôû´'ŋké§i˙IĒxčwøūŪëĒÛũģúũW˙ą]nĩĶb˙ûÕ˙k×ëī¸â—ŋlDū˙ßßGû˙ß˙åžŋĖ_ūn××°Â,˙¯ø\"c˙ũ†ŋ˙¯˙×˙ëøKK÷ē ˙˙ßīAh.˙đ˙˙ī˙÷˙įÖ˙×_đÚ_×˙¯õ˙ø"Ą˙˙Ĩūs÷=÷ũ¯ū–Ą?ķėĻ˙īīõôaŪŋŋ¤ßo˙˙˙Ú[­í¯uĨé-ÖŠ÷ĩÛ÷˙íjá÷k oé?ƒ´ũma§ą_Į¯Úzļŋí(´ãã´ĶØĩ}‹‹c´Ą…ŠŊW´˜Ö“ļ•ŨĒbĸ˜ãb“üSîe_VXéV¤‡L›Ų1ņLSJԘé4Ö)–é6­C eŊša4Î8S5Ēaļĸ!„ Â{0m—ˆˆˆâ"""1×_˙éØM=§\DGå[•IJ;)ŽÉYēáW_ģáūôSÍbŒd34gĖ͞GŒņ â1gˆôG™›.Ž o7gÖd|ÄGŒ ä]—3™¸ģ.h|Îæz4~hĖūhČwˇ&í'wIŨ—Ÿ-˙ģ˛âÂí‚#ô돤ôî“jūÍfŊl+ĨI;˛ãéSėÖĻž/âæ˙Ūžģ~ˇCĄēĻâ˙í˙úŊ˙ŽŊęŋī××߈#ą¯ūŌCĶĮņ\A˙_Ä˙åˆķ#_ü.Ũ˙2-üÔķ!°˙6Čöë˙ą÷á?˙ëū˙ú[ūÚ˙l7ú Ņou˙ŌŨ-˙˙˙˙ôļ˙ėōßŧ"‡~}6˙Ĩéq_ũqZ˙˙g/ŗË˙ũeį¯]sŽŪ•Ģ›ģR>å˙ũsM˙¯55˙ûi{k÷kû÷ŋaļŊ×ÚÚ[k}˙ßŪ•˙é¯k˙ņÅĮǎ_‹Šī⓾Ōbĸ–*ę5^-8š Ö틐ŽØ‡iĻŠÛNŌiėU4ŨÕSϏ¨ĻšM¨ĒģM“~ÉļLtŠōn¯“tŊ/A„ÍYŸ‚#Ąĩ""""""3Pņ˜r‡ˆˆˆˆˆˆˆˆŒGz~睰”0–ØĻ*ĩQųeü‘“_™-Įb"ž2s"Ļ@ÎÂĄíW˙úww烐.eŽä§ÄŪīũG×˙ȉH‡;ZEã–}‘lžz3Fõ#GįĖŽˆƒ#L͚ķÉķČőŲķ9ō;=œØĐyva„ ģ0Âs˛ Ą h0ƒ!™vaĄa´ œĖ0ƒË™s1 вėÃL†eĖ Ņ —i‘É8´ÂhąčąŨíčĪūwī™Ū‹{ˇĒ3žæ‡ģ§ŖEļŅģĸیô\9Ÿģĩ [ŅîōŪđƒĶ°[†ëa;ĢŲq`ˆëv[ģ˛Ũ$ōᰟI÷v˜I?¤ûĶíS˙íÕ:aYš6ŌõũR˙Ũičk˙÷ˇ˙˙÷xßīëąũ¸ũ˙îņũąū!q˙ë˙Ļ˙˙˙Å}^˙¯š˙ū˙˙đûásÂ˙Ėú˙˙üāųļGŋļīÖ?ū‹õ_íûÂ-ú-˙˙˙˙˙ũú ū›˙īūũ˙˙‡éiz ˙Νū˙˙˙=ú]ĨxĶü÷˙ékœ˙/ŋúũí÷Ģ˙ũũŠu/ŋčÃŋŋŌī˙û_ī.˙˙úũ¯åÕú˙öŋ uÕŸûZõl$ŋ°ÖĶøļ*/ũ¤ļƒ´ãՊøØļū.āØãbŖ´äH +IXĩmxîKÅ Ķęž+Å&ÆÔn´MøĨii“íIcļ8¤äĮJŠė%b†h –ëÃ1ÂatĖá;5Ļg´ĪE†Ķ3č gšÂÄ2‹„#b"""""""""""#ÄDDDDDDDDDqn˙¯Úū*šmn™ÁDGËq,ÉN;Ō+ž˙´ķ˛Ī;‰O”øœßŠâĢÕ5Ėãųtqž3Ų}H29゜#‘œ-ž#P…ŅĪ øĻ#™â5ÁžËŗ„o.Īgˆģ1Į2ėšIMÄxŧaž$va˜¸§Fb#š ÂM / ÂĄaSZÂiŦZiŖL&šh0…¨BL/iĻ‹[BîÂ,ë3Õ ŅáķFwíM‘ŽMÜĪ´\]Ņ­¤Ũ3=Mķ=“{S;ww“roF‹M8zļŲcŌˇeÆėIéåēÚö tļŸí%uūūīÚ];_Ķv•{ģM=õéU{Ŋo Š×IqũŽŸęŌũkĩė]ßk˙ûŋöŋ˙oüA–ëáú_Õ˙éE_îŋ˙Û˙˙ßūtaĖ„X˙č}ŋ0Ī˙˙0ĪͰī˙˙Ø˙ú-˙ë†˙Ōû˙ ˙˙˙˙û ˙˙ū˙˙ú_ũž÷Νë˙=ލü÷ß˙g7ÁķŸ˙āūÍ˙õ˙ŋœÛĩüÜžũīÛû˙Ũ+˙ėÅ÷Ļú]­˙ũ˙ú÷ú˙ØKˇmP˙á…a„ĩŋØV;NöÚąÅZZßëŨÔÆÅAŭώpØîԊ[ŽØ†›kÅx§cm(âéĻŽÅEm;ϚÆŌģM=ÆŠü$âšMZy7VËtWĘp­0™oeēb™1ė˜č0šbõJĶ4Ėë}„ÖÍ „Ķ4†hNĘđ„@ˆŽ"#ˆˆˆˆĖÜi{××^ÖĢØĶUˆ–f;89n%ßä’7‘xŪLŲ;0ÂayÚĢÁT(\.ŧÖĐ%˙ŋûšŊ->ĶæZ{šŨ˛´îãú­ņĮéGõŊ(>ē~}ŖkĖ"\ÍLŌĪ o[K#÷;-,Æ{/#fxeŲėŽĖÂíz0ôgzK8í~ŒīŅnĶøŊҟ44kÍ„č¸`ŨŪú3ŅpŲ1ī4QŸ3ŅĄķ=č;žûĢoZžė-ūļ\X\ĐŨ˙ëI÷é°ôšqfÍmSĐn^nŨxØ[ē_îŊoOm/H_˙ī‡û^ŋFp˙íWŋcŪũv1¯c˙ÃXû^Ō×˙đÄ/˙¤ūüÕŊÚÜA[šŧ\?ũļvļíæGūũ°_˙Ūß˙Ũ0ŌīÂ,{xã†ũũ†ØEŋØaĩũ˙ũxmũī˙˙ūûoŽ’Nßíúû†Ōīv˙Ōß˙÷¯_ūČō¯ū0EF÷úß=įŧQ˙ÁpEF´đGˆ"ŖŲĪũo˙ËîŊ˙yģŽ‹Élßwĩo֕ų}íKÍĨÛ÷ũéŋŖ?ôŪÛ_ī˙]oîîÖ°E;m[XĢk×ßkú­ö’Į~ÃN;ī´ûīŊ‡úßŨEûÆĮqņLUbģOŊĩM%bãcļ¸ĨãŠˆĢN)ŠŨ4âĶé6)“EI™1Ķ&=Z Á0V“öĸ˜„Å[&:Ļ´ÕXeēfu Ļ\ūÔ&`ŠŲŦ&°Â Â !ˆŽ"‹XˆˆˆˆˆˆˆˆˆˆˆˆˆˆzÖŗ#—ZëIŒGæ^ŽŌ‘ŠH•į3ģĘ2K‘癪:ɚ4Âa5 jŊU>ųĮ˙ģ|ė“wrŖßWwzk/ãCŽ8W×ōǞ(ˆžc>No8s˛ÃS‘6 pÜŽĪ 3Šžˆņ‚8Ė3qÁMÆ ^6ĖEŲÁšˆÁŲ˘D|G9›Äs6) Ė3B×M:pĐ…AÄ4탋Aú„Xõ´īBŅnõ‚#ČEŖ;Fh\Îß[Fvē3čĪŽŅqF4yŸSEß ú3Ãîˍ{¤á—ĮzynÚeĮwwfžûīÚi›•?s[öTÁē[í~÷õŨUu¯Nõ×˙Ĩ_cą˙Đūŋz¯˙ėĒkû˙üB˙øûúęœAÄ˙á˙¸‚û‡˙đŋ˙÷oßæGą˙XE˙đßūoöáõ˙Â-˙˙á¸oÖ˙Đ^Úč/˙Û˙ĐZīũo˙ ŋ˙S÷‚*?ũž__¯˙āŽ˙ī×Á?Ĩį?_˙ū×ËīˇūũSI~aÂūū˙é{oŋ˙°—˙­­û}ûāūՆí84Č˙Ü^Å÷ņiŨĻŋ˙a6?ŋ´âô×UŠĮIĻÅąLSÄ4Øˇ]bm'ÆŠÅ&šlm&šĻ›&:^à ēÂkŲ1Ķ …&é„ß&é–áašëf„ÖÍiĒ=îÂgÄ!ˆˆˆˆˆŠ6DDDDDDDDDDDDDtõK -ŠÂÎËQ–š3É,j25ējUĶ˙Ŗ˙šŊöŠŊĻĸ/ø¨_>Š%:#\FŲôb0ÎEãlá)Ųj9—f# ųž‹ĮŒáž#¤GŒčŽg#„r#™Â:ƒ03PĪƒfDG5†j&ZhXTÖ „,!i„ Ô!ĻĩF„5ąßĸŨĸĮhˇĒ44gÚŖ=QŖFw\Đæ¸ævÜΚ3;ŅnŲ7zNÉģF}>ÂĻéá; ũ„éSî“I;. ‹5š˙÷fģ. Š\¸˙ôËÄí;é´öũ˙úīö.˙×ņŋ˙]÷iãwąŽÅßßCüŨkũŽ˙|}ũßņq÷ūģ˜؅ŧA™† xqũÛūŗƒęd{ü.Ãŋ÷ãė0Vc˙ũ†nü"Ūc˙F{k„[í˙Ao˙˙Ãhˇˇ ŋ˙tŋKAĨˇīõŋŸ_ū¸oũū{÷Ŧ"ŖĨ˙g—‚;ëú×ũpGÅiq ×˙ë1š{˙­ū_uí˙˙_ß˙ū˙÷ųĪž IUĩ˙ú¯a~ūīítļ_ŋUƒ´ôØĩĶžĸ%ôŅĮūÅÚ]oũŠU‹ŠN.Õ8¤î8ŋ‹Đlq^Úl\6“MSՓĶTĶMZOŠ!ÖŦ˜øŦ0ĩ„ËtĄ„Ë„ËtnļkLĄÁ5Û šÂÁ„A‚˜":ˆˆˆˆˆˆˆŒËšŸĸ#?DDDzž˙I0—Ž:´Õ6,ĒŧŽ“!y’x̊[Y–­T/˙ß~vŗžSųŲ÷kŽ+]Nî3DuŸfhÆs5ŧŧ1ŸFŗ)ĖáfķȎĖĖģ9ė°“5 päs0ÍÆ˛:Fōí3ƒ7ŲxāͲ<af ĐaBa0™vaÄ0…„Čæ]„Âh<-Ąi„-zGvpÂiڅZiĄ¨EģŽačÎĶTgĄ‹÷kŌ4Qžow“q8öMîŒũ;S] Ūæ{˛oa#EŪ›tž—l0’ļ\Ũåŗī]īžŨ´Âzũ˙I{ŗY¯žī[á>_iæÕŌüu^?O^Ån•%ô˙ģ|1×ú_˙c×Ä~ŋcī¯đ˙ŋÜAqß˙˙n ŋ÷˙Ã÷æ°ŋŊ‡2?2>ßīũ˙ŋ˙Øp‹ū˙ûô5īˇ˙ūß˙íĸß÷×˙īA˙ūõĶŋŦ>}‡ūŋT}w˙øE>ŋ÷_û˙šīísŽŪŋįŋɯéū__ëÕ˙Ūë˙—ßū×ßīĩŌÛ }ß˙;Ŋ[Kû˙M{˙k˙Úß÷_Ķđãūę;JõK´âĄĨqϚ˙!ė\4ŽĶ‹Š[ö)4Û 'Q[IϜSLR§lm)YnžĶĶaY7M4¤×eē¤ĶÚkØĢ Ô&a~uA”4"""""""1™]Ö>Yš’Â;Ģ"ŲØčíbNdS‚eA­‚wÔ/_ĶS"éŨܖ}ÈĶÜ|G˙ęšHŒ"ŒŲ¯#Į™œÍ™ĖŲÎËHŪ_'FÍ3‡æķŠį ŽČģLÜ`ˆlÃ1&a‘ãc6)Ô!ą‚GfB !„aS 0„Šė*a? аššß§qŖ>gÍg{ú<>xhĪį;čŅiæ{SCūhz4g†É -îîÂ`ˆúV“i=;G[ŗ[]‚.—KtŨĶŗfŊ¯÷˙Ķé÷ˇ÷čcĐļ‡÷ކ=ü{5ÚØõ˙_Ômc˙¨…^ŋúŅvąØ{uę Ž?ņq˙ˆūß˙1˜ŋūrúoa˙ÛÂ˙…˙Ĩũ‡˙čˇ˙˙ũû{īc č/ôßu~˙ŗÉū}ö{đGsÂ*8ECį@ŠŽŋ˙ąYīüžßū˙ũ¯˙ŽÚWëzö×í˙ũ~z5´žû˙°žÚļŊŪ”4ģV+ļģŦj÷ÃĶûĶ´Eą]ÁũEŦĮ›Ģ›§qVŽĸļ.ÕXĩ†ŌôœSÛI´áĻ–MÔBjÚal-ĢKĶLˇKėˇ]†¯ke™ *j‚ ŦA”@B#1Ŋqú"""""""">—āŠ×BŖ^Ōza G–g3æGRȖŠĸ8‚ æKy’”JYŧ­0˜&EÃTgtõMWëšé?ŨŖ›¸éû™MĖ´swŨ÷ú­ę>7Š˙$fīúŠŲt™ög)­™ŠoSÆS™ÂÎŧŨ˜Œ3!‹äs<3v–ŧė´Ž ö]œ$ˆŒ3rf# ÜGd`…Ų†laG. ‚Į&9 ØA„DrŨ„P¨0ƒM=4ī^ačˇņhĪšŪÅ%ôaÚa ]ím;CEžíí}ôgÎīŅŖ4vϊ3´kčÎŨ÷tēoš)[.*īũ'Fˇ$>wĩ¸w„;¤îõ´îË‚á´“Ģ ÚôÚôžôĢ˙ˇ˙n:î˙v7Ļ ÷ųe×ŋlģŊE˙H]ûOø˙틯ŋíŠ3Ōũ5]xõ˙õíS×˙õû×ø…ÄA?˙ûŽ?ôdxjßõŋa˙˙ëø˙æ?ųü.#ß˙°Á/˙Û§ßûû˙˙ön˙˙˙_ü"ß ŋ˙Ũ/ûđûÖģ˙o˙˙¤__āŠw_‚(wũz_˙áŋÜ÷āŠ‡ëü"‡„Sŋ˙˙õûûūՊûWūģq˙f˙ũ?ū­/MÛ]ēēdy/W˙˙ŗ•÷ë˙÷jŒ}‘ĶkkÃNÛ ¯a+Omzĩõô­$­,U˙oÚđvNÂéúØMu†ÅH—Ž)‹Ŋ‹Š‹V65‹Ž-bšM8Ļ!lUĻŌNí-8´é‹]Ž8´ØĶNÚjĶiĻ—’4ÉžÚeēŲn — ÂŨ”8B#a1^Å5a™Âږá[˛ŪËt˅ŗ@_MaĻˆˆˆˆˆˆˆˆˆˆˆˆŒDDDDDDEĮFčŽŋ¯ĨŽ*)ĩà #˙˙˙˙˙˙˙˙˙˙˙˙˙đ1™IPJXJ(––leptonica-1.86.0/prog/wordsinorder.c000066400000000000000000000121301506303110300174050ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * wordsinorder.c * * wordsinorder dirin rootname [firstpage npages] * * dirin: directory of input pages * rootname: used for naming the two output files (templates * and c.c. data) * firstpage: 0-based; default is 0 * npages: use 0 for all pages; default is 0 * */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Input variables */ static const l_int32 MIN_WORD_WIDTH = 6; static const l_int32 MIN_WORD_HEIGHT = 4; static const l_int32 MAX_WORD_WIDTH = 500; static const l_int32 MAX_WORD_HEIGHT = 100; #define BUF_SIZE 512 #define RENDER_PAGES 1 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname, *fname; l_int32 i, j, w, h, firstpage, npages, nfiles, ncomp; l_int32 index, ival, rval, gval, bval; BOX *box; BOXA *boxa; BOXAA *baa; NUMA *nai; NUMAA *naa; SARRAY *safiles; PIX *pixs, *pix1, *pix2, *pixd; PIXCMAP *cmap; if (argc != 3 && argc != 5) return ERROR_INT( " Syntax: wordsinorder dirin rootname [firstpage, npages]", __func__, 1); dirin = argv[1]; rootname = argv[2]; if (argc == 3) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[3]); npages = atoi(argv[4]); } setLeptDebugOK(1); /* Compute the word bounding boxes at 2x reduction, along with * the textlines that they are in. */ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); baa = boxaaCreate(nfiles); naa = numaaCreate(nfiles); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", __func__, i); continue; } pix1 = pixReduceRankBinary2(pixs, 1, NULL); pixGetWordBoxesInTextlines(pix1, MIN_WORD_WIDTH, MIN_WORD_HEIGHT, MAX_WORD_WIDTH, MAX_WORD_HEIGHT, &boxa, &nai); boxaaAddBoxa(baa, boxa, L_INSERT); numaaAddNuma(naa, nai, L_INSERT); pixDestroy(&pix1); #if RENDER_PAGES /* Show the results on a 2x reduced image, where each * word is outlined and the color of the box depends on the * computed textline. */ pix1 = pixReduceRankBinary2(pixs, 2, NULL); pixGetDimensions(pix1, &w, &h, NULL); pixd = pixCreate(w, h, 8); cmap = pixcmapCreateRandom(8, 1, 1); /* first color is black */ pixSetColormap(pixd, cmap); pix2 = pixUnpackBinary(pix1, 8, 1); pixRasterop(pixd, 0, 0, w, h, PIX_SRC | PIX_DST, pix2, 0, 0); ncomp = boxaGetCount(boxa); for (j = 0; j < ncomp; j++) { box = boxaGetBox(boxa, j, L_CLONE); numaGetIValue(nai, j, &ival); index = 1 + (ival % 254); /* omit black and white */ pixcmapGetColor(cmap, index, &rval, &gval, &bval); pixRenderBoxArb(pixd, box, 2, rval, gval, bval); boxDestroy(&box); } snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pixd, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixs); pixDestroy(&pixd); #endif /* RENDER_PAGES */ } boxaaDestroy(&baa); numaaDestroy(&naa); sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/prog/writemtiff.c000066400000000000000000000043561506303110300170570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * writemtiff.c * * Writes all matched files into a multipage tiff * * Usage: * (1) To write all files in : * writemtiff * (2) To write files in matching a given : * writemtiff */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" int main(int argc, char **argv) { if (argc != 3 && argc != 4) return ERROR_INT(" Syntax: writemtiff dirin [pattern] fileout", __func__, 1); setLeptDebugOK(1); if (argc == 3) writeMultipageTiff(argv[1], NULL, argv[2]); else /* argc == 4 */ writeMultipageTiff(argv[1], argv[2], argv[3]); return 0; } leptonica-1.86.0/prog/writetext_reg.c000066400000000000000000000153451506303110300175730ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * writetext_reg.c * * Regression test for writing a block of text in one of 4 locations * relative to a pix. This tests writing on 8 different types of images. * Output is written to /tmp/lept/regout/pixd[1,2,3,4].png */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val); const char *textstr[] = {"This is a simple test of text writing: 8 bpp", "This is a simple test of text writing: 32 bpp", "This is a simple test of text writing: 8 bpp cmapped", "This is a simple test of text writing: 4 bpp cmapped", "This is a simple test of text writing: 4 bpp", "This is a simple test of text writing: 2 bpp cmapped", "This is a simple test of text writing: 2 bpp", "This is a simple test of text writing: 1 bpp"}; const char *topstr[] = {"Text is added above each image", "Text is added over the top of each image", "Text is added over the bottom of each image", "Text is added below each image"}; const l_int32 loc[] = {1, 5, 6, 2}; const l_uint32 colors[6] = {0x4090e000, 0x40e09000, 0x9040e000, 0x90e04000, 0xe0409000, 0xe0904000}; int main(int argc, char **argv) { char buf[512]; l_int32 i; L_BMF *bmf, *bmftop; PIX *pixs, *pixt, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; L_REGPARAMS *rp; SARRAY *sa; #if !defined(HAVE_LIBPNG) L_ERROR("This test requires libpng to run.\n", "writetext_reg"); exit(77); #endif if (regTestSetup(argc, argv, &rp)) return 1; bmf = bmfCreate("./fonts", 6); bmftop = bmfCreate("./fonts", 10); pixs = pixRead("lucasta.047.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); /* 8 bpp grayscale */ pix2 = pixConvertTo32(pix1); /* 32 bpp rgb */ pix3 = pixThresholdOn8bpp(pix1, 12, 1); /* 8 bpp cmapped */ pix4 = pixThresholdTo4bpp(pix1, 10, 1); /* 4 bpp cmapped */ pix5 = pixThresholdTo4bpp(pix1, 10, 0); /* 4 bpp not cmapped */ pix6 = pixThresholdTo2bpp(pix1, 3, 1); /* 2 bpp cmapped */ pix7 = pixThresholdTo2bpp(pix1, 3, 0); /* 2 bpp not cmapped */ pix8 = pixThresholdToBinary(pix1, 160); /* 1 bpp */ for (i = 0; i < 4; i++) { pixa = pixaCreate(0); AddTextAndSave(pixa, pix1, bmf, textstr[0], loc[i], 800); AddTextAndSave(pixa, pix2, bmf, textstr[1], loc[i], 0xff000000); AddTextAndSave(pixa, pix3, bmf, textstr[2], loc[i], 0x00ff0000); AddTextAndSave(pixa, pix4, bmf, textstr[3], loc[i], 0x0000ff00); AddTextAndSave(pixa, pix5, bmf, textstr[4], loc[i], 800); AddTextAndSave(pixa, pix6, bmf, textstr[5], loc[i], 0xff000000); AddTextAndSave(pixa, pix7, bmf, textstr[6], loc[i], 800); AddTextAndSave(pixa, pix8, bmf, textstr[7], loc[i], 800); pixt = pixaDisplayTiledInColumns(pixa, 4, 1.0, 30, 2); pixd = pixAddSingleTextblock(pixt, bmftop, topstr[i], 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 - 4 */ pixDisplayWithTitle(pixd, 50 * i, 50, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixd); pixaDestroy(&pixa); } pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); bmfDestroy(&bmf); bmfDestroy(&bmftop); /* Write multiple lines in different colors, filling up * the colormap and requesting even more colors. */ pixs = pixRead("weasel4.11c.png"); pix1 = pixConvertTo8(pixs, 0); pix2 = pixScale(pixs, 8.0, 8.0); pix3 = pixQuantFromCmap(pix2, pixGetColormap(pixs), 4, 5, L_EUCLIDEAN_DISTANCE); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix3, 0, 500, NULL, rp->display); bmf = bmfCreate("fonts", 10); sa = sarrayCreate(6); for (i = 0; i < 6; i++) { snprintf(buf, sizeof(buf), "This is textline %d\n", i); sarrayAddString(sa, buf, L_COPY); } for (i = 0; i < 6; i++) { pixSetTextline(pix3, bmf, sarrayGetString(sa, i, L_NOCOPY), colors[i], 50, 120 + 60 * i, NULL, NULL); } regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix3, 600, 500, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); bmfDestroy(&bmf); sarrayDestroy(&sa); return regTestCleanup(rp); } void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val) { l_int32 n, ovf; PIX *pix1; pix1 = pixAddSingleTextblock(pixs, bmf, textstr, val, location, &ovf); n = pixaGetCount(pixa); pixaAddPix(pixa, pix1, L_INSERT); if (ovf) lept_stderr("Overflow writing text in image %d\n", n + 1); } leptonica-1.86.0/prog/wyom.jpg000066400000000000000000003577321506303110300162410ustar00rootroot00000000000000˙Ø˙āJFIFZZ˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙ĀG "˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?čpAŠB×'‹*MĩÕÂdq‰˜ôĻ…Ö­[hÕN;y҆SøŒ~ĩė}e­ŅĀčvgb”Œ/Ïs\Ęj>#€|ÖöW#ũ–d'ô5`x‚ā]C úlĒī€68*NGŽ=)ŧLR×B}ŒË[}˛I++Ģ1čŌāzzV…ŊŗĪ D\šÂƒÅz:\īdžÜwŨū}+ĻĶ6æšą“RĒ/ĩ]ŽåŒaAŪ”ą5]1Ų…LŖ-Y8¤hĮ¯âr*#(¤Ũžôr…ÉwäRŖn5S'=x§¤ƒ=zRqf’ayÍL“zV[\āS~ŌPŦ&ĘįąŖ5Á­:)÷EÎ1sR%Ú*õĒt]„Ē+šā€sJĶ `V3jc ûĶPÎr)}^CöŅ6|wĒōŨgĄĒ~cČšÖČëN4’bslš9~sģŋJ$müTJŒ@8ëVbŒp S˛ÔKRāį"¯Dģiĸ0)Á†p g)s•‰%D‘FM$#Ī™^YČmĢĮŊBMĢÚÜŗ1Ü1Y““OZ›.Ũ 5 Ŗh;ԗÎA­ŠÆÆrw"ģ&HÖIˇpq´šÖL“ŒSdv×D%Ëĸ2œyĩ2ĨˇxđJđj"ĩą)Ib9Yds[ÂwÜÆqKb-´…jR)1WrļŌmöŠqIļ˜bĩ&)1EŒ­&ړb‹ˆ›jLRP1IŠ}&(¸Ļ‘Rb“ˆjMĩ.)¤%iĨ*b)¤Pi›G­L™ŠĘû+Äw[8_T?t˙…KÂ9ōæ_-Īn‡či'ļûŸŊŒ GĐÔčö÷hTŒúĢEy'¤(ˇ’mØ˙<Ûî˙õĒhįŠGT•Lrƒ•Ũëėj¸Ž{nao2?ųæĮ‘ô5*Í Ō˜ŲFüsđi=ŦF+™ÜȰĖŦK,Avė°ĨZeú4^J¤‡Ē0ÃõčōæŒl‹&rœŽŖ54dÔA8“ᇸŦã§ē†d?‡RÍ÷ ™Sûöō2°üÅhŲA¨ Wąņ ŲQÕƒĄČČĢ?é–}sq÷ųĮøŌí¯[ˁĖs¯]ŋ+¨Ē˛&ņ'Š´évÉ%¤Ņįƒ,xĪü…j[xëXˆs ‰G­ŧßĪE§šŲy›üôAüĮøSRŨBųē|ā)ꇕ?‡jVAĄŅ7Ä}6 {iylqÉō÷øŠĩoãŸ^qŠ?Ũė?­ro<2â;Øŧ—ėĮîū ÚĄ›K„ķ%ŧW1û¸CBV꞉ũĩČŨ ņHBŽ N 5åĄX\GļĪ÷ŋĀš\~ĨE:…‹lūÕŋĩôo3|¨8Ēæbå=Biąį&Ģî%ŗØ×ˇ~#ĩˇßėWŧį2F:ĀqQjxûeĢģ9Cų0­hĮtC„™č6ā¯ņzTŌ`‚q^{?ÄëhâũŋÉ.;ž~™ŽsPņÆŊĢnŽ >Īuˇ?ŪëúÖrޝt† ö=:îĖ=yĒš¯#´Õ52ķí0ŨnōéŋxqūׯķÕč'‰Ŧõ•XķäŨw…_÷Oį]x|LfŦŪĻh¸ģ›ˆéAfn3ššf•ąĐV•ļŸ_3|Íī[N¤cš„¤eĮ‡Ë.:Dæ´î•TpŦÉ95šŸ6Ĩ¸(čD@LÁĢ 7AVáͤ|1SŠnIn -ėf…'ĩ8ĒŽĩ­%ąÜ81îj­íŒ°¯šTöíJ3M„ ŌšKåpi´ĢÁÍkc>ap)á*|q‰Ę9piā¨,Įč+7$ˇ4Qoc?rŽœšxqMž!ĨT’4+bŽĘ×"îö¸“KŽôŠž´ėsKǍÍ.Ĩäp*ÍŊ„“ƒˇ´œ’@ĸؘx ԛK•|›ąÜU3g #åëIN/fSƒD4ā YKFÜĒTäšÔ:9`6õīS*‘ŽåF ™Æ[ą§´ Hâļ#Ķ“‚–HG—ŸļWĐŋf튑9ę*o$Ž‚¯lPr#KÚ\9,fțO5MĮWŨ&˜'Jĩ"\JÂĒEgĖø>Ôōj$4õbŅH˙1ė*Į֖BOZn8ÍmdbŨÅI œƒR™Ų¸ÍWÆ -SHWe‘.qëNyČ Ŧ95 _“‘R↤ɑŨĪ|TūQEČëDaR>Õ jĘOąŦWr 3Œ(rB…ĪžŪĸĢČXškQ=šeÅ Gn§DŖŠĢ‘ĶrļÂQžå5ˇ`~n)<ŦąĀĢo*õÅ0•‘@aB“Š´@Ē8=že;ĪOJ…zv#Lc\ ėŠ]ŲyME,ȇhäÕFģ&Ķ֒Ú#pųbvŽĩŸŗļ˛+žú"s<Î2¤íĪ$ ą(ˆLÜzzŠœUÚÅC*/áQĖž–.ÍjLķ$¸ _֟$6ŅbŦųÆj’|§Ššæ@ ÅCVؤîJ—Öĸ1„įĻ1ŌĢ^MĒĀ˜œŽ;TĢm<¨Ģ)i`XgëPœ"îU¤ô0 eėi i8'Úēf *?ąÄ‡(€UŦD{ė™Ė42EvBŠ8SČā×]sËFŲŦ)tŊ¯…bF:û×MéīĄJMld‘M"ŦKĘžÔ‘De•PpIë]\Ú\æļļ Å&ßjęSOˆ@b‘ëQ:(ä #‚ÅDÛęėæĖl;ʑãdûĘF}k¨xŒČ÷Ē7#!Ī”ãˆģØ#ĶR”Ëí^jVŗaîs[ķ%šŠ‹{)1NĮ4˜Ē$LRRŅLÅ&)h ¤"–Đ!„SHŠĻ‘@MÅJE7i¤3;“Ųrģgūū<–‰6aŅׂ+> U/7@cSpw•ģ<}}jØI-˜›gÜŖŦLxü=+ĮUŧĪE[ õš{c‰ĐÉ÷Ôr>ĸĻ’ {č7#qōē˙ ĸČį;“ē7_ūŊRib/q-“š‡ Âļ:ƒD—p3tũRXoä´ydē*ų-€š̐.›m— rŪTŽNŌI1žOá€åT'ŋf&]6(–ęG%š%Č*8 ÉįŠMGėšŒ6‚ ą#ēÂūZ˜ĘÜį¨>•ÍíeĢĨŠyŖ‰eŠAwlÃ*ęA8ú÷§­¯ūxÛlĢŨ~VZÁđļĢsšmî´×ˇ†Ũŧĩ!NG~AëõŧëgržlraÕKN¸Ž†ŌC6îÔbtķâūú˜}Gzh†Ūį÷֒ųrw)üˆ˙­kŦĄbĮt`í.FÖ_¨=jÎĢa<†åŪMßģh“fŅé’yũjTöØv5šáã/Ą ŸķŅGâ;P–Ė‹æØN g„åOøW5sâų0Æ„ã™sŸķôŦ§Ôõ;´mŽÉ~mŸ*ū=¨s 3˛ŸRąD&ņ–PôVįۏĮ“qâčã‰Ŗ†39ū˜cP:×1å+ŧŪczF7ΧķĢPŲO&<›P™ū9>cúņúVRŽ–ėŌ4¤Įž­Š]+Ŧĸˆœ˛Â6¨úŸņĒ~@fĖŗî>‘üįķéúÖēh2ÎC\\–Ûü9ā}; ¸ŗôÄ ícø˜Ž:å–)-Žˆáû™iŗIƒ °ûōœ˙€ūum´‡XÁ¸˜ŋ?uzàüŠŗøŽÚ'ŪŸ9?*ŸĪŸŌŗįņ ßjŅÂŌyK3)HámÜxžØî=kžujHÚ4ákĨŌápĒąŨx<zĄy§Üظv¨äHŊG×ükvâŪĘŌD™`eœđZ)X1ųČ5eŦ‹éfŠæ'B™;Ā%vį‚OoÆĻ'z:šT„%Ŗ,Ųx×[´EC{Ŋ{3 Īšüëǰņ–š:ŽÛ{ŧŽ;DĮé×5ÅŨé;ŗ%Ž<•ėk>ŪæâÆl(*Ųæ'ä7ųü뾎&38jáÜQ›ÅŌECJē…QWņ⤃Åzô‹‰í›ū›[ēĪŽGņÔAšd“§ŲŽ[“ūã÷úkF8müÜ[?ŲĻ?ōíršVúõŽkē5%ŅœÎš;M?SĐæUōĩ+Gvä0ųÚCą•‡ĒšōËí>Æāíŋŗû,Ŋ¤ ž3ūįQCĸĮbV@n.Ģ=”͡ņPÆĄķ7Ģ)$\Ęíõǎxš3÷†+ÍūŅâ pfĶĩŠn î¤,˜úƒĪëVėŧGâ"°°ŧÚ9EFŽOÄ•ēwĒ:8ôš~ã´¯Ž´öԊĮœøü+/ˆ‰<ģŊ pã‚!‘XūG´GŽt‡„´Z“ÚhHūY­ūŗ#/cNŨQ(pāŌÉ!ķĪjʋ\Ōo\ĩŽĢfÎßÁæ€*˛d`Øbû@ä´ã'{’ß.„%ĀrOZEųÛĐSˆFlÕëk҇#īt­œ”UŲ 7دˆN=jAg—#ō­¸-ļ ~5‹ûŨ¸Ú:fšũŊŨ‘ˇ˛˛ÔŠ&Ø)ÍiF‘…•˛Š’IÅ[HQ +“OФcap¸`9ĒŠnĢ&ėgëV LĮzÍ7ЧaÛx%FjÂôĻdžŠj‚ įŠ—¨Į9 }jžÅ”ín•;Œ¯Z‰x9Ļ„Č%´ 8nj/ “ƒW&”`ThU”zįŊhĨ+Ōš“0ÚĮŽ*ģ?5Ĩyåî*ãž*ĩ˛#œ°é]1—ģsG[•c„Ē÷KëŒÖęˆÔ ĨVēōŨ~l:S]vŠčaÆs@lVqĮJi֎PfÜsIF)EP‡§5=6“–8ö¨4´šˈWëKŧœĶbj‚zŌĘT+-.iĒ@n*/3Ú­[ØyęļíVSMŒ8āņīRįBr3s"Œí })ĸF95š:,j(*j”ɨU\(ĨŠôŠĩÔŖæ9Šalļ*'MŽGjḭtkC-SÔ˛de|b“2;p¤‘Î1V-Į˜Á@Ö´6Ë@$ÖĒĄĐŪ4Üē˜ikq4~bFY}E_ąˇ‘"%=+CË ˜Å0€Ö2ŦäŦiJ.āT–<ÕY1ž)Ōš=ęģ9Í(ŎLx<ÔČõT?5*šĻ‰Lŋ -Wã\ šĖ…ųÅ_YH\ĩ7‹'Üj$įŒūöl.jŦ’`ÔF%69dÉĒrųŸuæõ5gÍ@Ŗw9šÕ;õ3IKÎå˜ĶRÎ;YNŪsëÚĩLŒz€*9cVģ֊´žėgƒcÜZI$Ü €JS9ü*ŧ˛4™Āâ… °r˛&i¸Čũ~ŋZMŌÖÉÉ29•Æ>b6Ÿ§­CĢ\]3Z\ØÂÍ,LDŅÁØGQØŌčōZŪŲ°ërvĘۜe…xqiNéŽû›’Áou$Œâé|Ö|ElĮ!QLKœ0ķölV}ô×@I4 Ú~mPsßķ˙žátë;8 š™nn ÜĘCa—''§jR–ŊmĖëm2á.o51}2Ú øE==ĒiЧx˜LŒ"͜‡1’W•Úä×íö%kxä)“Ļ[ŽGõúÖVĩ{w2Fe•¤U ¸pN3ž8ŦXFÜĢT'dv—^#Ķā^e21ūŋã\í׉˜î‘ųAģŒgëœf°,ĸŽyIe˜#`0 ŧõÉū™Ž€i~]ŦŅG~`fķ‰nû¸='ĩ9WV÷™qVÜ͎âövwų‚räāg|ÆŖžČ[˜Ūi„ĻE?7Qœzu÷­Xī uũ§oÍԌĸßsnlķžx=ĮvÚŌÉŽ!]FV!ˆŗt>ߍsĀãõĪęZÖŖĢɋ[y ōÛo.Ą?Ō˛•IÍŲ4ũŸCĨ e§&ķåÆv#ųÖ}ΉmҊÛ#L}q…ũ¸yõ„bH4ŪCū5JKû‰G3l‰Å ŒŸÄËuWCŠžņ%ŪNû”ˇûąõ˙ÄūØStŽĒdmĀ—›‘×ŋ\ŠËTCÎw}iÄc ­cN1!ļÍ-\]ŦQJ ō­\’#H#ŋ`E[ŅlØę0ÎeYcWE`[vcū=Š‹­^?‡­´Š&c§­Ædņ ŸįųTŪB¯îúėb™ĮĄÅü­l(§rũjõīΙƒĄ+„8éW Ėļļ‰ڔÃz›ĨT|Ŗ} gę5崖˛Iđf¸Áøu}kbč.‹i:Ü$'í1 Ee8=+9EF*ÕNģ’[ę7zLí Ŧ’Ûųg/Ŗ¯ļc­Û–Œ†#¨čËõĀ>§<’,ŌI$“cîÛˇŪü?*ŲŅnŦæ–f•æŠčDŪAˆāīíŸQíQ*]v5ŒėĩÔĶšĶįļg,¤đũĮÖˇ,â€)Ŋ§šĸD|˙ŠŧL¯ü˙ĪŌ ŸIļYˇ#Ma1˙ό¨~Œ¤~ĩ ­ģ÷QMģūŽĮ?˙õĶCI‰]­Oüņ¸ĸ?CÛô DĨõšu;¸˜ũĶ9Įø1ÎŽCâ_ŲIš–Îx3÷Ú˧ĨE˙ü2ÉiģûŖĖ…ŋßįšNb]āÕŋå­ŋĪ}W˙×I¤÷ XíėĒy¯ĨÔ[ •dđy(ÜNV.Í6áQA“%Cö‘ŒP’äæļQ˛ąģ5•ĀĻîÉĒąą~õ)qæąåąĨÉ 8 UwĢ`ŌũĨqīMܒš¤­š-ßb%Í4MĩzĶ.*’ Q23đŊkĸ0MšY’lĘhY6M˛IIųŗÍA=ą‹%NWĩZq؆žâĩÁ W–bĘyĻá˜ņíPļîųÅk#9IŒ¤4⤜’jīöMז(-FßK’Aen˛5ÄeˊæBĮŽNzōrzW)%ŧ–öĖ׈Š(]æ6l?=?ũU^ęōe˛I–4É]¨ĀUzũūĩķ*¤Ķ˛;ėÍ-GÅ71D–ŌY•@ ģ Į8Á5FÎū÷Ī '#…ØB•éß9÷éT!Š-Iū|ƒœ™X¨ī:ĶL­ev fœ3ÅS•Õžæ–{u;[Iînā‘Ãį¨o1P@9Ry÷ÁĻÚéģæešUŒƒ„æĢxzęf+ ķҘy@ä+įŒLg?…G¨,ökY­ōB%h8įĶį\“‹ŌÂVVŌæė¯mg5ĪīvĻ" ė œzõ¨›QŠķã\ ŧpF?Õā`˙N™Ŧæģ+‰.ĸģÞ0ŋÆ9 ŒdŒôÎ;V+ŪÛŨIö¸Ą–2 üÃ=Ēy[vļ…ûI^륚oĶßEá†Ü3ížIb Î?ˆ~§{ky iÚ#“~ņ •ץaÛ=ŊĢ&ÎK­ū+Ļ™6Ë)ōĨ-šëÖŗ¤ŧ{Ëģ‹ĸ6ŧ¤ÉÉ-ŽMZÕZ;ۜŊĶFĘHš×í“ܨ+.É `UŪGx–æ&,° Ž*´6`žãëW$‘‰2|˛HÜXqŽ´(Ĩ.fΞX¨Ųu0^Í×OK¯1 É#F˜m I#Ķæ‘ĒĀWa˛Ö+O&Κ¤••†zãžĩ‰ĸC&­zLmp•FH?tķ]MĨ¤ÚpLŦÛXˇŸö}ErŪTĨîŋ‘ĐāĒGŪ-éž&ÚÛYŒŨ[ôYĮ2/øū<×_jÍ5ŋ™ĻŨÅ}kŪ)#Û=Gã\ÖBí|ûr7“ŽCU.n´Û Ņ;Á(=Ā?C]ôqJZ=Δ6Øô•ō§Č–M:äžc“î1ūGųŌ\ Ž õąĮK›|ņøGášĮĶ`3õĒĒFiÆCڎ^ˆwî[Yáx#H…0VŠ+dR4„ũ*y.>bėH>ėc>ĸ¤–Ū6MŦŋ\U(Ļ(⊴&Üy5RL¨´Đë{[xg4>˜Õü09*Ŧ$;€HsVԒTKČP* ˜iĒ×Ņ tíĢ)ˆÕ{Sˇ t¤‘ũę=Õ[’ 'j äqFC;ļ­=ē U˜ĸgč3M‚-–#éWUxŗœíĸ.}HŲ„Q•ĮÍTĖÛO*ėÉšIęÆĒG#$ū ãÔrOĄL r yœãÍ3ÅÕŗÎ+KċH„6âz\OSG؈Ą`$ōqI´Æ“6×íTÚ OVĖ6HܓŸjŽ{TA…b”j¤ė‡*męfÕFM.õ_áĸr"b WiäŨ+™6‘1˜g§ŠĒ[&˜OĨRåŸ4 ‰åÍE“HMW*'™‡˜E1˜ą§u ŠZŠ>´c5(AOH~o›§ĩČY[mĢn˜ųsQũœ˙‘KČĪ^æK™Úye2H˙x–äÕŠą Ŋĩ˜á“;_Ė„•ĀĄ ž{vŦĻō­Äo$ ž{ú{}iˇwPÜ<Ō‚ÅŲōŧäéĪZų•ĮŦÜ[Ņm­æ›3<ŧÃq(ØĶB<•įԂ8ĪÔ7ēF‡Ū*…;ĸLĄÎîÜåG§|ÖfŸ$cšxîÄJåcƒƒ¸ƒ‘žģ˜âŸ˜ŲUōH?ąĻē‘sH´—ऀ +yyųA `öšŌÕuH/üŠEųhÄ[Z'$Щ댏^™íUĸ¸1Y›˙&5gUgŒ•bôh'JÁÔoîŽ ˙•%!ļŒAčzĄÜnŽz’AzL÷K+œƒcÎ>ŋ•^Ōm§ÔįHāhՙ€ũë'Ģ\p§úV•ŨãI"̈â Ęãø3œųī4;-îÚâ!­Į—ž(]đ8îrOįRŌŽĨIF:ŗ‘ÔîtæÖm]-nbˇ‰G˜ ˜AĐTrŊÕåíĐZŽŨûv û  ?]¯b‘\GÛbA_xä’zúí+U'´–ÆP-Ļ™Y6“I#éSĪ éÎÚ-Įézb\iĸâi‰ r?Î*ŦēÂØąŗ€Ë’á×8,hÁ}zļøP¤D¤FĒ9.Nw×Ú°^Ųî5VYČ &~`Aųˆā~xâĸ?ŧ•¤vÎËF=5 s˙-ķŠãš‰Į?:Š$Ö7)i*Aw#šŌmīΚ5‘ĨŒ) ŋÂ3ÉüŊ=k`ꗖ6Öæ4XÖæ3} x÷õôŽSÃڜ‚ú;A+$N]ËJš?˜^õzõ.aļŠ8ĪžÆBaÄąÎI8ĪQŽŪõœ“Øá­''rĩˇ_>Ü*˛šÆ8~TšO•§ųëg/* Ú{|øÁ5›5ĖÂíĀÛntQŧÄäqžŲĨjF|¤ˇ7y)o$ũ7Î9žpĻ”–†ļ&ēļ-ũŦšÛ›”,Ņ)ą/¯‘_åY珗R†ŪĖdåŖ^˙œV­ĨøŧØå0A(ÚD ËūĐô÷Ē:ώdvÛÃ":!88'oОŨ))ĘöHˆ8Ũha`>Y#?^*ė˕(@ĜZŪą‘ĩ+”ĩŗVšwÎØã]Äādđ=…G+à Œ&pII´į—Sŗ‘ Ō¯?ą$œO ų˙t)$ū4ËŨY¯UĐ 6ãŠģqc& ^îĘÖFˇ%ąĪN+ābVšŠ“æęj¤ųRfΕŠ\Y>-Üė€ãšS¤Ū¨J¤v:ĢŦÜđdąEjéž!ōöG|­4JpŗĄÄ‘ū=˙}ë>ßZŨļ;ãō˙ĪuãÜUË­&)Ghã 2ä0̧ˆ”4™•J–ąÜí ŧk‹a"4zŠīŅ×˙¯õ§B¨IūÎē1?So(ĮčĨqÖ!˛Ô>ĮچĄ$žVÕUh>į>ĩÚÍ5ŧŸ&Ĩja~ŌÆ2ŋ_Qú׊ÍÎŦė6c}˛ļ”tš<ãôäTŒŗŦ@ʉ{nz:ãv>Ŋ .˸Ŗ ‰{lzrqėũuB“6“ŊÁëđ˙#L‘`Á;lnyīm8ū‡úRf8å%„–Ÿã^QžŋũqEĮnŖi˙mĸŽ?¤O´w[Ė—ļ˙Üs’=ŗ×ķ cfGâK˜7ŽĢsmÁúņũ)éãĩąFžÕšæíÅ4ŨĻ85•¸úŌ†õ4{՚-{ōņšŽ×,j ųâŦE|håŒwg"-Ī#aFML-.>\gÖ´"Ž8“å>´˙3­fęŋ˛5Ô ļn¯Œä÷ŖĘu~Gâ*Č|ƒķR™ąG;ęĢ û~\L1Æ*ŦlĒÛO"Ž#Č5Ī=ÍbFņļîj&VOŊÅ]’k6Y 1Į­ģŦ‰éÍ([‘Q¤Œ§ŒûŌ4™$ĩU™7!đBO kĘŦzņL3 Z(’Øá!GČlcž 6iĖŦIûž•™É4ÅÜĮMZŠÜ‹ô!ģ>f:U#Z’[’œ‚*‹Ãˇ$Vôä­c‘wš&)ûh`kK™ØŽŒĐh4Än§Å3ŋ4 MÛOjŒ`+!Ũ ŲäŌî>ĻĸÜzQ“ëEƒ˜ųĨ‰•~éāûÔEēŠ<đ?‚œŗ+‚@õ†؟ĩE9}Ņ™@ }^}}+[ÍoŠë÷7ĖˁŪc{–ēwĪ‚ŗ’ē܉ĨŧMI$Ô5]..‚GíˆæŲ… Į^1ĪŊ­Ĩ­œQ‘8ēži –8ĮÉåÁ8į'ŋ?ãRÉ0ŽŨÚF%¤c…Švžž„ ŸQY{‹IĨEmđ‚–p>^p1Øb˛QÖŨ ĩŽ ¨—&+yŒŠ ļF…›¯°>Ã8î+6;25Ģv™­Ėę#cŒŽĨkÁus#4˛FĐēîǐzƒĶĶ ~U Is¤ępÜ^ėG—‰p.„û{UŌŅ*ŗ“ē)ę:-Ŧ ‚ĘYEh÷‘¸į=qͧĨAoĻČ—Š ĀĢȤÚXÆ3÷ąÁ5cûRK™ŸPēPe’BbŒũņíú~tã$÷ĸc:‰_ėČ\z ;É"=ĨEŖ(GĻ>áy¨ģ’7VĀgū˙UhxwBŽ÷PaÁˇ|Ų#ļ]Ō:˙ŗøãķĒRË}yul6w‹Ŋu:ĶØ_!oŨČŧ\į$Aöāpi)IjʕW¯Qm´­>+éo´t¸ō$V[O?œüŦ1ÜO>õ9‚<‘•ŠA'˙×R5åíÕô׌‚”†\Œdôų=ŽęHŦ!Š9Ę4r.ōŊH?ŨĮlgõŦgihĖį'"õׅnõ-ûD%ŧQ(ˇl„e qōž§ąĮ9­K›ĻøVŨ§Ž;Ēí¸VŨÉÉPF:rEqŋnš-Énīr¨ßį“Áė}hÔî]ôø"‚úv#æ1Ÿ”+c‘øįVÛŲhewŗjRi:}Ōė Ę$p€ŒcĻ<ž+—HlžĘF,ër1Ų :F8­k9žæ{k;ųfg˜‰pņĮ¸äķ×süĢsFGĶú°G˙žN3ZPK"[ŨDFD,áøüō+Å Č>ņ'ꚤßꑟø*ÕR\훭üŨÄÉapˆŸū?ãOX(ûu¨•:‰āëõĮøW‹G{4CÉ*Ÿģ™‡õĢÖū$Õ­°!Ô¯”€MęĐņMTbå=u ˛F|‰cŋ€uŽOžŋQøĶatVōí§kw=mŽFTûߕygü%ÚŽāÆņ<ÁŅĖX~+Š×˙…‡{4{.ėôûŒdnBš~ĐV;ļ ¤Č˛ØLzē|Ҏ×˙Ž)d\m–hsũÛĢCũ?ÃōŽ*ßâ°áE0äf#8‘q퐭ņļŒÉ z…‹žŋģ §ę3ĪåOŽ”ƒpģņę/;ãų%O¯ųŅ‹‘Ynq˙,Ļ%CßõŦ(eĐŊ€6N1V–qŠÂ:šwÚYiJÁUą´ĶƒÆqUÛØŠË7LOZO´ˇ­5E uni—ōÁ%˛M@Ķæ¨›‚z“Lķ Z§Ü—PŊŧ1ĢėČāf˛„RĮpTäŅ(>€ĻjļÆí@tA‘Y˙lãŠŽ˜Ô*M•ír[ŲĒ’Éšp*rzšizÖ4ėfę\E3Ĩ‰Ļ“ZŖ&ÐņIILAš(¤ ĸŠ\P!(ĨâŽ(ōčĪŒäTök—qPFs"ũj͙ÄŦ=kĀ–Į¯OâEĨ_”ЇmcĖ{ÃdwéUŠ‘X#Ĩ“é—ŌiZĩĩô<´.QÜ~YŲęK§é˙nˇO(Å>ÉmJ¯1ĢaüWõŽœžž•Ų,Q]xjÂô¨œÚ1ļ˜}ŨˍĘO<’ö§-baUirÅÆ„ĻÖÆõ¯`•î™aXV<(-Ķ$ãŒg<i/´ŖŖO-˛„ķØ`Žī•ƒgæPz`žpŨž`akĸ6ŋ rF?,õūF´´ØĻ‘Ú'!Ū>0ޜã$t¨ŧ­c•čĢ=[LKgÄSŲHwy§–ž8돯|×>ļķŖ o‘¤Ũ˨ôõ­gB.ųO1DXųKzū*+*Qä!yvüĘ:ŸOūŊL—pž—uw=¤1–;Ápdg‘‹|¸:œš–C°LČCˇ|͸˛îõÃ:ũĻ[]Å7ÍŌ(ōōĢ"šÎ;÷äĶô‹¸,´Č§hén‚´Ŧ~WãķükHĢ+ŖXTŧomLÛ; õÍBŌŌÜ/Ÿ1ōŅXí åĐÔņčŗŲx™ôۉ”Į$Ę˙)\g9÷­hŨÅ;j–/$ ;ŪËąX>Ũ›ˆ#zœô­‡Ōė!Au3ļŦ—"Iŧ¯õKžœ ‚ü}*[fŽĨօīŪ Isk 1Ę2ä`öúšŊЎ*˛°.I]!ëõ ZŸû"]GZHā-${ųXRbÉ ûįšÄŧ…,5 m ¸–H•‡ŲĖĮ$Ąú~•ĖåĐŅūЖaö¨QJí,\ØzûūÛģiŽ4׸xŧ›ģwųĮ–:d“Œđ=ę;IÚ,Ēm—Ę€áWûŲĮQ×§<õŠĻ¸K…—•c˜É&š&NžĒqÅg]]´´qÄ!Œ/$㜓ëR-Á–Hį‚Ž‡aÁõĀŊ8ĢkM qаŌvŠ(ös&øŽ>\cë×=ųâ™Ĩ aqtg>`eÐė?ô,ũ)—÷q\,1.$ ģfŅ“œķ뚆 „XŌ+˜ÂH3îR7(?øBOŠŦ`ŪŦŽúW‘d¸Ž(‚;pЎ—%Œq2p‚˜áwãüiŌËq¨MlŗĄ €ˆ˛ƒsÛĻG¯\YįHŠo´DíĐÆ3¸c¯ĩKÚÆ´%[Ė‹V: °Áörë"FrŒKVôü+ž¸šēŲžB7Ū8§°<–7 uåųĘXņä°|˙Ÿ|Vގcs§^›kbĘÛ|ÖëķIęxũkUK&÷´Šzģœüw71ɉ3–‡îsˇéQ\ŗ\Ü<ōžFÜØã“íKįcøāiË(g SīqÖ´äiŪÃN ¯å`änČĨ1ˇ÷åW E2Į8…–rHúŠ.ŪÅ´–å1 ã¨<͚9s>ĩ;ŲÁY;Š˜=?:`’(tSųŌ™$\}ņôĢrdc¯­(@TuĨpˇ™P]ĖŊ˙”j¤¸†Ē>qųp’AĶpühŧģ‹–=‹žī1į4Ō_ĄU?đ Ž.f\üí×Ŋ<ŨˎXÂ̚Bäƒ%WØr# }Tjâk7ŅŽÕŊŊUô’?*Îûcåv§5rÅöú+r›LˇpįųŸTK„{š°øŋW‚%Ž=BO-FI¸ĮãÍOoã]RŪPęöÎYLlĄž W=+Û}ŽXbÜęŒ@p8oz‘ô鍔—K‚y#øĪ>´FWvčcÍÍsAĨŅ7Ė‘X•P§МõįUë {ļŊŋÚ!ŧw–ķ~V9QŽGŠįÎ­kwëoĢËäÁļ’Ũ3.x8=ēråíU…ÅĎx ė0šŽ};f•ôąÍvôa>§uco&’CģĖNpÄAāŒ˙…Vid“ËŽę!æ$…&ÜzļF?•T†yėošvfęy ôÜ´ŋŗžÔŦג´RņHz1ä“ëלP•ģ ‡Ãūr,­$%°Ø@Ā÷ęGô¨m¯/ôčūÍ ;Ėŗ‰6c‰ôĀĻ\yr-ŗĄIcR„O-Xß¯ž*YĄķ-āv˜Į /Ąš8#°Áú*´ßV(ˇmΚz@ŧ_ؐÜNąp1ģ‘×zō+/šĖ¤–Č‚âŪ=Î3æĐõį§5JëÎ¸ŌÃ3Eqäe鐠sžš? ¯§Ûŧ“G$‘sûĮáØw\szĪ•ęVɅ¤WãS{é%–Ú!•Jž<qŽžÕǝnåZåfķĻ֐^%Nœž9Į8éžĩŨä÷0ÆĶ´8%Z7__ëÅ7bîyLˆŅˆÆüđ  äū‚n’{ŧēƒÍBcrŖe@QĮnzŠV¸q¸Ī#âRl“ŽŅÔgš–Úŗ–aé,I!c€C€H㯃øÖH’+AdFÜ ÅwuČ'ĩ(Åmrz’ŪßnÃonČŅ )* ¸īĶĶ­J–v÷ew+\†9;°į*G¯CIũ­uĩYíŨ”Æėšāwõ9ãÛŌ­‰áˇˇ„Ā6°‰U'ԜŽšééøŅ˛ĐŌ7ؤą%ĘG(2Ü@1c$Ÿ_§¯ZŽÛL¸Ŋíę;DΏą<ŋNyëÖ¯ÛKoĒ܁<ˆĻL4Å7”P8Ī žxéųÔí {›[;V–8@‘˜oúã§?Ëĩ+ŋ™~ŌD—SÍk œ LcqbyŽŨ1ͧ&˛ĩ‰\ÚåQ—æÛŽÃü+r(§ēE¸šB^$ų^¸=ŗlfŖļŨ&ûC~䑕QžAÎ[ĶüæĸNīĄĒœcMĨē9Ģ;yáũü˛qČnãč>”ˇÚ€ß„w•:í—Ļ~ƒŠ×{Šæ{™mŌ{4ûęvôúõíÔņõŦûß _}õ("gĩX–gÜ0QXœwä`ŸzîįMŨ˜heŨ\ۙm—lNĢæŨųqM’Ī $K$ ĒI^IĒ{K8AԜs]&šáš|9ĢZY=Ė7NҤĨ 99ãôĄŲirŖē!uũ×>†ŦeÄFH$Ö70ÛŦ“EåĢ‚WqĮ;ˆė2FįûČŲXY-QĻ'ŖE6Ō킃=iiPMnŽY#5Šga}ŠČŅXÛK;㐋œ}OoƤļļ—M´”Ūۑ€a(ÃæV Éöû¤gŪēeʞ§:l¯§øsN¸ŠíŽog‰ãtA" ûœņÚą­ŦÛ&Y%)åÆYi>aČöã'>ÕĐ˙jnĩ–ßėņøÚTr¸ô&°-/&´ÕœÄW`à ÷ŽjŅ’M¤\ēšÖA!ˆ˛Į#ķY]¯ņøŠ´ŋ, û˙JąæÚ¯N2…ŲuĻã#$Åtލ$ûPRäu€ūF´šˆįąŠÄ€VŸWƒ#ÚČÒVŒ|ņ‘íR´rúg.˛Á„dßÔTĀ~éAūírՂŒŦŽŠRrNæ{2˛đĨ<<}Î>ĸ´8Éû‹ųT/ y¨6Œæē[sˆe_ŨäÃŸz6ĢtaųÕÃmė:Ĩ<;/aQБYÔÃ8+܏׿v°Ų"Uܓ0<ŠØd. _ˇšĩƒMxš6ĀîŨøÖ0kŠĨD÷F ĒšŒŠãÔß=ē´ąąW pGnÕ^4ds&̓$ūøÖkŌrvĮč)ؔôŗC d…ŧ‡°­¸íu H"Oû‹tGķúՍ3KŽDÃhlü¤Œ˙žkNacz3É=Oč)7ÕTŸCĢđ<–ētl\*•Ú„žų­z בhΞâ-ŋ1f F=ë×!‘&‰dŒåXdô0U+‹9fē’qHhŖÚ@RĐ—4îR`ԙqéMÍJc°ÍĻ´đhÍ;ŠČn(Å.hÅ .)GŌ”Ņp°Ō)1NÅQp°Ũ´m§’)Ĩ¨ģ !6â—Ĩ&i(Ų÷4ĶFi( ‰Š1KE1”õ\ũi´ âË  Vˇ.Đgn>´žaë7ˌŌ/ ži<ÕÛTYÉęiģŊčöcö…ˇ‘OQö–ãĨ!cMÍiØÎR¸ŧQŠLҚĸEŖ"›ÍėJLŠJ9 BņIŤÅ.yĻæƒILÍ%PfŒĶļ7÷MŒƒÍ+…˜ÜŅS}ģS|‰=įG2+•Ÿ,Ųūęõ7–MŦ =æē+äĶĨšŪm2=§aYÔüŲČ8÷įۊįĻ{‹™üéŨĨ~ælœVΊ+q¨'R~W¯ zFėīNÍ69PäƒÁŠe´‰ã´ÆC4„ŦÛđXˇËƒéƒÍjÛ:[Î׏'˜âBŪT‘īŨzūy΍›u+4$Iåŗ(,zuzįŊö7uéĄ>Ÿ8{ąawn˛Éš`ˆņ„mā'ž#>õ­,Áyr÷ %š‰J3…UQĶk.OęSYPkrDĒđ[Ũl-´}ėzžŧš_ļI/™*œšå~lāw˙ę¤ôŲōošÛz”nÖˇ–-ĘĻ䝐d䁌Ķ98?_J#ōiÍĐhĄÂ—ōš8cŽ{ÕDx"˛yŽÚcrčĖ€SÛ<äuኍŌJŦāDdä؁G¨==ųĒÖæ}Kĸņ—Sš1yaåąÉę?„sūx¨ĨēmA-ŧé[Ž€ €ã8íéT´ģy’čŗH|”98n]ąĀÁĪ9öĮzĐŧb"YLi´ü§zYąÜޤûŅ'kjŨw+ŠŌk`JyÅFFC(ÆãĪëéZßosKYDVī'Ž œ={ƒĮVfŸ R$ĪlȤ˛ĘCî¸ĀãķĢąZa+ÂdÆû2@$“œgí `ᎭSB[ØI¤KhĨYyi\ē’ŠĪãPÛy ’W#p]ã$'8ü…Iį[5ŧV‚0n$frŸ(=Ôã5VIä˙DÂ2d†õ÷ĮŌĄęKē$";;´T¸[Čä<’3Ķ^júę˧Ü;8 [´{CdĘqœįž:{ķXÉbO*ģ|É˓ŽOCĪQW,Ž%›J¸’EˆÅÕ ÃÄãōëųRĩõMw‹¤‘Žûi÷Áļ7QĄ*~•š$‰´ņ•cqŋŠ‘ë@3ÍæyŠ‹ķ# ‚ÃÚ¯i–ÚlĐ\ĮxĪæŽ8Éî§ŋ­+ėÕČĻ‚ÚÚÕdķĨ’O8,* žį?Ĩ>Ū'ōq–ÜwÅ;ėw+ „‚yūÎí#…ĪŋŸķĢ–ļ &ˆēœˇNdyAaÛ“íÁĨ2Ķ[„6ōÉØZˇœfuo1I!'ƒčzÖģZÜĮĨK`€ŠĩČĘΠí$ãŽü`ûÖnœōYëũˆųĸcŸ1†2 9ĪøũjŪĨ¨ŋ’äŽlĒy›r¤ĒŽŊãXÉßBZėAŪ¤ōĩ¤13÷ˇģíÍE6Ēī}ąí MsąĘÜsœō8õĢ:œŸÚÅg‰0äÚāŽ Î:Ž;UK™ †yīt÷¸Úld+郏äGĨTcŌԗŽĻ‚i˛Á6ēŧw2O4ÆĶ‘ĪāvįÖĒj–÷×SéōNmĸv’6Á… Gläy¤ĶM¤W/6Ąg-Š–3˛V'͍ŊkëPĮ Ҍbyücŋjš^RŅØ/2ģ ¤ûŪfB9õīŒq×ōĢPjm¨jMuąã$ųԘĪŗ×oŒ‘ÚŠxRæ ?Xû]ÄĖ#™Dtĩmí/W^–âp&s"¨ ķ#HÆFjÚQÕßąĒml%îĄutŒf ¤r žžĻĒxvúŌ/ˇ-ä <ŌGäÛ.ÜĒ3d3ŸuŠÖÔ 7Ĩæŗ"į*"ÌúöĮžkŸ€î“ė‘Ã%ĸĘ w™ûYĮL¯ZΎ‘vĐŌvqZXęü?ĢËáģK´û`s!`Ž6Ļ3ˇŸĮĩfßøŽíėŽbGģŪ9–01lļ[¸#?§ĨE­é–ļYŗî-æf;­Ŧ|õž:sé\ŒėCūųUÂŌslÅ$õ4ŪöHd1ãzĶ >fŖzƒüĢ1 Ü2y­.oĄúå[ÎM§sH+IRËy&šˇ°%[ uÅ3Q?č’zÄIŪ0BļŠT*8ÆÅb#yFæ"ęÁ†9Šæ7čՇ|’sÛúŌ­ÛĮ N9ÎkuY˜ōšž hjāģîf˛$œÍlĄēŽõąĪ”1ũĪé\ÕĨv™ĶAhЄáēFåiaeÁŸåUŲ\Œäz†)Ų%Sœ¯^kļUĮĘlŽąŦ˟›Sˇ˙y^†á&‰€P8Ī­gČŲÔ ĮiTÖiÂåRø‹ęŖæŽi ‚ tŠvcu&ĶÂŧĢžĨ´(\ û:ũĪéLĶ‚ˆÆN3Šą:jŖŅ?ĨOáÔO)Ųąœ(­bũÖs֗#L×2…E*  sÛ~SeeiN>lqVF<ĄŽy rxéÖ¨Ü[OGMŦˆ€ž Ô͌oĄÂliq–ŧQ0ß.ĶÍzÍē$pF‘ĢU~•įžĶžÃŠ,bâ•ŗuųpzcˇC^… ‹*åN@ãĻ+ŌÂÒ÷3–¤”šĸŠë&Ãm§…-ÍD:ÔÂ@1ŠOČÃFjBUŊЏ\ņEÂÂqŽ´ÜĐzŌSšĨŨIE(j\Ķihi1ÅŠbŌRŌf€°bŠ( ¤4QšJ(Í ”RRĐAÅPJu!ĸáa1F)sIšw„ÅĨǎ—ŅŲy>aHûrNëüŋ:/mBŜQ\M׌äūÔļā WÆíØÉųˆü21]†ģkzoeFŽ; õedūĖV+.[ÁŖZŠv>]Ũ€Îk*]zĘ 'IßĘhdwqœ2=ĢG4•ØrŗKbĒézž¯hˇĖJ“‚PkGÉã$ĐĒEĢĻŦŽEŠpi•W†â¤ŒĒōG4ĘJ ´,yāC05^Š\ˆŽfN'Ú8Ŗí'>ÔrĄs3åģ˜MĩːîI nT˛ŠÁÆAôĢ–„‹å ‘ÁäTqiŌËm%ÁdHĶ9ŪO4ûoøũčkÆnéŖž svņ3Ëš_ž0yúŌŨÅÜH“ɡk`01ã§õúÔpNö÷ "0p U¸v–w‘Ûs3d“ë\Čéj\úė]ž’ÚäžcFøģ¨Së‚G{ũ;ÅĨÛÍu#¨ YSrãŽį´Û9ã…eÉ Ė…NáÃŌŽŧ¸•ŧ™ļ>ÕUŲ郐ĶúĶVFŅŅ"×Ųö¤ë.ŌŦ›ŧ§¯OL}iĶ`YŊ¤o/›ĩ¤Ûˇ FIúįSØÃövŽęôÅ0™™Xg–P rO§đ‚Û3ŨŨ$QÜĒn/ gŽĶÎ99ãš[íģīĄ–."ŠÚ‹rŪr7Ėŧ#œûƒšˇ=ė*ņĪp6yĨФ!™Æ8ņÎęj˛ØI$ËßŨƎØlŧāôôãņĻ[M 4/XįˆĢD[”|uGųíNɅ“¸ŲŦo"s4ęŅÄęAŽėÛGOįVtĢ…Žy"–U+&wJ:ĢÆ?ĮÚŽ] ‹Ëšno&ķ"pYZ&* ÃĶŽ?Æŗ"… ĖÉ#$LFSnvëŸJ\ÚY“ąW|ą^ģāŅŨž€g˙ Сû4—[nĨōY؆*¸ĪüēU8Ō;Ųž•-Ŗä— 0ČĮ=?Zŋžķ‹$ąČĖl?ŋ>‡“ųv×Aˇr]ĘI&ÅË6äāĮ†ēLâÖRŦ4˜ûíųÖt~J˙ąä$‡ũŸëPÕe&Ŧ™cÂÔFy=Gä+SĖęOĐVúœĀ1˙<˙Ĩ`#—‰ŗč;WDĒ>ʤwúV5z:œØvÜjaБœQ pãäOĘĻķTä``JØåcā”+9ÉqŠX\Éqg?ŧÎ̉-ûŋįSZdˇ `yŖÆ†îŦ8­N‰— ƒÎM4¯ËRŋjimy÷=4Q™ŅTûJ­Ļ:ˆö1<€3W&Z/ĶúT4q˜ŒŽ +€?Īá]ßēÎLQģi,qĻ@cŸ™˛ #ČËvBmHäĩ×øNéUÖŲU€ãÔôę3Įų÷ŽčNŌZŅŲîáČéQƒƒN2Ję~DĻ) éI“NņŌ™œĶMõ°áKĐTo"Fģ™ÕGŠ8Ē­ŠÚĢ…?ė‚iˆģš*ˇÛíŗ3U"Ŧuæ•ĀZJzō) †ŠÚZwŧQÅ”o4´”sKMgXĐŗ°UKMÄÄ•î˜aÍ'$ˇaaô))ˆ(Í”´fS°1ÉĻf—&V^ŗ­Į¤}œ:nķ_œ`Ļ“’Jė,jVfąŦÁ¤ÛošVČDĪŋĩ@Úā›GžōČ)!žqīúŠãīî ķHŌD’BŪ§×=LBQ÷z”ŖsJ?_4ÄĄ vĮĩu:F¤ēŽžˇ|•u8"ŧÆwōāqōįķ?ŌēO^Hˇ“Zō˛<ô ãú×%*ĶSWwEJ*ĮsŽõČxŪR-ãqŗ' dq׸9ëšëË`W¯"ß0[‰#XffgVá†2 āûIî8âŊ)ģEܘîyüSI+ĸo!”ü§=9é[ÚBM”÷*éÂRÜWĒŽČéė P‹öųU6‚u!Oęjk{™­ãXĖ›Fã&Į'ãĶÔ˙ž•ärōĘûž•m­Áká‹A,›žA°ã–Úw|Øúyô¯;Õ/%ē’w•ØH›˛:dÃОdĩ]L—$]y„ŧjŸ(ëŒöĪĖqūŊs’܉&ųŽíųį?\ę>D‘ŨøGZ‡Jû<Ėvē|3ēí 8P?Ū$˙õĪ™ÔW€C|ŅN’,̏à `cëüŊĢÖ4_Gqĩ­ÄžeԘÉ\wÉ˙ĖSÃÖ´š^Äĩc¤nFPc=)YÉĻ’kĶFmĻ5— 4Ķ‹fšj“!Ą))h§q E-…cįíEĨŧ† háŽ;xX!ÚwÜ÷ČÉéQÜiË´ž8ĘåˆÎrŽ8Æ>œūuĄŠĪŸ ŊŦ¨ņFä´˛mmĖy?Ė~BĻą†}BՔ:21,ŽI;G,UF=Įā6Ū¨ëM­Q’ß+ŒÔ)ķ:FkhŲũ•%kØ7‚¸đs×ūǧrŅŌV)Kd  ŽÜ`uŦ–įzǧąVúŌ;fQâcœĒā)ôŋZ–Â;”“ °3Žå ŸķšˆÄ|üβmcƒķV§“nÚâūõÎŪ%3”`ãå>ƒš­ÎyģÆŌÜ´ˇķSzI"$aŽsĀüōĒöZ”V¯ ÚEæ;m}čHIÍM{>Ö+o•“’Ŋ÷.zƒšĢzågŲ+'šØRr§ô횋Ŋ WĪ<°ũĸ‡Ī–ÎŒíl~={JŠ ĨĨé†Ĩ&ã~0A#¯Ôw%šbČ€ŋÉ.å 03ķõ⚊4šĻf[O%š €0rséœVąwEZęæÍÍÃ[éĶØŧh—î(„–<NA8úU+;+Ÿ.I’+ļ…ãx?û#=ēsõúSÛUļg ,”˜ŖeŽRÁÛ#$ŗg#šĩqm[M‘f•ÆÆ`Æ4Îc_ņĒÚĻļēūĒnŽS*Ė'1øbĸ÷{‘i4čdŪíƒÁ÷Šw†—hė+NxíeŨ$käĻ>UÎOĒØØ(&ęîO*ÜũĐ9y?Ũžį¯JIŠ6ĪF„ĸŠŲoԏė,bʐÅķ3ąĀčpŠ>• Ô-¤“ĘŗmåéÎäļ}3Đg׎+FęâŌåāŨē+Xäļ=1ßæĪsŠČž˛”NZ‰Ču*w=}‡Öē)ÉlsÖ~øĶscö'Šō9 Ōn }ņĶZ͚v’DÉEÚr+ŦÕŧ*ˇĶõkkØfģ˜ųsBdŗĪ>ũ9úŠäeFŽå‘ÔĢ#‘UWą’°×cˇŊI ų"?í ŗˇĨ>>#O÷ĢAÄčGzåĻÎ÷uKĐ×+8&wë÷aGŠÕˆčFjYFYOû"Ŗ ÚĨ}ß÷EnsĄ!†EjX˙Įåš÷ŦŦ’ãëZv?ņõmūõ)lʎčŅԔũŽ_ĨsÀōŽ—PæÆ^Ŋ+šŦčü&•ū!ŅũŲ?Ũ¨~cž*Äc‡Ī÷MBOaZ˜–Ą˙RÃũ‘]*ô8˙ëŸôŽjõMôŽ–0 œGžĪéXVŲ}ŲĘô}jĘąúŦĀyžõŪLQūĻĢ}Žæaģí WØí–ß"ôГ#ޤ޴2nۚR쐗?SS*…(Ø=Ģ0]IԑRũĨäOLŌq`š4÷ŠféŋīYY˜ŒĮûĻĨŪÆߟN•%sËpWJ—ō d‚= c‹‰ÆĖŠFŧ‘ŧmúš—jW1ŌÅ} ƒæĘš°[”`GąŽzŨÚEŨ”ÛėsVã—oBxęEJŸb­rÕίgi#FîZEęĢLmbĖXŊØ|ĸpWøēãĨyĢß5ÕԒō 1,3yÍ=n¤–)"-´dŊ2yįC\QMö)Ũßx–ÎŪŅe‰ˇģŒ¨?\Ÿ¨Žn÷Äwk‰Jḍ8ëŌšõŧÜí ’G¨#ü‘ūE[ĩx-Ž–æämÍO-r ā’OŊfęNĻ’cI:ŪļōYZÚJHŽéąũėôü+"9nŖÆäx|öëųĶ5„d–Ņˤ8arH Į'ééYö÷ĻWŽ „…ĪL–O§Z*Fī{…OĐ/×P͇.Ņ-‰îpõ­3\„¯āĩK¸Y’8•†Üž§yīÚēxī­æVe•@SÜâģhOŨQd4XĸŖķcÎ7Ž~´Õš…ähÖhŲ×dž…ts"I¨¤ÎEĀ\×âŲē˛. Gĩ˙žŗúãđŽß"ŧįX¸ŨŠ]ĖWpÜĀwPqĶ?e]ûŽÃŽäļo‹9“Āš,IÁ¯˙\SŽž Ë‹(K´¤o €vŒŸĮ¯Z¯vĐéļŦJŗŪ0 q€z`uúÖ&›ŦnƒDK6āøÜsČöé^lĒ:M¨Ũ\"šYėōĒHqĶ=qū{Vž‰¨KĻĪ#ÛÄ…6ãādéYÚÜæëZi-SËI" SƒĖOį“Œz č48ėL+<Ņyŗŋ–ŒÃœ p3[ēJS÷^„š+ju÷ ƒF[Íš‘ãʧĢc$~?•yíä°Īc+ŧÍ §rĒ‘‘ōœ¨ČčyÅhø†ōíĄ†ļTLm2PôĪÔî ú×==ĢÉ “2ĄÔā7BãÛ§^†´Ģ9FĐÜ •ŽUŠ5‹P(fT ĘZd9!ļdđO'>øŠįšˇ[ €BŗM!ÁoëŒÕ;å–›yKHŌgy,ŧŠëŸ|õĄĸ#FÜäķķ¸ŸŠãš5ÎågîŖORŊIf”rˆ؀œđ;UfŲ,Š€wuâŽ<ŽĶŗĮ#ÄUB€@1úäfĢ\ĘIiv,NHĮ>ĩ‹Hd.’$Ę>\('ļ+ŧđ6›-ÅâßL;t Į‘#ĀLvúW IĪ$_6=Eoé×7bk7žYŖ†ŪÆvUĮ3NĻŅ2ŊŽãÅ~!6Vr[ÛšžÃ'|û×?áN÷ŸfŧœŊą˙–’šë\īŠĩŲ5‹ôōãHŪ1ĩOĘ˙įķŽ}.ÎeH•NO#ļO§9ފõ\šä{ŖĄôB°t §!†EÉxs\šžŲ~ĐņãķČŨČƒüâēļ>~čŽúRįŠf-¤]¤ĒŸmĮTü(ŧSü&´ŗ ĸÕ%U7Ŧ:GIöáŪ3Ÿ­at|ų¨Nō$P4aåŒŪXĘōIĪãŸåWl/ Ĩ–čŨĸ™>_/%HŨƒ{ũŌ;vëQ@ŅG ęŽß7V`7{güjä?liŌQkĢnÂFMÐ1ķyĮáŪŧĩ™×åb(ퟸúu yÁĢkĒŧļįå# ãũŸAūqSFn/4čáŪ-܅xŨƒŒäõšH$mJ$,K3Ē0aW'OĐŨÛŗŪM Áå\ŠGÎNãëÚŠ­ũė6“XŨ”š”„ū#Į?†\%φey]äŗ‡O–Hî–T, 7ŨĮ¸ë[šö>•ĢŊÆ­f—+5ŧm´fRęúŊq÷‹$î†3îå~†Ĩĩ‘žđ<ŌLKáY‰Éãëô¯ŗvŊČŗ°kŌ„“Čû‡čX`ė<¯VZĒīWMurëÄÍ)ŋTDXŒœ)WaĮ^Ôû_ ´wRÜŨXÜg!fÜ ”øT°úŠēI?vámPgŸjæ'ŋ­u÷Íkėļäė*¤n ‘Æ{W8ցŨ›įäôϜ\dĶ:ë;Ĩb€ČŠtŋÁĪđÕŗ`=düŠMˆ|ŦācĨlsŲ™ŋÆ+Rˋ‹o÷Å0iÃ?ōĶōŠâˇx§„„rĒā’EKب§sJø MôŽkŪēk˛ÖD῞ŗķÚOĘŗŖđš×^ö… ūé¨ĢQtũšĀ“‘Ž”ßėÁé'åZéÜÂĪą^õOūítœŲÅūāūUŒ,„G$Œr+b&+gwmÁöŦ+lŽœ>ÜåÛ_ÆĻŒä‘ėyĢgM ŲÛ.séR%N‘É˙|ÖęŨÎgØĻŠ<ÆąN´Æ"˙ރųÕądA$$š>ÔÅ´x™QÎE&ÕˇŧąĐ•Æ ‘R84ŪÃÖŧãÕ[\î˛SŒpE7ÃÂ/"v¯Č”É<ôŠdŗ˙>õ…gu$lŅÄÁåö÷āÄWU nŽ;“ŠN ,”Aķß­Z$“‰d\Ą6Õ$Ÿ˙UvSĨûą(krĩÕÚÆC¨å9üpƝũ ČĀą9` üã­Wģ´mJ頂C î’IŊÉúÔ6vķŠķ9“rzwãéŪą…7v;đŪgbš㎜Ÿ˙_éSĮļgØĒÜwYW2Xės1Áãķ›’ę8­ÕČydsČ˙ëÔÅ=[z‘%cb=AßÍ9'?…\KԍÍ!Ŗn™=+"‚ĘEËķ딓ž¤tíKyö§đâIIE:töüĢHJN:ėBŖ­ŲЋëQjŌî*įŽB˙RwdšfÉápŊņ˙늤ŪGŲK~ņ÷v{ČđjÄv1ÛĒ,‘™fc•"<‘ŒtÍ^•r[cGC˜Á1Ø’@Æ˙ZŋĒx†-6æŪ6Pë'Ū ā¨íú×?W pdŅėČ`9§éQŨZKˇeÄrŧ€ƒUÎ1Ī=G5„$ãXvfdĪok}!‰Ũ•ÁÁa‚Iį×ëíVt¸ ᔖ*ąÁādOŌĄ—GÔ.ޤ–hĨũā;rŒ~cœdãŽjK >ęĘOš)9R˛lŒ’wÁĮjM6îÂĖˎéÅōG ę6íl~9Īmåķã% –Č۞ƒđöæ } âköūrȸb˛Å‚ĒzÍ]ŗđŪŖ5âå&Q'|xSœŒƒž ‡{…ŠĢvŸnؘ ņéKbī]ĒāČAŒöü+RoČŗ#ũĩųSģ+•ļiãÃ×ÁX,‹"žÄ÷Ŗ–H,EoۉU°Q dĪ;˛r?—5ĩĸ_ĒLc•Č,ÁvõĮęĻ•6LW2yxÔō}9Å%ž™3ČEŋ˜ęN_+ŒNNėVv-é—ō^kŽÍ!ōäÜTxįĢŊëŲŨŗ!ËdöīŌoĻŊƒĒÛą[‚>i0pŖĀĸúÆY/„‰ĀĖ3ģgȸõįĶųÕÉļš)ÔM|-ŦEÁ™°TŖ¯5jĘŸ1ʒ9öÆs\Œ§S‚ũ[k1 (RŒPĀŽŸ]ûmÁ†ážÁ0Î ėŒļŪĮ’zq[,MD’ą‹ęoÉĢŸ,ːŊMpĨÄd˛ŗĘî[vålMtWS]ȈŖO¸Hä‚›Ķ'9üąXú­ũåטւ8đTeÔāŌiTVc(­neę÷ō’ˆ­ü c#úÖ}´Á%Ũ6ķØāãԞĮŪĩ`ŌæŊdYŧŨ˜-Ŋa$ŸŠ$TCÃ7ëp‘ÂN2?Ö۞2;‘‘ú×4 ŲIΤŠ<žYe_ŗ‘¸ķæzæ˛Ŧî>R¨ŋ2í;ˆÎÖŸ‡ō­Čŧ9¨}cy[Ø`ę=ĪõĢš ÂWcŋ¨N1øāÕÅ˗•’âRŋš’îÎäĘY%“Ģ&c ƒíŽk2ŠFTĢžĘ$Æ:æģũ/íØŊ´Úz:ĒíIY”8üpsPZhsŲĘgˇI!R0ã€:mš-XrÛC†šķ$g‘Š#Ļwü˙HeŗŸœē‘ĀčXū]+§ēĐõ+Ęöī3ą9TDA×ÔīښlĻi:31ÛŲ—pãHŌ†Ŧô*Ũ&ōîO9—Ë# žÕŪž1ķrŪ۟•tˇzUėČXËšXœíãPÅáKļ ‹YĖßx—'ŋÍSʞāŒģiˆ"[gāį<nÕrÕ§†×íŖGÎׂ~ĻŽ˙Â)sl<—ĩē Û *sø ˙:Ҏ´—ėĻÖ[mBUŲå°_”ŸŠĪ56’vč&Ž"{ŋŪšō@w?7ûC¸ą'ICMŧŒÎ#[x/R,å ¨ģĘT?Tgđũė@,Ŧʤ˙p“ĮnĩN‡coIņ ØĖ%WYY†Ü‘ÔgÔôĀôސøĄŸ•­rđčĄ,âxė¯ ĩŽŅĮLĀæ¯IŖO $‘L€Œ´ĻE:n¤tLÎPWŊ{~y­#X[÷„į§ĒĮü$!-Á(|̓œ÷ÍrĻ…B%[€ŪPŸûę”ÃrБ%ŊÁŒa:ãņĢöÕZ“ėÎŽįÅ,@Bŋ>mŨŊj—ü%˛ųdŸ‘˙ÂūĪžx‘‡›ĩ(Ą"šÚMāb9ņŌ›ÄMũĸ•$aڔĩ›ĖP“ĶGĨ$ŦĀ<đ; 6’į§€A=úŌo=ÔūUvĘ8å‘ĖØXI”‘ü'ƒ~k=OFĨ(Æ-ĸs5ž\¨šĘérŦFBōGŋTŸoâ”Y8ŲŧŧŒüÜcž:Š’â v°–]2 ~Ã*°•Æā[=;žŸ­P‰ ‘˛˛H¸pSƒëץŖšûœQ‹“˛4E‰coĩ+ģå9Ũ€;¸ÉĢŠÕ×úō­¸vŒ$€#dōWw=sÜõíY*#y2ҍįåaüĪđ­KŪ<Ŧ†[á:¨#9īĀüĨŖ7pqܡáģ;RŪsÚÛĮûČÆZEÎ9āôî+'P°@ŅÚŪ&ȟåŽv 7Øô<IÅИŽ6ZŨ(ęX‡#~2@ã¯øÖ\w)–7f”–M˜Â“œ‚ođqmęMTã/"áĶocû; û=ø‡Ę¨>ŧTŦ/tyæŅ$i.›9<SƒúÔvŗ;HŖšu–)Á+.#=›Ā$öô§Č#3„J÷‹‡$°`ǧ¯ˇAÁĪÖĢ­‘“NÚŊ ,aļũŽŨŨqĐ>ŌnÖŖ*ŗÎĶÆžR1ž8éŸÂĨŋ9šßrîVG,—’§Ŗcõ⡖ÚaĘŠ †Us¸Æ2ķ“ßڐ_Ũ\Ü6Ģqr†xr+r¸\Ø` :Į9.ˇ”mffų@úũ*9RB'qūŽM Ū⧕‰žgĄŗg=ÁVģg–(đnÉ Üƒô'ŽõJc,úĶ=ēÉ$l›BuÎF?ÉĢzeņK4ąš[bÜĻ9äņīŪ ŧ€ÛĖļļ×)ž4F2{dāö'ōǞ°Ôĩģč6ãLˇÍöĨ+€I#‘ëĮ` gÍn‘ĸlŨķō ĮNâŽ=›Įc’Ų}ÁĮEgŒūŖDÍšŒ ŸGų/ZNësXÔžTB˜,q¸s] ZėōifÄ\ēÅ(!ŖęôöÍP˛‘æ+lâ-ãr’XŽƒŽÉŖQÔîÂũĻ/.xC6äŸC’;sV íÎÍ*SŠ÷bʗaáÃR§ īP…EČÎ+Të-4Iöƒ ŒbŽ3ŒŽ:ũjäšėöZhēĶŨŽ­ƒâ_1Æc'Čü*ÜŽėiąæQg5åî'ˆõÅ=aäg"ļŖņÕķļŅnĢÆsģ?ԟ˙ Íü|ĩ˛Č§¸`?ĨKœŋ—ō:TSÖæ0ˇ\į?…J°¨z´ŸâÎ2lp=ÜéJ<~û“6 TžrËū¯'Ķō’ęf×>Ôá@ĪÕą˙ lŽŲ:lAO¨Sũ*|Z>dūΡ ũī)Oô¤›of6Ŧ¯s4Ä?ŊA‰ōjËø‘¤ál-Aë“üMG&ž\|–6‰Į?¸“˙|ÕXžo"5‰=jFEƒÍEũļåH6vđ×ɏ˙‰§Û_<ü{pĢ˙LSü)8‡7›TwÁī@ŒĢf’uŒĮ!ØāTą¨Ú8íQsK ;G¨ÄdrÔ˛¯Īņ ~lārh¸XBTŒnÉĪJâ™Ā¸lzëV"ŠIÛlqŗļ Œž(ÕŊbģYË5Ĩ¸‰w´„ā($ŽHįŌģĪ ´ŗBĒ|—eËcŖA˙ĐsX–>UŠm-§€2zˇø˙ũiŦīĖV¯8a;Kô#Üp?:öpØ[FīŠÁ^\ÎĮU~c’͝|°}8Î}?ĪĨcCr‹˜]Ëåņ’;qîr*´÷+ö)$ÚÅÖMÄõãæūŋΝķAvŗĸ˛…ƒqpīץü+xĶQ\­œö օ´ēˆŽÔ…ÔđāŒķüéU‹ ą…Ü* āoņūUKP„ŧ>|Yg2FHĀę>ŧf­[OæØĘr JQÎGN˙ėāũk]ĸ’ģix“Z@vĮĘĖŖŠ#đĒ—'o1r ¸*͞Üúûgü*5SM>LĒHĀí÷vŽ˙P{úS/EĢ å¸ÉĮ<öį­cœ´ɎĨ ’Q°ÄĮķ ÆsÛ?Ö “Ky$kģÍeĘĻHzsXÆb¤HNĶ•# rNãÖĩ­ĻĀĖĒyÜ I¯?Oūĩ\­sD/ŖķQ‘Ųî9Ã*Ž@ār;v❠kuopŠū¨‚3´ĒņßÔ~•ƒq)“U€IŊĨōžqĮŽ×O=Š`Œ°P0@ööæĻSN)Ø/ĨČĩIŪkˆ[KŗáW’~sßbŌâ1y4—!YĻR@ š ĐúUS"Ė`g, cnÜõœû“ÍE6ø¤.vƒģH9SĪ¯õĸ3N)0LŪŗ’ģBČ[æÚq‚­ĮnÔįÔZßPt‹Sr•,ÍøĪJȡIŖŧļ@ŋt̰`;c?Š÷ĐĢ—mš„†3’X–ûÄmįé×ô¤äĨ­‚å´ÕFĄ ÔEŨ†.í͡ô-LšÜSDÛ]„Ĩö"âöŦ(Ž [˛Æ…BįŽy8#¯ŌŠÛÁ4“o‹Ģ‚0ëĪąŸĨ[§NڏŠÖ\ßĪ ÍŦp–14jÎ'ŽsÎ>Ÿ—jlڊÚę ßr°bO?—ZÂ[ņ†GH”pAËļ¯¯åš‡UuŠ+ÄIŽ8ƒ0 ŒdzŽ;įšĪŲĢų ›nxįĶ.æ“į–Y}H'8ü3úVžĄ¨Éoi#!Qzžį8ūĩÃÅ,’ÄʨŌd8Æ{WAŠęWqÜŠ(ōōŒrN{ūYŠäRi +—íõ §˛ķœĻUŠ…cĶ’?ĨNoöĖą+!š(xíǚÍ+žü’Få8ĪQWôۓö‘ )lēļqũÜgü:ŠaãŽŖåG^× ‘ E؜@éU§ē’ę6kiĀC‚æ˛îoJŨâ`ËŸĩƒ2ŖŽ= Ͱ6w|PÆørpÔæ°tڊbq!—QžĄP<ĮbCúg"­E5ĶÛ’Ėą˛¸ČnāÕ ë”ŠYĐn`1ģĀ?Kk Ô-¤rĄ@#¨ÁīQČírmÔĐYe÷Á@îÂĻƤ*í°õ5Š—3Fā3‘°}?ũU.Ÿ?Ÿķŗ¨‘ĄúzЖĻ×GnN}iĶviŠšŒ—ģ@VD W$ŽųÔˇŒ\>Ō›ļ– :âŖŪžƒĐ‘î–*đ!^ĮŠÅ?í)5˛šFĮLPꀞ8#ŊU”ĸawœ‘ĀĄÉĻ,ŦQųC÷c#ĐÔos"ģvúūũzŽ ´`Tžq‚)Â}ĒWj—$“šjW Ū(Ā3ôœÕÅ ,)}>‚ĢŖF™$cžÃŊ#KŲ 6•lįš”ĐXyļŊ(Ė™Ī!O§JlĖŅ&æOŪ“ÎĄ xUœĄ#‚MLđfØ ›yQĪ˙Z“ŋA †hÎíá=4˛Įæ1ČcŽ*ŦŖė­+1ļrŨÁ§AwĐČÃn3YŪIęĮfK˛ÜžRIOĄ=*QoLāzķÍe›ÆV-#¤üĒ;UˆĻÎ$ķ>SŅjšX° r¨Ë}ëëUĻą’ÎQĀüiÎŅŽÕųČČ=CŋzĢaŋ!EĶ ŗ€Fĸ5Œ÷aŽôˋZËn¯đäâ§&@dÃÖĨW‹n <š.‡Š•ž­<ĩ€ž€S˙˛įvÎīņ­2y™ōרâÁO Rė3Í&ĩĩIc„Îķ%ę9éŒUKˆāķŨ#˜ų=ŸĶéëWnmeˇĩIĮ#HęĄJŽ ĪsUâ™ŦÄŠqs´ŽŪ=k™­u:âĶē‹l­ ʑ˛ ƒąžôaxcĶ­K) Ëä1šmõÍŧlĖŠã÷¤néĪJ€ĖĒ mã¸Î(}Øā՚€ā1ĮãĄĪjK*QÎčI?ģ'ŒwúTÂ6O'îœĻ<ŖË1Ī˜ĻÂXZĖĢäîʆ,rāg ŗĮ4Y§Ą/As"ÜpÛM$€dȑG=?PzĨ„WQÆ%¯¸.Đw+s—Š<­j5cŠÍč"MŽa$šîAú•›3™n^h÷Ã49ķ:’[=IOĶ۟]TôE$Öˇo “C„sÖSĩqÜÍ]–îŌŌŲž;mĪģ`¸ps÷@Į×ŋãPëÁŠ-üåš%’ß0ųrÃ'ŋ˙Z¨5ġöäM†ōNāqÉúūŸ•hĩFžŒI0Š‘ ĀŋM üÜqÆƒ$R/—Čä.ü\ũ8sSÍu ÔDÖČĒ‘ę>ĩj§sŊ˛mĢc#°#ķŒįĩWB3ÂM ĶĀdË“ģzj†îņ–ëĖáļ1Žãžzjā¸YC˜ŨŖŧÆČÁQ†ėT“ĐôÅgŪfo2âI$›¤›ÎHĮNi .¤qH2ÅŌlüģyŨžö­øD1Įw•{Œ31Œ×8÷úVv—ÁsįĞcĮ¨į|d Æyö§Īŗ[æk°.YŒžY LÛũiĩr‹c̝Ú@¤ígāˇ~Z°QŠ˜ŦĀUų‚ũãôŦø­§š†UT™ˆų';9'ĐķW…ÔÖčÂ9¤‹pۈû¨Į9ü c- 9.­}Įy7É!Žā†‰Pm.Aræ0ã-ŒœūõĢ“\Ŧ’[¤Ķä‹áö¨čķÖŖ[“ušč-ļ k_ĩ…KŸš,ÔķĀãõĒąi/Ō1VhšŲĮ pO éīÚļ5,4Ă?žYž=ÅØv'ŋãÎ\ÕKÛčĖsZʓ$ʰcˇ9ĪĖPyéVįt(ÍŠ]ä‰mŧš%“??ŨIĀįÜv÷5\„˛2$ÂFÉÂI¸`Œ‘ŽãRZŨŨ]Nī…E€’ŒÄårr'žŸ­VēcxÛŌ ¸Ž *^sŌ¯–J:ėTo&Û4­eU1¤˛4)$„$AŖČ=¸#ūõR7´Žéā–Fn@ųvŸķŠˆŨ\LRÜˍPēF7cv=šãŠHᴞöõãēÜÁˇ`qßšâŗk]ÉqoFŦiŲ]ũ–ÜĮíîw3žNGL{rj=r[>wˇš5'…–2CaČįšįš“LP`/##Ā‹¸×§= ĩsĨ˙o šGų ‡nOÖĻrQŅŊ hŽykšĮ܏8yŒ8ÆÔ\ š-¤ ‘ČZ=ÁĘ0+nīÂwä˛Aåē˙\L“èT āW,¯'Žŧö§ĪhÎĪg}!Ōmâ7/,đÅļ@ E¸Ž<}1Ī­Sŧ‰#Ŋš8×ljÄ(.ę:×C§hē¤_žŒÆ ‹…*Ž3Ø÷úVfĨ¤jņę2Kmω`c•ŲlüQ[Î*TbÅÉ&e4œzŠ[9-ÛcŒgļb[,č(GĢA'ô4įšĄķ<=v˙U6ô*Å+h[•õ1 š{vī(ę§úUûĢuŽ8.@é:—ųU†Ķœ`äuãļGŊYĶŧ?{Ģ_Eļko1Ā,čĘÔî8õé]GŠ"‚{eKTÅ­’Ŧ0/ûŒŸry4›QvęĢŖ•ŌôëHËŦ{ļ(gbB…Āäũj[öÖÖK‰QB ËaÁ8úfŠ%ė1ŪŦ!ü ŸįWĸžiá/ë Č$9ūÚ´ą•ŨĖÂP ī]e‡†GØŌSŠŲác†$ãØbšVÄ.ĐȓF)į&Ö+ôĢVdnVKûûÄDÆČážxüĒm}NVÖ'M/‡ėōamfŨd9JŽOũõS C¨‡Sˆ2Y”q˙úV$Ú\zŖÍ{gŠGŗČvŦČŲ^œt Ú_GCĢÄáx]Į™ÛG-7ĸ=EĢ7fĐôxĘ×ĸfĪE…ąŸ¨Í\˙„gOŽq ÅėĢ!ĢĪ\g;ƒųWkļ;¨¤–I$ĀíĪ^kĐĻÔüŨ˛Ę‡~ŨĨ##88ôÁú“ZĮÍą—ĩ›wF5ցck]­ÃKal‘†Į<>ŖŊ_‚-;tōã(Ę7ob ã#掞ŸÎ˛d…§°¸ˇ–I^rĘCäíܤāwā•,N‘ČŅųDĢ ĘqĶĐđ?*éŖ‡Šw)ucu˜4ÛeŒ[Ŗ¤&3´nO'ßĶéYxŖ‹a#p,˙7†nœV™>׉؏ŗļI`tėÎj‹@lîæQčqĪĐ÷õük­ISjz–ŧ¸Ú3¸‘„3ÎŊęņXÂ$ŽW~8ĮĖ#ŸéTFeĄ-ĩŊ=2\ūŸŌωšM=¸\‚F0AĪõŽzÕ´ē!ȝ.õ…×qų~l0<ƒĮįŊ"™­Ŗ‚Œd''Ŗ[§ˇZ†Øƒlé!rC2‚9鎸úįđĢ…/'ĩˁ? Į?(č:tëD+Nqæ[‰6ÕÉä’Hĸ.ņf—vŸĪOéP^ÜD°”ÕĖišĪĶüN)ņ¸šTKģ08ßŋN+UZ˛{‘܊h_Ęä#ÆS<ä`˙ęŠtזKDŽX˜G&í­œ``œã<ōVŧŋš[˙>ŖHfĪf<āīŸ˙WŠc‚sŦJRrIÉ#ג:ÔķĘ7‹î=UŅFū(ūÔĨŲ„ŅĄPįĄ#újKd[Ĩ´’ōIÁRNy 3ƒÔúzÕ{×wÖļčJ+ä'q˙=sP$˛[_AlŅådVÁ;ņĪ ­Ĩ~ktēĨ›§ĖĒ711‚€*į<“ÉãŌŦ\ļõ˛1#6Ž@Mimoēu2ØŲ\ŒœpOBjŧ ūI‘[tŽp=r~ƒ“ZNIîŊ fŗnļU‘<ŗžäÄ žÆI?RōĒqÆČī$˛2–NOũúúÕ§•U-ƒ#™V,ôĀÁĮš˙‚Ųî6h×sN …ΧoOį\ôdŦ܉‹ÔŦ…S1ŒļŪ Ãyéô÷Š yY-ԅXÉc•8;ˆü{ÔbŨâ•e”Ēį÷dā˛ņĪæ:cjí¤B./5|Éw19ÚpyãØžõĶ96šĸ]ĘWP,‘˰ā°’:>ŧã'ĩXļÛwląÆŌ ŽģÛ$6ҎpôúwäúUm@Û3Žã*N9Ν|ōĪ4iGˡyOÍ"ŽBČČĪJŅéN÷Ô.K¨ĮŸZėH˜~đą%ˇ Į“ŸÃĻ8õŠu(ä`W;Ž2dNĶÜfŗ,ebŌ̰vi@ÜļOžz“ÅhO*Ŧ“,Ûe(šįœŸĐ˙œÕû>[Ų%fCĻŦv×>c§‡mšsŸ^ŸĨWļyáÔÖ[x|’eXāõãņëW+)S#9ÕōHĀ=úõü9ëŠÎē’hÍŽHÃõÚ0 p>¸ĄhĩęIgšf‰]]Ũ‰r¨ Ũ?*’ÂėIؐ<Í䔟AĶ’?ÉĒi",Ļ5hČWęČA9`Oōúū#Ėá–—!•°į§ž;úqMĘī”]Hõ RSpņm›ŽāĘ2Äû÷5­ĸŨÅ‹JĀŦn‡€ŧd?¯éXēŽĪ´†ÎåSü\wįëSũŽ[]*H*¨tȐ{g?ų•ã5ʂčš|Æ[)ŽcœKƒŽ¤dāåW,|ŋô˜ØüĻ2C9éëęMbYß4P˛~ņŽ>Rr9íŸåũjÂjAcupÁÎOÍ×=8=‡J¯g4‚ŨN‚Ũcō 2JąM`‚@čqũk'Ī’=e%v #Œō†}ęĸ8’1æ(ģ8ū&ė:ûTöIö}G˜38?w ãŋķõŠ•%ÚÜęfŋ›jĨÅNáũ͊yŧsæÅ. ö8=yŽoPģm›ËcIį˙×ëÖ§‚ũÖųwČJ ęs…ÁĪĶŗxouwRfœ ęQ,gaf9ã§˙^ĩâpe+ƒœX1ûZ´?*Įpā’ Āúōjâ^æâ%Rx÷}ë Cĸ–Ĩß:ap3"„bxĪ@:åEņfļŨsœqĮzÎē•íˇIģ#¯Ķô­aFFáÁ×ÔV zhJ’ą˜hđ’g<Î+FC,,ģ™ˆm§íVÄņ_5Cœúę¤×*n6đ °ÆFH9#õ¤§ĻĸēšŖ"īIG˛¯sQG§Å æ …zžš'˙×R´Ž0¤OLÕ9šY$ga\ÕˇW;Z";Ũ.X—rJ…ąÆ{ŸÂŖĩ†s3:–\pÄōzņ˙×ĢŋÚÁbD (ė 3Îĩ–Ū7q‡q“ˇą$ķ¨æŽÉ”§} q— ÄõÁä~51û°?J‚9pĻpzŸAT–éŖĀ ¯P ėiÂÉ\Rf„rĮ#ã>^Ą=ąV‘—€Ŧ z ÂpHäHģˆr=Îjâ…ÁØĘå‚ĖđpĀ‚yÆ8>ĩ2´2ŠwcF9-d‚(×7/ōncÆ ãß§ĩWšĶ§6×L"hbˇ*6Ķ’p>ŋũzŠ<ļĪļIž§sú֍žąåé˛i×ĖrŌž[hÆ1NŌĄÜ¨ÁŲÉÖM+ä-r‘3gc‘Ô q׃ĶÖĨ‰âļĶĨ įPvķĮ9 ûäņīUÅÕ­¸TŒ›— ŽÁÆÂ#¯Ĩ>˜[%ŧĶb9CmÂõlqƒëœUj˛ÔŽę xĩĒĖaÚž.„‘ūsô­+ģÍ|)´%/Ī,ÁpņxĪĻqĮlzÖåܒf6M›\n98ČéūzŌ–‹ė?h†R’Ŗ…e€rOĀĢ]f#É"ČīrŨ0ČaüG#ŸįSËjúŽÛ‹dŨ30IâQŅÉĀ`=č~ĸŗÍÔҰdrJĩŊ9­!Ū [ÛȲ˛åÆTÅŸœuūčoŌ¯ĄJö ‹{[Éüé#cšS ~Ŗ¨ÎjõĩÆ­02ÜËed‹™<Ĩ=ö1ëÔÖ=ļ aŽHö†FÆāĀnô=ģ×C{–Ęk˛m sšy8ĪzĘOīmlPģvŒŪ$J yÕÜūž/X†iOČü¯ áũ*îŖjŅÅ“:pĘ žIĪSÁÁŦÛČÔ`ŸŧWŌē‚vС$Íļ¸Vr! ē‚p#ōČŠîfķĨ¸hICø H °ŋŌŗ#ˇŋōDˇ”DRꇎ„öĪZ҇LÔaƒĪHƒE Á98ÁëéīMĨpm^ė|°Ũ/>ßēEgCn\ŗGŽ2}ąŌĢKw*< e,c@7’$î0zSgI%,’¤r'TĮ-Įl vĻÁ)Å*Ä[c‚21Å&ĩ4‚‹Üž~Õ¯—(&N6JûsR,ÆF‡b¤2 §)לøT°Ü]ĪŠÍxamášvUSōōNOUõ…ÖéČ*끐ŧ`“’Ä~_•föą7mų•Öō Kâ¨Ģ*”ÚĖS‘Ø{zū•PG(ŨP4aĀ$ŒO˙Ē›w„&pY”7#ĨmxNžhĘJ<¨æeeķŠ7^p=ĢEÜÚŪãeģkģkA 1ͨ`­Æ0yÆ?ŌĄēi-GfQm´´MĮ?CךšîtąŠæ6MĶĢ‚į9ä/ú ũk9ŧÖđŗËąU—sfwū‘ÎĻqæ~FwlŦ5ËĄû”–Sl7ûsžŋĨZēÕõd ČØ`§snāyĮ<ņYzT˜Ŋ, ūíŗœv˙VåŒi=´6čæs' ÉČ HÆÚ[ûžõŖŖ ´tûNUĄmu ąŠng˛ØÉƟ‘Oû$¯šųąÚ˛oüIĒGy*EzL`˙p…k…‹Ōmũü“HLÂũ^kžÖb[Y6ËûKd'8N8SūŅę}:zÖÕ#eX˜TičÍęūVMĐlôųGøRÜk×JYō#å…de’ACs1ųA`?tPč÷0iŗŨ^ÂŅ#`Üw^8Ģ"Â8`Ė8ĀūŊ*k–I,¤“ä"%Θŧį“ÁõTWų’At6á0¯€œöĒļ— 7šĒŋu6į ô>ŧ}:wŦ15e$­ē9ĒKBäŲHG%J7 däį?_¨lS“§Ŗ€# );_î÷ë×§åTÍĖLĪvĘÂ7ō ļyãž}čžëĘÛ5Äl¤7Č7äԃôŽ_hÛģ2æmėZÕî %$dŸ•“ĪŽ?1šŖ133C*á RĘFOĄũECq8’‚EÁ‰)¸āŒc ę),wÜųf@Č_÷~ū™üąųfē)MFNÛÅÚäÖō[MnąIrąJiÎĪ\ũ*Y^}*0°L¯ü—Øp™ÉįķvõĸãÃŌÜYZO*˛ŖŠ*ÛÎqŒ‡ZÉģĩÔ­D‰öYȇųc'øsĮ<ōŋJÆkšMļfõ{›Đ\5劯Ä=ą.‡hû ÎG>§¯cZˇqÚ´‘FģĀPšŨŽGEüēŸōy›EūĪVļ,™IÂtnxī‘Īzž;‰%Hĸt ręĨv>Lđ1ØpkJssšō.2ģ56ŧļŎ˛˛1´Ų÷>ŸÖŖ{xå!á˜+(Më°AÎ0zū8´ļ˛ŖÍ%¸‘R2%-Ĩ‰ã9éĐôíôĻäũš˛ol3Ÿc=ú~•¯ļRƒqMûˇ%™ƒ\l1¨9Éė@=O˙¯ŌŸo A•iVbX(ČĮõúÔįdŗÄ +Œã$y>ų&Ŗ“"üH/!,UOLOę)F§ģ~Ŗ¸ļ×9ē‘„l@Ü3ŒíÚ§ƒ˙}ʙq+AM”TŪ…ęÜqߎškųmš1N>aĀČāō3€3YÂî;¸ĖR`¸b •9#¯o÷kJTšaĪpŒmŠ6°ĩU]āŖ ƒ'Ž?:| ūæ5¸.¤–Ũģ ŧ㎘čOĩ•Ŧ1Ü%Čeų”mˆlÎĻr|Uyã’;™†­õøôĮ5d[ũĻŪ×6û2Čå°~MŧŽ>ŧTsļõ%ōČæ­ôšĸŋšĩžíR4*ŠäāācžõŠm Km,`m(2^WŋĶ#ō­›{hao˜´ķHōА§ úŌßX-֝Ė‹ęvŦ Æ7û§æ ōôÆx­\´)E#—šÕ ™Ŗ'įŒ”8‘bŌEqsbæyܙHšÂ+’z n9'ˇmocöšŽžâBpĸŨâČo\dúŒõŦԓ4rQ’0ĸĩûEŧŽŽëäÅšŠŖ0˙>”—‹ûąf‡{å Ā`Ž+§ļOļ°—Č`Ė$PβåFG å@Į×ëQęŲZ{ŲG阧˜éôū?JŌ22}ÎBæ ÚW–Mį~['Š÷'ߚShĐA)‘Éŋo–üœ˙ŸzėåŌíî4Øu)Ļō×`uU\¯mŖ×Ž•wáų‚fB%S"3°*įŽ:ņÔķOlÉ9ß+rã$s‚+ĄÕ­›OĶ, …ÕŧČžĐĘ­–Ë`ųPčZj^ë–“a"cēB@P ų ŅÖžËy­DÖžYŖqxĮ`0?ÆĒRĩ[B­Îšu Ŗŧ†6åD$V˙–´+xä՛XäŽú+_ĩ$S3’%*ÄāwįōÅOor%šŒBÅB¨åq“ØĀĪz}Äw/jķŨˆüÛ ™˜ōU—8ĀĮđƒôŦ›ŋĄ-ōĄ‘Į<×d+bæ7ŽNH<Žx#ßĨ6įOļŧ*˛'Ųnwų'*$}âŪųūu ˇš<>h"Ԙj1˛ŗ”g`pË1ĪCØg¸ŦÛ˛ĖîڝĢ,ĄAvYmÍ҈Į'Å‚ldžlŗY^DF ĸ’TzÆAčk‚df™%FsЂŧã NzŠĐ˛’8e‚âK‡ûŖĮ*Šŧ1íÎ} `]ŪO}8rņŗcn mųGœ ŒPĩbi[RŲļ_E=Ā›yÂ11.Āq™ˆÆqÎ1W˛u++UšÚŲ™+Â`ÎŖ7^GĶØ÷ĻXYNĪ5§îŨTy˛E1ãh^ģŊpsDsž—|$L*ǟ(—Ąę6°ãĄ>”91ÅébŌ]jKdŗųÉmjŅLä†ä‚9äã8¨aį™lėã–iA;ž<8=1é•Î:ÔWi_É5ÄԁÔGÎsל9íZ–ú•ŧIgbrņĀåí;˛š uhIŸ }ĢVŠKƒFŒæ=¸ÎGCž}jÍŅXaGŒ˙Ŗ‚ÉĪĖ­œž˙xĄ­Ĩ’Ęū '¸h’]¤î`K㎸ä}=k õĄģÔ`xōöŦúąž‡>Ŗ#ĩLSrô6“\ļB[iv×p n.bļR3ĩļ÷sÎ1WŸDĶO‚ÆKšŪæĢ@ÜO 9ãųÖĨŽ› åī—,QJ­ųAĮŨíøŠdú]˛JÍödŪ¤ōĒŧmÆ@āmüčrkPVĩĖHü=¤„o ę`8yáÚģzžĒ; šI †+‡Ų"ėc¸ˆŠÉ ‚HāŽ1ūÕKē=´,Ĩ"WŒ:,„ŖŒ8œcĨ>ō ʐ–0 đqÛˇS×kxOž×¤¤ÄąōŪŅm`˛’hí×ÍRH ŧį$Ÿ¯lō=+/Äwz–s[í÷œNc+&:Œ‚ˇ=ųޞyb&ķa`›|˛-Ûã=ĨAĨ\^Ę$Š-$īŠ\Z’yīģ<ÔēœŌō.:ŗÆ)ãĀ÷¯GDú7#Mļĩ’XÈpA )üsĀįôĢŅi\_Ĩ´Ú^ŽĘ%0—Fāāí}ĒäĖfŊ?)XPŠR•č1øS”“ØŌöęs——vē}Í žž5įj°bØúqR¯‰4s9=ę8C 0ŋÅZsxjÛRŠ)%ąŋ™šũíģFgœĮ=zUCđõĨb!Šęėge˙ŲAĻ­Ô3C†ŋĸ´ūr_Ī7‡ ‘ô5b]GAēŲ"ęh˛˙hœlĩE~Ũ†Ä—öę=˛ž*Ô ‰ûú ü!ĪūÍOŨ 3JŪįJ]­ĄhwŒHMŋúũ*ļĩĻÅg'Ųe´’QûČĖwŸ˜˜ ߑD í×īßH˙î¨Oņ̰ü;Ķ|ī4‡Ū|%Šq‹-9#‚&1$ņ¸ 9í[–×;mR\É*‘ō|„…=ĮõÕZø7JˇM‘Úļ3Ÿõέ[ĩđ۟d1 ŧČ3œ,ŦyüÍgYģšNĨև$Ī}%˛Gocu$­´–ōČQĶ#8ÅAw§j3ČĒÖŌGV.īÁs××čņ$QŠÆđ?ÚRk?Yi ›ĩŦ‘yŅüĘĨ7döųxīīüĢGÎyĢĢg5°ąK›_ŗKåĻQÁ~<ƒíПΩé÷ÄfXČYJƇ‘‚¯$ŸČSŧGg~nc-r­p"TĻĐģÆI/÷NNäöĒÖvöŸeÛ{$ąym”@G9$€>cĪ^LRNPøYË&ãĸ.îydëĩ˜GĪHÁ8ëÛúÖEÉ_ĩʂ&Û€;Nx}FE\{™ -x‘ä kÅr'°ãŠ÷÷¨ôÉa>uõÄ빛kncģÆ õ9ôÎ*ujė͡ģ2m上åA˜;*ī"gĘ)'' ž¨įšfŠ)WˆŦŪjŒ0$1ŒpĶōÅ?Pē†â\:¸SšÕw“žŧ/Rxį89¨¯ė&ˇy ëû´uL#7ųIŨÁæĩIˇLÚŅ´×fDKĸ#•„ŋ.w.x#Û>ŧ}MQ¨ÛÎ'ēyYbá™Û!A<`}Gę*K;ÄļąWšâ=ûJĸĢ‚Ü? ŽŖš9­&No.4ŧß%׌c•>Ų==Ŋ+7>VKmj>ŪđyĢäģ,L (m¤ `œ™éÎ=ũjļĻĮSšļ´‚čM~}øVã–*0@ãˇīHúŒ—7PÉÛÃJÕų{qĮŸ\SHaxéqF1ƒ`` `Æ 8īR›dęĩ6>Ûg¤X=…‚ĸ´?ĖÃ=2;{wĒ kæAđ<‘HNá‹ĀQžtęIëÜVFŠĨ˛ŗO,‚Š[$œã?×Ú­[›¤Ķžá[挚Ü͒8Îáa‘ĪzÖ ^åGŊÍbˇc&⒃˛EcüL žũŊę[{¤G2ŧxŎąÉŽqƒ‘ßŋc\Ôn–q—ŸÜÍČ ūöô­…I”Z´û^×$š-’Fp;õÆũuQMAĸ’´N†¸ąÂ˜ÁČĀäų‚iˇĻ+X’āˇ˜c%FŅĀʞžŧŠąč¸ēk“HŦpcŒž7sےHãĨg$¯(t’0ÁĪķ´°ĮĘyã¯įųZ\Žōzš+! Ķ\[D11†nš9ĪđĒv Iáwf×,Nn8'ô­(āDš‰F×*PŲëī‘ČJ™,ÜŨ,Ē[äų€˜ōA]žŧtútë]Ueuîõ*Zėdų TØCįrą<CüĢ]ãCbc0*ûèl’GįŠĖÔĨŽ×ËĩÜ‚'#ˇ`߯ĩ_´xãąŧ*ūd.bŒg9]ŪžŖ=@íXUũHšŌJĪļvyĢFs×ļ0?JΚˇDԗeVĘíįũ?ĨY’ÜĪE–“jÆ@-‡^¤ŸoįU|—ļŸËS#[Ą œ'¯įĮŠ!Sá`Ū¨°‘0ĩ†čf€G+Ž?,Ö´Ļ*ģė Ø8+œ)îrāŸĮšÅķüŋ(HŽĢ`Ž9^Ys‘éŒôīJ.Õîd‘­ūpŨœn ŸÔƒß°­aņNHQŨšō#Ãmyl‘ÄȨ˜ÛØcë‘ׯ&’ūč6#ŝÎåĀT!I`l“˙ŽĶĨ•nlĘ4Ģ”,ŠŅ§ĘA íLätnjÍĒÛɀI.@iʞŧ˙úŗXÔiōĘڕ'k4Y‚æO4í}ą˜×{:’ĒHčāc¯ãT5g›\>P >ÅRxĘã>ŲČĪŽhŌ™ŪņŧįQđČĮå vņÁÛíW¯,‹$N¨‘ĒÆXÄûNsžŸŸN*ÜĶŠ¯R[×RUH°‹ÃFCaŸœÜˇ#č>ĩŸk)abC>1…äũŅVåÄwvĻfUxUˆ‰~cÎpxā’}ûũjkŠĖ’´1•pęČ\F¸ęG-×Ū°PæšwЛ&îQîœ7åû˜øõëęjŨĢn- Ģ qRëŒú{uǰÆgI¸\—|ÆŅ÷ŗ×Ô֝ŧ€[Å Y.į+Sœã=šuė0+yOŨ°Ķ!F‚Ō960p˜MĒ2F}Æ?—LTsJī ø'Œ01Ę§ŠĀŽqu3n§ēÜ);S ö‚Uĩ›}Ą‰#nä …ã į1ü…gíwaqÚiļģŸėöûTĘ6° rå‹(UįĐķĪãZšōÉgöXäČ6đžÜķĶ Ôđ¯ĄÛČfģģ,LŖ;qà `üŋ.ãOÖo Ë7Ū î­čĢģ<ãčŧįņĒ œˇC‹Đ‹Tą˛´ŌŦūΙģ ¤ qg§Ëc͚ÄI~ŅE˜**’à SúĘ´§œ\Ë4áĨIĢg€I9ĪĶŠëš>Åo9˛?Ηߏā;įø~ƒœûÖĩdáepnė™uqFv\‚NCúŒįüŠ­megÜS/˜#ƒ8CœČŦšņÜk9å–’7mˆŽH ÛškSíašŨîϐģĒ´ `003×>Ŋ*gĨ%%¸Ĩ-›RHȲĘsØ ŌÄN0ŠH%†Ę9#2I7 ۀč9ŸÔUÉ|ôtÃüūĒ’Č‚ōŨ#ܨcĢ1ëĐ{öíZ7í ”†Q÷rxĮãŠäÄĻÔcÔÅhī ž› ‡p7ˤôëŽŖ­\ļšhîæg{b…v†ę;g¯¯˙^ŠÂŅ!ˇ†U.|¯žŲųēqŽ€~vãt–ą/k°ÂŽ6ôÉĪëQėųŦØÕ÷'¸aįPK1ų0$ôŦžÔwÜXžz˜Î•o¤DÛ!ŧFO9æ”Û@NLNIę|˜8Éüë&í&3='Š#ũŖåŒ“÷ŗĪq‘Čį9éPßb†´iÃ"‘ŧm+‘œôažjƒĘVxŒŽ°¤$˙6į9ãŽH?áíRAooojķ3˜äg +Œ`¯@sĐž1ÚšoĄš–†…Ÿ›md¸“ËBĖJ)čäœūƒōĢ“]ÛŽæ˛’P+ČŲl‘§œū5JØO6ē;ˆžA…Ua՘ä¨í×=p+:KkõžōxKKe4Ë _4ĮÔāëE›wŪæäŗ\=ŧ–ņ Ė3,hHAŽIĮáÍrNŋmÖ ™ĸ2ˆäTÚ>ņ<“ú)ĢךĨ폓mnËgdMŲ$`‚<‘ķdf˛’77Rųm uuđŲ$.O>øükhy Íŗ¨šˇ¸iŌōíˆ$‰ –Á€O8î>ĩi- Éo$R¨6ņ"ųlŲŠ’ũ=ļž•{ė“GC+`#¸ōČ#î–ÛÎzįšĢ4–Ņ™cŠãįšL‡Tųã?*€N{ãĻ= åĶp•F•š(éĢn°hŦčĻáš^psøį#ķŦém“ûFōÆavBņ0^T0åG°9­;?"-$• &`ŌGŽAöũzĄq ļĨ`ūTk1's)$m(N*V•‡6TŌ¯ukh ae "efFW!°r+Ā##š“Ä6VcR’x.Ģ(’0¤đWPzg¨Ģ‘Xˆ\#„#ĮæLYÆYˇ‘ í×ŽŲ¨īī#kåļK:Ų”¨hĀW @,úUšs Ģ{ĻšËepōpäĀčŨŠ–ųO¸&–Âú="įrÂŌŗ).T¯åõĢÄÍlPoiåeXŨYqĀëیcōĢÍĻÎ-šđ\IJēnĖš]Øėjskq7Ђ÷ZK›IL§ĖŊoųe$ųj îGĄüÍføzŅu ›—šôAō"“Ņ˜đI˙eC­YižmĖīĒîY|ß-ĀāĢ`ū}šúzÔ°ĖöÖi§ÅĪ™IYĮ#ņŒwīÜúRVZGq&–äZ–ŠkSZXÚ˛Áæ†ûB°%ˆã>įß>ũęÄЍ;1™äbK9qëøRMk´RŪãxŗļ<q,ŸÅžøPy?OZÎKO>XԀĨŽ6'-×?ÆĒ1Đ­^§Ao¨Ä,Ru‘\BĘcbJš#¯r}r;qT5˜rĀņÜBáîō@LÎHĮ|ū85sRƒė0,PBŧ‚HÚMĀāđßoŌĄļŗŗÛ<ˇ 9hP6n2ŪͧŊ%k܍Šĸá&Ø^á՛(B¨áq×߯åR ™,í.,á{{›bZ5‘ŖŠÉō2OéNĶ ļ˛ÕbšöŅĻĩ— ´âP23Žü§¯ž–ēŊäú…ĩŊ•Œ! ĮæAfÁ#¸ãčSi´1į°[XŖ!eVeCŽŨĘzÜ{ŠėtÍ.÷R´{kDo-â}Æ` "tČsįųg^Ü5ÕÄbw¸7> Ģ€‡ųëPi:ė–2]É ãÁšXFŽæEÁįoˇĩg&äŦ.>Ōîx­R2 iļFdlˆÛûÁ¸ĮCΧԝÚ*MĢIöŠ Ë1’̜ŧnŧdU(bK¸Ĩšē KņŨXžF*k–ĩķØXā Œˇ^¤÷Ŧšœ}E{DwļŸl-i˜ã–â4ÜI.~nųOãô¨¤×R°u 4e•‰€G|äōx˙õÖD,’+Ë!ŒĶ~’8č:ķßņæĒĩĖŅO%]œąpācãëYŪR%ÍŊ +{ÜO*…t0.rž˜ėIįü+BÎxĻē7vĪ šŪ9ĮuĪ8ČįņŦw‡lļú…ärŠ ŨüĘIûŖ'އ§øUËK´ļyEcv+ŋ#™;įŋ<ō´Ž”îTtFÍĻ÷†=îƒvK€IcƒĮNõaīddHåwUˇmÆ-¤nĮP=ĀjŦpŨA§yÂŨ˙zBļâ>QF\įôŠīŗm °–Pīĩ!Į#8=I•ÚZŠ)Ŧ2ŪÉžŪ6iîɁÛ'ųįÖŦ_Ŧ֖&ŪRžvLŒŽ˙+dņœk7¯ Hâ„mEų˛IÉĮÔ~XéNāG‘Ų îÁįˇOĄ­Uf—/r”™ĶLĶ-íŅ•įnĀRXŸ\“ęG˙ĒļžH–"Ī,+ާÍۊōŧͤŌ31rI\)eã<“Yž}ÎæP̓÷†ŪŖ­uI¤‘ĶV‡ŽVÍ~Q¨Bp ÂÜ)8¨¤×tĐ9ģB}JîūBŧˆËr’ŒęO R;ŨH@ß1öÔÜvgŠÉâM5A˙I}?¨Ēã-9+#Įîį˙¯7[;‰H ­ƒÔą˙–M&hØDįŽis™ÜÉãģHX`w˜čjŒŋFÃåB Ž›œļ +tƒīQNM2W8V,Oe\ŅĖ7äø‡ČXãQÛh9Īâk>įÆW÷Rí¸“ËVÂÃÎyĪqUĄđÅôŲũÍĀā˜Hķ¨ĨđŽŗ&zlޑ⠕r2zæ‹ÜÎwļ†-ÅԗŽyĨv%#Sķ6Ō8÷ĮHÆFã 0M›|Œ’xõéīVáđÆ ˛t‹Ô(OŪ9ÉÆĐdäsZ>OŲL˛MosߑUķŊ‡Rp@Ī˙XQ7c™Ŗ"6¸hKģG•Ü1ōžFâO šČ•!Dg6„'<đyé_ί^<˛$¤6x!œqŧīøqū•ųjä¨ÜÃõ#°ĒŠęēÜŨŅRßíqA}kjņ™<É#Ī^xžJģŦ}–XrģE…†$\î`1Á!¸ãŌ˛´›ˆčEt’<1›sŠŲ¸ į<ņīøÖíÅä쨘ŪC–ųūVfÁĄÉœŽõm1=îsúEžåĪjeŠ'*ĖĮnƒ×8ŨĮNEję7ņŨB! mĢŠÚš đ; ãžũéŽîļrK$RŨ‚ĒŊ~ž¸˙õÖEœ‘ĪxąÜģ,BĪšąŽzš5–ĸŨÜÔ´cökˆc €Œ¤ĨBœāŒŊrqéEŧ×—”ę6>dTčI÷8ũsEõäwĸkKĖ…<Íü´.Jã{˙¯WŦšXßė­ ãAG_Į¯lV7ĩÛBKA­nĸî1æ–8!CÛFĮ##šÆ{U™6‰ĸgcĘ…8Æ6ŒûĮĻ Ahę˛1\6wíq×q߯åÍOq4¨˛InüČz{gŊG3æą }Lø´{Xn|á’î éČãõâ­ÜÅ,VÆëäVĮČBdÉãŽF3SYĨ…´“ÜMœ¯&ÂėH9ųÍK`ôÜ.\nʞÃp}Æ8õ­ŪŽåÅžĨ{kĢ–ŗ‰Tū÷ËĀ`}qœgõ¤ą”$ÅŪ6s˙`Ž2GjfĨØîŒ–Å⌠įˇ~}§Ŋ2Öödē’ŪB&ū 6qÃņüiķKâ“5ŌĐŧ^|rŠÛ!a\n§õĨ3yČ$fe•,{u×õüęĐAyŌĮ™UÚU°AÆL õĒWF-•LʅHßŧŒ•ÉĀëĪŪoJƒ7M+ )3Čûŧģ••Xōā įžŊŊ:qSŨ.éY™I;™•ŽI8ķĮôĒŌ`iŌō‘Ę2Ž@Ü @üN܊š9ˇ,`,Ų-ģ Ķ z~YUĩŨ„õš˜%ßīŅų'sõünü?Rž5ˇ0ųPÆ ˛#nõžŠy´™ĖO%ŲĪÁ vįûŨ)ēļæ ‘,™Æ2¸ 1Ôãŋ_ōjŠX•ĒÔŗģĢÆ]w–Ë?ôûšë΁Î*”Ú8E“îļāpq_~ĮôĢ‘F< îęų]˜ģ˜ü$`ôīT¯­$Ž}Ánc×7<öx÷čj)×÷ßc>ox˜C}§ĀRhūR…ƒG†W\āŒôī͍§Ä˛\Z$‘ĀĄ Š\ž0}øĮߚd—ģq˙,Oī°ņėäįpP3Įŋ°Ģú|ņY,qÂáÇؤ’<į¯n?J­Y8%ØŊĶ&ô¸Į4čŽāŠÕÖHŖv?:Œ•}Ū}@ũ*ŽāŌe§gfgjíZ‚B‰ÁĪ 6ād§ĢÂ!AōmS" nÎN? âŗ¤•丒fŽ&;œˇ^}sžŧUØõ$ĸąŨ;ĀaÉ>Õ­Zš]lHdÎÂv}įŗŽ1Ž˙ŽyĒōŖ"¤_,ŠÃtcaĮ5ĸÆdː60zrzsÜuĒ‘ÎąHÎZ6U]Ŗ9ĮšČy¤šö4x#°r{ûVdÜÂîįB‘ũĒâ&iR5H‰MŠr03Āč:úWmî>Ícm†8läœõÅb=ĖŌ",QäˆĘŽqÆ89üÍOoŋíQšdÚNÁ ČØįEI$Ô{ ÎÚĸrļ,Ō,„d‡%yšĪ3ČNGŸŽØũj­s~鉨,vė9$ž?*Čią_1ø8ī\Ōo™´O3gEyķI ViŽ›ÚLaOŽb\jĩ0YKkÁ’EÍYü›ŽWh=9lWČGWšē’ģˇuĀãĶŸŌĄY$yÖŋĪĩ˛W¸ôŦŅĸnU†HĐ\ŗˆÄQåžHķšę˞¸ŨÎ}é ēšļˇŊ€C‰¤1…•yОų ĨOin“¤+›xV`H9bä1úŌZĖŗJf}Ęč€@Áč=ķÅę;ŊTFO´Ãĩ\¯’3ĐĒ$qČųAĒŌZ‰ž%šQ ŽyœŸ$žü`Ô6p#YKpdĩDė"@ę.ėžŧôãšĩ-ÅŠ–;Mėä„ũûœ“Áī“Tî+4×xZW[„o-ÜFAÎđTĄëÔdæ˛īšI_$lĸhå™0>`ÜéŒ~žõ\ŨÎĻxã&Ø;3ŽMä¨Čū”š—˜ˇŒķJÖŌā1;•AĪסįBž~†ŦŪu”RÜģÎáIį×°˙>ĩrÍũŠ_˜ģįĐq˙ęⱟ*"I"ƙrąÉæ]Ąš=äė\Š`Æ>ĻĻēEkÄģI#ō$pÅCnōšä×{ķT>Ī,R´Ąc´0#ˇŋ=*ÃE"ƁĸØėģwõüxāūu”­ŧEĐØļx¯XÚ¤Æ8ī9ŖŋzŗũĘ,—ą•Fļo”Œnlˇlõ\ū5EŦá‘yBĘF<ŋđNŊÛâŠV$ŌČÛVĨN9î09÷į¯ã“–ŖŅĐöÛ)ĨžY!ERĐęė~eôųzŒãVîtë {‡Yã7 ĩ@c÷‰?îûÕV{§Ŋļä—å€.pgÜqVu=SPŗ–&Ür3G‰#$įõÚīFBĶMyR™MĩNŨĀ…;Y°tę}OJžt;yô×kYå–ô“š˜íqĀ Œ‘ĪSß=)t=fÎ{;xZŨÖpšk§*ųČ#œs‚:vĨ}KN’úa4Ķ™ZSi0‚p1´įđÆ\NåFÅxô‰˜ÁjBĀūQpJđõĮROč­6ßÃ÷כČ(HRH?Ĩ\ŌgžŌoī´číŽ.“å’ÛÄ`ul/sÍN÷đßŪ[ÎĪ$QË‹r™\ķÔuûõ­/ÜÚ3ļÅ_øDYNéī‘@õP?™ŠCŅ×]@d‘úõ‡uo­\%ÍüȈĨ7ė<ã‘YßeÕ&āČãūųV—]•ßSĢû†ãë4“LˇôKuáÛP ĩcū˙?úŽ@č÷.?xāû3–§GĄ äēūĘRæ+•3x§Aƒ˜mmÃB ū€Ô/ã¸w pnĨc  92§õŌI);yËNv%Äĩ/.‚ÚAéĩūmT&ņƤŨ#?Œ€%5xijÅB[Ŗ’2\šąũ‘4j[9ŖAÁ)'ōǃsvBąŒúŽģsĩîdr…KۖÆJäÆ{VeŨŊėW—Īs‹Xū`Á:ƒĶƒÉëøWCtŦf ´’BŲ(NUNpæ,Ķ,tųĩ{YgUe•÷bM˜īŸ—ņgųW}j0+ĨØÎkCAĶ%ˇļ/$ĪŦFą'B:Ž?ZČÕŦÅĩä­5ŗDōdÆw žø÷õŽÆkļ€EæÍĄ1—áŽqŒ{ŠÍÖ-m ˛ ææQ´<’ŲŽ1ÎsÔŌ;BūLœt8Ë[iˆâ9cR‡§œĒĮĮŸĖVƛo`-ÍxˆčwuËn˙įé–E¤™Ĩk Ŧc`ĮĘl‡,ę^>žõ™<~DĪ/.HAŽßŸōŽWīis7އE1Ķî"‹ÉfiŠī*_,luÆp~ŧéYQGÔ,ŅÁ´G-ąˇK€N=}¸ĻkA*CH-ĐāîųÎWnpæMkN˛:8–9dŖ6ņ€§’§b¸Î~íd͈r´fXģAzĪûÁo… Hãŋcũkr(ü™€Ëø1ÜöãߏΙĻiq­Ø–hō ļÔ'aĪ'ƒ“ųV¤q<„ŗÛˆ#‰îãš2™÷{~ĸŗŠ$ö!ŗ2C}rąą‘š"„ųe@T9Æâr=ņéD“ÜDŪT3áŽLã͚ŗmw‰%ŧ¸6°gķ2Ą FN ãž¸Ē ,w)åI˜ūPÛ¯ŌĄy ąaŦîo [YF~Ņ9 z Ī_Ļ h^yškĀ—Jd…Đp2€G˙έh‰6œŅŨ€“[ËÅebxĪŨ>œÍUÔõī-eōã’IC™0Üc=ųĘãž}Z#g 4Ķ!Ö¯ŦŪÁŧ™&‘¤?ÄŪ=8žũëĘŪižšSŽ7¨Į§ô­ >kíéíåĀÁļŽHÎ{sŒã¯¯ÖŽi“ZčwąˆÛŗÂbe–Lž8lž^•ĸ\ĒÃåå^¤w2îđ‚¯ģŠ'ƒßĨFâifˆÃ/°ĸ°Pw7mŲ€AVe™oļ%,M†ąë͝3Ā9sŊ2ŪXNAy8Įášč„˙vŌ.úXĢj†51ȌĘĘQ×8 äŽūŲį5QuFˇ˙G…dV!‹–ärÜ`Ÿ.įW~ŌōĖÍ2Ÿ€Įœ`ô'ëŸÖŠĪ×oŽĀ3Ŧ8î8ęGZ'$ÕÉm­M;;p÷Pé3 Ą•Žy‰ĮŨ%O$gܟôÍ1JĖā+0 p1ØdÎ2r9ÍZqĻ‚×ķ"ĖđÄœ‰$Ā¨ã?…XĶßPĩŸĖ†bŦ3ŠwôÆC q˙ëŽxļļØĪ˜ŗĸ¤RgŨŨ(´7Læ&6ąB¸-Œ ãÚĸp.$¸‚WÜĀí}÷yÉĀäö¯cYˇq]2Û/œ˛[Û(xNyEŸÔį?•gi§ûuā–đĀÎ$ŖįÁ íÉô>ĩ. ŪÚ0QšĄuCv˛˛c1åŽJ?¨g ü ô§Ú] Ž8Đī8ŨÛĩŗÁöû¤~5ÕĖķ'•p/b•Úå0$äc  õqīMļYlŌeO)Ņđ1üÄgøO\ōyԞąåcjÚ2Ėڇ•k! Ä"Ÿ,+ô!†[§ÔT÷@öpO,6ķ |6āQ×ųzqIí]î.îÔ9„ŽK }íÜ įAĪŊūtłJȲ!pĘ3ü ū'?JKĨˆš3Ūŧ6ÛÕŌ4IAU+žgčqÆ=~š×(΍NöŅ6ԉyČ=\‘ë’ŧ{ÔÍ’VyÉqî;įúSŽ5ˇ…âWtc—ÂŽå^>Ŗ8HīųTdÖËėjÜ$ĪņÃ&J´Ž~gnöČÉĢ[HšmĖv.DVk€Üō@Į99Į>ĻĒĻ„ˇ‰0ŽmˇĒ`•JŒgælįœõüũĒKō––4sī[‰dŸ%A'-ˇ'“Ü~5Ië íb˜ļ¸15ËÄc„…™ąŽ'‚HätéšcM0"=íåá¸ųšé߂?JmŊô1ĒZĖėÖÎĀáūčf_̓É˙õÔˇw)<åÖ% ¸oldžŲü…uBĸįRĶŗšÅØ2ČԐ1võ™ĪOz‹J1HKŦÄ0É.WĻ9Į׊ƒQž3q:ō„ƒ´CœqS[ˆ4b9ÜG$ķúĶŠQÍŨƒ:ą7‘ IoÄ"âGķ r eU㯓úæÚ.VYdY îÎA9íųΧ°*—fˆ$0Ŗâb;gëVnīŦn¯cŠ+Hyq*œđsÜōz“YļīØMč$RH2j]œ0Āų°X bœę˛mÜsÂ¯SÛІÕ$X#‰‰‹õÜ3ųdT–ę"G`›ŲbP 7 @Ëu÷ĪĩJNK• W û°öļČČô.˜#Ž0zö==ŗëPÚ²4ŋh™“(UŨc-ķá<ŽßOδ&G–&0 ˛• cxëŒįh8ZÁ[Fˇ¸1ČŌ!wØg˧;q“ĐæĒޝBĨfÆ0fÃĀílîĮ_¯ŊhCÄŦ%x72…Ɲ~GŠÍAEą…"ķå9ÜûÉ9ĮĘ;ãëÍGc$÷ PĪ‚J„.FÆ=}ę'Ēܖ™Ģv¯–Œ>|’á# ¤tcíĶŽj†)tåb¸”€Gđ†ĮnqÜū•}tųaĶá˛ũāR‘Ôygž:gž§đæ˛JH“w“ŧųáŗžœž+§g;ž…Å“ģ3Û[ųQūú8Xƒ#ˇOĶžƒšŽą‹É7•B—ŪˆFyã*qũ:Ņå)ĩRYpá“å~˜˙#ŊhŲ[Ĩaˇķ ėç:s‘ž=kgRôôęUî‡Û^Ak[ˆöžāSä?—¯Ŋ=MZ’@ Ē”āį#?ūŋÎŖE´ēh¤1)Ôn,ž¸#8įŋ\~\WBąM",1J¤…p Ā ō3ø‚&ØÆėg_—ŽũsųqVw +†b=ž\ōGįŸĖŌMnÂŌڑĘb$7rzƒō9ëN÷š^âę! Dc‡Î(‡,™ã§LŪŗÜÄĶ~åT8„UÉ9ĮOķÅLēy€ŗ™ˇ\ā˜Ę“éžŊ*õ84ÍB)BážAŋjpÃßÛų֑WҍžpŠ[…hYL™E%ŋˆ–ÔķUã2\]/‘;88›ˇ_^™Ĩģ¸ŽPĖPī(ĮŠ$‚ũķüĒ[Ą3ˇÆŨĸ;׊Īl}qūz ĩ{ Še.mîåa4-Ā7   ãŽ1É=øô§ea0Ã(X‚rAÁų¸ĮN:L‚×—i i;U:ķÉüIĄĄX&ē6ŗÍ,GnCĮ‡ 8äœr{ķ\ōiģ =.léWY×-§frČ0HÚĘA펆ŠkŸbĩņĩHX„ō<Ŋ­¸ŸSÔäÔēlSJģ•lS€z×­Y×ôKË ËQ¤Šc,DcmÅX¤ë†'͊Ū-éäm{̘ŖQ{™DW+ÚC) ÅÆIĪR=MfÍ<倆gh# ʧ'o9Ā>™ąZ˛ŪZM åQËn;x`sÉĮō÷ŦČEŽAÚ'˛ė$€0ĻzÕ)7ē1z2ņŠRt"F‰eÁųK0'Ž?OcQŨŲ$žHđĖ ŗîĮ#æĀéëšqÔ"ąKĻyCČąųQ)ų›‚߀ņoj°$-áčį˜–&Ë)9ĀŪHĪ×h¤îĩ]QœŗÛĩ‡`]ƒÍۃ;‡ŖcŒsĶŠĪ­\Ķ'Ė‘—V(Øā°Į×'?ŽzW?&¨eĨLfV ܌('Ĩ[´ÔZ{q Ž6ē“bčĄrIįŒĮáS:mj-z–ĩ´ÔöO[É Ėáˆ+ŒGØõ>•ĪTdŽI\[;<˛*ņģp°ĪzåRk‹GōâDo39_,3Šéßđ­8ãv͉%Yf,]tÆ?žúSi%d=Š>"•FĄ" ?/ gå'īŽüą§Á˛ōÆĘŅ™ÖR†T Č$c$õÂôįŽ*+˜^Xõ™'P†UPŸŽáž=5Ė$Xbb§äPy-͟ÄÖ°IĢ–†‡ˆ-¤—S‡N€|°Ēž;¸ūU;8ĮĢ.7Æ ?žeęÔ|Œ}jÜĶ‹¯ĪxåÂZŗĪ3)۝§åQ铅üsS[JŗyšŒŌoiūw ÛO90qô]¨Ąn K…žI՛a A*āuÆ2LĶ đōŖ26ä$‡L_į[ˇ7BS q[ĮŊŦ%Ũļūđ–MÜ˙‘ƒøŠŖĸ]ŪZ›1eēˇRÎŗ4%HNrHč#ŸĨ`’oR\nGg{-ÂI”(=ģ z_Z‘ãQēäDæA!á˜ã#˜ü+:Púl1Š EÜW*Į—‘õęÍ­Ėqr[{)Ā ķ9é×§ęk9GŦI4aķÆ|ÂŦăŗy$Į8ÅG;É•‰‹Ėãs=° œ֖)!;I™ø%Î[s§įÍAöãrŋgD“ŠG8É'˙Ŧ*5c4!G•œÁjÎ+1lw€zįŽūøŠô–VŊ’öQ=Û@Ǐ8‡æ gž8ŨøÖZNöҏœ@İ;Ú@ųˆÉāŽ*Äw7Ky5ųŊ¸`ņ€ !FĻẙ˛ēeŽįI¨ę6šļŒˇQČé¸B7 dČęyņ¨ôT“VbK”ŗļ'Ė?+JJ‚8^ũøīX÷W^C[ĩ“[#˜Ę+@ėv˙fÎ98ëííZv—­á†ÆĘ;XÖ2fēķm\g‚rG'>įŠ:ŨƒKšá+#j—QčĸPW Ōx^<֕–Ÿ$7kŽc¸Fų2šûŋ˜ĀéųæŗF¤Ë~í$“”ˆÜ¨Ãȁz7¯§n2}+­°ģSH¯ĐíęÛB bzũîqÉ˙ÖģÜŅ4&Ĩn—PÅjXGyŧFĖÅļM…ĪaŒņúu¨ađ„’Ē´—hšė¨OķÅhi@HZI#IĒ‘ĸa€į%9˙ëWA tžb16Œƒˇ¯ëXĢ›FVG3ƒíŧÜ=ËíĮUÆsôÅHūĶâŧÉÜzgüui§LĀá˙{˙­Q>Ÿ,Q1žî4$đʄãéÅ[§ä_?™ÍĮĸé‘#O•N }Ũ:—ėÖąÛFûA8DķšŨK;Upcp8.œÔų`¨Øģ\ÁŽ °[ã'°ãY>%´+Ĩ¸Žā u$CËŧ|×lˇ.¤`ĮĮûŸ­AũЧMŽxÜV,+IŽväú֔å$ÅĘĪŨwö‹eKy$Ú2Ao|į¯į]o…áô¨ËBąßJ6˜Áä)ąÎy'&š VÎãOņSÆą´{6ÉöxåÁ‰JĢSé’Gå]ī‡uģ;ũNUŸGXޤUc")mß(äņžL×uY7OEЍ.sZÕÅŊžŊss3ŃÕŌ%ÎpF88Ī͝zÔŅt›+ûíBōdû,†=˛@Ŋœ8šõôĨņÅĮˆäm;LHãŽŲüųHÆāWŽxį’3Ķڙāȧ"ŧK™Ąpđ†2žkŽ9 íÉŠ“æ¤ũĘåëĪYŨÛ4B{ˆ›ø]8+īū}MsW bu(šŗ,XŒgô?Jõ--ʗŽŨ”ƒķ|Į?<÷§ē°‰W>…ąũ+ĪO”^Î=äQü(ē<Ŗ}ąņÁ—מ{ŽŨjUøqŠŲŖlžQ‘åíÁ˛ĮôĘĒÎڋ!HnäČėÜ}ū5NĖ\‹ąæ?đ†ëĸMĐC,O‘–´0éĐU{Ÿ ø˛ ;0yA ‡Ücŋ˙^Ŋi6îÚō°`9ųւ–ō ¤Šö5ŠV'ØŖÂī´mjmK{é‘Û*¨XãCŒ3Ķŋ^jT‚)­L?f[s˞ģ?Q‘‚p\äpkØæ´ŗ2*4—,Œ¤üqUĨŌôKÍĘút’äFq‘Û#p㊆›Ø—GąįÚļŗ¤o#΁ō3ü˙ũF Aæ¸ļē@ë…ķpĮûˎûôޝSđ……ŅÄ:lHWh>pPĒ3čŋõÉjÚúT!lķ„XԎ3î1ÉĮԟ˛žÆrĸĐZŪZŲj“Ú>%Žę$d!FūĄ† sĮŦφ9íƒ4÷ÁuL‰#“Ô~<~5>“Ļíˇģšīo—‚Ĩ‹d,1|dūgÄÖąÚĀļō´ÍĩĖÁ‡CÎ1œtúw4y\›inÄ:“™4×fhŪcqŧL Ú§:äãŽ=Šļ¯%Ü%ŠÉo qÔtčqƒôâądģ›û>Hcv>TđC2ú€{ŽĩÕÜĩ•ĸÁQ q&Ę:yęxü8Ū:VZ™×"ĘfŖ6ōØŪ0sËĨU¸Wķ\Ŗļ×BŅwÚŽ˜é“øT˛Ü,c/ÉĮÜp#ōãĻ+V;Û8m-­<•’ņ?}æ’Ģŗ<á‰ëĮo×ÔmŧĖ;+Ycąķüá#`:ōAūu+‰gĩ(ŽU†’8ؕ<ŧž˜#‘Įĩ[u‡ėōNJŲ#‹”Ûķu9ë“ĮZ­¤´zŽĒ0Æ1—$ۀ¸$ôĀ4ˇģ@ŽŲ4ˇÂ=BIš0Ȑ…ōG–{„?dÎ:¨•qĩ”7‘“ĀĪŽ+ąˇšą“@šŌ+Böķ)’Y¤l”ÆpTuzĩÉë°­ŋąFÛ’˛H1ÁonÃn3õĨNIú‚Eáq×÷Õ­•Uú098īĮįëW­RŪâÕĐJą¸ˆ•fSËp ôņíÍQƒOđõ€’Ú)ÂJÛ0J–{@ãõŦ´žõöŠPsåũĐ9ã§įŊ)FúŠhą%đ,`yįUÜä•Āāúcļ1ØĶ.îīĸģuDܙ\esŽĮןÎŦEÆĢzŌĻÅ„vrÁD gרœöĪŊOsį\^@¤ÄĨˇf?ÑÆ;÷9īÂ§KĖ— e™ŗ˜ļydŽ9=Iŋ­DbēļA+`wųw î}@ĀäTĶ[˛1cš™‚đ:€ŦĪPK0ú-ßXãŋh'یŒŽ?AÉôĢ]†t> …-Žu™­Ļ•dpąaxČn0z”Ve֕–ŋn’ö)äļ„AEp0Ā˙8c߆jü˛,š]ËĨ`ļXˆč|ĀɌœv( ŽoQ•¯íŦįXÜʀĨËöbÁĀú̓(ĪĻ÷U•! ČwtĀ8$žÃ§#G5Ã}ž?ÜČÂ1’rN ČÉāŽ*M%U@CæĘØĮŽz~9¨.-MĩüŅ7•‘M€w”“Áãļ?Ĩ]îė+ßAdĶ|ˆV[Ĩd¸¸‘™bČųWԏŠúU9-Ũ ÎÎA$*äĪ~øũ3Z÷~tk™ä1RʈBęN2sĐí>ĩĪŧŪqc+ʁ˛}tīŽjĸŧĮÔŲĮ<1\5͞4›Hf#kÜĶüzօ;*ėĩ¸šŨ‚;€ęíØ ˜ âŗ´+K-Ɵs<28ōÔđ8=qúS'‹ėZšųFFˇ.<ĪRšũxÅ.灝›<ˁąFāÜmVôīĀũjŠ,ąJÍt žˆ>ž@:ŒõÍ%œ†vUlĮjŖkĒŽpO>æ™o*Nō0Fnčų?,c<ö<ŽO­n.čZ–ŌdXá–_2Ū9ØŖíœĶ¯4hĄĩķÍæmđ%*˛)› ī€8ãˇ?Z¯¨L†ÖážPØšČö<}Ū) Úũ’6õ,¸6)‡‘ūMZŨ‚W*Ø9I~XäÚų]ägŽ?ņîĻŽ:ÜC4D1;NIØ2[$w>ĀõüëGLŠÂ;(Ļ ZęÚuÜåAè/ln}i’Ũ­Ū¨RŪeRėweFßnŧŽxį¯^•*×mė=ÍÔĄģšîŅYĖ?ēÁČķpąßåû×1l÷$1ĘDÛv’Fq“ë˙×ĢqG/ÛdFmINœrI#ڛh|›å*Ëc€›ķøzä~ŊëļQ§Î™vЏ†$XĘU[7<‘ŽŧŸŌŽY˜B!ÉÆw(ĀävüûUIÕáFđY•‡8ī×ŋJĶą–Ļė’ÂČųē¨āŸbOá\Îü–Dn;tŒiĸ;„0Į\“Øœtũ;ÖēĨĢ$-Ŋ,ËÜdđz˙œU›Ë­ÖŌ,m$ją†hßģ÷T“’2Nk7N%§…$$ÆN äįŊi…K™ßąHv§NÁ˛ąÂŠōĻyUę9úįŠšm,ļ–qˆ‡™šHÂŊÎp:œņUŽ–Wē—÷˜Va•Į^9ĢÁÖ9dĖØ BšĀq\ŊRlM"ēÚÄ:r<Ėü§9ôčX6™8ą‰‡bŅ r­ļ# œ͂OĶéZjoB€&ŽUOô­d’vŊĮhÛS đL­,3 ķc&ÎAšôŠ"Y<ŗŧ•–F^8ū~ŊETķvŲÁ#eŗÔã?ŜĖU봒kW‹;aŪŲ›¸˙'ōŽFŒ†DQc"4.–9äņ÷÷ĢwļŌÛLEĐš@ČžoĖĀö'œj”1Mof|ąš°ÆBŽIĀ}ãNZ™ī§—ɆŨZ1›ŖÁ#’qœ÷Æi$ĩEFŨJ÷ŗK&rˆŖ{q…៧ÔķYWL$ÆŌžäbŅÁĪũzˇs4R$ƉÉÃsԌŸÔTpG$Ė’ Y ōįŠüA?\.•ÂöW,iGL6Wr_ÚI<ÛBFCãËųp;ķU¤žâv‰vŦxHŅVÎ3ĶĶôĢNhˆiãe…Fc @y'č?ũTį^˜?~˛F ’ļ”ããĻsžœĶ™0nûŽR‘:Ëm˜Rc¸2s“ŒpņLŋ¸’Yd`ÄY°åÚÆOaüšĻIį˛nÃ*Jō$=3üŋ:s7ŲlÕ C|žrĀ‘‚}˛?JɤŨØEô/i÷ ko#Dō2ȀļürzžÜ§4ÛEXôûáį<’HęŦN@É=}2GáU ø”œ*FÎĩ1>ö–5ˆƒœ*ƒÉãéŸĀĶeœZÜę/i+y¤0ÆĶ™Āę3ZArüĮĐMF >Åz‘•QqzÎI8,7˛"Ä9ü+aôŠôXWNš+}Ë&IVûÜs–įĄcōĒú…ŊÖ¤ŅJŌ7͡FOׂ׸Ōn4í;Íņ42Ճ8ÚN>€ÔTã ¯t0ÜŦŅ_0I&æŲÛžlņž1€ZI#ŧˇĶ3sC0™ĸrŖsåļāzƒŌĸ´Ûö9ŠāģžÕ'7 Ÿ§j‚{ļ n…0ō°Üų›’>÷sĮĨdšļBDWv’,g‚yåË GåAĒļpĖO^ųŠŦ4ë‰cîĀ´HÕö;Ë#‚>^;gŋ|b“]×D›"ˇ!•§2.@āā€GaøV—Ûu[-6+uˆKk2o(Žrps‚rqíZt/CBjút:|ģÍÂŋ˜ŌĮNHéÎOäSüí&Ī{Ŋ¤$ˇ*Ī(gˆęšŽ>ĸą~ÜLRŪ‡esl0Χ?į>õšãTŊļŗ¸’HŅåōŲō8Î0InCÅ×ÔŽî>ĮKš™SŽŪGą@U˙)¤*ČĪ\zJ~™§A}ŠF×wĄm#o>HæGÁc9Æ}ĩ6õ.­$6’Ī‘2oMÛƒ´”くjžã˛—v–…”Ļōķ‡ų€ëĮ@sJúh= ģ­.ŌčÄēlRY„^kžįuÆÜm€Ü:āQqĸęÜyņG4jX‰D^Y*F0ܞ‡w՟Ļj]˜’(䅋 $šĀÆtįŽ=ķWîīfŒ4ËvĪ¸¤áØnÃv# ƒøÖ2~EÚ6¸šlđęm>øö°Xļ˛(ķ9RžyÎ?ĨuW_čiĄuŒĒíE…0Ŗæ““͎Ā]Ũš–  ˇŒ&Ũ~läcĐāŽ:ņČ­5kétļ´äû ĢĘīƒŧv™­"Մžļ;KÛö6¤‰€˜ío('Ül;į¯@zžõ§¤ųvĐ"CqrŌÉÉûâwc§ ôÕĮi:ŲDŽyTH„ˇšXüųč2:•×hË5õäĶaAgÂī'h?ttôü+z}Íĸtö˛Á,bA+ŒũāīÖ­#Ŗ˛°ĒpË+F˛*ídRäMJōJØÃø čæEYܙâĩ”`Į¸}+>æŪÚ5ÜÂũÂE:MF(–ĪŊĪd<ūBĢJķLÃä+žB“œÔš'Đj-Á2) 3Gž™`[ëéMKB fâåÉ=Û§åVȆ=ŸB*MęGŪ:vyŸŠte›ÆVq‹IYnD~dĸL€á¸Æ:~ƒÖŦøRĘâ=FåÕaY&YĄVÜĖ¸ÂƒÛî…üņVŧkĒÜiZ•ĨÜ7;bˆb^˛œ’û|œû}j–‚ą}ĒÖâÛNŠGŠVˇ™å›0POM§$ã­tFO’ĪbåŋÃ5ώkvˇ’ČŌ~č[¤Y*Œbq×§… Īkoâ-2Cgwín!3bŽØØ0=”zöé]Žn$‹PĶÎx­f&)(c¸í 1‡${V>œ×ÍĒũˇMžFŲw#%ŧ˛"6‘ˆÁ †nĪĨi rĢözôqÉ;Xąįzį?ŽsųæĨÎ_{Âģ€ĀeäĶ2d|Šãûƞáâ*žXįЁ\zXrŦaŲÔÍÔã“JBö ‘Žâ+pĖH3āryŠ׿ß#áģėũzŅdÃ`(7ĨƒœņQÅF™˜)lœ˛’ŖōÎ)á'+‚ą0įųQ†Ī%āM-€F’ˏŨŗįû„œSž×NvYD’)€qúS@“<˛‘ūî?­.Üôfũ(æAf5ãˇķ㘙iÆŠärF>ĩVú=ú9īO™‘œuÁāÕĻ„°Č•ƒ~ût¤ŽÛ9–MĀō€EÂå9MwEąģ°ˇą´ŽéÔ>e;ryLyŽ'Vø{ŠJ?tŒø'˜ ãŒrŲęnūÕė3C 9IU×=~ĩNSÍÃHŒ2Ãr°’#ņūt—÷Iöq[ž'„5+dh7ÚÆķ÷@čädžyéˇëZ–žÔ-Ն°Æ ۈ9ÄÉ8Ÿ^ų¯Kņ>“¨ÜÆÆÄ];-6ë’3ú×oa­iŗČ÷6ō[ZL˜•“4¸÷įi9īŽũ*œ[Z‘(ÅœķĮ ÖŲ (ˆÛA¸ā‚_č:ŽĩÚ6´ĐĮ œ•QG͜đŧžG`{gĶšĶ“O’ęåÚ0Ĩ‰ 9b¨ îĪČūüúÔk¤\[\ũžØ™Ô,å‚į9'˙€ķū5“iuÔįš•¨Ht{˜ĸĩY7ã/áōÎÖĮ¯éۊ’ę Ą#XG"ČIb7q‚ŊņŸķŪ‰"†˙P/1)vŽ>včĀpÃרĪ×>ĩąrÚÛ⍒I6;÷Á‚OˇķëJnÚ­Į{ˇēąĩs§ÃmyĨš‘°wqŽÆ1žõÄĪ9ãĒ6ö^K({ōJŦ"jHNŨĻnFŨĘ8āt?ĨuˇvŸé<ōĖDSˇæādväsø×5IÆķdĩuts[}‚{ŗ# L€#ädO<õĻ4hĶģ]öŖlm§#§süĒMeL‚Ė‘’ČĄqĪ\ŌÜ<é9[ÉČc¸nëŗ°˙ë×Rq”D×Q—–×6\i ŊÄ+$.üdžH œJX`ˇĒîŪÕ 4ü{c¯ŊEuuqpĒ“æ$KŗÔg=x˙õĶ"´›P’ĸ–5'īŗ–TL1;˜ĮŪĮøÔØI]čBcvTyXā‚’ûNŨ}Wēš@9K*;ņœc¨Ā˙õT˛K„h‚įå`Ē\sÁ>ã'ōĻCkq32ĒF@Ú $ ÄôōšVՉ#gTē2øCNļI7ČĮ{âČ9õá—đÅCult‰âˆģ˛‹d`|ÆlAôéõĩ4}!áÕ4ŨĘw[¯šÉS!P2{ã÷Gē}WˆĨ—ûviÎۛ6¸vSîuŽĮúõĨĻŧОdjˇ˛DxäbūnÉ.Ęņ“ųņė*(ííî5Ŗ’–ŅÄ׌†Ü‹ī€ëôŦĢį3LX˛G$&0GCČüMWŋ’C9ž9O.Tôã}:ūu¤aĐQĩŠ5ŠęsÂ$’RŌī†ä9ÂÆĘ dŽücŪĢZ[+@YŲ$e˜]Ųūözz˙“U­įK§7R¤ĒĸyjĨ™ö?!“šĩdĩŽ%gDLˆÂ.܁ŽĻ­!4ö-[ÛÅīēHđ#e#pûĮvsŽ:c˙×Z8‰nŖēŧ™2ÁFÎC.=ģG˙^ŠgĮ.žĄŽ­,…™ōÉÔ6Bå‡$u8"ē{)tø´æŌn ļōÚŨJģ†P>BĀgæ î3œk)Ŋ†ÕŒI?ŗ&ÆIm§Ũ›'#pÉzāŽŋʝim ũ¸P¸”ĢˆķÁmÃ=}Î{b4PYˆ,b,Č$Œą)ķpÎÃ9āōΝi×:DđÅ$ã2áÁd{ö>Ũhē{ĻÁ#ŽŨ‘˛ņĢ)8íģ¨úU w\îõųļ¨ûŖÕŋĪô­ģ›T:TŒŽŠ8e ŨsČŨųägéīP42}ËŽ-’‰ēž™ĪŋjjJÁА’iPXán§ųĘģŸĒÚčæd† Ŗo0ĘÅÉ'°ŧÖî~∎ŦLĶ]e ˆĢ9¯áëZ˛œiÁĄ¸ ķrQGLzwŦdi!P.Yˇž (ČūuŅéīigE3Ļâ6,wry#đŦî͏’ŗ!ĩ’ęęÖY +Ŋ@ëäđ{j–ļ n]„b܌dûbˇb6SG(ļģŠ܈„r12H} `q“Ž•Z( Æ6#lÉŗĪęjãUĢžãWԁ ¨–<ŠŨĀ>Į­h@ĻÖíVHą]IVųÛĐj}¨C+¨ōäPT)r:w Ļ1ĖUW+ŗË X ~_Zį4ļ—,›ˆâgA%€ÜíVōFlæĄiāF*gƒ‚<ÕΠ„Āßģ˜)Û¸’I럧jՊõVh<(xĶ nsÉ#]¤GņÎ(ųĒĶęr\$ް*œ„ō@āœ‘úUû{QqŸ%Äh÷ ŠK“‘Üļāu•g=ģŋŗĖŪaRBšPņ¯¯ŋ9;%`ž†EÅŧCPw]”]ÂąžO=1ũ8īZ—ˇ—2hVņM)dļŒ”R1ōpZm­ŒfŪYšV‘Ë“$nŖd…Ú3’9'Ū¨ëou;-ŗ(Žv#}Õãũps\íˇeqlÃˍ"”– +ŒŽpcéœTwŒâõMõ +Iˆį܊ēîkšdxZ2vĸ}Đŗ6LüŸ‘Ē×zĩÂh?cwxÔšOsœž‡$}qW¯6ƒ/i:}ĸis]ęv´ŗüö“¤ŋ,-Į-RƒS^\-ÎR0<ŲT3„$`žÍœp2O=kLO8F Ÿ.DĀLņĶôāփ;mÂeŨK+Ļ 8āŒäqD孂īb۟o YJō[Ë,*¤ƒŠŦĨHųũĮ^)dÔ_Ô0ˆ×DEP, ûŲ’}ņPC{)ļŸÉ/ Nģŧ°šL’Û?…D°Æļ/42ę%ˉ,o…*FOA÷¸ãÍkMAé-ēĨ }-tË;S ]#1Ģ~ęA’wuëČüũšŠ¤ŨĨÖ§$ē…¤’Ú˛šŠŪ&ÉV9ÉČä@ûËÕ×î´øgQ8€ģ\“îƒY&āuų*šŪČFAŽ™˜Í)įÎqŸF4šĸ>V]ūË'ū^8˙s˙¯Tī4™ĸO6;§m§æMƒ§ĩB~Ņü7~,h&čŖ4‡<}ķŌp=âĒ8šb=ÕœĀ˙\OÔéUŪ22 dũiF Ō§”Ģ–ĻI^ąHû6=úS•dUķƒ:ŽC(Éū_S9-ÕĒxŽL!BĀŽĄiŲulšĨ(dŒđ*ģ˰ĘĘÁWv u=? ¨Ōé$¸–Ëæŧ€ũåĀÁüQ›LoíK‘s)†Ī–ĖN3͟LãŠÉčUŨ2~ĖâĮ, Ü~ŸQ\}ūŠöÛŖc¨ÁvkxåfįO͡ķģ Ċ˰Á ķX:•Ļ›$gt¨f`|šĖsß3íTĒY8ö<öhc7SnŅĄ‘F?$xÎwsžšâ•Įj„§ _8ہČÁū•.¯5ĖͰˆŖU¸EÚĮjõ9ëoΐʓ<†#ē6wr;v˙ëW=GÖĮF-õƒ,oz#1É0Ú9AVxČęqž¤õč*ŎԁwĘŌ0fų‰$į<9­YåŊžĶÉK’’FK!fųPã8Įā{w¨ÄĢ,)’6¸W ŌĒmÉ<€@ėNzQĪ nS–ØDDQ`†%s‚X}B_Æ­™MÍŠSÉ+`åūwüņK¸ųn#ōžHÎâ0pGCīČÅT{Ų'’KWÅĘyŒ Į°ķYĘ<ÎũƒČžkí›(¤+ą¤b_˛Ž=ŽjŦļ‹ ÚK$‰ @!™8/ģƒéן^E]ÔbŠ+xŪ%ĒIÉ@Hā|ʼnãŽÜjŠiåēYŖŧļ%V7įįi#,OAëė*š{ŪČ6FFŖlš}ä˛īŽ}’ų™Ūvaė@ãž?*ąjBX8¤ÂLD’’†ažüŸÆ‘žÛĻÍ4q"&"û<š>`ÆãĀĮûĀ~S­.&Yá•-‹¨TŠŠįjŒ}1ØÖÉĻ‘:'ŠJ#iũ§åËåÍ |‡'…ÁÎyíß¨Ĩ†‰ėk8žyw1p /Ī#‚Aô÷Ǟiė××´Ë2–qÁ$}8ü3Va–ōĮTKøšõ™('îĪ­6•Ä÷Đ[­cS玒u•Ņdļ‰\Gō€ĖÄį×cíVC@&‰dŠņÄÍē@­Á‘z­=j8<ÕyĄLqƒ’ÍąpĐî9÷œđ<Öí ŊŸhÎKĀ˙ž‰ú-T^–EÄlVĶĪo˛îyKpXōãŽyúÖŗ¤hLímĒŨA9įÖēŽÛÉf˅U1‡FũœõëõŦÛ]+t†IdˇD\ŌąÁ˙gæ'×ōnj­Ģc0[:°Œ)Ÿ˜ã%Ŋ€Š~ĘīŲ •Q–( ۓüGą­{Íė|Ė]#öŗĒ‚ ܃͜Ɲc?”n–('͏—iaŒœûgŪ››ŨŲsÃú\×%Ŗéņ´É¸¨|‡,Ŗ‘íŒr?:ÖÕt;Ũ?ėđÜŧS[¤ŽbŪ0øÜISĐãæČ#ûŨ8ũ9"“Aļ¸ĩچ%/*Į33î9¨Æ~Ŋ¸5ZHnõģCr5 ņ,Ē 1,уé‚>˜íX]Ūī`KK•ūË$Rí§šX`(ÎBđĀ\žæŽk^ŪÂ֓HDi$䁃×č8úVŒ§KšŌ/˛_Än%Vfg ŒU†r8 €:ô¨InIIō‹JëĶ÷Ν'ŊŊŽ \†Ņ`ō.Ļ”NđÂļXžįšė:sVž{sgpa…Ú1…ˆ R¨q߆ę9ČÎsUŽlY-Íŧŋΐ2Fšķūž}€ëLĶ,ái§ˆÍ*´{Ššį'<Œ/§ĸ›bkąVĘØũ˛6,ĖŅß{ /ĄüņŠĩĻ}šÂė˙iHí1pUČ$\ŧ ¸üÍIknĻI÷ˆ"aœĪËØôTz¤s]N`ŽŌA!ĪUΎB>ŋö­_Q't0ËboĻq´’Ļ_bîTcĀlxĪč=jļũ⤗J&R[Ėlā Ž:žOäj kY­ˇĪ,čĨ[ː ˛‘دZPˆ_@. ”&Æ$ōry˙?R{}:YīĘ%ĀO1€Įúûņ[?`ÅÃL<ȂáĘ6Ō‘Æy8Ī5WEĖėKI Ëckt÷$ôãņ­ ŽBÛĪp|ÖfqÆę Ãã°ÁÍg&Į ģš†ŲĻsnĖĖ›w‚1ŗč2sÛ¸ĨÄÃ˛'d8Ä{˛ #?0öĪzŊa!Ō­.6‡Iļŗų—h9üę€Ŋļ´š—‡Vpq´ķĀŌ•ÛjÅŨGŪ8Z-咀g¯\ôūF¨I9‚sp‚ÃpNĖc¨î:~UĩŠŨ_y–ķŦQ=ļA•“ŸÃƒ×ŸŌœ,ŪÄ´¯‡•[Ž=iŨ\9Ô´F\´2Ot ČK~íŋē§ķįü*eÚĘ /’3ÁãPAgsg1cĩ Éęr}ŋįOÜwZĻsĪË˙Ö§vŪ„Úû’ØÄ˛ÁûéĨ‰P„-''ĪķßJSöhn˜HÎū\l°¯HÚ7ņÎ9é܎išt s§_Û.6í@HPN@ÎOąnūĩ˜Öî8Ԇ!† Č ģëœYJŅļ¨&*ŌÄŖ 'Œq€OЊfõ-L˛4Žũp{€VŒēqŗŊ[Dž’bŧyI†Ŧvöor‹43ÅdÍŅ“× ㌟Ļ*œÂ iįŗ„ËJėģ˜gLœž1üé‰=ÚHÖ÷RH’ ķ@qƒîH=šĻ‘,ķĮÍ1Ā/1å€G9Āāw>•jXŦmŲۙtŠžŗÁ ÃÎŖvæ\|‡Ķ€@# ÕŊ>öÂÃON™D‘Ȥ ™Ķ;7 ™<AäVJŨ(UŽė+ÛFÛU—´r~€qŒŠ¯âBÆōXŽ–‹ cåfBĖ ĪS9úzÕEY])$î}GJŽ×˒ÎCum!:Ļҏg xį5VîĐ\@"ķCģ(ČۂžŖÜUm>ÚædD’í<™Á,1ORNk~Å´Ë×íé Ī)ÜžSˇ˜Ŧŧ`‘ųûæŗIJZ‡>ŇQ†ÖÖŅät—r6lčp?ÎM-Ö§41$/ä. 1! F§Œgם֪ÔõAqŠģĄ>CąN3:íƒéTŽuͤŒ „X1ų7`qŽ~Ŋę_3Đi؎îÆūM2Kõˇ”Y–e3ķŽ˜síz¯|ڍĸÃōá‘U˜ã889Žøõę=j­æ­w>øZS š–L˜ÎGN{Õë´ëňęž|áĸÂĢ>6ļ{ļ};Øô­ã­bl›Đmĩļĸ÷(ąÅæČc*Æã1ŒûŊãVtky<7+BÖæD¸“;cpĘzaÆ{VІmHīÚæÔũŒĨœ`g¨Î{ ĨbéWąEqëk!ŗwbÉ€ŨGnp}éõ°ė“ŗ-=š†îâ،E Ŗsœ€ĀđG~@SëN]Émfr6ĖĀoE#ä}M$05ũüī§$ˇ6ÂréŊFāŖãŋo×ŌĄá‚â5Y2ÉX¸Îw–į§_éYZÛ™Ų¤][KÛ;Á|¨ŌA,s¸š-Čã=QĶõŦé"žëQw1)C(‰^@Á=Į=´ōMYĨ(ˇ‚ṡ>RûB˛Ŧ¤–įXX#gōRāLD€pK ãĶĪ(Ļî3BâGßåFŲqo¸žíģrį>8Ŧ›yšX†â#Ûą˜ŲŠņßæĮ?ĨmÉŠlUn@-+ čđWĶÎ~••ĒM"ĀNJī5ܤåŽvį ۜōiĶēu5-­ÚÎŲŪ6ˆ(ÉÜ7g;v¯ŠäœLÔ0D<†–fbØTä7ļô}ęÛŧņ${PG(„Ŋ‚?–6Kš–Š8ķ÷{€í“ŸĶųÕF-7~ŖEÛ­eāEŧQMįlž€céĶ‘íUÆ ÖÂYRA•ĘÄ ĒžwzžÕÛ`LžØY‰§šoŨËŧ‚ƒ˙_Ļ*Û ‹ mˆAŧ¯<Ãõ­å’);w„Zk´iu%ÆT~`Oë֖=Q'‡ĘB¨Ëˇ[h-œp0;ūGiW6ņë ĄZ’*æFR1ō‘ĪôöĄw ÛéwæĮQF1´žbË‚Bōžŋ) €Fp}Ģ9F;˛ųz˜3ę†KB’‰|ÅG}ßÂ?2>ŧÕE˛tˇ-qyģ~ōdSĘ›@^}šéÚŲa´š ÆNŌB°Œr9''žzsTtĢ–Ú ŋgA/æËŅTIΏãĶõ¨D“d=ėGe%°cį*G÷\á†Fw`ž˙úÕNâgy˜nŠ8đ3|šųŽHüŋĪųV īdŸĘÚø#XÎ9<’03žzwõ*¤ķŗIS7™‡QžĢVNėKsFnélü—!Æī+s8㠞Ŋ:cŠŽĪÂúSOg4wŌ<$¸.'ų†:gžF3ͧzÁđĪ…ŧÛÉ&yŅØTîÛ8ĮVQžãüš­~JI$ qĀüŠĀgˇJ.ē¤=Ŧ•`äāšĮÃ@ÛũVĹyčqQËÂ`&zSRDâå Æ×&§S‘° cŋOūŊgGŦĖ<œ€x,Hū•kcw\ėVLËņV­<6°5ģGžnÅy“r6å#iNx¯6ûxŧÕĄŦŗ6āą´ļET„Q¸dcûĘ9ĮAŪļãĨt -Ååž•˛E ?Ī3G’€c>ā u)¸Ž`ą~Ō9 ‰–WCžŋ~sš•˜ÎsõŠ6'¯ëLq B¯°ŽāôŦօXˆĻā{1õá@_”Ŗ7ķÎįFËvnp8úD´ŒŋĘŌ!<嘟ņĒZą=0Ä]KŒ˛ŠÉČŠNŌãGqÁĻ›]ØÛ4„įž?•XOõ¤7ŠĮōĒą&BXĮ ÅĖŌEim8É ōŒŽøÎ*ÚÁl%uH“@ųW×4\Ģųsb/4U<÷ČĮđ¨¤Ôāĩšt™%¸>YĮLÖn*ú 2Ŋõ÷ØÕ=ÅæF9lŠ ų×?ĒX•ŊŠæk1°wC žB˙õĢkU{[ëx\ū]Ęt=>n„ú™õ"ŽũĒ'ļ˜E™a@U_á*?ŠüŠ8§Ŗ%ëšæ×ÖâK™üØÚAĪ €HČzîūUŸgmöB ‡;T…dP3×?Đū&ēũz8ŪVŽÆíʲ,KĐ?Ž ĘkgPŌ],˜``ģ‚õ•e(Ŗ’Wæ˛)Ŧ;Lō:§–Ŧ\'ō¨ŪîŌfTdš9WÉ;ˆ;‰üĢyõ%{”Wû@I[p*ŧ¯Í‚lā }j˛[ÁuĢKö•¸ŠÕ2áÂp {úįßԜŠōĮAĩĨ‘ĪGĻ(ĄˇVžXņōm-´sŸëĪ>”ĢhšˆŌ îsĘõ}\ũ*͔ĶY,˛Czđģ’Ē#cģv>ŊęE‘ÆøöFĘppH=A÷XŊŦ÷3–Ä’X3ƒhĢēĪ9ÜNsĪáũjŊŊčŗ‹Ë–,KÖČÂŽŌúˇŌ­–‘ܰ‘p×=?>§¨ė–æ<'Čå‰SÉäūŧIvb[Ū}ĸäM<ōEķHfm¤Ų°G%{ā~8õ[Ë잂´p;Iä°õāŸÎĩĸ@Rq´!š"N3ŒVNώ4 ōîc,Xž@ä‘Į^œũHī[AļĘwd¨‰mĨ!å T•9Ëm;xú–Ã5ÄÚEŊŒeÖ6F,¨3š>•ļú5Ĩ–‹$ˆ’´˛[ŦŽĐ7˛nÆß` üęeļ†Ú +å‰×*Î>nGĖžj›KPš{§ĐŅË F#_1ŗ´6ҐOsœãØsRŲ[•ĶâXĀgF㜐v‚Įr¸­ļ¸‰íĸ€FŽšg#í!x_|ķøâBąāF6ĄsŒœäķųÔÆZY•ą-– Æ5xūãsķ䌑Ûĩ\ƒL´†{yäŧ‹ÎyÕH§ËL}ē íÆ{~´ë‹î<˛îCÆqœp2O¯š¨5dl ÆĶƒ€Į°÷?ኧgĨÁ;jEg „W—6ĀË%ŊĘ2>[pSÔ09$äÃŪŖKKyŖxfķRé;HX:œp䌏˙UIco;ÅŲČ.ĒŨŒvĮÖ´<°°˜×Fū÷l“ūxĄģuå{›HRŅ`ŗ`ĶÉäœcŽz{‘ÆGĄŠ,mˇZĩŖČ FËąå_œ7G=ēc­JĐ *´[7”ŸŪ#qœsõĢvĐKŧrĘYÜ1ÜI8ČāsŒuĮ¨ĸīb­rĨ”6vúļnnO9ö˜Ü•Ī|~ÜfŦMŲ\r# ÁÆ{`ŸJÎKķŽq'–Íŋ(Ų!˛Éö8­-ĖĖ뜺’<–ĮQJLn6†k”hîá‹t#n?ŸãƒMt>t#*ˆ™Â68P{}q“ôīSMfŅ–(™#)šŲ‘zįŒ~Fūá–HŪ9ˇ‚ûS€Ī úcĐņJ,Omī´{“+(•H ŠAhÃį‚úc8=*õķIŠ>ÉâŠG0>á û¸Ũũî:túUO˛Â°Ö}Á#Hįų˙:}ŊšYGŽb&WnF8ÎĪøūĩ\ŌZĸ,‘Iü+ŦËr‘Į§0ŽFÂJ\…ĪŠīĐtëíCiO¤¤‘ŨlŪÎAˆœ’Fāq[ŋÚ7ē7s(I$ËdĻG  `g'$wæ¨]ŪļˇjĶf3äË´ēƒœĶØqŸĪņ§wą¤1ŧ>>Ņl‹<~l`Ŗ<`•.äŒcëz×ļilb3ŧĨZŲ€ Ã9bpáĶ׎ZŽ͝%֓MRãåŗ¨=š'ô&ŦŪJ^kĢ6™\‰Ędā8\ãôâĄ%-Øښęw—F=Ņ@dd퉉y#ŽŧĖžôÍilĄŠ8ã•dš‘U‹F€„=ÍR˛ž {"]27ĖD``NrOLqWu-&ž)k,ŒËiļ{ō3Š…)ûWφî0T՞ŦŖd$[ҏũõ!Ũƒßr˙SˇŠ9YŅĻہ!WČg™‘¨-mg™ÂÄŦĖT/_súÕHmXDMD[ŖeÉėĻ9úUõšž‘ŅQ-“]+ŒØ$ž‡ŌĨĖãžy˛līŌŌęßČܓČ“ĀNO¸ĮOSZ‹ĨéŦŠËupŒ€ŗ>1íÍKkŠ7îg%ŖDŋ UŒīw ƒƒéUltyõ‰ZÍ$si7)ÛĀ<ĪS“Vo;Ŗ•UIPŧ^ŧą=#šŽ˛ÜK[CoīuV’ŽF@ ôÁõãō*Z™¤,ļ'žŠäŠō6Ú#a¸m ŊžšĀÆ;j{4žFXØũĒC.öW]Ēų Æ?āU<ēMî”Aŋˇ‘úˇ,Ėõįæ8Ģ6W6‘ęH—Đ+ˆ63Î1‘߃šM6ėĘÖå[닩Ö=Ίc#Œ÷}Ņë铸šeā‚đ,/lŊšXÃ@Ođä$ú’*ÔŧĶ4˙°C:\ģĘ§îƒæ[#$ĮsĮĩW“HžŪÚ[é¤) ˛™÷Žųž*=lē ŪåG0H+š‰h ųˆ,1Ž9 Õ[]_ė-šÚ6‰$-´œî^ cķäûw¨n%Ž{ÅļŒ…iY#ŋiVĖėT8# ä}sY1ę‘Ûŧ×m›Ŋ÷"3įŽ0OQU i;ĄŲu7¤đÜPx† {ŊNÚŪ;˜ÚQĩ0UOaˇ@~•Ŗ§é/z.¤wˆY[ŗ$W’‚‰1]ĀtīĮ?Öš}*Ũu?´†Ë;DäüšÁŽŧŒcųdÖæƒiĻÜ\ZiĶëŽŅ23=´ƒĘXŽ$įō­ZģąJĪĄ”c¸šõ„V~aD KK€= į8ĪëŠĶˇ’ĐKn×Z| ¸ũėRžcĶڅļ ĖÉ6 ļ×b  @:ũ?*›÷dPž—OYWʕmlŌ&Vû@ÜC#Œx_įTl-$ƒ_Ô.'œKaßdmÎíĮžœüŊë[TĶí/ôģh`h5äų'ÎB0C–ãõ^…{UŽåFÉĻgvEįĘ>™ ųÔĻ­Ą“ˇB(mc–āGœČ'O0[žwm!@ų›ųëĐVh3¤ŪmÄąĸn…†nr¯^Õŋ ‰‘ü÷‘æ•P !9āŽœzƒYļök8i_tq0 =NöíųÔ]^äļ™VæĘŌÚØŨ‰Ø”Ü ƌ’së’WųÖL7î°CÄĮSJÜÕ!Y’mōǁ†‡Ú ¯°ôĮ•€žSFdS´Ē|ƒŋPzõéZĶÕ:ĸ‹{›q´ĀŪRļXŧzšģ¤˛\HĻíü¸ļ™X1X3Ü(=Ž~šŦ9.fŪvG,zšŌŠe[hÂōm;ÕÆy<ôúWCM-Kĩ‹KU‡Rģ†Îavm°K‚ĒĘĒÄąôę1]Ũė3Ų´ˇÍ<÷1(ŽØÅ˙- č’rO†8Ŧ¤:ls[´9ˇc.ī€ U?Ū椴ˇšîCwæ+Û*1MãhÁla‘žÕÍ)k~…'wĄn++ûŋ69-XJ˜/nŎ"Ž=zqƒøŠ­>Í:ÁZrÅqæ‹h“īōyÆ—¤uö‰|š˜4ūY…g9$.6ŽąœÖĄĐā°žķL“y,¸ŗįnáŅ[0ãƒSš|(\ĢĄ‹.›w{sâÃ^kˆ_#np: c¨ü1[ZW…d3´ˆŅƒüŗor>č<*Œ‚¯wފ_jĪo ‹ZļĀ\ąú`āqĮĨgámF !HĩrŖČĖėăŒgŋь^Ō-Sîli6öēeĻØî’}Ģ€P/O×­kÃ32‚#läŒČÕK}6K{8ã†U‹ŗ -ž=ÍhAŽÕąĀ ¸ĢˇcĄYh1KmÞIî)čäŒ'?ZĄÜûˇ6ŪëŒPąČ1’§šÎļãÜw•;˛™%*ŊŅ?Į­ZŒ$` G“vâęĘ{éô4đ_jåFqÎĶŪ†;<ÅĨŪžÕYGfĪŊPŊÕa´ģĩĩ•Ō6š #váw qŸSž)\Læŧoå6ŗmĮ—""˞cË¸dz;}+‘ŧ’ÜIiĀöōČ Lé°2†@ĀāŸ^ õޟÅpęŪ+–ÉeM‡,29Ā{×- x,G4bŽ0pJãp_P>ž•q9įšÔčrGáģ“ilŅĮ‚ęa?s$Œ€} “ųå'mæyįaq­žWÚėQĪûăĪqZ:%ũ֛o-ŧÆ6Âą0ˆƒåˇ!sîŲZĘ"c†7ō” ƒÔãôŽ.âm}Zi„WeO™3æFœ˛ā: ü}…uú%æšēE¤pʐ&šČ?7^ŧä͍ũÛÛúûÆ­!Íguįr ęđüŦ?ā'ˇĐū6mcb7#ɞ›~aõ,WÖˇ´Vķ,ŦĒ•9ÍXhãuL0F{Ę/¨2ŧ7Ąaą•Tž$P?^xĢ‚HØd¸ũŽ*g)…9˜?Ι<ˇĀĄ‡–˛x`¨4šŦ.!Pá2ÍVžÕaŗŗÃ,pŧ‚<õ+ŒÔUkčYmŨūë¨āāžœãßĨr%K˜'Ši¯7 K!`߉āō3C•Ėį'Ą×Úk6šŒėIÎđ@ūölOū<įSßjv6ˇ1-Äą¯šDy,0'Ÿåø×Žhē¤ļÁîdfj0!Ü:BŲĢz–Ē×P´õĘŪ„7Ąąq§ŨO Í$Rb9•Üūŧũx Ŧ X™đÅÕ|æzãŸĻjŨ”˧Ã*Ģ´‹*ė' 1ŸåūxæÛ K<ÄĒ*6KaNáŸģÆøV|Üú"’OcR2°œ˛šŒÉČ+Đuũ*2-Ŗš•žeA ž0ĄxöúVŧvŅ]ÛBčĖ%,$.ƒ÷Jpį>˜ĨS–ÖĘÚwHî%ž]Ą•Î6“œā{wÍkĩršZÔ[„Z8’M pvāŊž‡ķöĒđF ͘$°Päm-ŋŽ0{ŪŊGZVÍÄ(ĒFAÜØoF$côôãk¸Œa¤%ØėQœŽÜPģ–Ŗĸˇ„I/4Ų…ŪA<āz— ĒÎø''9úŸz$Úm9ã–TļAžaÛíËĢc >RĀΏ•õ+K0)–›fæmąŠž0>ųŠ#hđZXb.ęQįOnšãķĄT+ŧ„îPÁTķ“Ž1īÍ#Ē+HĒI<Œw Œ Ķę5ܯngHųđqȁÁ?ī~„ŌĮ4†y. gËË.×Qɘü8öĢ0ÛÛÚÂípe‘É nŪ3ß<õãŪ’IK[ĘŒҘÔè\úō)ÜŌÖ+­ÅÍävņŗEƛßoĘžK{sRArÍņn;‘ÔFeP89ĪN¸9<Ô{ÚH<ģqšv2’=Å5R‹ĩ@YIb9āāūŋĄíW ž÷ ģ‘ˆÚ˜ÉĪ-О?Î*;fēsŨĩæ2>öNOōüęyR)ĒĻåsŸ_ņÅI‚É ĄP%GŪ<õüę^ÂjäæK—ļšW1¸pvĐtč C<0Éhķ@Xķv0#§ŋ§cMeu”'îüŗĮĘ;žj1„Uāõ^ž´ŠÅŠ Z2Ä21Æ;nį<ôãŋĩJŽ ˜äōĐí'Í+“‚ĀüĪX­ÁUĮfĀĢÎzōLbfGˆ;í †į éŌĢdO.ŖáļÛ/ŲI%EGmšŠãˇķÍ06(mWnKåmaƒœúõØUôA§ŦōāfyU‰#ĐTڅä2ųs$")W*9ØsüYā~•ļW)quu<\ˇ ądŨŽų#‘ŸN?Z nŒ×ĨĀ #phĀz`eËmP6gž;Œį ũj [!5Á;†rW˙œÕ­ĩŠČ^;–čbfā÷AéŠĶsĢF]ØČpÎ˃'Ÿá=JŽĐüŲ%Š2ŋŨÁ=?3WŨnËųšWtXŒāĶô?• ŽbV…ëB<Å:”bėåāˇqƒƒÛ9ÅhŽĩĻE‚hņĪ2ŧ…wąÆãܟĀÖM7.wš‹wØģx^Oŗ<×K$…8îAžņīëUgļ—ûEËŗŦ ¸RŖal€ sëĮSZšNĸ-äĮ=Ë Î>ˍLgžFrdéNŪ ŠFŊž[A Wč 0ęzã9$qWNh_KŖVÃM6ûŽ/nž;ĘŽĐAE+•Žzî8=zÔBæ?{îņG(XŨĀÎČÆN2rZ§¸Ŋˇ6†QēōÆõáHb0}šĪáF¨ņŊ™xāōD‘ā9;¤ĀčPŋ§­'4Ԋ_>¤ķÚõäZ„ä;1™Ø3ąˆäyíüërÛBk-ĮR2Å ••%l’Hāã¸ĪĩrˇąO2ĸG((@+°Ŧ{įŊtz]×Ú.-íĩĪ8Y˜-ĘG´ĘcW F0=)Æ>íŠVdēŨšiבjbí$ÛU6ųg8Æ īũ:VDFŪ‘QŒ1œ1sķuįÖēß^XG ¤ļ"íų6§Ī‚\sžœ˙‘Ęhė9{˜Ž$ļ! @\ôįņõíYōŨ´9¤Ū†Ī…ôí(ØŪęŦŽąīa !ļąQ‚ķŗî<É/āēėŅ&71gÎPß.@÷Ą§č÷Ū+šāZË ­‚Ũ}į'å\gŪâ´ÁZ­¤sÉi}A~î`ĀRāë‘TĶŪÁĢZ#:K Jü’פ,<åJ dtG­2÷IÖ,¤Q‚Îfq˜˛F7*€1Ī^€ ĢÚ3iöچĢ/Ö°š‰a“吀AĪL?Ž)`ņü‹s>"dŠgfUUv{ņÔ͌n÷.);kfs^̍\kpß}ąbtc‰áWŒ~TZö“>ŸĒ—–úÖü\ŗ;}œđŽy?)Åvū'Đn.4ÛIė4ä†ŪXÕ_aD/ģoœũqÅaiqhš=ŊÜú”¯.§ …~É8Ū€v\äįŋOįZ'ē _CÂâûIl qŗoÜkdäu#ô÷Š´ģË"ģMFŲÄSŠeš-ģÁúņׯ5×Ûø/Uŋ&xįŗĩ´Ÿtße’BÂŨ\pp ĄáũŅ4=ZęHŽ Ö’IÆĢēTs–ĮL“ߎ´Ÿ[ƒRNĮ"˛bx 0Má2ÉIõÎ=̤WxÖâÖč=ĘOå˜e_:ŒįˇũqéYRY^EemĢXiĶŲĸŗ$ˇg8Œäs‘ŸĨXST×`}júKkINŲgFÉp˛N 81I¤ėJ˛dˇú°šŌn4“j%ēķŒ)^c A;OaÁãĐÔV—ŗM*Ėsš$Ž™ŨÔuÕjšž‹e§Ie¤ųĻiVB `— @Ų‘ÎĶøĮ5¯ÜÍ>šä )ü’¤p•s–#Ũ=}Ē_BįŪæåäúĨģZÛEkmųr,LHl•!ˆĮ 8õ+YI)ģ‚ \2ŗđ Øü[ķ#Ūˇ“Æú‚Í Į›tčb˜ ä‘üa]G%ôlŠĻ) ĄNŽĮhāô8Q‘ęyŦäģÉ'¨“ęÆ*Ašļųœ&Jˇ9ú |qĢ^…EĘؚO›EĀįžžõGRĶįĶõųm/c”îR^@@Rŋ.ūiķŧņ‘ L~ĖĀ4Æ!ķ6vžÔ­Ą.6ŅžōŅlÖāAkį6XĮ ķ •Ą•ŨÎĻîŅĩɒ<FËĪÍ´p0ŧŌę‰ īŧEá|Ō Œwíũ Ũ]/JŅĖŠqi-ԒÄ^Ū6”‚šo#ŊöĒ’éĶ\iŅę5Ēn˜ĒŲ,›d\ÎĀ0Æ8­œšļ5åĖģ–;‘$–ŲßhĘ#pwc'¨ízŲļ‚kčËéw#|Œ°ĘY°SwAž›y#Ž+&cwŠ%°vA!ãoĖ+‘œõŋã]ŕŒ:-ߑ$imėÃh9oLūĢ?g{\#É4ŋ‡“ĨÚ^Ũjģnī,‡qú‚}ĢĄĶŧ1h.žÔš”—œ11Š ŪŦqÉür8æžēŨ´Išė–4ē2Åw9nqƒĮŊkÛęv÷Õ$ÜF@ÜGįZëĐŨF#mô%¤—“Éš‰n`ĘP9­dû=”p!j¨ >9| dZ€Ü‚’ØxœĖfŦÅ,lĒ:ˇ|)^EY Œ\ĸ L Œž„wīÖ§.Ē,~Mų}BãûÄā §uz4qüķË+mU‰NŅõ#8\,]Œ2ę:RāzĶaˇmģ™FãÔĮ˙^§ĪJW)"Qœ~œtĸæ ´Ģ›4ląDeIUšîčEkB§#´žâŒŦĮK4S‰'`âXŖs¸ŒĮ8öi#xßæ r9?6FG|qŽOök˜īš5†G‘~C!ÂōF?Īõ¯Jđ@ŧû:ĩŨąƒËBķžų,O9ëĀôŽznú2č)]ĻPĐŧ?ŦI({’öą€3ΈąĪ'ŌēOėkĀŧp8į9?ÎļY‹z~ŅԊŌ1PVÜė„9‘ÎÍĩiw0IæA)ÃHFvõ'#č8÷ĒÂ˙SŽUŋ7j“fĖciSČ$y,~•ÔČÎOašäu‰ĸģĩ¸¸…§BÄ:€ĒØVB?ˆä’:ū´ī¨§}îXOj7{"ŧKXÖEķu8P2lzP\øĒĨû(ļ…•c ^68,{`äú~uâ ėãŌŪîˇÎ"-pŒĨJ’¤œrOÁyé\ô&%*ɉßš{>BįōíNUĐæu\]­VkMLL'ąA-ŧ¤Āc; Ą'qĶv?ÚŽ~úØÃ6Āw;…\į?xÔ} Ķ ũÆdšwUÂ6TSh?N)Vę{ÆQ YÁE Æ2ĮųôŽw&a9ķ=J~|2Č"ËĩŲIByĶ?Q3ÜË.ĐØ‰ÉQĐ…úY¸–gš+q(–药BĢĀ*01͌˙’Xnhõ92PÃ|ŨB†BÃđíM/x†ŦÉä‘Öäܟ-IMŠÁúŧåĶÚ´mnî ŨYW Œ°ãv{ßßĩ`HŌ]Šœ) ŧ‘ÁCŸčTUëyÅ.ŠļĮīI8؄؜¯ëTŠæwģ-Ųĩ”wĸ+:YcÚ63€ĨGN1÷xÆkæŪIĩš-žSI&ܜƒÁ+īŒúõfĻøbķ/p#qSØ}OéõĢa­lYt Ä|üpO ū§Ū“l\ú”† ŧŗ#‘Ąč:|¤ũ}*ՊÅw¨Haž“æąØģ¸#Ŋ[˜¤ÚCM…ŽH¤9rAeH9ëŌŗÃ}Ļā[ĒÆaoŪy\zvÛYĩÔ/bÄ7 âaĩöáUŋēr'™ü*Û_É=Ė2[Â3;ß)ŅA9fũOÖ˛üøįŠf0įhÜŧ*ŽsÁ>ž™¨wģģFv)T1—#(Ä0CSËī\ŗ6åąžc‡xQd‰™\7,01Éį'¨ĮÆĸŌä lÂMĸLĸĄcķd`dūXüj“ęĘPĨËŠÆ>sĪŨ#ͧ>Ŋé^s,‘ĀåĨ`HPH€8ĪĖVĻô-É-‹ąŨî’ë=Lā“ōî<ū5fĀfķņ쀧Œg 8ŦaŠ[Ŧ†ŪEo,Œ•7́ō‘īŌĩÁ‰w¤!ætUÁåH'˙‹\TI6냚ú”o.Û 6[k!ūžĩĄo+íîÉ##ÔįŸĘ¨yŪ]´qM“,€pN:ŸŽ*ōÄĐ+Dß*„(û@ęZn×°ŽĐZ¨TcŽR`Ę}>÷?ÖŖļß1TP|Ōr¨$‘Ķúԑ–â@Ė0[zō?´ËÆDžŨläd–ų~čõĮˇ4n™jZ\løxeŒÁ!vČ8nqØ~_SíT-…ŒĒs€ĖŨčp8ė@Ž7Ü4VļŅČ×RĻå1đTžO㜚„!ŠßÉw&|ÁĪî3BŲsõ(Dī‚…IŠTĮ ŒtņĶ85Ŗ§ũ†í9}ą’"D8ķ1Žũ8ũj¸DŽ,”e$=‡J„†?;ĖPë“ß¨Ģž–&īrbą´¯ą|¸Ÿs*g;A< ûSĨŒė]žv$ũO˙Ē‘'u 3fq’zƒßšs4d+@AģnsÍMõ3ؒC*¨čŧ`˙?ˡĩ2ãĖH™žDwRPG´) ëÛ9öÎ3ÚĸDYcęYšúzĶ[+zŠ),ƒ9įĄīƒMJÅ' ˆ¨˛,ŠŸģU-´°˙œôĢ Ēëä܃$t-ßņĮõĻ5ŧˇÍöc䯈Ī$ƒ¯RJ–FŪNC6ėãÜZ ØdķeÍŽYã2Ŗ•Î{UköYH6Áä öК ˛‚—Sū4’§ÉįíP¤ķž¸õ§Ė˜Q­‚ÂBØĀ´æ`°îÜHëģ×ļMļ‚zęČŲcxqœt uéĮįUā•န•–H¸pwIč?úâ¤iɁˆ{ņP?$q§l ãĨKōŽYÜ:"¨ é0wŊÎAūtEˇjÆhe}Ûļ( Ž3ĪãÖĢI$rÎÍ+̌O(ū#ž‚ĢËs呀rcebüũs‘ÔûPŽô‹EšĐĢ““æ6Cd”rqRũŽ.đŒ÷ËõĒ„7ū\@ČŽĘ9cœĶųÖÂˁ&‘F:gĨ*.Į9~đũ¤“͇ŽÔãx9ۓę:ãŠAqj<Ģ ‹8ķŋ‘Į¨;ŋÎ*X¯Nšrn ŊŊŦ.>Íķ\ ã#€yÆHĻßÜCoĩŒ$´¨ A$xŲےzņūyŠÛŨ{™4eŪš[{tE"ÎNy'ŋāšĢÚ.Ÿy}jŪLq3F0ĖyÉū~ŧĶõ“3Ø´ŌÆŲlI”Įc§°ŠtKŲtšdY$>`Âđ;œįŒū•˛ÛQ;lÍ -äŠK‰ o[ÍŌŖ)ū.āĪķúÖlú‚Į*dmPģNîrO?áVĨyæĩ§a–Ũžr}ŗĮÕNįJKM"Ū÷Īk‹ƒ+§ 2wgĐ+d¤Ž †ÚËFĩūŌŋˇŠO8mĩ-ÆrHíĶ÷æ°ĩģ™ŧAĒÅw ģÚEn!ä^z÷ ʲíäž+a(ÁrB}ĐF?Öē;ok7֓lkH,ã@ĨĀ>ŲˇXĖP§šŪc*m@Ų“ô8ÉëG„ášįÄļ÷úl ¨\™Ļ[…ų ŽÃ=1‘œsUŲÜ{Ų|šÕŽ‚EĻ­kÜ2GDë&äÚã'šá5+= _ÍiĨ’ÖTˤRčIõĮ<į]m߁Ž/nüĪ2ŪßPŧvŸÉ2b(ĐBŒg#+ÛŊT7–÷~.Ņėtũ6ŌĘō͞'”˛í…Ā-‘Î0O¯8ŊRZų›5u¨Ë/jI†$˙I ĘpJœãw]ĎĸĨÖõ™õ d°Ņ˙ŅæŒrZFØgVīĀ^ߍ^˛ĩ—Yņúˇ{ˆå>jįäR^ŊÁ9HöŦģŋÃo>Ÿ–“lŗZO–™€Ũ(HĪ~yôšmîEä—ŧf_hēūo-–ĸ“Gi ķ— Š3ÁpF{zŠĐĩҜč°Ãy ŋö\nŌĨÜYؑ“œãÛØ{Uí[ÅKm{&Ą×Ú7…ķ,˜‹€Cžs“Ÿn•[VģģŋĩŊÔ/T˛•SÉ)ōЅÁ\Œū9✤ƒæŗbGámR[ëk›+Gŗ"ŧM"F0Hî9=ųŦŋk:ŧÚÂ6ˇn#šˆ,/…ĮĘ 8}ûķQé7“ ĢKye•`EaåÄåryĀ÷äûÖÔzk$2j-ˇBiĩĖŲ!6FŌIā3ßڕŌŅ“ŖØŅŗļ6ž!´’Æâ öûT•ˆsÉČ$pF§Z|VÖMtĶË,īĒÃ)w‘1īæęzg9ëOņ,zžĨshŌZ´ˇĖmĘ ‚wČíÁĪzã/5U´ÕąĄ+ķ+ĢdGׯ֓Wv-´­ØéŦĩ{[[Œę‰iå[ũėņ†ķpĒHõĪ|ôéXާÅ7WzĨˇØŦ‚ËĩlË*ļĀŧ•åëĪ_Z˗RԞc:LōÃædX÷)>§= ëüĒä6ÖŌÅ—uäšUˇ–2I#$cž}}iíšú†•%¤w×fúWŠTSöscr;žũ†øVÅūcö‚ÎHaWdíķįę9÷•cwkgo$GNķõi°É"g+Ī+Á$dûzäVĸ^JmŪ8^‘÷l6åƒį>„ö4Ú)+-X´ßļF‘,ûg–"&ļ•Nâ å@9>ŖŽ1Š×Ķü7kqgoÁl>ÎŲSģvŌs•ĮˇŽyĮãYzŒķ‹čŽÂDXPƒ‰9ČQúzÖŨ“É{oÂ1ąĮk Į#œįŋ)úâš])sŊL%x€iņÉǞîD…Îö;À~cÎ? ė l)ÎC ƒéWV [Ī ŧw‰Byeķ““úÖ\“Ę“ļ>T1Ü:ž¸˙­č÷Ķ8™gEČĻ~`qĪĻ1V•ÂÂhđĪm¨ŖˆÄ¨ŌKœ €nĮâãŪŽM&;R;ri# ´’h'ß{'ļĮ#ēKmō6b* 9 )?§åš¤ĐũĻ CbŅ2=š3HčÄõį“îJ˜ęîÆŦŒ{‹‹‹­BQ¨*˜T^Bœ sšl6ĻK9äg}ę<āܸČääƒĮ_ZģĢ@šd%'m‘›cTō~aŸ÷sÉühļ]萘”I’8ė‡9īÍTžšüíĒļ÷&'"9fE' e—?_ŌšË[“ %ĀáŨ”…Ēĸîúœ˛¯ũōkf8$¸2€x…  ĮsŸO›ô"ŗ ‚0×&FLCaŒļ !T“Đ×æŠŦ+\¯e1D÷„‘\nĪŨīí?­\†IŽeĸÜŤt¯‰üĒŠ–ŦZ&0Žrsƌg˙)AųûÔņMekĩŖ‰6ێ§^ĨËĖÁÚãH‰ūĐ>Íĩ"P q͜ÄsÅWō‹0‰etDŲ…'!ÁŒúđq˙ęŠŌę7$'*ĘTōp?‡4A$‘žĘ’'ÎÃj€ ÁöĪolPũĐŊĘĢ  Ûûé0ų;˙ŋžœVžõŖX”ģĮų o€\´cĐüŋfÍ{$I#ÅķP)-ÁŽ û…]ĩmˇĶ8 B"1’põėNĸ‰ÁŨ6]˜–WE.ŖķŨícƒÃnųÍjoQjW>œ[nĐ+ö-ę1ŽžĩOSŽKIa ڀl@0Åܒ3Įođ´ÛyíϚw‘™š@6.xr?3NjQ~ō%ŽWf[kŸôˇE\ocŖrˇgŽ_Îĸ€ÅŗL͏+b* îbØëéÅ-ú"Z•‰ÕĻ;A= áģšcCjâ9&š‘ĘåĨŒU9ûįÛ QŨ“]Ë(˛ˇ’0Į2ųa„ tč9ƒĪJ¯Ģ’K-Ɯ3QNøĮ8ôūuuŗš“Čy~Ęs"Į+ äppxĮūbKhŖˇW’E1Ę䈜`sxČl~-ėV­éЅ'ķŦ‘‘üĖ á@'ƒÔ÷č}ųÅVA'ŲÚ7”6Ö8ėwé×<“OēﺊYвEæ¨2H‚9ôĮĐûÕ§ŠÕcF‰X-ˇnwĪ<{ū”ÚÔ7Ũ•‡ÚÎ'‡zą;ÔČšNJr6ĶÖáĨļāPđžÉūŸ•_ˇĩ°6›mîoPä‘*acNIāí͜ Ģ5œ.čbTŽMĀ'lOŪ䔄Õļ#’áĄÉ?–č7;t?áV"‘•$bŖėąĖ ãŗQWËdE܇Ÿ›ŠcŋãK<Ī Áœžlî@˙ž?Æwv+™†ë˖FD.Ŧwv>ūĮëV•÷ 'i#œúđëÅRIYäßGĖ=XZ´Y!RŒĀg<ąëڛzØ<ƒĨŲˇ|ŊG¨ævš‡cä*3ß÷úŠtq)‚ICnUį ŒāžßįŠmÔXˇaTgī3NúÜ.˜Ønã6ë1ČHGlđGojžb†!…'“•Ũ^˙\TykŲŖd„ķeą×ž•bß .Į¯<ŸÎ‰5r“CōËlld tųĻÃŽ]ZßS2˜cŽā}ŖÉ_žmäį§Nč8íÉ̚Ũõޝ{ũĄg¸7™ļXœp-¸žŧ8Å6ŊÛ”ãŖ—S&3DšŅÚîįQ•uåãļ €1ƒÆNyäZ÷ē햨t>ëNû=Ĩ”ˆvŦ„h#ŸÂĒëš&—í˛ÛkHķ(KĀX—pĮCĪSīÅ>÷ÃP[î•on$ĶB.Û´‹åßĶärxôĮZmģŧ´ąšŠeŠj–>˛ˇK=1÷BCí 3÷ÎNk™ņdņm,5 F[2ĘAōpXôČ 8ĀĒ6;î$¸7ÆÖę $Œw?wįúķŠ‚æԄlBÛm–nAe€^ŋZ9’iĘû‘jڎ’ē¤ƒD‚cg$`Č'˜?~{Ž}MužšûCŌ//!ŗ™’1ûՍėdį’xîZâtô‰]nŠ1ÆAG\ā?Ī­v~ņĨĨÜI 6ŠsÆ]Ŗ;ādvÆ}zS“W˛j÷"×fĶīMĨîƒ ø`ģ.dg/€HÆ989ú mՕĩÆĢl|Ío›zcĄōxę? š/_ũŠÛDžE;Ô3Á ’OÔ “Xļ“Č]”LÉ0@ŠW'>Ŋø55­€ˆÍtfäČĮg#¯ķãž ;%¸Ŗ§câ ;C‚ŅeͤžY–4eĖ›ƒÎHČėžHëŌĒÁs}ĻéÂÆæUŽÁ×pl“‘Ų8î §ĨcŨŨÁöxåß!;ƒ9(āp3ú}jΝsēßėæo´Ã&K…$Ļ{õ?J•4T},>Į_šLÃ’˛HŒ9|îRps“éŸĘ˛ė´ģŨnîvĩŠ9doŪí*āgëĪ͝á]f•āxîž[ßíÄP‚ĨdąČ9ČĪC“ūÖčž–(–įKģŗ ėYIp<ūUĸ‚ZGšĖéž Ôt›)Ĩŧ¸H„ā†ŠDr ƒ‘Đ`ãļs]5…4ø#Ž9Ą’YĻ@¤[ČJ¨Č$œŸRk°ŠÉ!”JÎ^]ģI €}N=ęhĄŠ7gH•XđX. Z‡ŨŲĸ‚2mÔĀŗXŗ†4“÷ÛYsŸ)ãĀâĨŒâV$$dŠãëZždc @öPZĀyq’yįS6}JŌ,ā2=ę6Ölc 4Ī“ĐÛ=3éZĨa™ y1:įČŽg^]$3Á+âW!D`šĪLįĨ' Ž^]fŞŪđ†ämāôäÕvņ˛†QTu,āā}j•Ŧņž6âUÉ6ŅĮn§đü)—+hDĢĨŗDÃįōđ$íü=ût5<Å[CVÚúÎäb9ƒŠīÍeøĒöÁ|7ŠÃÛî~ÎĮb°%—Ž=pGã\f­qg č›H¸x˜ņ-š3ė==Ģ _ÔgÔlY Ŧ’ĸynû°q’sîyÅKĒ–Œæn]$ž6+FˇDGƒĢÁŽ<ߙpôTū5[Wņ\ēžĪ˛HbCd°ÍĖ~ˁYvē|6Måôޞ2Dq‚[úŸÂ˛ā’8ãÛ$‰ î䃖V=‡C̓éQ)ļŊŌY?AuIĻ’ø‰ Ŧ‘ü˜BŒtč=G?lZoøGX2y“Í*ŦhĢÄ+(×c^=ĢëP[K„ŋTÜģ‰uĘmĮüAãÚ¤ĩŊš‹z\¨Ũ;‰öēãiÉ>œgúÖr‹i1;Ļ-ĄYtÉ#*ᗠ€âĪ\}3ųÕËYeƒOû$ĒQcfÎVĪ9ĮëôëU]äŅ‚QšĘ–QĮԃú~8×ŌîíüĩVųf’čڄoœ@Ãā÷Ü×&”Ž–€ĶhHŲCģH9<íĮ­YˇûB’đĀq hČraŒãž™; Õģ_.X^æHņĖŖ m `¤ņŒō¯k&›c`˛Mo3B˛FĀ“´•Ęįq#'§Nĩ)Ũ 4ėųĪ@WIK¤ÆčZI *3ë’pGCĀéWĨšČÄōmpeØÁĮ|ŸįÚšõÖ_mą… 1Ā]ĄUÛŊƒ0\ $U>•НOm ´fØĄKĖm\`§?+qĐ3ŸéZ+$uķZ%+[ĩmCΏ˛xVG+ōš 9=2ĘF=GzÎÔÚįL–Ö7˜KįĘK2de3Ž{ˇ56›ÅÆ‘nn$IæiU vęv‚8ÆY=3ŪĄ™âĩ‰,Cn“cŋ˜xܤŠÁ<ãq*8îGjÍģé 7čQ×./&Ķnb‰˜Ø‰6Ȑį˛'æ%°{ƒYžÆØ3‡g,ĨĪVæ$~,¸=˙uÔĨõ‚3ą^FŽ%w%Gp:’2ĪuĮ5đØB–đ°eŒ é…ÜFãøūU-Y$g.æMÄmΘ%Āqå• qœghõīÍ$lŠ2TĮ!į=2 û5Iuh“…ž!%Üq)"°E^Y쌐~nÅEáˆĨ“QĘČaTiļƒžHųsøļyĢ[\Ž].Éíæ–/ŗ—ÎOī÷ā°ŨĶųņW,æKŠmėá?Ŋg(ŽI,1úœÕhŧĖĮ“<˛˜ĘėHf.yĪųéIiožíf„ēbA*¸ę ŗcķĮū;š9­¸ŦކîÍ`vW‰áw:ąÁÉų‚ũ2*­x˛YÚŖÄD‡„ tGääjŨÎą-և%…Í´W’2îŧs‡ļA:¨­]#K+ƒ*(Č'>Į§åQ&“žāėļ*5•ŨĖ–ąI$L—,#&U rÉ‚­Ae•˜+2‹§‚G÷ļǜzö§5ÂÍ2Jû°)‘O~•  $@1+8VÉ'˙Ŧ?*ŽgÔ\ÅšíļŌ YļĖgÚÎIĀ.¸ũ1ú{Ö2ŽÖōrŲĀDUs‚Ģ΍€ũqZú\‘ÛM<2Į°(Nsģi'¯ŽJîŲai!¸ÜŅM.ũĀ`r@ãôú÷ëUÍĻĨˇÔ¯aĄbíD;Ā~ĮīgßiŌĄ˛˛Í`yd19ė@Ę˙…[vŽĘ6ķÁ[yŽæî^Øã×ųUØĻąD1C1xÛaa‡\qëĪéųRzh$aŊœŒÉæ[Ȁ¯%CĪOĻJĶŗ„,-[ūú)‚' ?^ã‘Wõ+¸ŸL¸r¨`ā Ü‘ĀįŒÕczˇ6ĘĒ ōâY7°Á##qFF?Zwî;Y”íĄ,Ķ•Gë\õížã×ëSę–vņ_ÜM<äáw$j§Šįđ~#ڗN†{sp $gØ@ã°į܎žÔÛģũöė$å~ōŒ–yôޚTũĩ[_CN[Čŗ œwŠ‘]Ä^2$1ˇH<{ķ˙]d$¨˛Č@~U'ÁürjåŗŦrΐ7Aę@Ī^ŸĨMo§ ¸šTd‰mĀVÚ3ÎrAĪn”cTíåŪäOVB×1Ëw4r.![€#ķœ÷˙ëԒk€^$`“JŅįšQƒ÷ĪåUL˛3Kx™÷–ÆvŒ/_^ßį5y-āTTŠl õČÉe9?÷Īë\ļ] ÕnV_*õáļ2B åųˊW'=¸ŨŽ=:ūúél~ʰ[†|Ō(ÁČbĀø ‰Ę%āÎUĀ` uéOŽÎúęį¯šĀą :sß#ķ4$ÔŽ“éšBÕÚlVeR3û… ļÉäqŸ~+JyĸnCco88äāū<Õx-ĖPÍ"J6ŧÆ'j„ ;Ø=:ķQ:íĶ ŦŲ\’Ãi9ߎéT÷¸4ZąģMB ĄÚŠą°įXį'¯qĮjĩk#Ás< ydŋ—įŒŖĶ’Ŋ;Õ}L6đąē—ė¨f.Ōųf@3Ā'F;ÕۇxŦŒ#ˑÚRé18遌qōį‘Se{­‡kjW•”^‰Žqž=ɧZ;ī{¸ŖJ‹ģ1)o-yđ}ûÔ3ųI(x$gŒNņ‚Hę;˙žÔ‘I2M,VĪÃ1@ÁČ%yããŋ­fĸīv5š—D“īf|ȍˇ ƒĀž >ŌōK›XÔB— ;%“*šĪŨ#=ũ=émlÚęņ![ĨIC6Fʅäļ=ZŌÔ´­)ântđĨƒ[8Æ?‹pÁ>ūŪÕ­¯°$ŪĨŽŖš5ļdD.ãxW!9āÔR^Eļ”|ÅÎÍŨppqúЍî˛Č˛BĮČrOīÉ8ûzûU—–(-üéÜ4D+m9ëƒĮĶ#ņ¤“¸[°Ø#ˆÅ—P.r š~QĀÁœūĩ¯,vŗGO“kŲ‰$ŨģāįŌĒEâ%ˇ˛đŲÆcrv āúôČëڝŠ%”ÚÃoŪæ(^{qüęĸRĩ…ššh|˜‰Ą%e €}FHÉÍYšgYŊˆ‰šãßŗCōŒõúâąÔI*K#ÄZ$ųļžžœŒ*ŅÕlÁk}BÆĮËŗ–5XÜ( [žqĮcúVŠ7Mö ŊÉĀĒ‘Íō89Á'ØÕY"Bîā6ūœäb­ˆá‚ŌÚæx@WrYŧīŧ{}9Ģ×7–/6‹į°$É/ĖŅ៧N;VPŒ¤†›ĩˆoŨ*lRĮ ¸õ˙œĄ?ŠĒŠ[:œĪ›ö8DGúD Ŧ]؀A!sž˜ŒŸ˙]fjZTöS„’H&IÉ>bpsũŅžŊâ*Ŧ7÷RĮolîŦŠ`ÛIQ’zuãųTúžą.°#YYÆøjåšëÜ85J-1(Ģ\’;{.)mBCČĨšaéZ­y$–ŠXEŌ į:“ëÅaÚ$ö×{¯¤gÜĨãģ/áÛÛqmÖy‡xŲFYIįÜųTÉ_vHč!>tāHŒÃ ‘¤  ¤ūxį­Y’HŪŪ++Y?Ō”ņ&üÜg˙REc,Ģ›c7 Ž@8ëŪŦŊÍĀŧI˙­8á6.FĐŋũo­W+šĸšu՜ļÁ {؆›ōCnČ>€€qו[ēŌu[ĢÛM:;qD)šSbÉķĮwņz÷Ž} ˛†äAr.!”ŒĮ"gĄéÁíī]yņaģŅÎûxēO–ÚUĀ sާ‚{Ĩ +vižåĀW>EՖŖ ōJŠs¸ˇL ĪįZēæģ§x´+ũ5LŽD•!‰RŲ 6žĮ¸x/otëšdļķ†Ē8Îwz¯Ķør÷PÖĩëw“RQv‘´‚kŽUF0@õëĶZĶ[Yšč%έ}7‡ítĢ5#ˇŗd3:ÆAĀ<ķü$ŒäÔ~.ņļģwfĐY¤VĐÆŅ&UãŠ˜üj-O[ÔfŊžļŗ¸S=ÍĮ•(‰ąāmČõĪũ~ĩy|?Ū0Ŗ˛ęđ’ËmoČ]N2\㞙āqQēÔM6ŦŒ8­f6 !XƒĘĀā¤÷=˙JØÍąI‡Kˇ’9öí•CîķÎãŽKqŌ ļ[Ø-í¤m!žÉ6ŧ›%9 ”lđšëƒW/o-_Y‚{;o!Ø#"#ccgõéÛĻkžĄĘ–‡KĸŲë1ĚV­‹K$€ČHIČPĀc<Ÿ~ĩ—eĨŪ_é‘Åö˜öCw‡ķå'Xœ#-ĪN:ûV¤÷z­ŽĄ{oÄR:ų)#‚Á@G`yü랚ųcž’ô‡\LXGî Ķ8įÛˇˇN•Ŗ•Ŧkt•ˆ|Co§Øęˇö÷ŗG¨muhb‹(ņäg…į§ā;t¤ąņlZ „éđÃû˜4x ģ=sĀį8āÔú,S]ß\IĢM{)ũäō`mô㓎9Ĩih˙ ŖžáÛRš›Íį*°œ}Cž+HFۍmĄæ6ZFŖŽŪËöxKÍ+ŗėŒmQžN?Âģ øōbZæ×kÄÜĮ&Sqí–=?^ąĸørĶF…Q#ŨQWĮšī[!OĩhåŅsĖäøyehVîK5o/iōŌF}Į99Č9ôéŌļŸÃ2]KąYÛ[FŠÁ,ÁÔ㎜ė*ėģôĨ5:•dsš~ƒ46Ą.ã´ē›n ĖšãĨ]Š;ët+Ĩ¨Œ}ÕG(áŠØÅ $;šc2cšÔpÖ9ĮqúŠ‘gšÉjÃũĮ jÛ^Ā8Bd>ˆ3PŦ—W -´YĮĖ2äzã §`šjYˈ¯Ęģ@üja<˙ˆ[ŋņĢöļ–‘Ŗ<ˇáŪ-…ũ?§{‘öŦgf3†į5N žcžš[ûÃåiĐĐõš™8E<žÜÖÆ“ AŠ{Ŋ×wQ’VY9+ÎĪ˙Z´ĄpŠ#Xԏa֞ˇ¨ŦG’uĒQe›ÆsõĻĩš €ÛN8 tĻ­ôméƒß52ÉŊU”eOpiØD+ŧÛŌ†*dž*r{ãĶېȄ‰ŲHÎ: wšÆŌ“ŽF}@¤Œ‚zįŽ(Y—8*=¸¤ Eæ(›sÆ{TsÉoi–âPĢžũĪ õŽ~kŲ¯æ*ļīąÆÕ*?3ÎsøcëOA77ęČ~ĘJ1嘯'ÛÚ˛>Ø.&;ĨW-ō\úúgôĢŠ¤ŠŸj>Â\e™qœqžĩ ĸŦ2$ōĶhé’y9§´q8Ã"‘M6ËĘ ŸŊŧ˙Bđʝ÷ä3QĘŲ|ÉώĨkVIįŲJ×Ĩ¤,ę¨#uFä÷Ž/Qžíe/:Ŧ33a–X°Ę>`:zūC׏LÔo¯-4ų^"d•W$eŠœuĀ5įĩūŠâ„]Ú0–ß ē@C=sųV#mŲĪVz‘kDĮĨŊ †4– R`Ũ$U+‘ĐãŠĪlbšŠäŊÕo¯o Í*âVE Ú7ô=ņ“ëéÎ+Ž×ŨõĖ—°˛Ė€l¸hš2ų8Ú˜uĮ#Đ×9klŠ…ĨĘ)ĀĮ?Rx˙&•ųv1’kĐĄ¤"Gq# ™X×{ž\ ŸÂ¤ÔŽ4ŗk§ļ›o cm›“$›ŠH_Lŧp>÷<՝KMÛō11ī ܁ŒdôÍSōc~w”Ļ ʀƒŅˆĪSÛØûķZEĻ7tŠwWÆîxĮʅíįøŽø~y=ëQ IŠÜ.rv˛Ēõf$ŸįŸŌŗdŌv1d“ ĮRĮšķÍgÉqÄßģV†Õöęøx˙Āxüky-ĸ‚0ņ”1–ų”Cd}灸TE5¸-ŦtēnĄ=‚ÛâČŖÉĩ>vÉDr9^ØmÜđz™ŽŽRëTĩ&híÖå×å UŽåõéëÖšIĨŽßËIT¤‰Ë#Ą$“č=[ķ´Ŧ™Z uŅŨ¨cûĖrØäū5•ÛV4ækDhj7­o­§ĖķE‘?zĖF ã=…RžPų.#{˜Üģ4įpHT9냴7âz™'šy¤š’u›ËœĮnÁ@\Ä^ŊũëÖęŌ įŽâÖk™.pPáCg€¸ä(ų@ë÷}é[^P”Ŧˍ§ŊŊˇÛRÚT“¨Q’2\e}:\Ί,đŪė‹(ŠUĀŲÆGãŪˇ’×V˛¸ŒÍ4É$ãv$3äíˇžÆŗü›ˇą’}¤.äė'ivį׹ö§ ›ąZęA2,BVÉI" 6™@<åąÉ# +ĸļŌt[HšuĖōČŅđ6§'æõ<Ö°Ĩļ7víhа$–XÉ㑕É<ôæļŧ9ĸĩėˆdž[HÕ܍ã'îãnĪĩIŨX[č…ēĶâˇÕEģŠYZ0āŠFxúdūtáj;ˆāKxãˇ”1ķđü˙ĩ[Vļ60Ų3›Ŋ×qO'ī.Cgƒ×ķ\ÔŠžYa|$ŌnUÎ1Į"°nĪTL•. 3ŊĀMą¨`1ÔuF.a;—cŖŒ¸įnqÁ>žŪõ܌öŽąŠrHQŋSÚ´<;ĄÉ­CrÖ×qĀT€á߉$ãŒ˙“UŨܕôU¤.řņß~Ãß×ëPĀPyNČë67í ‚NĀ?ŸåSčĶĨ­ÜƒPēû(häFu@ˤœƒ#<˙RԚŪ-RT˛wšäU‰†OËÉã¯éŠĢiqÚĘæļ,V甎7%ĘÆ.1ƒũÜũ9ĀĢ7ˇVUˇ†Ūâ;„˜ƒƒ Ā=r3œ}?:¯kÅŦqĘNd>kb78Đū?…3KM*ŪîA|'kĨŒyr#°œd<â}*Ũšĩ‹Ũj¤S[\=nÅÔråãā/nãŒ~U­kjb‚m!ĻxŧÍĸYSeãŒuíėkfëV°’Ū4°ˆÛ^CØ'pY%BAä“ōüÃ9ęr}j•ÎŖ=ŃY0’žW؄RŲ<\ļxǞLrQÔįc%´‚I3pÄ4c$0?ĶŖ•\Ë T6ÖōG[#lLŦŦ߆sÍOc“ÞëhXŗ8į`÷̰iûUŠÜėYYHPØ\Ŗŋcj–×QlĐåēžrˆäߐI ģō Ö=āØĘp†V €TcŽ™úVę[ÚÉr˙jÚ ,ĖÅI;XžÄ˛Ö ôĪ˒B˛ŗ–ÄžŧįžyĮlzŠíĀ4§'äZŪâŲ‰$/—!X¯Ė>Rô­a,öŌüÄį,Jäg*08ė1žqÉŦŨ;Ė”2ųxWXg$įøŗšģ$ĒmĘĨÛĖ$}ĶĐZĪ&ëkäC•˜Í2úŪŌQoåÆÖŎ”nz1ôõfA…ōĄ b§įČĀuGSīYÖv?i™"TTy[g$9=ũ:V„úúZâKëyв¤nK7<öíXI] Ūq3͜å>Ņ+´ŖiēĖ~eäũ1׸Ģ(6$WHžnrÃ8ã¯ũčE"Ōd„ã ĒĄN~čÉüOĨTk8a˛ķŖ¸ĮĘÖÎäąÜ,¤aūzÍîõwēcf¸kUēã~ãöpY€ úgƒīWu;ČaƒOžĩU ąsĪ=HaÆ85•Ødķcšh]”Fß7 2ßQĐuõĢĻĢ…Ü Īڐ&CÄ2OQžsųÕ;ŊŠMúŸÛ4%ŪoîäB…Cņ€9Î8=G8ëõ¤Ōˇ_ÆbtI9A-,›X’vy`zdõãŊbÜ’äÄÉ<û•NXī@č}>eįץũuoŖna§ĘɉđAŨ’q×˙.Õ6OD } Ųĩôˇc„EXo.G?§ÖŠÃ§^ŪOö‹[=č‘Â,ü§“žyũjõĄOIe Ũģv ĪpŠP:¨ã'¨÷­ĸˇĶžĶowrÖˇ1ü¨YKnÆF{`r1ø{ŅË}ŠKS. mėËÜNŒUœe$4`“œvÉã¯Ö­4ļđYŲyɘXLL€īãŽëøŠˇqL‘F’DûØ sÄõāņß×ĩQēŌnlum—!Ärm@;l-ÆuųsœU&ŌĐW’ZBģîĄĩoŪHPíč{įéšvĨ Gcmqr !Ü_Œ’FN=ķZ Ä~×/¨Û4‡Ë'ģšÉūbĢj(ĶEkųWË ōąã'ųÔõ¸;¤SŽ…a‰pĀ€XŒn㜟ZĖÔe–9R(Ø+‚UÁ8äÁĮ×ô­ ¯-æø#ʧĘy%H?ũjkŨK-Ë[ĒūņÉFö?1M>R/bt7Ō´’ÚÛJņCÞKČęúôĨ’MBKgY%• Ũĩ6đœv=ëīUí#¨‡ŒäáŽū1šØb‹O›æ—ÎÆPĄ{ 7áš{ėhåĖŦ‚ŌkTAbFbķáŲFÜņߓԧ?cĶuyâŊ´ @dŪ`\䏨 ÖŅĩ ]/Df{ņŊ˜Û§Ë’x9īũ*ŧšåėKi,)4n„ė‘C§Ķ<ô5QZļWdúl+y{.Ą-”VZ|C0‹”ō ×ßŊm,:l¨˛ {7oÜFė÷é\ž ÔnldĩYĘ P›”đŧíۃ§Ĩc­¤ŒŠ|øy˙”֝Ōč%S—ĄËÜZįT6đڃ=˙•tFÚAp°• †CîHü˙ũuë:§…ŖŗOĸOl„ŒŽØc8Įûdƒ\ąžxŖTĖđæyYeŋ7ōŠŽ – CåšIrƒyČäúôÍvRBnėŠiƒMŌE@\3’:ƒÅd^ÚËåŲX5Ŋ´ŠÁãN\HÎ1ÅdÛr÷vf÷G ŌZĨ¨ų$ŪĮ!uĪ=ø?įŠ’7ŧŧ’Úß qĮG>ŊH˙ ĶJ[,SÛI0fÜžX×ępp;€?Jčŧ1Ą[$å¯!ģąā!UšîsÎĐ×JŠĨØáĻŋŧ[Ļē "‚ĄU™sÆ1ßÛ=œŌ;Ü^ÜĮ/–øEÚ2NūßÖŊjč7RåĖë•!ÆÕ=yč9üž”Ë˙‡Ö3˛=ļ"d9Ébwzƒč>”8id>Kf/Œŋi€íŽYƒÔ€9=°1N쏂{š$$€‡ Įä÷S×Öē‹ßŊÆĻesö83ķČÅ|´ėwgķŦMCEŌ´åš(ĩ”ēv\bIĪãœ~#?J‡K¨ŦĘÖ:Ä6pà ĸ4š1To|ŪÜņô§Ûk°Ė’Ü\´„e@ÜÄtžžÕ““ŧ‡te#EÜ2šé@ŗ’I×ĘF“†ÛÔwč*y#qęwVą<~™nu))O˜Œŧ™3Û€ĮŽOjΆåc‰Ä &íčvœāƒÁį ÉĻØé’Ŋŋél4M;I‰åHäã;ebÃhTãúŽĩ§§éÉy7vöæ¯÷‹€\{¸üĢhFۗbkˆĸ…ĸē´´iēŧaBāT>¤Öũ¨g/“UÚOĄĮ?™ŠVŌ5›ÍXöž0pHę:˛7Ŗ5WėZDĐIĮžáæ˜. rĒā ⭆Ĩ0M;P1Û¸¤ÉíüŠīƒĮzzS°Ž0‰;øÕiŖ’BVXËĄ#å UŪM)Į­ P:ă Qßv1úqWRŅž=ī„qÎjģ˜ãũá°ųÆyņŪ§Ká7,ƒ÷R õíĮåVŦÉ'ŅÆĄßowž•(MÛHā~yĒūrš ÂÛ÷ņŠGšSv77(jŨî[0üŧvč1I儎FEWKȋųeąÜ§ŸJ•gōVUĮÔE„=§ĘŒĄqŒ`â´"ą"Į 1éUtS‰=šé_%yųEŪÜãæįŪ “ÎBpŠWûÄ˙JEIô#ÜņK$äŖËĘŋ0gzæ—(îGæMÛĮ÷sšŠwŦEeÜų—D ą/R}ũej##[éƒbĄ+%à (8üO˙ĒĒiąE+,‡7ĖNK{{q˙ëŠl¤‹) ÷ø¸Ô—nûģ<x?­^*ãzqڟž:qNR¸ÉéY;˛ÕôdUāõÁ#4Įķ‚*ļ&įH՜ŠÁ8āJi,ã.Ō†˜îVi¤Ųį˜ád/Ū'ëڝq¸ARI$ũMI°ÜĶ&š8Tŗ¸íÔūTŦĮqŗ1?–ž>]ũ3Û5…ĢŨę6k\ŨŒ)ūˇė–ûŨWšų›õãđ­ČŲØ|ØÆ>ö?Ĩr^4Ōí$‰.žO%Ņ yÖåŖp>€÷ííRÛ[“-Qį׈.aŊdˇ]Xȓ%ŧĪÆä`1ÁčČxĒío%Íĩ˛°Ļ`ĨdØy^?>=ŠeĶ,ÍŧĶ[Ë.C3ˆä¨\Œ{6;`ŌZGqso xâf%ŽFNWxãžSŸņ¤åÍąĮ~fl [ÅĻÃ#j!AÃDcBčŲ6Ofļ9ãŋČŪŋ•`Á‹ķ ¸úqÁëũ*ėŗ\iw2°’EĖe$T=O¯ĄįëT:Ĩ̞(1õP>öFxô?áI$ĩ.IXĢexípČ‚H¤6ÜûāV…Ŧë,ÆrÉs ģø[ĶķŦ¨mBŲ5ņģE‘1<?*ˇæ)XŠĄ˜Č…FpÜčkIE–Ĩûš¯%[TZ8”Ŧj:°˙ *æ ĻĄ%Âę1ŗ¤!dfˆúgå#ēüĸŗuģÔO*#/Ę9 ŒķĐ÷āãęMZĩ˛†k'›y"ʧ'Ė™ ūĩ -Įą->Ļδēw“nmÜÆÄ<îœúc­_Ōl$mFŲՑ‚IįÜ9äí]ŦśĪ|ûWc§ŪĪr–†ƒķå{āã?C]v‡8}Åî ‘bdųŒ’„qN•…KĮKŠ-ÆČÍĶo/ŧÖŗ,"‰Y‹†J${ã<÷4­6Ģ`æ$`‘tûįrđ­éÔãØúTöZ`ŸQ™TCoÁ 4ŧy‡ŽIΝ{}M3Wi­Ŗ]>IVT†O˜'Ũs¸O§N9ķS~gqy“Ëyg›–ŪA3,AąØäįũŌ?z­e;bâg/c Ęį“ęIíŸ˙UNĐËgmÍo+E!WYJ`¨ IįāĐĶ͒Ũą—1;ā\˛œĢN z{Ōošl­˜ģ¸V…0K)Ú0sŽ}xéZúMŽĨ´{ūĪ$ĢrA6{ķÚ¨[+ZŦņ•–5ĒĀ!rŲãüÍu:Dژ,ÖįĖŽ’'Q˙-#J “î~´X¨FƧ},¯qws夎ƒũXÛķ*͎Ø‘ė´īøEŌųīößä˛9ëÎ1ëœsøUM|[CŠ‹bŗ3aƒ126; ü̟ĮЧ}i-bÎ œ)$gåēv~t(ÛIj×Q°]\éē}ô))fŦĢŽ c?‡ķŠô™X!F)ģ2:ķī!Š’}:~U´›VD-ōīœ6p āįķļ`Ņãû,“äųqÄŠîWūĩ2—ē$ÚRŋ†øC§HØķŒėA†÷9=G_~2˙ŗ­FŠ0S\[æ&åÃ1Ø~SÛŽøVžŸgf×0]^HäDįtDŦVÚčqSjãFąž‘¤nŠ-…aķ õÂûbĩæ÷AģĢ‘¨ų Ûŗ,‚C `ô$Œ’=zcņ=*Y%ŗ[#kúũŪhrFOųíZ+øŠoŗZ,VŽĘQĩH'$ûãúVnĨawĻŨŲĨŌŽdÉITär?ž84[K†Š •…ú:„U1 AŒ.y#îyëTH>Ė8’xÕō98rO?‘íÖ¤ûT k5Ä;ŌęûYČ(Ũ: v ~bŗŪúfU j!’Â7Láō0Sũ(ˇPŌÅĢũvúįN‚&¸PŅ*üá@|íSķ62éL°{ˆüŲ.įe€+´āqģ?‘Zėl<=aám*KģØĸÕc‡Į•ˆ‚px ä|ŪŨ+˜fY,¯em˛ę_‡SÍ9'd\Ö×eĢíCÉ[MņĢ w1 ã‚O?ŌŗnTŪÉpí8aShr€?@}:Uƒ$w+ŧFEōÃ*į É#ô9üꚊyíÚ —'–‘Np@#Ķ>ÕĻ\­ú ?>‹¨Ųéˇ×vžp999×ŪĻŊ’ŒČT´ķ0,‡-€=úū••įÆŌ[WÍw!Ur@‘‘ųjÅōŗŨųĖÂ8S’øĪoP@ũh­n}ÛØu…œ8ģY’Ū8„įn¤dįrzUŲėŅfP—;į‘Ų¤ÉåW$ąv7ZˎKFŌ}Ūb[9Pˆ¤¤d6=ōWŠŋ<ŪEåҚ6Ø @,N\ãĶ’ËŸjĘ÷ĶŠWVĩ‹?ēŅÖõboŗā•sČ-ŽGâ ŽfÚãË‡Ė‘DĘßwq?)Įn;ÖÔîu)|ČdŒüÎĖØčvŗxŽ}*š†ËÍKu‘Ĩ*‰”LėHŪGzķĪĨRIFĸ饗ļâāËpŋŧ‰wí ō97OĒZ•ôē™°…ÚPļîÂ(ąō*åIū_ĘĩŨœši{Ģq—C$ų[r1ëëß4ąXŊÍč’%ÛˇZŒų į'đĮōĄIG[Q%—ˆ.lķOsŲŽį.Åה, ägŌ›ÜĢg;ː^Y­nFŌ3"¨`Į˙‚ĨÅ\fŸÚ­"$­¸ÎrÄ&2~ĩx\ PYH¸äW¨Š‚9&sŅPu  ī!ˇ]ĶL‘Žŋ3bŗĨÔ/'‰ Š (ũÜÎÃđĸ=9îĻ-||æY\čk^ŪŨ-aŜ{’1 ŗą[fķ¤c$ėĨKž¸Îqū@ĢD…9ö¨ŲŠŒšœļIÍ \°éfČÁUu”H@ÚTŸPzSūgā –8‚O&¯aP@ŽEWšāE2A{ä|eGeČä˙LúTŦŌ¤Qī~™ėžæžļŅŠ` Į,ĮĢT+Üd‘@Œ ‘ę¯,jo”Ŧ;äqQÆQWoåÅHYqZ¤C*˜÷Gäj…ũšŪ K.Å í߀Äz÷ũjĖ’€Ād}1QI.Xį: g[iÖđœĀY‡÷AZS `äĒäņœ~Tņinß+DŦ=ČĨÍĐ,.˙JÁņ4ö1YÄú…¤%|ümSĮ?‘5ļĐYː‹ #¨īĪôŽÄB×W´’ÂŌåÂ;|ë&v9Î}ˆõųÖu4Vb”ŦŒk[(5ûyæI †Ō&,ą¨Py$°l~á\ŧI¤ĒķOB@L†ėŽsĐ^õV{éÎM2Ú%{s9a,Š*ã{dÎju…ŊÜæ-olårp>„ŠžTĸsNvDWÉ7öĒŨí%Îė…Ú@éĮltúUĢ-y5 ģ›=’ŲĄ’)Îđ6•RO@qZv1[č%Ŗ2 AÂ+0Ū¤ŒÉĮ`3ũkļͧ‰$Dgw”*#\āđAõЌ“NėˆKĢ!ĘÛ^´ûVÛ¸ŌDiÕÁUg‘Į=;÷ū}/Н4NÚØéViÚ˙dŽ0ŋ.8sīX†š÷VҘc&X˜– 1Æ:gđ&ŽÆŗGöfR‚9Ÿ-Į‚qĮĻ~ĩ§2čŠ;¯Ū%‘~BĖŅîrǤã<āöōzÛe„w7ģ¤á‡’‘ŒĢ+[$tGĐũyÆjū§RÂc‡tPÛĸēÛ¸ûė[‰ôäđ=ëŸYdĘ?0$Ä •Oō3ôĸ÷Ų„¤}>ion$ģ…6´ˇ-%Ü2ą‘eĨ*Ãv‘éČéX-'úYĩXr›sÎrNáÆ?ÆŽęÚÚčl-ūĸÂ;iŽäōÉęËĀ#ŸĀ~•‡ÉVßb€¤ƒ‘øķø ŗ¤Ynš¸ˇûJė[c#l?˅ĀãÕĄ5ũŒPKZÆŠfĄ÷äîį’ŲÎ Íķ=A&ÕÛ2nĻ2Y-ÄQ˜ –q؎˜ô˙œÕ;KČŽūKr|ĐHįîœqΧįU.å“û:āl•ĖQUēāņƒô~U Œ~L:ƒũÆ @Šõ9'ëĀ5Ŧ=ČąĻĶ5´ËWÕ#’âoŨÆ$_,ĸˇŒgÛ Šŋ¨DÛËfĀŨƒÆsōöôéTėîÚĐ[A.âß{#%‰č ŋt•d¸‰°˛í"N3÷˛íÃôöŦĻÜĨĖ ŪeXtû¨ôvœ@ōÅor^ ŠYˆ+“ÜŒŽŪ•ŖĒ# qa`ÆĒÍĪL“&?!Âē‹iöDŗ‹æXá›älũÔ :tč>Ŋ*Ŧēļ–ÚtņĪbĻæLĒÎĖGõãŽ*œmŖeĘ=.r‚‹‹“’ē$3"✌“Ī>üķīPŗĩíģ#4—_lļ~ĸ­IŒZYšHäd c=šP0~¤ũFkc†ī#?Ŋ‹å?*ļ{zãųã­4îgÔ¯Ē^Hn-m¤*÷{ĻN8ëŒVĨ“Ëo&üŗo|Fø8ÁëĪũō~ĩĪęKˇY)ÔÆT}xųšÚōå‚;Îėí,Įę¤ūcp•]Ed‡%a/g¸O.5uÛšĮ\ķõ'𩜠{DdˆžæUØ]į‘Á>ŸįŖĸĻĢ"H™ˇŽ4#ĪŨmŖ8=€äûZ†ú&ŧšÍZ "ƒ€6푟l*mÜi%ŠŽ#hícYĖ@ .UX0õ äb¨—‹nšáŠĄ?(wíŨ°j7\$Qđœ įņũ*ĻŽ‹ŠŪGwû8˜,&œtę:õūtŖa-LÃ},vQDŠ$+É;ˇSéÆ?*ž58Ą†ŲâfYĖŖîķ×ŸZŽ;{ųÄqË†ĘÆ ōrHžũ>ĩ%öŽ!ÂF‚ØĄbÆpgŊVú ޤ3Ū#É3ŦæXʃŊķģvyōĢÁƒEÆCį$ eG&ŗâhŦäĸââ@"ÎFܜûōĀ~Ŋ%ÔúĒĮ<æFtMĨØc88ãÖĨÛrlg!¸\+F9Čū•Rf q$á¤}ĀĄũÜpqíŠŌ’ .D‰ÊØcŒ›Ķļ?ÆŠ´ á)…O˜zSæĐl¤TH¤6ä!Wŋũjž_*e‘ĢnųJƒ“šmÄ2™âEŪ!‡äŠt‹ŖZDXž>œķÆ…ĸš:ˇr9§XârD1ž{Œž@9úĘ‰įŠØ5´qģ2ŨAúcÚĨ-.’šUÃÛ#Ÿ˙Z–)X_ųlĄc=ļŒu}iųąĻl5ĩ=2#R&)æ.HUlséŸĘąŗŽGÜātÂ9ĨM4^UĖŦ&Ū…ƒ¨lä.=}?•0Ũӛ"}ÄŽ3úÕ¨ĢXš;ŗĐcŗžŅv‰OÚ ÚĻ%U_÷Iū§5utš­Dá Ž~hÕ}{đzķéU´ˆe{¨¤ ‹eõĢ‘Č gžõĄys<_jÜKHO—ā‘‘˙ęū\×bZ]M•šiĨ¸[8ÕPŋŧ…'čsĀäv4Ĩ%kémŲ} =ێqÍWšBÁn.Ĩ1:€Ø“1ÍZYöH|ö‰C bŌ6d|vŸo֛Z\aËÉĮ„’<šUߜúJŽÎ‘M;¤I>T*C2r1ØUúyI†öEˇsûĩáΎ= 2÷H:^ŗoq TrC:ÜąnÁÁ斃ętK–VČҍXÔ´°yöŦû̈­‹‰3†!ŗōy'ß57ÚūNį)ŖnAãŋĨŲ2‡VUe# d•lØâ‹X#ō™ÛxSįw|ƒÛ°ë×Ŋ"Ėnu*ŌHFėŖāņĨ˛K oYYF4‡šôĒŌĘČØŠÖ4Ā îP1ô˙ëSk°“(‰G›öxa`d 4ŒC'¯'ŋ#ZšwĒŲYĀŅ„’3œyQžëųTÁB~ė Æ73įķ=éÍ3•gæÎ¨_ūŊ]‚Å4š "…îĸhVF•€Ũ˙Ö æČI*!Œ31“v=OĻ3ZF;KxūfķIl?.1OŠæ9ĸ6ę‘ųjOĘŊHú˙J_ ąËÜļ”[Fe_—8ōÁč?úāTÖēAēŽ-%š y98ų}yīÅkÉ E¨HM¸-ĸÉĮQĪNzZˇ{gäme€qΘ@Qs.Ĩ¸õõŸ”6˛>9ägõƒŦHŦCéķä6ߑķųŠįÅÛÉŦ=Ŧē[‚čPÚŧįž äu9Ģ˙`ļŽHĨ1ÆwūíNKqÜz÷Å:h5#j+õ™~kyÔ˙u”wtÍ'ũŽâ6Î0ā¯ķŦ¨l‹ËļŲį‚W$eĨ~ŨšÎi“Z<—N™+"ô˛Üw#´$&Õ΋jĸr@Ļĸi“Ί`^LāöwŦ¸Ä f$›iU]ĖÎ2rŋׯ5MuPōī”!Á,ČƒĶ ÛÉúãĨ.FØų’:‹xظ‚bORzŸrjYā’Õ”HFO<•ÎÚŪË$Ī.’T"6"r#Ž0~Ÿ•Ku¨}š%íČļõŪyíųÕėNæÚv Į9$ wš=ĢĪTkčŨ”Àp2ûIŊM\[čŖŽT3ô+ķũJ.4ZEî5 Íä‘'uEíܓčz͹ԔHņZ#M2dAUSõīøU mšhė/#ĖI s€ĐĶ?į4ނŋëÛĢÕōmĮ`“"˛´‹ÜÔ;Ôđ 0„U]€T9ãŋãéP@Ņŗūôģœ`įˇ#đ̇v’qØ/”ĨsEĀĒ" ãôĢR‡Š2'c…nk>BR1æë€O úf›ö—,Ļ49l ¤ãō¨LĢxf#9=éĻŌ wĀ`¸8ôúRÛ¯Ú"_.A¸ä†8üé¨Ō#Τ‡ŒŒ+.ŸzŗžG™ŠĮ$˛ÆčdCĖmįŋˇāx­°ĩ¸īî'Ž+hĨ ĮβpØįvįš¨–ÄÉh`É-Ô֗ŗĘ"Rr ŦpÃܜŸzĘÔåŒhs‹íNCō~č" üŸR~`:Aí]Ž—¤^Eŋmģķ"™GîĮ^­ÆzķũjžšŖÅ$*ÚĮ4ûJĸ%¸9ôĪ#§Žk>]WQrhxUĮ˜ŗĒŧŅ’ĀTî}ņĪž+ĨąŌVå"’ËUŠELģ|ŊŖĶ5…ĸ´˜„¨ŒįįÆJŽāįüEi^*ŲØĢKmWH†9X‚ĮšüzpJŠę’‹9[V5“Ë‚ÚåoĨ+ÕK˜ãøJö'8ūu˨{‰n.ãˇga|ŋ”ôô=øІ;Ûû%ķO–Ņ˙Ģ„\ķīĶ>Õąi -›Ë•+GÖÃ9ū#89÷ëÅ%KČJ6+‰¯bĩŒÉĮžVWĄã ˜ĻÅl>×ŗnerH pŲĪUõū!RÜ gˇ˜AōČUŽ7ųQŒõéëQÁ8ˇO6äÎ8LɖÆ>éüˆÍ4K×RXíZãĪŽ{ČĄ I]Ī›üjÕļ™j&û=Îû}蹑į ĪąšĪšœ=ˆWŽ8æsˆK įžāCōwíĻ*‹æCæHĢûĀŨ€nØ8īE™+ĖŅÕmĨŅÔÍ~÷*íq€ ŽrsĮĐį=ŠÆōØîŽ’ōŪƒhōX|Ά ÆxčxõĮĩēUŽ­§1ŊŊ q¸ĸGˇs?˞‡žsôúW?sm5ĸ$qĢnfË0Č Üā{dåRŖîËmZäņjrT%<–턉ÕS„ëĮ÷ģwÔŌęSJe…¤WāÎØ9ĻIíéE†Ĩö{VûeēĄÂĤcĪ>۟•B׹Ą&™É!˜yx>¤u?­6ŧˆØž{›ģe2ĄV‘Ė_—Ŗ `ã×ÚŠ.­{4/§ŧÛ  ~L¸“Ķ'Üį¯zK‹—šķU`V_”ÆGĄúÕ­;LūŅŌŽ/ä–ŨLLÛ n m‰ãĄĀõ¤ĸģ ]—ėlgųŪ4†3+Šl`c׎ƒųÕëI,%[K•+"Éļpl)Î}ōjMPŊ“^K{[ąiö‰vŠbB€GCüĒ­ŅԗS¸ĩæë{ųjČÅÖF8ĀĪ~¸§ËĨĘzŖSOÕe˛ŠKˆÖãtƒ‡ÂsÆ@õČíL†áo#Pđ¨,ØpĀ_ĄÍUL(ŽhY”6]pÜįį€O^Ô]n´ö›Ë78.{)ĮSŸR§ôŠ•äŦ+ˇĄŪčvĪŸĻ/-ŲžÄv+.āĒ6œGāŗeY|¨äb9Į¨öÆ+_Xņ7-ĘA}öøŨreØĘǏų¸<ƒÂ°—RyņfÉöƒĖî¤ÄõŠjQVDNËD-âî°Ų$eŨ\ąÁÉČ^ ûŠŠijZÅíĀ/39 …ûä)įđĪ_juÅėÎvK; @p?CĪŊnČéå7— l,s芧õŨúÕ+ĩfLQŖl"ŗxHX3¯Žūúâ ŊžûĪ!‘¤‘9Üxp 'ß9üŊĒæ‹ˇą$PB÷ˡßōéîjƟe{ĒęŌĮio÷œLpƒßԂOä(WWąI6a™Y%-<˞Ā9,N={€3ÆkvęWō ‘™ö#žX”õÜ}ēsīBøj{ŨJxî¯a°–ŲĘFÎģ˛rF?ŨæŸltûd_ļ@Ķ I$yŒŪ#ŋN=s͏5ŽW)^Ilnn„]īˇ)ģĖ+Œa‡'°ÍAgŖÍ­ŪÜXXÍBŅ…ŽMģ|ƒ†÷Χ¯nÖ´ØõFf°ŗ(s+R9Į˙Xg“YŌ ü?+K' a3īŒŽ„uĸ)^ÂNĪŪøZū]^[šl. o'— D-æddޏü…\´ĶŽu[Ų#d0nKō…$ŽŖ×’1[V'Ôa‚[[{†1Áx^Ē\ ËÔ|EyŠ õ)Ņ „ōՔ}ā3Ô{1ÎkF“ÖåÉC›r؈‚æ0Ļ95Œˇ'ę@ {S2[Įo}öwOŗ°*pIfl~ĮåW´ų,ŽŨ~Ķq)VŲ$˜¨HūúãđĄŠßÛ=”XÜ<Ę&ŪŽ ēā}xÅMX,šŊĖËË[Č$[ɈļâzŽ{`įđŦÍFęi!™-Ļ4 @ųI7Ę1ūMtā{Ë;K{išâ$?0Dä+($ņž:ķPčgDŠ ˆĩHØLß8RO(1‚;g?BVhN6g/`dŠöÖä:´˛įsŸđ¨d -Ž.e ÅB˙{ëø{ÖĢەžhĸ —TYÃÜJtöÆđZ:f@ 'ĸôΝ°ŖšÁŪå3į…GŽE?f‹n3Č}ēî2OåZ6†Ah˸î“;žįŌŗ^ÎIį”lÚ­–eVH§ęjķJÉ2EGˇpœ äpĪzļˆ”ĩEøášeˆ\8-ȝŪČĀĪâMV|´ #)°™1üjįöĨÁ€AtaYƒ c  vŪõ]ÛnY<)ʘÎāAô"ŗC•˜‘˛æIYĀEä§éœ{Ôor-“dq¨w‡ ČūŖš–5ÚY@*ßÂy“$ÛĒŗ į8Į˙¨ÕŠY{"œ+1ŋ%› ´dˇ'<įF~• ™- Ėŧūķ įŠ8üúU¸—igu%ąÜāž˜ëObd'q ĒĖ3N„Ņ 2¸PķĘū`sō‡r8ū;ėŦÃrę7j§lRĮrKäËsäÆĘ9RÛF:ŸRx ZŨ( -ÆD‰ŠŌ÷-&öGĻÃ*‹Čâ$$k€$/˓Ôž1Í*H…&Håû]ę/úĸ@ŒzsLw¤HėâˇIJ6ĩFŒúöäõŖĘ‚ÚÕLķŊHīŸņĪå^‚‘ÖĐąÃ Ũ´ˇ2"1;‹ 8#žžœœbĨû<I!ĩ”æAĖŽ§szžĒ–ÄË ›†rØ ãčp=zU¸™īleYāŒgĮ\⇸")of†Ú Œv¤[Á=ū÷ō˙"” ’Mō\ŖL¯Ī›ÂäzŸåRš‘§i–0~RŠę8 ŸOCP*+š&-+naÔõüi&;ā˛ŧˇß"3¤düÄđ0;ãŽ*7‘fV’ ŲNĐŦ ×ú}*mBúææÁí-Ĩŧ‰´ģ ÅsÁĮŊCoŲâT2UB–Đ÷°+…›FYG–‚š>ūƒđĢ1Aį7•nƒŲrT|Ŗœž´ÂŠ8#ríŸŧ94̞Ō9!–9gĪ6&D~i<Ä9^pĘĮáRner“æb088Į~ÕsF_Ŗû ã#5sĮ+ēÆŒe§ÜôŗÜ4˛öEŽ…ˆ'=ŗI\ŦČâ^zciõîM’#ķmĄrpWi¤öûRYF‘Å™mwdVųõã`žOĩ[–Ōîo´ƒvŗ€>Mƒä‹${ž™?ĘĒÚIĢ$™Œ˜Ä’Fxč?ũz“CkQ-ėÃGˆe0DŽHĘÍüDŌũėʐC H@ڊq*ār{sÅ æ–åÛ"üų3gq8aÉü*Ĩ„ŌŨŪCuå\[ÅŖožBŒ0ū]‡^OĨ¸7ës`[ė[āĮĖTy˜#ļ=ĨV–ÚÖEŽKhŪÔ-"nhÎ8…[æÆĶ‘‚ĄCž¸e%‰"ېü€lܸPāœöū×éFŖš@Ü]‰‹­šĪŒšŠ]§×`1V[Ä0YŦbâÎ[rFNđX~k‘Wâ{†@Œ \îycHüsƒÚ¨ÜIN"‚IBB0Uz°7úõŦųz–Ĩ­ˆ.|MhĖaÆŲ0™ēâŸöØ#ōŽQ˛§ƒŧũĐG¯N¸į'ĨMoanŪsĪmĒWzŠįœõįúÕß ØOÄ{` ķ,Fzđ;zvīSËä.dkۙĪÖ¤}ČßĨŲOŪ& ¯aŽ•Cē{ [œũũ„ēÔ1E§´EOšWåĪˇ3\ūģáXm" tgÔ.$b~W"g Īō+ŅîĨ’(Ų†Åsŧ‘üģ×1u­Oa48ļVĮsdäņŲN=éF7`ŌØį,ü qŠ­˛ĩ‰Š= Ë3qŒíüĀAĪjÕ˛đMË[^ŗ¤‘^™Ë#n ‚{céõ5ŪÚ_îˇCō+œ!Āü*če‘HÜyāščö1jÆ2tyOü"דyņĢLäČŦd˙ĩéÁĮNՍŠč)ņ‰BLb$ Áõ1ųWŽË ÛĘŦævaŒŧ„ŽšĪéTėŧ.ļŗ4ąÜÆÃŅí#9ƒYē-lO-Ī ¸ąŠÎîŪaoœvÆU8Î@÷?įŠĸņÜ!…ĄŠYCČÎãoRz˙ģÛę+Ô<_gĨŲŧp2y ČxX”>UuÅrri1E-ɘÆB1ōŠœ<ĒĘ}8÷äņYĘ2™“§š7 q$īrŪRlvą99č0zcœTŒŅ”Šd ’XúОmŪHÁ$eX„dŒr>ƒųúÕŊdģ&ŨUI8I_‡f ÷p{R3ål§uníÅÁh\ RĨwFzäpxíĪ4E§]˜ŧ”ĻŽFf38ú÷ÔÖ2Kyw9{G;RCÉŨÆ}úÔņũŠ ’Ú7)x™ÚëÁ`ZĻ„ûÁš’Haķų{„q–ÆÎyßũjŲˇŽÁ-<ëԐž÷SŒ0aĮ#ž0xãëXâ8Ä?jŒÃ;åĨ;H$Œ{÷ëëíRÍu$â9n žä å@‚{úÃđ"ĸJû $Mh†ÖöiŌãc›fÕû߇~h7¯bË|Ȕ ‡ägüĒ'Ōåû'šÍgōĒģ˛äg¯äM1mŖ[xž9Dđœ§^¸ß?Bi­Í#bˇštw“]–‘Į(\ąų˙3V­"ŌWSĩ†ōâæŪŨ— }Ā8āZįî&dTTų_’;šĪONœũ3SĘŌ”{˜-æĀoī cØú!CRŊ moL\IoĻ Ō$ån;s͝đúzŸBōôŗe%đ& ŪķâfĘ| mųG 홎~ û›{i ˇ‘Ûí ¤ˆƒŽ˜Čô>˙…tšÛËĨŊäŅÅöuiR2û|ɏ#žĀp~ĸŦ8ŊU‰ŧOw§\,pháã2.qė ÷ã$g¸ZÉ͝V×J•R=מ[Ą%šBI#ÛP}ũąLÔ#Ķ×Yēļ´™§ˇR&Ũ‚[<ũI曧iâMLÛ^ČË!-Â–‰ĀįŪ‡ŖĐMģŒ‡X×f)ē’ōIBŖ+ āā sĐ˒:×Ka8’Õtšb)7s´ÆÁŨí’}Ŋ3XZ”֚¤vPĖūl@;JĘīLíÜ=1×Ūēm×IÔ4é„Îí2ÄhûJ  Ģ`ûĶņní•īnŖáĶoŦä–;ųr6GĘL˜ÁÃsœž9ŦöКM;ÍĶîŌĘmŲ'Lž;~™Ī8Ŧë´ŊŌ5vŽyQæLn’#Žđ=0kJĐ-õŖ$S?Úwcådbp9í‚GR:~yÉ]¤DŊįhŖžŋķ➑nb÷Ѐvâe\î$‡ ŸpžÕCOģK"gš)6es$]F@ÁįŽį ÷ޝ_†÷PÔâŠöČÁwiĮ ą`ŽœŪ´´ÍZŪiađėVPEjđŧGã°ōw6zyãœÕ­Ŧƒz3ŒŽōŌC˛7dģ†Đ3Ķ’xĮŊuˇ&×XđäļVvIˇ]ÆVR$p:Œcæ'ˇ5‹qk%Œ7ĢDĐŽ<ûĄ ģ>î?ŽFIĒoŽBlĻo"dO/yä䎚˙?ZJÉÜQ’…ŅsHׯ\BY ĘģƒĐ.0+RëYŊēŊ7@.X ¯Cœg¯š5‰¨C6qOåĒ(,Jāƒ’zŸC˙ë̐[<+nŗŗ™Di,–Čŋ9\‚1ępGЌúQĖí ų¤×Ûøežģļ7‚P—o“3Š]Å}ŠÉĪĐUŲ´Į6ļ÷ĶÉūŽĄŧĪ-Bŧ`āŽ{œzô5c^ēĶ|W ) 2Z%ŦŽeN#$į0yŸĖúUQė´ä0$͈-×ŧ¸G' Bį;cĄĻÖĨ{ąwÜŊgygöČîQšÚÍNÜ@Á@~ÛžŋŽ+[Ä6ŠsgũŖ¸ŧ•ĐĒKaÁđyĮĶņÁč÷2É,öwģ™HÆs×ëZz~ŋĒhö† ŅyĖx|3cšéĮCųŅĘļ’ˇ,ŠOk}(YcĖ cqôã¯õ­Öö=(K­$dlÛ÷SŒįč 4Ũ[} R{Ģ„YRdĘ3&îĮįš-•îõKųíqÚËđŖ!@^ž‡ŸĪœRjĘâq͚úģŨŲ .ī0í÷ũ9,:[p­¤$ˆ›|ĀĪ‘ÆÍ͂qô ųSî.bËæ™ļ?ŒÎ?_~´É§XÆOܙöžØE9˙ؚŗŠ{ŗ6l5†ąļic&6x‘ÉčøY҇žų呗&= v›9¨ėāSö9]æ#“ÆŨĮĶØÕĢË›m1n Ģ‘㑐āŽßĖņíUē°ī-ē,´9%‰ÄSAĀYV&“æ•ŗÉ >™ĪŊCƒyo,ˇw°GRcr„$ ã=Y†îY`ÆvÂü`0 Gŋ˙^sĒÉ-ŸŲ•Gym#ČH*ŊXŽ™ÆŅRŦĘVks2Ū)gŋ˜ÛĒ˜ão#qūĒd°šēBîeaš[ īÎ~•Ąm44iķ Á™Ô`“ëõ㊖{¨ŽŠĸŒF­–•—÷„ė}ėKî +\͑☮ôÁ‰8ʐHÉĩ‘¤Ö(Âæ #1åUdëž~´ųm¸KEŠ,¨ĘÃi/$įīT7)‘°0>Y É)`ēķc\rdÃÎ|}1š–YŌ4rp#ŠĮqę?Ĩg'ŽĻmhUi9 äÂ0õ˙õđ+M¯bM:kI&f  ōÎõ €î˜ę?õKåvÄīVĪ<į§Z‚ãː‘’ŦãžzV‘•‚ö؎M÷O*Ļžŧā 7oƝFŪ1°îĘņÆ1üĒĨĨŧ‘F Iģæ`8ë’?L-†?ãČ›šmw B{ĢļˇķŸ0ŗ1pĨ~p¸gĐķŌ„Ôęâib€I2ņ’HQÛoƒˇnjĶÚĨˉ-ÄŅ•*6(' Ÿ_ņ¤2Å´ą dŒėā‚Ų9ũq׎ũ¨”Į+‘!!—†įž{PŗGÆ $ŽŦHsЃôíÍ=]nļMåÂtdO”6}ŋ_ĨĐ]6Ũ%v€šd ‘ģ)2´ģ6IˇŸŧ#~2sœƒũiÉ<ÎCJQ‘‡ũ*{hmåŒų…aFę Ķ iĘyqČō4Œ~O›œ{qÍ :ße–O-K`$ í_JŠK# Ēå] †q×Đ—žAHÖvWeˆÎp ž~ĩ7¸}šx'ũ˙— â9@<÷ĨIœŌŧ—PŨÅp‘žŅ‘ōô÷8ĪáZē”Ohŋ*…ļg8œž{sL[šš7ÅŖÆ"Î@1÷ĀU_ ­bœĪq-°—í ¸• gˇō˙ŠåíĖI ‹ Í÷\ųdŽĮķéUĸyî¯ĖEtą†.æhļ“ė9ŋÆÜ3îķ_؜”$ņūŊ$í°n%Õ¸ˇ´v/<Ķĸîų ā qŒúæĒ=›e-ÜŦCŦ¸Y›q;uĮ\{zUÉĨ"ÚY兤•@—`'Ž=;ûUåÛseãæÜGĖq‚3ØķÛԟMÔĮ†&†/5QfČČ ŗq遡 ü*oô‰]üģdpė,qˇŋ¤w¤ÔõHÍŧ !9ŸæaüG‘Ž{įÔvĒåĐF%ŲŋŗēhVņíĻ}‰ˇĖŦĮ°˙õö­( 5i˞ģ ũōŋ~äá†:•Föæ9u#kfŽā)4Œ8lpOOĶ5›yŠKu'Øô¸ĸ…Ãn’K‰ \tĮúzR×f3vęáĨ‰dr |°Q†ãž;šl—1\ĮöXÉŲ´Ž?••r:úuúķŌąŪøŦ%†I‡› "5…Ā8ūđ=ÁôĀ85•Ė:Eä;8  x ŽįΛ´´Dšˇ×rZÛGge ¤…^7mR $“Á<õį¯ĩM%ģ@đBn ŗ€Â&´zũ3Â™u%žĄvŗÍršŲŧí—)Į`3NžĩĩÖËé#‘ÕĐHDE œsĀwa×ëQŠBéöļ÷q_7Ųq嚍e,wHyRsĮ¯ûÕ¤ŗYnēˆīo•ã*Tž§ß3éíWlTYfķTH÷,Ā#žÎjŽĄÜEtą@æV|yjĀ1<ão=>”04­>ÂÆ'cy(DĀÅōļy8#ļsõôĻM¯EĒ\ųOpđĪ€–Öā ūķĶūĩi4SPQ n<0W҉É÷˙={*A#Āc ģŽ€u=¯~ÕwBi—ŦR;ÛG™lÕcMȒ\ŦØëĪPOnĸm”O*å6xÃ<‘ÁĪCōūCņ̈ë`Ģ3¸lOŪô>‚›h°XNöą/Úq¸9fõëūy¨rI GŠ—–Ījđ™b oĩ^;Šä zûtŠ$ģ´˛|mÜ6‚āŒvĮäxŽ|Ã$žeú’o– p0G@z*ÂÕutģx|ŖålH„‘Ęž3Ā÷ĪZįu.ö%É­BEkŠúgY„dąāžyĮ\sLhīæ&!Eɇ/=:œšÉ˛ÕJYģÛ,ō‡bRcz¯lp0=ĪįWl¯žęÚ7†Đ;¯&xNp7sČũ{WJm!Ų=˯D’­&ÂÁÎI'Ū5B÷I‹TƒėΎk(tũá ˇN0jŅŊûTeT.i‡Ą<ķĮ\u¨%š+$œZ•H‚’F wéëßŠĪ”ĸK-6xm.,Ú"ĄÚgĪb …÷=‡ZHėôįŋžß|jųžÚ[`Ā#w9ÎsĪáU­u)/-<ÄÚčf.ĸFDAœöü*ÔĨĨŽ´–5ša†fŒ˛—œ•?(œUÛ¸Ŋo<3Ļ –fÛŖķDÅHĪĸŸĀÖN§g-­Â+Qēā.lāõ3[ ˇ0ۙ'…ŽĻeÎ\nĪ Œd˙…Cy*BÖī‘*ĸņĩ˜ āķ͌ÂĨE}‘ķÉ’ßxžŪ3ow§ųčƒs€¤6=N:~UŸŠ PLĐÉéÂ2Æ­ŒvĪ_jíėuIöG’呿c AéíĮo­dOkipōŦÖĪ!ûé ry$qםLŖ4ģ—ĖšØĨiâ[V%÷Ã)$/•ęsÎčj[­bo0}‚mŅãœcŽy÷ôũkÚØˇ™orÅæąIÎėgŽŖ‡TŗĐåģÔL‘Î@ÉXß,¸ã‘î{Vp­ijŒîŪ‡eŠŧ‚ņž0AÆīĀ×CmĒÛÎ>YņÎ+…ēŌī >DûBõ*ĘeŽŪøíŠŽÚLcn\ĮĮĘe¸î=ÅuFjBjÄŪ)‡íēÔŦÆE–8Ôˇ!A=TÜ:é×Ãöw*dxbĮU>Räûō'­yžĄĒOcĒ"BYÚëBœxôķŽō×ÄWe_ĩÛ§”Č`?ß”cÍ'rVæˇö%°ļ 1)ëģ`Sú\–ŗáYPM! IûÔevf/ŒFF1Œ1͊í­ukkĨXį‚1ÔUĀÉ'C֜¨ĸˇĐđĢī ÜÁFbąˆ¤›vģr}Ā9ËtŦ{‹yˇĢ•V|(V÷˙õWĐķéö÷6í ČŦ÷ģČ=YRxWM2‡Š9p×ņĪ=kc8ėe*w^xã¯˙^Ą:eōĢÅ"ÜT\:¸ÎlōŠíĀ>•ëWŪ…äfĘ9Ú˙â(°đÍęÛŊŊĘ[­ļ yb ['?6sČ9>• nĖ|­Ģ3Éc‰$¸0ÛŗaL5q†nøÎ{ķۚŠöÛȞ;uČhŲFßVÁ*GļIį5ę×~ĩ‚WŠ=šId˜7(Ä0>ƒĩrø*îä’kw˂ įq8ŒÔ6ã+0•;+ŒKöi%Šęl1%äāŖtôã?ŠĻ6Dfę]ŦĐSžøíŽœ˙…táAî|˜"ßq€Ęޏycøu=ęiü=ugeÍĢ‘Ä~vÜԒUo@@>‚Ģ›¨)4sĐ@ˇˇqˆ‹ÆĖÁؑōÆ_ “ׁųhÁĒËĨ_ŧą›Iō€â 0Wƒ€@ÉüĢR[1ĻŲv„Å,ĘĨ•<đžÛ‰įũž}k5ôË+%{Ģą%˒́\Îö ûØųŠ‹M’Ŗą×K2ĸ#ŦÁTU Áú/ķ­­CKŅo"ĶSKâs´ģ1ųŲ—€{Ī#˙¯\„ļL°‰!ĖnG˜›IËqĀāõžõNÁ•ÛTŅD71$oģ0H ^7ė=ķÚŗå7Zuđ쎔[(‹j‚ųqĮ@zÕiįžYĸČōâU`prˤõ-ߟūŊTžgžDo1B[ÆųyËķŒāŸJ¤ģ2%ņhÆkÂånâÜ<Žrd`zHÉõãôŠt_Km+Ën^)ˆų™¤Č'ˇéV-<9qŦé’4s“kí¤y…r@^Į=ŗT/ ģĶåKsgöi<Å.TĀ×ņĒŅĢ1ô54mäÔe:Ÿ›<’eƒÉ\ūįéZâ‹‘!¸ļQ)Æ× ãæ÷ú­eZ^…wFD3FbK˙ÄŊąÔ×Ĩ6īEéÖ×ĐŪGrōÆ$¸EäŞqī×ŌĄÅ7v‚Éģ–Ž5 ÍLO„yqŠ`Šę2yõ­á+kYŌfžŊH~ĸDd,\ãvņĶ5›áXâžęëũ'ė“yeŖąåŽ9 ×9ëPËiö;aĸäJ2„ũá×ŋOĄįņĄĮēЏQl\ę:ŧ—P¯ Ū\|áēŋAÉÉūuĸÚŧą]ĨøY]<æÛ+ĻHųOĘ}ģũ3éN„O}Íf‚ÖvŌcžHúg#<~´íFŪÚ])MĩÂŦîĀŧ^YA“Á*sĪĪņ¨Nō%=Hn/Ĩ¸žmJŪQk0Ã9ëĪSõŗĢ]éēī‡"Y-ȘĮ#”’AÃӞzŸNâšÛë[{3 ´š7R#Ē‚““õ*:zVŽĢļ‘§Kej ˙JĘ6ķ’Xwc‘ŽwĘĒí=JRß]Ėø¤ˇĶËÄWs Ę>ÂĨH$įž{ûņQÉs5˛¤Ëĩūb+œ˙´;ö÷ŽĢZđ—övƒÄ×VøUŨ3FŞŨēõū•ËéŅ]^[ß3@ÍSÎ@>d?7<œôíJÖWdō´ũ⌚­ĮØūË÷ž6ŪŒcn=9ü8­ûceĩPš‚ĻC0Œįb)hôŸütĪ‚Ũmīb‡nŨD3å/ō°ėįŠ­_Ŋą‰í–xŪ8į™ŲeŠ2 ƒÎqƒĮ@GãJM]ŖØĐÖ-,!ÔãM+s0Øė°įĐ`c×5æšfą•Ą’1> ;rTœņëĀūJ×Ē%°Đ!ų’GĀg žGëøÕÛ§åKR\‡ōšîvŽƒ éøūU2˛wå)ØÜÉô6Jcōed`Ŧ@É8îíŒĘĩ/¯%CsÎLQɍTîüÃˇSžk™ž´ę3Šm›"ųß<õúšŗĻ4W-=ߜˆDĒBąā¸€>ƒ?%q}›P›‹ŦˆYIU!?w¸ĮÔÍZ(°$fH¤Īt'†GęG~ÕÃZˆˇˇšGŠ YĨÃFä&đĖAĪ<äcĒ'ŧIõa)‰^;)-‘ßĻ}ë;]\RޤM4VJ"ˇĖU›ĖųŗČųsô´gĩŽ#hdp$Ķäc‘šöÉJĢâ­å–Ū[X]caķ)Ą<úúvĻÍŽ] [XŖk­ûmÄN:8ëÁ'AéT’Ŋ¤Rķ3Ž5 ĢË(ášē‘âY !I=GæjîĢ}%ÕŦˆ&–áU˜Ÿ8rG¨Į|ũj­ŋ‡5+}0^ŨDmŠeäIķc téÜtĒ÷,‚ÕNüįO\€8ũj“’WčL¤É´Í2}DŦvĄN_,ØāŽMiĮĨ[ŲÁ$ë"_*Œ>ė•lį#œ}Ō>šĒļ+k î8$(cÜ/Sõ˙ëÔæŪæîBGn08A?LTFKt‚+K™˛O$Ō38ŲŽqîũUēú¨ņÛqĄŸOIëM•]É),ģ€8ė;™ĪŊg;JŒw.˛:õô4Ņ2‡G/—$Ī€Tū@ņūķĒÍuv…H ƒÁßÚ­4RÅfŗ˜˜DĪ’åxÚ2ūcđĒ§NXâíņžÂ“×r™čúmד<‰%ÍˤĘpWįˇņøõëZßgš Rxbe(JDdœbØŽrŧsĀúÖkP=ä÷Z( íÚ¸S'<į?ãW%ÔŽŪæĸŗE‰Ļ2'§¯n2 Å{6Øî/j0\ڒŠp˛E0o6U;‹éžéĶ́P ¤ļYLDG¸ļAœrĖ~÷>œô¨ĩ+Yg––ŅÖ$Mâ/3pbOŗßÖĒÉw'œžM¤Ō"2m°^ŊXŒg×ŋZH |­JåÚōK– AũŪũMhŲ\ۆVGĒF+€]}I>ūÃĨEwža%ŧ¤_6é7Iį¯j˜Noz[ŦPĢlI€įhíČöĄí uÔ¯^t2$-åۄČ23ëÜõö̰[/—$qī‘H$đ8ųúÕx#žk–%Ž<Æā(ĶëN‘Ļi¤ˇ|ōų@íŽõ:BÂŧÚY‘””V ÷ĪøT.A‘";@vTí×ô4–Í’ˆä˜+ĖsšˆČÁč ~5$–ķ;0qoũÛʰ9=:õ4Ŧ –5I,švv”äcnįˇN¤sUí"k˜a¸†įælŠÚ1īųÕĢģ›x‘ąiäĮ崟9ÎNyČë’{ÔR^0ĩÜJÄ<ĨČëéIé¨j&Ĩ-ĘŦq2ųønVVƒëŠbܙb&’I!f ĪĘ^?­^ˇ…î,œ˛KEĢ r?dNĸA? ʨõ§~€>8`YH^~íŌŗÍŖÚjĶēį6҇Ažũqߊ´ZaqŸŨm4›Éč;:ûTč2ė'6ä°ĘmaĀĪŽ1šiöFdW—ĖB%ÉåŊîzgüâÕėw[äĩXĸx€!#ŽqՎ9ü¨–ČOÜa °;BĮ'nrO?§>•m'ĩ‰‚Áē%XÕOËÉ'“Œ{RŊĘąlm:ãĪžS ų€Œŧũ;ķUŦ ģģ`"¸c(/ĩPŽ û§jeėˆlĶeŅ€7ĖĨ°­ĪŋQÁ˙8ŠK.œ­oyą^@ÄÆā1Ā=pqÔQte]Faę5ÍČ,*į‘ŒãŧxÉ=3ÚŦ-˛EyĖĮvpNŪr0NŧúÔV–b9åS Âģ÷vŨƒŽŖ×ęinvČ30“wÜÚū-ôĮ+ôŗĻĮs"ļ'ķF(ē‘GQŸĘŸgŸÅķ$NIķŗôëõĮZuēŲGŅGX*TŠ 9ƒÉĪįÍgÉâ§ÍšĄŽtdÊČûmgĀčX“Ķœcž”›HiŦĻlŔ‰°v€C2ŸúRéđK ,ļņ32Hs€GëšĪĩĖī Û´‘î÷”÷'Ԍđ:}kA5×°ˇŠ0ßģäų“)÷äúšlIjTÔmfŊēy/IGuU†Ü/]ŧu÷įÖ Œ °ĀŠČŖŸš@ 21Žŋ:ÕŧՒâH­ŽāBīPAĪ>‡ŒUI|ģÉe÷PÛŖĘqaŒ¯æ O+ړe?>B įĖ?0ü~•Qg–â(ÍũŲ Ä˜Ũē•9?ĐUeD†I­Lī6Ų>č8ʞ[ž?ŽM=´øåŊ[ŲcšYäY\~ėgĸŽ€tįž}ø4.åîu lZ-d@T,˛6æQÔp03͚ÃģđūĄ¨Üy3à †i"(‹ķAįq$úc¯N+Ĩ0Ø1ĩ6ėą¸ōĀ€<ĀOËīĀëZQ"â0ō…Û:äŽ2IĪųâĻQLFĘÖk2ÚÖ 5ÄKąßËÚd8Îæ#““īW-"–Ē ;df†Ö8'Ą#ˇNÔöķŧń—š7 Ú:Žŧôį×4ۉËĪ;!bb1ģŽH#ķ÷Ļ#Ÿũ4HĄ2dHŦ6đ^xīëR"y쀨Ē—ņįžũĒ;x&,Āųo ¤¸’wíĀO‚#EOđđĘUNŌNņĀĪžŨ}=čŅ 5œ7 ļŒūJ•ũÖĐ9õė8éÆ{Prļ˜C2ĨBģŽš˙<Žô_Į$‘’›c‰ŧ¯Ũ'$ä:zUS,&ü:Î_ĖRŲ…xíŌ’@ZžŪYl(ŲūŌŠōî#Šāôë‘üë2ĪLĀGŽVаËãp€9Ī\ƒŌŦ˙j.Ûås,ŦBeÔ`ߎŋŸ5:_ē-Œ720˰Û˛OQíÅU¤ē…âö&ûfŸ†7\¨UlŖg%ŋ*Wļĩ7 čĒŦaÛ–’}=Mcęvר[´b ?vNõÚ Éë×8íĮÖŖŌĨ 0t72Šųš0Š ÆKäžØĮøŌ˛Jáv˚“ųRE:Hr„Ŧs$9'ŒcđĮCÅ[&;e3ËļKm*›ļĪ^™íUn¯Ž-Žæ1ÛFíŠØ_žœwčߗjŠIŽežpn#œ“#zį¯bûw4‘$zūc,q^Z[‚ķŒ˙gpĪnįđ­Ī@ēVŠąČ$tdg= e}yĀüĒ8-Ųl$‘$K“zÄ ÄJįØ>ŸJ Ũõ%­Jöמj:¯”Ž~euB3VaÕ%ļ™Wwøãlīƒ×ëQM3œI Û $$ ėzp};UWBņIY­œŒ¤ŧāƒĶ#•<õ­ÔŦMŽĻĪ\œŽ°ĖĀ}Ō6ąūŸĨhAŽÅ0Q*XœqĀükˆhV(LĐųĖĒØvw-ŗĐn=}}iņŨ‰āŲ)ET†9zO™č‰"ČŐŽ;éP\NŅ•"R¸āėŒ0õĪjáҝ#”5…é+¸ˇ‘3mįļāÕņâÉ­WfŖdUs†,¸˜ČÅK\Ęɍ;Æú'•Ę´žZ‚w&pŨĪN€d~uwŦ[ÜĖöņ3H˙)hÄ{ÉčOnqũ*ÕŽŠĻ^ÄdŠeWb>W;Ŋđ0zũ+*ņn-aškYfķeˆÆŅŒį9Ī‡Ōš9ÃSe(˛Ä@͆i–ŋ„„͜útâ´Ĩ…ĨĪ™q*âXŪ=ģŊōOU´ĻšäĪbņÆ$ōҘȧū5,ÆāHíį$œģTíÛ<ūĩKS°' -ĸģ5œrNHÚĘĨ‚ācī`€xúÖ5֏ũ­Ŗ\.›>\Ĩc›ÍŠ]ŧeFqžÎ:č"Ņˈŗģ˜Ųžo›ī/¸āĐ-§ƒtPģĖ É/&988ĮNœÖ~Ę[Ø%ČĪ2“ÃˇV:Į› ļ‡*°Ŧ`09čxÉüŗXp)cxķ™Ąb‹0`ŊŗÔ;gŊzί¤ĪƖđ¤ÎʨĖÄųK܀3ųq\ÔūšļŅÚæXd[™J¤ā*ļĐ7ücÕI>Ũ*œYĖéûĮ|öö÷WvÚ)[xŽy[*ĘØÁ :}zÖL×RÜ-ÁŠŅ<˜&áÛ:ņč@ü?*î5/jwÚ¤Ž"‰•7GŨŸåĘõéƒ×Ö đÎ—sl1+HĸWÃga'î¯äyëJ-%qNēöZŪĄjVęĐ,sĀ‚)K †C’LޤqÖ¯ęZūąjV¨âßrŦʤŒĄ;8čqԌ‚>•ŗŖ^Df†ÛO˜˛ ­"c" œõ+ëÔôÅ<OˇyžÎfG$Ŗ’¤t÷Ī^ū•NI+“JĖÍļ™-¯í’÷OûE´nB$Œū02ŲĪé[ē–§bŪ‚Æ ÄÂF+"†$ōz0zŠįu(æT–=¡,ŲčŨqŒU¨%†æá­¤ŠÆP‚[§¨äûĶ}ƛŠ:=ĮH‚ŌōmFâvß°Ā$ ¸šÉâĒŨ›ģ›Ëk ŌIvYŅã`ãîŒö$qY‘ÉĻŪ"“ūŽčŒß.pžZŒįÛŦÚĩ¨2v=Ö6ĩĀ`ęĮ’N9 öÎ9Ŧ÷W@’z˛īö\Ú5ą—RW´ķStk*q÷ƒøqīÆkKRÕm·ūÁsmÄbŪ02~VČaߎkPk˙Z'•C&&8Æw¨īßķúVMŧ˙ēę’4ŋfˊT¤įŽųãōĻ’OA6 īMVÚ ˆãHÄq]\2ĄEÂc8íūņĒ?f‹Lf…§Yš"q°—V\pęqĪųíLŌīÚI÷@"0’#y Î ūGž2j[÷Ôu}­ŽųųaTÛŗ¨ÂŒœ‘‚9æŊ֙2ÛBî oo­%hîÄöASh|++îA䜎ŋ{ķ„^6Ÿg“Ē—ÁWÚrN:Ÿ\õ¤šîîÅĘ`é$c戜žہÎhˇ‚ ŠŌgš/!\ی÷įßZZÔNî×4ml¤žŌŽĩ’×í <ŧnųŲ“øúįëLŅô;ģé%o>$DPŠKu“'æĪü ŋ1Tf7z5ÜR ãHÎO ¸`’ tũjĩu=œmļŌÉ”fVÚû‰,>¸4žåé“Cá†85¸$ɑˆg,Ø'*§NqųU8âahÜĢ3wį8löüˆ­ ."Ԑ\2ĩŗÆūT‹ åėq˙üņT -ôá bޤĮuŠPjâk]ˆ$1Ĩœķ•"y‰ HĀĮ ÄķųS´ģo#Jĩ™ Ŧl#Ąęî€'đQųÕ{š#ŊHl’ŸyŊ0$ŸaƒųVŽ‹¨Gomoq,!ŅQ‚.Ü 1súūt;¨Š*åx|Į†™_‰ģžK?:Ўd2>4>\cøÎ8ük Õô!5i0vp8ëõН|/¨*™â6`Ŧh{~8ŦĻ"]6īĖōö Bįq ōū~|×Ũn6ÚVeĢ­Rōõš9Ž[æL´YųH u5gHÔĄąÔü땁ŒjLfnUãzāžĩέęÜJ×B1ÃŒ˙Ÿ­3Zĩw–;„pB Î9āŽ•q]›×SŠÕĩHĻēķ ˆwW1Ž ãŋõæŽ :;Uũܑ7™€Į-‚01Ķ€QUü7odtA>¤˛ŗI…\08P;zõŸņŦ}L۝^å-ŸtAŒjŨ äHíI-yŠZ{ĮSĨ7ˆa’3væ‘bÌeG ä÷ĮķÕSRąHl ›rl'%Ŗ;ˇ^ŊzÖ5œĒ–­,L3Œ…<;Ÿ ūUĩgj.mÜyHÆoģ‰vŒ1ú~ĩ-ķ2“ŒˇY!—O–hîŧŽY0H#Û9¨ãŠÜąîĘļҐTpjíĨŨö‡zūb#ģ„R(eažĮ<}Đ3Ú°ŧÉōq'ôĻĄÍš3Iž›ok—y%ÛEb#IŒlĢœ’F ëųÕģۙ’Ôų1 fēbė$Rp=€ü:ÖtV‚i_3#ĘО ã'ĄĀ§­¤LĖūa”üĢģ'$ä+Ķčt>Ãi'6ą†%Á*͞Š9Îx<ņųո͊Áû¤,\eŖãŒã:v¨ÚyaŠUķėOŨ-Ū›¤P–*ŗ”~C™2š€xīÔbˆÉ0iĸ ”kž?1“ŲŅ8Á9Į~}qߚŗcj ûL>L˛"…uc“Į§Lžj6+˜Úg#ƒŊĀävĀâŦ\NŗÜ,p\—ŒĮÎĖŸ `zĐ´]–Yŗ#ĀĪ;Ž3Čô¨'‰§Ü’Ū$ŋHA/(ā~}iRÎ!˜0ëqĪ—ēL–õlĶëQ%Ŧ tÉ~Ō—#ā×’z: <€4°‘Úųv¨2[lŸ}ģŒ‘ĐįŠ[ë¸Zhā d%ŋ‡×Žŗ4íp™ˆČÚÁ‹Øū_­)+9,ąJÄ€N8ôöüésCf•Úéäe˛ž×\Œ÷Į˜%bežáŲ!ˆS#dŠįˇ"–‹pՖ/#x­ŽfÜķˌˆ•9Æ=ū™8ŦĻžxmYĖĐųŌ´(ŲØ1Ķ'Ķüį5ĐÅ!iaš–PRXĀØŨvã ëXW‘%ÅÖæÄ,§•-ĩcžOvÉü¨`Ž:ÚkčbŽw…ÖB›CJpH9ÆĐOöúT¨G%Üųģå1Už~lūž¸Ģ×PĮyö|]¤“ã,™Æ3žœtÅeĮĻēŨ-¯œ#PÁvcæP:`įБøŅĒ{rWÔĪTyÎë.\̌pĮœđ;VxŽiį}ĄšBŒ5n;ūũ}kRņ6Č˙jˆĐ6ÕUÆ2ĮŒž8Æ}jÂ^@đ {4–vlų€üĀz`ö9Į´rŊÉčIĨÉ6'|‚MŅĘņārãšĒ alöŌNĸ(Ķx@Î>bHˆüø˙ëæ¤û6&kqpˆP3 §9'AëTâ†);6đ6ŌrÁą:ũ3Čĸ×ÜWž†­ŊÅ…ŽŸ&g™Ø TŠ0AN{`Z!šÜČû ʋåy‡'zŒãž˜ã=ēÕ[2æŠŗĮå\ÎYÉ$`ô#ë͊ˇ-ŦÖņA,Nägvl•įåĪ@§9įž)ßąWĩ‰Ąŧ2Û4r+És(`‚>ˆNžõ6Ĩq`OŠÖS;üĨäfep~ŋž}ęÔ ŧ1‘V3ĩšÎAã ~\Ņę3ZÁÎĄĻ›kÖ)„DŽ÷Ɍü8čsëøÕ?'VĶĨũ匒Ā exwĀ?‰éÚĨ¸ē†ÁíäxL-ēĖØÆŪŋĶžôˇW7w—QɉE˛Ģ7ČÄą8ן…0°kšN™†¸—Ëā“œÆ ā õÎ*;E°ĩ°´ņ¸’ŪQ$mYCs¸˙įŸŠÆ(š+9<°ŋlģ‘áķ¤WRPtΰ=1ÖĨ[ÕÔ╠Įnc +/ņgĒąĮ÷Ԕ.î'd[Ôu‹!M!uŪpÜúgéTâû—‹m{ū ͧ”‘Ī^8Á¨§nĖeŅļ¤J7GōeĮ^FF8ôãų^M"K‹+{˜XĨËmfw—8Œ’ÜrqŽĸ‡gĐfuΗ`—čÖ/<‘˛Ŧ{UŲü!˛zđƨũ˛Ę{ۛd‘&Ėj]Œ8Ν"´¤ÔcĩxĸŸsĘeTgHYŋsĪJžöé2Ŗ‰î'qēDĀ8Ī|ō03Į^¸¤ā¯ĸĪĪ4ņ[;CĶ: Æ#9 v Ķ˙¯×ĨKmÎĨˇãæl!ˇËĮ#ķ5ĢĻ7›*‡YĘI$€‚@čsN?D°Hŗ™Ū5é˛dļšõ§^˙BÕģ”ô9¯\jRAopėŽņΈŒ$d ę}—?…Aá[ģ›˙9ä1ÛnjćN„NxéÜUĪĩŽĢ ÆmUmæÜ2>B >äœūĩjŪ7KˇąƒHyŲ\•’M…÷Œ÷#§ļ8ĢōbÕ3Béæ´‡H’ …R­ÜƒĮ?LöŦËģÍ5gb¨ßh—ĒF>öP;ž=*wđü˛ę¯ ÍøVuķcˆ/–Ė28;˛OôĮømËgl6ų°Š!JįŊ*Uēj äE­ŨÉYíb“É+‘.ã–õŒ{ûՙ,ËۉžŲâÜ7žO`Gã×ķŽ‘ö,)Qĸ˛ČärŸOÃ5%äŦTė’=âP§g¨Ī~˙LĨ%¸ŌL撁…ši8 ҏÁéØã ôö§$˛Ĩ˛Ė€( Î=G5ģ˜.ŽNĻ1!ųV1ō¯×ŽüVtú|ÚtĪ ĀØ7ƒĩŗééôĒR[ ĸ[y WcķæF6’}N)ŅŊÄZ”KŌĸ–Æc¸û⚰#€Ģásƒ¸ę9īMÁF(ä€nÆHŽŊ9ĮøPīĐ Mnú›“ˆ Øe!€ü?¨Ģâ[PŒdŠP›ļ†Ā ˙œW+s'ö\‚b䪌&î9V€Ž)-<œ†VÁË7ę=ũĒ“}Bæä:ÄWW1ĨĢ­Én™lË˙­]”Eēoˆ3OøW™ÁļÆāNŦÎc=#99ŽĸÃÄW;IíYqŸĖz1!ļIƒ$âįUôČâåHĀ0!•‰e?Ē'İÆäO ¨éšH UČīŦīGîn†OTŸ~ôrVö˛īfēI mÁUāg öāķøVMū‘$—{ĸģŽ<€ĒŦvcÎāį<ö­õ@n“dR¸TĘä°ĀΝCøœņZbƒ؊OR3XÆ ÖEÉęsūUÔLĄÖŪpĘ.xĮžČĮëš×4+‹‰ÛXE b2gF+×áFÁī^”ēā‚@õĮRą6Ā7€LĶtĶV#sĘ.üwza[ĢŲĖhŲû5ĸ€Ŋ1€p}sŸjä.ôOØ !KgrŦv‰_.œ÷īĪNŲõ¯uÕ­gģŌåŠŨUfu˕ũ3\Íå¤ēIKË ķ*%”6ĮŪ :ũjēŦؙãú…ŽĄ¨ĸ?Ų¤ČDØgĄ@q¸ƒdņÍfĀōYI!{f$pyĀëÜô˙"ŊSžzēé–đ•ˇÜ†2á‹*˛ƒĮ~ųčkšēŅîŽ.dĩKt™Ôąķ Č9Æ=ņ“üë=´{ŖŅ´Z}֍ÄōĨā4IĶ ¯žzûVuąļēeqpQš8dāۏ­ú^Ą ‰LŅÛÄĨ]—IėNĻŗĢÂōI1YŽÔųĘœb­Ŗ’i ž›õōZG;E 2ēĖŧŽŠ9ÁÆ_›ÚĩU1¨˛ŽŅXŦ‡å.WŋĻīÄûÔ:¸Ú}Š\ˆJÜēàŽCtūīŊgß_ĩÅ䗮†ŪÚa’ƒŨ‡?ŸZÎÍŊDĸŪ…‚īq,ãR¸&}Ęąģ ’p9üšö¤XņrwÛĒ…]‰)$¨ã8ôžę!sa-¸Š$t–XFöŨĐō;ūĒm*5’4ą‘”Ë(e.ĕbsÆ{R—vNŖo–I'Y7Ú˛Ôd>ö3ĮP†b­ōÛåiÄ??ŌˇáŧĩĶL÷Ą~Į&2Öbpv7ąįüšÅxÚâ_20Áˁ•éۂ:Rē°­ÔĶĩi"(ûVˇ°Áqķ0õ ˇéOšœ7ėŨ$ÅT/÷@SúU$ģK‹´`OÉ ÷pn}Éũ).nm ˆ“L–ūQų\åƒrO뜏ĘĻP}'Øšig Œņ “#ÉÎ='ëjŗŦŊ¯Ų#M=&g*čTb2Į^¸˙ ƒN‘&YaŠHņ&p`œŸ×­m—G‘/Fų-žÜČõÚN9ČéYÆíęL•ŅĪOs}s,M ų–ņ„‚ Ø'p ëĶ“úÖŗøpßKföú’¤ˆw>œ3`dôéƒßĻ+ CÖ_K–TIJ+œ`.IĀÆėúô<ß]]uMrŪ¸”BØ$@CfAŒ9ôĪŽ+[k¯AĨžäZ•ÖŠáĢeŽ[€Ō\męzp~‡žÕ‰¤\%åŧļŌÅÁWq,š+’y_Į5ŗwu6Š 2D‚X/ĘÛˇäg<;ö­¨ŧ3qŽoĘ$jĐŗą„Ë‘‘ŸnrqDÖș&Ũ—C™™ã3Ŧ0/îĪņų9#ōĢWVˇÖˇ¤Ãb^7‡q€rņ͝¯Ŋ6Ņ!“.9\Ÿž ¨Æ:ķ]YÕ-u3|ą¤W@‘2(\Œq‘֝íĄ)_sžk–ļ• ŧ†#¨p0H=Ŋ3ŸÂ6¸¸vūōYŒcn3ķvīíR 2á›Íh%’ˇ„#9Á§^zTVîmåi4SžÄäüĮyú.ãõÅ&ī kąÕ#K“MKt76ˇ+ ËpË1É'_˜ví\ÜZŦqjK˛ym>ŸÉ<Ÿ0)_ȁø{ÕŨ*ô^ĀÂX×&1#œā1B3ØņŸÎ™aŗ]˛Œ“*°y#™ņŊ‘YXäœį<ÕŲ´’ē ģÔZîãėéō(q“´7=ĨCöWĪú×ücųÕ)%ķ5ÖVQ&ų{‚€‘Ÿoo¨ŽĨt_:+KķˤH9īüTĩD+=Ī@hŖļŌR##īAšŖlΌũ߯cYbí'1ĮnŦ˛ÁŨcÉSĐ{~5N?6G dŒyŸ.ØųÜqß׃ëRÚiÍošZũŠ–ÎÅāØČäũ3ŠîWlęo] 0ÜF-’5†bū`āũâOr=GŋãVŽä›ėŌE‘,Žä` dį‘׎ÔëxPˈínX€8ˇMŲ=Vû=Ā1Ím*î-æ& rŽ_ŌĢDNĸAų^Úųås€V2ãåîHĮ•ĻĩŠ dI:ĒāŠīךdz\6pyķÜrģŧŽĨ˜Žœöü+:(–[Ŏ1Ŧw #ĮpõÜĪëBWz•{îY­į’įĖ]ÅBœ8%OR)ÂC{e7ÚÂēŪ…rĨū_ÃŌ yž‘`¸ū ÷Tq€@Ī8äЖ~]Äfî# xŨÉāž´1&‰'Ž&ˇ†UF0ÍĮ@F8Fâx•Õ‹6ā#Ģ0īøvĢw7oqtĮž¸Ė…ĮOáĶŪŠGo=ÅãKt›aæ@hWũ3͚LeøŽŲnåMĀÁ*OŽyÉíڞ–×ŧOq/˜Ĩ”Ûċ’ĮķĪëQˆí–Ū' (WaōƤœņ×ķŅp.mœH’3“—8 ?‹§ ü([ë  y5Īīëtōđ™ķ9ôüĒ­úS…ģd0P˜i1ŖōIëŪļ,JĮlīäÅæ)%foŧį×`Sc‚Ō=’ūčÜے]˜ú–„gAö'ēōÖÔCŧ‚ŪJ€zā‘īôëQ‹8äÔ!‘Ô?ÉėĮĐĀV„ĶE$Ę<°Ŗ#=OpĒąÄ5/Øe1Ū+s’N3‘ÎxĮ ĨnĄ°§U°]ą]ĒĀ’Lú€j{#§JĶ9ˇÛ((åFJôĪosYŸØąÄážO˜ķ.J.ö<äúwãŠÕ‚go´ŧŒĻ_•W=?‹ķ<ū•_! š‰”Iđ‘) ĘnyęI÷ĒÖąąš‘H‰Fæ’<•ĪŽ2}qOÔŽŪHaiŸv2rĪV'ÜõõÅWžÖMAc+7`ČImăˇāĩ)w_ŲiچĨî|įÜ& Jr`—8åŊ{~šÚ€ļ¸D„…ŽDPĄ×¤~€‘øqQ› gĶáí%eÉS#œüv9#š†y-"ļHÂ ō͞ É'Š4ˇĐOBĨü‹#ē:ͅ\m)´?Lßdūõ¤r`R!ŗ™e$n(1ÆNGâŪ™ŠRæŪ2 ßšŠ’Āõ>:~õ m ­äNœī$°$NŌAč(L[Ŋî}R YŠíBIM¸Û×?^zôíÍ-ÍöËŪ8ÄCäDÆrę:úŠ„ųRi÷1‰C]I("}Ĩ•rFT…ĮoÂĢÛHķ($!´s€ŠÃ.A§nũ=*žÖ1–á&šŲá',’áļ' éķ}MfjšĨƤYc„Čų!ō yp üXî:vŽģ[°ĩš‘ÍēKĸŧ-Éār@㊯ū§Ú 2 ļ!gsŊ¸Âƒ’XöĀŦš[VŽcBŗÕî.…˛ŲM`ĒÄŧĸ% ļŸĐ͚ī#_ Č~Ī$×  ¯ƒ’É8ÆGĨVĩšäYËp6Ijƒ÷HĖc ˛ŠˇŽOëEâGÃn`ōˇ°Úa“ũcK3’3ÎsÅiËdĶ"ēIäŠāģ9Ē•LŽáÎC×ŌĨ:K˙eÉæNDŸx4Ą‰ˆČU#ŋ=1ÉŦķŖ,Z|ņ¤K¯˛K•;23×#’A'õíSi°(+iu%Ã)f–BUAÆãÁ'Ü`gõŊöbŋCRÚú+D 2Ån„´¯<ŗeļĐîëÛüŠ `‡qiĨyŒøÛ<ˆIla†éQ¤“Įyu<ÛHĢŠ*Ĩ˛J~ Ī`+^ņm.LÚbL—'× ũje¨âfŨ\ÎÍū…"†l&%Š Øįā+~u.™¨OemŊá‰Ė‡–irO_¯Ö•Ë/ÛmŌ6@"č~sķzŒą¨5ŅĶĸ&ŨKüaąäą1ĶéøRMė'ļ×FĄ4uŠéø’°ÚF~đ;į'¨Õ×ŗ•/V;}RiŒ04‹‡n?tp>¸įÖŠEaÕĶßj2Xĩ”RU‘SÆÜž éúÕÉ.Žca -HãøGˇøSWļ ü‹ŅMgz–wÅ4÷BĖ›v…8,GŽÕKPŸKR—}ĢĘY6;Â\sŒ.:œûbŦGs’#{Cž3œāŽĮ#׎k"ú /f†ãeÄr¨m–ęqŒđ8č:˙ęĨuXŌžÅ›„ŧ•Ë‚ÁÚ>yĀĀuįjiõx-#Š5"fųL’—' =˙Zŋ´ãēG„#6ۆ=øÎsĪSéŌŗo4ų!ĩūŌiΚ°Éˇ fį§C̓õéJëíčlÃŕ´đË*˜Kˇ@Wq÷ëŒ{U{ģ›8­îÖ|Hpc+œ1ĀžŧķÖ¨JIˇEml&ĩXƒîrx˜ĪôôŠonØiĢi™Z\—fb(#wAŸAĮ­$õŅteëüIVö¯- +Įlyd§<¨8#ŽĮđ­MjãS‚XļMhö’,wg!cîŦ§œƒņĢsYĨ…ÅļËi'Œ¸cš›ž9$’:ՆēŗŅ´‚ĶČ<ИēÁ¸1Ryä’;jîÛ]Šs´ļŌ´ÖRDÉ™Ÿqų29 tĮ\˙>•Īë7:ƒjĢk™C˜NQ†7íãqĪ įךmžÂ˛)鷓Ūëú•ģ2ŧ(CBGed}r n*žgQŌ¸­6āh¯qzđIĩĐ$°*xĀË(úgņŽĒÆí$ąsquæ—så4+•+ŽFqÔõĀéYG™Ģą"å¨t¨$ō+cU¤ 9dOjætšRÚâi,.–á÷íppY=ŋ>õu5énĄ‘dŽ9„Š4|ŽA=8?΍̋ŠŅ•fĘWV1\‰%1D%',ä`ļ=ĮĶŊWž’?5…!ūQOį×&§Qē´r ™ö¨#/ļqž=* ŨzÃIˇ{™šŪBÁƒ—=9PhsVŅ)EĄym—ÎEm¤†R2Į9¨ĪôŦ#{+†h~ë´J7¨×§Ļ3é[Qŧmao*^2ĪȒš'ŒôĀĮZHôäÔZBøãr؏˜{ôΧ­;…´)ŧÉ,€Å,r1ā#eųTŅ™6yc1*>väšģoĄG%ģ\ßĘģ°Ų‘ÛčsT^)#”Co˛Į’¯Į q‚xį=(oPKB/-ŨĮ˜BĢ¨ė¤ĻqôéP4˛ÛÄ0 ā4y*}0{S$ķŗlēQēBcųHĮB3úŌ;]ĮdF5¸EÚU#ˇĘ{Sē VēÅՖ0%ōČĀRīžJĐ´ņp6ãŗÄzūšĀ‘G E‘|Á¸•ČÎAäû÷Ą¯7Ė`*Ž2Lc€§įDdėsm¯Y΁œŽâ´"¸Žā~íÃëÖŧáœKToī”įúÔÖڍÔOåũĄöÁū˜?áUqNHrSéNڋČ_íqö~&ž'U–0ņ˙ŗÖļmuür3Œō3ÚŠJé\Ŧ\Ôte†6ēē• ģųĻ)—>iUäsœÁõĢ6÷KgėŠ+(LĮs(W$$„ ã<â ÔõßĩÅ[>ČĻgerÁĐķŽsõ¨ôhWÖREÍ.8!sŽ ëŒô8ũĸ4Ŋ–χ‰c˛Ķė"ž-)-žYBŠBÃnFTŽ™ÆHĒzUÄ–ļKrÍšÎ×N:rHĩ“¨jIsmq>ôį~M¸$ãiúv­]NĘé<0‘ÉŠ+‰K9Lž§ ī\ėĻ'Á¤hŨÎvŽ0ĶųÔŊ§}ØÍ:[û[60HāBĒyR[{¨ņj-F[‹É'–PQ|ãĐæ5Úŋ( ,IĮ°æĸŽmšeËFØ39HƒNqōøsĶ"­E5ĩĶ)žQŗhF˜. †=F dš;$]{ 9­Úá`–mo81eĘä)•ÆyŦ= ō]š˙f¤¸ŧ–{ˆ-ŌMļnĨ cåāuö'ŋĶÚŦĨ­ŠI2䁜F§˙f­ĀÜzŖma(&i™Ų?tāXķžOzŗwŖ wXŖ ‚Ōđ 9õú ûfŠ+ĩísĨ˛ ›i§4ōÜČĐŖq–šĮJ§&aī+|šÚ $úphĸĻíî]ˇß´vū~ ĨrĐpIįˇôŠaūĐ´ē’Ie‰v6ÖT$đpsœwāôĸŠĢëbæ…ÖŁŲp6+É7 ΚÆqØuã­M,—WąIĖc-&ƒœqž}I…Tš;ØĢjĖ.å¯Q͚ĸÆ˛ų| ‘×'ōé[ d—ąļ}˛.ĶžAŋŸä(ĸĒ:̈v #†Æ# …YE¸ģƒÛō5VęĢ“Ŋžb“Ž=xõĸЧpL‰æķ!•"˘ āķõÍWŗ’ÕžRU#xTęWiį=G4QRŠQL“Qˇŗ‚_ŗæ ŧ‚ęųoģ’=2 AgwaũĻÖQÛ<%rވFæ>Ĩģœ{˙õŠ)ÃUŠ2Ņ’^OmåÅ$+ˇwĖŒŽ>ĒH&˛¸ŧŽĶlŗdő Œąö8ÅV• “ĐPobÍëE¤éŗßģĘËysÚXg§&˛tۏˇ¤ŗ-ÉDožEu.H<āztëžÔQQqŊ H,Ŗ¸‚[—•ļv‰"UÆÜ‘čy"ĄKŒ<ššä G¯å~ž´QQ=,OR”wĶ]\OlĻ4û Mæŧ*+ Į9ÁÛĮpŽ–ûH†×G3Įs)œ!žC–lãŽ? j(ĸöāļš‹zËi`%Vq§Ė¤ÉÎ\đOļpsõ5{Qms qGč3Ä>ņPģF9īČ?‰ĸЧ¤Ō틐_Ü˝$Ę­ŗ` @ÉËuã°n1øô¤ģēx­Jl$ūņ[ŠëŒ?ŸJ(ĄŊ.5ĐvŽĸõd pōCæ# —ŖĄ]Ų#pslUæŌšĘŪōōxĖ‘F]‚ŗ‚ČĢÔ'äx'ŋZ(¨ŦÜet\uĐeÆĻ-&ˇƒtÂŪčĸnG#k1ĀĪCĪŌ“R˛ŸÃ:aēē™o#›.AĪîûîķŽœ~4QNâę[ÔėîūŲÍŠWt!LRĒ{ã<öüjŽŗk$ĒHšVI …baR팘VüŊčĸēj{ą¸-E’Í/,üĢ̧‡ũj<˜ųûŽ;v'ëõĢĩĩŅíoŖ!míĸy1ސ/đz(¨I=JjČÆ›CŌ&ĩw§B¤@0W¯Ļ=yŠŦ5+t3YGn˛I5'”i# ČäduĸŠŌœ#$ÛD7ËkfškŲã†FŽGßąãR$ĮštëéųŌžģ#[ŦĪl¨1ĻĐŖāŒĮ?Z(Ŧäųd’-;î^šˇēĶėäēļUg™eŒ6 pÜ÷{~ÔQ\üŠË^Ą Y@xuõ[(šØÄąĖžlģ0 ’psÎLķX ¤Lš„Žŗ “'›s• å@ĪĶ=(ĸ¸gĨėe$BēąŸhûØGgžcš eķ"îsĮĻ3ÅUŲ^ČÎM­~ŪŪįQ„4×;IG aŗÆ0HĀČĮoZį/ądËģųm!MØĮ@ŧ\ET•īqEļõ‹|Ú{ÜA0aįÅÆPFâp§šŧĀÉo ËĘÜžâŪX?qCmĮГĶļ(ĸ‰nŠo`¸;Y&3Hn ƒŒŽOSīĶÖĢ}ĸ {9#‰ŸĖ%$Ž6*€Ėp}yQNœnõŽP,¯ F،žáAéßĨhŸ0’UcÁé•?üUUI č˙Ųleptonica-1.86.0/prog/xformbox_reg.c000066400000000000000000000270351506303110300173770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * xformbox_reg.c * * Tests ordered box transforms (rotation, scaling, translation). * Also tests the various box hashing graphics operations. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Consts for second set */ static const l_int32 SHIFTX_2 = 50; static const l_int32 SHIFTY_2 = 70; static const l_float32 SCALEX_2 = 1.17; static const l_float32 SCALEY_2 = 1.13; static const l_float32 ROTATION_2 = 0.10; /* radian */ /* Consts for third set */ static const l_int32 SHIFTX_3 = 44; static const l_int32 SHIFTY_3 = 39; static const l_float32 SCALEX_3 = 0.83; static const l_float32 SCALEY_3 = 0.78; static const l_float32 ROTATION_3 = 0.11; /* radian */ l_int32 RenderTransformedBoxa(PIX *pixt, BOXA *boxa, l_int32 i); int main(int argc, char **argv) { l_int32 i, n, ws, hs, w, h, rval, gval, bval, order; l_float32 *mat1, *mat2, *mat3; l_float32 matd[9]; BOX *box, *boxt; BOXA *boxa, *boxat, *boxa1, *boxa2, *boxa3, *boxa4, *boxa5; PIX *pix, *pixs, *pixc, *pixt, *pix1, *pix2, *pix3; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ----------------------------------------------------------- * * Test hash rendering in 3 modes * * ----------------------------------------------------------- */ pixs = pixRead("feyn.tif"); box = boxCreate(461, 429, 1393, 342); pix1 = pixClipRectangle(pixs, box, NULL); boxa = pixConnComp(pix1, NULL, 8); n = boxaGetCount(boxa); pix2 = pixConvertTo8(pix1, 1); pix3 = pixConvertTo32(pix1); for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); rval = (1413 * (i + 1)) % 256; gval = (4917 * (i + 1)) % 256; bval = (7341 * (i + 1)) % 256; pixRenderHashBox(pix1, boxt, 8, 2, i % 4, 1, L_SET_PIXELS); pixRenderHashBoxArb(pix2, boxt, 7, 2, i % 4, 1, rval, gval, bval); pixRenderHashBoxBlend(pix3, boxt, 7, 2, i % 4, 1, rval, gval, bval, 0.5); boxDestroy(&boxt); } regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDisplayWithTitle(pix2, 0, 300, NULL, rp->display); pixDisplayWithTitle(pix3, 0, 570, NULL, rp->display); boxaDestroy(&boxa); boxDestroy(&box); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* ----------------------------------------------------------- * * Test orthogonal box rotation and hash rendering * * ----------------------------------------------------------- */ pixs = pixRead("feyn.tif"); box = boxCreate(461, 429, 1393, 342); pix1 = pixClipRectangle(pixs, box, NULL); pixc = pixConvertTo32(pix1); pixGetDimensions(pix1, &w, &h, NULL); boxa1 = pixConnComp(pix1, NULL, 8); pixa = pixaCreate(4); for (i = 0; i < 4; i++) { pix2 = pixRotateOrth(pixc, i); boxa2 = boxaRotateOrth(boxa1, w, h, i); rval = (1413 * (i + 4)) % 256; gval = (4917 * (i + 4)) % 256; bval = (7341 * (i + 4)) % 256; pixRenderHashBoxaArb(pix2, boxa2, 10, 3, i, 1, rval, gval, bval); pixaAddPix(pixa, pix2, L_INSERT); boxaDestroy(&boxa2); } pix3 = pixaDisplayTiledInRows(pixa, 32, 1200, 0.7, 0, 30, 3); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix3, 0, 800, NULL, rp->display); boxDestroy(&box); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pixc); boxaDestroy(&boxa1); pixaDestroy(&pixa); /* ----------------------------------------------------------- * * Test box transforms with either translation or scaling * * combined with rotation, using the simple 'ordered' * * function. Show that the order of the operations does * * not matter; different hashing schemes end up in the * * identical boxes. * * ----------------------------------------------------------- */ pix = pixRead("feyn.tif"); box = boxCreate(420, 360, 1500, 465); pixt = pixClipRectangle(pix, box, NULL); pixs = pixAddBorderGeneral(pixt, 0, 200, 0, 0, 0); boxDestroy(&box); pixDestroy(&pix); pixDestroy(&pixt); boxa = pixConnComp(pixs, NULL, 8); n = boxaGetCount(boxa); pixa = pixaCreate(0); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_TR_SC_RO; else if (i == 1) order = L_TR_RO_SC; else order = L_SC_TR_RO; boxat = boxaTransformOrdered(boxa, SHIFTX_2, SHIFTY_2, 1.0, 1.0, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i); boxaDestroy(&boxat); } pixaAddPix(pixa, pixt, L_INSERT); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_RO_TR_SC; else if (i == 1) order = L_RO_SC_TR; else order = L_SC_RO_TR; boxat = boxaTransformOrdered(boxa, SHIFTX_2, SHIFTY_2, 1.0, 1.0, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 4); boxaDestroy(&boxat); } pixaAddPix(pixa, pixt, L_INSERT); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_TR_SC_RO; else if (i == 1) order = L_SC_RO_TR; else order = L_SC_TR_RO; boxat = boxaTransformOrdered(boxa, 0, 0, SCALEX_2, SCALEY_2, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 8); boxaDestroy(&boxat); } pixaAddPix(pixa, pixt, L_INSERT); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_RO_TR_SC; else if (i == 1) order = L_RO_SC_TR; else order = L_TR_RO_SC; boxat = boxaTransformOrdered(boxa, 0, 0, SCALEX_2, SCALEY_2, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 12); boxaDestroy(&boxat); } pixaAddPix(pixa, pixt, L_INSERT); pixt = pixaDisplayTiledInColumns(pixa, 1, 0.5, 20, 0); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixt, 1000, 0, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixa); /* ----------------------------------------------------------- * * Do more testing of box and pta transforms. Show that * * resulting boxes are identical by three methods. * * ----------------------------------------------------------- */ /* Set up pix and boxa */ pixa = pixaCreate(0); pix = pixRead("lucasta.1.300.tif"); pixTranslate(pix, pix, 70, 0, L_BRING_IN_WHITE); pixt = pixCloseBrick(NULL, pix, 14, 5); pixOpenBrick(pixt, pixt, 1, 2); boxa = pixConnComp(pixt, NULL, 8); pixs = pixConvertTo32(pix); pixc = pixCopy(NULL, pixs); RenderTransformedBoxa(pixc, boxa, 113); pixaAddPix(pixa, pixc, L_INSERT); pixDestroy(&pix); pixDestroy(&pixt); /* (a) Do successive discrete operations: shift, scale, rotate */ pix1 = pixTranslate(NULL, pixs, SHIFTX_3, SHIFTY_3, L_BRING_IN_WHITE); boxa1 = boxaTranslate(boxa, SHIFTX_3, SHIFTY_3); pixc = pixCopy(NULL, pix1); RenderTransformedBoxa(pixc, boxa1, 213); pixaAddPix(pixa, pixc, L_INSERT); pix2 = pixScale(pix1, SCALEX_3, SCALEY_3); boxa2 = boxaScale(boxa1, SCALEX_3, SCALEY_3); pixc = pixCopy(NULL, pix2); RenderTransformedBoxa(pixc, boxa2, 313); pixaAddPix(pixa, pixc, L_INSERT); pixGetDimensions(pix2, &w, &h, NULL); pix3 = pixRotateAM(pix2, ROTATION_3, L_BRING_IN_WHITE); boxa3 = boxaRotate(boxa2, w / 2, h / 2, ROTATION_3); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa3, 413); pixaAddPix(pixa, pixc, L_INSERT); /* (b) Set up and use the composite transform */ mat1 = createMatrix2dTranslate(SHIFTX_3, SHIFTY_3); mat2 = createMatrix2dScale(SCALEX_3, SCALEY_3); mat3 = createMatrix2dRotate(w / 2, h / 2, ROTATION_3); l_productMat3(mat3, mat2, mat1, matd, 3); boxa4 = boxaAffineTransform(boxa, matd); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa4, 513); pixaAddPix(pixa, pixc, L_INSERT); /* (c) Use the special 'ordered' function */ pixGetDimensions(pixs, &ws, &hs, NULL); boxa5 = boxaTransformOrdered(boxa, SHIFTX_3, SHIFTY_3, SCALEX_3, SCALEY_3, ws / 2, hs / 2, ROTATION_3, L_TR_SC_RO); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa5, 613); pixaAddPix(pixa, pixc, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); boxaDestroy(&boxa5); lept_free(mat1); lept_free(mat2); lept_free(mat3); pixt = pixaDisplayTiledInColumns(pixa, 2, 0.5, 20, 0); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixt, 1000, 300, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixa); return regTestCleanup(rp); } l_int32 RenderTransformedBoxa(PIX *pixt, BOXA *boxa, l_int32 i) { l_int32 j, n, rval, gval, bval; BOX *box; n = boxaGetCount(boxa); rval = (1413 * i) % 256; gval = (4917 * i) % 256; bval = (7341 * i) % 256; for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixRenderHashBoxArb(pixt, box, 10, 3, i % 4, 1, rval, gval, bval); boxDestroy(&box); } return 0; } leptonica-1.86.0/prog/xtractprotos.c000066400000000000000000000234141506303110300174470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * xtractprotos.c * * This program accepts a list of C files on the command line * and outputs the C prototypes to stdout. It uses cpp to * handle the preprocessor macros, and then parses the cpp output. * In leptonica, it is used to make allheaders.h (and optionally * leptprotos.h, which contains just the function prototypes.) * In leptonica, only the file allheaders.h is included with * source files. * * An optional 'prestring' can be prepended to each declaration. * And the function prototypes can either be sent to stdout, written * to a named file, or placed in-line within allheaders.h. * * The signature is: * * xtractprotos [-prestring=] [-protos=] [list of C files] * * Without -protos, the prototypes are written to stdout. * With -protos, allheaders.h is rewritten: * * if you use -protos=inline, the prototypes are placed within * allheaders.h. * * if you use -protos=leptprotos.h, the prototypes written to * the file leptprotos.h, and alltypes.h has * #include "leptprotos.h" * * For constructing allheaders.h, two text files are provided: * allheaders_top.txt * allheaders_bot.txt * The former contains the leptonica version number, so it must * be updated when a new version is made. * * For simple C prototype extraction, xtractprotos has essentially * the same functionality as Adam Bryant's cextract, but the latter * has not been officially supported for over 15 years, has been * patched numerous times, and doesn't work with sys/sysmacros.h * for 64 bit architecture. * * This is used to extract all prototypes in liblept. * The function that does all the work is parseForProtos(), * which takes as input the output from cpp. * * xtractprotos can run in leptonica to do an 'ab initio' generation * of allheaders.h; that is, it can make allheaders.h without * leptprotos.h and with an allheaders.h file of 0 length. * Of course, the usual situation is to run it with a valid allheaders.h, * which includes all the function prototypes. To avoid including * all the prototypes in the input for each file, cpp runs here * with -DNO_PROTOS, so the prototypes are not included -- this is * much faster. * * The xtractprotos version number, defined below, is incremented * whenever a new version is made. * * Note: this uses cpp to preprocess the input. (The name of the cpp * tempfile is constructed below. It has a "." in the tail, which * Cygwin needs to prevent it from appending ".exe" to the filename.) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define L_BUFSIZE 512 /* hardcoded below in sscanf() */ static const char *version = "1.5"; int main(int argc, char **argv) { char *filein, *str, *tempfile, *prestring, *outprotos, *protostr; char buf[L_BUFSIZE]; l_int32 i, maxindex, in_line, nflags, protos_added, firstfile, len, ret; size_t nbytes; L_BYTEA *ba, *ba2; SARRAY *sa; if (argc == 1) { lept_stderr( "xtractprotos [-prestring=] [-protos=] " "[list of C files]\n" "where the prestring is prepended to each prototype, and \n" "protos can be either 'inline' or the name of an output " "prototype file\n"); return 1; } setLeptDebugOK(1); /* ---------------------------------------------------------------- */ /* Parse input flags and find prestring and outprotos, if requested */ /* ---------------------------------------------------------------- */ prestring = outprotos = NULL; in_line = FALSE; nflags = 0; maxindex = L_MIN(3, argc); for (i = 1; i < maxindex; i++) { if (argv[i][0] == '-') { if (!strncmp(argv[i], "-prestring", 10)) { nflags++; ret = sscanf(argv[i] + 1, "prestring=%490s", buf); if (ret != 1) { lept_stderr("parse failure for prestring\n"); return 1; } if ((len = strlen(buf)) > L_BUFSIZE - 3) { L_WARNING("prestring too large; omitting!\n", __func__); } else { buf[len] = ' '; buf[len + 1] = '\0'; prestring = stringNew(buf); } } else if (!strncmp(argv[i], "-protos", 7)) { nflags++; ret = sscanf(argv[i] + 1, "protos=%490s", buf); if (ret != 1) { lept_stderr("parse failure for protos\n"); return 1; } outprotos = stringNew(buf); if (!strncmp(outprotos, "inline", 7)) in_line = TRUE; } } } if (argc - nflags < 2) { lept_stderr("no files specified!\n"); return 1; } /* ---------------------------------------------------------------- */ /* Generate the prototype string */ /* ---------------------------------------------------------------- */ ba = l_byteaCreate(500); /* First the extern C head */ sa = sarrayCreate(0); sarrayAddString(sa, "/*", L_COPY); snprintf(buf, L_BUFSIZE, " * These prototypes were autogen'd by xtractprotos, v. %s", version); sarrayAddString(sa, buf, L_COPY); sarrayAddString(sa, " */", L_COPY); sarrayAddString(sa, "#ifdef __cplusplus", L_COPY); sarrayAddString(sa, "extern \"C\" {", L_COPY); sarrayAddString(sa, "#endif /* __cplusplus */\n", L_COPY); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); /* Then the prototypes */ firstfile = 1 + nflags; protos_added = FALSE; if ((tempfile = l_makeTempFilename()) == NULL) { lept_stderr("failure to make a writeable temp file\n"); return 1; } for (i = firstfile; i < argc; i++) { filein = argv[i]; len = strlen(filein); if (filein[len - 1] == 'h') /* skip .h files */ continue; snprintf(buf, L_BUFSIZE, "cpp -ansi -DNO_PROTOS %s %s", filein, tempfile); ret = callSystemDebug(buf); /* cpp */ if (ret) { lept_stderr("cpp failure for %s; continuing\n", filein); continue; } if ((str = parseForProtos(tempfile, prestring)) == NULL) { lept_stderr("parse failure for %s; continuing\n", filein); continue; } if (strlen(str) > 1) { /* strlen(str) == 1 is a file without protos */ l_byteaAppendString(ba, str); protos_added = TRUE; } lept_free(str); } lept_rmfile(tempfile); lept_free(tempfile); /* Lastly the extern C tail */ sa = sarrayCreate(0); sarrayAddString(sa, "\n#ifdef __cplusplus", L_COPY); sarrayAddString(sa, "}", L_COPY); sarrayAddString(sa, "#endif /* __cplusplus */", L_COPY); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); protostr = (char *)l_byteaCopyData(ba, &nbytes); l_byteaDestroy(&ba); /* ---------------------------------------------------------------- */ /* Generate the output */ /* ---------------------------------------------------------------- */ if (!outprotos) { /* just write to stdout */ lept_stderr("%s\n", protostr); lept_free(protostr); return 0; } /* If no protos were found, do nothing further */ if (!protos_added) { lept_stderr("No protos found\n"); lept_free(protostr); return 1; } /* Make the output files */ ba = l_byteaInitFromFile("allheaders_top.txt"); if (!in_line) { snprintf(buf, sizeof(buf), "#include \"%s\"\n", outprotos); l_byteaAppendString(ba, buf); l_binaryWrite(outprotos, "w", protostr, nbytes); } else { l_byteaAppendString(ba, protostr); } ba2 = l_byteaInitFromFile("allheaders_bot.txt"); l_byteaJoin(ba, &ba2); l_byteaWrite("allheaders.h", ba, 0, 0); l_byteaDestroy(&ba); lept_free(protostr); return 0; } leptonica-1.86.0/prog/yuvtest.c000066400000000000000000000201601506303110300164110ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * yuvtest.c * * Test the yuv to rgb conversion. * * Note that the yuv gamut is greater than rgb, so although any * rgb image can be converted to yuv (and back), any possible * yuv value does not necessarily represent a valid rgb value. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" void AddTransformsRGB(PIXA *pixa, L_BMF *bmf, l_int32 gval); void AddTransformsYUV(PIXA *pixa, L_BMF *bmf, l_int32 yval); l_int32 main(int argc, char **argv) { l_int32 i, rval, gval, bval, yval, uval, vval; l_float32 *a[3], b[3]; L_BMF *bmf; PIX *pixd; PIXA *pixa; setLeptDebugOK(1); lept_mkdir("lept/yuv"); /* Explore the range of rgb --> yuv transforms. All rgb * values transform to a valid value of yuv, so when transforming * back we get the same rgb values that we started with. */ pixa = pixaCreate(0); bmf = bmfCreate("fonts", 6); for (gval = 0; gval <= 255; gval += 20) AddTransformsRGB(pixa, bmf, gval); pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2); pixDisplay(pixd, 100, 0); pixWrite("/tmp/lept/yuv/yuv1.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); /* Now start with all "valid" yuv values, not all of which are * related to a valid rgb value. Our yuv --> rgb transform * clips the rgb components to [0 ... 255], so when transforming * back we get different values whenever the initial yuv * value is out of the rgb gamut. */ pixa = pixaCreate(0); for (yval = 16; yval <= 235; yval += 16) AddTransformsYUV(pixa, bmf, yval); pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2); pixDisplay(pixd, 600, 0); pixWrite("/tmp/lept/yuv/yuv2.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); bmfDestroy(&bmf); /* --------- Try out a special case by hand, and show that --------- * * ------- the transform matrices we are using are inverses ---------*/ /* First, use our functions for the transform */ lept_stderr("Start with: yval = 143, uval = 79, vval = 103\n"); convertYUVToRGB(143, 79, 103, &rval, &gval, &bval); lept_stderr(" ==> rval = %d, gval = %d, bval = %d\n", rval, gval, bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); lept_stderr(" ==> yval = %d, uval = %d, vval = %d\n", yval, uval, vval); /* Next, convert yuv --> rbg by solving for rgb --> yuv transform. * [ a00 a01 a02 ] r = b0 (y - 16) * [ a10 a11 a12 ] * g = b1 (u - 128) * [ a20 a21 a22 ] b = b2 (v - 128) */ b[0] = 143.0 - 16.0; /* y - 16 */ b[1] = 79.0 - 128.0; /* u - 128 */ b[2] = 103.0 - 128.0; /* v - 128 */ for (i = 0; i < 3; i++) a[i] = (l_float32 *)lept_calloc(3, sizeof(l_float32)); a[0][0] = 65.738 / 256.0; a[0][1] = 129.057 / 256.0; a[0][2] = 25.064 / 256.0; a[1][0] = -37.945 / 256.0; a[1][1] = -74.494 / 256.0; a[1][2] = 112.439 / 256.0; a[2][0] = 112.439 / 256.0; a[2][1] = -94.154 / 256.0; a[2][2] = -18.285 / 256.0; lept_stderr("Here's the original matrix: yuv --> rgb:\n"); for (i = 0; i < 3; i++) lept_stderr(" %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); gaussjordan(a, b, 3); lept_stderr("\nInput (yuv) = (143,79,103); solve for rgb:\n" "rval = %7.3f, gval = %7.3f, bval = %7.3f\n", b[0], b[1], b[2]); lept_stderr("Here's the inverse matrix: rgb --> yuv:\n"); for (i = 0; i < 3; i++) lept_stderr(" %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); /* Now, convert back: rgb --> yuv; * Do this by solving for yuv --> rgb transform. * Use the b[] found previously (the rgb values), and * the a[][] which now holds the rgb --> yuv transform. */ gaussjordan(a, b, 3); lept_stderr("\nInput rgb; solve for yuv:\n" "yval = %7.3f, uval = %7.3f, vval = %7.3f\n", b[0] + 16.0, b[1] + 128.0, b[2] + 128.0); lept_stderr("Inverting the matrix again: yuv --> rgb:\n"); for (i = 0; i < 3; i++) lept_stderr(" %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); for (i = 0; i < 3; i++) lept_free(a[i]); return 0; } void AddTransformsRGB(PIXA *pixa, L_BMF *bmf, l_int32 gval) { char textbuf[256]; l_int32 i, j, wpls; l_uint32 *datas, *lines; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixat; pixs = pixCreate(255, 255, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 255; i++) { /* r */ lines = datas + i * wpls; for (j = 0; j < 255; j++) /* b */ composeRGBPixel(i, gval, j, lines + j); } pixat = pixaCreate(3); pixaAddPix(pixat, pixs, L_INSERT); pixt1 = pixConvertRGBToYUV(NULL, pixs); pixaAddPix(pixat, pixt1, L_INSERT); pixt2 = pixConvertYUVToRGB(NULL, pixt1); pixaAddPix(pixat, pixt2, L_INSERT); pixt3 = pixaDisplayTiledAndScaled(pixat, 32, 255, 3, 0, 20, 2); snprintf(textbuf, sizeof(textbuf), "gval = %d", gval); pixt4 = pixAddSingleTextblock(pixt3, bmf, textbuf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa, pixt4, L_INSERT); pixDestroy(&pixt3); pixaDestroy(&pixat); return; } void AddTransformsYUV(PIXA *pixa, L_BMF *bmf, l_int32 yval) { char textbuf[256]; l_int32 i, j, wpls; l_uint32 *datas, *lines; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixat; pixs = pixCreate(225, 225, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 225; i++) { /* v */ lines = datas + i * wpls; for (j = 0; j < 225; j++) /* u */ composeRGBPixel(yval + 16, j + 16, i + 16, lines + j); } pixat = pixaCreate(3); pixaAddPix(pixat, pixs, L_INSERT); pixt1 = pixConvertYUVToRGB(NULL, pixs); pixaAddPix(pixat, pixt1, L_INSERT); pixt2 = pixConvertRGBToYUV(NULL, pixt1); pixaAddPix(pixat, pixt2, L_INSERT); pixt3 = pixaDisplayTiledAndScaled(pixat, 32, 225, 3, 0, 20, 2); snprintf(textbuf, sizeof(textbuf), "yval = %d", yval); pixt4 = pixAddSingleTextblock(pixt3, bmf, textbuf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa, pixt4, L_INSERT); pixDestroy(&pixt3); pixaDestroy(&pixat); return; } leptonica-1.86.0/prog/zanotti-78.jpg000066400000000000000000004560411506303110300171630ustar00rootroot00000000000000˙Ø˙āJFIF––˙ūXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 40, Smoothing = 0 ˙ÛC 2!=,.$2I@LKG@FEPZsbPUmVEFdˆemw{‚N`—Œ}–s~|˙ÛC;!!;|SFS||||||||||||||||||||||||||||||||||||||||||||||||||˙Āô"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?ÛīF8ĨŖ5ÎlŠ(ę)q@ öĨ9Ŗĩ ?ŊFhĨJ8ĮJQîhĮPi)zŌķc\QŌŽhëڀŒŅKLŽ”PzPE&hÍ Ŋ†›Ō” Ņp@¤õ§wĻ!Ļ–ŒPhqE”´ į­6Œs@…¤,AādQԌûR îĸQLŌŌ1@/zJ;PⓆœ:PQKÅ Ĩĸé@ ß­-&iqš3Ÿ Ņڀ(úŅGրQõĸ›@‡QIͨgŠ^ÔÚ/9éKIŪ—ŊQÍ ĨŠ\PQE (Í @#“ˇŠE!…8Ž1Ō‘bã4´ęh❚%%)¤Ļū4v¤´˜ f—4P֊LRĐHŨ)i  Ļ)sÅ'^h éEPš3E&;æ€4v¤Å/4RŌRô ƒIīE( Qš3@yĸ“Ŋ/zSŌ“šRxĸ€ûҜ SIڀŠAœķN Žôsē–€w4ixëIÁ8 =))i:ĐG9ŖPŽ”ÜķKéF9 ’–Š(¤Í-%Š(¤īE7­-)¤ bvĸŠ;R 'ju6 IN"’‡z)qE zSZ’Ŗ=jF>Š(­I :Š( ;Qڗš(íA4Qې A¤< Z`(é@ KIEŠ3íE/jN”uŖPF(ĸ€)zæŠuܜâŒĐKINÅ%¨¤´QÅ€ J^)(y¤Á4š¤¤Š\Qš:ĶíE%€´ĸŠ(”ŖŠ( aߚŽ?3{‰6íĪˏJ’Š@QEĀ(úŌŌP Å(ĸŒņ@ ŠgzwŊhžô´3@‚Š(  8ëGZ1@/†ŠZ)8Ĩ “īEQKÅ'j94QÍ€ŽÔ”PŸJ\Ōv u €hĸ€“ Rmˁ˛zt§m怴Z()JqĻ‘‘@éKíBŽ:Ō†Rb–@•cÆî=Šā8ŖŊ- QŠ;Ņۘĸ“ĩ( ĨQ@ sđ¤ÚĮŠâŒšQ@Q@Z(ĸ€ Đ9ĸ@ IEhö Š\Ņ@&Õ8äŌæÃ8ÅŠ)hM2–ŠJ1KA4„Ņ@4v ĄĸŽ(Î((Ĩ ĐMīKšNôcŠJ]´”Rb— ĸ IKIŠCŽÔRö btĸŠ\RĩëRˆõŠ!éE‘Ej ŖŊP 4P)E tāĐE ëKLÔbŒb€ƒIڗĩ)i)h){RRâ€#HUd2Ų=ŗÅKĶĨ%ĐšŖ­(ĨÅ'€ _­¸ ã}(â—>´™ĸŽ( ĸŠ:Đx€æ”Ō` (Ĩ¤ —ĩâŠ(ĸŠ¤Æ :›œš/R)hĸ’Š:Đ!x¤ÅĨ ô¸Qš(ĸŠ)´˜ a֔õ¤Į4üúŠ6ŒRŌP( pzŌĐQA¤äb€đĨÍ% 4 JZĀëGz^Ôv ’–ŠN” QH(zŌQԊ9Ĩį4RĐ)9Í-z)qHh )i-;RŠ? )i1Ščgš9 E sKšLĐRâŠ(īIKš( QԊ(čxŖ”vĸ€ŅۊNi{ŌtĨ Š( ĩ'jZ3@č¤`1@ GtŖĄö  š;ŌcŠ(ĮŊ¨ ûŊM:šFzŌį´” (ÅRũh¤ÍQHíH){QL ŅF(QK@ ځGzZLsGãG­&=)´vĻ÷§S ‚)8 sK֊CGjڊJ)zRR(Ĩ¤4 Z RŌĸ=jfīPĩ#&¤4ĻŠĐ‘){Ō}hiŒZZZJZ9 RĐbŽØŖš(RŌm t ¤ëKK@j(ũh (͘ BŠ3Egš;đ(ĸ€ŠJZJJ)(hŖ4č4RšC֐ Gj3IŠ`/lŌc"”:R´(ĀëKIŪ@ FhĨ):ŌâŒPy¨īN⒁…b–€— \Rĸ–ŒQŠb (ŒP(īKŽiq@ 4Ŋ:QIĪj\ŌdQŠ\Ptæ”ôb“´™Ĩ Đš(Āĸ€Ž”†€8 Š9ĨÅ%RãŊ&hĐ( JZAÅ-PIGz\PRŌb–€ :RQ@´b€ 3IÆxĸ€4›ąéKŠ6Đš(4PŽ(Ŗĩ ĨŖq@z3AĨf€ĐiN3F(( Ņ´úĐžhĨ´Ķ֓$õ§wæs@qFh4”´´tĸ€Ŋ&{RҎͭsF1Š^ô€J)ԘĻ ){P ¤īNīGzNôi{Ō””…ŽüĮ­8 i1@ E.)§Ō íKKIÅ J3E `÷ĸŒih(ĸ j„õКĄ=jF‰Í! “Įi;ÖĸŠ( õÍ€uŖŊŅր´@Ĩh‚Ž{R÷¤†s@>´wĨ AIķqNĸÄĪĸôĨ☊(_­%-RÍ-&iEPFh¤é@ ֌sE¨qŠCŠNh>ÔvĨíIڌ{ĐöĸGŌ€KIš(Õķ´ƒƒKې^ƒ´Ŋi:wĸ’ ŪŽôgš(RŅ֎ÔfŠ(ëÍ(éIƒž(ö4t¤!i(ĸ˜ Ū–“­´Ÿ… JĨ:“mdĩ▀ņE-P8Ϛpé@ŌRŠ(÷ĸŠ@sE&9Ĩī@ M´sšZ ¤ ¤úŌҚLš\ŌRĐM9§íE  sEĐū4Qš(ÅdQ@šJ (÷ŖPhâŠ@ -ŌäRf“ŋJZ3IK@8Ŗ"–“Q@ĸ€ Z@( ŊčŖŊ š(ë@Ĩĸá ĸ”Qžh Ĩ¤īKր )zS}¨Įz3Eų ¤Ŋ(ϐ%SíE“ĩvĸ’€ iŌŅHcvķÁ¤ÃzĶûŌ Cš‡QJ#ŠZnßJušąĨ¤1Qĩ+T'­K='z\Ō Ô‘ÔžÔĨ ÷ s@  1@ ß­.hīF(ĪZëEØ ”zŌ Ž´ŊčŖŪŠQĶ­—Š €‚Š;ŅŪ€sE.h éKEQE`P@ĸ’€A¤´‡šCJi;Pāâ—ĩƒĨhíKڊAKMĨÍ­wĸ€ŖŊ!ĸ€ĨP~´‹ÆiŨŠ(¤ҌQHNŅÍ0ŠĨ BQKH94S¨$b“¨ œŅIŠhhĸ–€“šZ)h4bŒŅ@¤ÅŅHíIŌ—ŠN”Ā9ĸŽh —”PKMĨ ÆhĸŠ0)(ĸ€ Z( ŠJN‹@ŽÔ ^);ŌõŖŊbŠ((Å)hPĶŊQ@J(Í7“@Ŗ4QŠ?(öŖPۊ;QŠ(ëEZ(īGz(<ŅE€ SČĮjNÔPŠLsFi;Ш&“ĩ´ih ŖŊ.i:š/áI@ ¤?•@Pi(Å&(4sہ‰E¯t4€J /ZN”Rf—4P1Ŧ2:RdŠÃ~ŸÚ˜Ę ę#֞I)ĻT˛‰éŊĢRCŊhu éEb€´wĸÅ¨ũhĨÅ į­8S~´ŖœR4wĨ ôĻ ĸÍ-'֎ô´ŸÎ€ 1E- (íE–Š:Đ!´”´”Ph¤ŖŽôu 9zQKŌ€ ŌQE”RP~´€\QIš)€´”Ŋ¨Í¸¤4P@äQJ€;QEĻE'ŊhßΐõÍ^Ųĸ“Ĩ RRæ›Ö ԊLŅ@ h î q@‡9íŠ(~”{Rõ¤ Š)4´f“éKŒĐIžip(Ā ´”}hŠ0(úPی{æŠ:ĐKMŖĨ°2ixÆiJĨĻîæŒĐŗÍĻҚv9ĸ“ņ ĐŌwŖœĐâ—” Z)(怊LRū4ÖmŖM8Ž”˜ĨíHŊqE0éIŒŅEĨ r2xŖ(4bŠJZ(Ī Č4f’ŠC@ĨĨÅ(ĪĨ%ŠZ)2)hĸŠZ)J^ôLķÅ.i( ŌRâŠn(4´”€J1ŪŽh¤1)i8ĸ…QŪ€ŌSģRTŖĨFqš•úbŖ)‰é)i+RE¤=ihÍ'zP}i;ŌĐ}¨ uĨë@ KGz;ĐbŽ)3E¸ĸŠPM 8éE ô AF(Īô´ LZ_­&AčiŨ¨EĀ €qK@ Eh ŒQE RRĐ(vĸ–›@ GsI@ ŠhcŧŒqØÖ^ģ-œQŦ<Ū•Ÿgwyi¨GČņĘqķv4ėJhĻÃOÍ ZiĄNhŪô´ĶKž(hĸÂ€ )sÅ6€Š( Š^ԔwĨ"ŠC@ IƒG4dĐÍ-¤ AE-py恈h€9ŖŒĐŽEVšŊˇ´˙_*§ÖĻžO&“uKW3ĨÂÚÍü—7CtkښB5Ķ]°v+įcę*ür$ˆ6 §ĄŠĪŖŲM͝ēđEa[K>‹Ē}šFŨ ž>‡Ŋ;ÕŌÔm"Ēå™Węi#$$#Ģ‘×5 IEB×P+myP7Ąjd×öÖėY‘XöÍYÎ(æ›æ&Íå†Üg9⡆úÚáöE2;ú@ij6eEËîjÔm$}‰÷–qXž‘|Šãū-Ā×GÁŦ ôģ›Ãw§aÔũčęÕËx‡įÕíĐuÚëZGSē1íO—Í?ŪéQXi’ĩĶ^ßãÍĪĘŋŨŖ`ÄJ„lŲĀqUôõ_í•6*ÂßgĪÁĮJˇâš{u‚^BNâ@éW4֕í‚Ī”ëÆz/ …´mâQĩÆæ÷Ŗ\ļˆßZļßõĩŊúU­ZŌāŪCwjĄŪ1÷M@ļú†Ą{ܰĮŨõ  RŨäŌĖVĘp¸ųW¸ôŦŊ2KOíȅíĻA´Ščknū9^ŅÖŨļÉØÖ (2? ÅŌcT×î•TšĀükxFËoåÄpBáIŦ4ŌušyÅĘ,­ÔBĄ zæŧG šáb%ąîųFy5¯ĻŲËk ģåķ%‘ˇnĒvÚeäwË4čÍ"ÃúP´ū›Ė°17XÚ´Ž&X"y$l"Žk'MŌo,î‚tōÉų×Ek]Û%Ė/Ÿu† uđģ…ģ1‹¸aŌ´“åcU´Ũ:eŒŗ<–ĢG*ũ8¤ŗšŽ\ŒRŧŠVÅ26{PĒ~QNæ(fĀæ(â€ÜQŠ=Š:šZ~4Q@( Š(í@ŽÔPŅEčŒŦz~yÅ>ŒP ŌŅA éJ:QŽ( ëKH(Í ô´M-0—ĩ!–€ŠCI@īIŠ)hŸZ)Ɠ€;Rö¤4Ŋ0ŒQA¤QIFh¤#Ū–ŌøvÍ(`iԅAí@Ê2)ĨŌ€IHŅŽŲ›Hū3HņŽæŖĀ§íÃúĶ3RQ1¤Ŗ4V¤‹HsøĐ)M-&( q@ ŒR´ æŽ†€ sF(4 3E-QE{QŠ(4? (PŌcŠ:Ņ@ĀRŌRĐ ĨĻ÷§PMį4ĸŠ\ûRRö¤4ŖĨ%ëA÷i›¸§m +ļŸi$†Y!VsԚÄÕÂG­ZĒÆĄFŪëÍt‚˜ņG#ndRÚI€č€ €”ãFĘĸ‚}*¯4⚤] R€vķ֟Ž)¤ņ@J'­´”Q@ EŌĐS~bŪÔę:Đ‘KŠJ(´bŠC@ÅĸŽÜP(Ŋ))sMī@ Ež´Pᚠ%/Jkĸȅ[ĄĄ*€;RöŖš1MīN¤Æ ´” sÍæ€Žiظ¤?Jo– éKŗš}6€÷—‘KļE&)6ņNĸ€ļĸÚ“ĩ&)vŽô´´m¤Ø;ŠuĀn=¨+šviրڗĩĨ¤LŠq•ŠGŌö ŗx§QA ŠNÔgæÅĸŽô´”ƒŦ)PŅE- CE){搌ņHڀ–ŠZJ(ÁŖĩŌRķG^Ԕ€ŠéJzST¤1ÔrzRŌgŠ/jJMÃĄ§{Ķ){ŌÉ▀ ?Zoz\Đy¤Ĩ ¤ÍzN”ƒšu4ƒš@4tæ‘y&—œâ”q@ÄĸGj@ĸŠC@Q@ŤĨ¤=*X n• ëS„õ¤Q5%ŊkR@ŅŌ’—ĩĨQ@ Ž(Å.)(RŌ´RŅEP(ĨÅ&(ĸŠ1AqKœQ@%/jJ\fŠ( @)i( –iM'4PM%.h¤Í-4撟Hx¤11ëIëN æ˜€P[ ŒT7FQnæÜ.>\Ön—¨ŨÜŪÉo:Gˆøbž´ėÉĻâ˛u›Ģë,MŒÂp0G Õģ).VŨ¤ž1ŽãoaE€ļĨÔPȒĻô`Ę܃RŠ@ŒĐ)hĨíM §Ą”4ˆ9ôęZŽ9žé7pÍ,‰eŖ8jŸŊ-1ŨTeØ(÷4†TUÜ]Bú“LCéj34aCĄÍx•ļ™wĻi yéÍ.j(n#™˜#gaÁŠ;Đ ĸŒúTŨÁí’TCčZ€'â–ĢŊĖ(7<Ē  ōj mN Ќq°'ĩh{Pj."‡ũtŠŸījŪ@Īą%BØÎí@ŅT˙´í6;ųëĩŌ}ęxî"–/69Ŗūöh_Õí‹Û|ņÉÆpqRjVŸ4¨€hoĩAæyk*?ģģš–˛´Û sko9Aæģ|Õ¤Ô-™öyČ8ĶŪhã5ˇ0Á6ELôÜhyãXLĨĮ–wRj+>ĪUļŊá “ōžĩi.Ą‘Ŗ•YWīzPŊŠ*ŧˇ’&•%SũæĪJ`Ô­‘DčYūčĪZ¸(¨ÉÁâŸLņĨÅ7'4š¤yĨσÍTžÔ"ąÚĶÚŨÔgĀģžÔŌ¨ŨjpÚE’,…_ĄUĒږ˛,å…6mø$ãĩkjķÖ¨ÉĢÁ’Ũ:ČŽĐ ķLļÕâēŌfÚģŗë@tU -Q/fHÜ4\4ÁĢŦ–ÜĮūčí*zЉĨã‚ecL ú:Ŧ:•ÅēČYUN G¤éŠ-Ôėey2đëõĢVVwŠĢ=ĖŠĢŽiŠ­­omof1ŦfdÜXžh¸e-Šj7*by/•T>ÜSώ¸B’ ЗVĘílāT÷:uė7īu§˛ūķī+U…‚īė,βNę~ƒÚ`ÍŖ%ߜŐpŊąš–ūÅVÉ/LŽdp }HĢŅi÷ØÍfŪZąã9íNšĶŽŽ4č­‘ ¸ÜyíEĀаRŪ<(ÜTn>§c?5CgÅG#e$TŨé ôíŦ˛ Ë*’+ JĶĄŋ´’[ƒžIīČŽ…Ô6U†U†+!4‰ídaetcš*˜S+ĢxΊki&|ĄSü^ÔÍZÎ== žĐl0 g­hŨi‚æ(–IXKŨ”uÍ54ÆyŌ[šÚsŨ`P;+û\ĩøũŅ÷{žîhŅ-#ķ'ŸgĘˆÛÚ¤š3]k-ĨPą(ÜdSáēž-KėsÜW  Úmœ }xeVųTôÔ߉|‘đVz ͊Åb–YI7K÷š§Ûi°ÛŦĢšŨeûÁÎAĸ㠂 FŅ­—’}ë:2ãDš)íIW&´ŋąmĀdW•bcĖa¸ŠĨŗY-Ú61ĄÎ;P"ŒķI‡â8ũڌJĩmim-”*QY@ ŪĨ‚Å#ĩ6Ō9–θĪsSMeĐ,O˛/Ũ”§Ž:6‘)NqÎ—FØÚ|0ģļá°*Wԭωbx˙vŸusRÚØÃd`MĄēķG@2t‹ˆmî/–Y ”â6hΝ–Sķ1ũ+Péļ˛Ęd{t,zœT‘Ø[DŦąÂ_ī u  -É˙ž2Ŋ1øæŸĒ:˙`ÛŽåÉ ´zÖËY[lØ nsˇ­elęĒđ!Uû Ž”ļlÖ6 Š˜-5#X"(P:J ãš@/8ë\˙ˆîĖļMß2>æ‚ē `ŽH#nZ5fõ"€1u‹¨üÛ:ŸŪü*]Zxūßa—^'šĶkx™pņ#c§ËNkh\†hˇēŅp2|BËēĶ•˙Z GŦGĩŨĨÖĪŨîųąZĶX[\>ųĸWaĮ57Ųãō„eÆ8 E0*ĩÜ*b‚Uwu8ÛÚšũ7ė) ŅßHŦr <×Qœų0ĈO\ Ž]6ÖI|ׁKú⋀ļ+ĩOŗŽØąōŠŸ’h …Āā 1H ÷–˙iŗ–%8.¸“Ļę+ahmnŅŌH큎īVđâƒ3*¤Q@vŽ4ÛÉį]ÎĒG"ŸmĒÛĻ’ĢŌ„ÛŗëpĻO==)פj?ā4ĀȡˆÚx~E›äfV8>õ0ũĢÂ8~g Ķņ­öXaÔ0ô"›åĒ/ĘĄ}…+‰a¨@R>ĖŪx°ÛũiēÔKŦZÃ÷Yßí[žZõg֚!MĔR}qEĀŽöŅ\A(ÆVQœÖF“ ĶOå\/îír=Ít;pÔåP:3ր9ûËļ[÷ˇœČ‘lų<ą÷?ÃŌĢXÉVŪ„–Čõ­ŗ’4Ģ);T õĀρ}iÎ )ÁĮZ@;hČ'ĩÎ[Ũęö”{…Föä­IÆŖy`î’ĸ4E8ûا`7ņGŌ¨Ų^K>–ŗˆ÷Ë´üžĻĒÃ{yí´W įš@û”X ŒQĀŦ›û‹¸õ("†EĘ -â^E¤Íæ\ ÉÜŖPĨU˛7gÍûXQķ|›}*ļ•ĘŲĢ=ɓ|.GŨĻé3\Ikpķ?™"ģü)Ø QNÍsļ7ŨH›ŽŲ.üđˇjč3ëHšŖR0Ü84g 3րŠ 5˜…âšÛĢ›ˆG™%ā7` gåÛī@ü@÷Į JČ7m!{ÖÂrƒžqXū!;ŦĄŧ‹œTz…ģXۋĢI¤ œ˛ŗ˜˜Ī4Ŗ8¨mgķíã|`˛‚EN:RĨâ^4Đũ™ŅPŪg¸Ģ\V. ĶÅŦÚ;yR7Üԓ\K}Ģ5¤r´pÆšbŊM;ˇĮ­zÖ™&›ŠC•ä‚~>c’Ļˆ1gŽČŽÍ˛Uܙn)ļ@įj (§_Ī›Í%¸8ÆPĶĸyĄē—Ė‘DŦÁ9ûŖÔT:k\bLŅŗ4Ųm¤õĸĀnûԊÂŌ™dž2“ʲ"ūö) äúÖŪî3@4ßJBÜsY睘æ4ķÖsķüØcô  AІ;¨d™âGVxūđĢ+DîŖķâFÂ<Õ}2Â'ÔîōdũĶŋ7ķĸĀn=äÜ,/"‡nBš™¤EPŔRköÎ)üA:–æŠ5ûuM,mDDm杀ÚÅC ú 7 ãw>•Ÿci0‹•fķ?™˜Öiōã–ÕĄy$y&ųĨ9ÃPC4žT/!tg“ —˛Z}°N9]Â=ŋ.)5k‰šöÚĘØ%ûäzQ6žlėŽ<‰äT)„ô  + ĄwiĀcpéImG,ÎĶ´ĄÎBŸáŦīĀFœŽŌģ+ƒōöÕmīk¤_X’%+’yÅm¯­Uüļž0Ū›Ēg’8Ķ{ēĒú“YV֖ŗh҆U!ŖÜ[žjŦÜøvQ?Ė6͟JÛVķS ĶæëR‚1׊åŖĶā>ûD›ŧÍšSģ§5=ô×éļQĢņ.ÕcÜĐBŦ¯Œ ö4ģ:ƃNšŽūEkÃ*ˇŪ˛Í@ iâ‘ĪVWˆ.¤ˇ°ũŪTąÛ¸v FŸÚ!ŪSÍMŪ›ŠåÕFY€ϞŸjÚJüŋ6ÍŪg|ã­W=߆¤irYAÁõÅ7ĊŨ} @—–ĪpđŦĢæ'QšŖĸÚ/Ų-îIo3f:öǚu…ŧú•é‘2#“忁2˙ŽÕ¨y-,ōi™#ĀG īV´VfĶ`.I%zšC4A4v¨Ĩš8|ލž¤ŌĢ å`T÷’qœRĶwņOŠcÔRgœRj@%/j)(QE-ôBëKHŒõŠZĸ=jJ$ĸ”ŌtŠ"öŖÅũãaŊękøc‹Q˛hP,Ŧø;GjnģûÛŨ ˜ĢĐŲ¤S™YĪņ1É@bÛFˇ‘Mra&C•ãæĢ—öņÛč2DŒ]d1>õbķGļšŸÍu`ŨNĶŒÔˇ1Kl°:Ÿ,4\ZyqéŅȊ?Վ•GGÚö÷+¸iI÷­K{dļ‹Ę6¯×4%ŧryŠķS@:lĢŖ{į:Ļp~n)úDˆ~߉ũanŊĢJm:Ögķd…KúŌ&Ÿoē¤*Œ7Ŋ?Ó'Ų^=ËģĖ'č$XõÛĩwP]TŒšŋŸonwÃŖ{RÍgŽX•›ÔĐ"Mqå„åc‹ËÜÖ}ÕØš´Ūō*í˜fã=ëĨŽ4vĸ*@)ŋdƒæũĖ7ŪųzĐ#7\e›HFw&å9öĢisÖë"˛Ē|Ävâ­cōŧ­‹åôێ)Ú‹g”đÅ!œį–ĶøqD?1ˇ2­]šÔí§Ō ˛mōûæĩĸˇŠˆãTŽ'ŲĸnXŖŨë´Sžƒ–úb,€†9lÕĄŽ:Ō‘ōāR`í۞iĐ-k(õB?Jį´ŨBŪ X$“lŸ0 ]0Ô?cļŪ[ȏsu;iˆÄˇš3á–Į Tũjō]FÚōÃVŌ}ņWšŪ-ģV$Ûéļž=ģ6Žßîâp]K‡Uāɑ>SĮNj*ĻĨktĢ<ĒT‚J÷Ž”"€ÖPxÅ;€On´ƒīŌĢ+œĢ)ĮĨsš@UÔÛm„˙+6TŒYp–oŧš ˜Ûˇmoōâ—‡xZM"(’9 üŋ.ŪF*KûyŽEĩÔ ûČžmÁ­`ŧ’qJšbŪŧúœ)l–ōF‘œ` ~§‘Íg,q<‹ r“[(UâZ´2]éáâFŨōļÃÖĒŪKuu ¸ûŖc†üĢy†xŖb€05 ÷b=›ųÜyR(ūfļlŅãļ‰emŌM´´m§pֆb)vŌ…į4€ÃĶ •nŽfšŪLžJįŊ;NŽâŪŪá îX ކļˆÍ&9  ¨`ēMŘî ûÕ?&é&ĩ¸ŽĖƒUųäû×EF(õnežˇ’+ga Ë_Ĩh]Į%֟"*í‘Ķ7j˛M@זâä[”˙ A`nRĪ˖Ü#FģGÍ÷Ēļ›kwoÄr*Ąv,Ŧ<šØÚ1KŽ:P ŗēšæŲįŽ8Ė?yÕšjŌģ‰åļtö3.ôŠöŽ)˛Æ$VF$n⋁ ĩÄsÜ[LūjĮ҇­m=@‘[iÖ䃲1Ë1ІŲQ][*FAŲ—Ė…6ŌWŽ}tĢņfĐ'å}ęĮĢWHTm¤ Š`dŪÚ\ŪØF™E¸Rúf›%Ĩũôb ‡Š8øÜS’Õ°uŖoĨ8cX×bôQŠ™iģqN€ÅÔėîî5eUEŽÃnäŌŨéķĮzˇļ;w‘†Fī[  Žjô7’É++Dy ( ´šģÔ!¸ēEŠ8žęŨÍIŦiÍząųlD=}Ēāē…ŽÍļīŪ¨Î=ĒÁQEĀĢäÉŸ•oˇrŽuS´ĶîaĶŪ5D›ˇ+-kF(6 ÍøģšōÃ*m;Õōp´M4Pfu@x¤ŠX§]ŅēēûP§åŦ­NÆæ[øn`ØÁ?…Íi]\EhĒō;›hÚ3RļHPV›eyku3Jchä;‰_ZtVvúŒŗC$~T­šÁÖNJu03oŦ&–ō;ĢiDnĢ´îâŖÕ,gž…bYÕW6WŠ­ZN´F;9ŗŪyC1]쀯*‚é7>D(n‡î[)…āVíR}C‚ &UmŦËĐ.Žš×Į)Iãčūĩ1ˇžk'‚y‘ÔŽđ8Ģß­;J@fiv76vm’Šoá#´ûm9`ˇš)_ÍąfãÖ¯Š]žôÆ]˜RęUˇ'îJąq§ŗû,.ĐĮĐāg"´yÅ 8î3(é26œ,Öã;•ę)ķiiĶŌŲåųãû˛Ū´Cpi"ÁI+QÉ&‹ˆŖe§ÜÛĘâíæÚ0ĢĐ~5 ™É$Uho–iÖ1‹¸nVeāÕĀ=h‡$æĸŧĩŽîŠUƟŌĢjŠ­Ÿ’ęĮøJŌÅd&pą}œŪ7ŲĪđíį™Šîôæ{´ļq ã;V5ÄëM#+0_A“@ôë9,mŧĻ˜ËŽœt:d°ßI” JZZoz\Đ <h͍ ­(éIGj 4ŸJZJR—Iĩšo6Ef|įīšļŠą¨QĐ ČKšĩ NX#‘ĸ‚Ĩzą§Ås-ŽĻ,į‘ĨI(Är)ˆŗqw#LĐڅ.Ģš™ē u…×Û-VRģO qYö†UŸP`¤ ŽOÅ.‘$‘iŪc*ų@ã¯ZØĨŽq&šē€ÜF'iYžM§å^jÆŧĶĮië3ÄÜPq“NĀlÆX†ßĪô§vŽnIîĄkkĩ9áYp+FíŪãR†×yHÂiÁojV9xĩØPNæ7RÅAZŦĨĢÛĨļģnĘėCĢpĮ8ĢwØv;į(>TSƒš9ųyĻĮ*ĘģŖeqĶ ÖuŖ=Ί ŽÛ™XuĒūĩŒZ­Æ_yÜ>÷ģš+Gg3^Å,Žá_hÜz ~šŌOkwČį2Ģg(°å†zŠS\æeöËu’YåĖr| 5t}¨;ŌāUXu[™Z(fVuę*É;W=i¸Ļ㚉#ãĸÉûŅË÷˙ģ@äæą/Ŗ0ëö˛,ŒŸxĮ.‘Ũ؋}į,wHÃęÎĒ‹&Šb%\§ÍœÕ°’¤Ÿq•ž†ŗõ)7^ZZ˙ ąg¸Ē÷đĮgwk=¨Ī&ÖUč‹čÕ5ģ)Ã>wRJ {{S#Dģ7rÜņNP;IQ›Đ5gjŒeŋ´ĩsˆ_%ŋÚö¨ī­ĸƒSąhŖUËāāP#`M,:īūîy¤Kˆ¤‘ŖI™z¨<ŠÉš5ÄpēķÆsHß/ˆ ũŸ õĻ3FMBŌ)6<ęuįĨZ åNs\æmöÛV¸Ø 7˜6ŒÖ՜k˛FŊT`7­!sšŽYŖ…wHÁGŊH aëÃU˛ û×Ū€5⸎aûļÉĒ 5;X™•œ’Ÿ{j“Šhˇ4“,Ŧō˛cœU]Ņė¤ķ0dķĖĪZԂâ+˜ˇÂá×ÔT‡î×?ĄäjwžI˙GŨøfˇķÎ(AĮj†{Č-øšECéžjVĪĩbiKįj—r Ę­ō†ė(VČ.y2+íëŽÔØ/ā¸Ū7Ȍá¸äU;Xõ{āŠĻĄŌ$XVüžH•Ž(°ÍXī ’™dZõjŦ5{mÃvõV8 ĘvŸÆąŋö4¤—í|zVļŖ$h˛TĄO—ė"åÍė҇‘ÆÖû¸į5…{yÆądQYæ¸Ĩ˜ų'K’åv̆ö5&­$R_X:2ã$ßĪ´€åAÍ N s:Û@Ō¸%W“ˇ“UâÔĄžŅŽc c_jļødÚFAë\Āime¸ŌŽú)ëE€ÖšÔlåĶ–[”o&NŠGZ–}FÚÎÖ`Ë—ĨT×UbŌ<ŧ .Đ´Ũh¯ö 㸠 °ę–ĶË$h[ä]ÅąÆ*!ĢĻՓĘuŽ§Ĩ:â?3Iqš, ŋJĮ°}9ėcKŋõŠv•$ō~”ĀÜšÔ#‚EcŧŒ7Až=jK+¸ī!ķ0Á ++QXZãtS{ˆ#Ɠ҇Ĩ]ŅîâÁ%‘BąÎvŽ´ĄÖŽôÔmÔŊéB]Oũ%ííāiäOŊƒ€*Ž‹#KĢ_;ĄŒœ|­Ú™aq›ŠŪEuōyš]ģԚmÔkW…d_ŪcoŊP ž‚}FX#æ"üÎEDučȋŦҜm ɨ-gŒø†ëæR `uĻiŌFu‹ü:üĖ6ûŌ°jqÆŅF¨ī,ĢšP T–wÉr$J•qEŖYŨ8eĘ`•ī@ šŧ„jŠ#î–]ģ€ĘĢTMokŽ1W"6L8QüTũîÛėKm#*Ę [ŋ5ŌE‰wLʋåã-@7š’[ÉųLâf7aRŪ_ĨĢ"/3ũÔꆱ2,–k¸Ž øT7īö]nŪęl˜JíŨũÚЋT"åmîā03ũÃģ ÔwŌAöWŠOfÆsôǚŦŠ}uką8}ŗøE2FŪ%ˇ]Ëō&֋ŖgĒGu3CåȒ/;\cŠlēŸīäŽWōžųfĮáT’@Ū%+õ[jĨ´–Ö7ˇQj)’ÍšXŽsE€Û}IL7QŖ0Áā† ĐØ&’˛ŋË1?Z’y­×H’HŠ6ŒíÅP´CsáĪ.&Ëė#húĐŖŦHŅŧĐÚ<§ņįŠU˙‰HžHI˙dšÎ‚ú(´&fØč •iŌŖ/…Đc? <}hBëRō,ĸēōÉWÁ8=3ROŠ,M*–A•_jÅŋÔmĨŌ#‚'%†ÜŒtÅ7RڗĐ\H¤Âņ éE€ÜąÔÖņ䈎ÉĒ“šļGqYēKŲÉš­" ĀaŽ:ÖĻ3H.{Ö7‰.ļ[, 6]†N8Ånb°R1,ØÎ*mbt“M ;Č+ĮŊKŦ6íVé•ų.ĶKYR=ûP|ĩ_YIaž]p´ŲgOėğš=ŖëŠ’}IáĶRî8ČŠ=)×z›ÛZC?•ģ~7 ôÍRēRūA“ō Н¨Ã.‘1î-ōƒ•  KŊQ❠†!$…7ōqRé÷w <‘™[n+RšŪUīŠhãSŽ~zÖŅĖí`sŪã’(člœSē bõ§1ã5 J3Į4RĸŠ;ĐJ))hwĸŠ)רZ‘ēTG­IDô)h­I JZ;P (éEzĐ8Ŗĩ-E-!Ŗˇļi{ŌwĨ –šiÔQIœš^”wĸŠZ&;ŅøRĶyÉ bKŠ9ͤ 4‡­/z1LQE¨&(í@ëÍb\Z]XęMwg›ŋ})+Įē’úh@d\EkpŠCƒNābX‹“ö öî>X1éœtŠ4„mžÍs P~bzæĩąB¯4î$6ڍ‹-ÕŲßÃSęöˇW1D°ĸ>>öãŠÖeÍ!ÁĨp1oėîîĖ$H<Ŧ3|ŨęÍũ”ķ476ėąÜ ÁÉāJŌ ‘KŠÅk=FKČn]áĖyéRMeuöÉ%ãŲ*mŨV´n'ŽÖ–c„jHŨe]>ë ŠĪĶ­.-íZ ŲJã ˇŌ™ĻZ]Y~å䍠Į÷ĢMŽÕÍ"€~lsI°2ÂúÚōymŪ"“6NūĸkcwŊÄfEJۃÕ°):S¸zU„ö ci‘ĐōF9Íjˇ*Aé@4î r–ÖJēęũ‡sGųŲģWRGôU'j| ZbÕmFĶíļ­˜S=Å[¤  AĸÎ×­ēōáz š¨é˙mōšQŖčqÖ´;Đh¸ŒôĶΟ×´Æ?ģÆ~—:s\Ũ$˙ht1ũĀųkGtŖ€)ŪYGvǞܜ̝ĖēWRąWĻųģãŠßīT/l­ļ‰Ū&ŨČōĪ4Ûũ=.æŽQ#Äę1šjKm&(.ūĐ$•ßų›9ŖRž–ĘŪ)c‹zœÜzV‚6äVÆ   é4[iĻi>tŨËlWĸa@‘ŽxĨŧPFpxĒ÷–ŪEåΛ€éíVŠ1í@í4ø­ōˇz–lÔré6ŌHŌņŗũ퍍Õ éT…Ü×/Ų ÆÛrŨÍMmmŦa M‹SžÔá’ŧõ¨nZTˇ‘ĄÆõ\Ô÷mŽ )æĢÜéđĪ ›-Ŗø‘°M.—q%Ũ”sIí×eãYĢgŠ@ci{UŊPňĀÉ9&­KŖZM+Jc;›ŽÔÖúm­´ždQá˙Ŋšĩژítë{Xš4LĢ}íĮ9¨âŌí†ØŽ ,HĢ™Úi<ÕUŒ“iëV3@\ZÅs•*_JĻ4K0ô÷5§A  T` RsŠu/‡éUÚÚpŗė`wRŨ}§1ũœ ųž}Ū”÷lÎCsg á_>=āzĶfŌífHŌHūTáFM]bŠ‚ÚÖ+XĘ@ģW9ÆsPĩ•°›Ėéŋ9ŨļŽv¤ë@§ŗ†ëh•ņБRėØģcPčKČÎ(÷ DģE´ •Ŗ#*¤QNĄpĒ~+2ÎÁeŽ Šd“Î?;|ÜŌķŽGĄ mã^āPO@)’HąŽį`ŖÜĐ˜Õ†1Å(EÛ´¨ÅFˇPšœôųŠŪt{ļī]Ū™ Ø1Œ|´y1íÆÅüŠZESķ0SAe^¤­bŒã(§8§â–—<ŌŨŖ4„S4”€LRƒNĻži–’– E´ ))h¤ZĄ'š™Ē9Š(žŠAœr)kRCŖĩ ))hé@ŖĨcŠ)i( íE  ķ@ JiŽ´b—ĩ)(ëKH3ŸjZ'zQIŪ€Š( ĐN{QE NÔĻ’€éhĮ4›&šiÍæ$z-MgŠA{•!ĮUaƒYˇž\~$ļ.)N˙O2¯öô>RŪ[o#úÕ=έoo&Ö,pØbĢĀŠŽ/ ļļYŨ˙vŨīXv–°Ü$ĐÜNQ„¤‘œUŨYbGōãËG€õ  pjV×fÛsmÎh}ZÕ$hÁwdûÛ8ĒúZîļGĢûŊŖĸĐJŦK…•$;ŗE€Đ‡RŠkY'…]•:Ž9ĸ-I&ŗQÆėŋŨīT4’|›älķt¨4‹ČJ’ +¨n NįU†+4¸1ģĮ'AįEö¤ļPC)…™d qü5’÷Q?‡Ö"ÃvŪŽ XÖω´Xö09Û´})Ą ãM;Ģ@ë.āįøŠ‰Š’/2‘ĖÛQ‰įōĨ[‘&šfļmė‰ĐzⲤšŨö™ß ķ|Ŋ B˙TžÎō8VßzÉ÷[=iV•n>Ī%Ŗ$„eîĩ¨éöÛ9Úą8Š'hÛ[ˇīˆČĪŊ0'Ķõ .%– ˆ|ŠŖÁ<äb’Îúiīn-äTÅЃ֥Á×Ĩ ˙<€üj?Øu쇙dŲ"ĨW9  1ęŌŧķâPÖ˙Ũ=hļŋģ–x7@žLŖ;‘ŗ­Qˇ¸Ėú‹ĩģ˛ŋ;JõēZŠm˛2‹]™`Ũ „⛜S&.ļîPeœzÉŅõ+‹‰åļŧLHŖ=1JĀmöëI¸*“éÉŖ)w+/¨  ¨uÍBI~Æą¤Qœn~wSė.ŽŽ ¸ķ6,Ņ1QéU´Õ›Li-å‚GRەĐf§ŅÛĖ7Ŧ27Lx=Ё%ė÷ZsJB,ŠHö⚚…ÃiīĘW“œĐUn-mĻ´6rŗe°Ã§55ˇ™‡äâ‘$Œ俐kEĻŅÕņÉ(Ôų%Ô,⚊XWī*Œ(ž†Y´EH•‹…Sˇŋ¯<—–^L0ČŽãkn\õĻĩ ŲĄû,:ųr¸VzԗˇRÛÜZĒļWÚŲ[TĩqiÁ%•ļŽ¸˗šâ{W[I6Ŗn9 D÷—æhmš5hÔŽ9zŋ;č(Úä ÃŪ˛58^ãzũ™ÚPu"ZÕļWXQd9pŖu!œŋ’ŪNŨøãwJĘĐ˰¸i6ĘōjJÛ#$Ävë'K†Sks Ņ<~c3e‡c@@÷š„ r“ų+“å¨ΤĶo^ō ĸœ6#ĩąŪĒÁöÛy-MģJŋōÍĶúՍ:ŌK;idt/4œ•­0 Ÿø– ™‡ëZYŦÍ;ˆ"’)ā1Å”îĪ^ÔÍio|”{WÚæ|RęĄqHIe85CG™Ž­i:ž*é8'oôŊCSuK+‹˜Ąž ĢqŨŒÔÖ˛j.Ŧ÷ÆĄW„SËĪ´ŠōíîĄûc§•.3×5žĩBŗdÉŦ­. ë{ФšŲ;n8oģW¯!3ÛÉļÆuÆīJ°˛+}ÖčiۆėW7áÁ,×–ßđHéščąķf€+ę7‹ehķ0Î8Ô×>–1,zŦa‰ķ @v­ũJĮíöo;Xô>õ™imŦAŲŗxyĀĄEömZūb‰vÆ7JJ˙a[ā Ŗļ+ 2öĘV’ÆTtŧ˛zÖÔFE‰|ŨģąÎ:PĀq5ĖÜÛ;ø‡ĘŽy:î8=+Ĩ<ŠČK+ÃŦũŽA–Đ3Î(@Sĩŗ¯îl~×/’ĢœįšĐŅ ˆˇ0<…ÄRVj-í.ãÔ..Ë"UĀ鎔Ûk•‚ôHȲ\dŊTšvŖ‘îËĖe+|ģ}*ÖŧâM+͎F`ASÖŠ đŲĮŗe}M[Ôl¯.íc‚6Œ(~}hDGˇV¸I$¯Ũ=3U´É帒oæŠĖŅ?§ĩhnÛOō÷$S€W‘Uĸŗš’ū+›„Ž3ãå9-@!dž¨’Éå,w+ gį9ÃíW‡˛õ™¯mî-Ų1U~”f+4—ˆ$w‰ \äôĒ&Hf[Įž‘„Šä"î#híŠĐŗˇžÆK™n%ËîãÖŗ’+˸ÚtŠTžUœrq@É- Ųčr]ƒ'œãøŽ-ė'š+iâTHf—Ė;\˛ŸûNÎXn#˛“Ō’ËKēļuSxMē„Å7_i´håd&M¤ƒKyöNŸq,;;āeÎqKĢi÷wŌĮåjŖũ—r4d$Lį–ĮjfÍfSDŽėĪ/˜Ē¤a¸ŽŠŲ™ėâg?1PMgĪĻÜÍĻĮh1ŧØĢÖŅËĒ$›ZEųzPŌ˛|Ií9Ÿ{ ¤qØÖ¸Î+;Wŗ¸ž€C "Ą9bÔ!u9åļŌ-Ō6Á*įÛø4ûĄqo2yQ*ũíŒ~aīVĻ͚ëOKiŲw¨á—ąË:î UŽ.Ė‘§ŨQ@Í3zUj%—L›Ėū‘Wąš­m%ŨŗB’lŨ÷Ž3Å 9ø´ø?° ËķpHlôæŦ\Ųĸi°].ī´|§y5û-Κ,ŧ˙—×oj|Ú|’AF_‘1Ÿ—Ž)Ü ~!Aö8d'įsI¯m[kVîŪŖ5{S°7öĸÛƒTĨŅîæŽ15Ø}‡#åāPčõĖŦŽĘznlŗirÛՐũŌĩ™q Eq+Hō0fûØ­+xÖŠ<íAšL 2wãԜiŖŽiԀJ)(¤0 ŅE ô ( bŅIKHĩDzԍQžĩ%QJE%jH´œĶŠ(;QGá@ ĩĐzQH–€;Ņ@ Š(Å/z`-!ĸ—ŊZJS֎ÔQ@āņAãRcæĨū* ų æŠ(í@Ŗ4@¨ĸ€FqKIŪ€9ũQb—\´ŪU҆Ö­ˆ­b‚@ĐFīŧŨÍ1ôģ'—Ėhq9Í[PâÄS¸Ōíg›ĖxAbrNzԓYĮq‰×÷c ^*Ö(=hĨĨŒVa–ØcžNiˇVvėy÷w2+ĄWPĘzƒ@žhĖS*8$ąmž•ĸ,턌Â÷§mMŧ0œÅĻ珧•É >É žLxÚy†,cLƒm<Š#¯ãUŦa’Ú&Üyß6w€,,j̈Ô(öĀåGš˜ æ.Cš}"o-HĘ`iå}Ģ]E7–-ÜɂsÚĩî ˎTgôšJ¨8捃94ŲfŽ #ĒũãŠz°e ¤})›Aã 8¨žöŲXĢO#¨ŨS•Čé@ ÚH }jĨ–œ-e’i˚OŧÕxT^[ĀÛe•f4ÄLsF9ÍCsuĩģO#|€gŽõ–Ĩm}čÜ,§¨  åÜĒĖĒ\÷GzĪŅᚃÎŰ;—5,ÅĨÄÍɆŨĩsüU;ß[G1‰ĨQ"Äz M°îÎiØÅC Ü™bn§CqŲōäWĮ]ϐĩ>+/Bt‡EÜáFI&ĨūÖUōŲátŠFÚŽØ žĨmōÚ6ī5Ŋ¸ĢœV.Ģ…ÕėdōËcw 95vÛSŽ[Ÿ"HäŠLdÍ\ĨzU(õ(äÔĖŖ‡QžGRŨF÷R[”‘1ģ‘ÔRe¸‰ä’5`YĖ=*+BÚŅÂĘØ>ÃĨ6ÚöÖá&š5ĀCķ’¸Ŧû)â—Mŧža•‘Û¨üЁ¯my Ķ2ĀÛöõ#ĨOYš?—kŖE#ĢˇsœjQyą#ŖĸË÷ēą$i,mŽU† P‡IhHnæHģ/SŸW‰o^×Ë|ĸį§Z–ËPŠņ¤DWGī+ šŌÕ-cōĐ{’z“SÖ"ë3˙hÍ´wDĀųG#ë[yāPڑx5Nõšū[a,rįĨ\ĪÍHCĒ…î¤–SG‘IĩÎ7Ž”ëûõąXŠvsĩTw5•ĒÜ]M%ŦSÛyjŌŠÜ?…06nnŖĩDis‡mŖ58åsTŽīR íáh™ÚVĀ=…2mEĸÔŖŗōŗŧd6hCbŠĮzÍxöæ,‹æĢÉĢb&š8K§ˇHfĨ6Šjío`.bO1N;öĻŲ_ËpS6Ė‘˛îŪM1\Ũy2 d•‡Ę‹ÖŸk3\AŊŖhÎqĩēÖ^7Ú5ÛšHØģTÕzMN%™ĸiī) ģUŽo $S$­ČAEĨüWa‚e]>ō7VuĢ›ÎĖŦž\x¨VÖfž-īDs­SĪēÔĖWÚŪ#4Ägā­GgŠË5ëÚĪoå:ŽīŊšÔÅ&+>ßRiī.-ü­­ãŸŊMļÕ|ÃqįĮå}Ÿī|Ų  ,ąĨ×$†5œĀžKž>›ō­hæŽh–E9VŖ­;ĩ&F){R”Úw4Šƒš)qIH<ŅۊZw¤Î - j3Ö¤jˆõŠ(ąš斓Ö¤ĸŠZ3H8ŖŊ”vĨŖ€ųi õŖĩAÁ=¨G4´(â˜j)sÅ&y¤ŗÍ%Ŗš`%ÅKۚB(ęhĸ–€ŽÔ´”tŖ´™ 8Ŗ­;ĩ%% ŠZs—Ļõĩčĸ„ČĘmė=Å\Õh^ŅŌvȨātj‹T†xĩx/"ĻE\ĩgR†kË8Œ ļd`áZ˜ ÔŽšÛAĨw6GqLļߨŨ\yí"$MąQ[–—Ķ\Å<ŠWŌŦËis ÛOdČÂOŋœ úĶ+9¤ļÕ¤ąyHĘîBĮ${VÉ`Ŗ<Y–:sCq%ÕÃ3ö^Š*ÆŖmöĢˆÉåŠįu -ŠČĨŦ_ ™~Í*;3"žžõĩ@ÜÂ&ˇ‘° ?„â°ėc2øzeąËw­Ģ•’XÚ8ßc7c5NÛK’ÚÎ[eŸ!˙‹oJÍû'Aķ\–u\Ģné[Zk3iöėüƒ­U[ <Ų‹†Ú{í=*͕ģYÛŦ,æ@Ŋ ĀĨ¯*ŗŲ–éįb›ŠD‘ŪØ´H¨L›NŪ8Ģ—újßÚId@œ€ž´O§%Á‰¤–]Ņ}Üū´ į÷ šiR3ˆûz†ÁäÃîːā6=ĒėúzË8œI"6Ũ­ˇø…6ĪMK4“l’:ąûŦzR :ÖŌãIEeŦ2ėzæĩ# ‘*§Ũŗ?°âųrÍlrŅĢpkMPFTpŖÎŪkšŧ6ÍķÁĖŲųä~‰ôŽ¯jÍm ŌâYKÉ@xÍE-á˙˜nũÎJ—GŠ5Ōá`‹š““ŽMKi`–Ö†Û{Č­×u%Ļ“-å#Ú͐(އ eī w Ž2:Suã:ížô:}ëB=6îÚâ2ęĖrT7đ¨Žt˜fšķäywöÃcoŌ€ŠGk‰ÃG8ÂÆ9cU´ü˙mĖ^Rˆ‡ËZ7ētw–éģŽÃ•`y¨ ŌŌ+•œM)p0Ų?z€)é^L’ŨĩĶ!•ä*CúS5{xRîà Ą mÆ;V…Ö‘iu7˜čCúŠÆi÷:]ŊÔ1Į `#û¸=(¸ęąÅœ6ĸá]võ¨¯ÃI¨Y)BĐį?\:lj°Å˙zŦ„ ĒŊv÷4•¯.ûh‚ßųƒËõ§jO=匞^í‡į>ÕĻŅĢ2ą@Xt'ĩ9ŗŽ3&€ bÚXãå`Ä ŽPŖÄˇBb?lĸāsUî´û{ĸU;×L ‹ˇxu§kx÷;FŸhąË¯LûUŠÆ7ŊW!Ōc‚q2K)#ŗ6sRŽ›n“™ÖxŖoâęiŗØ[]¸yĸ‡~†-H“ÄĘĀf3OҚ=×jYwyíĮzŅ‚Ū+dŲ */ĩ5--Öc2ÄĸCüX  ¤‘á$—æ_õ@uĸÕķĢj*Œ7ŖöT›ÍHI×v)bąˇüČĄUQNāsÚ`´{yĄž•ŖecšL›sZŦQ&‚Vy`.ĪÎŽÉĻYÍ?›$ _×֤촂ę%ŠX÷*ô⋁•­ūĖĩ<kqČĩS“J´–$ŽHÎÔûŖqĢh‹J¨>U€)XęĐŪ\ÉVO^õŖœÖ-“žŽ÷žO‘Ē¸åŊëdt  ZÄRKĻN‘\¯AŪŗmu_ė&„ȹȑ•(Ũs]5ZM>ŅŨ­ã,ŨN(<Íám0gUų€úŌØÉĨÍkn˛üĶp6ä“玠ļ‚Ũ6Ãĸž  bYÛE/›Ģ˙x-6ūE‹[ŗ,ácrhÔJÜj6QĀA‘_sėĩĄugÖ<č•ņĶ4°[Å~ę%Ou’ōEoâRķH¸-E•Äsk×LŽ ų`šÖžÎŪåƒO š^™Õ°ļI7Į)#€)iN™ž”¯œĮŠĨhĘÚĶnĮĖįļâ°ˇˆ:¤*Ēã zhĶ­Q57Që@Œ‹•gđÔ!I*–ÛéV-†™1ˇ`ÁĻãj–'éZQÚĮ ^\HzvĻÃao ždp"ˇ¨ Ėbŗx„ǏR"ۑSØėŊÖ× ō¨ëWžËoų‚œîĮ4Gkrų‰+ú@:|ŅAŦ_ųŌlfp7zŪ< õ¨Íŧ/(‘âBãŖcš|›ŧļōņģgĻhBĮTŽęęH M‰Ų‡QZ5›g`ņ\IutĘĶÉĮËĐ Ņí@šōŧ76—[KĮ|ĀU-OS[‹Ë_-Á…]X‘]C ˆą¨žË1å Į#åĸã2ĩiĐ^X&å˙Y¸ÔzürA$ņōb8"ļšۖEcęE#ĸH :†_B(>Ō$ĶĻ™†ŲŽo§ Ŧí6ãNŽÍbŊAįĄ †^kĨ*3m Kæ4H\ÚË×'Š=)Ŗ)q„\U2häĶĄ(Ûļ(VöĢÆ4#æP~ĸ“ËMĨB`(KIĒ߲•9ĩŗ,i"aÔ÷‰`ÉũšpQX+(UÂāSW7KcĢÜųŀ“0Č@Ŋ‡Rō‰.į {WFöņģnhԑ܊T†8É(Š3׋ĪZŪi‚Î5ž Ķ(ÚWo&ˇá(mŖ(›/ĨÖûü¤ßëļĻ+‘H€Ĩ4Å- ģæ#Įz^ÔMÃ;sÍ"…jN})M‚ŠLRĐ1¸4´RšCj#ÖĻj„ŽjF‹4 (­IôP:QŪ€E ;Қ8¤ íE¨€b–Š ‘‡>Ô qA Ō”t4ƒ sÅ(éE'ĩ/jLŠCNĮĩ! ĪĨĸ”RĪj:RŌS{Ōf”Q@ ĩųŠh Ōb¨_jŅZËäėy%۝¨3Š– äžĮí1+0Æv÷úShã4môŦ˜5ŋ´@ŌĨŦŒTüĘŊ…^‚ú)ŦūÔ2¨'=F(É›,i4F9rĸŗ$Õ¤HįėÍäˇB[ŸjuŪ§5ĨŦSÉm÷›k.īģ@QƑ TPĒ:TäԖ=E,Ė/—čũŠ//šĪÉo/|r0\įĻj+ĖlX“č€4ąķuëA<ÖuŨÜŋnKK]ža]ĖÍŅE4^\Ú^Įæ×Ž^EįĐНŦwÔīâá-ĸ‰„-¤üÍZ¨ĖŅĢ:í$t gˇz^ÕSRyã˛y-XQģ‘Ú˛…î¤ÚjŨ‡‹jŒ°Į-@4pk [ŨB8áģ-…Ęæc+B؏=h°Š¨ĄUpAOJ˰–[‰At˛ÆÉķĄāĢV•-NüÜmE…Ö5'įryŖŌޚo´FŌųĢíVõ–ˇ7Ē\Á&ß.0 āzÕ­×ënÔō6õū,ÕcvėzÆ´Øe×ĨG™ž?/r¯Ĩ05ąÍ.+œÔ.ĩ xåšyD8|GÜ*]&]Fæhæwoŗ°ËnĮ?J,î)qMÆŸõ¤E!"ąuOõŗI=ÖÅDũÜqļ}čl4ØäIr2˛úƒY d¸đîų%mū^âÃŊEĸ[ũžÁoi[ä'f~Z`o`R­sö‰qĢ,ˇFęXW$FĒqŠ~›$Ōé7IØē3ųäb€7i Äĩ–Yü?æŧî$Ucģ<ņQ›ëŸ°ØFŦÆIūķwÅoūbąŦú+æSĸԎ<ƃ[ Üu īT5‰æļŗ3@ęĨČ#¨Ŧ›‹‹ģfKv¯1*ć+ļ´ĩÖ˙‰SîīˇųĐÉ ¯hL%DŦŋ)=3Kmæ‹tķʙqķéYúģJēIx%hö~^â’e™íí÷Ęc…cĖ„6œPĄ§ åôĶy¨Äčŗ8ŋË!nƒú×JŒ@Á9 u C÷*žH :ˇ!ŽZĩßĒZ0–EY[km=)­éšĩēÛHåe;dRsE†tgč8 íXŽUŽd–v$/î㌟—ÜÕ×Suĸ#6ã$Z@hy‹ĮĖŧôæĪ”Eæ(ŒíŦ=Õ.,íæ‘œÉŧÔX¤ū!–6i6”ŨÜͰ?É4ߔō+ ōYQ†Åtkv–ÆęągåŧwYÚĄŋÕ l…  ZS\î'›<)$ŌÅvŦLŠäáĮĩt<Đ!‚õ#´d7 äVfÔĩŠ ¸fōaęķŒĐųĶ5ˆ|›Ž dô4Xf˙Տ­=Ä76†™cy˛ŠŠåÎúäöâæE—wĒÆļŦÆ-Į>hģĐ#o9Ē×đĪ4jļķų-ģ“ę+2ũ'ŌÂÜÁ<Žģ€tsž)úĀgk)UĘæEsÁÍ4æ PfuQĶ$õŠTĄ—‡âX„‰lNy/­ĩĢÚYŦ˜†'ī9éH ´ņ\Ë\ܝA­-î$•qëßë[zl3Áoļæ_1ķœúQ`.ņIžqHXø¨-įķšL 8õ¤šJbļâiô”›FíØõĨīGĩ!¤ĸŒP0 QIŠ@/J(Å€kÔ'­LÂĸ=jFY¤Ĩ<Ōw­DZ)zRw ”´”5–’€ QKڊiéÅ-´ŖĨ%Ŗ¨ĨúĐRŌRĐwĨĨâô ZJQI@ ȧgšJ\PIŠ^Ŗ­P⒖ŒP!1AĨöŖĪ]_Æuāo.Ûj‘æ•ųšĨĐ^?랈ã(Äļ{V´–°I'™$(Īũâ´ĸŪ%V ŽīŊÖ¨ Aŧbëåî'­:ÁŖ›G‘d}‹Ŋērq[Kok…öė.m]m” 1ōŒQp0ā–;ˆÍŊÍʤI…đN*ūŧģôŅüáYHĮĐäÁąŪŦ˜ÜĒpGŠ5Đ"ūíwrqÍ?hÅVžÜ,ĨōĐšÚ@QŪŗ Šāh!üÜÛ[¸â’€1ueūˎ… vqˇ vÅ;TĩšGļģļLÉ>_­llÉäŌ•ĸāQŗžyܙmŒ*$Õ;DžĶPšVļgI¤Ü$^€VÎ9Íį4–c”ęí/”Â?+fī~ĩBHîfˇ¸IíäyCå[ļßjčņÅDˇĖ>jųƒĒįšÉÕŧۍ*5Ž $eHäb~$™lĖqI…ucōô°ÃĨ ĖēÚĨŠXßjįscŽj-Qe‹QļēHd@A+Y6ÉČ`qO"€1!y&Övĩ•Ëۖ(˛›n¯tLR픀­ˇŌļņIˇŊG>㠈ίĘ}ëEšģ[ém.؜…ŨĪ8­âšqU­Ŧãĩfd™ŽY›Š EƒÔU-]›ėrGrHō)Q´f¯wéA´”°Īq¤ŦaY$TÛĩ¸ĪJUŋ—I6‚ČŠ.íÕŅb— Ãģ‚įe„ņÛŗ<$nLôŠ.bŸQx•á0@ŒˇMl…ĪjYdSŽ”\/J§ŠŲ-Ũ›ÃŅŨ>õyO) ƒHFԗqé/Ä2.7îāÕ̏ϓLŒ@Ąœ*œTúĨŧ×6 !~~ĨJžÖ7ŽYqšWS…sũĢr‘´PÃ}īJĐģķūÕhÂßr§ß9éšĶ Žęb2.VæanŨωŖÚvõ$0Ëu~ˇ3FbXԄV<ä÷­=´žØ¤3EkĒO-´ ,sc’ØÅGcŖÛĘQ$ŒsÁö­ā´mÃduĻE•œßÚ2]<"eÛ°§Öĩ“îŅ~iTzŌ/Tˇē’ęÚXJ‘ũäcŒĶ4Øn­o. ŅÆąĘw|§Ąô­Š“÷€ĐM´wŸÚō\=žČ¤PŋxqīREktēģܲ'”W`Ãr+[ëHTS‘ēĶĩ+ëɒTĪ9WcĀ‚ŽiIĒ "‚e1C|u•Ņmį9Ļ•į­ž­öĄfßbŊĪ㊇Aŧ’îșōdF*O­^šˇ7´bFw–‹K8­-Ö†~´€“<Öé—ĸ{Ī-ĸ)qœ3u¸YUĀ$=iÅ{Ķ.ÖÖëû%í§ŖmØģNxÅ7LļŧKckv‘ŦJģU”ōk_˜¤ ­ĩö˜%ŠŽk|–VfÆ)t42čķÃHÍZˇpĘĐ2ÛlŪÃ7J̤ØÜXۘedeÎFÚ`gÅiĒĮĻŊ˜Ž-˜#;š9§ž—tú}ŽRæßîúßĮ{Qp(X @šk㨠ŋέÜFeŌ6ÚˤQßŨÅe›6íŋėŒÔ–Ķ%Ä),uÆFhÎ˙eß­’ÃåEē97nŨķ5hjđŨŨXĮq.æÆķģîÖą5ÄÉ Eä8Q@Ę7–×7`‚?,3( ¸ÔWļw’ũ”ÂČ cæSĶ5rŌúˇxãŦŸx2â­āP iļ˛7Ų.UcåÁĩlP¤įŽĩ/j€ÜÄãŨķĒî#ڋ“¯ûm‚ÆÁŋ éS[钛ķutęÄ}ÕQÅ@GöÕĀžÚ}žCpŦ•š`Ў7r(é—Ė÷I栎cÄsôĢkmx4Ī É›wvÅiœt¤ü(—ŖØO§Ģ$’ŖĄč{Ķ.,n—Sû]Ŧˆ7(VZĀRņ@ĖGK–æxîmĨōŽščjHí/ÎdžįtŽ0¤´Šr:P#">æKČ..Ú?܌ ŸÅZÜŌŅÍ 1ī4ÉžÛöË' )ûĘŨ : 2WŧW˛,’ ųU~č­lҊ``ĨžŖũŦnĘDĢ÷qģøjÎŗist°=°Rņ>ė5j5h&{kŊAcŽå† á˛ZŠXÜŨ4"& †õ­\Ōcԁ™ēŒˇļņĒ2ŦˆÁ˛zS/-īĻ͌BD3É Vˇ”€į•~“Įu ‰f2Ž•ŗgŅĀ<öŨ!åŊ*ÕQp9]aeˇÔDžq>aųTEtVĐ­ŧX~÷4ÖĶ­Ūė\Čģäí¸đ*Õ5NũéįĨ-%HÄvĨ"“´Ph Ō(Ĩ¤ aEč¤1­Qžĩ#TdsRŒRw֛Zˆ;ŌķŠJwQ@ ŒĐ´▀MĨĸ€ ŅڎĸŠJ1E-Ĩ¤§ZhäPÍĩih ü)ÄRv  QIžÔŊč=hĨ¤Ī”´QÍ.(œį4´Q@ƞ´ĸ“ŌĐ $’F)‚Eb@=;×<ō6ĨŽŊ´ĖŪDYƒŠ‘íŎąŲ#fŨų7qšĢē˛#Ÿ••ąčhW ģ²amŽNŽ›<Ä^@j{,CĢßĒáW Ū‹¯Znā3’cGqļöÔ$¯!vmÍÎÖúSĩHä[Ĩ¸xLđ*e_á÷¤ČÁĮz^*ޚ!Qų Æ227˛ÄãHĀÍS}RÍ'hZeŊsW3Å`\ÚÄŪ$ˆ× b=MPiĢYI:ÎĨW­Mmu Ę‚@āuŦĢ[x—\ēQ€#RSô¨„wøá<Δ€ēڕĸĪå4Ëģ8ĮŊIuyœ^dīĩ`^ÜRŨéjëRˇ´™"™™YųqE–Ą ųqīŨœÂŗõļCu`õŧæĩŖTRJ*üŨHĻœQœPĩ4’ƐäÔbŽFUät`ƒ;iņŪC%ŋÚĮ—Œî5§2}ļú+ÉLr3įīmČ­ÚŌËJÄj$Žį‚IõĻËmBŪéĘFĮv3ĘãŠKNÖŲĘK'Ė:€3ŠĄnXëkælmøUíÍA}ēÖ[ĢČ sDÄ,Ұæ€7ŅÖD‡*FAĨ¨-Ęų1ˆ×jm•.[4€†îū Vö†XĀ€Ęũk/MēmKė°:-ži3܎”ĀÛi-¤¸‰\Š›”ĸĸ¸Õm­įhdsæŨŒTW!Fŗj~Pû*§zTøŽĶvÜl9ĸĀiGŠ[Ŋ§ÚwqČį4čõÚu‰Ņãv]ßÅYž!ũŨ´,Ģû´”ÅKjēl×I$ry“‘ķ“ļ€&—Yˇ‰ä\Hâ3†e\…­uu ŧ‚2+˜žEŗ/we2ŧSI‰!q]"ŨŠ t  6IR$2HÁUy&—œVnŧ&“(ŒdđN([QՖ}:m–Ō´L ‰1Į֮钤:5ģČBĒÆ3šÎkûWĐYÔ0‹nĖķšmņgđä&#•ÂîĮĨjĻ 2#Į"yŸp°áĒ•ũĘËŦYې­š‡ž*KUĶî #ī” ¨.Iīü‡ė˛Ē>SĪziOw ŗĒãt¯÷UzšbjJVrđʍų—oZĪ•ÖßÄ %ÁÚ¯@kRiá6ō˛Č„俀+Ûk0Ü´a#ī8Č^ëRÛŪCqw4(„Ių˜ŠĨ ė—KX÷s¸ä)æfņ˙l]ǰû‹Ū€+iˇ/k5öÛi%iå+ZĶQ‚î•IPŸy[ĒÖN”ɛՒP„JH$Ķ!Ž?ĩ$€eaHū#ŠÔ:¸ŦÆėp?Ž)Ú†Ē– øŲÖC÷…fiŌé­esmķ@ TŽsôĨņËĩL¯Ë jĶĩÔüá3M‘sšģŠjęĘZ2đŧqHvĢąëLÕŋŌ4yŨˇ3ō÷ZÄé—ÛîØfĀÂŗsš—WÕeąž‾ķĪŋ°Ģöw sų"h[8ÚŨk[}ē…‘â ų$ÖÜN’Gē6 §Ą n:ĐzÖmūĢ‹ŦRnÜßĨ^B­x#4æ8‹+9õ”ØŌĮ  1Vugą™S;Šb°4Š4˙°´w­ļEb ŗšéâ•g‰dCō¸Č§5ˇ–-ĐB1>_ĨHxë@ŒE×ŋĶ^ŗČUz`sZß,RŦ(ĨåaģhôŦÛ)5ûÍė ēŖŧíīŧ¸‘pö fÅ­ōÜ$‡aWŒá–ŠE¯$ÁüģyY•ļ•ĨX˛ûĮ#Úí üL:Vn‹4_ÚW‘Ģ)Üû—Ū€4oĩT˛x•ãb$=}*K}@L’ŧ‘¸ĢĮîŌĒ“XĀ÷ktwy‹Đ†Šæi %Ūā|ĢëEĢI%ē<ņųrĘúSŦŖI両¸ÃdҤpģēĢ|㠓֭öëUK•ŋXÄJmŠōŲä­ũ‰fU—cmcŸŊĶéSĪaÄI ĄĖh0ęģI@­Ŧ`ļ…ĄNÆęæ™›m ŠĘ„”ûģ›;~•_]ēšŗ%ˇ` 6"´-¤ķmãõe€$QIíNĪįY67mĢ\[Üē•Œep;P"õÕ¤JxÁŌĢĻ•kŠ$hUĶĄÜkC4uí@.tû{ļ 2e€ÆáÁŠÎĩû2ŽØũŠŨ8¨!žOŗ4—H"eÉ Ôİ‚;VˇEavŨQŽ—n–lģÄlyĒ ¯ŽâōæŲ‚\įOJļ‰xˇĖęņų†0A bĮcZ‹mģĸônj(4ČmåVF“ ÷TąĀĢųŖņ F}֙ÜâG.Đ”8Í3R‰"Ōf~UUãŪ´ņÍCuoÔ^\ËŊ=3@l,­åŗØ1]Ąļã5bâÂ+‡ķȌ2ŒŠšÚÚ+TōáR뚘ІÚāˆGáGjv[?v¤?­ UÔGa1b>áę}ĒŽ•io> ”OMŗˇ}:ō˛J‚FxĪŌ¯\ZĮs•*å*|6đÛŽ Œ ô1í@Eg VūF Fzî9Ēđévvŗ cŒî퓜V‡j1ÅQ¸Ķm.åķ'‹{}MZ†4…F0Š0IŽ* ÍĘɁQˇī7v(=iZwĨfÁuqũŗ%ŦŒMÑ@.tûkĻ<*ė;ŌĪiļâ÷}”UŖŠNô§™kŠ"G‡N‡4’iV’ĖŌ:ąË ÜWsÍÉ c#XŽŨ…;šĨĀŖ9Ļ/=Ēĩĩ¤6Ī#B›LšŠˇ×žKC ELŗ6Û۟lˇJō}ĨŅĶø ŒRÎŧYĘą”tlÔO¤ŲÉ;M$[Üķ’Æ´1Iš[!H8ëŠ`DŅ#Æct ž†ĸĩĶí­‰0@¨ĮŽ)Čn~ÖáÕ>Îåa×5ei¤4Ģ?7Íû:īÎjÖ)ŲāQŌ˜Æ‘ōâŒqȧįÚ ģ[† öVE;žmŪ”„Cũ•hÛ‰ļæëÅK´QEäG˙v§īŠÎ{™#Õã‡ĖĘH¤íĮJc&‚ÆÚŲËÁĢôĮŌ­¤˜Ī"÷,x̧֔ō(֑\ Y‘]G¨¤û ˇ’aōWËūījYY~VéNSÅVŠÎ3äD‘’; !ŗ‚'Ū‘"ˇ¨bÂĘOĨÚI)w7ÉĮZļ‘,QėE Ŗ°úZĒ–p,Ļ_)<Īīæ’]>Ūi|ÉbGoVkŊ HcŠ1(UôXÚĮ'™(¯ũā)×Kæ@ëæČûígøzi%˛s$Œø¨-éL -b˜bXÕĮûBœ‘,kĩ :`Sķš3H mjĐŨ†+rōˇüĩĮ +J+o.(Ķ'äfĻŨKցeŨŽjŠĶlŪo5āBū¸Ģ†šŦ§…`qր(QĮJ6旊^čRm:Úi„Ī™ņSæĩŠd "ŗ ›v)Â)g`Ē;šėņˆ|Ą ŒmV6аhāDoP*ĘļyŠRÜĐ2¤ÖPJåä…ŊXTŸfˆÁä˛)Lcn8ŠŽ;Қ@Rūɲ(Ģä.äUÍĒĒā \Ōn;rE&ÅÎīZuEķH`zĐG Ōõ ŌSŠ ēQKڊ”Ŋč¤MDzÔ§ĨDzԔXëJ);ŅÎzqZ’—Ҋ3ŝéh>´˜ŖŠ€ŌŽôŊ(Z\cšAJ(^h¤_–”PGã@éE j1a’ģ}ŠôP0ü) )ũ("‚z1G>”Ā\P¸¤í@&)Eč))Į­4ë@úžĒļ-Hždō}ÕĪJ–9/RQö„ŒÅˇ%”ũĶYõœë} ô dTÆåŌ´ĄÔRøy)ŖrĖWiØmnī5/6[y#†mŠ•Éj}žŖ,ŅÜG"(šƒ¨ėjŽš×_[I4{˛Ŧ‚Ϟ‚XūŲ}u—¤c“Š`GmĒjV˛K1f6;˛•i[ŨĩΚ.?™—îæ˛´Đé÷{á‘Y‰*6œķW4bĐé[eĐĻriŨČÚ7î˜,„ļ ķU­_Sŧĩwa^7eÆßŊЎáōßŲĖŽŦŦą‘Š¯§M2ũĒ8ā2*ĘØ ųĶhĩ+‰ô‰%jÜC•mŨ8§ËŠI‘ øŨ4Ą@ĪŠĻ‹9āŌfM›æ›q!=MDÖsÜhŅÂņ˜Ļ‹s܊@]†ÅxŨî|ĀÖ)~ ŨÜ pÛ;¯’cÜļw—’Š{B‡øœž*—#[ûAļo+o—Ãķ  ŒņTõ[ÖŗąySī}ÕüjīZЍY‹ëI ŨŒōĄ FfĢf˙ŲFgš‘Û™IāÕĢĢãc¤DņŒŗ*Ēū"ŠOoŦKgögXʁŲå…]žÎkŊ)"uT1Û"˜ÄļšånŖM“Ս¤×Žs4'Ë]Û@9Ģ-¨yȗQÆĒŖ–SÕÂ]Ûkqšš'@§i  ­§¸†ũŦî¤ķ2ģã“4Í2yžęöĨgļžÕ,6ķÍ{ö˄€ģcLķøÕ8âŋ˛Ôn+a4s6íÛąŠągss-ŊāŪHœĒ3OZ†Yį›ÃĻBA‘—į'ŌĻĨÜpŪ4ÖåZF, ´Ī&ähÛėŽ?­! yģė–C åîNŊsWo/LÞNøč*ĘÜŊĩš­ģąFVq銖ūŪw’ŪîŨ7æ[„Ô-_l/ÃņY’G¨IcĐŠW‰aÎ*ũÔw2_Ú:C˜âåŽīZY{ŊFKt‘ĸ†%Šu&ĢXĀđk“˜ĖŪ^rŨ@ŠŽíîíīžÕbŠū`ĈÍ֙j—ŋÚ­q=ēĸēíáŗļ€užęá#vHāųIUÜXĶ/Ž'“FyC42 ĪĄ5•uĻŪ\Iąž9Žī”ō XžŠ{Í5“ČsģģîĐlī¨ÛéÖ÷k'îü˜ėjÅԗÖ7Ķ5Îô™‚´dp*KËkŠt¨mŖƒįw|Ũ1KŦ[ÜÜ-˛ĮāŒŽė~˛ŧŌãĸHPX`ãĨĩ›§4čŠstĄ˛LŒJäį4°1Š@œæ˛ŋá"ŗÂ°mn­ˇ…­/´GäyÛ×ËÆwgŠJ8¤cˇ“Uāŋ‚åĘC"ŗÕCYš‹Íˇ‚Y‚Æ_÷Ē8 f˛2Iʰ?CNÆMsú‡Mē´’ĖŦAÛk€x+[ßAoĖōe[…ÛÎę™đŧâŒį‘PÚßCxËÎPრYãÄÍvđm` ā6;Ņ`5ûŌŌvPš õŖqJqۗہ ĮĨ&3TįÔí ”Æ_sŽĒƒ8§Ûę0\C$–p@Đ2Đ7tĒ–úŒW­qšUāŒsNŠū -~Ķŋl^­LE—]ĘW$gŊAgcš°%œå™š&›Ĩm,0fûģ—ž”ëËøíY#ÚŌJ˙uФ$Ô­ĸŊ[G'Í~œU˛ž•Î\ĪöŸYĢDņ:u ŪēFöĻN8âÚMP]Q3ŦnĐŠÁ“ĩ /ĒĨu&ĒjY؝ N¸Ē~"ŧXėaš”Žž•Ÿ=‡›bņcpåĮėÕļŠossä u“Ã.*õQ‚úÂâčYZluÛÎ)ķęÅ?“†y:•AœRk>´ĶËUež‚Kvœ>Ø×†ĪjŠĶPäTųÁģšqē€4=ŠqÅR›T´†áĄwųÕrx§.ĨnlÅŅbąŸQÍ[Å7ŊW‡Q†iDE^7a•¸ÍX,7PŒžh+šMáFXÕ(õ‹ifģ°Íĩ\”šŧVšŖĨgŪëPY\ž9 =ĀĨļÖ ¸¸xœô¸ÍibŽ)ŽqHĮĐŌqKH§4ĩ RbƒK@ĤĨīA ĸŠ(uŖÖŽôR­ŌŖ=jCŌŖ=jFNp:ŌįڌsEj 8ĨČôĨ÷¤÷ ŽôvŖžhĪRŌP)i1ږ ė /oĨ&9Å/֐Ā"ŌãšbüRņGz):QŽhĨĻQGz ­!`8Ĩ h´”Ŋ/Z%RĐ1ģpx¤4§­å5vkņĮpO”6╏öņķ*"yÁSKĨÛjW:2õ¨Ŧô…ļ?Ÿ,…x]ÍĀĒ—‡DFĘ@ËûŨÄIž´i Œ/ŖUĖÎŅÚŽIĸÛ´¯(ŪŦũvļĢ)f‹kä&Qq´ķ@6‘IĻŨ;ÆŦėLT¯›á¸Žė…áZé ›[,˛mvÉ9æũ–‰`lŅÜ!ã=镊&4ëY3€ ÎĨŧ“ÉÔėä˜â¤/ąĢshâkhížyv'͚ŗ5„RÛŦ¯˜‹ÜõĻ;ׅĩ+W]˙7 ûV}˔×í24Jë…elq[Eŗ1Üä`Ô×z}ĩĐUž=øč{Н§Åm“ėŌ™ ‹gš§ĻĒRũpšßZYAkŠ$Ú§­A‘ko8š4!ũw@E4ęڏ”‰š4ûîz M ƒZ¸ŪĨ„œ}jÔēuĩÅȚX÷8sI› ¸˜D„yŋ{šÎŅV%ŧŧˆí$7~ô’ą_:K3D­ ƒŠĐˇŅí-åŦgxį;>æÂ Įiˆ6:Ķ,-míŪc#šË’Ų¤Õf˛HŖKõXüŧU›kX­˅vŽĩK[Ž[˜…ŦVŪaųhz%!`ōÖãËĮˏJ‘‰ā †ŌŗÚÅ]̌ÔĮ!ŗŽ(Éé\ūÂmfņŽ?×7ĨtęÆÄŪs+,ƒøŅļš`Cc ĮĒ^] …úfŖŅvŖ_ ãũsdRhėūû 0&Ŧ˙eÚ5ǘÛs}îx4†cÜåt•+ūŦÜøôÍijÍš;6åÚĘ<ŋ¯jģ …´0ŧ)cŧ @ē=ĸ2°BvrĒ͐)ŸŠ…fmë[ˆ-w*¨ũßaíQ^iđßíķÃazqSÛ@–öâ(ķ°tšB2´vUĐØå‹5]ŅG…€8ĪoŽkGûĖ Ų~ 7"iļËgöm…ŖÎpM1”ĩ(Ŗ[+0A āu§ęQ§Û´öÚyjãYÁ$QŖĻD_w'Ĩ=ŦĄšTšD%ãûŧô¤"ĀnjæŲg3œ! ~.ŪF¨d(Â0hFd]S¸ŧyĻ! árHãaūum4 %VÂ?=ˇTÃLļ6ËlČLJrš`eŪ"/‡bĀQÂ˙:~¸ĮÉŗmÜŧûքš]´‘¤-ōĶ ÜjY, ’Ũm䌴KĶ&‹CU™ZâÅU”â@zô¤–Ũ?á €Sē2Ė<ՁĸŲüŋēû§#šąũŸšûN  PŗŠ?íËĪ‘p{Qĸ† Ē¨~ĢĐéĐG,’¨`î0ĮwZK-* )^HKåúåŗ@z ŠÉģēŒęưy—8b~TÍk7 Y×\WWĢpû˛Ģ‚zĨc$ŸŲŽYL…œü´–ķƞ"6Mʤ0>ĩ§maĢHĐĻ<ÎŖŗk=ĪđíÉūZč֑J$ĖËĘîlâ­OoãlČŽž„P9*IŽÛ´7+ūöxZéW<|Ų8ǧJŗ-ŸŗĮĮĩ[ ŒcŒPŠņZKY•>ņB`hōX‹3ã‘[XžkĨÛëUßOĩ’_5 Bāįv(3Äa„{qÍ´ÍMÔ´€Ö­Öîß=7méÍ1ô‹I Œƒ É F{*(\ÜŌiEbÔoRfbųģŠĶm°ē[/÷ŖŖf‹Ŋ6ÚéƒK,;Ž´ Ë×˙ãÅ XdųĘԚ}ĩ¤†žŌŌH˖īô­OąĀļūG–ž_Mĩ ļ“im'™ [[×=(2-ŧK`ŋwúŌø”mK_áŒIķmĢĪĸZ4ægÎNrZŽIoņyr tô4„fĮoc%Ü2‹Ļyw洔ŸZ†ßL´ĩrđBĒŪĩeP(>ô ­y"Ci$’.T/#Öą<Ī:;EŠ8LšŠä}kĄš%’6×*ŨAĒ̤ŲŦaD ŒįņĄŽ˛¤Ör˛dÔdŨ_Zˆöų›÷|Ŋ…Z×yļˆÛJīÁRkBÚÆŪš•sŪĀËūØŧK†ˆŲŋŒķ[ŋÁÍ@šiŖ3+õâ§úĐĢŽ”ĩ#{ԃÅĨĮ€J)iŊčĸ—” (4QHž•<Ô­Ōĸ=jFYīKIŠ+Q GSFi(Q֖“ŊôwŖœŅÔĐŠ°¤Ĩ !ë@Ōô<Đb÷¨īGC@ Ū—4č ŊƒFEôĻŽsA AGj:Q@ ֒–ŠhéI֔S@ÄȤëN4ŪÜĐ ĮųŦ=~æúĐ,J;p Ôlڝ‚Įu%ȞFõÆ0 ;ĐsH3YzÍÕÅŦPË…ĀSRŊĖÖp\\]:ē¸Ē(CŊCX ęs[ ¨į27ļvúĶ/5 —Ōcŧ´eCŸŪ ÜǎŌ]D"û,bM͆ĪaY¯uŠŲĸÜÜå„ãr¨åjÅũŨĖw†&_"VŒs@ƒ8ŒģšĪ5™Ž_ĪckmË6 5\ęZŒS[ŧņưJ@ëÍgĘ%Ãät§â˛ĩ+éÖæ;\ eįqBŌ_Úę6đÉ8–)sŸ—€6úQŒšČ7 ŽųMĐ´{ļãĨIĖãXšÜļøÂnt¤ž9 °Q’@úÖ÷W–ĪĶJyBų#ÛOņ";ŲĮļBŸŧÄkĘĖąŗFģØ …õ¨í&–h§‡É~ëU \YéŽÉ'Ÿ* ĀĩAuŠË• š_:lúšØÍ5ƒ{í­ˇÛōGtē7Ũ5Ч]}ļĘ9ĪĮ?Z´* Ú`ņ¤Q+ÆÜHIč*~՛ssu¯!”A ôäâ€-ÁcmnėđÆ›Š`b˛ Ä÷úŒ°A1†~ķ(äšKK‹˜¯e˛¸—yÛē9ZØã5Ãŧ0;Į‘ÔpŖøĢ2Âō.ė\Ę ągˇOz|÷—vúB܏.6{ Ō…™âVuØÄd¯ĨIYz…üGmą•<ŌHÅĢR\2ŋÚ 8Ũûˇ_âpĶvņJzVUÕäĶjkcy`.į~ôæē¸YŽŲŠdR@Į"´Åa ybņd­((v–íVįžvŧ’m‹‚Ė̏œĐ2]^k‹{'–ÔŽää–ôŠl$’k(d—ŲAjĄ-Äŗč×Fu €Ā¸Ü=i¨—ĐiŅMęÁ# åėãŲĸą¯5YSM†î]¯÷ƒTס×ŅC(Q˜+/~hÕė—ÄĻÖ1$›€ úR_\˜!L`K#QîjļĢ5Ė lиXŪ@Ž1ÍGĒ+Ŋũ‡#`“Ļ9Íâú;øėä1ãpŨëB¸Iį:´ÁĪãT\9ņ dāĒÂqŽÜŅ5ė“]KnȑpJĻâMk QÍdĮ=ÜÚLĖųŠeŨ‚ÃzÔmo¯:´-Ÿ”ŽsŸZÜŒQĮãQ˸Æâ6ņō“ë@ˆ,ä瑿[˜•[ä#ø…[ V^usqo9ƒH’tĒVwš­Ō\*4[â“n[ųSžã8Å:ŗô{Ų/mYæHŒTâ¯nÉ␀}ėSŋ Ã×įģˇ0=ŧģļĶîj+‹RÖöycq?Ę̎…4ė3uoÜ:ĶģûVM”׹jMmw"ĘĨ7ĢK5ÚK3ų‚#LĢpw@kcšd‘$ˆVE §¨5žnneŅVáVm›ŗŠ¯Ĩ\j7‘C3ēyY!˛94Ģ Ŧ˙ę#TĪ]ĸ›rķÆcûš”÷‹,°4‹ĩļĸĒd­Yŋšå´o7y†` ĩ+ĒzĐxŽm§žŠÆ ļšcĀ%6ņzŋŠ_J­m  7Sč(°ë…¸ˇ.7ŪáHeæĩâDĸ€ŖĩaŪZ2]ÚČ×2:ų€mny§ęWķ}Š--ßc7Ū|gˇÅ@ŽgíWÚmä+q)–9zƒÚē2Įnhô~ ⊐ (=iį†-QŠiÎiO4”@–ŽÔ”€kTDŒÔ§ĨFڑ–4wŖˇJĐBĐ)ŊЈ3EÔ´ J1ƒKیĐwëKGz^ô;Đy4w¤'šQ֓=ihī@ŅŪŽôu īAôQŌ€´Qži JZJZ=é´7 Å w Ŋ8ĻĶ6€0ŧT¤ŲFÐ$æœßiŋ°†Ü[˜÷ÜėF1íK¯GsuˇŠ%*Ø!ËcšĐ°­Ŧi4{@\g5]ĖגgˇŽÚ$† •`UģˆRŌÚ6F‰Øp­ØÖzo = 1 ģŊŠĪėg!Wjļ>Sīš/mZĶÃm}āoŽkYn •ĘE*ģĘŲĒēÚM5ƒEFFCŌ€*Ę×WÚtVÂŨ¸؞Š5n?ĐŌŪ&u‰ƒ1ĪĨ^°.m#Yc1˛¨°zP/ˆƒÉcQÂîÎŲāgŨIŨ᱉"‘ˆefųz Ü Ļ—ŠÉÔ­gûUŊíēīh¸dõ Ķ5Æ­b'‰—saž•ļ+*X.¤Õã¸/•Û÷ēĐ/Ąģ‹VŽōŪ9vl 6)Á|ú”ĶÉO2=ĒÁžínqŠL`Đ<ļwÂŌ5û´‘žâĖß3UũJÚâîʨžj˛šBJĶīK€ gK$įN•ώerĨv)ÍS’Åc aš,mÜ;Š×š’$LM" c“Fä‚1æH}XĐ-ĘęwV‚ĐĀ<<›ø"ĩŦ-VŌŌ8WøG_Z°0ĀŌ—m˛¯DíĒÛ:[ģEAo­kcĩ#ēFv =Íb5ĩ͎¤ķÛÄf†n]GPj{{YĨÔMíĘlÂí3ĶëZ”¤P-Ũ„’jČČ“*ū÷ÕgYöŠ(šF” )Ãé@so’(–KC,Lŋ2ād4kim­™eArʄũŅZIj;V>ĄkuúßXÆ$bģ]=kdŠ  ×ŌęvķÉhȊĨqģĨM:ŨYę s>tr™W¨5ąM"€3Ž~ĶuĨ˝ÉHTÎjŧw7M`ļËg*ÍŗgĖ>QÛ5´Š  -NÉãĐVVvBŋtU[ëīĩZ‰ÃkŠ?/Ĩtøõ ¨Åej‹5ÂZˆbgUuvíFŖĖ—6¯ ,ÉncšÕۑH}(!y5ŗ(…–!ÍÔÉĸē͝ϚŪ>)žbäØ MË`ˇOzs.áŒĐVÜiÎ$@’ē—ŌŠhm<0%ŦÖ˛!@~sĐÖÆĶëF9Í äÔR3F’:&ö…ę]§wZ6ûĐNÖöŌųņ23H_mC¤‰ā[Ɩ {™bļž6fRšõÍ02´’;YXŲČOĖ1ZĢ֗nŊW7ļŅ܋s*ųÍÆÚĄ­Ã<íà uG ÄSu$žMJÍãÚ8ŽXÖÎĶģ4Įeg ÍĐց į6ž˛yÄ{7ÅUēŗž–ōī|jȸ‹|Ģ]&Ūôę.3ˏ‡B5ĢīÛå…~´žķã´û<Đ<{;ˇzÚu'ž) /_ƀ1eŽâ×Z’åmÚhåPš^Õ5øžKû/.(š›°­4o,ÄĶņ@zĸO;Ī Ų´ĘÃ÷2á­+^ŪÆ$‘ˇ:Ž ĢEsÅ3ËÛڐQšŽvdRȅØwŠļĻIĩw8 3šÄŌáŧ„Ūo‡cK—CžõPÃx։ēÍÚh¤ ÎŨ[é]•í­áoŗIŧ¯Z˛Ę ĻF¯o=Ũ„eæV P˙*šIå—L“6’#hŒšŌ ųR€ČĶ!•tcm,m€ËĪ|Ôē,wöĸŪx‚čĀõ­- ŽE8.J`sđ-õ…ŨЎ×ÍI[r°8¨ėėnfĩ¸†xüŠO1Kz×IŠhAžzĐ ŅęSXÉjöéÂā6îĩeŖšm#Ę1~øĻŨš­`Ŗ9ĨÚ3šbŨCu&ŽļŅÄ<ÂĄXéLžÚíôXí ɀæéŠŨ*)6úP3÷MšæŌŲ“ sÕĢ6Ô Ĩ$IÂrMh ŠSÔUåą’8Ĩ1ģ eønYÄ÷6ī!’8ú7ŊnMsDҏųXcŠmĨ”q”6ƒ×ÔĐųĻČ7#jpŖúP.‰ ͟™ °ŒÅˇ†Ē×+zÚÂ\‹C˛?”r9ĩŅl ŽzP6ąĖ‘[´(YUŗ"֓OŽXīf“ėūTr(Æ;VË("(Æ1Hf6×GU{ƒØØāķÔT–°Ü RâWƒdR.Ūĩĩ´”¸ rĐ_irI VŪtNŲVĢú´ww•[¤“īzVžŅAč¸3CxtˆíEŋīí?7ĨXŧ´žX-å„*ÜEŲģûVĢt¤#4‰p—÷ŨžŨĮ @j5 K•ēKģT@ç­j}˛Ø\‹o5|īî÷ĢQp9émîõ;ȚhL0ĮëÔÖîÖ؁HfˆN"ķÍ#;je¤S§Ĩ8Ršm E-&)PhŁsŽhŖÚŠ){Ō@5ēTg­HzTl9Š`PizRV‚ ŠQGzZLSЏĻ!{P})i;ĐGz)I ŊŽôPۊ1“Aë@4RĐ{PŪ”ŌQ@æ—ĩÅ N” Z3ÅgššŖĨ'Z? N´´w  ÍJM=¤Ž+ˇũâļTČŠŽ¯­ėyīˇw Y~#E7v/%ųl{Ôū#@Úví íu9ô§`-ÁĢYÜOäĮ0/ێĩˇ0Ha‡v ˛*œÕWXŠąÛË (›zųejMb52XģœL š,Į{)ãČHĨqĩNŪĩaŽ"YÄ,ę$nBžõ™Ž€^ĮpãĪĶĩ'S¨éãbäįđ  jÖqÎđŧĀ2iŗ`a2}ĄvƒƒT~Ëx–FdVVė{Ōiļ°˙jjģRĒp(bÚæ+¸ŧČ:ûTõ‰áĐĢöĀŖ˜€+kĩ­RŧÕmŦfHæ-šŊ]ŠÆņ ƒģđ6Ė) -[kVˇ@,Œ~îåÆęšëP‚ÕÂ9fb7mUÉÅPÖĸYE§—7Ė]¸ôĨšš uq"4–8ūių C/ļĄ˛ûX%ĸĮđŠ?´`ûēŧŖßmfؐŪ`9>[dS!žđŲ_1ydc=čδcŸLI—‘ŊYOãRk‘Ŗé2d”=Ē•ô€xv‘ÎĪéWu‚‘1?Ũ  QË6I$ŒIĻÛj÷lË™*9ÅRŊ¸‚=2ŲfÍß´*įŒÔVaŋˇf24yĩfãYŠŪø[˛ļ?‰ņĐÔˇŗY¸Š+Ŧ6ö ‹U]Cx‰3Ž ?ÎŸĢžĪ ķĀÍXŧÔíŦZ5˜_Ļ2-jĘGeāQЧâBl÷uķE>ū8Æą`¨7ŋkŠ[^;,/–^Äb­VAE_)L ӊÖī@ČéU.u x$ōŨžn¤(Î*ŅŽ{IV{ģč啒]˙Ž(fkûx-„î˙ģ= ûVÛĘIwļĮ8S´ŅŊĩ­‰‰ØFr\Öe˛ũžâ5•ŗhíûĮĄ  GTŠÁcŪ —<éSëuĩ7ņū*Ŗ­¨cf¤™…ZŋTūΘv(Hu i¤TŽPĖ˸jY/mâG$¨Ž{Ut•‰tčd íåĢQh¤ŗžKX7ŖIķJíßڀ:ĄŒg9Ĩ¨-ž[xԜĸĻę(vX×s6w5V-FÖg’eN85WÄlÃI“or¨­mĄēĩļvēmŠ´Ē‚0  ×&ŌYâI™|åmČšį57ÚĄ"‰Ođ÷ŦûôOíKĀߖįÛŌøH- ę#c@ĢqJbYēõ^õžļyM2yŸŨÍgĘUuŨė@ nrߍT†%ļš(.ĸYbš]ŅĖŊsī@&iAôĸ€*Üę6Öōynų“ûĒ2iöא]F^Ü_jÆŅJ˙ißyøķ÷ņŸJ–Ü*øŽqÜ1åņĶ4ĀĐ]NÍÃ:áNÖ>õ™ĒŦ0ëV7jƒÍëŠ4Č#ū×Ô#hÔŽAÁTډA­ięĀcæūT~ÛQĩērÉ—Âx5æÆmRî ĖuAĒú¤jēŒą Mæ`ãē÷¤–#‚EP ˆ“@^kVöˇ‹lųéķ7÷jԗÖņĀŗ< FŨ­fKˇ‰SpSûŦž*ké-ÚūŪ/Ėe\áGš  ŧ‚[sSQh3Dŗ^E3*Îd9ŨÜSxlŖŪ_IÂ3 ŖÛšč+A1ũ˛˙Ë#^­ŧæ†!V˜ķƎ¨Ė7AëNŽjf’O”yL_&õ¤CņČŦČā…ëíPÁŠZÜ?—šnp1ÖŠ=ŧ:u­ÔŗJōŦŋ~ŠÂ[ûNÁ|¤Š0ŒQCf˜Í;jÖÖč[JY[×Qĩg+8F$ ĪNĩKUŽ7Ö,…9'9Š|”>"Bx‡‘@z…ĩîáî+ÔzUžsXÖHŠâ €Ø8ąžzRŧU ũZÚÂUŽmۛĐUúÃņ:"Ũ°¸ķIĻ›}rŌâq,…¸RˀjõÅÔ6û|× [ Ŧmb6ļåųģ×f*[ŠQ¯BE{”9fĀQ@Í%¸…āķÖ@cîÕU5‹&Ú`KļŅUô5Α† äļETđÜ1:\‡E,˛u"îĩ¨-oŨƒ6~ņĒãې,ŦØVûšk*éPøŽ×…ÎÂM7\“fĄeŊļCœn¨°ÍXoĄ¸v Ŗ%Ypj¯ö헛"4„öëNļ´‰nŒâv’B¸åŗÅgéŅDÚŨųÚ­ˇ  íģ'ÍätĀÕËkˆîĸYbmČ{Ö.‘EõąHķéSxo‹9qĶÍlJŲN*9ĻKxšY[j/SMŗģ‚ņ<Č:Ō~ô) *_jXí3–ģO{¨cŽ7vž6šĪņ!#Mn˙0ÍE*cA†S’ 0}$VúũŧŦ<ŗŖ<ÖĨĻĄĶ2F˙:õV5ŸpĘ5ÛRį›b‹§[´1Ÿ ŋ” ĩŌÚĻÔŽUHŨŽ•ŖÚ°âūV)Œy|âˇi1 GjJQÍ Ž?;ŅÅ “ĨŧĶÚ)i) Q֐ŌŌ@4ô¨›9ŠOJ5#,âŠ^ÔVĸ’}¨ĨĻä⁠š1š(>(wŖøŊŠqHŒsE-0âƒAĨͤ4Ļ“Ŋ-!Ĩ¤b=h´§Ĩ'^””Ŋ-Š=(ëEfŠN)h8 ôâŒP(9¤Í:›Æx  7ZEĩÜâYL…‡`ÜU_a4āšÜšÉíZ’\F#ûXžj¯ö5Ē4N<ÍŅô;ŗVŦ–åQ…ÛŦģåeâŦ‘H +ĨĀ.Čßæž§u,:d´Œ†MŌ 7Îjî8¨IžÔņ´8ˆ ‰7uĻ6lV !‰Üīä†9Ģ™=…4`õ¤ƒŪą|GˇėQäŒų‹€MmbĢĪeoręĶÂŽ@ã4Ä%­­´l(×v>õ$š}´ˇ>|ĢIëV!Ž8WˉB¯ ĻLˇ>d^C \ūķw§ĩocŦoHX䊈hö 0û2|Ũjã0  1č=iÜŌFãJĩ¸†8YJƟuTâ–]6m–ŨˇyIÛwZŧhĀĨ&™m%Ē[HŦȇåËr)ąéV‘OąÅĩ`sWcF(Ŧē}ŧķŦōĮ™Ŗf5”¤’Š,‡åæŦô}hĩΟéC:îŲ÷yĨk f¸Iš<ȟu˛xĢ4PO°ĀˇFqīņfŦTw“ũšÚIqģhÎ*ŽŸĨöĄ5˧”띋ځš}ESšĶ-Žfķ$B$Į,§̤ķY‹yuũ˛mdōüĸ›—hfk'ĩXO”Ŋ‰ô›Y#Ž6FÛŨų| fzĢsgĖB9W!y¸¤šÆ9íÖ/°z7ZĩŠJ¯mc´Jn({1ÍP>ˇōÚ4’UV9wļ Å'z†ÚÜ[Āą†-ˇģwŠ€ĨĮP$‰%B’(en5oĄZ[Î%@į!Xđ+Wĩ&(”ú|SΓ’âEû¤7Jmî—㤌î’'FSŠŋŽ)1“@ɤB'ķä‘Šmų›—^ ĸōųƒ§ÍÅ_##ƒƒKŒzÎŧŌâģfré"ņšˇ:MŊĖąĘûàÆUą‘WņK@-ô¨-ŒžIuY:Ô–úLņĘą´˜—ī|ÕŖI@ÃG‰lÍĒK*ÄNNôĢ6‰cn GfUŪƒ:)ķĢV;Ķ€ĻŸŊ@éX>( Öđäõƒ"ˇw)jŊ͍ĩŅ {.-Ö “z/LšŗŠ(•Ž–ácw^iévđHī°gûĮqĢÄûQÅ)ÃĻÛɲ‰~÷ĖjKK8ŦФ í'<šŗJĘŧŧēļÔíâY†VÆ1Í\ŊŽ)-d[ŽcĮ5›áģF„\Kĩ’9÷jŪ•šŒŽ””;ŌgšSíHGzŠæŪ+˜Œs&å=EPMÅP/”NycZĻŗ>×8ÖĢmōŠns@Į^ip]˛4ƒ'Ũe8"ŸiaŽæ@K7Vc’j⤀¤ēUĒĪæ„>fsÆ¯Rã4”zŌŅŪ–€ÔGRŨé@÷¤0 ŅE “œŌŅ@‘ēRö¤íHˇJŒžjCQ‘ÍHË"”ņHG4ŊëRBŠC֖€r)iŪĨô -5ŗŽ)§J:RWšČéL&—ĩb€–—@ãŌ’ƒJh(ĸŽÔĸ†¤íKÔPĐŋ6ępéI@ J(斀ųQГš3HI ==骊_z(RŧēļÔ`xJ@āsšf­-äwÖĢû#•ļãéēĖW3ßÛ<6˛2Âā–Čæy¤Žk#QŋĖáO­0$ģĶoaIî Ä3ļܰåM6_0øžøÛåĩeĄ¸ŧŧˇyâÅ͍ŲËTŦįÄLļō4Hģ b“Ī|Íw%´nČ"PĖĘ옿ĨŌîg$¸ØØVeÛ¸Uk˜nm5#ym ™d]ފyúօ”“Ë똄Dž98÷ DüÖ]Åԗ÷\:â06íĩĒzqYV)ruKŠeˇh㐠¤‘Ú€#Ņįš™ī"šv-öŠô¨mæģŸMŧr|ȝ‚¸ëD0ę7÷F e’9›pbØŠ4Ë[›{ĩēŒ&ũĖ9ĪZ`UŽ æĶ–õ/¤w ģačEM¨ÜĪ6‘mu 1]Á}čĶ…ŨƎ°¤q…eÚ=MĢBļē"ÄŊ¨ņ  ÷pÜéf;Áw$̏yˆŨķW.^uÕ-6ĖÂzÆĩ,ļˇ7ĢO刕ƒ1SØŠ.íį’ūÚXÕ|¸ŗœžš¤vĨlķëđ§"n9S÷jkũI­f‚Ę6“qt˜Ë~=ũ­Ņŋ†îÔ#RĨXâĸÕtųäž ëeâ,nBzĐút÷Nčé/“ˇ*ŌŽjŠÉ¨MŠ]ÚÅtĢ´d^ŸJŅąžö`íuÂ|¨IŦģUžY’íŦŸdŋ)ä|ĸ€7­–Uv _™‡sRHĨŖeFÚÄp}(úSš¤#Lģ›ËŧŽōvķa'đ´ŋlžËKI§‘ži[ ¸tÍ3PŌe—VIbȊQûėšĢØ5åĸŦFÁ—=ņLc-įš‘§ī¤—æfL5ZVÔŗ%´w;Q“r–ÛWŦ§Ŋ•ņ=ˇ’Ē9%ŗ¸ûUē‡öÁģû!ōöė ¸tõ  ĩe¸M)QÜHĀíĶ5víî#†1l ŗ`nŠ=jĻģ# x’4‘˜ēąÚšĀíC͕m¤Ž'–ãŒpOĨI§]ŧŌÜE++˜›ĀÆjŦË$ž!ÄrũÎsŒ÷§iąÍo}:5¯—§p`xÔŗ,Öúמ i"xöå{Pą\Ü[ß-­ŅYE&9ĮįQę77p‰å‘GũÚã%ędŠ[›å¸‘ i!u9Ŧ™ŦīdKČåĩ2;6å“=   ]BiƐķBÁ$ō÷f›Ĩŗ§ĢO*’S*qČúŌ\$ķčl‚"˛”Û˛ĻĶØÉ`ą˜Ū6DÚw sНaussĨ4Îëæå°vņÅ$ˇ×'CûZlY@ÉãŠĢf×vÚ|ļ†ÎRëģæėsOq,~[ŗJduÛ´.q@,垝íįŪ†ŲĶ,;įĸ~éĮZŖŖ3›ŠHd‰Ŗ~a×éVnšeˇvļUiųCt C,&¸š&7Pˆœ6ĪQVŗYē5üˇđÉį I#m§oJŅĩVÔ&ž3m’BpĨU˛ššmBKiŲ*n܃>”šāēhĸû2ģŽ˙Ū<‘QY,ąjlÂÍŖŽT>ŸZ–eΈaÉäBqųÕmI¯Ž¯6Ķ*)]Ę?Ɯ÷ úÜr yŧ´Smžõ-ø’-V Ÿ)Ū%Bŋ É –ęöKEˇ…ŲâSŒãsIe|ōŨÉļđpp¸J¯ŦCqö›KÛxÚO+ī ëƒWmnšpėm¤Œ(ū!É Ft7:œ÷WVË$aŖn*[ģËģ}BŌ-ęÉ)à Ŋ*=1gĩĖ’ÛJ‰/Bz —XŽtģĩš†2ÆNå^´fkŠbÔ „m1ĘnF+5îĩ7ÕæļŠTĀ\ŽGT$Ķjö˛ũ–TERáëOHe]~IŒOåö† ,î5[‡¸ļķcDÜžßŌŽč—“ŨÁ!šÆøä؜TvĪ ÕėĪ…îQÜŌh>b‹4/i Â›=¨s…' vĨ*Ī7ė’ųë6ŋZd=îĄ Į4ÅQ$—g’G }jŪŖy2\ÛÚ[˛MÉb>č…åŨKo =¤īĩŖzŌ-ŗųQ™Œ–š|ˇÚĘžT‹Ķ>š¤2žĢgqũ”ŌIw#6Đ]OC[:b…°ˇŧąXķÅĢ\iĪm$œ7äâļŦ­¤k*l`¸ÛLEƒœÖ‰Œ˙eU žIa¸įœÖééX~$g’āŠ)÷ųW#6Ģs=Ϛ’ÛÚGj‚kJÍRęi#’FäQĸĨÕÎí‰SŅx•ŸsŦ[ZŨ­ģīŪzœqQÅŽÚJō* (Î6ō~”§ÖđjĨ†Ŗø'r˛™Xr)¯ĒÚ$žYf8mĨ‚ü ũhũĢŪ^EeoįLNÜãPZjļ÷s:B[åˇmâ€/ԚdPû .î˞j…žĩoypĐ `A’>õH ”ē–Tƒuāã° eÆ'ĩ.*ĄÔėÖ_(ĖģŗÆŽP!¤…Žõ4€†“‘íŪ Ô$ļŽŲ–í‚Æ˙/֕$ˇŗ´F ŌhÆ)jļ[Ēgst]Õ>xé@䚆+¨f‘ŖŽEf^ œ¨=Ebip¤zÍ˙–…Æ€6ûU{Ëv¸ˇhŌVˆŸâ^´Ų¯ííßd’|øÎÕ5$7\Bd‰Õ”u>”Āeœv6â(ųîXõ&ŦaTFąc崞zíSŠĩņÜ@%‰Ã!äH )­€9éëU›QĩSĖč=ûRO5Ĩœ4’!ĮŪÎ(בȧU9Ží´ÛHË6#ÆÔԟoļ0üåōĮVĪJž0'ƒœTO{mi$’ĒĢũĶëCÍēof ¯ĶŪ€.!ķŧĄ"yŸŨĪ5!eR#' õŽyžŪëÄvĪUR_ŒsīZ×"Ō[ČRWrČģŠo<ôÅ.jģ_[,æ•D€n+ž”ë{Ģ{ŪDĒûzíí@Đ*´ēŦ.Uå—īwÅYŽD•ÆÁ”ō¤ĐiIKĀŦá­Xaö…ųzæ˜T[XąX–Cpģ[ŠĩÄSCæĮ"´Ū ⊂ ëiä1Ã2ģH’mBÖÄ2JĢ'Ĩ ,RT0_[]9X&WeęGēÚkåũîfŒ}ĀÔ5ÍĖ6ą&mĢM´ģ‚ō?2 Ŋ+&âūÜëefo’(ņ‚ŋŚĐķŦė×j(Mß6ğ˜E$ŅÆG˜ę¤ôɨ⾆kvž7ŽxÅboK­"îîeVvŨ´žŪ˜Ĩ`4u¸Ļ¸ą0A‘›äqW-Cy‰#ØĘ¸Á5(“N‡įÜÁîjÂ]ÛŧžZƌ˙Ũ€%ÅU{›ëkWTšPŒũĸŪúŪå\Å(`Ÿ{ژvŌâŠĻŠj]SĖûĮ Hāū5w4ę ›¨mtĪ´Uƒ€9āV=¤ËyĢ]œ‡Ž0{ũhJŪhîbYĸmČÃOu܅OŨ5Uīm-Ę.ŠáĨIuy¤"Iœ*žô€tņ[ŠX”.NMMYãYąũØķÔoUך8ãķÂŽ3œĶÕ’:[–HÚFĮ Ŋé°Ū[Ũ’‘J qßd8„dh\Û,ßi‹g˜å‡5Ŗ4ņ@›"ĻxHiP:“XõíÍƒ*ē´€ü§ʘÍđw.AâƒUí¤Hė"g`ĒdŸĨ=.aŸ„lū%Ä2HcIUœu Ũ*ZæíŪĮÄ›ŨcMŧfēn"™7Å*˛úƒ@c4˜Á¨Ŗģ‚UvŽT`ŸxƒŌ‘î­ž“ÍCāļ›#¨¨ Đ#”ķP;vÍWÁkĨ´–¯ē0¤Š'<ÖMė1>… å@°Û‡ROZŪûL” S-ÂķÖ§ŠĨåÚÛÚĀĶ„QKzÕˆŽĄ—!2A8  1ÍV\õ´×/ÖP­ĩ[ÍjPFNj´ö×´HרĢ4čĨīE Ŋ´†€ŌŌQԐĤīKIہ‰ŌŠZNŨ)ڈžjbj#Ö¤eŽÔQČv­I bŠ;Q@áKšBp@õĨĮ4„wĨĨŖ”´QŽ(ŖŒQF0)vŖ¨ŖĩĀ;Qü4uĄs‚=č–ŠLPwĨū1F3@ŖŊ(€š9¤9íE-5ÎŅŋ•-5X0öĨíIŽis@­œŸņSĘnx$šũ+ ™müŠĀōōWį˙ëĶo4ÛkÃēhūī $:]´VīŌĘ˙xŗdšw>×lž!yÄmVôéhŅļCm‹æüĒÔPZÂŅEÔnĢDvöČë *Šß{é1˜×3§ž"H|ĀÁø}ęΊ5ȸĩ•VâōUē5sû2ĖĮ°Ā›sštÚ}´í™"Éoá@†hķ-ƟĢvrĻ}jã Ą¤Š5Š1jG@)\ •ē0Å09ũņtRw°&–ڏ…Øí\ėfÉõ­8tĢHbx’2ūđ,y§fZũ›ėŪYōŗģS˙ŗėnpÍÜžƒÖ§×¯-åĶ#us! y­˜­ĸŠ Žc`ķPĮĻŲÂûãļŒ7Ž(6áD6šZÍōė‘rOn*“GvB †S¸}kNkxŽdņ̝Ŗ oŲáy5ōą¸â€0õ{Čf´´HĻG>b’3ڟ¨¤–ĶÍy—,LĄfĢEt›VÖ<ž”ŗivĶHÎęß7ŪPĮđ  l<ŗe …vFW!}*ĪJb*ĸĒĸā€;Ŋ!šĸŠ×l8ķO(ŋđ’ŠĀĘÁũjü–6ōOįŧA¤ėĮĩ*ÚÂ. ūZų¸ÆîôÆfØ2Žš¨ˇîŠĀĒWw 5hR( yųÄyë[°éöĐLŌGWoŧsÖĢŎn€rsÔĐzūÆŅ¤Ë‹Î­éëØaōöãË>”K§[M E${ŖOē3ŌĨļĩŠŌ?.ØšÎ(™ ĒĢ^p?ךTG⠃ĀũČ,jâiļņ]”B˛1Éų¸üŠFŸš{€÷c썠f<č“Ão2Į=´ōo‰˙ˆĩŅŽ•J6Ú)EC”û™bBũ*įn(¯ }.PW8Æ=š¨ĩhÕtG3ĩFß­^ŧąŠõUgÜTv ŠeΝÍēĀėâ5끙:œ1hĐČ"fSįīščî/ŌŠ\éisBķKą:sÖŽĮÄUÜNҌšubéįū'š‡¯Ë[L>RĮŸm¤Įor× ,ĨÛīŨiŠ °’[Ɣ?Í9¨Í<×oc‡˜ËÁĢBãJ†yüåi"đÆ6ÛēĨƒO‚ÚŠ%e>fĪĖ`cč–в^´‘Ģ!Q‘œ —J¤ĐdX›amÛOĨ^‡I‚¤Š&‘VN§uWŧˇƒLŌ'Hü̈́cīt&€(ÚãFŠÎ;w2îûØã¯'5{YąØ]Ņ€GąĒjaĶUíõp¸ĢĐ@ڞ•ģgVa–Į d:Ė~e…ŋĘ Ūŧú ›YŽ8´k…AVn4øî-VŪFl.0ŨÆ)~dÖĶ;ĘŦ0Y4ÎÔQ‰ũ*VĮö•˜“?.ŊÅ5ŧ=Eå´ķ°Îyjš>™đG›—÷[<Æ”åŨ-m(ßz¯FĒ“č6sNeųĐˇŪ Ø´a!cBĸŒ@?wšį´Û($Õ5xԅl(#] ‚=EPˇŌcļiZ“tŋx–ĸāehÖp<ÅãVc(Čč(˛6ņøwö;‘…<žkR="(­ä†9eUåˆniĢĸĀ,~Č^FM۔į‘L VŅí×a ’Ģ#§Ŋ.§rkļJȧx;ŊņWšŽq,ÛĶŠ-÷ĒI´¸ĻŊ[Ļ’A"ôņ@VÄ{aUAäå°:ķK+ˆ§(1˜Ã*âiq­˙ÚüŲ žįŒRŽ™^ĩŌË&öëĪzR„ 7‰.ũØÎ uû¨å•“rŧö­TŅí’āNĄüÜįvãK¤Û_2´ĘCâSƒ@Ãgmmep!o1%˛sÍd&ĪøF™AäãëšŨ}6?ą}–6hĶžŪĩ z$ÚIlCöcԁ‘Ã6šB¸]¨Ņūņ—ƒŌŠ&ß´ižL>Te‹+ķ7Öĩ-ô˜Ą˛’՝ŨŠcP˙Â?ČĮ6c9VŨԐˆ=)5uˇm”T(ÚkVhâ&ŽUÜŦ0Ee˙Â7lQ“Í—ač7p)­)‹J´ūá*éŠģoj¯$wjg|ĢÆ*HôØRĪė¯ēH˙Û9¨ėt‹{)|ȋ“Ø3p(Ĩ´QIŽ^îEl*õ§F‹¸É €YGARËŖ†žk¸Ž$‰ßŽÚŗmeģŗåžFûÎĮ$ĐF…´ŪęnümüétØQĄÔw((do–ŦI Ænšxį–-ü˛ĄÅKkŖĮmą‰da/Ū$ĶŦJĢá’qåĩEpĀhŸ*“ōc5Ļt¸žÅöMŌyGũŽi­Ŗ[Éo,Ōyq}ŅēĖũnF[ëv+īŊÛ5Ŗ ŦKpgķÚY6í䎕%̈́7Vâ”˛Ž‡<ŠK-6 |ŲnĨŽiÎĐv5ÅķģŧŪ+iØ"nƒŠĒ‰¤Ú­ŅšU!ÉĪŪã5båö@įa“ē;Ķ–œÚt˛ŧ–{|Ã÷ŊkJ°t>XŽæģxŧ•l…ŒõŊI€RZJ@”´w  ŌņE!‰Iß9ü)i ´œSЧĨ ÔG­HyԌĩKŽ){RgŠÔĨņ€7ihĮ4gPIKš(){tâ—ĩ'րĩ Ĩni(ūäfŽÔcԀȿ” P( BvĨ QøĐ0č)(4´AK֐Q@ÃŌ–’–€Ōö¤4”))xgˆzŌ×:÷wzž¤ÖđJaˇB~uęqSZ-Ũļŗöy.žhŧŊÃu;ļi7VE›HēåÔM3ē+7J[&ûmô"Va6o9Á4Ŧ¸ĨÍbE4°_ÚÆ×&f—w˜3ōĨ3[Y˙´Ŧü™Ū3!ۀxĀŨ▹¸íŽbÕÚĐ^ĘVXˇ3ÍXԌöÚĩŜ“ŧŅĸ†Rôš@ }h¤ úŅÆkíäĩ×­Ũå"o—nx O:Ü^Ũ¤’4qŠULü쀿˜ÍŽ+3[¸šļŠ-å XcŽk2Ú;ËËž&vmŪi—įĻ*öģŧiĐŗšdBÃŪ€5ĮJ\ķYz•ĖŪ}­¤ ąĻûĪÜjЍ,úKÃqIJD[l‹!ÍoŌ>âŗ†Į×ßjm 1(f+ÕŗS<pØÜ+]–nZ7ĮĖŊ[´Ŧíl/rŊ*`U°AãÖąĀ– åæa!q|ķK ÚŧV1ÍįHûĶũ[¤ÁŒĘŖ,BŠÁ{̘/-ˇ]‡–Y6´J~P´īBōËf‚VUy6?1éqXˇ“KĨÚÅK$ĶJøVnH-™ē[§Îh~c.8ojÕ#ĨƒX7’_ymĸ¸)Į¸JH´džâČŨåāųģyÁ  üæŒVFqq"\EråÚ)6†õ­|ĐE@iM2V*ŒĘģ˜Öąåü76ÆâEũô›L }ŅõĻ÷jʞūâfoÃ(˙ }íÔ­yšØÎģ™ú휰ÜGâ(>ĐŪgĘv?|cŊ­›=ÕÄZŦ–A ŖûŧävĻũļdģēfekhĻ9Í 5)Ž‹*2:†SÔį×Vē’aøĶ$ÖdkwšŖ ËRKPíÍEkp.­Ŗ˜)]ã851 BbŠlžg”Ū^7íųsëXúnĨqqivķ˛$äc(ĢrŌ$ĐĻųüĢëIfōÉlqŽC÷”••%õüz!ģo/Ė<ũŪ‹Z:l¯5„JŲw@I¤ŧR ZN´­,— yičX|Īž•gŊe ģÁ­ i6,;K.:‘Mļŧ¸ÔŽ'H!ˇˆíÜKc6(ÅcZ_] šėg*ōĸîGĮ_­z…ĖÖĘņŦ‘1ˇîâ€5'‘Ŗ…ž4.ĀpŖŊ, ŌD­"f꾕•sy}ˇ$Gæđ[Ž‚Ÿ}ŠËnļąĻĪ2ã~‚€5ąëIŽ*Ĩ„×R,‚í2ļ—ŖZ¸:R(ڑ¸\Öæ§nž{ĸG˜caķ0õĻ÷ Čņ× § -ÛËÉŊjH~Û™!žXˁ2ŦJÔĸ°|;öÉ-ŧégnžšĨļŧÔîg¸‰Aĸ|n4ŊIŠĖŊšøJŠČŖ šĨnyô¨á՜h­y2‚ëĮÅ@fē•Ž+hÕŲ1ŧąÆ)öˇŠq$‘clą}åŦģ(ĩdžF÷üÉģU{ŧmnė"čū˜öĸĀmĪ=ÄwPĮâžųûĩsĩdŊÕÚë0ےžKŠn:ŅŖpÚÃŲēĸĸŽåõa@ÔbŗmondššFDhâāîjĄÔ¯ šŨ§T <›|Ŧ|Ë@´QœŠ;RQG8 PRtĨŦ Bū=`Z ŒĢ ¨4XföhëXVچ nåŗ•"ķUw+‚Ŧ闷-qĀE–&ە  JLÖV™{st÷qJËē&Ú lwW3Ų^ ę%‰Š†Q@ôqXÚÚÚŅešPņ°$)7įL¸ģžĸ‘ŲFųvųXĪZܨå,Š ° ĖÕîîmĨĩ10 īĩ†:ŌÜø4ųäyҤ2°YĶdģ•ŪÂą6~P=*æ+;A¸šëNYgmĖXāŸJŌ ¤Æ)sM<ŌsIŠZ)hŖŠZ%Rb‹IڗŠCHQœæĨ5ëR2Ũš\qIzԐĸŠ^””RņKĮ­6ŽÔ¤Ōzš1ĪZĨJ@/Z@ihÄ&2(–—ĩč(æŽÔH QH:ņLBRŽ(īGã@Ō÷ĸzCEP0Å-!éFx AŒŅŽ(ŖŊ0fĶŽŦĩ?ĩب‘üņįļĶK?ˆ[΋Ę)6îĪzÛ}ÛN:â˛mėoU{Ų< m* āS¸¸ŗŧ‹RkĢC¨VvÅEŸ|­zdh÷\/ žĩ´i4\ 1g¨+YH"‡t?)P{c­Xŋĩē›Qĩ–%O..NMjû SĶŪ‹”mîŋļ–äFžPMŸ{šm­ĩÚë3]KŦnģxlÖ¸ĸŖĩ-B÷Q$é88ųW֐uĢ&ž˛)úÕ;“ëKgcäiĸŲÛ,T‡>į­=5žųŦĀo1FOU“šb[iwömäÁxĸßvy_˜UŊbŪęę†Ü&2™ĨZK¨äDpZ/žjKKØ/w˜vÃÆ(NúÆ{”ˇp—Pōx4Émo5)"[¨Öc;™Cdą­ƒŌ’˜Ėk›KĢ]HŪY ™d]˛!8Ģ-öųėĻ i#đĢģ úևSG| gZŲÎēA´Ÿh“aPAÍGko~4Ų-dŖ*mÕēÖ¯Cë@8¤:–‚Åkû˜ƒ[ļ~÷/Z:­­ÅĘÛÉV’'ß´žĩ¤4f˜ĖNÎ{ë8™TGunPϰ}BF˙MŽ8Đ.0ŊI­ sAëHFKCrÚâÜyēTØwëEŦWę7sɐ ŧŽÕĒN*ŊĩõŊãēÁ&âœ7ĀĨŖEQŌĢŪËÉ WV’Ly îV­ãFZËĐcž+ ŗîûĮ`nģkNŖšxí×tލ=X✒Ģ((ŲČČ40}âōÆ_iÛõŽJhîϞũõ´Īp’ngn˜öŽŋ¯zŠ[ˆ"`˛JŠObÔ 355 eāųg­[ļ•ŽŦ˜y2FvíÌUÜ~T}(DimŦŒÛȞVNq×éQhōČē…Ņx%E÷+2Öî9¨å–8PÉ+„QÜĐEę\I÷BķĀŅíEtzŽÆÎkk9bh˜gnb‘&dƒĢt#Ŋ8Đ=g.­ -™ļ'Ę%=ĸģĩ×§ŗŗĮ1wa]Z1@™Žģ ų/å*ŨŽ3PxŠb–ëõ‘§ŪˇņžÔ…uŽ\PÍmŖ6ÎnK“ūŅŦĻghėįkiËÅ 2ī]I”wéL6ßąRšĮĨbk•õę2GūŠ1¸ã­nÕ ëž‘Y1ÛTrƄÔ}čŦ?ˆf—4Æ)!tŽ~voøI"sųjģwmã5ĐR 0Sq×Ļ“cǘö‚W­;HIĒ^Œģ°Fî+onMTãšC9Ø$›NÔnÔÚJë+eYEKĨGpö×ÂHž6‘‹.áë[ÍŌ“S¸Œ/í1éĻŨĄd•ᛡ5œąß}š,Ųą–7ÜĖĮīWNGÄ2HŅ$Š]z€yŽ3T7e l呄ĮŽ_ŧŗiŽ"ËČ6ė=EhRãš.^€ŗAh-ၪ)œ1īZũ¨ õĻ úŌ})i)QE&yëH–’”Đ1;ŅKŪ“Ĩ%ŠhŠÆëRˇZŒ‘šC.RSēv¤Į9­IÔ;PhRvæ—œôí@ƒíEPüŠqFsE QīIFiˆ1“EP:QŠ;Ņ@ Ԑ1'ōúĶŠ1ÍRwĨīFy BQ“AäŅÅ.i1īA¤4Ji0(nĸ‹Å&;š_­Ë:ä?hh„RüŖûŊOŌŦYj1^+íWFŒüĘãVJH­âĻÊ_/Œõb6ķ5]B4+ķDÁöĻ2qĒI9‘­mZhãāļā3ô§ĮĒÅ-ƒŨFŦB}äĮ"¨hˇŅ[Ųĩĩˤ‡9VÍ&˛j-ōC)bĄ¸â€$_ÄmÖ_ŗLŊ…á؂dš&Œå\dW9 *xQ×+¸įøkčŦ•o‚Č(ĄúVeūŗÜpI˙ÄJĶŽY’&Õė¸Ę?Ė=(@^ąÕ–ęé­Ú!|ew˙ŠęŲĩEˇ(MÂŽCč>ĩFy“ūKe ŧFAÁīSI"˙ÂCår!4^IšLËĘŪHÚĢZ:‚Ūy€ÆŅÉÃ#uF)ĶūYe˙T¯zM2hÎĩ~”ä‚9ëLeëĢ[Šg6ŅááÛn7T"áīëšĻčí\ߕ#ũoZ]E3Ū¨aĖÄõ¤ŋãPŨ\Åg K3aGëSV/‰ÄvŌm&(å ”ąũŦˆSĪ‚XQÎÜpi×Ú´6SG‰#EVÖŽ!ŸJ Ķ`FĢÉĻŪ"@úcNØ(v’~”fËX†ęāĀc’:…‘qš’ãQōæhĄ…î$_ŧøję¤ÚŨ‘„‚ë–}Ŋ–‹ ŌŪōōYZBãqę(~ĮPŠņhdxÎr @uĢ@¤‚ä†ÚT/"ŠéŌ-Κs4 ųA6– Št¯/íˇë•?ŧâ€%ŋÖbąšŠžîXĐUÅŧˆĀ“n*¯Ķ#“Y×eá ŗ Ú69Ļk/ŗQ˛.Å!9Æ 5aēŠwdBw/UaƒX–wqYęėŅŋÍ&0ŠMiZ[Û$í$S´˛Ãû¸¨4—V¸ž Ãp˜đh~ŌöČ|Č_+ßÔSRļy–!(ÜNY֏šŒãū=†3Ž„÷¨üÉôâĸ(`/šTi暴ZhŒ2–g<(ôĢ—‘^Åæ@Ĩ8äbŗĩÅW–ÅHäĖ+YU~E{Pūí™q­Û[ß}’EmÜeģ ŅL˛įųĐŗP]_[ڐ'!n‚§úVëĮ5üæÚ=ĶÅŲ¸_Ĩ 4/L7Z\ĖĨ^6Œ‘ŠÍĐ¯í­ôčâ’M“œŽ:úĶôĐ?á;šųŊOiOĄ .Ķ4ĀĶGVPU˛§4ęČđâˇØbHÜvįŌĩų¤S\Ãoƒ4Š™éšX§Žtß̝¨5+ŧúÔßŧ]Č6ĸ‘š–hdĶtģˇŽ]ė˙1ãs֘ͨZĢėiĐ7Ļjc*(ÜθúÖUĩŦhĀ:Š âŪõ’d•´5Y ÛæíV˙f€:í[ qö„ÎqÖĻ–ęļy’Ēų‡åį­sēœēzyq0pZĩĢB|ģ:‰€ą°÷G2Äō¨‘ē.iˇöÖíļiBˇ\Vf¨ĒuĀÉ|’*’MuŠ^”˜C |r ü´ŌC4sÆ$…Ã)čEIÍPŌŦVÆŨŖY<ÍÍģ5{š@GssĒož@‹īUíĩK[ˇ)ŋ7Ŗ f˛¯Ų[Ävérßē ”Ļj v( –#å¸gā/Ĩ;ĐI¨[C(ŠIUd=ßÛI Lŗ/–ŧŦ[č#]OOI@v|î'ŊKŽÆ–öQŦhŠJ …h nîŌę×lM™RTôö­§-‚ĮpácØäâ˛õõ‚KZ=šÜ‘ØTēŧ#û-ŒŦ˛ģOĨ/Kui§ÛĮŊöGŒ/|Đ5;FuA:nnƒ5Ÿ¯Ä§JFĮĖ…všĢŠZ,VĖvų†EąÍ:G–8×s¸QęM$7ÜäȝޏŦ;æ’MfÖ ā MÃpã5zÎÁ ŋ’å§ ]pUW€4ŠŽęˆY˜*ޤĶĢÄÎëĻí\ígąé@ŠúíũœútŠ;˙ÛßÚ´mQ?˛bGmĒb9Æ8ĒZĒÛ6û°…vŽÃSŪDĄ˛ˇ!bČ#é@Ë*cŗ°Ę>õE$3æ¨éVđßiâ{¤Wiš'ĩ#oã*!ĪéPFĪ…AŒŪ__ƀ5´-ãĪN¸ëRÍs $UŨĶ=ꖟ¤Ú\*U6‚~ĩA÷Ëâ&ÍōöĮûŧŒĐėW\'™ŠĘ:‘YšĻĨe%ŒņīJ>\ŒĶ'ŗk.ųŖ•¤’O˜‘ÚŒ[7‡[Ë Ę"īë@t,.o¸€6æ­%õ´’ÖU,zZĮÚ? ðã*Ąž•a´å¸6Ō›Ŗļ2@3^Û[:$Ōfč ,7\+42Ģ…áˆ=+^$Ŋ° ˘9î*Mb(ė´šŦb=ė7m  (õ Y$ōŌd,z ÕĒÂc]ÁnÆåUS 6¨ļ({Ҋ¯Ąm-Ë[¤Ēe^ĢV{ô¤!)’KcįuOЧˇL×7ĻÄēĻĨy%āķmĩē Ū[ˆŸ;%Cޏ9ĻĨÄSĢyr+…ûØ=+KĩŽßXž8EP6Ÿz~„$ÔÜ~ôŠc6cž)ēHŦŖŠ ūĶŗ2lķĶ5Î4k“ĀkŒ6ŪËZˇđÛ ė ´G•4ŦÆrsڎ†ŗ<<ōIĨFeÎrqŸJÔÍ'J]RĘŧ™&Pã¨ô̆šËûh›ÄvųEÃŽXôŗmmwģȔ>:ŠĄg_ģ*¸S5ÖņÃŽ[}™BoSæ*úTđ5ˀ[ūY/ Žĩ+[FÛ,€7Ļ3Šŗ ‹4k$gr°Č5Îj¤Š|Öņ ÛōÉ#OĐUË}B 3Jļi¸*ËëE„mcšJ§§j°j[„!Nģ…]¤QHiiR2)G4›hRŌvŖŊŽÔRõ ž”´($RQĩ!¨ČŠp(ČĨÆkRCĩ'z;Q@…¤üh4v īŽÔ¸Ŗé6ā“ÉÍԝ(üh€RÂŠ@y AJ9ĸŽ´QÔõ¤Đ=¨q@Ļäæ” ‡ĨŌ‚(ęiZCƒKKøPhhĄ QGŠ:Đ"ej¯Ŋ`Œ7]ÁhŽŌŪ) ‘ÄŠ˙Ū ÍIįDÍ´HģŊ3JnTƒô ¤ĩ‚V$HíęVžaFË(Ĩ?ēGũÃéL’T…w;…_S@ČūÅmŗËō#ۜão$0En›aŒ"õ§õį­) APŊĨŧžHcfõ+ÍLi …ˇ›æųIæg;ļķHÖ°ŧãųŸÔÁēâÃ ĪĨB,íüī7ÉO3ûÛy YÛ+îXŖ ę.îx¨ÅÄF'zų˜ÎÜķŠ`2+ hƒ,pLJlwĸŪÂÖŲ÷ÃŖtČ`âŠ@8ũiŽ‚¤eOcK֗č´V6о蠍Ô ÎÖ6ŋą‰™HŪwĢzVŅ8¨šYˇ4h[Ԋ`ÛÃ1".{M¸ŗˇ¸Ážr;‘R¸>Y@8āúVv‹s<öķ}ĨÃ˛JW8ĮJ@^H"Š?.8ÕĐ TPéö°KæĮĢ˙xUš9  ÷V6×NĻxÃčigŗ‚â/*hÃÆ:SŒįš^3L ֖öJEŧ{3×ŪŖ}.ÎGi #{H$f¯Cõ EŦ"Dd`Ž*ąŅėļĸų#rŊjõfÅssũŗ%ŗ”hBoŠĩugâ*L¤íåppEK+oęÚ=NiųĨ  mSNkûØÕ"TUÃI/vö­…Ā{PĖ~ž”q֋€â8Ŧ÷Ōí'ēyČmᆰ EŽ^Īknߏ›æ8íWm_Ėļ˜‚Ė ’=h;m:†0Û9Ô Ŗ[Ŧ~^é|ŋîyœV–ih°Æ‘"ĸ(U^§RKšĪŧŅíîĻüŅËũä8Š ąŠcŨ"ˇŪ.rMZÍ4˛ŠīÅf<Ĩš˜@åžxĢbƒėÂÛËW÷jĀ4´ÎëĢn'+nRÜVÅͤW°æ=*˛-üŽ×ļûv6#ųēZŧ  ?@ŖCƒĪŽS,ĖÉĶ-Kuĸ[\ÜyÛ¤ŽCÔŖc5 eEVmÃ9Ē]^ÜyrÅ~C7B~lzĐÛ{xíaXãUũjZJ\P;Ũ:ŪųGœŋ0ûŦ¨áŌ ŽuËË"•œįĄE3.thnîōI.á÷pŨ*ëÚĮ-ŋ‘ ۘĮÍS­-e>dČWkū÷Jž]2­ŌŨŲü´č7u̧¯4u4†SšĶaē‰#”šDč7Tw:L>ZĘŌÂüÕŖŠŖ}rÉ4VĐŽ—8=”zĶ/4ČnÕ73Ŗ ÂēžjK->;=Ė$yēŗļi,ŖģEqw*Čsō•â­ŌĀĻÍ sBŅČĄ‘†§~¸â˙đZd-)RxžíZ}9~ÃöD•Ö<`œä‘WMÆQ—Nß`-Ŧww"ŸibļļŋgŪdN€7Ĩ[=)?@fEĄÛC1tyB“Ÿ/wËS_é0_2ģ–I€ĘqLÔu Ŧ§€,JņČÁsžEišb*ÚŲEk‰w2ŸŊ¸äšĻ4 A¸/˜˙‡w­G~i ĨoĻAofÖß4‘ˇPį5ļ‰mo2ȝ#mûĒÍĀ­";ŌöĻ#6ûGŽúu•æ•Y~îJ´ö‰-§Ųį&E+‚OSVĸ€2m´8­åVķĨuS•BÜ Ö#Š1š:w n+4}ydąV„™[´ŽšĪ$qHf.ŽŦu-@ČÛØ0]ØëSžŒĻâIRæhüĪŧĒܯ¤ĒĻĢvdVęś­mL û= ky`,Ō¤ŧ°j€x~/¸ĶĘđƒ‘n+`RŌˆ‹Ē"€ `O"ĪZSÅ5ą\îĢͯZFųÃ/U8ތŒķYŗčļķ\ũ§|‹.x`Ũ(@Km§Å(,ō0Áf9âĸI‚;ŗs™ žĨĒüqė@ģ‰ĮsN  ‡Đ­^âY1ķ:ŽxŠíôĢXmŧ/znŨķķWöĶO\PvöļöĒ|ˆ–<õÚ*^ôtĸ€zŌŌŌR¤Ĩͤ1;P:Š^ô?Š’–“4 CKGz‘aÅDO5+ÔdķHeĘ?•ŒņīZ!õÍQõ ÆŠNiŊhĨ”Ā1@Ŗ4ŖÚ€ (īF'NÔŊč¤Í'CKšNôŊčū/z_jNAnh:P9Ķ֗ĩAĸŌ*u%'Z`+r)í\šRBšFĮJâ—\†“ĩ¸ÆÛ8lqšäŖ˛Câ­‘äXšÎ=:VŽŽŸeÔī-Ŗvh7â‹m.ö-HŨÍmĩLeX<ũF+‰V=ōyŒĒÆLlô§kĐ;YYŦŽLžbĢ`đjqĨŪZÜ9ą¸D†FÜU—8úU­JÂKĢXÖ9›ģâ—PÛ5­‹Įm1L˙ĩSM×W’Ū9ŪhDa‰cŸšĨžļž¸°‰~G\3‘PÛŲęęßhdˆ,ŠãøGĨnU]HŋØÜG:ÂĮøÛĩZ"ŗõ‹/āE‰ö˛0nz­!úd˜Ö<¨f’Dōw6ãÁj5+yÄū\îžbžŸÃVŖąžMF;­ņ`ŽÉĀö§ÍcrúŧwJŅųhģvž¸Ļ %ޝ%ˇ$¨bßķœāæĢ.öz}ōČ6€ŲôĢŅYŨ.˛÷NcōŲv`@§{¨uGš„FņĘĒ­¸āŽ(ėĪq~mdt3ĩ[nīÆĻŅ’ö&•.•–,ūīsn#ÚŖÔlnMÚŨØHŠ66°n„UË´ŦdŪJŽį˛ŽjŽŽ’Éa'ė’(Ü šˇģéAÁ\s@A–ķM˛T–O:FÆāĮ?íTŗJŌęMd7ēE;Cm,}Í;JĶÎæY$n7,g 4ëë+ˇ-ŨŒŠ˛mÚĘŨ 0-iésR-ĀãyŲ–ĪËUô.Ŧîjx…Üvmæ˛M9čĢčļˇ6qJ— ŋ;O­ 5kUi“Αîŧ¤EũÚ!äŸz×Ü1Žõ„ú}áûj†‰–cí×é@ޝåˇŅâ™~iœ*ƒîjD˛šLŋl“ĖČîŸlT2ŲKsŖ yvŦĘ>\âc6¤Ū\sÅĒũį-É /6Ŗ,I;E<XŅs4úm𤒙Ĩ‘öÆØįÉ#ģąÔ$–Ō%–9°YsŒuũŊÕŨ‚ŗ(ÛÕEÕîÖõT‰ž_˜ËŽ >?ųN}"Z[Ô$`×IhŨI¨lãģœ—DĒŽģOÍéԁ {éîîn#ŒJąÂv,MX]ž#JŪLę§æĒÍm{g{,–j¯įqøMZŊ_ŲĻ0‚iœmlqL ZHž¸ōå’rcīÔē…ÅĖ+<ßhT .5Į?Z›FŠâÚÔÁ´SCKš^Išä”ķe?ÅVôû›‰ī/"yAXÎĨ7G[ĢÛIÕF'~z栉įŗÔ.–;0Jw˜4ëšįûZČęŪS•VÆ*­•ŪĨ{ož&‹)&#¨ĻØ´°i×.ÖīæHäíķRx{ˆ‚hâۏzÚPvķøĶ'gX˜ÅĀqģĨ<žĩ^úIÕü¨ÚFa´HF|7ww4—b¤€ąČ…UEŊŠŅoDÛÁ]åXgJ˛‘ĩ§‡Œr’m#õZĻēĶžĮå™vî끖5ÚMĪ æ_éV%ē]?OˇĀÜĖTUmNKŽÎvÎe§ę6Īq§[´jŪdeX ÛŽŖ FŽŅ7˜ČÛøÖļxŦË;›šæíŧ¨ĮVc×éZ?UÕtą•íœ#¨ŨœVßÉ@ŊÛ$š@Pš}B]f[XŽUnGËĐVŊŒsÃlĢq'™'vŦ$[Å×đZČҟ—đސ9Ą€šŦÚfņ7īąōĮÆŪ¡‹jÁ‚F›_k‚-ģŠãšĩqŠ1ģ’ß`ˆ|ĖąÍMĨ^KuųčU‘ą¸Ü=k:HîtũNk„ĻŽ^ËÔVŜ“MųâōŽx\äâ€,f—5Ēęwv:‚aŲ¸įku[r†ĪP!ÄÖ=íĶj——.¸A•ųzÖĀ>ĩĪkļ÷1ßÃwf f(jBá!珏dhc$GÖŖ¤áa•}änPđŊOs§3čßfCķ…ëęjNV;W´“ĖL+1ācր$ÖđZĮūģŠŲÃgŽ+_™EÕĸívōß{mĢj ą+Ŗddb€&ĀŦnūįOōZFFm­žĩĢ‘šį|KrŽcˇ@ÆEpŨ8ĄԊâî4š{ÔE…Wr…ëôĒŦĘ!Žu1˛šē s­NUõ*aĘ\(#UKBKx!´{9 Éōôã´ —^ŧē†+˛ļÁ#`ˇŋĨ]K›¨l^[¨•¤_ēą÷Ē^ RĐÛ° vJ `S¯¯_û-Ž-™‡Ė#([mJįíąAs 5w §îũiˇzÕž¤ļËn]~LMPļž/íHgU˜‡hgé×÷K¯k f)JąĮzvFMB{{%ÄggÚ¨rj†ģöĶgžb1ŗŽvõkUŠy­`žšâa&ßZĨŠęQŪد́ƒŠaŽ˜¤ÍŨŅŗļFXÚF8UUéļ—¯4ōÁ2*É vœđjŽĨzņÅo$NËŦ769 Uô옯­>ŸŧQŗwz,‰ö•×o ˛ÆNÕûõvĪRwēk[¨ŧŠÔd`ä0Ē/t,õ›†“*ŽŌzS!ķouĩ€Ë K€ØÆęģsŠ\EæČ°¨†&Ûķđ_éOÕîgJi­đŦW$žÂ°.¯ęÖA/šĶyœt ׸Ũh’ r˜ G4X 4é¯ÎŸžs>^čΝ֟g¨\Ũiqļ1 'éÅE§]y–a<ļQaNWž+&ÛP–×O6ënfnqÆ)ÚālBæãD7P„IpOˇÍ>ãSēķ~ėĀÃæūĩNÚā/‡šŦō`Ļw5{ÃŌš°XdŠHÚ.2äÍ&)&Ä-ŒāV>‡ĒÜß]N“&~éĮOjB6ēS3Í<Ķ1–¤1zõĸŠ(ŋZ;Ō“E IEE/Ŋ%”´(QHŧ5-H =*:Ôly¤2Ųĸ—ųRV¤‰Ú–Šĸ掔´”QKGJ? Aôæ‚ih QMqHųˇt¤īKGz` âŽô´čīHsšZF84éÔÜԚ‡“KA BtĨíINÅ!ĨíAĸ€–ŒŠ:Đ@¤éKíIր NÔbŽôqGŊ‡Ō€t¨n/ ļ˙_*'ą5¯xÖZ|’§ßčŋZŖŖXĮ%˛Ũ]biĨų˛Üâ˜0ßÁrßš•{ĩ‘Ž+žÖ-ÖÅŖŊ´_.El0^„UöÔöMh‚"VāpŲé@Š1TßPę hŅ6]rĩFړÉ$‰g›Ë8fŨ´gŌ€/āTWW kÍ"ąUędÔ6š„sÛŧÎ f?õŠßÃTõBWͤ’;yN¸íëŠŅ˛šŽōž5![ÖŦņYú"mŌíũ×5 NŪ§@G=ŠÁĒ)ĢC$ĒËgØ˛c‚ÔëŨAm.`‰ĸgķŽ ē@Į"Ž1ÚĒK|"ŊŠŲĸoŪ}ÖíTįÖ$‹TkeˇiŖ'4¯ĩOjM‹éU§žX¤H‘æa¸ ãŪ’õ–ŪYJ2´Y ŊM[ԅĩc˙Â@†4ZĖS?1ĮŦ>ą ^YhåōäÆ$ÛĮ4ĄąsœRíĨ žE-&8¤*ŊęŊÎĄ ´ĸ&Üō0ÎÕ8§ÃuŸ™÷~§Š,ŌÅo’VÚž´°ŧSÆ6ܭЊËÔ5+y,$ųdØã û~\ÕÍ!v鰏UÍ-āR2iÕFķVļ´¸XeŨ¸ķÂņ@vā yúÕ =bŪōs nG f§›Rļ‚c˛p7@jŠ-€sH60pWÔTMkqfL’/“(ÆIÆi’ŨZi–ņŖžÔčŊčæŅč( V‹Q´’O-&BŪ™Š!ŧˇ¸‘ŖŠUv^ —hôŖËŨ@g0,ĢæáĪ4ņ4{™wŽWī ô T OûfÃæ˙H\/–M^Æ8–S:•n˜¤5xæšĶʂåēœũÚ4Ës¸G€FËĮoš¯G"Íŧmš[E?ĀbįĨ1ÂF…Ĩ÷ŠÆ=k&i…Æļ–Ų#MÅ}M-[ˆ'c,2—^œ7ŦųbŠ›Í>ÅÚ-É}æQSZjׄˆ$V#¨ õ^KI8ą†6“НŖ[ͨ†âŒŋŜæ¯=Ô1šF˜uĀÎ*]ËåīÜ6õŨ@ÄØ)vV5˛.ĄįI-Ԃ@ÄlGÆŅÚŦh—Oqnë+eŖr€įīPŽÅ‚ƒšd—PG ¤EsĐÍ6ōō+(iÛ :恞X* û{äŨ‚q’ŊÅZ Ėb—ËŠ?-dŪiyuM ō#9SZW˅5#ĢšˆuÍAõŦå¤ņŗĀĐüŗŽ´Ļ>:Ķ#ģ‚IZ$‘K¯ŪQڜ.`mø•IOŊĪJ_/ۚ!œĶP´eÜ'ĮŪ§ĩÔT4¨ģēeēĐˆFry§ņԜ(Í7Ęį5°Âŋ4ĨsęÕcŪ°Ą+ŠkK/Ī +ĩGlšĐ‡Ėyßî˜1ō•<šąå}ęŊ•­žŸˆÜėÉbYŗŠ[MNŌíļÅ*–Î=MN°¯~”m>fŨŖ×ĨL1UĩÖK)”˙pĐ–$mĻ=Ĩ}ŠßgŒ…P}qYē%Äép fDcžŊëRr†Ũ&ÅeûĀâ€,tĻũž>ģ?J-‘c‚5W. pÄį5( úa…ch?Zo’™ÎҟĨMôĸ€ 6ņˇŪPßQN¨^•ˇÖŅÜŦ *‰œfĻyQ{2Ēú“@ų ׏-GjrOĒY$VŠĢRĮssÉךŸËQA‰Jãh¨ÖúÕã‰ĶaāÔĻHÄ{ËŽĖgvx ōŅG (FÍV}NĖhO›îķNļ‘–yŲG$ätÅ ,ži4LėURzāUhu+IdōŌt,z{ԓŪAnȺȍ_îįŊ!“3c–¨âž)1H¯Žjž´–9q2Nž”Í6ŪÎ8‹ŲāĢžXŊI’Z–’€ Ŋ-%¨¤ĮĨ/jC ŌûRRĐJq¤ b 4t4wŠŦi˜5#Tt†Z:ŅԁÂŅÚĩ OzSKI@(Ĩ=( ŌRŌv Š3ųQôŖĩčæƒÔPdf“<Đ~õ.1@ یsīK÷i(üiŋÅKü]h <šJ1KڐÆķŌ”ō(ĨíÅ1 ŽÂœ8i´ã@æ“ëJ("€ŌŽ”‚”POjNԙÉĨ ž”RĶ{ĐAĸƒĀ  z­¯Ûld„u<ƒīU4›Č–ÕmeũÔŅ Ĩ[ŠÕ8Ē×v6×k‰ãRŊۘˇÍũŖuŊģnD9‘ēŠ]HĨŊūžÍōĮrŨ…6=*âĘāũŠŨ•?+ö5jÛûEœ-Üp´}ČĻ_ĩCu¯Gå؄€ØīIŖ\GcÖ×MåȎ[æū*ÚXŖxEŨëŠ(˛čŦG¨¤E-ŨŽĨ:+/úĩõŸqĢ[KŖu<æĢ4qi6ņ#'ĖˌžÕĒļpmŲå&ŅÎ1CÚÁ*,HĀp2Ŋ(HČØ¸éŠz°&‘T"…A…ôĨ@2E 1nn÷ŪŨ,"(Z$æG1¨bËxaÂ6ã‚[zÖܖVŌLexPɌg[YÁjŒÆXō)™sqo&€ŪS'úŧZp˙@ƒ? ¨ąŦˇ1Xßךšmo´B8†zš@>˛5uQ¨X9ĀųđI­ŒV.ļ‘É}b’sûÎWژÔcVÔlŧŧy˛qũچåQüMu ûކĩĄŗ‚&ßcqŨTåŌ-ÚøNÍ/˜Nsē€ b—J“ \ö9¨uؕŦ­ÆĐ[ĖQÍi]ŲĮy—)mŋėœfŖ¸Ķb¸X„­!}ߚ„ û(âÅcˆ!/ÎŅR˜’-r*î‰ŗ´uĢ“X$ŌĮ)’@ŅũŨρdė\™_pûŖ°  įŒÂPŦ C’iđüŪ Ÿ$gÜÕĢŨ).ŽRáf’'U۔=E2ĶJû5ë\‰äva‚€(évŌ__n\+`:S4ĢHOŧķ_ādtÅkÛi‘[ŧĪ82ũáīPĮĨŦÉm˛“’sÍ0áã.ŧg¯Öĩ;ÕkT˛b™”3VŗšBĸą"DÄ˛,kˇ÷[š­Ž‡­gĻ˜Ë¨ĩã\31ãn;zP†TŊ†#âRę§zįږKtˇņ &ŨvīŒ— Ō›Ē@“ëvQžîUēbĩ-í#ŲÁgvŗšÍĶcķZņ^āŦ†VŪŧt¨uŗö[ KXä&'}ŦŲíZW:=ĩĖžsVū-­ŒÔ—|_fdũØcĩ"]6ÍT:"Š)ˇå8Ü+7ÃvĐâi\|ņČTôĢļ:*ÚĖŦ÷HîŠ< [mYÜ´ŅĪ&Æ$˜ûSŸ}$Omy-´e˛øi\ô>ÕwZ@Ú 3Žö ŧŸZzčVÍ‘ī“d‡vŨÜVĶNŒX7fxČÆXķHé6ņÅe **ŗ"î8ëSÜŪ[ڕĘąîéše…ŗRĸi$^ÛĪJËņ=ŧĤĢĩĮHÕ{Đ#p|Ø`rzwJĢĨÅ$:tÍ÷ ÕēĀņLŽ–đÆŦV7|>=+F;;F2FŋģB*{Ë8¯a1NšSTm4ƒk2ŸĩJņ§ŨBxĻ[QˇÄ×!TåŠtŗjúŠ2‚Ĩ5jķGŽîä\ dŠL`”8Í6×GKIåš9ä,냸æĖm;Kļ—Mš–Xˇ2ŗįĻ)˙ŲņIáĪ=×3Üõąkψė$.IŨŽž´Ĩ9ĶžÆˇ-ˇĻvķŠw.ŒåôģvbI)ŪŽ1ÅV°ˇk;$€žũƒâŦn$ŒR :ō:V‰nŋhÔŖčģöāßu8eÎ2:ŠĄg¤­™˜¤ō1—īg×֘4„_ė˅|˛‡qƒQøjÎŗ´Jd­ÜVŽœļpK˜ÎŽwÕ_NŌūÆ˙%ÄĻ<’#=(Ē* ÖÛg1?Ü?ʤSƒUī­ZōšŅƒŨzŌ‘§Ao'‡™ü´wŲČīV"Qsá‘æķûĸ*}ļ–-ėdĩķ_kžMLēhOûÍ'–xĪqL ˛$įBU,ĒpY}(Ō§´Lby"i<—ėGzą&/ØĄŠŪrē[Ŋ&ŸĻ´.n.^f‡ Hf­ŪN)OLŠsØÛËâvĶrÜĀžõ6¤Åĩ[;4Ú"![ĨXģŌ%“Q[¸'ōĪņdf¤ÔôĄ{å8”¤ąôqLÚØ47Ęî›d]ģp+NŌ ›TžIcŨg 3ŌˇėläˇFķngníÚ ˛ŌÚÖæižĐĖĶ}î(?JĶmäŠéeMę’0Pz ˇa \hžSüëķ ŗgĻĩ¤3"Ü1ķ[vâŊ*K{5ŗļdŒ’OãHf“ĨÛĪĻ?_q슭<’eCö1ųÛŊE\Ņ­ežÖmˇ.€ČĘĘig[Ŋ¯Ųw@õ˜ ]+rĒŖ&6ÁÍUÖWĖĶŦĨ™y•ōĢãCVØŗ\K,hr¨ĮŠ“PŌ–ũ“|ΈŊ}h&ŗļŽÎm‘"îNxëTl¯Ođüs÷œôükQŦUŦūÍ$˛2ãŗÍ6ËMŽÉ$fxÉÎÖဝĨk_Ú3´^A œæĩM5#Ž>Q~‚ži0ŽÔŠCN¤ aŌŽüŌw§ԀnA4ŊčĮ=:ŅHbcšZ;Ņ@ jŒį5)âŖ=jFYŖé@âŠÔ€įĩ%:Š)(4´€)9=Ši3LSôĸƒĪ4”Qš:s@ĨĀīIž”w $įdf”ũ)( É ŌŌn怂)xŨA žžôęNô{P0ä})Ū”‚ƒé@…4fŠ=¨íUõĖÖRĸĘҜgrõŠûT7ŒŌf#ĸĘđÛ`ĖėIg8É­Ā ž­sÚV™ƔŦāī9ÃnL 0ŋŪúĐĘmo˜1“X{_OÖĄ†o"e99ŌZÅ-Åõô_j•UOcČ  ā=é6áŗēąlī%ļĶ/äķZ*ŦŨęk{&ē˛YåžC;.åuoģøPĩ…Ė—šÍ$ޞE\u8¨ČôČoöO”ŗą ’”uŦ9VöÚ{{ƒtd° č3S_Ī,ē”619HÜėŊhWŊC5ŧÎX•Øw"ŗîĖēl°ŧ2ģÄíĩ–CœT—’]ŽŖÁ"ˆÜ”úАPĒFFÃ2-gŪÉycĻ´†mōŖgvŪÔēÄđØGqŽüxë@\QØâ˛¯ŽŽášĩXŒ{euē“Q%ūĻ—ŋe–™Ųw!ŠÚĮxŦë éäŧšŌî5 ŨšOV˜ë@Ú­äē|+*B$RØnzUčÎäRF2*†Ŋ°ž˛/ķĻ\^^Y4/*Ä`v @û€5Š=՛ĢŪŨY"K#FxbŨĒgŧš7ĩM¨í/ŪÁũhߖ6FÜÉšÔ/“T6Ā‡+•,zԖ:…ĮÚZÖũ%ríčÔŖåƒëJW<ÖdWWš†é-JÃ1Q¸g}:ĪQ–æ;ˆYU.áā¯c@O†K‘rā™Cž•ä—70ē¨ļęĻsrædhƒxÁĸŲfmNũ"qČ9eÍ6ĪĄzÕ 6îFK•š žÁeã"Ģ VY-šåp~XļOã@I¤Kh¤šCō¨ĒļĶ]M3,°yq˛îFÍS×.${rą•YYKOjŋ~,!‹Í! ĸ€,Å'VÍKY°ßĘ׋ÖxŲsŧ!ĨŠ}tÎÖīRMžC›´ŋM* ÜT;͇Ũõĸ€ āŌö¤ŦŊzæîÖĪÎĩeO͑@ŊИųĢmGU‚Öˇų'nåĮÍÍ_ŋÔMŠ…aO2i¸U ,iH@Ŧ™ĩ+Ģ#7ŅĮäČvîOá4ëģŲ§ÔÎŅ‚|ģŪLg€ŋš=dYH‰åēîR:Ö ĪÁkpe¸˙)—‚(a•äQځ *6]š=ŦĢëģøŪáã 0ŽAqŸ2­—¸Ō|øÔoxō eQyytæ[ĄVÛķuoZÕ*ĮiéĮ5‘áų:–N–&Ÿ ú…í¯Úahãî!^ŖÜĐ™&œÉ•ĮĨfŪjoo,VĒQfuÜĖy O°ŋ–âYĄ}­åŒŦ€€ą —oĪYꚝÅÅÄ FHĪđhiš“Ü[L×*Š$,Uņ͊`[ģ’K{WxŖķFvæĄŌŽ˙´,ÖvŒ!$ŽĩI¯/ī,$žŖT íVęEŠoĄŦŽpŖsØØ)¯áŒÖ_öÖԎSåír>@Ųl“WÕ%Ķü–HwÆįæXĶUĀ嚤Į5œš•ĀēŠ9í qĘp­ģ4ˇZ‹Į{öh!Yfķšą@X¨§ˆË r…†7 K9šâŲd’#Ē{Sį.ą1ŒĀp=i§iŸŲÁÕ&wV9ÃzÕ´#s Ö-ž¯t“lĩVh<ãđ¨āÕ.¤ŠK›kuųy—qūTė3ĄŖAī›ė ulėĘAęiļwĶŊãÛ\"+„6@hQŪąŽĩ äÕ>ËhC&WüjũŒ“ũ™~Ûĩ%Î(°¨u¤¤Š;RŠJ(ĸŌ KëíG4‹ģŊŪ›N¤ úRöĸ€jF#t¨I9ŠJˆã4†[Ž(¤ŠŠ?23EԊLsKŠ(<Đ9  ­Ž”š@Oĩĸ›ž‚˜9Ŗ94¤Ōpĩ)Ļ÷ĨīFs@iĻŽÜŌĐQE-!¤Ĩ&Š^”fƒF8Í-#RöëH}h¨Žcķ­äˆoRšôŠsíGjÅĩĶ.í­ÍˇÚ—Ë>‰ČĢriąļœlՊŽ>÷ŊZRI9¨-oéåUGO)ļüí1™Ķi7sÃs^#a€ĶĨOscs>ô !“^ ÔíÍqHDK Įn"ūģ ÃŌŦŌ=bY-w}nOs]PˆĒ0ڀ āTWÉ5ģGĸ6n7c4Ųo;¸íŠļé ÅX8ÅgXXIojöŌHqĩH\bĒĻ‹rļmöŌ!=-lFĘĖÛH8ëR”ĀƟLžKkxėĸÄ~_ŊŽ”ŠĻOũ .ūÕΕ ÔVĨ/jÎģĶæ–ū;Ģy–7UÚۗ:ëZ}čÚϘļÚ\Ņéķ[M2˛Ë’ Ģ:uŊÍ­Š†Y–BîøéZ;F1ŠĢ¨^ϟ™ãg\ãåí@´í>îÖōieš7œ°šu۟1žvr*KŒ0aÃ Ķ’DYT}õČĨÚ7n  ËM>Q|×wrĢɌ*¨ĀZeĨŨŊÅÔĖ#>qÜ=ëaT~tžZĐ#ÂÂe‚ęŪđ&ŲI#iõĻEiĒZÛũš…ĶîĢžĒ+ob–Î)Ũč%4ƇH’Ö"GqnäĐö×_ŲÛ$Kæ )¸Ā­n´b€2o㚐[,vå‚2ģÃō¤Ô´é䚎ö͂΃[Ŗ ׌R­oĩ ¨ZíRb9ا;%üwo¨A,vĨ’öžõnbŒ{S?T†kŊ1Ō%ČÚkõĩ‹(­Úœa`sœWSQČpãŽ(*õ¤û]ƒųBrįnvĶŨ‡öäoåÉ´FWvŪ3ZØīGZsŌC&ŋ3ˆäØÉ´¸ĩKŠ@8恞"’O*8bŠI°bUs€)ēԏ=¸Ž Yˇ+`!âˇq@  ˛ÂˇļE0'CÆ*މ’2s–‡0¯áŪ´Žc–HöÁ(Ŋvæ’ŌknąŊOŠ  íBAo­ÚÉąŒl ¯§­)GŋÔã™cd†$+š†7Q_™Îŗo:ÚĘcˆY{æļîPzqŪ€0ėå—F/m4KbŅ´c?IĨZÎ×WW×ųM/ žÕŗŠ^ÜP&ĶÚîĩ–ŲÆ›ĖūuˇÚcÕ&•ā"{įĻ+[ĘįúŌŗÚ€š“g ĪÚīDŅ2Į?FĪJŠÉ¯´Õ6ŋe3.ī•Áâˇn>VŨŽ´î(Ä ›(‘Üd 3ԟĒÛIykļëēH˜0SÆkWĶ<跄ķqížhåŨÃbKCQÉcßÚŗ ĨÍÕÔ Ö†Ņķ$Ŗ€Âē]´P7M*ÚČ`ĘåÖ˛´Jęæy­¯Gīcæļ&Wh™cmŽG*ĻĻĨ—™&ã$ŌģžôząüGįËeäAČ_ēö­Š(žŋ[‰´8-ÖÚ_7åČĮLSõ(fG´žŠ6w…@hû⡊ŸōĐP3Rš}Yaĩˇ‚P ‘™qļŦ^ZÜŲŪĨí¤^pŲ˛Dîkh(ĨÅ0KÉ5x.ÎDaR3Ķ۟¨Įq­ äP4ČŠĩ‚õ­K‹ģ{bĸyQ tÜj~1šĀ‚KŠĩ†œÚɘļŽīZ…-Ĩ¸Ŋˇ–+I-ĻVĖÍŅHސ•^X▀ i=ąOãĘå䡞š[ĸˇy ™ōØˇ ZvreĮZu”÷ļ1 Y,Ū@Ÿ*:­’ÉųØ úšs.@ÍsēĒOoĒA{&cˇ ĸ´Ŧī$šŠGkY!Āā7VĢÅC¨liÛAí@öŽf†ęî[˜%M˙2åiÚ\2I ˛G$bf%K pk|HŦŦ:āĐ?i{=Šŗ¸ļ•¤@UYW!…-„&ëAkmŦ’~ōãœæˇöŠã4  sL.aiúŠĸGk%¤†eųH úĶŧG ?e]ŦvČ€ŊĢ\`KŋKŒö¤.Ĩu_XĒî8}ĮƒĮ¯äI<‚d’9‘s‘įæö­öUĪŨ›Erļ”f6ũ§>nŪsVÜíFoA@âœ(žŅdōāŊy×÷…°WĩG§/G¸Œ¤ŗ mįšéö¨6æ€š‡u4öÚ<ŨchlTT6s¤ZšeŽb˛ÆģĩŅM*) įĻģ_íõ˜G+$jP•RyŠ5Ŋ2ęūd’ŪO“n6“ŠŨ /Ŋ;KGļžŌČErûß>Ŋ^vŖĩKĮŠi3@ih RéEšZ%!Ĩ ķ@ ŖŊ(#šˆį5+bŖ8ĪZC,įšQH>´qZzQƒŽM-… éKڎƒŠ āãŠu“4 qHOJSõ¤Åš ôĨ"“4Aô¤4Pri;ŌŌ´fJ^´PiĮšC֔ƒë@ Į<Ņږƒ@ Ō“9ŖĩĨ/8ĻĶš¤ę(íTĩYįļ˛y-•Y€äąéWk?\V}&q%ąĐP]æūhÜĸ˜öå_<“SŲęK)ާ‹Ëąā{T:5ä'NüÛĄOŸåĻŲȟŲ–‰LŊs‚˜ÚßĪ<ņoˇ+ĢšXãëZ`qX:Zˆõ&K9${O/'wE5ŋH^îá--Ūy>ęÕF ËųãŠeļO)Ø|šų‚úՍbŪK­:Xâûũ@õÅUĶĩH–Ū$.ĻÃ@ĩ÷üMĶČ?w>aĻ^jRÛ_Goö}ęëō°îiŗKöũ¸įpĒšä_ÛļÁŸ ;¸īL áÔÚÖiîĸŲ!“Z÷=*Ô77†hÄöę#g*~įÖŗõ;9šƒt‹š]“Ö´í5+{ŧ,E‹ã•#hĩŪĢ<&fŽÛ0ÂpĖĮúVœ/æÄ‚7€k˜Ô&’âÚé&iDÉ'ĒüģsÖē:t¸´ãŨ´ |ÃgéKœP)€ ‚ŸÚ*Í%Ŧdpœ33c>¸Š,oĨēî cÆPnÎęłę5û\P]¤ģž$^yëŠŨŗ[{M9Dr‡…īf˜muŠ.bWŽŌFũæÖÛü5bįUŽdby kēBŊU? Ėo*ķyŦØöǎˇŪzߥu„§Ę/Ėôš-ôQY}ĢŦ{rsYZŨėōi¸–Ņ‘%ĮÍģîũi×(fĐmžÜīXļšQßj=_TĩēŌÔ$Ÿ32å{ŠŪˇ\[Æ=T˜Ēzœ6qÎÍš_v÷Ģ–Ķ%Ä 2}ׄKT¯õ8tũžrš ŨW5vąŧM$k`C_—Ŋ05-§,ĄYėèIâ>)FųN jõģG-˛”pĘWĒ]Û[ZØHD1áTãpĪ4nŌę+ČĐPôČÅOYĐK—ĻÃįļÅÚ?:žŒ˛"ē6U†A bĒÜęV–’ŦsĖĒíÚ­Vą›ŗÛE=ÜíÉĪ+ī@ĘC Ų=ę¸Ôm_+Ī~qŒÕ{Đöú<‹;’eĒúS;iĐ4šßˇŠëVá…MM’EŠ6yFI ĶeŖee äô€Īŗ×-/$h‘™[vpûÕrkëkf 4njzk'ÃąĄˇ™ŠŽ|æĮĩA~ĐÉüFdlm’F(J;Ëy 3ŦĢåâ< K{ëkļe‚Uv^ UMTÚĨŧqL™ØT^7§ĻĢN^5ŒŦCå€ąĐGŊÉ$ŽhJū{–;kĻRûU÷ŠŽ/ ŗ@g•P™ŦŊiQ¯ô큏ÉÖŖņ*+XFHËy€L ¨Ú4‹7žƒ53ÍkēGU_Rk›Õl­íãą1 IE‡ZŸPMvŌ)[÷;w= Rn+¨gR"‘_ŦŊ5‹RÔ6ũŨã´ÚÎ‘…Ž •›ĨļíCQį8P‚G_´Ë.dÛˇnîúTÂę Ėžjn_ŊĪJĮĶŖDÖ¯•>éĒöö6ķk÷q˛’rW<h¤IO™XzƒG˜ģļî\úfą4h–Ūîū(Î!FyéUn|¸ā/nōHōL?|xīŌ€ąĐ]ŪCg™;ėZT’9ãĘ8ÚGPkÄņĢØFĖ2ÁÔfŽ}Žl$Ž$ØŦœíúPĢ8EĩžĪ5¤'sĄiŋgÚ#ŨĶĢæi đĖf&?67ĩ]’ÆÕ´mģ/—Ūøë@Îę̏°ÔÕd™Zrš3œÖÍyá¤iŲˇ!ųNzķŠĨ-Ŧ¯Ú<Ų˜;ēĐ:Écų‚SMYŖu.ŽŦž Ö6¤ōMŠŲÛev0Ũ†čM\ļ˛hŒí#Šķ6ĸā C%™Rßhã“I&Šg *I:}ëĶNˇm&îW@ÎŦÛ[Ķ—–Į [Ęy‡i-ߚv­R ôĸĸŗ˙8G-•J*@:Š@)h ĩ&{b–Š(ĸŽÔ†¨ĸâčŖø¨¤1JŽŸÕj>jF[īF(éŌ“>õŠ>öiqÍsI@ (ĪJ(Ŗķĸ­”´PڐŌĶq@.3E-4šNô§Š;P”´sA÷ ã8ĄŠIĄ‡ËHš;Pi{S ŌöéGj;`PiEĀ÷ ¤ÆF)ßÃIIĀ Ē(č zŌā dSG)o.E|uÚsQŨKĄŽyU rØ4( üĮĩ>°|> ]ßFŽZ4|.[5ŋž:P`搠ôŦƊY˜*ޤšlrĮ/1ēŋûĻ€ ';@>´Ԝ˛.}HĨybŒáŨTûšËņo˛$ĐĘčU×îˇPM 5ļ(AųT ‚T’KfHeōä#†ŠQŧ¨ŖYdRøÆãÜĐ!ÛWž č8Ņ4nÛE,;æŖžöŪŪXã–@'Ũ ąŪĸœHa/īí;~´ËŸ1 ˙F•QÉ1äbĻSĩö94į,ÄpÛŽôé^bNæōķœû֖§ĩŊŦĢ*á$bËįh­5 Ž ŌŽ¸Ļ28áŽ,hԃmfcna‚võ§ŗĸ° ĀgĻM;rîëHCR"* č qQĩģ)V†28ÛS† ÷NiiNįMļŊ‰#š?‘ĘĢ1Æ°ÆąĸüĒ0>ą,DׯcyŅT¸  ĪÂĸ–Ū[t‘+ˇĢ.j@sČ ˇ4ԍc@¨ĄWĐU g{Å ŦÂYT6Ašƒ[šēĩ–Õ­åÚ¯ F\u­|đ3@o´øoāX§ÎÕ98Ģ0İđ§ Ŗšã4€\Ö§-ŒÖ÷0Ļį8_›umĶ iģvÕ ëŠ`EiŊŦâ}í€0Ē˙ØÖ[÷y œįãōĢŨŠEp0)SŠĩ ŠCĶRĐtZEŧ3™bŪ§v⡎3ô¨Æ‰nĸeß Ižōîã5ŠHXpM0*}‚3bÖlY“ų5Sû#’g˜¯lˇJģ¨ÜKkg$Đ vAœJ4˯ˇYGp뱜t†RēŅÅÔqGįČ#‹§zŋöRm<ƒ,1ŋŊXü( E[ %ą‡ÉI×+[wK4mœ†5Lx~FŗN#?Ãģ[Ŗ4›.”’X %•Ö1×ÔÕ¨­Ņ-VÜüčoÍéS6K­Ž"ē‹Ė…‰N™¤Uũ‚Yé͘¤˜FD{¸u-"ŊŌãŠPYÖĻŧ˛ŠņBΏ¯ bŠ!…-ĸÆÕéÍ03G‡í‚ĸ™%`‡#-Sßi6÷Ļ6}Ę鲜Ŋģå$ƒUmu.Ĩx†ä•(ã€ecŠŒąÜrŎIĢ5åĪŲ`2˜ŨÂõ ֛§ß%ô>lqē/bíY¨^iļ÷s+ČĨd hSü늭iaĢģÆ ‘ēģ“UÛCˇkŸ=噤ÎsēŸĒŪMdąË+!m­žĩĸ§*ĩ *^ØE}ŠmÛAÎA¨ĸŌŖFC$˛ĖîĢļ@­M$Ž”NķMKÖV™ŨvŽÃŒQw§Etą Mҟ••°jæßSFŪx  7:\7PGŦįĘ9VŨÍ6Ū+ąrMāc–ëZ4 `-#*ŋŪšÅB}"Ú{‘<›Ë¯#æéI¤Å¨lķETčօ&h6ëH[Ÿ'|ō~į~ž´ũCKŠũ{2HŸvEę+Cb€(ŲØÉn­æ\É+˛íËv¨Ŧt•°žIyË÷ˇw5¨VkȖõmvŋ˜Ëģ8âÚéßgēš5Ĩë‘QZi ku5ȝšIFEjQL ÛM(ÛũŖtĨüüîãŊSūĀ›ėŋgûaØ­ē1ˇĨoTsšŠ#9QĢÔĐ;­;ív+Ō˃ŧzŅö9͛Ā÷%™¸ŪWĩZˇ›ĪdØŅ–ūę)ôN-=Osčn}ĒˆĐ¤ōü‡ģÛgˆ˙úõšEfßé­q`-mŨaAÁãĩQ—J¸–ŲmūĐŧXíô­ãY÷‚Ūō(LnÆSŒĀ ī´ĩŊH‹ČRhúHĩ%ĩœÂč÷+ˇņ7j¸O4w¤32%cą–×Îr$9-ߚlē*ÍgŗO&ČúV¨#&@[Bm­Ö=ėû‰ēԙį=ŠßZ8éŽ((ŧRt¤Ž”¨Í- áŖļ(í@Ãĩ%/ĩ€J)h=(ÆéQœf¤ĮËÍGR2Ös@P(¸Åh@P(éŪŽôĀZCE€ āŅ֌ Ô~tzJ\R(p CE'ą  ’“€LĐ(9ĨãĀJBiOJ1Æhr) Ŗ4Å6Ž)¸æŽ(ÁÅ.8ëI‘ĶŊ;ĩ'Ĩ-&)h+;ZōŲRâgYē'Wö­,U SL]J$Rå*Ū” (iĒ#ÖĻT‹É_$a}}éēmĒ^ŪßIxĄÜ>ÕVūV ŅŪ+ØîM܎Ęģ[?ÅN¸ŌYīâŪæHÆoz`SđäK ÍüKŅ$Āũk íYVKØŨ<Âå_Ē‘×ëZĄN(`súüŌ ËKsūŠÛæĪB}ęåŊŒÖ÷¯pZ0†=ž\kŠĩaü!%Č*rŦ:ƒQŲØŊąŨ-Ėŗļ07  í¯á¸šáwÉ$ŒwđûTÚŧ Žą!;Q žzԏĨÉĒŲŨ4C–]šĨŧĶe¸´ŽŨnH™—%¨…üW?ašWœ‚ŠxéúĖ+.… Ž~xÕH#Ū­Í§Í-ģ[yã >fÛLÕāh´'Ÿ% ãŌ„[ũ>ho-¤ČËĐũėĶĩ;xgÕė|Ø÷yŠw ĩ ‹ŨG \NŌD¸e]¸üękí=ŽfŠhĻ1Ivœg­žŗh‹koååDr*…Œf’ū3q­A1lÜ˟ŊVo´ųī"Š?<&ŋxŠuæš× ŅËåÜEŅąÁ  ⴎŨæ–6)Ŋzō­bŗn,Ųn^il<ŠNŌ=+Wėˇ2ZĪĖášEÚ6ŽÕėAmíĶĪ‹÷ ŋ΀]ļ_Ø8,Ÿi*j'Ķ„:ĖPE,ž\ČÆLŋZŅž˛šē–ŲŌT_$î9^Ļ–[äÕ"ēķ$k´.;P->ÜØkō[Dėah÷ícžk ëXãOēūŲûo™ÂģJûVļhĩöt¸×ī#“vĶœŒÖņæąā°ŧMUī$’-Ž6•ĩŖŗC}lŒÆ(ČÚ Î*;›šmä5Đ2´ÛV5?(Ząm§\Cwu?š§ĪÆjÎ:fĸ-#DĮ/™ģ<ŊhkČ%iš”´Ã‘I{šjGqō4jĀI6ėƒRjv×7Û´|ؘ9 Ō%ŊŨ÷–ŗĒC°fî-Іîy¤ÔÚ?0Gŗ{y|ĨO§}­Zu•_ËÆd95ŖoyäWvj…ÚČOZ‘FĄ.qį*¤Ė§bŠéøĐfšž‚{s<ę^Y6˜T ŖÄM>-’9ßiÛëU–;Õ‚ÕžÁ—…žlŸ™ĒîĩÅÄŌGs‡xÁæ€/ØGs EnĻYOđœbŦäįÚ ŗ™į„<´'û­ÖŦR•ˆ—ˇˇævĩ1đ1PdĩmãÍÜkwyķOnŒØ+îΝԚš¤ÜŪŨA$ĶĀnĄĒv7­įœ‚hÁŠL3ëíWôģ›Sa‹=ÎąŽWøŗU4#:\ܙmåA,…#Ĩ]Ŋ–đJŠÔEMÍ# Ĩ%ޤdŌ~Ų2Œ¨9ÛíUnščßĖ“[<вb=Ŋ֋žãG’ŅĄx™A0ęh.R¸Ōžã|JI1•ū­]Đ×n•oîÖoÛnŋŗĨ´–Î_1Sfā85b ÆąĐ|Ã+DĄpÊ  Ē1Yú5ôˇö"iWkgw­ EreXĀɏ”7JĘŅu+ŊAÜȑ¤qü­Žš­;šL04›L õŦo ™cķ‘ātVmÁØPAŠ;V=îŠ4:´6‘Æ[Ŋk_ĩ ČŧÕįr[Y[yŦœĪÖŊbką›4[ûo’UaģÄ=遯oæy įŦĮ͊Ÿ×.mī@’Ô­šmS[6ōyĐ$ŸŪPkûP¯vÍ­ -ōá~ķPÅÔ?jĩhƒ”Ū:ޏŠ!… ‰cŒaT` Hd2DŽTĻáœ՗Žę“iŪBĀĒKžr3H |įĄŖšd d‚7+´°Š}-sĨÄÚÔŌYžŲbElzērpšŦ/#:äŌáüļ@ļž´ĐË6§Û-^9>K•R)ļWkcáô†v¯OSšMcJ7éģš^rŧn¨ŌĘ{¯ rĨ&ĮC뚐IŠÉb.Ĩnī+ojFÖZK%…+yaOcQE¨]Gaöcg)šUŲ÷xúæŖ“OēƒKˇō×uÄOæm  ĩhŽÂÂeuš"ëŧ*āŠąŦß\Y%ģ[íÚîˇ ¯s}<Ö ßc•zäc۟ŽC5Ŕ/ 1ØáĘãšŗy=šĩ1"Y2‘PĪ3ŪÍoƒ"‚ĄĮŪĒ——× o˛ÆeT1ĘŌjÆ[„–3dæPG•*¯o­oZ4¯oBĘGĖ*j†Ņ]-bY\( j^ !÷—×VúÔUˇ—ĄÛSų÷TtYȍw0ÛĪŌŖ×íæĮt@™ĸ;“jM.ŨūÂ^r|ŲÆįÍ0(j\ÜC,ņąM§ÆąîŨõ5júūâ= ]ÄdÚ ZÃíz^ë_˛ŧÉŋ(ëĶņŠžĩŖ­í‹JhU[,¨Qš’įSû=Œ´a¤—h sO°ŧšâyažßĘdäƒTīMŗiöą]аpãaÅ;Ãí![„ķXQąˇR(gĩCuqģÍ)¨ŠēV_ˆ {.EˆÃæÛë@ˆĶV¸–:Ų7’Ow?\RO¨ŧZ”vŪA!ųßI§j–ŋb†-ؐ(S9ÍWž’7×-•ŗ„$„Đ2kVxĩ#l–ûōš\´ëŊJ[h!WEħsÂÕ+̏Fŋ†;QJąĄĢZŦ-æÃv¨dXÁ  v4=ŧ×c4ž[Åŗ!“Š?J͓ZŊ‚XšX‘c•°#?x ĩņIlße†PȄ†ÛŽ}+S,’Á9‚yæÜ:ŸJĩF Í:Ą´‘æˇåËv+éSt5 ”QڐĨíH/jNô”Ŋč aGJ(¤A QHc[ĨGŠy¨ÎsHeąéAŖņŖ<Ö¤z^ w  õ´˜ ĐxéE%/z>´v¤nx w=(īÍ;ˇ4”€:Ō1ãŠu'A@ ÔQG;ąKLô¤č(4cŽhÍĨŅx â”ô ôŖ¨ ܊^Ô .GJ@{QĐP)ÔhĨĪjOåTu}ItËeĻövÚĢ@‡Z+ŸŸSÔíĖ⃐āû՝gPģąˇ†XãL1@}iØfŊŦÛYĩŗ=ÜI€ģŖTūU­ũĐŋ†ÚíS÷Ņ—ÂŽWØĐŋŊfYęsŠOi$Yˆg9ÎifŊžKæĩŗT܋šŨújÍŅüҝېĢ6ŅŊ(@tb—¨4‚œhßĨC¨Øũž(Ęņ¯}ŊęKT[RšFڝ…6ÃX7—CZÉ mÜ w eËX ŧ6s&Ņ€M83Ō¤ëKŒRĐĮŌ—đĒ÷÷ŅØ@$ug$áUFI5›ŠĮŠ#VGS†Vę(qŽ1ōæÄ˙ Ē—ē­ĩ‹Ŧrŗ3ŸáQšXīVōŌI-įÁ0hkvėãš7cąĒēeĢÚÚĒČŲ•‰w>æŽõį4ÜņI“éTdÕŖ7FÚÖ&žEûÛzƟĨY=ĖČĐĒXs@Ë{ŠsU-u(ŽĻhowmuÆG­C6ši ĶÛžđČ9;h}œ)Áī@‘IĒv—öÚĻáehĪF4ųĩ+hæhį‘FX"į ĩ¸Kšj¤ú´6_ibZ3č)–š„W…MÄ:îoņĻ"؞&”Ä$RëÕsŌ¤ÜPąîfĩ!Ļū>ĩx•'sHp 0îi–×P]Æ^WPpqRáqژ EG$Š w ŖŠ5°\6ؤËc8¤’rĨU€r8ŦKXõ h>Æŗå‹y›ąšŅe´—QVķspƒCJ.ā–fŠ9>đЌФØ=ĢM,ĄVI›qEčĩr{¨-ļųō,{ēn5"M…ŧˇV+×ĨeZ,ZĨÅãÜ*ȊūZƒÛ¨$Î ô= 5å2AÅā„Ëĸāp¤ö§nVMҞˇãHA¸škĒMI2ˇđ‘RŒĪe@ÎGÄE…ƁTt‚ø4ätcō°9ô§(2â“pŠė=¸ĻŧąGūą•~Ļ€ŅĮæ‰ āpØéRoöĄYYC)âšdCÂČŧy î.ĄˇMĶHĢXš‡Ŧ]Įa–ÕNâũš§ŧ?ˇm÷ë($îéÅl" L`vĻ1V4TQŒ 7)ę)]ĨM˛Q÷—h7ŦŪQuŪFvŌĄ×ĮHĨeŠÛNFELqŽqŠ0¸Í0ģģ¸Ĩā ̍Ž6†6˜Â3ÃŠŗ¸S7 <(É>”F+tRۂ€7֞ †ÆFiī­R<‰îvUæ™Ŋ&FØęĀ˙tĐøĻgh ‹99r%aÍYĩ…"žgIÚMí’ gm0-KŠ…n ;ļʇgŪųēTąĘ’.äeeõ4…”R4Š9ŖĖŒžŨËģĶ5 íåŊŒAį8ÉĀ´6ū)Š@ ‚ 1Ú+›v ÚˍĘzTvVékj#oUįq  !……EÄ>ĕŊTŐpÄ ôÍ—ÖŖ|8ŠBØfšûAÉĀúĐ0($wĨvîâ€Ņ˛ä2‘@Õfōķė¯hd‘9d]ØĒú,2Ą¸•ãōŌi7,g° f|ėÖ÷—+vŅ–|fã5sL+=ėĶ@1ÅL€Ė+VHc”"+˙ŧ(T ¨   .=G=iOLSW9§u G5ĸJ–ZäDG#>āÍÜVŽŠ}v¨ĘŠ2ŧyû úÕŲŦíîH3ĎGr(’ŌŪH/˜˙ģŠ`bÚ3>Ŋ+yčî#mčGĨ4.˙|ęŖlyŗiĢ,p*:ŒŸŲößh3ˆ—ÍÎwwĸã3íB˙ÂIwˇŨŽ#*]ß$¸™ ÁęEiÃco ­,q#unõúeĩÔĸYįnVÁ j‚3¤ÜcfŨ‡”Ũ gö\pH^qV$°ļšŨ`t1Đf–ÖÎ 4+në@ŠvŅĢ߅\}Ū‚´æxŌ6i˜*c’j{­§’X /,IÎiē“*Ú˛´ 8n6/zCbļ‚ ØėōÉūZ°ĩĸØŊĢųŸ+HÛļg;kF=Ũ[Âņ;ēĮn€â6“æĢØē‚áî˔*⠊šwkä ëšMUąŅ`˛H¯#°ûģ›8Ļ2š‰ÄĘČĄKBKcŋ4–˜ūŪžā¯.›Ū}Ģ|ĻOvíéUîtˆĨŧ7 4ą;}퍌Đzr+jk0ü)ē+¤6W’FŋvV;GĩYŗŌ–ËÍ0Í!2wcœRéúqąYĖŌĢļâcš­ĻZÁ}f×7$’läˇje­ēĮĄÜGÎĐ_5cė f˛›[†[Ë#vĩ&™Út]ŒqæĪã@퀓Âû‹6åF`C`æ ŧē•tģÜįĪ9':izŠŲ5ĸĪŒp>^HĢW:[^é‰o;(™z:ކ€+ĨÔw–˛F#Ž%8e"ļņŠË˛Ķîĸ™æņĨTUņ­LRŲlLØŨœW?ĄÆē“\ĪvžcîÆĩĐûV_öT]ŧö3ųBOžŦš‡O×WžÆ6& ģÂ˙vĄĶėmįŊŧ‰ŲˆŽL¯ÍŌ´­Ŧ>ĖeH^y~ôŒ?ĨAaĻ\ÚŨÉ;Ü+ \ÆhĢ IĢYĒíe*AV=Šn`]6öŌKRȒžĮwŦjtķŪCuo0ŽH†0Ã"œ–3Ip“ŪJŽŅũÅUĀր*ƌž$€ųŒUã-´žVûw%™dŪ˰7^†´ÂåõTģ2ĻÅBãĩ6m>éu6ŧ´–1ŊB˛¸ Õ7ĮįNDJŋęWī=7Ãrŧļ \ļŒ›sĻŪI¨ ¸'D%6°aœ}*M#Mš°Ü˛N¯$íÛہ„Xž(‡}‚Ë“”aߊŲoŧ*–Ģb÷đ„Ū\}[åÉ4­Æ“ ’ĘP¯CFĨh–ÂÚî9$oU'wPjÕæ™=ՌvÂpã,W“Šuö›5äÆĶ*ųd1!z‘@Č.›íZôĶcĘD߃üF´ãĩ†$xĐ+?ŪÅTžŌž×åČ%1\'Ũ‘jhmnc‚E’čŧŦ0¯O€)h $‚ås˙-›Ĩ&‹ Į-äkĢ1ķSéz\ļ`7üÎqˇŋ­>ĪO{Ie>y4î?/zÉŌ´ûy¯õ‘wF¯€šĢzŦ1_ mą¤Ŧį ĢZSYÉpÉpĖĶrrŊ­:×JZĪJĪįdŗch+l+-‰ˇ9iŋ×0ÆęŗâXc‘mw˜Č𧮅"Å}˛Cå6čøûĩsPĶ…õŧhddt!ƒZ†˙O‚â8WËK|§ŊfĪ#&‘ĻÁ¸ĸL@v•ŗ-Œōéíl×;™¸gÛژúTréŠi;n•€ÁGWąŽßNķaQU—ŠĻj‘ŊÂé“îe‘ŲAÅ]m.YÖ8îŽL§;@Æī­K}§Íu-šŽUD‰ƒmÛ@$´[ZĐĀ͙KËg¯ŠŽc ¸ÛwŸ­X°ˇē´’âIURšXÃîÁĻęzSŨOÕŦžTéŅCVėmîÄOöéÖRÜmQ€(3LˇmV.îf31ą°Uy|Ŋ5’Ø‘9üi–úuūžî–RD`vČuZ—XŗŧŧļŽ|ŗĐŗ1Į"—Q‰ŽŦ§‡ŽVB¤t=k;WļYl"rK:¸L“Zˇv—šzBYb“ŨĮGX‹ËŌ‚ųˇ¨%~´ #šĶãĶ~É4YƒĒļ?5&ŖmÚÔ(ȤēšŋŸ–…į™ĻōųEo_Z/ôÁy4s,Ī ‰Āe  ēÜ1ŦVŋ("ûM›Yĩ°-ĮŪaV¯4ĶtŠ¸uX°Aë“ëS6›m#šy1÷ˆë@'Ÿh’ī,žF*ĐÎ}Š"ŽÕ§ u§SGZ\R(Ŗw QE#(*Ačh´TQ#DÛKnNŲíRŌœņH įŠuh‡¸ĻÍHi…Nj@ĩEëRCŊŌæ“ŋ4ŧP:=¨ Ō"í\d‘īKĮZ3@u Rč(íÍ‘LíHzSˆâĐœp4Ŋ¨Å¤ĨéMū*vh=( Đ:SpiGJQÅĨ/jN´ĸ ږŠ ķM$"–c…I§wŦ/Fžž[ģū|SEu Iv·'žõ$×P[íķĨT'ûÆŠiĐZÜivŖËVP÷Ē ä†Yī hd™"ÚŏĘŧP3ZYâ†3ēˆņÕęVeQŧôũįŨÉëTŖ‰fđÚĢŠÜį…P–Æá¸å€ûUˇŧšnÛI.d2įîæ­ˇ#­sÚĨŦ‹ !@˛ ”H÷ރĩ#”į`Ö7†cŗ›{c÷Įn?ŨĀŽwIŗ†x/hÃūųąžÔĐuZPĘßtƒôŦKhJ%Ą_ģģ<õŠ,UcÕĖpĢ"y!¸Üsր#°O'\ŊË )ų›ÖļĐĢ`ƒšÉŽŪbķÎEpx?Jeŋú íÔļayФįiô  ­ËģnáŸL͏9ŽrĘÖkŨ9$VŒI!Üf$îŖ¨*0ˇI§`ŪEÎd F–r8φV?)k'A‘åĩšų˜/šÁ3ÕE3D°¸ˇi%šgÉsōzûšC6éHãŠNũjž§,°ØM$2*’(fŠåŸö2Ū-äĻåˆū>§ĶĨy hr(žO1WvōyĻļhۂO­eéV핆åî™ÕŖĩC5ÜŌĩŌ§īĮî=é ÚÅdëwWŸgh%4JíëRęw3¯Ųíām;mŨũŅŪŗõk6Š{ķäu3(*į<úĶĄ\í´Å'R=)uRf˛5Ëëģ6„Û:#lÁ\ķ@E¸‘`A3o|rŨ*\÷ Š5GUŧkS,q™;UE]¤nĸ°ô]nkËĻļēŒ$F*õŨô‰r ĩ€Í npãL †˜§y6ËFpŪÕZ ˇēÂČmîû­ĪãRéökcn# š,Įš¤“ÃįDS{&{­EedļPųI#2öŨږūâ[h7ÜŲûŖŌĨ…ÚHQäMŒG+é@æ“ĩ&:Ѝ-žÄUß4‡ šÅ\ëF=+>ĪQyî^ŪdE‘WpØŲ ƒVî'†[uĸRÃs}ęÖÅÕ=2úk،’@a_áųŗš¸y  ÷ˇ"ŌÖIʗ3N˛šVąÍˇfõÎ=*ž˛3¤Üö SļŧšĶLˇ‘mƒB¨76î*`jÜΖĐ<˛gj œ ŌÛʗ0,ŠŦ27uĒēŽĸļv‚o)ĨVė)Ķ_,B|˛ŌK÷cZ@]ĸĒY^}¯ĖũÛÄŅļÖVĢYæ˜ –UŠ6‘ÎG5RŲf¸mdHČܲĨâK–ŅÂ6@ íŠĐšģŽĘŨ]ÁbpĒŖš  dņIŠĨg¨}ŽYb14REÔšŠ.ą,z”–‰jĖBåp~õlöĨŦí;RkĮ–)b0ËU&™6¨ĀJÖ茱ģc?JĶÅ-W°ģKëDž>ÛŌŦf I›­dęē•ÍĩėÁCˇŪ?ÅíV%Ŋš;¸0ę ōËSņĒÉy^=Ž×ƒ9#ŠĢcŠ\^4MöR°ēäɞõ-īÚnŽ#0˜üŽ2zšŊKÁéYRjŌ2Ë%´dPœ3nĮאë*Ö2]ÍGûŋíRW;ēRįZÆúŲ~Ö-â1Ÿ›fī›mJúĖcMûdHÎŊЁ§Nk]{ˆ)žÉ'’øËöĄw¨Ei3Ī'ƒĢˇÔķGũ¨ŅJ‰w…d8VŨ‘šeū°ļW‘Û´,ÁÆw ÕíF+/#LЛi’@2ĒW–ŠôũY/e–&‰á–>ĒÔĨŠ1T$ÔÕfxĸ‰Ĩhūų^‹QŨęÁ4ĪĩÛĄ“ÛĶë@|Râŗ4íMî­ŧÉ-ŨW=>÷Ō̧‰"‘ŦizPÍė˛GĪĩĨ8QŠĩYw7ļßmˇ†HKĘüĄ+ŌĻŧÔRÖD‡kI3ũÔ^´tŒĶJ-TƒPDąI ‹–ŨŌ ZŠI!Sˆ“FįĄ  "0ŧq@‘o4ōHZUķGĖĒØ ZƒK@ĘPéąÁdÖĢ$…Œ–ä céq=˜ŗ/'”ŋíUėJV€3î´¨îD;åąˇŋ­_åTf—éA C%VxŲQļ15fYirYĮ:­Éo7œíč}kTķHsÅ1×HaeöO´nVÛŌŦ&Ÿ2Ū%Áš$íÚãoŪĢ›“ÎŲ¸nâĻĻsiō‹Ų.`ŸaĘˑÅšZBŌŧŽŌÉ/ŪcZ4 cCĸÍjû`Ŋt€ļvb§ēĶe–ō+˜gØčĨpÃ{7™Z`ņģQˇœÔz}Ŋõ´¯НrŪfîk[ņĒö×q^ <†o‘ļļF9  ļöĒēŦŸgĶϐ8F ō“ëWëUīėcÔ-Œ’ķōĐ žŪÁg›OW+ķnŨÎ=qZW~fĄ¤ĸēe{Œ OėFą­íÆÎŒĨŗ‘Z0Dą' ƒ•´čϊÍ"œ*˛ŽĐTį5—öī˛<~Jy‹.đėܰÍt=Šõ¤#:îŌkģx$Šæ#¸}}*Ü:•ÃÛ´GûŠ7=nâ”{Š`bëwwļÍn-įæÂæĩĐ1PXōGJvŪiÊc)ėkZˇŧ¸šÜAõ‰ÃîÜá[§ōĨâ€)Í,ąØŧĄ˜¨[iõĒúÕÍõ‘’åvļî8ÆEižŊŠÛĀÅ c5[QēV­3!|tP;ÕŗIŒö kDšY/ÚY"ÜN~cˇ ‚´g•ė.ĨšHŪHå#nÅÉZŌÆ:šB2Fi—aæŨę/xchĄŲąĮ&ĩĮ` Z@fk“X"KdyųÎzU¸$YíŌeČVPjžŖa-ûĸ4û-˙‰ûÕycEE\*Œ `4ĮŸâë\öš [ę–÷’Ą–Ü Ŧ1œWKôϐ¤a€#Ū€3l&°™žKHöí_™‚b˛īVIeI<Ÿŗ¯ Ž[˙­]2ĸĒá ė(Ø }Õ  ŊoĩC¸ČĖéō•Æ­@Ļ‘US; ú vxâ€3uŲ=:UgÃ8ZĪģx˙°ÝÛB펁•[¨Qąč?*ÂÕåCŧÁ† ōúĶīūĪqŦo1…ļīŽ@x˛đÆãk"=E#[Ã"…xŅ”thĸM5ÍĄiŽâ¨īZŌ*IëJŠą€¨¸Qč1Jh‡â"Š ÜŦm?TŊh>ˍŽSĖŦ2Ūĩ$†)#V=ˇ.i^Ync1†,BŒ*q],VņG‰UzZkXÛTō#Úŧļ‹Œ/dlƒČĻ…—ĖS¸m7  v™ FŠ]~ÂĒĖ7yƒŠŊ-ÂÅĻ´ņ XøŊM=ĩˉ'…]€ÆXT‰ qEąUē Ė—I$ú|Ī2‘ģ%UpŦëØWŗw˙VŗeŽ:VĪŲáU å&Ū¸ÛB…`C(#Ū‹ĢËįél-Õ¤ķ1‚ĸ Ôĸ›Ęŗģ‰ŧŸŧŊņ[ŠĒ=ŠqHzîoíU†ÚĨŲ¸wR1D°ëK#G /—Ÿ”ätރn;QŠ.D"îûØį´îôf“ФķEč‚ކ–’9÷ĸŽôP1ihĸ€ (ëFi o­Fzԇše!–zŠ;PN h@bƒ)OĐ“KIí@ tĸ@!ųŊ¨Æ(Å!ö§T^hķ aŗëŠ@>—ĩSëGōŖ=Š1š“׊NiŨ;ŌP0§SqNí@„=8 ~´™öĨčy b†ãŠNÔ.9 zPz\ņ@ P ëYšô—PŲ4öĶö}áŽĩ§šÍ×iŦžŪO4cp8ÛL ÖŧÔL†ûÎM€ Ą_ŊøÕëũIĸ¸ˇˇFØŌŽâûsU.-îN‡Ēۓ pÝŠAp˛Z_A‘â\<]čkLŧž[Šĸ—t‘Ļ HSnkNŗôÛĢ›ī=ą‚1÷wM_úR—{};jQØZF+Ŋä#8Ôņ5͌W2^ȲDƒ1°&ĢęVĶÛj‘ęŅ™]’ ëV.Qõ=6hĖ-áōīęM1•aŧÕg´ûb|ŋŧ#Į$}jKVS¤­í¤jßŪ Ú ˛ÔūÉaöYā—íŽĐĒŋzŖ’ m|4Ņ21š_áQœf˜ =üđÜÚŨŧ+ŽŪŧļjüwķ­úÚÜĀJ3+fŗĩ ¯oĻá[peãiéŪŽß2^Ã˛7gŽ™¤o5;Øu5´†Ũ2å2Ũjk NYndļŧƒÉ™îA_RtˇÖŦįebģXŖ8ĸ0×ÚĪÚ"Ɏ2ģņÄĶvÖ ‰æ‰c0ÆHųŸælz “RÕ>Į`—IđÅxĪcYZdÖļi%ĨôCÎG;~LîĢ^#•”P}æ*Bú @\ĩž–e‘äĩxÕFåĪņ ,uϞ{ĸžJ9Īĩ>Úę°Y÷|y'ĩd[žđõĖPdÜ͏Į4€´uiU<˙˛šˇë¸qëŠÕļž;ˆRXÛr¸â˛aÔ­˛7;tM|ãŠŧ;ih%bÁOaB@Í^ô¸ã­bɯĩoąÉ UŨ´?ŊlŸjb cBîB¨ęMg.ąlčΉ#Do˜å§kbI4Ģ…īméUô;‹vŌĄPČ6Œ2“ĐĐ˝B+wXĀi%ē‰×[_Į<­+G(įËqƒYaÖ×IJ=ÃaeŒØôúT—n&×mŨ˛ņ‚d#Ō€,nZ æˆīŨ_—¯Ōœ5ģ3˜ŽÍÎ …äUkH“ū ļP2yŖGLú‹av™H fŦ7Q\@ŗÆŲŒķšĢũˇc°š›6Ū•[ÃĖŗŸwŨķPčÄÖ7Ryc-#ō}(¤ú­”a p˙v§¸ģ‚Ö!,ÎsXļŅ#xmÚD]ÅXįcRMū>gŪō×ķ f‹Ū[ĮĖōĒÆßu#ŪÛŖF¯*“îŒõŦCË_ *¸äJVĩŽSĻ’ŊYPœķŠŨKˆ$rŠ*3 52âæ ųŌ*gĻMfÉiŽąfmã ¸6íŋJŽ‹%Æģs™FÔ ģ°(ŧ˛ÆŅųÔ§÷ŗÅ3íVûŧčöž‡wZ­ ‚ÆX]üÅmÄāc­eÛi–Īĸo™C:Še ô ƒÍ!wŽONzԕÍ^YEŠ—9>z!ķ[öĖZŪ6=J‚hZȑÚ˙V’Đŗa\ļ͌šÕ$ŽkG‹ĘÕõŸå4­oÚ@#ŪÄîŲ5+gÚšåjķ]HUZ4c+1\{ņKt×vZ}ĩ¤˛üōÉ´°?Ãõ  ąųץį[Ļ Bĸãĩ6•x×֛ä:ąVÅGũ› ´Ry "o\7SëT|1­7™&Kˇ„Ö5ģIg§ vŖģĩ7M´‚ëNķî~yĨË3ČúP#{øsIōú×?e#\é7PË+7’Ä+ŠäŠgØÃčĢ9¸•]˛üüPIšMĀô ÖĨq;iöKs1]Üã´ĐÃ8ÍckŸiûU¯Ųįh÷ļĶįU-VęĪ_Ky'’TuÉŨ@XéÔ0RÃqč=iĮĨsúģ\kĐ ™ãũŲ?)éRßM$SYØ#ģofÎ ī@XÛqYļËuÛüĨmöđ įšÍĩÉ­Ëš‘ĮŸ§Ōėo]Ü-­´“?D\Õ 8îî ļš`¯ķ4XãšŅč›|âÛq¸‘÷ę[‹Ķ§hĐČŖ-ĩTS_>ô™'ĨcĮ%×Ú 1ŦėŒx\|¸öĻEq.ĨŠÜ@ŗbiŨŠ)h‚“õ§v¤€”Ŗ­įúQ‘@(īE'͞Ԛæ›ßšp÷Ē÷—YEæÎø^ŸS@7ŠHīYĮXEØĶÛË r•ØqøúU››ø-LK3ãÍ8SŠ–i#ˇ|ΨŖģr:ČĄŖ`ĘzYšÅĩî•tą•›Ëûf‘k´ : 6ƒëLfĢ0Q—8š4î är*ޤöŸd+zāDüuĸ{Ëm:ÉÛ`Í!xĮN”TpÜÁ<^dR+(ęAéOYcuܒ+/Žh~qNÆNJĶIųÁŠ>´Īj— ēŨĢåŲC°CŽky9\ô§í”cŠ`BņĻõg Įr)ėˆĖ2 ũE$Ûd—zŠ#Š#;v̜ļ?:@8… í}1DQG|´UõÚ1N<äPŨŠ`Dm-ÚO0›˙Ŋ´T¸Ā§ Žh*ōÆkŨB&‘U-á;yhŋLôüsJ@¤RãËÍW].ĪĖũCõČĢmšĪŌî.$šģ†áÕüĻp1L W6v÷ˆx÷Ō’ŪÆŪ×>DJ„õ#ŠĢ9”€Ēļëpķˆņ#õlõĸ>RDvųŸ{­ZÆNMZ ē|ņ˜" ‘Č~l5$zTöī - Gûß5h° 0iFiIt¨Ô[/˜"Îv†ŠžŌ),ÍĢå•ÛÖŦ~4s@ÍáØ/)᜝lŋJŗ.—ĻܙdGŨÁ­L˛ŖÁlqš­-›wÁ™ķGJ¯ĨGqrŗ‰$ŠL`˛ĩ&&Ą**29\-\™°3ŒãŌ€+ĨŽÍ­ãv]߯NMBēa]4Ų¤įÛyÅZ˛ē[¸L‹Ļ aƒV¤3nô׸ĶÖŅ&Ú I\įrh E†*0HŠŠqL]ŽĀ cŒÖn›cuo{=ÄÆ?ß}å^ÕĻWIčjM´…>yÔ­§N¨’ļ]HéVī4ĩŧŗH¤sæ'!˙Úõ̉ōšëScր2-4ËĨ}×wf` Ē¨iZeƟæ!^#’̎ŊktŖĩgZiĪÚ|÷yį'¨e^Zn‚Ötō\ņ¸rĩĐö¨üĨ߸÷ .g 1āĶM­Ģ…-÷†sPIĻŨe­’Kn…ŊĢt/ ŽCw  št—šĶ"ˇyvË6¸éSXZ߯û¯.D€EiŠC‘@6ö+ĒŊã2á×iSÔSėŦ'ļēēÍÎcZ€sš1šÉĶ´ųmV™ÕüÖÜĀzĶuûYfŗĖSųQĮķ7=kUãŠęPÚũœ5áo)NHâ€áųe›K‰ĻÎî@'¸­)–ū[[Ą‡ũ^ߗ• ÷  ŨWN7ĢÆû&‰ˇ+UŽčĪeĶEū°—ž+oéYˇēl÷W°Î'TĒí Õ,nne‚{YU$ˆôn•Z;;÷Õ#¸¸’"ąŽQ[ƒ8ÁëQãįb(ûįČē…g_*VÜ2ŧÖĩŒSÃj‘Ü:ŧƒēŒ ˛9P_;N95‡aiyi4Ķ,~]Ës†ûĩēyĒŅOŅ–(ÛsFØoc@’é7v×RM§ÎąŦ§,´āŠH­Õ$•Ĩ~ėjĀũĸ~´ŲAQœĐ„ôĨmw=õŦ"˜ámĮ-։ Ŋ}n+nžJ ĨˇuĩŽ8ëO  =J ĨÕ!ēļdJ•ŨŠ]JÂâãė÷00Žâ.pzVàeô4ŪŖ­SŗKâîŪ>œ* ΎßPÉģ'—Ÿ3v­ūƒ"˜‹Æėõ  Ũv9į˛0ÛÄ]œúôĻ]Xɤ, ž\Ē=ÅkãڝŠËĶ_Qųbē‚4DÜ$ÕIŦī4ũFkģ4Yc”|éžsZ×wQYÅæĘ[o°ÍKąŨB˛Äw#w  ‹‹[­CNu”,21W9Ā÷¤ŠĘ˙í6÷ĸc(ĢgĘįŽ)vü¸ĖGMŧēŋ†hš0‘ŒÔ×}Üڜ!Ŗ jÕōČĮĖiāS+R°š’ō ĢFŒ<@Œ=_„H"_8Š||ÛzTÔ @FęYXd‚+*x|Č ģ)…+’*ØÔƒjFČÄĘØÎãĶm:šC*ŲØ4ķi$›×d pj’hr%ŗ[›Ų ]—Š ĖsM$Kģt{ŠŸŊdÍĸ¤Í4ōf5Úpq¸TMáĢ6”žé˙t+lŠNÔ\‰V4TQ€ŖPoJSŌŽôQIۊ@-%-%ņH){š !‰šZJZ(=(Ŗĩ!4Ã֟ž)”€˛izR÷¤Ģ$3KšoĨīLīGZ>”P :P:Ræ4™ĨŖQژO­Ši?OƃúQÅüRĮ4QüčīL–“Ĩ 8 9ÁíJŧ´ƒĨ*úš\úQ¤#r‘@ KßĨ13ŒzS¨ī\˙ŠŖ“ʡ•A1#åĀŽƒŊ#¨`U€ ö4ĀÃÕo-ŽtFØęÆP(뚋UVDŗũõd5ޚm¤Oæ%ŧjŪĄj;í6Úų•§ Ûx1Å_F‹ĻÜÕW1žœvǰÃŪO5WNsŽœVŠÛDļŋgÁ1íۂsTãŅm‘<°ĶsŸ,ČvĐ ŋ{áXŪq– 0—_[H€í ˜ÍiÜØAun°ČŸģ_ēĒqM›OŠ{ĩ}Û6ÜŠAsel–Фˆc •xßíXvöbīRēˇVh;ļ0ûŖÚˇn4•¸´XyIFÜŽO Õyô™ŌU¸–9G ųåčnô(?{(0Æŧ7ĩKe{ôFH™Xfĸ–Ō˛0IģĘ ÉŦĪ BņÉtáX@Íû˛Ã­tU•â‰a˛D‰Š\)aØVĨEwj—–íßuŊ;P# XĶ ļĶã–-ÂDeŗ÷ŗSęęPĶd dÚy¨õky­tôYnLą‰((3×Ö´5-?ûB(JHRH›rļ;ĶZ÷÷~ ądÜĸMۆx5[Ws ÜL×LĶ)5Œžõe´ģé.íî&ŧVhŋØÅ6}*åãē‰'AÍŋæ^sH u;ÉíėíY‘\2@3´U-Ĩ+#5ĘÜÂOîÛŋãLōī’ŪBNĘ‘:IŖŲIgÍ/Ęe“pAŅEifšÛˆ'm{ėÆō_.HËpßwÚēÁŦ[֑|Cna šĄ#æī@‰,Ėú~¤,ä™Ļ†T.…úŠŠlxÕ5 zĄĮáN‚Ōi/åÖĐĘģQäLŗĩšKûŠåĢ(Ú}(^úæęßtōN¨ŪbĒDŧägŊX×..-ôƚŲÂ0#'ÚŗÛOŋ[I"ōcy<ÍâRܡ5wXŽæãIōŖ€´Ę§îĐyo5x!ē•â1ļĐcĮ'>õkQÔ^+˜-aĘ´Ŗs0]ØJŠŠ¤ōiö°Ĩ´Ĩ†ŌĀvÅOip××Öąî’!†Œõ"˜Ų\Ü=ÄаvW)#ĻŪk?I7ōjWDΧkí}èö­k)¯.wĩŸz(ÎIĒZzKk¨\,É‰d,$ĮŠúåõēÍ:*¤P‘€Ã—ĸÆūúęh›ĘC ›Œlü{ÕMJ;ëéįˇō¨˙TŲŠ›LēŋũÍĢY”đō7L{Sčîhn”…sL¸—Ɂä ļŅŅFM9íí†ÚįėĻ%Û3dŋ9­ mBK/í>VéT¨ã$UMä‚ĘäÉ —.ΚŖJvˇŅ夈Ę[å+ëԁššUÛ^ŲŦî Ā̇šĖđû/öli‚s¸ŒsZgցu‹ŠėėXsÔ˙ŊC¤^^Mnō%Xönîû߅IŽŠm&pĄ›# ĒöĶGqŖ•­e.3Ä`eiä¤SßíÛaq$dļõúUĢB+hŖyíEîMbE)—æLyXühÖņ̧Ë'ú€Ø>€ĶV;ČÚe‡kĢ2î—ĩ@úŤr”.ß+m,•ëVüØö–Ü­…Ī•Ė^\,ÚT’[ŦpÂōŒŽ~cĪZ@uƒcG9¨­™ZÚÁ€ČŠAæ€Ö¨ÍĒŲÆĖŦėÛ~ņU$/ÔÕ×åO=ē×9Ĩų–đŪZų>y.pËČ9õ  ¨5 kˆ¤xäܨ>cŠĒšÅ„ŠĨgĀŨÆ§Ķ­žË`¸€æŗ´ oļ!DlLzŠÔēÔ-íJĢą,FB¨ÉÅKÔ3[‰‘ÁŒŒîŦ{›ˆäž¸HcE–(đŌ9ĻY3Ãąå˜Ŗp(}CS…ė&)RĄöüĩgÃã=ŋÃUcŧļmĒ:°āŠ<ƒŠ—OģŠ×@ŠsĘĮ8 f­ÚĒiš‚jVŪ|jSœjŲäP#.˙\ļąœE fnû†´!•f‰$˛Ŧ2 ck—Š†ŲŒbY~ķ0ûŖÖ¯éoY"[>øãs@tŖŸÃH ‚éâPțØÃĀrÆúInfˇž-ãų‡9ČĒæ3â…ųūP›O×Ō¤ļ¸ŧC6ÖČōöū9Ļ2õĨ𸸚ŒDQĄ89ū*Š­ypn;QæDØÚ[–7P留6īîöėE¤\Gį_Ęۂģî^ĸ€.ĻŦ?˛ÚîHö˛åJûÔ^~ĒĐÅÛlō*,čX˙îhĐv¤īQGwo+˜ã™ĮU ÍMšMŧsFTíP>”îÕV(o%•§gFGŲhË '™ä¨“ûÅyĸk[yÛ÷Ņ+ŸqN ;=3R)㚀ØÛ´Ģ)‰|ÅčÔų­ĸq*+FŦvũ͚mÄRHŠ#”ÆÁ'Ŋ)}ž!”"_/û¸âZÁåų~Zėūî*oƌS‰ K–¨Ą?ēČm-íōa‰žģF*féQ…ČûÜĐœūíž]ĮwÖŗ4Ŋ=áŧžōuXÚ^kŅEj…ĀųĒ%aŠ8¤nAĪ Ö,ãTŧYei#^jŪ šabąļI|Ć5P´ãgnŌ™.{•ëQÛÃrˇS<ŗ‰žâcîÔé,nˍá™x v ŽŪ(Wlh¨ž‚Ą}:Õ÷n‚<ˇSļŦCķŌš„ZÂ-ü-|Ŧcn8¤ˇ˛ļļĪ‘ĻzāUôŖAt{mÂŨœæŽHr0yëOŗĶíė•–ĀcĪ5OSēēĩž´ōœå}Œ˜­jĻÚM“;9ˇMÍ׊”Y@ļæŨbQ ŠķŠ3@Û[EkŽŖ°Š2fnԌíäĐYl­d“Ė’ŲĪrĩbHĶj*¨ôĒËË^+¤Ē!æLuĢ`đ3@=ip1MvURÎĀ(īLŠTš!$.OB)žL[ˇykžšÅ"*‚HP? ‘zsH&€ˆ§;T~Ą@ūE0ÜEæų^bīūîy cö€D&‡ÍōüÄķ?ģģšYįŠŨ Lę‹ęÆšŌöĶøŽŨāe äą_ZéŠZh9éNūtųĸõĨīH4wĨ¤=hĸŽôŨËHc¨éEIŪ—ĩÆ‘Í0žjVâŖ¤2Î(Į4Ŋ¨ĀīZˆzŌRņK@9Ĩ'Š>”uë@ Î)hĸ€hÅčį4~4Š?*ZJ(ÉŖĩúĐÜJ(<jN´ĻŽ‚Š1Eڀ f€ \ŌQ@ IüT¸æŒPtŦ­K—QŠ?!Õ^3œ1āÖ¯z¯}x–Pų˛$Žŋė.h6>ũ/ãēyĄÉP’ŊŊŠ—V—ōjņŨE{"F_ī ÕĩēŽōÕ'!\gšŠmJÖSpŌf=ÛrŖ<͎ ÷V"(bŪĆ?61ŠR˛žúÎŪH×eÄ$0V5§ éqn’Ä~GSûqEÄP°šž™ŋŌmD*]Ų$Õ`ŗÚëWųIÁ@eíZį8âœ8€ÉšķNąjÂ1ĸÍZŖ¨B× åÛIā“å‘ĘWԚčŠz­!vŲb 0ĀīYZ^ą$ú“Û\Áåŗ §PkeÁŦû]6A~÷ˇn¯1T(á1™=šŦŸ3ļšņGHŌqōŒâĩ(Ī€įĩ&y´[TXĨŨ•Č xĮ­;UŽ(ŪÁ‚o0g€=ëtSˆĪ\P3ŸÖ¤ŒjÚ~Xüķz ŗ4Č|EnĒ㈙N=kX¨'ÔQåŽüí\ũ)‡m2iúÍÚŨ‹9܎zŲé mę§Į˛CÃlˆŽ?Ú§ĸ*.ÕPŖĐP!ŨŗXÖ [Qų¸Ml0ČÅVƒNļˇvxĸ ÍÃõ  í;cë7ÛXÁHÁ§čĢK¨÷Ë;g=ĢJH!mŅˆŪĒ´ÆĶmFĀģR8ÍPŌD÷ŌGÄ 'Ëéîj ˜ČŧO”ūø=ĢhÛÄ`0ė^1´qUí´ÛKI|Č!Ũ2 gkLv׊+.ér~íI¤Akö;Id<@MĮîŸjŗ.i-Û\:33}ā[ƒImĸŲÛĪæĮn āPéYQŨļnj’{U}=lŲK-…XåŠzÔˇ“y6ÎÆ&—¸Ŗ9ŦũĘKUšYWËķ[+÷ElvŽo uâƒĐų#\ƧĨtuNķNŠíÖF,’'Ũt84ËÛHVÎé’5ã;ąßŠËŌãAáyrģ†Ö<úÖÔ6ž\N’K$Ûø%ĪjËQėsŦgø3ÅSŧ„?†-Éz۟­;UĶ ‡ė- ynōcžĩ¨ú:IaŠ–MąÛŠotÆēōw\0ōˆ#åiŒĄukžĩ§´ #ߐĀwއ™sĨŊÍä7&凔~U +J†å “Īƒ`>ÄڛwtÜrzVķ‚TíûŨgYéŌÃ%ÃO*Ę'ûÃn(géúhž˛[™[|’ä’XüŋJ!ßh÷6æWķ bŗÉÅZ‡MŧĩY!ĩ¸QũŨÔúUÍ;OKsąvc–cüTĀÆ‡e֑oo œ°Nđ{ÕûøZ9l@™Æ$ ßz™gĸĩļ§%Æ˙Ũg(ŖŪ­ęsÜOnčęąÄۈ#’iŸĒą]@}ŠĨ[R˜VŒœ+{ÖĻ•gųÆn8Z¯ugu/œ#•6KÆsˇéW,íūËkŗ°c&€dŊĶYéŌĪË(âŗ,´ás§ Ĩž_>EßŋyâļîmŌęŪH$+ŒŇNÕ-`kXe‰ĸ<+ą9Q@ļ¸}CAœK+ #ÜĨĮSŠMŲ§ŗ†wžFmģqž*Ęé˛ÛiMkhĘdoŧĪß=iÚUÍēĮ3ĄÚ8 C™mfˇ:ėnōŦ>ëcĩ]Ķä–ÛS–ÂIHÂoFcČĨ[+Û]B{ˆ<§Ią•cŒšŌÆXį’îvV¸qˇĸŠŲ”˛‰ī’Y^M˛`z U=OũũÄž|™IˆĀnÖ¯é֗v÷7NҞĖÛ°Ŋ%…Ũ­Ė˜Úrû‡Ūæ‚JZŦŗD×2Iuŗj)šĪŊki’É6’œģ.IŦ†Ņīˇ^ ōŠ\CąäVļ• Ä6j—AC'/Ĩ0.n\í-ĪĨ;ņŽ[ÄōèÃu įĖv ąŠéãûŖ=qHã5‹wyqqĢ}‚ÚAĒîy1“[&˛nėfT[û@ŽÅvÉ8Čö Â×VÚ˛[K9š'Œ°,9ÍWąSˆîc Û {‚į"Ŧ¤¯.ĩ›”Â#ÔƒŪŖšĶī?ĩ Ũ”ąŽWkĻ1ölëĒ_F˛1 ĒWqČž÷2[]Ú˙Ĩ™Ž$—l›[+Ў—}į^ĨCįĮˇrņÍUm+Sōmv¤­›åįī{šę{SîœRAæy)įmķ1ķméNÅ!”ÂúëU’×í$ģēU¸īŽ´šäļŊo9væ6Į4—Ņ‘âXĖQīaJîÅ_ŠÎk‹×ššPmډœĶŸwu}o\ŊÂÆÁĀHF>aZš´“.•$ąIåČĢģ"ą[LÔ<‰chUÛĖÜ›“Z—ëw6’cûĻ•v• ÷išPžš(nf¸>æßÖŠØ­ôÚĩæ.ö”`åČ#Úĩ4Už;ḋËh×o\æŠÛŦö:ŊÖëwxîuč(iõk÷ĩFe.Y•wM?N¸–äʗÃËo•Šãpǎv÷VZĢ^ÛBgITPyĢļ­y2ŗÍ ÂsōŽrh܌é 4kš€á}ko¯mįĩûLˆZwÚbî~5§Š,īa*Ú˙­+ō×?äŨĒZKũžûāŸ'–Ļ$_ב¤ēĶŅĄizŽÔ—ŋiŌ^9ÖæIĄ,D“š›UˇšŸėŗÛF ļâŦiŗ[Ūj\B-āFÜÃvK@Í`w(=d_Ëv’Ėí8ļˇr„`—5ąĒŽmėīŨę5¸˜JɸQíHEåžâīDŲ!ŒļáU´XŽî­āš{ļÚ¤žŖŪ¤ļ[ôŅŋŲ”HŖb‚ŨŊiú–5ŊÔAUyV œĐ2ô”ņĪ9š3í§ ¨QįÔ/ŽÔĮæ›jƒ!Pžõn;[ĶŦ›š1ԘœTwUä7Īs§Ląųŋ}Z€qË IÛüč¤å[¯ĨCĻ[Ĩ–“öÔ-æyE°[Ę´$´–M5íĨ—|ޤÅAaetļMkvŅų{6.δ›n——vŠpĢ3Híģx—ō­Ë8‹ũ)žqXöúvąfŋf‚XüÜ1ęoFĨWåģš ;‰Ém€/ŪôŽQÄ*ļí˜å§¸aŒķŌē›Ģquo$$ãz‘šÃ_ ËäŪņžVĘĐP€šüŦēõ¤SŨ…,čMAucÄ0EnæĮĩĄuŖĨŨŦ1É#y‘ ZĒž_4;]ʝmCƒ°Š=éˆģTtâj@BrqE/áI@õ(¤0œRcžE—Ū€ ))h1šZv¤1ĸ#šõĻķéH TRRô­ņ×ĩ( QĮZ3Eĸ€ôŖ9Ĩī@¤0QG^Ôč㭖€ R3K@ AĸŠ;QÍ÷ ô –’—4”QŒŠ;ĐEj;Ņß.yÍ(ǚŋ]Ī8ũŲĢ|Õ=bXĸĶgķHÚT€ ęiSE‘aĐb‘ųURNŊ2iãģĐŽfFĘÛWĻh1aí.”x'ĨWļu›  øs@Ë6:¤VÚ}ēM¨Bų…>Zŋu¨ÛZŦ~s%û¤ Õ?>ÜøxouÚaÚ9īŠĨ~…4ŸīLƒ@Vú…ĩט!“w•÷Ĩ,…ĩĖ›"3c?ZƒP’ÚĶO–Gˆ`‚ņēŗ­Ų›ZĩÜŠ ESœ Ķ}VŌ+–ˇyBHŊsJē­™‰Ĩ[˜Ę/ÖuͤRx–ę4DG\SŦí!ūÛŧ_)6"ŽdŅ`5b¸†å8u=ÅX…a葈ĨžEáDä;Vā÷ EiĩHfōĨN¸'Ĩ> ˆnh%WėœÖ.Ąi xŽ×tJË"’Ā÷"§Š­5å[uÚ˛DK*ôÍ4>ÛjÔĪŲ÷žn•+É‹{Hĸϰ5„KĢ9íG”ī&ÆTā0úSíÕu VáŽ>e„íTn‚‹ Ü  ņJŦ­Ŧ:āÖ°ŗôČáļ,¨ōyč*{k9ŖģŠTXĸ…T†ÄîúĐ#Uąˇ–ÆkD’_ļ_@ōŧĢ€)sMŗ„jגܖ*åĸį{Ņ Â°]_ÄŦX,€jԅnVâf–EhŽ<ĩ‘S$ˆå•]Y—īzVnšō››ø¤•RO”údVv‹cæ]]Hf™LsvoŊõ –Š(€€(¨ŽÄ­o ‚Kˇåc@÷ĸš:mZîÎg[•'<°É>Õa/ĩ 4´žƒgßL}ėP˙Ŋ'­fjˇŲ,"™S/.JK;ųdģXŽé#eÉo,ŽĶ@¸¨įvŠuBėŖ!GSYW—÷ęëj‚2’ĄōķëīR]^_Xém4ąĮ$Ē~lõ  (\Éģ)Fa’§ĩQžÔ^ÖōLŖ•ļ‡ĪzmÖ¤đÃlą¨{‹ŒmĢ?SkÔÔ,>Ōch˜črâč@Ņ)Gc#mųFqSöĒ3ßIíŊ¸ˆ‘/ņįĨAq<ڇØėļAēGaԐŊŠ0;ÖuŊôņߋ;Ā›™w#¯ņUíÉôÖÆŅË'ŨUęÔĀÚĸŠiÚĸß ĸ’#†Fę*ŋöė}as,Éīô E닸mv™ŸnãīRÍ*Å H˙uFMgkā0Ÿö—ŸÆŦ^Ū-˜•ŅxQ@!•g‰dLá†FF)ĮõĒWzŠZÁØZI~äkŪĄmR[Y#ÖūRHpŽ­¸ī@ÍN{ҊŖ>­ŊС>âģĮĻŗŧ[ØL‘ĢĻnbj­ŨōÛ2 F’Fä"uÅX-Íbé÷jÖo'!‚DĄ#š^ĶõĩfEe*vÃrŠZßAqīo~ėÃn 5CK×&ŧ‘­_a}Ą—ĸũi¸)hŖëHûĐ Ķ&t†6’F ‹ËH ŧOyįŗ"ŽÕĒČÛ*īōĻōs&Î XŧÕ"ĩĩŽāĢŧrc}éxæ“ŊTģÔ#ŗXŪDr˛2;SîoĄļuWÉv Ŗ'€Ŧ–—?Ú˙j,Ffæ´7cŊ‰ŦūÕ^gMžž´tđ=¨RĘājŦ÷6ˇŒæUōXm-ģ5­Ĩ‚´rnC  tękČ.ƒy+㎠O@'ĩ-€ RwĶHQԁA ļĨŠCÅši*1N¤ÛšP) C֘§æ5!¨×ībIKې÷¤0ã )´ĀSH´ãķRb OzmÔbÔRt QÅ ;ĐhÅ'zQ@ãAéHi{R‡¯ĩFzĶÍ0Žin’Š;qZ/փGjLúP!iiNhÍ Ō…¤ëJ 0Š);ĐŅI֊ĨŖ­˜÷ĨíE! ¤=h  3ųRŌvĨ˜ĸŠZJ:QML俀ž(ã=iiš ĻKrŽŲQ]}fŪƒô ÖŒÄ›UÛÁĻ%•°…âĸŖũå­Z=:RP´{X2@š3Î)×zeĩãĢÜ!}Ŋ>cŠš×Š\P2Ŗéđ5‘ĩ*LGąnjô;8Ū9X<}ãÍiņŠCžÔ\E_ėøīíGq—7JXŦ!†YeBáåáŽę˟Yģˇŧ[g˛ũãũßŪuj=Bč\CöECá÷b˜É­´øŦŨÚ&rd9m͞jđéP\H"yhëSŽW4ÁÕãķuģÜɐß2žkJ 8╿ÜĪ# ncQOĨ[Mt.ĖķpĮŠMVų둇8NMBš:Į|oÄģØüÌ’ķHŽîA*ČņĘŊM^ę=ę6ģÉb7mįnTpŋZC*.•™Ōâîá§xĮĘĀÚTÍx×v—n ŒƒZō—ŠUč)ˆŖ.š×6 ow.önwãĄ¨ė4ëģyĪŧic_ē¸ëõ­J("ãMš[ĮšąœFdûęÃ#ëIacye=IJIŦŋ7NI­Ž”ÖųTšĖĶmîĸššYü˛ŗĮičiēuå•ÜÜÄÖōČ\“÷ĢF ųĪOjœ @'c\õ„÷öÚŲļŧ}é.XsœWBzÕH4čaŧ{ŦģĘ˙ÄĮ ôĀģL”•ŠŽæĮÖŪ—<Đ9¤ÃwoguÛē;ŗ2ƒīRŦ3ÁĄ}˜ÄÆVĘíõ´čwĒ´š…ŦsĨž5îįš@PÔtéî4˜gƒ ­X°ŊģžEŽk&„ķ3z֕-09ëë‡mv RÚgHrŦBUŨrRtš#wiF…­LQé@đĘ ąŧˇ‰™­ĀĘcœT7÷ßk¸ą•mįUŽO›rWMÆ*WĨ6ūe:•žF%¸é‘P˞iÚģŨųlö퀍ÉS[GĨ)Zæ,N×úĸ\ŠÁŦÓP[]Dū!¸}Ãh˙:č…ĻSŸ‘yö .`X]ŋÛ5)ĸ é÷ŗëTĻžvpŧĶáŧᘑxQšę#"ʤ* õĀĨK;tB‚žŖm1õ{Ũúq•ĸ.ģ=ÅZÖįEŅßæ‘FŅëV.të{ĸždaÕz‚ŦĮhЁÔ.{P# Ußšuō)xbáņčhÖ/"ÔR+K3įHî§+üĐRģp1éMŠŪ(ŋÕÆŠūčÅRdMcMWe3¸ŸĨlîįåÆ C6›i<ĻI`GsÜÔĄBíDL*ņ@v9Ŧ.á[XÔpë´°Į=kQ,āËĨŧaSļ€3ô7ŪچÖ÷äÔ^¸RhÔJĶ6õ­Čmâ‡>Tj™ë´bšļ–é/š!A'÷ļķ@ŗjĖĶ5Č5 ä‰Wc/@ßÄ+Pô5g§9Õ$ŧx’ ĩzŸs@šŨĘÖO‰„¤°@NnĮĨk{P̏ÃØĐ<īž+iAZ‹WPžˇ0RŸŽXŲÛéĶM>ÖYD —  ßėaš‡ņnĒ7”ē5ÎXumŲ5Ŋo§Û[¤‰aVOŧ=iŠckhŌToŧ¸ëL %*žę9SüëgF#û*Ûp‚Ļ}>Õ ōZōķ¸âĨ†Ū;xÄp¨E…IYšúŖi7ą÷x­LT–‘^[˜Ļ]ĘiĪÍ˙Â' ĢĪãV5…X4Û=Ģ–YĢËĻZqmå1Nv–5,ö0Lb2!&/ģĪJ`SÔ§‡Īļ‰âķf'tkœîiēo´_ī ­įrŖ§Ją}Ļ[ŪË’‡ œ­Š}Ž•oi+ËegûŲ¤3*Â$ņüoaÔSø†4ŞPq(_§ƒEŠ ÃrŗLd'-–ëVīŦbž‰c›wr•āƒ@ŠÚÍŧMŖÎģ]ĀZĸaûNk NĄđĨwtb;VœÚx’ÃėŪt¸ūņnMD4Č~Å ŗI'îyV4ÍešY–H”ÂžŪ‡ŌŽ^j6ö(­pØ p03EŒvqļŌĖÎrĖĮ$ÔWē}­úĒÜ);NAĀŧŦŽĒęrČĨĻÆ‹j‘đĒ0/z@-QøŅ@ g*ØÛFi˛ĀīOí@ vįĨ9qMŨÍ=G€Nô´´”éLŲ†Ũž´öéԊ8¤?Z\dR}hŊøĸ•pFE a@<õéIŒŠqÅS]ļōzg§š‘…QLŅۃɆĨQ@j)1Š) FĻâœÔŌy¤ŸĄĸ“ĸ´ u⒎Դ( "°c–§ņE.)RRŅLŠN)hī@R}(qKIIŌ€Ō~´”Rö¤§PhĨÍ&hzRRpÔŊč1ß4b–žhéEh>‚€Ķii:ƒ@(ÛGZ?†€Ĩi9íK“@æŽY|CdŅüíēN+F+‹ļÔŌ9Ŗ –Įå9äV}ũŊäúÄ7pÚ6!āî`7V”—7žXōŦ˜HxË0ÂÕ1•5ģ‹ĢwSōũ‘І8éĪ5nÂk™§‘ĖˆÖ#;pMAŠŧķOĢZģÛˇúĮŨ%§ˇš’×ėŌ-¨'ËfíHFÁøŦŽ`ļ g Į­kįƒXū 2ˇHĸ’B%vŽÂ„yskSˆÚ)ÉoQO–ö[}R+_ŗ.nD›Ēύí%Ūžé¤#îcˇ 5.Ŗ*˙jYŦv¸…8 dˇ:”‹w%ĩŦ+#ě›scđz͌ļČæ3a’§ĩ`ęÍ’Ėâ9bŧ‹&Lüõŋjd6ņyœI´núĐ"V Vk—úKhėYŲzaēÖŲÁ<ÖM>'mįjų!Ŋ§ęĢt$Ybh%ˆ|čŨǏÕįšI$ĩ˛i`Oâ-ßJ‰ãkëëĮˇ'Ųü°ßŪj4›ø,ôŅŅōe‹!•ēŸĨ\MF6ĶÍÜ[ž4ûČŖ‘Mļ× ēxV8åũįÛĀĒzJy:mėō‘ĖĖČ­Į?†dFŌŅ”œŽãšš}n8.äˇhe,‹ģ§ŪúTĪĒA¤wn_3îĻ>b~•˜ķF|TŊ6ų;sžôũk÷:„ōŠRAô€ąu5hŒéŅË?Ũķ֍sŪ$–)íí⁕įiMώa ° s– 3@ s:ÛĀō; Ŋë#Bˇ†īNķŽ"Wy$,KzŌÔcŽK„ŠvĪŌąmL‘xP´ ĩáš`m‹Ës(‰f]Į€*Wt7HÁWԜV-ŸÛ4ûWkļ 6ļÕ¨¤ņdšą‚CˆOš‰ŠŲČûæ6n˜ŨS›ˆVaHĸCŅsÍcëFÖMJŦ&UųGjuō/öūžø*Üūuš&“bČĨ‡Uš¤ Oí'[†v+´ĮģUĨU_ÂB˜I$w¨ėĄHĩģõQ…!Oį@qjŌÎđ$Ē]>đÍHˇ0´ÍʆAÕsČŦ=:ÆÚM^û1.—hôŠ|SU÷ņŪ€6dv*ŽŦGP H#¨ŦˆŖU×'ØģCB3ŠÎĶ´÷š’ōu2$Rņĩ¨ =-5ÔUÎp1“J‡ŠfÖ_ģŠ~p9"–˛|F€érIČdåH8ÅjĶ%š8@2H¨ ÆIŦ‹–øGŖ”;ų‹ÁģņPx†´ Yžiõõ ‹9Ĩ=*ĩĒŲÃå+ģŒį.Ų5b Ō“ŠĮņ äļņÛÁėyßnīAVĸĶŖ†D•$2ũī˜Ô Ŋšn8ŦM7tzõė[ØÆĶãHú”)+€¸Ús÷xí@•bY/N .dUŽ84ÂĮJqECk'k‡Ģ(56iŽHŖ‚čŦG÷…<Ģ…Jįĩ¸į‹S´xޤQ3í۞:Hî´ĢČíO4ļÖ†ØŊ%ĖéŦÅo¸y.…ļãž+J˛ŽüOmÖ&ʝ¨ŊĮœ6Îļđ,ÍÆâŌīLã}PŌį–ûJ#áØÜŋβ4ÛK‹¨gVž™JČpTĐSAúÖœŅč\Ęwʄ¨'ŋjmŧˇÍ´¨ŗģģnrøÛƒé@Xß%F3ŽikœņSɨY"\2 á>ĩ~a}of‘Å*Ë6īšFãր5(aōœuŦm.úi5+‹G˜O(`õŗ@ PBŒĶę)Ćļ×ĮÖV‰{uyor&uŪĩ[mlbŠÅ†úæëIēpę'‰™CcŽ)ē ŪũŽ9ŽfFˇ*O?xPí€ÚĖŗDĶ۸’1%ŋĩŠŪŨG¤­ÔQö†uaĐP§JMĢéYšt÷× åōü—$š¨bžŊÔ%›ėB8â‰ļ†~wÚ¤ÅdX]ŨŪÛŨĮ9Xåļ†NÕ‡usu§ÜĻ%ŅŠĢ‘@”gŌšáŦO‰įČáĻy )Å6Úōú;ÛuVžh\ūķĖhX,t{A¤Å š‚ëÎīö`žn>\ôÍ&žn~ĘŋlÛįwÛTõƸŠÁåļ›ËdäņÔSe’ëūõ•%ÄŪPbƀ5¨Į5ÉĘڋčņŪ›˛ĄíŖŠŽ’ÂfžÎ[Ģ &“1ĀĒE.˙´CŦ‹ö]ŋwžjë+#:ø ’vxüŊÁ{ @HáīĖF*ĐW”œšBĨō]ũĸg‘FߘõĨM?ČŊ’äLėeûĘqŠĐëMģ@“Nōīšę<Â7¯Pio4ÄēšK‘,‘JƒCÚ¯/Ũ¸  Ø4Öļž[„žI$uÆ$Ũe$ŠīV€lcš~@\šÄm6ūK˛É<[@m^ÂŦj6P[Ũh7= hĄČÎ0)ũ( ÚyūJũĢg™ßgJ˜ļ:ŅL?ž”ŠĒXGŠ[ė'd‹Ę8ėiļqę U.šEū%ęjč_œš“ ŗMŧ‹U’îŌHņ(•ÁâŸoewÚäfä›Ļ8æĩé( ˜ļ6vúD–­°HŲÚsëI-ãh‚Í#ŒÉ¤îâļĪb€š^É+HcĘ UÆĢĩÔëėū`ķąĩ8Á  O‡ķ,ZãQ‘ãŽâÕbE3–ëZ˜ Ž( …Ļ;.qQ}Ē´<ÅķqņH ēĖ6ēŠßÁ,zTrÅr4_ŗųY—ËŲ…jĶfÅ.8Ļ3­.‡ÖĐCûŨģqē´ôčžb‘@tPŦd ŽÚî ’ūDŠå¨CXņY]`ŪH#TÛŗķŠÚ4Ã÷Ŋé“%äšÄwCËĸíęrE-åĨÜڜ§–"‡ĻzŸZÕëGZËŋŌžĶ:ÜÁ'—0é~ĩŽŽEáģģ—ΛøqĀZפëĐŅpGĩ(ĸ€R÷Å!?6)QíF3E N”uĸ‹A¤v Š;ҚCœĶiiZL 4ö ĐĩĄ8s÷M;ĩ.8¤ö ƒGN”PŪ–ŽÔŸZ^´R ZZJ)(zŅIšS@Qž(Ŗĩ˜į­--%-%7­)Ĩ éÅčŖŊ)3KI“šZÄņAÆ20[͡ڊÜéļ—2yŗÅŊŊÉ  :ęįO‚Q’#‘ãŌĢŪę6׆žb:̜ûfˇUQP hā-DYËN9SÍk×ŅËÖļę>VCß>ÕJē͇“ž Ã¯ÍÆHãš­Agoæ4žJoa†luĻ[ØZÛ;I ŒŨH´š5Īęßģ×ŦåŸũN0 éšßíQOW˜į]O­ckÅZk$´yŖnŪģ{ÔŌFâ$ ĒÛ­Î:ģo§ZÛȝ_60œâ™&—lnžÔÍ wh‡ˆ#E6+åîO3 âŦjŠ›'o–O5BíëVīláŊ‰D␧*AÆ(ŽÂ‘%}Ō: )vÎ(­ĘF5ËGÆ‘ĮÖ ¸ˇ‚_ŦrD­žĖOzĐ{äŧ[˛Ōy‰÷~n2ķM[Ģ„&’PmܝÅ+k‘흱Ž!ëëYzU­ÎĄg(Uūū~lÕ¯{¤ŊŨÔs-ËGĩ66ŪZ/_jŪČ-ÉɌwĻ⁊Šú%šŌD°Mŧ•850¨ĸŧŽImÚ8QۍÄfŒ-"fĩđÔ˛ĻrĨˆöĨŗ´š¸ļˇžļC™wĮÔUũ;L{K'ĩÖX›8Âã¯Ze–“5Ŗ…KĮû:ļDxū´ÆUÖ­ƒęöŗ¯˜JąV¤û ÁŦ­´sKåK f]į5§wb÷7vķŦģ|ƒĨzŌũ†OíQxd]Ē›íĨp(i$ÃĒ]ÛyŽŅ¨CâĨͤš]bō§2ĸ(+íššŪÆhõYŽŲ‘–UÆŅڛkiwĢ5Ė‹—*ā…nF:P" .¨ŗĪ4Ō"ī+Ŗcn)ÚŋÚmtČĘܰu`‡ņsNK;Ũ>i>ÅåÉ ‡vŲ6š“QŗēŧąŽ,Įæn ĮĶ”&ĒĶĮĻ<°Iåȋģ=j )¯§Š ™.ĸ+ĘmëīSę_h:kĮl’.ŌĒzTz\Į`°\Āb(0 =h´7ē›M,ĸöÆģsģ´ēĩíŨ´v‡zŖ;uېhĩ†īI’Xãˇ70HŔŠÁZvšÕΛ—2̆e^Ô6Ŗwqi-¯”Ęc•Â2•įëEč˙‰ÎŸĮgūU}5åãÚbÂTČÕËé$m^͖ JEĖŽi%Íėķj?a˛! ŌHFvĶíŖĨ­Û,ąÍ÷$ûĶn­îmuQm–7]˛ ëLhn5=VŪvĄˇƒ‘ŋ‚Æ€7F*ޝu-“O +•#!Ŋ*õEsÍo$l8e"įģ--ä‰cw”¨#>ž”Ë­AÖõmctL&įr3ŠŠĄĮpĪå\Ļ#´%PŸâ4ëĖĮYûjÄĶC*mpŧ• eģ-Eώ¸f]æ#(ŋz›mĢ­Ø‹Ë‚]ŽØ-ŽëSÁx˛Z´ŌÆ`OöøÍSđÜŅŊ“"ēī1+øĐ"ĻĨz‡\…Y\ų+ōŊZĩN§ [QƒJī(Ŗ$ §s*Û&å˙T:Šúđ}žxâˇ+2°ų›Ú€/ÍŠÅöSq2ņĀĩĒ\jÆ[l/?8éôĻhm ē(TÚYTî_zw‡&ˆéë˛ųŠÍš{ŽicOÔžÚˇadx[iRzšUŦdšxŨLU—Šâŗ´ÛČlīĩŽ$Tf—pĪz[ ‘´‹÷.-!įßĨ ,Ûx‚ ™bŽ8Ĩ>gÛĀ­F˙X3÷k'à ihĒFå'#<õĢē•ôz}¯Ÿ"ŗ ã @Qˇ9 rZ–ŗô›Ģ{Č{pWs|Āúօ*__ÁaųÛ¯ äÕEÖ“ĪŠ)­æ„Ë÷KŽ Rņ ´z…•ÔŠZŨ íÍ[Ô¤†v˛ØęĀ˧ƒ@ÉßSHõėÚ9ŋŨlpjcž[VW˸pk7Ue‹ZĶåwTQ¸Ԓ\Ã/ˆíļJŒDp{Шo,æÕ&D÷ņŒ3ĢÙ=Ģ"â[Œ3åŽ+e[æÛˇ€ $XŖ/#Uä“ÚĢCŠ[\J#Éf\Їĩ3Xž+kyãķSˇÖ˛Ä„ë~Lh‚6Šû´FßĪæuâ¤y$gsĩTdšv=)˛*4l˜ųƒt¤‚åK=^ÎúVŠ 2ëØŽŋJŖ~"ƒQyîáiŖt ˜]Ø=éļ˛XËĒ›ˆš(Ö1åŽ8Ūkkhߚ`gč0Ë Ŗy›‚ģ–øV´ķšĪÕ5h´Ö‰dFo0öė*ú° 7­/JãTŗ‡r´ŧ¯ŪÚ Å]~Tjæ´ũÖé}kå‚\üëČ9õ  K{ëKĸŌE1Ûų¸ĀĨmNÚUb¸]Ō}Ū:ÕM‚ĘkiÔLū Ķt(b“Lą¯˜ōGĨ4 ũĩąXî§E—Õŋ5~fáŗŨí\ϧqfßhkx÷ĘrŲēUíD´~‡`!vĻī§za5ûû;1Õ3š•?Ĩki™]:Ü7_-j†Ģöy4xÕ 1Ú´-dTą…Ũ‚¨A’hˇä8ëL@ĄiŅȒF6§ĄŖ­G-Ä0įHПīnå`6ĘõĪjĘģky5'؏=ÄqōœmQRhoŌĐš#0.ŽĄhWp¸ۜ÷¨oŜ×G;;vč×<Öf‰oך„o˛Ŧœ:UŊMuM8āŪGáŠ@hÜ]Åoĩeo™žęŽIü)ĸúåFȏī r? ĮŧÁņ*,’4@ń`kF+HmÖâHÜģ8ËîlĐ{ r ų|°Œ¯“ˇŽÕ%ĩ͍Öĸæ$ÍÄk‚ÅqÅWđÂĄĶØüģˌO­yFׯØáP2yukh§’2˛?–~vUČZĶFĒË҆k•¸+m?ÛŦåܲKļH[ŋ5Õ#‹Æ8éCÄÉoÉ'ŨQ“ÅR˛ŋĩ’Ōk‹X›j“¸*āąĢŗļâĮzÄĐm6éAHŨ) ÔˇÔc¸˛7H´gå#ž+:į\Š)|В<``í VĶo­áĐdGD€7ĘO4û+‹84Pķmmã?ŧŪ”ėäÕË ũšFY×ríĮËõ¨ĩM^k;Ø`‚ûúûû ÎŌî–ÂņB;šÎJzĨ^՝"Õl$…@X=ZŸR0[ÄíųŌĢ|ŌiZ“^ŧŅŧ^SÄpÃ9ǚžĄåMnŠû"“–” ā{Uņ#žžHĶ?ĘÄ~Ļ‹hUôŖ­ŸÎņRŧM/zLR QŽiZCôQIšZ3IŪ— CKڒ–ÔÃ֞ÔĘ@ZĮŊ/@i;Rք IKÛ­†ČĨúŌvâŖéE>”Ā^ÔQœŅ@hü(Ĩ ÷ĨwÍ( ĸ–’€E”ŋJ€”z '8 u¤éKIԀРŖ§Ö€ŌŠj÷ kĻÍ,xtÖŠĸŦ<ÖŨŊNÆ˜ ŗŌūĶokuö‰RlfŨÕģœ:ÁšRšE‹Ģ眯ŧ6ãV5øûŗöRĮĻ{fšĒęŨRžŊk O†5쇁s¸ûĄģĶ>ÎĪâ+˜ŧųB<{ŽJčWŠÃĶg{Q¨FŌ4ÉnrĨ=:Sė­åŋ˛RÜĘŗIķ.ÆĀ_AŠmqœĶ‹k}quŖ\6ā—îRßJ4“{uR\ …H)ŽžôŦ3aĮ”´V…ÄōɨE%Ãâ&ų[+֙o{ysĸ\J&đ1Ãmę1=(ŽvKÍN.Ķ,epšMŧœÔŌ^ßÚ]Z´íCpÛv*ō´X ÃŌÆŒ“Í+ĒIč9¤F+ Úú˙V3Ihņà 6rįuXąÔ'¸‚á^0.íōĨ{5055ËœgĢÃWÔ/°´R‚M˛Ũ*ĐÔæšģš (•„\3ģ`gŌ€aŠ­õÄŅyOC÷ˇUÁ:} Á†ŪwN+B26Ą~ķĻÉK ËéZׯ{ŲíĖ%<ŦrOZŊڏ°ß_uŋš×ė’3'Ũ Éjš§ji|˛-Ą’/žÚ€/÷  ĪūÖCLą1ˇSƒ&@ũ)oõh4ô¤ ūgŨÛ@VZx‚ÉåXË:n—Ļ´Õ­nį0FĖ$™qŸĨ]į֔Ņ֊%Aw{˜Sq @Ũ3N{¨#$’EUēOzMŽ*šåōŌdgūčnjŽŊvÖÖēl<Ŧĩ­ŧ!%ØˆČ¸ßí@ËT×ûĻĢJɎĖY>ROu %RIQūč'­Jƒœj!ŸhīŊ­ãŨëļ€34XæžŪę åi!WڒßiYiđYdA¸ę *ĖJE =1N  Š4 9&’ByŸyU¸ĢvÚ|6ö†ØnxĪ÷ÎjØ"jeĪĘhņ FíŧāTˇZbÍĨ›8ädá‰Í^?­fG¨\dYĪ{Yw+) eŊ>Ņl,ãI`ŊÍZ¨e™ŌxãX™Õē¸čĩ04™6‹ˇ­r%’6q† qēŸg¤Åg Å’aēdũÚžzķK@vZ,VSųŅË)s÷ˇ7ŪúÔķé–÷ <Ą‹§Ũųt搚§}ĻÛ_cĪL•čAÁĨĩą‚Ö#)…=rsš´sIœP+].ÖÖV–öŗuäĶĸĶíĄ˜ËJ˛xwŠ.obˇtˇ<÷QFMOETÂo7ȏĖëœUŽjŧâā́ÕPœÔ{UŽÔФčc•w)ę)–öp[XbT ×­MŽh&Γcš›ėŅåēü´ī°Ûlųė^‹ļϏȁđH;zŠÆđõãIjŪ|ŦōЌÕûžCyäŅÅ>HŖ”čŽ÷…?[Ē–p~ílŽ}ĒĨŪ܋#†YŖŠÁ¤2”VW[]4ryųÚQqŠ—ė3ŽĒ×ĸHö˛lێÕb >eķ÷“ gl‘VЁga,sŨŧån:…¨ ˛ŋąŠK{g‰á9ØÎH)š×ڗŒP#!le˛Ōd‚ķĨ“;Žq’{Ķô8ŽmíVŪâ, áˇgujvÅ ëHfŲ¯ŦīîžXîAŨŒRi֗ÉĻŪE$* ;{šŪqíNOģLFåŊßöéiŨ˞˜§ki——m#ynŽØ=ĢV{Û[wÛ4ņŖzІČį4‡p^ƒŒS%%ժ镯iΜp*!–&õ„ˇ:)–Úki%FmČŅŒÕ5¤„Ūß]Æņ‰NvãœVŋ”ÛÃvŠųŽGŌ„îS1´Ų#O4ÎØÜC/‰ŽfYnĖ ÷éRiģgŊÕB6|ÎÖĀĩĩU%`Œ1ÂԖöņ¸8ė)…Î{N’ÂO#PP&ŒCsVŧB!:|'îüëŗé[-ožæIõ"™=Ŧ ŖW ĐAs+WD2i¨UNeˇĒĢâ =”J°&´ŪĘŪO,ŧ@˜žįĩG6™m5ÂĪ""œƒē€šm `{ŌK÷GĨWg^h/ÄādŋŽåĮįQjD  Č,Uũ+VâÚ+Ģ*uÜĻŗ˙áĩōö&`GĪŌ€"×aôûw`7‡@­RkĖæŪÚ q’ĒŋŌŦ]éIwQ4ŌĒGĐÖŦÍj—ūLše  ŊnÖŗ„¤hŦ˛*ŠĻMCâ4U›O¯Ũ““íRjļ˙gKUķ¤u3¨Ã5hę6ßÛųnÅqČaÔSC)_mūÕĶX(ÜÅžolUk%ŪĨ¨•R@ûpËģåĢ‘čŠöˆg{‰âé¸Ô—ē,SyęŌC)ęҜf€$ŌėͅšˆËæÄƒéWęŊĨĒYÛŦQî*;ąÉ5b‘"nŽ+ P*ځyŽ7ƨvĀ™Î Ú 7zÖ;i7+ŠKsmpǞđۗ$}(ˇČžiÁ"M˜ņړû6 tMÎYä1ųžfîsÖ§ĩĶ^+-n$YĒņi7ņÚŊŋÛTFWvĶūˆ1¤ÛšWēÕ-*Ú{KU†wWÛ•Ēõ!2)•Ú&X›c‘ÃzV-Ŋ՞´ą}ĒIãhËKģą­É7o/ąÁ>ĩ‡Š‰Š›ÄÚؚ͚˜Íę Å"đ1֑†NiŲĪî_ĶiÍeøuŒš:ǜXéÍh\ ^X6ų„cæéTô{>Ųâ•Ŗq’ˡ4í5ä{)|ų|ĮVeŨôĒz=ŖËĻĢ%ĖąļæÚAÍ_°ˇžæYBáØ°ÛīUŦ ŋąļx<¸äÃ,îė}h5•ġV3#ž&Œ˛3/¯­gčIyyn${Į)HÆ3ģëS%­åĩœËW¸•‰$Sh1\ÚÆđÜ@gp`ŲÍŠŨ_[Å4ĘcŽ8˜mâ:ęúîhĨņî˗ܸÁöǎ–×÷—7Pŧ¸ŠF<-IĨ]i H዆QL íÃ8ĸŒ æŽ)Á×Ūōģf‚äĸHá6úl†÷Lģ†IŽ|ø%`­šq´š‰wb˧ß ¤ôÍMq÷īnŗD"D`Íķgv=)Œ‹W¸ŧ‡R´Ky@Iž]§Ö¤¸ēšŌė‰žEžg}ąņŠƒWŠō]FÖX-KĨģnÎáķU­VŌ[ûh×dčCǎ¯ĨGpu +oĩ4âbŋ4‘•ĀĮĩC­ŨÍ&o=´ž\r0ŨŽŧĶŽ.ooŦžĖ–n’8ÚėßtzŌęv2GŖÁ æYIځ“Ëy>›ĻÉ-ĶŦŽ>æŅНöËÁ$ ›0r7Š ąŠ.ām_IuTt“øCŒsM°ģÔŽąØĢÃHÍڀ"Öo-ŧ‰ʑ‚í÷ŠVīQˇÔíášhž9ķŖîâ Ö#šžú×ˁŨ"mĖÂĻŊķĨÕlŲ Į;›´€ž{̉õCenâ5DÜōc'éTáŽXüM‰ßĖaĘŨ8ŠnaēąÔÚōÚéę)íԎx'Ō“ĄÅ9ÆTŠËŅņpgž~]ÜĒįøTV—ŌąôMŠ öÍÄąJۗØÖž>ZĖ‹Ŗ2kļŖĪo)ķō™šĩÕÜ…¤pHĄe8ĮŊ-ÕĨėÚ´3¨ŒEãžiēĨŊĖڍŦą@]"9'u:›Ë]^;k‰Öhå\—­ŖÖą&ŠîMf Ŏîcųs¸VØë@Īū­‡ĩrē\Ëo"Îí÷‰@¤Šęn–F…Ä[wãŨ+"ĮMšˇˇž7xŲßîˇĨŠķßJž…Õūw;7ŽÜÔ×ēliM"dMîį’EY‡I_ėĨ˛™˛ņ/Žjģi’B-ĨģÜËķé@æš{ÔĶ`šF 0˘?zĩm´›k{…¸ŒeĀꎔ†j)4ęw B´ ;ŌRZ8Íčī@ĀRwŖĄĨëHP=( `8ĸöĨ=igáNëM¤ĘJNi´ M&(Ŧp8Ļ+eGún)´´ƒ´Ā)Ĩ¤š\b’—¤i€ *Œž)E į­ bŠJ;PæŒŌr;u§b€­“ĶĨ.rhëE!ëHir¤ęÔ´g4Rt4´Ph Ģę[[†–C¨ĢøŦŸIwĸ}”1°ûz☠a}r×Īit#Ũå‰N1íR[ßÍ&Š=œ‘¨¨`ĀÖ^šdU‰Íœ¨¯ˎ¯ŠŠžsc¯Í$É!ŽXÔ+*恚1ß<v‹ßĀžõSŅõ+ËĐLÖãËÜxLvÅ7I™%ŧŋ`˛.öČÜ:Ķ´FŽ;Y,rŪp/‘´ņ@ލ›Hãw…@F)ˇÚÄmpÎ&äôŦ.KKX$´ÔÔ QȇQVu…„]ij›Bá}¸  Qx‚ŌIeF 2ōÕjĮTˇž.°– ŸyYpk>Axšöjļ§oēžžiëÁīIŦ'ÄSŽÅÚ!SˇĶ­oqĖ~d+¯¨ĻZE I4ĖdŪŲ`[;k;F…"¸Ô O¸˛đ*Ŋ—ú-ލ`ÎVFzRtŨ@a–=ŲÆ7 eÔ>d°ˇžŅėlíS÷ūĩŸĨiöŗi0īPåūvnûž´^Û¯öõ“wmbF}(ŽŒŠvF=ĢžšŅn|A$FIZ¸Sך]B6†[ 2]"sķ6ī›ĀčŠPAéT€†c"M.ÃVBŲŪŗŧ;Écr 9F‘ą“ڐš¤“Ee,ļėĒę7|ÜņRŲČŌÚÃ#ũæ@McéŌ<ēÁ‘ËŪ2ĮĩK}xöz-ģ[ũųĸŸLŠÚéĐŅŌ°oėĨŗĶÍĖ7ã˜ŗ’׊ĶĶnåŒ3°ÁuäP"ßQUĨ”EsA2\U‡RQ‚œ:Ö›q7™z—“Ÿ:…>‹ë@ãŌ—Ū°Üö1ē™ÚIĻ#hnŲéRÛ\Ũ ˜T,ō#˙Ŧ2G´/ԁØŲÍ5äTFv?*Œ“Y7—w‘ęém d‘’ĄŊiu'ģM o0!›iŨ´ņjŌmQāœCÛčĖwcÖļ0vútĒzcôˆ)b#ÎŅŪŠÍ¨^BˆĶʓ9A÷’€6“Ļ\Ha…äT.Td(ękW¸ž‰-<‰,…Gš>õ~{‹û].Ibyל˜ ,\˛škĢU•ĸhIę­V*ޟp÷60Í r@Ģ=¨Œ‡4ĒĄF+*ķV’Æˇ‚ßĖ(ģ‰Ā$ڌ‡K–ų‡ļąĮ苎ÛdŽâĨ×4uۙŦ>ĐÖâæmÜ ŧ5y#X¤{F[gĀnéŸjabÆĨĒ&žņŦ‘HūaĀ*8ĢÛ˛â>mmŲWī—Šœę† cKģg…_…“ ŒĐ0õČÕk­A-åHQYœeQ}*(ĩQöąkuA+“q5! HGÍõ§bŒĐk›¨­vîÉw8U^IĸÎņ/™QĶkm!דĐēņ6Ü6Øĸ nëEoĐę&Ëc+íŨžÄP2íŌĢ-ėmxö¸o1WwÔUHĩģy|ėG.bmģvōh¤Ëƒ¸RĻŪĸĄ‚î+›6š{Ö}Ž´—3”0Hš}ĒĀd~>”Æk▐žÔgƒÃ‘Š+(øŠĮs¨21_î­\´ž‚ō/6ʎšę(ž¯csyåŧŊą°š¯ĮfõÃwĒįT€sķ˜÷c~ߗķ§__AdŠ$íĩXāq@ËC¯NiqšŠĨmqr`†MŌœWŪ€ cŠNŖšŽōî+8ZYÛjõ^ÃUļÔy/ķã%OQ@‹"28VųiJ•Sdē‚&Û$ČŦ{ĸy㆖FÂ(É4 L\ H€3Tė5+[¸ŋu ČÎTõŠ­īmŽUÚ•Õ>öJ›ĩ^ۈo5<ĩęÛ¸ÔŦöĢ}Ļ0îåēĐŖî*4ų]ŗŪ›öČ<Ī/ÍM˙ŨŨRlËũ(øĪ5?9§÷Å#(-ģ4îĩ˛$*d‘‚(ęI¨eÔí!v¤Ë/ŪÚ Åĩ¯=ÜIf×Ô \ƒ@¯lWíKuë ĀáˇzŅ^•ĸF—ZcKtųŽX–ĢMĒÛÆŠ¸‡;D›~ZC-ų_í”.*•î§o`ą™÷aú)!Õ ›ÎōՉwˇ¨öĻ"ÚĻ×fÉ>ŲéOĩJßSŠâÍî‘ËLõšpÔáûŨ0dGû ŽM!–ę?ã5 ĩôwFEUthĪĖŦ0j‚ëĐ5ķÁ˛O”ãp\ķ@2\ÅŅÄÄī“îŒTÕBmB4Ô"ĩ11wčØāTsjÉu$PŦßfl Ķá¨ŦË XĪtö“Âa™qž ig&€”´wŖŊ āŌ´¸æ“Ŋé;ĐO4‚Å4fŠOZ˛(4w ô¤0íEĨ% MÅ)¤âËfEĄ˜w¤|J(ęhÅ5›húĶé¸ĢĐR9ĀÍ=zP@ Ž@4QJ('­:“Š2qÅ-w RúĐEô†˜čv¤0sNúRsKր (ëHhyŖÚ“Ŋ-% ČÅNĩÕåŊšƒs*Įģ =č`)[žÕUu9gsŒ¨ŨÉŠ¤ž™RIūč'­<(ĨĀÎqŠaš0â-ëæu۞iĻxˇ2ĻáÔgĨ0á‰Ûs"ą I2ŸŪFŽGv\Ō‰cŲģzã×VŒSc°Š;–šüÖcēŖļžy.¤ĩžÕClĖmŦįÎ6ČXōMtŒP1ĩˆäŲféH" 2qSjW]&O. KJĨBíä}kIG¸ .RŌNtčFBdž掚01G^Ø G/suįßŪArōDĒ1FŧŊZą¸Aáˇvčã*Ãësb“ģjîõŖjãÜį!*žel‚TŒcžjÍôąGĸ@¤đB+kjã1HʍÃ(#ĩdkŌ*ŲÛHyE•XņÚ¤ÔĻ‚ōØA ‰\mÛÎ=ëHĒ:íeV_B(HbŒåû P<ėē~ŗķ¯î¤g™ŲMCĢ‘¨jVpÚėŊ{­oÉJ›dUe=ˆĻÃoDŠūęâĀ•xQA搎}%Fņ[üÈöõīOšš+_G,íąZn=+Qlm’c2ÁœîÛÍ>kxgĮ>:n\Ķkw ĮˆehäVQéÚ4ą=ū¤ĀŒy€į=ĢQm Ė‰ +â Í glĨöAīl.3@t)Åuˇ§žØ¤ĐeSĀ,ģüöų҆Ú+pV•ë´SÆŲ'ķÖx ŗÅŠNÔŊвĮâ ÄųeR1:†¨-ÉÚcčŋŪ¤†8'ņÚ8V=ëvh BąĸŽy8īLfš–—ZZG<Ėģ~VC&*O*Ž’k.+Lé–m/›öx÷į;ąŪ™}§Û_lĻđŊ9Ą%’ÄĐG$j™Ø9fĢYYAd…-Ķj““ÍY¤qPéW;€;P‘‘ŪŠéĒ đúÍ kæų$‚&ĩį‰'‰ĸ‘rŽ0EUąĶĸąVXŪFCü,Ų€)čĐAqĨ &U‘åÉrܚ‡IbĐjĖÆHbb¨O_,ŧ~TÆgjļi•›@™ üũ롋ũZįŌŗîô¯ĩZĨŧ—mCךúքK˛%Bs´c4ŽŪáo'—÷öœTŊé\RĪøYŖk)w`Íŧų›ēŌiŦ>׊,'÷îúf¯ÍĸŲÉ1•CÄÍ÷ŧļ+ēŦÛŲÁk“ CÔzĶŽŽŅ?1—h ģ?SQX…ūĸ%s\ÆjļšMœYŲÎŨĮđĢ7ŅÜZ˜+!x f-vđģ,\ąVéõ¨tņĻOa ŨJw¯Ęcg=~•šga ŒmļžĖŲĄtûD›Î “ûØ  ˙M5WžģkNß˒ŨJm*Ę9ΝmxUŽ#ŪW§5=´[Æ#…(í@ÜFH.ŽtĀ•ōč§­ijˇYĮm ŗMũŪ´ Ŧč\pw{R\ŲÁxÜFŽ‘šÉŌĨ ŠŪĢĖŽÍˇzĨ-’Ēk—Ŗō­iG§ÚA(’( d cØĀ×^{F<Ü}ęC(ßĖŠŦŲ.å ŸÆĸˇ¸]7Pē[°QfmË'c[¤}åˇ÷ˆæžč­€ĘցØKĢËģĢû5*Āˆ°ëëVôĨÕūÕēô+#ŠÛcéÜ´čĪ4šõ¤RRŌ@'ņQßĨäP~õŌ’–™ƒÚ€ۊ4RRRöæ“ېi? Zm.Æh¤J ÅQŅGj3LBĶxĨ4P;ŌŅŽhÍ ZnyĨī@ IÍ- ëL0Îęhv{ŌĐJÅ%-0Š^””€NÔžÔRPE­č4w¤ëJh÷ ô¤āšP(G˛|Nû*BčO§5­Ō¨ę:\Zƒ)™äĀÚ­€i 1ŪŪü;m?–ĸAąƒcœæ­kĘXX0wžĩn]",ãļg—ˏϤŧĶãŧˇHdfUÔō SPÚēžŸōÄˇÍøUwĶá›ÄSŦ‰”hƒ‘īSLņLח Ҝ‚ÍšĩũžSQką3å—iSԘv›Ķ_A fŠ)0‹ģĨ]đĖ&œĘİI ŒúTÖÚ|ļĸå–}Ī3nÜWĄŖFĶĨĶâ‘$•_{n¤SÖ˙ŗfhåhŲWp+ÖŽ‘TõH'¸ą’6î”îô F+vÚ"^}˛EdčŊąžõbmBYbļĩ†EYflHéÛéR ÔŅ˜XˁēîãÍ,ÚL“ÚÃ$aa숃íÅ1‰¨,úBÅs Ė’F,‹!ÎG­IzĪ.Š`ۇ’rČ\ãŊ2æĪPÔü˜Ž•!…NdÚŲŨOŋK…Ô­;f’GUÅ #†KÆ×å\|FĄ†îÕ6ąsuÕĒĀę#•ļ‘īIŸˇ<níÁBēöĻk+w%ŨŗAjĪ/ģ Žhäo{khírÄģžQëIi}4š„–—•‚žũĒ=b{‘aĀ’.Xy~đZĄĻĖŠŽ3 iŅ%Œ.?Z\ŧÔŽāÕE¤včá×1œõúŌŨj7Vv1O5ēgÚëģĨSēŧū8¤Ãųq)F!OZģâ(Úm/r+Ŧ­…ЁfûP6Ky[ÖV yÕk­hÛj_e6Ŧß.A^K}+;SÕmŽūĮEžYU›åéW&‘‰ ä BzĐâ×c“ÍAi?ü˛Į5oMžŠū6(ŒŒ§[¨ĒVN¯Žj Ĩv…Piš+jŽÖy™ühx-2VXŖiI 2qÍIڐŌ‹ĻëŸn¸hÚÚEËmRëW垉gh•]Ų_bįoÖŗ|4ĘąŨ+2‡3ˇËŪĢiĻ#}äĻ'2÷öäP3^įSˇĩ˛[œ4‘7BĸĄ]ĶŲŖMÄoEė6Đč3$y;ŪsTĩŖĩÛ´6Sšh HuK+‹Ÿ!īí‘Ö–æúŌÚqĪĩŲsøU]MV)´âˆ2%ÛÍucû^žō7kj@XĶîlϜ‹yË1ū5n;Ûy.Ũ$j}åŦÍU"Ž˙Oh,ÆL|Ŗø{ŌB˜ņTÍ˙LEkEyŖ9QŠũāJlwÖŗ>ȧßĐ5c&ĮÕĩEfĻ0ģŊ8Ļię ģĩ˛Ŋ|ČÁheC÷ž´ÂĮFW+"Ū{Ģ åĩģ6Iō¤=Aô5°ŧŠÉņ°¸e™vūt€Õ##ģhRp3K@Šoo#_ŦĸäˆĀæ,uŠÃFÎP8,:Žy‹+Š[k6"Ø'<ŌÁßÎËĀ0‚iŒŲÂō7Ιžžjāœšŗ-ãY5­A3ō´jĪ­QŌ4‹k¨.Vmä¤ĖĢķ}ÚépĒš,îj”›˜ųXĮIšä2;8€˛oĪ'*%ĶV}!/ō …r°n;R°בĪ%ģ-´‚9F"ž™Šķ¤¨˜ņšÂžž{Ct%tc;N7sŠ›Ä+ģDRYzSla—ƒÅtą%‹ûFšX%‘Ũ•qŧį ‚Öõ–Ú{uÒä2įxúP:#Œ`ĩA=kĈâk9c•‘Œ›x­-7N6RJŪ|’ ;9é@J˙ĩFÎûŠÆŌ›svī¨Ĩ” ąļīvÆp;UËhæHBĪ ‘ĮVŦ;8äOOæÉæ7—ØĮa¯ešÔ.aE•’,dŸZc6JŸZ0qÖŗ폤ηĸ— ĩŗÎ;VLK¨ íŋn ę3@XčSMĩY|Ņy™Îā*ÕaÍ5Ô[ß4įkmniū"’ęE¸ļœÆĘZ@lÔrpAŦ+¯í ø]´Ę0dŒ¯öŠī5{¸ ‹zŦ‘ī%'đĻœ恚ÍĶ&š‘įIŌMŠvŌ. ŦØįÕ&žŧŗK•œ†ĮOĨtMģ<OšŖąYŌŌ1vÁĻĮĖEOHüĮŽ)y¨oŽ’ÆŌIÜd éëXéŦKåE9d}į˜•NTzßÚŨŠ0ՑŦß_ŲėšŨTĀ~ņ#;iöˇˇw—ŋčīÚ7>;ú Ôį4ŠXšփúPėŌ Õ—Šę˙ešŽÖ=ĸGęÍŅE;MÔ$’æX‰Up‘Wö  <š9ÍbÜj÷–ãí$fÍ­÷Ŋn ‚=(Ÿ—|ØÍIžk3\ûBXŧļķyLŸ1÷|îÍ.HÆkŸUÕ?ŗRũo70MŪY^Ģssymk$ !Id~ë@Í6 ž ßŪŗô‹™î­ŽIw˜Üĸž*–š5 ļMæ<Ššã;¨ģŋi Ė€÷Ĩa<íĪęVī6Ŋlž{¨e$mūUJâkUĩ˛ŠIIķķ@ÍÎôf°ôčõĩ,´r‹V"WÜA­Ú@4šÆ™ŸPÔä´WdŠ$Ë8$šÖŦÆGå\ūOQV•šAžšSL´’ĘÜĮ,í79öŠáŧˇ™™c•XĢm<÷ŦÍ(ŧÖWK4Ī!ķsžjŸ‡4č%Vē}ŪdrŧŅ`:ZNôšĀÍD“G.ī-ՈëƒŌëNęiŖĻ)zt õ¤īAëJi†“¸ Ņī@ĩ%Ĩ!‡zLņKH¸é@ÅíE%€CIJØ4ÜPŧŅ‘KŒŠhDŽÎ:Đ1šFëGŌ€ū4tĸÂ€ŲϟįKša‘HŠ\Đ8ĸ¨@ëE Zĸ€ QH)r(ëIKړĩsKK@ =i)h 4˜õĨ¤ī@Ō‚}(8 š uŦ]_VšČėmy¯ŒŗvÍ4ÉŖ‰įj6ē…´3ÍąĘO;0zU…ŧ¸]sėˇÉh÷¯ŠĶíHEgÅ}?ÛUÖ$ģG&Ē>šqÂÅq!•w'ÍĶë@xâĨSĶ/%ŧžX D6ŖQWGN´€L{ԊĘÖĩItĪ-’1Ģnčj$ņībYm%e+7zvk‹Ā5ŸiĢ ‹Ļļ’ “€qÔSĻÕ`ˇ•ĸ*ōHŖs*.vZŋړ5ZMFŪ;!vĖ|“Č RÁ}oqˇË“%—pÔ`­!‘,ĄEÍeÛëö×-íĒHęjIe˛“Tsēíį@Tmĩ'^qJæÛ@ ´z qQéPI{mųrOŋĄjŠŽŪ]9š&Ú ¤P"˙•rsô¤ōcgŪQKŽøŦY‘lu  ˛ųŧH˛ˇT†4 ėąˍ ŋŪã­[à ĖQĸũÕÅ?w8ņ9āP!ÔŊi{ö–{¨5ŧąØLƒÖąÆ3YW ŗ…Ųy"ŠÃ2/˜Ũ.$°‘$)į2ž+=Ŧ/ƒö%<Ėm?7­ˆ&IáYcmČã Ԃ÷–×SéÖöëĘíßķtÅ;Ä*ą&öųÖļ+3[†âęŅ­íĸVķĖÅąŠ­,wچŸą‰Q\ ōnČÛFĨcs ÍŊՊ‡h—iBzŠĐĶEÂZ$w*2(Q†ÎjÃg"˜ė%ž‘${¸/îĸœ“YmƒYžéėeŲ/¸Ž—Ŋ- éKŒZBp2iKY´{í>HcûįîÖ^›{wo V’iō4‰ōîÆZßySs0 :“QA{mrå`$aÔ)  ŨjöeÅŦ6˛:ŋÁxÚĒiōÍĻę mŧÍfĮË÷MtƒšZ`&x Rdf–öĩgq§ĄFeOŧ V„7osk$‘ÛI;CŽĻ´ģSB(9Āãî<ۋŪXŽ^â92ų]mŧ‚XQö2nuēŠxOj1H­PÖüKn?Ü5yŊÍQÕŖšk'ŠWgN[BÔŪÉĸĮp¯Î›Cîãm6æŌæŪ{A &âŖÚW=ũkGIIâŗHncTd6sWHĪnh…§%å‹]+Z‚ŒLƒiëė)4Tŧ‚â>Ց&}Ûˇ–ˇš(#Rĩē7ö÷VąŦž^AV8ŖU°¸ŧKyáڗ1|ÛsZüf–ÚxÔŪm÷Ļ4Œ l^õĨúP:QہŒ}ÅNŪŊĢNąžˇžšž_+÷ŋŨ=ë{ĨGüTÍŌė&´[;)ķXˇËڙĨiˇVČeCnXļÜsZŨč dwų–ōGģnå#>•ËčQŊžĩ4Č$Œ)ÜÃŊunĸD*ŨÁĒööpYŽØ"T¯ŊÂĐzĐ éQAæŽô†ŽÔR C úŌ})hô¤GjN§4§Ĩá¤éKڒi˜§šnhlAĪjUųGZ5FbtĨ4sF1LŒŌ5-Š@4ķڀiߍSgš(ĸy旊oSKŪ€fŠ):ĐŌĶxĨé@ II֗4”´‚€ÜĐh攚o4ŧҚAKÆhQGZ:š‰ŦiŗŊôփ|‰÷”÷ļi â˜rÜ=ÆŠ`$ˇ’ĨÍŽx§ę{]^+¸í¤<˛‡`éÍ>æ Šĩ(gDË‡8žökW?&X@Ė&ē]Búëėr&čAPʘōL×PjM˛ė8—pīė=+ąęŖž´ģECLž’û{ũĄŒ}ÂŨZ´(Å.( ލÆ@@īK¨åšĶpË÷÷Ęļž5ŧĄžĸ˜a‰ļæ5;zqԁ™7,§ÄV¸eȍĒ÷W‹+Ū¤m%P†bŋ3ÖīŲ`2ųžRy›o5ØíĨ”ČđFdõ+L Čv7…ŠĢ+bŸ­]ŅU?˛íŠ…˙V9#i–Ÿgō<•¸Ēđ3RZŲÁf…`bžŲÍ!Z S}¨įķ¸ĸ]Ÿđ”EŽĸšžÚUĄē7>^$'9Ži%Ōm^ãíXMœî iŒēŋĨEs/—˛ ų•I:ĶõĻmo7G—Žiæ4{i5˙}iīfMÍV5ëEļŌmC~ōXŲP9Ģáčí,3Mķ–Tn*{ũ&;ô$–EXú*ŸÖ˜ēŊ´2jZzēœĘß?ĖkzÚíĸD¸AÛ9Ēz4wQĀy|Č>뙿¯ÛEäBąīgÛüLrM c”íÎkV'žŒOtŪPę;›ō­âcŪiIŠ‹ÛkÚC.i #Ņ?Ō´‰’MĖ›Ų@cÚĸĐq.‹:ČĖ@vįw5JĶæąIc’q,nŲn95NßHžĩYĄ‚ę! ’yLžh•æđ›;ČIé¸÷ĒmAgŲ§ˆŨw(PG|Q.—xēØchŨ÷sیæŸyk4r¤H%˛Sw–5dŸûF3˛KîŨǚ w2Å äˇeÔŽĶwPŽōįM1GbIÖ Ũ)š=­ÍŊ‡ŲŽV5Ú0ĨNhBōōæÛ|Ō]ūhXâS‘ˇ=ęūŋ—ŅfõĀ?­ePoHŸlž`mÜŊijq^]i"|é8aģ… d—ŗ\E¤ mYC¤aŽáÛÎĨ=ž Ā+æ>Đ͎=é×+ttQŲËLËåŦ8÷ĄÅÄzm˛‹o3nX¸$ŒR}:k‰%c$ąÍPREęäŦË4c,Ú=MečV’ÛÉs#FaŠFĘF{Uûæm$kPĻP2썗5ä°1žc“wzUÚĘĐoäÔ-YæP$FÚqĐÖ­Ö^ĩŦ 8$q§™<ŸukTôŽwÄ63ŊÕŊä æyDn@9ëšhcßQÔí^ģ‚"“°\ŠûĩbëRšßRĩˇDSÜnīTõ;Äŧ}=#VĘĢ c¤í ũƒēšXNY”P;ˇ7íŖĢÆ<šA!ķéQ˙i7Ú$ŽÎŸËûäk>îXõ-Jßa–4 @`¸æŸŖĪž×ˇoå¸rÁŸÂ€5l5(¯ÃVIáŖnĸŽ į´–7šŨÅä ‹p6ƒŒn5Ņu¤#;\ģû&!ÚۙJ‚Jn”R“ĸ=ÄŌx‰Õt‰Õˆ‡ËųÕgŧ[_C(U‘WiéL –z¤SČąė‘ÁdÜ>đ¨ĩ=b+9EģŦ›˜gp Ύ•[[ĩcqƒĘ8ÛĀŌĨՕeÖėSzŠį4‹öŊŊä­ oWÆB¸Æi× Žá ‚™Đnm¸ųjŗ,cÄp…ûÂüë6mĩzšČîFf"…ôZ„lYë†SØÕƒÖ¨éqŲ¤ lGî™ēķÉĢԄgë7‚ŌÂFÉÜĘBāwŦ]*ęŪ×Kōîá‘ÕÉf;2ŋnka˛Ž7˙pⰌI…Y„›šLu=9éL ›Ûčl4՝c;06*ņSiš”Wč|°Á” Á…fë ˙âãē§ô­{ ŋfá@âi*žĄ}ŸlĶ͝Ŗ°īE•äWÖË<ånĮĩXíU/uk7Eš}›ēqVÍ`x´˙ĄEĀ˙X(b[¸ ŲæHŨĪzĢ{ŦÚØÜĮ Ėw?Sũß­TÖʛ+<?ŊLS5(’MzĀ2) ­œŽ´Ā܂â;ˆVX\27F§ˇNi‘Ä‘F5Ŗ ^”ėqH =RdŸRŗ˛f-"ũ*Ô6z}Ŋņž2Š9t7oĨPžÚ8üOnČŧ˛–ozlų~!•Ą‹q1d¯ŽiĐÆŲŠ8ÅA|•vā}Úy‘•ģŒR´pĮuq:\—Ũ÷”ļBՈo-įFxeGUûÄ•‰ĄB‘^jHŖä ˇԟáÕTkåcÍ?•;°×ļË ˜ĖžXãvx¨­dō*%Ėd‘ũęȲŠ9´­Cåʙ…ôĒÚ}•´ļ æō˛[<敀én¯íŦŅZâPē{Ô1ëV2Ė"K„,zVĖ×> :–hūëīVu+K_ė”"$ŠĒU—Ži­ŠC đĒĪ1‰wg!ąPę:¤:dQ™79n›ŠÂeĶt÷‘I—(:úÔŪ#˙[pGüĩQ@_C=ˇž­ļ1÷‹ b˜šĨŧ“$gzyŸq™p¨xŒ˛écĘ.áģ”čaąšŽÖVšf9 Šdīô¤2ÅöĢmk8‚IpũqŠ“OŊ†ú$DáNF+[ÛũšbYAÉį=ųŽ‚(Ō4ųW<œ `#ī-ĮJ“ĸdúsM9íMžAŗģ•T“HE4Ö틜,žXmžf>\Ķu­QôØĸ{1ÆOAXķ\,újI“f`Dc¯^ϝø•ôØØČd^GĨ,k?ötˇ/o"2/ŨaÖĒhڜ—ķŗË ī•ĄrņËĨÍövW2ĶžÕ“á´Q¤ķTš_šŨE>€OũŧĪ$ąEg#Ëcoĩ[ģÔ¤ˆÃ0&‘wm'GÖŗtÛ¨ŊyķŽ$Ā_öKĒ_ųzŠÛ;˜bŲ’ę9'Ō‹ŖĨߝBØČSc+aīVÍsz=é‡N¸ŠŪ7’tbûqīSéúާqr‘Ík˛?âm¤R°ĸMZ\ķHŋ4u4t4‡¯€(ĸ‘×w~hgŠ( Rĸ“<ņE Қ % Ļfœi´†]âŠJZĐĖ(ĸƒ@.(4”5čČĸ€ sE;MÉÎh{ŅŪ’–€ ;ŅŪŽôQA4PKIÅ&hi:œæŒŌĐIÉŖœķEëEŖ­0ô´”´b˛ømĘ=ųĢP[˙bĘŠō÷ZYŽKk[Xŗ*¤8 7Z{Ũ[Ŗ*´Č ”ëYˇvŋlđú¨ēÆŽŋP* Y"ÕåŗˆS|Ÿīt¯,qŊÕsĶ&Ÿ{W3Ŧ-ģIxÁd¸™#ÃŊkčێ•mŧäėhņũ(=čە"šÛ]?Xē‚yiMŅ–n1@×ō@널¯ĘŪ†Ēé†āFņܰwFÛŋÖŗŧ™áš_:]͙æč; ŌŌ9Ķ bĒ€äĶé“qq=íô–v“|•Ë8É=kHŦ d]cQ>öe‡ąo‹l‰pūd€|ÍĶ52ĸąífŸūĢw•š!`§ļqN°šˇßĀŌ´Ģ {ûgĩ 6(í\īÚîí¯í#’čK$ÎD‘ŒmQ] Ukée‚Õå…UƌáŽ8Šnf[{y%nˆĨĢ6Ŗ¨iO8–4ķâ=ŧmúͧĻ^hY%ÆÍģŗ‘VņÍch“­¯‡ŌY8T OįM‡Zf–ŪS,ĖTo™sëHfŨfÚjm=üļ’ĀbxÆG9ČĻIs> ö–HƒĘ’I?•TŌūĐÚũĶŨ"¤žX/J`tqYÚvŖ%Ü÷Pŧj­mČ=i-õMöˇÜGåĢsœâ€4čŦ¸ĩŠ)~ÄŪLŒ0C|Āz‘O›RÛxm ‹Ėd]ÎKm HV4hŦčõh¤Ķží˜&C"ōA§Yę‘Ū4b8¤×vâ8úf€/ûRVtēē •Ōxĸ8w~•vŪd¸&ŒådP„QŪ–˛ī5Ë[+¯"q o]ŧSKÕmBÕî­ü¸åx˛y+éUâ×,eßļR6 œ­Z´Ŋ‚õ [Éŧ !ŒĶėã˛ƒÉˆp:žäÕē§.Ąko?—,ę¯Ķ5Íä‘y—_S@RĨW‹PĩžO.9•ŸníŊņQ[ę֗J7ĄĮ?Åô  :œsMĢY´p9ŽËļ8­‘gvŪhy#ī˛¯ÔĶ%šŠŧÉdTûÄĐ›G:n\Ō‹Ûf DŅüßwæëNÄeōüÅßũŨÜĐI„B¨ė;­.)qÍAsgÖß>%“oM˛@°ų"$ō˙ģŽ*mĘŪúŌä0  ĸÎÕ cgŨÂôĄė-ĨJđĄsģՎ;š^‚€*.j'ųCĖÎwwŠ'ŗļš#΁$#ĻáRĮ"HšF :piÔԍc@ˆĄTt—•Ôëmo$ÍŅudË{yv× "˛Îę6mû ĐĨÕŦ7qųsĮŊsœ‰´Ë3‹ėéåį;qŪŽvŖé@šÆŲ­~ĖbO÷ilė ˛Bļé´7^jÅ(é@5 jĘöæã=õ[A°’Âˤŧ3ļíŋŨö­LR”ÍUžŗŠö*uܤՐAäkĐgü#ÖEíäeę{í*+ß)™¤âûŦ§šŧ)Ô´"Ūˆ;>?‰ŽIŠMŅځ˛é+%øģ3Ętđ)ÃKUŋ7~|›ĪãôĢæŗõ{ųl#ã‡ĖVm¤įĨ/ĸíęsHāē°k×Ō•TQJ(:ÃJRË'œō4ŧļjėDōH“MÉ÷•[ļ)>”™›Ÿepą3Ā“¸įĩRŅôÕē°ŽI$“Ë“īGģƒ[WVëu ŠBÁO]§Û+ŦŖŲ힌ŲÅ(ëąŦz4Ȁ*…ÆŖ°ŌmĨŗˇw22í °ˇĘ i^ØÃ|›' Tz6)ÖļąÚEåÅģoģf€+ęđFžsFämęK‹8Ž Ü.õīõĢT”­”[ũS1žĄŽj}ĘÖo6(°ũšéRę-rƒfŠōnčŪ•Ģusif“Dpaŧ5uĄÚ]Îf—ĖŪ}ŽÁ ÛÂą&v¨ĀÍUÕo'ĩĶūŅ+0ÆíŪ•)yæĶÃÅĩfdsĶ4ŗŽ”…C){T6héöĻS7ņéSĐ$ŌŦ‘]E´x~ŧTæÚ„BcSãiTŲĨīHd0ÛÅ âQe vVđĘÆ8Q ĩlĶųЁY[DÁ’Ū5aЅö†6pîŠXt$T„摘(ÜHĮ3"*–ę@ëNωŖ/°:ī?Úsu ކŒņIœ Râ˜Nę}!ˆh4´„ĐԊ);ûP0ihīE%'JZNÕ 5žö(æœi´ ļhĪĩ/j*ĖÃĩ&rsKŠiŨÁ;вi 4¸ Đ1šÎ8Ĩæ€8ĨīH@EGz( ŅLĸ“Ŋ-Ĩ¤4f˜æ€1IœôĨ¤R⒜3@ #4 ZLb˜”cփHŌŌRĐPÜÚÁtģg‰\c¸ŠĢ _[ŨZÍōŽųJōĶOė0}“ėŪPōHÆÜĶMĩKVļD>Yę7´jĩĮÛ>ŅŲüŋ+?ŧŨ֐Ém Kx(ÆxœÕ{-:==ĻxrÍ+n9íWN´ɟCIf™ÅĨŗũôę֗böŪSÎĶcîį°ô̆Ži€f˛ĩ ę2Á"0B‡ }VĩŠ0)ßÚÉ5‹[[˛&á´îôĨĶ`–ÖÕa™‘Š ž•ošhÆėRįĨciÖˇpę—3É ¤sŸīt­(9â€2.ŦīaÕM嘎E‘B˛šÆ*Ŧvš‚Ü_´Ę ÜGō´mŪē*n0ŲĻ.-5û$ąŲÆĻšÁo­tČĖ#_0øų€§n]ûGZ€rqīH.Gu ŨZÉ ũ×Rĩ‰c&Ĩc؞ÍĻ ÂH§åÅt†_––˜vķÍĸOg<-Ÿ62:įš4Ģ’ąÃk-Œ‹2 ĨŠņ\ÖčĻŌž¸™ô}fYŲāší >Âīíô˛œ,‘(ŽŸZÛÚ Ø>”(ÉQL +kącĢŪ¤°ËûÖʕ\æŖĩī4ŊEYåfPxÍt˜Ŗí@v:ŧEL&SŪ†˛üË{nėj ûšžef\Šéļ(mØŊhxŌAûÄVúŒĐa’Ít™¤V(][wvˆUôXU;üjôÖ°LŠ˛ÄŽĢČt¨­m"„ŗD›7uUéHwMm>8σRâdsŲæē{E‰mãXlxųGĩGöKy'gh#gÄTfŦû(kŸÖ•$Öôõl˜æˇûÕyŦ­f˜K,*Ō/F=h=á_øHã;@A8õŠ,ÕaÕoB…Á[Ö¯ũ–?ÎōĮ›ũęl6pÃ$Ž‹†“īsL.s×RE6Ÿu%´ģy@gfäœÖﴊtIƒvĮĮցŖYūõv6ŲHÜqSMĻA=Ē[š“ËNÁēŌ“koö+iŌ叛ÕŌ{|Æ%&)žCģZöv‘ŲEåÃģoŖ6qPEĨ,WqŌ&öÜČĘÔÄgCæŪj—ĘDE…U‘sSßŲųz°ĖC´jXOžŌ<ëĪ´Û\5ŧÃū*žįOiŦ>ĖĶɏâsÉjC1.tËxü= čŸŋ;Hlķ’jÆĨaŦvsF6Ė$PĪžM]“JķŦRÔ\Č28ēQwĻKyå+\°X°~īŪ>´î¨ûĸ—éHŧ )æ&ĶRO˜Œ’Ū=äĢ–ņž—|öé#sŽM0 ;Lļaŧf3Ë—ojŧ/-Ų‚ŦČXôǰy4Ķiu6ū6îQŠ­i [ŲΒĢģ:žįŠ@kuw tů€1Š;ôĨŖŊ !Ĩ4†…!âŽii Nô´wĨÅ6ŒņJiJ@'lĶO^´¸Å ļ4uŖŊd 9ĸRö Q׊:P(PzŌŌPE1 ŅGn(  ŅœņEfŠLĐŠ)i=čZ(éKLíKHih;Š “ˇ4€)sÅP9Ŧ/–ÉprfÖíPÕ´æÔaDY|ĻFÜ3L :•ąĶ•/-+"$855ī˜ēĨ‹ŦŌä%L`ņԜÚuÅɉonVHŖįjŽ7z}õ•ÅÅÕŧąIŦ'pVhG[†wÕ,Dw.›Øá÷Ģō‹čÄ0Į&ī”™&eū”ŨRÖâgļšÛixvÖ8Í2˙íō}˜Į+ŸŪÆúĐ+m[PēŒy(¯"ļÖPŧëšč—8âšËkmOLy t™%;Ũ÷ mÜÉqƒ?ā9Ģ7z‚ZKI3mVŦ}AJør͔.ÂHíNŋÕ-n¤˛Ęl ąÛ@—:ŦԘØ;˛Īąs´{Ôķ\´3ƍ Û¸ęEcj #_Æ^(vĻ ĮĖüVŽšņ˙eCķ†UŒ9ö ,cYëÍö™ŒŅ’÷]GO­Z“S´„pîâL|ëČÅC¤ymŖ_goŪåM’8ÛÂ+š |Đ3¤…‘ĸS*FF=)ÕSK éļØ?ōÍ•[4‰(jzŊžšcYyg=aëSÃ}o<|rŠ‹ûĮŠÄņ:+]X‚ĢķI‚}¸§ø“÷6Vé…ŒČ7mÆkÃ}orå!3áĻiYG+F×Ģ/ŪéP&œ^ęŪåŽYŒCåPVcŲC'‹ oņö Ž—1ÔžŲöŖ¸pooJĶįõJķSŽÚdˇDi§~DkQÛjÆ[߲Km$2íŨĪ"€40}(|í=ęœ’M¨Mgå˛ŧC;CKĨ ĶÍÖFƒ—ßÅ0,Æ)õ›ũĩUr’ˆYļ‰6üĩ¤9 ‰.`’gŠ9¤Oŧž•#6ÕÍfX_ŲŨ]\4••ÎÛpM 5 ¤Q‚xŦøHíY_ls1C‚tĢöڄVŸiŋv:įĩ6ëQĩĩmŗLĒĖ,TŒƒXÚ-ĖWüūd‡9įWí5 k›y%€Ÿ./”´wŖŊP—X´ŽĪíEɏvŪz5ë+ûÜnīŽ(ĻiŌŠŽŗb×"7ÎNUÖæ˜ÅŧRtéTbÕėæšhQŊ#H øâŗ5Ԟ[‚Ū•¤āāôĢoyn’ųM2$f—íPyo5<ŋīgŠ­Ĩ$°ØEņ”dP9ĢËJcGRāršæĖ7˜dWĮ\vŦ;F†×Ä7Ėėą¨@y4ĀÚvęÚxŠGZŽˆnWt2,ƒÕNj)ĩ XĖŠÃ¯=)gŒâ—¨dē‚4Y$•Uîą=iŅŨC+2Į"ŗ/ŪÁé@TD„Ȩ[S´WØfqžŲúÕą†  Ī4Ų>đâĨéUîīmí7*éžô.3ƒŌŒöÅC%õ´P,ŌHm÷Z’{č-ö™$û˙tu&€,úPÕ pÜFĪî ×ÚŠvÁ•ŋ}€­´äPŲ¤XÁ.p d“Umu {Š q1.9Æ*–Ŋp¯Ŋē8ũ팁ũÚģ5ŨĨœą$˜GqĩNڜ6Ą÷ŠGLÕY/ā†å “pwá~^ 6ãRŠ Z=˛HĘ70EÎŅ@ËaT18æŪĸ‚ež$•>댊—Ą¤w5~r;ÖtēÚĮ|ÖĸŪBÃÛ­CĨßųڅÔ2ŠGÎå L Ē+1õeY8…ÚūY“ļhÕĩ6Ķ–7X‹†l1ô¤ž9¤Ŧû ëģ̇Z˜bÆUzĐ÷ é֗Š) )Ϛ^ôŠC5÷QĀ貗86ßZB3ÔPA4wĨ4Ņ֝šozSH`i(īGz@%6I@˔qړ9ĨĪĨY˜bŠ;Ōž”œ3@Æ(í@´˜ī@ HhŖŊZZJZOƖ’Ž´´´””QEQE-0–ŠJ@‡šZ:S0ÛēņN¤ĸ€ )k'Ä7vöEíJĒôfū/€5(ŦËK̈töž˙fÕ@C/SõĨ‡U-,+4Jĸs„ÚûˆúАâYzËŲę?e6Ėá—*TōԐëÂO23i?XĀÉ  ŠlŪ&ļÆĮŒâ °ŊŽú6,Œ0=AĢC@´ÛąY s$˛ļįsÜÕÁUo5 kĢq&ŌßwŠrßÚ4­¸Œ¸äÔf˛õŋ"+ĸS#ŠU;rIĢĐ]ÛŨnJ˛më´Ķܡ኏­TĶeŠ]>S•‘VžĪōĶŸģHQgå ęM8Gũh7´ˇ’Mī lØęWšr[C&(âUŒ˙8¨-ĸē[‰ÚiÖHXūíGđŌę"OąČb•ŖeRÁ…9,-R&`Œ#ũāƒCéö’Dą<cS¸â ĶĨšëJŽBø‘ĶīZ–Ę;”€-ÔĒōz@ÁVŅųp DTŊ)‡u&€+ętŠ"Îå9R§PÚtY}’EgÄyüęĮĖiy  V:L6OŊ%•đ0ģÛ SWIuyæÉæŲã•rgxâfŽ=ė ëUtÛŲobi ˜$ K]-mŽäšČí'Ū Œƒû,ō<SB˛˛)­NsC´ Š`ˇ–fķ:aēž)öķ[E˛{“9ėHÆ*d“z‚3Ī­;šËņ°šąÜĶų+Ũū÷ĩ?ÃŌK&“Ã ÜUģĢXnÕVxÅ9ÔĘ6€Ē0“øVEū›po–ōÂUIHÚęŨ­bԀķ@pYß.¨ˇSŧL {[mG5íŽŖ%Շ–VaķĢž+g4›¨ĖSé2Âėpęzp*~ŪlÕā &ŨžfáŒVŽ@ °ĐEū$6Ö˛Y€ŌÚrū/ZvŸs¨^KæOˇ‰AqËÕÜĨ4ÍŧW>@i­Ĩy’]ėíéžÕs_Ž[­!|¨Ų›rą\sŠ×&Â€+i×_jƒ>T‘mųx1ššÚ›ŧQģŠÁגXĩ ;´‰#?6Ū´vnõ›ÚtE Ë/­on—Šasdēüī2°ĒĒšÍ•ĖcYąMÜĢŪŲVÉ+Hv1É€1nXëâæuÄ3G´IŲML&Š}~6‰ÕöĀrWëZŽEÃÃŪąíäFņģm.h‰4ž ēk‡īv–āU`Vęm`ÛĘȃn;ÖôÖļ÷LĐĮ!^…†qI´.^Qē•ĀŗūʸĶa[ŠHeᐚëôޚ0NJĢ÷qÅUmŸÎû<~g÷ąVø oēyŦ-!ã:ŪĸĢnÁũkqÆå#Ž{zÔQZÛ[ą’8cŒã–—¤˜ĶPÔŖmĒŪfvŸJvŒ‹į_˜ņös'Ę1ÆqÍVĶÖëUŋi„nKšīô­ßŗÅäBėB1…â€2|7˙S˙=›ŖĐfŠ(o7:!훂kVĶOˇąŨä)]ŨrŲÍBÚ-ƒĘŌ4 YŽO4 ČĩÛ'…îžé;˜ū´ûØ#O Û|Ēä?kG¤ŲА.OŧšëI>—i%ēĀņŸ->čÜxĸāfkë‘fŅ…Ü%+Ą?tV\šŦëš“ ÷~jÔU {)\LģO"šíÖĒjē_’A´cî×EÅg&‘ Ws˛Ŗ9Üʆ  …´xŠÕZ0DˆwŪ­j1ŲÛE †“÷qŠĀ-O¸Ņcžëí&âq û¸oģS^é°ß",ûˇ'Ũe84ĀĄĨ–:ÕöđĒv¯ŌZĮž#Ŋ.ĒØEę*ė=ĩŊиvũ¸åēĶaŌc†õŽ„˛™ī|ÜUąũÖŠŠŦc*Ŗ§JŖah—šl5ķF$bd_—­mÚéąÛ\K:ŧŽŌ}íÆĒÜøvÎy„ƒt6YTđh¸õXá_Äą?šˆĀ+փ[GiĻI%ŦAd1sާŠuî“Ü1ÃŊâŽ>Š*Í­ēÛĀ!Ōũū´…§[E}ŖĸIvҝ;ÔcŽkĄ…B@Š­¸*āZÍXŧæ]Ŧ䠔Āįî¯âÎ9<åQæŒÆŨįŊKâIŖk‚Åœ0¸­ŋŗÃ‚<¤į¯ī*3‘xãĨ (›Įm+ΞO1öüĒEWŌîĩIŽÛ :㯴(ÚŊķIۊ;ŌiŦ7z^ôš íGj(j6–‚8ĸÂŽôdPzŌ;ŌRŌPIŠ\ŌÍ!–ūíĨīIО C͸ĸĶëŠ1Gj3@¨Ŗ­´¸Ŗž”¸Ŗĩ%-%Qž( RŌ ( RĐwĸŽ”™ĻķŪ–’–€Ū“¸ĸ€ ("@gkņŧÚ\‹—`AĀęy­ Rb€2>mGE’ŠHÜ \:ã$StģÛi|˜Ų–áT˜úcŪļ@ĨÚĪ ÃŊ’5ņ-ĻO!?ԟo$K¯]°nLc9­}Ē[;G×RۊŒúĐ>ƒ"5ÅúÆā¯›¸cŌļ¨ãˇŠ6-j„õ u§÷  ŸB“X+9•×ĸÔ,ā{<ųhš|7F:VĨՔŠĸtܧ5Ú|<%Ė™‡îaŠÜ ëPkqųCføOĘŊ fÂŗ^ë7Ŗ÷NPíU—?(öÅmĩ„fø]ī“ĖQŽŧUkŊÍyöĢk—ˇ˜ŒŖ­Cse$~š —2ĘĘOÔTš=”mkotZO1ĸÚrÜTķiŌË`-~×'ûny-OĶ,ÚÆÛČ3~îGJfięÖ ŠŸ1ŸĘ?.ãžÔ°Xũ§I7\JĶēÜôĢöē{Ã=ԒĘ%YūđۊĢ•}m°[Ũ§ųÚrW4ë(ä“èąČc/†Zd¯káĩ¸Ü^MŧįœÔö–W–úiĩķbČU€< uļšÃH67,Ŧ0FåPXŨ5‡Ú–öo´•ß÷ž_\bĸžÔ.ßFļŧ‚O-‹ęSS-ž­™ŗ_)—V]܅úQĻÎē\6Viŋi˜ļ(fŸPĩ¸ĩ’YcxfpŦzf­ŪË{ö…K`‘ÃˇsJüūĸˇ3}mŗŸ-ÕÛqPßĨÃjØ{gžŨŖÂ(?*ˇŊ44ËĻŊ°Yœ Į ã§U] – ŲĪʲš>ÜŅĸ™íô÷ŠâŨĐş}ßJ¯¤E4–w°M‘4ŦĖĨ—hS\wˆÜf0›¸‹q&šĒ\ØũíãSr;úUm.æâÆŗšÆgul+ÁŠ|G!˙CŒ#Ūl.pēĩō^C Íĸ ˜|˜nūõ=ŽŖq%ķŲŪ@ą8]ĘTäP^ȏŦéãi!A9ÛĐ‘Å :Éâ—ĸÅŗ§zm÷ĒK¨ĢjMd"}Ár_UÃYļēÄW‹Ú^9W8,:ŌŠF)1@ĀĨ{¨Gi*Då•ú"uÅ>Ōú;Ŗ ČņđĘãVĄļŖŨ°ēa[8ĢØmb¸šˇũæ2Ûŗ@&ŠhķyaĪ-´1)>™Ģ3Ī ´{æuEõ5Îīķáąh’(`y÷SČúÔū įPĶüßø÷Ũ†ĪJšĢk4Ē#“÷’60Å\7–ņŨ-ŗI‰[PÕ#Cs§QŸ8`Jeūßíû Ė ÔŠö˜ Į‘æ/›Œí¨åÔ,á}’NŠũĮĨQŸ â(qÕ`cúÕ .Ų¯ŦŽTΰŧŒ$A4Ō¨V”mĒÚ}ŋŲ,ã€?˜}ęĩ@Čņ›åeEõ'Ô¸‚MģeCŋîķ×éQęP­Å„Ņē†IõŦŨÂŨ´ûyÚ e\Įĩk<°ŖmwU>„Ķ€V¯#ÖšŨ6ŨīžųŖķ …réģļ´ËW˛ŗX_7oCЎˇŠČ×îžÚŪ(ám+íÜ; ×löŽ{Ä6ņÉufäąf”)¸Å‹éRCwĐ]žŅūą]ŗēļp1XÚ­Žĩb"2mmŲ‰íR‹Ģ‰5ÉbNV$á `zÚŽ3T+Ļ´¸K‡ÚĖIB‡+'BĩšîŲf’ęQåĘp õúĐã­×Ûc1˛}Ÿ:žšŠÚ5`C co¸OŦMpĪ !`ž•ˇš¯ …Ŧ2ų‘A?¨ZœŠvxŽw_ķãÔ,ĖžcmÚ:zßÅ(QXen,u{UûT“$ų ¯ė*YŽ$šÔeˇG‘c…FD|&€5ņF+onė´Ë™nUˇ#b=ũH횚Ų/åüī†(ÃåÅjPĮjäž+ {ŲŽĩI-“ÍōለXˇkÖĶnqļEČF~I_zŽmFí 7ļË[!;•žņŊ[†{š­a™cŒ—äŽq…Ŧ¨w/„ūR>éŨŸ­\ģž:v—j#…E fÆĶIŠÅŠæō;øUDōBüIæ&1î+k¯­!Î͎¯Ŋ7æÛÛ4¤ņXĪŦ4ˇ“AˆŌķ1BŲ4°sŠĖ¸Ô.2íohbûî[•:ŪöâįL’UŒyˑĪûÖZI:øeˆMû÷nlũŅL ĢĨē‹ÍuUVû uĢ{Mgh˛\ĩ¤kÕ'ŒÕÖ¨ëA—qģoÜ8Ũë@ Łō˙ŌT™oíZ%gŒÉũĐՂ-mÛÂč †īœÕģ­:–Áâ#q"å‡Ō‹ Ų’E—`ŖÜŌ‡]ģˇ žšâŗ/ü‰oŖWVšeBÂ.ßSQéqŦú$‘ĘšR\môæË"0Če ô昗0ŧíČĻDûĘJÆĐ-`–ÎŪwÜdLíį§5ļëˇjw‚›\ŨÍ1›-öŋˇŽß/ėģ~oīfŦgŸëYÛĻ]Ë2ąˆÃ¸'aÍQyŽ$ŧž).ÚŪp˙ē >B´„oŠ}1AÂį¯zK‰<›y$=KPĶF˛,lëŊē-?5•ĄGæĀײüĶNIĪ ė+Bå™mäd]Îáh6ãW”,¯kjeŽÚ͞ŋJŅļ¸ķãFōŲ7.ė7jÆŅî×A7&”īfeSVŽ5_"Ę ¯ŗŗ pŨÍ05¸ĸŠ\^ŧ[¯_Î8ų[îÔSj˜šx-âķŒC2ÛvûRJŠ­ayõēÍN„ÆŦĐESŸQŠĖ ˛K(es´Tļ—Q^EæÂŲÁ†˜â“ŌÕ-OSƒLŒ<Üŗ}ÕM .IPZß[ŪDd†@Ę>÷ĩ,w–ĶK˛9‘ßĐŸ*į8ƞ%“cHĄēã4ĸHÚ=û×gŽx 6pvõŦË=>ãûAīoJy€mS°­!,d€I# fŸšRŅL.-`ē]ŗÄ˛ö…$VE Š8•cnĒQ–inõG´ŠVŠ8“s2õ$֌ ņÄŠ#ųŒ:ˇ­!•‘cˇoŲĶÍO=¤y3F=j°@4”…svšžŸEˆ,xfÎ8­í6Ū˙ož2}ÖS‚)n­ícŨw,J]íĮ­F÷ĶCžxÃÔášQ@=´ <{èĮŪ&ĸ¸ĐmfœĘH˲Ŗ`5j#@Ęx#"L.Gk K *Œ x ŅH/-Ūæ&hˇue›§˙gÆcYžEė­Ú¯QÍ02.´A%Ķ\[ÜKnō}íëBÎÜZĀągĮVcÉŠûĐzĐYzŽ›=åĖ2$ëDw*íĪ5ŠE 3n4ųĻÔ-î|åÄ?Ãˇ¯­6īN˜ŨũŽĘUŽR6°aE>īQhdxííÚáŖ]Ī´ũÚąav/­V`Œ›ŋ…Ё•zļNžjIpŨØaEVŅ,o4ôhĻhš2weIÎk^—Šm/Ž´/6Fc °.îqë[4´RŦ=ONžŧž†ThDpļäÎs[˜Ŗsgy>Šmqļ?.öēŌ^XŨÊ ëŽYvÉfļM™sgs§I Ų$~T/E¨l%Ô`Š;Yl÷lų|ÍÜb¯\j[ģo,v›jįmYFY2Ÿ•†EbŨiˇjm}`cc Ã#ÕáöĪėé<ôW¸`~XęėŽ‘!y*ޤ҉2•”ô#ĄĻÚ^/‡ÍŸŲĪ™œ}áĶ9ĢÚ|ˇÚ\*˞,VõŗIH.dXÜjrʉqj‘"ũ÷'¯Ōĩē Ąęn>ZæBŨéZŊÄŠjķÃ7?(Žž“ĀΚę_ėŠ%’Ũ㑆Me[Åpūšßɑe^Åq‘šé¨"€3ôk†šÉâxŠ(SŧuĒ>#“P„,Ö¯˛Æ[ŊmyŅī æ.īLÔ7ļßlYŧĩ9* õ M¸{›f|ėš5f„E¨@Ā—Ĩ \Ô0ŪØęamT™ˇ+)ĀĶPzPÂŌ­îŪėMFō30ÉŖBk›x–Ö[G\™ âļņŪjã“ĸĐAŖ–â(vų˛*n8Z@cëP^\ÜBĐ@]`mųÜ>jŠõo^ūÖqnĖ›pc'îŸzčETûmģŪo0yŋŨÅ0+i°ÜÁ4ë*Fąģnj+;[Û;ųʤmo3î-žEkoEp…”1čš§vâ€1æˇģ˛]b1ŽŪŧ‘D–—MŠ}ŽÕŖåvâĩ˜n<ĐĒz n3'Wąš¸{i­ö™!láŽĻũ—QžöÚyŧ¤u k`žhǏŒËŊ6WģûM¤ūL„aøČj}ļ$2ĘķųĸP7¸§Ūj g<1ŧnÆVĀ qV..Ú?6LāqĀÍf ā‘ūÉvđÅ'Ū@3ųUĢ >->"ąd–9fnĻŽÁQp S¨´€JLķGZ(uæĐ*;PzPiqE Gz ŠCõ¤4´ŪôRRŌRs8¤ {ŌöĢ ^ÔP:QŌ€Eu"Š;QLíKڊ =é{Q@ ĀQš;ĶĸŠ1Í (Ĩ QŪ“4Ŋi€é@ĸŒĐŪ’–’€ŠAE.jŊåœ7Ņyw Ysœg`QÎh‹éVĪf-v°„í N¸ĶĄ¸X•ÚOŨ}Ü5\Å%gÜéQ\^-Ī›,rmÚvdRÅĻ-¤‚äE~‡ûĩ|ņUnŽg†xs*;aØ GĻéŋŲČcŧ‘öVŠôŲ—QkģkžfŠ\ä ŌŦã¨LšÂŲÉŦnĨ‘ÁįŠ{Ú\UnƒGåŲˇŊTēĶo.WČy"0‰7Ŧ‡;ĀĪJÚÍ €)—Qųö˛Æ?§ôĨ  ¯HMXß…Š0ô­)N#l ņŌŠ<Ũ}ĒŨö˙Z›ßëWbXŦąčwKÆā?qÖŦZ@/4$‚U*L{pF5f{ûX$XåQ‰čMZLČ9 f&ˆĶÜ6ë• Û/”¤÷>ĩS÷~­uũŖxĻ;‘ĘäWMޏŠŠÃ Ą‡Ŋ0*éĻÜÛnĩˆÅ›qššIڊB9|%ļŊt5dŽnQ÷+gIK$ŠO°6č÷|Į$ķVfļ‚éÜBŽf$qĮ ‰B(몊`>ą‚€5ŦuģžXJ”’/ŧšÍ_ŦŊ*M>I$kvņ†p¸´ųÎiíäV0féĐÔšĒš°—4>qÂĀūuWÅI5ŠđŒw'ŪR0EcęGnŊlfr‘!\`֕Ĩ­´SÉ4S4’2á‹6i×ėļˇĖäŠÛ÷y§]]X4ļņÜaŨČ1‚*ŽŽŅkj ōüÍōûՍYcûfžp ‰zûSõÍė6Ŧ¨ų.˙uW’k#í)sâvŖĄD!ƒ. K$ŅÛø‡uÉÚ¯ŗtÍ6iŧKÖ\Ī4sÍŗ—RŲˇuĖKœã ĻIŠŗ\<–í;§ß;°4•ūßĀÆLÖŠéŗĻŸ{wÛÚGÜŽŨRNÃR[Ŗ"4mŅ}čĪZ§ˆV•RÚRéü dÔ6-öfâî3ˆvîõ¨ôIĸ7š„Ûײĩ;§gŠG{ĖĒËŗ†Vę*(ĩ2XC@ËėU=qT4ˏ/Nžš1žEvlzÔjŽė'yÚO˜îxCč)X ]kū]3˙=ÖĻÕ/ūÃmå3‡mžÂŠxŽá-×?8>=ĒMvUm:2>`î¤ {Đ2mGP–ŨāŠS$§ŋARiķ]H’ ¸Õ[¯ņVvŗ$/ągŲvf9†ĢZ\Ļž>ĶģqbT7\QĐ 0izŠhŊi´˜ĸƒ@ŲÅŠJCE-!éHaÚƒ@č(īHõĨ=i§­­'4RR{­G4ĸ AÆqRSH #5d+š>´J9Å“ â–’€4‘IŒRöĻڎhę(␊(ŖëG֊`KIHaŠ iE1(Å/JJ@ŖŊŠ`čĪ4tĸ€QŪ“œŅŌ€¨kZ‡öu‹J 'jįÖ¯Õ=RÅu 6…ŽUoCL r5Ō>Ũöįķ6īہˇ>Ŗys‹mu¤HvîãīfĢÜ BĪF–ÖXHÕ6ųŠßÃôĢWvŗ]øv­Ô؇“jw“ÚAm,l>gUe#Žio.îaÕmaRžDŊxį"¨^.Ĩsin†ĮiŠE?|âŦß%ܚ•œĢlÍG,Á‡zŗyw:ŪÁgo´<€ŗ3sĩjI×ÄÖ˙huqåļÆQŽ=ęÆŠ Ėw_Z'šŅ‚­ĒÕWžęMVÖæKQB•ĀųēĐÛŊTĮ{öH| Ęģ™Ĩl(öĨMRItš.ĸˆ<‘’ ƒĮŸx›­5Üđ—ļ™q¸.všŌû\-ĨË8‰ĸˆŠëøPņhˇg!\á™~čĢ-¯Äky„2cl¤pk2ŪE‘sķd‚?›U–/øG­—räėĮáր:0r3QÜÎļđ<’)aĮ’˜9Ō\m6ōnÆ6ž´„bi°Û\i -đR˛HÎĖÜw­9¯mŦlãļ"Ā Žõ“§Ŧrx^@ømĄĪŌ¤Ôŧŗá˜˜ŒáSōĻ3fÚæ¤ŨŠāuÚzTÕZÆĸL1ĸnPNŅ֟%ÜʰÉ*,ŅI¤"zJ)h’H‘.éTząÅ"ĪVE!ē`õĒ:õēOĨM¸°n_­sß`Eđō^†9pCoā ĶąÜ ëK\ũÕŋŲdŗŧŽYÉ"Ŧƒw šŋŠ™÷Dámáäģgæ?J@hÔ“K21š @į#ÖŠh÷S]XHĖûY•]ģúQĻĨq‘=ÍĐV’7+…é×€6M%bĸę§‹Īĩ~ô¯™åíqéK&§,úŧĩ*’(ųƒ ôëL ĒLVN™q¨ÜčĨļÔāšmąŦ˜Ûģq^(ÂM’:#ŠdûĀ•/jŖ§ÜÚŨI;ZĻ[Ûq“W襚â(yŌ*g¸õ§Ë2AI+Eä“XZíõŊΚČģˇ9Yd#<ö4ŊÕ}ij$qĒ™Ē2MÜÃ6Q\Œíö $ąČÅQՈęĒŗiëqx“Í#2ĮĘGØZËĶĩ†ĩ|ĨÖ5ãhcøÖōH’ŽčŨY}AĻú5\D¯ą¤PŪ™§ŗĒŽæ`ŖŪáK€JDtqš0õZ-FÖYŪ™wĄÁ  @9zœu¤–$‘vČĒĘ{RPzĐiÆģQB/ ę\Ōg4‘‚*8â†%›ŽĻ_\}–ÎYŋ¸¤ÖEĻ™ũĄa ÄķʓšŪ[woJßĻKMG"îSÔUFîƒ=ésĪš† K{R|ˆV<õÚ)“i֓KæKlŪ¤UĒ A-ŦS@`eÄdcjņMļą‚Ö+ˆĪU'5gĨI4ĢĨĨ˛+އ*įԃEP¸†[˨՗mŧM¸įøÛü*÷o­*˛°Ę°#ڎ=(ÃMeÔäŧhÄ)Šīī[R­*œ“íL¨ęšpÔĄZ5'hëWé§īR*ķG{ģxa{ĻÄ|įhä֔(ŅÄĒ횀åŊiüūŸÃ“úĐŗ‘ĮJ¯siÜ~\éŊ3Ķ5Dj3Ëį}ŠØK-ˇ%ąģéZˆÛ‘I$r(Ģiļ¯l-Ú/Ũš4étûiš3"nōÆž•g4Pk›.ĸÍu3ڛm§ÛZÄŅCÕoŊĪZ˛Yz14P2”ZE”2,‘ÛǞœƒOŸOK4AŲzzUœķFG­AseowYâW§ĩ@ē5ŠJ˛Ŧ2t9ĢÜm žæ€+›;s7å/™ũîôémá›dJøé¸fž’,€”`ç—#րv…}1QĨŦîŲzázÔWąÜM‹yÄ,$‘ÔU‘ī@ˆ""8ÕwuĀëJaˆûĩ㞔ōEFōÆŽē†=ŗ@hŅą•R}Å Ēq8ĻŦˆÄ…u$vÍGsô§Ĩ:͇­ƒŌ‹CqH(=(´”vŖĩô¤íKړĩ Ŋ:ŠCHči +uÖæ€ nhéԊC/IŠQIОRŅEQH)é@ƒ­¨Ŋ¨íGAFx ¤íE˜=čéKHM“u´ĀLŠu7ŠĨ¤!zŅIE0ĩ7ÔęLRīGņQGz`-%¨ U+NŪÖá —rŗā)ÛĮ>õrąŧDpl[ŌāPbŽ,Z(^4 Ã3úU‹(ŪHã”Ģ2¨^”Ëų­Ąˇ˙KÁˆĮSKsy ”qī ķü¨Ē2MYĸĢÚŪExŦbÜ6ŦpAĢ (;ņE- Œ‘AZmBÖ –gE‘ŋ„šr][žāŗFÛ~÷Ė8  |´#nÕÛéŠkÛÃ"…x‘”tiŅI‰ē7W_U9¨b‰ŌæW7 ęŨ#?Ã@UT*ŒÆ)$U’2ŽĄ•¸ ŌîSœ0ãہ@F›h°4KŦoÕGzqąˇkO˛˜Á‡ĻÚą‘Ķ#>” ‚ŌÎ;8ü¸ˇmĪņ6k ÄVŅKtžG˜o[ ĶŌ{Rm]ÛļŪ¸ €2ĪĖf¤â“ņ P{ûSyjЉZ=ŨYjƒh­ũ•öš8ĪŪ+ÛŌĩÍ%03n´Ų.`ˇŒĪˇÉ*Į Ԋeõ…ÔšŒ7P4lv•“8õĢE!™šEĨՙ™'1˛,Ĩ{“I„“XŨ[\(O5Ų”ƒžĩ¨( F$IĒAhlŧ…r՛v)%˛–ËBkHbiåpCmėkvŠÍĐŪabĪ‘4@.[øĢN›N  ÷° ĢIanwŠfčQŨÍę1/–™î=kjšx4’&Sâd˙ŠŲœqœį›Ž•ws á„ržô“s[@.sŠč2Ędš–ųcųXļ9\vŦŨ6K[xdĩÔbtn~ōįvk¤ 2HúŌã-¸ĸ–õ"˜ĖŊqâ]DÜ2ĢV´Šb“N„ÆĀí@;U‰­á¸M¸7 Ņ B…bPAŠečeMîĨ´õĸļ3PÃg.^(Qē•0Åcø™]´ÜŒ•Y|zS5‰íåŅ ‰Đ—n>ĩ´čŽŦŽ+pAĒؚ~Ög_›¯&•ušBZZ’HŒēî"ŽEjsĮÚF ōŒŽ•;YÁ%ŋŲäŒ4XÆÖæĸ˛ŌíŦ¤/ ļãÆYŗŠ@QąT}sPŪĒÄmj#_ąęwIlvbķ6ÍVĻŌ"{ÆēŽib™ú”jžŌĘ+@Û73ŋŪv9-L }:Ūkũ,’ņƒ#Ė˖ëVĩ(ĸy­"ŨŲy(˙YõŠbŅ–Ė‘\Jˆ[w–åÍMw§-ÍĖwGŽXø ž”SARņY6/œ@OîÕ-"ÂÖmBųdˆ7•'ÉíZö:hą’VI]ćqVõ¨×Iō¯žæ ‰#ĪčhĨĩGÄ3îō¤GÛ×iÎ)ÎĄ‘čEsZ=—Ųõš>É#=ēŽsé@1ëKE€Čņ$"M*Fܧ fĒß+&hë# Ą8­-VÁõ<7–§īqœÔW\ŗXGj.>æ>bŊqŌ˜Ęž!˛ÍŖv dāĶo-žÃ¨ŲÍ Ōn–]ޞ \𣏕ܯāTSĘ!š^Ļ’˙MšŧšYãO$î.y  \ŌĶP̏äã“J)ŖĒ’ˆļķ$+Ÿ˜ķjĢĨ\ŧ×–ūsKDmsךMfÆîâōŪ{}Žąuē}­ížĄ<˛Ŧ^\ØfÛØĶ_Lž”Ü]ÛM,’ûUąĐSíåžãOÔįcą™Qûâ’+û+ˆļHž9›vį=*]2Æę(.ĸšži,ĨO­E ÄđY™šâCƒûŗĶëHē…ŨÅĄ¸ƒÍ.[äE@WõoKĩ¸ŠÉ­nc@ĄH ­œÕk5 5MĒBŗEģ*ûąŠC­Īy„w0Haéæ.9æĒËsĒŲ,É,r,Ŧf=jūģÄö>L™ˆÎJ‹P†yãŗUŽ×VaũÚb÷šžŖn—MÃ;mųGŨ­žõĢ‰ō͒ a“sZŲ *ŊëN°1ˇTf˙hâŦcš­}qö{vsŋ`ri•áŲ6i“É!Æ$f5iuF{5šE-žmĪz­ĄÆÍĻÍm42DĖ[ī.:ҧŊũ”ki%Ą‘°˛+ b›ÖäēYmZŪ⯞¸R¸či“Ŋî•s˛]ˆe}ŦŦŊ*O–[{r€oķ†ÜÔ˛Û]_4 |[÷yųj5ˇkvîŲį‘c+ģåjŊĨZ^YF`“Ë1.v°ëQC§ßޤ׆HAnÁé@ë°ŧqÚųR¸Âc=j{Ų¤›R‚Å‘w;/SíSęvŪy~Tˆ‚6 †^Ļ™}§K4°ÜÛČŠsÆOCHįFĶŽ hĨ‘Ŗ‘ö21ÍSÔāWņ¨ų‡˜>lžļww7KzČĢ*‰ŨŊin4Į›PK¯´0Ų÷WoJc*Am¯ˆAōĢDK æŖÔÄŊÛĸ´ō*í9ûąÕ˙ėÆūŅŸhbq¸íéL:"´ķąž@“rUN9 žĨ™kmĒîÍû´ũ7T]AĨÚŽģOFŠ×O‹ėŅÃrû:3 žx`]Æ¨ŋėŠZ Ĩ#€ri{Ō(4Ŋ !â€Í%-&0( ôĸ“†Å.€JNô´´ĶM§Si ŧÍ-ځZ‡Jf€ PP:RķE 9ĸŒĐEb€ (4SbŠ3ŒqFGJB QÍSīEčĪ­-%-'Z(īE! ĨīIÅ--sŪ%ēƒ}´^bīIC2ú ßÍW–Î fY^/ũâ9Ļ ~h›HŨšYY—iZ]M"¸khÖ*uâ~Õ~{+{ˆ„rÄŦƒĸãL}>ÚXŅ$…]c\ö e}wšˇg‘WzČU™z>;ԗúĩĩ„ņÅ>ėŋp:U¨bŽ *(čV?ˆ"{ˇKh-<ÉŽ#„ZĀÁ€ äôTVҘm㈜”P Š3HwÄ6ąIŠX’ŋ4¯ĩąÜSĨĶ-ŖÖ Ž4ŲÆK(設Í.+ģ”žE‘:m5#XĢ^Įtd}Č Ûî2ļ ZęWpCōŅ`ž„ÔzlNŗ~€ą\)äį¯5z ?&ęYĖŦí ÁĪjl- Ü×qs/PGOJ@cYéé>­}–PŠGĘĢ–2Ík§ŪŽöĀͰˇŨÕî!˙>õ †Ĩ=Ɵs<ÍÉ#tĮ­ 4¯n>ËnĶyM&ßá^ĩ$ųĐ$ģJn\ínĸ˛æÔ/-ô¤š’w<°<ú‡“ödōˇÍ?Ũ\ãĩ04(vĒÖw†édŨDņļÖVĢ9¤A5—6˛ąÍ:ĮȰŦlã5Ūĸ°i˙kU.ģwL ´Ŋë7OՖúŲca".æL*KÕ_P‘ƒÛ2íbƒë@ԝĢ:]bīՒO1Fx^ŋJ‘ĩ(Ũfpéŧí Wæ&GJFeŒe˜īUío#šķ†VŒá•‡"ŗnĩ Vŋ_4‰ A‚vä+{Đ3edWFéAuSķ0ZÆ{¨-uxüŠ#t>bƒōƒØÕËÆŗ•āŽåÔ>āŅŽîĻ€/ŅŌĒÜßCjʎIfûĒŖ$Ķmu(.Ĩh˛HŋĀãĨ‡¯5ÄņÛĮžW =čJŠIâ…y"ĻŧiŪÁ9eWų”dŠ8ŦĢV‹P–úK¯6Õ'  “Z‚[ԉa’-¨ÁÎæ­[3ĘnŨØįoJËŅ<ŋėŲR 6â}*ŌjPáNÖąÚŽGĘhö)8ŦgXūÍhŅ#ŪīĪļ*å…âŪÃæ*:s‚`Đš;ŌwŦÛŊf [Õļt}ĮøąÅiĶqT`Õ"šäA˛HÜōģפML6Ĩö6…•ąĮĄĩUĩžŠņ¤XXæ3†ČĻĨđk÷´1•u]Āö"Šé‹åꚂã`hõŊüsŨËnĄƒĮ×"­wŦ˜8ņĮũq_įIwŦIĶ$åÄ#.Ėp(\ûŌŠÖā][Į2ŒPqSCI€>´§ŠJF Ō7JC@õσKšRi ‡­ŽÔ"€ԙųhíGjC° öĻįŠ\ņ@ëHzŌž”Ōy¤MĀĨĻž´†hQGZilv­ ĮQÅ'QGķ bŌf–Œq@-%(ĸŠfŠ=č¤Ō­b€ 1EéˆhŖŊ×mĒZšģeUb:ķO#={ԁ´`t bŌQIõ Cž”E€ļ(¤4Å´™Ŗ4 (Íh¤éKEŽ(Ŗ‚€3SWQ~֗1[ūYŗŊW.g0@Ō,M.ßá^ĩ‰ŦZ5ū­*ûaܧß5cKÔ$Ül¯H[„āüB˜tí@j)#Qũîõpa†k3O-Î˜ÜģØzu4‹¨Īũˆ/v!“nâŊąH Z fÜjŋgŌâŧx‹ vÍ(Õ—ĪŠ9 •\l‘ē@@æ¨Ūj+m4p$m,Ō}ÕSO´ŧyä’)mŪĪ ũ [ĻK–6Œ–¸ųN ?5Vūú;–Yƒm-Ž>ŌŌ+8ŧ¸hę}ÍOUdŋ‚;t™Ë*?Ũƚt×°ÂU]›s …U$ūT °EdjPŨO{jb…™!}ŎkF;¨¤„ĘŽ /SéUâÕŦĨÛ˛uųÛhĪ­.`´ģFz ‚{Û{v 4ĘŦ{TÍÂî…Õ×ÕM) ǐzäPŅŖTĐNn­"’Wæ cL6Ōc\Žœt¨ÚĘŲį˜Ęw㚘2ąáúŽpdPŗÍfŠSšĶ`šģ†åÁķ#éīRŨZĨÜ- ›‚7\Tôčšŗ‰íĢņíÛķqU?ąŖ)åũĸ} ‚šn˜ŠĩKšl­ZxcmûŲ=*Í´†h#”Ž ¨lS Ũ„wvëŽų^CƒÎi,ŦäĩVķ.f<ŨĒÔ˛$14’6FMU‚ęiePÖŦ‘0Č}ÃųR”zUâj?kûTnO)Ú­ę6&īËxåōψåX ēqŠ`Uą†î-ÆîāJO*ā ­gguk¨\8ŧļâIäV 4RîŪöX]ŲÆ’MŒâi ÜW—W3F„ēĒ‡ŠĢÎhĀĻ&‹ åŊÔū}ļę‹įpâļķIĶ“M†hæĸup įv^Úkđų“Vg<Đ}+ĻĒëg Ü4ûs#9ÅX c&b‘3*ŗ3…ęk Gķí­.Ö[iƒ.Ŗo\×@y¤8$€=i™áä’=?˚&ŅŪ­J„ÜB’ˆžTŠ[šš€1rŌëâEŽAŒĄb¤ Ô6Lú-ÔĐĪŧ3>å‘W?oŊÍ/ĀĮ°IŽ5ioš6Žģ0ÁozĨq§L5–Š=ßg¸ųß=ëĨĮ4wĸāe덷Lh’7f| š¨5&ĩŗĨÖøH|rŽ6ŸJÜÅ5ãWe =Ågh3O5†éÉc¸…cՅh–§Ú“ņ¤+u~nĸŋŠghr4_ŧ=ëBf áƒåœ¯äÆXļÅÜx'PGŗb„ūījb)hû—F vsÍTđôņĒO8yŦvžĻĩm­ ĩÜ ‰Sw\SÄŦž`CŸâĮ4 Şh‡ˆāmËūŦŠįŊZÔîĸ†âÖ'HË;pĪŅ=ęŅąĩķ7}ž=ŲÎvĶįĩ‚éBĪɡĻáH Ģ_žMLE yXpG–ĄĐnŦâąxgdIâN3[qÚA ždq"61*)tģ)ĨķdˇF|į8ëL ģ‰ mnІ[Į‘Į­XÕR/ĩØ3/Íį 5\ŸOĩ¸xÚX)÷ifŗ†Ic•Õ™Ŗû¸<˰øšoĩqŊ1jMMÕõû/ŗ˙ŽSķíô÷­‹­>Ūņ@ž0øč{ŠK]:ÚÍɂ<1ęÄäĶÖkŸ×¤ÛĒXųŒRõĩĐŌĢŪYÁy—:o_å@ĸ˛ˆ] ÍËJû6áˆéT´ĄíMBŽÁ!ųkBÛJĩŗWō•˛Üc“ŠlZEŦ+ @ãÍážcÍeÛî“Ãųxîá~´šxĶ&°ƒĪ”ų‹€PšûßJÚŗ°‚Í +uæ…ĶlÖ_4AwÅdø•f°É‰2MmÅ2JĄŖeuõ^iˇ°] IãW^ĀĶā‚+xÄp D…8×=ŦIë)šrķ{WCš k;fČĐÆ\žX¯4 3ŽäOíË% 2Ē­ėÉiâ8Ļ™ļĮåãunĩŦ>`—ĘO3ûØæ‰m┃,høé¸f‹ŒÄˇē†4‘žTÅ´{Ôē|ņ6ŗ|ģÁ-ˇúV°‚ ۄj×ÔĩrDŠŪĄi“m¸ Fv‡2˧FĒyciČīPkW7ŅOn–JÄ1äĒį5°/céEv.î¸æŽÔ§Ĩ'QHb5ĨfŠAšwķ¤ PHÔŊúŌ5֎ƒ4RP1ĨíŠ(¤H@ ôŖ ¤H}ŠO“4´”šoãHf…&9Ĩ¤Åh@RĐF( AKIGZ;Q@‚Š%ŒņERŌ(Íč¤ī@ E%Í-”´´čĸ€ ֒–€ 8Rq@ŖĩbŠ3ͤ -/NôRE-!4w¨nnĄĩ|îsŒĐC=ŲÖ…ĪØdōÂú^ĩkUĶ~Ũhđ“§(ŨëA¤P›Ë¸ÎMAĄkq/•ęōtĢem2Ųč*ÕÍōYA e,d!T ĄĒĮöm;O™Üí.zjMNēŗˇžŲK´LgBhÜZ‚›ĩˇ;[z’ vĮ­W“[Tēšŗš’>˙zĨąŋ[ˇ[HŒĖˏŠC5ąņŽ]HuŪ  ķj- öņ÷ũ lb§{°—‘ÛųlĖãváĐUMv$˛ķ!˙Y ķáKĨČn”ßH…ZE Ē{@—VŠ9d]’2ÄBģÂ“KĒßũ‚ĖÎŋ`+úķíZ}Éa"Nc ķ7=kC[e“@wO™JŠYĩÔâĪĪ–6ˆËʋ Ŧ–ɧĩÂC’Ėz}im$†[$dee€yéÅdG›Ã$CĮ8˙z€4×Yˆ¯›äËägnŪ*ÅÍôÖââGũŲčG5FÚæÔéŨ—å‹c.}Ŋ*œHò,į T7§jÖ]bÉÚ4ŒŋJ’ö{X‘RéÔ+žīY1ĸøf#…*}ķVu §LØU­A­Ŧ1ę6žoų›Úĩāžļ¸}‘JŦŪë7Uaöũ5X<ÎsNÖ"U{YbgķT:‘Ū€/K}n“ ‹æ˙sŊ>;¨d•ĸI>ōį‘X×°E'ˆaŨŽcäzõ§aGˆ_æ ~OĨjũļÜÍå Ŗķ3÷wsSæš{X>Ë{oÜhŅŗ–ŠTęĮŪērĀ)-Āčũ¨íUíomî÷}žU}§œUĮԐ&î)r1Xž$¸–!Ž'Ø%}ŦÃԘu‘IÆáųĶ‹¨ā‘\öŖĨÁo§ " ˛&>pß{žõ.ŗķ,Xgw˜Ģ×­6Ŗ‘dPËĐô§ņŪ˛5 ŠX23!ŪAõ¤T5Ē]1dLĮ֐tV]Ä×'DY`ɘĸž:ŌiR,Ė^+‡uۆŽOŧ­@šâ€qIL›–Ū^ãå-ԁMܓÍ4VĄKEÁféŸJŗ Iå)•@“0^•• ¤ŠoZV Æb .™4Ķ5âK.ī.BĒp8Ļ3SvhâąŖ–ęëNš}˛Ŗ˛ŦŠ; Šoôúr]Ĩô†Mš ØĐHzŅ\õæĄtÚDp8ŗ‡ëZ6ë|ŠōM2H2¨4€Đ¤Žy¯o-îmŧ˄w–M¯ã +Ą˜ĸŠdŠdŒŠ@.õĮQFF9Ž[Gŗ7myŌËĩ_ąĢw.ķjĢf4qGĨļî?Zvx6Fj(îb™˜FęåzŖ§ZĪW qŸ‘U˛Vŗŧ;g&%üШų¸ ‹ržL˜y‘2+‘÷—¨Ŧ]5DzíôY;vôÍ?K_/PžIؤaIé@hR;YÉæHÎVF\ĩYļŠHgžI.7Ŗ•ģTôEÍ­Āä3bĸŅ"oĸf.ža\ĩ4Åõˇ_>3Ž>đâŸö¸oīŖųē|ŨkŌ´ûy¤ŊGšQö¨ĪJ—Ną…ô™å•C7Í´ˇlQa ʑŽį`ĢęM1ŽaUWiP+t$õŦŠŅdđæįųņA5 ƟđŒ)* ōÆ=¨uį‰P3HĄOBM6)’TŨ+Œãå5‡s †+9ŖgXcųâ'Û­ii ؄–ęU$%°{C.Đ+:˙X†ÂTÕ›Ķ°Ģčë*ŒåXdQNÍ0Sē@'z ÅHß΀AéIļ—ĩp(íGR=(Ŗ ĸrNh"–Đw¤įŌŽ”fËôQEhf¨(Å-&)i3Aé@Íĸ€Ef€ŌŌJéHb)iĪZ3Í0ŠN†–€Ži{ŅŪŽ´bƒHEŠZo9öĨƒ@3Ū–ƒÅ€E&6ôĨ <ÖĢĢ_Xß,b8Ú'o—MoõËëSĮ.ˇj>lDËŋŽ:Ķ@XMjņoZŪ[,JW( õĢzNŠ-äķAs•,\•^iĸ>$ˇäņ\ãŊ6Ōxßġ,Žhđ1܊ąuވg‘#ļy#ˆâIøMKŠę˧ÛÅ7–Ō,ĮjĀžÔ ÜAåXŠÉ ¯ŪîkCWž)ŧ>­+)ÚÚkÖíqF9BÉš\jMRōÎ7ŠÚî3!•†ÕۑTĩ†E˛ĶÂā5ĮĨI¯´[Ŧ+ŋĪR>”ž!œCiC ;ŒāĢvībbhЁFŨÅpj—ˆ%]Ö+¸fRiž!vŦÎâ!2|Äv4¯ äR9`3Ž•šî—ÚĖļōüđÁųOMÕ5Ŋ”k|ˇíϐ.,:~NÍõŨEYC.Ņ‘@t7ų.Swʓ0UĪAZ1\E1`’#íëƒŌ˛|; >D˛Ē(c+ ĻháF¯Š*Žá@fhÖ3&õÚŊNzTqŨÁ"oI‘”÷ŨYdi3ę‘ã÷FB1YÖÚuģč\:ļõÜTįĻ Ž.q¸gĶ4ę䎭.ÚųO;åËn5ÔÆwF¤÷ņīY•ė˙ÚØ[?–Ō Í&3[̚–ŨäņAAs"°paŽ=¨JÂ;øn¤ŽæA,ųŊh†ã<ŠĘĶäŸûFę ei=ģKU YæÕŽĘŪHžTƒ?íPHG4wĸ—ĩ ŠZ %A5Ü0Oؒ_ē1Öĸ—PX¯ŖĩxŸtŸuģTSj N;FŒĘš^)š‡ü…tņūĶ*`YšžŽŪâ¤ēS…ĀāUĪ­ejÉēëO#¨š§ŧÔVÕã…ĨžOģ  Ŋ);Öt:ˇúbÚŨĀÖōˇ+“ßh÷Î(Ŗ´ėÕY¯ía“Ë’d éH t¨VîĻIUŖ_ŧĘzP. {8JžYū,ņ@QåŽsĩsô¨'OlwK˛6}[­M•Š K|Ē>ķSƒÁīB"ĸ…@GaXúœË%Ŝ–ķ|Đ­ĩģ}+c8ĐfÉ'bķ×åëN1ŖFQ‘v¸âœXnÜĻŦ¨ā•u pphĢkBbH•c=T -íĄˇRÆ¨ž‚¤,1ÔQ@N—df2›tÜ}ĒK›H.b 4ję: ššŌ"˛Š` č3ր m6Õ XL@Ɲ´Ā΃GŠ Ŗs$˛yqY¸Zŋ V‰•ūéĶĪjF¤=ĸYˆõ[‰-•ÖÔ  ˇņčģsIÆ8 `ZūĘ+ûsŊ:‚:ƒVi(ĪęPŨZؤr]yŠæ*€W¯sZ:•ƒ_A—!ŽHØ2ĩ:˙L[ōždŌ"¯!WÖŽ"íPšÎ8ɤ3+û6íŽ š[Āæ#œytÉ4‹Ÿ6ī˸AĪŪyĩF)—äz|Q ĐM p@íO˛ą–+ŲŽg1†ĩ:VRj9™–&dRė ;Ķč  } ;¨Zā\@Éæ6đIË{}BÆōįʅ%Žg,ļ1[F—ƒL ‹gĩ°šJ¨Xŗp}j(ŪI¤$q¤x`BžîƒéZ—É<–í 7JƒIĩ¸ŗĩÎPĒũŨ´SRą›û:;;XKãlâ­˛ÜÜirFPÃ9]Ŗ&¯š­6Ąmo:Ã,d~‚GNÔL6ĨmĸWŗ÷šo­t‘nō×Ė>9Å;éQÍ,v𴒜(ęi(ûŲ¨nD†& n• Ļĸ—R´k¨Āgį\Užô€ÅĶ´Ûë;ˇ™Ļ‰–VĖ‹åRßérÍtˇVŗyS(Į#‚*ėąHķaaS͏,āž4o´ĪįHĮĶU[ ›+‰šnĖ[~jÕči)6—p5 .­nV?3¨+šuž—qm%ÄĻä4“ģ{úÔ×ÚĸYÜEE#y„ÃĨ^Ļ]†™5šĘŋiæs÷zZvŸ§KgįƒpÍįîā†õ­.ôRgĨXæQs#yŊO}iĐéb+&ĩYäÚĮ9īZĻ)Zb*ũ†?°}söíĪzĪ˙„0ų-y)˛öĩŪ”â‹œÚJ•PˇĻ#mū!V­íŌŪŨbŒaTqSQHfŋjnĨŽ8-‹ĘzɎ­[ ĩ¤p–ÜPc5cđ¤Š.@ɧw PsHžM5ēĶģSh=xĨĸ@Ä#8ĸŠ(4vŖĩŠŪô´”CŪ’–ži zŅGj+B4fŠ(Qړv bŅH)s@¨íE&}¨Ŗ4Š¤Ņړĩ-0ôŧ (¤R撁LŒŅI@ )2sJ(&€ĩ'¤ĸ€KšOj1@ ۘcF9*šõÅ?ĩ'jiEbŅ‘íQ Ku›ÍXPH?ˆ/5>(  Ų–~t’˜ŧŸ{=é[O´h<ĩû̊´yĸ˜dĶm%TGJ ÂJmƗitĘĶE¸¨Ú9íW)iFįJ´ēÛįG¸ Úŧôéôø'˛û#įË “ČĢtŧPnŸŖÛé坞B1šĒ+= mnÚãí237P{ũk^ŒS.ËHk+ƚ)ÛĘlūėô¨îtV’ũŽ`ē’˙|-lŅ@~-’Ü(ē,%öč}iŸØ÷ Ļ5”W+ĩ›Š^ÕĩĐR æ€1/4ģŲtčmVHŽĪŊÛ8é[XK3o͎™§žÔu īX×Rŧ—žTg#`ŋ†ˇŗÍĪJÆŌáģMFæ[˜v šČ< S-!ŋ˛ÔįeˇY!žMÅ÷t¸}¨æ€×>ēõžļ ēĮ“3aˇjßŦØ´ /ūŲ<ĻgäĸĐž@ŖŠ8Í% 1oîĸ:í’ ä,Û4ÍZę(õ{"Xūč’ø­gĩˇwŪaŒŋ÷ŠķR˜Õē¨4îFĩww@ŋ"PÄzZŠúAeŽC{ -Įŗv8ZÚ{xdåâF>ëJĐĮ$~[ĸ˛tŽ(žÕgRÔlĸŗo1‘ˇ3/a]%CŊ¯úˆR<˙tTԒļõÅ`øiRHîEĖūfˇZß5IôËo=Žtn~ņV+š¯ĻĀąĮĘØœT:^ҠȌŖ~GįRčL’GtTäÛ¯Ĩ?ûŨ|Ũ’JĸLåCp(¨MūŒ7`ëRjíēm>';`wųŊ NÚ:˛,Ԉ÷gŽj[:;Ģ%ˇŲŠô~āĐmF8cŧątEeې;S5YĨmRÖŲvė`[æčM4h2â<ŪČZ3•'ĩYÔôŖ|‘2Lcš.@ą´ž&2˜ÄoŅ ČŌôاČī&ԔĒáą[6sÛÆū}ËM#íUėô˛HŽTN…Ĩ;ÛĐĐ3>ŌÄͤ4ōO/™ī/÷q[ZT¯>’6\¯'ÖĒCĻŨ[éj“ÆĖÄáŠô­YŌmî-m7,‡g WԁÍęļáõë5iŸ÷œāģôŽ…Ž;Ö^Ĩ§ÜO{oujéž.ĪI­4–Šimŋīimß1Ząf.–膉’ܯņ>ãēŖÔôų¯­Ą`ę—QĀŽ™§éĢŠc|Ņí Ē:ûĶ6ˇKŦŨÛ-ã*¨ÎqœSŦÎŖt.mū׹ loÛÉĢ6בęķÜÍnJ00Ũ)4Øī-åži-›÷Ŋ~aĪĩMisqu¤3ŦgØî*†Ÿ.ĢwdgŽé F8V^MhiVķ[ØîccŒįƒT49."˛™bƒÍ]íĩƒcŸzŗ6°ëĻÃ*Ļ&•ŧŧv–ėßX[}Ģí>pNdFP=Ē)ty¤Ōcpŋ˜9ã>•Ėē•ũ§Ų>ČŅšâG?wgUÔ§]:ŪîШW#vG<Ոgģ‚Ž/ŧŋ)Wr„ę+3[VƒO†Æd}ģNđ8­ ŠčĪĢDėģv¸Į"€)jal—%ŖÃ7ú§;~ĩŧŒã5Īi—×6đ%›ØČŌ!Ûģ-t#Ĩ tĸ°­õ™˙ĩĨĖ;Û ÅnƒÅ F žÔT7ąŧļs";! õ  Ŧ™ŪAik$éÃ8 ÂŦ[j)qg%ÂFÃfr§¯•áëČm­dˇ¸aĒĮ‡ã5>šwiˇ.Ŗ!ČĀŊĸ“X}­c}ŧüŊéë}ĩ[’ÛcaZ°ôũB´7å (V{ÔFEúKIū ›ëE€ŪMRŲäX÷23ũŨĘ@jˇšÄņ#Åö(Č#ĖÜ<ŧVŊŗ3[Æ\aŠ‚i/Z†ęę+HL“6ųÔՃâxÜÅĒŖ˛ĀPÃĢ,{Z{yb‰ē;*žŋå™,e+¸yŸÂ9"Šę6ŗi,ÕÚE ëšĢxZŪÛIļŨŽ fšZ-Z™a’9agá|ÅĀ5O]ēĖöļÃ9yT°ĮRërÅ41C™J94ÍnE[=X€Dš&„Ŧ×QÛí Ë9¨ęi_ŦĶ<%%QģkzVN´VFĘyyƒî“WŦÛNķŨíJ— ķ6Iãë@˙mn–dŽÖW’#ĸϟUh.­Ą06'Į͜bŗ´ģČFˇw™YOĘŊVüE5šÜGÃĀÁ¨°õ†ĸ-ŧĸA]ÛŗŌĄMT´ŒËy!üŊįšúTZT5ŧˇō'ī ‚˛_Pû\å‘üĔ1WåUͧ¯–Ũgąw~øzÔ˛ęrÚ:ũ˛ßdNp[vŊVÖŽÆq’‚@߅•äZ„ÚĐųŌHGOá  +›™#(Gŧŋ;@*ŧž]1į‰JšųI㊭s;Er–ŽeŲåņåŧÔÍ6FJž7Ž@Éģž´€† OR›Ok”HČBr}jGÕ/ŤwĢ ~IÆážj hü?4B|ÑˇaīO”˛øv(|™ °ÛˇiãšvB45MB[K8î!U`Äd7Ŋ%ũũÅŦ0ΑŖ+m žŧÔZ´IŖ*ƛ™v’ŖŽ*õû]YÃZĖ6˛ä•ô f–Ą,7ÁFžhÎ÷ ˇd× 7w†8ÛÜzÕķį*Ŧ–m4OT¨å[úUŊ* mė#Žc–§ĩ -:3XúíÕŨǤ–ĮlcĻ]ËD™†ĄúĐĖķJNiŖ­8ô¤1(4‚ƒ@…¤Q@ĀĐ:RQ@ ڛڝM­H ڐš;PhÚJu4õ¤QZˆššPi)hQEQIEäŌĶ]w)Ē0ŧžhëAĸŠ8ĸŠ(ŖŊf€ ;Қ(sMĨ¤&€F ëGQKŌ€j(í@äP)3J(¤æ†ĻŒí vŖĩ-   ;Ņ@ Š94wĸ€ƙ¸ƒĻ¸“Í)?5)āgŠã8Å;9ÔäĐŖƒLšuRRŌg4ŧRP)~´Ž>SŠa@Ĩ¤ ĸŒĐhĸ“¯Z()ŨŠ)h1EŠ{PڐũŪ(Ĩ pisH´´QŠk.O&Ž”îÔĐI c4œŌöŖé@9¤#­- ëL.üánßg^N€ŠÍŅ-ī,Á†hFbÛÃt­ŽôPcŠLqNíFiŪÔĸ”t¤ ‡!O­--bÚiW/Š}˛úEvO¸ĢÚļzv¤ĨĻKMĸu)-mâiĨKۓšĢáŲ‘ėüœ"’XëZûAę3õ§mQĐL ÆĘÛq>D|õųzŅ5Œ[˜5ōĪaÚŦvĸ™pčvņL˛’AŨWlZJSE! Ū’DWRŦVė{͍ë@ãŌėâpéoaĐãĨIsgڅž5p:fŦJ`TˇĶmm[|0*ˇ÷ēĶgĶm.œŧŅnoZģ@V[ y­–ŪDŨã4°XÛÛÄŅÅUnŖÖŦšAHeXôË8Ü2[ `rÚą$k"•u ­ÁFh4#AjW€jhˇ‰riķuųzÔŧæđh’E‹ĩŅY}¤HŖŒ~í>ƒüŌĐg“šrÕy¯ ÂI*Ģ7@M^Á1‘b•X§Ūö  QíU§oģŽ Ûŋo˟­6įTļ´b™ˆgį8â€/u4ÅgEŦŲË#"ÉČåHŠm5+kÉ8_s'PF(įcĩš:ĐNąĻÜ_ɤǰŧ*íēZÛŦIĘ­XnsLUÚ0(x ņIīGZC ▊%&híK@ÄĸŠ("“ĩv¤ŌuŖĩ%!ˆx¤ žis@ŗĪJ^Ŋ¨éIĐU:ŠAŌ’€ŒŅGŌ€ (Å/JNqMFb9͍ Ĩ'P@įš;QšZCG4hĨÎi€ PŌfŠ(Ī”gŠS@‡š^híG4 (íFh(ÎfŒĐ(číAĄM3æ,)Íę)ÔŠ€Æ~8ˆÔ…;?ŌŌg=)h4´ĶGJZJ3J4õÍ0žÔR Z^‚›ÔŌöĸ€ )8&ÖRŒõ?ZSÍŒúĐG-(ĸ“8Qü¨Å9 Š ŅģœQžhÆhâ”ŌPŠLs@Ŗ4Ā1KE”QAúR´´fŒĶĨíM4ŖĨ(ŖŊĸ9¤īKEZ( Ķ(éKA Í/áMĪjZZJ:Ōƒë@ H:Ԋ€A֔Ō~4´J(¤é@fŽÔĀ))i)b”R( ĐzQI@ E%Č éH´Qš 6ƒG4 Zi§NԂ†"ŽôûĐ7â(ã2ÛÉ´yŒØúŠŊn–úTín‹+ķmš/4UŊ¸id×û vĢv–~M¯‘,†aĪ-éLFe‚Ú\Ø@ŗÜđ6yū”ũacmBÂ6˙ĨX‡Bŗ‚áePû•ˇž*ÅΛmw0–Umę0lP}Џū UU!Í6 ‹âvŲÆSŸ­_“Jˇ’āOķų ›uHļ[‘p7 7nûŨiŒĐ¤'ŠJ3ÅH÷¤>Ô´‚ îiÔw¤ÍôQE%ŠNų EP8¤īE ŌRö¤íHcqŠZ ĄšLņ@=hĢ )Ũ)¸Å¨4š¤ Pē‚iqI@8Ĩ͝čÎhĸŠ3Fx¤č(ë@.iĻ–€9§gÚZZLŅI@ ß4ŠJ(G4§MčE/S@sڜ 'Zī@ Īj3E6€E'AILhi)i†›†Ūx§f—‡zZhëŠ^hĻŽÔuĸ˜Ĩ¤PFhíE Ņž(Å%-9¤Ĩ ŪAE=[#ÔŊ(íHhĸ€Ŋi)ԝ¨)E%֗4™ĨÍIA Đ0Ŗĩ¤&ZN”f’‹GzM۔𿐠Į?Jli;æ€ŅEņŽÔ™ íIE¤GŊ” iëE&i)ŖE%ŦEv4”ŊŠ ŖQڀ(¤ëE-.)ĸ—  ŠNÔQL”SE.yÅ Ōwĸ’˜ ې hÍ/z@!4¸ĸŒĐE%-bŽÔS¸ų‹RҚ)´RwĨÍ´tuRRô¤ ”QEĐxĨ4”Ā)M&8ĨíHÍ-!ĸ˜ zŅE ƒŌ“ĩĀ3Åĸ’€´v Qí@&)i;Đ÷Ĩ¤ö ž(ĨíIAP)´å͝čõĨæ€q†ĸƒÖŠ(¤gō ĸŒŅŪ€NhīEfŒâŠ(Í”´RfŠ)i´Ŋhi(ĸ€ ) /ZQŽ””tPö¤4f“4ŖĨ&9Ŗ4´”QGĩ-”HƒŌŌአŖ´§Ĩ6€“ĩ/jJ(íE(R3Hj@n6š1A¤æš=(Í%-Y˜šNsE$ûPž”RRô į֔QEIڒ”8ĸ’ŽÔ 3IKA3FsIŒRâ‰Ū—4˜ĸ Ÿj(ĸ‹Ō’ŠLĐ!sIE€’Š(sE%4dPi1@4”ƒŪ–€ 3IE.îh4†Šb”R (÷Å- 4Pš(†Í’LĩQ@ HhíIŠ^qÅ 9ŊŠ(A¤ sKې ŌŽô´ŪôÆ:ŽÔÜҚ§Ĩ%¤04´ĶõĨĪÄ/jOĨ¤¤Đ)4´éÍéŒq¤Ŗ<Ōu¤z)=¨Í:“=Í'RyŖŊ'ãIŪ€M!ĸ‘¨zRfŠ(íIڃ@é@¤Í%€ëE搜Đ擭“8`1@ĻķS‰ĻŠ^ôč\įšZCIÎii Ɗ=h a@âįI@ô´f€ŒĐM!¤i´§Ĩ%!—¨ĸОCĩ/ãIž( æŠJ3š1G"Œš3@ ۚQMíGj;ŌŌPOQIJ(¤;÷ƒ‘ˇ)M ¤ÅgQFh ¤īE€ôbŠ;Đ@4wĸ˜‚—ô”˜¤ŗIž)š^(īIGã@ Ji´ShĻ÷Ĩ=qHĨ¤æŒP {Qš`ŠsMęÔPį֔ž)´w =)Š)E%€Ļ’Š ώZ^(,Z3AéŠBhOJ^)8Į4PÚŌtĨ úRŌQš(īAĸ€ (¤ 4QIžhīGz(īH`i)i  =)´´PŌqE ŠCK@ š(¤¤t¤Ĩ4”†\ÍäSAĨĢüŠ)šŖ4ę(íIہ ֖“4Pö¤ ŅŌ€ŌfA8 ŽÔ™ĸ€–’Š3Fi1F(sE%-ĨīIG4p(ÅQ@™Å.hĸ“4¤ĐE% īE'CE-46IŒRšZ(¤Ī4´QÆ(ŖĩQE#RŅI@ Gj:Đ)€QšBŨ¨¤ŠZJ3@4š)q@ šJ(ĻņGŌ’PKIFhIŖĩ&hÍ-(éM=(¤ô Rf—4Ā;ŅHh CŠ3Å„Š/jJ( ĸt PŌ QÅwĨīMĪŊ-斓ŊPžÔRQŌ€”î)3H:Ri)sILëKIIœRiiŧĐMŠ(íE0 3Å%-IųŅH8▐rsK@!Ĩ4Ķր—>´””ĻŠLŌĐKII@ŖŊPšBi)q@无Å%-âŠLžÔu Å(ŅۊZozRԙ ¤&Š(¤ĨĻķ灋Eô†€I“ÜRą¤4€)}é ĸ€Ԋ)(i(ĸ€ LŒŌE!4Ü͚›HeĨ4ājjpjĸIsKšŒ5€$Ŗ­4RĐãŠwZmÄ8QڐQ@ HM&h ¤ŖĩŊ)s‘M4PöĨÚ3Å:Ž)´t wŖĨ7Ŋč{ŅIœQšSGzJ)€´SisÅ.@ ÷ĻâŽiŊč¤ĸ˜ Fi(¤ÔRŌQ@íFi”´šĸ’€hE!` cš`(4RQ@ (˜ŖŊ 4”fŽ´Ā3A4”q@úŅIž( ĸ›Fi ŅŪ’ĶisM&–€ҚJ(zš;ĶyÍæ€œŅž}¨¤Æ)ęOŽÔS  QI@MÍáÅéšŖ9 ĸ“ŊíŠ^ôšĻĨ=(§Shí@¨ĸ RQŪ€Ū“Ŋ&yĸ˜ š)´dŌÔRQŌ€—4™æ­f€h Qš)(sGjN”SÅdRPņŠĸ€x ¤Ŗ4™ #ŠN(?ZJ: :Ph=(´RfŽÔ3Őž(ŨÅ:“Ŋ&i(âhíIېžhԔ”Pš3IE)ĸ’ƒ@ëFi 6¤=(įh{QIš(Í”P1i(¤¤i´Ļ’Æ *A-e‹Š‘'į­U€ÔW§Ē 6GZd  aŠÁĒē?5(45:Ŗž)ˆvMσÅ PM%¨ÉĨ¤ĸ€”´™æ’ E'zZZ)šæ”SĸŠGlRsHO4Å-.i %´J(ÔShĻæŠ))´ŧĶwRö u(8ϊ(Ų¤ŖĩĻö¤¤ĨÍŅÎi8 RsÍĸõĻķš3Í'z(izRRPšJ8¤&€Fi(Í ŅE%.hĻ÷ĨÍ)ĸ“ĩÔĶsFx¤Ŗ4€\úŅې:PŠ(Í! ŨŠ)8Ŗ4šŖvi( ĪĨ”SsíIIšZ;Ō“Í&hhü)sHH ô¤ö¤Ŗĩ☠‘ŠLúSyŨN¤Iš8¤ Í#8ĸ€4n¤Ŗ4šâŠLņ@"€ ZiĨ€4RgšJ^4šĻf—Ĩč>Ԕš aFh&ŠŠ{Rf@Ã&åIیĐŌRŠ3šSG^ô”P¨ĻŅڀÔQE褪Ŋ.h4Ĩ%/jJ3Í!4𤿊LúPŅM斀ŲŖĩ”€ ã­§4Qր ņGjNÔPJ)´t bŌQIHĻæj0) įw‘úŅEj"Ė,}jėlhĸĨ!9Ģ E’ }S$AŌ…ĸŠuQ@hĸŠ;RŽ”Q@ ŪŽôQ@-Pڑ¨ĸ NQ@Ā“ŠJ( AڎÔQ@-PŌ”Q@ J(ĸ€ŌöĸŠ;RvĸŠQԚ(ĸ€IEĀQHhĸ€ (ĸ i(ĸ€EPhôĸŠ(ĸŠNô‡­P¨4Q@ ëEĀZ;ŅE Š(Ļ)(ĸ€õĸŠ@'zZ( ¤=hĸ˜ õĸŠ@'jZ( ĩ'z( §”Q@ ۊ( ŌŅE%(ĸŠZmPŅڊ(éhĸ īKE ĨP”vĸŠ;RöĸŠ)(ĸ€ô”Q@Q@ Iۊ(ŖĩPH:ŅE/jCĐQE%Q@ zSEPŽ”QE “ĩP SԊ(íIESOŨ4Q@Āt tĸŠC J(¤˙Ųleptonica-1.86.0/prog/zier.jpg000066400000000000000000000616361506303110300162120ustar00rootroot00000000000000˙Ø˙āJFIF--˙ÛC    $.' ",#(7),01444'9=82<.342˙ÛC  2!!22222222222222222222222222222222222222222222222222˙"˙Ä ˙Äĩ}!1AQa"q2‘Ą#BąÁRŅđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚáâãäåæįčéęņōķôõö÷øųú˙Ä ˙Äĩw!1AQaq"2B‘ĄąÁ #3RđbrŅ $4á%ņ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™šĸŖ¤Ĩϧ¨ŠĒ˛ŗ´ĩšēÂÃÄÅÆĮČÉĘŌĶÔÕÖרŲÚâãäåæįčéęōķôõö÷øųú˙Ú ?Âa‚)6÷ŠjCX ‘;Œ°ëÚĄ‰åąíSēä(<ķLhÜäĄÁÁãĻ})ˆ6ŋ|ūT¤m]ۘüĀ~g2ŠÚ29ĻLš‡‘ķ(Č=>aLD)qģoˀÛ{úė˙âŋJtŒ7`g˜Ŗæˆ‰$ęœ8˙–_ãVŗ‹Î¸F2{šŽKÃÆáÉô5n<Øˇō9#ō8ŦģˆÃ36ųwŊ_ąRļ dŸų=~ņĄŒą×ŊS’õ“v;wwôß˙Äūĩ%č—b4xÂļ_wLcЁyos-ĖŽ$]˜ŽHČsũĶŨIë˙ÖL]Ié‚G¯CéLšo)Õ@'?âõĻXû"+ÎˇS¸ķTõ¸e™ĄH¤ œ†õų—ØĐÛ[“3í*WåĪ_§øÕ­¸šÄŅ!–XHáL€qœØzÖé˜ĘķL!xĶîîŪQ˙ŗT6÷Ÿi‘PĻ7&E?û5G¨ĄyāŨ8ū~?QQéė™K;ˇî˙‹|ąúz}АųPJãĒĄlzāfĢũ›ÎŅōîã=qŋ˙ˆũi5Kø­ļBāâįrå=Vk•™k,Ōˉ 1l1áŗÜÅĶōoéCČÜģf ˜leŠC¸Ŗt.ndXĄs´„QæāķˇŅGåBŪ’×oņ!‹ÉΘ§žŒ~UĐmž:â°tBVp$šŽo1KEĐĨSķ˙ëVÕÃų6’ʁŋ hc0î.æ™"šKt*C2/˜rĀH¸íßķĻi—Åœmχj`|Ĩ˛6ĮĪÛõĢ)ŠĶNLŦ(×ttČȊ Ÿû–ĖߔqĐu_ŗM§& ļōL[Yä.sœqéÖ˛JÆēÔ­íS˜Â9G˙âk¤•$ˇđčXQZTˇ œģ\åíŲûl ņ4m‚¯ž€’G¸ÃhÄōŌšĢ‡\ŊS7î܌.pvÅ]F0qÖšiŪHõËđųŸģ`Nė`ŸĨ$íĨĖĢ ĖÉ´.6ōOį]q×9Ŧ$‘Ūęâ7ˇhü˛Nėå[–<ķŌēŖ409ké`šöQ$3 ëņã?<`{‚3ūMjø|†ĶWčƒ˙!Ĩgę×-ÜņI ,dŠŽNĄ›1’1ė´t4ėöz˙¸´ŪĀiœoŦ‹•Sxώ?œU°qŸ|VLßņúūž`ūqR@?K˙SÜņ˙ ­&°ËĻöā|ŲúėoëOŌ†m2=Gū‚´ē™"ŨyĮŪë˙\ڗP3­îâ’î<ēw8Bāž˛ˆ­¸˛85ŅÆ×ˆķ*Ÿ.BC7đŌ€­d'9ĻĀsŠ-Á#đĸŸ‚yŠ›m(—jyëGAP†ÆcîûŸéMÎ*Fā/ãüdžÆ0AĒ€q“YWzT`¸ 0pņ‡ā@ūDÖĀ^:~uÎ ņūą?ô!EÄrĩÜ7ļņ‰d†3Tƒ´€NsÆé] įOˇškŠ—Č_˜`“ÔryöŦëu‘7Éģ.¸˜ąZ÷p}ĨJ 7·ø”‚ķĪáM°1Ž#Šå…ÆÕ‘6ģ!ę0r¨­Ŋ=slGo2Oũ×-ye,ˆč,Ė-˛*ųLdčQ͝á]N’ÎÖJdM˛rÃĐî90 Ž9eļs ž\3ļėäR”6%Fü>ėt'lš­]=scĮŪ@ߟ?ÖŗnW÷ˇđ<˙ß2 5-?Õ¸˙ϝûėÖ-ƚÖw˛J×1˛NrĘņpš?7?ô­ģŸå“˙C5“­O\ZʗËÃ&mܯ–Nˇ…¸Č´˜‹ŦBDSōÄx,`=Ģ šš !”nIi# öâ°4‰–-XZēÂŦŅeLcžHΝ ?‘Ž”ƒŒ :Žž|Ëd‚æxH#æķøŪƒcīŸÂĒÚŲ\ĪnméO™!Äs‚ą˙ĩčqøUTļ[Íbę9d— !k‘ŒĖWųcō°C-Œ3Miup¯š‘Äë¸"đ2:įôĮĩ0:K´˙‰}ĀÎÜDĀN r× mO,NŅnųöc8ķO¯jwsø~;“+̉$ü˛T7ŪQŸÄ/æjˆEæLˇSNŒwŸ3æ˙>Ļ„V9ôŦkŊ0Å-íėsāËR™mŽŲ/ˆ EĻoI^?Ū¨,ŽWŽG_Æ¨ĖOĨÆą_ÎŗIšXN[°%Ī|žŨ¨°]A\0dŧžp Ø<°뎆ē8<ŲīTvÚäįô‘(ũä‡=ß˙B—ü+^æCœ†6ĘڞÄđ?!˜3A~ö×ŗ,k3čX.IŒƒČ÷Ģú$/ ŽÉ –Č'oNUĨ+ĸĮ0‰2˛Ēäö:ŗĻ.!cūįū€´îޤžÕ“0"õģ~đÖØ< ȜŸˇļzy‹üá¤!úOü{‘ÛåíūÂĶõ@|ĨĮrÃ˙j‡OœC!ˆã# Eū<~u.¨íö5vŒ§ĘKÕ~F⁜ŦfŧKš¤Œ’Ō¤ũāäö÷ŌéÛĩš‚ܝ7—†lˇãéŪ°ėqbÉ*w/?-"đö­{šˇž06œs3ģMcšž÷=ąTÄllĪcE?æ N¸ę8§tŖT‘ž‹îi‰áGpŠø>ŋԌ`{ĶÎáĸ/õ›ߎ8ŽfPVūG™.ÖŅmĀØOŖŸÆēļ\āÕK´"ŨŠĒ“špÂš`s:töĀŦ1Ũ4¤•˜oĪ Z>>˜5¸÷bqjmŨ†eEØÄŽpAĮņâ¨ĮnL‘‡‚ßh*8=ŗû?į&ˇÂĐėc/–ÁÁ b†=뜠›s¸$Öĩl ‹"Øęîq˙5<ĻęFšÕĸ’fÚá<¨?Š­=<ąĶd,AsÁ÷4[ÛBöå˛ÄŖ;Ęöõ†úy1ˆ’öáÚfg;ÆķëéZ3KËhmÚũ"ō3…l:ëØ`œũkkĩ šåŠæ9HûÛHā`ēŨqMĶiÉ,qČŌL‘ŗ;9ÍTÕÕ^HŚZČįÕĀ ‚ĘW8÷ũ3VtËckĨ˜!~Uœ+:ņŨĀÅfßhQGo¸f(\ē+`āåW āséĮéK¨éVņ%Üd$;‚™á‹˙¯[‡€kžđí”v—a” Ō!éˆČčŖûÕŌ•ãđ¤Ā䍝ŧæO2c%ĖČĮhĪúå~†+Hĩųĸ:¤Đę6Ežŋīŗuoufŕb“tī* Ä—ROjEšģû`X:/åØęŲųcŖĐ~uCí„Ūēˆd”32įžVF#ųV-ēØ6œŸhÆûp~pŦ13i8õųz×WgE¤Ė˛ n’fƒÃ;ĶŽ†š›Xo-lgY#I2ŖI1ЎhL›V‘DiŅÁEōå  ­ŸŌ¨_Igqzí7‘ē™­įIsœƒ•=ŗ[ļŒ&˛†O$Æ­>[ mãĻ*ž­eou§Ëđ‡Lã‘ĐņJāaMqn*ŧņŠųø,2?׈­íąŨÛŠRAōēGąŦ)n‰,¤|æ&î%ö÷Ž‚ÚÖ+h#†‚Fš ĢĐœĐĀČ+s1š2§mm§8 Į‘ŸÂŽéd[ū˙ -SŊĩļ†ņÕ-’íAŒœgųUŊ#!ld@ž”ĀŊĮĨ`]ŲÛI{ ’ÉwŽŅžLYįņ5ŅÎIõŦ[ĢXdÔؚ8Ų‹Jƒ˙<˙úôŠ~˛ŧļ\HĩĖiĐÃ.­–ˇŽD`‡f.­•rO§é]NÎ:ū41˜ēē !]“I+Œūĸ ŌŖ)¨Že‘Į–~ö1Ņ=^Õ× ›˙A?áT´¯8ędHŧ.ŅÉ. æŸ@4­ĩ´Å ¤!K2JŽ9#<ôĘĢXíĖÄŪyhvËq÷G¯ŽkŠ×]č)ųš2€ûˇËũk˜°ûd:}ĒĮ6LŗĢĘŖ9Áî?:•Ž>ĪÉ?"õúW9 ēĨüWŅ›Đ¯`‰pyeôõS]ŠŨg z5?Ĩa"é‘žĻ—Ųn|é΀ďu÷cB„ÉpDŦčĘ"e•Bœ;0dq‘ßķ­3Sšæök[‹u†H×$+îį‘˙ Ã[[3cú[4vėvĘ%~s‚zuĀ­Ĩĩ[mnÖq$Œ÷ŅË㓴ĐÉLžŊ|˙pŅŋ§š^{(ūb ēž;Ļyā`ņė+¸ō ˙*ĩĻĻ&Ÿ=O˙d‰%L:‚Î=ë™Ø“ę7Ŧāˇ!æ#€Šīėk¨rˍĒ'œļ0+”0–íŌ%`n$ ™0N Oöh@$ˇ0ēÃq7Ž\Ÿŧč1Rëp,:ĩŒîŌáļeÎNÖĮn˙8ü¨ĩÖgĩe ĨŨ5˛ÁFâŋxcëĮåZZöž×öQŦND•Hb}NÜ~ ūú‘j–׈cŠyK)°.ĀŠũØä|ūUĐéÖŗZXEÅÁžE2mÆ}c@.Æé 9>[ŪFOîO÷ÎkcKē¸ŊĶŌk‹WļđQ^:cH €{Š)§#ą4P×;GŌ¤DĪ>”Đ8Ŧ*đB)Œ+žĮúS6ļõéÅKˇ }ij§QL’0=úUkÔ˙D‘O Šą,‚8÷œf ē”5ŖĒŸ™Ŗb;ô  åĩŽ9¤TŠFNäã ČüĒsĢ™$ˇLˆ[üşÂm)ė0G'ŋQUãŋ˛•@Ëš;Ō\!ÎæÎGĐ Ų:L/e%ĩ„ķZnÁ’3|‚pr*ŊDAš§š9ˆ d*ä}|ƒWt%ÅŖgģ˙Ž-c.Ÿulą[=ø’Hde1’Ā“{2Nß–ŪŠshO\•˙Đ“%†ÔĶ`Üām_/“ŽGŌŗ.TŲ°s—ãî§øÖœPÅ$C,i K‡;]A$°ëė՝pĄ.ä 0ĄĀĀ# Eí3Ųŗũúæ$ķ[̋ŖÆßÃ)?¯û5ĶéG6§œüßĐU-n%– U’Fe čšfØØúОŖ(é),WĐÍ%„qÜJؘŖįģä+Šíšåô($ĩÔdF!Y'gų_<üぎēžĒ=¨`cëKˆĸ|‚ßúU *Q& Ŧ‡*w ã¯Ō¯kÖčöų`Į~đFķ‚<ļíœVEžęäš’nų$?0ĄĪcŠk`4|Q0‹EÎâ7J‡ƒŲN˙ũ–ąmḡk’\Čą”Ūĸ1ĩ”ˆ°šíŽ9öÔjZd¤) Æũˆå°ŽÄ"kŪÎa}o9œŧJˆn€H‹$ŨJ~ÄÄžß'ē_ä*Öĩb’Ëld”Ę2˜Xšāc cŠŽÛȐéQJįjGf'Đ ÖF—gˇŽŨžâ v™XÜĖį?/\ˇé@¯.–ÖąUû0“eÃāã#¯R+§k$9/"r›äf pFy>„×>’] ķdí(aˆōŋŧr8ĮCéúÔŌZÅŊ§M šŽ9ncP[kzû@m6;5•P6 @YOÂĩ,°ŗÎā ûøâ¨]Ë(ģž)PeP€ŅœŒlŒŽŖ­h؜ÜĪĪl˙äI(ã9öŽV2 ŧ‡wŪi¯ĢNkĒx•äŒ˛+2ũŌFHúW$––ŗiĘ^ɒÄí9įđ• ­<„¸˜1f gšÜũ?Mņ¸K=ŧÆ'Y‰›€ū ūJÃ@˛Kõ‘CĢ[°+†<íiĪä+[W‹ídđą!d]š掠`é‘ĖŌÅ9šŽ,D…ŗN~Ô+#ĄØÁ°CžÕÃé2[AnÛ"˛Hg\u(˜aøWUĻi+§4īōȒíڌrPĀšëÍ&Ū™ĸę95(Ō' ŒķŪŒÔ”Å$*#ĘtŠHį¸Ļ¨;ûĶ$Ģy"ÛYI;ŖēÆ2B œ}įXW‰¨Ú$–Ü@wmfōÁfÚÜäë]S GQYwÖ‹¤Ü ĩ…G–Ø  vöĄ‰}e=åڙn#ŲlĸÆ~oÉę}đ*čÜŪCxKnä šÚɒŖŠŦ9~ĐNaū,āY}ëvöū :ØŨ]>ȐōpIäāp)°3obgÕAYž0'ųļ˙Ä#ų ģŖ6mO^6u˙qk2KŸĩŨĮqm<*“2˛Lž|“Î{~F´t æŌMä”ÎũZ™40,<ĐÛ^N˛Čˆ˛*Č ļ2~éūKųÖ,×HeÍÕąI' d_ēį÷xÛĪ_ĪĄŽ’X‹Ügč nkƒũ a˙ČO\–Ĩ0—Y[rXĀŽÂ_-I#,Ųüv°đ:Í*ĘĀéᎯÛ|ĒÄ3Üa•[…8'ƒŸbMbËo ˇöąŲ>Í*ŦEüņšJ¨ä;/_Zī~ÚĄqökqz¤ÖŅÉn`…ŖŧŪŗ’Pā„ũwSMˆëmãƒTĐÖė"xü˛Q$:ŒŽqúÔmĢ&ĸHēŲģ Ŧŋ:n΍Ձy§ßNĶŖōĨ<ŨŒŦ7d)ŨĪlš¯kĢk…ŋ™ 6ŖxŌDPÁ€8Ũԟ§ā}(&‚åíUmfXĻÂmv\ģ^k+Ģč-[tvæ3Ŋ] b>FQŒũėūIc˛ l„!rĀ ‘åƒ×ņ­Û,ũ’ą¯§Ĩ!œėļPņuY?Ž)údQĨÄŪZĒŠ\üĒü´zb4vHd 㑴“ŸŽĨr÷–WvVžDA#Į ĒF$Î~cÛ5օ8̟Ö!cpÄJëûž‹Ž~Y=E$:cębô ĸĩōÉ8Ą93ãúæ´ĩ# Ķæ1(i’ĒN=Ēž›[̌ģHNN[ߓРŋwūĪ›'­ČĄÆÚØMöššîÜeRZ6!€9ŨëëžģdÎ@č3Œ å"Ŋ†íde¸•oÄrmVãĖ=1ė+Ŧ_­6ļõč į=˙:)9 ä}Ē}ÄrđÚĪpú}ÂÛÁįBP3€pcĮnŧãņ5Õhd Iœ°’ë’Táãԕa‰\4ĀļĐŖ÷g?˜ņĢz˙F—Ôú×č`Y:ŽB›ÛpHÜ?x9ŋĨdÜ]Ú‰næ#r)v ¯Í_Č֕ÎĩĒIŨ|˜ķôMßû5g]YÚŊõÜMžU2Ž8šŋ™üékBė‡'#÷ú))5ų#ŽŲ7HˆO™ˇ,˙Tũ3õœ–ņ.0é+Īm‘†2ągŋĻjoT–ęiām*AöWų ŖãķŠųAü;ô§m@ŠĶJšpėÕ u…˜Į’y›¯ÍƒĐūuŲ…"0€äŽ9Ŧ+Y. -ãŨ);]v‘ĖüÚēqۊLf.ļ ÚŋûôõĖÅmw§ęOvļâââYđßg}­‚ōę¸ĮËų]GˆT=€Šrä8˙–o\Ė:흭ëÜĩČ!gbŦ3‘™øĨũi ;W\ŽzWuåĖ0ÃAĄh€Ük+•ˆ3‚3ˇķöޞãS‚ 5/œ;DÛ …^NâëîEr0^[9´- â­Ä‘ĸ9vŸŨ›ēcŋĶŌ„Iáëf‡Fˇ2Ƌ)^YpI^‹“ūî?*|š=‘ķ|¸<§˜üĪ*r{ũy&­i  6Ũ}"QĪĐS¤r×PDY˛ØūčâWķĸār6×úm¸´†KĪ1á*<ÉI„Ī|ņ‚:wŽĻÄ)°ˇ`ũԟüvšČtģVh‹Į!ÜS?Ŋ~ūN{˙´k¨Ķg[㧔Ŋ˙Ų00sŖ}ŌA;‡qÎĩˆÚ’>Ŗsg$&)vČsÔ’SéčÜ} u—pMqhņÁpmäe.qøSÅG¨=Ŋ­Ę^$Ö§ Ėé†;J“ĪŽÕoÄ{×QŖB$´¸MĖŠ Š ˙ĒN„VYĶĄ˛fŠįėîådh•0 1ZēOœöĶ w‰X8å†á v"†Ā‚ÂÉ&šÔ¤i.2.ļ ŗēđą įž•Ÿ6›p7ÚļĨ?›į‡Yąķ`´XSĪ8ū•­ĨĨĶĮzđË y79ÃęvąZįW+o4֑‹“(ķСđnŒ3ōŠ`Ofŗ=ö›É!˜HT&Ën0s“Ü­XņđŒŦ)q•RdRĨˆ:{o܊fŠZmt ˇļÉÜAûÛč险ŧA§ÛG?ÛžĮ$ĶNžL†7+ō…n¸ëž?!K¨Ø˛ËsĢ̇ëĐäÎxŽžĩĖiqGÜ \āą=Ĩīø×Q€@ü(cFFŧģŦĀ=77ū‹záŦneĩļÔ¤ d1¸ūôc‘Č<ņū5ŪëK›\īãķVÖ¸ nĨû`‚;iAbÅ'\åą.ßnšũ*Ŗą'_ĒĘ/<,n# ķ˜_hpBŸ12=+ ŪęâŪ×H]ˆÄ*Å&…ÚœW§§į]üMƒ\x­åō‘Ū4+nRz{×; 7rZYoļ´ž$eSšyŒ‚ÜžŖb„3ˇŌԝ2ØõũŌŌ¤ ŋT9˙–pŒ˜į˙@ēRėÛ| €~U Ė7“OplîV (ÉPAáˆ>äT‹ÉÖ?Ã[zpƗjO%9ΰŦuŒųŅ‚>`ĮũöŋüMméĒF™j3’#QĶڀ9Tš-y,-ėŧį‡'ĖÛëĮOqSčŗL÷ķĨŸEŒĄˇÉ$㌌nĮãYڄ°ŋŒ.L—B#>u\Üúũ[ōŠŦ û^§föڊ8€o‘,„‚ŠĀūéäŒũjēØžÖâ°ŧŋf¸šF@ę"õÜp#ŸÖ^Ą}1ž¸ ĻÜ#߁ûܲcn>ņā ˇ{g-ĮŠ­ĖO˜­Ö_œģk0Įū?IŠŽĸÚ­ĒŸ E´Ÿ1sÃoA‚ģší@č—xÛäļžQ˙-WųS‘Z÷ĘMŒũŋvßČևޤnņ{i•ōą?wļN8 ū>ÕĐŨŠ6˛ŒõFūF“Ü^îáŖģœKh~ĖÛí Ī#Ėā€3ÜūUŊasėx‰* L˛•与cW[Åĩē•&Cnđ˜ÄEy ͌įūúÖ˙‡mŪN?yžOûéÉū´5 {ĮSۊA;ŅH G'šALNMJÅIŖoz‰‰(8ÉĪAV0vÔ;8ö @Ŗ 00{W7{amŠL`šSėi)1Pr0B˙ŗ‚ˇA]*gלÕ=ZÍeĶŽU …Š1ķ"Ā`Häū8ϘXåg˛ŗ!dBĨS*ãn tįˇëī]%Ü&Ų$ž‚vŽF ˜Î Čx1œ‘€Į8Ž[ė‹+KÔĻ‘ÜųŒ‡r# ü'õÅwVĘÂWrîÛq“ëŠlV9НqæÜZČŽo(ÆNÂģņŸ~ülhN]oî¸ĪoéT5é%…g’8ZgT_Ũ§SğĶųTē%û}ļXžÍ>Éy å0ōÎæá˛?Z:$7˙ؚKɨZÜ ČîÃk}ųŽžãĩe.ģcĒ–šŦ-…VIR 8ĪQ͚é äj,É*˛ÂžQ# veãÜööŦ+—eÔgX#&Ņ€¤ph‹hæžÔ'ƒ(CšNAÚ ˙ŲĒ׈áI´ĩī ĻųlĄ‚ŸÃđÍ;C,EĮ˜ĒŦûŦO¨ô.ŋģiŦĶŦf8Ø9ķ ‡‘žÄŌę>‡=¤ZyŒErZ6pJ•ÎĶîzgüņŽÄ—đŽ3MÔŌ}FŅpǞ(åŽ`tųĪÖģeqR;PÁēĸæČūjčUĘYčŠoĮgq$RÎ:žÖPØ$uíWcĒ ŽĶ$ā ’{|âŧûFĻ-=íäƒ8+€r™9Ûņ˙Ka3ŧ{Ą-•äû¤–Ye“ÆHĪËÜis¤hÜ–Xe$‰ŅS6q…Čo—ƒī[ž†7đÂÃäŗ‰ÔI$Ą˜gŒvî+‡ĶŪÎëJ¸’ōęX¤RWrČF2ŽÃ¯p?BĶ4åŊ.1†uúaIn3qvq€$_ũT:9ŨĻ@rĮ%ŽYƒķ¤p~ĩf×ũuīũuú-j@æf.ŗ~íãUY åI<<ž„vŽhs^ŦRĨƞPyÄ$‘8*ëĶq˛:tŽPMPj)dōÚY a—osûŖŽwu>ŋ‡YŖ¤‰ĻD&mŌŽāäî;Žzü…Ss:}ížģq}-˛J˛6ø‚žXâe#ˇ]ĨEXđęŦˇQŪ<%.f„‡ÜĨ "ÚÉėˇâ”ģ"ÕŦŲ–EɸRFäĀVīķÅfønÕԕîefO)‚Ģ>îŅs÷GlSč#rîDˇņœ’eQ­eRØ$š~5OTÕŦMÔhŗæH€w]•]črF:q]coˇ‡¯ÂąČˇ[Fķ2˛ŧ‡ JœŽG) ŪÛ^^(‚u—dXlu,c˙e?•t2.``qЊĀŌc1_F´0ģO–zņôŨ­Įo0íÚi08B֍oiOŨ)!ū\oˆô?īfēÜ@ú-ĨēH$P tČČųAéøÖeŋÚCCˆbãËë!˙Ļėũ?:ÖŌ´ģHÚ=KĘîhHûMŖNÔÛĐ .œQCXķE!’ĨNĻǁÚĨU‚c UöŒn;Ú­‘ōqP”!&Ød!ļķŒį¨â™|ėWŋvØčjÄ+ōúÕ@ đ\\ŗŽŦąŽx 23øžséŠ.+<šüeäd‰BžâUZ<ō¸Jô€xĶ’8ŽõΞ0Ũ*ßú ˙t‘ļ!9ŠąXå˙/JëôŊ?Z´ļļ[ģČĻ–3ĩÛqã‚1÷‡füëįO¸‹Qŋ¸†áHŌü8ȟ¸o÷ŋ?jhLét)LúT2y oš˜ˆ\` Ū~\vÅ\ƒ?lŧNû‘ŗ˙úU/ ­ÚéoV1"M"ūí‹p÷<úÕėmÕ'ÆaŒū¯Hg-}!IŽ9Ũ'폭í,†´'õ’q˙5ÎßĪsK ŽâvP{€n3˙Ą/į]••´ ˙ĪiyĮũ4jŒŸŒ†&"E…™vœ‡×%§\ZĮĨü÷WĐŦ3ą‘•˜€Ŗ`Pr0AČČŽË[xî$X$€QÆÆZ3øņ\v”.ĶOš(žĖʨ­‰ōûaāķ€2:û–Â=[Ø-V2Fũķlb38'P{XšÖ­hŌ}—ːNąŧ…ÃmØÃ8ÛŌϚiŽášácÉqš„Mš2a“Ąî)uĀĨ]‹æm‘CíĮ–įëŠ@fiĨžĄ~ĸÖq!Vų¸#‚$õOίø„Ē貆Îג$8A‘Aũ*ŊœkŖŽ$@\•@ī7øSŧXÆ= ‚Lą÷ĮCģúQÔvÚŪÂ]*ĐIæDČ#v’$eaÄYįæģ&xît‹Ibut1•>œÖš¸fšĩŌ­؄ácˆ‰ōÄ‹ą_aų×MĻÃm´q(DT*åCv俊R¤E ,G2¯¨bÎ9銜 ¯&ĄØS’:qQđ˃Š™‡ÉUäb‘ëČéC`6áŊ”ΟyãëŽ)$„Gh° áhúM¸*Ö臂ķF?&5Ÿl{¤–&ChĀWRpyŽÚ@sū|~{AļO1PJ’Wąük¨WŠÖĀ\ĖÁ#HˇģĐ“X 7$Būĸ?ū*ē;IieĘ´KG^)ąŦŪEôĶjÖw.a t*BŦÃ!X}ĪÔú֏†4Øôû‹Øc’W)-)đō§`;(üs\žĨWZ|í•$3EręĒ‘gŒĘI p˙žkŽĐ$–âIe–# ŗĄę­æÍjžÂą¯pūMŧ’žB!lašâīõCĒØOv4Ã"(Ę$;d,ƒ cļIü+¨×Å ęĢk.§ČkŗkX´™HԂ%÷ËĮúũšMŋ%‡¨Ô.§[%†@Ŗih‚°Ė’wú? ÕŋˇQųmOúčĩ™Ą%Äd‰n’ãŽd ƒ#y’|ÜcđīZú€Ø0ã÷ŅčÅĨÔvĖôb9Ęīío]X Šæš+%eû#ĪîŋöÖēÔAļŪ2sÅ ŨYĸK@'"yą‚åö÷Îk—ļžÁ%ĩ?lä˜Ęˆl rq“ƒĐū^Õŗâ†Fž§•mJŨ[=Ũ“üĢ-áĸüˆŨâT1\€ql8ôČČĒ[ęm¯íîôøīá•>Ī"îŪ̀ŋĨrˇmĻ\Īwûëw•‹íÄ –?Ŋč3ô˙&­ÃĸiãW´ŗļ I´éL‘îųvŠ=Næ?Zæ´Ø-VâōĪR†:Ú]čĀ–]āž=ūoŖ Đ´8–;TPš\ūûSŽ%ŽÛSF–EExæbd2ņ“ūņ¤đåÄwZJÜÄĘVYÆÖ 9sÜuĨŋXŪōŅŨ ígĒ“üÔ~t€åīŖGi؄r<íŦ@nžx?—ä+ŖŌĀû+ņ’'›ņũãV „\\*Ž3 öč˙üUoé'6ŽØįĪ—˙C4Äfø’æ+3lĶn;‹šÆ0šģK]+Rŋ:rG%ŧķD\°iĮBAõČ5ĄãI'}cN† –mŨ0HnīŅĻ;ęq]BbļIœ\e†]­ˇt™å‡O—Ÿjk`:%Ō­Å•­´ÆIžÎÉ$sŋ8Ær1Î üëXŅâũĨgē1˜äŒÃæŗ.v9ŨÉëÅ]ņlwMŽ{{‰aōßk” Ã  œĀb§éšĀ¸‹N™m.†Ŗ4…í]š)ŽCJ1įpÎ:vĄwoGĶWMÔ@û]Ôá¤+‰ŸpķÆņßÔÖî§ĨEŦYųI$K¸6bÆzŽAõŽsA´ĩƒR mqq&\†ί˙=yĀ=zĪÖēģ‹˜ėífžrDQ!‘˜dāéCÜg%]GqŽédĩŒ‘FāBŒcũžū•Ôé„>,öŽ2OąĨ…ŨŨŒÍžpVB2Íæ`āũÔxu™ôhYä.wČ7Ôol~˜ĄˆŌĮ'õĸ…bC͆Oô"ĻŠŠ#ōúš›#ņŦŅģSÚĸ!YA9ãŌ¤ā âŖ-„Æ )]°i´á‚ģîz7^#sũ+ úáÅëm-ÛÅoËį”Rv1=Āäē~UŋrÚôæ#‘pĀß§ĢێHäSL4û-Ŋä֏žâ12Âî$ G”q× gø u>¸7ú m>Ōëē 0R@üםqöŸŲvú†å–É!}ĸO&GFb$uŨúú î4;Kk=ÜZ D–%ā“–*9įč)ČF ũŽ•%Á„,ŅrYÎ2ReO˛Ęļ4f^]I d=G5føŠâŌ+–[šbBІ@įŠ .1ô%UũîŪîöņ­§I@ÆvYe#ô"—@&ņ;mđåīĖhödû?­yũ”&—xÉe<ŗŧčōņŋ0ãæę2{uéZƞú•ƒÚŦ‹öVÜWp`Ũ2:ãÅŪxvķKˇD–×ŌÆc•CÆSn— îė?Z¸˛Ķé;âhŅ4BĒŽI@Ŧß_Û5ļUœ€čßęØt§ûü‘Tôëy&¸¸UžH1Čd 够Ūą¯4OMoc~Ŧ=öŖˇôŦé%ûĻmäļž<ĸļíÛŖ 7+é“ü¨@t:DL5ļG6ēmŧ$Ėʼn˙ĐVšŨZÖę×Å3ßÛĮ<ąąmņŃüΝîĪüÖŨėīĨĪsse}"ŪŨDą5™áQqœGĖķĒQęBöÜę~Dʲ)Áˇį'÷\ß=ŊsMwĢá}JÂT›Lļ‰Ą–ß÷†ĀŽF;wéZš’ĸŗ¨%ĸ"@;¤~ øÕ/ LŌXâ|n˙Y2¨-ĀūīéĮJ×dÜgįRÆr™‘5 „QyŨŋŒ ˙ŠĢ:6´Ē×V—0M‰ˇ‰rģœZ¯wöˆ/¤H ¸Uf“âéūsZ~”ũlÛRFn6r'ĶÔUtËø•M׉\ŧwK ĀBÍ89 s’įō56“ä]ëąŪŲO7ŲŌFˆ'˜YdΚwNA‡×Ūē?nû˜°Î†Ö}Ŗ˜ÜuÁõŦ]6;ˆõHˇ‚$i‹.By&nÛG¯č)ßA%ŨŦwöÚI÷fŒĄ#ļ{×54q_閚”đíŖ’ŪGCua˙}]cÅą˜ŨAR9ô5ƒŽXX$>sÚÛ)2|ÎcPNr94švceĢC-ĩ´qŗ;)#= Mū ųVžŊq¨Ziæ]6Ų'“āŸē¸9 w9íX6öļ‡PYlŪ8ŽĨSČØ'ŽëČ­ģ n/-fĩ™dEØŌ)ÃAīëĐįŽŊ6;Ģē­Ŧ˙č’.\Œŧ|ķ{˙œWGáÆ áûF‚ãūkš¸ŗ‰-e°mAØDHËŪJ™ˆÉú˙}WUĄAž‘IæGȊĮ0Ãĩaō@( Œ’H4R4<ĩ7$Uhš˛ Ŧ‘ĐÅ<¨ę*?áõ!û z„'AÅ2Hn×÷Úyéū“ü†â¯eyäZĖžs›&‡ŠŦŪÆôÛ,q™ Fdßä~o›'čEią&ՍíŨî‚÷7ō‡u›Š…÷?7@?ˆ°ü*kˆ›P…Df2đķ÷Ĩ˙e…ĸOāČboš+‡v99Čvluö"¨hküēMüŅâędÜ0Ų`Üwæ؍¸÷ŦŨ\Zi)-¯—ŧLģˇŽGB@íՀtãˇš˙ xzáĘePĮ'Ÿ•ÔžžŲ¤ˇÕ¯VīLß5ĢE3â@SŽÜ““ČĪã]kG¨¯?ąšÖ}.ɎĻÖr@Ędc18 ҝ*NāūUŲęˇV‘č—3Č~Ęb%š6商Ō=r1MĄŖËŠĮĶ’—aävLf& |ÎÄvÉ5Ņxrņ¯ô•ŸfÂf“+ģ8ųÉëøÖ$6qÛÂ"ĩŊ¸{p?vĖQ˛¤1í÷Š< pßŲWōgtSãđĀÍM7°ÎĄÖBŲTzbŠlšéÅ KãŠĢ*yĒąpXSŽĸŗFč÷ 42āgâršĻ¯ĀŠĒãȅųn`?œŠ?­[Ī|ņœU-\ėšœõ{d˙žX7ôŠ>Ëģkƒ M0aXTĮ 01Ķøtēn˛ėÔ÷?ô\Ô>Ÿ;aÁÁÉ9‡?É3[ö‘,Ú]ŧRdĢÛĒ2įqCĒ}­õ‰g†æ)-EšC!†ūwî:w…ėæĩÔoĨēš9ed2)d„ūdū‚š{‰íítŲ!Ķ/ρ ¸’*LÁÜäg#>ŲŽģ× vít™XC{eÜâŠėMΊâ5šˇ’ 3ą†2#Ü{ŠåĩčLĀ‹ģXŽį†=ČōāŒũĶĶ˙¯]X]Ā‚yöí^k¤j} žĄ#ˏ2í81níîM.‰âkûk+¨ZPĢ:Ŧd˜ķšœcēœ˙ą]FģkŦ8?QGĀ>hģqˇĻÕëœV.Ÿ;[xoV{}D\Ũ[ÛĘ>Фg~ö ÷ÁäVޝáũOɒHõŲÖ%ˇumĘîŪcÛiú{šoqčuˆˇQ@Ō¨ÄŽ˛žN_$ žĸģ ¤.ĀĪjā.Ļŋ‡TļÄA4…ER­ģ÷‡ĻOaú×ĸ$z ™!Ŗ;[˙=î‰ļęxŽ2ęC9a-„¤+–O,… ÍĪŪ<oJëĩۄƒDŧyĨHÔÄĘØIņ5ĘI{g4ĪŨ@ĖÛö¨d˙Ž<~cķĻ€ėîŦ­ĩ Vˇģf…1Č2 ×)5•­­ô֑é"X„ąƒmŒî ž¤sũī­t“kZmˇš'ŋˇĘb¯žU>‡žĩĘN`ž×Žo´ŊHŦ×k•šŅâ%Lsģ õú}h@nøVŌßėo0˛Š Uąwcɏ¸õÉüëję‘WËp§?Ä3\ׂ/î.mnŖÃxđ@-GūĘ*÷Œ&h´,îe q ļŌA+æ.z{Qml#™mëN†{K;°ōTC*ÜAļ%NGnžžôø,ukŸMnđB÷Fâ9ÖO”(ļc‘>œÖPūÍ]:Ëí7wI'•#L%Øáļ@[ ØČá~yĢæīPĐôHd˛Ŋķ uʉÔ;ņndûÂ>P*€ŲŊļÔ,ŧ9ĻAbŧąTvÆ@Ā8#Œį­fčņÉ×ÍȚTxÁ`OÍånč}XŸÆē[åae'æķĄÎ?ëĸÖ%Ÿ2[`õ1žÖßãI=Zä8āôŗ5¤[­6HN‘Ō3ô.ĸ´†ā§ƒĮJäÆŦø‡MŸRĶc™é&$b …=2ūT¯­ÃĄæ×wÚEŨžŸŨÔŅ,)(ĐnS……[ƒÎsíīVõH-“KĩŽ!É 2ŸúwUūmW.ĶSą‚šÉf{sL-äÜ_Ņ“žķüč}’Kû[I“J¸[œĒMû‚pÆČįæ?XŽļæYŌFĩ7\¤wP– mxu+ģœAéTl°͌Å˙ļĩcT’ũbÖ^Ö’e¸ˇ0G ڌCÁ=zVu¤ō™­Ųˤ´@ądĀ˙n~ö{zwõ vĀex¯9Ödˇ—Į.fˇķUeŽ1û°Ûˆō¸˙ĮĪé^†: ÷•ĮÜé:•žĄ}¨ĒÛMįLĻ4ķõĒ@ûžGáD@Éļ77öĐŦMÕŠŠ}Ēģ2’Ŗ$u'Šī WR0OŌ¸ Yu*ĪĨZwĖÍšĄš!#ī]-Ėúŋö5ÄKkˇęŠI‰Ėhāą+q†t÷ĻĐõŨŌúõåÛŧ–÷ԘōͰ° ā˙üĢGÁ0•Ņķ¸<˜'9čˆŋĖŖ¨ËûWėrũĒHÆ7ėr°Œõã“úÖׄĸ– Į:ís3šƒØaĶØŠÂ5Ė99ŪŠ—Œŋ…†B˜ĀæĨŠ‚>™ëRƒPjĮ?JA÷: SԚ§=ЈWt…C;*†8ų›ûV6ĢŽÛFōiĐM‹ĸ„ųvÆÚ'ųVÃüØr3ÜTW2¤<˛>ÔIëĮķ G5§\,ƒū?"œĄ\ėeųWtxÎ=¸ü n›Šéļ‘›ģˆQQI2ĮČ=+ŗļ˛ĩšH[ų§Ęĸ0gĄ+¸ôęŨ}?.¯Ãw\–a-"Hîs"˛€ų<“ëŒÕ4"…å­Õä¨n|Û%ļ!VE`m’õ Žŋ5¯Ĩļ5 Žš˙ҞÕ]ią;ãę9˙ž&̚H-¨Ũ“‚1§īe¤ökāî# cĩ`ëD-Ԍ°ųŒaäŖøeõ˙r.U6ŽFqëš:ēė]dÛۯ͞&$œ˙ą]}ŊĩžŸ ‹qA,BŖ8äŸĘš5ģ†k ‘Ę׿eÆĪ<×_"$ĐȒ(de*T÷08‹íVK[]jhØÜÅ,ĸ% îv1ߡ^ŊMPPÔ¯#Žãû:1Âģ’“ČŦŗŨ?ÚoûįŪŦkpˆ´íJØ}¨ž 5ÃKōųŋ.ĐĮŽ?ÉÅG6Ÿwj‘ZA:Kk”‘d_ įā‚ŋFüĮj : •gIÕŪËKiī,nWĘķ6RQ÷ŗŒĶļ‚6u‘ēÍ3!ķĄ;—ˇīWžs\Ž-´÷ ä^Ë+Á,K"06āįPGüēíjA$Æ6p’ÆåcfÊĀÍyÆŖ&›}á×ģ+ÚÂo'–āūärįŨzõ§3ĶĶ ÁÆG˛õۋk{5Ž{˜ā-4aTđë’3×ß ĒŲ¨ŨĮOã5Îx§QˇģÖtĨÜ<ą.ÖŨëįĮŸŅ„ĩÛ'ŠIāEŊķ[ä;!ĪúAė*énīŦ´án.fn%ōŖrßįų×!oW:Ĩ°Š[pm’"›Tn@|ĩ=ķÜvĮ_Zęu…´é$ēŠ cˇ>oīŽãŠčz öæ›—rŸhŧķĄš•c‘Õ”*¯CäķČĪqųV†„ėnËüËÉ?q}+ō-­¯ôģØBˆä1’TņœDūŒĪá]Ž„OŲ$ā}åü?v´05Hō(Ŗ¯&Š@VŒį•0÷UxōĻ\žÕ&ƒÛ…éH#¯įHįäëLVéց´žljˆŦ§īø#č1ÍcÜĻ´˛ĪpÂŪxB’–¨øŨŒã$¯'úâļ‡Ržų&3ZŲ΍vŠx •SīŠhLĀ´šFŗķ.ôŋ,ÄC,+ļBÃ1t§ú×Eĸ˜›O…ŌÉĄ" ĨЍ-Ž;öŽh6¨"‡Éû<’ųŠJ° mĖXÁĪ_ģúÖΈڠŦčla]ŽX_—ŽZo`Ŧ6édãūXũjŋ¤ö˯LíYjŽŦ?~āĖ'˙@–ŽiN>×tIĮûVZ]ÖEw9æ¸ĪĘņøŽ"ą–͸?åĮ¯ųâģ Ųc׃\Ūģki6ĸn%‘ÖD‹l›q…—üZ0ĩ¸K}u™ô™šâé$ˆM† 7šÃxøVū`–e§ ÷‹Ú^BO s€ONMAŖA:ęä_y‘HÁŖW]Û;‚3žryüj]cA´’iu…icšX&(Į¸ā{QÔ )¯ŠcĀuĢdãž&ūæģį'Ę/Ā8ĻqŪ¸_ˇmėÛ ‘~v'ūZ!ŽđĒIÆGĘŲųĨ 8hŖ‡Vļ֙íŌE $žMųŠYųųq×ëõâ’îŪôNŌÃzŪZyĸT‘–˙_Ѐ1Đū~ÕˇŦÚXi>ģŽĪėöLÖå˛pŋSĪnõ‚é{ykr˙m;Ę´v˛ânrAīģķϘ€Ķž+ĢŠíīψ܏w_-"¯čĩĘCm­^Oí[¨dMëˇėėČKo„dãm+ø×m!>V–eŨękŠžk…ņ‘ļ§jĶĻSrīų_t×!O|í>ôDąáImĸŧi.ä™$xĘ#˙Ë?Ũ)ÆsĪø­ŨFÕ/´ëĢI>äņž™ÍaxJĸŗšyŽ^BĪˆ8ũŌzíĮĩnÉmå|Āįcnr9įĐŌ{ËYßK}WŪąE—Ų×ĘV˙ĮĢ"ßí^ÕĄãtaqëå J‚âÂŅ5IĖQÉû€ĖWPI1prMGáũî;‰g‡Wĸ`ÛÜ)‘@n>aĐqôĒļn…î‘kp¤~õ­ßķt5Ã_^ŪÂ7s í›Į,ēĄ ¤€‚NxĘŽyõŲ›Ōô+[%—y‰áEr¸Î$\d~Č­–Ŗ%ĩͨ6¯ Ėab•*_ČÉ<õ_ֈƒ:Ī ŪļnA(9ę?xÕĖø’uÅöe÷„ĀäĒ“Îe=ŊĘ×[ĄØOĻčņZÜ2Ŧ’9ōÉ+ķ;7p;ÁÔ´Ëáâ)5Š'€U˘9ųãģŋ:â3ė'ŗšžfˆĩDąĮ#2Ṙ°?0k­‘ĐĮ"īW\Ær1Ō¸Ŋ6öâYŧ‰ŦîcU#÷ÎÖÃF00G{WlAb Ž‚†™ëdēŗ…­íÆD•ÂÂņíq…@3ëķcķŽÛA5Ģ0?xĄų+žÕ˙´f›PGŗo7xō ČN,u<Ÿ¨ô­o ‰bŌUgM˛ĢŒį€‹ƒĮļ*žÂ:PāŅMR1÷{ŅRU9Šį5 ôŠæ¤ÔÉSÁĻäi͍†šr3@ˆŨ§V;ÉÚG@üŗŒûÖmׇŦĻ´’ ukRį;árcņü*ü“EVBČ a#'wĀ8Á>ՏqŦ¯ØĻ:Ĩ”Ööō°‡[8n ÜĩĒ“?1ōā0+š–ÎĖXΒnޤxžđĀĮ{ž+KHŗˇ• ēˇēģ$ayaˆ œôĮā=(b{|ˇ“\RžVčÎO\$œūĩĄĻHEŨÉ9_ũĢ-b<0‘pŦ Ši7n$ä{~Uŗ¤.oŽséßūēËCē¤&¸Wk6ŋÔ.äD{>`ŦTđuė÷vûŊˆČčk†sYŲJ.Ŧnc1+ rXJĎyû˙ĄĨfŋ„ãHÄ°o"_ŪnYƒė ôV¯ˆŌKę{ώ—*įĻ8üjĻ€`'eŦJ–­ôEM¸؏§^•WÄZŗÁĨąŠH™$[…YT8%NŪ õØt3˙~šŊšXß;—*…ry9ę}+ŧRG õŽdš]BŅÅŦąŦsfvN$‰îEvꄌ“Ū”†Œ_ÚÉsĨHAĸŽ'gN>R ôĮN>ŧW%Ĩ$2OlmR%Lm€˙ŽÉCžŸ6ãŲë <ēk¤ ]ą†E`ĨԂņœ3Ü įÚæiŨ–×Ãēœ’1mÍpVߟ›ŸųčßĨ5°Ž˛ÚågķcÃ$¨ĀHŒŒō:dW!ĢCž)2›x[ˆŖėĄŲ‡–N7 ëë[Éw-ģl:ZÃ}rw…Š@VR$¸ ĮQéŒÖ5ÕÕėĪ=ī‡nK†ķ,ær ãŒüõõĄ5´›nųĖyįū™GZē‹ŸÜÛÆÅ Ä‚2ępBāąüp¤~5 E&Į˜ÛOk*,pĖFķ…ą8ā(Į^­iÜÁįÉx1¸psß§ę  8›$ģššī.vĩÔą"  P)ö { š¤[jZeĨŨħžBŖH.ã$UäŽįĘĢĩö™m5˛´SH…˜% ਨ”QˇëEHƒАdāQ)âĨR@ū•&Ŗœ=)°=iXåyõĻ`žiˆF“žüÕFåã´%aId.6#ŸŧGÍũ3øU˛§%¨ĻōÅģ<ëō/ĖŪÃցV–pbI]×hFČ psøWIĨƒũ›mœŨ§ojåŖĐ'7;ãFŽ' 79QĖ{_]Ä˙ģ]•o=ē&D"]…‹㯰ü)ą#?Ē]ĮrŸfxÄf˜4lğ›ûŖĶ?Ÿĩké'mäā‘œ`ãūēËYzƞ÷Žå ‰DAt ˇ큜ƒČüqéWŦÅŠēIb_ ‘É?øúūttēė{ŒW¨]ËĢļĶė›\ĢĘåBŋ<õĮ͒8é]y<Ž~‚šsJUšd†&ĘdŒí!ļąõīšGãIĨŖIÅĖōÄûGÆÆĨÖm#—Lŧ–8āYÄL|ĶftŦ›ęŪ;¯ŪFˇmXĻ!—3rpĞũ:ķ[牴̋rĀ<‰€I1ëŒgĄ#Ŗ¨ūŸ-ͤ’\Ė“3å*›F>cøķšîU÷nõŽ5lĻ…g™cc,îÅUPúķĪįé]mŗųļË.Ō…Ô6Ō9õĄÍÆ: ņM×ڝ<;€#ƒiąî-ĐÕ!¸Ôü›õˇk6†'lÉų}}ū†Ĩ/ģzTī¯e흊Âãr˛Ęîų˛ “–ëÍ]1⓯sß­6€ĩ8=1ĮĨ>F؅ąĶž™5b’ØëÚ¤,9=âšĀŽĄu6Ĩ<ˇw˜Î%UH˜>ŌcÁĮ~ Ž2r=ëĻđķŖÃ,ˆwWę8č}+RŅĸ×nå’8J¸8‘q¸2˜ÔįÔpįßJ—JĶžŨ-î-cģķbi `E 0§ž˜į=Í[ĩ‰5ŋZŊŊXn ī×­; å—áš.ÂÆ=ׇ4kŦ3Z$2o˜ČüĒîakĨÆŪIs#ã|’H]Ž:r•[ĄãaúR„Nth¸‰rG=j…ū•o¨?™į][MĻ[iJ3CØ÷üęō ëåãëR įe 1,ŧ+ŖÛ9Û´ķ7YŽģū}ŋ ´ú ĀíRņ˛@y†æ ž=°1͝ZĶq÷sīRaT4îĀĀ´đžÁâŽ]€‚!iœĮŸ÷sĪã]׊ˆ*ŽvÎiãūYūt›¸~IāÔk $ãĻjLđ2‚€Ž#č(n§ņ™.œ ŊŧŽ‘ŨģųeG P~aÎ9ēBëœp)ƒÖ1øŠV r6gđ  1œį'ĄĨWMˁžeę=3Jģs’zŌä`ü´ĮÔ<=¤ęw 5Õģ c‘“ûÛHÍ%ˇ‡ô{hLvú|ŽĖ.:î<įņ­‚Š{riB¨ƒNác(čZtļkå´7.@ķ$’1šÛģgŽMAeáNšķ­mHt9]ÎĖûp+m•= üi6"œ…?n9îqUī­`ŋĩ0\&ô$¤{G QVܡœúĶiÆ}~jįáŅÖãĪ–.œt72´ŸĄ5{û&ÉN<˜Í¨û1Aå†ūđ^™­-ąį;OôŽõ׆§p0'đĻ‹4æxí<‡Îso#F⤠Ôļŗļ˛ˇX`Œ$kĐįß×ņŠÛjžŋ:Ī8 ß\Ņq9čhĻ.Ür}Í ŽLëSƒ‘TĐņīSĄíRhÉà b¤ ëPOnĀÍ(œpy¨•ŗOŠLԜ 5#ŽiáąŪ€%Î8äŌ‡nبƒcŪžE %q˙Ö§įŠ‡'üšx$P2`H´íÄu¨ĪZ\žy  9āp'ŌĄ ×ķ§ĪJxoAJ[<LČī×4drs“@)9éI’3֚N)ÁąéEĀp$ãšQģšĻîöŖ>⋈ąíÍ(ÎHĪj8&Œā‖Ī4|Äį9ĻŸ­7 įEĀ{ŠnOJC€yúŌ3ĐĶ…‰ÁÍ (Ũ“ĐRnÆh ÄūÂNsÆiY˛9ĻãĐ@ ĮCúQQ–ëE0ąËE6GJļŽsYvŌ1äÅM^BßÜoĘĻæ–.+ƞĐÕAŧ¸ß•įŠæŽŖ§=Äņ˛nCĻĖ  “ôäŅ>ģlÖŽl§IĨŽM|œ† G׿Ŧ77 7 rqŠä,üG¨OqËdë˛ę%søaŋZę3 gëŠvRÚ7/aYڕÔļ–/4`4‰ķíԛ¸īôŦ#Pē˜L—q˜¤R07†ČSČ÷Sų։œäûw D¸ųģĐ}ûW1qĒG|æKKå0ØÛ˛¸#å<’˙Š´›š¤ģ&Y‹*6ôČÃc¯ûl?ā4žĀԘQēj Čä{IDD‡Û•Áî9„žfæÛ?^Tí=úw˙j:čŧ¤$’Hĸ’"ŗD’FN×PEĀĮQÅKƒØSTqÖ¤‚Ã/4ƒŽqCd úõ4/LŠ2ęs ´’ŧĒvįščįŠÎŠĶS†yÜ—ļÚDD8 ŧđ~ī=HüîjŪ “ ˙zâ!˙ƒũ)/­‰Û*ļI3˜Āč}Ĩrëmq4ūl ’ ,ĸpšųōÃh>ŖņĐč ,kqnņÉå¤Ŧc‘™JœœācZƎ펯ļųją—!H”Įxū3ßõ̚.§ökSĘâS'yēŊō=})°4õÕ dŅYAsķ ķå=RĶ|Ŗ{‰oå!ųL{Hæ~éųUŊ`É%˛¨ˇÃœŽ>`G¯ŊgØ\Ë-ÂĘ-¤M˛ûŌvYzuã÷”–ĀtŌȰĀō°'b“ßÚ°ŧNķiúo˜˜Ė7°ĮĖÅX÷÷Įā1W­īfÔmmüû­diŅJĘ8ųō=žZ­âhíu V˛k.XȗnĖįh'–h[ŨF-.cIŨWËvNđD'˙vĐ­ĀViŒ@vĒĀĪ9ëŒf¸eļŲēĐ-¤°B Ûĸ*įũķétđEŠi=ŧpŲ%ĸK˛Ôo¸Xā?Ô Æ†K՗ûBuŒĒŗIōæŖĶæjŌĐ%Ų‘ŨKeXy#ËBxúšŖĢŸŗŨ;lAČℐŸũ+!.téäšt7dŽC4AԀR1ũÕSøũhHģQXÚKU˜â/1ŲķĶ6Žú(m¯nx’ÖEō'ÉwvļKw 8Žk¨Ōŧ†’Ūhu ¯-fš]‚d GōļTdg_JĨâHôÉ|ˇķb#‘’ äTpF<úP´`'†-gļūŌŌ'Y<† c˜údŠīžqŸĪÚ¨ëŋ跋¨}ŸËÜ 7d°+æ⁓Ž€įŠĪs:-${PROJECT_VERSION}$<$:d>>") if(MINGW) set_target_properties( leptonica PROPERTIES SUFFIX "-${PROJECT_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}") endif(MINGW) if(BUILD_SHARED_LIBS) target_compile_definitions(leptonica PRIVATE -DLIBLEPT_EXPORTS) endif() if(GIF_LIBRARIES) target_include_directories(leptonica PRIVATE ${GIF_INCLUDE_DIR}) target_link_libraries(leptonica PRIVATE ${GIF_LIBRARIES}) endif() if(JPEG_LIBRARIES) target_include_directories(leptonica PRIVATE ${JPEG_INCLUDE_DIR}) target_link_libraries(leptonica PRIVATE ${JPEG_LIBRARIES}) endif() if(OPENJPEG_LIBRARIES) # openjp2 < 2.5.0 does not sets the INTERFACE_INCLUDE_DIRECTORIES property target_include_directories(leptonica PRIVATE ${OPENJPEG_INCLUDE_DIRS}) target_link_libraries(leptonica PRIVATE openjp2) endif() if(PNG_LIBRARIES) target_include_directories(leptonica PRIVATE ${PNG_INCLUDE_DIRS}) target_link_libraries(leptonica PRIVATE ${PNG_LIBRARIES}) endif() if(TIFF_LIBRARIES) target_include_directories(leptonica PRIVATE ${TIFF_INCLUDE_DIR}) target_link_libraries(leptonica PRIVATE ${TIFF_LIBRARIES}) endif() if(WebP_LIBRARIES) if(TARGET WebP::webp) target_link_libraries(leptonica PRIVATE WebP::webp WebP::libwebpmux) else() target_link_libraries(leptonica PRIVATE ${WebP_LIBRARIES}) target_include_directories(leptonica PRIVATE ${WebP_INCLUDE_DIR}) endif() endif() if(ZLIB_LIBRARIES) target_include_directories(leptonica PRIVATE ${ZLIB_INCLUDE_DIRS}) target_link_libraries(leptonica PRIVATE ${ZLIB_LIBRARIES}) endif() if(UNIX) target_link_libraries(leptonica PRIVATE m) set(lib ${CMAKE_SHARED_LIBRARY_PREFIX}) set(dll ${CMAKE_SHARED_LIBRARY_SUFFIX}) set(old_target ${lib}lept${dll}) if(SYM_LINK) add_custom_target( lept ALL ${CMAKE_COMMAND} -E create_symlink "$" ${old_target} DEPENDS ${PROJECT_NAME} COMMENT "Creating lept symlink") install(FILES ${CMAKE_BINARY_DIR}/src/${old_target} DESTINATION lib) endif(SYM_LINK) endif() if(MSVC) target_link_libraries(leptonica PRIVATE user32.lib gdi32.lib) endif() if(NOT SW_BUILD) export(TARGETS leptonica FILE ${CMAKE_BINARY_DIR}/LeptonicaTargets.cmake) else() target_link_libraries( leptonica PRIVATE org.sw.demo.gif org.sw.demo.jpeg org.sw.demo.glennrp.png org.sw.demo.tiff org.sw.demo.webmproject.webp org.sw.demo.uclouvain.openjpeg.openjp2) file(WRITE ${CMAKE_BINARY_DIR}/LeptonicaTargets.cmake "include(${CMAKE_BINARY_DIR}/cppan.cmake)\n") export( TARGETS leptonica APPEND FILE ${CMAKE_BINARY_DIR}/LeptonicaTargets.cmake) endif() install( TARGETS leptonica EXPORT LeptonicaTargets RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install(EXPORT LeptonicaTargets DESTINATION ${leptonica_INSTALL_CMAKE_DIR}) install(FILES ${hdr} ${CMAKE_BINARY_DIR}/src/endianness.h DESTINATION include/leptonica) # ############################################################################## leptonica-1.86.0/src/Makefile.am000066400000000000000000000127701506303110300164060ustar00rootroot00000000000000AM_CPPFLAGS = $(ZLIB_CFLAGS) $(LIBPNG_CFLAGS) $(JPEG_CFLAGS) $(LIBTIFF_CFLAGS) $(LIBWEBP_CFLAGS) $(LIBWEBPMUX_CFLAGS) $(LIBJP2K_CFLAGS) lib_LTLIBRARIES = libleptonica.la libleptonica_la_LIBADD = $(LIBPNG_LIBS) $(JPEG_LIBS) $(GIFLIB_LIBS) $(LIBTIFF_LIBS) $(LIBWEBP_LIBS) $(LIBWEBPMUX_LIBS) $(LIBJP2K_LIBS) $(GDI_LIBS) $(LIBM) $(ZLIB_LIBS) libleptonica_la_LDFLAGS = -no-undefined -version-info 6:0:0 libleptonica_la_SOURCES = adaptmap.c affine.c \ affinecompose.c arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ bootnumgen1.c bootnumgen2.c \ bootnumgen3.c bootnumgen4.c \ boxbasic.c boxfunc1.c boxfunc2.c boxfunc3.c \ boxfunc4.c boxfunc5.c bytearray.c \ ccbord.c ccthin.c checkerboard.c \ classapp.c colorcontent.c colorfill.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c correlscore.c \ dewarp1.c dewarp2.c dewarp3.c dewarp4.c \ dnabasic.c dnafunc1.c dnahash.c \ dwacomb.2.c dwacomblow.2.c \ edge.c encoding.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c gifio.c gifiostub.c \ gplot.c graphics.c graymorph.c \ grayquant.c hashmap.c heap.c jbclass.c \ jp2kheader.c jp2kheaderstub.c \ jp2kio.c jp2kiostub.c jpegio.c jpegiostub.c \ kernel.c leptwin.c libversions.c list.c map.c maze.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partify.c partition.c \ pdfapp.c pdfappstub.c \ pdfio1.c pdfio1stub.c pdfio2.c pdfio2stub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c pixcomp.c pixconv.c \ pixlabel.c pixtiling.c pngio.c pngiostub.c \ pnmio.c pnmiostub.c projective.c \ psio1.c psio1stub.c psio2.c psio2stub.c \ ptabasic.c ptafunc1.c ptafunc2.c ptra.c \ quadtree.c queue.c rank.c rbtree.c \ readbarcode.c readfile.c \ recogbasic.c recogdid.c recogident.c \ recogtrain.c regutils.c renderpdf.c \ rop.c roplow.c \ rotate.c rotateam.c rotateorth.c rotateshear.c \ runlength.c sarray1.c sarray2.c \ scale1.c scale2.c seedfill.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c stringcode.c \ strokes.c sudoku.c textops.c \ tiffio.c tiffiostub.c \ utils1.c utils2.c warper.c watershed.c \ webpio.c webpiostub.c webpanimio.c webpanimiostub.c \ writefile.c zlibmem.c zlibmemstub.c pkginclude_HEADERS = allheaders.h alltypes.h \ array.h array_internal.h \ arrayaccess.h bbuffer.h \ bilateral.h bmf.h bmfdata.h bmp.h \ ccbord.h ccbord_internal.h \ colorfill.h dewarp.h endianness.h environ.h \ gplot.h hashmap.h heap.h imageio.h jbclass.h \ leptwin.h list.h morph.h \ pix.h pix_internal.h \ ptra.h queue.h rbtree.h \ readbarcode.h recog.h regutils.h stack.h \ stringcode.h sudoku.h watershed.h LDADD = libleptonica.la EXTRA_DIST = hmttemplate1.txt hmttemplate2.txt \ leptonica-license.txt \ morphtemplate1.txt morphtemplate2.txt \ stringtemplate1.txt stringtemplate2.txt $(top_builddir)/prog/xtractprotos$(EXEEXT): libleptonica.la $(MAKE) -C $(top_builddir)/prog xtractprotos$(EXEEXT) allheaders: $(top_builddir)/prog/xtractprotos$(EXEEXT) $(libleptonica_la_SOURCES) cd $(srcdir) && $(abs_top_builddir)/prog/xtractprotos$(EXEEXT) -prestring=LEPT_DLL -protos=inline $(libleptonica_la_SOURCES) leptonica-1.86.0/src/adaptmap.c000066400000000000000000003475561506303110300163220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file adaptmap.c *

 *
 *  -------------------------------------------------------------------
 *
 *  Image binarization algorithms are found in:
 *     grayquant.c:   standard, simple, general grayscale quantization
 *     adaptmap.c:    local adaptive; mostly gray-to-gray in preparation
 *                    for binarization
 *     binarize.c:    special binarization methods, locally adaptive.
 *     pageseg.c:     locally adaptive cleaning operation with several options
 *
 *  -------------------------------------------------------------------
 *
 *      Clean background to white using background normalization
 *          PIX       *pixCleanBackgroundToWhite()
 *
 *      Adaptive background normalization (top-level functions)
 *          PIX       *pixBackgroundNormSimple()     8 and 32 bpp
 *          PIX       *pixBackgroundNorm()           8 and 32 bpp
 *          PIX       *pixBackgroundNormMorph()      8 and 32 bpp
 *
 *      Arrays of inverted background values for normalization (16 bpp)
 *          l_int32    pixBackgroundNormGrayArray()   8 bpp input
 *          l_int32    pixBackgroundNormRGBArrays()   32 bpp input
 *          l_int32    pixBackgroundNormGrayArrayMorph()   8 bpp input
 *          l_int32    pixBackgroundNormRGBArraysMorph()   32 bpp input
 *
 *      Measurement of local background
 *          l_int32    pixGetBackgroundGrayMap()        8 bpp
 *          l_int32    pixGetBackgroundRGBMap()         32 bpp
 *          l_int32    pixGetBackgroundGrayMapMorph()   8 bpp
 *          l_int32    pixGetBackgroundRGBMapMorph()    32 bpp
 *          l_int32    pixFillMapHoles()
 *          PIX       *pixExtendByReplication()         8 bpp
 *          l_int32    pixSmoothConnectedRegions()      8 bpp
 *
 *      Measurement of local foreground
 *          l_int32    pixGetForegroundGrayMap()        8 bpp
 *
 *      Generate inverted background map for each component
 *          PIX       *pixGetInvBackgroundMap()   16 bpp
 *
 *      Apply inverse background map to image
 *          PIX       *pixApplyInvBackgroundGrayMap()   8 bpp
 *          PIX       *pixApplyInvBackgroundRGBMap()    32 bpp
 *
 *      Apply variable map
 *          PIX       *pixApplyVariableGrayMap()        8 bpp
 *
 *      Non-adaptive (global) mapping
 *          PIX       *pixGlobalNormRGB()               32 bpp or cmapped
 *          PIX       *pixGlobalNormNoSatRGB()          32 bpp
 *
 *      Adaptive threshold spread normalization
 *          l_int32    pixThresholdSpreadNorm()         8 bpp
 *
 *      Adaptive background normalization (flexible adaptaption)
 *          PIX       *pixBackgroundNormFlex()          8 bpp
 *
 *      Adaptive contrast normalization
 *          PIX             *pixContrastNorm()          8 bpp
 *          static l_int32   pixMinMaxTiles()
 *          static l_int32   pixSetLowContrast()
 *          static PIX      *pixLinearTRCTiled()
 *          static l_int32  *iaaGetLinearTRC()
 *
 *      Adaptive normalization with MinMax conversion of RGB to gray,
 *      contrast enhancement and optional 2x upscale binarization
 *          PIX             *pixBackgroundNormTo1MinMax()
 *          PIX             *pixConvertTo8MinMax()
 *          static l_int32  *pixSelectiveContrastMod()
 *
 *  Background normalization is done by generating a reduced map (or set
 *  of maps) representing the estimated background value of the
 *  input image, and using this to shift the pixel values so that
 *  this background value is set to some constant value.
 *
 *  Specifically, normalization has 3 steps:
 *    (1) Generate a background map at a reduced scale.
 *    (2) Make the array of inverted background values by inverting
 *        the map.  The result is an array of local multiplicative factors.
 *    (3) Apply this inverse background map to the image
 *
 *  The inverse background arrays can be generated in two different ways here:
 *    (1) Remove the 'foreground' pixels and average over the remaining
 *        pixels in each tile.  Propagate values into tiles where
 *        values have not been assigned, either because there was not
 *        enough background in the tile or because the tile is covered
 *        by a foreground region described by an image mask.
 *        After the background map is made, the inverse map is generated by
 *        smoothing over some number of adjacent tiles
 *        (block convolution) and then inverting.
 *    (2) Remove the foreground pixels using a morphological closing
 *        on a subsampled version of the image.  Propagate values
 *        into pixels covered by an optional image mask.  Invert the
 *        background map without preconditioning by convolutional smoothing.
 *
 *  Other methods for adaptively normalizing the image are also given here.
 *
 *  (1) pixThresholdSpreadNorm() computes a local threshold over the image
 *      and normalizes the input pixel values so that this computed threshold
 *      is a constant across the entire image.
 *
 *  (2) pixContrastNorm() computes and applies a local TRC so that the
 *      local dynamic range is expanded to the full 8 bits, where the
 *      darkest pixels are mapped to 0 and the lightest to 255.  This is
 *      useful for improving the appearance of pages with very light
 *      foreground or very dark background, and where the local TRC
 *      function doesn't change rapidly with position.
 *
 *  Adaptive binarization is done in two steps:
 *    (1) Background normalization by some method
 *    (2) Global thresholding with a value appropriate to the normalization.
 *  There are several high-level functions in leptonica for doing adaptive
 *  binarization on grayscale and color images, such as:
 *    * pixAdaptThresholdToBinary()   (in grayquant.c)
 *    * pixConvertTo1Adaptive()       (in pixconv.c)
 *    * pixCleanImage()               (in pageseg.c)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Default input parameters for pixBackgroundNormSimple() * Notes: * (1) mincount must never exceed the tile area (width * height) * (2) bgval must be sufficiently below 255 to avoid accidental * saturation; otherwise it should be large to avoid * shrinking the dynamic range * (3) results should otherwise not be sensitive to these values */ static const l_int32 DefaultTileWidth = 10; /*!< default tile width */ static const l_int32 DefaultTileHeight = 15; /*!< default tile height */ static const l_int32 DefaultFgThreshold = 60; /*!< default fg threshold */ static const l_int32 DefaultMinCount = 40; /*!< default minimum count */ static const l_int32 DefaultBgVal = 200; /*!< default bg value */ static const l_int32 DefaultXSmoothSize = 2; /*!< default x smooth size */ static const l_int32 DefaultYSmoothSize = 1; /*!< default y smooth size */ static l_int32 pixMinMaxTiles(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax); static l_int32 pixSetLowContrast(PIX *pixs1, PIX *pixs2, l_int32 mindiff); static PIX *pixLinearTRCTiled(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax); static l_int32 *iaaGetLinearTRC(l_int32 **iaa, l_int32 diff); static l_ok pixSelectiveContrastMod(PIX *pixs, l_int32 contrast); #ifndef NO_CONSOLE_IO #define DEBUG_GLOBAL 0 /*!< set to 1 to debug pixGlobalNormNoSatRGB() */ #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Clean background to white using background normalization * *------------------------------------------------------------------*/ /*! * \brief pixCleanBackgroundToWhite() * * \param[in] pixs 8 bpp grayscale or 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] pixg [optional] 8 bpp grayscale version; can be null * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 * \param[in] blackval dark value to set to black (0) * \param[in] whiteval light value to set to white (255) * \return pixd 8 bpp or 32 bpp rgb, or NULL on error * *
 * Notes:
 *    (1) This is a simplified interface for cleaning an image.
 *        For comparison, see pixAdaptThresholdToBinaryGen().
 *    (2) The suggested default values for the input parameters are:
 *          gamma:    1.0  (reduce this to increase the contrast; e.g.,
 *                          for light text)
 *          blackval   70  (a bit more than 60)
 *          whiteval  190  (a bit less than 200)
 *    (3) Note: the whiteval must not exceed 200, which is the value
 *        that the background is set to in pixBackgroundNormSimple().
 * 
*/ PIX * pixCleanBackgroundToWhite(PIX *pixs, PIX *pixim, PIX *pixg, l_float32 gamma, l_int32 blackval, l_int32 whiteval) { l_int32 d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32", __func__, NULL); if (whiteval > 200) { L_WARNING("white value %d must not exceed 200; reset to 190", __func__, whiteval); whiteval = 190; } pixd = pixBackgroundNormSimple(pixs, pixim, pixg); if (!pixd) return (PIX *)ERROR_PTR("background norm failedd", __func__, NULL); pixGammaTRC(pixd, pixd, gamma, blackval, whiteval); return pixd; } /*------------------------------------------------------------------* * Adaptive background normalization * *------------------------------------------------------------------*/ /*! * \brief pixBackgroundNormSimple() * * \param[in] pixs 8 bpp grayscale or 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] pixg [optional] 8 bpp grayscale version; can be null * \return pixd 8 bpp or 32 bpp rgb, or NULL on error * *
 * Notes:
 *    (1) This is a simplified interface to pixBackgroundNorm(),
 *        where seven parameters are defaulted.
 *    (2) The input image is either grayscale or rgb.
 *    (3) See pixBackgroundNorm() for usage and function.
 * 
*/ PIX * pixBackgroundNormSimple(PIX *pixs, PIX *pixim, PIX *pixg) { return pixBackgroundNorm(pixs, pixim, pixg, DefaultTileWidth, DefaultTileHeight, DefaultFgThreshold, DefaultMinCount, DefaultBgVal, DefaultXSmoothSize, DefaultYSmoothSize); } /*! * \brief pixBackgroundNorm() * * \param[in] pixs 8 bpp grayscale or 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] pixg [optional] 8 bpp grayscale version; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[in] bgval target bg val; typ. > 128 * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \return pixd 8 bpp or 32 bpp rgb, or NULL on error * *
 * Notes:
 *    (1) This is a top-level interface for normalizing the image intensity
 *        by mapping the image so that the background is near the input
 *        value %bgval.
 *    (2) The input image is either grayscale or rgb.
 *    (3) For each component in the input image, the background value
 *        in each tile is estimated using the values in the tile that
 *        are not part of the foreground, where the foreground is
 *        determined by %thresh.
 *    (4) An optional binary mask can be specified, with the foreground
 *        pixels typically over image regions.  The resulting background
 *        map values will be determined by surrounding pixels that are
 *        not under the mask foreground.  The origin (0,0) of this mask
 *        is assumed to be aligned with the origin of the input image.
 *        This binary mask must not fully cover pixs, because then there
 *        will be no pixels in the input image available to compute
 *        the background.
 *    (5) An optional grayscale version of the input pixs can be supplied.
 *        The only reason to do this is if the input is RGB and this
 *        grayscale version can be used elsewhere.  If the input is RGB
 *        and this is not supplied, it is made internally using only
 *        the green component, and destroyed after use.
 *    (6) The dimensions of the pixel tile (%sx, %sy) give the amount
 *        by which the map is reduced in size from the input image.
 *    (7) The input image is binarized using %thresh, in order to
 *        locate the foreground components.  If this is set too low,
 *        some actual foreground may be used to determine the maps;
 *        if set too high, there may not be enough background
 *        to determine the map values accurately.  Typically, it is
 *        better to err by setting the threshold too high.
 *    (8) A %mincount threshold is a minimum count of pixels in a
 *        tile for which a background reading is made, in order for that
 *        pixel in the map to be valid.  This number should perhaps be
 *        at least 1/3 the size of the tile.
 *    (9) A %bgval target background value for the normalized image.  This
 *        should be at least 128.  If set too close to 255, some
 *        clipping will occur in the result.  It is recommended to use
 *        %bgval = 200.
 *    (10) Two factors, %smoothx and %smoothy, are input for smoothing
 *         the map.  Each low-pass filter kernel dimension is
 *         is 2 * (smoothing factor) + 1, so a
 *         value of 0 means no smoothing. A value of 1 or 2 is recommended.
 *    (11) See pixCleanBackgroundToWhite().  The recommended value for %bgval
 *         is 200.  As done there, pixBackgroundNorm() is typically followed
 *         by pixGammaTRC(), where the maxval must not not exceed %bgval.
 * 
*/ PIX * pixBackgroundNorm(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy) { l_int32 d, allfg; PIX *pixm, *pixmi, *pixd; PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", __func__, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return (PIX *)ERROR_PTR("pixim all foreground", __func__, NULL); } pixd = NULL; if (d == 8) { pixm = NULL; pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); if (!pixm) { L_WARNING("map not made; return a copy of the source\n", __func__); return pixCopy(NULL, pixs); } pixmi = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); if (!pixmi) { L_WARNING("pixmi not made; return a copy of source\n", __func__); pixDestroy(&pixm); return pixCopy(NULL, pixs); } else { pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, sx, sy); } pixDestroy(&pixm); pixDestroy(&pixmi); } else { pixmr = pixmg = pixmb = NULL; pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, mincount, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); L_WARNING("map not made; return a copy of the source\n", __func__); return pixCopy(NULL, pixs); } pixmri = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); pixmgi = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); pixmbi = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); if (!pixmri || !pixmgi || !pixmbi) { L_WARNING("not all pixm*i are made; return src copy\n", __func__); pixd = pixCopy(NULL, pixs); } else { pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, sx, sy); } pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixmri); pixDestroy(&pixmgi); pixDestroy(&pixmbi); } if (!pixd) ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); return pixd; } /*! * \brief pixBackgroundNormMorph() * * \param[in] pixs 8 bpp grayscale or 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] reduction at which morph closings are done; between 2 and 16 * \param[in] size of square Sel for the closing; use an odd number * \param[in] bgval target bg val; typ. > 128 * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *    (1) This is a top-level interface for normalizing the image intensity
 *        by mapping the image so that the background is near the input
 *        value 'bgval'.
 *    (2) The input image is either grayscale or rgb.
 *    (3) For each component in the input image, the background value
 *        is estimated using a grayscale closing; hence the 'Morph'
 *        in the function name.
 *    (4) An optional binary mask can be specified, with the foreground
 *        pixels typically over image regions.  The resulting background
 *        map values will be determined by surrounding pixels that are
 *        not under the mask foreground.  The origin (0,0) of this mask
 *        is assumed to be aligned with the origin of the input image.
 *        This binary mask must not fully cover pixs, because then there
 *        will be no pixels in the input image available to compute
 *        the background.
 *    (5) The map is computed at reduced size (given by 'reduction')
 *        from the input pixs and optional pixim.  At this scale,
 *        pixs is closed to remove the background, using a square Sel
 *        of odd dimension.  The product of reduction * size should be
 *        large enough to remove most of the text foreground.
 *    (6) No convolutional smoothing needs to be done on the map before
 *        inverting it.
 *    (7) A 'bgval' target background value for the normalized image.  This
 *        should be at least 128.  If set too close to 255, some
 *        clipping will occur in the result.
 * 
*/ PIX * pixBackgroundNormMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval) { l_int32 d, allfg; PIX *pixm, *pixmi, *pixd; PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (reduction < 2 || reduction > 16) return (PIX *)ERROR_PTR("reduction must be between 2 and 16", __func__, NULL); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return (PIX *)ERROR_PTR("pixim all foreground", __func__, NULL); } pixd = NULL; if (d == 8) { pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); if (!pixm) return (PIX *)ERROR_PTR("pixm not made", __func__, NULL); pixmi = pixGetInvBackgroundMap(pixm, bgval, 0, 0); if (!pixmi) ERROR_PTR("pixmi not made", __func__, NULL); else pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, reduction, reduction); pixDestroy(&pixm); pixDestroy(&pixmi); } else { /* d == 32 */ pixmr = pixmg = pixmb = NULL; pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return (PIX *)ERROR_PTR("not all pixm*", __func__, NULL); } pixmri = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); pixmgi = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); pixmbi = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); if (!pixmri || !pixmgi || !pixmbi) ERROR_PTR("not all pixm*i are made", __func__, NULL); else pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, reduction, reduction); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixmri); pixDestroy(&pixmgi); pixDestroy(&pixmbi); } if (!pixd) ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); return pixd; } /*-------------------------------------------------------------------------* * Arrays of inverted background values for normalization * *-------------------------------------------------------------------------* * Notes for these four functions: * * (1) They are useful if you need to save the actual mapping array. * * (2) They could be used in the top-level functions but are * * not because their use makes those functions less clear. * * (3) Each component in the input pixs generates a 16 bpp pix array. * *-------------------------------------------------------------------------*/ /*! * \brief pixBackgroundNormGrayArray() * * \param[in] pixs 8 bpp grayscale * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[in] bgval target bg val; typ. > 128 * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \param[out] ppixd 16 bpp array of inverted background value * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) See notes in pixBackgroundNorm().
 *    (2) This returns a 16 bpp pix that can be used by
 *        pixApplyInvBackgroundGrayMap() to generate a normalized version
 *        of the input pixs.
 * 
*/ l_ok pixBackgroundNormGrayArray(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd) { l_int32 allfg; PIX *pixm; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", __func__, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", __func__, 1); } pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); if (!pixm) return ERROR_INT("pixm not made", __func__, 1); *ppixd = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); pixCopyResolution(*ppixd, pixs); pixDestroy(&pixm); return 0; } /*! * \brief pixBackgroundNormRGBArrays() * * \param[in] pixs 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] pixg [optional] 8 bpp grayscale version; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[in] bgval target bg val; typ. > 128 * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \param[out] ppixr 16 bpp array of inverted R background value * \param[out] ppixg 16 bpp array of inverted G background value * \param[out] ppixb 16 bpp array of inverted B background value * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) See notes in pixBackgroundNorm().
 *    (2) This returns a set of three 16 bpp pix that can be used by
 *        pixApplyInvBackgroundGrayMap() to generate a normalized version
 *        of each component of the input pixs.
 * 
*/ l_ok pixBackgroundNormRGBArrays(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 allfg; PIX *pixmr, *pixmg, *pixmb; if (!ppixr || !ppixg || !ppixb) return ERROR_INT("&pixr, &pixg, &pixb not all defined", __func__, 1); *ppixr = *ppixg = *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", __func__, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", __func__, 1); } pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, mincount, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return ERROR_INT("not all pixm* made", __func__, 1); } *ppixr = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); *ppixg = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); *ppixb = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return 0; } /*! * \brief pixBackgroundNormGrayArrayMorph() * * \param[in] pixs 8 bpp grayscale * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] reduction at which morph closings are done; between 2 and 16 * \param[in] size of square Sel for the closing; use an odd number * \param[in] bgval target bg val; typ. > 128 * \param[out] ppixd 16 bpp array of inverted background value * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) See notes in pixBackgroundNormMorph().
 *    (2) This returns a 16 bpp pix that can be used by
 *        pixApplyInvBackgroundGrayMap() to generate a normalized version
 *        of the input pixs.
 * 
*/ l_ok pixBackgroundNormGrayArrayMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd) { l_int32 allfg; PIX *pixm; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (reduction < 2 || reduction > 16) return ERROR_INT("reduction must be between 2 and 16", __func__, 1); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", __func__, 1); } pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); if (!pixm) return ERROR_INT("pixm not made", __func__, 1); *ppixd = pixGetInvBackgroundMap(pixm, bgval, 0, 0); pixCopyResolution(*ppixd, pixs); pixDestroy(&pixm); return 0; } /*! * \brief pixBackgroundNormRGBArraysMorph() * * \param[in] pixs 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] reduction at which morph closings are done; between 2 and 16 * \param[in] size of square Sel for the closing; use an odd number * \param[in] bgval target bg val; typ. > 128 * \param[out] ppixr 16 bpp array of inverted R background value * \param[out] ppixg 16 bpp array of inverted G background value * \param[out] ppixb 16 bpp array of inverted B background value * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) See notes in pixBackgroundNormMorph().
 *    (2) This returns a set of three 16 bpp pix that can be used by
 *        pixApplyInvBackgroundGrayMap() to generate a normalized version
 *        of each component of the input pixs.
 * 
*/ l_ok pixBackgroundNormRGBArraysMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 allfg; PIX *pixmr, *pixmg, *pixmb; if (!ppixr || !ppixg || !ppixb) return ERROR_INT("&pixr, &pixg, &pixb not all defined", __func__, 1); *ppixr = *ppixg = *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (reduction < 2 || reduction > 16) return ERROR_INT("reduction must be between 2 and 16", __func__, 1); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", __func__, 1); } pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return ERROR_INT("not all pixm* made", __func__, 1); } *ppixr = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); *ppixg = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); *ppixb = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return 0; } /*------------------------------------------------------------------* * Measurement of local background * *------------------------------------------------------------------*/ /*! * \brief pixGetBackgroundGrayMap() * * \param[in] pixs 8 bpp grayscale; not cmapped * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; * it should not have only foreground pixels * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[out] ppixd 8 bpp grayscale map * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The background is measured in regions that don't have
 *          images.  It is then propagated into the image regions,
 *          and finally smoothed in each image region.
 * 
*/ l_ok pixGetBackgroundGrayMap(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd) { l_int32 w, h, wd, hd, wim, him, wpls, wplim, wpld, wplf; l_int32 xim, yim, delx, nx, ny, i, j, k, m; l_int32 count, sum, val8; l_int32 empty, fgpixels; l_uint32 *datas, *dataim, *datad, *dataf, *lines, *lineim, *lined, *linef; l_float32 scalex, scaley; PIX *pixd, *piximi, *pixb, *pixf, *pixims; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", __func__, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* Evaluate the 'image' mask, pixim, and make sure * it is not all fg. */ fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) return ERROR_INT("pixim all fg; no background", __func__, 1); pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Generate the foreground mask, pixf, which is at full resolution. * mask has a value 0 for pixels in pixs that are likely to be * in the background, which is the condition for including * those source pixels when taking an average of the background * values for each tile. */ pixb = pixThresholdToBinary(pixs, thresh); pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); pixDestroy(&pixb); if (!pixf) return ERROR_INT("pixf not made", __func__, 1); /* ------------- Set up the output map pixd --------------- */ /* In pixd, each 8 bit pixel represents a tile of size (sx, sy) * in pixs. Each pixel in pixd will be filled with the average * background value of that tile in pixs. */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); wd = (w + sx - 1) / sx; hd = (h + sy - 1) / sy; pixd = pixCreate(wd, hd, 8); /* Here we only compute map values in pixd for tiles that * are complete. In general, the extreme right and bottom * tiles in pixs, which correspond to the rightmost column * and bottom row of pixd, are not complete. These will * be filled in later. * * Use the full resolution mask pixf to decide which pixels * are used in each tile to estimate the background value. * After this operation, pixels in the background map pixd * that have not been set must be filled using adjacent pixels. */ nx = w / sx; ny = h / sy; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); wplf = pixGetWpl(pixf); dataf = pixGetData(pixf); for (i = 0; i < ny; i++) { lines = datas + sy * i * wpls; linef = dataf + sy * i * wplf; lined = datad + i * wpld; for (j = 0; j < nx; j++) { delx = j * sx; sum = 0; count = 0; for (k = 0; k < sy; k++) { for (m = 0; m < sx; m++) { if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { sum += GET_DATA_BYTE(lines + k * wpls, delx + m); count++; } } } if (count >= mincount) { val8 = sum / count; SET_DATA_BYTE(lined, j, val8); } } } pixDestroy(&pixf); /* If there is an optional mask with fg pixels, erase the previous * calculation for the corresponding map pixels, setting the * map values to 0. Then, when all the map holes are filled, * these erased pixels will be set by the surrounding map values, * along with the ones not set above using the background values. * * The calculation here is relatively efficient: for each pixel * in pixd (which corresponds to a tile of mask pixels in pixim) * we look only at the pixel in pixim that is at the center * of the tile. If the mask pixel is ON, we reset the map * pixel in pixd to 0, so that it can later be filled in. */ pixims = NULL; if (pixim && fgpixels) { wim = pixGetWidth(pixim); him = pixGetHeight(pixim); dataim = pixGetData(pixim); wplim = pixGetWpl(pixim); for (i = 0; i < ny; i++) { yim = i * sy + sy / 2; if (yim >= him) break; lineim = dataim + yim * wplim; for (j = 0; j < nx; j++) { xim = j * sx + sx / 2; if (xim >= wim) break; if (GET_DATA_BIT(lineim, xim)) pixSetPixel(pixd, j, i, 0); } } } /* Fill all the holes in the map. * Note that (nx,ny) represent the numbers of complete tiles * in the x and y directions of pixs, whereas the dimensions * of pixd are usually larger by 1. */ if (pixFillMapHoles(pixd, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixd); L_WARNING("can't fill holes and make the map\n", __func__); return 1; } /* Finally, for each connected region corresponding to the * 'image' mask, reset all pixels to their average value. * Each of these components represents an image (or part of one) * in the input, and this smooths the background values * in each of these regions. */ if (pixim && fgpixels) { scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixims = pixScaleBySampling(pixim, scalex, scaley); pixSmoothConnectedRegions(pixd, pixims, 2); pixDestroy(&pixims); } *ppixd = pixd; pixCopyResolution(*ppixd, pixs); return 0; } /*! * \brief pixGetBackgroundRGBMap() * * \param[in] pixs 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it * should not have all foreground pixels * \param[in] pixg [optional] 8 bpp grayscale version; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[out] ppixmr red component map * \param[out] ppixmg green component map * \param[out] ppixmb blue component map * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If pixg, which is a grayscale version of pixs, is provided,
 *          use this internally to generate the foreground mask.
 *          Otherwise, a grayscale version of pixs will be generated
 *          from the green component only, used, and destroyed.
 * 
*/ l_ok pixGetBackgroundRGBMap(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb) { l_int32 w, h, wm, hm, wim, him, wpls, wplim, wplf; l_int32 xim, yim, delx, nx, ny, i, j, k, m; l_int32 count, rsum, gsum, bsum, rval, gval, bval; l_int32 empty, fgpixels; l_uint32 pixel; l_uint32 *datas, *dataim, *dataf, *lines, *lineim, *linef; l_float32 scalex, scaley; PIX *piximi, *pixgc, *pixb, *pixf, *pixims; PIX *pixmr, *pixmg, *pixmb; if (!ppixmr || !ppixmg || !ppixmb) return ERROR_INT("&pixm* not all defined", __func__, 1); *ppixmr = *ppixmg = *ppixmb = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", __func__, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* Evaluate the mask pixim and make sure it is not all foreground */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) return ERROR_INT("pixim all fg; no background", __func__, 1); pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Generate the foreground mask. These pixels will be * ignored when computing the background values. */ if (pixg) /* use the input grayscale version if it is provided */ pixgc = pixClone(pixg); else pixgc = pixConvertRGBToGrayFast(pixs); pixb = pixThresholdToBinary(pixgc, thresh); pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); pixDestroy(&pixgc); pixDestroy(&pixb); /* Generate the output mask images */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); wm = (w + sx - 1) / sx; hm = (h + sy - 1) / sy; pixmr = pixCreate(wm, hm, 8); pixmg = pixCreate(wm, hm, 8); pixmb = pixCreate(wm, hm, 8); /* ------------- Set up the mapping images --------------- */ /* Note: we only compute map values in tiles that are complete. * In general, tiles at right and bottom edges will not be * complete, and we must fill them in later. */ nx = w / sx; ny = h / sy; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wplf = pixGetWpl(pixf); dataf = pixGetData(pixf); for (i = 0; i < ny; i++) { lines = datas + sy * i * wpls; linef = dataf + sy * i * wplf; for (j = 0; j < nx; j++) { delx = j * sx; rsum = gsum = bsum = 0; count = 0; for (k = 0; k < sy; k++) { for (m = 0; m < sx; m++) { if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { pixel = *(lines + k * wpls + delx + m); rsum += (pixel >> 24); gsum += ((pixel >> 16) & 0xff); bsum += ((pixel >> 8) & 0xff); count++; } } } if (count >= mincount) { rval = rsum / count; gval = gsum / count; bval = bsum / count; pixSetPixel(pixmr, j, i, rval); pixSetPixel(pixmg, j, i, gval); pixSetPixel(pixmb, j, i, bval); } } } pixDestroy(&pixf); /* If there is an optional mask with fg pixels, erase the previous * calculation for the corresponding map pixels, setting the * map values in each of the 3 color maps to 0. Then, when * all the map holes are filled, these erased pixels will * be set by the surrounding map values. */ if (pixim) { wim = pixGetWidth(pixim); him = pixGetHeight(pixim); dataim = pixGetData(pixim); wplim = pixGetWpl(pixim); for (i = 0; i < ny; i++) { yim = i * sy + sy / 2; if (yim >= him) break; lineim = dataim + yim * wplim; for (j = 0; j < nx; j++) { xim = j * sx + sx / 2; if (xim >= wim) break; if (GET_DATA_BIT(lineim, xim)) { pixSetPixel(pixmr, j, i, 0); pixSetPixel(pixmg, j, i, 0); pixSetPixel(pixmb, j, i, 0); } } } } /* ----------------- Now fill in the holes ----------------------- */ if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); L_WARNING("can't make the maps\n", __func__); return 1; } /* Finally, for each connected region corresponding to the * fg mask, reset all pixels to their average value. */ if (pixim && fgpixels) { scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixims = pixScaleBySampling(pixim, scalex, scaley); pixSmoothConnectedRegions(pixmr, pixims, 2); pixSmoothConnectedRegions(pixmg, pixims, 2); pixSmoothConnectedRegions(pixmb, pixims, 2); pixDestroy(&pixims); } *ppixmr = pixmr; *ppixmg = pixmg; *ppixmb = pixmb; pixCopyResolution(*ppixmr, pixs); pixCopyResolution(*ppixmg, pixs); pixCopyResolution(*ppixmb, pixs); return 0; } /*! * \brief pixGetBackgroundGrayMapMorph() * * \param[in] pixs 8 bpp grayscale; not cmapped * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it * should not have all foreground pixels * \param[in] reduction factor at which closing is performed * \param[in] size of square Sel for the closing; use an odd number * \param[out] ppixm grayscale map * \return 0 if OK, 1 on error */ l_ok pixGetBackgroundGrayMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm) { l_int32 nx, ny, empty, fgpixels; l_float32 scale; PIX *pixm, *pix1, *pix2, *pix3, *pixims; if (!ppixm) return ERROR_INT("&pixm not defined", __func__, 1); *ppixm = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); /* Evaluate the mask pixim and make sure it is not all foreground. */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { pixInvert(pixim, pixim); /* set background pixels to 1 */ pixZero(pixim, &empty); if (empty) return ERROR_INT("pixim all fg; no background", __func__, 1); pixInvert(pixim, pixim); /* revert to original mask */ pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Downscale as requested and do the closing to get the background. */ scale = 1. / (l_float32)reduction; pix1 = pixScaleBySampling(pixs, scale, scale); pix2 = pixCloseGray(pix1, size, size); pix3 = pixExtendByReplication(pix2, 1, 1); pixDestroy(&pix1); pixDestroy(&pix2); /* Downscale the image mask, if any, and remove it from the * background. These pixels will be filled in (twice). */ pixims = NULL; if (pixim) { pixims = pixScale(pixim, scale, scale); pixm = pixConvertTo8(pixims, FALSE); pixAnd(pixm, pixm, pix3); } else pixm = pixClone(pix3); pixDestroy(&pix3); /* Fill all the holes in the map. */ nx = pixGetWidth(pixs) / reduction; ny = pixGetHeight(pixs) / reduction; if (pixFillMapHoles(pixm, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixm); pixDestroy(&pixims); L_WARNING("can't make the map\n", __func__); return 1; } /* Finally, for each connected region corresponding to the * fg mask, reset all pixels to their average value. */ if (pixim && fgpixels) pixSmoothConnectedRegions(pixm, pixims, 2); pixDestroy(&pixims); *ppixm = pixm; pixCopyResolution(*ppixm, pixs); return 0; } /*! * \brief pixGetBackgroundRGBMapMorph() * * \param[in] pixs 32 bpp rgb * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it * should not have all foreground pixels * \param[in] reduction factor at which closing is performed * \param[in] size of square Sel for the closing; use an odd number * \param[out] ppixmr red component map * \param[out] ppixmg green component map * \param[out] ppixmb blue component map * \return 0 if OK, 1 on error */ l_ok pixGetBackgroundRGBMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb) { l_int32 nx, ny, empty, fgpixels; l_float32 scale; PIX *pixm, *pixmr, *pixmg, *pixmb, *pix1, *pix2, *pix3, *pixims; if (!ppixmr || !ppixmg || !ppixmb) return ERROR_INT("&pixm* not all defined", __func__, 1); *ppixmr = *ppixmg = *ppixmb = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); /* Evaluate the mask pixim and make sure it is not all foreground. */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { pixInvert(pixim, pixim); /* set background pixels to 1 */ pixZero(pixim, &empty); if (empty) return ERROR_INT("pixim all fg; no background", __func__, 1); pixInvert(pixim, pixim); /* revert to original mask */ pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Generate an 8 bpp version of the image mask, if it exists */ scale = 1. / (l_float32)reduction; pixims = NULL; pixm = NULL; if (pixim) { pixims = pixScale(pixim, scale, scale); pixm = pixConvertTo8(pixims, FALSE); } /* Downscale as requested and do the closing to get the background. * Then remove the image mask pixels from the background. They * will be filled in (twice) later. Do this for all 3 components. */ pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_RED); pix2 = pixCloseGray(pix1, size, size); pix3 = pixExtendByReplication(pix2, 1, 1); if (pixim) pixmr = pixAnd(NULL, pixm, pix3); else pixmr = pixClone(pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_GREEN); pix2 = pixCloseGray(pix1, size, size); pix3 = pixExtendByReplication(pix2, 1, 1); if (pixim) pixmg = pixAnd(NULL, pixm, pix3); else pixmg = pixClone(pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_BLUE); pix2 = pixCloseGray(pix1, size, size); pix3 = pixExtendByReplication(pix2, 1, 1); if (pixim) pixmb = pixAnd(NULL, pixm, pix3); else pixmb = pixClone(pix3); pixDestroy(&pixm); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Fill all the holes in the three maps. */ nx = pixGetWidth(pixs) / reduction; ny = pixGetHeight(pixs) / reduction; if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixims); L_WARNING("can't make the maps\n", __func__); return 1; } /* Finally, for each connected region corresponding to the * fg mask in each component, reset all pixels to their * average value. */ if (pixim && fgpixels) { pixSmoothConnectedRegions(pixmr, pixims, 2); pixSmoothConnectedRegions(pixmg, pixims, 2); pixSmoothConnectedRegions(pixmb, pixims, 2); pixDestroy(&pixims); } *ppixmr = pixmr; *ppixmg = pixmg; *ppixmb = pixmb; pixCopyResolution(*ppixmr, pixs); pixCopyResolution(*ppixmg, pixs); pixCopyResolution(*ppixmb, pixs); return 0; } /*! * \brief pixFillMapHoles() * * \param[in] pix 8 bpp; a map, with one pixel for each tile in * a larger image * \param[in] nx number of horizontal pixel tiles that are entirely * covered with pixels in the original source image * \param[in] ny ditto for the number of vertical pixel tiles * \param[in] filltype L_FILL_WHITE or L_FILL_BLACK * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation on pix (the map).  pix is
 *          typically a low-resolution version of some other image
 *          from which it was derived, where each pixel in pix
 *          corresponds to a rectangular tile (say, m x n) of pixels
 *          in the larger image.  All we need to know about the larger
 *          image is whether or not the rightmost column and bottommost
 *          row of pixels in pix correspond to tiles that are
 *          only partially covered by pixels in the larger image.
 *      (2) Typically, some number of pixels in the input map are
 *          not known, and their values must be determined by near
 *          pixels that are known.  These unknown pixels are the 'holes'.
 *          They can take on only two values, 0 and 255, and the
 *          instruction about which to fill is given by the filltype flag.
 *      (3) The "holes" can come from two sources.  The first is when there
 *          are not enough foreground or background pixels in a tile;
 *          the second is when a tile is at least partially covered
 *          by an image mask.  If we're filling holes in a fg mask,
 *          the holes are initialized to black (0) and use L_FILL_BLACK.
 *          For filling holes in a bg mask, initialize the holes to
 *          white (255) and use L_FILL_WHITE.
 *      (4) If w is the map width, nx = w or nx = w - 1; ditto for h and ny.
 * 
*/ l_ok pixFillMapHoles(PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype) { l_int32 w, h, y, nmiss, goodcol, i, j, found, ival, valtest; l_uint32 val, lastval; NUMA *na; /* indicates if there is any data in the column */ if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pix)) return ERROR_INT("pix is colormapped", __func__, 1); /* ------------- Fill holes in the mapping image columns ----------- */ pixGetDimensions(pix, &w, &h, NULL); na = numaCreate(0); /* holds flag for which columns have data */ nmiss = 0; valtest = (filltype == L_FILL_WHITE) ? 255 : 0; /* For columns that have at least one valid pixel, fill in the * holes in that column, and enter 1 in the array na. Otherwise, * enter 0 in the array. */ for (j = 0; j < nx; j++) { /* do it by columns */ found = FALSE; for (i = 0; i < ny; i++) { pixGetPixel(pix, j, i, &val); if (val != valtest) { y = i; found = TRUE; break; } } if (found == FALSE) { numaAddNumber(na, 0); /* no data in the column */ nmiss++; } else { numaAddNumber(na, 1); /* data in the column */ for (i = y - 1; i >= 0; i--) /* replicate upwards to top */ pixSetPixel(pix, j, i, val); pixGetPixel(pix, j, 0, &lastval); for (i = 1; i < h; i++) { /* set going down to bottom */ pixGetPixel(pix, j, i, &val); if (val == valtest) pixSetPixel(pix, j, i, lastval); else lastval = val; } } } if (nmiss == nx) { /* no data in any column! */ numaDestroy(&na); L_WARNING("no bg found; no data in any column\n", __func__); return 1; } /* ---------- Fill in missing columns by replication ----------- */ if (nmiss > 0) { /* replicate columns */ /* Find the first good column */ goodcol = 0; for (j = 0; j < nx; j++) { numaGetIValue(na, j, &ival); if (ival == 1) { goodcol = j; break; } } /* Copy the columns backward to column 0 */ if (goodcol > 0) { for (j = goodcol - 1; j >= 0; j--) pixRasterop(pix, j, 0, 1, h, PIX_SRC, pix, j + 1, 0); } /* Copy the columns forward to column nx - 1 */ for (j = goodcol + 1; j < nx; j++) { numaGetIValue(na, j, &ival); if (ival == 0) { /* empty; copy from column to the left of j */ pixRasterop(pix, j, 0, 1, h, PIX_SRC, pix, j - 1, 0); } } } if (w > nx) { /* replicate the last column */ pixRasterop(pix, w - 1, 0, 1, h, PIX_SRC, pix, w - 2, 0); } numaDestroy(&na); return 0; } /*! * \brief pixExtendByReplication() * * \param[in] pixs 8 bpp * \param[in] addw number of extra pixels horizontally to add * \param[in] addh number of extra pixels vertically to add * \return pixd extended with replicated pixel values, or NULL on error * *
 * Notes:
 *      (1) The pixel values are extended to the left and down, as required.
 * 
*/ PIX * pixExtendByReplication(PIX *pixs, l_int32 addw, l_int32 addh) { l_int32 w, h, i, j; l_uint32 val; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (addw == 0 && addh == 0) return pixCopy(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w + addw, h + addh, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); if (addw > 0) { for (i = 0; i < h; i++) { pixGetPixel(pixd, w - 1, i, &val); for (j = 0; j < addw; j++) pixSetPixel(pixd, w + j, i, val); } } if (addh > 0) { for (j = 0; j < w + addw; j++) { pixGetPixel(pixd, j, h - 1, &val); for (i = 0; i < addh; i++) pixSetPixel(pixd, j, h + i, val); } } pixCopyResolution(pixd, pixs); return pixd; } /*! * \brief pixSmoothConnectedRegions() * * \param[in] pixs 8 bpp grayscale; no colormap * \param[in] pixm [optional] 1 bpp; if null, this is a no-op * \param[in] factor subsampling factor for getting average; >= 1 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pixels in pixs corresponding to those in each
 *          8-connected region in the mask are set to the average value.
 *      (2) This is required for adaptive mapping to avoid the
 *          generation of stripes in the background map, due to
 *          variations in the pixel values near the edges of mask regions.
 *      (3) This function is optimized for background smoothing, where
 *          there are a relatively small number of components.  It will
 *          be inefficient if used where there are many small components.
 * 
*/ l_ok pixSmoothConnectedRegions(PIX *pixs, PIX *pixm, l_int32 factor) { l_int32 empty, i, n, x, y; l_float32 aveval; BOXA *boxa; PIX *pixmc; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs has colormap", __func__, 1); if (!pixm) { L_INFO("pixm not defined\n", __func__); return 0; } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); pixZero(pixm, &empty); if (empty) { L_INFO("pixm has no fg pixels; nothing to do\n", __func__); return 0; } boxa = pixConnComp(pixm, &pixa, 8); n = boxaGetCount(boxa); for (i = 0; i < n; i++) { if ((pixmc = pixaGetPix(pixa, i, L_CLONE)) == NULL) { L_WARNING("missing pixmc!\n", __func__); continue; } boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); pixGetAverageMasked(pixs, pixmc, x, y, factor, L_MEAN_ABSVAL, &aveval); pixPaintThroughMask(pixs, pixmc, x, y, (l_int32)aveval); pixDestroy(&pixmc); } boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } /*------------------------------------------------------------------* * Measurement of local foreground * *------------------------------------------------------------------*/ #if 0 /* Not working properly: do not use */ /*! * \brief pixGetForegroundGrayMap() * * \param[in] pixs 8 bpp * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] sx, sy src tile size, in pixels * \param[in] thresh threshold for determining foreground * \param[out] ppixd 8 bpp grayscale map * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Each (sx, sy) tile of pixs gets mapped to one pixel in pixd.
 *      (2) pixd is the estimate of the fg (darkest) value within each tile.
 *      (3) All pixels in pixd that are in 'image' regions, as specified
 *          by pixim, are given the background value 0.
 *      (4) For pixels in pixd that can't directly be given a fg value,
 *          the value is inferred by propagating from neighboring pixels.
 *      (5) In practice, pixd can be used to normalize the fg, and
 *          it can be done after background normalization.
 *      (6) The overall procedure is:
 *            ~ reduce 2x by sampling
 *            ~ paint all 'image' pixels white, so that they don't
 *            ~ participate in the Min reduction
 *            ~ do a further (sx, sy) Min reduction -- think of
 *              it as a large opening followed by subsampling by the
 *              reduction factors
 *            ~ threshold the result to identify fg, and set the
 *              bg pixels to 255 (these are 'holes')
 *            ~ fill holes by propagation from fg values
 *            ~ replicatively expand by 2x, arriving at the final
 *              resolution of pixd
 *            ~ smooth with a 17x17 kernel
 *            ~ paint the 'image' regions black
 * 
*/ l_ok pixGetForegroundGrayMap(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, PIX **ppixd) { l_int32 w, h, d, wd, hd; l_int32 empty, fgpixels; PIX *pixd, *piximi, *pixim2, *pixims, *pixs2, *pixb, *pixt1, *pixt2, *pixt3; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pixs not 8 bpp", __func__, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", __func__, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy must be >= 2", __func__, 1); /* Generate pixd, which is reduced by the factors (sx, sy). */ wd = (w + sx - 1) / sx; hd = (h + sy - 1) / sy; pixd = pixCreate(wd, hd, 8); *ppixd = pixd; /* Evaluate the 'image' mask, pixim. If it is all fg, * the output pixd has all pixels with value 0. */ fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-image pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) /* all 'image'; return with all pixels set to 0 */ return 0; pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* 2x subsampling; paint white through 'image' mask. */ pixs2 = pixScaleBySampling(pixs, 0.5, 0.5); if (pixim && fgpixels) { pixim2 = pixReduceBinary2(pixim, NULL); pixPaintThroughMask(pixs2, pixim2, 0, 0, 255); pixDestroy(&pixim2); } /* Min (erosion) downscaling; total reduction (4 sx, 4 sy). */ pixt1 = pixScaleGrayMinMax(pixs2, sx, sy, L_CHOOSE_MIN); /* pixDisplay(pixt1, 300, 200); */ /* Threshold to identify fg; paint bg pixels to white. */ pixb = pixThresholdToBinary(pixt1, thresh); /* fg pixels */ pixInvert(pixb, pixb); pixPaintThroughMask(pixt1, pixb, 0, 0, 255); pixDestroy(&pixb); /* Replicative expansion by 2x to (sx, sy). */ pixt2 = pixExpandReplicate(pixt1, 2); /* pixDisplay(pixt2, 500, 200); */ /* Fill holes in the fg by propagation */ pixFillMapHoles(pixt2, w / sx, h / sy, L_FILL_WHITE); /* pixDisplay(pixt2, 700, 200); */ /* Smooth with 17x17 kernel. */ pixt3 = pixBlockconv(pixt2, 8, 8); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixt3, 0, 0); /* Paint the image parts black. */ pixims = pixScaleBySampling(pixim, 1. / sx, 1. / sy); pixPaintThroughMask(pixd, pixims, 0, 0, 0); pixDestroy(&pixs2); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); return 0; } #endif /* Not working properly: do not use */ /*------------------------------------------------------------------* * Generate inverted background map * *------------------------------------------------------------------*/ /*! * \brief pixGetInvBackgroundMap() * * \param[in] pixs 8 bpp grayscale; no colormap * \param[in] bgval target bg val; typ. > 128 * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \return pixd 16 bpp, or NULL on error * *
 * Notes:
 *     (1) bgval should typically be > 120 and < 240
 *     (2) pixd is a normalization image; the original image is
 *       multiplied by pixd and the result is divided by 256.
 * 
*/ PIX * pixGetInvBackgroundMap(PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy) { l_int32 w, h, wplsm, wpld, i, j; l_int32 val, val16; l_uint32 *datasm, *datad, *linesm, *lined; PIX *pixsm, *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < 5 || h < 5) return (PIX *)ERROR_PTR("w and h must be >= 5", __func__, NULL); /* smooth the map image */ pixsm = pixBlockconv(pixs, smoothx, smoothy); datasm = pixGetData(pixsm); wplsm = pixGetWpl(pixsm); /* invert the map image, scaling up to preserve dynamic range */ pixd = pixCreate(w, h, 16); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linesm = datasm + i * wplsm; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linesm, j); if (val > 0) val16 = (256 * bgval) / val; else { /* shouldn't happen */ L_WARNING("smoothed bg has 0 pixel!\n", __func__); val16 = bgval / 2; } SET_DATA_TWO_BYTES(lined, j, val16); } } pixDestroy(&pixsm); pixCopyResolution(pixd, pixs); return pixd; } /*------------------------------------------------------------------* * Apply background map to image * *------------------------------------------------------------------*/ /*! * \brief pixApplyInvBackgroundGrayMap() * * \param[in] pixs 8 bpp grayscale; no colormap * \param[in] pixm 16 bpp, inverse background map * \param[in] sx tile width in pixels * \param[in] sy tile height in pixels * \return pixd 8 bpp, or NULL on error */ PIX * pixApplyInvBackgroundGrayMap(PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy) { l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; l_int32 vals, vald; l_uint32 val16; l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 16) return (PIX *)ERROR_PTR("pixm undefined or not 16 bpp", __func__, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("invalid sx and/or sy", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixm, &wm, &hm, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hm; i++) { lines = datas + sy * i * wpls; lined = datad + sy * i * wpld; yoff = sy * i; for (j = 0; j < wm; j++) { pixGetPixel(pixm, j, i, &val16); xoff = sx * j; for (k = 0; k < sy && yoff + k < h; k++) { flines = lines + k * wpls; flined = lined + k * wpld; for (m = 0; m < sx && xoff + m < w; m++) { vals = GET_DATA_BYTE(flines, xoff + m); vald = (vals * val16) / 256; vald = L_MIN(vald, 255); SET_DATA_BYTE(flined, xoff + m, vald); } } } } return pixd; } /*! * \brief pixApplyInvBackgroundRGBMap() * * \param[in] pixs 32 bpp rbg * \param[in] pixmr 16 bpp, red inverse background map * \param[in] pixmg 16 bpp, green inverse background map * \param[in] pixmb 16 bpp, blue inverse background map * \param[in] sx tile width in pixels * \param[in] sy tile height in pixels * \return pixd 32 bpp rbg, or NULL on error */ PIX * pixApplyInvBackgroundRGBMap(PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy) { l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; l_int32 rvald, gvald, bvald; l_uint32 vals; l_uint32 rval16, gval16, bval16; l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (!pixmr || !pixmg || !pixmb) return (PIX *)ERROR_PTR("pix maps not all defined", __func__, NULL); if (pixGetDepth(pixmr) != 16 || pixGetDepth(pixmg) != 16 || pixGetDepth(pixmb) != 16) return (PIX *)ERROR_PTR("pix maps not all 16 bpp", __func__, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("invalid sx and/or sy", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); w = pixGetWidth(pixs); h = pixGetHeight(pixs); wm = pixGetWidth(pixmr); hm = pixGetHeight(pixmr); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hm; i++) { lines = datas + sy * i * wpls; lined = datad + sy * i * wpld; yoff = sy * i; for (j = 0; j < wm; j++) { pixGetPixel(pixmr, j, i, &rval16); pixGetPixel(pixmg, j, i, &gval16); pixGetPixel(pixmb, j, i, &bval16); xoff = sx * j; for (k = 0; k < sy && yoff + k < h; k++) { flines = lines + k * wpls; flined = lined + k * wpld; for (m = 0; m < sx && xoff + m < w; m++) { vals = *(flines + xoff + m); rvald = ((vals >> 24) * rval16) / 256; rvald = L_MIN(rvald, 255); gvald = (((vals >> 16) & 0xff) * gval16) / 256; gvald = L_MIN(gvald, 255); bvald = (((vals >> 8) & 0xff) * bval16) / 256; bvald = L_MIN(bvald, 255); composeRGBPixel(rvald, gvald, bvald, flined + xoff + m); } } } } return pixd; } /*------------------------------------------------------------------* * Apply variable map * *------------------------------------------------------------------*/ /*! * \brief pixApplyVariableGrayMap() * * \param[in] pixs 8 bpp * \param[in] pixg 8 bpp, variable map * \param[in] target typ. 128 for threshold * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) Suppose you have an image that you want to transform based
 *          on some photometric measurement at each point, such as the
 *          threshold value for binarization.  Representing the photometric
 *          measurement as an image pixg, you can threshold in input image
 *          using pixVarThresholdToBinary().  Alternatively, you can map
 *          the input image pointwise so that the threshold over the
 *          entire image becomes a constant, such as 128.  For example,
 *          if a pixel in pixg is 150 and the target is 128, the
 *          corresponding pixel in pixs is mapped linearly to a value
 *          (128/150) of the input value.  If the resulting mapped image
 *          pixd were then thresholded at 128, you would obtain the
 *          same result as a direct binarization using pixg with
 *          pixVarThresholdToBinary().
 *      (2) The sizes of pixs and pixg must be equal.
 * 
*/ PIX * pixApplyVariableGrayMap(PIX *pixs, PIX *pixg, l_int32 target) { l_int32 i, j, w, h, d, wpls, wplg, wpld, vals, valg, vald; l_uint8 *lut; l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; l_float32 fval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", __func__, NULL); if (!pixSizesEqual(pixs, pixg)) return (PIX *)ERROR_PTR("pix sizes not equal", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("depth not 8 bpp", __func__, NULL); /* Generate a LUT for the mapping if the image is large enough * to warrant the overhead. The LUT is of size 2^16. For the * index to the table, get the MSB from pixs and the LSB from pixg. * Note: this LUT is bigger than the typical 32K L1 cache, so * we expect cache misses. L2 latencies are about 5ns. But * division is slooooow. For large images, this function is about * 4x faster when using the LUT. C'est la vie. */ lut = NULL; if (w * h > 100000) { /* more pixels than 2^16 */ lut = (l_uint8 *)LEPT_CALLOC(0x10000, sizeof(l_uint8)); for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) { fval = (l_float32)(i * target) / (j + 0.5); lut[(i << 8) + j] = L_MIN(255, (l_int32)(fval + 0.5)); } } } if ((pixd = pixCreate(w, h, 8)) == NULL) { LEPT_FREE(lut); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); for (i = 0; i < h; i++) { lines = datas + i * wpls; lineg = datag + i * wplg; lined = datad + i * wpld; if (lut) { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); vald = lut[(vals << 8) + valg]; SET_DATA_BYTE(lined, j, vald); } } else { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); fval = (l_float32)(vals * target) / (valg + 0.5); vald = L_MIN(255, (l_int32)(fval + 0.5)); SET_DATA_BYTE(lined, j, vald); } } } LEPT_FREE(lut); return pixd; } /*------------------------------------------------------------------* * Non-adaptive (global) mapping * *------------------------------------------------------------------*/ /*! * \brief pixGlobalNormRGB() * * \param[in] pixd [optional] null, existing or equal to pixs * \param[in] pixs 32 bpp rgb, or colormapped * \param[in] rval, gval, bval pixel values in pixs that are * linearly mapped to mapval * \param[in] mapval use 255 for mapping to white * \return pixd 32 bpp rgb or colormapped, or NULL on error * *
 * Notes:
 *    (1) The value of pixd determines if the results are written to a
 *        new pix (use NULL), in-place to pixs (use pixs), or to some
 *        other existing pix.
 *    (2) This does a global normalization of an image where the
 *        r,g,b color components are not balanced.  Thus, white in pixs is
 *        represented by a set of r,g,b values that are not all 255.
 *    (3) The input values (rval, gval, bval) should be chosen to
 *        represent the gray color (mapval, mapval, mapval) in src.
 *        Thus, this function will map (rval, gval, bval) to that gray color.
 *    (4) Typically, mapval = 255, so that (rval, gval, bval)
 *        corresponds to the white point of src.  In that case, these
 *        parameters should be chosen so that few pixels have higher values.
 *    (5) In all cases, we do a linear TRC separately on each of the
 *        components, saturating at 255.
 *    (6) If the input pix is 8 bpp without a colormap, you can get
 *        this functionality with mapval = 255 by calling:
 *            pixGammaTRC(pixd, pixs, 1.0, 0, bgval);
 *        where bgval is the value you want to be mapped to 255.
 *        Or more generally, if you want bgval to be mapped to mapval:
 *            pixGammaTRC(pixd, pixs, 1.0, 0, 255 * bgval / mapval);
 * 
*/ PIX * pixGlobalNormRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval) { l_int32 w, h, d, i, j, ncolors, rv, gv, bv, wpl; l_int32 *rarray, *garray, *barray; l_uint32 *data, *line; NUMA *nar, *nag, *nab; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); cmap = pixGetColormap(pixs); pixGetDimensions(pixs, &w, &h, &d); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (mapval <= 0) { L_WARNING("mapval must be > 0; setting to 255\n", __func__); mapval = 255; } /* Prepare pixd to be a copy of pixs */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); /* Generate the TRC maps for each component. Make sure the * upper range for each color is greater than zero. */ nar = numaGammaTRC(1.0, 0, L_MAX(1, 255 * rval / mapval)); nag = numaGammaTRC(1.0, 0, L_MAX(1, 255 * gval / mapval)); nab = numaGammaTRC(1.0, 0, L_MAX(1, 255 * bval / mapval)); /* Extract copies of the internal arrays */ rarray = numaGetIArray(nar); garray = numaGetIArray(nag); barray = numaGetIArray(nab); if (!nar || !nag || !nab || !rarray || !garray || !barray) { L_ERROR("allocation failure in arrays\n", __func__); goto cleanup_arrays; } if (cmap) { ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rv, &gv, &bv); pixcmapResetColor(cmap, i, rarray[rv], garray[gv], barray[bv]); } } else { data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rv, &gv, &bv); composeRGBPixel(rarray[rv], garray[gv], barray[bv], line + j); } } } cleanup_arrays: numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); LEPT_FREE(rarray); LEPT_FREE(garray); LEPT_FREE(barray); return pixd; } /*! * \brief pixGlobalNormNoSatRGB() * * \param[in] pixd [optional] null, existing or equal to pixs * \param[in] pixs 32 bpp rgb * \param[in] rval, gval, bval pixel values in pixs that are * linearly mapped to mapval; but see below * \param[in] factor subsampling factor; integer >= 1 * \param[in] rank between 0.0 and 1.0; typ. use a value near 1.0 * \return pixd 32 bpp rgb, or NULL on error * *
 * Notes:
 *    (1) This is a version of pixGlobalNormRGB(), where the output
 *        intensity is scaled back so that a controlled fraction of
 *        pixel components is allowed to saturate.  See comments in
 *        pixGlobalNormRGB().
 *    (2) The value of pixd determines if the results are written to a
 *        new pix (use NULL), in-place to pixs (use pixs), or to some
 *        other existing pix.
 *    (3) This does a global normalization of an image where the
 *        r,g,b color components are not balanced.  Thus, white in pixs is
 *        represented by a set of r,g,b values that are not all 255.
 *    (4) The input values (rval, gval, bval) can be chosen to be the
 *        color that, after normalization, becomes white background.
 *        For images that are mostly background, the closer these values
 *        are to the median component values, the closer the resulting
 *        background will be to gray, becoming white at the brightest places.
 *    (5) The mapval used in pixGlobalNormRGB() is computed here to
 *        avoid saturation of any component in the image (save for a
 *        fraction of the pixels given by the input rank value).
 * 
*/ PIX * pixGlobalNormNoSatRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank) { l_int32 mapval; l_float32 rankrval, rankgval, rankbval; l_float32 rfract, gfract, bfract, maxfract; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("sampling factor < 1", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank not in [0.0 ... 1.0]", __func__, NULL); if (rval <= 0 || gval <= 0 || bval <= 0) return (PIX *)ERROR_PTR("invalid estim. color values", __func__, NULL); /* The max value for each component may be larger than the * input estimated background value. In that case, mapping * for those pixels would saturate. To prevent saturation, * we compute the fraction for each component by which we * would oversaturate. Then take the max of these, and * reduce, uniformly over all components, the output intensity * by this value. Then no component will saturate. * In practice, if rank < 1.0, a fraction of pixels * may have a component saturate. By keeping rank close to 1.0, * that fraction can be made arbitrarily small. */ pixGetRankValueMaskedRGB(pixs, NULL, 0, 0, factor, rank, &rankrval, &rankgval, &rankbval); rfract = rankrval / (l_float32)rval; gfract = rankgval / (l_float32)gval; bfract = rankbval / (l_float32)bval; maxfract = L_MAX(rfract, gfract); maxfract = L_MAX(maxfract, bfract); #if DEBUG_GLOBAL lept_stderr("rankrval = %7.2f, rankgval = %7.2f, rankbval = %7.2f\n", rankrval, rankgval, rankbval); lept_stderr("rfract = %7.4f, gfract = %7.4f, bfract = %7.4f\n", rfract, gfract, bfract); #endif /* DEBUG_GLOBAL */ mapval = (l_int32)(255. / maxfract); pixd = pixGlobalNormRGB(pixd, pixs, rval, gval, bval, mapval); return pixd; } /*------------------------------------------------------------------* * Adaptive threshold spread normalization * *------------------------------------------------------------------*/ /*! * \brief pixThresholdSpreadNorm() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] filtertype L_SOBEL_EDGE or L_TWO_SIDED_EDGE; * \param[in] edgethresh threshold on magnitude of edge filter; * typ 10-20 * \param[in] smoothx, smoothy half-width of convolution kernel applied to * spread threshold: use 0 for no smoothing * \param[in] gamma gamma correction; typ. about 0.7 * \param[in] minval input value that gives 0 for output; typ. -25 * \param[in] maxval input value that gives 255 for output; * typ. 255 * \param[in] targetthresh target threshold for normalization * \param[out] ppixth [optional] computed local threshold value * \param[out] ppixb [optional] thresholded normalized image * \param[out] ppixd [optional] normalized image * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The basis of this approach is the use of seed spreading
 *          on a (possibly) sparse set of estimates for the local threshold.
 *          The resulting dense estimates are smoothed by convolution
 *          and used to either threshold the input image or normalize it
 *          with a local transformation that linearly maps the pixels so
 *          that the local threshold estimate becomes constant over the
 *          resulting image.  This approach is one of several that
 *          have been suggested (and implemented) by Ray Smith.
 *      (2) You can use either the Sobel or TwoSided edge filters.
 *          The results appear to be similar, using typical values
 *          of edgethresh in the rang 10-20.
 *      (3) To skip the trc enhancement, use gamma = 1.0, minval = 0
 *          and maxval = 255.
 *      (4) For the normalized image pixd, each pixel is linearly mapped
 *          in such a way that the local threshold is equal to targetthresh.
 *      (5) The full width and height of the convolution kernel
 *          are (2 * smoothx + 1) and (2 * smoothy + 1).
 *      (6) This function can be used with the pixtiling utility if the
 *          images are too large.  See pixOtsuAdaptiveThreshold() for
 *          an example of this.
 * 
*/ l_ok pixThresholdSpreadNorm(PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd) { PIX *pixe, *pixet, *pixsd, *pixg1, *pixg2, *pixth; if (ppixth) *ppixth = NULL; if (ppixb) *ppixb = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (!ppixth && !ppixb && !ppixd) return ERROR_INT("no output requested", __func__, 1); if (filtertype != L_SOBEL_EDGE && filtertype != L_TWO_SIDED_EDGE) return ERROR_INT("invalid filter type", __func__, 1); /* Get the thresholded edge pixels. These are the ones * that have values in pixs near the local optimal fg/bg threshold. */ if (filtertype == L_SOBEL_EDGE) pixe = pixSobelEdgeFilter(pixs, L_VERTICAL_EDGES); else /* L_TWO_SIDED_EDGE */ pixe = pixTwoSidedEdgeFilter(pixs, L_VERTICAL_EDGES); pixet = pixThresholdToBinary(pixe, edgethresh); pixInvert(pixet, pixet); /* Build a seed image whose only nonzero values are those * values of pixs corresponding to pixels in the fg of pixet. */ pixsd = pixCreateTemplate(pixs); pixCombineMasked(pixsd, pixs, pixet); /* Spread the seed and optionally smooth to reduce noise */ pixg1 = pixSeedspread(pixsd, 4); pixg2 = pixBlockconv(pixg1, smoothx, smoothy); /* Optionally do a gamma enhancement */ pixth = pixGammaTRC(NULL, pixg2, gamma, minval, maxval); /* Do the mapping and thresholding */ if (ppixd) { *ppixd = pixApplyVariableGrayMap(pixs, pixth, targetthresh); if (ppixb) *ppixb = pixThresholdToBinary(*ppixd, targetthresh); } else if (ppixb) *ppixb = pixVarThresholdToBinary(pixs, pixth); if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); pixDestroy(&pixe); pixDestroy(&pixet); pixDestroy(&pixsd); pixDestroy(&pixg1); pixDestroy(&pixg2); return 0; } /*------------------------------------------------------------------* * Adaptive background normalization (flexible adaptaption) * *------------------------------------------------------------------*/ /*! * \brief pixBackgroundNormFlex() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] sx, sy desired tile dimensions; size may vary; * use values between 3 and 10 * \param[in] smoothx, smoothy half-width of convolution kernel applied to * threshold array: use values between 1 and 3 * \param[in] delta difference parameter in basin filling; * use 0 to skip * \return pixd 8 bpp, background-normalized), or NULL on error * *
 * Notes:
 *      (1) This does adaptation flexibly to a quickly varying background.
 *          For that reason, all input parameters should be small.
 *      (2) sx and sy give the tile size; they should be in [5 - 7].
 *      (3) The full width and height of the convolution kernel
 *          are (2 * smoothx + 1) and (2 * smoothy + 1).  They
 *          should be in [1 - 2].
 *      (4) Basin filling is used to fill the large fg regions.  The
 *          parameter %delta measures the height that the black
 *          background is raised from the local minima.  By raising
 *          the background, it is possible to threshold the large
 *          fg regions to foreground.  If %delta is too large,
 *          bg regions will be lifted, causing thickening of
 *          the fg regions.  Use 0 to skip.
 * 
*/ PIX * pixBackgroundNormFlex(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta) { l_float32 scalex, scaley; PIX *pixt, *pixsd, *pixmin, *pixbg, *pixbgi, *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, NULL); if (sx < 3 || sy < 3) return (PIX *)ERROR_PTR("sx and/or sy less than 3", __func__, NULL); if (sx > 10 || sy > 10) return (PIX *)ERROR_PTR("sx and/or sy exceed 10", __func__, NULL); if (smoothx < 1 || smoothy < 1) return (PIX *)ERROR_PTR("smooth params less than 1", __func__, NULL); if (smoothx > 3 || smoothy > 3) return (PIX *)ERROR_PTR("smooth params exceed 3", __func__, NULL); /* Generate the bg estimate using smoothed average with subsampling */ scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixt = pixScaleSmooth(pixs, scalex, scaley); /* Do basin filling on the bg estimate if requested */ if (delta <= 0) pixsd = pixClone(pixt); else { pixLocalExtrema(pixt, 0, 0, &pixmin, NULL); pixsd = pixSeedfillGrayBasin(pixmin, pixt, delta, 4); pixDestroy(&pixmin); } pixbg = pixExtendByReplication(pixsd, 1, 1); /* Map the bg to 200 */ pixbgi = pixGetInvBackgroundMap(pixbg, 200, smoothx, smoothy); pixd = pixApplyInvBackgroundGrayMap(pixs, pixbgi, sx, sy); pixDestroy(&pixt); pixDestroy(&pixsd); pixDestroy(&pixbg); pixDestroy(&pixbgi); return pixd; } /*------------------------------------------------------------------* * Adaptive contrast normalization * *------------------------------------------------------------------*/ /*! * \brief pixContrastNorm() * * \param[in] pixd [optional] 8 bpp; null or equal to pixs * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] sx, sy tile dimensions * \param[in] mindiff minimum difference to accept as valid * \param[in] smoothx, smoothy half-width of convolution kernel applied to * min and max arrays: use 0 for no smoothing * \return pixd always * *
 * Notes:
 *      (1) This function adaptively attempts to expand the contrast
 *          to the full dynamic range in each tile.  If the contrast in
 *          a tile is smaller than %mindiff, it uses the min and max
 *          pixel values from neighboring tiles.  It also can use
 *          convolution to smooth the min and max values from
 *          neighboring tiles.  After all that processing, it is
 *          possible that the actual pixel values in the tile are outside
 *          the computed [min ... max] range for local contrast
 *          normalization.  Such pixels are taken to be at either 0
 *          (if below the min) or 255 (if above the max).
 *      (2) pixd can be equal to pixs (in-place operation) or
 *          null (makes a new pixd).
 *      (3) sx and sy give the tile size; they are typically at least 20.
 *      (4) mindiff is used to eliminate results for tiles where it is
 *          likely that either fg or bg is missing.  A value around 50
 *          or more is reasonable.
 *      (5) The full width and height of the convolution kernel
 *          are (2 * smoothx + 1) and (2 * smoothy + 1).  Some smoothing
 *          is typically useful, and we limit the smoothing half-widths
 *          to the range from 0 to 8.
 *      (6) A linear TRC (gamma = 1.0) is applied to increase the contrast
 *          in each tile.  The result can subsequently be globally corrected,
 *          by applying pixGammaTRC() with arbitrary values of gamma
 *          and the 0 and 255 points of the mapping.
 * 
*/ PIX * pixContrastNorm(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy) { PIX *pixmin, *pixmax; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd not null or == pixs", __func__, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, pixd); if (sx < 5 || sy < 5) return (PIX *)ERROR_PTR("sx and/or sy less than 5", __func__, pixd); if (smoothx < 0 || smoothy < 0) return (PIX *)ERROR_PTR("smooth params less than 0", __func__, pixd); if (smoothx > 8 || smoothy > 8) return (PIX *)ERROR_PTR("smooth params exceed 8", __func__, pixd); /* Get the min and max pixel values in each tile, and represent * each value as a pixel in pixmin and pixmax, respectively. */ pixMinMaxTiles(pixs, sx, sy, mindiff, smoothx, smoothy, &pixmin, &pixmax); /* For each tile, do a linear expansion of the dynamic range * of pixels so that the min value is mapped to 0 and the * max value is mapped to 255. */ pixd = pixLinearTRCTiled(pixd, pixs, sx, sy, pixmin, pixmax); pixDestroy(&pixmin); pixDestroy(&pixmax); return pixd; } /*! * \brief pixMinMaxTiles() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] sx, sy tile dimensions * \param[in] mindiff minimum difference to accept as valid * \param[in] smoothx, smoothy half-width of convolution kernel applied to * min and max arrays: use 0 for no smoothing * \param[out] ppixmin tiled minima * \param[out] ppixmax tiled maxima * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes filtered and smoothed values for the min and
 *          max pixel values in each tile of the image.
 *      (2) See pixContrastNorm() for usage.
 * 
*/ static l_ok pixMinMaxTiles(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax) { l_int32 w, h; PIX *pixmin1, *pixmax1, *pixmin2, *pixmax2; if (ppixmin) *ppixmin = NULL; if (ppixmax) *ppixmax = NULL; if (!ppixmin || !ppixmax) return ERROR_INT("&pixmin or &pixmax undefined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (sx < 5 || sy < 5) return ERROR_INT("sx and/or sy less than 3", __func__, 1); if (smoothx < 0 || smoothy < 0) return ERROR_INT("smooth params less than 0", __func__, 1); if (smoothx > 5 || smoothy > 5) return ERROR_INT("smooth params exceed 5", __func__, 1); /* Get the min and max values in each tile */ pixmin1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MIN); pixmax1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MAX); pixmin2 = pixExtendByReplication(pixmin1, 1, 1); pixmax2 = pixExtendByReplication(pixmax1, 1, 1); pixDestroy(&pixmin1); pixDestroy(&pixmax1); /* Make sure no value is 0 */ pixAddConstantGray(pixmin2, 1); pixAddConstantGray(pixmax2, 1); /* Generate holes where the contrast is too small */ pixSetLowContrast(pixmin2, pixmax2, mindiff); /* Fill the holes (0 values) */ pixGetDimensions(pixmin2, &w, &h, NULL); pixFillMapHoles(pixmin2, w, h, L_FILL_BLACK); pixFillMapHoles(pixmax2, w, h, L_FILL_BLACK); /* Smooth if requested */ if (smoothx > 0 || smoothy > 0) { smoothx = L_MIN(smoothx, (w - 1) / 2); smoothy = L_MIN(smoothy, (h - 1) / 2); *ppixmin = pixBlockconv(pixmin2, smoothx, smoothy); *ppixmax = pixBlockconv(pixmax2, smoothx, smoothy); } else { *ppixmin = pixClone(pixmin2); *ppixmax = pixClone(pixmax2); } pixCopyResolution(*ppixmin, pixs); pixCopyResolution(*ppixmax, pixs); pixDestroy(&pixmin2); pixDestroy(&pixmax2); return 0; } /*! * \brief pixSetLowContrast() * * \param[in] pixs1 8 bpp * \param[in] pixs2 8 bpp * \param[in] mindiff minimum difference to accept as valid * \return 0 if OK; 1 if no pixel diffs are large enough, or on error * *
 * Notes:
 *      (1) This compares corresponding pixels in pixs1 and pixs2.
 *          When they differ by less than %mindiff, set the pixel
 *          values to 0 in each.  Each pixel typically represents a tile
 *          in a larger image, and a very small difference between
 *          the min and max in the tile indicates that the min and max
 *          values are not to be trusted.
 *      (2) If contrast (pixel difference) detection is expected to fail,
 *          caller should check return value.
 * 
*/ static l_ok pixSetLowContrast(PIX *pixs1, PIX *pixs2, l_int32 mindiff) { l_int32 i, j, w, h, d, wpl, val1, val2, found; l_uint32 *data1, *data2, *line1, *line2; if (!pixs1 || !pixs2) return ERROR_INT("pixs1 and pixs2 not both defined", __func__, 1); if (pixSizesEqual(pixs1, pixs2) == 0) return ERROR_INT("pixs1 and pixs2 not equal size", __func__, 1); pixGetDimensions(pixs1, &w, &h, &d); if (d != 8) return ERROR_INT("depth not 8 bpp", __func__, 1); if (mindiff > 254) return 0; data1 = pixGetData(pixs1); data2 = pixGetData(pixs2); wpl = pixGetWpl(pixs1); found = 0; /* init to not finding any diffs >= mindiff */ for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); if (L_ABS(val1 - val2) >= mindiff) { found = 1; break; } } if (found) break; } if (!found) { L_WARNING("no pixel pair diffs as large as mindiff\n", __func__); pixClearAll(pixs1); pixClearAll(pixs2); return 1; } for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); if (L_ABS(val1 - val2) < mindiff) { SET_DATA_BYTE(line1, j, 0); SET_DATA_BYTE(line2, j, 0); } } } return 0; } /*! * \brief pixLinearTRCTiled() * * \param[in] pixd [optional] 8 bpp * \param[in] pixs 8 bpp, not colormapped * \param[in] sx, sy tile dimensions * \param[in] pixmin pix of min values in tiles * \param[in] pixmax pix of max values in tiles * \return pixd always * *
 * Notes:
 *      (1) pixd can be equal to pixs (in-place operation) or
 *          null (makes a new pixd).
 *      (2) sx and sy give the tile size; they are typically at least 20.
 *      (3) pixmin and pixmax are generated by pixMinMaxTiles()
 *      (4) For each tile, this does a linear expansion of the dynamic
 *          range so that the min value in the tile becomes 0 and the
 *          max value in the tile becomes 255.
 *      (5) The LUTs that do the mapping are generated as needed
 *          and stored for reuse in an integer array within the ptr array iaa[].
 * 
*/ static PIX * pixLinearTRCTiled(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax) { l_int32 i, j, k, m, w, h, wt, ht, wpl, wplt, xoff, yoff; l_int32 minval, maxval, val, sval; l_int32 *ia; l_int32 **iaa; l_uint32 *data, *datamin, *datamax, *line, *tline, *linemin, *linemax; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd not null or == pixs", __func__, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, pixd); if (!pixmin || !pixmax) return (PIX *)ERROR_PTR("pixmin & pixmax not defined", __func__, pixd); if (sx < 5 || sy < 5) return (PIX *)ERROR_PTR("sx and/or sy less than 5", __func__, pixd); iaa = (l_int32 **)LEPT_CALLOC(256, sizeof(l_int32 *)); if ((pixd = pixCopy(pixd, pixs)) == NULL) { LEPT_FREE(iaa); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); datamin = pixGetData(pixmin); datamax = pixGetData(pixmax); wplt = pixGetWpl(pixmin); pixGetDimensions(pixmin, &wt, &ht, NULL); for (i = 0; i < ht; i++) { line = data + sy * i * wpl; linemin = datamin + i * wplt; linemax = datamax + i * wplt; yoff = sy * i; for (j = 0; j < wt; j++) { xoff = sx * j; minval = GET_DATA_BYTE(linemin, j); maxval = GET_DATA_BYTE(linemax, j); if (maxval == minval) { L_ERROR("shouldn't happen! i,j = %d,%d, minval = %d\n", __func__, i, j, minval); continue; } if ((ia = iaaGetLinearTRC(iaa, maxval - minval)) == NULL) { L_ERROR("failure to make ia for j = %d!\n", __func__, j); continue; } for (k = 0; k < sy && yoff + k < h; k++) { tline = line + k * wpl; for (m = 0; m < sx && xoff + m < w; m++) { val = GET_DATA_BYTE(tline, xoff + m); sval = val - minval; sval = L_MAX(0, sval); SET_DATA_BYTE(tline, xoff + m, ia[sval]); } } } } for (i = 0; i < 256; i++) LEPT_FREE(iaa[i]); LEPT_FREE(iaa); return pixd; } /*! * \brief iaaGetLinearTRC() * * \param[in] iaa bare array of ptrs to l_int32 * \param[in] diff between min and max pixel values that are * to be mapped to 0 and 255 * \return ia LUT with input (val - minval) and output a * value between 0 and 255) */ static l_int32 * iaaGetLinearTRC(l_int32 **iaa, l_int32 diff) { l_int32 i; l_int32 *ia; l_float32 factor; if (!iaa) return (l_int32 *)ERROR_PTR("iaa not defined", __func__, NULL); if (iaa[diff] != NULL) /* already have it */ return iaa[diff]; ia = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); iaa[diff] = ia; if (diff == 0) { /* shouldn't happen */ for (i = 0; i < 256; i++) ia[i] = 128; } else { factor = 255. / (l_float32)diff; for (i = 0; i < diff + 1; i++) ia[i] = (l_int32)(factor * i + 0.5); for (i = diff + 1; i < 256; i++) ia[i] = 255; } return ia; } /*------------------------------------------------------------------* * Adaptive normalization with MinMax conversion of RGB to gray, * * contrast enhancement and optional 2x upscale binarization * *------------------------------------------------------------------*/ /*! * \brief pixBackgroundNormTo1MinMax() * * \param[in] pixs any depth, with or without colormap * \param[in] contrast 1 to 10: 1 reduces contrast; 10 is maximum * enhancement * \param[in] scalefactor 1 (no change); 2 (2x upscale) * \return 1 bpp pix if OK; NULL on error * *
 * Notes:
 *    (1) This is a convenience binarization function that does four things:
 *        * Generates a grayscale image with color enhancement to gray
 *        * Background normalization
 *        * Optional contrast enhancement
 *        * Binarizes either at input resolution or with 2x upscaling
 *    (2) If the %pixs is 1 bpp, returns a copy.
 *    (3) The contrast increasing parameter %contrast takes values {1, ... 10}.
 *        For decent scans, contrast = 1 is recommended.  Use a larger
 *        value if important details are lost in binarization.
 *    (4) Valid values of %scalefactor are 1 and 2.
 * 
*/ PIX * pixBackgroundNormTo1MinMax(PIX *pixs, l_int32 contrast, l_int32 scalefactor) { PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (contrast < 1 || contrast > 10) return (PIX *)ERROR_PTR("contrast not in [1 ... 10]", __func__, NULL); if (scalefactor != 1 && scalefactor != 2) return (PIX *)ERROR_PTR("scalefactor not 1 or 2", __func__, NULL); if (pixGetDepth(pixs) == 1) { pixd = pixCopy(NULL, pixs); } else { pix1 = pixConvertTo8MinMax(pixs); pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); pixSelectiveContrastMod(pix2, contrast); if (scalefactor == 1) pixd = pixThresholdToBinary(pix2, 180); else /* scalefactor == 2 */ pixd = pixScaleGray2xLIThresh(pix2, 180); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixConvertTo8MinMax() * * \param[in] pixs any depth, with or without colormap * \return 8 bpp pix if OK; NULL on error * *
 * Notes:
 *    (1) This is a special version of pixConvert1To8() that removes any
 *        existing colormap and uses pixConvertRGBToGrayMinMax()
 *        to strongly render color into black.
 * 
*/ PIX * pixConvertTo8MinMax(PIX *pixs) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d == 1) { return pixConvert1To8(NULL, pixs, 255, 0); } else if (d == 2) { return pixConvert2To8(pixs, 0, 85, 170, 255, FALSE); } else if (d == 4) { return pixConvert4To8(pixs, FALSE); } else if (d == 8) { if (pixGetColormap(pixs) != NULL) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else return pixCopy(NULL, pixs); } else if (d == 16) { return pixConvert16To8(pixs, L_MS_BYTE); } else if (d == 32) { return pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MIN); } L_ERROR("Invalid depth d = %d\n", __func__, d); return NULL; } /*! * \brief pixSelectiveContrastMod() * * \param[in] pixs 8 bpp without colormap * \param[in] contrast 1 (default value) for some contrast reduction; * 10 for maximum contrast enhancement. * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) This does in-place contrast enhancement on 8 bpp grayscale that
 *        has been background normalized to 200.  Therefore, there should
 *        be no gray pixels above 200 in %pixs.  For general contrast
 *        enhancement on gray or color images, see pixContrastTRC().
 *    (2) Caller restricts %contrast to [1 ... 10].
 *    (3) Use %contrast = 1 for minimum contrast enhancement (which will
 *        remove some speckle noise) and %contrast = 10 for maximum
 *        darkening.
 *    (4) We use 200 for the white point in all transforms.  Using a
 *        white point above 200 will darken all grayscale pixels.
 * 
*/ static l_ok pixSelectiveContrastMod(PIX *pixs, l_int32 contrast) { if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (contrast == 1) pixGammaTRC(pixs, pixs, 2.0, 50, 200); else if (contrast == 2) pixGammaTRC(pixs, pixs, 1.8, 60, 200); else if (contrast == 3) pixGammaTRC(pixs, pixs, 1.6, 70, 200); else if (contrast == 4) pixGammaTRC(pixs, pixs, 1.4, 80, 200); else if (contrast == 5) pixGammaTRC(pixs, pixs, 1.2, 90, 200); else if (contrast == 6) pixGammaTRC(pixs, pixs, 1.0, 100, 200); else if (contrast == 7) pixGammaTRC(pixs, pixs, 0.85, 110, 200); else if (contrast == 8) pixGammaTRC(pixs, pixs, 0.7, 120, 200); else if (contrast == 9) pixGammaTRC(pixs, pixs, 0.6, 130, 200); else /* contrast == 10 */ pixGammaTRC(pixs, pixs, 0.5, 140, 200); return 0; } leptonica-1.86.0/src/affine.c000066400000000000000000001606321506303110300157470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file affine.c *
 *
 *      Affine (3 pt) image transformation using a sampled
 *      (to nearest integer) transform on each dest point
 *           PIX        *pixAffineSampledPta()
 *           PIX        *pixAffineSampled()
 *
 *      Affine (3 pt) image transformation using interpolation
 *      (or area mapping) for anti-aliasing images that are
 *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
 *           PIX        *pixAffinePta()
 *           PIX        *pixAffine()
 *           PIX        *pixAffinePtaColor()
 *           PIX        *pixAffineColor()
 *           PIX        *pixAffinePtaGray()
 *           PIX        *pixAffineGray()
 *
 *      Affine transform including alpha (blend) component
 *           PIX        *pixAffinePtaWithAlpha()
 *
 *      Affine coordinate transformation
 *           l_int32     getAffineXformCoeffs()
 *           l_int32     affineInvertXform()
 *           l_int32     affineXformSampledPt()
 *           l_int32     affineXformPt()
 *
 *      Interpolation helper functions
 *           l_int32     linearInterpolatePixelGray()
 *           l_int32     linearInterpolatePixelColor()
 *
 *      Gauss-jordan linear equation solver
 *           l_int32     gaussjordan()
 *
 *      Affine image transformation using a sequence of
 *      shear/scale/translation operations
 *           PIX        *pixAffineSequential()
 *
 *      One can define a coordinate space by the location of the origin,
 *      the orientation of x and y axes, and the unit scaling along
 *      each axis.  An affine transform is a general linear
 *      transformation from one coordinate space to another.
 *
 *      For the general case, we can define the affine transform using
 *      two sets of three (noncollinear) points in a plane.  One set
 *      corresponds to the input (src) coordinate space; the other to the
 *      transformed (dest) coordinate space.  Each point in the
 *      src corresponds to one of the points in the dest.  With two
 *      sets of three points, we get a set of 6 equations in 6 unknowns
 *      that specifies the mapping between the coordinate spaces.
 *      The interface here allows you to specify either the corresponding
 *      sets of 3 points, or the transform itself (as a vector of 6
 *      coefficients).
 *
 *      Given the transform as a vector of 6 coefficients, we can compute
 *      both a a pointwise affine coordinate transformation and an
 *      affine image transformation.
 *
 *      To compute the coordinate transform, we need the coordinate
 *      value (x',y') in the transformed space for any point (x,y)
 *      in the original space.  To derive this transform from the
 *      three corresponding points, it is convenient to express the affine
 *      coordinate transformation using an LU decomposition of
 *      a set of six linear equations that express the six coordinates
 *      of the three points in the transformed space as a function of
 *      the six coordinates in the original space.  Once we have
 *      this transform matrix , we can transform an image by
 *      finding, for each destination pixel, the pixel (or pixels)
 *      in the source that give rise to it.
 *
 *      This 'pointwise' transformation can be done either by sampling
 *      and picking a single pixel in the src to replicate into the dest,
 *      or by interpolating (or averaging) over four src pixels to
 *      determine the value of the dest pixel.  The first method is
 *      implemented by pixAffineSampled() and the second method by
 *      pixAffine().  The interpolated method can only be used for
 *      images with more than 1 bpp, but for these, the image quality
 *      is significantly better than the sampled method, due to
 *      the 'antialiasing' effect of weighting the src pixels.
 *
 *      Interpolation works well when there is relatively little scaling,
 *      or if there is image expansion in general.  However, if there
 *      is significant image reduction, one should apply a low-pass
 *      filter before subsampling to avoid aliasing the high frequencies.
 *
 *      A typical application might be to align two images, which
 *      may be scaled, rotated and translated versions of each other.
 *      Through some pre-processing, three corresponding points are
 *      located in each of the two images.  One of the images is
 *      then to be (affine) transformed to align with the other.
 *      As mentioned, the standard way to do this is to use three
 *      sets of points, compute the 6 transformation coefficients
 *      from these points that describe the linear transformation,
 *
 *          x' = ax + by + c
 *          y' = dx + ey + f
 *
 *      and use this in a pointwise manner to transform the image.
 *
 *      N.B.  Be sure to see the comment in getAffineXformCoeffs(),
 *      regarding using the inverse of the affine transform for points
 *      to transform images.
 *
 *      There is another way to do this transformation; namely,
 *      by doing a sequence of simple affine transforms, without
 *      computing directly the affine coordinate transformation.
 *      We have at our disposal (1) translations (using rasterop),
 *      (2) horizontal and vertical shear about any horizontal and vertical
 *      line, respectively, and (3) non-isotropic scaling by two
 *      arbitrary x and y scaling factors.  We also have rotation
 *      about an arbitrary point, but this is equivalent to a set
 *      of three shears so we do not need to use it.
 *
 *      Why might we do this?  For binary images, it is usually
 *      more efficient to do such transformations by a sequence
 *      of word parallel operations.  Shear and translation can be
 *      done in-place and word parallel; arbitrary scaling is
 *      mostly pixel-wise.
 *
 *      Suppose that we are transforming image 1 to correspond to image 2.
 *      We have a set of three points, describing the coordinate space
 *      embedded in image 1, and we need to transform image 1 until
 *      those three points exactly correspond to the new coordinate space
 *      defined by the second set of three points.  In our image
 *      matching application, the latter set of three points was
 *      found to be the corresponding points in image 2.
 *
 *      The most elegant way I can think of to do such a sequential
 *      implementation is to imagine that we're going to transform
 *      BOTH images until they're aligned.  (We don't really want
 *      to transform both, because in fact we may only have one image
 *      that is undergoing a general affine transformation.)
 *
 *      Choose the 3 corresponding points as follows:
 *         ~ The 1st point is an origin
 *         ~ The 2nd point gives the orientation and scaling of the
 *           "x" axis with respect to the origin
 *         ~ The 3rd point does likewise for the "y" axis.
 *      These "axes" must not be collinear; otherwise they are
 *      arbitrary (although some strange things will happen if
 *      the handedness sweeping through the minimum angle between
 *      the axes is opposite).
 *
 *      An important constraint is that we have shear operations
 *      about an arbitrary horizontal or vertical line, but always
 *      parallel to the x or y axis.  If we continue to pretend that
 *      we have an unprimed coordinate space embedded in image 1 and
 *      a primed coordinate space embedded in image 2, we imagine
 *      (a) transforming image 1 by horizontal and vertical shears about
 *      point 1 to align points 3 and 2 along the y and x axes,
 *      respectively, and (b) transforming image 2 by horizontal and
 *      vertical shears about point 1' to align points 3' and 2' along
 *      the y and x axes.  Then we scale image 1 so that the distances
 *      from 1 to 2 and from 1 to 3 are equal to the distances in
 *      image 2 from 1' to 2' and from 1' to 3'.  This scaling operation
 *      leaves the true image origin, at (0,0) invariant, and will in
 *      general translate point 1.  The original points 1 and 1' will
 *      typically not coincide in any event, so we must translate
 *      the origin of image 1, at its current point 1, to the origin
 *      of image 2 at 1'.  The images should now be aligned.  But
 *      because we never really transformed image 2 (and image 2 may
 *      not even exist), we now perform  on image 1 the reverse of
 *      the shear transforms that we imagined doing on image 2;
 *      namely, the negative vertical shear followed by the negative
 *      horizontal shear.  Image 1 should now have its transformed
 *      unprimed coordinates aligned with the original primed
 *      coordinates.  In all this, it is only necessary to keep track
 *      of the shear angles and translations of points during the shears.
 *      What has been accomplished is a general affine transformation
 *      on image 1.
 *
 *      Having described all this, if you are going to use an
 *      affine transformation in an application, this is what you
 *      need to know:
 *
 *          (1) You should NEVER use the sequential method, because
 *              the image quality for 1 bpp text is much poorer
 *              (even though it is about 2x faster than the pointwise sampled
 *              method), and for images with depth greater than 1, it is
 *              nearly 20x slower than the pointwise sampled method
 *              and over 10x slower than the pointwise interpolated method!
 *              The sequential method is given here for purely
 *              pedagogical reasons.
 *
 *          (2) For 1 bpp images, use the pointwise sampled function
 *              pixAffineSampled().  For all other images, the best
 *              quality results result from using the pointwise
 *              interpolated function pixAffinePta() or pixAffine();
 *              the cost is less than a doubling of the computation time
 *              with respect to the sampled function.  If you use
 *              interpolation on colormapped images, the colormap will
 *              be removed, resulting in either a grayscale or color
 *              image, depending on the values in the colormap.
 *              If you want to retain the colormap, use pixAffineSampled().
 *
 *      Typical relative timing of pointwise transforms (sampled = 1.0):
 *      8 bpp:   sampled        1.0
 *               interpolated   1.6
 *      32 bpp:  sampled        1.0
 *               interpolated   1.8
 *      Additionally, the computation time/pixel is nearly the same
 *      for 8 bpp and 32 bpp, for both sampled and interpolated.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Sampled affine image transformation * *-------------------------------------------------------------*/ /*! * \brief pixAffineSampledPta() * * \param[in] pixs all depths * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) The 3 points must not be collinear.
 *      (4) The order of the 3 points is arbitrary; however, to compare
 *          with the sequential transform they must be in these locations
 *          and in this order: origin, x-axis, y-axis.
 *      (5) For 1 bpp images, this has much better quality results
 *          than pixAffineSequential(), particularly for text.
 *          It is about 3x slower, but does not require additional
 *          border pixels.  The poor quality of pixAffineSequential()
 *          is due to repeated quantized transforms.  It is strongly
 *          recommended that pixAffineSampled() be used for 1 bpp images.
 *      (6) For 8 or 32 bpp, much better quality is obtained by the
 *          somewhat slower pixAffinePta().  See that function
 *          for relative timings between sampled and interpolated.
 *      (7) To repeat, use of the sequential transform,
 *          pixAffineSequential(), for any images, is discouraged.
 * 
*/ PIX * pixAffineSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", __func__, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineSampled(pixs, vc, incolor); LEPT_FREE(vc); return pixd; } /*! * \brief pixAffineSampled() * * \param[in] pixs all depths * \param[in] vc vector of 6 coefficients for affine transformation * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) For 8 or 32 bpp, much better quality is obtained by the
 *          somewhat slower pixAffine().  See that function
 *          for relative timings between sampled and interpolated.
 * 
*/ PIX * pixAffineSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", __func__, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { affineXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated affine image transformation * *---------------------------------------------------------------------*/ /*! * \brief pixAffinePta() * * \param[in] pixs all depths; colormap ok * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixAffinePta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", __func__, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixAffineSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixAffinePtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixAffinePtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixAffine() * * \param[in] pixs all depths; colormap ok * \param[in] vc vector of 6 coefficients for affine transformation * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixAffine(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixAffineSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixAffineGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixAffineColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixAffinePtaColor() * * \param[in] pixs 32 bpp * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] colorval e.g.: 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixAffinePtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", __func__, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineColor(pixs, vc, colorval); LEPT_FREE(vc); return pixd; } /*! * \brief pixAffineColor() * * \param[in] pixs 32 bpp * \param[in] vc vector of 6 coefficients for affine transformation * \param[in] colorval e.g.: 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixAffineColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixAffineGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixAffinePtaGray() * * \param[in] pixs 8 bpp * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] grayval e.g.: 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixAffinePtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", __func__, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineGray(pixs, vc, grayval); LEPT_FREE(vc); return pixd; } /*! * \brief pixAffineGray() * * \param[in] pixs 8 bpp * \param[in] vc vector of 6 coefficients for affine transformation * \param[in] grayval e.g.: 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixAffineGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*---------------------------------------------------------------------------* * Affine transform including alpha (blend) component * *---------------------------------------------------------------------------*/ /*! * \brief pixAffinePtaWithAlpha() * * \param[in] pixs 32 bpp rgb * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] pixg [optional] 8 bpp, can be null * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque * \param[in] border of pixels added to capture transformed source pixels * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The alpha channel is transformed separately from pixs,
 *          and aligns with it, being fully transparent outside the
 *          boundary of the transformed pixs.  For pixels that are fully
 *          transparent, a blending function like pixBlendWithGrayMask()
 *          will give zero weight to corresponding pixels in pixs.
 *      (2) If pixg is NULL, it is generated as an alpha layer that is
 *          partially opaque, using %fract.  Otherwise, it is cropped
 *          to pixs if required and %fract is ignored.  The alpha channel
 *          in pixs is never used.
 *      (3) Colormaps are removed.
 *      (4) When pixs is transformed, it doesn't matter what color is brought
 *          in because the alpha channel will be transparent (0) there.
 *      (5) To avoid losing source pixels in the destination, it may be
 *          necessary to add a border to the source pix before doing
 *          the affine transformation.  This can be any non-negative number.
 *      (6) The input %ptad and %ptas are in a coordinate space before
 *          the border is added.  Internally, we compensate for this
 *          before doing the affine transform on the image after the border
 *          is added.
 *      (7) The default setting for the border values in the alpha channel
 *          is 0 (transparent) for the outermost ring of pixels and
 *          (0.5 * fract * 255) for the second ring.  When blended over
 *          a second image, this
 *          (a) shrinks the visible image to make a clean overlap edge
 *              with an image below, and
 *          (b) softens the edges by weakening the aliasing there.
 *          Use l_setAlphaMaskBorder() to change these values.
 * 
*/ PIX * pixAffinePtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", __func__); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", __func__); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image will not be blended\n", __func__); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate affine transform of rgb channels of pixs and of pixg */ pixd = pixAffinePtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixAffinePtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Affine coordinate transformation * *-------------------------------------------------------------*/ /*! * \brief getAffineXformCoeffs() * * \param[in] ptas source 3 points; unprimed * \param[in] ptad transformed 3 points; primed * \param[out] pvc vector of coefficients of transform * \return 0 if OK; 1 on error * *
 *  We have a set of six equations, describing the affine
 *  transformation that takes 3 points ptas into 3 other
 *  points ptad.  These equations are:
 *
 *          x1' = c[0]*x1 + c[1]*y1 + c[2]
 *          y1' = c[3]*x1 + c[4]*y1 + c[5]
 *          x2' = c[0]*x2 + c[1]*y2 + c[2]
 *          y2' = c[3]*x2 + c[4]*y2 + c[5]
 *          x3' = c[0]*x3 + c[1]*y3 + c[2]
 *          y3' = c[3]*x3 + c[4]*y3 + c[5]
 *
 *  This can be represented as
 *
 *          AC = B
 *
 *  where B and C are column vectors
 *
 *          B = [ x1' y1' x2' y2' x3' y3' ]
 *          C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] ]
 *
 *  and A is the 6x6 matrix
 *
 *          x1   y1   1   0    0    0
 *           0    0   0   x1   y1   1
 *          x2   y2   1   0    0    0
 *           0    0   0   x2   y2   1
 *          x3   y3   1   0    0    0
 *           0    0   0   x3   y3   1
 *
 *  These six equations are solved here for the coefficients C.
 *
 *  These six coefficients can then be used to find the dest
 *  point x',y') corresponding to any src point (x,y, according
 *  to the equations
 *
 *           x' = c[0]x + c[1]y + c[2]
 *           y' = c[3]x + c[4]y + c[5]
 *
 *  that are implemented in affineXformPt.
 *
 *  !!!!!!!!!!!!!!!!!!   Very important   !!!!!!!!!!!!!!!!!!!!!!
 *
 *  When the affine transform is composed from a set of simple
 *  operations such as translation, scaling and rotation,
 *  it is built in a form to convert from the un-transformed src
 *  point to the transformed dest point.  However, when an
 *  affine transform is used on images, it is used in an inverted
 *  way: it converts from the transformed dest point to the
 *  un-transformed src point.  So, for example, if you transform
 *  a boxa using transform A, to transform an image in the same
 *  way you must use the inverse of A.
 *
 *  For example, if you transform a boxa with a 3x3 affine matrix
 *  'mat', the analogous image transformation must use 'matinv':
 * \code
 *     boxad = boxaAffineTransform(boxas, mat);
 *     affineInvertXform(mat, &matinv);
 *     pixd = pixAffine(pixs, matinv, L_BRING_IN_WHITE);
 * \endcode
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 * 
*/ l_ok getAffineXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[6]; /* 6x6 matrix A */ if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); if (!pvc) return ERROR_INT("&vc not defined", __func__, 1); b = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); for (i = 0; i < 6; i++) a[i] = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); a[0][0] = x1; a[0][1] = y1; a[0][2] = 1.; a[1][3] = x1; a[1][4] = y1; a[1][5] = 1.; a[2][0] = x2; a[2][1] = y2; a[2][2] = 1.; a[3][3] = x2; a[3][4] = y2; a[3][5] = 1.; a[4][0] = x3; a[4][1] = y3; a[4][2] = 1.; a[5][3] = x3; a[5][4] = y3; a[5][5] = 1.; gaussjordan(a, b, 6); for (i = 0; i < 6; i++) LEPT_FREE(a[i]); return 0; } /*! * \brief affineInvertXform() * * \param[in] vc vector of 6 coefficients * \param[out] pvci inverted transform * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The 6 affine transform coefficients are the first
 *          two rows of a 3x3 matrix where the last row has
 *          only a 1 in the third column.  We invert this
 *          using gaussjordan(), and select the first 2 rows
 *          as the coefficients of the inverse affine transform.
 *      (2) Alternatively, we can find the inverse transform
 *          coefficients by inverting the 2x2 submatrix,
 *          and treating the top 2 coefficients in the 3rd column as
 *          a RHS vector for that 2x2 submatrix.  Then the
 *          6 inverted transform coefficients are composed of
 *          the inverted 2x2 submatrix and the negative of the
 *          transformed RHS vector.  Why is this so?  We have
 *             Y = AX + R  (2 equations in 6 unknowns)
 *          Then
 *             X = A'Y - A'R
 *          Gauss-jordan solves
 *             AF = R
 *          and puts the solution for F, which is A'R,
 *          into the input R vector.
 *
 * 
*/ l_ok affineInvertXform(l_float32 *vc, l_float32 **pvci) { l_int32 i; l_float32 *vci; l_float32 *a[3]; l_float32 b[3] = {1.0, 1.0, 1.0}; /* anything; results ignored */ if (!pvci) return ERROR_INT("&vci not defined", __func__, 1); *pvci = NULL; if (!vc) return ERROR_INT("vc not defined", __func__, 1); #if 1 for (i = 0; i < 3; i++) a[i] = (l_float32 *)LEPT_CALLOC(3, sizeof(l_float32)); a[0][0] = vc[0]; a[0][1] = vc[1]; a[0][2] = vc[2]; a[1][0] = vc[3]; a[1][1] = vc[4]; a[1][2] = vc[5]; a[2][2] = 1.0; gaussjordan(a, b, 3); /* this inverts matrix a */ vci = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); *pvci = vci; vci[0] = a[0][0]; vci[1] = a[0][1]; vci[2] = a[0][2]; vci[3] = a[1][0]; vci[4] = a[1][1]; vci[5] = a[1][2]; for (i = 0; i < 3; i++) LEPT_FREE(a[i]); #else /* Alternative version, inverting a 2x2 matrix */ { l_float32 *a2[2]; for (i = 0; i < 2; i++) a2[i] = (l_float32 *)LEPT_CALLOC(2, sizeof(l_float32)); a2[0][0] = vc[0]; a2[0][1] = vc[1]; a2[1][0] = vc[3]; a2[1][1] = vc[4]; b[0] = vc[2]; b[1] = vc[5]; gaussjordan(a2, b, 2); /* this inverts matrix a2 */ vci = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); *pvci = vci; vci[0] = a2[0][0]; vci[1] = a2[0][1]; vci[2] = -b[0]; /* note sign */ vci[3] = a2[1][0]; vci[4] = a2[1][1]; vci[5] = -b[1]; /* note sign */ for (i = 0; i < 2; i++) LEPT_FREE(a2[i]); } #endif return 0; } /*! * \brief affineXformSampledPt() * * \param[in] vc vector of 6 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds the nearest pixel coordinates of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok affineXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { if (!vc) return ERROR_INT("vc not defined", __func__, 1); *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] + 0.5); *pyp = (l_int32)(vc[3] * x + vc[4] * y + vc[5] + 0.5); return 0; } /*! * \brief affineXformPt() * * \param[in] vc vector of 6 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This computes the floating point location of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok affineXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { if (!vc) return ERROR_INT("vc not defined", __func__, 1); *pxp = vc[0] * x + vc[1] * y + vc[2]; *pyp = vc[3] * x + vc[4] * y + vc[5]; return 0; } /*-------------------------------------------------------------* * Interpolation helper functions * *-------------------------------------------------------------*/ /*! * \brief linearInterpolatePixelColor() * * \param[in] datas ptr to beginning of image data * \param[in] wpls 32-bit word/line for this data array * \param[in] w, h of image * \param[in] x, y floating pt location for evaluation * \param[in] colorval color brought in from the outside when the * input x,y location is outside the image; * in 0xrrggbb00 format) * \param[out] pval interpolated color value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a standard linear interpolation function.  It is
 *          equivalent to area weighting on each component, and
 *          avoids "jaggies" when rendering sharp edges.
 * 
*/ l_ok linearInterpolatePixelColor(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval) { l_int32 valid, xpm, ypm, xp, xp2, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = colorval; if (!datas) return ERROR_INT("datas not defined", __func__, 1); /* Skip if x or y are invalid. (x,y) must be in the source image. * Failure to detect an invalid point will cause a mem address fault. * Occasionally, x or y will be a nan, and relational checks always * fail for nans. Therefore we check if the point is inside the pix */ valid = (x >= 0.0 && y >= 0.0 && x < w && y < h); if (!valid) return 0; xpm = (l_int32)(16.0 * x); ypm = (l_int32)(16.0 * y); xp = xpm >> 4; xp2 = xp + 1 < w ? xp + 1 : xp; yp = ypm >> 4; if (yp + 1 >= h) wpls = 0; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) lept_stderr("xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Do area weighting (eqiv. to linear interpolation) */ lines = datas + yp * wpls; word00 = *(lines + xp); word10 = *(lines + xp2); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp2); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff)) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff)) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff)) / 256; composeRGBPixel(rval, gval, bval, pval); return 0; } /*! * \brief linearInterpolatePixelGray() * * \param[in] datas ptr to beginning of image data * \param[in] wpls 32-bit word/line for this data array * \param[in] w, h of image * \param[in] x, y floating pt location for evaluation * \param[in] grayval color brought in from the outside when the * input x,y location is outside the image * \param[out] pval interpolated gray value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a standard linear interpolation function.  It is
 *          equivalent to area weighting on each component, and
 *          avoids "jaggies" when rendering sharp edges.
 * 
*/ l_ok linearInterpolatePixelGray(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval) { l_int32 valid, xpm, ypm, xp, xp2, yp, xf, yf, v00, v10, v01, v11; l_uint32 *lines; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = grayval; if (!datas) return ERROR_INT("datas not defined", __func__, 1); /* Skip if x or y is invalid. (x,y) must be in the source image. * Failure to detect an invalid point will cause a mem address fault. * Occasionally, x or y will be a nan, and relational checks always * fail for nans. Therefore we check if the point is inside the pix */ valid = (x >= 0.0 && y >= 0.0 && x < w && y < h); if (!valid) return 0; xpm = (l_int32)(16.0 * x); ypm = (l_int32)(16.0 * y); xp = xpm >> 4; xp2 = xp + 1 < w ? xp + 1 : xp; yp = ypm >> 4; if (yp + 1 >= h) wpls = 0; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) lept_stderr("xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Interpolate by area weighting. */ lines = datas + yp * wpls; v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp2); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp2); *pval = (v00 + v01 + v10 + v11) / 256; return 0; } /*-------------------------------------------------------------* * Gauss-jordan linear equation solver * *-------------------------------------------------------------*/ #define SWAP(a,b) {temp = (a); (a) = (b); (b) = temp;} /*! * \brief gaussjordan() * * \param[in] a n x n matrix * \param[in] b n x 1 right-hand side column vector * \param[in] n dimension * \return 0 if ok, 1 on error * *
 * Notes:
 *      (1) There are two side-effects:
 *          * The matrix a is transformed to its inverse A
 *          * The rhs vector b is transformed to the solution x
 *            of the linear equation ax = b
 *      (2) The inverse A can then be used to solve the same equation with
 *          different rhs vectors c by multiplication: x = Ac
 *      (3) Adapted from "Numerical Recipes in C, Second Edition", 1992,
 *          pp. 36-41 (gauss-jordan elimination)
 * 
*/ l_int32 gaussjordan(l_float32 **a, l_float32 *b, l_int32 n) { l_int32 i, icol, irow, j, k, col, row, success; l_int32 *indexc, *indexr, *ipiv; l_float32 maxval, val, pivinv, temp; if (!a) return ERROR_INT("a not defined", __func__, 1); if (!b) return ERROR_INT("b not defined", __func__, 1); success = TRUE; indexc = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); indexr = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); ipiv = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); if (!indexc || !indexr || !ipiv) { L_ERROR("array not made\n", __func__); success = FALSE; goto cleanup_arrays; } icol = irow = 0; /* silence static checker */ for (i = 0; i < n; i++) { maxval = 0.0; for (j = 0; j < n; j++) { if (ipiv[j] != 1) { for (k = 0; k < n; k++) { if (ipiv[k] == 0) { if (fabs(a[j][k]) >= maxval) { maxval = fabs(a[j][k]); irow = j; icol = k; } } else if (ipiv[k] > 1) { L_ERROR("singular matrix\n", __func__); success = FALSE; goto cleanup_arrays; } } } } ++(ipiv[icol]); if (irow != icol) { for (col = 0; col < n; col++) SWAP(a[irow][col], a[icol][col]); SWAP(b[irow], b[icol]); } indexr[i] = irow; indexc[i] = icol; if (a[icol][icol] == 0.0) { L_ERROR("singular matrix\n", __func__); success = FALSE; goto cleanup_arrays; } pivinv = 1.0 / a[icol][icol]; a[icol][icol] = 1.0; for (col = 0; col < n; col++) a[icol][col] *= pivinv; b[icol] *= pivinv; for (row = 0; row < n; row++) { if (row != icol) { val = a[row][icol]; a[row][icol] = 0.0; for (col = 0; col < n; col++) a[row][col] -= a[icol][col] * val; b[row] -= b[icol] * val; } } } for (col = n - 1; col >= 0; col--) { if (indexr[col] != indexc[col]) { for (k = 0; k < n; k++) SWAP(a[k][indexr[col]], a[k][indexc[col]]); } } cleanup_arrays: LEPT_FREE(indexr); LEPT_FREE(indexc); LEPT_FREE(ipiv); return (success) ? 0 : 1; } /*-------------------------------------------------------------* * Sequential affine image transformation * *-------------------------------------------------------------*/ /*! * \brief pixAffineSequential() * * \param[in] pixs * \param[in] ptad 3 pts of final coordinate space * \param[in] ptas 3 pts of initial coordinate space * \param[in] bw pixels of additional border width during computation * \param[in] bh pixels of additional border height during computation * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The 3 pts must not be collinear.
 *      (2) The 3 pts must be given in this order:
 *           ~ origin
 *           ~ a location along the x-axis
 *           ~ a location along the y-axis.
 *      (3) You must guess how much border must be added so that no
 *          pixels are lost in the transformations from src to
 *          dest coordinate space.  (This can be calculated but it
 *          is a lot of work!)  For coordinate spaces that are nearly
 *          at right angles, on a 300 ppi scanned page, the addition
 *          of 1000 pixels on each side is usually sufficient.
 *      (4) This is here for pedagogical reasons.  It is about 3x faster
 *          on 1 bpp images than pixAffineSampled(), but the results
 *          on text are much inferior.
 * 
*/ PIX * pixAffineSequential(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 bw, l_int32 bh) { l_int32 x1, y1, x2, y2, x3, y3; /* ptas */ l_int32 x1p, y1p, x2p, y2p, x3p, y3p; /* ptad */ l_int32 x1sc, y1sc; /* scaled origin */ l_float32 x2s, x2sp, scalex, scaley; l_float32 th3, th3p, ph2, ph2p; #if DEBUG l_float32 rad2deg; #endif /* DEBUG */ PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", __func__, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", __func__, NULL); ptaGetIPt(ptas, 0, &x1, &y1); ptaGetIPt(ptas, 1, &x2, &y2); ptaGetIPt(ptas, 2, &x3, &y3); ptaGetIPt(ptad, 0, &x1p, &y1p); ptaGetIPt(ptad, 1, &x2p, &y2p); ptaGetIPt(ptad, 2, &x3p, &y3p); pix1 = pix2 = pixd = NULL; if (y1 == y3) return (PIX *)ERROR_PTR("y1 == y3!", __func__, NULL); if (y1p == y3p) return (PIX *)ERROR_PTR("y1p == y3p!", __func__, NULL); if (bw != 0 || bh != 0) { /* resize all points and add border to pixs */ x1 = x1 + bw; y1 = y1 + bh; x2 = x2 + bw; y2 = y2 + bh; x3 = x3 + bw; y3 = y3 + bh; x1p = x1p + bw; y1p = y1p + bh; x2p = x2p + bw; y2p = y2p + bh; x3p = x3p + bw; y3p = y3p + bh; if ((pix1 = pixAddBorderGeneral(pixs, bw, bw, bh, bh, 0)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); } else { pix1 = pixCopy(NULL, pixs); } /*-------------------------------------------------------------* The horizontal shear is done to move the 3rd point to the y axis. This moves the 2nd point either towards or away from the y axis, depending on whether it is above or below the x axis. That motion must be computed so that we know the angle of vertical shear to use to get the 2nd point on the x axis. We must also know the x coordinate of the 2nd point in order to compute how much scaling is required to match points on the axis. *-------------------------------------------------------------*/ /* Shear angles required to put src points on x and y axes */ th3 = atan2((l_float64)(x1 - x3), (l_float64)(y1 - y3)); x2s = (l_float32)(x2 - ((l_float32)(y1 - y2) * (x3 - x1)) / (y1 - y3)); if (x2s == (l_float32)x1) { L_ERROR("x2s == x1!\n", __func__); goto cleanup_pix; } ph2 = atan2((l_float64)(y1 - y2), (l_float64)(x2s - x1)); /* Shear angles required to put dest points on x and y axes. * Use the negative of these values to instead move the * src points from the axes to the actual dest position. * These values are also needed to scale the image. */ th3p = atan2((l_float64)(x1p - x3p), (l_float64)(y1p - y3p)); x2sp = (l_float32)(x2p - ((l_float32)(y1p - y2p) * (x3p - x1p)) / (y1p - y3p)); if (x2sp == (l_float32)x1p) { L_ERROR("x2sp == x1p!\n", __func__); goto cleanup_pix; } ph2p = atan2((l_float64)(y1p - y2p), (l_float64)(x2sp - x1p)); /* Shear image to first put src point 3 on the y axis, * and then to put src point 2 on the x axis */ pixHShearIP(pix1, y1, th3, L_BRING_IN_WHITE); pixVShearIP(pix1, x1, ph2, L_BRING_IN_WHITE); /* Scale image to match dest scale. The dest scale * is calculated above from the angles th3p and ph2p * that would be required to move the dest points to * the x and y axes. */ scalex = (l_float32)(x2sp - x1p) / (x2s - x1); scaley = (l_float32)(y3p - y1p) / (y3 - y1); if ((pix2 = pixScale(pix1, scalex, scaley)) == NULL) { L_ERROR("pix2 not made\n", __func__); goto cleanup_pix; } #if DEBUG rad2deg = 180. / 3.1415926535; lept_stderr("th3 = %5.1f deg, ph2 = %5.1f deg\n", rad2deg * th3, rad2deg * ph2); lept_stderr("th3' = %5.1f deg, ph2' = %5.1f deg\n", rad2deg * th3p, rad2deg * ph2p); lept_stderr("scalex = %6.3f, scaley = %6.3f\n", scalex, scaley); #endif /* DEBUG */ /*-------------------------------------------------------------* Scaling moves the 1st src point, which is the origin. It must now be moved again to coincide with the origin (1st point) of the dest. After this is done, the 2nd and 3rd points must be sheared back to the original positions of the 2nd and 3rd dest points. We use the negative of the angles that were previously computed for shearing those points in the dest image to x and y axes, and take the shears in reverse order as well. *-------------------------------------------------------------*/ /* Shift image to match dest origin. */ x1sc = (l_int32)(scalex * x1 + 0.5); /* x comp of origin after scaling */ y1sc = (l_int32)(scaley * y1 + 0.5); /* y comp of origin after scaling */ pixRasteropIP(pix2, x1p - x1sc, y1p - y1sc, L_BRING_IN_WHITE); /* Shear image to take points 2 and 3 off the axis and * put them in the original dest position */ pixVShearIP(pix2, x1p, -ph2p, L_BRING_IN_WHITE); pixHShearIP(pix2, y1p, -th3p, L_BRING_IN_WHITE); if (bw != 0 || bh != 0) { if ((pixd = pixRemoveBorderGeneral(pix2, bw, bw, bh, bh)) == NULL) L_ERROR("pixd not made\n", __func__); } else { pixd = pixClone(pix2); } cleanup_pix: pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } leptonica-1.86.0/src/affinecompose.c000066400000000000000000000452061506303110300173340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file affinecompose.c *
 *
 *      Composable coordinate transforms
 *           l_float32   *createMatrix2dTranslate()
 *           l_float32   *createMatrix2dScale()
 *           l_float32   *createMatrix2dRotate()
 *
 *      Special coordinate transforms on pta
 *           PTA         *ptaTranslate()
 *           PTA         *ptaScale()
 *           PTA         *ptaRotate()
 *
 *      Special coordinate transforms on boxa
 *           BOXA        *boxaTranslate()
 *           BOXA        *boxaScale()
 *           BOXA        *boxaRotate()
 *
 *      General coordinate transform on pta and boxa
 *           PTA         *ptaAffineTransform()
 *           BOXA        *boxaAffineTransform()
 *
 *      Matrix operations
 *           l_int32      l_productMatVec()
 *           l_int32      l_productMat2()
 *           l_int32      l_productMat3()
 *           l_int32      l_productMat4()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*-------------------------------------------------------------* * Composable coordinate transforms * *-------------------------------------------------------------*/ /*! * \brief createMatrix2dTranslate() * * \param[in] transx x component of translation wrt. the origin * \param[in] transy y component of translation wrt. the origin * \return 3x3 transform matrix, or NULL on error * *
 * Notes:
 *      (1) The translation is equivalent to:
 *             v' = Av
 *          where v and v' are 1x3 column vectors in the form
 *             v = [x, y, 1]^    ^ denotes transpose
 *          and the affine translation matrix is
 *             A = [ 1   0   tx
 *                   0   1   ty
 *                   0   0    1  ]
 *
 *      (2) We consider translation as with respect to a fixed origin.
 *          In a clipping operation, the origin moves and the points
 *          are fixed, and you use (-tx, -ty) where (tx, ty) is the
 *          translation vector of the origin.
 * 
*/ l_float32 * createMatrix2dTranslate(l_float32 transx, l_float32 transy) { l_float32 *mat; mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); mat[0] = mat[4] = mat[8] = 1; mat[2] = transx; mat[5] = transy; return mat; } /*! * \brief createMatrix2dScale() * * \param[in] scalex horizontal scale factor * \param[in] scaley vertical scale factor * \return 3x3 transform matrix, or NULL on error * *
 * Notes:
 *      (1) The scaling is equivalent to:
 *             v' = Av
 *         where v and v' are 1x3 column vectors in the form
 *              v = [x, y, 1]^    ^ denotes transpose
 *         and the affine scaling matrix is
 *             A = [ sx  0    0
 *                   0   sy   0
 *                   0   0    1  ]
 *
 *      (2) We consider scaling as with respect to a fixed origin.
 *          In other words, the origin is the only point that doesn't
 *          move in the scaling transform.
 * 
*/ l_float32 * createMatrix2dScale(l_float32 scalex, l_float32 scaley) { l_float32 *mat; mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); mat[0] = scalex; mat[4] = scaley; mat[8] = 1; return mat; } /*! * \brief createMatrix2dRotate() * * \param[in] xc, yc location of center of rotation * \param[in] angle rotation in radians; clockwise is positive * \return 3x3 transform matrix, or NULL on error * *
 * Notes:
 *      (1) The rotation is equivalent to:
 *             v' = Av
 *          where v and v' are 1x3 column vectors in the form
 *             v = [x, y, 1]^    ^ denotes transpose
 *          and the affine rotation matrix is
 *             A = [ cosa   -sina    xc*1-cosa + yc*sina
 *                   sina    cosa    yc*1-cosa - xc*sina
 *                     0       0                 1         ]
 *
 *          If the rotation is about the origin, xc, yc) = (0, 0 and
 *          this simplifies to
 *             A = [ cosa   -sina    0
 *                   sina    cosa    0
 *                     0       0     1 ]
 *
 *          These relations follow from the following equations, which
 *          you can convince yourself are correct as follows.  Draw a
 *          circle centered on xc,yc) and passing through (x,y), with
 *          (x',y') on the arc at an angle 'a' clockwise from (x,y).
 *           [ Hint: cosa + b = cosa * cosb - sina * sinb
 *                   sina + b = sina * cosb + cosa * sinb ]
 *
 *            x' - xc =  x - xc) * cosa - (y - yc * sina
 *            y' - yc =  x - xc) * sina + (y - yc * cosa
 * 
*/ l_float32 * createMatrix2dRotate(l_float32 xc, l_float32 yc, l_float32 angle) { l_float32 sina, cosa; l_float32 *mat; mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); sina = sin(angle); cosa = cos(angle); mat[0] = mat[4] = cosa; mat[1] = -sina; mat[2] = xc * (1.0 - cosa) + yc * sina; mat[3] = sina; mat[5] = yc * (1.0 - cosa) - xc * sina; mat[8] = 1; return mat; } /*-------------------------------------------------------------* * Special coordinate transforms on pta * *-------------------------------------------------------------*/ /*! * \brief ptaTranslate() * * \param[in] ptas for initial points * \param[in] transx x component of translation wrt. the origin * \param[in] transy y component of translation wrt. the origin * \return ptad translated points, or NULL on error * *
 * Notes:
 *      (1) See createMatrix2dTranslate() for details of transform.
 * 
*/ PTA * ptaTranslate(PTA *ptas, l_float32 transx, l_float32 transy) { l_int32 i, npts; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x + transx, y + transy); } return ptad; } /*! * \brief ptaScale() * * \param[in] ptas for initial points * \param[in] scalex horizontal scale factor * \param[in] scaley vertical scale factor * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See createMatrix2dScale() for details of transform.
 * 
*/ PTA * ptaScale(PTA *ptas, l_float32 scalex, l_float32 scaley) { l_int32 i, npts; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, scalex * x, scaley * y); } return ptad; } /*! * \brief ptaRotate() * * \param[in] ptas for initial points * \param[in] xc, yc location of center of rotation * \param[in] angle rotation in radians; clockwise is positive * \return ptad rotated pta, or NULL on error * *
 * Notes;
 *      (1) See createMatrix2dRotate() for details of transform.
 *      (2) This transform can be thought of as composed of the
 *          sum of two parts:
 *           a) an (x,y)-dependent rotation about the origin:
 *              xr = x * cosa - y * sina
 *              yr = x * sina + y * cosa
 *           b) an (x,y)-independent translation that depends on the
 *              rotation center and the angle:
 *              xt = xc - xc * cosa + yc * sina
 *              yt = yc - xc * sina - yc * cosa
 *          The translation part (xt,yt) is equal to the difference
 *          between the center (xc,yc) and the location of the
 *          center after it is rotated about the origin.
 * 
*/ PTA * ptaRotate(PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle) { l_int32 i, npts; l_float32 x, y, xp, yp, sina, cosa; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); sina = sin(angle); cosa = cos(angle); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); xp = xc + (x - xc) * cosa - (y - yc) * sina; yp = yc + (x - xc) * sina + (y - yc) * cosa; ptaAddPt(ptad, xp, yp); } return ptad; } /*-------------------------------------------------------------* * Special coordinate transforms on boxa * *-------------------------------------------------------------*/ /*! * \brief boxaTranslate() * * \param[in] boxas * \param[in] transx x component of translation wrt. the origin * \param[in] transy y component of translation wrt. the origin * \return boxad translated boxas, or NULL on error * * Notes: * (1) See createMatrix2dTranslate() for details of transform. */ BOXA * boxaTranslate(BOXA *boxas, l_float32 transx, l_float32 transy) { PTA *ptas, *ptad; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaTranslate(ptas, transx, transy); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*! * \brief boxaScale() * * \param[in] boxas * \param[in] scalex horizontal scale factor * \param[in] scaley vertical scale factor * \return boxad scaled boxas, or NULL on error * * Notes: * (1) See createMatrix2dScale() for details of transform. */ BOXA * boxaScale(BOXA *boxas, l_float32 scalex, l_float32 scaley) { PTA *ptas, *ptad; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaScale(ptas, scalex, scaley); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*! * \brief boxaRotate() * * \param[in] boxas * \param[in] xc, yc location of center of rotation * \param[in] angle rotation in radians; clockwise is positive * \return boxad rotated boxas, or NULL on error * * Notes: * (1) See createMatrix2dRotate() for details of transform. */ BOXA * boxaRotate(BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle) { PTA *ptas, *ptad; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaRotate(ptas, xc, yc, angle); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*-------------------------------------------------------------* * General affine coordinate transform * *-------------------------------------------------------------*/ /*! * \brief ptaAffineTransform() * * \param[in] ptas for initial points * \param[in] mat 3x3 transform matrix; canonical form * \return ptad transformed points, or NULL on error */ PTA * ptaAffineTransform(PTA *ptas, l_float32 *mat) { l_int32 i, npts; l_float32 vecs[3], vecd[3]; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (!mat) return (PTA *)ERROR_PTR("transform not defined", __func__, NULL); vecs[2] = 1; npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &vecs[0], &vecs[1]); l_productMatVec(mat, vecs, vecd, 3); ptaAddPt(ptad, vecd[0], vecd[1]); } return ptad; } /*! * \brief boxaAffineTransform() * * \param[in] boxas * \param[in] mat 3x3 transform matrix; canonical form * \return boxad transformed boxas, or NULL on error */ BOXA * boxaAffineTransform(BOXA *boxas, l_float32 *mat) { PTA *ptas, *ptad; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!mat) return (BOXA *)ERROR_PTR("transform not defined", __func__, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaAffineTransform(ptas, mat); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*-------------------------------------------------------------* * Matrix operations * *-------------------------------------------------------------*/ /*! * \brief l_productMatVec() * * \param[in] mat square matrix, as a 1-dimensional %size^2 array * \param[in] vecs input column vector of length %size * \param[in] vecd result column vector * \param[in] size matrix is %size x %size; vectors are length %size * \return 0 if OK, 1 on error */ l_ok l_productMatVec(l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size) { l_int32 i, j; if (!mat) return ERROR_INT("matrix not defined", __func__, 1); if (!vecs) return ERROR_INT("input vector not defined", __func__, 1); if (!vecd) return ERROR_INT("result vector not defined", __func__, 1); for (i = 0; i < size; i++) { vecd[i] = 0; for (j = 0; j < size; j++) { vecd[i] += mat[size * i + j] * vecs[j]; } } return 0; } /*! * \brief l_productMat2() * * \param[in] mat1 square matrix, as a 1-dimensional size^2 array * \param[in] mat2 square matrix, as a 1-dimensional size^2 array * \param[in] matd square matrix; product stored here * \param[in] size of matrices * \return 0 if OK, 1 on error */ l_ok l_productMat2(l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size) { l_int32 i, j, k, index; if (!mat1) return ERROR_INT("matrix 1 not defined", __func__, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", __func__, 1); if (!matd) return ERROR_INT("result matrix not defined", __func__, 1); for (i = 0; i < size; i++) { for (j = 0; j < size; j++) { index = size * i + j; matd[index] = 0; for (k = 0; k < size; k++) matd[index] += mat1[size * i + k] * mat2[size * k + j]; } } return 0; } /*! * \brief l_productMat3() * * \param[in] mat1 square matrix, as a 1-dimensional size^2 array * \param[in] mat2 square matrix, as a 1-dimensional size^2 array * \param[in] mat3 square matrix, as a 1-dimensional size^2 array * \param[in] matd square matrix; product stored here * \param[in] size of matrices * \return 0 if OK, 1 on error */ l_ok l_productMat3(l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size) { l_float32 *matt; if (!mat1) return ERROR_INT("matrix 1 not defined", __func__, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", __func__, 1); if (!mat3) return ERROR_INT("matrix 3 not defined", __func__, 1); if (!matd) return ERROR_INT("result matrix not defined", __func__, 1); if ((matt = (l_float32 *)LEPT_CALLOC((size_t)size * size, sizeof(l_float32))) == NULL) return ERROR_INT("matt not made", __func__, 1); l_productMat2(mat1, mat2, matt, size); l_productMat2(matt, mat3, matd, size); LEPT_FREE(matt); return 0; } /*! * \brief l_productMat4() * * \param[in] mat1 square matrix, as a 1-dimensional size^2 array * \param[in] mat2 square matrix, as a 1-dimensional size^2 array * \param[in] mat3 square matrix, as a 1-dimensional size^2 array * \param[in] mat4 square matrix, as a 1-dimensional size^2 array * \param[in] matd square matrix; product stored here * \param[in] size of matrices * \return 0 if OK, 1 on error */ l_ok l_productMat4(l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size) { l_float32 *matt; if (!mat1) return ERROR_INT("matrix 1 not defined", __func__, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", __func__, 1); if (!mat3) return ERROR_INT("matrix 3 not defined", __func__, 1); if (!matd) return ERROR_INT("result matrix not defined", __func__, 1); if ((matt = (l_float32 *)LEPT_CALLOC((size_t)size * size, sizeof(l_float32))) == NULL) return ERROR_INT("matt not made", __func__, 1); l_productMat3(mat1, mat2, mat3, matt, size); l_productMat2(matt, mat4, matd, size); LEPT_FREE(matt); return 0; } leptonica-1.86.0/src/allheaders.h000066400000000000000000010002741506303110300166240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ALLHEADERS_H #define LEPTONICA_ALLHEADERS_H #define LIBLEPT_MAJOR_VERSION 1 #define LIBLEPT_MINOR_VERSION 86 #define LIBLEPT_PATCH_VERSION 0 #include "alltypes.h" #ifndef NO_PROTOS /* * These prototypes were autogen'd by xtractprotos, v. 1.5 */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern PIX * pixCleanBackgroundToWhite ( PIX *pixs, PIX *pixim, PIX *pixg, l_float32 gamma, l_int32 blackval, l_int32 whiteval ); LEPT_DLL extern PIX * pixBackgroundNormSimple ( PIX *pixs, PIX *pixim, PIX *pixg ); LEPT_DLL extern PIX * pixBackgroundNorm ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern PIX * pixBackgroundNormMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval ); LEPT_DLL extern l_ok pixBackgroundNormGrayArray ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd ); LEPT_DLL extern l_ok pixBackgroundNormRGBArrays ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern l_ok pixBackgroundNormGrayArrayMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd ); LEPT_DLL extern l_ok pixBackgroundNormRGBArraysMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern l_ok pixGetBackgroundGrayMap ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd ); LEPT_DLL extern l_ok pixGetBackgroundRGBMap ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); LEPT_DLL extern l_ok pixGetBackgroundGrayMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm ); LEPT_DLL extern l_ok pixGetBackgroundRGBMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); LEPT_DLL extern l_ok pixFillMapHoles ( PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype ); LEPT_DLL extern PIX * pixExtendByReplication ( PIX *pixs, l_int32 addw, l_int32 addh ); LEPT_DLL extern l_ok pixSmoothConnectedRegions ( PIX *pixs, PIX *pixm, l_int32 factor ); LEPT_DLL extern PIX * pixGetInvBackgroundMap ( PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern PIX * pixApplyInvBackgroundGrayMap ( PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy ); LEPT_DLL extern PIX * pixApplyInvBackgroundRGBMap ( PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy ); LEPT_DLL extern PIX * pixApplyVariableGrayMap ( PIX *pixs, PIX *pixg, l_int32 target ); LEPT_DLL extern PIX * pixGlobalNormRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval ); LEPT_DLL extern PIX * pixGlobalNormNoSatRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank ); LEPT_DLL extern l_ok pixThresholdSpreadNorm ( PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd ); LEPT_DLL extern PIX * pixBackgroundNormFlex ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta ); LEPT_DLL extern PIX * pixContrastNorm ( PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern PIX * pixBackgroundNormTo1MinMax ( PIX *pixs, l_int32 contrast, l_int32 scalefactor ); LEPT_DLL extern PIX * pixConvertTo8MinMax ( PIX *pixs ); LEPT_DLL extern PIX * pixAffineSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixAffineSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixAffinePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixAffine ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixAffinePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixAffineColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixAffinePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixAffineGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixAffinePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_ok getAffineXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_ok affineInvertXform ( l_float32 *vc, l_float32 **pvci ); LEPT_DLL extern l_ok affineXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_ok affineXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_ok linearInterpolatePixelColor ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval ); LEPT_DLL extern l_ok linearInterpolatePixelGray ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval ); LEPT_DLL extern l_int32 gaussjordan ( l_float32 **a, l_float32 *b, l_int32 n ); LEPT_DLL extern PIX * pixAffineSequential ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 bw, l_int32 bh ); LEPT_DLL extern l_float32 * createMatrix2dTranslate ( l_float32 transx, l_float32 transy ); LEPT_DLL extern l_float32 * createMatrix2dScale ( l_float32 scalex, l_float32 scaley ); LEPT_DLL extern l_float32 * createMatrix2dRotate ( l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern PTA * ptaTranslate ( PTA *ptas, l_float32 transx, l_float32 transy ); LEPT_DLL extern PTA * ptaScale ( PTA *ptas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PTA * ptaRotate ( PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern BOXA * boxaTranslate ( BOXA *boxas, l_float32 transx, l_float32 transy ); LEPT_DLL extern BOXA * boxaScale ( BOXA *boxas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOXA * boxaRotate ( BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern PTA * ptaAffineTransform ( PTA *ptas, l_float32 *mat ); LEPT_DLL extern BOXA * boxaAffineTransform ( BOXA *boxas, l_float32 *mat ); LEPT_DLL extern l_ok l_productMatVec ( l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size ); LEPT_DLL extern l_ok l_productMat2 ( l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_ok l_productMat3 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_ok l_productMat4 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_int32 l_getDataBit ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataBit ( void *line, l_int32 n ); LEPT_DLL extern void l_clearDataBit ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataBitVal ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataDibit ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataDibit ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern void l_clearDataDibit ( void *line, l_int32 n ); LEPT_DLL extern l_int32 l_getDataQbit ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataQbit ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern void l_clearDataQbit ( void *line, l_int32 n ); LEPT_DLL extern l_int32 l_getDataByte ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataByte ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataTwoBytes ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataTwoBytes ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataFourBytes ( const void *line, l_int32 n ); LEPT_DLL extern void l_setDataFourBytes ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern char * barcodeDispatchDecoder ( char *barstr, l_int32 format, l_int32 debugflag ); LEPT_DLL extern l_int32 barcodeFormatIsSupported ( l_int32 format ); LEPT_DLL extern NUMA * pixFindBaselines ( PIX *pixs, PTA **ppta, PIXA *pixadb ); LEPT_DLL extern NUMA * pixFindBaselinesGen ( PIX *pixs, l_int32 minw, PTA **ppta, PIXA *pixadb ); LEPT_DLL extern PIX * pixDeskewLocal ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_ok pixGetLocalSkewTransform ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, PTA **pptas, PTA **pptad ); LEPT_DLL extern NUMA * pixGetLocalSkewAngles ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 *pa, l_float32 *pb, l_int32 debug ); LEPT_DLL extern L_BBUFFER * bbufferCreate ( const l_uint8 *indata, l_int32 nalloc ); LEPT_DLL extern void bbufferDestroy ( L_BBUFFER **pbb ); LEPT_DLL extern l_uint8 * bbufferDestroyAndSaveData ( L_BBUFFER **pbb, size_t *pnbytes ); LEPT_DLL extern l_ok bbufferRead ( L_BBUFFER *bb, l_uint8 *src, l_int32 nbytes ); LEPT_DLL extern l_ok bbufferReadStream ( L_BBUFFER *bb, FILE *fp, l_int32 nbytes ); LEPT_DLL extern l_ok bbufferExtendArray ( L_BBUFFER *bb, l_int32 nbytes ); LEPT_DLL extern l_ok bbufferWrite ( L_BBUFFER *bb, l_uint8 *dest, size_t nbytes, size_t *pnout ); LEPT_DLL extern l_ok bbufferWriteStream ( L_BBUFFER *bb, FILE *fp, size_t nbytes, size_t *pnout ); LEPT_DLL extern PIX * pixBilateral ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); LEPT_DLL extern PIX * pixBilateralGray ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); LEPT_DLL extern PIX * pixBilateralExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); LEPT_DLL extern PIX * pixBilateralGrayExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); LEPT_DLL extern PIX* pixBlockBilateralExact ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev ); LEPT_DLL extern L_KERNEL * makeRangeKernel ( l_float32 range_stdev ); LEPT_DLL extern PIX * pixBilinearSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinear ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearPtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixBilinearColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixBilinearPtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixBilinearGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixBilinearPtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_ok getBilinearXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_ok bilinearXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_ok bilinearXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_ok pixOtsuAdaptiveThreshold ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern PIX * pixOtsuThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); LEPT_DLL extern PIX * pixMaskedThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); LEPT_DLL extern l_ok pixSauvolaBinarizeTiled ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 nx, l_int32 ny, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern l_ok pixSauvolaBinarize ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 addborder, PIX **ppixm, PIX **ppixsd, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern PIX * pixSauvolaOnContrastNorm ( PIX *pixs, l_int32 mindiff, PIX **ppixn, PIX **ppixth ); LEPT_DLL extern PIX * pixThreshOnDoubleNorm ( PIX *pixs, l_int32 mindiff ); LEPT_DLL extern l_ok pixThresholdByConnComp ( PIX *pixs, PIX *pixm, l_int32 start, l_int32 end, l_int32 incr, l_float32 thresh48, l_float32 threshdiff, l_int32 *pglobthresh, PIX **ppixd, l_int32 debugflag ); LEPT_DLL extern l_ok pixThresholdByHisto ( PIX *pixs, l_int32 factor, l_int32 halfw, l_int32 skip, l_int32 *pthresh, PIX **ppixd, NUMA **pnahisto, PIX **ppixhisto ); LEPT_DLL extern PIX * pixExpandBinaryReplicate ( PIX *pixs, l_int32 xfact, l_int32 yfact ); LEPT_DLL extern PIX * pixExpandBinaryPower2 ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixReduceBinary2 ( PIX *pixs, l_uint8 *intab ); LEPT_DLL extern PIX * pixReduceRankBinaryCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); LEPT_DLL extern PIX * pixReduceRankBinary2 ( PIX *pixs, l_int32 level, l_uint8 *intab ); LEPT_DLL extern l_uint8 * makeSubsampleTab2x ( void ); LEPT_DLL extern PIX * pixBlend ( PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern PIX * pixBlendMask ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type ); LEPT_DLL extern PIX * pixBlendGray ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendGrayInverse ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern PIX * pixBlendColor ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendColorByChannel ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 rfract, l_float32 gfract, l_float32 bfract, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendGrayAdapt ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 shift ); LEPT_DLL extern PIX * pixFadeWithGray ( PIX *pixs, PIX *pixb, l_float32 factor, l_int32 type ); LEPT_DLL extern PIX * pixBlendHardLight ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern l_ok pixBlendCmap ( PIX *pixs, PIX *pixb, l_int32 x, l_int32 y, l_int32 sindex ); LEPT_DLL extern PIX * pixBlendWithGrayMask ( PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y ); LEPT_DLL extern PIX * pixBlendBackgroundToColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixMultiplyByColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color ); LEPT_DLL extern PIX * pixAlphaBlendUniform ( PIX *pixs, l_uint32 color ); LEPT_DLL extern PIX * pixAddAlphaToBlend ( PIX *pixs, l_float32 fract, l_int32 invert ); LEPT_DLL extern PIX * pixSetAlphaOverWhite ( PIX *pixs ); LEPT_DLL extern l_ok pixLinearEdgeFade ( PIX *pixs, l_int32 dir, l_int32 fadeto, l_float32 distfract, l_float32 maxfade ); LEPT_DLL extern L_BMF * bmfCreate ( const char *dir, l_int32 fontsize ); LEPT_DLL extern void bmfDestroy ( L_BMF **pbmf ); LEPT_DLL extern PIX * bmfGetPix ( L_BMF *bmf, char chr ); LEPT_DLL extern l_ok bmfGetWidth ( L_BMF *bmf, char chr, l_int32 *pw ); LEPT_DLL extern l_ok bmfGetBaseline ( L_BMF *bmf, char chr, l_int32 *pbaseline ); LEPT_DLL extern PIXA * pixaGetFont ( const char *dir, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2 ); LEPT_DLL extern l_ok pixaSaveFont ( const char *indir, const char *outdir, l_int32 fontsize ); LEPT_DLL extern PIX * pixReadStreamBmp ( FILE *fp ); LEPT_DLL extern PIX * pixReadMemBmp ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_ok pixWriteStreamBmp ( FILE *fp, PIX *pix ); LEPT_DLL extern l_ok pixWriteMemBmp ( l_uint8 **pfdata, size_t *pfsize, PIX *pixs ); LEPT_DLL extern PIXA * l_bootnum_gen1 ( void ); LEPT_DLL extern PIXA * l_bootnum_gen2 ( void ); LEPT_DLL extern PIXA * l_bootnum_gen3 ( void ); LEPT_DLL extern PIXA * l_bootnum_gen4 ( l_int32 nsamp ); LEPT_DLL extern BOX * boxCreate ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern BOX * boxCreateValid ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern BOX * boxCopy ( BOX *box ); LEPT_DLL extern BOX * boxClone ( BOX *box ); LEPT_DLL extern void boxDestroy ( BOX **pbox ); LEPT_DLL extern l_ok boxGetGeometry ( const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok boxSetGeometry ( BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern l_ok boxGetSideLocations ( const BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb ); LEPT_DLL extern l_ok boxSetSideLocations ( BOX *box, l_int32 l, l_int32 r, l_int32 t, l_int32 b ); LEPT_DLL extern l_ok boxIsValid ( BOX *box, l_int32 *pvalid ); LEPT_DLL extern BOXA * boxaCreate ( l_int32 n ); LEPT_DLL extern BOXA * boxaCopy ( BOXA *boxa, l_int32 copyflag ); LEPT_DLL extern void boxaDestroy ( BOXA **pboxa ); LEPT_DLL extern l_ok boxaAddBox ( BOXA *boxa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_ok boxaExtendArray ( BOXA *boxa ); LEPT_DLL extern l_ok boxaExtendArrayToSize ( BOXA *boxa, size_t size ); LEPT_DLL extern l_int32 boxaGetCount ( const BOXA *boxa ); LEPT_DLL extern l_int32 boxaGetValidCount ( BOXA *boxa ); LEPT_DLL extern BOX * boxaGetBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern BOX * boxaGetValidBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern NUMA * boxaFindInvalidBoxes ( BOXA *boxa ); LEPT_DLL extern l_ok boxaGetBoxGeometry ( BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok boxaIsFull ( BOXA *boxa, l_int32 *pfull ); LEPT_DLL extern l_ok boxaReplaceBox ( BOXA *boxa, l_int32 index, BOX *box ); LEPT_DLL extern l_ok boxaInsertBox ( BOXA *boxa, l_int32 index, BOX *box ); LEPT_DLL extern l_ok boxaRemoveBox ( BOXA *boxa, l_int32 index ); LEPT_DLL extern l_ok boxaRemoveBoxAndSave ( BOXA *boxa, l_int32 index, BOX **pbox ); LEPT_DLL extern BOXA * boxaSaveValid ( BOXA *boxas, l_int32 copyflag ); LEPT_DLL extern l_ok boxaInitFull ( BOXA *boxa, BOX *box ); LEPT_DLL extern l_ok boxaClear ( BOXA *boxa ); LEPT_DLL extern BOXAA * boxaaCreate ( l_int32 n ); LEPT_DLL extern BOXAA * boxaaCopy ( BOXAA *baas, l_int32 copyflag ); LEPT_DLL extern void boxaaDestroy ( BOXAA **pbaa ); LEPT_DLL extern l_ok boxaaAddBoxa ( BOXAA *baa, BOXA *ba, l_int32 copyflag ); LEPT_DLL extern l_ok boxaaExtendArray ( BOXAA *baa ); LEPT_DLL extern l_ok boxaaExtendArrayToSize ( BOXAA *baa, l_int32 size ); LEPT_DLL extern l_int32 boxaaGetCount ( BOXAA *baa ); LEPT_DLL extern l_int32 boxaaGetBoxCount ( BOXAA *baa ); LEPT_DLL extern BOXA * boxaaGetBoxa ( BOXAA *baa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern BOX * boxaaGetBox ( BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag ); LEPT_DLL extern l_ok boxaaInitFull ( BOXAA *baa, BOXA *boxa ); LEPT_DLL extern l_ok boxaaExtendWithInit ( BOXAA *baa, l_int32 maxindex, BOXA *boxa ); LEPT_DLL extern l_ok boxaaReplaceBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); LEPT_DLL extern l_ok boxaaInsertBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); LEPT_DLL extern l_ok boxaaRemoveBoxa ( BOXAA *baa, l_int32 index ); LEPT_DLL extern l_ok boxaaAddBox ( BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag ); LEPT_DLL extern BOXAA * boxaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern BOXAA * boxaaRead ( const char *filename ); LEPT_DLL extern BOXAA * boxaaReadStream ( FILE *fp ); LEPT_DLL extern BOXAA * boxaaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok boxaaWrite ( const char *filename, BOXAA *baa ); LEPT_DLL extern l_ok boxaaWriteStream ( FILE *fp, BOXAA *baa ); LEPT_DLL extern l_ok boxaaWriteMem ( l_uint8 **pdata, size_t *psize, BOXAA *baa ); LEPT_DLL extern BOXA * boxaRead ( const char *filename ); LEPT_DLL extern BOXA * boxaReadStream ( FILE *fp ); LEPT_DLL extern BOXA * boxaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok boxaWriteDebug ( const char *filename, BOXA *boxa ); LEPT_DLL extern l_ok boxaWrite ( const char *filename, BOXA *boxa ); LEPT_DLL extern l_ok boxaWriteStream ( FILE *fp, BOXA *boxa ); LEPT_DLL extern l_ok boxaWriteStderr ( BOXA *boxa ); LEPT_DLL extern l_ok boxaWriteMem ( l_uint8 **pdata, size_t *psize, BOXA *boxa ); LEPT_DLL extern l_ok boxPrintStreamInfo ( FILE *fp, BOX *box ); LEPT_DLL extern l_ok boxContains ( BOX *box1, BOX *box2, l_int32 *presult ); LEPT_DLL extern l_ok boxIntersects ( BOX *box1, BOX *box2, l_int32 *presult ); LEPT_DLL extern BOXA * boxaContainedInBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern l_ok boxaContainedInBoxCount ( BOXA *boxa, BOX *box, l_int32 *pcount ); LEPT_DLL extern l_ok boxaContainedInBoxa ( BOXA *boxa1, BOXA *boxa2, l_int32 *pcontained ); LEPT_DLL extern BOXA * boxaIntersectsBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern l_ok boxaIntersectsBoxCount ( BOXA *boxa, BOX *box, l_int32 *pcount ); LEPT_DLL extern BOXA * boxaClipToBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern BOXA * boxaCombineOverlaps ( BOXA *boxas, PIXA *pixadb ); LEPT_DLL extern l_ok boxaCombineOverlapsInPair ( BOXA *boxas1, BOXA *boxas2, BOXA **pboxad1, BOXA **pboxad2, PIXA *pixadb ); LEPT_DLL extern BOX * boxOverlapRegion ( BOX *box1, BOX *box2 ); LEPT_DLL extern BOX * boxBoundingRegion ( BOX *box1, BOX *box2 ); LEPT_DLL extern l_ok boxOverlapFraction ( BOX *box1, BOX *box2, l_float32 *pfract ); LEPT_DLL extern l_ok boxOverlapArea ( BOX *box1, BOX *box2, l_int32 *parea ); LEPT_DLL extern BOXA * boxaHandleOverlaps ( BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap ); LEPT_DLL extern l_ok boxOverlapDistance ( BOX *box1, BOX *box2, l_int32 *ph_ovl, l_int32 *pv_ovl ); LEPT_DLL extern l_ok boxSeparationDistance ( BOX *box1, BOX *box2, l_int32 *ph_sep, l_int32 *pv_sep ); LEPT_DLL extern l_ok boxCompareSize ( BOX *box1, BOX *box2, l_int32 type, l_int32 *prel ); LEPT_DLL extern l_ok boxContainsPt ( BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains ); LEPT_DLL extern BOX * boxaGetNearestToPt ( BOXA *boxa, l_int32 x, l_int32 y ); LEPT_DLL extern BOX * boxaGetNearestToLine ( BOXA *boxa, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok boxaFindNearestBoxes ( BOXA *boxa, l_int32 dist_select, l_int32 range, NUMAA **pnaaindex, NUMAA **pnaadist ); LEPT_DLL extern l_ok boxaGetNearestByDirection ( BOXA *boxa, l_int32 i, l_int32 dir, l_int32 dist_select, l_int32 range, l_int32 *pindex, l_int32 *pdist ); LEPT_DLL extern l_ok boxGetCenter ( const BOX *box, l_float32 *pcx, l_float32 *pcy ); LEPT_DLL extern l_ok boxIntersectByLine ( const BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn ); LEPT_DLL extern BOX * boxClipToRectangle ( BOX *box, l_int32 wi, l_int32 hi ); LEPT_DLL extern l_ok boxClipToRectangleParams ( BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh ); LEPT_DLL extern BOX * boxRelocateOneSide ( BOX *boxd, BOX *boxs, l_int32 loc, l_int32 sideflag ); LEPT_DLL extern BOXA * boxaAdjustSides ( BOXA *boxas, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); LEPT_DLL extern l_ok boxaAdjustBoxSides ( BOXA *boxa, l_int32 index, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); LEPT_DLL extern BOX * boxAdjustSides ( BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); LEPT_DLL extern BOXA * boxaSetSide ( BOXA *boxad, BOXA *boxas, l_int32 side, l_int32 val, l_int32 thresh ); LEPT_DLL extern l_ok boxSetSide ( BOX *boxs, l_int32 side, l_int32 val, l_int32 thresh ); LEPT_DLL extern BOXA * boxaAdjustWidthToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); LEPT_DLL extern BOXA * boxaAdjustHeightToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); LEPT_DLL extern l_ok boxEqual ( BOX *box1, BOX *box2, l_int32 *psame ); LEPT_DLL extern l_ok boxaEqual ( BOXA *boxa1, BOXA *boxa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); LEPT_DLL extern l_ok boxSimilar ( BOX *box1, BOX *box2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 *psimilar ); LEPT_DLL extern l_ok boxaSimilar ( BOXA *boxa1, BOXA *boxa2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 debug, l_int32 *psimilar, NUMA **pnasim ); LEPT_DLL extern l_ok boxaJoin ( BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_ok boxaaJoin ( BOXAA *baad, BOXAA *baas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_ok boxaSplitEvenOdd ( BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao ); LEPT_DLL extern BOXA * boxaMergeEvenOdd ( BOXA *boxae, BOXA *boxao, l_int32 fillflag ); LEPT_DLL extern BOXA * boxaTransform ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOX * boxTransform ( BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOXA * boxaTransformOrdered ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); LEPT_DLL extern BOX * boxTransformOrdered ( BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); LEPT_DLL extern BOXA * boxaRotateOrth ( BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation ); LEPT_DLL extern BOX * boxRotateOrth ( BOX *box, l_int32 w, l_int32 h, l_int32 rotation ); LEPT_DLL extern BOXA * boxaShiftWithPta ( BOXA *boxas, PTA *pta, l_int32 dir ); LEPT_DLL extern BOXA * boxaSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern BOXA * boxaBinSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern BOXA * boxaSortByIndex ( BOXA *boxas, NUMA *naindex ); LEPT_DLL extern BOXAA * boxaSort2d ( BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1 ); LEPT_DLL extern BOXAA * boxaSort2dByIndex ( BOXA *boxas, NUMAA *naa ); LEPT_DLL extern l_ok boxaExtractAsNuma ( BOXA *boxa, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid ); LEPT_DLL extern l_ok boxaExtractAsPta ( BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, PTA **pptaw, PTA **pptah, l_int32 keepinvalid ); LEPT_DLL extern PTA * boxaExtractCorners ( BOXA *boxa, l_int32 loc ); LEPT_DLL extern l_ok boxaGetRankVals ( BOXA *boxa, l_float32 fract, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok boxaGetMedianVals ( BOXA *boxa, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok boxaGetAverageSize ( BOXA *boxa, l_float32 *pw, l_float32 *ph ); LEPT_DLL extern l_ok boxaaGetExtent ( BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa ); LEPT_DLL extern BOXA * boxaaFlattenToBoxa ( BOXAA *baa, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern BOXA * boxaaFlattenAligned ( BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag ); LEPT_DLL extern BOXAA * boxaEncapsulateAligned ( BOXA *boxa, l_int32 num, l_int32 copyflag ); LEPT_DLL extern BOXAA * boxaaTranspose ( BOXAA *baas ); LEPT_DLL extern l_ok boxaaAlignBox ( BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex ); LEPT_DLL extern PIX * pixMaskConnComp ( PIX *pixs, l_int32 connectivity, BOXA **pboxa ); LEPT_DLL extern PIX * pixMaskBoxa ( PIX *pixd, PIX *pixs, BOXA *boxa, l_int32 op ); LEPT_DLL extern PIX * pixPaintBoxa ( PIX *pixs, BOXA *boxa, l_uint32 val ); LEPT_DLL extern PIX * pixSetBlackOrWhiteBoxa ( PIX *pixs, BOXA *boxa, l_int32 op ); LEPT_DLL extern PIX * pixPaintBoxaRandom ( PIX *pixs, BOXA *boxa ); LEPT_DLL extern PIX * pixBlendBoxaRandom ( PIX *pixs, BOXA *boxa, l_float32 fract ); LEPT_DLL extern PIX * pixDrawBoxa ( PIX *pixs, BOXA *boxa, l_int32 width, l_uint32 val ); LEPT_DLL extern PIX * pixDrawBoxaRandom ( PIX *pixs, BOXA *boxa, l_int32 width ); LEPT_DLL extern PIX * boxaaDisplay ( PIX *pixs, BOXAA *baa, l_int32 linewba, l_int32 linewb, l_uint32 colorba, l_uint32 colorb, l_int32 w, l_int32 h ); LEPT_DLL extern PIXA * pixaDisplayBoxaa ( PIXA *pixas, BOXAA *baa, l_int32 colorflag, l_int32 width ); LEPT_DLL extern BOXA * pixSplitIntoBoxa ( PIX *pixs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); LEPT_DLL extern BOXA * pixSplitComponentIntoBoxa ( PIX *pix, BOX *box, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); LEPT_DLL extern BOXA * makeMosaicStrips ( l_int32 w, l_int32 h, l_int32 direction, l_int32 size ); LEPT_DLL extern l_ok boxaCompareRegions ( BOXA *boxa1, BOXA *boxa2, l_int32 areathresh, l_int32 *pnsame, l_float32 *pdiffarea, l_float32 *pdiffxor, PIX **ppixdb ); LEPT_DLL extern BOX * pixSelectLargeULComp ( PIX *pixs, l_float32 areaslop, l_int32 yslop, l_int32 connectivity ); LEPT_DLL extern BOX * boxaSelectLargeULBox ( BOXA *boxas, l_float32 areaslop, l_int32 yslop ); LEPT_DLL extern BOXA * boxaSelectRange ( BOXA *boxas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern BOXAA * boxaaSelectRange ( BOXAA *baas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern BOXA * boxaSelectBySize ( BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * boxaMakeSizeIndicator ( BOXA *boxa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); LEPT_DLL extern BOXA * boxaSelectByArea ( BOXA *boxas, l_int32 area, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * boxaMakeAreaIndicator ( BOXA *boxa, l_int32 area, l_int32 relation ); LEPT_DLL extern BOXA * boxaSelectByWHRatio ( BOXA *boxas, l_float32 ratio, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * boxaMakeWHRatioIndicator ( BOXA *boxa, l_float32 ratio, l_int32 relation ); LEPT_DLL extern BOXA * boxaSelectWithIndicator ( BOXA *boxas, NUMA *na, l_int32 *pchanged ); LEPT_DLL extern BOXA * boxaPermutePseudorandom ( BOXA *boxas ); LEPT_DLL extern BOXA * boxaPermuteRandom ( BOXA *boxad, BOXA *boxas ); LEPT_DLL extern l_ok boxaSwapBoxes ( BOXA *boxa, l_int32 i, l_int32 j ); LEPT_DLL extern PTA * boxaConvertToPta ( BOXA *boxa, l_int32 ncorners ); LEPT_DLL extern BOXA * ptaConvertToBoxa ( PTA *pta, l_int32 ncorners ); LEPT_DLL extern PTA * boxConvertToPta ( BOX *box, l_int32 ncorners ); LEPT_DLL extern BOX * ptaConvertToBox ( PTA *pta ); LEPT_DLL extern l_ok boxaGetExtent ( BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox ); LEPT_DLL extern l_ok boxaGetCoverage ( BOXA *boxa, l_int32 wc, l_int32 hc, l_int32 exactflag, l_float32 *pfract ); LEPT_DLL extern l_ok boxaaSizeRange ( BOXAA *baa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_ok boxaSizeRange ( BOXA *boxa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_ok boxaLocationRange ( BOXA *boxa, l_int32 *pminx, l_int32 *pminy, l_int32 *pmaxx, l_int32 *pmaxy ); LEPT_DLL extern l_ok boxaGetSizes ( BOXA *boxa, NUMA **pnaw, NUMA **pnah ); LEPT_DLL extern l_ok boxaGetArea ( BOXA *boxa, l_int32 *parea ); LEPT_DLL extern PIX * boxaDisplayTiled ( BOXA *boxas, PIXA *pixa, l_int32 first, l_int32 last, l_int32 maxwidth, l_int32 linewidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern BOXA * boxaSmoothSequenceMedian ( BOXA *boxas, l_int32 halfwin, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug ); LEPT_DLL extern BOXA * boxaWindowedMedian ( BOXA *boxas, l_int32 halfwin, l_int32 debug ); LEPT_DLL extern BOXA * boxaModifyWithBoxa ( BOXA *boxas, BOXA *boxam, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels ); LEPT_DLL extern BOXA * boxaReconcilePairWidth ( BOXA *boxas, l_int32 delw, l_int32 op, l_float32 factor, NUMA *na ); LEPT_DLL extern l_ok boxaSizeConsistency ( BOXA *boxas, l_int32 type, l_float32 threshp, l_float32 threshm, l_float32 *pfvarp, l_float32 *pfvarm, l_int32 *psame ); LEPT_DLL extern BOXA * boxaReconcileAllByMedian ( BOXA *boxas, l_int32 select1, l_int32 select2, l_int32 thresh, l_int32 extra, PIXA *pixadb ); LEPT_DLL extern BOXA * boxaReconcileSidesByMedian ( BOXA *boxas, l_int32 select, l_int32 thresh, l_int32 extra, PIXA *pixadb ); LEPT_DLL extern BOXA * boxaReconcileSizeByMedian ( BOXA *boxas, l_int32 type, l_float32 dfract, l_float32 sfract, l_float32 factor, NUMA **pnadelw, NUMA **pnadelh, l_float32 *pratiowh ); LEPT_DLL extern l_ok boxaPlotSides ( BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, PIX **ppixd ); LEPT_DLL extern l_ok boxaPlotSizes ( BOXA *boxa, const char *plotname, NUMA **pnaw, NUMA **pnah, PIX **ppixd ); LEPT_DLL extern BOXA * boxaFillSequence ( BOXA *boxas, l_int32 useflag, l_int32 debug ); LEPT_DLL extern l_ok boxaSizeVariation ( BOXA *boxa, l_int32 type, l_float32 *pdel_evenodd, l_float32 *prms_even, l_float32 *prms_odd, l_float32 *prms_all ); LEPT_DLL extern l_ok boxaMedianDimensions ( BOXA *boxas, l_int32 *pmedw, l_int32 *pmedh, l_int32 *pmedwe, l_int32 *pmedwo, l_int32 *pmedhe, l_int32 *pmedho, NUMA **pnadelw, NUMA **pnadelh ); LEPT_DLL extern L_BYTEA * l_byteaCreate ( size_t nbytes ); LEPT_DLL extern L_BYTEA * l_byteaInitFromMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern L_BYTEA * l_byteaInitFromFile ( const char *fname ); LEPT_DLL extern L_BYTEA * l_byteaInitFromStream ( FILE *fp ); LEPT_DLL extern L_BYTEA * l_byteaCopy ( L_BYTEA *bas, l_int32 copyflag ); LEPT_DLL extern void l_byteaDestroy ( L_BYTEA **pba ); LEPT_DLL extern size_t l_byteaGetSize ( L_BYTEA *ba ); LEPT_DLL extern l_uint8 * l_byteaGetData ( L_BYTEA *ba, size_t *psize ); LEPT_DLL extern l_uint8 * l_byteaCopyData ( L_BYTEA *ba, size_t *psize ); LEPT_DLL extern l_ok l_byteaAppendData ( L_BYTEA *ba, const l_uint8 *newdata, size_t newbytes ); LEPT_DLL extern l_ok l_byteaAppendString ( L_BYTEA *ba, const char *str ); LEPT_DLL extern l_ok l_byteaJoin ( L_BYTEA *ba1, L_BYTEA **pba2 ); LEPT_DLL extern l_ok l_byteaSplit ( L_BYTEA *ba1, size_t splitloc, L_BYTEA **pba2 ); LEPT_DLL extern l_ok l_byteaFindEachSequence ( L_BYTEA *ba, const l_uint8 *sequence, size_t seqlen, L_DNA **pda ); LEPT_DLL extern l_ok l_byteaWrite ( const char *fname, L_BYTEA *ba, size_t startloc, size_t nbytes ); LEPT_DLL extern l_ok l_byteaWriteStream ( FILE *fp, L_BYTEA *ba, size_t startloc, size_t nbytes ); LEPT_DLL extern void ccbaDestroy ( CCBORDA **pccba ); LEPT_DLL extern CCBORDA * pixGetAllCCBorders ( PIX *pixs ); LEPT_DLL extern PTAA * pixGetOuterBordersPtaa ( PIX *pixs ); LEPT_DLL extern l_ok pixGetOuterBorder ( CCBORD *ccb, PIX *pixs, BOX *box ); LEPT_DLL extern l_ok ccbaGenerateGlobalLocs ( CCBORDA *ccba ); LEPT_DLL extern l_ok ccbaGenerateStepChains ( CCBORDA *ccba ); LEPT_DLL extern l_ok ccbaStepChainsToPixCoords ( CCBORDA *ccba, l_int32 coordtype ); LEPT_DLL extern l_ok ccbaGenerateSPGlobalLocs ( CCBORDA *ccba, l_int32 ptsflag ); LEPT_DLL extern l_ok ccbaGenerateSinglePath ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplayBorder ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplaySPBorder ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplayImage1 ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplayImage2 ( CCBORDA *ccba ); LEPT_DLL extern l_ok ccbaWrite ( const char *filename, CCBORDA *ccba ); LEPT_DLL extern l_ok ccbaWriteStream ( FILE *fp, CCBORDA *ccba ); LEPT_DLL extern CCBORDA * ccbaRead ( const char *filename ); LEPT_DLL extern CCBORDA * ccbaReadStream ( FILE *fp ); LEPT_DLL extern l_ok ccbaWriteSVG ( const char *filename, CCBORDA *ccba ); LEPT_DLL extern char * ccbaWriteSVGString ( CCBORDA *ccba ); LEPT_DLL extern PIXA * pixaThinConnected ( PIXA *pixas, l_int32 type, l_int32 connectivity, l_int32 maxiters ); LEPT_DLL extern PIX * pixThinConnected ( PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters ); LEPT_DLL extern PIX * pixThinConnectedBySet ( PIX *pixs, l_int32 type, SELA *sela, l_int32 maxiters ); LEPT_DLL extern SELA * selaMakeThinSets ( l_int32 index, l_int32 debug ); LEPT_DLL extern l_ok pixFindCheckerboardCorners ( PIX *pixs, l_int32 size, l_int32 dilation, l_int32 nsels, PIX **ppix_corners, PTA **ppta_corners, PIXA *pixadb ); LEPT_DLL extern l_ok jbCorrelation ( const char *dirin, l_float32 thresh, l_float32 weight, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); LEPT_DLL extern l_ok jbRankHaus ( const char *dirin, l_int32 size, l_float32 rank, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); LEPT_DLL extern JBCLASSER * jbWordsInTextlines ( const char *dirin, l_int32 reduction, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weight, NUMA **pnatl, l_int32 firstpage, l_int32 npages ); LEPT_DLL extern l_ok pixGetWordsInTextlines ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad, NUMA **pnai ); LEPT_DLL extern l_ok pixGetWordBoxesInTextlines ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, NUMA **pnai ); LEPT_DLL extern l_ok pixFindWordAndCharacterBoxes ( PIX *pixs, BOX *boxs, l_int32 thresh, BOXA **pboxaw, BOXAA **pboxaac, const char *debugdir ); LEPT_DLL extern NUMAA * boxaExtractSortedPattern ( BOXA *boxa, NUMA *na ); LEPT_DLL extern l_ok numaaCompareImagesByBoxes ( NUMAA *naa1, NUMAA *naa2, l_int32 nperline, l_int32 nreq, l_int32 maxshiftx, l_int32 maxshifty, l_int32 delx, l_int32 dely, l_int32 *psame, l_int32 debugflag ); LEPT_DLL extern l_ok pixColorContent ( PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 mingray, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern PIX * pixColorMagnitude ( PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 type ); LEPT_DLL extern l_ok pixColorFraction ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_int32 factor, l_float32 *ppixfract, l_float32 *pcolorfract ); LEPT_DLL extern PIX * pixColorShiftWhitePoint ( PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref ); LEPT_DLL extern PIX * pixMaskOverColorPixels ( PIX *pixs, l_int32 threshdiff, l_int32 mindist ); LEPT_DLL extern PIX * pixMaskOverGrayPixels ( PIX *pixs, l_int32 maxlimit, l_int32 satlimit ); LEPT_DLL extern PIX * pixMaskOverColorRange ( PIX *pixs, l_int32 rmin, l_int32 rmax, l_int32 gmin, l_int32 gmax, l_int32 bmin, l_int32 bmax ); LEPT_DLL extern l_ok pixFindColorRegions ( PIX *pixs, PIX *pixm, l_int32 factor, l_int32 lightthresh, l_int32 darkthresh, l_int32 mindiff, l_int32 colordiff, l_float32 edgefract, l_float32 *pcolorfract, PIX **pcolormask1, PIX **pcolormask2, PIXA *pixadb ); LEPT_DLL extern l_ok pixNumSignificantGrayColors ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_float32 minfract, l_int32 factor, l_int32 *pncolors ); LEPT_DLL extern l_ok pixColorsForQuantization ( PIX *pixs, l_int32 thresh, l_int32 *pncolors, l_int32 *piscolor, l_int32 debug ); LEPT_DLL extern l_ok pixNumColors ( PIX *pixs, l_int32 factor, l_int32 *pncolors ); LEPT_DLL extern PIX * pixConvertRGBToCmapLossless ( PIX *pixs ); LEPT_DLL extern l_ok pixGetMostPopulatedColors ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors, l_uint32 **parray, PIXCMAP **pcmap ); LEPT_DLL extern PIX * pixSimpleColorQuantize ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors ); LEPT_DLL extern NUMA * pixGetRGBHistogram ( PIX *pixs, l_int32 sigbits, l_int32 factor ); LEPT_DLL extern l_ok makeRGBIndexTables ( l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 sigbits ); LEPT_DLL extern l_ok getRGBFromIndex ( l_uint32 index, l_int32 sigbits, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_ok pixHasHighlightRed ( PIX *pixs, l_int32 factor, l_float32 minfract, l_float32 fthresh, l_int32 *phasred, l_float32 *pratio, PIX **ppixdb ); LEPT_DLL extern L_COLORFILL * l_colorfillCreate ( PIX *pixs, l_int32 nx, l_int32 ny ); LEPT_DLL extern void l_colorfillDestroy ( L_COLORFILL **pcf ); LEPT_DLL extern l_ok pixColorContentByLocation ( L_COLORFILL *cf, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 minmax, l_int32 maxdiff, l_int32 minarea, l_int32 smooth, l_int32 debug ); LEPT_DLL extern PIX * pixColorFill ( PIX *pixs, l_int32 minmax, l_int32 maxdiff, l_int32 smooth, l_int32 minarea, l_int32 debug ); LEPT_DLL extern PIXA * makeColorfillTestData ( l_int32 w, l_int32 h, l_int32 nseeds, l_int32 range ); LEPT_DLL extern PIX * pixColorGrayRegions ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixColorGray ( PIX *pixs, BOX *box, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern PIX * pixColorGrayMasked ( PIX *pixs, PIX *pixm, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern PIX * pixSnapColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); LEPT_DLL extern PIX * pixSnapColorCmap ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); LEPT_DLL extern PIX * pixLinearMapToTargetColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern l_ok pixelLinearMapToTargetColor ( l_uint32 scolor, l_uint32 srcmap, l_uint32 dstmap, l_uint32 *pdcolor ); LEPT_DLL extern PIX * pixShiftByComponent ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern l_ok pixelShiftByComponent ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel ); LEPT_DLL extern l_ok pixelFractionalShift ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract, l_uint32 *ppixel ); LEPT_DLL extern PIX * pixMapWithInvariantHue ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_float32 fract ); LEPT_DLL extern PIXCMAP * pixcmapCreate ( l_int32 depth ); LEPT_DLL extern PIXCMAP * pixcmapCreateRandom ( l_int32 depth, l_int32 hasblack, l_int32 haswhite ); LEPT_DLL extern PIXCMAP * pixcmapCreateLinear ( l_int32 d, l_int32 nlevels ); LEPT_DLL extern PIXCMAP * pixcmapCopy ( const PIXCMAP *cmaps ); LEPT_DLL extern void pixcmapDestroy ( PIXCMAP **pcmap ); LEPT_DLL extern l_ok pixcmapIsValid ( const PIXCMAP *cmap, PIX *pix, l_int32 *pvalid ); LEPT_DLL extern l_ok pixcmapAddColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixcmapAddRGBA ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval ); LEPT_DLL extern l_ok pixcmapAddNewColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapAddNearestColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapUsableColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable ); LEPT_DLL extern l_ok pixcmapAddBlackOrWhite ( PIXCMAP *cmap, l_int32 color, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapSetBlackAndWhite ( PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite ); LEPT_DLL extern l_int32 pixcmapGetCount ( const PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetFreeCount ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetDepth ( PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapGetMinDepth ( PIXCMAP *cmap, l_int32 *pmindepth ); LEPT_DLL extern l_ok pixcmapClear ( PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapGetColor ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_ok pixcmapGetColor32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); LEPT_DLL extern l_ok pixcmapGetRGBA ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); LEPT_DLL extern l_ok pixcmapGetRGBA32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); LEPT_DLL extern l_ok pixcmapResetColor ( PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixcmapSetAlpha ( PIXCMAP *cmap, l_int32 index, l_int32 aval ); LEPT_DLL extern l_int32 pixcmapGetIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapHasColor ( PIXCMAP *cmap, l_int32 *pcolor ); LEPT_DLL extern l_ok pixcmapIsOpaque ( PIXCMAP *cmap, l_int32 *popaque ); LEPT_DLL extern l_ok pixcmapNonOpaqueColorsInfo ( PIXCMAP *cmap, l_int32 *pntrans, l_int32 *pmax_trans, l_int32 *pmin_opaque ); LEPT_DLL extern l_ok pixcmapIsBlackAndWhite ( PIXCMAP *cmap, l_int32 *pblackwhite ); LEPT_DLL extern l_ok pixcmapCountGrayColors ( PIXCMAP *cmap, l_int32 *pngray ); LEPT_DLL extern l_ok pixcmapGetRankIntensity ( PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapGetNearestIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapGetNearestGrayIndex ( PIXCMAP *cmap, l_int32 val, l_int32 *pindex ); LEPT_DLL extern l_ok pixcmapGetDistanceToColor ( PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pdist ); LEPT_DLL extern l_ok pixcmapGetRangeValues ( PIXCMAP *cmap, l_int32 select, l_int32 *pminval, l_int32 *pmaxval, l_int32 *pminindex, l_int32 *pmaxindex ); LEPT_DLL extern PIXCMAP * pixcmapGrayToFalseColor ( l_float32 gamma ); LEPT_DLL extern PIXCMAP * pixcmapGrayToColor ( l_uint32 color ); LEPT_DLL extern PIXCMAP * pixcmapColorToGray ( PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIXCMAP * pixcmapConvertTo4 ( PIXCMAP *cmaps ); LEPT_DLL extern PIXCMAP * pixcmapConvertTo8 ( PIXCMAP *cmaps ); LEPT_DLL extern PIXCMAP * pixcmapRead ( const char *filename ); LEPT_DLL extern PIXCMAP * pixcmapReadStream ( FILE *fp ); LEPT_DLL extern PIXCMAP * pixcmapReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixcmapWrite ( const char *filename, const PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapWriteStream ( FILE *fp, const PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapWriteMem ( l_uint8 **pdata, size_t *psize, const PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapToArrays ( const PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap ); LEPT_DLL extern l_ok pixcmapToRGBTable ( PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors ); LEPT_DLL extern l_ok pixcmapSerializeToMemory ( PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata ); LEPT_DLL extern PIXCMAP * pixcmapDeserializeFromMemory ( l_uint8 *data, l_int32 cpc, l_int32 ncolors ); LEPT_DLL extern char * pixcmapConvertToHex ( l_uint8 *data, l_int32 ncolors ); LEPT_DLL extern l_ok pixcmapGammaTRC ( PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern l_ok pixcmapContrastTRC ( PIXCMAP *cmap, l_float32 factor ); LEPT_DLL extern l_ok pixcmapShiftIntensity ( PIXCMAP *cmap, l_float32 fraction ); LEPT_DLL extern l_ok pixcmapShiftByComponent ( PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern PIX * pixColorMorph ( PIX *pixs, l_int32 type, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOctreeColorQuant ( PIX *pixs, l_int32 colors, l_int32 ditherflag ); LEPT_DLL extern PIX * pixOctreeColorQuantGeneral ( PIX *pixs, l_int32 colors, l_int32 ditherflag, l_float32 validthresh, l_float32 colorthresh ); LEPT_DLL extern l_ok makeRGBToIndexTables ( l_int32 cqlevels, l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab ); LEPT_DLL extern void getOctcubeIndexFromRGB ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_uint32 *pindex ); LEPT_DLL extern PIX * pixOctreeQuantByPopulation ( PIX *pixs, l_int32 level, l_int32 ditherflag ); LEPT_DLL extern PIX * pixOctreeQuantNumColors ( PIX *pixs, l_int32 maxcolors, l_int32 subsample ); LEPT_DLL extern PIX * pixOctcubeQuantMixedWithGray ( PIX *pixs, l_int32 depth, l_int32 graylevels, l_int32 delta ); LEPT_DLL extern PIX * pixFixedOctcubeQuant256 ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuant1 ( PIX *pixs, l_int32 level ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuant2 ( PIX *pixs, l_int32 level, NUMA *na, l_int32 ncolors, l_int32 *pnerrors ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuantMixed ( PIX *pixs, l_int32 level, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_float32 minfract, l_int32 maxspan ); LEPT_DLL extern PIX * pixFixedOctcubeQuantGenRGB ( PIX *pixs, l_int32 level ); LEPT_DLL extern PIX * pixQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); LEPT_DLL extern PIX * pixOctcubeQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); LEPT_DLL extern NUMA * pixOctcubeHistogram ( PIX *pixs, l_int32 level, l_int32 *pncolors ); LEPT_DLL extern l_int32 * pixcmapToOctcubeLUT ( PIXCMAP *cmap, l_int32 level, l_int32 metric ); LEPT_DLL extern l_ok pixRemoveUnusedColors ( PIX *pixs ); LEPT_DLL extern l_ok pixNumberOccupiedOctcubes ( PIX *pix, l_int32 level, l_int32 mincount, l_float32 minfract, l_int32 *pncolors ); LEPT_DLL extern PIX * pixMedianCutQuant ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern PIX * pixMedianCutQuantGeneral ( PIX *pixs, l_int32 ditherflag, l_int32 outdepth, l_int32 maxcolors, l_int32 sigbits, l_int32 maxsub, l_int32 checkbw ); LEPT_DLL extern PIX * pixMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); LEPT_DLL extern PIX * pixFewColorsMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 maxncolors, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); LEPT_DLL extern l_int32 * pixMedianCutHisto ( PIX *pixs, l_int32 sigbits, l_int32 subsample ); LEPT_DLL extern PIX * pixColorSegment ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 selsize, l_int32 finalcolors, l_int32 debugflag ); LEPT_DLL extern PIX * pixColorSegmentCluster ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 debugflag ); LEPT_DLL extern l_ok pixAssignToNearestColor ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 level, l_int32 *countarray ); LEPT_DLL extern l_ok pixColorSegmentClean ( PIX *pixs, l_int32 selsize, l_int32 *countarray ); LEPT_DLL extern l_ok pixColorSegmentRemoveColors ( PIX *pixd, PIX *pixs, l_int32 finalcolors ); LEPT_DLL extern PIX * pixConvertRGBToHSV ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixConvertHSVToRGB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_ok convertRGBToHSV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *phval, l_int32 *psval, l_int32 *pvval ); LEPT_DLL extern l_ok convertHSVToRGB ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_ok pixcmapConvertRGBToHSV ( PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapConvertHSVToRGB ( PIXCMAP *cmap ); LEPT_DLL extern PIX * pixConvertRGBToHue ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToSaturation ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToValue ( PIX *pixs ); LEPT_DLL extern PIX * pixMakeRangeMaskHS ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 satcenter, l_int32 sathw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeRangeMaskHV ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeRangeMaskSV ( PIX *pixs, l_int32 satcenter, l_int32 sathw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeHistoHS ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnasat ); LEPT_DLL extern PIX * pixMakeHistoHV ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnaval ); LEPT_DLL extern PIX * pixMakeHistoSV ( PIX *pixs, l_int32 factor, NUMA **pnasat, NUMA **pnaval ); LEPT_DLL extern l_ok pixFindHistoPeaksHSV ( PIX *pixs, l_int32 type, l_int32 width, l_int32 height, l_int32 npeaks, l_float32 erasefactor, PTA **ppta, NUMA **pnatot, PIXA **ppixa ); LEPT_DLL extern PIX * displayHSVColorRange ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 huehw, l_int32 sathw, l_int32 nsamp, l_int32 factor ); LEPT_DLL extern PIX * pixConvertRGBToYUV ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixConvertYUVToRGB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_ok convertRGBToYUV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pyval, l_int32 *puval, l_int32 *pvval ); LEPT_DLL extern l_ok convertYUVToRGB ( l_int32 yval, l_int32 uval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_ok pixcmapConvertRGBToYUV ( PIXCMAP *cmap ); LEPT_DLL extern l_ok pixcmapConvertYUVToRGB ( PIXCMAP *cmap ); LEPT_DLL extern FPIXA * pixConvertRGBToXYZ ( PIX *pixs ); LEPT_DLL extern PIX * fpixaConvertXYZToRGB ( FPIXA *fpixa ); LEPT_DLL extern l_ok convertRGBToXYZ ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pfxval, l_float32 *pfyval, l_float32 *pfzval ); LEPT_DLL extern l_ok convertXYZToRGB ( l_float32 fxval, l_float32 fyval, l_float32 fzval, l_int32 blackout, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern FPIXA * fpixaConvertXYZToLAB ( FPIXA *fpixas ); LEPT_DLL extern FPIXA * fpixaConvertLABToXYZ ( FPIXA *fpixas ); LEPT_DLL extern l_ok convertXYZToLAB ( l_float32 xval, l_float32 yval, l_float32 zval, l_float32 *plval, l_float32 *paval, l_float32 *pbval ); LEPT_DLL extern l_ok convertLABToXYZ ( l_float32 lval, l_float32 aval, l_float32 bval, l_float32 *pxval, l_float32 *pyval, l_float32 *pzval ); LEPT_DLL extern FPIXA * pixConvertRGBToLAB ( PIX *pixs ); LEPT_DLL extern PIX * fpixaConvertLABToRGB ( FPIXA *fpixa ); LEPT_DLL extern l_ok convertRGBToLAB ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pflval, l_float32 *pfaval, l_float32 *pfbval ); LEPT_DLL extern l_ok convertLABToRGB ( l_float32 flval, l_float32 faval, l_float32 fbval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern PIX * pixMakeGamutRGB ( l_int32 scale ); LEPT_DLL extern l_ok pixEqual ( PIX *pix1, PIX *pix2, l_int32 *psame ); LEPT_DLL extern l_ok pixEqualWithAlpha ( PIX *pix1, PIX *pix2, l_int32 use_alpha, l_int32 *psame ); LEPT_DLL extern l_ok pixEqualWithCmap ( PIX *pix1, PIX *pix2, l_int32 *psame ); LEPT_DLL extern l_ok cmapEqual ( PIXCMAP *cmap1, PIXCMAP *cmap2, l_int32 ncomps, l_int32 *psame ); LEPT_DLL extern l_ok pixUsesCmapColor ( PIX *pixs, l_int32 *pcolor ); LEPT_DLL extern l_ok pixCorrelationBinary ( PIX *pix1, PIX *pix2, l_float32 *pval ); LEPT_DLL extern PIX * pixDisplayDiff ( PIX *pix1, PIX *pix2, l_int32 showall, l_int32 mindiff, l_uint32 diffcolor ); LEPT_DLL extern PIX * pixDisplayDiffBinary ( PIX *pix1, PIX *pix2 ); LEPT_DLL extern l_ok pixCompareBinary ( PIX *pix1, PIX *pix2, l_int32 comptype, l_float32 *pfract, PIX **ppixdiff ); LEPT_DLL extern l_ok pixCompareGrayOrRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_ok pixCompareGray ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_ok pixCompareRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_ok pixCompareTiled ( PIX *pix1, PIX *pix2, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixdiff ); LEPT_DLL extern NUMA * pixCompareRankDifference ( PIX *pix1, PIX *pix2, l_int32 factor ); LEPT_DLL extern l_ok pixTestForSimilarity ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 details ); LEPT_DLL extern l_ok pixGetDifferenceStats ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 *pfractdiff, l_float32 *pavediff, l_int32 details ); LEPT_DLL extern NUMA * pixGetDifferenceHistogram ( PIX *pix1, PIX *pix2, l_int32 factor ); LEPT_DLL extern l_ok pixGetPerceptualDiff ( PIX *pixs1, PIX *pixs2, l_int32 sampling, l_int32 dilation, l_int32 mindiff, l_float32 *pfract, PIX **ppixdiff1, PIX **ppixdiff2 ); LEPT_DLL extern l_ok pixGetPSNR ( PIX *pix1, PIX *pix2, l_int32 factor, l_float32 *ppsnr ); LEPT_DLL extern l_ok pixaComparePhotoRegionsByHisto ( PIXA *pixa, l_float32 minratio, l_float32 textthresh, l_int32 factor, l_int32 n, l_float32 simthresh, NUMA **pnai, l_float32 **pscores, PIX **ppixd, l_int32 debug ); LEPT_DLL extern l_ok pixComparePhotoRegionsByHisto ( PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern l_ok pixGenPhotoHistos ( PIX *pixs, BOX *box, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, l_int32 *pw, l_int32 *ph, l_int32 debugindex ); LEPT_DLL extern PIX * pixPadToCenterCentroid ( PIX *pixs, l_int32 factor ); LEPT_DLL extern l_ok pixCentroid8 ( PIX *pixs, l_int32 factor, l_float32 *pcx, l_float32 *pcy ); LEPT_DLL extern l_ok pixDecideIfPhotoImage ( PIX *pix, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, PIXA *pixadebug ); LEPT_DLL extern l_ok compareTilesByHisto ( NUMAA *naa1, NUMAA *naa2, l_float32 minratio, l_int32 w1, l_int32 h1, l_int32 w2, l_int32 h2, l_float32 *pscore, PIXA *pixadebug ); LEPT_DLL extern l_ok pixCompareGrayByHisto ( PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 maxgray, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern l_ok pixCropAlignedToCentroid ( PIX *pix1, PIX *pix2, l_int32 factor, BOX **pbox1, BOX **pbox2 ); LEPT_DLL extern l_uint8 * l_compressGrayHistograms ( NUMAA *naa, l_int32 w, l_int32 h, size_t *psize ); LEPT_DLL extern NUMAA * l_uncompressGrayHistograms ( l_uint8 *bytea, size_t size, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok pixCompareWithTranslation ( PIX *pix1, PIX *pix2, l_int32 thresh, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern l_ok pixBestCorrelation ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 etransx, l_int32 etransy, l_int32 maxshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern BOXA * pixConnComp ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); LEPT_DLL extern BOXA * pixConnCompPixa ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); LEPT_DLL extern BOXA * pixConnCompBB ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern l_ok pixCountConnComp ( PIX *pixs, l_int32 connectivity, l_int32 *pcount ); LEPT_DLL extern l_int32 nextOnPixelInRaster ( PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py ); LEPT_DLL extern BOX * pixSeedfillBB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); LEPT_DLL extern BOX * pixSeedfill4BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern BOX * pixSeedfill8BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixSeedfill ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); LEPT_DLL extern l_ok pixSeedfill4 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixSeedfill8 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok convertFilesTo1bpp ( const char *dirin, const char *substr, l_int32 upscaling, l_int32 thresh, l_int32 firstpage, l_int32 npages, const char *dirout, l_int32 outformat ); LEPT_DLL extern PIX * pixBlockconv ( PIX *pix, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvGray ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvAccum ( PIX *pixs ); LEPT_DLL extern PIX * pixBlockconvGrayUnnormalized ( PIX *pixs, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvTiled ( PIX *pix, l_int32 wc, l_int32 hc, l_int32 nx, l_int32 ny ); LEPT_DLL extern PIX * pixBlockconvGrayTile ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern l_ok pixWindowedStats ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, PIX **ppixm, PIX **ppixms, FPIX **pfpixv, FPIX **pfpixrv ); LEPT_DLL extern PIX * pixWindowedMean ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, l_int32 normflag ); LEPT_DLL extern PIX * pixWindowedMeanSquare ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder ); LEPT_DLL extern l_ok pixWindowedVariance ( PIX *pixm, PIX *pixms, FPIX **pfpixv, FPIX **pfpixrv ); LEPT_DLL extern DPIX * pixMeanSquareAccum ( PIX *pixs ); LEPT_DLL extern PIX * pixBlockrank ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc, l_float32 rank ); LEPT_DLL extern PIX * pixBlocksum ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixCensusTransform ( PIX *pixs, l_int32 halfsize, PIX *pixacc ); LEPT_DLL extern PIX * pixConvolve ( PIX *pixs, L_KERNEL *kel, l_int32 outdepth, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 outdepth, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveRGB ( PIX *pixs, L_KERNEL *kel ); LEPT_DLL extern PIX * pixConvolveRGBSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely ); LEPT_DLL extern FPIX * fpixConvolve ( FPIX *fpixs, L_KERNEL *kel, l_int32 normflag ); LEPT_DLL extern FPIX * fpixConvolveSep ( FPIX *fpixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveWithBias ( PIX *pixs, L_KERNEL *kel1, L_KERNEL *kel2, l_int32 force8, l_int32 *pbias ); LEPT_DLL extern void l_setConvolveSampling ( l_int32 xfact, l_int32 yfact ); LEPT_DLL extern PIX * pixAddGaussianNoise ( PIX *pixs, l_float32 stdev ); LEPT_DLL extern l_float32 gaussDistribSampling ( void ); LEPT_DLL extern l_ok pixCorrelationScore ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern l_int32 pixCorrelationScoreThresholded ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_int32 *downcount, l_float32 score_threshold ); LEPT_DLL extern l_ok pixCorrelationScoreSimple ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern l_ok pixCorrelationScoreShifted ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 delx, l_int32 dely, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern L_DEWARP * dewarpCreate ( PIX *pixs, l_int32 pageno ); LEPT_DLL extern L_DEWARP * dewarpCreateRef ( l_int32 pageno, l_int32 refpage ); LEPT_DLL extern void dewarpDestroy ( L_DEWARP **pdew ); LEPT_DLL extern L_DEWARPA * dewarpaCreate ( l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist ); LEPT_DLL extern L_DEWARPA * dewarpaCreateFromPixacomp ( PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist ); LEPT_DLL extern void dewarpaDestroy ( L_DEWARPA **pdewa ); LEPT_DLL extern l_ok dewarpaDestroyDewarp ( L_DEWARPA *dewa, l_int32 pageno ); LEPT_DLL extern l_ok dewarpaInsertDewarp ( L_DEWARPA *dewa, L_DEWARP *dew ); LEPT_DLL extern L_DEWARP * dewarpaGetDewarp ( L_DEWARPA *dewa, l_int32 index ); LEPT_DLL extern l_ok dewarpaSetCurvatures ( L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv, l_int32 max_edgeslope ); LEPT_DLL extern l_ok dewarpaUseBothArrays ( L_DEWARPA *dewa, l_int32 useboth ); LEPT_DLL extern l_ok dewarpaSetCheckColumns ( L_DEWARPA *dewa, l_int32 check_columns ); LEPT_DLL extern l_ok dewarpaSetMaxDistance ( L_DEWARPA *dewa, l_int32 maxdist ); LEPT_DLL extern L_DEWARP * dewarpRead ( const char *filename ); LEPT_DLL extern L_DEWARP * dewarpReadStream ( FILE *fp ); LEPT_DLL extern L_DEWARP * dewarpReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok dewarpWrite ( const char *filename, L_DEWARP *dew ); LEPT_DLL extern l_ok dewarpWriteStream ( FILE *fp, L_DEWARP *dew ); LEPT_DLL extern l_ok dewarpWriteMem ( l_uint8 **pdata, size_t *psize, L_DEWARP *dew ); LEPT_DLL extern L_DEWARPA * dewarpaRead ( const char *filename ); LEPT_DLL extern L_DEWARPA * dewarpaReadStream ( FILE *fp ); LEPT_DLL extern L_DEWARPA * dewarpaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok dewarpaWrite ( const char *filename, L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaWriteStream ( FILE *fp, L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaWriteMem ( l_uint8 **pdata, size_t *psize, L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpBuildPageModel ( L_DEWARP *dew, const char *debugfile ); LEPT_DLL extern l_ok dewarpFindVertDisparity ( L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag ); LEPT_DLL extern l_ok dewarpFindHorizDisparity ( L_DEWARP *dew, PTAA *ptaa ); LEPT_DLL extern PTAA * dewarpGetTextlineCenters ( PIX *pixs, l_int32 debugflag ); LEPT_DLL extern PTAA * dewarpRemoveShortLines ( PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag ); LEPT_DLL extern l_ok dewarpFindHorizSlopeDisparity ( L_DEWARP *dew, PIX *pixb, l_float32 fractthresh, l_int32 parity ); LEPT_DLL extern l_ok dewarpBuildLineModel ( L_DEWARP *dew, l_int32 opensize, const char *debugfile ); LEPT_DLL extern l_ok dewarpaModelStatus ( L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess ); LEPT_DLL extern l_ok dewarpaApplyDisparity ( L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile ); LEPT_DLL extern l_ok dewarpaApplyDisparityBoxa ( L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, BOXA *boxas, l_int32 mapdir, l_int32 x, l_int32 y, BOXA **pboxad, const char *debugfile ); LEPT_DLL extern l_ok dewarpMinimize ( L_DEWARP *dew ); LEPT_DLL extern l_ok dewarpPopulateFullRes ( L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok dewarpSinglePage ( PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixd, L_DEWARPA **pdewa, l_int32 debug ); LEPT_DLL extern l_ok dewarpSinglePageInit ( PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixb, L_DEWARPA **pdewa ); LEPT_DLL extern l_ok dewarpSinglePageRun ( PIX *pixs, PIX *pixb, L_DEWARPA *dewa, PIX **ppixd, l_int32 debug ); LEPT_DLL extern l_ok dewarpaListPages ( L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaSetValidModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); LEPT_DLL extern l_ok dewarpaInsertRefModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); LEPT_DLL extern l_ok dewarpaStripRefModels ( L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaRestoreModels ( L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaInfo ( FILE *fp, L_DEWARPA *dewa ); LEPT_DLL extern l_ok dewarpaModelStats ( L_DEWARPA *dewa, l_int32 *pnnone, l_int32 *pnvsuccess, l_int32 *pnvvalid, l_int32 *pnhsuccess, l_int32 *pnhvalid, l_int32 *pnref ); LEPT_DLL extern l_ok dewarpaShowArrays ( L_DEWARPA *dewa, l_float32 scalefact, l_int32 first, l_int32 last ); LEPT_DLL extern l_ok dewarpDebug ( L_DEWARP *dew, const char *subdirs, l_int32 index ); LEPT_DLL extern l_ok dewarpShowResults ( L_DEWARPA *dewa, SARRAY *sa, BOXA *boxa, l_int32 firstpage, l_int32 lastpage, const char *pdfout ); LEPT_DLL extern L_DNA * l_dnaCreate ( l_int32 n ); LEPT_DLL extern L_DNA * l_dnaCreateFromIArray ( l_int32 *iarray, l_int32 size ); LEPT_DLL extern L_DNA * l_dnaCreateFromDArray ( l_float64 *darray, l_int32 size, l_int32 copyflag ); LEPT_DLL extern L_DNA * l_dnaMakeSequence ( l_float64 startval, l_float64 increment, l_int32 size ); LEPT_DLL extern void l_dnaDestroy ( L_DNA **pda ); LEPT_DLL extern L_DNA * l_dnaCopy ( L_DNA *da ); LEPT_DLL extern L_DNA * l_dnaClone ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaEmpty ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaAddNumber ( L_DNA *da, l_float64 val ); LEPT_DLL extern l_ok l_dnaInsertNumber ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_ok l_dnaRemoveNumber ( L_DNA *da, l_int32 index ); LEPT_DLL extern l_ok l_dnaReplaceNumber ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_int32 l_dnaGetCount ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaSetCount ( L_DNA *da, l_int32 newcount ); LEPT_DLL extern l_ok l_dnaGetDValue ( L_DNA *da, l_int32 index, l_float64 *pval ); LEPT_DLL extern l_ok l_dnaGetIValue ( L_DNA *da, l_int32 index, l_int32 *pival ); LEPT_DLL extern l_ok l_dnaSetValue ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_ok l_dnaShiftValue ( L_DNA *da, l_int32 index, l_float64 diff ); LEPT_DLL extern l_int32 * l_dnaGetIArray ( L_DNA *da ); LEPT_DLL extern l_float64 * l_dnaGetDArray ( L_DNA *da, l_int32 copyflag ); LEPT_DLL extern l_ok l_dnaGetParameters ( L_DNA *da, l_float64 *pstartx, l_float64 *pdelx ); LEPT_DLL extern l_ok l_dnaSetParameters ( L_DNA *da, l_float64 startx, l_float64 delx ); LEPT_DLL extern l_ok l_dnaCopyParameters ( L_DNA *dad, L_DNA *das ); LEPT_DLL extern L_DNA * l_dnaRead ( const char *filename ); LEPT_DLL extern L_DNA * l_dnaReadStream ( FILE *fp ); LEPT_DLL extern L_DNA * l_dnaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok l_dnaWrite ( const char *filename, L_DNA *da ); LEPT_DLL extern l_ok l_dnaWriteStream ( FILE *fp, L_DNA *da ); LEPT_DLL extern l_ok l_dnaWriteStderr ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaWriteMem ( l_uint8 **pdata, size_t *psize, L_DNA *da ); LEPT_DLL extern L_DNAA * l_dnaaCreate ( l_int32 n ); LEPT_DLL extern L_DNAA * l_dnaaCreateFull ( l_int32 nptr, l_int32 n ); LEPT_DLL extern l_ok l_dnaaTruncate ( L_DNAA *daa ); LEPT_DLL extern void l_dnaaDestroy ( L_DNAA **pdaa ); LEPT_DLL extern l_ok l_dnaaAddDna ( L_DNAA *daa, L_DNA *da, l_int32 copyflag ); LEPT_DLL extern l_int32 l_dnaaGetCount ( L_DNAA *daa ); LEPT_DLL extern l_int32 l_dnaaGetDnaCount ( L_DNAA *daa, l_int32 index ); LEPT_DLL extern l_int32 l_dnaaGetNumberCount ( L_DNAA *daa ); LEPT_DLL extern L_DNA * l_dnaaGetDna ( L_DNAA *daa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_ok l_dnaaReplaceDna ( L_DNAA *daa, l_int32 index, L_DNA *da ); LEPT_DLL extern l_ok l_dnaaGetValue ( L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval ); LEPT_DLL extern l_ok l_dnaaAddNumber ( L_DNAA *daa, l_int32 index, l_float64 val ); LEPT_DLL extern L_DNAA * l_dnaaRead ( const char *filename ); LEPT_DLL extern L_DNAA * l_dnaaReadStream ( FILE *fp ); LEPT_DLL extern L_DNAA * l_dnaaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok l_dnaaWrite ( const char *filename, L_DNAA *daa ); LEPT_DLL extern l_ok l_dnaaWriteStream ( FILE *fp, L_DNAA *daa ); LEPT_DLL extern l_ok l_dnaaWriteMem ( l_uint8 **pdata, size_t *psize, L_DNAA *daa ); LEPT_DLL extern l_ok l_dnaJoin ( L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend ); LEPT_DLL extern L_DNA * l_dnaaFlattenToDna ( L_DNAA *daa ); LEPT_DLL extern L_DNA * l_dnaSelectRange ( L_DNA *das, l_int32 first, l_int32 last ); LEPT_DLL extern NUMA * l_dnaConvertToNuma ( L_DNA *da ); LEPT_DLL extern L_DNA * numaConvertToDna ( NUMA *na ); LEPT_DLL extern L_DNA * pixConvertDataToDna ( PIX *pix ); LEPT_DLL extern L_ASET * l_asetCreateFromDna ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaRemoveDupsByAset ( L_DNA *das, L_DNA **pdad ); LEPT_DLL extern l_ok l_dnaUnionByAset ( L_DNA *da1, L_DNA *da2, L_DNA **pdad ); LEPT_DLL extern l_ok l_dnaIntersectionByAset ( L_DNA *da1, L_DNA *da2, L_DNA **pdad ); LEPT_DLL extern L_HASHMAP * l_hmapCreateFromDna ( L_DNA *da ); LEPT_DLL extern l_ok l_dnaRemoveDupsByHmap ( L_DNA *das, L_DNA **pdad, L_HASHMAP **phmap ); LEPT_DLL extern l_ok l_dnaUnionByHmap ( L_DNA *da1, L_DNA *da2, L_DNA **pdad ); LEPT_DLL extern l_ok l_dnaIntersectionByHmap ( L_DNA *da1, L_DNA *da2, L_DNA **pdad ); LEPT_DLL extern l_ok l_dnaMakeHistoByHmap ( L_DNA *das, L_DNA **pdav, L_DNA **pdac ); LEPT_DLL extern L_DNA * l_dnaDiffAdjValues ( L_DNA *das ); LEPT_DLL extern L_DNAHASH * l_dnaHashCreate ( l_int32 nbuckets, l_int32 initsize ); LEPT_DLL extern void l_dnaHashDestroy ( L_DNAHASH **pdahash ); LEPT_DLL extern L_DNA * l_dnaHashGetDna ( L_DNAHASH *dahash, l_uint64 key, l_int32 copyflag ); LEPT_DLL extern l_ok l_dnaHashAdd ( L_DNAHASH *dahash, l_uint64 key, l_float64 value ); LEPT_DLL extern PIX * pixMorphDwa_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern PIX * pixFMorphopGen_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern l_int32 fmorphopgen_low_2 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern PIX * pixSobelEdgeFilter ( PIX *pixs, l_int32 orientflag ); LEPT_DLL extern PIX * pixTwoSidedEdgeFilter ( PIX *pixs, l_int32 orientflag ); LEPT_DLL extern l_ok pixMeasureEdgeSmoothness ( PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile ); LEPT_DLL extern NUMA * pixGetEdgeProfile ( PIX *pixs, l_int32 side, const char *debugfile ); LEPT_DLL extern l_ok pixGetLastOffPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); LEPT_DLL extern l_int32 pixGetLastOnPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); LEPT_DLL extern char * encodeBase64 ( const l_uint8 *inarray, l_int32 insize, l_int32 *poutsize ); LEPT_DLL extern l_uint8 * decodeBase64 ( const char *inarray, l_int32 insize, l_int32 *poutsize ); LEPT_DLL extern char * encodeAscii85 ( const l_uint8 *inarray, size_t insize, size_t *poutsize ); LEPT_DLL extern l_uint8 * decodeAscii85 ( const char *inarray, size_t insize, size_t *poutsize ); LEPT_DLL extern char * encodeAscii85WithComp ( const l_uint8 *indata, size_t insize, size_t *poutsize ); LEPT_DLL extern l_uint8 * decodeAscii85WithComp ( const char *instr, size_t insize, size_t *poutsize ); LEPT_DLL extern char * reformatPacked64 ( const char *inarray, l_int32 insize, l_int32 leadspace, l_int32 linechars, l_int32 addquotes, l_int32 *poutsize ); LEPT_DLL extern PIX * pixGammaTRC ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixGammaTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixGammaTRCWithAlpha ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern NUMA * numaGammaTRC ( l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixContrastTRC ( PIX *pixd, PIX *pixs, l_float32 factor ); LEPT_DLL extern PIX * pixContrastTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 factor ); LEPT_DLL extern NUMA * numaContrastTRC ( l_float32 factor ); LEPT_DLL extern PIX * pixEqualizeTRC ( PIX *pixd, PIX *pixs, l_float32 fract, l_int32 factor ); LEPT_DLL extern NUMA * numaEqualizeTRC ( PIX *pix, l_float32 fract, l_int32 factor ); LEPT_DLL extern l_int32 pixTRCMap ( PIX *pixs, PIX *pixm, NUMA *na ); LEPT_DLL extern l_int32 pixTRCMapGeneral ( PIX *pixs, PIX *pixm, NUMA *nar, NUMA *nag, NUMA *nab ); LEPT_DLL extern PIX * pixUnsharpMasking ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixUnsharpMaskingGray ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixUnsharpMaskingFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGrayFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGray1D ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGray2D ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixModifyHue ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern PIX * pixModifySaturation ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern l_int32 pixMeasureSaturation ( PIX *pixs, l_int32 factor, l_float32 *psat ); LEPT_DLL extern PIX * pixModifyBrightness ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern PIX * pixMosaicColorShiftRGB ( PIX *pixs, l_float32 roff, l_float32 goff, l_float32 boff, l_float32 delta, l_int32 nincr ); LEPT_DLL extern PIX * pixColorShiftRGB ( PIX *pixs, l_float32 rfract, l_float32 gfract, l_float32 bfract ); LEPT_DLL extern PIX * pixDarkenGray ( PIX *pixd, PIX *pixs, l_int32 thresh, l_int32 satlimit ); LEPT_DLL extern PIX * pixMultConstantColor ( PIX *pixs, l_float32 rfact, l_float32 gfact, l_float32 bfact ); LEPT_DLL extern PIX * pixMultMatrixColor ( PIX *pixs, L_KERNEL *kel ); LEPT_DLL extern PIX * pixHalfEdgeByBandpass ( PIX *pixs, l_int32 sm1h, l_int32 sm1v, l_int32 sm2h, l_int32 sm2v ); LEPT_DLL extern l_ok fhmtautogen ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_ok fhmtautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_ok fhmtautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern PIX * pixHMTDwa_1 ( PIX *pixd, PIX *pixs, const char *selname ); LEPT_DLL extern PIX * pixFHMTGen_1 ( PIX *pixd, PIX *pixs, const char *selname ); LEPT_DLL extern l_int32 fhmtgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern l_ok pixItalicWords ( PIX *pixs, BOXA *boxaw, PIX *pixw, BOXA **pboxa, l_int32 debugflag ); LEPT_DLL extern PIX * pixOrientCorrect ( PIX *pixs, l_float32 minupconf, l_float32 minratio, l_float32 *pupconf, l_float32 *pleftconf, l_int32 *protation, l_int32 debug ); LEPT_DLL extern l_ok pixOrientDetect ( PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_ok makeOrientDecision ( l_float32 upconf, l_float32 leftconf, l_float32 minupconf, l_float32 minratio, l_int32 *porient, l_int32 debug ); LEPT_DLL extern l_ok pixUpDownDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug ); LEPT_DLL extern l_ok pixMirrorDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_ok fmorphautogen ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_ok fmorphautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_int32 fmorphautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern PIX * pixMorphDwa_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern PIX * pixFMorphopGen_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern l_int32 fmorphopgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern FPIX * fpixCreate ( l_int32 width, l_int32 height ); LEPT_DLL extern FPIX * fpixCreateTemplate ( FPIX *fpixs ); LEPT_DLL extern FPIX * fpixClone ( FPIX *fpix ); LEPT_DLL extern FPIX * fpixCopy ( FPIX *fpixs ); LEPT_DLL extern void fpixDestroy ( FPIX **pfpix ); LEPT_DLL extern l_ok fpixGetDimensions ( FPIX *fpix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok fpixSetDimensions ( FPIX *fpix, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 fpixGetWpl ( FPIX *fpix ); LEPT_DLL extern l_ok fpixSetWpl ( FPIX *fpix, l_int32 wpl ); LEPT_DLL extern l_ok fpixGetResolution ( FPIX *fpix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok fpixSetResolution ( FPIX *fpix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_ok fpixCopyResolution ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern l_float32 * fpixGetData ( FPIX *fpix ); LEPT_DLL extern l_ok fpixSetData ( FPIX *fpix, l_float32 *data ); LEPT_DLL extern l_ok fpixGetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_ok fpixSetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 val ); LEPT_DLL extern FPIXA * fpixaCreate ( l_int32 n ); LEPT_DLL extern FPIXA * fpixaCopy ( FPIXA *fpixa, l_int32 copyflag ); LEPT_DLL extern void fpixaDestroy ( FPIXA **pfpixa ); LEPT_DLL extern l_ok fpixaAddFPix ( FPIXA *fpixa, FPIX *fpix, l_int32 copyflag ); LEPT_DLL extern l_int32 fpixaGetCount ( FPIXA *fpixa ); LEPT_DLL extern FPIX * fpixaGetFPix ( FPIXA *fpixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_ok fpixaGetFPixDimensions ( FPIXA *fpixa, l_int32 index, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_float32 * fpixaGetData ( FPIXA *fpixa, l_int32 index ); LEPT_DLL extern l_ok fpixaGetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_ok fpixaSetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 val ); LEPT_DLL extern DPIX * dpixCreate ( l_int32 width, l_int32 height ); LEPT_DLL extern DPIX * dpixCreateTemplate ( DPIX *dpixs ); LEPT_DLL extern DPIX * dpixClone ( DPIX *dpix ); LEPT_DLL extern DPIX * dpixCopy ( DPIX *dpixs ); LEPT_DLL extern void dpixDestroy ( DPIX **pdpix ); LEPT_DLL extern l_ok dpixGetDimensions ( DPIX *dpix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok dpixSetDimensions ( DPIX *dpix, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 dpixGetWpl ( DPIX *dpix ); LEPT_DLL extern l_ok dpixSetWpl ( DPIX *dpix, l_int32 wpl ); LEPT_DLL extern l_ok dpixGetResolution ( DPIX *dpix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok dpixSetResolution ( DPIX *dpix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_ok dpixCopyResolution ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern l_float64 * dpixGetData ( DPIX *dpix ); LEPT_DLL extern l_ok dpixSetData ( DPIX *dpix, l_float64 *data ); LEPT_DLL extern l_ok dpixGetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval ); LEPT_DLL extern l_ok dpixSetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 val ); LEPT_DLL extern FPIX * fpixRead ( const char *filename ); LEPT_DLL extern FPIX * fpixReadStream ( FILE *fp ); LEPT_DLL extern FPIX * fpixReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok fpixWrite ( const char *filename, FPIX *fpix ); LEPT_DLL extern l_ok fpixWriteStream ( FILE *fp, FPIX *fpix ); LEPT_DLL extern l_ok fpixWriteMem ( l_uint8 **pdata, size_t *psize, FPIX *fpix ); LEPT_DLL extern FPIX * fpixEndianByteSwap ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern DPIX * dpixRead ( const char *filename ); LEPT_DLL extern DPIX * dpixReadStream ( FILE *fp ); LEPT_DLL extern DPIX * dpixReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok dpixWrite ( const char *filename, DPIX *dpix ); LEPT_DLL extern l_ok dpixWriteStream ( FILE *fp, DPIX *dpix ); LEPT_DLL extern l_ok dpixWriteMem ( l_uint8 **pdata, size_t *psize, DPIX *dpix ); LEPT_DLL extern DPIX * dpixEndianByteSwap ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern l_ok fpixPrintStream ( FILE *fp, FPIX *fpix, l_int32 factor ); LEPT_DLL extern FPIX * pixConvertToFPix ( PIX *pixs, l_int32 ncomps ); LEPT_DLL extern DPIX * pixConvertToDPix ( PIX *pixs, l_int32 ncomps ); LEPT_DLL extern PIX * fpixConvertToPix ( FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); LEPT_DLL extern PIX * fpixDisplayMaxDynamicRange ( FPIX *fpixs ); LEPT_DLL extern DPIX * fpixConvertToDPix ( FPIX *fpix ); LEPT_DLL extern PIX * dpixConvertToPix ( DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); LEPT_DLL extern FPIX * dpixConvertToFPix ( DPIX *dpix ); LEPT_DLL extern l_ok fpixGetMin ( FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); LEPT_DLL extern l_ok fpixGetMax ( FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); LEPT_DLL extern l_ok dpixGetMin ( DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); LEPT_DLL extern l_ok dpixGetMax ( DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); LEPT_DLL extern FPIX * fpixScaleByInteger ( FPIX *fpixs, l_int32 factor ); LEPT_DLL extern DPIX * dpixScaleByInteger ( DPIX *dpixs, l_int32 factor ); LEPT_DLL extern FPIX * fpixLinearCombination ( FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b ); LEPT_DLL extern l_ok fpixAddMultConstant ( FPIX *fpix, l_float32 addc, l_float32 multc ); LEPT_DLL extern DPIX * dpixLinearCombination ( DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b ); LEPT_DLL extern l_ok dpixAddMultConstant ( DPIX *dpix, l_float64 addc, l_float64 multc ); LEPT_DLL extern l_ok fpixSetAllArbitrary ( FPIX *fpix, l_float32 inval ); LEPT_DLL extern l_ok dpixSetAllArbitrary ( DPIX *dpix, l_float64 inval ); LEPT_DLL extern FPIX * fpixAddBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixRemoveBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddMirroredBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddContinuedBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddSlopeBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern l_ok fpixRasterop ( FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy ); LEPT_DLL extern FPIX * fpixRotateOrth ( FPIX *fpixs, l_int32 quads ); LEPT_DLL extern FPIX * fpixRotate180 ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixRotate90 ( FPIX *fpixs, l_int32 direction ); LEPT_DLL extern FPIX * fpixFlipLR ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixFlipTB ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixAffinePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); LEPT_DLL extern FPIX * fpixAffine ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); LEPT_DLL extern FPIX * fpixProjectivePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); LEPT_DLL extern FPIX * fpixProjective ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); LEPT_DLL extern l_ok linearInterpolatePixelFloat ( l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval ); LEPT_DLL extern PIX * fpixThresholdToPix ( FPIX *fpix, l_float32 thresh ); LEPT_DLL extern FPIX * pixComponentFunction ( PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom ); LEPT_DLL extern PIX * pixReadStreamGif ( FILE *fp ); LEPT_DLL extern PIX * pixReadMemGif ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_ok pixWriteStreamGif ( FILE *fp, PIX *pix ); LEPT_DLL extern l_ok pixWriteMemGif ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern GPLOT * gplotCreate ( const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel ); LEPT_DLL extern void gplotDestroy ( GPLOT **pgplot ); LEPT_DLL extern l_ok gplotAddPlot ( GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plotlabel ); LEPT_DLL extern l_ok gplotSetScaling ( GPLOT *gplot, l_int32 scaling ); LEPT_DLL extern PIX * gplotMakeOutputPix ( GPLOT *gplot ); LEPT_DLL extern l_ok gplotMakeOutput ( GPLOT *gplot ); LEPT_DLL extern l_ok gplotGenCommandFile ( GPLOT *gplot ); LEPT_DLL extern l_ok gplotGenDataFiles ( GPLOT *gplot ); LEPT_DLL extern l_ok gplotSimple1 ( NUMA *na, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern l_ok gplotSimple2 ( NUMA *na1, NUMA *na2, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern l_ok gplotSimpleN ( NUMAA *naa, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern PIX * gplotSimplePix1 ( NUMA *na, const char *title ); LEPT_DLL extern PIX * gplotSimplePix2 ( NUMA *na1, NUMA *na2, const char *title ); LEPT_DLL extern PIX * gplotSimplePixN ( NUMAA *naa, const char *title ); LEPT_DLL extern GPLOT * gplotSimpleXY1 ( NUMA *nax, NUMA *nay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern GPLOT * gplotSimpleXY2 ( NUMA *nax, NUMA *nay1, NUMA *nay2, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern GPLOT * gplotSimpleXYN ( NUMA *nax, NUMAA *naay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern PIX * gplotGeneralPix1 ( NUMA *na, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel ); LEPT_DLL extern PIX * gplotGeneralPix2 ( NUMA *na1, NUMA *na2, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel ); LEPT_DLL extern PIX * gplotGeneralPixN ( NUMA *nax, NUMAA *naay, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel ); LEPT_DLL extern GPLOT * gplotRead ( const char *filename ); LEPT_DLL extern l_ok gplotWrite ( const char *filename, GPLOT *gplot ); LEPT_DLL extern PTA * generatePtaLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); LEPT_DLL extern PTA * generatePtaWideLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width ); LEPT_DLL extern PTA * generatePtaBox ( BOX *box, l_int32 width ); LEPT_DLL extern PTA * generatePtaBoxa ( BOXA *boxa, l_int32 width, l_int32 removedups ); LEPT_DLL extern PTA * generatePtaHashBox ( BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); LEPT_DLL extern PTA * generatePtaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups ); LEPT_DLL extern PTAA * generatePtaaBoxa ( BOXA *boxa ); LEPT_DLL extern PTAA * generatePtaaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); LEPT_DLL extern PTA * generatePtaPolyline ( PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups ); LEPT_DLL extern PTA * generatePtaGrid ( l_int32 w, l_int32 h, l_int32 nx, l_int32 ny, l_int32 width ); LEPT_DLL extern PTA * convertPtaLineTo4cc ( PTA *ptas ); LEPT_DLL extern PTA * generatePtaFilledCircle ( l_int32 radius ); LEPT_DLL extern PTA * generatePtaFilledSquare ( l_int32 side ); LEPT_DLL extern PTA * generatePtaLineFromPt ( l_int32 x, l_int32 y, l_float64 length, l_float64 radang ); LEPT_DLL extern l_ok locatePtRadially ( l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py ); LEPT_DLL extern l_ok pixRenderPlotFromNuma ( PIX **ppix, NUMA *na, l_int32 plotloc, l_int32 linewidth, l_int32 max, l_uint32 color ); LEPT_DLL extern PTA * makePlotPtaFromNuma ( NUMA *na, l_int32 size, l_int32 plotloc, l_int32 linewidth, l_int32 max ); LEPT_DLL extern l_ok pixRenderPlotFromNumaGen ( PIX **ppix, NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref, l_uint32 color ); LEPT_DLL extern PTA * makePlotPtaFromNumaGen ( NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref ); LEPT_DLL extern l_ok pixRenderPta ( PIX *pix, PTA *pta, l_int32 op ); LEPT_DLL extern l_ok pixRenderPtaArb ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_ok pixRenderPtaBlend ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_ok pixRenderLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op ); LEPT_DLL extern l_ok pixRenderLineArb ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_ok pixRenderLineBlend ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_ok pixRenderBox ( PIX *pix, BOX *box, l_int32 width, l_int32 op ); LEPT_DLL extern l_ok pixRenderBoxArb ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_ok pixRenderBoxBlend ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_ok pixRenderBoxa ( PIX *pix, BOXA *boxa, l_int32 width, l_int32 op ); LEPT_DLL extern l_ok pixRenderBoxaArb ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_ok pixRenderBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups ); LEPT_DLL extern l_ok pixRenderHashBox ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); LEPT_DLL extern l_ok pixRenderHashBoxArb ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixRenderHashBoxBlend ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); LEPT_DLL extern l_ok pixRenderHashMaskArb ( PIX *pix, PIX *pixm, l_int32 x, l_int32 y, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixRenderHashBoxa ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); LEPT_DLL extern l_ok pixRenderHashBoxaArb ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixRenderHashBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); LEPT_DLL extern l_ok pixRenderPolyline ( PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag ); LEPT_DLL extern l_ok pixRenderPolylineArb ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag ); LEPT_DLL extern l_ok pixRenderPolylineBlend ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups ); LEPT_DLL extern l_ok pixRenderGridArb ( PIX *pix, l_int32 nx, l_int32 ny, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern PIX * pixRenderRandomCmapPtaa ( PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag ); LEPT_DLL extern PIX * pixRenderPolygon ( PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin ); LEPT_DLL extern PIX * pixFillPolygon ( PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin ); LEPT_DLL extern PIX * pixRenderContours ( PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth ); LEPT_DLL extern PIX * fpixAutoRenderContours ( FPIX *fpix, l_int32 ncontours ); LEPT_DLL extern PIX * fpixRenderContours ( FPIX *fpixs, l_float32 incr, l_float32 proxim ); LEPT_DLL extern PTA * pixGeneratePtaBoundary ( PIX *pixs, l_int32 width ); LEPT_DLL extern PIX * pixErodeGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDitherToBinary ( PIX *pixs ); LEPT_DLL extern PIX * pixDitherToBinarySpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip ); LEPT_DLL extern void ditherToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag ); LEPT_DLL extern PIX * pixThresholdToBinary ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern void thresholdToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *lines, l_int32 d, l_int32 thresh ); LEPT_DLL extern PIX * pixVarThresholdToBinary ( PIX *pixs, PIX *pixg ); LEPT_DLL extern PIX * pixAdaptThresholdToBinary ( PIX *pixs, PIX *pixm, l_float32 gamma ); LEPT_DLL extern PIX * pixAdaptThresholdToBinaryGen ( PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 blackval, l_int32 whiteval, l_int32 thresh ); LEPT_DLL extern PIX * pixGenerateMaskByValue ( PIX *pixs, l_int32 val, l_int32 usecmap ); LEPT_DLL extern PIX * pixGenerateMaskByBand ( PIX *pixs, l_int32 lower, l_int32 upper, l_int32 inband, l_int32 usecmap ); LEPT_DLL extern PIX * pixDitherTo2bpp ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixDitherTo2bppSpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdTo2bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdTo4bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdOn8bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdGrayArb ( PIX *pixs, const char *edgevals, l_int32 outdepth, l_int32 use_average, l_int32 setblack, l_int32 setwhite ); LEPT_DLL extern l_int32 * makeGrayQuantIndexTable ( l_int32 nlevels ); LEPT_DLL extern l_ok makeGrayQuantTableArb ( NUMA *na, l_int32 outdepth, l_int32 **ptab, PIXCMAP **pcmap ); LEPT_DLL extern PIX * pixGenerateMaskByBand32 ( PIX *pixs, l_uint32 refval, l_int32 delm, l_int32 delp, l_float32 fractm, l_float32 fractp ); LEPT_DLL extern PIX * pixGenerateMaskByDiscr32 ( PIX *pixs, l_uint32 refval1, l_uint32 refval2, l_int32 distflag ); LEPT_DLL extern PIX * pixGrayQuantFromHisto ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 minfract, l_int32 maxsize ); LEPT_DLL extern PIX * pixGrayQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth ); LEPT_DLL extern L_HASHMAP * l_hmapCreate ( l_int32 ninit, l_int32 maxocc ); LEPT_DLL extern void l_hmapDestroy ( L_HASHMAP **phmap ); LEPT_DLL extern L_HASHITEM * l_hmapLookup ( L_HASHMAP *hmap, l_uint64 key, l_uint64 val, l_int32 op ); LEPT_DLL extern l_ok l_hmapRehash ( L_HASHMAP *hmap ); LEPT_DLL extern L_HEAP * lheapCreate ( l_int32 n, l_int32 direction ); LEPT_DLL extern void lheapDestroy ( L_HEAP **plh, l_int32 freeflag ); LEPT_DLL extern l_ok lheapAdd ( L_HEAP *lh, void *item ); LEPT_DLL extern void * lheapRemove ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapGetCount ( L_HEAP *lh ); LEPT_DLL extern void * lheapGetElement ( L_HEAP *lh, l_int32 index ); LEPT_DLL extern l_ok lheapSort ( L_HEAP *lh ); LEPT_DLL extern l_ok lheapSortStrictOrder ( L_HEAP *lh ); LEPT_DLL extern l_ok lheapPrint ( FILE *fp, L_HEAP *lh ); LEPT_DLL extern JBCLASSER * jbRankHausInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_int32 size, l_float32 rank ); LEPT_DLL extern JBCLASSER * jbCorrelationInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); LEPT_DLL extern JBCLASSER * jbCorrelationInitWithoutComponents ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); LEPT_DLL extern l_ok jbAddPages ( JBCLASSER *classer, SARRAY *safiles ); LEPT_DLL extern l_ok jbAddPage ( JBCLASSER *classer, PIX *pixs ); LEPT_DLL extern l_ok jbAddPageComponents ( JBCLASSER *classer, PIX *pixs, BOXA *boxas, PIXA *pixas ); LEPT_DLL extern l_ok jbClassifyRankHaus ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); LEPT_DLL extern l_int32 pixHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh ); LEPT_DLL extern l_int32 pixRankHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 area1, l_int32 area3, l_float32 rank, l_int32 *tab8 ); LEPT_DLL extern l_ok jbClassifyCorrelation ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); LEPT_DLL extern l_ok jbGetComponents ( PIX *pixs, l_int32 components, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad ); LEPT_DLL extern l_ok pixWordMaskByDilation ( PIX *pixs, PIX **ppixm, l_int32 *psize, PIXA *pixadb ); LEPT_DLL extern l_ok pixWordBoxesByDilation ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxa, l_int32 *psize, PIXA *pixadb ); LEPT_DLL extern PIXA * jbAccumulateComposites ( PIXAA *pixaa, NUMA **pna, PTA **pptat ); LEPT_DLL extern PIXA * jbTemplatesFromComposites ( PIXA *pixac, NUMA *na ); LEPT_DLL extern JBCLASSER * jbClasserCreate ( l_int32 method, l_int32 components ); LEPT_DLL extern void jbClasserDestroy ( JBCLASSER **pclasser ); LEPT_DLL extern JBDATA * jbDataSave ( JBCLASSER *classer ); LEPT_DLL extern void jbDataDestroy ( JBDATA **pdata ); LEPT_DLL extern l_ok jbDataWrite ( const char *rootout, JBDATA *jbdata ); LEPT_DLL extern JBDATA * jbDataRead ( const char *rootname ); LEPT_DLL extern PIXA * jbDataRender ( JBDATA *data, l_int32 debugflag ); LEPT_DLL extern l_ok jbGetULCorners ( JBCLASSER *classer, PIX *pixs, BOXA *boxa ); LEPT_DLL extern l_ok jbGetLLCorners ( JBCLASSER *classer ); LEPT_DLL extern l_ok readHeaderJp2k ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec ); LEPT_DLL extern l_ok freadHeaderJp2k ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec ); LEPT_DLL extern l_ok readHeaderMemJp2k ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec ); LEPT_DLL extern l_int32 fgetJp2kResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok readResolutionMemJp2k ( const l_uint8 *data, size_t nbytes, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern PIX * pixReadJp2k ( const char *filename, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); LEPT_DLL extern PIX * pixReadStreamJp2k ( FILE *fp, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); LEPT_DLL extern l_ok pixWriteJp2k ( const char *filename, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug ); LEPT_DLL extern l_ok pixWriteStreamJp2k ( FILE *fp, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 codec, l_int32 hint, l_int32 debug ); LEPT_DLL extern PIX * pixReadMemJp2k ( const l_uint8 *data, size_t size, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); LEPT_DLL extern l_ok pixWriteMemJp2k ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug ); LEPT_DLL extern PIX * pixReadJpeg ( const char *filename, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); LEPT_DLL extern PIX * pixReadStreamJpeg ( FILE *fp, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); LEPT_DLL extern l_ok readHeaderJpeg ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_ok freadHeaderJpeg ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_int32 fgetJpegResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 fgetJpegComment ( FILE *fp, l_uint8 **pcomment ); LEPT_DLL extern l_ok pixWriteJpeg ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_ok pixWriteStreamJpeg ( FILE *fp, PIX *pixs, l_int32 quality, l_int32 progressive ); LEPT_DLL extern PIX * pixReadMemJpeg ( const l_uint8 *data, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); LEPT_DLL extern l_ok readHeaderMemJpeg ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_ok readResolutionMemJpeg ( const l_uint8 *data, size_t size, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok pixWriteMemJpeg ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_ok pixSetChromaSampling ( PIX *pix, l_int32 sampling ); LEPT_DLL extern L_KERNEL * kernelCreate ( l_int32 height, l_int32 width ); LEPT_DLL extern void kernelDestroy ( L_KERNEL **pkel ); LEPT_DLL extern L_KERNEL * kernelCopy ( L_KERNEL *kels ); LEPT_DLL extern l_ok kernelGetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 *pval ); LEPT_DLL extern l_ok kernelSetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 val ); LEPT_DLL extern l_ok kernelGetParameters ( L_KERNEL *kel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); LEPT_DLL extern l_ok kernelSetOrigin ( L_KERNEL *kel, l_int32 cy, l_int32 cx ); LEPT_DLL extern l_ok kernelGetSum ( L_KERNEL *kel, l_float32 *psum ); LEPT_DLL extern l_ok kernelGetMinMax ( L_KERNEL *kel, l_float32 *pmin, l_float32 *pmax ); LEPT_DLL extern L_KERNEL * kernelNormalize ( L_KERNEL *kels, l_float32 normsum ); LEPT_DLL extern L_KERNEL * kernelInvert ( L_KERNEL *kels ); LEPT_DLL extern l_float32 ** create2dFloatArray ( l_int32 sy, l_int32 sx ); LEPT_DLL extern L_KERNEL * kernelRead ( const char *fname ); LEPT_DLL extern L_KERNEL * kernelReadStream ( FILE *fp ); LEPT_DLL extern l_ok kernelWrite ( const char *fname, L_KERNEL *kel ); LEPT_DLL extern l_ok kernelWriteStream ( FILE *fp, L_KERNEL *kel ); LEPT_DLL extern L_KERNEL * kernelCreateFromString ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, const char *kdata ); LEPT_DLL extern L_KERNEL * kernelCreateFromFile ( const char *filename ); LEPT_DLL extern L_KERNEL * kernelCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx ); LEPT_DLL extern PIX * kernelDisplayInPix ( L_KERNEL *kel, l_int32 size, l_int32 gthick ); LEPT_DLL extern NUMA * parseStringForNumbers ( const char *str, const char *seps ); LEPT_DLL extern L_KERNEL * makeFlatKernel ( l_int32 height, l_int32 width, l_int32 cy, l_int32 cx ); LEPT_DLL extern L_KERNEL * makeGaussianKernel ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max ); LEPT_DLL extern l_ok makeGaussianKernelSep ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max, L_KERNEL **pkelx, L_KERNEL **pkely ); LEPT_DLL extern L_KERNEL * makeDoGKernel ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 ratio ); LEPT_DLL extern char * getImagelibVersions ( void ); LEPT_DLL extern void listDestroy ( DLLIST **phead ); LEPT_DLL extern l_ok listAddToHead ( DLLIST **phead, void *data ); LEPT_DLL extern l_ok listAddToTail ( DLLIST **phead, DLLIST **ptail, void *data ); LEPT_DLL extern l_ok listInsertBefore ( DLLIST **phead, DLLIST *elem, void *data ); LEPT_DLL extern l_ok listInsertAfter ( DLLIST **phead, DLLIST *elem, void *data ); LEPT_DLL extern void * listRemoveElement ( DLLIST **phead, DLLIST *elem ); LEPT_DLL extern void * listRemoveFromHead ( DLLIST **phead ); LEPT_DLL extern void * listRemoveFromTail ( DLLIST **phead, DLLIST **ptail ); LEPT_DLL extern DLLIST * listFindElement ( DLLIST *head, void *data ); LEPT_DLL extern DLLIST * listFindTail ( DLLIST *head ); LEPT_DLL extern l_int32 listGetCount ( DLLIST *head ); LEPT_DLL extern l_ok listReverse ( DLLIST **phead ); LEPT_DLL extern l_ok listJoin ( DLLIST **phead1, DLLIST **phead2 ); LEPT_DLL extern L_AMAP * l_amapCreate ( l_int32 keytype ); LEPT_DLL extern RB_TYPE * l_amapFind ( L_AMAP *m, RB_TYPE key ); LEPT_DLL extern void l_amapInsert ( L_AMAP *m, RB_TYPE key, RB_TYPE value ); LEPT_DLL extern void l_amapDelete ( L_AMAP *m, RB_TYPE key ); LEPT_DLL extern void l_amapDestroy ( L_AMAP **pm ); LEPT_DLL extern L_AMAP_NODE * l_amapGetFirst ( L_AMAP *m ); LEPT_DLL extern L_AMAP_NODE * l_amapGetNext ( L_AMAP_NODE *n ); LEPT_DLL extern L_AMAP_NODE * l_amapGetLast ( L_AMAP *m ); LEPT_DLL extern L_AMAP_NODE * l_amapGetPrev ( L_AMAP_NODE *n ); LEPT_DLL extern l_int32 l_amapSize ( L_AMAP *m ); LEPT_DLL extern L_ASET * l_asetCreate ( l_int32 keytype ); LEPT_DLL extern RB_TYPE * l_asetFind ( L_ASET *s, RB_TYPE key ); LEPT_DLL extern void l_asetInsert ( L_ASET *s, RB_TYPE key ); LEPT_DLL extern void l_asetDelete ( L_ASET *s, RB_TYPE key ); LEPT_DLL extern void l_asetDestroy ( L_ASET **ps ); LEPT_DLL extern L_ASET_NODE * l_asetGetFirst ( L_ASET *s ); LEPT_DLL extern L_ASET_NODE * l_asetGetNext ( L_ASET_NODE *n ); LEPT_DLL extern L_ASET_NODE * l_asetGetLast ( L_ASET *s ); LEPT_DLL extern L_ASET_NODE * l_asetGetPrev ( L_ASET_NODE *n ); LEPT_DLL extern l_int32 l_asetSize ( L_ASET *s ); LEPT_DLL extern PIX * generateBinaryMaze ( l_int32 w, l_int32 h, l_int32 xi, l_int32 yi, l_float32 wallps, l_float32 ranis ); LEPT_DLL extern PTA * pixSearchBinaryMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); LEPT_DLL extern PTA * pixSearchGrayMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); LEPT_DLL extern PIX * pixDilate ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixErode ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixHMT ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixOpen ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixClose ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixCloseSafe ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixOpenGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixCloseGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixDilateBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseSafeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern l_int32 selectComposableSels ( l_int32 size, l_int32 direction, SEL **psel1, SEL **psel2 ); LEPT_DLL extern l_ok selectComposableSizes ( l_int32 size, l_int32 *pfactor1, l_int32 *pfactor2 ); LEPT_DLL extern PIX * pixDilateCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseSafeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern void resetMorphBoundaryCondition ( l_int32 bc ); LEPT_DLL extern l_uint32 getMorphBorderPixelColor ( l_int32 type, l_int32 depth ); LEPT_DLL extern PIX * pixExtractBoundary ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixMorphSequenceMasked ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphSequenceByComponent ( PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); LEPT_DLL extern PIXA * pixaMorphSequenceByComponent ( PIXA *pixas, const char *sequence, l_int32 minw, l_int32 minh ); LEPT_DLL extern PIX * pixMorphSequenceByRegion ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); LEPT_DLL extern PIXA * pixaMorphSequenceByRegion ( PIX *pixs, PIXA *pixam, const char *sequence, l_int32 minw, l_int32 minh ); LEPT_DLL extern PIX * pixUnionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); LEPT_DLL extern PIX * pixIntersectionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); LEPT_DLL extern PIX * pixSelectiveConnCompFill ( PIX *pixs, l_int32 connectivity, l_int32 minw, l_int32 minh ); LEPT_DLL extern l_ok pixRemoveMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_int32 dsize ); LEPT_DLL extern PIX * pixDisplayMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_uint32 color, l_float32 scale, l_int32 nlevels ); LEPT_DLL extern PIXA * pixaExtendByMorph ( PIXA *pixas, l_int32 type, l_int32 niters, SEL *sel, l_int32 include ); LEPT_DLL extern PIXA * pixaExtendByScaling ( PIXA *pixas, NUMA *nasc, l_int32 type, l_int32 include ); LEPT_DLL extern PIX * pixSeedfillMorph ( PIX *pixs, PIX *pixm, l_int32 maxiters, l_int32 connectivity ); LEPT_DLL extern NUMA * pixRunHistogramMorph ( PIX *pixs, l_int32 runtype, l_int32 direction, l_int32 maxsize ); LEPT_DLL extern PIX * pixTophat ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 type ); LEPT_DLL extern PIX * pixHDome ( PIX *pixs, l_int32 height, l_int32 connectivity ); LEPT_DLL extern PIX * pixFastTophat ( PIX *pixs, l_int32 xsize, l_int32 ysize, l_int32 type ); LEPT_DLL extern PIX * pixMorphGradient ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 smoothing ); LEPT_DLL extern PTA * pixaCentroids ( PIXA *pixa ); LEPT_DLL extern l_ok pixCentroid ( PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave ); LEPT_DLL extern PIX * pixDilateBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern l_ok getExtendedCompositeParameters ( l_int32 size, l_int32 *pn, l_int32 *pextra, l_int32 *pactualsize ); LEPT_DLL extern PIX * pixMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphCompSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphCompSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern l_int32 morphSequenceVerify ( SARRAY *sa ); LEPT_DLL extern PIX * pixGrayMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); LEPT_DLL extern PIX * pixColorMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); LEPT_DLL extern NUMA * numaCreate ( l_int32 n ); LEPT_DLL extern NUMA * numaCreateFromIArray ( l_int32 *iarray, l_int32 size ); LEPT_DLL extern NUMA * numaCreateFromFArray ( l_float32 *farray, l_int32 size, l_int32 copyflag ); LEPT_DLL extern NUMA * numaCreateFromString ( const char *str ); LEPT_DLL extern void numaDestroy ( NUMA **pna ); LEPT_DLL extern NUMA * numaCopy ( NUMA *na ); LEPT_DLL extern NUMA * numaClone ( NUMA *na ); LEPT_DLL extern l_ok numaEmpty ( NUMA *na ); LEPT_DLL extern l_ok numaAddNumber ( NUMA *na, l_float32 val ); LEPT_DLL extern l_ok numaInsertNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_ok numaRemoveNumber ( NUMA *na, l_int32 index ); LEPT_DLL extern l_ok numaReplaceNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_int32 numaGetCount ( NUMA *na ); LEPT_DLL extern l_ok numaSetCount ( NUMA *na, l_int32 newcount ); LEPT_DLL extern l_ok numaGetFValue ( NUMA *na, l_int32 index, l_float32 *pval ); LEPT_DLL extern l_ok numaGetIValue ( NUMA *na, l_int32 index, l_int32 *pival ); LEPT_DLL extern l_ok numaSetValue ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_ok numaShiftValue ( NUMA *na, l_int32 index, l_float32 diff ); LEPT_DLL extern l_int32 * numaGetIArray ( NUMA *na ); LEPT_DLL extern l_float32 * numaGetFArray ( NUMA *na, l_int32 copyflag ); LEPT_DLL extern l_ok numaGetParameters ( NUMA *na, l_float32 *pstartx, l_float32 *pdelx ); LEPT_DLL extern l_ok numaSetParameters ( NUMA *na, l_float32 startx, l_float32 delx ); LEPT_DLL extern l_ok numaCopyParameters ( NUMA *nad, NUMA *nas ); LEPT_DLL extern SARRAY * numaConvertToSarray ( NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type ); LEPT_DLL extern NUMA * numaRead ( const char *filename ); LEPT_DLL extern NUMA * numaReadStream ( FILE *fp ); LEPT_DLL extern NUMA * numaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok numaWriteDebug ( const char *filename, NUMA *na ); LEPT_DLL extern l_ok numaWrite ( const char *filename, NUMA *na ); LEPT_DLL extern l_ok numaWriteStream ( FILE *fp, NUMA *na ); LEPT_DLL extern l_ok numaWriteStderr ( NUMA *na ); LEPT_DLL extern l_ok numaWriteMem ( l_uint8 **pdata, size_t *psize, NUMA *na ); LEPT_DLL extern NUMAA * numaaCreate ( l_int32 n ); LEPT_DLL extern NUMAA * numaaCreateFull ( l_int32 nptr, l_int32 n ); LEPT_DLL extern l_ok numaaTruncate ( NUMAA *naa ); LEPT_DLL extern void numaaDestroy ( NUMAA **pnaa ); LEPT_DLL extern l_ok numaaAddNuma ( NUMAA *naa, NUMA *na, l_int32 copyflag ); LEPT_DLL extern l_int32 numaaGetCount ( NUMAA *naa ); LEPT_DLL extern l_int32 numaaGetNumaCount ( NUMAA *naa, l_int32 index ); LEPT_DLL extern l_int32 numaaGetNumberCount ( NUMAA *naa ); LEPT_DLL extern NUMA ** numaaGetPtrArray ( NUMAA *naa ); LEPT_DLL extern NUMA * numaaGetNuma ( NUMAA *naa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_ok numaaReplaceNuma ( NUMAA *naa, l_int32 index, NUMA *na ); LEPT_DLL extern l_ok numaaGetValue ( NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival ); LEPT_DLL extern l_ok numaaAddNumber ( NUMAA *naa, l_int32 index, l_float32 val ); LEPT_DLL extern NUMAA * numaaRead ( const char *filename ); LEPT_DLL extern NUMAA * numaaReadStream ( FILE *fp ); LEPT_DLL extern NUMAA * numaaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok numaaWrite ( const char *filename, NUMAA *naa ); LEPT_DLL extern l_ok numaaWriteStream ( FILE *fp, NUMAA *naa ); LEPT_DLL extern l_ok numaaWriteMem ( l_uint8 **pdata, size_t *psize, NUMAA *naa ); LEPT_DLL extern NUMA * numaArithOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); LEPT_DLL extern NUMA * numaLogicalOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); LEPT_DLL extern NUMA * numaInvert ( NUMA *nad, NUMA *nas ); LEPT_DLL extern l_int32 numaSimilar ( NUMA *na1, NUMA *na2, l_float32 maxdiff, l_int32 *psimilar ); LEPT_DLL extern l_ok numaAddToNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_ok numaGetMin ( NUMA *na, l_float32 *pminval, l_int32 *piminloc ); LEPT_DLL extern l_ok numaGetMax ( NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc ); LEPT_DLL extern l_ok numaGetSum ( NUMA *na, l_float32 *psum ); LEPT_DLL extern NUMA * numaGetPartialSums ( NUMA *na ); LEPT_DLL extern l_ok numaGetSumOnInterval ( NUMA *na, l_int32 first, l_int32 last, l_float32 *psum ); LEPT_DLL extern l_ok numaHasOnlyIntegers ( NUMA *na, l_int32 *pallints ); LEPT_DLL extern l_ok numaGetMean ( NUMA *na, l_float32 *pave ); LEPT_DLL extern l_ok numaGetMeanAbsval ( NUMA *na, l_float32 *paveabs ); LEPT_DLL extern NUMA * numaSubsample ( NUMA *nas, l_int32 subfactor ); LEPT_DLL extern NUMA * numaMakeDelta ( NUMA *nas ); LEPT_DLL extern NUMA * numaMakeSequence ( l_float32 startval, l_float32 increment, l_int32 size ); LEPT_DLL extern NUMA * numaMakeConstant ( l_float32 val, l_int32 size ); LEPT_DLL extern NUMA * numaMakeAbsval ( NUMA *nad, NUMA *nas ); LEPT_DLL extern NUMA * numaAddBorder ( NUMA *nas, l_int32 left, l_int32 right, l_float32 val ); LEPT_DLL extern NUMA * numaAddSpecifiedBorder ( NUMA *nas, l_int32 left, l_int32 right, l_int32 type ); LEPT_DLL extern NUMA * numaRemoveBorder ( NUMA *nas, l_int32 left, l_int32 right ); LEPT_DLL extern l_ok numaCountNonzeroRuns ( NUMA *na, l_int32 *pcount ); LEPT_DLL extern l_ok numaGetNonzeroRange ( NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast ); LEPT_DLL extern l_ok numaGetCountRelativeToZero ( NUMA *na, l_int32 type, l_int32 *pcount ); LEPT_DLL extern NUMA * numaClipToInterval ( NUMA *nas, l_int32 first, l_int32 last ); LEPT_DLL extern NUMA * numaMakeThresholdIndicator ( NUMA *nas, l_float32 thresh, l_int32 type ); LEPT_DLL extern NUMA * numaUniformSampling ( NUMA *nas, l_int32 nsamp ); LEPT_DLL extern NUMA * numaReverse ( NUMA *nad, NUMA *nas ); LEPT_DLL extern NUMA * numaLowPassIntervals ( NUMA *nas, l_float32 thresh, l_float32 maxn ); LEPT_DLL extern NUMA * numaThresholdEdges ( NUMA *nas, l_float32 thresh1, l_float32 thresh2, l_float32 maxn ); LEPT_DLL extern l_int32 numaGetSpanValues ( NUMA *na, l_int32 span, l_int32 *pstart, l_int32 *pend ); LEPT_DLL extern l_int32 numaGetEdgeValues ( NUMA *na, l_int32 edge, l_int32 *pstart, l_int32 *pend, l_int32 *psign ); LEPT_DLL extern l_ok numaInterpolateEqxVal ( l_float32 startx, l_float32 deltax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); LEPT_DLL extern l_ok numaInterpolateArbxVal ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); LEPT_DLL extern l_ok numaInterpolateEqxInterval ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern l_ok numaInterpolateArbxInterval ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); LEPT_DLL extern l_ok numaFitMax ( NUMA *na, l_float32 *pmaxval, NUMA *naloc, l_float32 *pmaxloc ); LEPT_DLL extern l_ok numaDifferentiateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); LEPT_DLL extern l_ok numaIntegrateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, l_float32 *psum ); LEPT_DLL extern l_ok numaSortGeneral ( NUMA *na, NUMA **pnasort, NUMA **pnaindex, NUMA **pnainvert, l_int32 sortorder, l_int32 sorttype ); LEPT_DLL extern NUMA * numaSortAutoSelect ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaSortIndexAutoSelect ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern l_int32 numaChooseSortType ( NUMA *nas ); LEPT_DLL extern NUMA * numaSort ( NUMA *naout, NUMA *nain, l_int32 sortorder ); LEPT_DLL extern NUMA * numaBinSort ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaGetSortIndex ( NUMA *na, l_int32 sortorder ); LEPT_DLL extern NUMA * numaGetBinSortIndex ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaSortByIndex ( NUMA *nas, NUMA *naindex ); LEPT_DLL extern l_int32 numaIsSorted ( NUMA *nas, l_int32 sortorder, l_int32 *psorted ); LEPT_DLL extern l_ok numaSortPair ( NUMA *nax, NUMA *nay, l_int32 sortorder, NUMA **pnasx, NUMA **pnasy ); LEPT_DLL extern NUMA * numaInvertMap ( NUMA *nas ); LEPT_DLL extern l_ok numaAddSorted ( NUMA *na, l_float32 val ); LEPT_DLL extern l_ok numaFindSortedLoc ( NUMA *na, l_float32 val, l_int32 *pindex ); LEPT_DLL extern NUMA * numaPseudorandomSequence ( l_int32 size, l_int32 seed ); LEPT_DLL extern NUMA * numaRandomPermutation ( NUMA *nas, l_int32 seed ); LEPT_DLL extern l_ok numaGetRankValue ( NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval ); LEPT_DLL extern l_ok numaGetMedian ( NUMA *na, l_float32 *pval ); LEPT_DLL extern l_ok numaGetBinnedMedian ( NUMA *na, l_int32 *pval ); LEPT_DLL extern l_ok numaGetMeanDevFromMedian ( NUMA *na, l_float32 med, l_float32 *pdev ); LEPT_DLL extern l_ok numaGetMedianDevFromMedian ( NUMA *na, l_float32 *pmed, l_float32 *pdev ); LEPT_DLL extern l_ok numaGetMode ( NUMA *na, l_float32 *pval, l_int32 *pcount ); LEPT_DLL extern l_ok numaJoin ( NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_ok numaaJoin ( NUMAA *naad, NUMAA *naas, l_int32 istart, l_int32 iend ); LEPT_DLL extern NUMA * numaaFlattenToNuma ( NUMAA *naa ); LEPT_DLL extern NUMA * numaErode ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaDilate ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaOpen ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaClose ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaTransform ( NUMA *nas, l_float32 shift, l_float32 scale ); LEPT_DLL extern l_ok numaSimpleStats ( NUMA *na, l_int32 first, l_int32 last, l_float32 *pmean, l_float32 *pvar, l_float32 *prvar ); LEPT_DLL extern l_ok numaWindowedStats ( NUMA *nas, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv ); LEPT_DLL extern NUMA * numaWindowedMean ( NUMA *nas, l_int32 wc ); LEPT_DLL extern NUMA * numaWindowedMeanSquare ( NUMA *nas, l_int32 wc ); LEPT_DLL extern l_ok numaWindowedVariance ( NUMA *nam, NUMA *nams, NUMA **pnav, NUMA **pnarv ); LEPT_DLL extern NUMA * numaWindowedMedian ( NUMA *nas, l_int32 halfwin ); LEPT_DLL extern NUMA * numaConvertToInt ( NUMA *nas ); LEPT_DLL extern NUMA * numaMakeHistogram ( NUMA *na, l_int32 maxbins, l_int32 *pbinsize, l_int32 *pbinstart ); LEPT_DLL extern NUMA * numaMakeHistogramAuto ( NUMA *na, l_int32 maxbins ); LEPT_DLL extern NUMA * numaMakeHistogramClipped ( NUMA *na, l_float32 binsize, l_float32 maxsize ); LEPT_DLL extern NUMA * numaRebinHistogram ( NUMA *nas, l_int32 newsize ); LEPT_DLL extern NUMA * numaNormalizeHistogram ( NUMA *nas, l_float32 tsum ); LEPT_DLL extern l_ok numaGetStatsUsingHistogram ( NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto ); LEPT_DLL extern l_ok numaGetHistogramStats ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); LEPT_DLL extern l_ok numaGetHistogramStatsOnInterval ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_int32 ifirst, l_int32 ilast, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); LEPT_DLL extern l_ok numaMakeRankFromHistogram ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 npts, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern l_ok numaHistogramGetRankFromVal ( NUMA *na, l_float32 rval, l_float32 *prank ); LEPT_DLL extern l_ok numaHistogramGetValFromRank ( NUMA *na, l_float32 rank, l_float32 *prval ); LEPT_DLL extern l_ok numaDiscretizeSortedInBins ( NUMA *na, l_int32 nbins, NUMA **pnabinval ); LEPT_DLL extern l_ok numaDiscretizeHistoInBins ( NUMA *na, l_int32 nbins, NUMA **pnabinval, NUMA **pnarank ); LEPT_DLL extern l_ok numaGetRankBinValues ( NUMA *na, l_int32 nbins, NUMA **pnam ); LEPT_DLL extern NUMA * numaGetUniformBinSizes ( l_int32 ntotal, l_int32 nbins ); LEPT_DLL extern l_ok numaSplitDistribution ( NUMA *na, l_float32 scorefract, l_int32 *psplitindex, l_float32 *pave1, l_float32 *pave2, l_float32 *pnum1, l_float32 *pnum2, NUMA **pnascore ); LEPT_DLL extern l_ok grayHistogramsToEMD ( NUMAA *naa1, NUMAA *naa2, NUMA **pnad ); LEPT_DLL extern l_ok numaEarthMoverDistance ( NUMA *na1, NUMA *na2, l_float32 *pdist ); LEPT_DLL extern l_ok grayInterHistogramStats ( NUMAA *naa, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv ); LEPT_DLL extern NUMA * numaFindPeaks ( NUMA *nas, l_int32 nmax, l_float32 fract1, l_float32 fract2 ); LEPT_DLL extern NUMA * numaFindExtrema ( NUMA *nas, l_float32 delta, NUMA **pnav ); LEPT_DLL extern l_ok numaFindLocForThreshold ( NUMA *na, l_int32 skip, l_int32 *pthresh, l_float32 *pfract ); LEPT_DLL extern l_ok numaCountReversals ( NUMA *nas, l_float32 minreversal, l_int32 *pnr, l_float32 *prd ); LEPT_DLL extern l_ok numaSelectCrossingThreshold ( NUMA *nax, NUMA *nay, l_float32 estthresh, l_float32 *pbestthresh ); LEPT_DLL extern NUMA * numaCrossingsByThreshold ( NUMA *nax, NUMA *nay, l_float32 thresh ); LEPT_DLL extern NUMA * numaCrossingsByPeaks ( NUMA *nax, NUMA *nay, l_float32 delta ); LEPT_DLL extern l_ok numaEvalBestHaarParameters ( NUMA *nas, l_float32 relweight, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore ); LEPT_DLL extern l_ok numaEvalHaarSum ( NUMA *nas, l_float32 width, l_float32 shift, l_float32 relweight, l_float32 *pscore ); LEPT_DLL extern NUMA * genConstrainedNumaInRange ( l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs ); LEPT_DLL extern l_ok pixGetRegionsBinary ( PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, PIXA *pixadb ); LEPT_DLL extern PIX * pixGenHalftoneMask ( PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug ); LEPT_DLL extern PIX * pixGenerateHalftoneMask ( PIX *pixs, PIX **ppixtext, l_int32 *phtfound, PIXA *pixadb ); LEPT_DLL extern PIX * pixGenTextlineMask ( PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, PIXA *pixadb ); LEPT_DLL extern PIX * pixGenTextblockMask ( PIX *pixs, PIX *pixvws, PIXA *pixadb ); LEPT_DLL extern PIX * pixCropImage ( PIX *pixs, l_int32 lr_clear, l_int32 tb_clear, l_int32 edgeclean, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, l_int32 printwiden, const char *debugfile, BOX **pcropbox ); LEPT_DLL extern PIX * pixCleanImage ( PIX *pixs, l_int32 contrast, l_int32 rotation, l_int32 scale, l_int32 opensize ); LEPT_DLL extern BOX * pixFindPageForeground ( PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 showmorph, PIXAC *pixac ); LEPT_DLL extern l_ok pixSplitIntoCharacters ( PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug ); LEPT_DLL extern BOXA * pixSplitComponentWithProfile ( PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug ); LEPT_DLL extern PIXA * pixExtractTextlines ( PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 minw, l_int32 minh, l_int32 adjw, l_int32 adjh, PIXA *pixadb ); LEPT_DLL extern PIXA * pixExtractRawTextlines ( PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 adjw, l_int32 adjh, PIXA *pixadb ); LEPT_DLL extern l_ok pixCountTextColumns ( PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb ); LEPT_DLL extern l_ok pixDecideIfText ( PIX *pixs, BOX *box, l_int32 *pistext, PIXA *pixadb ); LEPT_DLL extern l_ok pixFindThreshFgExtent ( PIX *pixs, l_int32 thresh, l_int32 *ptop, l_int32 *pbot ); LEPT_DLL extern l_ok pixDecideIfTable ( PIX *pixs, BOX *box, l_int32 orient, l_int32 *pscore, PIXA *pixadb ); LEPT_DLL extern PIX * pixPrepare1bpp ( PIX *pixs, BOX *box, l_float32 cropfract, l_int32 outres ); LEPT_DLL extern l_ok pixEstimateBackground ( PIX *pixs, l_int32 darkthresh, l_float32 edgecrop, l_int32 *pbg ); LEPT_DLL extern l_ok pixFindLargeRectangles ( PIX *pixs, l_int32 polarity, l_int32 nrect, BOXA **pboxa, PIX **ppixdb ); LEPT_DLL extern l_ok pixFindLargestRectangle ( PIX *pixs, l_int32 polarity, BOX **pbox, PIX **ppixdb ); LEPT_DLL extern BOX * pixFindRectangleInCC ( PIX *pixs, BOX *boxs, l_float32 fract, l_int32 dir, l_int32 select, l_int32 debug ); LEPT_DLL extern PIX * pixAutoPhotoinvert ( PIX *pixs, l_int32 thresh, PIX **ppixm, PIXA *pixadb ); LEPT_DLL extern l_ok pixSetSelectCmap ( PIX *pixs, BOX *box, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixColorGrayRegionsCmap ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixColorGrayCmap ( PIX *pixs, BOX *box, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixColorGrayMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok addColorizedGrayToCmap ( PIXCMAP *cmap, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval, NUMA **pna ); LEPT_DLL extern l_ok pixSetSelectMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixSetMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern char * parseForProtos ( const char *filein, const char *prestring ); LEPT_DLL extern l_ok partifyFiles ( const char *dirname, const char *substr, l_int32 nparts, const char *outroot, const char *debugfile ); LEPT_DLL extern l_ok partifyPixac ( PIXAC *pixac, l_int32 nparts, const char *outroot, PIXA *pixadb ); LEPT_DLL extern BOXA * boxaGetWhiteblocks ( BOXA *boxas, BOX *box, l_int32 sortflag, l_int32 maxboxes, l_float32 maxoverlap, l_int32 maxperim, l_float32 fract, l_int32 maxpops ); LEPT_DLL extern BOXA * boxaPruneSortedOnOverlap ( BOXA *boxas, l_float32 maxoverlap ); LEPT_DLL extern l_ok compressFilesToPdf ( SARRAY *sa, l_int32 onebit, l_int32 savecolor, l_float32 scalefactor, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_ok cropFilesToPdf ( SARRAY *sa, l_int32 lr_clear, l_int32 tb_clear, l_int32 edgeclean, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, l_int32 printwiden, const char *title, const char *fileout ); LEPT_DLL extern l_ok cleanTo1bppFilesToPdf ( SARRAY *sa, l_int32 res, l_int32 contrast, l_int32 rotation, l_int32 opensize, const char *title, const char *fileout ); LEPT_DLL extern l_ok convertFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_ok saConvertFilesToPdf ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_ok saConvertFilesToPdfData ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok selectDefaultPdfEncoding ( PIX *pix, l_int32 *ptype ); LEPT_DLL extern l_ok convertUnscaledFilesToPdf ( const char *dirname, const char *substr, const char *title, const char *fileout ); LEPT_DLL extern l_ok saConvertUnscaledFilesToPdf ( SARRAY *sa, const char *title, const char *fileout ); LEPT_DLL extern l_ok saConvertUnscaledFilesToPdfData ( SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok convertUnscaledToPdfData ( const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixaConvertToPdf ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_ok pixaConvertToPdfData ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok convertToPdf ( const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok convertImageDataToPdf ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok convertToPdfData ( const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok convertImageDataToPdfData ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok pixConvertToPdf ( PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok pixWriteStreamPdf ( FILE *fp, PIX *pix, l_int32 res, const char *title ); LEPT_DLL extern l_ok pixWriteMemPdf ( l_uint8 **pdata, size_t *pnbytes, PIX *pix, l_int32 res, const char *title ); LEPT_DLL extern l_ok convertSegmentedFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern BOXAA * convertNumberedMasksToBoxaa ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost ); LEPT_DLL extern l_ok convertToPdfSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern l_ok pixConvertToPdfSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern l_ok convertToPdfDataSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixConvertToPdfDataSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok concatenatePdf ( const char *dirname, const char *substr, const char *fileout ); LEPT_DLL extern l_ok saConcatenatePdf ( SARRAY *sa, const char *fileout ); LEPT_DLL extern l_ok ptraConcatenatePdf ( L_PTRA *pa, const char *fileout ); LEPT_DLL extern l_ok concatenatePdfToData ( const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok saConcatenatePdfToData ( SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixConvertToPdfData ( PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_ok ptraConcatenatePdfToData ( L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok convertTiffMultipageToPdf ( const char *filein, const char *fileout ); LEPT_DLL extern l_ok l_generateCIDataForPdf ( const char *fname, PIX *pix, l_int32 quality, L_COMP_DATA **pcid ); LEPT_DLL extern l_ok l_generateCIData ( const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); LEPT_DLL extern L_COMP_DATA * l_generateFlateDataPdf ( const char *fname, PIX *pixs ); LEPT_DLL extern L_COMP_DATA * l_generateJpegData ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern L_COMP_DATA * l_generateJpegDataMem ( l_uint8 *data, size_t nbytes, l_int32 ascii85flag ); LEPT_DLL extern L_COMP_DATA * l_generateG4Data ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern l_ok pixGenerateCIData ( PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); LEPT_DLL extern L_COMP_DATA * l_generateFlateData ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern l_ok cidConvertToPdfData ( L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern void l_CIDataDestroy ( L_COMP_DATA **pcid ); LEPT_DLL extern l_ok getPdfPageCount ( const char *fname, l_int32 *pnpages ); LEPT_DLL extern l_ok getPdfPageSizes ( const char *fname, NUMA **pnaw, NUMA **pnah, l_int32 *pmedw, l_int32 *pmedh ); LEPT_DLL extern l_ok getPdfMediaBoxSizes ( const char *fname, NUMA **pnaw, NUMA **pnah, l_int32 *pmedw, l_int32 *pmedh ); LEPT_DLL extern l_ok getPdfRendererResolution ( const char *infile, const char *outdir, l_int32 *pres ); LEPT_DLL extern void l_pdfSetG4ImageMask ( l_int32 flag ); LEPT_DLL extern void l_pdfSetDateAndVersion ( l_int32 flag ); LEPT_DLL extern void setPixMemoryManager ( alloc_fn allocator, dealloc_fn deallocator ); LEPT_DLL extern PIX * pixCreate ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixCreateNoInit ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixCreateTemplate ( const PIX *pixs ); LEPT_DLL extern PIX * pixCreateTemplateNoInit ( const PIX *pixs ); LEPT_DLL extern PIX * pixCreateWithCmap ( l_int32 width, l_int32 height, l_int32 depth, l_int32 initcolor ); LEPT_DLL extern PIX * pixCreateHeader ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixClone ( PIX *pixs ); LEPT_DLL extern void pixDestroy ( PIX **ppix ); LEPT_DLL extern PIX * pixCopy ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_ok pixResizeImageData ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_ok pixCopyColormap ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_ok pixTransferAllData ( PIX *pixd, PIX **ppixs, l_int32 copytext, l_int32 copyformat ); LEPT_DLL extern l_ok pixSwapAndDestroy ( PIX **ppixd, PIX **ppixs ); LEPT_DLL extern l_int32 pixGetWidth ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetWidth ( PIX *pix, l_int32 width ); LEPT_DLL extern l_int32 pixGetHeight ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetHeight ( PIX *pix, l_int32 height ); LEPT_DLL extern l_int32 pixGetDepth ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetDepth ( PIX *pix, l_int32 depth ); LEPT_DLL extern l_ok pixGetDimensions ( const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern l_ok pixSetDimensions ( PIX *pix, l_int32 w, l_int32 h, l_int32 d ); LEPT_DLL extern l_ok pixCopyDimensions ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_int32 pixGetSpp ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetSpp ( PIX *pix, l_int32 spp ); LEPT_DLL extern l_ok pixCopySpp ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_int32 pixGetWpl ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetWpl ( PIX *pix, l_int32 wpl ); LEPT_DLL extern l_int32 pixGetXRes ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetXRes ( PIX *pix, l_int32 res ); LEPT_DLL extern l_int32 pixGetYRes ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetYRes ( PIX *pix, l_int32 res ); LEPT_DLL extern l_ok pixGetResolution ( const PIX *pix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok pixSetResolution ( PIX *pix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_int32 pixCopyResolution ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_int32 pixScaleResolution ( PIX *pix, l_float32 xscale, l_float32 yscale ); LEPT_DLL extern l_int32 pixGetInputFormat ( const PIX *pix ); LEPT_DLL extern l_int32 pixSetInputFormat ( PIX *pix, l_int32 informat ); LEPT_DLL extern l_int32 pixCopyInputFormat ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_int32 pixSetSpecial ( PIX *pix, l_int32 special ); LEPT_DLL extern char * pixGetText ( PIX *pix ); LEPT_DLL extern l_ok pixSetText ( PIX *pix, const char *textstring ); LEPT_DLL extern l_ok pixAddText ( PIX *pix, const char *textstring ); LEPT_DLL extern l_int32 pixCopyText ( PIX *pixd, const PIX *pixs ); LEPT_DLL extern l_uint8 * pixGetTextCompNew ( PIX *pix, size_t *psize ); LEPT_DLL extern l_ok pixSetTextCompNew ( PIX *pix, const l_uint8 *data, size_t size ); LEPT_DLL extern PIXCMAP * pixGetColormap ( PIX *pix ); LEPT_DLL extern l_ok pixSetColormap ( PIX *pix, PIXCMAP *colormap ); LEPT_DLL extern l_ok pixDestroyColormap ( PIX *pix ); LEPT_DLL extern l_uint32 * pixGetData ( PIX *pix ); LEPT_DLL extern l_int32 pixFreeAndSetData ( PIX *pix, l_uint32 *data ); LEPT_DLL extern l_int32 pixSetData ( PIX *pix, l_uint32 *data ); LEPT_DLL extern l_int32 pixFreeData ( PIX *pix ); LEPT_DLL extern l_uint32 * pixExtractData ( PIX *pixs ); LEPT_DLL extern void ** pixGetLinePtrs ( PIX *pix, l_int32 *psize ); LEPT_DLL extern l_int32 pixSizesEqual ( const PIX *pix1, const PIX *pix2 ); LEPT_DLL extern l_ok pixMaxAspectRatio ( PIX *pixs, l_float32 *pratio ); LEPT_DLL extern l_ok pixPrintStreamInfo ( FILE *fp, const PIX *pix, const char *text ); LEPT_DLL extern l_ok pixGetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval ); LEPT_DLL extern l_ok pixSetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 val ); LEPT_DLL extern l_ok pixGetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_ok pixSetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixSetCmapPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_ok pixGetRandomPixel ( PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py ); LEPT_DLL extern l_ok pixClearPixel ( PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixFlipPixel ( PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern void setPixelLow ( l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val ); LEPT_DLL extern l_ok pixGetBlackOrWhiteVal ( PIX *pixs, l_int32 op, l_uint32 *pval ); LEPT_DLL extern l_ok pixClearAll ( PIX *pix ); LEPT_DLL extern l_ok pixSetAll ( PIX *pix ); LEPT_DLL extern l_ok pixSetAllGray ( PIX *pix, l_int32 grayval ); LEPT_DLL extern l_ok pixSetAllArbitrary ( PIX *pix, l_uint32 val ); LEPT_DLL extern l_ok pixSetBlackOrWhite ( PIX *pixs, l_int32 op ); LEPT_DLL extern l_ok pixSetComponentArbitrary ( PIX *pix, l_int32 comp, l_int32 val ); LEPT_DLL extern l_ok pixClearInRect ( PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixSetInRect ( PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixSetInRectArbitrary ( PIX *pix, BOX *box, l_uint32 val ); LEPT_DLL extern l_ok pixBlendInRect ( PIX *pixs, BOX *box, l_uint32 val, l_float32 fract ); LEPT_DLL extern l_ok pixSetPadBits ( PIX *pix, l_int32 val ); LEPT_DLL extern l_ok pixSetPadBitsBand ( PIX *pix, l_int32 by, l_int32 bh, l_int32 val ); LEPT_DLL extern l_ok pixSetOrClearBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); LEPT_DLL extern l_ok pixSetBorderVal ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern l_ok pixSetBorderRingVal ( PIX *pixs, l_int32 dist, l_uint32 val ); LEPT_DLL extern l_ok pixSetMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixCopyBorder ( PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddBorder ( PIX *pixs, l_int32 npix, l_uint32 val ); LEPT_DLL extern PIX * pixAddBlackOrWhiteBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); LEPT_DLL extern PIX * pixAddBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern PIX * pixAddMultipleBlackWhiteBorders ( PIX *pixs, l_int32 nblack1, l_int32 nwhite1, l_int32 nblack2, l_int32 nwhite2, l_int32 nblack3, l_int32 nwhite3 ); LEPT_DLL extern PIX * pixRemoveBorder ( PIX *pixs, l_int32 npix ); LEPT_DLL extern PIX * pixRemoveBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixRemoveBorderToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixAddMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddRepeatedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddMixedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddContinuedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern l_ok pixShiftAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty ); LEPT_DLL extern PIX * pixDisplayLayersRGBA ( PIX *pixs, l_uint32 val, l_int32 maxw ); LEPT_DLL extern PIX * pixCreateRGBImage ( PIX *pixr, PIX *pixg, PIX *pixb ); LEPT_DLL extern PIX * pixGetRGBComponent ( PIX *pixs, l_int32 comp ); LEPT_DLL extern l_ok pixSetRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); LEPT_DLL extern PIX * pixGetRGBComponentCmap ( PIX *pixs, l_int32 comp ); LEPT_DLL extern l_ok pixCopyRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); LEPT_DLL extern l_ok composeRGBPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel ); LEPT_DLL extern l_ok composeRGBAPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel ); LEPT_DLL extern void extractRGBValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern void extractRGBAValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); LEPT_DLL extern l_int32 extractMinMaxComponent ( l_uint32 pixel, l_int32 type ); LEPT_DLL extern l_ok pixGetRGBLine ( PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb ); LEPT_DLL extern l_ok setLineDataVal ( l_uint32 *line, l_int32 j, l_int32 d, l_uint32 val ); LEPT_DLL extern PIX * pixEndianByteSwapNew ( PIX *pixs ); LEPT_DLL extern l_ok pixEndianByteSwap ( PIX *pixs ); LEPT_DLL extern l_int32 lineEndianByteSwap ( l_uint32 *datad, l_uint32 *datas, l_int32 wpl ); LEPT_DLL extern PIX * pixEndianTwoByteSwapNew ( PIX *pixs ); LEPT_DLL extern l_ok pixEndianTwoByteSwap ( PIX *pixs ); LEPT_DLL extern l_ok pixGetRasterData ( PIX *pixs, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixInferResolution ( PIX *pix, l_float32 longside, l_int32 *pres ); LEPT_DLL extern l_ok pixAlphaIsOpaque ( PIX *pix, l_int32 *popaque ); LEPT_DLL extern l_uint8 ** pixSetupByteProcessing ( PIX *pix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok pixCleanupByteProcessing ( PIX *pix, l_uint8 **lineptrs ); LEPT_DLL extern void l_setAlphaMaskBorder ( l_float32 val1, l_float32 val2 ); LEPT_DLL extern l_ok pixSetMasked ( PIX *pixd, PIX *pixm, l_uint32 val ); LEPT_DLL extern l_ok pixSetMaskedGeneral ( PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixCombineMasked ( PIX *pixd, PIX *pixs, PIX *pixm ); LEPT_DLL extern l_ok pixCombineMaskedGeneral ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixPaintThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val ); LEPT_DLL extern PIX * pixCopyWithBoxa ( PIX *pixs, BOXA *boxa, l_int32 background ); LEPT_DLL extern l_ok pixPaintSelfThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 searchdir, l_int32 mindist, l_int32 tilesize, l_int32 ntiles, l_int32 distblend ); LEPT_DLL extern PIX * pixMakeMaskFromVal ( PIX *pixs, l_int32 val ); LEPT_DLL extern PIX * pixMakeMaskFromLUT ( PIX *pixs, l_int32 *tab ); LEPT_DLL extern PIX * pixMakeArbMaskFromRGB ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_float32 thresh ); LEPT_DLL extern PIX * pixSetUnderTransparency ( PIX *pixs, l_uint32 val, l_int32 debug ); LEPT_DLL extern PIX * pixMakeAlphaFromMask ( PIX *pixs, l_int32 dist, BOX **pbox ); LEPT_DLL extern l_ok pixGetColorNearMaskBoundary ( PIX *pixs, PIX *pixm, BOX *box, l_int32 dist, l_uint32 *pval, l_int32 debug ); LEPT_DLL extern PIX * pixDisplaySelectedPixels ( PIX *pixs, PIX *pixm, SEL *sel, l_uint32 val ); LEPT_DLL extern PIX * pixInvert ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixOr ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixAnd ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixXor ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixSubtract ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern l_ok pixZero ( PIX *pix, l_int32 *pempty ); LEPT_DLL extern l_ok pixForegroundFraction ( PIX *pix, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaCountPixels ( PIXA *pixa ); LEPT_DLL extern l_ok pixCountPixels ( PIX *pixs, l_int32 *pcount, l_int32 *tab8 ); LEPT_DLL extern l_ok pixCountPixelsInRect ( PIX *pixs, BOX *box, l_int32 *pcount, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixCountByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixCountByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixCountPixelsByRow ( PIX *pix, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixCountPixelsByColumn ( PIX *pix ); LEPT_DLL extern l_ok pixCountPixelsInRow ( PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixGetMomentByColumn ( PIX *pix, l_int32 order ); LEPT_DLL extern l_ok pixThresholdPixelSum ( PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8 ); LEPT_DLL extern l_int32 * makePixelSumTab8 ( void ); LEPT_DLL extern l_int32 * makePixelCentroidTab8 ( void ); LEPT_DLL extern NUMA * pixAverageByRow ( PIX *pix, BOX *box, l_int32 type ); LEPT_DLL extern NUMA * pixAverageByColumn ( PIX *pix, BOX *box, l_int32 type ); LEPT_DLL extern l_ok pixAverageInRect ( PIX *pixs, PIX *pixm, BOX *box, l_int32 minval, l_int32 maxval, l_int32 subsamp, l_float32 *pave ); LEPT_DLL extern l_ok pixAverageInRectRGB ( PIX *pixs, PIX *pixm, BOX *box, l_int32 subsamp, l_uint32 *pave ); LEPT_DLL extern NUMA * pixVarianceByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixVarianceByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixVarianceInRect ( PIX *pix, BOX *box, l_float32 *prootvar ); LEPT_DLL extern NUMA * pixAbsDiffByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixAbsDiffByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixAbsDiffInRect ( PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff ); LEPT_DLL extern l_ok pixAbsDiffOnLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff ); LEPT_DLL extern l_int32 pixCountArbInRect ( PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount ); LEPT_DLL extern PIX * pixMirroredTiling ( PIX *pixs, l_int32 w, l_int32 h ); LEPT_DLL extern l_ok pixFindRepCloseTile ( PIX *pixs, BOX *box, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles, BOX **pboxtile, l_int32 debug ); LEPT_DLL extern NUMA * pixGetGrayHistogram ( PIX *pixs, l_int32 factor ); LEPT_DLL extern NUMA * pixGetGrayHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); LEPT_DLL extern NUMA * pixGetGrayHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); LEPT_DLL extern NUMAA * pixGetGrayHistogramTiled ( PIX *pixs, l_int32 factor, l_int32 nx, l_int32 ny ); LEPT_DLL extern l_ok pixGetColorHistogram ( PIX *pixs, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); LEPT_DLL extern l_ok pixGetColorHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); LEPT_DLL extern NUMA * pixGetCmapHistogram ( PIX *pixs, l_int32 factor ); LEPT_DLL extern NUMA * pixGetCmapHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); LEPT_DLL extern NUMA * pixGetCmapHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); LEPT_DLL extern l_ok pixCountRGBColorsByHash ( PIX *pixs, l_int32 *pncolors ); LEPT_DLL extern l_ok pixCountRGBColors ( PIX *pixs, l_int32 factor, l_int32 *pncolors ); LEPT_DLL extern L_AMAP * pixGetColorAmapHistogram ( PIX *pixs, l_int32 factor ); LEPT_DLL extern l_int32 amapGetCountForColor ( L_AMAP *amap, l_uint32 val ); LEPT_DLL extern l_ok pixGetRankValue ( PIX *pixs, l_int32 factor, l_float32 rank, l_uint32 *pvalue ); LEPT_DLL extern l_ok pixGetRankValueMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); LEPT_DLL extern l_ok pixGetRankValueMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna ); LEPT_DLL extern l_ok pixGetPixelAverage ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_uint32 *pval ); LEPT_DLL extern l_ok pixGetPixelStats ( PIX *pixs, l_int32 factor, l_int32 type, l_uint32 *pvalue ); LEPT_DLL extern l_ok pixGetAverageMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); LEPT_DLL extern l_ok pixGetAverageMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval ); LEPT_DLL extern l_ok pixGetAverageTiledRGB ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern PIX * pixGetAverageTiled ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type ); LEPT_DLL extern l_int32 pixRowStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); LEPT_DLL extern l_int32 pixColumnStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); LEPT_DLL extern l_ok pixGetRangeValues ( PIX *pixs, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval ); LEPT_DLL extern l_ok pixGetExtremeValue ( PIX *pixs, l_int32 factor, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *pgrayval ); LEPT_DLL extern l_ok pixGetMaxValueInRect ( PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax ); LEPT_DLL extern l_ok pixGetMaxColorIndex ( PIX *pixs, l_int32 *pmaxindex ); LEPT_DLL extern l_ok pixGetBinnedComponentRange ( PIX *pixs, l_int32 nbins, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval, l_uint32 **pcarray, l_int32 fontsize ); LEPT_DLL extern l_ok pixGetRankColorArray ( PIX *pixs, l_int32 nbins, l_int32 type, l_int32 factor, l_uint32 **pcarray, PIXA *pixadb, l_int32 fontsize ); LEPT_DLL extern l_ok pixGetBinnedColor ( PIX *pixs, PIX *pixg, l_int32 factor, l_int32 nbins, l_uint32 **pcarray, PIXA *pixadb ); LEPT_DLL extern PIX * pixDisplayColorArray ( l_uint32 *carray, l_int32 ncolors, l_int32 side, l_int32 ncols, l_int32 fontsize ); LEPT_DLL extern PIX * pixRankBinByStrip ( PIX *pixs, l_int32 direction, l_int32 size, l_int32 nbins, l_int32 type ); LEPT_DLL extern PIX * pixaGetAlignedStats ( PIXA *pixa, l_int32 type, l_int32 nbins, l_int32 thresh ); LEPT_DLL extern l_ok pixaExtractColumnFromEachPix ( PIXA *pixa, l_int32 col, PIX *pixd ); LEPT_DLL extern l_ok pixGetRowStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *colvect ); LEPT_DLL extern l_ok pixGetColumnStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *rowvect ); LEPT_DLL extern l_ok pixSetPixelColumn ( PIX *pix, l_int32 col, l_float32 *colvect ); LEPT_DLL extern l_ok pixThresholdForFgBg ( PIX *pixs, l_int32 factor, l_int32 thresh, l_int32 *pfgval, l_int32 *pbgval ); LEPT_DLL extern l_ok pixSplitDistributionFgBg ( PIX *pixs, l_float32 scorefract, l_int32 factor, l_int32 *pthresh, l_int32 *pfgval, l_int32 *pbgval, PIX **ppixdb ); LEPT_DLL extern l_ok pixaFindDimensions ( PIXA *pixa, NUMA **pnaw, NUMA **pnah ); LEPT_DLL extern l_ok pixFindAreaPerimRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindPerimToAreaRatio ( PIXA *pixa ); LEPT_DLL extern l_ok pixFindPerimToAreaRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindPerimSizeRatio ( PIXA *pixa ); LEPT_DLL extern l_ok pixFindPerimSizeRatio ( PIX *pixs, l_int32 *tab, l_float32 *pratio ); LEPT_DLL extern NUMA * pixaFindAreaFraction ( PIXA *pixa ); LEPT_DLL extern l_ok pixFindAreaFraction ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindAreaFractionMasked ( PIXA *pixa, PIX *pixm, l_int32 debug ); LEPT_DLL extern l_ok pixFindAreaFractionMasked ( PIX *pixs, BOX *box, PIX *pixm, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindWidthHeightRatio ( PIXA *pixa ); LEPT_DLL extern NUMA * pixaFindWidthHeightProduct ( PIXA *pixa ); LEPT_DLL extern l_ok pixFindOverlapFraction ( PIX *pixs1, PIX *pixs2, l_int32 x2, l_int32 y2, l_int32 *tab, l_float32 *pratio, l_int32 *pnoverlap ); LEPT_DLL extern BOXA * pixFindRectangleComps ( PIX *pixs, l_int32 dist, l_int32 minw, l_int32 minh ); LEPT_DLL extern l_ok pixConformsToRectangle ( PIX *pixs, BOX *box, l_int32 dist, l_int32 *pconforms ); LEPT_DLL extern PIX * pixExtractRectangularRegions ( PIX *pixs, BOXA *boxa ); LEPT_DLL extern PIXA * pixClipRectangles ( PIX *pixs, BOXA *boxa ); LEPT_DLL extern PIX * pixClipRectangle ( PIX *pixs, BOX *box, BOX **pboxc ); LEPT_DLL extern PIX * pixClipRectangleWithBorder ( PIX *pixs, BOX *box, l_int32 maxbord, BOX **pboxn ); LEPT_DLL extern PIX * pixClipMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_uint32 outval ); LEPT_DLL extern l_ok pixCropToMatch ( PIX *pixs1, PIX *pixs2, PIX **ppixd1, PIX **ppixd2 ); LEPT_DLL extern PIX * pixCropToSize ( PIX *pixs, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixResizeToMatch ( PIX *pixs, PIX *pixt, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixSelectComponentBySize ( PIX *pixs, l_int32 rankorder, l_int32 type, l_int32 connectivity, BOX **pbox ); LEPT_DLL extern PIX * pixFilterComponentBySize ( PIX *pixs, l_int32 rankorder, l_int32 type, l_int32 connectivity, BOX **pbox ); LEPT_DLL extern PIX * pixMakeSymmetricMask ( l_int32 w, l_int32 h, l_float32 hf, l_float32 vf, l_int32 type ); LEPT_DLL extern PIX * pixMakeFrameMask ( l_int32 w, l_int32 h, l_float32 hf1, l_float32 hf2, l_float32 vf1, l_float32 vf2 ); LEPT_DLL extern PIX * pixMakeCoveringOfRectangles ( PIX *pixs, l_int32 maxiters ); LEPT_DLL extern l_ok pixFractionFgInMask ( PIX *pix1, PIX *pix2, l_float32 *pfract ); LEPT_DLL extern l_ok pixClipToForeground ( PIX *pixs, PIX **ppixd, BOX **pbox ); LEPT_DLL extern l_ok pixTestClipToForeground ( PIX *pixs, l_int32 *pcanclip ); LEPT_DLL extern l_ok pixClipBoxToForeground ( PIX *pixs, BOX *boxs, PIX **ppixd, BOX **pboxd ); LEPT_DLL extern l_ok pixScanForForeground ( PIX *pixs, BOX *box, l_int32 scanflag, l_int32 *ploc ); LEPT_DLL extern l_ok pixClipBoxToEdges ( PIX *pixs, BOX *boxs, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, PIX **ppixd, BOX **pboxd ); LEPT_DLL extern l_ok pixScanForEdge ( PIX *pixs, BOX *box, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, l_int32 scanflag, l_int32 *ploc ); LEPT_DLL extern NUMA * pixExtractOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); LEPT_DLL extern l_float32 pixAverageOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); LEPT_DLL extern NUMA * pixAverageIntensityProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 factor1, l_int32 factor2 ); LEPT_DLL extern NUMA * pixReversalProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 minreversal, l_int32 factor1, l_int32 factor2 ); LEPT_DLL extern l_ok pixWindowedVarianceOnLine ( PIX *pixs, l_int32 dir, l_int32 loc, l_int32 c1, l_int32 c2, l_int32 size, NUMA **pnad ); LEPT_DLL extern l_ok pixMinMaxNearLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 dist, l_int32 direction, NUMA **pnamin, NUMA **pnamax, l_float32 *pminave, l_float32 *pmaxave ); LEPT_DLL extern PIX * pixRankRowTransform ( PIX *pixs ); LEPT_DLL extern PIX * pixRankColumnTransform ( PIX *pixs ); LEPT_DLL extern PIXA * pixaCreate ( l_int32 n ); LEPT_DLL extern PIXA * pixaCreateFromPix ( PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh ); LEPT_DLL extern PIXA * pixaCreateFromBoxa ( PIX *pixs, BOXA *boxa, l_int32 start, l_int32 num, l_int32 *pcropwarn ); LEPT_DLL extern PIXA * pixaSplitPix ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); LEPT_DLL extern void pixaDestroy ( PIXA **ppixa ); LEPT_DLL extern PIXA * pixaCopy ( PIXA *pixa, l_int32 copyflag ); LEPT_DLL extern l_ok pixaAddPix ( PIXA *pixa, PIX *pix, l_int32 copyflag ); LEPT_DLL extern l_ok pixaAddBox ( PIXA *pixa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_ok pixaExtendArrayToSize ( PIXA *pixa, size_t size ); LEPT_DLL extern l_int32 pixaGetCount ( PIXA *pixa ); LEPT_DLL extern PIX * pixaGetPix ( PIXA *pixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_ok pixaGetPixDimensions ( PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern BOXA * pixaGetBoxa ( PIXA *pixa, l_int32 accesstype ); LEPT_DLL extern l_int32 pixaGetBoxaCount ( PIXA *pixa ); LEPT_DLL extern BOX * pixaGetBox ( PIXA *pixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_ok pixaGetBoxGeometry ( PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_ok pixaSetBoxa ( PIXA *pixa, BOXA *boxa, l_int32 accesstype ); LEPT_DLL extern PIX ** pixaGetPixArray ( PIXA *pixa ); LEPT_DLL extern l_ok pixaVerifyDepth ( PIXA *pixa, l_int32 *psame, l_int32 *pmaxd ); LEPT_DLL extern l_ok pixaVerifyDimensions ( PIXA *pixa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_ok pixaIsFull ( PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba ); LEPT_DLL extern l_ok pixaCountText ( PIXA *pixa, l_int32 *pntext ); LEPT_DLL extern l_ok pixaSetText ( PIXA *pixa, const char *text, SARRAY *sa ); LEPT_DLL extern void *** pixaGetLinePtrs ( PIXA *pixa, l_int32 *psize ); LEPT_DLL extern l_ok pixaWriteStreamInfo ( FILE *fp, PIXA *pixa ); LEPT_DLL extern l_ok pixaReplacePix ( PIXA *pixa, l_int32 index, PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixaInsertPix ( PIXA *pixa, l_int32 index, PIX *pixs, BOX *box ); LEPT_DLL extern l_ok pixaRemovePix ( PIXA *pixa, l_int32 index ); LEPT_DLL extern l_ok pixaRemovePixAndSave ( PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox ); LEPT_DLL extern l_ok pixaRemoveSelected ( PIXA *pixa, NUMA *naindex ); LEPT_DLL extern l_ok pixaInitFull ( PIXA *pixa, PIX *pix, BOX *box ); LEPT_DLL extern l_ok pixaClear ( PIXA *pixa ); LEPT_DLL extern l_ok pixaJoin ( PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PIXA * pixaInterleave ( PIXA *pixa1, PIXA *pixa2, l_int32 copyflag ); LEPT_DLL extern l_ok pixaaJoin ( PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PIXAA * pixaaCreate ( l_int32 n ); LEPT_DLL extern PIXAA * pixaaCreateFromPixa ( PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag ); LEPT_DLL extern void pixaaDestroy ( PIXAA **ppaa ); LEPT_DLL extern l_ok pixaaAddPixa ( PIXAA *paa, PIXA *pixa, l_int32 copyflag ); LEPT_DLL extern l_ok pixaaAddPix ( PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_ok pixaaAddBox ( PIXAA *paa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaaGetCount ( PIXAA *paa, NUMA **pna ); LEPT_DLL extern PIXA * pixaaGetPixa ( PIXAA *paa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern BOXA * pixaaGetBoxa ( PIXAA *paa, l_int32 accesstype ); LEPT_DLL extern PIX * pixaaGetPix ( PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag ); LEPT_DLL extern l_ok pixaaVerifyDepth ( PIXAA *paa, l_int32 *psame, l_int32 *pmaxd ); LEPT_DLL extern l_ok pixaaVerifyDimensions ( PIXAA *paa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_int32 pixaaIsFull ( PIXAA *paa, l_int32 *pfull ); LEPT_DLL extern l_ok pixaaInitFull ( PIXAA *paa, PIXA *pixa ); LEPT_DLL extern l_ok pixaaReplacePixa ( PIXAA *paa, l_int32 index, PIXA *pixa ); LEPT_DLL extern l_ok pixaaClear ( PIXAA *paa ); LEPT_DLL extern l_ok pixaaTruncate ( PIXAA *paa ); LEPT_DLL extern PIXA * pixaRead ( const char *filename ); LEPT_DLL extern PIXA * pixaReadStream ( FILE *fp ); LEPT_DLL extern PIXA * pixaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixaWriteDebug ( const char *fname, PIXA *pixa ); LEPT_DLL extern l_ok pixaWrite ( const char *filename, PIXA *pixa ); LEPT_DLL extern l_ok pixaWriteStream ( FILE *fp, PIXA *pixa ); LEPT_DLL extern l_ok pixaWriteMem ( l_uint8 **pdata, size_t *psize, PIXA *pixa ); LEPT_DLL extern PIXA * pixaReadBoth ( const char *filename ); LEPT_DLL extern PIXAA * pixaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern PIXAA * pixaaRead ( const char *filename ); LEPT_DLL extern PIXAA * pixaaReadStream ( FILE *fp ); LEPT_DLL extern PIXAA * pixaaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixaaWrite ( const char *filename, PIXAA *paa ); LEPT_DLL extern l_ok pixaaWriteStream ( FILE *fp, PIXAA *paa ); LEPT_DLL extern l_ok pixaaWriteMem ( l_uint8 **pdata, size_t *psize, PIXAA *paa ); LEPT_DLL extern PIXACC * pixaccCreate ( l_int32 w, l_int32 h, l_int32 negflag ); LEPT_DLL extern PIXACC * pixaccCreateFromPix ( PIX *pix, l_int32 negflag ); LEPT_DLL extern void pixaccDestroy ( PIXACC **ppixacc ); LEPT_DLL extern PIX * pixaccFinal ( PIXACC *pixacc, l_int32 outdepth ); LEPT_DLL extern PIX * pixaccGetPix ( PIXACC *pixacc ); LEPT_DLL extern l_int32 pixaccGetOffset ( PIXACC *pixacc ); LEPT_DLL extern l_ok pixaccAdd ( PIXACC *pixacc, PIX *pix ); LEPT_DLL extern l_ok pixaccSubtract ( PIXACC *pixacc, PIX *pix ); LEPT_DLL extern l_ok pixaccMultConst ( PIXACC *pixacc, l_float32 factor ); LEPT_DLL extern l_ok pixaccMultConstAccumulate ( PIXACC *pixacc, PIX *pix, l_float32 factor ); LEPT_DLL extern PIX * pixSelectBySize ( PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectBySize ( PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * pixaMakeSizeIndicator ( PIXA *pixa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); LEPT_DLL extern PIX * pixSelectByPerimToAreaRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByPerimToAreaRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByPerimSizeRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByPerimSizeRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByAreaFraction ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByAreaFraction ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByArea ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByArea ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByWidthHeightRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByWidthHeightRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByNumConnComp ( PIXA *pixas, l_int32 nmin, l_int32 nmax, l_int32 connectivity, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectWithIndicator ( PIXA *pixas, NUMA *na, l_int32 *pchanged ); LEPT_DLL extern l_ok pixRemoveWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); LEPT_DLL extern l_ok pixAddWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); LEPT_DLL extern PIXA * pixaSelectWithString ( PIXA *pixas, const char *str, l_int32 *perror ); LEPT_DLL extern PIX * pixaRenderComponent ( PIX *pixs, PIXA *pixa, l_int32 index ); LEPT_DLL extern PIXA * pixaSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaBinSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaSortByIndex ( PIXA *pixas, NUMA *naindex, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaSort2dByIndex ( PIXA *pixas, NUMAA *naa, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaSelectRange ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaaSelectRange ( PIXAA *paas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaaScaleToSize ( PIXAA *paas, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIXAA * pixaaScaleToSizeVar ( PIXAA *paas, NUMA *nawd, NUMA *nahd ); LEPT_DLL extern PIXA * pixaScaleToSize ( PIXA *pixas, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIXA * pixaScaleToSizeRel ( PIXA *pixas, l_int32 delw, l_int32 delh ); LEPT_DLL extern PIXA * pixaScale ( PIXA *pixas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIXA * pixaScaleBySampling ( PIXA *pixas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIXA * pixaRotate ( PIXA *pixas, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height ); LEPT_DLL extern PIXA * pixaRotateOrth ( PIXA *pixas, l_int32 rotation ); LEPT_DLL extern PIXA * pixaTranslate ( PIXA *pixas, l_int32 hshift, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern PIXA * pixaAddBorderGeneral ( PIXA *pixad, PIXA *pixas, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern PIXA * pixaaFlattenToPixa ( PIXAA *paa, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern l_ok pixaaSizeRange ( PIXAA *paa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_ok pixaSizeRange ( PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern PIXA * pixaClipToPix ( PIXA *pixas, PIX *pixs ); LEPT_DLL extern l_ok pixaClipToForeground ( PIXA *pixas, PIXA **ppixad, BOXA **pboxa ); LEPT_DLL extern l_ok pixaGetRenderingDepth ( PIXA *pixa, l_int32 *pdepth ); LEPT_DLL extern l_ok pixaHasColor ( PIXA *pixa, l_int32 *phascolor ); LEPT_DLL extern l_ok pixaAnyColormaps ( PIXA *pixa, l_int32 *phascmap ); LEPT_DLL extern l_ok pixaGetDepthInfo ( PIXA *pixa, l_int32 *pmaxdepth, l_int32 *psame ); LEPT_DLL extern PIXA * pixaConvertToSameDepth ( PIXA *pixas ); LEPT_DLL extern PIXA * pixaConvertToGivenDepth ( PIXA *pixas, l_int32 depth ); LEPT_DLL extern l_ok pixaEqual ( PIXA *pixa1, PIXA *pixa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); LEPT_DLL extern l_ok pixaSetFullSizeBoxa ( PIXA *pixa ); LEPT_DLL extern PIX * pixaDisplay ( PIXA *pixa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaDisplayRandomCmap ( PIXA *pixa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaDisplayLinearly ( PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, BOXA **pboxa ); LEPT_DLL extern PIX * pixaDisplayOnLattice ( PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa ); LEPT_DLL extern PIX * pixaDisplayUnsplit ( PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); LEPT_DLL extern PIX * pixaDisplayTiled ( PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing ); LEPT_DLL extern PIX * pixaDisplayTiledInRows ( PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixaDisplayTiledInColumns ( PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixaDisplayTiledAndScaled ( PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixaDisplayTiledWithText ( PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor ); LEPT_DLL extern PIX * pixaDisplayTiledByIndex ( PIXA *pixa, NUMA *na, l_int32 width, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor ); LEPT_DLL extern PIX * pixaDisplayPairTiledInColumns ( PIXA *pixas1, PIXA *pixas2, l_int32 nx, l_float32 scalefactor, l_int32 spacing1, l_int32 spacing2, l_int32 border1, l_int32 border2, l_int32 fontsize, l_int32 startindex, SARRAY *sa ); LEPT_DLL extern PIX * pixaaDisplay ( PIXAA *paa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaaDisplayByPixa ( PIXAA *paa, l_int32 maxnx, l_float32 scalefactor, l_int32 hspacing, l_int32 vspacing, l_int32 border ); LEPT_DLL extern PIXA * pixaaDisplayTiledAndScaled ( PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIXA * pixaConvertTo1 ( PIXA *pixas, l_int32 thresh ); LEPT_DLL extern PIXA * pixaConvertTo8 ( PIXA *pixas, l_int32 cmapflag ); LEPT_DLL extern PIXA * pixaConvertTo8Colormap ( PIXA *pixas, l_int32 dither ); LEPT_DLL extern PIXA * pixaConvertTo32 ( PIXA *pixas ); LEPT_DLL extern PIXA * pixaConstrainedSelect ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs, l_int32 copyflag ); LEPT_DLL extern l_ok pixaSelectToPdf ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, l_uint32 color, l_int32 fontsize, const char *fileout ); LEPT_DLL extern PIXA * pixaMakeFromTiledPixa ( PIXA *pixas, l_int32 w, l_int32 h, l_int32 nsamp ); LEPT_DLL extern PIXA * pixaMakeFromTiledPix ( PIX *pixs, l_int32 w, l_int32 h, l_int32 start, l_int32 num, BOXA *boxa ); LEPT_DLL extern l_ok pixGetTileCount ( PIX *pix, l_int32 *pn ); LEPT_DLL extern PIXA * pixaDisplayMultiTiled ( PIXA *pixas, l_int32 nx, l_int32 ny, l_int32 maxw, l_int32 maxh, l_float32 scalefactor, l_int32 spacing, l_int32 border ); LEPT_DLL extern l_ok pixaSplitIntoFiles ( PIXA *pixas, l_int32 nsplit, l_float32 scale, l_int32 outwidth, l_int32 write_pixa, l_int32 write_pix, l_int32 write_pdf ); LEPT_DLL extern l_ok convertToNUpFiles ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *outdir ); LEPT_DLL extern PIXA * convertToNUpPixa ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize ); LEPT_DLL extern PIXA * pixaConvertToNUpPixa ( PIXA *pixas, SARRAY *sa, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize ); LEPT_DLL extern l_ok pixaCompareInPdf ( PIXA *pixa1, PIXA *pixa2, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *fileout ); LEPT_DLL extern l_ok pmsCreate ( size_t minsize, size_t smallest, NUMA *numalloc, const char *logfile ); LEPT_DLL extern void pmsDestroy ( void ); LEPT_DLL extern void * pmsCustomAlloc ( size_t nbytes ); LEPT_DLL extern void pmsCustomDealloc ( void *data ); LEPT_DLL extern void * pmsGetAlloc ( size_t nbytes ); LEPT_DLL extern l_ok pmsGetLevelForAlloc ( size_t nbytes, l_int32 *plevel ); LEPT_DLL extern l_ok pmsGetLevelForDealloc ( void *data, l_int32 *plevel ); LEPT_DLL extern void pmsLogInfo ( void ); LEPT_DLL extern l_ok pixAddConstantGray ( PIX *pixs, l_int32 val ); LEPT_DLL extern l_ok pixMultConstantGray ( PIX *pixs, l_float32 val ); LEPT_DLL extern PIX * pixAddGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixSubtractGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixMultiplyGray ( PIX *pixs, PIX *pixg, l_float32 norm ); LEPT_DLL extern PIX * pixThresholdToValue ( PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval ); LEPT_DLL extern PIX * pixInitAccumulate ( l_int32 w, l_int32 h, l_uint32 offset ); LEPT_DLL extern PIX * pixFinalAccumulate ( PIX *pixs, l_uint32 offset, l_int32 depth ); LEPT_DLL extern PIX * pixFinalAccumulateThreshold ( PIX *pixs, l_uint32 offset, l_uint32 threshold ); LEPT_DLL extern l_ok pixAccumulate ( PIX *pixd, PIX *pixs, l_int32 op ); LEPT_DLL extern l_ok pixMultConstAccumulate ( PIX *pixs, l_float32 factor, l_uint32 offset ); LEPT_DLL extern PIX * pixAbsDifference ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixAddRGB ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixMinOrMax ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type ); LEPT_DLL extern PIX * pixMaxDynamicRange ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixMaxDynamicRangeRGB ( PIX *pixs, l_int32 type ); LEPT_DLL extern l_uint32 linearScaleRGBVal ( l_uint32 sval, l_float32 factor ); LEPT_DLL extern l_uint32 logScaleRGBVal ( l_uint32 sval, l_float32 *tab, l_float32 factor ); LEPT_DLL extern l_float32 * makeLogBase2Tab ( void ); LEPT_DLL extern l_float32 getLogBase2 ( l_int32 val, l_float32 *logtab ); LEPT_DLL extern PIXC * pixcompCreateFromPix ( PIX *pix, l_int32 comptype ); LEPT_DLL extern PIXC * pixcompCreateFromString ( l_uint8 *data, size_t size, l_int32 copyflag ); LEPT_DLL extern PIXC * pixcompCreateFromFile ( const char *filename, l_int32 comptype ); LEPT_DLL extern void pixcompDestroy ( PIXC **ppixc ); LEPT_DLL extern PIXC * pixcompCopy ( PIXC *pixcs ); LEPT_DLL extern l_ok pixcompGetDimensions ( PIXC *pixc, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern l_ok pixcompGetParameters ( PIXC *pixc, l_int32 *pxres, l_int32 *pyres, l_int32 *pcomptype, l_int32 *pcmapflag ); LEPT_DLL extern l_ok pixcompDetermineFormat ( l_int32 comptype, l_int32 d, l_int32 cmapflag, l_int32 *pformat ); LEPT_DLL extern PIX * pixCreateFromPixcomp ( PIXC *pixc ); LEPT_DLL extern PIXAC * pixacompCreate ( l_int32 n ); LEPT_DLL extern PIXAC * pixacompCreateWithInit ( l_int32 n, l_int32 offset, PIX *pix, l_int32 comptype ); LEPT_DLL extern PIXAC * pixacompCreateFromPixa ( PIXA *pixa, l_int32 comptype, l_int32 accesstype ); LEPT_DLL extern PIXAC * pixacompCreateFromFiles ( const char *dirname, const char *substr, l_int32 comptype ); LEPT_DLL extern PIXAC * pixacompCreateFromSA ( SARRAY *sa, l_int32 comptype ); LEPT_DLL extern void pixacompDestroy ( PIXAC **ppixac ); LEPT_DLL extern l_ok pixacompAddPix ( PIXAC *pixac, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_ok pixacompAddPixcomp ( PIXAC *pixac, PIXC *pixc, l_int32 copyflag ); LEPT_DLL extern l_ok pixacompReplacePix ( PIXAC *pixac, l_int32 index, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_ok pixacompReplacePixcomp ( PIXAC *pixac, l_int32 index, PIXC *pixc ); LEPT_DLL extern l_ok pixacompAddBox ( PIXAC *pixac, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixacompGetCount ( PIXAC *pixac ); LEPT_DLL extern PIXC * pixacompGetPixcomp ( PIXAC *pixac, l_int32 index, l_int32 copyflag ); LEPT_DLL extern PIX * pixacompGetPix ( PIXAC *pixac, l_int32 index ); LEPT_DLL extern l_ok pixacompGetPixDimensions ( PIXAC *pixac, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern BOXA * pixacompGetBoxa ( PIXAC *pixac, l_int32 accesstype ); LEPT_DLL extern l_int32 pixacompGetBoxaCount ( PIXAC *pixac ); LEPT_DLL extern BOX * pixacompGetBox ( PIXAC *pixac, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_ok pixacompGetBoxGeometry ( PIXAC *pixac, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 pixacompGetOffset ( PIXAC *pixac ); LEPT_DLL extern l_ok pixacompSetOffset ( PIXAC *pixac, l_int32 offset ); LEPT_DLL extern PIXA * pixaCreateFromPixacomp ( PIXAC *pixac, l_int32 accesstype ); LEPT_DLL extern l_ok pixacompJoin ( PIXAC *pixacd, PIXAC *pixacs, l_int32 istart, l_int32 iend ); LEPT_DLL extern PIXAC * pixacompInterleave ( PIXAC *pixac1, PIXAC *pixac2 ); LEPT_DLL extern PIXAC * pixacompRead ( const char *filename ); LEPT_DLL extern PIXAC * pixacompReadStream ( FILE *fp ); LEPT_DLL extern PIXAC * pixacompReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixacompWrite ( const char *filename, PIXAC *pixac ); LEPT_DLL extern l_ok pixacompWriteStream ( FILE *fp, PIXAC *pixac ); LEPT_DLL extern l_ok pixacompWriteMem ( l_uint8 **pdata, size_t *psize, PIXAC *pixac ); LEPT_DLL extern l_ok pixacompConvertToPdf ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_ok pixacompConvertToPdfData ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixacompFastConvertToPdfData ( PIXAC *pixac, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_ok pixacompWriteStreamInfo ( FILE *fp, PIXAC *pixac, const char *text ); LEPT_DLL extern l_ok pixcompWriteStreamInfo ( FILE *fp, PIXC *pixc, const char *text ); LEPT_DLL extern PIX * pixacompDisplayTiledAndScaled ( PIXAC *pixac, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern l_ok pixacompWriteFiles ( PIXAC *pixac, const char *subdir ); LEPT_DLL extern l_ok pixcompWriteFile ( const char *rootname, PIXC *pixc ); LEPT_DLL extern PIX * pixThreshold8 ( PIX *pixs, l_int32 d, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixRemoveColormapGeneral ( PIX *pixs, l_int32 type, l_int32 ifnocmap ); LEPT_DLL extern PIX * pixRemoveColormap ( PIX *pixs, l_int32 type ); LEPT_DLL extern l_ok pixAddGrayColormap8 ( PIX *pixs ); LEPT_DLL extern PIX * pixAddMinimalGrayColormap8 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToLuminance ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToGrayGeneral ( PIX *pixs, l_int32 type, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIX * pixConvertRGBToGray ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIX * pixConvertRGBToGrayFast ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToGrayMinMax ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixConvertRGBToGraySatBoost ( PIX *pixs, l_int32 refval ); LEPT_DLL extern PIX * pixConvertRGBToGrayArb ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc ); LEPT_DLL extern PIX * pixConvertRGBToBinaryArb ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_int32 thresh, l_int32 relation ); LEPT_DLL extern PIX * pixConvertGrayToColormap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertGrayToColormap8 ( PIX *pixs, l_int32 mindepth ); LEPT_DLL extern PIX * pixColorizeGray ( PIX *pixs, l_uint32 color, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertRGBToColormap ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern PIX * pixConvertCmapTo1 ( PIX *pixs ); LEPT_DLL extern l_ok pixQuantizeIfFewColors ( PIX *pixs, l_int32 maxcolors, l_int32 mingraycolors, l_int32 octlevel, PIX **ppixd ); LEPT_DLL extern PIX * pixConvert16To8 ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixConvertGrayToFalseColor ( PIX *pixs, l_float32 gamma ); LEPT_DLL extern PIX * pixUnpackBinary ( PIX *pixs, l_int32 depth, l_int32 invert ); LEPT_DLL extern PIX * pixConvert1To16 ( PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1 ); LEPT_DLL extern PIX * pixConvert1To32 ( PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1 ); LEPT_DLL extern PIX * pixConvert1To2Cmap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert1To2 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); LEPT_DLL extern PIX * pixConvert1To4Cmap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert1To4 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); LEPT_DLL extern PIX * pixConvert1To8Cmap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert1To8 ( PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1 ); LEPT_DLL extern PIX * pixConvert2To8 ( PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvert4To8 ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvert8To16 ( PIX *pixs, l_int32 leftshift ); LEPT_DLL extern PIX * pixConvertTo2 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert8To2 ( PIX *pix ); LEPT_DLL extern PIX * pixConvertTo4 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert8To4 ( PIX *pix ); LEPT_DLL extern PIX * pixConvertTo1Adaptive ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo1 ( PIX *pixs, l_int32 threshold ); LEPT_DLL extern PIX * pixConvertTo1BySampling ( PIX *pixs, l_int32 factor, l_int32 threshold ); LEPT_DLL extern PIX * pixConvertTo8 ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertTo8BySampling ( PIX *pixs, l_int32 factor, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertTo8Colormap ( PIX *pixs, l_int32 dither ); LEPT_DLL extern PIX * pixConvertTo16 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo32BySampling ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixConvert8To32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo8Or32 ( PIX *pixs, l_int32 copyflag, l_int32 warnflag ); LEPT_DLL extern PIX * pixConvert24To32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert32To24 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert32To16 ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixConvert32To8 ( PIX *pixs, l_int32 type16, l_int32 type8 ); LEPT_DLL extern PIX * pixRemoveAlpha ( PIX *pixs ); LEPT_DLL extern PIX * pixAddAlphaTo1bpp ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixConvertLossless ( PIX *pixs, l_int32 d ); LEPT_DLL extern PIX * pixConvertForPSWrap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern PIX * pixConvertGrayToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern PIX * pixConvertColorToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern void l_setNeutralBoostVal ( l_int32 val ); LEPT_DLL extern PIX * pixConnCompTransform ( PIX *pixs, l_int32 connect, l_int32 depth ); LEPT_DLL extern PIX * pixConnCompAreaTransform ( PIX *pixs, l_int32 connect ); LEPT_DLL extern l_ok pixConnCompIncrInit ( PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc ); LEPT_DLL extern l_int32 pixConnCompIncrAdd ( PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug ); LEPT_DLL extern l_ok pixGetSortedNeighborValues ( PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals ); LEPT_DLL extern PIX * pixLocToColorTransform ( PIX *pixs ); LEPT_DLL extern PIXTILING * pixTilingCreate ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap ); LEPT_DLL extern void pixTilingDestroy ( PIXTILING **ppt ); LEPT_DLL extern l_ok pixTilingGetCount ( PIXTILING *pt, l_int32 *pnx, l_int32 *pny ); LEPT_DLL extern l_ok pixTilingGetSize ( PIXTILING *pt, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern PIX * pixTilingGetTile ( PIXTILING *pt, l_int32 i, l_int32 j ); LEPT_DLL extern l_ok pixTilingNoStripOnPaint ( PIXTILING *pt ); LEPT_DLL extern l_ok pixTilingPaintTile ( PIX *pixd, l_int32 i, l_int32 j, PIX *pixs, PIXTILING *pt ); LEPT_DLL extern PIX * pixReadStreamPng ( FILE *fp ); LEPT_DLL extern l_ok readHeaderPng ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok freadHeaderPng ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok readHeaderMemPng ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 fgetPngResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok isPngInterlaced ( const char *filename, l_int32 *pinterlaced ); LEPT_DLL extern l_ok fgetPngColormapInfo ( FILE *fp, PIXCMAP **pcmap, l_int32 *ptransparency ); LEPT_DLL extern l_ok pixWritePng ( const char *filename, PIX *pix, l_float32 gamma ); LEPT_DLL extern l_ok pixWriteStreamPng ( FILE *fp, PIX *pix, l_float32 gamma ); LEPT_DLL extern l_ok pixSetZlibCompression ( PIX *pix, l_int32 compval ); LEPT_DLL extern void l_pngSetReadStrip16To8 ( l_int32 flag ); LEPT_DLL extern PIX * pixReadMemPng ( const l_uint8 *filedata, size_t filesize ); LEPT_DLL extern l_ok pixWriteMemPng ( l_uint8 **pfiledata, size_t *pfilesize, PIX *pix, l_float32 gamma ); LEPT_DLL extern PIX * pixReadStreamPnm ( FILE *fp ); LEPT_DLL extern l_ok readHeaderPnm ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_ok freadHeaderPnm ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_ok pixWriteStreamPnm ( FILE *fp, PIX *pix ); LEPT_DLL extern l_ok pixWriteStreamAsciiPnm ( FILE *fp, PIX *pix ); LEPT_DLL extern l_ok pixWriteStreamPam ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemPnm ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok readHeaderMemPnm ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_ok pixWriteMemPnm ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern l_ok pixWriteMemPam ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern PIX * pixProjectiveSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectiveSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectivePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixProjective ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectivePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixProjectiveColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixProjectivePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixProjectiveGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixProjectivePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_ok getProjectiveXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_ok projectiveXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_ok projectiveXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_ok convertFilesToPS ( const char *dirin, const char *substr, l_int32 res, const char *fileout ); LEPT_DLL extern l_ok sarrayConvertFilesToPS ( SARRAY *sa, l_int32 res, const char *fileout ); LEPT_DLL extern l_ok convertFilesFittedToPS ( const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout ); LEPT_DLL extern l_ok sarrayConvertFilesFittedToPS ( SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout ); LEPT_DLL extern l_ok writeImageCompressedToPSFile ( const char *filein, const char *fileout, l_int32 res, l_int32 *pindex ); LEPT_DLL extern l_ok convertSegmentedPagesToPS ( const char *pagedir, const char *pagestr, l_int32 page_numpre, const char *maskdir, const char *maskstr, l_int32 mask_numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout ); LEPT_DLL extern l_ok pixWriteSegmentedPageToPS ( PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout ); LEPT_DLL extern l_ok pixWriteMixedToPS ( PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout ); LEPT_DLL extern l_ok convertToPSEmbed ( const char *filein, const char *fileout, l_int32 level ); LEPT_DLL extern l_ok pixaWriteCompressedToPS ( PIXA *pixa, const char *fileout, l_int32 res, l_int32 level ); LEPT_DLL extern l_ok pixWriteCompressedToPS ( PIX *pix, const char *fileout, l_int32 res, l_int32 level, l_int32 *pindex ); LEPT_DLL extern l_ok pixWritePSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_ok pixWriteStreamPS ( FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern char * pixWriteStringPS ( PIX *pixs, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern char * generateUncompressedPS ( char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag ); LEPT_DLL extern l_ok convertJpegToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_ok convertJpegToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern l_ok convertG4ToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_ok convertG4ToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage ); LEPT_DLL extern l_ok convertTiffMultipageToPS ( const char *filein, const char *fileout, l_float32 fillfract ); LEPT_DLL extern l_ok convertFlateToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_ok convertFlateToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern l_ok pixWriteMemPS ( l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern l_int32 getResLetterPage ( l_int32 w, l_int32 h, l_float32 fillfract ); LEPT_DLL extern l_int32 getResA4Page ( l_int32 w, l_int32 h, l_float32 fillfract ); LEPT_DLL extern void l_psWriteBoundingBox ( l_int32 flag ); LEPT_DLL extern PTA * ptaCreate ( l_int32 n ); LEPT_DLL extern PTA * ptaCreateFromNuma ( NUMA *nax, NUMA *nay ); LEPT_DLL extern void ptaDestroy ( PTA **ppta ); LEPT_DLL extern PTA * ptaCopy ( PTA *pta ); LEPT_DLL extern PTA * ptaCopyRange ( PTA *ptas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PTA * ptaClone ( PTA *pta ); LEPT_DLL extern l_ok ptaEmpty ( PTA *pta ); LEPT_DLL extern l_ok ptaAddPt ( PTA *pta, l_float32 x, l_float32 y ); LEPT_DLL extern l_ok ptaInsertPt ( PTA *pta, l_int32 index, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok ptaRemovePt ( PTA *pta, l_int32 index ); LEPT_DLL extern l_int32 ptaGetCount ( PTA *pta ); LEPT_DLL extern l_ok ptaGetPt ( PTA *pta, l_int32 index, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_ok ptaGetIPt ( PTA *pta, l_int32 index, l_int32 *px, l_int32 *py ); LEPT_DLL extern l_ok ptaSetPt ( PTA *pta, l_int32 index, l_float32 x, l_float32 y ); LEPT_DLL extern l_ok ptaGetArrays ( PTA *pta, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern PTA * ptaRead ( const char *filename ); LEPT_DLL extern PTA * ptaReadStream ( FILE *fp ); LEPT_DLL extern PTA * ptaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok ptaWriteDebug ( const char *filename, PTA *pta, l_int32 type ); LEPT_DLL extern l_ok ptaWrite ( const char *filename, PTA *pta, l_int32 type ); LEPT_DLL extern l_ok ptaWriteStream ( FILE *fp, PTA *pta, l_int32 type ); LEPT_DLL extern l_ok ptaWriteMem ( l_uint8 **pdata, size_t *psize, PTA *pta, l_int32 type ); LEPT_DLL extern PTAA * ptaaCreate ( l_int32 n ); LEPT_DLL extern void ptaaDestroy ( PTAA **pptaa ); LEPT_DLL extern l_ok ptaaAddPta ( PTAA *ptaa, PTA *pta, l_int32 copyflag ); LEPT_DLL extern l_int32 ptaaGetCount ( PTAA *ptaa ); LEPT_DLL extern PTA * ptaaGetPta ( PTAA *ptaa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_ok ptaaGetPt ( PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_ok ptaaInitFull ( PTAA *ptaa, PTA *pta ); LEPT_DLL extern l_ok ptaaReplacePta ( PTAA *ptaa, l_int32 index, PTA *pta ); LEPT_DLL extern l_ok ptaaAddPt ( PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y ); LEPT_DLL extern l_ok ptaaTruncate ( PTAA *ptaa ); LEPT_DLL extern PTAA * ptaaRead ( const char *filename ); LEPT_DLL extern PTAA * ptaaReadStream ( FILE *fp ); LEPT_DLL extern PTAA * ptaaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok ptaaWriteDebug ( const char *filename, PTAA *ptaa, l_int32 type ); LEPT_DLL extern l_ok ptaaWrite ( const char *filename, PTAA *ptaa, l_int32 type ); LEPT_DLL extern l_ok ptaaWriteStream ( FILE *fp, PTAA *ptaa, l_int32 type ); LEPT_DLL extern l_ok ptaaWriteMem ( l_uint8 **pdata, size_t *psize, PTAA *ptaa, l_int32 type ); LEPT_DLL extern PTA * ptaSubsample ( PTA *ptas, l_int32 subfactor ); LEPT_DLL extern l_ok ptaJoin ( PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_ok ptaaJoin ( PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PTA * ptaReverse ( PTA *ptas, l_int32 type ); LEPT_DLL extern PTA * ptaTranspose ( PTA *ptas ); LEPT_DLL extern PTA * ptaCyclicPerm ( PTA *ptas, l_int32 xs, l_int32 ys ); LEPT_DLL extern PTA * ptaSelectRange ( PTA *ptas, l_int32 first, l_int32 last ); LEPT_DLL extern BOX * ptaGetBoundingRegion ( PTA *pta ); LEPT_DLL extern l_ok ptaGetRange ( PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy ); LEPT_DLL extern PTA * ptaGetInsideBox ( PTA *ptas, BOX *box ); LEPT_DLL extern PTA * pixFindCornerPixels ( PIX *pixs ); LEPT_DLL extern l_int32 ptaContainsPt ( PTA *pta, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 ptaTestIntersection ( PTA *pta1, PTA *pta2 ); LEPT_DLL extern PTA * ptaTransform ( PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern l_int32 ptaPtInsidePolygon ( PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside ); LEPT_DLL extern l_float32 l_angleBetweenVectors ( l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2 ); LEPT_DLL extern l_int32 ptaPolygonIsConvex ( PTA *pta, l_int32 *pisconvex ); LEPT_DLL extern l_ok ptaGetMinMax ( PTA *pta, l_float32 *pxmin, l_float32 *pymin, l_float32 *pxmax, l_float32 *pymax ); LEPT_DLL extern PTA * ptaSelectByValue ( PTA *ptas, l_float32 xth, l_float32 yth, l_int32 type, l_int32 relation ); LEPT_DLL extern PTA * ptaCropToMask ( PTA *ptas, PIX *pixm ); LEPT_DLL extern l_ok ptaGetLinearLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit ); LEPT_DLL extern l_ok ptaGetQuadraticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit ); LEPT_DLL extern l_ok ptaGetCubicLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit ); LEPT_DLL extern l_ok ptaGetQuarticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit ); LEPT_DLL extern l_ok ptaNoisyLinearLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit ); LEPT_DLL extern l_ok ptaNoisyQuadraticLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit ); LEPT_DLL extern l_ok applyLinearFit ( l_float32 a, l_float32 b, l_float32 x, l_float32 *py ); LEPT_DLL extern l_ok applyQuadraticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py ); LEPT_DLL extern l_ok applyCubicFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py ); LEPT_DLL extern l_ok applyQuarticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py ); LEPT_DLL extern l_ok pixPlotAlongPta ( PIX *pixs, PTA *pta, l_int32 outformat, const char *title ); LEPT_DLL extern PTA * ptaGetPixelsFromPix ( PIX *pixs, BOX *box ); LEPT_DLL extern PIX * pixGenerateFromPta ( PTA *pta, l_int32 w, l_int32 h ); LEPT_DLL extern PTA * ptaGetBoundaryPixels ( PIX *pixs, l_int32 type ); LEPT_DLL extern PTAA * ptaaGetBoundaryPixels ( PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa ); LEPT_DLL extern PTAA * ptaaIndexLabeledPixels ( PIX *pixs, l_int32 *pncc ); LEPT_DLL extern PTA * ptaGetNeighborPixLocs ( PIX *pixs, l_int32 x, l_int32 y, l_int32 conn ); LEPT_DLL extern PTA * numaConvertToPta1 ( NUMA *na ); LEPT_DLL extern PTA * numaConvertToPta2 ( NUMA *nax, NUMA *nay ); LEPT_DLL extern l_ok ptaConvertToNuma ( PTA *pta, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern PIX * pixDisplayPta ( PIX *pixd, PIX *pixs, PTA *pta ); LEPT_DLL extern PIX * pixDisplayPtaaPattern ( PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy ); LEPT_DLL extern PIX * pixDisplayPtaPattern ( PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color ); LEPT_DLL extern PTA * ptaReplicatePattern ( PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixDisplayPtaa ( PIX *pixs, PTAA *ptaa ); LEPT_DLL extern PTA * ptaSort ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern l_ok ptaGetSortIndex ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern PTA * ptaSortByIndex ( PTA *ptas, NUMA *naindex ); LEPT_DLL extern PTAA * ptaaSortByIndex ( PTAA *ptaas, NUMA *naindex ); LEPT_DLL extern l_ok ptaGetRankValue ( PTA *pta, l_float32 fract, PTA *ptasort, l_int32 sorttype, l_float32 *pval ); LEPT_DLL extern PTA * ptaSort2d ( PTA *pta ); LEPT_DLL extern l_ok ptaEqual ( PTA *pta1, PTA *pta2, l_int32 *psame ); LEPT_DLL extern L_ASET * l_asetCreateFromPta ( PTA *pta ); LEPT_DLL extern l_ok ptaRemoveDupsByAset ( PTA *ptas, PTA **pptad ); LEPT_DLL extern l_ok ptaUnionByAset ( PTA *pta1, PTA *pta2, PTA **pptad ); LEPT_DLL extern l_ok ptaIntersectionByAset ( PTA *pta1, PTA *pta2, PTA **pptad ); LEPT_DLL extern L_HASHMAP * l_hmapCreateFromPta ( PTA *pta ); LEPT_DLL extern l_ok ptaRemoveDupsByHmap ( PTA *ptas, PTA **pptad, L_HASHMAP **phmap ); LEPT_DLL extern l_ok ptaUnionByHmap ( PTA *pta1, PTA *pta2, PTA **pptad ); LEPT_DLL extern l_ok ptaIntersectionByHmap ( PTA *pta1, PTA *pta2, PTA **pptad ); LEPT_DLL extern L_PTRA * ptraCreate ( l_int32 n ); LEPT_DLL extern void ptraDestroy ( L_PTRA **ppa, l_int32 freeflag, l_int32 warnflag ); LEPT_DLL extern l_ok ptraAdd ( L_PTRA *pa, void *item ); LEPT_DLL extern l_ok ptraInsert ( L_PTRA *pa, l_int32 index, void *item, l_int32 shiftflag ); LEPT_DLL extern void * ptraRemove ( L_PTRA *pa, l_int32 index, l_int32 flag ); LEPT_DLL extern void * ptraRemoveLast ( L_PTRA *pa ); LEPT_DLL extern void * ptraReplace ( L_PTRA *pa, l_int32 index, void *item, l_int32 freeflag ); LEPT_DLL extern l_ok ptraSwap ( L_PTRA *pa, l_int32 index1, l_int32 index2 ); LEPT_DLL extern l_ok ptraCompactArray ( L_PTRA *pa ); LEPT_DLL extern l_ok ptraReverse ( L_PTRA *pa ); LEPT_DLL extern l_ok ptraJoin ( L_PTRA *pa1, L_PTRA *pa2 ); LEPT_DLL extern l_ok ptraGetMaxIndex ( L_PTRA *pa, l_int32 *pmaxindex ); LEPT_DLL extern l_ok ptraGetActualCount ( L_PTRA *pa, l_int32 *pcount ); LEPT_DLL extern void * ptraGetPtrToItem ( L_PTRA *pa, l_int32 index ); LEPT_DLL extern L_PTRAA * ptraaCreate ( l_int32 n ); LEPT_DLL extern void ptraaDestroy ( L_PTRAA **ppaa, l_int32 freeflag, l_int32 warnflag ); LEPT_DLL extern l_ok ptraaGetSize ( L_PTRAA *paa, l_int32 *psize ); LEPT_DLL extern l_ok ptraaInsertPtra ( L_PTRAA *paa, l_int32 index, L_PTRA *pa ); LEPT_DLL extern L_PTRA * ptraaGetPtra ( L_PTRAA *paa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern L_PTRA * ptraaFlattenToPtra ( L_PTRAA *paa ); LEPT_DLL extern l_ok pixQuadtreeMean ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa ); LEPT_DLL extern l_ok pixQuadtreeVariance ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv ); LEPT_DLL extern l_ok pixMeanInRectangle ( PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval ); LEPT_DLL extern l_ok pixVarianceInRectangle ( PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar ); LEPT_DLL extern BOXAA * boxaaQuadtreeRegions ( l_int32 w, l_int32 h, l_int32 nlevels ); LEPT_DLL extern l_ok quadtreeGetParent ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_ok quadtreeGetChildren ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11 ); LEPT_DLL extern l_int32 quadtreeMaxLevels ( l_int32 w, l_int32 h ); LEPT_DLL extern PIX * fpixaDisplayQuadtree ( FPIXA *fpixa, l_int32 factor, l_int32 fontsize ); LEPT_DLL extern L_QUEUE * lqueueCreate ( l_int32 nalloc ); LEPT_DLL extern void lqueueDestroy ( L_QUEUE **plq, l_int32 freeflag ); LEPT_DLL extern l_ok lqueueAdd ( L_QUEUE *lq, void *item ); LEPT_DLL extern void * lqueueRemove ( L_QUEUE *lq ); LEPT_DLL extern l_int32 lqueueGetCount ( L_QUEUE *lq ); LEPT_DLL extern l_ok lqueuePrint ( FILE *fp, L_QUEUE *lq ); LEPT_DLL extern PIX * pixRankFilter ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixRankFilterRGB ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixRankFilterGray ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixMedianFilter ( PIX *pixs, l_int32 wf, l_int32 hf ); LEPT_DLL extern PIX * pixRankFilterWithScaling ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor ); LEPT_DLL extern L_RBTREE * l_rbtreeCreate ( l_int32 keytype ); LEPT_DLL extern RB_TYPE * l_rbtreeLookup ( L_RBTREE *t, RB_TYPE key ); LEPT_DLL extern void l_rbtreeInsert ( L_RBTREE *t, RB_TYPE key, RB_TYPE value ); LEPT_DLL extern void l_rbtreeDelete ( L_RBTREE *t, RB_TYPE key ); LEPT_DLL extern void l_rbtreeDestroy ( L_RBTREE **pt ); LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetFirst ( L_RBTREE *t ); LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetNext ( L_RBTREE_NODE *n ); LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetLast ( L_RBTREE *t ); LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetPrev ( L_RBTREE_NODE *n ); LEPT_DLL extern l_int32 l_rbtreeGetCount ( L_RBTREE *t ); LEPT_DLL extern void l_rbtreePrint ( FILE *fp, L_RBTREE *t ); LEPT_DLL extern SARRAY * pixProcessBarcodes ( PIX *pixs, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); LEPT_DLL extern PIXA * pixExtractBarcodes ( PIX *pixs, l_int32 debugflag ); LEPT_DLL extern SARRAY * pixReadBarcodes ( PIXA *pixa, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); LEPT_DLL extern NUMA * pixReadBarcodeWidths ( PIX *pixs, l_int32 method, l_int32 debugflag ); LEPT_DLL extern BOXA * pixLocateBarcodes ( PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm ); LEPT_DLL extern PIX * pixDeskewBarcode ( PIX *pixs, PIX *pixb, BOX *box, l_int32 margin, l_int32 threshold, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern NUMA * pixExtractBarcodeWidths1 ( PIX *pixs, l_float32 thresh, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); LEPT_DLL extern NUMA * pixExtractBarcodeWidths2 ( PIX *pixs, l_float32 thresh, l_float32 *pwidth, NUMA **pnac, l_int32 debugflag ); LEPT_DLL extern NUMA * pixExtractBarcodeCrossings ( PIX *pixs, l_float32 thresh, l_int32 debugflag ); LEPT_DLL extern NUMA * numaQuantizeCrossingsByWidth ( NUMA *nas, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); LEPT_DLL extern NUMA * numaQuantizeCrossingsByWindow ( NUMA *nas, l_float32 ratio, l_float32 *pwidth, l_float32 *pfirstloc, NUMA **pnac, l_int32 debugflag ); LEPT_DLL extern PIXA * pixaReadFiles ( const char *dirname, const char *substr ); LEPT_DLL extern PIXA * pixaReadFilesSA ( SARRAY *sa ); LEPT_DLL extern PIX * pixRead ( const char *filename ); LEPT_DLL extern PIX * pixReadWithHint ( const char *filename, l_int32 hint ); LEPT_DLL extern PIX * pixReadIndexed ( SARRAY *sa, l_int32 index ); LEPT_DLL extern PIX * pixReadStream ( FILE *fp, l_int32 hint ); LEPT_DLL extern l_ok pixReadHeader ( const char *filename, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok findFileFormat ( const char *filename, l_int32 *pformat ); LEPT_DLL extern l_ok findFileFormatStream ( FILE *fp, l_int32 *pformat ); LEPT_DLL extern l_ok findFileFormatBuffer ( const l_uint8 *buf, l_int32 *pformat ); LEPT_DLL extern l_int32 fileFormatIsTiff ( FILE *fp ); LEPT_DLL extern PIX * pixReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixReadHeaderMem ( const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok writeImageFileInfo ( const char *filename, FILE *fpout, l_int32 headeronly ); LEPT_DLL extern l_ok ioFormatTest ( const char *filename ); LEPT_DLL extern L_RECOG * recogCreateFromRecog ( L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); LEPT_DLL extern L_RECOG * recogCreateFromPixa ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); LEPT_DLL extern L_RECOG * recogCreateFromPixaNoFinish ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); LEPT_DLL extern L_RECOG * recogCreate ( l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); LEPT_DLL extern void recogDestroy ( L_RECOG **precog ); LEPT_DLL extern l_int32 recogGetCount ( L_RECOG *recog ); LEPT_DLL extern l_ok recogSetParams ( L_RECOG *recog, l_int32 type, l_int32 min_nopad, l_float32 max_wh_ratio, l_float32 max_ht_ratio ); LEPT_DLL extern l_int32 recogGetClassIndex ( L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex ); LEPT_DLL extern l_ok recogStringToIndex ( L_RECOG *recog, char *text, l_int32 *pindex ); LEPT_DLL extern l_int32 recogGetClassString ( L_RECOG *recog, l_int32 index, char **pcharstr ); LEPT_DLL extern l_ok l_convertCharstrToInt ( const char *str, l_int32 *pval ); LEPT_DLL extern L_RECOG * recogRead ( const char *filename ); LEPT_DLL extern L_RECOG * recogReadStream ( FILE *fp ); LEPT_DLL extern L_RECOG * recogReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok recogWrite ( const char *filename, L_RECOG *recog ); LEPT_DLL extern l_ok recogWriteStream ( FILE *fp, L_RECOG *recog ); LEPT_DLL extern l_ok recogWriteMem ( l_uint8 **pdata, size_t *psize, L_RECOG *recog ); LEPT_DLL extern PIXA * recogExtractPixa ( L_RECOG *recog ); LEPT_DLL extern BOXA * recogDecode ( L_RECOG *recog, PIX *pixs, l_int32 nlevels, PIX **ppixdb ); LEPT_DLL extern l_ok recogCreateDid ( L_RECOG *recog, PIX *pixs ); LEPT_DLL extern l_ok recogDestroyDid ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogDidExists ( L_RECOG *recog ); LEPT_DLL extern L_RDID * recogGetDid ( L_RECOG *recog ); LEPT_DLL extern l_ok recogSetChannelParams ( L_RECOG *recog, l_int32 nlevels ); LEPT_DLL extern l_ok recogIdentifyMultiple ( L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit ); LEPT_DLL extern l_ok recogSplitIntoCharacters ( L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, l_int32 debug ); LEPT_DLL extern l_ok recogCorrelationBestRow ( L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug ); LEPT_DLL extern l_ok recogCorrelationBestChar ( L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb ); LEPT_DLL extern l_ok recogIdentifyPixa ( L_RECOG *recog, PIXA *pixa, PIX **ppixdb ); LEPT_DLL extern l_ok recogIdentifyPix ( L_RECOG *recog, PIX *pixs, PIX **ppixdb ); LEPT_DLL extern l_ok recogSkipIdentify ( L_RECOG *recog ); LEPT_DLL extern void rchaDestroy ( L_RCHA **prcha ); LEPT_DLL extern void rchDestroy ( L_RCH **prch ); LEPT_DLL extern l_ok rchaExtract ( L_RCHA *rcha, NUMA **pnaindex, NUMA **pnascore, SARRAY **psatext, NUMA **pnasample, NUMA **pnaxloc, NUMA **pnayloc, NUMA **pnawidth ); LEPT_DLL extern l_ok rchExtract ( L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth ); LEPT_DLL extern PIX * recogProcessToIdentify ( L_RECOG *recog, PIX *pixs, l_int32 pad ); LEPT_DLL extern SARRAY * recogExtractNumbers ( L_RECOG *recog, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa ); LEPT_DLL extern PIXA * showExtractNumbers ( PIX *pixs, SARRAY *sa, BOXAA *baa, NUMAA *naa, PIX **ppixdb ); LEPT_DLL extern l_ok recogTrainLabeled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 debug ); LEPT_DLL extern l_ok recogProcessLabeled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIX **ppix ); LEPT_DLL extern l_ok recogAddSample ( L_RECOG *recog, PIX *pix, l_int32 debug ); LEPT_DLL extern PIX * recogModifyTemplate ( L_RECOG *recog, PIX *pixs ); LEPT_DLL extern l_int32 recogAverageSamples ( L_RECOG *recog, l_int32 debug ); LEPT_DLL extern l_int32 pixaAccumulateSamples ( PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_ok recogTrainingFinished ( L_RECOG **precog, l_int32 modifyflag, l_int32 minsize, l_float32 minfract ); LEPT_DLL extern PIXA * recogFilterPixaBySize ( PIXA *pixas, l_int32 setsize, l_int32 maxkeep, l_float32 max_ht_ratio, NUMA **pna ); LEPT_DLL extern PIXAA * recogSortPixaByClass ( PIXA *pixa, l_int32 setsize ); LEPT_DLL extern l_ok recogRemoveOutliers1 ( L_RECOG **precog, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); LEPT_DLL extern PIXA * pixaRemoveOutliers1 ( PIXA *pixas, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); LEPT_DLL extern l_ok recogRemoveOutliers2 ( L_RECOG **precog, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); LEPT_DLL extern PIXA * pixaRemoveOutliers2 ( PIXA *pixas, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); LEPT_DLL extern PIXA * recogTrainFromBoot ( L_RECOG *recogboot, PIXA *pixas, l_float32 minscore, l_int32 threshold, l_int32 debug ); LEPT_DLL extern l_ok recogPadDigitTrainingSet ( L_RECOG **precog, l_int32 scaleh, l_int32 linew ); LEPT_DLL extern l_int32 recogIsPaddingNeeded ( L_RECOG *recog, SARRAY **psa ); LEPT_DLL extern PIXA * recogAddDigitPadTemplates ( L_RECOG *recog, SARRAY *sa ); LEPT_DLL extern L_RECOG * recogMakeBootDigitRecog ( l_int32 nsamp, l_int32 scaleh, l_int32 linew, l_int32 maxyshift, l_int32 debug ); LEPT_DLL extern PIXA * recogMakeBootDigitTemplates ( l_int32 nsamp, l_int32 debug ); LEPT_DLL extern l_ok recogShowContent ( FILE *fp, L_RECOG *recog, l_int32 index, l_int32 display ); LEPT_DLL extern l_ok recogDebugAverages ( L_RECOG *recog, l_int32 debug ); LEPT_DLL extern l_int32 recogShowAverageTemplates ( L_RECOG *recog ); LEPT_DLL extern l_ok recogShowMatchesInRange ( L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display ); LEPT_DLL extern PIX * recogShowMatch ( L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score ); LEPT_DLL extern l_ok regTestSetup ( l_int32 argc, char **argv, L_REGPARAMS **prp ); LEPT_DLL extern l_ok regTestCleanup ( L_REGPARAMS *rp ); LEPT_DLL extern l_ok regTestCompareValues ( L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta ); LEPT_DLL extern l_ok regTestCompareStrings ( L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2 ); LEPT_DLL extern l_ok regTestComparePix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2 ); LEPT_DLL extern l_ok regTestCompareSimilarPix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats ); LEPT_DLL extern l_ok regTestCheckFile ( L_REGPARAMS *rp, const char *localname ); LEPT_DLL extern l_ok regTestCompareFiles ( L_REGPARAMS *rp, l_int32 index1, l_int32 index2 ); LEPT_DLL extern l_ok regTestWritePixAndCheck ( L_REGPARAMS *rp, PIX *pix, l_int32 format ); LEPT_DLL extern l_ok regTestWriteDataAndCheck ( L_REGPARAMS *rp, void *data, size_t nbytes, const char *ext ); LEPT_DLL extern char * regTestGenLocalFilename ( L_REGPARAMS *rp, l_int32 index, l_int32 format ); LEPT_DLL extern l_ok l_pdfRenderFile ( const char *filename, l_int32 res, SARRAY **psaout ); LEPT_DLL extern l_ok l_pdfRenderFiles ( const char *dir, SARRAY *sain, l_int32 res, SARRAY **psaout ); LEPT_DLL extern l_ok pixRasterop ( PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy ); LEPT_DLL extern l_ok pixRasteropVip ( PIX *pixd, l_int32 bx, l_int32 bw, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_ok pixRasteropHip ( PIX *pixd, l_int32 by, l_int32 bh, l_int32 hshift, l_int32 incolor ); LEPT_DLL extern PIX * pixTranslate ( PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_ok pixRasteropIP ( PIX *pixd, l_int32 hshift, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_ok pixRasteropFullImage ( PIX *pixd, PIX *pixs, l_int32 op ); LEPT_DLL extern void rasteropUniLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op ); LEPT_DLL extern void rasteropLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy ); LEPT_DLL extern void rasteropVipLow ( l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift ); LEPT_DLL extern void rasteropHipLow ( l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift ); LEPT_DLL extern PIX * pixRotate ( PIX *pixs, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height ); LEPT_DLL extern PIX * pixEmbedForRotation ( PIX *pixs, l_float32 angle, l_int32 incolor, l_int32 width, l_int32 height ); LEPT_DLL extern PIX * pixRotateBySampling ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateBinaryNice ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateWithAlpha ( PIX *pixs, l_float32 angle, PIX *pixg, l_float32 fract ); LEPT_DLL extern PIX * pixRotateAM ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateAMColor ( PIX *pixs, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern PIX * pixRotateAMGray ( PIX *pixs, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern PIX * pixRotateAMCorner ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateAMColorCorner ( PIX *pixs, l_float32 angle, l_uint32 fillval ); LEPT_DLL extern PIX * pixRotateAMGrayCorner ( PIX *pixs, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern PIX * pixRotateAMColorFast ( PIX *pixs, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern PIX * pixRotateOrth ( PIX *pixs, l_int32 quads ); LEPT_DLL extern PIX * pixRotate180 ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixRotate90 ( PIX *pixs, l_int32 direction ); LEPT_DLL extern PIX * pixFlipLR ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixFlipTB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixRotateShear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotate2Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotate3Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern l_ok pixRotateShearIP ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateShearCenter ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern l_ok pixRotateShearCenterIP ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixStrokeWidthTransform ( PIX *pixs, l_int32 color, l_int32 depth, l_int32 nangles ); LEPT_DLL extern PIX * pixRunlengthTransform ( PIX *pixs, l_int32 color, l_int32 direction, l_int32 depth ); LEPT_DLL extern l_ok pixFindHorizontalRuns ( PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn ); LEPT_DLL extern l_ok pixFindVerticalRuns ( PIX *pix, l_int32 x, l_int32 *ystart, l_int32 *yend, l_int32 *pn ); LEPT_DLL extern NUMA * pixFindMaxRuns ( PIX *pix, l_int32 direction, NUMA **pnastart ); LEPT_DLL extern l_ok pixFindMaxHorizontalRunOnLine ( PIX *pix, l_int32 y, l_int32 *pxstart, l_int32 *psize ); LEPT_DLL extern l_ok pixFindMaxVerticalRunOnLine ( PIX *pix, l_int32 x, l_int32 *pystart, l_int32 *psize ); LEPT_DLL extern l_ok runlengthMembershipOnLine ( l_int32 *buffer, l_int32 size, l_int32 depth, l_int32 *start, l_int32 *end, l_int32 n ); LEPT_DLL extern l_int32 * makeMSBitLocTab ( l_int32 bitval ); LEPT_DLL extern SARRAY * sarrayCreate ( l_int32 n ); LEPT_DLL extern SARRAY * sarrayCreateInitialized ( l_int32 n, const char *initstr ); LEPT_DLL extern SARRAY * sarrayCreateWordsFromString ( const char *string ); LEPT_DLL extern SARRAY * sarrayCreateLinesFromString ( const char *string, l_int32 blankflag ); LEPT_DLL extern void sarrayDestroy ( SARRAY **psa ); LEPT_DLL extern SARRAY * sarrayCopy ( SARRAY *sa ); LEPT_DLL extern SARRAY * sarrayClone ( SARRAY *sa ); LEPT_DLL extern l_ok sarrayAddString ( SARRAY *sa, const char *string, l_int32 copyflag ); LEPT_DLL extern char * sarrayRemoveString ( SARRAY *sa, l_int32 index ); LEPT_DLL extern l_ok sarrayReplaceString ( SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag ); LEPT_DLL extern l_ok sarrayClear ( SARRAY *sa ); LEPT_DLL extern l_int32 sarrayGetCount ( SARRAY *sa ); LEPT_DLL extern char ** sarrayGetArray ( SARRAY *sa, l_int32 *pnalloc, l_int32 *pn ); LEPT_DLL extern char * sarrayGetString ( SARRAY *sa, l_int32 index, l_int32 copyflag ); LEPT_DLL extern char * sarrayToString ( SARRAY *sa, l_int32 addnlflag ); LEPT_DLL extern char * sarrayToStringRange ( SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag ); LEPT_DLL extern SARRAY * sarrayConcatUniformly ( SARRAY *sa, l_int32 n, l_int32 addnlflag ); LEPT_DLL extern l_ok sarrayJoin ( SARRAY *sa1, SARRAY *sa2 ); LEPT_DLL extern l_ok sarrayAppendRange ( SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end ); LEPT_DLL extern l_ok sarrayPadToSameSize ( SARRAY *sa1, SARRAY *sa2, const char *padstring ); LEPT_DLL extern SARRAY * sarrayConvertWordsToLines ( SARRAY *sa, l_int32 linesize ); LEPT_DLL extern l_int32 sarraySplitString ( SARRAY *sa, const char *str, const char *separators ); LEPT_DLL extern SARRAY * sarraySelectBySubstring ( SARRAY *sain, const char *substr ); LEPT_DLL extern SARRAY * sarraySelectRange ( SARRAY *sain, l_int32 first, l_int32 last ); LEPT_DLL extern l_int32 sarrayParseRange ( SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc ); LEPT_DLL extern SARRAY * sarrayRead ( const char *filename ); LEPT_DLL extern SARRAY * sarrayReadStream ( FILE *fp ); LEPT_DLL extern SARRAY * sarrayReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok sarrayWrite ( const char *filename, SARRAY *sa ); LEPT_DLL extern l_ok sarrayWriteStream ( FILE *fp, SARRAY *sa ); LEPT_DLL extern l_ok sarrayWriteStderr ( SARRAY *sa ); LEPT_DLL extern l_ok sarrayWriteMem ( l_uint8 **pdata, size_t *psize, SARRAY *sa ); LEPT_DLL extern l_ok sarrayAppend ( const char *filename, SARRAY *sa ); LEPT_DLL extern SARRAY * getNumberedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); LEPT_DLL extern SARRAY * getSortedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern SARRAY * convertSortedToNumberedPathnames ( SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); LEPT_DLL extern SARRAY * getFilenamesInDirectory ( const char *dirname ); LEPT_DLL extern SARRAY * sarraySort ( SARRAY *saout, SARRAY *sain, l_int32 sortorder ); LEPT_DLL extern SARRAY * sarraySortByIndex ( SARRAY *sain, NUMA *naindex ); LEPT_DLL extern l_int32 stringCompareLexical ( const char *str1, const char *str2 ); LEPT_DLL extern L_ASET * l_asetCreateFromSarray ( SARRAY *sa ); LEPT_DLL extern l_ok sarrayRemoveDupsByAset ( SARRAY *sas, SARRAY **psad ); LEPT_DLL extern l_ok sarrayUnionByAset ( SARRAY *sa1, SARRAY *sa2, SARRAY **psad ); LEPT_DLL extern l_ok sarrayIntersectionByAset ( SARRAY *sa1, SARRAY *sa2, SARRAY **psad ); LEPT_DLL extern L_HASHMAP * l_hmapCreateFromSarray ( SARRAY *sa ); LEPT_DLL extern l_ok sarrayRemoveDupsByHmap ( SARRAY *sas, SARRAY **psad, L_HASHMAP **phmap ); LEPT_DLL extern l_ok sarrayUnionByHmap ( SARRAY *sa1, SARRAY *sa2, SARRAY **psad ); LEPT_DLL extern l_ok sarrayIntersectionByHmap ( SARRAY *sa1, SARRAY *sa2, SARRAY **psad ); LEPT_DLL extern SARRAY * sarrayGenerateIntegers ( l_int32 n ); LEPT_DLL extern l_ok sarrayLookupCSKV ( SARRAY *sa, const char *keystring, char **pvalstring ); LEPT_DLL extern PIX * pixScale ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleToSizeRel ( PIX *pixs, l_int32 delw, l_int32 delh ); LEPT_DLL extern PIX * pixScaleToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleToResolution ( PIX *pixs, l_float32 target, l_float32 assumed, l_float32 *pscalefact ); LEPT_DLL extern PIX * pixScaleGeneral ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth ); LEPT_DLL extern PIX * pixScaleLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleColorLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleColor2xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleColor4xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGrayLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleGray2xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGray4xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGray2xLIThresh ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGray2xLIDither ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGray4xLIThresh ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGray4xLIDither ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleBySampling ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleBySamplingWithShift ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 shiftx, l_float32 shifty ); LEPT_DLL extern PIX * pixScaleBySamplingToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleByIntSampling ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixScaleRGBToGrayFast ( PIX *pixs, l_int32 factor, l_int32 color ); LEPT_DLL extern PIX * pixScaleRGBToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGrayToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleSmooth ( PIX *pix, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleSmoothToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleRGBToGray2 ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIX * pixScaleAreaMap ( PIX *pix, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleAreaMap2 ( PIX *pix ); LEPT_DLL extern PIX * pixScaleAreaMapToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleBinary ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleBinaryWithShift ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 shiftx, l_float32 shifty ); LEPT_DLL extern PIX * pixScaleToGray ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleToGrayFast ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleToGray2 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray3 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray4 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray6 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray8 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray16 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGrayMipmap ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleMipmap ( PIX *pixs1, PIX *pixs2, l_float32 scale ); LEPT_DLL extern PIX * pixExpandReplicate ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixScaleGrayMinMax ( PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type ); LEPT_DLL extern PIX * pixScaleGrayMinMax2 ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixScaleGrayRankCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); LEPT_DLL extern PIX * pixScaleGrayRank2 ( PIX *pixs, l_int32 rank ); LEPT_DLL extern l_ok pixScaleAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleWithAlpha ( PIX *pixs, l_float32 scalex, l_float32 scaley, PIX *pixg, l_float32 fract ); LEPT_DLL extern PIX * pixSeedfillBinary ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern PIX * pixSeedfillBinaryRestricted ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax ); LEPT_DLL extern PIX * pixHolesByFilling ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillClosedBorders ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixExtractBorderConnComps ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixRemoveBorderConnComps ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillBgFromBorder ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillHolesToBoundingRect ( PIX *pixs, l_int32 minsize, l_float32 maxhfract, l_float32 minfgfract ); LEPT_DLL extern l_ok pixSeedfillGray ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_ok pixSeedfillGrayInv ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_ok pixSeedfillGraySimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_ok pixSeedfillGrayInvSimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern PIX * pixSeedfillGrayBasin ( PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity ); LEPT_DLL extern PIX * pixDistanceFunction ( PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond ); LEPT_DLL extern PIX * pixSeedspread ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern l_ok pixLocalExtrema ( PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax ); LEPT_DLL extern l_ok pixSelectedLocalExtrema ( PIX *pixs, l_int32 mindist, PIX **ppixmin, PIX **ppixmax ); LEPT_DLL extern PIX * pixFindEqualValues ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern l_ok pixSelectMinInConnComp ( PIX *pixs, PIX *pixm, PTA **ppta, NUMA **pnav ); LEPT_DLL extern PIX * pixRemoveSeededComponents ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 bordersize ); LEPT_DLL extern SELA * selaCreate ( l_int32 n ); LEPT_DLL extern void selaDestroy ( SELA **psela ); LEPT_DLL extern SEL * selCreate ( l_int32 height, l_int32 width, const char *name ); LEPT_DLL extern void selDestroy ( SEL **psel ); LEPT_DLL extern SEL * selCopy ( SEL *sel ); LEPT_DLL extern SEL * selCreateBrick ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type ); LEPT_DLL extern SEL * selCreateComb ( l_int32 factor1, l_int32 factor2, l_int32 direction ); LEPT_DLL extern l_int32 ** create2dIntArray ( l_int32 sy, l_int32 sx ); LEPT_DLL extern l_ok selaAddSel ( SELA *sela, SEL *sel, const char *selname, l_int32 copyflag ); LEPT_DLL extern l_int32 selaGetCount ( SELA *sela ); LEPT_DLL extern SEL * selaGetSel ( SELA *sela, l_int32 i ); LEPT_DLL extern char * selGetName ( SEL *sel ); LEPT_DLL extern l_ok selSetName ( SEL *sel, const char *name ); LEPT_DLL extern l_ok selaFindSelByName ( SELA *sela, const char *name, l_int32 *pindex, SEL **psel ); LEPT_DLL extern l_ok selGetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 *ptype ); LEPT_DLL extern l_ok selSetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 type ); LEPT_DLL extern l_ok selGetParameters ( SEL *sel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); LEPT_DLL extern l_ok selSetOrigin ( SEL *sel, l_int32 cy, l_int32 cx ); LEPT_DLL extern l_ok selGetTypeAtOrigin ( SEL *sel, l_int32 *ptype ); LEPT_DLL extern char * selaGetBrickName ( SELA *sela, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern char * selaGetCombName ( SELA *sela, l_int32 size, l_int32 direction ); LEPT_DLL extern l_ok getCompositeParameters ( l_int32 size, l_int32 *psize1, l_int32 *psize2, char **pnameh1, char **pnameh2, char **pnamev1, char **pnamev2 ); LEPT_DLL extern SARRAY * selaGetSelnames ( SELA *sela ); LEPT_DLL extern l_ok selFindMaxTranslations ( SEL *sel, l_int32 *pxp, l_int32 *pyp, l_int32 *pxn, l_int32 *pyn ); LEPT_DLL extern SEL * selRotateOrth ( SEL *sel, l_int32 quads ); LEPT_DLL extern SELA * selaRead ( const char *fname ); LEPT_DLL extern SELA * selaReadStream ( FILE *fp ); LEPT_DLL extern SEL * selRead ( const char *fname ); LEPT_DLL extern SEL * selReadStream ( FILE *fp ); LEPT_DLL extern l_ok selaWrite ( const char *fname, SELA *sela ); LEPT_DLL extern l_ok selaWriteStream ( FILE *fp, SELA *sela ); LEPT_DLL extern l_ok selWrite ( const char *fname, SEL *sel ); LEPT_DLL extern l_ok selWriteStream ( FILE *fp, SEL *sel ); LEPT_DLL extern SEL * selCreateFromString ( const char *text, l_int32 h, l_int32 w, const char *name ); LEPT_DLL extern char * selPrintToString ( SEL *sel ); LEPT_DLL extern SELA * selaCreateFromFile ( const char *filename ); LEPT_DLL extern SEL * selCreateFromPta ( PTA *pta, l_int32 cy, l_int32 cx, const char *name ); LEPT_DLL extern SEL * selCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx, const char *name ); LEPT_DLL extern SEL * selReadFromColorImage ( const char *pathname ); LEPT_DLL extern SEL * selCreateFromColorPix ( PIX *pixs, const char *selname ); LEPT_DLL extern SELA * selaCreateFromColorPixa ( PIXA *pixa, SARRAY *sa ); LEPT_DLL extern PIX * selDisplayInPix ( SEL *sel, l_int32 size, l_int32 gthick ); LEPT_DLL extern PIX * selaDisplayInPix ( SELA *sela, l_int32 size, l_int32 gthick, l_int32 spacing, l_int32 ncols ); LEPT_DLL extern SELA * selaAddBasic ( SELA *sela ); LEPT_DLL extern SELA * selaAddHitMiss ( SELA *sela ); LEPT_DLL extern SELA * selaAddDwaLinear ( SELA *sela ); LEPT_DLL extern SELA * selaAddDwaCombs ( SELA *sela ); LEPT_DLL extern SELA * selaAddCrossJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); LEPT_DLL extern SELA * selaAddTJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); LEPT_DLL extern SELA * sela4ccThin ( SELA *sela ); LEPT_DLL extern SELA * sela8ccThin ( SELA *sela ); LEPT_DLL extern SELA * sela4and8ccThin ( SELA *sela ); LEPT_DLL extern SEL * selMakePlusSign ( l_int32 size, l_int32 linewidth ); LEPT_DLL extern SEL * pixGenerateSelBoundary ( PIX *pixs, l_int32 hitdist, l_int32 missdist, l_int32 hitskip, l_int32 missskip, l_int32 topflag, l_int32 botflag, l_int32 leftflag, l_int32 rightflag, PIX **ppixe ); LEPT_DLL extern SEL * pixGenerateSelWithRuns ( PIX *pixs, l_int32 nhlines, l_int32 nvlines, l_int32 distance, l_int32 minlength, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); LEPT_DLL extern SEL * pixGenerateSelRandom ( PIX *pixs, l_float32 hitfract, l_float32 missfract, l_int32 distance, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); LEPT_DLL extern NUMA * pixGetRunCentersOnLine ( PIX *pixs, l_int32 x, l_int32 y, l_int32 minlength ); LEPT_DLL extern NUMA * pixGetRunsOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); LEPT_DLL extern PTA * pixSubsampleBoundaryPixels ( PIX *pixs, l_int32 skip ); LEPT_DLL extern l_int32 adjacentOnPixelInRaster ( PIX *pixs, l_int32 x, l_int32 y, l_int32 *pxa, l_int32 *pya ); LEPT_DLL extern PIX * pixDisplayHitMissSel ( PIX *pixs, SEL *sel, l_int32 scalefactor, l_uint32 hitcolor, l_uint32 misscolor ); LEPT_DLL extern PIX * pixHShear ( PIX *pixd, PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShear ( PIX *pixd, PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern l_ok pixHShearIP ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern l_ok pixVShearIP ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearLI ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearLI ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixDeskewBoth ( PIX *pixs, l_int32 redsearch ); LEPT_DLL extern PIX * pixDeskew ( PIX *pixs, l_int32 redsearch ); LEPT_DLL extern PIX * pixFindSkewAndDeskew ( PIX *pixs, l_int32 redsearch, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern PIX * pixDeskewGeneral ( PIX *pixs, l_int32 redsweep, l_float32 sweeprange, l_float32 sweepdelta, l_int32 redsearch, l_int32 thresh, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern l_ok pixFindSkew ( PIX *pixs, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern l_ok pixFindSkewSweep ( PIX *pixs, l_float32 *pangle, l_int32 reduction, l_float32 sweeprange, l_float32 sweepdelta ); LEPT_DLL extern l_ok pixFindSkewSweepAndSearch ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_ok pixFindSkewSweepAndSearchScore ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_ok pixFindSkewSweepAndSearchScorePivot ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_int32 pivot ); LEPT_DLL extern l_int32 pixFindSkewOrthogonalRange ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 confprior ); LEPT_DLL extern l_ok pixFindDifferentialSquareSum ( PIX *pixs, l_float32 *psum ); LEPT_DLL extern l_ok pixFindNormalizedSquareSum ( PIX *pixs, l_float32 *phratio, l_float32 *pvratio, l_float32 *pfract ); LEPT_DLL extern PIX * pixReadStreamSpix ( FILE *fp ); LEPT_DLL extern l_ok readHeaderSpix ( const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok freadHeaderSpix ( FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok sreadHeaderSpix ( const l_uint32 *data, size_t size, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_ok pixWriteStreamSpix ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemSpix ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixWriteMemSpix ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern l_ok pixSerializeToMemory ( PIX *pixs, l_uint32 **pdata, size_t *pnbytes ); LEPT_DLL extern PIX * pixDeserializeFromMemory ( const l_uint32 *data, size_t nbytes ); LEPT_DLL extern L_STACK * lstackCreate ( l_int32 n ); LEPT_DLL extern void lstackDestroy ( L_STACK **plstack, l_int32 freeflag ); LEPT_DLL extern l_ok lstackAdd ( L_STACK *lstack, void *item ); LEPT_DLL extern void * lstackRemove ( L_STACK *lstack ); LEPT_DLL extern l_int32 lstackGetCount ( L_STACK *lstack ); LEPT_DLL extern l_ok lstackPrint ( FILE *fp, L_STACK *lstack ); LEPT_DLL extern L_STRCODE * strcodeCreate ( l_int32 fileno ); LEPT_DLL extern l_ok strcodeCreateFromFile ( const char *filein, l_int32 fileno, const char *outdir ); LEPT_DLL extern l_ok strcodeGenerate ( L_STRCODE *strcode, const char *filein, const char *type ); LEPT_DLL extern l_int32 strcodeFinalize ( L_STRCODE **pstrcode, const char *outdir ); LEPT_DLL extern l_int32 l_getStructStrFromFile ( const char *filename, l_int32 field, char **pstr ); LEPT_DLL extern l_ok pixFindStrokeLength ( PIX *pixs, l_int32 *tab8, l_int32 *plength ); LEPT_DLL extern l_ok pixFindStrokeWidth ( PIX *pixs, l_float32 thresh, l_int32 *tab8, l_float32 *pwidth, NUMA **pnahisto ); LEPT_DLL extern NUMA * pixaFindStrokeWidth ( PIXA *pixa, l_float32 thresh, l_int32 *tab8, l_int32 debug ); LEPT_DLL extern PIXA * pixaModifyStrokeWidth ( PIXA *pixas, l_float32 targetw ); LEPT_DLL extern PIX * pixModifyStrokeWidth ( PIX *pixs, l_float32 width, l_float32 targetw ); LEPT_DLL extern PIXA * pixaSetStrokeWidth ( PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity ); LEPT_DLL extern PIX * pixSetStrokeWidth ( PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity ); LEPT_DLL extern l_int32 * sudokuReadFile ( const char *filename ); LEPT_DLL extern l_int32 * sudokuReadString ( const char *str ); LEPT_DLL extern L_SUDOKU * sudokuCreate ( l_int32 *array ); LEPT_DLL extern void sudokuDestroy ( L_SUDOKU **psud ); LEPT_DLL extern l_int32 sudokuSolve ( L_SUDOKU *sud ); LEPT_DLL extern l_ok sudokuTestUniqueness ( l_int32 *array, l_int32 *punique ); LEPT_DLL extern L_SUDOKU * sudokuGenerate ( l_int32 *array, l_int32 seed, l_int32 minelems, l_int32 maxtries ); LEPT_DLL extern l_int32 sudokuOutput ( L_SUDOKU *sud, l_int32 arraytype ); LEPT_DLL extern PIX * pixAddSingleTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow ); LEPT_DLL extern PIX * pixAddTextlines ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); LEPT_DLL extern l_ok pixSetTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow ); LEPT_DLL extern l_ok pixSetTextline ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow ); LEPT_DLL extern PIXA * pixaAddTextNumber ( PIXA *pixas, L_BMF *bmf, NUMA *na, l_uint32 val, l_int32 location ); LEPT_DLL extern PIXA * pixaAddTextlines ( PIXA *pixas, L_BMF *bmf, SARRAY *sa, l_uint32 val, l_int32 location ); LEPT_DLL extern l_ok pixaAddPixWithText ( PIXA *pixa, PIX *pixs, l_int32 reduction, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); LEPT_DLL extern SARRAY * bmfGetLineStrings ( L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph ); LEPT_DLL extern NUMA * bmfGetWordWidths ( L_BMF *bmf, const char *textstr, SARRAY *sa ); LEPT_DLL extern l_ok bmfGetStringWidth ( L_BMF *bmf, const char *textstr, l_int32 *pw ); LEPT_DLL extern SARRAY * splitStringToParagraphs ( char *textstr, l_int32 splitflag ); LEPT_DLL extern PIX * pixReadTiff ( const char *filename, l_int32 n ); LEPT_DLL extern PIX * pixReadStreamTiff ( FILE *fp, l_int32 n ); LEPT_DLL extern l_ok pixWriteTiff ( const char *filename, PIX *pix, l_int32 comptype, const char *modestr ); LEPT_DLL extern l_ok pixWriteTiffCustom ( const char *filename, PIX *pix, l_int32 comptype, const char *modestr, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); LEPT_DLL extern l_ok pixWriteStreamTiff ( FILE *fp, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_ok pixWriteStreamTiffWA ( FILE *fp, PIX *pix, l_int32 comptype, const char *modestr ); LEPT_DLL extern PIX * pixReadFromMultipageTiff ( const char *fname, size_t *poffset ); LEPT_DLL extern PIXA * pixaReadMultipageTiff ( const char *filename ); LEPT_DLL extern l_ok pixaWriteMultipageTiff ( const char *fname, PIXA *pixa ); LEPT_DLL extern l_ok writeMultipageTiff ( const char *dirin, const char *substr, const char *fileout ); LEPT_DLL extern l_ok writeMultipageTiffSA ( SARRAY *sa, const char *fileout ); LEPT_DLL extern l_ok fprintTiffInfo ( FILE *fpout, const char *tiffile ); LEPT_DLL extern l_ok tiffGetCount ( FILE *fp, l_int32 *pn ); LEPT_DLL extern l_ok getTiffResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_ok readHeaderTiff ( const char *filename, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_ok freadHeaderTiff ( FILE *fp, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_ok readHeaderMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_ok findTiffCompression ( FILE *fp, l_int32 *pcomptype ); LEPT_DLL extern l_ok extractG4DataFromFile ( const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack ); LEPT_DLL extern PIX * pixReadMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n ); LEPT_DLL extern PIX * pixReadMemFromMultipageTiff ( const l_uint8 *cdata, size_t size, size_t *poffset ); LEPT_DLL extern PIXA * pixaReadMemMultipageTiff ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_ok pixaWriteMemMultipageTiff ( l_uint8 **pdata, size_t *psize, PIXA *pixa ); LEPT_DLL extern l_ok pixWriteMemTiff ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_ok pixWriteMemTiffCustom ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); LEPT_DLL extern l_int32 setMsgSeverity ( l_int32 newsev ); LEPT_DLL extern l_int32 returnErrorInt ( const char *msg, const char *procname, l_int32 ival ); LEPT_DLL extern l_float32 returnErrorFloat ( const char *msg, const char *procname, l_float32 fval ); LEPT_DLL extern void * returnErrorPtr ( const char *msg, const char *procname, void *pval ); LEPT_DLL extern l_int32 returnErrorInt1 ( const char *msg, const char *arg, const char *procname, l_int32 ival ); LEPT_DLL extern l_float32 returnErrorFloat1 ( const char *msg, const char *arg, const char *procname, l_float32 fval ); LEPT_DLL extern void * returnErrorPtr1 ( const char *msg, const char *arg, const char *procname, void *pval ); LEPT_DLL extern void leptSetStderrHandler ( void ( *handler ) ( const char * ) ); LEPT_DLL extern void lept_stderr ( const char *fmt, ... ); LEPT_DLL extern l_ok filesAreIdentical ( const char *fname1, const char *fname2, l_int32 *psame ); LEPT_DLL extern l_uint16 convertOnLittleEnd16 ( l_uint16 shortin ); LEPT_DLL extern l_uint16 convertOnBigEnd16 ( l_uint16 shortin ); LEPT_DLL extern l_uint32 convertOnLittleEnd32 ( l_uint32 wordin ); LEPT_DLL extern l_uint32 convertOnBigEnd32 ( l_uint32 wordin ); LEPT_DLL extern l_ok fileCorruptByDeletion ( const char *filein, l_float32 loc, l_float32 size, const char *fileout ); LEPT_DLL extern l_ok fileCorruptByMutation ( const char *filein, l_float32 loc, l_float32 size, const char *fileout ); LEPT_DLL extern l_ok fileReplaceBytes ( const char *filein, l_int32 start, l_int32 nbytes, l_uint8 *newdata, size_t newsize, const char *fileout ); LEPT_DLL extern l_ok genRandomIntOnInterval ( l_int32 start, l_int32 end, l_int32 seed, l_int32 *pval ); LEPT_DLL extern l_int32 lept_roundftoi ( l_float32 fval ); LEPT_DLL extern l_int32 lept_floor ( l_float32 fval ); LEPT_DLL extern l_int32 lept_ceiling ( l_float32 fval ); LEPT_DLL extern l_ok l_hashStringToUint64 ( const char *str, l_uint64 *phash ); LEPT_DLL extern l_ok l_hashStringToUint64Fast ( const char *str, l_uint64 *phash ); LEPT_DLL extern l_ok l_hashPtToUint64 ( l_int32 x, l_int32 y, l_uint64 *phash ); LEPT_DLL extern l_ok l_hashFloat64ToUint64 ( l_float64 val, l_uint64 *phash ); LEPT_DLL extern l_ok findNextLargerPrime ( l_int32 start, l_uint32 *pprime ); LEPT_DLL extern l_ok lept_isPrime ( l_uint64 n, l_int32 *pis_prime, l_uint32 *pfactor ); LEPT_DLL extern l_uint32 convertIntToGrayCode ( l_uint32 val ); LEPT_DLL extern l_uint32 convertGrayCodeToInt ( l_uint32 val ); LEPT_DLL extern char * getLeptonicaVersion ( void ); LEPT_DLL extern void startTimer ( void ); LEPT_DLL extern l_float32 stopTimer ( void ); LEPT_DLL extern L_TIMER startTimerNested ( void ); LEPT_DLL extern l_float32 stopTimerNested ( L_TIMER rusage_start ); LEPT_DLL extern void l_getCurrentTime ( l_int32 *sec, l_int32 *usec ); LEPT_DLL extern L_WALLTIMER * startWallTimer ( void ); LEPT_DLL extern l_float32 stopWallTimer ( L_WALLTIMER **ptimer ); LEPT_DLL extern char * l_getFormattedDate ( void ); LEPT_DLL extern char * stringNew ( const char *src ); LEPT_DLL extern l_ok stringCopy ( char *dest, const char *src, l_int32 n ); LEPT_DLL extern char * stringCopySegment ( const char *src, l_int32 start, l_int32 nbytes ); LEPT_DLL extern l_ok stringReplace ( char **pdest, const char *src ); LEPT_DLL extern l_int32 stringLength ( const char *src, size_t size ); LEPT_DLL extern l_int32 stringCat ( char *dest, size_t size, const char *src ); LEPT_DLL extern char * stringConcatNew ( const char *first, ... ); LEPT_DLL extern char * stringJoin ( const char *src1, const char *src2 ); LEPT_DLL extern l_ok stringJoinIP ( char **psrc1, const char *src2 ); LEPT_DLL extern char * stringReverse ( const char *src ); LEPT_DLL extern char * strtokSafe ( char *cstr, const char *seps, char **psaveptr ); LEPT_DLL extern l_ok stringSplitOnToken ( char *cstr, const char *seps, char **phead, char **ptail ); LEPT_DLL extern l_ok stringCheckForChars ( const char *src, const char *chars, l_int32 *pfound ); LEPT_DLL extern char * stringRemoveChars ( const char *src, const char *remchars ); LEPT_DLL extern char * stringReplaceEachSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *pcount ); LEPT_DLL extern char * stringReplaceSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *ploc, l_int32 *pfound ); LEPT_DLL extern L_DNA * stringFindEachSubstr ( const char *src, const char *sub ); LEPT_DLL extern l_int32 stringFindSubstr ( const char *src, const char *sub, l_int32 *ploc ); LEPT_DLL extern l_uint8 * arrayReplaceEachSequence ( const l_uint8 *datas, size_t dataslen, const l_uint8 *seq, size_t seqlen, const l_uint8 *newseq, size_t newseqlen, size_t *pdatadlen, l_int32 *pcount ); LEPT_DLL extern L_DNA * arrayFindEachSequence ( const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen ); LEPT_DLL extern l_ok arrayFindSequence ( const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen, l_int32 *poffset, l_int32 *pfound ); LEPT_DLL extern void * reallocNew ( void **pindata, size_t oldsize, size_t newsize ); LEPT_DLL extern l_uint8 * l_binaryRead ( const char *filename, size_t *pnbytes ); LEPT_DLL extern l_uint8 * l_binaryReadStream ( FILE *fp, size_t *pnbytes ); LEPT_DLL extern l_uint8 * l_binaryReadSelect ( const char *filename, size_t start, size_t nbytes, size_t *pnread ); LEPT_DLL extern l_uint8 * l_binaryReadSelectStream ( FILE *fp, size_t start, size_t nbytes, size_t *pnread ); LEPT_DLL extern l_ok l_binaryWrite ( const char *filename, const char *operation, const void *data, size_t nbytes ); LEPT_DLL extern size_t nbytesInFile ( const char *filename ); LEPT_DLL extern size_t fnbytesInFile ( FILE *fp ); LEPT_DLL extern l_uint8 * l_binaryCopy ( const l_uint8 *datas, size_t size ); LEPT_DLL extern l_ok l_binaryCompare ( const l_uint8 *data1, size_t size1, const l_uint8 *data2, size_t size2, l_int32 *psame ); LEPT_DLL extern l_ok fileCopy ( const char *srcfile, const char *newfile ); LEPT_DLL extern l_ok fileConcatenate ( const char *srcfile, const char *destfile ); LEPT_DLL extern l_ok fileAppendString ( const char *filename, const char *str ); LEPT_DLL extern l_ok fileSplitLinesUniform ( const char *filename, l_int32 n, l_int32 save_empty, const char *rootpath, const char *ext ); LEPT_DLL extern FILE * fopenReadStream ( const char *filename ); LEPT_DLL extern FILE * fopenWriteStream ( const char *filename, const char *modestring ); LEPT_DLL extern FILE * fopenReadFromMemory ( const l_uint8 *data, size_t size ); LEPT_DLL extern FILE * fopenWriteWinTempfile ( void ); LEPT_DLL extern FILE * lept_fopen ( const char *filename, const char *mode ); LEPT_DLL extern l_ok lept_fclose ( FILE *fp ); LEPT_DLL extern void * lept_calloc ( size_t nmemb, size_t size ); LEPT_DLL extern void lept_free ( void *ptr ); LEPT_DLL extern l_int32 lept_mkdir ( const char *subdir ); LEPT_DLL extern l_int32 lept_rmdir ( const char *subdir ); LEPT_DLL extern void lept_direxists ( const char *dir, l_int32 *pexists ); LEPT_DLL extern l_int32 lept_rm_match ( const char *subdir, const char *substr ); LEPT_DLL extern l_int32 lept_rm ( const char *subdir, const char *tail ); LEPT_DLL extern l_int32 lept_rmfile ( const char *filepath ); LEPT_DLL extern l_int32 lept_mv ( const char *srcfile, const char *newdir, const char *newtail, char **pnewpath ); LEPT_DLL extern l_int32 lept_cp ( const char *srcfile, const char *newdir, const char *newtail, char **pnewpath ); LEPT_DLL extern l_int32 callSystemDebug ( const char *cmd ); LEPT_DLL extern l_ok splitPathAtDirectory ( const char *pathname, char **pdir, char **ptail ); LEPT_DLL extern l_ok splitPathAtExtension ( const char *pathname, char **pbasename, char **pextension ); LEPT_DLL extern char * pathJoin ( const char *dir, const char *fname ); LEPT_DLL extern char * appendSubdirs ( const char *basedir, const char *subdirs ); LEPT_DLL extern l_ok convertSepCharsInPath ( char *path, l_int32 type ); LEPT_DLL extern char * genPathname ( const char *dir, const char *fname ); LEPT_DLL extern l_ok makeTempDirname ( char *result, size_t nbytes, const char *subdir ); LEPT_DLL extern l_ok modifyTrailingSlash ( char *path, size_t nbytes, l_int32 flag ); LEPT_DLL extern char * l_makeTempFilename ( void ); LEPT_DLL extern l_int32 extractNumberFromFilename ( const char *fname, l_int32 numpre, l_int32 numpost ); LEPT_DLL extern PIX * pixSimpleCaptcha ( PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag ); LEPT_DLL extern PIX * pixRandomHarmonicWarp ( PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval ); LEPT_DLL extern PIX * pixWarpStereoscopic ( PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft ); LEPT_DLL extern PIX * pixStretchHorizontal ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor ); LEPT_DLL extern PIX * pixStretchHorizontalSampled ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); LEPT_DLL extern PIX * pixStretchHorizontalLI ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShear ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShearSampled ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShearLI ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); LEPT_DLL extern PIX * pixStereoFromPair ( PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern L_WSHED * wshedCreate ( PIX *pixs, PIX *pixm, l_int32 mindepth, l_int32 debugflag ); LEPT_DLL extern void wshedDestroy ( L_WSHED **pwshed ); LEPT_DLL extern l_ok wshedApply ( L_WSHED *wshed ); LEPT_DLL extern l_ok wshedBasins ( L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels ); LEPT_DLL extern PIX * wshedRenderFill ( L_WSHED *wshed ); LEPT_DLL extern PIX * wshedRenderColors ( L_WSHED *wshed ); LEPT_DLL extern l_ok pixaWriteWebPAnim ( const char *filename, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_ok pixaWriteStreamWebPAnim ( FILE *fp, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_ok pixaWriteMemWebPAnim ( l_uint8 **pencdata, size_t *pencsize, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); LEPT_DLL extern PIX * pixReadStreamWebP ( FILE *fp ); LEPT_DLL extern PIX * pixReadMemWebP ( const l_uint8 *filedata, size_t filesize ); LEPT_DLL extern l_ok readHeaderWebP ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern l_ok readHeaderMemWebP ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern l_ok pixWriteWebP ( const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_ok pixWriteStreamWebP ( FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_ok pixWriteMemWebP ( l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_int32 l_jpegSetQuality ( l_int32 new_quality ); LEPT_DLL extern void setLeptDebugOK ( l_int32 allow ); LEPT_DLL extern l_ok pixaWriteFiles ( const char *rootname, PIXA *pixa, l_int32 format ); LEPT_DLL extern l_ok pixWriteDebug ( const char *fname, PIX *pix, l_int32 format ); LEPT_DLL extern l_ok pixWrite ( const char *fname, PIX *pix, l_int32 format ); LEPT_DLL extern l_ok pixWriteAutoFormat ( const char *filename, PIX *pix ); LEPT_DLL extern l_ok pixWriteStream ( FILE *fp, PIX *pix, l_int32 format ); LEPT_DLL extern l_ok pixWriteImpliedFormat ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_int32 pixChooseOutputFormat ( PIX *pix ); LEPT_DLL extern l_int32 getImpliedFileFormat ( const char *filename ); LEPT_DLL extern l_int32 getFormatFromExtension ( const char *extension ); LEPT_DLL extern l_ok pixGetAutoFormat ( PIX *pix, l_int32 *pformat ); LEPT_DLL extern const char * getFormatExtension ( l_int32 format ); LEPT_DLL extern l_ok pixWriteMem ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format ); LEPT_DLL extern l_ok l_fileDisplay ( const char *fname, l_int32 x, l_int32 y, l_float32 scale ); LEPT_DLL extern l_ok pixDisplay ( PIX *pixs, l_int32 x, l_int32 y ); LEPT_DLL extern l_ok pixDisplayWithTitle ( PIX *pixs, l_int32 x, l_int32 y, const char *title, l_int32 dispflag ); LEPT_DLL extern PIX * pixMakeColorSquare ( l_uint32 color, l_int32 size, l_int32 addlabel, l_int32 location, l_uint32 textcolor ); LEPT_DLL extern void l_chooseDisplayProg ( l_int32 selection ); LEPT_DLL extern void changeFormatForMissingLib ( l_int32 *pformat ); LEPT_DLL extern l_ok pixDisplayWrite ( PIX *pixs, l_int32 reduction ); LEPT_DLL extern l_uint8 * zlibCompress ( const l_uint8 *datain, size_t nin, size_t *pnout ); LEPT_DLL extern l_uint8 * zlibUncompress ( const l_uint8 *datain, size_t nin, size_t *pnout ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* NO_PROTOS */ #endif /* LEPTONICA_ALLHEADERS_H */ leptonica-1.86.0/src/allheaders_bot.txt000066400000000000000000000000761506303110300200570ustar00rootroot00000000000000#endif /* NO_PROTOS */ #endif /* LEPTONICA_ALLHEADERS_H */ leptonica-1.86.0/src/allheaders_top.txt000066400000000000000000000032771506303110300201030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ALLHEADERS_H #define LEPTONICA_ALLHEADERS_H #define LIBLEPT_MAJOR_VERSION 1 #define LIBLEPT_MINOR_VERSION 86 #define LIBLEPT_PATCH_VERSION 0 #include "alltypes.h" #ifndef NO_PROTOS leptonica-1.86.0/src/alltypes.h000066400000000000000000000044351506303110300163570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ALLTYPES_H #define LEPTONICA_ALLTYPES_H /* Standard */ #include #include #include /* General and configuration defs */ #include "endianness.h" #include "environ.h" /* Generic and non-image-specific containers */ #include "array.h" #include "bbuffer.h" #include "hashmap.h" #include "heap.h" #include "list.h" #include "ptra.h" #include "queue.h" #include "rbtree.h" #include "stack.h" /* Imaging */ #include "arrayaccess.h" #include "bmf.h" #include "ccbord.h" #include "colorfill.h" #include "dewarp.h" #include "gplot.h" #include "imageio.h" #include "jbclass.h" #include "morph.h" #include "pix.h" #include "recog.h" #include "regutils.h" #include "stringcode.h" #include "sudoku.h" #include "watershed.h" #endif /* LEPTONICA_ALLTYPES_H */ leptonica-1.86.0/src/array.h000066400000000000000000000100761506303110300156360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ARRAY_H #define LEPTONICA_ARRAY_H /*! * \file array.h * *
 *  This file has typedefs for the following array structs:
 *      struct Numa          array of floats
 *      struct Numaa
 *      struct L_Dna         array of doubles
 *      struct L_Dnaa
 *      struct L_Dnahash
 *      struct Sarray        array of C-strings
 *      struct L_Bytea       array of bytes
 *
 *  It contains definitions for:
 *      Numa interpolation flags
 *      Numa border flags
 *      Numa data type conversion to string
 *
 *  Here are the non-image-related arrays in leptonica:
 *  * Numa, L_Dna, L_Ptra, Sarray:
 *    These have most of the typical operations of vectors, such as add,
 *    insert, remove and replace.
 *  * Numaa, L_Dnaa, L_Ptraa:
 *    These are arrays of float, double and generic pointer arrays.
 *  * L_Bytea:
 *    This is an array of bytes, analogous to a C++ string.
 *  * L_Dnahash:
 *    This is a simple hashing for integers, used in the jbig2 classifier.
 * 
*/ /*------------------------------------------------------------------------* * Array Structs * *------------------------------------------------------------------------*/ /*! Number array: an array of floats */ typedef struct Numa NUMA; /*! Array of number arrays */ typedef struct Numaa NUMAA; /*! Double number array: an array of doubles */ typedef struct L_Dna L_DNA; /*! Array of double number arrays */ typedef struct L_Dnaa L_DNAA; /*! Array of double number arrays, used as a simple hash */ typedef struct L_DnaHash L_DNAHASH; /*! String array: an array of C strings */ typedef struct Sarray SARRAY; /*! Byte array (analogous to C++ "string") */ typedef struct L_Bytea L_BYTEA; /*------------------------------------------------------------------------* * Array flags * *------------------------------------------------------------------------*/ /*! Numa Interpolation */ enum { L_LINEAR_INTERP = 1, /*!< linear */ L_QUADRATIC_INTERP = 2 /*!< quadratic */ }; /*! Numa Border Adding */ enum { L_CONTINUED_BORDER = 1, /*!< extended with same value */ L_SLOPE_BORDER = 2, /*!< extended with constant normal derivative */ L_MIRRORED_BORDER = 3 /*!< mirrored */ }; /*! Numa Data Conversion */ enum { L_INTEGER_VALUE = 1, /*!< convert to integer */ L_FLOAT_VALUE = 2 /*!< convert to float */ }; #endif /* LEPTONICA_ARRAY_H */ leptonica-1.86.0/src/array_internal.h000066400000000000000000000130071506303110300175270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ARRAY_INTERNAL_H #define LEPTONICA_ARRAY_INTERNAL_H /*! * \file array_internal.h * *
 *  Contains the following structs:
 *      struct Numa          array of floats
 *      struct Numaa
 *      struct L_Dna         array of doubles
 *      struct L_Dnaa
 *      struct L_Dnahash
 *      struct Sarray        array of C-strings
 *      struct L_Bytea       array of bytes
 *
 *  This file can be #included after allheaders.h in source files that
 *  require direct access to the internal data fields in these structs.
 *
 *  Here are the non-image-related arrays in leptonica:
 *  * Numa, L_Dna, L_Ptra, Sarray:
 *    These have most of the typical operations of vectors, such as add,
 *    insert, remove and replace.
 *  * Numaa, L_Dnaa, L_Ptraa:
 *    These are arrays of float, double and generic pointer arrays.
 *  * L_Bytea:
 *    This is an array of bytes, analogous to a C++ string.
 *  * L_Dnahash:
 *    This is a simple hashing for integers, used in the jbig2 classifier.
 * 
*/ /*------------------------------------------------------------------------* * Array Structs * *------------------------------------------------------------------------*/ /*! Numa version for serialization */ #define NUMA_VERSION_NUMBER 1 /*! Number array: an array of floats */ struct Numa { l_int32 nalloc; /*!< size of allocated number array */ l_int32 n; /*!< number of numbers saved */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_float32 startx; /*!< x value assigned to array[0] */ l_float32 delx; /*!< change in x value as i --> i + 1 */ l_float32 *array; /*!< number array */ }; /*! Array of number arrays */ struct Numaa { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 n; /*!< number of Numa saved */ struct Numa **numa; /*!< array of Numa */ }; /*! Dna version for serialization */ #define DNA_VERSION_NUMBER 1 /*! Double number array: an array of doubles */ struct L_Dna { l_int32 nalloc; /*!< size of allocated number array */ l_int32 n; /*!< number of numbers saved */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_float64 startx; /*!< x value assigned to array[0] */ l_float64 delx; /*!< change in x value as i --> i + 1 */ l_float64 *array; /*!< number array */ }; /*! Array of double number arrays */ struct L_Dnaa { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 n; /*!< number of L_Dna saved */ struct L_Dna **dna; /*!< array of L_Dna */ }; struct L_DnaHash { l_int32 nbuckets; l_int32 initsize; /*!< initial size of each dna that is made */ struct L_Dna **dna; /*!< array of L_Dna */ }; /*! Sarray version for serialization */ #define SARRAY_VERSION_NUMBER 1 /*! String array: an array of C strings */ struct Sarray { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 n; /*!< number of strings allocated */ l_atomic refcount; /*!< reference count (1 if no clones) */ char **array; /*!< string array */ }; /*! Byte array (analogous to C++ "string") */ struct L_Bytea { size_t nalloc; /*!< number of bytes allocated in data array */ size_t size; /*!< number of bytes presently used */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_uint8 *data; /*!< data array */ }; #endif /* LEPTONICA_ARRAY_INTERNAL_H */ leptonica-1.86.0/src/arrayaccess.c000066400000000000000000000224411506303110300170120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file arrayaccess.c *
 *
 *     Access within an array of 32-bit words
 *
 *           l_int32     l_getDataBit()
 *           void        l_setDataBit()
 *           void        l_clearDataBit()
 *           void        l_setDataBitVal()
 *           l_int32     l_getDataDibit()
 *           void        l_setDataDibit()
 *           void        l_clearDataDibit()
 *           l_int32     l_getDataQbit()
 *           void        l_setDataQbit()
 *           void        l_clearDataQbit()
 *           l_int32     l_getDataByte()
 *           void        l_setDataByte()
 *           l_int32     l_getDataTwoBytes()
 *           void        l_setDataTwoBytes()
 *           l_int32     l_getDataFourBytes()
 *           void        l_setDataFourBytes()
 *
 *     Note that these all require 32-bit alignment, and hence an input
 *     ptr to l_uint32.  However, this is not enforced by the compiler.
 *     Instead, we allow the use of a void* ptr, because the line ptrs
 *     are an efficient way to get random access (see pixGetLinePtrs()).
 *     It is then necessary to cast internally within each function
 *     because ptr arithmetic requires knowing the size of the units
 *     being referenced.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*----------------------------------------------------------------------* * Access within an array of 32-bit words * *----------------------------------------------------------------------*/ /*! * \brief l_getDataBit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return val of the nth 1-bit pixel. */ l_int32 l_getDataBit(const void *line, l_int32 n) { return (*((const l_uint32 *)line + (n >> 5)) >> (31 - (n & 31))) & 1; } /*! * \brief l_setDataBit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return void * * Action: sets the pixel to 1 */ void l_setDataBit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 5)) |= (0x80000000 >> (n & 31)); } /*! * \brief l_clearDataBit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return void * * Action: sets the 1-bit pixel to 0 */ void l_clearDataBit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 5)) &= ~(0x80000000 >> (n & 31)); } /*! * \brief l_setDataBitVal() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 or 1 * \return void * *
 * Notes:
 *      (1) This is an accessor for a 1 bpp pix.
 *      (2) It is actually a little slower than using:
 *            if (val == 0)
 *                l_ClearDataBit(line, n);
 *            else
 *                l_SetDataBit(line, n);
 * 
*/ void l_setDataBitVal(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 5); *pword &= ~(0x80000000 >> (n & 31)); /* clear */ *pword |= (l_uint32)val << (31 - (n & 31)); /* set */ } /*! * \brief l_getDataDibit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return val of the nth 2-bit pixel. */ l_int32 l_getDataDibit(const void *line, l_int32 n) { return (*((const l_uint32 *)line + (n >> 4)) >> (2 * (15 - (n & 15)))) & 3; } /*! * \brief l_setDataDibit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 - 3 * \return void */ void l_setDataDibit(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 4); *pword &= ~(0xc0000000 >> (2 * (n & 15))); /* clear */ *pword |= (l_uint32)(val & 3) << (30 - 2 * (n & 15)); /* set */ } /*! * \brief l_clearDataDibit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return void * * Action: sets the 2-bit pixel to 0 */ void l_clearDataDibit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 4)) &= ~(0xc0000000 >> (2 * (n & 15))); } /*! * \brief l_getDataQbit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return val of the nth 4-bit pixel. */ l_int32 l_getDataQbit(const void *line, l_int32 n) { return (*((const l_uint32 *)line + (n >> 3)) >> (4 * (7 - (n & 7)))) & 0xf; } /*! * \brief l_setDataQbit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 - 0xf * \return void */ void l_setDataQbit(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 3); *pword &= ~(0xf0000000 >> (4 * (n & 7))); /* clear */ *pword |= (l_uint32)(val & 15) << (28 - 4 * (n & 7)); /* set */ } /*! * \brief l_clearDataQbit() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return void * * Action: sets the 4-bit pixel to 0 */ void l_clearDataQbit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 3)) &= ~(0xf0000000 >> (4 * (n & 7))); } /*! * \brief l_getDataByte() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return value of the n-th byte pixel */ l_int32 l_getDataByte(const void *line, l_int32 n) { #ifdef L_BIG_ENDIAN return *((const l_uint8 *)line + n); #else /* L_LITTLE_ENDIAN */ return *(l_uint8 *)((l_uintptr_t)((const l_uint8 *)line + n) ^ 3); #endif /* L_BIG_ENDIAN */ } /*! * \brief l_setDataByte() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 - 0xff * \return void */ void l_setDataByte(void *line, l_int32 n, l_int32 val) { #ifdef L_BIG_ENDIAN *((l_uint8 *)line + n) = val; #else /* L_LITTLE_ENDIAN */ *(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val; #endif /* L_BIG_ENDIAN */ } /*! * \brief l_getDataTwoBytes() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return value of the n-th 2-byte pixel */ l_int32 l_getDataTwoBytes(const void *line, l_int32 n) { #ifdef L_BIG_ENDIAN return *((const l_uint16 *)line + n); #else /* L_LITTLE_ENDIAN */ return *(l_uint16 *)((l_uintptr_t)((const l_uint16 *)line + n) ^ 2); #endif /* L_BIG_ENDIAN */ } /*! * \brief l_setDataTwoBytes() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 - 0xffff * \return void */ void l_setDataTwoBytes(void *line, l_int32 n, l_int32 val) { #ifdef L_BIG_ENDIAN *((l_uint16 *)line + n) = val; #else /* L_LITTLE_ENDIAN */ *(l_uint16 *)((l_uintptr_t)((l_uint16 *)line + n) ^ 2) = val; #endif /* L_BIG_ENDIAN */ } /*! * \brief l_getDataFourBytes() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \return value of the n-th 4-byte pixel */ l_int32 l_getDataFourBytes(const void *line, l_int32 n) { return *((const l_uint32 *)line + n); } /*! * \brief l_setDataFourBytes() * * \param[in] line ptr to beginning of data line * \param[in] n pixel index * \param[in] val val to be inserted: 0 - 0xffffffff * \return void */ void l_setDataFourBytes(void *line, l_int32 n, l_int32 val) { *((l_uint32 *)line + n) = val; } leptonica-1.86.0/src/arrayaccess.h000066400000000000000000000254061506303110300170230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ARRAY_ACCESS_H #define LEPTONICA_ARRAY_ACCESS_H /*! * \file arrayaccess.h * *
 *  1, 2, 4, 8, 16 and 32 bit data access within an array of 32-bit words
 *
 *  This is used primarily to access 1, 2, 4, 8, 16 and 32 bit pixels
 *  in a line of image data, represented as an array of 32-bit words.
 *
 *     pdata:  pointer to first 32-bit word in the array
 *     n:      index of the pixel in the array
 *
 *  Function calls for these accessors are defined in arrayaccess.c.
 *
 *  However, for efficiency we use the inline macros for all accesses.
 *  Even though the 2 and 4 bit set* accessors are more complicated,
 *  they are about 10% faster than the function calls.
 *
 *  The 32 bit access is just a cast and ptr arithmetic.  We include
 *  it so that the input ptr can be void*.
 *
 *  At the end of this file is code for invoking the function calls
 *  instead of inlining.
 *
 *  The macro SET_DATA_BIT_VAL(pdata, n, val) is a bit slower than
 *      if (val == 0)
 *          CLEAR_DATA_BIT(pdata, n);
 *      else
 *          SET_DATA_BIT(pdata, n);
 *
 *  Some compilers complain when the SET macros are surrounded by
 *  parentheses, because parens require an evaluation and it is not
 *  defined for SET macros.  If SET_DATA_QBIT were defined as a
 *  compound macro, in analogy to l_setDataQbit(), it requires
 *  surrounding braces:
 * \code
 *     #define  SET_DATA_QBIT(pdata, n, val) \
 *        {l_uint32 *_TEMP_WORD_PTR_; \
 *         _TEMP_WORD_PTR_ = (l_uint32 *)(pdata) + ((n) >> 3); \
 *         *_TEMP_WORD_PTR_ &= ~(0xf0000000 >> (4 * ((n) & 7))); \
 *         *_TEMP_WORD_PTR_ |= (((val) & 15) << (28 - 4 * ((n) & 7)));}
 * \endcode
 *  but if used in an if/else
 * \code
 *      if (x)
 *         SET_DATA_QBIT(...);
 *      else
 *         ...
 * \endcode
 *  the compiler sees
 * \code
 *      if (x)
 *         {......};
 *      else
 *         ...
 * \endcode
 *  The semicolon comes after the brace and will not compile.
 *  This can be fixed in the call by either omitting the semicolon
 *  or requiring another set of braces around SET_DATA_QBIT(), but
 *  both these options break compatibility with current code, and
 *  require special attention by anyone using the macros.
 *
 *  There are (at least) two ways to fix this in the macro definitions,
 *  suggested by Dave Bryan.
 *  (1) Surround the braces in the macro above with
 *         do {....} while(0)
 *      Then the semicolon just terminates the expression.
 *  (2) Reduce the blocks to a single expression; e.g,
 *         *((l_uint32 *)(pdata) + ((n) >> 3)) = \
 *           *((l_uint32 *)(pdata) + ((n) >> 3)) \
 *           & ~(0xf0000000 >> (4 * ((n) & 7))) \
 *           | (((val) & 15) << (28 - 4 * ((n) & 7)))
 *      This appears to cause redundant computation, but the compiler
 *      should evaluate the common subexpression only once.
 *  All these methods have the same performance, giving about 300M
 *  SET_DATA_QBIT operations per second on a fast 64 bit system.
 *  Using the function calls instead of the macros results in about 250M
 *  SET_DATA_QBIT operations per second, a performance hit of nearly 20%.
 * 
*/ #define USE_INLINE_ACCESSORS 1 #if USE_INLINE_ACCESSORS /*=============================================================*/ /* Faster: use in line accessors */ /*=============================================================*/ /*--------------------------------------------------* * 1 bit access * *--------------------------------------------------*/ /*! 1 bit access - get */ #define GET_DATA_BIT(pdata, n) \ ((*((const l_uint32 *)(pdata) + ((n) >> 5)) >> (31 - ((n) & 31))) & 1) /*! 1 bit access - set */ #define SET_DATA_BIT(pdata, n) \ *((l_uint32 *)(pdata) + ((n) >> 5)) |= (0x80000000 >> ((n) & 31)) /*! 1 bit access - clear */ #define CLEAR_DATA_BIT(pdata, n) \ *((l_uint32 *)(pdata) + ((n) >> 5)) &= ~(0x80000000 >> ((n) & 31)) /*! 1 bit access - set value (0 or 1) */ #define SET_DATA_BIT_VAL(pdata, n, val) \ *((l_uint32 *)(pdata) + ((n) >> 5)) = \ ((*((l_uint32 *)(pdata) + ((n) >> 5)) \ & (~(0x80000000 >> ((n) & 31)))) \ | ((l_uint32)(val) << (31 - ((n) & 31)))) /*--------------------------------------------------* * 2 bit access * *--------------------------------------------------*/ /*! 2 bit access - get */ #define GET_DATA_DIBIT(pdata, n) \ ((*((const l_uint32 *)(pdata) + ((n) >> 4)) >> (2 * (15 - ((n) & 15)))) & 3) /*! 2 bit access - set value (0 ... 3) */ #define SET_DATA_DIBIT(pdata, n, val) \ *((l_uint32 *)(pdata) + ((n) >> 4)) = \ ((*((l_uint32 *)(pdata) + ((n) >> 4)) \ & (~(0xc0000000 >> (2 * ((n) & 15))))) \ | ((l_uint32)((val) & 3) << (30 - 2 * ((n) & 15)))) /*! 2 bit access - clear */ #define CLEAR_DATA_DIBIT(pdata, n) \ *((l_uint32 *)(pdata) + ((n) >> 4)) &= ~(0xc0000000 >> (2 * ((n) & 15))) /*--------------------------------------------------* * 4 bit access * *--------------------------------------------------*/ /*! 4 bit access - get */ #define GET_DATA_QBIT(pdata, n) \ ((*((const l_uint32 *)(pdata) + ((n) >> 3)) >> (4 * (7 - ((n) & 7)))) & 0xf) /*! 4 bit access - set value (0 ... 15) */ #define SET_DATA_QBIT(pdata, n, val) \ *((l_uint32 *)(pdata) + ((n) >> 3)) = \ ((*((l_uint32 *)(pdata) + ((n) >> 3)) \ & (~(0xf0000000 >> (4 * ((n) & 7))))) \ | ((l_uint32)((val) & 15) << (28 - 4 * ((n) & 7)))) /*! 4 bit access - clear */ #define CLEAR_DATA_QBIT(pdata, n) \ *((l_uint32 *)(pdata) + ((n) >> 3)) &= ~(0xf0000000 >> (4 * ((n) & 7))) /*--------------------------------------------------* * 8 bit access * *--------------------------------------------------*/ #ifdef L_BIG_ENDIAN /*! 8 bit access - get */ #define GET_DATA_BYTE(pdata, n) \ (*((const l_uint8 *)(pdata) + (n))) #else /* L_LITTLE_ENDIAN */ /*! 8 bit access - get */ #define GET_DATA_BYTE(pdata, n) \ (*(l_uint8 *)((l_uintptr_t)((const l_uint8 *)(pdata) + (n)) ^ 3)) #endif /* L_BIG_ENDIAN */ #ifdef L_BIG_ENDIAN /*! 8 bit access - set value (0 ... 255) */ #define SET_DATA_BYTE(pdata, n, val) \ *((l_uint8 *)(pdata) + (n)) = (val) #else /* L_LITTLE_ENDIAN */ /*! 8 bit access - set value (0 ... 255) */ #define SET_DATA_BYTE(pdata, n, val) \ *(l_uint8 *)((l_uintptr_t)((l_uint8 *)(pdata) + (n)) ^ 3) = (val) #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------* * 16 bit access * *--------------------------------------------------*/ #ifdef L_BIG_ENDIAN /*! 16 bit access - get */ #define GET_DATA_TWO_BYTES(pdata, n) \ (*((const l_uint16 *)(pdata) + (n))) #else /* L_LITTLE_ENDIAN */ /*! 16 bit access - get */ #define GET_DATA_TWO_BYTES(pdata, n) \ (*(l_uint16 *)((l_uintptr_t)((const l_uint16 *)(pdata) + (n)) ^ 2)) #endif /* L_BIG_ENDIAN */ #ifdef L_BIG_ENDIAN /*! 16 bit access - set value (0 ... 65535) */ #define SET_DATA_TWO_BYTES(pdata, n, val) \ *((l_uint16 *)(pdata) + (n)) = (val) #else /* L_LITTLE_ENDIAN */ /*! 16 bit access - set value (0 ... 65535) */ #define SET_DATA_TWO_BYTES(pdata, n, val) \ *(l_uint16 *)((l_uintptr_t)((l_uint16 *)(pdata) + (n)) ^ 2) = (val) #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------* * 32 bit access * *--------------------------------------------------*/ /*! 32 bit access - get */ #define GET_DATA_FOUR_BYTES(pdata, n) \ (*((const l_uint32 *)(pdata) + (n))) /*! 32 bit access - set (0 ... 4294967295) */ #define SET_DATA_FOUR_BYTES(pdata, n, val) \ *((l_uint32 *)(pdata) + (n)) = (val) #else /*=============================================================*/ /* Slower: use function calls for all accessors */ /*=============================================================*/ #define GET_DATA_BIT(pdata, n) l_getDataBit(pdata, n) #define SET_DATA_BIT(pdata, n) l_setDataBit(pdata, n) #define CLEAR_DATA_BIT(pdata, n) l_clearDataBit(pdata, n) #define SET_DATA_BIT_VAL(pdata, n, val) l_setDataBitVal(pdata, n, val) #define GET_DATA_DIBIT(pdata, n) l_getDataDibit(pdata, n) #define SET_DATA_DIBIT(pdata, n, val) l_setDataDibit(pdata, n, val) #define CLEAR_DATA_DIBIT(pdata, n) l_clearDataDibit(pdata, n) #define GET_DATA_QBIT(pdata, n) l_getDataQbit(pdata, n) #define SET_DATA_QBIT(pdata, n, val) l_setDataQbit(pdata, n, val) #define CLEAR_DATA_QBIT(pdata, n) l_clearDataQbit(pdata, n) #define GET_DATA_BYTE(pdata, n) l_getDataByte(pdata, n) #define SET_DATA_BYTE(pdata, n, val) l_setDataByte(pdata, n, val) #define GET_DATA_TWO_BYTES(pdata, n) l_getDataTwoBytes(pdata, n) #define SET_DATA_TWO_BYTES(pdata, n, val) l_setDataTwoBytes(pdata, n, val) #define GET_DATA_FOUR_BYTES(pdata, n) l_getDataFourBytes(pdata, n) #define SET_DATA_FOUR_BYTES(pdata, n, val) l_setDataFourBytes(pdata, n, val) #endif /* USE_INLINE_ACCESSORS */ #endif /* LEPTONICA_ARRAY_ACCESS_H */ leptonica-1.86.0/src/bardecode.c000066400000000000000000001014501506303110300164200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bardecode.c *
 *
 *      Dispatcher
 *          char            *barcodeDispatchDecoder()
 *
 *      Format Determination
 *          static l_int32   barcodeFindFormat()
 *          l_int32          barcodeFormatIsSupported()
 *          static l_int32   barcodeVerifyFormat()
 *
 *      Decode 2 of 5
 *          static char     *barcodeDecode2of5()
 *
 *      Decode Interleaved 2 of 5
 *          static char     *barcodeDecodeI2of5()
 *
 *      Decode Code 93
 *          static char     *barcodeDecode93()
 *
 *      Decode Code 39
 *          static char     *barcodeDecode39()
 *
 *      Decode Codabar
 *          static char     *barcodeDecodeCodabar()
 *
 *      Decode UPC-A
 *          static char     *barcodeDecodeUpca()
 *
 *      Decode EAN 13
 *          static char     *barcodeDecodeEan13()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "readbarcode.h" static l_int32 barcodeFindFormat(char *barstr); static l_int32 barcodeVerifyFormat(char *barstr, l_int32 format, l_int32 *pvalid, l_int32 *preverse); static char *barcodeDecode2of5(char *barstr, l_int32 debugflag); static char *barcodeDecodeI2of5(char *barstr, l_int32 debugflag); static char *barcodeDecode93(char *barstr, l_int32 debugflag); static char *barcodeDecode39(char *barstr, l_int32 debugflag); static char *barcodeDecodeCodabar(char *barstr, l_int32 debugflag); static char *barcodeDecodeUpca(char *barstr, l_int32 debugflag); static char *barcodeDecodeEan13(char *barstr, l_int32 first, l_int32 debugflag); #ifndef NO_CONSOLE_IO #define DEBUG_CODES 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * Decoding dispatcher * *------------------------------------------------------------------------*/ /*! * \brief barcodeDispatchDecoder() * * \param[in] barstr string of integers in set {1,2,3,4} of bar widths * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... * \param[in] debugflag use 1 to generate debug output * \return data string of decoded barcode data, or NULL on error */ char * barcodeDispatchDecoder(char *barstr, l_int32 format, l_int32 debugflag) { char *data = NULL; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); debugflag = FALSE; /* not used yet */ if (format == L_BF_ANY) format = barcodeFindFormat(barstr); if (format == L_BF_CODE2OF5) data = barcodeDecode2of5(barstr, debugflag); else if (format == L_BF_CODEI2OF5) data = barcodeDecodeI2of5(barstr, debugflag); else if (format == L_BF_CODE93) data = barcodeDecode93(barstr, debugflag); else if (format == L_BF_CODE39) data = barcodeDecode39(barstr, debugflag); else if (format == L_BF_CODABAR) data = barcodeDecodeCodabar(barstr, debugflag); else if (format == L_BF_UPCA) data = barcodeDecodeUpca(barstr, debugflag); else if (format == L_BF_EAN13) data = barcodeDecodeEan13(barstr, 0, debugflag); else return (char *)ERROR_PTR("format not implemented", __func__, NULL); return data; } /*------------------------------------------------------------------------* * Barcode format determination * *------------------------------------------------------------------------*/ /*! * \brief barcodeFindFormat() * * \param[in] barstr of barcode widths, in set {1,2,3,4} * \return format for barcode, or L_BF_UNKNOWN if not recognized */ static l_int32 barcodeFindFormat(char *barstr) { l_int32 i, format, valid; if (!barstr) return ERROR_INT("barstr not defined", __func__, L_BF_UNKNOWN); for (i = 0; i < NumSupportedBarcodeFormats; i++) { format = SupportedBarcodeFormat[i]; barcodeVerifyFormat(barstr, format, &valid, NULL); if (valid) { L_INFO("Barcode format: %s\n", __func__, SupportedBarcodeFormatName[i]); return format; } } return L_BF_UNKNOWN; } /*! * \brief barcodeFormatIsSupported() * * \param[in] format * \return 1 if format is one of those supported; 0 otherwise * */ l_int32 barcodeFormatIsSupported(l_int32 format) { l_int32 i; for (i = 0; i < NumSupportedBarcodeFormats; i++) { if (format == SupportedBarcodeFormat[i]) return 1; } return 0; } /*! * \brief barcodeVerifyFormat() * * \param[in] barstr of barcode widths, in set {1,2,3,4} * \param[in] format L_BF_CODEI2OF5, L_BF_CODE93, ... * \param[out] pvalid 0 if not valid, 1 and 2 if valid * \param[out] preverse [optional] 1 if reversed; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If valid == 1, the barcode is of the given format in the
 *          forward order; if valid == 2, it is backwards.
 *      (2) If the barcode needs to be reversed to read it, and &reverse
 *          is provided, a 1 is put into %reverse.
 *      (3) Require at least 12 data bits, in addition to format identifiers.
 *          (TODO) If the barcode has a fixed length, this should be used
 *          explicitly, as is done for L_BF_UPCA and L_BF_EAN13.
 *      (4) (TODO) Add to this as more formats are supported.
 * 
*/ static l_int32 barcodeVerifyFormat(char *barstr, l_int32 format, l_int32 *pvalid, l_int32 *preverse) { char *revbarstr; l_int32 i, start, len, stop, mid; if (!pvalid) return ERROR_INT("barstr not defined", __func__, 1); *pvalid = 0; if (preverse) *preverse = 0; if (!barstr) return ERROR_INT("barstr not defined", __func__, 1); switch (format) { case L_BF_CODE2OF5: start = !strncmp(barstr, Code2of5[C25_START], 3); len = strlen(barstr); if (len < 20) return ERROR_INT("barstr too short for CODE2OF5", __func__, 1); stop = !strncmp(&barstr[len - 5], Code2of5[C25_STOP], 5); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code2of5[C25_START], 3); stop = !strncmp(&revbarstr[len - 5], Code2of5[C25_STOP], 5); LEPT_FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODEI2OF5: start = !strncmp(barstr, CodeI2of5[CI25_START], 4); len = strlen(barstr); if (len < 20) return ERROR_INT("barstr too short for CODEI2OF5", __func__, 1); stop = !strncmp(&barstr[len - 3], CodeI2of5[CI25_STOP], 3); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, CodeI2of5[CI25_START], 4); stop = !strncmp(&revbarstr[len - 3], CodeI2of5[CI25_STOP], 3); LEPT_FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODE93: start = !strncmp(barstr, Code93[C93_START], 6); len = strlen(barstr); if (len < 28) return ERROR_INT("barstr too short for CODE93", __func__, 1); stop = !strncmp(&barstr[len - 7], Code93[C93_STOP], 6); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code93[C93_START], 6); stop = !strncmp(&revbarstr[len - 7], Code93[C93_STOP], 6); LEPT_FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODE39: start = !strncmp(barstr, Code39[C39_START], 9); len = strlen(barstr); if (len < 30) return ERROR_INT("barstr too short for CODE39", __func__, 1); stop = !strncmp(&barstr[len - 9], Code39[C39_STOP], 9); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code39[C39_START], 9); stop = !strncmp(&revbarstr[len - 9], Code39[C39_STOP], 9); LEPT_FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODABAR: start = stop = 0; len = strlen(barstr); if (len < 26) return ERROR_INT("barstr too short for CODABAR", __func__, 1); for (i = 16; i <= 19; i++) /* any of these will do */ start += !strncmp(barstr, Codabar[i], 7); for (i = 16; i <= 19; i++) /* ditto */ stop += !strncmp(&barstr[len - 7], Codabar[i], 7); if (start && stop) { *pvalid = 1; } else { start = stop = 0; revbarstr = stringReverse(barstr); for (i = 16; i <= 19; i++) start += !strncmp(revbarstr, Codabar[i], 7); for (i = 16; i <= 19; i++) stop += !strncmp(&revbarstr[len - 7], Codabar[i], 7); LEPT_FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_UPCA: case L_BF_EAN13: len = strlen(barstr); if (len != 59) return ERROR_INT("invalid length for UPCA or EAN13", __func__, 1); start = !strncmp(barstr, Upca[UPCA_START], 3); mid = !strncmp(&barstr[27], Upca[UPCA_MID], 5); stop = !strncmp(&barstr[len - 3], Upca[UPCA_STOP], 3); if (start && mid && stop) *pvalid = 1; break; default: return ERROR_INT("format not supported", __func__, 1); } return 0; } /*------------------------------------------------------------------------* * Code 2 of 5 * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecode2of5() * * \param[in] barstr of widths, in set {1, 2} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref: http://en.wikipedia.org/wiki/Two-out-of-five_code (Note:
 *                 the codes given here are wrong!)
 *               http://morovia.com/education/symbology/code25.asp
 *      (2) This is a very low density encoding for the 10 digits.
 *          Each digit is encoded with 5 black bars, of which 2 are wide
 *          and 3 are narrow.  No information is carried in the spaces
 *          between the bars, which are all equal in width, represented by
 *          a "1" in our encoding.
 *      (3) The mapping from the sequence of five bar widths to the
 *          digit is identical to the mapping used by the interleaved
 *          2 of 5 code.  The start code is 21211, representing two
 *          wide bars and a narrow bar, and the interleaved "1" spaces
 *          are explicit.  The stop code is 21112.  For all codes
 *          (including start and stop), the trailing space "1" is
 *          implicit -- there is no reason to represent it in the
 *          Code2of5[] array.
 * 
*/ static char * barcodeDecode2of5(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[10]; l_int32 valid, reverse, i, j, len, error, ndigits, start, found; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE2OF5, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in 2of5 format", __func__, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len - 11) % 10 != 0) { LEPT_FREE(vbarstr); return (char *)ERROR_PTR("size not divisible by 10: invalid 2of5 code", __func__, NULL); } error = FALSE; ndigits = (len - 11) / 10; data = (char *)LEPT_CALLOC(ndigits + 1, sizeof(char)); memset(code, 0, 10); for (i = 0; i < ndigits; i++) { start = 6 + 10 * i; for (j = 0; j < 9; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Code2of5[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } return data; } /*------------------------------------------------------------------------* * Interleaved Code 2 of 5 * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecodeI2of5() * * \param[in] barstr of widths, in set {1, 2} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref: http://en.wikipedia.org/wiki/Interleaved_2_of_5
 *      (2) This always encodes an even number of digits.
 *          The start code is 1111; the stop code is 211.
 * 
*/ static char * barcodeDecodeI2of5(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code1[6], code2[6]; l_int32 valid, reverse, i, j, len, error, npairs, start, found; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODEI2OF5, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in i2of5 format", __func__, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len - 7) % 10 != 0) { LEPT_FREE(vbarstr); return (char *)ERROR_PTR("size not divisible by 10: invalid I2of5 code", __func__, NULL); } error = FALSE; npairs = (len - 7) / 10; data = (char *)LEPT_CALLOC(2 * npairs + 1, sizeof(char)); memset(code1, 0, 6); memset(code2, 0, 6); for (i = 0; i < npairs; i++) { start = 4 + 10 * i; for (j = 0; j < 5; j++) { code1[j] = vbarstr[start + 2 * j]; code2[j] = vbarstr[start + 2 * j + 1]; } if (debugflag) lept_stderr("code1: %s, code2: %s\n", code1, code2); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code1, CodeI2of5[j])) { data[2 * i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code2, CodeI2of5[j])) { data[2 * i + 1] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } return data; } /*------------------------------------------------------------------------* * Code 93 * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecode93() * * \param[in] barstr of widths, in set {1, 2, 3, 4} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref:  http://en.wikipedia.org/wiki/Code93
 *                http://morovia.com/education/symbology/code93.asp
 *      (2) Each symbol has 3 black and 3 white bars.
 *          The start and stop codes are 111141; the stop code then is
 *          terminated with a final (1) bar.
 *      (3) The last two codes are check codes.  We are checking them
 *          for correctness, and issuing a warning on failure.  Should
 *          probably not return any data on failure.
 * 
*/ static char * barcodeDecode93(char *barstr, l_int32 debugflag) { const char *checkc, *checkk; char *data, *vbarstr; char code[7]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found, sum; l_int32 *index; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE93, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in code93 format", __func__, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size; skip the first 6 and last 7 bars. */ len = strlen(vbarstr); if ((len - 13) % 6 != 0) { LEPT_FREE(vbarstr); return (char *)ERROR_PTR("size not divisible by 6: invalid code 93", __func__, NULL); } /* Decode the symbols */ nsymb = (len - 13) / 6; data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); index = (l_int32 *)LEPT_CALLOC(nsymb, sizeof(l_int32)); memset(code, 0, 7); error = FALSE; for (i = 0; i < nsymb; i++) { start = 6 + 6 * i; for (j = 0; j < 6; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < C93_START; j++) { if (!strcmp(code, Code93[j])) { data[i] = Code93Val[j]; index[i] = j; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(index); LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } /* Do check sums. For character "C", use only the * actual data in computing the sum. For character "K", * use the actual data plus the check character "C". */ sum = 0; for (i = 0; i < nsymb - 2; i++) /* skip the "C" and "K" */ sum += ((i % 20) + 1) * index[nsymb - 3 - i]; if (data[nsymb - 2] != Code93Val[sum % 47]) L_WARNING("Error for check C\n", __func__); if (debugflag) { checkc = Code93[sum % 47]; lept_stderr("checkc = %s\n", checkc); } sum = 0; for (i = 0; i < nsymb - 1; i++) /* skip the "K" */ sum += ((i % 15) + 1) * index[nsymb - 2 - i]; if (data[nsymb - 1] != Code93Val[sum % 47]) L_WARNING("Error for check K\n", __func__); if (debugflag) { checkk = Code93[sum % 47]; lept_stderr("checkk = %s\n", checkk); } /* Remove the two check codes from the output */ data[nsymb - 2] = '\0'; LEPT_FREE(index); return data; } /*------------------------------------------------------------------------* * Code 39 * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecode39() * * \param[in] barstr of widths, in set {1, 2} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref:  http://en.wikipedia.org/wiki/Code39
 *                http://morovia.com/education/symbology/code39.asp
 *      (2) Each symbol has 5 black and 4 white bars.
 *          The start and stop codes are 121121211 (the asterisk)
 *      (3) This decoder was contributed by Roger Hyde.
 * 
*/ static char * barcodeDecode39(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[10]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE39, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in code39 format", __func__, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len + 1) % 10 != 0) { LEPT_FREE(vbarstr); return (char *)ERROR_PTR("size+1 not divisible by 10: invalid code 39", __func__, NULL); } /* Decode the symbols */ nsymb = (len - 19) / 10; data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); memset(code, 0, 10); error = FALSE; for (i = 0; i < nsymb; i++) { start = 10 + 10 * i; for (j = 0; j < 9; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < C39_START; j++) { if (!strcmp(code, Code39[j])) { data[i] = Code39Val[j]; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } return data; } /*------------------------------------------------------------------------* * Codabar * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecodeCodabar() * * \param[in] barstr of widths, in set {1, 2} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref:  http://en.wikipedia.org/wiki/Codabar
 *                http://morovia.com/education/symbology/codabar.asp
 *      (2) Each symbol has 4 black and 3 white bars.  They represent the
 *          10 digits, and optionally 6 other characters.  The start and
 *          stop codes can be any of four (typically denoted A,B,C,D).
 * 
*/ static char * barcodeDecodeCodabar(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[8]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODABAR, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in codabar format", __func__, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len + 1) % 8 != 0) { LEPT_FREE(vbarstr); return (char *)ERROR_PTR("size+1 not divisible by 8: invalid codabar", __func__, NULL); } /* Decode the symbols */ nsymb = (len - 15) / 8; data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); memset(code, 0, 8); error = FALSE; for (i = 0; i < nsymb; i++) { start = 8 + 8 * i; for (j = 0; j < 7; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < 16; j++) { if (!strcmp(code, Codabar[j])) { data[i] = CodabarVal[j]; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } return data; } /*------------------------------------------------------------------------* * Code UPC-A * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecodeUpca() * * \param[in] barstr of widths, in set {1, 2, 3, 4} * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref:  http://en.wikipedia.org/wiki/UniversalProductCode
 *                http://morovia.com/education/symbology/upc-a.asp
 *      (2) Each symbol has 2 black and 2 white bars, and encodes a digit.
 *          The start and stop codes are 111 and 111.  There are a total of
 *          30 black bars, encoding 12 digits in two sets of 6, with
 *          2 black bars separating the sets.
 *      (3) The last digit is a check digit.  We check for correctness, and
 *          issue a warning on failure.  Should probably not return any
 *          data on failure.
 * 
*/ static char * barcodeDecodeUpca(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[5]; l_int32 valid, i, j, len, error, start, found, sum, checkdigit; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format; reverse has no meaning here -- we must test both */ barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); if (!valid) return (char *)ERROR_PTR("barstr not in UPC-A format", __func__, NULL); /* Verify size */ len = strlen(barstr); if (len != 59) return (char *)ERROR_PTR("size not 59; invalid UPC-A barcode", __func__, NULL); /* Check the first digit. If invalid, reverse the string. */ memset(code, 0, 5); for (i = 0; i < 4; i++) code[i] = barstr[i + 3]; found = FALSE; for (i = 0; i < 10; i++) { if (!strcmp(code, Upca[i])) { found = TRUE; break; } } if (found == FALSE) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Decode the 12 symbols */ data = (char *)LEPT_CALLOC(13, sizeof(char)); memset(code, 0, 5); error = FALSE; for (i = 0; i < 12; i++) { if (i < 6) start = 3 + 4 * i; else start = 32 + 4 * (i - 6); for (j = 0; j < 4; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Upca[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } /* Calculate the check digit (data[11]). */ sum = 0; for (i = 0; i < 12; i += 2) /* "even" digits */ sum += 3 * (data[i] - 0x30); for (i = 1; i < 11; i += 2) /* "odd" digits */ sum += (data[i] - 0x30); checkdigit = sum % 10; if (checkdigit) /* not 0 */ checkdigit = 10 - checkdigit; if (checkdigit + 0x30 != data[11]) L_WARNING("Error for UPC-A check character\n", __func__); return data; } /*------------------------------------------------------------------------* * Code EAN-13 * *------------------------------------------------------------------------*/ /*! * \brief barcodeDecodeEan13() * * \param[in] barstr of widths, in set {1, 2, 3, 4} * \param[in] first first digit: 0 - 9 * \param[in] debugflag * \return data string of digits, or NULL if none found or on error * *
 * Notes:
 *      (1) Ref:  http://en.wikipedia.org/wiki/UniversalProductCode
 *                http://morovia.com/education/symbology/ean-13.asp
 *      (2) The encoding is essentially the same as UPC-A, except
 *          there are 13 digits in total, of which 12 are encoded
 *          by bars (as with UPC-A) and the 13th is a leading digit
 *          that determines the encoding of the next 6 digits,
 *          selecting each digit from one of two tables.
 *          encoded in the bars (as with UPC-A).  If the first digit
 *          is 0, the encoding is identical to UPC-A.
 *      (3) As with UPC-A, the last digit is a check digit.
 *      (4) For now, we assume the first digit is input to this function.
 *          Eventually, we will read it by pattern matching.
 *
 *    TODO: fix this for multiple tables, depending on the value of %first
 * 
*/ static char * barcodeDecodeEan13(char *barstr, l_int32 first, l_int32 debugflag) { char *data, *vbarstr; char code[5]; l_int32 valid, i, j, len, error, start, found, sum, checkdigit; if (!barstr) return (char *)ERROR_PTR("barstr not defined", __func__, NULL); /* Verify format. You can't tell the orientation by the start * and stop codes, but you can by the location of the digits. * Use the UPCA verifier for EAN 13 -- it is identical. */ barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); if (!valid) return (char *)ERROR_PTR("barstr not in EAN 13 format", __func__, NULL); /* Verify size */ len = strlen(barstr); if (len != 59) return (char *)ERROR_PTR("size not 59; invalid EAN 13 barcode", __func__, NULL); /* Check the first digit. If invalid, reverse the string. */ memset(code, 0, 5); for (i = 0; i < 4; i++) code[i] = barstr[i + 3]; found = FALSE; for (i = 0; i < 10; i++) { if (!strcmp(code, Upca[i])) { found = TRUE; break; } } if (found == FALSE) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Decode the 12 symbols */ data = (char *)LEPT_CALLOC(13, sizeof(char)); memset(code, 0, 5); error = FALSE; for (i = 0; i < 12; i++) { if (i < 6) start = 3 + 4 * i; else start = 32 + 4 * (i - 6); for (j = 0; j < 4; j++) code[j] = vbarstr[start + j]; if (debugflag) lept_stderr("code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Upca[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } LEPT_FREE(vbarstr); if (error) { LEPT_FREE(data); return (char *)ERROR_PTR("error in decoding", __func__, NULL); } /* Calculate the check digit (data[11]). */ sum = 0; for (i = 0; i < 12; i += 2) /* "even" digits */ sum += 3 * (data[i] - 0x30); for (i = 1; i < 12; i += 2) /* "odd" digits */ sum += (data[i] - 0x30); checkdigit = sum % 10; if (checkdigit) /* not 0 */ checkdigit = 10 - checkdigit; if (checkdigit + 0x30 != data[11]) L_WARNING("Error for EAN-13 check character\n", __func__); return data; } leptonica-1.86.0/src/baseline.c000066400000000000000000000624071506303110300163020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file baseline.c *
 *
 *      Locate text baselines in an image
 *           NUMA     *pixFindBaselines()
 *           NUMA     *pixFindBaselinesGen()
 *
 *      Projective transform to remove local skew
 *           PIX      *pixDeskewLocal()
 *
 *      Determine local skew
 *           l_int32   pixGetLocalSkewTransform()
 *           NUMA     *pixGetLocalSkewAngles()
 *
 *  We have two apparently different functions here:
 *    ~ finding baselines
 *    ~ finding a projective transform to remove keystone warping
 *  The function pixGetLocalSkewAngles() returns an array of angles,
 *  one for each raster line, and the baselines of the text lines
 *  should intersect the left edge of the image with that angle.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Default minimum textblock width */ static const l_int32 DefaultMinBlockWidth = 80; /* Minimum distance to travel after finding max before abandoning peak. * If MinDistFromPeak < 25, this risks bogus lines at the xheight. */ static const l_int32 MinDistFromPeak = 30; /* Thresholds for peaks and zeros, relative to the max peak. * If PeakThresholdRatio < 40, this risks not identifying lines. * Results appear insensitive to the value of ZeroThresholdRatio. */ static const l_int32 PeakThresholdRatio = 80; static const l_int32 ZeroThresholdRatio = 100; /* Default values for determining local skew */ static const l_int32 DefaultSlices = 10; static const l_int32 DefaultSweepReduction = 2; static const l_int32 DefaultBsReduction = 1; static const l_float32 DefaultSweepRange = 5.; /* degrees */ static const l_float32 DefaultSweepDelta = 1.; /* degrees */ static const l_float32 DefaultMinbsDelta = 0.01f; /* degrees */ /* Overlap slice fraction added to top and bottom of each slice */ static const l_float32 OverlapFraction = 0.5; /* Minimum allowed confidence (ratio) for accepting a value */ static const l_float32 MinAllowedConfidence = 3.0; /*---------------------------------------------------------------------* * Locate text baselines in an image * *---------------------------------------------------------------------*/ /*! * \brief pixFindBaselines() * * \param[in] pixs 1 bpp, 300 ppi * \param[out] ppta [optional] pairs of pts corresponding to * approx. ends of each text line * \param[in] pixadb for debug output; use NULL to skip * \return na of baseline y values, or NULL on error * *
 * Notes:
 *      (1) This is a simplified interface to pixFindBaselinesGen().
 *          See Notes there.
 * 
*/ NUMA * pixFindBaselines(PIX *pixs, PTA **ppta, PIXA *pixadb) { NUMA *na; if ((na = pixFindBaselinesGen(pixs, DefaultMinBlockWidth, ppta, pixadb)) == NULL) return (NUMA *)ERROR_PTR("na not returned", __func__, NULL); return na; } /*! * \brief pixFindBaselinesGen() * * \param[in] pixs 1 bpp, 300 ppi * \param[in] minw approx min block width returned baselines, in pixels * \param[out] ppta [optional] pairs of pts corresponding to * approx. ends of each text line * \param[in] pixadb for debug output; use NULL to skip * \return na of baseline y values, or NULL on error * *
 * Notes:
 *      (1) Input binary image must have text lines already aligned
 *          horizontally.  This can be done by either rotating the
 *          image with pixDeskew(), or, if a projective transform
 *          is required, by doing pixDeskewLocal() first.
 *      (2) Input null for &pta if you don't want this returned.
 *          The pta will come in pairs of points (left and right end
 *          of each baseline).
 *      (3) Very short text blocks are ignored.  Use the parameter %minw
 *          to specify the (approx.) minimum length baseline for a text block
 *          that is returned.  Suggest using minw = 80 pixels to skip small
 *          text blocks consisting of up to 3 characters.
 *      (4) This function returns the locations of baselines for which
 *          the end points of the the text are found.  Return of those
 *          end points is optional.
 *      (5) This function was designed to identify short and long text lines
 *          without using dangerous thresholds on the peak heights.  It does
 *          this by combining the differential signal with a morphological
 *          analysis of the locations of the text lines.  One can also
 *          combine this data to normalize the peak heights, by weighting
 *          the differential signal in the region of each baseline
 *          by the inverse of the width of the text line found there.
 *      (6) Caution: this will not work properly on text with multiple
 *          columns, where the lines are not aligned between columns.
 *          If there are multiple columns, they should be extracted
 *          separately before finding the baselines.
 * 
*/ NUMA * pixFindBaselinesGen(PIX *pixs, l_int32 minw, PTA **ppta, PIXA *pixadb) { char cmd[64]; l_int32 h, i, j, nbox, val1, val2, ndiff, bx, by, bw, bh; l_int32 imaxloc, peakthresh, zerothresh, inpeak; l_int32 mintosearch, max, maxloc, nloc, locval, found, nremoved; l_int32 *array; l_float32 maxval; BOXA *boxa1, *boxa2, *boxa3; GPLOT *gplot; NUMA *nasum, *nadiff, *naloc, *naval; PIX *pix1, *pix2; PTA *pta; if (ppta) *ppta = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); /* minw / 6 must be >= 1 */ if (minw < 6) minw = 6; /* Close up the text characters, removing noise */ pix1 = pixMorphSequence(pixs, "c25.1 + e15.1", 0); /* Estimate the resolution */ if (pixadb) pixaAddPix(pixadb, pixScale(pix1, 0.25, 0.25), L_INSERT); /* Save the difference of adjacent row sums. * The high positive-going peaks are the baselines */ if ((nasum = pixCountPixelsByRow(pix1, NULL)) == NULL) { pixDestroy(&pix1); return (NUMA *)ERROR_PTR("nasum not made", __func__, NULL); } h = pixGetHeight(pixs); nadiff = numaCreate(h); numaGetIValue(nasum, 0, &val2); for (i = 0; i < h - 1; i++) { val1 = val2; numaGetIValue(nasum, i + 1, &val2); numaAddNumber(nadiff, val1 - val2); } numaDestroy(&nasum); if (pixadb) { /* show the difference signal */ lept_mkdir("lept/baseline"); gplotSimple1(nadiff, GPLOT_PNG, "/tmp/lept/baseline/diff", "Diff Sig"); pix2 = pixRead("/tmp/lept/baseline/diff.png"); pixaAddPix(pixadb, pix2, L_INSERT); } /* Use the zeroes of the profile to locate each baseline. */ array = numaGetIArray(nadiff); ndiff = numaGetCount(nadiff); numaGetMax(nadiff, &maxval, &imaxloc); numaDestroy(&nadiff); /* Use this to begin locating a new peak: */ peakthresh = (l_int32)maxval / PeakThresholdRatio; /* Use this to begin a region between peaks: */ zerothresh = (l_int32)maxval / ZeroThresholdRatio; naloc = numaCreate(0); naval = numaCreate(0); inpeak = FALSE; for (i = 0; i < ndiff; i++) { if (inpeak == FALSE) { if (array[i] > peakthresh) { /* transition to in-peak */ inpeak = TRUE; mintosearch = i + MinDistFromPeak; /* accept no zeros * between i and mintosearch */ max = array[i]; maxloc = i; } } else { /* inpeak == TRUE; look for max */ if (array[i] > max) { max = array[i]; maxloc = i; mintosearch = i + MinDistFromPeak; } else if (i >= mintosearch && array[i] <= zerothresh) { /* leave and store previous peak */ inpeak = FALSE; numaAddNumber(naval, max); numaAddNumber(naloc, maxloc); } } } LEPT_FREE(array); /* If array[ndiff-1] is max, eg. no descenders, baseline at bottom */ if (inpeak) { numaAddNumber(naval, max); numaAddNumber(naloc, maxloc); } if (pixadb) { /* show the raster locations for the peaks */ gplot = gplotCreate("/tmp/lept/baseline/loc", GPLOT_PNG, "Peak locs", "rasterline", "height"); gplotAddPlot(gplot, naloc, naval, GPLOT_POINTS, "locs"); gplotMakeOutput(gplot); gplotDestroy(&gplot); pix2 = pixRead("/tmp/lept/baseline/loc.png"); pixaAddPix(pixadb, pix2, L_INSERT); } numaDestroy(&naval); /* Generate an approximate profile of text line width. * First, consolidate and filter the boxes of text. * The horizontal opening removes text blocks with width * less than about 'minw' pixels at full resolution. */ snprintf(cmd, sizeof(cmd), "r11 + c20.1 + o%d.1", minw / 6); pix2 = pixMorphSequence(pix1, cmd, 0); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); boxa1 = pixConnComp(pix2, NULL, 4); pixDestroy(&pix1); pixDestroy(&pix2); if (boxaGetCount(boxa1) == 0) { numaDestroy(&naloc); boxaDestroy(&boxa1); L_INFO("no components after filtering\n", __func__); return NULL; } boxa2 = boxaTransform(boxa1, 0, 0, 4., 4.); boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* For each baseline, find the corresponding textboxes. * There may be more than one textbox to a baseline. * Bogus textboxes of very small height may have been * generated, and these are removed. Bogus textboxes can * also be eliminated if the bottom is too far from any of * the baselines. If there are no valid textboxes for a * baseline, that baseline is removed. * Note that the boxes have been expanded from 4x reduction, * so box parameters are multiples of 4. */ pta = ptaCreate(0); nloc = numaGetCount(naloc); nbox = boxaGetCount(boxa3); nremoved = 0; /* keeps track of baselines removed */ for (i = 0; i < nloc; i++) { numaGetIValue(naloc, i, &locval); found = FALSE; for (j = 0; j < nbox; j++) { boxaGetBoxGeometry(boxa3, j, &bx, &by, &bw, &bh); if (bh > 12 && L_ABS(locval - (by + bh)) <= 24) { ptaAddPt(pta, bx, locval); ptaAddPt(pta, bx + bw, locval); found = TRUE; } } if (!found) { /* no textbox corresponding to this baseline */ L_INFO("short baseline %d at y = %d removed\n", __func__, i + nremoved, locval); numaRemoveNumber(naloc, i); nremoved++; i--; nloc--; } } boxaDestroy(&boxa3); if (ppta) *ppta = pta; else ptaDestroy(&pta); if (pixadb && pta) { /* display baselines */ l_int32 npts, x1, y1, x2, y2; pix1 = pixConvertTo32(pixs); npts = ptaGetCount(pta); for (i = 0; i < npts; i += 2) { ptaGetIPt(pta, i, &x1, &y1); ptaGetIPt(pta, i + 1, &x2, &y2); pixRenderLineArb(pix1, x1, y1, x2, y2, 2, 255, 0, 0); } pixWriteDebug("/tmp/lept/baseline/baselines.png", pix1, IFF_PNG); pixaAddPix(pixadb, pixScale(pix1, 0.25, 0.25), L_INSERT); pixDestroy(&pix1); } return naloc; } /*---------------------------------------------------------------------* * Projective transform to remove local skew * *---------------------------------------------------------------------*/ /*! * \brief pixDeskewLocal() * * \param[in] pixs 1 bpp * \param[in] nslices the number of horizontal overlapping slices; * must be larger than 1 and not exceed 20; * use 0 for default * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and * not larger than redsweep; use 0 for default value * \param[in] sweeprange half the full range, assumed about 0; in degrees; * use 0.0 for default value * \param[in] sweepdelta angle increment of sweep; in degrees; * use 0.0 for default value * \param[in] minbsdelta min binary search increment angle; in degrees; * use 0.0 for default value * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function allows deskew of a page whose skew changes
 *          approximately linearly with vertical position.  It uses
 *          a projective transform that in effect does a differential
 *          shear about the LHS of the page, and makes all text lines
 *          horizontal.
 *      (2) The origin of the keystoning can be either a cheap document
 *          feeder that rotates the page as it is passed through, or a
 *          camera image taken from either the left or right side
 *          of the vertical.
 *      (3) The image transformation is a projective warping,
 *          not a rotation.  Apart from this function, the text lines
 *          must be properly aligned vertically with respect to each
 *          other.  This can be done by pre-processing the page; e.g.,
 *          by rotating or horizontally shearing it.
 *          Typically, this can be achieved by vertically aligning
 *          the page edge.
 * 
*/ PIX * pixDeskewLocal(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { l_int32 ret; PIX *pixd; PTA *ptas, *ptad; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); /* Skew array gives skew angle (deg) as fctn of raster line * where it intersects the LHS of the image */ ret = pixGetLocalSkewTransform(pixs, nslices, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta, &ptas, &ptad); if (ret != 0) return (PIX *)ERROR_PTR("transform pts not found", __func__, NULL); /* Use a projective transform */ pixd = pixProjectiveSampledPta(pixs, ptad, ptas, L_BRING_IN_WHITE); ptaDestroy(&ptas); ptaDestroy(&ptad); return pixd; } /*---------------------------------------------------------------------* * Determine the local skew * *---------------------------------------------------------------------*/ /*! * \brief pixGetLocalSkewTransform() * * \param[in] pixs * \param[in] nslices the number of horizontal overlapping slices; * must be larger than 1 and not exceed 20; * use 0 for default * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and not * larger than redsweep; use 0 for default value * \param[in] sweeprange half the full range, assumed about 0; * in degrees; use 0.0 for default value * \param[in] sweepdelta angle increment of sweep; in degrees; * use 0.0 for default value * \param[in] minbsdelta min binary search increment angle; in degrees; * use 0.0 for default value * \param[out] pptas 4 points in the source * \param[out] pptad the corresponding 4 pts in the dest * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates two pairs of points in the src, each pair
 *          corresponding to a pair of points that would lie along
 *          the same raster line in a transformed (dewarped) image.
 *      (2) The sets of 4 src and 4 dest points returned by this function
 *          can then be used, in a projective or bilinear transform,
 *          to remove keystoning in the src.
 * 
*/ l_ok pixGetLocalSkewTransform(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, PTA **pptas, PTA **pptad) { l_int32 w, h, i; l_float32 deg2rad, angr, angd, dely; NUMA *naskew; PTA *ptas, *ptad; if (!pptas || !pptad) return ERROR_INT("&ptas and &ptad not defined", __func__, 1); *pptas = *pptad = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (nslices < 2 || nslices > 20) nslices = DefaultSlices; if (redsweep < 1 || redsweep > 8) redsweep = DefaultSweepReduction; if (redsearch < 1 || redsearch > redsweep) redsearch = DefaultBsReduction; if (sweeprange == 0.0) sweeprange = DefaultSweepRange; if (sweepdelta == 0.0) sweepdelta = DefaultSweepDelta; if (minbsdelta == 0.0) minbsdelta = DefaultMinbsDelta; naskew = pixGetLocalSkewAngles(pixs, nslices, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta, NULL, NULL, 0); if (!naskew) return ERROR_INT("naskew not made", __func__, 1); deg2rad = 3.14159265f / 180.f; w = pixGetWidth(pixs); h = pixGetHeight(pixs); ptas = ptaCreate(4); ptad = ptaCreate(4); *pptas = ptas; *pptad = ptad; /* Find i for skew line that intersects LHS at i and RHS at h / 20 */ for (i = 0; i < h; i++) { numaGetFValue(naskew, i, &angd); angr = angd * deg2rad; dely = w * tan(angr); if (i - dely > 0.05 * h) break; } ptaAddPt(ptas, 0, i); ptaAddPt(ptas, w - 1, i - dely); ptaAddPt(ptad, 0, i); ptaAddPt(ptad, w - 1, i); /* Find i for skew line that intersects LHS at i and RHS at 19h / 20 */ for (i = h - 1; i > 0; i--) { numaGetFValue(naskew, i, &angd); angr = angd * deg2rad; dely = w * tan(angr); if (i - dely < 0.95 * h) break; } ptaAddPt(ptas, 0, i); ptaAddPt(ptas, w - 1, i - dely); ptaAddPt(ptad, 0, i); ptaAddPt(ptad, w - 1, i); numaDestroy(&naskew); return 0; } /*! * \brief pixGetLocalSkewAngles() * * \param[in] pixs 1 bpp * \param[in] nslices the number of horizontal overlapping slices; * must be larger than 1 and not exceed 20; * use 0 for default * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and not * larger than redsweep; use 0 for default value * \param[in] sweeprange half the full range, assumed about 0; * in degrees; use 0.0 for default value * \param[in] sweepdelta angle increment of sweep; in degrees; * use 0.0 for default value * \param[in] minbsdelta min binary search increment angle; in degrees; * use 0.0 for default value * \param[out] pa [optional] slope of skew as fctn of y * \param[out] pb [optional] intercept at y = 0 of skew, 8 as a function of y * \param[in] debug 1 for generating plot of skew angle vs. y; * 0 otherwise * \return naskew, or NULL on error * *
 * Notes:
 *      (1) The local skew is measured in a set of overlapping strips.
 *          We then do a least square linear fit parameters to get
 *          the slope and intercept parameters a and b in
 *              skew-angle = a * y + b  (degrees)
 *          for the local skew as a function of raster line y.
 *          This is then used to make naskew, which can be interpreted
 *          as the computed skew angle (in degrees) at the left edge
 *          of each raster line.
 *      (2) naskew can then be used to find the baselines of text, because
 *          each text line has a baseline that should intersect
 *          the left edge of the image with the angle given by this
 *          array, evaluated at the raster line of intersection.
 * 
*/ NUMA * pixGetLocalSkewAngles(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 *pa, l_float32 *pb, l_int32 debug) { l_int32 w, h, hs, i, ystart, yend, ovlap, npts; l_float32 angle, conf, ycenter, a, b; BOX *box; GPLOT *gplot; NUMA *naskew, *nax, *nay; PIX *pix; PTA *pta; if (!pixs || pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (nslices < 2 || nslices > 20) nslices = DefaultSlices; if (redsweep < 1 || redsweep > 8) redsweep = DefaultSweepReduction; if (redsearch < 1 || redsearch > redsweep) redsearch = DefaultBsReduction; if (sweeprange == 0.0) sweeprange = DefaultSweepRange; if (sweepdelta == 0.0) sweepdelta = DefaultSweepDelta; if (minbsdelta == 0.0) minbsdelta = DefaultMinbsDelta; pixGetDimensions(pixs, &w, &h, NULL); hs = h / nslices; ovlap = (l_int32)(OverlapFraction * hs); pta = ptaCreate(nslices); for (i = 0; i < nslices; i++) { ystart = L_MAX(0, hs * i - ovlap); yend = L_MIN(h - 1, hs * (i + 1) + ovlap); ycenter = (l_float32)(ystart + yend) / 2; box = boxCreate(0, ystart, w, yend - ystart + 1); pix = pixClipRectangle(pixs, box, NULL); pixFindSkewSweepAndSearch(pix, &angle, &conf, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta); if (conf > MinAllowedConfidence) ptaAddPt(pta, ycenter, angle); pixDestroy(&pix); boxDestroy(&box); } /* Do linear least squares fit */ if ((npts = ptaGetCount(pta)) < 2) { ptaDestroy(&pta); return (NUMA *)ERROR_PTR("can't fit skew", __func__, NULL); } ptaGetLinearLSF(pta, &a, &b, NULL); if (pa) *pa = a; if (pb) *pb = b; /* Make skew angle array as function of raster line */ naskew = numaCreate(h); for (i = 0; i < h; i++) { angle = a * i + b; numaAddNumber(naskew, angle); } if (debug) { lept_mkdir("lept/baseline"); ptaGetArrays(pta, &nax, &nay); gplot = gplotCreate("/tmp/lept/baseline/skew", GPLOT_PNG, "skew as fctn of y", "y (in raster lines from top)", "angle (in degrees)"); gplotAddPlot(gplot, NULL, naskew, GPLOT_POINTS, "linear lsf"); gplotAddPlot(gplot, nax, nay, GPLOT_POINTS, "actual data pts"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); } ptaDestroy(&pta); return naskew; } leptonica-1.86.0/src/bbuffer.c000066400000000000000000000344551506303110300161350ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bbuffer.c *
 *
 *      Create/Destroy BBuffer
 *          L_BBUFFER      *bbufferCreate()
 *          void           *bbufferDestroy()
 *          l_uint8        *bbufferDestroyAndSaveData()
 *
 *      Operations to read data TO a BBuffer
 *          l_int32         bbufferRead()
 *          l_int32         bbufferReadStream()
 *          l_int32         bbufferExtendArray()
 *
 *      Operations to write data FROM a BBuffer
 *          l_int32         bbufferWrite()
 *          l_int32         bbufferWriteStream()
 *
 *    The bbuffer is an implementation of a byte queue.
 *    The bbuffer holds a byte array from which bytes are
 *    processed in a first-in/first-out fashion.  As with
 *    any queue, bbuffer maintains two "pointers," one to the
 *    tail of the queue (where you read new bytes onto it)
 *    and one to the head of the queue (where you start from
 *    when writing bytes out of it.
 *
 *    The queue can be visualized:
 *
 * \code
 *  byte 0                                           byte (nalloc - 1)
 *       |                                                |
 *       --------------------------------------------------
 *                 H                             T
 *       [   aw   ][  bytes currently on queue  ][  anr   ]
 *
 *       ---:  all allocated data in bbuffer
 *       H:    queue head (ptr to next byte to be written out)
 *       T:    queue tail (ptr to first byte to be written to)
 *       aw:   already written from queue
 *       anr:  allocated but not yet read to
 * \endcode
 *    The purpose of bbuffer is to allow you to safely read
 *    bytes in, and to sequentially write them out as well.
 *    In the process of writing bytes out, you don't actually
 *    remove the bytes in the array; you just move the pointer
 *    (nwritten) which points to the head of the queue.  In
 *    the process of reading bytes in, you sometimes need to
 *    expand the array size.  If a read is performed after a
 *    write, so that the head of the queue is not at the
 *    beginning of the array, the bytes already written are
 *    first removed by copying the others over them; then the
 *    new bytes are read onto the tail of the queue.
 *
 *    Note that the meaning of "read into" and "write from"
 *    the bbuffer is OPPOSITE to that for a stream, where
 *    you read "from" a stream and write "into" a stream.
 *    As a mnemonic for remembering the direction:
 *        ~ to read bytes from a stream into the bbuffer,
 *          you call fread on the stream
 *        ~ to write bytes from the bbuffer into a stream,
 *          you call fwrite on the stream
 *
 *    See zlibmem.c for an example use of bbuffer, where we
 *    compress and decompress an array of bytes in memory.
 *
 *    We can also use the bbuffer trivially to read from stdin
 *    into memory; e.g., to capture bytes piped from the stdout
 *    of another program.  This is equivalent to repeatedly
 *    calling bbufferReadStream() until the input queue is empty.
 *    This is implemented in l_binaryReadStream().
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Bounds on array size */ static const l_uint32 MaxArraySize = 1000000000; /* 10^9 bytes */ static const l_int32 InitialArraySize = 1024; /*!< n'importe quoi */ /*--------------------------------------------------------------------------* * BBuffer create/destroy * *--------------------------------------------------------------------------*/ /*! * \brief bbufferCreate() * * \param[in] indata address in memory [optional] * \param[in] nalloc size of byte array to be alloc'd 0 for default * \return bbuffer, or NULL on error * *
 * Notes:
 *      (1) If a buffer address is given, you should read all the data in.
 *      (2) Allocates a bbuffer with associated byte array of
 *          the given size.  If a buffer address is given,
 *          it then reads the number of bytes into the byte array.
 * 
*/ L_BBUFFER * bbufferCreate(const l_uint8 *indata, l_int32 nalloc) { L_BBUFFER *bb; if (nalloc <= 0 || nalloc > MaxArraySize) nalloc = InitialArraySize; bb = (L_BBUFFER *)LEPT_CALLOC(1, sizeof(L_BBUFFER)); if ((bb->array = (l_uint8 *)LEPT_CALLOC(nalloc, sizeof(l_uint8))) == NULL) { LEPT_FREE(bb); return (L_BBUFFER *)ERROR_PTR("byte array not made", __func__, NULL); } bb->nalloc = nalloc; bb->nwritten = 0; if (indata) { memcpy(bb->array, indata, nalloc); bb->n = nalloc; } else { bb->n = 0; } return bb; } /*! * \brief bbufferDestroy() * * \param[in,out] pbb will be set to null before returning * \return void * *
 * Notes:
 *      (1) Destroys the byte array in the bbuffer and then the bbuffer;
 *          then nulls the contents of the input ptr.
 * 
*/ void bbufferDestroy(L_BBUFFER **pbb) { L_BBUFFER *bb; if (pbb == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((bb = *pbb) == NULL) return; if (bb->array) LEPT_FREE(bb->array); LEPT_FREE(bb); *pbb = NULL; } /*! * \brief bbufferDestroyAndSaveData() * * \param[in,out] pbb input data buffer; will be nulled * \param[out] pnbytes number of bytes saved in array * \return barray newly allocated array of data * *
 * Notes:
 *      (1) Copies data to newly allocated array; then destroys the bbuffer.
 * 
*/ l_uint8 * bbufferDestroyAndSaveData(L_BBUFFER **pbb, size_t *pnbytes) { l_uint8 *array; size_t nbytes; L_BBUFFER *bb; if (pbb == NULL) { L_WARNING("ptr address is NULL\n", __func__); return NULL; } if (pnbytes == NULL) { L_WARNING("&nbytes is NULL\n", __func__); bbufferDestroy(pbb); return NULL; } if ((bb = *pbb) == NULL) return NULL; /* write all unwritten bytes out to a new array */ nbytes = bb->n - bb->nwritten; *pnbytes = nbytes; if ((array = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) { L_WARNING("calloc failure for array\n", __func__); return NULL; } memcpy(array, bb->array + bb->nwritten, nbytes); bbufferDestroy(pbb); return array; } /*--------------------------------------------------------------------------* * Operations to read data INTO a BBuffer * *--------------------------------------------------------------------------*/ /*! * \brief bbufferRead() * * \param[in] bb bbuffer * \param[in] src source memory buffer from which bytes are read * \param[in] nbytes bytes to be read * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For a read after write, first remove the written
 *          bytes by shifting the unwritten bytes in the array,
 *          then check if there is enough room to add the new bytes.
 *          If not, realloc with bbufferExpandArray(), resulting
 *          in a second writing of the unwritten bytes.  While less
 *          efficient, this is simpler than making a special case
 *          of reallocNew().
 * 
*/ l_ok bbufferRead(L_BBUFFER *bb, l_uint8 *src, l_int32 nbytes) { l_int32 navail, nadd, nwritten; if (!bb) return ERROR_INT("bb not defined", __func__, 1); if (!src) return ERROR_INT("src not defined", __func__, 1); if (nbytes == 0) return ERROR_INT("no bytes to read", __func__, 1); if ((nwritten = bb->nwritten)) { /* move the unwritten bytes over */ memmove(bb->array, bb->array + nwritten, bb->n - nwritten); bb->nwritten = 0; bb->n -= nwritten; } /* If necessary, expand the allocated array. Do so by * by at least a factor of two. */ navail = bb->nalloc - bb->n; if (nbytes > navail) { nadd = L_MAX(bb->nalloc, nbytes); if (bbufferExtendArray(bb, nadd)) return ERROR_INT("extension failed", __func__, 1); } /* Read in the new bytes */ memcpy(bb->array + bb->n, src, nbytes); bb->n += nbytes; return 0; } /*! * \brief bbufferReadStream() * * \param[in] bb bbuffer * \param[in] fp source stream from which bytes are read * \param[in] nbytes bytes to be read * \return 0 if OK, 1 on error */ l_ok bbufferReadStream(L_BBUFFER *bb, FILE *fp, l_int32 nbytes) { l_int32 navail, nadd, nread, nwritten; if (!bb) return ERROR_INT("bb not defined", __func__, 1); if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (nbytes == 0) return ERROR_INT("no bytes to read", __func__, 1); if ((nwritten = bb->nwritten)) { /* move any unwritten bytes over */ memmove(bb->array, bb->array + nwritten, bb->n - nwritten); bb->nwritten = 0; bb->n -= nwritten; } /* If necessary, expand the allocated array. Do so by * by at least a factor of two. */ navail = bb->nalloc - bb->n; if (nbytes > navail) { nadd = L_MAX(bb->nalloc, nbytes); if (bbufferExtendArray(bb, nadd)) return ERROR_INT("extension failed", __func__, 1); } /* Read in the new bytes */ nread = fread(bb->array + bb->n, 1, nbytes, fp); bb->n += nread; return 0; } /*! * \brief bbufferExtendArray() * * \param[in] bb bbuffer * \param[in] nbytes number of bytes to extend array size * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) reallocNew() copies all bb->nalloc bytes, even though
 *          only bb->n are data.
 * 
*/ l_ok bbufferExtendArray(L_BBUFFER *bb, l_int32 nbytes) { if (!bb) return ERROR_INT("bb not defined", __func__, 1); if ((bb->array = (l_uint8 *)reallocNew((void **)&bb->array, bb->nalloc, bb->nalloc + nbytes)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); bb->nalloc += nbytes; return 0; } /*--------------------------------------------------------------------------* * Operations to write data FROM a BBuffer * *--------------------------------------------------------------------------*/ /*! * \brief bbufferWrite() * * \param[in] bb bbuffer * \param[in] dest dest memory buffer to which bytes are written * \param[in] nbytes bytes requested to be written * \param[out] pnout bytes actually written * \return 0 if OK, 1 on error */ l_ok bbufferWrite(L_BBUFFER *bb, l_uint8 *dest, size_t nbytes, size_t *pnout) { size_t nleft, nout; if (!bb) return ERROR_INT("bb not defined", __func__, 1); if (!dest) return ERROR_INT("dest not defined", __func__, 1); if (nbytes <= 0) return ERROR_INT("no bytes requested to write", __func__, 1); if (!pnout) return ERROR_INT("&nout not defined", __func__, 1); nleft = bb->n - bb->nwritten; nout = L_MIN(nleft, nbytes); *pnout = nout; if (nleft == 0) { /* nothing to write; reinitialize the buffer */ bb->n = 0; bb->nwritten = 0; return 0; } /* nout > 0; transfer the data out */ memcpy(dest, bb->array + bb->nwritten, nout); bb->nwritten += nout; /* If all written; "empty" the buffer */ if (nout == nleft) { bb->n = 0; bb->nwritten = 0; } return 0; } /*! * \brief bbufferWriteStream() * * \param[in] bb bbuffer * \param[in] fp dest stream to which bytes are written * \param[in] nbytes bytes requested to be written * \param[out] pnout bytes actually written * \return 0 if OK, 1 on error */ l_ok bbufferWriteStream(L_BBUFFER *bb, FILE *fp, size_t nbytes, size_t *pnout) { size_t nleft, nout; if (!bb) return ERROR_INT("bb not defined", __func__, 1); if (!fp) return ERROR_INT("output stream not defined", __func__, 1); if (nbytes <= 0) return ERROR_INT("no bytes requested to write", __func__, 1); if (!pnout) return ERROR_INT("&nout not defined", __func__, 1); nleft = bb->n - bb->nwritten; nout = L_MIN(nleft, nbytes); *pnout = nout; if (nleft == 0) { /* nothing to write; reinitialize the buffer */ bb->n = 0; bb->nwritten = 0; return 0; } /* nout > 0; transfer the data out */ fwrite(bb->array + bb->nwritten, 1, nout, fp); bb->nwritten += nout; /* If all written; "empty" the buffer */ if (nout == nleft) { bb->n = 0; bb->nwritten = 0; } return 0; } leptonica-1.86.0/src/bbuffer.h000066400000000000000000000052531506303110300161340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_BBUFFER_H #define LEPTONICA_BBUFFER_H /*! * \file bbuffer.h * *
 *      Expandable byte buffer for reading data in from memory and
 *      writing data out to other memory.
 *
 *      This implements a queue of bytes, so data read in is put
 *      on the "back" of the queue (i.e., the end of the byte array)
 *      and data written out is taken from the "front" of the queue
 *      (i.e., from an index marker "nwritten" that is initially set at
 *      the beginning of the array.)  As usual with expandable
 *      arrays, we keep the size of the allocated array and the
 *      number of bytes that have been read into the array.
 *
 *      For implementation details, see bbuffer.c.
 * 
*/ /*! Expandable byte buffer for memory read/write operations */ struct L_ByteBuffer { l_int32 nalloc; /*!< size of allocated byte array */ l_int32 n; /*!< number of bytes read into to the array */ l_int32 nwritten; /*!< number of bytes written from the array */ l_uint8 *array; /*!< byte array */ }; typedef struct L_ByteBuffer L_BBUFFER; #endif /* LEPTONICA_BBUFFER_H */ leptonica-1.86.0/src/bilateral.c000066400000000000000000000764021506303110300164570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bilateral.c *
 *
 *     Top level approximate separable grayscale or color bilateral filtering
 *          PIX                 *pixBilateral()
 *          PIX                 *pixBilateralGray()
 *
 *     Implementation of approximate separable bilateral filter
 *          static L_BILATERAL  *bilateralCreate()
 *          static void         *bilateralDestroy()
 *          static PIX          *bilateralApply()
 *
 *     Slow, exact implementation of grayscale or color bilateral filtering
 *          PIX                 *pixBilateralExact()
 *          PIX                 *pixBilateralGrayExact()
 *          PIX                 *pixBlockBilateralExact()
 *
 *     Kernel helper function
 *          L_KERNEL            *makeRangeKernel()
 *
 *  This includes both a slow, exact implementation of the bilateral
 *  filter algorithm (given by Sylvain Paris and FrÊdo Durand),
 *  and a fast, approximate and separable implementation (following
 *  Yang, Tan and Ahuja).  See bilateral.h for algorithmic details.
 *
 *  The bilateral filter has the nice property of applying a gaussian
 *  filter to smooth parts of the image that don't vary too quickly,
 *  while at the same time preserving edges.  The filter is nonlinear
 *  and cannot be decomposed into two separable filters; however,
 *  there exists an approximate method that is separable.  To further
 *  speed up the separable implementation, you can generate the
 *  intermediate data at reduced resolution.
 *
 *  The full kernel is composed of two parts: a spatial gaussian filter
 *  and a nonlinear "range" filter that depends on the intensity difference
 *  between the reference pixel at the spatial kernel origin and any other
 *  pixel within the kernel support.
 *
 *  In our implementations, the range filter is a parameterized,
 *  one-sided, 256-element, monotonically decreasing gaussian function
 *  of the absolute value of the difference between pixel values; namely,
 *  abs(I2 - I1).  In general, any decreasing function can be used,
 *  and more generally,  any two-dimensional kernel can be used if
 *  you wish to relax the 'abs' condition.  (In that case, the range
 *  filter can be 256 x 256).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "bilateral.h" static L_BILATERAL *bilateralCreate(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction); static PIX *bilateralApply(L_BILATERAL *bil); static void bilateralDestroy(L_BILATERAL **pbil); #ifndef NO_CONSOLE_IO #define DEBUG_BILATERAL 0 #endif /* ~NO_CONSOLE_IO */ /*--------------------------------------------------------------------------* * Top level approximate separable grayscale or color bilateral filtering * *--------------------------------------------------------------------------*/ /*! * \brief pixBilateral() * * \param[in] pixs 8 bpp gray or 32 bpp rgb, no colormap * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 * \param[in] ncomps number of intermediate sums J(k,x); * in [4 ... 30] * \param[in] reduction 1, 2 or 4 * \return pixd bilateral filtered image, or NULL on error * *
 * Notes:
 *      (1) This performs a relatively fast, separable bilateral
 *          filtering operation.  The time is proportional to ncomps
 *          and varies inversely approximately as the cube of the
 *          reduction factor.  See bilateral.h for algorithm details.
 *      (2) We impose minimum values for range_stdev and ncomps to
 *          avoid nasty artifacts when either are too small.  We also
 *          impose a constraint on their product:
 *               ncomps * range_stdev >= 100.
 *          So for values of range_stdev >= 25, ncomps can be as small as 4.
 *          Here is a qualitative, intuitive explanation for this constraint.
 *          Call the difference in k values between the J(k) == 'delta', where
 *              'delta' ~ 200 / ncomps
 *          Then this constraint is roughly equivalent to the condition:
 *              'delta' < 2 * range_stdev
 *          Note that at an intensity difference of (2 * range_stdev), the
 *          range part of the kernel reduces the effect by the factor 0.14.
 *          This constraint requires that we have a sufficient number of
 *          PCBs (i.e, a small enough 'delta'), so that for any value of
 *          image intensity I, there exists a k (and a PCB, J(k), such that
 *              |I - k| < range_stdev
 *          Any fewer PCBs and we don't have enough to support this condition.
 *      (3) The upper limit of 30 on ncomps is imposed because the
 *          gain in accuracy is not worth the extra computation.
 *      (4) The size of the gaussian kernel is twice the spatial_stdev
 *          on each side of the origin.  The minimum value of
 *          spatial_stdev, 0.5, is required to have a finite sized
 *          spatial kernel.  In practice, a much larger value is used.
 *      (5) Computation of the intermediate images goes inversely
 *          as the cube of the reduction factor.  If you can use a
 *          reduction of 2 or 4, it is well-advised.
 *      (6) The range kernel is defined over the absolute value of pixel
 *          grayscale differences, and hence must have size 256 x 1.
 *          Values in the array represent the multiplying weight
 *          depending on the absolute gray value difference between
 *          the source pixel and the neighboring pixel, and should
 *          be monotonically decreasing.
 *      (7) Interesting observation.  Run this on prog/fish24.jpg, with
 *          range_stdev = 60, ncomps = 6, and spatial_dev = {10, 30, 50}.
 *          As spatial_dev gets larger, we get the counter-intuitive
 *          result that the body of the red fish becomes less blurry.
 *      (8) The image must be sufficiently big to get reasonable results.
 *          This requires the dimensions to be at least twice the filter size.
 *          Otherwise, return a copy of the input with warning.
 * 
*/ PIX * pixBilateral(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_int32 w, h, d, filtersize; l_float32 sstdev; /* scaled spatial stdev */ PIX *pixt, *pixr, *pixg, *pixb, *pixd; if (!pixs || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not defined or cmapped", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (reduction != 1 && reduction != 2 && reduction != 4) return (PIX *)ERROR_PTR("reduction invalid", __func__, NULL); filtersize = (l_int32)(2.0 * spatial_stdev + 1.0 + 0.5); if (w < 2 * filtersize || h < 2 * filtersize) { L_WARNING("w = %d, h = %d; w or h < 2 * filtersize = %d; " "returning copy\n", __func__, w, h, 2 * filtersize); return pixCopy(NULL, pixs); } sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ if (sstdev < 0.5) return (PIX *)ERROR_PTR("sstdev < 0.5", __func__, NULL); if (range_stdev <= 5.0) return (PIX *)ERROR_PTR("range_stdev <= 5.0", __func__, NULL); if (ncomps < 4 || ncomps > 30) return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", __func__, NULL); if (ncomps * range_stdev < 100.0) return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", __func__, NULL); if (d == 8) return pixBilateralGray(pixs, spatial_stdev, range_stdev, ncomps, reduction); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*! * \brief pixBilateralGray() * * \param[in] pixs 8 bpp gray * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 * \param[in] ncomps number of intermediate sums J(k,x); * in [4 ... 30] * \param[in] reduction 1, 2 or 4 * \return pixd 8 bpp bilateral filtered image, or NULL on error * *
 * Notes:
 *      (1) See pixBilateral() for constraints on the input parameters.
 *      (2) See pixBilateral() for algorithm details.
 * 
*/ PIX * pixBilateralGray(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_float32 sstdev; /* scaled spatial stdev */ PIX *pixd; L_BILATERAL *bil; if (!pixs || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not defined or cmapped", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp gray", __func__, NULL); if (reduction != 1 && reduction != 2 && reduction != 4) return (PIX *)ERROR_PTR("reduction invalid", __func__, NULL); sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ if (sstdev < 0.5) return (PIX *)ERROR_PTR("sstdev < 0.5", __func__, NULL); if (range_stdev <= 5.0) return (PIX *)ERROR_PTR("range_stdev <= 5.0", __func__, NULL); if (ncomps < 4 || ncomps > 30) return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", __func__, NULL); if (ncomps * range_stdev < 100.0) return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", __func__, NULL); bil = bilateralCreate(pixs, spatial_stdev, range_stdev, ncomps, reduction); if (!bil) return (PIX *)ERROR_PTR("bil not made", __func__, NULL); pixd = bilateralApply(bil); bilateralDestroy(&bil); return pixd; } /*----------------------------------------------------------------------* * Implementation of approximate separable bilateral filter * *----------------------------------------------------------------------*/ /*! * \brief bilateralCreate() * * \param[in] pixs 8 bpp gray, no colormap * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 * \param[in] ncomps number of intermediate sums J(k,x); * in [4 ... 30] * \param[in] reduction 1, 2 or 4 * \return bil, or NULL on error * *
 * Notes:
 *      (1) This initializes a bilateral filtering operation, generating all
 *          the data required.  It takes most of the time in the bilateral
 *          filtering operation.
 *      (2) See bilateral.h for details of the algorithm.
 *      (3) See pixBilateral() for constraints on input parameters, which
 *          are not checked here.
 * 
*/ static L_BILATERAL * bilateralCreate(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_int32 w, ws, wd, h, hs, hd, i, j, k, index; l_int32 border, minval, maxval, spatial_size; l_int32 halfwidth, wpls, wplt, wpld, kval, nval, dval; l_float32 sstdev, fval1, fval2, denom, sum, norm, kern; l_int32 *nc, *kindex; l_float32 *kfract, *range, *spatial; l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; L_BILATERAL *bil; PIX *pix1, *pix2, *pixt, *pixsc, *pixd; PIXA *pixac; if (reduction == 1) { pix1 = pixClone(pixs); } else if (reduction == 2) { pix1 = pixScaleAreaMap2(pixs); } else { /* reduction == 4) */ pix2 = pixScaleAreaMap2(pixs); pix1 = pixScaleAreaMap2(pix2); pixDestroy(&pix2); } if (!pix1) return (L_BILATERAL *)ERROR_PTR("pix1 not made", __func__, NULL); sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ border = (l_int32)(2 * sstdev + 1); pixsc = pixAddMirroredBorder(pix1, border, border, border, border); pixGetExtremeValue(pix1, 1, L_SELECT_MIN, NULL, NULL, NULL, &minval); pixGetExtremeValue(pix1, 1, L_SELECT_MAX, NULL, NULL, NULL, &maxval); pixDestroy(&pix1); if (!pixsc) return (L_BILATERAL *)ERROR_PTR("pixsc not made", __func__, NULL); bil = (L_BILATERAL *)LEPT_CALLOC(1, sizeof(L_BILATERAL)); bil->spatial_stdev = sstdev; bil->range_stdev = range_stdev; bil->reduction = reduction; bil->ncomps = ncomps; bil->minval = minval; bil->maxval = maxval; bil->pixsc = pixsc; bil->pixs = pixClone(pixs); /* -------------------------------------------------------------------- * * Generate arrays for interpolation of J(k,x): * (1.0 - kfract[.]) * J(kindex[.], x) + kfract[.] * J(kindex[.] + 1, x), * where I(x) is the index into kfract[] and kindex[], * and x is an index into the 2D image array. * -------------------------------------------------------------------- */ /* nc is the set of k values to be used in J(k,x) */ nc = (l_int32 *)LEPT_CALLOC(ncomps, sizeof(l_int32)); for (i = 0; i < ncomps; i++) nc[i] = minval + i * (maxval - minval) / (ncomps - 1); bil->nc = nc; /* kindex maps from intensity I(x) to the lower k index for J(k,x) */ kindex = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { fval2 = nc[k + 1]; while (i < fval2) { kindex[i] = k; i++; } } kindex[maxval] = ncomps - 2; bil->kindex = kindex; /* kfract maps from intensity I(x) to the fraction of J(k+1,x) used */ kfract = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); /* from lower */ for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { fval1 = nc[k]; fval2 = nc[k + 1]; while (i < fval2) { kfract[i] = (l_float32)(i - fval1) / (l_float32)(fval2 - fval1); i++; } } kfract[maxval] = 1.0; bil->kfract = kfract; #if DEBUG_BILATERAL for (i = minval; i <= maxval; i++) lept_stderr("kindex[%d] = %d; kfract[%d] = %5.3f\n", i, kindex[i], i, kfract[i]); for (i = 0; i < ncomps; i++) lept_stderr("nc[%d] = %d\n", i, nc[i]); #endif /* DEBUG_BILATERAL */ /* -------------------------------------------------------------------- * * Generate 1-D kernel arrays (spatial and range) * * -------------------------------------------------------------------- */ spatial_size = 2 * sstdev + 1; /* same as the added border */ spatial = (l_float32 *)LEPT_CALLOC(spatial_size, sizeof(l_float32)); denom = 2. * sstdev * sstdev; for (i = 0; i < spatial_size; i++) spatial[i] = expf(-(l_float32)(i * i) / denom); bil->spatial = spatial; range = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); denom = 2. * range_stdev * range_stdev; for (i = 0; i < 256; i++) range[i] = expf(-(l_float32)(i * i) / denom); bil->range = range; /* -------------------------------------------------------------------- * * Generate principal bilateral component images * * -------------------------------------------------------------------- */ pixac = pixaCreate(ncomps); pixGetDimensions(pixsc, &ws, &hs, NULL); datas = pixGetData(pixsc); wpls = pixGetWpl(pixsc); pixGetDimensions(pixs, &w, &h, NULL); wd = (w + reduction - 1) / reduction; hd = (h + reduction - 1) / reduction; halfwidth = (l_int32)(2.0 * sstdev); for (index = 0; index < ncomps; index++) { pixt = pixCopy(NULL, pixsc); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); kval = nc[index]; /* Separable convolutions: horizontal first */ for (i = 0; i < hd; i++) { lines = datas + (border + i) * wpls; linet = datat + (border + i) * wplt; for (j = 0; j < wd; j++) { sum = 0.0; norm = 0.0; for (k = -halfwidth; k <= halfwidth; k++) { nval = GET_DATA_BYTE(lines, border + j + k); kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; sum += kern * nval; norm += kern; } if (norm > 0.0) { dval = (l_int32)((sum / norm) + 0.5); SET_DATA_BYTE(linet, border + j, dval); } } } /* Vertical convolution */ pixd = pixCreate(wd, hd, 8); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { linet = datat + (border + i) * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { sum = 0.0; norm = 0.0; for (k = -halfwidth; k <= halfwidth; k++) { nval = GET_DATA_BYTE(linet + k * wplt, border + j); kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; sum += kern * nval; norm += kern; } if (norm > 0.0) dval = (l_int32)((sum / norm) + 0.5); else dval = GET_DATA_BYTE(linet, border + j); SET_DATA_BYTE(lined, j, dval); } } pixDestroy(&pixt); pixaAddPix(pixac, pixd, L_INSERT); } bil->pixac = pixac; bil->lineset = (l_uint32 ***)pixaGetLinePtrs(pixac, NULL); return bil; } /*! * \brief bilateralApply() * * \param[in] bil * \return pixd */ static PIX * bilateralApply(L_BILATERAL *bil) { l_int32 i, j, k, ired, jred, w, h, wpls, wpld, ncomps, reduction; l_int32 vals, vald, lowval, hival; l_int32 *kindex; l_float32 fract; l_float32 *kfract; l_uint32 *lines, *lined, *datas, *datad; l_uint32 ***lineset = NULL; /* for set of PBC */ PIX *pixs, *pixd; PIXA *pixac; if (!bil) return (PIX *)ERROR_PTR("bil not defined", __func__, NULL); pixs = bil->pixs; ncomps = bil->ncomps; kindex = bil->kindex; kfract = bil->kfract; reduction = bil->reduction; pixac = bil->pixac; lineset = bil->lineset; if (pixaGetCount(pixac) != ncomps) return (PIX *)ERROR_PTR("PBC images do not exist", __func__, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; ired = i / reduction; for (j = 0; j < w; j++) { jred = j / reduction; vals = GET_DATA_BYTE(lines, j); k = kindex[vals]; lowval = GET_DATA_BYTE(lineset[k][ired], jred); hival = GET_DATA_BYTE(lineset[k + 1][ired], jred); fract = kfract[vals]; vald = (l_int32)((1.0 - fract) * lowval + fract * hival + 0.5); SET_DATA_BYTE(lined, j, vald); } } return pixd; } /*! * \brief bilateralDestroy() * * \param[in,out] pbil will be set to null before returning */ static void bilateralDestroy(L_BILATERAL **pbil) { l_int32 i; L_BILATERAL *bil; if (pbil == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((bil = *pbil) == NULL) return; pixDestroy(&bil->pixs); pixDestroy(&bil->pixsc); pixaDestroy(&bil->pixac); LEPT_FREE(bil->spatial); LEPT_FREE(bil->range); LEPT_FREE(bil->nc); LEPT_FREE(bil->kindex); LEPT_FREE(bil->kfract); for (i = 0; i < bil->ncomps; i++) LEPT_FREE(bil->lineset[i]); LEPT_FREE(bil->lineset); LEPT_FREE(bil); *pbil = NULL; } /*----------------------------------------------------------------------* * Exact implementation of grayscale or color bilateral filtering * *----------------------------------------------------------------------*/ /*! * \brief pixBilateralExact() * * \param[in] pixs 8 bpp gray or 32 bpp rgb * \param[in] spatial_kel gaussian kernel * \param[in] range_kel [optional] 256 x 1, monotonically decreasing * \return pixd 8 bpp bilateral filtered image * *
 * Notes:
 *      (1) The spatial_kel is a conventional smoothing kernel, typically a
 *          2-d Gaussian kernel or other block kernel.  It can be either
 *          normalized or not, but must be everywhere positive.
 *      (2) The range_kel is defined over the absolute value of pixel
 *          grayscale differences, and hence must have size 256 x 1.
 *          Values in the array represent the multiplying weight for each
 *          gray value difference between the target pixel and center of the
 *          kernel, and should be monotonically decreasing.
 *      (3) If range_kel == NULL, a constant weight is applied regardless
 *          of the range value difference.  This degenerates to a regular
 *          pixConvolve() with a normalized kernel.
 * 
*/ PIX * pixBilateralExact(PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel) { l_int32 d; PIX *pixt, *pixr, *pixg, *pixb, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs is cmapped", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (!spatial_kel) return (PIX *)ERROR_PTR("spatial_ke not defined", __func__, NULL); if (d == 8) { return pixBilateralGrayExact(pixs, spatial_kel, range_kel); } else { /* d == 32 */ pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } } /*! * \brief pixBilateralGrayExact() * * \param[in] pixs 8 bpp gray * \param[in] spatial_kel gaussian kernel * \param[in] range_kel [optional] 256 x 1, monotonically decreasing * \return pixd 8 bpp bilateral filtered image * *
 * Notes:
 *      (1) See pixBilateralExact().
 * 
*/ PIX * pixBilateralGrayExact(PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel) { l_int32 i, j, id, jd, k, m, w, h, d, sx, sy, cx, cy, wplt, wpld; l_int32 val, center_val; l_uint32 *datat, *datad, *linet, *lined; l_float32 sum, weight_sum, weight; L_KERNEL *keli; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be gray", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (!spatial_kel) return (PIX *)ERROR_PTR("spatial kel not defined", __func__, NULL); kernelGetParameters(spatial_kel, &sy, &sx, NULL, NULL); if (w < 2 * sx + 1 || h < 2 * sy + 1) { L_WARNING("w = %d < 2 * sx + 1 = %d, or h = %d < 2 * sy + 1 = %d; " "returning copy\n", __func__, w, 2 * sx + 1, h, 2 * sy + 1); return pixCopy(NULL, pixs); } if (!range_kel) return pixConvolve(pixs, spatial_kel, 8, 1); if (range_kel->sx != 256 || range_kel->sy != 1) return (PIX *)ERROR_PTR("range kel not {256 x 1", __func__, NULL); keli = kernelInvert(spatial_kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) { kernelDestroy(&keli); return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } pixd = pixCreate(w, h, 8); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0, id = 0; id < h; i++, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < w; j++, jd++) { center_val = GET_DATA_BYTE(datat + (i + cy) * wplt, j + cx); weight_sum = 0.0; sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < sx; m++) { val = GET_DATA_BYTE(linet, j + m); weight = keli->data[k][m] * range_kel->data[0][L_ABS(center_val - val)]; weight_sum += weight; sum += val * weight; } } SET_DATA_BYTE(lined, jd, (l_int32)(sum / weight_sum + 0.5)); } } kernelDestroy(&keli); pixDestroy(&pixt); return pixd; } /*! * \brief pixBlockBilateralExact() * * \param[in] pixs 8 bpp gray or 32 bpp rgb * \param[in] spatial_stdev must be > 0.0 * \param[in] range_stdev must be > 0.0 * \return pixd 8 bpp or 32 bpp bilateral filtered image * *
 * Notes:
 *      (1) See pixBilateralExact().  This provides an interface using
 *          the standard deviations of the spatial and range filters.
 *      (2) The convolution window halfwidth is 2 * spatial_stdev,
 *          and the square filter size is 4 * spatial_stdev + 1.
 *          The kernel captures 95% of total energy.  This is compensated
 *          by normalization.
 *      (3) The range_stdev is analogous to spatial_halfwidth in the
 *          grayscale domain [0...255], and determines how much damping of the
 *          smoothing operation is applied across edges.  The larger this
 *          value is, the smaller the damping.  The smaller the value, the
 *          more edge details are preserved.  These approximations are useful
 *          for deciding the appropriate cutoff.
 *              kernel[1 * stdev] ~= 0.6  * kernel[0]
 *              kernel[2 * stdev] ~= 0.14 * kernel[0]
 *              kernel[3 * stdev] ~= 0.01 * kernel[0]
 *          If range_stdev is infinite there is no damping, and this
 *          becomes a conventional gaussian smoothing.
 *          This value does not affect the run time.
 *      (4) If range_stdev is negative or zero, the range kernel is
 *          ignored and this degenerates to a straight gaussian convolution.
 *      (5) This is very slow for large spatial filters.  The time
 *          on a 3GHz pentium is roughly
 *             T = 1.2 * 10^-8 * (A * sh^2)  sec
 *          where A = # of pixels, sh = spatial halfwidth of filter.
 * 
*/ PIX* pixBlockBilateralExact(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev) { l_int32 d, halfwidth; L_KERNEL *spatial_kel, *range_kel; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs is cmapped", __func__, NULL); if (spatial_stdev <= 0.0) return (PIX *)ERROR_PTR("invalid spatial stdev", __func__, NULL); if (range_stdev <= 0.0) return (PIX *)ERROR_PTR("invalid range stdev", __func__, NULL); halfwidth = 2 * spatial_stdev; spatial_kel = makeGaussianKernel(halfwidth, halfwidth, spatial_stdev, 1.0); range_kel = makeRangeKernel(range_stdev); pixd = pixBilateralExact(pixs, spatial_kel, range_kel); kernelDestroy(&spatial_kel); kernelDestroy(&range_kel); return pixd; } /*----------------------------------------------------------------------* * Kernel helper function * *----------------------------------------------------------------------*/ /*! * \brief makeRangeKernel() * * \param[in] range_stdev must be > 0.0 * \return kel, or NULL on error * *
 * Notes:
 *      (1) Creates a one-sided Gaussian kernel with the given
 *          standard deviation.  At grayscale difference of one stdev,
 *          the kernel falls to 0.6, and to 0.01 at three stdev.
 *      (2) A typical input number might be 20.  Then pixels whose
 *          value differs by 60 from the center pixel have their
 *          weight in the convolution reduced by a factor of about 0.01.
 * 
*/ L_KERNEL * makeRangeKernel(l_float32 range_stdev) { l_int32 x; l_float32 val, denom; L_KERNEL *kel; if (range_stdev <= 0.0) return (L_KERNEL *)ERROR_PTR("invalid stdev <= 0", __func__, NULL); denom = 2. * range_stdev * range_stdev; if ((kel = kernelCreate(1, 256)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", __func__, NULL); kernelSetOrigin(kel, 0, 0); for (x = 0; x < 256; x++) { val = expf(-(l_float32)(x * x) / denom); kernelSetElement(kel, 0, x, val); } return kel; } leptonica-1.86.0/src/bilateral.h000066400000000000000000000147711506303110300164650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_BILATERAL_H #define LEPTONICA_BILATERAL_H /*! * \file bilateral.h * *
 *  Contains the following struct
 *      struct L_Bilateral
 *
 *
 *  For a tutorial introduction to bilateral filters, which apply a
 *  gaussian blur to smooth parts of the image while preserving edges, see
 *    http://people.csail.mit.edu/sparis/bf_course/slides/03_definition_bf.pdf
 *
 *  We give an implementation of a bilateral filtering algorithm given in:
 *    "Real-Time O(1) Bilateral Filtering," by Yang, Tan and Ahuja, CVPR 2009
 *  which is at:
 *    http://vision.ai.uiuc.edu/~qyang6/publications/cvpr-09-qingxiong-yang.pdf
 *  This is based on an earlier algorithm by Sylvain Paris and FrÊdo Durand:
 *    http://people.csail.mit.edu/sparis/publi/2006/eccv/
 *               Paris_06_Fast_Approximation.pdf
 *
 *  The kernel of the filter is a product of a spatial gaussian and a
 *  monotonically decreasing function of the difference in intensity
 *  between the source pixel and the neighboring pixel.  The intensity
 *  part of the filter gives higher influence for pixels with intensities
 *  that are near to the source pixel, and the spatial part of the
 *  filter gives higher weight to pixels that are near the source pixel.
 *  This combination smooths in relatively uniform regions, while
 *  maintaining edges.
 *
 *  The advantage of the appoach of Yang et al is that it is separable,
 *  so the computation time is linear in the gaussian filter size.
 *  Furthermore, it is possible to do much of the computation as a reduced
 *  scale, which gives a good approximation to the full resolution version
 *  but greatly speeds it up.
 *
 *  The bilateral filtered value at x is:
 *
 *            sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|) * I(y)
 *    I'(x) = --------------------------------------------------------------
 *            sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|)
 *
 *  where I() is the input image, I'() is the filtered image, N(x) is the
 *  set of pixels around x in the filter support, and spatial() and range()
 *  are gaussian functions:
 *          spatial(x) = exp(-x^2 / (2 * s_s^2))
 *          range(x) = exp(-x^2 / (2 * s_r^2))
 *  and s_s and s_r and the standard deviations of the two gaussians.
 *
 *  Yang et al use a separable approximation to this, by defining a set
 *  of related but separable functions J(k,x), that we call Principal
 *  Bilateral Components (PBC):
 *
 *             sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|) * I(y)
 *    J(k,x) = -----------------------------------------------------------
 *             sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|)
 *
 *  which are computed quickly for a set of n values k[p], p = 0 ... n-1.
 *  Then each output pixel is found using a linear interpolation:
 *
 *    I'(x) = (1 - q) * J(k[p],x) + q * J(k[p+1],x)
 *
 *  where J(k[p],x) and J(k[p+1],x) are PBC for which
 *    k[p] <= I(x) and k[p+1] >= I(x), and
 *    q = (I(x) - k[p]) / (k[p+1] - k[p]).
 *
 *  We can also subsample I(x), create subsampled versions of J(k,x),
 *  which are then interpolated between for I'(x).
 *
 *  We generate 'pixsc', by optionally downscaling the input image
 *  (using area mapping by the factor 'reduction'), and then adding
 *  a mirrored border to avoid boundary cases.  This is then used
 *  to compute 'ncomps' PBCs.
 *
 *  The 'spatial_stdev' is also downscaled by 'reduction'.  The size
 *  of the 'spatial' array is 4 * (reduced 'spatial_stdev') + 1.
 *  The size of the 'range' array is 256.
 * 
*/ /*------------------------------------------------------------------------* * Bilateral filter * *------------------------------------------------------------------------*/ /*! Bilateral filter */ struct L_Bilateral { struct Pix *pixs; /*!< clone of source pix */ struct Pix *pixsc; /*!< downscaled pix with mirrored border */ l_int32 reduction; /*!< 1, 2 or 4x for intermediates */ l_float32 spatial_stdev; /*!< stdev of spatial gaussian */ l_float32 range_stdev; /*!< stdev of range gaussian */ l_float32 *spatial; /*!< 1D gaussian spatial kernel */ l_float32 *range; /*!< one-sided gaussian range kernel */ l_int32 minval; /*!< min value in 8 bpp pix */ l_int32 maxval; /*!< max value in 8 bpp pix */ l_int32 ncomps; /*!< number of intermediate results */ l_int32 *nc; /*!< set of k values (size ncomps) */ l_int32 *kindex; /*!< mapping from intensity to lower k */ l_float32 *kfract; /*!< mapping from intensity to fract k */ struct Pixa *pixac; /*!< intermediate result images (PBC) */ l_uint32 ***lineset; /*!< lineptrs for pixac */ }; typedef struct L_Bilateral L_BILATERAL; #endif /* LEPTONICA_BILATERAL_H */ leptonica-1.86.0/src/bilinear.c000066400000000000000000000735651506303110300163140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bilinear.c *
 *
 *      Bilinear (4 pt) image transformation using a sampled
 *      (to nearest integer) transform on each dest point
 *           PIX      *pixBilinearSampledPta()
 *           PIX      *pixBilinearSampled()
 *
 *      Bilinear (4 pt) image transformation using interpolation
 *      (or area mapping) for anti-aliasing images that are
 *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
 *           PIX      *pixBilinearPta()
 *           PIX      *pixBilinear()
 *           PIX      *pixBilinearPtaColor()
 *           PIX      *pixBilinearColor()
 *           PIX      *pixBilinearPtaGray()
 *           PIX      *pixBilinearGray()
 *
 *      Bilinear transform including alpha (blend) component
 *           PIX      *pixBilinearPtaWithAlpha()
 *
 *      Bilinear coordinate transformation
 *           l_int32   getBilinearXformCoeffs()
 *           l_int32   bilinearXformSampledPt()
 *           l_int32   bilinearXformPt()
 *
 *      A bilinear transform can be specified as a specific functional
 *      mapping between 4 points in the source and 4 points in the dest.
 *      It can be used as an approximation to a (nonlinear) projective
 *      transform, because for small warps it is very similar and
 *      it is more stable.  (Projective transforms have a division
 *      by a quantity that can get arbitrarily small.)
 *
 *      We give both a bilinear coordinate transformation and
 *      a bilinear image transformation.
 *
 *      For the former, we ask for the coordinate value (x',y')
 *      in the transformed space for any point (x,y) in the original
 *      space.  The coefficients of the transformation are found by
 *      solving 8 simultaneous equations for the 8 coordinates of
 *      the 4 points in src and dest.  The transformation can then
 *      be used to compute the associated image transform, by
 *      computing, for each dest pixel, the relevant pixel(s) in
 *      the source.  This can be done either by taking the closest
 *      src pixel to each transformed dest pixel ("sampling") or
 *      by doing an interpolation and averaging over 4 source
 *      pixels with appropriate weightings ("interpolated").
 *
 *      A typical application would be to remove some of the
 *      keystoning due to a projective transform in the imaging system.
 *
 *      The bilinear transform is given by specifying two equations:
 *
 *          x' = ax + by + cxy + d
 *          y' = ex + fy + gxy + h
 *
 *      where the eight coefficients have been computed from four
 *      sets of these equations, each for two corresponding data pts.
 *      In practice, once the coefficients are known, we use the
 *      equations "backwards": for each point (x,y) in the dest image,
 *      these two equations are used to compute the corresponding point
 *      (x',y') in the src.  That computed point in the src is then used
 *      to determine the corresponding dest pixel value in one of two ways:
 *
 *       ~ sampling: simply take the value of the src pixel in which this
 *                   point falls
 *       ~ interpolation: take appropriate linear combinations of the
 *                        four src pixels that this dest pixel would
 *                        overlap, with the coefficients proportional
 *                        to the amount of overlap
 *
 *      For small warp, like rotation, area mapping in the
 *      interpolation is equivalent to linear interpolation.
 *
 *      Typical relative timing of transforms (sampled = 1.0):
 *      8 bpp:   sampled        1.0
 *               interpolated   1.6
 *      32 bpp:  sampled        1.0
 *               interpolated   1.8
 *      Additionally, the computation time/pixel is nearly the same
 *      for 8 bpp and 32 bpp, for both sampled and interpolated.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; /*-------------------------------------------------------------* * Sampled bilinear image transformation * *-------------------------------------------------------------*/ /*! * \brief pixBilinearSampledPta() * * \param[in] pixs all depths * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) No 3 of the 4 points may be collinear.
 *      (4) For 8 and 32 bpp pix, better quality is obtained by the
 *          somewhat slower pixBilinearPta().  See that
 *          function for relative timings between sampled and interpolated.
 * 
*/ PIX * pixBilinearSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearSampled(pixs, vc, incolor); LEPT_FREE(vc); return pixd; } /*! * \brief pixBilinearSampled() * * \param[in] pixs all depths * \param[in] vc vector of 8 coefficients for bilinear transformation * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) For 8 or 32 bpp, much better quality is obtained by the
 *          somewhat slower pixBilinear().  See that function
 *          for relative timings between sampled and interpolated.
 * 
*/ PIX * pixBilinearSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", __func__, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { bilinearXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated bilinear image transformation * *---------------------------------------------------------------------*/ /*! * \brief pixBilinearPta() * * \param[in] pixs all depths; colormap ok * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixBilinearPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixBilinearSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixBilinearPtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixBilinearPtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixBilinear() * * \param[in] pixs all depths; colormap ok * \param[in] vc vector of 8 coefficients for bilinear transformation * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixBilinear(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixBilinearSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixBilinearGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixBilinearColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixBilinearPtaColor() * * \param[in] pixs 32 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixBilinearPtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearColor(pixs, vc, colorval); LEPT_FREE(vc); return pixd; } /*! * \brief pixBilinearColor() * * \param[in] pixs 32 bpp * \param[in] vc vector of 8 coefficients for bilinear transformation * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixBilinearColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ bilinearXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixBilinearGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixBilinearPtaGray() * * \param[in] pixs 8 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] grayval e.g., 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixBilinearPtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearGray(pixs, vc, grayval); LEPT_FREE(vc); return pixd; } /*! * \brief pixBilinearGray() * * \param[in] pixs 8 bpp * \param[in] vc vector of 8 coefficients for bilinear transformation * \param[in] grayval e.g., 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixBilinearGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ bilinearXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*-------------------------------------------------------------------------* * Bilinear transform including alpha (blend) component * *-------------------------------------------------------------------------*/ /*! * \brief pixBilinearPtaWithAlpha() * * \param[in] pixs 32 bpp rgb * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] pixg [optional] 8 bpp, can be null * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque * \param[in] border of pixels added to capture transformed source pixels * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The alpha channel is transformed separately from pixs,
 *          and aligns with it, being fully transparent outside the
 *          boundary of the transformed pixs.  For pixels that are fully
 *          transparent, a blending function like pixBlendWithGrayMask()
 *          will give zero weight to corresponding pixels in pixs.
 *      (2) If %pixg is NULL, it is generated as an alpha layer that is
 *          partially opaque, using %fract.  Otherwise, it is cropped
 *          to %pixs if required and %fract is ignored.  The alpha channel
 *          in %pixs is never used.
 *      (3) Colormaps are removed.
 *      (4) When pixs is transformed, it doesn't matter what color is brought
 *          in because the alpha channel will be transparent (0) there.
 *      (5) To avoid losing source pixels in the destination, it may be
 *          necessary to add a border to the source pix before doing
 *          the bilinear transformation.  This can be any non-negative number.
 *      (6) The input %ptad and %ptas are in a coordinate space before
 *          the border is added.  Internally, we compensate for this
 *          before doing the bilinear transform on the image after
 *          the border is added.
 *      (7) The default setting for the border values in the alpha channel
 *          is 0 (transparent) for the outermost ring of pixels and
 *          (0.5 * fract * 255) for the second ring.  When blended over
 *          a second image, this
 *          (a) shrinks the visible image to make a clean overlap edge
 *              with an image below, and
 *          (b) softens the edges by weakening the aliasing there.
 *          Use l_setAlphaMaskBorder() to change these values.
 * 
*/ PIX * pixBilinearPtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", __func__); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", __func__); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image cannot be blended\n", __func__); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate bilinear transform of rgb channels of pixs and of pixg */ pixd = pixBilinearPtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixBilinearPtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Bilinear coordinate transformation * *-------------------------------------------------------------*/ /*! * \brief getBilinearXformCoeffs() * * \param[in] ptas source 4 points; unprimed * \param[in] ptad transformed 4 points; primed * \param[out] pvc vector of coefficients of transform * \return 0 if OK; 1 on error * *
 * We have a set of 8 equations, describing the bilinear
 * transformation that takes 4 points ptas into 4 other
 * points ptad.  These equations are:
 *
 *          x1' = c[0]*x1 + c[1]*y1 + c[2]*x1*y1 + c[3]
 *          y1' = c[4]*x1 + c[5]*y1 + c[6]*x1*y1 + c[7]
 *          x2' = c[0]*x2 + c[1]*y2 + c[2]*x2*y2 + c[3]
 *          y2' = c[4]*x2 + c[5]*y2 + c[6]*x2*y2 + c[7]
 *          x3' = c[0]*x3 + c[1]*y3 + c[2]*x3*y3 + c[3]
 *          y3' = c[4]*x3 + c[5]*y3 + c[6]*x3*y3 + c[7]
 *          x4' = c[0]*x4 + c[1]*y4 + c[2]*x4*y4 + c[3]
 *          y4' = c[4]*x4 + c[5]*y4 + c[6]*x4*y4 + c[7]
 *
 * This can be represented as
 *
 *           AC = B
 *
 * where B and C are column vectors
 *
 *         B = [ x1' y1' x2' y2' x3' y3' x4' y4' ]
 *         C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ]
 *
 * and A is the 8x8 matrix
 *
 *             x1   y1   x1*y1   1   0    0      0     0
 *              0    0     0     0   x1   y1   x1*y1   1
 *             x2   y2   x2*y2   1   0    0      0     0
 *              0    0     0     0   x2   y2   x2*y2   1
 *             x3   y3   x3*y3   1   0    0      0     0
 *              0    0     0     0   x3   y3   x3*y3   1
 *             x4   y4   x4*y4   1   0    0      0     0
 *              0    0     0     0   x4   y4   x4*y4   1
 *
 * These eight equations are solved here for the coefficients C.
 *
 * These eight coefficients can then be used to find the mapping
 * x,y) --> (x',y':
 *
 *           x' = c[0]x + c[1]y + c[2]xy + c[3]
 *           y' = c[4]x + c[5]y + c[6]xy + c[7]
 *
 * that are implemented in bilinearXformSampledPt and
 * bilinearXFormPt.
 * 
*/ l_ok getBilinearXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3, x4, y4; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[8]; /* 8x8 matrix A */ if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); if (!pvc) return ERROR_INT("&vc not defined", __func__, 1); b = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptas, 3, &x4, &y4); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); ptaGetPt(ptad, 3, &b[6], &b[7]); for (i = 0; i < 8; i++) a[i] = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); a[0][0] = x1; a[0][1] = y1; a[0][2] = x1 * y1; a[0][3] = 1.; a[1][4] = x1; a[1][5] = y1; a[1][6] = x1 * y1; a[1][7] = 1.; a[2][0] = x2; a[2][1] = y2; a[2][2] = x2 * y2; a[2][3] = 1.; a[3][4] = x2; a[3][5] = y2; a[3][6] = x2 * y2; a[3][7] = 1.; a[4][0] = x3; a[4][1] = y3; a[4][2] = x3 * y3; a[4][3] = 1.; a[5][4] = x3; a[5][5] = y3; a[5][6] = x3 * y3; a[5][7] = 1.; a[6][0] = x4; a[6][1] = y4; a[6][2] = x4 * y4; a[6][3] = 1.; a[7][4] = x4; a[7][5] = y4; a[7][6] = x4 * y4; a[7][7] = 1.; gaussjordan(a, b, 8); for (i = 0; i < 8; i++) LEPT_FREE(a[i]); return 0; } /*! * \brief bilinearXformSampledPt() * * \param[in] vc vector of 8 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds the nearest pixel coordinates of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok bilinearXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { if (!vc) return ERROR_INT("vc not defined", __func__, 1); *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3] + 0.5); *pyp = (l_int32)(vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7] + 0.5); return 0; } /*! * \brief bilinearXformPt() * * \param[in] vc vector of 8 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This computes the floating point location of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok bilinearXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { if (!vc) return ERROR_INT("vc not defined", __func__, 1); *pxp = vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3]; *pyp = vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7]; return 0; } leptonica-1.86.0/src/binarize.c000066400000000000000000001362541506303110300163250ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file binarize.c *
 *
 *  ===================================================================
 *  Image binarization algorithms are found in:
 *    grayquant.c:   standard, simple, general grayscale quantization
 *    adaptmap.c:    local adaptive; mostly gray-to-gray in preparation
 *                   for binarization
 *    binarize.c:    special binarization methods, locally adaptive and
 *                   global.
 *  ===================================================================
 *
 *      Adaptive Otsu-based thresholding
 *          l_int32       pixOtsuAdaptiveThreshold()       8 bpp
 *
 *      Otsu thresholding on adaptive background normalization
 *          PIX          *pixOtsuThreshOnBackgroundNorm()  8 bpp
 *
 *      Masking and Otsu estimate on adaptive background normalization
 *          PIX          *pixMaskedThreshOnBackgroundNorm()  8 bpp
 *
 *      Sauvola local thresholding
 *          l_int32       pixSauvolaBinarizeTiled()
 *          l_int32       pixSauvolaBinarize()
 *          static PIX   *pixSauvolaGetThreshold()
 *          static PIX   *pixApplyLocalThreshold();
 *
 *      Sauvola binarization on contrast normalization
 *          PIX          *pixSauvolaOnContrastNorm()  8 bpp
 *
 *      Contrast normalization followed by bg normalization and thresholding
 *          PIX          *pixThreshOnDoubleNorm()
 *
 *      Global thresholding using connected components
 *          PIX          *pixThresholdByConnComp()
 *
 *      Global thresholding by histogram
 *          PIX          *pixThresholdByHisto()
 *
 *  Notes:
 *      (1) pixOtsuAdaptiveThreshold() computes a global threshold over each
 *          tile and performs the threshold operation, resulting in a
 *          binary image for each tile.  These are stitched into the
 *          final result.
 *      (2) pixOtsuThreshOnBackgroundNorm() and
 *          pixMaskedThreshOnBackgroundNorm() are binarization functions
 *          that use background normalization with other techniques.
 *      (3) Sauvola binarization computes a local threshold based on
 *          the local average and square average.  It takes two constants:
 *          the window size for the measurement at each pixel and a
 *          parameter that determines the amount of normalized local
 *          standard deviation to subtract from the local average value.
 *      (4) pixThresholdByConnComp() uses the numbers of 4 and 8 connected
 *          components at different thresholding to determine if a
 *          global threshold can be used (for text or line-art) and the
 *          value it should have.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static PIX *pixSauvolaGetThreshold(PIX *pixm, PIX *pixms, l_float32 factor, PIX **ppixsd); static PIX *pixApplyLocalThreshold(PIX *pixs, PIX *pixth); /*------------------------------------------------------------------* * Adaptive Otsu-based thresholding * *------------------------------------------------------------------*/ /*! * \brief pixOtsuAdaptiveThreshold() * * \param[in] pixs 8 bpp * \param[in] sx, sy desired tile dimensions; actual size may vary * \param[in] smoothx, smoothy half-width of convolution kernel applied to * threshold array: use 0 for no smoothing * \param[in] scorefract fraction of the max Otsu score; typ. 0.1; * use 0.0 for standard Otsu * \param[out] ppixth [optional] array of threshold values * found for each tile * \param[out] ppixd [optional] thresholded input pixs, * based on the threshold array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The Otsu method finds a single global threshold for an image.
 *          This function allows a locally adapted threshold to be
 *          found for each tile into which the image is broken up.
 *      (2) The array of threshold values, one for each tile, constitutes
 *          a highly downscaled image.  This array is optionally
 *          smoothed using a convolution.  The full width and height of the
 *          convolution kernel are (2 * %smoothx + 1) and (2 * %smoothy + 1).
 *      (3) The minimum tile dimension allowed is 16.  If such small
 *          tiles are used, it is recommended to use smoothing, because
 *          without smoothing, each small tile determines the splitting
 *          threshold independently.  A tile that is entirely in the
 *          image bg will then hallucinate fg, resulting in a very noisy
 *          binarization.  The smoothing should be large enough that no
 *          tile is only influenced by one type (fg or bg) of pixels,
 *          because it will force a split of its pixels.
 *      (4) To get a single global threshold for the entire image, use
 *          input values of %sx and %sy that are larger than the image.
 *          For this situation, the smoothing parameters are ignored.
 *      (5) The threshold values partition the image pixels into two classes:
 *          one whose values are less than the threshold and another
 *          whose values are greater than or equal to the threshold.
 *          This is the same use of 'threshold' as in pixThresholdToBinary().
 *      (6) The scorefract is the fraction of the maximum Otsu score, which
 *          is used to determine the range over which the histogram minimum
 *          is searched.  See numaSplitDistribution() for details on the
 *          underlying method of choosing a threshold.
 *      (7) This uses enables a modified version of the Otsu criterion for
 *          splitting the distribution of pixels in each tile into a
 *          fg and bg part.  The modification consists of searching for
 *          a minimum in the histogram over a range of pixel values where
 *          the Otsu score is within a defined fraction, %scorefract,
 *          of the max score.  To get the original Otsu algorithm, set
 *          %scorefract == 0.
 *      (8) N.B. This method is NOT recommended for images with weak text
 *          and significant background noise, such as bleedthrough, because
 *          of the problem noted in (3) above for tiling.  Use Sauvola.
 * 
*/ l_ok pixOtsuAdaptiveThreshold(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, PIX **ppixth, PIX **ppixd) { l_int32 w, h, nx, ny, i, j, thresh; l_uint32 val; PIX *pixt, *pixb, *pixthresh, *pixth, *pixd; PIXTILING *pt; if (!ppixth && !ppixd) return ERROR_INT("neither &pixth nor &pixd defined", __func__, 1); if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (sx < 16 || sy < 16) return ERROR_INT("sx and sy must be >= 16", __func__, 1); /* Compute the threshold array for the tiles */ pixGetDimensions(pixs, &w, &h, NULL); nx = L_MAX(1, w / sx); ny = L_MAX(1, h / sy); smoothx = L_MIN(smoothx, (nx - 1) / 2); smoothy = L_MIN(smoothy, (ny - 1) / 2); pt = pixTilingCreate(pixs, nx, ny, 0, 0, 0, 0); pixthresh = pixCreate(nx, ny, 8); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixSplitDistributionFgBg(pixt, scorefract, 1, &thresh, NULL, NULL, NULL); pixSetPixel(pixthresh, j, i, thresh); /* see note (4) */ pixDestroy(&pixt); } } /* Optionally smooth the threshold array */ if (smoothx > 0 || smoothy > 0) pixth = pixBlockconv(pixthresh, smoothx, smoothy); else pixth = pixClone(pixthresh); pixDestroy(&pixthresh); /* Optionally apply the threshold array to binarize pixs */ if (ppixd) { pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixGetPixel(pixth, j, i, &val); pixb = pixThresholdToBinary(pixt, val); pixTilingPaintTile(pixd, i, j, pixb, pt); pixDestroy(&pixt); pixDestroy(&pixb); } } *ppixd = pixd; } if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); pixTilingDestroy(&pt); return 0; } /*------------------------------------------------------------------* * Otsu thresholding on adaptive background normalization * *------------------------------------------------------------------*/ /*! * \brief pixOtsuThreshOnBackgroundNorm() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[in] bgval target bg val; typ. > 128 * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \param[in] scorefract fraction of the max Otsu score; typ. 0.1 * \param[out] pthresh [optional] threshold value that was * used on the normalized image * \return pixd 1 bpp thresholded image, or NULL on error * *
 * Notes:
 *      (1) This does background normalization followed by Otsu
 *          thresholding.  Otsu binarization attempts to split the
 *          image into two roughly equal sets of pixels, and it does
 *          a very poor job when there are large amounts of dark
 *          background.  By doing a background normalization first,
 *          to get the background near 255, we remove this problem.
 *          Then we use a modified Otsu to estimate the best global
 *          threshold on the normalized image.
 *      (2) See pixBackgroundNorm() for meaning and typical values
 *          of input parameters.  For a start, you can try:
 *            sx, sy = 10, 15
 *            thresh = 100
 *            mincount = 50
 *            bgval = 255
 *            smoothx, smoothy = 2
 * 
*/ PIX * pixOtsuThreshOnBackgroundNorm(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh) { l_int32 w, h; l_uint32 val; PIX *pixn, *pixt, *pixd; if (pthresh) *pthresh = 0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", __func__, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, mincount, bgval, smoothx, smoothy); if (!pixn) return (PIX *)ERROR_PTR("pixn not made", __func__, NULL); /* Just use 1 tile for a global threshold, which is stored * as a single pixel in pixt. */ pixGetDimensions(pixn, &w, &h, NULL); pixOtsuAdaptiveThreshold(pixn, w, h, 0, 0, scorefract, &pixt, &pixd); pixDestroy(&pixn); if (pixt && pthresh) { pixGetPixel(pixt, 0, 0, &val); *pthresh = val; } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); else return pixd; } /*----------------------------------------------------------------------* * Masking and Otsu estimate on adaptive background normalization * *----------------------------------------------------------------------*/ /*! * \brief pixMaskedThreshOnBackgroundNorm() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] pixim [optional] 1 bpp 'image' mask; can be null * \param[in] sx, sy tile size in pixels * \param[in] thresh threshold for determining foreground * \param[in] mincount min threshold on counts in a tile * \param[in] smoothx half-width of block convolution kernel width * \param[in] smoothy half-width of block convolution kernel height * \param[in] scorefract fraction of the max Otsu score; typ. ~ 0.1 * \param[out] pthresh [optional] threshold value that was * used on the normalized image * \return pixd 1 bpp thresholded image, or NULL on error * *
 * Notes:
 *      (1) This begins with a standard background normalization.
 *          Additionally, there is a flexible background norm, that
 *          will adapt to a rapidly varying background, and this
 *          puts white pixels in the background near regions with
 *          significant foreground.  The white pixels are turned into
 *          a 1 bpp selection mask by binarization followed by dilation.
 *          Otsu thresholding is performed on the input image to get an
 *          estimate of the threshold in the non-mask regions.
 *          The background normalized image is thresholded with two
 *          different values, and the result is combined using
 *          the selection mask.
 *      (2) Note that the numbers 255 (for bgval target) and 190 (for
 *          thresholding on pixn) are tied together, and explicitly
 *          defined in this function.
 *      (3) See pixBackgroundNorm() for meaning and typical values
 *          of input parameters.  For a start, you can try:
 *            sx, sy = 10, 15
 *            thresh = 100
 *            mincount = 50
 *            smoothx, smoothy = 2
 * 
*/ PIX * pixMaskedThreshOnBackgroundNorm(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh) { l_int32 w, h, highthresh; l_uint32 val; PIX *pixn, *pixm, *pixd, *pix1, *pix2, *pix3, *pix4; if (pthresh) *pthresh = 0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", __func__, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", __func__); mincount = (sx * sy) / 3; } /* Standard background normalization */ pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, mincount, 255, smoothx, smoothy); if (!pixn) return (PIX *)ERROR_PTR("pixn not made", __func__, NULL); /* Special background normalization for adaptation to quickly * varying background. Threshold on the very light parts, * which tend to be near significant edges, and dilate to * form a mask over regions that are typically text. The * dilation size is chosen to cover the text completely, * except for very thick fonts. */ pix1 = pixBackgroundNormFlex(pixs, 7, 7, 1, 1, 20); pix2 = pixThresholdToBinary(pix1, 240); pixInvert(pix2, pix2); pixm = pixMorphSequence(pix2, "d21.21", 0); pixDestroy(&pix1); pixDestroy(&pix2); /* Use Otsu to get a global threshold estimate for the image, * which is stored as a single pixel in pix3. */ pixGetDimensions(pixs, &w, &h, NULL); pixOtsuAdaptiveThreshold(pixs, w, h, 0, 0, scorefract, &pix3, NULL); pixGetPixel(pix3, 0, 0, &val); if (pthresh) *pthresh = val; pixDestroy(&pix3); /* Threshold the background normalized images differentially, * using a high value correlated with the background normalization * for the part of the image under the mask (i.e., near the * darker, thicker foreground), and a value that depends on the Otsu * threshold for the rest of the image. This gives a solid * (high) thresholding for the foreground parts of the image, * while allowing the background and light foreground to be * reasonably well cleaned using a threshold adapted to the * input image. */ highthresh = L_MIN(256, val + 30); pixd = pixThresholdToBinary(pixn, highthresh); /* for bg and light fg */ pix4 = pixThresholdToBinary(pixn, 190); /* for heavier fg */ pixCombineMasked(pixd, pix4, pixm); pixDestroy(&pix4); pixDestroy(&pixm); pixDestroy(&pixn); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); else return pixd; } /*----------------------------------------------------------------------* * Sauvola binarization * *----------------------------------------------------------------------*/ /*! * \brief pixSauvolaBinarizeTiled() * * \param[in] pixs 8 bpp grayscale, not colormapped * \param[in] whsize window half-width for measuring local statistics * \param[in] factor factor for reducing threshold due to variance; >= 0 * \param[in] nx, ny subdivision into tiles; >= 1 * \param[out] ppixth [optional] Sauvola threshold values * \param[out] ppixd [optional] thresholded image * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The window width and height are 2 * %whsize + 1.  The minimum
 *          value for %whsize is 2; typically it is >= 7.
 *      (2) For nx == ny == 1, this defaults to pixSauvolaBinarize().
 *      (3) Why a tiled version?
 *          (a) A uint32 is used for the mean value accumulator, so
 *              overflow can occur for an image with more than 16M pixels.
 *          (b) A dpix is used to accumulate mean square values, and it
 *              can only accommodate images with less than 2^28 pixels.
 *              Using tiles reduces the size of all the arrays.
 *          (c) Each tile can be processed independently, in parallel,
 *              on a multicore processor.
 *      (4) The Sauvola threshold is determined from the formula:
 *              t = m * (1 - k * (1 - s / 128))
 *          See pixSauvolaBinarize() for details.
 * 
*/ l_ok pixSauvolaBinarizeTiled(PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 nx, l_int32 ny, PIX **ppixth, PIX **ppixd) { l_int32 i, j, w, h, xrat, yrat; PIX *pixth = NULL, *pixd = NULL, *tileth = NULL, *tiled = NULL, *pixt; PIX **ptileth, **ptiled; PIXTILING *pt; if (!ppixth && !ppixd) return ERROR_INT("no outputs", __func__, 1); if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is cmapped", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (whsize < 2) return ERROR_INT("whsize must be >= 2", __func__, 1); if (w < 2 * whsize + 3 || h < 2 * whsize + 3) return ERROR_INT("whsize too large for image", __func__, 1); if (factor < 0.0) return ERROR_INT("factor must be >= 0", __func__, 1); if (nx <= 1 && ny <= 1) return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, ppixth, ppixd); /* Test to see if the tiles are too small. The required * condition is that the tile dimensions must be at least * (whsize + 2) x (whsize + 2). */ xrat = w / nx; yrat = h / ny; if (xrat < whsize + 2) { nx = w / (whsize + 2); L_WARNING("tile width too small; nx reduced to %d\n", __func__, nx); } if (yrat < whsize + 2) { ny = h / (whsize + 2); L_WARNING("tile height too small; ny reduced to %d\n", __func__, ny); } if (nx <= 1 && ny <= 1) return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, ppixth, ppixd); /* We can use pixtiling for painting both outputs, if requested */ if (ppixth) { pixth = pixCreate(w, h, 8); *ppixth = pixth; } if (ppixd) { pixd = pixCreate(w, h, 1); *ppixd = pixd; } pt = pixTilingCreate(pixs, nx, ny, 0, 0, whsize + 1, whsize + 1); pixTilingNoStripOnPaint(pt); /* pixSauvolaBinarize() does the stripping */ for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); ptileth = (ppixth) ? &tileth : NULL; ptiled = (ppixd) ? &tiled : NULL; pixSauvolaBinarize(pixt, whsize, factor, 0, NULL, NULL, ptileth, ptiled); if (ppixth) { /* do not strip */ pixTilingPaintTile(pixth, i, j, tileth, pt); pixDestroy(&tileth); } if (ppixd) { pixTilingPaintTile(pixd, i, j, tiled, pt); pixDestroy(&tiled); } pixDestroy(&pixt); } } pixTilingDestroy(&pt); return 0; } /*! * \brief pixSauvolaBinarize() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] whsize window half-width for measuring local statistics * \param[in] factor factor for reducing threshold due to variance; >= 0 * \param[in] addborder 1 to add border of width (%whsize + 1) on all sides * \param[out] ppixm [optional] local mean values * \param[out] ppixsd [optional] local standard deviation values * \param[out] ppixth [optional] threshold values * \param[out] ppixd [optional] thresholded image * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The window width and height are 2 * %whsize + 1.  The minimum
 *          value for %whsize is 2; typically it is >= 7..
 *      (2) The local statistics, measured over the window, are the
 *          average and standard deviation.
 *      (3) The measurements of the mean and standard deviation are
 *          performed inside a border of (%whsize + 1) pixels.  If pixs does
 *          not have these added border pixels, use %addborder = 1 to add
 *          it here; otherwise use %addborder = 0.
 *      (4) The Sauvola threshold is determined from the formula:
 *            t = m * (1 - k * (1 - s / 128))
 *          where:
 *            t = local threshold
 *            m = local mean
 *            k = %factor (>= 0)   [ typ. 0.35 ]
 *            s = local standard deviation, which is maximized at
 *                127.5 when half the samples are 0 and half are 255.
 *      (5) The basic idea of Niblack and Sauvola binarization is that
 *          the local threshold should be less than the median value,
 *          and the larger the variance, the closer to the median
 *          it should be chosen.  Typical values for k are between
 *          0.2 and 0.5.
 * 
*/ l_ok pixSauvolaBinarize(PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 addborder, PIX **ppixm, PIX **ppixsd, PIX **ppixth, PIX **ppixd) { l_int32 w, h; PIX *pixg, *pixsc, *pixm = NULL, *pixms = NULL, *pixth = NULL, *pixd = NULL; if (ppixm) *ppixm = NULL; if (ppixsd) *ppixsd = NULL; if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!ppixm && !ppixsd && !ppixth && !ppixd) return ERROR_INT("no outputs", __func__, 1); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is cmapped", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (whsize < 2) return ERROR_INT("whsize must be >= 2", __func__, 1); if (w < 2 * whsize + 3 || h < 2 * whsize + 3) return ERROR_INT("whsize too large for image", __func__, 1); if (factor < 0.0) return ERROR_INT("factor must be >= 0", __func__, 1); if (addborder) { pixg = pixAddMirroredBorder(pixs, whsize + 1, whsize + 1, whsize + 1, whsize + 1); pixsc = pixClone(pixs); } else { pixg = pixClone(pixs); pixsc = pixRemoveBorder(pixs, whsize + 1); } if (!pixg || !pixsc) return ERROR_INT("pixg and pixsc not made", __func__, 1); /* All these functions strip off the border pixels. */ if (ppixm || ppixth || ppixd) pixm = pixWindowedMean(pixg, whsize, whsize, 1, 1); if (ppixsd || ppixth || ppixd) pixms = pixWindowedMeanSquare(pixg, whsize, whsize, 1); if (ppixth || ppixd) pixth = pixSauvolaGetThreshold(pixm, pixms, factor, ppixsd); if (ppixd) { pixd = pixApplyLocalThreshold(pixsc, pixth); pixCopyResolution(pixd, pixs); } if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); pixDestroy(&pixms); if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); if (ppixd) *ppixd = pixd; pixDestroy(&pixg); pixDestroy(&pixsc); return 0; } /*! * \brief pixSauvolaGetThreshold() * * \param[in] pixm 8 bpp grayscale; not colormapped * \param[in] pixms 32 bpp * \param[in] factor factor for reducing threshold due to variance; >= 0 * \param[out] ppixsd [optional] local standard deviation * \return pixd 8 bpp, sauvola threshold values, or NULL on error * *
 * Notes:
 *      (1) The Sauvola threshold is determined from the formula:
 *            t = m * (1 - k * (1 - s / 128))
 *          where:
 *            t = local threshold
 *            m = local mean
 *            k = %factor (>= 0)   [ typ. 0.35 ]
 *            s = local standard deviation, which is maximized at
 *                127.5 when half the samples are 0 and half are 255.
 *      (2) See pixSauvolaBinarize() for other details.
 *      (3) Important definitions and relations for computing averages:
 *            v == pixel value
 *            E(p) == expected value of p == average of p over some pixel set
 *            S(v) == square of v == v * v
 *            mv == E(v) == expected pixel value == mean value
 *            ms == E(S(v)) == expected square of pixel values
 *               == mean square value
 *            var == variance == expected square of deviation from mean
 *                == E(S(v - mv)) = E(S(v) - 2 * S(v * mv) + S(mv))
 *                                = E(S(v)) - S(mv)
 *                                = ms - mv * mv
 *            s == standard deviation = sqrt(var)
 *          So for evaluating the standard deviation in the Sauvola
 *          threshold, we take
 *            s = sqrt(ms - mv * mv)
 * 
*/ static PIX * pixSauvolaGetThreshold(PIX *pixm, PIX *pixms, l_float32 factor, PIX **ppixsd) { l_int32 i, j, w, h, tabsize, wplm, wplms, wplsd, wpld, usetab; l_int32 mv, ms, var, thresh; l_uint32 *datam, *datams, *datasd = NULL, *datad; l_uint32 *linem, *linems, *linesd = NULL, *lined; l_float32 sd; l_float32 *tab = NULL; /* of 2^16 square roots */ PIX *pixsd = NULL, *pixd = NULL; if (ppixsd) *ppixsd = NULL; if (!pixm || pixGetDepth(pixm) != 8) return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixm)) return (PIX *)ERROR_PTR("pixm is colormapped", __func__, NULL); if (!pixms || pixGetDepth(pixms) != 32) return (PIX *)ERROR_PTR("pixms undefined or not 32 bpp", __func__, NULL); if (factor < 0.0) return (PIX *)ERROR_PTR("factor must be >= 0", __func__, NULL); /* Only make a table of 2^16 square roots if there * are enough pixels to justify it. */ pixGetDimensions(pixm, &w, &h, NULL); usetab = (w * h > 100000) ? 1 : 0; if (usetab) { tabsize = 1 << 16; tab = (l_float32 *)LEPT_CALLOC(tabsize, sizeof(l_float32)); for (i = 0; i < tabsize; i++) tab[i] = sqrtf((l_float32)i); } pixd = pixCreate(w, h, 8); if (ppixsd) { pixsd = pixCreate(w, h, 8); *ppixsd = pixsd; } datam = pixGetData(pixm); datams = pixGetData(pixms); if (ppixsd) datasd = pixGetData(pixsd); datad = pixGetData(pixd); wplm = pixGetWpl(pixm); wplms = pixGetWpl(pixms); if (ppixsd) wplsd = pixGetWpl(pixsd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linem = datam + i * wplm; linems = datams + i * wplms; if (ppixsd) linesd = datasd + i * wplsd; lined = datad + i * wpld; for (j = 0; j < w; j++) { mv = GET_DATA_BYTE(linem, j); ms = linems[j]; var = ms - mv * mv; if (usetab) sd = tab[var]; else sd = sqrtf((l_float32)var); if (ppixsd) SET_DATA_BYTE(linesd, j, (l_int32)sd); thresh = (l_int32)(mv * (1.0 - factor * (1.0 - sd / 128.))); SET_DATA_BYTE(lined, j, thresh); } } if (usetab) LEPT_FREE(tab); return pixd; } /*! * \brief pixApplyLocalThreshold() * * \param[in] pixs 8 bpp grayscale; not colormapped * \param[in] pixth 8 bpp array of local thresholds * \return pixd 1 bpp, thresholded image, or NULL on error */ static PIX * pixApplyLocalThreshold(PIX *pixs, PIX *pixth) { l_int32 i, j, w, h, wpls, wplt, wpld, vals, valt; l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", __func__, NULL); if (!pixth || pixGetDepth(pixth) != 8) return (PIX *)ERROR_PTR("pixth undefined or not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 1); datas = pixGetData(pixs); datat = pixGetData(pixth); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wplt = pixGetWpl(pixth); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valt = GET_DATA_BYTE(linet, j); if (vals < valt) SET_DATA_BIT(lined, j); } } return pixd; } /*----------------------------------------------------------------------* * Contrast normalization followed by Sauvola binarization * *----------------------------------------------------------------------*/ /*! * \brief pixSauvolaOnContrastNorm() * * \param[in] pixs 8 or 32 bpp * \param[in] mindiff minimum diff to accept as valid in contrast * normalization. Use ~130 for noisy images. * \param[out] ppixn [optional] intermediate output from contrast * normalization * \param[out] ppixth [optional] threshold array for binarization * \return pixd 1 bpp thresholded image, or NULL on error * *
 * Notes:
 *      (1) This composite operation is good for adaptively removing
 *          dark background.
 * 
*/ PIX * pixSauvolaOnContrastNorm(PIX *pixs, l_int32 mindiff, PIX **ppixn, PIX **ppixth) { l_int32 w, h, d, nx, ny; PIX *pixg, *pix1, *pixd; if (ppixn) *ppixn = NULL; if (ppixth) *ppixth = NULL; if (!pixs || (d = pixGetDepth(pixs)) < 8) return (PIX *)ERROR_PTR("pixs undefined or d < 8 bpp", __func__, NULL); if (d == 32) pixg = pixConvertRGBToGray(pixs, 0.3f, 0.4f, 0.3f); else pixg = pixConvertTo8(pixs, 0); pix1 = pixContrastNorm(NULL, pixg, 50, 50, mindiff, 2, 2); /* Use tiles of size approximately 250 x 250 */ pixGetDimensions(pix1, &w, &h, NULL); nx = L_MAX(1, (w + 125) / 250); ny = L_MAX(1, (h + 125) / 250); pixSauvolaBinarizeTiled(pix1, 25, 0.40f, nx, ny, ppixth, &pixd); pixDestroy(&pixg); if (ppixn) *ppixn = pix1; else pixDestroy(&pix1); return pixd; } /*----------------------------------------------------------------------* * Contrast normalization followed by background normalization * * and thresholding * *----------------------------------------------------------------------*/ /*! * \brief pixThreshOnDoubleNorm() * * \param[in] pixs 8 or 32 bpp * \param[in] mindiff minimum diff to accept as valid in contrast * normalization. Use ~130 for noisy images. * \return pixd 1 bpp thresholded image, or NULL on error * *
 * Notes:
 *      (1) This composite operation is good for adaptively removing
 *          dark background.
 *      (2) The threshold for the binarization uses an estimate based
 *          on Otsu adaptive thresholding.
 * 
*/ PIX * pixThreshOnDoubleNorm(PIX *pixs, l_int32 mindiff) { l_int32 d, ival; l_uint32 val; PIX *pixg, *pix1, *pixd; if (!pixs || (d = pixGetDepth(pixs)) < 8) return (PIX *)ERROR_PTR("pixs undefined or d < 8 bpp", __func__, NULL); if (d == 32) pixg = pixConvertRGBToGray(pixs, 0.3f, 0.4f, 0.3f); else pixg = pixConvertTo8(pixs, 0); /* Use the entire image for the estimate; pix1 is 1x1 */ pixOtsuAdaptiveThreshold(pixg, 5000, 5000, 0, 0, 0.1f, &pix1, NULL); pixGetPixel(pix1, 0, 0, &val); ival = (l_int32)val; ival = L_MIN(ival, 110); pixDestroy(&pix1); /* Double normalization */ pixContrastNorm(pixg, pixg, 50, 50, mindiff, 2, 2); pix1 = pixBackgroundNormSimple(pixg, NULL, NULL); pixDestroy(&pixg); /* lept_stderr("ival = %d\n", ival); */ pixd = pixThresholdToBinary(pix1, ival); pixDestroy(&pix1); return pixd; } /*----------------------------------------------------------------------* * Global thresholding using connected components * *----------------------------------------------------------------------*/ /*! * \brief pixThresholdByConnComp() * * \param[in] pixs depth > 1, colormap OK * \param[in] pixm [optional] 1 bpp mask giving region to ignore * by setting pixels to white; use NULL if no mask * \param[in] start, end, incr binarization threshold levels to test * \param[in] thresh48 threshold on normalized difference between the * numbers of 4 and 8 connected components * \param[in] threshdiff threshold on normalized difference between the * number of 4 cc at successive iterations * \param[out] pglobthresh [optional] best global threshold; 0 * if no threshold is found * \param[out] ppixd [optional] image thresholded to binary, or * null if no threshold is found * \param[in] debugflag 1 for plotted results * \return 0 if OK, 1 on error or if no threshold is found * *
 * Notes:
 *      (1) This finds a global threshold based on connected components.
 *          Although slow, it is reasonable to use it in a situation where
 *          (a) the background in the image is relatively uniform, and
 *          (b) the result will be fed to an OCR program that accepts 1 bpp
 *              images and works best with easily segmented characters.
 *          The reason for (b) is that this selects a threshold with a
 *          minimum number of both broken characters and merged characters.
 *      (2) If the pix has color, it is converted to gray using the
 *          max component.
 *      (3) Input 0 to use default values for any of these inputs:
 *          %start, %end, %incr, %thresh48, %threshdiff.
 *      (4) This approach can be understood as follows.  When the
 *          binarization threshold is varied, the numbers of c.c. identify
 *          four regimes:
 *          (a) For low thresholds, text is broken into small pieces, and
 *              the number of c.c. is large, with the 4 c.c. significantly
 *              exceeding the 8 c.c.
 *          (b) As the threshold rises toward the optimum value, the text
 *              characters coalesce and there is very little difference
 *              between the numbers of 4 and 8 c.c, which both go
 *              through a minimum.
 *          (c) Above this, the image background gets noisy because some
 *              pixels are(thresholded to foreground, and the numbers
 *              of c.c. quickly increase, with the 4 c.c. significantly
 *              larger than the 8 c.c.
 *          (d) At even higher thresholds, the image background noise
 *              coalesces as it becomes mostly foreground, and the
 *              number of c.c. drops quickly.
 *      (5) If there is no global threshold that distinguishes foreground
 *          text from background (e.g., weak text over a background that
 *          has significant variation and/or bleedthrough), this returns 1,
 *          which the caller should check.
 * 
*/ l_ok pixThresholdByConnComp(PIX *pixs, PIX *pixm, l_int32 start, l_int32 end, l_int32 incr, l_float32 thresh48, l_float32 threshdiff, l_int32 *pglobthresh, PIX **ppixd, l_int32 debugflag) { l_int32 i, thresh, n, n4, n8, mincounts, found, globthresh; l_float32 count4, count8, firstcount4, prevcount4, diff48, diff4; GPLOT *gplot; NUMA *na4, *na8; PIX *pix1, *pix2, *pix3; if (pglobthresh) *pglobthresh = 0; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) == 1) return ERROR_INT("pixs undefined or 1 bpp", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm must be 1 bpp", __func__, 1); /* Assign default values if requested */ if (start <= 0) start = 80; if (end <= 0) end = 200; if (incr <= 0) incr = 10; if (thresh48 <= 0.0) thresh48 = 0.01f; if (threshdiff <= 0.0) threshdiff = 0.01f; if (start > end) return ERROR_INT("invalid start,end", __func__, 1); /* Make 8 bpp, using the max component if color. */ if (pixGetColormap(pixs)) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix1 = pixClone(pixs); if (pixGetDepth(pix1) == 32) pix2 = pixConvertRGBToGrayMinMax(pix1, L_CHOOSE_MAX); else pix2 = pixConvertTo8(pix1, 0); pixDestroy(&pix1); /* Mask out any non-text regions. Do this in-place, because pix2 * can never be the same pix as pixs. */ if (pixm) pixSetMasked(pix2, pixm, 255); /* Make sure there are enough components to get a valid signal */ pix3 = pixConvertTo1(pix2, start); pixCountConnComp(pix3, 4, &n4); pixDestroy(&pix3); mincounts = 500; if (n4 < mincounts) { L_INFO("Insufficient component count: %d\n", __func__, n4); pixDestroy(&pix2); return 1; } /* Compute the c.c. data */ na4 = numaCreate(0); na8 = numaCreate(0); numaSetParameters(na4, start, incr); numaSetParameters(na8, start, incr); for (thresh = start, i = 0; thresh <= end; thresh += incr, i++) { pix3 = pixConvertTo1(pix2, thresh); pixCountConnComp(pix3, 4, &n4); pixCountConnComp(pix3, 8, &n8); numaAddNumber(na4, n4); numaAddNumber(na8, n8); pixDestroy(&pix3); } if (debugflag) { lept_mkdir("lept/binarize"); gplot = gplotCreate("/tmp/lept/binarize", GPLOT_PNG, "number of cc vs. threshold", "threshold", "number of cc"); gplotAddPlot(gplot, NULL, na4, GPLOT_LINES, "plot 4cc"); gplotAddPlot(gplot, NULL, na8, GPLOT_LINES, "plot 8cc"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } n = numaGetCount(na4); found = FALSE; for (i = 0; i < n; i++) { if (i == 0) { numaGetFValue(na4, i, &firstcount4); prevcount4 = firstcount4; } else { numaGetFValue(na4, i, &count4); numaGetFValue(na8, i, &count8); diff48 = (count4 - count8) / firstcount4; diff4 = L_ABS(prevcount4 - count4) / firstcount4; if (debugflag) { lept_stderr("diff48 = %7.3f, diff4 = %7.3f\n", diff48, diff4); } if (diff48 < thresh48 && diff4 < threshdiff) { found = TRUE; break; } prevcount4 = count4; } } numaDestroy(&na4); numaDestroy(&na8); if (found) { globthresh = start + i * incr; if (pglobthresh) *pglobthresh = globthresh; if (ppixd) { *ppixd = pixConvertTo1(pix2, globthresh); pixCopyResolution(*ppixd, pixs); } if (debugflag) lept_stderr("global threshold = %d\n", globthresh); pixDestroy(&pix2); return 0; } if (debugflag) lept_stderr("no global threshold found\n"); pixDestroy(&pix2); return 1; } /*----------------------------------------------------------------------* * Global thresholding by histogram * *----------------------------------------------------------------------*/ /*! * \brief pixThresholdByHisto() * * \param[in] pixs gray 8 bpp, no colormap * \param[in] factor subsampling factor >= 1 * \param[in] halfw half of window width for smoothing; * use 0 for default * \param[in] skip look-ahead distance to avoid false minima; * use 0 for default * \param[out] pthresh best global threshold; 0 if no threshold is found * \param[out] ppixd [optional] thresholded 1 bpp pix * \param[out] pnahisto [optional] rescaled histogram of gray values * \param[out] ppixhisto [optional] plot of rescaled histogram * \return 0 if OK, 1 on error or if no threshold is found * *
 * Notes:
 *      (1) This finds a global threshold.  It is best for an image that
 *          has a fairly well-defined fg and bg.
 *      (2) If it finds a good threshold and %ppixd is defined, the binarized
 *          image is returned in &pixd; otherwise it return null.
 *      (3) See numaFindLocForThreshold() for use of %skip.
 *      (4) Suggest using default values (20) for %half and %skip.
 *      (5) Returns 0 in %pthresh if it can't find a good threshold.
 * 
*/ l_ok pixThresholdByHisto(PIX *pixs, l_int32 factor, l_int32 halfw, l_int32 skip, l_int32 *pthresh, PIX **ppixd, NUMA **pnahisto, PIX **ppixhisto) { l_float32 maxval, fract; NUMA *na1, *na2, *na3; if (ppixd) *ppixd = NULL; if (pnahisto) *pnahisto = NULL; if (ppixhisto) *ppixhisto = NULL; if (!pthresh) return ERROR_INT("&thresh not defined", __func__, 1); *pthresh = 0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs has colormap", __func__, 1); if (factor < 1) return ERROR_INT("sampling must be >= 1", __func__, 1); if (halfw <= 0) halfw = 20; if (skip <= 0) skip = 20; /* Make a histogram of pixel values where the largest peak * is normalized to a value of 1.0. */ na1 = pixGetGrayHistogram(pixs, factor); na2 = numaWindowedMean(na1, halfw); /* smoothing */ numaGetMax(na2, &maxval, NULL); na3 = numaTransform(na2, 0.0, 1.0 / maxval); /* rescale to max of 1.0 */ numaDestroy(&na1); numaDestroy(&na2); if (numaFindLocForThreshold(na3, skip, pthresh, &fract) == 1) { numaDestroy(&na3); return ERROR_INT("failure to find threshold", __func__, 1); } L_INFO("fractional area under first peak: %5.3f\n", __func__, fract); if (ppixhisto) { lept_mkdir("lept/histo"); gplotSimple1(na3, GPLOT_PNG, "/tmp/lept/histo/histo", NULL); *ppixhisto = pixRead("/tmp/lept/histo/histo.png"); } if (pnahisto) *pnahisto = na3; else numaDestroy(&na3); if (*pthresh > 0 && ppixd) *ppixd = pixThresholdToBinary(pixs, *pthresh); return 0; } leptonica-1.86.0/src/binexpand.c000066400000000000000000000227271506303110300164710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file binexpand.c *
 *
 *      Replicated expansion (integer scaling)
 *         PIX     *pixExpandBinaryReplicate()
 *
 *      Special case: power of 2 replicated expansion
 *         PIX     *pixExpandBinaryPower2()
 *
 *      Expansion tables for power of 2 expansion
 *         static l_uint16    *makeExpandTab2x()
 *         static l_uint32    *makeExpandTab4x()
 *         static l_uint32    *makeExpandTab8x()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Static table functions and tables */ static l_uint16 * makeExpandTab2x(void); static l_uint32 * makeExpandTab4x(void); static l_uint32 * makeExpandTab8x(void); static l_uint32 expandtab16[] = { 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff}; /*------------------------------------------------------------------* * Replicated expansion (integer scaling) * *------------------------------------------------------------------*/ /*! * \brief pixExpandBinaryReplicate() * * \param[in] pixs 1 bpp * \param[in] xfact integer scale factor for horiz. replicative expansion * \param[in] yfact integer scale factor for vertical replicative expansion * \return pixd scaled up, or NULL on error */ PIX * pixExpandBinaryReplicate(PIX *pixs, l_int32 xfact, l_int32 yfact) { l_int32 w, h, d, wd, hd, wpls, wpld, i, j, k, start; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not binary", __func__, NULL); if (xfact <= 0 || yfact <= 0) return (PIX *)ERROR_PTR("invalid scale factor: <= 0", __func__, NULL); if (xfact == yfact) { if (xfact == 1) return pixCopy(NULL, pixs); if (xfact == 2 || xfact == 4 || xfact == 8 || xfact == 16) return pixExpandBinaryPower2(pixs, xfact); } wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wd = xfact * w; hd = yfact * h; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)xfact, (l_float32)yfact); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + yfact * i * wpld; for (j = 0; j < w; j++) { /* replicate pixels on a single line */ if (GET_DATA_BIT(lines, j)) { start = xfact * j; for (k = 0; k < xfact; k++) SET_DATA_BIT(lined, start + k); } } for (k = 1; k < yfact; k++) /* replicate the line */ memcpy(lined + k * wpld, lined, 4 * wpld); } return pixd; } /*------------------------------------------------------------------* * Power of 2 expansion * *------------------------------------------------------------------*/ /*! * \brief pixExpandBinaryPower2() * * \param[in] pixs 1 bpp * \param[in] factor expansion factor: 1, 2, 4, 8, 16 * \return pixd expanded 1 bpp by replication, or NULL on error */ PIX * pixExpandBinaryPower2(PIX *pixs, l_int32 factor) { l_uint8 sval; l_uint16 *tab2; l_int32 i, j, k, w, h, d, wd, hd, wpls, wpld, sdibits, sqbits, sbytes; l_uint32 *datas, *datad, *lines, *lined, *tab4, *tab8; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not binary", __func__, NULL); if (factor == 1) return pixCopy(NULL, pixs); if (factor != 2 && factor != 4 && factor != 8 && factor != 16) return (PIX *)ERROR_PTR("factor must be in {2,4,8,16}", __func__, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wd = factor * w; hd = factor * h; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); if (factor == 2) { tab2 = makeExpandTab2x(); sbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; for (j = 0; j < sbytes; j++) { sval = GET_DATA_BYTE(lines, j); SET_DATA_TWO_BYTES(lined, j, tab2[sval]); } memcpy(lined + wpld, lined, 4 * wpld); } LEPT_FREE(tab2); } else if (factor == 4) { tab4 = makeExpandTab4x(); sbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; for (j = 0; j < sbytes; j++) { sval = GET_DATA_BYTE(lines, j); lined[j] = tab4[sval]; } for (k = 1; k < 4; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } LEPT_FREE(tab4); } else if (factor == 8) { tab8 = makeExpandTab8x(); sqbits = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 8 * i * wpld; for (j = 0; j < sqbits; j++) { sval = GET_DATA_QBIT(lines, j); lined[j] = tab8[sval]; } for (k = 1; k < 8; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } LEPT_FREE(tab8); } else { /* factor == 16 */ sdibits = (w + 1) / 2; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 16 * i * wpld; for (j = 0; j < sdibits; j++) { sval = GET_DATA_DIBIT(lines, j); lined[j] = expandtab16[sval]; } for (k = 1; k < 16; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } } return pixd; } /*-------------------------------------------------------------------* * Expansion tables for 2x, 4x and 8x expansion * *-------------------------------------------------------------------*/ static l_uint16 * makeExpandTab2x(void) { l_uint16 *tab; l_int32 i; tab = (l_uint16 *) LEPT_CALLOC(256, sizeof(l_uint16)); for (i = 0; i < 256; i++) { if (i & 0x01) tab[i] = 0x3; if (i & 0x02) tab[i] |= 0xc; if (i & 0x04) tab[i] |= 0x30; if (i & 0x08) tab[i] |= 0xc0; if (i & 0x10) tab[i] |= 0x300; if (i & 0x20) tab[i] |= 0xc00; if (i & 0x40) tab[i] |= 0x3000; if (i & 0x80) tab[i] |= 0xc000; } return tab; } static l_uint32 * makeExpandTab4x(void) { l_uint32 *tab; l_int32 i; tab = (l_uint32 *) LEPT_CALLOC(256, sizeof(l_uint32)); for (i = 0; i < 256; i++) { if (i & 0x01) tab[i] = 0xf; if (i & 0x02) tab[i] |= 0xf0; if (i & 0x04) tab[i] |= 0xf00; if (i & 0x08) tab[i] |= 0xf000; if (i & 0x10) tab[i] |= 0xf0000; if (i & 0x20) tab[i] |= 0xf00000; if (i & 0x40) tab[i] |= 0xf000000; if (i & 0x80) tab[i] |= 0xf0000000; } return tab; } static l_uint32 * makeExpandTab8x(void) { l_uint32 *tab; l_int32 i; tab = (l_uint32 *) LEPT_CALLOC(16, sizeof(l_uint32)); for (i = 0; i < 16; i++) { if (i & 0x01) tab[i] = 0xff; if (i & 0x02) tab[i] |= 0xff00; if (i & 0x04) tab[i] |= 0xff0000; if (i & 0x08) tab[i] |= 0xff000000; } return tab; } leptonica-1.86.0/src/binreduce.c000066400000000000000000000320031506303110300164450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file binreduce.c *
 *
 *      Subsampled 2x reduction
 *           PIX      *pixReduceBinary2()
 *
 *      Rank filtered 2x reductions
 *           PIX      *pixReduceRankBinaryCascade()
 *           PIX      *pixReduceRankBinary2()
 *
 *      Permutation table for 2x rank binary reduction
 *           l_uint8  *makeSubsampleTab2x(void)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*------------------------------------------------------------------* * Subsampled reduction * *------------------------------------------------------------------*/ /*! * \brief pixReduceBinary2() * * \param[in] pixs * \param[in] intab [optional]; if null, a table is made here * and destroyed before exit * \return pixd 2x subsampled, or NULL on error * *
 * Notes:
 *      (1) After folding, the data is in bytes 0 and 2 of the word,
 *          and the bits in each byte are in the following order
 *          (with 0 being the leftmost originating pair and 7 being
 *          the rightmost originating pair):
 *               0 4 1 5 2 6 3 7
 *          These need to be permuted to
 *               0 1 2 3 4 5 6 7
 *          which is done with an 8-bit table generated by makeSubsampleTab2x().
 * 
*/ PIX * pixReduceBinary2(PIX *pixs, l_uint8 *intab) { l_uint8 byte0, byte1; l_uint8 *tab; l_uint16 shortd; l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; l_uint32 word; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (hs <= 1) return (PIX *)ERROR_PTR("hs must be at least 2", __func__, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); pixSetPadBits(pixs, 0); if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); tab = (intab) ? intab : makeSubsampleTab2x(); if (!tab) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("tab not made", __func__, NULL); } /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word = *(lines + j); word = word & 0xaaaaaaaa; /* mask */ word = word | (word << 7); /* fold; data in bytes 0 & 2 */ byte0 = word >> 24; byte1 = (word >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } if (!intab) LEPT_FREE(tab); return pixd; } /*------------------------------------------------------------------* * Rank filtered binary reductions * *------------------------------------------------------------------*/ /*! * \brief pixReduceRankBinaryCascade() * * \param[in] pixs 1 bpp * \param[in] level1 threshold, in the set {0, 1, 2, 3, 4} * \param[in] level2 threshold, in the set {0, 1, 2, 3, 4} * \param[in] level3 threshold, in the set {0, 1, 2, 3, 4} * \param[in] level4 threshold, in the set {0, 1, 2, 3, 4} * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This performs up to four cascaded 2x rank reductions.
 *      (2) Use level = 0 to truncate the cascade.
 * 
*/ PIX * pixReduceRankBinaryCascade(PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4) { PIX *pix1, *pix2, *pix3, *pix4; l_uint8 *tab; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be binary", __func__, NULL); if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) return (PIX *)ERROR_PTR("levels must not exceed 4", __func__, NULL); if (level1 <= 0) { L_WARNING("no reduction because level1 not > 0\n", __func__); return pixCopy(NULL, pixs); } if ((tab = makeSubsampleTab2x()) == NULL) return (PIX *)ERROR_PTR("tab not made", __func__, NULL); pix1 = pixReduceRankBinary2(pixs, level1, tab); if (level2 <= 0) { LEPT_FREE(tab); return pix1; } pix2 = pixReduceRankBinary2(pix1, level2, tab); pixDestroy(&pix1); if (level3 <= 0) { LEPT_FREE(tab); return pix2; } pix3 = pixReduceRankBinary2(pix2, level3, tab); pixDestroy(&pix2); if (level4 <= 0) { LEPT_FREE(tab); return pix3; } pix4 = pixReduceRankBinary2(pix3, level4, tab); pixDestroy(&pix3); LEPT_FREE(tab); return pix4; } /*! * \brief pixReduceRankBinary2() * * \param[in] pixs 1 bpp * \param[in] level rank threshold: 1, 2, 3, 4 * \param[in] intab [optional]; if null, a table is made here * and destroyed before exit * \return pixd 1 bpp, 2x rank threshold reduced, or NULL on error * *
 * Notes:
 *      (1) pixd is downscaled by 2x from pixs.
 *      (2) The rank threshold specifies the minimum number of ON
 *          pixels in each 2x2 region of pixs that are required to
 *          set the corresponding pixel ON in pixd.
 *      (3) Rank filtering is done to the UL corner of each 2x2 pixel block,
 *          using only logical operations.  Then these pixels are chosen
 *          in the 2x subsampling process, subsampled, as described
 *          above in pixReduceBinary2().
 * 
*/ PIX * pixReduceRankBinary2(PIX *pixs, l_int32 level, l_uint8 *intab) { l_uint8 byte0, byte1; l_uint8 *tab; l_uint16 shortd; l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; l_uint32 word1, word2, word3, word4; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not binary", __func__, NULL); if (level < 1 || level > 4) return (PIX *)ERROR_PTR("level must be in set {1,2,3,4}", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (hs <= 1) return (PIX *)ERROR_PTR("hs must be at least 2", __func__, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); pixSetPadBits(pixs, 0); if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); tab = (intab) ? intab : makeSubsampleTab2x(); if (!tab) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("tab not made", __func__, NULL); } /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ switch (level) { case 1: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* OR/OR */ word2 = word1 | word2; word2 = word2 | (word2 << 1); word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 2: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* (AND/OR) OR (OR/AND) */ word3 = word1 & word2; word3 = word3 | (word3 << 1); word4 = word1 | word2; word4 = word4 & (word4 << 1); word2 = word3 | word4; word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 3: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* (AND/OR) AND (OR/AND) */ word3 = word1 & word2; word3 = word3 | (word3 << 1); word4 = word1 | word2; word4 = word4 & (word4 << 1); word2 = word3 & word4; word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 4: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* AND/AND */ word2 = word1 & word2; word2 = word2 & (word2 << 1); word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; } if (!intab) LEPT_FREE(tab); return pixd; } /*! * \brief makeSubsampleTab2x() * * \return tab table of 256 permutations, or NULL on error * *
 * Notes:
 *      Permutation table for 2x rank binary reduction
 *      This table permutes the bits in a byte, from
 *          0 4 1 5 2 6 3 7
 *      to
 *          0 1 2 3 4 5 6 7
 * 
*/ l_uint8 * makeSubsampleTab2x(void) { l_uint8 *tab; l_int32 i; tab = (l_uint8 *) LEPT_CALLOC(256, sizeof(l_uint8)); for (i = 0; i < 256; i++) { tab[i] = ((i & 0x01) ) | /* 7 */ ((i & 0x04) >> 1) | /* 6 */ ((i & 0x10) >> 2) | /* 5 */ ((i & 0x40) >> 3) | /* 4 */ ((i & 0x02) << 3) | /* 3 */ ((i & 0x08) << 2) | /* 2 */ ((i & 0x20) << 1) | /* 1 */ ((i & 0x80) ); /* 0 */ } return tab; } leptonica-1.86.0/src/blend.c000066400000000000000000002575731506303110300156160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file blend.c *
 *
 *      Blending two images that are not colormapped
 *           PIX             *pixBlend()
 *           PIX             *pixBlendMask()
 *           PIX             *pixBlendGray()
 *           PIX             *pixBlendGrayInverse()
 *           PIX             *pixBlendColor()
 *           PIX             *pixBlendColorByChannel()
 *           PIX             *pixBlendGrayAdapt()
 *           static l_int32   blendComponents()
 *           PIX             *pixFadeWithGray()
 *           PIX             *pixBlendHardLight()
 *           static l_int32   blendHardLightComponents()
 *
 *      Blending two colormapped images
 *           l_int32          pixBlendCmap()
 *
 *      Blending two images using a third (alpha mask)
 *           PIX             *pixBlendWithGrayMask()
 *
 *      Blending background to a specific color
 *           PIX             *pixBlendBackgroundToColor()
 *
 *      Multiplying by a specific color
 *           PIX             *pixMultiplyByColor()
 *
 *      Rendering with alpha blending over a uniform background
 *           PIX             *pixAlphaBlendUniform()
 *
 *      Adding an alpha layer for blending
 *           PIX             *pixAddAlphaToBlend()
 *
 *      Setting a transparent alpha component over a white background
 *           PIX             *pixSetAlphaOverWhite()
 *
 *      Fading from the edge
 *           l_int32          pixLinearEdgeFade()
 *
 *  In blending operations a new pix is produced where typically
 *  a subset of pixels in src1 are changed by the set of pixels
 *  in src2, when src2 is located in a given position relative
 *  to src1.  This is similar to rasterop, except that the
 *  blending operations we allow are more complex, and typically
 *  result in dest pixels that are a linear combination of two
 *  pixels, such as src1 and its inverse.  I find it convenient
 *  to think of src2 as the "blender" (the one that takes the action)
 *  and src1 as the "blendee" (the one that changes).
 *
 *  Blending works best when src1 is 8 or 32 bpp.  We also allow
 *  src1 to be colormapped, but the colormap is removed before blending,
 *  so if src1 is colormapped, we can't allow in-place blending.
 *
 *  Because src2 is typically smaller than src1, we can implement by
 *  clipping src2 to src1 and then transforming some of the dest
 *  pixels that are under the support of src2.  In practice, we
 *  do the clipping in the inner pixel loop.  For grayscale and
 *  color src2, we also allow a simple form of transparency, where
 *  pixels of a particular value in src2 are transparent; for those pixels,
 *  no blending is done.
 *
 *  The blending functions are categorized by the depth of src2,
 *  the blender, and not that of src1, the blendee.
 *
 *   ~ If src2 is 1 bpp, we can do one of three things:
 *     (1) L_BLEND_WITH_INVERSE: Blend a given fraction of src1 with its
 *         inverse color for those pixels in src2 that are fg (ON),
 *         and leave the dest pixels unchanged for pixels in src2 that
 *         are bg (OFF).
 *     (2) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by a
 *         given fraction for those pixels in src2 that are fg (ON),
 *         and leave the dest pixels unchanged for pixels in src2 that
 *         are bg (OFF).
 *     (3) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by a
 *         given fraction for those pixels in src2 that are fg (ON),
 *         and leave the dest pixels unchanged for pixels in src2 that
 *         are bg (OFF).
 *     The blending function is pixBlendMask().
 *
 *   ~ If src2 is 8 bpp grayscale, we can do one of two things
 *     (but see pixFadeWithGray() below):
 *     (1) L_BLEND_GRAY: If src1 is 8 bpp, mix the two values, using
 *         a fraction of src2 and (1 - fraction) of src1.
 *         If src1 is 32 bpp (rgb), mix the fraction of src2 with
 *         each of the color components in src1.
 *     (2) L_BLEND_GRAY_WITH_INVERSE: Use the grayscale value in src2
 *         to determine how much of the inverse of a src1 pixel is
 *         to be combined with the pixel value.  The input fraction
 *         further acts to scale the change in the src1 pixel.
 *     The blending function is pixBlendGray().
 *
 *   ~ If src2 is color, we blend a given fraction of src2 with
 *     src1.  If src1 is 8 bpp, the resulting image is 32 bpp.
 *     The blending function is pixBlendColor().
 *
 *   ~ For all three blending functions -- pixBlendMask(), pixBlendGray()
 *     and pixBlendColor() -- you can apply the blender to the blendee
 *     either in-place or generating a new pix.  For the in-place
 *     operation, this requires that the depth of the resulting pix
 *     must equal that of the input pixs1.
 *
 *   ~ We remove colormaps from src1 and src2 before blending.
 *     Any quantization would have to be done after blending.
 *
 *  We include another function, pixFadeWithGray(), that blends
 *  a gray or color src1 with a gray src2.  It does one of these things:
 *     (1) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by
 *         a number times the value in src2.
 *     (2) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by
 *         a number times the value in src2.
 *
 *  Also included is a generalization of the so-called "hard light"
 *  blending: pixBlendHardLight().  We generalize by allowing a fraction < 1.0
 *  of the blender to be admixed with the blendee.  The standard function
 *  does full mixing.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static l_int32 blendComponents(l_int32 a, l_int32 b, l_float32 fract); static l_int32 blendHardLightComponents(l_int32 a, l_int32 b, l_float32 fract); /*-------------------------------------------------------------* * Blending two images that are not colormapped * *-------------------------------------------------------------*/ /*! * \brief pixBlend() * * \param[in] pixs1 blendee * \param[in] pixs2 blender; typ. smaller * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1; can be < 0 * \param[in] fract blending fraction * \return pixd blended image, or null on error * *
 * Notes:
 *      (1) This is a simple top-level interface.  For more flexibility,
 *          call directly into pixBlendMask(), etc.
 * 
*/ PIX * pixBlend(PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 w1, h1, d1, d2; BOX *box; PIX *pixc, *pixt, *pixd; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); /* check relative depths */ d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 == 1 && d2 > 1) return (PIX *)ERROR_PTR("mixing gray or color with 1 bpp", __func__, NULL); /* remove colormap from pixs2 if necessary */ pixt = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); d2 = pixGetDepth(pixt); /* Check if pixs2 is clipped by its position with respect * to pixs1; if so, clip it and redefine x and y if necessary. * This actually isn't necessary, as the specific blending * functions do the clipping directly in the pixel loop * over pixs2, but it's included here to show how it can * easily be done on pixs2 first. */ pixGetDimensions(pixs1, &w1, &h1, NULL); box = boxCreate(-x, -y, w1, h1); /* box of pixs1 relative to pixs2 */ pixc = pixClipRectangle(pixt, box, NULL); boxDestroy(&box); if (!pixc) { L_WARNING("box doesn't overlap pix\n", __func__); pixDestroy(&pixt); return NULL; } x = L_MAX(0, x); y = L_MAX(0, y); if (d2 == 1) { pixd = pixBlendMask(NULL, pixs1, pixc, x, y, fract, L_BLEND_WITH_INVERSE); } else if (d2 == 8) { pixd = pixBlendGray(NULL, pixs1, pixc, x, y, fract, L_BLEND_GRAY, 0, 0); } else { /* d2 == 32 */ pixd = pixBlendColor(NULL, pixs1, pixc, x, y, fract, 0, 0); } pixDestroy(&pixc); pixDestroy(&pixt); return pixd; } /*! * \brief pixBlendMask() * * \param[in] pixd [optional]; either NULL or equal to pixs1 for in-place * \param[in] pixs1 blendee, depth > 1 * \param[in] pixs2 blender, 1 bpp; typ. smaller in size than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1; can be < 0 * \param[in] fract blending fraction * \param[in] type L_BLEND_WITH_INVERSE, L_BLEND_TO_WHITE, * L_BLEND_TO_BLACK * \return pixd if OK; null on error * *
 * Notes:
 *      (1) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (2) If pixs1 has a colormap, it is removed.
 *      (3) For inplace operation (pixs1 not cmapped), call it this way:
 *            pixBlendMask(pixs1, pixs1, pixs2, ...)
 *      (4) For generating a new pixd:
 *            pixd = pixBlendMask(NULL, pixs1, pixs2, ...)
 *      (5) Only call in-place if pixs1 does not have a colormap.
 *      (6) Invalid %fract defaults to 0.5 with a warning.
 *          Invalid %type defaults to L_BLEND_WITH_INVERSE with a warning.
 * 
*/ PIX * pixBlendMask(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type) { l_int32 i, j, d, wc, hc, w, h, wplc; l_int32 val, rval, gval, bval; l_uint32 pixval; l_uint32 *linec, *datac; PIX *pixc, *pix1, *pix2; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, NULL); if (pixGetDepth(pixs2) != 1) return (PIX *)ERROR_PTR("pixs2 not 1 bpp", __func__, NULL); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("inplace; pixs1 has colormap", __func__, NULL); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } if (type != L_BLEND_WITH_INVERSE && type != L_BLEND_TO_WHITE && type != L_BLEND_TO_BLACK) { L_WARNING("invalid blend type; setting to L_BLEND_WITH_INVERSE\n", __func__); type = L_BLEND_WITH_INVERSE; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* d must be either 8 or 32 bpp */ pixc = pixClone(pixs2); wc = pixGetWidth(pixc); hc = pixGetHeight(pixc); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done. */ switch (type) { case L_BLEND_WITH_INVERSE: /* * The basic logic for this blending is: * p --> (1 - f) * p + f * (1 - p) * where p is a normalized value: p = pixval / 255. * Thus, * p --> p + f * (1 - 2 * p) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)(pixval + fract * (255 - 2 * pixval)); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)(rval + fract * (255 - 2 * rval)); gval = (l_int32)(gval + fract * (255 - 2 * gval)); bval = (l_int32)(bval + fract * (255 - 2 * bval)); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", __func__); } } } } break; case L_BLEND_TO_WHITE: /* * The basic logic for this blending is: * p --> p + f * (1 - p) (p normalized to [0...1]) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)(pixval + fract * (255 - pixval)); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)(rval + fract * (255 - rval)); gval = (l_int32)(gval + fract * (255 - gval)); bval = (l_int32)(bval + fract * (255 - bval)); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", __func__); } } } } break; case L_BLEND_TO_BLACK: /* * The basic logic for this blending is: * p --> (1 - f) * p (p normalized to [0...1]) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)((1. - fract) * pixval); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)((1. - fract) * rval); gval = (l_int32)((1. - fract) * gval); bval = (l_int32)((1. - fract) * bval); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", __func__); } } } } break; default: L_WARNING("invalid binary mask blend type\n", __func__); break; } pixDestroy(&pixc); return pixd; } /*! * \brief pixBlendGray() * * \param[in] pixd [optional] either equal to pixs1 for in-place, * or NULL * \param[in] pixs1 blendee, depth > 1 * \param[in] pixs2 blender, any depth; typically, the area of * pixs2 is smaller than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1; can be < 0 * \param[in] fract blending fraction * \param[in] type L_BLEND_GRAY, L_BLEND_GRAY_WITH_INVERSE * \param[in] transparent 1 to use transparency; 0 otherwise * \param[in] transpix pixel grayval in pixs2 that is to be transparent * \return pixd if OK; pixs1 on error * *
 * Notes:
 *      (1) For inplace operation (pixs1 not cmapped), call it this way:
 *            pixBlendGray(pixs1, pixs1, pixs2, ...)
 *      (2) For generating a new pixd:
 *            pixd = pixBlendGray(NULL, pixs1, pixs2, ...)
 *      (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (4) If pixs1 has a colormap, it is removed; otherwise, if pixs1
 *          has depth < 8, it is unpacked to generate a 8 bpp pix.
 *      (5) If transparent = 0, the blending fraction (fract) is
 *          applied equally to all pixels.
 *      (6) If transparent = 1, all pixels of value transpix (typically
 *          either 0 or 0xff) in pixs2 are transparent in the blend.
 *      (7) After processing pixs1, it is either 8 bpp or 32 bpp:
 *          ~ if 8 bpp, the fraction of pixs2 is mixed with pixs1.
 *          ~ if 32 bpp, each component of pixs1 is mixed with
 *            the same fraction of pixs2.
 *      (8) For L_BLEND_GRAY_WITH_INVERSE, the white values of the blendee
 *          (cval == 255 in the code below) result in a delta of 0.
 *          Thus, these pixels are intrinsically transparent!
 *          The "pivot" value of the src, at which no blending occurs, is
 *          128.  Compare with the adaptive pivot in pixBlendGrayAdapt().
 *      (9) Invalid %fract defaults to 0.5 with a warning.
 *          Invalid %type defaults to L_BLEND_GRAY with a warning.
 * 
*/ PIX * pixBlendGray(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta; l_int32 ival, irval, igval, ibval, cval, dval; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pix1, *pix2; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", __func__, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } if (type != L_BLEND_GRAY && type != L_BLEND_GRAY_WITH_INVERSE) { L_WARNING("invalid blend type; setting to L_BLEND_GRAY\n", __func__); type = L_BLEND_GRAY; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ if (type == L_BLEND_GRAY) { /* * The basic logic for this blending is: * p --> (1 - f) * p + f * c * where c is the 8 bpp blender. All values are normalized to [0...1]. */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || cval != transpix) { dval = GET_DATA_BYTE(lined, j + x); ival = (l_int32)((1. - fract) * dval + fract * cval); SET_DATA_BYTE(lined, j + x, ival); } } break; case 32: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || cval != transpix) { val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); irval = (l_int32)((1. - fract) * irval + fract * cval); igval = (l_int32)((1. - fract) * igval + fract * cval); ibval = (l_int32)((1. - fract) * ibval + fract * cval); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } } break; default: break; /* shouldn't happen */ } } } else { /* L_BLEND_GRAY_WITH_INVERSE */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: /* * For 8 bpp, the dest pix is shifted by a signed amount * proportional to the distance from 128 (the pivot value), * and to the darkness of src2. If the dest is darker * than 128, it becomes lighter, and v.v. * The basic logic is: * d --> d + f * (0.5 - d) * (1 - c) * where d and c are normalized pixel values for src1 and * src2, respectively, with 8 bit normalization to [0...1]. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || cval != transpix) { ival = GET_DATA_BYTE(lined, j + x); delta = (128 - ival) * (255 - cval) / 256; ival += (l_int32)(fract * delta + 0.5); SET_DATA_BYTE(lined, j + x, ival); } } break; case 32: /* Each component is shifted by the same formula for 8 bpp */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || cval != transpix) { val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); delta = (128 - irval) * (255 - cval) / 256; irval += (l_int32)(fract * delta + 0.5); delta = (128 - igval) * (255 - cval) / 256; igval += (l_int32)(fract * delta + 0.5); delta = (128 - ibval) * (255 - cval) / 256; ibval += (l_int32)(fract * delta + 0.5); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } } break; default: break; /* shouldn't happen */ } } } pixDestroy(&pixc); return pixd; } /*! * \brief pixBlendGrayInverse() * * \param[in] pixd [optional] either equal to pixs1 for in-place, or NULL * \param[in] pixd [optional] either NULL or equal to pixs1 for in-place * \param[in] pixs1 blendee, depth > 1 * \param[in] pixs2 blender, any depth; typ. smaller in size than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1; can be < 0 * \param[in] fract blending fraction * \return pixd if OK; pixs1 on error * *
 * Notes:
 *      (1) For inplace operation (pixs1 not cmapped), call it this way:
 *            pixBlendGrayInverse(pixs1, pixs1, pixs2, ...)
 *      (2) For generating a new pixd:
 *            pixd = pixBlendGrayInverse(NULL, pixs1, pixs2, ...)
 *      (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (4) If pixs1 has a colormap, it is removed; otherwise if pixs1
 *          has depth < 8, it is unpacked to generate a 8 bpp pix.
 *      (5) This is a no-nonsense blender.  It changes the src1 pixel except
 *          when the src1 pixel is midlevel gray.  Use fract == 1 for the most
 *          aggressive blending, where, if the gray pixel in pixs2 is 0,
 *          we get a complete inversion of the color of the src pixel in pixs1.
 *      (6) The basic logic is that each component transforms by:
                 d  -->  c * d + (1 - c ) * (f * (1 - d) + d * (1 - f))
 *          where c is the blender pixel from pixs2,
 *                f is %fract,
 *                c and d are normalized to [0...1]
 *          This has the property that for f == 0 (no blend) or c == 1 (white):
 *               d  -->  d
 *          For c == 0 (black) we get maximum inversion:
 *               d  -->  f * (1 - d) + d * (1 - f)   [inversion by fraction f]
 * 
*/ PIX * pixBlendGrayInverse(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld; l_int32 irval, igval, ibval, cval, dval; l_float32 a; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pix1, *pix2; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", __func__, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); dval = GET_DATA_BYTE(lined, j + x); a = (1.0 - fract) * dval + fract * (255.0 - dval); dval = (l_int32)(cval * dval / 255.0 + a * (255.0 - cval) / 255.0); SET_DATA_BYTE(lined, j + x, dval); } break; case 32: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); a = (1.0 - fract) * irval + fract * (255.0 - irval); irval = (l_int32)(cval * irval / 255.0 + a * (255.0 - cval) / 255.0); a = (1.0 - fract) * igval + fract * (255.0 - igval); igval = (l_int32)(cval * igval / 255.0 + a * (255.0 - cval) / 255.0); a = (1.0 - fract) * ibval + fract * (255.0 - ibval); ibval = (l_int32)(cval * ibval / 255.0 + a * (255.0 - cval) / 255.0); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } break; default: break; /* shouldn't happen */ } } pixDestroy(&pixc); return pixd; } /*! * \brief pixBlendColor() * * \param[in] pixd [optional] either equal to pixs1 for in-place, * or NULL * \param[in] pixs1 blendee; depth > 1 * \param[in] pixs2 blender, any depth; typically, the area of * pixs2 is smaller than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1 * \param[in] fract blending fraction * \param[in] transparent 1 to use transparency; 0 otherwise * \param[in] transpix pixel color in pixs2 that is to be transparent * \return pixd, or null on error * *
 * Notes:
 *      (1) For inplace operation (pixs1 must be 32 bpp), call it this way:
 *            pixBlendColor(pixs1, pixs1, pixs2, ...)
 *      (2) For generating a new pixd:
 *            pixd = pixBlendColor(NULL, pixs1, pixs2, ...)
 *      (3) If pixs2 is not 32 bpp rgb, it is converted.
 *      (4) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (5) If pixs1 has a colormap, it is removed to generate a 32 bpp pix.
 *      (6) If pixs1 has depth < 32, it is unpacked to generate a 32 bpp pix.
 *      (7) If transparent = 0, the blending fraction (fract) is
 *          applied equally to all pixels.
 *      (8) If transparent = 1, all pixels of value transpix (typically
 *          either 0 or 0xffffff00) in pixs2 are transparent in the blend.
 * 
*/ PIX * pixBlendColor(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, wc, hc, w, h, wplc, wpld; l_int32 rval, gval, bval, rcval, gcval, bcval; l_uint32 cval32, val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, NULL); if (pixd == pixs1 && pixGetDepth(pixs1) != 32) return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", __func__, NULL); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } /* If pixd != null, we know that it is equal to pixs1 and * that pixs1 is 32 bpp rgb, so that an in-place operation * can be done. Otherwise, pixConvertTo32() will remove a * colormap from pixs1 if it exists and unpack to 32 bpp * (if necessary) to do the blending on a new 32 bpp Pix. */ if (!pixd) pixd = pixConvertTo32(pixs1); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo32(pixs2); /* blend with 32 bpp rgb */ pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { /* * The basic logic for this blending is: * p --> (1 - f) * p + f * c * for each color channel. c is a color component of the blender. * All values are normalized to [0...1]. */ if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval32 = *(linec + j); if (transparent == 0 || ((cval32 & 0xffffff00) != (transpix & 0xffffff00))) { val32 = *(lined + j + x); extractRGBValues(cval32, &rcval, &gcval, &bcval); extractRGBValues(val32, &rval, &gval, &bval); rval = (l_int32)((1. - fract) * rval + fract * rcval); gval = (l_int32)((1. - fract) * gval + fract * gcval); bval = (l_int32)((1. - fract) * bval + fract * bcval); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } } } pixDestroy(&pixc); return pixd; } /* * \brief pixBlendColorByChannel() * * \param[in] pixd [optional] either equal to pixs1 for in-place, * or NULL * \param[in] pixs1 blendee; depth > 1 * \param[in] pixs2 blender, any depth; typically, the area of * pixs2 is smaller than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1 * \param[in] rfract blending fraction in red channel * \param[in] gfract blending fraction in green channel * \param[in] bfract blending fraction in blue channel * \param[in] transparent 1 to use transparency; 0 otherwise * \param[in] transpix pixel color in pixs2 that is to be transparent * \return pixd if OK; pixd on error * *
 * Notes:
 *      (1) This generalizes pixBlendColor() in two ways:
 *          (a) The mixing fraction is specified per channel.
 *          (b) The mixing fraction may be < 0 or > 1, in which case,
 *              the min or max of two images are taken, respectively.
 *      (2) Specifically,
 *          for p = pixs1[i], c = pixs2[i], f = fract[i], i = 1, 2, 3:
 *              f < 0.0:          p --> min(p, c)
 *              0.0 <= f <= 1.0:  p --> (1 - f) * p + f * c
 *              f > 1.0:          p --> max(a, c)
 *          Special cases:
 *              f = 0:   p --> p
 *              f = 1:   p --> c
 *      (3) See usage notes in pixBlendColor()
 *      (4) pixBlendColor() would be equivalent to
 *            pixBlendColorChannel(..., fract, fract, fract, ...);
 *          at a small cost of efficiency.
 * 
*/ PIX * pixBlendColorByChannel(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 rfract, l_float32 gfract, l_float32 bfract, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, wc, hc, w, h, wplc, wpld; l_int32 rval, gval, bval, rcval, gcval, bcval; l_uint32 cval32, val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, pixd); if (pixd == pixs1 && pixGetDepth(pixs1) != 32) return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, pixd); /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 is 32 bpp rgb, so that an in-place operation * can be done. Otherwise, pixConvertTo32() will remove a * colormap from pixs1 if it exists and unpack to 32 bpp * (if necessary) to do the blending on a new 32 bpp Pix. */ if (!pixd) pixd = pixConvertTo32(pixs1); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo32(pixs2); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval32 = *(linec + j); if (transparent == 0 || ((cval32 & 0xffffff00) != (transpix & 0xffffff00))) { val32 = *(lined + j + x); extractRGBValues(cval32, &rcval, &gcval, &bcval); extractRGBValues(val32, &rval, &gval, &bval); rval = blendComponents(rval, rcval, rfract); gval = blendComponents(gval, gcval, gfract); bval = blendComponents(bval, bcval, bfract); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } } } pixDestroy(&pixc); return pixd; } static l_int32 blendComponents(l_int32 a, l_int32 b, l_float32 fract) { if (fract < 0.) return ((a < b) ? a : b); if (fract > 1.) return ((a > b) ? a : b); return (l_int32)((1. - fract) * a + fract * b); } /*! * \brief pixBlendGrayAdapt() * * \param[in] pixd [optional] either equal to pixs1 for in-place, or NULL * \param[in] pixs1 blendee; depth > 1 * \param[in] pixs2 blender, any depth; typically, the area of * pixs2 is smaller than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1; can be < 0 * \param[in] fract blending fraction * \param[in] shift >= 0 but <= 128: shift of zero blend value from * median source; use -1 for default value; * \return pixd if OK; pixs1 on error * *
 * Notes:
 *      (1) For inplace operation (pixs1 not cmapped), call it this way:
 *            pixBlendGrayAdapt(pixs1, pixs1, pixs2, ...)
 *          For generating a new pixd:
 *            pixd = pixBlendGrayAdapt(NULL, pixs1, pixs2, ...)
 *      (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (3) If pixs1 has a colormap, it is removed.
 *      (4) If pixs1 has depth < 8, it is unpacked to generate a 8 bpp pix.
 *      (5) This does a blend with inverse.  Whereas in pixGlendGray(), the
 *          zero blend point is where the blendee pixel is 128, here
 *          the zero blend point is found adaptively, with respect to the
 *          median of the blendee region.  If the median is < 128,
 *          the zero blend point is found from
 *              median + shift.
 *          Otherwise, if the median >= 128, the zero blend point is
 *              median - shift.
 *          The purpose of shifting the zero blend point away from the
 *          median is to prevent a situation in pixBlendGray() where
 *          the median is 128 and the blender is not visible.
 *          The default value of shift is 64.
 *      (6) After processing pixs1, it is either 8 bpp or 32 bpp:
 *          ~ if 8 bpp, the fraction of pixs2 is mixed with pixs1.
 *          ~ if 32 bpp, each component of pixs1 is mixed with
 *            the same fraction of pixs2.
 *      (7) The darker the blender, the more it mixes with the blendee.
 *          A blender value of 0 has maximum mixing; a value of 255
 *          has no mixing and hence is transparent.
 * 
*/ PIX * pixBlendGrayAdapt(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 shift) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta, overlap; l_int32 rval, gval, bval, cval, dval, mval, median, pivot; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; l_float32 fmedian, factor; BOX *box, *boxt; PIX *pixc, *pix1, *pix2; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", __func__, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", __func__, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } if (shift == -1) shift = 64; /* default value */ if (shift < 0 || shift > 127) { L_WARNING("invalid shift; setting to 64\n", __func__); shift = 64; } /* Test for overlap */ pixGetDimensions(pixs1, &w, &h, NULL); pixGetDimensions(pixs2, &wc, &hc, NULL); box = boxCreate(x, y, wc, hc); boxt = boxCreate(0, 0, w, h); boxIntersects(box, boxt, &overlap); boxDestroy(&boxt); if (!overlap) { boxDestroy(&box); return (PIX *)ERROR_PTR("no image overlap", __func__, pixd); } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } /* Get the median value in the region of blending */ pix1 = pixClipRectangle(pixd, box, NULL); pix2 = pixConvertTo8(pix1, 0); pixGetRankValueMasked(pix2, NULL, 0, 0, 1, 0.5, &fmedian, NULL); median = (l_int32)(fmedian + 0.5); if (median < 128) pivot = median + shift; else pivot = median - shift; pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); /* Process over src2; clip to src1. */ d = pixGetDepth(pixd); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: /* * For 8 bpp, the dest pix is shifted by an amount * proportional to the distance from the pivot value, * and to the darkness of src2. In no situation will it * pass the pivot value in intensity. * The basic logic is: * d --> d + f * (np - d) * (1 - c) * where np, d and c are normalized pixel values for * the pivot, src1 and src2, respectively, with normalization * to 255. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; dval = GET_DATA_BYTE(lined, j + x); cval = GET_DATA_BYTE(linec, j); delta = (pivot - dval) * (255 - cval) / 256; dval += (l_int32)(fract * delta + 0.5); SET_DATA_BYTE(lined, j + x, dval); } break; case 32: /* * For 32 bpp, the dest pix is shifted by an amount * proportional to the max component distance from the * pivot value, and to the darkness of src2. Each component * is shifted by the same fraction, either up or down, * depending on the shift direction (which is toward the * pivot). The basic logic for the red component is: * r --> r + f * (np - m) * (1 - c) * (r / m) * where np, r, m and c are normalized pixel values for * the pivot, the r component of src1, the max component * of src1, and src2, respectively, again with normalization * to 255. Likewise for the green and blue components. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); val32 = *(lined + j + x); extractRGBValues(val32, &rval, &gval, &bval); mval = L_MAX(rval, gval); mval = L_MAX(mval, bval); mval = L_MAX(mval, 1); delta = (pivot - mval) * (255 - cval) / 256; factor = fract * delta / mval; rval += (l_int32)(factor * rval + 0.5); gval += (l_int32)(factor * gval + 0.5); bval += (l_int32)(factor * bval + 0.5); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } break; default: break; /* shouldn't happen */ } } pixDestroy(&pixc); return pixd; } /*! * \brief pixFadeWithGray() * * \param[in] pixs colormapped or 8 bpp or 32 bpp * \param[in] pixb 8 bpp blender * \param[in] factor multiplicative factor to apply to blender value * \param[in] type L_BLEND_TO_WHITE, L_BLEND_TO_BLACK * \return pixd, or null on error * *
 * Notes:
 *      (1) This function combines two pix aligned to the UL corner; they
 *          need not be the same size.
 *      (2) Each pixel in pixb is multiplied by 'factor' divided by 255, and
 *          clipped to the range [0 ... 1].  This gives the fade fraction
 *          to be applied to pixs.  Fade either to white (L_BLEND_TO_WHITE)
 *          or to black (L_BLEND_TO_BLACK).
 * 
*/ PIX * pixFadeWithGray(PIX *pixs, PIX *pixb, l_float32 factor, l_int32 type) { l_int32 i, j, w, h, d, wb, hb, db, wd, hd, wplb, wpld; l_int32 valb, vald, nvald, rval, gval, bval, nrval, ngval, nbval; l_float32 nfactor, fract; l_uint32 val32, nval32; l_uint32 *lined, *datad, *lineb, *datab; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixb) return (PIX *)ERROR_PTR("pixb not defined", __func__, NULL); if (pixGetDepth(pixs) == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", __func__, NULL); pixGetDimensions(pixb, &wb, &hb, &db); if (db != 8) return (PIX *)ERROR_PTR("pixb not 8 bpp", __func__, NULL); if (factor < 0.0 || factor > 255.0) return (PIX *)ERROR_PTR("factor not in [0.0...255.0]", __func__, NULL); if (type != L_BLEND_TO_WHITE && type != L_BLEND_TO_BLACK) return (PIX *)ERROR_PTR("invalid fade type", __func__, NULL); /* Remove colormap if it exists; otherwise copy */ pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY); pixGetDimensions(pixd, &wd, &hd, &d); w = L_MIN(wb, wd); h = L_MIN(hb, hd); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datab = pixGetData(pixb); wplb = pixGetWpl(pixb); /* The basic logic for this blending is, for each component p of pixs: * fade-to-white: p --> p + (f * c) * (1 - p) * fade-to-black: p --> p - (f * c) * p * with c being the 8 bpp blender pixel of pixb, and with both * p and c normalized to [0...1]. */ nfactor = factor / 255.; for (i = 0; i < h; i++) { lineb = datab + i * wplb; lined = datad + i * wpld; for (j = 0; j < w; j++) { valb = GET_DATA_BYTE(lineb, j); fract = nfactor * (l_float32)valb; fract = L_MIN(fract, 1.0); if (d == 8) { vald = GET_DATA_BYTE(lined, j); if (type == L_BLEND_TO_WHITE) nvald = vald + (l_int32)(fract * (255. - (l_float32)vald)); else /* L_BLEND_TO_BLACK */ nvald = vald - (l_int32)(fract * (l_float32)vald); SET_DATA_BYTE(lined, j, nvald); } else { /* d == 32 */ val32 = lined[j]; extractRGBValues(val32, &rval, &gval, &bval); if (type == L_BLEND_TO_WHITE) { nrval = rval + (l_int32)(fract * (255. - (l_float32)rval)); ngval = gval + (l_int32)(fract * (255. - (l_float32)gval)); nbval = bval + (l_int32)(fract * (255. - (l_float32)bval)); } else { nrval = rval - (l_int32)(fract * (l_float32)rval); ngval = gval - (l_int32)(fract * (l_float32)gval); nbval = bval - (l_int32)(fract * (l_float32)bval); } composeRGBPixel(nrval, ngval, nbval, &nval32); lined[j] = nval32; } } } return pixd; } /* * \brief pixBlendHardLight() * * \param[in] pixd either NULL or equal to pixs1 for in-place * \param[in] pixs1 blendee; depth > 1, may be cmapped * \param[in] pixs2 blender, 8 or 32 bpp; may be colormapped; * typ. smaller in size than pixs1 * \param[in] x,y origin [UL corner] of pixs2 relative to * the origin of pixs1 * \param[in] fract blending fraction, or 'opacity factor' * \return pixd if OK; pixs1 on error * *
 * Notes:
 *      (1) pixs2 must be 8 or 32 bpp; either may have a colormap.
 *      (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
 *      (3) Only call in-place if pixs1 is not colormapped.
 *      (4) If pixs1 has a colormap, it is removed to generate either an
 *          8 or 32 bpp pix, depending on the colormap.
 *      (5) For inplace operation, call it this way:
 *            pixBlendHardLight(pixs1, pixs1, pixs2, ...)
 *      (6) For generating a new pixd:
 *            pixd = pixBlendHardLight(NULL, pixs1, pixs2, ...)
 *      (7) This is a generalization of the usual hard light blending,
 *          where fract == 1.0.
 *      (8) "Overlay" blending is the same as hard light blending, with
 *          fract == 1.0, except that the components are switched
 *          in the test.  (Note that the result is symmetric in the
 *          two components.)
 *      (9) See, e.g.:
 *           http://www.pegtop.net/delphi/articles/blendmodes/hardlight.htm
 *           http://www.digitalartform.com/imageArithmetic.htm
 *      (10) This function was built by Paco Galanes.
 * 
*/ PIX * pixBlendHardLight(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 i, j, w, h, d, wc, hc, dc, wplc, wpld; l_int32 cval, dval, rcval, gcval, bcval, rdval, gdval, bdval; l_uint32 cval32, dval32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pixt; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); pixGetDimensions(pixs1, &w, &h, &d); pixGetDimensions(pixs2, &wc, &hc, &dc); if (d == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", __func__, pixd); if (dc != 8 && dc != 32) return (PIX *)ERROR_PTR("pixs2 not 8 or 32 bpp", __func__, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("inplace and pixd != pixs1", __func__, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("inplace and pixs1 cmapped", __func__, pixd); if (pixd && d != 8 && d != 32) return (PIX *)ERROR_PTR("inplace and not 8 or 32 bpp", __func__, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } /* If pixs2 has a colormap, remove it */ pixc = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); /* clone ok */ dc = pixGetDepth(pixc); /* There are 4 cases: * * pixs1 has or doesn't have a colormap * * pixc is either 8 or 32 bpp * In all situations, if pixs has a colormap it must be removed, * and pixd must have a depth that is equal to or greater than pixc. */ if (dc == 32) { if (pixGetColormap(pixs1)) { /* pixd == NULL */ pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); } else { if (!pixd) { pixd = pixConvertTo32(pixs1); } else { pixt = pixConvertTo32(pixs1); pixCopy(pixd, pixt); pixDestroy(&pixt); } } d = 32; } else { /* dc == 8 */ if (pixGetColormap(pixs1)) /* pixd == NULL */ pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixCopy(pixd, pixs1); d = pixGetDepth(pixd); } if (!(d == 8 && dc == 8) && /* 3 cases only */ !(d == 32 && dc == 8) && !(d == 32 && dc == 32)) { pixDestroy(&pixc); return (PIX *)ERROR_PTR("bad! -- invalid depth combo!", __func__, pixd); } wpld = pixGetWpl(pixd); datad = pixGetData(pixd); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; if (d == 8 && dc == 8) { dval = GET_DATA_BYTE(lined, x + j); cval = GET_DATA_BYTE(linec, j); dval = blendHardLightComponents(dval, cval, fract); SET_DATA_BYTE(lined, x + j, dval); } else if (d == 32 && dc == 8) { dval32 = *(lined + x + j); extractRGBValues(dval32, &rdval, &gdval, &bdval); cval = GET_DATA_BYTE(linec, j); rdval = blendHardLightComponents(rdval, cval, fract); gdval = blendHardLightComponents(gdval, cval, fract); bdval = blendHardLightComponents(bdval, cval, fract); composeRGBPixel(rdval, gdval, bdval, &dval32); *(lined + x + j) = dval32; } else if (d == 32 && dc == 32) { dval32 = *(lined + x + j); extractRGBValues(dval32, &rdval, &gdval, &bdval); cval32 = *(linec + j); extractRGBValues(cval32, &rcval, &gcval, &bcval); rdval = blendHardLightComponents(rdval, rcval, fract); gdval = blendHardLightComponents(gdval, gcval, fract); bdval = blendHardLightComponents(bdval, bcval, fract); composeRGBPixel(rdval, gdval, bdval, &dval32); *(lined + x + j) = dval32; } } } pixDestroy(&pixc); return pixd; } /* * \brief blendHardLightComponents() * * \param[in] a 8 bpp blendee component * \param[in] b 8 bpp blender component * \param[in] fract fraction of blending; use 1.0 for usual definition * \return blended 8 bpp component * *
 * Notes:
 *
 *    The basic logic for this blending is:
 *      b < 0.5:
 *          a --> 2 * a * (0.5 - f * (0.5 - b))
 *      b >= 0.5:
 *          a --> 1 - 2 * (1 - a) * (1 - (0.5 - f * (0.5 - b)))
 *
 *    In the limit that f == 1 (standard hardlight blending):
 *      b < 0.5:   a --> 2 * a * b
 *                     or
 *                 a --> a - a * (1 - 2 * b)
 *      b >= 0.5:  a --> 1 - 2 * (1 - a) * (1 - b)
 *                     or
 *                 a --> a + (1 - a) * (2 * b - 1)
 *
 *    You can see that for standard hardlight blending:
 *      b < 0.5:   a is pushed linearly with b down to 0
 *      b >= 0.5:  a is pushed linearly with b up to 1
 *    a is unchanged if b = 0.5
 *
 *    Our opacity factor f reduces the deviation of b from 0.5:
 *      f == 0:  b -->  0.5, so no blending occurs
 *      f == 1:  b -->  b, so we get full conventional blending
 *
 *    There is a variant of hardlight blending called "softlight" blending:
 *    (e.g., http://jswidget.com/blog/tag/hard-light/)
 *      b < 0.5:
 *          a --> a - a * (0.5 - b) * (1 - Abs(2 * a - 1))
 *      b >= 0.5:
 *          a --> a + (1 - a) * (b - 0.5) * (1 - Abs(2 * a - 1))
 *    which limits the amount that 'a' can be moved to a maximum of
 *    halfway toward 0 or 1, and further reduces it as 'a' moves
 *    away from 0.5.
 *    As you can see, there are a nearly infinite number of different
 *    blending formulas that can be conjured up.
 * 
*/ static l_int32 blendHardLightComponents(l_int32 a, l_int32 b, l_float32 fract) { if (b < 0x80) { b = 0x80 - (l_int32)(fract * (0x80 - b)); return (a * b) >> 7; } else { b = 0x80 + (l_int32)(fract * (b - 0x80)); return 0xff - (((0xff - b) * (0xff - a)) >> 7); } } /*-------------------------------------------------------------* * Blending two colormapped images * *-------------------------------------------------------------*/ /*! * \brief pixBlendCmap() * * \param[in] pixs 2, 4 or 8 bpp, with colormap * \param[in] pixb colormapped blender * \param[in] x, y UL corner of blender relative to pixs * \param[in] sindex colormap index of pixels in pixs to be changed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function combines two colormaps, and replaces the pixels
 *          in pixs that have a specified color value with those in pixb.
 *      (2) sindex must be in the existing colormap; otherwise an
 *          error is returned.  In use, sindex will typically be the index
 *          for white (255, 255, 255).
 *      (3) Blender colors that already exist in the colormap are used;
 *          others are added.  If any blender colors cannot be
 *          stored in the colormap, an error is returned.
 *      (4) In the implementation, a mapping is generated from each
 *          original blender colormap index to the corresponding index
 *          in the expanded colormap for pixs.  Then for each pixel in
 *          pixs with value sindex, and which is covered by a blender pixel,
 *          the new index corresponding to the blender pixel is substituted
 *          for sindex.
 * 
*/ l_ok pixBlendCmap(PIX *pixs, PIX *pixb, l_int32 x, l_int32 y, l_int32 sindex) { l_int32 rval, gval, bval; l_int32 i, j, w, h, d, ncb, wb, hb, wpls; l_int32 index, val, nadded; l_int32 lut[256]; l_uint32 pval; l_uint32 *lines, *datas; PIXCMAP *cmaps, *cmapb, *cmapsc; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixb) return ERROR_INT("pixb not defined", __func__, 1); if ((cmaps = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap in pixs", __func__, 1); if ((cmapb = pixGetColormap(pixb)) == NULL) return ERROR_INT("no colormap in pixb", __func__, 1); ncb = pixcmapGetCount(cmapb); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2,4,8}", __func__, 1); /* Make a copy of cmaps; we'll add to this if necessary * and substitute at the end if we found there was enough room * to hold all the new colors. */ cmapsc = pixcmapCopy(cmaps); /* Add new colors if necessary; get mapping array between * cmaps and cmapb. */ for (i = 0, nadded = 0; i < ncb; i++) { pixcmapGetColor(cmapb, i, &rval, &gval, &bval); if (pixcmapGetIndex(cmapsc, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmapsc, rval, gval, bval)) { pixcmapDestroy(&cmapsc); return ERROR_INT("not enough room in cmaps", __func__, 1); } lut[i] = pixcmapGetCount(cmapsc) - 1; nadded++; } else { lut[i] = index; } } /* Replace cmaps if colors have been added. */ if (nadded == 0) pixcmapDestroy(&cmapsc); else pixSetColormap(pixs, cmapsc); /* Replace each pixel value sindex by mapped colormap index when * a blender pixel in pixbc overlays it. */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixGetDimensions(pixb, &wb, &hb, NULL); for (i = 0; i < hb; i++) { if (i + y < 0 || i + y >= h) continue; lines = datas + (y + i) * wpls; for (j = 0; j < wb; j++) { if (j + x < 0 || j + x >= w) continue; switch (d) { case 2: val = GET_DATA_DIBIT(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_DIBIT(lines, x + j, lut[pval]); } break; case 4: val = GET_DATA_QBIT(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_QBIT(lines, x + j, lut[pval]); } break; case 8: val = GET_DATA_BYTE(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_BYTE(lines, x + j, lut[pval]); } break; default: return ERROR_INT("depth not in {2,4,8}", __func__, 1); } } } return 0; } /*---------------------------------------------------------------------* * Blending two images using a third * *---------------------------------------------------------------------*/ /*! * \brief pixBlendWithGrayMask() * * \param[in] pixs1 8 bpp gray, rgb, rgba or colormapped * \param[in] pixs2 8 bpp gray, rgb, rgba or colormapped * \param[in] pixg [optional] 8 bpp gray, for transparency of pixs2; * can be null * \param[in] x, y UL corner of pixs2 and pixg with respect to pixs1 * \return pixd blended image, or null on error * *
 * Notes:
 *      (1) The result is 8 bpp grayscale if both pixs1 and pixs2 are
 *          8 bpp gray.  Otherwise, the result is 32 bpp rgb.
 *      (2) pixg is an 8 bpp transparency image, where 0 is transparent
 *          and 255 is opaque.  It determines the transparency of pixs2
 *          when applied over pixs1.  It can be null if pixs2 is rgba,
 *          in which case we use the alpha component of pixs2.
 *      (3) If pixg exists, it need not be the same size as pixs2.
 *          However, we assume their UL corners are aligned with each other,
 *          and placed at the location (x, y) in pixs1.
 *      (4) The pixels in pixd are a combination of those in pixs1
 *          and pixs2, where the amount from pixs2 is proportional to
 *          the value of the pixel (p) in pixg, and the amount from pixs1
 *          is proportional to (255 - p).  Thus pixg is a transparency
 *          image (usually called an alpha blender) where each pixel
 *          can be associated with a pixel in pixs2, and determines
 *          the amount of the pixs2 pixel in the final result.
 *          For example, if pixg is all 0, pixs2 is transparent and
 *          the result in pixd is simply pixs1.
 *      (5) A typical use is for the pixs2/pixg combination to be
 *          a small watermark that is applied to pixs1.
 * 
*/ PIX * pixBlendWithGrayMask(PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y) { l_int32 w1, h1, d1, w2, h2, d2, spp, wg, hg, wmin, hmin, wpld, wpls, wplg; l_int32 i, j, val, dval, sval; l_int32 drval, dgval, dbval, srval, sgval, sbval; l_uint32 dval32, sval32; l_uint32 *datad, *datas, *datag, *lined, *lines, *lineg; l_float32 fract; PIX *pixr1, *pixr2, *pix1, *pix2, *pixg2, *pixd; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); pixGetDimensions(pixs1, &w1, &h1, &d1); pixGetDimensions(pixs2, &w2, &h2, &d2); if (d1 == 1 || d2 == 1) return (PIX *)ERROR_PTR("pixs1 or pixs2 is 1 bpp", __func__, NULL); if (pixg) { if (pixGetDepth(pixg) != 8) return (PIX *)ERROR_PTR("pixg not 8 bpp", __func__, NULL); pixGetDimensions(pixg, &wg, &hg, NULL); wmin = L_MIN(w2, wg); hmin = L_MIN(h2, hg); pixg2 = pixClone(pixg); } else { /* use the alpha component of pixs2 */ spp = pixGetSpp(pixs2); if (d2 != 32 || spp != 4) return (PIX *)ERROR_PTR("no alpha; pixs2 not rgba", __func__, NULL); wmin = w2; hmin = h2; pixg2 = pixGetRGBComponent(pixs2, L_ALPHA_CHANNEL); } /* Remove colormaps if they exist; clones are OK */ pixr1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); pixr2 = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); /* Regularize to the same depth if necessary */ d1 = pixGetDepth(pixr1); d2 = pixGetDepth(pixr2); if (d1 == 32) { /* convert d2 to rgb if necessary */ pix1 = pixClone(pixr1); if (d2 != 32) pix2 = pixConvertTo32(pixr2); else pix2 = pixClone(pixr2); } else if (d2 == 32) { /* and d1 != 32; convert to 32 */ pix2 = pixClone(pixr2); pix1 = pixConvertTo32(pixr1); } else { /* both are 8 bpp or less */ pix1 = pixConvertTo8(pixr1, FALSE); pix2 = pixConvertTo8(pixr2, FALSE); } pixDestroy(&pixr1); pixDestroy(&pixr2); /* Output a copy of pix1 to avoid side-effecting input pixs1 */ pixd = pixCopy(NULL, pix1); pixDestroy(&pix1); /* Sanity check: both either 8 or 32 bpp */ d1 = pixGetDepth(pixd); d2 = pixGetDepth(pix2); if (!pixd || d1 != d2 || (d1 != 8 && d1 != 32)) { pixDestroy(&pixd); pixDestroy(&pix2); pixDestroy(&pixg2); return (PIX *)ERROR_PTR("depths not regularized! bad!", __func__, NULL); } /* Blend pix2 onto pixd, using pixg2. * Let the normalized pixel value of pixg2 be f = pixval / 255, * and the pixel values of pixd and pix2 be p1 and p2, rsp. * Then the blended value is: * p = (1.0 - f) * p1 + f * p2 * Blending is done component-wise if rgb. * Scan over pix2 and pixg2, clipping to pixd where necessary. */ datad = pixGetData(pixd); datas = pixGetData(pix2); datag = pixGetData(pixg2); wpld = pixGetWpl(pixd); wpls = pixGetWpl(pix2); wplg = pixGetWpl(pixg2); for (i = 0; i < hmin; i++) { if (i + y < 0 || i + y >= h1) continue; lined = datad + (i + y) * wpld; lines = datas + i * wpls; lineg = datag + i * wplg; for (j = 0; j < wmin; j++) { if (j + x < 0 || j + x >= w1) continue; val = GET_DATA_BYTE(lineg, j); if (val == 0) continue; /* pix2 is transparent */ fract = (l_float32)val / 255.; if (d1 == 8) { dval = GET_DATA_BYTE(lined, j + x); sval = GET_DATA_BYTE(lines, j); dval = (l_int32)((1.0 - fract) * dval + fract * sval); SET_DATA_BYTE(lined, j + x, dval); } else { /* 32 */ dval32 = *(lined + j + x); sval32 = *(lines + j); extractRGBValues(dval32, &drval, &dgval, &dbval); extractRGBValues(sval32, &srval, &sgval, &sbval); drval = (l_int32)((1.0 - fract) * drval + fract * srval); dgval = (l_int32)((1.0 - fract) * dgval + fract * sgval); dbval = (l_int32)((1.0 - fract) * dbval + fract * sbval); composeRGBPixel(drval, dgval, dbval, &dval32); *(lined + j + x) = dval32; } } } pixDestroy(&pixg2); pixDestroy(&pix2); return pixd; } /*---------------------------------------------------------------------* * Blending background to a specific color * *---------------------------------------------------------------------*/ /*! * \brief pixBlendBackgroundToColor() * * \param[in] pixd can be NULL or pixs * \param[in] pixs 32 bpp rgb * \param[in] box region for blending; can be NULL) * \param[in] color 32 bit color in 0xrrggbb00 format * \param[in] gamma, minval, maxval args for grayscale TRC mapping * \return pixd always * *
 * Notes:
 *      (1) This in effect replaces light background pixels in pixs
 *          by the input color.  It does it by alpha blending so that
 *          there are no visible artifacts from hard cutoffs.
 *      (2) If pixd == pixs, this is done in-place.
 *      (3) If box == NULL, this is performed on all of pixs.
 *      (4) The alpha component for blending is derived from pixs,
 *          by converting to grayscale and enhancing with a TRC.
 *      (5) The last three arguments specify the TRC operation.
 *          Suggested values are: %gamma = 0.3, %minval = 50, %maxval = 200.
 *          To skip the TRC, use %gamma == 1, %minval = 0, %maxval = 255.
 *          See pixGammaTRC() for details.
 * 
*/ PIX * pixBlendBackgroundToColor(PIX *pixd, PIX *pixs, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 x, y, w, h; BOX *boxt; PIX *pixt, *pixc, *pixr, *pixg; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd neither null nor pixs", __func__, pixd); /* Extract the (optionally cropped) region, pixr, and generate * an identically sized pixc with the uniform color. */ if (!pixd) pixd = pixCopy(NULL, pixs); if (box) { pixr = pixClipRectangle(pixd, box, &boxt); boxGetGeometry(boxt, &x, &y, &w, &h); pixc = pixCreate(w, h, 32); boxDestroy(&boxt); } else { pixc = pixCreateTemplate(pixs); pixr = pixClone(pixd); } pixSetAllArbitrary(pixc, color); /* Set up the alpha channel */ pixg = pixConvertTo8(pixr, 0); pixGammaTRC(pixg, pixg, gamma, minval, maxval); pixSetRGBComponent(pixc, pixg, L_ALPHA_CHANNEL); /* Blend and replace in pixd */ pixt = pixBlendWithGrayMask(pixr, pixc, NULL, 0, 0); if (box) { pixRasterop(pixd, x, y, w, h, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); } else { pixTransferAllData(pixd, &pixt, 0, 0); } pixDestroy(&pixc); pixDestroy(&pixr); pixDestroy(&pixg); return pixd; } /*---------------------------------------------------------------------* * Multiplying by a specific color * *---------------------------------------------------------------------*/ /*! * \brief pixMultiplyByColor() * * \param[in] pixd can be NULL or pixs * \param[in] pixs 32 bpp rgb * \param[in] box region for filtering; can be NULL) * \param[in] color 32 bit color in 0xrrggbb00 format * \return pixd always * *
 * Notes:
 *      (1) This filters all pixels in the specified region by
 *          multiplying each component by the input color.
 *          This leaves black invariant and transforms white to the
 *          input color.
 *      (2) If pixd == pixs, this is done in-place.
 *      (3) If box == NULL, this is performed on all of pixs.
 * 
*/ PIX * pixMultiplyByColor(PIX *pixd, PIX *pixs, BOX *box, l_uint32 color) { l_int32 i, j, bx, by, w, h, wpl; l_int32 red, green, blue, rval, gval, bval, nrval, ngval, nbval; l_float32 frval, fgval, fbval; l_uint32 *data, *line; PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd neither null nor pixs", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); if (box) { boxGetGeometry(box, &bx, &by, NULL, NULL); pixt = pixClipRectangle(pixd, box, NULL); } else { pixt = pixClone(pixd); } /* Multiply each pixel in pixt by the color */ extractRGBValues(color, &red, &green, &blue); frval = (1. / 255.) * red; fgval = (1. / 255.) * green; fbval = (1. / 255.) * blue; data = pixGetData(pixt); wpl = pixGetWpl(pixt); pixGetDimensions(pixt, &w, &h, NULL); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); nrval = (l_int32)(frval * rval + 0.5); ngval = (l_int32)(fgval * gval + 0.5); nbval = (l_int32)(fbval * bval + 0.5); composeRGBPixel(nrval, ngval, nbval, line + j); } } /* Replace */ if (box) pixRasterop(pixd, bx, by, w, h, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------* * Rendering with alpha blending over a uniform background * *---------------------------------------------------------------------*/ /*! * \brief pixAlphaBlendUniform() * * \param[in] pixs 32 bpp rgba, with alpha * \param[in] color 32 bit color in 0xrrggbb00 format * \return pixd 32 bpp rgb: pixs blended over uniform color %color, * a clone of pixs if no alpha, and null on error * *
 * Notes:
 *      (1) This is a convenience function that renders 32 bpp RGBA images
 *          (with an alpha channel) over a uniform background of
 *          value %color.  To render over a white background,
 *          use %color = 0xffffff00.  The result is an RGB image.
 *      (2) If pixs does not have an alpha channel, it returns a clone
 *          of pixs.
 * 
*/ PIX * pixAlphaBlendUniform(PIX *pixs, l_uint32 color) { PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (pixGetSpp(pixs) != 4) { L_WARNING("no alpha channel; returning clone\n", __func__); return pixClone(pixs); } pixt = pixCreateTemplate(pixs); pixSetAllArbitrary(pixt, color); pixSetSpp(pixt, 3); /* not required */ pixd = pixBlendWithGrayMask(pixt, pixs, NULL, 0, 0); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------* * Adding an alpha layer for blending * *---------------------------------------------------------------------*/ /*! * \brief pixAddAlphaToBlend() * * \param[in] pixs any depth * \param[in] fract fade fraction in the alpha component * \param[in] invert 1 to photometrically invert pixs * \return pixd 32 bpp with alpha, or null on error * *
 * Notes:
 *      (1) This is a simple alpha layer generator, where typically white has
 *          maximum transparency and black has minimum.
 *      (2) If %invert == 1, generate the same alpha layer but invert
 *          the input image photometrically.  This is useful for blending
 *          over dark images, where you want dark regions in pixs, such
 *          as text, to be lighter in the blended image.
 *      (3) The fade %fract gives the minimum transparency (i.e.,
 *          maximum opacity).  A small fraction is useful for adding
 *          a watermark to an image.
 *      (4) If pixs has a colormap, it is removed to rgb.
 *      (5) If pixs already has an alpha layer, it is overwritten.
 * 
*/ PIX * pixAddAlphaToBlend(PIX *pixs, l_float32 fract, l_int32 invert) { PIX *pixd, *pix1, *pix2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (fract < 0.0 || fract > 1.0) return (PIX *)ERROR_PTR("invalid fract", __func__, NULL); /* Convert to 32 bpp */ if (pixGetColormap(pixs)) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pix1 = pixClone(pixs); pixd = pixConvertTo32(pix1); /* new */ /* Use an inverted image if this will be blended with a dark image */ if (invert) pixInvert(pixd, pixd); /* Generate alpha layer */ pix2 = pixConvertTo8(pix1, 0); /* new */ pixInvert(pix2, pix2); pixMultConstantGray(pix2, fract); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*---------------------------------------------------------------------* * Setting a transparent alpha component over a white background * *---------------------------------------------------------------------*/ /*! * \brief pixSetAlphaOverWhite() * * \param[in] pixs colormapped or 32 bpp rgb; no alpha * \return pixd new pix with meaningful alpha component, * or null on error * *
 * Notes:
 *      (1) The generated alpha component is transparent over white
 *          (background) pixels in pixs, and quickly grades to opaque
 *          away from the transparent parts.  This is a cheap and
 *          dirty alpha generator.  The 2 pixel gradation is useful
 *          to blur the boundary between the transparent region
 *          (that will render entirely from a backing image) and
 *          the remainder which renders from pixs.
 *      (2) All alpha component bits in pixs are overwritten.
 * 
*/ PIX * pixSetAlphaOverWhite(PIX *pixs) { PIX *pixd, *pix1, *pix2, *pix3, *pix4; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!(pixGetDepth(pixs) == 32 || pixGetColormap(pixs))) return (PIX *)ERROR_PTR("pixs not 32 bpp or cmapped", __func__, NULL); /* Remove colormap if it exists; otherwise copy */ pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_TO_FULL_COLOR, L_COPY); /* Generate a 1 bpp image where a white pixel in pixd is 0. * In the comments below, a "white" pixel refers to pixd. * pix1 is rgb, pix2 is 8 bpp gray, pix3 is 1 bpp. */ pix1 = pixInvert(NULL, pixd); /* send white (255) to 0 for each sample */ pix2 = pixConvertRGBToGrayMinMax(pix1, L_CHOOSE_MAX); /* 0 if white */ pix3 = pixThresholdToBinary(pix2, 1); /* sets white pixels to 1 */ pixInvert(pix3, pix3); /* sets white pixels to 0 */ /* Generate the alpha component using the distance transform, * which measures the distance to the nearest bg (0) pixel in pix3. * After multiplying by 128, its value is 0 (transparent) * over white pixels, and goes to opaque (255) two pixels away * from the nearest white pixel. */ pix4 = pixDistanceFunction(pix3, 8, 8, L_BOUNDARY_FG); pixMultConstantGray(pix4, 128.0); pixSetRGBComponent(pixd, pix4, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return pixd; } /*---------------------------------------------------------------------* * Fading from the edge * *---------------------------------------------------------------------*/ /*! * \brief pixLinearEdgeFade() * * \param[in] pixs 8 or 32 bpp; no colormap * \param[in] dir L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT * \param[in] fadeto L_BLEND_TO_WHITE, L_BLEND_TO_BLACK * \param[in] distfract fraction of width or height over which fading occurs * \param[in] maxfade fraction of fading at the edge, <= 1.0 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place operation.
 *      (2) Maximum fading fraction %maxfade occurs at the edge of the image,
 *          and the fraction goes to 0 at the fractional distance %distfract
 *          from the edge.  %maxfade must be in [0, 1].
 *      (3) %distrfact must be in [0, 1], and typically it would be <= 0.5.
 * 
*/ l_ok pixLinearEdgeFade(PIX *pixs, l_int32 dir, l_int32 fadeto, l_float32 distfract, l_float32 maxfade) { l_int32 i, j, w, h, d, wpl, xmin, ymin, range, val, rval, gval, bval; l_float32 slope, limit, del; l_uint32 *data, *line; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs has a colormap", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", __func__, 1); if (dir != L_FROM_LEFT && dir != L_FROM_RIGHT && dir != L_FROM_TOP && dir != L_FROM_BOT) return ERROR_INT("invalid fade direction from edge", __func__, 1); if (fadeto != L_BLEND_TO_WHITE && fadeto != L_BLEND_TO_BLACK) return ERROR_INT("invalid fadeto photometry", __func__, 1); if (maxfade <= 0) return 0; if (maxfade > 1.0) return ERROR_INT("invalid maxfade", __func__, 1); if (distfract <= 0 || distfract * L_MIN(w, h) < 1.0) { L_INFO("distfract is too small\n", __func__); return 0; } if (distfract > 1.0) return ERROR_INT("invalid distfract", __func__, 1); /* Set up parameters */ if (dir == L_FROM_LEFT) { range = (l_int32)(distfract * w); xmin = 0; slope = maxfade / (l_float32)range; } else if (dir == L_FROM_RIGHT) { range = (l_int32)(distfract * w); xmin = w - range; slope = maxfade / (l_float32)range; } else if (dir == L_FROM_TOP) { range = (l_int32)(distfract * h); ymin = 0; slope = maxfade / (l_float32)range; } else { /* dir == L_FROM_BOT */ range = (l_int32)(distfract * h); ymin = h - range; slope = maxfade / (l_float32)range; } limit = (fadeto == L_BLEND_TO_WHITE) ? 255.0 : 0.0; data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (dir == L_FROM_LEFT || dir == L_FROM_RIGHT) { for (j = 0; j < range; j++) { del = (dir == L_FROM_LEFT) ? maxfade - slope * j : maxfade - slope * (range - j); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 8) { val = GET_DATA_BYTE(line, xmin + j); val += (limit - val) * del + 0.5; SET_DATA_BYTE(line, xmin + j, val); } else { /* rgb */ extractRGBValues(*(line + xmin + j), &rval, &gval, &bval); rval += (limit - rval) * del + 0.5; gval += (limit - gval) * del + 0.5; bval += (limit - bval) * del + 0.5; composeRGBPixel(rval, gval, bval, line + xmin + j); } } } } else { /* dir == L_FROM_TOP || L_FROM_BOT */ for (i = 0; i < range; i++) { del = (dir == L_FROM_TOP) ? maxfade - slope * i : maxfade - slope * (range - i); line = data + (ymin + i) * wpl; for (j = 0; j < w; j++) { if (d == 8) { val = GET_DATA_BYTE(line, j); val += (limit - val) * del + 0.5; SET_DATA_BYTE(line, j, val); } else { /* rgb */ extractRGBValues(*(line + j), &rval, &gval, &bval); rval += (limit - rval) * del + 0.5; gval += (limit - gval) * del + 0.5; bval += (limit - bval) * del + 0.5; composeRGBPixel(rval, gval, bval, line + j); } } } } return 0; } leptonica-1.86.0/src/bmf.c000066400000000000000000000662511506303110300152650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bmf.c *
 *
 *   Acquisition and generation of bitmap fonts.
 *
 *       L_BMF           *bmfCreate()
 *       L_BMF           *bmfDestroy()
 *
 *       PIX             *bmfGetPix()
 *       l_int32          bmfGetWidth()
 *       l_int32          bmfGetBaseline()
 *
 *       PIXA            *pixaGetFont()
 *       l_int32          pixaSaveFont()
 *       static PIXA     *pixaGenerateFontFromFile()
 *       static PIXA     *pixaGenerateFontFromString()
 *       static PIXA     *pixaGenerateFont()
 *       static l_int32   pixGetTextBaseline()
 *       static l_int32   bmfMakeAsciiTables()
 *
 *   This is not a very general utility, because it only uses bitmap
 *   representations of a single font, Palatino-Roman, with the
 *   normal style.  It uses bitmaps generated for nine sizes, from
 *   4 to 20 pts, rendered at 300 ppi.  Generalization to different
 *   fonts, styles and sizes is straightforward.
 *
 *   I chose Palatino-Roman is because I like it.
 *   The input font images were generated from a set of small
 *   PostScript files, such as chars-12.ps, which were rendered
 *   into the inputfont[] bitmap files using GhostScript.  See, for
 *   example, the bash script prog/ps2tiff, which will "rip" a
 *   PostScript file into a set of ccitt-g4 compressed tiff files.
 *
 *   The set of ascii characters from 32 through 126 are the 95
 *   printable ascii chars.  Palatino-Roman is missing char 92, '\'.
 *   I have substituted an LR flip of '/', char 47, for 92, so that
 *   there are no missing printable chars in this set.  The space is
 *   char 32, and I have given it a width equal to twice the width of '!'.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" #include "bmfdata.h" static const l_float32 VertFractSep = 0.3f; #ifndef NO_CONSOLE_IO #define DEBUG_BASELINE 0 #define DEBUG_CHARS 0 #define DEBUG_FONT_GEN 0 #endif /* ~NO_CONSOLE_IO */ static PIXA *pixaGenerateFontFromFile(const char *dir, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2); static PIXA *pixaGenerateFontFromString(l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2); static PIXA *pixaGenerateFont(PIX *pixs, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2); static l_int32 pixGetTextBaseline(PIX *pixs, l_int32 *tab8, l_int32 *py); static l_int32 bmfMakeAsciiTables(L_BMF *bmf); /*---------------------------------------------------------------------*/ /* Bmf create/destroy */ /*---------------------------------------------------------------------*/ /*! * \brief bmfCreate() * * \param[in] dir [optional] directory holding pixa of character set * \param[in] fontsize 4, 6, 8, ... , 20 * \return bmf holding the bitmap font and associated information * *
 * Notes:
 *      (1) If %dir == null, this generates the font bitmaps from a
 *          compiled string.
 *      (2) Otherwise, this tries to read a pre-computed pixa file with the
 *          95 ascii chars in it.  If the file is not found, it then
 *          attempts to generate the pixa and associated baseline
 *          data from a tiff image containing all the characters.  If
 *          that fails, it uses the compiled string.
 * 
*/ L_BMF * bmfCreate(const char *dir, l_int32 fontsize) { L_BMF *bmf; PIXA *pixa; if (fontsize < 4 || fontsize > 20 || (fontsize % 2)) return (L_BMF *)ERROR_PTR("fontsize must be in {4, 6, ..., 20}", __func__, NULL); bmf = (L_BMF *)LEPT_CALLOC(1, sizeof(L_BMF)); if (!dir) { /* Generate from a string */ pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); } else { /* Look for the pixa in a directory */ pixa = pixaGetFont(dir, fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { /* Not found; make it from a file */ L_INFO("Generating pixa of bitmap fonts from file\n", __func__); pixa = pixaGenerateFontFromFile(dir, fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { /* Not made; make it from a string after all */ L_ERROR("Failed to make font; use string\n", __func__); pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); } } } if (!pixa) { bmfDestroy(&bmf); return (L_BMF *)ERROR_PTR("font pixa not made", __func__, NULL); } bmf->pixa = pixa; bmf->size = fontsize; if (dir) bmf->directory = stringNew(dir); bmfMakeAsciiTables(bmf); return bmf; } /*! * \brief bmfDestroy() * * \param[in,out] pbmf will be set to null before returning * \return void */ void bmfDestroy(L_BMF **pbmf) { L_BMF *bmf; if (pbmf == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((bmf = *pbmf) == NULL) return; pixaDestroy(&bmf->pixa); LEPT_FREE(bmf->directory); LEPT_FREE(bmf->fonttab); LEPT_FREE(bmf->baselinetab); LEPT_FREE(bmf); *pbmf = NULL; } /*---------------------------------------------------------------------*/ /* Bmf accessors */ /*---------------------------------------------------------------------*/ /*! * \brief bmfGetPix() * * \param[in] bmf * \param[in] chr should be one of the 95 supported printable bitmaps * \return pix clone of pix in bmf, or NULL on error */ PIX * bmfGetPix(L_BMF *bmf, char chr) { l_int32 i, index; PIXA *pixa; if ((index = (l_int32)chr) == 10) /* NL */ return NULL; if (!bmf) return (PIX *)ERROR_PTR("bmf not defined", __func__, NULL); if (index < 32 || index >= 127) return (PIX *)ERROR_PTR("invalid index", __func__, NULL); i = bmf->fonttab[index]; if (i == UNDEF) { L_ERROR("no bitmap representation for %d\n", __func__, index); return NULL; } if ((pixa = bmf->pixa) == NULL) return (PIX *)ERROR_PTR("pixa not found", __func__, NULL); return pixaGetPix(pixa, i, L_CLONE); } /*! * \brief bmfGetWidth() * * \param[in] bmf * \param[in] chr should be one of the 95 supported bitmaps * \param[out] pw character width; -1 if not printable * \return 0 if OK, 1 on error */ l_ok bmfGetWidth(L_BMF *bmf, char chr, l_int32 *pw) { l_int32 i, index; PIXA *pixa; if (!pw) return ERROR_INT("&w not defined", __func__, 1); *pw = -1; if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); if ((index = (l_int32)chr) == 10) /* NL */ return 0; if (index < 32 || index >= 127) return ERROR_INT("invalid index", __func__, 1); i = bmf->fonttab[index]; if (i == UNDEF) { L_ERROR("no bitmap representation for %d\n", __func__, index); return 1; } if ((pixa = bmf->pixa) == NULL) return ERROR_INT("pixa not found", __func__, 1); return pixaGetPixDimensions(pixa, i, pw, NULL, NULL); } /*! * \brief bmfGetBaseline() * * \param[in] bmf * \param[in] chr should be one of the 95 supported bitmaps * \param[out] pbaseline distance below UL corner of bitmap char * \return 0 if OK, 1 on error */ l_ok bmfGetBaseline(L_BMF *bmf, char chr, l_int32 *pbaseline) { l_int32 bl, index; if (!pbaseline) return ERROR_INT("&baseline not defined", __func__, 1); *pbaseline = 0; if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); if ((index = (l_int32)chr) == 10) /* NL */ return 0; if (index < 32 || index >= 127) return ERROR_INT("invalid index", __func__, 1); bl = bmf->baselinetab[index]; if (bl == UNDEF) { L_ERROR("no bitmap representation for %d\n", __func__, index); return 1; } *pbaseline = bl; return 0; } /*---------------------------------------------------------------------*/ /* Font bitmap acquisition and generation */ /*---------------------------------------------------------------------*/ /*! * \brief pixaGetFont() * * \param[in] dir directory holding pixa of character set * \param[in] fontsize 4, 6, 8, ... , 20 * \param[out] pbl0 baseline of row 1 * \param[out] pbl1 baseline of row 2 * \param[out] pbl2 baseline of row 3 * \return pixa of font bitmaps for 95 characters, or NULL on error * *
 * Notes:
 *      (1) This reads a pre-computed pixa file with the 95 ascii chars.
 * 
*/ PIXA * pixaGetFont(const char *dir, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { char *pathname; l_int32 fileno; PIXA *pixa; fileno = (fontsize / 2) - 2; if (fileno < 0 || fileno >= NUM_FONTS) return (PIXA *)ERROR_PTR("font size invalid", __func__, NULL); if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", __func__, NULL); *pbl0 = baselines[fileno][0]; *pbl1 = baselines[fileno][1]; *pbl2 = baselines[fileno][2]; pathname = pathJoin(dir, outputfonts[fileno]); pixa = pixaRead(pathname); LEPT_FREE(pathname); if (!pixa) L_WARNING("pixa of char bitmaps not found\n", __func__); return pixa; } /*! * \brief pixaSaveFont() * * \param[in] indir [optional] directory holding image of character set * \param[in] outdir directory into which the output pixa file * will be written * \param[in] fontsize in pts, at 300 ppi * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This saves a font of a particular size.
 *      (2) If %indir == null, this generates the font bitmaps from a
 *          compiled string.
 *      (3) prog/genfonts calls this function for each of the
 *          nine font sizes, to generate all the font pixa files.
 * 
*/ l_ok pixaSaveFont(const char *indir, const char *outdir, l_int32 fontsize) { char *pathname; l_int32 bl1, bl2, bl3; PIXA *pixa; if (fontsize < 4 || fontsize > 20 || (fontsize % 2)) return ERROR_INT("fontsize must be in {4, 6, ..., 20}", __func__, 1); if (!indir) /* Generate from a string */ pixa = pixaGenerateFontFromString(fontsize, &bl1, &bl2, &bl3); else /* Generate from an image file */ pixa = pixaGenerateFontFromFile(indir, fontsize, &bl1, &bl2, &bl3); if (!pixa) return ERROR_INT("pixa not made", __func__, 1); pathname = pathJoin(outdir, outputfonts[(fontsize - 4) / 2]); pixaWrite(pathname, pixa); #if DEBUG_FONT_GEN L_INFO("Found %d chars in font size %d\n", __func__, pixaGetCount(pixa), fontsize); L_INFO("Baselines are at: %d, %d, %d\n", __func__, bl1, bl2, bl3); #endif /* DEBUG_FONT_GEN */ LEPT_FREE(pathname); pixaDestroy(&pixa); return 0; } /*! * \brief pixaGenerateFontFromFile() * * \param[in] dir directory holding image of character set * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi * \param[out] pbl0 baseline of row 1 * \param[out] pbl1 baseline of row 2 * \param[out] pbl2 baseline of row 3 * \return pixa of font bitmaps for 95 characters, or NULL on error * * These font generation functions use 9 sets, each with bitmaps * of 94 ascii characters, all in Palatino-Roman font. * Each input bitmap has 3 rows of characters. The range of * ascii values in each row is as follows: * row 0: 32-57 32 is a space * row 1: 58-91 92, '\', is not represented in this font * row 2: 93-126 * We LR flip the '/' char to generate a bitmap for the missing * '\' character, so that we have representations of all 95 * printable chars. * * Typically, use pixaGetFont() to generate the character bitmaps * in memory for a bmf. This will simply access the bitmap files * in a serialized pixa that were produced in prog/genfonts.c using * this function. */ static PIXA * pixaGenerateFontFromFile(const char *dir, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { char *pathname; l_int32 fileno; PIX *pix; PIXA *pixa; if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", __func__, NULL); *pbl0 = *pbl1 = *pbl2 = 0; if (!dir) return (PIXA *)ERROR_PTR("dir not defined", __func__, NULL); fileno = (fontsize / 2) - 2; if (fileno < 0 || fileno >= NUM_FONTS) return (PIXA *)ERROR_PTR("font size invalid", __func__, NULL); pathname = pathJoin(dir, inputfonts[fileno]); pix = pixRead(pathname); LEPT_FREE(pathname); if (!pix) { L_ERROR("pix not found for font size %d\n", __func__, fontsize); return NULL; } pixa = pixaGenerateFont(pix, fontsize, pbl0, pbl1, pbl2); pixDestroy(&pix); return pixa; } /*! * \brief pixaGenerateFontFromString() * * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi * \param[out] pbl0 baseline of row 1 * \param[out] pbl1 baseline of row 2 * \param[out] pbl2 baseline of row 3 * \return pixa of font bitmaps for 95 characters, or NULL on error * *
 * Notes:
 *      (1) See pixaGenerateFontFromFile() for details.
 * 
*/ static PIXA * pixaGenerateFontFromString(l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { l_uint8 *data; l_int32 redsize, nbytes; PIX *pix; PIXA *pixa; if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", __func__, NULL); *pbl0 = *pbl1 = *pbl2 = 0; redsize = (fontsize / 2) - 2; if (redsize < 0 || redsize >= NUM_FONTS) return (PIXA *)ERROR_PTR("invalid font size", __func__, NULL); if (fontsize == 4) { data = decodeBase64(fontdata_4, strlen(fontdata_4), &nbytes); } else if (fontsize == 6) { data = decodeBase64(fontdata_6, strlen(fontdata_6), &nbytes); } else if (fontsize == 8) { data = decodeBase64(fontdata_8, strlen(fontdata_8), &nbytes); } else if (fontsize == 10) { data = decodeBase64(fontdata_10, strlen(fontdata_10), &nbytes); } else if (fontsize == 12) { data = decodeBase64(fontdata_12, strlen(fontdata_12), &nbytes); } else if (fontsize == 14) { data = decodeBase64(fontdata_14, strlen(fontdata_14), &nbytes); } else if (fontsize == 16) { data = decodeBase64(fontdata_16, strlen(fontdata_16), &nbytes); } else if (fontsize == 18) { data = decodeBase64(fontdata_18, strlen(fontdata_18), &nbytes); } else { /* fontsize == 20 */ data = decodeBase64(fontdata_20, strlen(fontdata_20), &nbytes); } if (!data) return (PIXA *)ERROR_PTR("data not made", __func__, NULL); pix = pixReadMem(data, nbytes); LEPT_FREE(data); if (!pix) return (PIXA *)ERROR_PTR("pix not made", __func__, NULL); pixa = pixaGenerateFont(pix, fontsize, pbl0, pbl1, pbl2); pixDestroy(&pix); return pixa; } /*! * \brief pixaGenerateFont() * * \param[in] pixs of 95 characters in 3 rows * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi * \param[out] pbl0 baseline of row 1 * \param[out] pbl1 baseline of row 2 * \param[out] pbl2 baseline of row 3 * \return pixa of font bitmaps for 95 characters, or NULL on error * *
 * Notes:
 *      (1) This does all the work.  See pixaGenerateFontFromFile()
 *          for an overview.
 *      (2) The pix is for one of the 9 fonts.  %fontsize is only
 *          used here for debugging.
 * 
*/ static PIXA * pixaGenerateFont(PIX *pixs, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { l_int32 i, j, nrows, nrowchars, nchars, h, yval; l_int32 width, height; l_int32 baseline[3]; l_int32 *tab = NULL; BOX *box, *box1, *box2; BOXA *boxar, *boxac, *boxacs; PIX *pix1, *pix2, *pixr, *pixrc, *pixc; PIXA *pixa; l_int32 n, w, inrow, top; l_int32 *ia; NUMA *na; if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", __func__, NULL); *pbl0 = *pbl1 = *pbl2 = 0; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Locate the 3 rows of characters */ w = pixGetWidth(pixs); na = pixCountPixelsByRow(pixs, NULL); boxar = boxaCreate(0); n = numaGetCount(na); ia = numaGetIArray(na); inrow = 0; for (i = 0; i < n; i++) { if (!inrow && ia[i] > 0) { inrow = 1; top = i; } else if (inrow && ia[i] == 0) { inrow = 0; box = boxCreate(0, top, w, i - top); boxaAddBox(boxar, box, L_INSERT); } } LEPT_FREE(ia); numaDestroy(&na); nrows = boxaGetCount(boxar); #if DEBUG_FONT_GEN L_INFO("For fontsize %s, have %d rows\n", __func__, fontsize, nrows); #endif /* DEBUG_FONT_GEN */ if (nrows != 3) { L_INFO("nrows = %d; skipping fontsize %d\n", __func__, nrows, fontsize); boxaDestroy(&boxar); return (PIXA *)ERROR_PTR("3 rows not generated", __func__, NULL); } /* Grab the character images and baseline data */ #if DEBUG_BASELINE lept_rmdir("baseline"); lept_mkdir("baseline"); #endif /* DEBUG_BASELINE */ tab = makePixelSumTab8(); pixa = pixaCreate(95); for (i = 0; i < nrows; i++) { box = boxaGetBox(boxar, i, L_CLONE); pixr = pixClipRectangle(pixs, box, NULL); /* row of chars */ pixGetTextBaseline(pixr, tab, &yval); baseline[i] = yval; #if DEBUG_BASELINE L_INFO("Baseline info: row %d, yval = %d, h = %d\n", __func__, i, yval, pixGetHeight(pixr)); pix1 = pixCopy(NULL, pixr); pixRenderLine(pix1, 0, yval, pixGetWidth(pix1), yval, 1, L_FLIP_PIXELS); if (i == 0 ) pixWriteDebug("/tmp/baseline/row0.png", pix1, IFF_PNG); else if (i == 1) pixWriteDebug("/tmp/baseline/row1.png", pix1, IFF_PNG); else pixWriteDebug("/tmp/baseline/row2.png", pix1, IFF_PNG); pixDestroy(&pix1); #endif /* DEBUG_BASELINE */ boxDestroy(&box); pixrc = pixCloseSafeBrick(NULL, pixr, 1, 35); boxac = pixConnComp(pixrc, NULL, 8); boxacs = boxaSort(boxac, L_SORT_BY_X, L_SORT_INCREASING, NULL); if (i == 0) { /* consolidate the two components of '"' */ box1 = boxaGetBox(boxacs, 1, L_CLONE); box2 = boxaGetBox(boxacs, 2, L_CLONE); box1->w = box2->x + box2->w - box1->x; /* increase width */ boxDestroy(&box1); boxDestroy(&box2); boxaRemoveBox(boxacs, 2); } h = pixGetHeight(pixr); nrowchars = boxaGetCount(boxacs); for (j = 0; j < nrowchars; j++) { box = boxaGetBox(boxacs, j, L_COPY); if (box->w <= 2 && box->h == 1) { /* skip 1x1, 2x1 components */ boxDestroy(&box); continue; } box->y = 0; box->h = h - 1; pixc = pixClipRectangle(pixr, box, NULL); boxDestroy(&box); if (i == 0 && j == 0) /* add a pix for the space; change later */ pixaAddPix(pixa, pixc, L_COPY); if (i == 2 && j == 0) /* add a pix for the '\'; change later */ pixaAddPix(pixa, pixc, L_COPY); pixaAddPix(pixa, pixc, L_INSERT); } pixDestroy(&pixr); pixDestroy(&pixrc); boxaDestroy(&boxac); boxaDestroy(&boxacs); } LEPT_FREE(tab); nchars = pixaGetCount(pixa); if (nchars != 95) return (PIXA *)ERROR_PTR("95 chars not generated", __func__, NULL); *pbl0 = baseline[0]; *pbl1 = baseline[1]; *pbl2 = baseline[2]; /* Fix the space character up; it should have no ON pixels, * and be about twice as wide as the '!' character. */ pix1 = pixaGetPix(pixa, 0, L_CLONE); width = 2 * pixGetWidth(pix1); height = pixGetHeight(pix1); pixDestroy(&pix1); pix1 = pixCreate(width, height, 1); pixaReplacePix(pixa, 0, pix1, NULL); /* Fix up the '\' character; use a LR flip of the '/' char */ pix1 = pixaGetPix(pixa, 15, L_CLONE); pix2 = pixFlipLR(NULL, pix1); pixDestroy(&pix1); pixaReplacePix(pixa, 60, pix2, NULL); #if DEBUG_CHARS pix1 = pixaDisplayTiled(pixa, 1500, 0, 10); pixDisplay(pix1, 100 * i, 200); pixDestroy(&pix1); #endif /* DEBUG_CHARS */ boxaDestroy(&boxar); return pixa; } /*! * \brief pixGetTextBaseline() * * \param[in] pixs 1 bpp, one textline character set * \param[in] tab8 [optional] pixel sum table * \param[out] py baseline value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Method: find the largest difference in pixel sums from one
 *          raster line to the next one below it.  The baseline is the
 *          upper raster line for the pair of raster lines that
 *          maximizes this function.
 * 
*/ static l_int32 pixGetTextBaseline(PIX *pixs, l_int32 *tab8, l_int32 *py) { l_int32 i, h, val1, val2, diff, diffmax, ymax; l_int32 *tab; NUMA *na; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!py) return ERROR_INT("&y not defined", __func__, 1); *py = 0; if (!tab8) tab = makePixelSumTab8(); else tab = tab8; na = pixCountPixelsByRow(pixs, tab); h = numaGetCount(na); diffmax = 0; ymax = 0; for (i = 1; i < h; i++) { numaGetIValue(na, i - 1, &val1); numaGetIValue(na, i, &val2); diff = L_MAX(0, val1 - val2); if (diff > diffmax) { diffmax = diff; ymax = i - 1; /* upper raster line */ } } *py = ymax; if (!tab8) LEPT_FREE(tab); numaDestroy(&na); return 0; } /*! * \brief bmfMakeAsciiTables * * \param[in] bmf * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This makes two tables, each of size 128, as follows:
 *          ~ fonttab is a table containing the index of the Pix
 *            that corresponds to each input ascii character;
 *            it maps (ascii-index) --> Pixa index
 *          ~ baselinetab is a table containing the baseline offset
 *            for the Pix that corresponds to each input ascii character;
 *            it maps (ascii-index) --> baseline offset
 *     (2) This also computes
 *          ~ lineheight (sum of maximum character extensions above and
 *                        below the baseline)
 *          ~ kernwidth (spacing between characters within a word)
 *          ~ spacewidth (space between words)
 *          ~ vertlinesep (extra vertical spacing between textlines)
 *     (3) The baselines apply as follows:
 *          baseline1   (ascii 32 - 57), ascii 92
 *          baseline2   (ascii 58 - 91)
 *          baseline3   (ascii 93 - 126)
 *     (4) The only array in bmf that is not ascii-based is the
 *         array of bitmaps in the pixa, which starts at ascii 32.
 * 
*/ static l_int32 bmfMakeAsciiTables(L_BMF *bmf) { l_int32 i, maxh, height, charwidth, xwidth, kernwidth; l_int32 *fonttab, *baselinetab; PIX *pix; if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); /* First get the fonttab; we use this later for the char widths */ fonttab = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); bmf->fonttab = fonttab; for (i = 0; i < 128; i++) fonttab[i] = UNDEF; for (i = 32; i < 127; i++) fonttab[i] = i - 32; baselinetab = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); bmf->baselinetab = baselinetab; for (i = 0; i < 128; i++) baselinetab[i] = UNDEF; for (i = 32; i <= 57; i++) baselinetab[i] = bmf->baseline1; for (i = 58; i <= 91; i++) baselinetab[i] = bmf->baseline2; baselinetab[92] = bmf->baseline1; /* the '\' char */ for (i = 93; i < 127; i++) baselinetab[i] = bmf->baseline3; /* Get the line height of text characters, from the highest * ascender to the lowest descender; req's fonttab to exist. */ pix = bmfGetPix(bmf, 32); maxh = pixGetHeight(pix); pixDestroy(&pix); pix = bmfGetPix(bmf, 58); height = pixGetHeight(pix); pixDestroy(&pix); maxh = L_MAX(maxh, height); pix = bmfGetPix(bmf, 93); height = pixGetHeight(pix); pixDestroy(&pix); maxh = L_MAX(maxh, height); bmf->lineheight = maxh; /* Get the kern width (distance between characters). * We let it be the same for all characters in a given * font size, and scale it linearly with the size; * req's fonttab to be built first. */ bmfGetWidth(bmf, 120, &xwidth); kernwidth = (l_int32)(0.08 * (l_float32)xwidth + 0.5); bmf->kernwidth = L_MAX(1, kernwidth); /* Save the space width (between words) */ bmfGetWidth(bmf, 32, &charwidth); bmf->spacewidth = charwidth; /* Save the extra vertical space between lines */ bmf->vertlinesep = (l_int32)(VertFractSep * bmf->lineheight + 0.5); return 0; } leptonica-1.86.0/src/bmf.h000066400000000000000000000060361506303110300152650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_BMF_H #define LEPTONICA_BMF_H /*! * \file bmf.h * * Simple data structure to hold bitmap fonts and related data */ /*! Constants for deciding when text block is divided into paragraphs */ /*! Split Text */ enum { SPLIT_ON_LEADING_WHITE = 1, /*!< tab or space at beginning of line */ SPLIT_ON_BLANK_LINE = 2, /*!< newline with optional white space */ SPLIT_ON_BOTH = 3 /*!< leading white space or newline */ }; /*! Data structure to hold bitmap fonts and related data */ struct L_Bmf { struct Pixa *pixa; /*!< pixa of bitmaps for 93 characters */ l_int32 size; /*!< font size (in points at 300 ppi) */ char *directory; /*!< directory containing font bitmaps */ l_int32 baseline1; /*!< baseline offset for ascii 33 - 57 */ l_int32 baseline2; /*!< baseline offset for ascii 58 - 91 */ l_int32 baseline3; /*!< baseline offset for ascii 93 - 126 */ l_int32 lineheight; /*!< max height of line of chars */ l_int32 kernwidth; /*!< pixel dist between char bitmaps */ l_int32 spacewidth; /*!< pixel dist between word bitmaps */ l_int32 vertlinesep; /*!< extra vertical space between text lines */ l_int32 *fonttab; /*!< table mapping ascii --> font index */ l_int32 *baselinetab; /*!< table mapping ascii --> baseline offset */ }; typedef struct L_Bmf L_BMF; #endif /* LEPTONICA_BMF_H */ leptonica-1.86.0/src/bmfdata.h000066400000000000000000001335111506303110300161160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bmfdata.h * *
 *  This file contains data for constructing the bitmap fonts.
 *
 *  The fontdata string holds all 9 sets of bitmap fonts in a base64
 *  encoding of a pixacomp representation of the tiff compressed images.
 *  It was generated by prog/genfonts and pasted in.  This allows
 *  the use of the bitmap fonts for image labelling without accessing
 *  stored versions of either the tiff images for each set, or the pixa
 *  of the 95 printable character images that was derived from the tiff image.
 *
 *  In use, to get the bmf for a specific font size, from the encoded
 *  string in this file, call
 *      bmfCreate(NULL, fontsize);
 * 
*/ #ifndef LEPTONICA_BMFDATA_H #define LEPTONICA_BMFDATA_H #define NUM_FONTS 9 static const char *inputfonts[] = {"chars-4.tif", "chars-6.tif", "chars-8.tif", "chars-10.tif", "chars-12.tif", "chars-14.tif", "chars-16.tif", "chars-18.tif", "chars-20.tif"}; static const char *outputfonts[] = {"chars-4.pa", "chars-6.pa", "chars-8.pa", "chars-10.pa", "chars-12.pa", "chars-14.pa", "chars-16.pa", "chars-18.pa", "chars-20.pa"}; static const l_int32 baselines[NUM_FONTS][3] = {{11, 12, 12}, {18, 18, 18}, {24, 24, 24}, {30, 30, 30}, {36, 36, 36}, {42, 42, 42}, {48, 48, 48}, {54, 54, 54}, {60, 60, 60}}; static const char fontdata_4[] = "SUkqACYFAAAmoHICP///////////////////////kFcchgc45Bgc45AgcgxBY5DY5DY5Agcg" "jkM45A8GocgxBA8M45BfCGgchhzOQxZBiNe/CDQRT6RQ+k4QV6BHcgvBBjCC+KoSjQI7wjj/" "16I+EUPTpV0rI4LilVtAjjyPuR58jg3CRd6dJkcDMCj+v//qlVsMgQPVY6vugih9Lr/8RCF+" "OqUUK6C/fHFV9RStf8MulG10fKcN6X+lXOBg+GexX71wxSPCf4/+kE0uR5zE0rtfCFg3oIp0" "R+GF5DSmQaMS/oG1xen0X2wyh8WXwoI46VPt/kNYcf9J4h/pUHB///2H+t+lkCByDj/r9ZBX" "H1BAtUr7u/IEOQanrS0eByO16tpVaSWtaEVsNiG66WrBgg05wM4bCYNWDCWIiDCER6HGhERE" "RER3ZHBfXjaSQ7iOP/////////////////////////////////////////////////////+Q" "JgK95DIDRZAjCDccgRMhn4g5yC9CD0IL+QxhuIfCCYQTC4IJhBiyLBB7J4QX4gvQgxxBehBi" "yGDkPhdkEw1kPZY5cEHck5BIJOQc9aI+wjE7DL7RdsMu2GXoZehGDYaDCDQaDSCDQdIOGEEX" "bDLzCLthl5ojzkeL0NMJhNNbVoJ6kclXuggyOGfugnw3vugv/0u+9IN7pBvdJ//brT3VtdLy" "B4NxyGsOPRnv9R7xx3/9L+EU/3/f4jj/t+3TdDvkFZyC7hYdKkCCKHQI76SW/pD/6XCKdAin" "29L9L6/9eEUOrD0kv8IIMNKkq/j/zD5h+P4r//99LfBKcDR9utK62NLxEIIhnmGGlpek3Lz/" "jj5cv/ul7f+EvimH///0l6CENpfrHt/y9l7kr/4RT/f7f+PwRTkG7/tpav26XtrxoVI5/vSx" "xsP/7ful7fdd1tv/7FRoj//DLgQZgQCFhlYlfv1kx9//28mPx/7ruu3/t9K3pEh/IKzkF3DL" "g2BENDtBr9Jh4S12H/+3+17GwwltpbZBx0u0unr0v9IMjhrBYYpO0KZmDikMJsYTCDCeE2Gh" "p6DTdiEE2KCdo8GcNj3pJsJofjiIiIiIiIiI4iIiIiIhhCIiIiIiIr1SMwyQbOkEiGQCvd4i" "I//////////////////////////////////////////////////////+QVo7IEDkGwchpOQV" "nIa0ENKCGhyC7kHchocgZschnHIMPtKk7oIP7ulv6f9Yj5DIDaH/3gjjr///+rI4aiIEXngg" "RZBfCBEWQXsofKggu5DD5Y+Qw5UHghiCoIEYQw5VkCMIO5TkF7shhzOQxZ4IJZxy3IO5nIJZ" "4IP//1iiPOGd0R+iPQgR3TQIIXZ3/S7BBnezui87MOiPbKHRHqftNNXvTTUjy/9JkcFjTpOk" "9NsKmFTu+Etppw06VtMjhhO0OLCd3S+rSdIUvyDD+Iha8fQ//+K//3/+D/vbQRT7d9LsjhgI" "7nH8Ivf/lw0bS/4RT////7f//pfq+lhr6/v/Yf/t//3/+D/sO2NNhpfiP66Xat8L/2//3S0r" "XIMD/rvUEd9Isf/4Mp5wCDgYBlOzgO0fB3aem2mmnYTtipwCAZQ6DnAXDgynapwk20h/+IiI" "iIy9ERxEREREZHDLiIiIiIjjj6kNWdP//qP/pMjhq8bSXwojsGkEwmliIiP/////////////" "/////////////////////////wAQAQ4AAAEDAAEAAACSAwAAAQEDAAEAAAA2AgAAAgEDAAEA" "AAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAA" "FQEDAAEAAAABAAAAFgEDAAEAAAA2AgAAFwEEAAEAAAAeBQAAGgEFAAEAAADUBQAAGwEFAAEA" "AADcBQAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; static const char fontdata_6[] = "SUkqAMoGAAAmoHVf///////////////////////////////IZAUfsgeBdyGdyDjkMgI+QPKC" "GIO5AhzOgyGiCMcgYtUrIKHohowhschs4hnwgXcgRQhsgguQQXwhov6/QYQI7qgRUUk2QIfV" "F5hQmmugqCMTCBHj/9F8j9JuknWm7rSbCBFPLtou2sjhlBSOKkE3Qf3+kv9fpcMQaXY9PTwR" "T6WvpX/0v19aVbeQ0D6X7+v/X//QIQfj6xSS4QLS3xx69IVtL/EQy8CvbSqhq4I7//pJeVnT" "Dr/+Niloufj9fpJLxalYrDtdr2DGk/etf6CDrkduzQkw21/w2prRfYZcNbj1+kQMQuL03hF5" "sQRT+CEMMj7pAjuk/5DVDINfr+k9b06Stj+GXgW6pN9/kNsdL/XQg/+nSx/0v20vxSv0v/S3" "/yDA/19sV/6WkQ0D5DY/6+lkDyf/SX9h65BRBDTdJ/StLILuk2lWkl399U2kw0Thpa0r7S0U" "A7S20rSVtJL/iGrFMSPJv+qYoEaA+KBA4pikmKCWIiDVCINaQ0KiIiIiIoFhoRfSodbS1xbp" "Id0hx8f///////////////////////////////////////////////////IHMFnMgTA0hyGQ" "G45DLcg0jkQfyGQDNxBv5DLcg3QQ2EEHDIEaEHDIaDkMTJzIeZBJkEmTwh5kNmEPhB7ITCGi" "ZDOghsmQ0IIbJhHUEMzPAh8jYOeIuRsEZFHCZEHBDhdoww1DLm0bOGXGwZccGXHCMDgwQMED" "BAwQMEi4ZwQdAg2GEEbYYZc2EbYYZcwwjB5dmDgwQMIMJoNbQNqHuRxF6I7YQIN+6BBrDf+E" "E//pf3oEG9tAg3vC9//126bQWlXh0gyODd+l7fXwv/0u1gio0m90m916x9uu60nXXyB4G7kN" "tx6JwU9oEU/4944qP/pcEU8EU+37f7f4j/q6q2tpDXhYaShBBDer1XfJD5IdL/0vtf9L9L//" "ergin9JukvIHk5BiAggw+kn1fSr///9L3r2/fS30of9r1exWqXp4QQYaWl9XH/a2vH+l9/t/" "6X58mgN//r07dJe04QRDYGGGgvpVeXb/jj5gT8X7r7f+CX6CDD/bp6bXY/xEIIQw16Xq8N/y" "5ZcvT/Lp/de3/j+2QMd/r/p0l6CDdf0h73//ZF7/w37r99/fuD/vVq9SP3S9hpd+lLj/6444" "a/9v7r39L0tt/7Xq9b0vDDIbAwQQu2ElKHq/fr3f/2/dfb39/b/V6jjSb1Io/hhiEFbEECFK" "r/euRR+//28ivxXt913XZBcf/jaevr8geTkCHDDCCIF3bEk9XpN6X7f/7f7+xtpbaW+l2l9K" "3pfpqGGEErBhJfCTBk4wl+wf/7f9fsMJba7cMJbDSa9JvSX2sPCwxCQYQaFBikIQQwQMMYIG" "CBggeCBsNCgg3CBhBuGKBA2KBA24hAgbFdOlYIGh+NCIiIiIiIiI4iIiIhxEGCERERERER9L" "GHfVBF0Tgtg0dSBoDTYk+h40PiP/////////////////////////////////////////////" "//////5A887IHkOQbLIE8EFaCGvBBmsgosgaDcg3HIbHwaIbIvVVIZTkGHVUtv9IOHRHBU+D" "g5DJBx//QRTr69fr/+3X+I+v/pa//v/9N0Q2XnshsshsjIaMyGjMhlOQIHycZAhyDUOQy+IZ" "xzWQUWUOQYc7kGMyGdyTkH41kH4scnZB4JwQxhrIYp/64hF56DCLzBF4aLzQNF8+DyuCguuF" "Kw/ApXIvMFTCI7FhU0XmgYUL/ap0tow3/6TdN2XCTpB0rVJqJHmHD6BYbNhoDEjzSbDDLhJo" "NnHSdQ4cMJoMJQ0DpBphVC//x9v/ScMEkwqf9Lpp6dJum18cQwX3V9XXWv/pN9OkKX/9f6X1" "1/TpdX+6umrDdRSS2yBGFv4iQZu/9D//4r//f/58CP3XI/p7pL9F9peEYv/zAF8NL/hFP///" "/t/utrrutN6SQYr0F//7Ff+3////g3/11dJ+l+I/+ld7ey4KP+3//fpX5DOOD/3sb8j+6X/9" "en1+v/b//dLr//Vuo0rY0ib//aphKGYdtAinbLfROC//Yf/8NKGEmwvaUOwvtK3SX/7DPcUG" "NjhsUEHhBwwg8JuEGEGEHDCDhhiopiCKcIOKeJHTd8JNuh/+IiIiIsubERxEREREZcNKIiIi" "IiNDj+En/X/IbQdf/+Cj/9Npd6SXq3WLDSrwSEdigkEGCDrEREf/////////////////////" "///////4AIAIAA4AAAEDAAEAAABBBAAAAQEDAAEAAAA6AgAAAgEDAAEAAAABAAAAAwEDAAEA" "AAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAAFQEDAAEAAAABAAAA" "FgEDAAEAAAA6AgAAFwEEAAEAAADBBgAAGgEFAAEAAAB4BwAAGwEFAAEAAACABwAAHAEDAAEA" "AAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; static const char fontdata_8[] = "SUkqALIIAAAmoHcGf/////////////////////////////////kMgMsfUgeDaOQLjkHHIZAN" "T5A8K5AiDQQ0OW7kMqCEHIZthNJkcMwuGQG8g34gYcgo8go4hmwQIDIGIIL1EGOIKO1/wRmG" "cvBqEX3S3dBGJhUwmlQSpGINF2/9cIxkfa9U+k2Q2OlpNgqaNzWwgWk2k33Veluk2q6STadJ" "U2jHlzcJtZcGlS4RJOt9f9f9L62GMw+vC0np5HXS/0n/6Vf9dapwxpdj7rr6Wl/f//v9dJLa" "kG76X/XXpf//v/j62kl4I2i4ZVd8caX8UrS/xEgvV7aVMUP19f615+S7/6BmGXBh70tK21ev" "60lxefkmGla/8WxVZM9Y31/RDYOEl5uappMV/1sGKhNfYX/1EOuEHiR57DbXfUMOieIxwZgN" "vjpfrI7a9XQdJF9sSOv+QL+qLzSt//9IW6x6tUg21+Q2qpHnS3Tf5BtTkNSi/06710rYpeDM" "MuBi6pNq3+QZX6/S0J8DHdUn8f+v3S/Fb9L/63r8hnH9f26/rS0sgXj9fXpV+vuP9X9Igofy" "DD1el6WQPCR/pL+w7XIZUEGx660nS3V0vSrv/qm0m2UBr61T7S0dAd13XSTdBL+r0l6YYX+t" "JtK1hhK7CTDCSthJLpeIpIMUGJHaf9rYohsQsQiBhDEIMQtiECCxESCjKESKPdDQqIiIiIig" "sGhF1Wh16pfbSSrFtKh3odkcHWI/////////////////////////////////////////////" "////5A7AyfkDqG265DJBRxDKmQanIZWpDKDIOnIaBhB05BQGQwgkcgiCCIIIglxBEEG/kGPI" "J5DzIN6EG+pDKoQ2akDFCGBBBDkdCCUI5kE8iuRfIPxCwCZBHIYGMFhMI2w8M42COFBnCDIN" "7JWQz2SsEcKQzwDBENEENkENkQRDRANwQNgwQRthhnDYRthgzZhhGG5cjZQYIGXDOCBhNYYW" "k2rMBNcu2ECBhptBtAgdoGHQPQdFwTv+l6T4QIGG0Gwi4UOg2gg0777dNXg2gg9Qq+m0g37p" "eG/8Jf/pd96Cb7Sb9f//1pvbS0vV0rT9L3/0v/0vWCKjV91fdJ//dK/0n1Xx6eXX0vvHGv/0" "uXTkde9Jv0m//6+/T20rSevIZCggrxpErPFpX+O36j/6C/X2//7/Ecf95dUnSdIUvCsNLCCC" "I6vvpL+RR8ij//pe3++lfpev+2l1ffdJeQPCOQ0OEEw9Un6+q3/0v/S/S9v/S/q//tfYp1S9" "NMIIMNKkq1uwS////0vb/b9+t9KZg0fdL3Wm0v/CCDBpdfvF/wwsMLx/pfpff+Evz+ygMr9+" "ldPdJe00EEQbpww0tV0rmDf8cfNhfxD9/2/8/foEw//f/Y0vEQQQgw6+l3wb/mB5gfoP8wn9" "pe/+P4bBv90vfvS9Ag2l10lff++//7fv+3/3+Qau/vtK0kXTaX6bq9ePe9L/shZ/+39pfff/" "th/3S9/+vhhL/SkcJ//HHBr/2/f9v0vS23/vdL0m9LwwwgmRwb20R1SW/f/d//b+0vff2/b/" "3r70m9LwwyDdOEENsHpHH3+9LIUfv/9vIUff9vuvryGcf9dY2KX1IUfwYMQgnFik0r1b0v2/" "/2++K+9tLbXbuu+Oum9L8geEchogMMEEQzXbFBb9N6Wvf/7f7+xvX1t6+k0+k/X6ahhhAk2G" "kt6TZDj4S/b//b0v92GEttLb0tgwvTS3pL/QbQWGDBL7CQYMFTCVhbDBrffbaYW2r3YYSthh" "K7gwguKr0m9Jfaw8JoMQgQYIMIQgxCQhAhkHQGIRBhBI5BEZBhAYaGCB4IGQSmGIRBugMQiG" "hDDiiCg4YT+EoZDOhD8aERERERERERxERERDiIMIRERERERH1xb+qQfpJBF2UAZhn9EDUFTK" "B7xoQYSB7Qjj/////////////////////////////////////////////////kDxf7IHgQOQ" "VbIH1kCSyCrZA8cEMyCBqHcgYcgYfIHh7IF4TChVCkM1yGhwoVe+loHBwi8gdNMOHS2/tL6H" "/yGSCkP/6BFOvrtNeE//Sv9cR+v/p1////W6////p1zZkNnZAv2bCDcchsHyLGQ2DmwnZAuO" "bCBfiBcc3EGochoHNBAjsg3HIQcguOSHLHLHIJMm5LiC7kMocmOWOWOQXciv/62JDZPQZBv5" "DYhF5z4Zy8yr0yDGEGM1yDGJoMgxyYRiDIEYmQboIYxNF2HPg8lkaH6hMjhDjQ//p0Xb0XmE" "YmEYcJNhNJj0Xn+gtUXqL3ReaQbVF5ou1qk4TVQwgYQYWDCDoIMIMKXH/9bSbig6CDoIOlyO" "jAbFVthw+gsG4qwbbSsGKDYQQcMSPJRSBwd6dPbSfpL/6f6tdXqx1YVf6XTCevem168GYDR9" "fSutLS/9WxeuqrV/9/wl/7pXXXQ/91p7pXjSW5DRhFH+sLuor///6C//33X4P91bl1pjdJKt" "hovBr4iQPKn/x/X/F////7NAz/v0tavW9aYaXhG3/+YDM2l/zCf///+3+9e3TvSTeglDFegv" "//bS/9v//+vw3/q3Wt6pf0PpfV3+xX/t//3635DNv9utb0R9t1X4/+vreyOGZ/2//+uvyGx3" "/16elvVIjH//Xp3/X/2//3X3//WKjjSeNb/+10rtWyMfX/2//7q0rX6u1d2kraSr/3RdYaTD" "LdsIv2GvJAZ/+w//2GErCCbCLr2EoNiR161b0l/9g0HI6FBimKg2KCB2CBwwQPBA2wQMEDBA" "4MEDhhiFFBisETgwITTCg2vCTDaQ//ERERERZg2IjiIiIiIzAa8REREREccfwgg/9f6X+v+Q" "ZK///0x/+m0sF0q9W0sW6XyGSGkOkI7YSr4rYhAkEGCDrFhCI4//////////////////////" "///////////8AEAEDgAAAQMAAQAAAP8EAAABAQMAAQAAAFUCAAACAQMAAQAAAAEAAAADAQMA" "AQAAAAQAAAAGAQMAAQAAAAEAAAARAQQAAQAAAAgAAAASAQMAAQAAAAEAAAAVAQMAAQAAAAEA" "AAAWAQMAAQAAAFUCAAAXAQQAAQAAAKoIAAAaAQUAAQAAAGAJAAAbAQUAAQAAAGgJAAAcAQMA" "AQAAAAEAAAAoAQMAAQAAAAIAAAAAAAAAAADAEgAABAAAAMASAAAEAA=="; static const char fontdata_10[] = "SUkqAGwKAAAmoFQGz///////////////////////////5DIBocgZg0PkDwy3JvkFdyB4Qchl" "DkGB7yB5OnZBQ5J8hmckQ0rBNUyDSOkQWnIZXkMqZBrghs0INDkM/kdkDfsLqqhGYKDEHp0k" "G0HkFEwoQaaqCcWQzzCMMPXfwg0m0gi89KyCgekkYmCpppYQKgjc0m//0Yy8/16VtP0EGwqN" "to22ugtBBtJv2vpLdJtJJ1SbTpJKwjnoOgg2swGmFLgiStb3+lXf/69v1bYLpuuR1pLVX//X" "r/S60mwYorKXH/dfS69J/2vX/9UvYyGU699PXXpa/3//4+l1S2EcXqvXHX1qr/8RIMCP17SS" "pwggnqvj1XpClpf1+3SWlS2l/v6S+btbr/IKbknv62KH2Fel/VJeEGlTDS/1W9tJKiGL8f/1" "Sri83qxVr/sQ2K1JBpXel/RAuOFXm29On//YMUk/dhf+qEOuEHQtWG2v+w9GEwZuXj1/Uuw1" "6bnzaSDtF1/wbSI+Sdx/X9IQ6WPCb0YbYr38MvvCMTVv8gqlyGsR/pX/ukkHaS8gqiMOkk2l" "f/pfpOlvXSTYa/9/b2/yBO9f9cTQMzuu4/RBSgnHpJe2l+KX6Wv6ST1j//7f/2lpdf/pfkM8" "el+xVr0/pEMofIZV16+v//9tda/pdZAh1vS+sge4/0kv3fyGbBBVeutK126dLtJLuq+ttJuH" "+FTV/SOR19dJPSWqr6SX2gyx+ur7S0LbS20n/oJf8PS20mwjeNtf0noINYMJBBwwk2kk2kEF" "texFJBiExCYXXTWwwkCBrEIEDimGEErDCQILERBgsQwgafFRSDEIRDCEMIMUIYhQWQyAaHER" "bSrERER/0q90tfukqxbWh3odtLbSxH//////////////////////////////////////////" "////yBTDMpkFsFhyB4YOQyAboILYFByB4hyB4vkMgCIK4iOQsFWQ07IZxyBEeQyQ1PINNLIZ" "icEDIMeWcgoBkFy4IGQIIIoZByCDhkHIInkMEEDFCGyhBJkFzggyDcYCDINxgQMgwoIIGRDk" "EIIp0O0MhjrIPyZDCj0GCD4aOEHEN3CPDDaDTQaapp6bwjxByc2EeIOTmGEcbw1TTT7ppJ1U" "4B46aPGGmQabJeECIJZDPZEmDNhIM2JQIHBggwQMEDBAwSBAwQNo4DdkCHQIGyCiw2gQNkFF" "htBB5cZwWGCIMOGCBhBglBggdBA6U2Ca5c2EbDvwbSayCZh8Ogg+/6C329JvbSb3SD777/q3" "TdQq9INoIN/oL2/9J//S7W9IN9pBvv//tJ720m0tL/SbT3X2/9L/9L+XXSvdK90v//1p0nrS" "+npuXX0vb66X/9Ll0176b/b///eu++1/yGQxyBwOOk63+++ONV/6X8uu3r+l/iOP2t6uk9Cl" "4WHqR8e7r6SH/Uf/S+19v3/f/96dGF7q0kvCw0qCBAn6vpff//pe9e39/3pX/a9XTaTql5A9" "wQ2QEmHWgmKer6X8iPkR1/9L7X30vSS///991bpL1TCCDBpKv76Vb/9f+l719+/W+lD/erXW" "K0v7wggw0qS9K4YIL////QX3+3/pfpMoBq/a9XTTapfWCCIFy4MNL694g/44+P9fdL2/8Jfn" "mzoGZ96dX+6S92ggsMNLS9bmyD///i/v9v/P/6BMP+/r22KS8RCBCGGl+teDf84POD82DH79" "1//5HDL+Gw3+6/a/XhBBhpddK+/9PT//N7/r2/8b9yGpT/q1ek2l9BBuvS6vu9f+yDuRj/+3" "9r7ff/2D/2r16MLpfT9+kh7/X/xf/t+9e39fW2/71q2qV6XsML+qV//jjkCM/9h/a+36+u2/" "/9dU3peGDCCbdtalw/2/93/9v3r/f2/b/20r71frwwyGWXBBVbaL8JK/+l9//t/a+33X1//7" "G+levhh4QIXYqKNFX7fWQR9v/9vIO+9e3uu2ltkND/rHUaTekQw/hhiEE2IpK+l6///7elx+" "33X+313TXX6X5A9uQUQGGEEQa4tKr9vS/b//b/a9jbS20tvX16dJvS/TChgwgk2Gkr6TDILj" "4S/Yf/7f/+2ltpfdbaX6Tfr90GwgtsJd4JNhcEtLb//b/r3YaWw0tu0uDBJp9fSX/B4WGeNB" "NNCEGZkghCCGEGGZlCDCDCDwg2GhhN0GE3YYJBBsMEEEGw4YJBBsV00kw0Gh+1QeE0xCCDBB" "hBMQkCChBsQggwQYQeEG2FBA8IGCBuGIQQYYoINuIQINr8JWCBr4qIiDCERBhCIgygDw1IiI" "tCLhghBghEGEIMJrxER+hEaERDiIiPpaB/0g/SIGwCcdJFzOgGgr6jEGvGgamgH2EL4j////" "//////////////////////////////////////////+QP6EDob+QPBoHIElkDw9kCyyBJBA8" "F7INVkDYDEZDLjyGVCZBXmCqQZPIaUENEAoKlt5A8sTSfV00/S2/6BwdF3D+Dg//pr6Q/+QW" "wbj//MKvrtNeC/9JN1/iP//+vr//+k3////9r///+k9ZeECzPy+IZY5BuP5AuOXhHhDKHL4g" "tOXxBowscg3HLjIGByHHIG9CMci+Qzv/+3BEMyeEGQMUCGQLzyBimgwUgRmRewVNBgqDIZXg" "qYQsFTIEUyGzAUgucuippgmRLIOcuhDFX/pYhPTChGHCNzROBBuKAXpgoLoLBU0wVMIwwwVN" "Fzgqow2icEgoYIGCDBYMK0EGEDClxP/7YRtvl20YOgg6CDYVBNaMXfQXovNGK6MUIJt0XbCT" "WqCDhX336B6apJL/0ug3bpB0nSsGbDZZsNghBsHB9BYNhiE2GIQbSbBsNoJwYkergzYN4P1p" "9pXXX/q3vTaWrr6V1/pf9at02vTX/t7fTaT+l/9Y/rr0370/6XTT0/fr44/6WnuukKpdkFFk" "K/pN+9DWv//6C//S/rq/7+XVJum9Kt0DXxEF9V///9f/991+ZgY+6Tf8VrQSww0YwaXkDwOE" "f/H3X/H////sH/+k2k1dJN6SQYrwjj//Ng1dL/m0////9h/t1/tvpN6SQa9Av//ev/b////w" "3/rpN6ekrelQ+v//sMJf+3///X4N/3t+lt6X4+l6V33hiF/7f/9+t+D/ulr6L70q////+XBp" "/7f//XX5BQO/9/TdJNvpER//16d1fS/9v/919//1emONK71r//0rtb1/9h//3Wla/XrHWrxS" "S//YRdbpsijtourZFfT/9v/9+0E2vrZ3hourW0k26X/7aWgwgmGFYaVsMJJzWBDtPTYaaYTt" "O20oaTYRhUGnUUxV76V0kF/9ioOXQpigxUNiggbYQOGEDwg3CBggwg4MIHDYaCimIWEHDCCa" "ah9OrDeP/2ENBoNMIQwhbERxkcMgYqbQTCxDEJpoX8RocfxEREUYE4jiOIiIj/2En/r/IG5d" "J/1/////H69JtLIH9NJf3S6uq9ISh0CxdL8gt46iO2kl6FbYSCQIMIHWGISCTCbWIiI/////" "/////////////////////////wAQAQ4AAAEDAAEAAACoBQAAAQEDAAEAAABCAgAAAgEDAAEA" "AAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAA" "FQEDAAEAAAABAAAAFgEDAAEAAABCAgAAFwEEAAEAAABkCgAAGgEFAAEAAAAaCwAAGwEFAAEA" "AAAiCwAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; static const char fontdata_12[] = "SUkqAFAMAAAmoFsNP/////////////////////////////////kMgNpyBoLGQPBocjfIEkED" "wU3ILjrkDxwmnkGmKIa+ENfFshpj0Qy5kNIcg0UIHhxyCjCLhDSHIa9kG8yGZPCqpAvBK4YR" "oCU0km4PTChBkMqgJxhMhnCBBhB6u/QIoBubbpPSb0gjbYKmEH4S0bNo43/rhBpNqjHpKyBh" "/SDYVNNLCBUkG0EG//0Yi7fdJOqt3S02CzjaPNroLSdJv6qtLDS2qT1TaaVLo5UEDwQb5gGx" "TAYXdf/ql9PS+t3rVwurp0XXS6SdW+v9f9fpJwxRcUrj7/9JUv/7v1X/Wkl2DGv9aTpel16X" "v66/6/pbkMyK79/S+tf2///H6tJLbBHv6/4/66Vpf4iQYUfqulXhAioHSrx6S9If//9uq0kk" "tL/f0v9K0v/v62KHbq9f60vNNdhpX+QJ4JXe6pV7X1+qSXhB0kw0tf6Ye2l0RNFxb1/oEF8W" "pf0xC/14gwxCSTXv6/yBiiXON4Qattr/sGOmtcL/0oNeEDappMO1+thpIxyIRuOl+kjDdcJ4" "lzemwwjC/4byL6TbNgp//6ENpY3CDpBG5sV/qQaCEgjc0rfyDKTIbWiX6T+9WqCDbVbkGRRL" "t6Tav/1/pWl9PShsNL14dJK6b/1X9LXLHf1Scf//bVv8gtRVfpPEX71vXRAnslG6SX2l+K39" "a/qlrjX/+3/1paX/pb1+Qbj+l+2la/+lkM26/9L1T/+26/Sf1IZg9f6X//0l+xT1/6VrkNDp" "N0vSWQPOOvX+2/yGlBBkdetLr/WrVLTX+km0m2H+Cp1a6RB3b+0n1eku/9L+0DLHtLpNXrQu" "0t6tKrUJfXD0knpgwQt/+rSTW0EnYSbpW0kF/weEtsJMTcF/Tqw0iBepYYSIZurDCTDCSsMJ" "BLa1DEQkgxCYQa0taoMV8QriExVMQiCjsREGFiGEGm8aHaEQYQsIMIQwoWQyA2nER6pIRERH" "3Vf26pf0kq9v1xbSSHdKFtpDt11WI///////////////////////////////////////////" "/kC0GD5AzAxBA8DCCGQCoQQMw0yCB4EEEDwYoQyA1YNxDuQ8Hwg2YQ24vIZILHkNQ+QaS4IG" "QzqyGWkILkwQMhs1ITUg+pB9SD6kJQhjUhmHIGDkMUIZyAgyBgGEGQMBAgZDPQhaEEqIQggm" "hCoQ1QyBFqQX5MgwGQl1hBgg7hhHyBw/CPkD///vCPEHDCPEHDRxhx/r+CeE6i5wDwxTCPkG" "pDSmT9GwSQ0TIzkMuZF8homR+EcB2Q2eQI8g38g38g3+cBQfDUaPgoZDZYQIGGQMTJTCBAwy" "BiZKaBA+QI4hnsGfAgEDBWQe00CbWvRttGwR7CDYQQdhEE9hA0wgaQQdpppppBNPTtIINsIN" "oINsINpPLhDgmmnaaVyGzkgepgCPwg2EEGHe2k+GHvuk//pdrek3uk3uk//6/t02lSX7aTa+" "l4f/Sf/0v70m9tJvbX/967SbV60vS0nvdL2/9Kv/S9b0n9J//3+9td0m0tL90m5dfX2/9L/9" "Ll0+XT9vfb3Sr/3S/ur9J8erX9L7xxX/9L+XXb1/X/f6/+6dJ0q/IZAdyBY+pCQ9X+O/0P/o" "L7X36v6v8Rx+/RhVbW0hS8LD6BBny1fpL/X/0vevb1f1f/90r/un0vCw0lRyddXr9//+l9r9" "/f96V/3ule6TaSXkDzggogJMHVIJjdX6/yFfIV//0vf9vS9JL//dL3Suuv00wggw1Vf7wku/" "+l/6X2l7f//pQ//691bVL1sEEGGlpVpeEFX///6Xv+/vpb6TB/36t7FaSX+EEDDqkv3iv//h" "hf0vtL2/9L8IKdQ0/uk39U3SXvhBEMomGGgv+rg/44+P9ff+/8JfnOynBp/f1q+qXtMIIFhh" "paXq84Qf//8X9pe3/nP/BBv961b7Yr8RCCww0vSXvITv58efH5wNH79/2/9hfuG/9ev3S8II" "QwaX9Je3/CDwg//zif2l7/4/tkNQP9vbXpPS8IINpdfvvf///7fv+339/kNqf+l7a20l8IN1" "fpJX36/9kGCP/Df6Xt//7Yf+/r0Y//v+lx7/X/3/7f3/fpeltv+9at0lel8MEt/ST9/33chs" "//2/evb39/b/9f1pvS8MMIJvbRHWpgMfv8cbD/+39r79/f7/t02l6vpeGGQaSYQT3YXX/9L/" "/9v3r2/r62//X29K9Lww8IIXYrCR4Sv2/9v/9h5Bgftfb3XbXbINx/1/rpX8gw/hg8IKwwmI" "S76V6WQXf//29divvuvrbuu9uo46vS/DDEIJsWkkr9vS12//2//29tLbrtV+o3dJvS/IHnBA" "vYMMEEQ04bFLfpvS62//2/39jettLfrdWqpX0v0woYYQSbaS3pNkM4+l+3/+3/Xu2l2lt69p" "fpXr+tBhhArbCVPhJhhcJft//t67+7DS20tu62GvT030v+G0FsMJLagkygWmRaYLsNdf21BV" "q12GEsMMJd2EtgwSafX0gv9B4WGfMIEUAgNCgxSEIhlkyC+oZoOQY0IXQhjXIZ9GDQyGEOCI" "YYKAIsGCRAvoydogX0YcGEiGXoxX0CTBkC+iH7Sh4TQYhJqgQYSBLhiCu/t1vTtwxCsMQrbY" "hWwunSbv8aERDCERBghEQZIA8GWIiNCLhghBghEGCEGF+IiP0IjQiJA8C+CIiK64QP6pB+kk" "gf+i4zUBoDN0iBKb0INfCigak4HhI0QMw1IvYQjj////////////////////////////////" "////////////kD9BA6hrjkM2CGYP5DIDUggeBiyB9hBYsgeGVBDVggbQ2ZiVHkGiCB4rkDfy" "B4bJqQN5kNdyCiCBEyDVNBbeQPHyqqqqaf/e6aRBYsgeBfEXcgUYnZDRZDUtLb/90hf//9NL" "1/8gtgsP/8xtfS2mvBf/X/8R//6ptfX+v/Xr///+m1////V////9K0iGb/kMz8g0fkD4fyB4" "ZxyG3MhmjkDwUp5DMHIYHIHgTj//uwQTycyDTMhl0wnhPLmQy4BcheyBeC5kfgpcwQYKXMg1" "0M5DZBPAg8FBSBBBM5DCCK5EoQx5C4QcgmcguI/9KxT0wQYQ0bmiQGgwyGBFMhsmQInpZDPN" "NBkNk00cYZAiaDCGQXmFRttEgHkWbuune7//7hGDeEGEbOEbOEEGwqQfT10C9NNU0EG1QYRs" "uqQcL4YIGCBgkyFsG0CDBAwUwFX/pXQfRt0EGggg6V6TWjDZBRZDZmlkFFow2jDkFGIw2k5D" "RiMG0EGiGy1p1Bwd6fp0n6S/+n24hBtXSDpNgzYF84CgQg3voLiEGIQbYhBtJtiEDaTxLuuQ" "0W76991paX/rdPCdLp/0un/S6rp+6dLhP//WtNq36//TY+366X71/pdNPWr02vjtft72rpdV" "SXZAxhBx/X66f9v/f8Jf+9X/1Y/62i602lqKXug0/pv9RS1///QX/6/pfD/br3WKbpJBbaDS" "8RIHgYPv/DC//+v//7/ygDH/dbprVIJYbRuBhLwRmv/x9pf8X//v/7B/6V17vShh4QVBj8I8" "f/4L6/5tP////Yf7fq2vfTeqQa9Av/5wNS2l/7f///+G/9J66vVK9KgYXpf/+w0v/b///r8G" "/2+9+26Sf8fX6u/2K/9v/+/W/Iav/6WlaSL71S/H69f7wwv/b//66/D///pb0v//16vouGp/" "2//3X/yGU7+rdOrGrd9EKP/+vttr6/+3//daTf/36xVJNukkv/66Xe3pf+3///Wv16sfpXGl" "//aLraTbYRhYZCPp/+3/+2laTYX1u0XWmnV9L/+wl3CbIjsMJbDCXIwG//Yf/7aVoKGEbXus" "zthLfqm2kl/9iFMwXBhJhhJiFMwzjIMEWQYRBkMEZBghhkEIIYIMRMwwDg2GlDCTELIMaQwS" "ioqZgY7glB6H/7XL4pimlYVtp3fbV3dp2xCimF6EJ2uq92v/2hoMIMINCGEIbERxDBCIiIhh" "TeEGsQwmgwhd6EccfsREREIwE4jiOIiIjX+Egf//1f9f8gVq6/6////S1H0vSb8gfo0v90vu" "v0m4WLrXkFsGsdRHtJL7S2GCCr4rDFEDwUYQyQ0yCCqGlhgqXaxERH//////////////////" "/////////////////////4AIAIAOAAABAwABAAAAYwYAAAEBAwABAAAAeAIAAAIBAwABAAAA" "AQAAAAMBAwABAAAABAAAAAYBAwABAAAAAQAAABEBBAABAAAACAAAABIBAwABAAAAAQAAABUB" "AwABAAAAAQAAABYBAwABAAAAeAIAABcBBAABAAAASAwAABoBBQABAAAA/gwAABsBBQABAAAA" "Bg0AABwBAwABAAAAAQAAACgBAwABAAAAAgAAAAAAAAAAAMASAAAEAAAAwBIAAAQA"; static const char fontdata_14[] = "SUkqAKINAAAmoCAz/////////////////////////yGQBw/kMgGYcgw5DJBpvIHg1wR3kCuC" "B4NFhbrIHiwnZAxZFjIafUQ2+BJJshrRkGnyGtBBqmQ05kNqyBcQQ1YINyZBRMhpfhf1CMwz" "S5hqg9W4aggwoIGCDCWC4QYIPXrwR1BQm6Wkm6pGzYKmn2EFQRsgwjhB/9UjeXg0m1RifVkM" "t1VBNhUGE1pAtBBtBN//hBYdboJOkk2nVJNgj3R4s8b8JUk6TftfpYfdafV09VbQXCDcEHWX" "BWCmAIraTf/9eldL0ld1VcLp6bRddKkqff91Vf9fXbDeqtwum0v9L11v/+v+uqSwxR+rx/3S" "9LS+vfqtf9da7DHr+/pel/79f1/9dKr5Boha9Lr/9L1/a/8fXSqsI/ev/HS9Kkrrv/IZ0n9V" "aSXYIEU467ePX6j2v+I/tqulSulfX+qX0ldf/e9U6Q9wr1X6pfJ+u2l/kFqyO/tJYr2vr/qv" "BA9JhpX/XeG0qqtq9f1SS9NIl3DS1/pg8MQlyJWuP/9JfF4QaTFN//EMaVd36/SIZrhNLnCe" "EGob1/2U4bUJ/cLX/iDXQQb06Ydr0uw6RvZCaePX6V106EwdK2GF38NqQnJOzgE/1/SkcbS2" "nhBtQjc2JfX6kGrSgjDDW3/r+hDfi3CekEG2v62XmoQTdN/kDgCIKtS/pOl+2qQba/IHCTD0" "rat//X6Ta/XSuGEl/htaur/0v9et91SbH/+l1evIH0a/pOhJAaf0t/ogtWRY3Wm9v/GutLX/" "S0sdfpfbS/X9L/0t/r9L9v/pv63r19L8gXH//tL9ddKiDVn9fX19JfbFPXXWkQan+npekv//" "99df0tLIbHW+vXIHjj11S6bf8hrWQJHp/Sb/rVfS01/rddu/BUH2lpaW2k9JNpJa63pJX3D6" "6TX9IoZddrf+gvrvS3psIMk7/9N1odpbpOkraQS/70km0mGEcxWvWrpJqwwknDCCbSStJL+o" "PCW2EmKDXWtUwwkQy06xCINQyKYaWGGEECC2vDEQkgxBMINN/TSsV9bCYhJMUCBYiJBppiGC" "DC0hxoMIRBghYIMIQwULIZAHDiIvpKIiIj91X7qtfdUvuklXtrS4t0o+lC20h263SxH/////" "////////////////////////////////////yBlyPyBmCy5A8NUMhkrQgaA6CB4NKCB4ZhyG" "QBxZCDkHcg8EUcg3cgr35BbB5kGw6kNRQQ1QZAgwQaBogwBkGgGQ0VkPWQxWQxWQxWQShBes" "g0oINBBDCCDcMhmJyGWrIaichmKwQMhoEyD1kEDIPUQQiPjIMTIaOIL0IKMIEDc8B4WCBggd" "sMIMMgYZkOCDDQYQaDCDShoNwg7QQMMGEDYYQeGE0GEGg0mGk1uutMIPBnthGYRAzwIGQaMO" "nIKMPWEZhiQL8DBEMrgYIhldOBlngbcEDZDKgIzEYM8EYRmIyGbhCURwJwZ4C5gFAIGEGCwY" "QNoEHSr7CMxA03ISYQIgxjkGJ5BiMgvCBB6apqkqtK9AgYbg2gQMPBsIINTAU8FT70/T0G1m" "A2L5gbRwF34dBB8N/4QT/+gv70E3toJveuv/XT20m6pfSDhBBhp7aT4b/pBV/6Xa3oIN7oIN" "7aT/+3X7aTpaX02k/ul7f+k//pf+k/aT+v1/+qT1daX/TaML6Xt/6X/6XMJowswnre63vX/7" "ave2rpaXi6Tffpff///hL/9vSb9Jv1//6/0m168hkA3H0np/r3xxS//S9tL2/f9/xHH/tGF2" "6ehXwpA/foh7bW/Ue/Uf/S//b0r9K//20vtK0rSS8LDpIEzZ19Vv9f+l9pf+/7//+9e6vpeF" "hrhHmR/at6r/r/6Xv+3r9L9X+2lq3t1aSXkDyggYgJMHSSCjf+vvIO+Qd//0v0vb6/q9f/79" "LSbSr00wggw10mtJ9Kt/+v/QXt/t/ev6V//pPtpevqmEEGGlr/eEl//X/0v0vb1fpX6Yf7aT" "98baSX3ggQYaSSXpPhAv///9L2/2/9L8JSQCr/+vadJL/CCDDS6r7j//+P9L9L//S/CTNYa/" "3S1dJq+vpoIIg0AQYaWv1yXDZ+OP/0/b/b/wl+ZDIgNP999+6S+00EFhh116vOCB///xf6Xt" "/5Z/4Jh//pe3el4iEFhhpaql3g3//OAX/ft/t/8L9wb/bSferYpLwghBg0F9aT7f84D5wH//" "Ob/S9v/H9shr1f/1arpeEEGGvX97f1///t+3///7kFU/7pWr6MJtV4QINpeqST7////7f6Xt" "9/f2Df9//7r8IPX1xfd6/9kNGn/t+3+39fW2//ulaSTel9+36Xu//7//t/17e/v7b/tpe+k3" "pfDBf1pf+scchld/7ftr7fr2u7//1ev14MMIJvdUpgGH96/b/+3//919d/71a9U3peGGEE7d" "yOqSX79e//7ftpe3v/7f/avuqV6+GDINYEEEO2EnCW39/9//t//t91t1t/09aV6vpeGHhArY" "qKLtL6fSyGd9//28hoftL2/X12yDd69bX/Sb0iGx/DDwQTYaYSW3rel/f/7f7/t7dbdf/f8b" "1V9fhhiEE2IpL9N6/t//hv+K9vbXtdv/V6qNX0vyB5QQy7DDCCINsWtPq3pft//sPXf/tLet" "vS26jd0r1/TBIGGEEm2l3pN6X7f/7f9extpbaW3a9r1Svpfrhgwgk20l9JhkNj4S12H/+3+/" "u2lsNL+uwk19N6S/dBhhBbDCVN4JMMJYIL9h//t6XXuw0ttLbhhLYYS/Svpf8PBYYMIJO0KY" "MFQhIUmwYVNNPTbQ03TTdhhBJsMJJtwwkmxVNOraaH9JB4TTFEFAZDGqCDEIIIg0AZBisMUQ" "z1kPWQxXkNlbBhSC+mQlRDGmGKIZVYZQwiGVWwcQiDTW0/QJQZDKrX2sPCaBgvRTg2BIhA0u" "GS4KP+/te4YLDEL2Fhr+n/xoREGCERIKgYiJBVDERxERxEODBCDBCIMEIMF04iI+oiNCIkDw" "1bEREfrCB/WEH60gf0qMMH6VIIGU4GoKfSIEsGKCDV9UQNA9IeNA1JAHnhD4j///////////" "//////////////////////////////+QPkEDMFW+yGQBPBA8NSAmQZ4IHhqQQ2oIEoDFkGuC" "GlHkDwN4ILMyB4NM1ILMyB4NMyGrNLYeQPF4g14kFC4UgqQQLwFCpbe9pEGbiB4NfIu5As5N" "Mg34hr9X+qu6Qd1t3Xb+0vUf//9G1/S+vIGYZj//tr67TXhf/S6/xH1//bX///9L/X///bX/" "//9Lr///9Jtf/////8l/kNTiHwg2f/+k3LhpGgZclMhqeQaJ5Bp/INU9BkGiCBeMgnZDLgIM" "IMhmwgyDXMg1QSmQ1KE3IF4JYQUHyGbBBdyBGhJBDXchrcQfCC4ZGggwE//xCDwgwQMIYIPJ" "OCD0wUF1yCj00wVMEDBUGEMFCgg8gY8h+8hjRSEQE1//9JsJ6YUKEcMMIYRsjqBFMhsOC6BY" "KmmQ0HTRsgwUINSDB1RgcI6BiCgz4OCBnwSDBBtAgz4OCmARf/thGxvTCOFCODoINhJJrRg3" "+gvRt0YN6MGwgg3phGxVqkGgvvvbh6dqkv/S6D6MDaCDoIHS9J9BByBjCDfNLIGJhtJyBfEE" "HSbIKMRgVoIHIKMVJ1IaMIJnTrTaTpaX/7e8Qm0mknSbIN8VnAMCn/S6YpuKem4hB0uJdpcg" "oz3+9tb//9Lq6DpaTr9XV/hBdV1avTaXQff+61S66pL/9t3r/6b1en/S6aenW/Xof/dW/bSd" "dL8gpD+lj7aTrr//+l//T02vVj/1ownTaV0KSW2QzMv6b/xr///0F//39ff9r1r060luEDXx" "ELuq///+l/+vv/B/vTa3TFeqWw0DS8hkBoI/+Gv1/xf/+/r7JAZn7+n2m6Sr0bMMJeQyAXmb" "P/j7X/v////Z1Av90v19UmHhBJBj8I8P/8iAMXr/nE////9h/3tpN03dJN/QYXoL/+cBs2l/" "7f///+G/3S/W3XfSSBr0vr/2GEv/b///r8H//W6+kr9ofS//9iF/7f///+Q16f39Poum3pfj" "6X93+GC/9v/+61vwf90m10lb1S//9L+9mA1v+3///X7/39N6T3SX//07r6X/t//v+/kMt3/d" "LX0rdVId//11u9vS/9v/+0tK//19jikm+q//16bbX1/9v/9/rX69YqnVtvS//tdL0XWyDj6/" "+3//aVpNr39our/XFJf/6L+GgmGQo7aW2vf/t//t1DSsIwvpWW8NL6pJt0l/9sJcMJMMKwwl" "sMLyXAv/2H/+2lDCCYaX2lFMVbTurdKl/7EKDiExTFScNAogRrDIMazQMHUGJAjVsg+pDGpt" "JOCHUQ0DQGEopiFkCKoYSdqThlfBKD0P/60Y07WGFt/+wuv9iFCDXxCaa3pqnf/8MIWgYQME" "DCEMEIcRHFghEREQwU5BBhYhhNBhDT4jQ4/iIiIhGw7xHEcRERH/0g/9f4Sf//yB+Bf+l/6X" "/9f/+ra+PVfXWCf/q2uC6r9NoLpuq9RHHS/IGeOltpV9rtpJehWwwSIHg08EDCDrDEKECDIM" "tVYYIfaxER/////////////////////////////+ACACAA4AAAEDAAEAAAATBwAAAQEDAAEA" "AABKAgAAAgEDAAEAAAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAA" "EgEDAAEAAAABAAAAFQEDAAEAAAABAAAAFgEDAAEAAABKAgAAFwEEAAEAAACZDQAAGgEFAAEA" "AABQDgAAGwEFAAEAAABYDgAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQA" "AADAEgAABAA="; static const char fontdata_16[] = "SUkqAHAPAAAmoCQP/////////////////////////////////IZJx0QyQzjkM45DJA3vIHhr" "2RbyB9BA8Gy00/IHg8XZDMsiXkGzqIK/Akk2Q2nSINUyG25DVoQ1aEGSCGUoINjkFEyGPIZU" "yGrPBVXqwQahNUm4PCBhQQYQMFwQcYIGED131IZoaNsOk6SbVII4bBQgwmlhAtHDDCOEH79Y" "QNINqnrZBoHrQQbCpp+EFSCDYQQb/1wjkXbSekbfSbT9JsFTR82uEFpOk3/+gsOtqk6STadJ" "LYR9Z4bhBv0FSTdX9fpYf6SeltP6cILhBtBOswCkpsNFdX666S+m1/p7pJbgtJ6bRddBVVNp" "X++v69LpK2G164XT1/pa/v79a/69dWGKJ2krY+3ul6XS6V/69f9a0uGP/rX/Wkv//9f9fSps" "Ol/vWl6Wv7/X//1pa6kGu9f/0vS69f+v8fW6S8Izf6/xr/1uu99yGga/qtaSbBH1HS28fS9I" "atf8R/dVdJLwlf/6S+q9f/fdVpD9PpL9VXkvqmGl//uqxCW2r//18EDVbSv8gerIl3tpVW7C" "vS/VKvQekw0tevb7SVrx//pBJcXRH9MNBf/yhQxCrIUZXf/0kvahA1Ypv/qIMMJQmv+l+pBp" "cIOueG8J0w9f1ZLgyJNVuC/9JCDXhB9NWG2v1sNQjnIWvx0v6uug3EwTSu19cMNIh/SsGcF/" "/6UuNpdaBB8I5hsMI2lv4N4QaTeP6X6iG1xbptJBBtiF/5DU1SCON07//9But61SDtfkFgal" "29INrf5BZEyDInS/S1/bpINtJf4dJK1b/0v9JuvrVXBhf+303Tf//6Wu+9U2P/ukv3X6pdaT" "oSGDZ9JXrogerIl79Orf5A8S6/0v/Wtev9Jb3S/FJ/S1/pXrH//2//v0t69fX/0v20v0tdKi" "Gl36/X0Qyn/+20nr+tIhpj/v16XS/SX8f6X9L5BQ9dL0lr//7Vr7+k2l6V9euQPDx/pJdNv+" "Q2o7rS62/VdUsJ//trbD/BSBPiWulf6T0k3SXfrpJdWw3rVPetIhiel3V/0gv+9LdWwgyKP/" "qlfobaW2k6STapa9XpJXTDCH/XulrDSuwk3S6QS3pYelthJibabS10m0kGsMIJOwk2ltpBBd" "LyjggkgxCaDX9PtpEMwGsUQ0xDEJsJJMNBBBbXgxFYYTCYT/tbFfC4TELDFEMueIiQa0JCGC" "Bq6FIUgwhEGCEMIMIQwUFkMk3ERdaxEREf60vbVL/qkvbSX9+ku7SS8W0qHekttIdtLbS3ax" "H//////////////////////////////////////8gMBZD1yBoDQ5A8GXQhkg31IGgFAZA8G0" "MgeGsQQyQ2oIG45AkvyC2GvMgqoTIa6QhtBCGgbINQqQYFCDWoIbBBBBBDAghgQQwIIOgguI" "INYZDTIIYIIGKgREA0EwDYRANBMBqgyGgoIYGEMVEHrIY0IYqyC+hAiZBvMhg5DL4gQLMzA8" "PBAyGsn4MIHIqGZoED//9bwQcGCDgwgf/64J9pcLCYQOyG0kBGgeQboIQgg1AZBQYCMweQLz" "IGJkMuZDLmQy5o+GWZgqOZgYZDNxHwoZBpORaI+FDINJyKdHhNENlCBjAZoBgEDNAzyGzNHA" "zuv7CNBA1Z8I0CB2CIMHZ4GEzwLwgQO00001CadJtoIIGHBA2EEDDYIG0EDzYc+HtNNU1dEC" "9EgdJmwUL5smEfBh24NhIO4N4fDoIP/6Xe+gg27aCDe2k01u+364eg3wkvQQbQQYfugnww9/" "Sa/9L1vSb20m90n//p/tJ0v+nQTa7aTW3/pP/6Xfek3uk3tpfX7/dNq3Wl+2kG79L2/9L/9L" "1vSb7Sb///tK1V6tJUvS0nRhd0vf/S//CXcwswnpPuk+6X///tpOlpfugm+/r2/9L/9LmFX3" "6b+m/3/9unutJv68dbS/X28cV//S+69vW/W/X//XRhdv0tfIZAaQ5A8Ufp9/r/6//QXuv30/" "q/4jj7/2raTdCl4WHpEH5tb6Ue/Uf/S+69vX+v/+6tf0nVLwsOlBM3dP9b/X/pe6+39/3//q" "9PTdWkl4WDWkeb/vSX/X/0vuvb1fpX0r/br79XqvIHhYIZdhWHWEE6TaT//kF3yC7//pe6+/" "XrX//rpatpWkvhNMIIMNUko/vS9v/r/0vuvv7670r/er3punVL7UEEGHXvpegq////S9/2//" "/ph/3ut+k3SX9hAgw0tKvfCS//r/6X2l7er6SvpQ/9enVjtKvXCCDDSSS9bhggX///+l7/t/" "6X4SZ1BW+3X/T6++EEQaBMMNL/p4h/668f6C+0vf/S/CTIgGz+ut01aSX00EFhg0tV+4P+OP" "/0/f+/8JfmIYP96un23SS9poILDDS6rSeeCB///xf6Xt/5ZH8Ew/73XXvS8RCCwYaX6XeDf/" "88GX+H7f7f+wX7hh/69XVsVXgghDDrX0vb/ngfPA//57f6+3/j+2Q2hH717+6+EEGGl0l77f" "++//7ft17f/+2QV9f7W19PS8IEGHX6S3v9b7//t/r//9bkFNH709NqjabSXwg2v/T93///+3" "7de33Xf2G/7/6S9L4Qer1SQvf1/7IN6v/b/X2//9sP+66V9N9fa79V+/X+9/+37de3v7+2//" "Xvrevwwv6pX/+OOQzJ/+3+vt+l6W//e2ukk+l4YMIJ7fVGwz/vX7D/+37df9/f2/7pdXpN6X" "hhhArfRdUqf36///b/X29//b/7/f768MMhqiYIJrbS0Et/f+//7ft17fpb1t/7paWqT6+GHh" "BC22lpU/vpff/7f6+339r/6X33SV6RBRHhh4QVsUxCJ2t9XrkG77f/7eQUPt17e9b1tkC8V/" "exv76VeDB4QThhMJa9W+v//9vX/77S7S2/73Sr0m9L8MMQgmxGlf70tdv/9v+K99v39vS3X9" "ikr6/IHhYINEBhhBEFS7S70m9L9v/9v9/b3S20v/umKrV9fwmChhggSbaVP03hLrv/9v+vY7" "S7S29L136b0v7UMMILYYSW9WGQLvpft//sPS3/bS20tu67S90r0l/oMMIJNtL8JMMJYS1ww/" "/2//3YaW2lt2lthWqpX0v1w2gsMMElbwSYMElIOfW2Gt3fbarbXuGwgrYaCu7CVsGEv0r6C+" "6QPC2DCSpoQgxoQkNWDCqq6txrppuwYSUMMElbgwknFe6tpof1h4TQYhEDGpBisIIMIIIg1C" "hBgQGIRDQIIIIIYEZBuIDBhSC9TRDjCD1OxCIZohiEQzRDBxCINYwNNNUCTBkMsQvtUHhNBh" "eiXBVClWGrwZCAX/7r/4YWGFuGFhhf1/44iIMEIiDOoZIaDUGQEQiIuIhwYISCmGIgwQhgvx" "ER9IRHERIHgrwIiI11hGgGwCzroO+qCB+loP9JGCNQGwGXpECYGYPSCBkuBsBt9Q0qBr0ooS" "GciHjQMJHQDx6IGobv8IRx///////////////////////////////////////yB49PIZIsED" "wZIIHgxxA8rIHgqWQVrIEsM2yGnZDUvyGQoIM8yB4KnhSB/MgeDZMhtTCWw8geCTIamBIFIH" "g2IUgzEEFeCGXAKC1t7rXrpp+v9WpA+4geCryMHIHvk0yBfiCp1b7ql6Q/+vf2vr///o4tel" "015AzBmj/6tf9prwv/q/64j4X/0rS//r/vf9f//0rX///+m////9df///6b////1dL///+rg" "iGpTIvkG2ZDS/IaX5DUpkpkNOCGXGQf8hmOR+QTyGnBKZDXoQ04I5kNqhJyGVBLiBc+QanIZ" "4IZ4ISCOCOCDa5BUwgvxBeCJBFciuQz8Qxf/q4gg8EDBAwgeCB4IPCBgoLrkC/BBhBgoQMED" "BQgYIGFBQoI1gokMzgWOMg9VkKGQwdY44//qwnphQhhHDDR1BQbJnnpkFCCGdGlkM6EGgyDc" "hMI4QZBuhNDIEIVGx0ageQqAZoGAQMEoMJuCDBBhL/6unphHChGxwgg2FCCY9P9AvCp6aCDe" "gwjg1qEg0F9pphbCB0mg1MBhf/Vo2K9GyYQQcIIHScKrWjZMgY8go/QWQUejhsI4bIGPRsmk" "2QL+jZNAg5BR/ThSBHkMe9PbtpPX/+r0H0EG0g6TpXLx4MtPEJ3fS2IJiE7EJ0m3QINhIO6p" "Pu/6039aX/pXvEJtLSDpNj8+GWn/S6aenVuKDpcS5pXIF+9tJu1dJ1pL/6em6etf9J6b/QXT" "TdNpPTa9P//61aXWl/63/q6Wl/1/pdV19/XQ//dft039Vv9Nj03/7evv+l7vuk9Nr9j+6ujC" "aTpaQqvZBp4gQ/q/6Qpa///hL///S6v/q/7SvSrcINP6t9////9Bf/97/3+2vTdN06SSWw0D" "S8RIHgrU9f///0v/1//ZQDX/3XVj9IILDDQa+QyAatP15OJ+v+L//39fmoMz91dfTdbegpsg" "0vIZAZlDd/8ff/3////sH+66tpPqkw8JJBivCPj//KgDF0v+eT////2/+nr3fSb0kga8IF//" "PBt7S/9v//+vwb/bW1bq7SSfqg16X1/7df+3////hv/r9b9K/wwvS//9hhL/2////8g2Eft+" "l0rdfq0P/93+GIX/t//39X5BUn/pN7ejG9Uvx9L0v/Bgv/b//61/D/39apNvSX//7v3y4bf/" "b//f6/IZkP+6Wr0t2qX//1d74S/9v//X2//19+1Sf0iGH//XX1vS/9v/+60v//bWK6Stuv//" "+m219f/b//f1tfrtetjpvVJf/sLpdq3r/7f/9pXTa/+sbWk2xSX/9owtoJttGFhkHfT/9v/9" "urQTa9pWSHbRftbS+lX/thBcNJhkOOwwlsMJcqwyv+w//20rCUMI2v9pwwl9aTbS//xXDCCb" "CsQrY1hra6sGtrrbaUNBMQtbSYpit/VvSBf/ak4ZzCFMbUkBsRDPU2QYrlAOawzyBFbkHrIP" "WauUA5rCFAbGlEINZAhPDCCpqUBmp2gSg9D/9hdNNBrDC2//YXX+xCnkmF8U01vXTtf/hoaB" "hAwQaEMEIOIjiyOGQCwCwwgYWIMEGgwh/EccfoREREI2CPEcRxEREa/wgg///hJ/6/0n/X/I" "HiiX///pdfT+n/+tpePX9fhfX1bSyB49NKvptL7/1IHg1wEYA1CxdKvSEdtJLyBmDU/2l/YS" "2wkl8eGGEEQPDXcJBBhBpYYhMQgQMgUVwsGaAeCsF7WIiI//////////////////////////" "////////wAQAQA4AAAEDAAEAAADOBwAAAQEDAAEAAAB3AgAAAgEDAAEAAAABAAAAAwEDAAEA" "AAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAAFQEDAAEAAAABAAAA" "FgEDAAEAAAB3AgAAFwEEAAEAAABoDwAAGgEFAAEAAAAeEAAAGwEFAAEAAAAmEAAAHAEDAAEA" "AAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; static const char fontdata_18[] = "SUkqAEARAAAmoCq/////////////////////////////////+QyXe5DJDVchncgthMyB4NFk" "TMgeJBA8FKE06yB9ad5DbxIgScCpNkFYdSGnQgrOQbKENqhA3ghmWQz2QVRyBxZDMoQbJ4XU" "g0YQl4IHhBhUm4OggwoIGCBhYwQZBuJggYIHhf1CJwazjaSdJNpqEGFQaYWgSwmg9d6yGanQ" "Qb10m+gjxMKEGEGlhAtHhhhHyf/4QaVpIw3rZBpelQQbCpp+EFSCDaCDe/XSOMwbSfSDpJN3" "1TYKqMyraC0nQTfT/pYaW0gv06dKk4Iz8+K4Qb9BUk2k/+ugt9+npbTXVtBcINwnWYAnTNg3" "77f1+v1aS+k3dVXC6em0YXSqkrSv99UvX/S8N6q3C6dJ/0tLff/r9/S6pJsN0RB6rH2/S9JL" "XX/r0v//WwxRfqt6XvXpaX1fv9f+lqlThjrf+tfS//////6pbdf910vrS9X+tdf9LSWsKQ1L" "pfr/9fuv/f/H+1rcIzH+v8aS9LS17/yGwU96S0klsEf2OvePpfj3X+I/2v0l4Svr/S/SStf3" "/9JwkwqevXf9L+m6/rvdLihW6vpfpL8jmktpf5A8WyEu+6She16/rSXggekwwgr/XvbXr2E3" "1/SSXgmpHPYaWv+3tpJNEGt/H1/0viHhBpMU3/SyGoYhaZCg/v/0gSS7oINWtf9ifDVCSC6T" "/X+Qa9Pnx1Tph3/0yEAkpr3Ba/pQaXBBvTUMNtf9hpI4mD+PX9JpdBvRwnV2F/2HhBOQxhFj" "9f1mBh/TxBB0gjiDYYRxL1wbSIP6Tdj/X9QgbSxdJtQgg2xX/kNVPhA6t/1/SF/unpINwvel" "DMbSCOG1b/IM4vX6TaW9OqQOGvogzCmD6TaT/5BSEL+k6X7aSTbSX+G0km+/9f+r/r0nDBf+" "/TpN/9V1paWRjv6VNj/+kt7deQPBe9f0nQj99XS8geWEJe/6t/61fpf+lv8Kv0qb7S/FX9LX" "9a6x1/X2/+v0v/pXX/0v20v110t69fr6IZcf/vv9daVENXt+vX/9L7bS6/9SGo//S9Ja/1/s" "Va6t+ldZAu6V6X1/+l9tf11069//pZA9RX6/T/5BWhddK63p0krSSwnr9JOtsP8hteQLMpv0" "tLtL1fS7/177Yb1qmvWk3X7aXaSWv/SXTcHr0nTa6IGBDXbSvSeku+r0ttJhhFIBO/XXS1tL" "tJ0u1CXroPSSdWwj3f/ptJNbQSbaTaSTaQQXXw8JbDCCiE1117DSIZsBBlusMJENSAg4YQTD" "CSsMIIILetkNQgkmKDQYVr00rFRGrEKJrDOKYqmKCC2FqDEVgwmEGnodqmvhbCYShhAgsREh" "phpCDBBr0hUMIRBhCGCDCEMKCyGScCItpdCIiI/6S+9VX2uvvSX9qlXvWuraSVYtpUO9Jdqw" "ttIdtLbS2mFiP///////////////////////////////////+QEwate8gaApwQPArqIZINtZ" "A1DU1IHgpaEDwZCCC3wQPA4jyC2DJMgpIyG0BkFdQQUCZDUKSBAuQ1CZAuDIYBkFwZDAMguD" "IYDIMAyGpqQ19CGNCGYnINYMg1DRBUBkGsbBEYDchgQQwwQYLlOGCIBc1A5GAxIEVENnkMqZ" "BihBp4hoK5OB4KJBbBU1IbYxODBEaDORcGpYIH//63hA4MIHBhBxX/+QXDUJrwsIMIPDYRoC" "MMGHDhGgOGGCDBBggYQYLDBBuEHDCCMw4YYYRmHYYaPBA3DBBhMEGEwSYYV9112EGpBXoQiA" "gQNEDFCD6EGs5B6EDByCUCBA5AxQhmUIZtCGbQhmUR8Gg0BSonDMZBrwIEDZBqOQiAgQMMg1" "nIQgIINZBvQg0YDNAzQgYLIKMdHAb0p8C69MIoCB3QdBB6IaEMIhsthEM9oIGmmmmmqaurpB" "NsIG0E2wgbSDzAOZg9qnp9yGUdIN1BV84NozBh7hsJB3BvfdBP/6W6tukGHhtIMPDaT/7v6a" "Qbw2lST8INhAgbT3QT7f+En/9LvvSb2wk3vXX/dfuk/pekHSb+0vDf+k//pevpP9P6T9P/uv" "aVpf/aCDae6Xt/6X/4QX96Te2k3t//7pd09OlpfTpN/r7f/X/6XazCek36Tfpf/3+rat1per" "03ML9Vv/r/+lzCza7et7re//+62vaTrpeOk636X3/pf/pfaXt9P9P///dPe9XX/pXT+vt44/" "/6Xv/et+t+uOP/zCpNpNpCl5DIBocgeDj9Ot/Q/6Q/+l917+/7/j+6Wt+rpJeFh6RDH3T9Lt" "+v/pe6+3pfpf/9/vt1el4WDrCDNzrev/1/6X3Xt/f99f7q2l1pOlXhYapBH2//qv//9L3X2/" "fpX1v+6+1bStJfCw60E6t0/r+QIfIEOv/oL7r719f6//6fb30vIM9kM2wQQYaSQSf1vS9v//" "/S919vr+vW/3S1/SbSS9BoMIIMNLqK6fSr/+v/S+/3++u+r/vvum0ukvVMIEGGuvreEF////" "pe6Xt++kr6TD/enp16bX+8IIMOtL6fBBL+uq/+l9/t6+v6UH/a6+x2kl/hBBg0kl9eIL////" "S/S+/9L8JMpwZf/03tPSX1hBEGsXDDS6r7lQGX/XXj/S9v9v/S/BBSoDb+6WvVWqXu0EFgw0" "Fr6Twf8cf/p/pe/+EvzaMH/e36tulX1ggsMNLr+58IH///F+3+3/k9P4IMP966b9ul9oMIIL" "DDS+kqfIPT/+fBo/f6Xt/8L9oN/669NxpeIhBCGGlqut7f8+GM+GP/z6fv/f+wX7YN/39Wqb" "SXhAgw6/6fb/w+H//b+69v/H9sgyDP3SbV/0vCCDBpdaS+39f//7fuvt//7kDjT+//Ta/CCD" "aXpfe////+w/uvfuu67B/3rq6Rvel8IP/0k/d6773/4b919v//bDf+urql6Xwgem/WL3f/9y" "BhP/7f3X3v7+2/7f1+3pfDC/qkv/X/3/7fuvt+v+7/9Nq3SX18ML71V/f445Bqp/7f3Xt/Xp" "dv/a/6Tevhhggm71WbBv/1+w//t+6+/f37f+9daq3peGGEFvouqSX79e//7f3+3v7+2/+urf" "XpeGGEE3bfpd/f///t/pff19bf+3TddJN6XgwZDXFwghd0nCST++l9//t+3+32va/+l+uq3/" "hh4QVthKIRPO+r/3//byBiPS9vet62yGU9f2vt6T6RDKjww8IJtimkkn1b0sgXjv/9v9v9vt" "Lutv+9666pvS/DDwQLDCYKv/0v2//2/4r32/ddv911Y2Nb0vwwxCCbEV76b0utv/9v9/vdLt" "L7S7pivSfr8gz2Qa4DDCCIMsNpJPq3r///t6XXt91t1t/69aV6/pkMzwwYQSDYaXfTelrt//" "t/v7G2ltpbeltpe1vpV9qDDCCVsJK+kwyGaPpft//t/17tpbaW312rVaTekvrQYYIJNhpVeE" "mwuEF+w//2/3920ttL7S20t9K9L+8MNBbDCS+kwYSUJa7f/7D16/bS20tu0uDBfaV9Jf0g8F" "sGEltQSYYLZB0KFTDDVNNPTbUFTdNN2GEk2GEk24YSTYpqtK01C/WHhYYhINNCEGKCEJDTDB" "gqaaem2hp6abhhhBJsGEEmw0GEk2v1YacfvQeE0GEQzKyGcQEEGEECIahQQIBhiCINwZDAMg" "uDyCgGwYUgwnaIOIIYTuxCINQMMUQagcOIRDUBhhbuCTBkMwGvsLDwg0GF8hAZQUgQNnDJMM" "r9b1/uGFhgtwwthNVVf+KQiIMEIiDBCIgynDIBRERGhFwYISBPqIkNGogwX4iI/QiOIiQPBZ" "cRER9cIzA2gb+qCB/WEH60g/rQNdJJGxlOMjgbQaOpAmg2D1CBj+oaQg1egoogahpaXjQMKa" "gPBjRA1Dbv4Q1sIcf////////////////////////////////////IFmpA0AkvUhkhlQQPAr" "gIMgeFsgeBxBAkggTA0rIa9kNe/IZAJBA8vIHgT+FIHjmQPBS8gyeEth5A9HIa2BIgfkEDwU" "iFIHxBA8FUghtkJbeHtL/IElkMu/S291UgeL5A8Cf0YOQPHNNMhleQZP/+6d0g4dNN3rfpV9" "If/Xv00vX/yBoGoP/84n+l7+v/q6/7VeC//V167CDXhf/V1/xH//6tf/3/9J69f//9tf///0" "v////2////9LX////br///9LQIg2UyE8gqTIa08hqzyDZTIsyGu5BofyDU5F8hiZDVgizIbZ" "yGs5EmQVqEVyGa5F4hlnyGlBDZBA8G1yDJhA8NQC/9W2CBB4IGCBhA8EDwQPCBgpDK7ILzwU" "IGEGChAwQMFCBhA1BQoI1hlQUFIaE5F0IOnUgmpBc5BjyDFZE0//rEIPCYQYQwnNQGHpkMs5" "BufXIFzhNMhlnTCDIGDhMIZDYdQuSsgwcg5/77///VtPQYUI2OEeGwoR4iIDRTChdAsKmmFT" "CPjYVBhHBYVUcFhDBQUgXoQI4hsopBjg2jYFzQCDwNzYLr/6sI4L0wjwsIIHQQbBUEGsJ/oL" "008JoIMPTQQa1QQcF9qmug6TtV/+k9BvRwdBBoJB0m9J9HBshl+QMfoLIZfo4VHCZDL9HBtB" "NkC/o4NhBByBj1UOkQ2eQY+6bvbV/S//bp9Ag2gg6TpWQL8k1EJ3fS2IQYhOxCdJ3QIG0ndG" "3rmI8DTd/Wm60qS/9Lp4p10nSfVngzQg/6XCYTwg6txTpcQnVx/6e90m66//b7ptL3W+rq/0" "F003V03Ta9Nf+2utWlrpf+l709Ol/77/hL/3Xp66f/+r1bS61//bHq1/SfXr/S6p69utfHH9" "906em8UktshpYQ2P6X7+v/+/6Xv7pe2vV/2lzH7S1S/CBw/2/0hr7//9Bf/7/X3/9+k2r1SW" "2g0vS//1///CX//e/8H+2lpXvVqkltoNLxEgeBORvr/9f+v/6//shhp/991iulBAsGDRww18" "hkArV+vx9//F//7+vynBo+3WldNN6QMPBAkgwYS8ETv/9el/3////sP/W999JJh6SQYrwjMX" "/8pAy7f/zyf///+w//dLSt+m9Kg16Bf/z4K+0v/b////w3+3X3vapfpA16X1/7aX/t///1+D" "f+tq9JvSvpYYXpf/+wwgv/b////wb/bp6tbvSv2h9L+7/Yr/2//7/vyCuR/r/oxvSS/H/1/8" "ML/2//+tL8H/erSel36/9L6/vBgv/b//f/8P/a/apN2kl//+22r6MArf9v//+n8g1O//TpPS" "Tb6//+l/4S/9v/+0tb//Vtb7VK70iC8f/r1drel/7f//9f/69R/vpJf//q2+3pf+3/+3Wtr9" "er7T0k231//YXS7X1/9v//StJtf+1j40rikq//RhbQTDbRhWyBA+n/7f/7faCte0rtG1qnSb" "df/20uGk3YS4YXv/2//20oaTYRtf7Juwwgt3pXpJf/sILgwgmGQsMMILYYXlIGZ/2H/+2lDB" "BMMJfDSjiuvSt0l/9irMPFMUxVsUnDTtPTYaaYTtO2GEopiFoM0WEmqTenVukP/6jmEnakgC" "6IaE7DIMDJIDBThokNCdyC6cgunLGSGCEYHJANxChMLIaBEQqakMGn0CTB6/+wtIMINBrYLf" "/2F/+wp5INegmmFtNPW//4NDQMIMEDQgwhBsRHEMjhkhAsGEDCxBhBoGEP4jQ4/iIiIhHATi" "OI4iIiP/hBA3/X+Eg///pf9f6T/r/ZA8OLf//+l16T1///a6/S+k9aj//a5Arq0q9JtL//wY" "YQLdtKvSEcdV8gaIddtKvTS20kvj2GEkvrYYIIgeCsOEggyB6sIOtiFFEFsGRPE6AZgsLDCY" "XsFkDYDScREcf////////////////////////////////////4AIAIAADgAAAQMAAQAAAIEI" "AAABAQMAAQAAAIsCAAACAQMAAQAAAAEAAAADAQMAAQAAAAQAAAAGAQMAAQAAAAEAAAARAQQA" "AQAAAAgAAAASAQMAAQAAAAEAAAAVAQMAAQAAAAEAAAAWAQMAAQAAAIsCAAAXAQQAAQAAADcR" "AAAaAQUAAQAAAO4RAAAbAQUAAQAAAPYRAAAcAQMAAQAAAAEAAAAoAQMAAQAAAAIAAAAAAAAA" "AADAEgAABAAAAMASAAAEAA=="; static const char fontdata_20[] = "SUkqABATAAAmoDgf////////////////////////////+QyQy7IGwGXPIZILLkNA/kDwVrIW" "3IHgvBA8FqE00sgeC9pp5BWhIFSvIHhpOQPDToQK3ILYb01TTINOELmCJwypBY8FVsgy2kQ1" "6BSCocEDBSDQBEFfCBcWINJwQeF/qDCDSCD0m4eCBhSDZWEGFwTwQMIPC1VKQa6keMPTpJu8" "IMKEGmuECwg0fIP3dcIGgg2kE9JukkeGwqDQaWECwj42EEG//wiRhpN6ON0lZDSetBBsFTXw" "gqQQNoJv/9HnJetpIJ1201SSbCpo0JroLQTdP/+EFh6b1ekm060mwRp5mNwQb8JUrat//1uu" "kk+laeklhBaBA6QdZsCsKcAwqdK/qukv3/pXuvbgum4TaMLpUq3T7u9KltVaS61bfpcLp6/p" "Kqp1vr1/1/qlcNpJK2wvfdL0tf3//X/S+qsGMjvrHpuuvS6XS//6//SVWw0c6X/q6+lr/f//" "/pfXhj1b/9L0uv3+mvX/9JJLyGtiX9PX+uvr+/VePpf7YR9f/XGkvqquv/1X+u0klwUi3pL/" "/66Wvf+Qbi/uqWklVhGaY/Xj6XpD3X+I/37pVuCT/36SX6Vpf1/0lpQl6vS/qv0lbr/720u0" "h7hX+/6XkWfVpfv+6pRVbXpL+kvggaqw0r/IHgmELd7aWwldq//SSrwg6qGEtfpW9hoJKu2v" "S/0kvCakWisNL/Xg8MV5DNp43/9IL4h4QaTEJv/4wwSSkEUf6X6gklrhB0+v+yXBmprW//0Q" "06l5mK0k1DDv/5JgUIJrvBf+lB1wgbwnTDbX/Yejyh1sdL/tLhPo8TW9fqgw0kmyC/Eu//0k" "cGH9NxBA2kEGwwjaX6hvIYmleP6X6UEG0tp0n0cbYYS+lyGqESCDSd//+hbXF4TaQSBuK/8h" "tJ8I8w0m/9L9J673VINsL3+YbSQQbSv8gflZA4Cf6TaW9dJBsNJeQPyjD6Te3//+k/+2lTtf" "+G0ltW/+kv0rS+vScGC/9+nr/1+utcijv6STY1/6S3t1/SX6vEfuu6/7/q3+QPDZi7fpa/0r" "/RA8PhC56VN7a/il+lr+tdY/+vt1//pf+krr/6X9/6WulvX/1//+2k9f1pUQ1/30vS6ohmv6" "X22tr/6RBsH//9dV+v9uv0m/SC110vVf/pfsV/9aTrkDELel6X//9tfpfpXX06/pZA8Hj/SS" "6d+sgy3uul+39JWklhB//utsN/BSB4b4lddNpeler6X1rpJX3DtcKn/pdbaTpVpJaa1f/TcP" "+k0m0tItXaX16t0l+vpJOkw0GQg71r7+h2l2k2lVqEv+Hpba2EeRrn/S9patpJthJulbSQX/" "D0km0mdWmKtfdJtJNYYSuGEmwkraQS/4eEttBMQg09de2kQaUiygwiGuTk5ptKmGEEEFtexE" "JJimgwv+kmDBLWK2ITBgkrBgkCC2qwYWDBBhBp0hSDWGIXwuExCoMQgQLERIauiQhggwr8Ug" "whEGCEMEGEIYUFkMkMyMgeC/EMu+qwZwMgMo4B4axwDg8B4axwG0LxEW1SxEREfetL9Uv26p" "L9JfVvpL20kv+qSxbSUd1S26YW2kO2ltpb1tNYj/////////////////////////////////" "5AWBqr/IGoNMEMgk5DJBaGEDYGKyB4FlZA8CjQgtgYghkJ/IGYMUIHCLIKgkCKsC5QCHQNcl" "oaCWBqlIGYVAMFWGCoBcqwXKgCDoDBUBrmoFQ1Bg6g1EQGmVYaREwZCrDSIoCqDIGKEDGhDC" "ghnGEMAyBCchgvZDRWQUYQzaENEyGlMhsBfBAyCuMWRYFYjYaBKcNPQIiYF//9reEHIuG0HB" "hA4r//IMEZBcOuaAeGnCDBA+wg4Pwgf//94QcMIOGEH/+uE1tetMIOyDIKBFAPIKCwhpi5DK" "FQigGEQzCCGaQQzCCGaQQzCEaBmkgFNokBlshpzCJwcMhpaEQgInBwyGloRA0fD8g3IINPkD" "CCDTMgoRkDE7R8NDqvTCJAQNQzMEYQIhsoGZgQ2aBns0BiEaAXtNNNNIJp6baQIG2aAu0CBt" "mgLsIIPtNO01YaIGEUQMISnwy9do0Ah3g6CD5BQG5BRbkG9oIO00000gmm0naCCDDcNhBBhu" "G6DzYYNAxap91oNpN1BV84Kwggw120EHwb38JB//S/vSb20m90nrf+vVtJtKkvQQbQQbvcJN" "Yb/0E//pdrekG9tIN7aT7/v970/pfToIN+2gvb/pL/9L+9Jv0m/S//tLWm1bS/90m19L2/9J" "//S770n3Sb2+v/fb/SetL0m0E97r7f+l/+l6za9X3X6//3Xat02lpf6TaNr9e3/1/+lzac2u" "3pN7pN71//rrTaT1pfT0336Xv/r/+l+v3q/q///71362vXjq6T+vt44pf/pe3Xt9X9X6v/9q" "2u3Tpa/pX39ff//6C/X29X9X/Ecff5tV0m6FLyGQCm5A8ND9Pv0kO/pD/6XvXv9/3//1902l" "apeFg9SGKE/tL////0vtfb0n9J//7XSfb3pLwsOqCe+3qvfr/6XvXt/fXfX+9P/pWlXhYapB" "GZv0vqt/r/0vtfv//1v+1vbSbSdV8Fh1oJtb76X///S969vV9Vfr/f0v6bpLyB4eyDVYSDDS" "0unSfS/yGeMhnhf/S+19+vqvW/+v9tdJL0GEwggw9JJ//S+///9L3r2/v++r/tdJtXSbWvWw" "gQYaWsfTelW//X/pfa+3/pfpMP96b+rrpL7TCCDBpaXr4QS////oL+vvV/V9KH/f/sU2kv+E" "EGGlpV7eCC//1/9L2/2/9L9JmoFn7paTf6pf4QQYaSX6XEwGn//4/0v0vf/S/CCkICn//0mm" "6S/wQRDTKwYaWl/cgQZn8Lhf/X2/2/8JfkKdlICt+1dJvabSr6aCCww6+tJ4P+OP/0/0vb/y" "xwQX5tWD/er/v196CCww0tf+Zh3///F+3/f+1/BMP+//bbSS9hBoILDDS6VJJvBh//zMGv9/" "pe3/wX7Qb/dLSbS40vEQgWGDS//w3///37f7/8F+2Df/v/bVeEEIYaWte3hv6mYEZmBH/5nv" "9fb/x/bIKYT9tbX09Lwggw0v0kvf/ff/9v3r2//9yCwn/66bSV18EEDDrpf+////9v7X77ru" "tsgtB///zadJfCDaX9JN73r/3/7fvXt//9h/20tL0ndL4Qer0lj7fr/yGZZBI/9v7X3//22/" "/fb1vr4Qff6T3//3i//b969vf39sP+2trpJN6XwwX/X/////2/tfb9L0t//rp+vX4YX3SSv7" "6xxshpI/9h+9e339/b//96t6XhhhBPeqSNgY++v4f/2/v+//9v/bSdLpJvrwwYQVu3LrX/fX" "u//t+6XvvW9bb//e2qXpeGGEE3elqrf+v3/+39/t9r37/7df+3peGGQ2ysIJp20sIKv2+v//" "2/0vb+vS7/9dL0vXww8ECG2wk4SW+vX2//w37f7e37+3Xpe+2kk3peGHhBOGKiieU/t9ZDLj" "//28hmR6X36XaW2Qy4+9tLS9W+iDRHhg8IKwwmEq3revW3/+3+3+3t+3W///G/Xpfgw8IJsW" "Cqn6b0tdv/9vXivfdL/vrdW640m9fwwxCCbFL9X0v7//b639vuttLb17qOqW9L8geHshp2GG" "CCIG92q31D0v2//2/69vbS20tvr13dJ9L9MFDDCCCbaVPq3pft//t/v8baXpbeu3tV031+mE" "gwwgVtpLek3hL9v/9v/920tuvtLtL6W9JfvDBhBK2Et9JhkM2NLXb//b12ve0thpbd1tha3S" "fX/wwwgrYYSSvCTDCWCX7D//b//dhpbYS27CXaTtaV6S/pA6Cwwwl+CQYMElIEB6Ww17/bVd" "rtw2Ethpd2lsMJf7ekF/w8LYMIJO0ITIwXEJDTDBqmqemw409Ndgwgkwwwgk24MJJs1DTW0k" "2mh/0HhUGQyQIGCDoMUEECkNCgM1iyGxQQYVkMKMgXUMMJAgbQIiAzg3ZqJEGpQwYJEGpQw5" "0JENRWxXWCwyDWo/aw8JoMQgQMhsBggQYSBAuGJIAxrrYYUgQIwUhgQ4YhYYhbDQhbX4SYev" "sJIPBNBgvkmBwCkaBU4ZAgzf+/v7hgsMLcGFhhU71/40IiDCERILIgREgsCBEcREaEQ4MEJA" "sTiIMEIME9UIiP5BbBq8hkhnmQWy/EgeDIOQUuIZAuEDwZuIHgz0ER9IRHEWZgSgVf0ED9LQ" "f1QQP0tB/pI5g/SpBEQuSe+iByA3HqEDH6UMKINfUUQNgJXfCoGFNYHhlxhAwvogbAzB/hCO" "P/////////////////////////////////+QPFrIGoF8IHYG3PIZIbdkMg4CZA8CIIZAb2QJ" "7IE0NbMg255DIAw5A8PMhkLwpA8H8geBZMgpzCCww/CkDy0IHgVhqQPFDIHgcaEFXRLbyB4L" "0INvL/kFiyDRnpbe6aXrhNP17+0iB4PMhkL0bKQPB/tMhlTIKc//XfSD67vW/2l6Q/+vfqvr" "///zyf6W7XkDUo/9LS/6/C//Ta+uGgwvBf+lev8R//+rX/+v/V/1///q1////V////9K0v//" "/9v////S/////bX///9LnA2ycNKQkyDLMg2/kG2eQ26ZEoQ2oINT+Q0nIkyDEyDa5EoQVzkN" "qCEmQZTkRyDTBF4hmoyGq5Aw5A8FNyBxf/03BAg8EDIbWoIHggeQ19cIGFBcgwfBQgYQMFCB" "ggYKCBhA1ChMEU4ZkFBSGwQRKiC4yyD1EGEENHkFxhEqIaBv/1cQg8JhBhDCDwg9Mg1UIGKa" "4KmmQaKJhAwVBhDIGKKE8g0UIEU9V7X//6sJ6DChQjw2ERAFzxEGGygyBjQho00CyCgMJpkD" "AaDCPjZAvog1IaNFR4WiMB5BNCBhBDP5BQjIEUtHAUEgGAX/6ujYr0wjwsI8LCCDYSQQfX9B" "emE9UEG9MI8L1QQcL7TTSYaIGDpMINTYEL/6sJA+jg2gg4QQOk2FSawjxP9BejxtHieEeJpB" "h6ODaBA16QcF96fp96SS/9XpvhB0EHQQdJvSfQINkM2ZDKnoLIZvoEHQTZDLmgQbSchlzQIN" "hIOQy5qr5DRMhnn/e2ldVX/1e+kG0nSdLIZXqzMGgU7vpcUxCdinSbdIOk7o2eshl+7uk602" "k/pf+r08QnWldW9XhP+lwmnhOtxCbS4hPv/ff9aWv/pX9Wk6T19XTf6XTTdN03TpdOv/06aT" "aT+l/+33ul1rf//oL/9fbX6/9tf20rS6/9LF61169Xr/S6rr2666HH/rTp0nxSS2yGpxAu/7" "ft/6v/v+l7vul7a/f77c2q33SX4Qafpf9Cl///4QX/+//V/2vXulqqW6DX6b/X///9L///S+" "H/1q2k2k9JJbaBpeIgu///X/pf/97/sH+2rdfFWtILDDQa+QyQ31/XX//9P/9f/5qDU/1rdN" "PpJbaPEQzXkMgCsR6/H3/8f/+/r7IgGn7/Tq1dJBh4QVBivBFB///S/7////2H/aVr16qw8J" "JBrwjQT/8gYZt6/59P////Yf7703tvST6SQNegX/8zBT2l/7f//9fhv+6/Sbtav6DXhBfX/t" "pf+3////hv/XSvTekn6UGF6X//tpf+3////g3+9N7/6V6tD//d/sMJf+3///35Bk0/tddJNt" "V/H0v//Yhf+3//daX5AkR+/03o3vpL//0v28ML/2////8H/tK10km7Wv/S/d/wzCBf+3/+/1" "+/771elvSX//1d/pD/7f//WrfkGuP+0tX1b9IgRH//r63hL/2//7Xr/f1+/SpttJf/9em730" "v/b//f1v/7V6er0r9L//XSttb1/9v//rptfr+1jY0ntUq/+197X1/9v/+0rS1/9XqqVtiqX/" "9bQVtowrZDYPr/7D//b7SYa9pW2jCxu6V6//thG/aTdhLbC9/+3/+6VoK1/yKPYS3rSbaS//" "hhLhhJhkMOwwlw15AgaP+3//aVpMMEc/aVhOGEuulfS//iFoMIJhhWKthhJYd2urBra922lB" "ggmK1tJimK/eraSBf/asqIpgwVqGwYJBA2GCDhhA8IG2EDBAwQODBBw2GlFMLCKcDDCVVBu1" "hJh6H/7Cjm0ExQanQMoUQ2F7IEF50DBLhokNghyGC5DBcEDnQHIgEOgFwYIKE1kNgOUGE0wo" "OtoKw9f/a6DQaDC2Cw//sF/+xCn0gwvimg1vXW0//hhDQMIMEDQgwhDYiOLLhkhlBYMEDCxD" "BBoMEO+I44/iIkCThILGBHgTiQyQaOxHIHh+EREa/xFBEM58fH/sIJ/6/wk///pP+l/kDwIK" "////X/3r+uvStf///8ev0nrC+v9pZA8WvSr0g2l//7aXtpfqJTgi4GwGeP16QjtpJeQNAanX" "tL+0tsJJehWwwgklX2GEgkmg6wxCBIgZiCCB+DrDChfCyBtDOdkcDMMcMLEREf//////////" "////////////////////4AIAIAAOAAABAwABAAAATAkAAAEBAwABAAAAcwIAAAIBAwABAAAA" "AQAAAAMBAwABAAAABAAAAAYBAwABAAAAAQAAABEBBAABAAAACAAAABIBAwABAAAAAQAAABUB" "AwABAAAAAQAAABYBAwABAAAAcwIAABcBBAABAAAABxMAABoBBQABAAAAvhMAABsBBQABAAAA" "xhMAABwBAwABAAAAAQAAACgBAwABAAAAAgAAAAAAAAAAAMASAAAEAAAAwBIAAAQA"; #endif /* LEPTONICA_BMFDATA_H */ leptonica-1.86.0/src/bmp.h000066400000000000000000000123431506303110300152750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_BMP_H #define LEPTONICA_BMP_H /*! * \file bmp.h * *
 * This file is here to describe the fields in the header of
 * the BMP file.  These fields are not used directly in Leptonica.
 * The only thing we use are the sizes of these two headers.
 * Furthermore, because of potential namespace conflicts with
 * the typedefs and defined sizes, we have changed the names
 * to protect anyone who may also need to use the original definitions.
 * Thanks to J. D. Bryan for pointing out the potential problems when
 * developing on Win32 compatible systems.
 * 
*/ /*-------------------------------------------------------------* * BMP file header * *-------------------------------------------------------------*/ /*! BMP file header * * Notes: * (1) The bfSize field is stored as a 32 bit integer and includes * the size of the BMP_FileHeader, BMP_InfoHeader, the color * table (if any), and the size of the DIB bits. * (2) The bfOffBits field is also stored as a 32 bit integer and * contains the absolute offset in bytes of the image data * in this file. Some bmp files have additional data after the * BMP_InfoHeader and before the color table (if it exists). * However, enabling reading of these files makes the reader * vulnerable to various malware attacks. Therefore we do not * read bmp files with extra data, and require that the size * of the color table in bytes is * offset - sizeof(BMP_FileHeader) - sizeof(BMP_InfoHeader) * (3) Use arrays of l_uint8[] to make an endianness agnostic * access to the BMP_FileHeader easier. */ struct BMP_FileHeader { l_uint8 bfType[2]; /*!< file type; must be "BM" */ l_uint8 bfSize[4]; /*!< length of the file; sizeof(BMP_FileHeader) + sizeof(BMP_InfoHeader) + size of optional extra data + size of color table + size of DIB bits */ l_uint8 bfReserved1[2]; /*!< don't care (set to 0) */ l_uint8 bfReserved2[2]; /*!< don't care (set to 0) */ l_uint8 bfOffBits[4]; /*!< offset from beginning of file */ }; typedef struct BMP_FileHeader BMP_FH; /*! Number of bytes in a BMP file header */ #define BMP_FHBYTES sizeof(BMP_FH) /*-------------------------------------------------------------* * BMP info header * *-------------------------------------------------------------*/ /*! BMP info header */ struct BMP_InfoHeader { l_int32 biSize; /*!< size of the BMP_InfoHeader struct */ l_int32 biWidth; /*!< bitmap width in pixels */ l_int32 biHeight; /*!< bitmap height in pixels */ l_int16 biPlanes; /*!< number of bitmap planes */ l_int16 biBitCount; /*!< number of bits per pixel */ l_int32 biCompression; /*!< compress format (0 == uncompressed) */ l_int32 biSizeImage; /*!< size of image in bytes */ l_int32 biXPelsPerMeter; /*!< pixels per meter in x direction */ l_int32 biYPelsPerMeter; /*!< pixels per meter in y direction */ l_int32 biClrUsed; /*!< number of colors used */ l_int32 biClrImportant; /*!< number of important colors used */ }; typedef struct BMP_InfoHeader BMP_IH; /*! Number of bytes in a BMP info header */ #define BMP_IHBYTES sizeof(BMP_IH) #endif /* LEPTONICA_BMP_H */ leptonica-1.86.0/src/bmpio.c000066400000000000000000000623121506303110300156210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bmpio.c *
 *
 *      Read bmp
 *           PIX          *pixReadStreamBmp()
 *           PIX          *pixReadMemBmp()
 *
 *      Write bmp
 *           l_int32       pixWriteStreamBmp()
 *           l_int32       pixWriteMemBmp()
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" #include "bmp.h" /* --------------------------------------------*/ #if USE_BMPIO /* defined in environ.h */ /* --------------------------------------------*/ /* Here we're setting the pixel value 0 to white (255) and the * value 1 to black (0). This is the convention for grayscale, but * the opposite of the convention for 1 bpp, where 0 is white * and 1 is black. Both colormap entries are opaque (alpha = 255) */ RGBA_QUAD bwmap[2] = { {255,255,255,255}, {0,0,0,255} }; /* Image dimension limits */ static const l_int32 L_MAX_ALLOWED_WIDTH = 1000000; static const l_int32 L_MAX_ALLOWED_HEIGHT = 1000000; static const l_int64 L_MAX_ALLOWED_PIXELS = 400000000LL; static const l_int32 L_MAX_ALLOWED_RES = 10000000; /* pixels/meter */ #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*--------------------------------------------------------------* * Read bmp * *--------------------------------------------------------------*/ /*! * \brief pixReadStreamBmp() * * \param[in] fp file stream opened for read * \return pix, or NULL on error * *
 * Notes:
 *      (1) Here are references on the bmp file format:
 *          http://en.wikipedia.org/wiki/BMP_file_format
 *          http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html
 * 
*/ PIX * pixReadStreamBmp(FILE *fp) { l_uint8 *data; size_t size; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); /* Read data from file and decode into Y,U,V arrays */ rewind(fp); if ((data = l_binaryReadStream(fp, &size)) == NULL) return (PIX *)ERROR_PTR("data not read", __func__, NULL); pix = pixReadMemBmp(data, size); LEPT_FREE(data); return pix; } /*! * \brief pixReadMemBmp() * * \param[in] cdata bmp data * \param[in] size number of bytes of bmp-formatted data * \return pix, or NULL on error * *
 * Notes:
 *      (1) The BMP file is organized as follows:
 *          * 14 byte fileheader
 *          * Variable size infoheader: 40, 108 or 124 bytes.
 *            We only use data in he first 40 bytes.
 *          * Optional colormap, with size 4 * ncolors (in bytes)
 *          * Image data
 *      (2) 2 bpp bmp files are not valid in the original spec, but they
 *          are valid in later versions.
 *      (3) We support reading rgb files with bpp = 24 and rgba files
 *          with 32 bpp.  For the latter, the transparency component of
 *          the generated pix is saved; however, for rgba images with
 *          non-opaque transparent components, png provides more flexibility.
 * 
*/ PIX * pixReadMemBmp(const l_uint8 *cdata, size_t size) { l_uint8 pel[4]; l_uint8 *cmapBuf, *fdata, *data, *bmpih_b; l_int16 bftype, depth, d; l_int32 offset, width, height, height_neg, xres, yres, spp; l_int32 compression, imagebytes, fdatabytes, cmapbytes, ncolors, maxcolors; l_int32 fdatabpl, extrabytes, filebpp, pixWpl, pixBpl, i, j, k; l_uint32 ihbytes; l_uint32 *line, *pixdata, *pword; l_int64 npixels; BMP_FH *bmpfh; BMP_IH bmpih; PIX *pix, *pix1; PIXCMAP *cmap; if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", __func__, NULL); if (size < sizeof(BMP_FH) + sizeof(BMP_IH)) return (PIX *)ERROR_PTR("bmf size error", __func__, NULL); /* Verify this is an uncompressed bmp */ bmpfh = (BMP_FH *)cdata; bftype = bmpfh->bfType[0] + ((l_int32)bmpfh->bfType[1] << 8); if (bftype != BMP_ID) return (PIX *)ERROR_PTR("not bmf format", __func__, NULL); memcpy(&bmpih, cdata + BMP_FHBYTES, BMP_IHBYTES); compression = convertOnBigEnd32(bmpih.biCompression); if (compression != 0) return (PIX *)ERROR_PTR("cannot read compressed BMP files", __func__, NULL); /* Find the offset from the beginning of the file to the image data */ offset = bmpfh->bfOffBits[0]; offset += (l_int32)bmpfh->bfOffBits[1] << 8; offset += (l_int32)bmpfh->bfOffBits[2] << 16; offset += (l_uint32)bmpfh->bfOffBits[3] << 24; /* Read the remaining useful data in the infoheader. * Note that the first 4 bytes give the infoheader size. * The infoheader pointer on sparc64 is not 32-bit aligned. */ bmpih_b = (l_uint8 *)&bmpih; ihbytes = bmpih_b[0] | ((l_int32)bmpih_b[1] << 8) | ((l_int32)bmpih_b[2] << 16) | ((l_uint32)bmpih_b[3] << 24); width = convertOnBigEnd32(bmpih.biWidth); height = convertOnBigEnd32(bmpih.biHeight); depth = convertOnBigEnd16(bmpih.biBitCount); imagebytes = convertOnBigEnd32(bmpih.biSizeImage); xres = convertOnBigEnd32(bmpih.biXPelsPerMeter); yres = convertOnBigEnd32(bmpih.biYPelsPerMeter); /* Some sanity checking. We impose limits on the image * dimensions, resolution and number of pixels. We make sure the * file is the correct size to hold the amount of uncompressed data * that is specified in the header. The number of colormap * entries is checked: it can be either 0 (no cmap) or some * number between 2 and 256. * Note that the imagebytes for uncompressed images is either * 0 or the size of the file data. (The fact that it can * be 0 is perhaps some legacy glitch). */ if (width < 1) return (PIX *)ERROR_PTR("width < 1", __func__, NULL); if (width > L_MAX_ALLOWED_WIDTH) return (PIX *)ERROR_PTR("width too large", __func__, NULL); if (height == 0 || height < -L_MAX_ALLOWED_HEIGHT || height > L_MAX_ALLOWED_HEIGHT) return (PIX *)ERROR_PTR("invalid height", __func__, NULL); if (xres < 0 || xres > L_MAX_ALLOWED_RES || yres < 0 || yres > L_MAX_ALLOWED_RES) return (PIX *)ERROR_PTR("invalid resolution", __func__, NULL); height_neg = 0; if (height < 0) { height_neg = 1; height = -height; } if (ihbytes != 40 && ihbytes != 108 && ihbytes != 124) { L_ERROR("invalid ihbytes = %d; not in {40, 108, 124}\n", __func__, ihbytes); return NULL; } npixels = 1LL * width * height; if (npixels > L_MAX_ALLOWED_PIXELS) return (PIX *)ERROR_PTR("npixels too large", __func__, NULL); if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 24 && depth != 32) { L_ERROR("invalid depth = %d; not in {1, 2, 4, 8, 16, 24, 32}\n", __func__, depth); return NULL; } fdatabpl = 4 * ((1LL * width * depth + 31)/32); fdatabytes = fdatabpl * height; if (imagebytes != 0 && imagebytes != fdatabytes) { L_ERROR("invalid imagebytes = %d; not equal to fdatabytes = %d\n", __func__, imagebytes, fdatabytes); return NULL; } /* In the original spec, BITMAPINFOHEADER is 40 bytes. * There have been a number of revisions, to capture more information. * For example, the fifth version, BITMAPV5HEADER, adds 84 bytes * of ICC color profiles. We use the size of the infoheader * to accommodate these newer formats. Knowing the size of the * infoheader gives more opportunity to sanity check input params. */ cmapbytes = offset - BMP_FHBYTES - ihbytes; ncolors = cmapbytes / sizeof(RGBA_QUAD); if (ncolors < 0 || ncolors == 1) return (PIX *)ERROR_PTR("invalid: cmap size < 0 or 1", __func__, NULL); if (ncolors > 0 && depth > 8) return (PIX *)ERROR_PTR("can't have cmap for d > 8", __func__, NULL); maxcolors = (depth <= 8) ? 1 << depth : 0; if (ncolors > maxcolors) { L_ERROR("cmap too large for depth %d: ncolors = %d > maxcolors = %d\n", __func__, depth, ncolors, maxcolors); return NULL; } if (size != 1LL * offset + 1LL * fdatabytes) return (PIX *)ERROR_PTR("size incommensurate with image data", __func__,NULL); /* Handle the colormap */ cmapBuf = NULL; if (ncolors > 0) { if ((cmapBuf = (l_uint8 *)LEPT_CALLOC(ncolors, sizeof(RGBA_QUAD))) == NULL) return (PIX *)ERROR_PTR("cmapBuf alloc fail", __func__, NULL ); /* Read the colormap entry data from bmp. The RGBA_QUAD colormap * entries are used for both bmp and leptonica colormaps. */ memcpy(cmapBuf, cdata + BMP_FHBYTES + ihbytes, ncolors * sizeof(RGBA_QUAD)); } /* Make a 32 bpp pix if file depth is 24 bpp */ d = (depth == 24) ? 32 : depth; if ((pix = pixCreate(width, height, d)) == NULL) { LEPT_FREE(cmapBuf); return (PIX *)ERROR_PTR( "pix not made", __func__, NULL); } pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ pixSetInputFormat(pix, IFF_BMP); pixWpl = pixGetWpl(pix); pixBpl = 4 * pixWpl; if (depth <= 16) spp = 1; else if (depth == 24) spp = 3; else /* depth == 32 */ spp = 4; pixSetSpp(pix, spp); /* Convert the bmp colormap to a pixcmap */ cmap = NULL; if (ncolors > 0) { /* import the colormap to the pix cmap */ cmap = pixcmapCreate(L_MIN(d, 8)); LEPT_FREE(cmap->array); /* remove generated cmap array */ cmap->array = (void *)cmapBuf; /* and replace */ cmap->n = L_MIN(ncolors, 256); for (i = 0; i < cmap->n; i++) /* set all colors opaque */ pixcmapSetAlpha (cmap, i, 255); } if (pixSetColormap(pix, cmap)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } /* Acquire the image data. Image origin for bmp is at lower right. */ fdata = (l_uint8 *)cdata + offset; /* start of the bmp image data */ pixdata = pixGetData(pix); if (depth != 24 && depth != 32) { /* typ. 1 or 8 bpp */ data = (l_uint8 *)pixdata + pixBpl * (height - 1); for (i = 0; i < height; i++) { memcpy(data, fdata, fdatabpl); fdata += fdatabpl; data -= pixBpl; } } else { /* 24 or 32 bpp file; 32 bpp pix * Note: for rgb bmp files, pel[0] is blue, pel[1] is green, * and pel[2] is red. This is opposite to the storage * in the pix, which puts the red pixel in the 0 byte, * the green in the 1 byte and the blue in the 2 byte. * Note also that all words are endian flipped after * assignment on L_LITTLE_ENDIAN platforms. * * We can then make these assignments for little endians: * SET_DATA_BYTE(pword, 1, pel[0]); blue * SET_DATA_BYTE(pword, 2, pel[1]); green * SET_DATA_BYTE(pword, 3, pel[2]); red * This looks like: * 3 (R) 2 (G) 1 (B) 0 * |-----------|------------|-----------|-----------| * and after byte flipping: * 3 2 (B) 1 (G) 0 (R) * |-----------|------------|-----------|-----------| * * For big endians we set: * SET_DATA_BYTE(pword, 2, pel[0]); blue * SET_DATA_BYTE(pword, 1, pel[1]); green * SET_DATA_BYTE(pword, 0, pel[2]); red * This looks like: * 0 (R) 1 (G) 2 (B) 3 * |-----------|------------|-----------|-----------| * so in both cases we get the correct assignment in the PIX. * * Can we do a platform-independent assignment? * Yes, set the bytes without using macros: * *((l_uint8 *)pword) = pel[2]; red * *((l_uint8 *)pword + 1) = pel[1]; green * *((l_uint8 *)pword + 2) = pel[0]; blue * For little endians, before flipping, this looks again like: * 3 (R) 2 (G) 1 (B) 0 * |-----------|------------|-----------|-----------| * * For reading an spp == 4 file with a transparency component, * the code below shows where the alpha component is located * in each pixel. */ filebpp = (depth == 24) ? 3 : 4; extrabytes = fdatabpl - filebpp * width; line = pixdata + pixWpl * (height - 1); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { pword = line + j; memcpy(&pel, fdata, filebpp); fdata += filebpp; *((l_uint8 *)pword + COLOR_RED) = pel[2]; *((l_uint8 *)pword + COLOR_GREEN) = pel[1]; *((l_uint8 *)pword + COLOR_BLUE) = pel[0]; /* Set the alpha byte to opaque for rgb */ if (depth == 24) *((l_uint8 *)pword + L_ALPHA_CHANNEL) = 255; else *((l_uint8 *)pword + L_ALPHA_CHANNEL) = pel[3]; } if (extrabytes) { for (k = 0; k < extrabytes; k++) { memcpy(&pel, fdata, 1); fdata++; } } line -= pixWpl; } } pixEndianByteSwap(pix); if (height_neg) pixFlipTB(pix, pix); /* ---------------------------------------------- * We do not use 1 bpp pix with colormaps in leptonica. * The colormap must be removed in such a way that the pixel * values are not changed. If the values are only black and * white, return a 1 bpp image; if gray, return an 8 bpp pix; * otherwise, return a 32 bpp rgb pix. * ---------------------------------------------- */ if (depth == 1 && cmap) { L_INFO("removing opaque cmap from 1 bpp\n", __func__); pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pix); pix = pix1; /* rename */ } return pix; } /*--------------------------------------------------------------* * Write bmp * *--------------------------------------------------------------*/ /*! * \brief pixWriteStreamBmp() * * \param[in] fp file stream * \param[in] pix all depths * \return 0 if OK, 1 on error */ l_ok pixWriteStreamBmp(FILE *fp, PIX *pix) { l_uint8 *data; size_t size, nbytes; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixWriteMemBmp(&data, &size, pix); rewind(fp); nbytes = fwrite(data, 1, size, fp); LEPT_FREE(data); if (nbytes != size) { L_ERROR("Truncation: nbytes = %zu, size = %zu\n", __func__, nbytes, size); return ERROR_INT("Write error", __func__, 1); } return 0; } /*! * \brief pixWriteMemBmp() * * \param[out] pfdata data of bmp formatted image * \param[out] pfsize size of returned data * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) 2 bpp bmp files are not valid in the original spec, and are
 *          written as 8 bpp.
 *      (2) pix with depth <= 8 bpp are written with a colormap.
 *          16 bpp gray and 32 bpp rgb pix are written without a colormap.
 *      (3) The transparency component in an rgba (spp = 4) pix is written.
 *      (4) The bmp colormap entries, RGBA_QUAD, are the same as
 *          the ones used for colormaps in leptonica.  This allows
 *          a simple memcpy for bmp output.
 * 
*/ l_ok pixWriteMemBmp(l_uint8 **pfdata, size_t *pfsize, PIX *pixs) { l_uint8 pel[4]; l_uint8 *cta = NULL; /* address of the bmp color table array */ l_uint8 *fdata, *data, *fmdata; l_int32 cmaplen; /* number of bytes in the bmp colormap */ l_int32 ncolors, val, stepsize, w, h, d, fdepth, xres, yres, valid; l_int32 pixWpl, pixBpl, extrabytes, spp, fBpl, fWpl, i, j, k; l_int32 heapcm; /* extra copy of cta on the heap ? 1 : 0 */ l_uint32 offbytes, fimagebytes; l_uint32 *line, *pword; size_t fsize; BMP_FH *bmpfh; BMP_IH bmpih; PIX *pix; PIXCMAP *cmap; RGBA_QUAD *pquad; if (pfdata) *pfdata = NULL; if (pfsize) *pfsize = 0; if (!pfdata) return ERROR_INT("&fdata not defined", __func__, 1 ); if (!pfsize) return ERROR_INT("&fsize not defined", __func__, 1 ); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Verify validity of colormap */ if ((cmap = pixGetColormap(pixs)) != NULL) { pixcmapIsValid(cmap, pixs, &valid); if (!valid) return ERROR_INT("colormap is not valid", __func__, 1); } pixGetDimensions(pixs, &w, &h, &d); spp = pixGetSpp(pixs); if (spp != 1 && spp != 3 && spp != 4) { L_ERROR("unsupported spp = %d\n", __func__, spp); return 1; } if (d == 2) { L_WARNING("2 bpp files can't be read; converting to 8 bpp\n", __func__); pix = pixConvert2To8(pixs, 0, 85, 170, 255, 1); d = 8; } else if (d == 24) { pix = pixConvert24To32(pixs); d = 32; } else { pix = pixCopy(NULL, pixs); } /* Find the bits/pixel to be written to file */ if (spp == 1) fdepth = d; else if (spp == 3) fdepth = 24; else /* spp == 4 */ fdepth = 32; /* Resolution is given in pixels/meter */ xres = (l_int32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); yres = (l_int32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); pixWpl = pixGetWpl(pix); pixBpl = 4 * pixWpl; fWpl = (w * fdepth + 31) / 32; fBpl = 4 * fWpl; fimagebytes = h * fBpl; if (fimagebytes > 4LL * L_MAX_ALLOWED_PIXELS) { pixDestroy(&pix); return ERROR_INT("image data is too large", __func__, 1); } /* If not rgb or 16 bpp, the bmp data is required to have a colormap */ heapcm = 0; if (d == 32 || d == 16) { /* 24 bpp rgb or 16 bpp: no colormap */ ncolors = 0; cmaplen = 0; } else if ((cmap = pixGetColormap(pix))) { /* existing colormap */ ncolors = pixcmapGetCount(cmap); cmaplen = ncolors * sizeof(RGBA_QUAD); cta = (l_uint8 *)cmap->array; } else { /* no existing colormap; d <= 8; make a binary or gray one */ if (d == 1) { cmaplen = sizeof(bwmap); ncolors = 2; cta = (l_uint8 *)bwmap; } else { /* d = 2,4,8; use a grayscale output colormap */ ncolors = 1 << d; cmaplen = ncolors * sizeof(RGBA_QUAD); heapcm = 1; cta = (l_uint8 *)LEPT_CALLOC(cmaplen, 1); stepsize = 255 / (ncolors - 1); for (i = 0, val = 0, pquad = (RGBA_QUAD *)cta; i < ncolors; i++, val += stepsize, pquad++) { pquad->blue = pquad->green = pquad->red = val; pquad->alpha = 255; /* opaque */ } } } #if DEBUG if (pixGetColormap(pix) != NULL) { l_uint8 *pcmptr; pcmptr = (l_uint8 *)pixGetColormap(pix)->array; lept_stderr("Pix colormap[0] = %c%c%c%d\n", pcmptr[0], pcmptr[1], pcmptr[2], pcmptr[3]); lept_stderr("Pix colormap[1] = %c%c%c%d\n", pcmptr[4], pcmptr[5], pcmptr[6], pcmptr[7]); } #endif /* DEBUG */ offbytes = BMP_FHBYTES + BMP_IHBYTES + cmaplen; fsize = offbytes + fimagebytes; fdata = (l_uint8 *)LEPT_CALLOC(fsize, 1); *pfdata = fdata; *pfsize = fsize; /* Write little-endian file header data */ bmpfh = (BMP_FH *)fdata; bmpfh->bfType[0] = (l_uint8)(BMP_ID >> 0); bmpfh->bfType[1] = (l_uint8)(BMP_ID >> 8); bmpfh->bfSize[0] = (l_uint8)(fsize >> 0); bmpfh->bfSize[1] = (l_uint8)(fsize >> 8); bmpfh->bfSize[2] = (l_uint8)(fsize >> 16); bmpfh->bfSize[3] = (l_uint8)(fsize >> 24); bmpfh->bfOffBits[0] = (l_uint8)(offbytes >> 0); bmpfh->bfOffBits[1] = (l_uint8)(offbytes >> 8); bmpfh->bfOffBits[2] = (l_uint8)(offbytes >> 16); bmpfh->bfOffBits[3] = (l_uint8)(offbytes >> 24); /* Convert to little-endian and write the info header data */ bmpih.biSize = convertOnBigEnd32(BMP_IHBYTES); bmpih.biWidth = convertOnBigEnd32(w); bmpih.biHeight = convertOnBigEnd32(h); bmpih.biPlanes = convertOnBigEnd16(1); bmpih.biBitCount = convertOnBigEnd16(fdepth); bmpih.biCompression = 0; bmpih.biSizeImage = convertOnBigEnd32(fimagebytes); bmpih.biXPelsPerMeter = convertOnBigEnd32(xres); bmpih.biYPelsPerMeter = convertOnBigEnd32(yres); bmpih.biClrUsed = convertOnBigEnd32(ncolors); bmpih.biClrImportant = convertOnBigEnd32(ncolors); memcpy(fdata + BMP_FHBYTES, &bmpih, BMP_IHBYTES); /* Copy the colormap data and free the cta if necessary */ if (ncolors > 0) { memcpy(fdata + BMP_FHBYTES + BMP_IHBYTES, cta, cmaplen); if (heapcm) LEPT_FREE(cta); } /* When you write a binary image with a colormap * that sets BLACK to 0, you must invert the data */ if (fdepth == 1 && cmap && ((l_uint8 *)(cmap->array))[0] == 0x0) { pixInvert(pix, pix); } /* An endian byte swap is also required */ pixEndianByteSwap(pix); /* Transfer the image data. Image origin for bmp is at lower right. */ fmdata = fdata + offbytes; if (fdepth != 24 && fdepth != 32) { /* typ 1 or 8 bpp */ data = (l_uint8 *)pixGetData(pix) + pixBpl * (h - 1); for (i = 0; i < h; i++) { memcpy(fmdata, data, fBpl); data -= pixBpl; fmdata += fBpl; } } else { /* 32 bpp pix; 24 bpp or 32 bpp file * See the comments in pixReadStreamBmp() to * understand the logic behind the pixel ordering below. * Note that we have again done an endian swap on * little endian machines before arriving here, so that * the bytes are ordered on both platforms as: * Red Green Blue -- * |-----------|------------|-----------|-----------| * * For writing an spp == 4 file, the code below shows where * the alpha component is written to file in each pixel. */ extrabytes = fBpl - spp * w; line = pixGetData(pix) + pixWpl * (h - 1); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pword = line + j; pel[2] = *((l_uint8 *)pword + COLOR_RED); pel[1] = *((l_uint8 *)pword + COLOR_GREEN); pel[0] = *((l_uint8 *)pword + COLOR_BLUE); if (spp == 4) pel[3] = *((l_uint8 *)pword + L_ALPHA_CHANNEL); memcpy(fmdata, &pel, spp); fmdata += spp; } if (extrabytes) { for (k = 0; k < extrabytes; k++) { memcpy(fmdata, &pel, 1); fmdata++; } } line -= pixWpl; } } pixDestroy(&pix); return 0; } /* --------------------------------------------*/ #endif /* USE_BMPIO */ leptonica-1.86.0/src/bmpiostub.c000066400000000000000000000051031506303110300165120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bmpiostub.c *
 *
 *      Stubs for bmpio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_BMPIO /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamBmp(FILE *fp) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamBmp(FILE *fp, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemBmp(const l_uint8 *cdata, size_t size) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemBmp(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !USE_BMPIO */ leptonica-1.86.0/src/bootnumgen1.c000066400000000000000000000476731506303110300167660ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bootnumgen1.c *
 *
 *   Function for generating prog/recog/digits/bootnum1.pa from an
 *   encoded, gzipped and serialized string.
 *
 *   This was generated using the stringcode utility, slightly edited,
 *   and then merged into a single file.
 *
 *   The code and encoded strings were made using the stringcode utility:
 *
 *       L_STRCODE  *strc;
 *       strc = strcodeCreate(101);   // arbitrary integer
 *       strcodeGenerate(strc, "recog/digits/bootnum1.pa", "PIXA");
 *       strcodeFinalize(&strc, ".");
 *
 *   The two output files, autogen.101.c and autogen.101.h, were
 *   then slightly edited and merged into this file.
 *
 *   Call this way:
 *       PIXA  *pixa = l_bootnum_gen1();   (C)
 *       Pixa  *pixa = l_bootnum_gen1();   (C++)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*---------------------------------------------------------------------*/ /* Serialized string */ /*---------------------------------------------------------------------*/ static const char *l_bootnum1 = "eJy9nAdUU1kbrs8hkFACCQgYakKTiIChgyAJvdgAG44tVFERQRFR0SSU0AWsgChE0MGxgV1s" "CaGpIOBYQFEJomNBDaIYNJAbymHmTvz/deJd/3URyTorS98ne+/ve/e3i2LA2sQQwpKITZvX" "bowhWCvO37IhNGITYWMkIXZtImE2wcraRlHRfeN/+EzoxsSIzeJPkRRHP76ctHIWIXHT+BNz" "wraJd4qZAfN9lBW1FQEAUPbz9QwS/8aKXzhQ/Bfw9CmFJf6lEOu7bDMA/TkcOs169GG8V3C8" "x8YNGyJi4gHS2YEbf4gfOvp5ui2SLwoTiEp5GDIXk8DEpGvpu4YnCug8EnYnNQp5FEX9Auox" "1F3CHeUXJeXzEDa+n/DbAO0HRjh7wNV49D/w85rvecadmjwm2wq2bKVJ2bL7Z92EJduq40uu" "i/ihCST7G52XIsNFyDGRxl+AHFcCCxWsipDXo1IThQCw/PTUz6tXbNOR0GgNW6Oy+DV1TKPg" "mcAclkZrt+Eupvjh7AmNjlROLCWZxUhh5IKpHVq4Qk6GXs5HG5LwJVVgxOFzk3k+ctx0PBqz" "gKQbQ42i0kEVggxwWU155/GZHs8ltNvA1q4y+f32XO//Dku7jf33vtHe5AZ9vwu5fAqTxUhn" "5aaxDjNYN8CskfMk4V8hAgMu343JQ2EK77JJtxiMGwyGVjKOUsZI4wEYLkoHQK2ewpybuIoh" "od9WKv3j3/2Udx4zf03/Gi7fh8nKHdOvl3Pv8ph2lKc1dU8aj4wF5XRwux1IFxxIVQhVJQ+y" "kgcew8VoMfH2wKetGhsKjhpNl9BvJ1Xf0RzTb8OYkQlLv23lkW3nxQ9nQvpfcPilDB4eNxxC" "FYDeeBxOn95uhWRuRqMHcLhwHLYbFWyCBoFUB9XFelbmdRJq7aUKIuPftlnu53hYau1eFPmZ" "iB/6QGrZzXwgo0NLn2/jUrUmUVjKG6Ix00Va+k02LjGRghdsvghQ1yOz25LorH4AYZMfl8+6" "VcBzseGSdzFFXwH1MH11wpytiRIUDrApVCf7vK3WjFJYFPbe+bjRT/pBFI1ioSk3GDzEZgSX" "m6KMTg8RWGFFG6lRqB5kWXEDVxndgmEIwAA0k0zh96OwSTiiCFf50cO5bW7ZEZFIB1i+xFLm" "TeS5IxIcjv/Lvu9gdZCoIH5oD8UdNruNTQcU0Wh8MG5kgCQ8GCIw5fJRGdG4XR2kJHqZNhNl" "h0Z1v8HIzxYigKWJU901PsoMSIh2kqoLjXd4XrtBOyzRjiyiXaH4odO4aI071coAQR7gOGge" "OIWujrXokL1cpb7n7tLWQ72E5MMtltqC6GV6RN0Ip6Bzp2chzu86kjSE0+jtOPjVTEK3lXQJ" "VMq+7/RoptxoI7lCvYbQGksv5ZFsPDbbIH64IQcRaGHsF6Bug7jfrKEKmkf7Pk4vPIrcxO5C" "u7f0oZWFaEwf+NxZozLqTKm7pHr4eVRd/DIYU9/vdQleHoXS/3xIfesIg4d6iUKS5grYfL4H" "yOXgkeh0xhWtHDlch5sAg7bpbgi4+CEA/UgERmli8UkBbD4dTGUMAh9+gBe+YbCiUhEIWEyz" "Sa0hakyRpIGfcdXEL/wYTe2MMmNYNJArsJyMmjQ6D/8DZOIpXfRUPNCPT8jQPSbA2LS5eJdd" "RWOBoyIbEgBcdiQxt5V+vyupFn6OVZ9U22rXFgZLLeQPlo+rtbjLUaBT0J7tMzWp/p0q0bdV" "Frl0LOkL/0BonJ0Rp2nsgouU3yD/3UnpY5pRzvktpDuEpuP3Xj06EthUk6/faxnGn8+x0dlg" "Z5hr9vgkPudD49m/ol8hjEBLMwuW4xtJNPjpd7QV9cfQXl/E3YKFBqXfxeNoEXerlekE9VRe" "aXBwjUy5VRaz3td8xcsSwF9RLYl6yvxm76ar5RuOOsZ96pnLIC4Uti6WWZnyxm/RD9tvrzuf" "Tmu1qFO821jDyzdVbROc3g5Ym9kRm7fg2iSh4Odkjcmxop/+jA4LCsrJ/pNWmYfiilABSUCW" "Dr0QTBaB/XgC00Ps4PD0dfoy/S9TyLjdiDgydgBhZR1F7aYXbsYqONDnUqkCoJ4wKBLZALlf" "KQ+YJ8qcJEng5+spkz3P4u1dbVgkUL5eMkGSyM5nxwK78SRdqmzoEArdKPKIdVZ34COsAs6A" "lceHKDIeP8TWehfhiIjB4JHV8SMcdhu6oqjAKkB5AJRDIsuGlAMG8CSy2MiKAGDOi5k/nFTc" "LSSp4OfvXxj9UP6eoNrQIu50JKwsx0vWMmXJTXV/N8NY3znpUb1v2QZg7fUI92S/+b/pbcE6" "HKUKoktUdjh2Nc1TvZqwdkqOgfZRrdmXQm99XvN1fjZ/cMqH/XU2b+VO9JNkUSv3SSZzK/jZ" "fDRKEMaoZmlF6MCigrL5pJN9EcCOpTMYLFBOiR73A4VAjmDk0J/xrqRmGlCHIZOEZPn6loAu" "lbo+rBCjLOKkiPoRX5toAPAY6RQz2HTbUhIAfmb/hc4GZfbgcYDZY7EAS2lfEPFW0eFJbrc8" "TulRbcCVhlyKn9uDKWrZj4dbz+PsHNWnvDrlv7b24e+9KpcdTDaq/Oj8hna/nf/H+6qaVwk7" "FZVDNY9u3fbFW2lQ5r2cxTqf5hBJt2gNP/GrTcY4ha2bGbC4oMS/YJxrsbi7sQmj4TswIDL1" "VG2Up/qpLZ11RhUVRulBZeoLEuJcbVRU/ZqemNR47j4W3Zr8rSXOjKDIjRR+FWy//+7a7EOY" "c5Ujvy+cyUs2SznB27deEge+E9CcjG5fqyJTYOFATmDepPsVpoOyNNIDUpIghMvvzkNz3bAj" "jYiGFmpzLRtdK9LKqB192yZfS9mJ4hSm8wywKc2iAPF8kMtGRq1X5tIayEDnKZJQ2UATJQkj" "3dR7HMZsRLcEFgxkBIyhABfAaaNy2FTQEB9MSipDyhRvpqewGGCqSiwA1D8zXJYS7DgiqRF+" "+h9NJ0ZjGhcuSMqGpRFK/xET6b/ZSjGFgvPkmWo+6Yw5uL6PlyqvOf3Gnj3Zpxw64heaD9mo" "ZWNWWaGrFbYcNdy9Z9n6HpP1Rn9uiGpbvuauy7nlRVN4Kx8Il3qWDF5ySzLdkTH4hZaRd/jS" "Xotq3OWTRvcxZURn5SeaH1dKQkpnBMajV0f9rlBYkJARmPA4EeMx2SOwXH3fqfz2GFnvDE+3" "2/KnZO4Y6vPeBBGSjcrcf1/63OG60ZNXLaQ/qxI9RcVd+QJCZs0cguX073G4pBxHxQDyXy/M" "PALPB9pUoj4cZ+vYvbRP/atp7i1JNPh2QHMyrt1lA6tgoUF2YNGkHShn8kQoHQLyPoYuAPKf" "AXVoe7SIEsxh8hYkK3PzUrWZGIodniEwwOKRPZGEjzQql42pa+oWgVply+wDNrMEoHpKr3Yw" "BQeUf7Z7Tvo8lS7JBN8YjPZJwzGmwilnLWExQcbgt3GmlS0scUxT92qfg42XbagMv+Bv/8Y/" "xz2FHfTNCzFsuzij/OMc/a2Y3pVxwtTofVPOGDyof9y+84txv3onsVX2Ijd47aH5r+I/FTde" "ovuhAml7NI4YzGR5U2TPWZzOlCSDbw5+IbxB5iAYMgcsVXFH9GxvxRapBfnLRhgY4u5rTjuc" "ygKNe17XqqJl+rtKVz7ZE2Do3l2Sm5igvO+SlgFNr9ZfZn2RS7Bz5fuGhrNdVw9u8Zq9+MjZ" "pojlyV2lB6zJi/fML5Dkgm8PfqHFIHsQONFiTSxl8SRCrq2UwD58+r22g/aeVLAwk1D40p6y" "ZMX36axkwpFtjmuDCeDa7ZnU8rIq9xvJrimzO7nsGRcvpBudDpEv59C2D7U5XtSZmuYRVNFX" "+UwSCL5d+AWXDdmFZf9wcaNThxf+3tR9Sx1xx+pqL5Isa+X3qcvOtk3QXN2/Z+vWCyeCKntD" "SxYXr/l09rRzv+ey9HpfXFFZ85quI0ZvL/umXL37tXH24UCd6R17H48oD2bORL+4p3FBAswG" "vl/QnGypzcbqFrDAIL+wDBpbkA8qM44D1R5XUYlzlHR6QmsUYih+cU6p8y1WDQfMWJR6rq9X" "+6px/oPN8Zeu4l13uxkolMwIL8O13W5/cuj3td0fz6ELrn/deN07f5l+5EE7u8tHfH4CBt85" "TJ1sMe1NyjdggUnUEBoFeTyMhx4Xo+TMxNB6cfrCl4iXKdTmhlg+WcfjJW2aY6QnBx2VJO9d" "uQYRlq9FGNAf2Yt42s/y3s3zYei1PaehKT9AWSfr9GEcHidJA986oCdp6l22HoVFA1kHLYiG" "L/baQJaKOsmlTE1GWw4B7C4xUT3Gdq6UFCZduWC8/2xtr8PCEgb5BeqEj75TrZxCwsnxNntl" "OjQpPqfvt6YYZwRVaUaH2ieapNWXrjE5KqiYoWISqLrDImnfstbmjlkxKSbLV5EPlb5Z1Oe3" "SPXajQ3Yx8QnHiV726INVJ4SDyzLufVcdUipOsbeO6Ymu1CSD75V+AU+yCqEjPNtEY+P1NEI" "TTMkuGylKFlumNPtSfGdc3zKQRKrwHwIuSnZdMO5Aa29UfhA1TXK9hGDy++2Dp+3szZJNrPK" "Ovy6dH5bE1FtXeZJbmLcl7rHkZ/mO1xe4pD947cvqIxYF4OCqHYVSUDpDIOUAQAyDMsnDcMt" "sWHAE0ZCEBw8XQBi8fQeJCGyKkSAqkXao2mK63C7kipDBOJZHWMdBtEfR4hBhSaUuSKRmkh5" "KvjuL0ah3KLsZLdQTDg9MoUU8CyFDPBrXT0XVsrLSaL9f/ENS/8Z29SBdiP1++3WiuWBs7T9" "OdrTLClDSoafp4QdrX9v6XRvRlyFgkn4AN9dy32482LRhmnnLlJUfd4qvrN17br7jW1oFrq8" "NjzkYZ7G93yd3BZyTe2pbfsksaQzDVK2GGQaVk5gNVcriE1DGm/13KJaUFf88yErY71jTkyo" "vW9RD99Fw7O3f0sefrlcuU+6737fwK2e5yyij599u2el2h7RwqluMsFlVlG013lvNa8PdNxY" "XfG79VHX9V9lLS7bbzvqr/q7JJx0hQXjMThWhqkyLDjIOSyE5kgiEYIbR3CVr1NGo3GFw3kA" "QkQGkUM0JFUowmBFRHoPBi0iU/o9xJ+pHy0JZxSxCocRXDJxhJvHJlOC9ZNFHYhX78kAkNnv" "/WcWh+0oiQTfO/xCNftfpYbx2YZ4Sr7A61CgC+Bhlawqt94ktCCn+76comPgrCzTlXE13Knc" "jhPT1BeULIiKnTcb77bc3cHA5/JJDjKzhKi4Nfcm98nxbxv76n0StHR275xFs0iKigx5KMFl" "+//FOkxGjhcjk3NzI/HcHI/hckQu6BbRsrJCBkML4UB/640baWTHdmMQXBRSfqTxHpsvIsuf" "J5Daul5QhN34tt3ahDNVIYnAhW8Io7aEETIQFG7fmqhwd4kkGnzzMBo5xmdRhG/XVsJCg8yD" "9ySaKIWHeYlh4tEa6NGomCLHZeDV0CiRL8l25CU1CskT6aL7RFq+tS0BNwg2lEhGcxKbAF5C" "hE9tmw/cxJgNOl3cXSZJAd80jL7XG6O4Vsy2gUUBmQZtiILLBjzJOJwrqYyOoMZZFyAAbhOu" "4JvriS5JZdJVGcarVO9PRglgKYNcwwqoyjAxJPKiutoj98Wf8kIR5UxmcKZpMe7LZTmBl1bF" "XYq3XXHoRMXjOJ01Nv4palXDCQrPPER8z0VO1hzP9w/anR93PwiM/Au9Zr9h9naOoGHfB7D8" "qGVvYJgCW5JNOscwzia7FtEAiw1yDAv/ZmOT5GXZeSsqLjjwFfUtjDzvhGqlqRKnm8tjs/Zi" "XTBOONmGbCUHTf1ljt98b8xdo6bZbPNuWT1ZZ8j1Y5btnJntfyaGbyWI9jfgP0whfrjBfHtZ" "Ekm6NQYpmwvyCBNr0PPGkNAIt+N35fW9yqvj7Tfb98ubLZavVvBMU1jh47JEbUZdxB3iSkqS" "iY7qNOMVoukbt9XGXuWtaDx9/MQGmmhfl89x+107HHt/ErKkcwRSjmvIEUDZRcCmcvh0t2Qe" "oLucpCsQD3ICFu9dq9xMaQZqNSnmYEML2RG3W8SjCkR5YLLIiOSc36qyLwzZw8Rjv6LYCYtJ" "QqqQw88bRgEv35KAxz2x7yWR4LsBjPilO4Z04FPHfamQHCaQoqihdMQgDS2k1ql45IhwuD4c" "ToBTqbIShoQKMJ7KaBGGWoZEOpc5RRP2oxOAShPc3SYtxV2SsqXL81KOEsjEBP1dpxZHALn2" "88SgnkCX35ZQzDXtQ2QPTj9Kn2cWfuPj+2as6afjyPKrccqvSvz98mbWMxalyHnVnMu9+NSU" "bBJhau9ju/zSLfz8qTQQTzfJBBfLWksSSbeiMB5tqQbrVGERQc4F2rNGpSDEmULsUZaIO48B" "gydKQWGTsFmHGIV6DFG/Bx+/jXiJxuYjssgPynkiKhqIf+EwxbX72msJ3Xbw0/gvLPhC9mSy" "xM4dYfAQRlgbdZIulQSEgswGsgy6hSDEZLGEDXiZADskGlNmGzyMQSJf09DoviYBOblFmM5g" "gZWXwT9Q4Y/xrzHAu4fTijbbFyhLwsBP3L+wxAt5kokl3nljyx9Yj/a8oCpkWEWYhrfbndD4" "ZS+9y67LuOkGGtfPMD+8szk60dYcp1x+56FS+59rrnckOc+q8dJ7AHg1FAWPlB+OSLu2ziF6" "3q3tl1CPBmY8p2X7EySh4Ofx0VKG1hjU5+UZO2FBQW5kopo2L2esXF13yjPZMlTGO8TyTqr5" "YDlJxkTu+19YdXXL+Z+L3txL21xVZROG7iiOOvKmAIcIpHU0Xtscbbtt8c1534MeTC95N/tZ" "0y6ERbaxsaB20bAkEPz0P1rNGN/T9NrPoBEWEGRM9KGhQgdAJlOGiZBDYzK8UWhKDaG7FQWY" "t0zdeXbQtUNSnXQJXHtMXanArQ2WOsicTKzYmjRXq9IJ4in/JyzWH3WBKvfIE0T+VnSwHWmy" "Iqo7I/tey92PM2/M2hp75rbWY2Jhn7nsDM/bm4r/TPf48vShS+CHU/amSWmXWPYnhlnKNy1o" "4CvOtLUVm8MlFwbs4Ofw0Yg0vrDzW0VXPywqyJZMTIZ3NrPEnQiQazfS8PWmLrp5sk/+VFAy" "5Zx7Z5maG5Esm5v4ebdzhlLg6evU29hsX/vlztEXW/Yox3QdPrxzwxTbxtMjqtdo7be68Tfy" "V2t7HfkCbFninJfla39IEgt+Rh8dGyZjWIyXC07CwoKsyZzJ8sVLPFeEoQjLVDIYX0BCDD2U" "SYsVoDJo9CoueXSpA8MQWI0udSTgYqhhVCo1lAJMYw4oJ2FtFEIKD6NEIJCrHXCe3U8RSKJI" "t9Nv2hiK4tp57rBQoEw+sXS7pfmaKoWq7skbyKNUyu7XXq6tEcV7RyGSznzNQHMO9jXrb5p6" "tbY2b75n1tCrrqPVT8xmNGwYmInKbvxsEF/kHSisV+46qvFuC3DDdrY97+TueEkc+Blec7Jl" "YgyM98PCgTJ85D8qZ5TRUFyIzfwiY6zNIpo5tmQ2HJh/KVVZ4ZQes9s9eWrwgWjDEqznnIcZ" "57AZrvK5PcVeO04dHYmw7JxqXyInmit4zCftAsNibjqdI88qeUa0fufanhg9ZBbapvy7o0tO" "MVuoL0kp3cLAOGWaZukBWJT/qld4ca1U6AS0XNuttw13Guy6rhw4NM1SX6nWq2OFcwJpSZRf" "4m2uUY6hgxp94VltfmyvauKftc6p25kP7POO3Wio3/XhfaTKgaOnh0P2driItn+cw7HdvLhc" "AskeviEYzaHj9YopRafhRWfIEEzUlyJyx6yZ7Ez/AjuX37ypqQRF/yWKhxLF5iyIz1BbZjrn" "UWlpwWH220UfSbtDShBnhgKPB8bfNfRKa1nrt23bmRvTepHeGxs+3mFer+4ivxe9638c90AE" "mG6xeCs73bdPEk66ZQEp4wVkECL+uR1ntBiTH1SLDNnb7MWQyaivnaZlEJHV1BCvrn7W6f29" "Nybxarm+JgGPMrtmX06cvwVpORtHuz60gyz7GSkXze084MGPEkXtVYiyMznqxFrygDOS534o" "raZwpb7BVbKbg6fSMklI+IZBC4Dyq+m99ethQUKGYQEEeW0U0qt9xlXf2/LRtdGtd0L1TYwq" "KiiFwe5HWU4Pf+RXOHbWV2QyMq9MPWK53f9CDkbzJf6k78zr6/5gOPbpHY7u+aO8JgnYHEJK" "rWg7Hy2JA98ujB6rGPc/rbffwttsBNkFs8mtw3RAGY1GqeFUXKiJgAeKhF3kAqZq030ZDDfQ" "c1cAALwT6KoetLpxWFIpfOvwC+dWIOtAgbIRp5VPL+IBRh4IhHqVA4mPp+aT2Xx8hjZuxMFa" "uCZc0NjMTy/lpc/mpm9nIkSqWVo4t4x0PeAeqGYi6CiQPBtiD98k/EL1FTIJE3UZr+aJZU4b" "9X2krHIrmfk9Zjmfc5RW+IUk6jPret6POCcaN3jHqwf0nS+/HeEcEzdDiTdvt9c1xonuwE92" "J8GSOaLDe7Z7h3u3mf4RtdR0OJhQKJDRbHXZc8il45wkm3TbC6UMaxBb8P814/Rs91Bfxi3f" "pm6MpJrMelS1T87dR1X1Juto4p7sa+cbtGs03m26eHB68YnQiruqXY6BcYQdCxP0eg0HDLNH" "LrPif1Q5ODyubT28a18i8Gb77GHKpeuSK3D28G3DaEQbL8OWvKZNgcUl6YBYu3kilDNTNLrh" "Q92BYuWhxyVjNSvDBGEBjfzyst08Lkp+l3xdOuuKXkYno7AI1CK5NScFpMs9NeilDIoEKGBL" "PVmWwa6XLAvaw7cMapPd79SBpf6wUP61A3RLs4HK2HaItWZmTjJL3z50BJcWl5u7UR9fPHrb" "uuI4sr+r1Scni6/IzaryXOF2od7ocse0bfZn7CvTd+IJNTm0NWeJew475lCLZ870fDEk89zT" "a1q/kSNbkko6iyDlMhRkhFZDRmiCagH2wcNBouOZtNRFhKtBTgqxKXc0DlnOSfZycRqw0qsu" "ruqRt1V7oqAtV5S6rvbD7tbtikpni8wz503xUKprOPtsg+IyRPrGrMuW3n+Irlu8fwXq3HK8" "73jPUrKm5gDfLvzCxAJyQPP+Oa6wshwP2VRLzrErtqtfXzJvl4+nWsvUDfAPVt2vy46UZbSe" "nd/rti+l8l7CZf+96h/nrth0gLSuY9XIG3eH2+bZcxpQp4Mc4oOnn1slCSPdfsNxD/7m4hJn" "WDCQ94memPvtHl3uRXvhDU3kEOHyd2ZY47yyPMyRh8Jl78w4JXCd32+8fJBm/5G5gBk4VLAt" "OHnQb8XiL3W8lKc+tKLXO45v8Lq28Yz3zYWeDfZOg542V5zv1E6PxG8htH7bcnpT/TO1I2dW" "f/kTr6bphH13rAAvyQrfJWhONtyVxMYMWKyQFQqZbDiFVIo42IsCOjyrQJ626pljM9ie0X37" "DVcgmDroHzGxRikzfxSxNAI7rwQrHHiqOuVYsfdr74MLjm1J+fCxZ33O86L8iJU1d+/tz2nx" "vJmKjPvuELnjqY8wiEYpsiUx81fclwSE7xtGAce3+bn2XZwGCxCyQdCGcgFNiOGSG8hogiCF" "xeT5pClz08n2aMxIE8lFyOXG8vHy5+lxRuoOojB6WCQhUrbHm9giv1iJ44LGMHDhmk3NGA07" "rDOOkDDylwgBAOvs//J9tr9Vkgq+xxhNy+Mlrhf3T/TCooLc0AyIaimH35jMo8t5IHA7gXK8" "ZxnGV96MyOG7JfNAFAJrGwsAgkOEGSj3Ej1JqfDtxC9U436yzJNKwsq1u03F3gef+GOPXZFV" "JNDfuP92ztPolngWiI3coHo92rYrhV8aYPrZfP4C4bNio27bp0HL9kaom/hrRmBuJLrvfFYe" "N495lml2FKPztvydXAzHoivVau0lSbb/6WmFf+0hHV/CGttDOt1GJifhWkBF+DGC4iOSTqql" "nKGjadbjEiHm09wHvvsyHZUK/E7d21UzB2/plOHzQ/OBVtz6P98nP0deMedYWNp7/MHcIHzy" "MMe+H7FjwOVlonGc5Bq8A3xH8QvNBjkK37/HDcgVRRo3ozkiSuEwyMVHyo+AtZQhzAcMzhXR" "H0bYhan7i5Xoir1rY0ZiUxDYlBZ36294DxkuqswRiwBUCuz2UdfHfJTk+J+uMUAck6u4Ij6C" "K0L4XgGztAgCPFbkVkvWdSUlOQoYPJuAD2IMlbpGhtgU6WgRysAM3mvd1GKlRzPZfITxtz/F" "NqZ+9ltVp3WdkhTw7YMaIPUBEsgUBUxSNDJ46WmjS+hYV4CTQ2mm0XkDNNkRAqauGTuUh1Eh" "uYx0Aw0iGonazaV0oeua8ZQOMKeTsV2A0adGkZPoPKxzhwvg5eh4PO2ZfpYEj6N0fmGcZ7qu" "jiksnn+t/EzaIYzG/hufr6w6WZG8nnKFEqchW4hVU+/JvP3x3ibvOPRRo0HDSzIPI+/e26bR" "/z3HD7vqSFq9dh1+iKf/6aGf+c31I517Y9IemkXPun9C8lyZI3zToAZIfeYCckDOfx9tZQO1" "ytQ+oB6F+052r3KRJ7uyq0R8kCkidKnU9401mbj/cZJpZSHhV2mfUYAIbf2wObcNKSkdvgf4" "hcaA/A60WA0dF8kmErUYixf4F+zZn3Eu4zwYbxnUmz991auNetfVjKYcyBgwKb4dTD8Xka2z" "8M1dFv4tQR9YunR9+9IXN1syDTf8cSNsziEy7blZ3pw/U3wkkeBn/V8YL5InYFTpBMCjPT6H" "R6zR1lhfXx6r7KhJ3z3/VtrvmmebXlm2rzilf+rA6RWnU9vwT9NXefk3Vfa60Uaq0hJ1qDb2" "68nmA4sFJSdnjlx3dAqZVnxPEucf6d6a9DeQ+P1/aiXs+HkF/xOf/0bSrx19gTFtW1z/jQQZ" "GejstID7gs1nXGXwwDAEl4NQRqfjSSQSjUql+nA/ULqEYOVrMGCDERbxVdi9EQAeEqZOL3Fq" "dJNUbieV8tH3qmPKm4MBX1jK/71vNZFGZzHAHF2cvi47nb6ODQBmq9VJRSGIDElx9lKJQ0+K" "43jHYmCJg+yJFfS1BrBjKUCqNg732ookTCGA2O9hbP7vdJ4PyE1HoTEYkm40cCKECgA1LNW1" "A/MoJEnRDlKJ/k93YPwX0ZDvcP072LQBHvPM0X8l4kb6ScKCkNGDUWCOvtjUdocI2LX8PAaP" "jLWjBJIR8rZVJN3ukEQqAhiga5SV3rldIUngKBUBZpJAeVdxHSwCKC3Pmog5d64pAAQ00M41" "3HEyv172WyxYfSHfU6h71uX6S42lK6rWKyzEuS/M2jOloDTt/I0heVwrsgunBTz6oiW5C9vR" "Serv/2f3GPwX9VA6dvp7UxUfkeM6uukN4Y4ZIbmkslJoOJUOkm5+SCKbyy9N49GU1EJDBI21" "bWxuGwEBRDXrh6A6ciSne04kqcT/p2sB/ot4KPdO1Ce9asfCPcDJWxFg7e4dYhtdXdhZZxRQ" "Q9l0p2R3zb6gWIO0JKeUQgHb+UkAJ+fisv7LueTUWO1O8iGSVkXPB4RkJdjJSuruM84gJBJV" "YTH8e5/F+AAYwFgJUUftST1hApTnJsKXxt08FPahVRJQjhJR3nSTmVwRrlhkdUE8b6N36NUu" "vd9rI6ndWurOozGmfZVhjzEs7VC6nQV1HvFQpafzYpW4/Qj0B6psuK5LLZ8uZ6ziiQrGPdGi" "9AxjcAI8vWkQhU7H0OvwfHGrU3CuVlUMyXUTJ5v/ddeHMqvH5PVG6bwUZS5Cn4kwR7eg0R9Q" "lAy9HELfayQTgUZjRjcakoRrQgStXH5eOi8PzcWUndFmiufffTRgaTfucXYnUXJty0m6k3/j" "u6VO7rx6AZY5gDLp3wV6AR2UmYJTofNRcswGvCK6hdIsTGcw9LRE3OSCXrd3h9xwld8IbSUI" "BUXqZrfjNODJQPowCIgMTJBfStsOSOqX7gaeX5z8G07ejMEGPEU43AiJZEsiUBDBvfgTGYis" "EfG/YvVN6+MrnO9WSYX/0033UFINHVdo12ylyB219xvvV25+f+9x7MH1V897qPScfEN8d/+P" "ktoom6Cm2pSIEHJcpr1C9cJOonn4/djn6LODA4Mj1QEHM9ZFGJwbunw17lDXSUxgZMHSHVkD" "Vc9TeeRhTdZMcJ9VrNn9vZI1QifpTvSPb/TKewlKd4tT4GQf2kXnIQZAJioHhaNU9TMQHjbY" "yzSgB6+CHqZ8J8uTHdn8PFBDtAa4bUXhY5DIXcRIVEgZzqatBFmmnX+VMOA2KNxLFneGw5a0" "37D9DZJA0p3W+3+7QmLszDhJ3rNdJyXQZYn/Qf3cQBwnSFsxfJPaFd/+J6ICni++6VnOviVc" "9lq354NE++xzrDwqSPY/q4APKp3xZm74d5RWtb0B5frXB5Ik0u3Bk3J4Q8kZugxj/AoJrfNk" "qqNABHrYqDuQEFYIeVMSiV4tI55ByyFf49HoYZp4AJWH7CJEisB9qD9CksqARyjrb6C8tbhN" "Lh0zVXs9u3qLBIkVSbqD/DpjKMtqeqxhoUCpeu7EKvxEfakdf6wJR7rz4UDyxeZpObERWb6c" "imOJuRE7HxlEamQmyu/jbNgp+/j+o5zIEY4pceQBb9vIlk+zh12ePV35LXtV8FITwH2wVfUn" "MNJd6POL10VAh/EcCSIGg+FGB5HadHHDiOfFZLogBcROJQlpQB3KlSTcKNsTSYgcEQ8cvWQR" "38OqrQQ/iBWCqe8NBKC8qHE3TSQCAO5ht7PMF1+9foLzP62cQ2l8ova3+N7oFBOdxitN2QOa" "69ZzzM2pNl11qubTN3HoWxM1V++9vkPhtMK7tKzY83HVQTWzg4w3vVt9gum4qXTrgd2U+xT7" "m1ZOe/dXz5lTFV2oN3x8FmckEegcnnm1SYciGdysSNJNn8eHkOet+1mw2KAkP3fS39LoPFAc" "3RDi6KaNo3QwGEMgAvEDNbcZXZdDccJGAT0ICrpHJk1rRETv3kX4Xa9ikIFYJNc2t6wTRU9I" "oooH0Z3D+JxoJ3XJk1JWpH+ke5t/uBabn7uW0ZQ5Pt1QyPYf+hvI0mj0BSYeIyf8p3BNhoAE" "KTy6HBdUYNqrMBNUmANotIiRkcLDo7gYBSZKkyAbjvAasSHku+D640ikWJJtMClJCAKuXuqC" "+1y5lz9hsJOKATs5fmw+14fAYoAitPtkRfYIj+bMpSUwaZS6Vj4qo1drpMNGWIliYURub8Kc" "uWEJxFkq3sOkB+xmQFYZTfgg6gx5zW6jJQACrsGKR/o53j/BsP9fN8W/96onCkaXKHB+JBcB" "J1afqSKiOlI5bdM4pNIUHg0xq/gFm93KZtdy2thg0OBLFJDA0FueaLqY/xPtDlJp/0/38P0X" "7VA8nrxnqbWLzU+vZvBQHuJEQtiVD9RhtHEqIzFUR+EtBks1Q0fAwFWeGQKwiFcdZBI7zlnd" "waOfh6EMYxiRjObwjWKEP6c5z4i4eewnOI7/66b4Sc1y9Do+oS76sx56UA8tMvCVyRoBC+S4" "eCUmXhONN6O84WCYCDJOm0ayFTfUCAIo8cJ1aeKcv/5Ev5PUI2J8TxA2fa8sLP1QCPaAiggT" "M1kfyxWRxsxyqoXPKtk6GcuFacHE+29Prlmqb5L6ViB8tjYkeboHTg7h8FsbYva8DyVOdfXL" "yefN8Tm2T74Dkhz/vKQPJsfPdgz9Fw4o3E6M7MW1Y7tSvDimx8qa5XP2tMf29px9Fd0TTfFj" "7GvbNOuIv6Z3I6pYd+hk3S03tvLZ6uSHBUasrMPBRmeVa/y1yTPiwn5yk9I/b+uDgSEPQBVK" "RD+iDRYGNC/RnOhOb9ZQZWu9mZG2HU2ATC4QdgdpkZdOS/+JNGupezpmTNrU4MQnsKRBExIL" "6IBMFZWaT+1GGKogt5G+o7xpxrhdvqSkbmpiB7utSzwKxD8gcPGTwiev491FP1FsI5Xi0QrH" "eF3SLO4uGpZiaJJKmpxn5/FSdLmgKxMRjf6wAf1hHrovnf0GyOhNZw16oNM7cfp8K5d8BHDp" "Itb32CUe6yeipUuzo9Z7fO+OxyKXeKl6wOQ9paKZDJ4II8cUodRxI1ZEkhAMK8PJO7D5iEXN" "QH2OvBCTWhTYj8dG+nTjmwpFoDiIDgOVTLDyIBi1CvEDATw74abm0ux58ic00iXcUY86vg9E" "b86zbFg00LCMnbjW4F61choJiwjwUZ+uxYj+vDRE1l7gZq5p7/R2ZmyEojrNByxeOtSHGLJq" "SyFitWbgzFnzjsR6od5lt868m6Lc14A69te5DN/KxCg9/WU6uh3dj53scg7vjTJcHfhgWfQ6" "i7bfmWdZyEGbJ/jnzgtPRDanXPsJtHTpWReA9sZuQ1xYIdVI2TIRi5o5CqmjB8tNnXrfJORr" "9hEsOt1kNCPrvA3tSY267g0OSpZ9r1K0EsmLtjKyjORkg61WLGvbOVzWWrFTIcHbOmhl2W+7" "evd3JOB2bt+x5VIUwUkBeevNPX6FnGHBg3Ci0xfN6O1avwOxTFF6e9dRl4cjKwfZmYs8f0Iu" "XXLXmuy8ixJO3YBFDhmTiVssttybWAbzsCRqMbwMq5dqu5gZEY6xKI6oDEOv4qVXBK6FW9jq" "qGj1MNVEvYIvX1ivbs92W7QoNdP0YL7bEZ76YJ7urH4dZIVFx94752as/Xjnjp1wSd0XOcxF" "/4ET7bMlj0VZWUmX8kdL3+OzluPV35xhQUIpfxG0Vf2aMp0AeLXPIRK1OIG6yjlpYVcUx84R" "8TI5rX4qWr6rPerO3d0Un77xyHmLyt0RXk7NfsTdT6M8Lx+9evX7VfPNN88a3kjJWPDF4b4c" "2Em5JjodcfMnYNJ5Ae3J1rvlNvUmLDDI4W+YOB91j6M8dmDHQNcxKPmY7/QEQ72O+wfcFfSd" "sI+0ctvvKul04LuNdLpkQLRNGdWY69Gaax768MqUrTMqFGMEDz5mVJgce3Aye772jqRSAWpE" "1/Ct4T2dGM+v7msIJX0Pc28o7mJZ7QDtmgP/lE3N9JcktpbONWhNhietm8qXYBFD84GJsxUR" "90avgFCXbcOr35e3JFzJSEtZlhRbLTu1XXlXkWHvjjUFDa/jWvRMP57pOZKpBp5eiCDqGYlN" "OIq0R+GC3IM8iz/2IYJBzO3ec8te2RoXtLkZfSi4+77Uc598TW5SZuNqrFdA5fKWq5J3r1hZ" "S+cstCeDUrxenQ4sVMh3r4f2st8Y3ZLsxZtDjJqLY2iUUA7PpZ53UDQKCMIeOVhX2vB6Rivj" "nWVbqJ8MqLVEJd6neKZxvvY7htofZX3bjfojvsrOz2cv+k3e3uOeXwnRCv8yPQavvfCqVfHJ" "0nbSQMFq/qPDd+TMh/zrtxevkby70cpaOruiM9mZA1KS6LB4/7UDcfSsdR0B7c1LJxLP1+bG" "rVxy21i13CrLJ9aPQbi1vze+xTT/Q+Pn8FNMOsbmEFHF6M3TbBFLY6ZbDErvWcI5KyJmYOQ1" "jvipOnR1+/zAqSjZt8d/u77rjWELlRhwbXvuPHDQ1+Ia0DfkTV9Xvvr/OvH0fwCqtDFT"; /*---------------------------------------------------------------------*/ /* Auto-generated deserializer */ /*---------------------------------------------------------------------*/ /*! * \brief l_bootnum_gen1() * * \return pixa of labeled digits * *
 * Call this way:
 *      PIXA  *pixa = l_bootnum_gen1();   (C)
 *      Pixa  *pixa = l_bootnum_gen1();   (C++)
 * 
*/ PIXA * l_bootnum_gen1(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa; /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum1, strlen(l_bootnum1), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); return pixa; } leptonica-1.86.0/src/bootnumgen2.c000066400000000000000000000450621506303110300167550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bootnumgen2.c *
 *
 *   Function for generating prog/recog/digits/bootnum2.pa from an
 *   encoded, gzipped and serialized string.
 *
 *   This was generated using the stringcode utility, slightly edited,
 *   and then merged into a single file.
 *
 *   The code and encoded strings were made using the stringcode utility:
 *
 *       L_STRCODE  *strc;
 *       strc = strcodeCreate(102);   // arbitrary integer
 *       strcodeGenerate(strc, "recog/digits/bootnum2.pa", "PIXA");
 *       strcodeFinalize(&strc, ".");
 *
 *   The two output files, autogen.102.c and autogen.102.h, were
 *   then slightly edited and merged into this file.
 *
 *   Call this way:
 *       PIXA  *pixa = l_bootnum_gen2();   (C)
 *       Pixa  *pixa = l_bootnum_gen2();   (C++)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*---------------------------------------------------------------------*/ /* Serialized string */ /*---------------------------------------------------------------------*/ static const char *l_bootnum2 = "eJy1nAlUUun//y9eBNOrF3dUBFxKsw00t1xA0dRWc6xsR22x3XanTEANtExtmdJqUlu+U00z" "ZautglczS1NbZqysRMvMagbTihS5f1DxO+d3+58Dzvl20jgcq/eL+zyf9+f5PJ/nMYxcnhRL" "n7Vk/Ybla9fQ3Q2nbVodt2Q9fe1SeuLyJHoAnenuaWgYvPb/8zNxa5OWbFD9FMNQ/ePzGAsm" "0JPW978zmv7jwCvDzMhpYcaGtoYAABhHhIdEqf9UfZFxqm/AsF2Tvqn/SAyfswHQ/Po5boS7" "+s2NoTEbOWtXr16yZiPg+So/YrjqzYCIkKBog/x4uYNEJsClU8MZ/kpJIiXLlscYH82gnAeG" "KaVcORwCQaiduA3YX1yaFrQwVSDRO/GpAwbcnlI6fgVdDNT/S0TotJDfg7mpfdqZWms3V33R" "+7Q3VKTE6aR9lkY7Ok4gRXLwQiJEh9KzIqtRvvQbSoT+rpeZLz3vJqyEzchHeUAzzRBCUUZh" "Uw+70aT8Q3gemqMHsiI/JhcueMvy5yYlyXAI/IUILPcLXHf3+YdMDJS71lDq1/Z9UDcOiT10" "ggruh1pyp8iYz7BgS64Gze4+7EAKn9gerzfL1dBIEm06d9U+80o7iwlpobMiSr/M8fI9cfcJ" "ftPiLfedfvmwd8kn0DxhxJalK11uYgA8tAawUH1R+wDwy8E7OgHEDDyVBFQhKPrWQRQSWmGI" "yM2jZXxkMShozk74PMhsIQoRGkTORk25cjQHp09DXcR10B0Iqo7c7Be5AKWBQiVNH6pkJXOT" "cmUCKbGTCIy6OKGMpfdyKQZrvNZYkBqtD2vPLulNnbAmDGAlccV1dHGd6jsqkKJEYS93/DeQ" "w8GFk1w/5wikLJInv05BIHwjEFJwws2gChO4/NLK7HUYZQxGuKdOM9yyT/hlyzkuOgn30ggX" "S+qAIDOol8VOCMxbfIrLzeVym7htquldK5aV4tJbvRky0JQI2sX0CgyBiGjTzPL5tHKMaC+t" "RZsODqJm9t1UnURP7xe94P4NUz4dCJFsMDAYI4la9XFCseUH/JQpVXSk0mcE4XBj2KbiTy4x" "J+esvrnG4oSxaZf1jT25M1yWdxXk19uvcixbnlnw7ZcnZ27Q8KWe091K17VgaLx1mhKOfTRb" "6stJOtHM7qdZXV2smtMQIMlxfbh0/yrxJIifngd58U3JkpO77t4pEqQ2nzlI/Wr+1f6VuO1e" "Zfru1DHn/njDL6zf9PspS4XknNNrxqXg9ksXJi3Jqfyped8bwt2x/o9la2RrMVQ+WlOZqL7s" "+qgWu6ZFDyVSxfsoRdImmpBgQz4Tm4AidagoNpD8mXMiifxsDrn1KkNBPAYaPObxBagByDMC" "txlx/GAEZyckegKua2mFytDUexgAX50GWT/Ahd1zmDoBzOwHsK9mGqpCbZp00QSfrenUJ+Hj" "ZiW2tVnOpcw3ohbeMaFJ9T+Rz7X9ckoya1ezffOVt7UvXoyY++lFyOnm9rgpUyqidjAycz+S" "3ju+Ln3aQ/2Me6E/dvm8F3fGY5iY2hu6Gsq2D+rH+p37dYKa1g/leV8NRdKvHzZydMDe2T1x" "0stWUa/JY1/rpe7eUWiXWpG2XPje9K3xg+lJhnMucfbPbqA8jJwSndaOUK/k+r0vv+QW7Jrz" "p/V2wyrnPMmoIAGWRnuLNxuMA8O2bBDoRBM5GLyS+VIA6qRxfZQogGyjB+akw8XgGzLMoPgn" "8qUykCh8S6OQlSiXXcErJE9NRmEiIaVw6xcikXwIpnITgGedAlT1Lzb4fjy38PwVLI/27q6e" "M/3pVvPNjm6teHyKXD3zVG/6auYMHUnMExXd2qGaFHrFVxnjOxnAycIMUdHuHUUFO4JuC4KU" "AGQf28Yqq3ugFyWTwsCl9RaLZk77BcQK183V+3OtCTZL7HQSvnRgWNX0pSXp0gJ67nncqP01" "E/RcnbNCUtkXgs3xX6p2/icRTyoouXk/YP3q8nsG5JVdWVXMJWG9N176L63N9d/ufmBa70NG" "pv9Nnwd15+ch+wtrCt7X3x99ffnaRy+LFhWft6uq9rK4s4z/HUrtTX4IIU1DOVGTUa5FZDdF" "UoWpUOmiGnT8SBY+IDaBV5YohxHQTggzuiKE0gAY+WYl/BbGdnsjSVCak9pZSKLCBHnLAp7J" "nHtPQ3Y+WArtHV9N0e/4Cx2bnXWi8NBQcJFEvqgoc4d6nN3CpR+aR7aNYafCi9kGd4H1T23Y" "UQoufsYGvr6rEdBRCzOplNpGrGTt/R4elFzclGmrk+RAjWRxpUxJRr6F0R+bTKzJIdseZVK4" "8T6qd/m7pThzBDdC2GkM9cJkOY0fTtdz81NmSHE0YGan7XzcnI/1WPXa+7vZ4OTwJlrO10l9" "/EC2kvWranIAITn0XPui1KC2NQbOTht/cjJwHnXJLvpAZGBY1I6k1k9/SakZqzIem61z+CNk" "VX5e4M5fE0oz3tCTzIoOvprZtc02Dk6fbhLo1wA1fOL0nG0lP8mldY0RjnuS5zchzMMpAouo" "vdkPIRBrEGdqHpBEFYhBBCcksihkEyUuliBEwuV0sh//DSsaeKL3JK1LEYt/yN5Oo/DX0/jd" "KQzGePCJO8j0I11FBbLDklYfdg1wZja+fWYgAGTPH//n8mkPsCk9U/sEQJ2K9XvlAXPpGZ2g" "BrzS/p46qJHY9QXR0ZudhbFmj6t+x/vWe5bQz8/egsfveP3m19ofOtLHUIS2H89t/iN26fSk" "EZ++rhJuLB/JiQSHPdvxsiHTOm4rLvOss97MX479gaFx1835dUxnNDTRmkcU/0osE1wTSDsQ" "gsoU7VSrLKCZBUEfWfQSm7sswIIFRHfybY59AZ1ya+rEiXIgsgYkEDYXTkghKdPEH9jbP7KT" "ZU4hr2AlAcie65YVEmb2Acukm//3M8253uyuE9PUfqap9/sy55B62hJmThl5f2ZM9ZTUsMR3" "jmZ56anN7048sv96MutMUoTrlWHtZTZTup9d5Jz/9Lz4+ssmxqmjcUvQS9fmFJzqBqjDXe6I" "toQ2YGG0N3/LwTn0/tcEuU4wMzQPCJGlSTkCfSSNZgYR0XAGRVmJu1MTaZs6XCyX0oyEMC2F" "IW4SwVaJAfTPH1EyuYHJiPwLJnKcIl8IYDMINnMjpzCUAJDX7S6zqWxagAXSPilQR22r/ri3" "seeSVkDjTx398SLw3zWxnJct5dEQXqCQlwzxxG1EGlLpJaxdDeU8J2dfZR5ZG99GdPQiGCRw" "4+S1hD/0gt4Cc1/bjG06scYDq1x7o1enM7Q+5bWedfE6KZ8yWDrqBBGUGJlM2mknyDMVoL4p" "XDlYxr5WALMYyYTmt5HJ1Iy/wY5k+gFWrhgAURj4HJh+qIeUub2QL4UjlTSECBjkhoFzLHFv" "sSza2/0QMn4Ni88gi2rOo/H0QKi8JrI6S8zjN7MEcu/Imi30XkpGLdjRkWYMGUMkIE7wuaWs" "1g6Yv9j9bPnG+yuxurX3fPPB6dB6mVyqk27OoG4FDkEr2cnknYcFeTapaDFHRqMrcaqnALM9" "aQI5k0RbK2xKcW0lxvlw5wNMI2M0NpIrlxSq0nDlBFn5k+DtWATtjV9tIP1py7LQH3g6IfgO" "ToACKY+F8FKEPG6XqEBKZCHEFGGlAqqUnBL8LBDswRnYkoPu0dtofghtqZD1ATj7h3lKNX0r" "duXrrr2d/4uZ66kRzsqRllIQFqPbqVLGyZaCeQrQHH/sx2SIMgWii8tlOfBO5XmmQjVxURD4" "W2qZvjGRPAorWnu7HsIaRCN68uCA6QBBMgvfnBbZaFCeRVLAGSg/sZkopPUNl84WGMqBeVwf" "uLyXvZkVCYNpOBBvQK/+EaqA66tFVdtVkbP042R75JdtczEoHtp7teVg/KF/vbFAJ5SIQZQW" "IoLCkQpgJwysA0kebBlrBw3iGaYwFHJAQmMpuUlQea1A7pP7KkWcKhAI0nB4W34XKgpfKi2j" "qUbr5vOT18zDz7iEBdHeoK0HJ/HfC0sqhvJM+ktbJM6MXY6d7kH769tinKIvhR3U81U4j3EJ" "uHZ+U/uVrfcnFzazBReytnx9fMayy/rGYf+nlsNX2XpfCJvLG4FuU+B6FwVFXDhz1Q+Lor09" "qwul/ZX3OROfT9IJJWQwf5LIkFQpCAUAxwxVeS67rQkWIixyNlhvIgwcJgw0Ef7IWEycuMkM" "2kShL5YAei5ksjKRodgHOALHt1L8RJHlllgG7R15CDkghoF3W6CKSBadHBnLVQlWsPhyFxJP" "5WdsBVVlBetYpFpinM0XAoGUCzajHww2sD/w2ArQVdnJA4HHb0aUm0fU/Y5l0N6b1Tlff43k" "1djcIzoxDHjzmGoHE9WQCqmfHnz99/mnr3LW27++PilbMEZCtz0QcSrpW1WGwxnzX/M6J9Go" "1y69ah850yRtDLJX3Kpn4RhB/YC+2/co9wUrcLIzdX88FIhl0d6bLQbHVGrvuoShPQ/0myrP" "EKniVUUWjawM6qCRAuUC6TgSSmiuZW+qFXT9SP+LGJdCFwoIBFCIEvndcJyE3iHUIxEAY0v2" "Ausp5Swsg/Y+PYSaldfEXHKB6s3QwTEllL6iCWmeEE3J8Fcg6mJIBwv6yC2PRMRiMPjDGEhB" "JL8WtOEMOtJmoObCL06QaBuZepeRfAoHrCulnD5Ea07FQmjv1OpZ5dAHQRW94OsEMX9gIVFT" "bMqnqwZVqJ6rJGr0/dxGfplriL0dvZGP+8pgJm2wVlxDZCGgJKBoPTIGnm0xdZ/dnkqXUwse" "N09KXJHssc7QPMVxPUp5tmtu/NeVU7+YvjBteW3Ee+G9xsBmrCmWTXszV/9lSh/buYzlmTqx" "/Xcf9FZ/AmhSrjCG0Nd2ZGWDN0Nxai1XLisVSB0saOnNrSn0pYS4OwRCq8gY+kijl6BEkNOT" "Q8ATdnryVnF9FKocEhf5iphxDSDbe7691uTyAkulvdsPYemnoYrWhIEBZzlukZ821d3ML3Lx" "mOMW1YKYplMljnrJhhUrR79vqQopMFhksKE5t8bwkOnKkozue1MXb2eaV4k+vCE+rhMtmLfP" "Y+uKmC5z1psmZldy9YVoDNN47W1/CGUuDVPQPxZMLBpC8xXSNqtmE9NfXpkoo3HS7DmgHWhu" "Dm4zB1EcYysQ/IG9kV/0jYRIvITEZIj2Afi602qO9QG9eCyA9navTnit+wDcdn/aOBSAMWVF" "pmI6KVRy0FdwIv3SvZq1UGuI8xg2MRzv6Ph0zrSlLgeYP5MMu5p+3isWX7P1UnZPOzajgjGr" "tXHcyLHW7fMMdoZhAbQ3+SEsOjQAmq24moFRFbYnvMqgMeFpuvtwDwfDPxK9wn8MDWFk7G3e" "tMiLkDGKFGB2m7R6uE+G2w1KgeM+W7Kpv9Ok9i+H/FLIV0R2O59dXBK9YtGio0kgecX4XRt/" "IoZjsbT3/X+BtagfK0A9WegW+LqLxxbjybunOhef34ifXR9Zcuca7s24jKTy8mbPLQc5a01/" "Zte6m+Y4HXIZTdpk9dP++MiDl+eEn/0p0VMyL5jc1XlRvuTCyovLt70I8f18Eu5MxiU99nEf" "vTwKu386XvuUgDQYCxZMd4d1whtIl+3LJCo8iF2/dmsbOftMOuftCp+SicOMcpOk3BDkfrxb" "DiN97OOQDZNarhdHzJqGi93g/Ee2Epy34aTPQgOn/cWdVNpv06hLLlpFAVgQ3dbqQwzVA8Mv" "tHqgngVOLlmMF8bvOX5vbvjIPMTO+ViEQC8MrFh5ljdxS7P7MeOQF5m5CkPHn9ej/8knPzk8" "93nIz5ZlRk3G4bTmuoDJ0cfOdp9bvUgOvGWO0edwqrGNOON1W8r3lyC2O889rRPWwHZ9wH3J" "MDED4tTTJrBny1ztTzptTGeP6BxhK6mkBEc9CjaB8XtjZk7JOqqXQdwvuSFFEiY//tRyfeSe" "C35eCYe3+0NvvEgBvJbHRlWnRzR+3udZg8XRbb9ex+oQxlBfRYplORK+NGwHDhGxCBCstFZl" "PqhAyrC46hT7pRWGIIg+XyyWI3zBtxyAfBEFYwlQo0mFSLDCRK+DU3gUNtSHWPylirWqNWeA" "nsfBRsuYI1gq3fbrbfqoRjY5LtKKyj2ot1EI/He/Xv5NJBUYIzgbIYEqtLIS9o6G0HmRM2CE" "RxWi7hDKvyuUTjdGclgQDWX4K1V5nhFHtd4+rxr3oneUupQ91WZYgv9pAUBDsEQT5ZiGaWyL" "dCkNOrExp9n45l7vjLhYm5xLXKlns/HC62OsKiMMYuWHYsmPiTsSCdltDZOa53y7XlCnmOJ1" "4/nKYNrLqm0V/IUCr3lnjafx/gj7j2vnFc6o/PIExaasqyXAxINeNg+fZ9IxkJ665Qj9j+mO" "Y0SsTpADsc5TE+toY1/GSKYmejbjsrOd7TbuEA5nx881N19E9SgyHUn5+eLFkb9eUKzk2N5u" "0c+JaWaOjW+8e8LNV+wtsj4otT9iYH54ExZE+1xBPd7M+0AytuF8dQJhaMbbV81446lG1549" "xgiL3o3IaMLbaKyPXFQkUP3aIf1GBZ662pyP2ie9hdWrfWowhA4vjd7xGr0ygZSP46QBCAUn" "RCGGMxCKQmSlBUPxTSzrBJG3MFTLYlBYYkBfD7gYYPm1ddz7aqxm7X1f/Rn352Pm7ZxxOmme" "+M/PGEJwVsJAK+E3CFLl/x+MoWpSubjuQZksRyQtgBCWnZDlCbGUjGSlWCYHESkRMh4NQaRy" "EHiw3GJG8q16bKrvqZu991cjpfUO9UOLTJIHMkG+FHDicJw4nRyCUgR94i7m5Up5Hghvs5Cn" "gHgfbFIeeyTL78tkMCKFIeMsCGKMR1mAxV6rv0vf/OaLJdDe14dQs9AQDGztjLnPNGGzLQhS" "0x0PjUsyt1dGuTo7TwpL/OntiG34CTs+dGc2H14TLvF1czkQ5TP2/cotXsuHTymtqLo8fmJ7" "EzXrV29H4f1TjheVySnUmTdHlIxmvMEu+j21d3T1ZDDtA5JMTNQu49IAuWsyriB1Ax5evDtx" "xm4xmT2qPt0w8EeG64WL3UXlVRW3vBe22jpt9Y8uvdAKchOgN39dm9OLVaxbLV7HzVyN4qmD" "OeIwVWrFrl+0VdZmYD/8+MiuJvLvxzYCszNK2LdGpk981zJD397H8H1EVEjET6fSA0ctqfS4" "3eQ0ph5/OGn38xLqFXFjZw6tus5+xrayUicsjG5L+n4TQEPlE3SCGeh7mqrJE2knVcuU0ZPW" "ueqvPBlv3CBestOgZOPdrbtrl2013RPKeTwi2+gAP+7pw9cLVidO4G3p7G15GRP6qpGWCKMG" "TFHpCbj2scN69NSLyVge7Z17CK3aGp65GudWJYh0izQpm5iYfj1i9rr9L7duPJm6Cz+fLYsL" "6rZd+U6alovA8zKvkPRDlrJHU4t/LClqsa7oujUp7+7IKofskifvDx+aOD9q+OS95tSeZasu" "ygCX9QGCisLdzzFkXtrb9b8gWzDQr11dPIzPJoXUw1aJwxNcrlw4aWDFHXblGDlGaOSVyF0v" "KHkwfAQhJ0I4vXra8iNZF68VL4t3s39HNFkdfc09GI05ErNk/2v/3zZ8XSE8tL5q5GEob2NB" "yUd9j93+fz4zf/obFk57Cx9CLuL7xzh9tSuFaQIzvVLGz5Em2nF6HEjtPLEY5rA394DCVhAi" "kslUBiOZy5W/wk9cDaFPycpOpqIlXh5bmViYLW1iCVtQgPMf6twKxxCsS3pp7+zqvLG/+NcR" "euW2ThhzNYt+dZ8HOUQaRrr8gq9Psv9tVO7OB6HXw2c07LNM/2S9g53c+mZvy8KQw6E/ly8M" "jXK+yrcbi0rONdLzHX3cEnasueWNTpjKjJB47YkizvByWPZqF9Ur3SuYN4yO3YD00m0Hvj/o" "sa/41epEFj7o/znSNHsE9BW2bIc+roY+iMhyWFBFhBTEwlP2WSbeDH/VE5KIZQqA0+lAiiPs" "rSQ/+0Y2ucv0Px8v74SB2W8pt8Zdy8Lux3v9Txf4Go6Bmv/Usr72wtD6GxKagDHsuAPpbnbd" "zEmkn86yO61dL0RIY0lHKGta5q5zsQ7uffb3+gvDH4aPuluf7W54N4nQHVJwuqzC4djCLj8X" "B/MJz3FYFu1zAXWpub/mv5plO0snltmaUvPA/sW6GyY3sld2JXw2MJlV/JYdO5nhdOiAfnBq" "UruLR1twVvAHovSnmHxOah1jBphi8XD09cBJDWeOHSr6JV0yXSjakfzi+bJkn/qlC08t9OIY" "lZ0/isXSrUWvP9VUuLqa6oQ1mKR1qoYaBekIFLashj6KyA0ObYDFZXCGKqEkCEXGUCnMULDK" "ExUkjgfJPj5hbbxPY6VMnC2tZAE3xlEeziwlpGEJtM8Q1KG6f1k/5t197aqv/ycMzKwpVlcp" "8GJ4ZNRW/d171t3cOergnJG5jitvekeeDi7MIOtJr/31TWRdZtVsnDl51PVh142yowPl77xe" "LHctnNl0g37BbpbLcEfv+BMT5ZOOzLs3nUCr8vBZzE+fehVLpn26MISFsYZs4UBZqeaacV/T" "dxA+vQScm7h8Pz+EPY+u94xhr6gTvFni65z6yzDRw12Nhp6OS9Yd2HOrvDJOOhtcUPEeav30" "bD13qiDE2e+Ry+5pDe1L/8xsP9fzS9CUESaP9EuZAVx/6uccLJ32ycO/cKHBIDejbyABNE4n" "U9jK6Rt8gjZA73JafQdBSJwC0fLISgZTNfrUPaQd8ZColkn5K95HZV7sbOlXFmD6yZ4/avfU" "AxgOb91W9v1Bbld72wqdOEL/GawpSKdqBlWSu2kCEgpufMzjF/UCSAcIsUwYCh4Q+pbGvESL" "S2DdqUvJLtpO5dywR3B+whwUuCB3XnNyfdtULIRuHXn9D8NiPUe7Vb0G4gfNtsxvai9Nl3qf" "PrUY/4e4Y/fEVO5vK8l8y3uEnza9oWeEvYDjrcbsOhRyreLl2V2NLZVvkzyPIMtPBg9vm8xo" "vHHz/gHFnp1i3nPnS+04u1xXH75+JwGLpFtfno7NGBqkeZredgczPt0iXfrKuWbSJwrlfrgL" "OcC8JVRGKLcmH51eL6t5sKohFC6aGvzCMdTxmn7UV1rl79lzwgL3xvXm2ln8kMZJbFvRXQtf" "+Xrh40XDb2b3VvF2NbK6fI69O+OGPUblrX1+oF7G9a9LWyMcKrVC8/Dq/qC248HDX5HiRDFf" "KgIQnsEhYCJbiENYoJDFdhbL4LtLgOMEi0uL+AIJXyAFOT1EAH+LYpUbScf2FXrr1p2nY76m" "UT2wWbugpthYTFcF6hzXqDLXrFZLx51n9Wf+wU0fNzLyLifqpE/VhV6vNdMTndyg4WHO03Bh" "PV1854PtzOWBCeT8tuyEfRd+/bP5xqMiqCllc83NI9dnnHn39h7rwxwfy7Nu+l1YNu2zA/UT" "6d8B2N4Qr12tQ8MWMHg+xxigQ6ESEXgieu7w87FGI8PlThzQebjzVeoP0DLyfYP4Hpfg0WEH" "3HB2Dx7dPuQ+yaJ+E85a5JxJyi5pxorXPgcwGxQfUvpwp07ipw2uB3h8Ka4HJ+wUwYwuFr4Z" "JpKfSRpwk2hcOVzGvobmwKolgegUKoYswft+/HWs8FqYQPhCM4EUNHoSi8x5QvUHgLpzvjeX" "m2+mYmm0zweGUPDT0Aw2TvZNjqIgfuxR1fwgd88Wy47zpQKcQS9uvQ1ZqUpt0raDackgWAqA" "dpH3icAKvvmCwt5XCqxu3Qr5Ohb9/s8Qik+iI3Vi1e8yAJ/FfiyuaxTXPRDLCnZIYSMEpgph" "dnmZjOaqZ7GWyxU6jCgkWOW+JHoB9HK4umrqqO8chdRtW78/2JaNKtTucIpG/GDnba1qCNFU" "Q4hVTSSnMKhcuaIJQDpVA0kZj8ACOSNyjB8eXZa+U/A6xacwluCzjUXqBJ+cB2uWAu3LgWeb" "+CgA1BYEZVZtMh2LYfH5n679NSwDXrj6frEpnwFxZry4Fl5lSK05vhhcGme+bjT3ugVlYsTU" "DrftReyb7qTmu9KSN/tXZp7c63qv6Pbpq9/21P3nd0JkbemCbYcfxkIxLteVjXLc6Qq/6lXz" "YwKwSLrZe3/oVcy7o919ABqkfxRq+AyAUz+OSkFmTtjp5JPaBPy+f+ZOo8fzJHG7owJucsIN" "NllbR46ed0gaTup0If1QOGLG8d+8Mhptjk2ZvuylctKjT60pSZkLj3VWNsO7m89ex4l8/R2X" "+OBHY8m0d/kh1Ac1ZIPtxpJaGd8m3WS8O8XfIBQVtDEQdLMQVUA0vmGDDdXDQ7EWv4sFFH0h" "QjXccsiZ5j7ey4PCXZYkhgHmUofj4FTb41gE3br7dNw91iAMHK0Pvc80FNNJePGOUaO37130" "nBubP84man7+ODl+slGQNymcSbm6ZVd+hmnGmnRa+QbTk2bXetcsmXz1ZOlI5Pat2/wnwEHH" "P0I9Tlm/if7To/7Y1ky7ovyxT+56npiJ5dLe74dQ7cQ8GlapKgHZBiJgK0GIEAVyHN47kH0e" "BStQD6fH2wOB12BFLYvL5U4s+0CH9r8nNo+YWDi3sBv+ZAyUWLi22m5+GYVF0G0DYIhh7QcN" "QmUKX+rRghO2wCaMI2iTuC4n/TmLwm0j7kR5BuUiQYlNRr5qhYw7g9YC5TR2Ay6Vx+BKSL4/" "qo/fEA4h0PjjQUoA+RslAgGnAw0uDHd8iEXSbVNfx+WyBmmgjrHg3kANmmMx0gY3sdPNNHTS" "rNSdntPicAdHOu7weOd6dPG3wGdTfDJEwufGodnXix6vs3bZWrLY+vN2szzlsS+P9FLuXMFf" "zgx5UJ6fcf2T/pg7/u3Mtw/LsFjau/4Q6hiMc5231BHDffB0ZKVMQUXQDdDXAmY18VgY9Cmm" "HmToXRSsaKXFtbHuJCop6oIavAkAaiiP5h+mY5tIfbT3+yH0LmoUTx9sR0DTpLROWEjLYpED" "GQpukqwoVdqRYyhEeKPJ2egeboJIyqNAHxKr2YDT4ytpxXgyjRBvJBTx3MiBCuDZHINLN+RE" "4CHOc2fhBIoxFke3DKB/X/jyO652fQganMFCkosqAwA7cUJiFpFswvMR16FvAUTBM4F6BA1K" "Fmj4EqU5muxloZUCKTOyl1h4m/ZBlR100gDAXuK4Ge4ZiTVJX918v7/Cx3VYodsQGtx1RZQq" "AieShzPD3zWcmyTnCKR0Ek15XFynEOGynu9h+JlAszvBU8RTpfaLCSSWEhjfCZZns9iKAhQH" "jL881uawvl4ulkK3Xj4dD69oKJgaimW1MjQA6XwLiWgeFN7dOpMQWmGGvaUAz0p9TOFVy+S+" "yNsWiCXHXT1ifwlf8W4YVrBuDq5j86FG8DiNYKdaWVqBVBIrRNhduUU2GVQ+yYOQmuGd9gSY" "GehfLRPYn/iaEwA8f0zZNv0cD7u88NWtJ69/V9uw9dBDneQObp5UonwpsRMUwhBMpiaHc30U" "HEFRL2zgwTiPxnObUGJR7CoG4d5nkBk+1S+8Fy4MLFxYOEyVjyztrVU90tebHHcd3+JahcXQ" "3pwtB4eJYFWe39CmK6JIk4IILCRClhCR7Ey2DQxnjFe2cBNQuMweUnAb+ak9ArLzKyh6iwwm" "Rp7Dk+bxa74hchBIljhwM91P3scS6NZ017+XbW61dbZOBIOHnZapD8aqUgzcBhCRVhpDH1Xr" "DBB/kcdlS7gdRPYmtidsI+jmb1U2eAPAiRY7w/CNLdhOW9//6VJbI3qw6FmpipJE1TopR7XU" "9k9O5ks7KkFIpEopElBcmUl4nkBgP054pkeVaShwcXfSRESVNYDMOgWLvU35XBUrZYaMHGXD" "b9grFXx166XrT7sL5EF1Qxs+lQqBlNhCJBiMVvsWX9oEg4w1CiegAoJqwvNshnmDbyRyEYDE" "nrqdxvagAjV6+QbuPbQeIvDAw619b3ZyPpZAe/u1AjS9tcCRRz06EUwdJJCJpDm7jZGcCTZC" "GF1Cpirf4pqthGnsZDkP5HhQaPz4pc7V2c4vs04oGTEsozoK9Xw+TVnFUJwqxj2bhchKP8OA" "kadfiYXlcmz51ld78yUMxlAgAHyuFQyzoWu3v3ryaG7niuXiyqxSzwtwBsDrB8Pq5582DMVI" "YjK0t1N1PaM/0USvSYJ10kT/x60btUKpCALTjA08gaf7nWyEBAJdD9A3dpi07UwW+h2B2jul" "Ot3pX5+U/Zmv3f0OGoGOg1tfaVIEJhAY3cBElkERbEnHL/M/zwVwJsCiky4/r0kzV35Hovbe" "qH6uZn0SI2V7tTto9H+fKxdIJQidfGKNOEbA9Taj7c/Sqg2/o0l7A/wXmqwGNOUh4rK6NP2j" "uH1j2HcB4LhsmL7J08uHvyNLe0MzGhxuNrmGhKE9zQ6+VAISCOQJMlUWt6QtSI+TpscBQRIO" "GOHMqNoDuXl+R6L2jqV+3e+5s6uCF+okkaqZpYHiuiRVqMQJRSFOhc0gkcxvEuOAb3NoM/Vz" "w+jfkae9Nw3hSjmNPOfBwZZGIAhBM4g2mpwSzQ2jcdtwpDmM8eHsjTggf4GlpOfNrLzviNTe" "eIZwCw7mM0SROrG4TjUE6YgMEcZ0sYU4PAW4TbP08f12re078rR3FfVrUp88Iv7RxyHJU32G" "qsdK5RaKGPjF3j4Mhg/DPxEAqveavxZOArFblUyG9j6h/vT6TW/8G7O3OskbPThJ+pt37YQE" "g72xSUCYV0M9cVUbAIN4CjdW7oLIXhGAn2yoJqcntT7FitXhzrMh7HJhZvQPYjHAgQ3Jgdxj" "MDf93vZIIBTSg+iqiWLZZtd7ZlTsd2KhDheZqV/reK2nRuIITc1elcDJcISJ5BX+4sRciy5S" "Fv2D6vnb8u8KigQ44HKFS8rnEfn7vyPzf3o/mTfzoKt6WacpjiSJyxL5KkWConxBkNIA4dHb" "BQ42rt3L0ti8Few2IqlXcCyHR05RrWLfKelTJkSle39HsvYuM4S6rkayn8Zl0IKiAkFfN/ke" "gSBf8CI/SOmbpthG6OmEvnTaKME9/ga9F5fJwYms9qA20KurhQVci7HfEvqaNeU72nVrexqi" "du9/ascRyDbkPJvXOWm5AaTPHoqCWtmio1Ia6amHAnecxu3CZah04yBBCYqbu9cu+v3ZJdiL" "GJg63DA2hGPmGt0DBZAxd/pKg/r1pTgnpu1L55YTXQYWIxOCTkfqSR03PNw37W2ce2jnnc+/" "uvrkSsNjEL/V/wmcAq8ZH22x2GfzCRnuwF9eH+9dLxz3HQzd1lg6XmqlwfjvDSRH1LMPx/7Q" "iVLID9At3Dy4jP1FwSKS/wI70AK2wjSDxelQn6yt+BhZncKX0sZWwxL0DQwA86/7/HQ46gv7" "Owy6lTN1PFKqYdBsBvqIy+vEQDBbzMuIRR2E6GoI7elrxdwHFrE207uOqzuwVMsW1aol3kee" "I2WQ7VEicNXUjna+qxF7Kpupw7Vi6kyiv0biIRil3Y6GRr3mjEjbV24Cl48zIfSYCLtpECpI" "ICC8YULUCkLFbTC59xS7EOZ2HdcDDrmRp+EDr2PPiDB1uDJMXdTpr8Wa5/+mndVoBMcMniM3" "7uuLH/eRgvOKtfRmzjqQ3eRGtv6RE7uruIjebD5y9O+BjTsM1i82ghUxU36u2Es4G2cmdZwx" "dtgF7w2PeEfvkebs7Slf4Rzz7lPNiGVSo6iFIXXRMwrasWA63B6mDkX9WfGdl4k2OoFN1pzs" "LR7W14H53tlm+PHQRCAs0cLJqnQjISJ2VENMxnReVyJjT8fHGx1SutWdVK/FCUEBtpGyLYpF" "mZ2jvmy13JcXOvsw1XrUqGMi+6Ujv8PyP21b1rBoNvYTuPFcbhxfbwRBOR36VED+wouXwyG1" "3DayuuyP9ogz4HRllaCOxuiOJQbz2oEr6+xNfB59xB7kZ+pwQ9i/CEia6yJ8FGnqgJRqQ6YU" "ygGwUwRCClqRvANH+JH+kicHEHQpfamoiUevzhHzcmXw4tGwhMduoJ66olqAft7BmHWSCGLv" "L2fqcCvYEHbzNBBsjanFImIxXQIQjCN9CopVacQ6MK13g/p2grd2ZOVXsNgfj15cq75u67Mx" "xCqUg1aQGdpTigPCERez2i3vg74DoJsrD3EqhGqmgvoEnvqQewx/eOTOk1W7y/wTTxDiwaR5" "Zi3Ws0ZwTNc5uO/YCXnyjpsvULJthpc+WEsuSLH77dVpXmw3MN3SbXYy1wX5J8X/A4d2+ho="; /*---------------------------------------------------------------------*/ /* Auto-generated deserializer */ /*---------------------------------------------------------------------*/ /*! * \brief l_bootnum_gen2() * * \return pixa of labeled digits * *
 * Call this way:
 *      PIXA  *pixa = l_bootnum_gen2();   (C)
 *      Pixa  *pixa = l_bootnum_gen2();   (C++)
 * 
*/ PIXA * l_bootnum_gen2(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa; /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum2, strlen(l_bootnum2), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); return pixa; } leptonica-1.86.0/src/bootnumgen3.c000066400000000000000000000606521506303110300167600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * \file bootnumgen3.c *
 *
 *   Function for generating prog/recog/digits/bootnum3.pa from an
 *   encoded, gzipped and serialized string.
 *
 *   This was generated using the stringcode utility, slightly edited,
 *   and then merged into a single file.
 *
 *   The code and encoded strings were made using the stringcode utility:
 *
 *       L_STRCODE  *strc;
 *       strc = strcodeCreate(103);   // arbitrary integer
 *       strcodeGenerate(strc, "recog/digits/bootnum3.pa", "PIXA");
 *       strcodeFinalize(&strc, ".");
 *
 *   The two output files, autogen.103.c and autogen.103.h, were
 *   then slightly edited and merged into this file.
 *
 *   Call this way:
 *       PIXA  *pixa = l_bootnum_gen3();   (C)
 *       Pixa  *pixa = l_bootnum_gen3();   (C++)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*---------------------------------------------------------------------*/ /* Serialized string */ /*---------------------------------------------------------------------*/ static const char *l_strdata_0 = "eJy9nXk01P37/2cMM4NhZqxjnbGPsoxdhRn7WpGSiowlqSSyJmXGTgiplJSt0o42oYx9iUIq" "FWXQolRoG4X5jmXcy/id07v7fH5/uO/7zHHu8354vd7X83ldr+t1DZ/jjghPnMu2vcE79gTg" "tPnWhO722rYXt8cXF7gjAmeM09I15OMz2/P/+B2vPRHbglm/ReCb/fUtBPeVuIi9c5/oEAhq" "uH2L/82X7LjGWoBPkg8EAgnY2lisY/1bkvWjBGb9AxQi0yDF+hdvoM2mYBBIQ2H2Bxxxlhg2" "+2GIpWuI+Z7du7cFhIAMC/B6OawPt9lamK6Hn9jwoIOXQkDwDGw0ingk4Ha2/3LQdYOUAS5Z" "YxGv02fz5aJWDCfS1qpIm5orBfgM1tlJ5/DKJ9sEFPIZ1GJDn9p0P7//NT7Pr1focR9flrM0" "xhETaaEun/ALNuT3aFfACeQE2mql12jY+9lHtLVcY3HVjBwzx6kFiBPD+lGY4zxX9mPVb3ES" "rn25e5H14Xo2Z5kAi9Oi67pbsQ/VRiK+Q15B7D4+lWRryUCdFLm2ojX8yZWr9pbnxWT87M5k" "IJ+JiLrDd9fImOwQVtjvRFz/Scfnq9SWB75mntGi0UboD8srdnaYenBgaQNePsU5rBpT8Xu/" "haXV+zXNiPWh1TyWN0OByQTVg6G4Lkq8IQ2uKEtJwuIGoxWS/EBoGL0BPJEEK7EwN26RQOD2" "S0hjMPnckFM8WWQj2hiD+AsM2p/gIeq8Z/VHDhAdQCBSiyCOsVGU3wLRNp3uS2B96DcPsu1B" "GZqGQ5g7BYmo6pj1Kl4q5ZVNczLiUuJJVFDa5la97hW8SloqsT6De+t7a/GhGzH7Vtyxrg2A" "JDHwDZbiLrwwr+BlLmJu6apNtqdulirH9Fu4KOtcu+3SM+0uftVD+UwUSO2RTf3+gmE7DlRd" "QKjii6h2NacEfwtVR//nKIr14eZ/bcVruLM+XA3S61MTjCQdaHysvUjV6LWVTHl6ao1JkamR" "f1/7aKrr0QI7gpJDcr3o6ybtiZcvLqS0r0oId+P9HhzZZFb1otFldOvlmUQTfpvlAWYdlfc4" "4PQAwUkvwpV7bJ/8LTjdktP7rrM+9JyH291ey4onKG7aUaOJVFE//hHaMTU6LXG3u+rGOuMD" "cQ2r4lG1BxBq/IdcjhQe9StREAxvMcVcQNYmCK1pFM3zeffePzHGw8aUf0Y7loKAjt5Yg23w" "HM0zctkRCXmMsx+wvKNE5WDUB8Qosci4Puzy3d9i1Ht1wlaJ9aH7PGMoa69SCHCezodn80O4" "rVv9PHX7LG7b0CUm0R8dxs00sIIhJZ7WWoxYTOqG8gy0rvbLtuVOJl33TgnZvikZ8tnfwMVU" "OHibP2nYqK4K1dGaftTexfywe0DFPuOA97fThTn4DP7XfPpWGZgzrA/d/r5BUeZO1qrdtfDU" "rK7BLm07q/xi0soJtKrfVs+8KJev/XyiHxL413T4kzbmFef0xL9AXqgF82grdsrbVKzu8oyC" "O/jaVScf1+TV1nmSn6tOH4Os2GlIuOIZ94wDzxAw3rzknVkWjfktPAOt43he1odb5vHc2+fe" "P27a4XWO2lxFpRihMyk35cvgCsXFJK1bSoeSNNd8rjuccgJXngnvsPZ5dB2e7MwnB2nt9Bh5" "UGyUnt427c17MuiKqV4FLNCneL+9lb4gnX9Id22eZG5oIgfdiv+10LEF3WmebvWDKgEaAQ7q" "MtfI0pBSKqr1Sx1ErzuX5OM9cfOrRTA8uFDaf1RtvfIpIW6pJ52jzcGVdvobf7XmSSieFNq9" "45sSWO/08Y93DT41YVfu9lDZbOeSuJFTvIG5lD8ImSueaPII/rUj9R7MRhWEFX17vKxMra2F" "uLBqpat1K9w4Ep8WbQl5pT7MUyN51IpOc7V1EKLf5vaj1lY5T6gku4S9tD2jpmz5HvrJnRZa" "v8tRda892vl+ztnb3+p7Zb/WqK7K8Rrl5+QD7k7mt2TgOxFlQO5k06L6zUvCnrM2tvbN8nB9" "hQe+qXVwVVX51CPyQoURj1vDmwqdGitsRb5/8hpUDFsJCwk+nK/so3LOnGEY3bDt4fMrsgGh" "cV2vbvEdsl+PYL7lOU7QjjyS3rKdEw6YRxFf3JEbKy/fAuRRNBY8ih+Z2UyjpSZIyDFAKCZk" "kInrs5ELYDSPJRakF1Cph8FSfmQyCGQMXqlSeFeCh/OJgZmRP4gQbDOyY0HEOsoE4gki5k4K" "fG3+oCKCpO/1VCF9Srp8XW+2BzFlzZHqcLmkd67JwvZ4i3qL9amecEJwr430xbiDz2KJH8Zz" "IivuWp7/cWHfdaPRY7s8JiS6ZTqMT7g4qIu7t05HT7y38nC55zVgnadffMSUExaYHcEsvltV" "N5pjAdmRhb3nnjYX7SGadplZaNfY9K4WP09hq3wH0SEYn0VQ5MjuyXdJsUebHLZxpbQi7c+l" "N5hoZyW/4N/Z1D9u2kCcGA5wjI7o2vI1/Nf3OM3q3OlBtUrQrtfq53a1ns/khANuR+b33rXN" "G00B2RGfv71YOBHuTh2R7ErqckPq1QZohmuFWBGhTlMVHnHcr6gmotF97ySmX8pK+HGmfLnN" "DNJGvIM3WuK9mosXTFW++VGG/MZS79q3WS3k2tNF/Xd7bLH4+3Cv/fg6VMCjnbbcazabHeXk" "BGZJ/iCAsC3J6r927Kxkd2HP5lejMUpFr8s3WXmi4u5YbJRL2bjpVqaBMux0r9qpznj7VORt" "EvLY3Up3ka/c6ClYaovnhcmbN+4aHKpYrdnzmLBhxBzkxgkEzIOIsH5k5oBipoP8AC2cHTux" "YY5D6pkwxyhQihQlhw6pJ6LEGLSxIlASMYrMADUgqQwtFBY6GIb3PehIo9FwNBBEgPSdCYGS" "dPhxbw6SakEKu4k58asOx3PSALMcQqwf7BxN3fJ8RUCOasOCKM9aDhyGh64jlp2qmHuhIPBK" "szJGPL8YN4D1Lmzc+FJLQ6vw3RpdzffybTsTDFdHfvTN7VAkta8Y4Kvgu3eg76HnoELGTpz4" "r80eHx/dDchn6Op+eqDbxgkGzG0IL4Kpj9yXBCTMC7mM8fy+g5DsVddpc9XwpmY5kVTLXXqH" "n+FeizvFYBV93HdIHXC6kT/mdjJji5mWCt4d5cHgaXtAiX0vqM9jFatsYJKyaUTx0+ESAnPz" "5A3VTxeQjBjdV64DLTkcdNrAbIfIIt1DvU5vQLJsw96E9VNUOqweloDkxWJkp/DkCEY9hT6A" "hSS8IXIhOpi4nGksxDZHIqn2JxXj88Q0/wTuOlGENPqznkGlE5kwUPxpzaK6VXJgThZgFmN2" "C8rO/V94w4OpgDTNcSEStpfxUkgi3F1o/lJu+/GVX2g0bbVGUalJJTc/3OnlGLhgdQg+L8ml" "BC2htb3Mwks9+afCzmr9F7vLn03diQwSHMRcSfHyHNwS2cenov9p86d0V04mYM4Cvbg+qtJS" "KoCka8HrurOj3mH8ulknf/ICfpNqkmWWAAZnF8i9gZVI+2O3Ce9Aa8E7vM407Es+BvvxGfX4" "TveKLeOrxdRN91v9jFCIEP/xrsblbu5y/Z7dh61WcUIBMx/Ci5GPLLcTDSjyWf4V+cDzkS9p" "NvKB64n4GUgdDxJzMCqCNoZOwnKNe+I/wbwO5ptY5ZuEjDFJXJ0OOOhF01oslpXk+BhdsN+k" "yMcJAsxY/EFsYAc9l4U0cnZ1SAgISSEl+/JYbilf7pjQofjVRmZtmvKyNSgbkY2NYZ3e5uHg" "IIlM/i4X+e+wVXTN/gPyF8s35K3gu2wryFhhwvM2X/rb8p7dz22GBMR09JPMJSR3c5IBcxXo" "xSXy6alU+y0ydgZptOho/cgkHgHEBFYSMxM7Zo0/CG88TGUQRLAwliDNrg18RgXZ+F0AEZ3P" "gMGfmo8zoSD1/dp8u+6+LOJ8fmBu4Q9iATtHdJ5/fsv22tl0A0IqMil3sfIUuWjiej/J8rnA" "RLuwuanRmhT5FzYKkXLpa07Re4N3nsFdDMTfRhX49364900qt3L9rUtSlNfXjN2kBK8GK/Br" "Vjno3Ggn+jdwYgHzDH+gsmwxWqjxrp4LBwieLnMRVR2uoowOkFPpE2u1QbTbOgtuZ9zZiI8y" "oUImfFINSkGuY2aVxIxVF3QS+k2XYwZEdvp9F/6I2JI0c8SiY/xE/LHOr1w2w1pvL4QORnBy" "AXMP/0GGrNkRoZlJpSO/sGQolTTFskL1WB5EIhNDGR+PhiI+ktVoNMFmhAUZXHraFwU9GYyK" "o74xYTjSQDfi6TCF3jUgy0Yt5zeoHeKcKMD8wn94c1YtoBjSOkFxCDICipTEDBN1CVOJ9MM2" "DDkRbMLgEKlPsHHaJgeb9FoKM0MtPQCpx6KuJnqDNnboOWJ763ZyPL4OMEMAX3z8mj2o36tD" "sFNZWfbjt3S20OANuAiUgCzUfL2LgjkEwnLvYpvQviIeL5ZxPiEwmUcvvtqDpJYYQH9gncU/" "MI3WSaPwzf1xrZuQmWOe+IA5m8yKStwzKodp0aNyszGpXgtU0qT1roW4bgfnYwNT8v/gTtYt" "FHjaF0qOzk7as29uhYZ3aYoS3xMbfYqGZTY5u757l1tUcfyAQ6+uhYKgkPGdVYaCr473qx63" "cDp/pRwdqmKnIttax4WZ4aHz3z2z8p3pWUk5TipgUv4fFoO92xkLux3yHTknFDDcglAImQg2" "fHTsQzZMwafWylKZveZBxtxMUBdTCrR+u268F++0NefjAxNw1GLcaXoZKAHIXjksxNM6lmUk" "iFh2SR0ct7cOzL4sVlYacpb70GW0QQuo9jw8JtH8sK6KVGuvgHpJFHJ9V8KpcV2rAT58Qerz" "KuZpB54ttZ4JERDnNSoiYzx3Qjl5gMv2Hy7HikVnVUYFc6FJM6YQ8+lEaAKTMIVKwULGPRWj" "pFNeFORgY5it5mXGXEwwPRI+86sGDOL9pB++99Y+zjMHHWCa/R9soc0/bSFpISGes4VFYxS6" "NRcK8jiKe7CZNCWddBgStAr1BaK135wLAonlgiCkQeW1voVDh8kI0KbTxul5ZZZJnCzAhPoP" "FoJdrXD8ewV+zrfjJahOQc2bPY/4xHaeTQoxxIs27ooyERaS6bosmBhhlq2a90Ztt/y1Txry" "fV+SW5xvftcpf7+1bIvbzFGD3poO8QM7dR1Wh6Y7czIBT/Gl55gsarpTAIn0om1XiKbQIb/A" "CbB2GEaQIEv2C2SJHWMAZP4FAiP4zrDi8hpd6EXYh9icrkCUn3JnH4z0hTiGJTM8o0GgNILK" "rV898NucIMAkWoz1ozwH8u6my+8dILDf+oXjkQPsWrSm0jYrcjaiESRiqtbEWqduS59gcNe6" "6vdRK4d2kBErpVSONsnznNOL3fY9c4WiiUuSxpWByvA2BccnwzGBydi2Izus8p72nXoROrMX" "EuWtvcp/aqqUA08XmITPxrFlc3gBUR0dgPbewkHz7vnDLQjNWiSbtfcw6tgyV9QhiitFW7Qp" "Ac5rEXz01UFz3oBnm7sqJo8/UAcfHV/9PN9G5C78W2HdOmJLapeAjVdkC9EN/clsO95ru6i2" "6kWPTwWmgX2S6K9WistrVoLP8WzZsKe6O5iTFZgZmF1K/Bxrd42B/W+xsjMwz7+XnUTi6Gf8" "zOrhylcHQMoavvIBTfhUsq0pzTxtc9S1feHW6umSjav40ttJ3avd35Rq+w5m8b7YfQ2bTd3g" "G3RY9tHWbw89Rov2U9HXqs/gSqRudinuFnsi3OGjNwFLeoPghARmHf5DZ8fGhcJGx8LZkIrx" "8Dt4+qBXjLq7WkA3OvIrLm03N9ooCrWXgRVLO5R35GibmacVOkS4kCfrPnf4VNKjgx/eHnc7" "aLzqecxnsYZVRQaVV37sLpd606cvX1L7o5oTDZh/EFtEq4hoTvotNLbd1Fr0D1OJBdRxJAQi" "BB1HgsajUQHF8tCTPyhU1sdUniSJAQYIFU0eAIOmEk3D5NzFsjgfGphrmH3o+fOEswd+EABZ" "ua2LWdisa4ijE1GlrXBVaYtArUOU+F3bslMzuuWH90mikfc+9Ru3663RX8Yfb6OcpFKgGwit" "kj5WijQX73f9lhM5jW4+HXa/p2WXwrOBre2mQ6ejP0W7DPJMrtYWL6hmqnASAvMRmMUQQr13" "7gugCOnFPv8vQLNCiEXXmeSkYm67Ah3DBC4/1bM0XGkm/pg9lGpqFFp1PTFMDqoRqb9S+0KZ" "VtbNwJU7ZuAahYNqQfvf2r98/Ob2qupnz1uJ7V3lzaJRBl6hVRdqECLKN96DNw3YoQ4Fojiz" "aV3gXQ7/LVAeeGDMx3qvEujZgjLGZocHuxzGybcMxqGVI7imajiP+PFE7ntTSScuXM7acFEx" "SeZ5dYmu/Ov7fcuP8lphcKZxA644t/X6hF2O0U5jWlX0rxtc8g51rDJY9vleOASriMmrT8Q6" "n/Ko0B+mreZkBd7xAJCVHSj3/KMlh3tWFFJpeAmB7TrXk63zHdCeMzzowhXPNGbS2hszVjc4" "uGGe8ucWBFudsdnSciclzQJdZTOIxXuJOmi1x2qP39q4ZiThJyphiIfotu+qoLOUDhfCUPSx" "RXOE9oYTtRPDMAP4M7Kc7onkDZzIwPyK+KI2GB9wC/0tZHYNyJ0dW6KnsBD4DLnUO4KGaw6k" "UJFJzzCSM2BWkPH18rOoh1H2wnb2Ut5PYkxI4xA89MMV0EhiybaZV6CmUcf21DgJpg4lyFwG" "ZU+gfjNrz4ZUvSXWE0G8Ajqd6+W3KnECAm+EWD7fMzAY6vJbgOxqkP/C0QRrTetnTeaeEscL" "PFwRIruPtYx5HV99SmB9Jaqd4JQxqJeoYKNYYIlYphIfADvBqFA5KZR768zbp1efvqqOZ0qO" "UyroUz27c57HnDoeZv/oaFfpo0jTsr1lK5371ety5beUvU/rlrrx1t7D7hBWjINXD5ixEV2M" "u2vsHHQAiYXholgwY+mgX8gE6BssAuG3cNbuh8ntjQ5T8+r9qs3VsS2DTIIJIKQRTKYNCPSZ" "adChcieUUzP0/ufdmWzNcP3bMdLs+ZiCSHb6AD79zUNfRY06+DGRhrc6koeu3fUu13EdUdPl" "Mz34Mdnx7MWgnJ4rB+ouKulqvxeLv5828iTwS3vhtVvJ5zZGBWK7P0+ubhPg2WoQ+fOdA2cZ" "XA94i+Z8bIm3D3sASC2CFgznw6o5w+lYNBtb+FJpPqgGr0TXODRetTAnmJEU82Yke1gNpigg" "UeRpvau3EyO/Ey2b0FZwfa92xiH8I7Up3utJpk73crMnGh+W4GXNnMJJIi7voiP20BUfv7t4" "e7PqyHiY6A/NYtIq8EdBH3dBh03fOKGBOZfZ6KIyB92+/FP+b0Gzs1Vz9mZ0Yh6mxxqL3Ffw" "lFiBf+PNwIEb9EsYVB6Rp7gxKrGkAhyn3ovBYHLyMdAcjAlhTGuKCW6MLh2IjgKd7zIoyr64" "hNLrAfMyEosx5CxO9vdOodka6Lug9A8XcqFD861iJxXE+HMJXCHrMdGkT36nRVrvXH/96Zy3" "lIN7o4+mXYR2N5l6MtvipMRpss176y82QXtKzZj1QgfdAq0onzPfxn2SfPZVtbDc4s4GTOwD" "DbcQCA966+Oa6yvXcpIC8zR/IAdsBdzGPh7UEqyb9TR71HavfLo+8Eig+jLXgGNFDLiGs0VV" "quXKlI3TXRn7FaoyNTCwtLyjTjFl3NOy/sh9sNO1b9fz6OW43LH9tU9SKVVS/NipqbXGoqFP" "H1xraup591Ny79hPri0telY+pYMvOUGB2Zo/AGUXgSz+KpA2d9IogjkYTHSpFiFWCwv5hVyR" "MIMMQzBNGaYyXFgGrDbNpkIi6QSagUVcVxjDuuVgqUxq6RQRdFTSaiX/MxiGk+N/blnY+r37" "H02aEBIrrPiDcml+UQ1eOLHkBi5VZwtt5hjF72qpz32cKnn9suyYTRlamDxcwQblbXnHiV22" "WO/SzWMB+1oN9B8nbqdUkYeUkxweTAw+ew+3lPIuyi/bWPvj6uTO8B3N+xzX/HDa9EFP7AmE" "Exi4YZlvcaEOrb0ESM+3/K3FZTaZxfKPYsBPS/dqe2PSnDDUrJjqt0pWyw99rqzy3tvZqit0" "FM/Pgz9fJxcxWXs+Z7Tkh1/3Ta3Gj6Ljqgp0981PQnzfVQVd2N6Du9RlUAXOVdYyrTy6XZ4T" "D7hd+cMWwIUWkfgHl1jrKRJPr7nDxStVCk1vhO8Q3RUqYkWSPykbkEuxjJow6pRbVkgI1tqr" "baiw1qrPLZQvbu2ow6T1VPWJ4p6qk9VVjT+3vrjr7vlNJRK0XV1P51DkTAUHmD5wXzKv7c5r" "ow4B8iXs9j/GQ5YvAbN9CaEdTmeCBpk9dR2OffAbh6mxYBldAivTvGxjqOzgwHea84mBu5H5" "Ctj3KN/fS7vZbsST7UYuoSkkEfOuqljSOq6znRJYyy1VeUYiYndi5LhzTKVPSCkWKK6BLjOG" "yZjan5M7fC6+cOK56Lvbm8oahS4KpIjti77jfOZ0lbWKF2rfz/afA0iba8/K44lnH4dASGbm" "x2VfvDrICQnMlvxBbYhtSxbSdHd2mQ9L1xbiJ/CZa5FSQi434lNJJ+pSgmxQQo3L1c68HuJr" "M5W/znXoUKllDF+w6OhaBZdT2x+L1uy/+Sy97GmmQYLR2IX+rQ1MO+Z0iJ+70NtigzPvDTMj" "eG5wVk/0gV8pmX+jcl9dUwLkQdgBo41d6ZvtTfLnykUvs3Ox059Er4uJ8zqleRoqrmJ/ayCB" "b6/KikHEGlxH0rCW1V6JR13JPrzLQhV2UnwC8Xc/CurcPz7ccxQiqUlBRxt+47mA3EzozDA6" "zIkH3Jv8Yc66iy0Atax4iODpFBKUfkay8tS5kKvFpxD4lVTCvKQYuW/Hke+3vXyX6Ru/KxYC" "O8u3Lqv3HEYoxpwm3S9WW+a8bLn/EQt53gbNMJjDBsFL0Sczbj9GtvmUe95uFShceaT5i8/g" "Y66xJp7OK27Ot0xvc7bF6AMvugB8Kdl65/GvFmnsnXyfuMuk1kB4VkedsgQV7NjOw5eB3+r9" "atMbnyHcy2UK8VRtiRHdvToxNX6xb54/LPR/iMXeDNdqE2qRJTzMOhgTdlnb/uGlH30putND" "VR5Z8stqX53Q2MWJCNyazCPCwo15ACncQl3Jkt3OtFb+bJxATiyfmDnev4m7PQONd7YIx/Dh" "Tw836d+TSjvR1mK5NjPWYivkGZdhyLWpZI+EKcIJR+S3LsHn/DkM1WMHrzRfcit8+Laq9MIu" "aSdokVoYpB+qR1vDvWIbJyUw4/IHV9bYQufNFjotQda+jadvx7g5VFOSrWtzweNer5WlazOp" "rh6Q5AANj8ob0wUXY15kQjVLennEfcsNB215W1u4nCazblRLE095C/m86Ji2U5yestD/BTXg" "u9hVWv6wWxda1weTy3XL/OkvaMSJCcyuCCwupsEvtd9rRmHLnjpb9jRrxxJj6TBIPQyaAEG8" "A+G5sn9CTKUj0BAhs6G6TqJgAlMIlPkDl3m+5+wpzgcGZkD+wF+xVc/9H/7Ksmu54rHnm+nK" "lVnCKKuiYAGr/GIc89fRJ8dPfXf3EZLMtMsvzTDRcTu34pxJRLDUxy+dW+87QjZvhZ1UOMl9" "0+NbTM69zfU97vjzGaufM9zrjLNvan/6Wpk6wQFoAMyIzEaQ+ZzUGHdTHZDiefx1MyZuVtZX" "nSSb2eULaD9/Tj57QCgtzUKhEyyH3vpFtNbWH2ZV1ItabswvcGRD28iRCx4vtK+POHXuPBIf" "xBt+/6WKoprGt9cPussOaYCfpehxX4me6swnNpwi8VpYCTpxIgJzLtKLot6Yd/73Dlb/1e6+" "oWPx5hbeE+JChjwhI/Rt1pW5WLXCN67DtcusE6QPbvDQtuHDW9nbTR95RkVnr1pp/jZSAlm7" "wnrbhoYdF5yfqSKg3PvqYxD91hDlVX2m9n5am069k4a+Bnf07eh8F/5FhJMT+JUSgHuVnZdv" "YN8ynKupcHdlZjpY8WrEby7hdjtpH8QbJ9gpc3/tXtJYYZWMZOays862PR34u04V7Vk+leFV" "DHQg5MfamfGXakZM9azj8Pf5su99XdrIKqs3G9ZhgmsCOcGA100ASsC/0nC9jlre+tk0/DAk" "ee0y0xGLHa2ivbt6eo8NCkX1yPnp2AyPYTCYBL8TYxauhUcYdkU2bw+2VgUfUCYqv4hTsz0N" "USuN+SjUtMJwg6wCs98HFrEp8KPGx8/jud8qhW8yQaRVhll9YyZpnKDAb50AlHN2Gm67sFOb" "ywRoOJacm2vMtgBob57N5eSU4hupr3FZmncHY1EiU9evwQcIe/2mbMgGElFbP658f7fzqFKF" "Z8OOkAP2a3RUTPXN70G+DDM5YYB5k1krpjZ/Tqek0QnIm+xdgHm4eHygKkG1RPlDsWU5122t" "8mO5WoflzDrdvmBfUKuEkVUkeoOZdE6SgHFml2gCqVe+Winrmugvxxgj/j5ugYqRrWarVxt/" "sWlItLgcIC/80V6hkOui2dHdPS+Y6eZDa/tHy2becW32IEd+Vj5gz0kN/IAIYHGMbVdC2IXN" "2VtSKIijtUh2NKQcLlTUmNQ468iy5AfvTXcdx/ttDS7/LIg2bVDWSEp3OIVJDtNBheorodUu" "JWFXlVkdOP+yU6tLGQUbeEPs9yuoSLU/o4i8YVD5IOnRjcPCz541Hmj8caFQSeekmuCBrzxj" "4d56GfdyJDi5gRsYgCMT2AbG6+8dBLOrrYrfcYGcXbopyXWUtdo2J+TrerOkUB16x5hYeTMb" "pwALL7JKZRdhVSi/3clUB0cbkQtYwWGDp8Qblw50Fp0aHNfbuWVL7PFwb3LZgUq7B8Xv3sDE" "fMklyXcstTkp/+flFrZ/MV3sN2Ji64nfoxHIHKaWLqFwEEKagiUxYwMV0AycSGxvh2GDlNyb" "A+SB2YpaQyclDkso1ZqKpsFAQih7eI++eQgnBDBP8x8u8vn966q9+fy5XtqLuA3aKdY2J7iC" "GHCzwn17h/aYC8mNNiQffefa7qDrYGEkIhR62MIWDxJ4biCgfXZnxte+DXl5D9/pTTQO37z1" "pr/XIfML8R0SXr1e+NwvuZEBgaqnTideMQQHOVgNgdsbgBGVbW/c/7Ytcah4+hnH2Vp1hVg8" "L0a8frWDGyUr5Qu8e1PU46rq8Ba5EJbhsRtocg7MLgmzHzlmb2x37E3GxRTricFz+gEIefOZ" "2uMSaz7KL+vPbQrrJHbzd98zyu24GcLZfGsIvCyjOq+Ny3rcAZmbhdseu1tmE16WNtoaBfZB" "EWFceQVnnVKUIoZLPd24vXVltx6cMBWSTO5Wi+Zu5A+59XIKJWsd6J51/17YnZOs34lsTXhP" "e97yDvbxiIrkQ9KMGq8/mhMKmJP5D6fsSwWTEUx8l1eDl5ValqmjLDEpSb5D73uNQBa0GZ9V" "e9CBem574l3PFq9poYuR/G+Kj9aSAgZRGnawPUb3UzYEWfLbZ7s8XnUsbPVhlTJuJWet5wIe" "cO9DqEdenAMFDIE3sgAsNrHVnn0c5EemcacSXTE51JxpGBJ1n3AjOsOTwayFJu3CzBBBdCKC" "iSQFQVAG8p6+3DOwulHUVOL6dmSPChMGMjtsHdLb1lbHiQG8tWU+g1AYiT8NSOcXCoMbUudM" "CzdRSCjtrBornqjzoCXai3y47cThE1aqZkFpB34QdkUEkjLzj2XkDryP6Ya0uY5XTVxT9u8e" "nWEk/IjfWoxtns4sO1IBiszH9rb6H7i+tzmwcM9Hnoj7+m+VNo9wc0ICMzNii6+ZxNDwJ0Cy" "7rk43YKXQmK9ZpqyOdK9lLPwW9tw5WFhYV68CeJqV+slpKr9eh8O5gVfD7L1rGvpPUm3Dcl8" "BynzsIbcKtrfM7l+n+KNxJVpJ+nrrjs0KFnmvEDyNEdK+GQ3rqj3QN4yTmvWaOZUN0Pg92X/" "sGlsy9+uiuBEQF06Itk3wtS8QnTiSzENloEQe/6hH4klZRGvX2dsMNxkODZacc7rQqzcQ7uV" "KRaF2dbK05gLZ3r8L+ruEb7xMK0g/aLBz7KfIT+/uznYZEhJu5kkZvRKaHLiAbMo/6Hmvtg4" "VsuMLaBOwyAQuI7CGBg3czj9WXJD71ezcSyUPwEKhRISwKhfIAgMpLJa3/HrA3nOK7+GwBzH" "H1xEZ4s1eTF55W2YzX00RQxDeD81aKze8pzPoFBoeDQmdhyDaOZBQsVmCu2TYjWlsC7K/LF2" "61ruoq4I21VCz4+s3Xw75pxl6K59W9I2NfY1GFro3/kS+5mOpX+zkcqW2vrWuA409HKJcA/8" "lGc+ELaHwRiARHrhvmxo+ny4X1tocwKNUbpELfezyi9OmqhebW4eVD5M/JCmqOzVadhL3cnX" "XndLv1iTR33Ioah89GFxUG5O2aMNHip91R/eTNXe2V85Pdoxw1CY6YJUNZi0H6gxGeegWwHc" "ggCk+5dCh/5lt1Svg7dy1/rii7aJWAWOcDW6EWwcHasHw7GfBLfIPG89nkw6j/jwJn/P/d38" "v4ri7V7bgKwkNeKXvcgc+LhWGfxqTS+3yeqYAh7OS6YrgNsOgN1+bIVmTzR6UIVm2Q7uzm0a" "uGJuuzJ1HU9/xPJSnjZCoKu43F7E1r1n7kJsRSwUI8paFS7dYxKowmonP+z3HL167h69GHLi" "/FDR077OYf2xCTKvX9uFPW+U2wzkLbuMpxmgfnlb43CNn+84IYEXVP7w+H/nwrvXXiZQR8Dw" "0A9lntKYPU72ygzMJ6sfzkK7nSudaba3ODL4YU3iz7jNVo0t3MifKH/vzqthyCfn78ZUOpdO" "iYY3Gvf5lyOuW3o5Dhb+8FxvPHlxrOx1Rkmw17bjO2b8Z0KjLadAG3uMlYKC8mM5aYHZkT9w" "kmw74vBXbkOsB0OtZiOhImKYSfbxm6pv75xKlEmalEhnZmxnIOuwpF5ZKrbHfIzKREWhkqQK" "KiR4dYoGownt6VjmWyYSVOzvyHVle/8eTh5gvkR00Ze0vDTJA+RL3P86G5n1JSwTWQdPrXNV" "VTVV89VvhWdryLd4W+7ICE37eDt1k+illULc6L08SdAbzUWp7gr0UStGw6u27d+lv6Tvh+UF" "1waAjvLt2fbtmHDVkdEz9K88x7x0LO2/Ru7nBATmSWZT7vlSwxrxs7sAeZJ9fxVY6kgisZ4s" "l3wdtM6KN7c/z7X92XBaRpZ8Sll8Rv7kxfPMqAwL+Js6u+pSFCzAwlM/vF5fQsBrI1KxKfHn" "2Uuy95YfHLfVU4y3yKxeEVtZ1D3zEP5wIDx0X8IDx61KVyXunC1Xet4+TD+1Wr3gtc5Ml9S3" "9qA3JU8q0jnhgXmVP+gCZ6/u+sVOzTFkPREqlYBFaCOQmAiMIKGUoJs/hCRNQewgkzBaDuyy" "bAKS1Gg6gRBDIBDR+RXQJAEMLR+cYvqeFGkCGsfm32VSUmaYTAgIsQ+nIriPh/NEbwUwk4IE" "sa+XofZfjAJkUjQXGwOaxs4k07HC9UjlBIgDQsABgSD0gMQmIaYIx6/ImBxHtP44MwoUdFEy" "5k1ZOWd9fQUwiyK2+Mj3aaCtgCyK89+uKc6ekexSLPPktvIk8B8iSgbUwbNFiLUqg/ZrvmUd" "GgrRTrNQWgc/Ag5rU5q5s+3rWahVMmKr7dHL6Y/0z3/aa2jp8MpfnZnKAN2jKb40nLTo48QC" "fuVnfsLEt1JfYCOANrMPHueuUMTTmZ1FCoZJMNgX16CylEMhcdL78Wma6zLGTIXMZD/llTSl" "l63bhC9ea1Jsu7Zv8H1/cdKng8Hb88ONIGtaTYNf+syoVV5r03ptedVjmmfDfY2EqQ1vPTno" "tAjAbMks3vx1M9CpR78A2RLbxXBPS6AzwRIJTAHHdlAtk8JAijBBg0jHKVAcP45Bg0kkQHH9" "GbR6Go1WR0FIUhggx1EmRDaBSQoNnILE7Qbd1lDi3+y3a/MSNMAv9eDmaExGbwIb9bOefXlu" "YbGwo2UKIiEZqcqugWWp3QKjXeYkD0ujCEZExnB8ehfecLJ5TF02NCd+g0PK8MbC7w2hdohA" "fLipzg1v21d3L734el64QcQg9IFyeAbshcESYMA9yPwulNwrAGzs4AKYesecivF0HeG3syIL" "NfigPXUrL9fCVZ1P9K5JedrbTfx+Fp+X2LTaM3O1V+VJTP8pSZqes4P+iEpgy4+ZNByi6uGy" "sttm6ek/qqtv3+uDy/ePtRskLwEGvPoBMGqw7YbNYvWj1JMEE3CcYoL5UV9IZYh6JgTnD2nQ" "QzClZghT20FeTUQEk5QziazHYnyZ9WMQiS9MTwYlLroF8riFCQY11WiNeSV8oiwBA3x66fz2" "69J4+XslVbYa2f2jLpywkqVGYQgshoGRJZRSx8GoY2QvQ3IsDenfOzDRwgBBhLlfEAi6PbUE" "Ye6nIC3YetmriUi/4zKdL6NBfRJyxkV2rZNL4ADve51fG0WuXWRAzsLpHz0X3LWNYDklR95C" "DS7+O7rHB4VMpmjaffdtuIPp6gckDA2abL3Plzu5nldwKk+lafI7T+tqBe3TfSK8oU2vZtDA" "or4nuIl/TZf8cd8CkyWmMhGAd5IAXCR2eeMfg3FYr5JzSnbPeocY7c11fr7CsyM8BYkJKYO2" "x9TOjFQNrdcQe0AIyuC6LnKhG6ob/XzXr0cPzOpCdl2y0LyUV0Q82C+ycga0r0x2PdXDgLAE" "FTDD8Af30dmGgbBohE7Ro3Xqo60SolMRRIyEIEFbl6BNoLRCCT+w+l/PoC/yiHOp+kFBjiMy" "d6Ikng4t8dDAz1EAbrB/WYaFO5hQurCwnVWg0KBfQlfg7EpE0CeL0hqfugu+UmmyfZufqbjO" "g5oFcYtS7hu8xR1lczhidQTa2IHuesv26W1b96/mNTVmUaDIVMXtbq1uS4kqMM8gshitxy1v" "/V4bD1tUHdkVtNlqPMi8S1mDBk9/A08lDXphxKkCkcOkyxu6eofzIhmOStka6LohBuqA33V1" "7kOZJbcEqq6k5thxo8Y8yv3bwBOa9/r8bwtjeowtEm7Ic9Z3tQDOGZ29xD1vtcuObJ8ApK1r" "Fy1pBIUOjoXUg3EBlCEI4uNH0hSW+qwghyqTdIKaA06QGahgUiH1TCQCwYwm15KCZpCCiHby" "TdRdHAPkx4Tl74seZlnjV6qaJTwT7l+WYALmF2YXSn6OKbyrAQVIVjew78cWsGQVY0E/jitN" "rfNL7TwXc9OvEq6AQ3NHEi9cYuwdbPCWSbbtq9S9oPh+Z99EVHkE+Iji3iR1pcHI3qkBlcO0" "s5+zY8oSbmadTBt5zq+4VsPvnJXtySXIgI//mt+C4v4HfgLS1QVfZ9k0axhQ5k7h2XMtBKl4" "V/7ZrFfVUcOEJ67mtA/q5WmmhsvkrizFtdSI47EYDaGHe4X63Rt2bzmqvKNNqBhDXMmvX2Tt" "m8TZEKEFcOio6CKNbGI/BZCwbmIrkRbf3K1STbFz17/hZTu0M+p2qW5VfInbllK60pf/UHMd" "od5rvaRU/NH27jy9QL0yknZNXnlV5NsPv5rCnaAfrWJHJjvK7dfJSknHadh3WdV4NDcvI1je" "Ob9+CTrgw8Dm6YRPXGkGpLOufxXc5/o9sE6OvnEEySLFwpbNso0KjutwmeYWTj53B/3zHJBr" "GvUkctWcdg4GJPfivm9jnvglv9Eyr9ESnSfx/uBO34ocnTXTz6T5r5VEMSCNtVp5qbZoztMt" "LYBTRkUXX7Ec4WsagOR2NTtsvJqKpSPrkbjLZAaNXDtGMY2hU2O562uxQoi0aEPMSaYp4Us0" "FBpmVCEjYKAwFI0gXxecAnlB4dBnX8BJpt9nvKfAoPMoDWUdIo3zkowWwHmi6MVAuLm4bxyQ" "1C5nE3m+oo2R7lELwALMAugt66EvBoQpcgDZkAa6EQsGk/zzMSCdEALK+GpG8xLPC3z01/wK" "RD68sRGQym78x+gvi67D64p9uF1afbm1QMv78RJy2/gUg1UzvD7c+SKzR+iAsMA+/sdRNjIT" "lObBp+fNdI8k7ZzJk1BY5R3e5Hm+RE6jSl2TvLdZ+9M0aH2JttOjYDjnPWwtgMND0YtsmQzk" "+t9iY2fni7urlrUWlDtUOsgbAkHoY8lkBhOURCTXzg4VMtAnTEEuMuvhBaYMJhWaJG3TgdRF" "iFyfnQ94BwUqg/motHwiTgiAuj31tkNsTS4sQQTMO8y+L/P29PELQWCd+faLOcQAjJUDibLy" "n/wccAwTPI7F6JeQGeAGLF8+w5ynPhYmikBSv5riA6BeTTAxxLt8cBKWYEOYYpLBDaTr0flk" "UNtOPQ0bO7ElppMDnBOKWgxujKtiDYBsg/FfNw1AODioVkXkWCrtYmoTPnUAWpJ8VOvO4KHt" "fLxlvOdcawIx+bjmNfaV7ybp8Y3G5q2mk1ya32S2OAZvqFmC4P+bSdj0dzfHEp+1/pR17xzT" "YC9ieuFhpdbIuFCCtFG1T1Ze6+CxMfVBi0rdfTa9O3OkNgSo1u/wSdBtfDhDe4kLcT0oeOdc" "4X6XaxeJOd+H1jpPkDVpJ3R3xCaF3FqCDphR+IP4zJbWhZZz9ftzd6us6EMVCiEiTWbycnDF" "5UfXl1oJi4E2dt2Y4mlQ+TTk+NbCV7FLOKihtvc6uu1tyRnc+TerVl3trWF2fAs3kTxUeZW0" "MXfk5rTLx7B+o3evek5EWjt5mEeCHLbovL2dffLmEpzAR4f+ochu/IfIzn2zQTlXro+oVZlF" "5k3ttsMkW2rg6TibzNDGLRNSB1QkS1orGjIc8XpyukaDPdHZa1VFK/cFdfGZy2wlSjxIDlTw" "3xJjMW0cAUGiNE4Zgu8uMZId4DTRPzjS/ldK680gMmH1xCYsAos5SDAil7CkiAxuSsMqYk5G" "2xBKmeDBaFx7Le2wsA5JK2zfd6I0OTiH+kbLKIPsRwZ5JhljKWEzoLrodiJo76VlTOsLVpwT" "1rT+YJIowNj+74P6CNwrWiclDgkax7r13qPSsULQcc9BjH8IIvtXLUL3TAEVLEGJwGIkQXe3" "ab4y3JY8ssRTA59FNv/URwVe7QCktn8f8TLXIgJNODYQ6rX82F6ydwp1d6qMm19gRXr+QF3s" "NtewkqQjyWYT0Ps+KpdF9V+omzwoUjR7U98iLxl0szBs5tEhbXia2GBpx5uNsmcSGqLL7/yC" "0o4ZeOEZzseXQARuKOZfpaktTb/3PTb/mn3HEt0oCp2VB+JDQEP1SAxmJho0iMWNUmhYCqMW" "nBCdaoMpGYqGoIiUC7Hvf0EaSfrETrWw/BOoAVAT7oUs5et1LAgkU6t/xp+/pGwJIODzyf5b" "arutvYAVA1lpoPWyDPcRrMDGVps+vEyBkCne2g6Fu3cqsnlFsh1uy9bCr57Trr72XOGEvtUX" "TF9hYS9r+mKKA4WLviROPS5/l6txR1ZfFHzgSfESTMCnj88zbXVCtANSLdfF4h0vbbblEaum" "dj2maEWKe1PLMjOxO/6BZxvRwSlZg7HN4xHW1+rsm2x0z59uNHavOB5cFSd0yiBnIgt+Msk8" "1vs68fB+R9/baqEzQj0G6m2wFUEazuAaoyWyW4CzRv8gNLCzW/ZAuYjZOZ6CgqBxJgzXRxtj" "yqGwcYO+eN/E2enCsLqJueHCicbc0SD6T2gCzDFqgMhlYBakg8IyX4FAVWcMToa7ungtQfI/" "Nxcco2aaGVRWegRLwCJ4SN2zBRZQPRhnwoilFkwiRZixnYlUxgA2fwoJzl8JEYkCJeUS4YQb" "kNfPqO8nTRlErtiGHOpPqpiWLqhjD+gFpHsLSOQnK7eRXfbt9t7P00sQAjMYfxAQ/yW8G9Kq" "5rJbj+yYLFEjyaKMZbu0Uqzzi0lyKqeUy0+r9Vs3B6+UeSr6vKniZFC4goD+vhlbna/XzXlC" "ucSzMjvWRQsc+qxUcvXUuubEW7u6w76Lm2ur7bzgFmK8BBswUyGy+JJVp4nfBCS8fx0/MyD1" "xAQkIhrDx5JeDEt8UWRDUAOMSSBITzXTOhENH5noHBl+qxaD/BIe+hApioHljm2PGjMH+cPg" "0aDnPyB+mi0zzB9EEGiViG7/RwqDtAQYMEfxBxGRrb26bDDHaAqdMg1OgOJ8KV6oX2AUk1Qf" "nUHQ14rCnJuBrOo0gcKgUIIVBYaAgX6FGfYK+bn4L/HgwEzDH4Q9tvxu+uctr67DeEysf90y" "CSX0ITmn0qYy0zYRJ0FrXfKInoZ/lPbsVb0kcGIx9E69xnFG/oNL2WPlSdjCNJNd1u/lLznp" "Bw0d+6LwK4Khkiwsy/vO8OKxfU5LWCKAg07/IFr8q7C8rW1h6uz2o92pg3wBw3C0+K9nii63" "rq1H1WhiHMfqRjSiFKKOpVecdP6e8Bh/Ap/1tHmdqHzvpdu8cpZR9utQdH3aN6aj4MsyD1Pm" "zlf3vZeA+p/XJ9jq68BW3yoBiiM8nv6qFFPU/6DbyY3qhKntruNG3ml6kxUlkgizzKhYmXqm" "XsL1CuFZZNWkdVDdwdogc+NLD/ab7HopMA2ftjskHh6Ah4kEFF5eAgi4nQAIxJZeZ/Zt0dkb" "eAjLLvGzga12zxAoSGmW9Tg8WxVF31xcbHhs6qnjI/ULQ2YZv94/b36b835knSV1XS4+0UdN" "yvoYdtO1r/zBuUJEVMODjuYpnvpryqmjhamcc4u0AE4//QMutuoufKHm6vqFfvzPs9fSWny5" "t5VtP1LKerHg3vc9ArupeMalgxEfLE/sid7xSKkmSOl0xWuJcK+G2Hd29x+feZ6KTaWZPGvT" "GeacB6YFcNIpajFM3PS9/RBQfFNjG4ixMwUFp6m1simSoxImvTpTlKLI9XHWfLa1sLAEqBXU" "ZyxWAgT/oEjZEmlbtcQDA/+KEoB/e7bnZo8FTptPXzVnS8NpAq6t7k/G4KqqqGHw2dpuvc/R" "MsYrRFXivA8hjDRTIwnXUQG6etGVmGdfr/evCC/E19zsN5C5lRrUemYK8vqY3gN0Ta7vElDA" "aw8Ay/rscLb4Da3Rs7WuWYkZiHacgsWJ4hjWXNzREWOxdDkhE0Tjx0C3WhoNB26QJveBFJGg" "ESapjEm6w8QeJA8eJoK+QSx6znTTdJZAAeYE/kMKsXqxSRQ997URQSIaOmYu434vKUd1WTbH" "wbJQF5OyJyRrTNqizjRZPKij26RzWOQjxavg08ecF71j56vP17vmdsK+HbVKfcDTcFAnYUos" "rGMJIuCnEgB9GzuKrWOfjS30c9mrucZ2YSyHvDD8TyMCSLamDcjeTad+dq4rRpecy/G3sDhU" "kWvYPnmn2jWv4JAyDaRRv07Zg/lde3eMbvpBy1WNQ1+5XpWq75bWtpFaAgt4VeEPD8aMF2dc" "UXglKQwmGBVAGYh17EM0jqKmkHGTUpgZSqkRNxPk+QuagCS4vaKNgeKY5mOmeJNUGsi9Rs/j" "VbSI5BIEwEzAH1R7/jXtY0Na2VzT9UO5AftSkbYybnNzGcn6ArQdYYpCN7aAxAp88v2M1Vdd" "pu8Gx+dgu+UNL+EMTKNa9fd+vr+y+p5EFaWh2nwgu/OLwNh3lfJVNj+EJgPwzNxHUmVtyztl" "NT8scWoEcOjof6hobVqsgk/B6rEJWJJr7Ri1NoaVFnHPpUXWMQXjSJj5FyLKl+w3g6z96Ngu" "2CxA7hM8K+cPXY/oicb4PTDFmTjKgW9BfMThTPDzX0i/X8xmIuhavt7gzdTSf7xa/wfeUnmO"; /*---------------------------------------------------------------------*/ /* Auto-generated deserializer */ /*---------------------------------------------------------------------*/ /*! * \brief l_bootnum_gen3() * * \return pixa of labeled digits * *
 * Call this way:
 *      PIXA  *pixa = l_bootnum_gen3();   (C)
 *      Pixa  *pixa = l_bootnum_gen3();   (C++)
 * 
*/ PIXA * l_bootnum_gen3(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa; /* Unencode selected string, uncompress it, and read it */ data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); return pixa; } leptonica-1.86.0/src/bootnumgen4.c000066400000000000000000001661701506303110300167630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bootnumgen4.c *
 *
 *   Function for re-generating prog/recog/digits/bootnum4.pa from an
 *   encoded, gzipped and serialized string.
 *
 *   Call this way:
 *       PIXA  *pixa = l_bootnum_gen4(nsamp);
 *   where nsamp is the number of digit templates requested for each
 *   of the 10 digits.  nsamp can be anything from 1 to 100.

 *   This file was generated using the stringcode utility, in recog_bootnum3.c,
 *   slightly edited, and then merged into a single file.  That program
 *   generated a pixa of 100 mosaic'd samples of each digit,
 *   which was copied to recog/digits/bootnum4.pa.
 *
 *       L_STRCODE  *strc;
 *       strc = strcodeCreate(212);   // arbitrary integer
 *       strcodeGenerate(strc, "recog/digits/bootnum4.pa", "PIXA");
 *       strcodeFinalize(&strc, ".");
 *
 *   The two output files, autogen.212.c and autogen.212.h, were
 *   then slightly edited and merged into this file, and the code
 *   to generate the pixa of sample templates was added.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*---------------------------------------------------------------------*/ /* Serialized string */ /*---------------------------------------------------------------------*/ static const char *l_bootnum4 = "eJy8uFVQHUzQrou7u7OAhbu7LNzdJbi7uy3cPbi7S/AgwSG4BAvuENyd8+39n3O169zuuemu" "qa6prpmamfd5kVRtfUwB2pZu7rbOTgAOJGVPRzNLN4CzFcDF1gcgDGBnQ0ISd/7/KTFz9rF0" "/6+IDel/VRuwGQkAfNz+Z4YJ4Pv/ZkgxqsoyqEhESBAQEKhyspLq/8VxCAhIJsj/EoiG0AHs" "/wKii6yeO8T/N/LNaDj+C+geUroeEs6OjpZOHhBO/7sZtkc89o7/1mGRkwRp6kbUZzc7HUhj" "ReZW7BaY7JBZY6MsBYWj4qJIbuY+b4nN8BBEA21C0NDmIjI3Sw2xUXBecXPmoA2R0RLhsR2+" "grn5iWzbOogNxV3uUelb/jXW9PstZY3UZN2eKJCI53ncey3fbKvB4mY8MGjjbbtK/cJ/yBrj" "YQjWYfinWa3YqbCtRqSrdzhayuHZOXDMhj+a8MTwJLrpnHBWYV9OvLMRpTHvBchG54Wvf/UN" "zmhbHDhiIZnsy07U9txvfpbmBvqt47cl45WdjUpQRiTPRASu3dWdVUioVXtthUz9bKmFQhM/" "s9XgisnSy0ADehGR13qt62Jp0WEZJwD4sMH294x74Se25iIy6Q0RnRFV+GZbqU7UPlCkotQX" "ZbEK6sZCfwUlWcsUndfry4D0rDFBFM/mH7Hn8o2jgWuHi0HUuvbILf3Ah1bGuwiTiHyixkkR" "8zI7Erfhe5O24UpxYK5fNwuHNEsUWuK2rfA3g9FWm3830Z37gvovmMjr8bTQERsGF04qBhe4" "uOK9IC1au+NvhI0LkEDVgku8f301WnoM83RVvtEiuRmhVrXiaO7KCTNw4YXV7uNbkjqj20Uu" "uNyJfCFs+C4KxsNMn1a4P8KDhzezkEXSM/I1A3x2sG04979sfL8XsDanLrTuJz21E46qnwZ1" "73lfOibw9jYrdQriTrPtKhEnkzgjcSiOlaDvdp8UAB4r8tv5xwe8Ys8uhb77nrhqd9wtL8cA" "gmUfD+fcBqr/zQQPg8Z3MG36Uxd+xoS/7GMPkONLIdgeG+1uysOliu2lF4Tv5L5TyaE8MMGs" "dHLeiBPZfTCzs0omGktVIN+68fbEfjL5eip1GwR05c7it9DqbeOUwejpjG0W6ERZFHXit9TR" "rSQowN1iRfxrUbCfvnUVRAIpysWiWeO1nZm4RY1zT8H+9Yk2RigJxCDNgueGURtPWe9a8VW4" "AEJtEpNeXrahOWn7SvT6HnRk+Cn5Mgi3AJ6KxQ4raKR6rSr2aLX9gw26oayLcUb+2rjEcqq9" "X7GnVIfMZAMc0Fgk+ny+7SvgeqSXuUUeMg9xJ37BvwwNH4g2Vrlrulc4Jlvva/A+H3X49Ptf" "wAm1kYmbGvzhr0PE7vPukNkXLJNOlLip6nZpJSUGRb1CQK3xzgWt1foNI/3IQ+Hj7ANJnREl" "01J0wrvtKsLxVzls4NzyH+xLI3iEEKRWiStDo+FZv43/uPWlji1UM7zlz88AHV6l+FIcGpQY" "yz7iSgZzT/S7TD/nWOBb/MDyLXRIhQqZJZQT7KVBZQHudrOnYe3qpwmx2vemtLGIx4qjppbM" "cVLIRnK7EadKUHomLQG6aLpYCvIEU0nQ5gaqfUrwmx4g2O+VN1UFJyRWaQ+HMGvcaMM2OmcZ" "RQt0Ta3fog0xqGeWjOs4GNSokJNFFTEkKBtoKl0uhplMxkL2QpE9opvLVn2P4iSXw1pkM0Qp" "N1PV9mfHmQSoGL8cDrh7LBsKaFthyEtAXgXq7smG40uLMBrhre31OmOOM0eRrHg53AdVLQWo" "i9X2rQOYIr8joLxlw6chg8ZKMrZOKogbxdZ9GznPusfW9XXzw0A/e1vEUdAto5yMEE5nhrWB" "0OLKYA4tlb9gyTX53/4S4Cx9rgALtN5J6gkdrHA+ihfGPeNo4xjgOu1wPQwe9Mght9pVGgNm" "kOZFpQXA9VbEucBkXEShicjyaeatDqZ3XoBkxqJQlpXxLMc3+Bsv1z/9jcX9AMcaqxhwPahz" "+aekSZAruqTTWFbLRmjrOYFCK+MwVyaMC0JzpJdyjCoF8TrF74NuLjsCHS1+T4sfdPMUl8rw" "9xEhIpiXVmnxGnbYcxbF6j+KXNEVo+UEYGbKWIvMbRLhhm9CuyBIcEUE2xFkBA/M39FbzCyg" "1ZjecfrLIKPgNjjYbDV//VgLaYxWGML+hfqzfxgeud/dfAoi/3g2FO/M65XnKqAV/TwhwrTB" "WqVTXzSBPK7izn1+wQDPF3562TChp1AEL5D8Mk4Es6HKPydZNAlb0TbOtjSzz4hTIQ+n1CtV" "ZDpxvmhoJT4pE22rJbNIqpS11TXMvgoDsW7YSIE1dAtjX1KT5CTHlFy2aL4FS62lR3SIY96t" "R2LqXgIH/B6TKwluhRkadAfdG7RgtjBjzTdGByehMK7hNF4+Qk9cCreoXO1boi784D6t3sbS" "FWcJf29WgGFksFcC4wbu6PfTeO3om/d0VqgJZORPISuFFQ0gXihtUa6TUmX+d6eXUEmaf5OP" "YfdllQhvOrCblnSK3M0lpU0Q05XJsISMV4kdZhdL2HoxtLDOdU6ms22pxyzRTUioO4+n7tUC" "DenPWf8UkiESSCMij/RB7GvqoQyLlDjuFO2vuR7epcKlWcDmJq5SjHzGcdFlh7HZsLlWjNyZ" "fXeVRW4OXg9Or8tyGNJcqVEvndlI4h2/OP2dRds6UhBUqab1C/AnUFI4RLilYiz28UIxSTMC" "PaLU+iybYdoX4kSTVGRuNdZavFoEW4CiapfiE1rLYWt8ihbIclB4o6PWk0EYRs3h15lgBFPt" "o4ChnL8J21xF+Glov2lQIkoROxwYWtb1xF39+4s3G0vOWSCv8BXsYa0Ofs/HXkUbzJ+13yzz" "xG7p17WXhBwWLkt0lTtx8pZ6jXfRn0iFYx8Znt0yHsIr3XL9ZmNhIytpVLvhm0zLFRdFplfy" "F1Fbv5l43GUNzbSi5rJDFvcg6kSJCjq+wIVtAFRKGnv/JD9qRVhKcdo/IWbkQnVStNxM2PKF" "/wNqtLosSYBdQZz+TdYGrzh5GngwSUD9w8EO8UWAIb6adRwPqwLKVXoh2+HZPgfoxEOAMUyF" "K+1NkJYyd8iKZ++SJkD5SmIFTB50sanSYoUelE0KP0Vq6WdYlwloFq8shywfqBuFzj0vDjiI" "xPaOS+VmjrJL/wHdkW1Bjti2ElOJyzvJuWZVo/dB8V1ug9k61pcQxt5Sew+/RPdFlZZVdlS/" "J32qw8KR7ipVCPNBr+Xb/oPZEbap8a/Wt/4YA7kb8W5vWb8zZWHD5GlGt2+kKA62npRv1XV/" "I3/KIJvG7MaSWVgrx2JupBN3aMPxxIhTkZIe5HACKMcwni6yrI6p1/N/ChIQhEDzpjnV8TOW" "nfR2cyglqRVf8KFIaJXL1yBlAe9/VNK62Xopv1KF0hQGrsu47aUY1my7t59knX1I5CU75HRD" "xZL7PvrHfw//KXPYeRCJgrkAdZLSwsU657rL5AssmLhv+GD+q0WXkhC7P8RcoLObNOcrZiy2" "RZmwdi6gT6M4zkt3pZv4mGKlRgQE1rmviV40qVa73Qsr2iS2fWfir0gokW7970Vf01+qsV0T" "r0H9OSAxXFS8GIQQc35EOIxBama8DPw2QcAcGkxxxO1a0gO/NB3xS3XRfEczmqK5x486OYe6" "OWZc8Q2NHbnYPHu7V7rcfgM/2jfK4yiw5SfgzyvMT4XULQ9f8k6+/Oi6GeXlovvChhNlbQ9q" "nGBnSqw9XoyYwZCsvX8EuY6N2bgE5A7LMwbDUebus5SrCq2gzuKZLC8OHnN5m1xCaxu6bXPd" "HrB4z8/jVZTmIZl5cMC7iPtGp4o8zj/OeGqFu3E48auW2H79YLwQ05QL8ojv1ziW5LaKeuyT" "JpAjX/i2JmLqP/i+0kOm/BrMy/ndx9HqLff0JiQefsZxMBBcstk6Obvad/z6IcyvyK/MHuZs" "mickQ0rbNfeTOKN4zVX8yCpVICh3JSu5+DmEokQdPhUbUZqBcGguH72iJuw9FqJRDzFbgwUI" "7vs1vXpWSY3fg+HkRw0O86Mg3m8iK6fdlQ6iVB1/j7UAxM5/chBGBNDpntRPYRgrLFkjKJDm" "JhvdVhbzfkJVs4wfoYZmHnxXmyakrPLT/5xNLlD6b+OI1ZmHUx3kVN1IxlU3EdcGM3UAWjPk" "pHmSkDe2t75xWX6aXUSFCsM45j+GuQrDSZwJLvb518eYxzN+49RKKke0hiKFjqh2FzC1Dqmd" "1jHoo2nu+g2v0yu255XvL0eTlPPz3WOVFh0xWCIuvcUp6bnGcQytrcX9kTOQ5nyDaDgqqOGK" "w5OTtG71QMkGHnRAJ65LHzk+EmdLxN8zxaP5/MPUMy2UuTR0jY0MltCHn4J65R8PF9pTYy92" "T+2k1/9MnzPTfKYJzhGpSARRQkMemXHFObMxbhsVa5E1wdExnWPr2uMgaogqk4c7uI8Y53YX" "cLJYcf4jO0a31FA5H7ifMeK8Kuk0WCO0JVqj5X13lO9RVLBXWpjkcaRkFoZDRPu5Wkm6zguj" "4XnwOCs/XFAYbIxx25P8jIhYSJVysKIi6w7imwyM3GkNjPLItKCVLHAc0jOhcKIg9i2MuH5Y" "POu0WtNbTT1nkf3D1C/k4Mhqn18BJV2ckvhtiJPCjREUYBOHTqPzh/QDfV2DV7HyqlPDLWPy" "kd7DZcS4rAh6jRcrwkc2LtzgbkMj9ERsNOJEKmbOgNGqQH5pf1aTcgHcF9QiXQHhyt2SXXbQ" "AZOIvyE+SJhaEU6a81sUkn00YR4tz5Dmf8GVnJSyZIO4Cfh/Ixv7/zVkQ9j8H2Qbye5NPOjE" "jWgUM/kDKuWPxIYfvcUlUW7SfUkZ1YOXjkuAXJ4Y/Om8g78W8osgy0XdGm9nmCIBUoiLKVrk" "+JsctVb1q7XjL1RFJa1A6tvYHtFjdXXz+kIFDfcq0fS+5fYKtva2e3VqTTl186qruPu0IfyJ" "P6sTQFOMFLXBA7HPveuIHaOoxj645KlZwsK/lN9y6g6mCyywvmnEByjzSNuy69sxjItxyJI6" "bFVHMHdVV4fpOfPhIfRzgXMJBGKwfmuUrWGJMmBOxdq/1pb9TfRKKHNhz/mbZlP2LTWlzMFR" "4VOAnpXSLaGudtF5vNUgLLvzWDZ/wifn+DzH1R70baLbCQ3IqPYXLnWeMCYo+RuiF0uoz7mp" "5jmsMpZYwADY3zUAM/Rva8AKy4G2VzDvcyXeyd/wbYGPoGTn61j6Ps2UPo8HhQhys9ZY7zb4" "gR4CH4Q/f/bg0KCEFrD7MVMJrvk77n+jWaVD3CYeaC99aUNdTaPmk+OFQxYmSCakmsHwPvXt" "proWCKWpTThL2Li8rW4u3Qimxp6OVKq+OAHZt9U4CLLjNZm+Fcgtv/mC03lXZIN4047AB/YH" "5Dpy0z/+4N8lc8kMTx+4teKnXq/bL4EDHnLsgUKeCeey/EZp7RY7TgrWwN9hRzMDYcCeIZnX" "TN5MuJjpcOERDO8Fmodnun5MUxq4Ty+0sKpwETuLX7MXOaAg0rwlmYO9+VKMpSQ9Q9K3A26I" "8IIzDYOoPso0hWn0ni1OkSX/lH41Jo5/Q4ICR2F1MBIcaeYcyRsLjWn70ycGG/RTv5F3CRyt" "UlVLvIh2exxvABu4poR6iFsF4+SEDMDdPEXp5BleC8pqIp/Z5NMQi4q77FbkbCssY5m9f+PX" "+m59cNjfmwIjz5lkpb+Z5opSXSxKxiO4C3WsMJdayqLIRNnuMjnvCAKnvM96lYXXP1WdzPGz" "IeWWWY/F5xCoFBsxR6Pm0oC9/oy3pmecjGofaZhTBhjR2tqn/dxPWc1ixTsz0KTcwN1DhHgR" "HkPSZ6bh2Ek8TwFz69uoVxmpOXFVVzhqSwqQnPjFyaRiVbqsdJ0APvBBEQkom4SZ9WBtsqaB" "lYGyqlxFz1SRGgokDP3zv1pPkl1P83NRurtD6MDW8qDeh3TVafQlnLh0I3t/lVPPOjWWWJCv" "kOAgSVuDOp9kB/12QJcrjkv6+XEDpJdMW81PfUb2k6US5dnWwLFtfwJqitx64WPQmhHZqnSW" "cNPiasQ/fCsnBuM+mN6bG7sz//ECkWbURHazeHI/1PjT3n2rylNjW8+fCm/YqD631hrQB8jP" "peTJGk3kMzRE2CzFpWD8lDIOs6mY8yUgkAdrrytLwP7hI6JHjpGuoOK4lGs34qNqTtosVCk7" "n/COurvef5ru1164HFfJBPKbbcxmgrhHIKsZXVUwz9QwvBPi4cs4F77lVjLlz1Pf0FIKpgb2" "rha6yKkGL3XN24I9iMGbMt+VQxMPI7GLe1xSUi2KIOR+wMre1xH43DDE7co5ckeYBSeakeG3" "6LZS/RvcNGQyfNG0SpB8KIctyniF94Bw+cRUCvvyric/Q7eBrLkHH4aUx4wC7Ezw/Cj+hZXi" "cbTPkRAWiyst6RplEXT50pxbaqeu7N3gsRqaUCm+dzrXi6JzThC4zQhyJ56z0zhyyfJd2MDo" "ZQvicn17BBLRS6/GXMl10L5QW5DVCwP2E1EaAUqb+pvz/YnRUh+EE5kW66tWZYI0LdSV81Pg" "RSIHZoKGZISFxtILhIUX6tMMBMm5x6Cs5nSf1/MYn98EZbt8zTAbsSvLo1zqFvb65nrE4IIP" "cAoxjZ48uWDuWnr4z9cOPXEKzYOCeh42s12JclqviD8QzELpyALwXvwPwuHYNYZoWkEqMhdu" "xtzGOhanv6ygtLcXuwRb3ww9N+hJ8ZtPbWWLUCTe49f/U3y+jCnHUCjRWzMpBHpZmUpIHxAP" "YH2mux476jQy63moyRvO00jsbPdx8ds4uQ6KfX7bQqowzMe3D1uuYEpZRoCTSgUpYiPluhZr" "6U1dJAyij8ogYfYjsO6ODtFgQUjlyHedNBttwqlA2SCqdB7KAP4Geff707+ZgUlddjjJX73X" "O0Nn+mykM7G7S10yjHDofgJl9YP5XPKxLyIZqj39lj82mvMztH5vN69IEm+X8u18qQT4SroM" "ZiNH6yIbrpEDvtVrmVzlYfpOvWSXjReBsYO9EmFAQ3hZvTJLFjUwCWFaSiihmHrsTcqc81OQ" "ah0UvMTgdLHBUjBbNexSiuHGq+yCJh4B1b44UXJoOHIfFRqMwlqACI3ylYfEKPPaNwlvUgOM" "pXIZz0iFBRFQDumukKXEYzuuyl5jyi44XjSpSKpHmc4RbVnsI4Dm3wdQAUJG0js36v7GBjWV" "bBu5NGjzQhmd5vgH0fssl6T4x+LCGrEwr9lc066mm7lRaMoU/qIk0Eme4efRAkdmgpy/GA7s" "MCCV+KqusUG5Ti8CFv5VaVZEC78F10XcERq5r6IoFBvtvCeBbbF0511e8y2qtXXELPy24a1Z" "TTgr0x7pyPHll5i/9T8JaepxpGbmW8GCwaH2xvRWfVs5LltVXq/QwHHC03TNDlnIadn6fO1P" "fODHVYyQt5JP4n9f13krNx+NztEadpd07HLpkVuBdtsX//xHTACfGNZMjK7OtZj6QSZVOwkZ" "JUPS/fkdWTUO2hLBPPS81PucOyAp9SU3poSXM+eHaAkEpisneVdQ0BRKsgEeRupr8zXwzxCZ" "NoLI4E5a5HBQqHXdiPUjhFounLGouqc0tR7jYsdj6+CKCgoCWeXe6P37Wf3aXu0sMiF7JCae" "oOjNtdY/28YOLDkOcoZ4om+06rKxP6xNBAdHX8HDGSfu2buSJp7rya0UI4kXR9b8tAvCSvrU" "dgOijamnAuyN+kw+9F2t68smvRVvoilpfz4l6Ypmoy/A7dh+oqrijmrBcXXor+MooktjncEr" "dqqX9/zZmD3X0cac/swdQOeL0NwfEHPnjRZUSUdBu5JOR1Eesi8PjV+QdEIi4FvnI5//Q2Fx" "/F9TWBjJ/6OwLPUGnO5k/Rwiw1rh1JaIpiiI4s2Ovpu3VtLpjpD+dyz4z6Ew0fjsU0cY0Y9N" "BIeQ4HlkpmR8hOuOojA3hNEOQ6WhKNHKTZ4AW3O/1epX/RbrFpG51FgHnomaxjP7GjXL7TIG" "f+Lcc/e9FV1ray3Veg7QpqmGtWVYt7afqh633Y5MI08NWU1ZvM5k+9OG2ktna5sOstYLg1uh" "nAjfeZVWJp7jiuuUEa76RQjKDHPIPZXXWelvp2CfiTb1GtIaNpW2dTc3A+XT/eskWEStd0rk" "hdfNaNuOIdFjsmMG2UYv261OIQaDZAHl6IBAaSEMhwJ3kTM+R4mouMs/gYYT7BUA/hwSNLH2" "M0hZneTMPH9KCTxgFLHBIRf8bfrd9/F9WLnOQtsYaFFMRDgJOIWDZI38Usd/Ab8JaQcmXGHX" "6NDq3W3SZp4ke6YFfuYRR3zdmrD1ARqUlEavE4jYxeLyIa7cW94tZNAary2f8c/D04Kmqg8r" "OXpiHUX6zGhJbNynzB/8s/XHGUxqGgmw8Bf39DUCg39LvF2n4zpNXPJnv9uScB6RPgg7D16m" "4z5yz84fGfmNiPCfODue3To9lb6m9xdq8slhF94Fm3gL24dm0dRofCbURHpxDRXx8PhzT6tV" "62Gna2hodf2rVv9WX69jIqv6jjobOHBxgKp2yJjyQuh6Fqb+hV4N+1K43UeF1H/oirrsWvn+" "E30jSpSBAzOJ+RYLPm6sjEgIZQMhIQqS+aAYcjMPQRz+DNbQawlKU1zPxN0ABgqkWzWMn7Ej" "c7U8qQ+zt4SruReyRBnnqNuGm1H2j28IhaFf05N8pWZr1PfvA1qhR049F5zRzhgmPixZx+Yy" "NHtpFyQWXjuHb5ABr6SX6eYyTW7ZwLDU5SOhOtSCx1vnxAchpG13HkW5IkzZCz8HUosA1bRv" "K5xoonHqYK306p/jeaA7iOlSq+eFn1JSWXJwWtqnY3pCkhLobzNgX+h0E3OQqASzT/oIAQah" "l/WyghHwOtptQB5UTQhg2ZEr0gIS5SjUo80iH5Q5cVQicy+y9MlPHTeTA+dYlfaRy88ozL0Y" "oSZUofzUtESBJ/Z2c1IfAPxpMdY3woNy6OFSuKkfx++/8Pjl7GSEhUqja8Zj7gk9NV68IgWX" "abSED7+0GFq3iU1KKXNpayK5tDx/92sTmNmRcR9CRNIFodecOYMML6viAeIW8kVuZ8hRqDBF" "9DgvtYGmd/gSF7FcS3rIJiUIe/8gc3FFAxNVwl61WqjQxryJ26i6XGmEHL9/065dgtugFD67" "1S2KgBnl3XkpgkcoScSNvYAYYyNwLJ0a0IM3Hu/kcCHXH0+AgwrMV82RhPtTBABFCWhVSxgm" "L+j0FEyv/GE3+a602grvOewI45pZ4TY0qo0RXu9Q9im6e/SHfLHV1Un3r7K5tBExvtivbgSL" "hVcGJn0d2uouZ1kJGGhLnZEYQAKgumERiKyeUfmlcaByZ4rsXL2UANm8oC5tr765H0Ti9ky9" "wYTU0gwf8TvPAz2HrDy+U9Y2hB23E5kwL/xnQ8KrnGSYn8T0mk/1S5kJBvXueSyULR0u9BCy" "EiYqgvSHKrIPjVLduI9MNc4wbqiJ6qs5ni/ZKTJfIQKwNWxmTJbcxsZILwH4ZfMEeVnYYboE" "J7gwr4nF3PqTqgJunfbH3X2iecWk2KFvx8d86KPIOqlQawT+vKWd4eqMpAxz+PIO3q+pEw4f" "D/5ZxRPZN1PuxRfcjmM9VEmyMdtNek+JSBVucozVfxctsrCSn2I5itHv+H0Cnz5W78Z5E5cz" "f4xFaswgH2YDQJoc9LCdIgbI96Hzv+aFWMYV7d8wF6ueKFjIdCV6CA8RB5rXo+fMqUjBfRC8" "gBfzaYtiyvLQA+jRbSX6sFmuwIG5gh2Me+Jn8EidMzPHooD9kzflDG6jpuM62qJdSnbfb+GU" "nLcmMiaD46Vu0u5rSxGvobw7ePJorq0XWDL6Co+TQaFltCTPX55QA97EXPEXmGuMWlOCYTWD" "CzgwOgt7WQI6uKUJNZTJGlm8kj6tE1rM0Yk6CMqmoZPQbj4U/jE+gARhhEFzARekEgr7XUX1" "NIo4FmUHUBm4tjfzBJrMM9qUaUxtfDW0F48LdqUdfo20wyCuH0OOiGP8yHMnqaiLxiiUDgHG" "QuXx4VdnhLvdWq4WE0/oIX46IRNJQJH5r2BVQrjfJiZ1gi0LpnQ2U1W6FIu+NBRCt6SYtN8W" "drpyPmXO28PeB45WzzMyUGIrHT2Gy4itmh6jTKyzsFihZz3gCOuuHAZP79ALELrSJr6Rbrwu" "0xR+kY6T2gXMYVhWfxaVesFb7OOPvWPRRbtnwBtFvAUbO0Dt9/TAk3hW9PphoyaEOBW9E+/N" "/PW2+MSGUexZE9Mr3KRDvHvsZ2Wv1c76uaKWGT88Fk78jQOrhtJeZGpgCAvjQd94L7mkXhMr" "lqQAIShcwqeZqNKp8g8iXINgFMaBBPTYXYmCT8j2CKOdS/4Z2k3VgmlzQ4ayhhAKH1yAWUYt" "mQgEGssqbpGm+bdFsIcYG+x1iU5rA3i1005Q239+knBecr2zhe/oTmips68UkLR6l+g75mX0" "ij1u4viJwe+C0OEU/espyVO/paXx72eExROvsyxrM+DbMWUYhWx/CHmHHkY4YFpls8tYzNAM" "i0hhupJV8zgoNKIwossqxSLGCtNM5xczfCeAlJD1A0rld7GLxAnclOQCa6skVKIfRMshP6iV" "aTee8BTx0yXpeHxONIejH8SxgPijWwd3YZEdIMWFGDWI37S5W5VfM+fnYExJKUmyikCBCAIs" "QPwinUJuoIcHXPOUcW6FG9eesQdv9xSlue0saqWl21ey8cJTkt8+PU5wwlBIGVgVVzvoIVZu" "yFIbI8TRHvMdyBcX4pf5rSQdPb1uiEyxJhZr3nVnzoASCaVw0dYlxCYlteX7K/71T/H/jTJ8" "hTUE1v04GjKNKQmqNxOyc9mfV2DMgWYGtLjs1Zz3E+pQ4YDg4Pz01Lh4z/NdtV55z2YeoRt6" "8OXQhEoFwmvbjWv+PoZoE48szWKDsSQ2eMm/v7BFmAt1szUHEX8y6Tyl9N7xkuO9FIWgGOWs" "mtLCaqhP8TLSaVR7ct5fNxdLnt9T2131N+D+rG0j/A8w9TCfuwEJjR9LKCgGYBJdmNCNKeQ9" "bqkH7OFAXa65lzr+67HQHkjwHITFYlOYmd/eZaivOMbVRT1grAXRceJvr5+HeukE1tgORT7M" "b4EFjbGjZfZGujOZV9gDR3cQICsFyWTMfNyjFPg6njSSAiwRVriqIxe3LU2zoJxOIyn3brf6" "1Uxebk0omXSP5oE1lO/7e3cG7ttEjARqHkKrC8E0vXDio61Fgbway5IqsnL2G3lh6mbiCYkD" "zjywCw7wijvOAir8DmXr04aawlj+6uFYam18/nUa+/TwN7KvCRjKe5yDvp67c1WUp3DV8zl0" "9jX2fINVzfIfIs1gvXxI2Aqd3ZY6WORTpodY3dIilfgxfWpaVrfdupCpSXQdAdBk0atWeTSQ" "WyGeTyHIi/Cc1pBlc5kSxvIDWjziuXdH4J9hBMwueBUViJckxzcoEZndtmmnpsMt/U+GCsMo" "skz/kXa/UhH0V6Fg9V3t61T1coLAAIz6RPWPfrBIXS5n464e/3UDlhsnM8XYz64bFCkxAjAd" "rtOOW5CTIe046VktDaVtNWBpcX4bicM2dApWD3JXfu7H0gECcu3eIODqmRtj1i4n5werB6yr" "N9Ox4sluPEmi69qvHyQrHulSy3juCOW7GcB07Dd2BJcd8ZTKoFXlJgnlrGB/UF5rn6I48Cfo" "AupNKArLX4J8gW4ezl1LQcYsZUhuqcsbbUpr9jr7A2BleogdaLoK0BE2S3fjdBHoLWXN2nRh" "7GLgiXy4JYNf3/xAXtQoVCXwfnbVrizurdyZuoTFMWlQr5C79KsolelIeW+z/fYrjHAhLQdS" "rcXCAkVk+hw7MNQjPyN+mJQYhd1oBd/CTfrak/J39Z8RXiT1fNRwe3Hr235vrDRKWqtM4k+n" "2zD7fuhcZ/rW72vkTxf07qEJ3Duh2kIEpyMWSlrqzEjn49x/zj2S44HI9enypJMC6pNnSSo1" "TBSuE3RVbdK7/e2kyZb1ry6C1W9NxdFH7X9bHI+Q9OAPKqq9XfW8mzDjHj1ThP9GQacuJNSj" "5ljeE4gVReAd+lPzf4560TDrE8VfhJ8LvIu7vcPOg5Ll9pXepaQLcZzWglXOB1x6z+Lr7Ci9" "z/tpj5qSJtv/7Zshchpig0K9AvUJnqECUNO3DDEy78jz58D3logx+jaD9ZcwkG9bGKY9gHv4" "pquG+YjzPqZHLm4dZQ36J0O5P+XejwvO9rfqeykw+Zct6D+NTvVi+d9xJakmTV1QEJNR5Cmh" "Y2mvGUmoWskt22w6GRNNYx1RxFpSpNLMY4/IlO2eJPb4YqLjW5RUYVlaNwu/pX30Jrn8sv8Y" "HGmC0XIwlnCaYtT/53hQUyzNIT4ziF1dGHVT44uqYR7tcI9NJTgxE2ky8Sr0Fn9vmGmhiYG3" "+Dt/RXPFOSNwdHPlqvfuDNV2tboBCXxAOt8vAncqco0TPb4jieFyOy5sqlVpilvujsvMJs9G" "OBHJMw/n2y/mVcrVbml+Ao1q+I2g/2hwnvvvkZLvooly8T1ytNMM81ppIe+DiDhRjQzOkmeI" "hX1/J/3AbAUsigY0SEKgq77LCTlS0YkRUC9BCxl+hQ+IzlH5uEOxcANdmsIQGH2/UmtNuUrO" "taOMp+wV0sOqfrMH1WjuD1rIXaPSN8oYvnO0jP9etwah4RqT0pHnghHWkjbujYC3JA4goEuh" "hVxl3DVSQ/V3K73MGUghrkIwILFjmbclIGeWOFhm7GSVafIntJ7Nw4JIyO/UD88+JgTkta46" "Lrs+Y4KpKvnaZAsJYjAroAY1wBpnvaNg0O3K2O0QXl8EvvKXIv66xdVmzhW+IdVkLcFVzIYM" "pcPVz/EOBGX0xwKOnQgOJ+Fj4Zptdqr+Zy9apYlETtHduSsX70RDZvDHGd2Nzc6/KI0+jhYy" "ynTpT9Nu8zfUXN1+b9jFEgjPrbo/f7f9dwtxDg3VZ6nJtI4bpwRTyJN240OcS7AExGfcnYaF" "6jpUWNU+JJT3kD2U8BAbMhmoFGSv9x2ohQlHqZKFbz7E0y3LHcpq8XghsGgfSvtTGmXFpxS5" "N8SUC+alGpfnDOPOKRkN/nbmQYEytkZeuj/xYoWrHHUDtC9SAU1vpH+PaMb1lQ4Mwrm6amDY" "EQcmkBbKpC5h+HfnX2JxvmtNcN4Wpg2igwJAbq/EB4V6ntLd4m9gtmkVxur8roMq77JIavwy" "QVzQNW7KkkFHtmyhfkliT/tZNPDCeRZBQop+ykRorxIxhYE/3YonMwGqC1y3yCVVnaR3xvPT" "zlZKnDGaiyPG2uxqwxXd7UWor/XueIuwYO+wPCSeUqE7oHQUHyLlx8ffeRGhZtq9VKcg3/IW" "D5N/ENTCeUWp8KeJIh9Vc9IrEsvk8F7ET/ewXbBPjbGsGCbi/vczy4Cnw15Zy68auPZhua0u" "yq8dt0f026Ak+xqbKirM5F7EqHfS8lvBN7peCI4XcQELHE096HVFSyUtdmWmLf2IFwMaht77" "vXot3WqFlTqX3E6SFw+88Rq6KMG9lvZo8StZ34/rYOgoDxQKZRyr/8MU4fy/Z4rI/48pYqSn" "lEgl6AccgLUs2qgOxW+I2AjgbepZ/CXu6iUyTmJi4VMaUZEVAyM9KSBubOrENoW5o7+MKRDR" "cWL5gz1uLKpYSiZA8c8/XmKQOt3X+HNf9HOZ01GFIQf3i5ndPa+Rv/e/mtuzY11N3jv3Ba2u" "upqzlokajeDcHy0phdYPdd3pBen5WuraRgu78JwPtINv+b3fe3nVSJWlEw51H+yFXjiTzVgP" "53MVNuBQh/982q9HsDOoWBxGsTv22skq/RR4nIDswpww2K5FTo72b9i/ZrR4hm3WuJSP+sHv" "PiMIaAsXuOb/mdN9zmK5f27viyRpN4IEQ5IjQKJfoNxuZdxWU201dLdbxtKdIzE6X0yk1a9V" "l1Ojtvx7meAIjXWNgSTZQa2tQ+sCNwi7ZMR8GI0x3DzkerJ3QeqFjJHYr7JvmgIaEbbwCR6g" "vGstov+g4frM4bfR7db57YyEJdZ61GjyjA8QGOXt06D7Y79383sHdlCiN3hnJQzAmfJMfzf5" "l1S70dtiQbIP4xSG8O9at4BNwcVUUnuduOZR0ETxl5FOpbsgXMcHspkf7PBvdl/m8f49eg6e" "bp3VPnc98+KQ+9/f29QLU2dJfVRnzfXgA5X/FS11kaQ3s0vy1pq3rZ4I67aNfOYh60VFoMqV" "58editGQxaplfkFr+CcI/xagF7UPUPRpPvt7TKyD92YQsjPgxLAhlGnIAFH70bVn1MBt4ul7" "rBz6HpiZ/i/w6Myc/YillKsuR0uVpxrVnqKKJWd9f6uAHCWZNqID/bfija05vNHUam0aJ8Pe" "sS4BB+dFGOGrWQW74y81AFn07Sv11VCR/5KqxPVdkX/b41Bl/KwA0q0s8MOdtAKq7CifOPLA" "OCZkBfrS3TC5N/cy2ijZeTA/wK2z8wucKcNZg39+0zWjzjCS0Ni8PMlXKHCN+v5DrImnOrIZ" "64W+gCd/0M8KuWW6zJRmTU05cBMb8qUZHjPufF6kaeOEl2KCvfcFDTTQDGEFPSxFGmNS7p/2" "sBIfOOQtaRWogatEj3xhn38b2gOn7g8o+s6GPr7hs8kAMRsGpfcSjRpkgEGFG2ImTVhnKGQu" "FZzwnoLA4rD3PZqtjyIKwiIh1x6BkLWNvSKMdg9+6Ec+7OkNYJEUsR/QUhm0wJnSUiv2eGS3" "oI/xJ2GH++c6e8ibSfSAU5qgAYeIYOlXwC1e9IKfiBNTMilBI1JVBBx46EU5f67RusePpedf" "fd0lquRhTsqKtIBhFqMx08R0r8bGaIjWdzifH8CftcEUqbecZ6eG/uijszsiM99RvG/UH38r" "GSPNXmYcWaolRHSrPiZtXjP/APDIq9iOectYErkVJBV9QI5Ti2Kt0aMemJrP3AWX/jyAL49q" "YXnl7qUK/BIV+x0Gf5sL9lvbtTWeDIOGehy9xbgPr6gUPRT2mzbw1U9G9Hegx/a5tWbSZe7L" "gUQhXKP6yaqXvONnq3HEmIx//R97GsUFQgZywbo8MXjcGJaHeG/jlXm/yLTiOrhaRcFZVsgz" "78aas1vv8u8IaNC0YJZN9sM3hjaFLSPkP3DasdwKbPfRMHNLZ+2JAbHlgiH2KVaJuiOZY8E4" "KgfbBtBW1dcMnRytMMzJCf0377UICNqK0CDv0zmsY+QUBY14LV6xMJ1kXkrofhLiEhi1r2pY" "tWesJ5ZjI4xG+jIxbdQBdnsAnPVPKiYvPVGQdBc0QCd/xXTPk8a4HS22wHvA45SAhnRlqwAS" "nYVcoJ4yJdPe7aT2bxKpRygpd6gWu4RvpYKZjkgADGkxch0ScrWY3tTJYYHdjo2BQDVSxNHy" "EH5Rr2mmHuuzEpoC89wrVxREfbCEaNfuirIr67Si/zApRx1WHpFACNIMk6jhbWMny4yWHnIn" "I+U3+z7hIRnbaFghdTBlyBrds4qt8ZSCQIn83laSxpYYe5FDwdZh5LHgpR5c0Fmz5A4axo2g" "mDKo/3AsWNJnKkbIBqG1ObErf7pg/jMI9IvUAOwDfFvAMKZdUmhBsgdDyd0Tcx5i6uSpMrjQ" "+djgTP36dHHshYFKzS+BErd2xbOUU+2mZjIKGHSXbqXkCkIATifA5dlHZmrq5lsKcjUMKWtV" "d80SS1nmuKKRRCZEl/XmUTYpC66XJj7STUm6dLQ6lMCl+XAFfOf4JXHgBBr+E52UmmmrhqJN" "uM2ChnzVcCy4BzvvbMmunPCIDMYzndkTBVmBGjoPSJsvHBi/s10iebceeW5M628w5kTajcMK" "dlhuX4+sveCEq6VJiQ7NPFTbxRmFJIjwdZ7LAHzboihPWqHBaRC7SEO3aHdEijDME8xZz6Kh" "5zYN/lziVQhMNPpK8E/gBnRaD+97mWudCIYO0lUrWadz8ZadHjCcpkw+gu7+2jagq+A3pqTc" "AQkdg4OvlUbtGVVDSKmVYcc1VhB9GHF8Ska+JCyb8sE0PGdz0WQU7uVTnkniVybWfKZMZQo+" "lOIkUh8SM3xDmSiGrwt0ICWmZkzK8nLlouDe2zuo64Y0lHwEKYkK2M2qUutt8bycfBcxlo6d" "gjmOi94GwI2xBFBJP/xu6YQE/XLllYEk1GWINOpKXZgiINs+wGNiKMSpBsSR7i5vhbeuBmni" "ScDoLpT2hj2/I4jLp6qKI+cAWPRStFVkYGEYhpBCxoM8NvL9+kiF24Bykqcln/4vO3ilmjt2" "UtPRXElcTNFlUNEZjt5e5r0WKRB5xinH4GE5jBZvJnSxGTCbHErreCMThFLD0Ng2ZktXJUF0" "Xi+VrhBIERN9taff0BoERxnWS1XXRsWEK8woLk7gaAEXQC9YcLgzFc1dwoJT+wev74ma3OtS" "pYzLrWxo0gk1XxTunAQKbM17uXd18B1Q4cMPwo+/vwDiYU9GzkAHljw1fmkR7GXNrI5d72YI" "oo2qSORnx/lHwgH5qrEiubnBDi7Ss3SkNPCjFobwetkIdmyXesizGNRsJKzP0QIB2layb+WS" "s5xCqVgjTYj+QgfT8z3qWN2+yFRVy2CTL8VP3mT2i48DjpROGuxQRbj2ETZcE5UOsttbVhNW" "dzbM5X8F45CulF2CHCzR8G73paMVeWr9J5+N2ZCA/Og8MDtCufZHYBlLyBwX6IESVkzAC+yi" "Uk6xx6sTJDkog8ZjljQ4Nco4ARIn0DyqHHaQM5igceiCT7yKB5hgPoa/0TzsheudL3ApX4tu" "KCqEbzHS/8nxcduLdzEYd+Aa0Or1Dr68H/R5UWId30CbUkgiL4PQ96JRM8Bu5E2H9B/ewHDH" "hvHW1Ss9EiwjhZbQcVan7hdXDbPfFh/2jjbCYIBJkQynyokZf8b3K9Nvh0R8KmxyJzXj8mmK" "VBNHJo1GwVg0iTmvl0NA5aGUK+KC6voBlvA1E4/E8JEqTcRoDotXxW8yq0NFAKkMWB5jIuOG" "uIC4U2+mNmBYJSN/iBShBtf++TKEIqgE2CnG1iFJ3biQkOy6m0bspmdmk9HLm1mthODvF51k" "4yrQAtsG1395JplmUXqYMBG7qrzJ4Ew5WbMgovMfkE4JDkPGYj5Bqtz4cOTBhI7110OngAKV" "BV34EFu8UlBoKZ0+RKOF8qbEwhNIQ18w80uQrmIMbZJW25LRLxHcROOXItzLYdeaxsKOSffI" "ZgrpEWOUo+fF2l4UPPjStRNED6AGqCdk4ZHhVmDkyrtCy66J5FsgctS3rUSnkG8X6DHjrPgS" "AHlsA8yE7Zwemq8MhCvspYQC5EqnJnF3hR4DiGsRzYJy3f3xkCVpuwT2vvMRdLhsFHW8zVl9" "T7J6YHQWiCHC74iLF4m/UjeIg4n5Ni8TFSIVDtIKt53utZD3dvxMzC1oeBbFjcYOHSTRGNVE" "cQQxz/6VbS1gYzRj1WE9/phoQprbVPmc4op3aTmaszOQmUkR888g/1XzoF14czg3NkSG5sN8" "GcNRq8+A6hOKFg8grYFBpd4g6CfQswjHyaLY+WCERyvQ4KQKTJiAVMHH+cmeYKXiDqHEjRJy" "KSIjrjK8DJwgSCWZuoA/Si2aMggqYclTXvWeUfVc6+BPDQK1RtoL+nVW5rfQIYhCvayiHlNS" "ldZ3LPa8RdPu192l5hXylREL2hxG9+xo5oJbYsbuHLVYnWigXKNRCfGBhnZQ6otqyXPJ1Vva" "ZONOoG+3fW6JwHQfj0yBK2iB8xQwOLm+QhvPH7Dw3IgrFQ4m+DOsQxctKsHCMBGxFbdN8ED1" "MbdS6PzWMM2Fq4HXaT0C6h63nM7Da04Am2qiwMHwNjO55bJR4CbnCNGY1BOmrd1dXIgBYxTi" "SHrcoAAIdH+TQW3DTL3elz5fRqx4DIOOfITwru+LyTUGGT1ctz9ujqOapkzL5aOnColabh0h" "Di0SJVU4/0bW/Vzer46eZP8uwUKZjtoxpXkogNzy4A2zoeO8AUtI7HJswrqiKUvZaIsdiZZ5" "Pns3kMTapHkg8uih/RfV7MiqdOBD+PXoUq5wn+UXkI2pXzoLE4/Ubn9c02VwTHErrst6/wll" "yYJVpOWYk+fpuwZICOJlsF3a+82dmSOiaelV5Xr4mdsztJ6ZkwggNutgqaZ8qfpTHa7K2yOk" "KruRuf/fZZqGIdG6a8zKZzY5byd0X8mgGkZI/4zznS30gRqO+QOm1WFp7onu0ewp/w6vIhaH" "BixYfVcWfJ/32uo2VckIZ8f0z3pdq5kHtQvskxrEaqYDSwhLwcon1sA66J4YpsqAnhjwj4+l" "yB449C/JLB7AHC+LVeOSUjBmHM7Hwom7kyEOeFvXZzsuPP9MNIcvpKuuw5o1xeqcw1DXj+f7" "GZzebgtr2lgtcRTMVFW6yqPS9uWTHq9hGYfxeG20LEkw83PU5+9g0ysgra6BJewPU/Q7HEr/" "GPELI4gDe9vVKbHvx7vh1B+w7GJvKzYFOytC3gEA4UswmllsfxIf9GyzTUEpT2rMNxGapvbe" "vwtVEGfhbXhnT058q8pP57baeIGI9WFw3q4vbJd30Qyt54Vm+tJ0x0J6Rqdov6h9Bk4TJTzX" "MuPYFHDn2MOX17UlvGTj34HewF4k9PtD/LW6k16lyp6coYfMIdOCiwllwUuHKqRdC3tgVoNS" "DqdTRrXTGJqXl9K/phsoXad/EGcmTxAZNKlQKHABZNQYxIFCT+4UFrv21kWwsNycVMS96CP2" "MCSfzvPSvfZxIXJCDO2nsO2d1wGw/Y0KuWw8jf7bj1SzaLxAXmwkzOEffM9hIEOPartpyyES" "6qWVLJc3R1rNPWC1QlCNgPqSg3GqB9BBS8pRK+EpMdlbLBgqEzCVO5koxjCcnSWRYURLq0lZ" "y0+WYweB464TUJZoJoyzhV+TAMmX2JgnMNZLPgSf/YBgT6s6vExB9k0OcrGtvyTVdFwD3/Hd" "3gzqq6iRy2TavTuAFphv1HLJe1cTphU1D18hZd7hQfDibFAp7gfauN7Drnh3iSeRU6vk+paU" "1oTilZ4JrG4oj40UH13vcCsxBs/SIEWB8bUeHjCAsbRi3i6E5EPSa+5puSvEykXhnff74oRt" "/D9yB3Tm7JO/CQnwy1ALsaaaFxZusxXmMSb1Hwka+cdHKUxRMlVbw5dXL7Ps+N/qEqsnCYDv" "oh84Wke1pbbK/4edwfV/zc5Ah/gfO8MxWyVpX9ZtJO3IRx0Zh+YvbWao+OEM79yWhYSBg7lo" "NDvtNgrhNQi+WJaFWIHYRldkxjT0k6hP6bdd3aOJSeB9PT2yy5Wjus2vmdEDjo9vQK2anDYi" "E433FJyvnmgfzHJ12VNSfJ4Ioq8xHKVXCXlpamPz0mPvOl+OhC/ZjYwyruTTg2ut8opEvNoB" "E8g9DkRW2bTr4LSeIyjJPwO/GeTCgsNSRtxLZHFi5P1LpbX8c/tZ1QdXDlDw4CnCRs78ORs0" "mEal3ARqWrkZRGiLo//dS4+tnOargf7MmFV2wBEHYop3zw9QK6j3doB2l0XgMZguFV3MLdN1" "/hAT+yweq6L380W52s441UX0tFmnalRtfkq6uWFauKB746d2f1AMo8r+wt7sOswX7p4eDUCp" "vhIr4e/EiFNUBkYle6xEASTp/3RZWj451f+uD+YKJF+ef1efBsl36K5L96rb/eNpH/uuo39T" "y7B0PlP13oU5OKsYWFwQbFVjQ3zZ4MBxm1+rxiskgUQ80sGfUuKpxYVmDV9Ntc0jW4oyvGvH" "YFH+2xq4K4mN+CneUpPDWNxagGkZmJ1zJj8oKW0ZSVkdI2b8oHq0jcnxOwlRbbmaFuu3mpam" "kJy5UYrXrWCzPPkoh6kgZZH8cXq7nHmxetUCD/j51LvJf3DlW3RMRDgItq0dIBQh/b7TImvo" "lkEbY7WEQGkI/3iwBni0a0JUmRlWzJHXbuakNKHshKb4huDEyy+IFx0bU2XH5gPAECykQOjT" "RmikpexgHDYar3Hj2SGx1MQlI0cEB8zZGaqtRNdhrRdqWVMQw6TEknU/Zgsx1WjkCnDCpM6K" "bCb3rAz9O1wPctBwhjN+Er+U3bI7xrN/+8lD+OOubf7sABNPIu3yfmZa4qFYqvMCFC/wfLhA" "stm5VJ/7dmYkqL/4IsMIA7kYj7zYXehr0NHM0Zu8xVqyxuvqWKSms+RYFf9IPGxb/U1qkZfC" "Yk1n+kIl4/FLVUnNJIct63i98jx30q466F4uqEAHSSqQ33OyLRujTxSOfBsHF8v1flqyyH6Y" "frEQt9pTiZrQa8HBk3qqjcb+WPzAYa64sbQqttmkEUb8to31+TKKkiHsQBHqwr9nx+8X7rU+" "K3D1pg2Tcowgb1ov70vxgZYszEy15p6+nIhYxuGdJTDkvIkUdy9s0FL6k48lUDJItiQQQwGL" "BqqaeBSqoYzMVZRZTgK8jd+iMCQphOhkfEmoNi+HpcrHLjvJJtaT3PRdEabDOJnt27WNWA5R" "Y9ZeY9UdLfgNtCXzyOq2FMLG4HNrlieKyfSJmoQSnqIV7vuxPf4JW0CP1y/pWoUuLt9fEwy9" "sHcTyfOBVKz+FH9bfF9woOjmtJiJd9xJa/u7tHE7BbCc6NjdsXoXeqByrzweAxPn7/94MwAD" "0yLyPB2m9oan1ukcFOjsLSKSM7uq5vxBdCDWYm+Fnp1He2uz9B2m278pH730ZSmo9ncQgF1K" "Fa+7j7McOenI/K/qbiMZIUQH/k3tH5U4CcGIkJkvVHXtztX2kg/bAfFf6mV4NXNIjVXZe7RF" "RFxcMDWDgjTZS3HnBrI097ECUV4sMPBN50mKfhMOf7m+p3ktYQ9I28nImnnyoC7ujt+ZF59N" "sn8LLH/ec1Wc0E+axCgBHWQdS1IqNC/zUiMTqwubEcKMIqhRYOYBBRxfmSjkacPb0IF8PeUN" "syhq3vV6iYLVirrvZ7UyJYZaaD6YDXzFyISFmH7AjE1sbVBZ/PgldEwnbd1oDIo+njqJTSzc" "tOIMLZK6Ba3kiIok1F7RjU1BinSUFo1Bwr+gIdLtfb1+uBtGvFNKQtJ+SWV0VKa0WxaKUj+K" "0j+u2ts2opgILydq/hSnSLQ1l/eY9OTNYi13tpEBnMuAJG+iGNKDk72Erbeb5SA7UI+f4Vlg" "nH7xTvqlx/FYhHBbk3jYOpPn9qB4NXTMo2voQtqENFVz2P3Mtu3+CrK/TeCCcn12mbXP8uhA" "4MkR3mW1sEyyVtEqyONHjhmk9xxOQk5/HRqrKHlR1Rd55WMMjlMQYhaj6yWuXEYg69ZpnqRH" "CJPRgp1sSZk4pbHvq3mJHWa2TxmS8klMPJCLP6DyGixehICl4GoQU4g8sI4Mpp55JJTHEV+s" "GAP2/4i6dAdQCnrjdEjVR4tLx2goqbco6jqU+gk6hQ8je6Fp9JyPRHnQK5dVU6cWfVzKp5uk" "UqYVAyfUODaDQBeZ42+xCkh6siYEv64lNnQ4rgdgEgrfWInYdGpv+G+A/ZSnfbRrcukQKzKp" "jUxkQduMTE/A/oESEVtNBIUWKa+B/34Z4qHuokDBrb9zxfmAU7nL+GAj+0CHMRl/lkWUMoXx" "R/GTeFV4sotqEuc2Aa95skiaQbSBQwDKoI2KEQz/ubknn9qeP1a0f+sbS13xM4tmFLTcsVg7" "cBXO1RnkobLwZonqRvPCLKv23L3KExTW7YJ8XIMxZrkWngojBRHOQntqHfM1QtvHJc86WCRD" "D8LY3Ijthm9WeCGpfuOi1L2pelaOKsElv7oMniVNKQRJCtJXyvTI9GBRjPBEuyevIqivedJQ" "P0Rai6pPA2K/GxzW7EVI4oGaJSDtrcIHGVk9d+WF+hPZGrAJUaH2PEyOfzXGhAcdoyfTNiB6" "0fHO9QCWIE9QjcQJI57tWrsU86jlMZyAXPIZXFIAwRis9nlW2R6MJ8kduwNb2SpFTwr5XwOe" "Z+elqhR1S7A8CEOSZTU4+GacauciuoJAzTIzXUMOpvR7ZHywfsugdBcbxTx7S+y9Qe1ebLlj" "/meb+ED46c0pM+OwqH6E1lPHwEoc0segThPPaaHj87/7ei1dR/mrM08aWnQVGDfGMsZZPlPu" "qsPejxNM0SEWZqbXiLJJ7IkGPZH1MHKZn3+LCaqSRLJvqcjU/vAgy65bthT8P7ydVVAcDLCl" "g7u7DO7u7gwwuLu7E9zdHQZ3d3cIHpzgEggSPLi7s3/V7j7d9/var93Vdb7Tp6qLjfEVfSYs" "SMBn5zY9hsic7dRroUw50g4iRv1bMOQu6v1uX9keCu2o0aFk1cSYY7IVyh0C2vXbhzzZgBY/" "LcwDypEd5i7vKPX+7n+7jwELkn2i1o0KpKJyQWxYnT+Xsa+BtCWNwDzgqJl9YZubm3DkhcOK" "viz7Zqo3TxLbN9f4uQCzlY3BlUHbV+OUwd4gcvZUuehMBjWVVar0pR9ephHBEwAKvj5zfI3o" "GNI/DHwdKHQE2yEOa+5aPqVHmhvVxtHSDqI8DDwYP0Sr9iP4QOARyyHjMqrRR/NS9PSNm2SE" "0QK9lR88b1UKsGd0j9CpQn/749OZBG8iU5RgpqTBAWmYixaYnBik3Cz41HwLndh+YqTTWuIT" "hHMqCXGnHYhnv74gZ23ETi2YJy1G2XS0h0k+rengZDCvpTV0HFeCTiTbr8Qf/y4U/8qD2h/3" "Szaveg3cLuvf6FGFLzk4Xt21Jqu4IrxPUXkP8ECMTxlmD38REdKh8rXp87rpf8XHp94oJdUg" "zWCCWLALgy0SeB6YAoKXu4OTomhzknBuH9YZJNVeR9WUMbWI8icz7bhjPiKmxXeeo16ALM0L" "B6Ahyp6Uauhnsggy8PQ8eSt01eFcdVh0QDgXE7TPRGo75VWb8jBFkoGrS1dKYrUjBUc0MHQ6" "vJ4FwbiOluCXAjpz7AWNnoolAEp1ejkIGwshu8gtGFcWHylnxqVKYiZvAmOxUhgy9GCEZXc6" "5RpqlWLdisU3PbF3pThx6RnbtOmfhLw280dYvrRJ+jRkCbqtv4/osQtraYhCr8ZgjDPmOLeL" "skRLjqJTEWt4vaSwwr66beqJP8dkAT2a3k00n+Lv8xrAZIjk4lMQcGj1pE8K4G1fFjIm4oci" "fz1wTNUvzi0m6BKW8NsPe+68QOydlxiZP6uAr/Ez34IROn/E5SAZO5H05tbeu8TCz+PyE+6/" "ksE65W0rQnEJrUSLdqGAMiYv7sdP2J6wIsoGX2+qZCgE2uo/HyEFNoaiYHRVpneB1KGZQAWN" "5qNBBMh6+d8hacKBf2OdBQf+HMd1f0UcCIG3RM/wDjiDCKjjY1t8YlGeeB1SrZEOKMY01mVv" "nn/hlKBr0WSg4LORJ9RQbVtSqD+KYMkxpt6vl9EOQUykW1wYgOh9S1UxS2gpPuijmlUh0QBy" "4Bgu+E3D8ff9JQVurOGYVLkvC3K/cW5eRSU4F2lhv8erWwWcuJyy5k06rG+5uWS49rNdhJE/" "s1jZ3vLzJvMtTxv3Nc6Xl2nk+7W4BcvVIM1O0frnXnKChMls3bDuU4rI6Szn5QbCNt4Atx4a" "aJZyt/n9LtOKj094FHukA4fwGRbDZ6GdvazbxZroa2iwLdtnEeiNl9xDRYGSa0gnD8xHHhM3" "T8bBQluSj9F1P8OmjffFa35u77v4Ju9GT7iy8fv+A3l+OqHyRpA88WHUwnWK01y9AxwYJk29" "eyXxi062fnwr+VBb6zNOet0RE4CO3hL8qpkuo7WdV0ld7saCMt+8sE8eqPwxYGnfpPNlS0v4" "ewZZWflDt0gYU8LUKvvLokn7r7LlPi2HGU7o1aVukInQE0teFUGS6+c0s+KRrRbXE1Sgl8bT" "OwLj9zecOBlhsEN81mXTKx4XLdXlUX9eZGMJ+nNYDNdKLq3EgPm/rInAXdd460bIxTQO4EyQ" "bVY0Vsmtd3qQXldKSjeuxMDw/C4fvMcu5YF74CkmRY8N1aeRlbz6te+sK5R9xlwQq+mAM8IW" "x1e24l4bxldHLjIqQp+lE4qr9cHoDoh86YftxFIJ0m6Bkrw9WYv2jwQtnwboUIWCDbN0uHof" "czs+Db4H8QopWwbcxCMVqreC4VKhKMtmsateiaS48+0nYoxiqDeBj4Iy+n1EYZaJjqizL8gD" "okQiE5ipnXGYSincF9x2SXIeyLgIhjmRhocfPk0fW256XMS7jrMstswHy0IaAbTQo2YJKWx6" "AbfHgcozKR982A2e410dfniOPmT8XEieh/az4GfBPiTNhbemRX1yJ9QW4U90h9U6nFeo5Yj6" "HNqO3lzMg/PWhnZjl50vKqel3uOwICEhO5YPic9wRk+7ahbH2/iLEUL77X1EulXp8UPT0URq" "RcQfmKrwXzarorYy2HucxVCXlQivwCFgskb7e4ijmuYwO4qgpq8zAbJLgQ3UVt60q64mhzhA" "JbNDd4IsiORSnI/5lTENPqUgX/IGeP4FkYxSHwpB/t74PyCc+38vU4Dw/yF8xomSPyPiOzZW" "EdF8FuG9dBgu8QfsvrijRrApLhurWlJROV4kATuEAtMDJMxBrrsa27zRKwYHNGuvQncfHU0K" "IM8NNDl7SsgKzS9CHyp6tOXHQs36om3r2uFWcLCydWRbjLpvvzKHeam1KES7Qc+qXWKlG+1u" "hUstLtZrcGdJqchQVm+R2popaPvoSsmAaxakTOKKDQghwkRxleT4KgKtW5RwFXJMxgHRuc8U" "zDgHQIu/7GF9ptO7/Cl4vhgRePxl/PUntrljEHm+ZqZzmbBga0jdFtd4VfO+i31qP+fJllTJ" "pI544jsT5cwfsm+aOqRutoWNbz6IOADhEFAm9SZ/fj//KY/5gK5tv+m7cWDY1SpXcH2Bx9qp" "E9blyuDFm+J1MvR4S7xBPOCN9489/4eI36pu6kpD5jYmfMWN8Av0oiwLlRkKJwhuz1HpKAIf" "M1UQ/exOQ/bygLxgwnr6JGFHUPK9k9iLKstxAzAJeaflEvM9+ZiXo+I3GBqLebLl4i6t7zcZ" "BYPDZghQzCFVOFJty7Sc53HyG68AS6PGpbjCuhG32Xs9HZYT7gw+i9QcA69ulHO1RVSfCumH" "1nJ0O09/smRwjX8YrZDnn37UqXVPGobkiY+ftx3ziW3qnHFYcTifpA6Z4HO2adn9H1lLwrDf" "UvSElIS4IlklCfn/Nfj8CsJ6iO1TX4xpfyPTJKWQelwqx0hh3G9+Iomlgy5mn/Qh/3O8Gk8E" "XlbJRufSi8xjELeYgTVOoEIoJBS/noiXtcNMaAa4u3Z9KzEmDzwmhN7reCEYnv4nWJEMmDSn" "/oJeCwgFGoX8BTWL7aIeMEbT9Qa8SBhqc6SSufLZ5ULh1uBILlbWw6hSae8ZQUaGJH/nhBpS" "UERHasl4pGabpk5xACqOcIS3H3+fVEQkXf2RpED8CdmJj7VCN+c4VMqDbyKQekjCoa5y9VK/" "p5CzWV/2+053Q1hsoW85Lps1kHls+mj2br0/uaAsiixsa3c7ZrXCa6/5r2zQZwHT7Sew5TPa" "a0kYvsNHxO1t+/qrYF0lp4x1JBk5/Y+QcxIZK+ZI5BkjQkSe9q3aRJEY7DGq1/DAd2hdkzxt" "XDP/yRyIPZnpe4QXF4/ScR96Ad5drdwujploqSDcf40j8baMOgxCmh4qv4ULnoMNu1I9FXij" "7an6Mm7D+g22xNN0zwO6cJiIeVYoyZKbku9h5IJmWeGQZ02uABxFbX/ODpLT8/fVnGNIqusE" "2UFmJ0gTOCTizeaAHkxv/JiH6ZvOUA1XFByTK24cSFfmdIuUQxDFpCF51rUggSs5NgFwYke8" "P9E1JJt9HA5mUm554hnFi/3APlX8k1PU0mDU+UZGN2TH0gLBm+GUuayaao031JZqhm7xn1PM" "NkI6fuLOkRZ+CUSPVZSyTlolefp50Jn0T2i5qmNU03kJ1XzIH7/IVs34rSdIcsOfkxLOh3HS" "YqtNLlbpAkP9PaN5YjbHPQoinWdDbdU4X8u54JClDvhD4n+6I3ZLjyGSKVv+5FtGGAqgrHVc" "8J35xDI6jLwSMIiPeOZVW02kAkwGx0VF7Y8nHciTozBMFLNSkTYjpxdRkeZg0fNinnbD6XZX" "VmhkY9bhy5Kfgth2Aqenf8ukYNvH+KF/ZeruBlFdtfVq2kkzSY5kvhSn/tPjRlgbCb8oV6u+" "0KvbpbkSEG8+3qO+Ff8TK23JQEC/RZiE0+HvkjA+hPqM7CoUOSOQSIZ9GprtdKtvQ2sDcrRq" "ouUe9jIRYIG3z5LhAIZKGwGpJwN5BY3tLhkncjbsaQur3smDp11pniTmgIuy5AAHGGDQWA6M" "YZYEhXnJPhIgPWVPRyUcXXQiQDEKzwbmcg/IYSb5D40wd8vW6g/uWiFJ9aQGKy+IUou2C2aq" "O1mVtmWGlZ+Skaj37mJVjx1kElsAGnsH/NwWbn8Y+dhMv7cBXYN82U/LMgix85UCHhKxioLk" "GZTpOj3dqQwsTcmbptEsNZ3ZHdtYPYrvMlMJhEsOdq7kbjyjX4miutEzySA2cqE4xucNF+gc" "b8UeaPqQrEIjbHsOOVNISF7Uqd2gIEfZ7eQWZ5eClmMhYmDCTPEM8SDxPKnmyLqB3zrV/6n1" "gppSQTEZFlETcLoblCegdbU8xmIsQh9eH1rVhuSODLIc6FjletPy0GlZFnCBJkOZ4gWoRLms" "sUySpoPSTuP7nmvYYF8b1KlEbpMeT5epUbuzfKaOyUBEJ3GooqVLqzIdkTnchTxWA9f9odpZ" "9ukHrKqENSJgFKcVvybLmk9N3tMu+cT2C1k0fhq4MAo7S7eopeBMjuvVI11dKTiYeJjEb9AU" "YCIFt8CKDL/1sw0hGzVJD4/WfUZNYyI05gbURtaXarDLT5YYg6GqCi/4LT5dCr69NLmx7Xgx" "LEu4D/mW2xMrZKU3LQHuBel3bvY/DueyGQpbukc5prwFpLjRgmx0pWNg72siGSv5jX6/hw38" "p+6VlbA+hKnv+OgIttuZ4aCnvTET1pKg9vOKiQ6pnjtMnhG7dMtzkW7iuO4KrmmfJWRf7Qhq" "W8HTGusmevLczncDJ3QkpM5tvxTnjKtSJlW34i3YWOPBV7EGbJaZCVdVBgntO34ERDKERa9M" "+9EqAd504udZUkZpEczCO9169O/hH5LUh8bRGq1qk8JADyobaH3RXrDwnbGLaVo8M/0ByZOH" "uvH50bSNhe5TzfONz2RNaDu0uMJC73nus/XlwiJFYHjuGk3Dhi7Ja9P0Pn7nZb+p4/QdShsl" "OnbJQUoEX1fUGOUPOx0aQyH+x6Mxgrr+DdmosQ6E+yYs4cXlsvowZrfI/BorYc/QJu8iiD/d" "MWH7cNn50lQ5gTBhNPZhm2uB7xzaUUmb0Ul1x2+4dNyuxVE6RFaCQloSzcOsBvOndeF/pSrF" "eajskaFeJSL+zFP9mU1mcvyz1WJleBd3nq/K0ySdBQPol4Q2d6HlSkZ06mzlqJVznfnlN3Y9" "6MDaGvaTP1mIPRUNe2oQ81sfnMKiJiT7Gm+KjXOTh+iGBNvlaEzTu9r74VWbnbvEPRVVE3vs" "WqTpNOEEis3hQI4E2SdjrQ4Se6F8JITgZ2PVVJUvEe8g8800RDPZqHjo/GbhPxKnSVSC5m+u" "C6HPounSvFek841DgVMlqiGG3Pbe5P0p0Upm8eWp0TLkb3PRZQHccjH5I+OpznHnT5o3/hDi" "83i3157NgdZMEpFl5G+YrEG/Ps0lDqWh8dQsjOGdim8aKtsY1tTPC/YuVSARdSlMOLZSTKCn" "NNUn0VmaBe6o12MWvw/Pm1Sc1/gF/VBNIiOMyZeynfqtq9eN4olwc6iV5GKeHikTSv9X59De" "18AhgWAowVLMucfbcS9MUHHt2X2FQ4A7NzLDCEARjlNdI7Eokb5Yh5SVGLhHjlITma/xHOkQ" "MiHO6uaqrNrvoQPnnY6wwNPjd7zVpAoUvzYgv3+gQvBA1T0AyTkoGAQlymX2nPCmMKrW6XIp" "ce1iASaTg8IqbVHPvUZ6Xn6RHwl9wcpzH5hZHJupzNgZThib/E0awQ6S3AORyAqksJOS+CQe" "XMR4H/8NPf9zWixgBpn4keLVZIiPlEQmFhvW+8b4ysIVTPXK9gNVlf0L5DoTfyCwpwSmI23k" "tzuEm4MOxsb/7SYmHBSLV/5m49h6tT5rguL6RVwPq2veWe19PPRuB1tG95W1jtt9yK92gWlS" "PG09N0venra/x4ybQq91lbYft7ddMmJj3E25/ymmQbfN3/kd2nSQZ50rnYnukhvAeUa7cdyR" "HOWalbbifCyI6Y5ZfXFD3KtPOHJyivZfr/agoFs6nLMdWwKejjZTyXBZmAWYjvuvhhm6i9+e" "qtx7KdbEvkP+pUQxdroL7iCAUCXk8kflpuYgcNS8FLSJAUpqRmOS+N64JzWgYlw/S2yEASJk" "9uw1JsBMfriTuLkQCwuUaxi3Ysz++Xe8VGV3uPzpSmOkqQJRV6fi4F7p10hK25dLEKExsZT2" "0gfM19z4MLVdGFXKNXGGiF2KWbls1jKpb+xG6bGdhqbv9ZkccRrqD5F5ReFrQ/5tYbBGND9Y" "X5FVC0EUdVwTwV5UZoeOL2QPvHEpW9M4VGXI4vjt1HeSJgL+LWLGkV948XwUm9lk46rGT6/Y" "u4lwU5lKTSBG4/SRwLr7QFdGN0Ffr0L/UYGk7ErFmFSCqFmA6MhHDSYJexb4hxV+6Bt5As1Q" "ko59cldXafgS+JnbMRDJXtxw6uYg7UrCRed8xF4nTwKGsaWqeLEv1bbOEtrjOT+t0xntX9wE" "QuGSH23iFbTmZEv+vb5FPnwextlQWWzrUr8wZgFRiIGABo5VEJj07hMj5Cn0fqtGwl2PJdHi" "Wv4t9PDZoP1m7EEg3ZWRfIkyu3KhVSL8oO3wB6MZuUEpiwM4I0dHjocBeh3BgPP8NOvUB3X/" "OEAvI/B+I/sTjTovJcwrktQlpJJletXnMAZJPVFi4EV1WH6jeBkGl1YSh3Lj6L22SZ4Z4Lox" "eUOMsCbCxYjOn1K6xxhiYsOL1CxzmzBe6ZDr1j2Gv4BjgTssKFLSdp+b4Tv2AdLgz/Y+7DL2" "roD7Hv4GbosQAvcuUhafp5NANf57tzADVIUnUMTMtOdqRJisZnHmaYhqdMvSe8mvNwW2SDaU" "CQhOteoBfISiPlw8Lrj16x5JBT6C/WasN/mnPvb91fgDun7r3PR0VGu21kEsXbIVI/w9uiRE" "FCfnqOo5cp84ZlcRM2EaygmPYmcqpaKzz0KdGOIeJyZNihJ5e00RuX6KeGKjw1ugf6OUvTpA" "7mcoPKHw86H9BBUd3arPNmdWhw/I+svoyCd6vSXie4pbew7kMiHUiJ/gYDCk2XQ6iH8yehWi" "E304GTHUjZWbMjnM60+tcDuGR0jgv88feN+FMPqaY+NsH6OnroCPQCIBOyxUdXQG3Xav3qV+" "QYjw9I2AID6zCLZ38qG0YHQS4nYsC9sBlz+ps+ZT5pTj2/FVayvxDtDGEZ7UNT+qOomzjW06" "oh9l8QnvBal4qVYJifzGVUtOPwrw0RlgKVXSz0kpiEIFw5nnDLkUz0xBRAVXyQe6ZyHmnFx3" "lcYYFEGQWUHslKyEvz4TLFKIsLmPu/Oa3wuK+PxrgKtjkM3OFABzcc4byoT/esucmP3p9zlq" "5pDJjOa15skedQ2dFZB5InenaTfOqk0tp8MU2F/RlX1nW7JGeuw6VPZ4s4lq3rV3uV70BLZG" "pWTo9Q1lDbkYKGFki6nkY2QIzO85ymnDOz6mbC+cvZuk/M3jYzpg/+2AGVkoiDk3sVklUKpK" "qQr0/EWedNccUvCLJs1MBbVKKGiVTuoeLTz759mzjOuXdOzTK4Aexb2JWwktEu5b1lwSgYAM" "esz2MsuRicoi6q3LutXx+/SDzdRm0/Con/AHdOg5Wij0PCW/YN2D8ov4e8ZlTOV72IBN8UKX" "VYQz5XqfVma3yiwzyhnkrZXOcg3ruxSW/C4NIZkDUU/BoPrRF5RCOdQ9wi0W5/9wI3j+99wI" "xP/rRqTryidugjL8HRD3m0ET5gRxee4A8gwId4o+wgAMAHnw2ghFMtVPmEwBCVIz1Hkl52JL" "QHHePMQvLL00vFhJ0tZxEL3mX3wTTHSpRfz3l1ZrKyV61vJ46h6OTFZq7lquhfT5Oq2mHg3q" "ZzVTa7uWZxOkHTk57YzuNupVnyuJ1JEOKzCHZssKNQHLprxrAAKe/ZtBpmmag5x73Gh1yM7A" "+9bDGi4e1dqib12HpRxaQ7xYzUEcEfUrBUxthcLU73SR7RcBnliuLngtx5MpSIu1FxGeuMKY" "HTnL0dmUgOqp0SBUlBUqrl5/3Y9IfJZQ1fCjQQlwRRaLsZw+hu2LlZ5uzuKXssCrlyvu6i8C" "UIQ1tKudXP41JDDRTI+fJC8676mjj3hk5cQBGX1Dfn3bXDFxvHsKjt1jvccotKthiLEu+HxO" "sy96+aHl6Q994EgFqVSKQbnRqEsPQiMSGR98be3ziwxVtC5PmezD2ToRlVlPmeMRiu1e5L33" "9stXyA5PyHnO8vfVNe5iPU9eqvtaih5HZncxyEvfo6Eukmhif7guAkmRHZ919yZTg8sPIdOF" "JJ+jcbIksSbsmKnS+vH781P0SwPSf4hUv1I1ZAvKlUi1m1Uv638iuRVSa5aPGqatuO5ioh7k" "iBvmYhLjFXBrwL+lv5X5M9RVVnBZfmNcqfFn93ZCdnOJgDnHC8uXum6TTOI1BqqQMkF/ETQW" "MXVl0goy02ayO5OIfgsTecimDNH3oGPCE7ZL87CJc8QyKh03LN1rRYqAj3Nrxpztdxz611Bt" "1JIbjL3sahdNhaa316fp5gl1loOTtPdd8trjpz3LR6+3X+1zdLdTz/U36H2jilBrDOQi6ouA" "kyFAckp0MFdo91ciaEkr5sqCGu+AooNITb27URD3jQA7SFcJNxr36we9/3i7a7HkGmH1HskG" "aZJ1HAZH1V1ftTjhOaftQK3K+5VY3IEA27c4/0H2uvxfTH4b2rvTn2R1+WEA3Zh+Tu8rsUQW" "Oojuhx0rqVAYzBpg+L8JiNjt5EOZsheMNd6v0KxOkKpFBup5fOy9CZsTkv0SCj/dnuT4mb/k" "GArBtSQZLd46MuG0GA0CXZoqGJ2lAQmSZZrPNzmL9C8fC61o8awjzkEDARY6441/u7CJPGy0" "lmbhwQ0g2Y6bJrArh7zYHMqnwzt9bg8GgA91103GOMKMw5Dr8bc7HcXbst2MlmE+bTu4SIUB" "24+jSoAY1k6niSJU9Ess3/oRgziVyUjJ059SGnEWAvY5UBIzl1f6Sp2Vz89ZNe/EJcMGKtCw" "xJsX4dUx7veTCYrObne02bjkC2uKRuCKoIw0LJoF3e4+FoNLxbsCvneG44Z7CMgXmiNjtMhg" "IT0EtDQOJ7ThZWHiJ5Mvf7IvTCK8K0b2wqyGBXaHCM3fi2RwjK5diogfyMunoNu8k7lflnKQ" "6v/2s383kwqHYGcis/vMGREcdjIayYmBHgqC6Q+GPYJanh6jtDT/Unl6CTdPtNZG0mGLiziG" "Pv0eJR0+wDgq7tc4Q5f7GonPrCBVJMUkfO4gzeQgb2GhDTt0aiVDea7Hc/GMcgMklOtFis0K" "inLfBpv+7RP3zueNRhqOPI8O/mYj/xmZLBfsJV3N7pXsQTaVT1QNC0CvroKah4mGSParJsNo" "OJuiBNeeSVJwsBgpYB9LGBfMm8xqnw5h1dh9AhIK90yG1MpmWyRcy5vDykRV5KsU5osqJDQ0" "4FmovtrfjZoIhdGzigpthZlwj89QPIvnum+V9WDOv3AeUgYjwnlBtm3uDIlOMbi0oUjMFlDv" "pqTFqG0ogX8yVEqH2NLoxpQ2kN+hYuHklr26JtudXGoQsT3qGZSgRsWP9ItUHG+ngnK8XbgV" "ZQe5tdFjzBb22J74D2mH9c+adeZ5OT0ji/4bJd2t4cG7Yn2avJ0zFB+NcA7wB2msw9+gO2Bg" "XwwEnwztiOYDUMybDJ7qLs2zv9xyYwdRlHgBlnj5RcEaeg56TdQnTfgSNRc2NpAqyB3cxZfH" "ViWDTpFMtkhiT43Rtn8NgYvZQr7b0gmIx6Lz2hqoNakOrCHHSk7AmFpIRg+ViuIsoCf7Qyy+" "MfgUL6Cd5S9eDJv9pwZnQQulLP4016Zjiww8sXL77+pfBVIrBXMyFx1HgOTYFxSE+HqcQ4HN" "CIAu7Akolsw70UtynG0SKy1Q6sx/neUnpXRw8TM36xKAIRpGfZ2C8FhFlDmegB4gJCpgM451" "wG1YhEVuXD3DuFubP1/GztF5oYiihzRFlatfkoS3SJE2RBH+M1ghGXKo95oxAdpQ0gJOCSbJ" "QKC4spiF6VybeUPBwkaH4VShYXHPRqaP4B5YleQQvtnEeYq9GtD0IEFV4ODecr3n1uGYyvLU" "MFuGswd9SXb3Sx32haKg1+ovNwRciS3R5u+07dWIq3qaM7lM5gJqPSGZASF8qUjQwknXS2ww" "rLmIxAAZXfleBXRT1XIXTWL4PtpXRG592kmIwSeadM4lL1swCmHIt1yJzpOt4j5O6nksw3IM" "S/E4GgvLv7+2cjoCyliahmwPFDV1HsdLz3ruu0YRKiCPoWFhavG4bkgmIaJah6SUGmrWPCN0" "v+GEmGMCRNDnHi9t9Z2iCanv5z9Qiv1k8viWc8gpXvdXJgP8UTCa7HmvvlhBb9bADX7sYYyQ" "/ZoBSrtqsdlO0MCHVSWImUjtH4o4lwlZVrSGUE71YIL6GjthMvqUatlU7CBP0p3v9x6fH1Eu" "Re4UXEUD5KxZiD4Qj1gfKAmkjexlcCNN0bts857RMHkYxHIVqrfe9bZxiIrykkuh6N5FEwK4" "i4OlqTKWYj8hXdJHmZNpsYe0f9nexODEQhZfZL53yZY2adeiWZCElKNnYUT+gzMFkRg5s8+Y" "TyDdHFyk/TMS47k6nAa11Hx+czEcSv3s1qotdIExLUmQ4tIYcb115gUNVNnLqZkaBSt4UvK2" "GOboXhEtRzBQ9vYElojLkVTIJCwoeNESxuBAuCHpRJptq4WYKl36QLJlhohhCAlhnkVCj+CR" "gWz04IFZqcVIdNkpyb5/jjcKnSZupJNT9Jg9+QqREMDZVLN/nDYsYLvL7XROalWqd8ZKTF/g" "I8aNLVdTee9bnVGPSyl/3ETAdeA+/K5NIn3xpLQb8DE1/17vezuza95GYaNr1Nb3JUjl+Gn1" "N/MaV9cJPmec12LnjzbvCBQ/9ko7RW+YKHlOcqV2uNfOPq0UrAYvuuK02qGvpFKXEhyGpeej" "IVLG9IfnGtKlAOzBQRexAU7Gm9VptMIZDAHUxZapAgk5xKofb5srmXFDgYG3JxZUaIxMuHmk" "Q5NZX+v0LDetOyg5co3ABZJp8DnNWK6JsGitkIhbSaA6DFF61gLaCl/aCL+KmDI2qjt5t0sM" "XgVRtZgB6QiMK2MIioeIpUph4N/00frIvhm87JvUlidw0SEW9ghRFxGve5MxcKBrkqzqsa6w" "y1+yxUp2iZBBXHugZmlwpKoO/geH/XaKjJFn1EhKMLzRUjNcCV0l0dvoFM2Gc9+7zb7NaGCb" "8pzIFw313danzoMEoc9CA5oEAbjB/eBbz635/WLrPk87lAB7IoUhsgJ2baDRr10FO+z1ao2P" "jFafUe1oH4NpwWZGSopzekTo573JWwlcyaRp1iMKBnSw5dzYHFQm1uMyEkIKb/iSElxFaB/F" "baxNcEVSzYowi43TLAgD31DpabApuDuX9DXSxvyI6jcavEeJX1hTKyPHcfyil4WOp5NDkJhV" "Vaxj+XayIeeDuzI+TFTLNmPo5XZBiNhCLgiLS3EKImUqrILs6i96cYT5Tvx0b94nBUclrSC0" "D1moP2Bk9ZBatMadp70YveiTS7BUteyOc4tZPo9cy60ZHwcKZV5gda2XxipfVW66vAqolFmE" "9xl/8279Inmkscay61WFShaBkiEj0Duv9TZBpQGnEc7tIS3RTO+H3PNse+hhMwq+O8KjyiCw" "IplZRImBDae+i/csiK2u/EfA0cwnBC8Fb9b27CtXe1GJEy4zKrnQ8aOSEFSotUo5sUc4BYWR" "/95CgHqBQ4+FfsB08SzyZgybFyj5+nDaLyEv5p6OcefnuZFnNxejcTJZ+KfMauMFDwow76Mt" "jme9CSLtpf+FeCwhuhujEpfkrcJFro7mLh+CkN2q5M79RJdm8eY77eUtE5tXdOwh0kSc6FSn" "7to3KaPfPg1VslTNTEWOedJ2LpjPL2VJEWSsM0MgupmseSSjrTi9jbG254X9L/JxLwdaNRyr" "wKX2mcj1etdzh3fEAd5fGGibi9iXP+OcO+AT57wSWwtU6fNVGHgnEO+Ey0eHyfopVTrUQcYx" "j6q4if2gAOgcnwbrXzpy26bsIKvPmfyZI76gpxQbYJqeRYAo1ipNGzebhh+xoHEsbu20S+P7" "+O4Tbzg7PVsFOV+yTixv0Q9Lzic5Bx8f+5XO3ZwC6xgm8AI4lBi0a4IjhySBE4njcPxD8FN6" "mfAIIKJqfpqtpr50u8xhneQdeFsoXVVfLLPHth8FJIPOhOOlkNqY2F71lTTpi0L/T5i3/RmV" "UuR8Jr8dCtdjzbMYRMTgeQQGQNw64Pyst4R7GrE1uvjGy83nrTjNaqhKKV2Pr4HirbN8ssQs" "hXXyJbiNbnFS+reFY2RxQZj9pBINteMsLNIUaPt69Thh8N45Yjs/YrbKiqZ98cn0iWa9TflA" "DrfEQW6kTyHzp3QKo0Jm9t3kGynMyI3+zy1OBq7W3XjMHO96Y0Jpzfgmcr3VjcxI4b/dVmGO" "/VHqgu+LRaO95L/1LcK+g55Qmr+DP3iBgWKvvPCnmyzfk0sZJvQtcn9fLE2Oi8EQ6Ox6iktE" "wriD3oFj/5RK0XQkfIv3mMFxuZSxpAIQF4P0Bkl7Y/Lj6hRMrajSmBLGbkKi4niu7a4lDz/B" "6GPQsIdAOwe3GgUDIvK93PPppum9p/jWAhEjWp0ipEL5l7Z2eVOEwL/9KunbZe91FUO7BMqv" "9/oMdNyfxY/LPoeMeJ3K/LrgiSurCuU4GbzPmG2FndI6ivNeJ7l3VPRUXjchQQ9btv13Aemh" "0kTyaLf3yZszpaZ7g7grWvcQjkiZtI81gnzqilSo22zj3Qp3D2OJ9eSN+/kjcdEC6lNsV61d" "hQwGkqO8jjk7sm9HOeHETMORYtvBgyXHw+omXXfHkWKtc/Ras2B+G1wPqHbL6GTRdmltuhFF" "cWS9jdEbonBANRJs9Cxj/l8uJtptt9ugNMpI4n65l5HHxJ3lGyKrg14M8Me4nG3IzwcQeyz8" "LY/osrvVX0gumW+gclBndpF2+FMtiPFVHAIiZEJJ5oI5tKFTPdyF2GMaetP18iQS2dL+vTE6" "MLspD59ikWGIeDNARprCMGl9gPyvNEfb29w/MJTfAHnffEYIWdLBWCqRicNfvlMhNbFo/GEC" "iWuc6HLLU4nAQSIppPaAZGtB/whCNsJgattcGd/1Q7CDHiHK+EYlb/4oRi2XivUImhPyt+Z3" "VvbMwpy9yLro/2FH8P7vvWZS+//hCNGkzRWcUdLhb2kYUt9RcMCmUgqZnii89kC2D9VbDC0V" "UwgEBdSKLGzICkXeF3iW1F/EyMn0T5RZccxpKXHM0xF0W3lul/vTdQfMXXkvLs9HfW5Xwk/s" "BtkRJQjKdvZDpSqOjsg+WAVR6I884Uzh4wuQXznOkzOU5x3rZqnUrs+Uc3v3E6KW5EICKTvQ" "xtL6zmGNs3l/zDhhaHvC52QD334w8y5J/ZjYWHwcRXfUTcDjc3YsZ3bsbrJcyOxgGF+8tfOH" "UlPCmdABa3Q0gByadsXs9MFAIgZan53MCJ6zjjG0VzuG85XIPbGKxRxCWsUyOILE8Eo7xvOL" "PHxPOJKCm6qMp6Y2Edgz2UvFMl5RS1PARIbx1j5Q3QlQEV7JVMeM9WPsiL2TiHZJUi0JpkFo" "N+0B3+XHTpJP2JykaS2ULTASWFLvOO3Mfs7tsaOT7N6liqpEUYzaRXjpETV+zoD8lrwBue8s" "h+vvi5yYSq9D4SdkNWV9nmiBTS9GuGWhvTMEKGTeQf0uzvYtITLBT8mZdNWK2pPbwXHkRBwR" "TIRZgCbqxM8FKHwNP6B4wP6ohro8AsiOGG5mz00WWQdYB8CbP/McPN7ht7BoeMLw8xBgo5V7" "arT+E6Ym8ouMNDNFjZbNGc2UfXxNmJANprMhxPz1qVdGLKQhl3LXbTuk3vP7529v3JZe4Vov" "U+G+FiniwnVAf5TJWOtd3TEGqSlUS/w+6TlsmdEf788nIbPQDLUrVyhqcBYWXZ7FDnFwL9Iu" "UeweEcM4U6W0DFiY5WpcjFQ9Qn6LEHUoBiOa+L2guCVLrtpr53j9t28Vd4LG872Q3HfqyZwl" "CYkI5Tk5TCCLk9WwcWbWTiANDGtoLr24L23Wa1AmhPofgGyEoszFF1/qWDw4ou9vyI6SMxjm" "ig4vG3ICu4aNimMZXS/uhiKGAhQpExoOEVqKIZoPUlo42GRMHPF+gcoGVT0LtCHrGeUV3wUz" "gYr+5GabLAmTCcJqXqN7tChYXJUdtd0s2EdnUFHsRMGNDMVmFuJfx8dDrel0YYoXcFFrTA8X" "3AUfrwDa6KCl5PMpQRIdMi4723dUFpphiTqxqKYNSP2y60HuVP3Wkn7P3KLaACQIih3Ot3mK" "aDHnKHKDgjVuJIgJ9R5j1KPM/0hXko6s98yVL6iA0vv8w8rfcrTGK5RYCzXzIdZjt4L4iokD" "t6M4GN6L2spTU/VRM8iaWhYDUeFvw6m62Hm21lTChDLALcsiifSSnQi/CDU7PHYVHDYRaVZB" "jKULgDSTZN8f4qOGQi8UIuPbnNaYXlYqgYMGcdNjsyf8WlWie6s2wzySFcCiN1zUT/mFBhPy" "OaZGgHmUb5f+4wTCljSlPlXuVf3imN4/OWJiUBAxrQ/001qfZigYw3RwNClmDFvbUy36HpFD" "znuQM8ZEQNYb1mgVIfIEK5Q9fzIZfjb4gO2TgT4Zko2tE9kSfHqdewKqAaJD8wqp/it/Bljj" "Qk3xiXGbVKXlEa9E4JFzCkH//qAh6w2ufFYOBDIp/JCJcX1vRf/0gg/rXLvDhso+VzkbO15j" "lwNybHRcFoh0XihwXJZUnET9e6YWjXQNIZtyGG/601rkQB9en4h6jdOhT57xVHsNQz2RQuZm" "CRDCmmToZ0YrE0KHXugeyWREDYFngL0zAa7REYhyVuuwi+29FgxzplJ0xJP+4tOEGktFDBpZ" "oKBM5QsMvo5GjG75uQy3DrmFNUsBuZaZG38yfmQ3ad7Ir5wcQC9FW2IngqWFjM7QrBVJTW+Z" "7Wv3N71K6NRUce4PJ9R81L07Em3ZpRUFM6W+nGrWczdM9QmPRabcnd8uXZuQ8qAp73QXWXbS" "kMmMgkpFloPlvBLIGAC6fFpMdafw0yvMUXWViLeACUXAJLDNxqyWtUPOvVQraNY0BHm8PIKc" "QA3MvbzJBWMIh8csP2SHSdJe/dQNxS4TnG1339j+RHXawSRqHbFvxKBvtY2fbxN/oH1+Lqs9" "kmJ85crGplCK986/yfyhNnhPOtY3SYIMY91Wxnvg/vWUjcNGyyVHR3cNCmJuqJD/Q0okmulY" "rCpQaf25/uiu4be8UumJU9whhGrsMjRgLXjzSysErp6SVtpSkuWw8mZlheOIDMQmau+cPit+" "fG0KXq1vEU0t7P0lLKeYbLg+cUrHkLKrXOZa21reTVWkf9JtmZixkbHl2khdh8Q8MC00Lv+W" "n4+5llHeyUihgmO1GeMgV8PhB47XZFaGjdS0sl1E7gkFpkVosqOWUU8qksg+XSdjK2FbEsfm" "sEd1zWX7SZ2DEMcCEv0IfdgPL6MssFXn1K+tyRgizRNdCHyIppRlHxBUAwjpoblha7GGljnA" "CjFAdc7dkWMmi+JAGtVfKU9zuMIjShvGvPyxUpm9A0idHWX7mQ8diqeemFehR8/Wbt/ajNiV" "4hfPax/nPfw4SWJ+wfag+PJSdVhXY63Sr+5rw4sk3an2ny74ZJRmFE0GJgRbcpnjzxlfZa3d" "tQTZTWFuMy/jJP9R3CrdUCthvVHYYj1HgWiJsk55konABzppHmDIla8rJqdsF7Ocg14H1mqc" "Tj7Sb324+pB+j58vLfcR2tgVlrGtUiPD2YNHZqrICHwOFOiWDwooZKXtsfDRZTiqJ62PyYYr" "tpJhkdcGKCZt1K0kLjjHV+/4y1QHiDCoQpQQfhCCltlOKO9saJuTuZA/862dPGGYuSPnJwPy" "TU7AwBIbGXyqFszmpnzZ28/4OlULayemXEltMlfzc8RlDO7Lj6hjcJtkIpcyGRq8ow0F9wAT" "SUrWxGIpEJgAg3Ae+gL9i3MRC1wHjoqjeU8c/U9ZKW4FHUvqYZVQN5d29QRe4uURtwZ5MdxO" "ST6KCgITvQgzo/pasfmfe8TgAL48y9EJdl2D2tspwJGhUKpaMlPgKFqmLgSChXg379mAAceG" "PTP1W0y9mUnCaNUWg5er8w8dDhMVKPu6iV9LLnNg2BDfK6wYpQ6lrsQyupd/W3Kdj/qJL37x" "DkW2EMXh+pf0CwMy7CbvJs+rJBC4AYRBGLrdSOAuZl+8wVNSoe9Sjfh6u8caxAxjc2Kh8BNq" "QSqkHEws9CWfwX0VQ+o36jUhSokFttwVyBtxE47z7jwVCaDRf0TqOTsSqhSSFIoUakYBZAEU" "hvX67ot3He+g/xaiW3eqJw1xT3yclpIerfD3rvI+AUx1wa1WVCbQWBIo8z+1HwR8TkY50jSv" "ux51cNWM9axmJ+B4QKUJ1Vkn8g3r/G3lhYZGYIbFQIxl9Bhv0pVO80m5WaHjPbR3LdQLTOuF" "Dmn8oVBx1Cwza86K8H57dx2cV8doqceasNSqoaIE0mCKNvDOVpHle0MNPCIe5jLU2Kji1vS3" "jds2gcoNkr0wWhZMMfh4ZPnEw605JUDfzyXMjdudi60zzOsv0bcQi0Y+emRx6Jr/pdbW8TjL" "OJICc5DfmOcUuWqT2Cexebvabghj/IvYrl5KZbRzi7CunWH0b7N7xHesmJ89Ij/oT7zZSekG" "1F9/KYP9e0nxhdJcletvuaoJyE/yQOPqAuVYv2OwSjjA76jUM75rmojwtHoIApjcuHZvw2mn" "QO2HGPeY+AGJlNobpgRWfRYGt0alhQmmv6Jk9EpwLCUiz4q1NmVYr2nIhSkNatxEQqG6WDh1" "nAuurlPcmo/63D0kbqJTW9EPlTH29/vYvH7KI0OpiLi/zmXwbl3ao/vcOuwcM7oGIOGrg03u" "qIhRC2WzZE9F5Fh2KrqLcCrwbgj5P+NLazMJrP3hXLSGXnqrvoupoNhtTkM6nSqqKim/vO5u" "vAJavozzzus+fCHFB1QSRYuMVcIcsQrrfYRx3rvM6rsQpx17gJc68rvfdRhXfn0K9vk0XU+V" "UZeCZGAejHK9pmtl7b0kL0iqFQ4KkPamV9PuN3HOQcGl3cbJxXJbQeNV5LtC1BQDYaRVR99U" "Acm6OrJ9MfH/VLzFwdLg2k2Xf3AtB3Q1pXmTO2qUuzNXbZdBVBxKensuHN7L95UWHlR9WLEB" "RswU4EoNGm1GMs6SJyTXXCdH6RQjC1DZXbuyl7w/VCroxGJXXjNagTa/WjVIjMGwkvP7+Bm/" "/X38dJEUTN/+ce+S61ALlmr51b/MvrtF5CcufmxLUqPwpvVEG+ubrjVs0TLN3/O+VkGpr0ZX" "YbpyIoFxO4YhineX9KbsRRe0L7OypHKfcxcZ5V3UN7xo2UYGLuX3SlLdjkOMtL4Eyzi+HmIt" "Orv0jZLP58auzxvtRgAQDlUVlvE0dG7fa8TvmtUhuxPDnxz/vAWK6RbuucTrr3zS4l2Y1+aA" "uYrOor0ea0/uElnO/ml76UWq4lZDCbI3UJlRVJdGORpX2m9vMLSCV1QaxJHZQG0H7dls/+S9" "H5dn8uoX7OP2HemR4iv+v/H6TPs5H/H7+33kqnIod0dz7BRagqzPRagCadsh9eM0xD3dQfLq" "FA7aF4in7VHhvrk2xJJeZJQ9NDA8E9JUnT+UoI0RhrMyKEYV/iiXi3SpGat1rQlQ+2sXcYhI" "MxcK0MvagY/P5LDgXhOhfabOv1LiYrdMBPP7/wfW8f3vXZmL/h/W6Qo37st5OuSY80IgLenx" "gSF0+4qh4BBhdLqIB4MOLJW+V4mh5xZBCLDVeRwODr7Rb0BD8bNdf/4MHUIhdjLuNdnQybmo" "Werl3I+CgQ0/xKVOOSqtmS2OtVR7RCNXfDCg+b4oPErzwT66XaPCJCdqpmbFkLH4zRP3q1c1" "NUdzbU67vC/nAv/L9CWOAxDPmK6dOSfG8rCz3B4osu+wUd5fCzmxYFX2UPn60mFQlzQzAHky" "3AzhWhNAGiKUoQ51MJCmFvAudq9AdUFIuiiqX34fbzxc/BgJKuwgcKnJC/r4cX64+iAYsK5L" "MVZNQaJ5chgHePXuMM/0HIvaUEL79RK32BATVNHjzOOVOesLv2q4xiAU0fJMbZk3QH/mZK05" "tiS1KxuXDR/KW31g1/hN5l2RESi/pmI1sspH15MGhNyrgNoHjcD+5vOHU9XCWKUPM6u7kcHS" "SPgK/LErkDpEfdWgOlabEz0DKob1gtyzLxcMahrNFdQYdeuGJBjWwqHJm41I9NsQGfosItmN" "j/ZUBUQvRxgxQPs3EAJf2rQROxPtgdLu1TnVyl1JfkIUK4V4FK01tGHKWCT8L4J7V7+Pcu3W" "G0GDXosWMOyyyebCJ99BQnsE10EbHNzqoldZpOJGU+IeUytklbSCbS6FbogHoUcupyO+kod5" "AqtzLhBmW5Stg+9FmNwMGPwBs3icm9v49o24mkmtQHdVGn/x4CiSQg0mTFfHZEL/24fQr9NJ" "mnAhjtRqhY8A22uEanyszzc3CVw7aBnu7sIbm96sGmv/BUj+vuMio+mJQPr8dXrhvv4JwLmd" "cHVfgFKsLkI6Q2FVr9KP/Q6CyKZGWn99HCmNGmKMBFV+A6iJhgLYAc6q9niuOZwYMe8KGWH6" "tBdckPjIeE2BgNAtEOhxp5p8EXsPdN6jJTuOxfEZBdwjeKiEX0i3w39kYXRKQXaXt4SpjSOu" "Jh4mssQ8DNeGAYLTItTHlam7xfQPrANNffQujoTNnSWi5agI2ZN5bIRQWfmdTLDG9JIHF8WJ" "0JurmMVVbnAx2qutD6/tpX+D68kxADQeVTKHfegH1aj8K94koz2JlShkpdPHPEeYyhHbHv12" "oUaeK+kToZcuk6gKIRwMkOjDxzYjevvzbYyhrLArN2UE9sQ5plIZaOHtrBNpYM+XS0HFTDBP" "IJlewx2KOHzIN9R/Le0ka59vBfwB5qO8khhefPSX83m9Z7ge15G0CUXzX0AA23SEWd+Lt4Qm" "+51AVyuASgCxmUZU2yRzmybqtM92JtqONl8plIKjXCrsWfZqwhRRsYYcluEU+w8ZBjmENnWu" "//AAdxfqLHSIIrVskii0qtgR/iQ9y9pzSYJJ/UlU7s9R3JOl3BP/KkG1RGZ/Pl5zvIaM8yAp" "cSn3X4CFG0mhSlp0dAadbpLutZxpQcf33PuGYnQxqyaxF5TsLwFKLPfdaVS+Y9mW4OTyZDDm" "7w+mQ7yPNCY+MtALjIduEW2hoz89XMb5DkvlPbSZyttNDRze9xo3J3s9r26u75ZdiJQz/+iS" "zrDboBxNSFFB1cQveRHxJlZl72CDNmla7CHQPCouPtTnF/ojZPfeGFtoxjwSyt6EP/gZxRYe" "xSU1ur8qFO7AvVTucU7bIohF2mvrlF2rxiYEGxBbPGh+brca8Vf3Sd5DrU9UTGiI4Lxxgcwo" "zJDrGHDB54ifX+MZCyDn1iecp5mtxld1hqUmpxTGCEwxE6+LafozQKEmrQkILsJDP5T+wgyZ" "5lUWv/wRFJhOUYYLQvrh23H36ECG0H7A1e0scahy5GlB9MdF+gv5Jm0LgL1pHTUEvTzURLZz" "aG1RzIR9tqUSrY4+w5zx+oRtX48LCpUies/CfZRerPP+VLxhwVo34XFFFVLbiYFnoibujK60" "fMWH/L6HR6WFDVUNccbxNvqGrBuElsntVp60Ijr+Yre8cWs2eNPoUR0J/0i8UwU5Oiu6+NMT" "LdoQaWUr21PHAa8q57PynrSjVAwVyIQOZSHufnli3C/jz7hNvoi1ENo2AHx8NKLouBYEvpsZ" "Bke09Mv7udHy7jYkWS+96l8kB2vvb9yHjgf5cJf8JMSIjO1a1RHwCsNS2+iyc5atlcw3EZk3" "RmWQ/90bs31jk+yfiMVjCjSOjkYw095Rx4AuxmIARkuxO++RgKy++hhgA9N4vLuhMEbU2hsW" "pa6eiJxFZn1GEhxljB0XkIpbGpJ+E7z3bVQbnasMUqvcnEf8qJE/De2urCtEMaTlJyUVpJil" "wqe+jf8iCQn3oXcyJXsFiGP2h+lg+SAiS9eYVAzInJJTStU5yJfRQqa+EAkS6hn86y8qdfku" "i7RYWdr3dIITwMB+XISf075PIi+tAD5zvLbWmMfWvAFirAeaUssRZyMy6kYfx/pmnRSo3KjP" "QHPdC8Ii7i5+Jd4LVr3RQxRgMWzp21ZaLC7TNTeS2/e9X5a8TTSoiBiV4+VdWq18Mtbl0IEJ" "rZ/JSVEroCrPIHDLAkmtawgcRQmhnYaZ/JDsoRiOMwyXLCuOrWyE0SustEsTvWbgoRsq9Xm4" "+QKl9mLLKC9U0zHmWjKNpybmh07FVILdo4kw+IoTtdzF9sV5Zo8zXyyCr7fYgGIzLG+u7jd2" "O8OshNAer8iPA9Nr/8TwrP7uFkl7gY2CBYgIxZXUqT6lZC9K9+T/DwAAAP//vdzXMxwAowVw" "ZVl9EZ3V++qd6Fa0jR4RFtEj0TtZvZcoq3dCtISIEmz0XlcJUaML0VeJzvc93bkz9/3+Aeft" "zJyZ38PxUE1IxF+ofZvD1pds5oQbaMKBSkk98dEulnuUzcOfgVBc9Dw1sesttfonH2MxHeMV" "JSfDG6v2Idhj9lP2MpnP641yIVTdwnrd1ymGllO66jwcq5fPdcKFAtNpbvCCltUo8t3bHD2e" "8keK25ReN38hZh/zTNL68oTqDIj8FZ0dC4OWK0UBRouGIoDqhBa40N5k4p7Cpx5tlbkViZz3" "p5+hir3tF6mlOHL+dv9EdRHq+Z2G3Jcm4j8Oy4T+BiWO5XOG1tiUv8zptwkclWTYT2bT4wz8" "5XW2Crk1knb3L4/aYaV+TGNlTKO+5+NOovVqtaPhOKi6mJLZ+dsFLVV1CVEtl5sxx9pRSwqQ" "Ky/E3r4qrgr2JCtX+s0iMYJJVHHSMw+pXE31ltGM8NBK7gGORqv1MMeW7M+sslGPz8SfzPle" "lHJMB6l5d5ClrqroTeGHm6q8NmUdTP7nZ/77+5thDdrLP3FxlG+VZYPXVmSsippcOY6oUEF8" "Ty/foR0c5UqevF2NyfLxLRe3YRz7YsJ3y+joCB2F2ZtRULwI4/rFzeLPzYjDpDfHx7OtJuTL" "mv/Rx4SerbTbmjd0rZMXVC8wG2G2cR/w9bZqsboipnKjVvqkNLj55WHj++7sxLQBLJAluqjE" "XJPucPo7n37py6RpqNTnJ6fOEWFcB4HflBquCuzV63WHRMaECPdsg1NQrmVJeHEhlHydbHfr" "60ljrUlNVqo1ofoq523f+oNaszOpcXSIbdKfEzK7uCUAfw9iRXwp6NWvNguZqjGvALySF9lD" "Fh0UKpYDomW95Mpx0NOxQe2mmrPsA7G4WPSEuD6EFqEKpz57ooru5V3y0nOnBZPuc9Ym/La6" "MdvFXEqZfaa6C+OWl7lcaLavf1wKRITvsHgkrJlDXSuen/W9KT6nWzNlhlMXn+5ZqyvP2ipx" "yClQ25iK9SiHCXUBJ1GFU/Qv7QaPX8+bpYLPgUBozOAxuRBEbIMVUDqUZilCvSZH44dVo/8Q" "+As0qaWQeVabbrl7h+Bnqa9YU34tR6sXe0i9mdoJf4WRUC9OMHwqG+Ot8k/kY4VJJq2Y0hV8" "fZr4lRWXq3Crj/Y1o0UF5GVy4w7LhOG/5U42DXtadVpfqAjnlTx15Dh94UaxyJTxjw3RsF3r" "atBy5wtJRGydkm57WrcZNKjG/4ex4XTTjagnE+emZr+e1Iuyt8uJn6bQP2vVL/BV7JBDBIzs" "HBDMD4b8ax1oR2kHW75oaFsprd0Le8y7sqeEXC4LaboE+FjX3+BFr6ujL3fQ++OfjX6TYSqJ" "arF/sFFaU74vSjgZWczC3dlnnv1R3WAXzzWGZS4ZOSBNhbNY2sWXW6p8GsfMV871qbWkRxIu" "LlkHC4Fpm2nBDMYC9PZYcmSP1FwN72Djs8sx7g2bS38SnZNbxguljRRxLzMxi/KrmT+ffR5M" "FEWRaljU7eKTdBrOKR8RR88rbmDWy19Dwupq84LVRYTCFvygunyJo6LdLwlxGkCMmancJMrF" "sFW2CuqcWuginiXJJn60rS9W6o534CejKGIwm4iISkXaevvshFa756BPfPnlaBXgGD5q6EVP" "3CoJyuBaB4TwJ85Ue8XJdWClWue0p9DWCGXdV8E+LqnySL5j0Rwfn0h6r4j+b3Nyvogn1YSZ" "ZSk415TpCOzETOPNlwQPUNXgNytRt0dYMMyU82vX6ZRkjZP0d0Uur2y64hLjNdsVN1aedMK8" "GQUmAt7zDvXj/bBRJxnNIFX5CgKmDGFERLINu/LreT2ZAkQNN/oobXdi44EVH0mRj2Q5j/z3" "Apopv/7G1lmFE0FFGMv86MlNAOIoozHQvd5KEkgZ/837s6PXgX2/pSxAzUuBu1BzfzsywOxW" "AX/iQBRb+FJ/yHPpqnl32vt1vd6Y1E/kIdP51Ty1MfnuiigAsEOvUlar0myksGa5bLXipFQi" "cqRTZTE3tUjuoe4078BYOrD4RfZfeIil68Gzhb2Hn9/DfDZpHhIR9wAWnAlt5qhRLfCSf6xw" "hmCohAtLfe9qucEM68epxaJpoabs6+niFgSzpBqgjP5IWZ6SUGkR83Q1hVksjPIhOtRoZTMB" "eUnMEquW/XSeCwEcEikvCMJRsUD9eXObuf8loKGp1E0ovHhEAaZO8/sV2IfWmXfAZuUvRTu5" "+G0piVCle/rbFcmqNgV2sTOjtbge5ni0pkOi4XwUvtHtgTVfDbwQtJ/uu3m623VJTCZnIFf3" "ye8EFpL9D/7lKImLJ9So21omkZnQP/IeTzwShXxytqIURebb1DIxy95UK3NYDs9BfFaOPI/1" "huim2BzZs8yt0AZKs2anGOVxV3kJfmWREUawqo18pTGxu8fwkBf9mqPw7roEbR1uymX/8UHU" "iOMUuK5kyy5+KuCLlbeXGHpiT4yhM0uu3kM0Cr5lodGu1l4xE22RgaIqzC1t9SOEPzOl5UU6" "tgi9yE+heE+fNnUQS2wl7e6WLjOhHsjteOpZVazBH+seZGNj6T80NmdnaCvMBKVUpDYyIQgs" "829oaa6TPpmHj56AUwWSmYmpsCcaqmLiIg9E9xpZb/TwRjrY0mwB/+CnLaG1O/GaIw+H7wF8" "LH23j5RO4uEiOCpQWSmQsgjOzzvP/JRorMHeeLIHVER35LtoZ+WnxcL/SvIXu6heOCZZj9jI" "KOZ+yxO+IdvqsiRXQo32W6J+CrhRCKwOLBMUdQia2HuZjb7PvZgN139ZuAglxZENsUAWnvHq" "V18oLIb5BA/VGknBlveYv189OgpNgJxT2pFBVPm4Mp0XdOzpp1e2+5BPK7xkrF3PN6P16RM5" "qJeps8oFBIUbxNUcFkaanNPlcwKRSdl29xHPxvMMr/JWy+rYN8Rt/kGhi9SELJom1NlVIToB" "A11+/KzW6r+s0lgckNzLzefEjBurYSdSbITUYhUibwjo2bx2BS7tgVrZl2uAi2Ybu3WhsmoE" "WUnbwPXTLWANSMNTTVeWiTHHQ42Z3dWwPX9cAkZ+3BxnjLsX3ubo+gCSMLlJrhK1/vx/kET2" "/w9JNP7nGCCJUcs3yk2XCAwnp27ifI2yucPfthCMJcJeuRJFrSqveKjwivGEraMDsXE3gaKT" "qUPqgrcU+VDBxnzywBI6PRlbdOswv1ZNNBZ/jhUyQ2ln+b2rfnyVRc33+O7Meed359S3bWUO" "FEWH7ILNsLefm9RpvomNasF7HMR1PHqNzJaNMn+uDGUz98G27Qb5wPfnJVRKXLL+HGor7U4x" "nudnskpXU1lpIYX2tPhOZzUuE9tsZV4dl7RWzHf2mUuTOuZ9UqySeZ77jinucezW8Di+S+Ey" "xUjZDg5RzhYmSrZWIB8le9xt0PRDpmb27XYUwZHOc+5HMtnNe23FtQSH5XKR/dYwZ4SzlebB" "SbtBbn0rG8Xyhw9FPG3Q/LB9TWg5ipr+bKB/3hVBa2+rjmrLcKiWZjcItf3hwxk+7ic9XRZu" "i8RyPCsK52nIwv9qkgt31qW+GjRTGsrfIuNMGBX0/aUjWItmlVznDHGyk5UjwFJtubtRdYDr" "ungcFvbN6SDYshYttEzEfPrnvv3SABompDKoSRXpVO4cAU5LmJVzc2tCeaS39Z/7Ic43nwyd" "Tb8uWhPyCx6R+XHkH1490v1cx9yRRydBHFtLaoX2nWahdkJnWIJlmW7VM1rG5X/Zeg+4PnCu" "QKZU1q2UEydQk9xLgQ49FMq00HvwlhU7xu1edZ3YdRxO+9/1MGUSV6P0qRR7rIlPuKorwPib" "M8V+da7+5sl3jPHD8MCcxUiwSVsc6TYEjGSdx9OtU0S5moh0FYqW00haQtfhZMF7ZwrMAfKo" "dVw7peG6A8210DC7IY25pW0pmI3yMxSAx/0dhvrSmjNsI+sDC1hKCx6TlaGMaTl5U5eTnn1M" "MDvqxhFn4nNPmnqsOer2g9JgY/YVqzphJKEaQg3flMqxjpL2eVjLt7i5koM7EmFNr/IDUqtd" "0rkPAW6b2cUnXovztRPvnxhYfCfb6Eh7sW4UPs+xgr5q3tYFMnax1MSD3WJeTZO2fXu9s7S9" "xYs3J3kdygNJUeFp7I6l5cUzrxvQhn8g9wNzIyfmCSn38LbQH7RvNtLA8VawcTa4nRkZZ1Ou" "4tzCP64UKr/UDqYDial41gJGMa0RXxzZhZJH4wZcijkHhTznIkut016e/NMTrUduQoD9xL3+" "jsh9fN575m8vnn/PtHvnSNyq27KwruffvSrQYj9xl6T6aSK6AzMpjFZtG4smI0h5mtQ4T8iI" "qJ6PycXZX4M+zYzass4vgihGd7gPYweF+/bevmmo493oJ0p0Okxkt92lFR/UkHcNaHyGHkUX" "Cf/1n0ukJ+X6A+weV+riyrRTXQd2gxnOjuxQze/9w4jCaV2Dfu4Apf9d01xKHd4ROMYXWcZW" "nO1PblnoU3ITZQDw6Mt2xk21jMOD1eqrLD7PPmbUPYk6J/1bW9aJxMIg2F7EIdT/HMdd1Rr1" "mP+mP8f7+3OgQjeusoG/vc6ZucSdLhwqp+KlrNC13ovj4bgg20jRpn4RE4JqbKKcYiobWvHF" "tPz+pibzj/BW3Axw01NvFlUU7NXbcQL0vuSsTU6BJzT0iB6Qf0i/ZK3Uztj6SttmjLQ2FoYh" "9AyttPDCAmJyg5RXzy9yhMexYJ4gJFltTkaZWv9Z1+XakN8D3OA4l+CUwrykHXmO3mSqF8cM" "0UQYuqL8XwLPkYDpNAlnff/6SfRK0afTzDlfLhGCG8GhiNvQpNRXC6OMxJSt6lwOO5wcvXVd" "CXnm/z52Ff5OF2wj33sSSMVJ1s/4XRwuL/JgO2hrT+Ce7DtJN6mG4o9LWkso/SUgThEPa3fg" "fE+/ILoyTe65uBgbhD+xs8u2dTl/TZNsDdNY8j3DTCIjy/V4utG3IiQpQUsVwJSjwVs5Mnmk" "NpM5OdVAgdvU3TGE/yBiP+aj3Q5DhG2xAB3+1kov9nx4i8UEoy+X4NCVNgrSfZvDWR94sh01" "qQ1xqu0Lfo5Pc1PIpkkonoo80b7yk7rJWUWSG5wK3tUbhEeLczZiofCDXtsW+yDIEbSASMki" "DK/qXAE3W8sfYM6q66szPxGsuHKutiP1ByUF7YblVYsIw48HCwLsRJ3Hi9uWS/gZ4fwLyDqu" "N8HKNMrPhUgNCTQ7kDdRrKL+3CUFEd5EGWmZIuX18ZFavOK67yIZGlh2nrBLagOQk5pinJnL" "oj/4ChGekL/TcUSE/iAPEIbqRKPY1jjqkdePFzkPh/nuZOMqYl3jAXrr/bK0OrHavdAwxZQg" "6qB4VoYRXxrCqJJ4qKxzcYX2Ok08Qw257tRoVWfXrQjBIrxSQdjMXVRkxHGo0Gn4kTTY+lZ5" "X51ZtUH54dsi6Vv7g40tVgQI+NrriPXWbBS8bEpCxcLmy8nB/8AqSNCW2Km4nlPozGhwfsMH" "Gbbe3QJXK/1QWR1GX4rESlzsMJUHP3uu4aksfeUV3jXJlPIhD6BWtpRruvAVsLA97reFuCfh" "37tLAmSYZ6+UEl2PQZW4Fz8jNBK/ZN5lQlOktTek7UqhtXb3T3fxGYLIY1I+owVeqNkMki+u" "wdxgeKhfiTMT2XzFtzWHhSkhxR/BnS62MtTFtpUbRZTEj0sKw3t4PO/cUVANoLwNT28GA84x" "RbK+Kvssg/3DlC1CP0vguDaqE3gtHMuFcM2ZVfdRsBx20lN92RLANd8KIh/zgAiUHX5Nl9JU" "llNZ2DNYwWzhl32iKBtM+5m82d1DzErjUgF0moTkmCszZPqNFadoglq/8+IS7IRogW59w5Ks" "gXfrHcQhEprR2xrEXvLZdnyo0IYEuVapIgwdPiI1z2DBxcoJ8sy3m16HFTPkDkbjClnDSU4T" "w/BlY1SqevyTwB4YzjEPXUfsfJM/Jg7qvCcgfvyCcvq/E/Ph42L3YRXkqMxx7OhKNExrld1g" "PawYZk0z/91WXibCfFrS1iawp42VtLrzHVDihZdQrDSuqkB5eP1SxPJPYs1nO/1NqSU3OWc4" "SLUOUJCOTebTiJPmM9pxDLiUDNp8RrDnR2PXe3BK3cqlUtjn/Q3pzrVNnAqJ+wp4aqD50sak" "x72/KpBLXasVeZ1xnk/kgIpUgC0RWHxbbnz+uSxC/VbxbzE2YyPxzGiSivDrwGP29rA/MbuJ" "gyQhMoHWDS7eps8slTfVnVx2o3Sn88D7SYG9pIgcczRaXz6//Ay3uv1xqNEY4yv8GG7cQDvw" "N+l63bZvzWzJ8/wwKj6kvmjU5w3dHDKZ9g/YarmBEsCcEjLrUBzAQyWdiQuf3twkeGb8BN9h" "akDsY3oYZ3LB8cl1LXIyiuO90nDutn7qZ+p4yT7v5dJsx3KuZV7YLH1AzIXcAMec32m3k8j0" "iKC4xmsq85l3xDiJSuODfKkbjsUeB8SWP5UoQZEPZRB8psqK+Ia4fRssNLz41rG8wbjEK7/O" "stzaasjdUh9jW579HHkZEgmJdyi7FHAIA+Pyq8ijJM8QiwzGTb2Fpbi5LHsPAIhSo+3AuAOX" "fLEEE9McEzqL+eP+xFie+7BQY/nB/bwwOtimbleJqpbDIK4mKkWYc2yLLdi0I4VoWkBa6J0S" "Iqf6q91D7hcncN/fSSNX+E3hiXgnW4tPyZTbfkhM8SvVof8mvrdRkl16jLEG/oKsE1EJ+Y2K" "Liz2qZQ2oHqoEpj0NSUI6c+qRheVW3qooqCNf/KOeFye2C6+uVg9qHsyRfJC4kFi/+Auusz5" "EvaWie9xcIYwWtmqZZ0zjEd+V266a0NGFMDGO5/hbuoLkW0QJoG7OzUKm2YM4PXVC+e/0mlN" "8g53oJAWeJmdnm1Fwy2EivZpN5U/9DFudhwQ8Gc7BkOLLLKCHDjVmHsyqWWwzoJIhv34xvKt" "d9zRBEaVc+4v7L9+jIHMye3/5AnEzomTjIl+k+1O97Ch7vVirUHsLlPqFYKqKNdcF29i5v7A" "w2VYdZ/WkqUDyB5q9GApiWXzplCWHBpj+0gbt88zQ+aNi5EARBjGGKAKU1MdhrBKCDJineIO" "iUyqot9VD8H21kSVcit0yRMnlZetphhBzIIqWXCWQ066oGc0ScmsoPyC40/gkRVLgNtmZNwV" "x08jOkE18rsNIVKie9hOW8r2rwRk5vYdiSd26044WpDWmdW49nwsezfDPaDy7Qj2+tvUf1HE" "kR+hv+5KoxRTE600L7X91Ur2ua3mCjvY1V4NM+TPT0tZ25mFW83niOhwCNl/MGYkkeAEP6GO" "s8jS5shVW+Uc1zT/oIgyO1e1O8TVDm4rVYmVNvemHuAQgkiOaZ70gA6IQebfKWCcrPdRkApN" "CuJb1dYSzIFXrwFDUBh2IeWOoe3gTFjuKxPVfqHHtg6W7FLvw7/stGDqEbXdifkAS0LAfSpg" "Ua3qnaw9Y16rWFryES1cL1Ti7MfzUcc3H5jpki21zvVmdIvOsL24HYnoBghnxhkT9kA9hLzu" "/cbDUEzDzWVRy5AgStGQOdWCZGa8SVf3+U16C1afFg5ZzbnRYHHkirVPdyikos5r8IFNfql1" "mpja69/q5zuWnS3EuGaBENt1nxK3kYB57GOf5GxUxO17b4KWruHIYSJxYbFVOtFlP3n8dtVE" "h0c25HlcAqNnOk18pxNF5XEv3ervI3OF8igrM/622f5xCrDdqhgHKf5liexXcIQq9/pbiukn" "c7noUQh9pnnFvqY35Q1opBvS/aojZdIjwOylSifXfvhPN4I26w5yUhWFH1sMJaabswwthhjI" "Ok1M7P4m+QcNurgPDx3kbFZCzC4St8dwY+FKiPsYvkqcpOJ+3xfLXZPwji4ntczeYAuFt7Uq" "hG6bneIcKg1vGOGGI59VZiT8IDkDnrYG2sn+rid/Im2L+c5ddPGICy+MLLPgkuNr2hQh8wL6" "sgbTvVfrUe7Tvbsn9BRLdYUX3Er4/uuxFViGY3RTwk3T6zmBnKxIbGwAyr2Bw+n2qi5iy/ON" "Pd364JCVx40xWTU5estviIpjz78PTBIE/Fhbiavx9DsADJ4hH8JwwmGqtRs3yr3+s3sfQb42" "sAGw8N0Fa7MIgwXd1RP1IaY0ewtBkYuXZKr51nUvAkhemvtYVP2cLQ0xZLSr1Rj69P4xwiCr" "2MVZVlHEv4v8pGeY9LPOn8tEHFCdtpzphSqdki9wcGwLPxZsiYaLboIINoVTx7FFKcE2lzH/" "8q8hTA4RgdejiQuJnT2kQ2DWyrp8UdeFvje4/iWD2/NxZz1X2j0ZMz4+jxltMEqrWP6HqOL8" "tF0xl5bA7o4x4gLkQ8aXqRio8YFFyYYPjYiw2qX2RiEEpi+dVSJViNuoYbfY+LPtEy2qPqQ3" "ekNE3w0kZjNAN/3g06Tp8ECU1ZIfaPwRUnGznxN/XzNbxEKDn+RkZ9WS2GOd8yrhRh/nQigf" "DyUtJLWfDc/G/lUVmnDt8VXOyir7fqFbFptkruC9HqPyM3/0k7OR3CrgzNMYvtwMxJ+vWryo" "N6KQgDrcLUDqh36PIOOXgmytZHpLxrWVKnOcd9hrPfnUGBcHC0113+9yPz0Djl/byoGd1487" "Ym3gq99gdwc2GKOFHwvcIznxj27RXyqTj1bn5yhi/VEkVU0fKdy/xSn1e1w1x6pc2N4DZTb0" "mn/BeBL/t2X8B2rxLZ8="; /*---------------------------------------------------------------------*/ /* Deserializer with added processing */ /*---------------------------------------------------------------------*/ /*! * \brief l_bootnum_gen4() * * \param[in] nsamp number of samples to retain for each digit * \return pixa of labeled digits * *
 * Notes:
 *      (1) The encoded string and the code to generate pixa1 was
 *          automatically generated.
 *      (2) pixa1 is further processed to make the pixa of labelled digits.
 * 
*/ PIXA * l_bootnum_gen4(l_int32 nsamp) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa1, *pixa2; if (nsamp <= 0) return (PIXA *)ERROR_PTR("invalid nsamp\n", __func__, NULL); /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum4, strlen(l_bootnum4), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa1 = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); /* pixa1 has 10 images of mosaic'd digits. Each of these images * must be extracted into a pixa of templates, where each template * is labeled with the digit value, and then selectively * concatenated into an output pixa. */ pixa2 = pixaMakeFromTiledPixa(pixa1, 20, 30, nsamp); pixaDestroy(&pixa1); return pixa2; } leptonica-1.86.0/src/boxbasic.c000066400000000000000000001654541506303110300163200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxbasic.c *
 *
 *   Basic 'class' functions for box, boxa and boxaa,
 *   including accessors and serialization.
 *
 *      Box creation, copy, clone, destruction
 *           BOX      *boxCreate()
 *           BOX      *boxCreateValid()
 *           BOX      *boxCopy()
 *           BOX      *boxClone()
 *           void      boxDestroy()
 *
 *      Box accessors
 *           l_int32   boxGetGeometry()
 *           l_int32   boxSetGeometry()
 *           l_int32   boxGetSideLocations()
 *           l_int32   boxSetSideLocations()
 *           l_int32   boxIsValid()
 *
 *      Boxa creation, copy, destruction
 *           BOXA     *boxaCreate()
 *           BOXA     *boxaCopy()
 *           void      boxaDestroy()
 *
 *      Boxa array extension
 *           l_int32   boxaAddBox()
 *           l_int32   boxaExtendArray()
 *           l_int32   boxaExtendArrayToSize()
 *
 *      Boxa accessors
 *           l_int32   boxaGetCount()
 *           l_int32   boxaGetValidCount()
 *           BOX      *boxaGetBox()
 *           BOX      *boxaGetValidBox()
 *           NUMA     *boxaFindInvalidBoxes()
 *           l_int32   boxaGetBoxGeometry()
 *           l_int32   boxaIsFull()
 *
 *      Boxa array modifiers
 *           l_int32   boxaReplaceBox()
 *           l_int32   boxaInsertBox()
 *           l_int32   boxaRemoveBox()
 *           l_int32   boxaRemoveBoxAndSave()
 *           BOXA     *boxaSaveValid()
 *           l_int32   boxaInitFull()
 *           l_int32   boxaClear()
 *
 *      Boxaa creation, copy, destruction
 *           BOXAA    *boxaaCreate()
 *           BOXAA    *boxaaCopy()
 *           void      boxaaDestroy()
 *
 *      Boxaa array extension
 *           l_int32   boxaaAddBoxa()
 *           l_int32   boxaaExtendArray()
 *           l_int32   boxaaExtendArrayToSize()
 *
 *      Boxaa accessors
 *           l_int32   boxaaGetCount()
 *           l_int32   boxaaGetBoxCount()
 *           BOXA     *boxaaGetBoxa()
 *           BOX      *boxaaGetBox()
 *
 *      Boxaa array modifiers
 *           l_int32   boxaaInitFull()
 *           l_int32   boxaaExtendWithInit()
 *           l_int32   boxaaReplaceBoxa()
 *           l_int32   boxaaInsertBoxa()
 *           l_int32   boxaaRemoveBoxa()
 *           l_int32   boxaaAddBox()
 *
 *      Boxaa serialized I/O
 *           BOXAA    *boxaaReadFromFiles()
 *           BOXAA    *boxaaRead()
 *           BOXAA    *boxaaReadStream()
 *           BOXAA    *boxaaReadMem()
 *           l_int32   boxaaWrite()
 *           l_int32   boxaaWriteStream()
 *           l_int32   boxaaWriteMem()
 *
 *      Boxa serialized I/O
 *           BOXA     *boxaRead()
 *           BOXA     *boxaReadStream()
 *           BOXA     *boxaReadMem()
 *           l_int32   boxaWriteDebug()
 *           l_int32   boxaWrite()
 *           l_int32   boxaWriteStream()
 *           l_int32   boxaWriteStderr()
 *           l_int32   boxaWriteMem()
 *
 *      Box print (for debug)
 *           l_int32   boxPrintStreamInfo()
 *
 *   Most functions use only valid boxes, which are boxes that have both
 *   width and height > 0.  However, a few functions, such as
 *   boxaGetMedianVals() do not assume that all boxes are valid.  For any
 *   function that can use a boxa with invalid boxes, it is convenient
 *   to use these accessors:
 *       boxaGetValidCount()   :  count of valid boxes
 *       boxaGetValidBox()     :  returns NULL for invalid boxes
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* Bounds on array sizes */ static const size_t MaxBoxaPtrArraySize = 10000000; static const size_t MaxBoxaaPtrArraySize = 1000000; static const size_t InitialPtrArraySize = 20; /*!< n'importe quoi */ /*---------------------------------------------------------------------* * Box creation, destruction and copy * *---------------------------------------------------------------------*/ /*! * \brief boxCreate() * * \param[in] x, y, w, h * \return box, or NULL on error * *
 * Notes:
 *      (1) This clips the box to the +quad.  If no part of the
 *          box is in the +quad, this returns NULL.
 *      (2) We allow you to make a box with w = 0 and/or h = 0.
 *          This does not represent a valid region, but it is useful
 *          as a placeholder in a boxa for which the index of the
 *          box in the boxa is important.  This is an atypical
 *          situation; usually you want to put only valid boxes with
 *          nonzero width and height in a boxa.  If you have a boxa
 *          with invalid boxes, the accessor boxaGetValidBox()
 *          will return NULL on each invalid box.
 *      (3) If you want to create only valid boxes, use boxCreateValid(),
 *          which returns NULL if either w or h is 0.
 * 
*/ BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h) { BOX *box; if (w < 0 || h < 0) return (BOX *)ERROR_PTR("w and h not both >= 0", __func__, NULL); if (x < 0) { /* take part in +quad */ w = w + x; x = 0; if (w <= 0) return (BOX *)ERROR_PTR("x < 0 and box off +quad", __func__, NULL); } if (y < 0) { /* take part in +quad */ h = h + y; y = 0; if (h <= 0) return (BOX *)ERROR_PTR("y < 0 and box off +quad", __func__, NULL); } box = (BOX *)LEPT_CALLOC(1, sizeof(BOX)); boxSetGeometry(box, x, y, w, h); box->refcount = 1; return box; } /*! * \brief boxCreateValid() * * \param[in] x, y, w, h * \return box, or NULL on error * *
 * Notes:
 *      (1) This returns NULL if either w = 0 or h = 0.
 * 
*/ BOX * boxCreateValid(l_int32 x, l_int32 y, l_int32 w, l_int32 h) { if (w <= 0 || h <= 0) return (BOX *)ERROR_PTR("w and h not both > 0", __func__, NULL); return boxCreate(x, y, w, h); } /*! * \brief boxCopy() * * \param[in] box * \return copy of box, or NULL on error */ BOX * boxCopy(BOX *box) { BOX *boxc; if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); boxc = boxCreate(box->x, box->y, box->w, box->h); return boxc; } /*! * \brief boxClone() * * \param[in] box * \return ptr to same box, or NULL on error */ BOX * boxClone(BOX *box) { if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); ++box->refcount; return box; } /*! * \brief boxDestroy() * * \param[in,out] pbox will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the box.
 *      (2) Always nulls the input ptr.
 * 
*/ void boxDestroy(BOX **pbox) { BOX *box; if (pbox == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((box = *pbox) == NULL) return; if (--box->refcount == 0) LEPT_FREE(box); *pbox = NULL; } /*---------------------------------------------------------------------* * Box accessors * *---------------------------------------------------------------------*/ /*! * \brief boxGetGeometry() * * \param[in] box * \param[out] px, py, pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok boxGetGeometry(const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!box) return ERROR_INT("box not defined", __func__, 1); if (px) *px = box->x; if (py) *py = box->y; if (pw) *pw = box->w; if (ph) *ph = box->h; return 0; } /*! * \brief boxSetGeometry() * * \param[in] box * \param[in] x, y, w, h [optional] use -1 to leave unchanged * \return 0 if OK, 1 on error */ l_ok boxSetGeometry(BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h) { if (!box) return ERROR_INT("box not defined", __func__, 1); if (x != -1) box->x = x; if (y != -1) box->y = y; if (w != -1) box->w = w; if (h != -1) box->h = h; return 0; } /*! * \brief boxGetSideLocations() * * \param[in] box * \param[out] pl, pr, pt, pb [optional] each can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) All returned values are within the box.
 * 
*/ l_ok boxGetSideLocations(const BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb) { l_int32 x, y, w, h; if (pl) *pl = 0; if (pr) *pr = 0; if (pt) *pt = 0; if (pb) *pb = 0; if (!box) return ERROR_INT("box not defined", __func__, 1); boxGetGeometry(box, &x, &y, &w, &h); if (pl) *pl = x; if (pr) *pr = x + w - 1; if (pt) *pt = y; if (pb) *pb = y + h - 1; return 0; } /*! * \brief boxSetSideLocations() * * \param[in] box * \param[in] l, r, t, b [optional] use -1 to leave unchanged * \return 0 if OK, 1 on error */ l_ok boxSetSideLocations(BOX *box, l_int32 l, l_int32 r, l_int32 t, l_int32 b) { l_int32 x, y, w, h; if (!box) return ERROR_INT("box not defined", __func__, 1); x = (l != -1) ? l : box->x; w = (r != -1) ? r - x + 1 : box->x + box->w - x; y = (t != -1) ? t : box->y; h = (b != -1) ? b - y + 1 : box->y + box->h - y; boxSetGeometry(box, x, y, w, h); return 0; } /*! * \brief boxIsValid() * * \param[in] box * \param[out] pvalid 1 if valid; 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxIsValid(BOX *box, l_int32 *pvalid) { if (!pvalid) return ERROR_INT("&valid not defined", __func__, 1); *pvalid = 0; if (!box) return ERROR_INT("box not defined", __func__, 1); if (box->w > 0 && box->h > 0) *pvalid = 1; return 0; } /*---------------------------------------------------------------------* * Boxa creation, destruction, copy, extension * *---------------------------------------------------------------------*/ /*! * \brief boxaCreate() * * \param[in] n initial number of ptrs; 0 for default * \return boxa, or NULL on error */ BOXA * boxaCreate(l_int32 n) { BOXA *boxa; if (n <= 0 || n > MaxBoxaPtrArraySize) n = InitialPtrArraySize; boxa = (BOXA *)LEPT_CALLOC(1, sizeof(BOXA)); boxa->n = 0; boxa->nalloc = n; boxa->refcount = 1; if ((boxa->box = (BOX **)LEPT_CALLOC(n, sizeof(BOX *))) == NULL) { boxaDestroy(&boxa); return (BOXA *)ERROR_PTR("boxa ptrs not made", __func__, NULL); } return boxa; } /*! * \brief boxaCopy() * * \param[in] boxa * \param[in] copyflag L_COPY, L_CLONE, L_COPY_CLONE * \return new boxa, or NULL on error * *
 * Notes:
 *      (1) See pix.h for description of the copyflag.
 *      (2) The copy-clone makes a new boxa that holds clones of each box.
 * 
*/ BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag) { l_int32 i; BOX *boxc; BOXA *boxac; if (!boxa) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (copyflag == L_CLONE) { boxa->refcount++; return boxa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if ((boxac = boxaCreate(boxa->nalloc)) == NULL) return (BOXA *)ERROR_PTR("boxac not made", __func__, NULL); for (i = 0; i < boxa->n; i++) { if (copyflag == L_COPY) boxc = boxaGetBox(boxa, i, L_COPY); else /* copy-clone */ boxc = boxaGetBox(boxa, i, L_CLONE); boxaAddBox(boxac, boxc, L_INSERT); } return boxac; } /*! * \brief boxaDestroy() * * \param[in,out] pboxa will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the boxa.
 *      (2) Always nulls the input ptr.
 * 
*/ void boxaDestroy(BOXA **pboxa) { l_int32 i; BOXA *boxa; if (pboxa == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((boxa = *pboxa) == NULL) return; /* Decrement the ref count. If it is 0, destroy the boxa. */ if (--boxa->refcount == 0) { for (i = 0; i < boxa->n; i++) boxDestroy(&boxa->box[i]); LEPT_FREE(boxa->box); LEPT_FREE(boxa); } *pboxa = NULL; } /*! * \brief boxaAddBox() * * \param[in] boxa * \param[in] box to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag) { l_int32 n; BOX *boxc; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (copyflag == L_INSERT) boxc = box; else if (copyflag == L_COPY) boxc = boxCopy(box); else if (copyflag == L_CLONE) boxc = boxClone(box); else return ERROR_INT("invalid copyflag", __func__, 1); if (!boxc) return ERROR_INT("boxc not made", __func__, 1); n = boxaGetCount(boxa); if (n >= boxa->nalloc) { if (boxaExtendArray(boxa)) { if (copyflag != L_INSERT) boxDestroy(&boxc); return ERROR_INT("extension failed", __func__, 1); } } boxa->box[n] = boxc; boxa->n++; return 0; } /*! * \brief boxaExtendArray() * * \param[in] boxa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Reallocs with doubled size of ptr array.
 * 
*/ l_ok boxaExtendArray(BOXA *boxa) { if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); return boxaExtendArrayToSize(boxa, 2 * boxa->nalloc); } /*! * \brief boxaExtendArrayToSize() * * \param[in] boxa * \param[in] size new size of boxa ptr array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs new boxa ptr array to %size.
 *      (2) The max number of box ptrs is 10M.
 * 
*/ l_ok boxaExtendArrayToSize(BOXA *boxa, size_t size) { size_t oldsize, newsize; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (boxa->nalloc > MaxBoxaPtrArraySize) /* belt & suspenders */ return ERROR_INT("boxa has too many ptrs", __func__, 1); if (size > MaxBoxaPtrArraySize) return ERROR_INT("size > 10M box ptrs; too large", __func__, 1); if (size <= boxa->nalloc) { L_INFO("size too small; no extension\n", __func__); return 0; } oldsize = boxa->nalloc * sizeof(BOX *); newsize = size * sizeof(BOX *); if ((boxa->box = (BOX **)reallocNew((void **)&boxa->box, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); boxa->nalloc = size; return 0; } /*---------------------------------------------------------------------* * Boxa accessors * *---------------------------------------------------------------------*/ /*! * \brief boxaGetCount() * * \param[in] boxa * \return count of all boxes; 0 if no boxes or on error */ l_int32 boxaGetCount(const BOXA *boxa) { if (!boxa) return ERROR_INT("boxa not defined", __func__, 0); return boxa->n; } /*! * \brief boxaGetValidCount() * * \param[in] boxa * \return count of valid boxes; 0 if no valid boxes or on error */ l_int32 boxaGetValidCount(BOXA *boxa) { l_int32 n, i, w, h, count; if (!boxa) return ERROR_INT("boxa not defined", __func__, 0); n = boxaGetCount(boxa); for (i = 0, count = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if (w > 0 && h > 0) count++; } return count; } /*! * \brief boxaGetBox() * * \param[in] boxa * \param[in] index to the index-th box * \param[in] accessflag L_COPY or L_CLONE * \return box, or NULL on error */ BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag) { if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); if (index < 0 || index >= boxa->n) return (BOX *)ERROR_PTR("index not valid", __func__, NULL); if (accessflag == L_COPY) return boxCopy(boxa->box[index]); else if (accessflag == L_CLONE) return boxClone(boxa->box[index]); else return (BOX *)ERROR_PTR("invalid accessflag", __func__, NULL); } /*! * \brief boxaGetValidBox() * * \param[in] boxa * \param[in] index to the index-th box * \param[in] accessflag L_COPY or L_CLONE * \return box, or NULL if box is not valid or on error * *
 * Notes:
 *      (1) This returns NULL for an invalid box in a boxa.
 *          For a box to be valid, both the width and height must be > 0.
 *      (2) We allow invalid boxes, with w = 0 or h = 0, as placeholders
 *          in boxa for which the index of the box in the boxa is important.
 *          This is an atypical situation; usually you want to put only
 *          valid boxes in a boxa.
 * 
*/ BOX * boxaGetValidBox(BOXA *boxa, l_int32 index, l_int32 accessflag) { l_int32 w, h; BOX *box; if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((box = boxaGetBox(boxa, index, accessflag)) == NULL) return (BOX *)ERROR_PTR("box not returned", __func__, NULL); boxGetGeometry(box, NULL, NULL, &w, &h); if (w <= 0 || h <= 0) /* not valid, but not necessarily an error */ boxDestroy(&box); return box; } /*! * \brief boxaFindInvalidBoxes() * * \param[in] boxa * \return na numa of invalid boxes; NULL if there are none or on error */ NUMA * boxaFindInvalidBoxes(BOXA *boxa) { l_int32 i, n, w, h; NUMA *na; if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", __func__, NULL); n = boxaGetCount(boxa); if (boxaGetValidCount(boxa) == n) return NULL; na = numaMakeConstant(0, n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if (w == 0 || h == 0) numaSetValue(na, i, 1); } return na; } /*! * \brief boxaGetBoxGeometry() * * \param[in] boxa * \param[in] index to the index-th box * \param[out] px, py, pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { BOX *box; if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (index < 0 || index >= boxa->n) return ERROR_INT("index not valid", __func__, 1); if ((box = boxaGetBox(boxa, index, L_CLONE)) == NULL) return ERROR_INT("box not found!", __func__, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * \brief boxaIsFull() * * \param[in] boxa * \param[out] pfull 1 if boxa is full; 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxaIsFull(BOXA *boxa, l_int32 *pfull) { l_int32 i, n, full; BOX *box; if (!pfull) return ERROR_INT("&full not defined", __func__, 1); *pfull = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); full = 1; for (i = 0; i < n; i++) { if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) { full = 0; break; } boxDestroy(&box); } *pfull = full; return 0; } /*---------------------------------------------------------------------* * Boxa array modifiers * *---------------------------------------------------------------------*/ /*! * \brief boxaReplaceBox() * * \param[in] boxa * \param[in] index to the index-th box * \param[in] box insert this box to replace existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place replacement of one box; the input %box is now
 *          owned by the boxa.
 *      (2) The previous box at that location, if any, is destroyed.
 * 
*/ l_ok boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box) { if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (index < 0 || index >= boxa->n) return ERROR_INT("index not valid", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); boxDestroy(&(boxa->box[index])); boxa->box[index] = box; return 0; } /*! * \brief boxaInsertBox() * * \param[in] boxa * \param[in] index location in boxa to insert new value * \param[in] box new box to be inserted; the boxa now owns it * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts box[i] --> box[i + 1] for all i >= index,
 *          and then inserts box as box[index].
 *      (2) To insert at the beginning of the array, set index = 0.
 *      (3) To append to the array, it's easier to use boxaAddBox().
 *      (4) This should not be used repeatedly to insert into large arrays,
 *          because the function is O(n).
 * 
*/ l_ok boxaInsertBox(BOXA *boxa, l_int32 index, BOX *box) { l_int32 i, n; BOX **array; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (!box) return ERROR_INT("box not defined", __func__, 1); if (n >= boxa->nalloc) { if (boxaExtendArray(boxa)) return ERROR_INT("extension failed", __func__, 1); } array = boxa->box; boxa->n++; for (i = n; i > index; i--) array[i] = array[i - 1]; array[index] = box; return 0; } /*! * \brief boxaRemoveBox() * * \param[in] boxa * \param[in] index of box to be removed and destroyed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes box[index] and then shifts
 *          box[i] --> box[i - 1] for all i > index.
 *      (2) It should not be used repeatedly to remove boxes from
 *          large arrays, because the function is O(n).
 * 
*/ l_ok boxaRemoveBox(BOXA *boxa, l_int32 index) { return boxaRemoveBoxAndSave(boxa, index, NULL); } /*! * \brief boxaRemoveBoxAndSave() * * \param[in] boxa * \param[in] index of box to be removed * \param[out] pbox [optional] removed box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes box[index] and then shifts
 *          box[i] --> box[i - 1] for all i > index.
 *      (2) It should not be used repeatedly to remove boxes from
 *          large arrays, because the function is O(n).
 * 
*/ l_ok boxaRemoveBoxAndSave(BOXA *boxa, l_int32 index, BOX **pbox) { l_int32 i, n; BOX **array; if (pbox) *pbox = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } if (pbox) *pbox = boxaGetBox(boxa, index, L_CLONE); array = boxa->box; boxDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; boxa->n--; return 0; } /*! * \brief boxaSaveValid() * * \param[in] boxas * \param[in] copyflag L_COPY or L_CLONE * \return boxad if OK, NULL on error * *
 * Notes:
 *      (1) This makes a copy/clone of each valid box.
 * 
*/ BOXA * boxaSaveValid(BOXA *boxas, l_int32 copyflag) { l_int32 i, n; BOX *box; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = boxaGetCount(boxas); boxad = boxaCreate(n); for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxas, i, copyflag)) != NULL) boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*! * \brief boxaInitFull() * * \param[in] boxa typically empty * \param[in] box [optional] to be replicated into the entire ptr array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This initializes a boxa by filling up the entire box ptr array
 *          with copies of %box.  If %box == NULL, use a placeholder box
 *          of zero size.  Any existing boxes are destroyed.
 *          After this opepration, the number of boxes is equal to
 *          the number of allocated ptrs.
 *      (2) Note that we use boxaReplaceBox() instead of boxaInsertBox().
 *          They both have the same effect when inserting into a NULL ptr
 *          in the boxa ptr array:
 *      (3) Example usage.  This function is useful to prepare for a
 *          random insertion (or replacement) of boxes into a boxa.
 *          To randomly insert boxes into a boxa, up to some index "max":
 *             Boxa *boxa = boxaCreate(max);
 *             boxaInitFull(boxa, NULL);
 *          If you want placeholder boxes of non-zero size:
 *             Boxa *boxa = boxaCreate(max);
 *             Box *box = boxCreate(...);
 *             boxaInitFull(boxa, box);
 *             boxDestroy(&box);
 *          If we have an existing boxa with a smaller ptr array, it can
 *          be reused for up to max boxes:
 *             boxaExtendArrayToSize(boxa, max);
 *             boxaInitFull(boxa, NULL);
 *          The initialization allows the boxa to always be properly
 *          filled, even if all the boxes are not later replaced.
 *          If you want to know which boxes have been replaced,
 *          and you initialized with invalid zero-sized boxes,
 *          use boxaGetValidBox() to return NULL for the invalid boxes.
 * 
*/ l_ok boxaInitFull(BOXA *boxa, BOX *box) { l_int32 i, n; BOX *boxt; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxa->nalloc; boxa->n = n; for (i = 0; i < n; i++) { if (box) boxt = boxCopy(box); else boxt = boxCreate(0, 0, 0, 0); boxaReplaceBox(boxa, i, boxt); } return 0; } /*! * \brief boxaClear() * * \param[in] boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys all boxes in the boxa, setting the ptrs
 *          to null.  The number of allocated boxes, n, is set to 0.
 * 
*/ l_ok boxaClear(BOXA *boxa) { l_int32 i, n; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); for (i = 0; i < n; i++) boxDestroy(&boxa->box[i]); boxa->n = 0; return 0; } /*--------------------------------------------------------------------------* * Boxaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * \brief boxaaCreate() * * \param[in] n size of boxa ptr array to be alloc'd; 0 for default * \return baa, or NULL on error */ BOXAA * boxaaCreate(l_int32 n) { BOXAA *baa; if (n <= 0 || n > MaxBoxaaPtrArraySize) n = InitialPtrArraySize; baa = (BOXAA *)LEPT_CALLOC(1, sizeof(BOXAA)); if ((baa->boxa = (BOXA **)LEPT_CALLOC(n, sizeof(BOXA *))) == NULL) { boxaaDestroy(&baa); return (BOXAA *)ERROR_PTR("boxa ptr array not made", __func__, NULL); } baa->nalloc = n; baa->n = 0; return baa; } /*! * \brief boxaaCopy() * * \param[in] baas input boxaa to be copied * \param[in] copyflag L_COPY, L_CLONE * \return baad new boxaa, composed of copies or clones of the boxa * in baas, or NULL on error * *
 * Notes:
 *      (1) L_COPY makes a copy of each boxa in baas.
 *          L_CLONE makes a clone of each boxa in baas.
 * 
*/ BOXAA * boxaaCopy(BOXAA *baas, l_int32 copyflag) { l_int32 i, n; BOXA *boxa; BOXAA *baad; if (!baas) return (BOXAA *)ERROR_PTR("baas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = boxaaGetCount(baas); baad = boxaaCreate(n); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baas, i, copyflag); boxaaAddBoxa(baad, boxa, L_INSERT); } return baad; } /*! * \brief boxaaDestroy() * * \param[in,out] pbaa will be set to null before returning */ void boxaaDestroy(BOXAA **pbaa) { l_int32 i; BOXAA *baa; if (pbaa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((baa = *pbaa) == NULL) return; for (i = 0; i < baa->n; i++) boxaDestroy(&baa->boxa[i]); LEPT_FREE(baa->boxa); LEPT_FREE(baa); *pbaa = NULL; } /*--------------------------------------------------------------------------* * Add Boxa to Boxaa * *--------------------------------------------------------------------------*/ /*! * \brief boxaaAddBoxa() * * \param[in] baa * \param[in] ba to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag) { l_int32 n; BOXA *bac; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (!ba) return ERROR_INT("ba not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", __func__, 1); if (copyflag == L_INSERT) bac = ba; else bac = boxaCopy(ba, copyflag); n = boxaaGetCount(baa); if (n >= baa->nalloc) { if (boxaaExtendArray(baa)) return ERROR_INT("extension failed", __func__, 1); } baa->boxa[n] = bac; baa->n++; return 0; } /*! * \brief boxaaExtendArray() * * \param[in] baa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Doubles the size of the boxa ptr array.
 *      (2) The max number of boxa ptrs is 1 million.
 * 
*/ l_ok boxaaExtendArray(BOXAA *baa) { if (!baa) return ERROR_INT("baa not defined", __func__, 1); return boxaaExtendArrayToSize(baa, 2 * baa->nalloc); } /*! * \brief boxaaExtendArrayToSize() * * \param[in] baa * \param[in] size new size of boxa array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs the boxa ptr array to %size.
 *      (2) %size limited to 1M boxa ptrs.
 * 
*/ l_ok boxaaExtendArrayToSize(BOXAA *baa, l_int32 size) { size_t oldsize, newsize; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (baa->nalloc > MaxBoxaaPtrArraySize) /* belt & suspenders */ return ERROR_INT("baa has too many ptrs", __func__, 1); if (size > MaxBoxaaPtrArraySize) return ERROR_INT("size > 1M boxa ptrs; too large", __func__, 1); if (size <= baa->nalloc) { L_INFO("size too small; no extension\n", __func__); return 0; } oldsize = baa->nalloc * sizeof(BOXA *); newsize = size * sizeof(BOXA *); if ((baa->boxa = (BOXA **)reallocNew((void **)&baa->boxa, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); baa->nalloc = size; return 0; } /*----------------------------------------------------------------------* * Boxaa accessors * *----------------------------------------------------------------------*/ /*! * \brief boxaaGetCount() * * \param[in] baa * \return count number of boxa, or 0 if no boxa or on error */ l_int32 boxaaGetCount(BOXAA *baa) { if (!baa) return ERROR_INT("baa not defined", __func__, 0); return baa->n; } /*! * \brief boxaaGetBoxCount() * * \param[in] baa * \return count number of boxes, or 0 if no boxes or on error */ l_int32 boxaaGetBoxCount(BOXAA *baa) { BOXA *boxa; l_int32 n, sum, i; if (!baa) return ERROR_INT("baa not defined", __func__, 0); n = boxaaGetCount(baa); for (sum = 0, i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); sum += boxaGetCount(boxa); boxaDestroy(&boxa); } return sum; } /*! * \brief boxaaGetBoxa() * * \param[in] baa * \param[in] index to the index-th boxa * \param[in] accessflag L_COPY or L_CLONE * \return boxa, or NULL on error */ BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag) { l_int32 n; if (!baa) return (BOXA *)ERROR_PTR("baa not defined", __func__, NULL); n = boxaaGetCount(baa); if (index < 0 || index >= n) return (BOXA *)ERROR_PTR("index not valid", __func__, NULL); if (accessflag != L_COPY && accessflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid accessflag", __func__, NULL); return boxaCopy(baa->boxa[index], accessflag); } /*! * \brief boxaaGetBox() * * \param[in] baa * \param[in] iboxa index into the boxa array in the boxaa * \param[in] ibox index into the box array in the boxa * \param[in] accessflag L_COPY or L_CLONE * \return box, or NULL on error */ BOX * boxaaGetBox(BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag) { BOX *box; BOXA *boxa; if ((boxa = boxaaGetBoxa(baa, iboxa, L_CLONE)) == NULL) return (BOX *)ERROR_PTR("boxa not retrieved", __func__, NULL); if ((box = boxaGetBox(boxa, ibox, accessflag)) == NULL) L_ERROR("box not retrieved\n", __func__); boxaDestroy(&boxa); return box; } /*----------------------------------------------------------------------* * Boxaa array modifiers * *----------------------------------------------------------------------*/ /*! * \brief boxaaInitFull() * * \param[in] baa typically empty * \param[in] boxa to be replicated into the entire ptr array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This initializes a boxaa by filling up the entire boxa ptr array
 *          with copies of %boxa.  Any existing boxa are destroyed.
 *          After this operation, the number of boxa is equal to
 *          the number of allocated ptrs.
 *      (2) Note that we use boxaaReplaceBoxa() which replaces a boxa,
 *          instead of boxaaInsertBoxa(), which is O(n) and shifts all
 *          the boxa pointers from the insertion point to the end.
 *      (3) Example usage.  This function is useful to prepare for a
 *          random insertion (or replacement) of boxa into a boxaa.
 *          To randomly insert boxa into a boxaa, up to some index "max":
 *             Boxaa *baa = boxaaCreate(max);
 *               // initialize the boxa
 *             Boxa *boxa = boxaCreate(...);
 *             ...  [optionally fill with boxes]
 *             boxaaInitFull(baa, boxa);
 *          A typical use is to initialize the array with empty boxa,
 *          and to replace only a subset that must be aligned with
 *          something else, such as a pixa.
 * 
*/ l_ok boxaaInitFull(BOXAA *baa, BOXA *boxa) { l_int32 i, n; BOXA *boxat; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = baa->nalloc; baa->n = n; for (i = 0; i < n; i++) { boxat = boxaCopy(boxa, L_COPY); boxaaReplaceBoxa(baa, i, boxat); } return 0; } /*! * \brief boxaaExtendWithInit() * * \param[in] baa * \param[in] maxindex * \param[in] boxa to be replicated into the extended ptr array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This should be used on an existing boxaa that has been
 *          fully loaded with boxa.  It then extends the boxaa,
 *          loading all the additional ptrs with copies of boxa.
 *          Typically, boxa will be empty.
 * 
*/ l_ok boxaaExtendWithInit(BOXAA *baa, l_int32 maxindex, BOXA *boxa) { l_int32 i, n; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); /* Extend the ptr array if necessary */ n = boxaaGetCount(baa); if (maxindex < n) return 0; if (boxaaExtendArrayToSize(baa, maxindex + 1)) return ERROR_INT("extension failed", __func__, 1); /* Fill the new entries with copies of boxa */ for (i = n; i <= maxindex; i++) boxaaAddBoxa(baa, boxa, L_COPY); return 0; } /*! * \brief boxaaReplaceBoxa() * * \param[in] baa * \param[in] index to the index-th boxa * \param[in] boxa insert and replace any existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Any existing boxa is destroyed, and the input one
 *          is inserted in its place.
 *      (2) If the index is invalid, return 1 (error)
 * 
*/ l_ok boxaaReplaceBoxa(BOXAA *baa, l_int32 index, BOXA *boxa) { l_int32 n; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); boxaDestroy(&baa->boxa[index]); baa->boxa[index] = boxa; return 0; } /*! * \brief boxaaInsertBoxa() * * \param[in] baa * \param[in] index location in boxaa to insert new boxa * \param[in] boxa new boxa to be inserted * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts boxa[i] --> boxa[i + 1] for all i >= index,
 *          and then inserts boxa as boxa[index].  It is typically used
 *          when %baa is full of boxa.
 *      (2) To insert at the beginning of the array, set %index = 0.
 *      (3) To append to the array, it is equivalent to boxaaAddBoxa().
 *      (4) This should not be used repeatedly to insert into large arrays,
 *          because the function is O(n).
 * 
*/ l_ok boxaaInsertBoxa(BOXAA *baa, l_int32 index, BOXA *boxa) { l_int32 i, n; BOXA **array; if (!baa) return ERROR_INT("baa not defined", __func__, 1); n = boxaaGetCount(baa); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (n >= baa->nalloc) { if (boxaaExtendArray(baa)) return ERROR_INT("extension failed", __func__, 1); } array = baa->boxa; baa->n++; for (i = n; i > index; i--) array[i] = array[i - 1]; array[index] = boxa; return 0; } /*! * \brief boxaaRemoveBoxa() * * \param[in] baa * \param[in] index of the boxa to be removed and destroyed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes boxa[index] and then shifts
 *          boxa[i] --> boxa[i - 1] for all i > index.
 *      (2) The removed boxaa is destroyed.
 *      (2) This should not be used repeatedly on large arrays,
 *          because the function is O(n).
 * 
*/ l_ok boxaaRemoveBoxa(BOXAA *baa, l_int32 index) { l_int32 i, n; BOXA **array; if (!baa) return ERROR_INT("baa not defined", __func__, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); array = baa->boxa; boxaDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; baa->n--; return 0; } /*! * \brief boxaaAddBox() * * \param[in] baa * \param[in] index of boxa with boxaa * \param[in] box to be added * \param[in] accessflag L_INSERT, L_COPY or L_CLONE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Adds to an existing boxa only.
 * 
*/ l_ok boxaaAddBox(BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag) { l_int32 n; BOXA *boxa; if (!baa) return ERROR_INT("baa not defined", __func__, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); if (accessflag != L_INSERT && accessflag != L_COPY && accessflag != L_CLONE) return ERROR_INT("invalid accessflag", __func__, 1); boxa = boxaaGetBoxa(baa, index, L_CLONE); boxaAddBox(boxa, box, accessflag); boxaDestroy(&boxa); return 0; } /*---------------------------------------------------------------------* * Boxaa serialized I/O * *---------------------------------------------------------------------*/ /*! * \brief boxaaReadFromFiles() * * \param[in] dirname directory * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] first 0-based * \param[in] nfiles use 0 for everything from %first to the end * \return baa, or NULL on error or if no boxa files are found. * *
 * Notes:
 *      (1) The files must be serialized boxa files (e.g., *.ba).
 *          If some files cannot be read, warnings are issued.
 *      (2) Use %substr to filter filenames in the directory.  If
 *          %substr == NULL, this takes all files.
 *      (3) After filtering, use %first and %nfiles to select
 *          a contiguous set of files, that have been lexically
 *          sorted in increasing order.
 * 
*/ BOXAA * boxaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname; l_int32 i, n; BOXA *boxa; BOXAA *baa; SARRAY *sa; if (!dirname) return (BOXAA *)ERROR_PTR("dirname not defined", __func__, NULL); sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); if (!sa || ((n = sarrayGetCount(sa)) == 0)) { sarrayDestroy(&sa); return (BOXAA *)ERROR_PTR("no pixa files found", __func__, NULL); } baa = boxaaCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((boxa = boxaRead(fname)) == NULL) { L_ERROR("boxa not read for %d-th file", __func__, i); continue; } boxaaAddBoxa(baa, boxa, L_INSERT); } sarrayDestroy(&sa); return baa; } /*! * \brief boxaaRead() * * \param[in] filename * \return boxaa, or NULL on error */ BOXAA * boxaaRead(const char *filename) { FILE *fp; BOXAA *baa; if (!filename) return (BOXAA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (BOXAA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); baa = boxaaReadStream(fp); fclose(fp); if (!baa) return (BOXAA *)ERROR_PTR_1("boxaa not read", filename, __func__, NULL); return baa; } /*! * \brief boxaaReadStream() * * \param[in] fp input file stream * \return boxaa, or NULL on error * *
 * Notes:
 *      (1) It is OK for the boxaa to be empty (n == 0).
 * 
*/ BOXAA * boxaaReadStream(FILE *fp) { l_int32 n, i, x, y, w, h, version; l_int32 ignore; BOXA *boxa; BOXAA *baa; if (!fp) return (BOXAA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nBoxaa Version %d\n", &version) != 1) return (BOXAA *)ERROR_PTR("not a boxaa file", __func__, NULL); if (version != BOXAA_VERSION_NUMBER) return (BOXAA *)ERROR_PTR("invalid boxa version", __func__, NULL); if (fscanf(fp, "Number of boxa = %d\n", &n) != 1) return (BOXAA *)ERROR_PTR("not a boxaa file", __func__, NULL); if (n < 0) return (BOXAA *)ERROR_PTR("num boxa ptrs < 0", __func__, NULL); if (n > MaxBoxaaPtrArraySize) return (BOXAA *)ERROR_PTR("too many boxa ptrs", __func__, NULL); if (n == 0) L_INFO("the boxaa is empty\n", __func__); if ((baa = boxaaCreate(n)) == NULL) return (BOXAA *)ERROR_PTR("boxaa not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", &ignore, &x, &y, &w, &h) != 5) { boxaaDestroy(&baa); return (BOXAA *)ERROR_PTR("boxa descr not valid", __func__, NULL); } if ((boxa = boxaReadStream(fp)) == NULL) { boxaaDestroy(&baa); return (BOXAA *)ERROR_PTR("boxa not made", __func__, NULL); } boxaaAddBoxa(baa, boxa, L_INSERT); } return baa; } /*! * \brief boxaaReadMem() * * \param[in] data serialization of boxaa; in ascii * \param[in] size of data in bytes; can use strlen to get it * \return baa, or NULL on error */ BOXAA * boxaaReadMem(const l_uint8 *data, size_t size) { FILE *fp; BOXAA *baa; if (!data) return (BOXAA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (BOXAA *)ERROR_PTR("stream not opened", __func__, NULL); baa = boxaaReadStream(fp); fclose(fp); if (!baa) L_ERROR("baa not read\n", __func__); return baa; } /*! * \brief boxaaWrite() * * \param[in] filename * \param[in] baa * \return 0 if OK, 1 on error */ l_ok boxaaWrite(const char *filename, BOXAA *baa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!baa) return ERROR_INT("baa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = boxaaWriteStream(fp, baa); fclose(fp); if (ret) return ERROR_INT_1("baa not written to stream", filename, __func__, 1); return 0; } /*! * \brief boxaaWriteStream() * * \param[in] fp output file stream * \param[in] baa * \return 0 if OK, 1 on error */ l_ok boxaaWriteStream(FILE *fp, BOXAA *baa) { l_int32 n, i, x, y, w, h; BOX *box; BOXA *boxa; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!baa) return ERROR_INT("baa not defined", __func__, 1); n = boxaaGetCount(baa); fprintf(fp, "\nBoxaa Version %d\n", BOXAA_VERSION_NUMBER); fprintf(fp, "Number of boxa = %d\n", n); for (i = 0; i < n; i++) { if ((boxa = boxaaGetBoxa(baa, i, L_CLONE)) == NULL) return ERROR_INT("boxa not found", __func__, 1); boxaGetExtent(boxa, NULL, NULL, &box); boxGetGeometry(box, &x, &y, &w, &h); fprintf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", i, x, y, w, h); boxaWriteStream(fp, boxa); boxDestroy(&box); boxaDestroy(&boxa); } return 0; } /*! * \brief boxaaWriteMem() * * \param[out] pdata data of serialized boxaa; ascii * \param[out] psize size of returned data * \param[in] baa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a boxaa in memory and puts the result in a buffer.
 * 
*/ l_ok boxaaWriteMem(l_uint8 **pdata, size_t *psize, BOXAA *baa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!baa) return ERROR_INT("baa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = boxaaWriteStream(fp, baa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = boxaaWriteStream(fp, baa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*---------------------------------------------------------------------* * Boxa serialized I/O * *---------------------------------------------------------------------*/ /*! * \brief boxaRead() * * \param[in] filename * \return boxa, or NULL on error */ BOXA * boxaRead(const char *filename) { FILE *fp; BOXA *boxa; if (!filename) return (BOXA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (BOXA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); boxa = boxaReadStream(fp); fclose(fp); if (!boxa) return (BOXA *)ERROR_PTR_1("boxa not read", filename, __func__, NULL); return boxa; } /*! * \brief boxaReadStream() * * \param[in] fp input file stream * \return boxa, or NULL on error * *
 * Notes:
 *      (1) It is OK for the boxa to be empty (n == 0).
 * 
*/ BOXA * boxaReadStream(FILE *fp) { l_int32 n, i, x, y, w, h, version; l_int32 ignore; BOX *box; BOXA *boxa; if (!fp) return (BOXA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nBoxa Version %d\n", &version) != 1) return (BOXA *)ERROR_PTR("not a boxa file", __func__, NULL); if (version != BOXA_VERSION_NUMBER) return (BOXA *)ERROR_PTR("invalid boxa version", __func__, NULL); if (fscanf(fp, "Number of boxes = %d\n", &n) != 1) return (BOXA *)ERROR_PTR("not a boxa file", __func__, NULL); if (n < 0) return (BOXA *)ERROR_PTR("num box ptrs < 0", __func__, NULL); if (n > MaxBoxaPtrArraySize) return (BOXA *)ERROR_PTR("too many box ptrs", __func__, NULL); if (n == 0) L_INFO("the boxa is empty\n", __func__); if ((boxa = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", &ignore, &x, &y, &w, &h) != 5) { boxaDestroy(&boxa); return (BOXA *)ERROR_PTR("box descr not valid", __func__, NULL); } box = boxCreate(x, y, w, h); boxaAddBox(boxa, box, L_INSERT); } return boxa; } /*! * \brief boxaReadMem() * * \param[in] data serialization of boxa; in ascii * \param[in] size of data in bytes; can use strlen to get it * \return boxa, or NULL on error */ BOXA * boxaReadMem(const l_uint8 *data, size_t size) { FILE *fp; BOXA *boxa; if (!data) return (BOXA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (BOXA *)ERROR_PTR("stream not opened", __func__, NULL); boxa = boxaReadStream(fp); fclose(fp); if (!boxa) L_ERROR("boxa not read\n", __func__); return boxa; } /*! * \brief boxaWriteDebug() * * \param[in] filename * \param[in] boxa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of boxaWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok boxaWriteDebug(const char *filename, BOXA *boxa) { if (LeptDebugOK) { return boxaWrite(filename, boxa); } else { L_INFO("write to named temp file %s is disabled\n", __func__, filename); return 0; } } /*! * \brief boxaWrite() * * \param[in] filename * \param[in] boxa * \return 0 if OK, 1 on error */ l_ok boxaWrite(const char *filename, BOXA *boxa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = boxaWriteStream(fp, boxa); fclose(fp); if (ret) return ERROR_INT_1("boxa not written to stream", filename, __func__, 1); return 0; } /*! * \brief boxaWriteStream() * * \param[in] fp file stream; use NULL for stderr * \param[in] boxa * \return 0 if OK, 1 on error */ l_ok boxaWriteStream(FILE *fp, BOXA *boxa) { l_int32 n, i; BOX *box; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!fp) return boxaWriteStderr(boxa); n = boxaGetCount(boxa); fprintf(fp, "\nBoxa Version %d\n", BOXA_VERSION_NUMBER); fprintf(fp, "Number of boxes = %d\n", n); for (i = 0; i < n; i++) { if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) return ERROR_INT("box not found", __func__, 1); fprintf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", i, box->x, box->y, box->w, box->h); boxDestroy(&box); } return 0; } /*! * \brief boxaWriteStderr() * * \param[in] boxa * \return 0 if OK, 1 on error */ l_ok boxaWriteStderr(BOXA *boxa) { l_int32 n, i; BOX *box; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); lept_stderr("\nBoxa Version %d\n", BOXA_VERSION_NUMBER); lept_stderr("Number of boxes = %d\n", n); for (i = 0; i < n; i++) { if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) return ERROR_INT("box not found", __func__, 1); lept_stderr(" Box[%d]: x = %d, y = %d, w = %d, h = %d\n", i, box->x, box->y, box->w, box->h); boxDestroy(&box); } return 0; } /*! * \brief boxaWriteMem() * * \param[out] pdata data of serialized boxa; ascii * \param[out] psize size of returned data * \param[in] boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a boxa in memory and puts the result in a buffer.
 * 
*/ l_ok boxaWriteMem(l_uint8 **pdata, size_t *psize, BOXA *boxa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = boxaWriteStream(fp, boxa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = boxaWriteStream(fp, boxa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*---------------------------------------------------------------------* * Debug printing * *---------------------------------------------------------------------*/ /*! * \brief boxPrintStreamInfo() * * \param[in] fp file stream; use NULL for stderr * \param[in] box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This outputs debug info.  Use serialization functions to
 *          write to file if you want to read the data back.
 * 
*/ l_ok boxPrintStreamInfo(FILE *fp, BOX *box) { if (!box) return ERROR_INT("box not defined", __func__, 1); if (!fp) { /* output to stderr */ lept_stderr(" Box: x = %d, y = %d, w = %d, h = %d\n", box->x, box->y, box->w, box->h); } else { fprintf(fp, " Box: x = %d, y = %d, w = %d, h = %d\n", box->x, box->y, box->w, box->h); } return 0; } leptonica-1.86.0/src/boxfunc1.c000066400000000000000000002417371506303110300162520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxfunc1.c *
 *
 *      Box geometry
 *           l_int32   boxContains()
 *           l_int32   boxIntersects()
 *           BOXA     *boxaContainedInBox()
 *           l_int32   boxaContainedInBoxCount()
 *           l_int32   boxaContainedInBoxa()
 *           BOXA     *boxaIntersectsBox()
 *           l_int32   boxaIntersectsBoxCount()
 *           BOXA     *boxaClipToBox()
 *           BOXA     *boxaCombineOverlaps()
 *           l_int32   boxaCombineOverlapsInPair()
 *           BOX      *boxOverlapRegion()
 *           BOX      *boxBoundingRegion()
 *           l_int32   boxOverlapFraction()
 *           l_int32   boxOverlapArea()
 *           BOXA     *boxaHandleOverlaps()
 *           l_int32   boxOverlapDistance()
 *           l_int32   boxSeparationDistance()
 *           l_int32   boxCompareSize()
 *           l_int32   boxContainsPt()
 *           BOX      *boxaGetNearestToPt()
 *           BOX      *boxaGetNearestToLine()
 *           l_int32   boxaFindNearestBoxes()
 *           l_int32   boxaGetNearestByDirection()
 *    static l_int32   boxHasOverlapInXorY()
 *    static l_int32   boxGetDistanceInXorY()
 *           l_int32   boxIntersectByLine()
 *           l_int32   boxGetCenter()
 *           BOX      *boxClipToRectangle()
 *           l_int32   boxClipToRectangleParams()
 *           BOX      *boxRelocateOneSide()
 *           BOXA     *boxaAdjustSides()
 *           BOXA     *boxaAdjustBoxSides()
 *           BOX      *boxAdjustSides()
 *           BOXA     *boxaSetSide()
 *           l_int32   boxSetSide()
 *           BOXA     *boxaAdjustWidthToTarget()
 *           BOXA     *boxaAdjustHeightToTarget()
 *           l_int32   boxEqual()
 *           l_int32   boxaEqual()
 *           l_int32   boxSimilar()
 *           l_int32   boxaSimilar()
 *
 *      Boxa combine and split
 *           l_int32   boxaJoin()
 *           l_int32   boxaaJoin()
 *           l_int32   boxaSplitEvenOdd()
 *           BOXA     *boxaMergeEvenOdd()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" static l_int32 boxHasOverlapInXorY(l_int32 c1, l_int32 s1, l_int32 c2, l_int32 s2); static l_int32 boxGetDistanceInXorY(l_int32 c1, l_int32 s1, l_int32 c2, l_int32 s2); /*---------------------------------------------------------------------* * Box geometry * *---------------------------------------------------------------------*/ /*! * \brief boxContains() * * \param[in] box1, box2 * \param[out] presult 1 if box2 is entirely contained within box1; * 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxContains(BOX *box1, BOX *box2, l_int32 *presult) { l_int32 x1, y1, w1, h1, x2, y2, w2, h2, valid1, valid2; if (!presult) return ERROR_INT("&result not defined", __func__, 1); *presult = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); boxGetGeometry(box1, &x1, &y1, &w1, &h1); boxGetGeometry(box2, &x2, &y2, &w2, &h2); if (x1 <= x2 && y1 <= y2 && (x1 + w1 >= x2 + w2) && (y1 + h1 >= y2 + h2)) *presult = 1; return 0; } /*! * \brief boxIntersects() * * \param[in] box1, box2 * \param[out] presult 1 if any part of box2 is contained in box1; * 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxIntersects(BOX *box1, BOX *box2, l_int32 *presult) { l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, valid1, valid2; if (!presult) return ERROR_INT("&result not defined", __func__, 1); *presult = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); boxGetGeometry(box1, &l1, &t1, &w1, &h1); boxGetGeometry(box2, &l2, &t2, &w2, &h2); r1 = l1 + w1 - 1; r2 = l2 + w2 - 1; b1 = t1 + h1 - 1; b2 = t2 + h2 - 1; if (b2 < t1 || b1 < t2 || r1 < l2 || r2 < l1) *presult = 0; else *presult = 1; return 0; } /*! * \brief boxaContainedInBox() * * \param[in] boxas * \param[in] box for containment * \return boxad boxa with all boxes in boxas that are entirely * contained in box, or NULL on error * *
 * Notes:
 *      (1) All boxes in %boxas that are entirely outside box are removed.
 *      (2) If %box is not valid, returns an empty boxa.
 * 
*/ BOXA * boxaContainedInBox(BOXA *boxas, BOX *box) { l_int32 i, n, val, valid; BOX *box1; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", __func__, NULL); n = boxaGetCount(boxas); boxIsValid(box, &valid); if (n == 0 || !valid) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) continue; boxContains(box, box1, &val); if (val == 1) boxaAddBox(boxad, box1, L_COPY); boxDestroy(&box1); /* destroy the clone */ } return boxad; } /*! * \brief boxaContainedInBoxCount() * * \param[in] boxa * \param[in] box for selecting contained boxes in %boxa * \param[out] pcount number of boxes intersecting the box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %box is not valid, returns a zero count.
 * 
*/ l_ok boxaContainedInBoxCount(BOXA *boxa, BOX *box, l_int32 *pcount) { l_int32 i, n, val, valid; BOX *box1; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); n = boxaGetCount(boxa); boxIsValid(box, &valid); if (n == 0 || !valid) return 0; for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) continue; boxContains(box, box1, &val); if (val == 1) (*pcount)++; boxDestroy(&box1); } return 0; } /*! * \brief boxaContainedInBoxa() * * \param[in] boxa1, boxa2 * \param[out] pcontained 1 if every box in boxa2 is contained in * some box in boxa1; 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxaContainedInBoxa(BOXA *boxa1, BOXA *boxa2, l_int32 *pcontained) { l_int32 i, j, n1, n2, cont, result; BOX *box1, *box2; if (!pcontained) return ERROR_INT("&contained not defined", __func__, 1); *pcontained = 0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", __func__, 1); n1 = boxaGetCount(boxa1); n2 = boxaGetCount(boxa2); for (i = 0; i < n2; i++) { if ((box2 = boxaGetValidBox(boxa2, i, L_CLONE)) == NULL) continue; cont = 0; for (j = 0; j < n1; j++) { if ((box1 = boxaGetValidBox(boxa1, j, L_CLONE)) == NULL) continue; boxContains(box1, box2, &result); boxDestroy(&box1); if (result) { cont = 1; break; } } boxDestroy(&box2); if (!cont) return 0; } *pcontained = 1; return 0; } /*! * \brief boxaIntersectsBox() * * \param[in] boxas * \param[in] box for intersecting * \return boxad boxa with all boxes in boxas that intersect box, * or NULL on error * *
 * Notes:
 *      (1) All boxes in boxa that intersect with box (i.e., are completely
 *          or partially contained in box) are retained.
 * 
*/ BOXA * boxaIntersectsBox(BOXA *boxas, BOX *box) { l_int32 i, n, val, valid; BOX *box1; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", __func__, NULL); n = boxaGetCount(boxas); boxIsValid(box, &valid); if (n == 0 || !valid) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) continue; boxIntersects(box, box1, &val); if (val == 1) boxaAddBox(boxad, box1, L_COPY); boxDestroy(&box1); /* destroy the clone */ } return boxad; } /*! * \brief boxaIntersectsBoxCount() * * \param[in] boxa * \param[in] box for selecting intersecting boxes in %boxa * \param[out] pcount number of boxes intersecting the box * \return 0 if OK, 1 on error */ l_ok boxaIntersectsBoxCount(BOXA *boxa, BOX *box, l_int32 *pcount) { l_int32 i, n, val, valid; BOX *box1; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); n = boxaGetCount(boxa); boxIsValid(box, &valid); if (n == 0 || !valid) return 0; for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) continue; boxIntersects(box, box1, &val); if (val == 1) (*pcount)++; boxDestroy(&box1); } return 0; } /*! * \brief boxaClipToBox() * * \param[in] boxas * \param[in] box for clipping * \return boxad boxa with boxes in boxas clipped to box, or NULL on error * *
 * Notes:
 *      (1) All boxes in boxa not intersecting with box are removed, and
 *          the remaining boxes are clipped to box.
 * 
*/ BOXA * boxaClipToBox(BOXA *boxas, BOX *box) { l_int32 i, n, valid; BOX *box1, *boxo; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", __func__, NULL); n = boxaGetCount(boxas); boxIsValid(box, &valid); if (n == 0 || !valid) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) continue; if ((boxo = boxOverlapRegion(box, box1)) != NULL) boxaAddBox(boxad, boxo, L_INSERT); boxDestroy(&box1); } return boxad; } /*! * \brief boxaCombineOverlaps() * * \param[in] boxas * \param[in,out] pixadb debug output * \return boxad where each set of boxes in boxas that overlap are combined * into a single bounding box in boxad, or NULL on error. * *
 * Notes:
 *      (1) If there are no overlapping boxes, it simply returns a copy
 *          of %boxas.
 *      (2) Input an empty %pixadb, using pixaCreate(0), for debug output.
 *          The output gives 2 visualizations of the boxes per iteration;
 *          boxes in red before, and added boxes in green after. Note that
 *          all pixels in the red boxes are contained in the green ones.
 *      (3) The alternative method of painting each rectangle and finding
 *          the 4-connected components gives a different result in
 *          general, because two non-overlapping (but touching)
 *          rectangles, when rendered, are 4-connected and will be joined.
 *      (4) A bad case computationally is to have n boxes, none of which
 *          overlap.  Then you have one iteration with O(n^2) compares.
 *          This is still faster than painting each rectangle and finding
 *          the bounding boxes of the connected components, even for
 *          thousands of rectangles.
 * 
*/ BOXA * boxaCombineOverlaps(BOXA *boxas, PIXA *pixadb) { l_int32 i, j, w, h, n1, n2, overlap, niters; BOX *box1, *box2, *box3; BOXA *boxa1, *boxa2; PIX *pix1 = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (pixadb) boxaGetExtent(boxas, &w, &h, NULL); boxa1 = boxaCopy(boxas, L_COPY); n1 = boxaGetCount(boxa1); niters = 0; while (1) { /* loop until no change from previous iteration */ niters++; if (pixadb) { pix1 = pixCreate(w + 5, h + 5, 32); pixSetAll(pix1); pixRenderBoxaArb(pix1, boxa1, 2, 255, 0, 0); pixaAddPix(pixadb, pix1, L_COPY); } /* Combine overlaps for this iteration */ for (i = 0; i < n1; i++) { if ((box1 = boxaGetValidBox(boxa1, i, L_COPY)) == NULL) continue; for (j = i + 1; j < n1; j++) { if ((box2 = boxaGetValidBox(boxa1, j, L_COPY)) == NULL) continue; boxIntersects(box1, box2, &overlap); if (overlap) { box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxa1, i, box3); boxaReplaceBox(boxa1, j, boxCreate(0, 0, 0, 0)); boxDestroy(&box1); box1 = boxCopy(box3); } boxDestroy(&box2); } boxDestroy(&box1); } boxa2 = boxaSaveValid(boxa1, L_COPY); n2 = boxaGetCount(boxa2); boxaDestroy(&boxa1); boxa1 = boxa2; if (n1 == n2) { if (pixadb) pixDestroy(&pix1); break; } n1 = n2; if (pixadb) { pixRenderBoxaArb(pix1, boxa1, 2, 0, 255, 0); pixaAddPix(pixadb, pix1, L_INSERT); } } if (pixadb) L_INFO("number of iterations: %d\n", __func__, niters); return boxa1; } /*! * \brief boxaCombineOverlapsInPair() * * \param[in] boxas1 input boxa1 * \param[in] boxas2 input boxa2 * \param[out] pboxad1 output boxa1 * \param[out] pboxad2 output boxa2 * \param[in,out] pixadb debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) One of three things happens to each box in %boxa1 and %boxa2:
 *           * it gets absorbed into a larger box that it overlaps with
 *           * it absorbs a smaller (by area) box that it overlaps with
 *             and gets larger, using the bounding region of the 2 boxes
 *           * it is unchanged (including absorbing smaller boxes that
 *             are contained within it).
 *      (2) If all the boxes from one of the input boxa are absorbed, this
 *          returns an empty boxa.
 *      (3) Input an empty %pixadb, using pixaCreate(0), for debug output
 *      (4) This is useful if different operations are to be carried out
 *          on possibly overlapping rectangular regions, and it is desired
 *          to have only one operation on any rectangular region.
 * 
*/ l_ok boxaCombineOverlapsInPair(BOXA *boxas1, BOXA *boxas2, BOXA **pboxad1, BOXA **pboxad2, PIXA *pixadb) { l_int32 i, j, w, h, w2, h2, n1, n2, n1i, n2i, niters; l_int32 overlap, bigger, area1, area2; BOX *box1, *box2, *box3; BOXA *boxa1, *boxa2, *boxac1, *boxac2; PIX *pix1; if (pboxad1) *pboxad1 = NULL; if (pboxad2) *pboxad2 = NULL; if (!boxas1 || !boxas2) return ERROR_INT("boxas1 and boxas2 not both defined", __func__, 1); if (!pboxad1 || !pboxad2) return ERROR_INT("&boxad1 and &boxad2 not both defined", __func__, 1); if (pixadb) { boxaGetExtent(boxas1, &w, &h, NULL); boxaGetExtent(boxas2, &w2, &h2, NULL); w = L_MAX(w, w2); h = L_MAX(h, w2); } /* Let the boxa with the largest area have first crack at the other */ boxaGetArea(boxas1, &area1); boxaGetArea(boxas2, &area2); if (area1 >= area2) { boxac1 = boxaCopy(boxas1, L_COPY); boxac2 = boxaCopy(boxas2, L_COPY); } else { boxac1 = boxaCopy(boxas2, L_COPY); boxac2 = boxaCopy(boxas1, L_COPY); } n1i = boxaGetCount(boxac1); n2i = boxaGetCount(boxac2); niters = 0; while (1) { niters++; if (pixadb) { pix1 = pixCreate(w + 5, h + 5, 32); pixSetAll(pix1); pixRenderBoxaArb(pix1, boxac1, 2, 255, 0, 0); pixRenderBoxaArb(pix1, boxac2, 2, 0, 255, 0); pixaAddPix(pixadb, pix1, L_INSERT); } /* First combine boxes in each set */ boxa1 = boxaCombineOverlaps(boxac1, NULL); boxa2 = boxaCombineOverlaps(boxac2, NULL); /* Now combine boxes between sets */ n1 = boxaGetCount(boxa1); n2 = boxaGetCount(boxa2); for (i = 0; i < n1; i++) { /* 1 eats 2 */ if ((box1 = boxaGetValidBox(boxa1, i, L_COPY)) == NULL) continue; for (j = 0; j < n2; j++) { if ((box2 = boxaGetValidBox(boxa2, j, L_COPY)) == NULL) continue; boxIntersects(box1, box2, &overlap); boxCompareSize(box1, box2, L_SORT_BY_AREA, &bigger); if (overlap && (bigger == 1)) { box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxa1, i, box3); boxaReplaceBox(boxa2, j, boxCreate(0, 0, 0, 0)); boxDestroy(&box1); box1 = boxCopy(box3); } boxDestroy(&box2); } boxDestroy(&box1); } for (i = 0; i < n2; i++) { /* 2 eats 1 */ if ((box2 = boxaGetValidBox(boxa2, i, L_COPY)) == NULL) continue; for (j = 0; j < n1; j++) { if ((box1 = boxaGetValidBox(boxa1, j, L_COPY)) == NULL) continue; boxIntersects(box1, box2, &overlap); boxCompareSize(box2, box1, L_SORT_BY_AREA, &bigger); if (overlap && (bigger == 1)) { box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxa2, i, box3); boxaReplaceBox(boxa1, j, boxCreate(0, 0, 0, 0)); boxDestroy(&box2); box2 = boxCopy(box3); } boxDestroy(&box1); } boxDestroy(&box2); } boxaDestroy(&boxac1); boxaDestroy(&boxac2); boxac1 = boxaSaveValid(boxa1, L_COPY); /* remove invalid boxes */ boxac2 = boxaSaveValid(boxa2, L_COPY); boxaDestroy(&boxa1); boxaDestroy(&boxa2); n1 = boxaGetCount(boxac1); n2 = boxaGetCount(boxac2); if (n1 == n1i && n2 == n2i) break; n1i = n1; n2i = n2; if (pixadb) { pix1 = pixCreate(w + 5, h + 5, 32); pixSetAll(pix1); pixRenderBoxaArb(pix1, boxac1, 2, 255, 0, 0); pixRenderBoxaArb(pix1, boxac2, 2, 0, 255, 0); pixaAddPix(pixadb, pix1, L_INSERT); } } if (pixadb) L_INFO("number of iterations: %d\n", __func__, niters); *pboxad1 = boxac1; *pboxad2 = boxac2; return 0; } /*! * \brief boxOverlapRegion() * * \param[in] box1, box2 * \return box of overlap region between input boxes; * NULL if no overlap or on error * *
 * Notes:
 *      (1) This is the geometric intersection of the two rectangles.
 * 
*/ BOX * boxOverlapRegion(BOX *box1, BOX *box2) { l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, ld, td, rd, bd; l_int32 valid1, valid2; if (!box1 || !box2) return (BOX *)ERROR_PTR("boxes not both defined", __func__, NULL); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) { L_WARNING("at least one box is invalid\n", __func__); return NULL; } boxGetGeometry(box1, &l1, &t1, &w1, &h1); boxGetGeometry(box2, &l2, &t2, &w2, &h2); r1 = l1 + w1 - 1; r2 = l2 + w2 - 1; b1 = t1 + h1 - 1; b2 = t2 + h2 - 1; if (b2 < t1 || b1 < t2 || r1 < l2 || r2 < l1) return NULL; ld = L_MAX(l1, l2); td = L_MAX(t1, t2); rd = L_MIN(r1, r2); bd = L_MIN(b1, b2); return boxCreate(ld, td, rd - ld + 1, bd - td + 1); } /*! * \brief boxBoundingRegion() * * \param[in] box1, box2 * \return box of bounding region containing the input boxes; * NULL on error * *
 * Notes:
 *      (1) This is the geometric union of the two rectangles.
 *      (2) Invalid boxes are ignored.  This returns an invalid box
 *          if both input boxes are invalid.
 *      (3) For the geometric union of a boxa, use boxaGetExtent().
 * 
*/ BOX * boxBoundingRegion(BOX *box1, BOX *box2) { l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, ld, td, rd, bd; l_int32 valid1, valid2; if (!box1 || !box2) return (BOX *)ERROR_PTR("boxes not both defined", __func__, NULL); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 && !valid2) { L_WARNING("both boxes are invalid\n", __func__); return boxCreate(0, 0, 0, 0); } if (valid1 && !valid2) return boxCopy(box1); if (!valid1 && valid2) return boxCopy(box2); boxGetGeometry(box1, &l1, &t1, &w1, &h1); boxGetGeometry(box2, &l2, &t2, &w2, &h2); r1 = l1 + w1 - 1; r2 = l2 + w2 - 1; b1 = t1 + h1 - 1; b2 = t2 + h2 - 1; ld = L_MIN(l1, l2); td = L_MIN(t1, t2); rd = L_MAX(r1, r2); bd = L_MAX(b1, b2); return boxCreate(ld, td, rd - ld + 1, bd - td + 1); } /*! * \brief boxOverlapFraction() * * \param[in] box1, box2 * \param[out] pfract the fraction of box2 overlapped by box1 * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) The result depends on the order of the input boxes,
 *          because the overlap is taken as a fraction of box2.
 *      (2) If at least one box is not valid, there is no overlap.
 * 
*/ l_ok boxOverlapFraction(BOX *box1, BOX *box2, l_float32 *pfract) { l_int32 w2, h2, w, h, valid1, valid2; BOX *boxo; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) { L_WARNING("boxes not both valid\n", __func__); return 0; } if ((boxo = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ return 0; boxGetGeometry(box2, NULL, NULL, &w2, &h2); boxGetGeometry(boxo, NULL, NULL, &w, &h); *pfract = (l_float32)(w * h) / (l_float32)(w2 * h2); boxDestroy(&boxo); return 0; } /*! * \brief boxOverlapArea() * * \param[in] box1, box2 * \param[out] parea the number of pixels in the overlap * \return 0 if OK, 1 on error. */ l_ok boxOverlapArea(BOX *box1, BOX *box2, l_int32 *parea) { l_int32 w, h, valid1, valid2; BOX *box; if (!parea) return ERROR_INT("&area not defined", __func__, 1); *parea = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); if ((box = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ return 0; boxGetGeometry(box, NULL, NULL, &w, &h); *parea = w * h; boxDestroy(&box); return 0; } /*! * \brief boxaHandleOverlaps() * * \param[in] boxas * \param[in] op L_COMBINE, L_REMOVE_SMALL * \param[in] range forward distance over which overlaps * are checked; > 0 * \param[in] min_overlap minimum fraction of smaller box required for * overlap to count; 0.0 to ignore * \param[in] max_ratio maximum fraction of small/large areas for * overlap to count; 1.0 to ignore * \param[out] pnamap [optional] combining map * \return boxad, or NULL on error. * *
 * Notes:
 *      (1) For all n(n-1)/2 box pairings, if two boxes overlap, either:
 *          (a) op == L_COMBINE: get the bounding region for the two,
 *              replace the larger with the bounding region, and remove
 *              the smaller of the two, or
 *          (b) op == L_REMOVE_SMALL: just remove the smaller.
 *      (2) If boxas is 2D sorted, range can be small, but if it is
 *          not spatially sorted, range should be large to allow all
 *          pairwise comparisons to be made.
 *      (3) The %min_overlap parameter allows ignoring small overlaps.
 *          If %min_overlap == 1.0, only boxes fully contained in larger
 *          boxes can be considered for removal; if %min_overlap == 0.0,
 *          this constraint is ignored.
 *      (4) The %max_ratio parameter allows ignoring overlaps between
 *          boxes that are not too different in size.  If %max_ratio == 0.0,
 *          no boxes can be removed; if %max_ratio == 1.0, this constraint
 *          is ignored.
 * 
*/ BOXA * boxaHandleOverlaps(BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap) { l_int32 i, j, n, w, h, area1, area2, val; l_int32 overlap_area; l_float32 overlap_ratio, area_ratio; BOX *box1, *box2, *box3; BOXA *boxat, *boxad; NUMA *namap; if (pnamap) *pnamap = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (op != L_COMBINE && op != L_REMOVE_SMALL) return (BOXA *)ERROR_PTR("invalid op", __func__, NULL); n = boxaGetCount(boxas); if (n == 0) return boxaCreate(1); /* empty */ if (range == 0) { L_WARNING("range is 0\n", __func__); return boxaCopy(boxas, L_COPY); } /* Identify smaller boxes in overlap pairs, and mark to eliminate. */ namap = numaMakeConstant(-1, n); for (i = 0; i < n; i++) { if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) continue; boxGetGeometry(box1, NULL, NULL, &w, &h); area1 = w * h; if (area1 == 0) { boxDestroy(&box1); continue; } for (j = i + 1; j < i + 1 + range && j < n; j++) { if ((box2 = boxaGetValidBox(boxas, j, L_CLONE)) == NULL) continue; boxOverlapArea(box1, box2, &overlap_area); if (overlap_area > 0) { boxGetGeometry(box2, NULL, NULL, &w, &h); area2 = w * h; if (area2 == 0) { /* do nothing */ } else if (area1 >= area2) { overlap_ratio = (l_float32)overlap_area / (l_float32)area2; area_ratio = (l_float32)area2 / (l_float32)area1; if (overlap_ratio >= min_overlap && area_ratio <= max_ratio) { numaSetValue(namap, j, i); } } else { overlap_ratio = (l_float32)overlap_area / (l_float32)area1; area_ratio = (l_float32)area1 / (l_float32)area2; if (overlap_ratio >= min_overlap && area_ratio <= max_ratio) { numaSetValue(namap, i, j); } } } boxDestroy(&box2); } boxDestroy(&box1); } boxat = boxaCopy(boxas, L_COPY); if (op == L_COMBINE) { /* Resize the larger of the pair to the bounding region */ for (i = 0; i < n; i++) { numaGetIValue(namap, i, &val); if (val >= 0) { box1 = boxaGetBox(boxas, i, L_CLONE); /* smaller */ box2 = boxaGetBox(boxas, val, L_CLONE); /* larger */ box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxat, val, box3); boxDestroy(&box1); boxDestroy(&box2); } } } /* Remove the smaller of the pairs */ boxad = boxaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(namap, i, &val); if (val == -1) { box1 = boxaGetBox(boxat, i, L_COPY); boxaAddBox(boxad, box1, L_INSERT); } } boxaDestroy(&boxat); if (pnamap) *pnamap = namap; else numaDestroy(&namap); return boxad; } /*! * \brief boxOverlapDistance() * * \param[in] box1, box2 two boxes, in any order * \param[out] ph_ovl [optional] horizontal overlap * \param[out] pv_ovl [optional] vertical overlap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This measures horizontal and vertical overlap of the
 *          two boxes.  Horizontal and vertical overlap are measured
 *          independently.  We need to consider several cases to clarify.
 *      (2) A positive horizontal overlap means that there is at least
 *          one point on the the %box1 boundary with the same x-component
 *          as some point on the %box2 boundary.  Conversely, with a zero
 *          or negative horizontal overlap, there are no boundary pixels
 *          in %box1 that share an x-component with a boundary pixel in %box2.
 *      (3) For a zero or negative horizontal overlap, o <= 0, the minimum
 *          difference in the x-component between pixels on the boundaries
 *          of the two boxes is d = -o + 1.
 *      (4) Likewise for vertical overlaps.
 * 
*/ l_ok boxOverlapDistance(BOX *box1, BOX *box2, l_int32 *ph_ovl, l_int32 *pv_ovl) { l_int32 l1, t1, w1, h1, r1, b1, l2, t2, w2, h2, r2, b2, valid1, valid2; if (!ph_ovl && !pv_ovl) return ERROR_INT("nothing to do", __func__, 1); if (ph_ovl) *ph_ovl = 0; if (pv_ovl) *pv_ovl = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); if (ph_ovl) { boxGetGeometry(box1, &l1, NULL, &w1, NULL); boxGetGeometry(box2, &l2, NULL, &w2, NULL); r1 = l1 + w1; /* 1 pixel to the right of box 1 */ r2 = l2 + w2; if (l2 >= l1) *ph_ovl = r1 - l2; else *ph_ovl = r2 - l1; } if (pv_ovl) { boxGetGeometry(box1, NULL, &t1, NULL, &h1); boxGetGeometry(box2, NULL, &t2, NULL, &h2); b1 = t1 + h1; /* 1 pixel below box 1 */ b2 = t2 + h2; if (t2 >= t1) *pv_ovl = b1 - t2; else *pv_ovl = b2 - t1; } return 0; } /*! * \brief boxSeparationDistance() * * \param[in] box1, box2 two boxes, in any order * \param[out] ph_sep horizontal separation * \param[out] pv_sep vertical separation * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This measures the Manhattan distance between the closest points
 *          on the boundaries of the two boxes.  When the boxes overlap
 *          (including touching along a line or at a corner), the
 *          horizontal and vertical distances are 0.
 *      (2) The distances represent the horizontal and vertical separation
 *          of the two boxes.  The boxes have a nonzero intersection when
 *          both the horizontal and vertical overlaps are positive, and
 *          for that case both horizontal and vertical separation
 *          distances are 0.
 *      (3) If the horizontal overlap of the boxes is positive, the
 *          horizontal separation between nearest points on respective
 *          boundaries is 0, and likewise for the vertical overlap.
 *      (4) If the horizontal overlap ho <= 0, the horizontal
 *          separation between nearest points is d = -ho + 1.
 *          Likewise, if the vertical overlap vo <= 0, the vertical
 *          separation between nearest points is d = -vo + 1.
 * 
*/ l_ok boxSeparationDistance(BOX *box1, BOX *box2, l_int32 *ph_sep, l_int32 *pv_sep) { l_int32 h_ovl, v_ovl, valid1, valid2; if (ph_sep) *ph_sep = 0; if (pv_sep) *pv_sep = 0; if (!ph_sep || !pv_sep) return ERROR_INT("&h_sep and &v_sep not both defined", __func__, 1); if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); boxOverlapDistance(box1, box2, &h_ovl, &v_ovl); if (h_ovl <= 0) *ph_sep = -h_ovl + 1; if (v_ovl <= 0) *pv_sep = -v_ovl + 1; return 0; } /*! * \brief boxCompareSize() * * \param[in] box1, box2 * \param[in] type L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MAX_DIMENSION, L_SORT_BY_PERIMETER, * L_SORT_BY_AREA, * \param[out] prel 1 if box1 > box2, 0 if the same, -1 if box1 < box2 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We're re-using the SORT enum for these comparisons.
 * 
*/ l_ok boxCompareSize(BOX *box1, BOX *box2, l_int32 type, l_int32 *prel) { l_int32 w1, h1, w2, h2, size1, size2, valid1, valid2; if (!prel) return ERROR_INT("&rel not defined", __func__, 1); *prel = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); if (type != L_SORT_BY_WIDTH && type != L_SORT_BY_HEIGHT && type != L_SORT_BY_MAX_DIMENSION && type != L_SORT_BY_PERIMETER && type != L_SORT_BY_AREA) return ERROR_INT("invalid compare type", __func__, 1); boxGetGeometry(box1, NULL, NULL, &w1, &h1); boxGetGeometry(box2, NULL, NULL, &w2, &h2); if (type == L_SORT_BY_WIDTH) { *prel = (w1 > w2) ? 1 : ((w1 == w2) ? 0 : -1); } else if (type == L_SORT_BY_HEIGHT) { *prel = (h1 > h2) ? 1 : ((h1 == h2) ? 0 : -1); } else if (type == L_SORT_BY_MAX_DIMENSION) { size1 = L_MAX(w1, h1); size2 = L_MAX(w2, h2); *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); } else if (type == L_SORT_BY_PERIMETER) { size1 = w1 + h1; size2 = w2 + h2; *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); } else if (type == L_SORT_BY_AREA) { size1 = w1 * h1; size2 = w2 * h2; *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); } return 0; } /*! * \brief boxContainsPt() * * \param[in] box * \param[in] x, y a point * \param[out] pcontains 1 if box contains point; 0 otherwise * \return 0 if OK, 1 on error. */ l_ok boxContainsPt(BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains) { l_int32 bx, by, bw, bh; if (!pcontains) return ERROR_INT("&contains not defined", __func__, 1); *pcontains = 0; if (!box) return ERROR_INT("&box not defined", __func__, 1); boxGetGeometry(box, &bx, &by, &bw, &bh); if (x >= bx && x < bx + bw && y >= by && y < by + bh) *pcontains = 1; return 0; } /*! * \brief boxaGetNearestToPt() * * \param[in] boxa * \param[in] x, y point * \return box with centroid closest to the given point [x,y], * or NULL if no boxes in boxa * *
 * Notes:
 *      (1) Uses euclidean distance between centroid and point.
 * 
*/ BOX * boxaGetNearestToPt(BOXA *boxa, l_int32 x, l_int32 y) { l_int32 i, n, minindex; l_float32 delx, dely, dist, mindist, cx, cy; BOX *box; if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) return (BOX *)ERROR_PTR("n = 0", __func__, NULL); mindist = 1000000000.; minindex = 0; for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) continue; boxGetCenter(box, &cx, &cy); delx = (l_float32)(cx - x); dely = (l_float32)(cy - y); dist = delx * delx + dely * dely; if (dist < mindist) { minindex = i; mindist = dist; } boxDestroy(&box); } return boxaGetBox(boxa, minindex, L_COPY); } /*! * \brief boxaGetNearestToLine() * * \param[in] boxa * \param[in] x, y (y = -1 for vertical line; x = -1 for horiz line) * \return box with centroid closest to the given line, * or NULL if no boxes in boxa * *
 * Notes:
 *      (1) For a horizontal line at some value y, get the minimum of the
 *          distance |yc - y| from the box centroid yc value to y;
 *          likewise minimize |xc - x| for a vertical line at x.
 *      (2) Input y < 0, x >= 0 to indicate a vertical line at x, and
 *          x < 0, y >= 0 for a horizontal line at y.
 * 
*/ BOX * boxaGetNearestToLine(BOXA *boxa, l_int32 x, l_int32 y) { l_int32 i, n, minindex; l_float32 dist, mindist, cx, cy; BOX *box; if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) return (BOX *)ERROR_PTR("n = 0", __func__, NULL); if (y >= 0 && x >= 0) return (BOX *)ERROR_PTR("either x or y must be < 0", __func__, NULL); if (y < 0 && x < 0) return (BOX *)ERROR_PTR("either x or y must be >= 0", __func__, NULL); mindist = 1000000000.; minindex = 0; for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) continue; boxGetCenter(box, &cx, &cy); if (x >= 0) dist = L_ABS(cx - (l_float32)x); else /* y >= 0 */ dist = L_ABS(cy - (l_float32)y); if (dist < mindist) { minindex = i; mindist = dist; } boxDestroy(&box); } return boxaGetBox(boxa, minindex, L_COPY); } /*! * \brief boxaFindNearestBoxes() * * \param[in] boxa either unsorted, or 2D sorted in LR/TB scan order * \param[in] dist_select L_NON_NEGATIVE, L_ALL * \param[in] range search distance from box i; use 0 to search * entire boxa (e.g., if it's not 2D sorted) * \param[out] pnaaindex for each box in %boxa, contains a numa of 4 * box indices (per direction) of the nearest box * \param[out] pnaadist for each box in %boxa, this contains a numa * \return 0 if OK, 1 on error *
 * Notes:
 *      (1) See boxaGetNearestByDirection() for usage of %dist_select
 *          and %range.
 * 
*/ l_ok boxaFindNearestBoxes(BOXA *boxa, l_int32 dist_select, l_int32 range, NUMAA **pnaaindex, NUMAA **pnaadist) { l_int32 i, n, index, dist; NUMA *nai, *nad; NUMAA *naai, *naad; if (pnaaindex) *pnaaindex = NULL; if (pnaadist) *pnaadist = NULL; if (!pnaaindex) return ERROR_INT("&naaindex not defined", __func__, 1); if (!pnaadist) return ERROR_INT("&naadist not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); naai = numaaCreate(n); naad = numaaCreate(n); *pnaaindex = naai; *pnaadist = naad; for (i = 0; i < n; i++) { nai = numaCreate(4); nad = numaCreate(4); boxaGetNearestByDirection(boxa, i, L_FROM_LEFT, dist_select, range, &index, &dist); numaAddNumber(nai, index); numaAddNumber(nad, dist); boxaGetNearestByDirection(boxa, i, L_FROM_RIGHT, dist_select, range, &index, &dist); numaAddNumber(nai, index); numaAddNumber(nad, dist); boxaGetNearestByDirection(boxa, i, L_FROM_TOP, dist_select, range, &index, &dist); numaAddNumber(nai, index); numaAddNumber(nad, dist); boxaGetNearestByDirection(boxa, i, L_FROM_BOT, dist_select, range, &index, &dist); numaAddNumber(nai, index); numaAddNumber(nad, dist); numaaAddNuma(naai, nai, L_INSERT); numaaAddNuma(naad, nad, L_INSERT); } return 0; } /*! * \brief boxaGetNearestByDirection() * * \param[in] boxa either unsorted, or 2D sorted in LR/TB scan order * \param[in] i box we test against * \param[in] dir direction to look: L_FROM_LEFT, L_FROM_RIGHT, * L_FROM_TOP, L_FROM_BOT * \param[in] dist_select L_NON_NEGATIVE, L_ALL * \param[in] range search distance from box i; use 0 to search * entire boxa (e.g., if it's not 2D sorted) * \param[out] pindex index in boxa of nearest box with overlapping * coordinates in the indicated direction; * -1 if there is no box * \param[out] pdist distance of the nearest box in the indicated * direction; 100000 if no box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For efficiency, use a LR/TD sorted %boxa, which can be
 *          made by flattening a 2D sorted boxaa.  In that case,
 *          %range can be some positive integer like 50.
 *      (2) If boxes overlap, the distance will be < 0.  Use %dist_select
 *          to determine if these should count or not.  If L_ALL, then
 *          one box will match as the nearest to another in 2 or more
 *          directions.
 * 
*/ l_ok boxaGetNearestByDirection(BOXA *boxa, l_int32 i, l_int32 dir, l_int32 dist_select, l_int32 range, l_int32 *pindex, l_int32 *pdist) { l_int32 j, jmin, jmax, n, mindist, dist, index; l_int32 x, y, w, h, bx, by, bw, bh; if (pindex) *pindex = -1; if (pdist) *pdist = 100000; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); if (!pdist) return ERROR_INT("&dist not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (dir != L_FROM_LEFT && dir != L_FROM_RIGHT && dir != L_FROM_TOP && dir != L_FROM_BOT) return ERROR_INT("invalid dir", __func__, 1); if (dist_select != L_NON_NEGATIVE && dist_select != L_ALL) return ERROR_INT("invalid dist_select", __func__, 1); n = boxaGetCount(boxa); if (i < 0 || i >= n) return ERROR_INT("invalid box index", __func__, 1); jmin = (range <= 0) ? 0 : L_MAX(0, i - range); jmax = (range <= 0) ? n - 1 : L_MIN(n -1, i + range); boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); mindist = 100000; index = -1; if (dir == L_FROM_LEFT || dir == L_FROM_RIGHT) { for (j = jmin; j <= jmax; j++) { if (j == i) continue; boxaGetBoxGeometry(boxa, j, &bx, &by, &bw, &bh); if ((bx >= x && dir == L_FROM_LEFT) || /* not to the left */ (x >= bx && dir == L_FROM_RIGHT)) /* not to the right */ continue; if (boxHasOverlapInXorY(y, h, by, bh) == 1) { dist = boxGetDistanceInXorY(x, w, bx, bw); if (dist_select == L_NON_NEGATIVE && dist < 0) continue; if (dist < mindist) { mindist = dist; index = j; } } } } else if (dir == L_FROM_TOP || dir == L_FROM_BOT) { for (j = jmin; j <= jmax; j++) { if (j == i) continue; boxaGetBoxGeometry(boxa, j, &bx, &by, &bw, &bh); if ((by >= y && dir == L_FROM_TOP) || /* not above */ (y >= by && dir == L_FROM_BOT)) /* not below */ continue; if (boxHasOverlapInXorY(x, w, bx, bw) == 1) { dist = boxGetDistanceInXorY(y, h, by, bh); if (dist_select == L_NON_NEGATIVE && dist < 0) continue; if (dist < mindist) { mindist = dist; index = j; } } } } *pindex = index; *pdist = mindist; return 0; } /*! * \brief boxHasOverlapInXorY() * * \param[in] c1 left or top coordinate of box1 * \param[in] s1 width or height of box1 * \param[in] c2 left or top coordinate of box2 * \param[in] s2 width or height of box2 * \return 0 if no overlap; 1 if any overlap * *
 * Notes:
 *      (1) Like boxGetDistanceInXorY(), this is used for overlaps both in
 *          x (which projected vertically) and in y (projected horizontally)
 * 
*/ static l_int32 boxHasOverlapInXorY(l_int32 c1, l_int32 s1, l_int32 c2, l_int32 s2) { l_int32 ovlp; if (c1 > c2) ovlp = c2 + s2 - 1 - c1; else ovlp = c1 + s1 - 1 - c2; return (ovlp < 0) ? 0 : 1; } /*! * \brief boxGetDistanceInXorY() * * \param[in] c1 left or top coordinate of box1 * \param[in] s1 width or height of box1 * \param[in] c2 left or top coordinate of box2 * \param[in] s2 width or height of box2 * \return distance between them (if < 0, box2 overlaps box1 in the * dimension considered) */ static l_int32 boxGetDistanceInXorY(l_int32 c1, l_int32 s1, l_int32 c2, l_int32 s2) { l_int32 dist; if (c1 > c2) dist = c1 - (c2 + s2 - 1); else dist = c2 - (c1 + s1 - 1); return dist; } /*! * \brief boxGetCenter() * * \param[in] box * \param[out] pcx, pcy location of center of box * \return 0 if OK, 1 on error or if box is not valid */ l_ok boxGetCenter(const BOX *box, l_float32 *pcx, l_float32 *pcy) { l_int32 x, y, w, h; if (pcx) *pcx = 0; if (pcy) *pcy = 0; if (!pcx || !pcy) return ERROR_INT("&cx, &cy not both defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); boxGetGeometry(box, &x, &y, &w, &h); if (w == 0 || h == 0) return 1; *pcx = (l_float32)(x + 0.5 * w); *pcy = (l_float32)(y + 0.5 * h); return 0; } /*! * \brief boxIntersectByLine() * * \param[in] box * \param[in] x, y point that line goes through * \param[in] slope of line * \param[out] px1, py1 1st point of intersection with box * \param[out] px2, py2 2nd point of intersection with box * \param[out] pn number of points of intersection * \return 0 if OK, 1 on error or if box is not valid * *
 * Notes:
 *      (1) If the intersection is at only one point (a corner), the
 *          coordinates are returned in (x1, y1).
 *      (2) Represent a vertical line by one with a large but finite slope.
 * 
*/ l_ok boxIntersectByLine(const BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn) { l_int32 bx, by, bw, bh, xp, yp, xt, yt, i, n; l_float32 invslope; PTA *pta; if (px1) *px1 = 0; if (px2) *px2 = 0; if (py1) *py1 = 0; if (py2) *py2 = 0; if (pn) *pn = 0; if (!px1 || !py1 || !px2 || !py2) return ERROR_INT("&x1, &y1, &x2, &y2 not all defined", __func__, 1); if (!pn) return ERROR_INT("&n not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw == 0 || bh == 0) return 1; if (slope == 0.0) { if (y >= by && y < by + bh) { *py1 = *py2 = y; *px1 = bx; *px2 = bx + bw - 1; } return 0; } if (slope > 1000000.0) { if (x >= bx && x < bx + bw) { *px1 = *px2 = x; *py1 = by; *py2 = by + bh - 1; } return 0; } /* Intersection with top and bottom lines of box */ pta = ptaCreate(2); invslope = 1.0 / slope; xp = (l_int32)(x + invslope * (y - by)); if (xp >= bx && xp < bx + bw) ptaAddPt(pta, xp, by); xp = (l_int32)(x + invslope * (y - by - bh + 1)); if (xp >= bx && xp < bx + bw) ptaAddPt(pta, xp, by + bh - 1); /* Intersection with left and right lines of box */ yp = (l_int32)(y + slope * (x - bx)); if (yp >= by && yp < by + bh) ptaAddPt(pta, bx, yp); yp = (l_int32)(y + slope * (x - bx - bw + 1)); if (yp >= by && yp < by + bh) ptaAddPt(pta, bx + bw - 1, yp); /* There is a maximum of 2 unique points; remove duplicates. */ n = ptaGetCount(pta); if (n > 0) { ptaGetIPt(pta, 0, px1, py1); /* accept the first one */ *pn = 1; } for (i = 1; i < n; i++) { ptaGetIPt(pta, i, &xt, &yt); if ((*px1 != xt) || (*py1 != yt)) { *px2 = xt; *py2 = yt; *pn = 2; break; } } ptaDestroy(&pta); return 0; } /*! * \brief boxClipToRectangle() * * \param[in] box * \param[in] wi, hi rectangle representing image * \return part of box within given rectangle, or NULL on error * or if box is entirely outside the rectangle * *
 * Notes:
 *      (1) This can be used to clip a rectangle to an image.
 *          The clipping rectangle is assumed to have a UL corner at (0, 0),
 *          and a LR corner at (wi - 1, hi - 1).
 * 
*/ BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi) { BOX *boxd; if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); if (box->x >= wi || box->y >= hi || box->x + box->w <= 0 || box->y + box->h <= 0) return (BOX *)ERROR_PTR("box outside rectangle", __func__, NULL); boxd = boxCopy(box); if (boxd->x < 0) { boxd->w += boxd->x; boxd->x = 0; } if (boxd->y < 0) { boxd->h += boxd->y; boxd->y = 0; } if (boxd->x + boxd->w > wi) boxd->w = wi - boxd->x; if (boxd->y + boxd->h > hi) boxd->h = hi - boxd->y; return boxd; } /*! * \brief boxClipToRectangleParams() * * \param[in] box [optional] requested box; can be null * \param[in] w, h clipping box size; typ. the size of an image * \param[out] pxstart start x coordinate * \param[out] pystart start y coordinate * \param[out] pxend one pixel beyond clipping box * \param[out] pyend one pixel beyond clipping box * \param[out] pbw [optional] clipped width * \param[out] pbh [optional] clipped height * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The return value should be checked.  If it is 1, the
 *          returned parameter values are bogus.
 *      (2) This simplifies the selection of pixel locations within
 *          a given rectangle:
 *             for (i = ystart; i < yend; i++ {
 *                 ...
 *                 for (j = xstart; j < xend; j++ {
 *                     ....
 * 
*/ l_ok boxClipToRectangleParams(BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh) { l_int32 bw, bh; BOX *boxc; if (pxstart) *pxstart = 0; if (pystart) *pystart = 0; if (pxend) *pxend = w; if (pyend) *pyend = h; if (pbw) *pbw = w; if (pbh) *pbh = h; if (!pxstart || !pystart || !pxend || !pyend) return ERROR_INT("invalid ptr input", __func__, 1); if (!box) return 0; if ((boxc = boxClipToRectangle(box, w, h)) == NULL) return ERROR_INT("box outside image", __func__, 1); boxGetGeometry(boxc, pxstart, pystart, &bw, &bh); boxDestroy(&boxc); if (pbw) *pbw = bw; if (pbh) *pbh = bh; if (bw == 0 || bh == 0) return ERROR_INT("invalid clipping box", __func__, 1); *pxend = *pxstart + bw; /* 1 past the end */ *pyend = *pystart + bh; /* 1 past the end */ return 0; } /*! * \brief boxRelocateOneSide() * * \param[in] boxd [optional]; this can be null, equal to boxs, * or different from boxs; * \param[in] boxs starting box; to have one side relocated * \param[in] loc new location of the side that is changing * \param[in] sideflag L_FROM_LEFT, etc., indicating the side that moves * \return boxd, or NULL on error or if the computed boxd has * width or height <= 0. * *
 * Notes:
 *      (1) Set boxd == NULL to get new box; boxd == boxs for in-place;
 *          or otherwise to resize existing boxd.
 *      (2) For usage, suggest one of these:
 *               boxd = boxRelocateOneSide(NULL, boxs, ...);   // new
 *               boxRelocateOneSide(boxs, boxs, ...);          // in-place
 *               boxRelocateOneSide(boxd, boxs, ...);          // other
 * 
*/ BOX * boxRelocateOneSide(BOX *boxd, BOX *boxs, l_int32 loc, l_int32 sideflag) { l_int32 x, y, w, h; if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", __func__, NULL); if (!boxd) boxd = boxCopy(boxs); boxGetGeometry(boxs, &x, &y, &w, &h); if (w == 0 || h == 0) return boxd; if (sideflag == L_FROM_LEFT) boxSetGeometry(boxd, loc, -1, w + x - loc, -1); else if (sideflag == L_FROM_RIGHT) boxSetGeometry(boxd, -1, -1, loc - x + 1, -1); else if (sideflag == L_FROM_TOP) boxSetGeometry(boxd, -1, loc, -1, h + y - loc); else if (sideflag == L_FROM_BOT) boxSetGeometry(boxd, -1, -1, -1, loc - y + 1); return boxd; } /*! * \brief boxaAdjustSides() * * \param[in] boxas * \param[in] delleft, delright, deltop, delbot changes in location of * each side for each box * \return boxad, or NULL on error * *
 * Notes:
 *      (1) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
 *      (2) If the width or height of a box goes to 0, we generate a box with
 *          w == 1 and h == 1, as a placeholder.
 *      (3) See boxAdjustSides().
 * 
*/ BOXA * boxaAdjustSides(BOXA *boxas, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot) { l_int32 n, i, x, y; BOX *box1, *box2; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); n = boxaGetCount(boxas); boxad = boxaCreate(n); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxas, i, L_COPY); box2 = boxAdjustSides(NULL, box1, delleft, delright, deltop, delbot); if (!box2) { boxGetGeometry(box1, &x, &y, NULL, NULL); box2 = boxCreate(x, y, 1, 1); } boxaAddBox(boxad, box2, L_INSERT); boxDestroy(&box1); } return boxad; } /*! * \brief boxaAdjustBoxSides() * * \param[in] boxas * \param[in] index * \param[in] delleft, delright, deltop, delbot changes to box side locs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place operation on a box in a boxa.
 *      (2) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
 *      (3) If a box ends up with no area, an error message is emitted,
 *          but the box dimensions are not changed.
 *      (4) See boxaAdjustSides().
 * 
*/ l_ok boxaAdjustBoxSides(BOXA *boxa, l_int32 index, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot) { BOX *box; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((box = boxaGetBox(boxa, index, L_CLONE)) == NULL) return ERROR_INT("invalid index", __func__, 1); boxAdjustSides(box, box, delleft, delright, deltop, delbot); boxDestroy(&box); /* the clone */ return 0; } /*! * \brief boxAdjustSides() * * \param[in] boxd [optional]; this can be null, equal to boxs, * or different from boxs * \param[in] boxs starting box; to have sides adjusted * \param[in] delleft, delright, deltop, delbot changes in location * of each side * \return boxd, or NULL on error or if the computed boxd has * width or height <= 0. * *
 * Notes:
 *      (1) Set boxd == NULL to get new box; boxd == boxs for in-place;
 *          or otherwise to resize existing boxd.
 *      (2) For usage, suggest one of these:
 *               boxd = boxAdjustSides(NULL, boxs, ...);   // new
 *               boxAdjustSides(boxs, boxs, ...);          // in-place
 *               boxAdjustSides(boxd, boxs, ...);          // other
 *      (3) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
 *      (4) For example, to expand in-place by 20 pixels on each side, use
 *             boxAdjustSides(box, box, -20, 20, -20, 20);
 * 
*/ BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot) { l_int32 x, y, w, h, xl, xr, yt, yb, wnew, hnew; if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", __func__, NULL); boxGetGeometry(boxs, &x, &y, &w, &h); xl = L_MAX(0, x + delleft); yt = L_MAX(0, y + deltop); xr = x + w + delright; /* one pixel beyond right edge */ yb = y + h + delbot; /* one pixel below bottom edge */ wnew = xr - xl; hnew = yb - yt; if (wnew < 1 || hnew < 1) return (BOX *)ERROR_PTR("boxd has 0 area", __func__, NULL); if (!boxd) return boxCreate(xl, yt, wnew, hnew); boxSetGeometry(boxd, xl, yt, wnew, hnew); return boxd; } /*! * \brief boxaSetSide() * * \param[in] boxad use NULL to get a new one; same as boxas for in-place * \param[in] boxas * \param[in] side L_SET_LEFT, L_SET_RIGHT, L_SET_TOP, L_SET_BOT * \param[in] val location to set for given side, for each box * \param[in] thresh min abs difference to cause resetting to %val * \return boxad, or NULL on error * *
 * Notes:
 *      (1) Sets the given side of each box.  Use boxad == NULL for a new
 *          boxa, and boxad == boxas for in-place.
 *      (2) Use one of these:
 *               boxad = boxaSetSide(NULL, boxas, ...);   // new
 *               boxaSetSide(boxas, boxas, ...);  // in-place
 * 
*/ BOXA * boxaSetSide(BOXA *boxad, BOXA *boxas, l_int32 side, l_int32 val, l_int32 thresh) { l_int32 n, i; BOX *box; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", __func__, NULL); if (side != L_SET_LEFT && side != L_SET_RIGHT && side != L_SET_TOP && side != L_SET_BOT) return (BOXA *)ERROR_PTR("invalid side", __func__, NULL); if (val < 0) return (BOXA *)ERROR_PTR("val < 0", __func__, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { box = boxaGetBox(boxad, i, L_CLONE); boxSetSide(box, side, val, thresh); boxDestroy(&box); /* the clone */ } return boxad; } /*! * \brief boxSetSide() * * \param[in] boxs * \param[in] side L_SET_LEFT, L_SET_RIGHT, L_SET_TOP, L_SET_BOT * \param[in] val location to set for given side, for each box * \param[in] thresh min abs difference to cause resetting to %val * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place operation.
 *      (2) Use %thresh = 0 to definitely set the side to %val.
 * 
*/ l_ok boxSetSide(BOX *boxs, l_int32 side, l_int32 val, l_int32 thresh) { l_int32 x, y, w, h, diff; if (!boxs) return ERROR_INT("box not defined", __func__, 1); if (side != L_SET_LEFT && side != L_SET_RIGHT && side != L_SET_TOP && side != L_SET_BOT) return ERROR_INT("invalid side", __func__, 1); if (val < 0) return ERROR_INT("val < 0", __func__, 1); boxGetGeometry(boxs, &x, &y, &w, &h); if (side == L_SET_LEFT) { diff = x - val; if (L_ABS(diff) >= thresh) boxSetGeometry(boxs, val, y, w + diff, h); } else if (side == L_SET_RIGHT) { diff = x + w -1 - val; if (L_ABS(diff) >= thresh) boxSetGeometry(boxs, x, y, val - x + 1, h); } else if (side == L_SET_TOP) { diff = y - val; if (L_ABS(diff) >= thresh) boxSetGeometry(boxs, x, val, w, h + diff); } else { /* side == L_SET_BOT */ diff = y + h - 1 - val; if (L_ABS(diff) >= thresh) boxSetGeometry(boxs, x, y, w, val - y + 1); } return 0; } /*! * \brief boxaAdjustWidthToTarget() * * \param[in] boxad use NULL to get a new one; same as boxas for in-place * \param[in] boxas * \param[in] sides L_ADJUST_LEFT, L_ADJUST_RIGHT, L_ADJUST_LEFT_AND_RIGHT * \param[in] target target width if differs by more than thresh * \param[in] thresh min abs difference in width to cause adjustment * \return boxad, or NULL on error * *
 * Notes:
 *      (1) Conditionally adjusts the width of each box, by moving
 *          the indicated edges (left and/or right) if the width differs
 *          by %thresh or more from %target.
 *      (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place.
 *          Use one of these:
 *               boxad = boxaAdjustWidthToTarget(NULL, boxas, ...);   // new
 *               boxaAdjustWidthToTarget(boxas, boxas, ...);  // in-place
 * 
*/ BOXA * boxaAdjustWidthToTarget(BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh) { l_int32 x, y, w, h, n, i, diff; BOX *box; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", __func__, NULL); if (sides != L_ADJUST_LEFT && sides != L_ADJUST_RIGHT && sides != L_ADJUST_LEFT_AND_RIGHT) return (BOXA *)ERROR_PTR("invalid sides", __func__, NULL); if (target < 1) return (BOXA *)ERROR_PTR("target < 1", __func__, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxad, i, L_CLONE)) == NULL) continue; boxGetGeometry(box, &x, &y, &w, &h); diff = w - target; if (sides == L_ADJUST_LEFT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, L_MAX(0, x + diff), y, target, h); } else if (sides == L_ADJUST_RIGHT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, target, h); } else { /* sides == L_ADJUST_LEFT_AND_RIGHT */ if (L_ABS(diff) >= thresh) boxSetGeometry(box, L_MAX(0, x + diff/2), y, target, h); } boxDestroy(&box); } return boxad; } /*! * \brief boxaAdjustHeightToTarget() * * \param[in] boxad use NULL to get a new one * \param[in] boxas * \param[in] sides L_ADJUST_TOP, L_ADJUST_BOT, L_ADJUST_TOP_AND_BOT * \param[in] target target height if differs by more than thresh * \param[in] thresh min abs difference in height to cause adjustment * \return boxad, or NULL on error * *
 * Notes:
 *      (1) Conditionally adjusts the height of each box, by moving
 *          the indicated edges (top and/or bot) if the height differs
 *          by %thresh or more from %target.
 *      (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place.
 *          Use one of these:
 *               boxad = boxaAdjustHeightToTarget(NULL, boxas, ...);   // new
 *               boxaAdjustHeightToTarget(boxas, boxas, ...);  // in-place
 * 
*/ BOXA * boxaAdjustHeightToTarget(BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh) { l_int32 x, y, w, h, n, i, diff; BOX *box; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", __func__, NULL); if (sides != L_ADJUST_TOP && sides != L_ADJUST_BOT && sides != L_ADJUST_TOP_AND_BOT) return (BOXA *)ERROR_PTR("invalid sides", __func__, NULL); if (target < 1) return (BOXA *)ERROR_PTR("target < 1", __func__, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxad, i, L_CLONE)) == NULL) continue; boxGetGeometry(box, &x, &y, &w, &h); diff = h - target; if (sides == L_ADJUST_TOP) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, L_MAX(0, y + diff), w, target); } else if (sides == L_ADJUST_BOT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, w, target); } else { /* sides == L_ADJUST_TOP_AND_BOT */ if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, L_MAX(0, y + diff/2), w, target); } boxDestroy(&box); } return boxad; } /*! * \brief boxEqual() * * \param[in] box1 * \param[in] box2 * \param[out] psame 1 if equal; 0 otherwise * \return 0 if OK, 1 on error */ l_ok boxEqual(BOX *box1, BOX *box2, l_int32 *psame) { if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); if (box1->x == box2->x && box1->y == box2->y && box1->w == box2->w && box1->h == box2->h) *psame = 1; return 0; } /*! * \brief boxaEqual() * * \param[in] boxa1 * \param[in] boxa2 * \param[in] maxdist * \param[out] pnaindex [optional] index array of correspondences * \param[out] psame 1 if equal; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The two boxa are the "same" if they contain the same
 *          boxes and each box is within %maxdist of its counterpart
 *          in their positions within the boxa.  This allows for
 *          small rearrangements.  Use 0 for maxdist if the boxa
 *          must be identical.
 *      (2) This applies only to geometry and ordering; refcounts
 *          are not considered.
 *      (3) %maxdist allows some latitude in the ordering of the boxes.
 *          For the boxa to be the "same", corresponding boxes must
 *          be within %maxdist of each other.  Note that for large
 *          %maxdist, we should use a hash function for efficiency.
 *      (4) naindex[i] gives the position of the box in boxa2 that
 *          corresponds to box i in boxa1.  It is only returned if the
 *          boxa are equal.
 * 
*/ l_ok boxaEqual(BOXA *boxa1, BOXA *boxa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame) { l_int32 i, j, n, jstart, jend, found, samebox; l_int32 *countarray; BOX *box1, *box2; NUMA *na; if (pnaindex) *pnaindex = NULL; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", __func__, 1); n = boxaGetCount(boxa1); if (n != boxaGetCount(boxa2)) return 0; if ((countarray = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for countarray", __func__, 1); na = numaMakeConstant(0.0, n); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa1, i, L_CLONE); jstart = L_MAX(0, i - maxdist); jend = L_MIN(n-1, i + maxdist); found = FALSE; for (j = jstart; j <= jend; j++) { box2 = boxaGetBox(boxa2, j, L_CLONE); boxEqual(box1, box2, &samebox); if (samebox && countarray[j] == 0) { countarray[j] = 1; numaReplaceNumber(na, i, j); found = TRUE; boxDestroy(&box2); break; } boxDestroy(&box2); } boxDestroy(&box1); if (!found) { numaDestroy(&na); LEPT_FREE(countarray); return 0; } } *psame = 1; if (pnaindex) *pnaindex = na; else numaDestroy(&na); LEPT_FREE(countarray); return 0; } /*! * \brief boxSimilar() * * \param[in] box1 * \param[in] box2 * \param[in] leftdiff, rightdiff, topdiff, botdiff * \param[out] psimilar 1 if similar; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The values of leftdiff (etc) are the maximum allowed deviations
 *          between the locations of the left (etc) sides.  If any side
 *          pairs differ by more than this amount, the boxes are not similar.
 * 
*/ l_ok boxSimilar(BOX *box1, BOX *box2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 *psimilar) { l_int32 l1, l2, r1, r2, t1, t2, b1, b2, valid1, valid2; if (!psimilar) return ERROR_INT("&similar not defined", __func__, 1); *psimilar = 0; if (!box1 || !box2) return ERROR_INT("boxes not both defined", __func__, 1); boxIsValid(box1, &valid1); boxIsValid(box2, &valid2); if (!valid1 || !valid2) return ERROR_INT("boxes not both valid", __func__, 1); boxGetSideLocations(box1, &l1, &r1, &t1, &b1); boxGetSideLocations(box2, &l2, &r2, &t2, &b2); if (L_ABS(l1 - l2) > leftdiff) return 0; if (L_ABS(r1 - r2) > rightdiff) return 0; if (L_ABS(t1 - t2) > topdiff) return 0; if (L_ABS(b1 - b2) > botdiff) return 0; *psimilar = 1; return 0; } /*! * \brief boxaSimilar() * * \param[in] boxa1 * \param[in] boxa2 * \param[in] leftdiff, rightdiff, topdiff, botdiff * \param[in] debug output details of non-similar boxes * \param[out] psimilar 1 if similar; 0 otherwise * \param[out] pnasim [optional] na containing 1 if similar; else 0 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See boxSimilar() for parameter usage.
 *      (2) Corresponding boxes are taken in order in the two boxa.
 *      (3) %nasim is an indicator array with a (0/1) for each box pair.
 *      (4) With %nasim or debug == 1, boxes continue to be tested
 *          after failure.
 * 
*/ l_ok boxaSimilar(BOXA *boxa1, BOXA *boxa2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 debug, l_int32 *psimilar, NUMA **pnasim) { l_int32 i, n1, n2, match, mismatch; BOX *box1, *box2; if (psimilar) *psimilar = 0; if (pnasim) *pnasim = NULL; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", __func__, 1); if (!psimilar) return ERROR_INT("&similar not defined", __func__, 1); n1 = boxaGetCount(boxa1); n2 = boxaGetCount(boxa2); if (n1 != n2) { L_ERROR("boxa counts differ: %d vs %d\n", __func__, n1, n2); return 1; } if (pnasim) *pnasim = numaCreate(n1); mismatch = FALSE; for (i = 0; i < n1; i++) { box1 = boxaGetBox(boxa1, i, L_CLONE); box2 = boxaGetBox(boxa2, i, L_CLONE); boxSimilar(box1, box2, leftdiff, rightdiff, topdiff, botdiff, &match); boxDestroy(&box1); boxDestroy(&box2); if (pnasim) numaAddNumber(*pnasim, match); if (!match) { mismatch = TRUE; if (!debug && pnasim == NULL) return 0; else if (debug) L_INFO("box %d not similar\n", __func__, i); } } if (!mismatch) *psimilar = 1; return 0; } /*----------------------------------------------------------------------* * Boxa combine and split * *----------------------------------------------------------------------*/ /*! * \brief boxaJoin() * * \param[in] boxad dest boxa; add to this one * \param[in] boxas source boxa; add from this one * \param[in] istart starting index in boxas * \param[in] iend ending index in boxas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This appends a clone of each indicated box in boxas to boxad
 *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (3) iend < 0 means 'read to the end'
 *      (4) if boxas == NULL or has no boxes, this is a no-op.
 * 
*/ l_ok boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend) { l_int32 n, i; BOX *box; if (!boxad) return ERROR_INT("boxad not defined", __func__, 1); if (!boxas || ((n = boxaGetCount(boxas)) == 0)) return 0; if (istart < 0) istart = 0; if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { box = boxaGetBox(boxas, i, L_CLONE); boxaAddBox(boxad, box, L_INSERT); } return 0; } /*! * \brief boxaaJoin() * * \param[in] baad dest boxaa; add to this one * \param[in] baas source boxaa; add from this one * \param[in] istart starting index in baas * \param[in] iend ending index in baas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This appends a clone of each indicated boxa in baas to baad
 *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (3) iend < 0 means 'read to the end'
 *      (4) if baas == NULL, this is a no-op.
 * 
*/ l_ok boxaaJoin(BOXAA *baad, BOXAA *baas, l_int32 istart, l_int32 iend) { l_int32 n, i; BOXA *boxa; if (!baad) return ERROR_INT("baad not defined", __func__, 1); if (!baas) return 0; if (istart < 0) istart = 0; n = boxaaGetCount(baas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { boxa = boxaaGetBoxa(baas, i, L_CLONE); boxaaAddBoxa(baad, boxa, L_INSERT); } return 0; } /*! * \brief boxaSplitEvenOdd() * * \param[in] boxa * \param[in] fillflag 1 to put invalid boxes in place; 0 to omit * \param[out] pboxae, pboxao save even and odd boxes in their separate * boxa, setting the other type to invalid boxes. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %fillflag == 1, boxae has copies of the even boxes
 *          in their original location, and nvalid boxes are placed
 *          in the odd array locations.  And v.v.
 *      (2) If %fillflag == 0, boxae has only copies of the even boxes.
 * 
*/ l_ok boxaSplitEvenOdd(BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao) { l_int32 i, n; BOX *box, *box1; if (pboxae) *pboxae = NULL; if (pboxao) *pboxao = NULL; if (!pboxae || !pboxao) return ERROR_INT("&boxae and &boxao not both defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); *pboxae = boxaCreate(n); *pboxao = boxaCreate(n); if (fillflag == 0) { /* don't fill with invalid boxes; end up with half-size boxa */ for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); if ((i & 1) == 0) boxaAddBox(*pboxae, box, L_INSERT); else boxaAddBox(*pboxao, box, L_INSERT); } } else { for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); box1 = boxCreate(0, 0, 0, 0); /* empty placeholder */ if ((i & 1) == 0) { boxaAddBox(*pboxae, box, L_INSERT); boxaAddBox(*pboxao, box1, L_INSERT); } else { boxaAddBox(*pboxae, box1, L_INSERT); boxaAddBox(*pboxao, box, L_INSERT); } } } return 0; } /*! * \brief boxaMergeEvenOdd() * * \param[in] boxae boxes to go in even positions in merged boxa * \param[in] boxao boxes to go in odd positions in merged boxa * \param[in] fillflag 1 if there are invalid boxes in placeholders * \return boxad merged, or NULL on error * *
 * Notes:
 *      (1) This is essentially the inverse of boxaSplitEvenOdd().
 *          Typically, boxae and boxao were generated by boxaSplitEvenOdd(),
 *          and the value of %fillflag needs to be the same in both calls.
 *      (2) If %fillflag == 1, both boxae and boxao are of the same size;
 *          otherwise boxae may have one more box than boxao.
 * 
*/ BOXA * boxaMergeEvenOdd(BOXA *boxae, BOXA *boxao, l_int32 fillflag) { l_int32 i, n, ne, no; BOX *box; BOXA *boxad; if (!boxae || !boxao) return (BOXA *)ERROR_PTR("boxae and boxao not defined", __func__, NULL); ne = boxaGetCount(boxae); no = boxaGetCount(boxao); if (ne < no || ne > no + 1) return (BOXA *)ERROR_PTR("boxa sizes invalid", __func__, NULL); boxad = boxaCreate(ne); if (fillflag == 0) { /* both are approx. half-sized; all valid boxes */ n = ne + no; for (i = 0; i < n; i++) { if ((i & 1) == 0) box = boxaGetBox(boxae, i / 2, L_COPY); else box = boxaGetBox(boxao, i / 2, L_COPY); boxaAddBox(boxad, box, L_INSERT); } } else { /* both are full size and have invalid placeholders */ for (i = 0; i < ne; i++) { if ((i & 1) == 0) box = boxaGetBox(boxae, i, L_COPY); else box = boxaGetBox(boxao, i, L_COPY); boxaAddBox(boxad, box, L_INSERT); } } return boxad; } leptonica-1.86.0/src/boxfunc2.c000066400000000000000000001773471506303110300162600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxfunc2.c *
 *
 *      Boxa/Box transform (shift, scale) and orthogonal rotation
 *           BOXA            *boxaTransform()
 *           BOX             *boxTransform()
 *           BOXA            *boxaTransformOrdered()
 *           BOX             *boxTransformOrdered()
 *           BOXA            *boxaRotateOrth()
 *           BOX             *boxRotateOrth()
 *           BOXA            *boxaShiftWithPta()
 *
 *      Boxa sort
 *           BOXA            *boxaSort()
 *           BOXA            *boxaBinSort()
 *           BOXA            *boxaSortByIndex()
 *           BOXAA           *boxaSort2d()
 *           BOXAA           *boxaSort2dByIndex()
 *
 *      Boxa statistics
 *           l_int32          boxaGetRankVals()
 *           l_int32          boxaGetMedianVals()
 *           l_int32          boxaGetAverageSize()
 *
 *      Boxa array extraction
 *           l_int32          boxaExtractAsNuma()
 *           l_int32          boxaExtractAsPta()
 *           PTA             *boxaExtractCorners()
 *
 *      Other Boxaa functions
 *           l_int32          boxaaGetExtent()
 *           BOXA            *boxaaFlattenToBoxa()
 *           BOXA            *boxaaFlattenAligned()
 *           BOXAA           *boxaEncapsulateAligned()
 *           BOXAA           *boxaaTranspose()
 *           l_int32          boxaaAlignBox()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* For more than this number of c.c. in a binarized image of * semi-perimeter (w + h) about 5000 or less, the O(n) binsort * is faster than the O(nlogn) shellsort. */ static const l_int32 MinCompsForBinSort = 200; /*---------------------------------------------------------------------* * Boxa/Box transform (shift, scale) and orthogonal rotation * *---------------------------------------------------------------------*/ /*! * \brief boxaTransform() * * \param[in] boxas * \param[in] shiftx * \param[in] shifty * \param[in] scalex * \param[in] scaley * \return boxad, or NULL on error * *
 * Notes:
 *      (1) This is a very simple function that first shifts, then scales.
 *      (2) The UL corner coordinates of all boxes in the output %boxad
 *      (3) For the boxes in the output %boxad, the UL corner coordinates
 *          must be non-negative, and the width and height of valid
 *          boxes must be at least 1.
 * 
*/ BOXA * boxaTransform(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", __func__, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { boxaDestroy(&boxad); return (BOXA *)ERROR_PTR("boxs not found", __func__, NULL); } boxd = boxTransform(boxs, shiftx, shifty, scalex, scaley); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * \brief boxTransform() * * \param[in] box * \param[in] shiftx * \param[in] shifty * \param[in] scalex * \param[in] scaley * \return boxd, or NULL on error * *
 * Notes:
 *      (1) This is a very simple function that first shifts, then scales.
 *      (2) If the box is invalid, a new invalid box is returned.
 *      (3) The UL corner coordinates must be non-negative, and the
 *          width and height of valid boxes must be at least 1.
 * 
*/ BOX * boxTransform(BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); if (box->w <= 0 || box->h <= 0) return boxCreate(0, 0, 0, 0); else return boxCreate((l_int32)(L_MAX(0, scalex * (box->x + shiftx) + 0.5)), (l_int32)(L_MAX(0, scaley * (box->y + shifty) + 0.5)), (l_int32)(L_MAX(1.0, scalex * box->w + 0.5)), (l_int32)(L_MAX(1.0, scaley * box->h + 0.5))); } /*! * \brief boxaTransformOrdered() * * \param[in] boxas * \param[in] shiftx * \param[in] shifty * \param[in] scalex * \param[in] scaley * \param[in] xcen, ycen center of rotation * \param[in] angle in radians; clockwise is positive * \param[in] order one of 6 combinations: L_TR_SC_RO, ... * \return boxd, or NULL on error * *
 *          shift, scaling and rotation, and the order of the
 *          transforms is specified.
 *      (2) Although these operations appear to be on an infinite
 *          2D plane, in practice the region of interest is clipped
 *          to a finite image.  The center of rotation is usually taken
 *          with respect to the image (either the UL corner or the
 *          center).  A translation can have two very different effects:
 *            (a) Moves the boxes across the fixed image region.
 *            (b) Moves the image origin, causing a change in the image
 *                region and an opposite effective translation of the boxes.
 *          This function should only be used for (a), where the image
 *          region is fixed on translation.  If the image region is
 *          changed by the translation, use instead the functions
 *          in affinecompose.c, where the image region and rotation
 *          center can be computed from the actual clipping due to
 *          translation of the image origin.
 *      (3) See boxTransformOrdered() for usage and implementation details.
 * 
*/ BOXA * boxaTransformOrdered(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", __func__, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { boxaDestroy(&boxad); return (BOXA *)ERROR_PTR("boxs not found", __func__, NULL); } boxd = boxTransformOrdered(boxs, shiftx, shifty, scalex, scaley, xcen, ycen, angle, order); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * \brief boxTransformOrdered() * * \param[in] boxs * \param[in] shiftx * \param[in] shifty * \param[in] scalex * \param[in] scaley * \param[in] xcen, ycen center of rotation * \param[in] angle in radians; clockwise is positive * \param[in] order one of 6 combinations: L_TR_SC_RO, ... * \return boxd, or NULL on error * *
 * Notes:
 *      (1) This allows a sequence of linear transforms, composed of
 *          shift, scaling and rotation, where the order of the
 *          transforms is specified.
 *      (2) The rotation is taken about a point specified by (xcen, ycen).
 *          Let the components of the vector from the center of rotation
 *          to the box center be (xdif, ydif):
 *            xdif = (bx + 0.5 * bw) - xcen
 *            ydif = (by + 0.5 * bh) - ycen
 *          Then the box center after rotation has new components:
 *            bxcen = xcen + xdif * cosa + ydif * sina
 *            bycen = ycen + ydif * cosa - xdif * sina
 *          where cosa and sina are the cos and sin of the angle,
 *          and the enclosing box for the rotated box has size:
 *            rw = |bw * cosa| + |bh * sina|
 *            rh = |bh * cosa| + |bw * sina|
 *          where bw and bh are the unrotated width and height.
 *          Then the box UL corner (rx, ry) is
 *            rx = bxcen - 0.5 * rw
 *            ry = bycen - 0.5 * rh
 *      (3) The center of rotation specified by args %xcen and %ycen
 *          is the point BEFORE any translation or scaling.  If the
 *          rotation is not the first operation, this function finds
 *          the actual center at the time of rotation.  It does this
 *          by making the following assumptions:
 *             (1) Any scaling is with respect to the UL corner, so
 *                 that the center location scales accordingly.
 *             (2) A translation does not affect the center of
 *                 the image; it just moves the boxes.
 *          We always use assumption (1).  However, assumption (2)
 *          will be incorrect if the apparent translation is due
 *          to a clipping operation that, in effect, moves the
 *          origin of the image.  In that case, you should NOT use
 *          these simple functions.  Instead, use the functions
 *          in affinecompose.c, where the rotation center can be
 *          computed from the actual clipping due to translation
 *          of the image origin.
 * 
*/ BOX * boxTransformOrdered(BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order) { l_int32 bx, by, bw, bh, tx, ty, tw, th; l_int32 xcent, ycent; /* transformed center of rotation due to scaling */ l_float32 sina, cosa, xdif, ydif, rx, ry, rw, rh; BOX *boxd; if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", __func__, NULL); if (order != L_TR_SC_RO && order != L_SC_RO_TR && order != L_RO_TR_SC && order != L_TR_RO_SC && order != L_RO_SC_TR && order != L_SC_TR_RO) return (BOX *)ERROR_PTR("order invalid", __func__, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); if (bw <= 0 || bh <= 0) /* invalid */ return boxCreate(0, 0, 0, 0); if (angle != 0.0) { sina = sin(angle); cosa = cos(angle); } if (order == L_TR_SC_RO) { tx = (l_int32)(scalex * (bx + shiftx) + 0.5); ty = (l_int32)(scaley * (by + shifty) + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { boxd = boxCreate(tx, ty, tw, th); } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, (l_int32)rh); } } else if (order == L_SC_TR_RO) { tx = (l_int32)(scalex * bx + shiftx + 0.5); ty = (l_int32)(scaley * by + shifty + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { boxd = boxCreate(tx, ty, tw, th); } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, (l_int32)rh); } } else if (order == L_RO_TR_SC) { if (angle == 0.0) { rx = bx; ry = by; rw = bw; rh = bh; } else { xdif = bx + 0.5 * bw - xcen; ydif = by + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * (rx + shiftx) + 0.5); ty = (l_int32)(scaley * (ry + shifty) + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else if (order == L_RO_SC_TR) { if (angle == 0.0) { rx = bx; ry = by; rw = bw; rh = bh; } else { xdif = bx + 0.5 * bw - xcen; ydif = by + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * rx + shiftx + 0.5); ty = (l_int32)(scaley * ry + shifty + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else if (order == L_TR_RO_SC) { tx = bx + shiftx; ty = by + shifty; if (angle == 0.0) { rx = tx; ry = ty; rw = bw; rh = bh; } else { xdif = tx + 0.5 * bw - xcen; ydif = ty + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * rx + 0.5); ty = (l_int32)(scaley * ry + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else { /* order == L_SC_RO_TR) */ tx = (l_int32)(scalex * bx + 0.5); ty = (l_int32)(scaley * by + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { rx = tx; ry = ty; rw = tw; rh = th; } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(rx + shiftx + 0.5); ty = (l_int32)(ry + shifty + 0.5); tw = (l_int32)(rw + 0.5); th = (l_int32)(rh + 0.5); boxd = boxCreate(tx, ty, tw, th); } return boxd; } /*! * \brief boxaRotateOrth() * * \param[in] boxas * \param[in] w, h of image in which the boxa is embedded * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; * all rotations are clockwise * \return boxad, or NULL on error * *
 * Notes:
 *      (1) See boxRotateOrth() for details.
 * 
*/ BOXA * boxaRotateOrth(BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (rotation < 0 || rotation > 3) return (BOXA *)ERROR_PTR("rotation not in {0,1,2,3}", __func__, NULL); if (rotation == 0) return boxaCopy(boxas, L_COPY); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", __func__, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { boxaDestroy(&boxad); return (BOXA *)ERROR_PTR("boxs not found", __func__, NULL); } boxd = boxRotateOrth(boxs, w, h, rotation); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * \brief boxRotateOrth() * * \param[in] box * \param[in] w, h of image in which the box is embedded * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; * all rotations are clockwise * \return boxd, or NULL on error * *
 * Notes:
 *      (1) Rotate the image with the embedded box by the specified amount.
 *      (2) After rotation, the rotated box is always measured with
 *          respect to the UL corner of the image.
 * 
*/ BOX * boxRotateOrth(BOX *box, l_int32 w, l_int32 h, l_int32 rotation) { l_int32 bx, by, bw, bh, xdist, ydist; if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); if (rotation < 0 || rotation > 3) return (BOX *)ERROR_PTR("rotation not in {0,1,2,3}", __func__, NULL); if (rotation == 0) return boxCopy(box); boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw <= 0 || bh <= 0) /* invalid */ return boxCreate(0, 0, 0, 0); ydist = h - by - bh; /* below box */ xdist = w - bx - bw; /* to right of box */ if (rotation == 1) /* 90 deg cw */ return boxCreate(ydist, bx, bh, bw); else if (rotation == 2) /* 180 deg cw */ return boxCreate(xdist, ydist, bw, bh); else /* rotation == 3, 270 deg cw */ return boxCreate(by, xdist, bh, bw); } /*! * \brief boxaShiftWithPta() * * \param[in] boxas * \param[in] pta aligned with the boxes; determines shift amount * \param[in] dir +1 to shift by the values in pta; -1 to shift * by the negative of the values in the pta. * \return boxad, or NULL on error * *
 * Notes:
 *      (1) In use, %pta may come from the UL corners of of a boxa, each
 *          of whose boxes contains the corresponding box of %boxas
 *          within it.  The output %boxad is then a boxa in the (global)
 *          coordinates of the containing boxa.  So the input %pta
 *          could come from boxaExtractCorners().
 *      (2) The operations with %dir == 1 and %dir == -1 are inverses if
 *          called in order (1, -1).  Starting with an input boxa and
 *          calling twice with these values of %dir results in a boxa
 *          identical to the input.  However, because box parameters can
 *          never be negative, calling in the order (-1, 1) may result
 *          in clipping at the left side and the top.
 * 
*/ BOXA * boxaShiftWithPta(BOXA *boxas, PTA *pta, l_int32 dir) { l_int32 i, n, x, y, full; BOX *box1, *box2; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); boxaIsFull(boxas, &full); if (!full) return (BOXA *)ERROR_PTR("boxas not full", __func__, NULL); if (!pta) return (BOXA *)ERROR_PTR("pta not defined", __func__, NULL); if (dir != 1 && dir != -1) return (BOXA *)ERROR_PTR("invalid dir", __func__, NULL); n = boxaGetCount(boxas); if (n != ptaGetCount(pta)) return (BOXA *)ERROR_PTR("boxas and pta not same size", __func__, NULL); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", __func__, NULL); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxas, i, L_COPY); ptaGetIPt(pta, i, &x, &y); box2 = boxTransform(box1, dir * x, dir * y, 1.0, 1.0); boxaAddBox(boxad, box2, L_INSERT); boxDestroy(&box1); } return boxad; } /*---------------------------------------------------------------------* * Boxa sort * *---------------------------------------------------------------------*/ /*! * \brief boxaSort() * * \param[in] boxas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, * L_SORT_BY_RIGHT, L_SORT_BY_BOT, * L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA, * L_SORT_BY_ASPECT_RATIO * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex [optional] index of sorted order into * original array * \return boxad sorted version of boxas, or NULL on error * *
 * Notes:
 *      (1) An empty boxa returns a copy, with a warning.
 * 
*/ BOXA * boxaSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n, x, y, w, h, size; BOXA *boxad; NUMA *na, *naindex; if (pnaindex) *pnaindex = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if ((n = boxaGetCount(boxas)) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_RIGHT && sorttype != L_SORT_BY_BOT && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_MIN_DIMENSION && sorttype != L_SORT_BY_MAX_DIMENSION && sorttype != L_SORT_BY_PERIMETER && sorttype != L_SORT_BY_AREA && sorttype != L_SORT_BY_ASPECT_RATIO) return (BOXA *)ERROR_PTR("invalid sort type", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (BOXA *)ERROR_PTR("invalid sort order", __func__, NULL); /* Use O(n) binsort if possible */ if (n > MinCompsForBinSort && ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || (sorttype == L_SORT_BY_PERIMETER))) return boxaBinSort(boxas, sorttype, sortorder, pnaindex); /* Build up numa of specific data */ if ((na = numaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_RIGHT: numaAddNumber(na, x + w - 1); break; case L_SORT_BY_BOT: numaAddNumber(na, y + h - 1); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_MIN_DIMENSION: size = L_MIN(w, h); numaAddNumber(na, size); break; case L_SORT_BY_MAX_DIMENSION: size = L_MAX(w, h); numaAddNumber(na, size); break; case L_SORT_BY_PERIMETER: size = w + h; numaAddNumber(na, size); break; case L_SORT_BY_AREA: size = w * h; numaAddNumber(na, size); break; case L_SORT_BY_ASPECT_RATIO: numaAddNumber(na, (l_float32)w / (l_float32)h); break; default: L_WARNING("invalid sort type\n", __func__); } } /* Get the sort index for data array */ naindex = numaGetSortIndex(na, sortorder); numaDestroy(&na); if (!naindex) return (BOXA *)ERROR_PTR("naindex not made", __func__, NULL); /* Build up sorted boxa using sort index */ boxad = boxaSortByIndex(boxas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return boxad; } /*! * \brief boxaBinSort() * * \param[in] boxas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex [optional] index of sorted order into * original array * \return boxad sorted version of boxas, or NULL on error * *
 * Notes:
 *      (1) For a large number of boxes (say, greater than 1000), this
 *          O(n) binsort is much faster than the O(nlogn) shellsort.
 *          For 5000 components, this is over 20x faster than boxaSort().
 *      (2) Consequently, boxaSort() calls this function if it will
 *          likely go much faster.
 * 
*/ BOXA * boxaBinSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n, x, y, w, h; BOXA *boxad; NUMA *na, *naindex; if (pnaindex) *pnaindex = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if ((n = boxaGetCount(boxas)) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_PERIMETER) return (BOXA *)ERROR_PTR("invalid sort type", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (BOXA *)ERROR_PTR("invalid sort order", __func__, NULL); /* Generate Numa of appropriate box dimensions */ if ((na = numaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; default: L_WARNING("invalid sort type\n", __func__); } } /* Get the sort index for data array */ naindex = numaGetBinSortIndex(na, sortorder); numaDestroy(&na); if (!naindex) return (BOXA *)ERROR_PTR("naindex not made", __func__, NULL); /* Build up sorted boxa using the sort index */ boxad = boxaSortByIndex(boxas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return boxad; } /*! * \brief boxaSortByIndex() * * \param[in] boxas * \param[in] naindex na that maps from the new boxa to the input boxa * \return boxad sorted, or NULL on error */ BOXA * boxaSortByIndex(BOXA *boxas, NUMA *naindex) { l_int32 i, n, index; BOX *box; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if ((n = boxaGetCount(boxas)) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (!naindex) return (BOXA *)ERROR_PTR("naindex not defined", __func__, NULL); boxad = boxaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); box = boxaGetBox(boxas, index, L_COPY); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*! * \brief boxaSort2d() * * \param[in] boxas * \param[out] pnaad [optional] numaa with sorted indices * whose values are the indices of the input array * \param[in] delta1 min separation that permits aggregation of a box * onto a boxa of horizontally-aligned boxes; pass 1 * \param[in] delta2 min separation that permits aggregation of a box * onto a boxa of horizontally-aligned boxes; pass 2 * \param[in] minh1 components less than this height either join an * existing boxa or are set aside for pass 2 * \return baa 2d sorted version of boxa, or NULL on error * *
 * Notes:
 *      (1) The final result is a sort where the 'fast scan' direction is
 *          left to right, and the 'slow scan' direction is from top
 *          to bottom.  Each boxa in the baa represents a sorted set
 *          of boxes from left to right.
 *      (2) Three passes are used to aggregate the boxas, which can correspond
 *          to characters or words in a line of text.  In pass 1, only
 *          taller components, which correspond to xheight or larger,
 *          are permitted to start a new boxa.  In pass 2, the remaining
 *          vertically-challenged components are allowed to join an
 *          existing boxa or start a new one.  In pass 3, boxa whose extent
 *          is overlapping are joined.  After that, the boxes in each
 *          boxa are sorted horizontally, and finally the boxa are
 *          sorted vertically.
 *      (3) If %delta1 > 0, the first pass allows aggregation when
 *          boxes in the same boxa do not overlap vertically.  In fact,
 *          %delta1 is the max distance by which they can miss and still
 *          be aggregated.  If %delta1 < 0, the box must have vertical
 *          overlap of at least abs(%delta1) with the boxa before it
 *          can be merged.  Similar for delta2 on the second pass.
 *      (4) On the first pass, any component of height less than minh1
 *          cannot start a new boxa; it's put aside for later insertion.
 *      (5) On the second pass, any small component that doesn't align
 *          with an existing boxa can start a new one.
 *      (6) This can be used to identify lines of text from
 *          character or word bounding boxes.
 *      (7) Typical values for the input parameters on 300 ppi text are:
 *                 delta1 ~ 0
 *                 delta2 ~ 0
 *                 minh1 ~ 5
 * 
*/ BOXAA * boxaSort2d(BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1) { l_int32 i, index, h, nt, ne, n, m, ival; BOX *box; BOXA *boxa, *boxae, *boxan, *boxa1, *boxa2, *boxa3, *boxav, *boxavs; BOXAA *baa, *baa1, *baad; NUMA *naindex, *nae, *nan, *nah, *nav, *na1, *na2, *nad, *namap; NUMAA *naa, *naa1, *naad; if (pnaad) *pnaad = NULL; if (!boxas) return (BOXAA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxaGetCount(boxas) == 0) return (BOXAA *)ERROR_PTR("boxas is empty", __func__, NULL); /* Sort from left to right */ if ((boxa = boxaSort(boxas, L_SORT_BY_X, L_SORT_INCREASING, &naindex)) == NULL) return (BOXAA *)ERROR_PTR("boxa not made", __func__, NULL); /* First pass: assign taller boxes to boxa by row */ nt = boxaGetCount(boxa); baa = boxaaCreate(0); naa = numaaCreate(0); boxae = boxaCreate(0); /* save small height boxes here */ nae = numaCreate(0); /* keep track of small height boxes */ for (i = 0; i < nt; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, NULL, NULL, NULL, &h); if (h < minh1) { /* save for 2nd pass */ boxaAddBox(boxae, box, L_INSERT); numaAddNumber(nae, i); } else { n = boxaaGetCount(baa); boxaaAlignBox(baa, box, delta1, &index); if (index < n) { /* append to an existing boxa */ boxaaAddBox(baa, index, box, L_INSERT); } else { /* doesn't align, need new boxa */ boxan = boxaCreate(0); boxaAddBox(boxan, box, L_INSERT); boxaaAddBoxa(baa, boxan, L_INSERT); nan = numaCreate(0); numaaAddNuma(naa, nan, L_INSERT); } numaGetIValue(naindex, i, &ival); numaaAddNumber(naa, index, ival); } } boxaDestroy(&boxa); numaDestroy(&naindex); /* Second pass: feed in small height boxes */ ne = boxaGetCount(boxae); for (i = 0; i < ne; i++) { box = boxaGetBox(boxae, i, L_CLONE); n = boxaaGetCount(baa); boxaaAlignBox(baa, box, delta2, &index); if (index < n) { /* append to an existing boxa */ boxaaAddBox(baa, index, box, L_INSERT); } else { /* doesn't align, need new boxa */ boxan = boxaCreate(0); boxaAddBox(boxan, box, L_INSERT); boxaaAddBoxa(baa, boxan, L_INSERT); nan = numaCreate(0); numaaAddNuma(naa, nan, L_INSERT); } numaGetIValue(nae, i, &ival); /* location in original boxas */ numaaAddNumber(naa, index, ival); } /* Third pass: merge some boxa whose extent is overlapping. * Think of these boxa as text lines, where the bounding boxes * of the text lines can overlap, but likely won't have * a huge overlap. * First do a greedy find of pairs of overlapping boxa, where * the two boxa overlap by at least 50% of the smaller, and * the smaller is not more than half the area of the larger. * For such pairs, call the larger one the primary boxa. The * boxes in the smaller one are appended to those in the primary * in pass 3a, and the primaries are extracted in pass 3b. * In this way, all boxes in the original baa are saved. */ n = boxaaGetCount(baa); boxaaGetExtent(baa, NULL, NULL, NULL, &boxa3); boxa1 = boxaHandleOverlaps(boxa3, L_REMOVE_SMALL, 1000, 0.5, 0.5, &namap); boxaDestroy(&boxa1); boxaDestroy(&boxa3); for (i = 0; i < n; i++) { /* Pass 3a: join selected copies of boxa */ numaGetIValue(namap, i, &ival); if (ival >= 0) { /* join current to primary boxa[ival] */ boxa1 = boxaaGetBoxa(baa, i, L_COPY); boxa2 = boxaaGetBoxa(baa, ival, L_CLONE); boxaJoin(boxa2, boxa1, 0, -1); boxaDestroy(&boxa2); boxaDestroy(&boxa1); na1 = numaaGetNuma(naa, i, L_COPY); na2 = numaaGetNuma(naa, ival, L_CLONE); numaJoin(na2, na1, 0, -1); numaDestroy(&na1); numaDestroy(&na2); } } baa1 = boxaaCreate(n); naa1 = numaaCreate(n); for (i = 0; i < n; i++) { /* Pass 3b: save primary boxa */ numaGetIValue(namap, i, &ival); if (ival == -1) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxaaAddBoxa(baa1, boxa1, L_INSERT); na1 = numaaGetNuma(naa, i, L_CLONE); numaaAddNuma(naa1, na1, L_INSERT); } } numaDestroy(&namap); boxaaDestroy(&baa); baa = baa1; numaaDestroy(&naa); naa = naa1; /* Sort the boxes in each boxa horizontally */ m = boxaaGetCount(baa); for (i = 0; i < m; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxa2 = boxaSort(boxa1, L_SORT_BY_X, L_SORT_INCREASING, &nah); boxaaReplaceBoxa(baa, i, boxa2); na1 = numaaGetNuma(naa, i, L_CLONE); na2 = numaSortByIndex(na1, nah); numaaReplaceNuma(naa, i, na2); boxaDestroy(&boxa1); numaDestroy(&na1); numaDestroy(&nah); } /* Sort the boxa vertically within boxaa, using the first box * in each boxa. */ m = boxaaGetCount(baa); boxav = boxaCreate(m); /* holds first box in each boxa in baa */ naad = numaaCreate(m); if (pnaad) *pnaad = naad; baad = boxaaCreate(m); for (i = 0; i < m; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); box = boxaGetBox(boxa1, 0, L_CLONE); boxaAddBox(boxav, box, L_INSERT); boxaDestroy(&boxa1); } boxavs = boxaSort(boxav, L_SORT_BY_Y, L_SORT_INCREASING, &nav); for (i = 0; i < m; i++) { numaGetIValue(nav, i, &index); boxa = boxaaGetBoxa(baa, index, L_CLONE); boxaaAddBoxa(baad, boxa, L_INSERT); nad = numaaGetNuma(naa, index, L_CLONE); numaaAddNuma(naad, nad, L_INSERT); } /* lept_stderr("box count = %d, numaa count = %d\n", nt, numaaGetNumberCount(naad)); */ boxaaDestroy(&baa); boxaDestroy(&boxav); boxaDestroy(&boxavs); boxaDestroy(&boxae); numaDestroy(&nav); numaDestroy(&nae); numaaDestroy(&naa); if (!pnaad) numaaDestroy(&naad); return baad; } /*! * \brief boxaSort2dByIndex() * * \param[in] boxas * \param[in] naa numaa that maps from the new baa to the input boxa * \return baa sorted boxaa, or NULL on error */ BOXAA * boxaSort2dByIndex(BOXA *boxas, NUMAA *naa) { l_int32 ntot, boxtot, i, j, n, nn, index; BOX *box; BOXA *boxa; BOXAA *baa; NUMA *na; if (!boxas) return (BOXAA *)ERROR_PTR("boxas not defined", __func__, NULL); if ((boxtot = boxaGetCount(boxas)) == 0) return (BOXAA *)ERROR_PTR("boxas is empty", __func__, NULL); if (!naa) return (BOXAA *)ERROR_PTR("naindex not defined", __func__, NULL); /* Check counts */ ntot = numaaGetNumberCount(naa); if (ntot != boxtot) return (BOXAA *)ERROR_PTR("element count mismatch", __func__, NULL); n = numaaGetCount(naa); baa = boxaaCreate(n); for (i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); nn = numaGetCount(na); boxa = boxaCreate(nn); for (j = 0; j < nn; j++) { numaGetIValue(na, i, &index); box = boxaGetBox(boxas, index, L_COPY); boxaAddBox(boxa, box, L_INSERT); } boxaaAddBoxa(baa, boxa, L_INSERT); numaDestroy(&na); } return baa; } /*---------------------------------------------------------------------* * Boxa array extraction * *---------------------------------------------------------------------*/ /*! * \brief boxaExtractAsNuma() * * \param[in] boxa * \param[out] pnal [optional] array of left locations * \param[out] pnat [optional] array of top locations * \param[out] pnar [optional] array of right locations * \param[out] pnab [optional] array of bottom locations * \param[out] pnaw [optional] array of widths * \param[out] pnah [optional] array of heights * \param[in] keepinvalid 1 to keep invalid boxes; 0 to remove them * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If you are counting or sorting values, such as determining
 *          rank order, you must remove invalid boxes.
 *      (2) If you are parametrizing the values, or doing an evaluation
 *          where the position in the boxa sequence is important, you
 *          must replace the invalid boxes with valid ones before
 *          doing the extraction. This is easily done with boxaFillSequence().
 * 
*/ l_ok boxaExtractAsNuma(BOXA *boxa, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid) { l_int32 i, n, left, top, right, bot, w, h; if (!pnal && !pnat && !pnar && !pnab && !pnaw && !pnah) return ERROR_INT("no output requested", __func__, 1); if (pnal) *pnal = NULL; if (pnat) *pnat = NULL; if (pnar) *pnar = NULL; if (pnab) *pnab = NULL; if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!keepinvalid && boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes", __func__, 1); n = boxaGetCount(boxa); if (pnal) *pnal = numaCreate(n); if (pnat) *pnat = numaCreate(n); if (pnar) *pnar = numaCreate(n); if (pnab) *pnab = numaCreate(n); if (pnaw) *pnaw = numaCreate(n); if (pnah) *pnah = numaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); if (!keepinvalid && (w <= 0 || h <= 0)) continue; right = left + w - 1; bot = top + h - 1; if (pnal) numaAddNumber(*pnal, left); if (pnat) numaAddNumber(*pnat, top); if (pnar) numaAddNumber(*pnar, right); if (pnab) numaAddNumber(*pnab, bot); if (pnaw) numaAddNumber(*pnaw, w); if (pnah) numaAddNumber(*pnah, h); } return 0; } /*! * \brief boxaExtractAsPta() * * \param[in] boxa * \param[out] pptal [optional] array of left locations vs. index * \param[out] pptat [optional] array of top locations vs. index * \param[out] pptar [optional] array of right locations vs. index * \param[out] pptab [optional] array of bottom locations vs. index * \param[out] pptaw [optional] array of widths vs. index * \param[out] pptah [optional] array of heights vs. index * \param[in] keepinvalid 1 to keep invalid boxes; 0 to remove them * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For most applications, such as counting, sorting, fitting
 *          to some parametrized form, plotting or filtering in general,
 *          you should remove the invalid boxes.  Each pta saves the
 *          box index in the x array, so replacing invalid boxes by
 *          filling with boxaFillSequence(), which is required for
 *          boxaExtractAsNuma(), is not necessary.
 *      (2) If invalid boxes are retained, each one will result in
 *          entries (typically 0) in all selected output pta.
 *      (3) Other boxa --> pta functions are:
 *          * boxaExtractCorners(): extracts any of the four corners as a pta.
 *          * boxaConvertToPta(): extracts sufficient number of corners
 *            to allow reconstruction of the original boxa from the pta.
 * 
*/ l_ok boxaExtractAsPta(BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, PTA **pptaw, PTA **pptah, l_int32 keepinvalid) { l_int32 i, n, left, top, right, bot, w, h; if (!pptal && !pptar && !pptat && !pptab && !pptaw && !pptah) return ERROR_INT("no output requested", __func__, 1); if (pptal) *pptal = NULL; if (pptat) *pptat = NULL; if (pptar) *pptar = NULL; if (pptab) *pptab = NULL; if (pptaw) *pptaw = NULL; if (pptah) *pptah = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!keepinvalid && boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes", __func__, 1); n = boxaGetCount(boxa); if (pptal) *pptal = ptaCreate(n); if (pptat) *pptat = ptaCreate(n); if (pptar) *pptar = ptaCreate(n); if (pptab) *pptab = ptaCreate(n); if (pptaw) *pptaw = ptaCreate(n); if (pptah) *pptah = ptaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); if (!keepinvalid && (w <= 0 || h <= 0)) continue; right = left + w - 1; bot = top + h - 1; if (pptal) ptaAddPt(*pptal, i, left); if (pptat) ptaAddPt(*pptat, i, top); if (pptar) ptaAddPt(*pptar, i, right); if (pptab) ptaAddPt(*pptab, i, bot); if (pptaw) ptaAddPt(*pptaw, i, w); if (pptah) ptaAddPt(*pptah, i, h); } return 0; } /*! * \brief boxaExtractCorners() * * \param[in] boxa * \param[in] loc L_UPPER_LEFT, L_UPPER_RIGHT, L_LOWER_LEFT, * L_LOWER_RIGHT, L_BOX_CENTER * \return pta of requested coordinates, or NULL on error * *
 * Notes:
 *      (1) Extracts (0,0) for invalid boxes.
 *      (2) Other boxa --> pta functions are:
 *          * boxaExtractAsPta(): allows extraction of any dimension
 *            and/or side location, with each in a separate pta.
 *          * boxaConvertToPta(): extracts sufficient number of corners
 *            to allow reconstruction of the original boxa from the pta.
 * 
*/ PTA * boxaExtractCorners(BOXA *boxa, l_int32 loc) { l_int32 i, n, left, top, right, bot, w, h; PTA *pta; if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", __func__, NULL); if (loc != L_UPPER_LEFT && loc != L_UPPER_RIGHT && loc != L_LOWER_LEFT && loc != L_LOWER_RIGHT && loc != L_BOX_CENTER) return (PTA *)ERROR_PTR("invalid location", __func__, NULL); n = boxaGetCount(boxa); if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); right = left + w - 1; bot = top + h - 1; if (w == 0 || h == 0) { /* invalid */ left = 0; top = 0; right = 0; bot = 0; } if (loc == L_UPPER_LEFT) ptaAddPt(pta, left, top); else if (loc == L_UPPER_RIGHT) ptaAddPt(pta, right, top); else if (loc == L_LOWER_LEFT) ptaAddPt(pta, left, bot); else if (loc == L_LOWER_RIGHT) ptaAddPt(pta, right, bot); else if (loc == L_BOX_CENTER) ptaAddPt(pta, (left + right) / 2, (top + bot) / 2); } return pta; } /*---------------------------------------------------------------------* * Boxa statistics * *---------------------------------------------------------------------*/ /*! * \brief boxaGetRankVals() * * \param[in] boxa * \param[in] fract use 0.0 for smallest, 1.0 for largest width and height * \param[out] px [optional] rank value of x (left side) * \param[out] py [optional] rank value of y (top side) * \param[out] pr [optional] rank value of right side * \param[out] pb [optional] rank value of bottom side * \param[out] pw [optional] rank value of width * \param[out] ph [optional] rank value of height * \return 0 if OK, 1 on error or if the boxa is empty or has no valid boxes * *
 * Notes:
 *      (1) This function does not assume that all boxes in the boxa are valid
 *      (2) The six box parameters are sorted independently.
 *          For rank order, the width and height are sorted in increasing
 *          order.  But what does it mean to sort x and y in "rank order"?
 *          If the boxes are of comparable size and somewhat
 *          aligned (e.g., from multiple images), it makes some sense
 *          to give a "rank order" for x and y by sorting them in
 *          decreasing order.  (By the same argument, we choose to sort
 *          the r and b sides in increasing order.)  In general, the
 *          interpretation of a rank order on x and y (or on r and b)
 *          is highly application dependent.  In summary:
 *             ~ x and y are sorted in decreasing order
 *             ~ r and b are sorted in increasing order
 *             ~ w and h are sorted in increasing order
 * 
*/ l_ok boxaGetRankVals(BOXA *boxa, l_float32 fract, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph) { l_float32 xval, yval, rval, bval, wval, hval; NUMA *nax, *nay, *nar, *nab, *naw, *nah; if (px) *px = 0; if (py) *py = 0; if (pr) *pr = 0; if (pb) *pb = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (fract < 0.0 || fract > 1.0) return ERROR_INT("fract not in [0.0 ... 1.0]", __func__, 1); if (boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes in boxa", __func__, 1); /* Use only the valid boxes */ boxaExtractAsNuma(boxa, &nax, &nay, &nar, &nab, &naw, &nah, 0); if (px) { numaGetRankValue(nax, 1.0 - fract, NULL, 1, &xval); *px = (l_int32)xval; } if (py) { numaGetRankValue(nay, 1.0 - fract, NULL, 1, &yval); *py = (l_int32)yval; } if (pr) { numaGetRankValue(nar, fract, NULL, 1, &rval); *pr = (l_int32)rval; } if (pb) { numaGetRankValue(nab, fract, NULL, 1, &bval); *pb = (l_int32)bval; } if (pw) { numaGetRankValue(naw, fract, NULL, 1, &wval); *pw = (l_int32)wval; } if (ph) { numaGetRankValue(nah, fract, NULL, 1, &hval); *ph = (l_int32)hval; } numaDestroy(&nax); numaDestroy(&nay); numaDestroy(&nar); numaDestroy(&nab); numaDestroy(&naw); numaDestroy(&nah); return 0; } /*! * \brief boxaGetMedianVals() * * \param[in] boxa * \param[out] px [optional] median value of x (left side) * \param[out] py [optional] median value of y (top side) * \param[out] pr [optional] median value of right side * \param[out] pb [optional] median value of bottom side * \param[out] pw [optional] median value of width * \param[out] ph [optional] median value of height * \return 0 if OK, 1 on error or if the boxa is empty or has no valid boxes * *
 * Notes:
 *      (1) See boxaGetRankVals()
 * 
*/ l_ok boxaGetMedianVals(BOXA *boxa, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph) { if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes in boxa", __func__, 1); return boxaGetRankVals(boxa, 0.5, px, py, pr, pb, pw, ph); } /*! * \brief boxaGetAverageSize() * * \param[in] boxa * \param[out] pw [optional] average width * \param[out] ph [optional] average height * \return 0 if OK, 1 on error or if the boxa is empty */ l_ok boxaGetAverageSize(BOXA *boxa, l_float32 *pw, l_float32 *ph) { l_int32 i, n, bw, bh; l_float32 sumw, sumh; if (pw) *pw = 0.0; if (ph) *ph = 0.0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((n = boxaGetCount(boxa)) == 0) return ERROR_INT("boxa is empty", __func__, 1); sumw = sumh = 0.0; for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &bw, &bh); sumw += bw; sumh += bh; } if (pw) *pw = sumw / n; if (ph) *ph = sumh / n; return 0; } /*---------------------------------------------------------------------* * Other Boxaa functions * *---------------------------------------------------------------------*/ /*! * \brief boxaaGetExtent() * * \param[in] baa * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbox [optional] minimum box containing all boxa * in boxaa * \param[out] pboxa [optional] boxa containing all boxes in each * boxa in the boxaa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned w and h are the minimum size image
 *          that would contain all boxes untranslated.
 *      (2) Each box in the returned boxa is the minimum box required to
 *          hold all the boxes in the respective boxa of baa.
 *      (3) If there are no valid boxes in a boxa, the box corresponding
 *          to its extent has all fields set to 0 (an invalid box).
 * 
*/ l_ok boxaaGetExtent(BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa) { l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; BOX *box1; BOXA *boxa, *boxa1; if (!pw && !ph && !pbox && !pboxa) return ERROR_INT("no ptrs defined", __func__, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pbox) *pbox = NULL; if (pboxa) *pboxa = NULL; if (!baa) return ERROR_INT("baa not defined", __func__, 1); n = boxaaGetCount(baa); if (n == 0) return ERROR_INT("no boxa in baa", __func__, 1); boxa = boxaCreate(n); xmax = ymax = 0; xmin = ymin = 100000000; found = FALSE; for (i = 0; i < n; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxaGetExtent(boxa1, NULL, NULL, &box1); boxaDestroy(&boxa1); boxGetGeometry(box1, &x, &y, &w, &h); if (w > 0 && h > 0) { /* a valid extent box */ found = TRUE; /* found at least one valid extent box */ xmin = L_MIN(xmin, x); ymin = L_MIN(ymin, y); xmax = L_MAX(xmax, x + w); ymax = L_MAX(ymax, y + h); } boxaAddBox(boxa, box1, L_INSERT); } if (found == FALSE) /* no valid extent boxes */ xmin = ymin = 0; if (pw) *pw = xmax; if (ph) *ph = ymax; if (pbox) *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); return 0; } /*! * \brief boxaaFlattenToBoxa() * * \param[in] baa * \param[out] pnaindex [optional] the boxa index in the baa * \param[in] copyflag L_COPY or L_CLONE * \return boxa, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the baa to a boxa, taking the boxes in
 *          order in the first boxa, then the second, etc.
 *      (2) If a boxa is empty, we generate an invalid, placeholder box
 *          of zero size.  This is useful when converting from a baa
 *          where each boxa has either 0 or 1 boxes, and it is necessary
 *          to maintain a 1:1 correspondence between the initial
 *          boxa array and the resulting box array.
 *      (3) If &naindex is defined, we generate a Numa that gives, for
 *          each box in the baa, the index of the boxa to which it belongs.
 * 
*/ BOXA * boxaaFlattenToBoxa(BOXAA *baa, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, j, m, n; BOXA *boxa, *boxat; BOX *box; NUMA *naindex = NULL; if (pnaindex) *pnaindex = NULL; if (!baa) return (BOXA *)ERROR_PTR("baa not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if (pnaindex) { naindex = numaCreate(0); *pnaindex = naindex; } n = boxaaGetCount(baa); boxa = boxaCreate(n); for (i = 0; i < n; i++) { boxat = boxaaGetBoxa(baa, i, L_CLONE); m = boxaGetCount(boxat); if (m == 0) { /* placeholder box */ box = boxCreate(0, 0, 0, 0); boxaAddBox(boxa, box, L_INSERT); if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } else { for (j = 0; j < m; j++) { box = boxaGetBox(boxat, j, copyflag); boxaAddBox(boxa, box, L_INSERT); if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } } boxaDestroy(&boxat); } return boxa; } /*! * \brief boxaaFlattenAligned() * * \param[in] baa * \param[in] num number extracted from each * \param[in] fillerbox [optional] that fills if necessary * \param[in] copyflag L_COPY or L_CLONE * \return boxa, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the baa to a boxa, taking the first %num
 *          boxes from each boxa.
 *      (2) In each boxa, if there are less than %num boxes, we preserve
 *          the alignment between the input baa and the output boxa
 *          by inserting one or more fillerbox(es) or, if %fillerbox == NULL,
 *          one or more invalid placeholder boxes.
 * 
*/ BOXA * boxaaFlattenAligned(BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag) { l_int32 i, j, m, n, mval, nshort; BOXA *boxat, *boxad; BOX *box; if (!baa) return (BOXA *)ERROR_PTR("baa not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = boxaaGetCount(baa); boxad = boxaCreate(n); for (i = 0; i < n; i++) { boxat = boxaaGetBoxa(baa, i, L_CLONE); m = boxaGetCount(boxat); mval = L_MIN(m, num); nshort = num - mval; for (j = 0; j < mval; j++) { /* take the first %num if possible */ box = boxaGetBox(boxat, j, copyflag); boxaAddBox(boxad, box, L_INSERT); } for (j = 0; j < nshort; j++) { /* add fillers if necessary */ if (fillerbox) { boxaAddBox(boxad, fillerbox, L_COPY); } else { box = boxCreate(0, 0, 0, 0); /* invalid placeholder box */ boxaAddBox(boxad, box, L_INSERT); } } boxaDestroy(&boxat); } return boxad; } /*! * \brief boxaEncapsulateAligned() * * \param[in] boxa * \param[in] num number put into each boxa in the baa * \param[in] copyflag L_COPY or L_CLONE * \return baa, or NULL on error * *
 * Notes:
 *      (1) This puts %num boxes from the input %boxa into each of a
 *          set of boxa within an output baa.
 *      (2) This assumes that the boxes in %boxa are in sets of %num each.
 * 
*/ BOXAA * boxaEncapsulateAligned(BOXA *boxa, l_int32 num, l_int32 copyflag) { l_int32 i, j, n, nbaa, index; BOX *box; BOXA *boxat; BOXAA *baa; if (!boxa) return (BOXAA *)ERROR_PTR("boxa not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = boxaGetCount(boxa); nbaa = n / num; if (num * nbaa != n) L_ERROR("inconsistent alignment: num doesn't divide n\n", __func__); baa = boxaaCreate(nbaa); for (i = 0, index = 0; i < nbaa; i++) { boxat = boxaCreate(num); for (j = 0; j < num; j++, index++) { box = boxaGetBox(boxa, index, copyflag); boxaAddBox(boxat, box, L_INSERT); } boxaaAddBoxa(baa, boxat, L_INSERT); } return baa; } /*! * \brief boxaaTranspose() * * \param[in] baas * \return baad, or NULL on error * *
 * Notes:
 *      (1) If you think of a boxaa as a 2D array of boxes that is accessed
 *          row major, then each row is represented by one of the boxa.
 *          This function creates a new boxaa related to the input boxaa
 *          as a column major traversal of the input boxaa.
 *      (2) For example, if %baas has 2 boxa, each with 10 boxes, then
 *          %baad will have 10 boxa, each with 2 boxes.
 *      (3) Require for this transpose operation that each boxa in
 *          %baas has the same number of boxes.  This operation is useful
 *          when the i-th boxes in each boxa are meaningfully related.
 * 
*/ BOXAA * boxaaTranspose(BOXAA *baas) { l_int32 i, j, ny, nb, nbox; BOX *box; BOXA *boxa; BOXAA *baad; if (!baas) return (BOXAA *)ERROR_PTR("baas not defined", __func__, NULL); if ((ny = boxaaGetCount(baas)) == 0) return (BOXAA *)ERROR_PTR("baas empty", __func__, NULL); /* Make sure that each boxa in baas has the same number of boxes */ for (i = 0; i < ny; i++) { if ((boxa = boxaaGetBoxa(baas, i, L_CLONE)) == NULL) return (BOXAA *)ERROR_PTR("baas is missing a boxa", __func__, NULL); nb = boxaGetCount(boxa); boxaDestroy(&boxa); if (i == 0) nbox = nb; else if (nb != nbox) return (BOXAA *)ERROR_PTR("boxa are not all the same size", __func__, NULL); } /* baad[i][j] = baas[j][i] */ baad = boxaaCreate(nbox); for (i = 0; i < nbox; i++) { boxa = boxaCreate(ny); for (j = 0; j < ny; j++) { box = boxaaGetBox(baas, j, i, L_COPY); boxaAddBox(boxa, box, L_INSERT); } boxaaAddBoxa(baad, boxa, L_INSERT); } return baad; } /*! * \brief boxaaAlignBox() * * \param[in] baa * \param[in] box to be aligned with bext boxa in the baa, if possible * \param[in] delta amount by which consecutive components can miss * in overlap and still be included in the array * \param[out] pindex index of boxa with best overlap, or if none match, * this is the index of the next boxa to be generated * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is not greedy.  It finds the boxa whose vertical
 *          extent has the closest overlap with the input box.
 * 
*/ l_ok boxaaAlignBox(BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex) { l_int32 i, n, m, y, yt, h, ht, ovlp, maxovlp, maxindex; BOX *boxt; BOXA *boxa; if (pindex) *pindex = 0; if (!baa) return ERROR_INT("baa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (!pindex) return ERROR_INT("&index not defined", __func__, 1); n = boxaaGetCount(baa); boxGetGeometry(box, NULL, &y, NULL, &h); maxovlp = -10000000; for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); if ((m = boxaGetCount(boxa)) == 0) { boxaDestroy(&boxa); L_WARNING("no boxes in boxa\n", __func__); continue; } boxaGetExtent(boxa, NULL, NULL, &boxt); boxGetGeometry(boxt, NULL, &yt, NULL, &ht); boxDestroy(&boxt); boxaDestroy(&boxa); /* Overlap < 0 means the components do not overlap vertically */ if (yt >= y) ovlp = y + h - 1 - yt; else ovlp = yt + ht - 1 - y; if (ovlp > maxovlp) { maxovlp = ovlp; maxindex = i; } } if (maxovlp + delta >= 0) *pindex = maxindex; else *pindex = n; return 0; } leptonica-1.86.0/src/boxfunc3.c000066400000000000000000001551621506303110300162500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxfunc3.c *
 *
 *      Boxa/Boxaa painting into pix
 *           PIX             *pixMaskConnComp()
 *           PIX             *pixMaskBoxa()
 *           PIX             *pixPaintBoxa()
 *           PIX             *pixSetBlackOrWhiteBoxa()
 *           PIX             *pixPaintBoxaRandom()
 *           PIX             *pixBlendBoxaRandom()
 *           PIX             *pixDrawBoxa()
 *           PIX             *pixDrawBoxaRandom()
 *           PIX             *boxaaDisplay()
 *           PIXA            *pixaDisplayBoxaa()
 *
 *      Split mask components into Boxa
 *           BOXA            *pixSplitIntoBoxa()
 *           BOXA            *pixSplitComponentIntoBoxa()
 *           static l_int32   pixSearchForRectangle()
 *
 *      Represent horizontal or vertical mosaic strips
 *           BOXA            *makeMosaicStrips()
 *
 *      Comparison between boxa
 *           l_int32          boxaCompareRegions()
 *
 *      Reliable selection of a single large box
 *           BOX             *pixSelectLargeULComp()
 *           BOX             *boxaSelectLargeULBox()
 *
 *  See summary in pixPaintBoxa() of various ways to paint and draw
 *  boxes on images.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static l_int32 pixSearchForRectangle(PIX *pixs, BOX *boxs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 sideflag, BOXA *boxat, NUMA *nascore); #ifndef NO_CONSOLE_IO #define DEBUG_SPLIT 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Boxa/Boxaa painting into Pix * *---------------------------------------------------------------------*/ /*! * \brief pixMaskConnComp() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \param[out] pboxa [optional] bounding boxes of c.c. * \return pixd 1 bpp mask over the c.c., or NULL on error * *
 * Notes:
 *      (1) This generates a mask image with ON pixels over the
 *          b.b. of the c.c. in pixs.  If there are no ON pixels in pixs,
 *          pixd will also have no ON pixels.
 * 
*/ PIX * pixMaskConnComp(PIX *pixs, l_int32 connectivity, BOXA **pboxa) { BOXA *boxa; PIX *pixd; if (pboxa) *pboxa = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); boxa = pixConnComp(pixs, NULL, connectivity); pixd = pixCreateTemplate(pixs); if (boxaGetCount(boxa) != 0) pixMaskBoxa(pixd, pixd, boxa, L_SET_PIXELS); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); return pixd; } /*! * \brief pixMaskBoxa() * * \param[in] pixd [optional] may be NULL * \param[in] pixs any depth; not cmapped * \param[in] boxa of boxes, to paint * \param[in] op L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return pixd with masking op over the boxes, or NULL on error * *
 * Notes:
 *      (1) This can be used with:
 *              pixd = NULL  (makes a new pixd)
 *              pixd = pixs  (in-place)
 *      (2) If pixd == NULL, this first makes a copy of pixs, and then
 *          bit-twiddles over the boxes.  Otherwise, it operates directly
 *          on pixs.
 *      (3) This simple function is typically used with 1 bpp images.
 *          It uses the 1-image rasterop function, rasteropUniLow(),
 *          to set, clear or flip the pixels in pixd.
 *      (4) If you want to generate a 1 bpp mask of ON pixels from the boxes
 *          in a Boxa, in a pix of size (w,h):
 *              pix = pixCreate(w, h, 1);
 *              pixMaskBoxa(pix, pix, boxa, L_SET_PIXELS);
 * 
*/ PIX * pixMaskBoxa(PIX *pixd, PIX *pixs, BOXA *boxa, l_int32 op) { l_int32 i, n, x, y, w, h; BOX *box; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is cmapped", __func__, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("if pixd, must be in-place", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return (PIX *)ERROR_PTR("invalid op", __func__, NULL); pixd = pixCopy(pixd, pixs); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to mask\n", __func__); return pixd; } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (op == L_SET_PIXELS) pixRasterop(pixd, x, y, w, h, PIX_SET, NULL, 0, 0); else if (op == L_CLEAR_PIXELS) pixRasterop(pixd, x, y, w, h, PIX_CLR, NULL, 0, 0); else /* op == L_FLIP_PIXELS */ pixRasterop(pixd, x, y, w, h, PIX_NOT(PIX_DST), NULL, 0, 0); boxDestroy(&box); } return pixd; } /*! * \brief pixPaintBoxa() * * \param[in] pixs any depth, can be cmapped * \param[in] boxa of boxes, to paint * \param[in] val rgba color to paint * \return pixd with painted boxes, or NULL on error * *
 * Notes:
 *      (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp
 *          and the boxa is painted using a colormap; otherwise,
 *          it is converted to 32 bpp rgb.
 *      (2) There are several ways to display a box on an image:
 *            * Paint it as a solid color
 *            * Draw the outline
 *            * Blend the outline or region with the existing image
 *          We provide painting and drawing here; blending is in blend.c.
 *          When painting or drawing, the result can be either a
 *          cmapped image or an rgb image.  The dest will be cmapped
 *          if the src is either 1 bpp or has a cmap that is not full.
 *          To force RGB output, use pixConvertTo8(pixs, FALSE)
 *          before calling any of these paint and draw functions.
 * 
*/ PIX * pixPaintBoxa(PIX *pixs, BOXA *boxa, l_uint32 val) { l_int32 i, n, d, rval, gval, bval, newindex; l_int32 mapvacancy; /* true only if cmap and not full */ BOX *box; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", __func__); return pixCopy(NULL, pixs); } mapvacancy = FALSE; if ((cmap = pixGetColormap(pixs)) != NULL) { if (pixcmapGetCount(cmap) < 256) mapvacancy = TRUE; } if (pixGetDepth(pixs) == 1 || mapvacancy) pixd = pixConvertTo8(pixs, TRUE); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); d = pixGetDepth(pixd); if (d == 8) { /* colormapped */ cmap = pixGetColormap(pixd); extractRGBValues(val, &rval, &gval, &bval); if (pixcmapAddNewColor(cmap, rval, gval, bval, &newindex)) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("cmap full; can't add", __func__, NULL); } } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (d == 8) pixSetInRectArbitrary(pixd, box, newindex); else pixSetInRectArbitrary(pixd, box, val); boxDestroy(&box); } return pixd; } /*! * \brief pixSetBlackOrWhiteBoxa() * * \param[in] pixs any depth, can be cmapped * \param[in] boxa [optional] of boxes, to clear or set * \param[in] op L_SET_BLACK, L_SET_WHITE * \return pixd with boxes filled with white or black, or NULL on error */ PIX * pixSetBlackOrWhiteBoxa(PIX *pixs, BOXA *boxa, l_int32 op) { l_int32 i, n, d, index; l_uint32 color; BOX *box; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return pixCopy(NULL, pixs); if ((n = boxaGetCount(boxa)) == 0) return pixCopy(NULL, pixs); pixd = pixCopy(NULL, pixs); d = pixGetDepth(pixd); if (d == 1) { for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (op == L_SET_WHITE) pixClearInRect(pixd, box); else pixSetInRect(pixd, box); boxDestroy(&box); } return pixd; } cmap = pixGetColormap(pixs); if (cmap) { color = (op == L_SET_WHITE) ? 1 : 0; pixcmapAddBlackOrWhite(cmap, color, &index); } else if (d == 8) { color = (op == L_SET_WHITE) ? 0xff : 0x0; } else if (d == 32) { color = (op == L_SET_WHITE) ? 0xffffff00 : 0x0; } else if (d == 2) { color = (op == L_SET_WHITE) ? 0x3 : 0x0; } else if (d == 4) { color = (op == L_SET_WHITE) ? 0xf : 0x0; } else if (d == 16) { color = (op == L_SET_WHITE) ? 0xffff : 0x0; } else { pixDestroy(&pixd); return (PIX *)ERROR_PTR("invalid depth", __func__, NULL); } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (cmap) pixSetInRectArbitrary(pixd, box, index); else pixSetInRectArbitrary(pixd, box, color); boxDestroy(&box); } return pixd; } /*! * \brief pixPaintBoxaRandom() * * \param[in] pixs any depth, can be cmapped * \param[in] boxa of boxes, to paint * \return pixd with painted boxes, or NULL on error * *
 * Notes:
 *      (1) If pixs is 1 bpp, we paint the boxa using a colormap;
 *          otherwise, we convert to 32 bpp.
 *      (2) We use up to 254 different colors for painting the regions.
 *      (3) If boxes overlap, the later ones paint over earlier ones.
 * 
*/ PIX * pixPaintBoxaRandom(PIX *pixs, BOXA *boxa) { l_int32 i, n, d, rval, gval, bval, index; l_uint32 val; BOX *box; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", __func__); return pixCopy(NULL, pixs); } if (pixGetDepth(pixs) == 1) pixd = pixConvert1To8(NULL, pixs, 255, 0); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreateRandom(8, 1, 1); d = pixGetDepth(pixd); /* either 8 or 32 */ if (d == 8) /* colormapped */ pixSetColormap(pixd, cmap); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); if (d == 8) { pixSetInRectArbitrary(pixd, box, index); } else { /* d == 32 */ pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &val); pixSetInRectArbitrary(pixd, box, val); } boxDestroy(&box); } if (d == 32) pixcmapDestroy(&cmap); return pixd; } /*! * \brief pixBlendBoxaRandom() * * \param[in] pixs any depth; can be cmapped * \param[in] boxa of boxes, to blend/paint * \param[in] fract of box color to use * \return pixd 32 bpp, with blend/painted boxes, or NULL on error * *
 * Notes:
 *      (1) pixs is converted to 32 bpp.
 *      (2) This differs from pixPaintBoxaRandom(), in that the
 *          colors here are blended with the color of pixs.
 *      (3) We use up to 254 different colors for painting the regions.
 *      (4) If boxes overlap, the final color depends only on the last
 *          rect that is used.
 * 
*/ PIX * pixBlendBoxaRandom(PIX *pixs, BOXA *boxa, l_float32 fract) { l_int32 i, n, rval, gval, bval, index; l_uint32 val; BOX *box; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", __func__); return pixCopy(NULL, pixs); } if ((pixd = pixConvertTo32(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not defined", __func__, NULL); cmap = pixcmapCreateRandom(8, 1, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &val); pixBlendInRect(pixd, box, val, fract); boxDestroy(&box); } pixcmapDestroy(&cmap); return pixd; } /*! * \brief pixDrawBoxa() * * \param[in] pixs any depth; can be cmapped * \param[in] boxa of boxes, to draw * \param[in] width of lines * \param[in] val rgba color to draw * \return pixd with outlines of boxes added, or NULL on error * *
 * Notes:
 *      (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp
 *          and the boxa is drawn using a colormap; otherwise,
 *          it is converted to 32 bpp rgb.
 * 
*/ PIX * pixDrawBoxa(PIX *pixs, BOXA *boxa, l_int32 width, l_uint32 val) { l_int32 rval, gval, bval, newindex; l_int32 mapvacancy; /* true only if cmap and not full */ PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (width < 1) return (PIX *)ERROR_PTR("width must be >= 1", __func__, NULL); if (boxaGetCount(boxa) == 0) { L_WARNING("no boxes to draw; returning a copy\n", __func__); return pixCopy(NULL, pixs); } mapvacancy = FALSE; if ((cmap = pixGetColormap(pixs)) != NULL) { if (pixcmapGetCount(cmap) < 256) mapvacancy = TRUE; } if (pixGetDepth(pixs) == 1 || mapvacancy) pixd = pixConvertTo8(pixs, TRUE); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); extractRGBValues(val, &rval, &gval, &bval); if (pixGetDepth(pixd) == 8) { /* colormapped */ cmap = pixGetColormap(pixd); pixcmapAddNewColor(cmap, rval, gval, bval, &newindex); } pixRenderBoxaArb(pixd, boxa, width, rval, gval, bval); return pixd; } /*! * \brief pixDrawBoxaRandom() * * \param[in] pixs any depth, can be cmapped * \param[in] boxa of boxes, to draw * \param[in] width thickness of line * \return pixd with box outlines drawn, or NULL on error * *
 * Notes:
 *      (1) If pixs is 1 bpp, we draw the boxa using a colormap;
 *          otherwise, we convert to 32 bpp.
 *      (2) We use up to 254 different colors for drawing the boxes.
 *      (3) If boxes overlap, the later ones draw over earlier ones.
 * 
*/ PIX * pixDrawBoxaRandom(PIX *pixs, BOXA *boxa, l_int32 width) { l_int32 i, n, rval, gval, bval, index; BOX *box; PIX *pixd; PIXCMAP *cmap; PTAA *ptaa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (width < 1) return (PIX *)ERROR_PTR("width must be >= 1", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to draw; returning a copy\n", __func__); return pixCopy(NULL, pixs); } /* Input depth = 1 bpp; generate cmapped output */ if (pixGetDepth(pixs) == 1) { ptaa = generatePtaaBoxa(boxa); pixd = pixRenderRandomCmapPtaa(pixs, ptaa, 1, width, 1); ptaaDestroy(&ptaa); return pixd; } /* Generate rgb output */ pixd = pixConvertTo32(pixs); cmap = pixcmapCreateRandom(8, 1, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); pixRenderBoxArb(pixd, box, width, rval, gval, bval); boxDestroy(&box); } pixcmapDestroy(&cmap); return pixd; } /*! * \brief boxaaDisplay() * * \param[in] pixs [optional] 1 bpp * \param[in] baa boxaa, typically from a 2d sort * \param[in] linewba line width to display outline of each boxa * \param[in] linewb line width to display outline of each box * \param[in] colorba color to display boxa * \param[in] colorb color to display box * \param[in] w width of output pix; use 0 if determined by %pixs or %baa * \param[in] h height of output pix; use 0 if determined by %pixs or %baa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %pixs exists, this renders the boxes over an 8 bpp version
 *          of it.  Otherwise, it renders the boxes over an empty image
 *          with a white background.
 *      (2) If %pixs exists, the dimensions of %pixd are the same,
 *          and input values of %w and %h are ignored.
 *          If %pixs is NULL, the dimensions of %pixd are determined by
 *            - %w and %h if both are > 0, or
 *            - the minimum size required using all boxes in %baa.
 *
 * 
*/ PIX * boxaaDisplay(PIX *pixs, BOXAA *baa, l_int32 linewba, l_int32 linewb, l_uint32 colorba, l_uint32 colorb, l_int32 w, l_int32 h) { l_int32 i, j, n, m, rbox, gbox, bbox, rboxa, gboxa, bboxa; BOX *box; BOXA *boxa; PIX *pixd; PIXCMAP *cmap; if (!baa) return (PIX *)ERROR_PTR("baa not defined", __func__, NULL); if (w <= 0 || h <= 0) { if (pixs) pixGetDimensions(pixs, &w, &h, NULL); else boxaaGetExtent(baa, &w, &h, NULL, NULL); } if (pixs) { pixd = pixConvertTo8(pixs, 1); cmap = pixGetColormap(pixd); } else { pixd = pixCreate(w, h, 8); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); pixcmapAddColor(cmap, 255, 255, 255); } extractRGBValues(colorb, &rbox, &gbox, &bbox); extractRGBValues(colorba, &rboxa, &gboxa, &bboxa); pixcmapAddColor(cmap, rbox, gbox, bbox); pixcmapAddColor(cmap, rboxa, gboxa, bboxa); n = boxaaGetCount(baa); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); boxaGetExtent(boxa, NULL, NULL, &box); pixRenderBoxArb(pixd, box, linewba, rboxa, gboxa, bboxa); boxDestroy(&box); m = boxaGetCount(boxa); for (j = 0; j < m; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixRenderBoxArb(pixd, box, linewb, rbox, gbox, bbox); boxDestroy(&box); } boxaDestroy(&boxa); } return pixd; } /*! * \brief pixaDisplayBoxaa() * * \param[in] pixas any depth, can be cmapped * \param[in] baa boxes to draw on input pixa * \param[in] colorflag L_DRAW_RED, L_DRAW_GREEN, etc * \param[in] width thickness of lines * \return pixa with box outlines drawn on each pix, or NULL on error * *
 * Notes:
 *      (1) All pix in %pixas that are not rgb are converted to rgb.
 *      (2) Each boxa in %baa contains boxes that will be drawn on
 *          the corresponding pix in %pixas.
 *      (3) The color of the boxes drawn on each pix are selected with
 *          %colorflag:
 *            * For red, green or blue: use L_DRAW_RED, etc.
 *            * For sequential r, g, b: use L_DRAW_RGB
 *            * For random colors: use L_DRAW_RANDOM
 * 
*/ PIXA * pixaDisplayBoxaa(PIXA *pixas, BOXAA *baa, l_int32 colorflag, l_int32 width) { l_int32 i, j, nba, n, nbox, rval, gval, bval; l_uint32 color; l_uint32 colors[255]; BOXA *boxa; BOX *box; PIX *pix; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!baa) return (PIXA *)ERROR_PTR("baa not defined", __func__, NULL); if (width < 1) return (PIXA *)ERROR_PTR("width must be >= 1", __func__, NULL); if ((nba = boxaaGetCount(baa)) < 1) return (PIXA *)ERROR_PTR("no boxa in baa", __func__, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no pix in pixas", __func__, NULL); if (n != nba) return (PIXA *)ERROR_PTR("num pix != num boxa", __func__, NULL); if (colorflag == L_DRAW_RED) color = 0xff000000; else if (colorflag == L_DRAW_GREEN) color = 0x00ff0000; else if (colorflag == L_DRAW_BLUE) color = 0x0000ff00; else if (colorflag == L_DRAW_RGB) color = 0x000000ff; else if (colorflag == L_DRAW_RANDOM) color = 0x00000000; else return (PIXA *)ERROR_PTR("invalid colorflag", __func__, NULL); if (colorflag == L_DRAW_RED || colorflag == L_DRAW_GREEN || colorflag == L_DRAW_BLUE) { for (i = 0; i < 255; i++) colors[i] = color; } else if (colorflag == L_DRAW_RGB) { for (i = 0; i < 255; i++) { if (i % 3 == L_DRAW_RED) colors[i] = 0xff000000; else if (i % 3 == L_DRAW_GREEN) colors[i] = 0x00ff0000; else /* i % 3 == L_DRAW_BLUE) */ colors[i] = 0x0000ff00; } } else if (colorflag == L_DRAW_RANDOM) { for (i = 0; i < 255; i++) { rval = (l_uint32)rand() & 0xff; gval = (l_uint32)rand() & 0xff; bval = (l_uint32)rand() & 0xff; composeRGBPixel(rval, gval, bval, &colors[i]); } } pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_COPY); boxa = boxaaGetBoxa(baa, i, L_CLONE); nbox = boxaGetCount(boxa); for (j = 0; j < nbox; j++) { box = boxaGetBox(boxa, j, L_CLONE); extractRGBValues(colors[j % 255], &rval, &gval, &bval); pixRenderBoxArb(pix, box, width, rval, gval, bval); boxDestroy(&box); } boxaDestroy(&boxa); pixaAddPix(pixad, pix, L_INSERT); } return pixad; } /*---------------------------------------------------------------------* * Split mask components into Boxa * *---------------------------------------------------------------------*/ /*! * \brief pixSplitIntoBoxa() * * \param[in] pixs 1 bpp * \param[in] minsum minimum pixels to trigger propagation * \param[in] skipdist distance before computing sum for propagation * \param[in] delta difference required to stop propagation * \param[in] maxbg maximum number of allowed bg pixels in ref scan * \param[in] maxcomps use 0 for unlimited number of subdivided components * \param[in] remainder set to 1 to get b.b. of remaining stuff * \return boxa of rectangles covering the fg of pixs, or NULL on error * *
 * Notes:
 *      (1) This generates a boxa of rectangles that covers
 *          the fg of a mask.  For each 8-connected component in pixs,
 *          it does a greedy partitioning, choosing the largest
 *          rectangle found from each of the four directions at each iter.
 *          See pixSplitComponentIntoBoxa() for details.
 *      (2) The input parameters give some flexibility for boundary
 *          noise.  The resulting set of rectangles may cover some
 *          bg pixels.
 *      (3) This should be used when there are a small number of
 *          mask components, each of which has sides that are close
 *          to horizontal and vertical.  The input parameters %delta
 *          and %maxbg determine whether or not holes in the mask are covered.
 *      (4) The parameter %maxcomps gives the maximum number of allowed
 *          rectangles extracted from any single connected component.
 *          Use 0 if no limit is to be applied.
 *      (5) The flag %remainder specifies whether we take a final bounding
 *          box for anything left after the maximum number of allowed
 *          rectangle is extracted.
 * 
*/ BOXA * pixSplitIntoBoxa(PIX *pixs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder) { l_int32 i, n; BOX *box; BOXA *boxa, *boxas, *boxad; PIX *pix; PIXA *pixas; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); boxas = pixConnComp(pixs, &pixas, 8); n = boxaGetCount(boxas); boxad = boxaCreate(0); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = boxaGetBox(boxas, i, L_CLONE); boxa = pixSplitComponentIntoBoxa(pix, box, minsum, skipdist, delta, maxbg, maxcomps, remainder); boxaJoin(boxad, boxa, 0, -1); pixDestroy(&pix); boxDestroy(&box); boxaDestroy(&boxa); } pixaDestroy(&pixas); boxaDestroy(&boxas); return boxad; } /*! * \brief pixSplitComponentIntoBoxa() * * \param[in] pix 1 bpp * \param[in] box [optional] location of pix w/rt an origin * \param[in] minsum minimum pixels to trigger propagation * \param[in] skipdist distance before computing sum for propagation * \param[in] delta difference required to stop propagation * \param[in] maxbg maximum number of allowed bg pixels in ref scan * \param[in] maxcomps use 0 for unlimited number of subdivided components * \param[in] remainder set to 1 to get b.b. of remaining stuff * \return boxa of rectangles covering the fg of pix, or NULL on error * *
 * Notes:
 *      (1) This generates a boxa of rectangles that covers
 *          the fg of a mask.  It does so by a greedy partitioning of
 *          the mask, choosing the largest rectangle found from
 *          each of the four directions at each step.
 *      (2) The input parameters give some flexibility for boundary
 *          noise.  The resulting set of rectangles must cover all
 *          the fg pixels and, in addition, may cover some bg pixels.
 *          Using small input parameters on a noiseless mask (i.e., one
 *          that has only large vertical and horizontal edges) will
 *          result in a proper covering of only the fg pixels of the mask.
 *      (3) The input is assumed to be a single connected component, that
 *          may have holes.  From each side, sweep inward, counting
 *          the pixels.  If the count becomes greater than %minsum,
 *          and we have moved forward a further amount %skipdist,
 *          record that count ('countref'), but don't accept if the scan
 *          contains more than %maxbg bg pixels.  Continue the scan
 *          until we reach a count that differs from countref by at
 *          least %delta, at which point the propagation stops.  The box
 *          swept out gets a score, which is the sum of fg pixels
 *          minus a penalty.  The penalty is the number of bg pixels
 *          in the box.  This is done from all four sides, and the
 *          side with the largest score is saved as a rectangle.
 *          The process repeats until there is either no rectangle
 *          left, or there is one that can't be captured from any
 *          direction.  For the latter case, we simply accept the
 *          last rectangle.
 *      (4) The input box is only used to specify the location of
 *          the UL corner of pix, with respect to an origin that
 *          typically represents the UL corner of an underlying image,
 *          of which pix is one component.  If %box is null,
 *          the UL corner is taken to be (0, 0).
 *      (5) The parameter %maxcomps gives the maximum number of allowed
 *          rectangles extracted from any single connected component.
 *          Use 0 if no limit is to be applied.
 *      (6) The flag %remainder specifies whether we take a final bounding
 *          box for anything left after the maximum number of allowed
 *          rectangle is extracted.
 *      (7) So if %maxcomps > 0, it specifies that we want no more than
 *          the first %maxcomps rectangles that satisfy the input
 *          criteria.  After this, we can get a final rectangle that
 *          bounds everything left over by setting %remainder == 1.
 *          If %remainder == 0, we only get rectangles that satisfy
 *          the input criteria.
 *      (8) It should be noted that the removal of rectangles can
 *          break the original c.c. into several c.c.
 *      (9) Summing up:
 *            * If %maxcomp == 0, the splitting proceeds as far as possible.
 *            * If %maxcomp > 0, the splitting stops when %maxcomps are
 *                found, or earlier if no more components can be selected.
 *            * If %remainder == 1 and components remain that cannot be
 *                selected, they are returned as a single final rectangle;
 *                otherwise, they are ignored.
 * 
*/ BOXA * pixSplitComponentIntoBoxa(PIX *pix, BOX *box, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder) { l_int32 i, w, h, boxx, boxy, bx, by, bw, bh, maxdir, maxscore; l_int32 iter; BOX *boxs; /* shrinks as rectangular regions are removed */ BOX *boxt1, *boxt2, *boxt3; BOXA *boxat; /* stores rectangle data for each side in an iteration */ BOXA *boxad; NUMA *nascore, *nas; PIX *pixs; if (!pix || pixGetDepth(pix) != 1) return (BOXA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); pixs = pixCopy(NULL, pix); pixGetDimensions(pixs, &w, &h, NULL); if (box) boxGetGeometry(box, &boxx, &boxy, NULL, NULL); else boxx = boxy = 0; boxs = boxCreate(0, 0, w, h); boxad = boxaCreate(0); iter = 0; while (boxs != NULL) { boxGetGeometry(boxs, &bx, &by, &bw, &bh); boxat = boxaCreate(4); /* potential rectangular regions */ nascore = numaCreate(4); for (i = 0; i < 4; i++) { pixSearchForRectangle(pixs, boxs, minsum, skipdist, delta, maxbg, i, boxat, nascore); } nas = numaGetSortIndex(nascore, L_SORT_DECREASING); numaGetIValue(nas, 0, &maxdir); numaGetIValue(nascore, maxdir, &maxscore); #if DEBUG_SPLIT lept_stderr("Iteration: %d\n", iter); boxPrintStreamInfo(stderr, boxs); boxaWriteStderr(boxat); lept_stderr("\nmaxdir = %d, maxscore = %d\n\n", maxdir, maxscore); #endif /* DEBUG_SPLIT */ if (maxscore > 0) { /* accept this */ boxt1 = boxaGetBox(boxat, maxdir, L_CLONE); boxt2 = boxTransform(boxt1, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt2, L_INSERT); pixClearInRect(pixs, boxt1); boxDestroy(&boxt1); pixClipBoxToForeground(pixs, boxs, NULL, &boxt3); boxDestroy(&boxs); boxs = boxt3; if (boxs) { boxGetGeometry(boxs, NULL, NULL, &bw, &bh); if (bw < 2 || bh < 2) boxDestroy(&boxs); /* we're done */ } } else { /* no more valid rectangles can be found */ if (remainder == 1) { /* save the last box */ boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt1, L_INSERT); } boxDestroy(&boxs); /* we're done */ } boxaDestroy(&boxat); numaDestroy(&nascore); numaDestroy(&nas); iter++; if ((iter == maxcomps) && boxs) { if (remainder == 1) { /* save the last box */ boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt1, L_INSERT); } boxDestroy(&boxs); /* we're done */ } } pixDestroy(&pixs); return boxad; } /*! * \brief pixSearchForRectangle() * * \param[in] pixs 1 bpp * \param[in] boxs current region to investigate * \param[in] minsum minimum pixels to trigger propagation * \param[in] skipdist distance before computing sum for propagation * \param[in] delta difference required to stop propagation * \param[in] maxbg maximum number of allowed bg pixels in ref scan * \param[in] sideflag side to search from * \param[in] boxat add result of rectangular region found here * \param[in] nascore add score for this rectangle here * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixSplitComponentIntoBoxa() for an explanation of the algorithm.
 *          This does the sweep from a single side.  For each iteration
 *          in pixSplitComponentIntoBoxa(), this will be called 4 times,
 *          for %sideflag = {0, 1, 2, 3}.
 *      (2) If a valid rectangle is not found, add a score of 0 and
 *          input a minimum box.
 * 
*/ static l_int32 pixSearchForRectangle(PIX *pixs, BOX *boxs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 sideflag, BOXA *boxat, NUMA *nascore) { l_int32 bx, by, bw, bh, width, height, setref, atref; l_int32 minincol, maxincol, mininrow, maxinrow, minval, maxval, bgref; l_int32 x, y, x0, y0, xref, yref, colsum, rowsum, score, countref, diff; void **lines1; BOX *boxr; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (!boxs) return ERROR_INT("boxs not defined", __func__, 1); if (!boxat) return ERROR_INT("boxat not defined", __func__, 1); if (!nascore) return ERROR_INT("nascore not defined", __func__, 1); lines1 = pixGetLinePtrs(pixs, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); boxr = NULL; setref = 0; atref = 0; maxval = 0; minval = 100000; score = 0; /* sum of all (fg - bg) pixels seen in the scan */ xref = yref = 100000; /* init to impossibly big number */ if (sideflag == L_FROM_LEFT) { for (x = bx; x < bx + bw; x++) { colsum = 0; maxincol = 0; minincol = 100000; for (y = by; y < by + bh; y++) { if (GET_DATA_BIT(lines1[y], x)) { colsum++; if (y > maxincol) maxincol = y; if (y < minincol) minincol = y; } } score += colsum; /* Enough fg to sweep out a rectangle? */ if (!setref && colsum >= minsum) { setref = 1; xref = x + 10; if (xref >= bx + bw) goto failure; } /* Reached the reference line; save the count; * if there is too much bg, the rectangle is invalid. */ if (setref && x == xref) { atref = 1; countref = colsum; bgref = maxincol - minincol + 1 - countref; if (bgref > maxbg) goto failure; } /* Have we left the rectangle? If so, save it along * with the score. */ if (atref) { diff = L_ABS(colsum - countref); if (diff >= delta || x == bx + bw - 1) { height = maxval - minval + 1; width = x - bx; if (x == bx + bw - 1) width = x - bx + 1; boxr = boxCreate(bx, minval, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxincol); minval = L_MIN(minval, minincol); } goto failure; } else if (sideflag == L_FROM_RIGHT) { for (x = bx + bw - 1; x >= bx; x--) { colsum = 0; maxincol = 0; minincol = 100000; for (y = by; y < by + bh; y++) { if (GET_DATA_BIT(lines1[y], x)) { colsum++; if (y > maxincol) maxincol = y; if (y < minincol) minincol = y; } } score += colsum; if (!setref && colsum >= minsum) { setref = 1; xref = x - 10; if (xref < bx) goto failure; } if (setref && x == xref) { atref = 1; countref = colsum; bgref = maxincol - minincol + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(colsum - countref); if (diff >= delta || x == bx) { height = maxval - minval + 1; x0 = x + 1; if (x == bx) x0 = x; width = bx + bw - x0; boxr = boxCreate(x0, minval, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxincol); minval = L_MIN(minval, minincol); } goto failure; } else if (sideflag == L_FROM_TOP) { for (y = by; y < by + bh; y++) { rowsum = 0; maxinrow = 0; mininrow = 100000; for (x = bx; x < bx + bw; x++) { if (GET_DATA_BIT(lines1[y], x)) { rowsum++; if (x > maxinrow) maxinrow = x; if (x < mininrow) mininrow = x; } } score += rowsum; if (!setref && rowsum >= minsum) { setref = 1; yref = y + 10; if (yref >= by + bh) goto failure; } if (setref && y == yref) { atref = 1; countref = rowsum; bgref = maxinrow - mininrow + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(rowsum - countref); if (diff >= delta || y == by + bh - 1) { width = maxval - minval + 1; height = y - by; if (y == by + bh - 1) height = y - by + 1; boxr = boxCreate(minval, by, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxinrow); minval = L_MIN(minval, mininrow); } goto failure; } else if (sideflag == L_FROM_BOT) { for (y = by + bh - 1; y >= by; y--) { rowsum = 0; maxinrow = 0; mininrow = 100000; for (x = bx; x < bx + bw; x++) { if (GET_DATA_BIT(lines1[y], x)) { rowsum++; if (x > maxinrow) maxinrow = x; if (x < mininrow) mininrow = x; } } score += rowsum; if (!setref && rowsum >= minsum) { setref = 1; yref = y - 10; if (yref < by) goto failure; } if (setref && y == yref) { atref = 1; countref = rowsum; bgref = maxinrow - mininrow + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(rowsum - countref); if (diff >= delta || y == by) { width = maxval - minval + 1; y0 = y + 1; if (y == by) y0 = y; height = by + bh - y0; boxr = boxCreate(minval, y0, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxinrow); minval = L_MIN(minval, mininrow); } goto failure; } failure: numaAddNumber(nascore, 0); boxaAddBox(boxat, boxCreate(0, 0, 1, 1), L_INSERT); /* min box */ LEPT_FREE(lines1); return 0; success: numaAddNumber(nascore, score); boxaAddBox(boxat, boxr, L_INSERT); LEPT_FREE(lines1); return 0; } /*---------------------------------------------------------------------* * Represent horizontal or vertical mosaic strips * *---------------------------------------------------------------------*/ /*! * \brief makeMosaicStrips() * * \param[in] w, h * \param[in] direction L_SCAN_HORIZONTAL or L_SCAN_VERTICAL * \param[in] size of strips in the scan direction * \return boxa, or NULL on error * *
 * Notes:
 *      (1) For example, this can be used to generate a pixa of
 *          vertical strips of width 10 from an image, using:
 *             pixGetDimensions(pix, &w, &h, NULL);
 *             boxa = makeMosaicStrips(w, h, L_SCAN_HORIZONTAL, 10);
 *             pixa = pixClipRectangles(pix, boxa);
 *          All strips except the last will be the same width.  The
 *          last strip will have width w % 10.
 * 
*/ BOXA * makeMosaicStrips(l_int32 w, l_int32 h, l_int32 direction, l_int32 size) { l_int32 i, nstrips, extra; BOX *box; BOXA *boxa; if (w < 1 || h < 1) return (BOXA *)ERROR_PTR("invalid w or h", __func__, NULL); if (direction != L_SCAN_HORIZONTAL && direction != L_SCAN_VERTICAL) return (BOXA *)ERROR_PTR("invalid direction", __func__, NULL); if (size < 1) return (BOXA *)ERROR_PTR("size < 1", __func__, NULL); boxa = boxaCreate(0); if (direction == L_SCAN_HORIZONTAL) { nstrips = w / size; for (i = 0; i < nstrips; i++) { box = boxCreate(i * size, 0, size, h); boxaAddBox(boxa, box, L_INSERT); } if ((extra = w % size) > 0) { box = boxCreate(nstrips * size, 0, extra, h); boxaAddBox(boxa, box, L_INSERT); } } else { nstrips = h / size; for (i = 0; i < nstrips; i++) { box = boxCreate(0, i * size, w, size); boxaAddBox(boxa, box, L_INSERT); } if ((extra = h % size) > 0) { box = boxCreate(0, nstrips * size, w, extra); boxaAddBox(boxa, box, L_INSERT); } } return boxa; } /*---------------------------------------------------------------------* * Comparison between boxa * *---------------------------------------------------------------------*/ /*! * \brief boxaCompareRegions() * * \param[in] boxa1, boxa2 * \param[in] areathresh minimum area of boxes to be considered * \param[out] pnsame true if same number of boxes * \param[out] pdiffarea fractional difference in total area * \param[out] pdiffxor [optional] fractional difference in xor of regions * \param[out] ppixdb [optional] debug pix showing two boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes 2 boxa, removes all boxes smaller than a given area,
 *          and compares the remaining boxes between the boxa.
 *      (2) The area threshold is introduced to help remove noise from
 *          small components.  Any box with a smaller value of w * h
 *          will be removed from consideration.
 *      (3) The xor difference is the most stringent test, requiring alignment
 *          of the corresponding boxes.  It is also more computationally
 *          intensive and is optionally returned.  Alignment is to the
 *          UL corner of each region containing all boxes, as given by
 *          boxaGetExtent().
 *      (4) Both fractional differences are with respect to the total
 *          area in the two boxa.  They range from 0.0 to 1.0.
 *          A perfect match has value 0.0.  If both boxa are empty,
 *          we return 0.0; if one is empty we return 1.0.
 *      (5) An example input might be the rectangular regions of a
 *          segmentation mask for text or images from two pages.
 * 
*/ l_ok boxaCompareRegions(BOXA *boxa1, BOXA *boxa2, l_int32 areathresh, l_int32 *pnsame, l_float32 *pdiffarea, l_float32 *pdiffxor, PIX **ppixdb) { l_int32 w, h, x3, y3, w3, h3, x4, y4, w4, h4, n3, n4, area1, area2; l_int32 count3, count4, countxor; l_int32 *tab; BOX *box3, *box4; BOXA *boxa3, *boxa4, *boxa3t, *boxa4t; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; if (pdiffxor) *pdiffxor = 1.0; if (ppixdb) *ppixdb = NULL; if (pnsame) *pnsame = FALSE; if (pdiffarea) *pdiffarea = 1.0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", __func__, 1); if (!pnsame) return ERROR_INT("&nsame not defined", __func__, 1); if (!pdiffarea) return ERROR_INT("&diffarea not defined", __func__, 1); boxa3 = boxaSelectByArea(boxa1, areathresh, L_SELECT_IF_GTE, NULL); boxa4 = boxaSelectByArea(boxa2, areathresh, L_SELECT_IF_GTE, NULL); n3 = boxaGetCount(boxa3); n4 = boxaGetCount(boxa4); if (n3 == n4) *pnsame = TRUE; /* There are no boxes in one or both */ if (n3 == 0 || n4 == 0) { boxaDestroy(&boxa3); boxaDestroy(&boxa4); if (n3 == 0 && n4 == 0) { /* they are both empty: we say they are the * same; otherwise, they differ maximally * and retain the default value. */ *pdiffarea = 0.0; if (pdiffxor) *pdiffxor = 0.0; } return 0; } /* There are boxes in both */ boxaGetArea(boxa3, &area1); boxaGetArea(boxa4, &area2); *pdiffarea = (l_float32)L_ABS(area1 - area2) / (l_float32)(area1 + area2); if (!pdiffxor) { boxaDestroy(&boxa3); boxaDestroy(&boxa4); return 0; } /* The easiest way to get the xor of aligned boxes is to work * with images of each boxa. This is done by translating each * boxa so that the UL corner of the region that includes all * boxes in the boxa is placed at the origin of each pix. */ boxaGetExtent(boxa3, &w, &h, &box3); boxaGetExtent(boxa4, &w, &h, &box4); boxGetGeometry(box3, &x3, &y3, &w3, &h3); boxGetGeometry(box4, &x4, &y4, &w4, &h4); boxa3t = boxaTransform(boxa3, -x3, -y3, 1.0, 1.0); boxa4t = boxaTransform(boxa4, -x4, -y4, 1.0, 1.0); w = L_MAX(x3 + w3, x4 + w4); h = L_MAX(y3 + h3, y4 + h4); pix3 = pixCreate(w, h, 1); /* use the max to keep everything in the xor */ pix4 = pixCreate(w, h, 1); pixMaskBoxa(pix3, pix3, boxa3t, L_SET_PIXELS); pixMaskBoxa(pix4, pix4, boxa4t, L_SET_PIXELS); tab = makePixelSumTab8(); pixCountPixels(pix3, &count3, tab); pixCountPixels(pix4, &count4, tab); pix5 = pixXor(NULL, pix3, pix4); pixCountPixels(pix5, &countxor, tab); LEPT_FREE(tab); *pdiffxor = (l_float32)countxor / (l_float32)(count3 + count4); if (ppixdb) { pixa = pixaCreate(2); pix1 = pixCreate(w, h, 32); pixSetAll(pix1); pixRenderHashBoxaBlend(pix1, boxa3, 5, 1, L_POS_SLOPE_LINE, 2, 255, 0, 0, 0.5); pixRenderHashBoxaBlend(pix1, boxa4, 5, 1, L_NEG_SLOPE_LINE, 2, 0, 255, 0, 0.5); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCreate(w, h, 32); pixPaintThroughMask(pix2, pix3, x3, y3, 0xff000000); pixPaintThroughMask(pix2, pix4, x4, y4, 0x00ff0000); pixAnd(pix3, pix3, pix4); pixPaintThroughMask(pix2, pix3, x3, y3, 0x0000ff00); pixaAddPix(pixa, pix2, L_INSERT); *ppixdb = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); pixaDestroy(&pixa); } boxDestroy(&box3); boxDestroy(&box4); boxaDestroy(&boxa3); boxaDestroy(&boxa3t); boxaDestroy(&boxa4); boxaDestroy(&boxa4t); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return 0; } /*---------------------------------------------------------------------* * Reliable selection of a single large box * *---------------------------------------------------------------------*/ /*! * \brief pixSelectLargeULComp() * * \param[in] pixs 1 bpp * \param[in] areaslop fraction near but less than 1.0 * \param[in] yslop number of pixels in y direction * \param[in] connectivity 4 or 8 * \return box, or NULL on error * *
 * Notes:
 *      (1) This selects a box near the top (first) and left (second)
 *          of the image, from the set of all boxes that have
 *                area >= %areaslop * (area of biggest box),
 *          where %areaslop is some fraction; say ~ 0.9.
 *      (2) For all boxes satisfying the above condition, select
 *          the left-most box that is within %yslop (say, 20) pixels
 *          of the box nearest the top.
 *      (3) This can be used to reliably select a specific one of
 *          the largest regions in an image, for applications where
 *          there are expected to be small variations in region size
 *          and location.
 *      (4) See boxSelectLargeULBox() for implementation details.
 * 
*/ BOX * pixSelectLargeULComp(PIX *pixs, l_float32 areaslop, l_int32 yslop, l_int32 connectivity) { BOX *box; BOXA *boxa1; if (!pixs) return (BOX *)ERROR_PTR("pixs not defined", __func__, NULL); if (areaslop < 0.0 || areaslop > 1.0) return (BOX *)ERROR_PTR("invalid value for areaslop", __func__, NULL); yslop = L_MAX(0, yslop); boxa1 = pixConnCompBB(pixs, connectivity); if (boxaGetCount(boxa1) == 0) { boxaDestroy(&boxa1); return NULL; } box = boxaSelectLargeULBox(boxa1, areaslop, yslop); boxaDestroy(&boxa1); return box; } /*! * \brief boxaSelectLargeULBox() * * \param[in] boxas 1 bpp * \param[in] areaslop fraction near but less than 1.0 * \param[in] yslop number of pixels in y direction * \return box, or NULL on error * *
 * Notes:
 *      (1) See usage notes in pixSelectLargeULComp().
 * 
*/ BOX * boxaSelectLargeULBox(BOXA *boxas, l_float32 areaslop, l_int32 yslop) { l_int32 w, h, i, n, x1, y1, x2, y2, select; l_float32 area, max_area; BOX *box; BOXA *boxa1, *boxa2, *boxa3; if (!boxas) return (BOX *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxaGetCount(boxas) == 0) return (BOX *)ERROR_PTR("no boxes in boxas", __func__, NULL); if (areaslop < 0.0 || areaslop > 1.0) return (BOX *)ERROR_PTR("invalid value for areaslop", __func__, NULL); yslop = L_MAX(0, yslop); boxa1 = boxaSort(boxas, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); boxa2 = boxaSort(boxa1, L_SORT_BY_Y, L_SORT_INCREASING, NULL); n = boxaGetCount(boxa2); boxaGetBoxGeometry(boxa1, 0, NULL, NULL, &w, &h); /* biggest box by area */ max_area = (l_float32)(w * h); /* boxa3 collects all boxes eligible by area, sorted top-down */ boxa3 = boxaCreate(4); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa2, i, NULL, NULL, &w, &h); area = (l_float32)(w * h); if (area / max_area >= areaslop) { box = boxaGetBox(boxa2, i, L_COPY); boxaAddBox(boxa3, box, L_INSERT); } } /* Take the first (top-most box) unless the second (etc) has * nearly the same y value but a smaller x value. */ n = boxaGetCount(boxa3); boxaGetBoxGeometry(boxa3, 0, &x1, &y1, NULL, NULL); select = 0; for (i = 1; i < n; i++) { boxaGetBoxGeometry(boxa3, i, &x2, &y2, NULL, NULL); if (y2 - y1 < yslop && x2 < x1) { select = i; x1 = x2; /* but always compare against y1 */ } } box = boxaGetBox(boxa3, select, L_COPY); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); return box; } leptonica-1.86.0/src/boxfunc4.c000066400000000000000000001235051506303110300162450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxfunc4.c *
 *
 *      Boxa and Boxaa range selection
 *           BOXA     *boxaSelectRange()
 *           BOXAA    *boxaaSelectRange()
 *
 *      Boxa size selection
 *           BOXA     *boxaSelectBySize()
 *           NUMA     *boxaMakeSizeIndicator()
 *           BOXA     *boxaSelectByArea()
 *           NUMA     *boxaMakeAreaIndicator()
 *           BOXA     *boxaSelectByWHRatio()
 *           NUMA     *boxaMakeWHRatioIndicator()
 *           BOXA     *boxaSelectWithIndicator()
 *
 *      Boxa permutation
 *           BOXA     *boxaPermutePseudorandom()
 *           BOXA     *boxaPermuteRandom()
 *           l_int32   boxaSwapBoxes()
 *
 *      Boxa and box conversions
 *           PTA      *boxaConvertToPta()
 *           BOXA     *ptaConvertToBoxa()
 *           PTA      *boxConvertToPta()
 *           BOX      *ptaConvertToBox()
 *
 *      Miscellaneous boxa functions
 *           l_int32   boxaGetExtent()
 *           l_int32   boxaGetCoverage()
 *           l_int32   boxaaSizeRange()
 *           l_int32   boxaSizeRange()
 *           l_int32   boxaLocationRange()
 *           NUMA     *boxaGetSizes()
 *           l_int32   boxaGetArea()
 *           PIX      *boxaDisplayTiled()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /*---------------------------------------------------------------------* * Boxa and boxaa range selection * *---------------------------------------------------------------------*/ /*! * \brief boxaSelectRange() * * \param[in] boxas * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \param[in] copyflag L_COPY, L_CLONE * \return boxad, or NULL on error * *
 * Notes:
 *      (1) The copyflag specifies what we do with each box from boxas.
 *          Specifically, L_CLONE inserts a clone into boxad of each
 *          selected box from boxas.
 * 
*/ BOXA * boxaSelectRange(BOXA *boxas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, nbox, i; BOX *box; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if ((n = boxaGetCount(boxas)) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, copyflag); } first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (BOXA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (BOXA *)ERROR_PTR("first > last", __func__, NULL); nbox = last - first + 1; boxad = boxaCreate(nbox); for (i = first; i <= last; i++) { box = boxaGetBox(boxas, i, copyflag); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*! * \brief boxaaSelectRange() * * \param[in] baas * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \param[in] copyflag L_COPY, L_CLONE * \return baad, or NULL on error * *
 * Notes:
 *      (1) The copyflag specifies what we do with each boxa from baas.
 *          Specifically, L_CLONE inserts a clone into baad of each
 *          selected boxa from baas.
 * 
*/ BOXAA * boxaaSelectRange(BOXAA *baas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, nboxa, i; BOXA *boxa; BOXAA *baad; if (!baas) return (BOXAA *)ERROR_PTR("baas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", __func__, NULL); if ((n = boxaaGetCount(baas)) == 0) return (BOXAA *)ERROR_PTR("empty baas", __func__, NULL); first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (BOXAA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (BOXAA *)ERROR_PTR("first > last", __func__, NULL); nboxa = last - first + 1; baad = boxaaCreate(nboxa); for (i = first; i <= last; i++) { boxa = boxaaGetBoxa(baas, i, copyflag); boxaaAddBoxa(baad, boxa, L_INSERT); } return baad; } /*---------------------------------------------------------------------* * Boxa size selection * *---------------------------------------------------------------------*/ /*! * \brief boxaSelectBySize() * * \param[in] boxas * \param[in] width, height threshold dimensions * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return boxad filtered set, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) Uses box copies in the new boxa.
 *      (3) If the selection type is L_SELECT_WIDTH, the input
 *          height is ignored, and v.v.
 *      (4) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ BOXA * boxaSelectBySize(BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged) { BOXA *boxad; NUMA *na; if (pchanged) *pchanged = FALSE; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxaGetCount(boxas) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (BOXA *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (BOXA *)ERROR_PTR("invalid relation", __func__, NULL); /* Compute the indicator array for saving components */ if ((na = boxaMakeSizeIndicator(boxas, width, height, type, relation)) == NULL) return (BOXA *)ERROR_PTR("na not made", __func__, NULL); /* Filter to get output */ boxad = boxaSelectWithIndicator(boxas, na, pchanged); numaDestroy(&na); return boxad; } /*! * \brief boxaMakeSizeIndicator() * * \param[in] boxa * \param[in] width, height threshold dimensions * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return na indicator array, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) If the selection type is L_SELECT_WIDTH, the input
 *          height is ignored, and v.v.
 *      (3) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ NUMA * boxaMakeSizeIndicator(BOXA *boxa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) return (NUMA *)ERROR_PTR("boxa is empty", __func__, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", __func__, NULL); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); switch (type) { case L_SELECT_WIDTH: if ((relation == L_SELECT_IF_LT && w < width) || (relation == L_SELECT_IF_GT && w > width) || (relation == L_SELECT_IF_LTE && w <= width) || (relation == L_SELECT_IF_GTE && w >= width)) ival = 1; break; case L_SELECT_HEIGHT: if ((relation == L_SELECT_IF_LT && h < height) || (relation == L_SELECT_IF_GT && h > height) || (relation == L_SELECT_IF_LTE && h <= height) || (relation == L_SELECT_IF_GTE && h >= height)) ival = 1; break; case L_SELECT_IF_EITHER: if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) ival = 1; break; case L_SELECT_IF_BOTH: if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) ival = 1; break; default: L_WARNING("can't get here!\n", __func__); break; } numaAddNumber(na, ival); } return na; } /*! * \brief boxaSelectByArea() * * \param[in] boxas * \param[in] area threshold value of width * height * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return boxad filtered set, or NULL on error * *
 * Notes:
 *      (1) Uses box copies in the new boxa.
 *      (2) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ BOXA * boxaSelectByArea(BOXA *boxas, l_int32 area, l_int32 relation, l_int32 *pchanged) { BOXA *boxad; NUMA *na; if (pchanged) *pchanged = FALSE; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxaGetCount(boxas) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (BOXA *)ERROR_PTR("invalid relation", __func__, NULL); /* Compute the indicator array for saving components */ na = boxaMakeAreaIndicator(boxas, area, relation); /* Filter to get output */ boxad = boxaSelectWithIndicator(boxas, na, pchanged); numaDestroy(&na); return boxad; } /*! * \brief boxaMakeAreaIndicator() * * \param[in] boxa * \param[in] area threshold value of width * height * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return na indicator array, or NULL on error * *
 * Notes:
 *      (1) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ NUMA * boxaMakeAreaIndicator(BOXA *boxa, l_int32 area, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) return (NUMA *)ERROR_PTR("boxa is empty", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", __func__, NULL); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if ((relation == L_SELECT_IF_LT && w * h < area) || (relation == L_SELECT_IF_GT && w * h > area) || (relation == L_SELECT_IF_LTE && w * h <= area) || (relation == L_SELECT_IF_GTE && w * h >= area)) ival = 1; numaAddNumber(na, ival); } return na; } /*! * \brief boxaSelectByWHRatio() * * \param[in] boxas * \param[in] ratio width/height threshold value * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return boxad filtered set, or NULL on error * *
 * Notes:
 *      (1) Uses box copies in the new boxa.
 *      (2) To keep narrow components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep wide components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ BOXA * boxaSelectByWHRatio(BOXA *boxas, l_float32 ratio, l_int32 relation, l_int32 *pchanged) { BOXA *boxad; NUMA *na; if (pchanged) *pchanged = FALSE; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (boxaGetCount(boxas) == 0) { L_WARNING("boxas is empty\n", __func__); return boxaCopy(boxas, L_COPY); } if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (BOXA *)ERROR_PTR("invalid relation", __func__, NULL); /* Compute the indicator array for saving components */ na = boxaMakeWHRatioIndicator(boxas, ratio, relation); /* Filter to get output */ boxad = boxaSelectWithIndicator(boxas, na, pchanged); numaDestroy(&na); return boxad; } /*! * \brief boxaMakeWHRatioIndicator() * * \param[in] boxa * \param[in] ratio width/height threshold value * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return na indicator array, or NULL on error * *
 * Notes:
 *      (1) To keep narrow components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep wide components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ NUMA * boxaMakeWHRatioIndicator(BOXA *boxa, l_float32 ratio, l_int32 relation) { l_int32 i, n, w, h, ival; l_float32 whratio; NUMA *na; if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", __func__, NULL); if ((n = boxaGetCount(boxa)) == 0) return (NUMA *)ERROR_PTR("boxa is empty", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", __func__, NULL); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); whratio = (l_float32)w / (l_float32)h; if ((relation == L_SELECT_IF_LT && whratio < ratio) || (relation == L_SELECT_IF_GT && whratio > ratio) || (relation == L_SELECT_IF_LTE && whratio <= ratio) || (relation == L_SELECT_IF_GTE && whratio >= ratio)) ival = 1; numaAddNumber(na, ival); } return na; } /*! * \brief boxaSelectWithIndicator() * * \param[in] boxas * \param[in] na indicator numa * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return boxad, or NULL on error * *
 * Notes:
 *      (1) Returns a copy of the boxa if no components are removed.
 *      (2) Uses box copies in the new boxa.
 *      (3) The indicator numa has values 0 (ignore) and 1 (accept).
 *      (4) If all indicator values are 0, the returned boxa is empty.
 * 
*/ BOXA * boxaSelectWithIndicator(BOXA *boxas, NUMA *na, l_int32 *pchanged) { l_int32 i, n, ival, nsave; BOX *box; BOXA *boxad; if (pchanged) *pchanged = FALSE; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!na) return (BOXA *)ERROR_PTR("na not defined", __func__, NULL); nsave = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) nsave++; } if (nsave == n) { if (pchanged) *pchanged = FALSE; return boxaCopy(boxas, L_COPY); } if (pchanged) *pchanged = TRUE; boxad = boxaCreate(nsave); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 0) continue; box = boxaGetBox(boxas, i, L_COPY); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*---------------------------------------------------------------------* * Boxa Permutation * *---------------------------------------------------------------------*/ /*! * \brief boxaPermutePseudorandom() * * \param[in] boxas input boxa * \return boxad with boxes permuted, or NULL on error * *
 * Notes:
 *      (1) This does a pseudorandom in-place permutation of the boxes.
 *      (2) The result is guaranteed not to have any boxes in their
 *          original position, but it is not very random.  If you
 *          need randomness, use boxaPermuteRandom().
 * 
*/ BOXA * boxaPermutePseudorandom(BOXA *boxas) { l_int32 n; NUMA *na; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); n = boxaGetCount(boxas); na = numaPseudorandomSequence(n, 0); boxad = boxaSortByIndex(boxas, na); numaDestroy(&na); return boxad; } /*! * \brief boxaPermuteRandom() * * \param[in] boxad [optional] can be null or equal to boxas * \param[in] boxas input boxa * \return boxad with boxes permuted, or NULL on error * *
 * Notes:
 *      (1) If boxad is null, make a copy of boxas and permute the copy.
 *          Otherwise, boxad must be equal to boxas, and the operation
 *          is done in-place.
 *      (2) If boxas is empty, return an empty boxad.
 *      (3) This does a random in-place permutation of the boxes,
 *          by swapping each box in turn with a random box.  The
 *          result is almost guaranteed not to have any boxes in their
 *          original position.
 *      (4) MSVC rand() has MAX_RAND = 2^15 - 1, so it will not do
 *          a proper permutation is the number of boxes exceeds this.
 * 
*/ BOXA * boxaPermuteRandom(BOXA *boxad, BOXA *boxas) { l_int32 i, n, index; if (!boxas) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (boxad && (boxad != boxas)) return (BOXA *)ERROR_PTR("boxad defined but in-place", __func__, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); if ((n = boxaGetCount(boxad)) == 0) return boxad; index = (l_uint32)rand() % n; index = L_MAX(1, index); boxaSwapBoxes(boxad, 0, index); for (i = 1; i < n; i++) { index = (l_uint32)rand() % n; if (index == i) index--; boxaSwapBoxes(boxad, i, index); } return boxad; } /*! * \brief boxaSwapBoxes() * * \param[in] boxa * \param[in] i, j two indices of boxes, that are to be swapped * \return 0 if OK, 1 on error */ l_ok boxaSwapBoxes(BOXA *boxa, l_int32 i, l_int32 j) { l_int32 n; BOX *box; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); if (i < 0 || i >= n) return ERROR_INT("i invalid", __func__, 1); if (j < 0 || j >= n) return ERROR_INT("j invalid", __func__, 1); if (i == j) return ERROR_INT("i == j", __func__, 1); box = boxa->box[i]; boxa->box[i] = boxa->box[j]; boxa->box[j] = box; return 0; } /*---------------------------------------------------------------------* * Boxa and Box Conversions * *---------------------------------------------------------------------*/ /*! * \brief boxaConvertToPta() * * \param[in] boxa * \param[in] ncorners 2 or 4 for the representation of each box * \return pta with %ncorners points for each box in the boxa, * or NULL on error * *
 * Notes:
 *      (1) If ncorners == 2, we select the UL and LR corners.
 *          Otherwise we save all 4 corners in this order: UL, UR, LL, LR.
 *      (2) Other boxa --> pta functions are:
 *          * boxaExtractAsPta(): allows extraction of any dimension
 *            and/or side location, with each in a separate pta.
 *          * boxaExtractCorners(): extracts any of the four corners as a pta.
 * 
*/ PTA * boxaConvertToPta(BOXA *boxa, l_int32 ncorners) { l_int32 i, n; BOX *box; PTA *pta, *pta1; if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", __func__, NULL); if (ncorners != 2 && ncorners != 4) return (PTA *)ERROR_PTR("ncorners not 2 or 4", __func__, NULL); n = boxaGetCount(boxa); if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); pta1 = boxConvertToPta(box, ncorners); ptaJoin(pta, pta1, 0, -1); boxDestroy(&box); ptaDestroy(&pta1); } return pta; } /*! * \brief ptaConvertToBoxa() * * \param[in] pta * \param[in] ncorners 2 or 4 for the representation of each box * \return boxa with one box for each 2 or 4 points in the pta, * or NULL on error * *
 * Notes:
 *      (1) For 2 corners, the order of the 2 points is UL, LR.
 *          For 4 corners, the order of points is UL, UR, LL, LR.
 *      (2) Each derived box is the minimum size containing all corners.
 * 
*/ BOXA * ptaConvertToBoxa(PTA *pta, l_int32 ncorners) { l_int32 i, n, nbox, x1, y1, x2, y2, x3, y3, x4, y4, x, y, xmax, ymax; BOX *box; BOXA *boxa; if (!pta) return (BOXA *)ERROR_PTR("pta not defined", __func__, NULL); if (ncorners != 2 && ncorners != 4) return (BOXA *)ERROR_PTR("ncorners not 2 or 4", __func__, NULL); n = ptaGetCount(pta); if (n % ncorners != 0) return (BOXA *)ERROR_PTR("size % ncorners != 0", __func__, NULL); nbox = n / ncorners; if ((boxa = boxaCreate(nbox)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", __func__, NULL); for (i = 0; i < n; i += ncorners) { ptaGetIPt(pta, i, &x1, &y1); ptaGetIPt(pta, i + 1, &x2, &y2); if (ncorners == 2) { box = boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); boxaAddBox(boxa, box, L_INSERT); continue; } ptaGetIPt(pta, i + 2, &x3, &y3); ptaGetIPt(pta, i + 3, &x4, &y4); x = L_MIN(x1, x3); y = L_MIN(y1, y2); xmax = L_MAX(x2, x4); ymax = L_MAX(y3, y4); box = boxCreate(x, y, xmax - x + 1, ymax - y + 1); boxaAddBox(boxa, box, L_INSERT); } return boxa; } /*! * \brief boxConvertToPta() * * \param[in] box * \param[in] ncorners 2 or 4 for the representation of the box * \return pta with %ncorners points, or NULL on error * *
 * Notes:
 *      (1) If ncorners == 2, we select the UL and LR corners.
 *          Otherwise we save all 4 corners in this order: UL, UR, LL, LR.
 * 
*/ PTA * boxConvertToPta(BOX *box, l_int32 ncorners) { l_int32 x, y, w, h; PTA *pta; if (!box) return (PTA *)ERROR_PTR("box not defined", __func__, NULL); if (ncorners != 2 && ncorners != 4) return (PTA *)ERROR_PTR("ncorners not 2 or 4", __func__, NULL); if ((pta = ptaCreate(ncorners)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); boxGetGeometry(box, &x, &y, &w, &h); ptaAddPt(pta, x, y); if (ncorners == 2) { ptaAddPt(pta, x + w - 1, y + h - 1); } else { ptaAddPt(pta, x + w - 1, y); ptaAddPt(pta, x, y + h - 1); ptaAddPt(pta, x + w - 1, y + h - 1); } return pta; } /*! * \brief ptaConvertToBox() * * \param[in] pta * \return box minimum containing all points in the pta, or NULL on error * *
 * Notes:
 *      (1) For 2 corners, the order of the 2 points is UL, LR.
 *          For 4 corners, the order of points is UL, UR, LL, LR.
 * 
*/ BOX * ptaConvertToBox(PTA *pta) { l_int32 n, x1, y1, x2, y2, x3, y3, x4, y4, x, y, xmax, ymax; if (!pta) return (BOX *)ERROR_PTR("pta not defined", __func__, NULL); n = ptaGetCount(pta); if (n != 2 && n != 4) return (BOX *)ERROR_PTR("n must be 2 or 4", __func__, NULL); ptaGetIPt(pta, 0, &x1, &y1); ptaGetIPt(pta, 1, &x2, &y2); if (n == 2) return boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); /* 4 corners */ ptaGetIPt(pta, 2, &x3, &y3); ptaGetIPt(pta, 3, &x4, &y4); x = L_MIN(x1, x3); y = L_MIN(y1, y2); xmax = L_MAX(x2, x4); ymax = L_MAX(y3, y4); return boxCreate(x, y, xmax - x + 1, ymax - y + 1); } /*---------------------------------------------------------------------* * Miscellaneous Boxa functions * *---------------------------------------------------------------------*/ /*! * \brief boxaGetExtent() * * \param[in] boxa * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbox [optional] minimum box containing all boxes in boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes the minimum rectangular bounding region
 *          that contains all valid boxes in a boxa.
 *      (2) The returned w and h are the minimum size image
 *          that would contain all boxes untranslated.
 *      (3) If there are no valid boxes, returned w and h are 0 and
 *          all parameters in the returned box are 0.  This
 *          is not an error, because an empty boxa is valid and
 *          boxaGetExtent() is required for serialization.
 * 
*/ l_ok boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox) { l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; if (!pw && !ph && !pbox) return ERROR_INT("no ptrs defined", __func__, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pbox) *pbox = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); xmax = ymax = 0; xmin = ymin = 100000000; found = FALSE; for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); if (w <= 0 || h <= 0) continue; found = TRUE; xmin = L_MIN(xmin, x); ymin = L_MIN(ymin, y); xmax = L_MAX(xmax, x + w); ymax = L_MAX(ymax, y + h); } if (found == FALSE) /* no valid boxes in boxa */ xmin = ymin = 0; if (pw) *pw = xmax; if (ph) *ph = ymax; if (pbox) *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); return 0; } /*! * \brief boxaGetCoverage() * * \param[in] boxa * \param[in] wc, hc dimensions of overall clipping rectangle with UL * corner at (0, 0 that is covered by the boxes. * \param[in] exactflag 1 for guaranteeing an exact result; 0 for getting * an exact result only if the boxes do not overlap * \param[out] pfract sum of box area as fraction of w * h * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The boxes in boxa are clipped to the input rectangle.
 *      (2) * When %exactflag == 1, we generate a 1 bpp pix of size
 *            wc x hc, paint all the boxes black, and count the fg pixels.
 *            This can take 1 msec on a large page with many boxes.
 *          * When %exactflag == 0, we clip each box to the wc x hc region
 *            and sum the resulting areas.  This is faster.
 *          * The results are the same when none of the boxes overlap
 *            within the wc x hc region.
 * 
*/ l_ok boxaGetCoverage(BOXA *boxa, l_int32 wc, l_int32 hc, l_int32 exactflag, l_float32 *pfract) { l_int32 i, n, x, y, w, h, sum; BOX *box, *boxc; PIX *pixt; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); if (n == 0) return ERROR_INT("no boxes in boxa", __func__, 1); if (exactflag == 0) { /* quick and dirty */ sum = 0; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if ((boxc = boxClipToRectangle(box, wc, hc)) != NULL) { boxGetGeometry(boxc, NULL, NULL, &w, &h); sum += w * h; boxDestroy(&boxc); } boxDestroy(&box); } } else { /* slower and exact */ pixt = pixCreate(wc, hc, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixt, x, y, w, h, PIX_SET, NULL, 0, 0); boxDestroy(&box); } pixCountPixels(pixt, &sum, NULL); pixDestroy(&pixt); } *pfract = (l_float32)sum / (l_float32)(wc * hc); return 0; } /*! * \brief boxaaSizeRange() * * \param[in] baa * \param[out] pminw [optional] min width of all boxes * \param[out] pmaxw [optional] max width of all boxes * \param[out] pminh [optional] min height of all boxes * \param[out] pmaxh [optional] max height of all boxes * \return 0 if OK, 1 on error */ l_ok boxaaSizeRange(BOXAA *baa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, minbw, minbh, maxbw, maxbh, i, n; BOXA *boxa; if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", __func__, 1); if (pminw) *pminw = 0; if (pminh) *pminh = 0; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!baa) return ERROR_INT("baa not defined", __func__, 1); minw = minh = 100000000; maxw = maxh = 0; n = boxaaGetCount(baa); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); boxaSizeRange(boxa, &minbw, &minbh, &maxbw, &maxbh); if (minbw < minw) minw = minbw; if (minbh < minh) minh = minbh; if (maxbw > maxw) maxw = maxbw; if (maxbh > maxh) maxh = maxbh; boxaDestroy(&boxa); } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief boxaSizeRange() * * \param[in] boxa * \param[out] pminw [optional] min width of all boxes * \param[out] pmaxw [optional] max width of all boxes * \param[out] pminh [optional] min height of all boxes * \param[out] pmaxh [optional] max height of all boxes * \return 0 if OK, 1 on error */ l_ok boxaSizeRange(BOXA *boxa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, i, n, w, h; if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", __func__, 1); if (pminw) *pminw = 0; if (pminh) *pminh = 0; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); minw = minh = 100000000; maxw = maxh = 0; n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if (w < minw) minw = w; if (h < minh) minh = h; if (w > maxw) maxw = w; if (h > maxh) maxh = h; } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief boxaLocationRange() * * \param[in] boxa * \param[out] pminx [optional] min (UL corner) x value of all boxes * \param[out] pminy [optional] min (UL corner) y value of all boxes * \param[out] pmaxx [optional] max (UL corner) x value of all boxes * \param[out] pmaxy [optional] max (UL corner) y value of all boxes * \return 0 if OK, 1 on error */ l_ok boxaLocationRange(BOXA *boxa, l_int32 *pminx, l_int32 *pminy, l_int32 *pmaxx, l_int32 *pmaxy) { l_int32 minx, miny, maxx, maxy, i, n, x, y; if (!pminx && !pminy && !pmaxx && !pmaxy) return ERROR_INT("no data can be returned", __func__, 1); if (pminx) *pminx = 0; if (pminy) *pminy = 0; if (pmaxx) *pmaxx = 0; if (pmaxy) *pmaxy = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); minx = miny = 100000000; maxx = maxy = 0; n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); if (x < minx) minx = x; if (y < miny) miny = y; if (x > maxx) maxx = x; if (y > maxy) maxy = y; } if (pminx) *pminx = minx; if (pminy) *pminy = miny; if (pmaxx) *pmaxx = maxx; if (pmaxy) *pmaxy = maxy; return 0; } /*! * \brief boxaGetSizes() * * \param[in] boxa * \param[out] pnaw [optional] widths of valid boxes * \param[out] pnah [optional] heights of valid boxes * \return 0 if OK, 1 on error */ l_ok boxaGetSizes(BOXA *boxa, NUMA **pnaw, NUMA **pnah) { l_int32 i, n, w, h; BOX *box; if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (!pnaw && !pnah) return ERROR_INT("no output requested", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetValidCount(boxa); if (pnaw) *pnaw = numaCreate(n); if (pnah) *pnah = numaCreate(n); for (i = 0; i < n; i++) { box = boxaGetValidBox(boxa, i, L_COPY); if (box) { boxGetGeometry(box, NULL, NULL, &w, &h); if (pnaw) numaAddNumber(*pnaw, w); if (pnah) numaAddNumber(*pnah, h); boxDestroy(&box); } } return 0; } /*! * \brief boxaGetArea() * * \param[in] boxa * \param[out] parea total area of all boxes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Measures the total area of the boxes, without regard to overlaps.
 * 
*/ l_ok boxaGetArea(BOXA *boxa, l_int32 *parea) { l_int32 i, n, w, h; if (!parea) return ERROR_INT("&area not defined", __func__, 1); *parea = 0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); *parea += w * h; } return 0; } /*! * \brief boxaDisplayTiled() * * \param[in] boxas * \param[in] pixa [optional] background for each box * \param[in] first index of first box * \param[in] last index of last box; use -1 to go to end * \param[in] maxwidth of output image * \param[in] linewidth width of box outlines, before scaling * \param[in] scalefactor applied to every box; use 1.0 for no scaling * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of black border added to each image; * use 0 for no border * \return pixd of tiled images of boxes, or NULL on error * *
 * Notes:
 *      (1) Displays each box separately in a tiled 32 bpp image.
 *      (2) If pixa is defined, it must have the same count as the boxa,
 *          and it will be a background over with each box is rendered.
 *          If pixa is not defined, the boxes will be rendered over
 *          blank images of identical size.
 *      (3) See pixaDisplayTiledInRows() for other parameters.
 * 
*/ PIX * boxaDisplayTiled(BOXA *boxas, PIXA *pixa, l_int32 first, l_int32 last, l_int32 maxwidth, l_int32 linewidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border) { char buf[32]; l_int32 i, n, npix, w, h, fontsize; L_BMF *bmf; BOX *box; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixat; if (!boxas) return (PIX *)ERROR_PTR("boxas not defined", __func__, NULL); boxa = boxaSaveValid(boxas, L_COPY); n = boxaGetCount(boxa); if (pixa) { npix = pixaGetCount(pixa); if (n != npix) { boxaDestroy(&boxa); return (PIX *)ERROR_PTR("boxa and pixa counts differ", __func__, NULL); } } first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) { boxaDestroy(&boxa); return (PIX *)ERROR_PTR("invalid first", __func__, NULL); } if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) { boxaDestroy(&boxa); return (PIX *)ERROR_PTR("first > last", __func__, NULL); } /* Because the bitmap font will be reduced when tiled, choose the * font size inversely with the scale factor. */ if (scalefactor > 0.8) fontsize = 6; else if (scalefactor > 0.6) fontsize = 10; else if (scalefactor > 0.4) fontsize = 14; else if (scalefactor > 0.3) fontsize = 18; else fontsize = 20; bmf = bmfCreate(NULL, fontsize); pixat = pixaCreate(n); boxaGetExtent(boxa, &w, &h, NULL); for (i = first; i <= last; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (!pixa) { pix1 = pixCreate(w, h, 32); pixSetAll(pix1); } else { pix1 = pixaGetPix(pixa, i, L_COPY); } pixSetBorderVal(pix1, 0, 0, 0, 2, 0x0000ff00); snprintf(buf, sizeof(buf), "%d", i); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0x00ff0000, L_ADD_BELOW, NULL); pixDestroy(&pix1); pixRenderBoxArb(pix2, box, linewidth, 255, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); boxDestroy(&box); } bmfDestroy(&bmf); boxaDestroy(&boxa); pixd = pixaDisplayTiledInRows(pixat, 32, maxwidth, scalefactor, background, spacing, border); pixaDestroy(&pixat); return pixd; } leptonica-1.86.0/src/boxfunc5.c000066400000000000000000002072041506303110300162450ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file boxfunc5.c *
 *
 *      Boxa sequence fitting
 *           BOXA     *boxaSmoothSequenceMedian()
 *           BOXA     *boxaWindowedMedian()
 *           BOXA     *boxaModifyWithBoxa()
 *           BOXA     *boxaReconcilePairWidth()
 *           l_int32   boxaSizeConsistency()
 *           BOXA     *boxaReconcileAllByMedian()
 *           BOXA     *boxaReconcileSidesByMedian()
 *    static void      adjustSidePlotName()  -- debug
 *           BOXA     *boxaReconcileSizeByMedian()
 *           l_int32   boxaPlotSides()   [for debugging]
 *           l_int32   boxaPlotSizes()   [for debugging]
 *           BOXA     *boxaFillSequence()
 *    static l_int32   boxaFillAll()
 *           l_int32   boxaSizeVariation()
 *           l_int32   boxaMedianDimensions()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 boxaFillAll(BOXA *boxa); static void adjustSidePlotName(char *buf, size_t size, const char *preface, l_int32 select); /*---------------------------------------------------------------------* * Boxa sequence fitting * *---------------------------------------------------------------------*/ /*! * \brief boxaSmoothSequenceMedian() * * \param[in] boxas source boxa * \param[in] halfwin half-width of sliding window; used to find median * \param[in] subflag L_USE_MINSIZE, L_USE_MAXSIZE, * L_SUB_ON_LOC_DIFF, L_SUB_ON_SIZE_DIFF, * L_USE_CAPPED_MIN, L_USE_CAPPED_MAX * \param[in] maxdiff parameter used with L_SUB_ON_LOC_DIFF, * L_SUB_ON_SIZE_DIFF, L_USE_CAPPED_MIN, * L_USE_CAPPED_MAX * \param[in] extrapixels pixels added on all sides (or subtracted * if %extrapixels < 0) when using * L_SUB_ON_LOC_DIFF and L_SUB_ON_SIZE_DIFF * \param[in] debug 1 for debug output * \return boxad fitted boxa, or NULL on error * *
 * Notes:
 *      (1) The target width of the sliding window is 2 * %halfwin + 1.
 *          If necessary, this will be reduced by boxaWindowedMedian().
 *      (2) This returns a modified version of %boxas by constructing
 *          for each input box a box that has been smoothed with windowed
 *          median filtering.  The filtering is done to each of the
 *          box sides independently, and it is computed separately for
 *          sequences of even and odd boxes.  The output %boxad is
 *          constructed from the input boxa and the filtered boxa,
 *          depending on %subflag.  See boxaModifyWithBoxa() for
 *          details on the use of %subflag, %maxdiff and %extrapixels.
 *      (3) This is useful for removing noise separately in the even
 *          and odd sets, where the box edge locations can have
 *          discontinuities but otherwise vary roughly linearly within
 *          intervals of size %halfwin or larger.
 *      (4) If you don't need to handle even and odd sets separately,
 *          just do this:
 *              boxam = boxaWindowedMedian(boxas, halfwin, debug);
 *              boxad = boxaModifyWithBoxa(boxas, boxam, subflag, maxdiff,
 *                                         extrapixels);
 *              boxaDestroy(&boxam);
 * 
*/ BOXA * boxaSmoothSequenceMedian(BOXA *boxas, l_int32 halfwin, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug) { l_int32 n; BOXA *boxae, *boxao, *boxamede, *boxamedo, *boxame, *boxamo, *boxad; PIX *pix1; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (halfwin <= 0) { L_WARNING("halfwin must be > 0; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (maxdiff < 0) { L_WARNING("maxdiff must be >= 0; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (subflag != L_USE_MINSIZE && subflag != L_USE_MAXSIZE && subflag != L_SUB_ON_LOC_DIFF && subflag != L_SUB_ON_SIZE_DIFF && subflag != L_USE_CAPPED_MIN && subflag != L_USE_CAPPED_MAX) { L_WARNING("invalid subflag; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if ((n = boxaGetCount(boxas)) < 6) { L_WARNING("need at least 6 boxes; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); if (debug) { lept_mkdir("lept/smooth"); boxaWriteDebug("/tmp/lept/smooth/boxae.ba", boxae); boxaWriteDebug("/tmp/lept/smooth/boxao.ba", boxao); } boxamede = boxaWindowedMedian(boxae, halfwin, debug); boxamedo = boxaWindowedMedian(boxao, halfwin, debug); if (debug) { boxaWriteDebug("/tmp/lept/smooth/boxamede.ba", boxamede); boxaWriteDebug("/tmp/lept/smooth/boxamedo.ba", boxamedo); } boxame = boxaModifyWithBoxa(boxae, boxamede, subflag, maxdiff, extrapixels); boxamo = boxaModifyWithBoxa(boxao, boxamedo, subflag, maxdiff, extrapixels); if (debug) { boxaWriteDebug("/tmp/lept/smooth/boxame.ba", boxame); boxaWriteDebug("/tmp/lept/smooth/boxamo.ba", boxamo); } boxad = boxaMergeEvenOdd(boxame, boxamo, 0); if (debug) { boxaPlotSides(boxas, NULL, NULL, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/smooth/plotsides1.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/smooth/plotsides2.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSizes(boxas, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/smooth/plotsizes1.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSizes(boxad, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/smooth/plotsizes2.png", pix1, IFF_PNG); pixDestroy(&pix1); } boxaDestroy(&boxae); boxaDestroy(&boxao); boxaDestroy(&boxamede); boxaDestroy(&boxamedo); boxaDestroy(&boxame); boxaDestroy(&boxamo); return boxad; } /*! * \brief boxaWindowedMedian() * * \param[in] boxas source boxa * \param[in] halfwin half width of window over which the median is found * \param[in] debug 1 for debug output * \return boxad smoothed boxa, or NULL on error * *
 * Notes:
 *      (1) This finds a set of boxes (boxad) where each edge of each box is
 *          a windowed median smoothed value to the edges of the
 *          input set of boxes (boxas).
 *      (2) Invalid input boxes are filled from nearby ones.
 *      (3) The returned boxad can then be used in boxaModifyWithBoxa()
 *          to selectively change the boxes in the source boxa.
 * 
*/ BOXA * boxaWindowedMedian(BOXA *boxas, l_int32 halfwin, l_int32 debug) { l_int32 n, i, left, top, right, bot; BOX *box; BOXA *boxaf, *boxad; NUMA *nal, *nat, *nar, *nab, *naml, *namt, *namr, *namb; PIX *pix1; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if ((n = boxaGetCount(boxas)) < 3) { L_WARNING("less than 3 boxes; returning a copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (halfwin <= 0) { L_WARNING("halfwin must be > 0; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } /* Fill invalid boxes in the input sequence */ if ((boxaf = boxaFillSequence(boxas, L_USE_ALL_BOXES, debug)) == NULL) return (BOXA *)ERROR_PTR("filled boxa not made", __func__, NULL); /* Get the windowed median output from each of the sides */ boxaExtractAsNuma(boxaf, &nal, &nat, &nar, &nab, NULL, NULL, 0); naml = numaWindowedMedian(nal, halfwin); namt = numaWindowedMedian(nat, halfwin); namr = numaWindowedMedian(nar, halfwin); namb = numaWindowedMedian(nab, halfwin); n = boxaGetCount(boxaf); boxad = boxaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naml, i, &left); numaGetIValue(namt, i, &top); numaGetIValue(namr, i, &right); numaGetIValue(namb, i, &bot); box = boxCreate(left, top, right - left + 1, bot - top + 1); boxaAddBox(boxad, box, L_INSERT); } if (debug) { lept_mkdir("lept/windowed"); boxaPlotSides(boxaf, NULL, NULL, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/windowed/plotsides1.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/windowed/plotsides2.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSizes(boxaf, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/windowed/plotsizes1.png", pix1, IFF_PNG); pixDestroy(&pix1); boxaPlotSizes(boxad, NULL, NULL, NULL, &pix1); pixWrite("/tmp/lept/windowed/plotsizes2.png", pix1, IFF_PNG); pixDestroy(&pix1); } boxaDestroy(&boxaf); numaDestroy(&nal); numaDestroy(&nat); numaDestroy(&nar); numaDestroy(&nab); numaDestroy(&naml); numaDestroy(&namt); numaDestroy(&namr); numaDestroy(&namb); return boxad; } /*! * \brief boxaModifyWithBoxa() * * \param[in] boxas * \param[in] boxam boxa with boxes used to modify those in boxas * \param[in] subflag L_USE_MINSIZE, L_USE_MAXSIZE, * L_SUB_ON_LOC_DIFF, L_SUB_ON_SIZE_DIFF, * L_USE_CAPPED_MIN, L_USE_CAPPED_MAX * \param[in] maxdiff parameter used with L_SUB_ON_LOC_DIFF, * L_SUB_ON_SIZE_DIFF, L_USE_CAPPED_MIN, * L_USE_CAPPED_MAX * \param[in] extrapixels pixels added on all sides (or subtracted * if %extrapixels < 0) when using * L_SUB_ON_LOC_DIFF and L_SUB_ON_SIZE_DIFF * \return boxad result after adjusting boxes in boxas, or NULL on error. * *
 * Notes:
 *      (1) This takes two input boxa (boxas, boxam) and constructs boxad,
 *          where each box in boxad is generated from the corresponding
 *          boxes in boxas and boxam.  The rule for constructing each
 *          output box depends on %subflag and %maxdiff.  Let boxs be
 *          a box from %boxas and boxm be a box from %boxam.
 *          * If %subflag == L_USE_MINSIZE: the output box is the intersection
 *            of the two input boxes.
 *          * If %subflag == L_USE_MAXSIZE: the output box is the union of the
 *            two input boxes; i.e., the minimum bounding rectangle for the
 *            two input boxes.
 *          * If %subflag == L_SUB_ON_LOC_DIFF: each side of the output box
 *            is found separately from the corresponding side of boxs and boxm.
 *            Use the boxm side, expanded by %extrapixels, if greater than
 *            %maxdiff pixels from the boxs side.
 *          * If %subflag == L_SUB_ON_SIZE_DIFF: the sides of the output box
 *            are determined in pairs from the width and height of boxs
 *            and boxm.  If the boxm width differs by more than %maxdiff
 *            pixels from boxs, use the boxm left and right sides,
 *            expanded by %extrapixels.  Ditto for the height difference.
 *          For the last two flags, each side of the output box is found
 *          separately from the corresponding side of boxs and boxm,
 *          according to these rules, where "smaller"("bigger") mean in a
 *          direction that decreases(increases) the size of the output box:
 *          * If %subflag == L_USE_CAPPED_MIN: use the Min of boxm
 *            with the Max of (boxs, boxm +- %maxdiff), where the sign
 *            is adjusted to make the box smaller (e.g., use "+" on left side).
 *          * If %subflag == L_USE_CAPPED_MAX: use the Max of boxm
 *            with the Min of (boxs, boxm +- %maxdiff), where the sign
 *            is adjusted to make the box bigger (e.g., use "-" on left side).
 *          Use of the last 2 flags is further explained in (3) and (4).
 *      (2) boxas and boxam must be the same size.  If boxam == NULL,
 *          this returns a copy of boxas with a warning.
 *      (3) If %subflag == L_SUB_ON_LOC_DIFF, use boxm for each side
 *          where the corresponding sides differ by more than %maxdiff.
 *          Two extreme cases:
 *          (a) set %maxdiff == 0 to use only values from boxam in boxad.
 *          (b) set %maxdiff == 10000 to ignore all values from boxam;
 *              then boxad will be the same as boxas.
 *      (4) If %subflag == L_USE_CAPPED_MAX: use boxm if boxs is smaller;
 *          use boxs if boxs is bigger than boxm by an amount up to %maxdiff;
 *          and use boxm +- %maxdiff (the 'capped' value) if boxs is
 *          bigger than boxm by an amount larger than %maxdiff.
 *          Similarly, with interchange of Min/Max and sign of %maxdiff,
 *          for %subflag == L_USE_CAPPED_MIN.
 *      (5) If either of corresponding boxes in boxas and boxam is invalid,
 *          an invalid box is copied to the result.
 *      (6) Typical input for boxam may be the output of boxaLinearFit().
 *          where outliers have been removed and each side is LS fit to a line.
 *      (7) Unlike boxaAdjustWidthToTarget() and boxaAdjustHeightToTarget(),
 *          this uses two boxes and does not specify target dimensions.
 * 
*/ BOXA * boxaModifyWithBoxa(BOXA *boxas, BOXA *boxam, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels) { l_int32 n, i, ls, ts, rs, bs, ws, hs, lm, tm, rm, bm, wm, hm, ld, td, rd, bd; BOX *boxs, *boxm, *boxd, *boxempty; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (!boxam) { L_WARNING("boxam not defined; returning copy", __func__); return boxaCopy(boxas, L_COPY); } if (subflag != L_USE_MINSIZE && subflag != L_USE_MAXSIZE && subflag != L_SUB_ON_LOC_DIFF && subflag != L_SUB_ON_SIZE_DIFF && subflag != L_USE_CAPPED_MIN && subflag != L_USE_CAPPED_MAX) { L_WARNING("invalid subflag; returning copy", __func__); return boxaCopy(boxas, L_COPY); } n = boxaGetCount(boxas); if (n != boxaGetCount(boxam)) { L_WARNING("boxas and boxam sizes differ; returning copy", __func__); return boxaCopy(boxas, L_COPY); } boxad = boxaCreate(n); boxempty = boxCreate(0, 0, 0, 0); /* placeholders */ for (i = 0; i < n; i++) { boxs = boxaGetValidBox(boxas, i, L_CLONE); boxm = boxaGetValidBox(boxam, i, L_CLONE); if (!boxs || !boxm) { boxaAddBox(boxad, boxempty, L_COPY); } else { boxGetGeometry(boxs, &ls, &ts, &ws, &hs); boxGetGeometry(boxm, &lm, &tm, &wm, &hm); rs = ls + ws - 1; bs = ts + hs - 1; rm = lm + wm - 1; bm = tm + hm - 1; if (subflag == L_USE_MINSIZE) { ld = L_MAX(ls, lm); rd = L_MIN(rs, rm); td = L_MAX(ts, tm); bd = L_MIN(bs, bm); } else if (subflag == L_USE_MAXSIZE) { ld = L_MIN(ls, lm); rd = L_MAX(rs, rm); td = L_MIN(ts, tm); bd = L_MAX(bs, bm); } else if (subflag == L_SUB_ON_LOC_DIFF) { ld = (L_ABS(lm - ls) <= maxdiff) ? ls : lm - extrapixels; td = (L_ABS(tm - ts) <= maxdiff) ? ts : tm - extrapixels; rd = (L_ABS(rm - rs) <= maxdiff) ? rs : rm + extrapixels; bd = (L_ABS(bm - bs) <= maxdiff) ? bs : bm + extrapixels; } else if (subflag == L_SUB_ON_SIZE_DIFF) { ld = (L_ABS(wm - ws) <= maxdiff) ? ls : lm - extrapixels; td = (L_ABS(hm - hs) <= maxdiff) ? ts : tm - extrapixels; rd = (L_ABS(wm - ws) <= maxdiff) ? rs : rm + extrapixels; bd = (L_ABS(hm - hs) <= maxdiff) ? bs : bm + extrapixels; } else if (subflag == L_USE_CAPPED_MIN) { ld = L_MAX(lm, L_MIN(ls, lm + maxdiff)); td = L_MAX(tm, L_MIN(ts, tm + maxdiff)); rd = L_MIN(rm, L_MAX(rs, rm - maxdiff)); bd = L_MIN(bm, L_MAX(bs, bm - maxdiff)); } else { /* subflag == L_USE_CAPPED_MAX */ ld = L_MIN(lm, L_MAX(ls, lm - maxdiff)); td = L_MIN(tm, L_MAX(ts, tm - maxdiff)); rd = L_MAX(rm, L_MIN(rs, rm + maxdiff)); bd = L_MAX(bm, L_MIN(bs, bm + maxdiff)); } boxd = boxCreate(ld, td, rd - ld + 1, bd - td + 1); boxaAddBox(boxad, boxd, L_INSERT); } boxDestroy(&boxs); boxDestroy(&boxm); } boxDestroy(&boxempty); return boxad; } /*! * \brief boxaReconcilePairWidth() * * \param[in] boxas * \param[in] delw threshold on adjacent width difference * \param[in] op L_ADJUST_CHOOSE_MIN, L_ADJUST_CHOOSE_MAX * \param[in] factor > 0.0, typically near 1.0 * \param[in] na [optional] indicator array allowing change * \return boxad adjusted, or a copy of boxas on error * *
 * Notes:
 *      (1) This reconciles differences in the width of adjacent boxes,
 *          by moving one side of one of the boxes in each pair.
 *          If the widths in the pair differ by more than some
 *          threshold, move either the left side for even boxes or
 *          the right side for odd boxes, depending on if we're choosing
 *          the min or max.  If choosing min, the width of the max is
 *          set to factor * (width of min).  If choosing max, the width
 *          of the min is set to factor * (width of max).
 *      (2) If %na exists, it is an indicator array corresponding to the
 *          boxes in %boxas.  If %na != NULL, only boxes with an
 *          indicator value of 1 are allowed to adjust; otherwise,
 *          all boxes can adjust.
 *      (3) Typical input might be the output of boxaSmoothSequenceMedian(),
 *          where even and odd boxa have been independently regulated.
 * 
*/ BOXA * boxaReconcilePairWidth(BOXA *boxas, l_int32 delw, l_int32 op, l_float32 factor, NUMA *na) { l_int32 i, ne, no, nmin, xe, we, xo, wo, inde, indo, x, w; BOX *boxe, *boxo; BOXA *boxae, *boxao, *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (factor <= 0.0) { L_WARNING("invalid factor; setting to 1.0\n", __func__); factor = 1.0; } /* Taking the boxes in pairs, if the difference in width reaches * the threshold %delw, adjust the left or right side of one * of the pair. */ boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); ne = boxaGetCount(boxae); no = boxaGetCount(boxao); nmin = L_MIN(ne, no); for (i = 0; i < nmin; i++) { /* Set indicator values */ if (na) { numaGetIValue(na, 2 * i, &inde); numaGetIValue(na, 2 * i + 1, &indo); } else { inde = indo = 1; } if (inde == 0 && indo == 0) continue; boxe = boxaGetBox(boxae, i, L_CLONE); boxo = boxaGetBox(boxao, i, L_CLONE); boxGetGeometry(boxe, &xe, NULL, &we, NULL); boxGetGeometry(boxo, &xo, NULL, &wo, NULL); if (we == 0 || wo == 0) { /* if either is invalid; skip */ boxDestroy(&boxe); boxDestroy(&boxo); continue; } else if (L_ABS(we - wo) > delw) { if (op == L_ADJUST_CHOOSE_MIN) { if (we > wo && inde == 1) { /* move left side of even to the right */ w = factor * wo; x = xe + (we - w); boxSetGeometry(boxe, x, -1, w, -1); } else if (we < wo && indo == 1) { /* move right side of odd to the left */ w = factor * we; boxSetGeometry(boxo, -1, -1, w, -1); } } else { /* maximize width */ if (we < wo && inde == 1) { /* move left side of even to the left */ w = factor * wo; x = L_MAX(0, xe + (we - w)); w = we + (xe - x); /* covers both cases for the max */ boxSetGeometry(boxe, x, -1, w, -1); } else if (we > wo && indo == 1) { /* move right side of odd to the right */ w = factor * we; boxSetGeometry(boxo, -1, -1, w, -1); } } } boxDestroy(&boxe); boxDestroy(&boxo); } boxad = boxaMergeEvenOdd(boxae, boxao, 0); boxaDestroy(&boxae); boxaDestroy(&boxao); return boxad; } /*! * \brief boxaSizeConsistency() * * \param[in] boxas of size >= 10 * \param[in] type L_CHECK_WIDTH, L_CHECK_HEIGHT * \param[in] threshp threshold for pairwise fractional variation * \param[in] threshm threshold for fractional variation from median * \param[out] pfvarp [optional] average fractional pairwise variation * \param[out] pfvarm [optional] average fractional median variation * \param[out] psame decision for uniformity of page size (1, 0, -1) * *
 * Notes:
 *      (1) This evaluates a boxa for particular types of dimensional
 *          variation.  Select either width or height variation.  Then
 *          it returns two numbers: one is based on pairwise (even/odd)
 *          variation; the other is based on the average variation
 *          from the boxa median.
 *      (2) For the pairwise variation, get the fraction of the absolute
 *          difference in dimension of each pair of boxes, and take
 *          the average value.  The median variation is simply the
 *          the average of the fractional deviation from the median
 *          of all the boxes.
 *      (3) Use 0 for default values of %threshp and %threshm.  They are
 *            threshp:  0.02
 *            threshm:  0.015
 *      (4) The intended application is that the boxes are a sequence of
 *          page regions in a book scan, and we calculate two numbers
 *          that can give an indication if the pages are approximately
 *          the same size.  The pairwise variation should be small if
 *          the boxes are correctly calculated.  If there are a
 *          significant number of random or systematic outliers, the
 *          pairwise variation will be large, and no decision will be made
 *          (i.e., return same == -1).  Here are the possible outcomes:
 *            Pairwise Var    Median Var    Decision
 *            ------------    ----------    --------
 *            small           small         same size  (1)
 *            small           large         different size  (0)
 *            large           small/large   unknown   (-1)
 * 
*/ l_ok boxaSizeConsistency(BOXA *boxas, l_int32 type, l_float32 threshp, l_float32 threshm, l_float32 *pfvarp, l_float32 *pfvarm, l_int32 *psame) { l_int32 i, n, bw1, bh1, bw2, bh2, npairs; l_float32 ave, fdiff, sumdiff, med, fvarp, fvarm; NUMA *na1; if (pfvarp) *pfvarp = 0.0; if (pfvarm) *pfvarm = 0.0; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = -1; if (!boxas) return ERROR_INT("boxas not defined", __func__, 1); if (boxaGetValidCount(boxas) < 6) return ERROR_INT("need a least 6 valid boxes", __func__, 1); if (type != L_CHECK_WIDTH && type != L_CHECK_HEIGHT) return ERROR_INT("invalid type", __func__, 1); if (threshp < 0.0 || threshp >= 0.5) return ERROR_INT("invalid threshp", __func__, 1); if (threshm < 0.0 || threshm >= 0.5) return ERROR_INT("invalid threshm", __func__, 1); if (threshp == 0.0) threshp = 0.02f; if (threshm == 0.0) threshm = 0.015f; /* Evaluate pairwise variation */ n = boxaGetCount(boxas); na1 = numaCreate(0); for (i = 0, npairs = 0, sumdiff = 0; i < n - 1; i += 2) { boxaGetBoxGeometry(boxas, i, NULL, NULL, &bw1, &bh1); boxaGetBoxGeometry(boxas, i + 1, NULL, NULL, &bw2, &bh2); if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0) continue; npairs++; if (type == L_CHECK_WIDTH) { ave = (bw1 + bw2) / 2.0; fdiff = L_ABS(bw1 - bw2) / ave; numaAddNumber(na1, bw1); numaAddNumber(na1, bw2); } else { /* type == L_CHECK_HEIGHT) */ ave = (bh1 + bh2) / 2.0; fdiff = L_ABS(bh1 - bh2) / ave; numaAddNumber(na1, bh1); numaAddNumber(na1, bh2); } sumdiff += fdiff; } fvarp = sumdiff / npairs; if (pfvarp) *pfvarp = fvarp; /* Evaluate the average abs fractional deviation from the median */ numaGetMedian(na1, &med); if (med == 0.0) { L_WARNING("median value is 0\n", __func__); } else { numaGetMeanDevFromMedian(na1, med, &fvarm); fvarm /= med; if (pfvarm) *pfvarm = fvarm; } numaDestroy(&na1); /* Make decision */ if (fvarp < threshp && fvarm < threshm) *psame = 1; else if (fvarp < threshp && fvarm > threshm) *psame = 0; else *psame = -1; /* unknown */ return 0; } /*! * \brief boxaReconcileAllByMedian() * * \param[in] boxas containing at least 6 valid boxes * \param[in] select1 L_ADJUST_LEFT_AND_RIGHT or L_ADJUST_SKIP * \param[in] select2 L_ADJUST_TOP_AND_BOT or L_ADJUST_SKIP * \param[in] thresh threshold number of pixels to make adjustment * \param[in] extra extra pixels to add beyond median value * \param[in] pixadb use NULL to skip debug output * \return boxad possibly adjusted from boxas; a copy of boxas on error * *
 * Notes:
 *      (1) This uses boxaReconcileSidesByMedian() to reconcile
 *          the left-and-right and/or top-and-bottom sides of the
 *          even and odd boxes, separately.
 *      (2) See boxaReconcileSidesByMedian() for use of %thresh and %extra.
 *      (3) If all box sides are within %thresh of the median value,
 *          the returned box will be identical to %boxas.
 * 
*/ BOXA * boxaReconcileAllByMedian(BOXA *boxas, l_int32 select1, l_int32 select2, l_int32 thresh, l_int32 extra, PIXA *pixadb) { l_int32 ncols; BOXA *boxa1e, *boxa1o, *boxa2e, *boxa2o, *boxa3e, *boxa3o, *boxad; PIX *pix1; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (select1 != L_ADJUST_LEFT_AND_RIGHT && select1 != L_ADJUST_SKIP) { L_WARNING("invalid select1; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (select2 != L_ADJUST_TOP_AND_BOT && select2 != L_ADJUST_SKIP) { L_WARNING("invalid select2; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (thresh < 0) { L_WARNING("thresh must be >= 0; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (boxaGetValidCount(boxas) < 3) { L_WARNING("need at least 3 valid boxes; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } /* Adjust even and odd box sides separately */ boxaSplitEvenOdd(boxas, 0, &boxa1e, &boxa1o); ncols = 1; if (select1 == L_ADJUST_LEFT_AND_RIGHT) { ncols += 2; boxa2e = boxaReconcileSidesByMedian(boxa1e, select1, thresh, extra, pixadb); } else { boxa2e = boxaCopy(boxa1e, L_COPY); } if (select2 == L_ADJUST_TOP_AND_BOT) { ncols += 2; boxa3e = boxaReconcileSidesByMedian(boxa2e, select2, thresh, extra, pixadb); } else { boxa3e = boxaCopy(boxa2e, L_COPY); } if (select1 == L_ADJUST_LEFT_AND_RIGHT) boxa2o = boxaReconcileSidesByMedian(boxa1o, select1, thresh, extra, pixadb); else boxa2o = boxaCopy(boxa1o, L_COPY); if (select2 == L_ADJUST_TOP_AND_BOT) boxa3o = boxaReconcileSidesByMedian(boxa2o, select2, thresh, extra, pixadb); else boxa3o = boxaCopy(boxa2o, L_COPY); boxad = boxaMergeEvenOdd(boxa3e, boxa3o, 0); /* This generates 2 sets of 3 or 5 plots in a row, depending * on whether select1 and select2 are true (not skipping). * The top row is for even boxes; the bottom row is for odd boxes. */ if (pixadb) { lept_mkdir("lept/boxa"); pix1 = pixaDisplayTiledInColumns(pixadb, ncols, 1.0, 30, 2); pixWrite("/tmp/lept/boxa/recon_sides.png", pix1, IFF_PNG); pixDestroy(&pix1); } boxaDestroy(&boxa1e); boxaDestroy(&boxa1o); boxaDestroy(&boxa2e); boxaDestroy(&boxa2o); boxaDestroy(&boxa3e); boxaDestroy(&boxa3o); return boxad; } /*! * \brief boxaReconcileSidesByMedian() * * \param[in] boxas containing at least 3 valid boxes * \param[in] select L_ADJUST_LEFT, L_ADJUST_RIGHT, etc. * \param[in] thresh threshold number of pixels to make adjustment * \param[in] extra extra pixels to add beyond median value * \param[in] pixadb use NULL to skip debug output * \return boxad possibly adjusted from boxas; a copy of boxas on error * *
 * Notes:
 *      (1) This modifies individual box sides if their location differs
 *          significantly (>= %thresh) from the median value.
 *      (2) %select specifies which sides are to be checked.
 *      (3) %thresh specifies the tolerance for different side locations.
 *          Any box side that differs from the median by this much will
 *          be set to the median value, plus the %extra amount.
 *      (4) If %extra is positive, the box dimensions are expanded.
 *          For example, for the left side, a positive %extra results in
 *          moving the left side farther to the left (i.e., in a negative
 *          direction).
 *      (5) If all box sides are within %thresh - 1 of the median value,
 *          the returned box will be identical to %boxas.
 *      (6) N.B. If you expect that even and odd box sides should be
 *          significantly different, this function must be called separately
 *          on the even and odd boxes in %boxas.  Note also that the
 *          higher level function boxaReconcileAllByMedian() handles the
 *          even and odd box sides separately.
 * 
*/ BOXA * boxaReconcileSidesByMedian(BOXA *boxas, l_int32 select, l_int32 thresh, l_int32 extra, PIXA *pixadb) { char buf[128]; l_int32 i, n, diff; l_int32 left, right, top, bot, medleft, medright, medtop, medbot; BOX *box; BOXA *boxa1, *boxad; PIX *pix; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (select != L_ADJUST_LEFT && select != L_ADJUST_RIGHT && select != L_ADJUST_TOP && select != L_ADJUST_BOT && select != L_ADJUST_LEFT_AND_RIGHT && select != L_ADJUST_TOP_AND_BOT) { L_WARNING("invalid select; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (thresh < 0) { L_WARNING("thresh must be >= 0; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (boxaGetValidCount(boxas) < 3) { L_WARNING("need at least 3 valid boxes; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (select == L_ADJUST_LEFT_AND_RIGHT) { boxa1 = boxaReconcileSidesByMedian(boxas, L_ADJUST_LEFT, thresh, extra, pixadb); boxad = boxaReconcileSidesByMedian(boxa1, L_ADJUST_RIGHT, thresh, extra, pixadb); boxaDestroy(&boxa1); return boxad; } if (select == L_ADJUST_TOP_AND_BOT) { boxa1 = boxaReconcileSidesByMedian(boxas, L_ADJUST_TOP, thresh, extra, pixadb); boxad = boxaReconcileSidesByMedian(boxa1, L_ADJUST_BOT, thresh, extra, pixadb); boxaDestroy(&boxa1); return boxad; } if (pixadb) { l_int32 ndb = pixaGetCount(pixadb); if (ndb == 0 || ndb == 5) { /* first of even and odd box sets */ adjustSidePlotName(buf, sizeof(buf), "init", select); boxaPlotSides(boxas, buf, NULL, NULL, NULL, NULL, &pix); pixaAddPix(pixadb, pix, L_INSERT); } } n = boxaGetCount(boxas); boxad = boxaCreate(n); if (select == L_ADJUST_LEFT) { boxaGetMedianVals(boxas, &medleft, NULL, NULL, NULL, NULL, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxGetSideLocations(box, &left, NULL, NULL, NULL); diff = medleft - left; if (L_ABS(diff) >= thresh) boxAdjustSides(box, box, diff - extra, 0, 0, 0); boxaAddBox(boxad, box, L_INSERT); } } else if (select == L_ADJUST_RIGHT) { boxaGetMedianVals(boxas, NULL, NULL, &medright, NULL, NULL, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxGetSideLocations(box, NULL, &right, NULL, NULL); diff = medright - right; if (L_ABS(diff) >= thresh) boxAdjustSides(box, box, 0, diff + extra, 0, 0); boxaAddBox(boxad, box, L_INSERT); } } else if (select == L_ADJUST_TOP) { boxaGetMedianVals(boxas, NULL, &medtop, NULL, NULL, NULL, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxGetSideLocations(box, NULL, NULL, &top, NULL); diff = medtop - top; if (L_ABS(diff) >= thresh) boxAdjustSides(box, box, 0, 0, diff - extra, 0); boxaAddBox(boxad, box, L_INSERT); } } else { /* select == L_ADJUST_BOT */ boxaGetMedianVals(boxas, NULL, NULL, NULL, &medbot, NULL, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxGetSideLocations(box, NULL, NULL, NULL, &bot); diff = medbot - bot; if (L_ABS(diff) >= thresh) boxAdjustSides(box, box, 0, 0, 0, diff + extra); boxaAddBox(boxad, box, L_INSERT); } } if (pixadb) { adjustSidePlotName(buf, sizeof(buf), "final", select); boxaPlotSides(boxad, buf, NULL, NULL, NULL, NULL, &pix); pixaAddPix(pixadb, pix, L_INSERT); } return boxad; } static void adjustSidePlotName(char *buf, size_t size, const char *preface, l_int32 select) { stringCopy(buf, preface, size - 8); if (select == L_ADJUST_LEFT) stringCat(buf, size, "-left"); else if (select == L_ADJUST_RIGHT) stringCat(buf, size, "-right"); else if (select == L_ADJUST_TOP) stringCat(buf, size, "-top"); else if (select == L_ADJUST_BOT) stringCat(buf, size, "-bot"); } /*! * \brief boxaReconcileSizeByMedian() * * \param[in] boxas containing at least 6 valid boxes * \param[in] type L_CHECK_WIDTH, L_CHECK_HEIGHT, L_CHECK_BOTH * \param[in] dfract threshold fraction of dimensional variation from * median; in range (0 ... 1); typ. about 0.05. * \param[in] sfract threshold fraction of side variation from median; * in range (0 ... 1); typ. about 0.04. * \param[in] factor expansion for fixed box beyond median width; * should be near 1.0. * \param[out] pnadelw [optional] diff from median width for boxes * above threshold * \param[out] pnadelh [optional] diff from median height for boxes * above threshold * \param[out] pratiowh [optional] ratio of median width/height of boxas * \return boxad possibly adjusted from boxas; a copy of boxas on error * *
 * Notes:
 *      (1) The basic idea is to identify significant differences in box
 *          dimension (either width or height) and modify the outlier boxes.
 *      (2) %type specifies if we are reconciling the width, height or both.
 *      (3) %dfract specifies the tolerance for different dimensions. Any
 *          box with a fractional difference from the median size that
 *          exceeds %dfract will be altered.
 *      (4) %sfract specifies the tolerance for different side locations.
 *          If a box has been marked by (3) for alteration, any side
 *          location that differs from the median side location by
 *          more than %sfract of the median dimension (medw or medh)
 *          will be moved.
 *      (5) Median width and height are found for all valid boxes (i.e.,
 *          for all boxes with width and height > 0.
 *          Median side locations are found separately for even and odd boxes,
 *          using only boxes that are "inliers"; i.e., that have been
 *          found by (3) to be within tolerance for width or height.
 *      (6) If all box dimensions are within threshold of the median size,
 *          just return a copy.  Otherwise, box sides of the outliers
 *          will be adjusted.
 *      (7) Using %sfract, sides that are sufficiently far from the median
 *          are first moved to the median value.  Then they are moved
 *          together (in or out) so that the final box dimension
 *          is %factor times the median dimension.
 *      (8) The arrays that are the initial deviation from median size
 *          (width and height) are optionally returned.  Also optionally
 *          returned is the median w/h asperity ratio of the input %boxas.
 * 
*/ BOXA * boxaReconcileSizeByMedian(BOXA *boxas, l_int32 type, l_float32 dfract, l_float32 sfract, l_float32 factor, NUMA **pnadelw, NUMA **pnadelh, l_float32 *pratiowh) { l_int32 i, n, ne, no, outfound, isvalid, ind, del, maxdel; l_int32 medw, medh, bw, bh, left, right, top, bot; l_int32 medleft, medlefte, medlefto, medright, medrighte, medrighto; l_int32 medtop, medtope, medtopo, medbot, medbote, medboto; l_float32 brat; BOX *box; BOXA *boxa1, *boxae, *boxao, *boxad; NUMA *naind, *nadelw, *nadelh; if (pnadelw) *pnadelw = NULL; if (pnadelh) *pnadelh = NULL; if (pratiowh) *pratiowh = 0.0; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (type != L_CHECK_WIDTH && type != L_CHECK_HEIGHT && type != L_CHECK_BOTH) { L_WARNING("invalid type; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (dfract <= 0.0 || dfract >= 0.5) { L_WARNING("invalid dimensional fract; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (sfract <= 0.0 || sfract >= 0.5) { L_WARNING("invalid side fract; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } if (factor < 0.8 || factor > 1.25) L_WARNING("factor %5.3f is typ. closer to 1.0\n", __func__, factor); if (boxaGetValidCount(boxas) < 6) { L_WARNING("need at least 6 valid boxes; returning copy\n", __func__); return boxaCopy(boxas, L_COPY); } /* If reconciling both width and height, optionally return array of * median deviations and even/odd ratio for width measurements */ if (type == L_CHECK_BOTH) { boxa1 = boxaReconcileSizeByMedian(boxas, L_CHECK_WIDTH, dfract, sfract, factor, pnadelw, NULL, pratiowh); boxad = boxaReconcileSizeByMedian(boxa1, L_CHECK_HEIGHT, dfract, sfract, factor, NULL, pnadelh, NULL); boxaDestroy(&boxa1); return boxad; } n = boxaGetCount(boxas); naind = numaCreate(n); /* outlier indicator array */ boxae = boxaCreate(0); /* even inliers */ boxao = boxaCreate(0); /* odd inliers */ outfound = FALSE; if (type == L_CHECK_WIDTH) { boxaMedianDimensions(boxas, &medw, &medh, NULL, NULL, NULL, NULL, &nadelw, NULL); if (pratiowh) { *pratiowh = (l_float32)medw / (l_float32)medh; L_INFO("median ratio w/h = %5.3f\n", __func__, *pratiowh); } if (pnadelw) *pnadelw = nadelw; else numaDestroy(&nadelw); /* Check for outliers; assemble inliers */ for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxas, i, L_COPY)) == NULL) { numaAddNumber(naind, 0); continue; } boxGetGeometry(box, NULL, NULL, &bw, NULL); brat = (l_float32)bw / (l_float32)medw; if (brat < 1.0 - dfract || brat > 1.0 + dfract) { outfound = TRUE; numaAddNumber(naind, 1); boxDestroy(&box); } else { /* add to inliers */ numaAddNumber(naind, 0); if (i % 2 == 0) boxaAddBox(boxae, box, L_INSERT); else boxaAddBox(boxao, box, L_INSERT); } } if (!outfound) { /* nothing to do */ numaDestroy(&naind); boxaDestroy(&boxae); boxaDestroy(&boxao); L_INFO("no width outlier boxes found\n", __func__); return boxaCopy(boxas, L_COPY); } /* Get left/right parameters from inliers. Handle the case * where there are no inliers for one of the sets. For example, * when all the even boxes have a different dimension from * the odd boxes, and the median arbitrarily gets assigned * to the even boxes, there are no odd inliers; in that case, * use the even inliers sides to decide whether to adjust * the left or the right sides of individual outliers. */ L_INFO("fixing width of outlier boxes\n", __func__); medlefte = medrighte = medlefto = medrighto = 0; if ((ne = boxaGetValidCount(boxae)) > 0) boxaGetMedianVals(boxae, &medlefte, NULL, &medrighte, NULL, NULL, NULL); if ((no = boxaGetValidCount(boxao)) > 0) boxaGetMedianVals(boxao, &medlefto, NULL, &medrighto, NULL, NULL, NULL); if (ne == 0) { /* use odd inliers values for both */ medlefte = medlefto; medrighte = medrighto; } else if (no == 0) { /* use even inliers values for both */ medlefto = medlefte; medrighto = medrighte; } /* Adjust the left and/or right sides of outliers. * For each box that is a dimensional outlier, consider each side. * Any side that differs fractionally from the median value * by more than %sfract times the median width (medw) is set to * the median value for that side. Then both sides are moved * an equal distance in or out to make w = %factor * medw. */ boxad = boxaCreate(n); maxdel = (l_int32)(sfract * medw + 0.5); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxIsValid(box, &isvalid); numaGetIValue(naind, i, &ind); medleft = (i % 2 == 0) ? medlefte : medlefto; medright = (i % 2 == 0) ? medrighte : medrighto; if (ind == 1 && isvalid) { /* adjust sides */ boxGetSideLocations(box, &left, &right, NULL, NULL); if (L_ABS(left - medleft) > maxdel) left = medleft; if (L_ABS(right - medright) > maxdel) right = medright; del = (l_int32)(factor * medw - (right - left)) / 2; boxSetSide(box, L_SET_LEFT, left - del, 0); boxSetSide(box, L_SET_RIGHT, right + del, 0); } boxaAddBox(boxad, box, L_INSERT); } } else { /* L_CHECK_HEIGHT */ boxaMedianDimensions(boxas, &medw, &medh, NULL, NULL, NULL, NULL, NULL, &nadelh); if (pratiowh) { *pratiowh = (l_float32)medw / (l_float32)medh; L_INFO("median ratio w/h = %5.3f\n", __func__, *pratiowh); } if (pnadelh) *pnadelh = nadelh; else numaDestroy(&nadelh); /* Check for outliers; assemble inliers */ for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxas, i, L_COPY)) == NULL) { numaAddNumber(naind, 0); continue; } boxGetGeometry(box, NULL, NULL, NULL, &bh); brat = (l_float32)bh / (l_float32)medh; if (brat < 1.0 - dfract || brat > 1.0 + dfract) { outfound = TRUE; numaAddNumber(naind, 1); boxDestroy(&box); } else { /* add to inliers */ numaAddNumber(naind, 0); if (i % 2 == 0) boxaAddBox(boxae, box, L_INSERT); else boxaAddBox(boxao, box, L_INSERT); } } if (!outfound) { /* nothing to do */ numaDestroy(&naind); boxaDestroy(&boxae); boxaDestroy(&boxao); L_INFO("no height outlier boxes found\n", __func__); return boxaCopy(boxas, L_COPY); } /* Get top/bot parameters from inliers. Handle the case * where there are no inliers for one of the sets. For example, * when all the even boxes have a different dimension from * the odd boxes, and the median arbitrarily gets assigned * to the even boxes, there are no odd inliers; in that case, * use the even inlier sides to decide whether to adjust * the top or the bottom sides of individual outliers. */ L_INFO("fixing height of outlier boxes\n", __func__); medlefte = medtope = medbote = medtopo = medboto = 0; if ((ne = boxaGetValidCount(boxae)) > 0) boxaGetMedianVals(boxae, NULL, &medtope, NULL, &medbote, NULL, NULL); if ((no = boxaGetValidCount(boxao)) > 0) boxaGetMedianVals(boxao, NULL, &medtopo, NULL, &medboto, NULL, NULL); if (ne == 0) { /* use odd inliers values for both */ medtope = medtopo; medbote = medboto; } else if (no == 0) { /* use even inliers values for both */ medtopo = medtope; medboto = medbote; } /* Adjust the top and/or bottom sides of outliers. * For each box that is a dimensional outlier, consider each side. * Any side that differs fractionally from the median value * by more than %sfract times the median height (medh) is * set to the median value for that that side. Then both * sides are moved an equal distance in or out to make * h = %factor * medh). */ boxad = boxaCreate(n); maxdel = (l_int32)(sfract * medh + 0.5); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_COPY); boxIsValid(box, &isvalid); numaGetIValue(naind, i, &ind); medtop = (i % 2 == 0) ? medtope : medtopo; medbot = (i % 2 == 0) ? medbote : medboto; if (ind == 1 && isvalid) { /* adjust sides */ boxGetSideLocations(box, NULL, NULL, &top, &bot); if (L_ABS(top - medtop) > maxdel) top = medtop; if (L_ABS(bot - medbot) > maxdel) bot = medbot; del = (l_int32)(factor * medh - (bot - top)) / 2; /* typ > 0 */ boxSetSide(box, L_SET_TOP, L_MAX(0, top - del), 0); boxSetSide(box, L_SET_BOT, bot + del, 0); } boxaAddBox(boxad, box, L_INSERT); } } numaDestroy(&naind); boxaDestroy(&boxae); boxaDestroy(&boxao); return boxad; } /*! * \brief boxaPlotSides() * * \param[in] boxa source boxa * \param[in] plotname [optional], can be NULL * \param[out] pnal [optional] na of left sides * \param[out] pnat [optional] na of top sides * \param[out] pnar [optional] na of right sides * \param[out] pnab [optional] na of bottom sides * \param[out] ppixd pix of the output plot * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This debugging function shows the progression of the four
 *          sides in the boxa.  There must be at least 2 boxes.
 *      (2) If there are invalid boxes (e.g., if only even or odd
 *          indices have valid boxes), this will fill them with the
 *          nearest valid box before plotting.
 *      (3) The plotfiles are put in /tmp/lept/plots/, and are named
 *          either with %plotname or, if NULL, a default name.  If
 *          %plotname is used, make sure it has no whitespace characters.
 * 
*/ l_ok boxaPlotSides(BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, PIX **ppixd) { char buf[128], titlebuf[128]; char *dataname; static l_int32 plotid = 0; l_int32 n, i, w, h, left, top, right, bot; l_int32 debugprint = FALSE; /* change to TRUE to spam stderr */ l_float32 med, dev; BOXA *boxat; GPLOT *gplot; NUMA *nal, *nat, *nar, *nab; if (pnal) *pnal = NULL; if (pnat) *pnat = NULL; if (pnar) *pnar = NULL; if (pnab) *pnab = NULL; if (ppixd) *ppixd = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((n = boxaGetCount(boxa)) < 2) return ERROR_INT("less than 2 boxes", __func__, 1); if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); boxat = boxaFillSequence(boxa, L_USE_ALL_BOXES, 0); /* Build the numas for each side */ nal = numaCreate(n); nat = numaCreate(n); nar = numaCreate(n); nab = numaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxat, i, &left, &top, &w, &h); right = left + w - 1; bot = top + h - 1; numaAddNumber(nal, left); numaAddNumber(nat, top); numaAddNumber(nar, right); numaAddNumber(nab, bot); } boxaDestroy(&boxat); lept_mkdir("lept/plots"); if (plotname) { snprintf(buf, sizeof(buf), "/tmp/lept/plots/sides.%s", plotname); snprintf(titlebuf, sizeof(titlebuf), "%s: Box sides vs. box index", plotname); } else { snprintf(buf, sizeof(buf), "/tmp/lept/plots/sides.%d", plotid++); snprintf(titlebuf, sizeof(titlebuf), "Box sides vs. box index"); } gplot = gplotCreate(buf, GPLOT_PNG, titlebuf, "box index", "side location"); gplotAddPlot(gplot, NULL, nal, GPLOT_LINES, "left side"); gplotAddPlot(gplot, NULL, nat, GPLOT_LINES, "top side"); gplotAddPlot(gplot, NULL, nar, GPLOT_LINES, "right side"); gplotAddPlot(gplot, NULL, nab, GPLOT_LINES, "bottom side"); *ppixd = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); if (debugprint) { dataname = (plotname) ? stringNew(plotname) : stringNew("no_name"); numaGetMedian(nal, &med); numaGetMeanDevFromMedian(nal, med, &dev); lept_stderr("%s left: med = %7.3f, meandev = %7.3f\n", dataname, med, dev); numaGetMedian(nat, &med); numaGetMeanDevFromMedian(nat, med, &dev); lept_stderr("%s top: med = %7.3f, meandev = %7.3f\n", dataname, med, dev); numaGetMedian(nar, &med); numaGetMeanDevFromMedian(nar, med, &dev); lept_stderr("%s right: med = %7.3f, meandev = %7.3f\n", dataname, med, dev); numaGetMedian(nab, &med); numaGetMeanDevFromMedian(nab, med, &dev); lept_stderr("%s bot: med = %7.3f, meandev = %7.3f\n", dataname, med, dev); LEPT_FREE(dataname); } if (pnal) *pnal = nal; else numaDestroy(&nal); if (pnat) *pnat = nat; else numaDestroy(&nat); if (pnar) *pnar = nar; else numaDestroy(&nar); if (pnab) *pnab = nab; else numaDestroy(&nab); return 0; } /*! * \brief boxaPlotSizes() * * \param[in] boxa source boxa * \param[in] plotname [optional], can be NULL * \param[out] pnaw [optional] na of widths * \param[out] pnah [optional] na of heights * \param[out] ppixd pix of the output plot * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This debugging function shows the progression of box width
 *          and height in the boxa.  There must be at least 2 boxes.
 *      (2) If there are invalid boxes (e.g., if only even or odd
 *          indices have valid boxes), this will fill them with the
 *          nearest valid box before plotting.
 *      (3) The plotfiles are put in /tmp/lept/plots/, and are named
 *          either with %plotname or, if NULL, a default name.  If
 *          %plotname is used, make sure it has no whitespace characters.
 * 
*/ l_ok boxaPlotSizes(BOXA *boxa, const char *plotname, NUMA **pnaw, NUMA **pnah, PIX **ppixd) { char buf[128], titlebuf[128]; static l_int32 plotid = 0; l_int32 n, i, w, h; BOXA *boxat; GPLOT *gplot; NUMA *naw, *nah; if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (ppixd) *ppixd = NULL; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((n = boxaGetCount(boxa)) < 2) return ERROR_INT("less than 2 boxes", __func__, 1); if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); boxat = boxaFillSequence(boxa, L_USE_ALL_BOXES, 0); /* Build the numas for the width and height */ naw = numaCreate(n); nah = numaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxat, i, NULL, NULL, &w, &h); numaAddNumber(naw, w); numaAddNumber(nah, h); } boxaDestroy(&boxat); lept_mkdir("lept/plots"); if (plotname) { snprintf(buf, sizeof(buf), "/tmp/lept/plots/size.%s", plotname); snprintf(titlebuf, sizeof(titlebuf), "%s: Box size vs. box index", plotname); } else { snprintf(buf, sizeof(buf), "/tmp/lept/plots/size.%d", plotid++); snprintf(titlebuf, sizeof(titlebuf), "Box size vs. box index"); } gplot = gplotCreate(buf, GPLOT_PNG, titlebuf, "box index", "box dimension"); gplotAddPlot(gplot, NULL, naw, GPLOT_LINES, "width"); gplotAddPlot(gplot, NULL, nah, GPLOT_LINES, "height"); *ppixd = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); if (pnaw) *pnaw = naw; else numaDestroy(&naw); if (pnah) *pnah = nah; else numaDestroy(&nah); return 0; } /*! * \brief boxaFillSequence() * * \param[in] boxas with at least 3 boxes * \param[in] useflag L_USE_ALL_BOXES, L_USE_SAME_PARITY_BOXES * \param[in] debug 1 for debug output * \return boxad filled boxa, or NULL on error * *
 * Notes:
 *      (1) This simple function replaces invalid boxes with a copy of
 *          the nearest valid box, selected from either the entire
 *          sequence (L_USE_ALL_BOXES) or from the boxes with the
 *          same parity (L_USE_SAME_PARITY_BOXES).  It returns a new boxa.
 *      (2) This is useful if you expect boxes in the sequence to
 *          vary slowly with index.
 * 
*/ BOXA * boxaFillSequence(BOXA *boxas, l_int32 useflag, l_int32 debug) { l_int32 n, nv; BOXA *boxae, *boxao, *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (useflag != L_USE_ALL_BOXES && useflag != L_USE_SAME_PARITY_BOXES) return (BOXA *)ERROR_PTR("invalid useflag", __func__, NULL); n = boxaGetCount(boxas); nv = boxaGetValidCount(boxas); if (n == nv) return boxaCopy(boxas, L_COPY); /* all valid */ if (debug) L_INFO("%d valid boxes, %d invalid boxes\n", __func__, nv, n - nv); if (useflag == L_USE_SAME_PARITY_BOXES && n < 3) { L_WARNING("n < 3; some invalid\n", __func__); return boxaCopy(boxas, L_COPY); } if (useflag == L_USE_ALL_BOXES) { boxad = boxaCopy(boxas, L_COPY); boxaFillAll(boxad); } else { boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); boxaFillAll(boxae); boxaFillAll(boxao); boxad = boxaMergeEvenOdd(boxae, boxao, 0); boxaDestroy(&boxae); boxaDestroy(&boxao); } nv = boxaGetValidCount(boxad); if (n != nv) L_WARNING("there are still %d invalid boxes\n", __func__, n - nv); return boxad; } /*! * \brief boxaFillAll() * * \param[in] boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This static function replaces every invalid box with the
 *          nearest valid box.  If there are no valid boxes, it
 *          issues a warning.
 * 
*/ static l_int32 boxaFillAll(BOXA *boxa) { l_int32 n, nv, i, j, spandown, spanup; l_int32 *indic; BOX *box, *boxt; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); nv = boxaGetValidCount(boxa); if (n == nv) return 0; if (nv == 0) { L_WARNING("no valid boxes out of %d boxes\n", __func__, n); return 0; } /* Make indicator array for valid boxes */ if ((indic = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) return ERROR_INT("indic not made", __func__, 1); for (i = 0; i < n; i++) { box = boxaGetValidBox(boxa, i, L_CLONE); if (box) indic[i] = 1; boxDestroy(&box); } /* Replace invalid boxes with the nearest valid one */ for (i = 0; i < n; i++) { box = boxaGetValidBox(boxa, i, L_CLONE); if (!box) { spandown = spanup = 10000000; for (j = i - 1; j >= 0; j--) { if (indic[j] == 1) { spandown = i - j; break; } } for (j = i + 1; j < n; j++) { if (indic[j] == 1) { spanup = j - i; break; } } if (spandown < spanup) boxt = boxaGetBox(boxa, i - spandown, L_COPY); else boxt = boxaGetBox(boxa, i + spanup, L_COPY); boxaReplaceBox(boxa, i, boxt); } boxDestroy(&box); } LEPT_FREE(indic); return 0; } /*! * \brief boxaSizeVariation() * * \param[in] boxa at least 4 boxes * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT * \param[out] pdel_evenodd [optional] average absolute value of * (even - odd) size pairs * \param[out] prms_even [optional] rms deviation of even boxes * \param[out] prms_odd [optional] rms deviation of odd boxes * \param[out] prms_all [optional] rms deviation of all boxes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This gives several measures of the smoothness of either the
 *          width or height of a sequence of boxes.
 *          See boxaMedianDimensions() for some other measures.
 *      (2) Statistics can be found separately for even and odd boxes.
 *          Additionally, the average pair-wise difference between
 *          adjacent even and odd boxes can be returned.
 *      (3) The use case is bounding boxes for scanned page images,
 *          where ideally the sizes should have little variance.
 * 
*/ l_ok boxaSizeVariation(BOXA *boxa, l_int32 type, l_float32 *pdel_evenodd, l_float32 *prms_even, l_float32 *prms_odd, l_float32 *prms_all) { l_int32 n, ne, no, nmin, vale, valo, i; l_float32 sum; BOXA *boxae, *boxao; NUMA *nae, *nao, *na_all; if (pdel_evenodd) *pdel_evenodd = 0.0; if (prms_even) *prms_even = 0.0; if (prms_odd) *prms_odd = 0.0; if (prms_all) *prms_all = 0.0; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT) return ERROR_INT("invalid type", __func__, 1); if (!pdel_evenodd && !prms_even && !prms_odd && !prms_all) return ERROR_INT("nothing to do", __func__, 1); n = boxaGetCount(boxa); if (n < 4) return ERROR_INT("too few boxes", __func__, 1); boxaSplitEvenOdd(boxa, 0, &boxae, &boxao); ne = boxaGetCount(boxae); no = boxaGetCount(boxao); nmin = L_MIN(ne, no); if (nmin == 0) { boxaDestroy(&boxae); boxaDestroy(&boxao); return ERROR_INT("either no even or no odd boxes", __func__, 1); } if (type == L_SELECT_WIDTH) { boxaGetSizes(boxae, &nae, NULL); boxaGetSizes(boxao, &nao, NULL); boxaGetSizes(boxa, &na_all, NULL); } else { /* L_SELECT_HEIGHT) */ boxaGetSizes(boxae, NULL, &nae); boxaGetSizes(boxao, NULL, &nao); boxaGetSizes(boxa, NULL, &na_all); } if (pdel_evenodd) { sum = 0.0; for (i = 0; i < nmin; i++) { numaGetIValue(nae, i, &vale); numaGetIValue(nao, i, &valo); sum += L_ABS(vale - valo); } *pdel_evenodd = sum / nmin; } if (prms_even) numaSimpleStats(nae, 0, -1, NULL, NULL, prms_even); if (prms_odd) numaSimpleStats(nao, 0, -1, NULL, NULL, prms_odd); if (prms_all) numaSimpleStats(na_all, 0, -1, NULL, NULL, prms_all); boxaDestroy(&boxae); boxaDestroy(&boxao); numaDestroy(&nae); numaDestroy(&nao); numaDestroy(&na_all); return 0; } /*! * \brief boxaMedianDimensions() * * \param[in] boxas containing at least 3 valid boxes in even and odd * \param[out] pmedw [optional] median width of all boxes * \param[out] pmedh [optional] median height of all boxes * \param[out] pmedwe [optional] median width of even boxes * \param[out] pmedwo [optional] median width of odd boxes * \param[out] pmedhe [optional] median height of even boxes * \param[out] pmedho [optional] median height of odd boxes * \param[out] pnadelw [optional] width diff of each box from median * \param[out] pnadelh [optional] height diff of each box from median * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This provides information that (1) allows identification of
 *          boxes that have unusual (outlier) width or height, and (2) can
 *          be used to regularize the sizes of the outlier boxes, assuming
 *          that the boxes satisfy a fairly regular sequence and should
 *          mostly have the same width and height.
 *      (2) This finds the median width and height, as well as separate
 *          median widths and heights of even and odd boxes.  It also
 *          generates arrays that give the difference in width and height
 *          of each box from the median, which can be used to correct
 *          individual boxes.
 *      (3) All return values are optional.
 * 
*/ l_ok boxaMedianDimensions(BOXA *boxas, l_int32 *pmedw, l_int32 *pmedh, l_int32 *pmedwe, l_int32 *pmedwo, l_int32 *pmedhe, l_int32 *pmedho, NUMA **pnadelw, NUMA **pnadelh) { l_int32 i, n, bw, bh, medw, medh, medwe, medwo, medhe, medho; BOXA *boxae, *boxao; NUMA *nadelw, *nadelh; if (pmedw) *pmedw = 0; if (pmedh) *pmedh = 0; if (pmedwe) *pmedwe= 0; if (pmedwo) *pmedwo= 0; if (pmedhe) *pmedhe= 0; if (pmedho) *pmedho= 0; if (pnadelw) *pnadelw = NULL; if (pnadelh) *pnadelh = NULL; if (!boxas) return ERROR_INT("boxas not defined", __func__, 1); if (boxaGetValidCount(boxas) < 6) return ERROR_INT("need at least 6 valid boxes", __func__, 1); /* Require at least 3 valid boxes of both types */ boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); if (boxaGetValidCount(boxae) < 3 || boxaGetValidCount(boxao) < 3) { boxaDestroy(&boxae); boxaDestroy(&boxao); return ERROR_INT("don't have 3+ valid boxes of each type", __func__, 1); } /* Get the relevant median widths and heights */ boxaGetMedianVals(boxas, NULL, NULL, NULL, NULL, &medw, &medh); boxaGetMedianVals(boxae, NULL, NULL, NULL, NULL, &medwe, &medhe); boxaGetMedianVals(boxao, NULL, NULL, NULL, NULL, &medwo, &medho); if (pmedw) *pmedw = medw; if (pmedh) *pmedh = medh; if (pmedwe) *pmedwe = medwe; if (pmedwo) *pmedwo = medwo; if (pmedhe) *pmedhe = medhe; if (pmedho) *pmedho = medho; /* Find the variation from median dimension for each box */ n = boxaGetCount(boxas); nadelw = numaCreate(n); nadelh = numaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxas, i, NULL, NULL, &bw, &bh); if (bw == 0 || bh == 0) { /* invalid box */ numaAddNumber(nadelw, 0); numaAddNumber(nadelh, 0); } else { numaAddNumber(nadelw, bw - medw); numaAddNumber(nadelh, bh - medh); } } if (pnadelw) *pnadelw = nadelw; else numaDestroy(&nadelw); if (pnadelh) *pnadelh = nadelh; else numaDestroy(&nadelh); boxaDestroy(&boxae); boxaDestroy(&boxao); return 0; } leptonica-1.86.0/src/bytearray.c000066400000000000000000000413041506303110300165130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file bytearray.c *
 *
 *   Functions for handling byte arrays, in analogy with C++ 'strings'
 *
 *      Creation, copy, clone, destruction
 *           L_BYTEA      *l_byteaCreate()
 *           L_BYTEA      *l_byteaInitFromMem()
 *           L_BYTEA      *l_byteaInitFromFile()
 *           L_BYTEA      *l_byteaInitFromStream()
 *           L_BYTEA      *l_byteaCopy()
 *           void          l_byteaDestroy()
 *
 *      Accessors
 *           size_t        l_byteaGetSize()
 *           l_uint8      *l_byteaGetData()
 *           l_uint8      *l_byteaCopyData()
 *
 *      Appending
 *           l_int32       l_byteaAppendData()
 *           l_int32       l_byteaAppendString()
 *           static l_int32  l_byteaExtendArrayToSize()
 *
 *      Join/Split
 *           l_int32       l_byteaJoin()
 *           l_int32       l_byteaSplit()
 *
 *      Search
 *           l_int32       l_byteaFindEachSequence()
 *
 *      Output to file
 *           l_int32       l_byteaWrite()
 *           l_int32       l_byteaWriteStream()
 *
 *   The internal data array is always null-terminated, for ease of use
 *   in the event that it is an ascii string without null bytes.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" /* Bounds on array size */ static const l_uint32 MaxArraySize = 1000000000; /* 10^9 bytes */ static const l_int32 InitialArraySize = 200; /*!< n'importe quoi */ /* Static function */ static l_int32 l_byteaExtendArrayToSize(L_BYTEA *ba, size_t size); /*---------------------------------------------------------------------* * Creation, copy, clone, destruction * *---------------------------------------------------------------------*/ /*! * \brief l_byteaCreate() * * \param[in] nbytes determines initial size of data array * \return l_bytea, or NULL on error * *
 * Notes:
 *      (1) The allocated array is n + 1 bytes.  This allows room
 *          for null termination.
 * 
*/ L_BYTEA * l_byteaCreate(size_t nbytes) { L_BYTEA *ba; if (nbytes <= 0 || nbytes > MaxArraySize) nbytes = InitialArraySize; ba = (L_BYTEA *)LEPT_CALLOC(1, sizeof(L_BYTEA)); ba->data = (l_uint8 *)LEPT_CALLOC(nbytes + 1, sizeof(l_uint8)); if (!ba->data) { l_byteaDestroy(&ba); return (L_BYTEA *)ERROR_PTR("ba array not made", __func__, NULL); } ba->nalloc = nbytes + 1; ba->refcount = 1; return ba; } /*! * \brief l_byteaInitFromMem() * * \param[in] data to be copied to the array * \param[in] size amount of data * \return l_bytea, or NULL on error */ L_BYTEA * l_byteaInitFromMem(const l_uint8 *data, size_t size) { L_BYTEA *ba; if (!data) return (L_BYTEA *)ERROR_PTR("data not defined", __func__, NULL); if (size <= 0) return (L_BYTEA *)ERROR_PTR("no bytes to initialize", __func__, NULL); if (size > MaxArraySize) return (L_BYTEA *)ERROR_PTR("size is too big", __func__, NULL); if ((ba = l_byteaCreate(size)) == NULL) return (L_BYTEA *)ERROR_PTR("ba not made", __func__, NULL); memcpy(ba->data, data, size); ba->size = size; return ba; } /*! * \brief l_byteaInitFromFile() * * \param[in] fname * \return l_bytea, or NULL on error */ L_BYTEA * l_byteaInitFromFile(const char *fname) { FILE *fp; L_BYTEA *ba; if (!fname) return (L_BYTEA *)ERROR_PTR("fname not defined", __func__, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (L_BYTEA *)ERROR_PTR_1("file stream not opened", fname, __func__, NULL); ba = l_byteaInitFromStream(fp); fclose(fp); if (!ba) return (L_BYTEA *)ERROR_PTR_1("ba not made", fname, __func__, NULL); return ba; } /*! * \brief l_byteaInitFromStream() * * \param[in] fp file stream * \return l_bytea, or NULL on error */ L_BYTEA * l_byteaInitFromStream(FILE *fp) { l_uint8 *data; size_t nbytes; L_BYTEA *ba; if (!fp) return (L_BYTEA *)ERROR_PTR("stream not defined", __func__, NULL); if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) return (L_BYTEA *)ERROR_PTR("data not read", __func__, NULL); if ((ba = l_byteaCreate(nbytes)) == NULL) { LEPT_FREE(data); return (L_BYTEA *)ERROR_PTR("ba not made", __func__, NULL); } memcpy(ba->data, data, nbytes); ba->size = nbytes; LEPT_FREE(data); return ba; } /*! * \brief l_byteaCopy() * * \param[in] bas source lba * \param[in] copyflag L_COPY, L_CLONE * \return clone or copy of bas, or NULL on error * *
 * Notes:
 *      (1) If cloning, up the refcount and return a ptr to %bas.
 * 
*/ L_BYTEA * l_byteaCopy(L_BYTEA *bas, l_int32 copyflag) { if (!bas) return (L_BYTEA *)ERROR_PTR("bas not defined", __func__, NULL); if (copyflag == L_CLONE) { bas->refcount++; return bas; } return l_byteaInitFromMem(bas->data, bas->size); } /*! * \brief l_byteaDestroy() * * \param[in,out] pba will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the lba.
 *      (2) Always nulls the input ptr.
 *      (3) If the data has been previously removed, the lba will
 *          have been nulled, so this will do nothing.
 * 
*/ void l_byteaDestroy(L_BYTEA **pba) { L_BYTEA *ba; if (pba == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((ba = *pba) == NULL) return; /* Decrement the ref count. If it is 0, destroy the lba. */ if (--ba->refcount == 0) { if (ba->data) LEPT_FREE(ba->data); LEPT_FREE(ba); } *pba = NULL; } /*---------------------------------------------------------------------* * Accessors * *---------------------------------------------------------------------*/ /*! * \brief l_byteaGetSize() * * \param[in] ba * \return size of stored byte array, or 0 on error */ size_t l_byteaGetSize(L_BYTEA *ba) { if (!ba) return ERROR_INT("ba not defined", __func__, 0); return ba->size; } /*! * \brief l_byteaGetData() * * \param[in] ba * \param[out] psize size of data in lba * \return ptr to existing data array, or NULL on error * *
 * Notes:
 *      (1) The returned ptr is owned by %ba.  Do not free it!
 * 
*/ l_uint8 * l_byteaGetData(L_BYTEA *ba, size_t *psize) { if (!ba) return (l_uint8 *)ERROR_PTR("ba not defined", __func__, NULL); if (!psize) return (l_uint8 *)ERROR_PTR("&size not defined", __func__, NULL); *psize = ba->size; return ba->data; } /*! * \brief l_byteaCopyData() * * \param[in] ba * \param[out] psize size of data in lba * \return copy of data in use in the data array, or NULL on error. * *
 * Notes:
 *      (1) The returned data is owned by the caller.  The input %ba
 *          still owns the original data array.
 * 
*/ l_uint8 * l_byteaCopyData(L_BYTEA *ba, size_t *psize) { l_uint8 *data; if (!psize) return (l_uint8 *)ERROR_PTR("&size not defined", __func__, NULL); *psize = 0; if (!ba) return (l_uint8 *)ERROR_PTR("ba not defined", __func__, NULL); data = l_byteaGetData(ba, psize); return l_binaryCopy(data, *psize); } /*---------------------------------------------------------------------* * Appending * *---------------------------------------------------------------------*/ /*! * \brief l_byteaAppendData() * * \param[in] ba * \param[in] newdata byte array to be appended * \param[in] newbytes size of data array * \return 0 if OK, 1 on error */ l_ok l_byteaAppendData(L_BYTEA *ba, const l_uint8 *newdata, size_t newbytes) { size_t size, nalloc, reqsize; if (!ba) return ERROR_INT("ba not defined", __func__, 1); if (!newdata) return ERROR_INT("newdata not defined", __func__, 1); size = l_byteaGetSize(ba); reqsize = size + newbytes + 1; nalloc = ba->nalloc; if (nalloc < reqsize) { if (l_byteaExtendArrayToSize(ba, 2 * reqsize)) return ERROR_INT("extension failed", __func__, 1); } memcpy(ba->data + size, newdata, newbytes); ba->size += newbytes; return 0; } /*! * \brief l_byteaAppendString() * * \param[in] ba * \param[in] str null-terminated string to be appended * \return 0 if OK, 1 on error */ l_ok l_byteaAppendString(L_BYTEA *ba, const char *str) { size_t size, len, nalloc, reqsize; if (!ba) return ERROR_INT("ba not defined", __func__, 1); if (!str) return ERROR_INT("str not defined", __func__, 1); size = l_byteaGetSize(ba); len = strlen(str); reqsize = size + len + 1; nalloc = ba->nalloc; if (nalloc < reqsize) { if (l_byteaExtendArrayToSize(ba, 2 * reqsize)) return ERROR_INT("extension failed", __func__, 1); } memcpy(ba->data + size, str, len); ba->size += len; return 0; } /*! * \brief l_byteaExtendArrayToSize() * * \param[in] ba * \param[in] size new size of lba data array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs the byte array to %size.
 *      (2) The max buffer size is 1 GB.
 * 
*/ static l_int32 l_byteaExtendArrayToSize(L_BYTEA *ba, size_t size) { if (!ba) return ERROR_INT("ba not defined", __func__, 1); if (ba->nalloc > MaxArraySize) /* belt & suspenders */ return ERROR_INT("ba has too many ptrs", __func__, 1); if (size > MaxArraySize) return ERROR_INT("size > 1 GB; too large", __func__, 1); if (size <= ba->nalloc) { L_INFO("size too small; no extension\n", __func__); return 0; } if ((ba->data = (l_uint8 *)reallocNew((void **)&ba->data, ba->nalloc, size)) == NULL) return ERROR_INT("new array not returned", __func__, 1); ba->nalloc = size; return 0; } /*---------------------------------------------------------------------* * String join/split * *---------------------------------------------------------------------*/ /*! * \brief l_byteaJoin() * * \param[in] ba1 * \param[in,out] pba2 data array is added to the one in ba1; * then ba2 is destroyed and its pointer is nulled. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is a no-op, not an error, for %ba2 to be null.
 * 
*/ l_ok l_byteaJoin(L_BYTEA *ba1, L_BYTEA **pba2) { l_uint8 *data2; size_t nbytes2; L_BYTEA *ba2; if (!ba1) return ERROR_INT("ba1 not defined", __func__, 1); if (!pba2) return ERROR_INT("&ba2 not defined", __func__, 1); if ((ba2 = *pba2) == NULL) return 0; data2 = l_byteaGetData(ba2, &nbytes2); l_byteaAppendData(ba1, data2, nbytes2); l_byteaDestroy(pba2); return 0; } /*! * \brief l_byteaSplit() * * \param[in] ba1 lba to split; array bytes nulled beyond the split loc * \param[in] splitloc location in ba1 to split; ba2 begins there * \param[out] pba2 with data starting at splitloc * \return 0 if OK, 1 on error */ l_ok l_byteaSplit(L_BYTEA *ba1, size_t splitloc, L_BYTEA **pba2) { l_uint8 *data1; size_t nbytes1, nbytes2; if (!pba2) return ERROR_INT("&ba2 not defined", __func__, 1); *pba2 = NULL; if (!ba1) return ERROR_INT("ba1 not defined", __func__, 1); data1 = l_byteaGetData(ba1, &nbytes1); if (splitloc >= nbytes1) return ERROR_INT("splitloc invalid", __func__, 1); nbytes2 = nbytes1 - splitloc; /* Make the new lba */ *pba2 = l_byteaInitFromMem(data1 + splitloc, nbytes2); /* Null the removed bytes in the input lba */ memset(data1 + splitloc, 0, nbytes2); ba1->size = splitloc; return 0; } /*---------------------------------------------------------------------* * Search * *---------------------------------------------------------------------*/ /*! * \brief l_byteaFindEachSequence() * * \param[in] ba * \param[in] sequence subarray of bytes to find in data * \param[in] seqlen length of sequence, in bytes * \param[out] pda byte positions of each occurrence of %sequence * \return 0 if OK, 1 on error */ l_ok l_byteaFindEachSequence(L_BYTEA *ba, const l_uint8 *sequence, size_t seqlen, L_DNA **pda) { l_uint8 *data; size_t size; if (!pda) return ERROR_INT("&da not defined", __func__, 1); *pda = NULL; if (!ba) return ERROR_INT("ba not defined", __func__, 1); if (!sequence) return ERROR_INT("sequence not defined", __func__, 1); data = l_byteaGetData(ba, &size); *pda = arrayFindEachSequence(data, size, sequence, seqlen); return 0; } /*---------------------------------------------------------------------* * Output to file * *---------------------------------------------------------------------*/ /*! * \brief l_byteaWrite() * * \param[in] fname output file * \param[in] ba * \param[in] startloc first byte to output * \param[in] nbytes number of bytes to write; use 0 to write to * the end of the data array * \return 0 if OK, 1 on error */ l_ok l_byteaWrite(const char *fname, L_BYTEA *ba, size_t startloc, size_t nbytes) { l_int32 ret; FILE *fp; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (!ba) return ERROR_INT("ba not defined", __func__, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT_1("stream not opened", fname, __func__, 1); ret = l_byteaWriteStream(fp, ba, startloc, nbytes); fclose(fp); return ret; } /*! * \brief l_byteaWriteStream() * * \param[in] fp file stream opened for binary write * \param[in] ba * \param[in] startloc first byte to output * \param[in] nbytes number of bytes to write; use 0 to write to * the end of the data array * \return 0 if OK, 1 on error */ l_ok l_byteaWriteStream(FILE *fp, L_BYTEA *ba, size_t startloc, size_t nbytes) { l_uint8 *data; size_t size, maxbytes; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!ba) return ERROR_INT("ba not defined", __func__, 1); data = l_byteaGetData(ba, &size); if (startloc >= size) return ERROR_INT("invalid startloc", __func__, 1); maxbytes = size - startloc; nbytes = (nbytes == 0) ? maxbytes : L_MIN(nbytes, maxbytes); fwrite(data + startloc, 1, nbytes, fp); return 0; } leptonica-1.86.0/src/ccbord.c000066400000000000000000002453671506303110300157640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ccbord.c *
 *
 *     CCBORDA and CCBORD creation and destruction
 *         static CCBORDA  *ccbaCreate()
 *         void            *ccbaDestroy()
 *         static CCBORD   *ccbCreate()
 *         static void      ccbDestroy()
 *
 *     CCBORDA addition
 *         static l_int32   ccbaAddCcb()
 *         static l_int32   ccbaExtendArray()
 *
 *     CCBORDA accessors
 *         static l_int32   ccbaGetCount()
 *         static l_int32   ccbaGetCcb()
 *
 *     Top-level border-finding routines
 *         CCBORDA         *pixGetAllCCBorders()
 *         static CCBORD   *pixGetCCBorders()
 *         PTAA            *pixGetOuterBordersPtaa()
 *         static PTA      *pixGetOuterBorderPta()
 *
 *     Lower-level border location routines
 *         PTAA            *pixGetOuterBorder()
 *         static l_int32   pixGetHoleBorder()
 *         static l_int32   findNextBorderPixel()
 *         static void      locateOutsideSeedPixel()
 *
 *     Border conversions
 *         l_int32          ccbaGenerateGlobalLocs()
 *         l_int32          ccbaGenerateStepChains()
 *         l_int32          ccbaStepChainsToPixCoords()
 *         l_int32          ccbaGenerateSPGlobalLocs()
 *
 *     Conversion to single path
 *         l_int32          ccbaGenerateSinglePath()
 *         static PTA      *getCutPathForHole()
 *
 *     Border and full image rendering
 *         PIX             *ccbaDisplayBorder()
 *         PIX             *ccbaDisplaySPBorder()
 *         PIX             *ccbaDisplayImage1()
 *         PIX             *ccbaDisplayImage2()
 *
 *     Serialize for I/O
 *         l_int32          ccbaWrite()
 *         l_int32          ccbaWriteStream()
 *         l_int32          ccbaRead()
 *         l_int32          ccbaReadStream()
 *
 *     SVG output
 *         l_int32          ccbaWriteSVG()
 *         char            *ccbaWriteSVGString()
 *
 *
 *     Border finding is tricky because components can have
 *     holes, which also need to be traced out.  The outer
 *     border can be connected with all the hole borders,
 *     so that there is a single border for each component.
 *     [Alternatively, the connecting paths can be eliminated if
 *     you're willing to have a set of borders for each
 *     component (an exterior border and some number of
 *     interior ones), with "line to" operations tracing
 *     out each border and "move to" operations going from
 *     one border to the next.]
 *
 *     Here's the plan.  We get the pix for each connected
 *     component, and trace its exterior border.  We then
 *     find the holes (if any) in the pix, and separately
 *     trace out their borders, all using the same
 *     border-following rule that has ON pixels on the right
 *     side of the path.
 *
 *     [For svg, we may want to turn each set of borders for a c.c.
 *     into a closed path.  This can be done by tunnelling
 *     through the component from the outer border to each of the
 *     holes, going in and coming out along the same path so
 *     the connection will be invisible in any rendering
 *     (display or print) from the outline.  The result is a
 *     closed path, where the outside border is traversed
 *     cw and each hole is traversed ccw.  The svg renderer
 *     is assumed to handle these closed borders properly.]
 *
 *     Each border is a closed path that is traversed in such
 *     a way that the stuff inside the c.c. is on the right
 *     side of the traveller.  The border of a singly-connected
 *     component is thus traversed cw, and the border of the
 *     holes inside a c.c. are traversed ccw.  Suppose we have
 *     a list of all the borders of each c.c., both the cw and ccw
 *     traversals.  How do we reconstruct the image?
 *
 *   Reconstruction:
 *
 *     Method 1.  Topological method using connected components.
 *     We have closed borders composed of cw border pixels for the
 *     exterior of c.c. and ccw border pixels for the interior (holes)
 *     in the c.c.
 *         (a) Initialize the destination to be OFF.  Then,
 *             in any order:
 *         (b) Fill the components within and including the cw borders,
 *             and sequentially XOR them onto the destination.
 *         (c) Fill the components within but not including the ccw
 *             borders and sequentially XOR them onto the destination.
 *     The components that are XOR'd together can be generated as follows:
 *         (a) For each closed cw path, use pixFillClosedBorders():
 *               (1) Turn on the path pixels in a subimage that
 *                   minimally supports the border.
 *               (2) Do a 4-connected fill from a seed of 1 pixel width
 *                   on the border, using the inverted image in (1) as
 *                   a filling mask.
 *               (3) Invert the fill result: this gives the component
 *                   including the exterior cw path, with all holes
 *                   filled.
 *         (b) For each closed ccw path (hole):
 *               (1) Turn on the path pixels in a subimage that minimally
 *                   supports the path.
 *               (2) Find a seed pixel on the inside of this path.
 *               (3) Do a 4-connected fill from this seed pixel, using
 *                   the inverted image of the path in (1) as a filling
 *                   mask.
 *
 *     ------------------------------------------------------
 *
 *     Method 2.  A variant of Method 1.  Topological.
 *     In Method 1, we treat the exterior border differently from
 *     the interior (hole) borders.  Here, all borders in a c.c.
 *     are treated equally:
 *         (1) Start with a pix with a 1 pixel OFF boundary
 *             enclosing all the border pixels of the c.c.
 *             This is the filling mask.
 *         (2) Make a seed image of the same size as follows:  for
 *             each border, put one seed pixel OUTSIDE the border
 *             (where OUTSIDE is determined by the inside/outside
 *             convention for borders).
 *         (3) Seedfill into the seed image, filling in the regions
 *             determined by the filling mask.  The fills are clipped
 *             by the border pixels.
 *         (4) Inverting this, we get the c.c. properly filled,
 *             with the holes empty!
 *         (5) Rasterop using XOR the filled c.c. (but not the 1
 *             pixel boundary) into the full dest image.
 *
 *     Method 2 is about 1.2x faster than Method 1 on text images,
 *     and about 2x faster on complex images (e.g., with halftones).
 *
 *     ------------------------------------------------------
 *
 *     Method 3.  The traditional way to fill components delineated
 *     by boundaries is through scan line conversion.  It's a bit
 *     tricky, and I have not yet tried to implement it.
 *
 *     ------------------------------------------------------
 *
 *     Method 4.  [Nota Bene: this method probably doesn't work, and
 *     won't be implemented.  If I get a more traditional scan line
 *     conversion algorithm working, I'll erase these notes.]
 *     Render all border pixels on a destination image,
 *     which will be the final result after scan conversion.  Assign
 *     a value 1 to pixels on cw paths, 2 to pixels on ccw paths,
 *     and 3 to pixels that are on both paths.  Each of the paths
 *     is an 8-connected component.  Now scan across each raster
 *     line.  The attempt is to make rules for each scan line
 *     that are independent of neighboring scanlines.  Here are
 *     a set of rules for writing ON pixels on a destination raster image:
 *
 *         (a) The rasterizer will be in one of two states: ON and OFF.
 *         (b) Start each line in the OFF state.  In the OFF state,
 *             skip pixels until you hit a path of any type.  Turn
 *             the path pixel ON.
 *         (c) If the state is ON, each pixel you encounter will
 *             be turned on, until and including hitting a path pixel.
 *         (d) When you hit a path pixel, if the path does NOT cut
 *             through the line, so that there is not an 8-cc path
 *             pixel (of any type) both above and below, the state
 *             is unchanged (it stays either ON or OFF).
 *         (e) If the path does cut through, but with a possible change
 *             of pixel type, then we decide whether or
 *             not to toggle the state based on the values of the
 *             path pixel and the path pixels above and below:
 *               (1) if a 1 path cuts through, toggle;
 *               (1) if a 2 path cuts through, toggle;
 *               (3) if a 3 path cuts through, do not toggle;
 *               (4) if on one side a 3 touches both a 1 and a 2, use the 2
 *               (5) if a 3 has any 1 neighbors, toggle; else if it has
 *                   no 1 neighbors, do not toggle;
 *               (6) if a 2 has any neighbors that are 1 or 3,
 *                   do not toggle
 *               (7) if a 1 has neighbors 1 and x (x = 2 or 3),
 *                   toggle
 *
 *
 *     To visualize how these rules work, consider the following
 *     component with border pixels labeled according to the scheme
 *     above.  We also show the values of the interior pixels
 *     (w=OFF, b=ON), but these of course must be inferred properly
 *     from the rules above:
 *
 *                     3
 *                  3  w  3             1  1  1
 *                  1  2  1          1  b  2  b  1
 *                  1  b  1             3  w  2  1
 *                  3  b  1          1  b  2  b  1
 *               3  w  3                1  1  1
 *               3  w  3
 *            1  b  2  b  1
 *            1  2  w  2  1
 *         1  b  2  w  2  b  1
 *            1  2  w  2  1
 *               1  2  b  1
 *               1  b  1
 *                  1
 *
 *
 *     Even if this works, which is unlikely, it will certainly be
 *     slow because decisions have to be made on a pixel-by-pixel
 *     basis when encountering borders.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" #include "ccbord_internal.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /* In ccbaGenerateSinglePath(): don't save holes * in c.c. with ridiculously many small holes */ static const l_int32 NMAX_HOLES = 150; /* Tables used to trace the border. * - The 8 pixel positions of neighbors Q are labeled clockwise * starting from the west: * 1 2 3 * 0 P 4 * 7 6 5 * where the labels are the index offset [0, ... 7] of Q relative to P. * - xpostab[] and ypostab[] give the actual x and y pixel offsets * of Q relative to P, indexed by the index offset. * - qpostab[pos] gives the new index offset of Q relative to P, at * the time that a new P has been chosen to be in index offset * position 'pos' relative to the previous P. The relation * between P and Q is always 4-connected. */ static const l_int32 xpostab[] = {-1, -1, 0, 1, 1, 1, 0, -1}; static const l_int32 ypostab[] = {0, -1, -1, -1, 0, 1, 1, 1}; static const l_int32 qpostab[] = {6, 6, 0, 0, 2, 2, 4, 4}; /* Static functions */ static CCBORDA *ccbaCreate(PIX *pixs, l_int32 n); static CCBORD *ccbCreate(PIX *pixs); static void ccbDestroy(CCBORD **pccb); static l_ok ccbaAddCcb(CCBORDA *ccba, CCBORD *ccb); static l_int32 ccbaExtendArray(CCBORDA *ccba); static l_int32 ccbaGetCount(CCBORDA *ccba); static CCBORD *ccbaGetCcb(CCBORDA *ccba, l_int32 index); static CCBORD *pixGetCCBorders(PIX *pixs, BOX *box); static PTA *pixGetOuterBorderPta(PIX *pixs, BOX *box); static l_ok pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys); static l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy); static void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys); static PTA *getCutPathForHole(PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen); #ifndef NO_CONSOLE_IO #define DEBUG_PRINT 0 #endif /* NO CONSOLE_IO */ /*---------------------------------------------------------------------* * ccba and ccb creation and destruction * *---------------------------------------------------------------------*/ /*! * \brief ccbaCreate() * * \param[in] pixs 1 bpp; can be null * \param[in] n initial number of ptrs * \return ccba, or NULL on error */ static CCBORDA * ccbaCreate(PIX *pixs, l_int32 n) { CCBORDA *ccba; if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; ccba = (CCBORDA *)LEPT_CALLOC(1, sizeof(CCBORDA)); if (pixs) { ccba->pix = pixClone(pixs); ccba->w = pixGetWidth(pixs); ccba->h = pixGetHeight(pixs); } ccba->n = 0; ccba->nalloc = n; if ((ccba->ccb = (CCBORD **)LEPT_CALLOC(n, sizeof(CCBORD *))) == NULL) { ccbaDestroy(&ccba); return (CCBORDA *)ERROR_PTR("ccba ptrs not made", __func__, NULL); } return ccba; } /*! * \brief ccbaDestroy() * * \param[in,out] pccba will be set to null befoe returning * \return void */ void ccbaDestroy(CCBORDA **pccba) { l_int32 i; CCBORDA *ccba; if (pccba == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((ccba = *pccba) == NULL) return; pixDestroy(&ccba->pix); for (i = 0; i < ccba->n; i++) ccbDestroy(&ccba->ccb[i]); LEPT_FREE(ccba->ccb); LEPT_FREE(ccba); *pccba = NULL; } /*! * \brief ccbCreate() * * \param[in] pixs [optional]; can be null * \return ccb or NULL on error */ static CCBORD * ccbCreate(PIX *pixs) { BOXA *boxa; CCBORD *ccb; PTA *start; PTAA *local; if (pixs && pixGetDepth(pixs) != 1) /* pixs can be null */ return (CCBORD *)ERROR_PTR("pixs defined and not 1bpp", __func__, NULL); ccb = (CCBORD *)LEPT_CALLOC(1, sizeof(CCBORD)); ccb->refcount = 1; if (pixs) ccb->pix = pixClone(pixs); boxa = boxaCreate(1); ccb->boxa = boxa; start = ptaCreate(1); ccb->start = start; local = ptaaCreate(1); ccb->local = local; return ccb; } /*! * \brief ccbDestroy() * * \param[in,out] pccb will be set to null before returning * \return void */ static void ccbDestroy(CCBORD **pccb) { CCBORD *ccb; if (pccb == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((ccb = *pccb) == NULL) return; if (--ccb->refcount == 0) { if (ccb->pix) pixDestroy(&ccb->pix); if (ccb->boxa) boxaDestroy(&ccb->boxa); if (ccb->start) ptaDestroy(&ccb->start); if (ccb->local) ptaaDestroy(&ccb->local); if (ccb->global) ptaaDestroy(&ccb->global); if (ccb->step) numaaDestroy(&ccb->step); if (ccb->splocal) ptaDestroy(&ccb->splocal); if (ccb->spglobal) ptaDestroy(&ccb->spglobal); LEPT_FREE(ccb); *pccb = NULL; } } /*---------------------------------------------------------------------* * ccba addition * *---------------------------------------------------------------------*/ /*! * \brief ccbaAddCcb() * * \param[in] ccba * \param[in] ccb to be added by insertion * \return 0 if OK; 1 on error */ static l_ok ccbaAddCcb(CCBORDA *ccba, CCBORD *ccb) { l_int32 n; if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if (!ccb) return ERROR_INT("ccb not defined", __func__, 1); n = ccbaGetCount(ccba); if (n >= ccba->nalloc) { if (ccbaExtendArray(ccba)) return ERROR_INT("extension failed", __func__, 1); } ccba->ccb[n] = ccb; ccba->n++; return 0; } /*! * \brief ccbaExtendArray() * * \param[in] ccba * \return 0 if OK; 1 on error */ static l_int32 ccbaExtendArray(CCBORDA *ccba) { if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if ((ccba->ccb = (CCBORD **)reallocNew((void **)&ccba->ccb, sizeof(CCBORD *) * ccba->nalloc, 2 * sizeof(CCBORD *) * ccba->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); ccba->nalloc = 2 * ccba->nalloc; return 0; } /*---------------------------------------------------------------------* * ccba accessors * *---------------------------------------------------------------------*/ /*! * \brief ccbaGetCount() * * \param[in] ccba * \return count, with 0 on error */ static l_int32 ccbaGetCount(CCBORDA *ccba) { if (!ccba) return ERROR_INT("ccba not defined", __func__, 0); return ccba->n; } /*! * \brief ccbaGetCcb() * * \param[in] ccba * \param[in] index * \return ccb, or NULL on error * *
 * Notes:
 *      (1) This returns a clone of the ccb; it must be destroyed
 * 
*/ static CCBORD * ccbaGetCcb(CCBORDA *ccba, l_int32 index) { CCBORD *ccb; if (!ccba) return (CCBORD *)ERROR_PTR("ccba not defined", __func__, NULL); if (index < 0 || index >= ccba->n) return (CCBORD *)ERROR_PTR("index out of bounds", __func__, NULL); ccb = ccba->ccb[index]; ccb->refcount++; return ccb; } /*---------------------------------------------------------------------* * Top-level border-finding routines * *---------------------------------------------------------------------*/ /*! * \brief pixGetAllCCBorders() * * \param[in] pixs 1 bpp * \return ccborda, or NULL on error */ CCBORDA * pixGetAllCCBorders(PIX *pixs) { l_int32 n, i; BOX *box; BOXA *boxa; CCBORDA *ccba; CCBORD *ccb; PIX *pix; PIXA *pixa; if (!pixs) return (CCBORDA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (CCBORDA *)ERROR_PTR("pixs not binary", __func__, NULL); if ((boxa = pixConnComp(pixs, &pixa, 8)) == NULL) return (CCBORDA *)ERROR_PTR("boxa not made", __func__, NULL); n = boxaGetCount(boxa); if ((ccba = ccbaCreate(pixs, n)) == NULL) { boxaDestroy(&boxa); pixaDestroy(&pixa); return (CCBORDA *)ERROR_PTR("ccba not made", __func__, NULL); } for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { ccbaDestroy(&ccba); pixaDestroy(&pixa); boxaDestroy(&boxa); return (CCBORDA *)ERROR_PTR("pix not found", __func__, NULL); } if ((box = pixaGetBox(pixa, i, L_CLONE)) == NULL) { ccbaDestroy(&ccba); pixaDestroy(&pixa); boxaDestroy(&boxa); pixDestroy(&pix); return (CCBORDA *)ERROR_PTR("box not found", __func__, NULL); } ccb = pixGetCCBorders(pix, box); pixDestroy(&pix); boxDestroy(&box); if (!ccb) { ccbaDestroy(&ccba); pixaDestroy(&pixa); boxaDestroy(&boxa); return (CCBORDA *)ERROR_PTR("ccb not made", __func__, NULL); } /* ptaWriteStream(stderr, ccb->local, 1); */ ccbaAddCcb(ccba, ccb); } boxaDestroy(&boxa); pixaDestroy(&pixa); return ccba; } /*! * \brief pixGetCCBorders() * * \param[in] pixs 1 bpp, one 8-connected component * \param[in] box of %pixs, in global coords * \return ccbord, or NULL on error * *
 * Notes:
 *      (1) We are finding the exterior and interior borders
 *          of an 8-connected component.   This should be used
 *          on a pix that has exactly one 8-connected component.
 *      (2) Typically, pixs is a c.c. in some larger pix.  The
 *          input box gives its location in global coordinates.
 *          This box is saved, as well as the boxes for the
 *          borders of any holes within the c.c., but the latter
 *          are given in relative coords within the c.c.
 *      (3) The calculations for the exterior border are done
 *          on a pix with a 1-pixel
 *          added border, but the saved pixel coordinates
 *          are the correct (relative) ones for the input pix
 *          (without a 1-pixel border)
 *      (4) For the definition of the three tables -- xpostab[], ypostab[]
 *          and qpostab[] -- see above where they are defined.
 * 
*/ static CCBORD * pixGetCCBorders(PIX *pixs, BOX *box) { l_int32 allzero, i, x, xh, w, nh; l_int32 xs, ys; /* starting hole border pixel, relative in pixs */ l_uint32 val; BOX *boxt, *boxe; BOXA *boxa; CCBORD *ccb; PIX *pixh; /* for hole components */ PIX *pixt; PIXA *pixa; if (!pixs) return (CCBORD *)ERROR_PTR("pixs not defined", __func__, NULL); if (!box) return (CCBORD *)ERROR_PTR("box not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (CCBORD *)ERROR_PTR("pixs not binary", __func__, NULL); pixZero(pixs, &allzero); if (allzero) return (CCBORD *)ERROR_PTR("pixs all 0", __func__, NULL); if ((ccb = ccbCreate(pixs)) == NULL) return (CCBORD *)ERROR_PTR("ccb not made", __func__, NULL); /* Get the exterior border */ pixGetOuterBorder(ccb, pixs, box); /* Find the holes, if any */ if ((pixh = pixHolesByFilling(pixs, 4)) == NULL) { ccbDestroy(&ccb); return (CCBORD *)ERROR_PTR("pixh not made", __func__, NULL); } pixZero(pixh, &allzero); if (allzero) { /* no holes */ pixDestroy(&pixh); return ccb; } /* Get c.c. and locations of the holes */ if ((boxa = pixConnComp(pixh, &pixa, 4)) == NULL) { ccbDestroy(&ccb); pixDestroy(&pixh); return (CCBORD *)ERROR_PTR("boxa not made", __func__, NULL); } nh = boxaGetCount(boxa); /* lept_stderr("%d holes\n", nh); */ /* For each hole, find an interior pixel within the hole, * then march to the right and stop at the first border * pixel. Save the bounding box of the border, which * is 1 pixel bigger on each side than the bounding box * of the hole itself. Note that we use a pix of the * c.c. of the hole itself to be sure that we start * with a pixel in the hole of the proper component. * If we did everything from the parent component, it is * possible to start in a different hole that is within * the b.b. of a larger hole. */ w = pixGetWidth(pixs); for (i = 0; i < nh; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); pixt = pixaGetPix(pixa, i, L_CLONE); ys = boxt->y; /* there must be a hole pixel on this raster line */ for (x = 0; x < boxt->w; x++) { /* look for (fg) hole pixel */ pixGetPixel(pixt, x, 0, &val); if (val == 1) { xh = x; break; } } if (x == boxt->w) { L_WARNING("no hole pixel found!\n", __func__); continue; } for (x = xh + boxt->x; x < w; x++) { /* look for (fg) border pixel */ pixGetPixel(pixs, x, ys, &val); if (val == 1) { xs = x; break; } } boxe = boxCreate(boxt->x - 1, boxt->y - 1, boxt->w + 2, boxt->h + 2); #if DEBUG_PRINT boxPrintStreamInfo(stderr, box); boxPrintStreamInfo(stderr, boxe); lept_stderr("xs = %d, ys = %d\n", xs, ys); #endif /* DEBUG_PRINT */ pixGetHoleBorder(ccb, pixs, boxe, xs, ys); boxDestroy(&boxt); boxDestroy(&boxe); pixDestroy(&pixt); } boxaDestroy(&boxa); pixaDestroy(&pixa); pixDestroy(&pixh); return ccb; } /*! * \brief pixGetOuterBordersPtaa() * * \param[in] pixs 1 bpp * \return ptaa of outer borders, in global coords, or NULL on error */ PTAA * pixGetOuterBordersPtaa(PIX *pixs) { l_int32 i, n; BOX *box; BOXA *boxa; PIX *pix; PIXA *pixa; PTA *pta; PTAA *ptaa; if (!pixs) return (PTAA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs not binary", __func__, NULL); boxa = pixConnComp(pixs, &pixa, 8); n = boxaGetCount(boxa); if (n == 0) { boxaDestroy(&boxa); pixaDestroy(&pixa); return (PTAA *)ERROR_PTR("pixs empty", __func__, NULL); } ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixaGetPix(pixa, i, L_CLONE); pta = pixGetOuterBorderPta(pix, box); if (pta) ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); pixDestroy(&pix); } pixaDestroy(&pixa); boxaDestroy(&boxa); return ptaa; } /*! * \brief pixGetOuterBorderPta() * * \param[in] pixs 1 bpp, one 8-connected component * \param[in] box [optional] of %pixs, in global coordinates * \return pta of outer border, in global coords, or NULL on error * *
 * Notes:
 *      (1) We are finding the exterior border of a single 8-connected
 *          component.
 *      (2) If box is NULL, the outline returned is in the local coords
 *          of the input pix.  Otherwise, box is assumed to give the
 *          location of the pix in global coordinates, and the returned
 *          pta will be in those global coordinates.
 * 
*/ static PTA * pixGetOuterBorderPta(PIX *pixs, BOX *box) { l_int32 allzero, x, y; BOX *boxt; CCBORD *ccb; PTA *ptaloc, *ptad; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not binary", __func__, NULL); pixZero(pixs, &allzero); if (allzero) return (PTA *)ERROR_PTR("pixs all 0", __func__, NULL); if ((ccb = ccbCreate(pixs)) == NULL) return (PTA *)ERROR_PTR("ccb not made", __func__, NULL); if (!box) boxt = boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs)); else boxt = boxClone(box); /* Get the exterior border in local coords */ pixGetOuterBorder(ccb, pixs, boxt); if ((ptaloc = ptaaGetPta(ccb->local, 0, L_CLONE)) == NULL) { ccbDestroy(&ccb); boxDestroy(&boxt); return (PTA *)ERROR_PTR("ptaloc not made", __func__, NULL); } /* Transform to global coordinates, if they are given */ if (box) { boxGetGeometry(box, &x, &y, NULL, NULL); ptad = ptaTransform(ptaloc, x, y, 1.0, 1.0); } else { ptad = ptaClone(ptaloc); } ptaDestroy(&ptaloc); boxDestroy(&boxt); ccbDestroy(&ccb); return ptad; } /*---------------------------------------------------------------------* * Lower-level border-finding routines * *---------------------------------------------------------------------*/ /*! * \brief pixGetOuterBorder() * * \param[in] ccb unfilled * \param[in] pixs for the component at hand * \param[in] box for the component, in global coords * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) the border is saved in relative coordinates within
 *          the c.c. (pixs).  Because the calculation is done
 *          in pixb with added 1 pixel border, we must subtract
 *          1 from each pixel value before storing it.
 *      (2) the stopping condition is that after the first pixel is
 *          returned to, the next pixel is the second pixel.  Having
 *          these 2 pixels recur in sequence proves the path is closed,
 *          and we do not store the second pixel again.
 * 
*/ l_ok pixGetOuterBorder(CCBORD *ccb, PIX *pixs, BOX *box) { l_int32 fpx, fpy, spx, spy, qpos; l_int32 px, py, npx, npy; l_int32 w, h, wpl; l_uint32 *data; PTA *pta; PIX *pixb; /* with 1 pixel border */ if (!ccb) return ERROR_INT("ccb not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); /* Add 1-pixel border all around, and find start pixel */ if ((pixb = pixAddBorder(pixs, 1, 0)) == NULL) return ERROR_INT("pixs not made", __func__, 1); if (!nextOnPixelInRaster(pixb, 1, 1, &px, &py)) { pixDestroy(&pixb); return ERROR_INT("no start pixel found", __func__, 1); } qpos = 0; /* relative to p */ fpx = px; /* save location of first pixel on border */ fpy = py; /* Save box and start pixel in relative coords */ boxaAddBox(ccb->boxa, box, L_COPY); ptaAddPt(ccb->start, px - 1, py - 1); pta = ptaCreate(0); ptaaAddPta(ccb->local, pta, L_INSERT); ptaAddPt(pta, px - 1, py - 1); /* initial point */ pixGetDimensions(pixb, &w, &h, NULL); data = pixGetData(pixb); wpl = pixGetWpl(pixb); /* Get the second point; if there is none, return */ if (findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy)) { pixDestroy(&pixb); return 0; } spx = npx; /* save location of second pixel on border */ spy = npy; ptaAddPt(pta, npx - 1, npy - 1); /* second point */ px = npx; py = npy; while (1) { findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); if (px == fpx && py == fpy && npx == spx && npy == spy) break; ptaAddPt(pta, npx - 1, npy - 1); px = npx; py = npy; } pixDestroy(&pixb); return 0; } /*! * \brief pixGetHoleBorder() * * \param[in] ccb the exterior border is already made * \param[in] pixs for the connected component at hand * \param[in] box for the specific hole border, in relative * coordinates to the c.c. * \param[in] xs, ys first pixel on hole border, relative to c.c. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) we trace out hole border on pixs without addition
 *          of single pixel added border to pixs
 *      (2) therefore all coordinates are relative within the c.c. (pixs)
 *      (3) same position tables and stopping condition as for
 *          exterior borders
 * 
*/ static l_ok pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys) { l_int32 fpx, fpy, spx, spy, qpos; l_int32 px, py, npx, npy; l_int32 w, h, wpl; l_uint32 *data; PTA *pta; if (!ccb) return ERROR_INT("ccb not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); /* Add border and find start pixel */ qpos = 0; /* orientation of Q relative to P */ fpx = xs; /* save location of first pixel on border */ fpy = ys; /* Save box and start pixel */ boxaAddBox(ccb->boxa, box, L_COPY); ptaAddPt(ccb->start, xs, ys); pta = ptaCreate(0); ptaaAddPta(ccb->local, pta, L_INSERT); ptaAddPt(pta, xs, ys); /* initial pixel */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); data = pixGetData(pixs); wpl = pixGetWpl(pixs); /* Get the second point; there should always be at least 4 pts * in a minimal hole border! */ if (findNextBorderPixel(w, h, data, wpl, xs, ys, &qpos, &npx, &npy)) return ERROR_INT("isolated hole border point!", __func__, 1); spx = npx; /* save location of second pixel on border */ spy = npy; ptaAddPt(pta, npx, npy); /* second pixel */ px = npx; py = npy; while (1) { findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); if (px == fpx && py == fpy && npx == spx && npy == spy) break; ptaAddPt(pta, npx, npy); px = npx; py = npy; } return 0; } /*! * \brief findNextBorderPixel() * * \param[in] w, h * \param[in] data, wpl * \param[in] px, py current P * \param[in,out] pqpos input current Q; new Q * \param[out] pnpx, pnpy new P * \return 0 if next pixel found; 1 otherwise * *
 * Notes:
 *      (1) qpos increases clockwise from 0 to 7, with 0 at
 *          location with Q to left of P:   Q P
 *      (2) this is a low-level function that does not check input
 *          parameters.  All calling functions should check them.
 * 
*/ static l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy) { l_int32 qpos, i, pos, npx, npy, val; l_uint32 *line; qpos = *pqpos; for (i = 1; i < 8; i++) { pos = (qpos + i) % 8; npx = px + xpostab[pos]; npy = py + ypostab[pos]; if (npx < 0 || npx >= w || npy < 0 || npy >= h) continue; line = data + npy * wpl; val = GET_DATA_BIT(line, npx); if (val) { *pnpx = npx; *pnpy = npy; *pqpos = qpostab[pos]; return 0; } } return 1; } /*! * \brief locateOutsideSeedPixel() * * \param[in] fpx, fpy location of first pixel * \param[in] spx, spy location of second pixel * \param[out] pxs, pys seed pixel to be returned * *
 * Notes:
 *      (1) The first and second pixels must be 8-adjacent,
 *          so |dx| <= 1 and |dy| <= 1 and both dx and dy
 *          cannot be 0.  There are 8 possible cases.
 *      (2) The seed pixel is OUTSIDE the foreground of the c.c.
 *      (3) These rules are for the situation where the INSIDE
 *          of the c.c. is on the right as you follow the border:
 *          cw for an exterior border and ccw for a hole border.
 * 
*/ static void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys) { l_int32 dx, dy; dx = spx - fpx; dy = spy - fpy; if (dx * dy == 1) { *pxs = fpx + dx; *pys = fpy; } else if (dx * dy == -1) { *pxs = fpx; *pys = fpy + dy; } else if (dx == 0) { *pxs = fpx + dy; *pys = fpy + dy; } else /* dy == 0 */ { *pxs = fpx + dx; *pys = fpy - dx; } return; } /*---------------------------------------------------------------------* * Border conversions * *---------------------------------------------------------------------*/ /*! * \brief ccbaGenerateGlobalLocs() * * \param[in] ccba with local chain ptaa of borders computed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This uses the pixel locs in the local ptaa, which are all
 *          relative to each c.c., to find the global pixel locations,
 *          and stores them in the global ptaa.
 * 
*/ l_ok ccbaGenerateGlobalLocs(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, xul, yul, x, y; CCBORD *ccb; PTAA *ptaal, *ptaag; PTA *ptal, *ptag; if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Get the UL corner in global coords, (xul, yul), of the c.c. */ boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL); /* Make a new global ptaa, removing any old one */ ptaal = ccb->local; nb = ptaaGetCount(ptaal); /* number of borders */ if (ccb->global) /* remove old one */ ptaaDestroy(&ccb->global); if ((ptaag = ptaaCreate(nb)) == NULL) { ccbDestroy(&ccb); return ERROR_INT("ptaag not made", __func__, 1); } ccb->global = ptaag; /* save new one */ /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { ptal = ptaaGetPta(ptaal, j, L_CLONE); n = ptaGetCount(ptal); /* number of pixels in border */ ptag = ptaCreate(n); ptaaAddPta(ptaag, ptag, L_INSERT); for (k = 0; k < n; k++) { ptaGetIPt(ptal, k, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } ptaDestroy(&ptal); } ccbDestroy(&ccb); } return 0; } /*! * \brief ccbaGenerateStepChains() * * \param[in] ccba with local chain ptaa of borders computed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This uses the pixel locs in the local ptaa,
 *          which are all relative to each c.c., to find
 *          the step directions for successive pixels in
 *          the chain, and stores them in the step numaa.
 *      (2) To get the step direction, use
 *              1   2   3
 *              0   P   4
 *              7   6   5
 *          where P is the previous pixel at (px, py).  The step direction
 *          is the number (from 0 through 7) for each relative location
 *          of the current pixel at (cx, cy).  It is easily found by
 *          indexing into a 2-d 3x3 array (dirtab).
 * 
*/ l_ok ccbaGenerateStepChains(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k; l_int32 px, py, cx, cy, stepdir; l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}}; CCBORD *ccb; NUMA *na; NUMAA *naa; /* step chain code; to be made */ PTA *ptal; PTAA *ptaal; /* local chain code */ if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Make a new step numaa, removing any old one */ ptaal = ccb->local; nb = ptaaGetCount(ptaal); /* number of borders */ if (ccb->step) /* remove old one */ numaaDestroy(&ccb->step); if ((naa = numaaCreate(nb)) == NULL) { ccbDestroy(&ccb); return ERROR_INT("naa not made", __func__, 1); } ccb->step = naa; /* save new one */ /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { ptal = ptaaGetPta(ptaal, j, L_CLONE); n = ptaGetCount(ptal); /* number of pixels in border */ if (n == 1) { /* isolated pixel */ na = numaCreate(1); /* but leave it empty */ } else { /* trace out the boundary */ na = numaCreate(n); ptaGetIPt(ptal, 0, &px, &py); for (k = 1; k < n; k++) { ptaGetIPt(ptal, k, &cx, &cy); stepdir = dirtab[1 + cy - py][1 + cx - px]; numaAddNumber(na, stepdir); px = cx; py = cy; } } numaaAddNuma(naa, na, L_INSERT); ptaDestroy(&ptal); } ccbDestroy(&ccb); /* just decrement refcount */ } return 0; } /*! * \brief ccbaStepChainsToPixCoords() * * \param[in] ccba with step chains numaa of borders * \param[in] coordtype CCB_GLOBAL_COORDS or CCB_LOCAL_COORDS * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This uses the step chain data in each ccb to determine
 *          the pixel locations, either global or local,
 *          and stores them in the appropriate ptaa,
 *          either global or local.  For the latter, the
 *          pixel locations are relative to the c.c.
 * 
*/ l_ok ccbaStepChainsToPixCoords(CCBORDA *ccba, l_int32 coordtype) { l_int32 ncc, nb, n, i, j, k; l_int32 xul, yul, xstart, ystart, x, y, stepdir; BOXA *boxa; CCBORD *ccb; NUMA *na; NUMAA *naa; PTAA *ptaan; /* new pix coord ptaa */ PTA *ptas, *ptan; if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS) return ERROR_INT("coordtype not valid", __func__, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((naa = ccb->step) == NULL) { ccbDestroy(&ccb); return ERROR_INT("step numaa not found", __func__, 1); } if ((boxa = ccb->boxa) == NULL) { ccbDestroy(&ccb); return ERROR_INT("boxa not found", __func__, 1); } if ((ptas = ccb->start) == NULL) { ccbDestroy(&ccb); return ERROR_INT("start pta not found", __func__, 1); } /* For global coords, get the (xul, yul) of the c.c.; * otherwise, use relative coords. */ if (coordtype == CCB_LOCAL_COORDS) { xul = 0; yul = 0; } else { /* coordtype == CCB_GLOBAL_COORDS */ /* Get UL corner in global coords */ if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, NULL, NULL)) { ccbDestroy(&ccb); return ERROR_INT("bounding rectangle not found", __func__, 1); } } /* Make a new ptaa, removing any old one */ nb = numaaGetCount(naa); /* number of borders */ if ((ptaan = ptaaCreate(nb)) == NULL) { ccbDestroy(&ccb); return ERROR_INT("ptaan not made", __func__, 1); } if (coordtype == CCB_LOCAL_COORDS) { if (ccb->local) /* remove old one */ ptaaDestroy(&ccb->local); ccb->local = ptaan; /* save new local chain */ } else { /* coordtype == CCB_GLOBAL_COORDS */ if (ccb->global) /* remove old one */ ptaaDestroy(&ccb->global); ccb->global = ptaan; /* save new global chain */ } /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { na = numaaGetNuma(naa, j, L_CLONE); n = numaGetCount(na); /* number of steps in border */ if ((ptan = ptaCreate(n + 1)) == NULL) { ccbDestroy(&ccb); numaDestroy(&na); return ERROR_INT("ptan not made", __func__, 1); } ptaaAddPta(ptaan, ptan, L_INSERT); ptaGetIPt(ptas, j, &xstart, &ystart); x = xul + xstart; y = yul + ystart; ptaAddPt(ptan, x, y); for (k = 0; k < n; k++) { numaGetIValue(na, k, &stepdir); x += xpostab[stepdir]; y += ypostab[stepdir]; ptaAddPt(ptan, x, y); } numaDestroy(&na); } ccbDestroy(&ccb); } return 0; } /*! * \brief ccbaGenerateSPGlobalLocs() * * \param[in] ccba * \param[in] ptsflag CCB_SAVE_ALL_PTS or CCB_SAVE_TURNING_PTS * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This calculates the splocal rep if not yet made.
 *      (2) It uses the local pixel values in splocal, the single
 *          path pta, which are all relative to each c.c., to find
 *          the corresponding global pixel locations, and stores
 *          them in the spglobal pta.
 *      (3) This lists only the turning points: it both makes a
 *          valid svg file and is typically about half the size
 *          when all border points are listed.
 * 
*/ l_ok ccbaGenerateSPGlobalLocs(CCBORDA *ccba, l_int32 ptsflag) { l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely; l_int32 xp, yp, delxp, delyp; /* prev point and increments */ CCBORD *ccb; PTA *ptal, *ptag; if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); /* Make sure we have a local single path representation */ if ((ccb = ccbaGetCcb(ccba, 0)) == NULL) return ERROR_INT("no ccb", __func__, 1); if (!ccb->splocal) ccbaGenerateSinglePath(ccba); ccbDestroy(&ccb); /* clone ref */ ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Get the UL corner in global coords, (xul, yul), of the c.c. */ if (boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL)) { ccbDestroy(&ccb); return ERROR_INT("bounding rectangle not found", __func__, 1); } /* Make a new spglobal pta, removing any old one */ ptal = ccb->splocal; npt = ptaGetCount(ptal); /* number of points */ if (ccb->spglobal) /* remove old one */ ptaDestroy(&ccb->spglobal); if ((ptag = ptaCreate(npt)) == NULL) { ccbDestroy(&ccb); return ERROR_INT("ptag not made", __func__, 1); } ccb->spglobal = ptag; /* save new one */ /* Convert local to global */ if (ptsflag == CCB_SAVE_ALL_PTS) { for (j = 0; j < npt; j++) { ptaGetIPt(ptal, j, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } } else { /* ptsflag = CCB_SAVE_TURNING_PTS */ ptaGetIPt(ptal, 0, &xp, &yp); /* get the 1st pt */ ptaAddPt(ptag, xp + xul, yp + yul); /* save the 1st pt */ if (npt == 2) { /* get and save the 2nd pt */ ptaGetIPt(ptal, 1, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } else if (npt > 2) { ptaGetIPt(ptal, 1, &x, &y); delxp = x - xp; delyp = y - yp; xp = x; yp = y; for (j = 2; j < npt; j++) { ptaGetIPt(ptal, j, &x, &y); delx = x - xp; dely = y - yp; if (delx != delxp || dely != delyp) ptaAddPt(ptag, xp + xul, yp + yul); xp = x; yp = y; delxp = delx; delyp = dely; } ptaAddPt(ptag, xp + xul, yp + yul); } } ccbDestroy(&ccb); /* clone ref */ } return 0; } /*---------------------------------------------------------------------* * Conversion to single path * *---------------------------------------------------------------------*/ /*! * \brief ccbaGenerateSinglePath() * * \param[in] ccba * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates a single border in local pixel coordinates.
 *          For each c.c., if there is just an outer border, copy it.
 *          If there are also hole borders, for each hole border,
 *          determine the smallest horizontal or vertical
 *          distance from the border to the outside of the c.c.,
 *          and find a path through the c.c. for this cut.
 *          We do this in a way that guarantees a pixel from the
 *          hole border is the starting point of the path, and
 *          we must verify that the path intersects the outer
 *          border (if it intersects it, then it ends on it).
 *          One can imagine pathological cases, but they may not
 *          occur in images of text characters and un-textured
 *          line graphics.
 *      (2) Once it is verified that the path through the c.c.
 *          intersects both the hole and outer borders, we
 *          generate the full single path for all borders in the
 *          c.c.  Starting at the start point on the outer
 *          border, when we hit a line on a cut, we take
 *          the cut, do the hole border, and return on the cut
 *          to the outer border.  We compose a pta of the
 *          outer border pts that are on cut paths, and for
 *          every point on the outer border (as we go around),
 *          we check against this pta.  When we find a matching
 *          point in the pta, we do its cut path and hole border.
 *          The single path is saved in the ccb.
 * 
*/ l_ok ccbaGenerateSinglePath(CCBORDA *ccba) { l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes; l_int32 x, y, xl, yl, xf, yf; BOX *boxinner; BOXA *boxa; CCBORD *ccb; PTA *pta, *ptac, *ptah; PTA *ptahc; /* cyclic permutation of hole border, with end pts at cut */ PTA *ptas; /* output result: new single path for c.c. */ PTA *ptaf; /* points on the hole borders that intersect with cuts */ PTA *ptal; /* points on outer border that intersect with cuts */ PTA *ptap, *ptarp; /* path and reverse path between borders */ PTAA *ptaa; PTAA *ptaap; /* ptaa for all paths between borders */ if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ lostholes = 0; for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptaa = ccb->local) == NULL) { L_WARNING("local pixel loc array not found\n", __func__); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ /* Prepare the output pta */ if (ccb->splocal) ptaDestroy(&ccb->splocal); ptas = ptaCreate(0); ccb->splocal = ptas; /* If no holes, just concat the outer border */ pta = ptaaGetPta(ptaa, 0, L_CLONE); if (nb == 1 || nb > NMAX_HOLES + 1) { ptaJoin(ptas, pta, 0, -1); ptaDestroy(&pta); /* remove clone */ ccbDestroy(&ccb); /* remove clone */ continue; } /* Find the (nb - 1) cut paths that connect holes * with outer border */ boxa = ccb->boxa; ptaap = ptaaCreate(nb - 1); ptaf = ptaCreate(nb - 1); ptal = ptaCreate(nb - 1); for (j = 1; j < nb; j++) { boxinner = boxaGetBox(boxa, j, L_CLONE); /* Find a short path and store it */ ptac = getCutPathForHole(ccb->pix, pta, boxinner, &dir, &len); if (len == 0) { /* lost the hole */ lostholes++; /* boxPrintStreamInfo(stderr, boxa->box[0]); */ } ptaaAddPta(ptaap, ptac, L_INSERT); /* lept_stderr("dir = %d, length = %d\n", dir, len); */ /* ptaWriteStream(stderr, ptac, 1); */ /* Store the first and last points in the cut path, * which must be on a hole border and the outer * border, respectively */ ncut = ptaGetCount(ptac); if (ncut == 0) { /* missed hole; neg coords won't match */ ptaAddPt(ptaf, -1, -1); ptaAddPt(ptal, -1, -1); } else { ptaGetIPt(ptac, 0, &x, &y); ptaAddPt(ptaf, x, y); ptaGetIPt(ptac, ncut - 1, &x, &y); ptaAddPt(ptal, x, y); } boxDestroy(&boxinner); } /* Make a single path for the c.c. using these connections */ npt = ptaGetCount(pta); /* outer border pts */ for (k = 0; k < npt; k++) { ptaGetIPt(pta, k, &x, &y); if (k == 0) { /* if there is a cut at the first point, * we can wait until the end to take it */ ptaAddPt(ptas, x, y); continue; } state = L_NOT_FOUND; for (j = 0; j < nb - 1; j++) { /* iterate over cut end pts */ ptaGetIPt(ptal, j, &xl, &yl); /* cut point on outer border */ if (x == xl && y == yl) { /* take this cut to the hole */ state = L_FOUND; ptap = ptaaGetPta(ptaap, j, L_CLONE); ptarp = ptaReverse(ptap, 1); /* Cut point on hole border: */ ptaGetIPt(ptaf, j, &xf, &yf); /* Hole border: */ ptah = ptaaGetPta(ptaa, j + 1, L_CLONE); ptahc = ptaCyclicPerm(ptah, xf, yf); /* ptaWriteStream(stderr, ptahc, 1); */ ptaJoin(ptas, ptarp, 0, -1); ptaJoin(ptas, ptahc, 0, -1); ptaJoin(ptas, ptap, 0, -1); ptaDestroy(&ptap); ptaDestroy(&ptarp); ptaDestroy(&ptah); ptaDestroy(&ptahc); break; } } if (state == L_NOT_FOUND) ptaAddPt(ptas, x, y); } /* ptaWriteStream(stderr, ptas, 1); */ ptaaDestroy(&ptaap); ptaDestroy(&ptaf); ptaDestroy(&ptal); ptaDestroy(&pta); /* remove clone */ ccbDestroy(&ccb); /* remove clone */ } if (lostholes > 0) L_INFO("***** %d lost holes *****\n", __func__, lostholes); return 0; } /*! * \brief getCutPathForHole() * * \param[in] pix 1 bpp, of c.c. * \param[in] pta of outer border * \param[in] boxinner bounding box of hole path * \param[out] pdir direction (0-3), returned; only needed for debug * \param[out] plen length of path, returned * \return pta of pts on cut path from the hole border * to the outer border, including end points on * both borders; or NULL on error * *
 * Notes:
 *      (1) If we don't find a path, we return a pta with no pts
 *          in it and len = 0.
 *      (2) The goal is to get a reasonably short path between the
 *          inner and outer borders, that goes entirely within the fg of
 *          the pix.  This function is cheap-and-dirty, may fail for some
 *          holes in complex topologies such as those you might find in a
 *          moderately dark scanned halftone.  If it fails to find a
 *          path to any particular hole, the hole will not be rendered.
 *          Nevertheless, the image can be perfectly reconstructed
 *          from the boundary representation.
 * 
*/ static PTA * getCutPathForHole(PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen) { l_int32 w, h, nc, x, y, xl, yl, xmid, ymid; l_uint32 val; PTA *ptac; if (!pix) return (PTA *)ERROR_PTR("pix not defined", __func__, NULL); if (!pta) return (PTA *)ERROR_PTR("pta not defined", __func__, NULL); if (!boxinner) return (PTA *)ERROR_PTR("boxinner not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); ptac = ptaCreate(4); xmid = boxinner->x + boxinner->w / 2; ymid = boxinner->y + boxinner->h / 2; /* try top first */ for (y = ymid; y >= 0; y--) { pixGetPixel(pix, xmid, y, &val); if (val == 1) { ptaAddPt(ptac, xmid, y); break; } } for (y = y - 1; y >= 0; y--) { pixGetPixel(pix, xmid, y, &val); if (val == 1) ptaAddPt(ptac, xmid, y); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 1; *plen = nc; return ptac; } /* Next try bottom */ ptaEmpty(ptac); for (y = ymid; y < h; y++) { pixGetPixel(pix, xmid, y, &val); if (val == 1) { ptaAddPt(ptac, xmid, y); break; } } for (y = y + 1; y < h; y++) { pixGetPixel(pix, xmid, y, &val); if (val == 1) ptaAddPt(ptac, xmid, y); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 3; *plen = nc; return ptac; } /* Next try left */ ptaEmpty(ptac); for (x = xmid; x >= 0; x--) { pixGetPixel(pix, x, ymid, &val); if (val == 1) { ptaAddPt(ptac, x, ymid); break; } } for (x = x - 1; x >= 0; x--) { pixGetPixel(pix, x, ymid, &val); if (val == 1) ptaAddPt(ptac, x, ymid); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 0; *plen = nc; return ptac; } /* Finally try right */ ptaEmpty(ptac); for (x = xmid; x < w; x++) { pixGetPixel(pix, x, ymid, &val); if (val == 1) { ptaAddPt(ptac, x, ymid); break; } } for (x = x + 1; x < w; x++) { pixGetPixel(pix, x, ymid, &val); if (val == 1) ptaAddPt(ptac, x, ymid); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 2; *plen = nc; return ptac; } /* Sometimes, there is nothing. */ ptaEmpty(ptac); *plen = 0; return ptac; } /*---------------------------------------------------------------------* * Border rendering * *---------------------------------------------------------------------*/ /*! * \brief ccbaDisplayBorder() * * \param[in] ccba * \return pix of border pixels, or NULL on error * *
 * Notes:
 *      (1) Uses global ptaa, which gives each border pixel in
 *          global coordinates, and must be computed in advance
 *          by calling ccbaGenerateGlobalLocs().
 * 
*/ PIX * ccbaDisplayBorder(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, x, y; CCBORD *ccb; PIX *pixd; PTAA *ptaa; PTA *pta; if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", __func__, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptaa = ccb->global) == NULL) { L_WARNING("global pixel loc array not found", __func__); ccbDestroy(&ccb); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixd, x, y, 1); } ptaDestroy(&pta); } ccbDestroy(&ccb); } return pixd; } /*! * \brief ccbaDisplaySPBorder() * * \param[in] ccba * \return pix of border pixels, or NULL on error * *
 * Notes:
 *      (1) Uses spglobal pta, which gives each border pixel in
 *          global coordinates, one path per c.c., and must
 *          be computed in advance by calling ccbaGenerateSPGlobalLocs().
 * 
*/ PIX * ccbaDisplaySPBorder(CCBORDA *ccba) { l_int32 ncc, npt, i, j, x, y; CCBORD *ccb; PIX *pixd; PTA *ptag; if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", __func__, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptag = ccb->spglobal) == NULL) { L_WARNING("spglobal pixel loc array not found\n", __func__); ccbDestroy(&ccb); continue; } npt = ptaGetCount(ptag); /* number of pixels on path */ for (j = 0; j < npt; j++) { ptaGetIPt(ptag, j, &x, &y); pixSetPixel(pixd, x, y, 1); } ccbDestroy(&ccb); /* clone ref */ } return pixd; } /*! * \brief ccbaDisplayImage1() * * \param[in] ccba * \return pix of image, or NULL on error * *
 * Notes:
 *      (1) Uses local ptaa, which gives each border pixel in
 *          local coordinates, so the actual pixel positions must
 *          be computed using all offsets.
 *      (2) For the holes, use coordinates relative to the c.c.
 *      (3) This is slower than Method 2.
 *      (4) This uses topological properties (Method 1) to do scan
 *          conversion to raster
 *
 *  This algorithm deserves some commentary.
 *
 *  I first tried the following:
 *    ~ outer borders: 4-fill from outside, stopping at the
 *         border, using pixFillClosedBorders()
 *    ~ inner borders: 4-fill from outside, stopping again
 *         at the border, XOR with the border, and invert
 *         to get the hole.  This did not work, because if
 *         you have a hole border that looks like:
 *
 *                x x x x x x
 *                x          x
 *                x   x x x   x
 *                  x x o x   x
 *                      x     x
 *                      x     x
 *                        x x x
 *
 *         if you 4-fill from the outside, the pixel 'o' will
 *         not be filled!  XORing with the border leaves it OFF.
 *         Inverting then gives a single bad ON pixel that is not
 *         actually part of the hole.
 *
 *  So what you must do instead is 4-fill the holes from inside.
 *  You can do this from a seedfill, using a pix with the hole
 *  border as the filling mask.  But you need to start with a
 *  pixel inside the hole.  How is this determined?  The best
 *  way is from the contour.  We have a right-hand shoulder
 *  rule for inside (i.e., the filled region).   Take the
 *  first 2 pixels of the hole border, and compute dx and dy
 *  (second coord minus first coord:  dx = sx - fx, dy = sy - fy).
 *  There are 8 possibilities, depending on the values of dx and
 *  dy (which can each be -1, 0, and +1, but not both 0).
 *  These 8 cases can be broken into 4; see the simple algorithm below.
 *  Once you have an interior seed pixel, you fill from the seed,
 *  clipping with the hole border pix by filling into its invert.
 *
 *  You then successively XOR these interior filled components, in any order.
 * 
*/ PIX * ccbaDisplayImage1(CCBORDA *ccba) { l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h; l_int32 fpx, fpy, spx, spy, xs, ys; BOX *box; BOXA *boxa; CCBORD *ccb; PIX *pixd, *pixt, *pixh; PTAA *ptaa; PTA *pta; if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", __func__, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((boxa = ccb->boxa) == NULL) { pixDestroy(&pixd); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("boxa not found", __func__, NULL); } /* Render border in pixt */ if ((ptaa = ccb->local) == NULL) { L_WARNING("local chain array not found\n", __func__); ccbDestroy(&ccb); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { if ((box = boxaGetBox(boxa, j, L_CLONE)) == NULL) { pixDestroy(&pixd); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("b. box not found", __func__, NULL); } if (j == 0) { boxGetGeometry(box, &xul, &yul, &w, &h); xoff = yoff = 0; } else { boxGetGeometry(box, &xoff, &yoff, &w, &h); } boxDestroy(&box); /* Render the border in a minimum-sized pix; * subtract xoff and yoff because the pixel * location is stored relative to the c.c., but * we need it relative to just the hole border. */ if ((pixt = pixCreate(w, h, 1)) == NULL) { pixDestroy(&pixd); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixt, x - xoff, y - yoff, 1); if (j > 0) { /* need this for finding hole border pixel */ if (k == 0) { fpx = x - xoff; fpy = y - yoff; } if (k == 1) { spx = x - xoff; spy = y - yoff; } } } ptaDestroy(&pta); /* Get the filled component */ if (j == 0) { /* if outer border, fill from outer boundary */ if ((pixh = pixFillClosedBorders(pixt, 4)) == NULL) { pixDestroy(&pixd); pixDestroy(&pixt); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("pixh not made", __func__, NULL); } } else { /* fill the hole from inside */ /* get the location of a seed pixel in the hole */ locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); /* Put seed in hole and fill interior of hole, * using pixt as clipping mask */ pixh = pixCreateTemplate(pixt); pixSetPixel(pixh, xs, ys, 1); /* put seed pixel in hole */ pixInvert(pixt, pixt); /* to make filling mask */ pixSeedfillBinary(pixh, pixh, pixt, 4); /* 4-fill hole */ } /* XOR into the dest */ pixRasterop(pixd, xul + xoff, yul + yoff, w, h, PIX_XOR, pixh, 0, 0); pixDestroy(&pixt); pixDestroy(&pixh); } ccbDestroy(&ccb); } return pixd; } /*! * \brief ccbaDisplayImage2() * * \param[in] ccba * \return pix of image, or NULL on error * *
 * Notes:
 *      (1) Uses local chain ptaa, which gives each border pixel in
 *          local coordinates, so the actual pixel positions must
 *          be computed using all offsets.
 *      (2) Treats exterior and hole borders on equivalent
 *          footing, and does all calculations on a pix
 *          that spans the c.c. with a 1 pixel added boundary.
 *      (3) This uses topological properties (Method 2) to do scan
 *          conversion to raster
 *      (4) The algorithm is described at the top of this file (Method 2).
 *          It is preferred to Method 1 because it is between 1.2x and 2x
 *          faster than Method 1.
 * 
*/ PIX * ccbaDisplayImage2(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h; l_int32 fpx, fpy, spx, spy, xs, ys; BOXA *boxa; CCBORD *ccb; PIX *pixd, *pixc, *pixs; PTAA *ptaa; PTA *pta; if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", __func__, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { /* Generate clipping mask from border pixels and seed image * from one seed for each closed border. */ ccb = ccbaGetCcb(ccba, i); if ((boxa = ccb->boxa) == NULL) { pixDestroy(&pixd); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("boxa not found", __func__, NULL); } if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, &w, &h)) { pixDestroy(&pixd); ccbDestroy(&ccb); return (PIX *)ERROR_PTR("b. box not found", __func__, NULL); } pixc = pixCreate(w + 2, h + 2, 1); pixs = pixCreateTemplate(pixc); if ((ptaa = ccb->local) == NULL) { pixDestroy(&pixc); pixDestroy(&pixs); ccbDestroy(&ccb); L_WARNING("local chain array not found\n", __func__); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ /* Render border pixels in pixc */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixc, x + 1, y + 1, 1); if (k == 0) { fpx = x + 1; fpy = y + 1; } else if (k == 1) { spx = x + 1; spy = y + 1; } } /* Get and set seed pixel for this border in pixs */ if (n > 1) locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); else /* isolated c.c. */ xs = ys = 0; pixSetPixel(pixs, xs, ys, 1); ptaDestroy(&pta); } /* Fill from seeds in pixs, using pixc as the clipping mask, * to reconstruct the c.c. */ pixInvert(pixc, pixc); /* to convert clipping -> filling mask */ pixSeedfillBinary(pixs, pixs, pixc, 4); /* 4-fill */ pixInvert(pixs, pixs); /* to make the c.c. */ /* XOR into the dest */ pixRasterop(pixd, xul, yul, w, h, PIX_XOR, pixs, 1, 1); pixDestroy(&pixc); pixDestroy(&pixs); ccbDestroy(&ccb); /* ref-counted */ } return pixd; } /*---------------------------------------------------------------------* * Serialize for I/O * *---------------------------------------------------------------------*/ /*! * \brief ccbaWrite() * * \param[in] filename * \param[in] ccba * \return 0 if OK, 1 on error */ l_ok ccbaWrite(const char *filename, CCBORDA *ccba) { FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (ccbaWriteStream(fp, ccba)) { fclose(fp); return ERROR_INT_1("ccba not written to stream", filename, __func__, 1); } fclose(fp); return 0; } /*! * \brief ccbaWriteStream() * * \param[in] fp file stream * \param[in] ccba * \return 0 if OK; 1 on error * * Format: * \code * ccba: %7d cc\n num. c.c.) (ascii) (18B * pix width 4B * pix height 4B * [for i = 1, ncc] * ulx 4B * uly 4B * w 4B -- not req'd for reconstruction * h 4B -- not req'd for reconstruction * number of borders 4B * [for j = 1, nb] * startx 4B * starty 4B * [for k = 1, nb] * 2 steps 1B * end in z8 or 88 1B * \endcode */ l_ok ccbaWriteStream(FILE *fp, CCBORDA *ccba) { char strbuf[256]; l_uint8 bval; l_uint8 *datain, *dataout; l_int32 i, j, k, bx, by, bw, bh, val, startx, starty; l_int32 ncc, nb, n; l_uint32 w, h; size_t inbytes, outbytes; L_BBUFFER *bbuf; CCBORD *ccb; NUMA *na; NUMAA *naa; PTA *pta; #if !HAVE_LIBZ /* defined in environ.h */ return ERROR_INT("no libz: can't write data", __func__, 1); #else if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if ((bbuf = bbufferCreate(NULL, 1000)) == NULL) return ERROR_INT("bbuf not made", __func__, 1); ncc = ccbaGetCount(ccba); snprintf(strbuf, sizeof(strbuf), "ccba: %7d cc\n", ncc); bbufferRead(bbuf, (l_uint8 *)strbuf, 18); w = pixGetWidth(ccba->pix); h = pixGetHeight(ccba->pix); bbufferRead(bbuf, (l_uint8 *)&w, 4); /* width */ bbufferRead(bbuf, (l_uint8 *)&h, 4); /* height */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if (boxaGetBoxGeometry(ccb->boxa, 0, &bx, &by, &bw, &bh)) { bbufferDestroy(&bbuf); ccbDestroy(&ccb); return ERROR_INT("bounding box not found", __func__, 1); } bbufferRead(bbuf, (l_uint8 *)&bx, 4); /* ulx of c.c. */ bbufferRead(bbuf, (l_uint8 *)&by, 4); /* uly of c.c. */ bbufferRead(bbuf, (l_uint8 *)&bw, 4); /* w of c.c. */ bbufferRead(bbuf, (l_uint8 *)&bh, 4); /* h of c.c. */ if ((naa = ccb->step) == NULL) { ccbaGenerateStepChains(ccba); naa = ccb->step; } nb = numaaGetCount(naa); bbufferRead(bbuf, (l_uint8 *)&nb, 4); /* number of borders in c.c. */ pta = ccb->start; for (j = 0; j < nb; j++) { ptaGetIPt(pta, j, &startx, &starty); bbufferRead(bbuf, (l_uint8 *)&startx, 4); /* starting x in border */ bbufferRead(bbuf, (l_uint8 *)&starty, 4); /* starting y in border */ na = numaaGetNuma(naa, j, L_CLONE); n = numaGetCount(na); for (k = 0; k < n; k++) { numaGetIValue(na, k, &val); if (k % 2 == 0) bval = (l_uint8)val << 4; else bval |= (l_uint8)val; if (k % 2 == 1) bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* 2 border steps */ } if (n % 2 == 1) { bval |= 0x8; bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0xz8, */ /* where z = {0..7} */ } else { /* n % 2 == 0 */ bval = 0x88; bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0x88 */ } numaDestroy(&na); } ccbDestroy(&ccb); } datain = bbufferDestroyAndSaveData(&bbuf, &inbytes); dataout = zlibCompress(datain, inbytes, &outbytes); fwrite(dataout, 1, outbytes, fp); LEPT_FREE(datain); LEPT_FREE(dataout); return 0; #endif /* !HAVE_LIBZ */ } /*! * \brief ccbaRead() * * \param[in] filename * \return ccba, or NULL on error */ CCBORDA * ccbaRead(const char *filename) { FILE *fp; CCBORDA *ccba; if (!filename) return (CCBORDA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (CCBORDA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); ccba = ccbaReadStream(fp); fclose(fp); if (!ccba) return (CCBORDA *)ERROR_PTR_1("ccba not returned", filename, __func__, NULL); return ccba; } /*! * \brief ccbaReadStream() * * \param[in] fp file stream * \return ccba, or NULL on error * * \code * Format: ccba: %7d cc\n num. c.c.) (ascii) (17B * pix width 4B * pix height 4B * [for i = 1, ncc] * ulx 4B * uly 4B * w 4B -- not req'd for reconstruction * h 4B -- not req'd for reconstruction * number of borders 4B * [for j = 1, nb] * startx 4B * starty 4B * [for k = 1, nb] * 2 steps 1B * end in z8 or 88 1B * \endcode */ CCBORDA * ccbaReadStream(FILE *fp) { char strbuf[256]; l_uint8 bval; l_uint8 *datain, *dataout; l_int32 i, j, startx, starty; l_int32 offset, nib1, nib2; l_int32 ncc, nb; l_uint32 width, height, w, h, xoff, yoff; size_t inbytes, outbytes; BOX *box; CCBORD *ccb; CCBORDA *ccba; NUMA *na; NUMAA *step; #if !HAVE_LIBZ /* defined in environ.h */ return (CCBORDA *)ERROR_PTR("no libz: can't read data", __func__, NULL); #else if (!fp) return (CCBORDA *)ERROR_PTR("stream not open", __func__, NULL); if ((datain = l_binaryReadStream(fp, &inbytes)) == NULL) return (CCBORDA *)ERROR_PTR("data not read from file", __func__, NULL); dataout = zlibUncompress(datain, inbytes, &outbytes); LEPT_FREE(datain); if (!dataout) return (CCBORDA *)ERROR_PTR("dataout not made", __func__, NULL); offset = 18; memcpy(strbuf, dataout, offset); strbuf[17] = '\0'; if (memcmp(strbuf, "ccba:", 5) != 0) { LEPT_FREE(dataout); return (CCBORDA *)ERROR_PTR("file not type ccba", __func__, NULL); } sscanf(strbuf, "ccba: %7d cc\n", &ncc); /* lept_stderr("ncc = %d\n", ncc); */ if ((ccba = ccbaCreate(NULL, ncc)) == NULL) { LEPT_FREE(dataout); return (CCBORDA *)ERROR_PTR("ccba not made", __func__, NULL); } memcpy(&width, dataout + offset, 4); offset += 4; memcpy(&height, dataout + offset, 4); offset += 4; ccba->w = width; ccba->h = height; /* lept_stderr("width = %d, height = %d\n", width, height); */ for (i = 0; i < ncc; i++) { /* should be ncc */ ccb = ccbCreate(NULL); ccbaAddCcb(ccba, ccb); memcpy(&xoff, dataout + offset, 4); offset += 4; memcpy(&yoff, dataout + offset, 4); offset += 4; memcpy(&w, dataout + offset, 4); offset += 4; memcpy(&h, dataout + offset, 4); offset += 4; box = boxCreate(xoff, yoff, w, h); boxaAddBox(ccb->boxa, box, L_INSERT); /* lept_stderr("xoff = %d, yoff = %d, w = %d, h = %d\n", xoff, yoff, w, h); */ memcpy(&nb, dataout + offset, 4); offset += 4; /* lept_stderr("num borders = %d\n", nb); */ step = numaaCreate(nb); ccb->step = step; for (j = 0; j < nb; j++) { /* should be nb */ memcpy(&startx, dataout + offset, 4); offset += 4; memcpy(&starty, dataout + offset, 4); offset += 4; ptaAddPt(ccb->start, startx, starty); /* lept_stderr("startx = %d, starty = %d\n", startx, starty); */ na = numaCreate(0); numaaAddNuma(step, na, L_INSERT); while(1) { bval = *(dataout + offset); offset++; nib1 = (bval >> 4); nib2 = bval & 0xf; if (nib1 != 8) numaAddNumber(na, nib1); else break; if (nib2 != 8) numaAddNumber(na, nib2); else break; } } } LEPT_FREE(dataout); return ccba; #endif /* !HAVE_LIBZ */ } /*---------------------------------------------------------------------* * SVG Output * *---------------------------------------------------------------------*/ /*! * \brief ccbaWriteSVG() * * \param[in] filename * \param[in] ccba * \return 0 if OK, 1 on error */ l_ok ccbaWriteSVG(const char *filename, CCBORDA *ccba) { char *svgstr; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!ccba) return ERROR_INT("ccba not defined", __func__, 1); if ((svgstr = ccbaWriteSVGString(ccba)) == NULL) return ERROR_INT("svgstr not made", __func__, 1); l_binaryWrite(filename, "w", svgstr, strlen(svgstr)); LEPT_FREE(svgstr); return 0; } /*! * \brief ccbaWriteSVGString() * * \param[in] ccba * \return string in svg-formatted, that can be written to file, * or NULL on error. */ char * ccbaWriteSVGString(CCBORDA *ccba) { char *svgstr; char smallbuf[256]; char line0[] = ""; char line1[] = ""; char line2[] = ""; char line3[] = ""; char line5[] = ""; char space[] = " "; l_int32 i, j, ncc, npt, x, y; CCBORD *ccb; PTA *pta; SARRAY *sa; if (!ccba) return (char *)ERROR_PTR("ccba not defined", __func__, NULL); sa = sarrayCreate(0); sarrayAddString(sa, line0, L_COPY); sarrayAddString(sa, line1, L_COPY); sarrayAddString(sa, line2, L_COPY); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { if ((ccb = ccbaGetCcb(ccba, i)) == NULL) { sarrayDestroy(&sa); return (char *)ERROR_PTR("ccb not found", __func__, NULL); } if ((pta = ccb->spglobal) == NULL) { sarrayDestroy(&sa); ccbDestroy(&ccb); return (char *)ERROR_PTR("spglobal not made", __func__, NULL); } sarrayAddString(sa, line3, L_COPY); npt = ptaGetCount(pta); for (j = 0; j < npt; j++) { ptaGetIPt(pta, j, &x, &y); snprintf(smallbuf, sizeof(smallbuf), "%0d,%0d", x, y); sarrayAddString(sa, smallbuf, L_COPY); } sarrayAddString(sa, line4, L_COPY); ccbDestroy(&ccb); } sarrayAddString(sa, line5, L_COPY); sarrayAddString(sa, space, L_COPY); svgstr = sarrayToString(sa, 1); /* lept_stderr("%s", svgstr); */ sarrayDestroy(&sa); return svgstr; } leptonica-1.86.0/src/ccbord.h000066400000000000000000000043441506303110300157550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_CCBORD_H #define LEPTONICA_CCBORD_H /*! * \file ccbord.h * *
 *
 *    This is the public interface for representing all foreground pixels
 *    in an image by the border pixels of connected components.  It contains
 *    typedefs for data structures and enums for function inputs.
 * 
*/ /*! A single CCBord for a connected component */ typedef struct CCBord CCBORD; /*! Array of CCBord */ typedef struct CCBorda CCBORDA; /*! Use in ccbaStepChainsToPixCoords() */ /*! CCB Coords */ enum { CCB_LOCAL_COORDS = 1, CCB_GLOBAL_COORDS = 2 }; /*! Use in ccbaGenerateSPGlobalLocs() */ /*! CCB Points */ enum { CCB_SAVE_ALL_PTS = 1, CCB_SAVE_TURNING_PTS = 2 }; #endif /* LEPTONICA_CCBORD_H */ leptonica-1.86.0/src/ccbord_internal.h000066400000000000000000000122631506303110300176500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_CCBORD_INTERNAL_H #define LEPTONICA_CCBORD_INTERNAL_H /*! * \file ccbord_internal.h * *
 *
 *    This file is internal; it is not part of the public interface.
 *    It contains definitions of data structures that use border pixels
 *    of connected components to represent the foreground pixels
 *    in an image by the border
 *
 *        CCBord:   represents a single connected component
 *        CCBorda:  an array of CCBord
 *
 *    The CCBord contains:
 *
 *    (1) a minimally-clipped bitmap of the component (pix),
 *    (2) a boxa consisting of:
 *          for the primary component:
 *                (xul, yul) pixel location in global coords
 *                (w, h) of the bitmap
 *          for the hole components:
 *                (x, y) in relative coordinates in primary component
 *                (w, h) of the hole border (which is 2 pixels
 *                       larger in each direction than the hole itself)
 *    (3) a pta ('start') of the initial border pixel location for each
 *        closed curve, all in relative coordinates of the primary
 *        component.  This is given for the primary component,
 *        followed by the hole components, if any.
 *    (4) a refcount of the ccbord; used internally when a ccbord
 *        is accessed from a ccborda (array of ccbord)
 *    (5) a ptaa for the chain code for the border in relative
 *        coordinates, where the first pta is the exterior border
 *        and all other pta are for interior borders (holes)
 *    (6) a ptaa for the global pixel loc rendition of the border,
 *        where the first pta is the exterior border and all other
 *        pta are for interior borders (holes).
 *        This is derived from the local or step chain code.
 *    (7) a numaa for the chain code for the border as orientation
 *        directions between successive border pixels, where
 *        the first numa is the exterior border and all other
 *        numa are for interior borders (holes).  This is derived
 *        from the local chain code.  The 8 directions are 0 - 7.
 *    (8) a pta for a single chain for each c.c., comprised of outer
 *        and hole borders, plus cut paths between them, all in
 *        local coords.
 *    (9) a pta for a single chain for each c.c., comprised of outer
 *        and hole borders, plus cut paths between them, all in
 *        global coords.
 * 
*/ /*! A single CCBord for a connected component */ struct CCBord { struct Pix *pix; /*!< component bitmap (min size) */ struct Boxa *boxa; /*!< regions of each closed curve */ struct Pta *start; /*!< initial border pixel locations */ l_atomic refcount; /*!< number of handles; start at 1 */ struct Ptaa *local; /*!< ptaa of chain pixels (local) */ struct Ptaa *global; /*!< ptaa of chain pixels (global) */ struct Numaa *step; /*!< numaa of chain code (step dir) */ struct Pta *splocal; /*!< pta of single chain (local) */ struct Pta *spglobal; /*!< pta of single chain (global) */ }; /*! Array of CCBord */ struct CCBorda { struct Pix *pix; /*!< input pix (may be null) */ l_int32 w; /*!< width of pix */ l_int32 h; /*!< height of pix */ l_int32 n; /*!< number of ccbord in ptr array */ l_int32 nalloc; /*!< number of ccbord ptrs allocated */ struct CCBord **ccb; /*!< ccb ptr array */ }; #endif /* LEPTONICA_CCBORD_INTERNAL_H */ leptonica-1.86.0/src/ccthin.c000066400000000000000000000441541506303110300157670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ccthin.c *
 *
 *     PIXA   *pixaThinConnected()
 *     PIX    *pixThinConnected()
 *     PIX    *pixThinConnectedBySet()
 *     SELA   *selaMakeThinSets()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* ------------------------------------------------------------ * The sels used here (and their rotated counterparts) are the * useful 3x3 Sels for thinning. They are defined in sel2.c, * and the sets are constructed in selaMakeThinSets(). * The notation is based on "Connectivity-preserving morphological * image transformations", a version of which can be found at * http://www.leptonica.com/papers/conn.pdf * ------------------------------------------------------------ */ /*----------------------------------------------------------------* * CC-preserving thinning * *----------------------------------------------------------------*/ /*! * \brief pixaThinConnected() * * \param[in] pixas of 1 bpp pix * \param[in] type L_THIN_FG, L_THIN_BG * \param[in] connectivity 4 or 8 * \param[in] maxiters max number of iters allowed; * use 0 to iterate until completion * \return pixds, or NULL on error * *
 * Notes:
 *      (1) See notes in pixThinConnected().
 * 
*/ PIXA * pixaThinConnected(PIXA *pixas, l_int32 type, l_int32 connectivity, l_int32 maxiters) { l_int32 i, n, d, same; PIX *pix1, *pix2; PIXA *pixad; SELA *sela; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIXA *)ERROR_PTR("invalid fg/bg type", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (maxiters == 0) maxiters = 10000; pixaVerifyDepth(pixas, &same, &d); if (d != 1) return (PIXA *)ERROR_PTR("pix are not all 1 bpp", __func__, NULL); if (connectivity == 4) sela = selaMakeThinSets(1, 0); else /* connectivity == 8 */ sela = selaMakeThinSets(5, 0); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixThinConnectedBySet(pix1, type, sela, maxiters); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } selaDestroy(&sela); return pixad; } /*! * \brief pixThinConnected() * * \param[in] pixs 1 bpp * \param[in] type L_THIN_FG, L_THIN_BG * \param[in] connectivity 4 or 8 * \param[in] maxiters max number of iters allowed; * use 0 to iterate until completion * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See "Connectivity-preserving morphological image transformations,"
 *          Dan S. Bloomberg, in SPIE Visual Communications and Image
 *          Processing, Conference 1606, pp. 320-334, November 1991,
 *          Boston, MA.   A web version is available at
 *              http://www.leptonica.com/papers/conn.pdf
 *      (2) This is a simple interface for two of the best iterative
 *          morphological thinning algorithms, for 4-c.c and 8-c.c.
 *          Each iteration uses a mixture of parallel operations
 *          (using several different 3x3 Sels) and serial operations.
 *          Specifically, each thinning iteration consists of
 *          four sequential thinnings from each of four directions.
 *          Each of these thinnings is a parallel composite
 *          operation, where the union of a set of HMTs are set
 *          subtracted from the input.  For 4-cc thinning, we
 *          use 3 HMTs in parallel, and for 8-cc thinning we use 4 HMTs.
 *      (3) A "good" thinning algorithm is one that generates a skeleton
 *          that is near the medial axis and has neither pruned
 *          real branches nor left extra dendritic branches.
 *      (4) Duality between operations on fg and bg require switching
 *          the connectivity.  To thin the foreground, which is the usual
 *          situation, use type == L_THIN_FG.  Thickening the foreground
 *          is equivalent to thinning the background (type == L_THIN_BG),
 *          where the alternate connectivity gets preserved.
 *          For example, to thicken the fg with 2 rounds of iterations
 *          using 4-c.c., thin the bg using Sels that preserve 8-connectivity:
 *             Pix *pix = pixThinConnected(pixs, L_THIN_BG, 8, 2);
 *      (5) This makes and destroys the sela set each time. It's not a large
 *          overhead, but if you are calling this thousands of times on
 *          very small images, you can avoid the overhead; e.g.
 *             Sela *sela = selaMakeThinSets(1, 0);  // for 4-c.c.
 *             Pix *pix = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0);
 *          using set 1 for 4-c.c. and set 5 for 8-c.c operations.
 * 
*/ PIX * pixThinConnected(PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters) { PIX *pixd; SELA *sela; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIX *)ERROR_PTR("invalid fg/bg type", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (maxiters == 0) maxiters = 10000; if (connectivity == 4) sela = selaMakeThinSets(1, 0); else /* connectivity == 8 */ sela = selaMakeThinSets(5, 0); pixd = pixThinConnectedBySet(pixs, type, sela, maxiters); selaDestroy(&sela); return pixd; } /*! * \brief pixThinConnectedBySet() * * \param[in] pixs 1 bpp * \param[in] type L_THIN_FG, L_THIN_BG * \param[in] sela of Sels for parallel composite HMTs * \param[in] maxiters max number of iters allowed; * use 0 to iterate until completion * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See notes in pixThinConnected().
 *      (2) This takes a sela representing one of 11 sets of HMT Sels.
 *          The HMTs from this set are run in parallel and the result
 *          is OR'd before being subtracted from the source.  For each
 *          iteration, this "parallel" thin is performed four times
 *          sequentially, for sels rotated by 90 degrees in all four
 *          directions.
 *      (3) The "parallel" and "sequential" nomenclature is standard
 *          in digital filtering.  Here, "parallel" operations work on the
 *          same source (pixd), and accumulate the results in a temp
 *          image before actually applying them to the source (in this
 *          case, using an in-place subtraction).  "Sequential" operations
 *          operate directly on the source (pixd) to produce the result
 *          (in this case, with four sequential thinning operations, one
 *          from each of four directions).
 * 
*/ PIX * pixThinConnectedBySet(PIX *pixs, l_int32 type, SELA *sela, l_int32 maxiters) { l_int32 i, j, r, nsels, same; PIXA *pixahmt; PIX **pixhmt; /* array owned by pixahmt; do not destroy! */ PIX *pix1, *pix2, *pixd; SEL *sel, *selr; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIX *)ERROR_PTR("invalid fg/bg type", __func__, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", __func__, NULL); if (maxiters == 0) maxiters = 10000; /* Set up array of temp pix to hold hmts */ nsels = selaGetCount(sela); pixahmt = pixaCreate(nsels); for (i = 0; i < nsels; i++) { pix1 = pixCreateTemplate(pixs); pixaAddPix(pixahmt, pix1, L_INSERT); } pixhmt = pixaGetPixArray(pixahmt); if (!pixhmt) { pixaDestroy(&pixahmt); return (PIX *)ERROR_PTR("pixhmt array not made", __func__, NULL); } /* Set up initial image for fg thinning */ if (type == L_THIN_FG) pixd = pixCopy(NULL, pixs); else /* bg thinning */ pixd = pixInvert(NULL, pixs); /* Thin the fg, with up to maxiters iterations */ for (i = 0; i < maxiters; i++) { pix1 = pixCopy(NULL, pixd); /* test for completion */ for (r = 0; r < 4; r++) { /* over 90 degree rotations of Sels */ for (j = 0; j < nsels; j++) { /* over individual sels in sela */ sel = selaGetSel(sela, j); /* not a copy */ selr = selRotateOrth(sel, r); pixHMT(pixhmt[j], pixd, selr); selDestroy(&selr); if (j > 0) pixOr(pixhmt[0], pixhmt[0], pixhmt[j]); /* accum result */ } pixSubtract(pixd, pixd, pixhmt[0]); /* remove result */ } pixEqual(pixd, pix1, &same); pixDestroy(&pix1); if (same) { /* L_INFO("%d iterations to completion\n", __func__, i); */ break; } } /* This is a bit tricky. If we're thickening the foreground, then * we get a fg border of thickness equal to the number of * iterations. This border is connected to all components that * were initially touching the border, but as it grows, it does * not touch other growing components -- it leaves a 1 pixel wide * background between it and the growing components, and that * thin background prevents the components from growing further. * This border can be entirely removed as follows: * (1) Subtract the original (unthickened) image pixs from the * thickened image. This removes the pixels that were originally * touching the border. * (2) Get all remaining pixels that are connected to the border. * (3) Remove those pixels from the thickened image. */ if (type == L_THIN_BG) { pixInvert(pixd, pixd); /* finish with duality */ pix1 = pixSubtract(NULL, pixd, pixs); pix2 = pixExtractBorderConnComps(pix1, 4); pixSubtract(pixd, pixd, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixahmt); return pixd; } /*! * \brief selaMakeThinSets() * * \param[in] index into specific sets * \param[in] debug 1 to output display of sela * \return sela, or NULL on error * *
 * Notes:
 *      (1) These are specific sets of HMTs to be used in parallel for
 *          for thinning from each of four directions.
 *      (2) The sets are indexed as follows:
 *          For thinning (e.g., run to completion):
 *              index = 1     sel_4_1, sel_4_2, sel_4_3
 *              index = 2     sel_4_1, sel_4_5, sel_4_6
 *              index = 3     sel_4_1, sel_4_7, sel_4_7_rot
 *              index = 4     sel_48_1, sel_48_1_rot, sel_48_2
 *              index = 5     sel_8_2, sel_8_3, sel_8_5, sel_8_6
 *              index = 6     sel_8_2, sel_8_3, sel_48_2
 *              index = 7     sel_8_1, sel_8_5, sel_8_6
 *              index = 8     sel_8_2, sel_8_3, sel_8_8, sel_8_9
 *              index = 9     sel_8_5, sel_8_6, sel_8_7, sel_8_7_rot
 *          For thickening (e.g., just a few iterations):
 *              index = 10    sel_4_2, sel_4_3
 *              index = 11    sel_8_4
 *      (3) For a very smooth skeleton, use set 1 for 4 connected and
 *          set 5 for 8 connected thins.
 * 
*/ SELA * selaMakeThinSets(l_int32 index, l_int32 debug) { SEL *sel; SELA *sela1, *sela2, *sela3; if (index < 1 || index > 11) return (SELA *)ERROR_PTR("invalid index", __func__, NULL); sela2 = selaCreate(4); switch(index) { case 1: sela1 = sela4ccThin(NULL); selaFindSelByName(sela1, "sel_4_1", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_3", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 2: sela1 = sela4ccThin(NULL); selaFindSelByName(sela1, "sel_4_1", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_5", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_6", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 3: sela1 = sela4ccThin(NULL); selaFindSelByName(sela1, "sel_4_1", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_7", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); sel = selRotateOrth(sel, 1); selaAddSel(sela2, sel, "sel_4_7_rot", L_INSERT); break; case 4: sela1 = sela4and8ccThin(NULL); selaFindSelByName(sela1, "sel_48_1", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); sel = selRotateOrth(sel, 1); selaAddSel(sela2, sel, "sel_48_1_rot", L_INSERT); selaFindSelByName(sela1, "sel_48_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 5: sela1 = sela8ccThin(NULL); selaFindSelByName(sela1, "sel_8_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_3", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_5", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_6", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 6: sela1 = sela8ccThin(NULL); sela3 = sela4and8ccThin(NULL); selaFindSelByName(sela1, "sel_8_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_3", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela3, "sel_48_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaDestroy(&sela3); break; case 7: sela1 = sela8ccThin(NULL); selaFindSelByName(sela1, "sel_8_1", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_5", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_6", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 8: sela1 = sela8ccThin(NULL); selaFindSelByName(sela1, "sel_8_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_3", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_8", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_9", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 9: sela1 = sela8ccThin(NULL); selaFindSelByName(sela1, "sel_8_5", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_6", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_8_7", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); sel = selRotateOrth(sel, 1); selaAddSel(sela2, sel, "sel_8_7_rot", L_INSERT); break; case 10: /* thicken for this one; use just a few iterations */ sela1 = sela4ccThin(NULL); selaFindSelByName(sela1, "sel_4_2", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); selaFindSelByName(sela1, "sel_4_3", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; case 11: /* thicken for this one; use just a few iterations */ sela1 = sela8ccThin(NULL); selaFindSelByName(sela1, "sel_8_4", NULL, &sel); selaAddSel(sela2, sel, NULL, L_COPY); break; } /* Optionally display the sel set */ if (debug) { PIX *pix1; char buf[32]; lept_mkdir("/lept/sels"); pix1 = selaDisplayInPix(sela2, 35, 3, 15, 4); snprintf(buf, sizeof(buf), "/tmp/lept/sels/set%d.png", index); pixWrite(buf, pix1, IFF_PNG); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); } selaDestroy(&sela1); return sela2; } leptonica-1.86.0/src/checkerboard.c000066400000000000000000000271671506303110300171400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * \file checkerboard.c *
 *
 *    Find the checker corners where 4 squares come together
 *      PIX            *pixFindCheckerboardCorners()
 *
 *    Generate the hit-miss sels
 *      static SELA    *makeCheckerboardCornerSela()
 *      static PIXA    *makeCheckerboardCornerPixa()
 *
 * The functions in this file locate the corners where four squares
 * in a checkerboard come together.  With a perfectly aligned checkerboard,
 * the solution is trivial: take the union of two hit-miss transforms (HMTs),
 * each having a simple diagonal structuring element (sel).  The two
 * sels can be generated from strings such as these, using
 * selCreateFromString():
 *
 *  static const char *str1 = "o     x"
 *                            "       "
 *                            "       "
 *                            "   C   "
 *                            "       "
 *                            "       "
 *                            "x     o";
 *  static const char *str2 = "x     o"
 *                            "       "
 *                            "       "
 *                            "   C   "
 *                            "       "
 *                            "       "
 *                            "o     x";
 *
 * A more interesting problem is to consider the checkerboard viewed from
 * some arbitrary angle and orientation from the normal.  The method
 * developed here works for a camera located within a cone with an opening
 * half-angle of about 45 degrees, and with its axis along the normal
 * to the checkerboard.
 *
 * See prog/checkerboard_reg.c for usage.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Static helpers */ static SELA *makeCheckerboardCornerSela(l_int32 size, l_int32 dilation, l_int32 nsels, PIXA *pixadb); static PIXA *makeCheckerboardCornerPixa(l_int32 size, l_int32 dilation, l_int32 nsels); static const char selnames[64] = "s_diag1 s_diag2 s_cross1 s_cross2"; /*! * \brief pixFindCheckerboardCorner() * * \param[in] pixs of checkerboard * \param[in] size size of HMT sel; >= 7, typ. 15; 0 for default * \param[in] dilation size of hit and miss squares; typ. 1 or 3; max 5 * \param[in] nsels number to use (either 2 or 4) * \param[out] ppix_corners [optional] 1 bpp pix giving corner locations * \param[out] ppta_corners [optional] pta giving corner locations * \param[in] pixadb [optional] pass in pre-allocated * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Use %nsels = 4 if the checkerboard may be rotated by more
 *          than 20 deg.
 *      (2) The values of %size and %dilation that can be used depend on
 *          the square sizes.  Nominal values here are for squares of
 *          size 30 to 50.  In general, because of the viewing angle
 *          of the camera, the "squares" will appear approximately
 *          as a rotated rectangle.
 *      (3) The outputs pix_corners and pta_corners are optional.
 * 
*/ l_ok pixFindCheckerboardCorners(PIX *pixs, l_int32 size, l_int32 dilation, l_int32 nsels, PIX **ppix_corners, PTA **ppta_corners, PIXA *pixadb) { BOXA *boxa1; PIX *pix1, *pix2, *pix3; PTA *pta1; SEL *sel; SELA *sela; if (ppix_corners) *ppix_corners = NULL; if (ppta_corners) *ppta_corners = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (size <= 0) size = 7; if (size < 7) return ERROR_INT("size too small", __func__, 1); if (dilation < 1 || dilation > 5) return ERROR_INT("dilation not in [1 ...5]", __func__, 1); if (nsels != 2 && nsels != 4) return ERROR_INT("nsels not 2 or 4", __func__, 1); /* Generate the hit-miss sels for finding corners */ sela = makeCheckerboardCornerSela(size, dilation, nsels, pixadb); if (!sela) return ERROR_INT("sela not made", __func__, 1); if (pixadb) { pix1 = selaDisplayInPix(sela, 15, 3, 15, 2); pixaAddPix(pixadb, pix1, L_INSERT); } /* Do the hit-miss transform to find corner locations */ pix1 = pixUnionOfMorphOps(pixs, sela, L_MORPH_HMT); if (pixadb) pixaAddPix(pixadb, pix1, L_CLONE); selaDestroy(&sela); /* Remove large noise c.c. */ pix2 = pixSelectBySize(pix1, size, size, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); if (pixadb) pixaAddPix(pixadb, pix2, L_CLONE); /* Thin remaining c.c. */ pix3 = pixThinConnected(pix2, L_THIN_FG, 8, 0); if (pixadb) pixaAddPix(pixadb, pix3, L_CLONE); /* Extract the location of the center of each component */ boxa1 = pixConnCompBB(pix3, 8); pta1 = boxaExtractCorners(boxa1, L_BOX_CENTER); boxaDestroy(&boxa1); pixDestroy(&pix1); pixDestroy(&pix2); if (pixadb) { /* show the result as colored plus signs on the input */ sel = selMakePlusSign(15, 2); pix1 = pixDisplaySelectedPixels(pixs, pix3, sel, 0xff000000); pixaAddPix(pixadb, pix1, L_INSERT); selDestroy(&sel); } if (ppix_corners) *ppix_corners = pix3; else pixDestroy(&pix3); if (ppta_corners) *ppta_corners = pta1; else ptaDestroy(&pta1); return 0; } /*! * \brief makeCheckerboardCornerSela() * * \param[in] size size of HMT sel; >= 7, typ. 15; 0 for default * \param[in] dilation size of hit and miss squares; typ. 1 or 3; max 5 * \param[in] nsels number to use (either 2 or 4) * \param[in] pixadb [optional] pass in pre-allocated * \return sela hit-miss sels for finding corners, or NULL on error * *
 * Notes:
 *      (1) Use 4 sels if the checkerboard may be rotated by more than 20 deg.
 * 
*/ static SELA * makeCheckerboardCornerSela(l_int32 size, l_int32 dilation, l_int32 nsels, PIXA *pixadb) { PIX *pix1; PIXA *pixa1; SARRAY *sa; SELA *sela; if (size <= 0) size = 7; if (size < 7) return (SELA *)ERROR_PTR("size too small", __func__, NULL); if (dilation < 1 || dilation > 5) return (SELA *)ERROR_PTR("dilation not in [1 ...5]", __func__, NULL); if (nsels != 2 && nsels != 4) return (SELA *)ERROR_PTR("nsels not 2 or 4", __func__, NULL); if ((pixa1 = makeCheckerboardCornerPixa(size, dilation, nsels)) == NULL) return (SELA *)ERROR_PTR("pixa for sels not made", __func__, NULL); if (pixadb) { pix1 = pixaDisplayTiledInColumns(pixa1, 4, 8.0, 15, 2); pixaAddPix(pixadb, pix1, L_INSERT); } sa = sarrayCreateWordsFromString(selnames); sela = selaCreateFromColorPixa(pixa1, sa); pixaDestroy(&pixa1); sarrayDestroy(&sa); if (!sela) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); return sela; } /*! * \brief makeCheckerboardCornerPixa() * * \param[in] size size of HMT sel; >= 7, typ. 15; 0 for default * \param[in] dilation size of hit and miss squares; typ. 1 or 3; max 5 * \param[in] nsels number to use (either 2 or 4) * \return pixa representing hit-miss sels for finding corners, or NULL on error * *
 * Notes:
 *      (1) Each pix can be used to generate a hit-miss sel, using the
 *          function selCreateFromColorPix().  See that function for the
 *          use of color and gray pixels to encode the hits, misses and
 *          center in the structuring element.
 * 
*/ static PIXA * makeCheckerboardCornerPixa(l_int32 size, l_int32 dilation, l_int32 nsels) { PIX *pix1, *pix2, *pix3; PIXA *pixa1; pixa1 = pixaCreate(4); /* Represent diagonal neg slope hits and pos slope misses */ pix1 = pixCreate(size, size, 32); pixSetAll(pix1); pix2 = pixCreate(size, size, 1); /* slope -1 line (2 pixel) mask */ pixSetPixel(pix2, 1, 1, 1); /* UL corner */ pixSetPixel(pix2, size - 2, size - 2, 1); /* LR corner */ if (dilation > 1) pixDilateBrick(pix2, pix2, dilation, dilation); /* dilate each pixel */ pixSetMasked(pix1, pix2, 0x00ff0000); /* green hit */ pix3 = pixRotate90(pix2, 1); /* slope +1 line (2 pixel) mask */ pixSetMasked(pix1, pix3, 0xff000000); /* red miss */ pixSetRGBPixel(pix1, size / 2, size / 2, 128, 128, 128); /* gray center */ pixaAddPix(pixa1, pix1, L_INSERT); /* Represent diagonal pos slope hits and neg slope misses */ pix1 = pixCreate(size, size, 32); pixSetAll(pix1); pixSetMasked(pix1, pix2, 0xff000000); /* red hit */ pixSetMasked(pix1, pix3, 0x00ff0000); /* green miss */ pixSetRGBPixel(pix1, size / 2, size / 2, 128, 128, 128); /* gray center */ pixaAddPix(pixa1, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); if (nsels == 2) return pixa1; /* Represent cross: vertical hits and horizontal misses */ pix1 = pixCreate(size, size, 32); pixSetAll(pix1); pix2 = pixCreate(size, size, 1); /* vertical line (2 pixel) mask */ pixSetPixel(pix2, size / 2, 1, 1); pixSetPixel(pix2, size / 2, size - 2, 1); if (dilation > 1) pixDilateBrick(pix2, pix2, dilation, dilation); /* dilate each pixel */ pixSetMasked(pix1, pix2, 0x00ff0000); /* green hit */ pix3 = pixRotate90(pix2, 1); /* horizontal line (2 pixel) mask */ pixSetMasked(pix1, pix3, 0xff000000); /* red miss */ pixSetRGBPixel(pix1, size / 2, size / 2, 128, 128, 128); /* gray center */ pixaAddPix(pixa1, pix1, L_INSERT); /* Represent cross: horizontal hits and vertical misses */ pix1 = pixCreate(size, size, 32); pixSetAll(pix1); pixSetMasked(pix1, pix3, 0x00ff0000); /* green hit */ pixSetMasked(pix1, pix2, 0xff000000); /* red miss */ pixSetRGBPixel(pix1, size / 2, size / 2, 128, 128, 128); /* gray center */ pixaAddPix(pixa1, pix1, L_INSERT); pixDestroy(&pix2); pixDestroy(&pix3); return pixa1; } leptonica-1.86.0/src/classapp.c000066400000000000000000001124421506303110300163210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file classapp.c *
 *
 *      Top-level jb2 correlation and rank-hausdorff
 *         l_int32         jbCorrelation()
 *         l_int32         jbRankHaus()
 *
 *      Extract and classify words in textline order
 *         JBCLASSER      *jbWordsInTextlines()
 *         l_int32         pixGetWordsInTextlines()
 *         l_int32         pixGetWordBoxesInTextlines()
 *
 *      Extract word and character bounding boxes
 *         l_int32         pixFindWordAndCharacterBoxes()
 *
 *      Use word bounding boxes to compare page images
 *         NUMAA          *boxaExtractSortedPattern()
 *         l_int32         numaaCompareImagesByBoxes()
 *         static l_int32  testLineAlignmentX()
 *         static l_int32  countAlignedMatches()
 *         static void     printRowIndices()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define L_BUF_SIZE 512 /*!< size of filename buffer */ static const l_int32 JB_WORDS_MIN_WIDTH = 5; /*!< min. word width in pixels */ static const l_int32 JB_WORDS_MIN_HEIGHT = 3; /*!< min. word height in pixels */ /* Static comparison functions */ static l_int32 testLineAlignmentX(NUMA *na1, NUMA *na2, l_int32 shiftx, l_int32 delx, l_int32 nperline); static l_int32 countAlignedMatches(NUMA *nai1, NUMA *nai2, NUMA *nasx, NUMA *nasy, l_int32 n1, l_int32 n2, l_int32 delx, l_int32 dely, l_int32 nreq, l_int32 *psame, l_int32 debugflag); static void printRowIndices(l_int32 *index1, l_int32 n1, l_int32 *index2, l_int32 n2); /*------------------------------------------------------------------* * Top-level jb2 correlation and rank-hausdorff * *------------------------------------------------------------------*/ /*! * \brief jbCorrelation() * * \param[in] dirin directory of input images * \param[in] thresh typically ~0.8 * \param[in] weight typically ~0.6 * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] rootname for output files * \param[in] firstpage 0-based * \param[in] npages use 0 for all pages in dirin * \param[in] renderflag 1 to render from templates; 0 to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The images must be 1 bpp.  If they are not, you can convert
 *          them using convertFilesTo1bpp().
 *      (2) See prog/jbcorrelation for generating more output (e.g.,
 *          for debugging)
 * 
*/ l_ok jbCorrelation(const char *dirin, l_float32 thresh, l_float32 weight, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag) { char filename[L_BUF_SIZE]; l_int32 nfiles, i, numpages; JBDATA *data; JBCLASSER *classer; PIX *pix; PIXA *pixa; SARRAY *safiles; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!rootname) return ERROR_INT("rootname not defined", __func__, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("components invalid", __func__, 1); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbCorrelationInit(components, 0, 0, thresh, weight); jbAddPages(classer, safiles); /* Save data */ data = jbDataSave(classer); jbDataWrite(rootname, data); /* Optionally, render pages using class templates */ if (renderflag) { pixa = jbDataRender(data, FALSE); numpages = pixaGetCount(pixa); if (numpages != nfiles) lept_stderr("numpages = %d, nfiles = %d, not equal!\n", numpages, nfiles); for (i = 0; i < numpages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, L_BUF_SIZE, "%s.%04d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); } sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); return 0; } /*! * \brief jbRankHaus() * * \param[in] dirin directory of input images * \param[in] size of Sel used for dilation; typ. 2 * \param[in] rank rank value of match; typ. 0.97 * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] rootname for output files * \param[in] firstpage 0-based * \param[in] npages use 0 for all pages in dirin * \param[in] renderflag 1 to render from templates; 0 to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See prog/jbrankhaus for generating more output (e.g.,
 *          for debugging)
 * 
*/ l_ok jbRankHaus(const char *dirin, l_int32 size, l_float32 rank, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag) { char filename[L_BUF_SIZE]; l_int32 nfiles, i, numpages; JBDATA *data; JBCLASSER *classer; PIX *pix; PIXA *pixa; SARRAY *safiles; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!rootname) return ERROR_INT("rootname not defined", __func__, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("components invalid", __func__, 1); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbRankHausInit(components, 0, 0, size, rank); jbAddPages(classer, safiles); /* Save data */ data = jbDataSave(classer); jbDataWrite(rootname, data); /* Optionally, render pages using class templates */ if (renderflag) { pixa = jbDataRender(data, FALSE); numpages = pixaGetCount(pixa); if (numpages != nfiles) lept_stderr("numpages = %d, nfiles = %d, not equal!\n", numpages, nfiles); for (i = 0; i < numpages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, L_BUF_SIZE, "%s.%04d", rootname, i); lept_stderr("filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); } sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); return 0; } /*------------------------------------------------------------------* * Extract and classify words in textline order * *------------------------------------------------------------------*/ /*! * \brief jbWordsInTextlines() * * \param[in] dirin directory of input pages * \param[in] reduction 1 for full res; 2 for half-res * \param[in] maxwidth of word mask components, to be kept * \param[in] maxheight of word mask components, to be kept * \param[in] thresh on correlation; 0.80 is reasonable * \param[in] weight for handling thick text; 0.6 is reasonable * \param[out] pnatl numa with textline index for each component * \param[in] firstpage 0-based * \param[in] npages use 0 for all pages in dirin * \return classer for the set of pages * *
 * Notes:
 *      (1) This is a high-level function.  See prog/jbwords for example
 *          of usage.
 *      (2) Typically, use input of 75 - 150 ppi for finding words.
 * 
*/ JBCLASSER * jbWordsInTextlines(const char *dirin, l_int32 reduction, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weight, NUMA **pnatl, l_int32 firstpage, l_int32 npages) { char *fname; l_int32 nfiles, i, w, h; BOXA *boxa; JBCLASSER *classer; NUMA *nai, *natl; PIX *pix1, *pix2; PIXA *pixa; SARRAY *safiles; if (!pnatl) return (JBCLASSER *)ERROR_PTR("&natl not defined", __func__, NULL); *pnatl = NULL; if (!dirin) return (JBCLASSER *)ERROR_PTR("dirin not defined", __func__, NULL); if (reduction != 1 && reduction != 2) return (JBCLASSER *)ERROR_PTR("reduction not in {1,2}", __func__, NULL); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbCorrelationInit(JB_WORDS, maxwidth, maxheight, thresh, weight); classer->safiles = sarrayCopy(safiles); natl = numaCreate(0); *pnatl = natl; for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); if ((pix1 = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", __func__, i); continue; } if (reduction == 1) pix2 = pixClone(pix1); else /* reduction == 2 */ pix2 = pixReduceRankBinaryCascade(pix1, 1, 0, 0, 0); pixGetWordsInTextlines(pix2, JB_WORDS_MIN_WIDTH, JB_WORDS_MIN_HEIGHT, maxwidth, maxheight, &boxa, &pixa, &nai); pixGetDimensions(pix2, &w, &h, NULL); classer->w = w; classer->h = h; jbAddPageComponents(classer, pix2, boxa, pixa); numaJoin(natl, nai, 0, -1); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&nai); boxaDestroy(&boxa); pixaDestroy(&pixa); } sarrayDestroy(&safiles); return classer; } /*! * \brief pixGetWordsInTextlines() * * \param[in] pixs 1 bpp, typ. 75 - 150 ppi * \param[in] minwidth of saved components; smaller are discarded * \param[in] minheight of saved components; smaller are discarded * \param[in] maxwidth of saved components; larger are discarded * \param[in] maxheight of saved components; larger are discarded * \param[out] pboxad word boxes sorted in textline line order * \param[out] ppixad word images sorted in textline line order * \param[out] pnai index of textline for each word * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input should be at a resolution of between 75 and 150 ppi.
 *      (2) The four size constraints on saved components are all
 *          scaled by %reduction.
 *      (3) The result are word images (and their b.b.), extracted in
 *          textline order, at either full res or 2x reduction,
 *          and with a numa giving the textline index for each word.
 *      (4) The pixa and boxa interfaces should make this type of
 *          application simple to put together.  The steps are:
 *           ~ generate first estimate of word masks
 *           ~ get b.b. of these, and remove the small and big ones
 *           ~ extract pixa of the word images, using the b.b.
 *           ~ sort actual word images in textline order (2d)
 *           ~ flatten them to a pixa (1d), saving the textline index
 *             for each pix
 *      (5) In an actual application, it may be desirable to pre-filter
 *          the input image to remove large components, to extract
 *          single columns of text, and to deskew them.  For example,
 *          to remove both large components and small noisy components
 *          that can interfere with the statistics used to estimate
 *          parameters for segmenting by words, but still retain text lines,
 *          the following image preprocessing can be done:
 *                Pix *pixt = pixMorphSequence(pixs, "c40.1", 0);
 *                Pix *pixf = pixSelectBySize(pixt, 0, 60, 8,
 *                                     L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL);
 *                pixAnd(pixf, pixf, pixs);  // the filtered image
 *          The closing turns text lines into long blobs, but does not
 *          significantly increase their height.  But if there are many
 *          small connected components in a dense texture, this is likely
 *          to generate tall components that will be eliminated in pixf.
 * 
*/ l_ok pixGetWordsInTextlines(PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad, NUMA **pnai) { BOXA *boxa1, *boxad; BOXAA *baa; NUMA *nai; NUMAA *naa; PIXA *pixa1, *pixad; PIXAA *paa; if (!pboxad || !ppixad || !pnai) return ERROR_INT("&boxad, &pixad, &nai not all defined", __func__, 1); *pboxad = NULL; *ppixad = NULL; *pnai = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Get the bounding boxes of the words from the word mask. */ pixWordBoxesByDilation(pixs, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL, NULL); /* Generate a pixa of the word images */ pixa1 = pixaCreateFromBoxa(pixs, boxa1, 0, 0, NULL); /* Sort the bounding boxes of these words by line. We use the * index mapping to allow identical sorting of the pixa. */ baa = boxaSort2d(boxa1, &naa, -1, -1, 4); paa = pixaSort2dByIndex(pixa1, naa, L_CLONE); /* Flatten the word paa */ pixad = pixaaFlattenToPixa(paa, &nai, L_CLONE); boxad = pixaGetBoxa(pixad, L_COPY); *pnai = nai; *pboxad = boxad; *ppixad = pixad; pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaaDestroy(&baa); pixaaDestroy(&paa); numaaDestroy(&naa); return 0; } /*! * \brief pixGetWordBoxesInTextlines() * * \param[in] pixs 1 bpp, typ. 75 - 150 ppi * \param[in] minwidth of saved components; smaller are discarded * \param[in] minheight of saved components; smaller are discarded * \param[in] maxwidth of saved components; larger are discarded * \param[in] maxheight of saved components; larger are discarded * \param[out] pboxad word boxes sorted in textline line order * \param[out] pnai [optional] index of textline for each word * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input should be at a resolution of between 75 and 150 ppi.
 *      (2) This is a special version of pixGetWordsInTextlines(), that
 *          just finds the word boxes in line order, with a numa
 *          giving the textline index for each word.
 *          See pixGetWordsInTextlines() for more details.
 * 
*/ l_ok pixGetWordBoxesInTextlines(PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, NUMA **pnai) { BOXA *boxa1; BOXAA *baa; NUMA *nai; if (pnai) *pnai = NULL; if (!pboxad) return ERROR_INT("&boxad and &nai not both defined", __func__, 1); *pboxad = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Get the bounding boxes of the words from the word mask. */ pixWordBoxesByDilation(pixs, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL, NULL); /* 2D sort the bounding boxes of these words. */ baa = boxaSort2d(boxa1, NULL, 3, -5, 5); /* Flatten the boxaa, saving the boxa index for each box */ *pboxad = boxaaFlattenToBoxa(baa, &nai, L_CLONE); if (pnai) *pnai = nai; else numaDestroy(&nai); boxaDestroy(&boxa1); boxaaDestroy(&baa); return 0; } /*------------------------------------------------------------------* * Extract word and character bounding boxes * *------------------------------------------------------------------*/ /*! * \brief pixFindWordAndCharacterBoxes() * * \param[in] pixs 2, 4, 8 or 32 bpp; colormap OK; typ. 300 ppi * \param[in] boxs [optional] region to select in pixs * \param[in] thresh binarization threshold (typ. 100 - 150) * \param[out] pboxaw return the word boxes * \param[out] pboxaac return the character boxes * \param[in] debugdir [optional] for debug images; use NULL to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %boxs == NULL, the entire input image is used.
 *      (2) Having an input pix that is not 1bpp is necessary to reduce
 *          touching characters by using a low binarization threshold.
 *          Suggested thresholds are between 100 and 150.
 *      (3) The coordinates in the output boxes are global, with respect
 *          to the input image.
 * 
*/ l_ok pixFindWordAndCharacterBoxes(PIX *pixs, BOX *boxs, l_int32 thresh, BOXA **pboxaw, BOXAA **pboxaac, const char *debugdir) { char *debugfile, *subdir; l_int32 i, xs, ys, xb, yb, nb, loc; l_float32 scalefact; BOX *box1, *box2; BOXA *boxa1, *boxa1a, *boxa2, *boxa3, *boxa4, *boxa5, *boxaw; BOXAA *boxaac; PIX *pix1, *pix2, *pix3, *pix3a, *pix4, *pix5; if (pboxaw) *pboxaw = NULL; if (pboxaac) *pboxaac = NULL; if (!pboxaw || !pboxaac) return ERROR_INT("&boxaw and &boxaac not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) == 1) return ERROR_INT("pixs not defined or 1 bpp", __func__, 1); if (thresh > 150) L_WARNING("threshold is %d; may be too high\n", __func__, thresh); if (boxs) { if ((pix1 = pixClipRectangle(pixs, boxs, NULL)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); boxGetGeometry(boxs, &xs, &ys, NULL, NULL); } else { pix1 = pixClone(pixs); xs = ys = 0; } /* Convert pix1 to 8 bpp gray if necessary */ pix2 = pixConvertTo8(pix1, FALSE); /* To find the words and letters, work with 1 bpp images and use * a low threshold to reduce the number of touching characters. */ pix3 = pixConvertTo1(pix2, thresh); /* Work at about 120 ppi to find the word bounding boxes. */ pix3a = pixScaleToResolution(pix3, 120.0, 300.0, &scalefact); /* First find the words, removing the very small things like * dots over the 'i' that weren't included in word boxes. */ pixGetWordBoxesInTextlines(pix3a, 1, 4, 150, 40, &boxa1a, NULL); boxa1 = boxaTransform(boxa1a, 0, 0, 1.0 / scalefact, 1.0 / scalefact); if (debugdir) { loc = 0; subdir = stringReplaceSubstr(debugdir, "/tmp/", "", &loc, NULL); lept_mkdir(subdir); LEPT_FREE(subdir); pix4 = pixConvertTo32(pix2); pixRenderBoxaArb(pix4, boxa1, 2, 255, 0, 0); debugfile = stringJoin(debugdir, "/words.png"); pixWrite(debugfile, pix4, IFF_PNG); pixDestroy(&pix4); LEPT_FREE(debugfile); } /* Now find the letters at 300 ppi */ nb = boxaGetCount(boxa1); boxaw = boxaCreate(nb); boxaac = boxaaCreate(nb); *pboxaw = boxaw; *pboxaac = boxaac; for (i = 0; i < nb; i++) { box1 = boxaGetBox(boxa1, i, L_COPY); boxGetGeometry(box1, &xb, &yb, NULL, NULL); pix4 = pixClipRectangle(pix3, box1, NULL); /* Join detached parts of characters vertically */ pix5 = pixMorphSequence(pix4, "c1.10", 0); /* The connected components should mostly be characters */ boxa2 = pixConnCompBB(pix5, 4); /* Remove very small pieces */ boxa3 = boxaSelectBySize(boxa2, 2, 5, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); /* Order left to right */ boxa4 = boxaSort(boxa3, L_SORT_BY_X, L_SORT_INCREASING, NULL); /* Express locations with reference to the full input image */ boxa5 = boxaTransform(boxa4, xs + xb, ys + yb, 1.0, 1.0); box2 = boxTransform(box1, xs, ys, 1.0, 1.0); /* Ignore any boxa with no boxes after size filtering */ if (boxaGetCount(boxa5) > 0) { boxaAddBox(boxaw, box2, L_INSERT); boxaaAddBoxa(boxaac, boxa5, L_INSERT); } else { boxDestroy(&box2); boxaDestroy(&boxa5); } boxDestroy(&box1); pixDestroy(&pix4); pixDestroy(&pix5); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix3a); boxaDestroy(&boxa1); boxaDestroy(&boxa1a); if (debugdir) { pix4 = pixConvertTo32(pixs); boxa2 = boxaaFlattenToBoxa(boxaac, NULL, L_COPY); pixRenderBoxaArb(pix4, boxa2, 2, 255, 0, 0); boxa3 = boxaAdjustSides(boxaw, -2, 2, -2, 2); pixRenderBoxaArb(pix4, boxa3, 2, 0, 255, 0); debugfile = stringJoin(debugdir, "/chars.png"); pixWrite(debugfile, pix4, IFF_PNG); pixDestroy(&pix4); boxaDestroy(&boxa2); boxaDestroy(&boxa3); LEPT_FREE(debugfile); } return 0; } /*------------------------------------------------------------------* * Use word bounding boxes to compare page images * *------------------------------------------------------------------*/ /*! * \brief boxaExtractSortedPattern() * * \param[in] boxa typ. of word bounding boxes, in textline order * \param[in] na index of textline for each box in boxa * \return naa NUMAA, where each numa represents one textline, * or NULL on error * *
 * Notes:
 *      (1) The input is expected to come from pixGetWordBoxesInTextlines().
 *      (2) Each numa in the output consists of an average y coordinate
 *          of the first box in the textline, followed by pairs of
 *          x coordinates representing the left and right edges of each
 *          of the boxes in the textline.
 * 
*/ NUMAA * boxaExtractSortedPattern(BOXA *boxa, NUMA *na) { l_int32 index, nbox, row, prevrow, x, y, w, h; BOX *box; NUMA *nad = NULL; NUMAA *naa; if (!boxa) return (NUMAA *)ERROR_PTR("boxa not defined", __func__, NULL); if (!na) return (NUMAA *)ERROR_PTR("na not defined", __func__, NULL); naa = numaaCreate(0); nbox = boxaGetCount(boxa); if (nbox == 0) return naa; prevrow = -1; for (index = 0; index < nbox; index++) { box = boxaGetBox(boxa, index, L_CLONE); numaGetIValue(na, index, &row); if (row > prevrow) { if (index > 0) numaaAddNuma(naa, nad, L_INSERT); nad = numaCreate(0); prevrow = row; boxGetGeometry(box, NULL, &y, NULL, &h); numaAddNumber(nad, y + h / 2); } boxGetGeometry(box, &x, NULL, &w, NULL); numaAddNumber(nad, x); numaAddNumber(nad, x + w - 1); boxDestroy(&box); } numaaAddNuma(naa, nad, L_INSERT); return naa; } /*! * \brief numaaCompareImagesByBoxes() * * \param[in] naa1 for image 1, formatted by boxaExtractSortedPattern() * \param[in] naa2 for image 2, formatted by boxaExtractSortedPattern() * \param[in] nperline number of box regions to be used in each textline * \param[in] nreq number of complete row matches required * \param[in] maxshiftx max allowed x shift between two patterns, in pixels * \param[in] maxshifty max allowed y shift between two patterns, in pixels * \param[in] delx max allowed difference in x data, after alignment * \param[in] dely max allowed difference in y data, after alignment * \param[out] psame 1 if %nreq row matches are found; 0 otherwise * \param[in] debugflag 1 for debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Each input numaa describes a set of sorted bounding boxes
 *          (sorted by textline and, within each textline, from
 *          left to right) in the images from which they are derived.
 *          See boxaExtractSortedPattern() for a description of the data
 *          format in each of the input numaa.
 *      (2) This function does an alignment between the input
 *          descriptions of bounding boxes for two images. The
 *          input parameter %nperline specifies the number of boxes
 *          to consider in each line when testing for a match, and
 *          %nreq is the required number of lines that must be well-aligned
 *          to get a match.
 *      (3) Testing by alignment has 3 steps:
 *          (a) Generating the location of word bounding boxes from the
 *              images (prior to calling this function).
 *          (b) Listing all possible pairs of aligned rows, based on
 *              tolerances in horizontal and vertical positions of
 *              the boxes.  Specifically, all pairs of rows are enumerated
 *              whose first %nperline boxes can be brought into close
 *              alignment, based on the delx parameter for boxes in the
 *              line and within the overall the %maxshiftx and %maxshifty
 *              constraints.
 *          (c) Each pair, starting with the first, is used to search
 *              for a set of %nreq - 1 other pairs that can all be aligned
 *              with a difference in global translation of not more
 *              than (%delx, %dely).
 * 
*/ l_ok numaaCompareImagesByBoxes(NUMAA *naa1, NUMAA *naa2, l_int32 nperline, l_int32 nreq, l_int32 maxshiftx, l_int32 maxshifty, l_int32 delx, l_int32 dely, l_int32 *psame, l_int32 debugflag) { l_int32 n1, n2, i, j, nbox, y1, y2, xl1, xl2; l_int32 shiftx, shifty, match; l_int32 *line1, *line2; /* indicator for sufficient boxes in a line */ l_int32 *yloc1, *yloc2; /* arrays of y value for first box in a line */ l_int32 *xleft1, *xleft2; /* arrays of x value for left side of first box */ NUMA *na1, *na2, *nai1, *nai2, *nasx, *nasy; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!naa1) return ERROR_INT("naa1 not defined", __func__, 1); if (!naa2) return ERROR_INT("naa2 not defined", __func__, 1); if (nperline < 1) return ERROR_INT("nperline < 1", __func__, 1); if (nreq < 1) return ERROR_INT("nreq < 1", __func__, 1); n1 = numaaGetCount(naa1); n2 = numaaGetCount(naa2); if (n1 < nreq || n2 < nreq) return 0; /* Find the lines in naa1 and naa2 with sufficient boxes. * Also, find the y-values for each of the lines, and the * LH x-values of the first box in each line. */ line1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); line2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); yloc1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); yloc2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); xleft1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); xleft2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); if (!line1 || !line2 || !yloc1 || !yloc2 || !xleft1 || !xleft2) { LEPT_FREE(line1); LEPT_FREE(line2); LEPT_FREE(yloc1); LEPT_FREE(yloc2); LEPT_FREE(xleft1); LEPT_FREE(xleft2); return ERROR_INT("calloc failure for an array", __func__, 1); } for (i = 0; i < n1; i++) { na1 = numaaGetNuma(naa1, i, L_CLONE); numaGetIValue(na1, 0, yloc1 + i); numaGetIValue(na1, 1, xleft1 + i); nbox = (numaGetCount(na1) - 1) / 2; if (nbox >= nperline) line1[i] = 1; numaDestroy(&na1); } for (i = 0; i < n2; i++) { na2 = numaaGetNuma(naa2, i, L_CLONE); numaGetIValue(na2, 0, yloc2 + i); numaGetIValue(na2, 1, xleft2 + i); nbox = (numaGetCount(na2) - 1) / 2; if (nbox >= nperline) line2[i] = 1; numaDestroy(&na2); } /* Enumerate all possible line matches. A 'possible' line * match is one where the x and y shifts for the first box * in each line are within the maxshiftx and maxshifty * constraints, and the left and right sides of the remaining * (nperline - 1) successive boxes are within delx of each other. * The result is a set of four numas giving parameters of * each set of matching lines. */ nai1 = numaCreate(0); /* line index 1 of match */ nai2 = numaCreate(0); /* line index 2 of match */ nasx = numaCreate(0); /* shiftx for match */ nasy = numaCreate(0); /* shifty for match */ for (i = 0; i < n1; i++) { if (line1[i] == 0) continue; y1 = yloc1[i]; xl1 = xleft1[i]; na1 = numaaGetNuma(naa1, i, L_CLONE); for (j = 0; j < n2; j++) { if (line2[j] == 0) continue; y2 = yloc2[j]; if (L_ABS(y1 - y2) > maxshifty) continue; xl2 = xleft2[j]; if (L_ABS(xl1 - xl2) > maxshiftx) continue; shiftx = xl1 - xl2; /* shift to add to x2 values */ shifty = y1 - y2; /* shift to add to y2 values */ na2 = numaaGetNuma(naa2, j, L_CLONE); /* Now check if 'nperline' boxes in the two lines match */ match = testLineAlignmentX(na1, na2, shiftx, delx, nperline); if (match) { numaAddNumber(nai1, i); numaAddNumber(nai2, j); numaAddNumber(nasx, shiftx); numaAddNumber(nasy, shifty); } numaDestroy(&na2); } numaDestroy(&na1); } /* Determine if there are a sufficient number of mutually * aligned matches. Mutually aligned matches place an additional * constraint on the 'possible' matches, where the relative * shifts must not exceed the (delx, dely) distances. */ countAlignedMatches(nai1, nai2, nasx, nasy, n1, n2, delx, dely, nreq, psame, debugflag); LEPT_FREE(line1); LEPT_FREE(line2); LEPT_FREE(yloc1); LEPT_FREE(yloc2); LEPT_FREE(xleft1); LEPT_FREE(xleft2); numaDestroy(&nai1); numaDestroy(&nai2); numaDestroy(&nasx); numaDestroy(&nasy); return 0; } static l_int32 testLineAlignmentX(NUMA *na1, NUMA *na2, l_int32 shiftx, l_int32 delx, l_int32 nperline) { l_int32 i, xl1, xr1, xl2, xr2, diffl, diffr; if (!na1) return ERROR_INT("na1 not defined", __func__, 1); if (!na2) return ERROR_INT("na2 not defined", __func__, 1); for (i = 0; i < nperline; i++) { numaGetIValue(na1, i + 1, &xl1); numaGetIValue(na1, i + 2, &xr1); numaGetIValue(na2, i + 1, &xl2); numaGetIValue(na2, i + 2, &xr2); diffl = L_ABS(xl1 - xl2 - shiftx); diffr = L_ABS(xr1 - xr2 - shiftx); if (diffl > delx || diffr > delx) return 0; } return 1; } /* * \brief countAlignedMatches() * * \param[in] nai1, nai2 numas of row pairs for matches * \param[in] nasx, nasy numas of x and y shifts for the matches * \param[in] n1, n2 number of rows in images 1 and 2 * \param[in] delx, dely allowed difference in shifts of the match, * compared to the reference match * \param[in] nre1 number of required aligned matches * \param[out] psame return 1 if %nreq row matches are found; * 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes 4 input arrays giving parameters of all the
 *          line matches.  It looks for the maximum set of aligned
 *          matches (matches with approximately the same overall shifts)
 *          that do not use rows from either image more than once.
 * 
*/ static l_ok countAlignedMatches(NUMA *nai1, NUMA *nai2, NUMA *nasx, NUMA *nasy, l_int32 n1, l_int32 n2, l_int32 delx, l_int32 dely, l_int32 nreq, l_int32 *psame, l_int32 debugflag) { l_int32 i, j, nm, shiftx, shifty, nmatch, diffx, diffy; l_int32 *ia1, *ia2, *iasx, *iasy, *index1, *index2; if (!nai1 || !nai2 || !nasx || !nasy) return ERROR_INT("4 input numas not defined", __func__, 1); if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; /* Check for sufficient aligned matches, doing a double iteration * over the set of raw matches. The row index arrays * are used to verify that the same rows in either image * are not used in more than one match. Whenever there * is a match that is properly aligned, those rows are * marked in the index arrays. */ nm = numaGetCount(nai1); /* number of matches */ if (nm < nreq) return 0; ia1 = numaGetIArray(nai1); ia2 = numaGetIArray(nai2); iasx = numaGetIArray(nasx); iasy = numaGetIArray(nasy); index1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); /* watch rows */ index2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); if (!index1 || !index2) return ERROR_INT("calloc fail for array", __func__, 1); for (i = 0; i < nm; i++) { if (*psame == 1) break; /* Reset row index arrays */ memset(index1, 0, 4 * n1); memset(index2, 0, 4 * n2); nmatch = 1; index1[ia1[i]] = nmatch; /* mark these rows as taken */ index2[ia2[i]] = nmatch; shiftx = iasx[i]; /* reference shift between two rows */ shifty = iasy[i]; /* ditto */ if (nreq == 1) { *psame = 1; break; } for (j = 0; j < nm; j++) { if (j == i) continue; /* Rows must both be different from any previously seen */ if (index1[ia1[j]] > 0 || index2[ia2[j]] > 0) continue; /* Check the shift for this match */ diffx = L_ABS(shiftx - iasx[j]); diffy = L_ABS(shifty - iasy[j]); if (diffx > delx || diffy > dely) continue; /* We have a match */ nmatch++; index1[ia1[j]] = nmatch; /* mark the rows */ index2[ia2[j]] = nmatch; if (nmatch >= nreq) { *psame = 1; if (debugflag) printRowIndices(index1, n1, index2, n2); break; } } } LEPT_FREE(ia1); LEPT_FREE(ia2); LEPT_FREE(iasx); LEPT_FREE(iasy); LEPT_FREE(index1); LEPT_FREE(index2); return 0; } static void printRowIndices(l_int32 *index1, l_int32 n1, l_int32 *index2, l_int32 n2) { l_int32 i; lept_stderr("Index1: "); for (i = 0; i < n1; i++) { if (i && (i % 20 == 0)) lept_stderr("\n "); lept_stderr("%3d", index1[i]); } lept_stderr("\n"); lept_stderr("Index2: "); for (i = 0; i < n2; i++) { if (i && (i % 20 == 0)) lept_stderr("\n "); lept_stderr("%3d", index2[i]); } lept_stderr("\n"); return; } leptonica-1.86.0/src/colorcontent.c000066400000000000000000002360441506303110300172310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorcontent.c *
 *
 *      Build an image of the color content, on a per-pixel basis,
 *      as a measure of the amount of divergence of each color
 *      component (R,G,B) from gray.
 *         l_int32    pixColorContent()
 *
 *      Find the 'amount' of color in an image, on a per-pixel basis,
 *      as a measure of the difference of the pixel color from gray.
 *         PIX       *pixColorMagnitude()
 *
 *      Find the fraction of pixels with "color" that are not close to black
 *         l_int32    pixColorFraction()
 *
 *      Do a linear TRC to map colors so that the three input reference
 *      values go to white.  These three numbers are typically the median
 *      or average background values.
 *         PIX       *pixColorShiftWhitePoint()
 *
 *      Generate a mask over pixels that have sufficient color and
 *      are not too close to gray pixels.
 *         PIX       *pixMaskOverColorPixels()
 *
 *      Generate a mask over dark pixels with little color
 *         PIX       *pixMaskOverGrayPixels()
 *
 *      Generate mask over pixels within a prescribed cube in RGB space
 *         PIX       *pixMaskOverColorRange()
 *
 *      Determine if there are significant color regions that are
 *      not background in a page image
 *         l_int32    pixFindColorRegions()
 *
 *      Find the number of perceptually significant gray intensities
 *      in a grayscale image.
 *         l_int32    pixNumSignificantGrayColors()
 *
 *      Identify images where color quantization will cause posterization
 *      due to the existence of many colors in low-gradient regions.
 *         l_int32    pixColorsForQuantization()
 *
 *      Find the number of unique colors in an image
 *         l_int32    pixNumColors()
 *
 *      Lossless conversion of RGB image to colormapped
 *         PIX       *pixConvertRGBToCmapLossless()
 *
 *      Find the most "populated" colors in the image (and quantize)
 *         l_int32    pixGetMostPopulatedColors()
 *         PIX       *pixSimpleColorQuantize()
 *
 *      Construct a color histogram based on rgb indices
 *         NUMA      *pixGetRGBHistogram()
 *         l_int32    makeRGBIndexTables()
 *         l_int32    getRGBFromIndex()
 *
 *      Identify images that have highlight (red) color
 *         l_int32    pixHasHighlightRed()
 *
 *  Color is tricky.  If we consider gray (r = g = b) to have no color
 *  content, how should we define the color content in each component
 *  of an arbitrary pixel, as well as the overall color magnitude?
 *
 *  I can think of three ways to define the color content in each component:
 *
 *  (1) Linear.  For each component, take the difference from the average
 *      of all three.
 *  (2) Linear.  For each component, take the difference from the average
 *      of the other two.
 *  (3) Nonlinear.  For each component, take the minimum of the differences
 *      from the other two.
 *
 *  How might one choose from among these?  Consider two different situations:
 *  (a) r = g = 0, b = 255            {255}   /255/   <255>
 *  (b) r = 0, g = 127, b = 255       {191}   /128/   <255>
 *  How much g is in each of these?  The three methods above give:
 *  (a)  1: 85   2: 127   3: 0        [85]
 *  (b)  1: 0    2: 0     3: 127      [0]
 *  How much b is in each of these?
 *  (a)  1: 170  2: 255   3: 255      [255]
 *  (b)  1: 127  2: 191   3: 127      [191]
 *  The number I'd "like" to give is in [].  (Please don't ask why, it's
 *  just a feeling.
 *
 *  So my preferences seem to be somewhere between (1) and (2).
 *  (3) is just too "decisive!"  Let's pick (2).
 *
 *  We also allow compensation for white imbalance.  For each
 *  component, we do a linear TRC (gamma = 1.0), where the black
 *  point remains at 0 and the white point is given by the input
 *  parameter.  This is equivalent to doing a global remapping,
 *  as with pixGlobalNormRGB(), followed by color content (or magnitude)
 *  computation, but without the overhead of first creating the
 *  white point normalized image.
 *
 *  Another useful property is the overall color magnitude in the pixel.
 *  For this there are again several choices, such as:
 *      (a) rms deviation from the mean
 *      (b) the average L1 deviation from the mean
 *      (c) the maximum (over components) of one of the color
 *          content measures given above.
 *
 *  For now, we will consider three of the methods in (c):
 *    L_INTERMED_DIFF
 *        Define the color magnitude as the intermediate value of the
 *        three differences between the three components.
 *        For (a) and (b) above, this value is in /../.
 *     L_AVE_MAX_DIFF_2
 *        Define the color magnitude as the maximum over components
 *        of the difference between the component value and the
 *        average of the other two.  It is easy to show that
 *        this is equivalent to selecting the two component values
 *        that are closest to each other, averaging them, and
 *        using the distance from that average to the third component.
 *        For (a) and (b) above, this value is in {..}.
 *    L_MAX_DIFF
 *        Define the color magnitude as the maximum value of the
 *        three differences between the three components.
 *        For (a) and (b) above, this value is in <..>.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* ----------------------------------------------------------------------- * * Build an image of the color content, on a per-pixel basis, * * as a measure of the amount of divergence of each color * * component (R,G,B) from gray. * * ----------------------------------------------------------------------- */ /*! * \brief pixColorContent() * * \param[in] pixs 32 bpp rgb or 8 bpp colormapped * \param[in] rref reference value for red component * \param[in] gref reference value for green component * \param[in] bref reference value for blue component * \param[in] mingray min gray value for which color is measured * \param[out] ppixr [optional] 8 bpp red 'content' * \param[out] ppixg [optional] 8 bpp green 'content' * \param[out] ppixb [optional] 8 bpp blue 'content' * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns the color content in each component, which is
 *          a measure of the deviation from gray, and is defined
 *          as the difference between the component and the average of
 *          the other two components.  See the discussion at the
 *          top of this file.
 *      (2) The three numbers (rref, gref and bref) can be thought
 *          of in two ways:
 *            (a) as the values in the image corresponding to white,
 *                to compensate for an unbalanced color white point.
 *            (b) the median or mean values of the background color of
 *                a scan.
 *          The gamma TRC transformation is used to modify all colors so that
 *          these reference values become white.
 *          These three numbers must either be all 0 or all non-zero.
 *          To skip the TRC transform, set them all to 0.
 *      (3) If the maximum component after white point correction,
 *          max(r,g,b), is less than mingray, all color components
 *          for that pixel are set to zero.
 *          Use mingray = 0 to turn off this filtering of dark pixels.
 *      (4) Therefore, use 0 for all four input parameters if the color
 *          magnitude is to be calculated without either white balance
 *          correction or dark filtering.
 * 
*/ l_ok pixColorContent(PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 mingray, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 w, h, i, j, wpl1, wplr, wplg, wplb; l_int32 rval, gval, bval, rgdiff, rbdiff, gbdiff, maxval, colorval; l_uint32 pixel; l_uint32 *data1, *datar, *datag, *datab, *line1, *liner, *lineg, *lineb; PIX *pix1, *pixr, *pixg, *pixb; if (!ppixr && !ppixg && !ppixb) return ERROR_INT("no return val requested", __func__, 1); if (ppixr) *ppixr = NULL; if (ppixg) *ppixg = NULL; if (ppixb) *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (mingray < 0) mingray = 0; if (mingray > 255) return ERROR_INT("mingray > 255", __func__, 1); /* Do the optional linear color map; this checks the ref vals */ if ((pix1 = pixColorShiftWhitePoint(pixs, rref, gref, bref)) == NULL) return ERROR_INT("pix1 not returned", __func__, 1); pixr = pixg = pixb = NULL; datar = datag = datab = NULL; liner = lineg = lineb = NULL; pixGetDimensions(pix1, &w, &h, NULL); if (ppixr) { pixr = pixCreate(w, h, 8); datar = pixGetData(pixr); wplr = pixGetWpl(pixr); *ppixr = pixr; } if (ppixg) { pixg = pixCreate(w, h, 8); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); *ppixg = pixg; } if (ppixb) { pixb = pixCreate(w, h, 8); datab = pixGetData(pixb); wplb = pixGetWpl(pixb); *ppixb = pixb; } data1 = pixGetData(pix1); wpl1 = pixGetWpl(pix1); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; if (pixr) liner = datar + i * wplr; if (pixg) lineg = datag + i * wplg; if (pixb) lineb = datab + i * wplb; for (j = 0; j < w; j++) { pixel = line1[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (mingray > 0) { /* dark pixels have no color value */ maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < mingray) continue; /* colorval = 0 for each component */ } rgdiff = L_ABS(rval - gval); rbdiff = L_ABS(rval - bval); gbdiff = L_ABS(gval - bval); if (pixr) { colorval = (rgdiff + rbdiff) / 2; SET_DATA_BYTE(liner, j, colorval); } if (pixg) { colorval = (rgdiff + gbdiff) / 2; SET_DATA_BYTE(lineg, j, colorval); } if (pixb) { colorval = (rbdiff + gbdiff) / 2; SET_DATA_BYTE(lineb, j, colorval); } } } pixDestroy(&pix1); return 0; } /* ----------------------------------------------------------------------- * * Find the 'amount' of color in an image, on a per-pixel basis, * * as a measure of the difference of the pixel color from gray. * * ----------------------------------------------------------------------- */ /*! * \brief pixColorMagnitude() * * \param[in] pixs 32 bpp rgb or 8 bpp colormapped * \param[in] rref reference value for red component * \param[in] gref reference value for green component * \param[in] bref reference value for blue component * \param[in] type chooses the method for calculating the color magnitude: * L_INTERMED_DIFF, L_AVE_MAX_DIFF_2, L_MAX_DIFF * \return pixd 8 bpp, amount of color in each source pixel, * or NULL on error * *
 * Notes:
 *      (1) For an RGB image, a gray pixel is one where all three components
 *          are equal.  We define the amount of color in an RGB pixel as
 *          a function depending on the absolute value of the differences
 *          between the three color components.  Consider the two largest
 *          of these differences.  The pixel component in common to these
 *          two differences is the color farthest from the other two.
 *          The color magnitude in an RGB pixel can be taken as one
 *          of these three definitions:
 *            (a) The minimum value of these two differences.  This is
 *                the intermediate value of the three distances between
 *                component values.
 *            (b) The average of these two differences.  This is the
 *                average distance from the two components that are
 *                nearest to each other to the third component.
 *            (c) The maximum difference between component values.
 *      (2) As an example, suppose that R and G are the closest in
 *          magnitude.  Then the color is determined as either:
 *            (a) The minimum distance of B from these two:
 *                   min(|B - R|, |B - G|).
 *            (b) The average distance of B from these two:
 *                   (|B - R| + |B - G|) / 2
 *            (c) The maximum distance of B from these two:
 *                   max(|B - R|, |B - G|)
 *      (3) This example can be visualized graphically.  Put the R,G and B
 *          component values on a line; e.g.,
 *                G...R...........B
 *            (a) B - R
 *            (b) B - (R + G) / 2
 *            (c) B - G
 *      (4) The three methods for choosing the color magnitude from
 *          the components are selected with these flags:
 *            (a) L_INTERMED_DIFF
 *            (b) L_AVE_MAX_DIFF_2
 *            (c) L_MAX_DIFF
 *      (5) The three numbers (rref, gref and bref) can be thought
 *          of in two ways:
 *            (a) as the values in the image corresponding to white,
 *                to compensate for an unbalanced color white point.
 *            (b) the median or mean values of the background color of
 *                a scan.
 *          The gamma TRC transformation is used to modify all colors so that
 *          these reference values become white.
 *          These three numbers must either be all 0 or all non-zero.
 *          To skip the TRC transform, set them all to 0.
 * 
*/ PIX * pixColorMagnitude(PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 type) { l_int32 w, h, i, j, wpl1, wpld; l_int32 rval, gval, bval, rdist, gdist, bdist, colorval; l_int32 rgdist, rbdist, gbdist, mindist, maxdist, minval, maxval; l_uint32 pixel; l_uint32 *data1, *datad, *line1, *lined; PIX *pix1, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (type != L_INTERMED_DIFF && type != L_AVE_MAX_DIFF_2 && type != L_MAX_DIFF) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); /* Do the optional linear color map; this checks the ref vals */ if ((pix1 = pixColorShiftWhitePoint(pixs, rref, gref, bref)) == NULL) return (PIX *)ERROR_PTR("pix1 not returned", __func__, NULL); pixGetDimensions(pix1, &w, &h, NULL); pixd = pixCreate(w, h, 8); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); data1 = pixGetData(pix1); wpl1 = pixGetWpl(pix1); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = line1[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (type == L_INTERMED_DIFF) { rgdist = L_ABS(rval - gval); rbdist = L_ABS(rval - bval); gbdist = L_ABS(gval - bval); maxdist = L_MAX(rgdist, rbdist); if (gbdist >= maxdist) { colorval = maxdist; } else { /* gbdist is smallest or intermediate */ mindist = L_MIN(rgdist, rbdist); colorval = L_MAX(mindist, gbdist); } } else if (type == L_AVE_MAX_DIFF_2) { rdist = ((gval + bval ) / 2 - rval); rdist = L_ABS(rdist); gdist = ((rval + bval ) / 2 - gval); gdist = L_ABS(gdist); bdist = ((rval + gval ) / 2 - bval); bdist = L_ABS(bdist); colorval = L_MAX(rdist, gdist); colorval = L_MAX(colorval, bdist); } else { /* type == L_MAX_DIFF */ minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); colorval = maxval - minval; } SET_DATA_BYTE(lined, j, colorval); } } pixDestroy(&pix1); return pixd; } /* ----------------------------------------------------------------------- * * Find the fraction of pixels with "color" that are not close to black * * ----------------------------------------------------------------------- */ /*! * \brief pixColorFraction() * * \param[in] pixs 32 bpp rgb * \param[in] darkthresh threshold near black; if the largest (lightest) * component is below this, the pixel is not * considered in the statistics; typ. 20 * \param[in] lightthresh threshold near white; if the smallest (darkest) * component is above this, the pixel is not * considered in the statistics; typ. 244 * \param[in] diffthresh thresh for the maximum difference between * component values; below this the pixel is not * considered to have sufficient color; typ. 60. * \param[in] factor subsampling factor * \param[out] ppixfract [optional] fraction of pixels in intermediate * brightness range that were considered * for color content * \param[out] pcolorfract [optional] fraction of pixels that meet the * criterion for sufficient color; 0.0 on error * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function is asking the question: to what extent does the
 *          image appear to have color?   The amount of color a pixel
 *          appears to have depends on both the deviation of the
 *          individual components from their average and on the average
 *          intensity itself.  For example, the color will be much more
 *          obvious with a small deviation from white than the same
 *          deviation from black.
 *      (2) Any pixel that meets these three tests is considered a
 *          colorful pixel:
 *            (a) the lightest component must equal or exceed %darkthresh
 *            (b) the darkest component must not exceed %lightthresh
 *            (c) the max difference between components must equal or
 *                exceed %diffthresh.
 *      (3) The dark pixels are removed from consideration because
 *          they don't appear to have color.
 *      (4) The very lightest pixels are removed because if an image
 *          has a lot of "white", the color fraction will be artificially
 *          low, even if all the other pixels are colorful.
 *      (5) If pixfract is very small, there are few pixels that are neither
 *          black nor white.  If colorfract is very small, the pixels
 *          that are neither black nor white have very little color
 *          content.  The product 'pixfract * colorfract' gives the
 *          fraction of pixels with significant color content.
 *      (6) One use of this function is as a preprocessing step for median
 *          cut quantization (colorquant2.c), which does a very poor job
 *          splitting the color space into rectangular volume elements when
 *          all the pixels are near the diagonal of the color cube.  For
 *          octree quantization of an image with only gray values, the
 *          2^(level) octcubes on the diagonal are the only ones
 *          that can be occupied.
 * 
*/ l_ok pixColorFraction(PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_int32 factor, l_float32 *ppixfract, l_float32 *pcolorfract) { l_int32 i, j, w, h, wpl, rval, gval, bval, minval, maxval; l_int32 total, npix, ncolor; l_uint32 pixel; l_uint32 *data, *line; if (ppixfract) *ppixfract = 0.0; if (pcolorfract) *pcolorfract = 0.0; if (!ppixfract && !pcolorfract) return ERROR_INT("neither &pixfract nor &colorfract are defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); npix = ncolor = total = 0; for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { total++; pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); if (minval > lightthresh) /* near white */ continue; maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < darkthresh) /* near black */ continue; npix++; if (maxval - minval >= diffthresh) ncolor++; } } if (npix == 0) { L_WARNING("No pixels found for consideration\n", __func__); return 0; } if (ppixfract) *ppixfract = (l_float32)npix / (l_float32)total; if (pcolorfract) *pcolorfract = (l_float32)ncolor / (l_float32)npix; return 0; } /* ----------------------------------------------------------------------- * * Do a linear TRC to map colors so that the three input reference * * values go to white. These three numbers are typically the median * * or average background values. * * ----------------------------------------------------------------------- */ /*! * \brief pixColorShiftWhitePoint() * * \param[in] pixs 32 bpp rgb or 8 bpp colormapped * \param[in] rref reference value for red component * \param[in] gref reference value for green component * \param[in] bref reference value for blue component * \return pix2 32 bpp if OK, NULL on error * *
 * Notes:
 *      (1) This returns a pix where the colors are linearly mapped to
 *          so that the components go to 255 at the input reference values.
 *      (2) These three numbers (rref, gref and bref) can be thought
 *          of in two ways:
 *            (a) as the values in the image corresponding to white,
 *                to compensate for an unbalanced color white point.
 *            (b) the median or mean values of the background color of
 *                an image.
 *          A linear (gamma = 1) TRC transformation is used.
 *      (3) Any existing colormap is removed and a 32 bpp rgb pix is returned.
 *      (4) No transformation is applied if any of the three numbers are <= 0.
 *          If any are < 0, or if some but not all are 0, a warning is given.
 * 
*/ PIX * pixColorShiftWhitePoint(PIX *pixs, l_int32 rref, l_int32 gref, l_int32 bref) { l_int32 w, h, i, j, wpl1, wpl2, rval, gval, bval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *data1, *data2, *line1, *line2; NUMA *nar, *nag, *nab; PIX *pix1, *pix2; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); cmap = pixGetColormap(pixs); if (!cmap && pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs neither cmapped nor 32 bpp", __func__, NULL); if (cmap) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pix1 = pixClone(pixs); if (!rref && !gref && !bref) /* all 0; no transform requested */ return pix1; /* Some ref values are < 0, or some (but not all) are 0 */ if ((rref < 0 || gref < 0 || bref < 0) || (rref * gref * bref == 0)) { L_WARNING("invalid set of ref values\n", __func__); return pix1; } /* All white point ref values > 0; do transformation */ pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixCreate(w, h, 32); data1 = pixGetData(pix1); wpl1 = pixGetWpl(pix1); data2 = pixGetData(pix2); wpl2 = pixGetWpl(pix2); nar = numaGammaTRC(1.0, 0, rref); rtab = numaGetIArray(nar); nag = numaGammaTRC(1.0, 0, gref); gtab = numaGetIArray(nag); nab = numaGammaTRC(1.0, 0, bref); btab = numaGetIArray(nab); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j++) { pixel = line1[j]; extractRGBValues(pixel, &rval, &gval, &bval); rval = rtab[rval]; gval = gtab[gval]; bval = btab[bval]; composeRGBPixel(rval, gval, bval, line2 + j); } } numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); pixDestroy(&pix1); return pix2; } /* ----------------------------------------------------------------------- * * Generate a mask over pixels that have sufficient color and * * are not too close to gray pixels. * * ----------------------------------------------------------------------- */ /*! * \brief pixMaskOverColorPixels() * * \param[in] pixs 32 bpp rgb or 8 bpp colormapped * \param[in] threshdiff threshold for minimum of the max difference * between components * \param[in] mindist min allowed distance from nearest non-color pixel * \return pixd 1 bpp, mask over color pixels, or NULL on error * *
 * Notes:
 *      (1) The generated mask identifies each pixel as either color or
 *          non-color.  For a pixel to be color, it must satisfy two
 *          constraints:
 *            (a) The max difference between the r,g and b components must
 *                equal or exceed a threshold %threshdiff.
 *            (b) It must be at least %mindist (in an 8-connected way)
 *                from the nearest non-color pixel.
 *      (2) The distance constraint (b) is only applied if %mindist > 1.
 *          For example, if %mindist == 2, the color pixels identified
 *          by (a) are eroded by a 3x3 Sel.  In general, the Sel size
 *          for erosion is 2 * (%mindist - 1) + 1.
 *          Why have this constraint?  In scanned images that are
 *          essentially gray, color artifacts are typically introduced
 *          in transition regions near sharp edges that go from dark
 *          to light, so this allows these transition regions to be removed.
 * 
*/ PIX * pixMaskOverColorPixels(PIX *pixs, l_int32 threshdiff, l_int32 mindist) { l_int32 w, h, d, i, j, wpls, wpld, size; l_int32 rval, gval, bval, minval, maxval; l_uint32 *datas, *datad, *lines, *lined; PIX *pixc, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (cmap) pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixs); if (!pixc || pixGetDepth(pixc) != 32) { pixDestroy(&pixc); return (PIX *)ERROR_PTR("rgb pix not made", __func__, NULL); } pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixc); wpls = pixGetWpl(pixc); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval - minval >= threshdiff) SET_DATA_BIT(lined, j); } } if (mindist > 1) { size = 2 * (mindist - 1) + 1; pixErodeBrick(pixd, pixd, size, size); } pixDestroy(&pixc); return pixd; } /* ----------------------------------------------------------------------- * * Generate a mask over dark pixels with little color * * ----------------------------------------------------------------------- */ /*! * \brief pixMaskOverGrayPixels() * * \param[in] pixs 32 bpp rgb * \param[in] maxlimit only consider pixels with max component <= %maxlimit * \param[in] satlimit only consider pixels with saturation <= %satlimit * \return pixd (1 bpp), or NULL on error * *
 * Notes:
 *      (1) This generates a mask over rgb pixels that are gray (i.e.,
 *          have low saturation) and are not too bright.  For example, if
 *          we know that the gray pixels in %pixs have saturation
 *          (max - min) less than 10, and brightness (max) less than 200,
 *             pixMaskOverGrayPixels(pixs, 220, 10)
 *          will generate a mask over the gray pixels.  Other pixels that
 *          are not too dark and have a relatively large saturation will
 *          be little affected.
 *      (2) The algorithm is related to pixDarkenGray().
 * 
*/ PIX * pixMaskOverGrayPixels(PIX *pixs, l_int32 maxlimit, l_int32 satlimit) { l_int32 w, h, i, j, wpls, wpld; l_int32 rval, gval, bval, minrg, min, maxrg, max, sat; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (maxlimit < 0 || maxlimit > 255) return (PIX *)ERROR_PTR("invalid maxlimit", __func__, NULL); if (satlimit < 1) return (PIX *)ERROR_PTR("invalid satlimit", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); sat = max - min; if (max <= maxlimit && sat <= satlimit) SET_DATA_BIT(lined, j); } } return pixd; } /* ----------------------------------------------------------------------- * * Generate a mask over pixels that have RGB color components * * within the prescribed range (a cube in RGB color space) * * ----------------------------------------------------------------------- */ /*! * \brief pixMaskOverColorRange() * * \param[in] pixs 32 bpp rgb or 8 bpp colormapped * \param[in] rmin, rmax min and max allowed values for red component * \param[in] gmin, gmax ditto for green * \param[in] bmin, bmax ditto for blue * \return pixd 1 bpp, mask over color pixels, or NULL on error */ PIX * pixMaskOverColorRange(PIX *pixs, l_int32 rmin, l_int32 rmax, l_int32 gmin, l_int32 gmax, l_int32 bmin, l_int32 bmax) { l_int32 w, h, d, i, j, wpls, wpld; l_int32 rval, gval, bval; l_uint32 *datas, *datad, *lines, *lined; PIX *pixc, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (cmap) pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixs); pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixc); wpls = pixGetWpl(pixc); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); if (rval < rmin || rval > rmax) continue; if (gval < gmin || gval > gmax) continue; if (bval < bmin || bval > bmax) continue; SET_DATA_BIT(lined, j); } } pixDestroy(&pixc); return pixd; } /* ----------------------------------------------------------------------- * * Determine if there are significant color regions in a page image * * ----------------------------------------------------------------------- */ /*! * \brief pixFindColorRegions() * * \param[in] pixs 32 bpp rgb * \param[in] pixm [optional] 1 bpp mask image * \param[in] factor subsample factor; integer >= 1 * \param[in] lightthresh threshold for component average in lightest * of 10 buckets; typ. 210; -1 for default * \param[in] darkthresh threshold to eliminate dark pixels (e.g., text) * from consideration; typ. 70; -1 for default. * \param[in] mindiff minimum difference (b - r) and (g - r), used to * find blue or green pixels; typ. 10; -1 for default * \param[in] colordiff minimum difference in (max - min) component to * qualify as a color pixel; typ. 90; -1 for default * \param[in] edgefract fraction of image half-width and half-height * for which color pixels are ignored; typ. 0.05. * \param[out] pcolorfract fraction of 'color' pixels found * \param[out] pcolormask1 [optional] mask over background color, if any * \param[out] pcolormask2 [optional] filtered mask over background color * \param[out] pixadb [optional] debug intermediate results * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function tries to determine if there is a significant
 *          color or darker region on a scanned page image, where part
 *          of the image is background that is either white or reddish.
 *          This also allows extraction of regions of colored pixels that
 *          have a smaller red component than blue or green components.
 *      (2) If %pixm exists, pixels under its fg are combined with
 *          dark pixels to make a mask of pixels not to be considered
 *          as color candidates.
 *      (3) There are four thresholds.
 *          * %lightthresh: compute the average value of each rgb pixel,
 *            and make 10 buckets by value.  If the lightest bucket gray
 *            value is below %lightthresh, the image is not considered
 *            to have a light bg, and this returns 0.0 for %colorfract.
 *          * %darkthresh: ignore pixels darker than this (typ. fg text).
 *            We make a 1 bpp mask of these pixels, and then dilate it to
 *            remove all vestiges of fg from their vicinity.
 *          * %mindiff: consider pixels with either (b - r) or (g - r)
 *            being at least this value, as having color.
 *          * %colordiff: consider pixels where the (max - min) difference
 *            of the pixel components exceeds this value, as having color.
 *      (4) All components of color pixels that are touching the image
 *          border are removed.  Additionally, all pixels within some
 *          normalized distance %edgefract from the image border can
 *          be removed.  This insures that dark pixels near the edge
 *          of the image are not included.
 *      (5) This returns in %pcolorfract the fraction of pixels that have
 *          color and are not in the set consisting of an OR between
 *          %pixm and the dilated dark pixel mask.
 *      (6) No masks are returned unless light color pixels are found.
 *          If colorfract > 0.0 and %pcolormask1 is defined, this returns
 *          a 1 bpp mask with fg pixels over the color background.
 *          This mask may have some holes in it.
 *      (7) If colorfract > 0.0 and %pcolormask2 is defined, this returns
 *          a version of colormask1 where small holes have been filled.
 *      (8) To generate a boxa of rectangular regions from the overlap
 *          of components in the filtered mask:
 *                boxa1 = pixConnCompBB(colormask2, 8);
 *                boxa2 = boxaCombineOverlaps(boxa1, NULL);
 *          This is done here in debug mode.
 * 
*/ l_ok pixFindColorRegions(PIX *pixs, PIX *pixm, l_int32 factor, l_int32 lightthresh, l_int32 darkthresh, l_int32 mindiff, l_int32 colordiff, l_float32 edgefract, l_float32 *pcolorfract, PIX **pcolormask1, PIX **pcolormask2, PIXA *pixadb) { l_int32 w, h, count, rval, gval, bval, aveval, proceed; l_float32 ratio; l_uint32 *carray; BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixm1, *pixm2, *pixm3; if (pcolormask1) *pcolormask1 = NULL; if (pcolormask2) *pcolormask2 = NULL; if (!pcolorfract) return ERROR_INT("&colorfract not defined", __func__, 1); *pcolorfract = 0.0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (factor < 1) factor = 1; if (lightthresh < 0) lightthresh = 210; /* defaults */ if (darkthresh < 0) darkthresh = 70; if (mindiff < 0) mindiff = 10; if (colordiff < 0) colordiff = 90; if (edgefract < 0.0 || edgefract > 1.0) edgefract = 0.05f; /* Check if pixm covers most of the image. If so, just return. */ if (pixm) { pixForegroundFraction(pixm, &ratio); if (ratio > 0.7) { if (pixadb) L_INFO("pixm has big fg: %f5.2\n", __func__, ratio); return 0; } } /* Get the light background color. Use the average component value * and select the lightest of 10 buckets. Require that it is * reddish and, using lightthresh, not too dark. */ pixGetRankColorArray(pixs, 10, L_SELECT_AVERAGE, factor, &carray, NULL, 0); if (!carray) return ERROR_INT("rank color array not made", __func__, 1); extractRGBValues(carray[9], &rval, &gval, &bval); if (pixadb) L_INFO("lightest background color: (r,g,b) = (%d,%d,%d)\n", __func__, rval, gval, bval); proceed = TRUE; if ((rval < bval - 2) || (rval < gval - 2)) { if (pixadb) L_INFO("background not reddish\n", __func__); proceed = FALSE; } aveval = (rval + gval + bval) / 3; if (aveval < lightthresh) { if (pixadb) L_INFO("background too dark\n", __func__); proceed = FALSE; } if (pixadb) { pix1 = pixDisplayColorArray(carray, 10, 120, 3, 6); pixaAddPix(pixadb, pix1, L_INSERT); } LEPT_FREE(carray); if (proceed == FALSE) return 0; /* Make a mask pixm1 over the dark pixels in the image: * convert to gray using the average of the components; * threshold using darkthresh; do a small dilation; * combine with pixm. */ pix1 = pixConvertRGBToGray(pixs, 0.33f, 0.34f, 0.33f); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); pixm1 = pixThresholdToBinary(pix1, darkthresh); pixDilateBrick(pixm1, pixm1, 7, 7); if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); if (pixm) { pixOr(pixm1, pixm1, pixm); if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); } pixDestroy(&pix1); /* Make masks over pixels that are bluish, or greenish, or have a very large color saturation (max - min) value. */ pixm2 = pixConvertRGBToBinaryArb(pixs, -1.0, 0.0, 1.0, mindiff, L_SELECT_IF_GTE); /* b - r */ if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); pix1 = pixConvertRGBToBinaryArb(pixs, -1.0, 1.0, 0.0, mindiff, L_SELECT_IF_GTE); /* g - r */ if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); pixOr(pixm2, pixm2, pix1); pixDestroy(&pix1); pix1 = pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MAXDIFF); pix2 = pixThresholdToBinary(pix1, colordiff); pixInvert(pix2, pix2); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); pixOr(pixm2, pixm2, pix2); if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); pixDestroy(&pix1); pixDestroy(&pix2); /* Subtract the dark pixels represented by pixm1. * pixm2 now holds all the color pixels of interest */ pixSubtract(pixm2, pixm2, pixm1); pixDestroy(&pixm1); if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); /* But we're not quite finished. Remove pixels from any component * that is touching the image border. False color pixels can * sometimes be found there if the image is much darker near * the border, due to oxidation or reduced illumination. Also * remove any pixels within the normalized fraction %distfract * of the image border. */ pixm3 = pixRemoveBorderConnComps(pixm2, 8); pixGetDimensions(pixm3, &w, &h, NULL); pixDestroy(&pixm2); if (edgefract > 0.0) { pix2 = pixMakeSymmetricMask(w, h, edgefract, edgefract, L_USE_INNER); pixAnd(pixm3, pixm3, pix2); pixDestroy(&pix2); } if (pixadb) pixaAddPix(pixadb, pixm3, L_COPY); /* Get the fraction of light color pixels */ pixCountPixels(pixm3, &count, NULL); *pcolorfract = (l_float32)count / ((l_float32)(w) * h); if (pixadb) { if (count == 0) L_INFO("no light color pixels found\n", __func__); else L_INFO("fraction of light color pixels = %5.3f\n", __func__, *pcolorfract); } /* Debug: extract the color pixels from pixs */ if (pixadb && count > 0) { /* Use pixm3 to extract the color pixels */ pix3 = pixCreateTemplate(pixs); pixSetAll(pix3); pixCombineMasked(pix3, pixs, pixm3); pixaAddPix(pixadb, pix3, L_INSERT); /* Use additional filtering to extract the color pixels */ pix3 = pixCloseSafeBrick(NULL, pixm3, 15, 15); pixaAddPix(pixadb, pix3, L_INSERT); pix5 = pixCreateTemplate(pixs); pixSetAll(pix5); pixCombineMasked(pix5, pixs, pix3); pixaAddPix(pixadb, pix5, L_INSERT); /* Get the combined bounding boxes of the mask components * in pix3, and extract those pixels from pixs. */ boxa1 = pixConnCompBB(pix3, 8); boxa2 = boxaCombineOverlaps(boxa1, NULL); pix4 = pixCreateTemplate(pix3); pixMaskBoxa(pix4, pix4, boxa2, L_SET_PIXELS); pixaAddPix(pixadb, pix4, L_INSERT); pix5 = pixCreateTemplate(pixs); pixSetAll(pix5); pixCombineMasked(pix5, pixs, pix4); pixaAddPix(pixadb, pix5, L_INSERT); boxaDestroy(&boxa1); boxaDestroy(&boxa2); } pixaAddPix(pixadb, pixs, L_COPY); /* Optional colormask returns */ if (pcolormask2 && count > 0) *pcolormask2 = pixCloseSafeBrick(NULL, pixm3, 15, 15); if (pcolormask1 && count > 0) *pcolormask1 = pixm3; else pixDestroy(&pixm3); return 0; } /* ----------------------------------------------------------------------- * * Find the number of perceptually significant gray intensities * * in a grayscale image. * * ----------------------------------------------------------------------- */ /*! * \brief pixNumSignificantGrayColors() * * \param[in] pixs 8 bpp gray * \param[in] darkthresh dark threshold for minimum intensity to be * considered; typ. 20 * \param[in] lightthresh threshold near white, for maximum intensity * to be considered; typ. 236 * \param[in] minfract minimum fraction of all pixels to include a level * as significant; typ. 0.0001; should be < 0.001 * \param[in] factor subsample factor; integer >= 1 * \param[out] pncolors number of significant colors; 0 on error * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function is asking the question: how many perceptually
 *          significant gray color levels is in this pix?
 *          A color level must meet 3 criteria to be significant:
 *            ~ it can't be too close to black
 *            ~ it can't be too close to white
 *            ~ it must have at least some minimum fractional population
 *      (2) Use -1 for default values for darkthresh, lightthresh and minfract.
 *      (3) Choose default of darkthresh = 20, because variations in very
 *          dark pixels are not visually significant.
 *      (4) Choose default of lightthresh = 236, because document images
 *          that have been jpeg'd typically have near-white pixels in the
 *          8x8 jpeg blocks, and these should not be counted.  It is desirable
 *          to obtain a clean image by quantizing this noise away.
 * 
*/ l_ok pixNumSignificantGrayColors(PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_float32 minfract, l_int32 factor, l_int32 *pncolors) { l_int32 i, w, h, count, mincount, ncolors; NUMA *na; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (darkthresh < 0) darkthresh = 20; /* defaults */ if (lightthresh < 0) lightthresh = 236; if (minfract < 0.0) minfract = 0.0001f; if (minfract > 1.0) return ERROR_INT("minfract > 1.0", __func__, 1); if (minfract >= 0.001) L_WARNING("minfract too big; likely to underestimate ncolors\n", __func__); if (lightthresh > 255 || darkthresh >= lightthresh) return ERROR_INT("invalid thresholds", __func__, 1); if (factor < 1) factor = 1; pixGetDimensions(pixs, &w, &h, NULL); mincount = (l_int32)(minfract * w * h * factor * factor); if ((na = pixGetGrayHistogram(pixs, factor)) == NULL) return ERROR_INT("na not made", __func__, 1); ncolors = 2; /* add in black and white */ for (i = darkthresh; i <= lightthresh; i++) { numaGetIValue(na, i, &count); if (count >= mincount) ncolors++; } *pncolors = ncolors; numaDestroy(&na); return 0; } /* ----------------------------------------------------------------------- * * Identifies images where color quantization will cause posterization * * due to the existence of many colors in low-gradient regions. * * ----------------------------------------------------------------------- */ /*! * \brief pixColorsForQuantization() * \param[in] pixs 8 bpp gray or 32 bpp rgb; with or without colormap * \param[in] thresh binary threshold on edge gradient; 0 for default * \param[out] pncolors the number of colors found * \param[out] piscolor [optional] 1 if significant color is found; * 0 otherwise. If pixs is 8 bpp, and does not have * a colormap with color entries, this is 0 * \param[in] debug 1 to output masked image that is tested for colors; * 0 otherwise * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This function finds a measure of the number of colors that are
 *          found in low-gradient regions of an image.  By its
 *          magnitude relative to some threshold (not specified in
 *          this function), it gives a good indication of whether
 *          quantization will generate posterization.   This number
 *          is larger for images with regions of slowly varying
 *          intensity (if 8 bpp) or color (if rgb). Such images, if
 *          quantized, may require dithering to avoid posterization,
 *          and lossless compression is then expected to be poor.
 *      (2) If pixs has a colormap, the number of colors returned is
 *          the number in the colormap.
 *      (3) It is recommended that document images be reduced to a width
 *          of 800 pixels before applying this function.  Then it can
 *          be expected that color detection will be fairly accurate
 *          and the number of colors will reflect both the content and
 *          the type of compression to be used.  For less than 15 colors,
 *          there is unlikely to be a halftone image, and lossless
 *          quantization should give both a good visual result and
 *          better compression.
 *      (4) When using the default threshold on the gradient (15),
 *          images (both gray and rgb) where ncolors is greater than
 *          about 15 will compress poorly with either lossless
 *          compression or dithered quantization, and they may be
 *          posterized with non-dithered quantization.
 *      (5) For grayscale images, or images without significant color,
 *          this returns the number of significant gray levels in
 *          the low-gradient regions.  The actual number of gray levels
 *          can be large due to jpeg compression noise in the background.
 *      (6) Similarly, for color images, the actual number of different
 *          (r,g,b) colors in the low-gradient regions (rather than the
 *          number of occupied level 4 octcubes) can be quite large, e.g.,
 *          due to jpeg compression noise, even for regions that appear
 *          to be of a single color.  By quantizing to level 4 octcubes,
 *          most of these superfluous colors are removed from the counting.
 *      (7) The image is tested for color.  If there is very little color,
 *          it is thresholded to gray and the number of gray levels in
 *          the low gradient regions is found.  If the image has color,
 *          the number of occupied level 4 octcubes is found.
 *      (8) The number of colors in the low-gradient regions increases
 *          monotonically with the threshold %thresh on the edge gradient.
 *      (9) Background: grayscale and color quantization is often useful
 *          to achieve highly compressed images with little visible
 *          distortion.  However, gray or color washes (regions of
 *          low gradient) can defeat this approach to high compression.
 *          How can one determine if an image is expected to compress
 *          well using gray or color quantization?  We use the fact that
 *            * gray washes, when quantized with less than 50 intensities,
 *              have posterization (visible boundaries between regions
 *              of uniform 'color') and poor lossless compression
 *            * color washes, when quantized with level 4 octcubes,
 *              typically result in both posterization and the occupancy
 *              of many level 4 octcubes.
 *          Images can have colors either intrinsically or as jpeg
 *          compression artifacts.  This function reduces but does not
 *          completely eliminate measurement of jpeg quantization noise
 *          in the white background of grayscale or color images.
 * 
*/ l_ok pixColorsForQuantization(PIX *pixs, l_int32 thresh, l_int32 *pncolors, l_int32 *piscolor, l_int32 debug) { l_int32 w, h, d, minside, factor; l_float32 pixfract, colorfract; PIX *pixt, *pixsc, *pixg, *pixe, *pixb, *pixm; PIXCMAP *cmap; if (piscolor) *piscolor = 0; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) != NULL) { *pncolors = pixcmapGetCount(cmap); if (piscolor) pixcmapHasColor(cmap, piscolor); return 0; } pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", __func__, 1); if (thresh <= 0) thresh = 15; /* First test if 32 bpp has any significant color; if not, * convert it to gray. Colors whose average values are within * 20 of black or 8 of white are ignored because they're not * very 'colorful'. If less than 2.5/10000 of the pixels have * significant color, consider the image to be gray. */ minside = L_MIN(w, h); if (d == 8) { pixt = pixClone(pixs); } else { /* d == 32 */ factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 248, 30, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.00025) { pixt = pixGetRGBComponent(pixs, COLOR_RED); d = 8; } else { /* d == 32 */ pixt = pixClone(pixs); if (piscolor) *piscolor = 1; } } /* If the smallest side is less than 1000, do not downscale. * If it is in [1000 ... 2000), downscale by 2x. If it is >= 2000, * downscale by 4x. Factors of 2 are chosen for speed. The * actual resolution at which subsequent calculations take place * is not strongly dependent on downscaling. */ factor = L_MAX(1, minside / 500); if (factor == 1) pixsc = pixCopy(NULL, pixt); /* to be sure pixs is unchanged */ else if (factor == 2 || factor == 3) pixsc = pixScaleAreaMap2(pixt); else pixsc = pixScaleAreaMap(pixt, 0.25, 0.25); /* Basic edge mask generation procedure: * ~ work on a grayscale image * ~ get a 1 bpp edge mask by using an edge filter and * thresholding to get fg pixels at the edges * ~ for gray, dilate with a 3x3 brick Sel to get mask over * all pixels within a distance of 1 pixel from the nearest * edge pixel * ~ for color, dilate with a 7x7 brick Sel to get mask over * all pixels within a distance of 3 pixels from the nearest * edge pixel */ if (d == 8) pixg = pixClone(pixsc); else /* d == 32 */ pixg = pixConvertRGBToLuminance(pixsc); pixe = pixSobelEdgeFilter(pixg, L_ALL_EDGES); pixb = pixThresholdToBinary(pixe, thresh); pixInvert(pixb, pixb); if (d == 8) pixm = pixMorphSequence(pixb, "d3.3", 0); else pixm = pixMorphSequence(pixb, "d7.7", 0); /* Mask the near-edge pixels to white, and count the colors. * If grayscale, don't count colors within 20 levels of * black or white, and only count colors with a fraction * of at least 1/10000 of the image pixels. * If color, count the number of level 4 octcubes that * contain at least 20 pixels. These magic numbers are guesses * as to what might work, based on a small data set. Results * should not be overly sensitive to their actual values. */ if (d == 8) { pixSetMasked(pixg, pixm, 0xff); if (debug) pixWrite("junkpix8.png", pixg, IFF_PNG); pixNumSignificantGrayColors(pixg, 20, 236, 0.0001f, 1, pncolors); } else { /* d == 32 */ pixSetMasked(pixsc, pixm, 0xffffffff); if (debug) pixWrite("junkpix32.png", pixsc, IFF_PNG); pixNumberOccupiedOctcubes(pixsc, 4, 20, -1, pncolors); } pixDestroy(&pixt); pixDestroy(&pixsc); pixDestroy(&pixg); pixDestroy(&pixe); pixDestroy(&pixb); pixDestroy(&pixm); return 0; } /* ----------------------------------------------------------------------- * * Find the number of unique colors in an image * * ----------------------------------------------------------------------- */ /*! * \brief pixNumColors() * \param[in] pixs 2, 4, 8, 32 bpp * \param[in] factor subsampling factor; integer * \param[out] pncolors the number of colors found in the pix * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This returns the number of colors found in the image,
 *          even if there is a colormap.  If %factor == 1 and the
 *          number of colors differs from the number of entries
 *          in the colormap, a warning is issued.
 *      (2) Use %factor == 1 to find the actual number of colors.
 *          Use %factor > 1 to more efficiently find an approximate
 *          number of colors.
 *      (3) For d = 2, 4 or 8 bpp grayscale, this returns the number
 *          of colors found in the image in 'ncolors'.
 *      (4) For d = 32 bpp (rgb), if the number of colors is greater
 *          than 256, this uses a hash set with %factor == 1.
 * 
*/ l_ok pixNumColors(PIX *pixs, l_int32 factor, l_int32 *pncolors) { l_int32 w, h, d, i, j, wpl, hashsize, sum, count, manycolors; l_int32 rval, gval, bval, val; l_int32 *inta; l_uint32 pixel; l_uint32 *data, *line; PIXCMAP *cmap; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8 && d != 32) return ERROR_INT("d not in {2, 4, 8, 32}", __func__, 1); if (factor < 1) factor = 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); sum = 0; if (d != 32) { /* grayscale */ inta = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(line, j); else if (d == 4) val = GET_DATA_QBIT(line, j); else /* d == 2 */ val = GET_DATA_DIBIT(line, j); inta[val] = 1; } } for (i = 0; i < 256; i++) if (inta[i]) sum++; *pncolors = sum; LEPT_FREE(inta); cmap = pixGetColormap(pixs); if (cmap && factor == 1) { count = pixcmapGetCount(cmap); if (sum != count) L_WARNING("colormap size %d differs from actual colors\n", __func__, count); } return 0; } /* 32 bpp rgb; quit if we get above 256 colors */ hashsize = 5507; /* big and prime; collisions are not likely */ inta = (l_int32 *)LEPT_CALLOC(hashsize, sizeof(l_int32)); manycolors = 0; for (i = 0; i < h && manycolors == 0; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); val = (137 * rval + 269 * gval + 353 * bval) % hashsize; if (inta[val] == 0) { inta[val] = 1; sum++; if (sum > 256) { manycolors = 1; break; } } } } LEPT_FREE(inta); if (manycolors == 0) { *pncolors = sum; return 0; } /* More than 256 colors in RGB image; count all the pixels */ return pixCountRGBColorsByHash(pixs, pncolors); } /* ----------------------------------------------------------------------- * * Lossless conversion of RGB image to colormapped * * ----------------------------------------------------------------------- */ /*! * \brief pixConvertRGBToCmapLossless() * \param[in] pixs 32 bpp RGB * \return pixd if num colors <= 256; null otherwise or on error * *
 * Notes:
 *      (1) If there are not more than 256 colors, this losslessly
 *          converts and RGB image to a colormapped one, with the
 *          smallest pixel depth required to hold all the colors.
 * 
*/ PIX * pixConvertRGBToCmapLossless(PIX *pixs) { l_int32 w, h, d, i, j, wpls, wpld, hashsize, hashval, ncolors, index; l_int32 rval, gval, bval, val; l_int32 *hasha1, *hasha2; l_uint32 pixel; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); pixNumColors(pixs, 1, &ncolors); if (ncolors > 256) { L_ERROR("too many colors found: %d\n", __func__, ncolors); return NULL; } pixGetDimensions(pixs, &w, &h, NULL); if (ncolors <= 2) d = 1; else if (ncolors <= 4) d = 2; else if (ncolors <= 16) d = 4; else /* ncolors <= 256 */ d = 8; if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(d); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* hasha1 is a 1/0 indicator array for colors seen. hasha2 holds the index into the colormap that will be generated from the colors in the order seen. This is the value inserted into pixd. */ hashsize = 5507; /* big and prime; collisions are not likely */ hasha1 = (l_int32 *)LEPT_CALLOC(hashsize, sizeof(l_int32)); hasha2 = (l_int32 *)LEPT_CALLOC(hashsize, sizeof(l_int32)); index = -1; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = lines[j]; extractRGBValues(pixel, &rval, &gval, &bval); hashval = (137 * rval + 269 * gval + 353 * bval) % hashsize; if (hasha1[hashval] == 0) { /* new color */ hasha1[hashval] = 1; index++; hasha2[hashval] = index; pixcmapAddColor(cmap, rval, gval, bval); } val = hasha2[hashval]; setLineDataVal(lined, j, d, val); } } pixSetColormap(pixd, cmap); LEPT_FREE(hasha1); LEPT_FREE(hasha2); return pixd; } /* ----------------------------------------------------------------------- * * Find the most "populated" colors in the image (and quantize) * * ----------------------------------------------------------------------- */ /*! * \brief pixGetMostPopulatedColors() * \param[in] pixs 32 bpp rgb * \param[in] sigbits 2-6, significant bits retained in the quantizer * for each component of the input image * \param[in] factor subsampling factor; use 1 for no subsampling * \param[in] ncolors the number of most populated colors to select * \param[out] parray [optional] array of colors, each as 0xrrggbb00 * \param[out] pcmap [optional] colormap of the colors * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the %ncolors most populated cubes in rgb colorspace,
 *          where the cube size depends on %sigbits as
 *               cube side = (256 >> sigbits)
 *      (2) The rgb color components are found at the center of the cube.
 *      (3) The output array of colors can be displayed using
 *               pixDisplayColorArray(array, ncolors, ...);
 * 
*/ l_ok pixGetMostPopulatedColors(PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors, l_uint32 **parray, PIXCMAP **pcmap) { l_int32 n, i, rgbindex, rval, gval, bval; NUMA *nahisto, *naindex; if (!parray && !pcmap) return ERROR_INT("no return val requested", __func__, 1); if (parray) *parray = NULL; if (pcmap) *pcmap = NULL; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined", __func__, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", __func__, 1); if (factor < 1 || ncolors < 1) return ERROR_INT("factor < 1 or ncolors < 1", __func__, 1); if ((nahisto = pixGetRGBHistogram(pixs, sigbits, factor)) == NULL) return ERROR_INT("nahisto not made", __func__, 1); /* naindex contains the index into nahisto, which is the rgbindex */ naindex = numaSortIndexAutoSelect(nahisto, L_SORT_DECREASING); numaDestroy(&nahisto); if (!naindex) return ERROR_INT("naindex not made", __func__, 1); n = numaGetCount(naindex); ncolors = L_MIN(n, ncolors); if (parray) *parray = (l_uint32 *)LEPT_CALLOC(ncolors, sizeof(l_uint32)); if (pcmap) *pcmap = pixcmapCreate(8); for (i = 0; i < ncolors; i++) { numaGetIValue(naindex, i, &rgbindex); /* rgb index */ getRGBFromIndex(rgbindex, sigbits, &rval, &gval, &bval); if (parray) composeRGBPixel(rval, gval, bval, *parray + i); if (pcmap) pixcmapAddColor(*pcmap, rval, gval, bval); } numaDestroy(&naindex); return 0; } /*! * \brief pixSimpleColorQuantize() * \param[in] pixs 32 bpp rgb * \param[in] sigbits 2-4, significant bits retained in the quantizer * for each component of the input image * \param[in] factor subsampling factor; use 1 for no subsampling * \param[in] ncolors the number of most populated colors to select * \return pixd 8 bpp cmapped or NULL on error * *
 * Notes:
 *      (1) If you want to do color quantization for real, use octcube
 *          or modified median cut.  This function shows that it is
 *          easy to make a simple quantizer based solely on the population
 *          in cells of a given size in rgb color space.
 *      (2) The %ncolors most populated cells at the %sigbits level form
 *          the colormap for quantizing, and this uses octcube indexing
 *          under the covers to assign each pixel to the nearest color.
 *      (3) %sigbits is restricted to 2, 3 and 4.  At the low end, the
 *          color discrimination is very crude; at the upper end, a set of
 *          similar colors can dominate the result.  Interesting results
 *          are generally found for %sigbits = 3 and ncolors ~ 20.
 *      (4) See also pixColorSegment() for a method of quantizing the
 *          colors to generate regions of similar color.
 *      (5) See also pixConvertRGBToCmapLossless() to losslessly convert
 *          an RGB image with not more than 256 colors.
 * 
*/ PIX * pixSimpleColorQuantize(PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors) { l_int32 w, h; PIX *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (sigbits < 2 || sigbits > 4) return (PIX *)ERROR_PTR("sigbits not in {2,3,4}", __func__, NULL); pixGetMostPopulatedColors(pixs, sigbits, factor, ncolors, NULL, &cmap); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 8); pixSetColormap(pixd, cmap); pixAssignToNearestColor(pixd, pixs, NULL, 4, NULL); return pixd; } /* ----------------------------------------------------------------------- * * Constructs a color histogram based on rgb indices * * ----------------------------------------------------------------------- */ /*! * \brief pixGetRGBHistogram() * \param[in] pixs 32 bpp rgb * \param[in] sigbits 2-6, significant bits retained in the quantizer * for each component of the input image * \param[in] factor subsampling factor; use 1 for no subsampling * \return numa histogram of colors, indexed by RGB * components, or NULL on error * *
 * Notes:
 *      (1) This uses a simple, fast method of indexing into an rgb image.
 *      (2) The output is a 1D histogram of count vs. rgb-index, which
 *          uses red sigbits as the most significant and blue as the least.
 *      (3) This function produces the same result as pixMedianCutHisto().
 * 
*/ NUMA * pixGetRGBHistogram(PIX *pixs, l_int32 sigbits, l_int32 factor) { l_int32 w, h, i, j, size, wpl, rval, gval, bval, npts; l_uint32 val32, rgbindex; l_float32 *array; l_uint32 *data, *line, *rtab, *gtab, *btab; NUMA *na; if (!pixs || pixGetDepth(pixs) != 32) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (sigbits < 2 || sigbits > 6) return (NUMA *)ERROR_PTR("sigbits not in [2 ... 6]", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("factor < 1", __func__, NULL); /* Get histogram size: 2^(3 * sigbits) */ size = 1 << (3 * sigbits); /* 64, 512, 4096, 32768, 262144 */ na = numaMakeConstant(0, size); /* init to all 0 */ array = numaGetFArray(na, L_NOCOPY); makeRGBIndexTables(&rtab, >ab, &btab, sigbits); /* Check the number of sampled pixels */ pixGetDimensions(pixs, &w, &h, NULL); npts = ((w + factor - 1) / factor) * ((h + factor - 1) / factor); if (npts < 1000) L_WARNING("only sampling %d pixels\n", __func__, npts); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val32 = *(line + j); extractRGBValues(val32, &rval, &gval, &bval); rgbindex = rtab[rval] | gtab[gval] | btab[bval]; array[rgbindex]++; } } LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return na; } /*! * \brief makeRGBIndexTables() * * \param[out] prtab, pgtab, pbtab 256-entry rgb index tables * \param[in] sigbits 2-6, significant bits retained in the quantizer * for each component of the input image * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) These tables are used to map from rgb sample values to
 *          an rgb index, using
 *             rgbindex = rtab[rval] | gtab[gval] | btab[bval]
 *          where, e.g., if sigbits = 3, the index is a 9 bit integer:
 *             r7 r6 r5 g7 g6 g5 b7 b6 b5
 * 
*/ l_ok makeRGBIndexTables(l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 sigbits) { l_int32 i; l_uint32 *rtab, *gtab, *btab; if (prtab) *prtab = NULL; if (pgtab) *pgtab = NULL; if (pbtab) *pbtab = NULL; if (!prtab || !pgtab || !pbtab) return ERROR_INT("not all table ptrs defined", __func__, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", __func__, 1); rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); if (!rtab || !gtab || !btab) { LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return ERROR_INT("calloc fail for tab", __func__, 1); } *prtab = rtab; *pgtab = gtab; *pbtab = btab; switch (sigbits) { case 2: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xc0) >> 2; gtab[i] = (i & 0xc0) >> 4; btab[i] = (i & 0xc0) >> 6; } break; case 3: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xe0) << 1; gtab[i] = (i & 0xe0) >> 2; btab[i] = (i & 0xe0) >> 5; } break; case 4: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xf0) << 4; gtab[i] = (i & 0xf0); btab[i] = (i & 0xf0) >> 4; } break; case 5: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xf8) << 7; gtab[i] = (i & 0xf8) << 2; btab[i] = (i & 0xf8) >> 3; } break; case 6: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xfc) << 10; gtab[i] = (i & 0xfc) << 4; btab[i] = (i & 0xfc) >> 2; } break; default: L_ERROR("Illegal sigbits = %d\n", __func__, sigbits); return ERROR_INT("sigbits not in [2 ... 6]", __func__, 1); } return 0; } /*! * \brief getRGBFromIndex() * * \param[in] index rgbindex * \param[in] sigbits 2-6, significant bits retained in the quantizer * for each component of the input image * \param[out] prval, pgval, pbval rgb values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The %index is expressed in bits, based on the the
 *          %sigbits of the r, g and b components, as
 *             r7 r6 ... g7 g6 ... b7 b6 ...
 *      (2) The computed rgb values are in the center of the quantized cube.
 *          The extra bit that is OR'd accomplishes this.
 * 
*/ l_ok getRGBFromIndex(l_uint32 index, l_int32 sigbits, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval || !pbval) return ERROR_INT("not all component ptrs defined", __func__, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", __func__, 1); switch (sigbits) { case 2: *prval = ((index << 2) & 0xc0) | 0x20; *pgval = ((index << 4) & 0xc0) | 0x20; *pbval = ((index << 6) & 0xc0) | 0x20; break; case 3: *prval = ((index >> 1) & 0xe0) | 0x10; *pgval = ((index << 2) & 0xe0) | 0x10; *pbval = ((index << 5) & 0xe0) | 0x10; break; case 4: *prval = ((index >> 4) & 0xf0) | 0x08; *pgval = (index & 0xf0) | 0x08; *pbval = ((index << 4) & 0xf0) | 0x08; break; case 5: *prval = ((index >> 7) & 0xf8) | 0x04; *pgval = ((index >> 2) & 0xf8) | 0x04; *pbval = ((index << 3) & 0xf8) | 0x04; break; case 6: *prval = ((index >> 10) & 0xfc) | 0x02; *pgval = ((index >> 4) & 0xfc) | 0x02; *pbval = ((index << 2) & 0xfc) | 0x02; break; default: L_ERROR("Illegal sigbits = %d\n", __func__, sigbits); return ERROR_INT("sigbits not in [2 ... 6]", __func__, 1); } return 0; } /* ----------------------------------------------------------------------- * * Identify images that have highlight (red) color * * ----------------------------------------------------------------------- */ /*! * \brief pixHasHighlightRed() * * \param[in] pixs 32 bpp rgb * \param[in] factor subsampling; an integer >= 1; use 1 for all pixels * \param[in] minfract threshold fraction of all image pixels; must be > 0.0 * \param[in] fthresh threshold on a function of the components; typ. ~2.5 * \param[out] phasred 1 if red pixels are above threshold * \param[out] pratio [optional] normalized fraction of threshold * red pixels that is actually observed * \param[out] ppixdb [optional] seed pixel mask * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Pixels are identified as red if they satisfy two conditions:
 *          (a) The components satisfy (R-B)/B > %fthresh   (red or dark fg)
 *          (b) The red component satisfied R > 128  (red or light bg)
 *          Masks are generated for (a) and (b), and the intersection
 *          gives the pixels that are red but not either light bg or
 *          dark fg.
 *      (2) A typical value for minfract = 0.0001, which gives sensitivity
 *          to an image where a small fraction of the pixels are printed
 *          in red.
 *      (3) A typical value for fthresh = 2.5.  Higher values give less
 *          sensitivity to red, and fewer false positives.
 * 
*/ l_ok pixHasHighlightRed(PIX *pixs, l_int32 factor, l_float32 minfract, l_float32 fthresh, l_int32 *phasred, l_float32 *pratio, PIX **ppixdb) { l_float32 fract, ratio; PIX *pix1, *pix2, *pix3, *pix4; FPIX *fpix; if (pratio) *pratio = 0.0; if (ppixdb) *ppixdb = NULL; if (phasred) *phasred = 0; if (!pratio && !ppixdb) return ERROR_INT("no return val requested", __func__, 1); if (!phasred) return ERROR_INT("&hasred not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (minfract <= 0.0) return ERROR_INT("minfract must be > 0.0", __func__, 1); if (fthresh < 1.5 || fthresh > 3.5) L_WARNING("fthresh = %f is out of normal bounds\n", __func__, fthresh); if (factor > 1) pix1 = pixScaleByIntSampling(pixs, factor); else pix1 = pixClone(pixs); /* Identify pixels that are either red or dark foreground */ fpix = pixComponentFunction(pix1, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0); pix2 = fpixThresholdToPix(fpix, fthresh); pixInvert(pix2, pix2); /* Identify pixels that are either red or light background */ pix3 = pixGetRGBComponent(pix1, COLOR_RED); pix4 = pixThresholdToBinary(pix3, 130); pixInvert(pix4, pix4); pixAnd(pix4, pix4, pix2); pixForegroundFraction(pix4, &fract); ratio = fract / minfract; L_INFO("fract = %7.5f, ratio = %7.3f\n", __func__, fract, ratio); if (pratio) *pratio = ratio; if (ratio >= 1.0) *phasred = 1; if (ppixdb) *ppixdb = pix4; else pixDestroy(&pix4); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); fpixDestroy(&fpix); return 0; } leptonica-1.86.0/src/colorfill.c000066400000000000000000000752161506303110300165070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorfill.c *
 *
 *      Determine color content using proximity.  What can we say about the
 *      color in an image from growing regions with nearly the same color?
 *
 *         L_COLORFILL  *l_colorfillCreate()
 *         void          l_colorfillDestroy()
 *
 *         L_COLORFILL  *pixColorContentByLocation()
 *         PIX          *pixColorFill()
 *
 *      Generate data for testing
 *         PIXA         *makeColorfillTestData()
 *
 *      Static helpers
 *         static COLOREL      *colorelCreate()
 *         static void          pixColorFillFromSeed()
 *         static void          pixGetVisitedNeighbors()
 *         static l_int32       findNextUnvisited()
 *         static l_int32       colorsAreSimilarForFill()
 *         static void          pixelColorIsValid()
 *         static l_int32       pixelIsOnColorBoundary()
 *         static l_int32       evalColorfillData()
 *
 *  See colorcontent.c for location-independent measures of the amount
 *  of color in an image.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" struct ColorEl { l_int32 x; l_int32 y; l_uint32 color; }; typedef struct ColorEl COLOREL; /* Ignore pixels with smaller max component */ static l_int32 DefaultMinMax = 70; /* Static helpers */ static COLOREL *colorelCreate(l_int32 x, l_int32 y, l_uint32 color); static void pixColorFillFromSeed(PIX *pixs, PIX *pixv, PTA **ppta, l_int32 x, l_int32 y, L_QUEUE *lq, l_int32 maxdiff, l_int32 minarea, l_int32 debug); static void pixGetVisitedNeighbors(PIX *pixs, l_int32 x, l_int32 y, l_uint32 *visited); static l_int32 findNextUnvisited(PIX *pixv, l_int32 *px, l_int32 *py); static l_int32 colorsAreSimilarForFill(l_uint32 val1, l_uint32 val2, l_int32 maxdiff); static l_int32 pixelColorIsValid(l_uint32 val, l_int32 minmax); static l_int32 pixelIsOnColorBoundary(PIX *pixs, l_int32 x, l_int32 y); static l_int32 evalColorfillData(L_COLORFILL *cf, l_int32 debug); /*---------------------------------------------------------------------* * Colorfill creation and destruction * *---------------------------------------------------------------------*/ /*! * \brief l_colorfillCreate() * * \param[in] pixs input RGB image * \param[in] nx requested number of tiles in each row * \param[in] ny requested number of tiles in each column * \return boxa, or NULL on error * *
 * Notes:
 *      (1) Tiles must at least 10 pixels in each dimension.
 * 
*/ L_COLORFILL * l_colorfillCreate(PIX *pixs, l_int32 nx, l_int32 ny) { l_int32 i, j, w, h, tw, th, ntiles; BOX *box; BOXA *boxas; L_COLORFILL *cf; if (!pixs) return (L_COLORFILL *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (L_COLORFILL *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); tw = w / nx; th = h / ny; if (tw < 10 || th < 10) return (L_COLORFILL *)ERROR_PTR("tile size too small", __func__, NULL); boxas = boxaCreate(nx * ny); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { box = boxCreate(j * tw, i * th, tw, th); boxaAddBox(boxas, box, L_INSERT); } } ntiles = nx * ny; cf = (L_COLORFILL *)LEPT_CALLOC(1, sizeof(L_COLORFILL)); cf->pixs = pixClone(pixs); cf->nx = nx; cf->ny = ny; cf->tw = tw; cf->th = th; cf->boxas = boxas; cf->naa = numaaCreate(ntiles); cf->dnaa = l_dnaaCreate(ntiles); cf->pixadb = pixaCreate(0); return cf; } /*! * \brief l_colorfillDestroy() * * \param[in,out] pcf will be set to null before returning * \return void */ void l_colorfillDestroy(L_COLORFILL **pcf) { L_COLORFILL *cf; if (pcf == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((cf = *pcf) == NULL) return; pixDestroy(&cf->pixs); pixDestroy(&cf->pixst); boxaDestroy(&cf->boxas); pixaDestroy(&cf->pixas); pixaDestroy(&cf->pixam); numaaDestroy(&cf->naa); l_dnaaDestroy(&cf->dnaa); pixaDestroy(&cf->pixadb); LEPT_FREE(cf); *pcf = NULL; } /* ----------------------------------------------------------------------- * * Determine color content using proximity. What do we get when * * growing regions with nearly the same color? * * ----------------------------------------------------------------------- */ /*! * \brief pixColorContentByLocation() * * \param[in] cf colorfill * \param[in] rref reference value for red component * \param[in] gref reference value for green component * \param[in] bref reference value for blue component * \param[in] minmax min of max component for possible color region * \param[in] maxdiff max component diff to be in same color region * \param[in] minarea min number of pixels for a color region * \param[in] smooth low-pass kernel size (1,3,5); use 1 to skip * \param[in] debug generates debug images and fill info * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes color fill information in each tile, identifying
 *          regions of approximately constant color.  It does this
 *          independently for each tile, using flood fills.  Regions
 *          of low intensity are considered 'not colorful'.
 *      (2) The three numbers (rref, gref and bref) can be thought
 *          of in two ways:
 *            (a) as rgb values in the image corresponding to white,
 *                to compensate for an unbalanced color white point.
 *            (b) as the median or mean values of the background color
 *                of a scan.
 *          The gamma TRC transformation, which does not change hue, is used
 *          to modify all colors so that these reference values become white.
 *          These three numbers must either be all 0 or all non-zero.
 *          To skip the TRC transform, set them all to 0.
 *      (3) If the maximum component after white point correction,
 *          max(r,g,b), is less than minmax, the pixel color is invalid, and it
 *          is assigned its neighbor's value in the filling operation.
 *          Use %minmax = 0 for a default value.
 * 
*/ l_ok pixColorContentByLocation(L_COLORFILL *cf, l_int32 rref, l_int32 gref, l_int32 bref, l_int32 minmax, l_int32 maxdiff, l_int32 minarea, l_int32 smooth, l_int32 debug) { l_int32 i, n; PIX *pix1, *pix2, *pix3; PIXA *pixas, *pixam; if (!cf) return ERROR_INT("cf not defined", __func__, 1); if (minmax <= 0) minmax = DefaultMinMax; if (minmax > 200) return ERROR_INT("minmax > 200; unreasonably large", __func__, 1); /* Do the optional linear color map; this checks the ref vals * and uses them if valid. Use {0,0,0} to skip this operation. */ if ((pix1 = pixColorShiftWhitePoint(cf->pixs, rref, gref, bref)) == NULL) return ERROR_INT("pix1 not returned", __func__, 1); cf->pixst = pix1; /* Break the image up into small tiles */ pixas = pixaCreateFromBoxa(pix1, cf->boxas, 0, 0, NULL); cf->pixas = pixas; /* Find regions of similar color in each tile */ n = pixaGetCount(pixas); pixam = pixaCreate(n); cf->pixam = pixam; for (i = 0; i < n; i++) { pix2 = pixaGetPix(pixas, i, L_COPY); pix3 = pixColorFill(pix2, minmax, maxdiff, smooth, minarea, 0); pixDestroy(&pix2); pixaAddPix(pixam, pix3, L_INSERT); } /* Evaluate color components. Find the average color in each * component and determine if there is more than one color in * each of the tiles. */ evalColorfillData(cf, debug); return 0; } /*! * \brief pixColorFill() * * \param[in] pixs 32 bpp RGB * \param[in] minmax min of max component for possible color region * \param[in] maxdiff max component diff to be in same color region * \param[in] smooth low-pass kernel size (1,3,5); use 1 to skip * \param[in] minarea min number of pixels for a color region * \param[in] debug generates debug images and fill info * \return pixm mask showing connected regions of similar color, * or null on error * *
 * Notes:
 *      (1) This is the basic color filling operation.  It sets the
 *          non-color pixel to black, optionally does a low-pass filter,
 *          and grows the 8-connected color components.  Finally, it
 *          removes components that have a small area.
 * 
*/ PIX * pixColorFill(PIX *pixs, l_int32 minmax, l_int32 maxdiff, l_int32 smooth, l_int32 minarea, l_int32 debug) { l_int32 x, y, w, h; l_uint32 val; L_KERNEL *kel; PIX *pixm, *pixm1, *pixv, *pixnc, *pixncd, *pixss, *pixf; PTA *pta1; L_QUEUE *lq; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); /* Set the non-color pixels to 0; generate a mask representing them */ pixGetDimensions(pixs, &w, &h, NULL); pixnc = pixCreate(w, h, 1); /* mask for no color */ for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { pixGetPixel(pixs, x, y, &val); if (!pixelColorIsValid(val, minmax)) { pixSetPixel(pixnc, x, y, 1); pixSetPixel(pixs, x, y, 0x0); } } } /* Optionally, dilate the no-color mask */ pixncd = pixDilateBrick(NULL, pixnc, smooth, smooth); pixDestroy(&pixnc); /* Do a low-pass filter on pixs. This will make bad pixels * near the zeroed non-color pixels, but any components made * from these pixels will be removed at the end by the * (optionally dilated) no-color mask. */ if (smooth > 1) { kel = makeFlatKernel(smooth, smooth, smooth / 2, smooth / 2); pixss = pixConvolveRGBSep(pixs, kel, kel); kernelDestroy(&kel); } else { pixss = pixCopy(NULL, pixs); } /* Paint through everything under pixncd */ pixPaintThroughMask(pixss, pixncd, 0, 0, 0); /* Find the color components */ pixv = pixCreate(w, h, 1); /* visited pixels */ pixOr(pixv, pixv, pixncd); /* consider non-color as visited */ pixSetBorderRingVal(pixv, 1, 1); pixm = pixCreate(w, h, 1); /* color components */ lq = lqueueCreate(0); x = y = 1; /* first row and column have been marked as visited */ while (findNextUnvisited(pixv, &x, &y) == 1) { /* Flood fill this component, starting from (x,y) */ if (debug) lept_stderr("Start: x = %d, y = %d\n", x, y); pixColorFillFromSeed(pixss, pixv, &pta1, x, y, lq, maxdiff, minarea, debug); if (pta1) { /* erode and add the pixels to pixm */ pixm1 = pixGenerateFromPta(pta1, w, h); pixErodeBrick(pixm1, pixm1, 3, 3); pixOr(pixm, pixm, pixm1); pixDestroy(&pixm1); ptaDestroy(&pta1); } } pixDestroy(&pixv); /* Remove everything under pixncd */ pixSubtract(pixm, pixm, pixncd); /* Remove remaining small stuff */ pixf = pixSelectByArea(pixm, minarea, 4, L_SELECT_IF_GTE, NULL); lqueueDestroy(&lq, 1); pixDestroy(&pixncd); pixDestroy(&pixss); pixDestroy(&pixm); return pixf; } /* ----------------------------------------------------------------------- * * Generate data for testing * * ----------------------------------------------------------------------- */ /*! * \brief makeColorfillTestData() * * \param[in] w width of generated pix * \param[in] h height of generated pix * \param[in] nseeds number of regions * \param[in] range of color component values * \return pixa various pix with filled regions of random color, * or NULL on error * *
 * Notes:
 *      (1) The seeds are random points.  The colors are assigned
 *          randomly from a restricted range of component values,
 *          in [128 - range/2 ... 128 + range/2]
 *      (2) Output is pixa:
 *          * pixa[0] cmapped, with color regions shown
 *          - pixa[1] cmapped, additionally with boundary pixels set to black
 *          - pixa[2] cmapped, as in pixa[1] with all non-black pixels
 *                    in the same color
 * 
*/ PIXA * makeColorfillTestData(l_int32 w, l_int32 h, l_int32 nseeds, l_int32 range) { l_int32 i, j, x, y, rval, gval, bval, start, end; l_uint32 color; l_float64 dval; L_DNA *da; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PTA *pta; PIXCMAP *cmap; /* Generate data for seeds */ pta = ptaCreate(nseeds); /* for seed locations */ da = l_dnaCreate(nseeds); /* for colors */ srand(4); start = 128 - range / 2; end = 128 + (range - 1) / 2; for (i = 0; i < nseeds; i++) { genRandomIntOnInterval(0, w - 1, 0, &x); genRandomIntOnInterval(0, h - 1, 0, &y); ptaAddPt(pta, x, y); genRandomIntOnInterval(start, end, 0, &rval); genRandomIntOnInterval(start, end, 0, &gval); genRandomIntOnInterval(start, end, 0, &bval); composeRGBPixel(rval, gval, bval, &color); l_dnaAddNumber(da, color); } /* Generate the 8 bpp seed image */ pix1 = pixCreate(w, h, 8); for (i = 0; i < nseeds; i++) { ptaGetIPt(pta, i, &x, &y); pixSetPixel(pix1, x, y, i + 1); /* all seeds have non-zero values */ } /* Spread seed values to all pixels that are nearest to * the seed pixel from which they take their value. */ pix2 = pixSeedspread(pix1, 4); /* Add a colormap for the random colors, using 0 for black */ cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 0, 0, 0); for (i = 0; i < nseeds; i++) { l_dnaGetDValue(da, i, &dval); extractRGBValues(dval, &rval, &gval, &bval); pixcmapAddColor(cmap, rval, gval, bval); } pixSetColormap(pix2, cmap); pixDestroy(&pix1); ptaDestroy(&pta); l_dnaDestroy(&da); /* Add to output; no black boundaries */ pixa = pixaCreate(0); pixaAddPix(pixa, pix2, L_COPY); /* Make pixels on the color boundaries black */ pix3 = pixCopy(NULL, pix2); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (pixelIsOnColorBoundary(pix2, j, i)) pixSetPixel(pix3, j, i, 0); /* black */ } } pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); /* Have all the non-black regions be the same color */ cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 0, 0, 0); for (i = 0; i < nseeds; i++) pixcmapAddColor(cmap, rval, gval, bval); pix4 = pixCopy(NULL, pix3); pixSetColormap(pix4, cmap); pixaAddPix(pixa, pix4, L_INSERT); return pixa; } /* ----------------------------------------------------------------------- * * Static helpers * * ----------------------------------------------------------------------- */ static COLOREL * colorelCreate(l_int32 x, l_int32 y, l_uint32 color) { COLOREL *el; el = (COLOREL *)LEPT_CALLOC(1, sizeof(COLOREL)); el->x = x; el->y = y; el->color = color; return el; } /*! * \brief pixColorFillFromSeed() * * \param[in] pixs 32 bpp rgb * \param[in] pixv 1 bpp labeling visited pixels * \param[out] ppta points visited with similar colors during fill * \param[in] x starting x coord for fill (seed) * \param[in] y starting y coord for fill (seed) * \param[in] lq head of queue holding pixels * \param[in] maxdiff max component diff allowed for similar pixels * \param[in] minarea min size of component to keep * \param[in] debug output some text data * \return void * *
 * Notes:
 *      (1) Use 8-connected filling.  It is faster because it reduces the
 *          number of single-pixel noise components near color boundaries.
 *      (2) The seed pixel at (x,y) is unvisited, and can never be on the
 *          exterior boundary of the tile %pixs.
 *      (3) If the size of the connected component >= %minarea, we return
 *          the array of pixel locations; otherwise, return NULL for the pta.
 * 
*/ static void pixColorFillFromSeed(PIX *pixs, PIX *pixv, PTA **ppta, l_int32 x, l_int32 y, L_QUEUE *lq, l_int32 maxdiff, l_int32 minarea, l_int32 debug) { l_int32 w, h, np; l_uint32 visited[8]; /* W, N, E, S, NW, NE, SW, SE */ l_uint32 color, val; COLOREL *el; PTA *pta; /* Prime the queue with this pixel */ pixGetPixel(pixs, x, y, &val); el = colorelCreate(x, y, val); lqueueAdd(lq, el); pixSetPixel(pixv, x, y, 1); /* visited */ pta = ptaCreate(0); *ppta = pta; ptaAddPt(pta, x, y); /* Trace out the color component. Each pixel on the queue has * a color. Pop from the queue and for each of its 8 neighbors, * for those that have color: * - If the pixel has a similar color, add to the pta array for * the component, using the color of its parent. * - Mark visited so that it will not be included in another * component -- this effectively separates the growing component * from all others. */ pixGetDimensions(pixs, &w, &h, NULL); while (lqueueGetCount(lq) > 0) { el = (COLOREL *)lqueueRemove(lq); x = el->x; y = el->y; color = el->color; LEPT_FREE(el); pixGetVisitedNeighbors(pixv, x, y, visited); if (!visited[0]) { /* check W */ pixGetPixel(pixs, x - 1, y, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x - 1, y, color); lqueueAdd(lq, el); ptaAddPt(pta, x - 1, y); /* added to component */ pixSetPixel(pixv, x - 1, y, 1); /* visited */ } } if (!visited[1]) { /* check N */ pixGetPixel(pixs, x, y - 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x, y - 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x, y - 1); pixSetPixel(pixv, x, y - 1, 1); } } if (!visited[2]) { /* check E */ pixGetPixel(pixs, x + 1, y, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x + 1, y, color); lqueueAdd(lq, el); ptaAddPt(pta, x + 1, y); pixSetPixel(pixv, x + 1, y, 1); } } if (!visited[3]) { /* check S */ pixGetPixel(pixs, x, y + 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x, y + 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x, y + 1); pixSetPixel(pixv, x, y + 1, 1); } } if (!visited[4]) { /* check NW */ pixGetPixel(pixs, x - 1, y - 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x - 1, y - 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x - 1, y - 1); pixSetPixel(pixv, x - 1, y - 1, 1); } } if (!visited[5]) { /* check NE */ pixGetPixel(pixs, x + 1, y - 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x + 1, y - 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x + 1, y - 1); pixSetPixel(pixv, x + 1, y - 1, 1); } } if (!visited[6]) { /* check SW */ pixGetPixel(pixs, x - 1, y + 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x - 1, y + 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x - 1, y + 1); pixSetPixel(pixv, x - 1, y + 1, 1); } } if (!visited[7]) { /* check SE */ pixGetPixel(pixs, x + 1, y + 1, &val); if (colorsAreSimilarForFill(color, val, maxdiff)) { el = colorelCreate(x + 1, y + 1, color); lqueueAdd(lq, el); ptaAddPt(pta, x + 1, y + 1); pixSetPixel(pixv, x + 1, y + 1, 1); } } } /* If there are not enough pixels, do not return the pta. * Otherwise, if a pta is returned, the caller will generate * a component and put it in the mask. */ np = ptaGetCount(pta); if (np < minarea) { if (debug) lept_stderr(" Too small. End: x = %d, y = %d, np = %d\n", x, y, np); ptaDestroy(ppta); } else { if (debug) lept_stderr(" Keep. End: x = %d, y = %d, np = %d\n", x, y, np); } } /*! * \brief pixGetVisitedNeighbors() * * \param[in] pixs 1 bpp, representing visited locations * \param[in] x x coord of pixel * \param[in] y y coord of pixel * \param[in,out] visited array of 8 int * \return void * *
 * Notes:
 *      (1) The values of the neighbors of (x,y) in pixs, given in
 *          order {W,N,E,S,NW,NE,SW,SE}, are returned in %visited.
 *          A "1" value means that pixel has been visited.  Initialize
 *          each neighbor to 1 (visited).
 *      (2) The input point (%x,%y) is never on the outer boundary of %pixs,
 *          (e.g., x >= 1, y >= 1), so no checking is required.
 * 
*/ static void pixGetVisitedNeighbors(PIX *pixs, l_int32 x, l_int32 y, l_uint32 *visited) { pixGetPixel(pixs, x - 1, y, visited); /* W */ pixGetPixel(pixs, x, y - 1, visited + 1); /* N */ pixGetPixel(pixs, x + 1, y, visited + 2); /* E */ pixGetPixel(pixs, x, y + 1, visited + 3); /* S */ pixGetPixel(pixs, x - 1, y - 1, visited + 4); /* NW */ pixGetPixel(pixs, x + 1, y - 1, visited + 5); /* NE */ pixGetPixel(pixs, x - 1, y + 1, visited + 6); /* SW */ pixGetPixel(pixs, x + 1, y + 1, visited + 7); /* SE */ } /*! * \brief findNextUnvisited() * * \param[in] pixv visited pixels * \param[in,out] py input start scanline; output y-coord of next seed * \param[out] px x-coord of next seed * \return 1 if new seed point is found; 0 if there are none * *
 * Notes:
 *      (1) Start the search at the beginning of the raster line
 *          for the pixel that ended the previous search.
 * 
*/ static l_int32 findNextUnvisited(PIX *pixv, l_int32 *px, l_int32 *py) { l_int32 ret; PIX *pix1; pix1 = pixCopy(NULL, pixv); pixInvert(pix1, pix1); /* After inversion, ON pixels are unvisited */ ret = nextOnPixelInRaster(pix1, 1, *py, px, py); pixDestroy(&pix1); return ret; } /*! * \brief colorsAreSimilarForFill() * * \param[in] val1 color of pixel 1, as 0xrrggbb00 * \param[in] val2 color of pixel 2, as 0xrrggbb00 * \param[in] maxdiff max of difference function to be similar * \return 1 if val1 and val2 are similar; 0 otherwise * *
 * Notes:
 *      (1) An example will explain the approach.  Suppose we have:
 *            val1 = {100, 130, 70}
 *            val2 = {90, 135, 62}
 *          First find that red is the color with largest abs(difference):
 *            rdiff = val1 - val2 = 10
 *          Find the green and blue differences
 *            gdiff = 130 - 135 = -5
 *            bdiff = 70 - 62 = 8
 *          and subtract each from rdiff:
 *            rdiff - gdiff = 15
 *            rdiff - bdiff = 7
 *          The max of these is 15, which is then compared with %maxdiff
 * 
*/ static l_int32 colorsAreSimilarForFill(l_uint32 val1, l_uint32 val2, l_int32 maxdiff) { l_int32 rdiff, gdiff, bdiff, maxindex, del1, del2, del3, maxdel; l_int32 v1[3], v2[3]; extractRGBValues(val1, v1, v1 + 1, v1 + 2); extractRGBValues(val2, v2, v2 + 1, v2 + 2); rdiff = v1[0] - v2[0]; gdiff = v1[1] - v2[1]; bdiff = v1[2] - v2[2]; maxindex = 0; if (L_ABS(gdiff) > L_ABS(rdiff)) maxindex = 1; if (L_ABS(bdiff) > L_ABS(rdiff) && L_ABS(bdiff) > L_ABS(gdiff)) maxindex = 2; del1 = v1[maxindex] - v2[maxindex]; del2 = v1[(maxindex + 1) % 3] - v2[(maxindex + 1) % 3]; del3 = v1[(maxindex + 2) % 3] - v2[(maxindex + 2) % 3]; maxdel = L_MAX(L_ABS(del1 - del2), L_ABS(del1 - del3)); return (maxdel <= maxdiff) ? 1 : 0; } /*! * \brief pixelColorIsValid() * * \param[in] val color, as 0xrrggbb00 * \param[in] minmax max component must be < %minmax to be valid * \return 0 if max component < %minmax; 1 otherwise */ static l_int32 pixelColorIsValid(l_uint32 val, l_int32 minmax) { l_int32 rval, gval, bval; extractRGBValues(val, &rval, &gval, &bval); if (rval < minmax && gval < minmax && bval < minmax) return 0; /* maximum component is less than threshold */ else return 1; } /*! * \brief pixelIsOnColorBoundary() * * \param[in] pixs 32 bpp rgb or 8 bpp with colormap * \param[in] x, y location of pixel of interest * \return 1 if at least one neighboring pixel had a different color; * 0 otherwise. */ static l_int32 pixelIsOnColorBoundary(PIX *pixs, l_int32 x, l_int32 y) { l_int32 w, h; l_uint32 val, neigh; pixGetDimensions(pixs, &w, &h, NULL); pixGetPixel(pixs, x, y, &val); if (x > 0) { pixGetPixel(pixs, x - 1, y, &neigh); /* W */ if (neigh != val) return TRUE; } if (x < w - 1) { pixGetPixel(pixs, x + 1, y, &neigh); /* E */ if (neigh != val) return TRUE; } if (y > 0) { pixGetPixel(pixs, x, y - 1, &neigh); /* N */ if (neigh != val) return TRUE; } if (y < h - 1) { pixGetPixel(pixs, x, y + 1, &neigh); /* S */ if (neigh != val) return TRUE; } return FALSE; } /*! * \brief evalColorfillData() * * \param[in] cf colorfill with masks generated for all tiles * \param[in] debug show segmented regions with their median color * \return 0 if OK, 1 on error */ static l_int32 evalColorfillData(L_COLORFILL *cf, l_int32 debug) { l_int32 i, j, n, nc, w, h, x, y, count; l_float32 rval, gval, bval; l_uint32 pixel; l_int32 *tab; BOX *box1; BOXA *boxa1; L_DNA *da; NUMA *na; PIX *pixm, *pix1, *pix2, *pixdb; PIXA *pixa1; if (!cf) return ERROR_INT("cf not defind", __func__, 1); tab = makePixelSumTab8(); n = cf->nx * cf->ny; for (i = 0; i < n; i++) { pix1 = pixaGetPix(cf->pixas, i, L_CLONE); pixm = pixaGetPix(cf->pixam, i, L_CLONE); pixGetDimensions(pix1, &w, &h, NULL); boxa1 = pixConnComp(pixm, &pixa1, 4); boxaDestroy(&boxa1); nc = pixaGetCount(pixa1); na = numaCreate(0); da = l_dnaCreate(0); pixdb = (debug) ? pixCreate(w, h, 32) : NULL; for (j = 0; j < nc; j++) { pix2 = pixaGetPix(pixa1, j, L_COPY); box1 = pixaGetBox(pixa1, j, L_COPY); boxGetGeometry(box1, &x, &y, NULL, NULL); pixGetRankValueMaskedRGB(pix1, pix2, x, y, 1, 0.5, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &pixel); l_dnaAddNumber(da, pixel); pixCountPixels(pix2, &count, tab); numaAddNumber(na, count); if (debug) pixPaintThroughMask(pixdb, pix2, x, y, pixel); boxDestroy(&box1); pixDestroy(&pix2); } pixaAddPix(cf->pixadb, pixdb, L_INSERT); numaaAddNuma(cf->naa, na, L_INSERT); l_dnaaAddDna(cf->dnaa, da, L_INSERT); pixDestroy(&pix1); pixDestroy(&pixm); pixaDestroy(&pixa1); } if (debug) { /* first tile */ na = numaaGetNuma(cf->naa, 0, L_CLONE); lept_stderr("Size of components in tile 0:"); numaWriteStderr(na); numaDestroy(&na); } LEPT_FREE(tab); return 0; } leptonica-1.86.0/src/colorfill.h000066400000000000000000000063411506303110300165050ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_COLORFILL_H #define LEPTONICA_COLORFILL_H /*! * \file colorfill.h * *
 *  Contains the following struct
 *      struct L_Colorfill
 *
 *  This accumulates color information, linked to location, within a
 *  set of tiles that (mostly) covers an input RGB image.
 * 
*/ /*------------------------------------------------------------------------* * Colorfill data * *------------------------------------------------------------------------*/ /*! Colorfill data */ struct L_Colorfill { struct Pix *pixs; /*!< clone of source pix */ struct Pix *pixst; /*!< source pix, after optional transform */ l_int32 nx; /*!< number of tiles in each tile row */ l_int32 ny; /*!< number of tiles in each tile column */ l_int32 tw; /*!< width of each tile */ l_int32 th; /*!< height of each tile */ l_int32 minarea; /*!< min number of pixels in a color region */ struct Boxa *boxas; /*!< tile locations */ struct Pixa *pixas; /*!< tiles from source pix */ struct Pixa *pixam; /*!< mask tiles with components covering */ /*!< regions with similar color */ struct Numaa *naa; /*!< sizes of color regions (in pixels) */ struct L_Dnaa *dnaa; /*!< average color in each region */ struct Pixa *pixadb; /*!< debug reconstruction from segmentation */ }; typedef struct L_Colorfill L_COLORFILL; #endif /* LEPTONICA_COLORFILL_H */ leptonica-1.86.0/src/coloring.c000066400000000000000000001213311506303110300163240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file coloring.c *
 *
 *      Coloring "gray" pixels
 *           PIX             *pixColorGrayRegions()
 *           l_int32          pixColorGray()
 *           PIX             *pixColorGrayMasked()
 *
 *      Adjusting one or more colors to a target color
 *           PIX             *pixSnapColor()
 *           PIX             *pixSnapColorCmap()
 *
 *      Piecewise linear color mapping based on a source/target pair
 *           PIX             *pixLinearMapToTargetColor()
 *           l_int32          pixelLinearMapToTargetColor()
 *
 *      Fractional shift of RGB towards black or white
 *           PIX             *pixShiftByComponent()
 *           l_int32          pixelShiftByComponent()
 *           l_int32          pixelFractionalShift()
 *           PIX             *pixShiftWithInvariantHue()
 *
 *  There are quite a few "coloring" functions in leptonica.
 *  You can find them in these files:
 *       coloring.c
 *       paintcmap.c
 *       pix2.c
 *       blend.c
 *       enhance.c
 *
 *  They fall into the following categories:
 *
 *  (1) Moving either the light or dark pixels toward a
 *      specified color. (pixColorGray, pixColorGrayMasked)
 *  (2) Forcing all pixels whose color is within some delta of a
 *      specified color to move to that color. (pixSnapColor)
 *  (3) Doing a piecewise linear color shift specified by a source
 *      and a target color.  Each component shifts independently.
 *      (pixLinearMapToTargetColor, pixMapWithInvariantHue).
 *  (4) Shifting all colors by a given fraction of their distance
 *      from 0 (if shifting down) or from 255 (if shifting up).
 *      This is useful for colorizing either the background or
 *      the foreground of a grayscale image. (pixShiftByComponent)
 *  (5) Shifting all colors by a component-dependent fraction of
 *      their distance from 0 (if shifting down) or from 255 (if
 *      shifting up).  This is useful for modifying the color to
 *      compensate for color shifts in acquisition or printing.
 *      (enhance.c: pixColorShiftRGB, pixMosaicColorShiftRGB).
 *  (6) Repainting selected pixels. (paintcmap.c: pixSetSelectMaskedCmap)
 *  (7) Blending a fraction of a specific color with the existing RGB
 *      color.  (pix2.c: pixBlendInRect())
 *  (8) Changing selected colors in a colormap.
 *      (paintcmap.c: pixSetSelectCmap, pixSetSelectMaskedCmap)
 *  (9) Shifting all the pixels towards black or white depending on
 *      the gray value of a second image.  (blend.c: pixFadeWithGray)
 *  (10) Changing the hue, saturation or brightness, by changing one of
 *      these parameters in HSV color space by a fraction of the distance
 *      toward its end-point, but leaving the other two parameters
 *      invariant.  For example, you can change the brightness by moving
 *      each pixel's v-parameter a specified fraction of the distance
 *      toward 0 (darkening) or toward 255 (brightening), without altering
 *      the hue or saturation.  (enhance.c: pixModifySaturation,
 *      pixModifyHue, pixModifyBrightness)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*---------------------------------------------------------------------* * Coloring "gray" pixels * *---------------------------------------------------------------------*/ /*! * \brief pixColorGrayRegions() * * \param[in] pixs 2, 4 or 8 bpp gray, rgb, or colormapped * \param[in] boxa of regions in which to apply color * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] thresh average value below/above which pixel is unchanged * \param[in] rval, gval, bval new color to paint * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This generates a new image, where some of the pixels in each
 *          box in the boxa are colorized.  See pixColorGray() for usage
 *          with %type and %thresh.  Note that %thresh is only used for
 *          rgb; it is ignored for colormapped images.
 *      (2) If the input image is colormapped, the new image will be 8 bpp
 *          colormapped if possible; otherwise, it will be converted
 *          to 32 bpp rgb.  Only pixels that are strictly gray will be
 *          colorized.
 *      (3) If the input image is not colormapped, it is converted to rgb.
 *          A "gray" value for a pixel is determined by averaging the
 *          components, and the output rgb value is determined from this.
 *      (4) This can be used in conjunction with pixHasHighlightRed() to
 *          add highlight color to a grayscale image.
 * 
*/ PIX * pixColorGrayRegions(PIX *pixs, BOXA *boxa, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, n, ncolors, ngray; BOX *box; PIX *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) == 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); /* If cmapped and there is room in an 8 bpp colormap for * expansion, convert pixs to 8 bpp, and colorize. */ cmap = pixGetColormap(pixs); if (cmap) { ncolors = pixcmapGetCount(cmap); pixcmapCountGrayColors(cmap, &ngray); if (ncolors + ngray < 255) { pixd = pixConvertTo8(pixs, 1); /* always new image */ pixColorGrayRegionsCmap(pixd, boxa, type, rval, gval, bval); return pixd; } } /* The output will be rgb. Make sure the thresholds are valid */ if (type == L_PAINT_LIGHT) { /* thresh should be low */ if (thresh >= 255) return (PIX *)ERROR_PTR("thresh must be < 255", __func__, NULL); if (thresh > 127) L_WARNING("threshold set very high\n", __func__); } else { /* type == L_PAINT_DARK; thresh should be high */ if (thresh <= 0) return (PIX *)ERROR_PTR("thresh must be > 0", __func__, NULL); if (thresh < 128) L_WARNING("threshold set very low\n", __func__); } pixd = pixConvertTo32(pixs); /* always new image */ n = boxaGetCount(boxa); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixColorGray(pixd, box, type, thresh, rval, gval, bval); boxDestroy(&box); } return pixd; } /*! * \brief pixColorGray() * * \param[in] pixs 8 bpp gray, rgb or colormapped image * \param[in] box [optional] region in which to apply color; can be NULL * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] thresh average value below/above which pixel is unchanged * \param[in] rval, gval, bval new color to paint * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place operation; pixs is modified.
 *          If pixs is colormapped, the operation will add colors to the
 *          colormap.  Otherwise, pixs will be converted to 32 bpp rgb if
 *          it is initially 8 bpp gray.
 *      (2) If type == L_PAINT_LIGHT, it colorizes non-black pixels,
 *          preserving antialiasing.
 *          If type == L_PAINT_DARK, it colorizes non-white pixels,
 *          preserving antialiasing.
 *      (3) If box is NULL, applies function to the entire image; otherwise,
 *          clips the operation to the intersection of the box and pix.
 *      (4) If colormapped, calls pixColorGrayCmap(), which applies the
 *          coloring algorithm only to pixels that are strictly gray.
 *      (5) For RGB, determines a "gray" value by averaging; then uses this
 *          value, plus the input rgb target, to generate the output
 *          pixel values.
 *      (6) thresh is only used for rgb; it is ignored for colormapped pix.
 *          If type == L_PAINT_LIGHT, use thresh = 0 if all pixels are to
 *          be colored (black pixels will be unaltered).
 *          In situations where there are a lot of black pixels,
 *          setting thresh > 0 will make the function considerably
 *          more efficient without affecting the final result.
 *          If type == L_PAINT_DARK, use thresh = 255 if all pixels
 *          are to be colored (white pixels will be unaltered).
 *          In situations where there are a lot of white pixels,
 *          setting thresh < 255 will make the function considerably
 *          more efficient without affecting the final result.
 * 
*/ l_ok pixColorGray(PIX *pixs, BOX *box, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, wpl, x1, x2, y1, y2, bw, bh; l_int32 nrval, ngval, nbval, aveval; l_float32 factor; l_uint32 val32; l_uint32 *line, *data; PIX *pixt; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) return ERROR_INT("invalid type", __func__, 1); cmap = pixGetColormap(pixs); pixGetDimensions(pixs, &w, &h, &d); if (!cmap && d != 8 && d != 32) return ERROR_INT("pixs not cmapped, 8 bpp or rgb", __func__, 1); if (cmap) return pixColorGrayCmap(pixs, box, type, rval, gval, bval); /* rgb or 8 bpp gray image; check the thresh */ if (type == L_PAINT_LIGHT) { /* thresh should be low */ if (thresh >= 255) return ERROR_INT("thresh must be < 255; else this is a no-op", __func__, 1); if (thresh > 127) L_WARNING("threshold set very high\n", __func__); } else { /* type == L_PAINT_DARK; thresh should be high */ if (thresh <= 0) return ERROR_INT("thresh must be > 0; else this is a no-op", __func__, 1); if (thresh < 128) L_WARNING("threshold set very low\n", __func__); } /* In-place conversion to 32 bpp if necessary */ if (d == 8) { pixt = pixConvertTo32(pixs); pixTransferAllData(pixs, &pixt, 1, 0); } if (!box) { x1 = y1 = 0; x2 = w; y2 = h; } else { boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); factor = 1.f / 255.f; for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) continue; line = data + i * wpl; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) continue; val32 = *(line + j); aveval = ((val32 >> 24) + ((val32 >> 16) & 0xff) + ((val32 >> 8) & 0xff)) / 3; if (type == L_PAINT_LIGHT) { if (aveval < thresh) /* skip sufficiently dark pixels */ continue; nrval = (l_int32)(rval * aveval * factor); ngval = (l_int32)(gval * aveval * factor); nbval = (l_int32)(bval * aveval * factor); } else { /* type == L_PAINT_DARK */ if (aveval > thresh) /* skip sufficiently light pixels */ continue; nrval = rval + (l_int32)((255. - rval) * aveval * factor); ngval = gval + (l_int32)((255. - gval) * aveval * factor); nbval = bval + (l_int32)((255. - bval) * aveval * factor); } composeRGBPixel(nrval, ngval, nbval, &val32); *(line + j) = val32; } } return 0; } /*! * \brief pixColorGrayMasked() * * \param[in] pixs 8 bpp gray, rgb or colormapped image * \param[in] pixm 1 bpp mask, through which to apply color * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] thresh average value below/above which pixel is unchanged * \param[in] rval, gval, bval new color to paint * \return pixd colorized, or NULL on error * *
 * Notes:
 *      (1) This generates a new image, where some of the pixels under
 *          FG in the mask are colorized.
 *      (2) See pixColorGray() for usage with %type and %thresh.  Note
 *          that %thresh is only used for rgb; it is ignored for
 *          colormapped images.  In most cases, the mask will be over
 *          the darker parts and %type == L_PAINT_DARK.
 *      (3) If pixs is colormapped this calls pixColorMaskedCmap(),
 *          which adds colors to the colormap for pixd; it only adds
 *          colors corresponding to strictly gray colors in the colormap.
 *          Otherwise, if pixs is 8 bpp gray, pixd will be 32 bpp rgb.
 *      (4) If pixs is 32 bpp rgb, for each pixel a "gray" value is
 *          found by averaging.  This average is then used with the
 *          input rgb target to generate the output pixel values.
 *      (5) This can be used in conjunction with pixHasHighlightRed() to
 *          add highlight color to a grayscale image.
 * 
*/ PIX * pixColorGrayMasked(PIX *pixs, PIX *pixm, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, wm, hm, wmin, hmin, wpl, wplm; l_int32 nrval, ngval, nbval, aveval; l_float32 factor; l_uint32 val32; l_uint32 *line, *data, *linem, *datam; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, NULL); if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); cmap = pixGetColormap(pixs); pixGetDimensions(pixs, &w, &h, &d); if (!cmap && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped, 8 bpp gray or 32 bpp", __func__, NULL); if (cmap) { pixd = pixCopy(NULL, pixs); pixColorGrayMaskedCmap(pixd, pixm, type, rval, gval, bval); return pixd; } /* rgb or 8 bpp gray image; check the thresh */ if (type == L_PAINT_LIGHT) { /* thresh should be low */ if (thresh >= 255) return (PIX *)ERROR_PTR( "thresh must be < 255; else this is a no-op", __func__, NULL); if (thresh > 127) L_WARNING("threshold set very high\n", __func__); } else { /* type == L_PAINT_DARK; thresh should be high */ if (thresh <= 0) return (PIX *)ERROR_PTR( "thresh must be > 0; else this is a no-op", __func__, NULL); if (thresh < 128) L_WARNING("threshold set very low\n", __func__); } pixGetDimensions(pixm, &wm, &hm, NULL); if (wm != w) L_WARNING("wm = %d differs from w = %d\n", __func__, wm, w); if (hm != h) L_WARNING("hm = %d differs from h = %d\n", __func__, hm, h); wmin = L_MIN(w, wm); hmin = L_MIN(h, hm); if (d == 8) pixd = pixConvertTo32(pixs); else pixd = pixCopy(NULL, pixs); data = pixGetData(pixd); wpl = pixGetWpl(pixd); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); factor = 1.f / 255.f; for (i = 0; i < hmin; i++) { line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j) == 0) continue; val32 = *(line + j); aveval = ((val32 >> 24) + ((val32 >> 16) & 0xff) + ((val32 >> 8) & 0xff)) / 3; if (type == L_PAINT_LIGHT) { if (aveval < thresh) /* skip sufficiently dark pixels */ continue; nrval = (l_int32)(rval * aveval * factor); ngval = (l_int32)(gval * aveval * factor); nbval = (l_int32)(bval * aveval * factor); } else { /* type == L_PAINT_DARK */ if (aveval > thresh) /* skip sufficiently light pixels */ continue; nrval = rval + (l_int32)((255. - rval) * aveval * factor); ngval = gval + (l_int32)((255. - gval) * aveval * factor); nbval = bval + (l_int32)((255. - bval) * aveval * factor); } composeRGBPixel(nrval, ngval, nbval, &val32); *(line + j) = val32; } } return pixd; } /*------------------------------------------------------------------* * Adjusting one or more colors to a target color * *------------------------------------------------------------------*/ /*! * \brief pixSnapColor() * * \param[in] pixd [optional]; either NULL or equal to pixs for in-place * \param[in] pixs colormapped or 8 bpp gray or 32 bpp rgb * \param[in] srcval color center to be selected for change: 0xrrggbb00 * \param[in] dstval target color for pixels: 0xrrggbb00 * \param[in] diff max absolute difference, applied to all components * \return pixd with all pixels within diff of srcval set to dstval, * or pixd on error * *
 * Notes:
 *      (1) For inplace operation, call it this way:
 *           pixSnapColor(pixs, pixs, ... )
 *      (2) For generating a new pixd:
 *           pixd = pixSnapColor(NULL, pixs, ...)
 *      (3) If pixs has a colormap, it is handled by pixSnapColorCmap().
 *      (4) All pixels within 'diff' of 'srcval', componentwise,
 *          will be changed to 'dstval'.
 * 
*/ PIX * pixSnapColor(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff) { l_int32 val, sval, dval; l_int32 rval, gval, bval, rsval, gsval, bsval; l_int32 i, j, w, h, d, wpl; l_uint32 pixel; l_uint32 *line, *data; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd exists, but != pixs", __func__, pixd); if (pixGetColormap(pixs)) return pixSnapColorCmap(pixd, pixs, srcval, dstval, diff); /* pixs does not have a colormap; it must be 8 bpp gray or * 32 bpp rgb. */ if (pixGetDepth(pixs) < 8) return (PIX *)ERROR_PTR("pixs is < 8 bpp", __func__, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); pixGetDimensions(pixd, &w, &h, &d); data = pixGetData(pixd); wpl = pixGetWpl(pixd); if (d == 8) { sval = srcval & 0xff; dval = dstval & 0xff; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); if (L_ABS(val - sval) <= diff) SET_DATA_BYTE(line, j, dval); } } } else { /* d == 32 */ extractRGBValues(srcval, &rsval, &gsval, &bsval); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = *(line + j); extractRGBValues(pixel, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) *(line + j) = dstval; /* replace */ } } } return pixd; } /*! * \brief pixSnapColorCmap() * * \param[in] pixd [optional]; either NULL or equal to pixs for in-place * \param[in] pixs colormapped * \param[in] srcval color center to be selected for change: 0xrrggbb00 * \param[in] dstval target color for pixels: 0xrrggbb00 * \param[in] diff max absolute difference, applied to all components * \return pixd with all pixels within diff of srcval set to dstval, * or pixd on error * *
 * Notes:
 *      (1) For inplace operation, call it this way:
 *           pixSnapCcmap(pixs, pixs, ... )
 *      (2) For generating a new pixd:
 *           pixd = pixSnapCmap(NULL, pixs, ...)
 *      (3) pixs must have a colormap.
 *      (4) All colors within 'diff' of 'srcval', componentwise,
 *          will be changed to 'dstval'.
 * 
*/ PIX * pixSnapColorCmap(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff) { l_int32 i, ncolors, index, found; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *tab; PIX *pixm; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!pixGetColormap(pixs)) return (PIX *)ERROR_PTR("cmap not found", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd exists, but != pixs", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); /* If no free colors, look for one close to the target * that can be commandeered. */ cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); found = FALSE; if (pixcmapGetFreeCount(cmap) == 0) { for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) { index = i; pixcmapResetColor(cmap, index, rdval, gdval, bdval); found = TRUE; break; } } } else { /* just add the new color */ pixcmapAddColor(cmap, rdval, gdval, bdval); ncolors = pixcmapGetCount(cmap); index = ncolors - 1; /* index of new destination color */ found = TRUE; } if (!found) { L_INFO("nothing to do\n", __func__); return pixd; } /* For each color in cmap that is close enough to srcval, * set the tab value to 1. Then generate a 1 bpp mask with * fg pixels for every pixel in pixd that is close enough * to srcval (i.e., has value 1 in tab). */ tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) tab[i] = 1; } pixm = pixMakeMaskFromLUT(pixd, tab); LEPT_FREE(tab); /* Use the binary mask to set all selected pixels to * the dest color index. */ pixSetMasked(pixd, pixm, dstval); pixDestroy(&pixm); /* Remove all unused colors from the colormap. */ pixRemoveUnusedColors(pixd); return pixd; } /*---------------------------------------------------------------------* * Piecewise linear color mapping based on a source/target pair * *---------------------------------------------------------------------*/ /*! * \brief pixLinearMapToTargetColor() * * \param[in] pixd [optional]; either NULL or equal to pixs for in-place * \param[in] pixs 32 bpp rgb * \param[in] srcval source color: 0xrrggbb00 * \param[in] dstval target color: 0xrrggbb00 * \return pixd with all pixels mapped based on the srcval/destval mapping, * or pixd on error * *
 * Notes:
 *      (1) For each component (r, b, g) separately, this does a piecewise
 *          linear mapping of the colors in pixs to colors in pixd.
 *          If rs and rd are the red src and dest components in %srcval and
 *          %dstval, then the range [0 ... rs] in pixs is mapped to
 *          [0 ... rd] in pixd.  Likewise, the range [rs ... 255] in pixs
 *          is mapped to [rd ... 255] in pixd.  And similarly for green
 *          and blue.
 *      (2) The mapping will in general change the hue of the pixels.
 *          However, if the src and dst targets are related by
 *          a transformation given by pixelFractionalShift(), the hue
 *          is invariant.  A special case is where the dest in the
 *          map is white (255, 255, 255) for an arbitrary srcval.
 *      (3) For inplace operation, call it this way:
 *            pixLinearMapToTargetColor(pixs, pixs, ... );
 *          For generating a new pixd:
 *            pixd = pixLinearMapToTargetColor(NULL, pixs, ...);
 *      (4) See pixShiftWithInvariantHue() for a special case of this function.
 * 
*/ PIX * pixLinearMapToTargetColor(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval) { l_int32 i, j, w, h, wpl; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *line, *data; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd exists, but != pixs", __func__, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); rsval = L_MIN(254, L_MAX(1, rsval)); gsval = L_MIN(254, L_MAX(1, gsval)); bsval = L_MIN(254, L_MAX(1, bsval)); rtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); gtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); btab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (!rtab || !gtab || !btab) return (PIX *)ERROR_PTR("calloc fail for tab", __func__, pixd); for (i = 0; i < 256; i++) { if (i <= rsval) rtab[i] = (i * rdval) / rsval; else rtab[i] = rdval + ((255 - rdval) * (i - rsval)) / (255 - rsval); if (i <= gsval) gtab[i] = (i * gdval) / gsval; else gtab[i] = gdval + ((255 - gdval) * (i - gsval)) / (255 - gsval); if (i <= bsval) btab[i] = (i * bdval) / bsval; else btab[i] = bdval + ((255 - bdval) * (i - bsval)) / (255 - bsval); } pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); line[j] = pixel; } } LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixelLinearMapToTargetColor() * * \param[in] scolor rgb source color: 0xrrggbb00 * \param[in] srcmap source mapping color: 0xrrggbb00 * \param[in] dstmap target mapping color: 0xrrggbb00 * \param[out] pdcolor rgb dest color: 0xrrggbb00 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does this does a piecewise linear mapping of each
 *          component of %scolor to %dcolor, based on the relation
 *          between the components of %srcmap and %dstmap.  It is the
 *          same transformation, performed on a single color, as mapped
 *          on every pixel in a pix by pixLinearMapToTargetColor().
 *      (2) For each component, if the sval is larger than the smap,
 *          the dval will be pushed up from dmap towards white.
 *          Otherwise, dval will be pushed down from dmap towards black.
 *          This is because you can visualize the transformation as
 *          a linear stretching where smap moves to dmap, and everything
 *          else follows linearly with 0 and 255 fixed.
 *      (3) The mapping will in general change the hue of %scolor.
 *          However, if the %srcmap and %dstmap targets are related by
 *          a transformation given by pixelFractionalShift(), the hue
 *          will be invariant.
 * 
*/ l_ok pixelLinearMapToTargetColor(l_uint32 scolor, l_uint32 srcmap, l_uint32 dstmap, l_uint32 *pdcolor) { l_int32 srval, sgval, sbval, drval, dgval, dbval; l_int32 srmap, sgmap, sbmap, drmap, dgmap, dbmap; if (!pdcolor) return ERROR_INT("&dcolor not defined", __func__, 1); *pdcolor = 0; extractRGBValues(scolor, &srval, &sgval, &sbval); extractRGBValues(srcmap, &srmap, &sgmap, &sbmap); extractRGBValues(dstmap, &drmap, &dgmap, &dbmap); srmap = L_MIN(254, L_MAX(1, srmap)); sgmap = L_MIN(254, L_MAX(1, sgmap)); sbmap = L_MIN(254, L_MAX(1, sbmap)); if (srval <= srmap) drval = (srval * drmap) / srmap; else drval = drmap + ((255 - drmap) * (srval - srmap)) / (255 - srmap); if (sgval <= sgmap) dgval = (sgval * dgmap) / sgmap; else dgval = dgmap + ((255 - dgmap) * (sgval - sgmap)) / (255 - sgmap); if (sbval <= sbmap) dbval = (sbval * dbmap) / sbmap; else dbval = dbmap + ((255 - dbmap) * (sbval - sbmap)) / (255 - sbmap); composeRGBPixel(drval, dgval, dbval, pdcolor); return 0; } /*------------------------------------------------------------------* * Fractional shift of RGB towards black or white * *------------------------------------------------------------------*/ /*! * \brief pixShiftByComponent() * * \param[in] pixd [optional]; either NULL or equal to pixs for in-place * \param[in] pixs 32 bpp rgb, cmap OK * \param[in] srcval source color: 0xrrggbb00 * \param[in] dstval target color: 0xrrggbb00 * \return pixd with all pixels mapped based on the srcval/destval mapping, * or pixd on error * *
 * Notes:
 *      (1) For each component (r, b, g) separately, this does a linear
 *          mapping of the colors in pixs to colors in pixd.
 *          Let rs and rd be the red src and dest components in %srcval and
 *          %dstval, and rval is the red component of the src pixel.
 *          Then for all pixels in pixs, the mapping for the red
 *          component from pixs to pixd is:
 *             if (rd <= rs)   (shift toward black)
 *                 rval --> (rd/rs) * rval
 *             if (rd > rs)    (shift toward white)
 *                (255 - rval) --> ((255 - rs)/(255 - rd)) * (255 - rval)
 *          Thus if rd <= rs, the red component of all pixels is
 *          mapped by the same fraction toward white, and if rd > rs,
 *          they are mapped by the same fraction toward black.
 *          This is essentially a different linear TRC (gamma = 1)
 *          for each component.  The source and target color inputs are
 *          just used to generate the three fractions.
 *      (2) Note that this mapping differs from that in
 *          pixLinearMapToTargetColor(), which maps rs --> rd and does
 *          a piecewise stretching in between.
 *      (3) For inplace operation, call it this way:
 *            pixFractionalShiftByComponent(pixs, pixs, ... )
 *      (4) For generating a new pixd:
 *            pixd = pixLinearMapToTargetColor(NULL, pixs, ...)
 *      (5) A simple application is to color a grayscale image.
 *          A light background can be colored using srcval = 0xffffff00
 *          and picking a target background color for dstval.
 *          A dark foreground can be colored by using srcval = 0x0
 *          and choosing a target foreground color for dstval.
 * 
*/ PIX * pixShiftByComponent(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval) { l_int32 i, j, w, h, wpl; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd exists, but != pixs", __func__, pixd); if (pixGetDepth(pixs) != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); /* If colormapped, just modify it */ if ((cmap = pixGetColormap(pixd)) != NULL) { pixcmapShiftByComponent(cmap, srcval, dstval); return pixd; } extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); rtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); gtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); btab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (!rtab || !gtab || !btab) { L_ERROR("calloc fail for tab\n", __func__); goto cleanup; } for (i = 0; i < 256; i++) { if (rdval == rsval) rtab[i] = i; else if (rdval < rsval) rtab[i] = (i * rdval) / rsval; else rtab[i] = 255 - (255 - rdval) * (255 - i) / (255 - rsval); if (gdval == gsval) gtab[i] = i; else if (gdval < gsval) gtab[i] = (i * gdval) / gsval; else gtab[i] = 255 - (255 - gdval) * (255 - i) / (255 - gsval); if (bdval == bsval) btab[i] = i; else if (bdval < bsval) btab[i] = (i * bdval) / bsval; else btab[i] = 255 - (255 - bdval) * (255 - i) / (255 - bsval); } pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); line[j] = pixel; } } cleanup: LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixelShiftByComponent() * * \param[in] rval, gval, bval * \param[in] srcval source color: 0xrrggbb00 * \param[in] dstval target color: 0xrrggbb00 * \param[out] ppixel rgb value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a linear transformation that gives the same result
 *          on a single pixel as pixShiftByComponent() gives
 *          on a pix.  Each component is handled separately.  If
 *          the dest component is larger than the src, then the
 *          component is pushed toward 255 by the same fraction as
 *          the src --> dest shift.
 * 
*/ l_ok pixelShiftByComponent(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel) { l_int32 rsval, rdval, gsval, gdval, bsval, bdval, rs, gs, bs; if (!ppixel) return ERROR_INT("&pixel defined", __func__, 1); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); if (rdval == rsval) rs = rval; else if (rdval < rsval) rs = (rval * rdval) / rsval; else rs = 255 - (255 - rdval) * (255 - rval) / (255 - rsval); if (gdval == gsval) gs = gval; else if (gdval < gsval) gs = (gval * gdval) / gsval; else gs = 255 - (255 - gdval) * (255 - gval) / (255 - gsval); if (bdval == bsval) bs = bval; else if (bdval < bsval) bs = (bval * bdval) / bsval; else bs = 255 - (255 - bdval) * (255 - bval) / (255 - bsval); composeRGBPixel(rs, gs, bs, ppixel); return 0; } /*! * \brief pixelFractionalShift() * * \param[in] rval red source component * \param[in] gval green source component * \param[in] bval blue source component * \param[in] fract negative toward black; positive toward white * \param[out] ppixel resulting rgb value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This linear transformation shifts each component a fraction
 *          toward either black (%fract < 0) or white (%fract > 0).
 *      (2) It changes the saturation and intensity, but leaves the hue
 *          invariant.  See usage in pixLinearMapToTargetColor() and
 *          pixMapWithInvariantHue().
 *      (3) %fract is in the range [-1 .... +1].  If %fract < 0,
 *          saturation is increased and brightness is reduced.  The
 *          opposite results if %fract > 0.  If %fract == -1,
 *          the resulting pixel is black; %fract == 1 results in white.
 * 
*/ l_ok pixelFractionalShift(l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract, l_uint32 *ppixel) { l_int32 nrval, ngval, nbval; if (!ppixel) return ERROR_INT("&pixel defined", __func__, 1); if (fract < -1.0 || fract > 1.0) return ERROR_INT("fraction not in [-1 ... +1]", __func__, 1); nrval = (fract < 0) ? (l_int32)((1.0 + fract) * rval + 0.5) : rval + (l_int32)(fract * (255 - rval) + 0.5); ngval = (fract < 0) ? (l_int32)((1.0 + fract) * gval + 0.5) : gval + (l_int32)(fract * (255 - gval) + 0.5); nbval = (fract < 0) ? (l_int32)((1.0 + fract) * bval + 0.5) : bval + (l_int32)(fract * (255 - bval) + 0.5); composeRGBPixel(nrval, ngval, nbval, ppixel); return 0; } /*! * \brief pixMapWithInvariantHue() * * \param[in] pixd [optional]; either NULL or equal to pixs for in-place * \param[in] pixs 32 bpp rgb * \param[in] srcval reference source color: 0xrrggbb00 * \param[in] fract fraction toward white of dest color * \return pixd with all pixels mapped based on the srcval/destval mapping, * or pixd on error * *
 * Notes:
 *      (1) The combination of %srcval and %fract define the linear
 *          hue-preserving transformation, that is applied to all pixels.
 *      (2) %fract is in the range [-1 .... +1].  If %fract < 0,
 *          saturation is increased and brightness is reduced.  The
 *          opposite results if %fract > 0.  If %fract == -1,
 *          %srcval is mapped to black; if %fract == 1, it is mapped to white.
 *      (3) For inplace operation, call it this way:
 *            pixMapWithInvariatHue(pixs, pixs, ... );
 *          For generating a new pixd:
 *            pixd = pixMapWithInvariantHue(NULL, pixs, ...);
 * 
*/ PIX * pixMapWithInvariantHue(PIX *pixd, PIX *pixs, l_uint32 srcval, l_float32 fract) { l_int32 rval, gval, bval; l_uint32 dstval; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd exists, but != pixs", __func__, pixd); if (fract < -1.0 || fract > 1.0) return (PIX *)ERROR_PTR("fraction not in [-1 ... +1]", __func__, NULL); /* Generate the dstval that is %fract toward white from %srcval */ extractRGBValues(srcval, &rval, &gval, &bval); pixelFractionalShift(rval, gval, bval, fract, &dstval); /* Use the (%srcval, dstval) pair to define the linear transform */ return pixLinearMapToTargetColor(pixd, pixs, srcval, dstval); } leptonica-1.86.0/src/colormap.c000066400000000000000000002052641506303110300163340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colormap.c *
 *
 *      Colormap creation, copy, destruction, addition
 *           PIXCMAP    *pixcmapCreate()
 *           PIXCMAP    *pixcmapCreateRandom()
 *           PIXCMAP    *pixcmapCreateLinear()
 *           PIXCMAP    *pixcmapCopy()
 *           void        pixcmapDestroy()
 *           l_int32     pixcmapIsValid()
 *           l_int32     pixcmapAddColor()
 *           l_int32     pixcmapAddRGBA()
 *           l_int32     pixcmapAddNewColor()
 *           l_int32     pixcmapAddNearestColor()
 *           l_int32     pixcmapUsableColor()
 *           l_int32     pixcmapAddBlackOrWhite()
 *           l_int32     pixcmapSetBlackAndWhite()
 *           l_int32     pixcmapGetCount()
 *           l_int32     pixcmapGetDepth()
 *           l_int32     pixcmapGetMinDepth()
 *           l_int32     pixcmapGetFreeCount()
 *           l_int32     pixcmapClear()
 *
 *      Colormap random access and test
 *           l_int32     pixcmapGetColor()
 *           l_int32     pixcmapGetColor32()
 *           l_int32     pixcmapGetRGBA()
 *           l_int32     pixcmapGetRGBA32()
 *           l_int32     pixcmapResetColor()
 *           l_int32     pixcmapSetAlpha()
 *           l_int32     pixcmapGetIndex()
 *           l_int32     pixcmapHasColor()
 *           l_int32     pixcmapIsOpaque()
 *           l_int32     pixcmapNonOpaqueColorsInfo()
 *           l_int32     pixcmapIsBlackAndWhite()
 *           l_int32     pixcmapCountGrayColors()
 *           l_int32     pixcmapGetRankIntensity()
 *           l_int32     pixcmapGetNearestIndex()
 *           l_int32     pixcmapGetNearestGrayIndex()
 *           l_int32     pixcmapGetDistanceToColor()
 *           l_int32     pixcmapGetRangeValues()
 *
 *      Colormap conversion
 *           PIXCMAP    *pixcmapGrayToFalseColor()
 *           PIXCMAP    *pixcmapGrayToColor()
 *           PIXCMAP    *pixcmapColorToGray()
 *           PIXCMAP    *pixcmapConvertTo4()
 *           PIXCMAP    *pixcmapConvertTo8()
 *
 *      Colormap I/O
 *           l_int32     pixcmapRead()
 *           l_int32     pixcmapReadStream()
 *           l_int32     pixcmapReadMem()
 *           l_int32     pixcmapWrite()
 *           l_int32     pixcmapWriteStream()
 *           l_int32     pixcmapWriteMem()
 *
 *      Extract colormap arrays and serialization
 *           l_int32     pixcmapToArrays()
 *           l_int32     pixcmapToRGBTable()
 *           l_int32     pixcmapSerializeToMemory()
 *           PIXCMAP    *pixcmapDeserializeFromMemory()
 *           char       *pixcmapConvertToHex()
 *
 *      Colormap transforms
 *           l_int32     pixcmapGammaTRC()
 *           l_int32     pixcmapContrastTRC()
 *           l_int32     pixcmapShiftIntensity()
 *           l_int32     pixcmapShiftByComponent()
 *
 *  Note:
 *      (1) colormaps in leptonica have a maximum of 256 entries.
 *      (2) nalloc, the allocated size of the palette array, is related
 *          to the depth d of the pixels by:
 *                 nalloc = 2^(d)
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #include "pix_internal.h" /*-------------------------------------------------------------* * Colormap creation and addition * *-------------------------------------------------------------*/ /*! * \brief pixcmapCreate() * * \param[in] depth of pix, in bpp * \return cmap, or NULL on error */ PIXCMAP * pixcmapCreate(l_int32 depth) { RGBA_QUAD *cta; PIXCMAP *cmap; if (depth != 1 && depth != 2 && depth !=4 && depth != 8) return (PIXCMAP *)ERROR_PTR("depth not in {1,2,4,8}", __func__, NULL); cmap = (PIXCMAP *)LEPT_CALLOC(1, sizeof(PIXCMAP)); cmap->depth = depth; cmap->nalloc = 1 << depth; cta = (RGBA_QUAD *)LEPT_CALLOC(cmap->nalloc, sizeof(RGBA_QUAD)); cmap->array = cta; cmap->n = 0; return cmap; } /*! * \brief pixcmapCreateRandom() * * \param[in] depth of pix, in bpp: 2, 4 or 8 * \param[in] hasblack 1 if the first color is black; 0 if no black * \param[in] haswhite 1 if the last color is white; 0 if no white * \return cmap, or NULL on error * *
 * Notes:
 *      (1) This sets up a colormap with random colors,
 *          where the first color is optionally black, the last color
 *          is optionally white, and the remaining colors are
 *          chosen randomly.
 *      (2) The number of randomly chosen colors is:
 *               2^(depth) - haswhite - hasblack
 *      (3) Because rand() is seeded, it might disrupt otherwise
 *          deterministic results if also used elsewhere in a program.
 *      (4) rand() is not threadsafe, and will generate garbage if run
 *          on multiple threads at once -- though garbage is generally
 *          what you want from a random number generator!
 *      (5) Modern rand()s have equal randomness in low and high order
 *          bits, but older ones don't.  Here, we're just using rand()
 *          to choose colors for output.
 * 
*/ PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite) { l_int32 ncolors, i; l_int32 red[256], green[256], blue[256]; PIXCMAP *cmap; if (depth != 2 && depth != 4 && depth != 8) return (PIXCMAP *)ERROR_PTR("depth not in {2, 4, 8}", __func__, NULL); if (hasblack != 0) hasblack = 1; if (haswhite != 0) haswhite = 1; cmap = pixcmapCreate(depth); ncolors = 1 << depth; if (hasblack) /* first color is optionally black */ pixcmapAddColor(cmap, 0, 0, 0); for (i = hasblack; i < ncolors - haswhite; i++) { red[i] = (l_uint32)rand() & 0xff; green[i] = (l_uint32)rand() & 0xff; blue[i] = (l_uint32)rand() & 0xff; pixcmapAddColor(cmap, red[i], green[i], blue[i]); } if (haswhite) /* last color is optionally white */ pixcmapAddColor(cmap, 255, 255, 255); return cmap; } /*! * \brief pixcmapCreateLinear() * * \param[in] d depth of pix for this colormap; 1, 2, 4 or 8 * \param[in] nlevels valid in range [2, 2^d] * \return cmap, or NULL on error * *
 * Notes:
 *      (1) Colormap has equally spaced gray color values
 *          from black (0, 0, 0) to white (255, 255, 255).
 * 
*/ PIXCMAP * pixcmapCreateLinear(l_int32 d, l_int32 nlevels) { l_int32 maxlevels, i, val; PIXCMAP *cmap; if (d != 1 && d != 2 && d !=4 && d != 8) return (PIXCMAP *)ERROR_PTR("d not in {1, 2, 4, 8}", __func__, NULL); maxlevels = 1 << d; if (nlevels < 2 || nlevels > maxlevels) return (PIXCMAP *)ERROR_PTR("invalid nlevels", __func__, NULL); cmap = pixcmapCreate(d); for (i = 0; i < nlevels; i++) { val = (255 * i) / (nlevels - 1); pixcmapAddColor(cmap, val, val, val); } return cmap; } /*! * \brief pixcmapCopy() * * \param[in] cmaps * \return cmapd, or NULL on error */ PIXCMAP * pixcmapCopy(const PIXCMAP *cmaps) { l_int32 nbytes, valid; PIXCMAP *cmapd; if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", __func__, NULL); pixcmapIsValid(cmaps, NULL, &valid); if (!valid) return (PIXCMAP *)ERROR_PTR("invalid cmap", __func__, NULL); cmapd = (PIXCMAP *)LEPT_CALLOC(1, sizeof(PIXCMAP)); nbytes = cmaps->nalloc * sizeof(RGBA_QUAD); cmapd->array = (void *)LEPT_CALLOC(1, nbytes); memcpy(cmapd->array, cmaps->array, cmaps->n * sizeof(RGBA_QUAD)); cmapd->n = cmaps->n; cmapd->nalloc = cmaps->nalloc; cmapd->depth = cmaps->depth; return cmapd; } /*! * \brief pixcmapDestroy() * * \param[in,out] pcmap set to null on return * \return void */ void pixcmapDestroy(PIXCMAP **pcmap) { PIXCMAP *cmap; if (pcmap == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((cmap = *pcmap) == NULL) return; LEPT_FREE(cmap->array); LEPT_FREE(cmap); *pcmap = NULL; } /*! * \brief pixcmapIsValid() * * \param[in] cmap * \param[in] pix optional; can be NULL * \param[out] pvalid return 1 if valid; 0 if not * \return 0 if OK, 1 on error or if cmap is not valid * *
 * Notes:
 *      (1) If %pix is input, this will verify that pixel values cannot
 *          overflow the colormap.  This is a relatively expensive operation
 *          that may need to check all the pixel values.
 *      (2) If %pix is input, there must be at least one color in the
 *          colormap if it is to be valid with any pix, even if the
 *          pixels are all 0.
 * 
*/ l_ok pixcmapIsValid(const PIXCMAP *cmap, PIX *pix, l_int32 *pvalid) { l_int32 d, depth, nalloc, maxindex, maxcolors; if (!pvalid) return ERROR_INT("&valid not defined", __func__, 1); *pvalid = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (!cmap->array) return ERROR_INT("cmap array not defined", __func__, 1); d = cmap->depth; if (d != 1 && d != 2 && d != 4 && d != 8) { L_ERROR("invalid cmap depth: %d\n", __func__, d); return 1; } nalloc = cmap->nalloc; if (nalloc != (1 << d)) { L_ERROR("invalid cmap nalloc = %d; d = %d\n", __func__, nalloc, d); return 1; } if (cmap->n < 0 || cmap->n > nalloc) { L_ERROR("invalid cmap n: %d; nalloc = %d\n", __func__, cmap->n, nalloc); return 1; } /* If a pix is given, it must have a depth no larger than 8 */ if (pix) { depth = pixGetDepth(pix); if (depth > 8) { L_ERROR("pix depth %d > 8\n", __func__, depth); return 1; } maxcolors = 1 << depth; } /* To prevent indexing overflow into the cmap, the pix depth * must not exceed the cmap depth. Do not require depth equality, * because some functions such as median cut quantizers allow * the cmap depth to be bigger than the pix depth. */ if (pix && (depth > d)) { L_ERROR("(pix depth = %d) > (cmap depth = %d)\n", __func__, depth, d); return 1; } if (pix && cmap->n < 1) { L_ERROR("cmap array is empty; invalid with any pix\n", __func__); return 1; } /* Do not let the colormap have more colors than the pixels * can address. The png encoder considers this to be an * "invalid palette length". For example, for 1 bpp, the * colormap may have a depth > 1, but it must not have more * than 2 colors. */ if (pix && (cmap->n > maxcolors)) { L_ERROR("cmap entries = %d > max colors for pix = %d\n", __func__, cmap->n, maxcolors); return 1; } /* Where the colormap or the pix may have been corrupted, and * in particular when reading or writing image files, it should * be verified that the largest colormap index value in the image * is less than the number of entries in the colormap array. */ if (pix) { pixGetMaxColorIndex(pix, &maxindex); if (maxindex >= cmap->n) { L_ERROR("(max index in image = %d) >= " "(number entries in colormap = %d)\n", __func__, maxindex, cmap->n); return 1; } } *pvalid = 1; return 0; } /*! * \brief pixcmapAddColor() * * \param[in] cmap * \param[in] rval, gval, bval colormap entry to be added; each number * is in range [0, ... 255] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This always adds the color if there is room.
 *      (2) The alpha component is 255 (opaque)
 * 
*/ l_ok pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval) { RGBA_QUAD *cta; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (cmap->n >= cmap->nalloc) return ERROR_INT("no free color entries", __func__, 1); cta = (RGBA_QUAD *)cmap->array; cta[cmap->n].red = rval; cta[cmap->n].green = gval; cta[cmap->n].blue = bval; cta[cmap->n].alpha = 255; cmap->n++; return 0; } /*! * \brief pixcmapAddRGBA() * * \param[in] cmap * \param[in] rval, gval, bval, aval colormap entry to be added; * each number is in range [0, ... 255] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This always adds the color if there is room.
 * 
*/ l_ok pixcmapAddRGBA(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval) { RGBA_QUAD *cta; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (cmap->n >= cmap->nalloc) return ERROR_INT("no free color entries", __func__, 1); cta = (RGBA_QUAD *)cmap->array; cta[cmap->n].red = rval; cta[cmap->n].green = gval; cta[cmap->n].blue = bval; cta[cmap->n].alpha = aval; cmap->n++; return 0; } /*! * \brief pixcmapAddNewColor() * * \param[in] cmap * \param[in] rval, gval, bval colormap entry to be added; each number * is in range [0, ... 255] * \param[out] pindex index of color * \return 0 if OK, 1 on error; 2 if unable to add color * *
 * Notes:
 *      (1) This only adds color if not already there.
 *      (2) The alpha component is 255 (opaque)
 *      (3) This returns the index of the new (or existing) color.
 *      (4) Returns 2 with a warning if unable to add this color;
 *          the caller should check the return value.
 * 
*/ l_ok pixcmapAddNewColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); /* Check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ return 0; /* We need to add the color. Is there room? */ if (cmap->n >= cmap->nalloc) { L_WARNING("no free color entries\n", __func__); return 2; } /* There's room. Add it. */ pixcmapAddColor(cmap, rval, gval, bval); *pindex = pixcmapGetCount(cmap) - 1; return 0; } /*! * \brief pixcmapAddNearestColor() * * \param[in] cmap * \param[in] rval, gval, bval colormap entry to be added; each number * is in range [0, ... 255] * \param[out] pindex index of color * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only adds color if not already there.
 *      (2) The alpha component is 255 (opaque)
 *      (3) If it's not in the colormap and there is no room to add
 *          another color, this returns the index of the nearest color.
 * 
*/ l_ok pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); /* Check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ return 0; /* We need to add the color. Is there room? */ if (cmap->n < cmap->nalloc) { pixcmapAddColor(cmap, rval, gval, bval); *pindex = pixcmapGetCount(cmap) - 1; return 0; } /* There's no room. Return the index of the nearest color */ pixcmapGetNearestIndex(cmap, rval, gval, bval, pindex); return 0; } /*! * \brief pixcmapUsableColor() * * \param[in] cmap * \param[in] rval, gval, bval colormap entry to be added; each number * is in range [0, ... 255] * \param[out] pusable 1 if usable; 0 if not * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This checks if the color already exists or if there is
 *          room to add it.  It makes no change in the colormap.
 * 
*/ l_ok pixcmapUsableColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable) { l_int32 index; if (!pusable) return ERROR_INT("&usable not defined", __func__, 1); *pusable = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); /* Is there room to add it? */ if (cmap->n < cmap->nalloc) { *pusable = 1; return 0; } /* No room; check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, &index)) /* found */ *pusable = 1; return 0; } /*! * \brief pixcmapAddBlackOrWhite() * * \param[in] cmap * \param[in] color 0 for black, 1 for white * \param[out] pindex [optional] index of color; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only adds color if not already there.
 *      (2) The alpha component is 255 (opaque)
 *      (3) This sets index to the requested color.
 *      (4) If there is no room in the colormap, returns the index
 *          of the closest color.
 * 
*/ l_ok pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex) { l_int32 index; if (pindex) *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (color == 0) { /* black */ if (pixcmapGetFreeCount(cmap) > 0) pixcmapAddNewColor(cmap, 0, 0, 0, &index); else pixcmapGetRankIntensity(cmap, 0.0, &index); } else { /* white */ if (pixcmapGetFreeCount(cmap) > 0) pixcmapAddNewColor(cmap, 255, 255, 255, &index); else pixcmapGetRankIntensity(cmap, 1.0, &index); } if (pindex) *pindex = index; return 0; } /*! * \brief pixcmapSetBlackAndWhite() * * \param[in] cmap * \param[in] setblack 0 for no operation; 1 to set darkest color to black * \param[in] setwhite 0 for no operation; 1 to set lightest color to white * \return 0 if OK, 1 on error */ l_ok pixcmapSetBlackAndWhite(PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite) { l_int32 index; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (setblack) { pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapResetColor(cmap, index, 0, 0, 0); } if (setwhite) { pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapResetColor(cmap, index, 255, 255, 255); } return 0; } /*! * \brief pixcmapGetCount() * * \param[in] cmap * \return count, or 0 on error */ l_int32 pixcmapGetCount(const PIXCMAP *cmap) { if (!cmap) return ERROR_INT("cmap not defined", __func__, 0); return cmap->n; } /*! * \brief pixcmapGetFreeCount() * * \param[in] cmap * \return free entries, or 0 on error */ l_int32 pixcmapGetFreeCount(PIXCMAP *cmap) { if (!cmap) return ERROR_INT("cmap not defined", __func__, 0); return (cmap->nalloc - cmap->n); } /*! * \brief pixcmapGetDepth() * * \param[in] cmap * \return depth, or 0 on error */ l_int32 pixcmapGetDepth(PIXCMAP *cmap) { if (!cmap) return ERROR_INT("cmap not defined", __func__, 0); return cmap->depth; } /*! * \brief pixcmapGetMinDepth() * * \param[in] cmap * \param[out] pmindepth minimum depth to support the colormap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) On error, &mindepth is returned as 0.
 * 
*/ l_ok pixcmapGetMinDepth(PIXCMAP *cmap, l_int32 *pmindepth) { l_int32 ncolors; if (!pmindepth) return ERROR_INT("&mindepth not defined", __func__, 1); *pmindepth = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); if (ncolors <= 4) *pmindepth = 2; else if (ncolors <= 16) *pmindepth = 4; else /* ncolors > 16 */ *pmindepth = 8; return 0; } /*! * \brief pixcmapClear() * * \param[in] cmap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes the colors by setting the count to 0.
 * 
*/ l_ok pixcmapClear(PIXCMAP *cmap) { if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); cmap->n = 0; return 0; } /*-------------------------------------------------------------* * Colormap random access * *-------------------------------------------------------------*/ /*! * \brief pixcmapGetColor() * * \param[in] cmap * \param[in] index * \param[out] prval, pgval, pbval each color value * \return 0 if OK, 1 if not accessible caller should check */ l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { RGBA_QUAD *cta; if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", __func__, 1); *prval = *pgval = *pbval = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", __func__, 1); cta = (RGBA_QUAD *)cmap->array; *prval = cta[index].red; *pgval = cta[index].green; *pbval = cta[index].blue; return 0; } /*! * \brief pixcmapGetColor32() * * \param[in] cmap * \param[in] index * \param[out] pval32 32-bit rgb color value * \return 0 if OK, 1 if not accessible caller should check * *
 * Notes:
 *      (1) The returned alpha channel value is 255.
 * 
*/ l_ok pixcmapGetColor32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32) { l_int32 rval, gval, bval; if (!pval32) return ERROR_INT("&val32 not defined", __func__, 1); *pval32 = 0; if (pixcmapGetColor(cmap, index, &rval, &gval, &bval) != 0) return ERROR_INT("rgb values not found", __func__, 1); composeRGBAPixel(rval, gval, bval, 255, pval32); return 0; } /*! * \brief pixcmapGetRGBA() * * \param[in] cmap * \param[in] index * \param[out] prval, pgval, pbval, paval each color value * \return 0 if OK, 1 if not accessible caller should check */ l_ok pixcmapGetRGBA(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval) { RGBA_QUAD *cta; if (!prval || !pgval || !pbval || !paval) return ERROR_INT("&rval, &gval, &bval, &aval not all defined", __func__, 1); *prval = *pgval = *pbval = *paval = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", __func__, 1); cta = (RGBA_QUAD *)cmap->array; *prval = cta[index].red; *pgval = cta[index].green; *pbval = cta[index].blue; *paval = cta[index].alpha; return 0; } /*! * \brief pixcmapGetRGBA32() * * \param[in] cmap * \param[in] index * \param[out] pval32 32-bit rgba color value * \return 0 if OK, 1 if not accessible caller should check */ l_ok pixcmapGetRGBA32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32) { l_int32 rval, gval, bval, aval; if (!pval32) return ERROR_INT("&val32 not defined", __func__, 1); *pval32 = 0; if (pixcmapGetRGBA(cmap, index, &rval, &gval, &bval, &aval) != 0) return ERROR_INT("rgba values not found", __func__, 1); composeRGBAPixel(rval, gval, bval, aval, pval32); return 0; } /*! * \brief pixcmapResetColor() * * \param[in] cmap * \param[in] index * \param[in] rval, gval, bval colormap entry to be reset; each number * is in range [0, ... 255] * \return 0 if OK, 1 if not accessible caller should check * *
 * Notes:
 *      (1) This resets sets the color of an entry that has already
 *          been set and included in the count of colors.
 *      (2) The alpha component is 255 (opaque)
 * 
*/ l_ok pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval) { RGBA_QUAD *cta; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", __func__, 1); cta = (RGBA_QUAD *)cmap->array; cta[index].red = rval; cta[index].green = gval; cta[index].blue = bval; cta[index].alpha = 255; return 0; } /*! * \brief pixcmapSetAlpha() * * \param[in] cmap * \param[in] index * \param[in] aval in range [0, ... 255] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This modifies the transparency of one entry in a colormap.
 *          The alpha component by default is 255 (opaque).
 *          This is used when extracting the colormap from a PNG file
 *          without decoding the image.
 * 
*/ l_ok pixcmapSetAlpha(PIXCMAP *cmap, l_int32 index, l_int32 aval) { RGBA_QUAD *cta; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", __func__, 1); cta = (RGBA_QUAD *)cmap->array; cta[index].alpha = aval; return 0; } /*! * \brief pixcmapGetIndex() * * \param[in] cmap * \param[in] rval, gval, bval colormap colors to search for; each number * is in range [0, ... 255] * \param[out] pindex value of index found * \return 0 if found, 1 if not found caller must check */ l_int32 pixcmapGetIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { l_int32 n, i; RGBA_QUAD *cta; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); n = pixcmapGetCount(cmap); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < n; i++) { if (rval == cta[i].red && gval == cta[i].green && bval == cta[i].blue) { *pindex = i; return 0; } } return 1; } /*! * \brief pixcmapHasColor() * * \param[in] cmap * \param[out] pcolor TRUE if cmap has color; FALSE otherwise * \return 0 if OK, 1 on error */ l_ok pixcmapHasColor(PIXCMAP *cmap, l_int32 *pcolor) { l_int32 n, i; l_int32 *rmap, *gmap, *bmap; if (!pcolor) return ERROR_INT("&color not defined", __func__, 1); *pcolor = FALSE; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL)) return ERROR_INT("colormap arrays not made", __func__, 1); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { if ((rmap[i] != gmap[i]) || (rmap[i] != bmap[i])) { *pcolor = TRUE; break; } } LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); return 0; } /*! * \brief pixcmapIsOpaque() * * \param[in] cmap * \param[out] popaque TRUE if fully opaque: all entries are 255 * \return 0 if OK, 1 on error */ l_ok pixcmapIsOpaque(PIXCMAP *cmap, l_int32 *popaque) { l_int32 i, n; RGBA_QUAD *cta; if (!popaque) return ERROR_INT("&opaque not defined", __func__, 1); *popaque = TRUE; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); n = pixcmapGetCount(cmap); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < n; i++) { if (cta[i].alpha != 255) { *popaque = FALSE; break; } } return 0; } /*! * \brief pixcmapNonOpaqueColorsInfo() * * \param[in] cmap * \param[out] pntrans [optional] number of transparent alpha * entries; <= 256 * \param[out] pmax_trans [optional] max index of transparent alpha * \param[out] pmin_opaque [optional] min index of opaque < 256 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used, for clarity, when writing the png tRNS palette.
 *          According to the spec, http://www.w3.org/TR/PNG/#11tRNS,
 *          if the tRNS palette is of size ntrans, the palette uses the first
 *          ntrans alpha entries in the cmap, and the remaining alpha values
 *          are assumed to be 255 (opaque), regardless of cmap alpha value.
 *      (2) Ordinarily, the non-opaque colors come first in the cmap, so
 *               min_opaque > max_trans
 *          and
 *               ntrans = max_trans + 1 = min_opaque.
 *          But this does not happen in general.  In trans-2bpp-palette.png,
 *          for example, only the third of four entries is not opaque, so
 *               ntrans = 1
 *               max_trans = 2 (index is 0-based)
 *               min_opaque = 0
 *          The tRNS palette must extend to the third entry to cover the
 *          color with transparency: use 3 as the fourth arg to png_set_tRNS().
 *      (3) If all entries are opaque, max_trans = -1.
 *          If all entries are transparent, min_opaque = size of cmap.
 * 
*/ l_ok pixcmapNonOpaqueColorsInfo(PIXCMAP *cmap, l_int32 *pntrans, l_int32 *pmax_trans, l_int32 *pmin_opaque) { l_int32 i, n, ntrans, max_trans, min_opaque, opaque_found; RGBA_QUAD *cta; if (pntrans) *pntrans = 0; if (pmax_trans) *pmax_trans = -1; if (pmin_opaque) *pmin_opaque = 256; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); n = pixcmapGetCount(cmap); ntrans = 0; max_trans = -1; min_opaque = n; cta = (RGBA_QUAD *)cmap->array; opaque_found = FALSE; for (i = 0; i < n; i++) { if (cta[i].alpha != 255) { ntrans++; max_trans = i; } else if (opaque_found == FALSE) { opaque_found = TRUE; min_opaque = i; } } if (pntrans) *pntrans = ntrans; if (pmax_trans) *pmax_trans = max_trans; if (pmin_opaque) *pmin_opaque = min_opaque; return 0; } /*! * \brief pixcmapIsBlackAndWhite() * * \param[in] cmap * \param[out] pblackwhite TRUE if the cmap has only two colors: * black (0,0,0) and white (255,255,255) * \return 0 if OK, 1 on error */ l_ok pixcmapIsBlackAndWhite(PIXCMAP *cmap, l_int32 *pblackwhite) { l_int32 val0, val1, hascolor; RGBA_QUAD *cta; if (!pblackwhite) return ERROR_INT("&blackwhite not defined", __func__, 1); *pblackwhite = FALSE; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (pixcmapGetCount(cmap) != 2) return 0; pixcmapHasColor(cmap, &hascolor); if (hascolor) return 0; cta = (RGBA_QUAD *)cmap->array; val0 = cta[0].red; val1 = cta[1].red; if ((val0 == 0 && val1 == 255) || (val0 == 255 && val1 == 0)) *pblackwhite = TRUE; return 0; } /*! * \brief pixcmapCountGrayColors() * * \param[in] cmap * \param[out] pngray number of gray colors * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This counts the unique gray colors, including black and white.
 * 
*/ l_ok pixcmapCountGrayColors(PIXCMAP *cmap, l_int32 *pngray) { l_int32 n, i, rval, gval, bval, count; l_int32 *array; if (!pngray) return ERROR_INT("&ngray not defined", __func__, 1); *pngray = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); array = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); n = pixcmapGetCount(cmap); count = 0; for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((rval == gval) && (rval == bval) && (array[rval] == 0)) { array[rval] = 1; count++; } } LEPT_FREE(array); *pngray = count; return 0; } /*! * \brief pixcmapGetRankIntensity() * * \param[in] cmap * \param[in] rankval 0.0 for darkest, 1.0 for lightest color * \param[out] pindex the index into the colormap that corresponds * to the rank intensity color * \return 0 if OK, 1 on error */ l_ok pixcmapGetRankIntensity(PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex) { l_int32 n, i, rval, gval, bval, rankindex; NUMA *na, *nasort; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (rankval < 0.0 || rankval > 1.0) return ERROR_INT("rankval not in [0.0 ... 1.0]", __func__, 1); n = pixcmapGetCount(cmap); na = numaCreate(n); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaAddNumber(na, rval + gval + bval); } nasort = numaGetSortIndex(na, L_SORT_INCREASING); rankindex = (l_int32)(rankval * (n - 1) + 0.5); numaGetIValue(nasort, rankindex, pindex); numaDestroy(&na); numaDestroy(&nasort); return 0; } /*! * \brief pixcmapGetNearestIndex() * * \param[in] cmap * \param[in] rval, gval, bval colormap colors to search for; each number * is in range [0, ... 255] * \param[out] pindex the index of the nearest color * \return 0 if OK, 1 on error caller must check * *
 * Notes:
 *      (1) Returns the index of the exact color if possible, otherwise the
 *          index of the color closest to the target color.
 *      (2) Nearest color is that which is the least sum-of-squares distance
 *          from the target color.
 * 
*/ l_ok pixcmapGetNearestIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { l_int32 i, n, delta, dist, mindist; RGBA_QUAD *cta; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = UNDEF; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if ((cta = (RGBA_QUAD *)cmap->array) == NULL) return ERROR_INT("cta not defined(!)", __func__, 1); n = pixcmapGetCount(cmap); mindist = 3 * 255 * 255 + 1; for (i = 0; i < n; i++) { delta = cta[i].red - rval; dist = delta * delta; delta = cta[i].green - gval; dist += delta * delta; delta = cta[i].blue - bval; dist += delta * delta; if (dist < mindist) { *pindex = i; if (dist == 0) break; mindist = dist; } } return 0; } /*! * \brief pixcmapGetNearestGrayIndex() * * \param[in] cmap * \param[in] val gray value to search for; in range [0, ... 255] * \param[out] pindex the index of the nearest color * \return 0 if OK, 1 on error caller must check * *
 * Notes:
 *      (1) This should be used on gray colormaps.  It uses only the
 *          green value of the colormap.
 *      (2) Returns the index of the exact color if possible, otherwise the
 *          index of the color closest to the target color.
 * 
*/ l_ok pixcmapGetNearestGrayIndex(PIXCMAP *cmap, l_int32 val, l_int32 *pindex) { l_int32 i, n, dist, mindist; RGBA_QUAD *cta; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (val < 0 || val > 255) return ERROR_INT("val not in [0 ... 255]", __func__, 1); if ((cta = (RGBA_QUAD *)cmap->array) == NULL) return ERROR_INT("cta not defined(!)", __func__, 1); n = pixcmapGetCount(cmap); mindist = 256; for (i = 0; i < n; i++) { dist = cta[i].green - val; dist = L_ABS(dist); if (dist < mindist) { *pindex = i; if (dist == 0) break; mindist = dist; } } return 0; } /*! * \brief pixcmapGetDistanceToColor() * * \param[in] cmap * \param[in] index * \param[in] rval, gval, bval target color * \param[out] pdist the distance from the cmap entry to target * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Returns the L2 distance (squared) between the color at index i
 *          and the target color.
 * 
*/ l_ok pixcmapGetDistanceToColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pdist) { l_int32 n, delta, dist; RGBA_QUAD *cta; if (!pdist) return ERROR_INT("&dist not defined", __func__, 1); *pdist = UNDEF; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); n = pixcmapGetCount(cmap); if (index >= n) return ERROR_INT("invalid index", __func__, 1); if ((cta = (RGBA_QUAD *)cmap->array) == NULL) return ERROR_INT("cta not defined(!)", __func__, 1); delta = cta[index].red - rval; dist = delta * delta; delta = cta[index].green - gval; dist += delta * delta; delta = cta[index].blue - bval; dist += delta * delta; *pdist = dist; return 0; } /*! * \brief pixcmapGetRangeValues() * * \param[in] cmap * \param[in] select L_SELECT_RED, L_SELECT_GREEN, L_SELECT_BLUE or * L_SELECT_AVERAGE * \param[out] pminval [optional] minimum value of component * \param[out] pmaxval [optional] maximum value of component * \param[out] pminindex [optional] index of minimum value * \param[out] pmaxindex [optional] index of maximum value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Returns, for selected components (or the average), the
 *          the extreme values (min and/or max) and their indices
 *          that are found in the cmap.
 * 
*/ l_ok pixcmapGetRangeValues(PIXCMAP *cmap, l_int32 select, l_int32 *pminval, l_int32 *pmaxval, l_int32 *pminindex, l_int32 *pmaxindex) { l_int32 i, n, imin, imax, minval, maxval, rval, gval, bval, aveval; if (pminval) *pminval = UNDEF; if (pmaxval) *pmaxval = UNDEF; if (pminindex) *pminindex = UNDEF; if (pmaxindex) *pmaxindex = UNDEF; if (!pminval && !pmaxval && !pminindex && !pmaxindex) return ERROR_INT("no result requested", __func__, 1); if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); imin = UNDEF; imax = UNDEF; minval = 100000; maxval = -1; n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (select == L_SELECT_RED) { if (rval < minval) { minval = rval; imin = i; } if (rval > maxval) { maxval = rval; imax = i; } } else if (select == L_SELECT_GREEN) { if (gval < minval) { minval = gval; imin = i; } if (gval > maxval) { maxval = gval; imax = i; } } else if (select == L_SELECT_BLUE) { if (bval < minval) { minval = bval; imin = i; } if (bval > maxval) { maxval = bval; imax = i; } } else if (select == L_SELECT_AVERAGE) { aveval = (rval + gval + bval) / 3; if (aveval < minval) { minval = aveval; imin = i; } if (aveval > maxval) { maxval = aveval; imax = i; } } else { return ERROR_INT("invalid selection", __func__, 1); } } if (pminval) *pminval = minval; if (pmaxval) *pmaxval = maxval; if (pminindex) *pminindex = imin; if (pmaxindex) *pmaxindex = imax; return 0; } /*-------------------------------------------------------------* * Colormap conversion * *-------------------------------------------------------------*/ /*! * \brief pixcmapGrayToFalseColor() * * \param[in] gamma (factor) 0.0 or 1.0 for default; > 1.0 for brighter; * 2.0 is quite nice * \return cmap, or NULL on error * *
 * Notes:
 *      (1) This creates a colormap that maps from gray to false colors.
 *          The colormap is modeled after the Matlap "jet" configuration.
 * 
*/ PIXCMAP * pixcmapGrayToFalseColor(l_float32 gamma) { l_int32 i, rval, gval, bval; l_int32 *curve; l_float32 invgamma, x; PIXCMAP *cmap; if (gamma <= 0.0) gamma = 1.0; /* Generate curve for transition part of color map */ curve = (l_int32 *)LEPT_CALLOC(64, sizeof(l_int32)); invgamma = 1. / gamma; for (i = 0; i < 64; i++) { x = (l_float32)i / 64.; curve[i] = (l_int32)(255. * powf(x, invgamma) + 0.5); } cmap = pixcmapCreate(8); for (i = 0; i < 256; i++) { if (i < 32) { rval = 0; gval = 0; bval = curve[i + 32]; } else if (i < 96) { /* 32 - 95 */ rval = 0; gval = curve[i - 32]; bval = 255; } else if (i < 160) { /* 96 - 159 */ rval = curve[i - 96]; gval = 255; bval = curve[159 - i]; } else if (i < 224) { /* 160 - 223 */ rval = 255; gval = curve[223 - i]; bval = 0; } else { /* 224 - 255 */ rval = curve[287 - i]; gval = 0; bval = 0; } pixcmapAddColor(cmap, rval, gval, bval); } LEPT_FREE(curve); return cmap; } /*! * \brief pixcmapGrayToColor() * * \param[in] color * \return cmap, or NULL on error * *
 * Notes:
 *      (1) This creates a colormap that maps from gray to
 *          a specific color.  In the mapping, each component
 *          is faded to white, depending on the gray value.
 *      (2) In use, this is simply attached to a grayscale pix
 *          to give it the input color.
 * 
*/ PIXCMAP * pixcmapGrayToColor(l_uint32 color) { l_int32 i, rval, gval, bval; PIXCMAP *cmap; extractRGBValues(color, &rval, &gval, &bval); cmap = pixcmapCreate(8); for (i = 0; i < 256; i++) { pixcmapAddColor(cmap, rval + (i * (255 - rval)) / 255, gval + (i * (255 - gval)) / 255, bval + (i * (255 - bval)) / 255); } return cmap; } /*! * \brief pixcmapColorToGray() * * \param[in] cmaps * \param[in] rwt, gwt, bwt non-negative; these should add to 1.0 * \return cmap gray, or NULL on error * *
 * Notes:
 *      (1) This creates a gray colormap from an arbitrary colormap.
 *      (2) In use, attach the output gray colormap to the pix
 *          (or a copy of it) that provided the input colormap.
 * 
*/ PIXCMAP * pixcmapColorToGray(PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, n, rval, gval, bval, val; l_float32 sum; PIXCMAP *cmapd; if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", __func__, NULL); if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) return (PIXCMAP *)ERROR_PTR("weights not all >= 0.0", __func__, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ sum = rwt + gwt + bwt; if (sum == 0.0) { L_WARNING("all weights zero; setting equal to 1/3\n", __func__); rwt = gwt = bwt = 0.33333f; sum = 1.0; } if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", __func__); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } if ((cmapd = pixcmapCopy(cmaps)) == NULL) return (PIXCMAP *)ERROR_PTR("cmapd not made", __func__, NULL); n = pixcmapGetCount(cmapd); for (i = 0; i < n; i++) { pixcmapGetColor(cmapd, i, &rval, &gval, &bval); val = (l_int32)(rwt * rval + gwt * gval + bwt * bval + 0.5); pixcmapResetColor(cmapd, i, val, val, val); } return cmapd; } /*! * \brief pixcmapConvertTo4() * * \param[in] cmaps colormap for 2 bpp pix * \return cmapd (4 bpp) * *
 * Notes:
 *      (1) This converts a 2 bpp colormap to 4 bpp.  The colors
 *          are the same; the output colormap entry array has size 16.
 * 
*/ PIXCMAP * pixcmapConvertTo4(PIXCMAP *cmaps) { l_int32 i, n, rval, gval, bval; PIXCMAP *cmapd; if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", __func__, NULL); if (pixcmapGetDepth(cmaps) != 2) return (PIXCMAP *)ERROR_PTR("cmaps not for 2 bpp pix", __func__, NULL); cmapd = pixcmapCreate(4); n = pixcmapGetCount(cmaps); for (i = 0; i < n; i++) { pixcmapGetColor(cmaps, i, &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } return cmapd; } /*! * \brief pixcmapConvertTo8() * * \param[in] cmaps colormap for 2 bpp or 4 bpp pix * \return cmapd (8 bpp) * *
 * Notes:
 *      (1) This converts a 2 bpp or 4 bpp colormap to 8 bpp.  The colors
 *          are the same; the output colormap entry array has size 256.
 * 
*/ PIXCMAP * pixcmapConvertTo8(PIXCMAP *cmaps) { l_int32 i, n, depth, rval, gval, bval; PIXCMAP *cmapd; if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", __func__, NULL); depth = pixcmapGetDepth(cmaps); if (depth == 8) return pixcmapCopy(cmaps); if (depth != 2 && depth != 4) return (PIXCMAP *)ERROR_PTR("cmaps not 2 or 4 bpp", __func__, NULL); cmapd = pixcmapCreate(8); n = pixcmapGetCount(cmaps); for (i = 0; i < n; i++) { pixcmapGetColor(cmaps, i, &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } return cmapd; } /*-------------------------------------------------------------* * Colormap I/O * *-------------------------------------------------------------*/ /*! * \brief pixcmapRead() * * \param[in] filename * \return cmap, or NULL on error */ PIXCMAP * pixcmapRead(const char *filename) { FILE *fp; PIXCMAP *cmap; if (!filename) return (PIXCMAP *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXCMAP *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); cmap = pixcmapReadStream(fp); fclose(fp); if (!cmap) return (PIXCMAP *)ERROR_PTR_1("cmap not read", filename, __func__, NULL); return cmap; } /*! * \brief pixcmapReadStream() * * \param[in] fp file stream * \return cmap, or NULL on error */ PIXCMAP * pixcmapReadStream(FILE *fp) { l_int32 rval, gval, bval, aval, ignore; l_int32 i, index, ret, depth, ncolors; PIXCMAP *cmap; if (!fp) return (PIXCMAP *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", &depth, &ncolors); if (ret != 2 || (depth != 1 && depth != 2 && depth != 4 && depth != 8) || (ncolors < 2 || ncolors > 256)) return (PIXCMAP *)ERROR_PTR("invalid cmap size", __func__, NULL); ignore = fscanf(fp, "Color R-val G-val B-val Alpha\n"); ignore = fscanf(fp, "----------------------------------------\n"); if ((cmap = pixcmapCreate(depth)) == NULL) return (PIXCMAP *)ERROR_PTR("cmap not made", __func__, NULL); for (i = 0; i < ncolors; i++) { if (fscanf(fp, "%3d %3d %3d %3d %3d\n", &index, &rval, &gval, &bval, &aval) != 5) { pixcmapDestroy(&cmap); return (PIXCMAP *)ERROR_PTR("invalid entry", __func__, NULL); } pixcmapAddRGBA(cmap, rval, gval, bval, aval); } return cmap; } /*! * \brief pixcmapReadMem() * * \param[in] data serialization of pixcmap; in ascii * \param[in] size of data in bytes; can use strlen to get it * \return cmap, or NULL on error */ PIXCMAP * pixcmapReadMem(const l_uint8 *data, size_t size) { FILE *fp; PIXCMAP *cmap; if (!data) return (PIXCMAP *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIXCMAP *)ERROR_PTR("stream not opened", __func__, NULL); cmap = pixcmapReadStream(fp); fclose(fp); if (!cmap) L_ERROR("cmap not read\n", __func__); return cmap; } /*! * \brief pixcmapWrite() * * \param[in] filename * \param[in] cmap * \return 0 if OK, 1 on error */ l_ok pixcmapWrite(const char *filename, const PIXCMAP *cmap) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixcmapWriteStream(fp, cmap); fclose(fp); if (ret) return ERROR_INT_1("cmap not written to stream", filename, __func__, 1); return 0; } /*! * \brief pixcmapWriteStream() * * \param[in] fp file stream \param[in] cmap * \return 0 if OK, 1 on error */ l_ok pixcmapWriteStream(FILE *fp, const PIXCMAP *cmap) { l_int32 *rmap, *gmap, *bmap, *amap; l_int32 i; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) return ERROR_INT("colormap arrays not made", __func__, 1); fprintf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", cmap->depth, cmap->n); fprintf(fp, "Color R-val G-val B-val Alpha\n"); fprintf(fp, "----------------------------------------\n"); for (i = 0; i < cmap->n; i++) fprintf(fp, "%3d %3d %3d %3d %3d\n", i, rmap[i], gmap[i], bmap[i], amap[i]); fprintf(fp, "\n"); LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); LEPT_FREE(amap); return 0; } /*! * \brief pixcmapWriteMem() * * \param[out] pdata data of serialized pixcmap; ascii * \param[out] psize size of returned data * \param[in] cmap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a pixcmap in memory and puts the result in a buffer.
 * 
*/ l_ok pixcmapWriteMem(l_uint8 **pdata, size_t *psize, const PIXCMAP *cmap) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixcmapWriteStream(fp, cmap); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixcmapWriteStream(fp, cmap); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*----------------------------------------------------------------------* * Extract colormap arrays and serialization * *----------------------------------------------------------------------*/ /*! * \brief pixcmapToArrays() * * \param[in] cmap colormap * \param[out] prmap array of red values * \param[out] pgmap array of green values * \param[out] pbmap array of blue values * \param[out] pamap [optional] array of alpha (transparency) values * \return 0 if OK; 1 on error */ l_ok pixcmapToArrays(const PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap) { l_int32 *rmap, *gmap, *bmap, *amap = NULL; l_int32 i, ncolors; RGBA_QUAD *cta; if (!prmap || !pgmap || !pbmap) return ERROR_INT("&rmap, &gmap, &bmap not all defined", __func__, 1); *prmap = *pgmap = *pbmap = NULL; if (pamap) *pamap = NULL; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); rmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); gmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); bmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); *prmap = rmap; *pgmap = gmap; *pbmap = bmap; if (pamap) { amap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); *pamap = amap; } cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < ncolors; i++) { rmap[i] = cta[i].red; gmap[i] = cta[i].green; bmap[i] = cta[i].blue; if (pamap) amap[i] = cta[i].alpha; } return 0; } /*! * \brief pixcmapToRGBTable() * * \param[in] cmap colormap * \param[out] ptab table of rgba values for the colormap * \param[out] pncolors [optional] size of table * \return 0 if OK; 1 on error */ l_ok pixcmapToRGBTable(PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors) { l_int32 i, ncolors, rval, gval, bval, aval; l_uint32 *tab; if (!ptab) return ERROR_INT("&tab not defined", __func__, 1); *ptab = NULL; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); if (pncolors) *pncolors = ncolors; tab = (l_uint32 *)LEPT_CALLOC(ncolors, sizeof(l_uint32)); *ptab = tab; for (i = 0; i < ncolors; i++) { pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); composeRGBAPixel(rval, gval, bval, aval, &tab[i]); } return 0; } /*! * \brief pixcmapSerializeToMemory() * * \param[in] cmap colormap * \param[in] cpc components/color: 3 for rgb, 4 for rgba * \param[out] pncolors number of colors in table * \param[out] pdata binary string, cpc bytes per color * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) When serializing to store in a pdf, use %cpc = 3.
 * 
*/ l_ok pixcmapSerializeToMemory(PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata) { l_int32 i, ncolors, rval, gval, bval, aval; l_uint8 *data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (cpc != 3 && cpc != 4) return ERROR_INT("cpc not 3 or 4", __func__, 1); ncolors = pixcmapGetCount(cmap); *pncolors = ncolors; data = (l_uint8 *)LEPT_CALLOC((size_t)cpc * ncolors, sizeof(l_uint8)); *pdata = data; for (i = 0; i < ncolors; i++) { pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); data[cpc * i] = rval; data[cpc * i + 1] = gval; data[cpc * i + 2] = bval; if (cpc == 4) data[cpc * i + 3] = aval; } return 0; } /*! * \brief pixcmapDeserializeFromMemory() * * \param[in] data binary string, 3 or 4 bytes per color * \param[in] cpc components/color: 3 for rgb, 4 for rgba * \param[in] ncolors > 0 * \return cmap, or NULL on error */ PIXCMAP * pixcmapDeserializeFromMemory(l_uint8 *data, l_int32 cpc, l_int32 ncolors) { l_int32 i, d, rval, gval, bval, aval; PIXCMAP *cmap; if (!data) return (PIXCMAP *)ERROR_PTR("data not defined", __func__, NULL); if (cpc != 3 && cpc != 4) return (PIXCMAP *)ERROR_PTR("cpc not 3 or 4", __func__, NULL); if (ncolors <= 0) return (PIXCMAP *)ERROR_PTR("no entries", __func__, NULL); if (ncolors > 256) return (PIXCMAP *)ERROR_PTR("ncolors > 256", __func__, NULL); if (ncolors > 16) d = 8; else if (ncolors > 4) d = 4; else if (ncolors > 2) d = 2; else d = 1; cmap = pixcmapCreate(d); for (i = 0; i < ncolors; i++) { rval = data[cpc * i]; gval = data[cpc * i + 1]; bval = data[cpc * i + 2]; if (cpc == 4) aval = data[cpc * i + 3]; else aval = 255; /* opaque */ pixcmapAddRGBA(cmap, rval, gval, bval, aval); } return cmap; } /*! * \brief pixcmapConvertToHex() * * \param[in] data binary serialized data * \param[in] ncolors in colormap * \return hexdata bracketed, space-separated ascii hex string, * or NULL on error. * *
 * Notes:
 *      (1) The number of bytes in %data is 3 * ncolors.
 *      (2) Output is in form:
 *             < r0g0b0 r1g1b1 ... rngnbn >
 *          where r0, g0, b0 ... are each 2 bytes of hex ascii
 *      (3) This is used in pdf files to express the colormap as an
 *          array in ascii (human-readable) format.
 * 
*/ char * pixcmapConvertToHex(l_uint8 *data, l_int32 ncolors) { l_int32 i, j, hexbytes; char *hexdata = NULL; char buf[4]; if (!data) return (char *)ERROR_PTR("data not defined", __func__, NULL); if (ncolors < 1) return (char *)ERROR_PTR("no colors", __func__, NULL); hexbytes = 2 + (2 * 3 + 1) * ncolors + 2; hexdata = (char *)LEPT_CALLOC(hexbytes, sizeof(char)); hexdata[0] = '<'; hexdata[1] = ' '; for (i = 0; i < ncolors; i++) { j = 2 + (2 * 3 + 1) * i; snprintf(buf, sizeof(buf), "%02x", data[3 * i]); hexdata[j] = buf[0]; hexdata[j + 1] = buf[1]; snprintf(buf, sizeof(buf), "%02x", data[3 * i + 1]); hexdata[j + 2] = buf[0]; hexdata[j + 3] = buf[1]; snprintf(buf, sizeof(buf), "%02x", data[3 * i + 2]); hexdata[j + 4] = buf[0]; hexdata[j + 5] = buf[1]; hexdata[j + 6] = ' '; } hexdata[j + 7] = '>'; hexdata[j + 8] = '\0'; return hexdata; } /*-------------------------------------------------------------* * Colormap transforms * *-------------------------------------------------------------*/ /*! * \brief pixcmapGammaTRC() * * \param[in] cmap colormap * \param[in] gamma gamma correction; must be > 0.0 * \param[in] minval input value that gives 0 for output; can be < 0 * \param[in] maxval input value that gives 255 for output; can be > 255 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place transform
 *      (2) See pixGammaTRC() and numaGammaTRC() in enhance.c
 *          for description and use of transform
 * 
*/ l_ok pixcmapGammaTRC(PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 rval, gval, bval, trval, tgval, tbval, i, ncolors; NUMA *nag; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", __func__); gamma = 1.0; } if (minval >= maxval) return ERROR_INT("minval not < maxval", __func__, 1); if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ return 0; if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return ERROR_INT("nag not made", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(nag, rval, &trval); numaGetIValue(nag, gval, &tgval); numaGetIValue(nag, bval, &tbval); pixcmapResetColor(cmap, i, trval, tgval, tbval); } numaDestroy(&nag); return 0; } /*! * \brief pixcmapContrastTRC() * * \param[in] cmap colormap * \param[in] factor generally between 0.0 [no enhancement] * and 1.0, but can be larger than 1.0 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place transform
 *      (2) See pixContrastTRC() and numaContrastTRC() in enhance.c
 *          for description and use of transform
 * 
*/ l_ok pixcmapContrastTRC(PIXCMAP *cmap, l_float32 factor) { l_int32 i, ncolors, rval, gval, bval, trval, tgval, tbval; NUMA *nac; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; setting to 0.0\n", __func__); factor = 0.0; } if ((nac = numaContrastTRC(factor)) == NULL) return ERROR_INT("nac not made", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(nac, rval, &trval); numaGetIValue(nac, gval, &tgval); numaGetIValue(nac, bval, &tbval); pixcmapResetColor(cmap, i, trval, tgval, tbval); } numaDestroy(&nac); return 0; } /*! * \brief pixcmapShiftIntensity() * * \param[in] cmap colormap * \param[in] fraction between -1.0 and +1.0 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place transform
 *      (2) It does a proportional shift of the intensity for each color.
 *      (3) If fraction < 0.0, it moves all colors towards (0,0,0).
 *          This darkens the image.
 *          If fraction > 0.0, it moves all colors towards (255,255,255)
 *          This fades the image.
 *      (4) The equivalent transform can be accomplished with pixcmapGammaTRC(),
 *          but it is considerably more difficult (see numaGammaTRC()).
 * 
*/ l_ok pixcmapShiftIntensity(PIXCMAP *cmap, l_float32 fraction) { l_int32 i, ncolors, rval, gval, bval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (fraction < -1.0 || fraction > 1.0) return ERROR_INT("fraction not in [-1.0, 1.0]", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (fraction < 0.0) pixcmapResetColor(cmap, i, (l_int32)((1.0 + fraction) * rval), (l_int32)((1.0 + fraction) * gval), (l_int32)((1.0 + fraction) * bval)); else pixcmapResetColor(cmap, i, rval + (l_int32)(fraction * (255 - rval)), gval + (l_int32)(fraction * (255 - gval)), bval + (l_int32)(fraction * (255 - bval))); } return 0; } /*! * \brief pixcmapShiftByComponent() * * \param[in] cmap colormap * \param[in] srcval source color: 0xrrggbb00 * \param[in] dstval target color: 0xrrggbb00 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place transform
 *      (2) It implements pixelShiftByComponent() for each color.
 *          The mapping is specified by srcval and dstval.
 *      (3) If a component decreases, the component in the colormap
 *          decreases by the same ratio.  Likewise for increasing, except
 *          all ratios are taken with respect to the distance from 255.
 * 
*/ l_ok pixcmapShiftByComponent(PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval) { l_int32 i, ncolors, rval, gval, bval; l_uint32 newval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); pixelShiftByComponent(rval, gval, bval, srcval, dstval, &newval); extractRGBValues(newval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } leptonica-1.86.0/src/colormorph.c000066400000000000000000000113241506303110300166740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colormorph.c *
 *
 *      Top-level color morphological operations
 *
 *            PIX     *pixColorMorph()
 *
 *      Method: Algorithm by van Herk and Gil and Werman, 1992
 *              Apply grayscale morphological operations separately
 *              to each component.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*-----------------------------------------------------------------* * Top-level color morphological operations * *-----------------------------------------------------------------*/ /*! * \brief pixColorMorph() * * \param[in] pixs * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE, L_MORPH_OPEN, * or L_MORPH_CLOSE * \param[in] hsize width of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto for height of Sel * \return pixd * *
 * Notes:
 *      (1) This does the morph operation on each component separately,
 *          and recombines the result.
 *      (2) Sel is a brick with all elements being hits.
 *      (3) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixColorMorph(PIX *pixs, l_int32 type, l_int32 hsize, l_int32 vsize) { PIX *pixr, *pixg, *pixb, *pixrm, *pixgm, *pixbm, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE) return (PIX *)ERROR_PTR("invalid morph type", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); if (type == L_MORPH_DILATE) { pixrm = pixDilateGray(pixr, hsize, vsize); pixgm = pixDilateGray(pixg, hsize, vsize); pixbm = pixDilateGray(pixb, hsize, vsize); } else if (type == L_MORPH_ERODE) { pixrm = pixErodeGray(pixr, hsize, vsize); pixgm = pixErodeGray(pixg, hsize, vsize); pixbm = pixErodeGray(pixb, hsize, vsize); } else if (type == L_MORPH_OPEN) { pixrm = pixOpenGray(pixr, hsize, vsize); pixgm = pixOpenGray(pixg, hsize, vsize); pixbm = pixOpenGray(pixb, hsize, vsize); } else { /* type == L_MORPH_CLOSE */ pixrm = pixCloseGray(pixr, hsize, vsize); pixgm = pixCloseGray(pixg, hsize, vsize); pixbm = pixCloseGray(pixb, hsize, vsize); } pixd = pixCreateRGBImage(pixrm, pixgm, pixbm); pixDestroy(&pixr); pixDestroy(&pixrm); pixDestroy(&pixg); pixDestroy(&pixgm); pixDestroy(&pixb); pixDestroy(&pixbm); return pixd; } leptonica-1.86.0/src/colorquant1.c000066400000000000000000004764121506303110300167750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorquant1.c *
 *
 *  Octcube color quantization
 *
 *  There are several different octcube/octree based quantizations.
 *  These can be classified, in the order in which they appear in this
 *  file, as follows:
 *
 *  -----------------------------------------------------------------
 *  (1) General adaptive octree
 *  (2) Adaptive octree by population at fixed level
 *  (3) Adaptive octree using population and with specified number
 *      of output colors
 *  (4) Octcube with colormap representation of mixed color/gray
 *  (5) 256 fixed octcubes covering color space
 *  (6) Octcubes at fixed level for ncolors <= 256
 *  (7) Octcubes at fixed level with RGB output
 *  (8) Quantizing an rgb image using a specified colormap
 *  -----------------------------------------------------------------
 *
 *  (1) Two-pass adaptive octree color quantization
 *          PIX              *pixOctreeColorQuant()
 *          PIX              *pixOctreeColorQuantGeneral()
 *
 *        which calls
 *          static CQCELL  ***octreeGenerateAndPrune()
 *          static PIX       *pixOctreeQuantizePixels()
 *
 *        which calls
 *          static l_int32    octreeFindColorCell()
 *
 *      Helper cqcell functions
 *          static CQCELL  ***cqcellTreeCreate()
 *          static void       cqcellTreeDestroy()
 *
 *      Helper index functions
 *          l_int32           makeRGBToIndexTables()
 *          void              getOctcubeIndexFromRGB()
 *          static void       getRGBFromOctcube()
 *          static l_int32    getOctcubeIndices()
 *          static l_int32    octcubeGetCount()
 *
 *  (2) Adaptive octree quantization based on population at a fixed level
 *          PIX              *pixOctreeQuantByPopulation()
 *          static l_int32    pixDitherOctindexWithCmap()
 *
 *  (3) Adaptive octree quantization to 4 and 8 bpp with specified
 *      number of output colors in colormap
 *          PIX              *pixOctreeQuantNumColors()
 *
 *  (4) Mixed color/gray quantization with specified number of colors
 *          PIX              *pixOctcubeQuantMixedWithGray()
 *
 *  (5) Fixed partition octcube quantization with 256 cells
 *          PIX              *pixFixedOctcubeQuant256()
 *
 *  (6) Fixed partition quantization for images with few colors
 *          PIX              *pixFewColorsOctcubeQuant1()
 *          PIX              *pixFewColorsOctcubeQuant2()
 *          PIX              *pixFewColorsOctcubeQuantMixed()
 *
 *  (7) Fixed partition octcube quantization at specified level
 *      with quantized output to RGB
 *          PIX              *pixFixedOctcubeQuantGenRGB()
 *
 *  (8) Color quantize RGB image using existing colormap
 *          PIX              *pixQuantFromCmap()  [high-level wrapper]
 *          PIX              *pixOctcubeQuantFromCmap()
 *          static PIX       *pixOctcubeQuantFromCmapLUT()
 *
 *      Generation of octcube histogram
 *          NUMA             *pixOctcubeHistogram()
 *
 *      Get filled octcube table from colormap
 *          l_int32          *pixcmapToOctcubeLUT()
 *
 *      Strip out unused elements in colormap
 *          l_int32           pixRemoveUnusedColors()
 *
 *      Find number of occupied octcubes at the specified level
 *          l_int32           pixNumberOccupiedOctcubes()
 *
 *  Notes:
 *        Leptonica also provides color quantization using a modified
 *        form of median cut.  See colorquant2.c for details.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* *
 *   This data structure is used for pixOctreeColorQuant(),
 *   a color octree that adjusts to the color distribution
 *   in the image that is being quantized.  The best settings
 *   are with CqNLevels = 6 and DITHERING set on.
 *
 * Notes:
 *      (1) the CTE (color table entry) index is sequentially
 *          assigned as the tree is pruned back
 *      (2) if 'bleaf' == 1, all pixels in that cube have been
 *          assigned to one or more CTEs.  But note that if
 *          all 8 subcubes have 'bleaf' == 1, it will have no
 *          pixels left for assignment and will not be a CTE.
 *      (3) 'nleaves', the number of leaves contained at the next
 *          lower level is some number between 0 and 8, inclusive.
 *          If it is zero, it means that all colors within this cube
 *          are part of a single growing cluster that has not yet
 *          been set aside as a leaf.  If 'nleaves' > 0, 'bleaf'
 *          will be set to 1 and all pixels not assigned to leaves
 *          at lower levels will be assigned to a CTE here.
 *          (However, as described above, if all pixels are already
 *          assigned, we set 'bleaf' = 1 but do not create a CTE
 *          at this level.)
 *      (4) To keep the maximum color error to a minimum, we
 *          prune the tree back to level 2, and require that
 *          all 64 level 2 cells are CTEs.
 *      (5) We reserve an extra set of colors to prevent running out
 *          of colors during the assignment of the final 64 level 2 cells.
 *          This is more likely to happen with small images.
 *      (6) When we run out of colors, the dithered image can be very
 *          poor, so we additionally prevent dithering if the image
 *          is small.
 *      (7) The color content of the image is measured, and if there
 *          is very little color, it is quantized in grayscale.
 * 
*/ struct ColorQuantCell { l_int32 rc, gc, bc; /* center values */ l_int32 n; /* number of samples in this cell */ l_int32 index; /* CTE (color table entry) index */ l_int32 nleaves; /* # of leaves contained at next lower level */ l_int32 bleaf; /* boolean: 0 if not a leaf, 1 if so */ }; typedef struct ColorQuantCell CQCELL; /* Constants for pixOctreeColorQuant() */ static const l_int32 CqNLevels = 5; /* only 4, 5 and 6 are allowed */ static const l_int32 CqReservedColors = 64; /* to allow for level 2 */ /* remainder CTEs */ static const l_int32 ExtraReservedColors = 25; /* to avoid running out */ static const l_int32 TreeGenWidth = 350; /* big enough for good stats */ static const l_int32 MinDitherSize = 250; /* don't dither if smaller */ /* *
 *   This data structure is used for pixOctreeQuantNumColors(),
 *   a color octree that adjusts in a simple way to the to the color
 *   distribution in the image that is being quantized.  It outputs
 *   colormapped images, either 4 bpp or 8 bpp, depending on the
 *   max number of colors and the compression desired.
 *
 *   The number of samples is saved as a float in the first location,
 *   because this is required to use it as the key that orders the
 *   cells in the priority queue.
 * 
* */ struct OctcubeQuantCell { l_float32 n; /* number of samples in this cell */ l_int32 octindex; /* octcube index */ l_int32 rcum, gcum, bcum; /* cumulative values */ l_int32 rval, gval, bval; /* average values */ }; typedef struct OctcubeQuantCell OQCELL; /* *
 *   This data structure is using for heap sorting octcubes
 *   by population.  Sort order is decreasing.
 * 
*/ struct L_OctcubePop { l_float32 npix; /* parameter on which to sort */ l_int32 index; /* octcube index at assigned level */ l_int32 rval; /* mean red value of pixels in octcube */ l_int32 gval; /* mean green value of pixels in octcube */ l_int32 bval; /* mean blue value of pixels in octcube */ }; typedef struct L_OctcubePop L_OCTCUBE_POP; /* *
 *   In pixDitherOctindexWithCmap(), we use these default values.
     To get the max value of 'dif' in the dithering color transfer,
     divide these "DIF_CAP" values by 8.  However, a value of
     0 means that there is no cap (infinite cap).  A very small
     value is used for POP_DIF_CAP because dithering on the population
     generated colormap can be unstable without a tight cap.
 * 
*/ static const l_int32 FIXED_DIF_CAP = 0; static const l_int32 POP_DIF_CAP = 40; /* Static octree helper function */ static l_int32 octreeFindColorCell(l_int32 octindex, CQCELL ***cqcaa, l_int32 *pindex, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); /* Static cqcell functions */ static CQCELL ***octreeGenerateAndPrune(PIX *pixs, l_int32 colors, l_int32 reservedcolors, PIXCMAP **pcmap); static PIX *pixOctreeQuantizePixels(PIX *pixs, CQCELL ***cqcaa, l_int32 ditherflag); static CQCELL ***cqcellTreeCreate(void); static void cqcellTreeDestroy(CQCELL ****pcqcaa); /* Static helper octcube index functions */ static void getRGBFromOctcube(l_int32 cubeindex, l_int32 level, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); static l_int32 getOctcubeIndices(l_int32 rgbindex, l_int32 level, l_int32 *pbindex, l_int32 *psindex); static l_int32 octcubeGetCount(l_int32 level, l_int32 *psize); /* Static function to perform octcube-indexed dithering */ static l_int32 pixDitherOctindexWithCmap(PIX *pixs, PIX *pixd, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_int32 *carray, l_int32 difcap); /* Static function to perform octcube-based quantizing from colormap */ static PIX *pixOctcubeQuantFromCmapLUT(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 *cmaptab, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab); #ifndef NO_CONSOLE_IO #define DEBUG_COLORQUANT 0 #define DEBUG_OCTINDEX 0 #define DEBUG_OCTCUBE_CMAP 0 #define DEBUG_POP 0 #define DEBUG_FEW_COLORS 0 #define PRINT_OCTCUBE_STATS 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------------------* * Two-pass adaptive octree color quantization * *-------------------------------------------------------------------------*/ /*! * \brief pixOctreeColorQuant() * * \param[in] pixs 32 bpp; 24-bit color * \param[in] colors in colormap; some number in range [128 ... 256]; * the actual number of colors used will be smaller * \param[in] ditherflag 1 to dither, 0 otherwise * \return pixd 8 bpp with colormap, or NULL on error * *
 *  I found one description in the literature of octree color
 *  quantization, using progressive truncation of the octree,
 *  by M. Gervautz and W. Purgathofer in Graphics Gems, pp.
 *  287-293, ed. A. Glassner, Academic Press, 1990.
 *  Rather than setting up a fixed partitioning of the color
 *  space ab initio, as we do here, they allow the octree to be
 *  progressively truncated as new pixels are added.  They
 *  need to set up some data structures that are traversed
 *  with the addition of each 24 bit pixel, in order to decide
 *  either 1) in which cluster (sub-branch of the octree to put
 *  the pixel, or 2 whether to truncate the octree further
 *  to place the pixel in an existing cluster, or 3 which
 *  two existing clusters should be merged so that the pixel
 *  can be left to start a truncated leaf of the octree.  Such dynamic
 *  truncation is considerably more complicated, and Gervautz et
 *  al. did not explain how they did it in anywhere near the
 *  detail required to check their implementation.
 *
 *  The simple method in pixFixedOctcubeQuant256 is very
 *  fast, and with dithering the results are good, but you
 *  can do better if the color clusters are selected adaptively
 *  from the image.  We want a method that makes much better
 *  use of color samples in regions of color space with high
 *  pixel density, while also fairly representing small numbers
 *  of color pixels in low density regions.  Such adaptation
 *  requires two passes through the image: the first for generating
 *  the pruned tree of color cubes and the second for computing the index
 *  into the color table for each pixel.
 *
 *  A relatively simple adaptive method is pixOctreeQuantByPopulation.
 *  That function first determines if the image has very few colors,
 *  and, if so, quantizes to those colors.  If there are more than
 *  256 colors, it generates a histogram of octcube leaf occupancy
 *  at level 4, chooses the 192 most populated such leaves as
 *  the first 192 colors, and sets the remaining 64 colors to the
 *  residual average pixel values in each of the 64 level 2 octcubes.
 *  This is a bit faster than pixOctreeColorQuant, and does very
 *  well without dithering, but for most images with dithering it
 *  is clearly inferior.
 *
 *  We now describe pixOctreeColorQuant.  The first pass is done
 *  on a subsampled image, because we do not need to use all the
 *  pixels in the image to generate the tree.  Subsampling
 *  down to 0.25 1/16 of the pixels makes the program run
 *  about 1.3 times faster.
 *
 *  Instead of dividing the color space into 256 equal-sized
 *  regions, we initially divide it into 2^12 or 2^15 or 2^18
 *  equal-sized octcubes.  Suppose we choose to use 2^18 octcubes.
 *  This gives us 6 octree levels.  We then prune back,
 *  starting from level 6.  For every cube at level 6, there
 *  are 8 cubes at level 5.  Call the operation of putting a
 *  cube aside as a color table entry CTE a "saving."
 *  We use a in general level-dependent threshold, and save
 *  those level 6 cubes that are above threshold.
 *  The rest are combined into the containing level 5 cube.
 *  If between 1 and 7 level 6 cubes within a level 5
 *  cube have been saved by thresholding, then the remaining
 *  level 6 cubes in that level 5 cube are automatically
 *  saved as well, without applying a threshold.  This greatly
 *  simplifies both the description of the CTEs and the later
 *  classification of each pixel as belonging to a CTE.
 *  This procedure is iterated through every cube, starting at
 *  level 5, and then 4, 3, and 2, successively.  The result is that
 *  each CTE contains the entirety of a set of from 1 to 7 cubes
 *  from a given level that all belong to a single cube at the
 *  level above.   We classify the CTEs in terms of the
 *  condition in which they are made as either being "threshold"
 *  or "residual."  They are "threshold" CTEs if no subcubes
 *  are CTEs that is, they contain every pixel within the cube
 *  and the number of pixels exceeds the threshold for making
 *  a CTE.  They are "residual" CTEs if at least one but not more
 *  than 7 of the subcubes have already been determined to be CTEs;
 *  this happens automatically -- no threshold is applied.
 *  If all 8 subcubes are determined to be CTEs, the cube is
 *  marked as having all pixels accounted for 'bleaf' = 1 but
 *  is not saved as a CTE.
 *
 *  We stop the pruning at level 2, at which there are 64
 *  sub-cubes.  Any pixels not already claimed in a CTE are
 *  put in these cubes.
 *
 *  As the cubes are saved as color samples in the color table,
 *  the number of remaining pixels P and the number of
 *  remaining colors in the color table N are recomputed,
 *  along with the average number of pixels P/N ppc to go in
 *  each of the remaining colors.  This running average number is
 *  used to set the threshold at the current level.
 *
 *  Because we are going to very small cubes at levels 6 or 5,
 *  and will dither the colors for errors, it is not necessary
 *  to compute the color center of each cluster; we can simply
 *  use the center of the cube.  This gives us a minimax error
 *  condition: the maximum error is half the width of the
 *  level 2 cubes -- 32 color values out of 256 -- for each color
 *  sample.  In practice, most of the pixels will be very much
 *  closer to the center of their cells.  And with dithering,
 *  the average pixel color in a small region will be closer still.
 *  Thus with the octree quantizer, we are able to capture
 *  regions of high color pdf probability density function in small
 *  but accurate CTEs, and to have only a small number of pixels
 *  that end up a significant distance with a guaranteed maximum
 *  from their true color.
 *
 *  How should the threshold factor vary?  Threshold factors
 *  are required for levels 2, 3, 4 and 5 in the pruning stage.
 *  The threshold for level 5 is actually applied to cubes at
 *  level 6, etc.  From various experiments, it appears that
 *  the results do not vary appreciably for threshold values near 1.0.
 *  If you want more colors in smaller cubes, the threshold
 *  factors can be set lower than 1.0 for cubes at levels 4 and 5.
 *  However, if the factor is set much lower than 1.0 for
 *  levels 2 and 3, we can easily run out of colors.
 *  We put aside 64 colors in the calculation of the threshold
 *  values, because we must have 64 color centers at level 2,
 *  that will have very few pixels in most of them.
 *  If we reduce the factor for level 5 to 0.4, this will
 *  generate many level 6 CTEs, and consequently
 *  many residual cells will be formed up from those leaves,
 *  resulting in the possibility of running out of colors.
 *  Remember, the residual CTEs are mandatory, and are formed
 *  without using the threshold, regardless of the number of
 *  pixels that are absorbed.
 *
 *  The implementation logically has four parts:
 *
 *       1 accumulation into small, fixed cells
 *       2 pruning back into selected CTE cubes
 *       3 organizing the CTEs for fast search to find
 *           the CTE to which any image pixel belongs
 *       4 doing a second scan to code the image pixels by CTE
 *
 *  Step 1 is straightforward; we use 2^15 cells.
 *
 *  We've already discussed how the pruning step 2 will be performed.
 *
 *  Steps 3) and (4 are related, in that the organization
 *  used by step 3 determines how the search actually
 *  takes place for each pixel in step 4.
 *
 *  There are many ways to do step 3.  Let's explore a few.
 *
 *  a The simplest is to order the cubes from highest occupancy
 *      to lowest, and traverse the list looking for the deepest
 *      match.  To make this more efficient, so that we know when
 *      to stop looking, any cube that has separate CTE subcubes
 *      would be marked as such, so that we know when we hit a
 *      true leaf.
 *
 *  b Alternatively, we can order the cubes by highest
 *      occupancy separately each level, and work upward,
 *      starting at level 5, so that when we find a match we
 *      know that it will be correct.
 *
 *  c Another approach would be to order the cubes by
 *      "address" and use a hash table to find the cube
 *      corresponding to a pixel color.  I don't know how to
 *      do this with a variable length address, as each CTE
 *      will have 3*n bits, where n is the level.
 *
 *  d Another approach entirely is to put the CTE cubes into
 *      a tree, in such a way that starting from the root, and
 *      using 3 bits of address at a time, the correct branch of
 *      each octree can be taken until a leaf is found.  Because
 *      a given cube can be both a leaf and also have branches
 *      going to sub-cubes, the search stops only when no
 *      marked subcubes have addresses that match the given pixel.
 *
 *      In the tree method, we can start with a dense infrastructure,
 *      and place the leaves corresponding to the N colors
 *      in the tree, or we can grow from the root only those
 *      branches that end directly on leaves.
 *
 *  What we do here is to take approach d, and implement the tree
 *  "virtually", as a set of arrays, one array for each level
 *  of the tree.   Initially we start at level 5, an array with
 *  2^15 cubes, each with 8 subcubes.  We then build nodes at
 *  levels closer to the root; at level 4 there are 2^12 nodes
 *  each with 8 subcubes; etc.  Using these arrays has
 *  several advantages:
 *
 *     ~  We don't need to keep track of links between cubes
 *        and subcubes, because we can use the canonical
 *        addressing on the cell arrays directly to determine
 *        which nodes are parent cubes and which are sub-cubes.
 *
 *     ~  We can prune directly on this tree
 *
 *     ~  We can navigate the pruned tree quickly to classify
 *        each pixel in the image.
 *
 *  Canonical addressing guarantees that the i-th node at level k
 *  has 8 subnodes given by the 8*i ... 8*i+7 nodes at level k+1.
 *
 *  The pruning step works as follows.  We go from the lowest
 *  level up.  At each level, the threshold is found from the
 *  product of a factor near 1.0 and the ratio of unmarked pixels
 *  to remaining colors minus the 64.  We march through
 *  the space, sequentially considering a cube and its 8 subcubes.
 *  We first check those subcubes that are not already
 *  marked as CTE to see if any are above threshold, and if so,
 *  generate a CTE and mark them as such.
 *  We then determine if any of the subcubes have been marked.
 *  If so, and there are subcubes that are not marked,
 *  we generate a CTE for the cube from the remaining unmarked
 *  subcubes; this is mandatory and does not depend on how many
 *  pixels are in the set of subcubes.  If none of the subcubes
 *  are marked, we aggregate their pixels into the cube
 *  containing them, but do not mark it as a CTE; that
 *  will be determined when iterating through the next level up.
 *
 *  When all the pixels in a cube are accounted for in one or more
 *  colors, we set the boolean 'bleaf' to true.  This is the
 *  flag used to mark the cubes in the pruning step.  If a cube
 *  is marked, and all 8 subcubes are marked, then it is not
 *  itself given a CTE because all pixels have already been
 *  accounted for.
 *
 *  Note that the pruning of the tree and labelling of the CTEs
 *  step 2 accomplishes step 3 implicitly, because the marked
 *  and pruned tree is ready for use in labelling each pixel
 *  in step 4.  We now, for every pixel in the image, traverse
 *  the tree from the root, looking for the lowest cube that is a leaf.
 *  At each level we have a cube and subcube.  If we reach a subcube
 *  leaf that is marked 0, we know that the color is stored in the
 *  cube above, and we've found the CTE.  Otherwise, the subcube
 *  leaf is marked 1.  If we're at the last level, we've reached
 *  the final leaf and must use it.  Otherwise, continue the
 *  process at the next level down.
 *
 *  For robustness, efficiency and high quality output, we do the following:
 *
 *  (1) Measure the color content of the image.  If there is very little
 *      color, quantize in grayscale.
 *  (2) For efficiency, build the octree with a subsampled image if the
 *      image is larger than some threshold size.
 *  (3) Reserve an extra set of colors to prevent running out of colors
 *      when pruning the octree; specifically, during the assignment
 *      of those level 2 cells out of the 64 that have unassigned
 *      pixels.  The problem of running out is more likely to happen
 *      with small images, because the estimation we use for the
 *      number of pixels available is not accurate.
 *  (4) In the unlikely event that we run out of colors, the dithered
 *      image can be very poor.  As this would only happen with very
 *      small images, and dithering is not particularly noticeable with
 *      such images, turn it off.
 * 
*/ PIX * pixOctreeColorQuant(PIX *pixs, l_int32 colors, l_int32 ditherflag) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (colors < 128 || colors > 240) /* further restricted */ return (PIX *)ERROR_PTR("colors must be in [128, 240]", __func__, NULL); return pixOctreeColorQuantGeneral(pixs, colors, ditherflag, 0.01f, 0.01f); } /*! * \brief pixOctreeColorQuantGeneral() * * \param[in] pixs 32 bpp; 24-bit color * \param[in] colors in colormap; some number in range [128 ... 240]; * the actual number of colors used will be smaller * \param[in] ditherflag 1 to dither, 0 otherwise * \param[in] validthresh minimum fraction of pixels neither near white * nor black, required for color quantization; * typically ~0.01, but smaller for images that have * color but are nearly all white * \param[in] colorthresh minimum fraction of pixels with color that are * not near white or black, that are required * for color quantization; typ. ~0.01, but smaller * for images that have color along with a * significant fraction of gray * \return pixd 8 bit with colormap, or NULL on error * *
 * Notes:
 *      (1) The parameters %validthresh and %colorthresh are used to
 *          determine if color quantization should be used on an image,
 *          or whether, instead, it should be quantized in grayscale.
 *          If the image has very few non-white and non-black pixels, or
 *          if those pixels that are non-white and non-black are all
 *          very close to either white or black, it is usually better
 *          to treat the color as accidental and to quantize the image
 *          to gray only.  These parameters are useful if you know
 *          something a priori about the image.  Perhaps you know that
 *          there is only a very small fraction of color pixels, but they're
 *          important to preserve; then you want to use a smaller value for
 *          these parameters.  To disable conversion to gray and force
 *          color quantization, use %validthresh = 0.0 and %colorthresh = 0.0.
 *      (2) See pixOctreeColorQuant() for algorithmic and implementation
 *          details.  This function has a more general interface.
 *      (3) See pixColorFraction() for computing the fraction of pixels
 *          that are neither white nor black, and the fraction of those
 *          pixels that have little color.  From the documentation there:
 *             If pixfract is very small, there are few pixels that are
 *             neither black nor white.  If colorfract is very small,
 *             the pixels that are neither black nor white have very
 *             little color content.  The product 'pixfract * colorfract'
 *             gives the fraction of pixels with significant color content.
 *          We test against the product %validthresh * %colorthresh
 *          to find color in images that have either very few
 *          intermediate gray pixels or that have many such gray pixels.
 * 
*/ PIX * pixOctreeColorQuantGeneral(PIX *pixs, l_int32 colors, l_int32 ditherflag, l_float32 validthresh, l_float32 colorthresh) { l_int32 w, h, minside, factor, index, rval, gval, bval; l_float32 scalefactor; l_float32 pixfract; /* fraction neither near white nor black */ l_float32 colorfract; /* fraction with color of the pixfract population */ CQCELL ***cqcaa; PIX *pixd, *pixsub; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (colors < 128 || colors > 240) return (PIX *)ERROR_PTR("colors must be in [128, 240]", __func__, NULL); /* Determine if the image has sufficient color content for * octree quantization, based on the input thresholds. * If pixfract << 1, most pixels are close to black or white. * If colorfract << 1, the pixels that are not near * black or white have very little color. * If with insufficient color, quantize with a grayscale colormap. */ pixGetDimensions(pixs, &w, &h, NULL); if (validthresh > 0.0 && colorthresh > 0.0) { minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); if (pixfract * colorfract < validthresh * colorthresh) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing to 8 bpp gray\n", __func__, pixfract, colorfract); return pixConvertTo8(pixs, 1); } } else { L_INFO("\n Process in color by default\n", __func__); } /* Conditionally subsample to speed up the first pass */ if (w > TreeGenWidth) { scalefactor = (l_float32)TreeGenWidth / (l_float32)w; pixsub = pixScaleBySampling(pixs, scalefactor, scalefactor); } else { pixsub = pixClone(pixs); } /* Drop the number of requested colors if image is very small */ if (w < MinDitherSize && h < MinDitherSize) colors = L_MIN(colors, 220); /* Make the pruned octree */ cqcaa = octreeGenerateAndPrune(pixsub, colors, CqReservedColors, &cmap); if (!cqcaa) { pixDestroy(&pixsub); return (PIX *)ERROR_PTR("tree not made", __func__, NULL); } #if DEBUG_COLORQUANT L_INFO(" Colors requested = %d\n", __func__, colors); L_INFO(" Actual colors = %d\n", __func__, cmap->n); #endif /* DEBUG_COLORQUANT */ /* Do not dither if image is very small */ if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", __func__); ditherflag = 0; } /* Traverse tree from root, looking for lowest cube * that is a leaf, and set dest pix value to its * colortable index */ if ((pixd = pixOctreeQuantizePixels(pixs, cqcaa, ditherflag)) == NULL) { pixDestroy(&pixsub); cqcellTreeDestroy(&cqcaa); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } /* Attach colormap and copy res */ pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Force darkest color to black if each component <= 4 */ pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 5 && gval < 5 && bval < 5) pixcmapResetColor(cmap, index, 0, 0, 0); /* Force lightest color to white if each component >= 252 */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 251 && gval > 251 && bval > 251) pixcmapResetColor(cmap, index, 255, 255, 255); cqcellTreeDestroy(&cqcaa); pixDestroy(&pixsub); return pixd; } /*! * \brief octreeGenerateAndPrune() * * \param[in] pixs * \param[in] colors number of colors to use between 128 and 256 * \param[in] reservedcolors number of reserved colors * \param[out] pcmap colormap returned * \return octree, colormap and number of colors used, or NULL * on error * *
 * Notes:
 *      (1) The number of colors in the cmap may differ from the number
 *          of colors requested, but it will not be larger than 256
 * 
*/ static CQCELL *** octreeGenerateAndPrune(PIX *pixs, l_int32 colors, l_int32 reservedcolors, PIXCMAP **pcmap) { l_int32 rval, gval, bval, cindex; l_int32 level, ncells, octindex; l_int32 w, h, wpls; l_int32 i, j, isub; l_int32 npix; /* number of remaining pixels to be assigned */ l_int32 ncolor; /* number of remaining color cells to be used */ l_int32 ppc; /* ave number of pixels left for each color cell */ l_int32 rv, gv, bv; l_float32 thresholdFactor[] = {0.01f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f}; l_float32 thresh; /* factor of ppc for this level */ l_uint32 *datas, *lines; l_uint32 *rtab, *gtab, *btab; CQCELL ***cqcaa; /* one array for each octree level */ CQCELL **cqca, **cqcasub; CQCELL *cqc, *cqcsub; PIXCMAP *cmap; NUMA *nat; /* accumulates levels for threshold cells */ NUMA *nar; /* accumulates levels for residual cells */ if (!pixs) return (CQCELL ***)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (CQCELL ***)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (colors < 128 || colors > 256) return (CQCELL ***)ERROR_PTR("colors not in [128,256]", __func__, NULL); if (!pcmap) return (CQCELL ***)ERROR_PTR("&cmap not defined", __func__, NULL); if ((cqcaa = cqcellTreeCreate()) == NULL) return (CQCELL ***)ERROR_PTR("cqcaa not made", __func__, NULL); /* Make the canonical index tables */ rtab = gtab = btab = NULL; makeRGBToIndexTables(CqNLevels, &rtab, >ab, &btab); /* Generate an 8 bpp cmap (max size 256) */ cmap = pixcmapCreate(8); *pcmap = cmap; pixGetDimensions(pixs, &w, &h, NULL); npix = w * h; /* initialize to all pixels */ ncolor = colors - reservedcolors - ExtraReservedColors; ppc = npix / ncolor; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Accumulate the centers of each cluster at level CqNLevels */ ncells = 1 << (3 * CqNLevels); cqca = cqcaa[CqNLevels]; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; cqc = cqca[octindex]; cqc->n++; } } /* Arrays for storing statistics */ nat = numaCreate(0); nar = numaCreate(0); /* Prune back from the lowest level and generate the colormap */ for (level = CqNLevels - 1; level >= 2; level--) { thresh = thresholdFactor[level]; cqca = cqcaa[level]; cqcasub = cqcaa[level + 1]; ncells = 1 << (3 * level); for (i = 0; i < ncells; i++) { /* i is octindex at level */ cqc = cqca[i]; for (j = 0; j < 8; j++) { /* check all subnodes */ isub = 8 * i + j; /* isub is octindex at level+1 */ cqcsub = cqcasub[isub]; if (cqcsub->bleaf == 1) { /* already a leaf? */ cqc->nleaves++; /* count the subcube leaves */ continue; } if (cqcsub->n >= thresh * ppc) { /* make it a true leaf? */ cqcsub->bleaf = 1; if (cmap->n < 256) { cqcsub->index = cmap->n; /* assign the color index */ getRGBFromOctcube(isub, level + 1, &rv, &gv, &bv); pixcmapAddColor(cmap, rv, gv, bv); #if 1 /* save values */ cqcsub->rc = rv; cqcsub->gc = gv; cqcsub->bc = bv; #endif } else { /* This doesn't seem to happen. Do something. */ L_ERROR("assigning pixels to wrong color\n", __func__); pixcmapGetNearestIndex(cmap, 128, 128, 128, &cindex); cqcsub->index = cindex; /* assign to the nearest */ pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); cqcsub->rc = rval; cqcsub->gc = gval; cqcsub->bc = bval; } cqc->nleaves++; npix -= cqcsub->n; ncolor--; if (ncolor > 0) ppc = npix / ncolor; else if (ncolor + reservedcolors > 0) ppc = npix / (ncolor + reservedcolors); else ppc = 1000000; /* make it big */ numaAddNumber(nat, level + 1); #if DEBUG_OCTCUBE_CMAP lept_stderr("Exceeds threshold: colors used = %d, colors remaining = %d\n", cmap->n, ncolor + reservedcolors); lept_stderr(" cell with %d pixels, npix = %d, ppc = %d\n", cqcsub->n, npix, ppc); lept_stderr(" index = %d, level = %d, subindex = %d\n", i, level, j); lept_stderr(" rv = %d, gv = %d, bv = %d\n", rv, gv, bv); #endif /* DEBUG_OCTCUBE_CMAP */ } } if (cqc->nleaves > 0 || level == 2) { /* make the cube a leaf now */ cqc->bleaf = 1; if (cqc->nleaves < 8) { /* residual CTE cube: acquire the * remaining pixels */ for (j = 0; j < 8; j++) { /* check all subnodes */ isub = 8 * i + j; cqcsub = cqcasub[isub]; if (cqcsub->bleaf == 0) /* absorb */ cqc->n += cqcsub->n; } if (cmap->n < 256) { cqc->index = cmap->n; /* assign the color index */ getRGBFromOctcube(i, level, &rv, &gv, &bv); pixcmapAddColor(cmap, rv, gv, bv); #if 1 /* save values */ cqc->rc = rv; cqc->gc = gv; cqc->bc = bv; #endif } else { L_WARNING("possibly assigned pixels to wrong color\n", __func__); /* This is very bad. It will only cause trouble * with dithering, and we try to avoid it with * ExtraReservedColors. */ pixcmapGetNearestIndex(cmap, rv, gv, bv, &cindex); cqc->index = cindex; /* assign to the nearest */ pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); cqc->rc = rval; cqc->gc = gval; cqc->bc = bval; } npix -= cqc->n; ncolor--; if (ncolor > 0) ppc = npix / ncolor; else if (ncolor + reservedcolors > 0) ppc = npix / (ncolor + reservedcolors); else ppc = 1000000; /* make it big */ numaAddNumber(nar, level); #if DEBUG_OCTCUBE_CMAP lept_stderr("By remainder: colors used = %d, colors remaining = %d\n", cmap->n, ncolor + reservedcolors); lept_stderr(" cell with %d pixels, npix = %d, ppc = %d\n", cqc->n, npix, ppc); lept_stderr(" index = %d, level = %d\n", i, level); lept_stderr(" rv = %d, gv = %d, bv = %d\n", rv, gv, bv); #endif /* DEBUG_OCTCUBE_CMAP */ } } else { /* absorb all the subpixels but don't make it a leaf */ for (j = 0; j < 8; j++) { /* absorb from all subnodes */ isub = 8 * i + j; cqcsub = cqcasub[isub]; cqc->n += cqcsub->n; } } } } #if PRINT_OCTCUBE_STATS { l_int32 tc[] = {0, 0, 0, 0, 0, 0, 0}; l_int32 rc[] = {0, 0, 0, 0, 0, 0, 0}; l_int32 nt, nr, ival; nt = numaGetCount(nat); nr = numaGetCount(nar); for (i = 0; i < nt; i++) { numaGetIValue(nat, i, &ival); tc[ival]++; } for (i = 0; i < nr; i++) { numaGetIValue(nar, i, &ival); rc[ival]++; } lept_stderr(" Threshold cells formed: %d\n", nt); for (i = 1; i < CqNLevels + 1; i++) lept_stderr(" level %d: %d\n", i, tc[i]); lept_stderr("\n Residual cells formed: %d\n", nr); for (i = 0; i < CqNLevels ; i++) lept_stderr(" level %d: %d\n", i, rc[i]); } #endif /* PRINT_OCTCUBE_STATS */ numaDestroy(&nat); numaDestroy(&nar); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return cqcaa; } /*! * \brief pixOctreeQuantizePixels() * * \param[in] pixs 32 bpp * \param[in] cqcaa octree in array format * \param[in] ditherflag 1 for dithering, 0 for no dithering * \return pixd or NULL on error * *
 * Notes:
 *      (1) This routine doesn't need to use the CTEs (colormap
 *          table entries) because the color indices are embedded
 *          in the octree.  Thus, the calling program must make
 *          and attach the colormap to pixd after it is returned.
 *      (2) Dithering is performed in integers, effectively rounding
 *          to 1/8 sample increment.  The data in the integer buffers is
 *          64 times the sample values.  The 'dif' is 8 times the
 *          sample values, and this spread, multiplied by 8, to the
 *          integer buffers.  Because the dif is truncated to an
 *          integer, the dither is accurate to 1/8 of a sample increment,
 *          or 1/2048 of the color range.
 * 
*/ static PIX * pixOctreeQuantizePixels(PIX *pixs, CQCELL ***cqcaa, l_int32 ditherflag) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 rval, gval, bval; l_int32 octindex, index; l_int32 val1, val2, val3, dif; l_int32 w, h, wpls, wpld, i, j, success; l_int32 rc, gc, bc; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *rtab, *gtab, *btab; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (!cqcaa) return (PIX *)ERROR_PTR("cqcaa not defined", __func__, NULL); /* Make output 8 bpp palette image */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Make the canonical index tables */ rtab = gtab = btab = NULL; makeRGBToIndexTables(CqNLevels, &rtab, >ab, &btab); /* Traverse tree from root, looking for lowest cube * that is a leaf, and set dest pix to its * colortable index value. The results are far * better when dithering to get a more accurate * average color. */ if (ditherflag == 0) { /* no dithering */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); } } } else { /* Dither */ success = TRUE; bufu8r = bufu8g = bufu8b = NULL; buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) { L_ERROR("buffer not made\n", __func__); success = FALSE; goto buffer_cleanup; } /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); dif = buf1r[j] / 8 - 8 * rc; if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, w - 1, index); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); } buffer_cleanup: LEPT_FREE(bufu8r); LEPT_FREE(bufu8g); LEPT_FREE(bufu8b); LEPT_FREE(buf1r); LEPT_FREE(buf1g); LEPT_FREE(buf1b); LEPT_FREE(buf2r); LEPT_FREE(buf2g); LEPT_FREE(buf2b); if (!success) pixDestroy(&pixd); } LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief octreeFindColorCell() * * \param[in] octindex * \param[in] cqcaa * \param[out] pindex index of CTE; returned to set pixel value * \param[out] prval of CTE * \param[out] pgval of CTE * \param[out] pbval of CTE * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) As this is in inner loop, we don't check input pointers!
 *      (2) This traverses from the root (well, actually from level 2,
 *          because the level 2 cubes are the largest CTE cubes),
 *          and finds the index number of the cell and the color values,
 *          which can be used either directly or in a (Floyd-Steinberg)
 *          error-diffusion dithering algorithm.
 * 
*/ static l_int32 octreeFindColorCell(l_int32 octindex, CQCELL ***cqcaa, l_int32 *pindex, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 level; l_int32 baseindex, subindex; CQCELL *cqc, *cqcsub; /* Use rgb values stored in the cubes; a little faster */ for (level = 2; level < CqNLevels; level++) { getOctcubeIndices(octindex, level, &baseindex, &subindex); cqc = cqcaa[level][baseindex]; cqcsub = cqcaa[level + 1][subindex]; if (cqcsub->bleaf == 0) { /* use cell at level above */ *pindex = cqc->index; *prval = cqc->rc; *pgval = cqc->gc; *pbval = cqc->bc; break; } else if (level == CqNLevels - 1) { /* reached the bottom */ *pindex = cqcsub->index; *prval = cqcsub->rc; *pgval = cqcsub->gc; *pbval = cqcsub->bc; break; } } #if 0 /* Generate rgb values for each cube on the fly; slower */ for (level = 2; level < CqNLevels; level++) { l_int32 rv, gv, bv; getOctcubeIndices(octindex, level, &baseindex, &subindex); cqc = cqcaa[level][baseindex]; cqcsub = cqcaa[level + 1][subindex]; if (cqcsub->bleaf == 0) { /* use cell at level above */ getRGBFromOctcube(baseindex, level, &rv, &gv, &bv); *pindex = cqc->index; *prval = rv; *pgval = gv; *pbval = bv; break; } else if (level == CqNLevels - 1) { /* reached the bottom */ getRGBFromOctcube(subindex, level + 1, &rv, &gv, &bv); *pindex = cqcsub->index; *prval = rv; *pgval = gv; *pbval = bv; break; } } #endif return 0; } /*------------------------------------------------------------------* * Helper cqcell functions * *------------------------------------------------------------------*/ /*! * \brief cqcellTreeCreate() * * \return cqcell array tree */ static CQCELL *** cqcellTreeCreate(void) { l_int32 level, ncells, i; CQCELL ***cqcaa; CQCELL **cqca; /* one array for each octree level */ /* Make array of accumulation cell arrays from levels 1 to 5 */ cqcaa = (CQCELL ***)LEPT_CALLOC(CqNLevels + 1, sizeof(CQCELL **)); for (level = 0; level <= CqNLevels; level++) { ncells = 1 << (3 * level); cqca = (CQCELL **)LEPT_CALLOC(ncells, sizeof(CQCELL *)); cqcaa[level] = cqca; for (i = 0; i < ncells; i++) { cqca[i] = (CQCELL *)LEPT_CALLOC(1, sizeof(CQCELL)); } } return cqcaa; } /*! * \brief cqcellTreeDestroy() * * \param[in,out] pcqcaa will be set to null before returning */ static void cqcellTreeDestroy(CQCELL ****pcqcaa) { l_int32 level, ncells, i; CQCELL ***cqcaa; CQCELL **cqca; if (pcqcaa == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((cqcaa = *pcqcaa) == NULL) return; for (level = 0; level <= CqNLevels; level++) { cqca = cqcaa[level]; ncells = 1 << (3 * level); for (i = 0; i < ncells; i++) LEPT_FREE(cqca[i]); LEPT_FREE(cqca); } LEPT_FREE(cqcaa); *pcqcaa = NULL; return; } /*------------------------------------------------------------------* * Helper index functions * *------------------------------------------------------------------*/ /*! * \brief makeRGBToIndexTables() * * \param[in] cqlevels can be 1, 2, 3, 4, 5 or 6 * \param[out] prtab, pgtab, pbtab tables * \return 0 if OK; 1 on error * *
 *  Set up tables.  e.g., for cqlevels = 5, we need an integer 0 < i < 2^15:
 *      rtab = 0  i7  0   0  i6  0   0  i5  0   0   i4  0   0   i3  0   0
 *      gtab = 0  0   i7  0   0  i6  0   0  i5  0   0   i4  0   0   i3  0
 *      btab = 0  0   0   i7  0  0   i6  0  0   i5  0   0   i4  0   0   i3
 *
 *  The tables are then used to map from rbg --> index as follows:
 *      index = 0  r7  g7  b7  r6  g6  b6  r5  g5  b5  r4  g4  b4  r3  g3  b3
 *
 *    e.g., for cqlevels = 4, we map to
 *      index = 0  0   0   0   r7  g7  b7  r6  g6  b6  r5  g5  b5  r4  g4  b4
 *
 *  This may look a bit strange.  The notation 'r7' means the MSBit of
 *  the r value which has 8 bits, going down from r7 to r0.
 *  Keep in mind that r7 is actually the r component bit for level 1 of
 *  the octtree.  Level 1 is composed of 8 octcubes, represented by
 *  the bits r7 g7 b7, which divide the entire color space into
 *  8 cubes.  At level 2, each of these 8 octcubes is further divided into
 *  8 cubes, each labeled by the second most significant bits r6 g6 b6
 *  of the rgb color.
 * 
*/ l_ok makeRGBToIndexTables(l_int32 cqlevels, l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab) { l_int32 i; l_uint32 *rtab, *gtab, *btab; if (cqlevels < 1 || cqlevels > 6) return ERROR_INT("cqlevels must be in {1,...6}", __func__, 1); if (!prtab || !pgtab || !pbtab) return ERROR_INT("not all &tabs defined", __func__, 1); rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); if (!rtab || !gtab || !btab) return ERROR_INT("calloc fail for tab", __func__, 1); *prtab = rtab; *pgtab = gtab; *pbtab = btab; switch (cqlevels) { case 1: for (i = 0; i < 256; i++) { rtab[i] = (i >> 5) & 0x0004; gtab[i] = (i >> 6) & 0x0002; btab[i] = (i >> 7); } break; case 2: for (i = 0; i < 256; i++) { rtab[i] = ((i >> 2) & 0x0020) | ((i >> 4) & 0x0004); gtab[i] = ((i >> 3) & 0x0010) | ((i >> 5) & 0x0002); btab[i] = ((i >> 4) & 0x0008) | ((i >> 6) & 0x0001); } break; case 3: for (i = 0; i < 256; i++) { rtab[i] = ((i << 1) & 0x0100) | ((i >> 1) & 0x0020) | ((i >> 3) & 0x0004); gtab[i] = (i & 0x0080) | ((i >> 2) & 0x0010) | ((i >> 4) & 0x0002); btab[i] = ((i >> 1) & 0x0040) | ((i >> 3) & 0x0008) | ((i >> 5) & 0x0001); } break; case 4: for (i = 0; i < 256; i++) { rtab[i] = ((i << 4) & 0x0800) | ((i << 2) & 0x0100) | (i & 0x0020) | ((i >> 2) & 0x0004); gtab[i] = ((i << 3) & 0x0400) | ((i << 1) & 0x0080) | ((i >> 1) & 0x0010) | ((i >> 3) & 0x0002); btab[i] = ((i << 2) & 0x0200) | (i & 0x0040) | ((i >> 2) & 0x0008) | ((i >> 4) & 0x0001); } break; case 5: for (i = 0; i < 256; i++) { rtab[i] = ((i << 7) & 0x4000) | ((i << 5) & 0x0800) | ((i << 3) & 0x0100) | ((i << 1) & 0x0020) | ((i >> 1) & 0x0004); gtab[i] = ((i << 6) & 0x2000) | ((i << 4) & 0x0400) | ((i << 2) & 0x0080) | (i & 0x0010) | ((i >> 2) & 0x0002); btab[i] = ((i << 5) & 0x1000) | ((i << 3) & 0x0200) | ((i << 1) & 0x0040) | ((i >> 1) & 0x0008) | ((i >> 3) & 0x0001); } break; case 6: for (i = 0; i < 256; i++) { rtab[i] = ((i << 10) & 0x20000) | ((i << 8) & 0x4000) | ((i << 6) & 0x0800) | ((i << 4) & 0x0100) | ((i << 2) & 0x0020) | (i & 0x0004); gtab[i] = ((i << 9) & 0x10000) | ((i << 7) & 0x2000) | ((i << 5) & 0x0400) | ((i << 3) & 0x0080) | ((i << 1) & 0x0010) | ((i >> 1) & 0x0002); btab[i] = ((i << 8) & 0x8000) | ((i << 6) & 0x1000) | ((i << 4) & 0x0200) | ((i << 2) & 0x0040) | (i & 0x0008) | ((i >> 2) & 0x0001); } break; default: ERROR_INT("cqlevels not in [1...6]", __func__, 1); break; } return 0; } /*! * \brief getOctcubeIndexFromRGB() * * \param[in] rval, gval, bval * \param[in] rtab, gtab, btab generated with makeRGBToIndexTables() * \param[out] pindex found index * \return void * *
 * Notes:
 *      No error checking!
 * 
*/ void getOctcubeIndexFromRGB(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_uint32 *pindex) { *pindex = rtab[rval] | gtab[gval] | btab[bval]; return; } /*! * \brief getRGBFromOctcube() * * \param[in] cubeindex octcube index * \param[in] level at which index is expressed * \param[out] prval r val of this cube * \param[out] pgval g val of this cube * \param[out] pbval b val of this cube * \return void * *
 * Notes:
 *      (1) We can consider all octcube indices to represent a
 *          specific point in color space: namely, the location
 *          of the 'upper-left' corner of the cube, where indices
 *          increase down and to the right.  The upper left corner
 *          of the color space is then 00000....
 *      (2) The 'rgbindex' is a 24-bit representation of the location,
 *          in octcube notation, at the center of the octcube.
 *          To get to the center of an octcube, you choose the 111
 *          octcube at the next lower level.
 *      (3) For example, if the octcube index = 110101 (binary),
 *          which is a level 2 expression, then the rgbindex
 *          is the 24-bit representation of 110101111 (at level 3);
 *          namely, 000110101111000000000000.  The number is padded
 *          with 3 leading 0s (because the representation uses
 *          only 21 bits) and 12 trailing 0s (the default for
 *          levels 4-7, which are contained within each of the level3
 *          octcubes.  Then the rgb values for the center of the
 *          octcube are: rval = 11100000, gval = 10100000, bval = 01100000
 * 
*/ static void getRGBFromOctcube(l_int32 cubeindex, l_int32 level, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 rgbindex; /* Bring to format in 21 bits: (r7 g7 b7 r6 g6 b6 ...) */ /* This is valid for levels from 0 to 6 */ rgbindex = cubeindex << (3 * (7 - level)); /* upper corner of cube */ rgbindex |= (0x7 << (3 * (6 - level))); /* index to center of cube */ /* Extract separate pieces */ *prval = ((rgbindex >> 13) & 0x80) | ((rgbindex >> 11) & 0x40) | ((rgbindex >> 9) & 0x20) | ((rgbindex >> 7) & 0x10) | ((rgbindex >> 5) & 0x08) | ((rgbindex >> 3) & 0x04) | ((rgbindex >> 1) & 0x02); *pgval = ((rgbindex >> 12) & 0x80) | ((rgbindex >> 10) & 0x40) | ((rgbindex >> 8) & 0x20) | ((rgbindex >> 6) & 0x10) | ((rgbindex >> 4) & 0x08) | ((rgbindex >> 2) & 0x04) | (rgbindex & 0x02); *pbval = ((rgbindex >> 11) & 0x80) | ((rgbindex >> 9) & 0x40) | ((rgbindex >> 7) & 0x20) | ((rgbindex >> 5) & 0x10) | ((rgbindex >> 3) & 0x08) | ((rgbindex >> 1) & 0x04) | ((rgbindex << 1) & 0x02); return; } /*! * \brief getOctcubeIndices() * * \param[in] rgbindex * \param[in] level octree level 0, 1, 2, 3, 4, 5 * \param[out] pbindex base index index at the octree level * \param[out] psindex sub index index at the next lower level * \return 0 if OK, 1 on error * *
 * Notes:
 *  for CqNLevels = 6, the full RGB index is in the form:
 *     index = (0[13] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3 r2 g2 b2)
 *  for CqNLevels = 5, the full RGB index is in the form:
 *     index = (0[16] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
 *  for CqNLevels = 4, the full RGB index is in the form:
 *     index = (0[19] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
 *
 *  The base index is the index of the octcube at the level given,
 *  whereas the sub index is the index at the next level down.
 *
 *  For level 0: base index = 0
 *               sub index is the 3 bit number (r7 g7 b7)
 *  For level 1: base index = (r7 g7 b7)
 *               sub index = (r7 g7 b7 r6 g6 b6)
 *  For level 2: base index = (r7 g7 b7 r6 g6 b6)
 *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5)
 *  For level 3: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5)
 *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
 *  For level 4: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
 *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
 *  For level 5: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
 *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3
 *                            r2 g2 b2)
 * 
*/ static l_int32 getOctcubeIndices(l_int32 rgbindex, l_int32 level, l_int32 *pbindex, l_int32 *psindex) { if (level < 0 || level > CqNLevels - 1) return ERROR_INT("level must be in e.g., [0 ... 5]", __func__, 1); if (!pbindex) return ERROR_INT("&bindex not defined", __func__, 1); if (!psindex) return ERROR_INT("&sindex not defined", __func__, 1); *pbindex = rgbindex >> (3 * (CqNLevels - level)); *psindex = rgbindex >> (3 * (CqNLevels - 1 - level)); return 0; } /*! * \brief octcubeGetCount() * * \param[in] level valid values are in [1,...6]; there are 2^level * cubes along each side of the rgb cube * \param[out] psize 2^(3 * level) cubes in the entire rgb cube * \return 0 if OK, 1 on error. Caller must check! * *
 *     level:   1        2        3        4        5        6
 *     size:    8       64       512     4098     32784   262272
 * 
*/ static l_int32 octcubeGetCount(l_int32 level, l_int32 *psize) { if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (level < 1 || level > 6) return ERROR_INT("invalid level", __func__, 1); *psize = 1 << (3 * level); return 0; } /*---------------------------------------------------------------------------* * Adaptive octree quantization based on population at a fixed level * *---------------------------------------------------------------------------*/ /*! * \brief pixOctreeQuantByPopulation() * * \param[in] pixs 32 bpp rgb * \param[in] level significant bits for each of RGB; valid for {3,4}. * Use 0 for default (level 4; recommended * \param[in] ditherflag 1 to dither, 0 otherwise * \return pixd quantized to octcubes or NULL on error * *
 * Notes:
 *      (1) This color quantization method works very well without
 *          dithering, using octcubes at two different levels:
 *            (a) the input %level, which is either 3 or 4
 *            (b) level 2 (64 octcubes to cover the entire color space)
 *      (2) For best results, using %level = 4 is recommended.
 *          Why do we provide an option for using level 3?  Because
 *          there are 512 octcubes at level 3, and for many images
 *          not more than 256 are filled.  As a result, on some images
 *          a very accurate quantized representation is possible using
 *          %level = 3.
 *      (3) This first breaks up the color space into octcubes at the
 *          input %level, and computes, for each octcube, the average
 *          value of the pixels that are in it.
 *      (4) Then there are two possible situations:
 *            (a) If there are not more than 256 populated octcubes,
 *                it returns a cmapped pix with those values assigned.
 *            (b) Otherwise, it selects 192 octcubes containing the largest
 *                number of pixels and quantizes pixels within those octcubes
 *                to their average.  Then, to handle the residual pixels
 *                that are not in those 192 octcubes, it generates a
 *                level 2 octree consisting of 64 octcubes, and within
 *                each octcube it quantizes the residual pixels to their
 *                average within each of those level 2 octcubes.
 *      (5) Unpopulated level 2 octcubes are represented in the colormap
 *          by their centers.  This, of course, has no effect unless
 *          dithering is used for the output image.
 *      (6) The depth of pixd is the minimum required to support the
 *          number of colors found at %level; namely, 2, 4 or 8.
 *      (7) This function works particularly well on images such as maps,
 *          where there are a relatively small number of well-populated
 *          colors, but due to antialiasing and compression artifacts
 *          there may be a large number of different colors.  This will
 *          pull out and represent accurately the highly populated colors,
 *          while still making a reasonable approximation for the others.
 *      (8) The highest level of octcubes allowed is 4.  Use of higher
 *          levels typically results in having a small fraction of
 *          pixels in the most populated 192 octcubes.  As a result,
 *          most of the pixels are represented at level 2, which is
 *          not sufficiently accurate.
 *      (9) Dithering shows artifacts on some images.  If you plan to
 *          dither, pixOctreeColorQuant() and pixFixedOctcubeQuant256()
 *          usually give better results.
 * 
*/ PIX * pixOctreeQuantByPopulation(PIX *pixs, l_int32 level, l_int32 ditherflag) { l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; l_int32 rval, gval, bval; l_int32 *rarray, *garray, *barray, *narray, *iarray; l_uint32 octindex, octindex2; l_uint32 *rtab, *gtab, *btab, *rtab2, *gtab2, *btab2; l_uint32 *lines, *lined, *datas, *datad; L_OCTCUBE_POP *opop; L_HEAP *lh; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (level == 0) level = 4; if (level < 3 || level > 4) return (PIX *)ERROR_PTR("level not in {3,4}", __func__, NULL); /* Do not dither if image is very small */ pixGetDimensions(pixs, &w, &h, NULL); if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", __func__); ditherflag = 0; } if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (PIX *)ERROR_PTR("size not returned", __func__, NULL); rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); pixd = NULL; narray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); if (!narray || !rarray || !garray || !barray) goto array_cleanup; /* Place the pixels in octcube leaves. */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; narray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; } } /* Find the number of different colors */ for (i = 0, ncolors = 0; i < size; i++) { if (narray[i] > 0) ncolors++; } if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else depth = 8; pixd = pixCreate(w, h, depth); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); cmap = pixcmapCreate(depth); pixSetColormap(pixd, cmap); /* Average the colors in each octcube leaf. */ for (i = 0; i < size; i++) { if (narray[i] > 0) { rarray[i] /= narray[i]; garray[i] /= narray[i]; barray[i] /= narray[i]; } } /* If ncolors <= 256, finish immediately. Do not dither. * Re-use narray to hold the colormap index + 1 */ if (ncolors <= 256) { for (i = 0, index = 0; i < size; i++) { if (narray[i] > 0) { pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); narray[i] = index + 1; /* to avoid storing 0 */ index++; } } /* Set the cmap indices for each pixel */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; switch (depth) { case 8: SET_DATA_BYTE(lined, j, narray[octindex] - 1); break; case 4: SET_DATA_QBIT(lined, j, narray[octindex] - 1); break; case 2: SET_DATA_DIBIT(lined, j, narray[octindex] - 1); break; default: L_WARNING("shouldn't get here\n", __func__); } } } goto array_cleanup; } /* More complicated. Sort by decreasing population */ lh = lheapCreate(500, L_SORT_DECREASING); for (i = 0; i < size; i++) { if (narray[i] > 0) { opop = (L_OCTCUBE_POP *)LEPT_CALLOC(1, sizeof(L_OCTCUBE_POP)); opop->npix = (l_float32)narray[i]; opop->index = i; opop->rval = rarray[i]; opop->gval = garray[i]; opop->bval = barray[i]; lheapAdd(lh, opop); } } /* Take the top 192. These will form the first 192 colors * in the cmap. iarray[i] holds the index into the cmap. */ iarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); for (i = 0; i < 192; i++) { opop = (L_OCTCUBE_POP*)lheapRemove(lh); if (!opop) break; pixcmapAddColor(cmap, opop->rval, opop->gval, opop->bval); iarray[opop->index] = i + 1; /* +1 to avoid storing 0 */ #if DEBUG_POP lept_stderr("i = %d, n = %6.0f, (r,g,b) = (%d %d %d)\n", i, opop->npix, opop->rval, opop->gval, opop->bval); #endif /* DEBUG_POP */ LEPT_FREE(opop); } /* Make the octindex tables for level 2, and reuse rarray, etc. */ rtab2 = gtab2 = btab2 = NULL; makeRGBToIndexTables(2, &rtab2, >ab2, &btab2); for (i = 0; i < 64; i++) { narray[i] = 0; rarray[i] = 0; garray[i] = 0; barray[i] = 0; } /* Take the rest of the occupied octcubes, assigning the pixels * to these new colormap indices. iarray[] is addressed * by %level octcube indices, and it now holds the * colormap indices for all pixels in pixs. */ for (i = 192; i < size; i++) { opop = (L_OCTCUBE_POP*)lheapRemove(lh); if (!opop) break; rval = opop->rval; gval = opop->gval; bval = opop->bval; octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; narray[octindex2] += (l_int32)opop->npix; rarray[octindex2] += (l_int32)opop->npix * rval; garray[octindex2] += (l_int32)opop->npix * gval; barray[octindex2] += (l_int32)opop->npix * bval; iarray[opop->index] = 192 + octindex2 + 1; /* +1 to avoid storing 0 */ LEPT_FREE(opop); } lheapDestroy(&lh, TRUE); /* To span the full color space, which is necessary for dithering, * set each iarray element whose value is still 0 at the input * level octcube leaves (because there were no pixels in those * octcubes) to the colormap index corresponding to its level 2 * octcube. */ if (ditherflag) { for (i = 0; i < size; i++) { if (iarray[i] == 0) { getRGBFromOctcube(i, level, &rval, &gval, &bval); octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; iarray[i] = 192 + octindex2 + 1; } } } LEPT_FREE(rtab2); LEPT_FREE(gtab2); LEPT_FREE(btab2); /* Average the colors from the residuals in each level 2 octcube, * and add these 64 values to the colormap. */ for (i = 0; i < 64; i++) { if (narray[i] > 0) { rarray[i] /= narray[i]; garray[i] /= narray[i]; barray[i] /= narray[i]; } else { /* no pixels in this octcube; use center value */ getRGBFromOctcube(i, 2, &rarray[i], &garray[i], &barray[i]); } pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); } /* Set the cmap indices for each pixel. Subtract 1 from * the value in iarray[] because we added 1 earlier. */ if (ditherflag == 0) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; SET_DATA_BYTE(lined, j, iarray[octindex] - 1); } } } else { /* dither */ pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, iarray, POP_DIF_CAP); } #if DEBUG_POP for (i = 0; i < size / 16; i++) { l_int32 j; for (j = 0; j < 16; j++) lept_stderr("%d ", iarray[16 * i + j]); lept_stderr("\n"); } #endif /* DEBUG_POP */ LEPT_FREE(iarray); array_cleanup: LEPT_FREE(narray); LEPT_FREE(rarray); LEPT_FREE(garray); LEPT_FREE(barray); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixDitherOctindexWithCmap() * * \param[in] pixs 32 bpp rgb * \param[in] pixd 8 bpp cmapped * \param[in] rtab, gtab, btab tables from rval to octindex * \param[in] indexmap array mapping octindex to cmap index * \param[in] difcap max allowed dither transfer; * use 0 for infinite cap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This performs dithering to generate the colormap indices
 *          in pixd.  The colormap has been calculated, along with
 *          four input LUTs that together give the inverse colormapping
 *          from RGB to colormap index.
 *      (2) For pixOctreeQuantByPopulation(), %indexmap maps from the
 *          standard octindex to colormap index (after subtracting 1).
 *          The basic pixel-level function, without dithering, is:
 *             extractRGBValues(lines[j], &rval, &gval, &bval);
 *             octindex = rtab[rval] | gtab[gval] | btab[bval];
 *             SET_DATA_BYTE(lined, j, indexmap[octindex] - 1);
 *      (3) This can be used in any situation where the general
 *          prescription for finding the colormap index from the rgb
 *          value is precisely this:
 *             cmapindex = indexmap[rtab[rval] | gtab[gval] | btab[bval]] - 1
 *          For example, in pixFixedOctcubeQuant256(), we don't use
 *          standard octcube indexing, the rtab (etc) LUTs map directly
 *          to the colormap index, and %indexmap just compensates for
 *          the 1-off indexing assumed to be in that table.
 * 
*/ static l_int32 pixDitherOctindexWithCmap(PIX *pixs, PIX *pixd, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_int32 *indexmap, l_int32 difcap) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 i, j, w, h, wpld, octindex, cmapindex, success; l_int32 rval, gval, bval, rc, gc, bc; l_int32 dif, val1, val2, val3; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *datad, *lined; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", __func__, 1); if (!pixd || pixGetDepth(pixd) != 8) return ERROR_INT("pixd undefined or not 8 bpp", __func__, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("pixd not cmapped", __func__, 1); if (!rtab || !gtab || !btab || !indexmap) return ERROR_INT("not all 4 tables defined", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetWidth(pixd) != w || pixGetHeight(pixd) != h) return ERROR_INT("pixs and pixd not same size", __func__, 1); success = TRUE; bufu8r = bufu8g = bufu8b = NULL; buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) { L_ERROR("buffer not made\n", __func__); success = FALSE; goto buffer_cleanup; } /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, j, cmapindex); pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); dif = buf1r[j] / 8 - 8 * rc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, w - 1, cmapindex); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, j, cmapindex); } buffer_cleanup: LEPT_FREE(bufu8r); LEPT_FREE(bufu8g); LEPT_FREE(bufu8b); LEPT_FREE(buf1r); LEPT_FREE(buf1g); LEPT_FREE(buf1b); LEPT_FREE(buf2r); LEPT_FREE(buf2g); LEPT_FREE(buf2b); return (success) ? 0 : 1; } /*---------------------------------------------------------------------------* * Adaptive octree quantization to 4 and 8 bpp with max colors * *---------------------------------------------------------------------------*/ /*! * \brief pixOctreeQuantNumColors() * * \param[in] pixs 32 bpp rgb * \param[in] maxcolors 8 to 256; the actual number of colors used * may be less than this * \param[in] subsample factor for computing color distribution; * use 0 for default * \return pixd 4 or 8 bpp, colormapped, or NULL on error * *
 *  pixOctreeColorQuant is very flexible in terms of the relative
 *  depth of different cubes of the octree.   By contrast, this function,
 *  pixOctreeQuantNumColors is also adaptive, but it supports octcube
 *  leaves at only two depths: a smaller depth that guarantees
 *  full coverage of the color space and octcubes at one level
 *  deeper for more accurate colors.  Its main virutes are simplicity
 *  and speed, which are both derived from the natural indexing of
 *  the octcubes from the RGB values.
 *
 *  Before describing pixOctreeQuantNumColors, consider an even simpler
 *  approach for 4 bpp with either 8 or 16 colors.  With 8 colors,
 *  you simply go to level 1 octcubes and use the average color
 *  found in each cube.  For 16 colors, you find which of the three
 *  colors has the largest variance at the second level, and use two
 *  indices for that color.  The result is quite poor, because 1 some
 *  of the cubes are nearly empty and 2 you don't get much color
 *  differentiation for the extra 8 colors.  Trust me, this method may
 *  be simple, but it isn't worth anything.
 *
 *  In pixOctreeQuantNumColors, we generate colormapped images at
 *  either 4 bpp or 8 bpp.  For 4 bpp, we have a minimum of 8 colors
 *  for the level 1 octcubes, plus up to 8 additional colors that
 *  are determined from the level 2 popularity.  If the number of colors
 *  is between 8 and 16, the output is a 4 bpp image.  If the number of
 *  colors is greater than 16, the output is a 8 bpp image.
 *
 *  We use a priority queue, implemented with a heap, to select the
 *  requisite number of most populated octcubes at the deepest level
 *  level 2 for 64 or fewer colors; level 3 for more than 64 colors.
 *  These are combined with one color for each octcube one level above,
 *  which is used to span the color space of octcubes that were not
 *  included at the deeper level.
 *
 *  If the deepest level is 2, we combine the popular level 2 octcubes
 *  out of a total of 64 with the 8 level 1 octcubes.  If the deepest
 *  level is 3, we combine the popular level 3 octcubes out of a
 *  total 512 with the 64 level 2 octcubes that span the color space.
 *  In the latter case, we require a minimum of 64 colors for the level 2
 *  octcubes, plus up to 192 additional colors determined from level 3
 *  popularity.
 *
 *  The parameter 'maxlevel' is the deepest octcube level that is used.
 *  The implementation also uses two LUTs, which are employed in
 *  two successive traversals of the dest image.  The first maps
 *  from the src octindex at 'maxlevel' to the color table index,
 *  which is the value that is stored in the 4 or 8 bpp dest pixel.
 *  The second LUT maps from that colormap value in the dest to a
 *  new colormap value for a minimum sized colormap, stored back in
 *  the dest.  It is used to remove any color map entries that
 *  correspond to color space regions that have no pixels in the
 *  source image.  These regions can be either from the higher level
 *  e.g., level 1 for 4 bpp, or from octcubes at 'maxlevel' that
 *  are unoccupied.  This remapping results in the minimum number
 *  of colors used according to the constraints induced by the
 *  input 'maxcolors'.  We also compute the average R, G and B color
 *  values in each region of the color space represented by a
 *  colormap entry, and store them in the colormap.
 *
 *  The maximum number of colors is input, which determines the
 *  following properties of the dest image and octcube regions used:
 *
 *     Number of colors      dest image depth      maxlevel
 *     ----------------      ----------------      --------
 *       8 to 16                  4 bpp               2
 *       17 to 64                 8 bpp               2
 *       65 to 256                8 bpp               3
 *
 *  It may turn out that the number of extra colors, beyond the
 *  minimum 8 and 64 for maxlevel 2 and 3, respectively, is larger
 *  than the actual number of occupied cubes at these levels
 *  In that case, all the pixels are contained in this
 *  subset of cubes at maxlevel, and no colormap colors are needed
 *  to represent the remainder pixels one level above.  Thus, for
 *  example, in use one often finds that the pixels in an image
 *  occupy less than 192 octcubes at level 3, so they can be represented
 *  by a colormap for octcubes at level 3 only.
 * 
*/ PIX * pixOctreeQuantNumColors(PIX *pixs, l_int32 maxcolors, l_int32 subsample) { l_int32 w, h, minside, bpp, wpls, wpld, i, j, actualcolors; l_int32 rval, gval, bval, nbase, nextra, maxlevel, ncubes, val; l_int32 *lut1, *lut2; l_uint32 index; l_uint32 *lines, *lined, *datas, *datad, *pspixel; l_uint32 *rtab, *gtab, *btab; OQCELL *oqc; OQCELL **oqca; L_HEAP *lh; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (maxcolors < 8) { L_WARNING("max colors < 8; setting to 8\n", __func__); maxcolors = 8; } if (maxcolors > 256) { L_WARNING("max colors > 256; setting to 256\n", __func__); maxcolors = 256; } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); minside = L_MIN(w, h); if (subsample <= 0) { subsample = L_MAX(1, minside / 200); } if (maxcolors <= 16) { bpp = 4; pixd = pixCreate(w, h, bpp); maxlevel = 2; ncubes = 64; /* 2^6 */ nbase = 8; nextra = maxcolors - nbase; } else if (maxcolors <= 64) { bpp = 8; pixd = pixCreate(w, h, bpp); maxlevel = 2; ncubes = 64; /* 2^6 */ nbase = 8; nextra = maxcolors - nbase; } else { /* maxcolors <= 256 */ bpp = 8; pixd = pixCreate(w, h, bpp); maxlevel = 3; ncubes = 512; /* 2^9 */ nbase = 64; nextra = maxcolors - nbase; } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /*----------------------------------------------------------* * If we're using the minimum number of colors, it is * * much simpler. We just use 'nbase' octcubes. * * For this case, we don't eliminate any extra colors. * *----------------------------------------------------------*/ if (nextra == 0) { /* prepare the OctcubeQuantCell array */ if ((oqca = (OQCELL **)LEPT_CALLOC(nbase, sizeof(OQCELL *))) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("oqca not made", __func__, NULL); } for (i = 0; i < nbase; i++) { oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } rtab = gtab = btab = NULL; makeRGBToIndexTables(maxlevel - 1, &rtab, >ab, &btab); /* Go through the entire image, gathering statistics and * assigning pixels to their quantized value */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); /* lept_stderr("rval = %d, gval = %d, bval = %d," " index = %d\n", rval, gval, bval, index); */ if (bpp == 4) SET_DATA_QBIT(lined, j, index); else /* bpp == 8 */ SET_DATA_BYTE(lined, j, index); oqca[index]->n += 1.0; oqca[index]->rcum += rval; oqca[index]->gcum += gval; oqca[index]->bcum += bval; } } /* Compute average color values in each octcube, and * generate colormap */ cmap = pixcmapCreate(bpp); pixSetColormap(pixd, cmap); for (i = 0; i < nbase; i++) { oqc = oqca[i]; if (oqc->n != 0) { oqc->rval = (l_int32)(oqc->rcum / oqc->n); oqc->gval = (l_int32)(oqc->gcum / oqc->n); oqc->bval = (l_int32)(oqc->bcum / oqc->n); } else { getRGBFromOctcube(i, maxlevel - 1, &oqc->rval, &oqc->gval, &oqc->bval); } pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); } for (i = 0; i < nbase; i++) LEPT_FREE(oqca[i]); LEPT_FREE(oqca); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*------------------------------------------------------------* * General case: we will use colors in octcubes at maxlevel. * * We also remove any colors that are not populated from * * the colormap. * *------------------------------------------------------------*/ /* Prepare the OctcubeQuantCell array */ oqca = (OQCELL **)LEPT_CALLOC(ncubes, sizeof(OQCELL *)); for (i = 0; i < ncubes; i++) { oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } /* Make the tables to map color to the octindex, * of which there are 'ncubes' at 'maxlevel' */ rtab = gtab = btab = NULL; makeRGBToIndexTables(maxlevel, &rtab, >ab, &btab); /* Estimate the color distribution; we want to find the * most popular nextra colors at 'maxlevel' */ for (i = 0; i < h; i += subsample) { lines = datas + i * wpls; for (j = 0; j < w; j += subsample) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); oqca[index]->n += 1.0; oqca[index]->octindex = index; oqca[index]->rcum += rval; oqca[index]->gcum += gval; oqca[index]->bcum += bval; } } /* Transfer the OQCELL from the array, and order in a heap */ lh = lheapCreate(512, L_SORT_DECREASING); for (i = 0; i < ncubes; i++) lheapAdd(lh, oqca[i]); LEPT_FREE(oqca); /* don't need this array */ /* Prepare a new OctcubeQuantCell array, with maxcolors cells */ oqca = (OQCELL **)LEPT_CALLOC(maxcolors, sizeof(OQCELL *)); for (i = 0; i < nbase; i++) { /* make nbase cells */ oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } /* Remove the nextra most populated ones, and put them in the array */ for (i = 0; i < nextra; i++) { oqc = (OQCELL *)lheapRemove(lh); oqc->n = 0.0; /* reinit */ oqc->rcum = 0; oqc->gcum = 0; oqc->bcum = 0; oqca[nbase + i] = oqc; /* store it in the array */ } /* Destroy the heap and its remaining contents */ lheapDestroy(&lh, TRUE); /* Generate a lookup table from octindex at maxlevel * to color table index */ lut1 = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); for (i = 0; i < nextra; i++) lut1[oqca[nbase + i]->octindex] = nbase + i; for (index = 0; index < ncubes; index++) { if (lut1[index] == 0) /* not one of the extras; need to assign */ lut1[index] = index >> 3; /* remove the least significant bits */ /* lept_stderr("lut1[%d] = %d\n", index, lut1[index]); */ } /* Go through the entire image, gathering statistics and * assigning pixels to their quantized value */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); /* lept_stderr("rval = %d, gval = %d, bval = %d, index = %d\n", rval, gval, bval, index); */ val = lut1[index]; switch (bpp) { case 4: SET_DATA_QBIT(lined, j, val); break; case 8: SET_DATA_BYTE(lined, j, val); break; default: LEPT_FREE(oqca); LEPT_FREE(lut1); return (PIX *)ERROR_PTR("bpp not 4 or 8!", __func__, NULL); } oqca[val]->n += 1.0; oqca[val]->rcum += rval; oqca[val]->gcum += gval; oqca[val]->bcum += bval; } } /* Compute averages, set up a colormap, and make a second * lut that converts from the color values currently in * the image to a minimal set */ lut2 = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); cmap = pixcmapCreate(bpp); pixSetColormap(pixd, cmap); for (i = 0, index = 0; i < maxcolors; i++) { oqc = oqca[i]; lut2[i] = index; if (oqc->n == 0) /* no occupancy; don't bump up index */ continue; oqc->rval = (l_int32)(oqc->rcum / oqc->n); oqc->gval = (l_int32)(oqc->gcum / oqc->n); oqc->bval = (l_int32)(oqc->bcum / oqc->n); pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); index++; } /* pixcmapWriteStream(stderr, cmap); */ actualcolors = pixcmapGetCount(cmap); /* lept_stderr("Number of different colors = %d\n", actualcolors); */ /* Last time through the image; use the lookup table to * remap the pixel value to the minimal colormap */ if (actualcolors < maxcolors) { for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { switch (bpp) { case 4: val = GET_DATA_QBIT(lined, j); SET_DATA_QBIT(lined, j, lut2[val]); break; case 8: val = GET_DATA_BYTE(lined, j); SET_DATA_BYTE(lined, j, lut2[val]); break; } } } } if (oqca) { for (i = 0; i < maxcolors; i++) LEPT_FREE(oqca[i]); } LEPT_FREE(oqca); LEPT_FREE(lut1); LEPT_FREE(lut2); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*-------------------------------------------------------------------------* * Mixed color/gray quantization with specified number of colors * *-------------------------------------------------------------------------*/ /*! * \brief pixOctcubeQuantMixedWithGray() * * \param[in] pixs 32 bpp rgb * \param[in] depth of output pix * \param[in] graylevels graylevels (must be > 1) * \param[in] delta threshold for deciding if a pix is color or gray * \return pixd quantized to octcube and gray levels or NULL on error * *
 * Notes:
 *      (1) Generates a colormapped image, where the colormap table values
 *          have two components: octcube values representing pixels with
 *          color content, and grayscale values for the rest.
 *      (2) The threshold (delta) is the maximum allowable difference of
 *          the max abs value of | r - g |, | r - b | and | g - b |.
 *      (3) The octcube values are the averages of all pixels that are
 *          found in the octcube, and that are far enough from gray to
 *          be considered color.  This can roughly be visualized as all
 *          the points in the rgb color cube that are not within a "cylinder"
 *          of diameter approximately 'delta' along the main diagonal.
 *      (4) We want to guarantee full coverage of the rgb color space; thus,
 *          if the output depth is 4, the octlevel is 1 (2 x 2 x 2 = 8 cubes)
 *          and if the output depth is 8, the octlevel is 2 (4 x 4 x 4
 *          = 64 cubes).
 *      (5) Consequently, we have the following constraint on the number
 *          of allowed gray levels: for 4 bpp, 8; for 8 bpp, 192.
 * 
*/ PIX * pixOctcubeQuantMixedWithGray(PIX *pixs, l_int32 depth, l_int32 graylevels, l_int32 delta) { l_int32 w, h, wpls, wpld, i, j, size, octlevels; l_int32 rval, gval, bval, del, val, midval; l_int32 *carray, *rarray, *garray, *barray; l_int32 *tabval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (graylevels < 2) return (PIX *)ERROR_PTR("invalid graylevels", __func__, NULL); if (depth == 4) { octlevels = 1; size = 8; /* 2 ** 3 */ if (graylevels > 8) return (PIX *)ERROR_PTR("max 8 gray levels", __func__, NULL); } else if (depth == 8) { octlevels = 2; size = 64; /* 2 ** 6 */ if (graylevels > 192) return (PIX *)ERROR_PTR("max 192 gray levels", __func__, NULL); } else { return (PIX *)ERROR_PTR("output depth not 4 or 8 bpp", __func__, NULL); } pixd = NULL; /* Make octcube index tables */ rtab = gtab = btab = NULL; makeRGBToIndexTables(octlevels, &rtab, >ab, &btab); /* Make octcube arrays for storing points in each cube */ carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); /* Make lookup table, using computed thresholds */ tabval = makeGrayQuantIndexTable(graylevels); if (!rtab || !gtab || !btab || !carray || !rarray || !garray || !barray || !tabval) { L_ERROR("calloc fail for an array\n", __func__); goto array_cleanup; } /* Make colormapped output pixd */ pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) { L_ERROR("pixd not made\n", __func__); goto array_cleanup; } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); cmap = pixcmapCreate(depth); for (j = 0; j < size; j++) /* reserve octcube colors */ pixcmapAddColor(cmap, 1, 1, 1); /* a color that won't be used */ for (j = 0; j < graylevels; j++) { /* set grayscale colors */ val = (255 * j) / (graylevels - 1); pixcmapAddColor(cmap, val, val, val); } pixSetColormap(pixd, cmap); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Go through src image: assign dest pixels to colormap values * and compute average colors in each occupied octcube */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); if (rval > gval) { if (gval > bval) { /* r > g > b */ del = rval - bval; midval = gval; } else if (rval > bval) { /* r > b > g */ del = rval - gval; midval = bval; } else { /* b > r > g */ del = bval - gval; midval = rval; } } else { /* gval >= rval */ if (rval > bval) { /* g > r > b */ del = gval - bval; midval = rval; } else if (gval > bval) { /* g > b > r */ del = gval - rval; midval = bval; } else { /* b > g > r */ del = bval - rval; midval = gval; } } if (del > delta) { /* assign to color */ octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; if (depth == 4) SET_DATA_QBIT(lined, j, octindex); else /* depth == 8 */ SET_DATA_BYTE(lined, j, octindex); } else { /* assign to grayscale */ val = size + tabval[midval]; if (depth == 4) SET_DATA_QBIT(lined, j, val); else /* depth == 8 */ SET_DATA_BYTE(lined, j, val); } } } /* Average the colors in each bin and reset the colormap */ for (i = 0; i < size; i++) { if (carray[i] > 0) { rarray[i] /= carray[i]; garray[i] /= carray[i]; barray[i] /= carray[i]; pixcmapResetColor(cmap, i, rarray[i], garray[i], barray[i]); } } array_cleanup: LEPT_FREE(carray); LEPT_FREE(rarray); LEPT_FREE(garray); LEPT_FREE(barray); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); LEPT_FREE(tabval); return pixd; } /*-------------------------------------------------------------------------* * Fixed partition octcube quantization with 256 cells * *-------------------------------------------------------------------------*/ /*! * \brief pixFixedOctcubeQuant256() * * \param[in] pixs 32 bpp; 24-bit color * \param[in] ditherflag 1 for dithering; 0 for no dithering * \return pixd 8 bit with colormap, or NULL on error * *
 * Notes:
 *  This simple 1-pass color quantization works by breaking the
 *  color space into 256 pieces, with 3 bits quantized for each of
 *  red and green, and 2 bits quantized for blue.  We shortchange
 *  blue because the eye is least sensitive to blue.  This
 *  division of the color space is into two levels of octrees,
 *  followed by a further division by 4 not 8, where both
 *  blue octrees have been combined in the third level.
 *
 *  The color map is generated from the 256 color centers by
 *  taking the representative color to be the center of the
 *  cell volume.  This gives a maximum error in the red and
 *  green values of 16 levels, and a maximum error in the
 *  blue sample of 32 levels.
 *
 *  Each pixel in the 24-bit color image is placed in its containing
 *  cell, given by the relevant MSbits of the red, green and blue
 *  samples.  An error-diffusion dithering is performed on each
 *  color sample to give the appearance of good average local color.
 *  Dithering is required; without it, the contouring and visible
 *  color errors are very bad.
 *
 *  I originally implemented this algorithm in two passes,
 *  where the first pass was used to compute the weighted average
 *  of each sample in each pre-allocated region of color space.
 *  The idea was to use these centroids in the dithering algorithm
 *  of the second pass, to reduce the average error that was
 *  being dithered.  However, with dithering, there is
 *  virtually no difference, so there is no reason to make the
 *  first pass.  Consequently, this 1-pass version just assigns
 *  the pixels to the centers of the pre-allocated cells.
 *  We use dithering to spread the difference between the sample
 *  value and the location of the center of the cell.  For speed
 *  and simplicity, we use integer dithering and propagate only
 *  to the right, down, and diagonally down-right, with ratios
 *  3/8, 3/8 and 1/4, respectively.  The results should be nearly
 *  as good, and a bit faster, with propagation only to the right
 *  and down.
 *
 *  The algorithm is very fast, because there is no search,
 *  only fast generation of the cell index for each pixel.
 *  We use a simple mapping from the three 8 bit rgb samples
 *  to the 8 bit cell index; namely, r7 r6 r5 g7 g6 g5 b7 b6.
 *  This is not in an octcube format, but it doesn't matter.
 *  There are no storage requirements.  We could keep a
 *  running average of the center of each sample in each
 *  cluster, rather than using the center of the cell, but
 *  this is just extra work, esp. with dithering.
 *
 *  This method gives surprisingly good results with dithering.
 *  However, without dithering, the loss of color accuracy is
 *  evident in regions that are very light or that have subtle
 *  blending of colors.
 * 
*/ PIX * pixFixedOctcubeQuant256(PIX *pixs, l_int32 ditherflag) { l_uint8 index; l_int32 rval, gval, bval; l_int32 w, h, wpls, wpld, i, j, cindex; l_uint32 *rtab, *gtab, *btab; l_int32 *itab; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); /* Do not dither if image is very small */ pixGetDimensions(pixs, &w, &h, NULL); if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", __func__); ditherflag = 0; } /* Find the centers of the 256 cells, each of which represents * the 3 MSBits of the red and green components, and the * 2 MSBits of the blue component. This gives a mapping * from a "cube index" to the rgb values. Save all 256 * rgb values of these centers in a colormap. * For example, to get the red color of the cell center, * you take the 3 MSBits of to the index and add the * offset to the center of the cell, which is 0x10. */ cmap = pixcmapCreate(8); for (cindex = 0; cindex < 256; cindex++) { rval = (cindex & 0xe0) | 0x10; gval = ((cindex << 3) & 0xe0) | 0x10; bval = ((cindex << 6) & 0xc0) | 0x20; pixcmapAddColor(cmap, rval, gval, bval); } /* Make output 8 bpp palette image */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) { pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Set dest pix values to colortable indices */ if (ditherflag == 0) { /* no dithering */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); index = (rval & 0xe0) | ((gval >> 3) & 0x1c) | (bval >> 6); SET_DATA_BYTE(lined, j, index); } } } else { /* ditherflag == 1 */ /* Set up conversion tables from rgb directly to the colormap * index. However, the dithering function expects these tables * to generate an octcube index (+1), and the table itab[] to * convert to the colormap index. So we make a trivial * itab[], that simply compensates for the -1 in * pixDitherOctindexWithCmap(). No cap is required on * the propagated difference. */ rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); itab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (!rtab || !gtab || !btab || !itab) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("calloc fail for table", __func__, NULL); } for (i = 0; i < 256; i++) { rtab[i] = i & 0xe0; gtab[i] = (i >> 3) & 0x1c; btab[i] = i >> 6; itab[i] = i + 1; } pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, itab, FIXED_DIF_CAP); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); LEPT_FREE(itab); } return pixd; } /*---------------------------------------------------------------------------* * Nearly exact quantization for images with few colors * *---------------------------------------------------------------------------*/ /*! * \brief pixFewColorsOctcubeQuant1() * * \param[in] pixs 32 bpp rgb * \param[in] level significant bits for each of RGB; valid in [1...6] * \return pixd quantized to octcube or NULL on error * *
 * Notes:
 *      (1) Generates a colormapped image, where the colormap table values
 *          are the averages of all pixels that are found in the octcube.
 *      (2) This fails if there are more than 256 colors (i.e., more
 *          than 256 occupied octcubes).
 *      (3) Often level 3 (512 octcubes) will succeed because not more
 *          than half of them are occupied with 1 or more pixels.
 *      (4) The depth of the result, which is either 2, 4 or 8 bpp,
 *          is the minimum required to hold the number of colors that
 *          are found.
 *      (5) This can be useful for quantizing orthographically generated
 *          images such as color maps, where there may be more than 256 colors
 *          because of aliasing or jpeg artifacts on text or lines, but
 *          there are a relatively small number of solid colors.  Then,
 *          use with level = 3 can often generate a compact and accurate
 *          representation of the original RGB image.  For this purpose,
 *          it is better than pixFewColorsOctcubeQuant2(), because it
 *          uses the average value of pixels in the octcube rather
 *          than the first found pixel.  It is also simpler to use,
 *          because it generates the histogram internally.
 * 
*/ PIX * pixFewColorsOctcubeQuant1(PIX *pixs, l_int32 level) { l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; l_int32 rval, gval, bval; l_int32 *carray, *rarray, *garray, *barray; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad, *pspixel; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("invalid level", __func__, NULL); pixd = NULL; if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (PIX *)ERROR_PTR("size not returned", __func__, NULL); rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); if (!carray || !rarray || !garray || !barray) { L_ERROR("calloc fail for an array\n", __func__); goto array_cleanup; } /* Place the pixels in octcube leaves. */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; } } /* Find the number of different colors */ for (i = 0, ncolors = 0; i < size; i++) { if (carray[i] > 0) ncolors++; } if (ncolors > 256) { L_WARNING("%d colors found; more than 256\n", __func__, ncolors); goto array_cleanup; } if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else depth = 8; /* Average the colors in each octcube leaf and add to colormap table; * then use carray to hold the colormap index + 1 */ cmap = pixcmapCreate(depth); for (i = 0, index = 0; i < size; i++) { if (carray[i] > 0) { rarray[i] /= carray[i]; garray[i] /= carray[i]; barray[i] /= carray[i]; pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); carray[i] = index + 1; /* to avoid storing 0 */ index++; } } pixd = pixCreate(w, h, depth); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; switch (depth) { case 2: SET_DATA_DIBIT(lined, j, carray[octindex] - 1); break; case 4: SET_DATA_QBIT(lined, j, carray[octindex] - 1); break; case 8: SET_DATA_BYTE(lined, j, carray[octindex] - 1); break; default: L_WARNING("shouldn't get here\n", __func__); } } } array_cleanup: LEPT_FREE(carray); LEPT_FREE(rarray); LEPT_FREE(garray); LEPT_FREE(barray); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixFewColorsOctcubeQuant2() * * \param[in] pixs 32 bpp rgb * \param[in] level of octcube indexing, for histogram: 3, 4, 5, 6 * \param[in] na histogram of pixel occupation in octree leaves * at given level * \param[in] ncolors number of occupied octree leaves at given level * \param[out] pnerrors [optional] num of pixels not exactly * represented in the colormap * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error * *
 * Notes:
 *      (1) Generates a colormapped image, where the colormap table values
 *          are the averages of all pixels that are found in the octcube.
 *      (2) This fails if there are more than 256 colors (i.e., more
 *          than 256 occupied octcubes).
 *      (3) Often level 3 (512 octcubes) will succeed because not more
 *          than half of them are occupied with 1 or more pixels.
 *      (4) For an image with not more than 256 colors, it is unlikely
 *          that two pixels of different color will fall in the same
 *          octcube at level = 4.   However it is possible, and this
 *          function optionally returns %nerrors, the number of pixels
 *          where, because more than one color is in the same octcube,
 *          the pixel color is not exactly reproduced in the colormap.
 *          The colormap for an occupied leaf of the octree contains
 *          the color of the first pixel encountered in that octcube.
 *      (5) This differs from pixFewColorsOctcubeQuant1(), which also
 *          requires not more than 256 occupied leaves, but represents
 *          the color of each leaf by an average over the pixels in
 *          that leaf.  This also requires precomputing the histogram
 *          of occupied octree leaves, which is generated using
 *          pixOctcubeHistogram().
 *      (6) This is used in pixConvertRGBToColormap() for images that
 *          are determined, by their histogram, to have relatively few
 *          colors.  This typically happens with orthographically
 *          produced images (as oppopsed to natural images), where
 *          it is expected that most of the pixels within a leaf
 *          octcube have exactly the same color, and quantization to
 *          that color is lossless.
 * 
*/ PIX * pixFewColorsOctcubeQuant2(PIX *pixs, l_int32 level, NUMA *na, l_int32 ncolors, l_int32 *pnerrors) { l_int32 w, h, wpls, wpld, i, j, nerrors; l_int32 ncubes, depth, cindex, oval; l_int32 rval, gval, bval; l_int32 *octarray = NULL; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad, *ppixel; l_uint32 *colorarray = NULL; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (level < 3 || level > 6) return (PIX *)ERROR_PTR("level not in {4, 5, 6}", __func__, NULL); if (ncolors > 256) return (PIX *)ERROR_PTR("ncolors > 256", __func__, NULL); if (pnerrors) *pnerrors = UNDEF; pixd = NULL; /* Represent the image with a set of leaf octcubes * at 'level', one for each color. */ rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); /* The octarray will give a ptr from the octcube to the colorarray */ if ((ncubes = numaGetCount(na)) == 0) { L_ERROR("no slots in pixel occupation histogram", __func__); goto cleanup_arrays; } octarray = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); /* The colorarray will hold the colors of the first pixel * that lands in the leaf octcube. After filling, it is * used to generate the colormap. */ colorarray = (l_uint32 *)LEPT_CALLOC(ncolors + 1, sizeof(l_uint32)); if (!octarray || !colorarray) { L_ERROR("octarray or colorarray not made\n", __func__); goto cleanup_arrays; } /* Determine the output depth from the number of colors */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else /* ncolors <= 256 */ depth = 8; if ((pixd = pixCreate(w, h, depth)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup_arrays; } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* For each pixel, get the octree index for its leaf octcube. * Check if a pixel has already been found in this octcube. * ~ If not yet found, save that color in the colorarray * and save the cindex in the octarray. * ~ If already found, compare the pixel color with the * color in the colorarray, and note if it differs. * Then set the dest pixel value to the cindex - 1, which * will be the cmap index for this color. */ cindex = 1; /* start with 1 */ nerrors = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { ppixel = lines + j; extractRGBValues(*ppixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; oval = octarray[octindex]; if (oval == 0) { octarray[octindex] = cindex; colorarray[cindex] = *ppixel; setPixelLow(lined, j, depth, cindex - 1); cindex++; } else { /* already have seen this color; is it unique? */ setPixelLow(lined, j, depth, oval - 1); if (colorarray[oval] != *ppixel) nerrors++; } } } if (pnerrors) *pnerrors = nerrors; #if DEBUG_FEW_COLORS lept_stderr("ncubes = %d, ncolors = %d\n", ncubes, ncolors); for (i = 0; i < ncolors; i++) lept_stderr("color[%d] = %x\n", i, colorarray[i + 1]); #endif /* DEBUG_FEW_COLORS */ /* Make the colormap. */ cmap = pixcmapCreate(depth); for (i = 0; i < ncolors; i++) { ppixel = colorarray + i + 1; extractRGBValues(*ppixel, &rval, &gval, &bval); pixcmapAddColor(cmap, rval, gval, bval); } pixSetColormap(pixd, cmap); cleanup_arrays: LEPT_FREE(octarray); LEPT_FREE(colorarray); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixFewColorsOctcubeQuantMixed() * * \param[in] pixs 32 bpp rgb * \param[in] level significant octcube bits for each of RGB; * valid in [1...6]; use 0 for default * \param[in] darkthresh threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; uses 0 for default * \param[in] lightthresh threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default * \param[in] diffthresh thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default * \param[in] minfract min fraction of pixels for gray histo bin; * use 0.0 for default * \param[in] maxspan max size of gray histo bin; use 0 for default * \return pixd 8 bpp, quantized to octcube for pixels that are * not gray; gray pixels are quantized separately * over the full gray range, or NULL on error * *
 * Notes:
 *      (1) First runs pixFewColorsOctcubeQuant1().  If this succeeds,
 *          it separates the color from gray(ish) entries in the cmap,
 *          and re-quantizes the gray pixels.  The result has some pixels
 *          in color and others in gray.
 *      (2) This fails if there are more than 256 colors (i.e., more
 *          than 256 occupied octcubes in the color quantization).
 *      (3) Level 3 (512 octcubes) will usually succeed because not more
 *          than half of them are occupied with 1 or more pixels.
 *      (4) This uses the criterion from pixColorFraction() for deciding
 *          if a colormap entry is color; namely, if the color components
 *          are not too close to either black or white, and the maximum
 *          difference between component values equals or exceeds a threshold.
 *      (5) For quantizing the gray pixels, it uses a histogram-based
 *          method where input parameters determining the buckets are
 *          the minimum population fraction and the maximum allowed size.
 *      (6) Recommended input parameters are:
 *              %level:  3 or 4  (3 is default)
 *              %darkthresh:  20
 *              %lightthresh: 244
 *              %diffthresh: 20
 *              %minfract: 0.05
 *              %maxspan: 15
 *          These numbers are intended to be conservative (somewhat over-
 *          sensitive) in color detection,  It's usually better to pay
 *          extra with octcube quantization of a grayscale image than
 *          to use grayscale quantization on an image that has some
 *          actual color.  Input 0 on any of these to get the default.
 *      (7) This can be useful for quantizing orthographically generated
 *          images such as color maps, where there may be more than 256 colors
 *          because of aliasing or jpeg artifacts on text or lines, but
 *          there are a relatively small number of solid colors.  It usually
 *          gives results that are better than pixOctcubeQuantMixedWithGray(),
 *          both in size and appearance.  But it is a bit slower.
 * 
*/ PIX * pixFewColorsOctcubeQuantMixed(PIX *pixs, l_int32 level, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_float32 minfract, l_int32 maxspan) { l_int32 i, j, w, h, wplc, wplm, wpld, ncolors, index; l_int32 rval, gval, bval, val, minval, maxval; l_int32 *lut; l_uint32 *datac, *datam, *datad, *linec, *linem, *lined; PIX *pix1, *pixc, *pixm, *pixg, *pixd; PIXCMAP *cmap, *cmapd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (level <= 0) level = 3; if (level > 6) return (PIX *)ERROR_PTR("invalid level", __func__, NULL); if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 20; if (minfract <= 0.0) minfract = 0.05f; if (maxspan <= 2) maxspan = 15; /* Start with a simple fixed octcube quantizer. */ if ((pix1 = pixFewColorsOctcubeQuant1(pixs, level)) == NULL) return (PIX *)ERROR_PTR("too many colors", __func__, NULL); pixc = pixConvertTo8(pix1, 1); /* must be 8 bpp */ pixDestroy(&pix1); /* Identify and save color entries in the colormap. Set up a LUT * that returns -1 for any gray pixel. */ cmap = pixGetColormap(pixc); ncolors = pixcmapGetCount(cmap); cmapd = pixcmapCreate(8); lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) lut[i] = -1; for (i = 0, index = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); if (minval > lightthresh) /* near white */ continue; maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < darkthresh) /* near black */ continue; /* Use the max diff between components to test for color */ if (maxval - minval >= diffthresh) { pixcmapAddColor(cmapd, rval, gval, bval); lut[i] = index; index++; } } /* Generate dest pix with just the color pixels set to their * colormap indices. At the same time, make a 1 bpp mask * of the non-color pixels */ pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 8); pixSetColormap(pixd, cmapd); pixm = pixCreate(w, h, 1); datac = pixGetData(pixc); datam = pixGetData(pixm); datad = pixGetData(pixd); wplc = pixGetWpl(pixc); wplm = pixGetWpl(pixm); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linec = datac + i * wplc; linem = datam + i * wplm; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linec, j); if (lut[val] == -1) SET_DATA_BIT(linem, j); else SET_DATA_BYTE(lined, j, lut[val]); } } /* Fill in the gray values. Use a grayscale version of pixs * as input, along with the mask over the actual gray pixels. */ pixg = pixConvertTo8(pixs, 0); pixGrayQuantFromHisto(pixd, pixg, pixm, minfract, maxspan); LEPT_FREE(lut); pixDestroy(&pixc); pixDestroy(&pixm); pixDestroy(&pixg); return pixd; } /*---------------------------------------------------------------------------* * Fixed partition octcube quantization with RGB output * *---------------------------------------------------------------------------*/ /*! * \brief pixFixedOctcubeQuantGenRGB() * * \param[in] pixs 32 bpp rgb * \param[in] level significant bits for each of r,g,b * \return pixd rgb; quantized to octcube centers, or NULL on error * *
 * Notes:
 *      (1) Unlike the other color quantization functions, this one
 *          generates an rgb image.
 *      (2) The pixel values are quantized to the center of each octcube
 *          (at the specified level) containing the pixel.  They are
 *          not quantized to the average of the pixels in that octcube.
 * 
*/ PIX * pixFixedOctcubeQuantGenRGB(PIX *pixs, l_int32 level) { l_int32 w, h, wpls, wpld, i, j; l_int32 rval, gval, bval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("level not in {1,...6}", __func__, NULL); if (makeRGBToIndexTables(level, &rtab, >ab, &btab)) return (PIX *)ERROR_PTR("tables not made", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; getRGBFromOctcube(octindex, level, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, lined + j); } } LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*------------------------------------------------------------------* * Color quantize RGB image using existing colormap * *------------------------------------------------------------------*/ /*! * \brief pixQuantFromCmap() * * \param[in] pixs 8 bpp grayscale without cmap, or 32 bpp rgb * \param[in] cmap to quantize to; insert copy into dest pix * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp * \param[in] level of octcube used for finding nearest color in cmap * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error * *
 * Notes:
 *      (1) This is a top-level wrapper for quantizing either grayscale
 *          or rgb images to a specified colormap.
 *      (2) The actual output depth is constrained by %mindepth and
 *          by the number of colors in %cmap.
 *      (3) For grayscale, %level and %metric are ignored.
 *      (4) If the cmap has color and pixs is grayscale, the color is
 *          removed from the cmap before quantizing pixs.
 * 
*/ PIX * pixQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", __func__, NULL); d = pixGetDepth(pixs); if (d == 8) return pixGrayQuantFromCmap(pixs, cmap, mindepth); else if (d == 32) return pixOctcubeQuantFromCmap(pixs, cmap, mindepth, level, metric); else return (PIX *)ERROR_PTR("d not 8 or 32 bpp", __func__, NULL); } /*! * \brief pixOctcubeQuantFromCmap() * * \param[in] pixs 32 bpp rgb * \param[in] cmap to quantize to; insert copy into dest pix * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp * \param[in] level of octcube used for finding nearest color in cmap * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error * *
 * Notes:
 *      (1) In typical use, we are doing an operation, such as
 *          interpolative scaling, on a colormapped pix, where it is
 *          necessary to remove the colormap before the operation.
 *          We then want to re-quantize the RGB result using the same
 *          colormap.
 *      (2) The level is used to divide the color space into octcubes.
 *          Each input pixel is, in effect, placed at the center of an
 *          octcube at the given level, and it is mapped into the
 *          exact color (given in the colormap) that is the closest
 *          to that location.  We need to know that distance, for each color
 *          in the colormap.  The higher the level of the octtree, the smaller
 *          the octcubes in the color space, and hence the more accurately
 *          we can determine the closest color in the colormap; however,
 *          the size of the LUT, which is the total number of octcubes,
 *          increases by a factor of 8 for each increase of 1 level.
 *          The time required to acquire a level 4 mapping table, which has
 *          about 4K entries, is less than 1 msec, so that is the
 *          recommended minimum size to be used.  At that size, the
 *          octcubes have their centers 16 units apart in each (r,g,b)
 *          direction.  If two colors are in the same octcube, the one
 *          closest to the center will always be chosen.  The maximum
 *          error for any component occurs when the correct color is
 *          at a cube corner and there is an incorrect color just inside
 *          the cube next to the opposite corner, giving an error of
 *          14 units (out of 256) for each component.   Using a level 5
 *          mapping table reduces the maximum error to 6 units.
 *      (3) Typically you should use the Euclidean metric, because the
 *          resulting voronoi cells (which are generated using the actual
 *          colormap values as seeds) are convex for Euclidean distance
 *          but not for Manhattan distance.  In terms of the octcubes,
 *          convexity of the voronoi cells means that if the 8 corners
 *          of any cube (of which the octcubes are special cases)
 *          are all within a cell, then every point in the cube will
 *          lie within the cell.
 *      (4) The depth of the output pixd is equal to the maximum of
 *          (a) %mindepth and (b) the minimum (2, 4 or 8 bpp) necessary
 *          to hold the indices in the colormap.
 *      (5) We build a mapping table from octcube to colormap index so
 *          that this function can run in a time (otherwise) independent
 *          of the number of colors in the colormap.  This avoids a
 *          brute-force search for the closest colormap color to each
 *          pixel in the image.
 *      (6) This is similar to the function pixAssignToNearestColor()
 *          used for color segmentation.
 *      (7) Except for very small images or when using level > 4,
 *          it takes very little time to generate the tables,
 *          compared to the generation of the colormapped dest pix,
 *          so one would not typically use the low-level version.
 * 
*/ PIX * pixOctcubeQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric) { l_int32 *cmaptab; l_uint32 *rtab, *gtab, *btab; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", __func__, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", __func__, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("level not in {1...6}", __func__, NULL); if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) return (PIX *)ERROR_PTR("invalid metric", __func__, NULL); /* Set up the tables to map rgb to the nearest colormap index */ rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); cmaptab = pixcmapToOctcubeLUT(cmap, level, metric); pixd = pixOctcubeQuantFromCmapLUT(pixs, cmap, mindepth, cmaptab, rtab, gtab, btab); LEPT_FREE(cmaptab); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return pixd; } /*! * \brief pixOctcubeQuantFromCmapLUT() * * \param[in] pixs 32 bpp rgb * \param[in] cmap to quantize to; insert copy into dest pix * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp * \param[in] cmaptab table mapping from octindex to colormap index * \param[in] rtab, gtab, btab tables mapping from RGB to octindex * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error * *
 * Notes:
 *      (1) See the notes in the higher-level function
 *          pixOctcubeQuantFromCmap().  The octcube level for
 *          the generated octree is specified there, along with
 *          the distance metric for determining the closest
 *          color in the colormap to each octcube.
 *      (2) If the colormap, level and metric information have already
 *          been used to construct the set of mapping tables,
 *          this low-level function can be used directly (i.e.,
 *          independently of pixOctcubeQuantFromCmap()) to build
 *          a colormapped pix that uses the specified colormap.
 * 
*/ static PIX * pixOctcubeQuantFromCmapLUT(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 *cmaptab, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab) { l_int32 i, j, w, h, depth, wpls, wpld; l_int32 rval, gval, bval, index; l_uint32 octindex; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; PIXCMAP *cmapc; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", __func__, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", __func__, NULL); if (!rtab || !gtab || !btab || !cmaptab) return (PIX *)ERROR_PTR("tables not all defined", __func__, NULL); /* Init dest pix (with minimum bpp depending on cmap) */ pixcmapGetMinDepth(cmap, &depth); depth = L_MAX(depth, mindepth); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmapc = pixcmapCopy(cmap); pixSetColormap(pixd, cmapc); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Insert the colormap index of the color nearest to the input pixel */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); /* Map from rgb to octcube index */ getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &octindex); /* Map from octcube index to nearest colormap index */ index = cmaptab[octindex]; if (depth == 2) SET_DATA_DIBIT(lined, j, index); else if (depth == 4) SET_DATA_QBIT(lined, j, index); else /* depth == 8 */ SET_DATA_BYTE(lined, j, index); } } return pixd; } /*---------------------------------------------------------------------------* * Generation of octcube histogram * *---------------------------------------------------------------------------*/ /*! * \brief pixOctcubeHistogram() * * \param[in] pixs 32 bpp rgb * \param[in] level significant bits for each of RGB; valid in [1...6] * \param[out] pncolors [optional] number of occupied cubes * \return numa histogram of color pixels, or NULL on error * *
 * Notes:
 *      (1) Input NULL for &ncolors to prevent computation and return value.
 * 
*/ NUMA * pixOctcubeHistogram(PIX *pixs, l_int32 level, l_int32 *pncolors) { l_int32 size, i, j, w, h, wpl, ncolors, val; l_int32 rval, gval, bval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *data, *line; l_float32 *array; NUMA *na; if (pncolors) *pncolors = 0; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (NUMA *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (NUMA *)ERROR_PTR("size not returned", __func__, NULL); rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); if ((na = numaCreate(size)) == NULL) { L_ERROR("na not made\n", __func__); goto cleanup_arrays; } numaSetCount(na, size); array = numaGetFArray(na, L_NOCOPY); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; #if DEBUG_OCTINDEX if ((level == 1 && octindex > 7) || (level == 2 && octindex > 63) || (level == 3 && octindex > 511) || (level == 4 && octindex > 4097) || (level == 5 && octindex > 32783) || (level == 6 && octindex > 262271)) { lept_stderr("level = %d, octindex = %d, index error!\n", level, octindex); continue; } #endif /* DEBUG_OCTINDEX */ array[octindex] += 1.0; } } if (pncolors) { for (i = 0, ncolors = 0; i < size; i++) { numaGetIValue(na, i, &val); if (val > 0) ncolors++; } *pncolors = ncolors; } cleanup_arrays: LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return na; } /*------------------------------------------------------------------* * Get filled octcube table from colormap * *------------------------------------------------------------------*/ /*! * \brief pixcmapToOctcubeLUT() * * \param[in] cmap * \param[in] level significant bits for each of RGB; valid in [1...6] * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE * \return tab[2**3 * level] * *
 * Notes:
 *      (1) This function is used to quickly find the colormap color
 *          that is closest to any rgb color.  It is used to assign
 *          rgb colors to an existing colormap.  It can be very expensive
 *          to search through the entire colormap for the closest color
 *          to each pixel.  Instead, we first set up this table, which is
 *          populated by the colormap index nearest to each octcube
 *          color.  Then we go through the image; for each pixel,
 *          do two table lookups: first to generate the octcube index
 *          from rgb and second to use this table to read out the
 *          colormap index.
 *      (2) Do a slight modification for white and black.  For level = 4,
 *          each octcube size is 16.  The center of the whitest octcube
 *          is at (248, 248, 248), which is closer to 242 than 255.
 *          Consequently, any gray color between 242 and 254 will
 *          be selected, even if white (255, 255, 255) exists.  This is
 *          typically not optimal, because the original color was
 *          likely white.  Therefore, if white exists in the colormap,
 *          use it for any rgb color that falls into the most white octcube.
 *          Do the similar thing for black.
 *      (3) Here are the actual function calls for quantizing to a
 *          specified colormap:
 *            ~ first make the tables that map from rgb --> octcube index
 *                     makeRGBToIndexTables()
 *            ~ then for each pixel:
 *                * use the tables to get the octcube index
 *                     getOctcubeIndexFromRGB()
 *                * use this table to get the nearest color in the colormap
 *                     cmap_index = tab[index]
 *      (4) Distance can be either manhattan or euclidean.
 *      (5) In typical use, level = 4 gives reasonable results, and
 *          level = 5 is slightly better.  When this function is used
 *          for color segmentation, there are typically a small number
 *          of colors and the number of levels can be small (e.g., level = 3).
 * 
*/ l_int32 * pixcmapToOctcubeLUT(PIXCMAP *cmap, l_int32 level, l_int32 metric) { l_int32 i, k, size, ncolors, mindist, dist, mincolor, index; l_int32 rval, gval, bval; /* color at center of the octcube */ l_int32 *rmap, *gmap, *bmap, *tab; if (!cmap) return (l_int32 *)ERROR_PTR("cmap not defined", __func__, NULL); if (level < 1 || level > 6) return (l_int32 *)ERROR_PTR("level not in {1...6}", __func__, NULL); if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) return (l_int32 *)ERROR_PTR("invalid metric", __func__, NULL); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (l_int32 *)ERROR_PTR("size not returned", __func__, NULL); if ((tab = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("tab not allocated", __func__, NULL); ncolors = pixcmapGetCount(cmap); pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); /* Assign based on the closest octcube center to the cmap color */ for (i = 0; i < size; i++) { getRGBFromOctcube(i, level, &rval, &gval, &bval); mindist = 1000000; mincolor = 0; /* irrelevant init */ for (k = 0; k < ncolors; k++) { if (metric == L_MANHATTAN_DISTANCE) { dist = L_ABS(rval - rmap[k]) + L_ABS(gval - gmap[k]) + L_ABS(bval - bmap[k]); } else { /* L_EUCLIDEAN_DISTANCE */ dist = (rval - rmap[k]) * (rval - rmap[k]) + (gval - gmap[k]) * (gval - gmap[k]) + (bval - bmap[k]) * (bval - bmap[k]); } if (dist < mindist) { mindist = dist; mincolor = k; } } tab[i] = mincolor; } /* Reset black and white if available in the colormap. * The darkest octcube is at octindex 0. * The lightest octcube is at the max octindex. */ pixcmapGetNearestIndex(cmap, 0, 0, 0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 7 && gval < 7 && bval < 7) { tab[0] = index; } pixcmapGetNearestIndex(cmap, 255, 255, 255, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 248 && gval > 248 && bval > 248) { tab[(1 << (3 * level)) - 1] = index; } LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); return tab; } /*------------------------------------------------------------------* * Strip out unused elements in colormap * *------------------------------------------------------------------*/ /*! * \brief pixRemoveUnusedColors() * * \param[in] pixs colormapped * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) If the image doesn't have a colormap, returns without error.
 *      (3) Unusued colors are removed from the colormap, and the
 *          image pixels are re-numbered.
 * 
*/ l_ok pixRemoveUnusedColors(PIX *pixs) { l_int32 i, j, w, h, d, nc, wpls, val, newval, index, zerofound; l_int32 rval, gval, bval; l_uint32 *datas, *lines; l_int32 *histo, *map1, *map2; PIXCMAP *cmap, *cmapd; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return 0; d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("d not in {2, 4, 8}", __func__, 1); /* Find which indices are actually used */ nc = pixcmapGetCount(cmap); if ((histo = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32))) == NULL) return ERROR_INT("histo not made", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { switch (d) { case 2: val = GET_DATA_DIBIT(lines, j); break; case 4: val = GET_DATA_QBIT(lines, j); break; case 8: val = GET_DATA_BYTE(lines, j); break; default: LEPT_FREE(histo); return ERROR_INT("switch ran off end!", __func__, 1); } if (val >= nc) { L_WARNING("cmap index out of bounds!\n", __func__); continue; } histo[val]++; } } /* Check if there are any zeroes. If none, quit. */ zerofound = FALSE; for (i = 0; i < nc; i++) { if (histo[i] == 0) { zerofound = TRUE; break; } } if (!zerofound) { LEPT_FREE(histo); return 0; } /* Generate mapping tables between indices */ map1 = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32)); map2 = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32)); index = 0; for (i = 0; i < nc; i++) { if (histo[i] != 0) { map1[index] = i; /* get old index from new */ map2[i] = index; /* get new index from old */ index++; } } /* Generate new colormap and attach to pixs */ cmapd = pixcmapCreate(d); for (i = 0; i < index; i++) { pixcmapGetColor(cmap, map1[i], &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } pixSetColormap(pixs, cmapd); /* Map pixel (index) values to new cmap */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { switch (d) { case 2: val = GET_DATA_DIBIT(lines, j); newval = map2[val]; SET_DATA_DIBIT(lines, j, newval); break; case 4: val = GET_DATA_QBIT(lines, j); newval = map2[val]; SET_DATA_QBIT(lines, j, newval); break; case 8: val = GET_DATA_BYTE(lines, j); newval = map2[val]; SET_DATA_BYTE(lines, j, newval); break; default: LEPT_FREE(histo); LEPT_FREE(map1); LEPT_FREE(map2); return ERROR_INT("switch ran off end!", __func__, 1); } } } LEPT_FREE(histo); LEPT_FREE(map1); LEPT_FREE(map2); return 0; } /*------------------------------------------------------------------* * Find number of occupied octcubes at the specified level * *------------------------------------------------------------------*/ /*! * \brief pixNumberOccupiedOctcubes() * * \param[in] pix 32 bpp * \param[in] level of octcube * \param[in] mincount minimum num pixels in an octcube to be counted; * -1 to not use * \param[in] minfract minimum fract of pixels in an octcube to be * counted; -1 to not use * \param[out] pncolors number of occupied octcubes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Exactly one of (%mincount, %minfract) must be -1, so, e.g.,
 *          if %mincount == -1, then we use %minfract.
 *      (2) If all occupied octcubes are to count, set %mincount == 1.
 *          Setting %minfract == 0.0 is taken to mean the same thing.
 * 
*/ l_ok pixNumberOccupiedOctcubes(PIX *pix, l_int32 level, l_int32 mincount, l_float32 minfract, l_int32 *pncolors) { l_int32 i, j, w, h, d, wpl, ncolors, size, octindex; l_int32 rval, gval, bval; l_int32 *carray; l_uint32 *data, *line, *rtab, *gtab, *btab; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", __func__, 1); if (level < 1 || level > 6) return ERROR_INT("invalid level", __func__, 1); if ((mincount < 0 && minfract < 0) || (mincount >= 0.0 && minfract >= 0.0)) return ERROR_INT("invalid mincount/minfract", __func__, 1); if (mincount == 0 || minfract == 0.0) mincount = 1; else if (minfract > 0.0) mincount = L_MIN(1, (l_int32)(minfract * w * h)); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return ERROR_INT("size not returned", __func__, 1); rtab = gtab = btab = NULL; makeRGBToIndexTables(level, &rtab, >ab, &btab); if ((carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) { L_ERROR("carray not made\n", __func__); goto cleanup_arrays; } /* Mark the occupied octcube leaves */ data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; } } /* Count them */ for (i = 0, ncolors = 0; i < size; i++) { if (carray[i] >= mincount) ncolors++; } *pncolors = ncolors; cleanup_arrays: LEPT_FREE(carray); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return 0; } leptonica-1.86.0/src/colorquant2.c000066400000000000000000001757121506303110300167750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorquant2.c *
 *
 *  Modified median cut color quantization
 *
 *      High level
 *          PIX              *pixMedianCutQuant()
 *          PIX              *pixMedianCutQuantGeneral()
 *          PIX              *pixMedianCutQuantMixed()
 *          PIX              *pixFewColorsMedianCutQuantMixed()
 *
 *      Median cut indexed histogram
 *          l_int32          *pixMedianCutHisto()
 *
 *      Static helpers
 *          static PIXCMAP   *pixcmapGenerateFromHisto()
 *          static PIX       *pixQuantizeWithColormap()
 *          static void       getColorIndexMedianCut()
 *          static L_BOX3D   *pixGetColorRegion()
 *          static l_int32    medianCutApply()
 *          static PIXCMAP   *pixcmapGenerateFromMedianCuts()
 *          static l_int32    vboxGetAverageColor()
 *          static l_int32    vboxGetCount()
 *          static l_int32    vboxGetVolume()
 *          static L_BOX3D   *box3dCreate();
 *          static L_BOX3D   *box3dCopy();
 *
 *   Paul Heckbert published the median cut algorithm, "Color Image
 *   Quantization for Frame Buffer Display," in Proc. SIGGRAPH '82,
 *   Boston, July 1982, pp. 297-307.  See:
 *   http://delivery.acm.org/10.1145/810000/801294/p297-heckbert.pdf
 *
 *   Median cut starts with either the full color space or the occupied
 *   region of color space.  If you're not dithering, the occupied region
 *   can be used, but with dithering, pixels can end up in any place
 *   in the color space, so you must represent the entire color space in
 *   the final colormap.
 *
 *   Color components are quantized to typically 5 or 6 significant
 *   bits (for each of r, g and b).   Call a 3D region of color
 *   space a 'vbox'.  Any color in this quantized space is represented
 *   by an element of a linear histogram array, indexed by rgb value.
 *   The initial region is then divided into two regions that have roughly
 *   equal pixel occupancy (hence the name "median cut").  Subdivision
 *   continues until the requisite number of vboxes has been generated.
 *
 *   But the devil is in the details of the subdivision process.
 *   Here are some choices that you must make:
 *     (1) Along which axis to subdivide?
 *     (2) Which box to put the bin with the median pixel?
 *     (3) How to order the boxes for subdivision?
 *     (4) How to adequately handle boxes with very small numbers of pixels?
 *     (5) How to prevent a little-represented but highly visible color
 *         from being masked out by other colors in its vbox.
 *
 *   Taking these in order:
 *     (1) Heckbert suggests using either the largest vbox side, or the vbox
 *         side with the largest variance in pixel occupancy.  We choose
 *         to divide based on the largest vbox side.
 *     (2) Suppose you've chosen a side.  Then you have a histogram
 *         of pixel occupancy in 2D slices of the vbox.  One of those
 *         slices includes the median pixel.  Suppose there are L bins
 *         to the left (smaller index) and R bins to the right.  Then
 *         this slice (or bin) should be assigned to the box containing
 *         the smaller of L and R.  This both shortens the larger
 *         of the subdivided dimensions and helps a low-count color
 *         far from the subdivision boundary to better express itself.
 *     (2a) One can also ask if the boundary should be moved even
 *         farther into the longer side.  This is feasible if we have
 *         a method for doing extra subdivisions on the high count
 *         vboxes.  And we do (see (3)).
 *     (3) To make sure that the boxes are subdivided toward equal
 *         occupancy, use an occupancy-sorted priority queue, rather
 *         than a simple queue.
 *     (4) With a priority queue, boxes with small number of pixels
 *         won't be repeatedly subdivided.  This is good.
 *     (5) Use of a priority queue allows tricks such as in (2a) to let
 *         small occupancy clusters be better expressed.  In addition,
 *         rather than splitting near the median, small occupancy colors
 *         are best reproduced by cutting half-way into the longer side.
 *
 *   However, serious problems can arise with dithering if a priority
 *   queue is used based on population alone.  If the picture has
 *   large regions of nearly constant color, some vboxes can be very
 *   large and have a sizeable population (but not big enough to get to
 *   the head of the queue).  If one of these large, occupied vboxes
 *   is near in color to a nearly constant color region of the
 *   image, dithering can inject pixels from the large vbox into
 *   the nearly uniform region.  These pixels can be very far away
 *   in color, and the oscillations are highly visible.  To prevent
 *   this, we can take either or both of these actions:
 *
 *     (1) Subdivide a fraction (< 1.0) based on population, and
 *         do the rest of the subdivision based on the product of
 *         the vbox volume and its population.  By using the product,
 *         we avoid further subdivision of nearly empty vboxes, and
 *         directly target large vboxes with significant population.
 *
 *     (2) Threshold the excess color transferred in dithering to
 *         neighboring pixels.
 *
 *   Doing either of these will stop the most annoying oscillations
 *   in dithering.  Furthermore, by doing (1), we also improve the
 *   rendering of regions of nearly constant color, both with and
 *   without dithering.  It turns out that the image quality is
 *   not sensitive to the value of the parameter in (1); values
 *   between 0.3 and 0.9 give very good results.
 *
 *   Here's the lesson: subdivide the color space into vboxes such
 *   that (1) the most populated vboxes that can be further
 *   subdivided (i.e., that occupy more than one quantum volume
 *   in color space) all have approximately the same population,
 *   and (2) all large vboxes have no significant population.
 *   If these conditions are met, the quantization will be excellent.
 *
 *   Once the subdivision has been made, the colormap is generated,
 *   with one color for each vbox and using the average color in the vbox.
 *   At the same time, the histogram array is converted to an inverse
 *   colormap table, storing the colormap index in every cell in the
 *   vbox.  Finally, using both the colormap and the inverse colormap,
 *   a colormapped pix is quickly generated from the original rgb pix.
 *
 *   In the present implementation, subdivided regions of colorspace
 *   that are not occupied are retained, but not further subdivided.
 *   This is required for our inverse colormap lookup table for
 *   dithering, because dithered pixels may fall into these unoccupied
 *   regions.  For such empty regions, we use the center as the rgb
 *   colormap value.
 *
 *   This variation on median cut can be referred to as "Modified Median
 *   Cut" quantization, or MMCQ.  Overall, the undithered MMCQ gives
 *   comparable results to the two-pass Octcube Quantizer (OQ).
 *   Comparing the two methods on the test24.jpg painting, we see:
 *
 *     (1) For rendering spot color (the various reds and pinks in
 *         the image), MMCQ is not as good as OQ.
 *
 *     (2) For rendering majority color regions, MMCQ does a better
 *         job of avoiding posterization.  That is, it does better
 *         dividing the color space up in the most heavily populated regions.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Median cut 3-d volume element. Sort on first element, which * can be the number of pixels, the volume or a combination * of these. */ struct L_Box3d { l_float32 sortparam; /* parameter on which to sort the vbox */ l_int32 npix; /* number of pixels in the vbox */ l_int32 vol; /* quantized volume of vbox */ l_int32 r1; /* min r index in the vbox */ l_int32 r2; /* max r index in the vbox */ l_int32 g1; /* min g index in the vbox */ l_int32 g2; /* max g index in the vbox */ l_int32 b1; /* min b index in the vbox */ l_int32 b2; /* max b index in the vbox */ }; typedef struct L_Box3d L_BOX3D; /* Static median cut helper functions */ static PIXCMAP *pixcmapGenerateFromHisto(PIX *pixs, l_int32 depth, l_int32 *histo, l_int32 histosize, l_int32 sigbits); static PIX *pixQuantizeWithColormap(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, PIXCMAP *cmap, l_int32 *indexmap, l_int32 mapsize, l_int32 sigbits); static void getColorIndexMedianCut(l_uint32 pixel, l_int32 rshift, l_uint32 mask, l_int32 sigbits, l_int32 *pindex); static L_BOX3D *pixGetColorRegion(PIX *pixs, l_int32 sigbits, l_int32 subsample); static l_int32 medianCutApply(l_int32 *histo, l_int32 sigbits, L_BOX3D *vbox, L_BOX3D **pvbox1, L_BOX3D **pvbox2); static PIXCMAP *pixcmapGenerateFromMedianCuts(L_HEAP *lh, l_int32 *histo, l_int32 sigbits); static l_int32 vboxGetAverageColor(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); static l_int32 vboxGetCount(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits); static l_int32 vboxGetVolume(L_BOX3D *vbox); static L_BOX3D *box3dCreate(l_int32 r1, l_int32 r2, l_int32 g1, l_int32 g2, l_int32 b1, l_int32 b2); static L_BOX3D *box3dCopy(L_BOX3D *vbox); /* 5 significant bits for each component is generally satisfactory */ static const l_int32 DefaultSigBits = 5; static const l_int32 MaxItersAllowed = 5000; /* prevents infinite looping */ /* Specify fraction of vboxes made that are sorted on population alone. * The remaining vboxes are sorted on (population * vbox-volume). */ static const l_float32 FractByPopulation = 0.85f; /* To get the max value of 'dif' in the dithering color transfer, * divide DifCap by 8. */ static const l_int32 DifCap = 100; #ifndef NO_CONSOLE_IO #define DEBUG_MC_COLORS 0 #define DEBUG_SPLIT_AXES 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * High level * *------------------------------------------------------------------------*/ /*! * \brief pixMedianCutQuant() * * \param[in] pixs 32 bpp; rgb color * \param[in] ditherflag 1 for dither; 0 for no dither * \return pixd 8 bit with colormap, or NULL on error * *
 * Notes:
 *      (1) Simple interface.  See pixMedianCutQuantGeneral() for
 *          use of defaulted parameters.
 * 
*/ PIX * pixMedianCutQuant(PIX *pixs, l_int32 ditherflag) { return pixMedianCutQuantGeneral(pixs, ditherflag, 0, 256, DefaultSigBits, 1, 1); } /*! * \brief pixMedianCutQuantGeneral() * * \param[in] pixs 32 bpp; rgb color * \param[in] ditherflag 1 for dither; 0 for no dither * \param[in] outdepth output depth; valid: 0, 1, 2, 4, 8 * \param[in] maxcolors between 2 and 256 * \param[in] sigbits valid: 5 or 6; use 0 for default * \param[in] maxsub max subsampling, integer; use 0 for default; * 1 for no subsampling * \param[in] checkbw 1 to check if color content is very small, * 0 to assume there is sufficient color * \return pixd 8 bit with colormap, or NULL on error * *
 * Notes:
 *      (1) %maxcolors must be in the range [2 ... 256].
 *      (2) Use %outdepth = 0 to have the output depth computed as the
 *          minimum required to hold the actual colors found, given
 *          the %maxcolors constraint.
 *      (3) Use %outdepth = 1, 2, 4 or 8 to specify the output depth.
 *          In that case, %maxcolors must not exceed 2^(outdepth).
 *      (4) If there are fewer quantized colors in the image than %maxcolors,
 *          the colormap is simply generated from those colors.
 *      (5) %maxsub is the maximum allowed subsampling to be used in the
 *          computation of the color histogram and region of occupied
 *          color space.  The subsampling is chosen internally for
 *          efficiency, based on the image size, but this parameter
 *          limits it.  Use %maxsub = 0 for the internal default, which is the
 *          maximum allowed subsampling.  Use %maxsub = 1 to prevent
 *          subsampling.  In general use %maxsub >= 1 to specify the
 *          maximum subsampling to be allowed, where the actual subsampling
 *          will be the minimum of this value and the internally
 *          determined default value.
 *      (6) %sigbits can be 5 or 6.  There are 2^24 colors in the color space.
 *              sigbits     # of volume elems    # of colors in a volume elem
 *              --------------------------------------------------------------
 *                 5              2^15                  2^9 = 512
 *                 6              2^18                  2^6 = 64
 *          Volume in color space is measured in the number of volume elements.
 *      (7) If the image appears gray because either most of the pixels
 *          are gray or most of the pixels are essentially black or white,
 *          the image is trivially quantized with a grayscale colormap.  The
 *          reason is that median cut divides the color space into rectangular
 *          regions, and it does a very poor job if all the pixels are
 *          near the diagonal of the color space cube.
 * 
*/ PIX * pixMedianCutQuantGeneral(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, l_int32 maxcolors, l_int32 sigbits, l_int32 maxsub, l_int32 checkbw) { l_int32 i, subsample, histosize, smalln, ncolors, niters, popcolors; l_int32 w, h, minside, factor, index, rval, gval, bval; l_int32 *histo; l_float32 maxprod, prod, norm, pixfract, colorfract; L_BOX3D *vbox, *vbox1, *vbox2; L_HEAP *lh, *lhs; PIX *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (maxcolors < 2 || maxcolors > 256) return (PIX *)ERROR_PTR("maxcolors not in [2...256]", __func__, NULL); if (outdepth != 0 && outdepth != 1 && outdepth != 2 && outdepth != 4 && outdepth != 8) return (PIX *)ERROR_PTR("outdepth not in {0,1,2,4,8}", __func__, NULL); if (outdepth > 0 && (maxcolors > (1 << outdepth))) return (PIX *)ERROR_PTR("maxcolors > 2^(outdepth)", __func__, NULL); if (sigbits == 0) sigbits = DefaultSigBits; else if (sigbits < 5 || sigbits > 6) return (PIX *)ERROR_PTR("sigbits not 5 or 6", __func__, NULL); if (maxsub <= 0) maxsub = 10; /* default will prevail for 10^7 pixels or less */ /* Determine if the image has sufficient color content. * If pixfract << 1, most pixels are close to black or white. * If colorfract << 1, the pixels that are not near * black or white have very little color. * If with little color, quantize with a grayscale colormap. */ pixGetDimensions(pixs, &w, &h, NULL); if (checkbw) { minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.00025) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing in gray\n", __func__, pixfract, colorfract); return pixConvertTo8(pixs, 1); } } /* Compute the color space histogram. Default sampling * is about 10^5 sampled pixels. */ if (maxsub == 1) { subsample = 1; } else { subsample = (l_int32)(sqrt((l_float64)(w * h) / 100000.)); subsample = L_MAX(1, L_MIN(maxsub, subsample)); } histo = pixMedianCutHisto(pixs, sigbits, subsample); histosize = 1 << (3 * sigbits); /* See if the number of quantized colors is less than maxcolors */ ncolors = 0; smalln = TRUE; for (i = 0; i < histosize; i++) { if (histo[i]) ncolors++; if (ncolors > maxcolors) { smalln = FALSE; break; } } if (smalln) { /* finish up now */ if (outdepth == 0) { if (ncolors <= 2) outdepth = 1; else if (ncolors <= 4) outdepth = 2; else if (ncolors <= 16) outdepth = 4; else outdepth = 8; } cmap = pixcmapGenerateFromHisto(pixs, outdepth, histo, histosize, sigbits); pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, histo, histosize, sigbits); LEPT_FREE(histo); return pixd; } /* Initial vbox: minimum region in colorspace occupied by pixels */ if (ditherflag || subsample > 1) /* use full color space */ vbox = box3dCreate(0, (1 << sigbits) - 1, 0, (1 << sigbits) - 1, 0, (1 << sigbits) - 1); else vbox = pixGetColorRegion(pixs, sigbits, subsample); vbox->npix = vboxGetCount(vbox, histo, sigbits); vbox->vol = vboxGetVolume(vbox); /* For a fraction 'popcolors' of the desired 'maxcolors', * generate median cuts based on population, putting * everything on a priority queue sorted by population. */ lh = lheapCreate(0, L_SORT_DECREASING); lheapAdd(lh, vbox); ncolors = 1; niters = 0; popcolors = (l_int32)(FractByPopulation * maxcolors); while (1) { vbox = (L_BOX3D *)lheapRemove(lh); if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ lheapAdd(lh, vbox); continue; } medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); if (!vbox1) { L_WARNING("vbox1 not defined; shouldn't happen!\n", __func__); break; } if (vbox1->vol > 1) vbox1->sortparam = vbox1->npix; LEPT_FREE(vbox); lheapAdd(lh, vbox1); if (vbox2) { /* vbox2 can be NULL */ if (vbox2->vol > 1) vbox2->sortparam = vbox2->npix; lheapAdd(lh, vbox2); ncolors++; } if (ncolors >= popcolors) break; if (niters++ > MaxItersAllowed) { L_WARNING("infinite loop; perhaps too few pixels!\n", __func__); break; } } /* Re-sort by the product of pixel occupancy times the size * in color space. Normalize to the largest product to avoid * integer overflow. */ maxprod = 0.0; for (i = 0; i < lh->n; i++) { if ((vbox = (L_BOX3D *)lheapGetElement(lh, i)) == NULL) continue; prod = (l_float32)vbox->npix * (l_float32)vbox->vol; if (prod > maxprod) maxprod = prod; } norm = (maxprod == 0) ? 1.0 : 1000000.0 / maxprod; lhs = lheapCreate(0, L_SORT_DECREASING); while ((vbox = (L_BOX3D *)lheapRemove(lh))) { vbox->sortparam = norm * vbox->npix * vbox->vol; lheapAdd(lhs, vbox); } lheapDestroy(&lh, TRUE); /* For the remaining (maxcolors - popcolors), generate the * median cuts using the (npix * vol) sorting. */ while (1) { vbox = (L_BOX3D *)lheapRemove(lhs); if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ lheapAdd(lhs, vbox); continue; } medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); if (!vbox1) { L_WARNING("vbox1 not defined; shouldn't happen!\n", __func__); break; } if (vbox1->vol > 1) vbox1->sortparam = norm * vbox1->npix * vbox1->vol; LEPT_FREE(vbox); lheapAdd(lhs, vbox1); if (vbox2) { /* vbox2 can be NULL */ if (vbox2->vol > 1) vbox2->sortparam = norm * vbox2->npix * vbox2->vol; lheapAdd(lhs, vbox2); ncolors++; } if (ncolors >= maxcolors) break; if (niters++ > MaxItersAllowed) { L_WARNING("infinite loop; perhaps too few pixels!\n", __func__); break; } } /* Re-sort by pixel occupancy. This is not necessary, * but it makes a more useful listing. */ lh = lheapCreate(0, L_SORT_DECREASING); while ((vbox = (L_BOX3D *)lheapRemove(lhs))) { vbox->sortparam = vbox->npix; /* vbox->sortparam = vbox->npix * vbox->vol; */ lheapAdd(lh, vbox); } lheapDestroy(&lhs, TRUE); /* Generate colormap from median cuts and quantize pixd */ cmap = pixcmapGenerateFromMedianCuts(lh, histo, sigbits); if (outdepth == 0) { ncolors = pixcmapGetCount(cmap); if (ncolors <= 2) outdepth = 1; else if (ncolors <= 4) outdepth = 2; else if (ncolors <= 16) outdepth = 4; else outdepth = 8; } pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, histo, histosize, sigbits); /* Force darkest color to black if each component <= 4 */ pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 5 && gval < 5 && bval < 5) pixcmapResetColor(cmap, index, 0, 0, 0); /* Force lightest color to white if each component >= 252 */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 251 && gval > 251 && bval > 251) pixcmapResetColor(cmap, index, 255, 255, 255); lheapDestroy(&lh, TRUE); LEPT_FREE(histo); return pixd; } /*! * \brief pixMedianCutQuantMixed() * * \param[in] pixs 32 bpp; rgb color * \param[in] ncolor maximum number of colors assigned to * pixels with significant color * \param[in] ngray number of gray colors to be used; must be >= 2 * \param[in] darkthresh threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; uses 0 for default * \param[in] lightthresh threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default * \param[in] diffthresh thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default * \return pixd 8 bpp cmapped, or NULL on error * *
 * Notes:
 *      (1) ncolor + ngray must not exceed 255.
 *      (2) The method makes use of pixMedianCutQuantGeneral() with
 *          minimal addition.
 *          (a) Preprocess the image, setting all pixels with little color
 *              to black, and populating an auxiliary 8 bpp image with the
 *              expected colormap values corresponding to the set of
 *              quantized gray values.
 *          (b) Color quantize the altered input image to n + 1 colors.
 *          (c) Augment the colormap with the gray indices, and
 *              substitute the gray quantized values from the auxiliary
 *              image for those in the color quantized output that had
 *              been quantized as black.
 *      (3) Median cut color quantization is relatively poor for grayscale
 *          images with many colors, when compared to octcube quantization.
 *          Thus, for images with both gray and color, it is important
 *          to quantize the gray pixels by another method.  Here, we
 *          are conservative in detecting color, preferring to use
 *          a few extra bits to encode colorful pixels that push them
 *          to gray.  This is particularly reasonable with this function,
 *          because it handles the gray and color pixels separately,
 *          using median cut color quantization for the color pixels
 *          and equal-bin grayscale quantization for the non-color pixels.
 * 
*/ PIX * pixMedianCutQuantMixed(PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh) { l_int32 i, j, w, h, wplc, wplg, wpld, nc, unused, iscolor, factor, minside; l_int32 rval, gval, bval, minval, maxval, val, grayval; l_float32 pixfract, colorfract; l_int32 *lut; l_uint32 *datac, *datag, *datad, *linec, *lineg, *lined; PIX *pixc, *pixg, *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (ngray < 2) return (PIX *)ERROR_PTR("ngray < 2", __func__, NULL); if (ncolor + ngray > 255) return (PIX *)ERROR_PTR("ncolor + ngray > 255", __func__, NULL); if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 20; /* First check if this should be quantized in gray. * Use a more sensitive parameter for detecting color than with * pixMedianCutQuantGeneral(), because this function can handle * gray pixels well. */ pixGetDimensions(pixs, &w, &h, NULL); minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, darkthresh, lightthresh, diffthresh, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.0001) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing in gray\n", __func__, pixfract, colorfract); pixg = pixConvertTo8(pixs, 0); pixd = pixThresholdOn8bpp(pixg, ngray, 1); pixDestroy(&pixg); return pixd; } /* OK, there is color in the image. * Preprocess to handle the gray pixels. Set the color pixels in pixc * to black, and store their (eventual) colormap indices in pixg.*/ pixc = pixCopy(NULL, pixs); pixg = pixCreate(w, h, 8); /* color pixels will remain 0 here */ datac = pixGetData(pixc); datag = pixGetData(pixg); wplc = pixGetWpl(pixc); wplg = pixGetWpl(pixg); lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) lut[i] = ncolor + 1 + (i * (ngray - 1) + 128) / 255; for (i = 0; i < h; i++) { linec = datac + i * wplc; lineg = datag + i * wplg; for (j = 0; j < w; j++) { iscolor = FALSE; extractRGBValues(linec[j], &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval >= darkthresh && minval <= lightthresh && maxval - minval >= diffthresh) { iscolor = TRUE; } if (!iscolor) { linec[j] = 0x0; /* set to black */ grayval = (maxval + minval) / 2; SET_DATA_BYTE(lineg, j, lut[grayval]); } } } /* Median cut on color pixels plus black */ pixd = pixMedianCutQuantGeneral(pixc, FALSE, 8, ncolor + 1, DefaultSigBits, 1, 0); /* Augment the colormap with gray values. The new cmap * indices should agree with the values previously stored in pixg. */ cmap = pixGetColormap(pixd); nc = pixcmapGetCount(cmap); unused = ncolor + 1 - nc; if (unused < 0) L_ERROR("Too many colors: extra = %d\n", __func__, -unused); if (unused > 0) { /* fill in with black; these won't be used */ L_INFO("%d unused colors\n", __func__, unused); for (i = 0; i < unused; i++) pixcmapAddColor(cmap, 0, 0, 0); } for (i = 0; i < ngray; i++) { grayval = (255 * i) / (ngray - 1); pixcmapAddColor(cmap, grayval, grayval, grayval); } /* Substitute cmap indices for the gray pixels into pixd */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; lineg = datag + i * wplg; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lineg, j); /* if 0, it's a color pixel */ if (val) SET_DATA_BYTE(lined, j, val); } } pixDestroy(&pixc); pixDestroy(&pixg); LEPT_FREE(lut); return pixd; } /*! * \brief pixFewColorsMedianCutQuantMixed() * * \param[in] pixs 32 bpp rgb * \param[in] ncolor number of colors to be assigned to pixels * with significant color * \param[in] ngray number of gray colors to be used; must be >= 2 * \param[in] maxncolors maximum number of colors to be returned from * pixColorsForQuantization(); use 0 for default * \param[in] darkthresh threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; use 0 for default * \param[in] lightthresh threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default * \param[in] diffthresh thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default * \return pixd 8 bpp, median cut quantized for pixels that are * not gray; gray pixels are quantized separately over * the full gray range; null if too many colors or on error * *
 * Notes:
 *      (1) This is the "few colors" version of pixMedianCutQuantMixed().
 *          It fails (returns NULL) if it finds more than maxncolors, but
 *          otherwise it gives the same result.
 *      (2) Recommended input parameters are:
 *              %maxncolors:  20
 *              %darkthresh:  20
 *              %lightthresh: 244
 *              %diffthresh:  15  (any higher can miss colors differing
 *                                 slightly from gray)
 *      (3) Both ncolor and ngray should be at least equal to maxncolors.
 *          If they're not, they are automatically increased, and a
 *          warning is given.
 *      (4) If very little color content is found, the input is
 *          converted to gray and quantized in equal intervals.
 *      (5) This can be useful for quantizing orthographically generated
 *          images such as color maps, where there may be more than 256 colors
 *          because of aliasing or jpeg artifacts on text or lines, but
 *          there are a relatively small number of solid colors.
 *      (6) Example of usage:
 *             // Try to quantize, using default values for mixed med cut
 *             Pix *pixq = pixFewColorsMedianCutQuantMixed(pixs, 100, 20,
 *                             0, 0, 0, 0);
 *             if (!pixq)  // too many colors; don't quantize
 *                 pixq = pixClone(pixs);
 * 
*/ PIX * pixFewColorsMedianCutQuantMixed(PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 maxncolors, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh) { l_int32 ncolors, iscolor; PIX *pixg, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (maxncolors <= 0) maxncolors = 20; if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 15; if (ncolor < maxncolors) { L_WARNING("ncolor too small; setting to %d\n", __func__, maxncolors); ncolor = maxncolors; } if (ngray < maxncolors) { L_WARNING("ngray too small; setting to %d\n", __func__, maxncolors); ngray = maxncolors; } /* Estimate the color content and the number of colors required */ pixColorsForQuantization(pixs, 15, &ncolors, &iscolor, 0); /* Note that maxncolors applies to all colors required to quantize, * both gray and colorful */ if (ncolors > maxncolors) return (PIX *)ERROR_PTR("too many colors", __func__, NULL); /* If no color, return quantized gray pix */ if (!iscolor) { pixg = pixConvertTo8(pixs, 0); pixd = pixThresholdOn8bpp(pixg, ngray, 1); pixDestroy(&pixg); return pixd; } /* Use the mixed gray/color quantizer */ return pixMedianCutQuantMixed(pixs, ncolor, ngray, darkthresh, lightthresh, diffthresh); } /*------------------------------------------------------------------------* * Median cut indexed histogram * *------------------------------------------------------------------------*/ /*! * \brief pixMedianCutHisto() * * \param[in] pixs 32 bpp; rgb color * \param[in] sigbits valid: 5 or 6 * \param[in] subsample integer > 0 * \return histo 1-d array, giving the number of pixels in each * quantized region of color space, or NULL on error * *
 * Notes:
 *      (1) Array is indexed by (3 * sigbits) bits.  The array size
 *          is 2^(3 * sigbits).
 *      (2) Indexing into the array from rgb uses red sigbits as
 *          most significant and blue as least.
 * 
*/ l_int32 * pixMedianCutHisto(PIX *pixs, l_int32 sigbits, l_int32 subsample) { l_int32 i, j, w, h, wpl, rshift, index, histosize; l_int32 *histo; l_uint32 mask, pixel; l_uint32 *data, *line; if (!pixs) return (l_int32 *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (l_int32 *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (sigbits < 5 || sigbits > 6) return (l_int32 *)ERROR_PTR("sigbits not 5 or 6", __func__, NULL); if (subsample <= 0) return (l_int32 *)ERROR_PTR("subsample not > 0", __func__, NULL); histosize = 1 << (3 * sigbits); if ((histo = (l_int32 *)LEPT_CALLOC(histosize, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("histo not made", __func__, NULL); rshift = 8 - sigbits; mask = 0xff >> rshift; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += subsample) { line = data + i * wpl; for (j = 0; j < w; j += subsample) { pixel = line[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); histo[index]++; } } return histo; } /*------------------------------------------------------------------------* * Static helpers * *------------------------------------------------------------------------*/ /*! * \brief pixcmapGenerateFromHisto() * * \param[in] pixs 32 bpp; rgb color * \param[in] depth of colormap * \param[in] histo * \param[in] histosize * \param[in] sigbits * \return colormap, or NULL on error * *
 * Notes:
 *      (1) This is used when the number of colors in the histo
 *          is not greater than maxcolors.
 *      (2) As a side-effect, the histo becomes an inverse colormap,
 *          labeling the cmap indices for each existing color.
 * 
*/ static PIXCMAP * pixcmapGenerateFromHisto(PIX *pixs, l_int32 depth, l_int32 *histo, l_int32 histosize, l_int32 sigbits) { l_int32 i, index, shift, rval, gval, bval; l_uint32 mask; PIXCMAP *cmap; if (!pixs) return (PIXCMAP *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIXCMAP *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (!histo) return (PIXCMAP *)ERROR_PTR("histo not defined", __func__, NULL); /* Capture the rgb values of each occupied cube in the histo, * and re-label the histo value with the colormap index. */ cmap = pixcmapCreate(depth); shift = 8 - sigbits; mask = 0xff >> shift; for (i = 0, index = 0; i < histosize; i++) { if (histo[i]) { rval = (i >> (2 * sigbits)) << shift; gval = ((i >> sigbits) & mask) << shift; bval = (i & mask) << shift; pixcmapAddColor(cmap, rval, gval, bval); histo[i] = index++; } } return cmap; } /*! * \brief pixQuantizeWithColormap() * * \param[in] pixs 32 bpp; rgb color * \param[in] ditherflag 1 for dither; 0 for no dither * \param[in] outdepth depth of the returned pixd * \param[in] cmap colormap * \param[in] indexmap lookup table * \param[in] mapsize size of the lookup table * \param[in] sigbits significant bits in output * \return pixd quantized to colormap, or NULL on error * *
 * Notes:
 *      (1) The indexmap is a LUT that takes the rgb indices of the
 *          pixel and returns the index into the colormap.
 *      (2) If ditherflag is 1, %outdepth is ignored and the output
 *          depth is set to 8.
 * 
*/ static PIX * pixQuantizeWithColormap(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, PIXCMAP *cmap, l_int32 *indexmap, l_int32 mapsize, l_int32 sigbits) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 i, j, w, h, wpls, wpld, rshift, index, cmapindex, success; l_int32 rval, gval, bval, rc, gc, bc; l_int32 dif, val1, val2, val3; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *datas, *datad, *lines, *lined; l_uint32 mask, pixel; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", __func__, NULL); if (!indexmap) return (PIX *)ERROR_PTR("indexmap not defined", __func__, NULL); if (ditherflag) outdepth = 8; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, outdepth); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); rshift = 8 - sigbits; mask = 0xff >> rshift; if (ditherflag == 0) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (outdepth == 1) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); if (indexmap[index]) SET_DATA_BIT(lined, j); } } else if (outdepth == 2) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_DIBIT(lined, j, indexmap[index]); } } else if (outdepth == 4) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_QBIT(lined, j, indexmap[index]); } } else { /* outdepth == 8 */ for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_BYTE(lined, j, indexmap[index]); } } } } else { /* ditherflag == 1 */ success = TRUE; bufu8r = bufu8g = bufu8b = NULL; buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) { L_ERROR("buffer not made\n", __func__); success = FALSE; goto buffer_cleanup; } /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); cmapindex = indexmap[index]; SET_DATA_BYTE(lined, j, cmapindex); pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); dif = buf1r[j] / 8 - 8 * rc; if (dif > DifCap) dif = DifCap; if (dif < -DifCap) dif = -DifCap; if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (dif > DifCap) dif = DifCap; if (dif < -DifCap) dif = -DifCap; if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (dif > DifCap) dif = DifCap; if (dif < -DifCap) dif = -DifCap; if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); SET_DATA_BYTE(lined, w - 1, indexmap[index]); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); SET_DATA_BYTE(lined, j, indexmap[index]); } buffer_cleanup: LEPT_FREE(bufu8r); LEPT_FREE(bufu8g); LEPT_FREE(bufu8b); LEPT_FREE(buf1r); LEPT_FREE(buf1g); LEPT_FREE(buf1b); LEPT_FREE(buf2r); LEPT_FREE(buf2g); LEPT_FREE(buf2b); if (!success) pixDestroy(&pixd); } return pixd; } /*! * \brief getColorIndexMedianCut() * * \param[in] pixel 32 bit rgb * \param[in] rshift of component: 8 - sigbits * \param[in] mask over sigbits * \param[in] sigbits * \param[out] pindex rgb index value * \return void * *
 * Notes:
 *      (1) This is used on each pixel in the source image.  No checking
 *          is done on input values.
 * 
*/ static void getColorIndexMedianCut(l_uint32 pixel, l_int32 rshift, l_uint32 mask, l_int32 sigbits, l_int32 *pindex) { l_int32 rval, gval, bval; rval = pixel >> (24 + rshift); gval = (pixel >> (16 + rshift)) & mask; bval = (pixel >> (8 + rshift)) & mask; *pindex = (rval << (2 * sigbits)) + (gval << sigbits) + bval; return; } /*! * \brief pixGetColorRegion() * * \param[in] pixs 32 bpp; rgb color * \param[in] sigbits valid: 5, 6 * \param[in] subsample integer > 0 * \return vbox minimum 3D box in color space enclosing all pixels, * or NULL on error * *
 * Notes:
 *      (1) Computes the minimum 3D box in color space enclosing all
 *          pixels in the image.
 * 
*/ static L_BOX3D * pixGetColorRegion(PIX *pixs, l_int32 sigbits, l_int32 subsample) { l_int32 rmin, rmax, gmin, gmax, bmin, bmax, rval, gval, bval; l_int32 w, h, wpl, i, j, rshift; l_uint32 mask, pixel; l_uint32 *data, *line; if (!pixs) return (L_BOX3D *)ERROR_PTR("pixs not defined", __func__, NULL); rmin = gmin = bmin = 1000000; rmax = gmax = bmax = 0; rshift = 8 - sigbits; mask = 0xff >> rshift; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += subsample) { line = data + i * wpl; for (j = 0; j < w; j += subsample) { pixel = line[j]; rval = pixel >> (24 + rshift); gval = (pixel >> (16 + rshift)) & mask; bval = (pixel >> (8 + rshift)) & mask; if (rval < rmin) rmin = rval; else if (rval > rmax) rmax = rval; if (gval < gmin) gmin = gval; else if (gval > gmax) gmax = gval; if (bval < bmin) bmin = bval; else if (bval > bmax) bmax = bval; } } return box3dCreate(rmin, rmax, gmin, gmax, bmin, bmax); } /*! * \brief medianCutApply() * * \param[in] histo array; in rgb colorspace * \param[in] sigbits * \param[in] vbox input 3D box * \param[out] pvbox1, pvbox2 vbox split in two parts * \return 0 if OK, 1 on error */ static l_int32 medianCutApply(l_int32 *histo, l_int32 sigbits, L_BOX3D *vbox, L_BOX3D **pvbox1, L_BOX3D **pvbox2) { l_int32 i, j, k, sum, rw, gw, bw, maxw, index; l_int32 total, left, right; l_int32 partialsum[128]; L_BOX3D *vbox1, *vbox2; if (pvbox1) *pvbox1 = NULL; if (pvbox2) *pvbox2 = NULL; if (!histo) return ERROR_INT("histo not defined", __func__, 1); if (!vbox) return ERROR_INT("vbox not defined", __func__, 1); if (!pvbox1 || !pvbox2) return ERROR_INT("&vbox1 and &vbox2 not both defined", __func__, 1); if (vboxGetCount(vbox, histo, sigbits) == 0) return ERROR_INT("no pixels in vbox", __func__, 1); /* If the vbox occupies just one element in color space, it can't * be split. Leave the 'sortparam' field at 0, so that it goes to * the tail of the priority queue and stays there, thereby avoiding * an infinite loop (take off, put back on the head) if it * happens to be the most populous box! */ rw = vbox->r2 - vbox->r1 + 1; gw = vbox->g2 - vbox->g1 + 1; bw = vbox->b2 - vbox->b1 + 1; if (rw == 1 && gw == 1 && bw == 1) { *pvbox1 = box3dCopy(vbox); return 0; } /* Select the longest axis for splitting */ maxw = L_MAX(rw, gw); maxw = L_MAX(maxw, bw); #if DEBUG_SPLIT_AXES if (rw == maxw) lept_stderr("red split\n"); else if (gw == maxw) lept_stderr("green split\n"); else lept_stderr("blue split\n"); #endif /* DEBUG_SPLIT_AXES */ /* Find the partial sum arrays along the selected axis. */ total = 0; if (maxw == rw) { for (i = vbox->r1; i <= vbox->r2; i++) { sum = 0; for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << (2 * sigbits)) + (j << sigbits) + k; sum += histo[index]; } } total += sum; partialsum[i] = total; } } else if (maxw == gw) { for (i = vbox->g1; i <= vbox->g2; i++) { sum = 0; for (j = vbox->r1; j <= vbox->r2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << sigbits) + (j << (2 * sigbits)) + k; sum += histo[index]; } } total += sum; partialsum[i] = total; } } else { /* maxw == bw */ for (i = vbox->b1; i <= vbox->b2; i++) { sum = 0; for (j = vbox->r1; j <= vbox->r2; j++) { for (k = vbox->g1; k <= vbox->g2; k++) { index = i + (j << (2 * sigbits)) + (k << sigbits); sum += histo[index]; } } total += sum; partialsum[i] = total; } } /* Determine the cut planes, making sure that two vboxes * are always produced. Generate the two vboxes and compute * the sum in each of them. Choose the cut plane within * the greater of the (left, right) sides of the bin in which * the median pixel resides. Here's the surprise: go halfway * into that side. By doing that, you technically move away * from "median cut," but in the process a significant number * of low-count vboxes are produced, allowing much better * reproduction of low-count spot colors. */ vbox1 = vbox2 = NULL; if (maxw == rw) { for (i = vbox->r1; i <= vbox->r2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->r1; right = vbox->r2 - i; if (left <= right) vbox1->r2 = L_MIN(vbox->r2 - 1, i + right / 2); else /* left > right */ vbox1->r2 = L_MAX(vbox->r1, i - 1 - left / 2); vbox2->r1 = vbox1->r2 + 1; break; } } } else if (maxw == gw) { for (i = vbox->g1; i <= vbox->g2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->g1; right = vbox->g2 - i; if (left <= right) vbox1->g2 = L_MIN(vbox->g2 - 1, i + right / 2); else /* left > right */ vbox1->g2 = L_MAX(vbox->g1, i - 1 - left / 2); vbox2->g1 = vbox1->g2 + 1; break; } } } else { /* maxw == bw */ for (i = vbox->b1; i <= vbox->b2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->b1; right = vbox->b2 - i; if (left <= right) vbox1->b2 = L_MIN(vbox->b2 - 1, i + right / 2); else /* left > right */ vbox1->b2 = L_MAX(vbox->b1, i - 1 - left / 2); vbox2->b1 = vbox1->b2 + 1; break; } } } *pvbox1 = vbox1; *pvbox2 = vbox2; if (!vbox1) return ERROR_INT("vbox1 not made; shouldn't happen", __func__, 1); if (!vbox2) return ERROR_INT("vbox2 not made; shouldn't happen", __func__, 1); vbox1->npix = vboxGetCount(vbox1, histo, sigbits); vbox2->npix = vboxGetCount(vbox2, histo, sigbits); vbox1->vol = vboxGetVolume(vbox1); vbox2->vol = vboxGetVolume(vbox2); return 0; } /*! * \brief pixcmapGenerateFromMedianCuts() * * \param[in] lh priority queue of pointers to vboxes * \param[in] histo * \param[in] sigbits valid: 5 or 6 * \return cmap, or NULL on error * *
 * Notes:
 *      (1) Each vbox in the heap represents a color in the colormap.
 *      (2) As a side-effect, the histo becomes an inverse colormap,
 *          where the part of the array correpsonding to each vbox
 *          is labeled with the cmap index for that vbox.  Then
 *          for each rgb pixel, the colormap index is found directly
 *          by mapping the rgb value to the histo array index.
 * 
*/ static PIXCMAP * pixcmapGenerateFromMedianCuts(L_HEAP *lh, l_int32 *histo, l_int32 sigbits) { l_int32 index, rval, gval, bval; L_BOX3D *vbox; PIXCMAP *cmap; if (!lh) return (PIXCMAP *)ERROR_PTR("lh not defined", __func__, NULL); if (!histo) return (PIXCMAP *)ERROR_PTR("histo not defined", __func__, NULL); rval = gval = bval = 0; /* make compiler happy */ cmap = pixcmapCreate(8); index = 0; while (lheapGetCount(lh) > 0) { vbox = (L_BOX3D *)lheapRemove(lh); vboxGetAverageColor(vbox, histo, sigbits, index, &rval, &gval, &bval); pixcmapAddColor(cmap, rval, gval, bval); LEPT_FREE(vbox); index++; } return cmap; } /*! * \brief vboxGetAverageColor() * * \param[in] vbox 3d region of color space for one quantized color * \param[in] histo * \param[in] sigbits valid: 5 or 6 * \param[in] index if >= 0, assign to all colors in histo in this vbox * \param[out] prval, pgval, pbval average color * \return cmap, or NULL on error * *
 * Notes:
 *      (1) The vbox represents one color in the colormap.
 *      (2) If index >= 0, as a side-effect, all array elements in
 *          the histo corresponding to the vbox are labeled with this
 *          cmap index for that vbox.  Otherwise, the histo array
 *          is not changed.
 *      (3) The vbox is quantized in sigbits.  So the actual 8-bit color
 *          components are found by multiplying the quantized value
 *          by either 4 or 8.  We must add 0.5 to the quantized index
 *          before multiplying to get the approximate 8-bit color in
 *          the center of the vbox; otherwise we get values on
 *          the lower corner.
 * 
*/ static l_int32 vboxGetAverageColor(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 i, j, k, ntot, mult, histoindex, rsum, gsum, bsum; if (!vbox) return ERROR_INT("vbox not defined", __func__, 1); if (!histo) return ERROR_INT("histo not defined", __func__, 1); if (!prval || !pgval || !pbval) return ERROR_INT("&p*val not all defined", __func__, 1); *prval = *pgval = *pbval = 0; ntot = 0; mult = 1 << (8 - sigbits); rsum = gsum = bsum = 0; for (i = vbox->r1; i <= vbox->r2; i++) { for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { histoindex = (i << (2 * sigbits)) + (j << sigbits) + k; ntot += histo[histoindex]; rsum += (l_int32)(histo[histoindex] * (i + 0.5) * mult); gsum += (l_int32)(histo[histoindex] * (j + 0.5) * mult); bsum += (l_int32)(histo[histoindex] * (k + 0.5) * mult); if (index >= 0) histo[histoindex] = index; } } } if (ntot == 0) { *prval = mult * (vbox->r1 + vbox->r2 + 1) / 2; *pgval = mult * (vbox->g1 + vbox->g2 + 1) / 2; *pbval = mult * (vbox->b1 + vbox->b2 + 1) / 2; } else { *prval = rsum / ntot; *pgval = gsum / ntot; *pbval = bsum / ntot; } #if DEBUG_MC_COLORS lept_stderr("ntot[%d] = %d: [%d, %d, %d], (%d, %d, %d)\n", index, ntot, vbox->r2 - vbox->r1 + 1, vbox->g2 - vbox->g1 + 1, vbox->b2 - vbox->b1 + 1, *prval, *pgval, *pbval); #endif /* DEBUG_MC_COLORS */ return 0; } /*! * \brief vboxGetCount() * * \param[in] vbox 3d region of color space for one quantized color * \param[in] histo * \param[in] sigbits valid: 5 or 6 * \return number of image pixels in this region, or 0 on error */ static l_int32 vboxGetCount(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits) { l_int32 i, j, k, npix, index; if (!vbox) return ERROR_INT("vbox not defined", __func__, 0); if (!histo) return ERROR_INT("histo not defined", __func__, 0); npix = 0; for (i = vbox->r1; i <= vbox->r2; i++) { for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << (2 * sigbits)) + (j << sigbits) + k; npix += histo[index]; } } } return npix; } /*! * \brief vboxGetVolume() * * \param[in] vbox 3d region of color space for one quantized color * \return quantized volume of vbox, or 0 on error */ static l_int32 vboxGetVolume(L_BOX3D *vbox) { if (!vbox) return ERROR_INT("vbox not defined", __func__, 0); return ((vbox->r2 - vbox->r1 + 1) * (vbox->g2 - vbox->g1 + 1) * (vbox->b2 - vbox->b1 + 1)); } /*! * \brief box3dCreate() * * \param[in] r1, r2, g1, g2, b1, b2 initial values * \return vbox */ static L_BOX3D * box3dCreate(l_int32 r1, l_int32 r2, l_int32 g1, l_int32 g2, l_int32 b1, l_int32 b2) { L_BOX3D *vbox; vbox = (L_BOX3D *)LEPT_CALLOC(1, sizeof(L_BOX3D)); vbox->r1 = r1; vbox->r2 = r2; vbox->g1 = g1; vbox->g2 = g2; vbox->b1 = b1; vbox->b2 = b2; return vbox; } /*! * \brief box3dCopy() * * \param[in] vbox * \return vboxc copy of vbox * *
 * Notes:
 *      Don't copy the sortparam.
 * 
*/ static L_BOX3D * box3dCopy(L_BOX3D *vbox) { L_BOX3D *vboxc; if (!vbox) return (L_BOX3D *)ERROR_PTR("vbox not defined", __func__, NULL); vboxc = box3dCreate(vbox->r1, vbox->r2, vbox->g1, vbox->g2, vbox->b1, vbox->b2); vboxc->npix = vbox->npix; vboxc->vol = vbox->vol; return vboxc; } leptonica-1.86.0/src/colorseg.c000066400000000000000000000576061506303110300163420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorseg.c *
 *
 *    Unsupervised color segmentation
 *
 *               PIX     *pixColorSegment()
 *               PIX     *pixColorSegmentCluster()
 *       static  l_int32  pixColorSegmentTryCluster()
 *               l_int32  pixAssignToNearestColor()
 *               l_int32  pixColorSegmentClean()
 *               l_int32  pixColorSegmentRemoveColors()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Maximum allowed iterations in Phase 1. */ static const l_int32 MAX_ALLOWED_ITERATIONS = 20; /* Factor by which max dist is increased on each iteration */ static const l_float32 DIST_EXPAND_FACT = 1.3f; /* Octcube division level for computing nearest colormap color using LUT. * Using 4 should suffice for up to 50 - 100 colors, and it is * very fast. Using 5 takes 8 times as long to set up the LUT * for little perceptual gain, even with 100 colors. */ static const l_int32 LEVEL_IN_OCTCUBE = 4; static l_int32 pixColorSegmentTryCluster(PIX *pixd, PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 debugflag); /*------------------------------------------------------------------* * Unsupervised color segmentation * *------------------------------------------------------------------*/ /*! * \brief pixColorSegment() * * \param[in] pixs 32 bpp; 24-bit color * \param[in] maxdist max euclidean dist to existing cluster * \param[in] maxcolors max number of colors allowed in first pass * \param[in] selsize linear size of sel for closing to remove noise * \param[in] finalcolors max number of final colors allowed after 4th pass * \param[in] debugflag 1 for debug output; 0 otherwise * \return pixd 8 bit with colormap, or NULL on error * *
 *  Color segmentation proceeds in four phases:
 *
 *  Phase 1:  pixColorSegmentCluster()
 *  The image is traversed in raster order.  Each pixel either
 *  becomes the representative for a new cluster or is assigned to an
 *  existing cluster.  Assignment is greedy.  The data is stored in
 *  a colormapped image.  Three auxiliary arrays are used to hold
 *  the colors of the representative pixels, for fast lookup.
 *  The average color in each cluster is computed.
 *
 *  Phase 2.  pixAssignToNearestColor()
 *  A second non-greedy clustering pass is performed, where each pixel
 *  is assigned to the nearest cluster average.  We also keep track
 *  of how many pixels are assigned to each cluster.
 *
 *  Phase 3.  pixColorSegmentClean()
 *  For each cluster, starting with the largest, do a morphological
 *  closing to eliminate small components within larger ones.
 *
 *  Phase 4.  pixColorSegmentRemoveColors()
 *  Eliminate all colors except the most populated 'finalcolors'.
 *  Then remove unused colors from the colormap, and reassign those
 *  pixels to the nearest remaining cluster, using the original pixel values.
 *
 * Notes:
 *      (1) The goal is to generate a small number of colors.
 *          Typically this would be specified by 'finalcolors',
 *          a number that would be somewhere between 3 and 6.
 *          The parameter 'maxcolors' specifies the maximum number of
 *          colors generated in the first phase.  This should be
 *          larger than finalcolors, perhaps twice as large.
 *          If more than 'maxcolors' are generated in the first phase
 *          using the input 'maxdist', the distance is repeatedly
 *          increased by a multiplicative factor until the condition
 *          is satisfied.  The implicit relation between 'maxdist'
 *          and 'maxcolors' is thus adjusted programmatically.
 *      (2) As a very rough guideline, given a target value of 'finalcolors',
 *          here are approximate values of 'maxdist' and 'maxcolors'
 *          to start with:
 *
 *               finalcolors    maxcolors    maxdist
 *               -----------    ---------    -------
 *                   3             6          100
 *                   4             8           90
 *                   5            10           75
 *                   6            12           60
 *
 *          For a given number of finalcolors, if you use too many
 *          maxcolors, the result will be noisy.  If you use too few,
 *          the result will be a relatively poor assignment of colors.
 * 
*/ PIX * pixColorSegment(PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 selsize, l_int32 finalcolors, l_int32 debugflag) { l_int32 *countarray; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("must be rgb color", __func__, NULL); /* Phase 1; original segmentation */ pixd = pixColorSegmentCluster(pixs, maxdist, maxcolors, debugflag); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); if (debugflag) { lept_mkdir("lept/segment"); pixWriteDebug("/tmp/lept/segment/colorseg1.png", pixd, IFF_PNG); } /* Phase 2; refinement in pixel assignment */ countarray = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); pixAssignToNearestColor(pixd, pixs, NULL, LEVEL_IN_OCTCUBE, countarray); if (debugflag) pixWriteDebug("/tmp/lept/segment/colorseg2.png", pixd, IFF_PNG); /* Phase 3: noise removal by separately closing each color */ pixColorSegmentClean(pixd, selsize, countarray); LEPT_FREE(countarray); if (debugflag) pixWriteDebug("/tmp/lept/segment/colorseg3.png", pixd, IFF_PNG); /* Phase 4: removal of colors with small population and * reassignment of pixels to remaining colors */ pixColorSegmentRemoveColors(pixd, pixs, finalcolors); return pixd; } /*! * \brief pixColorSegmentCluster() * * \param[in] pixs 32 bpp; 24-bit color * \param[in] maxdist max euclidean dist to existing cluster * \param[in] maxcolors max number of colors allowed in first pass * \param[in] debugflag 1 for debug output; 0 otherwise * \return pixd 8 bit with colormap, or NULL on error * *
 * Notes:
 *      (1) This is phase 1.  See description in pixColorSegment().
 *      (2) Greedy unsupervised classification.  If the limit 'maxcolors'
 *          is exceeded, the computation is repeated with a larger
 *          allowed cluster size.
 *      (3) On each successive iteration, 'maxdist' is increased by a
 *          constant factor.  See comments in pixColorSegment() for
 *          a guideline on parameter selection.
 *          Note that the diagonal of the 8-bit rgb color cube is about
 *          440, so for 'maxdist' = 440, you are guaranteed to get 1 color!
 * 
*/ PIX * pixColorSegmentCluster(PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 debugflag) { l_int32 w, h, newmaxdist, ret, niters, ncolors, success; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("must be rgb color", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); newmaxdist = maxdist; niters = 0; success = TRUE; while (1) { ret = pixColorSegmentTryCluster(pixd, pixs, newmaxdist, maxcolors, debugflag); niters++; if (!ret) { ncolors = pixcmapGetCount(cmap); if (debugflag) L_INFO("Success with %d colors after %d iters\n", __func__, ncolors, niters); break; } if (niters == MAX_ALLOWED_ITERATIONS) { L_WARNING("too many iters; newmaxdist = %d\n", __func__, newmaxdist); success = FALSE; break; } newmaxdist = (l_int32)(DIST_EXPAND_FACT * (l_float32)newmaxdist); } if (!success) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("failure in phase 1", __func__, NULL); } return pixd; } /*! * \brief pixColorSegmentTryCluster() * * \param[in] pixd * \param[in] pixs * \param[in] maxdist * \param[in] maxcolors * \param[in] debugflag 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      This function should only be called from pixColorSegCluster()
 * 
*/ static l_int32 pixColorSegmentTryCluster(PIX *pixd, PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 debugflag) { l_int32 rmap[256], gmap[256], bmap[256]; l_int32 w, h, wpls, wpld, i, j, k, found, ret, index, ncolors; l_int32 rval, gval, bval, dist2, maxdist2; l_int32 countarray[256]; l_int32 rsum[256], gsum[256], bsum[256]; l_uint32 *ppixel; l_uint32 *datas, *datad, *lines, *lined; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); w = pixGetWidth(pixs); h = pixGetHeight(pixs); maxdist2 = maxdist * maxdist; cmap = pixGetColormap(pixd); pixcmapClear(cmap); for (k = 0; k < 256; k++) { rsum[k] = gsum[k] = bsum[k] = 0; rmap[k] = gmap[k] = bmap[k] = 0; } datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); ncolors = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { ppixel = lines + j; rval = GET_DATA_BYTE(ppixel, COLOR_RED); gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); ncolors = pixcmapGetCount(cmap); found = FALSE; for (k = 0; k < ncolors; k++) { dist2 = (rval - rmap[k]) * (rval - rmap[k]) + (gval - gmap[k]) * (gval - gmap[k]) + (bval - bmap[k]) * (bval - bmap[k]); if (dist2 <= maxdist2) { /* take it; greedy */ found = TRUE; SET_DATA_BYTE(lined, j, k); countarray[k]++; rsum[k] += rval; gsum[k] += gval; bsum[k] += bval; break; } } if (!found) { /* Add a new color */ ret = pixcmapAddNewColor(cmap, rval, gval, bval, &index); /* lept_stderr( "index = %d, (i,j) = (%d,%d), rgb = (%d, %d, %d)\n", index, i, j, rval, gval, bval); */ if (ret == 0 && index < maxcolors) { countarray[index] = 1; SET_DATA_BYTE(lined, j, index); rmap[index] = rval; gmap[index] = gval; bmap[index] = bval; rsum[index] = rval; gsum[index] = gval; bsum[index] = bval; } else { if (debugflag) { L_INFO("maxcolors exceeded for maxdist = %d\n", __func__, maxdist); } return 1; } } } } /* Replace the colors in the colormap by the averages */ for (k = 0; k < ncolors; k++) { rval = rsum[k] / countarray[k]; gval = gsum[k] / countarray[k]; bval = bsum[k] / countarray[k]; pixcmapResetColor(cmap, k, rval, gval, bval); } return 0; } /*! * \brief pixAssignToNearestColor() * * \param[in] pixd 8 bpp, colormapped * \param[in] pixs 32 bpp; 24-bit color * \param[in] pixm [optional] 1 bpp * \param[in] level of octcube used for finding nearest color in cmap * \param[in] countarray [optional] ptr to array, in which we can store * the number of pixels found in each color in * the colormap in pixd * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used in phase 2 of color segmentation, where pixs
 *          is the original input image to pixColorSegment(), and
 *          pixd is the colormapped image returned from
 *          pixColorSegmentCluster().  It is also used, with a mask,
 *          in phase 4.
 *      (2) This is an in-place operation.
 *      (3) The colormap in pixd is unchanged.
 *      (4) pixs and pixd must be the same size (w, h).
 *      (5) The selection mask pixm can be null.  If it exists, it must
 *          be the same size as pixs and pixd, and only pixels
 *          corresponding to fg in pixm are assigned.  Set to
 *          NULL if all pixels in pixd are to be assigned.
 *      (6) The countarray can be null.  If it exists, it is pre-allocated
 *          and of a size at least equal to the size of the colormap in pixd.
 *      (7) This does a best-fit (non-greedy) assignment of pixels to
 *          existing clusters.  Specifically, it assigns each pixel
 *          in pixd to the color index in the pixd colormap that has a
 *          color closest to the corresponding rgb pixel in pixs.
 *      (8) 'level' is the octcube level used to quickly find the nearest
 *          color in the colormap for each pixel.  For color segmentation,
 *          this parameter is set to LEVEL_IN_OCTCUBE.
 *      (9) We build a mapping table from octcube to colormap index so
 *          that this function can run in a time (otherwise) independent
 *          of the number of colors in the colormap.  This avoids a
 *          brute-force search for the closest colormap color to each
 *          pixel in the image.
 * 
*/ l_ok pixAssignToNearestColor(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 level, l_int32 *countarray) { l_int32 w, h, wpls, wpld, wplm, i, j, success; l_int32 rval, gval, bval, index; l_int32 *cmaptab; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *ppixel; l_uint32 *datas, *datad, *datam = NULL, *lines, *lined, *linem = NULL; PIXCMAP *cmap; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("cmap not found", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (level < 1 || level > 6) return ERROR_INT("level not in [1 ... 6]", __func__, 1); /* Set up the tables to map rgb to the nearest colormap index */ success = TRUE; makeRGBToIndexTables(level, &rtab, >ab, &btab); cmaptab = pixcmapToOctcubeLUT(cmap, level, L_MANHATTAN_DISTANCE); if (!rtab || !gtab || !btab || !cmaptab) { L_ERROR("failure to make a table\n", __func__); success = FALSE; goto cleanup_arrays; } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (pixm) { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (pixm) linem = datam + i * wplm; for (j = 0; j < w; j++) { if (pixm) { if (!GET_DATA_BIT(linem, j)) continue; } ppixel = lines + j; rval = GET_DATA_BYTE(ppixel, COLOR_RED); gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); /* Map from rgb to octcube index */ getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &octindex); /* Map from octcube index to nearest colormap index */ index = cmaptab[octindex]; if (countarray) countarray[index]++; SET_DATA_BYTE(lined, j, index); } } cleanup_arrays: LEPT_FREE(cmaptab); LEPT_FREE(rtab); LEPT_FREE(gtab); LEPT_FREE(btab); return (success) ? 0 : 1; } /*! * \brief pixColorSegmentClean() * * \param[in] pixs 8 bpp, colormapped * \param[in] selsize for closing * \param[in] countarray ptr to array containing the number of pixels * found in each color in the colormap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This operation is in-place.
 *      (2) This is phase 3 of color segmentation.  It is the first
 *          part of a two-step noise removal process.  Colors with a
 *          large population are closed first; this operation absorbs
 *          small sets of intercolated pixels of a different color.
 * 
*/ l_ok pixColorSegmentClean(PIX *pixs, l_int32 selsize, l_int32 *countarray) { l_int32 i, ncolors, val; l_uint32 val32; NUMA *na, *nasi; PIX *pixt1, *pixt2; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("cmap not found", __func__, 1); if (!countarray) return ERROR_INT("countarray not defined", __func__, 1); if (selsize <= 1) return 0; /* nothing to do */ /* Sort colormap indices in decreasing order of pixel population */ ncolors = pixcmapGetCount(cmap); na = numaCreate(ncolors); for (i = 0; i < ncolors; i++) numaAddNumber(na, countarray[i]); nasi = numaGetSortIndex(na, L_SORT_DECREASING); numaDestroy(&na); if (!nasi) return ERROR_INT("nasi not made", __func__, 1); /* For each color, in order of decreasing population, * do a closing and absorb the added pixels. Note that * if the closing removes pixels at the border, they'll * still appear in the xor and will be properly (re)set. */ for (i = 0; i < ncolors; i++) { numaGetIValue(nasi, i, &val); pixt1 = pixGenerateMaskByValue(pixs, val, 1); pixt2 = pixCloseSafeCompBrick(NULL, pixt1, selsize, selsize); pixXor(pixt2, pixt2, pixt1); /* pixels to be added to type 'val' */ pixcmapGetColor32(cmap, val, &val32); pixSetMasked(pixs, pixt2, val32); /* add them */ pixDestroy(&pixt1); pixDestroy(&pixt2); } numaDestroy(&nasi); return 0; } /*! * \brief pixColorSegmentRemoveColors() * * \param[in] pixd 8 bpp, colormapped * \param[in] pixs 32 bpp rgb, with initial pixel values * \param[in] finalcolors max number of colors to retain * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This operation is in-place.
 *      (2) This is phase 4 of color segmentation, and the second part
 *          of the 2-step noise removal.  Only 'finalcolors' different
 *          colors are retained, with colors with smaller populations
 *          being replaced by the nearest color of the remaining colors.
 *          For highest accuracy, for pixels that are being replaced,
 *          we find the nearest colormap color  to the original rgb color.
 * 
*/ l_ok pixColorSegmentRemoveColors(PIX *pixd, PIX *pixs, l_int32 finalcolors) { l_int32 i, ncolors, index, tempindex; l_int32 *tab; l_uint32 tempcolor; NUMA *na, *nasi; PIX *pixm; PIXCMAP *cmap; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixGetDepth(pixd) != 8) return ERROR_INT("pixd not 8 bpp", __func__, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("cmap not found", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); if (finalcolors >= ncolors) /* few enough colors already; nothing to do */ return 0; /* Generate a mask over all pixels that are not in the * 'finalcolors' most populated colors. Save the colormap * index of any one of the retained colors in 'tempindex'. * The LUT has values 0 for the 'finalcolors' most populated colors, * which will be retained; and 1 for the rest, which are marked * by fg pixels in pixm and will be removed. */ na = pixGetCmapHistogram(pixd, 1); if ((nasi = numaGetSortIndex(na, L_SORT_DECREASING)) == NULL) { numaDestroy(&na); return ERROR_INT("nasi not made", __func__, 1); } numaGetIValue(nasi, finalcolors - 1, &tempindex); /* retain down to this */ pixcmapGetColor32(cmap, tempindex, &tempcolor); /* use this color */ tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = finalcolors; i < ncolors; i++) { numaGetIValue(nasi, i, &index); tab[index] = 1; } pixm = pixMakeMaskFromLUT(pixd, tab); LEPT_FREE(tab); /* Reassign the masked pixels temporarily to the saved index * (tempindex). This guarantees that no pixels are labeled by * a colormap index of any colors that will be removed. * The actual value doesn't matter, as long as it's one * of the retained colors, because these pixels will later * be reassigned based on the full set of colors retained * in the colormap. */ pixSetMasked(pixd, pixm, tempcolor); /* Now remove unused colors from the colormap. This reassigns * image pixels as required. */ pixRemoveUnusedColors(pixd); /* Finally, reassign the pixels under the mask (those that were * given a 'tempindex' value) to the nearest color in the colormap. * This is the function used in phase 2 on all image pixels; here * it is only used on the masked pixels given by pixm. */ pixAssignToNearestColor(pixd, pixs, pixm, LEVEL_IN_OCTCUBE, NULL); pixDestroy(&pixm); numaDestroy(&na); numaDestroy(&nasi); return 0; } leptonica-1.86.0/src/colorspace.c000066400000000000000000002250511506303110300166460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file colorspace.c *
 *
 *      Colorspace conversion between RGB and HSV
 *           PIX        *pixConvertRGBToHSV()
 *           PIX        *pixConvertHSVToRGB()
 *           l_int32     convertRGBToHSV()
 *           l_int32     convertHSVToRGB()
 *           l_int32     pixcmapConvertRGBToHSV()
 *           l_int32     pixcmapConvertHSVToRGB()
 *           PIX        *pixConvertRGBToHue()
 *           PIX        *pixConvertRGBToSaturation()
 *           PIX        *pixConvertRGBToValue()
 *
 *      Selection and display of range of colors in HSV space
 *           PIX        *pixMakeRangeMaskHS()
 *           PIX        *pixMakeRangeMaskHV()
 *           PIX        *pixMakeRangeMaskSV()
 *           PIX        *pixMakeHistoHS()
 *           PIX        *pixMakeHistoHV()
 *           PIX        *pixMakeHistoSV()
 *           PIX        *pixFindHistoPeaksHSV()
 *           PIX        *displayHSVColorRange()
 *
 *      Colorspace conversion between RGB and YUV
 *           PIX        *pixConvertRGBToYUV()
 *           PIX        *pixConvertYUVToRGB()
 *           l_int32     convertRGBToYUV()
 *           l_int32     convertYUVToRGB()
 *           l_int32     pixcmapConvertRGBToYUV()
 *           l_int32     pixcmapConvertYUVToRGB()
 *
 *      Colorspace conversion between RGB and XYZ
 *           FPIXA      *pixConvertRGBToXYZ()
 *           PIX        *fpixaConvertXYZToRGB()
 *           l_int32     convertRGBToXYZ()
 *           l_int32     convertXYZToRGB()
 *
 *      Colorspace conversion between XYZ and LAB
 *           FPIXA      *fpixaConvertXYZToLAB()
 *           PIX        *fpixaConvertLABToXYZ()
 *           l_int32     convertXYZToLAB()
 *           l_int32     convertLABToXYZ()
 *           static l_float32  lab_forward()
 *           static l_float32  lab_reverse()
 *
 *      Colorspace conversion between RGB and LAB
 *           FPIXA      *pixConvertRGBToLAB()
 *           PIX        *fpixaConvertLABToRGB()
 *           l_int32     convertRGBToLAB()
 *           l_int32     convertLABToRGB()
 *
 *      Gamut display of RGB color space
 *           PIX        *pixMakeGamutRGB()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_HISTO 0 #define SLOW_CUBE_ROOT 0 #endif /* ~NO_CONSOLE_IO */ /* Functions used in xyz <--> lab conversions */ static l_float32 lab_forward(l_float32 v); static l_float32 lab_reverse(l_float32 v); /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and HSB * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertRGBToHSV() * * \param[in] pixd can be NULL; if not NULL, must == pixs * \param[in] pixs * \return pixd always * *
 * Notes:
 *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
 *      (2) The definition of our HSV space is given in convertRGBToHSV().
 *      (3) The h, s and v values are stored in the same places as
 *          the r, g and b values, respectively.  Here, they are explicitly
 *          placed in the 3 MS bytes in the pixel.
 *      (4) Normalizing to 1 and considering the r,g,b components,
 *          a simple way to understand the HSV space is:
 *           ~ v = max(r,g,b)
 *           ~ s = (max - min) / max
 *           ~ h ~ (mid - min) / (max - min)  [apart from signs and constants]
 *      (5) Normalizing to 1, some properties of the HSV space are:
 *           ~ For gray values (r = g = b) along the continuum between
 *             black and white:
 *                s = 0  (becoming undefined as you approach black)
 *                h is undefined everywhere
 *           ~ Where one component is saturated and the others are zero:
 *                v = 1
 *                s = 1
 *                h = 0 (r = max), 1/3 (g = max), 2/3 (b = max)
 *           ~ Where two components are saturated and the other is zero:
 *                v = 1
 *                s = 1
 *                h = 1/2 (if r = 0), 5/6 (if g = 0), 1/6 (if b = 0)
 *      (6) Dividing each component by a constant c > 1 reduces the
 *          brightness v, but leaves the saturation and hue invariant.
 * 
*/ PIX * pixConvertRGBToHSV(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; l_uint32 *line, *data; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", __func__, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or rgb", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertRGBToHSV(cmap); return pixd; } /* Convert RGB image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); line[j] = (hval << 24) | (sval << 16) | (vval << 8); } } return pixd; } /*! * \brief pixConvertHSVToRGB() * * \param[in] pixd can be NULL; if not NULL, must == pixs * \param[in] pixs * \return pixd always * *
 * Notes:
 *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
 *      (2) The user takes responsibility for making sure that pixs is
 *          in our HSV space.  The definition of our HSV space is given
 *          in convertRGBToHSV().
 *      (3) The h, s and v values are stored in the same places as
 *          the r, g and b values, respectively.  Here, they are explicitly
 *          placed in the 3 MS bytes in the pixel.
 * 
*/ PIX * pixConvertHSVToRGB(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", __func__, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or hsv", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertHSVToRGB(cmap); return pixd; } /* Convert HSV image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; hval = pixel >> 24; sval = (pixel >> 16) & 0xff; vval = (pixel >> 8) & 0xff; convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } return pixd; } /*! * \brief convertRGBToHSV() * * \param[in] rval, gval, bval RGB input * \param[out] phval, psval, pvval comparable HSV values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The range of returned values is:
 *            h [0 ... 239]
 *            s [0 ... 255]
 *            v [0 ... 255]
 *      (2) If r = g = b, the pixel is gray (s = 0), and we define h = 0.
 *      (3) h wraps around, so that h = 0 and h = 240 are equivalent
 *          in hue space.
 *      (4) h has the following correspondence to color:
 *            h = 0         magenta
 *            h = 40        red
 *            h = 80        yellow
 *            h = 120       green
 *            h = 160       cyan
 *            h = 200       blue
 * 
*/ l_ok convertRGBToHSV(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *phval, l_int32 *psval, l_int32 *pvval) { l_int32 minrg, maxrg, min, max, delta; l_float32 h; if (phval) *phval = 0; if (psval) *psval = 0; if (pvval) *pvval = 0; if (!phval || !psval || !pvval) return ERROR_INT("&hval, &sval, &vval not all defined", __func__, 1); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; *pvval = max; if (delta == 0) { /* gray; no chroma */ *phval = 0; *psval = 0; } else { *psval = (l_int32)(255. * (l_float32)delta / (l_float32)max + 0.5); if (rval == max) /* between magenta and yellow */ h = (l_float32)(gval - bval) / (l_float32)delta; else if (gval == max) /* between yellow and cyan */ h = 2. + (l_float32)(bval - rval) / (l_float32)delta; else /* between cyan and magenta */ h = 4. + (l_float32)(rval - gval) / (l_float32)delta; h *= 40.0; if (h < 0.0) h += 240.0; if (h >= 239.5) h = 0.0; *phval = (l_int32)(h + 0.5); } return 0; } /*! * \brief convertHSVToRGB() * * \param[in] hval, sval, vval HSV input * \param[out] prval, pgval, pbval comparable RGB values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertRGBToHSV() for valid input range of HSV values
 *          and their interpretation in color space.
 * 
*/ l_ok convertHSVToRGB(l_int32 hval, l_int32 sval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 i, x, y, z; l_float32 h, f, s; if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", __func__, 1); if (sval == 0) { /* gray */ *prval = vval; *pgval = vval; *pbval = vval; } else { if (hval < 0 || hval > 240) return ERROR_INT("invalid hval", __func__, 1); if (hval == 240) hval = 0; h = (l_float32)hval / 40.; i = (l_int32)h; f = h - i; s = (l_float32)sval / 255.; x = (l_int32)(vval * (1. - s) + 0.5); y = (l_int32)(vval * (1. - s * f) + 0.5); z = (l_int32)(vval * (1. - s * (1. - f)) + 0.5); switch (i) { case 0: *prval = vval; *pgval = z; *pbval = x; break; case 1: *prval = y; *pgval = vval; *pbval = x; break; case 2: *prval = x; *pgval = vval; *pbval = z; break; case 3: *prval = x; *pgval = y; *pbval = vval; break; case 4: *prval = z; *pgval = x; *pbval = vval; break; case 5: *prval = vval; *pgval = x; *pbval = y; break; default: /* none possible */ return 1; } } return 0; } /*! * \brief pixcmapConvertRGBToHSV() * * \param[in] cmap * \return 0 if OK; 1 on error * *
 * Notes:
 *      ~ in-place transform
 *      ~ See convertRGBToHSV() for def'n of HSV space.
 *      ~ replaces: r --> h, g --> s, b --> v
 * 
*/ l_ok pixcmapConvertRGBToHSV(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); pixcmapResetColor(cmap, i, hval, sval, vval); } return 0; } /*! * \brief pixcmapConvertHSVToRGB() * * \param[in] cmap * \return 0 if OK; 1 on error * *
 * Notes:
 *      ~ in-place transform
 *      ~ See convertRGBToHSV() for def'n of HSV space.
 *      ~ replaces: h --> r, s --> g, v --> b
 * 
*/ l_ok pixcmapConvertHSVToRGB(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &hval, &sval, &vval); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } /*! * \brief pixConvertRGBToHue() * * \param[in] pixs 32 bpp RGB, or 8 bpp with colormap * \return pixd 8 bpp hue of HSV, or NULL on error * *
 * Notes:
 *      (1) The conversion to HSV hue is in-lined here.
 *      (2) If there is a colormap, it is removed.
 *      (3) If you just want the hue component, this does it
 *          at about 10 Mpixels/sec/GHz, which is about
 *          2x faster than using pixConvertRGBToHSV()
 * 
*/ PIX * pixConvertRGBToHue(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, hval, minrg, min, maxrg, max, delta; l_float32 fh; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", __func__, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) { /* gray; no chroma */ hval = 0; } else { if (rval == max) /* between magenta and yellow */ fh = (l_float32)(gval - bval) / (l_float32)delta; else if (gval == max) /* between yellow and cyan */ fh = 2. + (l_float32)(bval - rval) / (l_float32)delta; else /* between cyan and magenta */ fh = 4. + (l_float32)(rval - gval) / (l_float32)delta; fh *= 40.0; if (fh < 0.0) fh += 240.0; hval = (l_int32)(fh + 0.5); } SET_DATA_BYTE(lined, j, hval); } } pixDestroy(&pixt); return pixd; } /*! * \brief pixConvertRGBToSaturation() * * \param[in] pixs 32 bpp RGB, or 8 bpp with colormap * \return pixd 8 bpp sat of HSV, or NULL on error * *
 * Notes:
 *      (1) The conversion to HSV sat is in-lined here.
 *      (2) If there is a colormap, it is removed.
 *      (3) If you just want the saturation component, this does it
 *          at about 12 Mpixels/sec/GHz.
 * 
*/ PIX * pixConvertRGBToSaturation(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, sval, minrg, min, maxrg, max, delta; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", __func__, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) /* gray; no chroma */ sval = 0; else sval = (l_int32)(255. * (l_float32)delta / (l_float32)max + 0.5); SET_DATA_BYTE(lined, j, sval); } } pixDestroy(&pixt); return pixd; } /*! * \brief pixConvertRGBToValue() * * \param[in] pixs 32 bpp RGB,or 8 bpp with colormap * \return pixd 8 bpp max component intensity of HSV, or NULL on error * *
 * Notes:
 *      (1) The conversion to HSV sat is in-lined here.
 *      (2) If there is a colormap, it is removed.
 *      (3) If you just want the value component, this does it
 *          at about 35 Mpixels/sec/GHz.
 * 
*/ PIX * pixConvertRGBToValue(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, maxrg, max; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", __func__, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); SET_DATA_BYTE(lined, j, max); } } pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Selection and display of range of colors in HSV space * *---------------------------------------------------------------------------*/ /*! * \brief pixMakeRangeMaskHS() * * \param[in] pixs 32 bpp rgb * \param[in] huecenter center value of hue range * \param[in] huehw half-width of hue range * \param[in] satcenter center value of saturation range * \param[in] sathw half-width of saturation range * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION * \return pixd 1 bpp mask over selected pixels, or NULL on error * *
 * Notes:
 *      (1) The pixels are selected based on the specified ranges of
 *          hue and saturation.  For selection or exclusion, the pixel
 *          HS component values must be within both ranges.  Care must
 *          be taken in finding the hue range because of wrap-around.
 *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
 *          pixels within the rectangular region specified in HS space.
 *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
 *          those within the rectangular region specified in HS space.
 * 
*/ PIX * pixMakeRangeMaskHS(PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 satcenter, l_int32 sathw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, hstart, hend, sstart, send, hval, sval; l_int32 *hlut, *slut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", __func__, NULL); /* Set up LUTs for hue and saturation. These have the value 1 * within the specified intervals of hue and saturation. */ hlut = (l_int32 *)LEPT_CALLOC(240, sizeof(l_int32)); slut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); sstart = L_MAX(0, satcenter - sathw); send = L_MIN(255, satcenter + sathw); for (i = sstart; i <= send; i++) slut[i] = 1; hstart = (huecenter - huehw + 240) % 240; hend = (huecenter + huehw + 240) % 240; if (hstart < hend) { for (i = hstart; i <= hend; i++) hlut[i] = 1; } else { /* wrap */ for (i = hstart; i < 240; i++) hlut[i] = 1; for (i = 0; i <= hend; i++) hlut[i] = 1; } /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; sval = (pixel >> L_GREEN_SHIFT) & 0xff; if (hlut[hval] == 1 && slut[sval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } LEPT_FREE(hlut); LEPT_FREE(slut); pixDestroy(&pixt); return pixd; } /*! * \brief pixMakeRangeMaskHV() * * \param[in] pixs 32 bpp rgb * \param[in] huecenter center value of hue range * \param[in] huehw half-width of hue range * \param[in] valcenter center value of max intensity range * \param[in] valhw half-width of max intensity range * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION * \return pixd 1 bpp mask over selected pixels, or NULL on error * *
 * Notes:
 *      (1) The pixels are selected based on the specified ranges of
 *          hue and max intensity values.  For selection or exclusion,
 *          the pixel HV component values must be within both ranges.
 *          Care must be taken in finding the hue range because of wrap-around.
 *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
 *          pixels within the rectangular region specified in HV space.
 *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
 *          those within the rectangular region specified in HV space.
 * 
*/ PIX * pixMakeRangeMaskHV(PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, hstart, hend, vstart, vend, hval, vval; l_int32 *hlut, *vlut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", __func__, NULL); /* Set up LUTs for hue and maximum intensity (val). These have * the value 1 within the specified intervals of hue and value. */ hlut = (l_int32 *)LEPT_CALLOC(240, sizeof(l_int32)); vlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); vstart = L_MAX(0, valcenter - valhw); vend = L_MIN(255, valcenter + valhw); for (i = vstart; i <= vend; i++) vlut[i] = 1; hstart = (huecenter - huehw + 240) % 240; hend = (huecenter + huehw + 240) % 240; if (hstart < hend) { for (i = hstart; i <= hend; i++) hlut[i] = 1; } else { for (i = hstart; i < 240; i++) hlut[i] = 1; for (i = 0; i <= hend; i++) hlut[i] = 1; } /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (hlut[hval] == 1 && vlut[vval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } LEPT_FREE(hlut); LEPT_FREE(vlut); pixDestroy(&pixt); return pixd; } /*! * \brief pixMakeRangeMaskSV() * * \param[in] pixs 32 bpp rgb * \param[in] satcenter center value of saturation range * \param[in] sathw half-width of saturation range * \param[in] valcenter center value of max intensity range * \param[in] valhw half-width of max intensity range * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION * \return pixd 1 bpp mask over selected pixels, or NULL on error * *
 * Notes:
 *      (1) The pixels are selected based on the specified ranges of
 *          saturation and max intensity (val).  For selection or
 *          exclusion, the pixel SV component values must be within both ranges.
 *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
 *          pixels within the rectangular region specified in SV space.
 *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
 *          those within the rectangular region specified in SV space.
 * 
*/ PIX * pixMakeRangeMaskSV(PIX *pixs, l_int32 satcenter, l_int32 sathw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, sval, vval, sstart, send, vstart, vend; l_int32 *slut, *vlut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", __func__, NULL); /* Set up LUTs for saturation and max intensity (val). * These have the value 1 within the specified intervals of * saturation and max intensity. */ slut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); vlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); sstart = L_MAX(0, satcenter - sathw); send = L_MIN(255, satcenter + sathw); vstart = L_MAX(0, valcenter - valhw); vend = L_MIN(255, valcenter + valhw); for (i = sstart; i <= send; i++) slut[i] = 1; for (i = vstart; i <= vend; i++) vlut[i] = 1; /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; sval = (pixel >> L_GREEN_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (slut[sval] == 1 && vlut[vval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } LEPT_FREE(slut); LEPT_FREE(vlut); pixDestroy(&pixt); return pixd; } /*! * \brief pixMakeHistoHS() * * \param[in] pixs HSV colorspace * \param[in] factor subsampling factor; integer * \param[out] pnahue [optional] hue histogram * \param[out] pnasat [optional] saturation histogram * \return pixd 32 bpp histogram in hue and saturation, or NULL on error * *
 * Notes:
 *      (1) pixs is a 32 bpp image in HSV colorspace; hue is in the "red"
 *          byte, saturation is in the "green" byte.
 *      (2) In pixd, hue is displayed vertically; saturation horizontally.
 *          The dimensions of pixd are w = 256, h = 240, and the depth
 *          is 32 bpp.  The value at each point is simply the number
 *          of pixels found at that value of hue and saturation.
 * 
*/ PIX * pixMakeHistoHS(PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnasat) { l_int32 i, j, w, h, wplt, hval, sval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nahue = NULL, *nasat = NULL; PIX *pixt, *pixd; if (pnahue) *pnahue = NULL; if (pnasat) *pnasat = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (pnahue) { nahue = numaCreate(240); numaSetCount(nahue, 240); *pnahue = nahue; } if (pnasat) { nasat = numaCreate(256); numaSetCount(nasat, 256); *pnasat = nasat; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-saturation histogram */ pixd = pixCreate(256, 240, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; #if DEBUG_HISTO if (hval > 239) { lept_stderr("hval = %d for (%d,%d)\n", hval, i, j); continue; } #endif /* DEBUG_HISTO */ sval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pnahue) numaShiftValue(nahue, hval, 1.0); if (pnasat) numaShiftValue(nasat, sval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[hval], sval); SET_DATA_FOUR_BYTES(lined32[hval], sval, nd + 1); } } LEPT_FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * \brief pixMakeHistoHV() * * \param[in] pixs HSV colorspace * \param[in] factor subsampling factor; integer * \param[out] pnahue [optional] hue histogram * \param[out] pnaval [optional] max intensity (value) histogram * \return pixd 32 bpp histogram in hue and value, or NULL on error * *
 * Notes:
 *      (1) %pixs is a 32 bpp image in HSV colorspace; hue is in the "red"
 *          byte, max intensity ("value") is in the "blue" byte.
 *      (2) In %pixd, hue is displayed vertically; intensity horizontally.
 *          The dimensions of %pixd are w = 256, h = 240, and the depth
 *          is 32 bpp.  The value at each point is simply the number
 *          of pixels found at that value of hue and intensity.
 * 
*/ PIX * pixMakeHistoHV(PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnaval) { l_int32 i, j, w, h, wplt, hval, vval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nahue = NULL, *naval = NULL; PIX *pixt, *pixd; if (pnahue) *pnahue = NULL; if (pnaval) *pnaval = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (pnahue) { nahue = numaCreate(240); numaSetCount(nahue, 240); *pnahue = nahue; } if (pnaval) { naval = numaCreate(256); numaSetCount(naval, 256); *pnaval = naval; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-value histogram */ pixd = pixCreate(256, 240, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (pnahue) numaShiftValue(nahue, hval, 1.0); if (pnaval) numaShiftValue(naval, vval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[hval], vval); SET_DATA_FOUR_BYTES(lined32[hval], vval, nd + 1); } } LEPT_FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * \brief pixMakeHistoSV() * * \param[in] pixs HSV colorspace * \param[in] factor subsampling factor; integer * \param[out] pnasat [optional] sat histogram * \param[out] pnaval [optional] max intensity (value) histogram * \return pixd 32 bpp histogram in sat and value, or NULL on error * *
 * Notes:
 *      (1) %pixs is a 32 bpp image in HSV colorspace; sat is in the "green"
 *          byte, max intensity ("value") is in the "blue" byte.
 *      (2) In %pixd, sat is displayed vertically; intensity horizontally.
 *          The dimensions of %pixd are w = 256, h = 256, and the depth
 *          is 32 bpp.  The value at each point is simply the number
 *          of pixels found at that value of saturation and intensity.
 * 
*/ PIX * pixMakeHistoSV(PIX *pixs, l_int32 factor, NUMA **pnasat, NUMA **pnaval) { l_int32 i, j, w, h, wplt, sval, vval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nasat = NULL, *naval = NULL; PIX *pixt, *pixd; if (pnasat) *pnasat = NULL; if (pnaval) *pnaval = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (pnasat) { nasat = numaCreate(256); numaSetCount(nasat, 256); *pnasat = nasat; } if (pnaval) { naval = numaCreate(256); numaSetCount(naval, 256); *pnaval = naval; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-value histogram */ pixd = pixCreate(256, 256, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; sval = (pixel >> L_GREEN_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (pnasat) numaShiftValue(nasat, sval, 1.0); if (pnaval) numaShiftValue(naval, vval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[sval], vval); SET_DATA_FOUR_BYTES(lined32[sval], vval, nd + 1); } } LEPT_FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * \brief pixFindHistoPeaksHSV() * * \param[in] pixs 32 bpp; HS, HV or SV histogram; not changed * \param[in] type L_HS_HISTO, L_HV_HISTO or L_SV_HISTO * \param[in] width half width of sliding window * \param[in] height half height of sliding window * \param[in] npeaks number of peaks to look for * \param[in] erasefactor ratio of erase window size to sliding window size * \param[out] ppta locations of max for each integrated peak area * \param[out] pnatot integrated peak areas * \param[out] ppixa [optional] pixa for debugging; NULL to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) %pixs is a 32 bpp histogram in a pair of HSV colorspace.  It
 *          should be thought of as a single sample with 32 bps (bits/sample).
 *      (2) After each peak is found, the peak is erased with a window
 *          that is centered on the peak and scaled from the sliding
 *          window by %erasefactor.  Typically, %erasefactor is chosen
 *          to be > 1.0.
 *      (3) Data for a maximum of %npeaks is returned in %pta and %natot.
 *      (4) For debugging, after the pixa is returned, display with:
 *          pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2);
 * 
*/ l_ok pixFindHistoPeaksHSV(PIX *pixs, l_int32 type, l_int32 width, l_int32 height, l_int32 npeaks, l_float32 erasefactor, PTA **ppta, NUMA **pnatot, PIXA **ppixa) { l_int32 i, xmax, ymax, ewidth, eheight; l_uint32 maxval; BOX *box; NUMA *natot; PIX *pixh, *pixw, *pix1, *pix2, *pix3; PTA *pta; if (ppixa) *ppixa = NULL; if (ppta) *ppta = NULL; if (pnatot) *pnatot = NULL; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", __func__, 1); if (!ppta || !pnatot) return ERROR_INT("&pta and &natot not both defined", __func__, 1); if (type != L_HS_HISTO && type != L_HV_HISTO && type != L_SV_HISTO) return ERROR_INT("invalid HSV histo type", __func__, 1); if ((pta = ptaCreate(npeaks)) == NULL) return ERROR_INT("pta not made", __func__, 1); *ppta = pta; if ((natot = numaCreate(npeaks)) == NULL) return ERROR_INT("natot not made", __func__, 1); *pnatot = natot; *ppta = pta; if (type == L_SV_HISTO) pixh = pixAddMirroredBorder(pixs, width + 1, width + 1, height + 1, height + 1); else /* type == L_HS_HISTO or type == L_HV_HISTO */ pixh = pixAddMixedBorder(pixs, width + 1, width + 1, height + 1, height + 1); /* Get the total count in the sliding window. If the window * fully covers the peak, this will be the integrated * volume under the peak. */ pixw = pixWindowedMean(pixh, width, height, 1, 0); pixDestroy(&pixh); /* Sequentially identify and erase peaks in the histogram. * If requested for debugging, save a pixa of the sequence of * false color histograms. */ if (ppixa) *ppixa = pixaCreate(0); for (i = 0; i < npeaks; i++) { pixGetMaxValueInRect(pixw, NULL, &maxval, &xmax, &ymax); if (maxval == 0) break; numaAddNumber(natot, maxval); ptaAddPt(pta, xmax, ymax); ewidth = (l_int32)(width * erasefactor); eheight = (l_int32)(height * erasefactor); box = boxCreate(xmax - ewidth, ymax - eheight, 2 * ewidth + 1, 2 * eheight + 1); if (ppixa) { pix1 = pixMaxDynamicRange(pixw, L_LINEAR_SCALE); pixaAddPix(*ppixa, pix1, L_INSERT); pix2 = pixConvertGrayToFalseColor(pix1, 1.0); pixaAddPix(*ppixa, pix2, L_INSERT); pix1 = pixMaxDynamicRange(pixw, L_LOG_SCALE); pix2 = pixConvertGrayToFalseColor(pix1, 1.0); pixaAddPix(*ppixa, pix2, L_INSERT); pix3 = pixConvertTo32(pix1); pixRenderHashBoxArb(pix3, box, 6, 2, L_NEG_SLOPE_LINE, 1, 255, 100, 100); pixaAddPix(*ppixa, pix3, L_INSERT); pixDestroy(&pix1); } pixClearInRect(pixw, box); boxDestroy(&box); if (type == L_HS_HISTO || type == L_HV_HISTO) { /* clear wraps at bottom and top */ if (ymax - eheight < 0) { /* overlap to bottom */ box = boxCreate(xmax - ewidth, 240 + ymax - eheight, 2 * ewidth + 1, eheight - ymax); } else if (ymax + eheight > 239) { /* overlap to top */ box = boxCreate(xmax - ewidth, 0, 2 * ewidth + 1, ymax + eheight - 239); } else { box = NULL; } if (box) { pixClearInRect(pixw, box); boxDestroy(&box); } } } pixDestroy(&pixw); return 0; } /*! * \brief displayHSVColorRange() * * \param[in] hval hue center value; in range [0 ... 240] * \param[in] sval saturation center value; in range [0 ... 255] * \param[in] vval max intensity value; in range [0 ... 255] * \param[in] huehw half-width of hue range; > 0 * \param[in] sathw half-width of saturation range; > 0 * \param[in] nsamp number of samplings in each half-width in hue and sat * \param[in] factor linear size of each color square, in pixels; > 3 * \return pixd 32 bpp set of color squares over input range; NULL on error * *
 * Notes:
 *      (1) The total number of color samplings in each of the hue
 *          and saturation directions is 2 * nsamp + 1.
 * 
*/ PIX * displayHSVColorRange(l_int32 hval, l_int32 sval, l_int32 vval, l_int32 huehw, l_int32 sathw, l_int32 nsamp, l_int32 factor) { l_int32 i, j, w, huedelta, satdelta, hue, sat, rval, gval, bval; PIX *pixt, *pixd; if (hval < 0 || hval > 240) return (PIX *)ERROR_PTR("invalid hval", __func__, NULL); if (huehw < 5 || huehw > 120) return (PIX *)ERROR_PTR("invalid huehw", __func__, NULL); if (sval - sathw < 0 || sval + sathw > 255) return (PIX *)ERROR_PTR("invalid sval/sathw", __func__, NULL); if (nsamp < 1 || factor < 3) return (PIX *)ERROR_PTR("invalid nsamp or rep. factor", __func__, NULL); if (vval < 0 || vval > 255) return (PIX *)ERROR_PTR("invalid vval", __func__, NULL); w = (2 * nsamp + 1); huedelta = (l_int32)((l_float32)huehw / (l_float32)nsamp); satdelta = (l_int32)((l_float32)sathw / (l_float32)nsamp); pixt = pixCreate(w, w, 32); for (i = 0; i < w; i++) { hue = hval + huedelta * (i - nsamp); if (hue < 0) hue += 240; if (hue >= 240) hue -= 240; for (j = 0; j < w; j++) { sat = sval + satdelta * (j - nsamp); convertHSVToRGB(hue, sat, vval, &rval, &gval, &bval); pixSetRGBPixel(pixt, j, i, rval, gval, bval); } } pixd = pixExpandReplicate(pixt, factor); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and YUV * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertRGBToYUV() * * \param[in] pixd can be NULL; if not NULL, must == pixs * \param[in] pixs * \return pixd always * *
 * Notes:
 *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
 *      (2) The Y, U and V values are stored in the same places as
 *          the r, g and b values, respectively.  Here, they are explicitly
 *          placed in the 3 MS bytes in the pixel.
 *      (3) Normalizing to 1 and considering the r,g,b components,
 *          a simple way to understand the YUV space is:
 *           ~ Y = weighted sum of (r,g,b)
 *           ~ U = weighted difference between Y and B
 *           ~ V = weighted difference between Y and R
 *      (4) Following video conventions, Y, U and V are in the range:
 *             Y: [16, 235]
 *             U: [16, 240]
 *             V: [16, 240]
 *      (5) For the coefficients in the transform matrices, see eq. 4 in
 *          "Frequently Asked Questions about Color" by Charles Poynton,
 *          //http://user.engineering.uiowa.edu/~aip/Misc/ColorFAQ.html
 * 
*/ PIX * pixConvertRGBToYUV(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; l_uint32 *line, *data; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", __func__, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or rgb", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertRGBToYUV(cmap); return pixd; } /* Convert RGB image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); line[j] = (yval << 24) | (uval << 16) | (vval << 8); } } return pixd; } /*! * \brief pixConvertYUVToRGB() * * \param[in] pixd can be NULL; if not NULL, must == pixs * \param[in] pixs * \return pixd always * *
 * Notes:
 *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
 *      (2) The user takes responsibility for making sure that pixs is
 *          in YUV space.
 *      (3) The Y, U and V values are stored in the same places as
 *          the r, g and b values, respectively.  Here, they are explicitly
 *          placed in the 3 MS bytes in the pixel.
 * 
*/ PIX * pixConvertYUVToRGB(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", __func__, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or hsv", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertYUVToRGB(cmap); return pixd; } /* Convert YUV image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; yval = pixel >> 24; uval = (pixel >> 16) & 0xff; vval = (pixel >> 8) & 0xff; convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } return pixd; } /*! * \brief convertRGBToYUV() * * \param[in] rval, gval, bval RGB input * \param[out] pyval, puval, pvval equivalent YUV values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The range of returned values is:
 *            Y [16 ... 235]
 *            U [16 ... 240]
 *            V [16 ... 240]
 * 
*/ l_ok convertRGBToYUV(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pyval, l_int32 *puval, l_int32 *pvval) { l_float32 norm; if (pyval) *pyval = 0; if (puval) *puval = 0; if (pvval) *pvval = 0; if (!pyval || !puval || !pvval) return ERROR_INT("&yval, &uval, &vval not all defined", __func__, 1); norm = 1.0 / 256.; *pyval = (l_int32)(16.0 + norm * (65.738 * rval + 129.057 * gval + 25.064 * bval) + 0.5); *puval = (l_int32)(128.0 + norm * (-37.945 * rval -74.494 * gval + 112.439 * bval) + 0.5); *pvval = (l_int32)(128.0 + norm * (112.439 * rval - 94.154 * gval - 18.285 * bval) + 0.5); return 0; } /*! * \brief convertYUVToRGB() * * \param[in] yval, uval, vval YUV input * \param[out] prval, pgval, pbval equivalent RGB values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The range of valid input values is:
 *            Y [16 ... 235]
 *            U [16 ... 240]
 *            V [16 ... 240]
 *      (2) Conversion of RGB --> YUV --> RGB leaves the image unchanged.
 *      (3) The YUV gamut is larger than the RBG gamut; many YUV values
 *          will result in an invalid RGB value.  We clip individual
 *          r,g,b components to the range [0, 255], and do not test input.
 * 
*/ l_ok convertYUVToRGB(l_int32 yval, l_int32 uval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 rval, gval, bval; l_float32 norm, ym, um, vm; if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", __func__, 1); norm = 1.0 / 256.; ym = yval - 16.0; um = uval - 128.0; vm = vval - 128.0; rval = (l_int32)(norm * (298.082 * ym + 408.583 * vm) + 0.5); gval = (l_int32)(norm * (298.082 * ym - 100.291 * um - 208.120 * vm) + 0.5); bval = (l_int32)(norm * (298.082 * ym + 516.411 * um) + 0.5); *prval = L_MIN(255, L_MAX(0, rval)); *pgval = L_MIN(255, L_MAX(0, gval)); *pbval = L_MIN(255, L_MAX(0, bval)); return 0; } /*! * \brief pixcmapConvertRGBToYUV() * * \param[in] cmap * \return 0 if OK; 1 on error * *
 * Notes:
 *      ~ in-place transform
 *      ~ See convertRGBToYUV() for def'n of YUV space.
 *      ~ replaces: r --> y, g --> u, b --> v
 * 
*/ l_ok pixcmapConvertRGBToYUV(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); pixcmapResetColor(cmap, i, yval, uval, vval); } return 0; } /*! * \brief pixcmapConvertYUVToRGB() * * \param[in] cmap * \return 0 if OK; 1 on error * *
 * Notes:
 *      ~ in-place transform
 *      ~ See convertRGBToYUV() for def'n of YUV space.
 *      ~ replaces: y --> r, u --> g, v --> b
 * 
*/ l_ok pixcmapConvertYUVToRGB(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &yval, &uval, &vval); convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and XYZ * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertRGBToXYZ() * * \param[in] pixs 32 bpp rgb * \return fpixa xyz * *
 * Notes:
 *      (1) The [x,y,z] values are stored as float values in three fpix
 *          that are returned in a fpixa.
 *      (2) The XYZ color space was defined in 1931 as a reference model that
 *          simulates human color perception.  When Y is taken as luminance,
 *          the values of X and Z constitute a color plane representing
 *          all the hues that can be perceived.  This gamut of colors
 *          is larger than the gamuts that can be displayed or printed.
 *          For example, although all rgb values map to XYZ, the converse
 *          is not true.
 *      (3) The value of the coefficients depends on the illuminant.  We use
 *          coefficients for converting sRGB under D65 (the spectrum from
 *          a 6500 degree K black body; an approximation to daylight color).
 *          See, e.g.,
 *             http://www.cs.rit.edu/~ncs/color/t_convert.html
 *          For more general information on color transforms, see:
 *             http://www.brucelindbloom.com/
 *             http://user.engineering.uiowa.edu/~aip/Misc/ColorFAQ.html
 *             http://en.wikipedia.org/wiki/CIE_1931_color_space
 * 
*/ FPIXA * pixConvertRGBToXYZ(PIX *pixs) { l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; l_uint32 *lines, *datas; l_float32 fxval, fyval, fzval; l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; FPIX *fpix; FPIXA *fpixa; if (!pixs || pixGetDepth(pixs) != 32) return (FPIXA *)ERROR_PTR("pixs undefined or not rgb", __func__, NULL); /* Convert RGB image */ pixGetDimensions(pixs, &w, &h, NULL); fpixa = fpixaCreate(3); for (i = 0; i < 3; i++) { fpix = fpixCreate(w, h); fpixaAddFPix(fpixa, fpix, L_INSERT); } wpls = pixGetWpl(pixs); wpld = fpixGetWpl(fpix); datas = pixGetData(pixs); datax = fpixaGetData(fpixa, 0); datay = fpixaGetData(fpixa, 1); dataz = fpixaGetData(fpixa, 2); for (i = 0; i < h; i++) { lines = datas + i * wpls; linex = datax + i * wpld; liney = datay + i * wpld; linez = dataz + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); convertRGBToXYZ(rval, gval, bval, &fxval, &fyval, &fzval); *(linex + j) = fxval; *(liney + j) = fyval; *(linez + j) = fzval; } } return fpixa; } /*! * \brief fpixaConvertXYZToRGB() * * \param[in] fpixa three fpix: x,y,z * \return pixd 32 bpp rgb * *
 * Notes:
 *      (1) The xyz image is stored in three fpix.
 *      (2) For values of xyz that are out of gamut for rgb, the rgb
 *          components are set to the closest valid color.
 * 
*/ PIX * fpixaConvertXYZToRGB(FPIXA *fpixa) { l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; l_float32 fxval, fyval, fzval; l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; l_uint32 *lined, *datad; PIX *pixd; FPIX *fpix; if (!fpixa || fpixaGetCount(fpixa) != 3) return (PIX *)ERROR_PTR("fpixa undefined or invalid", __func__, NULL); /* Convert XYZ image */ if (fpixaGetFPixDimensions(fpixa, 0, &w, &h)) return (PIX *)ERROR_PTR("fpixa dimensions not found", __func__, NULL); pixd = pixCreate(w, h, 32); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); datax = fpixaGetData(fpixa, 0); datay = fpixaGetData(fpixa, 1); dataz = fpixaGetData(fpixa, 2); fpix = fpixaGetFPix(fpixa, 0, L_CLONE); wpls = fpixGetWpl(fpix); fpixDestroy(&fpix); for (i = 0; i < h; i++) { linex = datax + i * wpls; liney = datay + i * wpls; linez = dataz + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { fxval = linex[j]; fyval = liney[j]; fzval = linez[j]; convertXYZToRGB(fxval, fyval, fzval, 0, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, lined + j); } } return pixd; } /*! * \brief convertRGBToXYZ() * * \param[in] rval, gval, bval rgb input * \param[out] pfxval, pfyval, pfzval equivalent xyz values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) These conversions are for illuminant D65 acting on linear sRGB
 *          values.
 * 
*/ l_ok convertRGBToXYZ(l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pfxval, l_float32 *pfyval, l_float32 *pfzval) { if (pfxval) *pfxval = 0.0; if (pfyval) *pfyval = 0.0; if (pfzval) *pfzval = 0.0; if (!pfxval || !pfyval || !pfzval) return ERROR_INT("&xval, &yval, &zval not all defined", __func__, 1); *pfxval = 0.4125 * rval + 0.3576 * gval + 0.1804 * bval; *pfyval = 0.2127 * rval + 0.7152 * gval + 0.0722 * bval; *pfzval = 0.0193 * rval + 0.1192 * gval + 0.9502 * bval; return 0; } /*! * \brief convertXYZToRGB() * * \param[in] fxval, fyval, fzval * \param[in] blackout 0 to output nearest color if out of gamut; * 1 to output black * \param[out] prval, pgval, pbval 32 bpp rgb values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For values of xyz that are out of gamut for rgb, at least
 *          one of the r, g or b components will be either less than 0
 *          or greater than 255.  For that situation:
 *            * if %blackout == 0, the individual component(s) that are out
 *              of gamut will be set to 0 or 255, respectively.
 *            * if %blackout == 1, the output color will be set to black
 * 
*/ l_ok convertXYZToRGB(l_float32 fxval, l_float32 fyval, l_float32 fzval, l_int32 blackout, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 rval, gval, bval; if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval ||!pbval) return ERROR_INT("&rval, &gval, &bval not all defined", __func__, 1); *prval = *pgval = *pbval = 0; rval = (l_int32)(3.2405 * fxval - 1.5372 * fyval - 0.4985 * fzval + 0.5); gval = (l_int32)(-0.9693 * fxval + 1.8760 * fyval + 0.0416 * fzval + 0.5); bval = (l_int32)(0.0556 * fxval - 0.2040 * fyval + 1.0573 * fzval + 0.5); if (blackout == 0) { /* the usual situation; use nearest rgb color */ *prval = L_MAX(0, L_MIN(rval, 255)); *pgval = L_MAX(0, L_MIN(gval, 255)); *pbval = L_MAX(0, L_MIN(bval, 255)); } else { /* use black for out of gamut */ if (rval >= 0 && rval < 256 && gval >= 0 && gval < 256 && bval >= 0 && bval < 256) { /* in gamut */ *prval = rval; *pgval = gval; *pbval = bval; } } return 0; } /*---------------------------------------------------------------------------* * Colorspace conversion between XYZ and LAB * *---------------------------------------------------------------------------*/ /*! * \brief fpixaConvertXYZToLAB() * * \param[in] fpixas xyz * \return fpixa lab * *
 * Notes:
 *      (1) The input [x,y,z] and output [l,a,b] values are stored as
 *          float values, each set in three fpix.
 *      (2) The CIE LAB color space was invented in 1976, as an
 *          absolute reference for specifying colors that we can
 *          perceive, independently of the rendering device.  It was
 *          invented to align color display and print images.
 *          For information, see:
 *             http://www.brucelindbloom.com/
 *             http://en.wikipedia.org/wiki/Lab_color_space
 * 
*/ FPIXA * fpixaConvertXYZToLAB(FPIXA *fpixas) { l_int32 w, h, wpl, i, j; l_float32 fxval, fyval, fzval, flval, faval, fbval; l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; FPIX *fpix; FPIXA *fpixad; if (!fpixas || fpixaGetCount(fpixas) != 3) return (FPIXA *)ERROR_PTR("fpixas undefined/invalid", __func__, NULL); /* Convert XYZ image */ if (fpixaGetFPixDimensions(fpixas, 0, &w, &h)) return (FPIXA *)ERROR_PTR("fpixas sizes not found", __func__, NULL); fpixad = fpixaCreate(3); for (i = 0; i < 3; i++) { fpix = fpixCreate(w, h); fpixaAddFPix(fpixad, fpix, L_INSERT); } wpl = fpixGetWpl(fpix); datax = fpixaGetData(fpixas, 0); datay = fpixaGetData(fpixas, 1); dataz = fpixaGetData(fpixas, 2); datal = fpixaGetData(fpixad, 0); dataa = fpixaGetData(fpixad, 1); datab = fpixaGetData(fpixad, 2); /* Convert XYZ image */ for (i = 0; i < h; i++) { linex = datax + i * wpl; liney = datay + i * wpl; linez = dataz + i * wpl; linel = datal + i * wpl; linea = dataa + i * wpl; lineb = datab + i * wpl; for (j = 0; j < w; j++) { fxval = *(linex + j); fyval = *(liney + j); fzval = *(linez + j); convertXYZToLAB(fxval, fyval, fzval, &flval, &faval, &fbval); *(linel + j) = flval; *(linea + j) = faval; *(lineb + j) = fbval; } } return fpixad; } /*! * \brief fpixaConvertLABToXYZ() * * \param[in] fpixas lab * \return fpixa xyz * *
 * Notes:
 *      (1) The input [l,a,b] and output [x,y,z] values are stored as
 *          float values, each set in three fpix.
 * 
*/ FPIXA * fpixaConvertLABToXYZ(FPIXA *fpixas) { l_int32 w, h, wpl, i, j; l_float32 fxval, fyval, fzval, flval, faval, fbval; l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; FPIX *fpix; FPIXA *fpixad; if (!fpixas || fpixaGetCount(fpixas) != 3) return (FPIXA *)ERROR_PTR("fpixas undefined/invalid", __func__, NULL); /* Convert LAB image */ if (fpixaGetFPixDimensions(fpixas, 0, &w, &h)) return (FPIXA *)ERROR_PTR("fpixas sizes not found", __func__, NULL); fpixad = fpixaCreate(3); for (i = 0; i < 3; i++) { fpix = fpixCreate(w, h); fpixaAddFPix(fpixad, fpix, L_INSERT); } wpl = fpixGetWpl(fpix); datal = fpixaGetData(fpixas, 0); dataa = fpixaGetData(fpixas, 1); datab = fpixaGetData(fpixas, 2); datax = fpixaGetData(fpixad, 0); datay = fpixaGetData(fpixad, 1); dataz = fpixaGetData(fpixad, 2); /* Convert XYZ image */ for (i = 0; i < h; i++) { linel = datal + i * wpl; linea = dataa + i * wpl; lineb = datab + i * wpl; linex = datax + i * wpl; liney = datay + i * wpl; linez = dataz + i * wpl; for (j = 0; j < w; j++) { flval = *(linel + j); faval = *(linea + j); fbval = *(lineb + j); convertLABToXYZ(flval, faval, fbval, &fxval, &fyval, &fzval); *(linex + j) = fxval; *(liney + j) = fyval; *(linez + j) = fzval; } } return fpixad; } /*! * \brief convertXYZToLAB() * * \param[in] xval, yval, zval input xyz * \param[out] plval, paval, pbval equivalent lab values * \return 0 if OK, 1 on error */ l_ok convertXYZToLAB(l_float32 xval, l_float32 yval, l_float32 zval, l_float32 *plval, l_float32 *paval, l_float32 *pbval) { l_float32 xn, yn, zn, fx, fy, fz; if (plval) *plval = 0.0; if (paval) *paval = 0.0; if (pbval) *pbval = 0.0; if (!plval || !paval || !pbval) return ERROR_INT("&lval, &aval, &bval not all defined", __func__, 1); /* First normalize to the corresponding white values */ xn = 0.0041259 * xval; yn = 0.0039216 * yval; zn = 0.0036012 * zval; /* Then apply the lab_forward function */ fx = lab_forward(xn); fy = lab_forward(yn); fz = lab_forward(zn); *plval = 116.0 * fy - 16.0; *paval = 500.0 * (fx - fy); *pbval = 200.0 * (fy - fz); return 0; } /*! * \brief convertLABToXYZ() * * \param[in] lval, aval, bval input lab * \param[out] pxval, pyval, pzval equivalent xyz values * \return 0 if OK, 1 on error */ l_ok convertLABToXYZ(l_float32 lval, l_float32 aval, l_float32 bval, l_float32 *pxval, l_float32 *pyval, l_float32 *pzval) { l_float32 fx, fy, fz; l_float32 xw = 242.37f; /* x component corresponding to rgb white */ l_float32 yw = 255.0f; /* y component corresponding to rgb white */ l_float32 zw = 277.69f; /* z component corresponding to rgb white */ if (pxval) *pxval = 0.0; if (pyval) *pyval = 0.0; if (pzval) *pzval = 0.0; if (!pxval || !pyval || !pzval) return ERROR_INT("&xval, &yval, &zval not all defined", __func__, 1); fy = 0.0086207 * (16.0 + lval); fx = fy + 0.002 * aval; fz = fy - 0.005 * bval; *pxval = xw * lab_reverse(fx); *pyval = yw * lab_reverse(fy); *pzval = zw * lab_reverse(fz); return 0; } /* * See http://en.wikipedia.org/wiki/Lab_color_space for formulas. * This is the forward function: from xyz to lab. It includes a rational * function approximation over [0.008856 ... 1] to the cube root, from * "Fast Color Space Transformations Using Minimax Approximations", * M. Celebi et al, http://arxiv.org/pdf/1009.0854v1.pdf. */ static l_float32 lab_forward(l_float32 v) { const l_float32 f_thresh = 0.008856f; /* (6/29)^3 */ const l_float32 f_factor = 7.787f; /* (1/3) * (29/6)^2) */ const l_float32 f_offset = 0.13793f; /* 4/29 */ if (v > f_thresh) { #if SLOW_CUBE_ROOT return powf(v, 0.333333); #else l_float32 num, den; num = 4.37089e-04 + v * (9.52695e-02 + v * (1.25201 + v * 1.30273)); den = 3.91236e-03 + v * (2.95408e-01 + v * (1.71714 + v * 6.34341e-01)); return num / den; #endif } else { return f_factor * v + f_offset; } } /* * See http://en.wikipedia.org/wiki/Lab_color_space for formulas. * This is the reverse (inverse) function: from lab to xyz. */ static l_float32 lab_reverse(l_float32 v) { const l_float32 r_thresh = 0.20690f; /* 6/29 */ const l_float32 r_factor = 0.12842f; /* 3 * (6/29)^2 */ const l_float32 r_offset = 0.13793f; /* 4/29 */ if (v > r_thresh) { return v * v * v; } else { return r_factor * (v - r_offset); } } /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and LAB * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertRGBToLAB() * * \param[in] pixs 32 bpp rgb * \return fpixa lab * *
 * Notes:
 *      (1) The [l,a,b] values are stored as float values in three fpix
 *          that are returned in a fpixa.
 * 
*/ FPIXA * pixConvertRGBToLAB(PIX *pixs) { l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; l_uint32 *lines, *datas; l_float32 flval, faval, fbval; l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; FPIX *fpix; FPIXA *fpixa; if (!pixs || pixGetDepth(pixs) != 32) return (FPIXA *)ERROR_PTR("pixs undefined or not rgb", __func__, NULL); /* Convert RGB image */ pixGetDimensions(pixs, &w, &h, NULL); fpixa = fpixaCreate(3); for (i = 0; i < 3; i++) { fpix = fpixCreate(w, h); fpixaAddFPix(fpixa, fpix, L_INSERT); } wpls = pixGetWpl(pixs); wpld = fpixGetWpl(fpix); datas = pixGetData(pixs); datal = fpixaGetData(fpixa, 0); dataa = fpixaGetData(fpixa, 1); datab = fpixaGetData(fpixa, 2); for (i = 0; i < h; i++) { lines = datas + i * wpls; linel = datal + i * wpld; linea = dataa + i * wpld; lineb = datab + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); convertRGBToLAB(rval, gval, bval, &flval, &faval, &fbval); *(linel + j) = flval; *(linea + j) = faval; *(lineb + j) = fbval; } } return fpixa; } /*! * \brief fpixaConvertLABToRGB() * * \param[in] fpixa three fpix: l,a,b * \return pixd 32 bpp rgb * *
 * Notes:
 *      (1) The lab image is stored in three fpix.
 * 
*/ PIX * fpixaConvertLABToRGB(FPIXA *fpixa) { l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; l_float32 flval, faval, fbval; l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; l_uint32 *lined, *datad; PIX *pixd; FPIX *fpix; if (!fpixa || fpixaGetCount(fpixa) != 3) return (PIX *)ERROR_PTR("fpixa undefined or invalid", __func__, NULL); /* Convert LAB image */ if (fpixaGetFPixDimensions(fpixa, 0, &w, &h)) return (PIX *)ERROR_PTR("fpixa dimensions not found", __func__, NULL); pixd = pixCreate(w, h, 32); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); datal = fpixaGetData(fpixa, 0); dataa = fpixaGetData(fpixa, 1); datab = fpixaGetData(fpixa, 2); fpix = fpixaGetFPix(fpixa, 0, L_CLONE); wpls = fpixGetWpl(fpix); fpixDestroy(&fpix); for (i = 0; i < h; i++) { linel = datal + i * wpls; linea = dataa + i * wpls; lineb = datab + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { flval = linel[j]; faval = linea[j]; fbval = lineb[j]; convertLABToRGB(flval, faval, fbval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, lined + j); } } return pixd; } /*! * \brief convertRGBToLAB() * * \param[in] rval, gval, bval rgb input * \param[out] pflval, pfaval, pfbval equivalent lab values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) These conversions are for illuminant D65 acting on linear sRGB
 *          values.
 * 
*/ l_ok convertRGBToLAB(l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pflval, l_float32 *pfaval, l_float32 *pfbval) { l_float32 fxval, fyval, fzval; if (pflval) *pflval = 0.0; if (pfaval) *pfaval = 0.0; if (pfbval) *pfbval = 0.0; if (!pflval || !pfaval || !pfbval) return ERROR_INT("&flval, &faval, &fbval not all defined", __func__, 1); convertRGBToXYZ(rval, gval, bval, &fxval, &fyval, &fzval); convertXYZToLAB(fxval, fyval, fzval, pflval, pfaval, pfbval); return 0; } /*! * \brief convertLABToRGB() * * \param[in] flval, faval, fbval input lab * \param[out] prval, pgval, pbval equivalent rgb values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For values of lab that are out of gamut for rgb, the rgb
 *          components are set to the closest valid color.
 * 
*/ l_ok convertLABToRGB(l_float32 flval, l_float32 faval, l_float32 fbval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_float32 fxval, fyval, fzval; if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", __func__, 1); convertLABToXYZ(flval, faval, fbval, &fxval, &fyval, &fzval); convertXYZToRGB(fxval, fyval, fzval, 0, prval, pgval, pbval); return 0; } /*---------------------------------------------------------------------------* * Gamut display of RGB color space * *---------------------------------------------------------------------------*/ /*! * \brief pixMakeGamutRGB() * * \param[in] scale default = 4 * \return pix2 32 bpp rgb * *
 * Notes:
 *      (1) This is an image that has all RGB colors, divided into 2^15
 *          cubical cells with 8x8x8 = 512 pixel values.  Each of the 32
 *          subimages has a constant value of B, with R and G varying over
 *          their gamut in 32 steps of size 8.
 *      (2) The %scale parameter determines the replication in both x and y
 *          of each of the 2^15 colors.  With a scale factor of 4, the
 *          output image has 4 * 4 * 2^15 = 0.5M pixels.
 *      (3) This useful for visualizing how filters, such as
 *          pixMakeArbMaskFromRGB(), separate colors into sets.
 * 
*/ PIX * pixMakeGamutRGB(l_int32 scale) { l_int32 i, j, k; l_uint32 val32; PIX *pix1, *pix2; PIXA *pixa; if (scale <= 0) scale = 8; /* default */ pixa = pixaCreate(32); for (k = 0; k < 32; k++) { pix1 = pixCreate(32, 32, 32); for (i = 0; i < 32; i++) { for (j = 0; j < 32; j++) { composeRGBPixel(8 * j, 8 * i, 8 * k, &val32); pixSetPixel(pix1, j, i, val32); } } pixaAddPix(pixa, pix1, L_INSERT); } pix2 = pixaDisplayTiledInColumns(pixa, 8, scale, 5, 0); pixaDestroy(&pixa); return pix2; } leptonica-1.86.0/src/compare.c000066400000000000000000004130331506303110300161410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file compare.c *
 *
 *      Test for pix equality
 *           l_int32     pixEqual()
 *           l_int32     pixEqualWithAlpha()
 *           l_int32     pixEqualWithCmap()
 *           l_int32     cmapEqual()
 *           l_int32     pixUsesCmapColor()
 *
 *      Binary correlation
 *           l_int32     pixCorrelationBinary()
 *
 *      Difference of two images of same size
 *           l_int32     pixDisplayDiff()
 *           l_int32     pixDisplayDiffBinary()
 *           l_int32     pixCompareBinary()
 *           l_int32     pixCompareGrayOrRGB()
 *           l_int32     pixCompareGray()
 *           l_int32     pixCompareRGB()
 *           l_int32     pixCompareTiled()
 *
 *      Other measures of the difference of two images of the same size
 *           NUMA       *pixCompareRankDifference()
 *           l_int32     pixTestForSimilarity()
 *           l_int32     pixGetDifferenceStats()
 *           NUMA       *pixGetDifferenceHistogram()
 *           l_int32     pixGetPerceptualDiff()
 *           l_int32     pixGetPSNR()
 *
 *      Comparison of photo regions by histogram
 *           l_int32     pixaComparePhotoRegionsByHisto()  -- top-level
 *           l_int32     pixComparePhotoRegionsByHisto()  -- top-level for 2
 *           l_int32     pixGenPhotoHistos()
 *           PIX        *pixPadToCenterCentroid()
 *           l_int32     pixCentroid8()
 *           l_int32     pixDecideIfPhotoImage()
 *       static l_int32  findHistoGridDimensions()
 *           l_int32     compareTilesByHisto()
 *
 *           l_int32     pixCompareGrayByHisto()  -- top-level for 2
 *       static l_int32  pixCompareTilesByHisto()
 *           l_int32     pixCropAlignedToCentroid()
 *
 *           l_uint8    *l_compressGrayHistograms()
 *           NUMAA      *l_uncompressGrayHistograms()
 *
 *      Translated images at the same resolution
 *           l_int32     pixCompareWithTranslation()
 *           l_int32     pixBestCorrelation()
 *
 *  For comparing images using tiled histograms, essentially all the
 *  computation goes into deciding if a region of an image is a photo,
 *  whether that photo region is amenable to similarity measurements
 *  using histograms, and finally the calculation of the gray histograms
 *  for each of the tiled regions.  The actual comparison is essentially
 *  instantaneous.  Therefore, with a large number of images to compare
 *  with each other, it is important to first calculate the histograms
 *  for each image.  Then the comparisons, which go as the square of the
 *  number of images, actually takes no time.
 *
 *  A high level function that takes a pixa of images and does
 *  all comparisons, pixaComparePhotosByHisto(), uses this split
 *  approach.  It pads the images so that the centroid is in the center,
 *  which will allow the tiles to be better aligned.
 *
 *  For testing purposes, two functions are given that do all the work
 *  to compare just two photo regions:
 *    *  pixComparePhotoRegionsByHisto() uses the split approach, qualifying
 *       the images first with pixGenPhotoHistos(), and then comparing
 *       with compareTilesByHisto().
 *    *  pixCompareGrayByHisto() aligns the two images by centroid
 *       and calls pixCompareTilesByHisto() to generate the histograms
 *       and do the comparison.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Small enough to consider equal to 0.0, for plot output */ static const l_float32 TINY = 0.00001f; static l_ok findHistoGridDimensions(l_int32 n, l_int32 w, l_int32 h, l_int32 *pnx, l_int32 *pny, l_int32 debug); static l_ok pixCompareTilesByHisto(PIX *pix1, PIX *pix2, l_int32 maxgray, l_int32 factor, l_int32 n, l_float32 *pscore, PIXA *pixadebug); /*------------------------------------------------------------------* * Test for pix equality * *------------------------------------------------------------------*/ /*! * \brief pixEqual() * * \param[in] pix1 * \param[in] pix2 * \param[out] psame 1 if same; 0 if different * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Equality is defined as having the same pixel values for
 *          each respective image pixel.
 *      (2) This works on two pix of any depth.  If one or both pix
 *          have a colormap, the depths can be different and the
 *          two pix can still be equal.
 *      (3) This ignores the alpha component for 32 bpp images.
 *      (4) If both pix have colormaps and the depths are equal,
 *          use the pixEqualWithCmap() function, which does a fast
 *          comparison if the colormaps are identical and a relatively
 *          slow comparison otherwise.
 *      (5) In all other cases, any existing colormaps must first be
 *          removed before doing pixel comparison.  After the colormaps
 *          are removed, the resulting two images must have the same depth.
 *          The "lowest common denominator" is RGB, but this is only
 *          chosen when necessary, or when both have colormaps but
 *          different depths.
 *      (6) For images without colormaps that are not 32 bpp, all bits
 *          in the image part of the data array must be identical.
 * 
*/ l_ok pixEqual(PIX *pix1, PIX *pix2, l_int32 *psame) { return pixEqualWithAlpha(pix1, pix2, 0, psame); } /*! * \brief pixEqualWithAlpha() * * \param[in] pix1 * \param[in] pix2 * \param[in] use_alpha 1 to compare alpha in RGBA; 0 to ignore * \param[out] psame 1 if same; 0 if different * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See notes in pixEqual().
 *      (2) This is more general than pixEqual(), in that for 32 bpp
 *          RGBA images, where spp = 4, you can optionally include
 *          the alpha component in the comparison.
 * 
*/ l_ok pixEqualWithAlpha(PIX *pix1, PIX *pix2, l_int32 use_alpha, l_int32 *psame) { l_int32 w1, h1, d1, w2, h2, d2, wpl1, wpl2; l_int32 spp1, spp2, i, j, color, mismatch, opaque; l_int32 fullwords, linebits, endbits; l_uint32 endmask, wordmask; l_uint32 *data1, *data2, *line1, *line2; PIX *pixs1, *pixs2, *pixt1, *pixt2, *pixalpha; PIXCMAP *cmap1, *cmap2; if (!psame) return ERROR_INT("psame not defined", __func__, 1); *psame = 0; /* init to not equal */ if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); pixGetDimensions(pix1, &w1, &h1, &d1); pixGetDimensions(pix2, &w2, &h2, &d2); if (w1 != w2 || h1 != h2) { L_INFO("pix sizes differ\n", __func__); return 0; } /* Suppose the use_alpha flag is true. * If only one of two 32 bpp images has spp == 4, we call that * a "mismatch" of the alpha component. In the case of a mismatch, * if the 4 bpp pix does not have all alpha components opaque (255), * the images are not-equal. However if they are all opaque, * this image is equivalent to spp == 3, so we allow the * comparison to go forward, testing only for the RGB equality. */ spp1 = pixGetSpp(pix1); spp2 = pixGetSpp(pix2); mismatch = 0; if (use_alpha && d1 == 32 && d2 == 32) { mismatch = ((spp1 == 4 && spp2 != 4) || (spp1 != 4 && spp2 == 4)); if (mismatch) { pixalpha = (spp1 == 4) ? pix1 : pix2; pixAlphaIsOpaque(pixalpha, &opaque); if (!opaque) { L_INFO("just one pix has a non-opaque alpha layer\n", __func__); return 0; } } } cmap1 = pixGetColormap(pix1); cmap2 = pixGetColormap(pix2); if (!cmap1 && !cmap2 && (d1 != d2) && (d1 == 32 || d2 == 32)) { L_INFO("no colormaps, pix depths unequal, and one of them is RGB\n", __func__); return 0; } if (cmap1 && cmap2 && (d1 == d2)) /* use special function */ return pixEqualWithCmap(pix1, pix2, psame); /* Must remove colormaps if they exist, and in the process * end up with the resulting images having the same depth. */ if (cmap1 && !cmap2) { pixUsesCmapColor(pix1, &color); if (color && d2 <= 8) /* can't be equal */ return 0; if (d2 < 8) pixs2 = pixConvertTo8(pix2, FALSE); else pixs2 = pixClone(pix2); if (d2 <= 8) pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_GRAYSCALE); else pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); } else if (!cmap1 && cmap2) { pixUsesCmapColor(pix2, &color); if (color && d1 <= 8) /* can't be equal */ return 0; if (d1 < 8) pixs1 = pixConvertTo8(pix1, FALSE); else pixs1 = pixClone(pix1); if (d1 <= 8) pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_GRAYSCALE); else pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); } else if (cmap1 && cmap2) { /* depths not equal; use rgb */ pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); } else { /* no colormaps */ pixs1 = pixClone(pix1); pixs2 = pixClone(pix2); } /* OK, we have no colormaps, but the depths may still be different */ d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 != d2) { if (d1 == 16 || d2 == 16) { L_INFO("one pix is 16 bpp\n", __func__); pixDestroy(&pixs1); pixDestroy(&pixs2); return 0; } pixt1 = pixConvertLossless(pixs1, 8); pixt2 = pixConvertLossless(pixs2, 8); if (!pixt1 || !pixt2) { L_INFO("failure to convert to 8 bpp\n", __func__); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } } else { pixt1 = pixClone(pixs1); pixt2 = pixClone(pixs2); } pixDestroy(&pixs1); pixDestroy(&pixs2); /* No colormaps, equal depths; do pixel comparisons */ d1 = pixGetDepth(pixt1); d2 = pixGetDepth(pixt2); wpl1 = pixGetWpl(pixt1); wpl2 = pixGetWpl(pixt2); data1 = pixGetData(pixt1); data2 = pixGetData(pixt2); if (d1 == 32) { /* test either RGB or RGBA pixels */ if (use_alpha && !mismatch) wordmask = (spp1 == 3) ? 0xffffff00 : 0xffffffff; else wordmask = 0xffffff00; for (i = 0; i < h1; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < wpl1; j++) { if ((*line1 ^ *line2) & wordmask) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } line1++; line2++; } } } else { /* all bits count */ linebits = d1 * w1; fullwords = linebits / 32; endbits = linebits & 31; endmask = (endbits == 0) ? 0 : (0xffffffff << (32 - endbits)); for (i = 0; i < h1; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < fullwords; j++) { if (*line1 ^ *line2) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } line1++; line2++; } if (endbits) { if ((*line1 ^ *line2) & endmask) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } } } } pixDestroy(&pixt1); pixDestroy(&pixt2); *psame = 1; return 0; } /*! * \brief pixEqualWithCmap() * * \param[in] pix1 * \param[in] pix2 * \param[out] psame * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns same = TRUE if the images have identical content.
 *      (2) Both pix must have a colormap, and be of equal size and depth.
 *          If these conditions are not satisfied, it is not an error;
 *          the returned result is same = FALSE.
 *      (3) We then check whether the colormaps are the same; if so,
 *          the comparison proceeds 32 bits at a time.
 *      (4) If the colormaps are different, the comparison is done by
 *          slow brute force.
 * 
*/ l_ok pixEqualWithCmap(PIX *pix1, PIX *pix2, l_int32 *psame) { l_int32 d, w, h, wpl1, wpl2, i, j, linebits, fullwords, endbits; l_int32 rval1, rval2, gval1, gval2, bval1, bval2, samecmaps; l_uint32 endmask, val1, val2; l_uint32 *data1, *data2, *line1, *line2; PIXCMAP *cmap1, *cmap2; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); if (pixSizesEqual(pix1, pix2) == 0) return 0; cmap1 = pixGetColormap(pix1); cmap2 = pixGetColormap(pix2); if (!cmap1 || !cmap2) { L_INFO("both images don't have colormap\n", __func__); return 0; } pixGetDimensions(pix1, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) { L_INFO("pix depth not in {1, 2, 4, 8}\n", __func__); return 0; } cmapEqual(cmap1, cmap2, 3, &samecmaps); if (samecmaps == TRUE) { /* colormaps are identical; compare by words */ linebits = d * w; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); data1 = pixGetData(pix1); data2 = pixGetData(pix2); fullwords = linebits / 32; endbits = linebits & 31; endmask = (endbits == 0) ? 0 : (0xffffffff << (32 - endbits)); for (i = 0; i < h; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < fullwords; j++) { if (*line1 ^ *line2) return 0; line1++; line2++; } if (endbits) { if ((*line1 ^ *line2) & endmask) return 0; } } *psame = 1; return 0; } /* Colormaps aren't identical; compare pixel by pixel */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix1, j, i, &val1); pixGetPixel(pix2, j, i, &val2); pixcmapGetColor(cmap1, val1, &rval1, &gval1, &bval1); pixcmapGetColor(cmap2, val2, &rval2, &gval2, &bval2); if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) return 0; } } *psame = 1; return 0; } /*! * \brief cmapEqual() * * \param[in] cmap1 * \param[in] cmap2 * \param[in] ncomps 3 for RGB, 4 for RGBA * \param[out] psame * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns %same = TRUE if the colormaps have identical entries.
 *      (2) If %ncomps == 4, the alpha components of the colormaps are also
 *          compared.
 * 
*/ l_ok cmapEqual(PIXCMAP *cmap1, PIXCMAP *cmap2, l_int32 ncomps, l_int32 *psame) { l_int32 n1, n2, i, rval1, rval2, gval1, gval2, bval1, bval2, aval1, aval2; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = FALSE; if (!cmap1) return ERROR_INT("cmap1 not defined", __func__, 1); if (!cmap2) return ERROR_INT("cmap2 not defined", __func__, 1); if (ncomps != 3 && ncomps != 4) return ERROR_INT("ncomps not 3 or 4", __func__, 1); n1 = pixcmapGetCount(cmap1); n2 = pixcmapGetCount(cmap2); if (n1 != n2) { L_INFO("colormap sizes are different\n", __func__); return 0; } for (i = 0; i < n1; i++) { pixcmapGetRGBA(cmap1, i, &rval1, &gval1, &bval1, &aval1); pixcmapGetRGBA(cmap2, i, &rval2, &gval2, &bval2, &aval2); if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) return 0; if (ncomps == 4 && aval1 != aval2) return 0; } *psame = TRUE; return 0; } /*! * \brief pixUsesCmapColor() * * \param[in] pixs any depth, colormap * \param[out] pcolor TRUE if color found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns color = TRUE if three things are obtained:
 *          (a) the pix has a colormap
 *          (b) the colormap has at least one color entry
 *          (c) a color entry is actually used
 *      (2) It is used in pixEqual() for comparing two images, in a
 *          situation where it is required to know if the colormap
 *          has color entries that are actually used in the image.
 * 
*/ l_ok pixUsesCmapColor(PIX *pixs, l_int32 *pcolor) { l_int32 n, i, rval, gval, bval, numpix; NUMA *na; PIXCMAP *cmap; if (!pcolor) return ERROR_INT("&color not defined", __func__, 1); *pcolor = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return 0; pixcmapHasColor(cmap, pcolor); if (*pcolor == 0) /* no color */ return 0; /* The cmap has color entries. Are they used? */ na = pixGetGrayHistogram(pixs, 1); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(na, i, &numpix); if ((rval != gval || rval != bval) && numpix) { /* color found! */ *pcolor = 1; break; } } numaDestroy(&na); return 0; } /*------------------------------------------------------------------* * Binary correlation * *------------------------------------------------------------------*/ /*! * \brief pixCorrelationBinary() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \param[out] pval correlation * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The correlation is a number between 0.0 and 1.0,
 *          based on foreground similarity:
 *                           (|1 AND 2|)**2
 *            correlation =  --------------
 *                             |1| * |2|
 *          where |x| is the count of foreground pixels in image x.
 *          If the images are identical, this is 1.0.
 *          If they have no fg pixels in common, this is 0.0.
 *          If one or both images have no fg pixels, the correlation is 0.0.
 *      (2) Typically the two images are of equal size, but this
 *          is not enforced.  Instead, the UL corners are aligned.
 * 
*/ l_ok pixCorrelationBinary(PIX *pix1, PIX *pix2, l_float32 *pval) { l_int32 count1, count2, countn; l_int32 *tab8; PIX *pixn; if (!pval) return ERROR_INT("&pval not defined", __func__, 1); *pval = 0.0; if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); tab8 = makePixelSumTab8(); pixCountPixels(pix1, &count1, tab8); pixCountPixels(pix2, &count2, tab8); if (count1 == 0 || count2 == 0) { LEPT_FREE(tab8); return 0; } pixn = pixAnd(NULL, pix1, pix2); pixCountPixels(pixn, &countn, tab8); *pval = (l_float32)countn * (l_float32)countn / ((l_float32)count1 * (l_float32)count2); LEPT_FREE(tab8); pixDestroy(&pixn); return 0; } /*------------------------------------------------------------------* * Difference of two images * *------------------------------------------------------------------*/ /*! * \brief pixDisplayDiff() * * \param[in] pix1 any depth * \param[in] pix2 any depth * \param[in] showall 1 to display input images; 0 to only display result * \param[in] mindiff min difference to identify pixel * \param[in] diffcolor color of pixel indicating difference >= mindiff * \return pixd 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) This aligns the UL corners of pix1 and pix2, crops to the
 *          overlapping pixels, and shows which pixels have a significant
 *          difference in value.
 *      (2) Requires %pix1 and %pix2 to have the same depth.
 *      (3) If rgb, a pixel is identified as different if any component
 *          values of the corresponding pixels equals or exceeds %mindiff.
 *      (4) %diffcolor is in format 0xrrggbbaa.
 *      (5) If %pix1 and %pix2 are 1 bpp, ignores %mindiff and %diffcolor,
 *          and uses the result of pixDisplayDiffBinary().
 * 
*/ PIX * pixDisplayDiff(PIX *pix1, PIX *pix2, l_int32 showall, l_int32 mindiff, l_uint32 diffcolor) { l_int32 i, j, w1, h1, d1, w2, h2, d2, minw, minh, wpl1, wpl2, wpl3; l_int32 rval1, gval1, bval1, rval2, gval2, bval2; l_uint32 val1, val2; l_uint32 *data1, *data2, *data3, *line1, *line2, *line3; PIX *pix3 = NULL, *pix4 = NULL, *pixd; PIXA *pixa1; if (!pix1 || !pix2) return (PIX *)ERROR_PTR("pix1, pix2 not both defined", __func__, NULL); pixGetDimensions(pix1, &w1, &h1, &d1); pixGetDimensions(pix2, &w2, &h2, &d2); if (d1 != d2) return (PIX *)ERROR_PTR("unequal depths", __func__, NULL); if (mindiff <= 0) return (PIX *)ERROR_PTR("mindiff must be > 0", __func__, NULL); if (d1 == 1) { pix3 = pixDisplayDiffBinary(pix1, pix2); pixd = pixConvertTo32(pix3); pixDestroy(&pix3); } else { minw = L_MIN(w1, w2); minh = L_MIN(h1, h2); pix3 = pixConvertTo32(pix1); pix4 = pixConvertTo32(pix2); pixd = pixCreate(minw, minh, 32); pixRasterop(pixd, 0, 0, minw, minh, PIX_SRC, pix3, 0, 0); data1 = pixGetData(pix3); wpl1 = pixGetWpl(pix3); data2 = pixGetData(pix4); wpl2 = pixGetWpl(pix4); data3 = pixGetData(pixd); wpl3 = pixGetWpl(pixd); for (i = 0; i < minh; i++) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; line3 = data3 + i * wpl3; for (j = 0; j < minw; j++) { val1 = GET_DATA_FOUR_BYTES(line1, j); val2 = GET_DATA_FOUR_BYTES(line2, j); extractRGBValues(val1, &rval1, &gval1, &bval1); extractRGBValues(val2, &rval2, &gval2, &bval2); if (L_ABS(rval1 - rval2) >= mindiff || L_ABS(gval1 - gval2) >= mindiff || L_ABS(bval1 - bval2) >= mindiff) SET_DATA_FOUR_BYTES(line3, j, diffcolor); } } } if (showall) { pixa1 = pixaCreate(3); if (d1 == 1) { pixaAddPix(pixa1, pix1, L_COPY); pixaAddPix(pixa1, pix2, L_COPY); } else { pixaAddPix(pixa1, pix3, L_INSERT); pixaAddPix(pixa1, pix4, L_INSERT); } pixaAddPix(pixa1, pixd, L_INSERT); /* save diff image */ pixd = pixaDisplayTiledInColumns(pixa1, 2, 1.0, 30, 2); /* all 3 */ pixaDestroy(&pixa1); } else if (d1 != 1) { pixDestroy(&pix3); pixDestroy(&pix4); } return pixd; } /*! * \brief pixDisplayDiffBinary() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \return pixd 4 bpp cmapped, or NULL on error * *
 * Notes:
 *      (1) This gives a color representation of the difference between
 *          pix1 and pix2.  The color difference depends on the order.
 *          The pixels in pixd have 4 colors:
 *           * unchanged:  black (on), white (off)
 *           * on in pix1, off in pix2: red
 *           * on in pix2, off in pix1: green
 *      (2) This aligns the UL corners of pix1 and pix2, and crops
 *          to the overlapping pixels.
 * 
*/ PIX * pixDisplayDiffBinary(PIX *pix1, PIX *pix2) { l_int32 w1, h1, d1, w2, h2, d2, minw, minh; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pix1 || !pix2) return (PIX *)ERROR_PTR("pix1, pix2 not both defined", __func__, NULL); pixGetDimensions(pix1, &w1, &h1, &d1); pixGetDimensions(pix2, &w2, &h2, &d2); if (d1 != 1 || d2 != 1) return (PIX *)ERROR_PTR("pix1 and pix2 not 1 bpp", __func__, NULL); minw = L_MIN(w1, w2); minh = L_MIN(h1, h2); pixd = pixCreate(minw, minh, 4); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); /* initialized to white */ pixcmapAddColor(cmap, 0, 0, 0); pixcmapAddColor(cmap, 255, 0, 0); pixcmapAddColor(cmap, 0, 255, 0); pixSetColormap(pixd, cmap); pixt = pixAnd(NULL, pix1, pix2); pixPaintThroughMask(pixd, pixt, 0, 0, 0x0); /* black */ pixSubtract(pixt, pix1, pix2); pixPaintThroughMask(pixd, pixt, 0, 0, 0xff000000); /* red */ pixSubtract(pixt, pix2, pix1); pixPaintThroughMask(pixd, pixt, 0, 0, 0x00ff0000); /* green */ pixDestroy(&pixt); return pixd; } /*! * \brief pixCompareBinary() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \param[in] comptype L_COMPARE_XOR, L_COMPARE_SUBTRACT * \param[out] pfract fraction of pixels that are different * \param[out] ppixdiff [optional] pix of difference * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The two images are aligned at the UL corner, and do not
 *          need to be the same size.
 *      (2) If using L_COMPARE_SUBTRACT, pix2 is subtracted from pix1.
 *      (3) The total number of pixels is determined by pix1.
 *      (4) On error, the returned fraction is 1.0.
 * 
*/ l_ok pixCompareBinary(PIX *pix1, PIX *pix2, l_int32 comptype, l_float32 *pfract, PIX **ppixdiff) { l_int32 w, h, count; PIX *pixt; if (ppixdiff) *ppixdiff = NULL; if (!pfract) return ERROR_INT("&pfract not defined", __func__, 1); *pfract = 1.0; /* initialize to max difference */ if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", __func__, 1); if (comptype != L_COMPARE_XOR && comptype != L_COMPARE_SUBTRACT) return ERROR_INT("invalid comptype", __func__, 1); if (comptype == L_COMPARE_XOR) pixt = pixXor(NULL, pix1, pix2); else /* comptype == L_COMPARE_SUBTRACT) */ pixt = pixSubtract(NULL, pix1, pix2); pixCountPixels(pixt, &count, NULL); pixGetDimensions(pix1, &w, &h, NULL); *pfract = (l_float32)(count) / (l_float32)(w * h); if (ppixdiff) *ppixdiff = pixt; else pixDestroy(&pixt); return 0; } /*! * \brief pixCompareGrayOrRGB() * * \param[in] pix1 2,4,8,16 bpp gray, 32 bpp rgb, or colormapped * \param[in] pix2 2,4,8,16 bpp gray, 32 bpp rgb, or colormapped * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF * \param[in] plottype gplot plot output type, or 0 for no plot * \param[out] psame [optional] 1 if pixel values are identical * \param[out] pdiff [optional] average difference * \param[out] prmsdiff [optional] rms of difference * \param[out] ppixdiff [optional] pix of difference * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The two images are aligned at the UL corner, and do not
 *          need to be the same size.  If they are not the same size,
 *          the comparison will be made over overlapping pixels.
 *      (2) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (3) If RGB, each component is compared separately.
 *      (4) If type is L_COMPARE_ABS_DIFF, pix2 is subtracted from pix1
 *          and the absolute value is taken.
 *      (5) If type is L_COMPARE_SUBTRACT, pix2 is subtracted from pix1
 *          and the result is clipped to 0.
 *      (6) The plot output types are specified in gplot.h.
 *          Use 0 if no difference plot is to be made.
 *      (7) If the images are pixelwise identical, no difference
 *          plot is made, even if requested.  The result (TRUE or FALSE)
 *          is optionally returned in the parameter 'same'.
 *      (8) The average difference (either subtracting or absolute value)
 *          is optionally returned in the parameter 'diff'.
 *      (9) The RMS difference is optionally returned in the
 *          parameter 'rmsdiff'.  For RGB, we return the average of
 *          the RMS differences for each of the components.
 *     (10) Because pixel values are compared, pix1 and pix2 can be equal when:
 *          * they are both gray with different depth
 *          * one is colormapped and the other is not
 *          * they are both colormapped and have different size colormaps
 * 
*/ l_ok pixCompareGrayOrRGB(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { l_int32 retval, d1, d2; PIX *pixt1, *pixt2, *pixs1, *pixs2; if (psame) *psame = 0; if (pdiff) *pdiff = 255.0; if (prmsdiff) *prmsdiff = 255.0; if (ppixdiff) *ppixdiff = NULL; if (!pix1 || pixGetDepth(pix1) == 1) return ERROR_INT("pix1 not defined or 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) == 1) return ERROR_INT("pix2 not defined or 1 bpp", __func__, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", __func__, 1); if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", __func__, 1); pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); d1 = pixGetDepth(pixt1); d2 = pixGetDepth(pixt2); if (d1 < 8) pixs1 = pixConvertTo8(pixt1, FALSE); else pixs1 = pixClone(pixt1); if (d2 < 8) pixs2 = pixConvertTo8(pixt2, FALSE); else pixs2 = pixClone(pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 != d2) { pixDestroy(&pixs1); pixDestroy(&pixs2); return ERROR_INT("intrinsic depths are not equal", __func__, 1); } if (d1 == 8 || d1 == 16) retval = pixCompareGray(pixs1, pixs2, comptype, plottype, psame, pdiff, prmsdiff, ppixdiff); else /* d1 == 32 */ retval = pixCompareRGB(pixs1, pixs2, comptype, plottype, psame, pdiff, prmsdiff, ppixdiff); pixDestroy(&pixs1); pixDestroy(&pixs2); return retval; } /*! * \brief pixCompareGray() * * \param[in] pix1 8 or 16 bpp, not cmapped * \param[in] pix2 8 or 16 bpp, not cmapped * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF * \param[in] plottype gplot plot output type, or 0 for no plot * \param[out] psame [optional] 1 if pixel values are identical * \param[out] pdiff [optional] average difference * \param[out] prmsdiff [optional] rms of difference * \param[out] ppixdiff [optional] pix of difference * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See pixCompareGrayOrRGB() for details.
 *      (2) Use pixCompareGrayOrRGB() if the input pix are colormapped.
 *      (3) Note: setting %plottype > 0 can result in writing named
 *                output files.
 * 
*/ l_ok pixCompareGray(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { char buf[64]; static l_atomic index = 0; l_int32 d1, d2, same, first, last; GPLOT *gplot; NUMA *na, *nac; PIX *pixt; if (psame) *psame = 0; if (pdiff) *pdiff = 255.0; if (prmsdiff) *prmsdiff = 255.0; if (ppixdiff) *ppixdiff = NULL; if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if ((d1 != d2) || (d1 != 8 && d1 != 16)) return ERROR_INT("depths unequal or not 8 or 16 bpp", __func__, 1); if (pixGetColormap(pix1) || pixGetColormap(pix2)) return ERROR_INT("pix1 and/or pix2 are colormapped", __func__, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", __func__, 1); if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", __func__, 1); lept_mkdir("lept/comp"); if (comptype == L_COMPARE_SUBTRACT) pixt = pixSubtractGray(NULL, pix1, pix2); else /* comptype == L_COMPARE_ABS_DIFF) */ pixt = pixAbsDifference(pix1, pix2); pixZero(pixt, &same); if (same) L_INFO("Images are pixel-wise identical\n", __func__); if (psame) *psame = same; if (pdiff) pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_MEAN_ABSVAL, pdiff); /* Don't bother to plot if the images are the same */ if (plottype && !same) { L_INFO("Images differ: output plots will be generated\n", __func__); na = pixGetGrayHistogram(pixt, 1); numaGetNonzeroRange(na, TINY, &first, &last); nac = numaClipToInterval(na, 0, last); snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_gray%d", index); gplot = gplotCreate(buf, plottype, "Pixel Difference Histogram", "diff val", "number of pixels"); gplotAddPlot(gplot, NULL, nac, GPLOT_LINES, "gray"); gplotMakeOutput(gplot); gplotDestroy(&gplot); snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_gray%d.png", index++); l_fileDisplay(buf, 100, 100, 1.0); numaDestroy(&na); numaDestroy(&nac); } if (ppixdiff) *ppixdiff = pixCopy(NULL, pixt); if (prmsdiff) { if (comptype == L_COMPARE_SUBTRACT) { /* wrong type for rms diff */ pixDestroy(&pixt); pixt = pixAbsDifference(pix1, pix2); } pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, prmsdiff); } pixDestroy(&pixt); return 0; } /*! * \brief pixCompareRGB() * * \param[in] pix1 32 bpp rgb * \param[in] pix2 32 bpp rgb * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF * \param[in] plottype gplot plot output type, or 0 for no plot * \param[out] psame [optional] 1 if pixel values are identical * \param[out] pdiff [optional] average difference * \param[out] prmsdiff [optional] rms of difference * \param[out] ppixdiff [optional] pix of difference * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See pixCompareGrayOrRGB() for details.
 *      (2) Note: setting %plottype > 0 can result in writing named
 *                output files.
 * 
*/ l_ok pixCompareRGB(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { char buf[64]; static l_atomic index = 0; l_int32 rsame, gsame, bsame, same, first, rlast, glast, blast, last; l_float32 rdiff, gdiff, bdiff; GPLOT *gplot; NUMA *nar, *nag, *nab, *narc, *nagc, *nabc; PIX *pixr1, *pixr2, *pixg1, *pixg2, *pixb1, *pixb2; PIX *pixr, *pixg, *pixb; if (psame) *psame = 0; if (pdiff) *pdiff = 0.0; if (prmsdiff) *prmsdiff = 0.0; if (ppixdiff) *ppixdiff = NULL; if (!pix1 || pixGetDepth(pix1) != 32) return ERROR_INT("pix1 not defined or not 32 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 32) return ERROR_INT("pix2 not defined or not ew bpp", __func__, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", __func__, 1); if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", __func__, 1); lept_mkdir("lept/comp"); pixr1 = pixGetRGBComponent(pix1, COLOR_RED); pixr2 = pixGetRGBComponent(pix2, COLOR_RED); pixg1 = pixGetRGBComponent(pix1, COLOR_GREEN); pixg2 = pixGetRGBComponent(pix2, COLOR_GREEN); pixb1 = pixGetRGBComponent(pix1, COLOR_BLUE); pixb2 = pixGetRGBComponent(pix2, COLOR_BLUE); if (comptype == L_COMPARE_SUBTRACT) { pixr = pixSubtractGray(NULL, pixr1, pixr2); pixg = pixSubtractGray(NULL, pixg1, pixg2); pixb = pixSubtractGray(NULL, pixb1, pixb2); } else { /* comptype == L_COMPARE_ABS_DIFF) */ pixr = pixAbsDifference(pixr1, pixr2); pixg = pixAbsDifference(pixg1, pixg2); pixb = pixAbsDifference(pixb1, pixb2); } pixZero(pixr, &rsame); pixZero(pixg, &gsame); pixZero(pixb, &bsame); same = rsame && gsame && bsame; if (same) L_INFO("Images are pixel-wise identical\n", __func__); if (psame) *psame = same; if (pdiff) { pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_MEAN_ABSVAL, &rdiff); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_MEAN_ABSVAL, &gdiff); pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_MEAN_ABSVAL, &bdiff); *pdiff = (rdiff + gdiff + bdiff) / 3.0; } /* Don't bother to plot if the images are the same */ if (plottype && !same) { L_INFO("Images differ: output plots will be generated\n", __func__); nar = pixGetGrayHistogram(pixr, 1); nag = pixGetGrayHistogram(pixg, 1); nab = pixGetGrayHistogram(pixb, 1); numaGetNonzeroRange(nar, TINY, &first, &rlast); numaGetNonzeroRange(nag, TINY, &first, &glast); numaGetNonzeroRange(nab, TINY, &first, &blast); last = L_MAX(rlast, glast); last = L_MAX(last, blast); narc = numaClipToInterval(nar, 0, last); nagc = numaClipToInterval(nag, 0, last); nabc = numaClipToInterval(nab, 0, last); snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_rgb%d", index); gplot = gplotCreate(buf, plottype, "Pixel Difference Histogram", "diff val", "number of pixels"); gplotAddPlot(gplot, NULL, narc, GPLOT_LINES, "red"); gplotAddPlot(gplot, NULL, nagc, GPLOT_LINES, "green"); gplotAddPlot(gplot, NULL, nabc, GPLOT_LINES, "blue"); gplotMakeOutput(gplot); gplotDestroy(&gplot); snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_rgb%d.png", index++); l_fileDisplay(buf, 100, 100, 1.0); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); numaDestroy(&narc); numaDestroy(&nagc); numaDestroy(&nabc); } if (ppixdiff) *ppixdiff = pixCreateRGBImage(pixr, pixg, pixb); if (prmsdiff) { if (comptype == L_COMPARE_SUBTRACT) { pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixr = pixAbsDifference(pixr1, pixr2); pixg = pixAbsDifference(pixg1, pixg2); pixb = pixAbsDifference(pixb1, pixb2); } pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &rdiff); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &gdiff); pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &bdiff); *prmsdiff = (rdiff + gdiff + bdiff) / 3.0; } pixDestroy(&pixr1); pixDestroy(&pixr2); pixDestroy(&pixg1); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return 0; } /*! * \brief pixCompareTiled() * * \param[in] pix1 8 bpp or 32 bpp rgb * \param[in] pix2 8 bpp 32 bpp rgb * \param[in] sx, sy tile size; must be > 1 in each dimension * \param[in] type L_MEAN_ABSVAL or L_ROOT_MEAN_SQUARE * \param[out] ppixdiff pix of difference * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) With L_MEAN_ABSVAL, we compute for each tile the
 *          average abs value of the pixel component difference between
 *          the two (aligned) images.  With L_ROOT_MEAN_SQUARE, we
 *          compute instead the rms difference over all components.
 *      (2) The two input pix must be the same depth.  Comparison is made
 *          using UL corner alignment.
 *      (3) For 32 bpp, the distance between corresponding tiles
 *          is found by averaging the measured difference over all three
 *          components of each pixel in the tile.
 *      (4) The result, pixdiff, contains one pixel for each source tile.
 * 
*/ l_ok pixCompareTiled(PIX *pix1, PIX *pix2, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixdiff) { l_int32 d1, d2, w, h; PIX *pixt, *pixr, *pixg, *pixb; PIX *pixrdiff, *pixgdiff, *pixbdiff; PIXACC *pixacc; if (!ppixdiff) return ERROR_INT("&pixdiff not defined", __func__, 1); *ppixdiff = NULL; if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if (d1 != d2) return ERROR_INT("depths not equal", __func__, 1); if (d1 != 8 && d1 != 32) return ERROR_INT("pix1 not 8 or 32 bpp", __func__, 1); if (d2 != 8 && d2 != 32) return ERROR_INT("pix2 not 8 or 32 bpp", __func__, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy not both > 1", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE) return ERROR_INT("invalid type", __func__, 1); pixt = pixAbsDifference(pix1, pix2); if (d1 == 8) { *ppixdiff = pixGetAverageTiled(pixt, sx, sy, type); } else { /* d1 == 32 */ pixr = pixGetRGBComponent(pixt, COLOR_RED); pixg = pixGetRGBComponent(pixt, COLOR_GREEN); pixb = pixGetRGBComponent(pixt, COLOR_BLUE); pixrdiff = pixGetAverageTiled(pixr, sx, sy, type); pixgdiff = pixGetAverageTiled(pixg, sx, sy, type); pixbdiff = pixGetAverageTiled(pixb, sx, sy, type); pixGetDimensions(pixrdiff, &w, &h, NULL); pixacc = pixaccCreate(w, h, 0); pixaccAdd(pixacc, pixrdiff); pixaccAdd(pixacc, pixgdiff); pixaccAdd(pixacc, pixbdiff); pixaccMultConst(pixacc, 1.f / 3.f); *ppixdiff = pixaccFinal(pixacc, 8); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixrdiff); pixDestroy(&pixgdiff); pixDestroy(&pixbdiff); pixaccDestroy(&pixacc); } pixDestroy(&pixt); return 0; } /*------------------------------------------------------------------* * Other measures of the difference of two images * *------------------------------------------------------------------*/ /*! * \brief pixCompareRankDifference() * * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; use 0 or 1 for no subsampling * \return narank numa of rank difference, or NULL on error * *
 * Notes:
 *      (1) This answers the question: if the pixel values in each
 *          component are compared by absolute difference, for
 *          any value of difference, what is the fraction of
 *          pixel pairs that have a difference of this magnitude
 *          or greater.  For a difference of 0, the fraction is 1.0.
 *          In this sense, it is a mapping from pixel difference to
 *          rank order of difference.
 *      (2) The two images are aligned at the UL corner, and do not
 *          need to be the same size.  If they are not the same size,
 *          the comparison will be made over overlapping pixels.
 *      (3) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (4) If RGB, pixel differences for each component are aggregated
 *          into a single histogram.
 * 
*/ NUMA * pixCompareRankDifference(PIX *pix1, PIX *pix2, l_int32 factor) { l_int32 i; l_float32 *array1, *array2; NUMA *nah, *nan, *nad; if (!pix1) return (NUMA *)ERROR_PTR("pix1 not defined", __func__, NULL); if (!pix2) return (NUMA *)ERROR_PTR("pix2 not defined", __func__, NULL); if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); nan = numaNormalizeHistogram(nah, 1.0); array1 = numaGetFArray(nan, L_NOCOPY); nad = numaCreate(256); numaSetCount(nad, 256); /* all initialized to 0.0 */ array2 = numaGetFArray(nad, L_NOCOPY); /* Do rank accumulation on normalized histo of diffs */ array2[0] = 1.0; for (i = 1; i < 256; i++) array2[i] = array2[i - 1] - array1[i - 1]; numaDestroy(&nah); numaDestroy(&nan); return nad; } /*! * \brief pixTestForSimilarity() * * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; use 0 or 1 for no subsampling * \param[in] mindiff minimum pixel difference to be counted; > 0 * \param[in] maxfract maximum fraction of pixels allowed to have * diff greater than or equal to mindiff * \param[in] maxave maximum average difference of pixels allowed for * pixels with diff greater than or equal to * mindiff, after subtracting mindiff * \param[out] psimilar 1 if similar, 0 otherwise * \param[in] details use 1 to give normalized histogram and other data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes 2 pix that are the same size and determines using
 *          3 input parameters if they are "similar".  The first parameter
 *          %mindiff establishes a criterion of pixel-to-pixel similarity:
 *          two pixels are not similar if their difference in value is
 *          at least mindiff.  Then %maxfract and %maxave are thresholds
 *          on the number and distribution of dissimilar pixels
 *          allowed for the two pix to be similar.   If the pix are
 *          to be similar, neither threshold can be exceeded.
 *      (2) In setting the %maxfract and %maxave thresholds, you have
 *          these options:
 *            (a) Base the comparison only on %maxfract.  Then set
 *                %maxave = 0.0 or 256.0.  (If 0, we always ignore it.)
 *            (b) Base the comparison only on %maxave.  Then set
 *                %maxfract = 1.0.
 *            (c) Base the comparison on both thresholds.
 *      (3) Example of values that can be expected at mindiff = 15 when
 *          comparing lossless png encoding with jpeg encoding, q=75:
 *             (smoothish bg)       fractdiff = 0.01, avediff = 2.5
 *             (natural scene)      fractdiff = 0.13, avediff = 3.5
 *          To identify these images as 'similar', select maxfract
 *          and maxave to be upper bounds of what you expect.
 *      (4) See pixGetDifferenceStats() for a discussion of why we subtract
 *          mindiff from the computed average diff of the nonsimilar pixels
 *          to get the 'avediff' returned by that function.
 *      (5) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (6) If RGB, the maximum difference between pixel components is
 *          saved in the histogram.
 * 
*/ l_ok pixTestForSimilarity(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 details) { l_float32 fractdiff, avediff; if (!psimilar) return ERROR_INT("&similar not defined", __func__, 1); *psimilar = 0; if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); if (pixSizesEqual(pix1, pix2) == 0) return ERROR_INT("pix sizes not equal", __func__, 1); if (mindiff <= 0) return ERROR_INT("mindiff must be > 0", __func__, 1); if (pixGetDifferenceStats(pix1, pix2, factor, mindiff, &fractdiff, &avediff, details)) return ERROR_INT("diff stats not found", __func__, 1); if (maxave <= 0.0) maxave = 256.0; if (fractdiff <= maxfract && avediff <= maxave) *psimilar = 1; return 0; } /*! * \brief pixGetDifferenceStats() * * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; use 0 or 1 for no subsampling * \param[in] mindiff minimum pixel difference to be counted; > 0 * \param[out] pfractdiff fraction of pixels with diff greater than or * equal to mindiff * \param[out] pavediff average difference of pixels with diff greater * than or equal to mindiff, less mindiff * \param[in] details use 1 to give normalized histogram and other data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes a threshold %mindiff and describes the difference
 *          between two images in terms of two numbers:
 *            (a) the fraction of pixels, %fractdiff, whose difference
 *                equals or exceeds the threshold %mindiff, and
 *            (b) the average value %avediff of the difference in pixel value
 *                for the pixels in the set given by (a), after you subtract
 *                %mindiff.  The reason for subtracting %mindiff is that
 *                you then get a useful measure for the rate of falloff
 *                of the distribution for larger differences.  For example,
 *                if %mindiff = 10 and you find that %avediff = 2.5, it
 *                says that of the pixels with diff > 10, the average of
 *                their diffs is just mindiff + 2.5 = 12.5.  This is a
 *                fast falloff in the histogram with increasing difference.
 *      (2) The two images are aligned at the UL corner, and do not
 *          need to be the same size.  If they are not the same size,
 *          the comparison will be made over overlapping pixels.
 *      (3) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (4) If RGB, the maximum difference between pixel components is
 *          saved in the histogram.
 *      (5) Set %details == 1 to see the difference histogram and get
 *          an output that shows for each value of %mindiff, what are the
 *          minimum values required for fractdiff and avediff in order
 *          that the two pix will be considered similar.
 * 
*/ l_ok pixGetDifferenceStats(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 *pfractdiff, l_float32 *pavediff, l_int32 details) { l_int32 i, first, last, diff; l_float32 fract, ave; l_float32 *array; NUMA *nah, *nan, *nac; if (pfractdiff) *pfractdiff = 0.0; if (pavediff) *pavediff = 0.0; if (!pfractdiff) return ERROR_INT("&fractdiff not defined", __func__, 1); if (!pavediff) return ERROR_INT("&avediff not defined", __func__, 1); if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); if (mindiff <= 0) return ERROR_INT("mindiff must be > 0", __func__, 1); if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) return ERROR_INT("na not made", __func__, 1); if ((nan = numaNormalizeHistogram(nah, 1.0)) == NULL) { numaDestroy(&nah); return ERROR_INT("nan not made", __func__, 1); } array = numaGetFArray(nan, L_NOCOPY); if (details) { lept_mkdir("lept/comp"); numaGetNonzeroRange(nan, 0.0, &first, &last); nac = numaClipToInterval(nan, first, last); gplotSimple1(nac, GPLOT_PNG, "/tmp/lept/comp/histo", "Difference histogram"); l_fileDisplay("/tmp/lept/comp/histo.png", 500, 0, 1.0); lept_stderr("\nNonzero values in normalized histogram:"); numaWriteStderr(nac); numaDestroy(&nac); lept_stderr(" Mindiff fractdiff avediff\n"); lept_stderr(" -----------------------------------\n"); for (diff = 1; diff < L_MIN(2 * mindiff, last); diff++) { fract = 0.0; ave = 0.0; for (i = diff; i <= last; i++) { fract += array[i]; ave += (l_float32)i * array[i]; } ave = (fract == 0.0) ? 0.0 : ave / fract; ave -= diff; lept_stderr("%5d %7.4f %7.4f\n", diff, fract, ave); } lept_stderr(" -----------------------------------\n"); } fract = 0.0; ave = 0.0; for (i = mindiff; i < 256; i++) { fract += array[i]; ave += (l_float32)i * array[i]; } ave = (fract == 0.0) ? 0.0 : ave / fract; ave -= mindiff; *pfractdiff = fract; *pavediff = ave; numaDestroy(&nah); numaDestroy(&nan); return 0; } /*! * \brief pixGetDifferenceHistogram() * * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; use 0 or 1 for no subsampling * \return na Numa of histogram of differences, or NULL on error * *
 * Notes:
 *      (1) The two images are aligned at the UL corner, and do not
 *          need to be the same size.  If they are not the same size,
 *          the comparison will be made over overlapping pixels.
 *      (2) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (3) If RGB, the maximum difference between pixel components is
 *          saved in the histogram.
 * 
*/ NUMA * pixGetDifferenceHistogram(PIX *pix1, PIX *pix2, l_int32 factor) { l_int32 w1, h1, d1, w2, h2, d2, w, h, wpl1, wpl2; l_int32 i, j, val, val1, val2; l_int32 rval1, rval2, gval1, gval2, bval1, bval2; l_int32 rdiff, gdiff, bdiff, maxdiff; l_uint32 *data1, *data2, *line1, *line2; l_float32 *array; NUMA *na; PIX *pixt1, *pixt2; if (!pix1) return (NUMA *)ERROR_PTR("pix1 not defined", __func__, NULL); if (!pix2) return (NUMA *)ERROR_PTR("pix2 not defined", __func__, NULL); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if (d1 == 16 || d2 == 16) return (NUMA *)ERROR_PTR("d == 16 not supported", __func__, NULL); if (d1 < 8 && !pixGetColormap(pix1)) return (NUMA *)ERROR_PTR("pix1 depth < 8 bpp and not cmapped", __func__, NULL); if (d2 < 8 && !pixGetColormap(pix2)) return (NUMA *)ERROR_PTR("pix2 depth < 8 bpp and not cmapped", __func__, NULL); pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); pixGetDimensions(pixt1, &w1, &h1, &d1); pixGetDimensions(pixt2, &w2, &h2, &d2); if (d1 != d2) { pixDestroy(&pixt1); pixDestroy(&pixt2); return (NUMA *)ERROR_PTR("pix depths not equal", __func__, NULL); } if (factor < 1) factor = 1; na = numaCreate(256); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); w = L_MIN(w1, w2); h = L_MIN(h1, h2); data1 = pixGetData(pixt1); data2 = pixGetData(pixt2); wpl1 = pixGetWpl(pixt1); wpl2 = pixGetWpl(pixt2); if (d1 == 8) { for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); val = L_ABS(val1 - val2); array[val]++; } } } else { /* d1 == 32 */ for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { extractRGBValues(line1[j], &rval1, &gval1, &bval1); extractRGBValues(line2[j], &rval2, &gval2, &bval2); rdiff = L_ABS(rval1 - rval2); gdiff = L_ABS(gval1 - gval2); bdiff = L_ABS(bval1 - bval2); maxdiff = L_MAX(rdiff, gdiff); maxdiff = L_MAX(maxdiff, bdiff); array[maxdiff]++; } } } pixDestroy(&pixt1); pixDestroy(&pixt2); return na; } /*! * \brief pixGetPerceptualDiff() * * \param[in] pixs1 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] pixs2 8 bpp gray or 32 bpp rgb, or colormapped * \param[in] sampling subsampling factor; use 0 or 1 for no subsampling * \param[in] dilation size of grayscale or color Sel; odd * \param[in] mindiff minimum pixel difference to be counted; > 0 * \param[out] pfract fraction of pixels with diff greater than mindiff * \param[out] ppixdiff1 [optional] showing difference (gray or color) * \param[out] ppixdiff2 [optional] showing pixels of sufficient diff * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes 2 pix and determines, using 2 input parameters:
 *           * %dilation specifies the amount of grayscale or color
 *             dilation to apply to the images, to compensate for
 *             a small amount of misregistration.  A typical number might
 *             be 5, which uses a 5x5 Sel.  Grayscale dilation expands
 *             lighter pixels into darker pixel regions.
 *           * %mindiff determines the threshold on the difference in
 *             pixel values to be counted -- two pixels are not similar
 *             if their difference in value is at least %mindiff.  For
 *             color pixels, we use the maximum component difference.
 *      (2) The pixelwise comparison is always done with the UL corners
 *          aligned.  The sizes of pix1 and pix2 need not be the same,
 *          although in practice it can be useful to scale to the same size.
 *      (3) If there is a colormap, it is removed and the result
 *          is either gray or RGB depending on the colormap.
 *      (4) Two optional diff images can be retrieved (typ. for debugging):
 *           pixdiff1: the gray or color difference
 *           pixdiff2: thresholded to 1 bpp for pixels exceeding %mindiff
 *      (5) The returned value of fract can be compared to some threshold,
 *          which is application dependent.
 *      (6) This method is in analogy to the two-sided hausdorff transform,
 *          except here it is for d > 1.  For d == 1 (see pixRankHaustest()),
 *          we verify that when one pix1 is dilated, it covers at least a
 *          given fraction of the pixels in pix2, and v.v.; in that
 *          case, the two pix are sufficiently similar.  Here, we
 *          do an analogous thing: subtract the dilated pix1 from pix2 to
 *          get a 1-sided hausdorff-like transform.  Then do it the
 *          other way.  Take the component-wise max of the two results,
 *          and threshold to get the fraction of pixels with a difference
 *          below the threshold.
 * 
*/ l_ok pixGetPerceptualDiff(PIX *pixs1, PIX *pixs2, l_int32 sampling, l_int32 dilation, l_int32 mindiff, l_float32 *pfract, PIX **ppixdiff1, PIX **ppixdiff2) { l_int32 d1, d2, w, h, count; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; PIX *pix10, *pix11; if (ppixdiff1) *ppixdiff1 = NULL; if (ppixdiff2) *ppixdiff2 = NULL; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 1.0; /* init to completely different */ if ((dilation & 1) == 0) return ERROR_INT("dilation must be odd", __func__, 1); if (!pixs1) return ERROR_INT("pixs1 not defined", __func__, 1); if (!pixs2) return ERROR_INT("pixs2 not defined", __func__, 1); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (!pixGetColormap(pixs1) && d1 < 8) return ERROR_INT("pixs1 not cmapped and < 8 bpp", __func__, 1); if (!pixGetColormap(pixs2) && d2 < 8) return ERROR_INT("pixs2 not cmapped and < 8 bpp", __func__, 1); /* Integer downsample if requested */ if (sampling > 1) { pix1 = pixScaleByIntSampling(pixs1, sampling); pix2 = pixScaleByIntSampling(pixs2, sampling); } else { pix1 = pixClone(pixs1); pix2 = pixClone(pixs2); } /* Remove colormaps */ if (pixGetColormap(pix1)) { pix3 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); d1 = pixGetDepth(pix3); } else { pix3 = pixClone(pix1); } if (pixGetColormap(pix2)) { pix4 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); d2 = pixGetDepth(pix4); } else { pix4 = pixClone(pix2); } pixDestroy(&pix1); pixDestroy(&pix2); if (d1 != d2 || (d1 != 8 && d1 != 32)) { pixDestroy(&pix3); pixDestroy(&pix4); L_INFO("depths unequal or not in {8,32}: d1 = %d, d2 = %d\n", __func__, d1, d2); return 1; } /* In each direction, do a small dilation and subtract the dilated * image from the other image to get a one-sided difference. * Then take the max of the differences for each direction * and clipping each component to 255 if necessary. Note that * for RGB images, the dilations and max selection are done * component-wise, and the conversion to grayscale also uses the * maximum component. The resulting grayscale images are * thresholded using %mindiff. */ if (d1 == 8) { pix5 = pixDilateGray(pix3, dilation, dilation); pixCompareGray(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix7); pix6 = pixDilateGray(pix4, dilation, dilation); pixCompareGray(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix8); pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); pix10 = pixThresholdToBinary(pix9, mindiff); pixInvert(pix10, pix10); pixCountPixels(pix10, &count, NULL); pixGetDimensions(pix10, &w, &h, NULL); *pfract = (w <= 0 || h <= 0) ? 0.0 : (l_float32)count / (l_float32)(w * h); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); if (ppixdiff1) *ppixdiff1 = pix9; else pixDestroy(&pix9); if (ppixdiff2) *ppixdiff2 = pix10; else pixDestroy(&pix10); } else { /* d1 == 32 */ pix5 = pixColorMorph(pix3, L_MORPH_DILATE, dilation, dilation); pixCompareRGB(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix7); pix6 = pixColorMorph(pix4, L_MORPH_DILATE, dilation, dilation); pixCompareRGB(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix8); pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); pix10 = pixConvertRGBToGrayMinMax(pix9, L_CHOOSE_MAX); pix11 = pixThresholdToBinary(pix10, mindiff); pixInvert(pix11, pix11); pixCountPixels(pix11, &count, NULL); pixGetDimensions(pix11, &w, &h, NULL); *pfract = (w <= 0 || h <= 0) ? 0.0 : (l_float32)count / (l_float32)(w * h); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix10); if (ppixdiff1) *ppixdiff1 = pix9; else pixDestroy(&pix9); if (ppixdiff2) *ppixdiff2 = pix11; else pixDestroy(&pix11); } pixDestroy(&pix3); pixDestroy(&pix4); return 0; } /*! * \brief pixGetPSNR() * * \param[in] pix1, pix2 8 or 32 bpp; no colormap * \param[in] factor sampling factor; >= 1 * \param[out] ppsnr power signal/noise ratio difference * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes the power S/N ratio, in dB, for the difference
 *          between two images.  By convention, the power S/N
 *          for a grayscale image is ('log' == log base 10,
 *          and 'ln == log base e):
 *            PSNR = 10 * log((255/MSE)^2)
 *                 = 4.3429 * ln((255/MSE)^2)
 *                 = -4.3429 * ln((MSE/255)^2)
 *          where MSE is the mean squared error.
 *          Here are some examples:
 *             MSE             PSNR
 *             ---             ----
 *             10              28.1
 *             3               38.6
 *             1               48.1
 *             0.1             68.1
 *      (2) If pix1 and pix2 have the same pixel values, the MSE = 0.0
 *          and the PSNR is infinity.  For that case, this returns
 *          PSNR = 1000, which corresponds to the very small MSE of
 *          about 10^(-48).
 * 
*/ l_ok pixGetPSNR(PIX *pix1, PIX *pix2, l_int32 factor, l_float32 *ppsnr) { l_int32 same, i, j, w, h, d, wpl1, wpl2, v1, v2, r1, g1, b1, r2, g2, b2; l_uint32 *data1, *data2, *line1, *line2; l_float32 mse; /* mean squared error */ if (!ppsnr) return ERROR_INT("&psnr not defined", __func__, 1); *ppsnr = 0.0; if (!pix1 || !pix2) return ERROR_INT("empty input pix", __func__, 1); if (!pixSizesEqual(pix1, pix2)) return ERROR_INT("pix sizes unequal", __func__, 1); if (pixGetColormap(pix1)) return ERROR_INT("pix1 has colormap", __func__, 1); if (pixGetColormap(pix2)) return ERROR_INT("pix2 has colormap", __func__, 1); pixGetDimensions(pix1, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pix not 8 or 32 bpp", __func__, 1); if (factor < 1) return ERROR_INT("invalid sampling factor", __func__, 1); pixEqual(pix1, pix2, &same); if (same) { *ppsnr = 1000.0; /* crazy big exponent */ return 0; } data1 = pixGetData(pix1); data2 = pixGetData(pix2); wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); mse = 0.0; if (d == 8) { for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { v1 = GET_DATA_BYTE(line1, j); v2 = GET_DATA_BYTE(line2, j); mse += (l_float32)(v1 - v2) * (v1 - v2); } } } else { /* d == 32 */ for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { extractRGBValues(line1[j], &r1, &g1, &b1); extractRGBValues(line2[j], &r2, &g2, &b2); mse += ((l_float32)(r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2)) / 3.0; } } } mse = mse / ((l_float32)(w) * h); *ppsnr = -4.3429448 * log(mse / (255 * 255)); return 0; } /*------------------------------------------------------------------* * Comparison of photo regions by histogram * *------------------------------------------------------------------*/ /*! * \brief pixaComparePhotoRegionsByHisto() * * \param[in] pixa any depth; colormap OK * \param[in] minratio requiring sizes be compatible; < 1.0 * \param[in] textthresh threshold for text/photo; use 0 for default * \param[in] factor subsampling; >= 1 * \param[in] n in range {1, ... 7}. n^2 is the maximum number * of subregions for histograms; typ. n = 3. * \param[in] simthresh threshold for similarity; use 0 for default * \param[out] pnai array giving similarity class indices * \param[out] pscores [optional] score matrix as 1-D array of size N^2 * \param[out] ppixd [optional] pix of similarity classes * \param[in] debug 1 to output histograms; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function takes a pixa of cropped photo images and
 *          compares each one to the others for similarity.
 *          Each image is first tested to see if it is a photo that can
 *          be compared by tiled histograms.  If so, it is padded to put
 *          the centroid in the center of the image, and the histograms
 *          are generated.  The final step of comparing each histogram
 *          with all the others is very fast.
 *      (2) To make the histograms, each image is subdivided in a maximum
 *          of n^2 subimages.  The parameter %n specifies the "side" of
 *          an n x n grid of such subimages.  If the subimages have an
 *          aspect ratio larger than 2, the grid will change, again using n^2
 *          as a maximum for the number of subimages.  For example,
 *          if n == 3, but the image is 600 x 200 pixels, a 3x3 grid
 *          would have subimages of 200 x 67 pixels, which is more
 *          than 2:1, so we change to a 4x2 grid where each subimage
 *          has 150 x 100 pixels.
 *      (3) An initial filter gives %score = 0 if the ratio of widths
 *          and heights (smallest / largest) does not exceed a
 *          threshold %minratio.  If set at 1.0, both images must be
 *          exactly the same size.  A typical value for %minratio is 0.9.
 *      (4) The comparison score between two images is a value in [0.0 .. 1.0].
 *          If the comparison score >= %simthresh, the images are placed in
 *          the same similarity class.  Default value for %simthresh is 0.25.
 *      (5) An array %nai of similarity class indices for pix in the
 *          input pixa is returned.
 *      (6) There are two debugging options:
 *          * An optional 2D matrix of scores is returned as a 1D array.
 *            A visualization of this is written to a temp file.
 *          * An optional pix showing the similarity classes can be
 *            returned.  Text in each input pix is reproduced.
 *      (7) See the notes in pixComparePhotoRegionsByHisto() for details
 *          on the implementation.
 * 
*/ l_ok pixaComparePhotoRegionsByHisto(PIXA *pixa, l_float32 minratio, l_float32 textthresh, l_int32 factor, l_int32 n, l_float32 simthresh, NUMA **pnai, l_float32 **pscores, PIX **ppixd, l_int32 debug) { char *text; l_int32 i, j, nim, w, h, w1, h1, w2, h2, ival, index, classid; l_float32 score; l_float32 *scores; NUMA *nai, *naw, *nah; NUMAA *naa; NUMAA **n3a; /* array of naa */ PIX *pix; if (pscores) *pscores = NULL; if (ppixd) *ppixd = NULL; if (!pnai) return ERROR_INT("&na not defined", __func__, 1); *pnai = NULL; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (minratio < 0.0 || minratio > 1.0) return ERROR_INT("minratio not in [0.0 ... 1.0]", __func__, 1); if (textthresh <= 0.0) textthresh = 1.3f; if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (n < 1 || n > 7) { L_WARNING("n = %d is invalid; setting to 4\n", __func__, n); n = 4; } if (simthresh <= 0.0) simthresh = 0.25; if (simthresh > 1.0) return ERROR_INT("simthresh invalid; should be near 0.25", __func__, 1); /* Prepare the histograms */ nim = pixaGetCount(pixa); if ((n3a = (NUMAA **)LEPT_CALLOC(nim, sizeof(NUMAA *))) == NULL) return ERROR_INT("calloc fail for n3a", __func__, 1); naw = numaCreate(0); nah = numaCreate(0); for (i = 0; i < nim; i++) { pix = pixaGetPix(pixa, i, L_CLONE); text = pixGetText(pix); pixSetResolution(pix, 150, 150); index = (debug) ? i : 0; pixGenPhotoHistos(pix, NULL, factor, textthresh, n, &naa, &w, &h, index); n3a[i] = naa; numaAddNumber(naw, w); numaAddNumber(nah, h); if (naa) lept_stderr("Image %s is photo\n", text); else lept_stderr("Image %s is NOT photo\n", text); pixDestroy(&pix); } /* Do the comparisons. We are making a set of classes, where * all similar images are placed in the same class. There are * 'nim' input images. The classes are labeled by 'classid' (all * similar images get the same 'classid' value), and 'nai' maps * the classid of the image in the input array to the classid * of the similarity class. */ if ((scores = (l_float32 *)LEPT_CALLOC((size_t)nim * nim, sizeof(l_float32))) == NULL) { L_ERROR("calloc fail for scores\n", __func__); goto cleanup; } nai = numaMakeConstant(-1, nim); /* classid array */ for (i = 0, classid = 0; i < nim; i++) { scores[nim * i + i] = 1.0; numaGetIValue(nai, i, &ival); if (ival != -1) /* already set */ continue; numaSetValue(nai, i, classid); if (n3a[i] == NULL) { /* not a photo */ classid++; continue; } numaGetIValue(naw, i, &w1); numaGetIValue(nah, i, &h1); for (j = i + 1; j < nim; j++) { numaGetIValue(nai, j, &ival); if (ival != -1) /* already set */ continue; if (n3a[j] == NULL) /* not a photo */ continue; numaGetIValue(naw, j, &w2); numaGetIValue(nah, j, &h2); compareTilesByHisto(n3a[i], n3a[j], minratio, w1, h1, w2, h2, &score, NULL); scores[nim * i + j] = score; scores[nim * j + i] = score; /* the score array is symmetric */ /* lept_stderr("score = %5.3f\n", score); */ if (score > simthresh) { numaSetValue(nai, j, classid); lept_stderr( "Setting %d similar to %d, in class %d; score %5.3f\n", j, i, classid, score); } } classid++; } *pnai = nai; /* Debug: optionally save and display the score array. * All images that are photos are represented by a point on * the diagonal. Other images in the same similarity class * are on the same horizontal raster line to the right. * The array has been symmetrized, so images in the same * same similarity class also appear on the same column below. */ if (pscores) { l_int32 wpl, fact; l_uint32 *line, *data; PIX *pix2, *pix3; pix2 = pixCreate(nim, nim, 8); data = pixGetData(pix2); wpl = pixGetWpl(pix2); for (i = 0; i < nim; i++) { line = data + i * wpl; for (j = 0; j < nim; j++) { SET_DATA_BYTE(line, j, L_MIN(255, 4.0 * 255 * scores[nim * i + j])); } } fact = L_MAX(2, 1000 / nim); pix3 = pixExpandReplicate(pix2, fact); lept_stderr("Writing to /tmp/lept/comp/scorearray.png\n"); lept_mkdir("lept/comp"); pixWrite("/tmp/lept/comp/scorearray.png", pix3, IFF_PNG); pixDestroy(&pix2); pixDestroy(&pix3); *pscores = scores; } else { LEPT_FREE(scores); } /* Debug: optionally display and save the image comparisons. * Image similarity classes are displayed by column; similar * images are displayed in the same column. */ if (ppixd) *ppixd = pixaDisplayTiledByIndex(pixa, nai, 200, 20, 2, 6, 0x0000ff00); cleanup: numaDestroy(&naw); numaDestroy(&nah); for (i = 0; i < nim; i++) numaaDestroy(&n3a[i]); LEPT_FREE(n3a); return 0; } /*! * \brief pixComparePhotoRegionsByHisto() * * \param[in] pix1, pix2 any depth; colormap OK * \param[in] box1, box2 [optional] photo regions from each; can be null * \param[in] minratio requiring sizes be compatible; < 1.0 * \param[in] factor subsampling factor; >= 1 * \param[in] n in range {1, ... 7}. n^2 is the maximum number * of subregions for histograms; typ. n = 3. * \param[out] pscore similarity score of histograms * \param[in] debugflag 1 for debug output; 0 for no debugging * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function compares two grayscale photo regions.  If a
 *          box is given, the region is clipped; otherwise assume
 *          the entire images are photo regions.  This is done with a
 *          set of not more than n^2 spatially aligned histograms, which are
 *          aligned using the centroid of the inverse image.
 *      (2) The parameter %n specifies the "side" of an n x n grid
 *          of subimages.  If the subimages have an aspect ratio larger
 *          than 2, the grid will change, using n^2 as a maximum for
 *          the number of subimages.  For example, if n == 3, but the
 *          image is 600 x 200 pixels, a 3x3 grid would have subimages
 *          of 200 x 67 pixels, which is more than 2:1, so we change
 *          to a 4x2 grid where each subimage has 150 x 100 pixels.
 *      (3) An initial filter gives %score = 0 if the ratio of widths
 *          and heights (smallest / largest) does not exceed a
 *          threshold %minratio.  This must be between 0.5 and 1.0.
 *          If set at 1.0, both images must be exactly the same size.
 *          A typical value for %minratio is 0.9.
 *      (4) Because this function should not be used on text or
 *          line graphics, which can give false positive results
 *          (i.e., high scores for different images), filter the images
 *          using pixGenPhotoHistos(), which returns tiled histograms
 *          only if an image is not text and comparison is expected
 *          to work with histograms.  If either image fails the test,
 *          the comparison returns a score of 0.0.
 *      (5) The white value counts in the histograms are removed; they
 *          are typically pixels that were padded to achieve alignment.
 *      (6) For an efficient representation of the histogram, normalize
 *          using a multiplicative factor so that the number in the
 *          maximum bucket is 255.  It then takes 256 bytes to store.
 *      (7) When comparing the histograms of two regions, use the
 *          Earth Mover distance (EMD), with the histograms normalized
 *          so that the sum over bins is the same.  Further normalize
 *          by dividing by 255, so that the result is in [0.0 ... 1.0].
 *      (8) Get a similarity score S = 1.0 - k * D, where
 *            k is a constant, say in the range 5-10
 *            D = normalized EMD
 *          and for multiple tiles, take the Min(S) to be the final score.
 *          Using aligned tiles gives protection against accidental
 *          similarity of the overall grayscale histograms.
 *          A small number of aligned tiles works well.
 *      (9) With debug on, you get a pdf that shows, for each tile,
 *          the images, histograms and score.
 * 
*/ l_ok pixComparePhotoRegionsByHisto(PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag) { l_int32 w1, h1, w2, h2, w1c, h1c, w2c, h2c, debugindex; l_float32 wratio, hratio; NUMAA *naa1, *naa2; PIX *pix3, *pix4; PIXA *pixa; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); if (minratio < 0.5 || minratio > 1.0) return ERROR_INT("minratio not in [0.5 ... 1.0]", __func__, 1); if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (n < 1 || n > 7) { L_WARNING("n = %d is invalid; setting to 4\n", __func__, n); n = 4; } debugindex = 0; if (debugflag) { lept_mkdir("lept/comp"); debugindex = 666; /* arbitrary number used for naming output */ } /* Initial filter by size */ if (box1) boxGetGeometry(box1, NULL, NULL, &w1, &h1); else pixGetDimensions(pix1, &w1, &h1, NULL); if (box2) boxGetGeometry(box2, NULL, NULL, &w2, &h2); else pixGetDimensions(pix1, &w2, &h2, NULL); wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : (l_float32)w2 / (l_float32)w1; hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : (l_float32)h2 / (l_float32)h1; if (wratio < minratio || hratio < minratio) return 0; /* Initial crop, if necessary, and make histos */ if (box1) pix3 = pixClipRectangle(pix1, box1, NULL); else pix3 = pixClone(pix1); pixGenPhotoHistos(pix3, NULL, factor, 0, n, &naa1, &w1c, &h1c, debugindex); pixDestroy(&pix3); if (!naa1) return 0; if (box2) pix4 = pixClipRectangle(pix2, box2, NULL); else pix4 = pixClone(pix2); pixGenPhotoHistos(pix4, NULL, factor, 0, n, &naa2, &w2c, &h2c, debugindex); pixDestroy(&pix4); if (!naa2) return 0; /* Compare histograms */ pixa = (debugflag) ? pixaCreate(0) : NULL; compareTilesByHisto(naa1, naa2, minratio, w1c, h1c, w2c, h2c, pscore, pixa); pixaDestroy(&pixa); return 0; } /*! * \brief pixGenPhotoHistos() * * \param[in] pixs depth > 1 bpp; colormap OK * \param[in] box [optional] region to be selected; can be null * \param[in] factor subsampling; >= 1 * \param[in] thresh threshold for photo/text; use 0 for default * \param[in] n in range {1, ... 7}. n^2 is the maximum number * of subregions for histograms; typ. n = 3. * \param[out] pnaa nx * ny 256-entry gray histograms * \param[out] pw width of image used to make histograms * \param[out] ph height of image used to make histograms * \param[in] debugindex 0 for no debugging; positive integer otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This crops and converts to 8 bpp if necessary.  It adds a
 *          minimal white boundary such that the centroid of the
 *          photo-inverted image is in the center. This allows
 *          automatic alignment with histograms of other image regions.
 *      (2) The parameter %n specifies the "side" of the n x n grid
 *          of subimages.  If the subimages have an aspect ratio larger
 *          than 2, the grid will change, using n^2 as a maximum for
 *          the number of subimages.  For example, if n == 3, but the
 *          image is 600 x 200 pixels, a 3x3 grid would have subimages
 *          of 200 x 67 pixels, which is more than 2:1, so we change
 *          to a 4x2 grid where each subimage has 150 x 100 pixels.
 *      (3) The white value in the histogram is removed, because of
 *          the padding.
 *      (4) Use 0 for conservative default (1.3) for thresh.
 *      (5) For an efficient representation of the histogram, normalize
 *          using a multiplicative factor so that the number in the
 *          maximum bucket is 255.  It then takes 256 bytes to store.
 *      (6) With %debugindex > 0, this makes a pdf that shows, for each tile,
 *          the images and histograms.
 * 
*/ l_ok pixGenPhotoHistos(PIX *pixs, BOX *box, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, l_int32 *pw, l_int32 *ph, l_int32 debugindex) { char buf[64]; NUMAA *naa; PIX *pix1, *pix2, *pix3, *pixm; PIXA *pixa; if (pnaa) *pnaa = NULL; if (pw) *pw = 0; if (ph) *ph = 0; if (!pnaa) return ERROR_INT("&naa not defined", __func__, 1); if (!pw || !ph) return ERROR_INT("&w and &h not both defined", __func__, 1); if (!pixs || pixGetDepth(pixs) == 1) return ERROR_INT("pixs not defined or 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (thresh <= 0.0) thresh = 1.3f; /* default */ if (n < 1 || n > 7) { L_WARNING("n = %d is invalid; setting to 4\n", __func__, n); n = 4; } pixa = NULL; if (debugindex > 0) { pixa = pixaCreate(0); lept_mkdir("lept/comp"); } /* Initial crop, if necessary */ if (box) pix1 = pixClipRectangle(pixs, box, NULL); else pix1 = pixClone(pixs); /* Convert to 8 bpp and pad to center the centroid */ pix2 = pixConvertTo8(pix1, FALSE); pix3 = pixPadToCenterCentroid(pix2, factor); /* Set to 255 all pixels above 230. Do this so that light gray * pixels do not enter into the comparison. */ pixm = pixThresholdToBinary(pix3, 230); pixInvert(pixm, pixm); pixSetMaskedGeneral(pix3, pixm, 255, 0, 0); pixDestroy(&pixm); if (debugindex > 0) { PIX *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa2; pix4 = pixConvertTo32(pix2); pix5 = pixConvertTo32(pix3); pix6 = pixScaleToSize(pix4, 400, 0); pix7 = pixScaleToSize(pix5, 400, 0); pixa2 = pixaCreate(2); pixaAddPix(pixa2, pix6, L_INSERT); pixaAddPix(pixa2, pix7, L_INSERT); pix8 = pixaDisplayTiledInRows(pixa2, 32, 1000, 1.0, 0, 50, 3); pixaAddPix(pixa, pix8, L_INSERT); pixDestroy(&pix4); pixDestroy(&pix5); pixaDestroy(&pixa2); } pixDestroy(&pix1); pixDestroy(&pix2); /* Test if this is a photoimage */ pixDecideIfPhotoImage(pix3, factor, thresh, n, &naa, pixa); if (naa) { *pnaa = naa; *pw = pixGetWidth(pix3); *ph = pixGetHeight(pix3); } if (pixa) { snprintf(buf, sizeof(buf), "/tmp/lept/comp/tiledhistos.%d.pdf", debugindex); lept_stderr("Writing to %s\n", buf); pixaConvertToPdf(pixa, 300, 1.0, L_FLATE_ENCODE, 0, NULL, buf); pixaDestroy(&pixa); } pixDestroy(&pix3); return 0; } /*! * \brief pixPadToCenterCentroid() * * \param[in] pixs any depth, colormap OK * \param[in] factor subsampling for centroid; >= 1 * \return pixd padded with white pixels, or NULL on error. * *
 * Notes:
 *      (1) This add minimum white padding to an 8 bpp pix, such that
 *          the centroid of the photometric inverse is in the center of
 *          the resulting image.  Thus in computing the centroid,
 *          black pixels have weight 255, and white pixels have weight 0.
 * 
*/ PIX * pixPadToCenterCentroid(PIX *pixs, l_int32 factor) { l_float32 cx, cy; l_int32 xs, ys, delx, dely, icx, icy, ws, hs, wd, hd; PIX *pix1, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("invalid sampling factor", __func__, NULL); pix1 = pixConvertTo8(pixs, FALSE); pixCentroid8(pix1, factor, &cx, &cy); icx = (l_int32)(cx + 0.5); icy = (l_int32)(cy + 0.5); pixGetDimensions(pix1, &ws, &hs, NULL); delx = ws - 2 * icx; dely = hs - 2 * icy; xs = L_MAX(0, delx); ys = L_MAX(0, dely); wd = 2 * L_MAX(icx, ws - icx); hd = 2 * L_MAX(icy, hs - icy); pixd = pixCreate(wd, hd, 8); pixSetAll(pixd); /* to white */ pixCopyResolution(pixd, pixs); pixRasterop(pixd, xs, ys, ws, hs, PIX_SRC, pix1, 0, 0); pixDestroy(&pix1); return pixd; } /*! * \brief pixCentroid8() * * \param[in] pixs 8 bpp * \param[in] factor subsampling factor; >= 1 * \param[out] pcx x value of centroid * \param[out] pcy y value of centroid * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This first does a photometric inversion (black = 255, white = 0).
 *          It then finds the centroid of the result.  The inversion is
 *          done because white is usually background, so the centroid
 *          is computed based on the "foreground" gray pixels, and the
 *          darker the pixel, the more weight it is given.
 * 
*/ l_ok pixCentroid8(PIX *pixs, l_int32 factor, l_float32 *pcx, l_float32 *pcy) { l_int32 i, j, w, h, wpl, val; l_float32 sumx, sumy, sumv; l_uint32 *data, *line; PIX *pix1; if (pcx) *pcx = 0.0; if (pcy) *pcy = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (!pcx || !pcy) return ERROR_INT("&cx and &cy not both defined", __func__, 1); pix1 = pixInvert(NULL, pixs); pixGetDimensions(pix1, &w, &h, NULL); data = pixGetData(pix1); wpl = pixGetWpl(pix1); sumx = sumy = sumv = 0.0; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); sumx += val * j; sumy += val * i; sumv += val; } } pixDestroy(&pix1); if (sumv == 0) { L_INFO("input image is white\n", __func__); *pcx = (l_float32)(w) / 2; *pcy = (l_float32)(h) / 2; } else { *pcx = sumx / sumv; *pcy = sumy / sumv; } return 0; } /*! * \brief pixDecideIfPhotoImage() * * \param[in] pix 8 bpp, centroid in center * \param[in] factor subsampling for histograms; >= 1 * \param[in] thresh threshold for photo/text; use 0 for default * \param[in] n in range {1, ... 7}. n^2 is the maximum number * of subregions for histograms; typ. n = 3. * \param[out] pnaa array of normalized histograms * \param[in] pixadebug [optional] use only for debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input image must be 8 bpp (no colormap), and padded with
 *          white pixels so the centroid of photo-inverted pixels is at
 *          the center of the image.
 *      (2) The parameter %n specifies the "side" of the n x n grid
 *          of subimages.  If the subimages have an aspect ratio larger
 *          than 2, the grid will change, using n^2 as a maximum for
 *          the number of subimages.  For example, if n == 3, but the
 *          image is 600 x 200 pixels, a 3x3 grid would have subimages
 *          of 200 x 67 pixels, which is more than 2:1, so we change
 *          to a 4x2 grid where each subimage has 150 x 100 pixels.
 *      (3) If the pix is not almost certainly a photoimage, the returned
 *          histograms (%naa) are null.
 *      (4) If histograms are generated, the white (255) count is set
 *          to 0.  This removes all pixels values above 230, including
 *          white padding from the centroid matching operation, from
 *          consideration.  The resulting histograms are then normalized
 *          so the maximum count is 255.
 *      (5) Default for %thresh is 1.3; this seems sufficiently conservative.
 *      (6) Use %pixadebug == NULL unless debug output is requested.
 * 
*/ l_ok pixDecideIfPhotoImage(PIX *pix, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, PIXA *pixadebug) { char buf[64]; l_int32 i, w, h, nx, ny, ngrids, istext, isphoto; l_float32 maxval, sum1, sum2, ratio; L_BMF *bmf; NUMA *na1, *na2, *na3, *narv; NUMAA *naa; PIX *pix1; PIXA *pixa1, *pixa2, *pixa3; if (!pnaa) return ERROR_INT("&naa not defined", __func__, 1); *pnaa = NULL; if (!pix || pixGetDepth(pix) != 8 || pixGetColormap(pix)) return ERROR_INT("pix undefined or invalid", __func__, 1); if (n < 1 || n > 7) { L_WARNING("n = %d is invalid; setting to 4\n", __func__, n); n = 4; } if (thresh <= 0.0) thresh = 1.3f; /* default */ /* Look for text lines */ pixDecideIfText(pix, NULL, &istext, pixadebug); if (istext) { L_INFO("Image is text\n", __func__); return 0; } /* Determine grid from n */ pixGetDimensions(pix, &w, &h, NULL); if (w == 0 || h == 0) return ERROR_INT("invalid pix dimension", __func__, 1); findHistoGridDimensions(n, w, h, &nx, &ny, 1); /* Evaluate histograms in each tile */ pixa1 = pixaSplitPix(pix, nx, ny, 0, 0); ngrids = nx * ny; bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; naa = numaaCreate(ngrids); if (pixadebug) { lept_rmdir("lept/compplot"); lept_mkdir("lept/compplot"); } for (i = 0; i < ngrids; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); /* Get histograms, set white count to 0, normalize max to 255 */ na1 = pixGetGrayHistogram(pix1, factor); numaSetValue(na1, 255, 0); na2 = numaWindowedMean(na1, 5); /* do some smoothing */ numaGetMax(na2, &maxval, NULL); na3 = numaTransform(na2, 0, 255.0 / maxval); if (pixadebug) { snprintf(buf, sizeof(buf), "/tmp/lept/compplot/plot.%d", i); gplotSimple1(na3, GPLOT_PNG, buf, "Histos"); } numaaAddNuma(naa, na3, L_INSERT); numaDestroy(&na1); numaDestroy(&na2); pixDestroy(&pix1); } if (pixadebug) { pix1 = pixaDisplayTiledInColumns(pixa1, nx, 1.0, 30, 2); pixaAddPix(pixadebug, pix1, L_INSERT); pixa2 = pixaReadFiles("/tmp/lept/compplot", ".png"); pixa3 = pixaScale(pixa2, 0.4f, 0.4f); pix1 = pixaDisplayTiledInColumns(pixa3, nx, 1.0, 30, 2); pixaAddPix(pixadebug, pix1, L_INSERT); pixaDestroy(&pixa2); pixaDestroy(&pixa3); } /* Compute the standard deviation between these histos to decide * if the image is photo or something more like line art, * which does not support good comparison by tiled histograms. */ grayInterHistogramStats(naa, 5, NULL, NULL, NULL, &narv); /* For photos, the root variance has a larger weight of * values in the range [50 ... 150] compared to [200 ... 230], * than text or line art. For the latter, most of the variance * between tiles is in the lightest parts of the image, well * above 150. */ numaGetSumOnInterval(narv, 50, 150, &sum1); numaGetSumOnInterval(narv, 200, 230, &sum2); if (sum2 == 0.0) { /* shouldn't happen */ ratio = 0.001f; /* anything very small for debug output */ isphoto = 0; /* be conservative */ } else { ratio = sum1 / sum2; isphoto = (ratio > thresh) ? 1 : 0; } if (pixadebug) { if (isphoto) L_INFO("ratio %f > %f; isphoto is true\n", __func__, ratio, thresh); else L_INFO("ratio %f < %f; isphoto is false\n", __func__, ratio, thresh); } if (isphoto) *pnaa = naa; else numaaDestroy(&naa); bmfDestroy(&bmf); numaDestroy(&narv); pixaDestroy(&pixa1); return 0; } /*! * \brief findHistoGridDimensions() * * \param[in] n max number of grid elements is n^2; typ. n = 3 * \param[in] w width of image to be subdivided * \param[in] h height of image to be subdivided * \param[out] pnx number of grid elements in x direction * \param[out] pny number of grid elements in y direction * \param[in] debug 1 for debug output to stderr * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This determines the number of subdivisions to be used on
 *          the image in each direction.  A histogram will be built
 *          for each subimage.
 *      (2) The parameter %n specifies the "side" of the n x n grid
 *          of subimages.  If the subimages have an aspect ratio larger
 *          than 2, the grid will change, using n^2 as a maximum for
 *          the number of subimages.  For example, if n == 3, but the
 *          image is 600 x 200 pixels, a 3x3 grid would have subimages
 *          of 200 x 67 pixels, which is more than 2:1, so we change
 *          to a 4x2 grid where each subimage has 150 x 100 pixels.
 * 
*/ static l_ok findHistoGridDimensions(l_int32 n, l_int32 w, l_int32 h, l_int32 *pnx, l_int32 *pny, l_int32 debug) { l_int32 nx, ny, max; l_float32 ratio; ratio = (l_float32)w / (l_float32)h; max = n * n; nx = ny = n; while (nx > 1 && ny > 1) { if (ratio > 2.0) { /* reduce ny */ ny--; nx = max / ny; if (debug) lept_stderr("nx = %d, ny = %d, ratio w/h = %4.2f\n", nx, ny, ratio); } else if (ratio < 0.5) { /* reduce nx */ nx--; ny = max / nx; if (debug) lept_stderr("nx = %d, ny = %d, ratio w/h = %4.2f\n", nx, ny, ratio); } else { /* we're ok */ if (debug) lept_stderr("nx = %d, ny = %d, ratio w/h = %4.2f\n", nx, ny, ratio); break; } ratio = (l_float32)(ny * w) / (l_float32)(nx * h); } *pnx = nx; *pny = ny; return 0; } /*! * \brief compareTilesByHisto() * * \param[in] naa1, naa2 each is a set of 256 entry histograms * \param[in] minratio requiring image sizes be compatible; < 1.0 * \param[in] w1, h1, w2, h2 image sizes from which histograms were made * \param[out] pscore similarity score of histograms * \param[in] pixadebug [optional] use only for debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) naa1 and naa2 must be generated using pixGenPhotoHistos(),
 *          using the same tile sizes.
 *      (2) The image dimensions must be similar.  The score is 0.0
 *          if the ratio of widths and heights (smallest / largest)
 *          exceeds a threshold %minratio, which must be between
 *          0.5 and 1.0.  If set at 1.0, both images must be exactly
 *          the same size.  A typical value for %minratio is 0.9.
 *      (3) The input pixadebug is null unless debug output is requested.
 * 
*/ l_ok compareTilesByHisto(NUMAA *naa1, NUMAA *naa2, l_float32 minratio, l_int32 w1, l_int32 h1, l_int32 w2, l_int32 h2, l_float32 *pscore, PIXA *pixadebug) { char buf1[128], buf2[128]; l_int32 i, n; l_float32 wratio, hratio, score, minscore, dist; L_BMF *bmf; NUMA *na1, *na2, *nadist, *nascore; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!naa1 || !naa2) return ERROR_INT("naa1 and naa2 not both defined", __func__, 1); /* Filter for different sizes */ wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : (l_float32)w2 / (l_float32)w1; hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : (l_float32)h2 / (l_float32)h1; if (wratio < minratio || hratio < minratio) { if (pixadebug) L_INFO("Sizes differ: wratio = %f, hratio = %f\n", __func__, wratio, hratio); return 0; } n = numaaGetCount(naa1); if (n != numaaGetCount(naa2)) { /* due to differing w/h ratio */ L_INFO("naa1 and naa2 sizes are different\n", __func__); return 0; } if (pixadebug) { lept_rmdir("lept/comptile"); lept_mkdir("lept/comptile"); } /* Evaluate histograms in each tile. Remove white before * computing EMD, because there are may be a lot of white * pixels due to padding, and we don't want to include them. * This also makes the debug histo plots more informative. */ minscore = 1.0; nadist = numaCreate(n); nascore = numaCreate(n); bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; for (i = 0; i < n; i++) { na1 = numaaGetNuma(naa1, i, L_CLONE); na2 = numaaGetNuma(naa2, i, L_CLONE); numaSetValue(na1, 255, 0.0); numaSetValue(na2, 255, 0.0); /* To compare histograms, use the normalized earthmover distance. * Further normalize to get the EM distance as a fraction of the * maximum distance in the histogram (255). Finally, scale this * up by 10.0, and subtract from 1.0 to get a similarity score. */ numaEarthMoverDistance(na1, na2, &dist); score = L_MAX(0.0, 1.0 - 10.0 * (dist / 255.)); numaAddNumber(nadist, dist); numaAddNumber(nascore, score); minscore = L_MIN(minscore, score); if (pixadebug) { snprintf(buf1, sizeof(buf1), "/tmp/lept/comptile/plot.%d", i); gplotSimple2(na1, na2, GPLOT_PNG, buf1, "Histos"); } numaDestroy(&na1); numaDestroy(&na2); } *pscore = minscore; if (pixadebug) { for (i = 0; i < n; i++) { PIX *pix1, *pix2; snprintf(buf1, sizeof(buf1), "/tmp/lept/comptile/plot.%d.png", i); pix1 = pixRead(buf1); numaGetFValue(nadist, i, &dist); numaGetFValue(nascore, i, &score); snprintf(buf2, sizeof(buf2), "Image %d\ndist = %5.3f, score = %5.3f", i, dist, score); pix2 = pixAddTextlines(pix1, bmf, buf2, 0x0000ff00, L_ADD_BELOW); pixaAddPix(pixadebug, pix2, L_INSERT); pixDestroy(&pix1); } lept_stderr("Writing to /tmp/lept/comptile/comparegray.pdf\n"); pixaConvertToPdf(pixadebug, 300, 1.0, L_FLATE_ENCODE, 0, NULL, "/tmp/lept/comptile/comparegray.pdf"); numaWriteDebug("/tmp/lept/comptile/scores.na", nascore); numaWriteDebug("/tmp/lept/comptile/dists.na", nadist); } bmfDestroy(&bmf); numaDestroy(&nadist); numaDestroy(&nascore); return 0; } /*! * \brief pixCompareGrayByHisto() * * \param[in] pix1, pix2 any depth; colormap OK * \param[in] box1, box2 [optional] region selected from each; can be null * \param[in] minratio requiring sizes be compatible; < 1.0 * \param[in] maxgray max value to keep in histo; >= 200, 255 to keep all * \param[in] factor subsampling factor; >= 1 * \param[in] n in range {1, ... 7}. n^2 is the maximum number * of subregions for histograms; typ. n = 3. * \param[out] pscore similarity score of histograms * \param[in] debugflag 1 for debug output; 0 for no debugging * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function compares two grayscale photo regions.  It can
 *          do it with a single histogram from each region, or with a
 *          set of spatially aligned histograms.  For both cases,
 *          align the regions using the centroid of the inverse image,
 *          and crop to the smallest of the two.
 *      (2) The parameter %n specifies the "side" of an n x n grid
 *          of subimages.  If the subimages have an aspect ratio larger
 *          than 2, the grid will change, using n^2 as a maximum for
 *          the number of subimages.  For example, if n == 3, but the
 *          image is 600 x 200 pixels, a 3x3 grid would have subimages
 *          of 200 x 67 pixels, which is more than 2:1, so we change
 *          to a 4x2 grid where each subimage has 150 x 100 pixels.
 *      (3) An initial filter gives %score = 0 if the ratio of widths
 *          and heights (smallest / largest) does not exceed a
 *          threshold %minratio.  This must be between 0.5 and 1.0.
 *          If set at 1.0, both images must be exactly the same size.
 *          A typical value for %minratio is 0.9.
 *      (4) The lightest values in the histogram can be disregarded.
 *          Set %maxgray to the lightest value to be kept.  For example,
 *          to eliminate white (255), set %maxgray = 254.  %maxgray must
 *          be >= 200.
 *      (5) For an efficient representation of the histogram, normalize
 *          using a multiplicative factor so that the number in the
 *          maximum bucket is 255.  It then takes 256 bytes to store.
 *      (6) When comparing the histograms of two regions:
 *          ~ Use %maxgray = 254 to ignore the white pixels, the number
 *            of which may be sensitive to the crop region if the pixels
 *            outside that region are white.
 *          ~ Use the Earth Mover distance (EMD), with the histograms
 *            normalized so that the sum over bins is the same.
 *            Further normalize by dividing by 255, so that the result
 *            is in [0.0 ... 1.0].
 *      (7) Get a similarity score S = 1.0 - k * D, where
 *            k is a constant, say in the range 5-10
 *            D = normalized EMD
 *          and for multiple tiles, take the Min(S) to be the final score.
 *          Using aligned tiles gives protection against accidental
 *          similarity of the overall grayscale histograms.
 *          A small number of aligned tiles works well.
 *      (8) With debug on, you get a pdf that shows, for each tile,
 *          the images, histograms and score.
 *      (9) When to use:
 *          (a) Because this function should not be used on text or
 *              line graphics, which can give false positive results
 *              (i.e., high scores for different images), the input
 *              images should be filtered.
 *          (b) To filter, first use pixDecideIfText().  If that function
 *              says the image is text, do not use it.  If the function
 *              says it is not text, it still may be line graphics, and
 *              in that case, use:
 *                 pixGetGrayHistogramTiled()
 *                 grayInterHistogramStats()
 *              to determine whether it is photo or line graphics.
 * 
*/ l_ok pixCompareGrayByHisto(PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 maxgray, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag) { l_int32 w1, h1, w2, h2; l_float32 wratio, hratio; BOX *box3, *box4; PIX *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); if (minratio < 0.5 || minratio > 1.0) return ERROR_INT("minratio not in [0.5 ... 1.0]", __func__, 1); if (maxgray < 200) return ERROR_INT("invalid maxgray; should be >= 200", __func__, 1); maxgray = L_MIN(255, maxgray); if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (n < 1 || n > 7) { L_WARNING("n = %d is invalid; setting to 4\n", __func__, n); n = 4; } if (debugflag) lept_mkdir("lept/comp"); /* Initial filter by size */ if (box1) boxGetGeometry(box1, NULL, NULL, &w1, &h1); else pixGetDimensions(pix1, &w1, &h1, NULL); if (box2) boxGetGeometry(box2, NULL, NULL, &w2, &h2); else pixGetDimensions(pix1, &w2, &h2, NULL); wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : (l_float32)w2 / (l_float32)w1; hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : (l_float32)h2 / (l_float32)h1; if (wratio < minratio || hratio < minratio) return 0; /* Initial crop, if necessary */ if (box1) pix3 = pixClipRectangle(pix1, box1, NULL); else pix3 = pixClone(pix1); if (box2) pix4 = pixClipRectangle(pix2, box2, NULL); else pix4 = pixClone(pix2); /* Convert to 8 bpp, align centroids and do maximal crop */ pix5 = pixConvertTo8(pix3, FALSE); pix6 = pixConvertTo8(pix4, FALSE); pixCropAlignedToCentroid(pix5, pix6, factor, &box3, &box4); pix7 = pixClipRectangle(pix5, box3, NULL); pix8 = pixClipRectangle(pix6, box4, NULL); pixa = (debugflag) ? pixaCreate(0) : NULL; if (debugflag) { PIX *pix9, *pix10, *pix11, *pix12, *pix13; PIXA *pixa2; pix9 = pixConvertTo32(pix5); pix10 = pixConvertTo32(pix6); pixRenderBoxArb(pix9, box3, 2, 255, 0, 0); pixRenderBoxArb(pix10, box4, 2, 255, 0, 0); pix11 = pixScaleToSize(pix9, 400, 0); pix12 = pixScaleToSize(pix10, 400, 0); pixa2 = pixaCreate(2); pixaAddPix(pixa2, pix11, L_INSERT); pixaAddPix(pixa2, pix12, L_INSERT); pix13 = pixaDisplayTiledInRows(pixa2, 32, 1000, 1.0, 0, 50, 0); pixaAddPix(pixa, pix13, L_INSERT); pixDestroy(&pix9); pixDestroy(&pix10); pixaDestroy(&pixa2); } pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); boxDestroy(&box3); boxDestroy(&box4); /* Tile and compare histograms */ pixCompareTilesByHisto(pix7, pix8, maxgray, factor, n, pscore, pixa); pixaDestroy(&pixa); pixDestroy(&pix7); pixDestroy(&pix8); return 0; } /*! * \brief pixCompareTilesByHisto() * * \param[in] pix1, pix2 8 bpp * \param[in] maxgray max value to keep in histo; 255 to keep all * \param[in] factor subsampling factor; >= 1 * \param[in] n see pixCompareGrayByHisto() * \param[out] pscore similarity score of histograms * \param[in] pixadebug [optional] use only for debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This static function is only called from pixCompareGrayByHisto().
 *          The input images have been converted to 8 bpp if necessary,
 *          aligned and cropped.
 *      (2) The input pixadebug is null unless debug output is requested.
 *      (3) See pixCompareGrayByHisto() for details.
 * 
*/ static l_ok pixCompareTilesByHisto(PIX *pix1, PIX *pix2, l_int32 maxgray, l_int32 factor, l_int32 n, l_float32 *pscore, PIXA *pixadebug) { char buf[64]; l_int32 w, h, i, j, nx, ny, ngr; l_float32 score, minscore, maxval1, maxval2, dist; L_BMF *bmf; NUMA *na1, *na2, *na3, *na4, *na5, *na6, *na7; PIX *pix3, *pix4; PIXA *pixa1, *pixa2; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); /* Determine grid from n */ pixGetDimensions(pix1, &w, &h, NULL); findHistoGridDimensions(n, w, h, &nx, &ny, 1); ngr = nx * ny; /* Evaluate histograms in each tile */ pixa1 = pixaSplitPix(pix1, nx, ny, 0, 0); pixa2 = pixaSplitPix(pix2, nx, ny, 0, 0); na7 = (pixadebug) ? numaCreate(ngr) : NULL; bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; minscore = 1.0; for (i = 0; i < ngr; i++) { pix3 = pixaGetPix(pixa1, i, L_CLONE); pix4 = pixaGetPix(pixa2, i, L_CLONE); /* Get histograms, set white count to 0, normalize max to 255 */ na1 = pixGetGrayHistogram(pix3, factor); na2 = pixGetGrayHistogram(pix4, factor); if (maxgray < 255) { for (j = maxgray + 1; j <= 255; j++) { numaSetValue(na1, j, 0); numaSetValue(na2, j, 0); } } na3 = numaWindowedMean(na1, 5); na4 = numaWindowedMean(na2, 5); numaGetMax(na3, &maxval1, NULL); numaGetMax(na4, &maxval2, NULL); na5 = numaTransform(na3, 0, 255.0 / maxval1); na6 = numaTransform(na4, 0, 255.0 / maxval2); if (pixadebug) { gplotSimple2(na5, na6, GPLOT_PNG, "/tmp/lept/comp/plot1", "Histos"); } /* To compare histograms, use the normalized earthmover distance. * Further normalize to get the EM distance as a fraction of the * maximum distance in the histogram (255). Finally, scale this * up by 10.0, and subtract from 1.0 to get a similarity score. */ numaEarthMoverDistance(na5, na6, &dist); score = L_MAX(0.0, 1.0 - 8.0 * (dist / 255.)); if (pixadebug) numaAddNumber(na7, score); minscore = L_MIN(minscore, score); if (pixadebug) { PIX *pix5, *pix6, *pix7, *pix8, *pix9, *pix10; PIXA *pixa3; l_int32 w, h, wscale; pixa3 = pixaCreate(3); pixGetDimensions(pix3, &w, &h, NULL); wscale = (w > h) ? 700 : 400; pix5 = pixScaleToSize(pix3, wscale, 0); pix6 = pixScaleToSize(pix4, wscale, 0); pixaAddPix(pixa3, pix5, L_INSERT); pixaAddPix(pixa3, pix6, L_INSERT); pix7 = pixRead("/tmp/lept/comp/plot1.png"); pix8 = pixScaleToSize(pix7, 700, 0); snprintf(buf, sizeof(buf), "%5.3f", score); pix9 = pixAddTextlines(pix8, bmf, buf, 0x0000ff00, L_ADD_RIGHT); pixaAddPix(pixa3, pix9, L_INSERT); pix10 = pixaDisplayTiledInRows(pixa3, 32, 1000, 1.0, 0, 50, 0); pixaAddPix(pixadebug, pix10, L_INSERT); pixDestroy(&pix7); pixDestroy(&pix8); pixaDestroy(&pixa3); } numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); pixDestroy(&pix3); pixDestroy(&pix4); } *pscore = minscore; if (pixadebug) { pixaConvertToPdf(pixadebug, 300, 1.0, L_FLATE_ENCODE, 0, NULL, "/tmp/lept/comp/comparegray.pdf"); numaWriteDebug("/tmp/lept/comp/tilescores.na", na7); } bmfDestroy(&bmf); numaDestroy(&na7); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return 0; } /*! * \brief pixCropAlignedToCentroid() * * \param[in] pix1, pix2 any depth; colormap OK * \param[in] factor subsampling; >= 1 * \param[out] pbox1 crop box for pix1 * \param[out] pbox2 crop box for pix2 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the maximum crop boxes for two 8 bpp images when
 *          their centroids of their photometric inverses are aligned.
 *          Black pixels have weight 255; white pixels have weight 0.
 * 
*/ l_ok pixCropAlignedToCentroid(PIX *pix1, PIX *pix2, l_int32 factor, BOX **pbox1, BOX **pbox2) { l_float32 cx1, cy1, cx2, cy2; l_int32 w1, h1, w2, h2, icx1, icy1, icx2, icy2; l_int32 xm, xm1, xm2, xp, xp1, xp2, ym, ym1, ym2, yp, yp1, yp2; PIX *pix3, *pix4; if (pbox1) *pbox1 = NULL; if (pbox2) *pbox2 = NULL; if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); if (factor < 1) return ERROR_INT("subsampling factor must be >= 1", __func__, 1); if (!pbox1 || !pbox2) return ERROR_INT("&box1 and &box2 not both defined", __func__, 1); pix3 = pixConvertTo8(pix1, FALSE); pix4 = pixConvertTo8(pix2, FALSE); pixCentroid8(pix3, factor, &cx1, &cy1); pixCentroid8(pix4, factor, &cx2, &cy2); pixGetDimensions(pix3, &w1, &h1, NULL); pixGetDimensions(pix4, &w2, &h2, NULL); pixDestroy(&pix3); pixDestroy(&pix4); icx1 = (l_int32)(cx1 + 0.5); icy1 = (l_int32)(cy1 + 0.5); icx2 = (l_int32)(cx2 + 0.5); icy2 = (l_int32)(cy2 + 0.5); xm = L_MIN(icx1, icx2); xm1 = icx1 - xm; xm2 = icx2 - xm; xp = L_MIN(w1 - icx1, w2 - icx2); /* one pixel beyond to the right */ xp1 = icx1 + xp; xp2 = icx2 + xp; ym = L_MIN(icy1, icy2); ym1 = icy1 - ym; ym2 = icy2 - ym; yp = L_MIN(h1 - icy1, h2 - icy2); /* one pixel below the bottom */ yp1 = icy1 + yp; yp2 = icy2 + yp; *pbox1 = boxCreate(xm1, ym1, xp1 - xm1, yp1 - ym1); *pbox2 = boxCreate(xm2, ym2, xp2 - xm2, yp2 - ym2); return 0; } /*! * \brief l_compressGrayHistograms() * * \param[in] naa set of 256-entry histograms * \param[in] w, h size of image * \param[out] psize size of byte array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This first writes w and h to the byte array as 4 byte ints.
 *      (2) Then it normalizes each histogram to a max value of 255,
 *          and saves each value as a byte.  If there are
 *          N histograms, the output bytearray has 8 + 256 * N bytes.
 *      (3) Further compression of the array with zlib yields only about
 *          a 25% decrease in size, so we don't bother.  If size reduction
 *          were important, a lossy transform using a 1-dimensional DCT
 *          would be effective, because we don't care about the fine
 *          details of these histograms.
 * 
*/ l_uint8 * l_compressGrayHistograms(NUMAA *naa, l_int32 w, l_int32 h, size_t *psize) { l_uint8 *bytea; l_int32 i, j, n, nn, ival; l_float32 maxval; NUMA *na1, *na2; if (!psize) return (l_uint8 *)ERROR_PTR("&size not defined", __func__, NULL); *psize = 0; if (!naa) return (l_uint8 *)ERROR_PTR("naa not defined", __func__, NULL); n = numaaGetCount(naa); for (i = 0; i < n; i++) { nn = numaaGetNumaCount(naa, i); if (nn != 256) { L_ERROR("%d numbers in numa[%d]\n", __func__, nn, i); return NULL; } } if ((bytea = (l_uint8 *)LEPT_CALLOC(8 + 256 * n, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bytea not made", __func__, NULL); *psize = 8 + 256 * n; l_setDataFourBytes(bytea, 0, w); l_setDataFourBytes(bytea, 1, h); for (i = 0; i < n; i++) { na1 = numaaGetNuma(naa, i, L_COPY); numaGetMax(na1, &maxval, NULL); na2 = numaTransform(na1, 0, 255.0 / maxval); for (j = 0; j < 256; j++) { numaGetIValue(na2, j, &ival); bytea[8 + 256 * i + j] = ival; } numaDestroy(&na1); numaDestroy(&na2); } return bytea; } /*! * \brief l_uncompressGrayHistograms() * * \param[in] bytea byte array of size 8 + 256 * N, N an integer * \param[in] size size of byte array * \param[out] pw width of the image that generated the histograms * \param[out] ph height of the image * \return numaa representing N histograms, each with 256 bins, * or NULL on error. * *
 * Notes:
 *      (1) The first 8 bytes are read as two 32-bit ints.
 *      (2) Then this constructs a numaa representing some number of
 *          gray histograms that are normalized such that the max value
 *          in each histogram is 255.  The data is stored as a byte
 *          array, with 256 bytes holding the data for each histogram.
 *          Each gray histogram was computed from a tile of a grayscale image.
 * 
*/ NUMAA * l_uncompressGrayHistograms(l_uint8 *bytea, size_t size, l_int32 *pw, l_int32 *ph) { l_int32 i, j, n; NUMA *na; NUMAA *naa; if (pw) *pw = 0; if (ph) *ph = 0; if (!pw || !ph) return (NUMAA *)ERROR_PTR("&w and &h not both defined", __func__, NULL); if (!bytea) return (NUMAA *)ERROR_PTR("bytea not defined", __func__, NULL); n = (size - 8) / 256; if ((size - 8) % 256 != 0) return (NUMAA *)ERROR_PTR("bytea size is invalid", __func__, NULL); *pw = l_getDataFourBytes(bytea, 0); *ph = l_getDataFourBytes(bytea, 1); naa = numaaCreate(n); for (i = 0; i < n; i++) { na = numaCreate(256); for (j = 0; j < 256; j++) numaAddNumber(na, bytea[8 + 256 * i + j]); numaaAddNuma(naa, na, L_INSERT); } return naa; } /*------------------------------------------------------------------* * Translated images at the same resolution * *------------------------------------------------------------------*/ /*! * \brief pixCompareWithTranslation() * * \param[in] pix1, pix2 any depth; colormap OK * \param[in] thresh threshold for converting to 1 bpp * \param[out] pdelx x translation on pix2 to align with pix1 * \param[out] pdely y translation on pix2 to align with pix1 * \param[out] pscore correlation score at best alignment * \param[in] debugflag 1 for debug output; 0 for no debugging * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a coarse-to-fine search for best translational
 *          alignment of two images, measured by a scoring function
 *          that is the correlation between the fg pixels.
 *      (2) The threshold is used if the images aren't 1 bpp.
 *      (3) With debug on, you get a pdf that shows, as a grayscale
 *          image, the score as a function of shift from the initial
 *          estimate, for each of the four levels.  The shift is 0 at
 *          the center of the image.
 *      (4) With debug on, you also get a pdf that shows the
 *          difference at the best alignment between the two images,
 *          at each of the four levels.  The red and green pixels
 *          show locations where one image has a fg pixel and the
 *          other doesn't.  The black pixels are where both images
 *          have fg pixels, and white pixels are where neither image
 *          has fg pixels.
 * 
*/ l_ok pixCompareWithTranslation(PIX *pix1, PIX *pix2, l_int32 thresh, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_uint8 *subtab; l_int32 i, level, area1, area2, delx, dely; l_int32 etransx, etransy, maxshift, dbint; l_int32 *stab, *ctab; l_float32 cx1, cx2, cy1, cy2, score; PIX *pixb1, *pixb2, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa1, *pixa2, *pixadb = NULL; if (pdelx) *pdelx = 0; if (pdely) *pdely = 0; if (pscore) *pscore = 0.0; if (!pdelx || !pdely) return ERROR_INT("&delx and &dely not defined", __func__, 1); if (!pscore) return ERROR_INT("&score not defined", __func__, 1); if (!pix1) return ERROR_INT("pix1 not defined", __func__, 1); if (!pix2) return ERROR_INT("pix2 not defined", __func__, 1); /* Make tables */ subtab = makeSubsampleTab2x(); stab = makePixelSumTab8(); ctab = makePixelCentroidTab8(); /* Binarize each image */ pixb1 = pixConvertTo1(pix1, thresh); pixb2 = pixConvertTo1(pix2, thresh); /* Make a cascade of 2x reduced images for each, thresholding * with level 2 (neutral), down to 8x reduction */ pixa1 = pixaCreate(4); pixa2 = pixaCreate(4); if (debugflag) pixadb = pixaCreate(4); pixaAddPix(pixa1, pixb1, L_INSERT); pixaAddPix(pixa2, pixb2, L_INSERT); for (i = 0; i < 3; i++) { pixt1 = pixReduceRankBinary2(pixb1, 2, subtab); pixt2 = pixReduceRankBinary2(pixb2, 2, subtab); pixaAddPix(pixa1, pixt1, L_INSERT); pixaAddPix(pixa2, pixt2, L_INSERT); pixb1 = pixt1; pixb2 = pixt2; } /* At the lowest level, use the centroids with a maxshift of 6 * to search for the best alignment. Then at higher levels, * use the result from the level below as the initial approximation * for the alignment, and search with a maxshift of 2. */ for (level = 3; level >= 0; level--) { pixt1 = pixaGetPix(pixa1, level, L_CLONE); pixt2 = pixaGetPix(pixa2, level, L_CLONE); pixCountPixels(pixt1, &area1, stab); pixCountPixels(pixt2, &area2, stab); if (level == 3) { pixCentroid(pixt1, ctab, stab, &cx1, &cy1); pixCentroid(pixt2, ctab, stab, &cx2, &cy2); etransx = lept_roundftoi(cx1 - cx2); etransy = lept_roundftoi(cy1 - cy2); maxshift = 6; } else { etransx = 2 * delx; etransy = 2 * dely; maxshift = 2; } dbint = (debugflag) ? level + 1 : 0; pixBestCorrelation(pixt1, pixt2, area1, area2, etransx, etransy, maxshift, stab, &delx, &dely, &score, dbint); if (debugflag) { lept_stderr("Level %d: delx = %d, dely = %d, score = %7.4f\n", level, delx, dely, score); pixRasteropIP(pixt2, delx, dely, L_BRING_IN_WHITE); pixt3 = pixDisplayDiffBinary(pixt1, pixt2); pixt4 = pixExpandReplicate(pixt3, 8 / (1 << (3 - level))); pixaAddPix(pixadb, pixt4, L_INSERT); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); } if (debugflag) { pixaConvertToPdf(pixadb, 300, 1.0, L_FLATE_ENCODE, 0, NULL, "/tmp/lept/comp/compare.pdf"); convertFilesToPdf("/tmp/lept/comp", "correl_", 30, 1.0, L_FLATE_ENCODE, 0, "Correlation scores at levels 1 through 5", "/tmp/lept/comp/correl.pdf"); pixaDestroy(&pixadb); } *pdelx = delx; *pdely = dely; *pscore = score; pixaDestroy(&pixa1); pixaDestroy(&pixa2); LEPT_FREE(subtab); LEPT_FREE(stab); LEPT_FREE(ctab); return 0; } /*! * \brief pixBestCorrelation() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \param[in] area1 number of on pixels in pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] etransx estimated x translation of pix2 to align with pix1 * \param[in] etransy estimated y translation of pix2 to align with pix1 * \param[in] maxshift max x and y shift of pix2, around the estimated * alignment location, relative to pix1 * \param[in] tab8 [optional] sum tab for ON pixels in byte; can be NULL * \param[out] pdelx [optional] best x shift of pix2 relative to pix1 * \param[out] pdely [optional] best y shift of pix2 relative to pix1 * \param[out] pscore [optional] maximum score found; can be NULL * \param[in] debugflag <= 0 to skip; positive to generate output. * The integer is used to label the debug image. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This maximizes the correlation score between two 1 bpp images,
 *          by starting with an estimate of the alignment
 *          (%etransx, %etransy) and computing the correlation around this.
 *          It optionally returns the shift (%delx, %dely) that maximizes
 *          the correlation score when pix2 is shifted by this amount
 *          relative to pix1.
 *      (2) Get the centroids of pix1 and pix2, using pixCentroid(),
 *          to compute (%etransx, %etransy).  Get the areas using
 *          pixCountPixels().
 *      (3) The centroid of pix2 is shifted with respect to the centroid
 *          of pix1 by all values between -maxshiftx and maxshiftx,
 *          and likewise for the y shifts.  Therefore, the number of
 *          correlations computed is:
 *               (2 * maxshiftx + 1) * (2 * maxshifty + 1)
 *          Consequently, if pix1 and pix2 are large, you should do this
 *          in a coarse-to-fine sequence.  See the use of this function
 *          in pixCompareWithTranslation().
 * 
*/ l_ok pixBestCorrelation(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 etransx, l_int32 etransy, l_int32 maxshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_int32 shiftx, shifty, delx, dely; l_int32 *tab; l_float32 maxscore, score; FPIX *fpix = NULL; PIX *pix3, *pix4; if (pdelx) *pdelx = 0; if (pdely) *pdely = 0; if (pscore) *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", __func__, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", __func__, 1); if (debugflag > 0) fpix = fpixCreate(2 * maxshift + 1, 2 * maxshift + 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; /* Search over a set of {shiftx, shifty} for the max */ maxscore = 0; delx = etransx; dely = etransy; for (shifty = -maxshift; shifty <= maxshift; shifty++) { for (shiftx = -maxshift; shiftx <= maxshift; shiftx++) { pixCorrelationScoreShifted(pix1, pix2, area1, area2, etransx + shiftx, etransy + shifty, tab, &score); if (debugflag > 0) { fpixSetPixel(fpix, maxshift + shiftx, maxshift + shifty, 1000.0 * score); /* lept_stderr("(sx, sy) = (%d, %d): score = %6.4f\n", shiftx, shifty, score); */ } if (score > maxscore) { maxscore = score; delx = etransx + shiftx; dely = etransy + shifty; } } } if (debugflag > 0) { char buf[128]; lept_mkdir("lept/comp"); pix3 = fpixDisplayMaxDynamicRange(fpix); pix4 = pixExpandReplicate(pix3, 20); snprintf(buf, sizeof(buf), "/tmp/lept/comp/correl_%d.png", debugflag); pixWrite(buf, pix4, IFF_PNG); pixDestroy(&pix3); pixDestroy(&pix4); fpixDestroy(&fpix); } if (pdelx) *pdelx = delx; if (pdely) *pdely = dely; if (pscore) *pscore = maxscore; if (!tab8) LEPT_FREE(tab); return 0; } leptonica-1.86.0/src/conncomp.c000066400000000000000000001164701506303110300163340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file conncomp.c *
 *
 *    Connected component counting and extraction, using Heckbert's
 *    stack-based filling algorithm.
 *
 *      4- and 8-connected components: counts, bounding boxes and images
 *
 *      Top-level calls:
 *            BOXA     *pixConnComp()
 *            BOXA     *pixConnCompPixa()
 *            BOXA     *pixConnCompBB()
 *            l_int32   pixCountConnComp()
 *
 *      Identify the next c.c. to be erased:
 *            l_int32   nextOnPixelInRaster()
 *    static  l_int32   nextOnPixelInRasterLow()
 *
 *      Erase the c.c., saving the b.b.:
 *            BOX      *pixSeedfillBB()
 *            BOX      *pixSeedfill4BB()
 *            BOX      *pixSeedfill8BB()
 *
 *      Just erase the c.c.:
 *            l_int32   pixSeedfill()
 *            l_int32   pixSeedfill4()
 *            l_int32   pixSeedfill8()
 *
 *      Static stack helper functions for single raster line seedfill:
 *            static void    pushFillsegBB()
 *            static void    pushFillseg()
 *            static void    popFillseg()
 *
 *  The basic method in pixConnCompBB() is very simple.  We scan the
 *  image in raster order, looking for the next ON pixel.  When it
 *  is found, we erase it and every pixel of the 4- or 8-connected
 *  component to which it belongs, using Heckbert's seedfill
 *  algorithm.  As pixels are erased, we keep track of the
 *  minimum rectangle that encloses all erased pixels; after
 *  the connected component has been erased, we save its
 *  bounding box in an array of boxes.  When all pixels in the
 *  image have been erased, we have an array that describes every
 *  4- or 8-connected component in terms of its bounding box.
 *
 *  pixConnCompPixa() is a slight variation on pixConnCompBB(),
 *  where we additionally save an array of images (in a Pixa)
 *  of each of the 4- or 8-connected components.  This is done trivially
 *  by maintaining two temporary images.  We erase a component from one,
 *  and use the bounding box to extract the pixels within the b.b.
 *  from each of the two images.  An XOR between these subimages
 *  gives the erased component.  Then we erase the component from the
 *  second image using the XOR again, with the extracted component
 *  placed on the second image at the location of the bounding box.
 *  Rasterop does all the work.  At the end, we have an array
 *  of the 4- or 8-connected components, as well as an array of the
 *  bounding boxes that describe where they came from in the original image.
 *
 *  If you just want the number of connected components, pixCountConnComp()
 *  is a bit faster than pixConnCompBB(), because it doesn't have to
 *  keep track of the bounding rectangles for each c.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" /*! * \brief The struct FillSeg is used by the Heckbert seedfill algorithm to * hold information about image segments that are waiting to be * investigated. We use two Stacks, one to hold the FillSegs in use, * and an auxiliary Stack as a reservoir to hold FillSegs for re-use. */ struct FillSeg { l_int32 xleft; /*!< left edge of run */ l_int32 xright; /*!< right edge of run */ l_int32 y; /*!< run y */ l_int32 dy; /*!< parent segment direction: 1 above, -1 below) */ }; typedef struct FillSeg FILLSEG; static l_int32 nextOnPixelInRasterLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py); /* Static accessors for FillSegs on a stack */ static void pushFillsegBB(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy); static void pushFillseg(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax); static void popFillseg(L_STACK *stack, l_int32 *pxleft, l_int32 *pxright, l_int32 *py, l_int32 *pdy); #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Bounding boxes of 4 Connected Components * *-----------------------------------------------------------------------*/ /*! * \brief pixConnComp() * * \param[in] pixs 1 bpp * \param[out] ppixa [optional] pixa of each c.c. * \param[in] connectivity 4 or 8 * \return boxa, or NULL on error * *
 * Notes:
 *      (1) This is the top-level call for getting bounding boxes or
 *          a pixa of the components, and it can be used instead
 *          of either pixConnCompBB() or pixConnCompPixa(), rsp.
 * 
*/ BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity) { if (ppixa) *ppixa = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (!ppixa) return pixConnCompBB(pixs, connectivity); else return pixConnCompPixa(pixs, ppixa, connectivity); } /*! * \brief pixConnCompPixa() * * \param[in] pixs 1 bpp * \param[out] ppixa pixa of each c.c. * \param[in] connectivity 4 or 8 * \return boxa, or NULL on error * *
 * Notes:
 *      (1) This finds bounding boxes of 4- or 8-connected components
 *          in a binary image, and saves images of each c.c
 *          in a pixa array.
 *      (2) It sets up 2 temporary pix, and for each c.c. that is
 *          located in raster order, it erases the c.c. from one pix,
 *          then uses the b.b. to extract the c.c. from the two pix using
 *          an XOR, and finally erases the c.c. from the second pix.
 *      (3) A clone of the returned boxa (where all boxes in the array
 *          are clones) is inserted into the pixa.
 *      (4) If the input is valid, this always returns a boxa and a pixa.
 *          If pixs is empty, the boxa and pixa will be empty.
 * 
*/ BOXA * pixConnCompPixa(PIX *pixs, PIXA **ppixa, l_int32 connectivity) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; BOX *box; BOXA *boxa; L_STACK *stack, *auxstack; if (!ppixa) return (BOXA *)ERROR_PTR("&pixa not defined", __func__, NULL); *ppixa = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); pix1 = pix2 = pix3 = pix4 = NULL; stack = NULL; pixa = pixaCreate(0); boxa = NULL; *ppixa = pixa; pixZero(pixs, &iszero); if (iszero) return boxaCreate(1); /* return empty boxa and empty pixa */ pixSetPadBits(pixs, 0); pix1 = pixCopy(NULL, pixs); pix2 = pixCopy(NULL, pixs); if (!pix1 || !pix2) { L_ERROR("pix1 or pix2 not made\n", __func__); pixaDestroy(ppixa); goto cleanup; } h = pixGetHeight(pixs); if ((stack = lstackCreate(h)) == NULL) { L_ERROR("stack not made\n", __func__); pixaDestroy(ppixa); goto cleanup; } auxstack = lstackCreate(0); stack->auxstack = auxstack; boxa = boxaCreate(0); xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) break; if ((box = pixSeedfillBB(pix1, stack, x, y, connectivity)) == NULL) { boxaDestroy(&boxa); pixaDestroy(ppixa); L_ERROR("box not made\n", __func__); goto cleanup; } boxaAddBox(boxa, box, L_INSERT); /* Save the c.c. and remove from pix2 as well */ pix3 = pixClipRectangle(pix1, box, NULL); pix4 = pixClipRectangle(pix2, box, NULL); pixXor(pix3, pix3, pix4); pixRasterop(pix2, box->x, box->y, box->w, box->h, PIX_SRC ^ PIX_DST, pix3, 0, 0); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix4); xstart = x; ystart = y; } #if DEBUG pixCountPixels(pix1, &iszero, NULL); lept_stderr("Number of remaining pixels = %d\n", iszero); lept_mkdir("lept/cc"); pixWriteDebug("/tmp/lept/cc/remain.png", pix1, IFF_PNG); #endif /* DEBUG */ /* Remove old boxa of pixa and replace with a copy */ boxaDestroy(&pixa->boxa); pixa->boxa = boxaCopy(boxa, L_COPY); *ppixa = pixa; /* Cleanup, freeing the fillsegs on each stack */ cleanup: lstackDestroy(&stack, TRUE); pixDestroy(&pix1); pixDestroy(&pix2); return boxa; } /*! * \brief pixConnCompBB() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \return boxa, or NULL on error * *
 * Notes:
 *     (1) Finds bounding boxes of 4- or 8-connected components
 *         in a binary image.
 *     (2) This works on a copy of the input pix.  The c.c. are located
 *         in raster order and erased one at a time.  In the process,
 *         the b.b. is computed and saved.
 * 
*/ BOXA * pixConnCompBB(PIX *pixs, l_int32 connectivity) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pix1; BOX *box; BOXA *boxa; L_STACK *stack, *auxstack; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); boxa = NULL; pix1 = NULL; stack = NULL; pixZero(pixs, &iszero); if (iszero) return boxaCreate(1); /* return empty boxa */ pixSetPadBits(pixs, 0); if ((pix1 = pixCopy(NULL, pixs)) == NULL) return (BOXA *)ERROR_PTR("pix1 not made", __func__, NULL); h = pixGetHeight(pixs); if ((stack = lstackCreate(h)) == NULL) { L_ERROR("stack not made\n", __func__); goto cleanup; } auxstack = lstackCreate(0); stack->auxstack = auxstack; boxa = boxaCreate(0); xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) break; if ((box = pixSeedfillBB(pix1, stack, x, y, connectivity)) == NULL) { L_ERROR("box not made\n", __func__); boxaDestroy(&boxa); goto cleanup; } boxaAddBox(boxa, box, L_INSERT); xstart = x; ystart = y; } #if DEBUG pixCountPixels(pix1, &iszero, NULL); lept_stderr("Number of remaining pixels = %d\n", iszero); lept_mkdir("lept/cc"); pixWriteDebug("/tmp/lept/cc/remain.png", pix1, IFF_PNG); #endif /* DEBUG */ /* Cleanup, freeing the fillsegs on each stack */ cleanup: lstackDestroy(&stack, TRUE); pixDestroy(&pix1); return boxa; } /*! * \brief pixCountConnComp() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \param[out] pcount * \return 0 if OK, 1 on error * * Notes: * (1 This is the top-level call for getting the number of * 4- or 8-connected components in a 1 bpp image. * 2 It works on a copy of the input pix. The c.c. are located * in raster order and erased one at a time. */ l_ok pixCountConnComp(PIX *pixs, l_int32 connectivity, l_int32 *pcount) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pix1; L_STACK *stack, *auxstack; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; /* initialize the count to 0 */ if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not 4 or 8", __func__, 1); stack = NULL; pixZero(pixs, &iszero); if (iszero) return 0; pixSetPadBits(pixs, 0); if ((pix1 = pixCopy(NULL, pixs)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); h = pixGetHeight(pixs); if ((stack = lstackCreate(h)) == NULL) { pixDestroy(&pix1); return ERROR_INT("stack not made\n", __func__, 1); } auxstack = lstackCreate(0); stack->auxstack = auxstack; xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) break; pixSeedfill(pix1, stack, x, y, connectivity); (*pcount)++; xstart = x; ystart = y; } /* Cleanup, freeing the fillsegs on each stack */ lstackDestroy(&stack, TRUE); pixDestroy(&pix1); return 0; } /*! * \brief nextOnPixelInRaster() * * \param[in] pixs 1 bpp * \param[in] xstart, ystart starting point for search * \param[out] px, py coord value of next ON pixel * \return 1 if a pixel is found; 0 otherwise or on error */ l_int32 nextOnPixelInRaster(PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py) { l_int32 w, h, d, wpl; l_uint32 *data; if (!pixs) return ERROR_INT("pixs not defined", __func__, 0); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return ERROR_INT("pixs not 1 bpp", __func__, 0); wpl = pixGetWpl(pixs); data = pixGetData(pixs); return nextOnPixelInRasterLow(data, w, h, wpl, xstart, ystart, px, py); } /*! * \brief nextOnPixelInRasterLow() * * \param[in] data pix data * \param[in] w, h width and height * \param[in] wpl words per line * \param[in] xstart, ystart starting point for search * \param[out] px, py coord value of next ON pixel * \return 1 if a pixel is found; 0 otherwise or on error */ static l_int32 nextOnPixelInRasterLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py) { l_int32 i, x, y, xend, startword; l_uint32 *line, *pword; /* Look at the first word */ line = data + ystart * wpl; pword = line + (xstart / 32); if (*pword) { xend = xstart - (xstart % 32) + 31; for (x = xstart; x <= xend && x < w; x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = ystart; return 1; } } } /* Continue with the rest of the line */ startword = (xstart / 32) + 1; x = 32 * startword; for (pword = line + startword; x < w; pword++, x += 32) { if (*pword) { for (i = 0; i < 32 && x < w; i++, x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = ystart; return 1; } } } } /* Continue with following lines */ for (y = ystart + 1; y < h; y++) { line = data + y * wpl; for (pword = line, x = 0; x < w; pword++, x += 32) { if (*pword) { for (i = 0; i < 32 && x < w; i++, x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = y; return 1; } } } } } return 0; } /*! * \brief pixSeedfillBB() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \param[in] connectivity 4 or 8 * \return box or NULL on error * *
 * Notes:
 *      (1) This is the high-level interface to Paul Heckbert's
 *          stack-based seedfill algorithm.
 * 
*/ BOX * pixSeedfillBB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity) { BOX *box; if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (BOX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (connectivity == 4) { if ((box = pixSeedfill4BB(pixs, stack, x, y)) == NULL) return (BOX *)ERROR_PTR("box not made", __func__, NULL); } else if (connectivity == 8) { if ((box = pixSeedfill8BB(pixs, stack, x, y)) == NULL) return (BOX *)ERROR_PTR("box not made", __func__, NULL); } else { return (BOX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); } return box; } /*! * \brief pixSeedfill4BB() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \return box or NULL on error. * *
 * Notes:
 *      (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm.
 *      (2) This operates on the input 1 bpp pix to remove the fg seed
 *          pixel, at (x,y), and all pixels that are 4-connected to it.
 *          The seed pixel at (x,y) must initially be ON.
 *      (3) Returns the bounding box of the erased 4-cc component.
 *      (4) Reference: see Paul Heckbert's stack-based seed fill algorithm
 *          in "Graphic Gems", ed. Andrew Glassner, Academic
 *          Press, 1990.  The algorithm description is given
 *          on pp. 275-277; working C code is on pp. 721-722.)
 *          The code here follows Heckbert's exactly, except
 *          we use function calls instead of macros for
 *          pushing data on and popping data off the stack.
 *          This makes sense to do because Heckbert's fixed-size
 *          stack with macros is dangerous: images exist that
 *          will overrun the stack and crash.   The stack utility
 *          here grows dynamically as needed, and the fillseg
 *          structures that are not in use are stored in another
 *          stack for reuse.  It should be noted that the
 *          overhead in the function calls (vs. macros) is negligible.
 * 
*/ BOX * pixSeedfill4BB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ l_uint32 *data, *line; BOX *box; if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", __func__, NULL); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be within the image and ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return NULL; /* Init stack to seed: * Must first init b.b. values to prevent valgrind from complaining; * then init b.b. boundaries correctly to seed. */ minx = miny = 100000; maxx = maxy = 0; pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); minx = maxx = x; miny = maxy = y; while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1 - 1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1) /* pix at x1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1 - 1) /* leak on left? */ pushFillsegBB(stack, xstart, x1 - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); x = x1 + 1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillsegBB(stack, xstart, x - 1, y, dy, ymax, &minx, &maxx, &miny, &maxy); if (x > x2 + 1) /* leak on right? */ pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); skip: for (x++; x <= x2 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 && x <= xmax); } if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) == NULL) return (BOX *)ERROR_PTR("box not made", __func__, NULL); return box; } /*! * \brief pixSeedfill8BB() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \return box or NULL on error. * *
 * Notes:
 *      (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm.
 *      (2) This operates on the input 1 bpp pix to remove the fg seed
 *          pixel, at (x,y), and all pixels that are 8-connected to it.
 *          The seed pixel at (x,y) must initially be ON.
 *      (3) Returns the bounding box of the erased 8-cc component.
 *      (4) Reference: see Paul Heckbert's stack-based seed fill algorithm
 *          in "Graphic Gems", ed. Andrew Glassner, Academic
 *          Press, 1990.  The algorithm description is given
 *          on pp. 275-277; working C code is on pp. 721-722.)
 *          The code here follows Heckbert's closely, except
 *          the leak checks are changed for 8 connectivity.
 *          See comments on pixSeedfill4BB() for more details.
 * 
*/ BOX * pixSeedfill8BB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ l_uint32 *data, *line; BOX *box; if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", __func__, NULL); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return NULL; /* Init stack to seed: * Must first init b.b. values to prevent valgrind from complaining; * then init b.b. boundaries correctly to seed. */ minx = miny = 100000; maxx = maxy = 0; pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); minx = maxx = x; miny = maxy = y; while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 and for x > x2. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1) /* leak on left? */ pushFillsegBB(stack, xstart, x1 - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); x = x1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillsegBB(stack, xstart, x - 1, y, dy, ymax, &minx, &maxx, &miny, &maxy); if (x > x2) /* leak on right? */ pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); skip: for (x++; x <= x2 + 1 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 + 1 && x <= xmax); } if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) == NULL) return (BOX *)ERROR_PTR("box not made", __func__, NULL); return box; } /*! * \brief pixSeedfill() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \param[in] connectivity 4 or 8 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes the component from pixs with a fg pixel at (x,y).
 *      (2) See pixSeedfill4() and pixSeedfill8() for details.
 * 
*/ l_ok pixSeedfill(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity) { l_int32 retval; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!stack) return ERROR_INT("stack not defined", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not 4 or 8", __func__, 1); if (connectivity == 4) retval = pixSeedfill4(pixs, stack, x, y); else /* connectivity == 8 */ retval = pixSeedfill8(pixs, stack, x, y); return retval; } /*! * \brief pixSeedfill4() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm.
 *      (2) This operates on the input 1 bpp pix to remove the fg seed
 *          pixel, at (x,y), and all pixels that are 4-connected to it.
 *          The seed pixel at (x,y) must initially be ON.
 *      (3) Reference: see pixSeedFill4BB()
 * 
*/ l_ok pixSeedfill4(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_uint32 *data, *line; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!stack) return ERROR_INT("stack not defined", __func__, 1); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be within the image and ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return 0; /* Init stack to seed */ pushFillseg(stack, x, x, y, 1, ymax); pushFillseg(stack, x, x, y + 1, -1, ymax); while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1 - 1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1) /* pix at x1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1 - 1) /* leak on left? */ pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); x = x1 + 1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillseg(stack, xstart, x - 1, y, dy, ymax); if (x > x2 + 1) /* leak on right? */ pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); skip: for (x++; x <= x2 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 && x <= xmax); } return 0; } /*! * \brief pixSeedfill8() * * \param[in] pixs 1 bpp * \param[in] stack for holding fillsegs * \param[in] x,y location of seed pixel * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm.
 *      (2) This operates on the input 1 bpp pix to remove the fg seed
 *          pixel, at (x,y), and all pixels that are 8-connected to it.
 *          The seed pixel at (x,y) must initially be ON.
 *      (3) Reference: see pixSeedFill8BB()
 * 
*/ l_ok pixSeedfill8(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_uint32 *data, *line; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!stack) return ERROR_INT("stack not defined", __func__, 1); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return 0; /* Init stack to seed */ pushFillseg(stack, x, x, y, 1, ymax); pushFillseg(stack, x, x, y + 1, -1, ymax); while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 and for x > x2. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1) /* leak on left? */ pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); x = x1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillseg(stack, xstart, x - 1, y, dy, ymax); if (x > x2) /* leak on right? */ pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); skip: for (x++; x <= x2 + 1 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 + 1 && x <= xmax); } return 0; } /*-----------------------------------------------------------------------* * Static stack helper functions: push and pop fillsegs * *-----------------------------------------------------------------------*/ /*! * \brief pushFillsegBB() * * \param[in] stack * \param[in] xleft, xright * \param[in] y * \param[in] dy * \param[in] ymax * \param[out] pminx minimum x * \param[out] pmaxx maximum x * \param[out] pminy minimum y * \param[out] pmaxy maximum y * \return void * *
 * Notes:
 *      (1) This adds a line segment to the stack, and returns its size.
 *      (2) The auxiliary stack is used as a storage area to recycle
 *          fillsegs that are no longer in use.  We only calloc new
 *          fillsegs if the auxiliary stack is empty.
 * 
*/ static void pushFillsegBB(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy) { FILLSEG *fseg; L_STACK *auxstack; if (!stack) { L_ERROR("stack not defined\n", __func__); return; } *pminx = L_MIN(*pminx, xleft); *pmaxx = L_MAX(*pmaxx, xright); *pminy = L_MIN(*pminy, y); *pmaxy = L_MAX(*pmaxy, y); if (y + dy >= 0 && y + dy <= ymax) { if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", __func__); return; } /* Get a fillseg to use */ if (lstackGetCount(auxstack) > 0) fseg = (FILLSEG *)lstackRemove(auxstack); else fseg = (FILLSEG *)LEPT_CALLOC(1, sizeof(FILLSEG)); fseg->xleft = xleft; fseg->xright = xright; fseg->y = y; fseg->dy = dy; lstackAdd(stack, fseg); } } /*! * \brief pushFillseg() * * \param[in] stack * \param[in] xleft, xright * \param[in] y * \param[in] dy * \param[in] ymax * \return void * *
 * Notes:
 *      (1) This adds a line segment to the stack.
 *      (2) The auxiliary stack is used as a storage area to recycle
 *          fillsegs that are no longer in use.  We only calloc new
 *          fillsegs if the auxiliary stack is empty.
 * 
*/ static void pushFillseg(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax) { FILLSEG *fseg; L_STACK *auxstack; if (!stack) { L_ERROR("stack not defined\n", __func__); return; } if (y + dy >= 0 && y + dy <= ymax) { if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", __func__); return; } /* Get a fillseg to use */ if (lstackGetCount(auxstack) > 0) fseg = (FILLSEG *)lstackRemove(auxstack); else fseg = (FILLSEG *)LEPT_CALLOC(1, sizeof(FILLSEG)); fseg->xleft = xleft; fseg->xright = xright; fseg->y = y; fseg->dy = dy; lstackAdd(stack, fseg); } } /*! * \brief popFillseg() * * \param[in] stack * \param[out] pxleft left x * \param[out] pxright right x * \param[out] py y coordinate * \param[out] pdy delta y * \return void * *
 * Notes:
 *      (1) This removes a line segment from the stack, and returns its size.
 *      (2) The surplussed fillseg is placed on the auxiliary stack
 *          for future use.
 * 
*/ static void popFillseg(L_STACK *stack, l_int32 *pxleft, l_int32 *pxright, l_int32 *py, l_int32 *pdy) { FILLSEG *fseg; L_STACK *auxstack; if (!stack) { L_ERROR("stack not defined\n", __func__); return; } if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", __func__); return; } if ((fseg = (FILLSEG *)lstackRemove(stack)) == NULL) return; *pxleft = fseg->xleft; *pxright = fseg->xright; *py = fseg->y + fseg->dy; /* this now points to the new line */ *pdy = fseg->dy; /* Save it for re-use */ lstackAdd(auxstack, fseg); } leptonica-1.86.0/src/convertfiles.c000066400000000000000000000126341506303110300172200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file convertfiles.c *
 *
 *      Conversion to 1 bpp
 *          l_int32    convertFilesTo1bpp()
 *
 *  These are utility functions that will perform depth conversion
 *  on selected files, writing the results to a specified directory.
 *  We start with conversion to 1 bpp.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*------------------------------------------------------------------* * Conversion to 1 bpp * *------------------------------------------------------------------*/ /*! * \brief convertFilesTo1bpp() * * \param[in] dirin * \param[in] substr [optional] substring filter on filenames; 8 can be NULL * \param[in] upscaling 1, 2 or 4; only for input color or grayscale * \param[in] thresh global threshold for binarization; 0 for default * \param[in] firstpage * \param[in] npages use 0 to do all from %firstpage to the end * \param[in] dirout * \param[in] outformat IFF_PNG, IFF_TIFF_G4 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Images are sorted lexicographically, and the names in the
 *          output directory are retained except for the extension.
 * 
*/ l_ok convertFilesTo1bpp(const char *dirin, const char *substr, l_int32 upscaling, l_int32 thresh, l_int32 firstpage, l_int32 npages, const char *dirout, l_int32 outformat) { l_int32 i, nfiles; char buf[512]; char *fname, *tail, *basename; PIX *pixs, *pixg1, *pixg2, *pixb; SARRAY *safiles; if (!dirin) return ERROR_INT("dirin", __func__, 1); if (!dirout) return ERROR_INT("dirout", __func__, 1); if (upscaling != 1 && upscaling != 2 && upscaling != 4) return ERROR_INT("invalid upscaling factor", __func__, 1); if (thresh <= 0) thresh = 180; if (firstpage < 0) firstpage = 0; if (npages < 0) npages = 0; if (outformat != IFF_TIFF_G4) outformat = IFF_PNG; safiles = getSortedPathnamesInDirectory(dirin, substr, firstpage, npages); if (!safiles) return ERROR_INT("safiles not made", __func__, 1); if ((nfiles = sarrayGetCount(safiles)) == 0) { sarrayDestroy(&safiles); return ERROR_INT("no matching files in the directory", __func__, 1); } for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_WARNING("Couldn't read file %s\n", __func__, fname); continue; } if (pixGetDepth(pixs) == 32) pixg1 = pixConvertRGBToLuminance(pixs); else pixg1 = pixClone(pixs); pixg2 = pixRemoveColormap(pixg1, REMOVE_CMAP_TO_GRAYSCALE); if (pixGetDepth(pixg2) == 1) { pixb = pixClone(pixg2); } else { if (upscaling == 1) pixb = pixThresholdToBinary(pixg2, thresh); else if (upscaling == 2) pixb = pixScaleGray2xLIThresh(pixg2, thresh); else /* upscaling == 4 */ pixb = pixScaleGray4xLIThresh(pixg2, thresh); } pixDestroy(&pixs); pixDestroy(&pixg1); pixDestroy(&pixg2); splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); if (outformat == IFF_TIFF_G4) { snprintf(buf, sizeof(buf), "%s/%s.tif", dirout, basename); pixWrite(buf, pixb, IFF_TIFF_G4); } else { snprintf(buf, sizeof(buf), "%s/%s.png", dirout, basename); pixWrite(buf, pixb, IFF_PNG); } pixDestroy(&pixb); LEPT_FREE(tail); LEPT_FREE(basename); } sarrayDestroy(&safiles); return 0; } leptonica-1.86.0/src/convolve.c000066400000000000000000002653661506303110300163640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file convolve.c *
 *
 *      Top level grayscale or color block convolution
 *          PIX          *pixBlockconv()
 *
 *      Grayscale block convolution
 *          PIX          *pixBlockconvGray()
 *          static void   blockconvLow()
 *
 *      Accumulator for 1, 8 and 32 bpp convolution
 *          PIX          *pixBlockconvAccum()
 *          static void   blockconvAccumLow()
 *
 *      Un-normalized grayscale block convolution
 *          PIX          *pixBlockconvGrayUnnormalized()
 *
 *      Tiled grayscale or color block convolution
 *          PIX          *pixBlockconvTiled()
 *          PIX          *pixBlockconvGrayTile()
 *
 *      Convolution for mean, mean square, variance and rms deviation
 *      in specified window
 *          l_int32       pixWindowedStats()
 *          PIX          *pixWindowedMean()
 *          PIX          *pixWindowedMeanSquare()
 *          l_int32       pixWindowedVariance()
 *          DPIX         *pixMeanSquareAccum()
 *
 *      Binary block sum and rank filter
 *          PIX          *pixBlockrank()
 *          PIX          *pixBlocksum()
 *          static void   blocksumLow()
 *
 *      Census transform
 *          PIX          *pixCensusTransform()
 *
 *      Generic convolution (with Pix)
 *          PIX          *pixConvolve()
 *          PIX          *pixConvolveSep()
 *          PIX          *pixConvolveRGB()
 *          PIX          *pixConvolveRGBSep()
 *
 *      Generic convolution (with float arrays)
 *          FPIX         *fpixConvolve()
 *          FPIX         *fpixConvolveSep()
 *
 *      Convolution with bias (for non-negative output)
 *          PIX          *pixConvolveWithBias()
 *
 *      Set parameter for convolution subsampling
 *          void          l_setConvolveSampling()
 *
 *      Additive gaussian noise
 *          PIX          *pixAddGaussNoise()
 *          l_float32     gaussDistribSampling()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* These globals determine the subsampling factors for * generic convolution of pix and fpix. Declare extern to use. * To change the values, use l_setConvolveSampling(). */ LEPT_DLL l_int32 ConvolveSamplingFactX = 1; LEPT_DLL l_int32 ConvolveSamplingFactY = 1; /* Low-level static functions */ static void blockconvLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc); static void blockconvAccumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls); static void blocksumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc); /*----------------------------------------------------------------------* * Top-level grayscale or color block convolution * *----------------------------------------------------------------------*/ /*! * \brief pixBlockconv() * * \param[in] pix 8 or 32 bpp; or 2, 4 or 8 bpp with colormap * \param[in] wc, hc half width/height of convolution kernel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1)
 *      (2) Returns a copy if either wc or hc are 0
 *      (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 * 
*/ PIX * pixBlockconv(PIX *pix, l_int32 wc, l_int32 hc) { l_int32 w, h, d; PIX *pixs, *pixd, *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); if (wc <= 0 || hc <= 0) return pixCopy(NULL, pix); pixGetDimensions(pix, &w, &h, &d); if (w < 2 * wc + 1 || h < 2 * hc + 1) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) /* no-op */ return pixCopy(NULL, pix); /* Remove colormap if necessary */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", __func__); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else { pixs = pixClone(pix); } if (d != 8 && d != 32) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, NULL); } if (d == 8) { pixd = pixBlockconvGray(pixs, NULL, wc, hc); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrc = pixBlockconvGray(pixr, NULL, wc, hc); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgc = pixBlockconvGray(pixg, NULL, wc, hc); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbc = pixBlockconvGray(pixb, NULL, wc, hc); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrc, pixgc, pixbc); pixDestroy(&pixrc); pixDestroy(&pixgc); pixDestroy(&pixbc); } pixDestroy(&pixs); return pixd; } /*----------------------------------------------------------------------* * Grayscale block convolution * *----------------------------------------------------------------------*/ /*! * \brief pixBlockconvGray() * * \param[in] pixs 8 bpp * \param[in] pixacc pix 32 bpp; can be null * \param[in] wc, hc half width/height of convolution kernel * \return pix 8 bpp, or NULL on error * *
 * Notes:
 *      (1) If accum pix is null, make one and destroy it before
 *          returning; otherwise, just use the input accum pix.
 *      (2) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1).
 *      (3) Returns a copy if either wc or hc are 0
 *      (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 * 
*/ PIX * pixBlockconvGray(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wpl, wpla; l_uint32 *datad, *dataa; PIX *pixd, *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (wc <= 0 || hc <= 0) /* no-op */ return pixCopy(NULL, pixs); if (w < 2 * wc + 1 || h < 2 * hc + 1) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pixs); if (pixacc) { if (pixGetDepth(pixacc) == 32) { pixt = pixClone(pixacc); } else { L_WARNING("pixacc not 32 bpp; making new one\n", __func__); if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } if ((pixd = pixCreateTemplate(pixs)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixSetPadBits(pixt, 0); wpl = pixGetWpl(pixd); wpla = pixGetWpl(pixt); datad = pixGetData(pixd); dataa = pixGetData(pixt); blockconvLow(datad, w, h, wpl, dataa, wpla, wc, hc); pixDestroy(&pixt); return pixd; } /*! * \brief blockconvLow() * * \param[in] data data of input image, to be convolved * \param[in] w, h, wpl * \param[in] dataa data of 32 bpp accumulator * \param[in] wpla accumulator * \param[in] wc convolution "half-width" * \param[in] hc convolution "half-height" * \return void * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1).
 *      (2) The lack of symmetry between the handling of the
 *          first (hc + 1) lines and the last (hc) lines,
 *          and similarly with the columns, is due to fact that
 *          for the pixel at (x,y), the accumulator values are
 *          taken at (x + wc, y + hc), (x - wc - 1, y + hc),
 *          (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1).
 *      (3) We compute sums, normalized as if there were no reduced
 *          area at the boundary.  This under-estimates the value
 *          of the boundary pixels, so we multiply them by another
 *          normalization factor that is greater than 1.
 *      (4) This second normalization is done first for the first
 *          hc + 1 lines; then for the last hc lines; and finally
 *          for the first wc + 1 and last wc columns in the intermediate
 *          lines.
 *      (5) The caller should verify that wc < w and hc < h.
 *          Failing either condition, illegal reads and writes can occur.
 *      (6) Implementation note: to get the same results in the interior
 *          between this function and pixConvolve(), it is necessary to
 *          add 0.5 for roundoff in the main loop that runs over all pixels.
 *          However, if we do that and have white (255) pixels near the
 *          image boundary, some overflow occurs for pixels very close
 *          to the boundary.  We can't fix this by subtracting from the
 *          normalized values for the boundary pixels, because this results
 *          in underflow if the boundary pixels are black (0).  Empirically,
 *          adding 0.25 (instead of 0.5) before truncating in the main
 *          loop will not cause overflow, but this gives some
 *          off-by-1-level errors in interior pixel values.  So we add
 *          0.5 for roundoff in the main loop, and for pixels within a
 *          half filter width of the boundary, use a L_MIN of the
 *          computed value and 255 to avoid overflow during normalization.
 * 
*/ static void blockconvLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc) { l_int32 i, j, imax, imin, jmax, jmin; l_int32 wn, hn, fwc, fhc, wmwc, hmhc; l_float32 norm, normh, normw; l_uint32 val; l_uint32 *linemina, *linemaxa, *line; wmwc = w - wc; hmhc = h - hc; if (wmwc <= 0 || hmhc <= 0) { L_ERROR("wc >= w || hc >= h\n", __func__); return; } fwc = 2 * wc + 1; fhc = 2 * hc + 1; norm = 1.0 / ((l_float32)(fwc) * fhc); /*------------------------------------------------------------* * Compute, using b.c. only to set limits on the accum image * *------------------------------------------------------------*/ for (i = 0; i < h; i++) { imin = L_MAX(i - 1 - hc, 0); imax = L_MIN(i + hc, h - 1); line = data + wpl * i; linemina = dataa + wpla * imin; linemaxa = dataa + wpla * imax; for (j = 0; j < w; j++) { jmin = L_MAX(j - 1 - wc, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxa[jmax] - linemaxa[jmin] + linemina[jmin] - linemina[jmax]; val = (l_uint8)(norm * val + 0.5); /* see comment above */ SET_DATA_BYTE(line, j, val); } } /*------------------------------------------------------------* * Fix normalization for boundary pixels * *------------------------------------------------------------*/ for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ hn = L_MAX(1, hc + i); normh = (l_float32)fhc / (l_float32)hn; /* >= 1 */ line = data + wpl * i; for (j = 0; j <= wc; j++) { wn = L_MAX(1, wc + j); normw = (l_float32)fwc / (l_float32)wn; /* >= 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } } for (i = hmhc; i < h; i++) { /* last hc lines */ hn = hc + h - i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ line = data + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } } for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ line = data + wpl * i; for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { /* last wc columns */ wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normw, 255); SET_DATA_BYTE(line, j, val); } } } /*----------------------------------------------------------------------* * Accumulator for 1, 8 and 32 bpp convolution * *----------------------------------------------------------------------*/ /*! * \brief pixBlockconvAccum() * * \param[in] pixs 1, 8 or 32 bpp * \return accum pix 32 bpp, or NULL on error. * *
 * Notes:
 *      (1) The general recursion relation is
 *            a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
 *          For the first line, this reduces to the special case
 *            a(i,j) = v(i,j) + a(i, j-1)
 *          For the first column, the special case is
 *            a(i,j) = v(i,j) + a(i-1, j)
 * 
*/ PIX * pixBlockconvAccum(PIX *pixs) { l_int32 w, h, d, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", __func__, NULL); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); blockconvAccumLow(datad, w, h, wpld, datas, d, wpls); return pixd; } /* * \brief blockconvAccumLow() * * \param[in] datad 32 bpp dest * \param[in] w, h, wpld of 32 bpp dest * \param[in] datas 1, 8 or 32 bpp src * \param[in] d bpp of src * \param[in] wpls of src * \return void * *
 * Notes:
 *      (1) The general recursion relation is
 *             a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
 *          For the first line, this reduces to the special case
 *             a(0,j) = v(0,j) + a(0, j-1), j > 0
 *          For the first column, the special case is
 *             a(i,0) = v(i,0) + a(i-1, 0), i > 0
 * 
*/ static void blockconvAccumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls) { l_uint8 val; l_int32 i, j; l_uint32 val32; l_uint32 *lines, *lined, *linedp; lines = datas; lined = datad; if (d == 1) { /* Do the first line */ for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (j == 0) lined[0] = val; else lined[j] = lined[j - 1] + val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (j == 0) lined[0] = val + linedp[0]; else lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else if (d == 8) { /* Do the first line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) lined[0] = val; else lined[j] = lined[j - 1] + val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) lined[0] = val + linedp[0]; else lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else if (d == 32) { /* Do the first line */ for (j = 0; j < w; j++) { val32 = lines[j]; if (j == 0) lined[0] = val32; else lined[j] = lined[j - 1] + val32; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val32 = lines[j]; if (j == 0) lined[0] = val32 + linedp[0]; else lined[j] = val32 + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else { L_ERROR("depth not 1, 8 or 32 bpp\n", __func__); } } /*----------------------------------------------------------------------* * Un-normalized grayscale block convolution * *----------------------------------------------------------------------*/ /*! * \brief pixBlockconvGrayUnnormalized() * * \param[in] pixs 8 bpp * \param[in] wc, hc half width/height of convolution kernel * \return pix 32 bpp; containing the convolution without normalizing * for the window size, or NULL on error * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1).
 *      (2) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 *      (3) Returns a copy if either wc or hc are 0.
 *      (3) Adds mirrored border to avoid treating the boundary pixels
 *          specially.  Note that we add wc + 1 pixels to the left
 *          and wc to the right.  The added width is 2 * wc + 1 pixels,
 *          and the particular choice simplifies the indexing in the loop.
 *          Likewise, add hc + 1 pixels to the top and hc to the bottom.
 *      (4) To get the normalized result, divide by the area of the
 *          convolution kernel: (2 * wc + 1) * (2 * hc + 1)
 *          Specifically, do this:
 *               pixc = pixBlockconvGrayUnnormalized(pixs, wc, hc);
 *               fract = 1. / ((2 * wc + 1) * (2 * hc + 1));
 *               pixMultConstantGray(pixc, fract);
 *               pixd = pixGetRGBComponent(pixc, L_ALPHA_CHANNEL);
 *      (5) Unlike pixBlockconvGray(), this always computes the accumulation
 *          pix because its size is tied to wc and hc.
 *      (6) Compare this implementation with pixBlockconvGray(), where
 *          most of the code in blockconvLow() is special casing for
 *          efficiently handling the boundary.  Here, the use of
 *          mirrored borders and destination indexing makes the
 *          implementation very simple.
 * 
*/ PIX * pixBlockconvGrayUnnormalized(PIX *pixs, l_int32 wc, l_int32 hc) { l_int32 i, j, w, h, d, wpla, wpld, jmax; l_uint32 *linemina, *linemaxa, *lined, *dataa, *datad; PIX *pixsb, *pixacc, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (wc <= 0 || hc <= 0) /* no-op */ return pixCopy(NULL, pixs); if (w < 2 * wc + 1 || h < 2 * hc + 1) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pixs); if ((pixsb = pixAddMirroredBorder(pixs, wc + 1, wc, hc + 1, hc)) == NULL) return (PIX *)ERROR_PTR("pixsb not made", __func__, NULL); pixacc = pixBlockconvAccum(pixsb); pixDestroy(&pixsb); if (!pixacc) return (PIX *)ERROR_PTR("pixacc not made", __func__, NULL); if ((pixd = pixCreate(w, h, 32)) == NULL) { pixDestroy(&pixacc); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } wpla = pixGetWpl(pixacc); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); dataa = pixGetData(pixacc); for (i = 0; i < h; i++) { lined = datad + i * wpld; linemina = dataa + i * wpla; linemaxa = dataa + (i + 2 * hc + 1) * wpla; for (j = 0; j < w; j++) { jmax = j + 2 * wc + 1; lined[j] = linemaxa[jmax] - linemaxa[j] - linemina[jmax] + linemina[j]; } } pixDestroy(&pixacc); return pixd; } /*----------------------------------------------------------------------* * Tiled grayscale or color block convolution * *----------------------------------------------------------------------*/ /*! * \brief pixBlockconvTiled() * * \param[in] pix 8 or 32 bpp; or 2, 4 or 8 bpp with colormap * \param[in] wc, hc half width/height of convolution kernel * \param[in] nx, ny subdivision into tiles * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1)
 *      (2) Returns a copy if either wc or hc are 0.
 *      (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 *      (4) For nx == ny == 1, this defaults to pixBlockconv(), which
 *          is typically about twice as fast, and gives nearly
 *          identical results as pixBlockconvGrayTile().
 *      (5) If the tiles are too small, nx and/or ny are reduced
 *          a minimum amount so that the tiles are expanded to the
 *          smallest workable size in the problematic direction(s).
 *      (6) Why a tiled version?  Three reasons:
 *          (a) Because the accumulator is a uint32, overflow can occur
 *              for an image with more than 16M pixels.
 *          (b) The accumulator array for 16M pixels is 64 MB; using
 *              tiles reduces the size of this array.
 *          (c) Each tile can be processed independently, in parallel,
 *              on a multicore processor.
 * 
*/ PIX * pixBlockconvTiled(PIX *pix, l_int32 wc, l_int32 hc, l_int32 nx, l_int32 ny) { l_int32 i, j, w, h, d, xrat, yrat; PIX *pixs, *pixd, *pixc, *pixt; PIX *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; PIXTILING *pt; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); if (wc <= 0 || hc <= 0) /* no-op */ return pixCopy(NULL, pix); if (nx <= 1 && ny <= 1) return pixBlockconv(pix, wc, hc); pixGetDimensions(pix, &w, &h, &d); if (w < 2 * wc + 3 || h < 2 * hc + 3) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pix); /* Test to see if the tiles are too small. The required * condition is that the tile dimensions must be at least * (wc + 2) x (hc + 2). */ xrat = w / nx; yrat = h / ny; if (xrat < wc + 2) { nx = w / (wc + 2); L_WARNING("tile width too small; nx reduced to %d\n", __func__, nx); } if (yrat < hc + 2) { ny = h / (hc + 2); L_WARNING("tile height too small; ny reduced to %d\n", __func__, ny); } /* Remove colormap if necessary */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", __func__); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else { pixs = pixClone(pix); } if (d != 8 && d != 32) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, NULL); } /* Note that the overlaps in the width and height that * are added to the tile are (wc + 2) and (hc + 2). * These overlaps are removed by pixTilingPaintTile(). * They are larger than the extent of the filter because * although the filter is symmetric with respect to its origin, * the implementation is asymmetric -- see the implementation in * pixBlockconvGrayTile(). */ if ((pixd = pixCreateTemplate(pixs)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pt = pixTilingCreate(pixs, nx, ny, 0, 0, wc + 2, hc + 2); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); /* Convolve over the tile */ if (d == 8) { pixc = pixBlockconvGrayTile(pixt, NULL, wc, hc); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixt, COLOR_RED); pixrc = pixBlockconvGrayTile(pixr, NULL, wc, hc); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixt, COLOR_GREEN); pixgc = pixBlockconvGrayTile(pixg, NULL, wc, hc); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixt, COLOR_BLUE); pixbc = pixBlockconvGrayTile(pixb, NULL, wc, hc); pixDestroy(&pixb); pixc = pixCreateRGBImage(pixrc, pixgc, pixbc); pixDestroy(&pixrc); pixDestroy(&pixgc); pixDestroy(&pixbc); } pixTilingPaintTile(pixd, i, j, pixc, pt); pixDestroy(&pixt); pixDestroy(&pixc); } } pixDestroy(&pixs); pixTilingDestroy(&pt); return pixd; } /*! * \brief pixBlockconvGrayTile() * * \param[in] pixs 8 bpp gray * \param[in] pixacc 32 bpp accum pix * \param[in] wc, hc half width/height of convolution kernel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1)
 *      (2) Assumes that the input pixs is padded with (wc + 1) pixels on
 *          left and right, and with (hc + 1) pixels on top and bottom.
 *          The returned pix has these stripped off; they are only used
 *          for computation.
 *      (3) Returns a copy if either wc or hc are 0.
 *      (4) Require that w > 2 * wc + 3 and h > 2 * hc + 3,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 * 
*/ PIX * pixBlockconvGrayTile(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wd, hd, i, j, imin, imax, jmin, jmax, wplt, wpld; l_float32 norm; l_uint32 val; l_uint32 *datat, *datad, *lined, *linemint, *linemaxt; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (wc <= 0 || hc <= 0) /* no-op */ return pixCopy(NULL, pixs); if (w < 2 * wc + 3 || h < 2 * hc + 3) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pixs); wd = w - 2 * wc; hd = h - 2 * hc; if (pixacc) { if (pixGetDepth(pixacc) == 32) { pixt = pixClone(pixacc); } else { L_WARNING("pixacc not 32 bpp; making new one\n", __func__); if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } if ((pixd = pixCreateTemplate(pixs)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); norm = 1. / (l_float32)((2 * wc + 1) * (2 * hc + 1)); /* Do the convolution over the subregion of size (wd - 2, hd - 2), * which exactly corresponds to the size of the subregion that * will be extracted by pixTilingPaintTile(). Note that the * region in which points are computed is not symmetric about * the center of the images; instead the computation in * the accumulator image is shifted up and to the left by 1, * relative to the center, because the 4 accumulator sampling * points are taken at the LL corner of the filter and at 3 other * points that are shifted -wc and -hc to the left and above. */ for (i = hc; i < hc + hd - 2; i++) { imin = L_MAX(i - hc - 1, 0); imax = L_MIN(i + hc, h - 1); lined = datad + i * wpld; linemint = datat + imin * wplt; linemaxt = datat + imax * wplt; for (j = wc; j < wc + wd - 2; j++) { jmin = L_MAX(j - wc - 1, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxt[jmax] - linemaxt[jmin] + linemint[jmin] - linemint[jmax]; val = (l_uint8)(norm * val + 0.5); SET_DATA_BYTE(lined, j, val); } } pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Convolution for mean, mean square, variance and rms deviation * *----------------------------------------------------------------------*/ /*! * \brief pixWindowedStats() * * \param[in] pixs 8 bpp grayscale * \param[in] wc, hc half width/height of convolution kernel * \param[in] hasborder use 1 if it already has (wc + 1 border pixels * on left and right, and hc + 1 on top and bottom; * use 0 to add kernel-dependent border) * \param[out] ppixm [optional] 8 bpp mean value in window * \param[out] ppixms [optional] 32 bpp mean square value in window * \param[out] pfpixv [optional] float variance in window * \param[out] pfpixrv [optional] float rms deviation from the mean * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a high-level convenience function for calculating
 *          any or all of these derived images.
 *      (2) If %hasborder = 0, a border is added and the result is
 *          computed over all pixels in pixs.  Otherwise, no border is
 *          added and the border pixels are removed from the output images.
 *      (3) These statistical measures over the pixels in the
 *          rectangular window are:
 *            ~ average value: 

(pixm) * ~ average squared value: (pixms) * ~ variance: <(p -

)*(p -

)> = -

*

(pixv) * ~ square-root of variance: (pixrv) * where the brackets < .. > indicate that the average value is * to be taken over the window. * (4) Note that the variance is just the mean square difference from * the mean value; and the square root of the variance is the * root mean square difference from the mean, sometimes also * called the 'standard deviation'. * (5) The added border, along with the use of an accumulator array, * allows computation without special treatment of pixels near * the image boundary, and runs in a time that is independent * of the size of the convolution kernel. *

*/ l_ok pixWindowedStats(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, PIX **ppixm, PIX **ppixms, FPIX **pfpixv, FPIX **pfpixrv) { PIX *pixb, *pixm, *pixms; if (!ppixm && !ppixms && !pfpixv && !pfpixrv) return ERROR_INT("no output requested", __func__, 1); if (ppixm) *ppixm = NULL; if (ppixms) *ppixms = NULL; if (pfpixv) *pfpixv = NULL; if (pfpixrv) *pfpixrv = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (wc < 2 || hc < 2) return ERROR_INT("wc and hc not >= 2", __func__, 1); /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); if (!pfpixv && !pfpixrv) { if (ppixm) *ppixm = pixWindowedMean(pixb, wc, hc, 1, 1); if (ppixms) *ppixms = pixWindowedMeanSquare(pixb, wc, hc, 1); pixDestroy(&pixb); return 0; } pixm = pixWindowedMean(pixb, wc, hc, 1, 1); pixms = pixWindowedMeanSquare(pixb, wc, hc, 1); pixWindowedVariance(pixm, pixms, pfpixv, pfpixrv); if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); if (ppixms) *ppixms = pixms; else pixDestroy(&pixms); pixDestroy(&pixb); return 0; } /*! * \brief pixWindowedMean() * * \param[in] pixs 8 or 32 bpp grayscale * \param[in] wc, hc half width/height of convolution kernel * \param[in] hasborder use 1 if it already has (wc + 1 border pixels * on left and right, and hc + 1 on top and bottom; * use 0 to add kernel-dependent border) * \param[in] normflag 1 for normalization to get average in window; * 0 for the sum in the window (un-normalized) * \return pixd 8 or 32 bpp, average over kernel window * *
 * Notes:
 *      (1) The input and output depths are the same.
 *      (2) A set of border pixels of width (wc + 1) on left and right,
 *          and of height (hc + 1) on top and bottom, must be on the
 *          pix before the accumulator is found.  The output pixd
 *          (after convolution) has this border removed.
 *          If %hasborder = 0, the required border is added.
 *      (3) Typically, %normflag == 1.  However, if you want the sum
 *          within the window, rather than a normalized convolution,
 *          use %normflag == 0.
 *      (4) This builds a block accumulator pix, uses it here, and
 *          destroys it.
 *      (5) The added border, along with the use of an accumulator array,
 *          allows computation without special treatment of pixels near
 *          the image boundary, and runs in a time that is independent
 *          of the size of the convolution kernel.
 * 
*/ PIX * pixWindowedMean(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, l_int32 normflag) { l_int32 i, j, w, h, d, wd, hd, wplc, wpld, wincr, hincr; l_uint32 val; l_uint32 *datac, *datad, *linec1, *linec2, *lined; l_float32 norm; PIX *pixb, *pixc, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (wc < 2 || hc < 2) return (PIX *)ERROR_PTR("wc and hc not >= 2", __func__, NULL); pixb = pixc = pixd = NULL; /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); /* Make the accumulator pix from pixb */ if ((pixc = pixBlockconvAccum(pixb)) == NULL) { L_ERROR("pixc not made\n", __func__); goto cleanup; } wplc = pixGetWpl(pixc); datac = pixGetData(pixc); /* The output has wc + 1 border pixels stripped from each side * of pixb, and hc + 1 border pixels stripped from top and bottom. */ pixGetDimensions(pixb, &w, &h, NULL); wd = w - 2 * (wc + 1); hd = h - 2 * (hc + 1); if (wd < 2 || hd < 2) { L_ERROR("w or h is too small for the kernel\n", __func__); goto cleanup; } if ((pixd = pixCreate(wd, hd, d)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup; } wpld = pixGetWpl(pixd); datad = pixGetData(pixd); wincr = 2 * wc + 1; hincr = 2 * hc + 1; norm = 1.0; /* use this for sum-in-window */ if (normflag) norm = 1.0 / ((l_float32)(wincr) * hincr); for (i = 0; i < hd; i++) { linec1 = datac + i * wplc; linec2 = datac + (i + hincr) * wplc; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val = linec2[j + wincr] - linec2[j] - linec1[j + wincr] + linec1[j]; if (d == 8) { val = (l_uint8)(norm * val); SET_DATA_BYTE(lined, j, val); } else { /* d == 32 */ val = (l_uint32)(norm * val); lined[j] = val; } } } cleanup: pixDestroy(&pixb); pixDestroy(&pixc); return pixd; } /*! * \brief pixWindowedMeanSquare() * * \param[in] pixs 8 bpp grayscale * \param[in] wc, hc half width/height of convolution kernel * \param[in] hasborder use 1 if it already has (wc + 1 border pixels * on left and right, and hc + 1 on top and bottom; * use 0 to add kernel-dependent border) * \return pixd 32 bpp, average over rectangular window of * width = 2 * wc + 1 and height = 2 * hc + 1 * *
 * Notes:
 *      (1) A set of border pixels of width (wc + 1) on left and right,
 *          and of height (hc + 1) on top and bottom, must be on the
 *          pix before the accumulator is found.  The output pixd
 *          (after convolution) has this border removed.
 *          If %hasborder = 0, the required border is added.
 *      (2) The advantage is that we are unaffected by the boundary, and
 *          it is not necessary to treat pixels within %wc and %hc of the
 *          border differently.  This is because processing for pixd
 *          only takes place for pixels in pixs for which the
 *          kernel is entirely contained in pixs.
 *      (3) Why do we have an added border of width (%wc + 1) and
 *          height (%hc + 1), when we only need %wc and %hc pixels
 *          to satisfy this condition?  Answer: the accumulators
 *          are asymmetric, requiring an extra row and column of
 *          pixels at top and left to work accurately.
 *      (4) The added border, along with the use of an accumulator array,
 *          allows computation without special treatment of pixels near
 *          the image boundary, and runs in a time that is independent
 *          of the size of the convolution kernel.
 * 
*/ PIX * pixWindowedMeanSquare(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder) { l_int32 i, j, w, h, wd, hd, wpl, wpld, wincr, hincr; l_uint32 ival; l_uint32 *datad, *lined; l_float64 norm; l_float64 val; l_float64 *data, *line1, *line2; DPIX *dpix; PIX *pixb, *pixd; if (!pixs || (pixGetDepth(pixs) != 8)) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (wc < 2 || hc < 2) return (PIX *)ERROR_PTR("wc and hc not >= 2", __func__, NULL); pixd = NULL; /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); if ((dpix = pixMeanSquareAccum(pixb)) == NULL) { L_ERROR("dpix not made\n", __func__); goto cleanup; } wpl = dpixGetWpl(dpix); data = dpixGetData(dpix); /* The output has wc + 1 border pixels stripped from each side * of pixb, and hc + 1 border pixels stripped from top and bottom. */ pixGetDimensions(pixb, &w, &h, NULL); wd = w - 2 * (wc + 1); hd = h - 2 * (hc + 1); if (wd < 2 || hd < 2) { L_ERROR("w or h too small for kernel\n", __func__); goto cleanup; } if ((pixd = pixCreate(wd, hd, 32)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup; } wpld = pixGetWpl(pixd); datad = pixGetData(pixd); wincr = 2 * wc + 1; hincr = 2 * hc + 1; norm = 1.0 / ((l_float32)(wincr) * hincr); for (i = 0; i < hd; i++) { line1 = data + i * wpl; line2 = data + (i + hincr) * wpl; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val = line2[j + wincr] - line2[j] - line1[j + wincr] + line1[j]; ival = (l_uint32)(norm * val + 0.5); /* to round up */ lined[j] = ival; } } cleanup: dpixDestroy(&dpix); pixDestroy(&pixb); return pixd; } /*! * \brief pixWindowedVariance() * * \param[in] pixm mean over window; 8 or 32 bpp grayscale * \param[in] pixms mean square over window; 32 bpp * \param[out] pfpixv [optional] float variance -- the ms deviation * from the mean * \param[out] pfpixrv [optional] float rms deviation from the mean * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The mean and mean square values are precomputed, using
 *          pixWindowedMean() and pixWindowedMeanSquare().
 *      (2) Either or both of the variance and square-root of variance
 *          are returned as an fpix, where the variance is the
 *          average over the window of the mean square difference of
 *          the pixel value from the mean:
 *                <(p - 

)*(p -

)> = -

*

* (3) To visualize the results: * ~ for both, use fpixDisplayMaxDynamicRange(). * ~ for rms deviation, simply convert the output fpix to pix, *

*/ l_ok pixWindowedVariance(PIX *pixm, PIX *pixms, FPIX **pfpixv, FPIX **pfpixrv) { l_int32 i, j, w, h, ws, hs, ds, wplm, wplms, wplv, wplrv, valm, valms; l_float32 var; l_uint32 *linem, *linems, *datam, *datams; l_float32 *linev = NULL, *linerv = NULL, *datav = NULL, *datarv = NULL; FPIX *fpixv, *fpixrv; /* variance and square root of variance */ if (!pfpixv && !pfpixrv) return ERROR_INT("no output requested", __func__, 1); if (pfpixv) *pfpixv = NULL; if (pfpixrv) *pfpixrv = NULL; if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm undefined or not 8 bpp", __func__, 1); if (!pixms || pixGetDepth(pixms) != 32) return ERROR_INT("pixms undefined or not 32 bpp", __func__, 1); pixGetDimensions(pixm, &w, &h, NULL); pixGetDimensions(pixms, &ws, &hs, &ds); if (w != ws || h != hs) return ERROR_INT("pixm and pixms sizes differ", __func__, 1); if (pfpixv) { fpixv = fpixCreate(w, h); *pfpixv = fpixv; wplv = fpixGetWpl(fpixv); datav = fpixGetData(fpixv); } if (pfpixrv) { fpixrv = fpixCreate(w, h); *pfpixrv = fpixrv; wplrv = fpixGetWpl(fpixrv); datarv = fpixGetData(fpixrv); } wplm = pixGetWpl(pixm); wplms = pixGetWpl(pixms); datam = pixGetData(pixm); datams = pixGetData(pixms); for (i = 0; i < h; i++) { linem = datam + i * wplm; linems = datams + i * wplms; if (pfpixv) linev = datav + i * wplv; if (pfpixrv) linerv = datarv + i * wplrv; for (j = 0; j < w; j++) { valm = GET_DATA_BYTE(linem, j); if (ds == 8) valms = GET_DATA_BYTE(linems, j); else /* ds == 32 */ valms = (l_int32)linems[j]; var = (l_float32)valms - (l_float32)valm * valm; if (pfpixv) linev[j] = var; if (pfpixrv) linerv[j] = (l_float32)sqrt(var); } } return 0; } /*! * \brief pixMeanSquareAccum() * * \param[in] pixs 8 bpp grayscale * \return dpix 64 bit array, or NULL on error * *
 * Notes:
 *      (1) Similar to pixBlockconvAccum(), this computes the
 *          sum of the squares of the pixel values in such a way
 *          that the value at (i,j) is the sum of all squares in
 *          the rectangle from the origin to (i,j).
 *      (2) The general recursion relation (v are squared pixel values) is
 *            a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
 *          For the first line, this reduces to the special case
 *            a(i,j) = v(i,j) + a(i, j-1)
 *          For the first column, the special case is
 *            a(i,j) = v(i,j) + a(i-1, j)
 * 
*/ DPIX * pixMeanSquareAccum(PIX *pixs) { l_int32 i, j, w, h, wpl, wpls, val; l_uint32 *datas, *lines; l_float64 *data, *line, *linep; DPIX *dpix; if (!pixs || (pixGetDepth(pixs) != 8)) return (DPIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); lines = datas; line = data; for (j = 0; j < w; j++) { /* first line */ val = GET_DATA_BYTE(lines, j); if (j == 0) line[0] = (l_float64)(val) * val; else line[j] = line[j - 1] + (l_float64)(val) * val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; line = data + i * wpl; /* current dest line */ linep = line - wpl;; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) line[0] = linep[0] + (l_float64)(val) * val; else line[j] = line[j - 1] + linep[j] - linep[j - 1] + (l_float64)(val) * val; } } return dpix; } /*----------------------------------------------------------------------* * Binary block sum/rank * *----------------------------------------------------------------------*/ /*! * \brief pixBlockrank() * * \param[in] pixs 1 bpp * \param[in] pixacc pix [optional] 32 bpp * \param[in] wc, hc half width/height of block sum/rank kernel * \param[in] rank between 0.0 and 1.0; 0.5 is median filter * \return pixd 1 bpp * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1)
 *      (2) This returns a pixd where each pixel is a 1 if the
 *          neighborhood (2 * wc + 1) x (2 * hc + 1)) pixels
 *          contains the rank fraction of 1 pixels.  Otherwise,
 *          the returned pixel is 0.  Note that the special case
 *          of rank = 0.0 is always satisfied, so the returned
 *          pixd has all pixels with value 1.
 *      (3) If accum pix is null, make one, use it, and destroy it
 *          before returning; otherwise, just use the input accum pix
 *      (4) If both wc and hc are 0, returns a copy unless rank == 0.0,
 *          in which case this returns an all-ones image.
 *      (5) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 * 
*/ PIX * pixBlockrank(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc, l_float32 rank) { l_int32 w, h, d, thresh; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", __func__, NULL); if (rank == 0.0) { pixd = pixCreateTemplate(pixs); pixSetAll(pixd); return pixd; } if (wc <= 0 || hc <= 0) return pixCopy(NULL, pixs); if (w < 2 * wc + 1 || h < 2 * hc + 1) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pixs); if ((pixt = pixBlocksum(pixs, pixacc, wc, hc)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); /* 1 bpp block rank filter output. * Must invert because threshold gives 1 for values < thresh, * but we need a 1 if the value is >= thresh. */ thresh = (l_int32)(255. * rank); pixd = pixThresholdToBinary(pixt, thresh); pixInvert(pixd, pixd); pixDestroy(&pixt); return pixd; } /*! * \brief pixBlocksum() * * \param[in] pixs 1 bpp * \param[in] pixacc pix [optional] 32 bpp * \param[in] wc, hc half width/height of block sum/rank kernel * \return pixd 8 bpp * *
 * Notes:
 *      (1) If accum pix is null, make one and destroy it before
 *          returning; otherwise, just use the input accum pix
 *      (2) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1)
 *      (3) Use of wc = hc = 1, followed by pixInvert() on the
 *          8 bpp result, gives a nice anti-aliased, and somewhat
 *          darkened, result on text.
 *      (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
 *          where (w,h) are the dimensions of pixs.  Attempt to
 *          reduce the kernel size if necessary.
 *      (5) Returns in each dest pixel the sum of all src pixels
 *          that are within a block of size of the kernel, centered
 *          on the dest pixel.  This sum is the number of src ON
 *          pixels in the block at each location, normalized to 255
 *          for a block containing all ON pixels.  For pixels near
 *          the boundary, where the block is not entirely contained
 *          within the image, we then multiply by a second normalization
 *          factor that is greater than one, so that all results
 *          are normalized by the number of participating pixels
 *          within the block.
 * 
*/ PIX * pixBlocksum(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (wc <= 0 || hc <= 0) return pixCopy(NULL, pixs); if (w < 2 * wc + 1 || h < 2 * hc + 1) { L_WARNING("kernel too large: wc = %d, hc = %d, w = %d, h = %d; " "reducing!\n", __func__, wc, hc, w, h); wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); } if (wc == 0 || hc == 0) return pixCopy(NULL, pixs); if (pixacc) { if (pixGetDepth(pixacc) != 32) return (PIX *)ERROR_PTR("pixacc not 32 bpp", __func__, NULL); pixt = pixClone(pixacc); } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } /* 8 bpp block sum output */ if ((pixd = pixCreate(w, h, 8)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); wpld = pixGetWpl(pixd); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); datat = pixGetData(pixt); blocksumLow(datad, w, h, wpld, datat, wplt, wc, hc); pixDestroy(&pixt); return pixd; } /*! * \brief blocksumLow() * * \param[in] datad of 8 bpp dest * \param[in] w, h, wpl of 8 bpp dest * \param[in] dataa of 32 bpp accum * \param[in] wpla of 32 bpp accum * \param[in] wc, hc convolution "half-width" and "half-height" * \return void * *
 * Notes:
 *      (1) The full width and height of the convolution kernel
 *          are (2 * wc + 1) and (2 * hc + 1).
 *      (2) The lack of symmetry between the handling of the
 *          first (hc + 1) lines and the last (hc) lines,
 *          and similarly with the columns, is due to fact that
 *          for the pixel at (x,y), the accumulator values are
 *          taken at (x + wc, y + hc), (x - wc - 1, y + hc),
 *          (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1).
 *      (3) Compute sums of ON pixels within the block filter size,
 *          normalized between 0 and 255, as if there were no reduced
 *          area at the boundary.  This under-estimates the value
 *          of the boundary pixels, so we multiply them by another
 *          normalization factor that is greater than 1.
 *      (4) This second normalization is done first for the first
 *          hc + 1 lines; then for the last hc lines; and finally
 *          for the first wc + 1 and last wc columns in the intermediate
 *          lines.
 *      (5) Required constraints are: wc < w and hc < h.
 * 
*/ static void blocksumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc) { l_int32 i, j, imax, imin, jmax, jmin; l_int32 wn, hn, fwc, fhc, wmwc, hmhc; l_float32 norm, normh, normw; l_uint32 val; l_uint32 *linemina, *linemaxa, *lined; wmwc = w - wc; hmhc = h - hc; if (wmwc <= 0 || hmhc <= 0) { L_ERROR("wc >= w || hc >=h\n", __func__); return; } fwc = 2 * wc + 1; fhc = 2 * hc + 1; norm = 255. / ((l_float32)(fwc) * fhc); /*------------------------------------------------------------* * Compute, using b.c. only to set limits on the accum image * *------------------------------------------------------------*/ for (i = 0; i < h; i++) { imin = L_MAX(i - 1 - hc, 0); imax = L_MIN(i + hc, h - 1); lined = datad + wpl * i; linemina = dataa + wpla * imin; linemaxa = dataa + wpla * imax; for (j = 0; j < w; j++) { jmin = L_MAX(j - 1 - wc, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxa[jmax] - linemaxa[jmin] - linemina[jmax] + linemina[jmin]; val = (l_uint8)(norm * val); SET_DATA_BYTE(lined, j, val); } } /*------------------------------------------------------------* * Fix normalization for boundary pixels * *------------------------------------------------------------*/ for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ hn = hc + i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } } for (i = hmhc; i < h; i++) { /* last hc lines */ hn = hc + h - i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } } for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normw); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { /* last wc columns */ wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normw); SET_DATA_BYTE(lined, j, val); } } } /*----------------------------------------------------------------------* * Census transform * *----------------------------------------------------------------------*/ /*! * \brief pixCensusTransform() * * \param[in] pixs 8 bpp * \param[in] halfsize of square over which neighbors are averaged * \param[in] pixacc [optional] 32 bpp pix * \return pixd 1 bpp * *
 * Notes:
 *      (1) The Census transform was invented by Ramin Zabih and John Woodfill
 *          ("Non-parametric local transforms for computing visual
 *          correspondence", Third European Conference on Computer Vision,
 *          Stockholm, Sweden, May 1994); see publications at
 *             http://www.cs.cornell.edu/~rdz/index.htm
 *          This compares each pixel against the average of its neighbors,
 *          in a square of odd dimension centered on the pixel.
 *          If the pixel is greater than the average of its neighbors,
 *          the output pixel value is 1; otherwise it is 0.
 *      (2) This can be used as an encoding for an image that is
 *          fairly robust against slow illumination changes, with
 *          applications in image comparison and mosaicing.
 *      (3) The size of the convolution kernel is (2 * halfsize + 1)
 *          on a side.  The halfsize parameter must be >= 1.
 *      (4) If accum pix is null, make one, use it, and destroy it
 *          before returning; otherwise, just use the input accum pix
 * 
*/ PIX * pixCensusTransform(PIX *pixs, l_int32 halfsize, PIX *pixacc) { l_int32 i, j, w, h, wpls, wplv, wpld; l_int32 vals, valv; l_uint32 *datas, *datav, *datad, *lines, *linev, *lined; PIX *pixav, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (halfsize < 1) return (PIX *)ERROR_PTR("halfsize must be >= 1", __func__, NULL); /* Get the average of each pixel with its neighbors */ if ((pixav = pixBlockconvGray(pixs, pixacc, halfsize, halfsize)) == NULL) return (PIX *)ERROR_PTR("pixav not made", __func__, NULL); /* Subtract the pixel from the average, and then compare * the pixel value with the remaining average */ pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) { pixDestroy(&pixav); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } datas = pixGetData(pixs); datav = pixGetData(pixav); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wplv = pixGetWpl(pixav); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; linev = datav + i * wplv; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valv = GET_DATA_BYTE(linev, j); if (vals > valv) SET_DATA_BIT(lined, j); } } pixDestroy(&pixav); return pixd; } /*----------------------------------------------------------------------* * Generic convolution * *----------------------------------------------------------------------*/ /*! * \brief pixConvolve() * * \param[in] pixs 8, 16, 32 bpp; no colormap * \param[in] kel kernel * \param[in] outdepth of pixd: 8, 16 or 32 * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise * \return pixd 8, 16 or 32 bpp * *
 * Notes:
 *      (1) This gives a convolution with an arbitrary kernel.
 *      (2) The input pixs must have only one sample/pixel.
 *          To do a convolution on an RGB image, use pixConvolveRGB().
 *      (3) The parameter %outdepth determines the depth of the result.
 *          If the kernel is normalized to unit sum, the output values
 *          can never exceed 255, so an output depth of 8 bpp is sufficient.
 *          If the kernel is not normalized, it may be necessary to use
 *          16 or 32 bpp output to avoid overflow.
 *      (4) If normflag == 1, the result is normalized by scaling all
 *          kernel values for a unit sum.  If the sum of kernel values
 *          is very close to zero, the kernel can not be normalized and
 *          the convolution will not be performed.  A warning is issued.
 *      (5) The kernel values can be positive or negative, but the
 *          result for the convolution can only be stored as a positive
 *          number.  Consequently, if it goes negative, the choices are
 *          to clip to 0 or take the absolute value.  We're choosing
 *          to take the absolute value.  (Another possibility would be
 *          to output a second unsigned image for the negative values.)
 *          If you want to get a clipped result, or to keep the negative
 *          values in the result, use fpixConvolve(), with the
 *          converters in fpix2.c between pix and fpix.
 *      (6) This uses a mirrored border to avoid special casing on
 *          the boundaries.
 *      (7) To get a subsampled output, call l_setConvolveSampling().
 *          The time to make a subsampled output is reduced by the
 *          product of the sampling factors.
 *      (8) The function is slow, running at about 12 machine cycles for
 *          each pixel-op in the convolution.  For example, with a 3 GHz
 *          cpu, a 1 Mpixel grayscale image, and a kernel with
 *          (sx * sy) = 25 elements, the convolution takes about 100 msec.
 * 
*/ PIX * pixConvolve(PIX *pixs, L_KERNEL *kel, l_int32 outdepth, l_int32 normflag) { l_int32 i, j, id, jd, k, m, w, h, d, wd, hd, sx, sy, cx, cy, wplt, wpld; l_int32 val; l_uint32 *datat, *datad, *linet, *lined; l_float32 sum; L_KERNEL *keli, *keln; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", __func__, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", __func__, NULL); pixd = NULL; keli = kernelInvert(kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if (normflag) keln = kernelNormalize(keli, 1.0); else keln = kernelCopy(keli); if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) { L_ERROR("pixt not made\n", __func__); goto cleanup; } wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; pixd = pixCreate(wd, hd, outdepth); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; if (d == 8) { for (m = 0; m < sx; m++) { val = GET_DATA_BYTE(linet, j + m); sum += val * keln->data[k][m]; } } else if (d == 16) { for (m = 0; m < sx; m++) { val = GET_DATA_TWO_BYTES(linet, j + m); sum += val * keln->data[k][m]; } } else { /* d == 32 */ for (m = 0; m < sx; m++) { val = *(linet + j + m); sum += val * keln->data[k][m]; } } } if (sum < 0.0) sum = -sum; /* make it non-negative */ if (outdepth == 8) SET_DATA_BYTE(lined, jd, (l_int32)(sum + 0.5)); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, jd, (l_int32)(sum + 0.5)); else /* outdepth == 32 */ *(lined + jd) = (l_uint32)(sum + 0.5); } } cleanup: kernelDestroy(&keli); kernelDestroy(&keln); pixDestroy(&pixt); return pixd; } /*! * \brief pixConvolveSep() * * \param[in] pixs 8, 16, 32 bpp; no colormap * \param[in] kelx x-dependent kernel * \param[in] kely y-dependent kernel * \param[in] outdepth of pixd: 8, 16 or 32 * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise * \return pixd 8, 16 or 32 bpp * *
 * Notes:
 *      (1) This does a convolution with a separable kernel that is
 *          is a sequence of convolutions in x and y.  The two
 *          one-dimensional kernel components must be input separately;
 *          the full kernel is the product of these components.
 *          The support for the full kernel is thus a rectangular region.
 *      (2) The input pixs must have only one sample/pixel.
 *          To do a convolution on an RGB image, use pixConvolveSepRGB().
 *      (3) The parameter %outdepth determines the depth of the result.
 *          If the kernel is normalized to unit sum, the output values
 *          can never exceed 255, so an output depth of 8 bpp is sufficient.
 *          If the kernel is not normalized, it may be necessary to use
 *          16 or 32 bpp output to avoid overflow.
 *      (2) The %normflag parameter is used as in pixConvolve().
 *      (4) The kernel values can be positive or negative, but the
 *          result for the convolution can only be stored as a positive
 *          number.  Consequently, if it goes negative, the choices are
 *          to clip to 0 or take the absolute value.  We're choosing
 *          the former for now.  Another possibility would be to output
 *          a second unsigned image for the negative values.
 *      (5) Warning: if you use l_setConvolveSampling() to get a
 *          subsampled output, and the sampling factor is larger than
 *          the kernel half-width, it is faster to use the non-separable
 *          version pixConvolve().  This is because the first convolution
 *          here must be done on every raster line, regardless of the
 *          vertical sampling factor.  If the sampling factor is smaller
 *          than kernel half-width, it's faster to use the separable
 *          convolution.
 *      (6) This uses mirrored borders to avoid special casing on
 *          the boundaries.
 * 
*/ PIX * pixConvolveSep(PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 outdepth, l_int32 normflag) { l_int32 d, xfact, yfact; L_KERNEL *kelxn, *kelyn; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", __func__, NULL); if (!kelx) return (PIX *)ERROR_PTR("kelx not defined", __func__, NULL); if (!kely) return (PIX *)ERROR_PTR("kely not defined", __func__, NULL); xfact = ConvolveSamplingFactX; yfact = ConvolveSamplingFactY; if (normflag) { kelxn = kernelNormalize(kelx, 1000.0f); kelyn = kernelNormalize(kely, 0.001f); l_setConvolveSampling(xfact, 1); pixt = pixConvolve(pixs, kelxn, 32, 0); l_setConvolveSampling(1, yfact); pixd = pixConvolve(pixt, kelyn, outdepth, 0); l_setConvolveSampling(xfact, yfact); /* restore */ kernelDestroy(&kelxn); kernelDestroy(&kelyn); } else { /* don't normalize */ l_setConvolveSampling(xfact, 1); pixt = pixConvolve(pixs, kelx, 32, 0); l_setConvolveSampling(1, yfact); pixd = pixConvolve(pixt, kely, outdepth, 0); l_setConvolveSampling(xfact, yfact); } pixDestroy(&pixt); return pixd; } /*! * \brief pixConvolveRGB() * * \param[in] pixs 32 bpp rgb * \param[in] kel kernel * \return pixd 32 bpp rgb * *
 * Notes:
 *      (1) This gives a convolution on an RGB image using an
 *          arbitrary kernel (which we normalize to keep each
 *          component within the range [0 ... 255].
 *      (2) The input pixs must be RGB.
 *      (3) The kernel values can be positive or negative, but the
 *          result for the convolution can only be stored as a positive
 *          number.  Consequently, if it goes negative, we clip the
 *          result to 0.
 *      (4) To get a subsampled output, call l_setConvolveSampling().
 *          The time to make a subsampled output is reduced by the
 *          product of the sampling factors.
 *      (5) This uses a mirrored border to avoid special casing on
 *          the boundaries.
 * 
*/ PIX * pixConvolveRGB(PIX *pixs, L_KERNEL *kel) { PIX *pixt, *pixr, *pixg, *pixb, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs is not 32 bpp", __func__, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", __func__, NULL); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*! * \brief pixConvolveRGBSep() * * \param[in] pixs 32 bpp rgb * \param[in] kelx x-dependent kernel * \param[in] kely y-dependent kernel * \return pixd 32 bpp rgb * *
 * Notes:
 *      (1) This does a convolution on an RGB image using a separable
 *          kernel that is a sequence of convolutions in x and y.  The two
 *          one-dimensional kernel components must be input separately;
 *          the full kernel is the product of these components.
 *          The support for the full kernel is thus a rectangular region.
 *      (2) The kernel values can be positive or negative, but the
 *          result for the convolution can only be stored as a positive
 *          number.  Consequently, if it goes negative, we clip the
 *          result to 0.
 *      (3) To get a subsampled output, call l_setConvolveSampling().
 *          The time to make a subsampled output is reduced by the
 *          product of the sampling factors.
 *      (4) This uses a mirrored border to avoid special casing on
 *          the boundaries.
 * 
*/ PIX * pixConvolveRGBSep(PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely) { PIX *pixt, *pixr, *pixg, *pixb, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs is not 32 bpp", __func__, NULL); if (!kelx || !kely) return (PIX *)ERROR_PTR("kelx, kely not both defined", __func__, NULL); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*----------------------------------------------------------------------* * Generic convolution with float array * *----------------------------------------------------------------------*/ /*! * \brief fpixConvolve() * * \param[in] fpixs 32 bit float array * \param[in] kel kernel * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise * \return fpixd 32 bit float array * *
 * Notes:
 *      (1) This gives a float convolution with an arbitrary kernel.
 *      (2) If normflag == 1, the result is normalized by scaling all
 *          kernel values for a unit sum.  If the sum of kernel values
 *          is very close to zero, the kernel can not be normalized and
 *          the convolution will not be performed.  A warning is issued.
 *      (3) With the FPix, there are no issues about negative
 *          array or kernel values.  The convolution is performed
 *          with single precision arithmetic.
 *      (4) To get a subsampled output, call l_setConvolveSampling().
 *          The time to make a subsampled output is reduced by the
 *          product of the sampling factors.
 *      (5) This uses a mirrored border to avoid special casing on
 *          the boundaries.
 * 
*/ FPIX * fpixConvolve(FPIX *fpixs, L_KERNEL *kel, l_int32 normflag) { l_int32 i, j, id, jd, k, m, w, h, wd, hd, sx, sy, cx, cy, wplt, wpld; l_float32 val; l_float32 *datat, *datad, *linet, *lined; l_float32 sum; L_KERNEL *keli, *keln; FPIX *fpixt, *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (!kel) return (FPIX *)ERROR_PTR("kel not defined", __func__, NULL); fpixd = NULL; keli = kernelInvert(kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if (normflag) keln = kernelNormalize(keli, 1.0); else keln = kernelCopy(keli); fpixGetDimensions(fpixs, &w, &h); fpixt = fpixAddMirroredBorder(fpixs, cx, sx - cx, cy, sy - cy); if (!fpixt) { L_ERROR("fpixt not made\n", __func__); goto cleanup; } wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; fpixd = fpixCreate(wd, hd); datat = fpixGetData(fpixt); datad = fpixGetData(fpixd); wplt = fpixGetWpl(fpixt); wpld = fpixGetWpl(fpixd); for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < sx; m++) { val = *(linet + j + m); sum += val * keln->data[k][m]; } } *(lined + jd) = sum; } } cleanup: kernelDestroy(&keli); kernelDestroy(&keln); fpixDestroy(&fpixt); return fpixd; } /*! * \brief fpixConvolveSep() * * \param[in] fpixs 32 bit float array * \param[in] kelx x-dependent kernel * \param[in] kely y-dependent kernel * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise * \return fpixd 32 bit float array * *
 * Notes:
 *      (1) This does a convolution with a separable kernel that is
 *          is a sequence of convolutions in x and y.  The two
 *          one-dimensional kernel components must be input separately;
 *          the full kernel is the product of these components.
 *          The support for the full kernel is thus a rectangular region.
 *      (2) The normflag parameter is used as in fpixConvolve().
 *      (3) Warning: if you use l_setConvolveSampling() to get a
 *          subsampled output, and the sampling factor is larger than
 *          the kernel half-width, it is faster to use the non-separable
 *          version pixConvolve().  This is because the first convolution
 *          here must be done on every raster line, regardless of the
 *          vertical sampling factor.  If the sampling factor is smaller
 *          than kernel half-width, it's faster to use the separable
 *          convolution.
 *      (4) This uses mirrored borders to avoid special casing on
 *          the boundaries.
 * 
*/ FPIX * fpixConvolveSep(FPIX *fpixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 normflag) { l_int32 xfact, yfact; L_KERNEL *kelxn, *kelyn; FPIX *fpixt, *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!kelx) return (FPIX *)ERROR_PTR("kelx not defined", __func__, NULL); if (!kely) return (FPIX *)ERROR_PTR("kely not defined", __func__, NULL); xfact = ConvolveSamplingFactX; yfact = ConvolveSamplingFactY; if (normflag) { kelxn = kernelNormalize(kelx, 1.0); kelyn = kernelNormalize(kely, 1.0); l_setConvolveSampling(xfact, 1); fpixt = fpixConvolve(fpixs, kelxn, 0); l_setConvolveSampling(1, yfact); fpixd = fpixConvolve(fpixt, kelyn, 0); l_setConvolveSampling(xfact, yfact); /* restore */ kernelDestroy(&kelxn); kernelDestroy(&kelyn); } else { /* don't normalize */ l_setConvolveSampling(xfact, 1); fpixt = fpixConvolve(fpixs, kelx, 0); l_setConvolveSampling(1, yfact); fpixd = fpixConvolve(fpixt, kely, 0); l_setConvolveSampling(xfact, yfact); } fpixDestroy(&fpixt); return fpixd; } /*------------------------------------------------------------------------* * Convolution with bias (for non-negative output) * *------------------------------------------------------------------------*/ /*! * \brief pixConvolveWithBias() * * \param[in] pixs 8 bpp; no colormap * \param[in] kel1 * \param[in] kel2 can be null; use if separable * \param[in] force8 if 1, force output to 8 bpp; otherwise, determine * output depth by the dynamic range of pixel values * \param[out] pbias applied bias * \return pixd 8 or 16 bpp * *
 * Notes:
 *      (1) This does a convolution with either a single kernel or
 *          a pair of separable kernels, and automatically applies whatever
 *          bias (shift) is required so that the resulting pixel values
 *          are non-negative.
 *      (2) The kernel is always normalized.  If there are no negative
 *          values in the kernel, a standard normalized convolution is
 *          performed, with 8 bpp output.  If the sum of kernel values is
 *          very close to zero, the kernel can not be normalized and
 *          the convolution will not be performed.  An error message results.
 *      (3) If there are negative values in the kernel, the pix is
 *          converted to an fpix, the convolution is done on the fpix, and
 *          a bias (shift) may need to be applied.
 *      (4) If force8 == TRUE and the range of values after the convolution
 *          is > 255, the output values will be scaled to fit in [0 ... 255].
 *          If force8 == FALSE, the output will be either 8 or 16 bpp,
 *          to accommodate the dynamic range of output values without scaling.
 * 
*/ PIX * pixConvolveWithBias(PIX *pixs, L_KERNEL *kel1, L_KERNEL *kel2, l_int32 force8, l_int32 *pbias) { l_int32 outdepth; l_float32 min1, min2, min, minval, maxval, range; FPIX *fpix1, *fpix2; PIX *pixd; if (!pbias) return (PIX *)ERROR_PTR("&bias not defined", __func__, NULL); *pbias = 0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); if (!kel1) return (PIX *)ERROR_PTR("kel1 not defined", __func__, NULL); /* Determine if negative values can be produced in the convolution */ kernelGetMinMax(kel1, &min1, NULL); min2 = 0.0; if (kel2) kernelGetMinMax(kel2, &min2, NULL); min = L_MIN(min1, min2); if (min >= 0.0) { if (!kel2) return pixConvolve(pixs, kel1, 8, 1); else return pixConvolveSep(pixs, kel1, kel2, 8, 1); } /* Bias may need to be applied; convert to fpix and convolve */ fpix1 = pixConvertToFPix(pixs, 1); if (!kel2) fpix2 = fpixConvolve(fpix1, kel1, 1); else fpix2 = fpixConvolveSep(fpix1, kel1, kel2, 1); fpixDestroy(&fpix1); /* Determine the bias and the dynamic range. * If the dynamic range is <= 255, just shift the values by the * bias, if any. * If the dynamic range is > 255, there are two cases: * (1) the output depth is not forced to 8 bpp * ==> apply the bias without scaling; outdepth = 16 * (2) the output depth is forced to 8 * ==> linearly map the pixel values to [0 ... 255]. */ fpixGetMin(fpix2, &minval, NULL, NULL); fpixGetMax(fpix2, &maxval, NULL, NULL); range = maxval - minval; *pbias = (minval < 0.0) ? -minval : 0.0; fpixAddMultConstant(fpix2, *pbias, 1.0); /* shift: min val ==> 0 */ if (range <= 255 || !force8) { /* no scaling of output values */ outdepth = (range > 255) ? 16 : 8; } else { /* scale output values to fit in 8 bpp */ fpixAddMultConstant(fpix2, 0.0, (255.0 / range)); outdepth = 8; } /* Convert back to pix; it won't do any clipping */ pixd = fpixConvertToPix(fpix2, outdepth, L_CLIP_TO_ZERO, 0); fpixDestroy(&fpix2); return pixd; } /*------------------------------------------------------------------------* * Set parameter for convolution subsampling * *------------------------------------------------------------------------*/ /*! * \brief l_setConvolveSampling() * * \param[in] xfact, yfact integer >= 1 * \return void * *
 * Notes:
 *      (1) This sets the x and y output subsampling factors for generic pix
 *          and fpix convolution.  The default values are 1 (no subsampling).
 * 
*/ void l_setConvolveSampling(l_int32 xfact, l_int32 yfact) { if (xfact < 1) xfact = 1; if (yfact < 1) yfact = 1; ConvolveSamplingFactX = xfact; ConvolveSamplingFactY = yfact; } /*------------------------------------------------------------------------* * Additive gaussian noise * *------------------------------------------------------------------------*/ /*! * \brief pixAddGaussianNoise() * * \param[in] pixs 8 bpp gray or 32 bpp rgb; no colormap * \param[in] stdev of noise * \return pixd 8 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) This adds noise to each pixel, taken from a normal
 *          distribution with zero mean and specified standard deviation.
 * 
*/ PIX * pixAddGaussianNoise(PIX *pixs, l_float32 stdev) { l_int32 i, j, w, h, d, wpls, wpld, val, rval, gval, bval; l_uint32 pixel; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) { val = GET_DATA_BYTE(lines, j); val += (l_int32)(stdev * gaussDistribSampling() + 0.5); val = L_MIN(255, L_MAX(0, val)); SET_DATA_BYTE(lined, j, val); } else { /* d = 32 */ pixel = *(lines + j); extractRGBValues(pixel, &rval, &gval, &bval); rval += (l_int32)(stdev * gaussDistribSampling() + 0.5); rval = L_MIN(255, L_MAX(0, rval)); gval += (l_int32)(stdev * gaussDistribSampling() + 0.5); gval = L_MIN(255, L_MAX(0, gval)); bval += (l_int32)(stdev * gaussDistribSampling() + 0.5); bval = L_MIN(255, L_MAX(0, bval)); composeRGBPixel(rval, gval, bval, lined + j); } } } return pixd; } /*! * \brief gaussDistribSampling() * * \return gaussian distributed variable with zero mean and unit stdev * *
 * Notes:
 *      (1) For an explanation of the Box-Muller method for generating
 *          a normally distributed random variable with zero mean and
 *          unit standard deviation, see Numerical Recipes in C,
 *          2nd edition, p. 288ff.
 *      (2) This can be called sequentially to get samples that can be
 *          used for adding noise to each pixel of an image, for example.
 * 
*/ l_float32 gaussDistribSampling(void) { static l_int32 select = 0; /* flips between 0 and 1 on successive calls */ static l_float32 saveval; l_float32 frand, xval, yval, rsq, factor; if (select == 0) { while (1) { /* choose a point in a 2x2 square, centered at origin */ frand = (l_float32)rand() / (l_float32)RAND_MAX; xval = 2.0 * frand - 1.0; frand = (l_float32)rand() / (l_float32)RAND_MAX; yval = 2.0 * frand - 1.0; rsq = xval * xval + yval * yval; if (rsq > 0.0 && rsq < 1.0) /* point is inside the unit circle */ break; } factor = sqrt(-2.0 * log(rsq) / rsq); saveval = xval * factor; select = 1; return yval * factor; } else { select = 0; return saveval; } } leptonica-1.86.0/src/correlscore.c000066400000000000000000001113461506303110300170370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * correlscore.c * * These are functions for computing correlation between * pairs of 1 bpp images. * * Optimized 2 pix correlators (for jbig2 clustering) * l_int32 pixCorrelationScore() * l_int32 pixCorrelationScoreThresholded() * * Simple 2 pix correlators * l_int32 pixCorrelationScoreSimple() * l_int32 pixCorrelationScoreShifted() * * There are other, more application-oriented functions, that * compute the correlation between two binary images, taking into * account small translational shifts, between two binary images. * These are: * compare.c: pixBestCorrelation() * Uses coarse-to-fine translations of full image * recogident.c: pixCorrelationBestShift() * Uses small shifts between c.c. centroids. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* -------------------------------------------------------------------- * * Optimized 2 pix correlators (for jbig2 clustering) * * -------------------------------------------------------------------- */ /*! * \brief pixCorrelationScore() * * \param[in] pix1 test pix, 1 bpp * \param[in] pix2 exemplar pix, 1 bpp * \param[in] area1 number of on pixels in pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] delx x comp of centroid difference * \param[in] dely y comp of centroid difference * \param[in] maxdiffw max width difference of pix1 and pix2 * \param[in] maxdiffh max height difference of pix1 and pix2 * \param[in] tab sum tab for byte * \param[out] pscore correlation score * \return 0 if OK, 1 on error * *
 * Notes:
 *  We check first that the two pix are roughly the same size.
 *  For jbclass (jbig2) applications at roughly 300 ppi, maxdiffw and
 *  maxdiffh should be at least 2.
 *
 *  Only if they meet that criterion do we compare the bitmaps.
 *  The centroid difference is used to align the two images to the
 *  nearest integer for the correlation.
 *
 *  The correlation score is the ratio of the square of the number of
 *  pixels in the AND of the two bitmaps to the product of the number
 *  of ON pixels in each.  Denote the number of ON pixels in pix1
 *  by |1|, the number in pix2 by |2|, and the number in the AND
 *  of pix1 and pix2 by |1 & 2|.  The correlation score is then
 *  (|1 & 2|)**2 / (|1|*|2|).
 *
 *  This score is compared with an input threshold, which can
 *  be modified depending on the weight of the template.
 *  The modified threshold is
 *     thresh + (1.0 - thresh) * weight * R
 *  where
 *     weight is a fixed input factor between 0.0 and 1.0
 *     R = |2| / area(2)
 *  and area(2) is the total number of pixels in 2 (i.e., width x height).
 *
 *  To understand why a weight factor is useful, consider what happens
 *  with thick, sans-serif characters that look similar and have a value
 *  of R near 1.  Different characters can have a high correlation value,
 *  and the classifier will make incorrect substitutions.  The weight
 *  factor raises the threshold for these characters.
 *
 *  Yet another approach to reduce such substitutions is to run the classifier
 *  in a non-greedy way, matching to the template with the highest
 *  score, not the first template with a score satisfying the matching
 *  constraint.  However, this is not particularly effective.
 *
 *  The implementation here gives the same result as in
 *  pixCorrelationScoreSimple(), where a temporary Pix is made to hold
 *  the AND and implementation uses rasterop:
 *      pixt = pixCreateTemplate(pix1);
 *      pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0);
 *      pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0);
 *      pixCountPixels(pixt, &count, tab);
 *      pixDestroy(&pixt);
 *  However, here it is done in a streaming fashion, counting as it goes,
 *  and touching memory exactly once, giving a 3-4x speedup over the
 *  simple implementation.  This very fast correlation matcher was
 *  contributed by William Rucklidge.
 * 
*/ l_ok pixCorrelationScore(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; l_int32 wpl1, wpl2, lorow, hirow, locol, hicol; l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; l_uint32 word1, word2, andw; l_uint32 *row1, *row2; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 undefined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 undefined or not 1 bpp", __func__, 1); if (!tab) return ERROR_INT("tab not defined", __func__, 1); if (area1 <= 0 || area2 <= 0) return ERROR_INT("areas must be > 0", __func__, 1); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return 0; delh = L_ABS(hi - ht); if (delh > maxdiffh) return 0; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); count = 0; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); rowwords2 = wpl2; /* What rows of pix1 need to be considered? Only those underlying the * shifted pix2. */ lorow = L_MAX(idely, 0); hirow = L_MIN(ht + idely, hi); /* Get the pointer to the first row of each image that will be * considered. */ row1 = pixGetData(pix1) + wpl1 * lorow; row2 = pixGetData(pix2) + wpl2 * (lorow - idely); /* Similarly, figure out which columns of pix1 will be considered. */ locol = L_MAX(idelx, 0); hicol = L_MIN(wt + idelx, wi); if (idelx >= 32) { /* pix2 is shifted far enough to the right that pix1's first * word(s) won't contribute to the count. Increment its * pointer to point to the first word that will contribute, * and adjust other values accordingly. */ pix1lskip = idelx >> 5; /* # of words to skip on left */ row1 += pix1lskip; locol -= pix1lskip << 5; hicol -= pix1lskip << 5; idelx &= 31; } else if (idelx <= -32) { /* pix2 is shifted far enough to the left that its first word(s) * won't contribute to the count. Increment its pointer * to point to the first word that will contribute, * and adjust other values accordingly. */ pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ row2 += pix2lskip; rowwords2 -= pix2lskip; idelx += pix2lskip << 5; } if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ count = 0; } else { /* How many words of each row of pix1 need to be considered? */ rowwords1 = (hicol + 31) >> 5; if (idelx == 0) { /* There's no lateral offset; simple case. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { andw = row1[x] & row2[x]; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } else if (idelx > 0) { /* pix2 is shifted to the right. word 0 of pix1 is touched by * word 0 of pix2; word 1 of pix1 is touched by word 0 and word * 1 of pix2, and so on up to the last word of pix1 (word N), * which is touched by words N-1 and N of pix1... if there is a * word N. Handle the two cases (pix2 has N-1 words and pix2 * has at least N words) separately. * * Note: we know that pix2 has at least N-1 words (i.e., * rowwords2 >= rowwords1 - 1) by the following logic. * We can pretend that idelx <= 31 because the >= 32 logic * above adjusted everything appropriately. Then * hicol <= wt + idelx <= wt + 31, so * hicol + 31 <= wt + 62 * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 * rowwords2 == (wt + 31) >> 5, so * rowwords1 <= rowwords2 + 1 */ if (rowwords2 < rowwords1) { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords2; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* Now the last iteration - we know that this is safe * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 * > 0 (if it was 0, we'd have taken the "count = 0" * fast-path out of here). */ word1 = row1[x]; word2 = row2[x - 1] << (32 - idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } else { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. This section is the same as above * except for the different limit on the loop, since * the last iteration is the same as all the other * iterations (beyond the first). */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords1; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } } else { /* pix2 is shifted to the left. word 0 of pix1 is touched by * word 0 and word 1 of pix2, and so on up to the last word of * pix1 (word N), which is touched by words N and N+1 of * pix2... if there is a word N+1. Handle the two cases (pix2 * has N words and pix2 has at least N+1 words) separately. */ if (rowwords1 < rowwords2) { /* pix2 has at least N+1 words, so every iteration through * the loop can be the same. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } else { /* pix2 has only N words, so the last iteration is broken * out. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1 - 1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } word1 = row1[x]; word2 = row2[x] << -idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } } *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); /* lept_stderr("score = %5.3f, count = %d, area1 = %d, area2 = %d\n", *pscore, count, area1, area2); */ return 0; } /*! * \brief pixCorrelationScoreThresholded() * * \param[in] pix1 test pix, 1 bpp * \param[in] pix2 exemplar pix, 1 bpp * \param[in] area1 number of on pixels in pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] delx x comp of centroid difference * \param[in] dely y comp of centroid difference * \param[in] maxdiffw max width difference of pix1 and pix2 * \param[in] maxdiffh max height difference of pix1 and pix2 * \param[in] tab sum tab for byte * \param[in] downcount count of 1 pixels below each row of pix1 * \param[in] score_threshold * \return whether the correlation score is >= score_threshold * * *
 * Notes:
 *  We check first that the two pix are roughly the same size.
 *  Only if they meet that criterion do we compare the bitmaps.
 *  The centroid difference is used to align the two images to the
 *  nearest integer for the correlation.
 *
 *  The correlation score is the ratio of the square of the number of
 *  pixels in the AND of the two bitmaps to the product of the number
 *  of ON pixels in each.  Denote the number of ON pixels in pix1
 *  by |1|, the number in pix2 by |2|, and the number in the AND
 *  of pix1 and pix2 by |1 & 2|.  The correlation score is then
 *  (|1 & 2|)**2 / (|1|*|2|).
 *
 *  This score is compared with an input threshold, which can
 *  be modified depending on the weight of the template.
 *  The modified threshold is
 *     thresh + (1.0 - thresh) * weight * R
 *  where
 *     weight is a fixed input factor between 0.0 and 1.0
 *     R = |2| / area(2)
 *  and area(2) is the total number of pixels in 2 (i.e., width x height).
 *
 *  To understand why a weight factor is useful, consider what happens
 *  with thick, sans-serif characters that look similar and have a value
 *  of R near 1.  Different characters can have a high correlation value,
 *  and the classifier will make incorrect substitutions.  The weight
 *  factor raises the threshold for these characters.
 *
 *  Yet another approach to reduce such substitutions is to run the classifier
 *  in a non-greedy way, matching to the template with the highest
 *  score, not the first template with a score satisfying the matching
 *  constraint.  However, this is not particularly effective.
 *
 *  This very fast correlation matcher was contributed by William Rucklidge.
 * 
*/ l_int32 pixCorrelationScoreThresholded(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_int32 *downcount, l_float32 score_threshold) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; l_int32 wpl1, wpl2, lorow, hirow, locol, hicol, untouchable; l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; l_uint32 word1, word2, andw; l_uint32 *row1, *row2; l_float32 score; l_int32 threshold; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 undefined or not 1 bpp", __func__, 0); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 undefined or not 1 bpp", __func__, 0); if (!tab) return ERROR_INT("tab not defined", __func__, 0); if (area1 <= 0 || area2 <= 0) return ERROR_INT("areas must be > 0", __func__, 0); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Compute the correlation count that is needed so that * count * count / (area1 * area2) >= score_threshold */ threshold = (l_int32)ceil(sqrt((l_float64)score_threshold * area1 * area2)); count = 0; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); rowwords2 = wpl2; /* What rows of pix1 need to be considered? Only those underlying the * shifted pix2. */ lorow = L_MAX(idely, 0); hirow = L_MIN(ht + idely, hi); /* Get the pointer to the first row of each image that will be * considered. */ row1 = pixGetData(pix1) + wpl1 * lorow; row2 = pixGetData(pix2) + wpl2 * (lorow - idely); if (hirow <= hi) { /* Some rows of pix1 will never contribute to count */ untouchable = downcount[hirow - 1]; } /* Similarly, figure out which columns of pix1 will be considered. */ locol = L_MAX(idelx, 0); hicol = L_MIN(wt + idelx, wi); if (idelx >= 32) { /* pix2 is shifted far enough to the right that pix1's first * word(s) won't contribute to the count. Increment its * pointer to point to the first word that will contribute, * and adjust other values accordingly. */ pix1lskip = idelx >> 5; /* # of words to skip on left */ row1 += pix1lskip; locol -= pix1lskip << 5; hicol -= pix1lskip << 5; idelx &= 31; } else if (idelx <= -32) { /* pix2 is shifted far enough to the left that its first word(s) * won't contribute to the count. Increment its pointer * to point to the first word that will contribute, * and adjust other values accordingly. */ pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ row2 += pix2lskip; rowwords2 -= pix2lskip; idelx += pix2lskip << 5; } if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ count = 0; } else { /* How many words of each row of pix1 need to be considered? */ rowwords1 = (hicol + 31) >> 5; if (idelx == 0) { /* There's no lateral offset; simple case. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { andw = row1[x] & row2[x]; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* If the count is over the threshold, no need to * calculate any further. Likewise, return early if the * count plus the maximum count attainable from further * rows is below the threshold. */ if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else if (idelx > 0) { /* pix2 is shifted to the right. word 0 of pix1 is touched by * word 0 of pix2; word 1 of pix1 is touched by word 0 and word * 1 of pix2, and so on up to the last word of pix1 (word N), * which is touched by words N-1 and N of pix1... if there is a * word N. Handle the two cases (pix2 has N-1 words and pix2 * has at least N words) separately. * * Note: we know that pix2 has at least N-1 words (i.e., * rowwords2 >= rowwords1 - 1) by the following logic. * We can pretend that idelx <= 31 because the >= 32 logic * above adjusted everything appropriately. Then * hicol <= wt + idelx <= wt + 31, so * hicol + 31 <= wt + 62 * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 * rowwords2 == (wt + 31) >> 5, so * rowwords1 <= rowwords2 + 1 */ if (rowwords2 < rowwords1) { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords2; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* Now the last iteration - we know that this is safe * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 * > 0 (if it was 0, we'd have taken the "count = 0" * fast-path out of here). */ word1 = row1[x]; word2 = row2[x - 1] << (32 - idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. This section is the same as above * except for the different limit on the loop, since * the last iteration is the same as all the other * iterations (beyond the first). */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords1; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } } else { /* pix2 is shifted to the left. word 0 of pix1 is touched by * word 0 and word 1 of pix2, and so on up to the last word of * pix1 (word N), which is touched by words N and N+1 of * pix2... if there is a word N+1. Handle the two cases (pix2 * has N words and pix2 has at least N+1 words) separately. */ if (rowwords1 < rowwords2) { /* pix2 has at least N+1 words, so every iteration through * the loop can be the same. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else { /* pix2 has only N words, so the last iteration is broken * out. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1 - 1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } word1 = row1[x]; word2 = row2[x] << -idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } } } score = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); if (score >= score_threshold) { lept_stderr( "count %d < threshold %d but score %g >= score_threshold %g\n", count, threshold, score, score_threshold); } return FALSE; } /* -------------------------------------------------------------------- * * Simple 2 pix correlators (for jbig2 clustering) * * -------------------------------------------------------------------- */ /*! * \brief pixCorrelationScoreSimple() * * \param[in] pix1 test pix, 1 bpp * \param[in] pix2 exemplar pix, 1 bpp * \param[in] area1 number of on pixels in pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] delx x comp of centroid difference * \param[in] dely y comp of centroid difference * \param[in] maxdiffw max width difference of pix1 and pix2 * \param[in] maxdiffh max height difference of pix1 and pix2 * \param[in] tab sum tab for byte * \param[out] pscore correlation score, in range [0.0 ... 1.0] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This calculates exactly the same value as pixCorrelationScore().
 *          It is 2-3x slower, but much simpler to understand.
 *      (2) The returned correlation score is 0.0 if the width or height
 *          exceed %maxdiffw or %maxdiffh.
 * 
*/ l_ok pixCorrelationScoreSimple(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; PIX *pixt; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 undefined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 undefined or not 1 bpp", __func__, 1); if (!tab) return ERROR_INT("tab not defined", __func__, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", __func__, 1); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return 0; delh = L_ABS(hi - ht); if (delh > maxdiffh) return 0; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* pixt = pixAnd(NULL, pix1, pix2), including shift. * To insure that pixels are ON only within the * intersection of pix1 and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0); pixCountPixels(pixt, &count, tab); pixDestroy(&pixt); *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); /* lept_stderr("score = %5.3f, count = %d, area1 = %d, area2 = %d\n", *pscore, count, area1, area2); */ return 0; } /*! * \brief pixCorrelationScoreShifted() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \param[in] area1 number of on pixels in pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] delx x translation of pix2 relative to pix1 * \param[in] dely y translation of pix2 relative to pix1 * \param[in] tab sum tab for byte * \param[out] pscore correlation score * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the correlation between two 1 bpp images,
 *          when pix2 is shifted by (delx, dely) with respect
 *          to each other.
 *      (2) This is implemented by starting with a copy of pix1 and
 *          ANDing its pixels with those of a shifted pix2.
 *      (3) Get the pixel counts for area1 and area2 using piCountPixels().
 *      (4) A good estimate for a shift that would maximize the correlation
 *          is to align the centroids (cx1, cy1; cx2, cy2), giving the
 *          relative translations etransx and etransy:
 *             etransx = cx1 - cx2
 *             etransy = cy1 - cy2
 *          Typically delx is chosen to be near etransx; ditto for dely.
 *          This function is used in pixBestCorrelation(), where the
 *          translations delx and dely are varied to find the best alignment.
 *      (5) We do not check the sizes of pix1 and pix2, because they should
 *          be comparable.
 * 
*/ l_ok pixCorrelationScoreShifted(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 delx, l_int32 dely, l_int32 *tab, l_float32 *pscore) { l_int32 w1, h1, w2, h2, count; PIX *pixt; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 undefined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 undefined or not 1 bpp", __func__, 1); if (!tab) return ERROR_INT("tab not defined", __func__, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", __func__, 1); pixGetDimensions(pix1, &w1, &h1, NULL); pixGetDimensions(pix2, &w2, &h2, NULL); /* To insure that pixels are ON only within the * intersection of pix1 and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, delx, dely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w1, h1, PIX_SRC & PIX_DST, pix1, 0, 0); pixCountPixels(pixt, &count, tab); pixDestroy(&pixt); *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); return 0; } leptonica-1.86.0/src/dewarp.h000066400000000000000000000262271506303110300160070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_DEWARP_H #define LEPTONICA_DEWARP_H /*! * \file dewarp.h * *
 *     Data structure to hold arrays and results for generating
 *     horizontal and vertical disparity arrays based on textlines.
 *     Each disparity array is two-dimensional.  The vertical disparity
 *     array gives a vertical displacement, relative to the lowest point
 *     in the textlines.  The horizontal disparty array gives a horizontal
 *     displacement, relative to the minimum values (for even pages)
 *     or maximum values (for odd pages) of the left and right ends of
 *     full textlines.  Horizontal alignment always involves translations
 *     away from the book gutter.
 *
 *     We have intentionally separated the process of building models
 *     from the rendering process that uses the models.  For any page,
 *     the building operation either creates an actual model (that is,
 *     a model with at least the vertical disparity being computed, and
 *     for which the 'success' flag is set) or fails to create a model.
 *     However, at rendering time, a page can have one of two different
 *     types of models.
 *     (1) A valid model is an actual model that meets the rendering
 *         constraints, which are limits on model curvature parameters.
 *         See dewarpaTestForValidModel() for details.
 *         Valid models are identified by dewarpaInsertRefModels(),
 *         which sets the 'vvalid' and 'hvalid' fields.  Only valid
 *         models are used for rendering.
 *     (2) A reference model is used by a page that doesn't have
 *         a valid model, but has a nearby valid model of the same
 *         parity (even/odd page) that it can use.  The range in pages
 *         to search for a valid model is given by the 'maxdist' field.
 *
 *     At the rendering stage, vertical and horizontal disparities are
 *     treated differently.  It is somewhat more robust to generate
 *     vertical disparity models (VDM) than horizontal disparity
 *     models (HDM). A valid VDM is required for any correction to
 *     be made; if a valid VDM is not available, just use the input
 *     image.  Otherwise, assuming it is available, the use of the
 *     HDM is controlled by two fields: 'useboth' and 'check_columns'.
 *       (a) With useboth == 0, we use only the VDM.
 *       (b) With useboth == 1, we require using the VDM and, if a valid
 *           horizontal disparity model (HDM) is available, we also use it.
 *       (c) With check_columns == 1, check for multiple columns and if
 *           true, only use the VDM, even if a valid HDM is available.
 *           Note that 'check_columns' takes precedence over 'useboth'
 *           when there is more than 1 column of text.  By default,
 *           check_columns == 0.
 *
 *     The 'maxdist' parameter is input when the dewarpa is created.
 *     The other rendering parameters have default values given in dewarp1.c.
 *     All parameters used by rendering can be set (or reset) using accessors.
 *
 *     After dewarping, use of the VDM will cause all points on each
 *     altered curve to have a y-value equal to the minimum.  Use of
 *     the HDA will cause the left and right edges of the textlines
 *     to be vertically aligned if they had been typeset flush-left
 *     and flush-right, respectively.
 *
 *     The sampled disparity arrays are expanded to full resolution,
 *     using linear interpolation, and this is further expanded
 *     by slope continuation to the right and below if the image
 *     is larger than the full resolution disparity arrays.  Then
 *     the disparity correction can be applied to the input image.
 *     If the input pix are 2x reduced, the expansion from sampled
 *     to full res uses the product of (sampling) * (redfactor).
 *
 *     The most accurate results are produced at full resolution, and
 *     this is generally recommended.
 * 
*/ /*! Dewarp version for serialization *
     * Note on versioning of the serialization of this data structure:
     * The dewarping utility and the stored data can be expected to change.
     * In most situations, the serialized version is ephemeral -- it is
     * not needed after being used.  No functions will be provided to
     * convert between different versions.
     * 
*/ #define DEWARP_VERSION_NUMBER 4 /*! Data structure to hold a number of Dewarp */ struct L_Dewarpa { l_int32 nalloc; /*!< size of dewarp ptr array */ l_int32 maxpage; /*!< maximum page number in array */ struct L_Dewarp **dewarp; /*!< array of ptrs to page dewarp */ struct L_Dewarp **dewarpcache; /*!< array of ptrs to cached dewarps */ struct Numa *namodels; /*!< list of page numbers for pages */ /*!< with page models */ struct Numa *napages; /*!< list of page numbers with either */ /*!< page models or ref page models */ l_int32 redfactor; /*!< reduction factor of input: 1 or 2 */ l_int32 sampling; /*!< disparity arrays sampling factor */ l_int32 minlines; /*!< min number of long lines required */ l_int32 maxdist; /*!< max distance for getting ref page */ l_int32 max_linecurv; /*!< maximum abs line curvature, */ /*!< in micro-units */ l_int32 min_diff_linecurv; /*!< minimum abs diff line */ /*!< curvature in micro-units */ l_int32 max_diff_linecurv; /*!< maximum abs diff line */ /*!< curvature in micro-units */ l_int32 max_edgeslope; /*!< maximum abs left or right edge */ /*!< slope, in milli-units */ l_int32 max_edgecurv; /*!< maximum abs left or right edge */ /*!< curvature, in micro-units */ l_int32 max_diff_edgecurv; /*!< maximum abs diff left-right */ /*!< edge curvature, in micro-units */ l_int32 useboth; /*!< use both disparity arrays if */ /*!< available; only vertical otherwise */ l_int32 check_columns; /*!< if there are multiple columns, */ /*!< only use the vertical disparity */ /*!< array */ l_int32 modelsready; /*!< invalid models have been removed */ /*!< and refs built against valid set */ }; typedef struct L_Dewarpa L_DEWARPA; /*! Data structure for a single dewarp */ struct L_Dewarp { struct L_Dewarpa *dewa; /*!< ptr to parent (not owned) */ struct Pix *pixs; /*!< source pix, 1 bpp */ struct FPix *sampvdispar; /*!< sampled vert disparity array */ struct FPix *samphdispar; /*!< sampled horiz disparity array */ struct FPix *sampydispar; /*!< sampled slope h-disparity array */ struct FPix *fullvdispar; /*!< full vert disparity array */ struct FPix *fullhdispar; /*!< full horiz disparity array */ struct FPix *fullydispar; /*!< full slope h-disparity array */ struct Numa *namidys; /*!< sorted y val of midpoint each line */ struct Numa *nacurves; /*!< sorted curvature of each line */ l_int32 w; /*!< width of source image */ l_int32 h; /*!< height of source image */ l_int32 pageno; /*!< page number; important for reuse */ l_int32 sampling; /*!< sampling factor of disparity arrays */ l_int32 redfactor; /*!< reduction factor of pixs: 1 or 2 */ l_int32 minlines; /*!< min number of long lines required */ l_int32 nlines; /*!< number of long lines found */ l_int32 mincurv; /*!< min line curvature in micro-units */ l_int32 maxcurv; /*!< max line curvature in micro-units */ l_int32 leftslope; /*!< left edge slope in milli-units */ l_int32 rightslope; /*!< right edge slope in milli-units */ l_int32 leftcurv; /*!< left edge curvature in micro-units */ l_int32 rightcurv; /*!< right edge curvature in micro-units*/ l_int32 nx; /*!< number of sampling pts in x-dir */ l_int32 ny; /*!< number of sampling pts in y-dir */ l_int32 hasref; /*!< 0 if normal; 1 if has a refpage */ l_int32 refpage; /*!< page with disparity model to use */ l_int32 vsuccess; /*!< sets to 1 if vert disparity builds */ l_int32 hsuccess; /*!< sets to 1 if horiz disparity builds */ l_int32 ysuccess; /*!< sets to 1 if slope disparity builds */ l_int32 vvalid; /*!< sets to 1 if valid vert disparity */ l_int32 hvalid; /*!< sets to 1 if valid horiz disparity */ l_int32 skip_horiz; /*!< if 1, skip horiz disparity */ /*!< correction */ l_int32 debug; /*!< set to 1 if debug output requested */ }; typedef struct L_Dewarp L_DEWARP; #endif /* LEPTONICA_DEWARP_H */ leptonica-1.86.0/src/dewarp1.c000066400000000000000000001711271506303110300160630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dewarp1.c *
 *
 *    Basic operations and serialization
 *
 *      Create/destroy dewarp
 *          L_DEWARP          *dewarpCreate()
 *          L_DEWARP          *dewarpCreateRef()
 *          void               dewarpDestroy()
 *
 *      Create/destroy dewarpa
 *          L_DEWARPA         *dewarpaCreate()
 *          L_DEWARPA         *dewarpaCreateFromPixacomp()
 *          void               dewarpaDestroy()
 *          l_int32            dewarpaDestroyDewarp()
 *
 *      Dewarpa insertion/extraction
 *          l_int32            dewarpaInsertDewarp()
 *          static l_int32     dewarpaExtendArraysToSize()
 *          L_DEWARP          *dewarpaGetDewarp()
 *
 *      Setting parameters to control rendering from the model
 *          l_int32            dewarpaSetCurvatures()
 *          l_int32            dewarpaUseBothArrays()
 *          l_int32            dewarpaSetCheckColumns()
 *          l_int32            dewarpaSetMaxDistance()
 *
 *      Dewarp serialized I/O
 *          L_DEWARP          *dewarpRead()
 *          L_DEWARP          *dewarpReadStream()
 *          L_DEWARP          *dewarpReadMem()
 *          l_int32            dewarpWrite()
 *          l_int32            dewarpWriteStream()
 *          l_int32            dewarpWriteMem()
 *
 *      Dewarpa serialized I/O
 *          L_DEWARPA         *dewarpaRead()
 *          L_DEWARPA         *dewarpaReadStream()
 *          L_DEWARPA         *dewarpaReadMem()
 *          l_int32            dewarpaWrite()
 *          l_int32            dewarpaWriteStream()
 *          l_int32            dewarpaWriteMem()
 *
 *
 *  Examples of usage
 *  =================
 *
 *  See dewarpaCreateFromPixacomp() for an example of the basic
 *  operations, starting from a set of 1 bpp images.
 *
 *  Basic functioning to dewarp a specific single page:
 * \code
 *     // Make the Dewarpa for the pages
 *     L_Dewarpa *dewa = dewarpaCreate(1, 30, 1, 15, 50);
 *     dewarpaSetCurvatures(dewa, -1, 50, -1, -1, -1, -1);
 *     dewarpaUseBothArrays(dewa, 1);  // try to use both disparity
 *                                     // arrays for this example
 *
 *     // Do the page: start with a binarized image
 *     Pix *pixb = "binarize"(pixs);
 *     // Initialize a Dewarp for this page (say, page 214)
 *     L_Dewarp *dew = dewarpCreate(pixb, 214);
 *     // Insert in Dewarpa and obtain parameters for building the model
 *     dewarpaInsertDewarp(dewa, dew);
 *     // Do the work
 *     dewarpBuildPageModel(dew, NULL);  // no debugging
 *     // Optionally set rendering parameters
 *     // Apply model to the input pixs
 *     Pix *pixd;
 *     dewarpaApplyDisparity(dewa, 214, pixs, 255, 0, 0, &pixd, NULL);
 *     pixDestroy(&pixb);
 * \endcode
 *
 *  Basic functioning to dewarp many pages:
 * \code
 *     // Make the Dewarpa for the set of pages; use fullres 1 bpp
 *     L_Dewarpa *dewa = dewarpaCreate(10, 30, 1, 15, 50);
 *     // Optionally set rendering parameters
 *     dewarpaSetCurvatures(dewa, -1, 30, -1, -1, -1, -1);
 *     dewarpaUseBothArrays(dewa, 0);  // just use the vertical disparity
 *                                     // array for this example
 *
 *     // Do first page: start with a binarized image
 *     Pix *pixb = "binarize"(pixs);
 *     // Initialize a Dewarp for this page (say, page 1)
 *     L_Dewarp *dew = dewarpCreate(pixb, 1);
 *     // Insert in Dewarpa and obtain parameters for building the model
 *     dewarpaInsertDewarp(dewa, dew);
 *     // Do the work
 *     dewarpBuildPageModel(dew, NULL);  // no debugging
 *     dewarpMinimze(dew);  // remove most heap storage
 *     pixDestroy(&pixb);
 *
 *     // Do the other pages the same way
 *     ...
 *
 *     // Apply models to each page; if the page model is invalid,
 *     // try to use a valid neighboring model.  Note that the call
 *     // to dewarpaInsertRefModels() is optional, because it is called
 *     // by dewarpaApplyDisparity() on the first page it acts on.
 *     dewarpaInsertRefModels(dewa, 0, 1); // use debug flag to get more
 *                         // detailed information about the page models
 *     [For each page, where pixs is the fullres image to be dewarped] {
 *         L_Dewarp *dew = dewarpaGetDewarp(dewa, pageno);
 *         if (dew) {  // disparity model exists
 *             Pix *pixd;
 *             dewarpaApplyDisparity(dewa, pageno, pixs, 255,
 *                                   0, 0, &pixd, NULL);
 *             dewarpMinimize(dew);  // clean out the pix and fpix arrays
 *             // Squirrel pixd away somewhere ...)
 *         }
 *     }
 * \endcode
 *
 *  Basic functioning to dewarp a small set of pages, potentially
 *  using models from nearby pages:
 * \code
 *     // (1) Generate a set of binarized images in the vicinity of the
 *     // pages to be dewarped.  We will attempt to compute models
 *     // for pages from 'firstpage' to 'lastpage'.
 *     // Store the binarized images in a compressed array of
 *     // size 'n', where 'n' is the number of images to be stored,
 *     // and where the offset is the first page.
 *     PixaComp *pixac = pixacompCreateInitialized(n, firstpage, NULL,
 *                                                 IFF_TIFF_G4);
 *     for (i = firstpage; i <= lastpage; i++) {
 *         Pix *pixb = "binarize"(pixs);
 *         pixacompReplacePix(pixac, i, pixb, IFF_TIFF_G4);
 *         pixDestroy(&pixb);
 *     }
 *
 *     // (2) Make the Dewarpa for the pages.
 *     L_Dewarpa *dewa =
 *           dewarpaCreateFromPixacomp(pixac, 30, 15, 20);
 *     dewarpaUseBothArrays(dewa, 1);  // try to use both disparity arrays
 *                                     // in this example
 *
 *     // (3) Finally, apply the models.  For page 'firstpage' with image pixs:
 *     L_Dewarp *dew = dewarpaGetDewarp(dewa, firstpage);
 *     if (dew) {  // disparity model exists
 *         Pix *pixd;
 *         dewarpaApplyDisparity(dewa, firstpage, pixs, 255, 0, 0, &pixd, NULL);
 *         dewarpMinimize(dew);
 *     }
 * \endcode
 *
 *  Because in general some pages will not have enough text to build a
 *  model, we fill in for those pages with a reference to the page
 *  model to use.  Both the target page and the reference page must
 *  have the same parity.  We can also choose to use either a partial model
 *  (with only vertical disparity) or the full model of a nearby page.
 *
 *  Minimizing the data in a model by stripping out images,
 *  numas, and full resolution disparity arrays:
 *     dewarpMinimize(dew);
 *  This can be done at any time to save memory.  Serialization does
 *  not use the data that is stripped.
 *
 *  You can apply any model (in a dew), stripped or not, to another image:
 * \code
 *     // For all pages with invalid models, assign the nearest valid
 *     // page model with same parity.
 *     dewarpaInsertRefModels(dewa, 0, 0);
 *     // You can then apply to 'newpix' the page model that was assigned
 *     // to 'pageno', giving the result in pixd:
 *     Pix *pixd;
 *     dewarpaApplyDisparity(dewa, pageno, newpix, 255, 0, 0, &pixd, NULL);
 * \endcode
 *
 *  You can apply the disparity arrays to a deliberately undercropped
 *  image.  Suppose that you undercrop by (left, right, top, bot), so
 *  that the disparity arrays are aligned with their origin at (left, top).
 *  Dewarp the undercropped image with:
 * \code
 *     Pix *pixd;
 *     dewarpaApplyDisparity(dewa, pageno, undercropped_pix, 255,
 *                           left, top, &pixd, NULL);
 * \endcode
 *
 *  Description of the approach to analyzing page image distortion
 *  ==============================================================
 *
 *  When a book page is scanned, there are several possible causes
 *  for the text lines to appear to be curved:
 *   (1) A barrel (fish-eye) effect because the camera is at
 *       a finite distance from the page.  Take the normal from
 *       the camera to the page (the 'optic axis').  Lines on
 *       the page "below" this point will appear to curve upward
 *       (negative curvature); lines "above" this will curve downward.
 *   (2) Radial distortion from the camera lens.  Probably not
 *       a big factor.
 *   (3) Local curvature of the page in to (or out of) the image
 *       plane (which is perpendicular to the optic axis).
 *       This has no effect if the page is flat.
 *
 *  In the following, the optic axis is in the z direction and is
 *  perpendicular to the xy plane;, the book is assumed to be aligned
 *  so that y is approximately along the binding.
 *  The goal is to compute the "disparity" field, D(x,y), which
 *  is actually a vector composed of the horizontal and vertical
 *  disparity fields H(x,y) and V(x,y).  Each of these is a local
 *  function that gives the amount each point in the image is
 *  required to move in order to rectify the horizontal and vertical
 *  lines.  It would also be nice to "flatten" the page to compensate
 *  for effect (3), foreshortening due to bending of the page into
 *  the z direction, but that is more difficult.
 *
 *  Effects (1) and (2) can be directly compensated by calibrating
 *  the scene, using a flat page with horizontal and vertical lines.
 *  Then H(x,y) and V(x,y) can be found as two (non-parametric) arrays
 *  of values.  Suppose this has been done.  Then the remaining
 *  distortion is due to (3).
 *
 *  We consider the simple situation where the page bending is independent
 *  of y, and is described by alpha(x), where alpha is the angle between
 *  the normal to the page and the optic axis.  cos(alpha(x)) is the local
 *  compression factor of the page image in the horizontal direction, at x.
 *  Thus, if we know alpha(x), we can compute the disparity H(x) required
 *  to flatten the image by simply integrating 1/cos(alpha), and we could
 *  compute the remaining disparities, H(x,y) and V(x,y), from the
 *  page content, as described below.  Unfortunately, we don't know
 *  alpha.  What do we know?  If there are horizontal text lines
 *  on the page, we can compute the vertical disparity, V(x,y), which
 *  is the local translation required to make the text lines parallel
 *  to the rasters.  If the margins are left and right aligned, we can
 *  also estimate the horizontal disparity, H(x,y), required to have
 *  uniform margins.  All that can be done from the image alone,
 *  assuming we have text lines covering a sufficient part of the page.
 *
 *  What about alpha(x)?  The basic question relating to (3) is this:
 *
 *     Is it possible, using the shape of the text lines alone,
 *     to compute both the vertical and horizontal disparity fields?
 *
 *  The underlying problem is to separate the line curvature effects due
 *  to the camera view from those due to actual bending of the page.
 *  I believe the proper way to do this is to make some measurements
 *  based on the camera setup, which will depend mostly on the distance
 *  of the camera from the page, and to a smaller extent on the location
 *  of the optic axis with respect to the page.
 *
 *  Here is the procedure.  Photograph a page with a fine 2D line grid
 *  several times, each with a different slope near the binding.
 *  This can be done by placing the grid page on books that have
 *  different shapes z(x) near the binding.  For each one you can
 *  measure, near the binding:
 *    (1) ds/dy, the vertical rate of change of slope of the horizontal lines
 *    (2) the local horizontal compression of the vertical lines due
 *        to the page angle dz/dx.
 *  As mentioned above, the local horizontal compression is simply
 *  cos(dz/dx).  But the measurement you can make on an actual book
 *  page is (1).  The difficulty is to generate (2) from (1).
 *
 *  Back to the procedure.  The function in (1), ds/dy, likely needs
 *  to be measured at a few y locations, because the relation
 *  between (1) and (2) may weakly depend on the y-location with
 *  respect to the y-coordinate of the optic axis of the camera.
 *  From these measurements you can determine, for the camera setup
 *  that you have, the local horizontal compression, cos(dz/dx), as a
 *  function of the both vertical location (y) and your measured vertical
 *  derivative of the text line slope there, ds/dy.  Then with
 *  appropriate smoothing of your measured values, you can set up a
 *  horizontal disparity array to correct for the compression due
 *  to dz/dx.
 *
 *  Now consider V(x,0) and V(x,h), the vertical disparity along
 *  the top and bottom of the image.  With a little thought you
 *  can convince yourself that the local foreshortening,
 *  as a function of x, is proportional to the difference
 *  between the slope of V(x,0) and V(x,h).  The horizontal
 *  disparity can then be computed by integrating the local foreshortening
 *  over x.  Integration of the slope of V(x,0) and V(x,h) gives
 *  the vertical disparity itself.  We have to normalize to h, the
 *  height of the page.  So the very simple result is that
 *
 *      H(x) ~ (V(x,0) - V(x,h)) / h         [1]
 *
 *  which is easily computed.  There is a proportionality constant
 *  that depends on the ratio of h to the distance to the camera.
 *  Can we actually believe this for the case where the bending
 *  is independent of y?  I believe the answer is yes,
 *  as long as you first remove the apparent distortion due
 *  to the camera being at a finite distance.
 *
 *  If you know the intersection of the optical axis with the page
 *  and the distance to the camera, and if the page is perpendicular
 *  to the optic axis, you can compute the horizontal and vertical
 *  disparities due to (1) and (2) and remove them.  The resulting
 *  distortion should be entirely due to bending (3), for which
 *  the relation
 *
 *      Hx(x) dx = C * ((Vx(x,0) - Vx(x, h))/h) dx         [2]
 *
 *  holds for each point in x (Hx and Vx are partial derivatives w/rt x).
 *  Integrating over x, and using H(0) = 0, we get the result [1].
 *
 *  I believe this result holds differentially for each value of y, so
 *  that in the case where the bending is not independent of y,
 *  the expression (V(x,0) - V(x,h)) / h goes over to Vy(x,y).  Then
 *
 *     H(x,y) = Integral(0,x) (Vyx(x,y) dx)         [3]
 *
 *  where Vyx() is the partial derivative of V w/rt both x and y.
 *
 *  It would be nice if there were a simple mathematical relation between
 *  the horizontal and vertical disparities for the situation
 *  where the paper bends without stretching or kinking.
 *  I had hoped to get a relation between H and V, such as
 *  Hx(x,y) ~ Vy(x,y), which would imply that H and V are real
 *  and imaginary parts of a complex potential, each of which
 *  satisfy the laplace equation.  But then the gradients of the
 *  two potentials would be normal, and that does not appear to be the case.
 *  Thus, the questions of proving the relations above (for small bending),
 *  or finding a simpler relation between H and V than those equations,
 *  remain open.  So far, we have only used [1] for the horizontal
 *  disparity H(x).
 *
 *  In the version of the code that follows, we first use text lines
 *  to find V(x,y).  Then, we try to compute H(x,y) that will align
 *  the text vertically on the left and right margins.  This is not
 *  always possible -- sometimes the right margin is not right justified.
 *  By default, we don't require the horizontal disparity to have a
 *  valid page model for dewarping a page, but this requirement can
 *  be forced using dewarpaUseFullModel().
 *
 *  As described above, one can add a y-independent component of
 *  the horizontal disparity H(x) to counter the foreshortening
 *  effect due to the bending of the page near the binding.
 *  This requires widening the image on the side near the binding,
 *  and we do not provide this option here.  However, we do provide
 *  a function that will generate this disparity field:
 *       fpixExtraHorizDisparity()
 *
 *  Here is the basic outline for building the disparity arrays.
 *
 *  (1) Find lines going approximately through the center of the
 *      text in each text line.  Accept only lines that are
 *      close in length to the longest line.
 *  (2) Use these lines to generate a regular and highly subsampled
 *      vertical disparity field V(x,y).
 *  (3) Interpolate this to generate a full resolution vertical
 *      disparity field.
 *  (4) For lines that are sufficiently long, assume they are approximately
 *      left and right-justified, and construct a highly subsampled
 *      horizontal disparity field H(x,y) that will bring them into alignment.
 *  (5) Interpolate this to generate a full resolution horizontal
 *      disparity field.
 *  (6) Apply the vertical dewarping, followed by the horizontal dewarping.
 *
 *  Step (1) is clearly described by the code in pixGetTextlineCenters().
 *
 *  Steps (2) and (3) follow directly from the data in step (1),
 *  and constitute the bulk of the work done in dewarpBuildPageModel().
 *  Virtually all the noise in the data is smoothed out by doing
 *  least-square quadratic fits, first horizontally to the data
 *  points representing the text line centers, and then vertically.
 *  The trick is to sample these lines on a regular grid.
 *  First each horizontal line is sampled at equally spaced
 *  intervals horizontally.  We thus get a set of points,
 *  one in each line, that are vertically aligned, and
 *  the data we represent is the vertical distance of each point
 *  from the min or max value on the curve, depending on the
 *  sign of the curvature component.  Each of these vertically
 *  aligned sets of points constitutes a sampled vertical disparity,
 *  and we do a LS quartic fit to each of them, followed by
 *  vertical sampling at regular intervals.  We now have a subsampled
 *  grid of points, all equally spaced, giving at each point the local
 *  vertical disparity.  Finally, the full resolution vertical disparity
 *  is formed by interpolation.  All the least square fits do a
 *  great job of smoothing everything out, as can be observed by
 *  the contour maps that are generated for the vertical disparity field.
 *
 *  Steps (4) through (6) again use the line data in step (1).
 *  By default, we do separate quadratic fits to the left and right
 *  line edges.  There is also the option to do linear fits to the
 *  line edges, which typically does not give as good a fit, but is
 *  safer for some pages that have text in the margins, or have multiple
 *  columns of text with a large space between the columns.  There is
 *  an option, which is the default, to check for multiple columns and
 *  if found to skip dewarping based on the line edges -- we compute but
 *  do not use the horizontal disparity array.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size); /* Parameter values used in dewarpaCreate() */ static const l_int32 InitialPtrArraySize = 20; /* n'import quoi */ static const l_int32 MaxPtrArraySize = 10000; static const l_int32 DefaultArraySampling = 30; static const l_int32 MinArraySampling = 8; static const l_int32 DefaultMinLines = 15; static const l_int32 MinMinLines = 4; static const l_int32 DefaultMaxRefDist = 16; static const l_int32 DefaultUseBoth = TRUE; static const l_int32 DefaultCheckColumns = TRUE; /* Parameter values used in dewarpaSetCurvatures() */ static const l_int32 DefaultMaxLineCurv = 150; static const l_int32 DefaultMinDiffLineCurv = 0; static const l_int32 DefaultMaxDiffLineCurv = 170; static const l_int32 DefaultMaxEdgeCurv = 50; static const l_int32 DefaultMaxDiffEdgeCurv = 40; static const l_int32 DefaultMaxEdgeSlope = 80; /*----------------------------------------------------------------------* * Create/destroy Dewarp * *----------------------------------------------------------------------*/ /*! * \brief dewarpCreate() * * \param[in] pixs 1 bpp * \param[in] pageno page number * \return dew or NULL on error * *
 * Notes:
 *      (1) The input pixs is either full resolution or 2x reduced.
 *      (2) The page number is typically 0-based.  If scanned from a book,
 *          the even pages are usually on the left.  Disparity arrays
 *          built for even pages should only be applied to even pages.
 * 
*/ L_DEWARP * dewarpCreate(PIX *pixs, l_int32 pageno) { L_DEWARP *dew; if (!pixs) return (L_DEWARP *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (L_DEWARP *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); dew->pixs = pixClone(pixs); dew->pageno = pageno; dew->w = pixGetWidth(pixs); dew->h = pixGetHeight(pixs); return dew; } /*! * \brief dewarpCreateRef() * * \param[in] pageno this page number * \param[in] refpage page number of dewarp disparity arrays to be used * \return dew or NULL on error * *
 * Notes:
 *      (1) This specifies which dewarp struct should be used for
 *          the given page.  It is placed in dewarpa for pages
 *          for which no model can be built.
 *      (2) This page and the reference page have the same parity and
 *          the reference page is the closest page with a disparity model
 *          to this page.
 * 
*/ L_DEWARP * dewarpCreateRef(l_int32 pageno, l_int32 refpage) { L_DEWARP *dew; dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); dew->pageno = pageno; dew->hasref = 1; dew->refpage = refpage; return dew; } /*! * \brief dewarpDestroy() * * \param[in,out] pdew will be set to null before returning * \return void */ void dewarpDestroy(L_DEWARP **pdew) { L_DEWARP *dew; if (pdew == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((dew = *pdew) == NULL) return; pixDestroy(&dew->pixs); fpixDestroy(&dew->sampvdispar); fpixDestroy(&dew->samphdispar); fpixDestroy(&dew->sampydispar); fpixDestroy(&dew->fullvdispar); fpixDestroy(&dew->fullhdispar); fpixDestroy(&dew->fullydispar); numaDestroy(&dew->namidys); numaDestroy(&dew->nacurves); LEPT_FREE(dew); *pdew = NULL; } /*----------------------------------------------------------------------* * Create/destroy Dewarpa * *----------------------------------------------------------------------*/ /*! * \brief dewarpaCreate() * * \param[in] nptrs number of dewarp page ptrs; typ. the number of pages * \param[in] sampling use 0 for default value; the minimum allowed is 8 * \param[in] redfactor of input images: 1 is full res; 2 is 2x reduced * \param[in] minlines minimum number of lines to accept; use 0 for default * \param[in] maxdist for locating reference disparity; use -1 for default * \return dewa or NULL on error * *
 * Notes:
 *      (1) The sampling, minlines and maxdist parameters will be
 *          applied to all images.
 *      (2) The sampling factor is used for generating the disparity arrays
 *          from the input image.  For 2x reduced input, use a sampling
 *          factor that is half the sampling you want on the full resolution
 *          images.
 *      (3) Use %redfactor = 1 for full resolution; 2 for 2x reduction.
 *          All input images must be at one of these two resolutions.
 *      (4) %minlines is the minimum number of nearly full-length lines
 *          required to generate a vertical disparity array.  The default
 *          number is 15.  Use a smaller number to accept a questionable
 *          array, but not smaller than 4.
 *      (5) When a model can't be built for a page, it looks up to %maxdist
 *          in either direction for a valid model with the same page parity.
 *          Use -1 for the default value of %maxdist; use 0 to avoid using
 *          a ref model.
 *      (6) The ptr array is expanded as necessary to accommodate page images.
 * 
*/ L_DEWARPA * dewarpaCreate(l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist) { L_DEWARPA *dewa; if (nptrs <= 0) nptrs = InitialPtrArraySize; if (nptrs > MaxPtrArraySize) return (L_DEWARPA *)ERROR_PTR("too many pages", __func__, NULL); if (redfactor != 1 && redfactor != 2) return (L_DEWARPA *)ERROR_PTR("redfactor not in {1,2}", __func__, NULL); if (sampling == 0) { sampling = DefaultArraySampling; } else if (sampling < MinArraySampling) { L_WARNING("sampling too small; setting to %d\n", __func__, MinArraySampling); sampling = MinArraySampling; } if (minlines == 0) { minlines = DefaultMinLines; } else if (minlines < MinMinLines) { L_WARNING("minlines too small; setting to %d\n", __func__, MinMinLines); minlines = DefaultMinLines; } if (maxdist < 0) maxdist = DefaultMaxRefDist; dewa = (L_DEWARPA *)LEPT_CALLOC(1, sizeof(L_DEWARPA)); dewa->dewarp = (L_DEWARP **)LEPT_CALLOC(nptrs, sizeof(L_DEWARPA *)); dewa->dewarpcache = (L_DEWARP **)LEPT_CALLOC(nptrs, sizeof(L_DEWARPA *)); if (!dewa->dewarp || !dewa->dewarpcache) { dewarpaDestroy(&dewa); return (L_DEWARPA *)ERROR_PTR("dewarp ptrs not made", __func__, NULL); } dewa->nalloc = nptrs; dewa->sampling = sampling; dewa->redfactor = redfactor; dewa->minlines = minlines; dewa->maxdist = maxdist; dewa->max_linecurv = DefaultMaxLineCurv; dewa->min_diff_linecurv = DefaultMinDiffLineCurv; dewa->max_diff_linecurv = DefaultMaxDiffLineCurv; dewa->max_edgeslope = DefaultMaxEdgeSlope; dewa->max_edgecurv = DefaultMaxEdgeCurv; dewa->max_diff_edgecurv = DefaultMaxDiffEdgeCurv; dewa->check_columns = DefaultCheckColumns; dewa->useboth = DefaultUseBoth; return dewa; } /*! * \brief dewarpaCreateFromPixacomp() * * \param[in] pixac pixacomp of G4, 1 bpp images; with 1x1x1 placeholders * \param[in] useboth 0 for only vert disparity; 1 for both vert and horiz * \param[in] sampling use -1 or 0 for default value; otherwise minimum of 5 * \param[in] minlines minimum number of lines to accept; e.g., 10 * \param[in] maxdist for locating reference disparity; use -1 for default * \return dewa or NULL on error * *
 * Notes:
 *      (1) The returned dewa has disparity arrays calculated and
 *          is ready for serialization or for use in dewarping.
 *      (2) The sampling, minlines and maxdist parameters are
 *          applied to all images.  See notes in dewarpaCreate() for details.
 *      (3) The pixac is full.  Placeholders, if any, are w=h=d=1 images,
 *          and the real input images are 1 bpp at full resolution.
 *          They are assumed to be cropped to the actual page regions,
 *          and may be arbitrarily sparse in the array.
 *      (4) The output dewarpa is indexed by the page number.
 *          The offset in the pixac gives the mapping between the
 *          array index in the pixac and the page number.
 *      (5) This adds the ref page models.
 *      (6) This can be used to make models for any desired set of pages.
 *          The direct models are only made for pages with images in
 *          the pixacomp; the ref models are made for pages of the
 *          same parity within %maxdist of the nearest direct model.
 * 
*/ L_DEWARPA * dewarpaCreateFromPixacomp(PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist) { l_int32 i, nptrs, pageno; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pixt; if (!pixac) return (L_DEWARPA *)ERROR_PTR("pixac not defined", __func__, NULL); nptrs = pixacompGetCount(pixac); if ((dewa = dewarpaCreate(pixacompGetOffset(pixac) + nptrs, sampling, 1, minlines, maxdist)) == NULL) return (L_DEWARPA *)ERROR_PTR("dewa not made", __func__, NULL); dewarpaUseBothArrays(dewa, useboth); for (i = 0; i < nptrs; i++) { pageno = pixacompGetOffset(pixac) + i; /* index into pixacomp */ pixt = pixacompGetPix(pixac, pageno); if (pixt && (pixGetWidth(pixt) > 1)) { dew = dewarpCreate(pixt, pageno); pixDestroy(&pixt); if (!dew) { ERROR_INT("unable to make dew!", __func__, 1); continue; } /* Insert into dewa for this page */ dewarpaInsertDewarp(dewa, dew); /* Build disparity arrays for this page */ dewarpBuildPageModel(dew, NULL); if (!dew->vsuccess) { /* will need to use model from nearby page */ dewarpaDestroyDewarp(dewa, pageno); L_ERROR("unable to build model for page %d\n", __func__, i); continue; } /* Remove all extraneous data */ dewarpMinimize(dew); } pixDestroy(&pixt); } dewarpaInsertRefModels(dewa, 0, 0); return dewa; } /*! * \brief dewarpaDestroy() * * \param[in,out] pdewa will be set to null before returning * \return void */ void dewarpaDestroy(L_DEWARPA **pdewa) { l_int32 i; L_DEWARP *dew; L_DEWARPA *dewa; if (pdewa == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((dewa = *pdewa) == NULL) return; for (i = 0; i < dewa->nalloc; i++) { if ((dew = dewa->dewarp[i]) != NULL) dewarpDestroy(&dew); if ((dew = dewa->dewarpcache[i]) != NULL) dewarpDestroy(&dew); } numaDestroy(&dewa->namodels); numaDestroy(&dewa->napages); LEPT_FREE(dewa->dewarp); LEPT_FREE(dewa->dewarpcache); LEPT_FREE(dewa); *pdewa = NULL; } /*! * \brief dewarpaDestroyDewarp() * * \param[in] dewa * \param[in] pageno of dew to be destroyed * \return 0 if OK, 1 on error */ l_ok dewarpaDestroyDewarp(L_DEWARPA *dewa, l_int32 pageno) { L_DEWARP *dew; if (!dewa) return ERROR_INT("dewa or dew not defined", __func__, 1); if (pageno < 0 || pageno > dewa->maxpage) return ERROR_INT("page out of bounds", __func__, 1); if ((dew = dewa->dewarp[pageno]) == NULL) return ERROR_INT("dew not defined", __func__, 1); dewarpDestroy(&dew); dewa->dewarp[pageno] = NULL; return 0; } /*----------------------------------------------------------------------* * Dewarpa insertion/extraction * *----------------------------------------------------------------------*/ /*! * \brief dewarpaInsertDewarp() * * \param[in] dewa * \param[in] dew to be added * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This inserts the dewarp into the array, which now owns it.
 *          It also keeps track of the largest page number stored.
 *          It must be done before the disparity model is built.
 *      (2) Note that this differs from the usual method of filling out
 *          arrays in leptonica, where the arrays are compact and
 *          new elements are typically added to the end.  Here,
 *          the dewarp can be added anywhere, even beyond the initial
 *          allocation.
 * 
*/ l_ok dewarpaInsertDewarp(L_DEWARPA *dewa, L_DEWARP *dew) { l_int32 pageno, n, newsize; L_DEWARP *prevdew; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (!dew) return ERROR_INT("dew not defined", __func__, 1); dew->dewa = dewa; pageno = dew->pageno; if (pageno > MaxPtrArraySize) return ERROR_INT("too many pages", __func__, 1); if (pageno > dewa->maxpage) dewa->maxpage = pageno; dewa->modelsready = 0; /* force re-evaluation at application time */ /* Extend ptr array if necessary */ n = dewa->nalloc; newsize = n; if (pageno >= 2 * n) newsize = 2 * pageno; else if (pageno >= n) newsize = 2 * n; if (newsize > n) { if (dewarpaExtendArraysToSize(dewa, newsize)) return ERROR_INT("extension failed", __func__, 1); } if ((prevdew = dewarpaGetDewarp(dewa, pageno)) != NULL) dewarpDestroy(&prevdew); dewa->dewarp[pageno] = dew; dew->sampling = dewa->sampling; dew->redfactor = dewa->redfactor; dew->minlines = dewa->minlines; /* Get the dimensions of the sampled array. This will be * stored in an fpix, and the input resolution version is * guaranteed to be larger than pixs. However, if you * want to apply the disparity to an image with a width * w > nx * s - 2 * s + 2 * you will need to extend the input res fpix. * And similarly for h. */ dew->nx = (dew->w + 2 * dew->sampling - 2) / dew->sampling; dew->ny = (dew->h + 2 * dew->sampling - 2) / dew->sampling; return 0; } /*! * \brief dewarpaExtendArraysToSize() * * \param[in] dewa * \param[in] size new size of dewarpa array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs main and cache dewarpa ptr arrays to %size.
 * 
*/ static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size) { if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (size > dewa->nalloc) { if ((dewa->dewarp = (L_DEWARP **)reallocNew((void **)&dewa->dewarp, sizeof(L_DEWARP *) * dewa->nalloc, size * sizeof(L_DEWARP *))) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); if ((dewa->dewarpcache = (L_DEWARP **)reallocNew((void **)&dewa->dewarpcache, sizeof(L_DEWARP *) * dewa->nalloc, size * sizeof(L_DEWARP *))) == NULL) return ERROR_INT("new ptr cache array not returned", __func__, 1); dewa->nalloc = size; } return 0; } /*! * \brief dewarpaGetDewarp() * * \param[in] dewa populated with dewarp structs for pages * \param[in] index into dewa: this is the pageno * \return dew handle; still owned by dewa, or NULL on error */ L_DEWARP * dewarpaGetDewarp(L_DEWARPA *dewa, l_int32 index) { if (!dewa) return (L_DEWARP *)ERROR_PTR("dewa not defined", __func__, NULL); if (index < 0 || index > dewa->maxpage) { L_ERROR("index = %d is invalid; max index = %d\n", __func__, index, dewa->maxpage); return NULL; } return dewa->dewarp[index]; } /*----------------------------------------------------------------------* * Setting parameters to control rendering from the model * *----------------------------------------------------------------------*/ /*! * \brief dewarpaSetCurvatures() * * \param[in] dewa * \param[in] max_linecurv -1 for default * \param[in] min_diff_linecurv -1 for default; 0 to accept all models * \param[in] max_diff_linecurv -1 for default * \param[in] max_edgecurv -1 for default; 0 to fit a line * \param[in] max_diff_edgecurv -1 for default * \param[in] max_edgeslope -1 for default * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Approximating the line by a quadratic, the coefficient
 *          of the quadratic term is the curvature, and distance
 *          units are in pixels (of course).  Curvatures are very
 *          small, so we multiply by 10^6 and express the constraints
 *          on the model curvatures in micro-units.  The slope parameter
 *          is multiplied by 10^3 and expressed in milli-units.
 *      (2) This sets five curvature thresholds and a slope threshold
 *          for dewarping to take place.  Use -1 for default values.
 *          * max_linecurv: the maximum absolute value of the vertical
 *            disparity line curvatures.
 *          * min_diff_linecurv: the minimum absolute value of the
 *            largest difference in vertical disparity line curvatures.
 *            Use a value of 0 to accept all models.
 *          * max_diff_linecurv: the maximum absolute value of the largest
 *            difference in vertical disparity line curvatures.
 *          * max_edgecurv: the maximum absolute value of the left and right
 *            edge curvature for the horizontal disparity.  Use a value of
 *            zero to fit a straight line (zero curvature).
 *          * max_diff_edgecurv: the maximum absolute value of the difference
 *            between left and right edge curvature for the horizontal
 *            disparity. This value is ignored if max_edgecurve = 0.
 *          * max_edgeslope: the maximum slope coefficient for left and
 *            right line edges.
 *      (3) An image with a line curvature less than about 0.00001
 *          has fairly straight textlines.  This is 10 micro-units.
 *      (4) For example, if %max_linecurv == 100, this would prevent dewarping
 *          if any of the lines has a curvature exceeding 100 micro-units.
 *          A model having maximum line curvature larger than about 150
 *          micro-units should probably not be used.
 *      (5) A model having a left or right edge curvature larger than
 *          about 50 micro-units should probably not be used.  Set the
 *          parameter max_edgecurv = 0 for a linear LSF.
 * 
*/ l_ok dewarpaSetCurvatures(L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv, l_int32 max_edgeslope) { if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (max_linecurv == -1) dewa->max_linecurv = DefaultMaxLineCurv; else dewa->max_linecurv = L_ABS(max_linecurv); if (min_diff_linecurv == -1) dewa->min_diff_linecurv = DefaultMinDiffLineCurv; else dewa->min_diff_linecurv = L_ABS(min_diff_linecurv); if (max_diff_linecurv == -1) dewa->max_diff_linecurv = DefaultMaxDiffLineCurv; else dewa->max_diff_linecurv = L_ABS(max_diff_linecurv); if (max_edgecurv == -1) dewa->max_edgecurv = DefaultMaxEdgeCurv; else dewa->max_edgecurv = L_ABS(max_edgecurv); if (max_diff_edgecurv == -1) dewa->max_diff_edgecurv = DefaultMaxDiffEdgeCurv; else dewa->max_diff_edgecurv = L_ABS(max_diff_edgecurv); if (max_edgeslope == -1) dewa->max_edgeslope = DefaultMaxEdgeSlope; else dewa->max_edgeslope = L_ABS(max_edgeslope); dewa->modelsready = 0; /* force validation */ return 0; } /*! * \brief dewarpaUseBothArrays() * * \param[in] dewa * \param[in] useboth 0 for false, 1 for true * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This sets the useboth field.  If set, this will attempt
 *          to apply both vertical and horizontal disparity arrays.
 *          Note that a model with only a vertical disparity array will
 *          always be valid.
 * 
*/ l_ok dewarpaUseBothArrays(L_DEWARPA *dewa, l_int32 useboth) { if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); dewa->useboth = useboth; dewa->modelsready = 0; /* force validation */ return 0; } /*! * \brief dewarpaSetCheckColumns() * * \param[in] dewa * \param[in] check_columns 0 for false, 1 for true * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This sets the 'check_columns" field.  If set, and if
 *          'useboth' is set, this will count the number of text
 *          columns.  If the number is larger than 1, this will
 *          prevent the application of horizontal disparity arrays
 *          if they exist.
 *      (2) The check_columns field is set to TRUE by default.
 *          For horizontal disparity correction to take place on a
 *          single column of text, you must have:
 *           - a valid horizontal disparity array
 *           - useboth = 1 (TRUE)
 *          If there are multiple columns, in addition you need
 *           - check_columns = 0 (FALSE)
 *
 * 
*/ l_ok dewarpaSetCheckColumns(L_DEWARPA *dewa, l_int32 check_columns) { if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); dewa->check_columns = check_columns; return 0; } /*! * \brief dewarpaSetMaxDistance() * * \param[in] dewa * \param[in] maxdist for using ref models * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This sets the maxdist field.
 * 
*/ l_ok dewarpaSetMaxDistance(L_DEWARPA *dewa, l_int32 maxdist) { if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); dewa->maxdist = maxdist; dewa->modelsready = 0; /* force validation */ return 0; } /*----------------------------------------------------------------------* * Dewarp serialized I/O * *----------------------------------------------------------------------*/ /*! * \brief dewarpRead() * * \param[in] filename * \return dew, or NULL on error */ L_DEWARP * dewarpRead(const char *filename) { FILE *fp; L_DEWARP *dew; if (!filename) return (L_DEWARP *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DEWARP *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); if ((dew = dewarpReadStream(fp)) == NULL) { fclose(fp); return (L_DEWARP *)ERROR_PTR_1("dew not read", filename, __func__, NULL); } fclose(fp); return dew; } /*! * \brief dewarpReadStream() * * \param[in] fp file stream * \return dew dewarp, or NULL on error * *
 * Notes:
 *      (1) The dewarp struct is stored in minimized format, with only
 *          subsampled disparity arrays.
 *      (2) The sampling and extra horizontal disparity parameters are
 *          stored here.  During generation of the dewarp struct, they
 *          are passed in from the dewarpa.  In readback, it is assumed
 *          that they are (a) the same for each page and (b) the same
 *          as the values used to create the dewarpa.
 * 
*/ L_DEWARP * dewarpReadStream(FILE *fp) { l_int32 version, sampling, redfactor, minlines, pageno, hasref, refpage; l_int32 w, h, nx, ny, vdispar, hdispar, nlines; l_int32 mincurv, maxcurv, leftslope, rightslope, leftcurv, rightcurv; L_DEWARP *dew; FPIX *fpixv = NULL, *fpixh = NULL; if (!fp) return (L_DEWARP *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nDewarp Version %d\n", &version) != 1) return (L_DEWARP *)ERROR_PTR("not a dewarp file", __func__, NULL); if (version != DEWARP_VERSION_NUMBER) return (L_DEWARP *)ERROR_PTR("invalid dewarp version", __func__, NULL); if (fscanf(fp, "pageno = %d\n", &pageno) != 1) return (L_DEWARP *)ERROR_PTR("read fail for pageno", __func__, NULL); if (fscanf(fp, "hasref = %d, refpage = %d\n", &hasref, &refpage) != 2) return (L_DEWARP *)ERROR_PTR("read fail for hasref, refpage", __func__, NULL); if (fscanf(fp, "sampling = %d, redfactor = %d\n", &sampling, &redfactor) != 2) return (L_DEWARP *)ERROR_PTR("read fail for sampling/redfactor", __func__, NULL); if (fscanf(fp, "nlines = %d, minlines = %d\n", &nlines, &minlines) != 2) return (L_DEWARP *)ERROR_PTR("read fail for nlines/minlines", __func__, NULL); if (fscanf(fp, "w = %d, h = %d\n", &w, &h) != 2) return (L_DEWARP *)ERROR_PTR("read fail for w, h", __func__, NULL); if (fscanf(fp, "nx = %d, ny = %d\n", &nx, &ny) != 2) return (L_DEWARP *)ERROR_PTR("read fail for nx, ny", __func__, NULL); if (fscanf(fp, "vert_dispar = %d, horiz_dispar = %d\n", &vdispar, &hdispar) != 2) return (L_DEWARP *)ERROR_PTR("read fail for flags", __func__, NULL); if (vdispar) { if (fscanf(fp, "min line curvature = %d, max line curvature = %d\n", &mincurv, &maxcurv) != 2) return (L_DEWARP *)ERROR_PTR("read fail for mincurv & maxcurv", __func__, NULL); } if (hdispar) { if (fscanf(fp, "left edge slope = %d, right edge slope = %d\n", &leftslope, &rightslope) != 2) return (L_DEWARP *)ERROR_PTR("read fail for leftslope & rightslope", __func__, NULL); if (fscanf(fp, "left edge curvature = %d, right edge curvature = %d\n", &leftcurv, &rightcurv) != 2) return (L_DEWARP *)ERROR_PTR("read fail for leftcurv & rightcurv", __func__, NULL); } if (vdispar) { if ((fpixv = fpixReadStream(fp)) == NULL) return (L_DEWARP *)ERROR_PTR("read fail for vdispar", __func__, NULL); } if (hdispar) { if ((fpixh = fpixReadStream(fp)) == NULL) return (L_DEWARP *)ERROR_PTR("read fail for hdispar", __func__, NULL); } getc(fp); dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); dew->w = w; dew->h = h; dew->pageno = pageno; dew->sampling = sampling; dew->redfactor = redfactor; dew->minlines = minlines; dew->nlines = nlines; dew->hasref = hasref; dew->refpage = refpage; if (hasref == 0) /* any dew without a ref has an actual model */ dew->vsuccess = 1; dew->nx = nx; dew->ny = ny; if (vdispar) { dew->mincurv = mincurv; dew->maxcurv = maxcurv; dew->vsuccess = 1; dew->sampvdispar = fpixv; } if (hdispar) { dew->leftslope = leftslope; dew->rightslope = rightslope; dew->leftcurv = leftcurv; dew->rightcurv = rightcurv; dew->hsuccess = 1; dew->samphdispar = fpixh; } return dew; } /*! * \brief dewarpReadMem() * * \param[in] data serialization of dewarp * \param[in] size of data in bytes * \return dew dewarp, or NULL on error */ L_DEWARP * dewarpReadMem(const l_uint8 *data, size_t size) { FILE *fp; L_DEWARP *dew; if (!data) return (L_DEWARP *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (L_DEWARP *)ERROR_PTR("stream not opened", __func__, NULL); dew = dewarpReadStream(fp); fclose(fp); if (!dew) L_ERROR("dew not read\n", __func__); return dew; } /*! * \brief dewarpWrite() * * \param[in] filename * \param[in] dew * \return 0 if OK, 1 on error */ l_ok dewarpWrite(const char *filename, L_DEWARP *dew) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!dew) return ERROR_INT("dew not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = dewarpWriteStream(fp, dew); fclose(fp); if (ret) return ERROR_INT_1("dew not written to stream", filename, __func__, 1); return 0; } /*! * \brief dewarpWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] dew * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This should not be written if there is no sampled
 *          vertical disparity array, which means that no model has
 *          been built for this page.
 * 
*/ l_ok dewarpWriteStream(FILE *fp, L_DEWARP *dew) { l_int32 vdispar, hdispar; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!dew) return ERROR_INT("dew not defined", __func__, 1); fprintf(fp, "\nDewarp Version %d\n", DEWARP_VERSION_NUMBER); fprintf(fp, "pageno = %d\n", dew->pageno); fprintf(fp, "hasref = %d, refpage = %d\n", dew->hasref, dew->refpage); fprintf(fp, "sampling = %d, redfactor = %d\n", dew->sampling, dew->redfactor); fprintf(fp, "nlines = %d, minlines = %d\n", dew->nlines, dew->minlines); fprintf(fp, "w = %d, h = %d\n", dew->w, dew->h); fprintf(fp, "nx = %d, ny = %d\n", dew->nx, dew->ny); vdispar = (dew->sampvdispar) ? 1 : 0; hdispar = (dew->samphdispar) ? 1 : 0; fprintf(fp, "vert_dispar = %d, horiz_dispar = %d\n", vdispar, hdispar); if (vdispar) fprintf(fp, "min line curvature = %d, max line curvature = %d\n", dew->mincurv, dew->maxcurv); if (hdispar) { fprintf(fp, "left edge slope = %d, right edge slope = %d\n", dew->leftslope, dew->rightslope); fprintf(fp, "left edge curvature = %d, right edge curvature = %d\n", dew->leftcurv, dew->rightcurv); } if (vdispar) fpixWriteStream(fp, dew->sampvdispar); if (hdispar) fpixWriteStream(fp, dew->samphdispar); fprintf(fp, "\n"); if (!vdispar) L_WARNING("no disparity arrays!\n", __func__); return 0; } /*! * \brief dewarpWriteMem() * * \param[out] pdata data of serialized dewarp (not ascii) * \param[out] psize size of returned data * \param[in] dew * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a dewarp in memory and puts the result in a buffer.
 * 
*/ l_ok dewarpWriteMem(l_uint8 **pdata, size_t *psize, L_DEWARP *dew) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!dew) return ERROR_INT("dew not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = dewarpWriteStream(fp, dew); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = dewarpWriteStream(fp, dew); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*----------------------------------------------------------------------* * Dewarpa serialized I/O * *----------------------------------------------------------------------*/ /*! * \brief dewarpaRead() * * \param[in] filename * \return dewa, or NULL on error */ L_DEWARPA * dewarpaRead(const char *filename) { FILE *fp; L_DEWARPA *dewa; if (!filename) return (L_DEWARPA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DEWARPA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); if ((dewa = dewarpaReadStream(fp)) == NULL) { fclose(fp); return (L_DEWARPA *)ERROR_PTR_1("dewa not read", filename, __func__, NULL); } fclose(fp); return dewa; } /*! * \brief dewarpaReadStream() * * \param[in] fp file stream * \return dewa, or NULL on error * *
 * Notes:
 *      (1) The serialized dewarp contains a Numa that gives the
 *          (increasing) page number of the dewarp structs that are
 *          contained.
 *      (2) Reference pages are added in after readback.
 * 
*/ L_DEWARPA * dewarpaReadStream(FILE *fp) { l_int32 i, version, ndewarp, maxpage; l_int32 sampling, redfactor, minlines, maxdist, useboth; l_int32 max_linecurv, min_diff_linecurv, max_diff_linecurv; l_int32 max_edgeslope, max_edgecurv, max_diff_edgecurv; L_DEWARP *dew; L_DEWARPA *dewa; NUMA *namodels; if (!fp) return (L_DEWARPA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nDewarpa Version %d\n", &version) != 1) return (L_DEWARPA *)ERROR_PTR("not a dewarpa file", __func__, NULL); if (version != DEWARP_VERSION_NUMBER) return (L_DEWARPA *)ERROR_PTR("invalid dewarp version", __func__, NULL); if (fscanf(fp, "ndewarp = %d, maxpage = %d\n", &ndewarp, &maxpage) != 2) return (L_DEWARPA *)ERROR_PTR("read fail for maxpage+", __func__, NULL); if (ndewarp < 1) return (L_DEWARPA *)ERROR_PTR("pages not >= 1", __func__, NULL); if (ndewarp > MaxPtrArraySize) return (L_DEWARPA *)ERROR_PTR("too many pages", __func__, NULL); if (fscanf(fp, "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", &sampling, &redfactor, &minlines, &maxdist) != 4) return (L_DEWARPA *)ERROR_PTR("read fail for 4 params", __func__, NULL); if (fscanf(fp, "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", &max_linecurv, &min_diff_linecurv, &max_diff_linecurv) != 3) return (L_DEWARPA *)ERROR_PTR("read fail for linecurv", __func__, NULL); if (fscanf(fp, "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n", &max_edgeslope, &max_edgecurv, &max_diff_edgecurv) != 3) return (L_DEWARPA *)ERROR_PTR("read fail for edgecurv", __func__, NULL); if (fscanf(fp, "fullmodel = %d\n", &useboth) != 1) return (L_DEWARPA *)ERROR_PTR("read fail for useboth", __func__, NULL); dewa = dewarpaCreate(maxpage + 1, sampling, redfactor, minlines, maxdist); dewa->maxpage = maxpage; dewa->max_linecurv = max_linecurv; dewa->min_diff_linecurv = min_diff_linecurv; dewa->max_diff_linecurv = max_diff_linecurv; dewa->max_edgeslope = max_edgeslope; dewa->max_edgecurv = max_edgecurv; dewa->max_diff_edgecurv = max_diff_edgecurv; dewa->useboth = useboth; namodels = numaCreate(ndewarp); dewa->namodels = namodels; for (i = 0; i < ndewarp; i++) { if ((dew = dewarpReadStream(fp)) == NULL) { L_ERROR("read fail for dew[%d]\n", __func__, i); dewarpaDestroy(&dewa); return NULL; } dewarpaInsertDewarp(dewa, dew); numaAddNumber(namodels, dew->pageno); } /* Validate the models and insert reference models */ dewarpaInsertRefModels(dewa, 0, 0); return dewa; } /*! * \brief dewarpaReadMem() * * \param[in] data serialization of dewarpa * \param[in] size of data in bytes * \return dewa dewarpa, or NULL on error */ L_DEWARPA * dewarpaReadMem(const l_uint8 *data, size_t size) { FILE *fp; L_DEWARPA *dewa; if (!data) return (L_DEWARPA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (L_DEWARPA *)ERROR_PTR("stream not opened", __func__, NULL); dewa = dewarpaReadStream(fp); fclose(fp); if (!dewa) L_ERROR("dewa not read\n", __func__); return dewa; } /*! * \brief dewarpaWrite() * * \param[in] filename * \param[in] dewa * \return 0 if OK, 1 on error */ l_ok dewarpaWrite(const char *filename, L_DEWARPA *dewa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = dewarpaWriteStream(fp, dewa); fclose(fp); if (ret) return ERROR_INT_1("dewa not written to stream", filename, __func__, 1); return 0; } /*! * \brief dewarpaWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] dewa * \return 0 if OK, 1 on error */ l_ok dewarpaWriteStream(FILE *fp, L_DEWARPA *dewa) { l_int32 ndewarp, i, pageno; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); /* Generate the list of page numbers for which a model exists. * Note that no attempt is made to determine if the model is * valid, because that determination is associated with * using the model to remove the warping, which typically * can happen later, after all the models have been built. */ dewarpaListPages(dewa); if (!dewa->namodels) return ERROR_INT("dewa->namodels not made", __func__, 1); ndewarp = numaGetCount(dewa->namodels); /* with actual page models */ fprintf(fp, "\nDewarpa Version %d\n", DEWARP_VERSION_NUMBER); fprintf(fp, "ndewarp = %d, maxpage = %d\n", ndewarp, dewa->maxpage); fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", dewa->sampling, dewa->redfactor, dewa->minlines, dewa->maxdist); fprintf(fp, "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", dewa->max_linecurv, dewa->min_diff_linecurv, dewa->max_diff_linecurv); fprintf(fp, "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n", dewa->max_edgeslope, dewa->max_edgecurv, dewa->max_diff_edgecurv); fprintf(fp, "fullmodel = %d\n", dewa->useboth); for (i = 0; i < ndewarp; i++) { numaGetIValue(dewa->namodels, i, &pageno); dewarpWriteStream(fp, dewarpaGetDewarp(dewa, pageno)); } return 0; } /*! * \brief dewarpaWriteMem() * * \param[out] pdata data of serialized dewarpa (not ascii) * \param[out] psize size of returned data * \param[in] dewa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a dewarpa in memory and puts the result in a buffer.
 * 
*/ l_ok dewarpaWriteMem(l_uint8 **pdata, size_t *psize, L_DEWARPA *dewa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = dewarpaWriteStream(fp, dewa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = dewarpaWriteStream(fp, dewa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } leptonica-1.86.0/src/dewarp2.c000066400000000000000000002205001506303110300160520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dewarp2.c *
 *
 *    Build the page disparity model
 *
 *      Build basic page disparity model
 *          l_int32            dewarpBuildPageModel()
 *          l_int32            dewarpFindVertDisparity()
 *          l_int32            dewarpFindHorizDisparity()
 *          PTAA              *dewarpGetTextlineCenters()
 *          static PTA        *dewarpGetMeanVerticals()
 *          PTAA              *dewarpRemoveShortLines()
 *          static l_int32     dewarpGetLineEndPoints()
 *          static l_int32     dewarpFilterLineEndPoints()
 *          static PTA        *dewarpRemoveBadEndPoints()
 *          static l_int32     dewarpIsLineCoverageValid()
 *          static l_int32     dewarpLinearLSF()
 *          static l_int32     dewarpQuadraticLSF()
 *
 *      Build disparity model for slope near binding
 *          l_int32            dewarpFindHorizSlopeDisparity()
 *
 *      Build the line disparity model
 *          l_int32            dewarpBuildLineModel()
 *
 *      Query model status
 *          l_int32            dewarpaModelStatus()
 *
 *      Rendering helpers
 *          static l_int32     pixRenderMidYs()
 *          static l_int32     pixRenderHorizEndPoints
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static PTA *dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y); static l_int32 dewarpGetLineEndPoints(l_int32 h, PTAA *ptaa, PTA **pptal, PTA **pptar); static l_int32 dewarpFilterLineEndPoints(L_DEWARP *dew, PTA *ptal1, PTA *ptar1, PTA **pptal2, PTA **pptar2); static PTA *dewarpRemoveBadEndPoints(l_int32 w, PTA *ptas); static l_int32 dewarpIsLineCoverageValid(PTAA *ptaa2, l_int32 h, l_int32 *pntop, l_int32 *pnbot, l_int32 *pytop, l_int32 *pybot); static l_int32 dewarpLinearLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr); static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr); static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew); static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, l_uint32 color); #ifndef NO_CONSOLE_IO #define DEBUG_TEXTLINE_CENTERS 0 /* set this to 1 for debugging */ #define DEBUG_SHORT_LINES 0 /* ditto */ #else #define DEBUG_TEXTLINE_CENTERS 0 /* always must be 0 */ #define DEBUG_SHORT_LINES 0 /* ditto */ #endif /* !NO_CONSOLE_IO */ /* Special parameter values for reducing horizontal disparity */ static const l_float32 MinRatioLinesToHeight = 0.45f; static const l_int32 MinLinesForHoriz1 = 10; /* initially */ static const l_int32 MinLinesForHoriz2 = 3; /* after, in each half */ static const l_float32 AllowedWidthFract = 0.05f; /* no bigger */ /*----------------------------------------------------------------------* * Build basic page disparity model * *----------------------------------------------------------------------*/ /*! * \brief dewarpBuildPageModel() * * \param[in] dew * \param[in] debugfile use NULL to skip writing this * \return 0 if OK, 1 if unable to build the model or on error * *
 * Notes:
 *      (1) This is the basic function that builds the horizontal and
 *          vertical disparity arrays, which allow determination of the
 *          src pixel in the input image corresponding to each
 *          dest pixel in the dewarped image.
 *      (2) Sets vsuccess = 1 if the vertical disparity array builds.
 *          Always attempts to build the horizontal disparity array,
 *          even if it will not be requested (useboth == 0).
 *          Sets hsuccess = 1 if horizontal disparity builds.
 *      (3) The method is as follows:
 *          (a) Estimate the points along the centers of all the
 *              long textlines.  If there are too few lines, no
 *              disparity models are built.
 *          (b) From the vertical deviation of the lines, estimate
 *              the vertical disparity.
 *          (c) From the ends of the lines, estimate the horizontal
 *              disparity, assuming that the text is made of lines
 *              that are close to left and right justified.
 *          (d) One can also compute an additional contribution to the
 *              horizontal disparity, inferred from slopes of the top
 *              and bottom lines.  We do not do this.
 *      (4) In more detail for the vertical disparity:
 *          (a) Fit a LS quadratic to center locations along each line.
 *              This smooths the curves.
 *          (b) Sample each curve at a regular interval, find the y-value
 *              of the mid-point on each curve, and subtract the sampled
 *              curve value from this value.  This is the vertical
 *              disparity at sampled points along each curve.
 *          (c) Fit a LS quadratic to each set of vertically aligned
 *              disparity samples.  This smooths the disparity values
 *              in the vertical direction.  Then resample at the same
 *              regular interval.  We now have a regular grid of smoothed
 *              vertical disparity valuels.
 *      (5) Once the sampled vertical disparity array is found, it can be
 *          interpolated to get a full resolution vertical disparity map.
 *          This can be applied directly to the src image pixels
 *          to dewarp the image in the vertical direction, making
 *          all textlines horizontal.  Likewise, the horizontal
 *          disparity array is used to left- and right-align the
 *          longest textlines.
 * 
*/ l_ok dewarpBuildPageModel(L_DEWARP *dew, const char *debugfile) { l_int32 linecount, ntop, nbot, ytop, ybot, ret; PIX *pixs, *pix1, *pix2, *pix3; PTA *pta; PTAA *ptaa1, *ptaa2; if (!dew) return ERROR_INT("dew not defined", __func__, 1); dew->debug = (debugfile) ? 1 : 0; dew->vsuccess = dew->hsuccess = 0; pixs = dew->pixs; if (debugfile) { lept_rmdir("lept/dewmod"); /* erase previous images */ lept_mkdir("lept/dewmod"); pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); pixWriteDebug("/tmp/lept/dewmod/0010.png", pixs, IFF_PNG); } /* Make initial estimate of centers of textlines */ ptaa1 = dewarpGetTextlineCenters(pixs, debugfile || DEBUG_TEXTLINE_CENTERS); if (!ptaa1) { L_WARNING("textline centers not found; model not built\n", __func__); return 1; } if (debugfile) { pix1 = pixConvertTo32(pixs); pta = generatePtaFilledCircle(1); pix2 = pixGenerateFromPta(pta, 5, 5); pix3 = pixDisplayPtaaPattern(NULL, pix1, ptaa1, pix2, 2, 2); pixWriteDebug("/tmp/lept/dewmod/0020.png", pix3, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); ptaDestroy(&pta); } /* Remove all lines that are not at least 0.8 times the length * of the longest line. */ ptaa2 = dewarpRemoveShortLines(pixs, ptaa1, 0.8f, debugfile || DEBUG_SHORT_LINES); if (debugfile) { pix1 = pixConvertTo32(pixs); pta = generatePtaFilledCircle(1); pix2 = pixGenerateFromPta(pta, 5, 5); pix3 = pixDisplayPtaaPattern(NULL, pix1, ptaa2, pix2, 2, 2); pixWriteDebug("/tmp/lept/dewmod/0030.png", pix3, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); ptaDestroy(&pta); } ptaaDestroy(&ptaa1); /* Verify that there are sufficient "long" lines */ linecount = ptaaGetCount(ptaa2); if (linecount < dew->minlines) { ptaaDestroy(&ptaa2); L_WARNING("linecount %d < min req'd number of lines (%d) for model\n", __func__, linecount, dew->minlines); return 1; } /* Verify that the lines have a reasonable coverage of the * vertical extent of the page. */ if (dewarpIsLineCoverageValid(ptaa2, pixGetHeight(pixs), &ntop, &nbot, &ytop, &ybot) == FALSE) { ptaaDestroy(&ptaa2); L_WARNING("invalid line coverage: ntop = %d, nbot = %d;" " spanning [%d ... %d] in height %d\n", __func__, ntop, nbot, ytop, ybot, pixGetHeight(pixs)); return 1; } /* Get the sampled vertical disparity from the textline centers. * The disparity array will push pixels vertically so that each * textline is flat and centered at the y-position of the mid-point. */ if (dewarpFindVertDisparity(dew, ptaa2, 0) != 0) { L_WARNING("vertical disparity not built\n", __func__); ptaaDestroy(&ptaa2); return 1; } /* Get the sampled horizontal disparity from the left and right * edges of the text. The disparity array will expand the image * linearly outward to align the text edges vertically. * Do this even if useboth == 0; we still calculate it even * if we don't plan to use it. */ if ((ret = dewarpFindHorizDisparity(dew, ptaa2)) == 0) L_INFO("hsuccess = 1\n", __func__); /* Debug output */ if (debugfile) { dewarpPopulateFullRes(dew, NULL, 0, 0); pix1 = fpixRenderContours(dew->fullvdispar, 3.0f, 0.15f); pixWriteDebug("/tmp/lept/dewmod/0060.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); if (ret == 0) { pix1 = fpixRenderContours(dew->fullhdispar, 3.0f, 0.15f); pixWriteDebug("/tmp/lept/dewmod/0070.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } convertFilesToPdf("/tmp/lept/dewmod", NULL, 135, 1.0, 0, 0, "Dewarp Build Model", debugfile); lept_stderr("pdf file: %s\n", debugfile); } ptaaDestroy(&ptaa2); return 0; } /*! * \brief dewarpFindVertDisparity() * * \param[in] dew * \param[in] ptaa unsmoothed lines, not vertically ordered * \param[in] rotflag 0 if using dew->pixs; 1 if rotated by 90 degrees cw * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This starts with points along the centers of textlines.
 *          It does quadratic fitting (and smoothing), first along the
 *          lines and then in the vertical direction, to generate
 *          the sampled vertical disparity map.  This can then be
 *          interpolated to full resolution and used to remove
 *          the vertical line warping.
 *      (2) Use %rotflag == 1 if you are dewarping vertical lines, as
 *          is done in dewarpBuildLineModel().  The usual case is for
 *          %rotflag == 0.
 *      (3) Note that this builds a vertical disparity model (VDM), but
 *          does not check it against constraints for validity.
 *          Constraint checking is done after building the models,
 *          and before inserting reference models.
 *      (4) This sets the vsuccess flag to 1 on success.
 *      (5) Pix debug output goes to /tmp/dewvert/ for collection into
 *          a pdf.  Non-pix debug output goes to /tmp.
 * 
*/ l_ok dewarpFindVertDisparity(L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag) { l_int32 i, j, nlines, npts, nx, ny, sampling; l_float32 c0, c1, c2, x, y, midy, val, medval, meddev, minval, maxval; l_float32 *famidys; NUMA *nax, *nafit, *nacurve0, *nacurve1, *nacurves; NUMA *namidy, *namidys, *namidysi; PIX *pix1, *pix2, *pixcirc, *pixdb; PTA *pta, *ptad, *ptacirc; PTAA *ptaa0, *ptaa1, *ptaa2, *ptaa3, *ptaa4, *ptaa5, *ptaat; FPIX *fpix; if (!dew) return ERROR_INT("dew not defined", __func__, 1); dew->vsuccess = 0; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (dew->debug) L_INFO("finding vertical disparity\n", __func__); /* Do quadratic fit to smooth each line. A single quadratic * over the entire width of the line appears to be sufficient. * Quartics tend to overfit to noise. Each line is thus * represented by three coefficients: y(x) = c2 * x^2 + c1 * x + c0. * Using the coefficients, sample each fitted curve uniformly * across the full width of the image. The result is in ptaa0. */ sampling = dew->sampling; nx = (rotflag) ? dew->ny : dew->nx; ny = (rotflag) ? dew->nx : dew->ny; nlines = ptaaGetCount(ptaa); dew->nlines = nlines; ptaa0 = ptaaCreate(nlines); nacurve0 = numaCreate(nlines); /* stores curvature coeff c2 */ pixdb = (rotflag) ? pixRotateOrth(dew->pixs, 1) : pixClone(dew->pixs); for (i = 0; i < nlines; i++) { /* for each line */ pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); numaAddNumber(nacurve0, c2); ptad = ptaCreate(nx); for (j = 0; j < nx; j++) { /* uniformly sampled in x */ x = j * sampling; applyQuadraticFit(c2, c1, c0, x, &y); ptaAddPt(ptad, x, y); } ptaaAddPta(ptaa0, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { lept_mkdir("lept/dewarp"); lept_mkdir("lept/dewdebug"); lept_mkdir("lept/dewmod"); ptaat = ptaaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit); ptad = ptaCreateFromNuma(nax, nafit); ptaaAddPta(ptaat, ptad, L_INSERT); ptaDestroy(&pta); numaDestroy(&nax); numaDestroy(&nafit); } pix1 = pixConvertTo32(pixdb); pta = generatePtaFilledCircle(1); pixcirc = pixGenerateFromPta(pta, 5, 5); pix2 = pixDisplayPtaaPattern(NULL, pix1, ptaat, pixcirc, 2, 2); pixWriteDebug("/tmp/lept/dewmod/0041.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); ptaDestroy(&pta); pixDestroy(&pixcirc); ptaaDestroy(&ptaat); } /* Remove lines with outlier curvatures. * Note that this is just looking for internal consistency in * the line curvatures. It is not rejecting lines based on * the magnitude of the curvature. That is done when constraints * are applied for valid models. */ numaGetMedianDevFromMedian(nacurve0, &medval, &meddev); L_INFO("\nPage %d\n", __func__, dew->pageno); L_INFO("Pass 1: Curvature: medval = %f, meddev = %f\n", __func__, medval, meddev); ptaa1 = ptaaCreate(nlines); nacurve1 = numaCreate(nlines); for (i = 0; i < nlines; i++) { /* for each line */ numaGetFValue(nacurve0, i, &val); if (L_ABS(val - medval) > 7.0 * meddev) /* TODO: reduce to ~ 3.0 */ continue; pta = ptaaGetPta(ptaa0, i, L_CLONE); ptaaAddPta(ptaa1, pta, L_INSERT); numaAddNumber(nacurve1, val); } nlines = ptaaGetCount(ptaa1); numaDestroy(&nacurve0); /* Save the min and max curvature (in micro-units) */ numaGetMin(nacurve1, &minval, NULL); numaGetMax(nacurve1, &maxval, NULL); dew->mincurv = lept_roundftoi(1000000. * minval); dew->maxcurv = lept_roundftoi(1000000. * maxval); L_INFO("Pass 2: Min/max curvature = (%d, %d)\n", __func__, dew->mincurv, dew->maxcurv); /* Find and save the y values at the mid-points in each curve. * If the slope is zero anywhere, it will typically be here. */ namidy = numaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa1, i, L_CLONE); npts = ptaGetCount(pta); ptaGetPt(pta, npts / 2, NULL, &midy); numaAddNumber(namidy, midy); ptaDestroy(&pta); } /* Sort the lines in ptaa1c by their vertical position, going down */ namidysi = numaGetSortIndex(namidy, L_SORT_INCREASING); namidys = numaSortByIndex(namidy, namidysi); nacurves = numaSortByIndex(nacurve1, namidysi); numaDestroy(&dew->namidys); /* in case previously made */ numaDestroy(&dew->nacurves); dew->namidys = namidys; dew->nacurves = nacurves; ptaa2 = ptaaSortByIndex(ptaa1, namidysi); numaDestroy(&namidy); numaDestroy(&nacurve1); numaDestroy(&namidysi); if (dew->debug) { numaWriteDebug("/tmp/lept/dewdebug/midys.na", namidys); numaWriteDebug("/tmp/lept/dewdebug/curves.na", nacurves); pix1 = pixConvertTo32(pixdb); ptacirc = generatePtaFilledCircle(5); pixcirc = pixGenerateFromPta(ptacirc, 11, 11); srand(3); pixDisplayPtaaPattern(pix1, pix1, ptaa2, pixcirc, 5, 5); srand(3); /* use the same colors for text and reference lines */ pixRenderMidYs(pix1, namidys, 2); pix2 = (rotflag) ? pixRotateOrth(pix1, 3) : pixClone(pix1); pixWriteDebug("/tmp/lept/dewmod/0042.png", pix2, IFF_PNG); pixDisplay(pix2, 0, 0); ptaDestroy(&ptacirc); pixDestroy(&pixcirc); pixDestroy(&pix1); pixDestroy(&pix2); } pixDestroy(&pixdb); /* Convert the sampled points in ptaa2 to a sampled disparity with * with respect to the y value at the mid point in the curve. * The disparity is the distance the point needs to move; * plus is downward. */ ptaa3 = ptaaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); numaGetFValue(namidys, i, &midy); ptad = ptaCreate(nx); for (j = 0; j < nx; j++) { ptaGetPt(pta, j, &x, &y); ptaAddPt(ptad, x, midy - y); } ptaaAddPta(ptaa3, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { ptaaWriteDebug("/tmp/lept/dewdebug/ptaa3.ptaa", ptaa3, 0); } /* Generate ptaa4 by taking vertical 'columns' from ptaa3. * We want to fit the vertical disparity on the column to the * vertical position of the line, which we call 'y' here and * obtain from namidys. So each pta in ptaa4 is the set of * vertical disparities down a column of points. The columns * in ptaa4 are equally spaced in x. */ ptaa4 = ptaaCreate(nx); famidys = numaGetFArray(namidys, L_NOCOPY); for (j = 0; j < nx; j++) { pta = ptaCreate(nlines); for (i = 0; i < nlines; i++) { y = famidys[i]; ptaaGetPt(ptaa3, i, j, NULL, &val); /* disparity value */ ptaAddPt(pta, y, val); } ptaaAddPta(ptaa4, pta, L_INSERT); } if (dew->debug) { ptaaWriteDebug("/tmp/lept/dewdebug/ptaa4.ptaa", ptaa4, 0); } /* Do quadratic fit vertically on each of the pixel columns * in ptaa4, for the vertical displacement (which identifies the * src pixel(s) for each dest pixel) as a function of y (the * y value of the mid-points for each line). Then generate * ptaa5 by sampling the fitted vertical displacement on a * regular grid in the vertical direction. Each pta in ptaa5 * gives the vertical displacement for regularly sampled y values * at a fixed x. */ ptaa5 = ptaaCreate(nx); /* uniformly sampled across full height of image */ for (j = 0; j < nx; j++) { /* for each column */ pta = ptaaGetPta(ptaa4, j, L_CLONE); ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); ptad = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sampled in y */ y = i * sampling; applyQuadraticFit(c2, c1, c0, y, &val); ptaAddPt(ptad, y, val); } ptaaAddPta(ptaa5, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { ptaaWriteDebug("/tmp/lept/dewdebug/ptaa5.ptaa", ptaa5, 0); convertFilesToPdf("/tmp/lept/dewmod", "004", 135, 1.0, 0, 0, "Dewarp Vert Disparity", "/tmp/lept/dewarp/vert_disparity.pdf"); lept_stderr("pdf file: /tmp/lept/dewarp/vert_disparity.pdf\n"); } /* Save the result in a fpix at the specified subsampling */ fpix = fpixCreate(nx, ny); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { ptaaGetPt(ptaa5, j, i, NULL, &val); fpixSetPixel(fpix, j, i, val); } } dew->sampvdispar = fpix; dew->vsuccess = 1; ptaaDestroy(&ptaa0); ptaaDestroy(&ptaa1); ptaaDestroy(&ptaa2); ptaaDestroy(&ptaa3); ptaaDestroy(&ptaa4); ptaaDestroy(&ptaa5); return 0; } /*! * \brief dewarpFindHorizDisparity() * * \param[in] dew * \param[in] ptaa unsmoothed lines, not vertically ordered * \return 0 if OK, 1 if horizontal disparity array is not built, or on error * *
 * Notes:
 *      (1) This builds a horizontal disparity model (HDM), but
 *          does not check it against constraints for validity.
 *          Constraint checking is done at rendering time.
 *      (2) Horizontal disparity is not required for a successful model;
 *          only the vertical disparity is required.  This will not be
 *          called if the function to build the vertical disparity fails.
 *      (3) This sets the hsuccess flag to 1 on success.
 *      (4) Internally in ptal1, ptar1, ptal2, ptar2: x and y are reversed,
 *          so the 'y' value is horizontal distance across the image width.
 *      (5) Debug output goes to /tmp/lept/dewmod/ for collection into a pdf.
 * 
*/ l_ok dewarpFindHorizDisparity(L_DEWARP *dew, PTAA *ptaa) { l_int32 i, j, h, nx, ny, sampling, ret, linear_edgefit; l_float32 c0, c1, cl0, cl1, cl2, cr0, cr1, cr2; l_float32 x, y, refl, refr; l_float32 val, mederr; NUMA *nald, *nard; PIX *pix1; PTA *ptal1, *ptar1; /* left/right end points of lines; initial */ PTA *ptal2, *ptar2; /* left/right end points; after filtering */ PTA *ptal3, *ptar3; /* left and right block, fitted, uniform spacing */ PTA *pta, *ptat, *pta1, *pta2; PTAA *ptaah; FPIX *fpix; if (!dew) return ERROR_INT("dew not defined", __func__, 1); dew->hsuccess = 0; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (dew->debug) L_INFO("finding horizontal disparity\n", __func__); /* Get the endpoints of the lines, and sort from top to bottom */ h = pixGetHeight(dew->pixs); ret = dewarpGetLineEndPoints(h, ptaa, &ptal1, &ptar1); if (ret) { L_INFO("Horiz disparity not built\n", __func__); return 1; } if (dew->debug) { lept_mkdir("lept/dewdebug"); lept_mkdir("lept/dewarp"); ptaWriteDebug("/tmp/lept/dewdebug/endpts_left1.pta", ptal1, 1); ptaWriteDebug("/tmp/lept/dewdebug/endpts_right1.pta", ptar1, 1); } /* Filter the points by x-location to prevent 2-column images * from getting confused about left and right endpoints. We * require valid left points to not be farther than * 0.20 * (remaining distance to the right edge of the image) * to the right of the leftmost endpoint, and similarly for * the right endpoints. (Note: x and y are reversed in the pta.) * Also require end points to be near the medians in the * upper and lower halves. */ ret = dewarpFilterLineEndPoints(dew, ptal1, ptar1, &ptal2, &ptar2); ptaDestroy(&ptal1); ptaDestroy(&ptar1); if (ret) { L_INFO("Not enough filtered end points\n", __func__); return 1; } /* Do either a linear or a quadratic fit to the left and right * endpoints of the longest lines. It is not necessary to use * the noisy LSF fit function, because we've removed outlier * end points by selecting the long lines. * For the linear fit, each line is represented by 2 coefficients: * x(y) = c1 * y + c0. * For the quadratic fit, each line is represented by 3 coefficients: * x(y) = c2 * y^2 + c1 * y + c0. * Then using the coefficients, sample each fitted curve uniformly * along the full height of the image. */ sampling = dew->sampling; nx = dew->nx; ny = dew->ny; linear_edgefit = (dew->dewa->max_edgecurv == 0) ? TRUE : FALSE; if (linear_edgefit) { /* Fit the left side, using linear LSF on the set of long lines. */ dewarpLinearLSF(ptal2, &cl1, &cl0, &mederr); dew->leftslope = lept_roundftoi(1000. * cl1); /* milli-units */ dew->leftcurv = 0; /* micro-units */ L_INFO("Left linear LSF median error = %5.2f\n", __func__, mederr); L_INFO("Left edge slope = %d\n", __func__, dew->leftslope); ptal3 = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sample in y */ y = i * sampling; applyLinearFit(cl1, cl0, y, &x); ptaAddPt(ptal3, x, y); } /* Do a linear LSF on the right side. */ dewarpLinearLSF(ptar2, &cr1, &cr0, &mederr); dew->rightslope = lept_roundftoi(1000.0 * cr1); /* milli-units */ dew->rightcurv = 0; /* micro-units */ L_INFO("Right linear LSF median error = %5.2f\n", __func__, mederr); L_INFO("Right edge slope = %d\n", __func__, dew->rightslope); ptar3 = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sample in y */ y = i * sampling; applyLinearFit(cr1, cr0, y, &x); ptaAddPt(ptar3, x, y); } } else { /* quadratic edge fit */ /* Fit the left side, using quadratic LSF on the long lines. */ dewarpQuadraticLSF(ptal2, &cl2, &cl1, &cl0, &mederr); dew->leftslope = lept_roundftoi(1000. * cl1); /* milli-units */ dew->leftcurv = lept_roundftoi(1000000. * cl2); /* micro-units */ L_INFO("Left quad LSF median error = %5.2f\n", __func__, mederr); L_INFO("Left edge slope = %d\n", __func__, dew->leftslope); L_INFO("Left edge curvature = %d\n", __func__, dew->leftcurv); ptal3 = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sample in y */ y = i * sampling; applyQuadraticFit(cl2, cl1, cl0, y, &x); ptaAddPt(ptal3, x, y); } /* Do a quadratic LSF on the right side. */ dewarpQuadraticLSF(ptar2, &cr2, &cr1, &cr0, &mederr); dew->rightslope = lept_roundftoi(1000.0 * cr1); /* milli-units */ dew->rightcurv = lept_roundftoi(1000000. * cr2); /* micro-units */ L_INFO("Right quad LSF median error = %5.2f\n", __func__, mederr); L_INFO("Right edge slope = %d\n", __func__, dew->rightslope); L_INFO("Right edge curvature = %d\n", __func__, dew->rightcurv); ptar3 = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sample in y */ y = i * sampling; applyQuadraticFit(cr2, cr1, cr0, y, &x); ptaAddPt(ptar3, x, y); } } if (dew->debug) { PTA *ptalft, *ptarft; h = pixGetHeight(dew->pixs); pta1 = ptaCreate(h); pta2 = ptaCreate(h); if (linear_edgefit) { for (i = 0; i < h; i++) { applyLinearFit(cl1, cl0, i, &x); ptaAddPt(pta1, x, i); applyLinearFit(cr1, cr0, i, &x); ptaAddPt(pta2, x, i); } } else { /* quadratic edge fit */ for (i = 0; i < h; i++) { applyQuadraticFit(cl2, cl1, cl0, i, &x); ptaAddPt(pta1, x, i); applyQuadraticFit(cr2, cr1, cr0, i, &x); ptaAddPt(pta2, x, i); } } pix1 = pixDisplayPta(NULL, dew->pixs, pta1); pixDisplayPta(pix1, pix1, pta2); pixRenderHorizEndPoints(pix1, ptal2, ptar2, 0xff000000); pixDisplay(pix1, 600, 800); pixWriteDebug("/tmp/lept/dewmod/0051.png", pix1, IFF_PNG); pixDestroy(&pix1); pix1 = pixDisplayPta(NULL, dew->pixs, pta1); pixDisplayPta(pix1, pix1, pta2); ptalft = ptaTranspose(ptal3); ptarft = ptaTranspose(ptar3); pixRenderHorizEndPoints(pix1, ptalft, ptarft, 0x0000ff00); pixDisplay(pix1, 800, 800); pixWriteDebug("/tmp/lept/dewmod/0052.png", pix1, IFF_PNG); convertFilesToPdf("/tmp/lept/dewmod", "005", 135, 1.0, 0, 0, "Dewarp Horiz Disparity", "/tmp/lept/dewarp/horiz_disparity.pdf"); lept_stderr("pdf file: /tmp/lept/dewarp/horiz_disparity.pdf\n"); pixDestroy(&pix1); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&ptalft); ptaDestroy(&ptarft); } /* Find the x value at the midpoints (in y) of the two vertical lines, * ptal3 and ptar3. These are the reference values for each of the * lines. Then use the difference between the these midpoint * values and the actual x coordinates of the lines to represent * the horizontal disparity (nald, nard) on the vertical lines * for the sampled y values. */ ptaGetPt(ptal3, ny / 2, &refl, NULL); ptaGetPt(ptar3, ny / 2, &refr, NULL); nald = numaCreate(ny); nard = numaCreate(ny); for (i = 0; i < ny; i++) { ptaGetPt(ptal3, i, &x, NULL); numaAddNumber(nald, refl - x); ptaGetPt(ptar3, i, &x, NULL); numaAddNumber(nard, refr - x); } /* Now for each pair of sampled values of the two lines (at the * same value of y), do a linear interpolation to generate * the horizontal disparity on all sampled points between them. */ ptaah = ptaaCreate(ny); for (i = 0; i < ny; i++) { pta = ptaCreate(2); numaGetFValue(nald, i, &val); ptaAddPt(pta, refl, val); numaGetFValue(nard, i, &val); ptaAddPt(pta, refr, val); ptaGetLinearLSF(pta, &c1, &c0, NULL); /* horiz disparity along line */ ptat = ptaCreate(nx); for (j = 0; j < nx; j++) { x = j * sampling; applyLinearFit(c1, c0, x, &val); ptaAddPt(ptat, x, val); } ptaaAddPta(ptaah, ptat, L_INSERT); ptaDestroy(&pta); } numaDestroy(&nald); numaDestroy(&nard); /* Save the result in a fpix at the specified subsampling */ fpix = fpixCreate(nx, ny); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { ptaaGetPt(ptaah, i, j, NULL, &val); fpixSetPixel(fpix, j, i, val); } } dew->samphdispar = fpix; dew->hsuccess = 1; ptaDestroy(&ptal2); ptaDestroy(&ptar2); ptaDestroy(&ptal3); ptaDestroy(&ptar3); ptaaDestroy(&ptaah); return 0; } /*! * \brief dewarpGetTextlineCenters() * * \param[in] pixs 1 bpp * \param[in] debugflag 1 for debug output * \return ptaa of center values of textlines * *
 * Notes:
 *      (1) This in general does not have a point for each value
 *          of x, because there will be gaps between words.
 *          It doesn't matter because we will fit a quadratic to the
 *          points that we do have.
 * 
*/ PTAA * dewarpGetTextlineCenters(PIX *pixs, l_int32 debugflag) { char buf[64]; l_int32 i, w, h, bx, by, nsegs, csize1, csize2; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; PTA *pta; PTAA *ptaa; if (!pixs || pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (debugflag) L_INFO("finding text line centers\n", __func__); /* Filter to solidify the text lines within the x-height region, * and to remove most of the ascenders and descenders. * We start with a small vertical opening to remove noise beyond * the line that can cause an error in the line end points. * The small closing (csize1) is used to bridge the gaps between * letters. The large closing (csize2) bridges the gaps between * words; using 1/30 of the page width usually suffices. */ csize1 = L_MAX(15, w / 80); csize2 = L_MAX(40, w / 30); snprintf(buf, sizeof(buf), "o1.3 + c%d.1 + o%d.1 + c%d.1", csize1, csize1, csize2); pix1 = pixMorphSequence(pixs, buf, 0); /* Remove the components (e.g., embedded images) that have * long vertical runs (>= 50 pixels). You can't use bounding * boxes because connected component b.b. of lines can be quite * tall due to slope and curvature. */ pix2 = pixMorphSequence(pix1, "e1.50", 0); /* seed */ pixSeedfillBinary(pix2, pix2, pix1, 8); /* tall components */ pixXor(pix2, pix2, pix1); /* remove tall */ if (debugflag) { lept_mkdir("lept/dewmod"); pixWriteDebug("/tmp/lept/dewmod/0011.tif", pix1, IFF_TIFF_G4); pixDisplayWithTitle(pix1, 0, 600, "pix1", 1); pixWriteDebug("/tmp/lept/dewmod/0012.tif", pix2, IFF_TIFF_G4); pixDisplayWithTitle(pix2, 0, 800, "pix2", 1); } pixDestroy(&pix1); /* Get the 8-connected components ... */ boxa = pixConnComp(pix2, &pixa1, 8); pixDestroy(&pix2); boxaDestroy(&boxa); if (pixaGetCount(pixa1) == 0) { pixaDestroy(&pixa1); return NULL; } /* ... and remove the short width and very short height c.c */ pixa2 = pixaSelectBySize(pixa1, 100, 4, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); if ((nsegs = pixaGetCount(pixa2)) == 0) { pixaDestroy(&pixa1); pixaDestroy(&pixa2); return NULL; } if (debugflag) { pix2 = pixaDisplay(pixa2, w, h); pixWriteDebug("/tmp/lept/dewmod/0013.tif", pix2, IFF_TIFF_G4); pixDisplayWithTitle(pix2, 0, 1000, "pix2", 1); pixDestroy(&pix2); } /* For each c.c., get the weighted center of each vertical column. * The result is a set of points going approximately through * the center of the x-height part of the text line. */ ptaa = ptaaCreate(nsegs); for (i = 0; i < nsegs; i++) { pixaGetBoxGeometry(pixa2, i, &bx, &by, NULL, NULL); pix2 = pixaGetPix(pixa2, i, L_CLONE); pta = dewarpGetMeanVerticals(pix2, bx, by); ptaaAddPta(ptaa, pta, L_INSERT); pixDestroy(&pix2); } if (debugflag) { pix1 = pixCreateTemplate(pixs); pix2 = pixDisplayPtaa(pix1, ptaa); pixWriteDebug("/tmp/lept/dewmod/0014.tif", pix2, IFF_PNG); pixDisplayWithTitle(pix2, 0, 1200, "pix3", 1); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); return ptaa; } /*! * \brief dewarpGetMeanVerticals() * * \param[in] pixs 1 bpp, single c.c. * \param[in] x,y location of UL corner of pixs, relative to page image * \return pta (mean y-values in component for each x-value, * both translated by (x,y */ static PTA * dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y) { l_int32 w, h, i, j, wpl, sum, count; l_uint32 *line, *data; PTA *pta; if (!pixs || pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pta = ptaCreate(w); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { line = data; sum = count = 0; for (i = 0; i < h; i++) { if (GET_DATA_BIT(line, j) == 1) { sum += i; count += 1; } line += wpl; } if (count == 0) continue; ptaAddPt(pta, x + j, y + (sum / count)); } return pta; } /*! * \brief dewarpRemoveShortLines() * * \param[in] pixs 1 bpp * \param[in] ptaas input lines * \param[in] fract minimum fraction of longest line to keep * \param[in] debugflag * \return ptaad containing only lines of sufficient length, * or NULL on error */ PTAA * dewarpRemoveShortLines(PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag) { l_int32 w, n, i, index, maxlen, len; l_float32 minx, maxx; NUMA *na, *naindex; PIX *pix1, *pix2; PTA *pta; PTAA *ptaad; if (!pixs || pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!ptaas) return (PTAA *)ERROR_PTR("ptaas undefined", __func__, NULL); pixGetDimensions(pixs, &w, NULL, NULL); n = ptaaGetCount(ptaas); ptaad = ptaaCreate(n); na = numaCreate(n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaas, i, L_CLONE); ptaGetRange(pta, &minx, &maxx, NULL, NULL); numaAddNumber(na, maxx - minx + 1); ptaDestroy(&pta); } /* Sort by length and find all that are long enough */ naindex = numaGetSortIndex(na, L_SORT_DECREASING); numaGetIValue(naindex, 0, &index); numaGetIValue(na, index, &maxlen); if (maxlen < 0.5 * w) L_WARNING("lines are relatively short\n", __func__); pta = ptaaGetPta(ptaas, index, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); for (i = 1; i < n; i++) { numaGetIValue(naindex, i, &index); numaGetIValue(na, index, &len); if (len < fract * maxlen) break; pta = ptaaGetPta(ptaas, index, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); } if (debugflag) { pix1 = pixCopy(NULL, pixs); pix2 = pixDisplayPtaa(pix1, ptaad); pixDisplayWithTitle(pix2, 0, 200, "pix4", 1); pixDestroy(&pix1); pixDestroy(&pix2); } numaDestroy(&na); numaDestroy(&naindex); return ptaad; } /*! * \brief dewarpGetLineEndPoints() * * \param[in] h height of pixs * \param[in] ptaa lines * \param[out] pptal left end points of each line * \param[out] pptar right end points of each line * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) We require that the set of end points extends over 45% of the
 *          height of the input image, to insure good coverage and
 *          avoid extrapolating the curvature too far beyond the
 *          actual textlines.  Large extrapolations are particularly
 *          dangerous if used as a reference model.  We also require
 *          at least 10 lines of text.
 *      (2) We sort the lines from top to bottom (sort by x in the ptas).
 *      (3) For fitting the endpoints, x = f(y), we transpose x and y.
 *          Thus all these ptas have x and y swapped!
 * 
*/ static l_int32 dewarpGetLineEndPoints(l_int32 h, PTAA *ptaa, PTA **pptal, PTA **pptar) { l_int32 i, n, npt, x, y; l_float32 miny, maxy, ratio; PTA *pta, *ptal1, *ptar1; if (!pptal || !pptar) return ERROR_INT("&ptal and &ptar not both defined", __func__, 1); *pptal = *pptar = NULL; if (!ptaa) return ERROR_INT("ptaa undefined", __func__, 1); /* Are there at least 10 lines? */ n = ptaaGetCount(ptaa); if (n < MinLinesForHoriz1) { L_INFO("only %d lines; too few\n", __func__, n); return 1; } /* Extract the line end points, and transpose x and y values */ ptal1 = ptaCreate(n); ptar1 = ptaCreate(n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetIPt(pta, 0, &x, &y); ptaAddPt(ptal1, y, x); /* transpose */ npt = ptaGetCount(pta); ptaGetIPt(pta, npt - 1, &x, &y); ptaAddPt(ptar1, y, x); /* transpose */ ptaDestroy(&pta); } /* Use the min and max of the y value on the left side. */ ptaGetRange(ptal1, &miny, &maxy, NULL, NULL); ratio = (maxy - miny) / (l_float32)h; if (ratio < MinRatioLinesToHeight) { L_INFO("ratio lines to height, %f, too small\n", __func__, ratio); ptaDestroy(&ptal1); ptaDestroy(&ptar1); return 1; } /* Sort from top to bottom */ *pptal = ptaSort(ptal1, L_SORT_BY_X, L_SORT_INCREASING, NULL); *pptar = ptaSort(ptar1, L_SORT_BY_X, L_SORT_INCREASING, NULL); ptaDestroy(&ptal1); ptaDestroy(&ptar1); return 0; } /*! * \brief dewarpFilterLineEndPoints() * * \param[in] dew * \param[in] ptal input left end points of each line * \param[in] ptar input right end points of each line * \param[out] pptalf filtered left end points * \param[out] pptarf filtered right end points * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) Avoid confusion with multiple columns by requiring that line
 *          end points be close enough to leftmost and rightmost end points.
 *          Must have at least 8 points on left and right after this step.
 *      (2) Apply second filtering step, find the median positions in
 *          top and bottom halves, and removing end points that are
 *          displaced too much from these in the x direction.
 *          Must have at least 6 points on left and right after this step.
 *      (3) Reminder: x and y in the pta are transposed; think x = f(y).
 * 
*/ static l_int32 dewarpFilterLineEndPoints(L_DEWARP *dew, PTA *ptal, PTA *ptar, PTA **pptalf, PTA **pptarf) { l_int32 w, i, n; l_float32 ymin, ymax, xvall, xvalr, yvall, yvalr; PTA *ptal1, *ptar1, *ptal2, *ptar2; if (!ptal || !ptar) return ERROR_INT("ptal or ptar not defined", __func__, 1); *pptalf = *pptarf = NULL; /* First filter for lines near left and right margins */ w = pixGetWidth(dew->pixs); ptaGetMinMax(ptal, NULL, &ymin, NULL, NULL); ptaGetMinMax(ptar, NULL, NULL, NULL, &ymax); n = ptaGetCount(ptal); /* ptar is the same size; at least 10 */ ptal1 = ptaCreate(n); ptar1 = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(ptal, i, &xvall, &yvall); ptaGetPt(ptar, i, &xvalr, &yvalr); if (yvall < ymin + 0.20 * (w - ymin) && yvalr > 0.80 * ymax) { ptaAddPt(ptal1, xvall, yvall); ptaAddPt(ptar1, xvalr, yvalr); } } if (dew->debug) { ptaWriteDebug("/tmp/lept/dewdebug/endpts_left2.pta", ptal1, 1); ptaWriteDebug("/tmp/lept/dewdebug/endpts_right2.pta", ptar1, 1); } n = L_MIN(ptaGetCount(ptal1), ptaGetCount(ptar1)); if (n < MinLinesForHoriz1 - 2) { ptaDestroy(&ptal1); ptaDestroy(&ptar1); L_INFO("First filter: only %d endpoints; needed 8\n", __func__, n); return 1; } /* Remove outlier points */ ptal2 = dewarpRemoveBadEndPoints(w, ptal1); ptar2 = dewarpRemoveBadEndPoints(w, ptar1); ptaDestroy(&ptal1); ptaDestroy(&ptar1); if (!ptal2 || !ptar2) { ptaDestroy(&ptal2); ptaDestroy(&ptar2); L_INFO("Second filter: too few endpoints left after outliers removed\n", __func__); return 1; } if (dew->debug) { ptaWriteDebug("/tmp/lept/dewdebug/endpts_left3.pta", ptal2, 1); ptaWriteDebug("/tmp/lept/dewdebug/endpts_right3.pta", ptar2, 1); } *pptalf = ptal2; *pptarf = ptar2; return 0; } /*! * \brief dewarpRemoveBadEndPoints() * * \param[in] w width of input image * \param[in] ptas left or right line end points * \return ptad filtered left or right end points, or NULL on error. * *
 * Notes:
 *      (1) The input set is sorted by line position (x value).
 *          Break into two (upper and lower); for each find the median
 *          horizontal (y value), and remove all points farther than
 *          a fraction of the image width from this.  Make sure each
 *          part still has at least 3 points, and join the two sections
 *          before returning.
 *      (2) Reminder: x and y in the pta are transposed; think x = f(y).
 * 
*/ static PTA * dewarpRemoveBadEndPoints(l_int32 w, PTA *ptas) { l_int32 i, n, nu, nd; l_float32 rval, xval, yval, delta; PTA *ptau1, *ptau2, *ptad1, *ptad2; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); delta = AllowedWidthFract * w; n = ptaGetCount(ptas); /* will be at least 8 */ /* Check the upper half */ ptau1 = ptaSelectRange(ptas, 0, n / 2); ptaGetRankValue(ptau1, 0.5, NULL, L_SORT_BY_Y, &rval); nu = ptaGetCount(ptau1); ptau2 = ptaCreate(nu); for (i = 0; i < nu; i++) { ptaGetPt(ptau1, i, &xval, &yval); /* transposed */ if (L_ABS(rval - yval) <= delta) ptaAddPt(ptau2, xval, yval); } ptaDestroy(&ptau1); if (ptaGetCount(ptau2) < MinLinesForHoriz2) { ptaDestroy(&ptau2); L_INFO("Second filter: upper set is too small after outliers removed\n", __func__); return NULL; } /* Check the lower half */ ptad1 = ptaSelectRange(ptas, n / 2 + 1, -1); ptaGetRankValue(ptad1, 0.5, NULL, L_SORT_BY_Y, &rval); nd = ptaGetCount(ptad1); ptad2 = ptaCreate(nd); for (i = 0; i < nd; i++) { ptaGetPt(ptad1, i, &xval, &yval); /* transposed */ if (L_ABS(rval - yval) <= delta) ptaAddPt(ptad2, xval, yval); } ptaDestroy(&ptad1); if (ptaGetCount(ptad2) < MinLinesForHoriz2) { ptaDestroy(&ptau2); ptaDestroy(&ptad2); L_INFO("Second filter: lower set is too small after outliers removed\n", __func__); return NULL; } ptaJoin(ptau2, ptad2, 0, -1); ptaDestroy(&ptad2); return ptau2; } /*! * \brief dewarpIsLineCoverageValid() * * \param[in] ptaa of validated lines * \param[in] h height of pix * \param[out] pntop number of lines in top half * \param[out] pnbot number of lines in bottom half * \param[out] pytop location of top line * \param[out] pybot location of bottom line * \return 1 if coverage is valid, 0 if not or on error. * *
 * Notes:
 *      (1) The criterion for valid coverage is:
 *          (a) there must be at least 4 lines in each half (top and bottom)
 *              of the image.
 *          (b) the coverage must be at least 50% of the image height
 * 
*/ static l_int32 dewarpIsLineCoverageValid(PTAA *ptaa, l_int32 h, l_int32 *pntop, l_int32 *pnbot, l_int32 *pytop, l_int32 *pybot) { l_int32 i, n, iy, both_halves, ntop, nbot, ytop, ybot, nmin; l_float32 y, fraction; NUMA *na; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 0); if ((n = ptaaGetCount(ptaa)) == 0) return ERROR_INT("ptaa empty", __func__, 0); if (h <= 0) return ERROR_INT("invalid h", __func__, 0); if (!pntop || !pnbot) return ERROR_INT("&ntop and &nbot not defined", __func__, 0); if (!pytop || !pybot) return ERROR_INT("&ytop and &ybot not defined", __func__, 0); na = numaCreate(n); for (i = 0; i < n; i++) { ptaaGetPt(ptaa, i, 0, NULL, &y); numaAddNumber(na, y); } numaSort(na, na, L_SORT_INCREASING); for (i = 0, ntop = 0; i < n; i++) { numaGetIValue(na, i, &iy); if (i == 0) ytop = iy; if (i == n - 1) ybot = iy; if (iy < 0.5 * h) ntop++; } numaDestroy(&na); nbot = n - ntop; *pntop = ntop; *pnbot = nbot; *pytop = ytop; *pybot = ybot; nmin = 4; /* minimum number of lines required in each half */ both_halves = (ntop >= nmin) && (nbot >= nmin); fraction = (l_float32)(ybot - ytop) / (l_float32)h; if (both_halves && fraction > 0.50) return 1; return 0; } /*! * \brief dewarpLinearLSF() * * \param[in] ptad left or right end points of longest lines * \param[out] pa coeff a of LSF: y = ax + b * \param[out] pb coeff b of LSF: y = ax + b * \param[out] pmederr [optional] median error * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This is used for finding the left or right sides of the text
 *          block, computed as a best-fit line.  Only the longest lines
 *          are input, so there are no outlier line ends.
 *      (2) The ptas for the end points all have x and y swapped.
 * 
*/ static l_int32 dewarpLinearLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr) { l_int32 i, n; l_float32 x, y, xp, c0, c1; NUMA *naerr; if (pmederr) *pmederr = 0.0; if (!pa || !pb) return ERROR_INT("not all ptrs are defined", __func__, 1); *pa = *pb = 0.0; if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); /* Fit to the longest lines */ ptaGetLinearLSF(ptad, &c1, &c0, NULL); *pa = c1; *pb = c0; /* Optionally, find the median error */ if (pmederr) { n = ptaGetCount(ptad); naerr = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(ptad, i, &y, &xp); applyLinearFit(c1, c0, y, &x); numaAddNumber(naerr, L_ABS(x - xp)); } numaGetMedian(naerr, pmederr); numaDestroy(&naerr); } return 0; } /*! * \brief dewarpQuadraticLSF() * * \param[in] ptad left or right end points of longest lines * \param[out] pa coeff a of LSF: y = ax^2 + bx + c * \param[out] pb coeff b of LSF: y = ax^2 + bx + c * \param[out] pc coeff c of LSF: y = ax^2 + bx + c * \param[out] pmederr [optional] median error * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This is used for finding the left or right sides of the text
 *          block, computed as a best-fit quadratic curve.  Only the
 *          longest lines are input, so there are no outlier line ends.
 *      (2) The ptas for the end points all have x and y swapped.
 * 
*/ static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr) { l_int32 i, n; l_float32 x, y, xp, c0, c1, c2; NUMA *naerr; if (pmederr) *pmederr = 0.0; if (!pa || !pb || !pc) return ERROR_INT("not all ptrs are defined", __func__, 1); *pa = *pb = *pc = 0.0; if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); /* Fit to the longest lines */ ptaGetQuadraticLSF(ptad, &c2, &c1, &c0, NULL); *pa = c2; *pb = c1; *pc = c0; /* Optionally, find the median error */ if (pmederr) { n = ptaGetCount(ptad); naerr = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(ptad, i, &y, &xp); applyQuadraticFit(c2, c1, c0, y, &x); numaAddNumber(naerr, L_ABS(x - xp)); } numaGetMedian(naerr, pmederr); numaDestroy(&naerr); } return 0; } /*----------------------------------------------------------------------* * Build disparity model for slope near binding * *----------------------------------------------------------------------*/ /*! * \brief dewarpFindHorizSlopeDisparity() * * \param[in] dew * \param[in] pixb 1 bpp, with vert and horiz disparity removed * \param[in] fractthresh threshold fractional difference in density * \param[in] parity 0 if even page, 1 if odd page * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) %fractthresh is a threshold on the fractional difference in stroke
 *          density between between left and right sides.  Process this
 *          disparity only if the absolute value of the fractional
 *          difference equals or exceeds this threshold.
 *      (2) %parity indicates where the binding is: on the left for
 *          %parity == 0 and on the right for %parity == 1.
 *      (3) This takes a 1 bpp %pixb where both vertical and horizontal
 *          disparity have been applied, so the text lines are straight and,
 *          more importantly, the line end points are vertically aligned.
 *          It estimates the foreshortening of the characters on the
 *          binding side, and if significant, computes a one-dimensional
 *          horizontal disparity function to compensate.
 *      (4) The first attempt was to use the average width of the
 *          connected components (c.c.) in vertical slices.  This does not work
 *          reliably, because the horizontal compression of the text is
 *          often accompanied by horizontal joining of c.c.
 *      (5) We use the density of vertical strokes, measured by first using
 *          a vertical opening, which improves the signal.  The result
 *          is relatively insensitive to the size of the opening; we use
 *          a 10-pixel opening.  The relative density is measured by
 *          finding the number of c.c. in a full height sliding window
 *          of width 50 pixels, and compute every 25 pixels.  Similar results
 *          are obtained counting c.c. that either intersect the window
 *          or are fully contained within it.
 *      (6) Debug output goes to /tmp/lept/dewmod/ for collection into a pdf.
 * 
*/ l_ok dewarpFindHorizSlopeDisparity(L_DEWARP *dew, PIX *pixb, l_float32 fractthresh, l_int32 parity) { l_int32 i, j, x, n1, n2, nb, ne, count, w, h, ival, prev; l_int32 istart, iend, first, last, x0, x1, nx, ny; l_float32 fract, delta, sum, aveval, fval, del, denom; l_float32 ca, cb, cc, cd, ce, y; BOX *box; BOXA *boxa1, *boxa2; GPLOT *gplot; NUMA *na1, *na2, *na3, *na4, *nasum; PIX *pix1; PTA *pta1; FPIX *fpix; if (!dew) return ERROR_INT("dew not defined", __func__, 1); if (!dew->vvalid || !dew->hvalid) return ERROR_INT("invalid vert or horiz disparity model", __func__, 1); if (!pixb || pixGetDepth(pixb) != 1) return ERROR_INT("pixb not defined or not 1 bpp", __func__, 1); if (dew->debug) L_INFO("finding slope horizontal disparity\n", __func__); /* Find the bounding boxes of the vertical strokes; remove noise */ pix1 = pixMorphSequence(pixb, "o1.10", 0); pixDisplay(pix1, 100, 100); boxa1 = pixConnCompBB(pix1, 4); boxa2 = boxaSelectBySize(boxa1, 0, 5, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL); nb = boxaGetCount(boxa2); lept_stderr("number of components: %d\n", nb); boxaDestroy(&boxa1); /* Estimate the horizontal density of vertical strokes */ na1 = numaCreate(0); numaSetParameters(na1, 0, 25); pixGetDimensions(pixb, &w, &h, NULL); for (x = 0; x + 50 < w; x += 25) { box = boxCreate(x, 0, 50, h); boxaContainedInBoxCount(boxa2, box, &count); numaAddNumber(na1, count); boxDestroy(&box); } if (dew->debug) { lept_mkdir("lept/dew"); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/dew/0091", NULL); lept_mv("/tmp/lept/dew/0091.png", "lept/dewmod", NULL, NULL); pixWriteDebug("/tmp/lept/dewmod/0090.png", pix1, IFF_PNG); } pixDestroy(&pix1); boxaDestroy(&boxa2); /* Find the left and right end local maxima; if the difference * is small, quit. */ n1 = numaGetCount(na1); prev = 0; istart = 0; first = 0; for (i = 0; i < n1; i++) { numaGetIValue(na1, i, &ival); if (ival >= prev) { prev = ival; continue; } else { first = prev; istart = i - 1; break; } } prev = 0; last = 0; iend = n1 - 1; for (i = n1 - 1; i >= 0; i--) { numaGetIValue(na1, i, &ival); if (ival >= prev) { prev = ival; continue; } else { last = prev; iend = i + 1; break; } } na2 = numaClipToInterval(na1, istart, iend); numaDestroy(&na1); n2 = numaGetCount(na2); delta = (parity == 0) ? last - first : first - last; denom = L_MAX(1.0, (l_float32)(L_MIN(first, last))); fract = (l_float32)delta / denom; if (dew->debug) { L_INFO("Slope-disparity: first = %d, last = %d, fract = %7.3f\n", __func__, first, last, fract); gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/dew/0092", NULL); lept_mv("/tmp/lept/dew/0092.png", "lept/dewmod", NULL, NULL); } if (fract < fractthresh) { L_INFO("Small slope-disparity: first = %d, last = %d, fract = %7.3f\n", __func__, first, last, fract); numaDestroy(&na2); return 0; } /* Find the density far from the binding, and normalize to 1. */ ne = n2 - n2 % 2; if (parity == 0) numaGetSumOnInterval(na2, 0, ne / 2 - 1, &sum); else /* parity == 1 */ numaGetSumOnInterval(na2, ne / 2, ne - 1, &sum); denom = L_MAX(1.0, (l_float32)(ne / 2)); aveval = sum / denom; na3 = numaMakeConstant(aveval, n2); numaArithOp(na2, na2, na3, L_ARITH_DIVIDE); numaDestroy(&na3); if (dew->debug) { L_INFO("Average background density: %5.1f\n", __func__, aveval); gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/dew/0093", NULL); lept_mv("/tmp/lept/dew/0093.png", "lept/dewmod", NULL, NULL); } /* Fit the normalized density curve to a quartic */ pta1 = numaConvertToPta1(na2); ptaWriteStream(stderr, pta1, 0); /* ptaGetQuadraticLSF(pta1, NULL, NULL, NULL, &na3); */ ptaGetQuarticLSF(pta1, &ca, &cb, &cc, &cd, &ce, &na3); ptaGetArrays(pta1, &na4, NULL); if (dew->debug) { gplot = gplotSimpleXY1(na4, na3, GPLOT_LINES, GPLOT_PNG, "/tmp/lept/dew/0094", NULL); gplotDestroy(&gplot); lept_mv("/tmp/lept/dew/0094.png", "lept/dewmod", NULL, NULL); } ptaDestroy(&pta1); /* Integrate from the high point down to 1 (or v.v) to get the * disparity needed to make the density constant. */ nasum = numaMakeConstant(0, w); /* area under the curve above 1.0 */ if (parity == 0) { for (i = n2 - 1; i >= 0; i--) { numaGetFValue(na3, i, &fval); if (fval < 1.0) break; } numaGetIValue(na4, i + 1, &x0); numaGetIValue(na4, n2 - 1, &x1); numaSetParameters(nasum, x0, 1); sum = 0.0; for (x = x0; x < x1; x++) { applyQuarticFit(ca, cb, cc, cd, ce, (l_float32)x, &y); sum += (y - 1.0); numaReplaceNumber(nasum, x, sum); } for (x = x1; x < w; x++) numaReplaceNumber(nasum, x, sum); } else { /* parity == 1 */ for (i = 0; i < n2; i++) { numaGetFValue(na3, i, &fval); if (fval < 1.0) break; } numaGetIValue(na4, 0, &x0); numaGetIValue(na4, i - 1, &x1); numaSetParameters(nasum, x0, 1); sum = 0.0; for (x = x1; x >= x0; x--) { applyQuarticFit(ca, cb, cc, cd, ce, (l_float32)x, &y); sum += (y - 1.0); numaReplaceNumber(nasum, x, sum); } for (x = x0; x >= 0; x--) numaReplaceNumber(nasum, x, sum); } /* Save the result in a fpix at the specified subsampling */ nx = dew->nx; ny = dew->ny; fpix = fpixCreate(nx, ny); del = (l_float32)w / (l_float32)nx; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { x = del * j; numaGetFValue(nasum, x, &fval); fpixSetPixel(fpix, j, i, fval); } } dew->sampydispar = fpix; dew->ysuccess = 1; numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&nasum); return 0; } /*----------------------------------------------------------------------* * Build line disparity model * *----------------------------------------------------------------------*/ /*! * \brief dewarpBuildLineModel() * * \param[in] dew * \param[in] opensize size of opening to remove perpendicular lines * \param[in] debugfile use NULL to skip writing this * \return 0 if OK, 1 if unable to build the model or on error * *
 * Notes:
 *      (1) This builds the horizontal and vertical disparity arrays
 *          for an input of ruled lines, typically for calibration.
 *          In book scanning, you could lay the ruled paper over a page.
 *          Then for that page and several below it, you can use the
 *          disparity correction of the line model to dewarp the pages.
 *      (2) The dew has been initialized with the image of ruled lines.
 *          These lines must be continuous, but we do a small amount
 *          of pre-processing here to insure that.
 *      (3) %opensize is typically about 8.  It must be larger than
 *          the thickness of the lines to be extracted.  This is the
 *          default value, which is applied if %opensize < 3.
 *      (4) Sets vsuccess = 1 and hsuccess = 1 if the vertical and/or
 *          horizontal disparity arrays build.
 *      (5) Similar to dewarpBuildPageModel(), except here the vertical
 *          and horizontal disparity arrays are both built from ruled lines.
 *          See notes there.
 * 
*/ l_ok dewarpBuildLineModel(L_DEWARP *dew, l_int32 opensize, const char *debugfile) { char buf[64]; l_int32 i, j, bx, by, ret, nlines; BOXA *boxa; PIX *pixs, *pixh, *pixv, *pix, *pix1, *pix2; PIXA *pixa1, *pixa2; PTA *pta; PTAA *ptaa1, *ptaa2; if (!dew) return ERROR_INT("dew not defined", __func__, 1); if (opensize < 3) { L_WARNING("opensize should be >= 3; setting to 8\n", __func__); opensize = 8; /* default */ } dew->debug = (debugfile) ? 1 : 0; dew->vsuccess = dew->hsuccess = 0; pixs = dew->pixs; if (debugfile) { lept_rmdir("lept/dewline"); /* erase previous images */ lept_mkdir("lept/dewline"); lept_rmdir("lept/dewmod"); /* erase previous images */ lept_mkdir("lept/dewmod"); lept_mkdir("lept/dewarp"); pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); pixWriteDebug("/tmp/lept/dewline/001.png", pixs, IFF_PNG); } /* Extract and solidify the horizontal and vertical lines. We use * the horizontal lines to derive the vertical disparity, and v.v. * Both disparities are computed using the vertical disparity * algorithm; the horizontal disparity is found from the * vertical lines by rotating them clockwise by 90 degrees. * On the first pass, we compute the horizontal disparity, from * the vertical lines, by rotating them by 90 degrees (so they * are horizontal) and computing the vertical disparity on them; * we rotate the resulting fpix array for the horizontal disparity * back by -90 degrees. On the second pass, we compute the vertical * disparity from the horizontal lines in the usual fashion. */ snprintf(buf, sizeof(buf), "d1.3 + c%d.1 + o%d.1", opensize - 2, opensize); pixh = pixMorphSequence(pixs, buf, 0); /* horiz */ snprintf(buf, sizeof(buf), "d3.1 + c1.%d + o1.%d", opensize - 2, opensize); pix1 = pixMorphSequence(pixs, buf, 0); /* vert */ pixv = pixRotateOrth(pix1, 1); /* vert rotated to horizontal */ pixa1 = pixaCreate(2); pixaAddPix(pixa1, pixv, L_INSERT); /* get horizontal disparity first */ pixaAddPix(pixa1, pixh, L_INSERT); pixDestroy(&pix1); /*--------------------------------------------------------------*/ /* Process twice: first for horiz disparity, then for vert */ /*--------------------------------------------------------------*/ for (i = 0; i < 2; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); pixDisplay(pix, 0, 900); boxa = pixConnComp(pix, &pixa2, 8); nlines = boxaGetCount(boxa); boxaDestroy(&boxa); if (nlines < dew->minlines) { L_WARNING("only found %d lines\n", __func__, nlines); pixDestroy(&pix); pixaDestroy(&pixa1); continue; } /* Identify the pixels along the skeleton of each line */ ptaa1 = ptaaCreate(nlines); for (j = 0; j < nlines; j++) { pixaGetBoxGeometry(pixa2, j, &bx, &by, NULL, NULL); pix1 = pixaGetPix(pixa2, j, L_CLONE); pta = dewarpGetMeanVerticals(pix1, bx, by); ptaaAddPta(ptaa1, pta, L_INSERT); pixDestroy(&pix1); } pixaDestroy(&pixa2); if (debugfile) { pix1 = pixConvertTo32(pix); pix2 = pixDisplayPtaa(pix1, ptaa1); snprintf(buf, sizeof(buf), "/tmp/lept/dewline/%03d.png", 2 + 2 * i); pixWriteDebug(buf, pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } /* Remove all lines that are not at least 0.75 times the length * of the longest line. */ ptaa2 = dewarpRemoveShortLines(pix, ptaa1, 0.75, DEBUG_SHORT_LINES); if (debugfile) { pix1 = pixConvertTo32(pix); pix2 = pixDisplayPtaa(pix1, ptaa2); snprintf(buf, sizeof(buf), "/tmp/lept/dewline/%03d.png", 3 + 2 * i); pixWriteDebug(buf, pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } ptaaDestroy(&ptaa1); nlines = ptaaGetCount(ptaa2); if (nlines < dew->minlines) { pixDestroy(&pix); ptaaDestroy(&ptaa2); L_WARNING("%d lines: too few to build model\n", __func__, nlines); continue; } /* Get the sampled 'vertical' disparity from the textline * centers. The disparity array will push pixels vertically * so that each line is flat and centered at the y-position * of the mid-point. */ ret = dewarpFindVertDisparity(dew, ptaa2, 1 - i); /* If i == 0, move the result to the horizontal disparity, * rotating it back by -90 degrees. */ if (i == 0) { /* horizontal disparity, really */ if (ret) { L_WARNING("horizontal disparity not built\n", __func__); } else { L_INFO("hsuccess = 1\n", __func__); dew->samphdispar = fpixRotateOrth(dew->sampvdispar, 3); fpixDestroy(&dew->sampvdispar); if (debugfile) lept_mv("/tmp/lept/dewarp/vert_disparity.pdf", "lept/dewarp", "horiz_disparity.pdf", NULL); } dew->hsuccess = dew->vsuccess; dew->vsuccess = 0; } else { /* i == 1 */ if (ret) L_WARNING("vertical disparity not built\n", __func__); else L_INFO("vsuccess = 1\n", __func__); } ptaaDestroy(&ptaa2); pixDestroy(&pix); } pixaDestroy(&pixa1); /* Debug output */ if (debugfile) { if (dew->vsuccess == 1) { dewarpPopulateFullRes(dew, NULL, 0, 0); pix1 = fpixRenderContours(dew->fullvdispar, 3.0f, 0.15f); pixWriteDebug("/tmp/lept/dewline/006.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } if (dew->hsuccess == 1) { pix1 = fpixRenderContours(dew->fullhdispar, 3.0f, 0.15f); pixWriteDebug("/tmp/lept/dewline/007.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } convertFilesToPdf("/tmp/lept/dewline", NULL, 135, 1.0, 0, 0, "Dewarp Build Line Model", debugfile); lept_stderr("pdf file: %s\n", debugfile); } return 0; } /*----------------------------------------------------------------------* * Query model status * *----------------------------------------------------------------------*/ /*! * \brief dewarpaModelStatus() * * \param[in] dewa * \param[in] pageno * \param[out] pvsuccess [optional] 1 on success * \param[out] phsuccess [optional] 1 on success * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This tests if a model has been built, not if it is valid.
 * 
*/ l_ok dewarpaModelStatus(L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess) { L_DEWARP *dew; if (pvsuccess) *pvsuccess = 0; if (phsuccess) *phsuccess = 0; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) return ERROR_INT("dew not retrieved", __func__, 1); if (pvsuccess) *pvsuccess = dew->vsuccess; if (phsuccess) *phsuccess = dew->hsuccess; return 0; } /*----------------------------------------------------------------------* * Rendering helpers * *----------------------------------------------------------------------*/ /*! * \brief pixRenderMidYs() * * \param[in] pixs 32 bpp * \param[in] namidys y location of reference lines for vertical disparity * \param[in] linew width of rendered line; typ 2 * \return 0 if OK, 1 on error */ static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew) { l_int32 i, n, w, yval, rval, gval, bval; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!namidys) return ERROR_INT("namidys not defined", __func__, 1); w = pixGetWidth(pixs); n = numaGetCount(namidys); cmap = pixcmapCreateRandom(8, 0, 0); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i % 256, &rval, &gval, &bval); numaGetIValue(namidys, i, &yval); pixRenderLineArb(pixs, 0, yval, w, yval, linew, rval, gval, bval); } pixcmapDestroy(&cmap); return 0; } /*! * \brief pixRenderHorizEndPoints() * * \param[in] pixs 32 bpp * \param[in] ptal left side line end points * \param[in] ptar right side line end points * \param[in] color 0xrrggbb00 * \return 0 if OK, 1 on error */ static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, l_uint32 color) { PIX *pixcirc; PTA *ptalt, *ptart, *ptacirc; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!ptal || !ptar) return ERROR_INT("ptal and ptar not both defined", __func__, 1); ptacirc = generatePtaFilledCircle(5); pixcirc = pixGenerateFromPta(ptacirc, 11, 11); ptalt = ptaTranspose(ptal); ptart = ptaTranspose(ptar); pixDisplayPtaPattern(pixs, pixs, ptalt, pixcirc, 5, 5, color); pixDisplayPtaPattern(pixs, pixs, ptart, pixcirc, 5, 5, color); ptaDestroy(&ptacirc); ptaDestroy(&ptalt); ptaDestroy(&ptart); pixDestroy(&pixcirc); return 0; } leptonica-1.86.0/src/dewarp3.c000066400000000000000000001105411506303110300160560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dewarp3.c *
 *
 *    Applying and stripping the page disparity model
 *
 *      Apply disparity array to pix
 *          l_int32            dewarpaApplyDisparity()
 *          static l_int32     dewarpaApplyInit()
 *          static PIX        *pixApplyVertDisparity()
 *          static PIX        *pixApplyHorizDisparity()
 *
 *      Apply disparity array to boxa
 *          l_int32            dewarpaApplyDisparityBoxa()
 *          static BOXA       *boxaApplyDisparity()
 *
 *      Stripping out data and populating full res disparity
 *          l_int32            dewarpMinimize()
 *          l_int32            dewarpPopulateFullRes()
 *
 *      Static functions not presently in use
 *          static FPIX       *fpixSampledDisparity()
 *          static FPIX       *fpixExtraHorizDisparity()
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 dewarpaApplyInit(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 x, l_int32 y, L_DEWARP **pdew, const char *debugfile); static PIX *pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); static BOXA *boxaApplyDisparity(L_DEWARP *dew, BOXA *boxa, l_int32 direction, l_int32 mapdir); /*----------------------------------------------------------------------* * Apply warping disparity array to pixa * *----------------------------------------------------------------------*/ /*! * \brief dewarpaApplyDisparity() * * \param[in] dewa * \param[in] pageno of page model to be used; may be a ref model * \param[in] pixs image to be modified; can be 1, 8 or 32 bpp * \param[in] grayin gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs * \param[in] x, y origin for generation of disparity arrays * \param[out] ppixd disparity corrected image * \param[in] debugfile use NULL to skip writing this * \return 0 if OK, 1 on error no models or ref models available * *
 * Notes:
 *      (1) This applies the disparity arrays to the specified image.
 *      (2) Specify gray color for pixels brought in from the outside:
 *          0 is black, 255 is white.  Use -1 to select pixels from the
 *          boundary of the source image.
 *      (3) If the models and ref models have not been validated, this
 *          will do so by calling dewarpaInsertRefModels().
 *      (4) This works with both stripped and full resolution page models.
 *          If the full res disparity array(s) are missing, they are remade.
 *      (5) The caller must handle errors that are returned because there
 *          are no valid models or ref models for the page -- typically
 *          by using the input pixs.
 *      (6) If there is no model for %pageno, this will use the model for
 *          'refpage' and put the result in the dew for %pageno.
 *      (7) This populates the full resolution disparity arrays if
 *          necessary.  If x and/or y are positive, they are used,
 *          in conjunction with pixs, to determine the required
 *          slope-based extension of the full resolution disparity
 *          arrays in each direction.  When (x,y) == (0,0), all
 *          extension is to the right and down.  Nonzero values of (x,y)
 *          are useful for dewarping when pixs is deliberately undercropped.
 *      (8) Important: when applying disparity to a number of images,
 *          after calling this function and saving the resulting pixd,
 *          you should call dewarpMinimize(dew) on the dew for %pageno.
 *          This will remove pixs and pixd (or their clones) stored in dew,
 *          as well as the full resolution disparity arrays.  Together,
 *          these hold approximately 16 bytes for each pixel in pixs.
 * 
*/ l_ok dewarpaApplyDisparity(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile) { L_DEWARP *dew1, *dew; PIX *pixv, *pixh; /* Initialize the output with the input, so we'll have that * in case we can't apply the page model. */ if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = pixClone(pixs); if (grayin > 255) { L_WARNING("invalid grayin = %d; clipping at 255\n", __func__, grayin); grayin = 255; } /* Find the appropriate dew to use and fully populate its array(s) */ if (dewarpaApplyInit(dewa, pageno, pixs, x, y, &dew, debugfile)) return ERROR_INT("no model available", __func__, 1); /* Correct for vertical disparity and save the result */ if ((pixv = pixApplyVertDisparity(dew, pixs, grayin)) == NULL) { dewarpMinimize(dew); return ERROR_INT("pixv not made", __func__, 1); } pixDestroy(ppixd); *ppixd = pixv; if (debugfile) { pixDisplayWithTitle(pixv, 300, 0, "pixv", 1); lept_rmdir("lept/dewapply"); /* remove previous images */ lept_mkdir("lept/dewapply"); pixWriteDebug("/tmp/lept/dewapply/001.png", pixs, IFF_PNG); pixWriteDebug("/tmp/lept/dewapply/002.png", pixv, IFF_PNG); } /* Optionally, correct for horizontal disparity */ if (dewa->useboth && dew->hsuccess && !dew->skip_horiz) { if (dew->hvalid == FALSE) { L_INFO("invalid horiz model for page %d\n", __func__, pageno); } else { if ((pixh = pixApplyHorizDisparity(dew, pixv, grayin)) != NULL) { pixDestroy(ppixd); *ppixd = pixh; if (debugfile) { pixDisplayWithTitle(pixh, 600, 0, "pixh", 1); pixWriteDebug("/tmp/lept/dewapply/003.png", pixh, IFF_PNG); } } else { L_ERROR("horiz disparity failed on page %d\n", __func__, pageno); } } } if (debugfile) { dew1 = dewarpaGetDewarp(dewa, pageno); dewarpDebug(dew1, "lept/dewapply", 0); convertFilesToPdf("/tmp/lept/dewapply", NULL, 250, 1.0, 0, 0, "Dewarp Apply Disparity", debugfile); lept_stderr("pdf file: %s\n", debugfile); } /* Get rid of the large full res disparity arrays */ dewarpMinimize(dew); return 0; } /*! * \brief dewarpaApplyInit() * * \param[in] dewa * \param[in] pageno of page model to be used; may be a ref model * \param[in] pixs image to be modified; can be 1, 8 or 32 bpp * \param[in] x, y origin for generation of disparity arrays * \param[out] pdew dewarp to be used for this page * \param[in] debugfile use NULL to skip writing this * \return 0 if OK, 1 on error no models or ref models available * *
 * Notes:
 *      (1) This prepares pixs for being dewarped.  It returns 1 if
 *          no dewarping model exists.
 *      (2) The returned %dew contains the model to be used for this page
 *          image.  The %dew is owned by dewa; do not destroy.
 *      (3) If both the 'useboth' and 'check_columns' fields are true,
 *          this checks for multiple text columns and if found, sets
 *          the 'skip_horiz' field in the %dew for this page.
 * 
*/ static l_int32 dewarpaApplyInit(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 x, l_int32 y, L_DEWARP **pdew, const char *debugfile) { l_int32 ncols, debug; L_DEWARP *dew1, *dew2; PIX *pix1; if (!pdew) return ERROR_INT("&dew not defined", __func__, 1); *pdew = NULL; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (pageno < 0 || pageno > dewa->maxpage) return ERROR_INT("invalid pageno", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (x < 0) x = 0; if (y < 0) y = 0; debug = (debugfile) ? 1 : 0; /* Make sure all models are valid and all refmodels have * been added to dewa */ if (dewa->modelsready == FALSE) dewarpaInsertRefModels(dewa, 0, debug); /* Check for the existence of a valid model; we don't expect * all pages to have them. */ if ((dew1 = dewarpaGetDewarp(dewa, pageno)) == NULL) { L_INFO("no valid dew model for page %d\n", __func__, pageno); return 1; } /* Get the page model that we will use and sanity-check that * it is valid. The ultimate result will be put in dew1->pixd. */ if (dew1->hasref) /* point to another page with a model */ dew2 = dewarpaGetDewarp(dewa, dew1->refpage); else dew2 = dew1; if (dew2->vvalid == FALSE) return ERROR_INT("no model; shouldn't happen", __func__, 1); *pdew = dew2; /* If check_columns is TRUE and useboth is TRUE, check for * multiple columns. If there is more than one column, we * only apply vertical disparity. */ if (dewa->useboth && dewa->check_columns) { pix1 = pixConvertTo1(pixs, 140); pixCountTextColumns(pix1, 0.3f, 0.5f, 0.1f, &ncols, NULL); pixDestroy(&pix1); if (ncols > 1) { L_INFO("found %d columns; not correcting horiz disparity\n", __func__, ncols); dew2->skip_horiz = TRUE; } else { dew2->skip_horiz = FALSE; } } /* Generate the full res disparity arrays if they don't exist * (e.g., if they've been minimized or read from file), or if * they are too small for the current image. */ dewarpPopulateFullRes(dew2, pixs, x, y); return 0; } /*! * \brief pixApplyVertDisparity() * * \param[in] dew * \param[in] pixs 1, 8 or 32 bpp * \param[in] grayin gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs * \return pixd modified to remove vertical disparity, or NULL on error * *
 * Notes:
 *      (1) This applies the vertical disparity array to the specified
 *          image.  For src pixels above the image, we use the pixels
 *          in the first raster line.
 *      (2) Specify gray color for pixels brought in from the outside:
 *          0 is black, 255 is white.  Use -1 to select pixels from the
 *          boundary of the source image.
 * 
*/ static PIX * pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin) { l_int32 i, j, w, h, d, fw, fh, wpld, wplf, isrc, val8; l_uint32 *datad, *lined; l_float32 *dataf, *linef; void **lineptrs; FPIX *fpix; PIX *pixd; if (!dew) return (PIX *)ERROR_PTR("dew not defined", __func__, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", __func__, NULL); if ((fpix = dew->fullvdispar) == NULL) return (PIX *)ERROR_PTR("fullvdispar not defined", __func__, NULL); fpixGetDimensions(fpix, &fw, &fh); if (fw < w || fh < h) { lept_stderr("fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); return (PIX *)ERROR_PTR("invalid fpix size", __func__, NULL); } /* Two choices for requested pixels outside pixs: (1) use pixels' * from the boundary of pixs; use white or light gray pixels. */ pixd = pixCreateTemplate(pixs); if (grayin >= 0) pixSetAllGray(pixd, grayin); datad = pixGetData(pixd); dataf = fpixGetData(fpix); wpld = pixGetWpl(pixd); wplf = fpixGetWpl(fpix); if (d == 1) { lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) /* use value at boundary if outside */ isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) { /* remains gray if outside */ if (GET_DATA_BIT(lineptrs[isrc], j)) SET_DATA_BIT(lined, j); } } } } else if (d == 8) { lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) { val8 = GET_DATA_BYTE(lineptrs[isrc], j); SET_DATA_BYTE(lined, j, val8); } } } } else { /* d == 32 */ lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) lined[j] = GET_DATA_FOUR_BYTES(lineptrs[isrc], j); } } } LEPT_FREE(lineptrs); return pixd; } /*! * \brief pixApplyHorizDisparity() * * \param[in] dew * \param[in] pixs 1, 8 or 32 bpp * \param[in] grayin gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs * \return pixd modified to remove horizontal disparity if possible, * or NULL on error. * *
 * Notes:
 *      (1) This applies the horizontal disparity array to the specified
 *          image.
 *      (2) Specify gray color for pixels brought in from the outside:
 *          0 is black, 255 is white.  Use -1 to select pixels from the
 *          boundary of the source image.
 *      (3) The input pixs has already been corrected for vertical disparity.
 *          If the horizontal disparity array doesn't exist, this returns
 *          a clone of %pixs.
 * 
*/ static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin) { l_int32 i, j, w, h, d, fw, fh, wpls, wpld, wplf, jsrc, val8; l_uint32 *datas, *lines, *datad, *lined; l_float32 *dataf, *linef; FPIX *fpix; PIX *pixd; if (!dew) return (PIX *)ERROR_PTR("dew not defined", __func__, pixs); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", __func__, NULL); if ((fpix = dew->fullhdispar) == NULL) return (PIX *)ERROR_PTR("fullhdispar not defined", __func__, NULL); fpixGetDimensions(fpix, &fw, &fh); if (fw < w || fh < h) { lept_stderr("fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); return (PIX *)ERROR_PTR("invalid fpix size", __func__, NULL); } /* Two choices for requested pixels outside pixs: (1) use pixels' * from the boundary of pixs; use white or light gray pixels. */ pixd = pixCreateTemplate(pixs); if (grayin >= 0) pixSetAllGray(pixd, grayin); datas = pixGetData(pixs); datad = pixGetData(pixd); dataf = fpixGetData(fpix); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wplf = fpixGetWpl(fpix); if (d == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) /* use value at boundary if outside */ jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) { /* remains gray if outside */ if (GET_DATA_BIT(lines, jsrc)) SET_DATA_BIT(lined, j); } } } } else if (d == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) { val8 = GET_DATA_BYTE(lines, jsrc); SET_DATA_BYTE(lined, j, val8); } } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) lined[j] = lines[jsrc]; } } } return pixd; } /*----------------------------------------------------------------------* * Apply warping disparity array to boxa * *----------------------------------------------------------------------*/ /*! * \brief dewarpaApplyDisparityBoxa() * * \param[in] dewa * \param[in] pageno of page model to be used; may be a ref model * \param[in] pixs initial pix reference; for alignment and debugging * \param[in] boxas boxa to be mapped * \param[in] mapdir 1 if mapping forward from original to dewarped; * 0 if backward * \param[in] x, y origin for generation of disparity arrays with * respect to the source region * \param[out] pboxad disparity corrected boxa * \param[in] debugfile use NULL to skip writing this * \return 0 if OK, 1 on error no models or ref models available * *
 * Notes:
 *      (1) This applies the disparity arrays in one of two mapping directions
 *          to the specified boxa.  It can be used in the backward direction
 *          to locate a box in the original coordinates that would have
 *          been dewarped to to the specified image.
 *      (2) If there is no model for %pageno, this will use the model for
 *          'refpage' and put the result in the dew for %pageno.
 *      (3) This works with both stripped and full resolution page models.
 *          If the full res disparity array(s) are missing, they are remade.
 *      (4) If an error occurs, a copy of the input boxa is returned.
 * 
*/ l_ok dewarpaApplyDisparityBoxa(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, BOXA *boxas, l_int32 mapdir, l_int32 x, l_int32 y, BOXA **pboxad, const char *debugfile) { l_int32 debug_out; L_DEWARP *dew1, *dew; BOXA *boxav, *boxah; PIX *pixv, *pixh; /* Initialize the output with the input, so we'll have that * in case we can't apply the page model. */ if (!pboxad) return ERROR_INT("&boxad not defined", __func__, 1); *pboxad = boxaCopy(boxas, L_CLONE); /* Find the appropriate dew to use and fully populate its array(s) */ if (dewarpaApplyInit(dewa, pageno, pixs, x, y, &dew, debugfile)) return ERROR_INT("no model available", __func__, 1); /* Correct for vertical disparity and save the result */ if ((boxav = boxaApplyDisparity(dew, boxas, L_VERT, mapdir)) == NULL) { dewarpMinimize(dew); return ERROR_INT("boxa1 not made", __func__, 1); } boxaDestroy(pboxad); *pboxad = boxav; pixv = NULL; pixh = NULL; if (debugfile && mapdir != 1) L_INFO("Reverse map direction; no debug output\n", __func__); debug_out = debugfile && (mapdir == 1); if (debug_out) { PIX *pix1; lept_rmdir("lept/dewboxa"); /* remove previous images */ lept_mkdir("lept/dewboxa"); pix1 = pixConvertTo32(pixs); pixRenderBoxaArb(pix1, boxas, 2, 255, 0, 0); pixWriteDebug("/tmp/lept/dewboxa/01.png", pix1, IFF_PNG); pixDestroy(&pix1); pixv = pixApplyVertDisparity(dew, pixs, 255); pix1 = pixConvertTo32(pixv); pixRenderBoxaArb(pix1, boxav, 2, 0, 255, 0); pixWriteDebug("/tmp/lept/dewboxa/02.png", pix1, IFF_PNG); pixDestroy(&pix1); } /* Optionally, correct for horizontal disparity */ if (dewa->useboth && dew->hsuccess && !dew->skip_horiz) { if (dew->hvalid == FALSE) { L_INFO("invalid horiz model for page %d\n", __func__, pageno); } else { boxah = boxaApplyDisparity(dew, boxav, L_HORIZ, mapdir); if (!boxah) { L_ERROR("horiz disparity fails on page %d\n", __func__, pageno); } else { boxaDestroy(pboxad); *pboxad = boxah; if (debug_out) { PIX *pix1; pixh = pixApplyHorizDisparity(dew, pixv, 255); pix1 = pixConvertTo32(pixh); pixRenderBoxaArb(pix1, boxah, 2, 0, 0, 255); pixWriteDebug("/tmp/lept/dewboxa/03.png", pix1, IFF_PNG); pixDestroy(&pixh); pixDestroy(&pix1); } } } } if (debug_out) { pixDestroy(&pixv); dew1 = dewarpaGetDewarp(dewa, pageno); dewarpDebug(dew1, "lept/dewapply", 0); convertFilesToPdf("/tmp/lept/dewboxa", NULL, 135, 1.0, 0, 0, "Dewarp Apply Disparity Boxa", debugfile); lept_stderr("Dewarp Apply Disparity Boxa pdf file: %s\n", debugfile); } /* Get rid of the large full res disparity arrays */ dewarpMinimize(dew); return 0; } /*! * \brief boxaApplyDisparity() * * \param[in] dew * \param[in] boxa * \param[in] direction L_HORIZ or L_VERT * \param[in] mapdir 1 if mapping forward from original to dewarped; * 0 if backward * \return boxad modified by the disparity, or NULL on error */ static BOXA * boxaApplyDisparity(L_DEWARP *dew, BOXA *boxa, l_int32 direction, l_int32 mapdir) { l_int32 x, y, w, h, ib, ip, nbox, wpl; l_float32 xn, yn; l_float32 *data, *line; BOX *boxs, *boxd; BOXA *boxad; FPIX *fpix; PTA *ptas, *ptad; if (!dew) return (BOXA *)ERROR_PTR("dew not defined", __func__, NULL); if (!boxa) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (direction == L_VERT) fpix = dew->fullvdispar; else if (direction == L_HORIZ) fpix = dew->fullhdispar; else return (BOXA *)ERROR_PTR("invalid direction", __func__, NULL); if (!fpix) return (BOXA *)ERROR_PTR("full disparity not defined", __func__, NULL); fpixGetDimensions(fpix, &w, &h); /* Clip the output to the positive quadrant because all box * coordinates must be non-negative. */ data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); nbox = boxaGetCount(boxa); boxad = boxaCreate(nbox); for (ib = 0; ib < nbox; ib++) { boxs = boxaGetBox(boxa, ib, L_COPY); ptas = boxConvertToPta(boxs, 4); ptad = ptaCreate(4); for (ip = 0; ip < 4; ip++) { ptaGetIPt(ptas, ip, &x, &y); line = data + y * wpl; if (direction == L_VERT) { if (mapdir == 0) yn = y - line[x]; else yn = y + line[x]; yn = L_MAX(0, yn); ptaAddPt(ptad, x, yn); } else { /* direction == L_HORIZ */ if (mapdir == 0) xn = x - line[x]; else xn = x + line[x]; xn = L_MAX(0, xn); ptaAddPt(ptad, xn, y); } } boxd = ptaConvertToBox(ptad); boxaAddBox(boxad, boxd, L_INSERT); boxDestroy(&boxs); ptaDestroy(&ptas); ptaDestroy(&ptad); } return boxad; } /*----------------------------------------------------------------------* * Stripping out data and populating full res disparity * *----------------------------------------------------------------------*/ /*! * \brief dewarpMinimize() * * \param[in] dew * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes all data that is not needed for serialization.
 *          It keeps the subsampled disparity array(s), so the full
 *          resolution arrays can be reconstructed.
 * 
*/ l_ok dewarpMinimize(L_DEWARP *dew) { L_DEWARP *dewt; if (!dew) return ERROR_INT("dew not defined", __func__, 1); /* If dew is a ref, minimize the actual dewarp */ if (dew->hasref) dewt = dewarpaGetDewarp(dew->dewa, dew->refpage); else dewt = dew; if (!dewt) return ERROR_INT("dewt not found", __func__, 1); pixDestroy(&dewt->pixs); fpixDestroy(&dewt->fullvdispar); fpixDestroy(&dewt->fullhdispar); numaDestroy(&dewt->namidys); numaDestroy(&dewt->nacurves); return 0; } /*! * \brief dewarpPopulateFullRes() * * \param[in] dew * \param[in] pix [optional], to give size of actual image * \param[in] x, y origin for generation of disparity arrays * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the full resolution vertical and horizontal disparity
 *          arrays do not exist, they are built from the subsampled ones.
 *      (2) If pixs is not given, the size of the arrays is determined
 *          by the original image from which the sampled version was
 *          generated.  Any values of (x,y) are ignored.
 *      (3) If pixs is given, the full resolution disparity arrays must
 *          be large enough to accommodate it.
 *          (a) If the arrays do not exist, the value of (x,y) determines
 *              the origin of the full resolution arrays without extension,
 *              relative to pixs.  Thus, (x,y) gives the amount of
 *              slope extension in (left, top).  The (right, bottom)
 *              extension is then determined by the size of pixs and
 *              (x,y); the values should never be < 0.
 *          (b) If the arrays exist and pixs is too large, the existing
 *              full res arrays are destroyed and new ones are made,
 *              again using (x,y) to determine the extension in the
 *              four directions.
 * 
*/ l_ok dewarpPopulateFullRes(L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y) { l_int32 width, height, fw, fh, deltaw, deltah, redfactor; FPIX *fpixt1, *fpixt2; if (!dew) return ERROR_INT("dew not defined", __func__, 1); if (!dew->sampvdispar) return ERROR_INT("no sampled vert disparity", __func__, 1); if (x < 0) x = 0; if (y < 0) y = 0; /* Establish the target size for the full res arrays */ if (pix) pixGetDimensions(pix, &width, &height, NULL); else { width = dew->w; height = dew->h; } /* Destroy the existing arrays if they are too small */ if (dew->fullvdispar) { fpixGetDimensions(dew->fullvdispar, &fw, &fh); if (width > fw || height > fw) fpixDestroy(&dew->fullvdispar); } if (dew->fullhdispar) { fpixGetDimensions(dew->fullhdispar, &fw, &fh); if (width > fw || height > fw) fpixDestroy(&dew->fullhdispar); } /* Find the required width and height expansion deltas */ deltaw = width - dew->sampling * (dew->nx - 1) + 2; deltah = height - dew->sampling * (dew->ny - 1) + 2; redfactor = dew->redfactor; deltaw = redfactor * L_MAX(0, deltaw); deltah = redfactor * L_MAX(0, deltah); /* Generate the full res vertical array if it doesn't exist, * extending it as required to make it big enough. Use x,y * to determine the amounts on each side. */ if (!dew->fullvdispar) { fpixt1 = fpixCopy(dew->sampvdispar); if (redfactor == 2) fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); fpixDestroy(&fpixt1); if (deltah == 0 && deltaw == 0) { dew->fullvdispar = fpixt2; } else { dew->fullvdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, y, deltah - y); fpixDestroy(&fpixt2); } } /* Similarly, generate the full res horizontal array if it * doesn't exist. Do this even if useboth == 1, but * not if required to skip running horizontal disparity. */ if (!dew->fullhdispar && dew->samphdispar && !dew->skip_horiz) { fpixt1 = fpixCopy(dew->samphdispar); if (redfactor == 2) fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); fpixDestroy(&fpixt1); if (deltah == 0 && deltaw == 0) { dew->fullhdispar = fpixt2; } else { dew->fullhdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, y, deltah - y); fpixDestroy(&fpixt2); } } return 0; } #if 0 /*----------------------------------------------------------------------* * Static functions not presently in use * *----------------------------------------------------------------------*/ /*! * \brief fpixSampledDisparity() * * \param[in] fpixs full resolution disparity model * \param[in] sampling sampling factor * \return fpixd sampled disparity model, or NULL on error * *
 * Notes:
 *      (1) This converts full to sampled disparity.
 *      (2) The input array is sampled at the right and top edges, and
 *          at every %sampling pixels horizontally and vertically.
 *      (3) The sampled array may not extend to the right and bottom
 *          pixels in fpixs.  This will occur if fpixs was generated
 *          with slope extension because the image on that page was
 *          larger than normal.  This is fine, because in use the
 *          sampled array will be interpolated back to full resolution
 *          and then extended as required.  So the operations of
 *          sampling and interpolation will be idempotent.
 *      (4) There must be at least 3 sampled points horizontally and
 *          vertically.
 * 
*/ static FPIX * fpixSampledDisparity(FPIX *fpixs, l_int32 sampling) { l_int32 w, h, wd, hd, i, j, is, js; l_float32 val; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (sampling < 1) return (FPIX *)ERROR_PTR("sampling < 1", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); wd = 1 + (w + sampling - 2) / sampling; hd = 1 + (h + sampling - 2) / sampling; if (wd < 3 || hd < 3) return (FPIX *)ERROR_PTR("wd < 3 or hd < 3", __func__, NULL); fpixd = fpixCreate(wd, hd); for (i = 0; i < hd; i++) { is = sampling * i; if (is >= h) continue; for (j = 0; j < wd; j++) { js = sampling * j; if (js >= w) continue; fpixGetPixel(fpixs, js, is, &val); fpixSetPixel(fpixd, j, i, val); } } return fpixd; } static const l_float32 DefaultSlopeFactor = 0.1; /* just a guess; fix it */ /*! * \brief fpixExtraHorizDisparity() * * \param[in] fpixv vertical disparity model * \param[in] factor conversion factor for vertical disparity slope; * use 0 for default * \param[out] pxwid extra width to be added to dewarped pix * \return fpixh, or NULL on error * *
 * Notes:
 *      (1) This takes the difference in vertical disparity at top
 *          and bottom of the image, and converts it to an assumed
 *          horizontal disparity.  In use, we add this to the
 *          horizontal disparity determined by the left and right
 *          ends of textlines.
 *      (2) Usage:
 *            l_int32 xwid = [extra width to be added to fpix and image]
 *            FPix *fpix = fpixExtraHorizDisparity(dew->fullvdispar, 0, &xwid);
 *            fpixLinearCombination(dew->fullhdispar, dew->fullhdispar,
 *                                  fpix, 1.0, 1.0);
 * 
*/ static FPIX * fpixExtraHorizDisparity(FPIX *fpixv, l_float32 factor, l_int32 *pxwid) { l_int32 w, h, i, j, fw, wpl, maxloc; l_float32 val1, val2, vdisp, vdisp0, maxval; l_float32 *data, *line, *fadiff; NUMA *nadiff; FPIX *fpixh; if (!fpixv) return (FPIX *)ERROR_PTR("fpixv not defined", __func__, NULL); if (!pxwid) return (FPIX *)ERROR_PTR("&xwid not defined", __func__, NULL); if (factor == 0.0) factor = DefaultSlopeFactor; /* Estimate horizontal disparity from the vertical disparity * difference between the top and bottom, normalized to the * image height. Add the maximum value to the width of the * output image, so that all src pixels can be mapped * into the dest. */ fpixGetDimensions(fpixv, &w, &h); nadiff = numaCreate(w); for (j = 0; j < w; j++) { fpixGetPixel(fpixv, j, 0, &val1); fpixGetPixel(fpixv, j, h - 1, &val2); vdisp = factor * (val2 - val1) / (l_float32)h; if (j == 0) vdisp0 = vdisp; vdisp = vdisp0 - vdisp; numaAddNumber(nadiff, vdisp); } numaGetMax(nadiff, &maxval, &maxloc); *pxwid = (l_int32)(maxval + 0.5); fw = w + *pxwid; fpixh = fpixCreate(fw, h); data = fpixGetData(fpixh); wpl = fpixGetWpl(fpixh); fadiff = numaGetFArray(nadiff, L_NOCOPY); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < fw; j++) { if (j < maxloc) /* this may not work for even pages */ line[j] = fadiff[j]; else /* keep it at the max value the rest of the way across */ line[j] = maxval; } } numaDestroy(&nadiff); return fpixh; } #endif leptonica-1.86.0/src/dewarp4.c000066400000000000000000001225601506303110300160630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dewarp4.c *
 *
 *    Single page dewarper
 *
 *    Reference model (book-level, dewarpa) operations and debugging output
 *
 *      Top-level single page dewarper
 *          l_int32            dewarpSinglePage()
 *          l_int32            dewarpSinglePageInit()
 *          l_int32            dewarpSinglePageRun()
 *
 *      Operations on dewarpa
 *          l_int32            dewarpaListPages()
 *          l_int32            dewarpaSetValidModels()
 *          l_int32            dewarpaInsertRefModels()
 *          l_int32            dewarpaStripRefModels()
 *          l_int32            dewarpaRestoreModels()
 *
 *      Dewarp debugging output
 *          l_int32            dewarpaInfo()
 *          l_int32            dewarpaModelStats()
 *          static l_int32     dewarpaTestForValidModel()
 *          l_int32            dewarpaShowArrays()
 *          l_int32            dewarpDebug()
 *          l_int32            dewarpShowResults()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 dewarpaTestForValidModel(L_DEWARPA *dewa, L_DEWARP *dew, l_int32 notests); #ifndef NO_CONSOLE_IO #define DEBUG_INVALID_MODELS 0 /* set this to 1 for debugging */ #endif /* !NO_CONSOLE_IO */ /* Special parameter value */ static const l_int32 GrayInValue = 200; /*----------------------------------------------------------------------* * Top-level single page dewarper * *----------------------------------------------------------------------*/ /*! * \brief dewarpSinglePage() * * \param[in] pixs with text, any depth * \param[in] thresh for global thresh to 1 bpp; ignore otherwise * \param[in] adaptive 1 for adaptive thresh; 0 for global threshold * \param[in] useboth 1 for both horiz and vert; 0 for vertical only * \param[in] check_columns 1 to skip horizontal if multiple columns; * 0 otherwise; default is to skip * \param[out] ppixd dewarped result * \param[out] pdewa [optional] dewa with single page; NULL to skip * \param[in] debug 1 for debugging output, 0 otherwise * \return 0 if OK, 1 on error list of page numbers, or NULL on error * *
 * Notes:
 *      (1) Dewarps pixs and returns the result in &pixd.
 *      (2) This uses default values for all model parameters.
 *      (3) If pixs is 1 bpp, the parameters %adaptive and %thresh are ignored.
 *      (4) If it can't build a model, returns a copy of pixs in &pixd.
 * 
*/ l_ok dewarpSinglePage(PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixd, L_DEWARPA **pdewa, l_int32 debug) { L_DEWARPA *dewa; PIX *pixb; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (pdewa) *pdewa = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); dewarpSinglePageInit(pixs, thresh, adaptive, useboth, check_columns, &pixb, &dewa); if (!pixb) { dewarpaDestroy(&dewa); return ERROR_INT("pixb not made", __func__, 1); } dewarpSinglePageRun(pixs, pixb, dewa, ppixd, debug); if (pdewa) *pdewa = dewa; else dewarpaDestroy(&dewa); pixDestroy(&pixb); return 0; } /*! * \brief dewarpSinglePageInit() * * \param[in] pixs with text, any depth * \param[in] thresh for global thresh to 1 bpp; ignore otherwise * \param[in] adaptive 1 for adaptive thresh; 0 for global threshold * \param[in] useboth 1 for both horiz and vert; 0 for vertical only * \param[in] check_columns 1 to skip horizontal if multiple columns; * 0 otherwise; default is to skip * \param[out] ppixb 1 bpp debug image * \param[out] pdewa initialized dewa * \return 0 if OK, 1 on error list of page numbers, or NULL on error * *
 * Notes:
 *      (1) This binarizes the input pixs if necessary, returning the
 *          binarized image.  It also initializes the dewa to default values
 *          for the model parameters.
 *      (2) If pixs is 1 bpp, the parameters %adaptive and %thresh are ignored.
 *      (3) To change the model parameters, call dewarpaSetCurvatures()
 *          before running dewarpSinglePageRun().  For example:
 *             dewarpSinglePageInit(pixs, 0, 1, 1, 1, &pixb, &dewa);
 *             dewarpaSetCurvatures(dewa, 250, -1, -1, 80, 70, 150);
 *             dewarpSinglePageRun(pixs, pixb, dewa, &pixd, 0);
 *             dewarpaDestroy(&dewa);
 *             pixDestroy(&pixb);
 * 
*/ l_ok dewarpSinglePageInit(PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixb, L_DEWARPA **pdewa) { PIX *pix1, *pix2; if (ppixb) *ppixb = NULL; if (pdewa) *pdewa = NULL; if (!ppixb || !pdewa) return ERROR_INT("&pixb and &dewa not both defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Generate a binary image, if necessary */ if (pixGetDepth(pixs) > 1) { if ((pix1 = pixConvertTo8(pixs, 0)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); if (adaptive) pix2 = pixAdaptThresholdToBinary(pix1, NULL, 1.0); else pix2 = pixThresholdToBinary(pix1, thresh); pixDestroy(&pix1); if (!pix2) return ERROR_INT("pix2 not made", __func__, 1); *ppixb = pix2; } else { *ppixb = pixClone(pixs); } *pdewa = dewarpaCreate(1, 0, 1, 0, -1); dewarpaUseBothArrays(*pdewa, useboth); dewarpaSetCheckColumns(*pdewa, check_columns); return 0; } /*! * \brief dewarpSinglePageRun() * * \param[in] pixs any depth * \param[in] pixb 1 bpp * \param[in] dewa initialized * \param[out] ppixd dewarped result * \param[in] debug 1 for debugging output, 0 otherwise * \return 0 if OK, 1 on error list of page numbers, or NULL on error * *
 * Notes:
 *      (1) Dewarps pixs and returns the result in &pixd.
 *      (2) The 1 bpp version %pixb and %dewa are conveniently generated by
 *          dewarpSinglePageInit().
 *      (3) Non-default model parameters must be set before calling this.
 *      (4) If a model cannot be built, this returns a copy of pixs in &pixd.
 * 
*/ l_ok dewarpSinglePageRun(PIX *pixs, PIX *pixb, L_DEWARPA *dewa, PIX **ppixd, l_int32 debug) { const char *debugfile; l_int32 vsuccess, ret; L_DEWARP *dew; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixb) return ERROR_INT("pixb not defined", __func__, 1); if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (debug) lept_mkdir("lept/dewarp"); /* Generate the page model */ dew = dewarpCreate(pixb, 0); dewarpaInsertDewarp(dewa, dew); debugfile = (debug) ? "/tmp/lept/dewarp/singlepage_model.pdf" : NULL; dewarpBuildPageModel(dew, debugfile); dewarpaModelStatus(dewa, 0, &vsuccess, NULL); if (vsuccess == 0) { L_ERROR("failure to build model for vertical disparity\n", __func__); *ppixd = pixCopy(NULL, pixs); return 0; } /* Apply the page model */ debugfile = (debug) ? "/tmp/lept/dewarp/singlepage_apply.pdf" : NULL; ret = dewarpaApplyDisparity(dewa, 0, pixs, 255, 0, 0, ppixd, debugfile); if (ret) L_ERROR("invalid model; failure to apply disparity\n", __func__); return 0; } /*----------------------------------------------------------------------* * Operations on dewarpa * *----------------------------------------------------------------------*/ /*! * \brief dewarpaListPages() * * \param[in] dewa populated with dewarp structs for pages * \return 0 if OK, 1 on error list of page numbers, or NULL on error * *
 * Notes:
 *      (1) This generates two numas, stored in the dewarpa, that give:
 *          (a) the page number for each dew that has a page model.
 *          (b) the page number for each dew that has either a page
 *              model or a reference model.
 *          It can be called at any time.
 *      (2) It is called by the dewarpa serializer before writing.
 * 
*/ l_ok dewarpaListPages(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; NUMA *namodels, *napages; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); numaDestroy(&dewa->namodels); numaDestroy(&dewa->napages); namodels = numaCreate(dewa->maxpage + 1); napages = numaCreate(dewa->maxpage + 1); dewa->namodels = namodels; dewa->napages = napages; for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { if (dew->hasref == 0) numaAddNumber(namodels, dew->pageno); numaAddNumber(napages, dew->pageno); } } return 0; } /*! * \brief dewarpaSetValidModels() * * \param[in] dewa * \param[in] notests * \param[in] debug 1 to output information on invalid page models * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) A valid model must meet the rendering requirements, which
 *          include whether or not a vertical disparity model exists
 *          and conditions on curvatures for vertical and horizontal
 *          disparity models.
 *      (2) If %notests == 1, this ignores the curvature constraints
 *          and assumes that all successfully built models are valid.
 *      (3) This function does not need to be called by the application.
 *          It is called by dewarpaInsertRefModels(), which
 *          will destroy all invalid dewarps.  Consequently, to inspect
 *          an invalid dewarp model, it must be done before calling
 *          dewarpaInsertRefModels().
 * 
*/ l_ok dewarpaSetValidModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug) { l_int32 i, n, maxcurv, diffcurv, diffedge; L_DEWARP *dew; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); n = dewa->maxpage + 1; for (i = 0; i < n; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) continue; if (debug) { if (dew->hasref == 1) { L_INFO("page %d: has only a ref model\n", __func__, i); } else if (dew->vsuccess == 0) { L_INFO("page %d: no model successfully built\n", __func__, i); } else if (!notests) { maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); diffcurv = dew->maxcurv - dew->mincurv; if (dewa->useboth && !dew->hsuccess) L_INFO("page %d: useboth, but no horiz disparity\n", __func__, i); if (maxcurv > dewa->max_linecurv) L_INFO("page %d: max curvature %d > max_linecurv\n", __func__, i, diffcurv); if (diffcurv < dewa->min_diff_linecurv) L_INFO("page %d: diff curv %d < min_diff_linecurv\n", __func__, i, diffcurv); if (diffcurv > dewa->max_diff_linecurv) L_INFO("page %d: abs diff curv %d > max_diff_linecurv\n", __func__, i, diffcurv); if (dew->hsuccess) { if (L_ABS(dew->leftslope) > dewa->max_edgeslope) L_INFO("page %d: abs left slope %d > max_edgeslope\n", __func__, i, dew->leftslope); if (L_ABS(dew->rightslope) > dewa->max_edgeslope) L_INFO("page %d: abs right slope %d > max_edgeslope\n", __func__, i, dew->rightslope); diffedge = L_ABS(dew->leftcurv - dew->rightcurv); if (L_ABS(dew->leftcurv) > dewa->max_edgecurv) L_INFO("page %d: left curvature %d > max_edgecurv\n", __func__, i, dew->leftcurv); if (L_ABS(dew->rightcurv) > dewa->max_edgecurv) L_INFO("page %d: right curvature %d > max_edgecurv\n", __func__, i, dew->rightcurv); if (diffedge > dewa->max_diff_edgecurv) L_INFO("page %d: abs diff left-right curv %d > " "max_diff_edgecurv\n", __func__, i, diffedge); } } } dewarpaTestForValidModel(dewa, dew, notests); } return 0; } /*! * \brief dewarpaInsertRefModels() * * \param[in] dewa * \param[in] notests if 1, ignore curvature constraints on model * \param[in] debug 1 to output information on invalid page models * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys all dewarp models that are invalid, and then
 *          inserts reference models where possible.
 *      (2) If %notests == 1, this ignores the curvature constraints
 *          and assumes that all successfully built models are valid.
 *      (3) If useboth == 0, it uses the closest valid model within the
 *          distance and parity constraints.  If useboth == 1, it tries
 *          to use the closest allowed hvalid model; if it doesn't find
 *          an hvalid model, it uses the closest valid model.
 *      (4) For all pages without a model, this clears out any existing
 *          invalid and reference dewarps, finds the nearest valid model
 *          with the same parity, and inserts an empty dewarp with the
 *          reference page.
 *      (5) Then if it is requested to use both vertical and horizontal
 *          disparity arrays (useboth == 1), it tries to replace any
 *          hvalid == 0 model or reference with an hvalid == 1 reference.
 *      (6) The distance constraint is that any reference model must
 *          be within maxdist.  Note that with the parity constraint,
 *          no reference models will be used if maxdist < 2.
 *      (7) This function must be called, even if reference models will
 *          not be used.  It should be called after building models on all
 *          available pages, and after setting the rendering parameters.
 *      (8) If the dewa has been serialized, this function is called by
 *          dewarpaRead() when it is read back.  It is also called
 *          any time the rendering parameters are changed.
 *      (9) Note: if this has been called with useboth == 1, and useboth
 *          is reset to 0, you should first call dewarpaRestoreModels()
 *          to bring real models from the cache back to the primary array.
 * 
*/ l_ok dewarpaInsertRefModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug) { l_int32 i, j, n, val, min, distdown, distup; L_DEWARP *dew; NUMA *na, *nah; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (dewa->maxdist < 2) L_INFO("maxdist < 2; no ref models can be used\n", __func__); /* Make an indicator numa for pages with valid models. */ dewarpaSetValidModels(dewa, notests, debug); n = dewa->maxpage + 1; na = numaMakeConstant(0, n); for (i = 0; i < n; i++) { dew = dewarpaGetDewarp(dewa, i); if (dew && dew->vvalid) numaReplaceNumber(na, i, 1); } /* Remove all existing ref models and restore models from cache */ dewarpaRestoreModels(dewa); /* Move invalid models to the cache, and insert reference dewarps * for pages that need to borrow a model. * First, try to find a valid model for each page. */ for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); if (val == 1) continue; /* already has a valid model */ if ((dew = dewa->dewarp[i]) != NULL) { /* exists but is not valid; */ dewa->dewarpcache[i] = dew; /* move it to the cache */ dewa->dewarp[i] = NULL; } if (dewa->maxdist < 2) continue; /* can't use a ref model */ /* Look back for nearest model */ distdown = distup = dewa->maxdist + 1; for (j = i - 2; j >= 0 && distdown > dewa->maxdist; j -= 2) { numaGetIValue(na, j, &val); if (val == 1) distdown = i - j; } /* Look ahead for nearest model */ for (j = i + 2; j < n && distup > dewa->maxdist; j += 2) { numaGetIValue(na, j, &val); if (val == 1) distup = j - i; } min = L_MIN(distdown, distup); if (min > dewa->maxdist) continue; /* no valid model in range */ if (distdown <= distup) dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); else dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); } numaDestroy(&na); /* If a valid model will do, we're finished. */ if (dewa->useboth == 0) { dewa->modelsready = 1; /* validated */ return 0; } /* The request is useboth == 1. Now try to find an hvalid model */ nah = numaMakeConstant(0, n); for (i = 0; i < n; i++) { dew = dewarpaGetDewarp(dewa, i); if (dew && dew->hvalid) numaReplaceNumber(nah, i, 1); } for (i = 0; i < n; i++) { numaGetIValue(nah, i, &val); if (val == 1) continue; /* already has a hvalid model */ if (dewa->maxdist < 2) continue; /* can't use a ref model */ distdown = distup = 100000; for (j = i - 2; j >= 0; j -= 2) { /* look back for nearest model */ numaGetIValue(nah, j, &val); if (val == 1) { distdown = i - j; break; } } for (j = i + 2; j < n; j += 2) { /* look ahead for nearest model */ numaGetIValue(nah, j, &val); if (val == 1) { distup = j - i; break; } } min = L_MIN(distdown, distup); if (min > dewa->maxdist) continue; /* no hvalid model within range */ /* We can replace the existing valid model with an hvalid model. * If it's not a reference, save it in the cache. */ if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) { L_ERROR("dew is null for page %d!\n", __func__, i); } else { if (dew->hasref == 0) { /* not a ref model */ dewa->dewarpcache[i] = dew; /* move it to the cache */ dewa->dewarp[i] = NULL; /* must null the ptr */ } } if (distdown <= distup) /* insert the hvalid ref model */ dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); else dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); } numaDestroy(&nah); dewa->modelsready = 1; /* validated */ return 0; } /*! * \brief dewarpaStripRefModels() * * \param[in] dewa populated with dewarp structs for pages * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This examines each dew in a dewarpa, and removes
 *          all that don't have their own page model (i.e., all
 *          that have "references" to nearby pages with valid models).
 *          These references were generated by dewarpaInsertRefModels(dewa).
 * 
*/ l_ok dewarpaStripRefModels(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { if (dew->hasref) dewarpDestroy(&dewa->dewarp[i]); } } dewa->modelsready = 0; /* Regenerate the page lists */ dewarpaListPages(dewa); return 0; } /*! * \brief dewarpaRestoreModels() * * \param[in] dewa populated with dewarp structs for pages * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This puts all real models (and only real models) in the
 *          primary dewarpa array.  First remove all dewarps that are
 *          only references to other page models.  Then move all models
 *          that had been cached back into the primary dewarp array.
 *      (2) After this is done, we still need to recompute and insert
 *          the reference models before dewa->modelsready is true.
 * 
*/ l_ok dewarpaRestoreModels(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); /* Strip out ref models. Then only real models will be in the * primary dewarp array. */ dewarpaStripRefModels(dewa); /* The cache holds only real models, which are not necessarily valid. */ for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewa->dewarpcache[i]) != NULL) { if (dewa->dewarp[i]) { L_ERROR("dew in both cache and main array!: page %d\n", __func__, i); } else { dewa->dewarp[i] = dew; dewa->dewarpcache[i] = NULL; } } } dewa->modelsready = 0; /* new ref models not yet inserted */ /* Regenerate the page lists */ dewarpaListPages(dewa); return 0; } /*----------------------------------------------------------------------* * Dewarp debugging output * *----------------------------------------------------------------------*/ /*! * \brief dewarpaInfo() * * \param[in] fp * \param[in] dewa * \return 0 if OK, 1 on error */ l_ok dewarpaInfo(FILE *fp, L_DEWARPA *dewa) { l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; L_DEWARP *dew; if (!fp) return ERROR_INT("dewa not defined", __func__, 1); if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); fprintf(fp, "\nDewarpaInfo: %p\n", dewa); fprintf(fp, "nalloc = %d, maxpage = %d\n", dewa->nalloc, dewa->maxpage); fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d\n", dewa->sampling, dewa->redfactor, dewa->minlines); fprintf(fp, "maxdist = %d, useboth = %d\n", dewa->maxdist, dewa->useboth); dewarpaModelStats(dewa, &nnone, &nvsuccess, &nvvalid, &nhsuccess, &nhvalid, &nref); n = numaGetCount(dewa->napages); lept_stderr("Total number of pages with a dew = %d\n", n); lept_stderr("Number of pages without any models = %d\n", nnone); lept_stderr("Number of pages with a vert model = %d\n", nvsuccess); lept_stderr("Number of pages with a valid vert model = %d\n", nvvalid); lept_stderr("Number of pages with both models = %d\n", nhsuccess); lept_stderr("Number of pages with both models valid = %d\n", nhvalid); lept_stderr("Number of pages with a ref model = %d\n", nref); for (i = 0; i < n; i++) { numaGetIValue(dewa->napages, i, &pageno); if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) continue; lept_stderr("Page: %d\n", dew->pageno); lept_stderr(" hasref = %d, refpage = %d\n", dew->hasref, dew->refpage); lept_stderr(" nlines = %d\n", dew->nlines); lept_stderr(" w = %d, h = %d, nx = %d, ny = %d\n", dew->w, dew->h, dew->nx, dew->ny); if (dew->sampvdispar) lept_stderr(" Vertical disparity builds:\n" " (min,max,abs-diff) line curvature = (%d,%d,%d)\n", dew->mincurv, dew->maxcurv, dew->maxcurv - dew->mincurv); if (dew->samphdispar) lept_stderr(" Horizontal disparity builds:\n" " left edge slope = %d, right edge slope = %d\n" " (left,right,abs-diff) edge curvature = (%d,%d,%d)\n", dew->leftslope, dew->rightslope, dew->leftcurv, dew->rightcurv, L_ABS(dew->leftcurv - dew->rightcurv)); } return 0; } /*! * \brief dewarpaModelStats() * * \param[in] dewa * \param[out] pnnone [optional] number without any model * \param[out] pnvsuccess [optional] number with a vert model * \param[out] pnvvalid [optional] number with a valid vert model * \param[out] pnhsuccess [optional] number with both models * \param[out] pnhvalid [optional] number with both models valid * \param[out] pnref [optional] number with a reference model * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) A page without a model has no dew.  It most likely failed to
 *          generate a vertical model, and has not been assigned a ref
 *          model from a neighboring page with a valid vertical model.
 *      (2) A page has vsuccess == 1 if there is at least a model of the
 *          vertical disparity.  The model may be invalid, in which case
 *          dewarpaInsertRefModels() will stash it in the cache and
 *          attempt to replace it by a valid ref model.
 *      (3) A vvvalid model is a vertical disparity model whose parameters
 *          satisfy the constraints given in dewarpaSetValidModels().
 *      (4) A page has hsuccess == 1 if both the vertical and horizontal
 *          disparity arrays have been constructed.
 *      (5) An  hvalid model has vertical and horizontal disparity
 *          models whose parameters satisfy the constraints given
 *          in dewarpaSetValidModels().
 *      (6) A page has a ref model if it failed to generate a valid
 *          model but was assigned a vvalid or hvalid model on another
 *          page (within maxdist) by dewarpaInsertRefModel().
 *      (7) This calls dewarpaTestForValidModel(); it ignores the vvalid
 *          and hvalid fields.
 * 
*/ l_ok dewarpaModelStats(L_DEWARPA *dewa, l_int32 *pnnone, l_int32 *pnvsuccess, l_int32 *pnvvalid, l_int32 *pnhsuccess, l_int32 *pnhvalid, l_int32 *pnref) { l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; L_DEWARP *dew; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); dewarpaListPages(dewa); n = numaGetCount(dewa->napages); nnone = nref = nvsuccess = nvvalid = nhsuccess = nhvalid = 0; for (i = 0; i < n; i++) { numaGetIValue(dewa->napages, i, &pageno); dew = dewarpaGetDewarp(dewa, pageno); if (!dew) { nnone++; continue; } if (dew->hasref == 1) nref++; if (dew->vsuccess == 1) nvsuccess++; if (dew->hsuccess == 1) nhsuccess++; dewarpaTestForValidModel(dewa, dew, 0); if (dew->vvalid == 1) nvvalid++; if (dew->hvalid == 1) nhvalid++; } if (pnnone) *pnnone = nnone; if (pnref) *pnref = nref; if (pnvsuccess) *pnvsuccess = nvsuccess; if (pnvvalid) *pnvvalid = nvvalid; if (pnhsuccess) *pnhsuccess = nhsuccess; if (pnhvalid) *pnhvalid = nhvalid; return 0; } /*! * \brief dewarpaTestForValidModel() * * \param[in] dewa * \param[in] dew * \param[in] notests * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Computes validity of vertical (vvalid) model and both
 *          vertical and horizontal (hvalid) models.
 *      (2) If %notests == 1, this ignores the curvature constraints
 *          and assumes that all successfully built models are valid.
 *      (3) This is just about the models, not the rendering process,
 *          so the value of useboth is not considered here.
 * 
*/ static l_int32 dewarpaTestForValidModel(L_DEWARPA *dewa, L_DEWARP *dew, l_int32 notests) { l_int32 maxcurv, diffcurv, diffedge; if (!dewa || !dew) return ERROR_INT("dewa and dew not both defined", __func__, 1); if (notests) { dew->vvalid = dew->vsuccess; dew->hvalid = dew->hsuccess; return 0; } /* No actual model was built */ if (dew->vsuccess == 0) return 0; /* Was previously found not to have a valid model */ if (dew->hasref == 1) return 0; /* vsuccess == 1; a vertical (line) model exists. * First test that the vertical curvatures are within allowed * bounds. Note that all curvatures are signed.*/ maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); diffcurv = dew->maxcurv - dew->mincurv; if (maxcurv <= dewa->max_linecurv && diffcurv >= dewa->min_diff_linecurv && diffcurv <= dewa->max_diff_linecurv) { dew->vvalid = 1; } else { L_INFO("invalid vert model for page %d:\n", __func__, dew->pageno); #if DEBUG_INVALID_MODELS lept_stderr(" max line curv = %d, max allowed = %d\n", maxcurv, dewa->max_linecurv); lept_stderr(" diff line curv = %d, max allowed = %d\n", diffcurv, dewa->max_diff_linecurv); #endif /* DEBUG_INVALID_MODELS */ } /* If a horizontal (edge) model exists, test for validity. */ if (dew->hsuccess) { diffedge = L_ABS(dew->leftcurv - dew->rightcurv); if (L_ABS(dew->leftslope) <= dewa->max_edgeslope && L_ABS(dew->rightslope) <= dewa->max_edgeslope && L_ABS(dew->leftcurv) <= dewa->max_edgecurv && L_ABS(dew->rightcurv) <= dewa->max_edgecurv && diffedge <= dewa->max_diff_edgecurv) { dew->hvalid = 1; } else { L_INFO("invalid horiz model for page %d:\n", __func__, dew->pageno); #if DEBUG_INVALID_MODELS lept_stderr(" left edge slope = %d, max allowed = %d\n", dew->leftslope, dewa->max_edgeslope); lept_stderr(" right edge slope = %d, max allowed = %d\n", dew->rightslope, dewa->max_edgeslope); lept_stderr(" left edge curv = %d, max allowed = %d\n", dew->leftcurv, dewa->max_edgecurv); lept_stderr(" right edge curv = %d, max allowed = %d\n", dew->rightcurv, dewa->max_edgecurv); lept_stderr(" diff edge curv = %d, max allowed = %d\n", diffedge, dewa->max_diff_edgecurv); #endif /* DEBUG_INVALID_MODELS */ } } return 0; } /*! * \brief dewarpaShowArrays() * * \param[in] dewa * \param[in] scalefact on contour images; typ. 0.5 * \param[in] first first page model to render * \param[in] last last page model to render; use 0 to go to end * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates a pdf of contour plots of the disparity arrays.
 *      (2) This only shows actual models; not ref models
 * 
*/ l_ok dewarpaShowArrays(L_DEWARPA *dewa, l_float32 scalefact, l_int32 first, l_int32 last) { char buf[256]; l_int32 i, svd, shd; L_BMF *bmf; L_DEWARP *dew; PIX *pixv, *pixvs, *pixh, *pixhs = NULL, *pixt, *pixd; PIXA *pixa; if (!dewa) return ERROR_INT("dew not defined", __func__, 1); if (first < 0 || first > dewa->maxpage) return ERROR_INT("first out of bounds", __func__, 1); if (last <= 0 || last > dewa->maxpage) last = dewa->maxpage; if (last < first) return ERROR_INT("last < first", __func__, 1); lept_rmdir("lept/dewarp1"); /* temp directory for contour plots */ lept_mkdir("lept/dewarp1"); if ((bmf = bmfCreate(NULL, 8)) == NULL) L_ERROR("bmf not made; page info not displayed", __func__); lept_stderr("Generating contour plots\n"); for (i = first; i <= last; i++) { if (i && ((i % 10) == 0)) lept_stderr(" .. %d", i); dew = dewarpaGetDewarp(dewa, i); if (!dew) continue; if (dew->hasref == 1) continue; svd = shd = 0; if (dew->sampvdispar) svd = 1; if (dew->samphdispar) shd = 1; if (!svd) { L_ERROR("sampvdispar not made for page %d!\n", __func__, i); continue; } /* Generate contour plots at reduced resolution */ dewarpPopulateFullRes(dew, NULL, 0, 0); pixv = fpixRenderContours(dew->fullvdispar, 3.0f, 0.15f); pixvs = pixScaleBySampling(pixv, scalefact, scalefact); pixDestroy(&pixv); if (shd) { pixh = fpixRenderContours(dew->fullhdispar, 3.0f, 0.15f); pixhs = pixScaleBySampling(pixh, scalefact, scalefact); pixDestroy(&pixh); } dewarpMinimize(dew); /* Save side-by-side */ pixa = pixaCreate(2); pixaAddPix(pixa, pixvs, L_INSERT); if (shd) pixaAddPix(pixa, pixhs, L_INSERT); pixt = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); snprintf(buf, sizeof(buf), "Page %d", i); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0x0000ff00, L_ADD_BELOW, NULL); snprintf(buf, sizeof(buf), "/tmp/lept/dewarp1/arrays_%04d.png", i); pixWriteDebug(buf, pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixt); pixDestroy(&pixd); } bmfDestroy(&bmf); lept_stderr("\n"); lept_stderr("Generating pdf of contour plots\n"); convertFilesToPdf("/tmp/lept/dewarp1", "arrays_", 90, 1.0, L_FLATE_ENCODE, 0, "Disparity arrays", "/tmp/lept/disparity_arrays.pdf"); lept_stderr("Output written to: /tmp/lept/disparity_arrays.pdf\n"); return 0; } /*! * \brief dewarpDebug() * * \param[in] dew * \param[in] subdirs one or more subdirectories of /tmp; e.g., "dew1" * \param[in] index to help label output images; e.g., the page number * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Prints dewarp fields and generates disparity array contour images.
 *          The contour images are written to file:
 *                /tmp/[subdirs]/pixv_[index].png
 * 
*/ l_ok dewarpDebug(L_DEWARP *dew, const char *subdirs, l_int32 index) { char fname[256]; char *outdir; l_int32 svd, shd; PIX *pixv, *pixh; if (!dew) return ERROR_INT("dew not defined", __func__, 1); if (!subdirs) return ERROR_INT("subdirs not defined", __func__, 1); lept_stderr("pageno = %d, hasref = %d, refpage = %d\n", dew->pageno, dew->hasref, dew->refpage); lept_stderr("sampling = %d, redfactor = %d, minlines = %d\n", dew->sampling, dew->redfactor, dew->minlines); svd = shd = 0; if (!dew->hasref) { if (dew->sampvdispar) svd = 1; if (dew->samphdispar) shd = 1; lept_stderr("sampv = %d, samph = %d\n", svd, shd); lept_stderr("w = %d, h = %d\n", dew->w, dew->h); lept_stderr("nx = %d, ny = %d\n", dew->nx, dew->ny); lept_stderr("nlines = %d\n", dew->nlines); if (svd) { lept_stderr("(min,max,abs-diff) line curvature = (%d,%d,%d)\n", dew->mincurv, dew->maxcurv, dew->maxcurv - dew->mincurv); } if (shd) { lept_stderr("(left edge slope = %d, right edge slope = %d\n", dew->leftslope, dew->rightslope); lept_stderr("(left,right,abs-diff) edge curvature = " "(%d,%d,%d)\n", dew->leftcurv, dew->rightcurv, L_ABS(dew->leftcurv - dew->rightcurv)); } } if (!svd && !shd) { lept_stderr("No disparity arrays\n"); return 0; } dewarpPopulateFullRes(dew, NULL, 0, 0); lept_mkdir(subdirs); outdir = pathJoin("/tmp", subdirs); if (svd) { pixv = fpixRenderContours(dew->fullvdispar, 3.0f, 0.15f); snprintf(fname, sizeof(fname), "%s/pixv_%d.png", outdir, index); pixWriteDebug(fname, pixv, IFF_PNG); pixDestroy(&pixv); } if (shd) { pixh = fpixRenderContours(dew->fullhdispar, 3.0f, 0.15f); snprintf(fname, sizeof(fname), "%s/pixh_%d.png", outdir, index); pixWriteDebug(fname, pixh, IFF_PNG); pixDestroy(&pixh); } LEPT_FREE(outdir); return 0; } /*! * \brief dewarpShowResults() * * \param[in] dewa * \param[in] sa of indexed input images * \param[in] boxa crop boxes for input images; can be null * \param[in] firstpage * \param[in] lastpage * \param[in] pdfout filename * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a pdf of image pairs (before, after) for
 *          the designated set of input pages.
 *      (2) If the boxa exists, its elements are aligned with numbers
 *          in the filenames in %sa.  It is used to crop the input images.
 *          It is assumed that the dewa was generated from the cropped
 *          images.  No undercropping is applied before rendering.
 * 
*/ l_ok dewarpShowResults(L_DEWARPA *dewa, SARRAY *sa, BOXA *boxa, l_int32 firstpage, l_int32 lastpage, const char *pdfout) { char bufstr[256]; l_int32 i, modelpage; L_BMF *bmf; BOX *box; L_DEWARP *dew; PIX *pixs, *pixc, *pixd, *pixt1, *pixt2; PIXA *pixa; if (!dewa) return ERROR_INT("dewa not defined", __func__, 1); if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pdfout) return ERROR_INT("pdfout not defined", __func__, 1); if (firstpage > lastpage) return ERROR_INT("invalid first/last page numbers", __func__, 1); lept_rmdir("lept/dewarp_pdfout"); lept_mkdir("lept/dewarp_pdfout"); bmf = bmfCreate(NULL, 6); lept_stderr("Dewarping and generating s/by/s view\n"); for (i = firstpage; i <= lastpage; i++) { if (i && (i % 10 == 0)) lept_stderr(".. %d ", i); pixs = pixReadIndexed(sa, i); if (boxa) { box = boxaGetBox(boxa, i, L_CLONE); pixc = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); } else pixc = pixClone(pixs); dew = dewarpaGetDewarp(dewa, i); pixd = NULL; if (dew) { dewarpaApplyDisparity(dewa, dew->pageno, pixc, GrayInValue, 0, 0, &pixd, NULL); dewarpMinimize(dew); } pixa = pixaCreate(2); pixaAddPix(pixa, pixc, L_INSERT); if (pixd) pixaAddPix(pixa, pixd, L_INSERT); pixt1 = pixaDisplayTiledAndScaled(pixa, 32, 500, 2, 0, 35, 2); if (dew) { modelpage = (dew->hasref) ? dew->refpage : dew->pageno; snprintf(bufstr, sizeof(bufstr), "Page %d; using %d\n", i, modelpage); } else snprintf(bufstr, sizeof(bufstr), "Page %d; no dewarp\n", i); pixt2 = pixAddSingleTextblock(pixt1, bmf, bufstr, 0x0000ff00, L_ADD_BELOW, 0); snprintf(bufstr, sizeof(bufstr), "/tmp/lept/dewarp_pdfout/%05d", i); pixWriteDebug(bufstr, pixt2, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); } lept_stderr("\n"); lept_stderr("Generating pdf of result\n"); convertFilesToPdf("/tmp/lept/dewarp_pdfout", NULL, 100, 1.0, L_JPEG_ENCODE, 0, "Dewarp sequence", pdfout); lept_stderr("Output written to: %s\n", pdfout); bmfDestroy(&bmf); return 0; } leptonica-1.86.0/src/dnabasic.c000066400000000000000000001347251506303110300162670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dnabasic.c *
 *
 *      Dna creation, destruction, copy, clone, etc.
 *          L_DNA       *l_dnaCreate()
 *          L_DNA       *l_dnaCreateFromIArray()
 *          L_DNA       *l_dnaCreateFromDArray()
 *          L_DNA       *l_dnaMakeSequence()
 *          void        *l_dnaDestroy()
 *          L_DNA       *l_dnaCopy()
 *          L_DNA       *l_dnaClone()
 *          l_int32      l_dnaEmpty()
 *
 *      Dna: add/remove number and extend array
 *          l_int32      l_dnaAddNumber()
 *          static l_int32  l_dnaExtendArray()
 *          l_int32      l_dnaInsertNumber()
 *          l_int32      l_dnaRemoveNumber()
 *          l_int32      l_dnaReplaceNumber()
 *
 *      Dna accessors
 *          l_int32      l_dnaGetCount()
 *          l_int32      l_dnaSetCount()
 *          l_int32      l_dnaGetIValue()
 *          l_int32      l_dnaGetDValue()
 *          l_int32      l_dnaSetValue()
 *          l_int32      l_dnaShiftValue()
 *          l_int32     *l_dnaGetIArray()
 *          l_float64   *l_dnaGetDArray()
 *          l_int32      l_dnaGetParameters()
 *          l_int32      l_dnaSetParameters()
 *          l_int32      l_dnaCopyParameters()
 *
 *      Serialize Dna for I/O
 *          L_DNA       *l_dnaRead()
 *          L_DNA       *l_dnaReadStream()
 *          L_DNA       *l_dnaReadMem()
 *          l_int32      l_dnaWrite()
 *          l_int32      l_dnaWriteStream()
 *          l_int32      l_dnaWriteStderr()
 *          l_int32      l_dnaWriteMem()
 *
 *      Dnaa creation, destruction
 *          L_DNAA      *l_dnaaCreate()
 *          L_DNAA      *l_dnaaCreateFull()
 *          l_int32      l_dnaaTruncate()
 *          void        *l_dnaaDestroy()
 *
 *      Add Dna to Dnaa
 *          l_int32      l_dnaaAddDna()
 *          static l_int32  l_dnaaExtendArray()
 *
 *      Dnaa accessors
 *          l_int32      l_dnaaGetCount()
 *          l_int32      l_dnaaGetDnaCount()
 *          l_int32      l_dnaaGetNumberCount()
 *          L_DNA       *l_dnaaGetDna()
 *          L_DNA       *l_dnaaReplaceDna()
 *          l_int32      l_dnaaGetValue()
 *          l_int32      l_dnaaAddNumber()
 *
 *      Serialize Dnaa for I/O
 *          L_DNAA      *l_dnaaRead()
 *          L_DNAA      *l_dnaaReadStream()
 *          L_DNAA      *l_dnaaReadMem()
 *          l_int32      l_dnaaWrite()
 *          l_int32      l_dnaaWriteStream()
 *          l_int32      l_dnaaWriteMem()
 *
 *    (1) The Dna is a struct holding an array of doubles.  It can also
 *        be used to store l_int32 values, up to the full precision
 *        of int32.  Always use it whenever integers larger than a
 *        few million need to be stored.
 *
 *    (2) Always use the accessors in this file, never the fields directly.
 *
 *    (3) Storing and retrieving numbers:
 *
 *       * to append a new number to the array, use l_dnaAddNumber().  If
 *         the number is an int, it will will automatically be converted
 *         to l_float64 and stored.
 *
 *       * to reset a value stored in the array, use l_dnaSetValue().
 *
 *       * to increment or decrement a value stored in the array,
 *         use l_dnaShiftValue().
 *
 *       * to obtain a value from the array, use either l_dnaGetIValue()
 *         or l_dnaGetDValue(), depending on whether you are retrieving
 *         an integer or a float64.  This avoids doing an explicit cast,
 *         such as
 *           (a) return a l_float64 and cast it to an l_int32
 *           (b) cast the return directly to (l_float64 *) to
 *               satisfy the function prototype, as in
 *                 l_dnaGetDValue(da, index, (l_float64 *)&ival);   [ugly!]
 *
 *    (4) int <--> double conversions:
 *
 *        Conversions go automatically from l_int32 --> l_float64,
 *        without loss of precision.  You must cast (l_int32)
 *        to go from l_float64 --> l_int32 because you're truncating
 *        to the integer value.
 *
 *    (5) As with other arrays in leptonica, the l_dna has both an allocated
 *        size and a count of the stored numbers.  When you add a number, it
 *        goes on the end of the array, and causes a realloc if the array
 *        is already filled.  However, in situations where you want to
 *        add numbers randomly into an array, such as when you build a
 *        histogram, you must set the count of stored numbers in advance.
 *        This is done with l_dnaSetCount().  If you set a count larger
 *        than the allocated array, it does a realloc to the size requested.
 *
 *    (6) In situations where the data in a l_dna correspond to a function
 *        y(x), the values can be either at equal spacings in x or at
 *        arbitrary spacings.  For the former, we can represent all x values
 *        by two parameters: startx (corresponding to y[0]) and delx
 *        for the change in x for adjacent values y[i] and y[i+1].
 *        startx and delx are initialized to 0.0 and 1.0, rsp.
 *        For arbitrary spacings, we use a second l_dna, and the two
 *        l_dnas are typically denoted dnay and dnax.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #include "array_internal.h" /* Bounds on initial array size */ static const l_uint32 MaxDoubleArraySize = 100000000; /* for dna */ static const l_uint32 MaxPtrArraySize = 1000000; /* for dnaa */ static const l_int32 InitialArraySize = 50; /*!< n'importe quoi */ /* Static functions */ static l_int32 l_dnaExtendArray(L_DNA *da); static l_int32 l_dnaaExtendArray(L_DNAA *daa); /*--------------------------------------------------------------------------* * Dna creation, destruction, copy, clone, etc. * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaCreate() * * \param[in] n size of number array to be alloc'd; 0 for default * \return da, or NULL on error */ L_DNA * l_dnaCreate(l_int32 n) { L_DNA *da; if (n <= 0 || n > MaxDoubleArraySize) n = InitialArraySize; da = (L_DNA *)LEPT_CALLOC(1, sizeof(L_DNA)); if ((da->array = (l_float64 *)LEPT_CALLOC(n, sizeof(l_float64))) == NULL) { l_dnaDestroy(&da); return (L_DNA *)ERROR_PTR("double array not made", __func__, NULL); } da->nalloc = n; da->n = 0; da->refcount = 1; da->startx = 0.0; da->delx = 1.0; return da; } /*! * \brief l_dnaCreateFromIArray() * * \param[in] iarray integer array * \param[in] size of the array * \return da, or NULL on error * *
 * Notes:
 *      (1) We can't insert this int array into the l_dna, because a l_dna
 *          takes a double array.  So this just copies the data from the
 *          input array into the l_dna.  The input array continues to be
 *          owned by the caller.
 * 
*/ L_DNA * l_dnaCreateFromIArray(l_int32 *iarray, l_int32 size) { l_int32 i; L_DNA *da; if (!iarray) return (L_DNA *)ERROR_PTR("iarray not defined", __func__, NULL); if (size <= 0) return (L_DNA *)ERROR_PTR("size must be > 0", __func__, NULL); da = l_dnaCreate(size); for (i = 0; i < size; i++) l_dnaAddNumber(da, iarray[i]); return da; } /*! * \brief l_dnaCreateFromDArray() * * \param[in] darray float * \param[in] size of the array * \param[in] copyflag L_INSERT or L_COPY * \return da, or NULL on error * *
 * Notes:
 *      (1) With L_INSERT, ownership of the input array is transferred
 *          to the returned l_dna, and all %size elements are considered
 *          to be valid.
 * 
*/ L_DNA * l_dnaCreateFromDArray(l_float64 *darray, l_int32 size, l_int32 copyflag) { l_int32 i; L_DNA *da; if (!darray) return (L_DNA *)ERROR_PTR("darray not defined", __func__, NULL); if (size <= 0) return (L_DNA *)ERROR_PTR("size must be > 0", __func__, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (L_DNA *)ERROR_PTR("invalid copyflag", __func__, NULL); da = l_dnaCreate(size); if (copyflag == L_INSERT) { if (da->array) LEPT_FREE(da->array); da->array = darray; da->n = size; } else { /* just copy the contents */ for (i = 0; i < size; i++) l_dnaAddNumber(da, darray[i]); } return da; } /*! * \brief l_dnaMakeSequence() * * \param[in] startval * \param[in] increment * \param[in] size of sequence * \return l_dna of sequence of evenly spaced values, or NULL on error */ L_DNA * l_dnaMakeSequence(l_float64 startval, l_float64 increment, l_int32 size) { l_int32 i; l_float64 val; L_DNA *da; if ((da = l_dnaCreate(size)) == NULL) return (L_DNA *)ERROR_PTR("da not made", __func__, NULL); for (i = 0; i < size; i++) { val = startval + i * increment; l_dnaAddNumber(da, val); } return da; } /*! * \brief l_dnaDestroy() * * \param[in,out] pda will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the l_dna.
 *      (2) Always nulls the input ptr.
 * 
*/ void l_dnaDestroy(L_DNA **pda) { L_DNA *da; if (pda == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((da = *pda) == NULL) return; /* Decrement the ref count. If it is 0, destroy the l_dna. */ if (--da->refcount == 0) { if (da->array) LEPT_FREE(da->array); LEPT_FREE(da); } *pda = NULL; } /*! * \brief l_dnaCopy() * * \param[in] da * \return copy of da, or NULL on error * *
 * Notes:
 *      (1) This removes unused ptrs above da->n.
 * 
*/ L_DNA * l_dnaCopy(L_DNA *da) { l_int32 i; L_DNA *dac; if (!da) return (L_DNA *)ERROR_PTR("da not defined", __func__, NULL); if ((dac = l_dnaCreate(da->n)) == NULL) return (L_DNA *)ERROR_PTR("dac not made", __func__, NULL); dac->startx = da->startx; dac->delx = da->delx; for (i = 0; i < da->n; i++) l_dnaAddNumber(dac, da->array[i]); return dac; } /*! * \brief l_dnaClone() * * \param[in] da * \return ptr to same da, or NULL on error */ L_DNA * l_dnaClone(L_DNA *da) { if (!da) return (L_DNA *)ERROR_PTR("da not defined", __func__, NULL); ++da->refcount; return da; } /*! * \brief l_dnaEmpty() * * \param[in] da * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This does not change the allocation of the array.
 *          It just clears the number of stored numbers, so that
 *          the array appears to be empty.
 * 
*/ l_ok l_dnaEmpty(L_DNA *da) { if (!da) return ERROR_INT("da not defined", __func__, 1); da->n = 0; return 0; } /*--------------------------------------------------------------------------* * Dna: add/remove number and extend array * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaAddNumber() * * \param[in] da * \param[in] val float or int to be added; stored as a float * \return 0 if OK, 1 on error */ l_ok l_dnaAddNumber(L_DNA *da, l_float64 val) { l_int32 n; if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaGetCount(da); if (n >= da->nalloc) { if (l_dnaExtendArray(da)) return ERROR_INT("extension failed", __func__, 1); } da->array[n] = val; da->n++; return 0; } /*! * \brief l_dnaExtendArray() * * \param[in] da * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Doubles the size of the array.
 *      (2) The max number of doubles is 100M.
 * 
*/ static l_int32 l_dnaExtendArray(L_DNA *da) { size_t oldsize, newsize; if (!da) return ERROR_INT("da not defined", __func__, 1); if (da->nalloc > MaxDoubleArraySize) return ERROR_INT("da at maximum size; can't extend", __func__, 1); oldsize = da->nalloc * sizeof(l_float64); if (da->nalloc > MaxDoubleArraySize / 2) { newsize = MaxDoubleArraySize * sizeof(l_float64); da->nalloc = MaxDoubleArraySize; } else { newsize = 2 * oldsize; da->nalloc *= 2; } if ((da->array = (l_float64 *)reallocNew((void **)&da->array, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); return 0; } /*! * \brief l_dnaInsertNumber() * * \param[in] da * \param[in] index location in da to insert new value * \param[in] val float64 or integer to be added * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts da[i] --> da[i + 1] for all i >= %index,
 *          and then inserts %val as da[%index].
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 *
 * 
*/ l_ok l_dnaInsertNumber(L_DNA *da, l_int32 index, l_float64 val) { l_int32 i, n; if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaGetCount(da); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (n >= da->nalloc) { if (l_dnaExtendArray(da)) return ERROR_INT("extension failed", __func__, 1); } for (i = n; i > index; i--) da->array[i] = da->array[i - 1]; da->array[index] = val; da->n++; return 0; } /*! * \brief l_dnaRemoveNumber() * * \param[in] da * \param[in] index element to be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts da[i] --> da[i - 1] for all i > %index.
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 * 
*/ l_ok l_dnaRemoveNumber(L_DNA *da, l_int32 index) { l_int32 i, n; if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaGetCount(da); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } for (i = index + 1; i < n; i++) da->array[i - 1] = da->array[i]; da->n--; return 0; } /*! * \brief l_dnaReplaceNumber() * * \param[in] da * \param[in] index element to be replaced * \param[in] val new value to replace old one * \return 0 if OK, 1 on error */ l_ok l_dnaReplaceNumber(L_DNA *da, l_int32 index, l_float64 val) { l_int32 n; if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaGetCount(da); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } da->array[index] = val; return 0; } /*----------------------------------------------------------------------* * Dna accessors * *----------------------------------------------------------------------*/ /*! * \brief l_dnaGetCount() * * \param[in] da * \return count, or 0 if no numbers or on error */ l_int32 l_dnaGetCount(L_DNA *da) { if (!da) return ERROR_INT("da not defined", __func__, 0); return da->n; } /*! * \brief l_dnaSetCount() * * \param[in] da * \param[in] newcount * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %newcount <= da->nalloc, this resets da->n.
 *          Using %newcount = 0 is equivalent to l_dnaEmpty().
 *      (2) If %newcount > da->nalloc, this causes a realloc
 *          to a size da->nalloc = %newcount.
 *      (3) All the previously unused values in da are set to 0.0.
 * 
*/ l_ok l_dnaSetCount(L_DNA *da, l_int32 newcount) { if (!da) return ERROR_INT("da not defined", __func__, 1); if (newcount > da->nalloc) { if ((da->array = (l_float64 *)reallocNew((void **)&da->array, sizeof(l_float64) * da->nalloc, sizeof(l_float64) * newcount)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); da->nalloc = newcount; } da->n = newcount; return 0; } /*! * \brief l_dnaGetDValue() * * \param[in] da * \param[in] index into l_dna * \param[out] pval double value; 0.0 on error * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caller may need to check the function return value to
 *          decide if a 0.0 in the returned ival is valid.
 * 
*/ l_ok l_dnaGetDValue(L_DNA *da, l_int32 index, l_float64 *pval) { if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!da) return ERROR_INT("da not defined", __func__, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", __func__, 1); *pval = da->array[index]; return 0; } /*! * \brief l_dnaGetIValue() * * \param[in] da * \param[in] index into l_dna * \param[out] pival integer value; 0 on error * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caller may need to check the function return value to
 *          decide if a 0 in the returned ival is valid.
 * 
*/ l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival) { l_float64 val; if (!pival) return ERROR_INT("&ival not defined", __func__, 1); *pival = 0; if (!da) return ERROR_INT("da not defined", __func__, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", __func__, 1); val = da->array[index]; *pival = (l_int32)(val + L_SIGN(val) * 0.5); return 0; } /*! * \brief l_dnaSetValue() * * \param[in] da * \param[in] index to element to be set * \param[in] val to set element * \return 0 if OK; 1 on error */ l_ok l_dnaSetValue(L_DNA *da, l_int32 index, l_float64 val) { if (!da) return ERROR_INT("da not defined", __func__, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", __func__, 1); da->array[index] = val; return 0; } /*! * \brief l_dnaShiftValue() * * \param[in] da * \param[in] index to element to change relative to the current value * \param[in] diff increment if diff > 0 or decrement if diff < 0 * \return 0 if OK; 1 on error */ l_ok l_dnaShiftValue(L_DNA *da, l_int32 index, l_float64 diff) { if (!da) return ERROR_INT("da not defined", __func__, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", __func__, 1); da->array[index] += diff; return 0; } /*! * \brief l_dnaGetIArray() * * \param[in] da * \return a copy of the bare internal array, integerized * by rounding, or NULL on error *
 * Notes:
 *      (1) A copy of the array is made, because we need to
 *          generate an integer array from the bare double array.
 *          The caller is responsible for freeing the array.
 *      (2) The array size is determined by the number of stored numbers,
 *          not by the size of the allocated array in the l_dna.
 *      (3) This function is provided to simplify calculations
 *          using the bare internal array, rather than continually
 *          calling accessors on the l_dna.  It is typically used
 *          on an array of size 256.
 * 
*/ l_int32 * l_dnaGetIArray(L_DNA *da) { l_int32 i, n, ival; l_int32 *array; if (!da) return (l_int32 *)ERROR_PTR("da not defined", __func__, NULL); n = l_dnaGetCount(da); if ((array = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("array not made", __func__, NULL); for (i = 0; i < n; i++) { l_dnaGetIValue(da, i, &ival); array[i] = ival; } return array; } /*! * \brief l_dnaGetDArray() * * \param[in] da * \param[in] copyflag L_NOCOPY or L_COPY * \return either the bare internal array or a copy of it, or NULL on error * *
 * Notes:
 *      (1) If %copyflag == L_COPY, it makes a copy which the caller
 *          is responsible for freeing.  Otherwise, it operates
 *          directly on the bare array of the l_dna.
 *      (2) Very important: for L_NOCOPY, any writes to the array
 *          will be in the l_dna.  Do not write beyond the size of
 *          the count field, because it will not be accessible
 *          from the l_dna!  If necessary, be sure to set the count
 *          field to a larger number (such as the alloc size)
 *          BEFORE calling this function.  Creating with l_dnaMakeConstant()
 *          is another way to insure full initialization.
 * 
*/ l_float64 * l_dnaGetDArray(L_DNA *da, l_int32 copyflag) { l_int32 i, n; l_float64 *array; if (!da) return (l_float64 *)ERROR_PTR("da not defined", __func__, NULL); if (copyflag == L_NOCOPY) { array = da->array; } else { /* copyflag == L_COPY */ n = l_dnaGetCount(da); if ((array = (l_float64 *)LEPT_CALLOC(n, sizeof(l_float64))) == NULL) return (l_float64 *)ERROR_PTR("array not made", __func__, NULL); for (i = 0; i < n; i++) array[i] = da->array[i]; } return array; } /*! * \brief l_dnaGetParameters() * * \param[in] da * \param[out] pstartx [optional] startx * \param[out] pdelx [optional] delx * \return 0 if OK, 1 on error */ l_ok l_dnaGetParameters(L_DNA *da, l_float64 *pstartx, l_float64 *pdelx) { if (pstartx) *pstartx = 0.0; if (pdelx) *pdelx = 1.0; if (!pstartx && !pdelx) return ERROR_INT("neither &startx nor &delx are defined", __func__, 1); if (!da) return ERROR_INT("da not defined", __func__, 1); if (pstartx) *pstartx = da->startx; if (pdelx) *pdelx = da->delx; return 0; } /*! * \brief l_dnaSetParameters() * * \param[in] da * \param[in] startx x value corresponding to da[0] * \param[in] delx difference in x values for the situation where the * elements of da correspond to the evaluation of a * function at equal intervals of size %delx * \return 0 if OK, 1 on error */ l_ok l_dnaSetParameters(L_DNA *da, l_float64 startx, l_float64 delx) { if (!da) return ERROR_INT("da not defined", __func__, 1); da->startx = startx; da->delx = delx; return 0; } /*! * \brief l_dnaCopyParameters() * * \param[in] dad destination DNuma * \param[in] das source DNuma * \return 0 if OK, 1 on error */ l_ok l_dnaCopyParameters(L_DNA *dad, L_DNA *das) { l_float64 start, binsize; if (!das || !dad) return ERROR_INT("das and dad not both defined", __func__, 1); l_dnaGetParameters(das, &start, &binsize); l_dnaSetParameters(dad, start, binsize); return 0; } /*----------------------------------------------------------------------* * Serialize Dna for I/O * *----------------------------------------------------------------------*/ /*! * \brief l_dnaRead() * * \param[in] filename * \return da, or NULL on error */ L_DNA * l_dnaRead(const char *filename) { FILE *fp; L_DNA *da; if (!filename) return (L_DNA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DNA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); da = l_dnaReadStream(fp); fclose(fp); if (!da) return (L_DNA *)ERROR_PTR_1("da not read", filename, __func__, NULL); return da; } /*! * \brief l_dnaReadStream() * * \param[in] fp file stream * \return da, or NULL on error * *
 * Notes:
 *      (1) fscanf takes %lf to read a double; fprintf takes %f to write it.
 *      (2) It is OK for the dna to be empty.
 * 
*/ L_DNA * l_dnaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; l_float64 val, startx, delx; L_DNA *da; if (!fp) return (L_DNA *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, "\nL_Dna Version %d\n", &version); if (ret != 1) return (L_DNA *)ERROR_PTR("not a l_dna file", __func__, NULL); if (version != DNA_VERSION_NUMBER) return (L_DNA *)ERROR_PTR("invalid l_dna version", __func__, NULL); if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) return (L_DNA *)ERROR_PTR("invalid number of numbers", __func__, NULL); if (n < 0) return (L_DNA *)ERROR_PTR("num doubles < 0", __func__, NULL); if (n > MaxDoubleArraySize) return (L_DNA *)ERROR_PTR("too many doubles", __func__, NULL); if (n == 0) L_INFO("the dna is empty\n", __func__); if ((da = l_dnaCreate(n)) == NULL) return (L_DNA *)ERROR_PTR("da not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " [%d] = %lf\n", &index, &val) != 2) { l_dnaDestroy(&da); return (L_DNA *)ERROR_PTR("bad input data", __func__, NULL); } l_dnaAddNumber(da, val); } /* Optional data */ if (fscanf(fp, "startx = %lf, delx = %lf\n", &startx, &delx) == 2) l_dnaSetParameters(da, startx, delx); return da; } /*! * \brief l_dnaReadMem() * * \param[in] data dna serialization; in ascii * \param[in] size of data; can use strlen to get it * \return da, or NULL on error */ L_DNA * l_dnaReadMem(const l_uint8 *data, size_t size) { FILE *fp; L_DNA *da; if (!data) return (L_DNA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (L_DNA *)ERROR_PTR("stream not opened", __func__, NULL); da = l_dnaReadStream(fp); fclose(fp); if (!da) L_ERROR("dna not read\n", __func__); return da; } /*! * \brief l_dnaWrite() * * \param[in] filename * \param[in] da * \return 0 if OK, 1 on error */ l_ok l_dnaWrite(const char *filename, L_DNA *da) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!da) return ERROR_INT("da not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = l_dnaWriteStream(fp, da); fclose(fp); if (ret) return ERROR_INT_1("da not written to stream", filename, __func__, 1); return 0; } /*! * \brief l_dnaWriteStream() * * \param[in] fp file stream; use NULL to write to stderr * \param[in] da * \return 0 if OK, 1 on error */ l_ok l_dnaWriteStream(FILE *fp, L_DNA *da) { l_int32 i, n; l_float64 startx, delx; if (!da) return ERROR_INT("da not defined", __func__, 1); if (!fp) return l_dnaWriteStderr(da); n = l_dnaGetCount(da); fprintf(fp, "\nL_Dna Version %d\n", DNA_VERSION_NUMBER); fprintf(fp, "Number of numbers = %d\n", n); for (i = 0; i < n; i++) fprintf(fp, " [%d] = %f\n", i, da->array[i]); fprintf(fp, "\n"); /* Optional data */ l_dnaGetParameters(da, &startx, &delx); if (startx != 0.0 || delx != 1.0) fprintf(fp, "startx = %f, delx = %f\n", startx, delx); return 0; } /*! * \brief l_dnaWriteStrderr() * * \param[in] da * \return 0 if OK, 1 on error */ l_ok l_dnaWriteStderr(L_DNA *da) { l_int32 i, n; l_float64 startx, delx; if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaGetCount(da); lept_stderr("\nL_Dna Version %d\n", DNA_VERSION_NUMBER); lept_stderr("Number of numbers = %d\n", n); for (i = 0; i < n; i++) lept_stderr(" [%d] = %f\n", i, da->array[i]); lept_stderr("\n"); /* Optional data */ l_dnaGetParameters(da, &startx, &delx); if (startx != 0.0 || delx != 1.0) lept_stderr("startx = %f, delx = %f\n", startx, delx); return 0; } /*! * \brief l_dnaWriteMem() * * \param[out] pdata data of serialized dna; ascii * \param[out] psize size of returned data * \param[in] da * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a dna in memory and puts the result in a buffer.
 * 
*/ l_ok l_dnaWriteMem(l_uint8 **pdata, size_t *psize, L_DNA *da) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!da) return ERROR_INT("da not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = l_dnaWriteStream(fp, da); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = l_dnaWriteStream(fp, da); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*--------------------------------------------------------------------------* * Dnaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaaCreate() * * \param[in] n size of l_dna ptr array to be alloc'd 0 for default * \return daa, or NULL on error * */ L_DNAA * l_dnaaCreate(l_int32 n) { L_DNAA *daa; if (n <= 0 || n > MaxPtrArraySize) n = InitialArraySize; daa = (L_DNAA *)LEPT_CALLOC(1, sizeof(L_DNAA)); if ((daa->dna = (L_DNA **)LEPT_CALLOC(n, sizeof(L_DNA *))) == NULL) { l_dnaaDestroy(&daa); return (L_DNAA *)ERROR_PTR("l_dna ptr array not made", __func__, NULL); } daa->nalloc = n; daa->n = 0; return daa; } /*! * \brief l_dnaaCreateFull() * * \param[in] nptr size of dna ptr array to be alloc'd * \param[in] n size of individual dna arrays to be alloc'd 0 for default * \return daa, or NULL on error * *
 * Notes:
 *      (1) This allocates a dnaa and fills the array with allocated dnas.
 *          In use, after calling this function, use
 *              l_dnaaAddNumber(dnaa, index, val);
 *          to add val to the index-th dna in dnaa.
 * 
*/ L_DNAA * l_dnaaCreateFull(l_int32 nptr, l_int32 n) { l_int32 i; L_DNAA *daa; L_DNA *da; daa = l_dnaaCreate(nptr); for (i = 0; i < nptr; i++) { da = l_dnaCreate(n); l_dnaaAddDna(daa, da, L_INSERT); } return daa; } /*! * \brief l_dnaaTruncate() * * \param[in] daa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This identifies the largest index containing a dna that
 *          has any numbers within it, destroys all dna beyond that
 *          index, and resets the count.
 * 
*/ l_ok l_dnaaTruncate(L_DNAA *daa) { l_int32 i, n, nn; L_DNA *da; if (!daa) return ERROR_INT("daa not defined", __func__, 1); n = l_dnaaGetCount(daa); for (i = n - 1; i >= 0; i--) { da = l_dnaaGetDna(daa, i, L_CLONE); if (!da) continue; nn = l_dnaGetCount(da); l_dnaDestroy(&da); /* the clone */ if (nn == 0) l_dnaDestroy(&daa->dna[i]); else break; } daa->n = i + 1; return 0; } /*! * \brief l_dnaaDestroy() * * \param[in,out] pdaa will be set to null before returning * \return void */ void l_dnaaDestroy(L_DNAA **pdaa) { l_int32 i; L_DNAA *daa; if (pdaa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((daa = *pdaa) == NULL) return; for (i = 0; i < daa->n; i++) l_dnaDestroy(&daa->dna[i]); LEPT_FREE(daa->dna); LEPT_FREE(daa); *pdaa = NULL; } /*--------------------------------------------------------------------------* * Add Dna to Dnaa * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaaAddDna() * * \param[in] daa * \param[in] da to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok l_dnaaAddDna(L_DNAA *daa, L_DNA *da, l_int32 copyflag) { l_int32 n; L_DNA *dac; if (!daa) return ERROR_INT("daa not defined", __func__, 1); if (!da) return ERROR_INT("da not defined", __func__, 1); if (copyflag == L_INSERT) { dac = da; } else if (copyflag == L_COPY) { if ((dac = l_dnaCopy(da)) == NULL) return ERROR_INT("dac not made", __func__, 1); } else if (copyflag == L_CLONE) { dac = l_dnaClone(da); } else { return ERROR_INT("invalid copyflag", __func__, 1); } n = l_dnaaGetCount(daa); if (n >= daa->nalloc) { if (l_dnaaExtendArray(daa)) { if (copyflag != L_INSERT) l_dnaDestroy(&dac); return ERROR_INT("extension failed", __func__, 1); } } daa->dna[n] = dac; daa->n++; return 0; } /*! * \brief l_dnaaExtendArray() * * \param[in] daa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Doubles the number of dna ptrs.
 *      (2) The max size of the dna array is 1M ptrs.
 * 
*/ static l_int32 l_dnaaExtendArray(L_DNAA *daa) { size_t oldsize, newsize; if (!daa) return ERROR_INT("daa not defined", __func__, 1); if (daa->nalloc > MaxPtrArraySize) /* belt & suspenders */ return ERROR_INT("daa has too many ptrs", __func__, 1); oldsize = daa->nalloc * sizeof(L_DNA *); newsize = 2 * oldsize; if (newsize > 8 * MaxPtrArraySize) return ERROR_INT("newsize > 8 MB; too large", __func__, 1); if ((daa->dna = (L_DNA **)reallocNew((void **)&daa->dna, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); daa->nalloc *= 2; return 0; } /*----------------------------------------------------------------------* * DNumaa accessors * *----------------------------------------------------------------------*/ /*! * \brief l_dnaaGetCount() * * \param[in] daa * \return count number of l_dna, or 0 if no l_dna or on error */ l_int32 l_dnaaGetCount(L_DNAA *daa) { if (!daa) return ERROR_INT("daa not defined", __func__, 0); return daa->n; } /*! * \brief l_dnaaGetDnaCount() * * \param[in] daa * \param[in] index of l_dna in daa * \return count of numbers in the referenced l_dna, or 0 on error. */ l_int32 l_dnaaGetDnaCount(L_DNAA *daa, l_int32 index) { if (!daa) return ERROR_INT("daa not defined", __func__, 0); if (index < 0 || index >= daa->n) return ERROR_INT("invalid index into daa", __func__, 0); return l_dnaGetCount(daa->dna[index]); } /*! * \brief l_dnaaGetNumberCount() * * \param[in] daa * \return count total number of numbers in the l_dnaa, * or 0 if no numbers or on error */ l_int32 l_dnaaGetNumberCount(L_DNAA *daa) { L_DNA *da; l_int32 n, sum, i; if (!daa) return ERROR_INT("daa not defined", __func__, 0); n = l_dnaaGetCount(daa); for (sum = 0, i = 0; i < n; i++) { da = l_dnaaGetDna(daa, i, L_CLONE); sum += l_dnaGetCount(da); l_dnaDestroy(&da); } return sum; } /*! * \brief l_dnaaGetDna() * * \param[in] daa * \param[in] index to the index-th l_dna * \param[in] accessflag L_COPY or L_CLONE * \return l_dna, or NULL on error */ L_DNA * l_dnaaGetDna(L_DNAA *daa, l_int32 index, l_int32 accessflag) { if (!daa) return (L_DNA *)ERROR_PTR("daa not defined", __func__, NULL); if (index < 0 || index >= daa->n) return (L_DNA *)ERROR_PTR("index not valid", __func__, NULL); if (accessflag == L_COPY) return l_dnaCopy(daa->dna[index]); else if (accessflag == L_CLONE) return l_dnaClone(daa->dna[index]); else return (L_DNA *)ERROR_PTR("invalid accessflag", __func__, NULL); } /*! * \brief l_dnaaReplaceDna() * * \param[in] daa * \param[in] index to the index-th l_dna * \param[in] da insert and replace any existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Any existing l_dna is destroyed, and the input one
 *          is inserted in its place.
 *      (2) If %index is invalid, return 1 (error)
 * 
*/ l_ok l_dnaaReplaceDna(L_DNAA *daa, l_int32 index, L_DNA *da) { l_int32 n; if (!daa) return ERROR_INT("daa not defined", __func__, 1); if (!da) return ERROR_INT("da not defined", __func__, 1); n = l_dnaaGetCount(daa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); l_dnaDestroy(&daa->dna[index]); daa->dna[index] = da; return 0; } /*! * \brief l_dnaaGetValue() * * \param[in] daa * \param[in] i index of l_dna within l_dnaa * \param[in] j index into l_dna * \param[out] pval double value * \return 0 if OK, 1 on error */ l_ok l_dnaaGetValue(L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval) { l_int32 n; L_DNA *da; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!daa) return ERROR_INT("daa not defined", __func__, 1); n = l_dnaaGetCount(daa); if (i < 0 || i >= n) return ERROR_INT("invalid index into daa", __func__, 1); da = daa->dna[i]; if (j < 0 || j >= da->n) return ERROR_INT("invalid index into da", __func__, 1); *pval = da->array[j]; return 0; } /*! * \brief l_dnaaAddNumber() * * \param[in] daa * \param[in] index of l_dna within l_dnaa * \param[in] val number to be added; stored as a double * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Adds to an existing l_dna only.
 * 
*/ l_ok l_dnaaAddNumber(L_DNAA *daa, l_int32 index, l_float64 val) { l_int32 n; L_DNA *da; if (!daa) return ERROR_INT("daa not defined", __func__, 1); n = l_dnaaGetCount(daa); if (index < 0 || index >= n) return ERROR_INT("invalid index in daa", __func__, 1); da = l_dnaaGetDna(daa, index, L_CLONE); l_dnaAddNumber(da, val); l_dnaDestroy(&da); return 0; } /*----------------------------------------------------------------------* * Serialize Dna for I/O * *----------------------------------------------------------------------*/ /*! * \brief l_dnaaRead() * * \param[in] filename * \return daa, or NULL on error */ L_DNAA * l_dnaaRead(const char *filename) { FILE *fp; L_DNAA *daa; if (!filename) return (L_DNAA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DNAA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); daa = l_dnaaReadStream(fp); fclose(fp); if (!daa) return (L_DNAA *)ERROR_PTR_1("daa not read", filename, __func__, NULL); return daa; } /*! * \brief l_dnaaReadStream() * * \param[in] fp file stream * \return daa, or NULL on error * *
 * Notes:
 *      (1) It is OK for the dnaa to be empty.
 * 
*/ L_DNAA * l_dnaaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; L_DNA *da; L_DNAA *daa; if (!fp) return (L_DNAA *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, "\nL_Dnaa Version %d\n", &version); if (ret != 1) return (L_DNAA *)ERROR_PTR("not a l_dna file", __func__, NULL); if (version != DNA_VERSION_NUMBER) return (L_DNAA *)ERROR_PTR("invalid l_dnaa version", __func__, NULL); if (fscanf(fp, "Number of L_Dna = %d\n\n", &n) != 1) return (L_DNAA *)ERROR_PTR("invalid number of l_dna", __func__, NULL); if (n < 0) return (L_DNAA *)ERROR_PTR("num l_dna <= 0", __func__, NULL); if (n > MaxPtrArraySize) return (L_DNAA *)ERROR_PTR("too many l_dna", __func__, NULL); if (n == 0) L_INFO("the dnaa is empty\n", __func__); if ((daa = l_dnaaCreate(n)) == NULL) return (L_DNAA *)ERROR_PTR("daa not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "L_Dna[%d]:", &index) != 1) { l_dnaaDestroy(&daa); return (L_DNAA *)ERROR_PTR("invalid l_dna header", __func__, NULL); } if ((da = l_dnaReadStream(fp)) == NULL) { l_dnaaDestroy(&daa); return (L_DNAA *)ERROR_PTR("da not made", __func__, NULL); } l_dnaaAddDna(daa, da, L_INSERT); } return daa; } /*! * \brief l_dnaaReadMem() * * \param[in] data dnaa serialization; in ascii * \param[in] size of data; can use strlen to get it * \return daa, or NULL on error */ L_DNAA * l_dnaaReadMem(const l_uint8 *data, size_t size) { FILE *fp; L_DNAA *daa; if (!data) return (L_DNAA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (L_DNAA *)ERROR_PTR("stream not opened", __func__, NULL); daa = l_dnaaReadStream(fp); fclose(fp); if (!daa) L_ERROR("daa not read\n", __func__); return daa; } /*! * \brief l_dnaaWrite() * * \param[in] filename * \param[in] daa * \return 0 if OK, 1 on error */ l_ok l_dnaaWrite(const char *filename, L_DNAA *daa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!daa) return ERROR_INT("daa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = l_dnaaWriteStream(fp, daa); fclose(fp); if (ret) return ERROR_INT_1("daa not written to stream", filename, __func__, 1); return 0; } /*! * \brief l_dnaaWriteStream() * * \param[in] fp file stream * \param[in] daa * \return 0 if OK, 1 on error */ l_ok l_dnaaWriteStream(FILE *fp, L_DNAA *daa) { l_int32 i, n; L_DNA *da; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!daa) return ERROR_INT("daa not defined", __func__, 1); n = l_dnaaGetCount(daa); fprintf(fp, "\nL_Dnaa Version %d\n", DNA_VERSION_NUMBER); fprintf(fp, "Number of L_Dna = %d\n\n", n); for (i = 0; i < n; i++) { if ((da = l_dnaaGetDna(daa, i, L_CLONE)) == NULL) return ERROR_INT("da not found", __func__, 1); fprintf(fp, "L_Dna[%d]:", i); l_dnaWriteStream(fp, da); l_dnaDestroy(&da); } return 0; } /*! * \brief l_dnaaWriteMem() * * \param[out] pdata data of serialized dnaa; ascii * \param[out] psize size of returned data * \param[in] daa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a dnaa in memory and puts the result in a buffer.
 * 
*/ l_ok l_dnaaWriteMem(l_uint8 **pdata, size_t *psize, L_DNAA *daa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!daa) return ERROR_INT("daa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = l_dnaaWriteStream(fp, daa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = l_dnaaWriteStream(fp, daa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } leptonica-1.86.0/src/dnafunc1.c000066400000000000000000000504741506303110300162200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dnafunc1.c *
 *
 *      Rearrangements
 *          l_int32     *l_dnaJoin()
 *          l_int32     *l_dnaaFlattenToDna()
 *          L_DNA       *l_dnaSelectRange()
 *
 *      Conversion between numa and dna
 *          NUMA        *l_dnaConvertToNuma()
 *          L_DNA       *numaConvertToDna()
 *
 *      Conversion from pix data to dna
 *          L_DNA       *pixConvertDataToDna()
 *
 *      Set operations using aset (rbtree)
 *          L_ASET      *l_asetCreateFromDna()
 *          L_DNA       *l_dnaRemoveDupsByAset()
 *          L_DNA       *l_dnaUnionByAset()
 *          L_DNA       *l_dnaIntersectionByAset()
 *
 *      Hashmap operations
 *          L_HASHMAP   *l_hmapCreateFromDna()
 *          l_int32      l_dnaRemoveDupsByHmap()
 *          l_int32      l_dnaUnionByHmap()
 *          l_int32      l_dnaIntersectionByHmap()
 *          l_int32      l_dnaMakeHistoByHmap()
 *
 *      Miscellaneous operations
 *          L_DNA       *l_dnaDiffAdjValues()
 *
 *
 * We have two implementations of set operations on an array of doubles:
 *
 *   (1) Using an underlying tree (rbtree)
 *       The key for each float64 value is the value itself.
 *       No collisions can occur.  The tree is sorted by the keys.
 *       Lookup is done in O(log n) by traversing from the root,
 *       looking for the key.
 *
 *   (2) Building a hashmap from the keys (hashmap)
 *       The keys are made from each float64 by casting into a uint64.
 *       The key is then hashed into a hashtable.  Collisions of hashkeys are
 *       very rare, and the hashtable is designed to allow more than one
 *       hashitem in a table entry.  The hashitems are put in a list at
 *       each hashtable entry, which is traversed looking for the key.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "array_internal.h" /*----------------------------------------------------------------------* * Rearrangements * *----------------------------------------------------------------------*/ /*! * \brief l_dnaJoin() * * \param[in] dad dest dna; add to this one * \param[in] das [optional] source dna; add from this one * \param[in] istart starting index in das * \param[in] iend ending index in das; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (2) iend < 0 means 'read to the end'
 *      (3) if das == NULL, this is a no-op
 * 
*/ l_ok l_dnaJoin(L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend) { l_int32 n, i; l_float64 val; if (!dad) return ERROR_INT("dad not defined", __func__, 1); if (!das) return 0; if (istart < 0) istart = 0; n = l_dnaGetCount(das); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { l_dnaGetDValue(das, i, &val); if (l_dnaAddNumber(dad, val) == 1) { L_ERROR("failed to add double at i = %d\n", __func__, i); return 1; } } return 0; } /*! * \brief l_dnaaFlattenToDna() * * \param[in] daa * \return dad, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the dnaa to a dna, by joining successively
 *          each dna in the dnaa.
 *      (2) It leaves the input dnaa unchanged.
 * 
*/ L_DNA * l_dnaaFlattenToDna(L_DNAA *daa) { l_int32 i, nalloc; L_DNA *da, *dad; L_DNA **array; if (!daa) return (L_DNA *)ERROR_PTR("daa not defined", __func__, NULL); nalloc = daa->nalloc; array = daa->dna; dad = l_dnaCreate(0); for (i = 0; i < nalloc; i++) { da = array[i]; if (!da) continue; l_dnaJoin(dad, da, 0, -1); } return dad; } /*! * \brief l_dnaSelectRange() * * \param[in] das * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \return dad, or NULL on error */ L_DNA * l_dnaSelectRange(L_DNA *das, l_int32 first, l_int32 last) { l_int32 n, i; l_float64 dval; L_DNA *dad; if (!das) return (L_DNA *)ERROR_PTR("das not defined", __func__, NULL); if ((n = l_dnaGetCount(das)) == 0) { L_WARNING("das is empty\n", __func__); return l_dnaCopy(das); } first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (L_DNA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (L_DNA *)ERROR_PTR("first > last", __func__, NULL); dad = l_dnaCreate(last - first + 1); for (i = first; i <= last; i++) { l_dnaGetDValue(das, i, &dval); l_dnaAddNumber(dad, dval); } return dad; } /*----------------------------------------------------------------------* * Conversion between numa and dna * *----------------------------------------------------------------------*/ /*! * \brief l_dnaConvertToNuma() * * \param[in] da * \return na, or NULL on error */ NUMA * l_dnaConvertToNuma(L_DNA *da) { l_int32 i, n; l_float64 val; NUMA *na; if (!da) return (NUMA *)ERROR_PTR("da not defined", __func__, NULL); n = l_dnaGetCount(da); na = numaCreate(n); for (i = 0; i < n; i++) { l_dnaGetDValue(da, i, &val); numaAddNumber(na, val); } return na; } /*! * \brief numaConvertToDna * * \param[in] na * \return da, or NULL on error */ L_DNA * numaConvertToDna(NUMA *na) { l_int32 i, n; l_float32 val; L_DNA *da; if (!na) return (L_DNA *)ERROR_PTR("na not defined", __func__, NULL); n = numaGetCount(na); da = l_dnaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); l_dnaAddNumber(da, val); } return da; } /*----------------------------------------------------------------------* * Conversion from pix data to dna * *----------------------------------------------------------------------*/ /*! * \brief pixConvertDataToDna() * * \param[in] pix 32 bpp RGB(A) * \return da, or NULL on error * *
 * Notes:
 *      (1) This writes the RGBA pixel values into the dna, in row-major order.
 * 
*/ L_DNA * pixConvertDataToDna(PIX *pix) { l_int32 i, j, w, h, wpl; l_uint32 *data, *line; L_DNA *da; if (!pix) return (L_DNA *)ERROR_PTR("pix not defined", __func__, NULL); if (pixGetDepth(pix) != 32) return (L_DNA *)ERROR_PTR("pix not 32 bpp", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); data = pixGetData(pix); wpl = pixGetWpl(pix); da = l_dnaCreate(w * h); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) l_dnaAddNumber(da, (l_float64)line[j]); } return da; } /*----------------------------------------------------------------------* * Set operations using aset (rbtree) * *----------------------------------------------------------------------*/ /*! * \brief l_asetCreateFromDna() * * \param[in] da source dna * \return set using the doubles in %da as keys */ L_ASET * l_asetCreateFromDna(L_DNA *da) { l_int32 i, n; l_float64 val; L_ASET *set; RB_TYPE key; if (!da) return (L_ASET *)ERROR_PTR("da not defined", __func__, NULL); set = l_asetCreate(L_FLOAT_TYPE); n = l_dnaGetCount(da); for (i = 0; i < n; i++) { l_dnaGetDValue(da, i, &val); key.ftype = val; l_asetInsert(set, key); } return set; } /*! * \brief l_dnaRemoveDupsByAset() * * \param[in] das * \param[out] pdad with duplicated removed * \return 0 if OK; 1 on error */ l_ok l_dnaRemoveDupsByAset(L_DNA *das, L_DNA **pdad) { l_int32 i, n; l_float64 val; L_DNA *dad; L_ASET *set; RB_TYPE key; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!das) return ERROR_INT("das not defined", __func__, 1); set = l_asetCreate(L_FLOAT_TYPE); dad = l_dnaCreate(0); *pdad = dad; n = l_dnaGetCount(das); for (i = 0; i < n; i++) { l_dnaGetDValue(das, i, &val); key.ftype = val; if (!l_asetFind(set, key)) { l_dnaAddNumber(dad, val); l_asetInsert(set, key); } } l_asetDestroy(&set); return 0; } /*! * \brief l_dnaUnionByAset() * * \param[in] da1 * \param[in] da2 * \param[out] pdad union of the two arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See sarrayUnionByAset() for the approach.
 *      (2) Here, the key in building the sorted tree is the number itself.
 *      (3) Operations using an underlying tree are O(nlogn), which is
 *          typically less efficient than hashing, which is O(n).
 * 
*/ l_ok l_dnaUnionByAset(L_DNA *da1, L_DNA *da2, L_DNA **pdad) { L_DNA *da3; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); if (!da1) return ERROR_INT("da1 not defined", __func__, 1); if (!da2) return ERROR_INT("da2 not defined", __func__, 1); /* Join */ da3 = l_dnaCopy(da1); if (l_dnaJoin(da3, da2, 0, -1) == 1) { l_dnaDestroy(&da3); return ERROR_INT("join failed for da3", __func__, 1); } /* Eliminate duplicates */ l_dnaRemoveDupsByAset(da3, pdad); l_dnaDestroy(&da3); return 0; } /*! * \brief l_dnaIntersectionByAset() * * \param[in] da1 * \param[in] da2 * \param[out] pdad intersection of the two arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See sarrayIntersection() for the approach.
 *      (2) Here, the key in building the sorted tree is the number itself.
 *      (3) Operations using an underlying tree are O(nlogn), which is
 *          typically less efficient than hashing, which is O(n).
 * 
*/ l_ok l_dnaIntersectionByAset(L_DNA *da1, L_DNA *da2, L_DNA **pdad) { l_int32 n1, n2, i, n; l_float64 val; L_ASET *set1, *set2; RB_TYPE key; L_DNA *da_small, *da_big, *dad; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!da1) return ERROR_INT("&da1 not defined", __func__, 1); if (!da2) return ERROR_INT("&da2 not defined", __func__, 1); /* Put the elements of the largest array into a set */ n1 = l_dnaGetCount(da1); n2 = l_dnaGetCount(da2); da_small = (n1 < n2) ? da1 : da2; /* do not destroy da_small */ da_big = (n1 < n2) ? da2 : da1; /* do not destroy da_big */ set1 = l_asetCreateFromDna(da_big); /* Build up the intersection of doubles */ dad = l_dnaCreate(0); *pdad = dad; n = l_dnaGetCount(da_small); set2 = l_asetCreate(L_FLOAT_TYPE); for (i = 0; i < n; i++) { l_dnaGetDValue(da_small, i, &val); key.ftype = val; if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { l_dnaAddNumber(dad, val); l_asetInsert(set2, key); } } l_asetDestroy(&set1); l_asetDestroy(&set2); return 0; } /*--------------------------------------------------------------------------* * Hashmap operations * *--------------------------------------------------------------------------*/ /*! * \brief l_hmapCreateFromDna() * * \param[in] da input dna * \return hmap hashmap, or NULL on error * *
 *  Notes:
 *       (1) Derive the hash keys from the values in %da.
 *       (2) The indices into %da are stored in the val field of the hashitems.
 *           This is necessary so that %hmap and %da can be used together.
 * 
*/ L_HASHMAP * l_hmapCreateFromDna(L_DNA *da) { l_int32 i, n; l_uint64 key; l_float64 dval; L_HASHMAP *hmap; if (!da) return (L_HASHMAP *)ERROR_PTR("da not defined", __func__, NULL); n = l_dnaGetCount(da); hmap = l_hmapCreate(0, 0); for (i = 0; i < n; i++) { l_dnaGetDValue(da, i, &dval); l_hashFloat64ToUint64(dval, &key); l_hmapLookup(hmap, key, i, L_HMAP_CREATE); } return hmap; } /*! * \brief l_dnaRemoveDupsByHmap() * * \param[in] das * \param[out] pdad hash set of unique values * \param[out] phmap [optional] hashmap used for lookup * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Generates the set of (unique) values from %das.
 *       (2) The values in the hashitems are indices into %das.
 * 
*/ l_ok l_dnaRemoveDupsByHmap(L_DNA *das, L_DNA **pdad, L_HASHMAP **phmap) { l_int32 i, tabsize; l_float64 dval; L_DNA *dad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (phmap) *phmap = NULL; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!das) return ERROR_INT("das not defined", __func__, 1); /* Traverse the hashtable lists */ if ((hmap = l_hmapCreateFromDna(das)) == NULL) return ERROR_INT("hmap not made", __func__, 1); dad = l_dnaCreate(0); *pdad = dad; tabsize = hmap->tabsize; for (i = 0; i < tabsize; i++) { hitem = hmap->hashtab[i]; while (hitem) { l_dnaGetDValue(das, hitem->val, &dval); l_dnaAddNumber(dad, dval); hitem = hitem->next; } } if (phmap) *phmap = hmap; else l_hmapDestroy(&hmap); return 0; } /*! * \brief l_dnaUnionByHmap() * * \param[in] da1 * \param[in] da2 * \param[out] pdad union of the array values * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Make dna with numbers found in either of the input arrays.
 * 
*/ l_ok l_dnaUnionByHmap(L_DNA *da1, L_DNA *da2, L_DNA **pdad) { L_DNA *da3; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!da1) return ERROR_INT("da1 not defined", __func__, 1); if (!da2) return ERROR_INT("da2 not defined", __func__, 1); da3 = l_dnaCopy(da1); if (l_dnaJoin(da3, da2, 0, -1) == 1) { l_dnaDestroy(&da3); return ERROR_INT("da3 join failed", __func__, 1); } l_dnaRemoveDupsByHmap(da3, pdad, NULL); l_dnaDestroy(&da3); return 0; } /*! * \brief l_dnaIntersectionByHmap() * * \param[in] da1 * \param[in] da2 * \param[out] pdad intersection of the array values * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Make dna with numbers common to both input arrays.
 *       (2) Use the values in the dna as the hash keys.
 * 
*/ l_ok l_dnaIntersectionByHmap(L_DNA *da1, L_DNA *da2, L_DNA **pdad) { l_int32 i, n1, n2, n; l_uint64 key; l_float64 dval; L_DNA *da_small, *da_big, *dad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!da1) return ERROR_INT("da1 not defined", __func__, 1); if (!da2) return ERROR_INT("da2 not defined", __func__, 1); /* Make a hashmap for the elements of the biggest array */ n1 = l_dnaGetCount(da1); n2 = l_dnaGetCount(da2); da_small = (n1 < n2) ? da1 : da2; /* do not destroy da_small */ da_big = (n1 < n2) ? da2 : da1; /* do not destroy da_big */ if ((hmap = l_hmapCreateFromDna(da_big)) == NULL) return ERROR_INT("hmap not made", __func__, 1); /* Go through the smallest array, doing a lookup of its dval into * the big array hashmap. If an hitem is returned, check the count. * If the count is 0, ignore; otherwise, add the dval to the * output dad and set the count in the hitem to 0, indicating * that the dval has already been added. */ dad = l_dnaCreate(0); *pdad = dad; n = l_dnaGetCount(da_small); for (i = 0; i < n; i++) { l_dnaGetDValue(da_small, i, &dval); l_hashFloat64ToUint64(dval, &key); hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK); if (!hitem || hitem->count == 0) continue; l_dnaAddNumber(dad, dval); hitem->count = 0; } l_hmapDestroy(&hmap); return 0; } /*! * \brief l_dnaMakeHistoByHmap() * * \param[in] das * \param[out] pdav array (set) of unique values * \param[out] pdac array of counts, aligned with the array of values * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Generates a histogram represented by two aligned arrays:
 *           value and count.
 * 
*/ l_ok l_dnaMakeHistoByHmap(L_DNA *das, L_DNA **pdav, L_DNA **pdac) { l_int32 i, tabsize; l_float64 dval; L_DNA *dac, *dav; L_HASHITEM *hitem; L_HASHMAP *hmap; if (pdav) *pdav = NULL; if (pdac) *pdac = NULL; if (!das) return ERROR_INT("das not defined", __func__, 1); if (!pdav) return ERROR_INT("&dav not defined", __func__, 1); if (!pdac) return ERROR_INT("&dac not defined", __func__, 1); /* Traverse the hashtable lists */ if ((hmap = l_hmapCreateFromDna(das)) == NULL) return ERROR_INT("hmap not made", __func__, 1); dav = l_dnaCreate(0); *pdav = dav; dac = l_dnaCreate(0); *pdac = dac; tabsize = hmap->tabsize; for (i = 0; i < tabsize; i++) { hitem = hmap->hashtab[i]; while (hitem) { l_dnaGetDValue(das, hitem->val, &dval); l_dnaAddNumber(dav, dval); l_dnaAddNumber(dac, hitem->count); hitem = hitem->next; } } l_hmapDestroy(&hmap); return 0; } /*----------------------------------------------------------------------* * Miscellaneous operations * *----------------------------------------------------------------------*/ /*! * \brief l_dnaDiffAdjValues() * * \param[in] das input l_dna * \return dad of difference values val[i+1] - val[i], * or NULL on error */ L_DNA * l_dnaDiffAdjValues(L_DNA *das) { l_int32 i, n, prev, cur; L_DNA *dad; if (!das) return (L_DNA *)ERROR_PTR("das not defined", __func__, NULL); n = l_dnaGetCount(das); dad = l_dnaCreate(n - 1); prev = 0; for (i = 1; i < n; i++) { l_dnaGetIValue(das, i, &cur); l_dnaAddNumber(dad, cur - prev); prev = cur; } return dad; } leptonica-1.86.0/src/dnahash.c000066400000000000000000000131701506303110300161170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dnahash.c *
 *      Dnahash creation, destruction
 *          L_DNAHASH   *l_dnaHashCreate()
 *          void         l_dnaHashDestroy()
 *
 *      Dnahash accessor and modifier
 *          L_DNA       *l_dnaHashGetDna()
 *          l_int32      l_dnaHashAdd()
 *
 *    (1) The DnaHash is an array of Dna.  It is a simple method used for
 *        fast lookup of templates in the jbig2 classifier (jbclass.c).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "array_internal.h" /*--------------------------------------------------------------------------* * Dnahash creation and destruction * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaHashCreate() * * \param[in] nbuckets the number of buckets in the hash table, * which should be prime. * \param[in] initsize initial size of each allocated dna; 0 for default * \return ptr to new dnahash, or NULL on error * *
 * Notes:
 *      (1) If %nbuckets is not prime, use the next largest prime.
 *      (2) In use, stored dna are created by l_dnaHashAdd().
 * 
*/ L_DNAHASH * l_dnaHashCreate(l_int32 nbuckets, l_int32 initsize) { l_int32 is_prime; l_uint32 newsize; L_DNAHASH *dahash; if (nbuckets <= 0) return (L_DNAHASH *)ERROR_PTR("negative hash size", __func__, NULL); lept_isPrime(nbuckets, &is_prime, NULL); if (!is_prime) { findNextLargerPrime(nbuckets, &newsize); nbuckets = newsize; } dahash = (L_DNAHASH *)LEPT_CALLOC(1, sizeof(L_DNAHASH)); if ((dahash->dna = (L_DNA **)LEPT_CALLOC(nbuckets, sizeof(L_DNA *))) == NULL) { LEPT_FREE(dahash); return (L_DNAHASH *)ERROR_PTR("dna ptr array not made", __func__, NULL); } dahash->nbuckets = nbuckets; dahash->initsize = initsize; return dahash; } /*! * \brief l_dnaHashDestroy() * * \param[in,out] pdahash will be set to null before returning * \return void */ void l_dnaHashDestroy(L_DNAHASH **pdahash) { L_DNAHASH *dahash; l_int32 i; if (pdahash == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((dahash = *pdahash) == NULL) return; for (i = 0; i < dahash->nbuckets; i++) l_dnaDestroy(&dahash->dna[i]); LEPT_FREE(dahash->dna); LEPT_FREE(dahash); *pdahash = NULL; } /*--------------------------------------------------------------------------* * Dnahash accessor and modifier * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaHashGetDna() * * \param[in] dahash * \param[in] key key to be hashed into a bucket number * \param[in] copyflag L_NOCOPY, L_COPY, L_CLONE * \return ptr to dna */ L_DNA * l_dnaHashGetDna(L_DNAHASH *dahash, l_uint64 key, l_int32 copyflag) { l_int32 bucket; L_DNA *da; if (!dahash) return (L_DNA *)ERROR_PTR("dahash not defined", __func__, NULL); bucket = key % dahash->nbuckets; da = dahash->dna[bucket]; if (da) { if (copyflag == L_NOCOPY) return da; else if (copyflag == L_COPY) return l_dnaCopy(da); else return l_dnaClone(da); } else return NULL; } /*! * \brief l_dnaHashAdd() * * \param[in] dahash * \param[in] key key to be hashed into a bucket number * \param[in] value float value to be appended to the specific dna * \return 0 if OK; 1 on error */ l_ok l_dnaHashAdd(L_DNAHASH *dahash, l_uint64 key, l_float64 value) { l_int32 bucket; L_DNA *da; if (!dahash) return ERROR_INT("dahash not defined", __func__, 1); bucket = key % dahash->nbuckets; da = dahash->dna[bucket]; if (!da) { if ((da = l_dnaCreate(dahash->initsize)) == NULL) return ERROR_INT("da not made", __func__, 1); dahash->dna[bucket] = da; } l_dnaAddNumber(da, value); return 0; } leptonica-1.86.0/src/dnahash_remnant.c.notused000066400000000000000000000746101506303110300213310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file dnahash_remnant.c.notused *
 *
 *                                     NOTE
 *       ==================================================================
 *       This code has been retired from the library.  It is just
 *       documentation.  It contains dnahash functionality that is no
 *       longer in use.  The only current use of dnahash (in dnahash.c)
 *       is for fast template lookup in the jbig2 classifier (jbclass.c).
 *
 *       The functions in this file hash strings, points and doubles.
 *       Most of them have been replaced by analogous ones using the more
 *       general hashmap.  They are saved here for pedagogical purposes;
 *       mostly, to show how misguided one can be trying to implement a
 *       general hashing function using only an array of doubles.  (Yes, it can
 *       be done, but it's a lot of work for relatively little functionality.)
 *
 *       The new hashmap (in hashmap.c) has a much simpler lookup and
 *       add mechanism.  It also has a rehashing function to allow the hash
 *       array to grow as items are added.  Unlike the simple dnahash,
 *       the hashmap stores the key in the hashitem, so it doesn't require
 *       an auxiliary array to do lookup with checking and creating.
 *       (It does however require the auxiliary array to retrieve the
 *       original data, which is not stored in the hashitem.  This may
 *       be changed in the future.)
 *       ==================================================================
 *
 *      DnaHash: Accessors
 *          l_int32      l_dnaHashGetCount()
 *          l_int32      l_dnaHashGetTotalCount()
 *
 *      Set operations on dna
 *          L_DNAHASH   *l_dnaHashCreateFromDna()
 *          l_int32      l_dnaRemoveDupsByHash()
 *          l_int32      l_dnaMakeHistoByHash()
 *          L_DNA       *l_dnaIntersectionByHash()
 *          l_int32      l_dnaFindValByHash()
 *
 *      Set operations on pta
 *           PTA        *ptaUnionByHash()
 *           l_int32     ptaRemoveDupsByHash()
 *           PTA        *ptaIntersectionByHash();
 *           l_int32     ptaFindPtByHash()
 *           L_DNAHASH  *l_dnaHashCreateFromPta()
 *
 *      Set operations on sarray
 *          l_int32     sarrayRemoveDupsByHash()
 *          SARRAY     *sarrayIntersectionByHash()
 *          l_int32     sarrayFindStringByHash()
 *          L_DNAHASH  *l_dnaHashCreateFromSarray()
 *
 *    (1) The DnaHash is an array of Dna.  It can be used for fast
 *        storage and lookup for sets and maps.  If the set or map
 *        is on a Dna itself, the hash can be a simple casting from
 *        a double to a l_uint64. For a string or a (x,y) point, we
 *        use a hash to a l_uint64.  The result of the hash is
 *        a "key", which is then used with the mod function to select
 *        which Dna array is to be used.
 *    (2) The number of arrays in a DnaHash is a prime number.
 *        If there are N items, we set up the DnaHash array to have
 *        approximately N/20 Dna, so the average size of these arrays
 *        will be about 20 when fully populated.  The number 20 was
 *        found empirically to be in a broad maximum of efficiency.
 *    (3) Note that the word "hash" is overloaded.  There are actually
 *        two hashing steps: the first hashes the object to a l_uint64,
 *        called the "key", and the second uses the mod function to
 *        "hash" the "key" to the index of a particular Dna in the
 *        DnaHash array.
 *    (4) Insertion and lookup time for DnaHash is O(1).  Hash collisions
 *        into the dna array are expected (we might choose to have an average
 *        of 20 for each key).  This can be contrasted with using rbtree
 *        for sets and maps, where insertion and lookup are O(logN).
 *    (5) Hash functions that map points and strings to l_uint64 are
 *        given in utils1.c.
 *    (6) This is a very simple implementation, that expects that you
 *        know approximately (i.e., within a factor of 2 or 3) how many
 *        items are to be stored when you initialize the DnaHash.
 *        It cannot modify the size of the Dna array as the occupation grows.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*--------------------------------------------------------------------------* * Dna hash: Accessors and modifiers * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaHashGetCount() * * \param[in] dahash * \return nbuckets allocated, or 0 on error */ l_int32 l_dnaHashGetCount(L_DNAHASH *dahash) { if (!dahash) return ERROR_INT("dahash not defined", __func__, 0); return dahash->nbuckets; } /*! * \brief l_dnaHashGetTotalCount() * * \param[in] dahash * \return n number of numbers in all dna, or 0 on error */ l_int32 l_dnaHashGetTotalCount(L_DNAHASH *dahash) { l_int32 i, n; L_DNA *da; if (!dahash) return ERROR_INT("dahash not defined", __func__, 0); for (i = 0, n = 0; i < dahash->nbuckets; i++) { da = l_dnaHashGetDna(dahash, i, L_NOCOPY); if (da) n += l_dnaGetCount(da); } return n; } /*--------------------------------------------------------------------------* * Set operations on dna using hashing * *--------------------------------------------------------------------------*/ /*! * \brief l_dnaHashCreateFromDna() * * \param[in] da * \return dahash if OK; 1 on error * *
 * Notes:
 *      (1) The values stored in the %dahash are indices into %da;
 *          %dahash has no use without %da.
 * 
*/ L_DNAHASH * l_dnaHashCreateFromDna(L_DNA *da) { l_int32 i, n; l_uint32 nsize; l_uint64 key; l_float64 val; L_DNAHASH *dahash; if (!da) return (L_DNAHASH *)ERROR_PTR("da not defined", __func__, NULL); n = l_dnaGetCount(da); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ dahash = l_dnaHashCreate(nsize, 8); for (i = 0; i < n; i++) { l_dnaGetDValue(da, i, &val); l_dnaHashAdd(dahash, (l_uint64)val, (l_float64)i); } return dahash; } /*! * \brief l_dnaRemoveDupsByHash() * * \param[in] das * \param[out] pdad hash set * \param[out] pdahash [optional] dnahash used for lookup * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Generates a dna with unique values.
 *      (2) The dnahash is built up with dad to assure uniqueness.
 *          It can be used to find if an element is in the set:
 *              l_dnaFindValByHash(dad, dahash, val, &index)
 * 
*/ l_ok l_dnaRemoveDupsByHash(L_DNA *das, L_DNA **pdad, L_DNAHASH **pdahash) { l_int32 i, n, index, items; l_uint32 nsize; l_uint64 key; l_float64 val; L_DNA *dad; L_DNAHASH *dahash; if (pdahash) *pdahash = NULL; if (!pdad) return ERROR_INT("&dad not defined", __func__, 1); *pdad = NULL; if (!das) return ERROR_INT("das not defined", __func__, 1); n = l_dnaGetCount(das); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ dahash = l_dnaHashCreate(nsize, 8); dad = l_dnaCreate(n); *pdad = dad; for (i = 0, items = 0; i < n; i++) { l_dnaGetDValue(das, i, &val); l_dnaFindValByHash(dad, dahash, val, &index); if (index < 0) { /* not found */ l_dnaHashAdd(dahash, (l_uint64)val, (l_float64)items); l_dnaAddNumber(dad, val); items++; } } if (pdahash) *pdahash = dahash; else l_dnaHashDestroy(&dahash); return 0; } /*! * \brief l_dnaMakeHistoByHash() * * \param[in] das * \param[out] pdahash hash map: val --> index * \param[out] pdav [optional] array of values: index --> val * \param[out] pdac [optional] histo array of counts: index --> count * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Generates and returns a dna of occurrences (histogram),
 *          an aligned dna of values, and an associated hashmap.
 *          The hashmap takes %dav and a value, and points into the
 *          histogram in %dac.
 *      (2) The dna of values, %dav, is aligned with the histogram %dac,
 *          and is needed for fast lookup.  It is a hash set, because
 *          the values are unique.
 *      (3) If you only need to make a histogram and get the number of
 *          non-zero entries, here are two methods:
 *          (a) l_dnaMakeHistoByHash(da, &dahash, NULL, NULL);
 *              count = l_dnaHashGetTotalCount(dahash);
 *          (b) l_dnaRemoveDupsByHash(da, &da_nodups, NULL);
                count = l_dnaGetCount(da_nodups);
 *      (4) Lookup is simple:
 *              l_dnaFindValByHash(dav, dahash, val, &index);
 *              if (index >= 0)
 *                  l_dnaGetIValue(dac, index, &icount);
 *              else
 *                  icount = 0;
 * 
*/ l_ok l_dnaMakeHistoByHash(L_DNA *das, L_DNAHASH **pdahash, L_DNA **pdav, L_DNA **pdac) { l_int32 i, n, nitems, index, count; l_uint32 nsize; l_uint64 key; l_float64 val; L_DNA *dac, *dav; L_DNAHASH *dahash; if (pdahash) *pdahash = NULL; if (pdac) *pdac = NULL; if (pdav) *pdav = NULL; if (!pdahash) return ERROR_INT("&dahash not defined", __func__, 1); if (!das) return ERROR_INT("das not defined", __func__, 1); if ((n = l_dnaGetCount(das)) == 0) return ERROR_INT("no data in das", __func__, 1); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ dahash = l_dnaHashCreate(nsize, 8); dac = l_dnaCreate(n); /* histogram */ dav = l_dnaCreate(n); /* the values */ for (i = 0, nitems = 0; i < n; i++) { l_dnaGetDValue(das, i, &val); /* Is this value already stored in dav? */ l_dnaFindValByHash(dav, dahash, val, &index); if (index >= 0) { /* found */ l_dnaGetIValue(dac, (l_float64)index, &count); l_dnaSetValue(dac, (l_float64)index, count + 1); } else { /* not found */ l_dnaHashAdd(dahash, (l_uint64)val, (l_float64)nitems); l_dnaAddNumber(dav, val); l_dnaAddNumber(dac, 1); nitems++; } } *pdahash = dahash; if (pdac) *pdac = dac; else l_dnaDestroy(&dac); if (pdav) *pdav = dav; else l_dnaDestroy(&dav); return 0; } /*! * \brief l_dnaIntersectionByHash() * * \param[in] da1, da2 * \return dad intersection of the number arrays, or NULL on error * *
 * Notes:
 *      (1) This uses the same method for building the intersection set
 *          as ptaIntersectionByHash() and sarrayIntersectionByHash().
 * 
*/ L_DNA * l_dnaIntersectionByHash(L_DNA *da1, L_DNA *da2) { l_int32 n1, n2, nsmall, nbuckets, i, index1, index2; l_uint32 nsize2; l_uint64 key; l_float64 val; L_DNAHASH *dahash1, *dahash2; L_DNA *da_small, *da_big, *dad; if (!da1) return (L_DNA *)ERROR_PTR("da1 not defined", __func__, NULL); if (!da2) return (L_DNA *)ERROR_PTR("da2 not defined", __func__, NULL); /* Put the elements of the biggest array into a dnahash */ n1 = l_dnaGetCount(da1); n2 = l_dnaGetCount(da2); da_small = (n1 < n2) ? da1 : da2; /* do not destroy da_small */ da_big = (n1 < n2) ? da2 : da1; /* do not destroy da_big */ dahash1 = l_dnaHashCreateFromDna(da_big); /* Build up the intersection of numbers. Add to %dad * if the number is in da_big (using dahash1) but hasn't * yet been seen in the traversal of da_small (using dahash2). */ dad = l_dnaCreate(0); nsmall = l_dnaGetCount(da_small); findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ dahash2 = l_dnaHashCreate(nsize2, 0); nbuckets = l_dnaHashGetCount(dahash2); for (i = 0; i < nsmall; i++) { l_dnaGetDValue(da_small, i, &val); l_dnaFindValByHash(da_big, dahash1, val, &index1); if (index1 >= 0) { /* found */ l_dnaFindValByHash(da_small, dahash2, val, &index2); if (index2 == -1) { /* not found */ l_dnaAddNumber(dad, val); l_dnaHashAdd(dahash2, (l_uint64)val, (l_float64)i); } } } l_dnaHashDestroy(&dahash1); l_dnaHashDestroy(&dahash2); return dad; } /*! * \brief l_dnaFindValByHash() * * \param[in] da * \param[in] dahash containing indices into %da * \param[in] val searching for this number in %da * \param[out] pindex index into da if found; -1 otherwise * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Algo: hash %val into a key; hash the key to get the dna
 *                in %dahash (that holds indices into %da); traverse
 *                the dna of indices looking for %val in %da.
 * 
*/ l_ok l_dnaFindValByHash(L_DNA *da, L_DNAHASH *dahash, l_float64 val, l_int32 *pindex) { l_int32 i, nbuckets, nvals, indexval; l_float64 vali; l_uint64 key; L_DNA *da1; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = -1; if (!da) return ERROR_INT("da not defined", __func__, 1); if (!dahash) return ERROR_INT("dahash not defined", __func__, 1); nbuckets = l_dnaHashGetCount(dahash); da1 = l_dnaHashGetDna(dahash, (l_uint64)val, L_NOCOPY); if (!da1) return 0; /* Run through da1, looking for this %val */ nvals = l_dnaGetCount(da1); for (i = 0; i < nvals; i++) { l_dnaGetIValue(da1, i, &indexval); l_dnaGetDValue(da, indexval, &vali); if (val == vali) { *pindex = indexval; return 0; } } return 0; } /*---------------------------------------------------------------------* * Set operations on points using hashing * *---------------------------------------------------------------------*/ /*! * \brief ptaUnionByHash() * * \param[in] pta1, pta2 * \return ptad with the union of the set of points, or NULL on error * *
 * Notes:
 *      (1) This is faster than ptaUnionByAset(), because the
 *          bucket lookup is O(n).  It should be used if the pts are
 *          integers (e.g., representing pixel positions).
 * 
*/ PTA * ptaUnionByHash(PTA *pta1, PTA *pta2) { PTA *pta3, *ptad; if (!pta1) return (PTA *)ERROR_PTR("pta1 not defined", __func__, NULL); if (!pta2) return (PTA *)ERROR_PTR("pta2 not defined", __func__, NULL); /* Join */ pta3 = ptaCopy(pta1); ptaJoin(pta3, pta2, 0, -1); /* Eliminate duplicates */ ptaRemoveDupsByHash(pta3, &ptad, NULL); ptaDestroy(&pta3); return ptad; } /*! * \brief ptaRemoveDupsByHash() * * \param[in] ptas assumed to be integer values * \param[out] pptad unique set of pts; duplicates removed * \param[out] pdahash [optional] dnahash used for lookup * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates a pta with unique values.
 *      (2) The dnahash is built up with ptad to assure uniqueness.
 *          It can be used to find if a point is in the set:
 *              ptaFindPtByHash(ptad, dahash, x, y, &index)
 *      (3) The hash of the (x,y) location is simple and fast.  It scales
 *          up with the number of buckets to insure a fairly random
 *          bucket selection for adjacent points.
 *      (4) A Dna is used rather than a Numa because we need accurate
 *          representation of 32-bit integers that are indices into ptas.
 *          Integer --> float --> integer conversion makes errors for
 *          integers larger than 10M.
 *      (5) This is faster than ptaRemoveDupsByAset(), because the
 *          bucket lookup is O(n), although there is a double-loop
 *          lookup within the dna in each bucket.
 * 
*/ l_ok ptaRemoveDupsByHash(PTA *ptas, PTA **pptad, L_DNAHASH **pdahash) { l_int32 i, n, index, items, x, y; l_uint32 nsize; l_uint64 key; PTA *ptad; L_DNAHASH *dahash; if (pdahash) *pdahash = NULL; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); n = ptaGetCount(ptas); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ dahash = l_dnaHashCreate(nsize, 8); ptad = ptaCreate(n); *pptad = ptad; for (i = 0, items = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); ptaFindPtByHash(ptad, dahash, x, y, &index); if (index < 0) { /* not found */ l_hashPtToUint64(x, y, &key); l_dnaHashAdd(dahash, key, (l_float64)items); ptaAddPt(ptad, x, y); items++; } } if (pdahash) *pdahash = dahash; else l_dnaHashDestroy(&dahash); return 0; } /*! * \brief ptaIntersectionByHash() * * \param[in] pta1, pta2 * \return ptad intersection of the point sets, or NULL on error * *
 * Notes:
 *      (1) This is faster than ptaIntersectionByAset(), because the
 *          bucket lookup is O(n).  It should be used if the pts are
 *          integers (e.g., representing pixel positions).
 * 
*/ PTA * ptaIntersectionByHash(PTA *pta1, PTA *pta2) { l_int32 n1, n2, nsmall, i, x, y, index1, index2; l_uint32 nsize2; l_uint64 key; L_DNAHASH *dahash1, *dahash2; PTA *pta_small, *pta_big, *ptad; if (!pta1) return (PTA *)ERROR_PTR("pta1 not defined", __func__, NULL); if (!pta2) return (PTA *)ERROR_PTR("pta2 not defined", __func__, NULL); /* Put the elements of the biggest pta into a dnahash */ n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); pta_small = (n1 < n2) ? pta1 : pta2; /* do not destroy pta_small */ pta_big = (n1 < n2) ? pta2 : pta1; /* do not destroy pta_big */ dahash1 = l_dnaHashCreateFromPta(pta_big); /* Build up the intersection of points. Add to ptad * if the point is in pta_big (using dahash1) but hasn't * yet been seen in the traversal of pta_small (using dahash2). */ ptad = ptaCreate(0); nsmall = ptaGetCount(pta_small); findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ dahash2 = l_dnaHashCreate(nsize2, 0); for (i = 0; i < nsmall; i++) { ptaGetIPt(pta_small, i, &x, &y); ptaFindPtByHash(pta_big, dahash1, x, y, &index1); if (index1 >= 0) { /* found */ ptaFindPtByHash(pta_small, dahash2, x, y, &index2); if (index2 == -1) { /* not found */ ptaAddPt(ptad, x, y); l_hashPtToUint64(x, y, &key); l_dnaHashAdd(dahash2, key, (l_float64)i); } } } l_dnaHashDestroy(&dahash1); l_dnaHashDestroy(&dahash2); return ptad; } /*! * \brief ptaFindPtByHash() * * \param[in] pta * \param[in] dahash built from pta * \param[in] x, y arbitrary points * \param[out] pindex index into pta if (x,y) is in pta; -1 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Fast lookup in dnaHash associated with a pta, to see if a
 *          random point (x,y) is already stored in the hash table.
 *      (2) We use a strong hash function to minimize the chance that
 *          two different points hash to the same key value.
 *      (3) We select the number of buckets to be about 5% of the size
 *          of the input %pta, so that when fully populated, each
 *          bucket (dna) will have about 20 entries, each being an index
 *          into %pta.  In lookup, after hashing to the key, and then
 *          again to the bucket, we traverse the bucket (dna), using the
 *          index into %pta to check if the point (x,y) has been found before.
 * 
*/ l_ok ptaFindPtByHash(PTA *pta, L_DNAHASH *dahash, l_int32 x, l_int32 y, l_int32 *pindex) { l_int32 i, nvals, index, xi, yi; l_uint64 key; L_DNA *da; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = -1; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (!dahash) return ERROR_INT("dahash not defined", __func__, 1); l_hashPtToUint64(x, y, &key); da = l_dnaHashGetDna(dahash, key, L_NOCOPY); if (!da) return 0; /* Run through the da, looking for this point */ nvals = l_dnaGetCount(da); for (i = 0; i < nvals; i++) { l_dnaGetIValue(da, i, &index); ptaGetIPt(pta, index, &xi, &yi); if (x == xi && y == yi) { *pindex = index; return 0; } } return 0; } /*! * \brief l_dnaHashCreateFromPta() * * \param[in] pta * \return dahash, or NULL on error */ L_DNAHASH * l_dnaHashCreateFromPta(PTA *pta) { l_int32 i, n, x, y; l_uint32 nsize; l_uint64 key; L_DNAHASH *dahash; if (!pta) return (L_DNAHASH *)ERROR_PTR("pta not defined", __func__, NULL); /* Build up dnaHash of indices, hashed by a key that is * a large linear combination of x and y values designed to * randomize the key. Having about 20 pts in each bucket is * roughly optimal for speed for large sets. */ n = ptaGetCount(pta); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ /* Add each point, using the hash as key and the index into * %ptas as the value. Storing the index enables operations * that check for duplicates. */ dahash = l_dnaHashCreate(nsize, 8); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); l_hashPtToUint64(x, y, &key); l_dnaHashAdd(dahash, key, (l_float64)i); } return dahash; } /*----------------------------------------------------------------------* * Set operations on sarray using hashing * *----------------------------------------------------------------------*/ /*! * \brief sarrayRemoveDupsByHash() * * \param[in] sas * \param[out] psad unique set of strings; duplicates removed * \param[out] pdahash [optional] dnahash used for lookup * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates a sarray with unique values.
 *      (2) The dnahash is built up with sad to assure uniqueness.
 *          It can be used to find if a string is in the set:
 *              sarrayFindValByHash(sad, dahash, str, &index)
 *      (3) The hash of the string location is simple and fast.  It scales
 *          up with the number of buckets to insure a fairly random
 *          bucket selection input strings.
 *      (4) This is faster than sarrayRemoveDupsByAset(), because the
 *          bucket lookup is O(n), although there is a double-loop
 *          lookup within the dna in each bucket.
 * 
*/ l_ok sarrayRemoveDupsByHash(SARRAY *sas, SARRAY **psad, L_DNAHASH **pdahash) { char *str; l_int32 i, n, index, items; l_uint32 nsize; l_uint64 key; SARRAY *sad; L_DNAHASH *dahash; if (pdahash) *pdahash = NULL; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sas) return ERROR_INT("sas not defined", __func__, 1); n = sarrayGetCount(sas); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ dahash = l_dnaHashCreate(nsize, 8); sad = sarrayCreate(n); *psad = sad; for (i = 0, items = 0; i < n; i++) { str = sarrayGetString(sas, i, L_NOCOPY); sarrayFindStringByHash(sad, dahash, str, &index); if (index < 0) { /* not found */ l_hashStringToUint64(str, &key); l_dnaHashAdd(dahash, key, (l_float64)items); sarrayAddString(sad, str, L_COPY); items++; } } if (pdahash) *pdahash = dahash; else l_dnaHashDestroy(&dahash); return 0; } /*! * \brief sarrayIntersectionByHash() * * \param[in] sa1, sa2 * \return sad intersection of the strings, or NULL on error * *
 * Notes:
 *      (1) This is faster than sarrayIntersectionByAset(), because the
 *          bucket lookup is O(n).
 * 
*/ SARRAY * sarrayIntersectionByHash(SARRAY *sa1, SARRAY *sa2) { char *str; l_int32 n1, n2, nsmall, i, index1, index2; l_uint32 nsize2; l_uint64 key; L_DNAHASH *dahash1, *dahash2; SARRAY *sa_small, *sa_big, *sad; if (!sa1) return (SARRAY *)ERROR_PTR("sa1 not defined", __func__, NULL); if (!sa2) return (SARRAY *)ERROR_PTR("sa2 not defined", __func__, NULL); /* Put the elements of the biggest sarray into a dnahash */ n1 = sarrayGetCount(sa1); n2 = sarrayGetCount(sa2); sa_small = (n1 < n2) ? sa1 : sa2; /* do not destroy sa_small */ sa_big = (n1 < n2) ? sa2 : sa1; /* do not destroy sa_big */ dahash1 = l_dnaHashCreateFromSarray(sa_big); /* Build up the intersection of strings. Add to %sad * if the string is in sa_big (using dahash1) but hasn't * yet been seen in the traversal of sa_small (using dahash2). */ sad = sarrayCreate(0); nsmall = sarrayGetCount(sa_small); findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ dahash2 = l_dnaHashCreate(nsize2, 0); for (i = 0; i < nsmall; i++) { str = sarrayGetString(sa_small, i, L_NOCOPY); sarrayFindStringByHash(sa_big, dahash1, str, &index1); if (index1 >= 0) { sarrayFindStringByHash(sa_small, dahash2, str, &index2); if (index2 == -1) { sarrayAddString(sad, str, L_COPY); l_hashStringToUint64(str, &key); l_dnaHashAdd(dahash2, key, (l_float64)i); } } } l_dnaHashDestroy(&dahash1); l_dnaHashDestroy(&dahash2); return sad; } /*! * \brief sarrayFindStringByHash() * * \param[in] sa * \param[in] dahash built from sa * \param[in] str arbitrary string * \param[out] pindex index into %sa if %str is in %sa; -1 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Fast lookup in dnaHash associated with a sarray, to see if a
 *          random string %str is already stored in the hash table.
 *      (2) We use a strong hash function to minimize the chance that
 *          two different strings hash to the same key value.
 *      (3) We select the number of buckets to be about 5% of the size
 *          of the input sarray, so that when fully populated, each
 *          bucket (dna) will have about 20 entries, each being an index
 *          into sa.  In lookup, after hashing to the key, and then
 *          again to the bucket, we traverse the bucket (dna), using the
 *          index into sa to check if %str has been found before.
 * 
*/ l_ok sarrayFindStringByHash(SARRAY *sa, L_DNAHASH *dahash, const char *str, l_int32 *pindex) { char *stri; l_int32 i, nvals, index; l_uint64 key; L_DNA *da; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = -1; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!dahash) return ERROR_INT("dahash not defined", __func__, 1); l_hashStringToUint64(str, &key); da = l_dnaHashGetDna(dahash, key, L_NOCOPY); if (!da) return 0; /* Run through the da, looking for this string */ nvals = l_dnaGetCount(da); for (i = 0; i < nvals; i++) { l_dnaGetIValue(da, i, &index); stri = sarrayGetString(sa, index, L_NOCOPY); if (!strcmp(str, stri)) { /* duplicate */ *pindex = index; return 0; } } return 0; } /*! * \brief l_dnaHashCreateFromSarray() * * \param[in] sa * \return dahash, or NULL on error */ L_DNAHASH * l_dnaHashCreateFromSarray(SARRAY *sa) { char *str; l_int32 i, n; l_uint32 nsize; l_uint64 key; L_DNAHASH *dahash; /* Build up dnaHash of indices, hashed by a 64-bit key that * should randomize the lower bits used in bucket selection. * Having about 20 pts in each bucket is roughly optimal. */ n = sarrayGetCount(sa); findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ /* lept_stderr("Prime used: %d\n", nsize); */ /* Add each string, using the hash as key and the index into %sa * as the value. Storing the index enables operations that check * for duplicates. */ dahash = l_dnaHashCreate(nsize, 8); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); l_hashStringToUint64(str, &key); l_dnaHashAdd(dahash, key, (l_float64)i); } return dahash; } leptonica-1.86.0/src/dwacomb.2.c000066400000000000000000000262321506303110300162700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_2() * PIX *pixFMorphopGen_2() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" PIX *pixMorphDwa_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 76; static char SEL_NAMES[][80] = { "sel_comb_4h", "sel_comb_4v", "sel_comb_5h", "sel_comb_5v", "sel_comb_6h", "sel_comb_6v", "sel_comb_7h", "sel_comb_7v", "sel_comb_8h", "sel_comb_8v", "sel_comb_9h", "sel_comb_9v", "sel_comb_10h", "sel_comb_10v", "sel_comb_12h", "sel_comb_12v", "sel_comb_14h", "sel_comb_14v", "sel_comb_15h", "sel_comb_15v", "sel_comb_16h", "sel_comb_16v", "sel_comb_18h", "sel_comb_18v", "sel_comb_20h", "sel_comb_20v", "sel_comb_21h", "sel_comb_21v", "sel_comb_22h", "sel_comb_22v", "sel_comb_24h", "sel_comb_24v", "sel_comb_25h", "sel_comb_25v", "sel_comb_27h", "sel_comb_27v", "sel_comb_28h", "sel_comb_28v", "sel_comb_30h", "sel_comb_30v", "sel_comb_32h", "sel_comb_32v", "sel_comb_33h", "sel_comb_33v", "sel_comb_35h", "sel_comb_35v", "sel_comb_36h", "sel_comb_36v", "sel_comb_39h", "sel_comb_39v", "sel_comb_40h", "sel_comb_40v", "sel_comb_42h", "sel_comb_42v", "sel_comb_44h", "sel_comb_44v", "sel_comb_45h", "sel_comb_45v", "sel_comb_48h", "sel_comb_48v", "sel_comb_49h", "sel_comb_49v", "sel_comb_50h", "sel_comb_50v", "sel_comb_52h", "sel_comb_52v", "sel_comb_54h", "sel_comb_54v", "sel_comb_55h", "sel_comb_55v", "sel_comb_56h", "sel_comb_56v", "sel_comb_60h", "sel_comb_60v", "sel_comb_63h", "sel_comb_63v"}; /*! * \brief pixMorphDwa_2() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a border, calls the appropriate
 *          pixFMorphopGen_*(), and removes the border.
 *          See the notes for that function.
 *      (2) The size of the border depends on the operation
 *          and the boundary conditions.
 * 
*/ PIX * pixMorphDwa_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_2(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * \brief pixFMorphopGen_2() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa operation, and the Sels must be limited in
 *          size to not more than 31 pixels about the origin.
 *      (2) A border of appropriate size (32 pixels, or 64 pixels
 *          for safe closing with asymmetric b.c.) must be added before
 *          this function is called.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 *      (4) The closing operation is safe; no pixels can be removed
 *          near the boundary.
 * 
*/ PIX * pixFMorphopGen_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_2(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.86.0/src/dwacomblow.2.c000066400000000000000000004155531506303110300170220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_2() * * Static Low-level: * void fdilate_2_*() * void ferode_2_*() */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static void fdilate_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_2() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_2_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_2_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_2_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_2_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_2_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_2_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_2_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_2_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_2_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_2_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_2_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_2_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_2_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_2_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_2_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_2_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_2_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_2_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_2_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_2_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_2_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_2_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_2_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_2_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_2_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_2_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_2_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_2_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_2_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_2_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_2_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_2_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_2_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_2_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_2_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_2_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_2_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_2_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_2_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_2_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_2_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_2_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_2_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_2_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_2_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_2_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_2_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_2_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_2_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_2_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_2_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_2_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_2_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_2_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_2_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_2_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_2_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_2_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_2_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_2_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_2_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_2_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_2_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_2_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_2_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_2_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_2_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_2_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_2_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_2_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_2_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_2_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_2_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_2_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_2_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_2_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_2_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_2_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_2_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_2_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_2_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_2_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_2_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_2_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_2_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_2_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_2_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_2_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_2_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_2_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_2_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_2_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_2_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_2_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_2_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_2_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_2_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_2_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_2_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_2_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_2_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_2_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_2_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_2_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_2_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_2_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_2_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_2_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_2_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_2_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_2_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_2_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_2_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_2_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_2_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_2_57(datad, w, h, wpld, datas, wpls); break; case 116: fdilate_2_58(datad, w, h, wpld, datas, wpls); break; case 117: ferode_2_58(datad, w, h, wpld, datas, wpls); break; case 118: fdilate_2_59(datad, w, h, wpld, datas, wpls); break; case 119: ferode_2_59(datad, w, h, wpld, datas, wpls); break; case 120: fdilate_2_60(datad, w, h, wpld, datas, wpls); break; case 121: ferode_2_60(datad, w, h, wpld, datas, wpls); break; case 122: fdilate_2_61(datad, w, h, wpld, datas, wpls); break; case 123: ferode_2_61(datad, w, h, wpld, datas, wpls); break; case 124: fdilate_2_62(datad, w, h, wpld, datas, wpls); break; case 125: ferode_2_62(datad, w, h, wpld, datas, wpls); break; case 126: fdilate_2_63(datad, w, h, wpld, datas, wpls); break; case 127: ferode_2_63(datad, w, h, wpld, datas, wpls); break; case 128: fdilate_2_64(datad, w, h, wpld, datas, wpls); break; case 129: ferode_2_64(datad, w, h, wpld, datas, wpls); break; case 130: fdilate_2_65(datad, w, h, wpld, datas, wpls); break; case 131: ferode_2_65(datad, w, h, wpld, datas, wpls); break; case 132: fdilate_2_66(datad, w, h, wpld, datas, wpls); break; case 133: ferode_2_66(datad, w, h, wpld, datas, wpls); break; case 134: fdilate_2_67(datad, w, h, wpld, datas, wpls); break; case 135: ferode_2_67(datad, w, h, wpld, datas, wpls); break; case 136: fdilate_2_68(datad, w, h, wpld, datas, wpls); break; case 137: ferode_2_68(datad, w, h, wpld, datas, wpls); break; case 138: fdilate_2_69(datad, w, h, wpld, datas, wpls); break; case 139: ferode_2_69(datad, w, h, wpld, datas, wpls); break; case 140: fdilate_2_70(datad, w, h, wpld, datas, wpls); break; case 141: ferode_2_70(datad, w, h, wpld, datas, wpls); break; case 142: fdilate_2_71(datad, w, h, wpld, datas, wpls); break; case 143: ferode_2_71(datad, w, h, wpld, datas, wpls); break; case 144: fdilate_2_72(datad, w, h, wpld, datas, wpls); break; case 145: ferode_2_72(datad, w, h, wpld, datas, wpls); break; case 146: fdilate_2_73(datad, w, h, wpld, datas, wpls); break; case 147: ferode_2_73(datad, w, h, wpld, datas, wpls); break; case 148: fdilate_2_74(datad, w, h, wpld, datas, wpls); break; case 149: ferode_2_74(datad, w, h, wpld, datas, wpls); break; case 150: fdilate_2_75(datad, w, h, wpld, datas, wpls); break; case 151: ferode_2_75(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_2_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_2_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_2_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*(sptr - wpls)); } } } static void ferode_2_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*(sptr + wpls)); } } } static void fdilate_2_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_2_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_2_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr - wpls)); } } } static void ferode_2_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr + wpls)); } } } static void fdilate_2_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_2_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_2_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr - wpls2)); } } } static void ferode_2_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr + wpls2)); } } } static void fdilate_2_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | (*sptr) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_2_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & (*sptr) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_2_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*sptr) | (*(sptr - wpls3)); } } } static void ferode_2_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*sptr) & (*(sptr + wpls3)); } } } static void fdilate_2_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_2_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_2_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr - wpls2)); } } } static void ferode_2_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr + wpls2)); } } } static void fdilate_2_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | (*sptr) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_2_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & (*sptr) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_2_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*sptr) | (*(sptr - wpls4)); } } } static void ferode_2_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*sptr) & (*(sptr + wpls4)); } } } static void fdilate_2_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_2_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_2_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr - wpls3)); } } } static void ferode_2_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr + wpls3)); } } } static void fdilate_2_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | (*sptr) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_2_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & (*sptr) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_2_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*sptr) | (*(sptr - wpls5)); } } } static void ferode_2_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*sptr) & (*(sptr + wpls5)); } } } static void fdilate_2_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_2_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_2_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls6; wpls2 = 2 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls2)) | (*(sptr - wpls2)) | (*(sptr - wpls6)); } } } static void ferode_2_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls6; wpls2 = 2 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls2)) & (*(sptr + wpls2)) & (*(sptr + wpls6)); } } } static void fdilate_2_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | (*sptr) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_2_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & (*sptr) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_2_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*sptr) | (*(sptr - wpls6)); } } } static void ferode_2_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*sptr) & (*(sptr + wpls6)); } } } static void fdilate_2_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_2_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_2_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; l_int32 wpls7; l_int32 wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls3)) | (*(sptr - wpls2)) | (*(sptr - wpls7)); } } } static void ferode_2_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; l_int32 wpls7; l_int32 wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls3)) & (*(sptr + wpls2)) & (*(sptr + wpls7)); } } } static void fdilate_2_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_2_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_2_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)); } } } static void ferode_2_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)); } } } static void fdilate_2_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_2_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_2_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr - wpls5)); } } } static void ferode_2_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr + wpls5)); } } } static void fdilate_2_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_2_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_2_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; wpls3 = 3 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls3)) | (*(sptr - wpls3)) | (*(sptr - wpls9)); } } } static void ferode_2_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; wpls3 = 3 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls3)) & (*(sptr + wpls3)) & (*(sptr + wpls9)); } } } static void fdilate_2_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | (*sptr) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_2_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & (*sptr) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_2_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls10; wpls5 = 5 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls5)) | (*sptr) | (*(sptr - wpls5)) | (*(sptr - wpls10)); } } } static void ferode_2_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls10; wpls5 = 5 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls5)) & (*sptr) & (*(sptr + wpls5)) & (*(sptr + wpls10)); } } } static void fdilate_2_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_2_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_2_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)); } } } static void ferode_2_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)); } } } static void fdilate_2_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_2_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_2_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls4)) | (*(sptr - wpls3)) | (*(sptr - wpls10)); } } } static void ferode_2_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls4)) & (*(sptr + wpls3)) & (*(sptr + wpls10)); } } } static void fdilate_2_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | (*sptr) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_2_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & (*sptr) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_2_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls12; wpls6 = 6 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls6)) | (*sptr) | (*(sptr - wpls6)) | (*(sptr - wpls12)); } } } static void ferode_2_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls12; wpls6 = 6 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls6)) & (*sptr) & (*(sptr + wpls6)) & (*(sptr + wpls12)); } } } static void fdilate_2_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_2_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_2_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; wpls4 = 4 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls4)) | (*(sptr - wpls4)) | (*(sptr - wpls12)); } } } static void ferode_2_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; wpls4 = 4 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls4)) & (*(sptr + wpls4)) & (*(sptr + wpls12)); } } } static void fdilate_2_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | (*sptr) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_2_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & (*sptr) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_2_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls11; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*sptr) | (*(sptr - wpls11)); } } } static void ferode_2_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls11; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*sptr) & (*(sptr + wpls11)); } } } static void fdilate_2_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_2_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_2_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; wpls7 = 7 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)) | (*(sptr - wpls14)); } } } static void ferode_2_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; wpls7 = 7 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)) & (*(sptr + wpls14)); } } } static void fdilate_2_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_2_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_2_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; l_int32 wpls15; wpls3 = 3 * wpls; wpls9 = 9 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls9)) | (*(sptr + wpls3)) | (*(sptr - wpls3)) | (*(sptr - wpls9)) | (*(sptr - wpls15)); } } } static void ferode_2_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; l_int32 wpls15; wpls3 = 3 * wpls; wpls9 = 9 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls9)) & (*(sptr - wpls3)) & (*(sptr + wpls3)) & (*(sptr + wpls9)) & (*(sptr + wpls15)); } } } static void fdilate_2_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | (*sptr) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_2_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & (*sptr) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_2_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls13; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*sptr) | (*(sptr - wpls13)); } } } static void ferode_2_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls13; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*sptr) & (*(sptr + wpls13)); } } } static void fdilate_2_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | (*sptr) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_2_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & (*sptr) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_2_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; wpls8 = 8 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls8)) | (*sptr) | (*(sptr - wpls8)) | (*(sptr - wpls16)); } } } static void ferode_2_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; wpls8 = 8 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls8)) & (*sptr) & (*(sptr + wpls8)) & (*(sptr + wpls16)); } } } static void fdilate_2_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_2_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_2_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; l_int32 wpls17; l_int32 wpls18; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls11)) | (*(sptr + wpls4)) | (*(sptr - wpls3)) | (*(sptr - wpls10)) | (*(sptr - wpls17)); } } } static void ferode_2_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; l_int32 wpls17; l_int32 wpls18; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls11)) & (*(sptr - wpls4)) & (*(sptr + wpls3)) & (*(sptr + wpls10)) & (*(sptr + wpls17)); } } } static void fdilate_2_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_2_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_2_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; l_int32 wpls16; l_int32 wpls17; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls6)) | (*(sptr - wpls5)) | (*(sptr - wpls16)); } } } static void ferode_2_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; l_int32 wpls16; l_int32 wpls17; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls6)) & (*(sptr + wpls5)) & (*(sptr + wpls16)); } } } static void fdilate_2_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_2_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_2_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; wpls9 = 9 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)) | (*(sptr - wpls18)); } } } static void ferode_2_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; wpls9 = 9 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)) & (*(sptr + wpls18)); } } } static void fdilate_2_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_2_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_2_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; l_int32 wpls20; wpls4 = 4 * wpls; wpls12 = 12 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls12)) | (*(sptr + wpls4)) | (*(sptr - wpls4)) | (*(sptr - wpls12)) | (*(sptr - wpls20)); } } } static void ferode_2_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; l_int32 wpls20; wpls4 = 4 * wpls; wpls12 = 12 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls12)) & (*(sptr - wpls4)) & (*(sptr + wpls4)) & (*(sptr + wpls12)) & (*(sptr + wpls20)); } } } static void fdilate_2_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_2_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_2_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; l_int32 wpls21; wpls7 = 7 * wpls; wpls14 = 14 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls14)) | (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)) | (*(sptr - wpls14)) | (*(sptr - wpls21)); } } } static void ferode_2_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; l_int32 wpls21; wpls7 = 7 * wpls; wpls14 = 14 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls14)) & (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)) & (*(sptr + wpls14)) & (*(sptr + wpls21)); } } } static void fdilate_2_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | (*sptr) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_2_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & (*sptr) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_2_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls10; l_int32 wpls20; wpls10 = 10 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls10)) | (*sptr) | (*(sptr - wpls10)) | (*(sptr - wpls20)); } } } static void ferode_2_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls10; l_int32 wpls20; wpls10 = 10 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls10)) & (*sptr) & (*(sptr + wpls10)) & (*(sptr + wpls20)); } } } static void fdilate_2_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_2_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_2_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls7; l_int32 wpls19; l_int32 wpls20; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls7)) | (*(sptr - wpls6)) | (*(sptr - wpls19)); } } } static void ferode_2_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls7; l_int32 wpls19; l_int32 wpls20; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls7)) & (*(sptr + wpls6)) & (*(sptr + wpls19)); } } } static void fdilate_2_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_2_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_2_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls5; l_int32 wpls13; l_int32 wpls14; l_int32 wpls22; l_int32 wpls23; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls14)) | (*(sptr + wpls5)) | (*(sptr - wpls4)) | (*(sptr - wpls13)) | (*(sptr - wpls22)); } } } static void ferode_2_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls5; l_int32 wpls13; l_int32 wpls14; l_int32 wpls22; l_int32 wpls23; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls14)) & (*(sptr - wpls5)) & (*(sptr + wpls4)) & (*(sptr + wpls13)) & (*(sptr + wpls22)); } } } static void fdilate_2_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | (*sptr) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_2_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & (*sptr) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_2_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls11; l_int32 wpls22; wpls11 = 11 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls11)) | (*sptr) | (*(sptr - wpls11)) | (*(sptr - wpls22)); } } } static void ferode_2_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls11; l_int32 wpls22; wpls11 = 11 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls11)) & (*sptr) & (*(sptr + wpls11)) & (*(sptr + wpls22)); } } } static void fdilate_2_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | (*sptr) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_2_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & (*sptr) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_2_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; l_int32 wpls24; wpls8 = 8 * wpls; wpls16 = 16 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls16)) | (*(sptr + wpls8)) | (*sptr) | (*(sptr - wpls8)) | (*(sptr - wpls16)) | (*(sptr - wpls24)); } } } static void ferode_2_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; l_int32 wpls24; wpls8 = 8 * wpls; wpls16 = 16 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls16)) & (*(sptr - wpls8)) & (*sptr) & (*(sptr + wpls8)) & (*(sptr + wpls16)) & (*(sptr + wpls24)); } } } static void fdilate_2_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_2_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_2_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls15; l_int32 wpls25; wpls5 = 5 * wpls; wpls15 = 15 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls15)) | (*(sptr + wpls5)) | (*(sptr - wpls5)) | (*(sptr - wpls15)) | (*(sptr - wpls25)); } } } static void ferode_2_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls15; l_int32 wpls25; wpls5 = 5 * wpls; wpls15 = 15 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls15)) & (*(sptr - wpls5)) & (*(sptr + wpls5)) & (*(sptr + wpls15)) & (*(sptr + wpls25)); } } } static void fdilate_2_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_2_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_2_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; l_int32 wpls27; wpls9 = 9 * wpls; wpls18 = 18 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls18)) | (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)) | (*(sptr - wpls18)) | (*(sptr - wpls27)); } } } static void ferode_2_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; l_int32 wpls27; wpls9 = 9 * wpls; wpls18 = 18 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls18)) & (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)) & (*(sptr + wpls18)) & (*(sptr + wpls27)); } } } leptonica-1.86.0/src/edge.c000066400000000000000000000553601506303110300154240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file edge.c *
 *
 *      Sobel edge detecting filter
 *          PIX      *pixSobelEdgeFilter()
 *
 *      Two-sided edge gradient filter
 *          PIX      *pixTwoSidedEdgeFilter()
 *
 *      Measurement of edge smoothness
 *          l_int32   pixMeasureEdgeSmoothness()
 *          NUMA     *pixGetEdgeProfile()
 *          l_int32   pixGetLastOffPixelInRun()
 *          l_int32   pixGetLastOnPixelInRun()
 *
 *
 *  The Sobel edge detector uses these two simple gradient filters.
 *
 *       1    2    1             1    0   -1
 *       0    0    0             2    0   -2
 *      -1   -2   -1             1    0   -1
 *
 *      (horizontal)             (vertical)
 *
 *  To use both the vertical and horizontal filters, set the orientation
 *  flag to L_ALL_EDGES; this sums the abs. value of their outputs,
 *  clipped to 255.
 *
 *  See comments below for displaying the resulting image with
 *  the edges dark, both for 8 bpp and 1 bpp.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*----------------------------------------------------------------------* * Sobel edge detecting filter * *----------------------------------------------------------------------*/ /*! * \brief pixSobelEdgeFilter() * * \param[in] pixs 8 bpp; no colormap * \param[in] orientflag L_HORIZONTAL_EDGES, L_VERTICAL_EDGES, L_ALL_EDGES * \return pixd 8 bpp, edges are brighter, or NULL on error * *
 * Notes:
 *      (1) Invert pixd to see larger gradients as darker (grayscale).
 *      (2) To generate a binary image of the edges, threshold
 *          the result using pixThresholdToBinary().  If the high
 *          edge values are to be fg (1), invert after running
 *          pixThresholdToBinary().
 *      (3) Label the pixels as follows:
 *              1    4    7
 *              2    5    8
 *              3    6    9
 *          Read the data incrementally across the image and unroll
 *          the loop.
 *      (4) This runs at about 45 Mpix/sec on a 3 GHz processor.
 * 
*/ PIX * pixSobelEdgeFilter(PIX *pixs, l_int32 orientflag) { l_int32 w, h, d, i, j, wplt, wpld, gx, gy, vald; l_int32 val1, val2, val3, val4, val5, val6, val7, val8, val9; l_uint32 *datat, *linet, *datad, *lined; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES && orientflag != L_ALL_EDGES) return (PIX *)ERROR_PTR("invalid orientflag", __func__, NULL); /* Add 1 pixel (mirrored) to each side of the image. */ if ((pixt = pixAddMirroredBorder(pixs, 1, 1, 1, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); /* Compute filter output at each location. */ pixd = pixCreateTemplate(pixs); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (j == 0) { /* start a new row */ val1 = GET_DATA_BYTE(linet, j); val2 = GET_DATA_BYTE(linet + wplt, j); val3 = GET_DATA_BYTE(linet + 2 * wplt, j); val4 = GET_DATA_BYTE(linet, j + 1); val5 = GET_DATA_BYTE(linet + wplt, j + 1); val6 = GET_DATA_BYTE(linet + 2 * wplt, j + 1); val7 = GET_DATA_BYTE(linet, j + 2); val8 = GET_DATA_BYTE(linet + wplt, j + 2); val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); } else { /* shift right by 1 pixel; update incrementally */ val1 = val4; val2 = val5; val3 = val6; val4 = val7; val5 = val8; val6 = val9; val7 = GET_DATA_BYTE(linet, j + 2); val8 = GET_DATA_BYTE(linet + wplt, j + 2); val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); } if (orientflag == L_HORIZONTAL_EDGES) vald = L_ABS(val1 + 2 * val4 + val7 - val3 - 2 * val6 - val9) >> 3; else if (orientflag == L_VERTICAL_EDGES) vald = L_ABS(val1 + 2 * val2 + val3 - val7 - 2 * val8 - val9) >> 3; else { /* L_ALL_EDGES */ gx = L_ABS(val1 + 2 * val2 + val3 - val7 - 2 * val8 - val9) >> 3; gy = L_ABS(val1 + 2 * val4 + val7 - val3 - 2 * val6 - val9) >> 3; vald = L_MIN(255, gx + gy); } SET_DATA_BYTE(lined, j, vald); } } pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Two-sided edge gradient filter * *----------------------------------------------------------------------*/ /*! * \brief pixTwoSidedEdgeFilter() * * \param[in] pixs 8 bpp; no colormap * \param[in] orientflag L_HORIZONTAL_EDGES, L_VERTICAL_EDGES * \return pixd 8 bpp, edges are brighter, or NULL on error * *
 * Notes:
 *      (1) For detecting vertical edges, this considers the
 *          difference of the central pixel from those on the left
 *          and right.  For situations where the gradient is the same
 *          sign on both sides, this computes and stores the minimum
 *          (absolute value of the) difference.  The reason for
 *          checking the sign is that we are looking for pixels within
 *          a transition.  By contrast, for single pixel noise, the pixel
 *          value is either larger than or smaller than its neighbors,
 *          so the gradient would change direction on each side.  Horizontal
 *          edges are handled similarly, looking for vertical gradients.
 *      (2) To generate a binary image of the edges, threshold
 *          the result using pixThresholdToBinary().  If the high
 *          edge values are to be fg (1), invert after running
 *          pixThresholdToBinary().
 *      (3) This runs at about 60 Mpix/sec on a 3 GHz processor.
 *          It is about 30% faster than Sobel, and the results are
 *          similar.
 * 
*/ PIX * pixTwoSidedEdgeFilter(PIX *pixs, l_int32 orientflag) { l_int32 w, h, d, i, j, wpls, wpld; l_int32 cval, rval, bval, val, lgrad, rgrad, tgrad, bgrad; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES) return (PIX *)ERROR_PTR("invalid orientflag", __func__, NULL); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (orientflag == L_VERTICAL_EDGES) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; cval = GET_DATA_BYTE(lines, 1); lgrad = cval - GET_DATA_BYTE(lines, 0); for (j = 1; j < w - 1; j++) { rval = GET_DATA_BYTE(lines, j + 1); rgrad = rval - cval; if (lgrad * rgrad > 0) { if (lgrad < 0) val = -L_MAX(lgrad, rgrad); else val = L_MIN(lgrad, rgrad); SET_DATA_BYTE(lined, j, val); } lgrad = rgrad; cval = rval; } } } else { /* L_HORIZONTAL_EDGES) */ for (j = 0; j < w; j++) { lines = datas + wpls; cval = GET_DATA_BYTE(lines, j); /* for line 1 */ tgrad = cval - GET_DATA_BYTE(datas, j); for (i = 1; i < h - 1; i++) { lines += wpls; /* for line i + 1 */ lined = datad + i * wpld; bval = GET_DATA_BYTE(lines, j); bgrad = bval - cval; if (tgrad * bgrad > 0) { if (tgrad < 0) val = -L_MAX(tgrad, bgrad); else val = L_MIN(tgrad, bgrad); SET_DATA_BYTE(lined, j, val); } tgrad = bgrad; cval = bval; } } } return pixd; } /*----------------------------------------------------------------------* * Measurement of edge smoothness * *----------------------------------------------------------------------*/ /*! * \brief pixMeasureEdgeSmoothness() * * \param[in] pixs 1 bpp * \param[in] side L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT * \param[in] minjump minimum jump to be counted; >= 1 * \param[in] minreversal minimum reversal size for new peak or valley * \param[out] pjpl [optional] jumps/length: number of jumps, * normalized to length of component side * \param[out] pjspl [optional] jumpsum/length: sum of all * sufficiently large jumps, normalized to length * of component side * \param[out] prpl [optional] reversals/length: number of * peak-to-valley or valley-to-peak reversals, * normalized to length of component side * \param[in] debugfile [optional] displays constructed edge; use NULL * for no output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes three measures of smoothness of the edge of a
 *          connected component:
 *            * jumps/length: (jpl) the number of jumps of size >= %minjump,
 *              normalized to the length of the side
 *            * jump sum/length: (jspl) the sum of all jump lengths of
 *              size >= %minjump, normalized to the length of the side
 *            * reversals/length: (rpl) the number of peak <--> valley
 *              reversals, using %minreverse as a minimum deviation of
 *              the peak or valley from its preceding extremum,
 *              normalized to the length of the side
 *      (2) The input pix should be a single connected component, but
 *          this is not required.
 * 
*/ l_ok pixMeasureEdgeSmoothness(PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile) { l_int32 i, n, val, nval, diff, njumps, jumpsum, nreversal; NUMA *na, *nae; if (pjpl) *pjpl = 0.0; if (pjspl) *pjspl = 0.0; if (prpl) *prpl = 0.0; if (!pjpl && !pjspl && !prpl && !debugfile) return ERROR_INT("no output requested", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (side != L_FROM_LEFT && side != L_FROM_RIGHT && side != L_FROM_TOP && side != L_FROM_BOT) return ERROR_INT("invalid side", __func__, 1); if (minjump < 1) return ERROR_INT("invalid minjump; must be >= 1", __func__, 1); if (minreversal < 1) return ERROR_INT("invalid minreversal; must be >= 1", __func__, 1); if ((na = pixGetEdgeProfile(pixs, side, debugfile)) == NULL) return ERROR_INT("edge profile not made", __func__, 1); if ((n = numaGetCount(na)) < 2) { numaDestroy(&na); return 0; } if (pjpl || pjspl) { jumpsum = 0; njumps = 0; numaGetIValue(na, 0, &val); for (i = 1; i < n; i++) { numaGetIValue(na, i, &nval); diff = L_ABS(nval - val); if (diff >= minjump) { njumps++; jumpsum += diff; } val = nval; } if (pjpl) *pjpl = (l_float32)njumps / (l_float32)(n - 1); if (pjspl) *pjspl = (l_float32)jumpsum / (l_float32)(n - 1); } if (prpl) { nae = numaFindExtrema(na, minreversal, NULL); nreversal = numaGetCount(nae) - 1; *prpl = (l_float32)nreversal / (l_float32)(n - 1); numaDestroy(&nae); } numaDestroy(&na); return 0; } /*! * \brief pixGetEdgeProfile() * * \param[in] pixs 1 bpp * \param[in] side L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT * \param[in] debugfile [optional] displays constructed edge; use NULL * for no output * \return na of fg edge pixel locations, or NULL on error */ NUMA * pixGetEdgeProfile(PIX *pixs, l_int32 side, const char *debugfile) { l_int32 x, y, w, h, loc, index, ival; l_uint32 val; NUMA *na; PIX *pixt; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (side != L_FROM_LEFT && side != L_FROM_RIGHT && side != L_FROM_TOP && side != L_FROM_BOT) return (NUMA *)ERROR_PTR("invalid side", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (side == L_FROM_LEFT || side == L_FROM_RIGHT) na = numaCreate(h); else na = numaCreate(w); if (side == L_FROM_LEFT) { pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_LEFT, &loc); loc = (loc == w - 1) ? 0 : loc + 1; /* back to the left edge */ numaAddNumber(na, loc); for (y = 1; y < h; y++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); } else { pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); loc = (loc == w - 1) ? 0 : loc + 1; } numaAddNumber(na, loc); } } else if (side == L_FROM_RIGHT) { pixGetLastOffPixelInRun(pixs, w - 1, 0, L_FROM_RIGHT, &loc); loc = (loc == 0) ? w - 1 : loc - 1; /* back to the right edge */ numaAddNumber(na, loc); for (y = 1; y < h; y++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); } else { pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); loc = (loc == 0) ? w - 1 : loc - 1; } numaAddNumber(na, loc); } } else if (side == L_FROM_TOP) { pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_TOP, &loc); loc = (loc == h - 1) ? 0 : loc + 1; /* back to the top edge */ numaAddNumber(na, loc); for (x = 1; x < w; x++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); } else { pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); loc = (loc == h - 1) ? 0 : loc + 1; } numaAddNumber(na, loc); } } else { /* side == L_FROM_BOT */ pixGetLastOffPixelInRun(pixs, 0, h - 1, L_FROM_BOT, &loc); loc = (loc == 0) ? h - 1 : loc - 1; /* back to the bottom edge */ numaAddNumber(na, loc); for (x = 1; x < w; x++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); } else { pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); loc = (loc == 0) ? h - 1 : loc - 1; } numaAddNumber(na, loc); } } if (debugfile) { pixt = pixConvertTo8(pixs, TRUE); cmap = pixGetColormap(pixt); pixcmapAddColor(cmap, 255, 0, 0); index = pixcmapGetCount(cmap) - 1; if (side == L_FROM_LEFT || side == L_FROM_RIGHT) { for (y = 0; y < h; y++) { numaGetIValue(na, y, &ival); pixSetPixel(pixt, ival, y, index); } } else { /* L_FROM_TOP or L_FROM_BOT */ for (x = 0; x < w; x++) { numaGetIValue(na, x, &ival); pixSetPixel(pixt, x, ival, index); } } pixWrite(debugfile, pixt, IFF_PNG); pixDestroy(&pixt); } return na; } /* * \brief pixGetLastOffPixelInRun() * * \param[in] pixs 1 bpp * \param[in] x, y starting location * \param[in] direction L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT * \param[out] ploc location in scan direction coordinate * of last OFF pixel found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Search starts from the pixel at (x, y), which is OFF.
 *      (2) It returns the location in the scan direction of the last
 *          pixel in the current run that is OFF.
 *      (3) The interface for these pixel run functions is cleaner when
 *          you ask for the last pixel in the current run, rather than the
 *          first pixel of opposite polarity that is found, because the
 *          current run may go to the edge of the image, in which case
 *          no pixel of opposite polarity is found.
 * 
*/ l_ok pixGetLastOffPixelInRun(PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc) { l_int32 loc, w, h; l_uint32 val; if (!ploc) return ERROR_INT("&loc not defined", __func__, 1); *ploc = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && direction != L_FROM_TOP && direction != L_FROM_BOT) return ERROR_INT("invalid side", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_FROM_LEFT) { for (loc = x; loc < w; loc++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) break; } *ploc = loc - 1; } else if (direction == L_FROM_RIGHT) { for (loc = x; loc >= 0; loc--) { pixGetPixel(pixs, loc, y, &val); if (val == 1) break; } *ploc = loc + 1; } else if (direction == L_FROM_TOP) { for (loc = y; loc < h; loc++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) break; } *ploc = loc - 1; } else if (direction == L_FROM_BOT) { for (loc = y; loc >= 0; loc--) { pixGetPixel(pixs, x, loc, &val); if (val == 1) break; } *ploc = loc + 1; } return 0; } /* * \brief pixGetLastOnPixelInRun() * * \param[in] pixs 1 bpp * \param[in] x, y starting location * \param[in] direction L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT * \param[out] ploc location in scan direction coordinate * of first ON pixel found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Search starts from the pixel at (x, y), which is ON.
 *      (2) It returns the location in the scan direction of the last
 *          pixel in the current run that is ON.
 * 
*/ l_int32 pixGetLastOnPixelInRun(PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc) { l_int32 loc, w, h; l_uint32 val; if (!ploc) return ERROR_INT("&loc not defined", __func__, 1); *ploc = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && direction != L_FROM_TOP && direction != L_FROM_BOT) return ERROR_INT("invalid side", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_FROM_LEFT) { for (loc = x; loc < w; loc++) { pixGetPixel(pixs, loc, y, &val); if (val == 0) break; } *ploc = loc - 1; } else if (direction == L_FROM_RIGHT) { for (loc = x; loc >= 0; loc--) { pixGetPixel(pixs, loc, y, &val); if (val == 0) break; } *ploc = loc + 1; } else if (direction == L_FROM_TOP) { for (loc = y; loc < h; loc++) { pixGetPixel(pixs, x, loc, &val); if (val == 0) break; } *ploc = loc - 1; } else if (direction == L_FROM_BOT) { for (loc = y; loc >= 0; loc--) { pixGetPixel(pixs, x, loc, &val); if (val == 0) break; } *ploc = loc + 1; } return 0; } leptonica-1.86.0/src/encoding.c000066400000000000000000000603261506303110300163040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - This software is distributed in the hope that it will be - useful, but with NO WARRANTY OF ANY KIND. - No author or distributor accepts responsibility to anyone for the - consequences of using this software, or for whether it serves any - particular purpose or works at all, unless he or she says so in - writing. Everyone is granted permission to copy, modify and - redistribute this source code, for commercial or non-commercial - purposes, with the following restrictions: (1) the origin of this - source code must not be misrepresented; (2) modified versions must - be plainly marked as such; and (3) this notice may not be removed - or altered from any source or modified source distribution. *====================================================================*/ /* * encodings.c * * Base64 * char *encodeBase64() * l_uint8 *decodeBase64() * static l_int32 isBase64() * static l_int32 *genReverseTab64() * static void byteConvert3to4() * static void byteConvert4to3() * * Ascii85 * char *encodeAscii85() * l_uint8 *decodeAscii85() * static l_int32 convertChunkToAscii85() * * char *encodeAscii85WithComp() * l_uint8 *decodeAscii85WithComp() * * String reformatting for base 64 encoded data * char *reformatPacked64() * * Base64 encoding is useful for encding binary data in a restricted set of * 64 printable ascii symbols, that includes the 62 alphanumerics and '+' * and '/'. Notably it does not include quotes, so that base64 encoded * strings can be used in situations where quotes are used for formatting. * 64 symbols was chosen because it is the smallest number that can be used * in 4-for-3 byte encoding of binary data: * log2(64) / log2(256) = 0.75 = 3/4 * * Ascii85 encoding is used in PostScript and some pdf files for * representing binary data (for example, a compressed image) in printable * ascii symbols. It has a dictionary of 85 symbols; 85 was chosen because * it is the smallest number that can be used in 5-for-4 byte encoding * of binary data (256 possible input values). This can be seen from * the max information content in such a sequence: * log2(84) / log2(256) = 0.799 < 4/5 * log2(85) / log2(256) = 0.801 > 4/5 */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Base64 encoding table in string representation */ static const l_int32 MAX_BASE64_LINE = 72; /* max line length base64 */ static const char *tablechar64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; static l_int32 isBase64(char); static l_int32 *genReverseTab64(void); static void byteConvert3to4(l_uint8 *in3, l_uint8 *out4); static void byteConvert4to3(l_uint8 *in4, l_uint8 *out3); /* Ascii85 encoding */ static const l_int32 MAX_ASCII85_LINE = 64; /* max line length ascii85 */ static const l_uint32 power85[5] = {1, 85, 85 * 85, 85 * 85 * 85, 85 * 85 * 85 * 85}; static l_int32 convertChunkToAscii85(const l_uint8 *inarray, size_t insize, l_int32 *pindex, char *outbuf, l_int32 *pnbout); /*-------------------------------------------------------------* * Utility for encoding and decoding data with base64 * *-------------------------------------------------------------*/ /*! * \brief encodeBase64() * * \param[in] inarray input binary data * \param[in] insize number of bytes in input array * \param[out] poutsize number of bytes in output char array * \return chara with MAX_BASE64_LINE characters + \n in each line * *
 * Notes:
 *      (1) The input character data is unrestricted binary.
 *          The output encoded data consists of the 64 characters
 *          in the base64 set, plus newlines and the pad character '='.
 * 
*/ char * encodeBase64(const l_uint8 *inarray, l_int32 insize, l_int32 *poutsize) { char *chara; const l_uint8 *bytea; l_uint8 array3[3], array4[4]; l_int32 outsize, i, j, index, linecount; if (!poutsize) return (char *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!inarray) return (char *)ERROR_PTR("inarray not defined", __func__, NULL); if (insize <= 0) return (char *)ERROR_PTR("insize not > 0", __func__, NULL); /* The output array is padded to a multiple of 4 bytes, not * counting the newlines. We just need to allocate a large * enough array, and add 4 bytes to make sure it is big enough. */ outsize = 4 * ((insize + 2) / 3); /* without newlines */ outsize += outsize / MAX_BASE64_LINE + 4; /* with the newlines */ if ((chara = (char *)LEPT_CALLOC(outsize, sizeof(char))) == NULL) return (char *)ERROR_PTR("chara not made", __func__, NULL); /* Read all the input data, and convert in sets of 3 input * bytes --> 4 output bytes. */ i = index = linecount = 0; bytea = inarray; while (insize--) { if (linecount == MAX_BASE64_LINE) { chara[index++] = '\n'; linecount = 0; } array3[i++] = *bytea++; if (i == 3) { /* convert 3 to 4 and save */ byteConvert3to4(array3, array4); for (j = 0; j < 4; j++) chara[index++] = tablechar64[array4[j]]; i = 0; linecount += 4; } } /* Suppose 1 or 2 bytes has been read but not yet processed. * If 1 byte has been read, this will generate 2 bytes of * output, with 6 bits to the first byte and 2 bits to the second. * We will add two bytes of '=' for padding. * If 2 bytes has been read, this will generate 3 bytes of output, * with 6 bits to the first 2 bytes and 4 bits to the third, and * we add a fourth padding byte ('='). */ if (i > 0) { /* left-over 1 or 2 input bytes */ for (j = i; j < 3; j++) array3[j] = '\0'; /* zero the remaining input bytes */ byteConvert3to4(array3, array4); for (j = 0; j <= i; j++) chara[index++] = tablechar64[array4[j]]; for (j = i + 1; j < 4; j++) chara[index++] = '='; } *poutsize = index; return chara; } /*! * \brief decodeBase64() * * \param[in] inarray input encoded char data, with 72 chars/line) * \param[in] insize number of bytes in input array * \param[out] poutsize number of bytes in output byte array * \return bytea decoded byte data, or NULL on error * *
 * Notes:
 *      (1) The input character data should have only 66 different characters:
 *          The 64 character set for base64 encoding, plus the pad
 *          character '=' and newlines for formatting with fixed line
 *          lengths.  If there are any other characters, the decoder
 *          will declare the input data to be invalid and return NULL.
 *      (2) The decoder ignores newlines and, for a valid input string,
 *          stops reading input when a pad byte is found.
 * 
*/ l_uint8 * decodeBase64(const char *inarray, l_int32 insize, l_int32 *poutsize) { char inchar; l_uint8 *bytea; l_uint8 array3[3], array4[4]; l_int32 *rtable64; l_int32 i, j, outsize, in_index, out_index; if (!poutsize) return (l_uint8 *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!inarray) return (l_uint8 *)ERROR_PTR("inarray not defined", __func__, NULL); if (insize <= 0) return (l_uint8 *)ERROR_PTR("insize not > 0", __func__, NULL); /* Validate the input data */ for (i = 0; i < insize; i++) { inchar = inarray[i]; if (inchar == '\n') continue; if (isBase64(inchar) == 0 && inchar != '=') return (l_uint8 *)ERROR_PTR("invalid char in inarray", __func__, NULL); } /* The input array typically is made with a newline every * MAX_BASE64_LINE input bytes. However, as a printed string, the * newlines would be stripped. So when we allocate the output * array, assume the input array is all data, but strip * out the newlines during decoding. This guarantees that * the allocated array is large enough. */ outsize = 3 * ((insize + 3) / 4) + 4; if ((bytea = (l_uint8 *)LEPT_CALLOC(outsize, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bytea not made", __func__, NULL); /* The number of encoded input data bytes is always a multiple of 4. * Read all the data, until you reach either the end or * the first pad character '='. The data is processed in * units of 4 input bytes, generating 3 output decoded bytes * of binary data. Newlines are ignored. If there are no * pad bytes, i == 0 at the end of this section. */ rtable64 = genReverseTab64(); i = in_index = out_index = 0; for (in_index = 0; in_index < insize; in_index++) { inchar = inarray[in_index]; if (inchar == '\n') continue; if (inchar == '=') break; array4[i++] = rtable64[(unsigned char)inchar]; if (i < 4) { continue; } else { /* i == 4; convert 4 to 3 and save */ byteConvert4to3(array4, array3); for (j = 0; j < 3; j++) bytea[out_index++] = array3[j]; i = 0; } } /* If i > 0, we ran into pad bytes ('='). If i == 2, there are * two input pad bytes and one output data byte. If i == 3, * there is one input pad byte and two output data bytes. */ if (i > 0) { for (j = i; j < 4; j++) array4[j] = '\0'; /* zero the remaining input bytes */ byteConvert4to3(array4, array3); for (j = 0; j < i - 1; j++) bytea[out_index++] = array3[j]; } *poutsize = out_index; LEPT_FREE(rtable64); return bytea; } /*! * \brief isBase64() */ static l_int32 isBase64(char c) { return (isalnum(((int)c)) || ((c) == '+') || ((c) == '/')) ? 1 : 0; } /*! * \brief genReverseTab64() */ static l_int32 * genReverseTab64(void) { l_int32 i; l_int32 *rtable64; rtable64 = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); for (i = 0; i < 64; i++) { rtable64[(unsigned char)tablechar64[i]] = i; } return rtable64; } /*! * \brief byteConvert3to4() */ static void byteConvert3to4(l_uint8 *in3, l_uint8 *out4) { out4[0] = in3[0] >> 2; out4[1] = ((in3[0] & 0x03) << 4) | (in3[1] >> 4); out4[2] = ((in3[1] & 0x0f) << 2) | (in3[2] >> 6); out4[3] = in3[2] & 0x3f; return; } /*! * \brief byteConvert4to3() */ static void byteConvert4to3(l_uint8 *in4, l_uint8 *out3) { out3[0] = (in4[0] << 2) | (in4[1] >> 4); out3[1] = ((in4[1] & 0x0f) << 4) | (in4[2] >> 2); out3[2] = ((in4[2] & 0x03) << 6) | in4[3]; return; } /*-------------------------------------------------------------* * Utility for encoding and decoding data with ascii85 * *-------------------------------------------------------------*/ /*! * \brief encodeAscii85() * * \param[in] inarray input data * \param[in] insize number of bytes in input array * \param[out] poutsize number of bytes in output char array * \return chara with 64 characters + \n in each line * *
 * Notes:
 *      (1) Ghostscript has a stack break if the last line of
 *          data only has a '>', so we avoid the problem by
 *          always putting '~>' on the last line.
 * 
*/ char * encodeAscii85(const l_uint8 *inarray, size_t insize, size_t *poutsize) { char *chara; char outbuf[8]; l_int32 maxsize, i, index, linecount, nbout, eof; size_t outindex; if (!poutsize) return (char *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!inarray) return (char *)ERROR_PTR("inarray not defined", __func__, NULL); if (insize <= 0) return (char *)ERROR_PTR("insize not > 0", __func__, NULL); /* Accumulate results in char array */ maxsize = (l_int32)(80. + (insize * 5. / 4.) * (1. + 2. / MAX_ASCII85_LINE)); if ((chara = (char *)LEPT_CALLOC(maxsize, sizeof(char))) == NULL) return (char *)ERROR_PTR("chara not made", __func__, NULL); linecount = 0; index = 0; outindex = 0; while (1) { eof = convertChunkToAscii85(inarray, insize, &index, outbuf, &nbout); for (i = 0; i < nbout; i++) { chara[outindex++] = outbuf[i]; linecount++; if (linecount >= MAX_ASCII85_LINE) { chara[outindex++] = '\n'; linecount = 0; } } if (eof == TRUE) { if (linecount != 0) chara[outindex++] = '\n'; chara[outindex++] = '~'; chara[outindex++] = '>'; chara[outindex++] = '\n'; break; } } *poutsize = outindex; return chara; } /*! * \brief convertChunkToAscii85() * * \param[in] inarray input data * \param[in] insize number of bytes in input array * \param[out] pindex use and -- ptr * \param[in] outbuf holds 8 ascii chars; we use no more than 7 * \param[out] pnbsout number of bytes written to outbuf * \return boolean for eof 0 if more data, 1 if end of file * *
 * Notes:
 *      (1) Attempts to read 4 bytes and write 5.
 *      (2) Writes 1 byte if the value is 0.
 * 
*/ static l_int32 convertChunkToAscii85(const l_uint8 *inarray, size_t insize, l_int32 *pindex, char *outbuf, l_int32 *pnbout) { l_uint8 inbyte; l_uint32 inword, val; l_int32 eof, index, nread, nbout, i; eof = FALSE; index = *pindex; nread = L_MIN(4, (insize - index)); if (insize == index + nread) eof = TRUE; *pindex += nread; /* save new index */ /* Read input data and save in l_uint32 */ inword = 0; for (i = 0; i < nread; i++) { inbyte = inarray[index + i]; inword += (l_uint32)inbyte << (8 * (3 - i)); } #if 0 lept_stderr("index = %d, nread = %d\n", index, nread); lept_stderr("inword = %x\n", inword); lept_stderr("eof = %d\n", eof); #endif /* Special case: output 1 byte only */ if (inword == 0) { outbuf[0] = 'z'; nbout = 1; } else { /* output nread + 1 bytes */ for (i = 4; i >= 4 - nread; i--) { val = inword / power85[i]; outbuf[4 - i] = (l_uint8)(val + '!'); inword -= val * power85[i]; } nbout = nread + 1; } *pnbout = nbout; return eof; } /*! * \brief decodeAscii85() * * \param[in] inarray ascii85 input data * \param[in] insize number of bytes in input array * \param[out] poutsize number of bytes in output l_uint8 array * \return outarray binary * *
 * Notes:
 *      (1) We assume the data is properly encoded, so we do not check
 *          for invalid characters or the final '>' character.
 *      (2) We permit whitespace to be added to the encoding in an
 *          arbitrary way.
 * 
*/ l_uint8 * decodeAscii85(const char *inarray, size_t insize, size_t *poutsize) { char inc; const char *pin; l_uint8 val; l_uint8 *outa; l_int32 maxsize, ocount, bytecount, index; l_uint32 oword; if (!poutsize) return (l_uint8 *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!inarray) return (l_uint8 *)ERROR_PTR("inarray not defined", __func__, NULL); if (insize <= 0) return (l_uint8 *)ERROR_PTR("insize not > 0", __func__, NULL); /* Accumulate results in outa */ maxsize = (l_int32)(80. + (insize * 4. / 5.)); /* plenty big */ if ((outa = (l_uint8 *)LEPT_CALLOC(maxsize, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("outa not made", __func__, NULL); pin = inarray; ocount = 0; /* byte index into outa */ oword = 0; for (index = 0, bytecount = 0; index < insize; index++, pin++) { inc = *pin; if (inc == ' ' || inc == '\t' || inc == '\n' || inc == '\f' || inc == '\r' || inc == '\v') /* ignore white space */ continue; val = inc - '!'; if (val < 85) { oword = oword * 85 + val; if (bytecount < 4) { bytecount++; } else { /* we have all 5 input chars for the oword */ outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; outa[ocount + 2] = (oword >> 8) & 0xff; outa[ocount + 3] = oword & 0xff; ocount += 4; bytecount = 0; oword = 0; } } else if (inc == 'z' && bytecount == 0) { outa[ocount] = 0; outa[ocount + 1] = 0; outa[ocount + 2] = 0; outa[ocount + 3] = 0; ocount += 4; } else if (inc == '~') { /* end of data */ L_INFO(" %d extra bytes output\n", __func__, bytecount - 1); switch (bytecount) { case 0: /* normal eof */ case 1: /* error */ break; case 2: /* 1 extra byte */ oword = oword * power85[3] + 0xffffff; outa[ocount] = (oword >> 24) & 0xff; break; case 3: /* 2 extra bytes */ oword = oword * power85[2] + 0xffff; outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; break; case 4: /* 3 extra bytes */ oword = oword * 85 + 0xff; outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; outa[ocount + 2] = (oword >> 8) & 0xff; break; } if (bytecount > 1) ocount += (bytecount - 1); break; } } *poutsize = ocount; return outa; } /*! * \brief encodeAscii85WithComp) * * \param[in] indata input binary data * \param[in] insize number of bytes in input data * \param[out] poutsize number of bytes in output string * \return outstr with 64 characters + \n in each line * *
 * Notes:
 *      (1) Compress the input data; then encode ascii85.  For ascii
 *          input, a first compression step will significantly reduce
 *          the final encoded output size.
 * 
*/ char * encodeAscii85WithComp(const l_uint8 *indata, size_t insize, size_t *poutsize) { char *outstr; size_t size1; l_uint8 *data1; if (!poutsize) return (char *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!indata) return (char *)ERROR_PTR("indata not defined", __func__, NULL); if ((data1 = zlibCompress(indata, insize, &size1)) == NULL) return (char *)ERROR_PTR("data1 not made", __func__, NULL); outstr = encodeAscii85(data1, size1, poutsize); LEPT_FREE(data1); return outstr; } /*! * \brief decodeAscii85WithComp() * * \param[in] instr ascii85 input data string * \param[in] insize number of bytes in input data * \param[out] poutsize number of bytes in output binary data * \return outdata binary data before compression and ascii85 encoding * *
 * Notes:
 *      (1) We assume the input data has been zlib compressed and then
 *          properly encoded, so we reverse the procedure.  This is the
 *          inverse of encodeAscii85WithComp().
 *      (2) Set %insize == 0 to use strlen(%instr).
 * 
*/ l_uint8 * decodeAscii85WithComp(const char *instr, size_t insize, size_t *poutsize) { size_t size1; l_uint8 *data1, *outdata; if (!poutsize) return (l_uint8 *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!instr) return (l_uint8 *)ERROR_PTR("instr not defined", __func__, NULL); if (insize == 0) insize = strlen(instr); if ((data1 = decodeAscii85(instr, insize, &size1)) == NULL) return (l_uint8 *)ERROR_PTR("data1 not made", __func__, NULL); outdata = zlibUncompress(data1, size1, poutsize); LEPT_FREE(data1); return outdata; } /*-------------------------------------------------------------* * String reformatting for base 64 encoded data * *-------------------------------------------------------------*/ /*! * \brief reformatPacked64() * * \param[in] inarray base64 encoded string with newlines * \param[in] insize number of bytes in input array * \param[in] leadspace number of spaces in each line before the data * \param[in] linechars number of bytes of data in each line; multiple of 4 * \param[in] addquotes 1 to add quotes to each line of data; 0 to skip * \param[out] poutsize number of bytes in output char array * \return outarray ascii * *
 * Notes:
 *      (1) Each line in the output array has %leadspace space characters,
 *          followed optionally by a double-quote, followed by %linechars
 *          bytes of base64 data, followed optionally by a double-quote,
 *          followed by a newline.
 *      (2) This can be used to convert a base64 encoded string to a
 *          string formatted for inclusion in a C source file.
 * 
*/ char * reformatPacked64(const char *inarray, l_int32 insize, l_int32 leadspace, l_int32 linechars, l_int32 addquotes, l_int32 *poutsize) { char *flata, *outa; l_int32 i, j, flatindex, flatsize, outindex, nlines, linewithpad, linecount; if (!poutsize) return (char *)ERROR_PTR("&outsize not defined", __func__, NULL); *poutsize = 0; if (!inarray) return (char *)ERROR_PTR("inarray not defined", __func__, NULL); if (insize <= 0) return (char *)ERROR_PTR("insize not > 0", __func__, NULL); if (leadspace < 0) return (char *)ERROR_PTR("leadspace must be >= 0", __func__, NULL); if (linechars % 4) return (char *)ERROR_PTR("linechars % 4 must be 0", __func__, NULL); /* Remove all white space */ if ((flata = (char *)LEPT_CALLOC(insize, sizeof(char))) == NULL) return (char *)ERROR_PTR("flata not made", __func__, NULL); for (i = 0, flatindex = 0; i < insize; i++) { if (isBase64(inarray[i]) || inarray[i] == '=') flata[flatindex++] = inarray[i]; } /* Generate output string */ flatsize = flatindex; nlines = (flatsize + linechars - 1) / linechars; linewithpad = leadspace + linechars + 1; /* including newline */ if (addquotes) linewithpad += 2; if ((outa = (char *)LEPT_CALLOC((size_t)nlines * linewithpad, sizeof(char))) == NULL) { LEPT_FREE(flata); return (char *)ERROR_PTR("outa not made", __func__, NULL); } for (j = 0, outindex = 0; j < leadspace; j++) outa[outindex++] = ' '; if (addquotes) outa[outindex++] = '"'; for (i = 0, linecount = 0; i < flatsize; i++) { if (linecount == linechars) { if (addquotes) outa[outindex++] = '"'; outa[outindex++] = '\n'; for (j = 0; j < leadspace; j++) outa[outindex++] = ' '; if (addquotes) outa[outindex++] = '"'; linecount = 0; } outa[outindex++] = flata[i]; linecount++; } if (addquotes) outa[outindex++] = '"'; *poutsize = outindex; LEPT_FREE(flata); return outa; } leptonica-1.86.0/src/endianness.h.in000066400000000000000000000003401506303110300172450ustar00rootroot00000000000000#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN) # if @APPLE_UNIVERSAL_BUILD@ # ifdef __BIG_ENDIAN__ # define L_BIG_ENDIAN # else # define L_LITTLE_ENDIAN # endif # else # define @ENDIANNESS@ # endif #endif leptonica-1.86.0/src/enhance.c000066400000000000000000002443141506303110300161200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file enhance.c *
 *
 *      Gamma TRC (tone reproduction curve) mapping
 *           PIX     *pixGammaTRC()
 *           PIX     *pixGammaTRCMasked()
 *           PIX     *pixGammaTRCWithAlpha()
 *           NUMA    *numaGammaTRC()
 *
 *      Contrast enhancement
 *           PIX     *pixContrastTRC()
 *           PIX     *pixContrastTRCMasked()
 *           NUMA    *numaContrastTRC()
 *
 *      Histogram equalization
 *           PIX     *pixEqualizeTRC()
 *           NUMA    *numaEqualizeTRC()
 *
 *      Generic TRC mapper
 *           l_int32  pixTRCMap()
 *           l_int32  pixTRCMapGeneral()
 *
 *      Unsharp-masking
 *           PIX     *pixUnsharpMasking()
 *           PIX     *pixUnsharpMaskingGray()
 *           PIX     *pixUnsharpMaskingFast()
 *           PIX     *pixUnsharpMaskingGrayFast()
 *           PIX     *pixUnsharpMaskingGray1D()
 *           PIX     *pixUnsharpMaskingGray2D()
 *
 *      Hue and saturation modification
 *           PIX     *pixModifyHue()
 *           PIX     *pixModifySaturation()
 *           l_int32  pixMeasureSaturation()
 *           PIX     *pixModifyBrightness()
 *
 *      Color shifting
 *           PIX     *pixMosaicColorShiftRGB()
 *           PIX     *pixColorShiftRGB()
 *
 *      Darken gray (unsaturated) pixels
 *           PIX     *pixDarkenGray()
 *
 *      General multiplicative constant color transform
 *           PIX     *pixMultConstantColor()
 *           PIX     *pixMultMatrixColor()
 *
 *      Edge by bandpass
 *           PIX     *pixHalfEdgeByBandpass()
 *
 *      Gamma correction, contrast enhancement and histogram equalization
 *      apply a simple mapping function to each pixel (or, for color
 *      images, to each sample (i.e., r,g,b) of the pixel).
 *
 *       ~ Gamma correction either lightens the image or darkens
 *         it, depending on whether the gamma factor is greater
 *         or less than 1.0, respectively.
 *
 *       ~ Contrast enhancement darkens the pixels that are already
 *         darker than the middle of the dynamic range (128)
 *         and lightens pixels that are lighter than 128.
 *
 *       ~ Histogram equalization remaps to have the same number
 *         of image pixels at each of 256 intensity values.  This is
 *         a quick and dirty method of adjusting contrast and brightness
 *         to bring out details in both light and dark regions.
 *
 *      Unsharp masking is a more complicated enhancement.
 *      A "high frequency" image, generated by subtracting
 *      the smoothed ("low frequency") part of the image from
 *      itself, has all the energy at the edges.  This "edge image"
 *      has 0 average value.  A fraction of the edge image is
 *      then added to the original, enhancing the differences
 *      between pixel values at edges.  Because we represent
 *      images as l_uint8 arrays, we preserve dynamic range and
 *      handle negative values by doing all the arithmetic on
 *      shifted l_uint16 arrays; the l_uint8 values are recovered
 *      at the end.
 *
 *      Hue and saturation modification work in HSV space.  Because
 *      this is too large for efficient table lookup, each pixel value
 *      is transformed to HSV, modified, and transformed back.
 *      It's not the fastest way to do this, but the method is
 *      easily understood.
 *
 *      Unsharp masking is never in-place, and returns a clone if no
 *      operation is to be performed.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Scales contrast enhancement factor to have a useful range * between 0.0 and 1.0 */ static const l_float32 EnhanceScaleFactor = 5.0; /*-------------------------------------------------------------* * Gamma TRC (tone reproduction curve) mapping * *-------------------------------------------------------------*/ /*! * \brief pixGammaTRC() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap * \param[in] gamma gamma correction; must be > 0.0 * \param[in] minval input value that gives 0 for output; can be < 0 * \param[in] maxval input value that gives 255 for output; can be > 255 * \return pixd always * *
 * Notes:
 *      (1) pixd must either be null or equal to pixs.
 *          For in-place operation, set pixd == pixs:
 *             pixGammaTRC(pixs, pixs, ...);
 *          To get a new image, set pixd == null:
 *             pixd = pixGammaTRC(NULL, pixs, ...);
 *      (2) If pixs is colormapped, the colormap is transformed,
 *          either in-place or in a copy of pixs.
 *      (3) We use a gamma mapping between minval and maxval.
 *      (4) If gamma < 1.0, the image will appear darker;
 *          if gamma > 1.0, the image will appear lighter;
 *      (5) If gamma = 1.0 and minval = 0 and maxval = 255, no
 *          enhancement is performed; return a copy unless in-place,
 *          in which case this is a no-op.
 *      (6) For color images that are not colormapped, the mapping
 *          is applied to each component.
 *      (7) minval and maxval are not restricted to the interval [0, 255].
 *          If minval < 0, an input value of 0 is mapped to a
 *          nonzero output.  This will turn black to gray.
 *          If maxval > 255, an input value of 255 is mapped to
 *          an output value less than 255.  This will turn
 *          white (e.g., in the background) to gray.
 *      (8) Increasing minval darkens the image.
 *      (9) Decreasing maxval bleaches the image.
 *      (10) Simultaneously increasing minval and decreasing maxval
 *           will darken the image and make the colors more intense;
 *           e.g., minval = 50, maxval = 200.
 *      (11) See numaGammaTRC() for further examples of use.
 *      (12) Use pixTRCMapGeneral() if applying different mappings
 *           to each channel in an RGB image.
 * 
*/ PIX * pixGammaTRC(PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 d; NUMA *nag; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", __func__); gamma = 1.0; } if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", __func__, pixd); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, pixd); if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if (cmap) { pixcmapGammaTRC(pixGetColormap(pixd), gamma, minval, maxval); return pixd; } /* pixd is 8 or 32 bpp */ if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", __func__, pixd); pixTRCMap(pixd, NULL, nag); numaDestroy(&nag); return pixd; } /*! * \brief pixGammaTRCMasked() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 8 or 32 bpp; not colormapped * \param[in] pixm [optional] null or 1 bpp * \param[in] gamma gamma correction; must be > 0.0 * \param[in] minval input value that gives 0 for output; can be < 0 * \param[in] maxval input value that gives 255 for output; can be > 255 * \return pixd always * *
 * Notes:
 *      (1) Same as pixGammaTRC() except mapping is optionally over
 *          a subset of pixels described by pixm.
 *      (2) Masking does not work for colormapped images.
 *      (3) See pixGammaTRC() for details on how to use the parameters.
 * 
*/ PIX * pixGammaTRCMasked(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 d; NUMA *nag; if (!pixm) return pixGammaTRC(pixd, pixs, gamma, minval, maxval); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("invalid: pixs has a colormap", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, pixd); if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", __func__, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", __func__); gamma = 1.0; } if (gamma == 1.0 && minval == 0 && maxval == 255) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", __func__, pixd); pixTRCMap(pixd, pixm, nag); numaDestroy(&nag); return pixd; } /*! * \brief pixGammaTRCWithAlpha() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 32 bpp * \param[in] gamma gamma correction; must be > 0.0 * \param[in] minval input value that gives 0 for output; can be < 0 * \param[in] maxval input value that gives 255 for output; can be > 255 * \return pixd always * *
 * Notes:
 *      (1) See usage notes in pixGammaTRC().
 *      (2) This version saves the alpha channel.  It is only valid
 *          for 32 bpp (no colormap), and is a bit slower.
 * 
*/ PIX * pixGammaTRCWithAlpha(PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval) { NUMA *nag; PIX *pixalpha; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", __func__); gamma = 1.0; } if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", __func__, pixd); if (gamma == 1.0 && minval == 0 && maxval == 255) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); pixalpha = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* save */ if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", __func__, pixd); pixTRCMap(pixd, NULL, nag); pixSetRGBComponent(pixd, pixalpha, L_ALPHA_CHANNEL); /* restore */ pixSetSpp(pixd, 4); numaDestroy(&nag); pixDestroy(&pixalpha); return pixd; } /*! * \brief numaGammaTRC() * * \param[in] gamma gamma factor; must be > 0.0 * \param[in] minval input value that gives 0 for output * \param[in] maxval input value that gives 255 for output * \return na, or NULL on error * *
 * Notes:
 *      (1) The map is returned as a numa; values are clipped to [0, 255].
 *      (2) For a linear mapping, set gamma = 1.0.
 *      (3) To force all intensities into a range within fraction delta
 *          of white, use: minval = -256 * (1 - delta) / delta
 *                         maxval = 255
 *      (4) To force all intensities into a range within fraction delta
 *          of black, use: minval = 0
 *                         maxval = 256 * (1 - delta) / delta
 * 
*/ NUMA * numaGammaTRC(l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 i, val; l_float32 x, invgamma; NUMA *na; if (minval >= maxval) return (NUMA *)ERROR_PTR("minval not < maxval", __func__, NULL); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", __func__); gamma = 1.0; } invgamma = 1. / gamma; na = numaCreate(256); for (i = 0; i < minval; i++) numaAddNumber(na, 0); for (i = minval; i <= maxval; i++) { if (i < 0) continue; if (i > 255) continue; x = (l_float32)(i - minval) / (l_float32)(maxval - minval); val = (l_int32)(255. * powf(x, invgamma) + 0.5); val = L_MAX(val, 0); val = L_MIN(val, 255); numaAddNumber(na, val); } for (i = maxval + 1; i < 256; i++) numaAddNumber(na, 255); return na; } /*-------------------------------------------------------------* * Contrast enhancement * *-------------------------------------------------------------*/ /*! * \brief pixContrastTRC() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap * \param[in] factor 0.0 is no enhancement * \return pixd always * *
 * Notes:
 *      (1) pixd must either be null or equal to pixs.
 *          For in-place operation, set pixd == pixs:
 *             pixContrastTRC(pixs, pixs, ...);
 *          To get a new image, set pixd == null:
 *             pixd = pixContrastTRC(NULL, pixs, ...);
 *      (2) If pixs is colormapped, the colormap is transformed,
 *          either in-place or in a copy of pixs.
 *      (3) Contrast is enhanced by mapping each color component
 *          using an atan function with maximum slope at 127.
 *          Pixels below 127 are lowered in intensity and pixels
 *          above 127 are increased.
 *      (4) The useful range for the contrast factor is scaled to
 *          be in (0.0 to 1.0), but larger values can also be used.
 *      (5) If factor == 0.0, no enhancement is performed; return a copy
 *          unless in-place, in which case this is a no-op.
 *      (6) For color images that are not colormapped, the mapping
 *          is applied to each component.
 * 
*/ PIX * pixContrastTRC(PIX *pixd, PIX *pixs, l_float32 factor) { l_int32 d; NUMA *nac; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0\n", __func__); factor = 0.0; } if (factor == 0.0) return pixCopy(pixd, pixs); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, pixd); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if (cmap) { pixcmapContrastTRC(pixGetColormap(pixd), factor); return pixd; } /* pixd is 8 or 32 bpp */ if ((nac = numaContrastTRC(factor)) == NULL) return (PIX *)ERROR_PTR("nac not made", __func__, pixd); pixTRCMap(pixd, NULL, nac); numaDestroy(&nac); return pixd; } /*! * \brief pixContrastTRCMasked() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap * \param[in] pixm [optional] null or 1 bpp * \param[in] factor 0.0 is no enhancement * \return pixd always * *
 * Notes:
 *      (1) Same as pixContrastTRC() except mapping is optionally over
 *          a subset of pixels described by pixm.
 *      (2) Masking does not work for colormapped images.
 *      (3) See pixContrastTRC() for details on how to use the parameters.
 * 
*/ PIX * pixContrastTRCMasked(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 factor) { l_int32 d; NUMA *nac; if (!pixm) return pixContrastTRC(pixd, pixs, factor); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("invalid: pixs has a colormap", __func__, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, pixd); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0\n", __func__); factor = 0.0; } if (factor == 0.0) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if ((nac = numaContrastTRC(factor)) == NULL) return (PIX *)ERROR_PTR("nac not made", __func__, pixd); pixTRCMap(pixd, pixm, nac); numaDestroy(&nac); return pixd; } /*! * \brief numaContrastTRC() * * \param[in] factor generally between 0.0 [no enhancement] * and 1.0, but can be larger than 1.0 * \return na, or NULL on error * *
 * Notes:
 *      (1) The mapping is monotonic increasing, where 0 is mapped
 *          to 0 and 255 is mapped to 255.
 *      (2) As 'factor' is increased from 0.0 (where the mapping is linear),
 *          the map gets closer to its limit as a step function that
 *          jumps from 0 to 255 at the center (input value = 127).
 * 
*/ NUMA * numaContrastTRC(l_float32 factor) { l_int32 i, val; l_float64 x, ymax, ymin, dely, scale; NUMA *na; if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0; no enhancement\n", __func__); factor = 0.0; } if (factor == 0.0) return numaMakeSequence(0, 1, 256); /* linear map */ scale = EnhanceScaleFactor; ymax = atan((l_float64)(1.0 * factor * scale)); ymin = atan((l_float64)(-127. * factor * scale / 128.)); dely = ymax - ymin; na = numaCreate(256); for (i = 0; i < 256; i++) { x = (l_float64)i; val = (l_int32)((255. / dely) * (-ymin + atan((l_float64)(factor * scale * (x - 127.) / 128.))) + 0.5); numaAddNumber(na, val); } return na; } /*-------------------------------------------------------------* * Histogram equalization * *-------------------------------------------------------------*/ /*! * \brief pixEqualizeTRC() * * \param[in] pixd [optional] null or equal to pixs * \param[in] pixs 8 bpp gray, 32 bpp rgb, or colormapped * \param[in] fract fraction of equalization movement of pixel values * \param[in] factor subsampling factor; integer >= 1 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) pixd must either be null or equal to pixs.
 *          For in-place operation, set pixd == pixs:
 *             pixEqualizeTRC(pixs, pixs, ...);
 *          To get a new image, set pixd == null:
 *             pixd = pixEqualizeTRC(NULL, pixs, ...);
 *      (2) In histogram equalization, a tone reproduction curve
 *          mapping is used to make the number of pixels at each
 *          intensity equal.
 *      (3) If fract == 0.0, no equalization is performed; return a copy
 *          unless in-place, in which case this is a no-op.
 *          If fract == 1.0, equalization is complete.
 *      (4) Set the subsampling factor > 1 to reduce the amount of computation.
 *      (5) If pixs is colormapped, the colormap is removed and
 *          converted to rgb or grayscale.
 *      (6) If pixs has color, equalization is done in each channel
 *          separately.
 *      (7) Note that even if there is a colormap, we can get an
 *          in-place operation because the intermediate image pixt
 *          is copied back to pixs (which for in-place is the same
 *          as pixd).
 * 
*/ PIX * pixEqualizeTRC(PIX *pixd, PIX *pixs, l_float32 fract, l_int32 factor) { l_int32 d; NUMA *na; PIX *pixt, *pix8; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pixs not 8/32 bpp or cmapped", __func__, NULL); if (fract < 0.0 || fract > 1.0) return (PIX *)ERROR_PTR("fract not in [0.0 ... 1.0]", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("sampling factor < 1", __func__, NULL); if (fract == 0.0) return pixCopy(pixd, pixs); /* If there is a colormap, remove it. */ if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); /* Make a copy if necessary */ pixd = pixCopy(pixd, pixt); pixDestroy(&pixt); d = pixGetDepth(pixd); if (d == 8) { na = numaEqualizeTRC(pixd, fract, factor); pixTRCMap(pixd, NULL, na); numaDestroy(&na); } else { /* 32 bpp */ pix8 = pixGetRGBComponent(pixd, COLOR_RED); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_RED); numaDestroy(&na); pixDestroy(&pix8); pix8 = pixGetRGBComponent(pixd, COLOR_GREEN); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_GREEN); numaDestroy(&na); pixDestroy(&pix8); pix8 = pixGetRGBComponent(pixd, COLOR_BLUE); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_BLUE); numaDestroy(&na); pixDestroy(&pix8); } return pixd; } /*! * \brief numaEqualizeTRC() * * \param[in] pix 8 bpp, no colormap * \param[in] fract fraction of equalization movement of pixel values * \param[in] factor subsampling factor; integer >= 1 * \return nad, or NULL on error * *
 * Notes:
 *      (1) If fract == 0.0, no equalization will be performed.
 *          If fract == 1.0, equalization is complete.
 *      (2) Set the subsampling factor > 1 to reduce the amount of computation.
 *      (3) The map is returned as a numa with 256 values, specifying
 *          the equalized value (array value) for every input value
 *          (the array index).
 * 
*/ NUMA * numaEqualizeTRC(PIX *pix, l_float32 fract, l_int32 factor) { l_int32 iin, iout, itarg; l_float32 val, sum; NUMA *nah, *nasum, *nad; if (!pix) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); if (pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix not 8 bpp", __func__, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract not in [0.0 ... 1.0]", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", __func__, NULL); if (fract == 0.0) L_WARNING("fract = 0.0; no equalization requested\n", __func__); if ((nah = pixGetGrayHistogram(pix, factor)) == NULL) return (NUMA *)ERROR_PTR("histogram not made", __func__, NULL); numaGetSum(nah, &sum); nasum = numaGetPartialSums(nah); nad = numaCreate(256); for (iin = 0; iin < 256; iin++) { numaGetFValue(nasum, iin, &val); itarg = (l_int32)(255. * val / sum + 0.5); iout = iin + (l_int32)(fract * (itarg - iin)); iout = L_MIN(iout, 255); /* to be safe */ numaAddNumber(nad, iout); } numaDestroy(&nah); numaDestroy(&nasum); return nad; } /*-------------------------------------------------------------* * Generic TRC mapping * *-------------------------------------------------------------*/ /*! * \brief pixTRCMap() * * \param[in] pixs 8 grayscale or 32 bpp rgb; not colormapped * \param[in] pixm [optional] 1 bpp mask * \param[in] na mapping array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This operation is in-place on pixs.
 *      (2) For 32 bpp, this applies the same map to each of the r,g,b
 *          components.
 *      (3) The mapping array is of size 256, and it maps the input
 *          index into values in the range [0, 255].
 *      (4) If defined, the optional 1 bpp mask pixm has its origin
 *          aligned with pixs, and the map function is applied only
 *          to pixels in pixs under the fg of pixm.
 *      (5) For 32 bpp, this does not save the alpha channel.
 * 
*/ l_int32 pixTRCMap(PIX *pixs, PIX *pixm, NUMA *na) { l_int32 w, h, d, wm, hm, wpl, wplm, i, j, sval8, dval8; l_uint32 sval32, dval32; l_uint32 *data, *datam, *line, *linem, *tab; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); if (numaGetCount(na) != 256) return ERROR_INT("na not of size 256", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", __func__, 1); if (pixm) { if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); } tab = (l_uint32 *)numaGetIArray(na); /* get the array for efficiency */ wpl = pixGetWpl(pixs); data = pixGetData(pixs); if (!pixm) { if (d == 8) { for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { sval8 = GET_DATA_BYTE(line, j); dval8 = tab[sval8]; SET_DATA_BYTE(line, j, dval8); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { sval32 = *(line + j); dval32 = tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } } else { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); pixGetDimensions(pixm, &wm, &hm, NULL); if (d == 8) { for (i = 0; i < h; i++) { if (i >= hm) break; line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (j >= wm) break; if (GET_DATA_BIT(linem, j) == 0) continue; sval8 = GET_DATA_BYTE(line, j); dval8 = tab[sval8]; SET_DATA_BYTE(line, j, dval8); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { if (i >= hm) break; line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (j >= wm) break; if (GET_DATA_BIT(linem, j) == 0) continue; sval32 = *(line + j); dval32 = tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } } LEPT_FREE(tab); return 0; } /*! * \brief pixTRCMapGeneral() * * \param[in] pixs 32 bpp rgb; not colormapped * \param[in] pixm [optional] 1 bpp mask * \param[in] nar, nag, nab mapping arrays * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This operation is in-place on %pixs.
 *      (2) Each of the r,g,b mapping arrays is of size 256. They map the
 *          input value for that color component into values in the
 *          range [0, 255].
 *      (3) In the special case where the r, g and b mapping arrays are
 *          all the same, call pixTRCMap() instead.
 *      (4) If defined, the optional 1 bpp mask %pixm has its origin
 *          aligned with %pixs, and the map function is applied only
 *          to pixels in %pixs under the fg of pixm.
 *      (5) The alpha channel is not saved.
 * 
*/ l_int32 pixTRCMapGeneral(PIX *pixs, PIX *pixm, NUMA *nar, NUMA *nag, NUMA *nab) { l_int32 w, h, wm, hm, wpl, wplm, i, j; l_uint32 sval32, dval32; l_uint32 *data, *datam, *line, *linem, *tabr, *tabg, *tabb; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm defined and not 1 bpp", __func__, 1); if (!nar || !nag || !nab) return ERROR_INT("na{r,g,b} not all defined", __func__, 1); if (numaGetCount(nar) != 256 || numaGetCount(nag) != 256 || numaGetCount(nab) != 256) return ERROR_INT("na{r,g,b} not all of size 256", __func__, 1); /* Get the arrays for efficiency */ tabr = (l_uint32 *)numaGetIArray(nar); tabg = (l_uint32 *)numaGetIArray(nag); tabb = (l_uint32 *)numaGetIArray(nab); pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); if (!pixm) { for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { sval32 = *(line + j); dval32 = tabr[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tabg[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tabb[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } else { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); pixGetDimensions(pixm, &wm, &hm, NULL); for (i = 0; i < h; i++) { if (i >= hm) break; line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (j >= wm) break; if (GET_DATA_BIT(linem, j) == 0) continue; sval32 = *(line + j); dval32 = tabr[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tabg[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tabb[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } LEPT_FREE(tabr); LEPT_FREE(tabg); LEPT_FREE(tabb); return 0; } /*-----------------------------------------------------------------------* * Unsharp masking * *-----------------------------------------------------------------------*/ /*! * \brief pixUnsharpMasking() * * \param[in] pixs all depths except 1 bpp; with or without colormaps * \param[in] halfwidth "half-width" of smoothing filter * \param[in] fract fraction of edge added back into image * \return pixd, or NULL on error * *
 * Notes:
 *      (1) We use symmetric smoothing filters of odd dimension,
 *          typically use sizes of 3, 5, 7, etc.  The %halfwidth parameter
 *          for these is (size - 1)/2; i.e., 1, 2, 3, etc.
 *      (2) The fract parameter is typically taken in the
 *          range:  0.2 < fract < 0.7
 *      (3) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMasking(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 d; PIX *pix1, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth == 1 || halfwidth == 2) return pixUnsharpMaskingFast(pixs, halfwidth, fract, L_BOTH_DIRECTIONS); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pix1 = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); /* Sharpen */ d = pixGetDepth(pix1); if (d == 8) { pixd = pixUnsharpMaskingGray(pix1, halfwidth, fract); } else { /* d == 32 */ pixr = pixGetRGBComponent(pix1, COLOR_RED); pixrs = pixUnsharpMaskingGray(pixr, halfwidth, fract); pixDestroy(&pixr); pixg = pixGetRGBComponent(pix1, COLOR_GREEN); pixgs = pixUnsharpMaskingGray(pixg, halfwidth, fract); pixDestroy(&pixg); pixb = pixGetRGBComponent(pix1, COLOR_BLUE); pixbs = pixUnsharpMaskingGray(pixb, halfwidth, fract); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); if (pixGetSpp(pixs) == 4) pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); } pixDestroy(&pix1); return pixd; } /*! * \brief pixUnsharpMaskingGray() * * \param[in] pixs 8 bpp; no colormap * \param[in] halfwidth "half-width" of smoothing filter * \param[in] fract fraction of edge added back into image * \return pixd, or NULL on error * *
 * Notes:
 *      (1) We use symmetric smoothing filters of odd dimension,
 *          typically use sizes of 3, 5, 7, etc.  The %halfwidth parameter
 *          for these is (size - 1)/2; i.e., 1, 2, 3, etc.
 *      (2) The fract parameter is typically taken in the range:
 *          0.2 < fract < 0.7
 *      (3) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMaskingGray(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 w, h, d; PIX *pixc, *pixd; PIXACC *pixacc; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth == 1 || halfwidth == 2) return pixUnsharpMaskingGrayFast(pixs, halfwidth, fract, L_BOTH_DIRECTIONS); if ((pixc = pixBlockconvGray(pixs, NULL, halfwidth, halfwidth)) == NULL) return (PIX *)ERROR_PTR("pixc not made", __func__, NULL); /* Steps: * (1) edge image is pixs - pixc (this is highpass part) * (2) multiply edge image by fract * (3) add fraction of edge to pixs * * To show how this is done with both interfaces to arithmetic * on integer Pix, here is the implementation in the lower-level * function calls: * pixt = pixInitAccumulate(w, h, 0x10000000)) == NULL) * pixAccumulate(pixt, pixs, L_ARITH_ADD); * pixAccumulate(pixt, pixc, L_ARITH_SUBTRACT); * pixMultConstAccumulate(pixt, fract, 0x10000000); * pixAccumulate(pixt, pixs, L_ARITH_ADD); * pixd = pixFinalAccumulate(pixt, 0x10000000, 8)) == NULL) * pixDestroy(&pixt); * * The code below does the same thing using the Pixacc accumulator, * hiding the details of the offset that is needed for subtraction. */ pixacc = pixaccCreate(w, h, 1); pixaccAdd(pixacc, pixs); pixaccSubtract(pixacc, pixc); pixaccMultConst(pixacc, fract); pixaccAdd(pixacc, pixs); pixd = pixaccFinal(pixacc, 8); pixaccDestroy(&pixacc); pixDestroy(&pixc); return pixd; } /*! * \brief pixUnsharpMaskingFast() * * \param[in] pixs all depths except 1 bpp; with or without colormaps * \param[in] halfwidth "half-width" of smoothing filter; 1 and 2 only * \param[in] fract fraction of high frequency added to image * \param[in] direction L_HORIZ, L_VERT, L_BOTH_DIRECTIONS * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The fast version uses separable 1-D filters directly on
 *          the input image.  The halfwidth is either 1 (full width = 3)
 *          or 2 (full width = 5).
 *      (2) The fract parameter is typically taken in the
 *            range:  0.2 < fract < 0.7
 *      (3) To skip horizontal sharpening, use %fracth = 0.0; ditto for %fractv
 *      (4) For one dimensional filtering (as an example):
 *          For %halfwidth = 1, the low-pass filter is
 *              L:    1/3    1/3   1/3
 *          and the high-pass filter is
 *              H = I - L:   -1/3   2/3   -1/3
 *          For %halfwidth = 2, the low-pass filter is
 *              L:    1/5    1/5   1/5    1/5    1/5
 *          and the high-pass filter is
 *              H = I - L:   -1/5  -1/5   4/5  -1/5   -1/5
 *          The new sharpened pixel value is found by adding some fraction
 *          of the high-pass filter value (which sums to 0) to the
 *          initial pixel value:
 *              N = I + fract * H
 *      (5) For 2D, the sharpening filter is not separable, because the
 *          vertical filter depends on the horizontal location relative
 *          to the filter origin, and v.v.   So we either do the full
 *          2D filter (for %halfwidth == 1) or do the low-pass
 *          convolution separably and then compose with the original pix.
 *      (6) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMaskingFast(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { l_int32 d; PIX *pixt, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT && direction != L_BOTH_DIRECTIONS) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); /* Sharpen */ d = pixGetDepth(pixt); if (d == 8) { pixd = pixUnsharpMaskingGrayFast(pixt, halfwidth, fract, direction); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrs = pixUnsharpMaskingGrayFast(pixr, halfwidth, fract, direction); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgs = pixUnsharpMaskingGrayFast(pixg, halfwidth, fract, direction); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbs = pixUnsharpMaskingGrayFast(pixb, halfwidth, fract, direction); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); if (pixGetSpp(pixs) == 4) pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); } pixDestroy(&pixt); return pixd; } /*! * \brief pixUnsharpMaskingGrayFast() * * \param[in] pixs 8 bpp; no colormap * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 * \param[in] fract fraction of high frequency added to image * \param[in] direction L_HORIZ, L_VERT, L_BOTH_DIRECTIONS * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For usage and explanation of the algorithm, see notes
 *          in pixUnsharpMaskingFast().
 *      (2) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMaskingGrayFast(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT && direction != L_BOTH_DIRECTIONS) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (direction != L_BOTH_DIRECTIONS) pixd = pixUnsharpMaskingGray1D(pixs, halfwidth, fract, direction); else /* 2D sharpening */ pixd = pixUnsharpMaskingGray2D(pixs, halfwidth, fract); return pixd; } /*! * \brief pixUnsharpMaskingGray1D() * * \param[in] pixs 8 bpp; no colormap * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 * \param[in] fract fraction of high frequency added to image * \param[in] direction filtering direction; use L_HORIZ or L_VERT * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For usage and explanation of the algorithm, see notes
 *          in pixUnsharpMaskingFast().
 *      (2) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMaskingGray1D(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { l_int32 w, h, d, wpls, wpld, i, j, ival; l_uint32 *datas, *datad; l_uint32 *lines, *lines0, *lines1, *lines2, *lines3, *lines4, *lined; l_float32 val, a[5]; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", __func__, NULL); /* Initialize pixd with pixels from pixs that will not be * set when computing the sharpened values. */ pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, halfwidth, halfwidth); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (halfwidth == 1) { a[0] = -fract / 3.0; a[1] = 1.0 + fract * 2.0 / 3.0; a[2] = a[0]; } else { /* halfwidth == 2 */ a[0] = -fract / 5.0; a[1] = a[0]; a[2] = 1.0 + fract * 4.0 / 5.0; a[3] = a[0]; a[4] = a[0]; } if (direction == L_HORIZ) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (halfwidth == 1) { for (j = 1; j < w - 1; j++) { val = a[0] * GET_DATA_BYTE(lines, j - 1) + a[1] * GET_DATA_BYTE(lines, j) + a[2] * GET_DATA_BYTE(lines, j + 1); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } else { /* halfwidth == 2 */ for (j = 2; j < w - 2; j++) { val = a[0] * GET_DATA_BYTE(lines, j - 2) + a[1] * GET_DATA_BYTE(lines, j - 1) + a[2] * GET_DATA_BYTE(lines, j) + a[3] * GET_DATA_BYTE(lines, j + 1) + a[4] * GET_DATA_BYTE(lines, j + 2); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } } else { /* direction == L_VERT */ if (halfwidth == 1) { for (i = 1; i < h - 1; i++) { lines0 = datas + (i - 1) * wpls; lines1 = datas + i * wpls; lines2 = datas + (i + 1) * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = a[0] * GET_DATA_BYTE(lines0, j) + a[1] * GET_DATA_BYTE(lines1, j) + a[2] * GET_DATA_BYTE(lines2, j); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } else { /* halfwidth == 2 */ for (i = 2; i < h - 2; i++) { lines0 = datas + (i - 2) * wpls; lines1 = datas + (i - 1) * wpls; lines2 = datas + i * wpls; lines3 = datas + (i + 1) * wpls; lines4 = datas + (i + 2) * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = a[0] * GET_DATA_BYTE(lines0, j) + a[1] * GET_DATA_BYTE(lines1, j) + a[2] * GET_DATA_BYTE(lines2, j) + a[3] * GET_DATA_BYTE(lines3, j) + a[4] * GET_DATA_BYTE(lines4, j); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } } return pixd; } /*! * \brief pixUnsharpMaskingGray2D() * * \param[in] pixs 8 bpp; no colormap * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 * \param[in] fract fraction of high frequency added to image * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is for %halfwidth == 1, 2.
 *      (2) The lowpass filter is implemented separably.
 *      (3) Returns a clone if no sharpening is requested.
 * 
*/ PIX * pixUnsharpMaskingGray2D(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 w, h, d, wpls, wpld, wplf, i, j, ival, sval; l_uint32 *datas, *datad, *lines, *lined; l_float32 val, norm; l_float32 *dataf, *linef, *linef0, *linef1, *linef2, *linef3, *linef4; PIX *pixd; FPIX *fpix; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", __func__, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", __func__); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", __func__, NULL); if ((pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, halfwidth, halfwidth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Do the low pass separably. Store the result of horizontal * smoothing in an intermediate fpix. */ if ((fpix = fpixCreate(w, h)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("fpix not made", __func__, NULL); } dataf = fpixGetData(fpix); wplf = fpixGetWpl(fpix); if (halfwidth == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; linef = dataf + i * wplf; for (j = 1; j < w - 1; j++) { val = GET_DATA_BYTE(lines, j - 1) + GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lines, j + 1); linef[j] = val; } } } else { for (i = 0; i < h; i++) { lines = datas + i * wpls; linef = dataf + i * wplf; for (j = 2; j < w - 2; j++) { val = GET_DATA_BYTE(lines, j - 2) + GET_DATA_BYTE(lines, j - 1) + GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lines, j + 1) + GET_DATA_BYTE(lines, j + 2); linef[j] = val; } } } /* Do vertical smoothing to finish the low-pass filter. * At each pixel, if L is the lowpass value, I is the * src pixel value and f is the fraction of highpass to * be added to I, then the highpass filter value is * H = I - L * and the new sharpened value is * N = I + f * H. */ if (halfwidth == 1) { for (i = 1; i < h - 1; i++) { linef0 = dataf + (i - 1) * wplf; linef1 = dataf + i * wplf; linef2 = dataf + (i + 1) * wplf; lined = datad + i * wpld; lines = datas + i * wpls; norm = 1.0f / 9.0f; for (j = 1; j < w - 1; j++) { val = norm * (linef0[j] + linef1[j] + linef2[j]); /* L: lowpass filter value */ sval = GET_DATA_BYTE(lines, j); /* I: source pixel */ ival = (l_int32)(sval + fract * (sval - val) + 0.5); ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } else { for (i = 2; i < h - 2; i++) { linef0 = dataf + (i - 2) * wplf; linef1 = dataf + (i - 1) * wplf; linef2 = dataf + i * wplf; linef3 = dataf + (i + 1) * wplf; linef4 = dataf + (i + 2) * wplf; lined = datad + i * wpld; lines = datas + i * wpls; norm = 1.0f / 25.0f; for (j = 2; j < w - 2; j++) { val = norm * (linef0[j] + linef1[j] + linef2[j] + linef3[j] + linef4[j]); /* L: lowpass filter value */ sval = GET_DATA_BYTE(lines, j); /* I: source pixel */ ival = (l_int32)(sval + fract * (sval - val) + 0.5); ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } fpixDestroy(&fpix); return pixd; } /*-----------------------------------------------------------------------* * Hue and saturation modification * *-----------------------------------------------------------------------*/ /*! * \brief pixModifyHue() * * \param[in] pixd [optional] can be null or equal to pixs * \param[in] pixs 32 bpp rgb * \param[in] fract between -1.0 and 1.0 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) pixd must either be null or equal to pixs.
 *          For in-place operation, set pixd == pixs:
 *             pixEqualizeTRC(pixs, pixs, ...);
 *          To get a new image, set pixd == null:
 *             pixd = pixEqualizeTRC(NULL, pixs, ...);
 *      (2) Use fract > 0.0 to increase hue value; < 0.0 to decrease it.
 *          1.0 (or -1.0) represents a 360 degree rotation; i.e., no change.
 *      (3) If no modification is requested (fract = -1.0 or 0 or 1.0),
 *          return a copy unless in-place, in which case this is a no-op.
 *      (4) This leaves saturation and intensity invariant.
 *      (5) See discussion of color-modification methods, in coloring.c.
 * 
*/ PIX * pixModifyHue(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl, delhue; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs colormapped", __func__, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", __func__, pixd); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", __func__, NULL); pixd = pixCopy(pixd, pixs); delhue = (l_int32)(240 * fract); if (delhue == 0 || delhue == 240 || delhue == -240) { L_WARNING("no change requested in hue\n", __func__); return pixd; } if (delhue < 0) delhue += 240; data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); hval = (hval + delhue) % 240; convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return pixd; } /*! * \brief pixModifySaturation() * * \param[in] pixd [optional] can be null, existing or equal to pixs * \param[in] pixs 32 bpp rgb * \param[in] fract between -1.0 and 1.0 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) If fract > 0.0, it gives the fraction that the pixel
 *          saturation is moved from its initial value toward 255.
 *          If fract < 0.0, it gives the fraction that the pixel
 *          saturation is moved from its initial value toward 0.
 *          The limiting values for fract = -1.0 (1.0) thus set the
 *          saturation to 0 (255).
 *      (2) If fract = 0, no modification is requested; return a copy
 *          unless in-place, in which case this is a no-op.
 *      (3) This leaves hue and intensity invariant.
 *      (4) See discussion of color-modification methods, in coloring.c.
 * 
*/ PIX * pixModifySaturation(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", __func__, NULL); pixd = pixCopy(pixd, pixs); if (fract == 0.0) { L_WARNING("no change requested in saturation\n", __func__); return pixd; } data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); if (fract < 0.0) sval = (l_int32)(sval * (1.0 + fract)); else sval = (l_int32)(sval + fract * (255 - sval)); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return pixd; } /*! * \brief pixMeasureSaturation() * * \param[in] pixs 32 bpp rgb * \param[in] factor subsampling factor; integer >= 1 * \param[out] psat average saturation * \return 0 if OK, 1 on error */ l_int32 pixMeasureSaturation(PIX *pixs, l_int32 factor, l_float32 *psat) { l_int32 w, h, d, i, j, wpl, sum, count; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; if (!psat) return ERROR_INT("pixs not defined", __func__, 1); *psat = 0.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0, sum = 0, count = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); sum += sval; count++; } } if (count > 0) *psat = (l_float32)sum / (l_float32)count; return 0; } /*! * \brief pixModifyBrightness() * * \param[in] pixd [optional] can be null, existing or equal to pixs * \param[in] pixs 32 bpp rgb * \param[in] fract between -1.0 and 1.0 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) If fract > 0.0, it gives the fraction that the v-parameter,
 *          which is max(r,g,b), is moved from its initial value toward 255.
 *          If fract < 0.0, it gives the fraction that the v-parameter
 *          is moved from its initial value toward 0.
 *          The limiting values for fract = -1.0 (1.0) thus set the
 *          v-parameter to 0 (255).
 *      (2) If fract = 0, no modification is requested; return a copy
 *          unless in-place, in which case this is a no-op.
 *      (3) This leaves hue and saturation invariant.
 *      (4) See discussion of color-modification methods, in coloring.c.
 * 
*/ PIX * pixModifyBrightness(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", __func__, NULL); pixd = pixCopy(pixd, pixs); if (fract == 0.0) { L_WARNING("no change requested in brightness\n", __func__); return pixd; } data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); if (fract > 0.0) vval = (l_int32)(vval + fract * (255.0 - vval)); else vval = (l_int32)(vval * (1.0 + fract)); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return pixd; } /*-----------------------------------------------------------------------* * Color shifting * *-----------------------------------------------------------------------*/ /*! * \brief pixMosaicColorShiftRGB() * * \param[in] pixs 32 bpp rgb * \param[in] roff center offset of red component * \param[in] goff center offset of green component * \param[in] boff center offset of blue component * \param[in] delta increments from center offsets [0.0 - 0.1]; * use 0.0 to get the default (0.04) * \param[in] nincr number of increments in each (positive and negative) * direction; use 0 to get the default (2). * \return pix, or NULL on error * *
 * Notes:
 *      (1) This generates a mosaic view of the effect of shifting the RGB
 *          components.  See pixColorShiftRGB() for details on the shifting.
 *      (2) The offsets (%roff, %goff, %boff) set the color center point,
 *          and the deviations from this are shown separately for deltas
 *          in r, g and b.  For each component, we show 2 * %nincr + 1
 *          images.
 *      (3) The pix must have minimum dimensions of 100 and an aspect
 *          ratio not exceeding 5.0.
 *      (4) Usage: color prints differ from the original due to three factors:
 *          illumination, calibration of the camera in acquisition,
 *          and calibration of the printer.  This function can be used
 *          to iteratively match a color print to the original.  On each
 *          iteration, the center offsets are set to the best match so
 *          far, and the %delta increments are typically reduced.
 * 
*/ PIX * pixMosaicColorShiftRGB(PIX *pixs, l_float32 roff, l_float32 goff, l_float32 boff, l_float32 delta, l_int32 nincr) { char buf[64]; l_int32 i, w, h; l_float32 del, ratio; L_BMF *bmf; PIX *pix1, *pix2, *pix3; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not rgb", __func__, NULL); if (roff < -1.0 || roff > 1.0) return (PIX *)ERROR_PTR("roff not in [-1.0, 1.0]", __func__, NULL); if (goff < -1.0 || goff > 1.0) return (PIX *)ERROR_PTR("goff not in [-1.0, 1.0]", __func__, NULL); if (boff < -1.0 || boff > 1.0) return (PIX *)ERROR_PTR("boff not in [-1.0, 1.0]", __func__, NULL); if (delta < 0.0 || delta > 0.1) return (PIX *)ERROR_PTR("delta not in [0.0, 0.1]", __func__, NULL); if (delta == 0.0) delta = 0.04f; if (nincr < 0 || nincr > 6) return (PIX *)ERROR_PTR("nincr not in [0, 6]", __func__, NULL); if (nincr == 0) nincr = 2; /* Require width and height to be >= 100, and the aspect ratio <= 5.0 */ pixGetDimensions(pixs, &w, &h, NULL); if (w < 100 || h < 100) return (PIX *)ERROR_PTR("w and h not both >= 100", __func__, NULL); pixMaxAspectRatio(pixs, &ratio); if (ratio < 1.0 || ratio > 5.0) { L_ERROR("invalid aspect ratio %5.1f\n", __func__, ratio); return NULL; } pixa = pixaCreate(3 * (2 * nincr + 1)); bmf = bmfCreate(NULL, 8); pix1 = pixScaleToSize(pixs, 400, 0); for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { pix2 = pixColorShiftRGB(pix1, roff + del, goff, boff); snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", roff + del, goff, boff); pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { pix2 = pixColorShiftRGB(pix1, roff, goff + del, boff); snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", roff, goff + del, boff); pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { pix2 = pixColorShiftRGB(pix1, roff, goff, boff + del); snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", roff, goff, boff + del); pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_BELOW, 0); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); pix1 = pixaDisplayTiledAndScaled(pixa, 32, 300, 2 * nincr + 1, 0, 30, 2); pixaDestroy(&pixa); bmfDestroy(&bmf); return pix1; } /*! * \brief pixColorShiftRGB() * * \param[in] pixs 32 bpp rgb * \param[in] rfract fractional shift in red component * \param[in] gfract fractional shift in green component * \param[in] bfract fractional shift in blue component * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This allows independent fractional shifts of the r,g and b
 *          components.  A positive shift pushes to saturation (255);
 *          a negative shift pushes toward 0 (black).
 *      (2) The effect can be imagined using a color wheel that consists
 *          (for our purposes) of these 6 colors, separated by 60 degrees:
 *             red, magenta, blue, cyan, green, yellow
 *      (3) So, for example, a negative shift of the blue component
 *          (bfract < 0) could be accompanied by positive shifts
 *          of red and green to make an image more yellow.
 *      (4) Examples of limiting cases:
 *            rfract = 1 ==> r = 255
 *            rfract = -1 ==> r = 0
 * 
*/ PIX * pixColorShiftRGB(PIX *pixs, l_float32 rfract, l_float32 gfract, l_float32 bfract) { l_int32 w, h, i, j, wpls, wpld, rval, gval, bval; l_int32 *rlut, *glut, *blut; l_uint32 *datas, *datad, *lines, *lined; l_float32 fi; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (rfract < -1.0 || rfract > 1.0) return (PIX *)ERROR_PTR("rfract not in [-1.0, 1.0]", __func__, NULL); if (gfract < -1.0 || gfract > 1.0) return (PIX *)ERROR_PTR("gfract not in [-1.0, 1.0]", __func__, NULL); if (bfract < -1.0 || bfract > 1.0) return (PIX *)ERROR_PTR("bfract not in [-1.0, 1.0]", __func__, NULL); if (rfract == 0.0 && gfract == 0.0 && bfract == 0.0) return pixCopy(NULL, pixs); rlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); glut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); blut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { fi = i; if (rfract >= 0) { rlut[i] = (l_int32)(fi + (255.0 - fi) * rfract); } else { rlut[i] = (l_int32)(fi * (1.0 + rfract)); } if (gfract >= 0) { glut[i] = (l_int32)(fi + (255.0 - fi) * gfract); } else { glut[i] = (l_int32)(fi * (1.0 + gfract)); } if (bfract >= 0) { blut[i] = (l_int32)(fi + (255.0 - fi) * bfract); } else { blut[i] = (l_int32)(fi * (1.0 + bfract)); } } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(w, h, 32); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); composeRGBPixel(rlut[rval], glut[gval], blut[bval], lined + j); } } LEPT_FREE(rlut); LEPT_FREE(glut); LEPT_FREE(blut); return pixd; } /*-----------------------------------------------------------------------* * Darken gray (unsaturated) pixels *-----------------------------------------------------------------------*/ /*! * \brief pixDarkenGray() * * \param[in] pixd [optional] can be null or equal to pixs * \param[in] pixs 32 bpp rgb * \param[in] thresh pixels with max component >= %thresh are unchanged * \param[in] satlimit pixels with saturation >= %satlimit are unchanged * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This darkens gray pixels, by a fraction (sat/%satlimit), where
 *          the saturation, sat, is the component difference (max - min).
 *          The pixel value is unchanged if sat >= %satlimit.  A typical
 *          value of %satlimit might be 40; the larger the value, the
 *          more that pixels with a smaller saturation will be darkened.
 *      (2) Pixels with max component >= %thresh are unchanged. This can be
 *          used to prevent bright pixels with low saturation from being
 *          darkened.  Setting thresh == 0 is a no-op; setting %thresh == 255
 *          causes the darkening to be applied to all pixels.
 *      (3) This function is useful to enhance pixels relative to a
 *          gray background.
 *      (4) A related function that builds a 1 bpp mask over the gray
 *          pixels is pixMaskOverGrayPixels().
 * 
*/ PIX * pixDarkenGray(PIX *pixd, PIX *pixs, l_int32 thresh, l_int32 satlimit) { l_int32 w, h, i, j, wpls, wpld; l_int32 rval, gval, bval, minrg, min, maxrg, max, sat; l_uint32 *datas, *datad, *lines, *lined; l_float32 ratio; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (thresh < 0 || thresh > 255) return (PIX *)ERROR_PTR("invalid thresh", __func__, NULL); if (satlimit < 1) return (PIX *)ERROR_PTR("invalid satlimit", __func__, NULL); if (pixd && (pixs != pixd)) return (PIX *)ERROR_PTR("not new or in-place", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); sat = max - min; if (max >= thresh || sat >= satlimit) continue; ratio = (l_float32)sat / (l_float32)satlimit; composeRGBPixel((l_int32)(ratio * rval), (l_int32)(ratio * gval), (l_int32)(ratio * bval), &lined[j]); } } return pixd; } /*-----------------------------------------------------------------------* * General multiplicative constant color transform * *-----------------------------------------------------------------------*/ /*! * \brief pixMultConstantColor() * * \param[in] pixs colormapped or rgb * \param[in] rfact red multiplicative factor * \param[in] gfact green multiplicative factor * \param[in] bfact blue multiplicative factor * \return pixd colormapped or rgb, with colors scaled, or NULL on error * *
 * Notes:
 *      (1) rfact, gfact and bfact can only have non-negative values.
 *          They can be greater than 1.0.  All transformed component
 *          values are clipped to the interval [0, 255].
 *      (2) For multiplication with a general 3x3 matrix of constants,
 *          use pixMultMatrixColor().
 * 
*/ PIX * pixMultConstantColor(PIX *pixs, l_float32 rfact, l_float32 gfact, l_float32 bfact) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; l_uint32 nval; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); rfact = L_MAX(0.0, rfact); gfact = L_MAX(0.0, gfact); bfact = L_MAX(0.0, bfact); if (cmap) { if ((pixd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); nrval = (l_int32)(rfact * rval); ngval = (l_int32)(gfact * gval); nbval = (l_int32)(bfact * bval); nrval = L_MIN(255, nrval); ngval = L_MIN(255, ngval); nbval = L_MIN(255, nbval); pixcmapResetColor(cmap, i, nrval, ngval, nbval); } return pixd; } if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); nrval = (l_int32)(rfact * rval); ngval = (l_int32)(gfact * gval); nbval = (l_int32)(bfact * bval); nrval = L_MIN(255, nrval); ngval = L_MIN(255, ngval); nbval = L_MIN(255, nbval); composeRGBPixel(nrval, ngval, nbval, &nval); *(lined + j) = nval; } } return pixd; } /*! * \brief pixMultMatrixColor() * * \param[in] pixs colormapped or rgb * \param[in] kel kernel 3x3 matrix of floats * \return pixd colormapped or rgb, or NULL on error * *
 * Notes:
 *      (1) The kernel is a data structure used mostly for floating point
 *          convolution.  Here it is a 3x3 matrix of floats that are used
 *          to transform the pixel values by matrix multiplication:
 *            nrval = a[0,0] * rval + a[0,1] * gval + a[0,2] * bval
 *            ngval = a[1,0] * rval + a[1,1] * gval + a[1,2] * bval
 *            nbval = a[2,0] * rval + a[2,1] * gval + a[2,2] * bval
 *      (2) The matrix can be generated in several ways.
 *          See kernel.c for details.  Here are two of them:
 *            (a) kel = kernelCreate(3, 3);
 *                kernelSetElement(kel, 0, 0, val00);
 *                kernelSetElement(kel, 0, 1, val01);
 *                ...
 *            (b) from a static string; e.g.,:
 *                const char *kdata = " 0.6  0.3 -0.2 "
 *                                    " 0.1  1.2  0.4 "
 *                                    " -0.4 0.2  0.9 ";
 *                kel = kernelCreateFromString(3, 3, 0, 0, kdata);
 *      (3) For the special case where the matrix is diagonal, it is easier
 *          to use pixMultConstantColor().
 *      (4) Matrix entries can have positive and negative values, and can
 *          be larger than 1.0.  All transformed component values
 *          are clipped to [0, 255].
 * 
*/ PIX * pixMultMatrixColor(PIX *pixs, L_KERNEL *kel) { l_int32 i, j, index, kw, kh, w, h, d, wpls, wpld; l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; l_uint32 nval; l_uint32 *datas, *datad, *lines, *lined; l_float32 v[9]; /* use linear array for convenience */ PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", __func__, NULL); kernelGetParameters(kel, &kw, &kh, NULL, NULL); if (kw != 3 || kh != 3) return (PIX *)ERROR_PTR("matrix not 3x3", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); for (i = 0, index = 0; i < 3; i++) for (j = 0; j < 3; j++, index++) kernelGetElement(kel, i, j, v + index); if (cmap) { if ((pixd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); nrval = L_MAX(0, L_MIN(255, nrval)); ngval = L_MAX(0, L_MIN(255, ngval)); nbval = L_MAX(0, L_MIN(255, nbval)); pixcmapResetColor(cmap, i, nrval, ngval, nbval); } return pixd; } if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); nrval = L_MAX(0, L_MIN(255, nrval)); ngval = L_MAX(0, L_MIN(255, ngval)); nbval = L_MAX(0, L_MIN(255, nbval)); composeRGBPixel(nrval, ngval, nbval, &nval); *(lined + j) = nval; } } return pixd; } /*-------------------------------------------------------------* * Half-edge by bandpass * *-------------------------------------------------------------*/ /*! * \brief pixHalfEdgeByBandpass() * * \param[in] pixs 8 bpp gray or 32 bpp rgb * \param[in] sm1h, sm1v "half-widths" of smoothing filter sm1 * \param[in] sm2h, sm2v "half-widths" of smoothing filter sm2; * require sm2 != sm1 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) We use symmetric smoothing filters of odd dimension,
 *          typically use 3, 5, 7, etc.  The smoothing parameters
 *          for these are 1, 2, 3, etc.  The filter size is related
 *          to the smoothing parameter by
 *               size = 2 * smoothing + 1
 *      (2) Because we take the difference of two lowpass filters,
 *          this is actually a bandpass filter.
 *      (3) We allow both filters to be anisotropic.
 *      (4) Consider either the h or v component of the 2 filters.
 *          Depending on whether sm1 > sm2 or sm2 > sm1, we get
 *          different halves of the smoothed gradients (or "edges").
 *          This difference of smoothed signals looks more like
 *          a second derivative of a transition, which we rectify
 *          by not allowing the signal to go below zero.  If sm1 < sm2,
 *          the sm2 transition is broader, so the difference between
 *          sm1 and sm2 signals is positive on the upper half of
 *          the transition.  Likewise, if sm1 > sm2, the sm1 - sm2
 *          signal difference is positive on the lower half of
 *          the transition.
 * 
*/ PIX * pixHalfEdgeByBandpass(PIX *pixs, l_int32 sm1h, l_int32 sm1v, l_int32 sm2h, l_int32 sm2v) { l_int32 d; PIX *pixg, *pixacc, *pixc1, *pixc2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (sm1h == sm2h && sm1v == sm2v) return (PIX *)ERROR_PTR("sm2 = sm1", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (d == 32) pixg = pixConvertRGBToLuminance(pixs); else /* d == 8 */ pixg = pixClone(pixs); /* Make a convolution accumulator and use it twice */ if ((pixacc = pixBlockconvAccum(pixg)) == NULL) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("pixacc not made", __func__, NULL); } if ((pixc1 = pixBlockconvGray(pixg, pixacc, sm1h, sm1v)) == NULL) { pixDestroy(&pixg); pixDestroy(&pixacc); return (PIX *)ERROR_PTR("pixc1 not made", __func__, NULL); } pixc2 = pixBlockconvGray(pixg, pixacc, sm2h, sm2v); pixDestroy(&pixg); pixDestroy(&pixacc); if (!pixc2) { pixDestroy(&pixc1); return (PIX *)ERROR_PTR("pixc2 not made", __func__, NULL); } /* Compute the half-edge using pixc1 - pixc2. */ pixSubtractGray(pixc1, pixc1, pixc2); pixDestroy(&pixc2); return pixc1; } leptonica-1.86.0/src/environ.h000066400000000000000000000660061506303110300162040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_ENVIRON_H #define LEPTONICA_ENVIRON_H /*------------------------------------------------------------------------* * Defines and includes differ for Unix and Windows. Also for Windows, * * differentiate between conditionals based on platform and compiler. * * For platforms: * * _WIN32 => Windows, 32- or 64-bit * * _WIN64 => Windows, 64-bit only * * __CYGWIN__ => Cygwin * * For compilers: * * __GNUC__ => gcc * * _MSC_VER => msvc * *------------------------------------------------------------------------*/ /* MS VC++ does not provide stdint.h, so define the missing types here */ #ifndef _MSC_VER #include #else /* Note that _WIN32 is defined for both 32 and 64 bit applications, whereas _WIN64 is defined only for the latter */ #ifdef _WIN64 typedef __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else typedef int intptr_t; typedef unsigned int uintptr_t; #endif /* VC++6 doesn't seem to have powf, expf. */ #if (_MSC_VER < 1400) #define powf(x, y) (float)pow((double)(x), (double)(y)) #define expf(x) (float)exp((double)(x)) #endif #endif /* _MSC_VER */ #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_ATOMICS__) #include typedef atomic_int l_atomic; #else typedef int l_atomic; #endif #ifndef LEPT_DLL /* Windows specifics */ #ifdef _WIN32 /* DLL EXPORTS and IMPORTS */ #if defined(LIBLEPT_EXPORTS) #define LEPT_DLL __declspec(dllexport) #elif defined(LIBLEPT_IMPORTS) #define LEPT_DLL __declspec(dllimport) #else #define LEPT_DLL #endif #else /* non-Windows specifics */ #define LEPT_DLL #endif /* _WIN32 */ #endif /* LEPT_DLL */ #ifndef _WIN32 /* non-Windows specifics */ #include #endif /* _WIN32 */ #ifdef __APPLE__ #include #endif /* __APPLE__ */ typedef intptr_t l_intptr_t; typedef uintptr_t l_uintptr_t; /*--------------------------------------------------------------------* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * USER CONFIGURABLE * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * Environment variables with I/O libraries * * Manual Configuration Only: NOT AUTO_CONF * *--------------------------------------------------------------------*/ /* * Leptonica provides interfaces to link to several external image * I/O libraries, plus zlib. Setting any of these to 0 here causes * non-functioning stubs to be linked. */ #if !defined(HAVE_CONFIG_H) && !defined(ANDROID_BUILD) && !defined(OS_IOS) #if !defined(HAVE_LIBJPEG) #define HAVE_LIBJPEG 1 #endif #if !defined(HAVE_LIBTIFF) #define HAVE_LIBTIFF 1 #endif #if !defined(HAVE_LIBPNG) #define HAVE_LIBPNG 1 #endif #if !defined(HAVE_LIBZ) #define HAVE_LIBZ 1 #endif #if !defined(HAVE_LIBGIF) #define HAVE_LIBGIF 0 #endif #if !defined(HAVE_LIBUNGIF) #define HAVE_LIBUNGIF 0 #endif #if !defined(HAVE_LIBWEBP) #define HAVE_LIBWEBP 0 #endif #if !defined(HAVE_LIBWEBP_ANIM) #define HAVE_LIBWEBP_ANIM 0 #endif #if !defined(HAVE_LIBJP2K) #define HAVE_LIBJP2K 0 #endif /*-----------------------------------------------------------------------* * Leptonica supports OpenJPEG 2.1+. If you have a version of openjpeg * * (HAVE_LIBJP2K == 1) that is >= 2.1, set the path to the openjpeg.h * * header in angle brackets here. * *-----------------------------------------------------------------------*/ #define LIBJP2K_HEADER #endif /* ! HAVE_CONFIG_H etc. */ /*--------------------------------------------------------------------* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * USER CONFIGURABLE * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * Environ variables for image I/O without external libraries * *--------------------------------------------------------------------*/ /* * Leptonica supplies I/O support without using external libraries for: * * image read/write for bmp, pnm * * header read for jp2k * * image wrapping write for pdf and ps. * Setting any of these to 0 causes non-functioning stubs to be linked. */ #define USE_BMPIO 1 #define USE_PNMIO 1 #define USE_JP2KHEADER 1 #define USE_PDFIO 1 #define USE_PSIO 1 /*-------------------------------------------------------------------------* * On linux, BSD, macOS (> 10.12), android (sdk >= 23) and iOS(>= 11.0), * you can redirect writing data from a filestream to memory using * open_memstream() and redirect reading data from a filestream to * reading from memory using fmemopen(). * Specifically, you can compress (write compressed data to memory * from raster data in a Pix) and uncompress (read from compressed data * in memory to raster data in a Pix). * For png, tiff and webp, data is compressed and uncompressed directly * to memory without the use of the POSIX.1 (2008) functions fmemopen() * and open_memstream(). * For jpeg, jp2k, gif, pnm and bmp, these functions are used on systems * that support them, and for those we define HAVE_FMEMOPEN to 1. *-------------------------------------------------------------------------*/ #if !defined(HAVE_CONFIG_H) && \ (!defined(ANDROID_BUILD) || __ANDROID_API__ >= 23) && \ (!defined(__IPHONE_OS_VERSION_MIN_REQUIRED) || \ __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000) && \ (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || \ __MAC_OS_X_VERSION_MIN_REQUIRED > 101200) && \ !defined(_WIN32) #define HAVE_FMEMOPEN 1 #endif /* ! HAVE_CONFIG_H etc. */ /*-------------------------------------------------------------------------* * fstatat() is defined by POSIX, but some systems do not support it. * * One example is older macOS systems (pre-10.10). * * Also, dirfd() is required by fstatat(). * * Play it safe and set the default values to 0. * *-------------------------------------------------------------------------*/ #if !defined(HAVE_CONFIG_H) #define HAVE_FSTATAT 0 #define HAVE_DIRFD 0 #endif /* ! HAVE_CONFIG_H */ /*--------------------------------------------------------------------* * It is desirable on Windows to have all temp files written to the same * subdirectory of the Windows directory, because files under * persist after reboot, and the regression tests write a lot of files. * We write all test files to /tmp/lept or subdirectories of /tmp/lept. * Windows temp files are specified as in unix, but have the translation * /tmp/lept/xxx --> /lept/xxx *--------------------------------------------------------------------*/ /*--------------------------------------------------------------------* * Built-in types * *--------------------------------------------------------------------*/ typedef int l_ok; /*!< return 0 if OK, 1 on error */ typedef signed char l_int8; /*!< signed 8-bit value */ typedef unsigned char l_uint8; /*!< unsigned 8-bit value */ typedef short l_int16; /*!< signed 16-bit value */ typedef unsigned short l_uint16; /*!< unsigned 16-bit value */ typedef int l_int32; /*!< signed 32-bit value */ typedef unsigned int l_uint32; /*!< unsigned 32-bit value */ typedef float l_float32; /*!< 32-bit floating point value */ typedef double l_float64; /*!< 64-bit floating point value */ #ifdef COMPILER_MSVC typedef __int64 l_int64; /*!< signed 64-bit value */ typedef unsigned __int64 l_uint64; /*!< unsigned 64-bit value */ #else typedef long long l_int64; /*!< signed 64-bit value */ typedef unsigned long long l_uint64; /*!< unsigned 64-bit value */ #endif /* COMPILER_MSVC */ /*-------------------------------------------------------------------------* * For security, the library is distributed in a configuration that does * * not permit (1) forking with 'system', which is used for displaying * * images and generating gnuplots, and (2) writing files with specified * * compiled-in file names. All such writes are with functions such as * * pixWriteDebug() where the "Debug" is appended to the usual name. * * Whether the "Debug" version defaults to the standard version or is a * * no-op depends on the value of this global variable. The default value * * of LeptDebugOK is 0, and it is set in writefile.c. This value can be * * over-ridden, for development and debugging, by setLeptDebugOK(). * *-------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern l_int32 LeptDebugOK; /* default is 0 */ #ifdef __cplusplus } #endif /* __cplusplus */ /*------------------------------------------------------------------------* * Standard macros * *------------------------------------------------------------------------*/ #ifndef L_MIN /*! Minimum of %x and %y */ #define L_MIN(x, y) (((x) < (y)) ? (x) : (y)) #endif #ifndef L_MAX /*! Maximum of %x and %y */ #define L_MAX(x, y) (((x) > (y)) ? (x) : (y)) #endif #ifndef L_ABS /*! Absolute value of %x */ #define L_ABS(x) (((x) < 0) ? (-1 * (x)) : (x)) #endif #ifndef L_SIGN /*! Sign of %x */ #define L_SIGN(x) (((x) < 0) ? -1 : 1) #endif #ifndef UNDEF /*! Undefined value */ #define UNDEF -1 #endif #ifndef NULL /*! NULL value */ #define NULL 0 #endif #ifndef TRUE /*! True value */ #define TRUE 1 #endif #ifndef FALSE /*! False value */ #define FALSE 0 #endif /*--------------------------------------------------------------------* * Environment variables for endian dependence * *--------------------------------------------------------------------*/ /* * To control conditional compilation, one of two variables * * L_LITTLE_ENDIAN (e.g., for Intel X86) * L_BIG_ENDIAN (e.g., for Sun SPARC, Mac Power PC) * * is defined when the GCC compiler is invoked. * All code should compile properly for both hardware architectures. */ /*------------------------------------------------------------------------* * Simple search state variables * *------------------------------------------------------------------------*/ /*! Search State */ enum { L_NOT_FOUND = 0, L_FOUND = 1 }; /*------------------------------------------------------------------------* * Path separator conversion * *------------------------------------------------------------------------*/ /*! Path Separators */ enum { UNIX_PATH_SEPCHAR = 0, WIN_PATH_SEPCHAR = 1 }; /*------------------------------------------------------------------------* * Timing structs * *------------------------------------------------------------------------*/ typedef void *L_TIMER; /*! Timing struct */ struct L_WallTimer { l_int32 start_sec; l_int32 start_usec; l_int32 stop_sec; l_int32 stop_usec; }; typedef struct L_WallTimer L_WALLTIMER; /*------------------------------------------------------------------------* * Standard memory allocation * * * * All default heap allocation is through the system malloc and free. * * * * Leptonica also provides non-default allocation in two situations: * * * * (1) A special allocator/deallocator pair can be provided for the * * pix image data array. This might be useful to prevent memory * * fragmentation when large images are repeatedly allocated and * * freed. See the PixMemoryManager in pix1.c for details, * * where the default is defined. * * * * (2) Special allocator/deallocators can be provided for ALL heap * * allocation if required, for example, for embedded systems. * * For such builds, define LEPTONICA_INTERCEPT_ALLOC, and provide * * custom leptonica_{malloc, calloc, realloc, free} functions. * *------------------------------------------------------------------------*/ #ifdef LEPTONICA_INTERCEPT_ALLOC #define LEPT_MALLOC(blocksize) leptonica_malloc(blocksize) #define LEPT_CALLOC(numelem, elemsize) leptonica_calloc(numelem, elemsize) #define LEPT_REALLOC(ptr, blocksize) leptonica_realloc(ptr, blocksize) #define LEPT_FREE(ptr) leptonica_free(ptr) void *leptonica_malloc(size_t blocksize); void *leptonica_calloc(size_t numelem, size_t elemsize); void *leptonica_realloc(void *ptr, size_t blocksize); void leptonica_free(void *ptr); #else #define LEPT_MALLOC(blocksize) malloc(blocksize) #define LEPT_CALLOC(numelem, elemsize) calloc(numelem, elemsize) #define LEPT_REALLOC(ptr, blocksize) realloc(ptr, blocksize) #define LEPT_FREE(ptr) free(ptr) #endif /* LEPTONICA_INTERCEPT_ALLOC */ /*------------------------------------------------------------------------* * Control printing of error, warning, and info messages * * * * Leptonica never sends output to stdout. By default, all messages * * go to stderr. However, we provide a mechanism for runtime * * redirection of output, using a custom stderr handler defined * * by the user. See utils1.c for details and examples. * * * * To omit all messages to stderr, simply define NO_CONSOLE_IO on the * * command line. For finer grained control, we have a mechanism * * based on the message severity level. The following assumes that * * NO_CONSOLE_IO is not defined. * * * * Messages are printed if the message severity is greater than or equal * * to the current severity threshold. The current severity threshold * * is the greater of the compile-time severity, which is the minimum * * severity that can be reported, and the run-time severity, which is * * the severity threshold at the moment. * * * * The compile-time threshold determines which messages are compiled * * into the library for potential printing. Messages below the * * compile-time threshold are omitted and can never be printed. The * * default compile-time threshold is L_SEVERITY_INFO, but this may be * * overridden by defining MINIMUM_SEVERITY to the desired enumeration * * identifier on the compiler command line. Defining NO_CONSOLE_IO on * * the command line is the same as setting MINIMUM_SEVERITY to * * L_SEVERITY_NONE. * * * * The run-time threshold determines which messages are printed during * * library execution. It defaults to the compile-time threshold but * * may be changed either statically by defining DEFAULT_SEVERITY to * * the desired enumeration identifier on the compiler command line, or * * dynamically by calling setMsgSeverity() to specify a new threshold. * * The run-time threshold may also be set from the value of the * * environment variable LEPT_MSG_SEVERITY by calling setMsgSeverity() * * and specifying L_SEVERITY_EXTERNAL. * * * * In effect, the compile-time threshold setting says, "Generate code * * to permit messages of equal or greater severity than this to be * * printed, if desired," whereas the run-time threshold setting says, * * "Print messages that have an equal or greater severity than this." * *------------------------------------------------------------------------*/ /*! Control printing of error, warning and info messages */ /*! Message Control */ enum { L_SEVERITY_EXTERNAL = 0, /* Get the severity from the environment */ L_SEVERITY_ALL = 1, /* Lowest severity: print all messages */ L_SEVERITY_DEBUG = 2, /* Print debugging and higher messages */ L_SEVERITY_INFO = 3, /* Print informational and higher messages */ L_SEVERITY_WARNING = 4, /* Print warning and higher messages */ L_SEVERITY_ERROR = 5, /* Print error and higher messages */ L_SEVERITY_NONE = 6 /* Highest severity: print no messages */ }; /* No message less than the compile-time threshold will ever be * reported, regardless of the current run-time threshold. This allows * selection of the set of messages to include in the library. For * example, setting the threshold to L_SEVERITY_WARNING eliminates all * informational messages from the library. With that setting, both * warning and error messages would be printed unless setMsgSeverity() * was called, or DEFAULT_SEVERITY was redefined, to set the run-time * severity to L_SEVERITY_ERROR. In that case, only error messages * would be printed. * * This mechanism makes the library smaller and faster, by eliminating * undesired message reporting and the associated run-time overhead for * message threshold checking, because code for messages whose severity * is lower than MINIMUM_SEVERITY won't be generated. * * A production library might typically permit ERROR messages to be * generated, and a development library might permit DEBUG and higher. * The actual messages printed (as opposed to generated) would depend * on the current run-time severity threshold. * * This is a complex mechanism and a few examples may help. * (1) No output permitted under any circumstances. * Use: -DNO_CONSOLE_IO or -DMINIMUM_SEVERITY=6 * (2) Suppose you want to only allow error messages, and you don't * want to permit info or warning messages at runtime. * Use: -DMINIMUM_SEVERITY=5 * (3) Suppose you want to only allow error messages by default, * but you will permit this to be over-ridden at runtime. * Use: -DDEFAULT_SEVERITY=5 * and to allow info and warning override: * setMsgSeverity(L_SEVERITY_INFO); */ #ifdef NO_CONSOLE_IO #undef MINIMUM_SEVERITY #undef DEFAULT_SEVERITY #define MINIMUM_SEVERITY L_SEVERITY_NONE /*!< Compile-time default */ #define DEFAULT_SEVERITY L_SEVERITY_NONE /*!< Run-time default */ #else #ifndef MINIMUM_SEVERITY #define MINIMUM_SEVERITY L_SEVERITY_INFO /*!< Compile-time default */ #endif #ifndef DEFAULT_SEVERITY #define DEFAULT_SEVERITY MINIMUM_SEVERITY /*!< Run-time default */ #endif #endif /*! The run-time message severity threshold is defined in utils1.c. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern l_int32 LeptMsgSeverity; #ifdef __cplusplus } #endif /* __cplusplus */ /* *
 *  Usage
 *  =====
 *  Messages are of three types.
 *
 *  (1) The messages
 *      ERROR_INT(a,b,c)       : returns l_int32
 *      ERROR_FLOAT(a,b,c)     : returns l_float32
 *      ERROR_PTR(a,b,c)       : returns void*
 *  are used to return from functions and take three parameters:
 *      a : 
 *      b : __func__   (the procedure name)
 *      c : 
 *  A newline is added by the function after the message.
 *
 *  (2) The messages
 *      ERROR_INT_1(a,f,b,c)     : returns l_int32
 *      ERROR_FLOAT_1(a,f,b,c)   : returns l_float32
 *      ERROR_PTR_1(a,f,b,c)     : returns void*
 *  are used to return from functions and take four parameters:
 *      a : 
 *      f :  (typically, a filename for an fopen()))
 *      b : __func__   (the procedure name)
 *      c : 
 *  A newline is added by the function after the message.
 *
 *  (3) The purely informational L_* messages
 *      L_ERROR(a,...)
 *      L_WARNING(a,...)
 *      L_INFO(a,...)
 *  do not take a return value, but they take at least two parameters:
 *      a  :   with optional format conversions
 *      v1 : procName    (this must be included as the first vararg)
 *      v2, ... :  optional varargs to match format converters in the message
 *  Unlike the messages that return a value in (2) and (3) above,
 *  here a newline needs to be included at the end of the message string.
 *
 *  To return an error from a function that returns void, use:
 *      L_ERROR(, procName, [...])
 *      return;
 *
 *  Implementation details
 *  ======================
 *  Messages are defined with the IF_SEV macro.  The first parameter is
 *  the message severity, the second is the function to call if the
 *  message is to be printed, and the third is the return value if the
 *  message is to be suppressed.  For example, we might have an
 *  informational message defined as:
 *
 *    IF_SEV(L_SEVERITY_INFO, fprintf(.......), 0)
 *
 *  The macro expands into a conditional.  Because the first comparison
 *  is between two constants, an optimizing compiler will remove either
 *  the comparison (if it's true) or the entire macro expansion (if it
 *  is false).  This means that there is no run-time overhead for
 *  messages whose severity falls below the minimum specified at compile
 *  time, and for others the overhead is one (not two) comparisons.
 *
 *  The L_nnn() macros below do not return a value, but because the
 *  conditional operator requires one for the false condition, we
 *  specify a void expression.
 * 
*/ #ifdef NO_CONSOLE_IO #define PROCNAME(name) #define ERROR_INT(a, b, c) ((l_int32)(c)) #define ERROR_FLOAT(a, b, c) ((l_float32)(c)) #define ERROR_PTR(a, b, c) ((void *)(c)) #define ERROR_INT_1(a, f, b, c) ((l_int32)(c)) #define ERROR_FLOAT_1(a, f, b, c) ((l_float32)(c)) #define ERROR_PTR_1(a, f, b, c) ((void *)(c)) #define L_ERROR(a, ...) #define L_WARNING(a, ...) #define L_INFO(a, ...) #else #define PROCNAME(name) static const char procName[] = name #define IF_SEV(l, t, f) \ ((l) >= MINIMUM_SEVERITY && (l) >= LeptMsgSeverity ? (t) : (f)) #define ERROR_INT(a, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorInt((a), (b), (c)), (l_int32)(c)) #define ERROR_FLOAT(a, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorFloat((a), (b), (c)), (l_float32)(c)) #define ERROR_PTR(a, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorPtr((a), (b), (c)), (void *)(c)) #define ERROR_INT_1(a, f, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorInt1((a), (f), (b), (c)), \ (l_int32)(c)) #define ERROR_FLOAT_1(a, f, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorFloat1((a), (f), (b), (c)), \ (l_float32)(c)) #define ERROR_PTR_1(a, f, b, c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorPtr1((a), (f), (b), (c)), \ (void *)(c)) #define L_ERROR(a, ...) \ IF_SEV(L_SEVERITY_ERROR, \ (void)lept_stderr("Error in %s: " a, __VA_ARGS__), \ (void)0) #define L_WARNING(a, ...) \ IF_SEV(L_SEVERITY_WARNING, \ (void)lept_stderr("Warning in %s: " a, __VA_ARGS__), \ (void)0) #define L_INFO(a, ...) \ IF_SEV(L_SEVERITY_INFO, \ (void)lept_stderr("Info in %s: " a, __VA_ARGS__), \ (void)0) #if 0 /* Alternative method for controlling L_* message output */ #define L_ERROR(a, ...) \ { if (L_SEVERITY_ERROR >= MINIMUM_SEVERITY && \ L_SEVERITY_ERROR >= LeptMsgSeverity) \ lept_stderr("Error in %s: " a, __VA_ARGS__) \ } #define L_WARNING(a, ...) \ { if (L_SEVERITY_WARNING >= MINIMUM_SEVERITY && \ L_SEVERITY_WARNING >= LeptMsgSeverity) \ lept_stderr("Warning in %s: " a, __VA_ARGS__) \ } #define L_INFO(a, ...) \ { if (L_SEVERITY_INFO >= MINIMUM_SEVERITY && \ L_SEVERITY_INFO >= LeptMsgSeverity) \ lept_stderr("Info in %s: " a, __VA_ARGS__) \ } #endif #endif /* NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * snprintf() renamed in MSVC (pre-VS2015) * *------------------------------------------------------------------------*/ #if defined _MSC_VER && _MSC_VER < 1900 #define snprintf(buf, size, ...) _snprintf_s(buf, size, _TRUNCATE, __VA_ARGS__) #endif #endif /* LEPTONICA_ENVIRON_H */ leptonica-1.86.0/src/fhmtauto.c000066400000000000000000000763351506303110300163540ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file fhmtauto.c *
 *
 *    Main function calls:
 *       l_int32             fhmtautogen()
 *       l_int32             fhmtautogen1()
 *       l_int32             fhmtautogen2()
 *
 *    Static helpers:
 *       static SARRAY      *sarrayMakeWplsCode()
 *       static SARRAY      *sarrayMakeInnerLoopDWACode()
 *       static char        *makeBarrelshiftString()
 *
 *    This automatically generates dwa code for the hit-miss transform.
 *    Here's a road map for how it all works.
 *
 *    (1) You generate an array (a SELA) of hit-miss transform SELs.
 *        This can be done in several ways, including
 *           (a) calling the function selaAddHitMiss() for
 *               pre-compiled SELs
 *           (b) generating the SELA in code in line
 *           (c) reading in a SELA from file, using selaRead()
 *               or various other formats.
 *
 *    (2) You call fhmtautogen1() and fhmtautogen2() on this SELA.
 *        This uses the text files hmttemplate1.txt and
 *        hmttemplate2.txt for building up the source code.  See the file
 *        prog/fhmtautogen.c for an example of how this is done.
 *        The output is written to files named fhmtgen.*.c
 *        and fhmtgenlow.*.c, where "*" is an integer that you
 *        input to this function.  That integer labels both
 *        the output files, as well as all the functions that
 *        are generated.  That way, using different integers,
 *        you can invoke fhmtautogen() any number of times
 *        to get functions that all have different names so that
 *        they can be linked into one program.
 *
 *    (3) You copy the generated source code back to your src
 *        directory for compilation.  Put their names in the
 *        Makefile, regnerate the prototypes, and recompile
 *        the libraries.  Look at the Makefile to see how I've
 *        included fhmtgen.1.c and fhmtgenlow.1.c.  These files
 *        provide the single high-level interface for the hmt, and
 *        the lower-level functions to do the actual work.
 *
 *    (4) In an application, you now use this interface.  Again
 *        for the example files generated, using integer "1":
 *
 *           PIX   *pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname);
 *
 *        where the selname is one of the set that were defined
 *        as the name field of sels.  This set is listed at the
 *        beginning of the file fhmtgen.1.c.
 *
 *        N.B. Although pixFHMTGen_1() is global, you must NOT
 *        use it, because it assumes that 32 or 64 border pixels
 *        have been added to each side, and it will crash without those
 *        added pixels.
 *
 *        As an example, see the file prog/fhmtauto_reg.c, which
 *        verifies the correctness of the implementation by
 *        comparing the dwa result with that of full-image
 *        rasterops.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define OUTROOT "fhmtgen" #define TEMPLATE1 "hmttemplate1.txt" #define TEMPLATE2 "hmttemplate2.txt" #define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" #define L_BUF_SIZE 512 static char * makeBarrelshiftString(l_int32 delx, l_int32 dely, l_int32 type); static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 nhits, l_int32 nmisses); static SARRAY * sarrayMakeWplsCode(SEL *sel); static char wpldecls[][60] = { "l_int32 wpls2;", "l_int32 wpls2, wpls3;", "l_int32 wpls2, wpls3, wpls4;", "l_int32 wpls5;", "l_int32 wpls5, wpls6;", "l_int32 wpls5, wpls6, wpls7;", "l_int32 wpls5, wpls6, wpls7, wpls8;", "l_int32 wpls9;", "l_int32 wpls9, wpls10;", "l_int32 wpls9, wpls10, wpls11;", "l_int32 wpls9, wpls10, wpls11, wpls12;", "l_int32 wpls13;", "l_int32 wpls13, wpls14;", "l_int32 wpls13, wpls14, wpls15;", "l_int32 wpls13, wpls14, wpls15, wpls16;", "l_int32 wpls17;", "l_int32 wpls17, wpls18;", "l_int32 wpls17, wpls18, wpls19;", "l_int32 wpls17, wpls18, wpls19, wpls20;", "l_int32 wpls21;", "l_int32 wpls21, wpls22;", "l_int32 wpls21, wpls22, wpls23;", "l_int32 wpls21, wpls22, wpls23, wpls24;", "l_int32 wpls25;", "l_int32 wpls25, wpls26;", "l_int32 wpls25, wpls26, wpls27;", "l_int32 wpls25, wpls26, wpls27, wpls28;", "l_int32 wpls29;", "l_int32 wpls29, wpls30;", "l_int32 wpls29, wpls30, wpls31;"}; static char wpldefs[][24] = { " wpls2 = 2 * wpls;", " wpls3 = 3 * wpls;", " wpls4 = 4 * wpls;", " wpls5 = 5 * wpls;", " wpls6 = 6 * wpls;", " wpls7 = 7 * wpls;", " wpls8 = 8 * wpls;", " wpls9 = 9 * wpls;", " wpls10 = 10 * wpls;", " wpls11 = 11 * wpls;", " wpls12 = 12 * wpls;", " wpls13 = 13 * wpls;", " wpls14 = 14 * wpls;", " wpls15 = 15 * wpls;", " wpls16 = 16 * wpls;", " wpls17 = 17 * wpls;", " wpls18 = 18 * wpls;", " wpls19 = 19 * wpls;", " wpls20 = 20 * wpls;", " wpls21 = 21 * wpls;", " wpls22 = 22 * wpls;", " wpls23 = 23 * wpls;", " wpls24 = 24 * wpls;", " wpls25 = 25 * wpls;", " wpls26 = 26 * wpls;", " wpls27 = 27 * wpls;", " wpls28 = 28 * wpls;", " wpls29 = 29 * wpls;", " wpls30 = 30 * wpls;", " wpls31 = 31 * wpls;"}; static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", "+ wpls29", "+ wpls30", "+ wpls31"}; static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", "- wpls5", "- wpls6", "- wpls7", "- wpls8", "- wpls9", "- wpls10", "- wpls11", "- wpls12", "- wpls13", "- wpls14", "- wpls15", "- wpls16", "- wpls17", "- wpls18", "- wpls19", "- wpls20", "- wpls21", "- wpls22", "- wpls23", "- wpls24", "- wpls25", "- wpls26", "- wpls27", "- wpls28", "- wpls29", "- wpls30", "- wpls31"}; /*! * \brief fhmtautogen() * * \param[in] sela * \param[in] fileindex * \param[in] filename [optional]; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This function generates all the code for implementing
 *          dwa morphological operations using all the sels in the sela.
 *      (2) See fhmtautogen1() and fhmtautogen2() for details.
 * 
*/ l_ok fhmtautogen(SELA *sela, l_int32 fileindex, const char *filename) { l_int32 ret1, ret2; if (!sela) return ERROR_INT("sela not defined", __func__, 1); ret1 = fhmtautogen1(sela, fileindex, filename); ret2 = fhmtautogen2(sela, fileindex, filename); if (ret1 || ret2) return ERROR_INT("code generation problem", __func__, 1); return 0; } /*! * \brief fhmtautogen1() * * \param[in] sela array * \param[in] fileindex * \param[in] filename [optional]; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This function uses hmttemplate1.txt to create a
 *          top-level file that contains two functions that carry
 *          out the hit-miss transform for any of the sels in
 *          the input sela.
 *      (2) The fileindex parameter is inserted into the output
 *          filename, as described below.
 *      (3) If filename == NULL, the output file is fhmtgen.[n].c,
 *          where [n] is equal to the 'fileindex' parameter.
 *      (4) If filename != NULL, the output file is [filename].[n].c.
 *      (5) Each sel must have at least one hit.  A sel with only misses
 *          generates code that will abort the operation if it is called.
 * 
*/ l_ok fhmtautogen1(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr; char *str_proto1, *str_proto2, *str_proto3; char *str_doc1, *str_doc2, *str_doc3, *str_doc4; char *str_def1, *str_def2, *str_proc1, *str_proc2; char *str_dwa1, *str_low_dt, *str_low_ds; char bigbuf[L_BUF_SIZE]; l_int32 i, nsels, nbytes, actstart, end, newstart; size_t size; SARRAY *sa1, *sa2, *sa3; if (!sela) return ERROR_INT("sela not defined", __func__, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", __func__, 1); /* Make array of textlines from from hmttemplate1.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) return ERROR_INT("filestr not made", __func__, 1); sa2 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); if (!sa2) return ERROR_INT("sa2 not made", __func__, 1); /* Make array of sel names */ sa1 = selaGetSelnames(sela); /* Make strings containing function call names */ sprintf(bigbuf, "PIX *pixHMTDwa_%d(PIX *pixd, PIX *pixs, " "const char *selname);", fileindex); str_proto1 = stringNew(bigbuf); sprintf(bigbuf, "PIX *pixFHMTGen_%d(PIX *pixd, PIX *pixs, " "const char *selname);", fileindex); str_proto2 = stringNew(bigbuf); sprintf(bigbuf, "l_int32 fhmtgen_low_%d(l_uint32 *datad, l_int32 w,\n" " l_int32 h, l_int32 wpld,\n" " l_uint32 *datas, l_int32 wpls,\n" " l_int32 index);", fileindex); str_proto3 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixHMTDwa_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixFHMTGen_%d()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * \\brief pixHMTDwa_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, " * \\brief pixFHMTGen_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "pixHMTDwa_%d(PIX *pixd,", fileindex); str_def1 = stringNew(bigbuf); sprintf(bigbuf, "pixFHMTGen_%d(PIX *pixd,", fileindex); str_def2 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixHMTDwa_%d\");", fileindex); str_proc1 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixFHMTGen_%d\");", fileindex); str_proc2 = stringNew(bigbuf); sprintf(bigbuf, " pixt2 = pixFHMTGen_%d(NULL, pixt1, selname);", fileindex); str_dwa1 = stringNew(bigbuf); sprintf(bigbuf, " fhmtgen_low_%d(datad, w, h, wpld, datat, wpls, index);", fileindex); str_low_dt = stringNew(bigbuf); sprintf(bigbuf, " fhmtgen_low_%d(datad, w, h, wpld, datas, wpls, index);", fileindex); str_low_ds = stringNew(bigbuf); /* Make the output sa */ sa3 = sarrayCreate(0); /* Copyright notice and info header */ sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa3, str_doc1, L_INSERT); sarrayAddString(sa3, str_doc2, L_INSERT); /* Add '#include's */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function prototypes */ sarrayAddString(sa3, str_proto1, L_INSERT); sarrayAddString(sa3, str_proto2, L_INSERT); sarrayAddString(sa3, str_proto3, L_INSERT); /* Add static globals */ sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); sarrayAddString(sa3, bigbuf, L_COPY); sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); sarrayAddString(sa3, bigbuf, L_COPY); for (i = 0; i < nsels - 1; i++) { sprintf(bigbuf, " \"%s\",", sarrayGetString(sa1, i, L_NOCOPY)); sarrayAddString(sa3, bigbuf, L_COPY); } sprintf(bigbuf, " \"%s\"};", sarrayGetString(sa1, i, L_NOCOPY)); sarrayAddString(sa3, bigbuf, L_COPY); /* Start pixHMTDwa_*() function description */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_doc3, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixHMTDwa_*() function definition */ sarrayAddString(sa3, str_def1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_dwa1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Start pixFHMTGen_*() function description */ sarrayAddString(sa3, str_doc4, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixFHMTGen_*() function description */ sarrayAddString(sa3, str_def2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ds, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); filestr = sarrayToString(sa3, 1); nbytes = strlen(filestr); if (filename) snprintf(bigbuf, L_BUF_SIZE, "%s.%d.c", filename, fileindex); else sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); LEPT_FREE(filestr); return 0; } /*! * \brief fhmtautogen2() * * \param[in] sela array * \param[in] fileindex * \param[in] filename [optional]; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This function uses hmttemplate2.txt to create a
 *          low-level file that contains the low-level functions for
 *          implementing the hit-miss transform for every sel
 *          in the input sela.
 *      (2) The fileindex parameter is inserted into the output
 *          filename, as described below.
 *      (3) If filename == NULL, the output file is fhmtgenlow.[n].c,
 *          where [n] is equal to the %fileindex parameter.
 *      (4) If filename != NULL, the output file is [filename]low.[n].c.
 * 
*/ l_ok fhmtautogen2(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr, *fname, *linestr; char *str_doc1, *str_doc2, *str_doc3, *str_def1; char bigbuf[L_BUF_SIZE]; char breakstring[] = " break;"; char staticstring[] = "static void"; l_int32 i, k, l, nsels, nbytes, nhits, nmisses; l_int32 actstart, end, newstart; l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; size_t size; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; SEL *sel; if (!sela) return ERROR_INT("sela not defined", __func__, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", __func__, 1); /* Make the array of textlines from hmttemplate2.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) return ERROR_INT("filestr not made", __func__, 1); sa1 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); if (!sa1) return ERROR_INT("sa1 not made", __func__, 1); /* Make the array of static function names */ if ((sa2 = sarrayCreate(nsels)) == NULL) { sarrayDestroy(&sa1); return ERROR_INT("sa2 not made", __func__, 1); } for (i = 0; i < nsels; i++) { sprintf(bigbuf, "fhmt_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, L_COPY); } /* Make the static prototype strings */ sa3 = sarrayCreate(2 * nsels); /* should be ok */ for (i = 0; i < nsels; i++) { fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); sarrayAddString(sa3, bigbuf, L_COPY); } /* Make strings containing function names */ sprintf(bigbuf, " * l_int32 fhmtgen_low_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * void fhmt_%d_*()", fileindex); str_doc2 = stringNew(bigbuf); /* Output to this sa */ sa4 = sarrayCreate(0); /* Copyright notice and info header */ sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa4, str_doc1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc2, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert static protos */ for (i = 0; i < nsels; i++) { if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) { sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); return ERROR_INT("linestr not retrieved", __func__, 1); } sarrayAddString(sa4, linestr, L_INSERT); } /* Make more strings containing function names */ sprintf(bigbuf, " * fhmtgen_low_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, "fhmtgen_low_%d(l_uint32 *datad,", fileindex); str_def1 = stringNew(bigbuf); /* Insert function header */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc3, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_def1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Generate and insert the dispatcher code */ for (i = 0; i < nsels; i++) { sprintf(bigbuf, " case %d:", i); sarrayAddString(sa4, bigbuf, L_COPY); sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", sarrayGetString(sa2, i, L_NOCOPY)); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAddString(sa4, breakstring, L_COPY); } /* Finish the dispatcher and introduce the low-level code */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Get the range for the args common to all functions */ sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); /* Get the range for the loop code common to all functions */ sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); /* Get the range for the ending code common to all functions */ sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); /* Do all the static functions */ for (i = 0; i < nsels; i++) { /* Generate the function header and add the common args */ sarrayAddString(sa4, staticstring, L_COPY); fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "%s(l_uint32 *datad,", fname); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAppendRange(sa4, sa1, argstart, argend); /* Declare and define wplsN args, as necessary */ if ((sel = selaGetSel(sela, i)) == NULL) { sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); return ERROR_INT("sel not returned", __func__, 1); } sa5 = sarrayMakeWplsCode(sel); sarrayJoin(sa4, sa5); sarrayDestroy(&sa5); /* Make sure sel has at least one hit */ nhits = 0; nmisses = 0; for (k = 0; k < sel->sy; k++) { for (l = 0; l < sel->sx; l++) { if (sel->data[k][l] == 1) nhits++; else if (sel->data[k][l] == 2) nmisses++; } } if (nhits == 0) { linestr = stringNew(" " "lept_stderr(\"Error in HMT: no hits in sel!\\n\");\n}\n\n"); sarrayAddString(sa4, linestr, L_INSERT); continue; } /* Add the function loop code */ sarrayAppendRange(sa4, sa1, loopstart, loopend); /* Insert barrel-op code for *dptr */ if ((sa6 = sarrayMakeInnerLoopDWACode(sel, nhits, nmisses)) == NULL) { sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); return ERROR_INT("sa6 not made", __func__, 1); } sarrayJoin(sa4, sa6); sarrayDestroy(&sa6); /* Finish the function code */ sarrayAppendRange(sa4, sa1, finalstart, finalend); } /* Output to file */ filestr = sarrayToString(sa4, 1); nbytes = strlen(filestr); if (filename) snprintf(bigbuf, L_BUF_SIZE, "%slow.%d.c", filename, fileindex); else sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); LEPT_FREE(filestr); return 0; } /*--------------------------------------------------------------------------* * Helper code for sel * *--------------------------------------------------------------------------*/ /*! * \brief sarrayMakeWplsCode() */ static SARRAY * sarrayMakeWplsCode(SEL *sel) { char emptystring[] = ""; l_int32 i, j, ymax, dely; SARRAY *sa; if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", __func__, NULL); ymax = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1 || sel->data[i][j] == 2) { dely = L_ABS(i - sel->cy); ymax = L_MAX(ymax, dely); } } } if (ymax > 31) { L_WARNING("ymax > 31; truncating to 31\n", __func__); ymax = 31; } sa = sarrayCreate(0); /* Declarations */ if (ymax > 4) sarrayAddString(sa, wpldecls[2], L_COPY); if (ymax > 8) sarrayAddString(sa, wpldecls[6], L_COPY); if (ymax > 12) sarrayAddString(sa, wpldecls[10], L_COPY); if (ymax > 16) sarrayAddString(sa, wpldecls[14], L_COPY); if (ymax > 20) sarrayAddString(sa, wpldecls[18], L_COPY); if (ymax > 24) sarrayAddString(sa, wpldecls[22], L_COPY); if (ymax > 28) sarrayAddString(sa, wpldecls[26], L_COPY); if (ymax > 1) sarrayAddString(sa, wpldecls[ymax - 2], L_COPY); sarrayAddString(sa, emptystring, L_COPY); /* Definitions */ for (i = 2; i <= ymax; i++) sarrayAddString(sa, wpldefs[i - 2], L_COPY); return sa; } /*! * \brief sarrayMakeInnerLoopDWACode() */ static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 nhits, l_int32 nmisses) { char *string; char land[] = "&"; char bigbuf[L_BUF_SIZE]; l_int32 i, j, ntot, nfound, type, delx, dely; SARRAY *sa; if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", __func__, NULL); sa = sarrayCreate(0); ntot = nhits + nmisses; nfound = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { type = sel->data[i][j]; if (type == SEL_HIT || type == SEL_MISS) { nfound++; dely = i - sel->cy; delx = j - sel->cx; if ((string = makeBarrelshiftString(delx, dely, type)) == NULL) { L_WARNING("barrel shift string not made\n", __func__); continue; } if (ntot == 1) /* just one item */ sprintf(bigbuf, " *dptr = %s;", string); else if (nfound == 1) sprintf(bigbuf, " *dptr = %s %s", string, land); else if (nfound < ntot) sprintf(bigbuf, " %s %s", string, land); else /* nfound == ntot */ sprintf(bigbuf, " %s;", string); sarrayAddString(sa, bigbuf, L_COPY); LEPT_FREE(string); } } } return sa; } /*! * \brief makeBarrelshiftString() */ static char * makeBarrelshiftString(l_int32 delx, /* j - cx */ l_int32 dely, /* i - cy */ l_int32 type) /* SEL_HIT or SEL_MISS */ { l_int32 absx, absy; char bigbuf[L_BUF_SIZE]; if (delx < -31 || delx > 31) return (char *)ERROR_PTR("delx out of bounds", __func__, NULL); if (dely < -31 || dely > 31) return (char *)ERROR_PTR("dely out of bounds", __func__, NULL); absx = L_ABS(delx); absy = L_ABS(dely); if (type == SEL_HIT) { if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); } else { /* type == SEL_MISS */ if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(~*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(~*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(~*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((~*(sptr) >> %d) | (~*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((~*(sptr) << %d) | (~*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); } return stringNew(bigbuf); } leptonica-1.86.0/src/fhmtgen.1.c000066400000000000000000000134441506303110300163040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * * PIX *pixHMTDwa_1() * PIX *pixFHMTGen_1() */ #include #include "allheaders.h" PIX *pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname); PIX *pixFHMTGen_1(PIX *pixd, PIX *pixs, const char *selname); l_int32 fhmtgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 10; static char SEL_NAMES[][80] = { "sel_3hm", "sel_3de", "sel_3ue", "sel_3re", "sel_3le", "sel_sl1", "sel_ulc", "sel_urc", "sel_llc", "sel_lrc"}; /*! * \brief pixHMTDwa_1() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a 32 pixel border, calls the appropriate
 *          pixFHMTGen_*(), and removes the border.
 *          See notes below for that function.
 * 
*/ PIX * pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname) { PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); pixt1 = pixAddBorder(pixs, 32, 0); pixt2 = pixFHMTGen_1(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * \brief pixFHMTGen_1() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa implementation of the hit-miss transform
 *          on pixs by the sel.
 *      (2) The sel must be limited in size to not more than 31 pixels
 *          about the origin.  It must have at least one hit, and it
 *          can have any number of misses.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 * 
*/ PIX * pixFHMTGen_1(PIX *pixd, PIX *pixs, const char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; fhmtgen_low_1(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ fhmtgen_low_1(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.86.0/src/fhmtgenlow.1.c000066400000000000000000000361611506303110300170270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: * l_int32 fhmtgen_low_1() * * Static Low-level: * void fhmt_1_*() */ #include "allheaders.h" static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! * fhmtgen_low_1() * * a dispatcher to appropriate low-level code */ l_int32 fhmtgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fhmt_1_0(datad, w, h, wpld, datas, wpls); break; case 1: fhmt_1_1(datad, w, h, wpld, datas, wpls); break; case 2: fhmt_1_2(datad, w, h, wpld, datas, wpls); break; case 3: fhmt_1_3(datad, w, h, wpld, datas, wpls); break; case 4: fhmt_1_4(datad, w, h, wpld, datas, wpls); break; case 5: fhmt_1_5(datad, w, h, wpld, datas, wpls); break; case 6: fhmt_1_6(datad, w, h, wpld, datas, wpls); break; case 7: fhmt_1_7(datad, w, h, wpld, datas, wpls); break; case 8: fhmt_1_8(datad, w, h, wpld, datas, wpls); break; case 9: fhmt_1_9(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fhmt_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fhmt_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & (*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & (*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (*sptr) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)); } } } static void fhmt_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls6) << 1) | (~*(sptr - wpls6 + 1) >> 31)) & ((*(sptr - wpls6) << 3) | (*(sptr - wpls6 + 1) >> 29)) & (~*(sptr - wpls2)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((~*(sptr + wpls6) >> 2) | (~*(sptr + wpls6 - 1) << 30)) & (*(sptr + wpls6)); } } } static void fhmt_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((~*(sptr - wpls) << 2) | (~*(sptr - wpls + 1) >> 30)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } static void fhmt_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 2) | (~*(sptr - wpls - 1) << 30)) & ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((~*(sptr + wpls2) << 1) | (~*(sptr + wpls2 + 1) >> 31)); } } } static void fhmt_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls2) >> 1) | (~*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & ((~*(sptr + wpls) << 2) | (~*(sptr + wpls + 1) >> 30)); } } } static void fhmt_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((~*(sptr - wpls2) << 1) | (~*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 2) | (~*(sptr + wpls - 1) << 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } leptonica-1.86.0/src/finditalic.c000066400000000000000000000234711506303110300166240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * \file finditalic.c *
 *
 *      l_int32   pixItalicWords()
 *
 *    Locate italic words.  This is an example of the use of
 *    hit-miss binary morphology with binary reconstruction
 *    (filling from a seed into a mask).
 *
 *    To see how this works, run with prog/italic.png.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------------------------- * * These hit-miss sels match the slanted edge of italic characters * * --------------------------------------------------------------- */ static const char *str_ital1 = " o x" " " " " " " " o x " " " " C " " " " o x " " " " " " " "o x "; static const char *str_ital2 = " o x" " " " " " o x " " C " " " " o x " " " " " "o x "; /* ------------------------------------------------------------- * * This sel removes noise that is not oriented as a slanted edge * * ------------------------------------------------------------- */ static const char *str_ital3 = " x" "Cx" "x " "x "; /*! * \brief pixItalicWords() * * \param[in] pixs 1 bpp * \param[in] boxaw [optional] word bounding boxes; can be NULL * \param[in] pixw [optional] word box mask; can be NULL * \param[out] pboxa boxa of italic words * \param[in] debugflag 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) You can input the bounding boxes for the words in one of
 *          two forms: as bounding boxes (%boxaw) or as a word mask with
 *          the word bounding boxes filled (%pixw).  For example,
 *          to compute %pixw, you can use pixWordMaskByDilation().
 *      (2) Alternatively, you can set both of these inputs to NULL,
 *          in which case the word mask is generated here.  This is
 *          done by dilating and closing the input image to connect
 *          letters within a word, while leaving the words separated.
 *          The parameters are chosen under the assumption that the
 *          input is 10 to 12 pt text, scanned at about 300 ppi.
 *      (3) sel_ital1 and sel_ital2 detect the right edges that are
 *          nearly vertical, at approximately the angle of italic
 *          strokes.  We use the right edge to avoid getting seeds
 *          from lower-case 'y'.  The typical italic slant has a smaller
 *          angle with the vertical than the 'W', so in most cases we
 *          will not trigger on the slanted lines in the 'W'.
 *      (4) Note that sel_ital2 is shorter than sel_ital1.  It is
 *          more appropriate for a typical font scanned at 200 ppi.
 * 
*/ l_ok pixItalicWords(PIX *pixs, BOXA *boxaw, PIX *pixw, BOXA **pboxa, l_int32 debugflag) { char opstring[32], buf[32]; l_int32 size, type; BOXA *boxa; PIX *pixsd, *pixm, *pixd; SEL *sel_ital1, *sel_ital2, *sel_ital3; if (!pboxa) return ERROR_INT("&boxa not defined", __func__, 1); *pboxa = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (boxaw && pixw) return ERROR_INT("both boxaw and pixw are defined", __func__, 1); sel_ital1 = selCreateFromString(str_ital1, 13, 6, NULL); sel_ital2 = selCreateFromString(str_ital2, 10, 6, NULL); sel_ital3 = selCreateFromString(str_ital3, 4, 2, NULL); /* Make the italic seed: extract with HMT; remove noise. * The noise removal close/open is important to exclude * situations where a small slanted line accidentally * matches sel_ital1. */ pixsd = pixHMT(NULL, pixs, sel_ital1); pixClose(pixsd, pixsd, sel_ital3); pixOpen(pixsd, pixsd, sel_ital3); /* Make the word mask. Use input boxes or mask if given. */ size = 0; /* init */ if (boxaw) { pixm = pixCreateTemplate(pixs); pixMaskBoxa(pixm, pixm, boxaw, L_SET_PIXELS); type = 1; } else if (pixw) { pixm = pixClone(pixw); type = 2; } else { pixWordMaskByDilation(pixs, NULL, &size, NULL); L_INFO("dilation size = %d\n", __func__, size); snprintf(opstring, sizeof(opstring), "d1.5 + c%d.1", size); pixm = pixMorphSequence(pixs, opstring, 0); type = 3; } /* Binary reconstruction to fill in those word mask * components for which there is at least one seed pixel. */ pixd = pixSeedfillBinary(NULL, pixsd, pixm, 8); boxa = pixConnComp(pixd, NULL, 8); *pboxa = boxa; if (debugflag) { /* Save results at at 2x reduction */ l_int32 res, upper; lept_mkdir("lept/ital"); BOXA *boxat; GPLOT *gplot; NUMA *na; PIXA *pixa1; PIX *pix1, *pix2, *pix3; pixa1 = pixaCreate(0); boxat = pixConnComp(pixm, NULL, 8); boxaWriteDebug("/tmp/lept/ital/ital.ba", boxat); pixaAddPix(pixa1, pixs, L_COPY); /* orig */ pixaAddPix(pixa1, pixsd, L_COPY); /* seed */ pix1 = pixConvertTo32(pixm); pixRenderBoxaArb(pix1, boxat, 3, 255, 0, 0); pixaAddPix(pixa1, pix1, L_INSERT); /* mask + outline */ pixaAddPix(pixa1, pixd, L_COPY); /* ital mask */ pix1 = pixConvertTo32(pixs); pixRenderBoxaArb(pix1, boxa, 3, 255, 0, 0); pixaAddPix(pixa1, pix1, L_INSERT); /* orig + outline */ pix1 = pixCreateTemplate(pixs); pix2 = pixSetBlackOrWhiteBoxa(pix1, boxa, L_SET_BLACK); pixCopy(pix1, pixs); pix3 = pixDilateBrick(NULL, pixs, 3, 3); pixCombineMasked(pix1, pix3, pix2); pixaAddPix(pixa1, pix1, L_INSERT); /* ital bolded */ pixDestroy(&pix2); pixDestroy(&pix3); pix2 = pixaDisplayTiledInColumns(pixa1, 1, 0.5, 20, 2); snprintf(buf, sizeof(buf), "/tmp/lept/ital/ital.%d.png", type); pixWriteDebug(buf, pix2, IFF_PNG); pixDestroy(&pix2); /* Assuming the image represents 6 inches of actual page width, * the pixs resolution is approximately * (width of pixs in pixels) / 6 * and the images have been saved at half this resolution. */ res = pixGetWidth(pixs) / 12; L_INFO("resolution = %d\n", __func__, res); l_pdfSetDateAndVersion(0); snprintf(buf, sizeof(buf), "/tmp/lept/ital/ital.%d.pdf", type); pixaConvertToPdf(pixa1, res, 1.0, L_FLATE_ENCODE, 75, "Italic Finder", buf); l_pdfSetDateAndVersion(1); pixaDestroy(&pixa1); boxaDestroy(&boxat); /* Plot histogram of horizontal white run sizes. A small * initial vertical dilation removes most runs that are neither * inter-character nor inter-word. The larger first peak is * from inter-character runs, and the smaller second peak is * from inter-word runs. */ pix1 = pixDilateBrick(NULL, pixs, 1, 15); upper = L_MAX(30, 3 * size); na = pixRunHistogramMorph(pix1, L_RUN_OFF, L_HORIZ, upper); pixDestroy(&pix1); gplot = gplotCreate("/tmp/lept/ital/runhisto", GPLOT_PNG, "Histogram of horizontal runs of white pixels, vs length", "run length", "number of runs"); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, "plot1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); } selDestroy(&sel_ital1); selDestroy(&sel_ital2); selDestroy(&sel_ital3); pixDestroy(&pixsd); pixDestroy(&pixm); pixDestroy(&pixd); return 0; } leptonica-1.86.0/src/flipdetect.c000066400000000000000000001035031506303110300166340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file flipdetect.c *
 *
 *      High-level interface for detection and correction
 *          PIX         *pixOrientCorrect()
 *
 *      Page orientation detection (pure rotation by 90 degree increments):
 *          l_int32      pixOrientDetect()
 *          l_int32      makeOrientDecision()
 *          l_int32      pixUpDownDetect()
 *
 *      Page mirror detection (flip 180 degrees about line in plane of image):
 *          l_int32      pixMirrorDetect()
 *
 *      Static debug helper
 *          static void  pixDebugFlipDetect()
 *
 *  ===================================================================
 *
 *  Page transformation detection:
 *
 *  Once a page is deskewed, there are 8 possible states that it
 *  can be in, shown symbolically below.  Suppose state 0 is correct.
 *
 *      0: correct     1          2          3
 *      +------+   +------+   +------+   +------+
 *      | **** |   | *    |   | **** |   |    * |
 *      | *    |   | *    |   |    * |   |    * |
 *      | *    |   | **** |   |    * |   | **** |
 *      +------+   +------+   +------+   +------+
 *
 *         4          5          6          7
 *      +-----+    +-----+    +-----+    +-----+
 *      | *** |    |   * |    | *** |    | *   |
 *      |   * |    |   * |    | *   |    | *   |
 *      |   * |    |   * |    | *   |    | *   |
 *      |   * |    | *** |    | *   |    | *** |
 *      +-----+    +-----+    +-----+    +-----+
 *
 *  Each of the other seven can be derived from state 0 by applying some
 *  combination of a 90 degree clockwise rotation, a flip about
 *  a horizontal line, and a flip about a vertical line,
 *  all abbreviated as:
 *      R = Rotation (about a line perpendicular to the image)
 *      H = Horizontal flip (about a vertical line in the plane of the image)
 *      V = Vertical flip (about a horizontal line in the plane of the image)
 *
 *  We get these transformations:
 *      RHV
 *      000  -> 0
 *      001  -> 1
 *      010  -> 2
 *      011  -> 3
 *      100  -> 4
 *      101  -> 5
 *      110  -> 6
 *      111  -> 7
 *
 *  Note that in four of these, the sum of H and V is 1 (odd).
 *  For these four, we have a change in parity (handedness) of
 *  the image, and the transformation cannot be performed by
 *  rotation about a vertical line out of the page.   Under
 *  rotation R, the set of 8 transformations decomposes into
 *  two subgroups linking {0, 3, 4, 7} and {1, 2, 5, 6} independently.
 *
 *  pixOrientDetect() tests for a pure rotation (0, 90, 180, 270 degrees).
 *  It doesn't change parity.
 *
 *  pixMirrorDetect() tests for a horizontal flip about the vertical axis.
 *  It changes parity.
 *
 *  The landscape/portrait rotation can be detected in two ways:
 *
 *    (1) Compute the deskew confidence for an image segment,
 *        both as is and rotated 90 degrees  (see skew.c).
 *
 *    (2) Compute the ascender/descender signal for the image,
 *        both as is and rotated 90 degrees  (implemented here).
 *
 *  The ascender/descender signal is useful for determining text
 *  orientation in Roman alphabets because the incidence of letters
 *  with straight-line ascenders (b, d, h, k, l, 't') outnumber
 *  those with descenders ('g', p, q).  The letters 't' and 'g'
 *  will respond variably to the filter, depending on the type face.
 *
 *  Note that for Cyrillic text, the ascender/descender signal is
 *  opposite (more descenders than ascenders) and weaker (a smaller
 *  expected ratio as a fraction of the total number of ascenders
 *  and descenders).  Therefore, when used on Cyrillic text, the
 *  decision of rightside-up or upside-down will be wrong and if any
 *  interpretation is to be made, it should be interpreted oppositely.
 *  For horizontal Cyrillic text, the left-right detector will work
 *  correctly, giving very low confidence because no signal for
 *  90/270 degree text was detected.
 *
 *  What about the mirror image situations?  These aren't common
 *  unless you're dealing with film, for example.
 *  But you can reliably test if the image has undergone a
 *  parity-changing flip once about some axis in the plane
 *  of the image, using pixMirrorDetect*().  This works ostensibly by
 *  counting the number of characters with ascenders that
 *  stick out to the left and right of the ascender.  Characters
 *  that are not mirror flipped are more likely to extend to the
 *  right (b, h, k) than to the left (d).  Of course, that is for
 *  text that is rightside-up.  So before you apply the mirror
 *  test, it is necessary to insure that the text has the ascenders
 *  going up, and not down or to the left or right.  But here's
 *  what *really* happens.  It turns out that the pre-filtering before
 *  the hit-miss transform (HMT) is crucial, and surprisingly, when
 *  the pre-filtering is chosen to generate a large signal, the majority
 *  of the signal comes from open regions of common lower-case
 *  letters such as 'e', 'c' and 'f'.
 *
 *  The set of operations you actually use depends on your prior knowledge:
 *
 *  (1) If the page is known to be either rightside-up or upside-down, use
 *      either pixOrientDetect() with pleftconf = NULL, or
 *      pixUpDownDetect().
 *
 *  (2) If any of the four orientations are possible, use pixOrientDetect().
 *
 *  (3) If the text is horizontal and rightside-up, the only remaining
 *      degree of freedom is a left-right mirror flip: use pixMirrorDetect().
 *
 *  (4) If you have a relatively large amount of numbers on the page,
 *      use the slower pixUpDownDetect().
 *
 *  We summarize the full orientation and mirror flip detection process:
 *
 *  (1) First determine which of the four 90 degree rotations
 *      causes the text to be rightside-up.  This can be done
 *      with either skew confidence or the pixOrientDetect()
 *      signals.  For the latter, see the table for pixOrientDetect().
 *
 *  (2) Then, with ascenders pointing up, apply pixMirrorDetect().
 *      In the normal situation the confidence confidence will be
 *      large and positive.  However, if mirror flipped, the
 *      confidence will be large and negative.
 *
 *  A high-level interface, pixOrientCorrect() combines the detection
 *  of the orientation with the rotation decision and the rotation itself.
 *
 *  The structuring elements used for text orientation detection require text
 *  with ascenders and descenders.  They have been designed to work best
 *  with normal sized text (about 10 pt font), scanned with a resolution
 *  between 150 and 300 ppi.
 *
 *  For pedagogical reasons, we have included a dwa implementation of
 *  this functionality, in flipdetectdwa.c.notused.  It shows by example
 *  how to make a dwa implementation of an application that uses binary
 *  morphological operations.  It is faster than the rasterop implementation,
 *  but not by a large amount.
 *
 *  The generation of flipdetectdwa.c.notused was achieved as follows:
 *  (1) The program flipselgen.c.notused generates the DWA code, in two C files
 *  (2) The low-level DWA code in those two files was put into a single
 *      file, fliphmtgen.c.notused, for clarity.  We didn't want the two
 *      files (fmorphgen.3.c and fmorphgenlow.3.c) sitting around and
 *      possibly causing confusion.
 *  (3) This low-level code was directly incorporated into flipdetectdwa.c,
 *      where it substitutes for the basic rasterop code in flipdetect.c.
 *
 *  Finally, use can be made of programs such as exiftool and convert to
 *  read exif camera orientation data in jpeg files and conditionally rotate.
 *  Here is an example shell script, made by Dan9er:
 *  ==================================================================
 *  #!/bin/sh
 *  #   orientByExif.sh
 *  #   Dependencies: exiftool (exiflib) and convert (ImageMagick)
 *  #   Note: if there is no exif orientation data in the jpeg file,
 *  #         this simply copies the input file.
 *  #
 *  if [[ -z $(command -v exiftool) || -z $(command -v convert) ]]; then
 *      echo "You need to install dependencies; e.g.:"
 *      echo "   sudo apt install libimage-exiftool-perl"
 *      echo "   sudo apt install imagemagick"
 *      exit 1
 *  fi
 *  if [[ $# != 2 ]]; then
 *      echo "Syntax: orientByExif infile outfile"
 *      exit 2
 *  fi
 *  if [[ ${1: -4} != ".jpg" ]]; then
 *      echo "File is not a jpeg"
 *      exit 3
 *  fi
 *  if [[ $(exiftool -s3 -n -Orientation "$1") = 1 ]]; then
 *      echo "Image is already upright"
 *      exit 0
 *  fi
 *  convert "$1" -auto-orient "$2"
 *  echo "Done"
 *  exit 0
 *  ==================================================================
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Sels for pixOrientDetect() and pixMirrorDetect() */ static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; /* Parameters for determining orientation */ static const l_int32 DefaultMinUpDownCount = 70; static const l_float32 DefaultMinUpDownConf = 8.0; static const l_float32 DefaultMinUpDownRatio = 2.5; /* Parameters for determining mirror flip */ static const l_int32 DefaultMinMirrorFlipCount = 100; static const l_float32 DefaultMinMirrorFlipConf = 5.0; /* Static debug function */ static void pixDebugFlipDetect(const char *filename, PIX *pixs, PIX *pixhm, l_int32 enable); /*----------------------------------------------------------------* * High-level interface for detection and correction * *----------------------------------------------------------------*/ /*! * \brief pixOrientCorrect() * * \param[in] pixs 1 bpp, deskewed, Roman text, 150 - 300 ppi * \param[in] minupconf minimum value for which a decision can be made * \param[in] minratio minimum conf ratio required for a decision * \param[out] pupconf [optional] ; use NULL to skip * \param[out] pleftconf [optional] ; use NULL to skip * \param[out] protation [optional] ; use NULL to skip * \param[in] debug 1 for debug output; 0 otherwise * \return pixd may be rotated by 90, 180 or 270; null on error * *
 * Notes:
 *      (1) Simple top-level function to detect if Roman text is in
 *          reading orientation, and to rotate the image accordingly if not.
 *      (2) Returns a copy if no rotation is needed.
 *      (3) See notes for pixOrientDetect() and pixOrientDecision().
 *          Use 0.0 for default values for %minupconf and %minratio
 *      (4) Optional output of intermediate confidence results and
 *          the rotation performed on pixs.
 *      (5) Use on text images with a resolution between 150 and 300 ppi.
 * 
*/ PIX * pixOrientCorrect(PIX *pixs, l_float32 minupconf, l_float32 minratio, l_float32 *pupconf, l_float32 *pleftconf, l_int32 *protation, l_int32 debug) { l_int32 orient; l_float32 upconf, leftconf; PIX *pix1; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); /* Get confidences for orientation */ pixUpDownDetect(pixs, &upconf, 0, 0, debug); pix1 = pixRotate90(pixs, 1); pixUpDownDetect(pix1, &leftconf, 0, 0, debug); pixDestroy(&pix1); if (pupconf) *pupconf = upconf; if (pleftconf) *pleftconf = leftconf; /* Decide what to do */ makeOrientDecision(upconf,leftconf, minupconf, minratio, &orient, debug); /* Do it */ switch (orient) { case L_TEXT_ORIENT_UNKNOWN: L_INFO("text orientation not determined; no rotation\n", __func__); if (protation) *protation = 0; return pixCopy(NULL, pixs); case L_TEXT_ORIENT_UP: L_INFO("text is oriented up; no rotation\n", __func__); if (protation) *protation = 0; return pixCopy(NULL, pixs); case L_TEXT_ORIENT_LEFT: L_INFO("landscape; text oriented left; 90 cw rotation\n", __func__); if (protation) *protation = 90; return pixRotateOrth(pixs, 1); case L_TEXT_ORIENT_DOWN: L_INFO("text oriented down; 180 cw rotation\n", __func__); if (protation) *protation = 180; return pixRotateOrth(pixs, 2); case L_TEXT_ORIENT_RIGHT: L_INFO("landscape; text oriented right; 270 cw rotation\n", __func__); if (protation) *protation = 270; return pixRotateOrth(pixs, 3); default: L_ERROR("invalid orient flag!\n", __func__); return pixCopy(NULL, pixs); } } /*----------------------------------------------------------------* * Orientation detection (four 90 degree angles) * *----------------------------------------------------------------*/ /*! * \brief pixOrientDetect() * * \param[in] pixs 1 bpp, deskewed, Roman text, 150 - 300 ppi * \param[out] pupconf [optional] ; may be NULL * \param[out] pleftconf [optional] ; may be NULL * \param[in] mincount min number of up + down; use 0 for default * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See "Measuring document image skew and orientation"
 *          Dan S. Bloomberg, Gary E. Kopec and Lakshmi Dasari
 *          IS&T/SPIE EI'95, Conference 2422: Document Recognition II
 *          pp 302-316, Feb 6-7, 1995, San Jose, CA
 *      (2) upconf is the normalized difference between up ascenders
 *          and down ascenders.  The image is analyzed without rotation
 *          for being rightside-up or upside-down.  Set &upconf to null
 *          to skip this operation.
 *      (3) leftconf is the normalized difference between up ascenders
 *          and down ascenders in the image after it has been
 *          rotated 90 degrees clockwise.  With that rotation, ascenders
 *          projecting to the left in the source image will project up
 *          in the rotated image.  We compute this by rotating 90 degrees
 *          clockwise and testing for up and down ascenders.  Set
 *          &leftconf to null to skip this operation.
 *      (4) Note that upconf and leftconf are not linear measures of
 *          confidence, e.g., in a range between 0 and 100.  They
 *          measure how far you are out on the tail of a (presumably)
 *          normal distribution.  For example, a confidence of 10 means
 *          that it is nearly certain that the difference did not
 *          happen at random.  However, these values must be interpreted
 *          cautiously, taking into consideration the estimated prior
 *          for a particular orientation or mirror flip.   The up-down
 *          signal is very strong if applied to text with ascenders
 *          up and down, and relatively weak for text at 90 degrees,
 *          but even at 90 degrees, the difference can look significant.
 *          For example, suppose the ascenders are oriented horizontally,
 *          but the test is done vertically.  Then upconf can
 *          be < -MIN_CONF_FOR_UP_DOWN, suggesting the text may be
 *          upside-down.  However, if instead the test were done
 *          horizontally, leftconf will be very much larger
 *          (in absolute value), giving the correct orientation.
 *      (5) If you compute both upconf and leftconf, and there is
 *          sufficient signal, the following table determines the
 *          cw angle necessary to rotate pixs so that the text is
 *          rightside-up:
 *             0 deg :           upconf >> 1,    abs(upconf) >> abs(leftconf)
 *             90 deg :          leftconf >> 1,  abs(leftconf) >> abs(upconf)
 *             180 deg :         upconf << -1,   abs(upconf) >> abs(leftconf)
 *             270 deg :         leftconf << -1, abs(leftconf) >> abs(upconf)
 *      (6) One should probably not interpret the direction unless
 *          there are a sufficient number of counts for both orientations,
 *          in which case neither upconf nor leftconf will be 0.0.
 *      (7) Use on text images with a resolution between 150 and 300 ppi.
 *      (8) This algorithm will fail on some images, such as tables,
 *          where most of the characters are numbers and appear as
 *          uppercase, but there are some repeated words that give a
 *          biased signal.  It may be advisable to run a table detector
 *          first (e.g., pixDecideIfTable()), and not run the orientation
 *          detector if it is a table.
 *      (9) Uses rasterop implementation of HMT.
 * 
*/ l_ok pixOrientDetect(PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug) { PIX *pix1; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!pupconf && !pleftconf) return ERROR_INT("nothing to do", __func__, 1); if (mincount == 0) mincount = DefaultMinUpDownCount; if (pupconf) pixUpDownDetect(pixs, pupconf, mincount, 0, debug); if (pleftconf) { pix1 = pixRotate90(pixs, 1); pixUpDownDetect(pix1, pleftconf, mincount, 0, debug); pixDestroy(&pix1); } return 0; } /*! * \brief makeOrientDecision() * * \param[in] upconf nonzero * \param[in] leftconf nonzero * \param[in] minupconf minimum value for which a decision can be made * \param[in] minratio minimum conf ratio required for a decision * \param[out] porient text orientation enum {0,1,2,3,4} * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can be run after pixOrientDetect()
 *      (2) Both upconf and leftconf must be nonzero; otherwise the
 *          orientation cannot be determined.
 *      (3) The abs values of the input confidences are compared to
 *          minupconf.
 *      (4) The abs value of the largest of (upconf/leftconf) and
 *          (leftconf/upconf) is compared with minratio.
 *      (5) Input 0.0 for the default values for minupconf and minratio.
 *      (6) The return value of orient is interpreted thus:
 *            L_TEXT_ORIENT_UNKNOWN:  not enough evidence to determine
 *            L_TEXT_ORIENT_UP:       text rightside-up
 *            L_TEXT_ORIENT_LEFT:     landscape, text up facing left
 *            L_TEXT_ORIENT_DOWN:     text upside-down
 *            L_TEXT_ORIENT_RIGHT:    landscape, text up facing right
 * 
*/ l_ok makeOrientDecision(l_float32 upconf, l_float32 leftconf, l_float32 minupconf, l_float32 minratio, l_int32 *porient, l_int32 debug) { l_float32 absupconf, absleftconf; if (!porient) return ERROR_INT("&orient not defined", __func__, 1); *porient = L_TEXT_ORIENT_UNKNOWN; /* default: no decision */ if (upconf == 0.0 || leftconf == 0.0) { L_INFO("not enough confidence to get orientation\n", __func__); return 0; } if (minupconf == 0.0) minupconf = DefaultMinUpDownConf; if (minratio == 0.0) minratio = DefaultMinUpDownRatio; absupconf = L_ABS(upconf); absleftconf = L_ABS(leftconf); /* Here are the four possible orientation decisions, based * on satisfaction of two threshold constraints. */ if (upconf > minupconf && absupconf > minratio * absleftconf) *porient = L_TEXT_ORIENT_UP; else if (leftconf > minupconf && absleftconf > minratio * absupconf) *porient = L_TEXT_ORIENT_LEFT; else if (upconf < -minupconf && absupconf > minratio * absleftconf) *porient = L_TEXT_ORIENT_DOWN; else if (leftconf < -minupconf && absleftconf > minratio * absupconf) *porient = L_TEXT_ORIENT_RIGHT; if (debug) { lept_stderr("upconf = %7.3f, leftconf = %7.3f\n", upconf, leftconf); if (*porient == L_TEXT_ORIENT_UNKNOWN) lept_stderr("Confidence is low; no determination is made\n"); else if (*porient == L_TEXT_ORIENT_UP) lept_stderr("Text is rightside-up\n"); else if (*porient == L_TEXT_ORIENT_LEFT) lept_stderr("Text is rotated 90 deg ccw\n"); else if (*porient == L_TEXT_ORIENT_DOWN) lept_stderr("Text is upside-down\n"); else /* *porient == L_TEXT_ORIENT_RIGHT */ lept_stderr("Text is rotated 90 deg cw\n"); } return 0; } /*! * \brief pixUpDownDetect() * * \param[in] pixs 1 bpp, deskewed, Roman text, 150 - 300 ppi * \param[out] pconf confidence that text is rightside-up * \param[in] mincount min number of up + down; use 0 for default * \param[in] npixels number of pixels removed from each side of word box * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixOrientDetect() for other details.
 *      (2) The detected confidence %conf is the normalized difference
 *          between the number of detected up and down ascenders,
 *          assuming that the text is either rightside-up or upside-down
 *          and not rotated at a 90 degree angle.
 *      (3) The typical mode of operation is %npixels == 0.
 *          If %npixels > 0, this removes HMT matches at the
 *          beginning and ending of "words."  This is useful for
 *          pages that may have mostly digits, because if npixels == 0,
 *          leading "1" and "3" digits can register as having
 *          ascenders or descenders, and "7" digits can match descenders.
 *          Consequently, a page image of only digits may register
 *          as being upside-down.
 *      (4) We want to count the number of instances found using the HMT.
 *          An expensive way to do this would be to count the
 *          number of connected components.  A cheap way is to do a rank
 *          reduction cascade that reduces each component to a single
 *          pixel, and results (after two or three 2x reductions)
 *          in one pixel for each of the original components.
 *          After the reduction, you have a much smaller pix over
 *          which to count pixels.  We do only 2 reductions, because
 *          this function is designed to work for input pix between
 *          150 and 300 ppi, and an 8x reduction on a 150 ppi image
 *          is going too far -- components will get merged.
 *      (5) Use on text images with a resolution between 150 and 300 ppi.
 * 
*/ l_ok pixUpDownDetect(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug) { l_int32 countup, countdown, nmax; l_float32 nup, ndown; PIX *pix0, *pix1, *pix2, *pix3, *pixm; SEL *sel1, *sel2, *sel3, *sel4; if (!pconf) return ERROR_INT("&conf not defined", __func__, 1); *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (mincount == 0) mincount = DefaultMinUpDownCount; if (npixels < 0) npixels = 0; if (debug) { lept_mkdir("lept/orient"); } sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); sel3 = selCreateFromString(textsel3, 5, 6, NULL); sel4 = selCreateFromString(textsel4, 5, 6, NULL); /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). * This closes holes in x-height characters and joins them at * the x-height. There is more noise in the descender detection * from this, but it works fairly well. */ pix0 = pixMorphCompSequence(pixs, "c1.8 + c30.1", 0); /* Optionally, make a mask of the word bounding boxes, shortening * each of them by a fixed amount at each end. */ pixm = NULL; if (npixels > 0) { l_int32 i, nbox, x, y, w, h; BOX *box; BOXA *boxa; pix1 = pixMorphSequence(pix0, "o10.1", 0); boxa = pixConnComp(pix1, NULL, 8); pixm = pixCreateTemplate(pix1); pixDestroy(&pix1); nbox = boxaGetCount(boxa); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (w > 2 * npixels) pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, PIX_SET, NULL, 0, 0); boxDestroy(&box); } boxaDestroy(&boxa); } /* Find the ascenders and optionally filter with pixm. * For an explanation of the procedure used for counting the result * of the HMT, see comments at the beginning of this function. */ pix1 = pixHMT(NULL, pix0, sel1); pix2 = pixHMT(NULL, pix0, sel2); pixOr(pix1, pix1, pix2); if (pixm) pixAnd(pix1, pix1, pixm); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &countup, NULL); pixDebugFlipDetect("/tmp/lept/orient/up.png", pixs, pix1, debug); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Find the ascenders and optionally filter with pixm. */ pix1 = pixHMT(NULL, pix0, sel3); pix2 = pixHMT(NULL, pix0, sel4); pixOr(pix1, pix1, pix2); if (pixm) pixAnd(pix1, pix1, pixm); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &countdown, NULL); pixDebugFlipDetect("/tmp/lept/orient/down.png", pixs, pix1, debug); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Evaluate statistically, generating a confidence that is * related to the probability with a gaussian distribution. */ nup = (l_float32)(countup); ndown = (l_float32)(countdown); nmax = L_MAX(countup, countdown); if (nmax > mincount) *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); if (debug) { if (pixm) pixWriteDebug("/tmp/lept/orient/pixm1.png", pixm, IFF_PNG); lept_stderr("nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", nup, ndown, *pconf); if (*pconf > DefaultMinUpDownConf) lept_stderr("Text is rightside-up\n"); if (*pconf < -DefaultMinUpDownConf) lept_stderr("Text is upside-down\n"); } pixDestroy(&pix0); pixDestroy(&pixm); selDestroy(&sel1); selDestroy(&sel2); selDestroy(&sel3); selDestroy(&sel4); return 0; } /*----------------------------------------------------------------* * Left-right mirror detection * *----------------------------------------------------------------*/ /*! * \brief pixMirrorDetect() * * \param[in] pixs 1 bpp, deskewed, Roman text, 150 - 300 ppi * \param[out] pconf confidence that text is not LR mirror reversed * \param[in] mincount min number of left + right; use 0 for default * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For this test, it is necessary that the text is horizontally
 *          oriented, with ascenders going up.
 *      (2) conf is the normalized difference between the number of
 *          right and left facing characters with ascenders.
 *          Left-facing are {d}; right-facing are {b, h, k}.
 *          At least that was the expectation.  In practice, we can
 *          really just say that it is the normalized difference in
 *          hits using two specific hit-miss filters, textsel1 and textsel2,
 *          after the image has been suitably pre-filtered so that
 *          these filters are effective.  See (4) for what's really happening.
 *      (3) A large positive conf value indicates normal text, whereas
 *          a large negative conf value means the page is mirror reversed.
 *      (4) The implementation is a bit tricky.  The general idea is
 *          to fill the x-height part of characters, but not the space
 *          between them, before doing the HMT.  This is done by
 *          finding pixels added using two different operations -- a
 *          horizontal close and a vertical dilation -- and adding
 *          the intersection of these sets to the original.  It turns
 *          out that the original intuition about the signal was largely
 *          in error: much of the signal for right-facing characters
 *          comes from the lower part of common x-height characters, like
 *          the e and c, that remain open after these operations.
 *          So it's important that the operations to close the x-height
 *          parts of the characters are purposely weakened sufficiently
 *          to allow these characters to remain open.  The wonders
 *          of morphology!
 *      (5) Use on text images with a resolution between 150 and 300 ppi.
 * 
*/ l_ok pixMirrorDetect(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { l_int32 count1, count2, nmax; l_float32 nleft, nright; PIX *pix0, *pix1, *pix2, *pix3; SEL *sel1, *sel2; if (!pconf) return ERROR_INT("&conf not defined", __func__, 1); *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (mincount == 0) mincount = DefaultMinMirrorFlipCount; if (debug) { lept_mkdir("lept/orient"); } sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); /* Fill x-height characters but not space between them, sort of. */ pix3 = pixMorphCompSequence(pixs, "d1.30", 0); pixXor(pix3, pix3, pixs); pix0 = pixMorphCompSequence(pixs, "c15.1", 0); pixXor(pix0, pix0, pixs); pixAnd(pix0, pix0, pix3); pixOr(pix0, pix0, pixs); pixDestroy(&pix3); /* Filter the right-facing characters. */ pix1 = pixHMT(NULL, pix0, sel1); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &count1, NULL); pixDebugFlipDetect("/tmp/lept/orient/right.png", pixs, pix1, debug); pixDestroy(&pix1); pixDestroy(&pix3); /* Filter the left-facing characters. */ pix2 = pixHMT(NULL, pix0, sel2); pix3 = pixReduceRankBinaryCascade(pix2, 1, 1, 0, 0); pixCountPixels(pix3, &count2, NULL); pixDebugFlipDetect("/tmp/lept/orient/left.png", pixs, pix2, debug); pixDestroy(&pix2); pixDestroy(&pix3); nright = (l_float32)count1; nleft = (l_float32)count2; nmax = L_MAX(count1, count2); pixDestroy(&pix0); selDestroy(&sel1); selDestroy(&sel2); if (nmax > mincount) *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); if (debug) { lept_stderr("nright = %f, nleft = %f\n", nright, nleft); if (*pconf > DefaultMinMirrorFlipConf) lept_stderr("Text is not mirror reversed\n"); if (*pconf < -DefaultMinMirrorFlipConf) lept_stderr("Text is mirror reversed\n"); } return 0; } /*----------------------------------------------------------------* * Static debug helper * *----------------------------------------------------------------*/ /* * \brief pixDebugFlipDetect() * * \param[in] filename for output debug file * \param[in] pixs input to pix*Detect * \param[in] pixhm hit-miss result from ascenders or descenders * \param[in] enable 1 to enable this function; 0 to disable * \return void */ static void pixDebugFlipDetect(const char *filename, PIX *pixs, PIX *pixhm, l_int32 enable) { PIX *pixt, *pixthm; if (!enable) return; /* Display with red dot at counted locations */ pixt = pixConvert1To4Cmap(pixs); pixthm = pixMorphSequence(pixhm, "d5.5", 0); pixSetMaskedCmap(pixt, pixthm, 0, 0, 255, 0, 0); pixWriteDebug(filename, pixt, IFF_PNG); pixDestroy(&pixthm); pixDestroy(&pixt); return; } leptonica-1.86.0/src/flipdetectdwa.c.notused000066400000000000000000000571531506303110300210210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file flipdetectdwa.c.notused *
 *
 *                                  NOTE
 *      ==============================================================
 *      This code has been retired from the library.  It is faster than
 *      the rasterop implementation, but not by a large amount.  On a
 *      standard 8 Mpixel page image, the timings are:
 *         Rasterop: 0.37 sec
 *         DWA:      0.21 sec.
 *      It is preserved here to show how the dwa code can be generated
 *      and then used in an application.
 *      ==============================================================
 *
 *      DWA page orientation detection (pure rotation by 90 degree increments):
 *          l_int32      pixOrientDetectDwa()
 *          l_int32      pixUpDownDetectDwa()
 *
 *      DWA mirror detection (flip 180 degrees about line in plane of image):
 *          l_int32      pixMirrorDetectDwa()
 *
 *      Low-level auto-generated DWA implementation of hit-miss transforms.
 *      This code (rearranged) was generated by prog/flipselgen.c.
 *          static PIX  *pixFlipFHMTGen()
 *          --> static l_int32   flipfhmtgen_low()  -- dispatcher
 *              --> static void      fhmt_1_0()
 *              --> static void      fhmt_1_1()
 *              --> static void      fhmt_1_2()
 *              --> static void      fhmt_1_3()
 *
 *      The four Sels used are defined in prog/flipselgen.c.
 *      They are the same as those in flipdetect.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Parameters for determining orientation */ static const l_int32 DefaultMinUpDownCount = 70; static const l_float32 DefaultMinUpDownConf = 8.0; /* Parameters for determining mirror flip */ static const l_int32 DefaultMinMirrorFlipCount = 100; static const l_float32 DefaultMinMirrorFlipConf = 5.0; static l_int32 NUM_SELS_GENERATED = 4; static char SEL_NAMES[][10] = {"flipsel1", "flipsel2", "flipsel3", "flipsel4"}; static l_int32 flipfhmtgen_low(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32, l_int32); static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*----------------------------------------------------------------* * High-level interface for orientation detection * * (four 90 degree angles) * *----------------------------------------------------------------*/ /*! * \brief pixOrientDetectDwa() * * \param[in] pixs 1 bpp, deskewed, English text * \param[out] pupconf [optional] ; may be NULL * \param[out] pleftconf [optional] ; may be NULL * \param[in] mincount min number of up + down; use 0 for default * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Same interface as for pixOrientDetect().  See notes
 *          there for usage.
 *      (2) Uses auto-gen'd code for the Sels defined at the
 *          top of this file, with some renaming of functions.
 *          The auto-gen'd code is in fliphmtgen.c, and can
 *          be generated by a simple executable; see prog/flipselgen.c.
 *      (3) This runs about 1.5 times faster than the pixOrientDetect().
 * 
*/ l_ok pixOrientDetectDwa(PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug) { PIX *pix1; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!pupconf && !pleftconf) return ERROR_INT("nothing to do", __func__, 1); if (mincount == 0) mincount = DefaultMinUpDownCount; if (pupconf) pixUpDownDetectDwa(pixs, pupconf, mincount, 0, debug); if (pleftconf) { pix1 = pixRotate90(pixs, 1); pixUpDownDetectDwa(pix1, pleftconf, mincount, 0, debug); pixDestroy(&pix1); } return 0; } /*! * \brief pixUpDownDetectDwa() * * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi * \param[out] pconf confidence that text is rightside-up * \param[in] mincount min number of up + down; use 0 for default * \param[in] npixels number of pixels removed from each side of word box * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Faster (DWA) version of pixUpDownDetect().
 *      (2) If npixels == 0, the pixels identified through the HMT
 *          (hit-miss transform) are not clipped by a truncated word
 *          mask pixm.  See pixUpDownDetect() for usage and other details.
 *      (3) The returned confidence is the normalized difference
 *          between the number of detected up and down ascenders,
 *          assuming that the text is either rightside-up or upside-down
 *          and not rotated at a 90 degree angle.
 * 
*/ l_ok pixUpDownDetectDwa(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug) { char flipsel1[] = "flipsel1"; char flipsel2[] = "flipsel2"; char flipsel3[] = "flipsel3"; char flipsel4[] = "flipsel4"; l_int32 countup, countdown, nmax; l_float32 nup, ndown; PIX *pixt, *pix0, *pix1, *pix2, *pix3, *pixm; if (!pconf) return ERROR_INT("&conf not defined", __func__, 1); *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (mincount == 0) mincount = DefaultMinUpDownCount; if (npixels < 0) npixels = 0; /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). * This closes holes in x-height characters and joins them at * the x-height. There is more noise in the descender detection * from this, but it works fairly well. */ pixt = pixMorphSequenceDwa(pixs, "c1.8 + c30.1", 0); /* Be sure to add the border before the flip DWA operations! */ pix0 = pixAddBorderGeneral(pixt, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, 0); pixDestroy(&pixt); /* Optionally, make a mask of the word bounding boxes, shortening * each of them by a fixed amount at each end. */ pixm = NULL; if (npixels > 0) { l_int32 i, nbox, x, y, w, h; BOX *box; BOXA *boxa; pix1 = pixMorphSequenceDwa(pix0, "o10.1", 0); boxa = pixConnComp(pix1, NULL, 8); pixm = pixCreateTemplate(pix1); pixDestroy(&pix1); nbox = boxaGetCount(boxa); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (w > 2 * npixels) pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, PIX_SET, NULL, 0, 0); boxDestroy(&box); } boxaDestroy(&boxa); } /* Find the ascenders and optionally filter with pixm. * For an explanation of the procedure used for counting the result * of the HMT, see comments in pixUpDownDetect(). */ pix1 = pixFlipFHMTGen(NULL, pix0, flipsel1); pix2 = pixFlipFHMTGen(NULL, pix0, flipsel2); pixOr(pix1, pix1, pix2); if (pixm) pixAnd(pix1, pix1, pixm); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &countup, NULL); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Find the ascenders and optionally filter with pixm. */ pix1 = pixFlipFHMTGen(NULL, pix0, flipsel3); pix2 = pixFlipFHMTGen(NULL, pix0, flipsel4); pixOr(pix1, pix1, pix2); if (pixm) pixAnd(pix1, pix1, pixm); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &countdown, NULL); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Evaluate statistically, generating a confidence that is * related to the probability with a gaussian distribution. */ nup = (l_float32)(countup); ndown = (l_float32)(countdown); nmax = L_MAX(countup, countdown); if (nmax > mincount) *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); if (debug) { if (pixm) { lept_mkdir("lept/orient"); pixWriteDebug("/tmp/lept/orient/pixm2.png", pixm, IFF_PNG); } lept_stderr("nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", nup, ndown, *pconf); if (*pconf > DefaultMinUpDownConf) lept_stderr("Text is rightside-up\n"); if (*pconf < -DefaultMinUpDownConf) lept_stderr("Text is upside-down\n"); } pixDestroy(&pix0); pixDestroy(&pixm); return 0; } /*----------------------------------------------------------------* * Left-right mirror detection * * DWA implementation * *----------------------------------------------------------------*/ /*! * \brief pixMirrorDetectDwa() * * \param[in] pixs 1 bpp, deskewed, English text * \param[out] pconf confidence that text is not LR mirror reversed * \param[in] mincount min number of left + right; use 0 for default * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We assume the text is horizontally oriented, with
 *          ascenders going up.
 *      (2) See notes in pixMirrorDetect().
 * 
*/ l_ok pixMirrorDetectDwa(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { char flipsel1[] = "flipsel1"; char flipsel2[] = "flipsel2"; l_int32 count1, count2, nmax; l_float32 nleft, nright; PIX *pix0, *pix1, *pix2, *pix3; if (!pconf) return ERROR_INT("&conf not defined", __func__, 1); *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (mincount == 0) mincount = DefaultMinMirrorFlipCount; /* Fill x-height characters but not space between them, sort of. */ pix3 = pixMorphSequenceDwa(pixs, "d1.30", 0); pixXor(pix3, pix3, pixs); pix0 = pixMorphSequenceDwa(pixs, "c15.1", 0); pixXor(pix0, pix0, pixs); pixAnd(pix0, pix0, pix3); pixOr(pix3, pix0, pixs); pixDestroy(&pix0); pix0 = pixAddBorderGeneral(pix3, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, 0); pixDestroy(&pix3); /* Filter the right-facing characters. */ pix1 = pixFlipFHMTGen(NULL, pix0, flipsel1); pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); pixCountPixels(pix3, &count1, NULL); pixDestroy(&pix1); pixDestroy(&pix3); /* Filter the left-facing characters. */ pix2 = pixFlipFHMTGen(NULL, pix0, flipsel2); pix3 = pixReduceRankBinaryCascade(pix2, 1, 1, 0, 0); pixCountPixels(pix3, &count2, NULL); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix0); nright = (l_float32)count1; nleft = (l_float32)count2; nmax = L_MAX(count1, count2); if (nmax > mincount) *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); if (debug) { lept_stderr("nright = %f, nleft = %f\n", nright, nleft); if (*pconf > DefaultMinMirrorFlipConf) lept_stderr("Text is not mirror reversed\n"); if (*pconf < -DefaultMinMirrorFlipConf) lept_stderr("Text is mirror reversed\n"); } return 0; } /*---------------------------------------------------------------------* * Auto-generated hmt code * *---------------------------------------------------------------------*/ /* * pixFlipFHMTGen() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs * sel name (one of four defined in SEL_NAMES[]) * Return: pixd * * Notes: * Action: hit-miss transform on pixs by the sel * N.B.: the sel must have at least one hit, and it * can have any number of misses. */ PIX * pixFlipFHMTGen(PIX *pixd, PIX *pixs, const char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (pixd) { if (!pixSizesEqual(pixs, pixd)) return (PIX *)ERROR_PTR("sizes not equal", __func__, pixd); } else { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with ADDED_BORDER white pixels, * that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 2 * ADDED_BORDER; h = pixGetHeight(pixs) - 2 * ADDED_BORDER; datas = pixGetData(pixs) + ADDED_BORDER * wpls + ADDED_BORDER / 32; datad = pixGetData(pixd) + ADDED_BORDER * wpld + ADDED_BORDER / 32; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + ADDED_BORDER * wpls + ADDED_BORDER / 32; flipfhmtgen_low(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* simple and not in-place */ flipfhmtgen_low(datad, w, h, wpld, datas, wpls, index); } return pixd; } /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /* * flipfhmtgen_low() * * A dispatcher to appropriate low-level code for flip hmt ops */ static l_int32 flipfhmtgen_low(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fhmt_1_0(datad, w, h, wpld, datas, wpls); break; case 1: fhmt_1_1(datad, w, h, wpld, datas, wpls); break; case 2: fhmt_1_2(datad, w, h, wpld, datas, wpls); break; case 3: fhmt_1_3(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated hmt routines * *--------------------------------------------------------------------------*/ /* * N.B. in all the low-level routines, the part of the image * that is accessed has been clipped by ADDED_BORDER pixels * on all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fhmt_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls2) >> 3) | (*(sptr + wpls2 - 1) << 29)) & ((*(sptr + wpls3) >> 3) | (*(sptr + wpls3 - 1) << 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)); } } } static void fhmt_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)) & ((*(sptr + wpls2) << 3) | (*(sptr + wpls2 + 1) >> 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)) & ((*(sptr + wpls3) << 3) | (*(sptr + wpls3 + 1) >> 29)); } } } static void fhmt_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 3) | (*(sptr - wpls3 - 1) << 29)) & ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls2) >> 3) | (*(sptr - wpls2 - 1) << 29)) & ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls3) << 3) | (*(sptr - wpls3 + 1) >> 29)) & ((*(sptr - wpls2) << 3) | (*(sptr - wpls2 + 1) >> 29)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)); } } } leptonica-1.86.0/src/fliphmtgen.c.notused000066400000000000000000000325111506303110300203260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * fliphmtgen.c.notused * * NOTE * ================================================================ * This code has been retired from the library, along with the code * in flipdetectdwa.c which uses it. It is no longer compiled. * ================================================================ * * DWA implementation of hit-miss transforms with auto-generated sels * for pixOrientDetectDwa() and pixUpDownDetectDwa() in * flipdetectdwa.c * * PIX *pixFlipFHMTGen() * static l_int32 flipfhmtgen_low() -- dispatcher * static void fhmt_1_0() * static void fhmt_1_1() * static void fhmt_1_2() * static void fhmt_1_3() * * The code (slightly rearranged) was generated by prog/flipselgen.c */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 NUM_SELS_GENERATED = 4; static char SEL_NAMES[][10] = {"flipsel1", "flipsel2", "flipsel3", "flipsel4"}; static l_int32 flipfhmtgen_low(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32, l_int32); static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Top-level hmt functions * *---------------------------------------------------------------------*/ /* * pixFlipFHMTGen() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs * sel name (one of four defined in SEL_NAMES[]) * Return: pixd * * Notes: * Action: hit-miss transform on pixs by the sel * N.B.: the sel must have at least one hit, and it * can have any number of misses. */ PIX * pixFlipFHMTGen(PIX *pixd, PIX *pixs, const char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFlipFHMTGen"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (pixd) { if (!pixSizesEqual(pixs, pixd)) return (PIX *)ERROR_PTR("sizes not equal", procName, pixd); } else { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with ADDED_BORDER white pixels, * that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 2 * ADDED_BORDER; h = pixGetHeight(pixs) - 2 * ADDED_BORDER; datas = pixGetData(pixs) + ADDED_BORDER * wpls + ADDED_BORDER / 32; datad = pixGetData(pixd) + ADDED_BORDER * wpld + ADDED_BORDER / 32; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + ADDED_BORDER * wpls + ADDED_BORDER / 32; flipfhmtgen_low(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* simple and not in-place */ flipfhmtgen_low(datad, w, h, wpld, datas, wpls, index); } return pixd; } /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /* * flipfhmtgen_low() * * A dispatcher to appropriate low-level code for flip hmt ops */ static l_int32 flipfhmtgen_low(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fhmt_1_0(datad, w, h, wpld, datas, wpls); break; case 1: fhmt_1_1(datad, w, h, wpld, datas, wpls); break; case 2: fhmt_1_2(datad, w, h, wpld, datas, wpls); break; case 3: fhmt_1_3(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated hmt routines * *--------------------------------------------------------------------------*/ /* * N.B. in all the low-level routines, the part of the image * that is accessed has been clipped by ADDED_BORDER pixels * on all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fhmt_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls2) >> 3) | (*(sptr + wpls2 - 1) << 29)) & ((*(sptr + wpls3) >> 3) | (*(sptr + wpls3 - 1) << 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)); } } } static void fhmt_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)) & ((*(sptr + wpls2) << 3) | (*(sptr + wpls2 + 1) >> 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)) & ((*(sptr + wpls3) << 3) | (*(sptr + wpls3 + 1) >> 29)); } } } static void fhmt_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 3) | (*(sptr - wpls3 - 1) << 29)) & ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls2) >> 3) | (*(sptr - wpls2 - 1) << 29)) & ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls3) << 3) | (*(sptr - wpls3 + 1) >> 29)) & ((*(sptr - wpls2) << 3) | (*(sptr - wpls2 + 1) >> 29)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)); } } } leptonica-1.86.0/src/fmorphauto.c000066400000000000000000001021561506303110300167000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file fmorphauto.c *
 *
 *    Main function calls:
 *       l_int32             fmorphautogen()
 *       l_int32             fmorphautogen1()
 *       l_int32             fmorphautogen2()
 *
 *    Static helpers:
 *       static SARRAY      *sarrayMakeWplsCode()
 *       static SARRAY      *sarrayMakeInnerLoopDWACode()
 *       static char        *makeBarrelshiftString()
 *
 *
 *    This automatically generates dwa code for erosion and dilation.
 *    Here's a road map for how it all works.
 *
 *    (1) You generate an array (a SELA) of structuring elements (SELs).
 *        This can be done in several ways, including
 *           (a) calling the function selaAddBasic() for
 *               pre-compiled SELs
 *           (b) generating the SELA in code in line
 *           (c) reading in a SELA from file, using selaRead() or
 *               various other formats.
 *
 *    (2) You call fmorphautogen() on this SELA.  This in turn calls
 *        fmorphautogen1() and fmorphautogen2(), which use the text
 *        files morphtemplate1.txt and morphtemplate2.txt, respectively,
 *        for building up the source code.  See the file
 *        prog/fmorphautogen.c for an example of how this is done.
 *        The output is written to files named fmorphgen.*.c
 *        and fmorphgenlow.*.c, where "*" is an integer that you
 *        input to this function.  That integer labels both
 *        the output files, as well as all the functions that
 *        are generated.  That way, using different integers,
 *        you can invoke fmorphautogen() any number of times
 *        to get functions that all have different names so that
 *        they can be linked into one program.
 *
 *    (3) You copy the generated source files back to your src
 *        directory for compilation.  Put their names in the
 *        Makefile, regenerate the allheaders.h prototype file,
 *        and recompile the library.  Look at the Makefile to see how
 *        morphgen.1.c and fmorphgenlow.1.c are included.  These files
 *        provide the single high-level interface for erosion, dilation,
 *        opening and closing, and the lower-level functions to
 *        do the actual work, for all 58 SELs in the SEL array.
 *
 *    (4) In an application, you now use this interface.  Again
 *        for the example files in the library, using integer "1":
 *
 *            PIX   *pixMorphDwa_1(PIX *pixd, PIX, *pixs,
 *                                 l_int32 operation, char *selname);
 *
 *        where the operation is one of {L_MORPH_DILATE, L_MORPH_ERODE.
 *        L_MORPH_OPEN, L_MORPH_CLOSE}, and the selname is one
 *        of the set that were defined as the name field of sels.
 *        This set is listed at the beginning of the file fmorphgen.1.c.
 *
 *        N.B. Although pixFMorphopGen_1() is global, you must NOT
 *        use it, because it assumes that 32 or 64 border pixels
 *        have been added to each side, and it will crash without those
 *        added pixels.
 *
 *        For examples of use, see the file prog/binmorph_reg1.c, which
 *        verifies the consistency of the various implementations by
 *        comparing the dwa result with that of full-image rasterops.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define OUTROOT "fmorphgen" #define TEMPLATE1 "morphtemplate1.txt" #define TEMPLATE2 "morphtemplate2.txt" #define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" #define L_BUF_SIZE 512 static char * makeBarrelshiftString(l_int32 delx, l_int32 dely); static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 index); static SARRAY * sarrayMakeWplsCode(SEL *sel); static char wpldecls[][53] = { "l_int32 wpls2;", "l_int32 wpls2, wpls3;", "l_int32 wpls2, wpls3, wpls4;", "l_int32 wpls5;", "l_int32 wpls5, wpls6;", "l_int32 wpls5, wpls6, wpls7;", "l_int32 wpls5, wpls6, wpls7, wpls8;", "l_int32 wpls9;", "l_int32 wpls9, wpls10;", "l_int32 wpls9, wpls10, wpls11;", "l_int32 wpls9, wpls10, wpls11, wpls12;", "l_int32 wpls13;", "l_int32 wpls13, wpls14;", "l_int32 wpls13, wpls14, wpls15;", "l_int32 wpls13, wpls14, wpls15, wpls16;", "l_int32 wpls17;", "l_int32 wpls17, wpls18;", "l_int32 wpls17, wpls18, wpls19;", "l_int32 wpls17, wpls18, wpls19, wpls20;", "l_int32 wpls21;", "l_int32 wpls21, wpls22;", "l_int32 wpls21, wpls22, wpls23;", "l_int32 wpls21, wpls22, wpls23, wpls24;", "l_int32 wpls25;", "l_int32 wpls25, wpls26;", "l_int32 wpls25, wpls26, wpls27;", "l_int32 wpls25, wpls26, wpls27, wpls28;", "l_int32 wpls29;", "l_int32 wpls29, wpls30;", "l_int32 wpls29, wpls30, wpls31;"}; static char wplgendecls[][30] = { "l_int32 wpls2;", "l_int32 wpls3;", "l_int32 wpls4;", "l_int32 wpls5;", "l_int32 wpls6;", "l_int32 wpls7;", "l_int32 wpls8;", "l_int32 wpls9;", "l_int32 wpls10;", "l_int32 wpls11;", "l_int32 wpls12;", "l_int32 wpls13;", "l_int32 wpls14;", "l_int32 wpls15;", "l_int32 wpls16;", "l_int32 wpls17;", "l_int32 wpls18;", "l_int32 wpls19;", "l_int32 wpls20;", "l_int32 wpls21;", "l_int32 wpls22;", "l_int32 wpls23;", "l_int32 wpls24;", "l_int32 wpls25;", "l_int32 wpls26;", "l_int32 wpls27;", "l_int32 wpls28;", "l_int32 wpls29;", "l_int32 wpls30;", "l_int32 wpls31;"}; static char wpldefs[][25] = { " wpls2 = 2 * wpls;", " wpls3 = 3 * wpls;", " wpls4 = 4 * wpls;", " wpls5 = 5 * wpls;", " wpls6 = 6 * wpls;", " wpls7 = 7 * wpls;", " wpls8 = 8 * wpls;", " wpls9 = 9 * wpls;", " wpls10 = 10 * wpls;", " wpls11 = 11 * wpls;", " wpls12 = 12 * wpls;", " wpls13 = 13 * wpls;", " wpls14 = 14 * wpls;", " wpls15 = 15 * wpls;", " wpls16 = 16 * wpls;", " wpls17 = 17 * wpls;", " wpls18 = 18 * wpls;", " wpls19 = 19 * wpls;", " wpls20 = 20 * wpls;", " wpls21 = 21 * wpls;", " wpls22 = 22 * wpls;", " wpls23 = 23 * wpls;", " wpls24 = 24 * wpls;", " wpls25 = 25 * wpls;", " wpls26 = 26 * wpls;", " wpls27 = 27 * wpls;", " wpls28 = 28 * wpls;", " wpls29 = 29 * wpls;", " wpls30 = 30 * wpls;", " wpls31 = 31 * wpls;"}; static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", "+ wpls29", "+ wpls30", "+ wpls31"}; static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", "- wpls5", "- wpls6", "- wpls7", "- wpls8", "- wpls9", "- wpls10", "- wpls11", "- wpls12", "- wpls13", "- wpls14", "- wpls15", "- wpls16", "- wpls17", "- wpls18", "- wpls19", "- wpls20", "- wpls21", "- wpls22", "- wpls23", "- wpls24", "- wpls25", "- wpls26", "- wpls27", "- wpls28", "- wpls29", "- wpls30", "- wpls31"}; /*! * \brief fmorphautogen() * * \param[in] sela * \param[in] fileindex * \param[in] filename [optional]; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This function generates all the code for implementing
 *          dwa morphological operations using all the sels in the sela.
 *      (2) See fmorphautogen1() and fmorphautogen2() for details.
 * 
*/ l_ok fmorphautogen(SELA *sela, l_int32 fileindex, const char *filename) { l_int32 ret1, ret2; if (!sela) return ERROR_INT("sela not defined", __func__, 1); ret1 = fmorphautogen1(sela, fileindex, filename); ret2 = fmorphautogen2(sela, fileindex, filename); if (ret1 || ret2) return ERROR_INT("code generation problem", __func__, 1); return 0; } /*! * \brief fmorphautogen1() * * \param[in] sela * \param[in] fileindex * \param[in] filename [optional]; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This function uses morphtemplate1.txt to create a
 *          top-level file that contains two functions.  These
 *          functions will carry out dilation, erosion,
 *          opening or closing for any of the sels in the input sela.
 *      (2) The fileindex parameter is inserted into the output
 *          filename, as described below.
 *      (3) If filename == NULL, the output file is fmorphgen.[n].c,
 *          where [n] is equal to the %fileindex parameter.
 *      (4) If filename != NULL, the output file is [%filename].[n].c.
 * 
*/ l_ok fmorphautogen1(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr; char *str_proto1, *str_proto2, *str_proto3; char *str_doc1, *str_doc2, *str_doc3, *str_doc4; char *str_def1, *str_def2, *str_proc1, *str_proc2; char *str_dwa1, *str_low_dt, *str_low_ds, *str_low_ts; char *str_low_tsp1, *str_low_dtp1; char bigbuf[L_BUF_SIZE]; l_int32 i, nsels, nbytes, actstart, end, newstart; size_t size; SARRAY *sa1, *sa2, *sa3; if (!sela) return ERROR_INT("sela not defined", __func__, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", __func__, 1); /* Make array of textlines from morphtemplate1.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) return ERROR_INT("filestr not made", __func__, 1); sa2 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); if (!sa2) return ERROR_INT("sa2 not made", __func__, 1); /* Make array of sel names */ sa1 = selaGetSelnames(sela); /* Make strings containing function call names */ sprintf(bigbuf, "PIX *pixMorphDwa_%d(PIX *pixd, PIX *pixs, " "l_int32 operation, char *selname);", fileindex); str_proto1 = stringNew(bigbuf); sprintf(bigbuf, "PIX *pixFMorphopGen_%d(PIX *pixd, PIX *pixs, " "l_int32 operation, char *selname);", fileindex); str_proto2 = stringNew(bigbuf); sprintf(bigbuf, "l_int32 fmorphopgen_low_%d(l_uint32 *datad, l_int32 w,\n" " l_int32 h, l_int32 wpld,\n" " l_uint32 *datas, l_int32 wpls,\n" " l_int32 index);", fileindex); str_proto3 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixMorphDwa_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixFMorphopGen_%d()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * \\brief pixMorphDwa_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, " * \\brief pixFMorphopGen_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "pixMorphDwa_%d(PIX *pixd,", fileindex); str_def1 = stringNew(bigbuf); sprintf(bigbuf, "pixFMorphopGen_%d(PIX *pixd,", fileindex); str_def2 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixMorphDwa_%d\");", fileindex); str_proc1 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixFMorphopGen_%d\");", fileindex); str_proc2 = stringNew(bigbuf); sprintf(bigbuf, " pixt2 = pixFMorphopGen_%d(NULL, pixt1, operation, selname);", fileindex); str_dwa1 = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index);", fileindex); str_low_dt = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datas, wpls, index);", fileindex); str_low_ds = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index+1);", fileindex); str_low_tsp1 = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index);", fileindex); str_low_ts = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index+1);", fileindex); str_low_dtp1 = stringNew(bigbuf); /* Make the output sa */ sa3 = sarrayCreate(0); /* Copyright notice and info header */ sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa3, str_doc1, L_INSERT); sarrayAddString(sa3, str_doc2, L_INSERT); /* Add '#include's */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function prototypes */ sarrayAddString(sa3, str_proto1, L_INSERT); sarrayAddString(sa3, str_proto2, L_INSERT); sarrayAddString(sa3, str_proto3, L_INSERT); /* Add static globals */ sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); sarrayAddString(sa3, bigbuf, L_COPY); sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); sarrayAddString(sa3, bigbuf, L_COPY); for (i = 0; i < nsels - 1; i++) { sprintf(bigbuf, " \"%s\",", sarrayGetString(sa1, i, L_NOCOPY)); sarrayAddString(sa3, bigbuf, L_COPY); } sprintf(bigbuf, " \"%s\"};", sarrayGetString(sa1, i, L_NOCOPY)); sarrayAddString(sa3, bigbuf, L_COPY); /* Start pixMorphDwa_*() function description */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_doc3, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixMorphDwa_*() function definition */ sarrayAddString(sa3, str_def1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_dwa1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Start pixFMorphopGen_*() function description */ sarrayAddString(sa3, str_doc4, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixFMorphopGen_*() function definition */ sarrayAddString(sa3, str_def2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_COPY); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ds, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_tsp1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ts, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dtp1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Output to file */ filestr = sarrayToString(sa3, 1); nbytes = strlen(filestr); if (filename) snprintf(bigbuf, L_BUF_SIZE, "%s.%d.c", filename, fileindex); else sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); LEPT_FREE(filestr); return 0; } /* * fmorphautogen2() * * Input: sela * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function uses morphtemplate2.txt to create a * low-level file that contains the low-level functions for * implementing dilation and erosion for every sel * in the input sela. * (2) The fileindex parameter is inserted into the output * filename, as described below. * (3) If filename == NULL, the output file is fmorphgenlow.[n].c, * where [n] is equal to the 'fileindex' parameter. * (4) If filename != NULL, the output file is [filename]low.[n].c. */ l_int32 fmorphautogen2(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr, *linestr, *fname; char *str_doc1, *str_doc2, *str_doc3, *str_doc4, *str_def1; char bigbuf[L_BUF_SIZE]; char breakstring[] = " break;"; char staticstring[] = "static void"; l_int32 i, nsels, nbytes, actstart, end, newstart; l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; size_t size; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; SEL *sel; if (!sela) return ERROR_INT("sela not defined", __func__, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", __func__, 1); /* Make the array of textlines from morphtemplate2.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) return ERROR_INT("filestr not made", __func__, 1); sa1 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); if (!sa1) return ERROR_INT("sa1 not made", __func__, 1); /* Make the array of static function names */ if ((sa2 = sarrayCreate(2 * nsels)) == NULL) { sarrayDestroy(&sa1); return ERROR_INT("sa2 not made", __func__, 1); } for (i = 0; i < nsels; i++) { sprintf(bigbuf, "fdilate_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, L_COPY); sprintf(bigbuf, "ferode_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, L_COPY); } /* Make the static prototype strings */ sa3 = sarrayCreate(2 * nsels); /* should be ok */ for (i = 0; i < 2 * nsels; i++) { fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); sarrayAddString(sa3, bigbuf, L_COPY); } /* Make strings containing function names */ sprintf(bigbuf, " * l_int32 fmorphopgen_low_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * void fdilate_%d_*()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * void ferode_%d_*()", fileindex); str_doc3 = stringNew(bigbuf); /* Output to this sa */ sa4 = sarrayCreate(0); /* Copyright notice and info header */ sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa4, str_doc1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc2, L_INSERT); sarrayAddString(sa4, str_doc3, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert static protos */ for (i = 0; i < 2 * nsels; i++) { if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) { sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); return ERROR_INT("linestr not retrieved", __func__, 1); } sarrayAddString(sa4, linestr, L_INSERT); } /* More strings with function names */ sprintf(bigbuf, " * fmorphopgen_low_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "fmorphopgen_low_%d(l_uint32 *datad,", fileindex); str_def1 = stringNew(bigbuf); /* Insert function header */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc4, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_def1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Generate and insert the dispatcher code */ for (i = 0; i < 2 * nsels; i++) { sprintf(bigbuf, " case %d:", i); sarrayAddString(sa4, bigbuf, L_COPY); sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", sarrayGetString(sa2, i, L_NOCOPY)); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAddString(sa4, breakstring, L_COPY); } /* Finish the dispatcher and introduce the low-level code */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Get the range for the args common to all functions */ sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); /* Get the range for the loop code common to all functions */ sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); /* Get the range for the ending code common to all functions */ sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); /* Do all the static functions */ for (i = 0; i < 2 * nsels; i++) { /* Generate the function header and add the common args */ sarrayAddString(sa4, staticstring, L_COPY); fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "%s(l_uint32 *datad,", fname); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAppendRange(sa4, sa1, argstart, argend); /* Declare and define wplsN args, as necessary */ if ((sel = selaGetSel(sela, i/2)) == NULL) { sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); return ERROR_INT("sel not returned", __func__, 1); } sa5 = sarrayMakeWplsCode(sel); sarrayJoin(sa4, sa5); sarrayDestroy(&sa5); /* Add the function loop code */ sarrayAppendRange(sa4, sa1, loopstart, loopend); /* Insert barrel-op code for *dptr */ sa6 = sarrayMakeInnerLoopDWACode(sel, i); sarrayJoin(sa4, sa6); sarrayDestroy(&sa6); /* Finish the function code */ sarrayAppendRange(sa4, sa1, finalstart, finalend); } /* Output to file */ filestr = sarrayToString(sa4, 1); nbytes = strlen(filestr); if (filename) snprintf(bigbuf, L_BUF_SIZE, "%slow.%d.c", filename, fileindex); else sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); LEPT_FREE(filestr); return 0; } /*--------------------------------------------------------------------------* * Helper code for sel * *--------------------------------------------------------------------------*/ /*! * \brief sarrayMakeWplsCode() */ static SARRAY * sarrayMakeWplsCode(SEL *sel) { char emptystring[] = ""; l_int32 i, j, ymax, dely, allvshifts; l_int32 vshift[32]; SARRAY *sa; if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", __func__, NULL); for (i = 0; i < 32; i++) vshift[i] = 0; ymax = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) { dely = L_ABS(i - sel->cy); if (dely < 32) vshift[dely] = 1; ymax = L_MAX(ymax, dely); } } } if (ymax > 31) { L_WARNING("ymax > 31; truncating to 31\n", __func__); ymax = 31; } /* Test if this is a vertical brick */ allvshifts = TRUE; for (i = 0; i < ymax; i++) { if (vshift[i] == 0) { allvshifts = FALSE; break; } } sa = sarrayCreate(0); /* Add declarations */ if (allvshifts == TRUE) { /* packs them as well as possible */ if (ymax > 4) sarrayAddString(sa, wpldecls[2], L_COPY); if (ymax > 8) sarrayAddString(sa, wpldecls[6], L_COPY); if (ymax > 12) sarrayAddString(sa, wpldecls[10], L_COPY); if (ymax > 16) sarrayAddString(sa, wpldecls[14], L_COPY); if (ymax > 20) sarrayAddString(sa, wpldecls[18], L_COPY); if (ymax > 24) sarrayAddString(sa, wpldecls[22], L_COPY); if (ymax > 28) sarrayAddString(sa, wpldecls[26], L_COPY); if (ymax > 1) sarrayAddString(sa, wpldecls[ymax - 2], L_COPY); } else { /* puts them one/line */ for (i = 2; i <= ymax; i++) { if (vshift[i]) sarrayAddString(sa, wplgendecls[i - 2], L_COPY); } } sarrayAddString(sa, emptystring, L_COPY); /* Add definitions */ for (i = 2; i <= ymax; i++) { if (vshift[i]) sarrayAddString(sa, wpldefs[i - 2], L_COPY); } return sa; } /*! * \brief sarrayMakeInnerLoopDWACode() */ static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 index) { char *tstr, *string; char logicalor[] = "|"; char logicaland[] = "&"; char bigbuf[L_BUF_SIZE]; l_int32 i, j, optype, count, nfound, delx, dely; SARRAY *sa; if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", __func__, NULL); if (index % 2 == 0) { optype = L_MORPH_DILATE; tstr = logicalor; } else { optype = L_MORPH_ERODE; tstr = logicaland; } count = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) count++; } } sa = sarrayCreate(0); if (count == 0) { L_WARNING("no hits in Sel %d\n", __func__, index); return sa; /* no code inside! */ } nfound = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) { nfound++; if (optype == L_MORPH_DILATE) { dely = sel->cy - i; delx = sel->cx - j; } else { /* optype == L_MORPH_ERODE */ dely = i - sel->cy; delx = j - sel->cx; } if ((string = makeBarrelshiftString(delx, dely)) == NULL) { L_WARNING("barrel shift string not made\n", __func__); continue; } if (count == 1) /* just one item */ sprintf(bigbuf, " *dptr = %s;", string); else if (nfound == 1) sprintf(bigbuf, " *dptr = %s %s", string, tstr); else if (nfound < count) sprintf(bigbuf, " %s %s", string, tstr); else /* nfound == count */ sprintf(bigbuf, " %s;", string); sarrayAddString(sa, bigbuf, L_COPY); LEPT_FREE(string); } } } return sa; } /*! * \brief makeBarrelshiftString() */ static char * makeBarrelshiftString(l_int32 delx, /* j - cx */ l_int32 dely) /* i - cy */ { l_int32 absx, absy; char bigbuf[L_BUF_SIZE]; if (delx < -31 || delx > 31) return (char *)ERROR_PTR("delx out of bounds", __func__, NULL); if (dely < -31 || dely > 31) return (char *)ERROR_PTR("dely out of bounds", __func__, NULL); absx = L_ABS(delx); absy = L_ABS(dely); if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); return stringNew(bigbuf); } leptonica-1.86.0/src/fmorphgen.1.c000066400000000000000000000237671506303110300166520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_1() * PIX *pixFMorphopGen_1() */ #include #include "allheaders.h" PIX *pixMorphDwa_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 58; static char SEL_NAMES[][80] = { "sel_2h", "sel_3h", "sel_4h", "sel_5h", "sel_6h", "sel_7h", "sel_8h", "sel_9h", "sel_10h", "sel_11h", "sel_12h", "sel_13h", "sel_14h", "sel_15h", "sel_20h", "sel_21h", "sel_25h", "sel_30h", "sel_31h", "sel_35h", "sel_40h", "sel_41h", "sel_45h", "sel_50h", "sel_51h", "sel_2v", "sel_3v", "sel_4v", "sel_5v", "sel_6v", "sel_7v", "sel_8v", "sel_9v", "sel_10v", "sel_11v", "sel_12v", "sel_13v", "sel_14v", "sel_15v", "sel_20v", "sel_21v", "sel_25v", "sel_30v", "sel_31v", "sel_35v", "sel_40v", "sel_41v", "sel_45v", "sel_50v", "sel_51v", "sel_2", "sel_3", "sel_4", "sel_5", "sel_2dp", "sel_2dm", "sel_5dp", "sel_5dm"}; /*! * \brief pixMorphDwa_1() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a border, calls the appropriate
 *          pixFMorphopGen_*(), and removes the border.
 *          See the notes for that function.
 *      (2) The size of the border depends on the operation
 *          and the boundary conditions.
 * 
*/ PIX * pixMorphDwa_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_1(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * \brief pixFMorphopGen_1() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa operation, and the Sels must be limited in
 *          size to not more than 31 pixels about the origin.
 *      (2) A border of appropriate size (32 pixels, or 64 pixels
 *          for safe closing with asymmetric b.c.) must be added before
 *          this function is called.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 *      (4) The closing operation is safe; no pixels can be removed
 *          near the boundary.
 * 
*/ PIX * pixFMorphopGen_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_1(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.86.0/src/fmorphgenlow.1.c000066400000000000000000006156221506303110300173710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_1() * * Static Low-level: * void fdilate_1_*() * void ferode_1_*() */ #include "allheaders.h" static void fdilate_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_1() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_1_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_1_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_1_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_1_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_1_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_1_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_1_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_1_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_1_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_1_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_1_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_1_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_1_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_1_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_1_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_1_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_1_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_1_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_1_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_1_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_1_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_1_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_1_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_1_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_1_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_1_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_1_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_1_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_1_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_1_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_1_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_1_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_1_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_1_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_1_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_1_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_1_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_1_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_1_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_1_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_1_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_1_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_1_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_1_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_1_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_1_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_1_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_1_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_1_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_1_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_1_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_1_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_1_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_1_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_1_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_1_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_1_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_1_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_1_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_1_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_1_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_1_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_1_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_1_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_1_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_1_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_1_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_1_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_1_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_1_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_1_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_1_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_1_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_1_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_1_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_1_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_1_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_1_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_1_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_1_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_1_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_1_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_1_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_1_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_1_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_1_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_1_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_1_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_1_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_1_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_1_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_1_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_1_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_1_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_1_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_1_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_1_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_1_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_1_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_1_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_1_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_1_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_1_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_1_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_1_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_1_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_1_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_1_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_1_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_1_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_1_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_1_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_1_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_1_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_1_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_1_57(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_1_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_1_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_1_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_1_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_1_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_1_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_1_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_1_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_1_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_1_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_1_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_1_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_1_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_1_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_1_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_1_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_1_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_1_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_1_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_1_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_1_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_1_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_1_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_1_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_1_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_1_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_1_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_1_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_1_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_1_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_1_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr); } } } static void ferode_1_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr); } } } static void fdilate_1_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_1_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_1_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_1_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_1_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_1_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_1_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_1_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_1_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_1_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_1_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_1_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_1_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_1_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_1_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_1_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_1_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_1_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_1_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_1_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_1_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_1_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_1_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_1_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_1_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_1_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_1_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_1_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_1_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_1_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_1_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_1_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_1_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_1_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_1_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_1_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_1_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_1_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_1_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_1_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_1_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_1_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_1_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_1_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_1_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_1_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_1_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_1_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_1_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_1_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_1_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | (*(sptr + wpls2)) | ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | (*(sptr + wpls2)) | ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) | ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) | ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) | (*(sptr - wpls2)) | ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) | ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); } } } static void ferode_1_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } static void fdilate_1_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | (*(sptr - wpls)); } } } static void ferode_1_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & (*(sptr + wpls)); } } } static void fdilate_1_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | (*sptr) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)); } } } static void ferode_1_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & (*sptr) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)); } } } static void fdilate_1_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*sptr) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); } } } static void ferode_1_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*sptr) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } leptonica-1.86.0/src/fpix1.c000066400000000000000000001415461506303110300155510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file fpix1.c *
 *
 *    ---------------------------------------------------
 *    This file has these FPix, FPixa and DPix utilities:
 *         - creation and destruction
 *         - accessors
 *         - serialization and deserialization
 *    ---------------------------------------------------
 *
 *    FPix Create/copy/destroy
 *          FPIX          *fpixCreate()
 *          FPIX          *fpixCreateTemplate()
 *          FPIX          *fpixClone()
 *          FPIX          *fpixCopy()
 *          void           fpixDestroy()
 *
 *    FPix accessors
 *          l_int32        fpixGetDimensions()
 *          l_int32        fpixSetDimensions()
 *          l_int32        fpixGetWpl()
 *          l_int32        fpixSetWpl()
 *          l_int32        fpixGetResolution()
 *          l_int32        fpixSetResolution()
 *          l_int32        fpixCopyResolution()
 *          l_float32     *fpixGetData()
 *          l_int32        fpixSetData()
 *          l_int32        fpixGetPixel()
 *          l_int32        fpixSetPixel()
 *
 *    FPixa Create/copy/destroy
 *          FPIXA         *fpixaCreate()
 *          FPIXA         *fpixaCopy()
 *          void           fpixaDestroy()
 *
 *    FPixa addition
 *          l_int32        fpixaAddFPix()
 *          static l_int32 fpixaExtendArray()
 *          static l_int32 fpixaExtendArrayToSize()
 *
 *    FPixa accessors
 *          l_int32        fpixaGetCount()
 *          FPIX          *fpixaGetFPix()
 *          l_int32        fpixaGetFPixDimensions()
 *          l_float32     *fpixaGetData()
 *          l_int32        fpixaGetPixel()
 *          l_int32        fpixaSetPixel()
 *
 *    DPix Create/copy/destroy
 *          DPIX          *dpixCreate()
 *          DPIX          *dpixCreateTemplate()
 *          DPIX          *dpixClone()
 *          DPIX          *dpixCopy()
 *          void           dpixDestroy()
 *
 *    DPix accessors
 *          l_int32        dpixGetDimensions()
 *          l_int32        dpixSetDimensions()
 *          l_int32        dpixGetWpl()
 *          l_int32        dpixSetWpl()
 *          l_int32        dpixGetResolution()
 *          l_int32        dpixSetResolution()
 *          l_int32        dpixCopyResolution()
 *          l_float64     *dpixGetData()
 *          l_int32        dpixSetData()
 *          l_int32        dpixGetPixel()
 *          l_int32        dpixSetPixel()
 *
 *    FPix serialized I/O
 *          FPIX          *fpixRead()
 *          FPIX          *fpixReadStream()
 *          FPIX          *fpixReadMem()
 *          l_int32        fpixWrite()
 *          l_int32        fpixWriteStream()
 *          l_int32        fpixWriteMem()
 *          FPIX          *fpixEndianByteSwap()
 *
 *    DPix serialized I/O
 *          DPIX          *dpixRead()
 *          DPIX          *dpixReadStream()
 *          DPIX          *dpixReadMem()
 *          l_int32        dpixWrite()
 *          l_int32        dpixWriteStream()
 *          l_int32        dpixWriteMem()
 *          DPIX          *dpixEndianByteSwap()
 *
 *    Print FPix (subsampled, for debugging)
 *          l_int32        fpixPrintStream()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* Bounds on array sizes */ static const size_t MaxPtrArraySize = 100000; static const size_t InitialPtrArraySize = 20; /*!< n'importe quoi */ /* Static functions */ static l_int32 fpixaExtendArray(FPIXA *fpixa); static l_int32 fpixaExtendArrayToSize(FPIXA *fpixa, l_int32 size); /*--------------------------------------------------------------------* * FPix Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * \brief fpixCreate() * * \param[in] width, height * \return fpixd with data allocated and initialized to 0, or NULL on error * *
 * Notes:
 *      (1) Makes a FPix of specified size, with the data array
 *          allocated and initialized to 0.
 *      (2) The number of pixels must be less than 2^29.
 * 
*/ FPIX * fpixCreate(l_int32 width, l_int32 height) { l_float32 *data; l_uint64 npix64; FPIX *fpixd; if (width <= 0) return (FPIX *)ERROR_PTR("width must be > 0", __func__, NULL); if (height <= 0) return (FPIX *)ERROR_PTR("height must be > 0", __func__, NULL); /* Avoid overflow in malloc arg, malicious or otherwise */ npix64 = (l_uint64)width * (l_uint64)height; /* # of 4-byte pixels */ if (npix64 >= (1LL << 29)) { L_ERROR("requested w = %d, h = %d\n", __func__, width, height); return (FPIX *)ERROR_PTR("requested bytes >= 2^31", __func__, NULL); } fpixd = (FPIX *)LEPT_CALLOC(1, sizeof(FPIX)); fpixSetDimensions(fpixd, width, height); fpixSetWpl(fpixd, width); /* 4-byte words */ fpixd->refcount = 1; data = (l_float32 *)LEPT_CALLOC((size_t)width * height, sizeof(l_float32)); if (!data) { fpixDestroy(&fpixd); return (FPIX *)ERROR_PTR("calloc fail for data", __func__, NULL); } fpixSetData(fpixd, data); return fpixd; } /*! * \brief fpixCreateTemplate() * * \param[in] fpixs * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) Makes a FPix of the same size as the input FPix, with the
 *          data array allocated and initialized to 0.
 *      (2) Copies the resolution.
 * 
*/ FPIX * fpixCreateTemplate(FPIX *fpixs) { l_int32 w, h; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); if ((fpixd = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); fpixCopyResolution(fpixd, fpixs); return fpixd; } /*! * \brief fpixClone() * * \param[in] fpix * \return same fpix ptr, or NULL on error * *
 * Notes:
 *      (1) See pixClone() for definition and usage.
 * 
*/ FPIX * fpixClone(FPIX *fpix) { if (!fpix) return (FPIX *)ERROR_PTR("fpix not defined", __func__, NULL); ++fpix->refcount; return fpix; } /*! * \brief fpixCopy() * * \param[in] fpixs * \return fpixd, or NULL on error */ FPIX * fpixCopy(FPIX *fpixs) { l_int32 w, h, bytes; l_float32 *datas, *datad; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); /* Total bytes in image data */ fpixGetDimensions(fpixs, &w, &h); bytes = 4 * w * h; if ((fpixd = fpixCreateTemplate(fpixs)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); memcpy(datad, datas, bytes); return fpixd; } /*! * \brief fpixDestroy() * * \param[in,out] pfpix will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the fpix.
 *      (2) Always nulls the input ptr.
 * 
*/ void fpixDestroy(FPIX **pfpix) { l_float32 *data; FPIX *fpix; if (!pfpix) { L_WARNING("ptr address is null!\n", __func__); return; } if ((fpix = *pfpix) == NULL) return; /* Decrement the ref count. If it is 0, destroy the fpix. */ if (--fpix->refcount == 0) { if ((data = fpixGetData(fpix)) != NULL) LEPT_FREE(data); LEPT_FREE(fpix); } *pfpix = NULL; } /*--------------------------------------------------------------------* * FPix Accessors * *--------------------------------------------------------------------*/ /*! * \brief fpixGetDimensions() * * \param[in] fpix * \param[out] pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph) { if (!pw && !ph) return ERROR_INT("no return val requested", __func__, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if (pw) *pw = fpix->w; if (ph) *ph = fpix->h; return 0; } /*! * \brief fpixSetDimensions() * * \param[in] fpix * \param[in] w, h * \return 0 if OK, 1 on error */ l_ok fpixSetDimensions(FPIX *fpix, l_int32 w, l_int32 h) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpix->w = w; fpix->h = h; return 0; } /*! * \brief fpixGetWpl() * * \param[in] fpix * \return wpl, or 0 on error */ l_int32 fpixGetWpl(FPIX *fpix) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 0); return fpix->wpl; } /*! * \brief fpixSetWpl() * * \param[in] fpix * \param[in] wpl * \return 0 if OK, 1 on error */ l_ok fpixSetWpl(FPIX *fpix, l_int32 wpl) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpix->wpl = wpl; return 0; } /*! * \brief fpixGetResolution() * * \param[in] fpix * \param[out] pxres, pyres [optional] x and y resolution * \return 0 if OK, 1 on error */ l_ok fpixGetResolution(FPIX *fpix, l_int32 *pxres, l_int32 *pyres) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if (pxres) *pxres = fpix->xres; if (pyres) *pyres = fpix->yres; return 0; } /*! * \brief fpixSetResolution() * * \param[in] fpix * \param[in] xres, yres x and y resolution * \return 0 if OK, 1 on error */ l_ok fpixSetResolution(FPIX *fpix, l_int32 xres, l_int32 yres) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpix->xres = xres; fpix->yres = yres; return 0; } /*! * \brief fpixCopyResolution() * * \param[in] fpixd, fpixs * \return 0 if OK, 1 on error */ l_ok fpixCopyResolution(FPIX *fpixd, FPIX *fpixs) { l_int32 xres, yres; if (!fpixs || !fpixd) return ERROR_INT("fpixs and fpixd not both defined", __func__, 1); fpixGetResolution(fpixs, &xres, &yres); fpixSetResolution(fpixd, xres, yres); return 0; } /*! * \brief fpixGetData() * * \param[in] fpix * \return ptr to fpix data, or NULL on error */ l_float32 * fpixGetData(FPIX *fpix) { if (!fpix) return (l_float32 *)ERROR_PTR("fpix not defined", __func__, NULL); return fpix->data; } /*! * \brief fpixSetData() * * \param[in] fpix * \param[in] data * \return 0 if OK, 1 on error */ l_ok fpixSetData(FPIX *fpix, l_float32 *data) { if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpix->data = data; return 0; } /*! * \brief fpixGetPixel() * * \param[in] fpix * \param[in] x,y pixel coords * \param[out] pval pixel value * \return 0 if OK; 1 or 2 on error * * Notes: * (1) If the point is outside the image, this returns an error (2), * with 0.0 in %pval. To avoid spamming output, it fails silently. */ l_ok fpixGetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 w, h; if (!pval) return ERROR_INT("pval not defined", __func__, 1); *pval = 0.0; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpixGetDimensions(fpix, &w, &h); if (x < 0 || x >= w || y < 0 || y >= h) return 2; *pval = *(fpix->data + y * w + x); return 0; } /*! * \brief fpixSetPixel() * * \param[in] fpix * \param[in] x,y pixel coords * \param[in] val pixel value * \return 0 if OK; 1 or 2 on error * * Notes: * (1) If the point is outside the image, this returns an error (2), * with 0.0 in %pval. To avoid spamming output, it fails silently. */ l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val) { l_int32 w, h; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpixGetDimensions(fpix, &w, &h); if (x < 0 || x >= w || y < 0 || y >= h) return 2; *(fpix->data + y * w + x) = val; return 0; } /*--------------------------------------------------------------------* * FPixa Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * \brief fpixaCreate() * * \param[in] n initial number of ptrs * \return fpixa, or NULL on error */ FPIXA * fpixaCreate(l_int32 n) { FPIXA *fpixa; if (n <= 0 || n > MaxPtrArraySize) n = InitialPtrArraySize; fpixa = (FPIXA *)LEPT_CALLOC(1, sizeof(FPIXA)); fpixa->n = 0; fpixa->nalloc = n; fpixa->refcount = 1; fpixa->fpix = (FPIX **)LEPT_CALLOC(n, sizeof(FPIX *)); return fpixa; } /*! * \brief fpixaCopy() * * \param[in] fpixa * \param[in] copyflag L_COPY, L_CLODE or L_COPY_CLONE * \return new fpixa, or NULL on error * *
 * Notes:
 *      copyflag may be one of
 *        ~ L_COPY makes a new fpixa and copies each fpix
 *        ~ L_CLONE gives a new ref-counted handle to the input fpixa
 *        ~ L_COPY_CLONE makes a new fpixa with clones of all fpix
 * 
*/ FPIXA * fpixaCopy(FPIXA *fpixa, l_int32 copyflag) { l_int32 i; FPIX *fpixc; FPIXA *fpixac; if (!fpixa) return (FPIXA *)ERROR_PTR("fpixa not defined", __func__, NULL); if (copyflag == L_CLONE) { ++fpixa->refcount; return fpixa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (FPIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if ((fpixac = fpixaCreate(fpixa->n)) == NULL) return (FPIXA *)ERROR_PTR("fpixac not made", __func__, NULL); for (i = 0; i < fpixa->n; i++) { if (copyflag == L_COPY) fpixc = fpixaGetFPix(fpixa, i, L_COPY); else /* copy-clone */ fpixc = fpixaGetFPix(fpixa, i, L_CLONE); fpixaAddFPix(fpixac, fpixc, L_INSERT); } return fpixac; } /*! * \brief fpixaDestroy() * * \param[in,out] pfpixa will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the fpixa.
 *      (2) Always nulls the input ptr.
 * 
*/ void fpixaDestroy(FPIXA **pfpixa) { l_int32 i; FPIXA *fpixa; if (pfpixa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((fpixa = *pfpixa) == NULL) return; /* Decrement the refcount. If it is 0, destroy the pixa. */ if (--fpixa->refcount == 0) { for (i = 0; i < fpixa->n; i++) fpixDestroy(&fpixa->fpix[i]); LEPT_FREE(fpixa->fpix); LEPT_FREE(fpixa); } *pfpixa = NULL; } /*--------------------------------------------------------------------* * FPixa addition * *--------------------------------------------------------------------*/ /*! * \brief fpixaAddFPix() * * \param[in] fpixa * \param[in] fpix to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK; 1 on error */ l_ok fpixaAddFPix(FPIXA *fpixa, FPIX *fpix, l_int32 copyflag) { l_int32 n; FPIX *fpixc; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if (copyflag == L_INSERT) fpixc = fpix; else if (copyflag == L_COPY) fpixc = fpixCopy(fpix); else if (copyflag == L_CLONE) fpixc = fpixClone(fpix); else return ERROR_INT("invalid copyflag", __func__, 1); if (!fpixc) return ERROR_INT("fpixc not made", __func__, 1); n = fpixaGetCount(fpixa); if (n >= fpixa->nalloc) { if (fpixaExtendArray(fpixa)) { if (copyflag != L_INSERT) fpixDestroy(&fpixc); return ERROR_INT("extension failed", __func__, 1); } } fpixa->fpix[n] = fpixc; fpixa->n++; return 0; } /*! * \brief fpixaExtendArray() * * \param[in] fpixa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Doubles the size of the fpixa ptr array.
 *      (2) The max number of fpix ptrs is 100000.
 * 
*/ static l_int32 fpixaExtendArray(FPIXA *fpixa) { if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); return fpixaExtendArrayToSize(fpixa, 2 * fpixa->nalloc); } /*! * \brief fpixaExtendArrayToSize() * * \param[in] fpixa * \param[in] size new ptr array size * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs new fpix ptr array to %size.
 *      (2) The max number of fpix ptrs is 100K.
 * 
*/ static l_int32 fpixaExtendArrayToSize(FPIXA *fpixa, l_int32 size) { size_t oldsize, newsize; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); if (fpixa->nalloc > MaxPtrArraySize) /* belt & suspenders */ return ERROR_INT("fpixa has too many ptrs", __func__, 1); if (size > MaxPtrArraySize) return ERROR_INT("size > 100K ptrs; too large", __func__, 1); if (size <= fpixa->nalloc) { L_INFO("size too small; no extension\n", __func__); return 0; } oldsize = fpixa->nalloc * sizeof(FPIX *); newsize = size * sizeof(FPIX *); if ((fpixa->fpix = (FPIX **)reallocNew((void **)&fpixa->fpix, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); fpixa->nalloc = size; return 0; } /*--------------------------------------------------------------------* * FPixa accessors * *--------------------------------------------------------------------*/ /*! * \brief fpixaGetCount() * * \param[in] fpixa * \return count, or 0 if no pixa */ l_int32 fpixaGetCount(FPIXA *fpixa) { if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 0); return fpixa->n; } /*! * \brief fpixaGetFPix() * * \param[in] fpixa * \param[in] index to the index-th fpix * \param[in] accesstype L_COPY or L_CLONE * \return fpix, or NULL on error */ FPIX * fpixaGetFPix(FPIXA *fpixa, l_int32 index, l_int32 accesstype) { if (!fpixa) return (FPIX *)ERROR_PTR("fpixa not defined", __func__, NULL); if (index < 0 || index >= fpixa->n) return (FPIX *)ERROR_PTR("index not valid", __func__, NULL); if (accesstype == L_COPY) return fpixCopy(fpixa->fpix[index]); else if (accesstype == L_CLONE) return fpixClone(fpixa->fpix[index]); else return (FPIX *)ERROR_PTR("invalid accesstype", __func__, NULL); } /*! * \brief fpixaGetFPixDimensions() * * \param[in] fpixa * \param[in] index to the index-th box * \param[out] pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok fpixaGetFPixDimensions(FPIXA *fpixa, l_int32 index, l_int32 *pw, l_int32 *ph) { FPIX *fpix; if (!pw && !ph) return ERROR_INT("no return val requested", __func__, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); if (index < 0 || index >= fpixa->n) return ERROR_INT("index not valid", __func__, 1); if ((fpix = fpixaGetFPix(fpixa, index, L_CLONE)) == NULL) return ERROR_INT("fpix not found!", __func__, 1); fpixGetDimensions(fpix, pw, ph); fpixDestroy(&fpix); return 0; } /*! * \brief fpixaGetData() * * \param[in] fpixa * \param[in] index into fpixa array * \return data not a copy, or NULL on error */ l_float32 * fpixaGetData(FPIXA *fpixa, l_int32 index) { l_int32 n; l_float32 *data; FPIX *fpix; if (!fpixa) return (l_float32 *)ERROR_PTR("fpixa not defined", __func__, NULL); n = fpixaGetCount(fpixa); if (index < 0 || index >= n) return (l_float32 *)ERROR_PTR("invalid index", __func__, NULL); fpix = fpixaGetFPix(fpixa, index, L_CLONE); data = fpixGetData(fpix); fpixDestroy(&fpix); return data; } /*! * \brief fpixaGetPixel() * * \param[in] fpixa * \param[in] index into fpixa array * \param[in] x,y pixel coords * \param[out] pval pixel value * \return 0 if OK; 1 on error */ l_ok fpixaGetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 n, ret; FPIX *fpix; if (!pval) return ERROR_INT("pval not defined", __func__, 1); *pval = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); n = fpixaGetCount(fpixa); if (index < 0 || index >= n) return ERROR_INT("invalid index into fpixa", __func__, 1); fpix = fpixaGetFPix(fpixa, index, L_CLONE); ret = fpixGetPixel(fpix, x, y, pval); fpixDestroy(&fpix); return ret; } /*! * \brief fpixaSetPixel() * * \param[in] fpixa * \param[in] index into fpixa array * \param[in] x,y pixel coords * \param[in] val pixel value * \return 0 if OK; 1 on error */ l_ok fpixaSetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 val) { l_int32 n, ret; FPIX *fpix; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); n = fpixaGetCount(fpixa); if (index < 0 || index >= n) return ERROR_INT("invalid index into fpixa", __func__, 1); fpix = fpixaGetFPix(fpixa, index, L_CLONE); ret = fpixSetPixel(fpix, x, y, val); fpixDestroy(&fpix); return ret; } /*--------------------------------------------------------------------* * DPix Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * \brief dpixCreate() * * \param[in] width, height * \return dpix with data allocated and initialized to 0, or NULL on error * *
 * Notes:
 *      (1) Makes a DPix of specified size, with the data array
 *          allocated and initialized to 0.
 *      (2) The number of pixels must be less than 2^28.
 * 
*/ DPIX * dpixCreate(l_int32 width, l_int32 height) { l_float64 *data; l_uint64 npix64; DPIX *dpix; if (width <= 0) return (DPIX *)ERROR_PTR("width must be > 0", __func__, NULL); if (height <= 0) return (DPIX *)ERROR_PTR("height must be > 0", __func__, NULL); /* Avoid overflow in malloc arg, malicious or otherwise */ npix64 = (l_uint64)width * (l_uint64)height; /* # of 8 byte pixels */ if (npix64 >= (1LL << 28)) { L_ERROR("requested w = %d, h = %d\n", __func__, width, height); return (DPIX *)ERROR_PTR("requested bytes >= 2^31", __func__, NULL); } dpix = (DPIX *)LEPT_CALLOC(1, sizeof(DPIX)); dpixSetDimensions(dpix, width, height); dpixSetWpl(dpix, width); /* 8 byte words */ dpix->refcount = 1; data = (l_float64 *)LEPT_CALLOC((size_t)width * height, sizeof(l_float64)); if (!data) { dpixDestroy(&dpix); return (DPIX *)ERROR_PTR("calloc fail for data", __func__, NULL); } dpixSetData(dpix, data); return dpix; } /*! * \brief dpixCreateTemplate() * * \param[in] dpixs * \return dpixd, or NULL on error * *
 * Notes:
 *      (1) Makes a DPix of the same size as the input DPix, with the
 *          data array allocated and initialized to 0.
 *      (2) Copies the resolution.
 * 
*/ DPIX * dpixCreateTemplate(DPIX *dpixs) { l_int32 w, h; DPIX *dpixd; if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", __func__, NULL); dpixGetDimensions(dpixs, &w, &h); dpixd = dpixCreate(w, h); dpixCopyResolution(dpixd, dpixs); return dpixd; } /*! * \brief dpixClone() * * \param[in] dpix * \return same dpix ptr, or NULL on error * *
 * Notes:
 *      (1) See pixClone() for definition and usage.
 * 
*/ DPIX * dpixClone(DPIX *dpix) { if (!dpix) return (DPIX *)ERROR_PTR("dpix not defined", __func__, NULL); ++dpix->refcount; return dpix; } /*! * \brief dpixCopy() * * \param[in] dpixs * \return dpixd, or NULL on error */ DPIX * dpixCopy(DPIX *dpixs) { l_int32 w, h, bytes; l_float64 *datas, *datad; DPIX *dpixd; if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", __func__, NULL); /* Total bytes in image data */ dpixGetDimensions(dpixs, &w, &h); bytes = 8 * w * h; if ((dpixd = dpixCreateTemplate(dpixs)) == NULL) return (DPIX *)ERROR_PTR("dpixd not made", __func__, NULL); datas = dpixGetData(dpixs); datad = dpixGetData(dpixd); memcpy(datad, datas, bytes); return dpixd; } /*! * \brief dpixDestroy() * * \param[in,out] pdpix will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the dpix.
 *      (2) Always nulls the input ptr.
 * 
*/ void dpixDestroy(DPIX **pdpix) { l_float64 *data; DPIX *dpix; if (!pdpix) { L_WARNING("ptr address is null!\n", __func__); return; } if ((dpix = *pdpix) == NULL) return; /* Decrement the ref count. If it is 0, destroy the dpix. */ if (--dpix->refcount == 0) { if ((data = dpixGetData(dpix)) != NULL) LEPT_FREE(data); LEPT_FREE(dpix); } *pdpix = NULL; } /*--------------------------------------------------------------------* * DPix Accessors * *--------------------------------------------------------------------*/ /*! * \brief dpixGetDimensions() * * \param[in] dpix * \param[out] pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok dpixGetDimensions(DPIX *dpix, l_int32 *pw, l_int32 *ph) { if (!pw && !ph) return ERROR_INT("no return val requested", __func__, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); if (pw) *pw = dpix->w; if (ph) *ph = dpix->h; return 0; } /*! * \brief dpixSetDimensions() * * \param[in] dpix * \param[in] w, h * \return 0 if OK, 1 on error */ l_ok dpixSetDimensions(DPIX *dpix, l_int32 w, l_int32 h) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpix->w = w; dpix->h = h; return 0; } /*! * \brief dpixGetWpl() * * \param[in] dpix * \return wpl, or 0 on error */ l_int32 dpixGetWpl(DPIX *dpix) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 0); return dpix->wpl; } /*! * \brief dpixSetWpl() * * \param[in] dpix * \param[in] wpl * \return 0 if OK, 1 on error */ l_ok dpixSetWpl(DPIX *dpix, l_int32 wpl) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpix->wpl = wpl; return 0; } /*! * \brief dpixGetResolution() * * \param[in] dpix * \param[out] pxres, pyres [optional] x and y resolution * \return 0 if OK, 1 on error */ l_ok dpixGetResolution(DPIX *dpix, l_int32 *pxres, l_int32 *pyres) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); if (pxres) *pxres = dpix->xres; if (pyres) *pyres = dpix->yres; return 0; } /*! * \brief dpixSetResolution() * * \param[in] dpix * \param[in] xres, yres x and y resolution * \return 0 if OK, 1 on error */ l_ok dpixSetResolution(DPIX *dpix, l_int32 xres, l_int32 yres) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpix->xres = xres; dpix->yres = yres; return 0; } /*! * \brief dpixCopyResolution() * * \param[in] dpixd, dpixs * \return 0 if OK, 1 on error */ l_ok dpixCopyResolution(DPIX *dpixd, DPIX *dpixs) { l_int32 xres, yres; if (!dpixs || !dpixd) return ERROR_INT("dpixs and dpixd not both defined", __func__, 1); dpixGetResolution(dpixs, &xres, &yres); dpixSetResolution(dpixd, xres, yres); return 0; } /*! * \brief dpixGetData() * * \param[in] dpix * \return ptr to dpix data, or NULL on error */ l_float64 * dpixGetData(DPIX *dpix) { if (!dpix) return (l_float64 *)ERROR_PTR("dpix not defined", __func__, NULL); return dpix->data; } /*! * \brief dpixSetData() * * \param[in] dpix * \param[in] data * \return 0 if OK, 1 on error */ l_ok dpixSetData(DPIX *dpix, l_float64 *data) { if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpix->data = data; return 0; } /*! * \brief dpixGetPixel() * * \param[in] dpix * \param[in] x,y pixel coords * \param[out] pval pixel value * \return 0 if OK; 1 or 2 on error * * Notes: * (1) If the point is outside the image, this returns an error (2), * with 0.0 in %pval. To avoid spamming output, it fails silently. */ l_ok dpixGetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval) { l_int32 w, h; if (!pval) return ERROR_INT("pval not defined", __func__, 1); *pval = 0.0; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpixGetDimensions(dpix, &w, &h); if (x < 0 || x >= w || y < 0 || y >= h) return 2; *pval = *(dpix->data + y * w + x); return 0; } /*! * \brief dpixSetPixel() * * \param[in] dpix * \param[in] x,y pixel coords * \param[in] val pixel value * \return 0 if OK; 1 or 2 on error * * Notes: * (1) If the point is outside the image, this returns an error (2), * with 0.0 in %pval. To avoid spamming output, it fails silently. */ l_ok dpixSetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 val) { l_int32 w, h; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpixGetDimensions(dpix, &w, &h); if (x < 0 || x >= w || y < 0 || y >= h) return 2; *(dpix->data + y * w + x) = val; return 0; } /*--------------------------------------------------------------------* * FPix serialized I/O * *--------------------------------------------------------------------*/ /*! * \brief fpixRead() * * \param[in] filename * \return fpix, or NULL on error */ FPIX * fpixRead(const char *filename) { FILE *fp; FPIX *fpix; if (!filename) return (FPIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (FPIX *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); fpix = fpixReadStream(fp); fclose(fp); if (!fpix) return (FPIX *)ERROR_PTR_1("fpix not read", filename, __func__, NULL); return fpix; } /*! * \brief fpixReadStream() * * \param[in] fp file stream * \return fpix, or NULL on error */ FPIX * fpixReadStream(FILE *fp) { char buf[256]; l_int32 w, h, nbytes, xres, yres, version; l_float32 *data; FPIX *fpix; if (!fp) return (FPIX *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nFPix Version %d\n", &version) != 1) return (FPIX *)ERROR_PTR("not a fpix file", __func__, NULL); if (version != FPIX_VERSION_NUMBER) return (FPIX *)ERROR_PTR("invalid fpix version", __func__, NULL); if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) return (FPIX *)ERROR_PTR("read fail for data size", __func__, NULL); /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the float data. The reason is * that fscanf throws away white space, and if the float data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) return (FPIX *)ERROR_PTR("fgets read fail", __func__, NULL); if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) return (FPIX *)ERROR_PTR("read fail for xres, yres", __func__, NULL); if ((fpix = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpix not made", __func__, NULL); fpixSetResolution(fpix, xres, yres); data = fpixGetData(fpix); if (fread(data, 1, nbytes, fp) != nbytes) { fpixDestroy(&fpix); return (FPIX *)ERROR_PTR("read error for nbytes", __func__, NULL); } fgetc(fp); /* ending nl */ /* Convert to little-endian if necessary */ fpixEndianByteSwap(fpix, fpix); return fpix; } /*! * \brief fpixReadMem() * * \param[in] data of serialized fpix * \param[in] size of data in bytes * \return fpix, or NULL on error */ FPIX * fpixReadMem(const l_uint8 *data, size_t size) { FILE *fp; FPIX *fpix; if (!data) return (FPIX *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (FPIX *)ERROR_PTR("stream not opened", __func__, NULL); fpix = fpixReadStream(fp); fclose(fp); if (!fpix) L_ERROR("fpix not read\n", __func__); return fpix; } /*! * \brief fpixWrite() * * \param[in] filename * \param[in] fpix * \return 0 if OK, 1 on error */ l_ok fpixWrite(const char *filename, FPIX *fpix) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = fpixWriteStream(fp, fpix); fclose(fp); if (ret) return ERROR_INT_1("fpix not written to stream", filename, __func__, 1); return 0; } /*! * \brief fpixWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] fpix * \return 0 if OK, 1 on error */ l_ok fpixWriteStream(FILE *fp, FPIX *fpix) { l_int32 w, h, xres, yres; l_uint32 nbytes; l_float32 *data; FPIX *fpixt; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); /* Convert to little-endian if necessary */ fpixt = fpixEndianByteSwap(NULL, fpix); fpixGetDimensions(fpixt, &w, &h); data = fpixGetData(fpixt); nbytes = sizeof(l_float32) * w * h; fpixGetResolution(fpixt, &xres, &yres); fprintf(fp, "\nFPix Version %d\n", FPIX_VERSION_NUMBER); fprintf(fp, "w = %d, h = %d, nbytes = %u\n", w, h, nbytes); fprintf(fp, "xres = %d, yres = %d\n", xres, yres); fwrite(data, 1, nbytes, fp); fprintf(fp, "\n"); fpixDestroy(&fpixt); return 0; } /*! * \brief fpixWriteMem() * * \param[out] pdata data of serialized fpix * \param[out] psize size of returned data * \param[in] fpix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a fpix in memory and puts the result in a buffer.
 * 
*/ l_ok fpixWriteMem(l_uint8 **pdata, size_t *psize, FPIX *fpix) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = fpixWriteStream(fp, fpix); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = fpixWriteStream(fp, fpix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief fpixEndianByteSwap() * * \param[in] fpixd [optional] can be either NULL, or equal to fpixs * \param[in] fpixs * \return fpixd always * *
 * Notes:
 *      (1) On big-endian hardware, this does byte-swapping on each of
 *          the 4-byte floats in the fpix data.  On little-endians,
 *          the data is unchanged.  This is used for serialization
 *          of fpix; the data is serialized in little-endian byte
 *          order because most hardware is little-endian.
 *      (2) The operation can be either in-place or, if fpixd == NULL,
 *          a new fpix is made.  If not in-place, caller must catch
 *          the returned pointer.
 * 
*/ FPIX * fpixEndianByteSwap(FPIX *fpixd, FPIX *fpixs) { if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, fpixd); if (fpixd && (fpixs != fpixd)) return (FPIX *)ERROR_PTR("fpixd != fpixs", __func__, fpixd); #ifdef L_BIG_ENDIAN { l_uint32 *data; l_int32 i, j, w, h; l_uint32 word; fpixGetDimensions(fpixs, &w, &h); if (!fpixd) fpixd = fpixCopy(fpixs); data = (l_uint32 *)fpixGetData(fpixd); for (i = 0; i < h; i++) { for (j = 0; j < w; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return fpixd; } #else /* L_LITTLE_ENDIAN */ if (fpixd) return fpixd; /* no-op */ else return fpixClone(fpixs); #endif /* L_BIG_ENDIAN */ } /*--------------------------------------------------------------------* * DPix serialized I/O * *--------------------------------------------------------------------*/ /*! * \brief dpixRead() * * \param[in] filename * \return dpix, or NULL on error */ DPIX * dpixRead(const char *filename) { FILE *fp; DPIX *dpix; if (!filename) return (DPIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (DPIX *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); dpix = dpixReadStream(fp); fclose(fp); if (!dpix) return (DPIX *)ERROR_PTR_1("dpix not read", filename, __func__, NULL); return dpix; } /*! * \brief dpixReadStream() * * \param[in] fp file stream * \return dpix, or NULL on error */ DPIX * dpixReadStream(FILE *fp) { char buf[256]; l_int32 w, h, nbytes, version, xres, yres; l_float64 *data; DPIX *dpix; if (!fp) return (DPIX *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nDPix Version %d\n", &version) != 1) return (DPIX *)ERROR_PTR("not a dpix file", __func__, NULL); if (version != DPIX_VERSION_NUMBER) return (DPIX *)ERROR_PTR("invalid dpix version", __func__, NULL); if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) return (DPIX *)ERROR_PTR("read fail for data size", __func__, NULL); /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the float data. The reason is * that fscanf throws away white space, and if the float data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) return (DPIX *)ERROR_PTR("fgets read fail", __func__, NULL); if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) return (DPIX *)ERROR_PTR("read fail for xres, yres", __func__, NULL); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", __func__, NULL); dpixSetResolution(dpix, xres, yres); data = dpixGetData(dpix); if (fread(data, 1, nbytes, fp) != nbytes) { dpixDestroy(&dpix); return (DPIX *)ERROR_PTR("read error for nbytes", __func__, NULL); } fgetc(fp); /* ending nl */ /* Convert to little-endian if necessary */ dpixEndianByteSwap(dpix, dpix); return dpix; } /*! * \brief dpixReadMem() * * \param[in] data of serialized dpix * \param[in] size of data in bytes * \return dpix, or NULL on error */ DPIX * dpixReadMem(const l_uint8 *data, size_t size) { FILE *fp; DPIX *dpix; if (!data) return (DPIX *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (DPIX *)ERROR_PTR("stream not opened", __func__, NULL); dpix = dpixReadStream(fp); fclose(fp); if (!dpix) L_ERROR("dpix not read\n", __func__); return dpix; } /*! * \brief dpixWrite() * * \param[in] filename * \param[in] dpix * \return 0 if OK, 1 on error */ l_ok dpixWrite(const char *filename, DPIX *dpix) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = dpixWriteStream(fp, dpix); fclose(fp); if (ret) return ERROR_INT_1("dpix not written to stream", filename, __func__, 1); return 0; } /*! * \brief dpixWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] dpix * \return 0 if OK, 1 on error */ l_ok dpixWriteStream(FILE *fp, DPIX *dpix) { l_int32 w, h, xres, yres; l_uint32 nbytes; l_float64 *data; DPIX *dpixt; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); /* Convert to little-endian if necessary */ dpixt = dpixEndianByteSwap(NULL, dpix); dpixGetDimensions(dpixt, &w, &h); dpixGetResolution(dpixt, &xres, &yres); data = dpixGetData(dpixt); nbytes = sizeof(l_float64) * w * h; fprintf(fp, "\nDPix Version %d\n", DPIX_VERSION_NUMBER); fprintf(fp, "w = %d, h = %d, nbytes = %u\n", w, h, nbytes); fprintf(fp, "xres = %d, yres = %d\n", xres, yres); fwrite(data, 1, nbytes, fp); fprintf(fp, "\n"); dpixDestroy(&dpixt); return 0; } /*! * \brief dpixWriteMem() * * \param[out] pdata data of serialized dpix * \param[out] psize size of returned data * \param[in] dpix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a dpix in memory and puts the result in a buffer.
 * 
*/ l_ok dpixWriteMem(l_uint8 **pdata, size_t *psize, DPIX *dpix) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = dpixWriteStream(fp, dpix); fputc('\0', fp); fclose(fp); *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = dpixWriteStream(fp, dpix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief dpixEndianByteSwap() * * \param[in] dpixd [optional] can be either NULL, or equal to dpixs * \param[in] dpixs * \return dpixd always * *
 * Notes:
 *      (1) On big-endian hardware, this does byte-swapping on each of
 *          the 4-byte words in the dpix data.  On little-endians,
 *          the data is unchanged.  This is used for serialization
 *          of dpix; the data is serialized in little-endian byte
 *          order because most hardware is little-endian.
 *      (2) The operation can be either in-place or, if dpixd == NULL,
 *          a new dpix is made.  If not in-place, caller must catch
 *          the returned pointer.
 * 
*/ DPIX * dpixEndianByteSwap(DPIX *dpixd, DPIX *dpixs) { if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", __func__, dpixd); if (dpixd && (dpixs != dpixd)) return (DPIX *)ERROR_PTR("dpixd != dpixs", __func__, dpixd); #ifdef L_BIG_ENDIAN { l_uint32 *data; l_int32 i, j, w, h; l_uint32 word; dpixGetDimensions(dpixs, &w, &h); if (!dpixd) dpixd = dpixCopy(dpixs); data = (l_uint32 *)dpixGetData(dpixd); for (i = 0; i < h; i++) { for (j = 0; j < 2 * w; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return dpixd; } #else /* L_LITTLE_ENDIAN */ if (dpixd) return dpixd; /* no-op */ else return dpixClone(dpixs); #endif /* L_BIG_ENDIAN */ } /*--------------------------------------------------------------------* * Print FPix (subsampled, for debugging) * *--------------------------------------------------------------------*/ /*! * \brief fpixPrintStream() * * \param[in] fp file stream * \param[in] fpix * \param[in] factor for subsampling * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Subsampled printout of fpix for debugging.
 * 
*/ l_ok fpixPrintStream(FILE *fp, FPIX *fpix, l_int32 factor) { l_int32 i, j, w, h, count; l_float32 val; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor < 1f", __func__, 1); fpixGetDimensions(fpix, &w, &h); fprintf(fp, "\nFPix: w = %d, h = %d\n", w, h); for (i = 0; i < h; i += factor) { for (count = 0, j = 0; j < w; j += factor, count++) { fpixGetPixel(fpix, j, i, &val); fprintf(fp, "val[%d, %d] = %f ", i, j, val); if ((count + 1) % 3 == 0) fprintf(fp, "\n"); } if (count % 3) fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } leptonica-1.86.0/src/fpix2.c000066400000000000000000002144651506303110300155530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file fpix2.c *
 *
 *    ------------------------------------------
 *    This file has these FPix utilities:
 *       ~ interconversions with pix, fpix, dpix
 *       ~ min and max values
 *       ~ integer scaling
 *       ~ arithmetic operations
 *       ~ set all
 *       ~ border functions
 *       ~ simple rasterop (source --> dest)
 *       ~ geometric transforms
 *    ------------------------------------------
 *
 *    Interconversions between Pix, FPix and DPix
 *          FPIX          *pixConvertToFPix()
 *          DPIX          *pixConvertToDPix()
 *          PIX           *fpixConvertToPix()
 *          PIX           *fpixDisplayMaxDynamicRange()  [useful for debugging]
 *          DPIX          *fpixConvertToDPix()
 *          PIX           *dpixConvertToPix()
 *          FPIX          *dpixConvertToFPix()
 *
 *    Min/max value
 *          l_int32        fpixGetMin()
 *          l_int32        fpixGetMax()
 *          l_int32        dpixGetMin()
 *          l_int32        dpixGetMax()
 *
 *    Integer scaling
 *          FPIX          *fpixScaleByInteger()
 *          DPIX          *dpixScaleByInteger()
 *
 *    Arithmetic operations
 *          FPIX          *fpixLinearCombination()
 *          l_int32        fpixAddMultConstant()
 *          DPIX          *dpixLinearCombination()
 *          l_int32        dpixAddMultConstant()
 *
 *    Set all
 *          l_int32        fpixSetAllArbitrary()
 *          l_int32        dpixSetAllArbitrary()
 *
 *    FPix border functions
 *          FPIX          *fpixAddBorder()
 *          FPIX          *fpixRemoveBorder()
 *          FPIX          *fpixAddMirroredBorder()
 *          FPIX          *fpixAddContinuedBorder()
 *          FPIX          *fpixAddSlopeBorder()
 *
 *    FPix simple rasterop
 *          l_int32        fpixRasterop()
 *
 *    FPix rotation by multiples of 90 degrees
 *          FPIX          *fpixRotateOrth()
 *          FPIX          *fpixRotate180()
 *          FPIX          *fpixRotate90()
 *          FPIX          *fpixFlipLR()
 *          FPIX          *fpixFlipTB()
 *
 *    FPix affine and projective interpolated transforms
 *          FPIX          *fpixAffinePta()
 *          FPIX          *fpixAffine()
 *          FPIX          *fpixProjectivePta()
 *          FPIX          *fpixProjective()
 *          l_int32        linearInterpolatePixelFloat()
 *
 *    Thresholding to 1 bpp Pix
 *          PIX           *fpixThresholdToPix()
 *
 *    Generate function from components
 *          FPIX          *pixComponentFunction()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*--------------------------------------------------------------------* * FPix <--> Pix conversions * *--------------------------------------------------------------------*/ /*! * \brief pixConvertToFPix() * * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] ncomps number of components: 3 for RGB, 1 otherwise * \return fpix, or NULL on error * *
 * Notes:
 *      (1) If colormapped, remove to grayscale.
 *      (2) If 32 bpp and %ncomps == 3, this is RGB; convert to luminance.
 *          In all other cases the src image is treated as having a single
 *          component of pixel values.
 * 
*/ FPIX * pixConvertToFPix(PIX *pixs, l_int32 ncomps) { l_int32 w, h, d, i, j, val, wplt, wpld; l_uint32 uval; l_uint32 *datat, *linet; l_float32 *datad, *lined; PIX *pixt; FPIX *fpixd; if (!pixs) return (FPIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Convert to a single component */ if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else if (pixGetDepth(pixs) == 32 && ncomps == 3) pixt = pixConvertRGBToLuminance(pixs); else pixt = pixClone(pixs); pixGetDimensions(pixt, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { pixDestroy(&pixt); return (FPIX *)ERROR_PTR("invalid depth", __func__, NULL); } if ((fpixd = fpixCreate(w, h)) == NULL) { pixDestroy(&pixt); return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; if (d == 1) { for (j = 0; j < w; j++) { val = GET_DATA_BIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 2) { for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 4) { for (j = 0; j < w; j++) { val = GET_DATA_QBIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 8) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); lined[j] = (l_float32)val; } } else if (d == 16) { for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(linet, j); lined[j] = (l_float32)val; } } else { /* d == 32 */ for (j = 0; j < w; j++) { uval = GET_DATA_FOUR_BYTES(linet, j); lined[j] = (l_float32)uval; } } } pixDestroy(&pixt); return fpixd; } /*! * \brief pixConvertToDPix() * * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] ncomps number of components: 3 for RGB, 1 otherwise * \return dpix, or NULL on error * *
 * Notes:
 *      (1) If colormapped, remove to grayscale.
 *      (2) If 32 bpp and %ncomps == 3, this is RGB; convert to luminance.
 *          In all other cases the src image is treated as having a single
 *          component of pixel values.
 * 
*/ DPIX * pixConvertToDPix(PIX *pixs, l_int32 ncomps) { l_int32 w, h, d, i, j, val, wplt, wpld; l_uint32 uval; l_uint32 *datat, *linet; l_float64 *datad, *lined; PIX *pixt; DPIX *dpixd; if (!pixs) return (DPIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Convert to a single component */ if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else if (pixGetDepth(pixs) == 32 && ncomps == 3) pixt = pixConvertRGBToLuminance(pixs); else pixt = pixClone(pixs); pixGetDimensions(pixt, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { pixDestroy(&pixt); return (DPIX *)ERROR_PTR("invalid depth", __func__, NULL); } if ((dpixd = dpixCreate(w, h)) == NULL) { pixDestroy(&pixt); return (DPIX *)ERROR_PTR("dpixd not made", __func__, NULL); } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = dpixGetData(dpixd); wpld = dpixGetWpl(dpixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; if (d == 1) { for (j = 0; j < w; j++) { val = GET_DATA_BIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 2) { for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 4) { for (j = 0; j < w; j++) { val = GET_DATA_QBIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 8) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); lined[j] = (l_float64)val; } } else if (d == 16) { for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(linet, j); lined[j] = (l_float64)val; } } else { /* d == 32 */ for (j = 0; j < w; j++) { uval = GET_DATA_FOUR_BYTES(linet, j); lined[j] = (l_float64)uval; } } } pixDestroy(&pixt); return dpixd; } /*! * \brief fpixConvertToPix() * * \param[in] fpixs * \param[in] outdepth 0, 8, 16 or 32 bpp * \param[in] negvals L_CLIP_TO_ZERO, L_TAKE_ABSVAL * \param[in] errorflag 1 to output error stats; 0 otherwise * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Use %outdepth = 0 to programmatically determine the
 *          output depth.  If no values are greater than 255,
 *          it will set outdepth = 8; otherwise to 16 or 32.
 *      (2) Because we are converting a float to an unsigned int
 *          with a specified dynamic range (8, 16 or 32 bits), errors
 *          can occur.  If errorflag == TRUE, output the number
 *          of values out of range, both negative and positive.
 *      (3) If a pixel value is positive and out of range, clip to
 *          the maximum value represented at the outdepth of 8, 16
 *          or 32 bits.
 * 
*/ PIX * fpixConvertToPix(FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag) { l_int32 w, h, i, j, wpls, wpld; l_uint32 vald, maxval; l_float32 val; l_float32 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) return (PIX *)ERROR_PTR("invalid negvals", __func__, NULL); if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); /* Adaptive determination of output depth */ if (outdepth == 0) { outdepth = 8; for (i = 0; i < h && outdepth < 32; i++) { lines = datas + i * wpls; for (j = 0; j < w && outdepth < 32; j++) { if (lines[j] > 65535.5) outdepth = 32; else if (lines[j] > 255.5) outdepth = 16; } } } if (outdepth == 8) maxval = 0xff; else if (outdepth == 16) maxval = 0xffff; else /* outdepth == 32 */ maxval = 0xffffffff; /* Gather statistics if %errorflag = TRUE */ if (errorflag) { l_int32 negs = 0; l_int32 overvals = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val = lines[j]; if (val < 0.0) negs++; else if (val > maxval) overvals++; } } if (negs > 0) L_ERROR("Number of negative values: %d\n", __func__, negs); if (overvals > 0) L_ERROR("Number of too-large values: %d\n", __func__, overvals); } /* Make the pix and convert the data */ if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; if (val >= 0.0) vald = (l_uint32)(val + 0.5); else if (negvals == L_CLIP_TO_ZERO) /* and val < 0.0 */ vald = 0; else vald = (l_uint32)(-val + 0.5); if (vald > maxval) vald = maxval; if (outdepth == 8) SET_DATA_BYTE(lined, j, vald); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, j, vald); else /* outdepth == 32 */ SET_DATA_FOUR_BYTES(lined, j, vald); } } return pixd; } /*! * \brief fpixDisplayMaxDynamicRange() * * \param[in] fpixs * \return pixd 8 bpp, or NULL on error */ PIX * fpixDisplayMaxDynamicRange(FPIX *fpixs) { l_uint8 dval; l_int32 i, j, w, h, wpls, wpld; l_float32 factor, sval, maxval; l_float32 *lines, *datas; l_uint32 *lined, *datad; PIX *pixd; if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); maxval = 0.0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { sval = *(lines + j); if (sval > maxval) maxval = sval; } } pixd = pixCreate(w, h, 8); if (maxval == 0.0) return pixd; /* all pixels are 0 */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); factor = 255. / maxval; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = *(lines + j); if (sval < 0.0) sval = 0.0; dval = (l_uint8)(factor * sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } return pixd; } /*! * \brief fpixConvertToDPix() * * \param[in] fpix * \return dpix, or NULL on error */ DPIX * fpixConvertToDPix(FPIX *fpix) { l_int32 w, h, i, j, wpls, wpld; l_float32 val; l_float32 *datas, *lines; l_float64 *datad, *lined; DPIX *dpix; if (!fpix) return (DPIX *)ERROR_PTR("fpix not defined", __func__, NULL); fpixGetDimensions(fpix, &w, &h); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", __func__, NULL); datas = fpixGetData(fpix); datad = dpixGetData(dpix); wpls = fpixGetWpl(fpix); wpld = dpixGetWpl(dpix); /* 8 byte words */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; lined[j] = val; } } return dpix; } /*! * \brief dpixConvertToPix() * * \param[in] dpixs * \param[in] outdepth 0, 8, 16 or 32 bpp * \param[in] negvals L_CLIP_TO_ZERO, L_TAKE_ABSVAL * \param[in] errorflag 1 to output error stats; 0 otherwise * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Use %outdepth = 0 to programmatically determine the
 *          output depth.  If no values are greater than 255,
 *          it will set outdepth = 8; otherwise to 16 or 32.
 *      (2) Because we are converting a float to an unsigned int
 *          with a specified dynamic range (8, 16 or 32 bits), errors
 *          can occur.  If errorflag == TRUE, output the number
 *          of values out of range, both negative and positive.
 *      (3) If a pixel value is positive and out of range, clip to
 *          the maximum value represented at the outdepth of 8, 16
 *          or 32 bits.
 * 
*/ PIX * dpixConvertToPix(DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag) { l_int32 w, h, i, j, wpls, wpld, maxval; l_uint32 vald; l_float64 val; l_float64 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; if (!dpixs) return (PIX *)ERROR_PTR("dpixs not defined", __func__, NULL); if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) return (PIX *)ERROR_PTR("invalid negvals", __func__, NULL); if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", __func__, NULL); dpixGetDimensions(dpixs, &w, &h); datas = dpixGetData(dpixs); wpls = dpixGetWpl(dpixs); /* Adaptive determination of output depth */ if (outdepth == 0) { outdepth = 8; for (i = 0; i < h && outdepth < 32; i++) { lines = datas + i * wpls; for (j = 0; j < w && outdepth < 32; j++) { if (lines[j] > 65535.5) outdepth = 32; else if (lines[j] > 255.5) outdepth = 16; } } } maxval = 0xff; if (outdepth == 16) maxval = 0xffff; else /* outdepth == 32 */ maxval = 0xffffffff; /* Gather statistics if %errorflag = TRUE */ if (errorflag) { l_int32 negs = 0; l_int32 overvals = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val = lines[j]; if (val < 0.0) negs++; else if (val > maxval) overvals++; } } if (negs > 0) L_ERROR("Number of negative values: %d\n", __func__, negs); if (overvals > 0) L_ERROR("Number of too-large values: %d\n", __func__, overvals); } /* Make the pix and convert the data */ if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; if (val >= 0.0) { vald = (l_uint32)(val + 0.5); } else { /* val < 0.0 */ if (negvals == L_CLIP_TO_ZERO) vald = 0; else vald = (l_uint32)(-val + 0.5); } if (vald > maxval) vald = maxval; if (outdepth == 8) SET_DATA_BYTE(lined, j, vald); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, j, vald); else /* outdepth == 32 */ SET_DATA_FOUR_BYTES(lined, j, vald); } } return pixd; } /*! * \brief dpixConvertToFPix() * * \param[in] dpix * \return fpix, or NULL on error */ FPIX * dpixConvertToFPix(DPIX *dpix) { l_int32 w, h, i, j, wpls, wpld; l_float64 val; l_float32 *datad, *lined; l_float64 *datas, *lines; FPIX *fpix; if (!dpix) return (FPIX *)ERROR_PTR("dpix not defined", __func__, NULL); dpixGetDimensions(dpix, &w, &h); if ((fpix = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpix not made", __func__, NULL); datas = dpixGetData(dpix); datad = fpixGetData(fpix); wpls = dpixGetWpl(dpix); /* 8 byte words */ wpld = fpixGetWpl(fpix); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; lined[j] = (l_float32)val; } } return fpix; } /*--------------------------------------------------------------------* * Min/max value * *--------------------------------------------------------------------*/ /*! * \brief fpixGetMin() * * \param[in] fpix * \param[out] pminval [optional] min value * \param[out] pxminloc [optional] x location of min * \param[out] pyminloc [optional] y location of min * \return 0 if OK; 1 on error */ l_ok fpixGetMin(FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc) { l_int32 i, j, w, h, wpl, xminloc, yminloc; l_float32 *data, *line; l_float32 minval; if (!pminval && !pxminloc && !pyminloc) return ERROR_INT("no return val requested", __func__, 1); if (pminval) *pminval = 0.0; if (pxminloc) *pxminloc = 0; if (pyminloc) *pyminloc = 0; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); minval = +1.0e20f; xminloc = 0; yminloc = 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] < minval) { minval = line[j]; xminloc = j; yminloc = i; } } } if (pminval) *pminval = minval; if (pxminloc) *pxminloc = xminloc; if (pyminloc) *pyminloc = yminloc; return 0; } /*! * \brief fpixGetMax() * * \param[in] fpix * \param[out] pmaxval [optional] max value * \param[out] pxmaxloc [optional] x location of max * \param[out] pymaxloc [optional] y location of max * \return 0 if OK; 1 on error */ l_ok fpixGetMax(FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc) { l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; l_float32 *data, *line; l_float32 maxval; if (!pmaxval && !pxmaxloc && !pymaxloc) return ERROR_INT("no return val requested", __func__, 1); if (pmaxval) *pmaxval = 0.0; if (pxmaxloc) *pxmaxloc = 0; if (pymaxloc) *pymaxloc = 0; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); maxval = -1.0e20f; xmaxloc = 0; ymaxloc = 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] > maxval) { maxval = line[j]; xmaxloc = j; ymaxloc = i; } } } if (pmaxval) *pmaxval = maxval; if (pxmaxloc) *pxmaxloc = xmaxloc; if (pymaxloc) *pymaxloc = ymaxloc; return 0; } /*! * \brief dpixGetMin() * * \param[in] dpix * \param[out] pminval [optional] min value * \param[out] pxminloc [optional] x location of min * \param[out] pyminloc [optional] y location of min * \return 0 if OK; 1 on error */ l_ok dpixGetMin(DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc) { l_int32 i, j, w, h, wpl, xminloc, yminloc; l_float64 *data, *line; l_float64 minval; if (!pminval && !pxminloc && !pyminloc) return ERROR_INT("no return val requested", __func__, 1); if (pminval) *pminval = 0.0; if (pxminloc) *pxminloc = 0; if (pyminloc) *pyminloc = 0; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); minval = +1.0e300; xminloc = 0; yminloc = 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] < minval) { minval = line[j]; xminloc = j; yminloc = i; } } } if (pminval) *pminval = minval; if (pxminloc) *pxminloc = xminloc; if (pyminloc) *pyminloc = yminloc; return 0; } /*! * \brief dpixGetMax() * * \param[in] dpix * \param[out] pmaxval [optional] max value * \param[out] pxmaxloc [optional] x location of max * \param[out] pymaxloc [optional] y location of max * \return 0 if OK; 1 on error */ l_ok dpixGetMax(DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc) { l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; l_float64 *data, *line; l_float64 maxval; if (!pmaxval && !pxmaxloc && !pymaxloc) return ERROR_INT("no return val requested", __func__, 1); if (pmaxval) *pmaxval = 0.0; if (pxmaxloc) *pxmaxloc = 0; if (pymaxloc) *pymaxloc = 0; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); maxval = -1.0e20; xmaxloc = 0; ymaxloc = 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] > maxval) { maxval = line[j]; xmaxloc = j; ymaxloc = i; } } } if (pmaxval) *pmaxval = maxval; if (pxmaxloc) *pxmaxloc = xmaxloc; if (pymaxloc) *pymaxloc = ymaxloc; return 0; } /*--------------------------------------------------------------------* * Special integer scaling * *--------------------------------------------------------------------*/ /*! * \brief fpixScaleByInteger() * * \param[in] fpixs typically low resolution * \param[in] factor integer scaling factor * \return fpixd interpolated result, or NULL on error * *
 * Notes:
 *      (1) The width wd of fpixd is related to ws of fpixs by:
 *              wd = factor * (ws - 1) + 1   (and ditto for the height)
 *          We avoid special-casing boundary pixels in the interpolation
 *          by constructing fpixd by inserting (factor - 1) interpolated
 *          pixels between each pixel in fpixs.  Then
 *               wd = ws + (ws - 1) * (factor - 1)    (same as above)
 *          This also has the advantage that if we subsample by %factor,
 *          throwing out all the interpolated pixels, we regain the
 *          original low resolution fpix.
 * 
*/ FPIX * fpixScaleByInteger(FPIX *fpixs, l_int32 factor) { l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; l_float32 val0, val1, val2, val3; l_float32 *datas, *datad, *lines, *lined, *fract; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixGetDimensions(fpixs, &ws, &hs); wd = factor * (ws - 1) + 1; hd = factor * (hs - 1) + 1; fpixd = fpixCreate(wd, hd); datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs); wpld = fpixGetWpl(fpixd); fract = (l_float32 *)LEPT_CALLOC(factor, sizeof(l_float32)); for (i = 0; i < factor; i++) fract[i] = i / (l_float32)factor; for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; val2 = lines[wpls + j]; val3 = lines[wpls + j + 1]; for (k = 0; k < factor; k++) { /* rows of sub-block */ lined = datad + (i * factor + k) * wpld; for (m = 0; m < factor; m++) { /* cols of sub-block */ lined[j * factor + m] = val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + val1 * fract[m] * (1.0 - fract[k]) + val2 * (1.0 - fract[m]) * fract[k] + val3 * fract[m] * fract[k]; } } } } /* Do the right-most column of fpixd, skipping LR corner */ for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; val0 = lines[ws - 1]; val1 = lines[wpls + ws - 1]; for (k = 0; k < factor; k++) { lined = datad + (i * factor + k) * wpld; lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; } } /* Do the bottom-most row of fpixd */ lines = datas + (hs - 1) * wpls; lined = datad + (hd - 1) * wpld; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; for (m = 0; m < factor; m++) lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; lined[wd - 1] = lines[ws - 1]; /* LR corner */ } LEPT_FREE(fract); return fpixd; } /*! * \brief dpixScaleByInteger() * * \param[in] dpixs typically low resolution * \param[in] factor integer scaling factor * \return dpixd interpolated result, or NULL on error * *
 * Notes:
 *      (1) The width wd of dpixd is related to ws of dpixs by:
 *              wd = factor * (ws - 1) + 1   (and ditto for the height)
 *          We avoid special-casing boundary pixels in the interpolation
 *          by constructing fpixd by inserting (factor - 1) interpolated
 *          pixels between each pixel in fpixs.  Then
 *               wd = ws + (ws - 1) * (factor - 1)    (same as above)
 *          This also has the advantage that if we subsample by %factor,
 *          throwing out all the interpolated pixels, we regain the
 *          original low resolution dpix.
 * 
*/ DPIX * dpixScaleByInteger(DPIX *dpixs, l_int32 factor) { l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; l_float64 val0, val1, val2, val3; l_float64 *datas, *datad, *lines, *lined, *fract; DPIX *dpixd; if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", __func__, NULL); dpixGetDimensions(dpixs, &ws, &hs); wd = factor * (ws - 1) + 1; hd = factor * (hs - 1) + 1; dpixd = dpixCreate(wd, hd); datas = dpixGetData(dpixs); datad = dpixGetData(dpixd); wpls = dpixGetWpl(dpixs); wpld = dpixGetWpl(dpixd); fract = (l_float64 *)LEPT_CALLOC(factor, sizeof(l_float64)); for (i = 0; i < factor; i++) fract[i] = i / (l_float64)factor; for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; val2 = lines[wpls + j]; val3 = lines[wpls + j + 1]; for (k = 0; k < factor; k++) { /* rows of sub-block */ lined = datad + (i * factor + k) * wpld; for (m = 0; m < factor; m++) { /* cols of sub-block */ lined[j * factor + m] = val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + val1 * fract[m] * (1.0 - fract[k]) + val2 * (1.0 - fract[m]) * fract[k] + val3 * fract[m] * fract[k]; } } } } /* Do the right-most column of dpixd, skipping LR corner */ for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; val0 = lines[ws - 1]; val1 = lines[wpls + ws - 1]; for (k = 0; k < factor; k++) { lined = datad + (i * factor + k) * wpld; lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; } } /* Do the bottom-most row of dpixd */ lines = datas + (hs - 1) * wpls; lined = datad + (hd - 1) * wpld; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; for (m = 0; m < factor; m++) lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; lined[wd - 1] = lines[ws - 1]; /* LR corner */ } LEPT_FREE(fract); return dpixd; } /*--------------------------------------------------------------------* * Arithmetic operations * *--------------------------------------------------------------------*/ /*! * \brief fpixLinearCombination() * * \param[in] fpixd [optional] this can be null, or equal to fpixs1 * \param[in] fpixs1 can be equal to fpixd * \param[in] fpixs2 * \param[in] a, b multiplication factors on fpixs1 and fpixs2, rsp. * \return fpixd always * *
 * Notes:
 *      (1) Computes pixelwise linear combination: a * src1 + b * src2
 *      (2) Alignment is to UL corner; src1 and src2 do not have to be
 *          the same size.
 *      (3) There are 2 cases.  The result can go to a new dest, or
 *          in-place to fpixs1:
 *          * fpixd == null:   (src1 + src2) --> new fpixd
 *          * fpixd == fpixs1:  (src1 + src2) --> src1  (in-place)
 * 
*/ FPIX * fpixLinearCombination(FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b) { l_int32 i, j, ws, hs, w, h, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; if (!fpixs1) return (FPIX *)ERROR_PTR("fpixs1 not defined", __func__, fpixd); if (!fpixs2) return (FPIX *)ERROR_PTR("fpixs2 not defined", __func__, fpixd); if (fpixd && (fpixd != fpixs1)) return (FPIX *)ERROR_PTR("invalid inplace operation", __func__, fpixd); if (!fpixd) fpixd = fpixCopy(fpixs1); datas = fpixGetData(fpixs2); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs2); wpld = fpixGetWpl(fpixd); fpixGetDimensions(fpixs2, &ws, &hs); fpixGetDimensions(fpixd, &w, &h); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = a * lined[j] + b * lines[j]; } return fpixd; } /*! * \brief fpixAddMultConstant() * * \param[in] fpix * \param[in] addc use 0.0 to skip the operation * \param[in] multc use 1.0 to skip the operation * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) It can be used to multiply each pixel by a constant,
 *          and also to add a constant to each pixel.  Multiplication
 *          is done first.
 * 
*/ l_ok fpixAddMultConstant(FPIX *fpix, l_float32 addc, l_float32 multc) { l_int32 i, j, w, h, wpl; l_float32 *line, *data; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); if (addc == 0.0 && multc == 1.0) return 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; if (addc == 0.0) { for (j = 0; j < w; j++) line[j] *= multc; } else if (multc == 1.0) { for (j = 0; j < w; j++) line[j] += addc; } else { for (j = 0; j < w; j++) { line[j] = multc * line[j] + addc; } } } return 0; } /*! * \brief dpixLinearCombination() * * \param[in] dpixd [optional] this can be null, or equal to dpixs1 * \param[in] dpixs1 can be equal to dpixd * \param[in] dpixs2 * \param[in] a, b multiplication factors on dpixs1 and dpixs2, rsp. * \return dpixd always * *
 * Notes:
 *      (1) Computes pixelwise linear combination: a * src1 + b * src2
 *      (2) Alignment is to UL corner; src1 and src2 do not have to be
 *          the same size.
 *      (3) There are 2 cases.  The result can go to a new dest, or
 *          in-place to dpixs1:
 *          * dpixd == null:   (src1 + src2) --> new dpixd
 *          * dpixd == dpixs1:  (src1 + src2) --> src1  (in-place)
 * 
*/ DPIX * dpixLinearCombination(DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b) { l_int32 i, j, ws, hs, w, h, wpls, wpld; l_float64 *datas, *datad, *lines, *lined; if (!dpixs1) return (DPIX *)ERROR_PTR("dpixs1 not defined", __func__, dpixd); if (!dpixs2) return (DPIX *)ERROR_PTR("dpixs2 not defined", __func__, dpixd); if (dpixd && (dpixd != dpixs1)) return (DPIX *)ERROR_PTR("invalid inplace operation", __func__, dpixd); if (!dpixd) dpixd = dpixCopy(dpixs1); datas = dpixGetData(dpixs2); datad = dpixGetData(dpixd); wpls = dpixGetWpl(dpixs2); wpld = dpixGetWpl(dpixd); dpixGetDimensions(dpixs2, &ws, &hs); dpixGetDimensions(dpixd, &w, &h); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = a * lined[j] + b * lines[j]; } return dpixd; } /*! * \brief dpixAddMultConstant() * * \param[in] dpix * \param[in] addc use 0.0 to skip the operation * \param[in] multc use 1.0 to skip the operation * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) It can be used to multiply each pixel by a constant,
 *          and also to add a constant to each pixel.  Multiplication
 *          is done first.
 * 
*/ l_ok dpixAddMultConstant(DPIX *dpix, l_float64 addc, l_float64 multc) { l_int32 i, j, w, h, wpl; l_float64 *line, *data; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); if (addc == 0.0 && multc == 1.0) return 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; if (addc == 0.0) { for (j = 0; j < w; j++) line[j] *= multc; } else if (multc == 1.0) { for (j = 0; j < w; j++) line[j] += addc; } else { for (j = 0; j < w; j++) line[j] = multc * line[j] + addc; } } return 0; } /*--------------------------------------------------------------------* * Set all * *--------------------------------------------------------------------*/ /*! * \brief fpixSetAllArbitrary() * * \param[in] fpix * \param[in] inval to set at each pixel * \return 0 if OK, 1 on error */ l_ok fpixSetAllArbitrary(FPIX *fpix, l_float32 inval) { l_int32 i, j, w, h; l_float32 *data, *line; if (!fpix) return ERROR_INT("fpix not defined", __func__, 1); fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); for (i = 0; i < h; i++) { line = data + i * w; for (j = 0; j < w; j++) *(line + j) = inval; } return 0; } /*! * \brief dpixSetAllArbitrary() * * \param[in] dpix * \param[in] inval to set at each pixel * \return 0 if OK, 1 on error */ l_ok dpixSetAllArbitrary(DPIX *dpix, l_float64 inval) { l_int32 i, j, w, h; l_float64 *data, *line; if (!dpix) return ERROR_INT("dpix not defined", __func__, 1); dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); for (i = 0; i < h; i++) { line = data + i * w; for (j = 0; j < w; j++) *(line + j) = inval; } return 0; } /*--------------------------------------------------------------------* * Border functions * *--------------------------------------------------------------------*/ /*! * \brief fpixAddBorder() * * \param[in] fpixs * \param[in] left, right, top, bot pixels on each side to be added * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) Adds border of '0' 32-bit pixels
 * 
*/ FPIX * fpixAddBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) return fpixCopy(fpixs); fpixGetDimensions(fpixs, &ws, &hs); wd = ws + left + right; hd = hs + top + bot; if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); fpixCopyResolution(fpixd, fpixs); fpixRasterop(fpixd, left, top, ws, hs, fpixs, 0, 0); return fpixd; } /*! * \brief fpixRemoveBorder() * * \param[in] fpixs * \param[in] left, right, top, bot pixels on each side to be removed * \return fpixd, or NULL on error */ FPIX * fpixRemoveBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) return fpixCopy(fpixs); fpixGetDimensions(fpixs, &ws, &hs); wd = ws - left - right; hd = hs - top - bot; if (wd <= 0 || hd <= 0) return (FPIX *)ERROR_PTR("width & height not both > 0", __func__, NULL); if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); fpixCopyResolution(fpixd, fpixs); fpixRasterop(fpixd, 0, 0, wd, hd, fpixs, left, top); return fpixd; } /*! * \brief fpixAddMirroredBorder() * * \param[in] fpixs * \param[in] left, right, top, bot pixels on each side to be added * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) See pixAddMirroredBorder() for situations of usage.
 * 
*/ FPIX * fpixAddMirroredBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); for (j = 0; j < left; j++) fpixRasterop(fpixd, left - 1 - j, top, 1, h, fpixd, left + j, top); for (j = 0; j < right; j++) fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1 - j, top); for (i = 0; i < top; i++) fpixRasterop(fpixd, 0, top - 1 - i, left + w + right, 1, fpixd, 0, top + i); for (i = 0; i < bot; i++) fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, fpixd, 0, top + h - 1 - i); return fpixd; } /*! * \brief fpixAddContinuedBorder() * * \param[in] fpixs * \param[in] left, right, top, bot pixels on each side to be added * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This adds pixels on each side whose values are equal to
 *          the value on the closest boundary pixel.
 * 
*/ FPIX * fpixAddContinuedBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); for (j = 0; j < left; j++) fpixRasterop(fpixd, j, top, 1, h, fpixd, left, top); for (j = 0; j < right; j++) fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1, top); for (i = 0; i < top; i++) fpixRasterop(fpixd, 0, i, left + w + right, 1, fpixd, 0, top); for (i = 0; i < bot; i++) fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, fpixd, 0, top + h - 1); return fpixd; } /*! * \brief fpixAddSlopeBorder() * * \param[in] fpixs * \param[in] left, right, top, bot pixels on each side to be added * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This adds pixels on each side whose values have a normal
 *          derivative equal to the normal derivative at the boundary
 *          of fpixs.
 * 
*/ FPIX * fpixAddSlopeBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h, fullw, fullh; l_float32 val1, val2, del; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); /* Left */ for (i = top; i < top + h; i++) { fpixGetPixel(fpixd, left, i, &val1); fpixGetPixel(fpixd, left + 1, i, &val2); del = val1 - val2; for (j = 0; j < left; j++) fpixSetPixel(fpixd, j, i, val1 + del * (left - j)); } /* Right */ fullw = left + w + right; for (i = top; i < top + h; i++) { fpixGetPixel(fpixd, left + w - 1, i, &val1); fpixGetPixel(fpixd, left + w - 2, i, &val2); del = val1 - val2; for (j = left + w; j < fullw; j++) fpixSetPixel(fpixd, j, i, val1 + del * (j - left - w + 1)); } /* Top */ for (j = 0; j < fullw; j++) { fpixGetPixel(fpixd, j, top, &val1); fpixGetPixel(fpixd, j, top + 1, &val2); del = val1 - val2; for (i = 0; i < top; i++) fpixSetPixel(fpixd, j, i, val1 + del * (top - i)); } /* Bottom */ fullh = top + h + bot; for (j = 0; j < fullw; j++) { fpixGetPixel(fpixd, j, top + h - 1, &val1); fpixGetPixel(fpixd, j, top + h - 2, &val2); del = val1 - val2; for (i = top + h; i < fullh; i++) fpixSetPixel(fpixd, j, i, val1 + del * (i - top - h + 1)); } return fpixd; } /*--------------------------------------------------------------------* * Simple rasterop * *--------------------------------------------------------------------*/ /*! * \brief fpixRasterop() * * \param[in] fpixd dest fpix * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] fpixs src fpix * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) This is similar in structure to pixRasterop(), except
 *          it only allows copying from the source into the destination.
 *          For that reason, no op code is necessary.  Additionally,
 *          all pixels are 32 bit words (float values), which makes
 *          the copy very simple.
 *      (2) Clipping of both src and dest fpix are done automatically.
 *      (3) This allows in-place copying, without checking to see if
 *          the result is valid:  use for in-place with caution!
 * 
*/ l_ok fpixRasterop(FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy) { l_int32 fsw, fsh, fdw, fdh, dhangw, shangw, dhangh, shangh; l_int32 i, j, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; if (!fpixs) return ERROR_INT("fpixs not defined", __func__, 1); if (!fpixd) return ERROR_INT("fpixd not defined", __func__, 1); /* -------------------------------------------------------- * * Clip to maximum rectangle with both src and dest * * -------------------------------------------------------- */ fpixGetDimensions(fpixs, &fsw, &fsh); fpixGetDimensions(fpixd, &fdw, &fdh); /* First clip horizontally (sx, dx, dw) */ if (dx < 0) { sx -= dx; /* increase sx */ dw += dx; /* reduce dw */ dx = 0; } if (sx < 0) { dx -= sx; /* increase dx */ dw += sx; /* reduce dw */ sx = 0; } dhangw = dx + dw - fdw; /* rect overhang of dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ shangw = sx + dw - fsw; /* rect overhang of src to right */ if (shangw > 0) dw -= shangw; /* reduce dw */ /* Then clip vertically (sy, dy, dh) */ if (dy < 0) { sy -= dy; /* increase sy */ dh += dy; /* reduce dh */ dy = 0; } if (sy < 0) { dy -= sy; /* increase dy */ dh += sy; /* reduce dh */ sy = 0; } dhangh = dy + dh - fdh; /* rect overhang of dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ shangh = sy + dh - fsh; /* rect overhang of src below */ if (shangh > 0) dh -= shangh; /* reduce dh */ /* if clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return 0; /* -------------------------------------------------------- * * Copy block of data * * -------------------------------------------------------- */ datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs); wpld = fpixGetWpl(fpixd); datas += sy * wpls + sx; /* at UL corner of block */ datad += dy * wpld + dx; /* at UL corner of block */ for (i = 0; i < dh; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < dw; j++) { *lined = *lines; lines++; lined++; } } return 0; } /*--------------------------------------------------------------------* * Rotation by multiples of 90 degrees * *--------------------------------------------------------------------*/ /*! * \brief fpixRotateOrth() * * \param[in] fpixs * \param[in] quads 0-3; number of 90 degree cw rotations * \return fpixd, or NULL on error */ FPIX * fpixRotateOrth(FPIX *fpixs, l_int32 quads) { if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (quads < 0 || quads > 3) return (FPIX *)ERROR_PTR("quads not in {0,1,2,3}", __func__, NULL); if (quads == 0) return fpixCopy(fpixs); else if (quads == 1) return fpixRotate90(fpixs, 1); else if (quads == 2) return fpixRotate180(NULL, fpixs); else /* quads == 3 */ return fpixRotate90(fpixs, -1); } /*! * \brief fpixRotate180() * * \param[in] fpixd [optional] can be null, or equal to fpixs * \param[in] fpixs * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This does a 180 rotation of the image about the center,
 *          which is equivalent to a left-right flip about a vertical
 *          line through the image center, followed by a top-bottom
 *          flip about a horizontal line through the image center.
 *      (2) There are 2 cases for input:
 *          (a) fpixd == null (creates a new fpixd)
 *          (b) fpixd == fpixs (in-place operation)
 *      (3) For clarity, use these two patterns:
 *          (a) fpixd = fpixRotate180(NULL, fpixs);
 *          (b) fpixRotate180(fpixs, fpixs);
 * 
*/ FPIX * fpixRotate180(FPIX *fpixd, FPIX *fpixs) { if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); /* Prepare pixd for in-place operation */ if (!fpixd) fpixd = fpixCopy(fpixs); fpixFlipLR(fpixd, fpixd); fpixFlipTB(fpixd, fpixd); return fpixd; } /*! * \brief fpixRotate90() * * \param[in] fpixs * \param[in] direction 1 = clockwise; -1 = counter-clockwise * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This does a 90 degree rotation of the image about the center,
 *          either cw or ccw, returning a new pix.
 *      (2) The direction must be either 1 (cw) or -1 (ccw).
 * 
*/ FPIX * fpixRotate90(FPIX *fpixs, l_int32 direction) { l_int32 i, j, wd, hd, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (direction != 1 && direction != -1) return (FPIX *)ERROR_PTR("invalid direction", __func__, NULL); fpixGetDimensions(fpixs, &hd, &wd); if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", __func__, NULL); fpixCopyResolution(fpixd, fpixs); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); if (direction == 1) { /* clockwise */ for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { lined[j] = lines[i]; lines -= wpls; } } } else { /* ccw */ for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { lined[j] = lines[hd - 1 - i]; lines += wpls; } } } return fpixd; } /*! * \brief pixFlipLR() * * \param[in] fpixd [optional] can be null, or equal to fpixs * \param[in] fpixs * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This does a left-right flip of the image, which is
 *          equivalent to a rotation out of the plane about a
 *          vertical line through the image center.
 *      (2) There are 2 cases for input:
 *          (a) fpixd == null (creates a new fpixd)
 *          (b) fpixd == fpixs (in-place operation)
 *      (3) For clarity, use these two patterns:
 *          (a) fpixd = fpixFlipLR(NULL, fpixs);
 *          (b) fpixFlipLR(fpixs, fpixs);
 * 
*/ FPIX * fpixFlipLR(FPIX *fpixd, FPIX *fpixs) { l_int32 i, j, w, h, wpl, bpl; l_float32 *line, *data, *buffer; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); /* Prepare fpixd for in-place operation */ if (!fpixd) fpixd = fpixCopy(fpixs); fpixGetDimensions(fpixd, &w, &h); data = fpixGetData(fpixd); wpl = fpixGetWpl(fpixd); /* 4-byte words */ bpl = 4 * wpl; buffer = (l_float32 *)LEPT_CALLOC(wpl, sizeof(l_float32)); for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) line[j] = buffer[w - 1 - j]; } LEPT_FREE(buffer); return fpixd; } /*! * \brief fpixFlipTB() * * \param[in] fpixd [optional] can be null, or equal to fpixs * \param[in] fpixs * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This does a top-bottom flip of the image, which is
 *          equivalent to a rotation out of the plane about a
 *          horizontal line through the image center.
 *      (2) There are 2 cases for input:
 *          (a) fpixd == null (creates a new fpixd)
 *          (b) fpixd == fpixs (in-place operation)
 *      (3) For clarity, use these two patterns:
 *          (a) fpixd = fpixFlipTB(NULL, fpixs);
 *          (b) fpixFlipTB(fpixs, fpixs);
 * 
*/ FPIX * fpixFlipTB(FPIX *fpixd, FPIX *fpixs) { l_int32 i, k, h, h2, wpl, bpl; l_float32 *linet, *lineb, *data, *buffer; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); /* Prepare fpixd for in-place operation */ if (!fpixd) fpixd = fpixCopy(fpixs); data = fpixGetData(fpixd); wpl = fpixGetWpl(fpixd); fpixGetDimensions(fpixd, NULL, &h); buffer = (l_float32 *)LEPT_CALLOC(wpl, sizeof(l_float32)); h2 = h / 2; bpl = 4 * wpl; for (i = 0, k = h - 1; i < h2; i++, k--) { linet = data + i * wpl; lineb = data + k * wpl; memcpy(buffer, linet, bpl); memcpy(linet, lineb, bpl); memcpy(lineb, buffer, bpl); } LEPT_FREE(buffer); return fpixd; } /*--------------------------------------------------------------------* * Affine and projective interpolated transforms * *--------------------------------------------------------------------*/ /*! * \brief fpixAffinePta() * * \param[in] fpixs 8 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] border size of extension with constant normal derivative * \param[in] inval value brought in; typ. 0 * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) If %border > 0, all four sides are extended by that distance,
 *          and removed after the transformation is finished.  Pixels
 *          that would be brought in to the trimmed result from outside
 *          the extended region are assigned %inval.  The purpose of
 *          extending the image is to avoid such assignments.
 *      (2) On the other hand, you may want to give all pixels that
 *          are brought in from outside fpixs a specific value.  In that
 *          case, set %border == 0.
 * 
*/ FPIX * fpixAffinePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval) { l_float32 *vc; PTA *ptas2, *ptad2; FPIX *fpixs2, *fpixd, *fpixd2; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (!ptas) return (FPIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (FPIX *)ERROR_PTR("ptad not defined", __func__, NULL); /* If a border is to be added, also translate the ptas */ if (border > 0) { ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); } else { ptas2 = ptaClone(ptas); ptad2 = ptaClone(ptad); fpixs2 = fpixClone(fpixs); } /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad2, ptas2, &vc); fpixd2 = fpixAffine(fpixs2, vc, inval); fpixDestroy(&fpixs2); ptaDestroy(&ptas2); ptaDestroy(&ptad2); LEPT_FREE(vc); if (border == 0) return fpixd2; /* Remove the added border */ fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); fpixDestroy(&fpixd2); return fpixd; } /*! * \brief fpixAffine() * * \param[in] fpixs 8 bpp * \param[in] vc vector of 8 coefficients for projective transformation * \param[in] inval value brought in; typ. 0 * \return fpixd, or NULL on error */ FPIX * fpixAffine(FPIX *fpixs, l_float32 *vc, l_float32 inval) { l_int32 i, j, w, h, wpld; l_float32 val; l_float32 *datas, *datad, *lined; l_float32 x, y; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); if (!vc) return (FPIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = fpixGetData(fpixs); fpixd = fpixCreateTemplate(fpixs); fpixSetAllArbitrary(fpixd, inval); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); *(lined + j) = val; } } return fpixd; } /*! * \brief fpixProjectivePta() * * \param[in] fpixs 8 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] border size of extension with constant normal derivative * \param[in] inval value brought in; typ. 0 * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) If %border > 0, all four sides are extended by that distance,
 *          and removed after the transformation is finished.  Pixels
 *          that would be brought in to the trimmed result from outside
 *          the extended region are assigned %inval.  The purpose of
 *          extending the image is to avoid such assignments.
 *      (2) On the other hand, you may want to give all pixels that
 *          are brought in from outside fpixs a specific value.  In that
 *          case, set %border == 0.
 * 
*/ FPIX * fpixProjectivePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval) { l_float32 *vc; PTA *ptas2, *ptad2; FPIX *fpixs2, *fpixd, *fpixd2; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (!ptas) return (FPIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (FPIX *)ERROR_PTR("ptad not defined", __func__, NULL); /* If a border is to be added, also translate the ptas */ if (border > 0) { ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); } else { ptas2 = ptaClone(ptas); ptad2 = ptaClone(ptad); fpixs2 = fpixClone(fpixs); } /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad2, ptas2, &vc); fpixd2 = fpixProjective(fpixs2, vc, inval); fpixDestroy(&fpixs2); ptaDestroy(&ptas2); ptaDestroy(&ptad2); LEPT_FREE(vc); if (border == 0) return fpixd2; /* Remove the added border */ fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); fpixDestroy(&fpixd2); return fpixd; } /*! * \brief fpixProjective() * * \param[in] fpixs 8 bpp * \param[in] vc vector of 8 coefficients for projective transform * \param[in] inval value brought in; typ. 0 * \return fpixd, or NULL on error */ FPIX * fpixProjective(FPIX *fpixs, l_float32 *vc, l_float32 inval) { l_int32 i, j, w, h, wpld; l_float32 val; l_float32 *datas, *datad, *lined; l_float32 x, y; FPIX *fpixd; if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", __func__, NULL); fpixGetDimensions(fpixs, &w, &h); if (!vc) return (FPIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = fpixGetData(fpixs); fpixd = fpixCreateTemplate(fpixs); fpixSetAllArbitrary(fpixd, inval); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); *(lined + j) = val; } } return fpixd; } /*! * \brief linearInterpolatePixelFloat() * * \param[in] datas ptr to beginning of float image data * \param[in] w, h dimensions of image * \param[in] x, y floating pt location for evaluation * \param[in] inval float value brought in from the outside when the * input x,y location is outside the image * \param[out] pval interpolated float value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a standard linear interpolation function.  It is
 *          equivalent to area weighting on each component, and
 *          avoids "jaggies" when rendering sharp edges.
 * 
*/ l_ok linearInterpolatePixelFloat(l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval) { l_int32 xpm, ypm, xp, yp, xf, yf; l_float32 v00, v01, v10, v11; l_float32 *lines; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = inval; if (!datas) return ERROR_INT("datas not defined", __func__, 1); /* Skip if off the edge */ if (x < 0.0 || y < 0.0 || x > w - 2.0 || y > h - 2.0) return 0; xpm = (l_int32)(16.0 * x + 0.5); ypm = (l_int32)(16.0 * y + 0.5); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) lept_stderr("xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Interpolate by area weighting. */ lines = datas + yp * w; v00 = (16.0 - xf) * (16.0 - yf) * (*(lines + xp)); v10 = xf * (16.0 - yf) * (*(lines + xp + 1)); v01 = (16.0 - xf) * yf * (*(lines + w + xp)); v11 = (l_float32)(xf) * yf * (*(lines + w + xp + 1)); *pval = (v00 + v01 + v10 + v11) / 256.0; return 0; } /*--------------------------------------------------------------------* * Thresholding to 1 bpp Pix * *--------------------------------------------------------------------*/ /*! * \brief fpixThresholdToPix() * * \param[in] fpix * \param[in] thresh * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) For all values of fpix that are <= thresh, sets the pixel
 *          in pixd to 1.
 * 
*/ PIX * fpixThresholdToPix(FPIX *fpix, l_float32 thresh) { l_int32 i, j, w, h, wpls, wpld; l_float32 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; if (!fpix) return (PIX *)ERROR_PTR("fpix not defined", __func__, NULL); fpixGetDimensions(fpix, &w, &h); datas = fpixGetData(fpix); wpls = fpixGetWpl(fpix); pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (lines[j] <= thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*--------------------------------------------------------------------* * Generate function from components * *--------------------------------------------------------------------*/ /*! * \brief pixComponentFunction() * * \param[in] pix 32 bpp rgb * \param[in] rnum, gnum, bnum coefficients for numerator * \param[in] rdenom, gdenom, bdenom coefficients for denominator * \return fpixd, or NULL on error * *
 * Notes:
 *      (1) This stores a function of the component values of each
 *          input pixel in %fpixd.
 *      (2) The function is a ratio of linear combinations of component values.
 *          There are two special cases for denominator coefficients:
 *          (a) The denominator is 1.0: input 0 for all denominator coefficients
 *          (b) Only one component is used in the denominator: input 1.0
 *              for that denominator component and 0.0 for the other two.
 *      (3) If the denominator is 0, multiply by an arbitrary number that
 *          is much larger than 1.  Choose 256 "arbitrarily".
 *
 * 
*/ FPIX * pixComponentFunction(PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, zerodenom, onedenom; l_float32 fnum, fdenom; l_uint32 *datas, *lines; l_float32 *datad, *lined, *recip; FPIX *fpixd; if (!pix || pixGetDepth(pix) != 32) return (FPIX *)ERROR_PTR("pix undefined or not 32 bpp", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); datas = pixGetData(pix); wpls = pixGetWpl(pix); fpixd = fpixCreate(w, h); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); zerodenom = (rdenom == 0.0 && gdenom == 0.0 && bdenom == 0.0) ? 1: 0; onedenom = ((rdenom == 1.0 && gdenom == 0.0 && bdenom == 0.0) || (rdenom == 0.0 && gdenom == 1.0 && bdenom == 0.0) || (rdenom == 0.0 && gdenom == 0.0 && bdenom == 1.0)) ? 1 : 0; recip = NULL; if (onedenom) { recip = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); recip[0] = 256; /* arbitrary large number */ for (i = 1; i < 256; i++) recip[i] = 1.0 / (l_float32)i; } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (zerodenom) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = rnum * rval + gnum * gval + bnum * bval; } } else if (onedenom && rdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[rval] * (rnum * rval + gnum * gval + bnum * bval); } } else if (onedenom && gdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[gval] * (rnum * rval + gnum * gval + bnum * bval); } } else if (onedenom && bdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[bval] * (rnum * rval + gnum * gval + bnum * bval); } } else { /* general case */ for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); fnum = rnum * rval + gnum * gval + bnum * bval; fdenom = rdenom * rval + gdenom * gval + bdenom * bval; lined[j] = (fdenom == 0) ? 256.0 * fnum : fnum / fdenom; } } } LEPT_FREE(recip); return fpixd; } leptonica-1.86.0/src/gifio.c000066400000000000000000000526341506303110300156160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file gifio.c *
 *
 *    Reading gif
 *          PIX            *pixReadStreamGif()
 *          PIX            *pixReadMemGif()
 *          static l_int32  gifReadFunc()
 *          static PIX     *gifToPix()
 *
 *    Writing gif
 *          l_int32         pixWriteStreamGif()
 *          l_int32         pixWriteMemGif()
 *          static l_int32  gifWriteFunc()
 *          static l_int32  pixToGif()
 *
 *    The initial version of this module was generously contribued by
 *    Antony Dovgal.
 *
 *    The functions that read and write from pix to gif-compressed memory,
 *    using gif internal functions DGifOpen() and EGifOpen() that are
 *    available in 5.1 and later, were contributed by Tobias Peirick.
 *
 *    Version information:
 *
 *    (1) This supports the gif library, version 5.1 or later, for which
 *        gif read-from-mem and write-to-mem allow these operations
 *        without writing temporary files.
 *    (2) There has never been a gif stream interface.  For versions
 *        before 5.1, it was necessary to use a file descriptor, and to
 *        generate a file stream from the low-level descriptor.  With the
 *        memory interface in 5.1 that can be used on all platforms, it
 *        is no longer necessary to use any API code with file descriptors.
 *    (3) The public interface changed with 5.0 and with 5.1, and we
 *        no longer support 4.6.1 and 5.0.
 *    (4) Version 5.1.2 came out on Jan 7, 2016.  Leptonica cannot
 *        successfully read gif files that it writes with this version;
 *        DGifSlurp() gets an internal error from an uninitialized array
 *        and returns failure.  The problem was fixed in 5.1.3.
 *
 *    Limitations:
 *
 *    (1) We do not support animated gif.  If the gif has more than one image,
 *        an error message is returned.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* --------------------------------------------------------------------*/ #if HAVE_LIBGIF || HAVE_LIBUNGIF /* defined in environ.h */ /* --------------------------------------------------------------------*/ #include "gif_lib.h" /* Interface that enables low-level GIF support for reading from memory */ static PIX * gifToPix(GifFileType *gif); /* Interface that enables low-level GIF support for writing to memory */ static l_int32 pixToGif(PIX *pix, GifFileType *gif); /*! For in-memory decoding of GIF; 5.1+ */ typedef struct GifReadBuffer { size_t size; /*!< size of buffer */ size_t pos; /*!< position relative to beginning of buffer */ const l_uint8 *cdata; /*!< data in the buffer */ } GifReadBuffer; /*! Low-level callback for in-memory decoding */ static l_int32 gifReadFunc(GifFileType *gif, GifByteType *dest, l_int32 bytesToRead); /*! Low-level callback for in-memory encoding */ static l_int32 gifWriteFunc(GifFileType *gif, const GifByteType *src, l_int32 bytesToWrite); /*---------------------------------------------------------------------* * Reading gif * *---------------------------------------------------------------------*/ /*! * \brief pixReadStreamGif() * * \param[in] fp file stream opened for reading * \return pix, or NULL on error */ PIX * pixReadStreamGif(FILE *fp) { l_uint8 *filedata; size_t filesize; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); /* Read data into memory from file */ rewind(fp); if ((filedata = l_binaryReadStream(fp, &filesize)) == NULL) return (PIX *)ERROR_PTR("filedata not read", __func__, NULL); /* Uncompress from memory */ pix = pixReadMemGif(filedata, filesize); LEPT_FREE(filedata); if (!pix) L_ERROR("failed to read gif from file data\n", __func__); return pix; } /*! * \brief pixReadMemGif() * * \param[in] cdata const; gif-encoded * \param[in] size bytes data * \return pix, or NULL on error * *
 * Notes:
 *     (1) For libgif version >= 5.1, this uses the DGifOpen() buffer
 *         interface.  No temp files are required.
 *     (2) For libgif version < 5.1, it was necessary to write the compressed
 *         data to file and read it back, and we couldn't use the GNU
 *         runtime extension fmemopen() because libgif doesn't have a file
 *         stream interface.
 * 
*/ PIX * pixReadMemGif(const l_uint8 *cdata, size_t size) { GifFileType *gif; GifReadBuffer buffer; /* 5.1+ and not 5.1.2 */ #if (GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)) L_ERROR("Require giflib-5.1 or later\n", __func__); return NULL; #endif /* < 5.1 */ #if GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 1 && GIFLIB_RELEASE == 2 /* 5.1.2 */ L_ERROR("Can't use giflib-5.1.2; suggest 5.1.3 or later\n", __func__); return NULL; #endif /* 5.1.2 */ if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", __func__, NULL); buffer.cdata = cdata; buffer.size = size; buffer.pos = 0; if ((gif = DGifOpen((void*)&buffer, gifReadFunc, NULL)) == NULL) return (PIX *)ERROR_PTR("could not open gif stream from memory", __func__, NULL); return gifToPix(gif); } static l_int32 gifReadFunc(GifFileType *gif, GifByteType *dest, l_int32 bytesToRead) { GifReadBuffer *buffer; l_int32 bytesRead; if ((buffer = (GifReadBuffer*)gif->UserData) == NULL) return ERROR_INT("UserData not set", __func__, -1); if(buffer->pos >= buffer->size || bytesToRead > buffer->size) return -1; bytesRead = (buffer->pos < buffer->size - bytesToRead) ? bytesToRead : buffer->size - buffer->pos; memcpy(dest, buffer->cdata + buffer->pos, bytesRead); buffer->pos += bytesRead; return bytesRead; } /*! * \brief gifToPix() * * \param[in] gif opened gif stream * \return pix, or NULL on error * *
 * Notes:
 *      (1) This decodes the pix from the compressed gif stream and
 *          closes the stream.
 *      (2) It is static so that the stream is not exposed to clients.
 *      (3) Leptonica does not support gifanim (more than 1 image in the file).
 * 
*/ static PIX * gifToPix(GifFileType *gif) { l_int32 wpl, i, j, w, h, d, cindex, ncolors, valid, nimages; l_int32 rval, gval, bval; l_uint32 *data, *line; PIX *pixd; PIXCMAP *cmap; ColorMapObject *gif_cmap; SavedImage si; int giferr; /* Read all the data, but use only the first image found */ if (DGifSlurp(gif) != GIF_OK) { DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("failed to read GIF data", __func__, NULL); } if (gif->SavedImages == NULL) { DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("no images found in GIF", __func__, NULL); } nimages = gif->ImageCount; if (nimages > 1) { DGifCloseFile(gif, &giferr); L_ERROR("There are %d images in the file; gifanim is not supported\n", __func__, nimages); return NULL; } si = gif->SavedImages[0]; w = si.ImageDesc.Width; h = si.ImageDesc.Height; if (w <= 0 || h <= 0) { DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("invalid image dimensions", __func__, NULL); } if (si.RasterBits == NULL) { DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("no raster data in GIF", __func__, NULL); } if (si.ImageDesc.ColorMap) { /* private cmap for this image */ gif_cmap = si.ImageDesc.ColorMap; } else if (gif->SColorMap) { /* global cmap for whole picture */ gif_cmap = gif->SColorMap; } else { /* don't know where to take cmap from */ DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("color map is missing", __func__, NULL); } ncolors = gif_cmap->ColorCount; if (ncolors <= 0 || ncolors > 256) { DGifCloseFile(gif, &giferr); return (PIX *)ERROR_PTR("ncolors is invalid", __func__, NULL); } if (ncolors <= 2) d = 1; else if (ncolors <= 4) d = 2; else if (ncolors <= 16) d = 4; else /* [17 ... 256] */ d = 8; cmap = pixcmapCreate(d); for (cindex = 0; cindex < ncolors; cindex++) { rval = gif_cmap->Colors[cindex].Red; gval = gif_cmap->Colors[cindex].Green; bval = gif_cmap->Colors[cindex].Blue; pixcmapAddColor(cmap, rval, gval, bval); } if ((pixd = pixCreate(w, h, d)) == NULL) { DGifCloseFile(gif, &giferr); pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("failed to allocate pixd", __func__, NULL); } pixSetInputFormat(pixd, IFF_GIF); pixSetColormap(pixd, cmap); pixcmapIsValid(cmap, pixd, &valid); if (!valid) { DGifCloseFile(gif, &giferr); pixDestroy(&pixd); pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("colormap is invalid", __func__, NULL); } wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 1) { for (j = 0; j < w; j++) { if (si.RasterBits[i * w + j]) SET_DATA_BIT(line, j); } } else if (d == 2) { for (j = 0; j < w; j++) SET_DATA_DIBIT(line, j, si.RasterBits[i * w + j]); } else if (d == 4) { for (j = 0; j < w; j++) SET_DATA_QBIT(line, j, si.RasterBits[i * w + j]); } else { /* d == 8 */ for (j = 0; j < w; j++) SET_DATA_BYTE(line, j, si.RasterBits[i * w + j]); } } /* Versions before 5.0 required un-interlacing to restore * the raster lines to normal order if the image * had been interlaced (for viewing in a browser): if (gif->Image.Interlace) { PIX *pixdi = pixUninterlaceGIF(pixd); pixTransferAllData(pixd, &pixdi, 0, 0); } * This is no longer required. */ DGifCloseFile(gif, &giferr); return pixd; } /*---------------------------------------------------------------------* * Writing gif * *---------------------------------------------------------------------*/ /*! * \brief pixWriteStreamGif() * * \param[in] fp file stream opened for writing * \param[in] pix 1, 2, 4, 8, 16 or 32 bpp * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) All output gif have colormaps.  If the pix is 32 bpp rgb,
 *          this quantizes the colors and writes out 8 bpp.
 *          If the pix is 16 bpp grayscale, it converts to 8 bpp first.
 * 
*/ l_ok pixWriteStreamGif(FILE *fp, PIX *pix) { l_uint8 *filedata; size_t filebytes, nbytes; if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixSetPadBits(pix, 0); if (pixWriteMemGif(&filedata, &filebytes, pix) != 0) { LEPT_FREE(filedata); return ERROR_INT("failure to gif encode pix", __func__, 1); } rewind(fp); nbytes = fwrite(filedata, 1, filebytes, fp); LEPT_FREE(filedata); if (nbytes != filebytes) return ERROR_INT("write error", __func__, 1); return 0; } /*! * \brief pixWriteMemGif() * * \param[out] pdata data of gif compressed image * \param[out] psize size of returned data * \param[in] pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See comments in pixReadMemGif()
 * 
*/ l_ok pixWriteMemGif(l_uint8 **pdata, size_t *psize, PIX *pix) { int giferr; l_int32 result; GifFileType *gif; L_BBUFFER *buffer; /* 5.1+ and not 5.1.2 */ #if (GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)) L_ERROR("Require giflib-5.1 or later\n", __func__); return 1; #endif /* < 5.1 */ #if GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 1 && GIFLIB_RELEASE == 2 /* 5.1.2 */ L_ERROR("Can't use giflib-5.1.2; suggest 5.1.3 or later\n", __func__); return 1; #endif /* 5.1.2 */ if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); *pdata = NULL; if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); *psize = 0; if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); if ((buffer = bbufferCreate(NULL, 0)) == NULL) return ERROR_INT("failed to create buffer", __func__, 1); if ((gif = EGifOpen((void*)buffer, gifWriteFunc, NULL)) == NULL) { bbufferDestroy(&buffer); return ERROR_INT("failed to create GIF image handle", __func__, 1); } result = pixToGif(pix, gif); EGifCloseFile(gif, &giferr); if (result == 0) { *pdata = bbufferDestroyAndSaveData(&buffer, psize); } else { bbufferDestroy(&buffer); } return result; } static l_int32 gifWriteFunc(GifFileType *gif, const GifByteType *src, l_int32 bytesToWrite) { L_BBUFFER *buffer; if ((buffer = (L_BBUFFER*)gif->UserData) == NULL) return ERROR_INT("UserData not set", __func__, -1); if(bbufferRead(buffer, (l_uint8*)src, bytesToWrite) == 0) return bytesToWrite; return 0; } /*! * \brief pixToGif() * * \param[in] pix 1, 2, 4, 8, 16 or 32 bpp * \param[in] gif opened gif stream * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This encodes the pix to the gif stream. The stream is not
 *          closed by this function.
 *      (2) It is static to make this function private.
 * 
*/ static l_int32 pixToGif(PIX *pix, GifFileType *gif) { char *text; l_int32 wpl, i, j, w, h, d, ncolor, rval, gval, bval, valid; l_int32 gif_ncolor = 0; l_uint32 *data, *line; PIX *pixd; PIXCMAP *cmap; ColorMapObject *gif_cmap; GifByteType *gif_line; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!gif) return ERROR_INT("gif not defined", __func__, 1); d = pixGetDepth(pix); if (d == 32) { pixd = pixConvertRGBToColormap(pix, 1); } else if (d > 1) { pixd = pixConvertTo8(pix, TRUE); } else { /* d == 1; make sure there's a colormap */ pixd = pixClone(pix); if (!pixGetColormap(pixd)) { cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); } } if (!pixd) return ERROR_INT("failed to convert to colormapped pix", __func__, 1); d = pixGetDepth(pixd); cmap = pixGetColormap(pixd); if (!cmap) { pixDestroy(&pixd); return ERROR_INT("cmap is missing", __func__, 1); } pixcmapIsValid(cmap, pixd, &valid); if (!valid) { pixDestroy(&pixd); return ERROR_INT("colormap is not valid", __func__, 1); } /* 'Round' the number of gif colors up to a power of 2 */ ncolor = pixcmapGetCount(cmap); for (i = 0; i <= 8; i++) { if ((1 << i) >= ncolor) { gif_ncolor = (1 << i); break; } } if (gif_ncolor < 1) { pixDestroy(&pixd); return ERROR_INT("number of colors is invalid", __func__, 1); } /* Save the cmap colors in a gif_cmap */ if ((gif_cmap = GifMakeMapObject(gif_ncolor, NULL)) == NULL) { pixDestroy(&pixd); return ERROR_INT("failed to create GIF color map", __func__, 1); } for (i = 0; i < gif_ncolor; i++) { rval = gval = bval = 0; if (ncolor > 0) { if (pixcmapGetColor(cmap, i, &rval, &gval, &bval) != 0) { pixDestroy(&pixd); GifFreeMapObject(gif_cmap); return ERROR_INT("failed to get color from color map", __func__, 1); } ncolor--; } gif_cmap->Colors[i].Red = rval; gif_cmap->Colors[i].Green = gval; gif_cmap->Colors[i].Blue = bval; } pixGetDimensions(pixd, &w, &h, NULL); if (EGifPutScreenDesc(gif, w, h, gif_cmap->BitsPerPixel, 0, gif_cmap) != GIF_OK) { pixDestroy(&pixd); GifFreeMapObject(gif_cmap); return ERROR_INT("failed to write screen description", __func__, 1); } GifFreeMapObject(gif_cmap); /* not needed after this point */ if (EGifPutImageDesc(gif, 0, 0, w, h, FALSE, NULL) != GIF_OK) { pixDestroy(&pixd); return ERROR_INT("failed to image screen description", __func__, 1); } data = pixGetData(pixd); wpl = pixGetWpl(pixd); if (d != 1 && d != 2 && d != 4 && d != 8) { pixDestroy(&pixd); return ERROR_INT("image depth is not in {1, 2, 4, 8}", __func__, 1); } if ((gif_line = (GifByteType *)LEPT_CALLOC(sizeof(GifByteType), w)) == NULL) { pixDestroy(&pixd); return ERROR_INT("mem alloc fail for data line", __func__, 1); } for (i = 0; i < h; i++) { line = data + i * wpl; /* Gif's way of setting the raster line up for compression */ for (j = 0; j < w; j++) { switch(d) { case 8: gif_line[j] = GET_DATA_BYTE(line, j); break; case 4: gif_line[j] = GET_DATA_QBIT(line, j); break; case 2: gif_line[j] = GET_DATA_DIBIT(line, j); break; case 1: gif_line[j] = GET_DATA_BIT(line, j); break; } } /* Compress and save the line */ if (EGifPutLine(gif, gif_line, w) != GIF_OK) { LEPT_FREE(gif_line); pixDestroy(&pixd); return ERROR_INT("failed to write data line into GIF", __func__, 1); } } /* Write a text comment. This must be placed after writing the * data (!!) Note that because libgif does not provide a function * for reading comments from file, you will need another way * to read comments. */ if ((text = pixGetText(pix)) != NULL) { if (EGifPutComment(gif, text) != GIF_OK) L_WARNING("gif comment not written\n", __func__); } LEPT_FREE(gif_line); pixDestroy(&pixd); return 0; } #if 0 /*---------------------------------------------------------------------* * Removing interlacing (reference only; not used) * *---------------------------------------------------------------------*/ /* GIF supports 4-way interlacing by raster lines. * Before 5.0, it was necessary for leptonica to restore interlaced * data to normal raster order when reading to a pix. With 5.0, * the de-interlacing is done by the library read function. * It is here only as a reference. */ static const l_int32 InterlacedOffset[] = {0, 4, 2, 1}; static const l_int32 InterlacedJumps[] = {8, 8, 4, 2}; static PIX * pixUninterlaceGIF(PIX *pixs) { l_int32 w, h, d, wpl, j, k, srow, drow; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); for (k = 0, srow = 0; k < 4; k++) { for (drow = InterlacedOffset[k]; drow < h; drow += InterlacedJumps[k], srow++) { lines = datas + srow * wpl; lined = datad + drow * wpl; for (j = 0; j < w; j++) memcpy(lined, lines, 4 * wpl); } } return pixd; } #endif /* -----------------------------------------------------------------*/ #endif /* HAVE_LIBGIF || HAVE_LIBUNGIF */ leptonica-1.86.0/src/gifiostub.c000066400000000000000000000052621506303110300165070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file gifiostub.c *
 *
 *     Stubs for gifio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* -----------------------------------------------------------------*/ #if (!HAVE_LIBGIF) && (!HAVE_LIBUNGIF) /* defined in environ.h */ /* -----------------------------------------------------------------*/ PIX * pixReadStreamGif(FILE *fp) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemGif(const l_uint8 *cdata, size_t size) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamGif(FILE *fp, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemGif(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* -----------------------------------------------------------------*/ #endif /* !HAVE_LIBGIF && !HAVE_LIBUNGIF */ leptonica-1.86.0/src/gplot.c000066400000000000000000001311711506303110300156400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file gplot.c *
 *
 *     Basic plotting functions
 *          GPLOT      *gplotCreate()
 *          void        gplotDestroy()
 *          l_int32     gplotAddPlot()
 *          l_int32     gplotSetScaling()
 *          PIX        *gplotMakeOutputPix()
 *          l_int32     gplotMakeOutput()
 *          l_int32     gplotGenCommandFile()
 *          l_int32     gplotGenDataFiles()
 *
 *     Quick, one-line plots
 *          l_int32     gplotSimple1()
 *          l_int32     gplotSimple2()
 *          l_int32     gplotSimpleN()
 *          PIX        *gplotSimplePix1()
 *          PIX        *gplotSimplePix2()
 *          PIX        *gplotSimplePixN()
 *          GPLOT      *gplotSimpleXY1()
 *          GPLOT      *gplotSimpleXY2()
 *          GPLOT      *gplotSimpleXYN()
 *          PIX        *gplotGeneralPix1()
 *          PIX        *gplotGeneralPix2()
 *          PIX        *gplotGeneralPixN()
 *
 *     Serialize for I/O
 *          GPLOT      *gplotRead()
 *          l_int32     gplotWrite()
 *
 *
 *     Utility for programmatic plotting using gnuplot 4.6 or later
 *     Enabled:
 *         ~ output to png (color), ps and eps (mono), latex (mono)
 *         ~ optional title for plot
 *         ~ optional x and y axis labels
 *         ~ multiple plots on one frame
 *         ~ optional label for each plot on the frame
 *         ~ optional log scaling on either or both axes
 *         ~ choice of 5 plot styles for each array of input data
 *         ~ choice of 2 plot modes, either using one input array
 *           (Y vs index) or two input arrays (Y vs X).  For functions
 *           that take two arrays, the first mode (Y vs index) is
 *           employed if the first array is NULL.
 *
 *     General usage:
 *         gplotCreate() initializes for plotting
 *         gplotAddPlot() for each plot on the frame
 *         gplotMakeOutput() to generate all output files and run gnuplot
 *         gplotDestroy() to clean up
 *
 *     Example of use:
 *         gplot = gplotCreate("tempskew", GPLOT_PNG, "Skew score vs angle",
 *                    "angle (deg)", "score");
 *         gplotAddPlot(gplot, natheta, nascore1, GPLOT_LINES, "plot 1");
 *         gplotAddPlot(gplot, natheta, nascore2, GPLOT_POINTS, "plot 2");
 *         gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y);
 *         gplotMakeOutput(gplot);
 *         gplotDestroy(&gplot);
 *
 *     Example usage of one-line plot generators:
 *
 *         -- Simple plots --
 *         Specify the root of output files, the output format,
 *         and the title (optional), but not the x and y coordinate labels
 *         or the plot labels.  The plotstyle defaults to GPLOT_LINES.
 *            gplotSimple2(na1, na2, GPLOT_PNG, "/tmp/lept/histo/gray",
 *                         "gray histogram");
 *         Multiple plots can be generated using gplotSimpleN().
 *
 *         -- Simple plots with more options --
 *         Specify the root of output files, the plotstyle, the output format,
 *         and optionally the title, but not the x and y coordinate labels
 *         or the plot labels.
 *            gplotSimpleXY1(na1, na2, GPLOT_LINES, GPLOT_PNG,
 *                           "/tmp/lept/histo/gray", "gray histogram");
 *         Multiple plots can be generated using gplotSimpleXYN().
 *
 *         -- Simple plots returning a pix --
 *         Specify only the title (optional).  The plotstyle defaults
 *         GPLOT_LINES and the output format is GPLOT_PNG..
 *         You can't specify the x and y coordinate labels or the plot label.
 *         The rootname of the generated files is determined internally.
 *            Pix *pix = gplotSimplePix2(na1, na2, "gray histogram");
 *         Multiple plots can be generated using gplotSimplePixN().
 *
 *         -- General plots returning a pix --
 *         Specify the root of the output files, the plotstyle, and optionally
 *         the title and axis labels.  This does not allow the individual
 *         plots to have plot labels, or to use different plotstyles
 *         for each plot.
 *            Pix *pix = gplotGeneralPix2(na1, na2, "/tmp/lept/histo/gray",
 *                                   GPLOT_LINES, "gray histogram",
 *                                   "pix value", "num pixels");
 *         Multiple plots can be generated using gplotGeneralPixN().
 *
 *     Note for output to GPLOT_LATEX:
 *         This creates latex output of the plot, named .tex.
 *         It needs to be placed in a latex file .tex
 *         that precedes the plot output with, at a minimum:
 *           \documentclass{article}
 *           \begin{document}
 *         and ends with
 *           \end{document}
 *         You can then generate a dvi file .dvi using
 *           latex .tex
 *         a PostScript file .ps from that using
 *           dvips -o .ps .dvi
 *         and pdf file .pdf from that using Ghostscript's ps2pdf:
 *           ps2pdf .ps .pdf
 *
 *     N.B. To generate plots:
 *          (1) It is necessary to have gnuplot installed on your Unix system,
 *              or wgnuplot on Windows.
 *          (2) You must enable debug operations:
 *                setLeptDebugOK(1);
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define Bufsize 512 /* hardcoded below in fscanf */ const char *gplotstylenames[] = {"with lines", "with points", "with impulses", "with linespoints", "with dots"}; const char *gplotfileoutputs[] = {"", "PNG", "PS", "EPS", "LATEX", "PNM"}; /*-----------------------------------------------------------------* * Basic Plotting Functions * *-----------------------------------------------------------------*/ /*! * \brief gplotCreate() * * \param[in] rootname root for all output files * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] title [optional] overall title * \param[in] xlabel [optional] x axis label * \param[in] ylabel [optional] y axis label * \return gplot, or NULL on error * *
 * Notes:
 *      (1) This initializes the plot.
 *      (2) The 'title', 'xlabel' and 'ylabel' strings can have spaces,
 *          double quotes and backquotes, but not single quotes.
 * 
*/ GPLOT * gplotCreate(const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel) { char *newroot; char buf[Bufsize]; l_int32 badchar; GPLOT *gplot; if (!rootname) return (GPLOT *)ERROR_PTR("rootname not defined", __func__, NULL); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_LATEX && outformat != GPLOT_PNM) return (GPLOT *)ERROR_PTR("outformat invalid", __func__, NULL); stringCheckForChars(rootname, "`;&|><\"?*$()", &badchar); if (badchar) /* danger of command injection */ return (GPLOT *)ERROR_PTR("invalid rootname", __func__, NULL); #if !defined(HAVE_LIBPNG) if (outformat == GPLOT_PNG) { L_WARNING("png library missing; output pnm format\n", __func__); outformat = GPLOT_PNM; } #endif gplot = (GPLOT *)LEPT_CALLOC(1, sizeof(GPLOT)); gplot->cmddata = sarrayCreate(0); gplot->datanames = sarrayCreate(0); gplot->plotdata = sarrayCreate(0); gplot->plotlabels = sarrayCreate(0); gplot->plotstyles = numaCreate(0); /* Save title, labels, rootname, outformat, cmdname, outname */ newroot = genPathname(rootname, NULL); gplot->rootname = newroot; gplot->outformat = outformat; snprintf(buf, Bufsize, "%s.cmd", rootname); gplot->cmdname = stringNew(buf); if (outformat == GPLOT_PNG) snprintf(buf, Bufsize, "%s.png", newroot); else if (outformat == GPLOT_PS) snprintf(buf, Bufsize, "%s.ps", newroot); else if (outformat == GPLOT_EPS) snprintf(buf, Bufsize, "%s.eps", newroot); else if (outformat == GPLOT_LATEX) snprintf(buf, Bufsize, "%s.tex", newroot); else if (outformat == GPLOT_PNM) snprintf(buf, Bufsize, "%s.pnm", newroot); gplot->outname = stringNew(buf); if (title) gplot->title = stringNew(title); if (xlabel) gplot->xlabel = stringNew(xlabel); if (ylabel) gplot->ylabel = stringNew(ylabel); return gplot; } /*! * \brief gplotDestroy() * * \param[in,out] pgplot will be set to null before returning */ void gplotDestroy(GPLOT **pgplot) { GPLOT *gplot; if (pgplot == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((gplot = *pgplot) == NULL) return; LEPT_FREE(gplot->rootname); LEPT_FREE(gplot->cmdname); sarrayDestroy(&gplot->cmddata); sarrayDestroy(&gplot->datanames); sarrayDestroy(&gplot->plotdata); sarrayDestroy(&gplot->plotlabels); numaDestroy(&gplot->plotstyles); LEPT_FREE(gplot->outname); if (gplot->title) LEPT_FREE(gplot->title); if (gplot->xlabel) LEPT_FREE(gplot->xlabel); if (gplot->ylabel) LEPT_FREE(gplot->ylabel); LEPT_FREE(gplot); *pgplot = NULL; } /*! * \brief gplotAddPlot() * * \param[in] gplot * \param[in] nax [optional] numa: set to null for Y_VS_I; * required for Y_VS_X * \param[in] nay numa; required for both Y_VS_I and Y_VS_X * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] plotlabel [optional] label for individual plot * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) There are 2 options for (x,y) values:
 *            o  To plot an array vs a linear function of the
 *               index, set %nax = NULL.
 *            o  To plot one array vs another, use both %nax and %nay.
 *      (2) If %nax is NULL, the x value corresponding to the i-th
 *          value of %nay is found from the startx and delx fields
 *          in %nay:
 *               x = startx + i * delx
 *          These are set with numaSetParameters().  Their default
 *          values are startx = 0.0, delx = 1.0.
 *      (3) If %nax is defined, it must be the same size as %nay, and
 *          must have at least one number.
 *      (4) The 'plotlabel' string can have spaces, double
 *          quotes and backquotes, but not single quotes.
 * 
*/ l_ok gplotAddPlot(GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plotlabel) { char buf[Bufsize]; char emptystring[] = ""; char *datastr, *title; l_int32 n, i; l_float32 valx, valy, startx, delx; SARRAY *sa; if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return ERROR_INT("invalid plotstyle", __func__, 1); if ((n = numaGetCount(nay)) == 0) return ERROR_INT("no points to plot", __func__, 1); if (nax && (n != numaGetCount(nax))) return ERROR_INT("nax and nay sizes differ", __func__, 1); if (n == 1 && plotstyle == GPLOT_LINES) { L_INFO("only 1 pt; changing style to points\n", __func__); plotstyle = GPLOT_POINTS; } /* Save plotstyle and plotlabel */ numaGetParameters(nay, &startx, &delx); numaAddNumber(gplot->plotstyles, plotstyle); if (plotlabel) { title = stringNew(plotlabel); sarrayAddString(gplot->plotlabels, title, L_INSERT); } else { sarrayAddString(gplot->plotlabels, emptystring, L_COPY); } /* Generate and save data filename */ gplot->nplots++; snprintf(buf, Bufsize, "%s.data.%d", gplot->rootname, gplot->nplots); sarrayAddString(gplot->datanames, buf, L_COPY); /* Generate data and save as a string */ sa = sarrayCreate(n); for (i = 0; i < n; i++) { if (nax) numaGetFValue(nax, i, &valx); else valx = startx + i * delx; numaGetFValue(nay, i, &valy); snprintf(buf, Bufsize, "%f %f\n", valx, valy); sarrayAddString(sa, buf, L_COPY); } datastr = sarrayToString(sa, 0); sarrayAddString(gplot->plotdata, datastr, L_INSERT); sarrayDestroy(&sa); return 0; } /*! * \brief gplotSetScaling() * * \param[in] gplot * \param[in] scaling GPLOT_LINEAR_SCALE, GPLOT_LOG_SCALE_X, * GPLOT_LOG_SCALE_Y, GPLOT_LOG_SCALE_X_Y * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) By default, the x and y axis scaling is linear.
 *      (2) Call this function to set semi-log or log-log scaling.
 * 
*/ l_ok gplotSetScaling(GPLOT *gplot, l_int32 scaling) { if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); if (scaling != GPLOT_LINEAR_SCALE && scaling != GPLOT_LOG_SCALE_X && scaling != GPLOT_LOG_SCALE_Y && scaling != GPLOT_LOG_SCALE_X_Y) return ERROR_INT("invalid gplot scaling", __func__, 1); gplot->scaling = scaling; return 0; } /*! * \brief gplotMakeOutputPix() * * \param[in] gplot * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This wraps gplotMakeOutput(), and returns a pix.
 *          See gplotMakeOutput() for details.
 *      (2) The gplot output format must be an image (png or pnm).
 * 
*/ PIX * gplotMakeOutputPix(GPLOT *gplot) { if (!gplot) return (PIX *)ERROR_PTR("gplot not defined", __func__, NULL); if (gplot->outformat != GPLOT_PNG && gplot->outformat != GPLOT_PNM) return (PIX *)ERROR_PTR("output format not an image", __func__, NULL); if (gplotMakeOutput(gplot)) return (PIX *)ERROR_PTR("plot output not made", __func__, NULL); return pixRead(gplot->outname); } /*! * \brief gplotMakeOutput() * * \param[in] gplot * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This uses gplot and the new arrays to add a plot
 *          to the output, by writing a new data file and appending
 *          the appropriate plot commands to the command file.
 *      (2) Along with gplotMakeOutputPix(), these are the only functions
 *          in this file that requires the gnuplot executable to
 *          actually generate the plot.
 *      (3) The command file name for unix is canonical (i.e., directory /tmp)
 *          but the temp filename paths in the command file must be correct.
 *      (4) The gnuplot program for Windows is wgnuplot.exe.
 * 
*/ l_ok gplotMakeOutput(GPLOT *gplot) { char buf[Bufsize]; char *cmdname; if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); if (!LeptDebugOK) { L_INFO("running gnuplot is disabled; " "use setLeptDebugOK(1) to enable\n", __func__); return 0; } #ifdef OS_IOS /* iOS 11 does not support system() */ return ERROR_INT("iOS 11 does not support system()", __func__, 0); #endif /* OS_IOS */ gplotGenCommandFile(gplot); gplotGenDataFiles(gplot); cmdname = genPathname(gplot->cmdname, NULL); #ifndef _WIN32 snprintf(buf, Bufsize, "gnuplot %s", cmdname); #else snprintf(buf, Bufsize, "wgnuplot %s", cmdname); #endif /* _WIN32 */ callSystemDebug(buf); /* gnuplot || wgnuplot */ LEPT_FREE(cmdname); return 0; } /*! * \brief gplotGenCommandFile() * * \param[in] gplot * \return 0 if OK, 1 on error */ l_ok gplotGenCommandFile(GPLOT *gplot) { char buf[Bufsize]; char *cmdstr, *plotlabel, *dataname; l_int32 i, plotstyle, nplots; FILE *fp; if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); /* Remove any previous command data */ sarrayClear(gplot->cmddata); /* Generate command data instructions */ if (gplot->title) { /* set title */ snprintf(buf, Bufsize, "set title '%s'", gplot->title); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->xlabel) { /* set xlabel */ snprintf(buf, Bufsize, "set xlabel '%s'", gplot->xlabel); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->ylabel) { /* set ylabel */ snprintf(buf, Bufsize, "set ylabel '%s'", gplot->ylabel); sarrayAddString(gplot->cmddata, buf, L_COPY); } /* Set terminal type and output */ if (gplot->outformat == GPLOT_PNG) { snprintf(buf, Bufsize, "set terminal png; set output '%s'", gplot->outname); } else if (gplot->outformat == GPLOT_PS) { snprintf(buf, Bufsize, "set terminal postscript; set output '%s'", gplot->outname); } else if (gplot->outformat == GPLOT_EPS) { snprintf(buf, Bufsize, "set terminal postscript eps; set output '%s'", gplot->outname); } else if (gplot->outformat == GPLOT_LATEX) { snprintf(buf, Bufsize, "set terminal latex; set output '%s'", gplot->outname); } else if (gplot->outformat == GPLOT_PNM) { snprintf(buf, Bufsize, "set terminal pbm color; set output '%s'", gplot->outname); } sarrayAddString(gplot->cmddata, buf, L_COPY); if (gplot->scaling == GPLOT_LOG_SCALE_X || gplot->scaling == GPLOT_LOG_SCALE_X_Y) { snprintf(buf, Bufsize, "set logscale x"); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->scaling == GPLOT_LOG_SCALE_Y || gplot->scaling == GPLOT_LOG_SCALE_X_Y) { snprintf(buf, Bufsize, "set logscale y"); sarrayAddString(gplot->cmddata, buf, L_COPY); } nplots = sarrayGetCount(gplot->datanames); for (i = 0; i < nplots; i++) { plotlabel = sarrayGetString(gplot->plotlabels, i, L_NOCOPY); dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); numaGetIValue(gplot->plotstyles, i, &plotstyle); if (nplots == 1) { snprintf(buf, Bufsize, "plot '%s' title '%s' %s", dataname, plotlabel, gplotstylenames[plotstyle]); } else { if (i == 0) snprintf(buf, Bufsize, "plot '%s' title '%s' %s, \\", dataname, plotlabel, gplotstylenames[plotstyle]); else if (i < nplots - 1) snprintf(buf, Bufsize, " '%s' title '%s' %s, \\", dataname, plotlabel, gplotstylenames[plotstyle]); else snprintf(buf, Bufsize, " '%s' title '%s' %s", dataname, plotlabel, gplotstylenames[plotstyle]); } sarrayAddString(gplot->cmddata, buf, L_COPY); } /* Write command data to file */ cmdstr = sarrayToString(gplot->cmddata, 1); if ((fp = fopenWriteStream(gplot->cmdname, "w")) == NULL) { L_ERROR("stream not opened for command: %s\n", __func__, cmdstr); LEPT_FREE(cmdstr); return 1; } fwrite(cmdstr, 1, strlen(cmdstr), fp); fclose(fp); LEPT_FREE(cmdstr); return 0; } /*! * \brief gplotGenDataFiles() * * \param[in] gplot * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pathnames in the gplot command file are actual pathnames,
 *          which can be in temp directories.  Consequently, they must not be
 *          rewritten by calling fopenWriteStream(), and we use fopen().
 * 
*/ l_ok gplotGenDataFiles(GPLOT *gplot) { char *plotdata, *dataname; l_int32 i, nplots; FILE *fp; if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); nplots = sarrayGetCount(gplot->datanames); for (i = 0; i < nplots; i++) { plotdata = sarrayGetString(gplot->plotdata, i, L_NOCOPY); dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); if ((fp = fopen(dataname, "w")) == NULL) return ERROR_INT_1("datafile stream not opened", dataname, __func__, 1); fwrite(plotdata, 1, strlen(plotdata), fp); fclose(fp); } return 0; } /*-----------------------------------------------------------------* * Quick one-line plots * *-----------------------------------------------------------------*/ /*! * \brief gplotSimple1() * * \param[in] na numa; plot Y_VS_I * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional], can be NULL * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a line plot of a numa, where the array value
 *          is plotted vs the array index.  The plot is generated
 *          in the specified output format; the title  is optional.
 *      (2) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 * 
*/ l_ok gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; gplot = gplotSimpleXY1(NULL, na, GPLOT_LINES, outformat, outroot, title); if (!gplot) return ERROR_INT("failed to generate plot", __func__, 1); gplotDestroy(&gplot); return 0; } /*! * \brief gplotSimple2() * * \param[in] na1 numa; plot with Y_VS_I * \param[in] na2 ditto * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a line plot of two numa, where the array values
 *          are each plotted vs the array index.  The plot is generated
 *          in the specified output format; the title  is optional.
 *      (2) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 * 
*/ l_ok gplotSimple2(NUMA *na1, NUMA *na2, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; gplot = gplotSimpleXY2(NULL, na1, na2, GPLOT_LINES, outformat, outroot, title); if (!gplot) return ERROR_INT("failed to generate plot", __func__, 1); gplotDestroy(&gplot); return 0; } /*! * \brief gplotSimpleN() * * \param[in] naa numaa; plot Y_VS_I for each numa * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a line plot of all numas in a numaa (array of numa),
 *          where the array values are each plotted vs the array index.
 *          The plot is generated in the specified output format;
 *          the title  is optional.
 *      (2) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 * 
*/ l_ok gplotSimpleN(NUMAA *naa, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; gplot = gplotSimpleXYN(NULL, naa, GPLOT_LINES, outformat, outroot, title); if (!gplot) return ERROR_INT("failed to generate plot", __func__, 1); gplotDestroy(&gplot); return 0; } /*! * \brief gplotSimplePix1() * * \param[in] na numa; plot Y_VS_I * \param[in] title [optional], can be NULL * \return pix of plot, or null on error * *
 * Notes:
 *      (1) This generates a line plot of a numa as a pix, where the array
 *          value is plotted vs the array index.  The title is optional.
 *      (2) The temporary plot file is a png; its name is generated internally
 *          and stored in gplot.
 * 
*/ PIX * gplotSimplePix1(NUMA *na, const char *title) { char buf[64]; static l_atomic index; GPLOT *gplot; PIX *pix; if (!na) return (PIX *)ERROR_PTR("na not defined", __func__, NULL); lept_mkdir("lept/gplot/pix"); snprintf(buf, sizeof(buf), "/tmp/lept/gplot/pix1.%d", index++); gplot = gplotSimpleXY1(NULL, na, GPLOT_LINES, GPLOT_PNG, buf, title); if (!gplot) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); pix = pixRead(gplot->outname); gplotDestroy(&gplot); if (!pix) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); return pix; } /*! * \brief gplotSimplePix2() * * \param[in] na1 numa; plot with Y_VS_I * \param[in] na2 ditto * \param[in] title [optional], can be NULL * \return pix of plot, or null on error * *
 * Notes:
 *      (1) This generates a pix with line plots of two numa, where each of
 *          two arrays is plotted vs the array index.  the title is optional.
 *      (2) The temporary plot file is a png; its name is generated internally
 *          and stored in gplot.
 * 
*/ PIX * gplotSimplePix2(NUMA *na1, NUMA *na2, const char *title) { char buf[64]; static l_atomic index; GPLOT *gplot; PIX *pix; if (!na1 || !na2) return (PIX *)ERROR_PTR("both na1, na2 not defined", __func__, NULL); lept_mkdir("lept/gplot/pix"); snprintf(buf, sizeof(buf), "/tmp/lept/gplot/pix2.%d", index++); gplot = gplotSimpleXY2(NULL, na1, na2, GPLOT_LINES, GPLOT_PNG, buf, title); if (!gplot) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); pix = pixRead(gplot->outname); gplotDestroy(&gplot); if (!pix) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); return pix; } /*! * \brief gplotSimplePixN() * * \param[in] naa numaa; plot Y_VS_I for each numa * \param[in] title [optional], can be NULL * \return pix of plot, or null on error * *
 * Notes:
 *      (1) This generates a pix with an arbitrary number of line plots,
 *          each coming from a numa in %naa.  Each array value is plotted
 *          vs the array index.  The title is optional.
 *      (2) The temporary plot file is a png; its name is generated internally
 *          and stored in gplot.
 * 
*/ PIX * gplotSimplePixN(NUMAA *naa, const char *title) { char buf[64]; static l_atomic index; GPLOT *gplot; PIX *pix; if (!naa) return (PIX *)ERROR_PTR("naa not defined", __func__, NULL); lept_mkdir("lept/gplot/pix"); snprintf(buf, sizeof(buf), "/tmp/lept/gplot/pixN.%d", index++); gplot = gplotSimpleXYN(NULL, naa, GPLOT_LINES, GPLOT_PNG, buf, title); if (!gplot) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); pix = pixRead(gplot->outname); gplotDestroy(&gplot); if (!pix) return (PIX *)ERROR_PTR("failed to generate plot", __func__, NULL); return pix; } /*! * \brief gplotSimpleXY1() * * \param[in] nax [optional] * \param[in] nay [required] * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional], can be NULL * \return gplot or null on error * *
 * Notes:
 *      (1) This generates a plot of a %nay vs %nax, generated in
 *          the specified output format.  The title is optional.
 *      (2) Use 0 for default plotstyle (lines).
 *      (3) %nax is optional.  If NULL, %nay is plotted against
 *          the array index.
 *      (4) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 *      (5) The returned gplot must be destroyed by the caller.
 * 
*/ GPLOT * gplotSimpleXY1(NUMA *nax, NUMA *nay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; if (!nay) return (GPLOT *)ERROR_PTR("nay not defined", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (GPLOT *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_LATEX && outformat != GPLOT_PNM) return (GPLOT *)ERROR_PTR("invalid outformat", __func__, NULL); if (!outroot) return (GPLOT *)ERROR_PTR("outroot not specified", __func__, NULL); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return (GPLOT *)ERROR_PTR("gplot not made", __func__, NULL); gplotAddPlot(gplot, nax, nay, plotstyle, NULL); gplotMakeOutput(gplot); return gplot; } /*! * \brief gplotSimpleXY2() * * \param[in] nax [optional], can be NULL * \param[in] nay1 * \param[in] nay2 * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional] * \return gplot or null on error * *
 * Notes:
 *      (1) This generates plots of %nay1 and %nay2 against %nax, generated
 *          in the specified output format.  The title is optional.
 *      (2) Use 0 for default plotstyle (lines).
 *      (3) %nax is optional.  If NULL, %nay1 and %nay2 are plotted
 *          against the array index.
 *      (4) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 *      (5) The returned gplot must be destroyed by the caller.
 * 
*/ GPLOT * gplotSimpleXY2(NUMA *nax, NUMA *nay1, NUMA *nay2, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; if (!nay1 || !nay2) return (GPLOT *)ERROR_PTR("nay1 and nay2 not both defined", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (GPLOT *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_LATEX && outformat != GPLOT_PNM) return (GPLOT *)ERROR_PTR("invalid outformat", __func__, NULL); if (!outroot) return (GPLOT *)ERROR_PTR("outroot not specified", __func__, NULL); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return (GPLOT *)ERROR_PTR("gplot not made", __func__, NULL); gplotAddPlot(gplot, nax, nay1, plotstyle, NULL); gplotAddPlot(gplot, nax, nay2, plotstyle, NULL); gplotMakeOutput(gplot); return gplot; } /*! * \brief gplotSimpleXYN() * * \param[in] nax [optional]; can be NULL * \param[in] naay numaa of arrays to plot against %nax * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, * GPLOT_LATEX, GPLOT_PNM * \param[in] outroot root of output files * \param[in] title [optional] * \return gplot or null on error * *
 * Notes:
 *      (1) This generates plots of each Numa in %naa against %nax,
 *          generated in the specified output format.  The title is optional.
 *      (2) Use 0 for default plotstyle (lines).
 *      (3) %nax is optional.  If NULL, each Numa array is plotted against
 *          the array index.
 *      (4) When calling these simple plot functions more than once, use
 *          different %outroot to avoid overwriting the output files.
 *      (5) The returned gplot must be destroyed by the caller.
 * 
*/ GPLOT * gplotSimpleXYN(NUMA *nax, NUMAA *naay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title) { l_int32 i, n; GPLOT *gplot; NUMA *nay; if (!naay) return (GPLOT *)ERROR_PTR("naay not defined", __func__, NULL); if ((n = numaaGetCount(naay)) == 0) return (GPLOT *)ERROR_PTR("no numa in array", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (GPLOT *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_LATEX && outformat != GPLOT_PNM) return (GPLOT *)ERROR_PTR("invalid outformat", __func__, NULL); if (!outroot) return (GPLOT *)ERROR_PTR("outroot not specified", __func__, NULL); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return (GPLOT *)ERROR_PTR("gplot not made", __func__, NULL); for (i = 0; i < n; i++) { nay = numaaGetNuma(naay, i, L_CLONE); gplotAddPlot(gplot, nax, nay, plotstyle, NULL); numaDestroy(&nay); } gplotMakeOutput(gplot); return gplot; } /*! * \brief gplotGeneralPix1() * * \param[in] na data array * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] rootname root for all output files * \param[in] title [optional] overall title * \param[in] xlabel [optional] x axis label * \param[in] ylabel [optional] y axis label * \return pix of plot, or NULL on error * *
 * Notes:
 *      (1) The 'title', 'xlabel' and 'ylabel' strings can have spaces,
 *          double quotes and backquotes, but not single quotes.
 * 
*/ PIX * gplotGeneralPix1(NUMA *na, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel) { GPLOT *gplot; PIX *pix; if (!na) return (PIX *)ERROR_PTR("na not defined", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (PIX *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (!rootname) return (PIX *)ERROR_PTR("rootname not defined", __func__, NULL); gplot = gplotCreate(rootname, GPLOT_PNG, title, xlabel, ylabel); if (!gplot) return (PIX *)ERROR_PTR("gplot not made", __func__, NULL); gplotAddPlot(gplot, NULL, na, plotstyle, NULL); pix = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); return pix; } /*! * \brief gplotGeneralPix2() * * \param[in] na1 x-axis data array * \param[in] na2 y-axis data array * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] rootname root for all output files * \param[in] title [optional] overall title * \param[in] xlabel [optional] x axis label * \param[in] ylabel [optional] y axis label * \return pix of plot, or NULL on error * *
 * Notes:
 *      (1) The 'title', 'xlabel' and 'ylabel' strings can have spaces,
 *          double quotes and backquotes, but not single quotes.
 * 
*/ PIX * gplotGeneralPix2(NUMA *na1, NUMA *na2, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel) { GPLOT *gplot; PIX *pix; if (!na1) return (PIX *)ERROR_PTR("na1 not defined", __func__, NULL); if (!na2) return (PIX *)ERROR_PTR("na2 not defined", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (PIX *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (!rootname) return (PIX *)ERROR_PTR("rootname not defined", __func__, NULL); gplot = gplotCreate(rootname, GPLOT_PNG, title, xlabel, ylabel); if (!gplot) return (PIX *)ERROR_PTR("gplot not made", __func__, NULL); gplotAddPlot(gplot, na1, na2, plotstyle, NULL); pix = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); return pix; } /*! * \brief gplotGeneralPixN() * * \param[in] nax x-axis data array * \param[in] naay array of y-axis data arrays * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS * \param[in] rootname root for all output files * \param[in] title [optional] overall title * \param[in] xlabel [optional] x axis label * \param[in] ylabel [optional] y axis label * \return pix of plot, or NULL on error * *
 * Notes:
 *      (1) The 'title', 'xlabel' and 'ylabel' strings can have spaces,
 *          double quotes and backquotes, but not single quotes.
 * 
*/ PIX * gplotGeneralPixN(NUMA *nax, NUMAA *naay, l_int32 plotstyle, const char *rootname, const char *title, const char *xlabel, const char *ylabel) { l_int32 i, n; GPLOT *gplot; NUMA *nay; PIX *pix; if (!nax) return (PIX *)ERROR_PTR("nax not defined", __func__, NULL); if (!naay) return (PIX *)ERROR_PTR("naay not defined", __func__, NULL); if ((n = numaaGetCount(naay)) == 0) return (PIX *)ERROR_PTR("no numa in array", __func__, NULL); if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) return (PIX *)ERROR_PTR("invalid plotstyle", __func__, NULL); if (!rootname) return (PIX *)ERROR_PTR("rootname not defined", __func__, NULL); gplot = gplotCreate(rootname, GPLOT_PNG, title, xlabel, ylabel); if (!gplot) return (PIX *)ERROR_PTR("gplot not made", __func__, NULL); for (i = 0; i < n; i++) { nay = numaaGetNuma(naay, i, L_CLONE); gplotAddPlot(gplot, nax, nay, plotstyle, NULL); numaDestroy(&nay); } pix = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); return pix; } /*-----------------------------------------------------------------* * Serialize for I/O * *-----------------------------------------------------------------*/ /*! * \brief gplotRead() * * \param[in] filename * \return gplot, or NULL on error */ GPLOT * gplotRead(const char *filename) { char buf[Bufsize]; char *rootname, *title, *xlabel, *ylabel, *ignores; l_int32 outformat, ret, version, ignore; FILE *fp; GPLOT *gplot; if (!filename) return (GPLOT *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (GPLOT *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); ret = fscanf(fp, "Gplot Version %d\n", &version); if (ret != 1) { fclose(fp); return (GPLOT *)ERROR_PTR_1("not a gplot file", filename, __func__, NULL); } if (version != GPLOT_VERSION_NUMBER) { fclose(fp); return (GPLOT *)ERROR_PTR_1("invalid gplot version", filename, __func__, NULL); } ignore = fscanf(fp, "Rootname: %511s\n", buf); /* Bufsize - 1 */ rootname = stringNew(buf); ignore = fscanf(fp, "Output format: %d\n", &outformat); ignores = fgets(buf, Bufsize, fp); /* Title: ... */ title = stringNew(buf + 7); title[strlen(title) - 1] = '\0'; ignores = fgets(buf, Bufsize, fp); /* X axis label: ... */ xlabel = stringNew(buf + 14); xlabel[strlen(xlabel) - 1] = '\0'; ignores = fgets(buf, Bufsize, fp); /* Y axis label: ... */ ylabel = stringNew(buf + 14); ylabel[strlen(ylabel) - 1] = '\0'; gplot = gplotCreate(rootname, outformat, title, xlabel, ylabel); LEPT_FREE(rootname); LEPT_FREE(title); LEPT_FREE(xlabel); LEPT_FREE(ylabel); if (!gplot) { fclose(fp); return (GPLOT *)ERROR_PTR_1("gplot not made", filename, __func__, NULL); } sarrayDestroy(&gplot->cmddata); sarrayDestroy(&gplot->datanames); sarrayDestroy(&gplot->plotdata); sarrayDestroy(&gplot->plotlabels); numaDestroy(&gplot->plotstyles); ignore = fscanf(fp, "Commandfile name: %s\n", buf); /* Bufsize - 1 */ stringReplace(&gplot->cmdname, buf); ignore = fscanf(fp, "\nCommandfile data:"); gplot->cmddata = sarrayReadStream(fp); ignore = fscanf(fp, "\nDatafile names:"); gplot->datanames = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot data:"); gplot->plotdata = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot titles:"); gplot->plotlabels = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot styles:"); gplot->plotstyles = numaReadStream(fp); ignore = fscanf(fp, "Number of plots: %d\n", &gplot->nplots); ignore = fscanf(fp, "Output file name: %s\n", buf); stringReplace(&gplot->outname, buf); ignore = fscanf(fp, "Axis scaling: %d\n", &gplot->scaling); fclose(fp); return gplot; } /*! * \brief gplotWrite() * * \param[in] filename * \param[in] gplot * \return 0 if OK; 1 on error */ l_ok gplotWrite(const char *filename, GPLOT *gplot) { FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!gplot) return ERROR_INT("gplot not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); fprintf(fp, "Gplot Version %d\n", GPLOT_VERSION_NUMBER); fprintf(fp, "Rootname: %s\n", gplot->rootname); fprintf(fp, "Output format: %d\n", gplot->outformat); fprintf(fp, "Title: %s\n", gplot->title); fprintf(fp, "X axis label: %s\n", gplot->xlabel); fprintf(fp, "Y axis label: %s\n", gplot->ylabel); fprintf(fp, "Commandfile name: %s\n", gplot->cmdname); fprintf(fp, "\nCommandfile data:"); sarrayWriteStream(fp, gplot->cmddata); fprintf(fp, "\nDatafile names:"); sarrayWriteStream(fp, gplot->datanames); fprintf(fp, "\nPlot data:"); sarrayWriteStream(fp, gplot->plotdata); fprintf(fp, "\nPlot titles:"); sarrayWriteStream(fp, gplot->plotlabels); fprintf(fp, "\nPlot styles:"); numaWriteStderr(gplot->plotstyles); fprintf(fp, "Number of plots: %d\n", gplot->nplots); fprintf(fp, "Output file name: %s\n", gplot->outname); fprintf(fp, "Axis scaling: %d\n", gplot->scaling); fclose(fp); return 0; } leptonica-1.86.0/src/gplot.h000066400000000000000000000073461506303110300156530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_GPLOT_H #define LEPTONICA_GPLOT_H /*! * \file gplot.h * *
 *   Data structures and parameters for generating gnuplot files
 *
 *   We used to support X11 output, but recent versions of gnuplot do not
 *   support the X11 terminal.  To get display to your screen, use
 *   GPLOT_PNG output; e.g.,
 *       gplotSimple1(na, GPLOT_PNG, "/tmp/someroot", ...);
 *       l_fileDisplay("/tmp/someroot.png", ...);
 * 
*/ #define GPLOT_VERSION_NUMBER 1 #define NUM_GPLOT_STYLES 5 enum GPLOT_STYLE { GPLOT_LINES = 0, GPLOT_POINTS = 1, GPLOT_IMPULSES = 2, GPLOT_LINESPOINTS = 3, GPLOT_DOTS = 4 }; #define NUM_GPLOT_OUTPUTS 6 enum GPLOT_OUTPUT { GPLOT_NONE = 0, GPLOT_PNG = 1, GPLOT_PS = 2, GPLOT_EPS = 3, GPLOT_LATEX = 4, GPLOT_PNM = 5, }; enum GPLOT_SCALING { GPLOT_LINEAR_SCALE = 0, /*!< default */ GPLOT_LOG_SCALE_X = 1, GPLOT_LOG_SCALE_Y = 2, GPLOT_LOG_SCALE_X_Y = 3 }; extern const char *gplotstylenames[]; /*!< used in gnuplot cmd file */ extern const char *gplotfileoutputs[]; /*!< used in simple file input */ /*! Data structure for generating gnuplot files */ struct GPlot { char *rootname; /*!< for cmd, data, output */ char *cmdname; /*!< command file name */ struct Sarray *cmddata; /*!< command file contents */ struct Sarray *datanames; /*!< data file names */ struct Sarray *plotdata; /*!< plot data (1 string/file) */ struct Sarray *plotlabels; /*!< label for each individual plot */ struct Numa *plotstyles; /*!< plot style for individual plots */ l_int32 nplots; /*!< current number of plots */ char *outname; /*!< output file name */ l_int32 outformat; /*!< GPLOT_OUTPUT values */ l_int32 scaling; /*!< GPLOT_SCALING values */ char *title; /*!< optional */ char *xlabel; /*!< optional x axis label */ char *ylabel; /*!< optional y axis label */ }; typedef struct GPlot GPLOT; #endif /* LEPTONICA_GPLOT_H */ leptonica-1.86.0/src/graphics.c000066400000000000000000002520371506303110300163200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file graphics.c *
 *
 *      Pta generation for arbitrary shapes built with lines
 *          PTA        *generatePtaLine()
 *          PTA        *generatePtaWideLine()
 *          PTA        *generatePtaBox()
 *          PTA        *generatePtaBoxa()
 *          PTA        *generatePtaHashBox()
 *          PTA        *generatePtaHashBoxa()
 *          PTAA       *generatePtaaBoxa()
 *          PTAA       *generatePtaaHashBoxa()
 *          PTA        *generatePtaPolyline()
 *          PTA        *generatePtaGrid()
 *          PTA        *convertPtaLineTo4cc()
 *          PTA        *generatePtaFilledCircle()
 *          PTA        *generatePtaFilledSquare()
 *          PTA        *generatePtaLineFromPt()
 *          l_int32     locatePtRadially()
 *
 *      Rendering function plots directly on images
 *          l_int32     pixRenderPlotFromNuma()
 *          l_int32     pixRenderPlotFromNumaGen()
 *          PTA        *makePlotPtaFromNuma()
 *          PTA        *makePlotPtaFromNumaGen()
 *
 *      Pta rendering
 *          l_int32     pixRenderPta()
 *          l_int32     pixRenderPtaArb()
 *          l_int32     pixRenderPtaBlend()
 *
 *      Rendering of arbitrary shapes built with lines
 *          l_int32     pixRenderLine()
 *          l_int32     pixRenderLineArb()
 *          l_int32     pixRenderLineBlend()
 *
 *          l_int32     pixRenderBox()
 *          l_int32     pixRenderBoxArb()
 *          l_int32     pixRenderBoxBlend()
 *
 *          l_int32     pixRenderBoxa()
 *          l_int32     pixRenderBoxaArb()
 *          l_int32     pixRenderBoxaBlend()
 *
 *          l_int32     pixRenderHashBox()
 *          l_int32     pixRenderHashBoxArb()
 *          l_int32     pixRenderHashBoxBlend()
 *          l_int32     pixRenderHashMaskArb()
 *
 *          l_int32     pixRenderHashBoxa()
 *          l_int32     pixRenderHashBoxaArb()
 *          l_int32     pixRenderHashBoxaBlend()
 *
 *          l_int32     pixRenderPolyline()
 *          l_int32     pixRenderPolylineArb()
 *          l_int32     pixRenderPolylineBlend()
 *
 *          l_int32     pixRenderGrid()
 *
 *          l_int32     pixRenderRandomCmapPtaa()
 *
 *      Rendering and filling of polygons
 *          PIX        *pixRenderPolygon()
 *          PIX        *pixFillPolygon()
 *
 *      Contour rendering on grayscale images
 *          PIX        *pixRenderContours()
 *          PIX        *fpixAutoRenderContours()
 *          PIX        *fpixRenderContours()
 *
 *      Boundary pt generation on 1 bpp images
 *          PTA        *pixGeneratePtaBoundary()
 *
 *  The line rendering functions are relatively crude, but they
 *  get the job done for most simple situations.  We use the pta
 *  (array of points) as an intermediate data structure.  For example,
 *  to render a line we first generate a pta.
 *
 *  Some rendering functions come in sets of three.  For example
 *       pixRenderLine() -- render on 1 bpp pix
 *       pixRenderLineArb() -- render on 32 bpp pix with arbitrary (r,g,b)
 *       pixRenderLineBlend() -- render on 32 bpp pix, blending the
 *               (r,g,b) graphic object with the underlying rgb pixels.
 *
 *  There are also procedures for plotting a function, computed
 *  from the row or column pixels, directly on the image.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /*------------------------------------------------------------------* * Pta generation for arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * \brief generatePtaLine() * * \param[in] x1, y1 end point 1 * \param[in] x2, y2 end point 2 * \return pta, or NULL on error * *
 * Notes:
 *      (1) Uses Bresenham line drawing, which results in an 8-connected line.
 * 
*/ PTA * generatePtaLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2) { l_int32 npts, diff, getyofx, sign, i, x, y; l_float32 slope; PTA *pta; /* Generate line parameters */ if (x1 == x2 && y1 == y2) { /* same point */ getyofx = TRUE; npts = 1; } else if (L_ABS(x2 - x1) >= L_ABS(y2 - y1)) { getyofx = TRUE; npts = L_ABS(x2 - x1) + 1; diff = x2 - x1; sign = L_SIGN(x2 - x1); slope = (l_float32)(sign * (y2 - y1)) / (l_float32)diff; } else { getyofx = FALSE; npts = L_ABS(y2 - y1) + 1; diff = y2 - y1; sign = L_SIGN(y2 - y1); slope = (l_float32)(sign * (x2 - x1)) / (l_float32)diff; } if ((pta = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); if (npts == 1) { /* degenerate case */ ptaAddPt(pta, x1, y1); return pta; } /* Generate the set of points */ if (getyofx) { /* y = y(x) */ for (i = 0; i < npts; i++) { x = x1 + sign * i; y = (l_int32)(y1 + (l_float32)i * slope + 0.5); ptaAddPt(pta, x, y); } } else { /* x = x(y) */ for (i = 0; i < npts; i++) { x = (l_int32)(x1 + (l_float32)i * slope + 0.5); y = y1 + sign * i; ptaAddPt(pta, x, y); } } return pta; } /*! * \brief generatePtaWideLine() * * \param[in] x1, y1 end point 1 * \param[in] x2, y2 end point 2 * \param[in] width * \return ptaj, or NULL on error */ PTA * generatePtaWideLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width) { l_int32 i, x1a, x2a, y1a, y2a; PTA *pta, *ptaj; if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((ptaj = generatePtaLine(x1, y1, x2, y2)) == NULL) return (PTA *)ERROR_PTR("ptaj not made", __func__, NULL); if (width == 1) return ptaj; /* width > 1; estimate line direction & join */ if (L_ABS(x1 - x2) > L_ABS(y1 - y2)) { /* "horizontal" line */ for (i = 1; i < width; i++) { if ((i & 1) == 1) { /* place above */ y1a = y1 - (i + 1) / 2; y2a = y2 - (i + 1) / 2; } else { /* place below */ y1a = y1 + (i + 1) / 2; y2a = y2 + (i + 1) / 2; } if ((pta = generatePtaLine(x1, y1a, x2, y2a)) != NULL) { ptaJoin(ptaj, pta, 0, -1); ptaDestroy(&pta); } } } else { /* "vertical" line */ for (i = 1; i < width; i++) { if ((i & 1) == 1) { /* place to left */ x1a = x1 - (i + 1) / 2; x2a = x2 - (i + 1) / 2; } else { /* place to right */ x1a = x1 + (i + 1) / 2; x2a = x2 + (i + 1) / 2; } if ((pta = generatePtaLine(x1a, y1, x2a, y2)) != NULL) { ptaJoin(ptaj, pta, 0, -1); ptaDestroy(&pta); } } } return ptaj; } /*! * \brief generatePtaBox() * * \param[in] box * \param[in] width of line * \return ptad, or NULL on error * *
 * Notes:
 *      (1) Because the box is constructed so that we don't have any
 *          overlapping lines, there is no need to remove duplicates.
 * 
*/ PTA * generatePtaBox(BOX *box, l_int32 width) { l_int32 x, y, w, h; PTA *ptad, *pta; if (!box) return (PTA *)ERROR_PTR("box not defined", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } /* Generate line points and add them to the pta. */ boxGetGeometry(box, &x, &y, &w, &h); if (w == 0 || h == 0) return (PTA *)ERROR_PTR("box has w = 0 or h = 0", __func__, NULL); ptad = ptaCreate(0); if ((width & 1) == 1) { /* odd width */ pta = generatePtaWideLine(x - width / 2, y, x + w - 1 + width / 2, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1, y + 1 + width / 2, x + w - 1, y + h - 2 - width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1 + width / 2, y + h - 1, x - width / 2, y + h - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x, y + h - 2 - width / 2, x, y + 1 + width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } else { /* even width */ pta = generatePtaWideLine(x - width / 2, y, x + w - 2 + width / 2, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1, y + 0 + width / 2, x + w - 1, y + h - 2 - width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 2 + width / 2, y + h - 1, x - width / 2, y + h - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x, y + h - 2 - width / 2, x, y + 0 + width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } return ptad; } /*! * \brief generatePtaBoxa() * * \param[in] boxa * \param[in] width * \param[in] removedups 1 to remove, 0 to leave * \return ptad, or NULL on error * *
 * Notes:
 *      (1) If %boxa has overlapping boxes, and if blending will
 *          be used to give a transparent effect, transparency
 *          artifacts at line intersections can be removed using
 *          %removedups = 1.
 * 
*/ PTA * generatePtaBoxa(BOXA *boxa, l_int32 width, l_int32 removedups) { l_int32 i, n; BOX *box; PTA *ptad, *ptat, *pta; if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } n = boxaGetCount(boxa); ptat = ptaCreate(0); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaBox(box, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); boxDestroy(&box); } if (removedups) ptaRemoveDupsByAset(ptat, &ptad); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * \brief generatePtaHashBox() * * \param[in] box * \param[in] spacing spacing between lines; must be > 1 * \param[in] width of line * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \return ptad, or NULL on error * *
 * Notes:
 *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
 *          slope +1, slope -1).
 *      (2) The full outline is also drawn if %outline = 1.
 * 
*/ PTA * generatePtaHashBox(BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline) { l_int32 bx, by, bh, bw, x, y, x1, y1, x2, y2, i, n, npts; PTA *ptad, *pta; if (!box) return (PTA *)ERROR_PTR("box not defined", __func__, NULL); if (spacing <= 1) return (PTA *)ERROR_PTR("spacing not > 1", __func__, NULL); if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTA *)ERROR_PTR("invalid line orientation", __func__, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw == 0 || bh == 0) return (PTA *)ERROR_PTR("box has bw = 0 or bh = 0", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } /* Generate line points and add them to the pta. */ ptad = ptaCreate(0); if (outline) { pta = generatePtaBox(box, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } if (orient == L_HORIZONTAL_LINE) { n = 1 + bh / spacing; for (i = 0; i < n; i++) { y = by + (i * (bh - 1)) / (n - 1); pta = generatePtaWideLine(bx, y, bx + bw - 1, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } else if (orient == L_VERTICAL_LINE) { n = 1 + bw / spacing; for (i = 0; i < n; i++) { x = bx + (i * (bw - 1)) / (n - 1); pta = generatePtaWideLine(x, by, x, by + bh - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } else if (orient == L_POS_SLOPE_LINE) { n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); for (i = 0; i < n; i++) { x = (l_int32)(bx + (i + 0.5) * 1.4 * spacing); boxIntersectByLine(box, x, by - 1, 1.0, &x1, &y1, &x2, &y2, &npts); if (npts == 2) { pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } } else { /* orient == L_NEG_SLOPE_LINE */ n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); for (i = 0; i < n; i++) { x = (l_int32)(bx - bh + (i + 0.5) * 1.4 * spacing); boxIntersectByLine(box, x, by - 1, -1.0, &x1, &y1, &x2, &y2, &npts); if (npts == 2) { pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } } return ptad; } /*! * \brief generatePtaHashBoxa() * * \param[in] boxa * \param[in] spacing spacing between lines; must be > 1 * \param[in] width of line * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \param[in] removedups 1 to remove, 0 to leave * \return ptad, or NULL on error * *
 * Notes:
 *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
 *          slope +1, slope -1).
 *      (2) The full outline is also drawn if %outline = 1.
 *      (3) If the boxa has overlapping boxes, and if blending will
 *          be used to give a transparent effect, transparency
 *          artifacts at line intersections can be removed using
 *          %removedups = 1.
 * 
*/ PTA * generatePtaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups) { l_int32 i, n; BOX *box; PTA *ptad, *ptat, *pta; if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", __func__, NULL); if (spacing <= 1) return (PTA *)ERROR_PTR("spacing not > 1", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTA *)ERROR_PTR("invalid line orientation", __func__, NULL); n = boxaGetCount(boxa); ptat = ptaCreate(0); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaHashBox(box, spacing, width, orient, outline); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); boxDestroy(&box); } if (removedups) ptaRemoveDupsByAset(ptat, &ptad); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * \brief generatePtaaBoxa() * * \param[in] boxa * \return ptaa, or NULL on error * *
 * Notes:
 *      (1) This generates a pta of the four corners for each box in
 *          the boxa.
 *      (2) Each of these pta can be rendered onto a pix with random colors,
 *          by using pixRenderRandomCmapPtaa() with closeflag = 1.
 * 
*/ PTAA * generatePtaaBoxa(BOXA *boxa) { l_int32 i, n, x, y, w, h; BOX *box; PTA *pta; PTAA *ptaa; if (!boxa) return (PTAA *)ERROR_PTR("boxa not defined", __func__, NULL); n = boxaGetCount(boxa); ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pta = ptaCreate(4); ptaAddPt(pta, x, y); ptaAddPt(pta, x + w - 1, y); ptaAddPt(pta, x + w - 1, y + h - 1); ptaAddPt(pta, x, y + h - 1); ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); } return ptaa; } /*! * \brief generatePtaaHashBoxa() * * \param[in] boxa * \param[in] spacing spacing between hash lines; must be > 1 * \param[in] width hash line width * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \return ptaa, or NULL on error * *
 * Notes:
 *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
 *          slope +1, slope -1).
 *      (2) The full outline is also drawn if %outline = 1.
 *      (3) Each of these pta can be rendered onto a pix with random colors,
 *          by using pixRenderRandomCmapPtaa() with closeflag = 1.
 *
 * 
*/ PTAA * generatePtaaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline) { l_int32 i, n; BOX *box; PTA *pta; PTAA *ptaa; if (!boxa) return (PTAA *)ERROR_PTR("boxa not defined", __func__, NULL); if (spacing <= 1) return (PTAA *)ERROR_PTR("spacing not > 1", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTAA *)ERROR_PTR("invalid line orientation", __func__, NULL); n = boxaGetCount(boxa); ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaHashBox(box, spacing, width, orient, outline); ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); } return ptaa; } /*! * \brief generatePtaPolyline() * * \param[in] ptas vertices of polyline * \param[in] width * \param[in] closeflag 1 to close the contour; 0 otherwise * \param[in] removedups 1 to remove, 0 to leave * \return ptad, or NULL on error */ PTA * generatePtaPolyline(PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups) { l_int32 i, n, x1, y1, x2, y2; PTA *ptad, *ptat, *pta; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } n = ptaGetCount(ptas); ptat = ptaCreate(0); if (n < 2) /* nothing to do */ return ptat; ptaGetIPt(ptas, 0, &x1, &y1); for (i = 1; i < n; i++) { ptaGetIPt(ptas, i, &x2, &y2); pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); x1 = x2; y1 = y2; } if (closeflag) { ptaGetIPt(ptas, 0, &x2, &y2); pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); } if (removedups) ptaRemoveDupsByAset(ptat, &ptad); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * \brief generatePtaGrid() * * \param[in] w, h of region where grid will be displayed * \param[in] nx, ny number of rectangles in each direction in grid * \param[in] width of rendered lines * \return ptad, or NULL on error */ PTA * generatePtaGrid(l_int32 w, l_int32 h, l_int32 nx, l_int32 ny, l_int32 width) { l_int32 i, j, bx, by, x1, x2, y1, y2; BOX *box; BOXA *boxa; PTA *pta; if (nx < 1 || ny < 1) return (PTA *)ERROR_PTR("nx and ny must be > 0", __func__, NULL); if (w < 2 * nx || h < 2 * ny) return (PTA *)ERROR_PTR("w and/or h too small", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } boxa = boxaCreate(nx * ny); bx = (w + nx - 1) / nx; by = (h + ny - 1) / ny; for (i = 0; i < ny; i++) { y1 = by * i; y2 = L_MIN(y1 + by, h - 1); for (j = 0; j < nx; j++) { x1 = bx * j; x2 = L_MIN(x1 + bx, w - 1); box = boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); boxaAddBox(boxa, box, L_INSERT); } } pta = generatePtaBoxa(boxa, width, 1); boxaDestroy(&boxa); return pta; } /*! * \brief convertPtaLineTo4cc() * * \param[in] ptas 8-connected line of points * \return ptad 4-connected line, or NULL on error * *
 * Notes:
 *      (1) When a polyline is generated with width = 1, the resulting
 *          line is not 4-connected in general.  This function adds
 *          points as necessary to convert the line to 4-cconnected.
 *          It is useful when rendering 1 bpp on a pix.
 *      (2) Do not use this for lines generated with width > 1.
 * 
*/ PTA * convertPtaLineTo4cc(PTA *ptas) { l_int32 i, n, x, y, xp, yp; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(n); ptaGetIPt(ptas, 0, &xp, &yp); ptaAddPt(ptad, xp, yp); for (i = 1; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); if (x != xp && y != yp) /* diagonal */ ptaAddPt(ptad, x, yp); ptaAddPt(ptad, x, y); xp = x; yp = y; } return ptad; } /*! * \brief generatePtaFilledCircle() * * \param[in] radius * \return pta, or NULL on error * *
 * Notes:
 *      (1) The circle is has diameter = 2 * radius + 1.
 *      (2) It is located with the center of the circle at the
 *          point (%radius, %radius).
 *      (3) Consequently, it typically must be translated if
 *          it is to represent a set of pixels in an image.
 * 
*/ PTA * generatePtaFilledCircle(l_int32 radius) { l_int32 x, y; l_float32 radthresh, sqdist; PTA *pta; if (radius < 1) return (PTA *)ERROR_PTR("radius must be >= 1", __func__, NULL); pta = ptaCreate(0); radthresh = (radius + 0.5) * (radius + 0.5); for (y = 0; y <= 2 * radius; y++) { for (x = 0; x <= 2 * radius; x++) { sqdist = (l_float32)((y - radius) * (y - radius) + (x - radius) * (x - radius)); if (sqdist <= radthresh) ptaAddPt(pta, x, y); } } return pta; } /*! * \brief generatePtaFilledSquare() * * \param[in] side * \return pta, or NULL on error * *
 * Notes:
 *      (1) The center of the square can be chosen to be at
 *          (side / 2, side / 2).  It must be translated by this amount
 *          when used for replication.
 * 
*/ PTA * generatePtaFilledSquare(l_int32 side) { l_int32 x, y; PTA *pta; if (side < 1) return (PTA *)ERROR_PTR("side must be > 0", __func__, NULL); pta = ptaCreate(0); for (y = 0; y < side; y++) for (x = 0; x < side; x++) ptaAddPt(pta, x, y); return pta; } /*! * \brief generatePtaLineFromPt() * * \param[in] x, y point of origination * \param[in] length of line, including starting point * \param[in] radang angle in radians, CW from horizontal * \return pta, or NULL on error * *
 * Notes:
 *      (1) %length of the line is 1 greater than the distance
 *          used in locatePtRadially().  Example: a distance of 1
 *          gives rise to a length of 2.
 * 
*/ PTA * generatePtaLineFromPt(l_int32 x, l_int32 y, l_float64 length, l_float64 radang) { l_int32 x2, y2; /* the point at the other end of the line */ x2 = x + (l_int32)((length - 1.0) * cos(radang)); y2 = y + (l_int32)((length - 1.0) * sin(radang)); return generatePtaLine(x, y, x2, y2); } /*! * \brief locatePtRadially() * * \param[in] xr, yr reference point * \param[in] radang angle in radians, CW from horizontal * \param[in] dist distance of point from reference point along * line given by the specified angle * \param[out] px, py location of point * \return 0 if OK, 1 on error */ l_ok locatePtRadially(l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py) { if (!px || !py) return ERROR_INT("&x and &y not both defined", __func__, 1); *px = xr + dist * cos(radang); *py = yr + dist * sin(radang); return 0; } /*------------------------------------------------------------------* * Rendering function plots directly on images * *------------------------------------------------------------------*/ /*! * \brief pixRenderPlotFromNuma() * * \param[in,out] ppix any type; replaced if not 32 bpp rgb * \param[in] na to be plotted * \param[in] plotloc location of plot: L_PLOT_AT_TOP, etc * \param[in] linewidth width of "line" that is drawn; between 1 and 7 * \param[in] max maximum excursion in pixels from baseline * \param[in] color plot color: 0xrrggbb00 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Simplified interface for plotting row or column aligned data
 *          on a pix.
 *      (2) This replaces %pix with a 32 bpp rgb version if it is not
 *          already 32 bpp.  It then draws the plot on the pix.
 *      (3) See makePlotPtaFromNumaGen() for more details.
 * 
*/ l_ok pixRenderPlotFromNuma(PIX **ppix, NUMA *na, l_int32 plotloc, l_int32 linewidth, l_int32 max, l_uint32 color) { l_int32 w, h, size, rval, gval, bval; PIX *pix1; PTA *pta; if (!ppix) return ERROR_INT("&pix not defined", __func__, 1); if (*ppix == NULL) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(*ppix, &w, &h, NULL); size = (plotloc == L_PLOT_AT_TOP || plotloc == L_PLOT_AT_MID_HORIZ || plotloc == L_PLOT_AT_BOT) ? h : w; pta = makePlotPtaFromNuma(na, size, plotloc, linewidth, max); if (!pta) return ERROR_INT("pta not made", __func__, 1); if (pixGetDepth(*ppix) != 32) { pix1 = pixConvertTo32(*ppix); pixDestroy(ppix); *ppix = pix1; } extractRGBValues(color, &rval, &gval, &bval); pixRenderPtaArb(*ppix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief makePlotPtaFromNuma() * * \param[in] na * \param[in] size pix height for horizontal plot; pix width * for vertical plot * \param[in] plotloc location of plot: L_PLOT_AT_TOP, etc * \param[in] linewidth width of "line" that is drawn; between 1 and 7 * \param[in] max maximum excursion in pixels from baseline * \return ptad, or NULL on error * *
 * Notes:
 *      (1) This generates points from %numa representing y(x) or x(y)
 *          with respect to a pix.  A horizontal plot y(x) is drawn for
 *          a function of column position, and a vertical plot is drawn
 *          for a function x(y) of row position.  The baseline is located
 *          so that all plot points will fit in the pix.
 *      (2) See makePlotPtaFromNumaGen() for more details.
 * 
*/ PTA * makePlotPtaFromNuma(NUMA *na, l_int32 size, l_int32 plotloc, l_int32 linewidth, l_int32 max) { l_int32 orient, refpos; if (!na) return (PTA *)ERROR_PTR("na not defined", __func__, NULL); if (plotloc == L_PLOT_AT_TOP || plotloc == L_PLOT_AT_MID_HORIZ || plotloc == L_PLOT_AT_BOT) { orient = L_HORIZONTAL_LINE; } else if (plotloc == L_PLOT_AT_LEFT || plotloc == L_PLOT_AT_MID_VERT || plotloc == L_PLOT_AT_RIGHT) { orient = L_VERTICAL_LINE; } else { return (PTA *)ERROR_PTR("invalid plotloc", __func__, NULL); } if (plotloc == L_PLOT_AT_LEFT || plotloc == L_PLOT_AT_TOP) refpos = max; else if (plotloc == L_PLOT_AT_MID_VERT || plotloc == L_PLOT_AT_MID_HORIZ) refpos = size / 2; else /* L_PLOT_AT_RIGHT || L_PLOT_AT_BOT */ refpos = size - max - 1; return makePlotPtaFromNumaGen(na, orient, linewidth, refpos, max, 1); } /*! * \brief pixRenderPlotFromNumaGen() * * \param[in,out] ppix any type; replaced if not 32 bpp rgb * \param[in] na to be plotted * \param[in] orient L_HORIZONTAL_LINE, L_VERTICAL_LINE * \param[in] linewidth width of "line" that is drawn; between 1 and 7 * \param[in] refpos reference position: y for horizontal; * x for vertical * \param[in] max maximum excursion in pixels from baseline * \param[in] drawref 1 to draw the reference line and its normal * \param[in] color plot color: 0xrrggbb00 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) General interface for plotting row or column aligned data
 *          on a pix.
 *      (2) This replaces %pix with a 32 bpp rgb version if it is not
 *          already 32 bpp.  It then draws the plot on the pix.
 *      (3) See makePlotPtaFromNumaGen() for other input parameters.
 * 
*/ l_ok pixRenderPlotFromNumaGen(PIX **ppix, NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref, l_uint32 color) { l_int32 rval, gval, bval; PIX *pix1; PTA *pta; if (!ppix) return ERROR_INT("&pix not defined", __func__, 1); if (*ppix == NULL) return ERROR_INT("pix not defined", __func__, 1); pta = makePlotPtaFromNumaGen(na, orient, linewidth, refpos, max, drawref); if (!pta) return ERROR_INT("pta not made", __func__, 1); if (pixGetDepth(*ppix) != 32) { pix1 = pixConvertTo32(*ppix); pixDestroy(ppix); *ppix = pix1; } extractRGBValues(color, &rval, &gval, &bval); pixRenderPtaArb(*ppix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief makePlotPtaFromNumaGen() * * \param[in] na * \param[in] orient L_HORIZONTAL_LINE, L_VERTICAL_LINE * \param[in] linewidth width of "line" that is drawn; between 1 and 7 * \param[in] refpos reference position: y for horizontal; * x for vertical * \param[in] max maximum excursion in pixels from baseline * \param[in] drawref 1 to draw the reference line and its normal * \return ptad, or NULL on error * *
 * Notes:
 *      (1) This generates points from %numa representing y(x) or x(y)
 *          with respect to a pix.  For y(x), we draw a horizontal line
 *          at the reference position and a vertical line at the edge; then
 *          we draw the values of %numa, scaled so that the maximum
 *          excursion from the reference position is %max pixels.
 *      (2) The start and delx parameters of %numa are used to refer
 *          its values to the raster lines (L_VERTICAL_LINE) or columns
 *          (L_HORIZONTAL_LINE).
 *      (3) The linewidth is chosen in the interval [1 ... 7].
 *      (4) %refpos should be chosen so the plot is entirely within the pix
 *          that it will be painted onto.
 *      (5) This would typically be used to plot, in place, a function
 *          computed along pixel rows or columns.
 * 
*/ PTA * makePlotPtaFromNumaGen(NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref) { l_int32 i, n, maxw, maxh; l_float32 minval, maxval, absval, val, scale, start, del; PTA *pta1, *pta2, *ptad; if (!na) return (PTA *)ERROR_PTR("na not defined", __func__, NULL); if (orient != L_HORIZONTAL_LINE && orient != L_VERTICAL_LINE) return (PTA *)ERROR_PTR("invalid orient", __func__, NULL); if (linewidth < 1) { L_WARNING("linewidth < 1; setting to 1\n", __func__); linewidth = 1; } if (linewidth > 7) { L_WARNING("linewidth > 7; setting to 7\n", __func__); linewidth = 7; } numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); absval = L_MAX(L_ABS(minval), L_ABS(maxval)); scale = (l_float32)max / (l_float32)absval; n = numaGetCount(na); numaGetParameters(na, &start, &del); /* Generate the plot points */ pta1 = ptaCreate(n); maxw = maxh = 0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (orient == L_HORIZONTAL_LINE) { ptaAddPt(pta1, start + i * del, refpos + scale * val); maxw = (del >= 0) ? start + n * del + linewidth : start + linewidth; maxh = refpos + max + linewidth; } else { /* vertical line */ ptaAddPt(pta1, refpos + scale * val, start + i * del); maxw = refpos + max + linewidth; maxh = (del >= 0) ? start + n * del + linewidth : start + linewidth; } } /* Optionally, widen the plot */ if (linewidth > 1) { if (linewidth % 2 == 0) /* even linewidth; use side of a square */ pta2 = generatePtaFilledSquare(linewidth); else /* odd linewidth; use radius of a circle */ pta2 = generatePtaFilledCircle(linewidth / 2); ptad = ptaReplicatePattern(pta1, NULL, pta2, linewidth / 2, linewidth / 2, maxw, maxh); ptaDestroy(&pta2); } else { ptad = ptaClone(pta1); } ptaDestroy(&pta1); /* Optionally, add the reference lines */ if (drawref) { if (orient == L_HORIZONTAL_LINE) { pta1 = generatePtaLine(start, refpos, start + n * del, refpos); ptaJoin(ptad, pta1, 0, -1); ptaDestroy(&pta1); pta1 = generatePtaLine(start, refpos - max, start, refpos + max); ptaJoin(ptad, pta1, 0, -1); } else { /* vertical line */ pta1 = generatePtaLine(refpos, start, refpos, start + n * del); ptaJoin(ptad, pta1, 0, -1); ptaDestroy(&pta1); pta1 = generatePtaLine(refpos - max, start, refpos + max, start); ptaJoin(ptad, pta1, 0, -1); } ptaDestroy(&pta1); } return ptad; } /*------------------------------------------------------------------* * Pta generation for arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * \brief pixRenderPta() * * \param[in] pix any depth, not cmapped * \param[in] pta arbitrary set of points * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) L_SET_PIXELS puts all image bits in each pixel to 1
 *          (black for 1 bpp; white for depth > 1)
 *      (2) L_CLEAR_PIXELS puts all image bits in each pixel to 0
 *          (white for 1 bpp; black for depth > 1)
 *      (3) L_FLIP_PIXELS reverses all image bits in each pixel
 *      (4) This function clips the rendering to the pix.  It performs
 *          clipping for functions such as pixRenderLine(),
 *          pixRenderBox() and pixRenderBoxa(), that call pixRenderPta().
 * 
*/ l_ok pixRenderPta(PIX *pix, PTA *pta, l_int32 op) { l_int32 i, n, x, y, w, h, d, maxval; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pixGetColormap(pix)) return ERROR_INT("pix is colormapped", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); pixGetDimensions(pix, &w, &h, &d); maxval = 1; if (op == L_SET_PIXELS) { switch (d) { case 2: maxval = 0x3; break; case 4: maxval = 0xf; break; case 8: maxval = 0xff; break; case 16: maxval = 0xffff; break; case 32: maxval = 0xffffffff; break; } } n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; switch (op) { case L_SET_PIXELS: pixSetPixel(pix, x, y, maxval); break; case L_CLEAR_PIXELS: pixClearPixel(pix, x, y); break; case L_FLIP_PIXELS: pixFlipPixel(pix, x, y); break; default: break; } } return 0; } /*! * \brief pixRenderPtaArb() * * \param[in] pix any depth, cmapped ok * \param[in] pta arbitrary set of points * \param[in] rval, gval, bval * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %pix is colormapped, render this color (or the nearest
 *          color if the cmap is full) on each pixel.
 *      (2) The rgb components have the standard dynamic range [0 ... 255]
 *      (3) If pix is not colormapped, do the best job you can using
 *          the input colors:
 *          ~ d = 1: set the pixels
 *          ~ d = 2, 4, 8: average the input rgb value
 *          ~ d = 32: use the input rgb value
 *      (4) This function clips the rendering to %pix.
 * 
*/ l_ok pixRenderPtaArb(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval) { l_int32 i, n, x, y, w, h, d, index; l_uint8 val; l_uint32 val32; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); d = pixGetDepth(pix); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return ERROR_INT("depth not in {1,2,4,8,32}", __func__, 1); if (d == 1) { pixRenderPta(pix, pta, L_SET_PIXELS); return 0; } cmap = pixGetColormap(pix); pixGetDimensions(pix, &w, &h, &d); if (cmap) { pixcmapAddNearestColor(cmap, rval, gval, bval, &index); } else { if (d == 2) val = (rval + gval + bval) / (3 * 64); else if (d == 4) val = (rval + gval + bval) / (3 * 16); else if (d == 8) val = (rval + gval + bval) / 3; else /* d == 32 */ composeRGBPixel(rval, gval, bval, &val32); } n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; if (cmap) pixSetPixel(pix, x, y, index); else if (d == 32) pixSetPixel(pix, x, y, val32); else pixSetPixel(pix, x, y, val); } return 0; } /*! * \brief pixRenderPtaBlend() * * \param[in] pix 32 bpp rgb * \param[in] pta arbitrary set of points * \param[in] rval, gval, bval * \param[in] fract * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function clips the rendering to %pix.
 * 
*/ l_ok pixRenderPtaBlend(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { l_int32 i, n, x, y, w, h; l_uint8 nrval, ngval, nbval; l_uint32 val32; l_float32 frval, fgval, fbval; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (pixGetDepth(pix) != 32) return ERROR_INT("depth not 32 bpp", __func__, 1); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", __func__); fract = 0.5; } pixGetDimensions(pix, &w, &h, NULL); n = ptaGetCount(pta); frval = fract * rval; fgval = fract * gval; fbval = fract * bval; for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pix, x, y, &val32); nrval = GET_DATA_BYTE(&val32, COLOR_RED); nrval = (l_uint8)((1. - fract) * nrval + frval); ngval = GET_DATA_BYTE(&val32, COLOR_GREEN); ngval = (l_uint8)((1. - fract) * ngval + fgval); nbval = GET_DATA_BYTE(&val32, COLOR_BLUE); nbval = (l_uint8)((1. - fract) * nbval + fbval); composeRGBPixel(nrval, ngval, nbval, &val32); pixSetPixel(pix, x, y, val32); } return 0; } /*------------------------------------------------------------------* * Rendering of arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * \brief pixRenderLine() * * \param[in] pix any depth, not cmapped * \param[in] x1, y1 * \param[in] x2, y2 * \param[in] width thickness of line * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error */ l_ok pixRenderLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", __func__); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderLineArb() * * \param[in] pix any depth, cmapped ok * \param[in] x1, y1 * \param[in] x2, y2 * \param[in] width thickness of line * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderLineArb(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderLineBlend() * * \param[in] pix 32 bpp rgb * \param[in] x1, y1 * \param[in] x2, y2 * \param[in] width thickness of line * \param[in] rval, gval, bval * \param[in] fract * \return 0 if OK, 1 on error */ l_ok pixRenderLineBlend(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBox() * * \param[in] pix any depth, not cmapped * \param[in] box * \param[in] width thickness of box lines * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error */ l_ok pixRenderBox(PIX *pix, BOX *box, l_int32 width, l_int32 op) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBoxArb() * * \param[in] pix any depth, cmapped ok * \param[in] box * \param[in] width thickness of box lines * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBoxBlend() * * \param[in] pix 32 bpp rgb * \param[in] box * \param[in] width thickness of box lines * \param[in] rval, gval, bval * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; * 0.0 is complete transparency (no effect) * \return 0 if OK, 1 on error */ l_ok pixRenderBoxBlend(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBoxa() * * \param[in] pix any depth, not cmapped * \param[in] boxa * \param[in] width thickness of line * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error */ l_ok pixRenderBoxa(PIX *pix, BOXA *boxa, l_int32 width, l_int32 op) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBoxaArb() * * \param[in] pix any depth; colormapped is ok * \param[in] boxa * \param[in] width thickness of line * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderBoxaBlend() * * \param[in] pix 32 bpp rgb * \param[in] boxa * \param[in] width thickness of line * \param[in] rval, gval, bval * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; * 0.0 is complete transparency (no effect) * \param[in] removedups 1 to remove; 0 otherwise * \return 0 if OK, 1 on error */ l_ok pixRenderBoxaBlend(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaBoxa(boxa, width, removedups)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashBox() * * \param[in] pix any depth, not cmapped * \param[in] box * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... * \param[in] outline 0 to skip drawing box outline * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error */ l_ok pixRenderHashBox(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashBoxArb() * * \param[in] pix any depth; cmapped ok * \param[in] box * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... * \param[in] outline 0 to skip drawing box outline * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderHashBoxArb(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashBoxBlend() * * \param[in] pix 32 bpp * \param[in] box * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... * \param[in] outline 0 to skip drawing box outline * \param[in] rval, gval, bval * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; * 0.0 is complete transparency (no effect) * \return 0 if OK, 1 on error */ l_ok pixRenderHashBoxBlend(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashMaskArb() * * \param[in] pix any depth; cmapped ok * \param[in] pixm 1 bpp clipping mask for hash marks * \param[in] x,y UL corner of %pixm with respect to %pix * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \param[in] rval, gval, bval * \return 0 if OK, 1 on error *
 * Notes:
 *      (1) This is an in-place operation that renders hash lines
 *          through a mask %pixm onto %pix.  The mask origin is
 *          translated by (%x,%y) relative to the origin of %pix.
 * 
*/ l_ok pixRenderHashMaskArb(PIX *pix, PIX *pixm, l_int32 x, l_int32 y, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h; BOX *box1, *box2; PIX *pix1; PTA *pta1, *pta2; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm not defined or not 1 bpp", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); /* Get the points for masked hash lines */ pixGetDimensions(pixm, &w, &h, NULL); box1 = boxCreate(0, 0, w, h); pta1 = generatePtaHashBox(box1, spacing, width, orient, outline); pta2 = ptaCropToMask(pta1, pixm); boxDestroy(&box1); ptaDestroy(&pta1); /* Clip out the region and apply the hash lines */ box2 = boxCreate(x, y, w, h); pix1 = pixClipRectangle(pix, box2, NULL); pixRenderPtaArb(pix1, pta2, rval, gval, bval); ptaDestroy(&pta2); boxDestroy(&box2); /* Rasterop the altered rectangle back in place */ pixRasterop(pix, x, y, w, h, PIX_SRC, pix1, 0, 0); pixDestroy(&pix1); return 0; } /*! * \brief pixRenderHashBoxa() * * \param[in] pix any depth, not cmapped * \param[in] boxa * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \return 0 if OK, 1 on error */ l_ok pixRenderHashBoxa(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashBoxaArb() * * \param[in] pix any depth; cmapped ok * \param[in] box * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderHashBoxaArb(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderHashBoxaBlend() * * \param[in] pix 32 bpp rgb * \param[in] boxa * \param[in] spacing spacing between lines; must be > 1 * \param[in] width thickness of box and hash lines * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, * L_POS_SLOPE_LINE, L_VERTICAL_LINE, * L_NEG_SLOPE_LINE * \param[in] outline 0 to skip drawing box outline * \param[in] rval, gval, bval * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; * 0.0 is complete transparency (no effect) * \return 0 if OK, 1 on error */ l_ok pixRenderHashBoxaBlend(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", __func__, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderPolyline() * * \param[in] pix any depth, not cmapped * \param[in] ptas * \param[in] width thickness of line * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS * \param[in] closeflag 1 to close the contour; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      This renders a closed contour.
 * 
*/ l_ok pixRenderPolyline(PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", __func__, 1); if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderPolylineArb() * * \param[in] pix any depth; cmapped ok * \param[in] ptas * \param[in] width thickness of line * \param[in] rval, gval, bval * \param[in] closeflag 1 to close the contour; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      This renders a closed contour.
 * 
*/ l_ok pixRenderPolylineArb(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderPolylineBlend() * * \param[in] pix 32 bpp rgb * \param[in] ptas * \param[in] width thickness of line * \param[in] rval, gval, bval * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; * 0.0 is complete transparency (no effect) * \param[in] closeflag 1 to close the contour; 0 otherwise * \param[in] removedups 1 to remove; 0 otherwise * \return 0 if OK, 1 on error */ l_ok pixRenderPolylineBlend(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups) { PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } if ((pta = generatePtaPolyline(ptas, width, closeflag, removedups)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderGridArb() * * \param[in] pix any depth, cmapped ok * \param[in] nx, ny number of rectangles in each direction * \param[in] width thickness of grid lines * \param[in] rval, gval, bval * \return 0 if OK, 1 on error */ l_ok pixRenderGridArb(PIX *pix, l_int32 nx, l_int32 ny, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { l_int32 w, h; PTA *pta; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (nx < 1 || ny < 1) return ERROR_INT("nx, ny must be > 0", __func__, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } pixGetDimensions(pix, &w, &h, NULL); if ((pta = generatePtaGrid(w, h, nx, ny, width)) == NULL) return ERROR_INT("pta not made", __func__, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * \brief pixRenderRandomCmapPtaa() * * \param[in] pix 1, 2, 4, 8, 16, 32 bpp * \param[in] ptaa * \param[in] polyflag 1 to interpret each Pta as a polyline; * 0 to simply render the Pta as a set of pixels * \param[in] width thickness of line; use only for polyline * \param[in] closeflag 1 to close the contour; 0 otherwise; * use only for polyline mode * \return pixd cmapped, 8 bpp or NULL on error * *
 * Notes:
 *      (1) This is a debugging routine, that displays a set of
 *          pixels, selected by the set of Ptas in a Ptaa,
 *          in a random color in a pix.
 *      (2) If %polyflag == 1, each Pta is considered to be a polyline,
 *          and is rendered using %width and %closeflag.  Each polyline
 *          is rendered in a random color.
 *      (3) If %polyflag == 0, all points in each Pta are rendered in a
 *          random color.  The %width and %closeflag parameters are ignored.
 *      (4) The output pix is 8 bpp and colormapped.  Up to 254
 *          different, randomly selected colors, can be used.
 *      (5) The rendered pixels replace the input pixels.  They will
 *          be clipped silently to the input pix.
 * 
*/ PIX * pixRenderRandomCmapPtaa(PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag) { l_int32 i, n, index, rval, gval, bval; PIXCMAP *cmap; PTA *pta, *ptat; PIX *pixd; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", __func__, NULL); if (polyflag != 0 && width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } pixd = pixConvertTo8(pix, FALSE); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pixd, cmap); if ((n = ptaaGetCount(ptaa)) == 0) return pixd; for (i = 0; i < n; i++) { index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); pta = ptaaGetPta(ptaa, i, L_CLONE); if (polyflag) ptat = generatePtaPolyline(pta, width, closeflag, 0); else ptat = ptaClone(pta); pixRenderPtaArb(pixd, ptat, rval, gval, bval); ptaDestroy(&pta); ptaDestroy(&ptat); } return pixd; } /*------------------------------------------------------------------* * Rendering and filling of polygons * *------------------------------------------------------------------*/ /*! * \brief pixRenderPolygon() * * \param[in] ptas of vertices, none repeated * \param[in] width of polygon outline * \param[out] pxmin [optional] min x value of input pts * \param[out] pymin [optional] min y value of input pts * \return pix 1 bpp, with outline generated, or NULL on error * *
 * Notes:
 *      (1) The pix is the minimum size required to contain the origin
 *          and the polygon.  For example, the max x value of the input
 *          points is w - 1, where w is the pix width.
 *      (2) The rendered line is 4-connected, so that an interior or
 *          exterior 8-c.c. flood fill operation works properly.
 * 
*/ PIX * pixRenderPolygon(PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin) { l_float32 fxmin, fxmax, fymin, fymax; PIX *pixd; PTA *pta1, *pta2; if (pxmin) *pxmin = 0; if (pymin) *pymin = 0; if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); /* Generate a 4-connected polygon line */ if ((pta1 = generatePtaPolyline(ptas, width, 1, 0)) == NULL) return (PIX *)ERROR_PTR("pta1 not made", __func__, NULL); if (width < 2) pta2 = convertPtaLineTo4cc(pta1); else pta2 = ptaClone(pta1); /* Render onto a minimum-sized pix */ ptaGetRange(pta2, &fxmin, &fxmax, &fymin, &fymax); if (pxmin) *pxmin = (l_int32)(fxmin + 0.5); if (pymin) *pymin = (l_int32)(fymin + 0.5); pixd = pixCreate((l_int32)(fxmax + 0.5) + 1, (l_int32)(fymax + 0.5) + 1, 1); pixRenderPolyline(pixd, pta2, width, L_SET_PIXELS, 1); ptaDestroy(&pta1); ptaDestroy(&pta2); return pixd; } /*! * \brief pixFillPolygon() * * \param[in] pixs 1 bpp, with 4-connected polygon outline * \param[in] pta vertices of the polygon * \param[in] xmin, ymin min values of vertices of polygon * \return pixd with outline filled, or NULL on error * *
 * Notes:
 *      (1) This fills the interior of the polygon, returning a
 *          new pix.  It works for both convex and non-convex polygons.
 *      (2) To generate a filled polygon from %pta:
 *            PIX *pixt = pixRenderPolygon(pta, 1, &xmin, &ymin);
 *            PIX *pixd = pixFillPolygon(pixt, pta, xmin, ymin);
 *            pixDestroy(&pixt);
 * 
*/ PIX * pixFillPolygon(PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin) { l_int32 w, h, i, n, inside, found; l_int32 *xstart, *xend; PIX *pixi, *pixd; if (!pixs || (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!pta) return (PIX *)ERROR_PTR("pta not defined", __func__, NULL); if (ptaGetCount(pta) < 2) return (PIX *)ERROR_PTR("pta has < 2 pts", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); xstart = (l_int32 *)LEPT_CALLOC(L_MAX(1, w / 2), sizeof(l_int32)); xend = (l_int32 *)LEPT_CALLOC(L_MAX(1, w / 2), sizeof(l_int32)); if (!xstart || !xend) { LEPT_FREE(xstart); LEPT_FREE(xend); return (PIX *)ERROR_PTR("xstart and xend not made", __func__, NULL); } /* Find a raster with 2 or more black runs. The first background * pixel after the end of the first run is likely to be inside * the polygon, and can be used as a seed pixel. */ found = FALSE; for (i = ymin + 1; i < h; i++) { pixFindHorizontalRuns(pixs, i, xstart, xend, &n); if (n > 1) { ptaPtInsidePolygon(pta, xend[0] + 1, i, &inside); if (inside) { found = TRUE; break; } } } if (!found) { L_WARNING("nothing found to fill\n", __func__); LEPT_FREE(xstart); LEPT_FREE(xend); return 0; } /* Place the seed pixel in the output image */ pixd = pixCreateTemplate(pixs); pixSetPixel(pixd, xend[0] + 1, i, 1); /* Invert pixs to make a filling mask, and fill from the seed */ pixi = pixInvert(NULL, pixs); pixSeedfillBinary(pixd, pixd, pixi, 4); /* Add the pixels of the original polygon outline */ pixOr(pixd, pixd, pixs); pixDestroy(&pixi); LEPT_FREE(xstart); LEPT_FREE(xend); return pixd; } /*------------------------------------------------------------------* * Contour rendering on grayscale images * *------------------------------------------------------------------*/ /*! * \brief pixRenderContours() * * \param[in] pixs 8 or 16 bpp; no colormap * \param[in] startval value of lowest contour; must be in [0 ... maxval] * \param[in] incr increment to next contour; must be > 0 * \param[in] outdepth either 1 or depth of pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The output can be either 1 bpp, showing just the contour
 *          lines, or a copy of the input pixs with the contour lines
 *          superposed.
 * 
*/ PIX * pixRenderContours(PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth) { l_int32 w, h, d, maxval, wpls, wpld, i, j, val, test; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16) return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", __func__, NULL); if (outdepth != 1 && outdepth != d) { L_WARNING("invalid outdepth; setting to 1\n", __func__); outdepth = 1; } maxval = (1 << d) - 1; if (startval < 0 || startval > maxval) return (PIX *)ERROR_PTR("startval not in [0 ... maxval]", __func__, NULL); if (incr < 1) return (PIX *)ERROR_PTR("incr < 1", __func__, NULL); if (outdepth == d) pixd = pixCopy(NULL, pixs); else pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); switch (d) { case 8: if (outdepth == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BIT(lined, j); } } } else { /* outdepth == d */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BYTE(lined, j, 0); } } } break; case 16: if (outdepth == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BIT(lined, j); } } } else { /* outdepth == d */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_TWO_BYTES(lined, j, 0); } } } break; default: return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", __func__, NULL); } return pixd; } /*! * \brief fpixAutoRenderContours() * * \param[in] fpix * \param[in] ncontours in [2 ... 500]; typically about 50 * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) The increment is set to get approximately %ncontours.
 *      (2) The proximity to the target value for contour display
 *          is set to 0.15.
 *      (3) Negative values are rendered in red; positive values as black.
 * 
*/ PIX * fpixAutoRenderContours(FPIX *fpix, l_int32 ncontours) { l_float32 minval, maxval, incr; if (!fpix) return (PIX *)ERROR_PTR("fpix not defined", __func__, NULL); if (ncontours < 2 || ncontours > 500) return (PIX *)ERROR_PTR("ncontours < 2 or > 500", __func__, NULL); fpixGetMin(fpix, &minval, NULL, NULL); fpixGetMax(fpix, &maxval, NULL, NULL); if (minval == maxval) return (PIX *)ERROR_PTR("all values in fpix are equal", __func__, NULL); incr = (maxval - minval) / ((l_float32)ncontours - 1); return fpixRenderContours(fpix, incr, 0.15f); } /*! * \brief fpixRenderContours() * * \param[in] fpixs * \param[in] incr increment between contours; must be > 0.0 * \param[in] proxim required proximity to target value; default 0.15 * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) Values are displayed when val/incr is within +-proxim
 *          to an integer.  The default value is 0.15; smaller values
 *          result in thinner contour lines.
 *      (2) Negative values are rendered in red; positive values as black.
 * 
*/ PIX * fpixRenderContours(FPIX *fpixs, l_float32 incr, l_float32 proxim) { l_int32 i, j, w, h, wpls, wpld; l_float32 val, invincr, finter, above, below, diff; l_uint32 *datad, *lined; l_float32 *datas, *lines; PIX *pixd; PIXCMAP *cmap; if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", __func__, NULL); if (incr <= 0.0) return (PIX *)ERROR_PTR("incr <= 0.0", __func__, NULL); if (proxim <= 0.0) proxim = 0.15f; /* default */ fpixGetDimensions(fpixs, &w, &h); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); pixcmapAddColor(cmap, 255, 255, 255); /* white */ pixcmapAddColor(cmap, 0, 0, 0); /* black */ pixcmapAddColor(cmap, 255, 0, 0); /* red */ datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); invincr = 1.0 / incr; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; finter = invincr * val; above = finter - floorf(finter); below = ceilf(finter) - finter; diff = L_MIN(above, below); if (diff <= proxim) { if (val < 0.0) SET_DATA_BYTE(lined, j, 2); else SET_DATA_BYTE(lined, j, 1); } } } return pixd; } /*------------------------------------------------------------------* * Boundary pt generation on 1 bpp images * *------------------------------------------------------------------*/ /*! * \brief pixGeneratePtaBoundary() * * \param[in] pixs 1 bpp * \param[in] width of boundary line * \return pta, or NULL on error * *
 * Notes:
 *      (1) Similar to ptaGetBoundaryPixels(), except here:
 *          * we only get pixels in the foreground
 *          * we can have a "line" width greater than 1 pixel.
 *      (2) Once generated, this can be applied to a random 1 bpp image
 *          to add a color boundary as follows:
 *             Pta *pta = pixGeneratePtaBoundary(pixs, width);
 *             Pix *pix1 = pixConvert1To8Cmap(pixs);
 *             pixRenderPtaArb(pix1, pta, rval, gval, bval);
 * 
*/ PTA * pixGeneratePtaBoundary(PIX *pixs, l_int32 width) { PIX *pix1; PTA *pta; if (!pixs || pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", __func__); width = 1; } pix1 = pixErodeBrick(NULL, pixs, 2 * width + 1, 2 * width + 1); pixXor(pix1, pix1, pixs); pta = ptaGetPixelsFromPix(pix1, NULL); pixDestroy(&pix1); return pta; } leptonica-1.86.0/src/graymorph.c000066400000000000000000001340701506303110300165240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file graymorph.c *
 *
 *      Top-level grayscale morphological operations (van Herk / Gil-Werman)
 *            PIX           *pixErodeGray()
 *            PIX           *pixDilateGray()
 *            PIX           *pixOpenGray()
 *            PIX           *pixCloseGray()
 *
 *      Special operations for 1x3, 3x1 and 3x3 Sels  (direct)
 *            PIX           *pixErodeGray3()
 *            static PIX    *pixErodeGray3h()
 *            static PIX    *pixErodeGray3v()
 *            PIX           *pixDilateGray3()
 *            static PIX    *pixDilateGray3h()
 *            static PIX    *pixDilateGray3v()
 *            PIX           *pixOpenGray3()
 *            PIX           *pixCloseGray3()
 *
 *      Low-level grayscale morphological operations
 *            static void    dilateGrayLow()
 *            static void    erodeGrayLow()
 *
 *
 *      Method: Algorithm by van Herk and Gil and Werman, 1992
 *
 *      Measured speed of the vH/G-W implementation is about 1 output
 *      pixel per 120 PIII clock cycles, for a horizontal or vertical
 *      erosion or dilation.  The computation time doubles for opening
 *      or closing, or for a square SE, as expected, and is independent
 *      of the size of the SE.
 *
 *      A faster implementation can be made directly for brick Sels
 *      of maximum size 3.  We unroll the computation for sets of 8 bytes.
 *      It needs to be called explicitly; the general functions do not
 *      default for the size 3 brick Sels.
 *
 *      We use the van Herk/Gil-Werman (vHGW) algorithm, [van Herk,
 *      Patt. Recog. Let. 13, pp. 517-521, 1992; Gil and Werman,
 *      IEEE Trans PAMI 15(5), pp. 504-507, 1993.]
 *      This was the first grayscale morphology
 *      algorithm to compute dilation and erosion with
 *      complexity independent of the size of the structuring
 *      element.  It is simple and elegant, and surprising that
 *      it was discovered as recently as 1992.  It works for
 *      SEs composed of horizontal and/or vertical lines.  The
 *      general case requires finding the Min or Max over an
 *      arbitrary set of pixels, and this requires a number of
 *      pixel comparisons equal to the SE "size" at each pixel
 *      in the image.  The vHGW algorithm requires not
 *      more than 3 comparisons at each point.  The algorithm has been
 *      recently refined by Gil and Kimmel ("Efficient Dilation
 *      Erosion, Opening and Closing Algorithms", in "Mathematical
 *      Morphology and its Applications to Image and Signal Processing",
 *      the proceedings of the International Symposium on Mathematical
 *      Morphology, Palo Alto, CA, June 2000, Kluwer Academic
 *      Publishers, pp. 301-310).  They bring this number down below
 *      1.5 comparisons per output pixel but at a cost of significantly
 *      increased complexity, so I don't bother with that here.
 *
 *      In brief, the method is as follows.  We evaluate the dilation
 *      in groups of "size" pixels, equal to the size of the SE.
 *      For horizontal, we start at x = "size"/2 and go
 *      (w - 2 * ("size"/2))/"size" steps.  This means that
 *      we don't evaluate the first 0.5 * "size" pixels and, worst
 *      case, the last 1.5 * "size" pixels.  Thus we embed the
 *      image in a larger image with these augmented dimensions, where
 *      the new border pixels are appropriately initialized (0 for
 *      dilation; 255 for erosion), and remove the boundary at the end.
 *      (For vertical, use h instead of w.)   Then for each group
 *      of "size" pixels, we form an array of length 2 * "size" + 1,
 *      consisting of backward and forward partial maxima (for
 *      dilation) or minima (for erosion).  This represents a
 *      jumping window computed from the source image, over which
 *      the SE will slide.  The center of the array gets the source
 *      pixel at the center of the SE.  Call this the center pixel
 *      of the window.  Array values to left of center get
 *      the maxima(minima) of the pixels from the center
 *      one and going to the left an equal distance.  Array
 *      values to the right of center get the maxima(minima) to
 *      the pixels from the center one and going to the right
 *      an equal distance.  These are computed sequentially starting
 *      from the center one.  The SE (of length "size") can slide over this
 *      window (of length 2 * "size + 1) at "size" different places.
 *      At each place, the maxima(minima) of the values in the window
 *      that correspond to the end points of the SE give the extremal
 *      values over that interval, and these are stored at the dest
 *      pixel corresponding to the SE center.  A picture is worth
 *      at least this many words, so if this isn't clear, see the
 *      leptonica documentation on grayscale morphology.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Special static operations for 3x1, 1x3 and 3x3 structuring elements */ static PIX *pixErodeGray3h(PIX *pixs); static PIX *pixErodeGray3v(PIX *pixs); static PIX *pixDilateGray3h(PIX *pixs); static PIX *pixDilateGray3v(PIX *pixs); /* Low-level gray morphological operations */ static void dilateGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *maxarray); static void erodeGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *minarray); /*-----------------------------------------------------------------* * Top-level grayscale morphological operations * *-----------------------------------------------------------------*/ /*! * \brief pixErodeGray() * * \param[in] pixs * \param[in] hsize of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixErodeGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer, *minarray; l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } pixb = pixt = pixd = NULL; buffer = minarray = NULL; if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255); pixt = pixCreateTemplate(pixb); if (!pixb || !pixt) { L_ERROR("pixb and pixt not made\n", __func__); goto cleanup; } pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); maxsize = L_MAX(hsize, vsize); minarray = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); if (!buffer || !minarray) { L_ERROR("buffer and minarray not made\n", __func__); goto cleanup; } if (vsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, minarray); } else if (hsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, minarray); } else { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, minarray); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, minarray); pixDestroy(&pixt); pixt = pixClone(pixb); } pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix); if (!pixd) L_ERROR("pixd not made\n", __func__); cleanup: LEPT_FREE(buffer); LEPT_FREE(minarray); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * \brief pixDilateGray() * * \param[in] pixs * \param[in] hsize of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixDilateGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer, *maxarray; l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } pixb = pixt = pixd = NULL; buffer = maxarray = NULL; if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0); pixt = pixCreateTemplate(pixb); if (!pixb || !pixt) { L_ERROR("pixb and pixt not made\n", __func__); goto cleanup; } pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); maxsize = L_MAX(hsize, vsize); maxarray = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); if (!buffer || !maxarray) { L_ERROR("buffer and maxarray not made\n", __func__); goto cleanup; } if (vsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, maxarray); } else if (hsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, maxarray); } else { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, maxarray); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, maxarray); pixDestroy(&pixt); pixt = pixClone(pixb); } pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix); if (!pixd) L_ERROR("pixd not made\n", __func__); cleanup: LEPT_FREE(buffer); LEPT_FREE(maxarray); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * \brief pixOpenGray() * * \param[in] pixs * \param[in] hsize of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixOpenGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer; l_uint8 *array; /* used to find either min or max in interval */ l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } pixb = pixt = pixd = NULL; buffer = array = NULL; if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255); pixt = pixCreateTemplate(pixb); if (!pixb || !pixt) { L_ERROR("pixb and pixt not made\n", __func__); goto cleanup; } pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); maxsize = L_MAX(hsize, vsize); array = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); if (!buffer || !array) { L_ERROR("buffer and array not made\n", __func__); goto cleanup; } if (vsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, buffer, array); } else if (hsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } else { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix); if (!pixd) L_ERROR("pixd not made\n", __func__); cleanup: LEPT_FREE(buffer); LEPT_FREE(array); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * \brief pixCloseGray() * * \param[in] pixs * \param[in] hsize of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixCloseGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer; l_uint8 *array; /* used to find either min or max in interval */ l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } pixb = pixt = pixd = NULL; buffer = array = NULL; if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0); pixt = pixCreateTemplate(pixb); if (!pixb || !pixt) { L_ERROR("pixb and pixt not made\n", __func__); goto cleanup; } pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); maxsize = L_MAX(hsize, vsize); array = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); if (!buffer || !array) { L_ERROR("buffer and array not made\n", __func__); goto cleanup; } if (vsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, buffer, array); } else if (hsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } else { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix); if (!pixd) L_ERROR("pixd not made\n", __func__); cleanup: LEPT_FREE(buffer); LEPT_FREE(array); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*-----------------------------------------------------------------* * Special operations for 1x3, 3x1 and 3x3 Sels * *-----------------------------------------------------------------*/ /*! * \brief pixErodeGray3() * * \param[in] pixs 8 bpp, not cmapped * \param[in] hsize 1 or 3 * \param[in] vsize 1 or 3 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
 *      (2) If hsize = vsize = 1, just returns a copy.
 *      (3) It would be nice not to add a border, but it is required
 *          if we want the same results as from the general case.
 *          We add 4 bytes on the left to speed up the copying, and
 *          8 bytes at the right and bottom to allow unrolling of
 *          the computation of 8 pixels.
 * 
*/ PIX * pixErodeGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", __func__, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", __func__, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); if (vsize == 1) pixbd = pixErodeGray3h(pixb); else if (hsize == 1) pixbd = pixErodeGray3v(pixb); else { /* vize == hsize == 3 */ pixt = pixErodeGray3h(pixb); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * \brief pixErodeGray3h() * * \param[in] pixs 8 bpp, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for horizontal 3x1 brick Sel;
 *          also used as the first step for the 3x3 brick Sel.
 * 
*/ static PIX * pixErodeGray3h(PIX *pixs) { l_uint32 *datas, *datad, *lines, *lined; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); pixd = pixCreateTemplate(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpl; lined = datad + i * wpl; for (j = 1; j < w - 8; j += 8) { val0 = GET_DATA_BYTE(lines, j - 1); val1 = GET_DATA_BYTE(lines, j); val2 = GET_DATA_BYTE(lines, j + 1); val3 = GET_DATA_BYTE(lines, j + 2); val4 = GET_DATA_BYTE(lines, j + 3); val5 = GET_DATA_BYTE(lines, j + 4); val6 = GET_DATA_BYTE(lines, j + 5); val7 = GET_DATA_BYTE(lines, j + 6); val8 = GET_DATA_BYTE(lines, j + 7); val9 = GET_DATA_BYTE(lines, j + 8); minval = L_MIN(val1, val2); SET_DATA_BYTE(lined, j, L_MIN(val0, minval)); SET_DATA_BYTE(lined, j + 1, L_MIN(minval, val3)); minval = L_MIN(val3, val4); SET_DATA_BYTE(lined, j + 2, L_MIN(val2, minval)); SET_DATA_BYTE(lined, j + 3, L_MIN(minval, val5)); minval = L_MIN(val5, val6); SET_DATA_BYTE(lined, j + 4, L_MIN(val4, minval)); SET_DATA_BYTE(lined, j + 5, L_MIN(minval, val7)); minval = L_MIN(val7, val8); SET_DATA_BYTE(lined, j + 6, L_MIN(val6, minval)); SET_DATA_BYTE(lined, j + 7, L_MIN(minval, val9)); } } return pixd; } /*! * \brief pixErodeGray3v() * * \param[in] pixs 8 bpp, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for vertical 1x3 brick Sel;
 *          also used as the second step for the 3x3 brick Sel.
 *      (2) Surprisingly, this is faster than setting up the
 *          lineptrs array and accessing into it; e.g.,
 *              val4 = GET_DATA_BYTE(lines8[i + 3], j);
 * 
*/ static PIX * pixErodeGray3v(PIX *pixs) { l_uint32 *datas, *datad, *linesi, *linedi; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); pixd = pixCreateTemplate(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { for (i = 1; i < h - 8; i += 8) { linesi = datas + i * wpl; linedi = datad + i * wpl; val0 = GET_DATA_BYTE(linesi - wpl, j); val1 = GET_DATA_BYTE(linesi, j); val2 = GET_DATA_BYTE(linesi + wpl, j); val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); minval = L_MIN(val1, val2); SET_DATA_BYTE(linedi, j, L_MIN(val0, minval)); SET_DATA_BYTE(linedi + wpl, j, L_MIN(minval, val3)); minval = L_MIN(val3, val4); SET_DATA_BYTE(linedi + 2 * wpl, j, L_MIN(val2, minval)); SET_DATA_BYTE(linedi + 3 * wpl, j, L_MIN(minval, val5)); minval = L_MIN(val5, val6); SET_DATA_BYTE(linedi + 4 * wpl, j, L_MIN(val4, minval)); SET_DATA_BYTE(linedi + 5 * wpl, j, L_MIN(minval, val7)); minval = L_MIN(val7, val8); SET_DATA_BYTE(linedi + 6 * wpl, j, L_MIN(val6, minval)); SET_DATA_BYTE(linedi + 7 * wpl, j, L_MIN(minval, val9)); } } return pixd; } /*! * \brief pixDilateGray3() * * \param[in] pixs 8 bpp, not cmapped * \param[in] hsize 1 or 3 * \param[in] vsize 1 or 3 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixDilateGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", __func__, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", __func__, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); if (vsize == 1) pixbd = pixDilateGray3h(pixb); else if (hsize == 1) pixbd = pixDilateGray3v(pixb); else { /* vize == hsize == 3 */ pixt = pixDilateGray3h(pixb); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * \brief pixDilateGray3h() * * \param[in] pixs 8 bpp, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for horizontal 3x1 brick Sel;
 *          also used as the first step for the 3x3 brick Sel.
 * 
*/ static PIX * pixDilateGray3h(PIX *pixs) { l_uint32 *datas, *datad, *lines, *lined; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); pixd = pixCreateTemplate(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpl; lined = datad + i * wpl; for (j = 1; j < w - 8; j += 8) { val0 = GET_DATA_BYTE(lines, j - 1); val1 = GET_DATA_BYTE(lines, j); val2 = GET_DATA_BYTE(lines, j + 1); val3 = GET_DATA_BYTE(lines, j + 2); val4 = GET_DATA_BYTE(lines, j + 3); val5 = GET_DATA_BYTE(lines, j + 4); val6 = GET_DATA_BYTE(lines, j + 5); val7 = GET_DATA_BYTE(lines, j + 6); val8 = GET_DATA_BYTE(lines, j + 7); val9 = GET_DATA_BYTE(lines, j + 8); maxval = L_MAX(val1, val2); SET_DATA_BYTE(lined, j, L_MAX(val0, maxval)); SET_DATA_BYTE(lined, j + 1, L_MAX(maxval, val3)); maxval = L_MAX(val3, val4); SET_DATA_BYTE(lined, j + 2, L_MAX(val2, maxval)); SET_DATA_BYTE(lined, j + 3, L_MAX(maxval, val5)); maxval = L_MAX(val5, val6); SET_DATA_BYTE(lined, j + 4, L_MAX(val4, maxval)); SET_DATA_BYTE(lined, j + 5, L_MAX(maxval, val7)); maxval = L_MAX(val7, val8); SET_DATA_BYTE(lined, j + 6, L_MAX(val6, maxval)); SET_DATA_BYTE(lined, j + 7, L_MAX(maxval, val9)); } } return pixd; } /*! * \brief pixDilateGray3v() * * \param[in] pixs 8 bpp, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for vertical 1x3 brick Sel;
 *          also used as the second step for the 3x3 brick Sel.
 * 
*/ static PIX * pixDilateGray3v(PIX *pixs) { l_uint32 *datas, *datad, *linesi, *linedi; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); pixd = pixCreateTemplate(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { for (i = 1; i < h - 8; i += 8) { linesi = datas + i * wpl; linedi = datad + i * wpl; val0 = GET_DATA_BYTE(linesi - wpl, j); val1 = GET_DATA_BYTE(linesi, j); val2 = GET_DATA_BYTE(linesi + wpl, j); val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); maxval = L_MAX(val1, val2); SET_DATA_BYTE(linedi, j, L_MAX(val0, maxval)); SET_DATA_BYTE(linedi + wpl, j, L_MAX(maxval, val3)); maxval = L_MAX(val3, val4); SET_DATA_BYTE(linedi + 2 * wpl, j, L_MAX(val2, maxval)); SET_DATA_BYTE(linedi + 3 * wpl, j, L_MAX(maxval, val5)); maxval = L_MAX(val5, val6); SET_DATA_BYTE(linedi + 4 * wpl, j, L_MAX(val4, maxval)); SET_DATA_BYTE(linedi + 5 * wpl, j, L_MAX(maxval, val7)); maxval = L_MAX(val7, val8); SET_DATA_BYTE(linedi + 6 * wpl, j, L_MAX(val6, maxval)); SET_DATA_BYTE(linedi + 7 * wpl, j, L_MAX(maxval, val9)); } } return pixd; } /*! * \brief pixOpenGray3() * * \param[in] pixs 8 bpp, not cmapped * \param[in] hsize 1 or 3 * \param[in] vsize 1 or 3 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
 *      (2) If hsize = vsize = 1, just returns a copy.
 *      (3) It would be nice not to add a border, but it is required
 *          to get the same results as for the general case.
 * 
*/ PIX * pixOpenGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", __func__, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", __func__, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); /* set to max */ if (vsize == 1) { pixt = pixErodeGray3h(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 0); /* set to min */ pixbd = pixDilateGray3h(pixt); pixDestroy(&pixt); } else if (hsize == 1) { pixt = pixErodeGray3v(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 0); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } else { /* vize == hsize == 3 */ pixt = pixErodeGray3h(pixb); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); pixSetBorderVal(pixbd, 4, 8, 2, 8, 0); pixt = pixDilateGray3h(pixbd); pixDestroy(&pixbd); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * \brief pixCloseGray3() * * \param[in] pixs 8 bpp, not cmapped * \param[in] hsize 1 or 3 * \param[in] vsize 1 or 3 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
 *      (2) If hsize = vsize = 1, just returns a copy.
 * 
*/ PIX * pixCloseGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", __func__, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", __func__, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); /* set to min */ if (vsize == 1) { pixt = pixDilateGray3h(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 255); /* set to max */ pixbd = pixErodeGray3h(pixt); pixDestroy(&pixt); } else if (hsize == 1) { pixt = pixDilateGray3v(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 255); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } else { /* vize == hsize == 3 */ pixt = pixDilateGray3h(pixb); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); pixSetBorderVal(pixbd, 4, 8, 2, 8, 255); pixt = pixErodeGray3h(pixbd); pixDestroy(&pixbd); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*-----------------------------------------------------------------* * Low-level gray morphological operations * *-----------------------------------------------------------------*/ /*! * \brief dilateGrayLow() * * \param[in] datad 8 bpp dsst image * \param[in] w, h dimensions of src and dest * \param[in] wpld words/line of dest * \param[in] datas 8 bpp src image * \param[in] wpls words/line of src * \param[in] size full length of SEL; restricted to odd numbers * \param[in] direction L_HORIZ or L_VERT * \param[in] buffer holds full line or column of src image pixels * \param[in] maxarray array of dimension 2*size+1 * \return void * *
 * Notes:
 *        (1) To eliminate border effects on the actual image, these images
 *            are prepared with an additional border of dimensions:
 *               leftpix = 0.5 * size
 *               rightpix = 1.5 * size
 *               toppix = 0.5 * size
 *               bottompix = 1.5 * size
 *            and we initialize the src border pixels to 0.
 *            This allows full processing over the actual image; at
 *            the end the border is removed.
 *        (2) Uses algorithm of van Herk, Gil and Werman
 * 
*/ static void dilateGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *maxarray) { l_int32 i, j, k; l_int32 hsize, nsteps, startmax, startx, starty; l_uint8 maxval; l_uint32 *lines, *lined; if (direction == L_HORIZ) { hsize = size / 2; nsteps = (w - 2 * hsize) / size; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* fill buffer with pixels in byte order */ for (j = 0; j < w; j++) buffer[j] = GET_DATA_BYTE(lines, j); for (j = 0; j < nsteps; j++) { /* refill the minarray */ startmax = (j + 1) * size - 1; maxarray[size - 1] = buffer[startmax]; for (k = 1; k < size; k++) { maxarray[size - 1 - k] = L_MAX(maxarray[size - k], buffer[startmax - k]); maxarray[size - 1 + k] = L_MAX(maxarray[size + k - 2], buffer[startmax + k]); } /* compute dilation values */ startx = hsize + j * size; SET_DATA_BYTE(lined, startx, maxarray[0]); SET_DATA_BYTE(lined, startx + size - 1, maxarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); SET_DATA_BYTE(lined, startx + k, maxval); } } } } else { /* direction == L_VERT */ hsize = size / 2; nsteps = (h - 2 * hsize) / size; for (j = 0; j < w; j++) { /* fill buffer with pixels in byte order */ for (i = 0; i < h; i++) { lines = datas + i * wpls; buffer[i] = GET_DATA_BYTE(lines, j); } for (i = 0; i < nsteps; i++) { /* refill the minarray */ startmax = (i + 1) * size - 1; maxarray[size - 1] = buffer[startmax]; for (k = 1; k < size; k++) { maxarray[size - 1 - k] = L_MAX(maxarray[size - k], buffer[startmax - k]); maxarray[size - 1 + k] = L_MAX(maxarray[size + k - 2], buffer[startmax + k]); } /* compute dilation values */ starty = hsize + i * size; lined = datad + starty * wpld; SET_DATA_BYTE(lined, j, maxarray[0]); SET_DATA_BYTE(lined + (size - 1) * wpld, j, maxarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); SET_DATA_BYTE(lined + wpld * k, j, maxval); } } } } return; } /*! * \brief erodeGrayLow() * * \param[in] datad 8 bpp dsst image * \param[in] w, h dimensions of src and dest * \param[in] wpld words/line of dest * \param[in] datas 8 bpp src image * \param[in] wpls words/line of src * \param[in] size full length of SEL; restricted to odd numbers * \param[in] direction L_HORIZ or L_VERT * \param[in] buffer holds full line or column of src image pixels * \param[in] minarray array of dimension 2*size+1 * \return void * *
 * Notes:
 *        (1) See notes in dilateGrayLow()
 * 
*/ static void erodeGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *minarray) { l_int32 i, j, k; l_int32 hsize, nsteps, startmin, startx, starty; l_uint8 minval; l_uint32 *lines, *lined; if (direction == L_HORIZ) { hsize = size / 2; nsteps = (w - 2 * hsize) / size; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* fill buffer with pixels in byte order */ for (j = 0; j < w; j++) buffer[j] = GET_DATA_BYTE(lines, j); for (j = 0; j < nsteps; j++) { /* refill the minarray */ startmin = (j + 1) * size - 1; minarray[size - 1] = buffer[startmin]; for (k = 1; k < size; k++) { minarray[size - 1 - k] = L_MIN(minarray[size - k], buffer[startmin - k]); minarray[size - 1 + k] = L_MIN(minarray[size + k - 2], buffer[startmin + k]); } /* compute erosion values */ startx = hsize + j * size; SET_DATA_BYTE(lined, startx, minarray[0]); SET_DATA_BYTE(lined, startx + size - 1, minarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { minval = L_MIN(minarray[k], minarray[k + size - 1]); SET_DATA_BYTE(lined, startx + k, minval); } } } } else { /* direction == L_VERT */ hsize = size / 2; nsteps = (h - 2 * hsize) / size; for (j = 0; j < w; j++) { /* fill buffer with pixels in byte order */ for (i = 0; i < h; i++) { lines = datas + i * wpls; buffer[i] = GET_DATA_BYTE(lines, j); } for (i = 0; i < nsteps; i++) { /* refill the minarray */ startmin = (i + 1) * size - 1; minarray[size - 1] = buffer[startmin]; for (k = 1; k < size; k++) { minarray[size - 1 - k] = L_MIN(minarray[size - k], buffer[startmin - k]); minarray[size - 1 + k] = L_MIN(minarray[size + k - 2], buffer[startmin + k]); } /* compute erosion values */ starty = hsize + i * size; lined = datad + starty * wpld; SET_DATA_BYTE(lined, j, minarray[0]); SET_DATA_BYTE(lined + (size - 1) * wpld, j, minarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { minval = L_MIN(minarray[k], minarray[k + size - 1]); SET_DATA_BYTE(lined + wpld * k, j, minval); } } } } return; } leptonica-1.86.0/src/grayquant.c000066400000000000000000003173711506303110300165360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file grayquant.c *
 *
 *      Thresholding from 8 bpp to 1 bpp
 *
 *          Floyd-Steinberg dithering to binary
 *              PIX         *pixDitherToBinary()
 *              PIX         *pixDitherToBinarySpec()
 *              static void  ditherToBinaryLow()
 *              void         ditherToBinaryLineLow()
 *
 *          Simple (pixelwise) binarization with fixed threshold
 *              PIX         *pixThresholdToBinary()
 *              static void  thresholdToBinaryLow()
 *              void         thresholdToBinaryLineLow()
 *
 *          Binarization with variable threshold
 *              PIX         *pixVarThresholdToBinary()
 *
 *          Binarization by adaptive mapping
 *              PIX         *pixAdaptThresholdToBinary()
 *              PIX         *pixAdaptThresholdToBinaryGen()
 *
 *          Generate a binary mask from pixels of particular values
 *              PIX         *pixGenerateMaskByValue()
 *              PIX         *pixGenerateMaskByBand()
 *
 *      Thresholding from 8 bpp to 2 bpp
 *
 *          Floyd-Steinberg-like dithering to 2 bpp
 *              PIX         *pixDitherTo2bpp()
 *              PIX         *pixDitherTo2bppSpec()
 *              static void  ditherTo2bppLow()
 *              static void  ditherTo2bppLineLow()
 *              static l_int32  make8To2DitherTables()
 *
 *          Simple (pixelwise) thresholding to 2 bpp with optional cmap
 *              PIX         *pixThresholdTo2bpp()
 *              static void  thresholdTo2bppLow()
 *
 *      Simple (pixelwise) thresholding from 8 bpp to 4 bpp
 *              PIX         *pixThresholdTo4bpp()
 *              static void  thresholdTo4bppLow()
 *
 *      Simple (pixelwise) quantization on 8 bpp grayscale
 *              PIX         *pixThresholdOn8bpp()
 *
 *      Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp
 *              PIX         *pixThresholdGrayArb()
 *
 *      Quantization tables for linear thresholds of grayscale images
 *              l_int32     *makeGrayQuantIndexTable()
 *              static l_int32  *makeGrayQuantTargetTable()
 *
 *      Quantization table for arbitrary thresholding of grayscale images
 *              l_int32      makeGrayQuantTableArb()
 *              static l_int32   makeGrayQuantColormapArb()
 *
 *      Thresholding from 32 bpp rgb to 1 bpp
 *      (really color quantization, but it's better placed in this file)
 *              PIX         *pixGenerateMaskByBand32()
 *              PIX         *pixGenerateMaskByDiscr32()
 *
 *      Histogram-based grayscale quantization
 *              PIX         *pixGrayQuantFromHisto()
 *              static l_int32  numaFillCmapFromHisto()
 *
 *      Color quantize grayscale image using existing colormap
 *              PIX         *pixGrayQuantFromCmap()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" static void ditherToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip); static void thresholdToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls, l_int32 thresh); static void ditherTo2bppLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14); static void ditherTo2bppLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag); static l_int32 make8To2DitherTables(l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 cliptoblack, l_int32 cliptowhite); static void thresholdTo2bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab); static void thresholdTo4bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab); static l_int32 *makeGrayQuantTargetTable(l_int32 nlevels, l_int32 depth); static l_int32 makeGrayQuantColormapArb(PIX *pixs, l_int32 *tab, l_int32 outdepth, PIXCMAP **pcmap); static l_int32 numaFillCmapFromHisto(NUMA *na, PIXCMAP *cmap, l_float32 minfract, l_int32 maxsize, l_int32 **plut); #ifndef NO_CONSOLE_IO #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Binarization by Floyd-Steinberg dithering * *------------------------------------------------------------------*/ /*! * \brief pixDitherToBinary() * * \param[in] pixs * \return pixd dithered binary, or NULL on error * * The Floyd-Steinberg error diffusion dithering algorithm * binarizes an 8 bpp grayscale image to a threshold of 128. * If a pixel has a value above 127, it is binarized to white * and the excess below 255 is subtracted from three * neighboring pixels in the fractions 3/8 to i, j+1, * 3/8 to i+1, j) and 1/4 to (i+1,j+1, truncating to 0 * if necessary. Likewise, if it the pixel has a value * below 128, it is binarized to black and the excess above 0 * is added to the neighboring pixels, truncating to 255 if necessary. * * This function differs from straight dithering in that it allows * clipping of grayscale to 0 or 255 if the values are * sufficiently close, without distribution of the excess. * This uses default values to specify the range of lower * and upper values near 0 and 255, rsp that are clipped * to black and white without propagating the excess. * Not propagating the excess has the effect of reducing the * snake patterns in parts of the image that are nearly black or white; * however, it also prevents the attempt to reproduce gray for those values. * * The implementation is straightforward. It uses a pair of * line buffers to avoid changing pixs. It is about the same speed * as pixDitherToBinaryLUT(), which uses three LUTs. */ PIX * pixDitherToBinary(PIX *pixs) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", __func__, NULL); return pixDitherToBinarySpec(pixs, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1); } /*! * \brief pixDitherToBinarySpec() * * \param[in] pixs * \param[in] lowerclip lower clip distance to black; use 0 for default * \param[in] upperclip upper clip distance to white; use 0 for default * \return pixd dithered binary, or NULL on error * *
 * Notes:
 *      (1) See comments above in pixDitherToBinary() for details.
 *      (2) The input parameters lowerclip and upperclip specify the range
 *          of lower and upper values (near 0 and 255, rsp) that are
 *          clipped to black and white without propagating the excess.
 *          For that reason, lowerclip and upperclip should be small numbers.
 * 
*/ PIX * pixDitherToBinarySpec(PIX *pixs, l_int32 lowerclip, l_int32 upperclip) { l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", __func__, NULL); if (lowerclip < 0 || lowerclip > 255) return (PIX *)ERROR_PTR("invalid value for lowerclip", __func__, NULL); if (upperclip < 0 || upperclip > 255) return (PIX *)ERROR_PTR("invalid value for upperclip", __func__, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists */ if ((pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); if (!bufs1 || !bufs2) { LEPT_FREE(bufs1); LEPT_FREE(bufs2); pixDestroy(&pixd); pixDestroy(&pixt); return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", __func__, NULL); } ditherToBinaryLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, lowerclip, upperclip); LEPT_FREE(bufs1); LEPT_FREE(bufs2); pixDestroy(&pixt); return pixd; } /*! * \brief ditherToBinaryLow() * * See comments in pixDitherToBinary() in binarize.c */ static void ditherToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 1); } /*! * \brief ditherToBinaryLineLow() * * \param[in] lined ptr to beginning of dest line * \param[in] w width of image in pixels * \param[in] bufs1 buffer of current source line * \param[in] bufs2 buffer of next source line * \param[in] lowerclip lower clip distance to black * \param[in] upperclip upper clip distance to white * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line * \return void * * Dispatches FS error diffusion dithering for * a single line of the image. If lastlineflag == 0, * both source buffers are used; otherwise, only bufs1 * is used. We use source buffers because the error * is propagated into them, and we don't want to change * the input src image. * * We break dithering out line by line to make it * easier to combine functions like interpolative * scaling and error diffusion dithering, as such a * combination of operations obviates the need to * generate a 2x grayscale image as an intermediary. */ void ditherToBinaryLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag) { l_int32 j; l_int32 oval, eval; l_uint8 fval1, fval2, rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; fval2 = eval / 4; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MAX(0, rval - fval1); SET_DATA_BYTE(bufs1, j + 1, rval); bval = GET_DATA_BYTE(bufs2, j); bval = L_MAX(0, bval - fval1); SET_DATA_BYTE(bufs2, j, bval); dval = GET_DATA_BYTE(bufs2, j + 1); dval = L_MAX(0, dval - fval2); SET_DATA_BYTE(bufs2, j + 1, dval); } } else { /* oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; fval2 = oval / 4; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MIN(255, rval + fval1); SET_DATA_BYTE(bufs1, j + 1, rval); bval = GET_DATA_BYTE(bufs2, j); bval = L_MIN(255, bval + fval1); SET_DATA_BYTE(bufs2, j, bval); dval = GET_DATA_BYTE(bufs2, j + 1); dval = L_MIN(255, dval + fval2); SET_DATA_BYTE(bufs2, j + 1, dval); } } } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; bval = GET_DATA_BYTE(bufs2, j); bval = L_MAX(0, bval - fval1); SET_DATA_BYTE(bufs2, j, bval); } } else { /*oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; bval = GET_DATA_BYTE(bufs2, j); bval = L_MIN(255, bval + fval1); SET_DATA_BYTE(bufs2, j, bval); } } } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MAX(0, rval - fval1); SET_DATA_BYTE(bufs1, j + 1, rval); } } else { /* oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MIN(255, rval + fval1); SET_DATA_BYTE(bufs1, j + 1, rval); } } } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); if (oval < 128) SET_DATA_BIT(lined, j); /* ON pixel */ } } /*------------------------------------------------------------------* * Simple (pixelwise) binarization with fixed threshold * *------------------------------------------------------------------*/ /*! * \brief pixThresholdToBinary() * * \param[in] pixs 4 or 8 bpp * \param[in] thresh threshold value * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) If the source pixel is less than the threshold value,
 *          the dest will be 1; otherwise, it will be 0.
 *      (2) For example, for 8 bpp src pix, if %thresh == 256, the dest
 *          1 bpp pix is all ones (fg), and if %thresh == 0, the dest
 *          pix is all zeros (bg).
 *
 * 
*/ PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh) { l_int32 d, w, h, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs must be 4 or 8 bpp", __func__, NULL); if (thresh < 0) return (PIX *)ERROR_PTR("thresh must be non-negative", __func__, NULL); if (d == 4 && thresh > 16) return (PIX *)ERROR_PTR("4 bpp thresh not in {0-16}", __func__, NULL); if (d == 8 && thresh > 256) return (PIX *)ERROR_PTR("8 bpp thresh not in {0-256}", __func__, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists. If there is a colormap, * pixt will be 8 bpp regardless of the depth of pixs. */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); if (pixGetColormap(pixs) && d == 4) { /* promoted to 8 bpp */ d = 8; thresh *= 16; } thresholdToBinaryLow(datad, w, h, wpld, datat, d, wplt, thresh); pixDestroy(&pixt); return pixd; } /*! * \brief thresholdToBinaryLow() * * If the source pixel is less than thresh, * the dest will be 1; otherwise, it will be 0 */ static void thresholdToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls, l_int32 thresh) { l_int32 i; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; thresholdToBinaryLineLow(lined, w, lines, d, thresh); } } /* * thresholdToBinaryLineLow() * */ void thresholdToBinaryLineLow(l_uint32 *lined, l_int32 w, l_uint32 *lines, l_int32 d, l_int32 thresh) { l_int32 j, k, gval, scount, dcount; l_uint32 sword, dword; switch (d) { case 4: /* Unrolled as 4 source words, 1 dest word */ for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { dword = 0; for (k = 0; k < 4; k++) { sword = lines[scount++]; dword <<= 8; gval = (sword >> 28) & 0xf; /* Trick used here and below: if gval < thresh then * gval - thresh < 0, so its high-order bit is 1, and * ((gval - thresh) >> 31) & 1 == 1; likewise, if * gval >= thresh, then ((gval - thresh) >> 31) & 1 == 0 * Doing it this way avoids a random (and thus easily * mispredicted) branch on each pixel. */ dword |= ((gval - thresh) >> 24) & 128; gval = (sword >> 24) & 0xf; dword |= ((gval - thresh) >> 25) & 64; gval = (sword >> 20) & 0xf; dword |= ((gval - thresh) >> 26) & 32; gval = (sword >> 16) & 0xf; dword |= ((gval - thresh) >> 27) & 16; gval = (sword >> 12) & 0xf; dword |= ((gval - thresh) >> 28) & 8; gval = (sword >> 8) & 0xf; dword |= ((gval - thresh) >> 29) & 4; gval = (sword >> 4) & 0xf; dword |= ((gval - thresh) >> 30) & 2; gval = sword & 0xf; dword |= ((gval - thresh) >> 31) & 1; } lined[dcount++] = dword; } if (j < w) { dword = 0; for (; j < w; j++) { if ((j & 7) == 0) { sword = lines[scount++]; } gval = (sword >> 28) & 0xf; sword <<= 4; dword |= (((gval - thresh) >> 31) & 1) << (31 - (j & 31)); } lined[dcount] = dword; } #if DEBUG_UNROLLING #define CHECK_BIT(a, b, c) if (GET_DATA_BIT(a, b) != c) { \ lept_stderr("Error: mismatch at %d/%d(%d), %d vs %d\n", \ j, w, d, GET_DATA_BIT(a, b), c); } for (j = 0; j < w; j++) { gval = GET_DATA_QBIT(lines, j); CHECK_BIT(lined, j, gval < thresh ? 1 : 0); } #endif break; case 8: /* Unrolled as 8 source words, 1 dest word */ for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { dword = 0; for (k = 0; k < 8; k++) { sword = lines[scount++]; dword <<= 4; gval = (sword >> 24) & 0xff; dword |= ((gval - thresh) >> 28) & 8; gval = (sword >> 16) & 0xff; dword |= ((gval - thresh) >> 29) & 4; gval = (sword >> 8) & 0xff; dword |= ((gval - thresh) >> 30) & 2; gval = sword & 0xff; dword |= ((gval - thresh) >> 31) & 1; } lined[dcount++] = dword; } if (j < w) { dword = 0; for (; j < w; j++) { if ((j & 3) == 0) { sword = lines[scount++]; } gval = (sword >> 24) & 0xff; sword <<= 8; dword |= (l_uint64)(((gval - thresh) >> 31) & 1) << (31 - (j & 31)); } lined[dcount] = dword; } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { gval = GET_DATA_BYTE(lines, j); CHECK_BIT(lined, j, gval < thresh ? 1 : 0); } #undef CHECK_BIT #endif break; default: L_ERROR("src depth not 4 or 8 bpp\n", __func__); break; } } /*------------------------------------------------------------------* * Binarization with variable threshold * *------------------------------------------------------------------*/ /*! * \brief pixVarThresholdToBinary() * * \param[in] pixs 8 bpp * \param[in] pixg 8 bpp; contains threshold values for each pixel * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) If the pixel in pixs is less than the corresponding pixel
 *          in pixg, the dest will be 1; otherwise it will be 0.
 * 
*/ PIX * pixVarThresholdToBinary(PIX *pixs, PIX *pixg) { l_int32 i, j, vals, valg, w, h, d, wpls, wplg, wpld; l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", __func__, NULL); if (!pixSizesEqual(pixs, pixg)) return (PIX *)ERROR_PTR("pix sizes not equal", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); for (i = 0; i < h; i++) { lines = datas + i * wpls; lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); if (vals < valg) SET_DATA_BIT(lined, j); } } return pixd; } /*------------------------------------------------------------------* * Binarization by adaptive mapping * *------------------------------------------------------------------*/ /*! * \brief pixAdaptThresholdToBinary() * * \param[in] pixs 8 bpp * \param[in] pixm [optional] 1 bpp image mask; can be null * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a simple convenience function for doing adaptive
 *          thresholding on a grayscale image with variable background.
 *          It uses default parameters appropriate for typical text images.
 *          Other high-level adaptive thresholding functions are
 *          pixConvertTo1Adaptive() and pixCleanImage().
 *      (2) %pixm is a 1 bpp mask over "image" regions, which are not
 *          expected to have a white background.  The mask inhibits
 *          background finding under the fg pixels of the mask.  For
 *          images with both text and image, the image regions would
 *          be binarized (or quantized) by a different set of operations.
 *      (3) As %gamma is increased, the foreground pixels are reduced.
 *      (4) Under the covers:  The default background value for normalization
 *          is 200, so we choose 170 for 'maxval' in pixGammaTRC.  Likewise,
 *          the default foreground threshold for normalization is 60,
 *          so we choose 50 for 'minval' in pixGammaTRC.  Because
 *          170 was mapped to 255, choosing 200 for the threshold is
 *          quite safe for avoiding speckle noise from the background.
 * 
*/ PIX * pixAdaptThresholdToBinary(PIX *pixs, PIX *pixm, l_float32 gamma) { if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); return pixAdaptThresholdToBinaryGen(pixs, pixm, gamma, 50, 170, 200); } /*! * \brief pixAdaptThresholdToBinaryGen() * * \param[in] pixs 8 bpp * \param[in] pixm [optional] 1 bpp image mask; can be null * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 * \param[in] blackval dark value to set to black (0) * \param[in] whiteval light value to set to white (255) * \param[in] thresh final threshold for binarization * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a convenience function for doing adaptive thresholding
 *          on a grayscale image with variable background.  Also see notes
 *          in pixAdaptThresholdToBinary().
 *      (2) Reducing %gamma increases the foreground (text) pixels.
 *          Use a low value (e.g., 0.5) for images with light text.
 *      (3) For normal images, see default args in pixAdaptThresholdToBinary().
 *          For images with very light text, these values are appropriate:
 *             gamma     ~0.5
 *             blackval  ~70
 *             whiteval  ~190
 *             thresh    ~200
 * 
*/ PIX * pixAdaptThresholdToBinaryGen(PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 blackval, l_int32 whiteval, l_int32 thresh) { PIX *pix1, *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if ((pix1 = pixBackgroundNormSimple(pixs, pixm, NULL)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); pixGammaTRC(pix1, pix1, gamma, blackval, whiteval); pixd = pixThresholdToBinary(pix1, thresh); pixDestroy(&pix1); return pixd; } /*--------------------------------------------------------------------* * Generate a binary mask from pixels of particular value(s) * *--------------------------------------------------------------------*/ /*! * \brief pixGenerateMaskByValue() * * \param[in] pixs 2, 4 or 8 bpp, or colormapped * \param[in] val of pixels for which we set 1 in dest * \param[in] usecmap 1 to retain cmap values; 0 to convert to gray * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) %val is the pixel value that we are selecting.  It can be
 *          either a gray value or a colormap index.
 *      (2) If pixs is colormapped, %usecmap determines if the colormap
 *          index values are used, or if the colormap is removed to gray and
 *          the gray values are used.  For the latter, it generates
 *          an approximate grayscale value for each pixel, and then looks
 *          for gray pixels with the value %val.
 * 
*/ PIX * pixGenerateMaskByValue(PIX *pixs, l_int32 val, l_int32 usecmap) { l_int32 i, j, w, h, d, wplg, wpld; l_uint32 *datag, *datad, *lineg, *lined; PIX *pixg, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", __func__, NULL); if (!usecmap && pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); if (d == 8 && (val < 0 || val > 255)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 8 bpp range", __func__, NULL); } if (d == 4 && (val < 0 || val > 15)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 4 bpp range", __func__, NULL); } if (d == 2 && (val < 0 || val > 3)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 2 bpp range", __func__, NULL); } pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixg); pixCopyInputFormat(pixd, pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) { if (GET_DATA_BYTE(lineg, j) == val) SET_DATA_BIT(lined, j); } else if (d == 4) { if (GET_DATA_QBIT(lineg, j) == val) SET_DATA_BIT(lined, j); } else { /* d == 2 */ if (GET_DATA_DIBIT(lineg, j) == val) SET_DATA_BIT(lined, j); } } } pixDestroy(&pixg); return pixd; } /*! * \brief pixGenerateMaskByBand() * * \param[in] pixs 2, 4 or 8 bpp, or colormapped * \param[in] lower, upper two pixel values from which a range, either * between (inband) or outside of (!inband), * determines which pixels in pixs cause us to * set a 1 in the dest mask * \param[in] inband 1 for finding pixels in [lower, upper]; * 0 for finding pixels in * [0, lower) union (upper, 255] * \param[in] usecmap 1 to retain cmap values; 0 to convert to gray * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
 *          the fg pixels in the mask are those either within the specified
 *          band (for inband == 1) or outside the specified band
 *          (for inband == 0).
 *      (2) If pixs is colormapped, %usecmap determines if the colormap
 *          values are used, or if the colormap is removed to gray and
 *          the gray values are used.  For the latter, it generates
 *          an approximate grayscale value for each pixel, and then looks
 *          for gray pixels with the value %val.
 * 
*/ PIX * pixGenerateMaskByBand(PIX *pixs, l_int32 lower, l_int32 upper, l_int32 inband, l_int32 usecmap) { l_int32 i, j, w, h, d, wplg, wpld, val; l_uint32 *datag, *datad, *lineg, *lined; PIX *pixg, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", __func__, NULL); if (lower < 0 || lower > upper) return (PIX *)ERROR_PTR("lower < 0 or lower > upper!", __func__, NULL); if (!usecmap && pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); if (d == 8 && upper > 255) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 8 and upper > 255", __func__, NULL); } if (d == 4 && upper > 15) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 4 and upper > 15", __func__, NULL); } if (d == 2 && upper > 3) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 2 and upper > 3", __func__, NULL); } pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixg); pixCopyInputFormat(pixd, pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) val = GET_DATA_BYTE(lineg, j); else if (d == 4) val = GET_DATA_QBIT(lineg, j); else /* d == 2 */ val = GET_DATA_DIBIT(lineg, j); if (inband) { if (val >= lower && val <= upper) SET_DATA_BIT(lined, j); } else { /* out of band */ if (val < lower || val > upper) SET_DATA_BIT(lined, j); } } } pixDestroy(&pixg); return pixd; } /*------------------------------------------------------------------* * Thresholding to 2 bpp by dithering * *------------------------------------------------------------------*/ /*! * \brief pixDitherTo2bpp() * * \param[in] pixs 8 bpp * \param[in] cmapflag 1 to generate a colormap * \return pixd dithered 2 bpp, or NULL on error * * An analog of the Floyd-Steinberg error diffusion dithering * algorithm is used to "dibitize" an 8 bpp grayscale image * to 2 bpp, using equally spaced gray values of 0, 85, 170, and 255, * which are served by thresholds of 43, 128 and 213. * If cmapflag == 1, the colormap values are set to 0, 85, 170 and 255. * If a pixel has a value between 0 and 42, it is dibitized * to 0, and the excess above 0 is added to the * three neighboring pixels, in the fractions 3/8 to i, j+1, * 3/8 to i+1, j) and 1/4 to (i+1, j+1, truncating to 255 if * necessary. If a pixel has a value between 43 and 127, it is * dibitized to 1, and the excess above 85 is added to the three * neighboring pixels as before. If the value is below 85, the * excess is subtracted. With a value between 128 * and 212, it is dibitized to 2, with the excess on either side * of 170 distributed as before. Finally, with a value between * 213 and 255, it is dibitized to 3, with the excess below 255 * subtracted from the neighbors. We always truncate to 0 or 255. * The details can be seen in the lookup table generation. * * This function differs from straight dithering in that it allows * clipping of grayscale to 0 or 255 if the values are * sufficiently close, without distribution of the excess. * This uses default values from pix.h to specify the range of lower * and upper values near 0 and 255, rsp that are clipped to black * and white without propagating the excess. * Not propagating the excess has the effect of reducing the snake * patterns in parts of the image that are nearly black or white; * however, it also prevents any attempt to reproduce gray for those values. * * The implementation uses 3 lookup tables for simplicity, and * a pair of line buffers to avoid modifying pixs. */ PIX * pixDitherTo2bpp(PIX *pixs, l_int32 cmapflag) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", __func__, NULL); return pixDitherTo2bppSpec(pixs, DEFAULT_CLIP_LOWER_2, DEFAULT_CLIP_UPPER_2, cmapflag); } /*! * \brief pixDitherTo2bppSpec() * * \param[in] pixs 8 bpp * \param[in] lowerclip lower clip distance to black; use 0 for default * \param[in] upperclip upper clip distance to white; use 0 for default * \param[in] cmapflag 1 to generate a colormap * \return pixd dithered 2 bpp, or NULL on error * *
 * Notes:
 *      (1) See comments above in pixDitherTo2bpp() for details.
 *      (2) The input parameters lowerclip and upperclip specify the range
 *          of lower and upper values (near 0 and 255, rsp) that are
 *          clipped to black and white without propagating the excess.
 *          For that reason, lowerclip and upperclip should be small numbers.
 * 
*/ PIX * pixDitherTo2bppSpec(PIX *pixs, l_int32 lowerclip, l_int32 upperclip, l_int32 cmapflag) { l_int32 w, h, d, wplt, wpld; l_int32 *tabval, *tab38, *tab14; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", __func__, NULL); if (lowerclip < 0 || lowerclip > 255) return (PIX *)ERROR_PTR("invalid value for lowerclip", __func__, NULL); if (upperclip < 0 || upperclip > 255) return (PIX *)ERROR_PTR("invalid value for upperclip", __func__, NULL); if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If there is a colormap, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); if (!bufs1 || !bufs2) { LEPT_FREE(bufs1); LEPT_FREE(bufs2); pixDestroy(&pixd); pixDestroy(&pixt); return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", __func__, NULL); } /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ make8To2DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); ditherTo2bppLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, tabval, tab38, tab14); if (cmapflag) { cmap = pixcmapCreateLinear(2, 4); pixSetColormap(pixd, cmap); } LEPT_FREE(bufs1); LEPT_FREE(bufs2); LEPT_FREE(tabval); LEPT_FREE(tab38); LEPT_FREE(tab14); pixDestroy(&pixt); return pixd; } /*! * \brief ditherTo2bppLow() * * Low-level function for doing Floyd-Steinberg error diffusion * dithering from 8 bpp (datas) to 2 bpp (datad). Two source * line buffers, bufs1 and bufs2, are provided, along with three * 256-entry lookup tables: tabval gives the output pixel value, * tab38 gives the extra (plus or minus) transferred to the pixels * directly to the left and below, and tab14 gives the extra * transferred to the diagonal below. The choice of 3/8 and 1/4 * is traditional but arbitrary when you use a lookup table; the * only constraint is that the sum is 1. See other comments * below and in grayquant.c. */ static void ditherTo2bppLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); } /*! * \brief ditherTo2bppLineLow() * * \param[in] lined ptr to beginning of dest line * \param[in] w width of image in pixels * \param[in] bufs1 buffer of current source line * \param[in] bufs2 buffer of next source line * \param[in] tabval value to assign for current pixel * \param[in] tab38 excess value to give to neighboring 3/8 pixels * \param[in] tab14 excess value to give to neighboring 1/4 pixel * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line * \return void * * Dispatches error diffusion dithering for * a single line of the image. If lastlineflag == 0, * both source buffers are used; otherwise, only bufs1 * is used. We use source buffers because the error * is propagated into them, and we don't want to change * the input src image. * * We break dithering out line by line to make it * easier to combine functions like interpolative * scaling and error diffusion dithering, as such a * combination of operations obviates the need to * generate a 2x grayscale image as an intermediary. */ static void ditherTo2bppLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag) { l_int32 j; l_int32 oval, tab38val, tab14val; l_uint8 rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); rval = GET_DATA_BYTE(bufs1, j + 1); bval = GET_DATA_BYTE(bufs2, j); dval = GET_DATA_BYTE(bufs2, j + 1); tab38val = tab38[oval]; tab14val = tab14[oval]; if (tab38val < 0) { rval = L_MAX(0, rval + tab38val); bval = L_MAX(0, bval + tab38val); dval = L_MAX(0, dval + tab14val); } else { rval = L_MIN(255, rval + tab38val); bval = L_MIN(255, bval + tab38val); dval = L_MIN(255, dval + tab14val); } SET_DATA_BYTE(bufs1, j + 1, rval); SET_DATA_BYTE(bufs2, j, bval); SET_DATA_BYTE(bufs2, j + 1, dval); } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); bval = GET_DATA_BYTE(bufs2, j); tab38val = tab38[oval]; if (tab38val < 0) bval = L_MAX(0, bval + tab38val); else bval = L_MIN(255, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); rval = GET_DATA_BYTE(bufs1, j + 1); tab38val = tab38[oval]; if (tab38val < 0) rval = L_MAX(0, rval + tab38val); else rval = L_MIN(255, rval + tab38val); SET_DATA_BYTE(bufs1, j + 1, rval); } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); } } /*! * \brief make8To2DitherTables() * * \param[out] ptabval value assigned to output pixel; 0, 1, 2 or 3 * \param[out] ptab38 amount propagated to pixels left and below * \param[out] ptab14 amount propagated to pixel to left and down * \param[in] cliptoblack values near 0 where the excess is not propagated * \param[in] cliptowhite values near 255 where the deficit is not propagated * * \return 0 if OK, 1 on error */ static l_int32 make8To2DitherTables(l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 cliptoblack, l_int32 cliptowhite) { l_int32 i; l_int32 *tabval, *tab38, *tab14; /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ tabval = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); tab38 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); tab14 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); *ptabval = tabval; *ptab38 = tab38; *ptab14 = tab14; for (i = 0; i < 256; i++) { if (i <= cliptoblack) { tabval[i] = 0; tab38[i] = 0; tab14[i] = 0; } else if (i < 43) { tabval[i] = 0; tab38[i] = (3 * i + 4) / 8; tab14[i] = (i + 2) / 4; } else if (i < 85) { tabval[i] = 1; tab38[i] = (3 * (i - 85) - 4) / 8; tab14[i] = ((i - 85) - 2) / 4; } else if (i < 128) { tabval[i] = 1; tab38[i] = (3 * (i - 85) + 4) / 8; tab14[i] = ((i - 85) + 2) / 4; } else if (i < 170) { tabval[i] = 2; tab38[i] = (3 * (i - 170) - 4) / 8; tab14[i] = ((i - 170) - 2) / 4; } else if (i < 213) { tabval[i] = 2; tab38[i] = (3 * (i - 170) + 4) / 8; tab14[i] = ((i - 170) + 2) / 4; } else if (i < 255 - cliptowhite) { tabval[i] = 3; tab38[i] = (3 * (i - 255) - 4) / 8; tab14[i] = ((i - 255) - 2) / 4; } else { /* i >= 255 - cliptowhite */ tabval[i] = 3; tab38[i] = 0; tab14[i] = 0; } } return 0; } /*--------------------------------------------------------------------* * Simple (pixelwise) thresholding to 2 bpp with optional colormap * *--------------------------------------------------------------------*/ /*! * \brief pixThresholdTo2bpp() * * \param[in] pixs 8 bpp * \param[in] nlevels equally spaced; must be between 2 and 4 * \param[in] cmapflag 1 to build colormap; 0 otherwise * \return pixd 2 bpp, optionally with colormap, or NULL on error * *
 * Notes:
 *      (1) Valid values for nlevels is the set {2, 3, 4}.
 *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
 *      (3) This function is typically invoked with cmapflag == 1.
 *          In the situation where no colormap is desired, nlevels is
 *          ignored and pixs is thresholded to 4 levels.
 *      (4) The target output colors are equally spaced, with the
 *          darkest at 0 and the lightest at 255.  The thresholds are
 *          chosen halfway between adjacent output values.  A table
 *          is built that specifies the mapping from src to dest.
 *      (5) If cmapflag == 1, a colormap of size 'nlevels' is made,
 *          and the pixel values in pixs are replaced by their
 *          appropriate color indices.  The number of holdouts,
 *          4 - nlevels, will be between 0 and 2.
 *      (6) If you don't want the thresholding to be equally spaced,
 *          either first transform the 8 bpp src using pixGammaTRC().
 *          or, if cmapflag == 1, after calling this function you can use
 *          pixcmapResetColor() to change any individual colors.
 *      (7) If a colormap is generated, it will specify (to display
 *          programs) exactly how each level is to be represented in RGB
 *          space.  When representing text, 3 levels is far better than
 *          2 because of the antialiasing of the single gray level,
 *          and 4 levels (black, white and 2 gray levels) is getting
 *          close to the perceptual quality of a (nearly continuous)
 *          grayscale image.  With 2 bpp, you can set up a colormap
 *          and allocate from 2 to 4 levels to represent antialiased text.
 *          Any left over colormap entries can be used for coloring regions.
 *          For the same number of levels, the file size of a 2 bpp image
 *          is about 10% smaller than that of a 4 bpp result for the same
 *          number of levels.  For both 2 bpp and 4 bpp, using 4 levels you
 *          get compression far better than that of jpeg, because the
 *          quantization to 4 levels will remove the jpeg ringing in the
 *          background near character edges.
 * 
*/ PIX * pixThresholdTo2bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (nlevels < 2 || nlevels > 4) return (PIX *)ERROR_PTR("nlevels not in {2, 3, 4}", __func__, NULL); if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag) { /* hold out (4 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(2, nlevels); pixSetColormap(pixd, cmap); } /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Make the appropriate table */ if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(4, 2); thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); LEPT_FREE(qtab); pixDestroy(&pixt); return pixd; } /*! * \brief thresholdTo2bppLow() * * Low-level function for thresholding from 8 bpp (datas) to * 2 bpp (datad), using thresholds implicitly defined through %tab, * a 256-entry lookup table that gives a 2-bit output value * for each possible input. * * For each line, unroll the loop so that for each 32 bit src word, * representing four consecutive 8-bit pixels, we compose one byte * of output consisiting of four 2-bit pixels. */ static void thresholdTo2bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab) { l_uint8 sval1, sval2, sval3, sval4, dval; l_int32 i, j, k; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < wpls; j++) { k = 4 * j; sval1 = GET_DATA_BYTE(lines, k); sval2 = GET_DATA_BYTE(lines, k + 1); sval3 = GET_DATA_BYTE(lines, k + 2); sval4 = GET_DATA_BYTE(lines, k + 3); dval = (tab[sval1] << 6) | (tab[sval2] << 4) | (tab[sval3] << 2) | tab[sval4]; SET_DATA_BYTE(lined, j, dval); } } } /*----------------------------------------------------------------------* * Simple (pixelwise) thresholding to 4 bpp * *----------------------------------------------------------------------*/ /*! * \brief pixThresholdTo4bpp() * * \param[in] pixs 8 bpp, can have colormap * \param[in] nlevels equally spaced; must be between 2 and 16 * \param[in] cmapflag 1 to build colormap; 0 otherwise * \return pixd 4 bpp, optionally with colormap, or NULL on error * *
 * Notes:
 *      (1) Valid values for nlevels is the set {2, ... 16}.
 *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
 *      (3) This function is typically invoked with cmapflag == 1.
 *          In the situation where no colormap is desired, nlevels is
 *          ignored and pixs is thresholded to 16 levels.
 *      (4) The target output colors are equally spaced, with the
 *          darkest at 0 and the lightest at 255.  The thresholds are
 *          chosen halfway between adjacent output values.  A table
 *          is built that specifies the mapping from src to dest.
 *      (5) If cmapflag == 1, a colormap of size 'nlevels' is made,
 *          and the pixel values in pixs are replaced by their
 *          appropriate color indices.  The number of holdouts,
 *          16 - nlevels, will be between 0 and 14.
 *      (6) If you don't want the thresholding to be equally spaced,
 *          either first transform the 8 bpp src using pixGammaTRC().
 *          or, if cmapflag == 1, after calling this function you can use
 *          pixcmapResetColor() to change any individual colors.
 *      (7) If a colormap is generated, it will specify, to display
 *          programs, exactly how each level is to be represented in RGB
 *          space.  When representing text, 3 levels is far better than
 *          2 because of the antialiasing of the single gray level,
 *          and 4 levels (black, white and 2 gray levels) is getting
 *          close to the perceptual quality of a (nearly continuous)
 *          grayscale image.  Therefore, with 4 bpp, you can set up a
 *          colormap, allocate a relatively small fraction of the 16
 *          possible values to represent antialiased text, and use the
 *          other colormap entries for other things, such as coloring
 *          text or background.  Two other reasons for using a small number
 *          of gray values for antialiased text are (1) PNG compression
 *          gets worse as the number of levels that are used is increased,
 *          and (2) using a small number of levels will filter out most of
 *          the jpeg ringing that is typically introduced near sharp edges
 *          of text.  This filtering is partly responsible for the improved
 *          compression.
 * 
*/ PIX * pixThresholdTo4bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (nlevels < 2 || nlevels > 16) return (PIX *)ERROR_PTR("nlevels not in [2,...,16]", __func__, NULL); if ((pixd = pixCreate(w, h, 4)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag) { /* hold out (16 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(4, nlevels); pixSetColormap(pixd, cmap); } /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Make the appropriate table */ if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(16, 4); thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); LEPT_FREE(qtab); pixDestroy(&pixt); return pixd; } /*! * \brief thresholdTo4bppLow() * * Low-level function for thresholding from 8 bpp (datas) to * 4 bpp (datad), using thresholds implicitly defined through %tab, * a 256-entry lookup table that gives a 4-bit output value * for each possible input. * * For each line, unroll the loop so that for each 32 bit src word, * representing four consecutive 8-bit pixels, we compose two bytes * of output consisiting of four 4-bit pixels. */ static void thresholdTo4bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab) { l_uint8 sval1, sval2, sval3, sval4; l_uint16 dval; l_int32 i, j, k; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < wpls; j++) { k = 4 * j; sval1 = GET_DATA_BYTE(lines, k); sval2 = GET_DATA_BYTE(lines, k + 1); sval3 = GET_DATA_BYTE(lines, k + 2); sval4 = GET_DATA_BYTE(lines, k + 3); dval = (tab[sval1] << 12) | (tab[sval2] << 8) | (tab[sval3] << 4) | tab[sval4]; SET_DATA_TWO_BYTES(lined, j, dval); } } } /*----------------------------------------------------------------------* * Simple (pixelwise) thresholding on 8 bpp with optional colormap * *----------------------------------------------------------------------*/ /*! * \brief pixThresholdOn8bpp() * * \param[in] pixs 8 bpp, can have colormap * \param[in] nlevels equally spaced; must be between 2 and 256 * \param[in] cmapflag 1 to build colormap; 0 otherwise * \return pixd 8 bpp, optionally with colormap, or NULL on error * *
 * Notes:
 *      (1) Valid values for nlevels is the set {2,...,256}.
 *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
 *      (3) If cmapflag == 1, a colormap of size 'nlevels' is made,
 *          and the pixel values in pixs are replaced by their
 *          appropriate color indices.  Otherwise, the pixel values
 *          are the actual thresholded (i.e., quantized) grayscale values.
 *      (4) If you don't want the thresholding to be equally spaced,
 *          first transform the input 8 bpp src using pixGammaTRC().
 * 
*/ PIX * pixThresholdOn8bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; /* quantization table */ l_int32 i, j, w, h, wpld, val, newval; l_uint32 *datad, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (nlevels < 2 || nlevels > 256) return (PIX *)ERROR_PTR("nlevels not in [2,...,256]", __func__, NULL); /* Get a new pixd; if there is a colormap in the src, remove it */ if (pixGetColormap(pixs)) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixd = pixCopy(NULL, pixs); if (cmapflag) { /* hold out (256 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(8, nlevels); pixSetColormap(pixd, cmap); } if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(nlevels, 8); pixGetDimensions(pixd, &w, &h, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lined, j); newval = qtab[val]; SET_DATA_BYTE(lined, j, newval); } } LEPT_FREE(qtab); return pixd; } /*----------------------------------------------------------------------* * Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp * *----------------------------------------------------------------------*/ /*! * \brief pixThresholdGrayArb() * * \param[in] pixs 8 bpp grayscale; can have colormap * \param[in] edgevals string giving edge value of each bin * \param[in] outdepth 0, 2, 4 or 8 bpp; 0 is default for min depth * \param[in] use_average 1 if use the average pixel value in colormap * \param[in] setblack 1 if darkest color is set to black * \param[in] setwhite 1 if lightest color is set to white * \return pixd 2, 4 or 8 bpp quantized image with colormap, * or NULL on error * *
 * Notes:
 *      (1) This function allows exact specification of the quantization bins.
 *          The string %edgevals is a space-separated set of values
 *          specifying the dividing points between output quantization bins.
 *          These threshold values are assigned to the bin with higher
 *          values, so that each of them is the smallest value in their bin.
 *      (2) The output image (pixd) depth is specified by %outdepth.  The
 *          number of bins is the number of edgevals + 1.  The
 *          relation between outdepth and the number of bins is:
 *               outdepth = 2       nbins <= 4
 *               outdepth = 4       nbins <= 16
 *               outdepth = 8       nbins <= 256
 *          With %outdepth == 0, the minimum required depth for the
 *          given number of bins is used.
 *          The output pixd has a colormap.
 *      (3) The last 3 args determine the specific values that go into
 *          the colormap.
 *      (4) For %use_average:
 *            ~ if TRUE, the average value of pixels falling in the bin is
 *              chosen as the representative gray value.  Otherwise,
 *            ~ if FALSE, the central value of each bin is chosen as
 *              the representative value.
 *          The colormap holds the representative value.
 *      (5) For %setblack, if TRUE the darkest color is set to (0,0,0).
 *      (6) For %setwhite, if TRUE the lightest color is set to (255,255,255).
 *      (7) An alternative to using this function to quantize to
 *          unequally-spaced bins is to first transform the 8 bpp pixs
 *          using pixGammaTRC(), and follow this with pixThresholdTo4bpp().
 * 
*/ PIX * pixThresholdGrayArb(PIX *pixs, const char *edgevals, l_int32 outdepth, l_int32 use_average, l_int32 setblack, l_int32 setwhite) { l_int32 *qtab; l_int32 w, h, d, i, j, n, wplt, wpld, val, newval; l_uint32 *datat, *datad, *linet, *lined; NUMA *na; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (!edgevals) return (PIX *)ERROR_PTR("edgevals not defined", __func__, NULL); if (outdepth != 0 && outdepth != 2 && outdepth != 4 && outdepth != 8) return (PIX *)ERROR_PTR("invalid outdepth", __func__, NULL); /* Parse and sort (if required) the bin edge values */ na = parseStringForNumbers(edgevals, " \t\n,"); n = numaGetCount(na); if (n > 255) { numaDestroy(&na); return (PIX *)ERROR_PTR("more than 256 levels", __func__, NULL); } if (outdepth == 0) { if (n <= 3) outdepth = 2; else if (n <= 15) outdepth = 4; else outdepth = 8; } else if (n + 1 > (1 << outdepth)) { L_WARNING("outdepth too small; setting to 8 bpp\n", __func__); outdepth = 8; } numaSort(na, na, L_SORT_INCREASING); /* Make the quantization LUT and the colormap */ makeGrayQuantTableArb(na, outdepth, &qtab, &cmap); if (use_average) { /* use the average value in each bin */ pixcmapDestroy(&cmap); makeGrayQuantColormapArb(pixs, qtab, outdepth, &cmap); } pixcmapSetBlackAndWhite(cmap, setblack, setwhite); numaDestroy(&na); if ((pixd = pixCreate(w, h, outdepth)) == NULL) { LEPT_FREE(qtab); pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixSetColormap(pixd, cmap); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); if (outdepth == 2) { thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); } else if (outdepth == 4) { thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); } else { for (i = 0; i < h; i++) { lined = datad + i * wpld; linet = datat + i * wplt; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); newval = qtab[val]; SET_DATA_BYTE(lined, j, newval); } } } LEPT_FREE(qtab); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Quantization tables for linear thresholds of grayscale images * *----------------------------------------------------------------------*/ /*! * \brief makeGrayQuantIndexTable() * * \param[in] nlevels number of output levels * \return table maps input gray level to colormap index, * or NULL on error *
 * Notes:
 *      (1) 'nlevels' is some number between 2 and 256 (typically 8 or less).
 *      (2) The table is typically used for quantizing 2, 4 and 8 bpp
 *          grayscale src pix, and generating a colormapped dest pix.
 * 
*/ l_int32 * makeGrayQuantIndexTable(l_int32 nlevels) { l_int32 *tab; l_int32 i, j, thresh; tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { for (j = 0; j < nlevels; j++) { thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); if (i <= thresh) { tab[i] = j; /* lept_stderr("tab[%d] = %d\n", i, j); */ break; } } } return tab; } /*! * \brief makeGrayQuantTargetTable() * * \param[in] nlevels number of output levels * \param[in] depth of dest pix, in bpp; 2, 4 or 8 bpp * \return table maps input gray level to thresholded gray level, * or NULL on error * *
 * Notes:
 *      (1) nlevels is some number between 2 and 2^(depth)
 *      (2) The table is used in two similar ways:
 *           ~ for 8 bpp, it quantizes to a given number of target levels
 *           ~ for 2 and 4 bpp, it thresholds to appropriate target values
 *             that will use the full dynamic range of the dest pix.
 *      (3) For depth = 8, the number of thresholds chosen is
 *          ('nlevels' - 1), and the 'nlevels' values stored in the
 *          table are at the two at the extreme ends, (0, 255), plus
 *          plus ('nlevels' - 2) values chosen at equal intervals between.
 *          For example, for depth = 8 and 'nlevels' = 3, the two
 *          threshold values are 3f and bf, and the three target pixel
 *          values are 0, 7f and ff.
 *      (4) For depth < 8, we ignore nlevels, and always use the maximum
 *          number of levels, which is 2^(depth).
 *          If you want nlevels < the maximum number, you should always
 *          use a colormap.
 * 
*/ static l_int32 * makeGrayQuantTargetTable(l_int32 nlevels, l_int32 depth) { l_int32 *tab; l_int32 i, j, thresh, maxval, quantval; tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); maxval = (1 << depth) - 1; if (depth < 8) nlevels = 1 << depth; for (i = 0; i < 256; i++) { for (j = 0; j < nlevels; j++) { thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); if (i <= thresh) { quantval = maxval * j / (nlevels - 1); tab[i] = quantval; /* lept_stderr("tab[%d] = %d\n", i, tab[i]); */ break; } } } return tab; } /*----------------------------------------------------------------------* * Quantization table for arbitrary thresholding of grayscale images * *----------------------------------------------------------------------*/ /*! * \brief makeGrayQuantTableArb() * * \param[in] na numa of bin boundaries * \param[in] outdepth of colormap: 1, 2, 4 or 8 * \param[out] ptab table mapping input gray level to cmap index * \param[out] pcmap colormap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The number of bins is the count of %na + 1.
 *      (2) The bin boundaries in na must be sorted in increasing order.
 *      (3) The table is an inverse colormap: it maps input gray level
 *          to colormap index (the bin number).
 *      (4) The colormap generated here has quantized values at the
 *          center of each bin.  If you want to use the average gray
 *          value of pixels within the bin, discard the colormap and
 *          compute it using makeGrayQuantColormapArb().
 *      (5) Returns an error if there are not enough levels in the
 *          output colormap for the number of bins.  The number
 *          of bins must not exceed 2^outdepth.
 * 
*/ l_ok makeGrayQuantTableArb(NUMA *na, l_int32 outdepth, l_int32 **ptab, PIXCMAP **pcmap) { l_int32 i, j, n, jstart, ave, val; l_int32 *tab; PIXCMAP *cmap; if (!ptab) return ERROR_INT("&tab not defined", __func__, 1); *ptab = NULL; if (!pcmap) return ERROR_INT("&cmap not defined", __func__, 1); *pcmap = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (n + 1 > (1 << outdepth)) return ERROR_INT("more bins than cmap levels", __func__, 1); if ((cmap = pixcmapCreate(outdepth)) == NULL) return ERROR_INT("cmap not made", __func__, 1); tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); *ptab = tab; *pcmap = cmap; /* First n bins */ jstart = 0; for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); ave = (jstart + val) / 2; pixcmapAddColor(cmap, ave, ave, ave); for (j = jstart; j < val; j++) tab[j] = i; jstart = val; } /* Last bin */ ave = (jstart + 255) / 2; pixcmapAddColor(cmap, ave, ave, ave); for (j = jstart; j < 256; j++) tab[j] = n; return 0; } /*! * \brief makeGrayQuantColormapArb() * * \param[in] pixs 8 bpp * \param[in] tab table mapping input gray level to cmap index * \param[in] outdepth of colormap: 1, 2, 4 or 8 * \param[out] pcmap colormap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The table is a 256-entry inverse colormap: it maps input gray
 *          level to colormap index (the bin number).  It is computed
 *          using makeGrayQuantTableArb().
 *      (2) The colormap generated here has quantized values at the
 *          average gray value of the pixels that are in each bin.
 *      (3) Returns an error if there are not enough levels in the
 *          output colormap for the number of bins.  The number
 *          of bins must not exceed 2^outdepth.
 * 
*/ static l_int32 makeGrayQuantColormapArb(PIX *pixs, l_int32 *tab, l_int32 outdepth, PIXCMAP **pcmap) { l_int32 i, j, index, w, h, d, nbins, wpl, factor, val; l_int32 *bincount, *binave, *binstart; l_uint32 *line, *data; if (!pcmap) return ERROR_INT("&cmap not defined", __func__, 1); *pcmap = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pixs not 8 bpp", __func__, 1); if (!tab) return ERROR_INT("tab not defined", __func__, 1); nbins = tab[255] + 1; if (nbins > (1 << outdepth)) return ERROR_INT("more bins than cmap levels", __func__, 1); /* Find the count and weighted count for each bin */ if ((bincount = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for bincount", __func__, 1); if ((binave = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32))) == NULL) { LEPT_FREE(bincount); return ERROR_INT("calloc fail for binave", __func__, 1); } factor = (l_int32)(sqrt((l_float64)(w * h) / 30000.) + 0.5); factor = L_MAX(1, factor); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); bincount[tab[val]]++; binave[tab[val]] += val; } } /* Find the smallest gray values in each bin */ binstart = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); for (i = 1, index = 1; i < 256; i++) { if (tab[i] < index) continue; if (tab[i] == index) binstart[index++] = i; } /* Get the averages. If there are no samples in a bin, use * the center value of the bin. */ *pcmap = pixcmapCreate(outdepth); for (i = 0; i < nbins; i++) { if (bincount[i]) { val = binave[i] / bincount[i]; } else { /* no samples in the bin */ if (i < nbins - 1) val = (binstart[i] + binstart[i + 1]) / 2; else /* last bin */ val = (binstart[i] + 255) / 2; } pixcmapAddColor(*pcmap, val, val, val); } LEPT_FREE(bincount); LEPT_FREE(binave); LEPT_FREE(binstart); return 0; } /*--------------------------------------------------------------------* * Thresholding from 32 bpp rgb to 1 bpp * *--------------------------------------------------------------------*/ /*! * \brief pixGenerateMaskByBand32() * * \param[in] pixs 32 bpp * \param[in] refval reference rgb value * \param[in] delm max amount below the ref value for any component * \param[in] delp max amount above the ref value for any component * \param[in] fractm fractional amount below ref value for all components * \param[in] fractp fractional amount above ref value for all components * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
 *          the fg pixels in the mask within a band of rgb values
 *          surrounding %refval.  The band can be chosen in two ways
 *          for each component:
 *          (a) Use (%delm, %delp) to specify how many levels down and up
 *          (b) Use (%fractm, %fractp) to specify the fractional
 *              distance toward 0 and 255, respectively.
 *          Note that %delm and %delp must be in [0 ... 255], whereas
 *          %fractm and %fractp must be in [0.0 - 1.0].
 *      (2) Either (%delm, %delp) or (%fractm, %fractp) can be used.
 *          Set each value in the other pair to 0.
 * 
*/ PIX * pixGenerateMaskByBand32(PIX *pixs, l_uint32 refval, l_int32 delm, l_int32 delp, l_float32 fractm, l_float32 fractp) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 rref, gref, bref, rval, gval, bval; l_int32 rmin, gmin, bmin, rmax, gmax, bmax; l_uint32 pixel; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("not 32 bpp", __func__, NULL); if (delm < 0 || delp < 0) return (PIX *)ERROR_PTR("delm and delp must be >= 0", __func__, NULL); if (fractm < 0.0 || fractm > 1.0 || fractp < 0.0 || fractp > 1.0) return (PIX *)ERROR_PTR("fractm and/or fractp invalid", __func__, NULL); extractRGBValues(refval, &rref, &gref, &bref); if (fractm == 0.0 && fractp == 0.0) { rmin = rref - delm; gmin = gref - delm; bmin = bref - delm; rmax = rref + delm; gmax = gref + delm; bmax = bref + delm; } else if (delm == 0 && delp == 0) { rmin = (l_int32)((1.0 - fractm) * rref); gmin = (l_int32)((1.0 - fractm) * gref); bmin = (l_int32)((1.0 - fractm) * bref); rmax = rref + (l_int32)(fractp * (255 - rref)); gmax = gref + (l_int32)(fractp * (255 - gref)); bmax = bref + (l_int32)(fractp * (255 - bref)); } else { L_ERROR("bad input: either (delm, delp) or (fractm, fractp) " "must be 0\n", __func__); return NULL; } pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = lines[j]; rval = (pixel >> L_RED_SHIFT) & 0xff; if (rval < rmin || rval > rmax) continue; gval = (pixel >> L_GREEN_SHIFT) & 0xff; if (gval < gmin || gval > gmax) continue; bval = (pixel >> L_BLUE_SHIFT) & 0xff; if (bval < bmin || bval > bmax) continue; SET_DATA_BIT(lined, j); } } return pixd; } /*! * \brief pixGenerateMaskByDiscr32() * * \param[in] pixs 32 bpp * \param[in] refval1 reference rgb value * \param[in] refval2 reference rgb value * \param[in] distflag L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
 *          the fg pixels in the mask are those where the pixel in pixs
 *          is "closer" to refval1 than to refval2.
 *      (2) "Closer" can be defined in several ways, such as:
 *            ~ manhattan distance (L1)
 *            ~ euclidean distance (L2)
 *            ~ majority vote of the individual components
 *          Here, we have a choice of L1 or L2.
 * 
*/ PIX * pixGenerateMaskByDiscr32(PIX *pixs, l_uint32 refval1, l_uint32 refval2, l_int32 distflag) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 rref1, gref1, bref1, rref2, gref2, bref2, rval, gval, bval; l_uint32 pixel, dist1, dist2; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("not 32 bpp", __func__, NULL); if (distflag != L_MANHATTAN_DISTANCE && distflag != L_EUCLIDEAN_DISTANCE) return (PIX *)ERROR_PTR("invalid distflag", __func__, NULL); extractRGBValues(refval1, &rref1, &gref1, &bref1); extractRGBValues(refval2, &rref2, &gref2, &bref2); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = lines[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (distflag == L_MANHATTAN_DISTANCE) { dist1 = L_ABS(rref1 - rval); dist2 = L_ABS(rref2 - rval); dist1 += L_ABS(gref1 - gval); dist2 += L_ABS(gref2 - gval); dist1 += L_ABS(bref1 - bval); dist2 += L_ABS(bref2 - bval); } else { dist1 = (rref1 - rval) * (rref1 - rval); dist2 = (rref2 - rval) * (rref2 - rval); dist1 += (gref1 - gval) * (gref1 - gval); dist2 += (gref2 - gval) * (gref2 - gval); dist1 += (bref1 - bval) * (bref1 - bval); dist2 += (bref2 - bval) * (bref2 - bval); } if (dist1 < dist2) SET_DATA_BIT(lined, j); } } return pixd; } /*----------------------------------------------------------------------* * Histogram-based grayscale quantization * *----------------------------------------------------------------------*/ /*! * \brief pixGrayQuantFromHisto() * * \param[in] pixd [optional] quantized pix with cmap; can be null * \param[in] pixs 8 bpp gray input pix; not cmapped * \param[in] pixm [optional] mask over pixels in pixs to quantize * \param[in] minfract minimum fraction of pixels in a set of adjacent * histo bins that causes the set to be automatically * set aside as a color in the colormap; must be * at least 0.01 * \param[in] maxsize maximum number of adjacent bins allowed to represent * a color, regardless of the population of pixels * in the bins; must be at least 2 * \return pixd 8 bpp, cmapped, or NULL on error * *
 * Notes:
 *      (1) This is useful for quantizing images with relatively few
 *          colors, but which may have both color and gray pixels.
 *          If there are color pixels, it is assumed that an input
 *          rgb image has been color quantized first so that:
 *            ~ pixd has a colormap describing the color pixels
 *            ~ pixm is a mask over the non-color pixels in pixd
 *            ~ the colormap in pixd, and the color pixels in pixd,
 *              have been repacked to go from 0 to n-1 (n colors)
 *          If there are no color pixels, pixd and pixm are both null,
 *          and all pixels in pixs are quantized to gray.
 *      (2) A 256-entry histogram is built of the gray values in pixs.
 *          If pixm exists, the pixels contributing to the histogram are
 *          restricted to the fg of pixm.  A colormap and LUT are generated
 *          from this histogram.  We break up the array into a set
 *          of intervals, each one constituting a color in the colormap:
 *          An interval is identified by summing histogram bins until
 *          either the sum equals or exceeds the %minfract of the total
 *          number of pixels, or the span itself equals or exceeds %maxsize.
 *          The color of each bin is always an average of the pixels
 *          that constitute it.
 *      (3) Note that we do not specify the number of gray colors in
 *          the colormap.  Instead, we specify two parameters that
 *          describe the accuracy of the color assignments; this and
 *          the actual image determine the number of resulting colors.
 *      (4) If a mask exists and it is not the same size as pixs, make
 *          a new mask the same size as pixs, with the original mask
 *          aligned at the UL corners.  Set all additional pixels
 *          in the (larger) new mask set to 1, causing those pixels
 *          in pixd to be set as gray.
 *      (5) We estimate the total number of colors (color plus gray);
 *          if it exceeds 255, return null.
 * 
*/ PIX * pixGrayQuantFromHisto(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 minfract, l_int32 maxsize) { l_int32 w, h, wd, hd, wm, hm, wpls, wplm, wpld; l_int32 nc, nestim, i, j, vals, vald; l_int32 *lut; l_uint32 *datas, *datam, *datad, *lines, *linem, *lined; NUMA *na; PIX *pixmr = NULL; /* resized mask */ PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (minfract < 0.01) { L_WARNING("minfract < 0.01; setting to 0.05\n", __func__); minfract = 0.05f; } if (maxsize < 2) { L_WARNING("maxsize < 2; setting to 10\n", __func__); maxsize = 10; } if ((pixd && !pixm) || (!pixd && pixm)) return (PIX *)ERROR_PTR("(pixd,pixm) not defined together", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm not 1 bpp", __func__, NULL); if ((cmap = pixGetColormap(pixd)) == NULL) return (PIX *)ERROR_PTR("pixd not cmapped", __func__, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (w != wd || h != hd) return (PIX *)ERROR_PTR("pixs, pixd sizes differ", __func__, NULL); nc = pixcmapGetCount(cmap); nestim = nc + (l_int32)(1.5 * 255 / maxsize); lept_stderr( "nestim = %d\n", nestim); if (nestim > 255) { L_ERROR("Estimate %d colors!\n", __func__, nestim); return (PIX *)ERROR_PTR("probably too many colors", __func__, NULL); } pixGetDimensions(pixm, &wm, &hm, NULL); if (w != wm || h != hm) { /* resize the mask */ L_WARNING("mask and dest sizes not equal\n", __func__); pixmr = pixCreate(w, h, 1); pixRasterop(pixmr, 0, 0, wm, hm, PIX_SRC, pixm, 0, 0); pixRasterop(pixmr, wm, 0, w - wm, h, PIX_SET, NULL, 0, 0); pixRasterop(pixmr, 0, hm, wm, h - hm, PIX_SET, NULL, 0, 0); } else { pixmr = pixClone(pixm); } } else { pixd = pixCreateTemplate(pixs); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Use original mask, if it exists, to select gray pixels */ na = pixGetGrayHistogramMasked(pixs, pixm, 0, 0, 1); /* Fill out the cmap with gray colors, and generate the lut * for pixel assignment. Issue a warning on failure. */ if (numaFillCmapFromHisto(na, cmap, minfract, maxsize, &lut)) L_ERROR("ran out of colors in cmap!\n", __func__); numaDestroy(&na); /* Assign the gray pixels to their cmap indices */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (!pixm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = lut[vals]; SET_DATA_BYTE(lined, j, vald); } } LEPT_FREE(lut); return pixd; } datam = pixGetData(pixmr); wplm = pixGetWpl(pixmr); for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (!GET_DATA_BIT(linem, j)) continue; vals = GET_DATA_BYTE(lines, j); vald = lut[vals]; SET_DATA_BYTE(lined, j, vald); } } pixDestroy(&pixmr); LEPT_FREE(lut); return pixd; } /*! * \brief numaFillCmapFromHisto() * * \param[in] na histogram of gray values * \param[in] cmap 8 bpp cmap, possibly initialized with color value * \param[in] minfract minimum fraction of pixels in a set of adjacent * histo bins that causes the set to be automatically * set aside as a color in the colormap; must be * at least 0.01 * \param[in] maxsize maximum number of adjacent bins allowed to represent * a color, regardless of the population of pixels * in the bins; must be at least 2 * \param[out] plut lookup table from gray value to colormap index * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This static function must be called from pixGrayQuantFromHisto()
 * 
*/ static l_int32 numaFillCmapFromHisto(NUMA *na, PIXCMAP *cmap, l_float32 minfract, l_int32 maxsize, l_int32 **plut) { l_int32 mincount, index, sum, wtsum, span, istart, i, val, ret; l_int32 *iahisto, *lut; l_float32 total; if (!plut) return ERROR_INT("&lut not defined", __func__, 1); *plut = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); numaGetSum(na, &total); mincount = (l_int32)(minfract * total); iahisto = numaGetIArray(na); lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); *plut = lut; index = pixcmapGetCount(cmap); /* start with number of colors * already reserved */ /* March through, associating colors with sets of adjacent * gray levels. During the process, the LUT that gives * the colormap index for each gray level is computed. * To complete a color, either the total count must equal * or exceed %mincount, or the current span of colors must * equal or exceed %maxsize. An empty span is not converted * into a color; it is simply ignored. When a span is completed for a * color, the weighted color in the span is added to the colormap. */ sum = 0; wtsum = 0; istart = 0; ret = 0; for (i = 0; i < 256; i++) { lut[i] = index; sum += iahisto[i]; wtsum += i * iahisto[i]; span = i - istart + 1; if (sum < mincount && span < maxsize) continue; if (sum == 0) { /* empty span; don't save */ istart = i + 1; continue; } /* Found new color; sum > 0 */ val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); ret = pixcmapAddColor(cmap, val, val, val); istart = i + 1; sum = 0; wtsum = 0; index++; } if (istart < 256 && sum > 0) { /* last one */ span = 256 - istart; val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); ret = pixcmapAddColor(cmap, val, val, val); } LEPT_FREE(iahisto); return ret; } /*----------------------------------------------------------------------* * Color quantize grayscale image using existing colormap * *----------------------------------------------------------------------*/ /*! * \brief pixGrayQuantFromCmap() * * \param[in] pixs 8 bpp grayscale without cmap * \param[in] cmap to quantize to; of dest pix * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error * *
 * Notes:
 *      (1) In use, pixs is an 8 bpp grayscale image without a colormap.
 *          If there is an existing colormap, a warning is issued and
 *          a copy of the input pixs is returned.
 * 
*/ PIX * pixGrayQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth) { l_int32 i, j, index, w, h, d, depth, wpls, wpld; l_int32 hascolor, vals, vald; l_int32 *tab; l_uint32 *datas, *datad, *lines, *lined; PIXCMAP *cmapd; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) { L_WARNING("pixs already has a colormap; returning a copy\n", __func__); return pixCopy(NULL, pixs); } pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", __func__, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", __func__, NULL); /* Make sure the colormap is gray */ pixcmapHasColor(cmap, &hascolor); if (hascolor) { L_WARNING("Converting colormap colors to gray\n", __func__); cmapd = pixcmapColorToGray(cmap, 0.3f, 0.5f, 0.2f); } else { cmapd = pixcmapCopy(cmap); } /* Make LUT into colormap */ tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { pixcmapGetNearestGrayIndex(cmapd, i, &index); tab[i] = index; } pixcmapGetMinDepth(cmap, &depth); depth = L_MAX(depth, mindepth); pixd = pixCreate(w, h, depth); pixSetColormap(pixd, cmapd); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = tab[vals]; if (depth == 2) SET_DATA_DIBIT(lined, j, vald); else if (depth == 4) SET_DATA_QBIT(lined, j, vald); else /* depth == 8 */ SET_DATA_BYTE(lined, j, vald); } } LEPT_FREE(tab); return pixd; } #if 0 /* Documentation */ /*--------------------------------------------------------------------* * Implementation of binarization by dithering using LUTs * * It is archived here. * *--------------------------------------------------------------------*/ /*! * \brief pixDitherToBinaryLUT() * * \param[in] pixs * \param[in] lowerclip lower clip distance to black; use -1 for default * \param[in] upperclip upper clip distance to white; use -1 for default * \return pixd dithered binary, or NULL on error * * We don't need two implementations of Floyd-Steinberg dithering, * and this one with LUTs is a little more complicated than * pixDitherToBinary(). It uses three lookup tables to generate the * output pixel value and the excess or deficit carried over to the * neighboring pixels. It's here for pedagogical reasons only. */ PIX * pixDitherToBinaryLUT(PIX *pixs, l_int32 lowerclip, l_int32 upperclip) { l_int32 w, h, d, wplt, wpld; l_int32 *tabval, *tab38, *tab14; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", __func__, NULL); if (lowerclip < 0) lowerclip = DEFAULT_CLIP_LOWER_1; if (upperclip < 0) upperclip = DEFAULT_CLIP_UPPER_1; if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); if (!bufs1 || !bufs2) { LEPT_FREE(bufs1); LEPT_FREE(bufs2); pixDestroy(&pixd); pixDestroy(&pixt); return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", __func__, NULL); } /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ make8To1DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); ditherToBinaryLUTLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, tabval, tab38, tab14); LEPT_FREE(bufs1); LEPT_FREE(bufs2); LEPT_FREE(tabval); LEPT_FREE(tab38); LEPT_FREE(tab14); pixDestroy(&pixt); return pixd; } /*! * \brief ditherToBinaryLUTLow() * * Low-level function for doing Floyd-Steinberg error diffusion * dithering from 8 bpp (datas) to 1 bpp (datad). Two source * line buffers, bufs1 and bufs2, are provided, along with three * 256-entry lookup tables: tabval gives the output pixel value, * tab38 gives the extra (plus or minus) transferred to the pixels * directly to the left and below, and tab14 gives the extra * transferred to the diagonal below. The choice of 3/8 and 1/4 * is traditional but arbitrary when you use a lookup table; the * only constraint is that the sum is 1. See other comments below. */ void ditherToBinaryLUTLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); return; } /*! * \brief ditherToBinaryLineLUTLow() * * \param[in] lined ptr to beginning of dest line * \param[in] w width of image in pixels * \param[in] bufs1 buffer of current source line * \param[in] bufs2 buffer of next source line * \param[in] tabval value to assign for current pixel * \param[in] tab38 excess value to give to neighboring 3/8 pixels * \param[in] tab14 excess value to give to neighboring 1/4 pixel * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line * \return void */ void ditherToBinaryLineLUTLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag) { l_int32 j; l_int32 oval, tab38val, tab14val; l_uint8 rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); rval = GET_DATA_BYTE(bufs1, j + 1); bval = GET_DATA_BYTE(bufs2, j); dval = GET_DATA_BYTE(bufs2, j + 1); tab38val = tab38[oval]; if (tab38val == 0) continue; tab14val = tab14[oval]; if (tab38val < 0) { rval = L_MAX(0, rval + tab38val); bval = L_MAX(0, bval + tab38val); dval = L_MAX(0, dval + tab14val); } else { rval = L_MIN(255, rval + tab38val); bval = L_MIN(255, bval + tab38val); dval = L_MIN(255, dval + tab14val); } SET_DATA_BYTE(bufs1, j + 1, rval); SET_DATA_BYTE(bufs2, j, bval); SET_DATA_BYTE(bufs2, j + 1, dval); } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); bval = GET_DATA_BYTE(bufs2, j); tab38val = tab38[oval]; if (tab38val < 0) { bval = L_MAX(0, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } else if (tab38val > 0 ) { bval = L_MIN(255, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); rval = GET_DATA_BYTE(bufs1, j + 1); tab38val = tab38[oval]; if (tab38val == 0) continue; if (tab38val < 0) rval = L_MAX(0, rval + tab38val); else rval = L_MIN(255, rval + tab38val); SET_DATA_BYTE(bufs1, j + 1, rval); } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); } return; } /*! * \brief make8To1DitherTables() * * \param[out] ptabval value assigned to output pixel; 0 or 1 * \param[out] ptab38 amount propagated to pixels left and below * \param[out] ptab14 amount propagated to pixel to left and down * \param[in] lowerclip values near 0 where the excess is not propagated * \param[in] upperclip values near 255 where the deficit is not propagated * * \return 0 if OK, 1 on error */ l_ok make8To1DitherTables(l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 lowerclip, l_int32 upperclip) { l_int32 i; l_int32 *tabval, *tab38, *tab14; if (ptabval) *ptabval = NULL; if (ptab38) *ptab38 = NULL; if (ptab14) *ptab14 = NULL; if (!ptabval || !ptab38 || !ptab14) return ERROR_INT("table ptrs not all defined", __func__, 1); /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ tabval = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); tab38 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); tab14 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (!tabval || !tab38 || !tab14) return ERROR_INT("calloc failure to make small table", __func__, 1); *ptabval = tabval; *ptab38 = tab38; *ptab14 = tab14; for (i = 0; i < 256; i++) { if (i <= lowerclip) { tabval[i] = 1; tab38[i] = 0; tab14[i] = 0; } else if (i < 128) { tabval[i] = 1; tab38[i] = (3 * i + 4) / 8; tab14[i] = (i + 2) / 4; } else if (i < 255 - upperclip) { tabval[i] = 0; tab38[i] = (3 * (i - 255) + 4) / 8; tab14[i] = ((i - 255) + 2) / 4; } else { /* i >= 255 - upperclip */ tabval[i] = 0; tab38[i] = 0; tab14[i] = 0; } } return 0; } #endif /* Documentation */ leptonica-1.86.0/src/hashmap.c000066400000000000000000000246051506303110300161370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * \file hashmap.c *
 *
 *      Hashmap creation, destruction
 *          L_HASHMAP    *l_hmapCreate()
 *          void          l_hmapDestroy()
 *
 *      Hashmap: Accessors and modifiers
 *          L_HASHITEM   *l_hmapLookup()
 *          l_int32       l_hmapRehash()
 *
 *    (1) See also hashmap.h for a brief description of the design.
 *    (2) In a typical use, a set of objects (in an array or associated
 *        with image pixels) is represented by a hashmap.  A uint64 key is
 *        produced for each object.  This integer is then hashed into an
 *        index in a hashtable, using the mod function with the table size
 *        which is a prime number.  Each entry in the hash table is a list
 *        of hash items.  In lookup, the appropriate list is traversed,
 *        looking for the object key found earlier.
 *    (3) Hash functions that map points, strings and float64 to uint64
 *        are given in utils1.c.
 *    (4) Use of the hashmap on points, strings and float64 data are
 *        given in ptafunc2.c, sarray2.c and dnafunc1.c.
 *    (5) Useful rule of thumb for hashing collisions:
 *        For a random hashing function (say, from strings to l_uint64),
 *        the probability of a collision increases as N^2 for N much
 *        less than 2^32.  The quadratic behavior switches over to
 *        approaching 1.0 around 2^32, which is the square root of 2^64.
 *        So, for example, if you have 10^7 strings, the probability
 *        of a single collision using an l_uint64 key is on the order of
 *            (10^7/4x10^9)^2 ~ 10^-5.
 *        For a million strings, collisions are very rare (~10^-7 probability).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Limit on the hashtable size */ static const l_uint32 MaxTabsize = 50000000; /* Default values for creating the hashmap. */ static const l_int32 DefaultInitNItems = 2000; static const l_int32 DefaultMaxOcc = 2; /*--------------------------------------------------------------------------* * Hashmap creation and destruction * *--------------------------------------------------------------------------*/ /*! * \brief l_hmapCreate() * * \param[in] ninit initial estimate of the number of items to be stored; * use 0 for default value. * \param[in] maxocc max average occupancy of each list of hashitme; * it should be in range [1 ... 5]; use 0 for default * \return ptr to new hashmap, or NULL on error * *
 * Notes:
 *      (1) If the maximum number n of items to be hashed is known in
 *          advance, suggested values are:
 *                 %nint = 0.51 * n
 *                 %maxocc = 2
 *          With these values, the table will not need to be rehashed,
 *          even if all items have unique keys.
 *      (2) The actual initial size of the hashtab is the first prime
 *          number larger than %ninit/%maxocc.
 *      (3) Each entry into the hashtab points to alist of hash items
 *          (key, val, count).
 * 
*/ L_HASHMAP * l_hmapCreate(l_int32 ninit, l_int32 maxocc) { l_uint32 size, tabsize; L_HASHMAP *hmap; ninit = L_MAX(ninit, DefaultInitNItems); if (maxocc <= 0) maxocc = DefaultMaxOcc; if (maxocc > 5) { L_WARNING("maxocc = %d; non-optimal value. Set to default = %d\n", __func__, maxocc, DefaultMaxOcc); maxocc = DefaultMaxOcc; } size = ninit / maxocc; if (size > MaxTabsize) { L_ERROR("ninit/maxocc = %d > MaxTabsize = %d\n", __func__, size, MaxTabsize); return NULL; } hmap = (L_HASHMAP *)LEPT_CALLOC(1, sizeof(L_HASHMAP)); findNextLargerPrime(size, &tabsize); /* at least 101 */ if ((hmap->hashtab = (L_HASHITEM **)LEPT_CALLOC(tabsize, sizeof(L_HASHITEM *))) == NULL) { LEPT_FREE(hmap); return (L_HASHMAP *)ERROR_PTR("hashtab not made", __func__, NULL); } hmap->nitems = 0; hmap->ntogo = ninit; hmap->maxocc = maxocc; hmap->tabsize = tabsize; return hmap; } /*! * \brief l_hmapDestroy() * * \param[in,out] phmap to be nulled, if it exists * \return void */ void l_hmapDestroy(L_HASHMAP **phmap) { l_int32 i; L_HASHITEM *hitem, *next; L_HASHMAP *hmap; if (phmap == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((hmap = *phmap) == NULL) return; for (i = 0; i < hmap->tabsize; i++) { for (hitem = hmap->hashtab[i]; hitem != NULL; hitem = next) { next = hitem->next; LEPT_FREE(hitem); } } LEPT_FREE(hmap->hashtab); LEPT_FREE(hmap); *phmap = NULL; } /*--------------------------------------------------------------------------* * Hashmap: Accessors and modifiers * *--------------------------------------------------------------------------*/ /*! * \brief l_hmapLookup() * * \param[in] hmap * \param[in] key to be hashed into an index in the hashtab * \param[in] val to be stored in the hitem if creating it * \param[in] op L_HMAP_CHECK, L_HMAP_CREATE * \return ptr hitem; or null either on error or if not found * with op == L_HMAP_CHECK. * *
 * Notes:
 *      (1) This lookup function will also create a new hitem if requested.
 *      (2) The %op parameter does the following:
 *          op == L_HMAP_CHECK: return the hitem, or null if not found
 *          op == L_HMAP_CREATE: if found, increment the count; otherwise, make
 *                               and store a new hitem; always return the hitem.
 *      (3) The key is a uint64.  It is made by hashing some data in the object.
 *      (4) The value is an index into an array of the objects from which
 *          the hashtable has been constructed.
 *      (5) If an hitem is found, a pointer to it is returned.  It is owned
 *          by the hashtable; do not destroy it.
 * 
*/ L_HASHITEM * l_hmapLookup(L_HASHMAP *hmap, l_uint64 key, l_uint64 val, l_int32 op) { l_uint32 index; L_HASHITEM *hlist, *hitem; if (!hmap) return (L_HASHITEM *)ERROR_PTR("hmap not defined", __func__, NULL); if (op != L_HMAP_CHECK && op != L_HMAP_CREATE) return (L_HASHITEM *)ERROR_PTR("invalid op", __func__, NULL); /* If found, return a ptr to the hitem (not a copy) */ index = key % hmap->tabsize; /* into hashtab */ hlist = hmap->hashtab[index]; /* head of the list */ for (hitem = hlist; hitem != NULL; hitem = hitem->next) { if (key == hitem->key) { if (op == L_HMAP_CREATE) hitem->count++; return hitem; } } if (op == L_HMAP_CHECK) return NULL; /* Not found and %op == L_HMAP_CREATE. * Make a new hitem and add to the head of the list */ hitem = (L_HASHITEM *)LEPT_CALLOC(1, sizeof(L_HASHITEM)); hitem->key = key; hitem->val = val; hitem->count = 1; hitem->next = hlist; hmap->hashtab[index] = hitem; hmap->nitems++; hmap->ntogo--; /* If hmap is full based on average occupancy, rehash */ if (hmap->ntogo == 0) l_hmapRehash(hmap); return hitem; } /*! * \brief l_hmapRehash() * * \param[in] hmap * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is called when the average occupancy reaches maxocc.
 *          It doubles the size of the hashtab, and reuses the hash items.
 * 
*/ l_ok l_hmapRehash(L_HASHMAP *hmap) { l_int32 i, index; l_uint32 tabsize; L_HASHITEM *hstore, *hitem, *next; if (!hmap) return ERROR_INT("hmap not defined", __func__, 1); /* Put hash items in temporary storage in a single list, * successively adding each to the list head. */ hstore = NULL; /* ptr to resulting list */ for (i = 0; i < hmap->tabsize; i++) { for (hitem = hmap->hashtab[i]; hitem != NULL; hitem = next) { next = hitem->next; hitem->next = hstore; hstore = hitem; } } /* Destroy the old hashtab and make a new one that is twice as big */ LEPT_FREE(hmap->hashtab); findNextLargerPrime(2 * hmap->tabsize, &tabsize); hmap->tabsize = tabsize; hmap->hashtab = (L_HASHITEM **)LEPT_CALLOC(tabsize, sizeof(L_HASHITEM *)); if (hmap->hashtab == NULL) { hmap->tabsize = 0; return ERROR_INT("hashtab ptr array not made", __func__, 1); } hmap->ntogo = hmap->maxocc * tabsize - hmap->nitems; /* Populate with the stored hash items */ for (hitem = hstore; hitem != NULL; hitem = next) { next = hitem->next; index = hitem->key % tabsize; /* into new hashtab */ hitem->next = hmap->hashtab[index]; /* link to head of existing list */ hmap->hashtab[index] = hitem; /* put at head */ } return 0; } leptonica-1.86.0/src/hashmap.h000066400000000000000000000157371506303110300161520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_HASHMAP_H #define LEPTONICA_HASHMAP_H /* * \file hashmap.h * *
 *  Contains the following structs:
 *      struct L_Hashmap
 *      struct L_Hashitem
 *
 *  Goal:
 *      You have a set of objects (integers, strings, pts, whatever),
 *      and you want to store them in a data structure (L_Hashmap) that allows
 *      O(1) to find, insert and count the occurrences of such an object.
 *      The tool is a hash map.  This is not ordered, unlike the O(log n)
 *      ordered map (L_Amap), which is implemented by an rbtree.
 *
 *  In slightly more detail:
 *      Store the set of objects in an array, which in general can be
 *      held in a pointer array (L_Ptra).  You need a hash function that
 *      will generate a unique uint64 key from each object.  For our simple
 *      built-in arrays, such as float, double and Pta (points), these hash
 *      functions are in utils1.c.  Then for each object in the array,
 *      you store the key and the index to the array of objects (the val)
 *      in a list of hashitems in the hash table, where the specific
 *      list is determined by the key (specifically, the mod of the key
 *      with the size of the hashtable).
 *
 *  In yet more detail:
 *  (1) The design loosely follows the design of a hashmap in "The Practice
 *      of Programming by Brian Kernighan and Rob Pike, Addison Wesley, 1999.
 *  (2) The L_Hashmap contains a hashtable with a prime number of pointers
 *      to lists of hashitems.  The lookup function takes a key and a value,
 *      which are both 64-bit unsigned integers.  The key has been generated
 *      by hashing the input object in a way that avoids collisions between
 *      different objects. The value is an integer that identifies the
 *      object; typically it is the index into an array of objects.
 *      The hashtable size is a prime number, and an index into the table
 *      is made from the key by taking its mod with the hashtable size.
 *      The index points to a list of hashitems, which have all been hashed
 *      by the mod function into the same index in the table.
 *      Because the key is expected to be randomly distributed in uint64,
 *      the table indices should be uniformly distributed, resulting in
 *      approximately the same number of items being placed in each of
 *      these lists.  The list of hashitems is traversed, comparing the
 *      input uint64 key in the lookup() function with the key stored in
 *      each hashitem.  If a hashitem is found with a matching key,
 *      return a pointer to that hashitem.  If not found and the op is
 *      L_HASH_CREATE, make a new hash item, add it to the list, and
 *      return a pointer to it.
 *  (3) The count field in the hashitem gives the number of times the
 *      key has been seen when storing key/value pairs.
 *  (4) The val field is the index into an array of the objects.  When
 *      the hashmap is initially made, it is the index of the first item
 *      seen with its key.
 *  (5) For the hashmap to work efficiently, the lists must not become too
 *      long.  Because in general you do not know the number of objects
 *      in advance, it is important to be able to dynamically resize
 *      the hashtable as it grows.  The hashmap is initialized with
 *      room for some number of hashitems and the maximum average list
 *      size.  These two numbers determine the size of the hashtable,
 *      which is constrained to be a prime number.  As the hashtable grows,
 *      if the average occupancy exceeds the input %maxocc, the hashtable
 *      size is approximately doubled and the existing items are re-hashed
 *      into it, mod the new (prime number) table size.
 * 
*/ /*------------------------------------------------------------------------* * Hash map structs * *------------------------------------------------------------------------*/ /*! General hash map */ struct L_Hashmap { l_int32 nitems; /*!< number of stored items */ l_int32 ntogo; /*!< number of items to be stored */ /*!< before resizing the hashmap */ l_int32 maxocc; /*!< max average occupancy allowed */ struct L_Hashitem **hashtab; /*!< array of hash item ptrs */ l_int32 tabsize; /*!< size of array of hash item ptrs */ }; typedef struct L_Hashmap L_HASHMAP; /*! Hash item, containing storage for the key, value and count. The key is a l_uint64, which is hashed by the mod function to find the index into the hashtab. */ struct L_Hashitem { l_uint64 key; /*!< key is hashed into index into hashtab */ l_uint64 val; /*!< number stored associated with the key */ l_int32 count; /*!< number of elements seen with this key */ struct L_Hashitem *next; /*!< ptr to the next in the list */ }; typedef struct L_Hashitem L_HASHITEM; /*------------------------------------------------------------------------* * Hashmap flags * *------------------------------------------------------------------------*/ /*! Hashmap Lookup */ enum { L_UNDEFINED = 0, /*!< invalid operation */ L_HMAP_CHECK = 1, /*!< check if this key/val has been stored */ L_HMAP_CREATE = 2 /*!< create and store a hashitem if not found */ }; #endif /* LEPTONICA_HASHMAP_H */ leptonica-1.86.0/src/heap.c000066400000000000000000000425221506303110300154310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file heap.c *
 *
 *      Create/Destroy L_Heap
 *          L_HEAP         *lheapCreate()
 *          void            lheapDestroy()
 *
 *      Operations to add/remove to/from the heap
 *          l_int32         lheapAdd()
 *          static l_int32  lheapExtendArray()
 *          void           *lheapRemove()
 *
 *      Other accessors
 *          l_int32         lheapGetCount()
 *          void           *lheapGetElement()
 *
 *      Heap sort
 *          l_int32         lheapSort()
 *          l_int32         lheapSortStrictOrder()
 *
 *      Low-level heap operations
 *          static l_int32  lheapSwapUp()
 *          static l_int32  lheapSwapDown()
 *
 *      Debug output
 *          l_int32         lheapPrint()
 *
 *    The L_Heap is useful to implement a priority queue, that is sorted
 *    on a key in each element of the heap.  The heap is an array
 *    of nearly arbitrary structs, with a l_float32 the first field.
 *    This field is the key on which the heap is sorted.
 *
 *    Internally, we keep track of the heap size, n.  The item at the
 *    root of the heap is at the head of the array.  Items are removed
 *    from the head of the array and added to the end of the array.
 *    When an item is removed from the head, the item at the end
 *    of the array is moved to the head.  When items are either
 *    added or removed, it is usually necessary to swap array items
 *    to restore the heap order.  It is guaranteed that the number
 *    of swaps does not exceed log(n).
 *
 *    --------------------------  N.B.  ------------------------------
 *    The items on the heap (or, equivalently, in the array) are cast
 *    to void*.  Their key is a l_float32, and it is REQUIRED that the
 *    key be the first field in the struct.  That allows us to get the
 *    key by simply dereferencing the struct.  Alternatively, we could
 *    choose (but don't) to pass an application-specific comparison
 *    function into the heap operation functions.
 *    --------------------------  N.B.  ------------------------------
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Bounds on initial array size */ static const l_uint32 MaxPtrArraySize = 100000; static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ #define SWAP_ITEMS(i, j) { void *tempitem = lh->array[(i)]; \ lh->array[(i)] = lh->array[(j)]; \ lh->array[(j)] = tempitem; } /* Static functions */ static l_int32 lheapExtendArray(L_HEAP *lh); static l_ok lheapSwapUp(L_HEAP *lh, l_int32 index); static l_ok lheapSwapDown(L_HEAP *lh); /*--------------------------------------------------------------------------* * L_Heap create/destroy * *--------------------------------------------------------------------------*/ /*! * \brief lheapCreate() * * \param[in] n size of ptr array to be alloc'd; use 0 for default * \param[in] direction L_SORT_INCREASING, L_SORT_DECREASING * \return lheap, or NULL on error */ L_HEAP * lheapCreate(l_int32 n, l_int32 direction) { L_HEAP *lh; if (n < InitialPtrArraySize || n > MaxPtrArraySize) n = InitialPtrArraySize; /* Allocate ptr array and initialize counters. */ lh = (L_HEAP *)LEPT_CALLOC(1, sizeof(L_HEAP)); if ((lh->array = (void **)LEPT_CALLOC(n, sizeof(void *))) == NULL) { lheapDestroy(&lh, FALSE); return (L_HEAP *)ERROR_PTR("ptr array not made", __func__, NULL); } lh->nalloc = n; lh->n = 0; lh->direction = direction; return lh; } /*! * \brief lheapDestroy() * * \param[in,out] plh will be set to null before returning * \param[in] freeflag TRUE to free each remaining struct in the array * \return void * *
 * Notes:
 *      (1) Use %freeflag == TRUE when the items in the array can be
 *          simply destroyed using free.  If those items require their
 *          own destroy function, they must be destroyed before
 *          calling this function, and then this function is called
 *          with %freeflag == FALSE.
 *      (2) To destroy the lheap, we destroy the ptr array, then
 *          the lheap, and then null the contents of the input ptr.
 * 
*/ void lheapDestroy(L_HEAP **plh, l_int32 freeflag) { l_int32 i; L_HEAP *lh; if (plh == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((lh = *plh) == NULL) return; if (freeflag) { /* free each struct in the array */ for (i = 0; i < lh->n; i++) LEPT_FREE(lh->array[i]); } else if (lh->n > 0) { /* freeflag == FALSE but elements exist on array */ L_WARNING("memory leak of %d items in lheap!\n", __func__, lh->n); } if (lh->array) LEPT_FREE(lh->array); LEPT_FREE(lh); *plh = NULL; } /*--------------------------------------------------------------------------* * Operations to add/remove to/from the heap * *--------------------------------------------------------------------------*/ /*! * \brief lheapAdd() * * \param[in] lh heap * \param[in] item to be added to the tail of the heap * \return 0 if OK, 1 on error */ l_ok lheapAdd(L_HEAP *lh, void *item) { if (!lh) return ERROR_INT("lh not defined", __func__, 1); if (!item) return ERROR_INT("item not defined", __func__, 1); /* If necessary, expand the allocated array by a factor of 2 */ if (lh->n >= lh->nalloc) { if (lheapExtendArray(lh)) return ERROR_INT("extension failed", __func__, 1); } /* Add the item */ lh->array[lh->n] = item; lh->n++; /* Restore the heap */ lheapSwapUp(lh, lh->n - 1); return 0; } /*! * \brief lheapExtendArray() * * \param[in] lh heap * \return 0 if OK, 1 on error */ static l_int32 lheapExtendArray(L_HEAP *lh) { if (!lh) return ERROR_INT("lh not defined", __func__, 1); if ((lh->array = (void **)reallocNew((void **)&lh->array, sizeof(void *) * lh->nalloc, 2 * sizeof(void *) * lh->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); lh->nalloc = 2 * lh->nalloc; return 0; } /*! * \brief lheapRemove() * * \param[in] lh heap * \return ptr to item popped from the root of the heap, * or NULL if the heap is empty or on error */ void * lheapRemove(L_HEAP *lh) { void *item; if (!lh) return (void *)ERROR_PTR("lh not defined", __func__, NULL); if (lh->n == 0) return NULL; item = lh->array[0]; lh->array[0] = lh->array[lh->n - 1]; /* move last to the head */ lh->array[lh->n - 1] = NULL; /* set ptr to null */ lh->n--; lheapSwapDown(lh); /* restore the heap */ return item; } /*--------------------------------------------------------------------------* * Other accessors * *--------------------------------------------------------------------------*/ /*! * \brief lheapGetCount() * * \param[in] lh heap * \return count, or 0 on error */ l_int32 lheapGetCount(L_HEAP *lh) { if (!lh) return ERROR_INT("lh not defined", __func__, 0); return lh->n; } /*! * \brief lheapGetElement() * * \param[in] lh heap * \param[in] index into the internal heap array * \return ptr to the element at array[index], or NULL on error * *
 * Notes:
 *      (1) This is useful for retrieving an arbitrary element in the
 *          heap array without disturbing the heap.  It allows all the
 *          elements on the heap to be queried in linear time; for
 *          example, to find the min or max of some value.
 *      (2) The retrieved element is owned by the heap.  Do not destroy it.
 * 
*/ void * lheapGetElement(L_HEAP *lh, l_int32 index) { if (!lh) return ERROR_PTR("lh not defined", __func__, NULL); if (index < 0 || index >= lh->n) return ERROR_PTR("invalid index", __func__, NULL); return (void *)lh->array[index]; } /*--------------------------------------------------------------------------* * Heap sort * *--------------------------------------------------------------------------*/ /*! * \brief lheapSort() * * \param[in] lh heap, with internal array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This sorts an array into heap order.  If the heap is already
 *          in heap order for the direction given, this has no effect.
 * 
*/ l_ok lheapSort(L_HEAP *lh) { l_int32 i; if (!lh) return ERROR_INT("lh not defined", __func__, 1); for (i = 0; i < lh->n; i++) lheapSwapUp(lh, i); return 0; } /*! * \brief lheapSortStrictOrder() * * \param[in] lh heap, with internal array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This sorts a heap into strict order.
 *      (2) For each element, starting at the end of the array and
 *          working forward, the element is swapped with the head
 *          element and then allowed to swap down onto a heap of
 *          size reduced by one.  The result is that the heap is
 *          reversed but in strict order.  The array elements are
 *          then reversed to put it in the original order.
 * 
*/ l_ok lheapSortStrictOrder(L_HEAP *lh) { l_int32 i, index, size; if (!lh) return ERROR_INT("lh not defined", __func__, 1); /* Start from a sorted heap */ lheapSort(lh); size = lh->n; /* save the actual size */ for (i = 0; i < size; i++) { index = size - i; SWAP_ITEMS(0, index - 1); lh->n--; /* reduce the apparent heap size by 1 */ lheapSwapDown(lh); } lh->n = size; /* restore the size */ for (i = 0; i < size / 2; i++) /* reverse */ SWAP_ITEMS(i, size - i - 1); return 0; } /*--------------------------------------------------------------------------* * Low-level heap operations * *--------------------------------------------------------------------------*/ /*! * \brief lheapSwapUp() * * \param[in] lh heap * \param[in] index of array corresponding to node to be swapped up * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is called after a new item is put on the heap, at the
 *          bottom of a complete tree.
 *      (2) To regain the heap order, we let it bubble up,
 *          iteratively swapping with its parent, until it either
 *          reaches the root of the heap or it finds a parent that
 *          is in the correct position already vis-a-vis the child.
 * 
*/ static l_ok lheapSwapUp(L_HEAP *lh, l_int32 index) { l_int32 ip; /* index to heap for parent; 1 larger than array index */ l_int32 ic; /* index into heap for child */ l_float32 valp, valc; if (!lh) return ERROR_INT("lh not defined", __func__, 1); if (index < 0 || index >= lh->n) return ERROR_INT("invalid index", __func__, 1); ic = index + 1; /* index into heap: add 1 to array index */ if (lh->direction == L_SORT_INCREASING) { while (1) { if (ic == 1) /* root of heap */ break; ip = ic / 2; valc = *(l_float32 *)(lh->array[ic - 1]); valp = *(l_float32 *)(lh->array[ip - 1]); if (valp <= valc) break; SWAP_ITEMS(ip - 1, ic - 1); ic = ip; } } else { /* lh->direction == L_SORT_DECREASING */ while (1) { if (ic == 1) /* root of heap */ break; ip = ic / 2; valc = *(l_float32 *)(lh->array[ic - 1]); valp = *(l_float32 *)(lh->array[ip - 1]); if (valp >= valc) break; SWAP_ITEMS(ip - 1, ic - 1); ic = ip; } } return 0; } /*! * \brief lheapSwapDown() * * \param[in] lh heap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is called after an item has been popped off the
 *          root of the heap, and the last item in the heap has
 *          been placed at the root.
 *      (2) To regain the heap order, we let it bubble down,
 *          iteratively swapping with one of its children.  For a
 *          decreasing sort, it swaps with the largest child; for
 *          an increasing sort, the smallest.  This continues until
 *          it either reaches the lowest level in the heap, or the
 *          parent finds that neither child should swap with it
 *          (e.g., for a decreasing heap, the parent is larger
 *          than or equal to both children).
 * 
*/ static l_ok lheapSwapDown(L_HEAP *lh) { l_int32 ip; /* index to heap for parent; 1 larger than array index */ l_int32 icr, icl; /* index into heap for left/right children */ l_float32 valp, valcl, valcr; if (!lh) return ERROR_INT("lh not defined", __func__, 1); if (lheapGetCount(lh) < 1) return 0; ip = 1; /* index into top of heap: corresponds to array[0] */ if (lh->direction == L_SORT_INCREASING) { while (1) { icl = 2 * ip; if (icl > lh->n) break; valp = *(l_float32 *)(lh->array[ip - 1]); valcl = *(l_float32 *)(lh->array[icl - 1]); icr = icl + 1; if (icr > lh->n) { /* only a left child; no iters below */ if (valp > valcl) SWAP_ITEMS(ip - 1, icl - 1); break; } else { /* both children exist; swap with the smallest if bigger */ valcr = *(l_float32 *)(lh->array[icr - 1]); if (valp <= valcl && valp <= valcr) /* smaller than both */ break; if (valcl <= valcr) { /* left smaller; swap */ SWAP_ITEMS(ip - 1, icl - 1); ip = icl; } else { /* right smaller; swap */ SWAP_ITEMS(ip - 1, icr - 1); ip = icr; } } } } else { /* lh->direction == L_SORT_DECREASING */ while (1) { icl = 2 * ip; if (icl > lh->n) break; valp = *(l_float32 *)(lh->array[ip - 1]); valcl = *(l_float32 *)(lh->array[icl - 1]); icr = icl + 1; if (icr > lh->n) { /* only a left child; no iters below */ if (valp < valcl) SWAP_ITEMS(ip - 1, icl - 1); break; } else { /* both children exist; swap with the biggest if smaller */ valcr = *(l_float32 *)(lh->array[icr - 1]); if (valp >= valcl && valp >= valcr) /* bigger than both */ break; if (valcl >= valcr) { /* left bigger; swap */ SWAP_ITEMS(ip - 1, icl - 1); ip = icl; } else { /* right bigger; swap */ SWAP_ITEMS(ip - 1, icr - 1); ip = icr; } } } } return 0; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * \brief lheapPrint() * * \param[in] fp file stream * \param[in] lh heap * \return 0 if OK; 1 on error */ l_ok lheapPrint(FILE *fp, L_HEAP *lh) { l_int32 i; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!lh) return ERROR_INT("lh not defined", __func__, 1); fprintf(fp, "\n L_Heap: nalloc = %d, n = %d, array = %p\n", lh->nalloc, lh->n, lh->array); for (i = 0; i < lh->n; i++) fprintf(fp, "keyval[%d] = %f\n", i, *(l_float32 *)lh->array[i]); return 0; } leptonica-1.86.0/src/heap.h000066400000000000000000000102771506303110300154400ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_HEAP_H #define LEPTONICA_HEAP_H /*! * \file heap.h * *
 *      Expandable priority queue configured as a heap for arbitrary void* data
 *
 *      The L_Heap is used to implement a priority queue.  The elements
 *      in the heap are ordered in either increasing or decreasing key value.
 *      The key is a float field 'keyval' that is required to be
 *      contained in the elements of the queue.
 *
 *      The heap is a simple binary tree with the following constraints:
 *         - the key of each node is >= the keys of the two children
 *         - the tree is complete, meaning that each level (1, 2, 4, ...)
 *           is filled and the last level is filled from left to right
 *
 *      The tree structure is implicit in the queue array, with the
 *      array elements numbered as a breadth-first search of the tree
 *      from left to right.  It is thus guaranteed that the largest
 *      (or smallest) key belongs to the first element in the array.
 *
 *      Heap sort is used to sort the array.  Once an array has been
 *      sorted as a heap, it is convenient to use it as a priority queue,
 *      because the min (or max) elements are always at the root of
 *      the tree (element 0), and once removed, the heap can be
 *      resorted in not more than log[n] steps, where n is the number
 *      of elements on the heap.  Likewise, if an arbitrary element is
 *      added to the end of the array A, the sorted heap can be restored
 *      in not more than log[n] steps.
 *
 *      A L_Heap differs from a L_Queue in that the elements in the former
 *      are sorted by a key.  Internally, the array is maintained
 *      as a queue, with a pointer to the end of the array.  The
 *      head of the array always remains at array[0].  The array is
 *      maintained (sorted) as a heap.  When an item is removed from
 *      the head, the last item takes its place (thus reducing the
 *      array length by 1), and this is followed by array element
 *      swaps to restore the heap property.   When an item is added,
 *      it goes at the end of the array, and is swapped up to restore
 *      the heap.  If the ptr array is full, adding another item causes
 *      the ptr array size to double.
 *
 *      For further implementation details, see heap.c.
 * 
*/ /*! Heap of arbitrary void* data */ struct L_Heap { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 n; /*!< number of elements stored in the heap */ void **array; /*!< ptr array */ l_int32 direction; /*!< L_SORT_INCREASING or L_SORT_DECREASING */ }; typedef struct L_Heap L_HEAP; #endif /* LEPTONICA_HEAP_H */ leptonica-1.86.0/src/hmttemplate1.txt000066400000000000000000000133161506303110300175150ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * --- * PIX *pixHMTDwa_*() --- * PIX *pixFHMTGen_*() */ #include #include "allheaders.h" --- This file is: hmttemplate1.txt --- --- We need to include these prototypes: --- PIX *pixHMTDwa_*(PIX *pixd, PIX *pixs, l_int32 operation); --- PIX *pixFHMTGen_*(PIX *pixd, PIX *pixs, l_int32 operation); --- l_int32 fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * \brief pixHMTDwa_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a 32 pixel border, calls the appropriate
 *          pixFHMTGen_*(), and removes the border.
 *          See notes below for that function.
 * 
*/ PIX * --- pixHMTDwa_*(PIX *pixd, PIX *pixs, const char *selname) { PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixHMTDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); pixt1 = pixAddBorder(pixs, 32, 0); --- pixt2 = pixFHMTGen_*(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * \brief pixFHMTGen_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa implementation of the hit-miss transform
 *          on pixs by the sel.
 *      (2) The sel must be limited in size to not more than 31 pixels
 *          about the origin.  It must have at least one hit, and it
 *          can have any number of misses.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 * 
*/ PIX * --- pixFHMTGen_*(PIX *pixd, PIX *pixs, const char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFHMTGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; --- fhmtgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ --- fhmtgen_low_*(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.86.0/src/hmttemplate2.txt000066400000000000000000000070631506303110300175200ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: --- * l_int32 fhmtgen_low_*() * * Static Low-level: --- * void fhmt_*_*() */ #include "allheaders.h" --- This file is: hmttemplate2.txt --- --- insert static protos here /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! --- * fhmtgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fhmt* routines } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fhmt_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ---------------------- pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.86.0/src/imageio.h000066400000000000000000000263761506303110300161440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file imageio.h * *
 *  General features of image I/O in leptonica
 *
 *  At present, there are 9 file formats for images that can be read
 *  and written:
 *      png (requires libpng, libz)
 *      jpeg (requires libjpeg)
 *      tiff (requires libtiff, libz)
 *      gif (requires libgif)
 *      webp (requires libwebp)
 *      jp2 (requires libopenjp2)
 *      bmp (no library required)
 *      pnm (no library required)
 *      spix (no library required)
 *  Additionally, there are two file formats for writing (only) images:
 *      PostScript (requires libpng, libz, libjpeg, libtiff)
 *      pdf (requires libpng, libz, libjpeg, libtiff)
 *
 *  For all 9 read/write formats, leptonica provides interconversion
 *  between pix (with raster data) and formatted image data:
 *      Conversion from pix (typically compression):
 *          pixWrite():        pix --> file
 *          pixWriteStream():  pix --> filestream (aka FILE*)
 *          pixWriteMem():     pix --> memory buffer
 *      Conversion to pix (typically decompression):
 *          pixRead():         file --> pix
 *          pixReadStream():   filestream --> pix
 *          pixReadMem():      memory buffer --> pix
 *
 *  Conversions for which the image data is not compressed are:
 *     * uncompressed tiff   (IFF_TIFF)
 *     * bmp
 *     * pnm
 *     * spix (fast serialization that copies the pix raster data)
 *
 *  The image header (metadata) information can be read from either
 *  the compressed file or a memory buffer, for all 9 formats.
 * 
*/ #ifndef LEPTONICA_IMAGEIO_H #define LEPTONICA_IMAGEIO_H /* --------------------------------------------------------------- * * Image file format types * * --------------------------------------------------------------- */ /* * The IFF_DEFAULT flag is used to write the file out in the * same (input) file format that the pix was read from. If the pix * was not read from file, the input format field will be * IFF_UNKNOWN and the output file format will be chosen to * be compressed and lossless; namely, IFF_TIFF_G4 for d = 1 * and IFF_PNG for everything else. * * In the future, new format types that have defined extensions * will be added before IFF_DEFAULT, and will be kept in sync with * the file format extensions in writefile.c. The positions of * file formats before IFF_DEFAULT will remain invariant. */ /*! Image Formats */ enum { IFF_UNKNOWN = 0, IFF_BMP = 1, IFF_JFIF_JPEG = 2, IFF_PNG = 3, IFF_TIFF = 4, IFF_TIFF_PACKBITS = 5, IFF_TIFF_RLE = 6, IFF_TIFF_G3 = 7, IFF_TIFF_G4 = 8, IFF_TIFF_LZW = 9, IFF_TIFF_ZIP = 10, IFF_PNM = 11, IFF_PS = 12, IFF_GIF = 13, IFF_JP2 = 14, IFF_WEBP = 15, IFF_LPDF = 16, IFF_TIFF_JPEG = 17, IFF_DEFAULT = 18, IFF_SPIX = 19 }; /* Convenient macro for checking requested tiff output */ #define L_FORMAT_IS_TIFF(f) ((f) == IFF_TIFF || (f) == IFF_TIFF_PACKBITS || \ (f) == IFF_TIFF_RLE || (f) == IFF_TIFF_G3 || \ (f) == IFF_TIFF_G4 || (f) == IFF_TIFF_LZW || \ (f) == IFF_TIFF_ZIP || (f) == IFF_TIFF_JPEG) /* --------------------------------------------------------------- * * Format header ids * * --------------------------------------------------------------- */ /*! Header Ids */ enum { BMP_ID = 0x4d42, /*!< BM - for bitmaps */ TIFF_BIGEND_ID = 0x4d4d, /*!< MM - for 'motorola' */ TIFF_LITTLEEND_ID = 0x4949 /*!< II - for 'intel' */ }; /* --------------------------------------------------------------- * * Hinting bit flags in jpeg reader * * --------------------------------------------------------------- */ /*! Jpeg Hints */ /* The default behavior is now to fail on data corruption. */ enum { L_JPEG_READ_LUMINANCE = 1, /*!< only want luminance data; no chroma */ L_JPEG_CONTINUE_WITH_BAD_DATA = 2 /*!< return possibly damaged pix */ }; /* --------------------------------------------------------------- * * Jp2k codecs * * --------------------------------------------------------------- */ /*! Jp2k Codecs */ enum { L_J2K_CODEC = 1, /*!< codestream */ L_JP2_CODEC = 2 /*!< file format with 'ihdr' */ }; /* --------------------------------------------------------------- * * Pdf formatted encoding types * * --------------------------------------------------------------- */ /*! Pdf Encoding */ enum { L_DEFAULT_ENCODE = 0, /*!< use default encoding based on image */ L_JPEG_ENCODE = 1, /*!< use dct encoding: 8 and 32 bpp, no cmap */ L_G4_ENCODE = 2, /*!< use ccitt g4 fax encoding: 1 bpp */ L_FLATE_ENCODE = 3, /*!< use flate encoding: any depth, cmap ok */ L_JP2K_ENCODE = 4 /*!< use jp2k encoding: 8 and 32 bpp, no cmap */ }; /* --------------------------------------------------------------- * * Compressed image data * * --------------------------------------------------------------- */ /* * In use, either datacomp or data85 will be produced, depending * on whether the data needs to be ascii85 encoded. PostScript * requires ascii85 encoding; pdf does not. * * For the colormap (flate compression only), PostScript uses ascii85 * encoding and pdf uses a bracketed array of space-separated * hex-encoded rgb triples. Only tiff g4 (type == L_G4_ENCODE) uses * the minisblack field. */ /*! Compressed image data */ struct L_Compressed_Data { l_int32 type; /*!< encoding type: L_JPEG_ENCODE, etc */ l_uint8 *datacomp; /*!< gzipped raster data */ size_t nbytescomp; /*!< number of compressed bytes */ char *data85; /*!< ascii85-encoded gzipped raster data */ size_t nbytes85; /*!< number of ascii85 encoded bytes */ char *cmapdata85; /*!< ascii85-encoded uncompressed cmap */ char *cmapdatahex; /*!< hex pdf array for the cmap */ l_int32 ncolors; /*!< number of colors in cmap */ l_int32 w; /*!< image width */ l_int32 h; /*!< image height */ l_int32 bps; /*!< bits/sample; typ. 1, 2, 4 or 8 */ l_int32 spp; /*!< samples/pixel; typ. 1 or 3 */ l_int32 minisblack; /*!< tiff g4 photometry */ l_int32 predictor; /*!< flate data has PNG predictors */ size_t nbytes; /*!< number of uncompressed raster bytes */ l_int32 res; /*!< resolution (ppi) */ }; typedef struct L_Compressed_Data L_COMP_DATA; /* ------------------------------------------------------------------------- * * Pdf multi image flags * * ------------------------------------------------------------------------- */ /*! Pdf MultiImage */ enum { L_FIRST_IMAGE = 1, /*!< first image to be used */ L_NEXT_IMAGE = 2, /*!< intermediate image; not first or last */ L_LAST_IMAGE = 3 /*!< last image to be used */ }; /* ------------------------------------------------------------------------- * * Intermediate pdf generation data * * ------------------------------------------------------------------------- */ /* * This accumulates data for generating a pdf of a single page consisting * of an arbitrary number of images. * * None of the strings have a trailing newline. */ /*! Intermediate pdf generation data */ struct L_Pdf_Data { char *title; /*!< optional title for pdf */ l_int32 n; /*!< number of images */ l_int32 ncmap; /*!< number of colormaps */ struct L_Ptra *cida; /*!< array of compressed image data */ char *id; /*!< %PDF-1.2 id string */ char *obj1; /*!< catalog string */ char *obj2; /*!< metadata string */ char *obj3; /*!< pages string */ char *obj4; /*!< page string (variable data) */ char *obj5; /*!< content string (variable data) */ char *poststream; /*!< post-binary-stream string */ char *trailer; /*!< trailer string (variable data) */ struct Pta *xy; /*!< store (xpt, ypt) array */ struct Pta *wh; /*!< store (wpt, hpt) array */ struct Box *mediabox; /*!< bounding region for all images */ struct Sarray *saprex; /*!< pre-binary-stream xobject strings */ struct Sarray *sacmap; /*!< colormap pdf object strings */ struct L_Dna *objsize; /*!< sizes of each pdf string object */ struct L_Dna *objloc; /*!< location of each pdf string object */ l_int32 xrefloc; /*!< location of xref */ }; typedef struct L_Pdf_Data L_PDF_DATA; #endif /* LEPTONICA_IMAGEIO_H */ leptonica-1.86.0/src/jbclass.c000066400000000000000000002726251506303110300161460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * jbclass.c * * These are functions for unsupervised classification of * collections of connected components -- either characters or * words -- in binary images. They can be used as image * processing steps in jbig2 compression. * * Initialization * * JBCLASSER *jbRankHausInit() [rank hausdorff encoder] * JBCLASSER *jbCorrelationInit() [correlation encoder] * JBCLASSER *jbCorrelationInitWithoutComponents() [ditto] * static JBCLASSER *jbCorrelationInitInternal() * * Classify the pages * * l_int32 jbAddPages() * l_int32 jbAddPage() * l_int32 jbAddPageComponents() * * Rank hausdorff classifier * * l_int32 jbClassifyRankHaus() * l_int32 pixHaustest() * l_int32 pixRankHaustest() * * Binary correlation classifier * * l_int32 jbClassifyCorrelation() * * Determine the image components we start with * * l_int32 jbGetComponents() * l_int32 pixWordMaskByDilation() * l_int32 pixWordBoxesByDilation() * * Build grayscale composites (templates) * * PIXA *jbAccumulateComposites * PIXA *jbTemplatesFromComposites * * Utility functions for Classer * * JBCLASSER *jbClasserCreate() * void jbClasserDestroy() * * Utility functions for Data * * JBDATA *jbDataSave() * void jbDataDestroy() * l_int32 jbDataWrite() * JBDATA *jbDataRead() * PIXA *jbDataRender() * l_int32 jbGetULCorners() * l_int32 jbGetLLCorners() * * Static helpers * * static JBFINDCTX *findSimilarSizedTemplatesInit() * static l_int32 findSimilarSizedTemplatesNext() * static void findSimilarSizedTemplatesDestroy() * static l_int32 finalPositioningForAlignment() * * Note: this is NOT an implementation of the JPEG jbig2 * proposed standard encoder, the specifications for which * can be found at http://www.jpeg.org/jbigpt2.html. * (See below for a full implementation.) * It is an implementation of the lower-level part of an encoder that: * * (1) identifies connected components that are going to be used * (2) puts them in similarity classes (this is an unsupervised * classifier), and * (3) stores the result in a simple file format (2 files, * one for templates and one for page/coordinate/template-index * quartets). * * An actual implementation of the official jbig2 encoder could * start with parts (1) and (2), and would then compress the quartets * according to the standards requirements (e.g., Huffman or * arithmetic coding of coordinate differences and image templates). * * The low-level part of the encoder provided here has the * following useful features: * * ~ It is accurate in the identification of templates * and classes because it uses a windowed hausdorff * distance metric. * ~ It is accurate in the placement of the connected * components, doing a two step process of first aligning * the the centroids of the template with those of each instance, * and then making a further correction of up to +- 1 pixel * in each direction to best align the templates. * ~ It is fast because it uses a morphologically based * matching algorithm to implement the hausdorff criterion, * and it selects the patterns that are possible matches * based on their size. * * We provide two different matching functions, one using Hausdorff * distance and one using a simple image correlation. * The Hausdorff method sometimes produces better results for the * same number of classes, because it gives a relatively small * effective weight to foreground pixels near the boundary, * and a relatively large weight to foreground pixels that are * not near the boundary. By effectively ignoring these boundary * pixels, Hausdorff weighting corresponds better to the expected * probabilities of the pixel values in a scanned image, where the * variations in instances of the same printed character are much * more likely to be in pixels near the boundary. By contrast, * the correlation method gives equal weight to all foreground pixels. * * For best results, use the correlation method. Correlation takes * the number of fg pixels in the AND of instance and template, * divided by the product of the number of fg pixels in instance * and template. It compares this with a threshold that, in * general, depends on the fractional coverage of the template. * For heavy text, the threshold is raised above that for light * text, By using both these parameters (basic threshold and * adjustment factor for text weight), one has more flexibility * and can arrive at the fewest substitution errors, although * this comes at the price of more templates. * * The strict Hausdorff scoring is not a rank weighting, because a * single pixel beyond the given distance will cause a match * failure. A rank Hausdorff is more robust to non-boundary noise, * but it is also more susceptible to confusing components that * should be in different classes. For implementing a jbig2 * application for visually lossless binary image compression, * you have two choices: * * (1) use a 3x3 structuring element (size = 3) and a strict * Hausdorff comparison (rank = 1.0 in the rank Hausdorff * function). This will result in a minimal number of classes, * but confusion of small characters, such as italic and * non-italic lower-case 'o', can still occur. * (2) use the correlation method with a threshold of 0.85 * and a weighting factor of about 0.7. This will result in * a larger number of classes, but should not be confused * either by similar small characters or by extremely * thick sans serif characters, such as in prog/cootoots.png. * * As mentioned above, if visual substitution errors must be * avoided, you should use the correlation method. * * We provide executables that show how to do the encoding: * prog/jbrankhaus.c * prog/jbcorrelation.c * * The basic flow for correlation classification goes as follows, * where specific choices have been made for parameters (Hausdorff * is the same except for initialization): * * // Initialize and save data in the classer * JBCLASSER *classer = * jbCorrelationInit(JB_CONN_COMPS, 0, 0, 0.8, 0.7); * SARRAY *safiles = getSortedPathnamesInDirectory(directory, * NULL, 0, 0); * jbAddPages(classer, safiles); * * // Save the data in a data structure for serialization, * // and write it into two files. * JBDATA *data = jbDataSave(classer); * jbDataWrite(rootname, data); * * // Reconstruct (render) the pages from the encoded data. * PIXA *pixa = jbDataRender(data, FALSE); * * Adam Langley has built a jbig2 standards-compliant encoder, the * first one to appear in open source. You can get this encoder at: * http://www.imperialviolet.org/jbig2.html * * It uses arithmetic encoding throughout. It encodes binary images * losslessly with a single arithmetic coding over the full image. * It also does both lossy and lossless encoding from connected * components, using leptonica to generate the templates representing * each cluster. */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #include "array_internal.h" #define L_BUF_SIZE 512 /* For jbClassifyRankHaus(): size of border added around * pix of each c.c., to allow further processing. This * should be at least the sum of the MAX_DIFF_HEIGHT * (or MAX_DIFF_WIDTH) and one-half the size of the Sel */ static const l_int32 JB_ADDED_PIXELS = 6; /* For pixHaustest(), pixRankHaustest() and pixCorrelationScore(): * choose these to be 2 or greater */ static const l_int32 MAX_DIFF_WIDTH = 2; /* use at least 2 */ static const l_int32 MAX_DIFF_HEIGHT = 2; /* use at least 2 */ /* In initialization, you have the option to discard components * (cc, characters or words) that have either width or height larger * than a given size. This is convenient for jbDataSave(), because * the components are placed onto a regular lattice with cell * dimension equal to the maximum component size. The default * values are given here. If you want to save all components, * use a sufficiently large set of dimensions. */ static const l_int32 MAX_CONN_COMP_WIDTH = 350; /* default max cc width */ static const l_int32 MAX_CHAR_COMP_WIDTH = 350; /* default max char width */ static const l_int32 MAX_WORD_COMP_WIDTH = 1000; /* default max word width */ static const l_int32 MAX_COMP_HEIGHT = 120; /* default max component height */ /* This stores the state of a state machine which fetches * similar sized templates */ struct JbFindTemplatesState { JBCLASSER *classer; /* classer */ l_int32 w; /* desired width */ l_int32 h; /* desired height */ l_int32 i; /* index into two_by_two step array */ L_DNA *dna; /* current number array */ l_int32 n; /* current element of dna */ }; typedef struct JbFindTemplatesState JBFINDCTX; /* Static initialization function */ static JBCLASSER * jbCorrelationInitInternal(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor, l_int32 keep_components); /* Static helper functions */ static JBFINDCTX * findSimilarSizedTemplatesInit(JBCLASSER *classer, PIX *pixs); static l_int32 findSimilarSizedTemplatesNext(JBFINDCTX *context); static void findSimilarSizedTemplatesDestroy(JBFINDCTX **pcontext); static l_int32 finalPositioningForAlignment(PIX *pixs, l_int32 x, l_int32 y, l_int32 idelx, l_int32 idely, PIX *pixt, l_int32 *sumtab, l_int32 *pdx, l_int32 *pdy); #ifndef NO_CONSOLE_IO #define DEBUG_CORRELATION_SCORE 0 #endif /* ~NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Initialization * *----------------------------------------------------------------------*/ /*! * \brief jbRankHausInit() * * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] maxwidth of component; use 0 for default * \param[in] maxheight of component; use 0 for default * \param[in] size of square structuring element; 2, representing * 2x2 sel, is necessary for reasonable accuracy of * small components; combine this with rank ~ 0.97 * to avoid undue class expansion * \param[in] rank rank val of match, each way; in [0.5 - 1.0]; * when using size = 2, 0.97 is a reasonable value * \return jbclasser if OK; NULL on error */ JBCLASSER * jbRankHausInit(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_int32 size, l_float32 rank) { JBCLASSER *classer; if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid components", __func__, NULL); if (size < 1 || size > 10) return (JBCLASSER *)ERROR_PTR("size not reasonable", __func__, NULL); if (rank < 0.5 || rank > 1.0) return (JBCLASSER *)ERROR_PTR("rank not in [0.5-1.0]", __func__, NULL); if (maxwidth == 0) { if (components == JB_CONN_COMPS) maxwidth = MAX_CONN_COMP_WIDTH; else if (components == JB_CHARACTERS) maxwidth = MAX_CHAR_COMP_WIDTH; else /* JB_WORDS */ maxwidth = MAX_WORD_COMP_WIDTH; } if (maxheight == 0) maxheight = MAX_COMP_HEIGHT; if ((classer = jbClasserCreate(JB_RANKHAUS, components)) == NULL) return (JBCLASSER *)ERROR_PTR("classer not made", __func__, NULL); classer->maxwidth = maxwidth; classer->maxheight = maxheight; classer->sizehaus = size; classer->rankhaus = rank; classer->dahash = l_dnaHashCreate(5507, 4); /* 5507 is prime */ classer->keep_pixaa = 1; /* keep all components in pixaa */ return classer; } /*! * \brief jbCorrelationInit() * * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] maxwidth of component; use 0 for default * \param[in] maxheight of component; use 0 for default * \param[in] thresh value for correlation score: in [0.4 - 0.98] * \param[in] weightfactor corrects thresh for thick characters [0.0 - 1.0] * \return jbclasser if OK; NULL on error * *
 * Notes:
 *      (1) For scanned text, suggested input values are:
 *            thresh ~ [0.8 - 0.85]
 *            weightfactor ~ [0.5 - 0.6]
 *      (2) For electronically generated fonts (e.g., rasterized pdf),
 *          a very high thresh (e.g., 0.95) will not cause a significant
 *          increase in the number of classes.
 * 
*/ JBCLASSER * jbCorrelationInit(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor) { return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, weightfactor, 1); } /*! * \brief jbCorrelationInitWithoutComponents() * * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] maxwidth of component; use 0 for default * \param[in] maxheight of component; use 0 for default * \param[in] thresh value for correlation score: in [0.4 - 0.98] * \param[in] weightfactor corrects thresh for thick characters [0.0 - 1.0] * \return jbclasser if OK; NULL on error * *
 * Notes:
 *      Acts the same as jbCorrelationInit(), but the resulting
 *      object doesn't keep a list of all the components.
 * 
*/ JBCLASSER * jbCorrelationInitWithoutComponents(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor) { return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, weightfactor, 0); } static JBCLASSER * jbCorrelationInitInternal(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor, l_int32 keep_components) { JBCLASSER *classer; if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid components", __func__, NULL); if (thresh < 0.4 || thresh > 0.98) return (JBCLASSER *)ERROR_PTR("thresh not in range [0.4 - 0.98]", __func__, NULL); if (weightfactor < 0.0 || weightfactor > 1.0) return (JBCLASSER *)ERROR_PTR("weightfactor not in range [0.0 - 1.0]", __func__, NULL); if (maxwidth == 0) { if (components == JB_CONN_COMPS) maxwidth = MAX_CONN_COMP_WIDTH; else if (components == JB_CHARACTERS) maxwidth = MAX_CHAR_COMP_WIDTH; else /* JB_WORDS */ maxwidth = MAX_WORD_COMP_WIDTH; } if (maxheight == 0) maxheight = MAX_COMP_HEIGHT; if ((classer = jbClasserCreate(JB_CORRELATION, components)) == NULL) return (JBCLASSER *)ERROR_PTR("classer not made", __func__, NULL); classer->maxwidth = maxwidth; classer->maxheight = maxheight; classer->thresh = thresh; classer->weightfactor = weightfactor; classer->dahash = l_dnaHashCreate(5507, 4); /* 5507 is prime */ classer->keep_pixaa = keep_components; return classer; } /*----------------------------------------------------------------------* * Classify the pages * *----------------------------------------------------------------------*/ /*! * \brief jbAddPages() * * \param[in] jbclasser * \param[in] safiles of page image file names * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) jbclasser makes a copy of the array of file names.
 *      (2) The caller is still responsible for destroying the input array.
 * 
*/ l_ok jbAddPages(JBCLASSER *classer, SARRAY *safiles) { l_int32 i, nfiles; char *fname; PIX *pix; if (!classer) return ERROR_INT("classer not defined", __func__, 1); if (!safiles) return ERROR_INT("safiles not defined", __func__, 1); classer->safiles = sarrayCopy(safiles); nfiles = sarrayGetCount(safiles); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); if ((pix = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", __func__, i); continue; } if (pixGetDepth(pix) != 1) { L_WARNING("image file %d not 1 bpp\n", __func__, i); continue; } jbAddPage(classer, pix); pixDestroy(&pix); } return 0; } /*! * \brief jbAddPage() * * \param[in] jbclasser * \param[in] pixs input page * \return 0 if OK; 1 on error */ l_ok jbAddPage(JBCLASSER *classer, PIX *pixs) { BOXA *boxas; PIXA *pixas; if (!classer) return ERROR_INT("classer not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); classer->w = pixGetWidth(pixs); classer->h = pixGetHeight(pixs); /* Get the appropriate components and their bounding boxes */ if (jbGetComponents(pixs, classer->components, classer->maxwidth, classer->maxheight, &boxas, &pixas)) { return ERROR_INT("components not made", __func__, 1); } jbAddPageComponents(classer, pixs, boxas, pixas); boxaDestroy(&boxas); pixaDestroy(&pixas); return 0; } /*! * \brief jbAddPageComponents() * * \param[in] jbclasser * \param[in] pixs input page * \param[in] boxas b.b. of components for this page * \param[in] pixas components for this page * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If there are no components on the page, we don't require input
 *          of empty boxas or pixas, although that's the typical situation.
 * 
*/ l_ok jbAddPageComponents(JBCLASSER *classer, PIX *pixs, BOXA *boxas, PIXA *pixas) { l_int32 n; if (!classer) return ERROR_INT("classer not defined", __func__, 1); if (!pixs) return ERROR_INT("pix not defined", __func__, 1); /* Test for no components on the current page. Always update the * number of pages processed, even if nothing is on it. */ if (!boxas || !pixas || (boxaGetCount(boxas) == 0)) { classer->npages++; return 0; } /* Get classes. For hausdorff, it uses a specified size of * structuring element and specified rank. For correlation, * it uses a specified threshold. */ if (classer->method == JB_RANKHAUS) { if (jbClassifyRankHaus(classer, boxas, pixas)) return ERROR_INT("rankhaus classification failed", __func__, 1); } else { /* classer->method == JB_CORRELATION */ if (jbClassifyCorrelation(classer, boxas, pixas)) return ERROR_INT("correlation classification failed", __func__, 1); } /* Find the global UL corners, adjusted for each instance so * that the class template and instance will have their * centroids in the same place. Then the template can be * used to replace the instance. */ if (jbGetULCorners(classer, pixs, boxas)) return ERROR_INT("UL corners not found", __func__, 1); /* Update total component counts and number of pages processed. */ n = boxaGetCount(boxas); classer->baseindex += n; numaAddNumber(classer->nacomps, n); classer->npages++; return 0; } /*----------------------------------------------------------------------* * Classification using windowed rank hausdorff metric * *----------------------------------------------------------------------*/ /*! * \brief jbClassifyRankHaus() * * \param[in] jbclasser * \param[in] boxa new components for classification * \param[in] pixas new components for classification * \return 0 if OK; 1 on error */ l_ok jbClassifyRankHaus(JBCLASSER *classer, BOXA *boxa, PIXA *pixas) { l_int32 n, nt, i, wt, ht, iclass, size, found, testval; l_int32 npages, area1, area3; l_int32 *tab8; l_float32 rank, x1, y1, x2, y2; BOX *box; NUMA *naclass, *napage; NUMA *nafg; /* fg area of all instances */ NUMA *nafgt; /* fg area of all templates */ JBFINDCTX *findcontext; L_DNAHASH *dahash; PIX *pix, *pix1, *pix2, *pix3, *pix4; PIXA *pixa, *pixa1, *pixa2, *pixat, *pixatd; PIXAA *pixaa; PTA *pta, *ptac, *ptact; SEL *sel; if (!classer) return ERROR_INT("classer not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (!pixas) return ERROR_INT("pixas not defined", __func__, 1); if ((n = pixaGetCount(pixas)) == 0) return ERROR_INT("pixas is empty", __func__, 1); if ((nafg = pixaCountPixels(pixas)) == NULL) /* areas for this page */ return ERROR_INT("fg counting failed", __func__, 1); npages = classer->npages; size = classer->sizehaus; sel = selCreateBrick(size, size, size / 2, size / 2, SEL_HIT); /* Generate the bordered pixa, with and without dilation. * pixa1 and pixa2 contain all the input components. */ pixa1 = pixaCreate(n); pixa2 = pixaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); pix2 = pixDilate(NULL, pix1, sel); pixaAddPix(pixa1, pix1, L_INSERT); /* un-dilated */ pixaAddPix(pixa2, pix2, L_INSERT); /* dilated */ pixDestroy(&pix); } /* Get the centroids of all the bordered images. * These are relative to the UL corner of each (bordered) pix. */ pta = pixaCentroids(pixa1); /* centroids for this page; use here */ ptac = classer->ptac; /* holds centroids of components up to this page */ ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ ptact = classer->ptact; /* holds centroids of templates */ /* Use these to save the class and page of each component. */ naclass = classer->naclass; napage = classer->napage; /* Store the unbordered pix in a pixaa, in a hierarchical * set of arrays. There is one pixa for each class, * and the pix in each pixa are all the instances found * of that class. This is actually more than one would need * for a jbig2 encoder, but there are two reasons to keep * them around: (1) the set of instances for each class * can be used to make an improved binary (or, better, * a grayscale) template, rather than simply using the first * one in the set; (2) we can investigate the failures * of the classifier. This pixaa grows as we process * successive pages. */ pixaa = classer->pixaa; /* arrays to store class exemplars (templates) */ pixat = classer->pixat; /* un-dilated */ pixatd = classer->pixatd; /* dilated */ /* Fill up the pixaa tree with the template exemplars as * the first pix in each pixa. As we add each pix, * we also add the associated box to the pixa. * We also keep track of the centroid of each pix, * and use the difference between centroids (of the * pix with the exemplar we are checking it with) * to align the two when checking that the Hausdorff * distance does not exceed a threshold. * The threshold is set by the Sel used for dilating. * For example, a 3x3 brick, sel_3, corresponds to a * Hausdorff distance of 1. In general, for an NxN brick, * with N odd, corresponds to a Hausdorff distance of (N - 1)/2. * It turns out that we actually need to use a sel of size 2x2 * to avoid small bad components when there is a halftone image * from which components can be chosen. * The larger the Sel you use, the fewer the number of classes, * and the greater the likelihood of putting semantically * different objects in the same class. For simplicity, * we do this separately for the case of rank == 1.0 (exact * match within the Hausdorff distance) and rank < 1.0. */ rank = classer->rankhaus; dahash = classer->dahash; if (rank == 1.0) { for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); pix2 = pixaGetPix(pixa2, i, L_CLONE); ptaGetPt(pta, i, &x1, &y1); nt = pixaGetCount(pixat); /* number of templates */ found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Find score for this template */ pix3 = pixaGetPix(pixat, iclass, L_CLONE); pix4 = pixaGetPix(pixatd, iclass, L_CLONE); ptaGetPt(ptact, iclass, &x2, &y2); testval = pixHaustest(pix1, pix2, pix3, pix4, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT); pixDestroy(&pix3); pixDestroy(&pix4); if (testval == 1) { found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ pixaAddPix(pixatd, pix2, L_INSERT); /* bordered dil template */ } else { /* don't save them */ pixDestroy(&pix1); pixDestroy(&pix2); } } } else { /* rank < 1.0 */ nafgt = classer->nafgt; tab8 = makePixelSumTab8(); for (i = 0; i < n; i++) { /* all instances on this page */ pix1 = pixaGetPix(pixa1, i, L_CLONE); numaGetIValue(nafg, i, &area1); pix2 = pixaGetPix(pixa2, i, L_CLONE); ptaGetPt(pta, i, &x1, &y1); /* use pta for this page */ nt = pixaGetCount(pixat); /* number of templates */ found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Find score for this template */ pix3 = pixaGetPix(pixat, iclass, L_CLONE); numaGetIValue(nafgt, iclass, &area3); pix4 = pixaGetPix(pixatd, iclass, L_CLONE); ptaGetPt(ptact, iclass, &x2, &y2); testval = pixRankHaustest(pix1, pix2, pix3, pix4, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, area1, area3, rank, tab8); pixDestroy(&pix3); pixDestroy(&pix4); if (testval == 1) { /* greedy match; take the first */ found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ pixaAddPix(pixatd, pix2, L_INSERT); /* ditto */ numaAddNumber(nafgt, area1); } else { /* don't save them */ pixDestroy(&pix1); pixDestroy(&pix2); } } LEPT_FREE(tab8); } classer->nclass = pixaGetCount(pixat); numaDestroy(&nafg); ptaDestroy(&pta); pixaDestroy(&pixa1); pixaDestroy(&pixa2); selDestroy(&sel); return 0; } /*! * \brief pixHaustest() * * \param[in] pix1 new pix, not dilated * \param[in] pix2 new pix, dilated * \param[in] pix3 exemplar pix, not dilated * \param[in] pix4 exemplar pix, dilated * \param[in] delx x comp of centroid difference * \param[in] dely y comp of centroid difference * \param[in] maxdiffw max width difference of pix1 and pix2 * \param[in] maxdiffh max height difference of pix1 and pix2 * \return 0 FALSE) if no match, 1 (TRUE if the new * pix is in the same class as the exemplar. * *
 * Notes:
 *  We check first that the two pix are roughly
 *  the same size.  Only if they meet that criterion do
 *  we compare the bitmaps.  The Hausdorff is a 2-way
 *  check.  The centroid difference is used to align the two
 *  images to the nearest integer for each of the checks.
 *  These check that the dilated image of one contains
 *  ALL the pixels of the undilated image of the other.
 *  Checks are done in both direction.  A single pixel not
 *  contained in either direction results in failure of the test.
 * 
*/ l_int32 pixHaustest(PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; PIX *pixt; /* Eliminate possible matches based on size difference */ wi = pixGetWidth(pix1); hi = pixGetHeight(pix1); wt = pixGetWidth(pix3); ht = pixGetHeight(pix3); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Round difference in centroid location to nearest integer; * use this as a shift when doing the matching. */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Do 1-direction hausdorff, checking that every pixel in pix1 * is within a dilation distance of some pixel in pix3. Namely, * that pix4 entirely covers pix1: * pixt = pixSubtract(NULL, pix1, pix4), including shift * where pixt has no ON pixels. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), pix4, 0, 0); pixZero(pixt, &boolmatch); if (boolmatch == 0) { pixDestroy(&pixt); return FALSE; } /* Do 1-direction hausdorff, checking that every pixel in pix3 * is within a dilation distance of some pixel in pix1. Namely, * that pix2 entirely covers pix3: * pixSubtract(pixt, pix3, pix2), including shift * where pixt has no ON pixels. */ pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); pixZero(pixt, &boolmatch); pixDestroy(&pixt); return boolmatch; } /*! * \brief pixRankHaustest() * * \param[in] pix1 new pix, not dilated * \param[in] pix2 new pix, dilated * \param[in] pix3 exemplar pix, not dilated * \param[in] pix4 exemplar pix, dilated * \param[in] delx x comp of centroid difference * \param[in] dely y comp of centroid difference * \param[in] maxdiffw max width difference of pix1 and pix2 * \param[in] maxdiffh max height difference of pix1 and pix2 * \param[in] area1 fg pixels in pix1 * \param[in] area3 fg pixels in pix3 * \param[in] rank rank value of test, each way * \param[in] tab8 table of pixel sums for byte * \return 0 FALSE) if no match, 1 (TRUE if the new * pix is in the same class as the exemplar. * *
 * Notes:
 *  We check first that the two pix are roughly
 *  the same size.  Only if they meet that criterion do
 *  we compare the bitmaps.  We convert the rank value to
 *  a number of pixels by multiplying the rank fraction by the number
 *  of pixels in the undilated image.  The Hausdorff is a 2-way
 *  check.  The centroid difference is used to align the two
 *  images to the nearest integer for each of the checks.
 *  The rank hausdorff checks that the dilated image of one
 *  contains the rank fraction of the pixels of the undilated
 *  image of the other.   Checks are done in both direction.
 *  Failure of the test in either direction results in failure
 *  of the test.
 * 
*/ l_int32 pixRankHaustest(PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 area1, l_int32 area3, l_float32 rank, l_int32 *tab8) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; l_int32 thresh1, thresh3; PIX *pixt; /* Eliminate possible matches based on size difference */ wi = pixGetWidth(pix1); hi = pixGetHeight(pix1); wt = pixGetWidth(pix3); ht = pixGetHeight(pix3); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Upper bounds in remaining pixels for allowable match */ thresh1 = (l_int32)(area1 * (1. - rank) + 0.5); thresh3 = (l_int32)(area3 * (1. - rank) + 0.5); /* Round difference in centroid location to nearest integer; * use this as a shift when doing the matching. */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Do 1-direction hausdorff, checking that every pixel in pix1 * is within a dilation distance of some pixel in pix3. Namely, * that pix4 entirely covers pix1: * pixt = pixSubtract(NULL, pix1, pix4), including shift * where pixt has no ON pixels. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), pix4, 0, 0); pixThresholdPixelSum(pixt, thresh1, &boolmatch, tab8); if (boolmatch == 1) { /* above thresh1 */ pixDestroy(&pixt); return FALSE; } /* Do 1-direction hausdorff, checking that every pixel in pix3 * is within a dilation distance of some pixel in pix1. Namely, * that pix2 entirely covers pix3: * pixSubtract(pixt, pix3, pix2), including shift * where pixt has no ON pixels. */ pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); pixThresholdPixelSum(pixt, thresh3, &boolmatch, tab8); pixDestroy(&pixt); if (boolmatch == 1) /* above thresh3 */ return FALSE; else return TRUE; } /*----------------------------------------------------------------------* * Classification using windowed correlation score * *----------------------------------------------------------------------*/ /*! * \brief jbClassifyCorrelation() * * \param[in] jbclasser * \param[in] boxa new components for classification * \param[in] pixas new components for classification * \return 0 if OK; 1 on error */ l_ok jbClassifyCorrelation(JBCLASSER *classer, BOXA *boxa, PIXA *pixas) { l_int32 n, nt, i, iclass, wt, ht, found, area, area1, area2, npages, overthreshold; l_int32 *sumtab, *centtab; l_uint32 *row, word; l_float32 x1, y1, x2, y2, xsum, ysum; l_float32 thresh, weight, threshold; BOX *box; NUMA *naclass, *napage; NUMA *nafgt; /* fg area of all templates */ NUMA *naarea; /* w * h area of all templates */ JBFINDCTX *findcontext; L_DNAHASH *dahash; PIX *pix, *pix1, *pix2; PIXA *pixa, *pixa1, *pixat; PIXAA *pixaa; PTA *pta, *ptac, *ptact; l_int32 *pixcts; /* pixel counts of each pixa */ l_int32 **pixrowcts; /* row-by-row pixel counts of each pixa */ l_int32 x, y, rowcount, downcount, wpl; l_uint8 byte; if (!classer) return ERROR_INT("classer not found", __func__, 1); if (!boxa) return ERROR_INT("boxa not found", __func__, 1); if (!pixas) return ERROR_INT("pixas not found", __func__, 1); npages = classer->npages; /* Generate the bordered pixa, which contains all the the * input components. This will not be saved. */ if ((n = pixaGetCount(pixas)) == 0) { L_WARNING("pixas is empty\n", __func__); return 0; } pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); pixaAddPix(pixa1, pix1, L_INSERT); pixDestroy(&pix); } /* Use these to save the class and page of each component. */ naclass = classer->naclass; napage = classer->napage; /* Get the number of fg pixels in each component. */ nafgt = classer->nafgt; /* holds fg areas of the templates */ sumtab = makePixelSumTab8(); pixcts = (l_int32 *)LEPT_CALLOC(n, sizeof(*pixcts)); pixrowcts = (l_int32 **)LEPT_CALLOC(n, sizeof(*pixrowcts)); centtab = makePixelCentroidTab8(); /* Count the "1" pixels in each row of the pix in pixa1; this * allows pixCorrelationScoreThresholded to abort early if a match * is impossible. This loop merges three calculations: the total * number of "1" pixels, the number of "1" pixels in each row, and * the centroid. The centroids are relative to the UL corner of * each (bordered) pix. The pixrowcts[i][y] are the total number * of fg pixels in pixa[i] below row y. */ pta = ptaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); pixrowcts[i] = (l_int32 *)LEPT_CALLOC(pixGetHeight(pix), sizeof(**pixrowcts)); xsum = 0; ysum = 0; wpl = pixGetWpl(pix); row = pixGetData(pix) + (pixGetHeight(pix) - 1) * wpl; downcount = 0; for (y = pixGetHeight(pix) - 1; y >= 0; y--, row -= wpl) { pixrowcts[i][y] = downcount; rowcount = 0; for (x = 0; x < wpl; x++) { word = row[x]; byte = word & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 24) * sumtab[byte]; byte = (word >> 8) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 16) * sumtab[byte]; byte = (word >> 16) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 8) * sumtab[byte]; byte = (word >> 24) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + x * 32 * sumtab[byte]; } downcount += rowcount; ysum += rowcount * y; } pixcts[i] = downcount; if (downcount > 0) { ptaAddPt(pta, xsum / (l_float32)downcount, ysum / (l_float32)downcount); } else { /* no pixels; shouldn't happen */ L_ERROR("downcount == 0 !\n", __func__); ptaAddPt(pta, pixGetWidth(pix) / 2, pixGetHeight(pix) / 2); } pixDestroy(&pix); } ptac = classer->ptac; /* holds centroids of components up to this page */ ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ ptact = classer->ptact; /* holds centroids of templates */ /* Store the unbordered pix in a pixaa, in a hierarchical * set of arrays. There is one pixa for each class, * and the pix in each pixa are all the instances found * of that class. This is actually more than one would need * for a jbig2 encoder, but there are two reasons to keep * them around: (1) the set of instances for each class * can be used to make an improved binary (or, better, * a grayscale) template, rather than simply using the first * one in the set; (2) we can investigate the failures * of the classifier. This pixaa grows as we process * successive pages. */ pixaa = classer->pixaa; /* Array to store class exemplars */ pixat = classer->pixat; /* Fill up the pixaa tree with the template exemplars as * the first pix in each pixa. As we add each pix, * we also add the associated box to the pixa. * We also keep track of the centroid of each pix, * and use the difference between centroids (of the * pix with the exemplar we are checking it with) * to align the two when checking that the correlation * score exceeds a threshold. The correlation score * is given by the square of the area of the AND * between aligned instance and template, divided by * the product of areas of each image. For identical * template and instance, the score is 1.0. * If the threshold is too small, non-equivalent instances * will be placed in the same class; if too large, there will * be an unnecessary division of classes representing the * same character. The weightfactor adds in some of the * difference (1.0 - thresh), depending on the heaviness * of the template (measured as the fraction of fg pixels). */ thresh = classer->thresh; weight = classer->weightfactor; naarea = classer->naarea; dahash = classer->dahash; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); area1 = pixcts[i]; ptaGetPt(pta, i, &x1, &y1); /* centroid for this instance */ nt = pixaGetCount(pixat); found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ( (iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Get the template */ pix2 = pixaGetPix(pixat, iclass, L_CLONE); numaGetIValue(nafgt, iclass, &area2); ptaGetPt(ptact, iclass, &x2, &y2); /* template centroid */ /* Find threshold for this template */ if (weight > 0.0) { numaGetIValue(naarea, iclass, &area); threshold = thresh + (1. - thresh) * weight * area2 / area; } else { threshold = thresh; } /* Find score for this template */ overthreshold = pixCorrelationScoreThresholded(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, pixrowcts[i], threshold); #if DEBUG_CORRELATION_SCORE { l_float32 score, testscore; l_int32 count, testcount; pixCorrelationScore(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, &score); pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, &testscore); count = (l_int32)rint(sqrt(score * area1 * area2)); testcount = (l_int32)rint(sqrt(testscore * area1 * area2)); if ((score >= threshold) != (testscore >= threshold)) { lept_stderr("Correlation score mismatch: " "%d(%g,%d) vs %d(%g,%d) (%g)\n", count, score, score >= threshold, testcount, testscore, testscore >= threshold, score - testscore); } if ((score >= threshold) != overthreshold) { lept_stderr("Mismatch between correlation/threshold " "comparison: %g(%g,%d) >= %g(%g) vs %s\n", score, score*area1*area2, count, threshold, threshold*area1*area2, (overthreshold ? "true" : "false")); } } #endif /* DEBUG_CORRELATION_SCORE */ pixDestroy(&pix2); if (overthreshold) { /* greedy match */ found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { /* We are keeping a record of all components */ pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); numaAddNumber(nafgt, area1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ area = (pixGetWidth(pix1) - 2 * JB_ADDED_PIXELS) * (pixGetHeight(pix1) - 2 * JB_ADDED_PIXELS); numaAddNumber(naarea, area); } else { /* don't save it */ pixDestroy(&pix1); } } classer->nclass = pixaGetCount(pixat); LEPT_FREE(pixcts); LEPT_FREE(centtab); for (i = 0; i < n; i++) { LEPT_FREE(pixrowcts[i]); } LEPT_FREE(pixrowcts); LEPT_FREE(sumtab); ptaDestroy(&pta); pixaDestroy(&pixa1); return 0; } /*----------------------------------------------------------------------* * Determine the image components we start with * *----------------------------------------------------------------------*/ /*! * \brief jbGetComponents() * * \param[in] pixs 1 bpp * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \param[in] maxwidth of saved components; larger are discarded * \param[in] maxheight of saved components; larger are discarded * \param[out] ppboxa b.b. of component items * \param[out] pppixa component items * \return 0 if OK, 1 on error */ l_ok jbGetComponents(PIX *pixs, l_int32 components, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad) { l_int32 empty, res, redfactor; BOXA *boxa; PIX *pix1, *pix2, *pix3; PIXA *pixa, *pixat; if (!pboxad) return ERROR_INT("&boxad not defined", __func__, 1); *pboxad = NULL; if (!ppixad) return ERROR_INT("&pixad not defined", __func__, 1); *ppixad = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("invalid components", __func__, 1); pixZero(pixs, &empty); if (empty) { *pboxad = boxaCreate(0); *ppixad = pixaCreate(0); return 0; } /* If required, preprocess input pixs. The method for both * characters and words is to generate a connected component * mask over the units that we want to aggregrate, which are, * in general, sets of related connected components in pixs. * For characters, we want to include the dots with * 'i', 'j' and '!', so we do a small vertical closing to * generate the mask. For words, we make a mask over all * characters in each word. This is a bit more tricky, because * the spacing between words is difficult to predict a priori, * and words can be typeset with variable spacing that can * in some cases be barely larger than the space between * characters. The first step is to generate the mask and * identify each of its connected components. */ if (components == JB_CONN_COMPS) { /* no preprocessing */ boxa = pixConnComp(pixs, &pixa, 8); } else if (components == JB_CHARACTERS) { pix1 = pixMorphSequence(pixs, "c1.6", 0); boxa = pixConnComp(pix1, &pixat, 8); pixa = pixaClipToPix(pixat, pixs); pixDestroy(&pix1); pixaDestroy(&pixat); } else { /* components == JB_WORDS */ /* Do the operations at about 150 ppi resolution. * It is much faster at 75 ppi, but the results are * more accurate at 150 ppi. This will segment the * words in body text. It can be expected that relatively * infrequent words in a larger font will be split. */ res = pixGetXRes(pixs); if (res <= 200) { redfactor = 1; pix1 = pixClone(pixs); } else if (res <= 400) { redfactor = 2; pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); } else { redfactor = 4; pix1 = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); } /* Estimate the word mask, at approximately 150 ppi. * This has both very large and very small components left in. */ pixWordMaskByDilation(pix1, &pix2, NULL, NULL); /* Expand the optimally dilated word mask to full res. */ pix3 = pixExpandReplicate(pix2, redfactor); /* Pull out the pixels in pixs corresponding to the mask * components in pix3. Note that above we used threshold * levels in the reduction of 1 to insure that the resulting * mask fully covers the input pixs. The downside of using * a threshold of 1 is that very close characters from adjacent * lines can be joined. But with a level of 2 or greater, * it is necessary to use a seedfill, followed by a pixOr(): * pixt4 = pixSeedfillBinary(NULL, pix3, pixs, 8); * pixOr(pix3, pix3, pixt4); * to insure that the mask coverage is complete over pixs. */ boxa = pixConnComp(pix3, &pixat, 4); pixa = pixaClipToPix(pixat, pixs); pixaDestroy(&pixat); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } /* Remove large components, and save the results. */ *ppixad = pixaSelectBySize(pixa, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); *pboxad = boxaSelectBySize(boxa, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); pixaDestroy(&pixa); boxaDestroy(&boxa); return 0; } /*! * \brief pixWordMaskByDilation() * * \param[in] pixs 1 bpp; typ. at 75 to 150 ppi * \param[out] pmask [optional] dilated word mask * \param[out] psize [optional] size of good horizontal dilation * \param[out] pixadb [optional] debug: pixa of intermediate steps * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This gives an estimate of the word masks.  See
 *          pixWordBoxesByDilation() for further filtering of the word boxes.
 *      (2) The resolution should be between 75 and 150 ppi, and the optimal
 *          dilation will be between 3 and 10.
 *      (3) A good size for dilating to get word masks is optionally returned.
 *      (4) Typically, the number of c.c. reduced with each successive
 *          dilation (stored in nadiff) decreases quickly to a minimum
 *          (where the characters in a word are joined), and then
 *          increases again as the smaller number of words are joined.
 *          For the typical case, you can then look for this minimum
 *          and dilate to get the word mask.  However, there are many
 *          cases where the function is not so simple. For example, if the
 *          pix has been upscaled 2x, the nadiff function oscillates, with
 *          every other value being zero!  And for some images it tails
 *          off without a clear minimum to indicate where to break.
 *          So a more simple and robust method is to find the dilation
 *          where the initial number of c.c. has been reduced by some
 *          fraction (we use a 70% reduction).
 * 
*/ l_ok pixWordMaskByDilation(PIX *pixs, PIX **ppixm, l_int32 *psize, PIXA *pixadb) { l_int32 i, n, ndil, maxdiff, diff, ibest; l_int32 check, count, total, xres; l_int32 ncc[13]; /* max dilation + 1 */ l_int32 *diffa; BOXA *boxa; NUMA *nacc, *nadiff; PIX *pix1, *pix2; if (ppixm) *ppixm = NULL; if (psize) *psize = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (!ppixm && !psize) return ERROR_INT("no output requested", __func__, 1); /* Find a good dilation to create the word mask, by successively * increasing dilation size and counting the connected components. */ pix1 = pixCopy(NULL, pixs); ndil = 12; /* appropriate for 75 to 150 ppi */ nacc = numaCreate(ndil + 1); nadiff = numaCreate(ndil + 1); for (i = 0; i <= ndil; i++) { if (i == 0) /* first one not dilated */ pix2 = pixCopy(NULL, pix1); else /* successive dilation by sel_2h */ pix2 = pixMorphSequence(pix1, "d2.1", 0); boxa = pixConnCompBB(pix2, 4); ncc[i] = boxaGetCount(boxa); numaAddNumber(nacc, ncc[i]); if (i == 0) total = ncc[0]; if (i > 0) { diff = ncc[i - 1] - ncc[i]; numaAddNumber(nadiff, diff); } pixDestroy(&pix1); pix1 = pix2; boxaDestroy(&boxa); } pixDestroy(&pix1); /* Find the dilation at which the c.c. count has reduced * to 30% of the initial value. Although 30% seems high, * it seems better to use this but add one to ibest. */ diffa = numaGetIArray(nadiff); n = numaGetCount(nadiff); maxdiff = 0; check = TRUE; ibest = 2; for (i = 1; i < n; i++) { numaGetIValue(nacc, i, &count); if (check && count < 0.3 * total) { ibest = i + 1; check = FALSE; } diff = diffa[i]; if (diff > maxdiff) maxdiff = diff; } LEPT_FREE(diffa); /* Add small compensation for higher resolution */ xres = pixGetXRes(pixs); if (xres == 0) xres = 150; if (xres > 110) ibest++; if (ibest < 2) { L_INFO("setting ibest to minimum allowed value of 2\n", __func__); ibest = 2; } if (pixadb) { lept_mkdir("lept/jb"); {NUMA *naseq; PIX *pix3, *pix4; L_INFO("Best dilation: %d\n", __func__, L_MAX(3, ibest + 1)); naseq = numaMakeSequence(1, 1, numaGetCount(nacc)); pix3 = gplotGeneralPix2(naseq, nacc, GPLOT_LINES, "/tmp/lept/jb/numcc", "Number of cc vs. horizontal dilation", "Sel horiz", "Number of cc"); pixaAddPix(pixadb, pix3, L_INSERT); numaDestroy(&naseq); naseq = numaMakeSequence(1, 1, numaGetCount(nadiff)); pix3 = gplotGeneralPix2(naseq, nadiff, GPLOT_LINES, "/tmp/lept/jb/diffcc", "Diff count of cc vs. horizontal dilation", "Sel horiz", "Diff in cc"); pixaAddPix(pixadb, pix3, L_INSERT); numaDestroy(&naseq); pix3 = pixCloseBrick(NULL, pixs, ibest + 1, 1); pix4 = pixScaleToSize(pix3, 600, 0); pixaAddPix(pixadb, pix4, L_INSERT); pixDestroy(&pix3); } } if (psize) *psize = ibest + 1; if (ppixm) *ppixm = pixCloseBrick(NULL, pixs, ibest + 1, 1); numaDestroy(&nacc); numaDestroy(&nadiff); return 0; } /*! * \brief pixWordBoxesByDilation() * * \param[in] pixs 1 bpp; typ. 75 - 200 ppi * \param[in] minwidth saved components; smaller are discarded * \param[in] minheight saved components; smaller are discarded * \param[in] maxwidth saved components; larger are discarded * \param[in] maxheight saved components; larger are discarded * \param[out] pboxa of dilated word mask * \param[out] psize [optional] size of good horizontal dilation * \param[out] pixadb [optional] debug: pixa of intermediate steps * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Returns a pruned set of word boxes.
 *      (2) See pixWordMaskByDilation().
 * 
*/ l_ok pixWordBoxesByDilation(PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxa, l_int32 *psize, PIXA *pixadb) { BOXA *boxa1, *boxa2; PIX *pix1, *pix2; if (psize) *psize = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (!pboxa) return ERROR_INT("&boxa not defined", __func__, 1); *pboxa = NULL; /* Make a first estimate of the word mask */ if (pixWordMaskByDilation(pixs, &pix1, psize, pixadb)) return ERROR_INT("pixWordMaskByDilation() failed", __func__, 1); /* Prune the word mask. Get the bounding boxes of the words. * Remove the small ones, which can be due to punctuation * that was not joined to a word. Also remove the large ones, * which are not likely to be words. */ boxa1 = pixConnComp(pix1, NULL, 8); boxa2 = boxaSelectBySize(boxa1, minwidth, minheight, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); *pboxa = boxaSelectBySize(boxa2, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); if (pixadb) { pix2 = pixUnpackBinary(pixs, 32, 1); pixRenderBoxaArb(pix2, boxa1, 2, 255, 0, 0); pixaAddPix(pixadb, pix2, L_INSERT); pix2 = pixUnpackBinary(pixs, 32, 1); pixRenderBoxaArb(pix2, boxa2, 2, 0, 255, 0); pixaAddPix(pixadb, pix2, L_INSERT); } boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix1); return 0; } /*----------------------------------------------------------------------* * Build grayscale composites (templates) * *----------------------------------------------------------------------*/ /*! * \brief jbAccumulateComposites() * * \param[in] pixaa one pixa for each class * \param[out] ppna number of samples used to build each composite * \param[out] pptat centroids of bordered composites * \return pixad accumulated sum of samples in each class, or NULL on error * */ PIXA * jbAccumulateComposites(PIXAA *pixaa, NUMA **pna, PTA **pptat) { l_int32 n, nt, i, j, d, minw, maxw, minh, maxh, xdiff, ydiff; l_float32 x, y, xave, yave; NUMA *na; PIX *pix, *pixt1, *pixt2, *pixsum; PIXA *pixa, *pixad; PTA *ptat, *pta; if (!pptat) return (PIXA *)ERROR_PTR("&ptat not defined", __func__, NULL); *pptat = NULL; if (!pna) return (PIXA *)ERROR_PTR("&na not defined", __func__, NULL); *pna = NULL; if (!pixaa) return (PIXA *)ERROR_PTR("pixaa not defined", __func__, NULL); n = pixaaGetCount(pixaa, NULL); if ((ptat = ptaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("ptat not made", __func__, NULL); *pptat = ptat; pixad = pixaCreate(n); na = numaCreate(n); *pna = na; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(pixaa, i, L_CLONE); nt = pixaGetCount(pixa); numaAddNumber(na, nt); if (nt == 0) { L_WARNING("empty pixa found!\n", __func__); pixaDestroy(&pixa); continue; } pixaSizeRange(pixa, &minw, &minh, &maxw, &maxh); pix = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix); pixDestroy(&pix); pixt1 = pixCreate(maxw, maxh, d); pixsum = pixInitAccumulate(maxw, maxh, 0); pta = pixaCentroids(pixa); /* Find the average value of the centroids ... */ xave = yave = 0; for (j = 0; j < nt; j++) { ptaGetPt(pta, j, &x, &y); xave += x; yave += y; } xave = xave / (l_float32)nt; yave = yave / (l_float32)nt; /* and place all centroids at their average value */ for (j = 0; j < nt; j++) { pixt2 = pixaGetPix(pixa, j, L_CLONE); ptaGetPt(pta, j, &x, &y); xdiff = (l_int32)(x - xave); ydiff = (l_int32)(y - yave); pixClearAll(pixt1); pixRasterop(pixt1, xdiff, ydiff, maxw, maxh, PIX_SRC, pixt2, 0, 0); pixAccumulate(pixsum, pixt1, L_ARITH_ADD); pixDestroy(&pixt2); } pixaAddPix(pixad, pixsum, L_INSERT); ptaAddPt(ptat, xave, yave); pixaDestroy(&pixa); pixDestroy(&pixt1); ptaDestroy(&pta); } return pixad; } /*! * \brief jbTemplatesFromComposites() * * \param[in] pixac one pix of composites for each class * \param[in] na number of samples used for each class composite * \return pixad 8 bpp templates for each class, or NULL on error * */ PIXA * jbTemplatesFromComposites(PIXA *pixac, NUMA *na) { l_int32 n, i; l_float32 nt; /* number of samples in the composite; always an integer */ l_float32 factor; PIX *pixsum; /* accumulated composite */ PIX *pixd; PIXA *pixad; if (!pixac) return (PIXA *)ERROR_PTR("pixac not defined", __func__, NULL); if (!na) return (PIXA *)ERROR_PTR("na not defined", __func__, NULL); n = pixaGetCount(pixac); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixsum = pixaGetPix(pixac, i, L_COPY); /* changed internally */ numaGetFValue(na, i, &nt); factor = 255. / nt; pixMultConstAccumulate(pixsum, factor, 0); /* changes pixsum */ pixd = pixFinalAccumulate(pixsum, 0, 8); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixsum); } return pixad; } /*----------------------------------------------------------------------* * jbig2 utility routines * *----------------------------------------------------------------------*/ /*! * \brief jbClasserCreate() * * \param[in] method JB_RANKHAUS, JB_CORRELATION * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS * \return jbclasser, or NULL on error */ JBCLASSER * jbClasserCreate(l_int32 method, l_int32 components) { JBCLASSER *classer; if (method != JB_RANKHAUS && method != JB_CORRELATION) return (JBCLASSER *)ERROR_PTR("invalid method", __func__, NULL); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid component", __func__, NULL); classer = (JBCLASSER *)LEPT_CALLOC(1, sizeof(JBCLASSER)); classer->method = method; classer->components = components; classer->nacomps = numaCreate(0); classer->pixaa = pixaaCreate(0); classer->pixat = pixaCreate(0); classer->pixatd = pixaCreate(0); classer->nafgt = numaCreate(0); classer->naarea = numaCreate(0); classer->ptac = ptaCreate(0); classer->ptact = ptaCreate(0); classer->naclass = numaCreate(0); classer->napage = numaCreate(0); classer->ptaul = ptaCreate(0); return classer; } /* * \brief jbClasserDestroy() * * \param[in,out] pclasser will be set to null before returning * \return void */ void jbClasserDestroy(JBCLASSER **pclasser) { JBCLASSER *classer; if (!pclasser) return; if ((classer = *pclasser) == NULL) return; sarrayDestroy(&classer->safiles); numaDestroy(&classer->nacomps); pixaaDestroy(&classer->pixaa); pixaDestroy(&classer->pixat); pixaDestroy(&classer->pixatd); l_dnaHashDestroy(&classer->dahash); numaDestroy(&classer->nafgt); numaDestroy(&classer->naarea); ptaDestroy(&classer->ptac); ptaDestroy(&classer->ptact); numaDestroy(&classer->naclass); numaDestroy(&classer->napage); ptaDestroy(&classer->ptaul); ptaDestroy(&classer->ptall); LEPT_FREE(classer); *pclasser = NULL; } /*! * \brief jbDataSave() * * \param[in] jbclasser * \param[in] latticew cell width used to store each connected * component in the composite * \param[in] latticeh ditto for cell height * \return jbdata, or NULL on error * *
 * Notes:
 *      (1) This routine stores the jbig2-type data required for
 *          generating a lossy jbig2 version of the image.
 *          It can be losslessly written to (and read from) two files.
 *      (2) It generates and stores the mosaic of templates.
 *      (3) It clones the Numa and Pta arrays, so these must all
 *          be destroyed by the caller.
 *      (4) Input 0 to use the default values for latticew and/or latticeh,
 * 
*/ JBDATA * jbDataSave(JBCLASSER *classer) { l_int32 maxw, maxh; JBDATA *data; PIX *pix; if (!classer) return (JBDATA *)ERROR_PTR("classer not defined", __func__, NULL); /* Write the templates into an array. */ pixaSizeRange(classer->pixat, NULL, NULL, &maxw, &maxh); pix = pixaDisplayOnLattice(classer->pixat, maxw + 1, maxh + 1, NULL, NULL); if (!pix) return (JBDATA *)ERROR_PTR("data not made", __func__, NULL); data = (JBDATA *)LEPT_CALLOC(1, sizeof(JBDATA)); data->pix = pix; data->npages = classer->npages; data->w = classer->w; data->h = classer->h; data->nclass = classer->nclass; data->latticew = maxw + 1; data->latticeh = maxh + 1; data->naclass = numaClone(classer->naclass); data->napage = numaClone(classer->napage); data->ptaul = ptaClone(classer->ptaul); return data; } /* * \brief jbDataDestroy() * * \param[in,out] pdata will be set to null before returning * \return void */ void jbDataDestroy(JBDATA **pdata) { JBDATA *data; if (!pdata) return; if ((data = *pdata) == NULL) return; pixDestroy(&data->pix); numaDestroy(&data->naclass); numaDestroy(&data->napage); ptaDestroy(&data->ptaul); LEPT_FREE(data); *pdata = NULL; } /*! * \brief jbDataWrite() * * \param[in] rootname for output files; everything but the extension * \param[in] jbdata * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serialization function that writes data in jbdata to file.
 * 
*/ l_ok jbDataWrite(const char *rootout, JBDATA *jbdata) { char buf[L_BUF_SIZE]; l_int32 w, h, nclass, npages, cellw, cellh, ncomp, i, x, y, iclass, ipage; NUMA *naclass, *napage; PTA *ptaul; PIX *pixt; FILE *fp; if (!rootout) return ERROR_INT("no rootout", __func__, 1); if (!jbdata) return ERROR_INT("no jbdata", __func__, 1); npages = jbdata->npages; w = jbdata->w; h = jbdata->h; pixt = jbdata->pix; nclass = jbdata->nclass; cellw = jbdata->latticew; cellh = jbdata->latticeh; naclass = jbdata->naclass; napage = jbdata->napage; ptaul = jbdata->ptaul; snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_TEMPLATE_EXT); pixWrite(buf, pixt, IFF_PNG); snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_DATA_EXT); if ((fp = fopenWriteStream(buf, "wb")) == NULL) return ERROR_INT_1("stream not opened", buf, __func__, 1); ncomp = ptaGetCount(ptaul); fprintf(fp, "jb data file\n"); fprintf(fp, "num pages = %d\n", npages); fprintf(fp, "page size: w = %d, h = %d\n", w, h); fprintf(fp, "num components = %d\n", ncomp); fprintf(fp, "num classes = %d\n", nclass); fprintf(fp, "template lattice size: w = %d, h = %d\n", cellw, cellh); for (i = 0; i < ncomp; i++) { numaGetIValue(napage, i, &ipage); numaGetIValue(naclass, i, &iclass); ptaGetIPt(ptaul, i, &x, &y); fprintf(fp, "%d %d %d %d\n", ipage, iclass, x, y); } fclose(fp); return 0; } /*! * \brief jbDataRead() * * \param[in] rootname for template and data files * \return jbdata, or NULL on error */ JBDATA * jbDataRead(const char *rootname) { char fname[L_BUF_SIZE]; char *linestr; l_uint8 *data; l_int32 nsa, i, w, h, cellw, cellh, x, y, iclass, ipage; l_int32 npages, nclass, ncomp, ninit; size_t size; JBDATA *jbdata; NUMA *naclass, *napage; PIX *pixs; PTA *ptaul; SARRAY *sa; if (!rootname) return (JBDATA *)ERROR_PTR("rootname not defined", __func__, NULL); snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_TEMPLATE_EXT); if ((pixs = pixRead(fname)) == NULL) return (JBDATA *)ERROR_PTR("pix not read", __func__, NULL); snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_DATA_EXT); if ((data = l_binaryRead(fname, &size)) == NULL) { pixDestroy(&pixs); return (JBDATA *)ERROR_PTR("data not read", __func__, NULL); } if ((sa = sarrayCreateLinesFromString((char *)data, 0)) == NULL) { pixDestroy(&pixs); LEPT_FREE(data); return (JBDATA *)ERROR_PTR("sa not made", __func__, NULL); } nsa = sarrayGetCount(sa); /* number of cc + 6 */ linestr = sarrayGetString(sa, 0, L_NOCOPY); if (strcmp(linestr, "jb data file") != 0) { pixDestroy(&pixs); LEPT_FREE(data); sarrayDestroy(&sa); return (JBDATA *)ERROR_PTR("invalid jb data file", __func__, NULL); } linestr = sarrayGetString(sa, 1, L_NOCOPY); sscanf(linestr, "num pages = %d", &npages); linestr = sarrayGetString(sa, 2, L_NOCOPY); sscanf(linestr, "page size: w = %d, h = %d", &w, &h); linestr = sarrayGetString(sa, 3, L_NOCOPY); sscanf(linestr, "num components = %d", &ncomp); linestr = sarrayGetString(sa, 4, L_NOCOPY); sscanf(linestr, "num classes = %d\n", &nclass); linestr = sarrayGetString(sa, 5, L_NOCOPY); sscanf(linestr, "template lattice size: w = %d, h = %d\n", &cellw, &cellh); #if 1 lept_stderr("num pages = %d\n", npages); lept_stderr("page size: w = %d, h = %d\n", w, h); lept_stderr("num components = %d\n", ncomp); lept_stderr("num classes = %d\n", nclass); lept_stderr("template lattice size: w = %d, h = %d\n", cellw, cellh); #endif ninit = ncomp; if (ncomp > 1000000) { /* fuzz protection */ L_WARNING("ncomp > 1M\n", __func__); ninit = 1000000; } naclass = numaCreate(ninit); napage = numaCreate(ninit); ptaul = ptaCreate(ninit); for (i = 6; i < nsa; i++) { linestr = sarrayGetString(sa, i, L_NOCOPY); sscanf(linestr, "%d %d %d %d\n", &ipage, &iclass, &x, &y); numaAddNumber(napage, ipage); numaAddNumber(naclass, iclass); ptaAddPt(ptaul, x, y); } jbdata = (JBDATA *)LEPT_CALLOC(1, sizeof(JBDATA)); jbdata->pix = pixs; jbdata->npages = npages; jbdata->w = w; jbdata->h = h; jbdata->nclass = nclass; jbdata->latticew = cellw; jbdata->latticeh = cellh; jbdata->naclass = naclass; jbdata->napage = napage; jbdata->ptaul = ptaul; LEPT_FREE(data); sarrayDestroy(&sa); return jbdata; } /*! * \brief jbDataRender() * * \param[in] jbdata * \param[in] debugflag if TRUE, writes into 2 bpp pix and adds * component outlines in color * \return pixa reconstruction of original images, using templates or * NULL on error */ PIXA * jbDataRender(JBDATA *data, l_int32 debugflag) { l_int32 i, w, h, cellw, cellh, x, y, iclass, ipage; l_int32 npages, nclass, ncomp, wp, hp; BOX *box; BOXA *boxa; BOXAA *baa; NUMA *naclass, *napage; PIX *pixt, *pix1, *pix2, *pixd; PIXA *pixat; /* pixa of templates */ PIXA *pixad; /* pixa of output images */ PIXCMAP *cmap; PTA *ptaul; if (!data) return (PIXA *)ERROR_PTR("data not defined", __func__, NULL); npages = data->npages; w = data->w; h = data->h; pixt = data->pix; nclass = data->nclass; cellw = data->latticew; cellh = data->latticeh; naclass = data->naclass; napage = data->napage; ptaul = data->ptaul; ncomp = numaGetCount(naclass); /* Reconstruct the original set of images from the templates * and the data associated with each component. First, * generate the output pixa as a set of empty pix. For debug, * where the bounding boxes of each component will be displayed * in red, use 2 bpp colormapped output pix. */ if ((pixad = pixaCreate(npages)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); for (i = 0; i < npages; i++) { if (debugflag == FALSE) { pix1 = pixCreate(w, h, 1); } else { pix1 = pixCreate(w, h, 2); cmap = pixcmapCreate(2); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pix1, cmap); } pixaAddPix(pixad, pix1, L_INSERT); } /* Put the class templates into a pixa. */ if ((pixat = pixaCreateFromPix(pixt, nclass, cellw, cellh)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pixat not made", __func__, NULL); } /* Place each component in the right location on its page. * For debug, first generate the boxa of component bounding * boxes for each page, and save the results in a boxaa. * Nota bene. In general we cannot use rasterop on colormap * indices with operations like PIX_SRC | PIX_DST. So we must * do the rasterop of image components first, and then paint * the component bounding boxes later. We can use rasterop * on the 2 bpp pix here because the colormap has only two * index values, 0 and 1, * so doing a bit-or between pixels * only affects the lower-order bit and does not generate * spurious colormap indices. */ if (debugflag == TRUE) { baa = boxaaCreate(npages); boxa = boxaCreate(0); boxaaInitFull(baa, boxa); boxaDestroy(&boxa); } for (i = 0; i < ncomp; i++) { numaGetIValue(napage, i, &ipage); numaGetIValue(naclass, i, &iclass); pix1 = pixaGetPix(pixat, iclass, L_CLONE); /* the template */ wp = pixGetWidth(pix1); hp = pixGetHeight(pix1); ptaGetIPt(ptaul, i, &x, &y); pixd = pixaGetPix(pixad, ipage, L_CLONE); /* the output page */ if (debugflag == FALSE) { pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pix1, 0, 0); } else { pix2 = pixConvert1To2Cmap(pix1); pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pix2, 0, 0); boxa = boxaaGetBoxa(baa, ipage, L_CLONE); box = boxCreate(x, y, wp, hp); boxaAddBox(boxa, box, L_INSERT); boxaDestroy(&boxa); /* clone */ pixDestroy(&pix2); /* clone */ } pixDestroy(&pix1); /* clone */ pixDestroy(&pixd); /* clone */ } /* For debug, for each page image, render the box outlines in red. * This adds a red colormap entry to each page. */ if (debugflag == TRUE) { for (i = 0; i < npages; i++) { pixd = pixaGetPix(pixad, i, L_CLONE); boxa = boxaaGetBoxa(baa, i, L_CLONE); pixRenderBoxaArb(pixd, boxa, 1, 255, 0, 0); pixDestroy(&pixd); /* clone */ boxaDestroy(&boxa); /* clone */ } boxaaDestroy(&baa); } pixaDestroy(&pixat); return pixad; } /*! * \brief jbGetULCorners() * * \param[in] jbclasser * \param[in] pixs full res image * \param[in] boxa of c.c. bounding rectangles for this page * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes the ptaul field, which has the global UL corners,
 *          adjusted for each specific component, so that each component
 *          can be replaced by the template for its class and have the
 *          centroid in the template in the same position as the
 *          centroid of the original connected component.  It is important
 *          that this be done properly to avoid a wavy baseline in the
 *          result.
 *      (2) The array fields ptac and ptact give the centroids of
 *          those components relative to the UL corner of each component.
 *          Here, we compute the difference in each component, round to
 *          nearest integer, and correct the box->x and box->y by
 *          the appropriate integral difference.
 *      (3) The templates and stored instances are all bordered.
 * 
*/ l_ok jbGetULCorners(JBCLASSER *classer, PIX *pixs, BOXA *boxa) { l_int32 i, baseindex, index, n, iclass, idelx, idely, x, y, dx, dy; l_int32 *sumtab; l_float32 x1, x2, y1, y2, delx, dely; BOX *box; NUMA *naclass; PIX *pixt; PTA *ptac, *ptact, *ptaul; if (!classer) return ERROR_INT("classer not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); n = boxaGetCount(boxa); ptaul = classer->ptaul; naclass = classer->naclass; ptac = classer->ptac; ptact = classer->ptact; baseindex = classer->baseindex; /* num components before this page */ sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { index = baseindex + i; ptaGetPt(ptac, index, &x1, &y1); numaGetIValue(naclass, index, &iclass); ptaGetPt(ptact, iclass, &x2, &y2); delx = x2 - x1; dely = y2 - y1; if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) { LEPT_FREE(sumtab); return ERROR_INT("box not found", __func__, 1); } boxGetGeometry(box, &x, &y, NULL, NULL); /* Get final increments dx and dy for best alignment */ pixt = pixaGetPix(classer->pixat, iclass, L_CLONE); finalPositioningForAlignment(pixs, x, y, idelx, idely, pixt, sumtab, &dx, &dy); /* if (i % 20 == 0) lept_stderr("dx = %d, dy = %d\n", dx, dy); */ ptaAddPt(ptaul, x - idelx + dx, y - idely + dy); boxDestroy(&box); pixDestroy(&pixt); } LEPT_FREE(sumtab); return 0; } /*! * \brief jbGetLLCorners() * * \param[in] jbclasser * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes the ptall field, which has the global LL corners,
 *          adjusted for each specific component, so that each component
 *          can be replaced by the template for its class and have the
 *          centroid in the template in the same position as the
 *          centroid of the original connected component. It is important
 *          that this be done properly to avoid a wavy baseline in the result.
 *      (2) It is computed here from the corresponding UL corners, where
 *          the input templates and stored instances are all bordered.
 *          This should be done after all pages have been processed.
 *      (3) For proper substitution, the templates whose LL corners are
 *          placed in these locations must be UN-bordered.
 *          This is available for a realistic jbig2 encoder, which would
 *          (1) encode each template without a border, and (2) encode
 *          the position using the LL corner (rather than the UL
 *          corner) because the difference between y-values
 *          of successive instances is typically close to zero.
 * 
*/ l_ok jbGetLLCorners(JBCLASSER *classer) { l_int32 i, iclass, n, x1, y1, h; NUMA *naclass; PIX *pix; PIXA *pixat; PTA *ptaul, *ptall; if (!classer) return ERROR_INT("classer not defined", __func__, 1); ptaul = classer->ptaul; naclass = classer->naclass; pixat = classer->pixat; ptaDestroy(&classer->ptall); n = ptaGetCount(ptaul); ptall = ptaCreate(n); classer->ptall = ptall; /* If the templates were bordered, we would add h - 1 to the UL * corner y-value. However, because the templates to be used * here have their borders removed, and the borders are * JB_ADDED_PIXELS on each side, we add h - 1 - 2 * JB_ADDED_PIXELS * to the UL corner y-value. */ for (i = 0; i < n; i++) { ptaGetIPt(ptaul, i, &x1, &y1); numaGetIValue(naclass, i, &iclass); pix = pixaGetPix(pixat, iclass, L_CLONE); h = pixGetHeight(pix); ptaAddPt(ptall, x1, y1 + h - 1 - 2 * JB_ADDED_PIXELS); pixDestroy(&pix); } return 0; } /*----------------------------------------------------------------------* * Static helpers * *----------------------------------------------------------------------*/ /* When looking for similar matches we check templates whose size is +/- 2 in * each direction. This involves 25 possible sizes. This array contains the * offsets for each of those positions in a spiral pattern. There are 25 pairs * of numbers in this array: even positions are x values. */ static int two_by_two_walk[50] = { 0, 0, 0, 1, -1, 0, 0, -1, 1, 0, -1, 1, 1, 1, -1, -1, 1, -1, 0, -2, 2, 0, 0, 2, -2, 0, -1, -2, 1, -2, 2, -1, 2, 1, 1, 2, -1, 2, -2, 1, -2, -1, -2, -2, 2, -2, 2, 2, -2, 2}; /*! * \brief findSimilarSizedTemplatesInit() * * \param[in] classer * \param[in] pixs instance to be matched * \return Allocated context to be used with findSimilar* */ static JBFINDCTX * findSimilarSizedTemplatesInit(JBCLASSER *classer, PIX *pixs) { JBFINDCTX *state; state = (JBFINDCTX *)LEPT_CALLOC(1, sizeof(JBFINDCTX)); state->w = pixGetWidth(pixs) - 2 * JB_ADDED_PIXELS; state->h = pixGetHeight(pixs) - 2 * JB_ADDED_PIXELS; state->classer = classer; return state; } static void findSimilarSizedTemplatesDestroy(JBFINDCTX **pstate) { JBFINDCTX *state; if (pstate == NULL) { L_WARNING("ptr address is null\n", __func__); return; } if ((state = *pstate) == NULL) return; l_dnaDestroy(&state->dna); LEPT_FREE(state); *pstate = NULL; return; } /*! * \brief findSimilarSizedTemplatesNext() * * \param[in] state from findSimilarSizedTemplatesInit * \return next template number, or -1 when finished * * We have a dna hash table that maps template area to a list of template * numbers with that area. We wish to find similar sized templates, * so we first look for templates with the same width and height, and * then with width + 1, etc. This walk is guided by the * two_by_two_walk array, above. * * We don't want to have to collect the whole list of templates first, * because we hope to find a well-matching template quickly. So we * keep the context for this walk in an explictit state structure, * and this function acts like a generator. */ static l_int32 findSimilarSizedTemplatesNext(JBFINDCTX *state) { l_int32 desiredh, desiredw, size, templ; PIX *pixt; while(1) { /* Continue the walk over step 'i' */ if (state->i >= 25) { /* all done; didn't find a good match */ return -1; } desiredw = state->w + two_by_two_walk[2 * state->i]; desiredh = state->h + two_by_two_walk[2 * state->i + 1]; if (desiredh < 1 || desiredw < 1) { /* invalid size */ state->i++; continue; } if (!state->dna) { /* We have yet to start walking the array for the step 'i' */ state->dna = l_dnaHashGetDna(state->classer->dahash, (l_uint64)desiredh * desiredw, L_CLONE); if (!state->dna) { /* nothing there */ state->i++; continue; } state->n = 0; /* OK, we got a dna. */ } /* Continue working on this dna */ size = l_dnaGetCount(state->dna); for ( ; state->n < size; ) { templ = (l_int32)(state->dna->array[state->n++] + 0.5); pixt = pixaGetPix(state->classer->pixat, templ, L_CLONE); if (pixGetWidth(pixt) - 2 * JB_ADDED_PIXELS == desiredw && pixGetHeight(pixt) - 2 * JB_ADDED_PIXELS == desiredh) { pixDestroy(&pixt); return templ; } pixDestroy(&pixt); } /* Exhausted the dna (no match found); take another step and * try again. */ state->i++; l_dnaDestroy(&state->dna); continue; } } /*! * \brief finalPositioningForAlignment() * * \param[in] pixs input page image * \param[in] x, y location of UL corner of bb of component in pixs * \param[in] idelx, idely compensation to match centroids of component * and template * \param[in] pixt template, with JB_ADDED_PIXELS of padding * on all sides * \param[in] sumtab for summing fg pixels in an image * \param[in] pdx, pdy return delta on position for best match; each * one is in the set {-1, 0, 1} * \return 0 if OK, 1 on error * */ static l_int32 finalPositioningForAlignment(PIX *pixs, l_int32 x, l_int32 y, l_int32 idelx, l_int32 idely, PIX *pixt, l_int32 *sumtab, l_int32 *pdx, l_int32 *pdy) { l_int32 w, h, i, j, minx, miny, count, mincount; PIX *pixi; /* clipped from source pixs */ PIX *pixr; /* temporary storage */ BOX *box; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixt) return ERROR_INT("pixt not defined", __func__, 1); if (!pdx || !pdy) return ERROR_INT("&dx and &dy not both defined", __func__, 1); if (!sumtab) return ERROR_INT("sumtab not defined", __func__, 1); *pdx = *pdy = 0; /* Use JB_ADDED_PIXELS pixels padding on each side */ pixGetDimensions(pixt, &w, &h, NULL); box = boxCreate(x - idelx - JB_ADDED_PIXELS, y - idely - JB_ADDED_PIXELS, w, h); pixi = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); if (!pixi) return ERROR_INT("pixi not made", __func__, 1); pixr = pixCreate(pixGetWidth(pixi), pixGetHeight(pixi), 1); mincount = 0x7fffffff; for (i = -1; i <= 1; i++) { for (j = -1; j <= 1; j++) { pixCopy(pixr, pixi); pixRasterop(pixr, j, i, w, h, PIX_SRC ^ PIX_DST, pixt, 0, 0); pixCountPixels(pixr, &count, sumtab); if (count < mincount) { minx = j; miny = i; mincount = count; } } } pixDestroy(&pixi); pixDestroy(&pixr); *pdx = minx; *pdy = miny; return 0; } leptonica-1.86.0/src/jbclass.h000066400000000000000000000160171506303110300161420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_JBCLASS_H #define LEPTONICA_JBCLASS_H /*! * \file jbclass.h * * JbClasser * JbData */ /*! *
     * The JbClasser struct holds all the data accumulated during the
     * classification process that can be used for a compressed
     * jbig2-type representation of a set of images.  This is created
     * in an initialization process and added to as the selected components
     * on each successive page are analyzed.
     * 
*/ struct JbClasser { struct Sarray *safiles; /*!< input page image file names */ l_int32 method; /*!< JB_RANKHAUS, JB_CORRELATION */ l_int32 components; /*!< JB_CONN_COMPS, JB_CHARACTERS or */ /*!< JB_WORDS */ l_int32 maxwidth; /*!< max component width allowed */ l_int32 maxheight; /*!< max component height allowed */ l_int32 npages; /*!< number of pages already processed */ l_int32 baseindex; /*!< number components already processed */ /*!< on fully processed pages */ struct Numa *nacomps; /*!< number of components on each page */ l_int32 sizehaus; /*!< size of square struct elem for haus */ l_float32 rankhaus; /*!< rank val of haus match, each way */ l_float32 thresh; /*!< thresh value for correlation score */ l_float32 weightfactor; /*!< corrects thresh value for heaver */ /*!< components; use 0 for no correction */ struct Numa *naarea; /*!< w * h of each template, without */ /*!< extra border pixels */ l_int32 w; /*!< max width of original src images */ l_int32 h; /*!< max height of original src images */ l_int32 nclass; /*!< current number of classes */ l_int32 keep_pixaa; /*!< If zero, pixaa isn't filled */ struct Pixaa *pixaa; /*!< instances for each class; unbordered */ struct Pixa *pixat; /*!< templates for each class; bordered */ /*!< and not dilated */ struct Pixa *pixatd; /*!< templates for each class; bordered */ /*!< and dilated */ struct L_DnaHash *dahash; /*!< Hash table to find templates by size */ struct Numa *nafgt; /*!< fg areas of undilated templates; */ /*!< only used for rank < 1.0 */ struct Pta *ptac; /*!< centroids of all bordered cc */ struct Pta *ptact; /*!< centroids of all bordered template cc */ struct Numa *naclass; /*!< array of class ids for each component */ struct Numa *napage; /*!< array of page nums for each component */ struct Pta *ptaul; /*!< array of UL corners at which the */ /*!< template is to be placed for each */ /*!< component */ struct Pta *ptall; /*!< similar to ptaul, but for LL corners */ }; typedef struct JbClasser JBCLASSER; /*! *
     * The JbData struct holds all the data required for
     * the compressed jbig-type representation of a set of images.
     * The data can be written to file, read back, and used
     * to regenerate an approximate version of the original,
     * which differs in two ways from the original:
     *   (1) It uses a template image for each c.c. instead of the
     *       original instance, for each occurrence on each page.
     *   (2) It discards components with either a height or width larger
     *       than the maximuma, given here by the lattice dimensions
     *       used for storing the templates.
     * 
*/ struct JbData { struct Pix *pix; /*!< template composite for all classes */ l_int32 npages; /*!< number of pages */ l_int32 w; /*!< max width of original page images */ l_int32 h; /*!< max height of original page images */ l_int32 nclass; /*!< number of classes */ l_int32 latticew; /*!< lattice width for template composite */ l_int32 latticeh; /*!< lattice height for template composite */ struct Numa *naclass; /*!< array of class ids for each component */ struct Numa *napage; /*!< array of page nums for each component */ struct Pta *ptaul; /*!< array of UL corners at which the */ /*!< template is to be placed for each */ /*!< component */ }; typedef struct JbData JBDATA; /*! JB Classifier */ enum { JB_RANKHAUS = 0, JB_CORRELATION = 1 }; /*! For jbGetComponents(): type of component to extract from images */ /*! JB Component */ enum { JB_CONN_COMPS = 0, JB_CHARACTERS = 1, JB_WORDS = 2 }; /*! These parameters are used for naming the two files * in which the jbig2-like compressed data is stored. */ #define JB_TEMPLATE_EXT ".templates.png" #define JB_DATA_EXT ".data" #endif /* LEPTONICA_JBCLASS_H */ leptonica-1.86.0/src/jp2kheader.c000066400000000000000000000303411506303110300165270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jp2kheader.c *
 *
 *      Read header
 *          l_int32          readHeaderJp2k()
 *          l_int32          freadHeaderJp2k()
 *          l_int32          readHeaderMemJp2k()
 *          l_int32          fgetJp2kResolution()
 *          l_int32          readResolutionMemJp2k()
 *
 *  Note: these function read image metadata from a jp2k file, without
 *  using any jp2k libraries.
 *
 *  To read and write jp2k data, using the OpenJPEG library
 *  (http://www.openjpeg.org), see jpegio.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_CODEC 0 #endif /* ~NO_CONSOLE_IO */ /* --------------------------------------------*/ #if USE_JP2KHEADER /* defined in environ.h */ /* --------------------------------------------*/ /* a sanity check on the size read from file */ static const l_int32 MAX_JP2K_WIDTH = 100000; static const l_int32 MAX_JP2K_HEIGHT = 100000; /*--------------------------------------------------------------------* * Stream interface * *--------------------------------------------------------------------*/ /*! * \brief readHeaderJp2k() * * \param[in] filename * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] pcodec [optional] L_JP2_CODEC or L_J2K_CODEC * \return 0 if OK, 1 on error */ l_ok readHeaderJp2k(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderJp2k(fp, pw, ph, pbps, pspp, pcodec); fclose(fp); return ret; } /*! * \brief freadHeaderJp2k() * * \param[in] fp file stream opened for read * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] pcodec [optional] L_JP2_CODEC or L_J2K_CODEC * \return 0 if OK, 1 on error */ l_ok freadHeaderJp2k(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { l_uint8 buf[120]; /* usually just need the first 80 bytes */ l_int32 nread, ret; if (!fp) return ERROR_INT("fp not defined", __func__, 1); rewind(fp); nread = fread(buf, 1, sizeof(buf), fp); if (nread != sizeof(buf)) return ERROR_INT("read failure", __func__, 1); ret = readHeaderMemJp2k(buf, sizeof(buf), pw, ph, pbps, pspp, pcodec); rewind(fp); return ret; } /*! * \brief readHeaderMemJp2k() * * \param[in] data * \param[in] size at least 80 * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] pcodec [optional] L_JP2_CODEC or L_J2K_CODEC * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The ISO/IEC reference for jpeg2000 is
 *               http://www.jpeg.org/public/15444-1annexi.pdf
 *          and the file format syntax begins at page 127.
 *      (2) With a image file codec (L_JP2_CODEC), the Image Header Box
 *          begins with 'ihdr' = 0x69686472 in big-endian order.  This
 *          typically, but not always, starts on byte 44, with the
 *          big-endian data fields beginning at byte 48:
 *               h:    4 bytes
 *               w:    4 bytes
 *               spp:  2 bytes
 *               bps:  1 byte   (contains bps - 1)
 *      (3) With a codestream codec (L_J2K_CODEC), the first 4 bytes are
 *          0xff4fff51.  The fields for w and h appear to start on byte 8,
 *          and the fields for spp and bps appear to start on byte 40.
 * 
*/ l_ok readHeaderMemJp2k(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { l_int32 format, val, w, h, bps, spp, loc, found, index, codec; l_uint8 ihdr[4] = {0x69, 0x68, 0x64, 0x72}; /* 'ihdr' */ if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (pcodec) *pcodec = 0; if (!data) return ERROR_INT("data not defined", __func__, 1); if (size < 120) return ERROR_INT("size < 80", __func__, 1); findFileFormatBuffer(data, &format); if (format != IFF_JP2) return ERROR_INT("not jp2 file", __func__, 1); /* Find beginning of the image metadata */ if (!memcmp(data, "\xff\x4f\xff\x51", 4)) { /* codestream */ index = 8; codec = L_J2K_CODEC; } else { /* file data with image header box 'ihdr' */ arrayFindSequence(data, size, ihdr, 4, &loc, &found); if (!found) return ERROR_INT("image parameters not found", __func__, 1); index = loc + 4; codec = L_JP2_CODEC; #if DEBUG_CODEC if (loc != 44) L_INFO("Beginning of ihdr is at byte %d\n", __func__, loc); #endif /* DEBUG_CODEC */ } if (pcodec) *pcodec = codec; if (codec == L_JP2_CODEC) { if (size < index + 4 * 3) return ERROR_INT("header size is too small", __func__, 1); val = *(l_uint32 *)(data + index); h = convertOnLittleEnd32(val); val = *(l_uint32 *)(data + index + 4); w = convertOnLittleEnd32(val); val = *(l_uint16 *)(data + index + 8); spp = convertOnLittleEnd16(val); bps = *(data + index + 10) + 1; } else { /* codec == L_J2K_CODEC */ if (size < index + 4 * 9) return ERROR_INT("header size is too small", __func__, 1); val = *(l_uint32 *)(data + index); w = convertOnLittleEnd32(val); val = *(l_uint32 *)(data + index + 4); h = convertOnLittleEnd32(val); val = *(l_uint16 *)(data + index + 32); spp = convertOnLittleEnd16(val); bps = *(data + index + 34) + 1; } #if DEBUG_CODEC lept_stderr("h = %d, w = %d, codec: %s, spp = %d, bps = %d\n", h, w, (codec == L_JP2_CODEC ? "jp2" : "j2k"), spp, bps); #endif /* DEBUG_CODEC */ if (w < 1 || h < 1) return ERROR_INT("w and h must both be > 0", __func__, 1); if (w > MAX_JP2K_WIDTH || h > MAX_JP2K_HEIGHT) return ERROR_INT("unrealistically large sizes", __func__, 1); if (spp != 1 && spp != 3 && spp != 4) return ERROR_INT("spp must be in 1, 3 or 4", __func__, 1); if (bps != 8 && bps != 16) return ERROR_INT("bps must be 8 or 16", __func__, 1); if (pw) *pw = w; if (ph) *ph = h; if (pspp) *pspp = spp; if (pbps) *pbps = bps; return 0; } /* * \brief fgetJp2kResolution() * * \param[in] fp file stream opened for read * \param[oui] pxres in ppi * \param[oui] pyres in ppi * \return 0 if found, 1 if not found or on error * *
 * Notes:
 *      (1) If the capture resolution field is not set, this is not an error;
 *          the returned resolution values are 0 (designating 'unknown').
 *      (2) Side-effect: this rewinds the stream.
 *      (3) The capture resolution box is optional in the jp2 spec, and
 *          it is usually not written.
 *      (4) The big-endian data fields that follow the 4 bytes of 'resc' are:
 *             ynum:    2 bytes
 *             ydenom:  2 bytes
 *             xnum:    2 bytes
 *             xdenom:  2 bytes
 *             yexp:    1 byte
 *             xexp:    1 byte
 * 
*/ l_int32 fgetJp2kResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { l_uint8 *data; size_t nbytes; l_ok ok; if (!fp) return ERROR_INT("stream not opened", __func__, 1); rewind(fp); data = l_binaryReadStream(fp, &nbytes); rewind(fp); ok = readResolutionMemJp2k(data, nbytes, pxres, pyres); LEPT_FREE(data); return ok; } /*! * \brief readResolutionMemJp2k() * * \param[in] data const; jp2k-encoded * \param[in] nbytes of data * \param[out] pxres [optional] * \param[out] pyres [optional] * \return 0 if OK, 1 on error */ l_ok readResolutionMemJp2k(const l_uint8 *data, size_t nbytes, l_int32 *pxres, l_int32 *pyres) { l_uint8 xexp, yexp; l_uint16 xnum, ynum, xdenom, ydenom; /* these jp2k fields are 2-byte */ l_int32 loc, found; l_uint8 resc[4] = {0x72, 0x65, 0x73, 0x63}; /* 'resc' */ l_float64 xres, yres, maxres; if (pxres) *pxres = 0; if (pyres) *pyres = 0; if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", __func__, 1); /* Search for the start of the first capture resolution box: 'resc' */ arrayFindSequence(data, nbytes, resc, 4, &loc, &found); if (!found) { L_WARNING("image resolution not found\n", __func__); return 1; } if (nbytes < 80 || loc >= nbytes - 13) { L_WARNING("image resolution found without enough space\n", __func__); return 1; } /* Extract the fields and calculate the resolution in pixels/meter. * See section 1.5.3.7.1 of JPEG 2000 ISO/IEC 15444-1 spec. */ ynum = data[loc + 5] << 8 | data[loc + 4]; ynum = convertOnLittleEnd16(ynum); ydenom = data[loc + 7] << 8 | data[loc + 6]; ydenom = convertOnLittleEnd16(ydenom); xnum = data[loc + 9] << 8 | data[loc + 8]; xnum = convertOnLittleEnd16(xnum); xdenom = data[loc + 11] << 8 | data[loc + 10]; xdenom = convertOnLittleEnd16(xdenom); if (ydenom == 0 || xdenom == 0) { L_WARNING("bad data: ydenom or xdenom is 0\n", __func__); return 1; } yexp = data[loc + 12]; xexp = data[loc + 13]; yres = ((l_float64)ynum / (l_float64)ydenom) * pow(10.0, (l_float64)yexp); xres = ((l_float64)xnum / (l_float64)xdenom) * pow(10.0, (l_float64)xexp); /* Convert from pixels/meter to ppi */ yres *= (300.0 / 11811.0); xres *= (300.0 / 11811.0); /* Sanity check for bad data */ maxres = 100000.0; /* ppi */ if (xres > maxres || yres > maxres) { L_WARNING("ridiculously large resolution\n", __func__); } else { *pyres = (l_int32)(yres + 0.5); *pxres = (l_int32)(xres + 0.5); } return 0; } /* --------------------------------------------*/ #endif /* USE_JP2KHEADER */ leptonica-1.86.0/src/jp2kheaderstub.c000066400000000000000000000062001506303110300174220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jp2kheaderstub.c *
 *
 *     Stubs for jp2kheader.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_JP2KHEADER /* defined in environ.h */ /* --------------------------------------------*/ l_ok readHeaderJp2k(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok freadHeaderJp2k(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemJp2k(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pcodec) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetJp2kResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readResolutionMemJp2k(const l_uint8 *data, size_t nbytes, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !USE_JP2KHEADER */ leptonica-1.86.0/src/jp2kio.c000066400000000000000000001171701506303110300157140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jp2kio.c *
 *
 *    Read jp2k from file
 *          PIX                  *pixReadJp2k()  [special top level]
 *          PIX                  *pixReadStreamJp2k()
 *          static PIX           *pixReadMemJp2kCore()
 *
 *    Write jp2k to file
 *          l_int32               pixWriteJp2k()  [special top level]
 *          l_int32               pixWriteStreamJp2k()
 *          static opj_image_t   *pixConvertToOpjImage()
 *
 *    Read/write to memory
 *          PIX                  *pixReadMemJp2k()
 *          l_int32               pixWriteMemJp2k()
 *
 *    Static generator of opj_stream from a memory buffer
 *          static opj_stream_t  *opjCreateMemoryStream()
 *          [and other static helpers]
 *
 *    Static generator of opj_stream fom a file stream
 *          static opj_stream_t  *opjCreateStream()
 *          [and other static helpers]
 *
 *    Based on the OpenJPEG distribution:
 *        http://www.openjpeg.org/
 *    The ISO/IEC reference for jpeg2000 is:
 *        http://www.jpeg.org/public/15444-1annexi.pdf
 *
 *    Compressing to memory and decompressing from memory
 *    ---------------------------------------------------
 *    In previous versions, for systems like Windows that do not have
 *    fmemopen() and open_memstream(), we wrote data to a temp file.
 *    Now thanks to the contribution of Anton Tykhyy, we use the
 *    opj_stream interface directly for operations to and from memory.
 *    The file stream interface for these operations is a wrapper
 *    around the memory interface.
 *
 *    Pdf can accept jp2k compressed strings directly
 *    -----------------------------------------------
 *    Transcoding (with the uncompress/compress cycle) is not required
 *    to wrap images that have already been compressed with jp2k in pdf,
 *    because the pdf format for jp2k includes the full string of the
 *    jp2k compressed images.  This is also true for jpeg compressed
 *    strings.
 *
 *    N.B.
 *    * Reading and writing jp2k are supported here for releases 2.1 and later.
 *    * The openjpeg.h file is installed in an openjpeg-2.X subdirectory.
 *    * In openjpeg-2.X, reading is slow compared to jpeg or webp,
 *      and writing is very slow compared to jpeg or webp.
 *    * Specifying a quality factor for jpeg2000 requires caution.  Unlike
 *      jpeg and webp, which have a sensible scale that goes from 0 (very poor)
 *      to 100 (nearly lossless), kakadu and openjpeg use idiosyncratic and
 *      non-intuitive numbers.  kakadu uses "rate/distortion" numbers in
 *      a narrow range around 50,000; openjpeg (and our write interface)
 *      use SNR.  The visually apparent artifacts introduced by compression
 *      are strongly content-dependent and vary in a highly non-linear
 *      way with SNR.  We take SNR = 34 as default, roughly similar in
 *      quality to jpeg's default standard of 75.  For document images,
 *      SNR = 25 is very poor, whereas SNR = 45 is nearly lossless.  If you
 *      use the latter, you will pay dearly in the size of the compressed file.
 *    * The openjpeg interface was massively changed from 1.X to 2.0.
 *      There were also changes from 2.0 to 2.1.  From 2.0 to 2.1, the
 *      ability to interface to a C file stream was removed permanently.
 *      Leptonica supports both file stream and memory buffer interfaces
 *      for every image I/O library, and it requires the libraries to
 *      support at least one of these.  However, because openjpeg-2.1+ provides
 *      neither, we have brought several static functions over from
 *      openjpeg-2.0 in order to retain the file stream interface.
 *      See, for example, our static function opjCreateStream().
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* --------------------------------------------*/ #if HAVE_LIBJP2K /* defined in environ.h */ /* --------------------------------------------*/ /* Leptonica supports versions 2.1 and later */ #ifdef LIBJP2K_HEADER #include LIBJP2K_HEADER #else #include #endif /*! For in-memory encoding and decoding of JP2K */ typedef struct OpjBuffer { l_uint8 *data; /*!< data in the buffer */ size_t size; /*!< size of buffer */ size_t pos; /*!< position relative to beginning of buffer */ size_t len; /*!< length of valid data in the buffer */ } OpjBuffer; /* Static converter pix --> opj_image. Used for compressing pix, * because the codec works on data stored in their raster format. */ static opj_image_t *pixConvertToOpjImage(PIX *pix); /* Static generator of opj_stream from a memory buffer. */ static opj_stream_t *opjCreateMemoryStream(OpjBuffer *buf, l_int32 is_read); /* Static generator of opj_stream from file stream. * In 2.0.1, this functionality is provided by * opj_stream_create_default_file_stream(), * but it was removed in 2.1.0. Because we must have either * a file stream or a memory interface to the compressed data, * it is necessary to recreate the stream interface here. */ static opj_stream_t *opjCreateStream(FILE *fp, l_int32 is_read); /*---------------------------------------------------------------------* * Callback event handlers * *---------------------------------------------------------------------*/ static void error_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[ERROR] %s", msg); } static void warning_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[WARNING] %s", msg); } static void info_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[INFO] %s", msg); } /*---------------------------------------------------------------------* * Read jp2k from file (special function) * *---------------------------------------------------------------------*/ /*! * \brief pixReadJp2k() * * \param[in] filename * \param[in] reduction scaling factor: 1, 2, 4, 8, 16 * \param[in] box [optional] for extracting a subregion, can be null * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return pix 8 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a special function for reading jp2k files.
 *          The high-level pixReadStream() uses default values:
 *             %reduction = 1
 *             %box = NULL
 *      (2) This decodes at either full resolution or at a reduction by
 *          a power of 2.  The default value %reduction == 1 gives a full
 *          resolution image.  Use %reduction > 1 to get a reduced image.
 *          The actual values of %reduction that can be used on an image
 *          depend on the number of resolution levels chosen when the
 *          image was compressed.  We typically encode using six power-of-2
 *          resolution values: 1, 2, 4, 8, 16 and 32.  Attempting to read
 *          with a value representing a reduction level that was not
 *          stored when the file was written will fail with the message:
 *               "failed to read the header".
 *      (3) Use %box to decode only a part of the image.  The box is defined
 *          at full resolution.  It is reduced internally by %reduction,
 *          and clipping to the right and bottom of the image is automatic.
 *      (4) We presently only handle images with 8 bits/sample (bps).
 *          If the image has 16 bps, the read will fail.
 *      (5) There are 4 possible values of samples/pixel (spp).
 *          The values in brackets give the pixel values in the Pix:
 *           spp = 1  ==>  grayscale           [8 bpp grayscale]
 *           spp = 2  ==>  grayscale + alpha   [32 bpp rgba]
 *           spp = 3  ==>  rgb                 [32 bpp rgb]
 *           spp = 4  ==>  rgba                [32 bpp rgba]
 *      (6) The %hint parameter is reserved for future use.
 * 
*/ PIX * pixReadJp2k(const char *filename, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { FILE *fp; PIX *pix; if (!filename) return (PIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR_1("image file not found", filename, __func__, NULL); pix = pixReadStreamJp2k(fp, reduction, box, hint, debug); fclose(fp); if (!pix) return (PIX *)ERROR_PTR_1("image not returned", filename, __func__, NULL); return pix; } /*! * \brief pixReadStreamJp2k() * * \param[in] fp file stream * \param[in] reduction scaling factor: 1, 2, 4, 8 * \param[in] box [optional] for extracting a subregion, can be null * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return pix 8 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) See pixReadJp2k() for usage.
 * 
*/ PIX * pixReadStreamJp2k(FILE *fp, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { l_uint8 *data; size_t size; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); /* fgetJp2kResolution() would read the whole stream anyway, * so we might as well start off by doing that */ rewind(fp); if ((data = l_binaryReadStream(fp, &size)) == NULL) return (PIX *)ERROR_PTR("data not read", __func__, NULL); pix = pixReadMemJp2k(data, size, reduction, box, hint, debug); LEPT_FREE(data); return pix; } static PIX * pixReadMemJp2kCore(const l_uint8 *bytes, size_t nbytes, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { const char *opjVersion; l_int32 i, j, index, bx, by, bw, bh, val, rval, gval, bval, aval; l_int32 w, h, wpl, bps, spp, xres, yres, reduce, prec, colorspace; l_int32 codec; /* L_J2K_CODEC or L_JP2_CODEC */ l_uint32 pixel; l_uint32 *data, *line; opj_dparameters_t parameters; /* decompression parameters */ opj_image_t *image = NULL; opj_codec_t *l_codec = NULL; /* handle to decompressor */ opj_stream_t *l_stream = NULL; /* opj stream */ PIX *pix = NULL; OpjBuffer buffer; opjVersion = opj_version(); if (!opjVersion || opjVersion[0] == '\0') return (PIX *)ERROR_PTR("opj version not defined", __func__, NULL); if (opjVersion[0] - 0x30 < 2 || (opjVersion[0] == '2' && opjVersion[2] - 0x30 == 0)) { L_ERROR("version is %s; must be 2.1 or higher\n", __func__, opjVersion); return NULL; } /* Get the resolution, bits/sample and codec type */ readResolutionMemJp2k(bytes, nbytes, &xres, &yres); readHeaderMemJp2k(bytes, nbytes, NULL, NULL, &bps, NULL, &codec); if (codec != L_J2K_CODEC && codec != L_JP2_CODEC) { L_ERROR("valid codec not identified\n", __func__); return NULL; } if (bps != 8) { L_ERROR("found %d bps; can only handle 8 bps\n", __func__, bps); return NULL; } /* Set decoding parameters to default values */ opj_set_default_decoder_parameters(¶meters); /* Find and set the reduce parameter, which is log2(reduction). * Valid reductions are powers of 2, and are determined when the * compressed string is made. A request for an invalid reduction * will cause an error in opj_read_header(), and no image will * be returned. */ for (reduce = 0; (1L << reduce) < reduction; reduce++) { } if ((1L << reduce) != reduction) { L_ERROR("invalid reduction %d; not power of 2\n", __func__, reduction); return NULL; } parameters.cp_reduce = reduce; /* Get a decoder handle */ if (codec == L_JP2_CODEC) l_codec = opj_create_decompress(OPJ_CODEC_JP2); else if (codec == L_J2K_CODEC) l_codec = opj_create_decompress(OPJ_CODEC_J2K); if (!l_codec) { L_ERROR("failed to make the codec\n", __func__); return NULL; } /* Catch and report events using callbacks */ if (debug) { opj_set_info_handler(l_codec, info_callback, NULL); opj_set_warning_handler(l_codec, warning_callback, NULL); opj_set_error_handler(l_codec, error_callback, NULL); } /* Setup the decoding parameters using user parameters */ if (!opj_setup_decoder(l_codec, ¶meters)){ L_ERROR("failed to set up decoder\n", __func__); opj_destroy_codec(l_codec); return NULL; } /* Open decompression 'stream'. */ buffer.data = (l_uint8 *)bytes; buffer.size = nbytes; buffer.len = nbytes; buffer.pos = 0; if ((l_stream = opjCreateMemoryStream(&buffer, 1)) == NULL) { L_ERROR("failed to open the stream\n", __func__); opj_destroy_codec(l_codec); return NULL; } /* Read the main header of the codestream and, if necessary, * the JP2 boxes */ if(!opj_read_header(l_stream, l_codec, &image)){ L_ERROR("failed to read the header\n", __func__); opj_stream_destroy(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(image); return NULL; } /* Set up to decode a rectangular region */ if (box) { boxGetGeometry(box, &bx, &by, &bw, &bh); if (!opj_set_decode_area(l_codec, image, bx, by, bx + bw, by + bh)) { L_ERROR("failed to set the region for decoding\n", __func__); opj_stream_destroy(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(image); return NULL; } } /* Get the decoded image */ if (!(opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec, l_stream))) { L_ERROR("failed to decode the image\n", __func__); opj_destroy_codec(l_codec); opj_stream_destroy(l_stream); opj_image_destroy(image); return NULL; } /* Finished with the byte stream and the codec */ opj_stream_destroy(l_stream); opj_destroy_codec(l_codec); /* Get the image parameters */ spp = image->numcomps; w = image->comps[0].w; h = image->comps[0].h; prec = image->comps[0].prec; if (prec != bps) L_WARNING("precision %d != bps %d!\n", __func__, prec, bps); if (debug) { L_INFO("w = %d, h = %d, bps = %d, spp = %d\n", __func__, w, h, bps, spp); colorspace = image->color_space; if (colorspace == OPJ_CLRSPC_SRGB) L_INFO("colorspace is sRGB\n", __func__); else if (colorspace == OPJ_CLRSPC_GRAY) L_INFO("colorspace is grayscale\n", __func__); else if (colorspace == OPJ_CLRSPC_SYCC) L_INFO("colorspace is YUV\n", __func__); } /* Convert the image to a pix */ if (spp == 1) pix = pixCreate(w, h, 8); else pix = pixCreate(w, h, 32); pixSetInputFormat(pix, IFF_JP2); pixSetResolution(pix, xres, yres); data = pixGetData(pix); wpl = pixGetWpl(pix); index = 0; if (spp == 1) { for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = image->comps[0].data[index]; SET_DATA_BYTE(line, j, val); index++; } } } else if (spp == 2) { /* convert to RGBA */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = image->comps[0].data[index]; aval = image->comps[1].data[index]; composeRGBAPixel(val, val, val, aval, &pixel); line[j] = pixel; index++; } } } else if (spp >= 3) { for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { rval = image->comps[0].data[index]; gval = image->comps[1].data[index]; bval = image->comps[2].data[index]; if (spp == 3) { composeRGBPixel(rval, gval, bval, &pixel); } else { /* spp == 4 */ aval = image->comps[3].data[index]; composeRGBAPixel(rval, gval, bval, aval, &pixel); } line[j] = pixel; index++; } } } /* Free the opj image data structure */ opj_image_destroy(image); return pix; } /*---------------------------------------------------------------------* * Write jp2k to file * *---------------------------------------------------------------------*/ /*! * \brief pixWriteJp2k() * * \param[in] filename * \param[in] pix any depth, cmap is OK * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless * \param[in] nlevels resolution levels; 6 or 7; use 0 for default (6) * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The %quality parameter is the SNR.  The useful range is narrow:
 *             SNR < 27  (terrible quality)
 *             SNR = 34  (default; approximately equivalent to jpeg quality 75)
 *             SNR = 40  (very high quality)
 *             SNR = 45  (nearly lossless)
 *          Use 0 for default; 100 for lossless.
 *      (2) The %nlevels parameter is the number of resolution levels
 *          to be written.  Except for very small images, we allow 6 or 7.
 *          For example, with %nlevels == 6, images with reduction factors
 *          of 1, 2, 4, 8, 16 and 32 are encoded, and retrieval is done at
 *          the level requested when reading.  For default, use either 0 or 6.
 *          Small images can constrain %nlevels according to
 *                 2^(%nlevels - 1) <= Min(w, h)
 *          and if necessary %nlevels will be reduced to accommodate.
 *          For example, images with a minimum dimension between 32 and 63
 *          can support %nlevels = 6, with reductions up to 32x.  An image
 *          with a minimum dimension smaller than 32 will not support
 *          6 nlevels (reductions of 1, 2, 4, 8, 16 and 32).
 *      (3) By default, we use the JP2 codec.
 *      (4) The %hint parameter is not yet in use.
 *      (5) For now, we only support 1 "layer" for quality.
 * 
*/ l_ok pixWriteJp2k(const char *filename, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug) { FILE *fp; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (pixWriteStreamJp2k(fp, pix, quality, nlevels, L_JP2_CODEC, hint, debug)) { fclose(fp); return ERROR_INT_1("pix not written to stream", filename, __func__, 1); } fclose(fp); return 0; } /*! * \brief pixWriteOpjStreamJp2k() * * \param[in] l_stream OPJ stream * \param[in] pix any depth, cmap is OK * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless * \param[in] nlevels resolution levels; 6 or 7; use 0 for default (6) * \param[in] codec L_JP2_CODEC or L_J2K_CODEC * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return 0 if OK, 1 on error *
 * Notes:
 *      (1) See pixWriteJp2k() for usage.
 * 
*/ static l_ok pixWriteOpjStreamJp2k(opj_stream_t *l_stream, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 codec, l_int32 hint, l_int32 debug) { l_int32 i, w, h, d, depth, channels, success; l_float64 snr; const char *opjVersion; PIX *pixs; opj_cparameters_t parameters; /* compression parameters */ opj_codec_t* l_codec = NULL;; opj_image_t *image = NULL; if (!l_stream) return ERROR_INT("stream not open", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); snr = (l_float64)quality; if (snr <= 0.0) snr = 34.0; /* default */ if (snr < 27.0) L_WARNING("SNR = %d < 27; very low\n", __func__, (l_int32)snr); if (snr == 100.0) snr = 0.0; /* for lossless */ if (snr > 45.0) { L_WARNING("SNR > 45; using lossless encoding\n", __func__); snr = 0.0; } if (nlevels == 0) nlevels = 6; /* default */ if (nlevels < 6) { L_WARNING("nlevels = %d < 6; setting to 6\n", __func__, nlevels); nlevels = 6; } if (nlevels > 7) { L_WARNING("nlevels = %d > 7; setting to 7\n", __func__, nlevels); nlevels = 7; } if (codec != L_JP2_CODEC && codec != L_J2K_CODEC) return ERROR_INT("valid codec not identified\n", __func__, 1); opjVersion = opj_version(); if (!opjVersion || opjVersion[0] == '\0') return ERROR_INT("opj version not defined", __func__, 1); if (opjVersion[0] - 0x30 < 2 || (opjVersion[0] == '2' && opjVersion[2] - 0x30 == 0)) { L_ERROR("version is %s; must be 2.1 or higher\n", __func__, opjVersion); return 1; } /* Remove colormap if it exists; result is 8 or 32 bpp */ pixGetDimensions(pix, &w, &h, &d); if (d == 24) { pixs = pixConvert24To32(pix); } else if (d == 32) { pixs = pixClone(pix); } else if (pixGetColormap(pix) == NULL) { pixs = pixConvertTo8(pix, 0); } else { /* colormap */ L_INFO("removing colormap; may be better to compress losslessly\n", __func__); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); } depth = pixGetDepth(pixs); /* 8 or 32 */ /* Reduce nlevels if the image has at least one small dimension */ for (i = 1; i < 7; i++) { if ((w < (1 << i)) || (h < (1 << i))) { if (i < nlevels) { L_INFO("small image: w = %d, h = %d; setting nlevels to %d\n", __func__, w, h, i); nlevels = i; } break; } } /* Convert to opj image format. */ pixSetPadBits(pixs, 0); image = pixConvertToOpjImage(pixs); pixDestroy(&pixs); /* Set encoding parameters to default values. * We use one layer with the input SNR. */ opj_set_default_encoder_parameters(¶meters); parameters.cp_fixed_quality = 1; parameters.cp_disto_alloc = 0; parameters.tcp_distoratio[0] = snr; parameters.tcp_numlayers = 1; parameters.numresolution = nlevels; channels = (depth == 32) ? 3 : 1; parameters.tcp_mct = (channels == 3) ? 1 : 0; /* Create comment for codestream */ if (parameters.cp_comment == NULL) { const char comment1[] = "Created by Leptonica, version "; const char comment2[] = "; using OpenJPEG, version "; size_t len1 = strlen(comment1); size_t len2 = strlen(comment2); char *version1 = getLeptonicaVersion(); const char *version2 = opj_version(); len1 += len2 + strlen(version1) + strlen(version2) + 1; parameters.cp_comment = (char *)LEPT_MALLOC(len1); snprintf(parameters.cp_comment, len1, "%s%s%s%s", comment1, version1, comment2, version2); LEPT_FREE(version1); } /* Get the encoder handle */ if (codec == L_JP2_CODEC) l_codec = opj_create_compress(OPJ_CODEC_JP2); else /* codec == L_J2K_CODEC */ l_codec = opj_create_compress(OPJ_CODEC_J2K); if (!l_codec) { opj_image_destroy(image); LEPT_FREE(parameters.cp_comment); return ERROR_INT("failed to get the encoder handle\n", __func__, 1); } /* Catch and report events using callbacks */ if (debug) { opj_set_info_handler(l_codec, info_callback, NULL); opj_set_warning_handler(l_codec, warning_callback, NULL); opj_set_error_handler(l_codec, error_callback, NULL); } /* Set up the encoder */ if (!opj_setup_encoder(l_codec, ¶meters, image)) { opj_destroy_codec(l_codec); opj_image_destroy(image); LEPT_FREE(parameters.cp_comment); return ERROR_INT("failed to set up the encoder\n", __func__, 1); } /* Set the resolution (TBD) */ /* Encode the image into the l_stream data interface */ if (!opj_start_compress(l_codec, image, l_stream)) { opj_destroy_codec(l_codec); opj_image_destroy(image); LEPT_FREE(parameters.cp_comment); return ERROR_INT("opj_start_compress failed\n", __func__, 1); } if (!opj_encode(l_codec, l_stream)) { opj_destroy_codec(l_codec); opj_image_destroy(image); LEPT_FREE(parameters.cp_comment); return ERROR_INT("opj_encode failed\n", __func__, 1); } success = opj_end_compress(l_codec, l_stream); /* Clean up */ opj_destroy_codec(l_codec); opj_image_destroy(image); LEPT_FREE(parameters.cp_comment); if (success) return 0; else return ERROR_INT("opj_end_compress failed\n", __func__, 1); } /*! * \brief pixWriteStreamJp2k() * * \param[in] fp file stream * \param[in] pix any depth, cmap is OK * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless * \param[in] nlevels <= 10 * \param[in] codec L_JP2_CODEC or L_J2K_CODEC * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a wrapper on the memory stream interface.
 *      (2) See pixWriteJp2k() for usage.
 * 
*/ l_ok pixWriteStreamJp2k(FILE *fp, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 codec, l_int32 hint, l_int32 debug) { l_ok ok; opj_stream_t *l_stream; if (!fp) return ERROR_INT("stream not open", __func__, 1); /* Open a compression stream for writing, borrowed from * the 2.0 implementation because the file stream interface * was removed in 2.1. */ rewind(fp); if ((l_stream = opjCreateStream(fp, 0)) == NULL) return ERROR_INT("failed to open l_stream\n", __func__, 1); ok = pixWriteOpjStreamJp2k(l_stream, pix, quality, nlevels, codec, hint, debug); /* Clean up */ opj_stream_destroy(l_stream); return ok; } /*! * \brief pixConvertToOpjImage() * * \param[in] pix 8 or 32 bpp * \return opj_image, or NULL on error * *
 * Notes:
 *      (1) Input pix is 8 bpp grayscale, 32 bpp rgb, or 32 bpp rgba.
 *      (2) Gray + alpha pix are all represented as rgba.
 * 
*/ static opj_image_t * pixConvertToOpjImage(PIX *pix) { l_int32 i, j, k, w, h, d, spp, wpl; OPJ_COLOR_SPACE colorspace; l_int32 *ir = NULL; l_int32 *ig = NULL; l_int32 *ib = NULL; l_int32 *ia = NULL; l_uint32 *line, *data; opj_image_t *image; opj_image_cmptparm_t cmptparm[4]; if (!pix) return (opj_image_t *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 32) { L_ERROR("invalid depth: %d\n", __func__, d); return NULL; } /* Allocate the opj_image. */ spp = pixGetSpp(pix); memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t)); for (i = 0; i < spp; i++) { cmptparm[i].prec = 8; cmptparm[i].sgnd = 0; cmptparm[i].dx = 1; cmptparm[i].dy = 1; cmptparm[i].w = w; cmptparm[i].h = h; } colorspace = (spp == 1) ? OPJ_CLRSPC_GRAY : OPJ_CLRSPC_SRGB; if ((image = opj_image_create(spp, &cmptparm[0], colorspace)) == NULL) return (opj_image_t *)ERROR_PTR("image not made", __func__, NULL); image->x0 = 0; image->y0 = 0; image->x1 = w; image->y1 = h; /* Set the component pointers */ ir = image->comps[0].data; if (spp > 1) { ig = image->comps[1].data; ib = image->comps[2].data; } if(spp == 4) ia = image->comps[3].data; /* Transfer the data from the pix */ data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0, k = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++, k++) { if (spp == 1) { ir[k] = GET_DATA_BYTE(line, j); } else if (spp > 1) { ir[k] = GET_DATA_BYTE(line + j, COLOR_RED); ig[k] = GET_DATA_BYTE(line + j, COLOR_GREEN); ib[k] = GET_DATA_BYTE(line + j, COLOR_BLUE); } if (spp == 4) ia[k] = GET_DATA_BYTE(line + j, L_ALPHA_CHANNEL); } } return image; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ /*! * \brief pixReadMemJp2k() * * \param[in] data const; jpeg-encoded * \param[in] size of data * \param[in] reduction scaling factor: 1, 2, 4, 8 * \param[in] box [optional] for extracting a subregion, can be null * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return pix, or NULL on error * *
 * Notes:
 *      (1) See pixReadJp2k() for usage.
 * 
*/ PIX * pixReadMemJp2k(const l_uint8 *data, size_t size, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { PIX *pix; if (!data) return (PIX *)ERROR_PTR("data not defined", __func__, NULL); pix = pixReadMemJp2kCore(data, size, reduction, box, hint, debug); if (!pix) L_ERROR("pix not read\n", __func__); return pix; } /*! * \brief pixWriteMemJp2k() * * \param[out] pdata data of jpeg compressed image * \param[out] psize size of returned data * \param[in] pix 8 or 32 bpp * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless * \param[in] nlevels 0 for default * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default * \param[in] debug output callback messages, etc * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteJp2k() for usage.  This version writes to
 *          memory instead of to a file stream.
 * 
*/ l_ok pixWriteMemJp2k(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug) { l_ok ok; opj_stream_t *l_stream; OpjBuffer buffer; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); buffer.pos = 0; buffer.len = 0; buffer.size = OPJ_J2K_STREAM_CHUNK_SIZE; buffer.data = (l_uint8 *)LEPT_MALLOC(buffer.size); if (!buffer.data) return ERROR_INT("failed to allocate buffer", __func__, 1 ); if ((l_stream = opjCreateMemoryStream(&buffer, 0)) == NULL) { return ERROR_INT("failed to open l_stream\n", __func__, 1); } ok = pixWriteOpjStreamJp2k(l_stream, pix, quality, nlevels, L_JP2_CODEC, hint, debug); /* Clean up */ opj_stream_destroy(l_stream); if (!ok) { *pdata = buffer.data; *psize = buffer.len; } else { LEPT_FREE(buffer.data); } return ok; } /*---------------------------------------------------------------------* * Static functions for the memory stream interface * *---------------------------------------------------------------------*/ static OPJ_SIZE_T opj_read_from_buffer(void *p_buffer, OPJ_SIZE_T p_nb_bytes, OpjBuffer *pbuf) { if (pbuf->pos > pbuf->len) return (OPJ_SIZE_T) - 1; OPJ_SIZE_T l_nb_read = pbuf->len - pbuf->pos; if (l_nb_read > p_nb_bytes) l_nb_read = p_nb_bytes; memcpy(p_buffer, pbuf->data + pbuf->pos, l_nb_read); pbuf->pos += l_nb_read; return l_nb_read ? l_nb_read : (OPJ_SIZE_T) - 1; } static OPJ_SIZE_T opj_write_from_buffer(const void *p_buffer, OPJ_SIZE_T p_nb_bytes, OpjBuffer *pbuf) { size_t newpos = pbuf->pos + p_nb_bytes; if (newpos > pbuf->size) { size_t oldsize = pbuf->size; size_t newsize = oldsize * 2; if (newsize < newpos) newsize = newpos; if (newsize <= 0) { L_ERROR("buffer too large\n", __func__); return 0; } l_uint8 *newdata = (l_uint8 *)LEPT_REALLOC(pbuf->data, newsize); if (!newdata) { L_ERROR("out of memory\n", __func__); return 0; } /* clear out any garbage left by realloc */ memset(newdata + oldsize, 0, newsize - oldsize); pbuf->data = newdata; pbuf->size = newsize; } memcpy(pbuf->data + pbuf->pos, p_buffer, p_nb_bytes); pbuf->pos = newpos; if (pbuf->len < newpos) pbuf->len = newpos; return p_nb_bytes; } static OPJ_OFF_T opj_skip_from_buffer(OPJ_OFF_T offset, OpjBuffer *pbuf) { pbuf->pos += offset; return offset; } static l_int32 opj_seek_from_buffer(OPJ_OFF_T offset, OpjBuffer *pbuf) { pbuf->pos = offset; return 1; } /*---------------------------------------------------------------------* * Static generator of opj_stream from memory buffer * *---------------------------------------------------------------------*/ static opj_stream_t * opjCreateMemoryStream(OpjBuffer *pbuf, l_int32 is_read_stream) { opj_stream_t *l_stream; if (!pbuf) return (opj_stream_t *)ERROR_PTR("pbuf not defined", __func__, NULL); l_stream = opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, is_read_stream); if (!l_stream) return (opj_stream_t *)ERROR_PTR("stream not made", __func__, NULL); opj_stream_set_user_data(l_stream, pbuf, (opj_stream_free_user_data_fn)NULL); opj_stream_set_user_data_length(l_stream, pbuf->len); opj_stream_set_read_function(l_stream, (opj_stream_read_fn)opj_read_from_buffer); opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn)opj_skip_from_buffer); opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn)opj_seek_from_buffer); if (is_read_stream) return l_stream; opj_stream_set_write_function(l_stream, (opj_stream_write_fn)opj_write_from_buffer); return l_stream; } /*---------------------------------------------------------------------* * Static functions from opj 2.0 to retain file stream interface * *---------------------------------------------------------------------*/ static l_uint64 opj_get_user_data_length(FILE *fp) { OPJ_OFF_T length = 0; fseek(fp, 0, SEEK_END); length = (OPJ_OFF_T)ftell(fp); fseek(fp, 0, SEEK_SET); return (l_uint64)length; } static OPJ_SIZE_T opj_read_from_file(void *p_buffer, OPJ_SIZE_T p_nb_bytes, FILE *fp) { OPJ_SIZE_T l_nb_read = fread(p_buffer, 1, p_nb_bytes, fp); return l_nb_read ? l_nb_read : (OPJ_SIZE_T) - 1; } static OPJ_SIZE_T opj_write_from_file(void *p_buffer, OPJ_SIZE_T p_nb_bytes, FILE *fp) { return fwrite(p_buffer, 1, p_nb_bytes, fp); } static OPJ_OFF_T opj_skip_from_file(OPJ_OFF_T offset, FILE *fp) { if (fseek(fp, offset, SEEK_CUR)) { return -1; } return offset; } static l_int32 opj_seek_from_file(OPJ_OFF_T offset, FILE *fp) { if (fseek(fp, offset, SEEK_SET)) { return 0; } return 1; } /*---------------------------------------------------------------------* * Static generator of opj_stream from a file stream * *---------------------------------------------------------------------*/ static opj_stream_t * opjCreateStream(FILE *fp, l_int32 is_read_stream) { opj_stream_t *l_stream; if (!fp) return (opj_stream_t *)ERROR_PTR("fp not defined", __func__, NULL); l_stream = opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, is_read_stream); if (!l_stream) return (opj_stream_t *)ERROR_PTR("stream not made", __func__, NULL); opj_stream_set_user_data(l_stream, fp, (opj_stream_free_user_data_fn)NULL); opj_stream_set_user_data_length(l_stream, opj_get_user_data_length(fp)); opj_stream_set_read_function(l_stream, (opj_stream_read_fn)opj_read_from_file); opj_stream_set_write_function(l_stream, (opj_stream_write_fn)opj_write_from_file); opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn)opj_skip_from_file); opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn)opj_seek_from_file); return l_stream; } /* --------------------------------------------*/ #endif /* HAVE_LIBJP2K */ /* --------------------------------------------*/ leptonica-1.86.0/src/jp2kiostub.c000066400000000000000000000073001506303110300166030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jp2kiostub.c *
 *
 *     Stubs for jp2kio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !HAVE_LIBJP2K /* defined in environ.h */ /* --------------------------------------------*/ /* ----------------------------------------------------------------------*/ PIX * pixReadJp2k(const char *filename, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadStreamJp2k(FILE *fp, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteJp2k(const char *filename, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamJp2k(FILE *fp, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 codec, l_int32 hint, l_int32 debug) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemJp2k(const l_uint8 *data, size_t size, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemJp2k(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ /* --------------------------------------------*/ #endif /* !HAVE_LIBJP2K */ /* --------------------------------------------*/ leptonica-1.86.0/src/jpegio.c000066400000000000000000001334731506303110300157770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jpegio.c *
 *
 *    Read jpeg from file
 *          PIX             *pixReadJpeg()  [special top level]
 *          PIX             *pixReadStreamJpeg()
 *
 *    Read jpeg metadata from file
 *          l_int32          readHeaderJpeg()
 *          l_int32          freadHeaderJpeg()
 *          l_int32          fgetJpegResolution()
 *          l_int32          fgetJpegComment()
 *
 *    Write jpeg to file
 *          l_int32          pixWriteJpeg()  [special top level]
 *          l_int32          pixWriteStreamJpeg()
 *
 *    Read/write to memory
 *          PIX             *pixReadMemJpeg()
 *          l_int32          readHeaderMemJpeg()
 *          l_int32          readResolutionMemJpeg()
 *          l_int32          pixWriteMemJpeg()
 *
 *    Setting special flag for chroma sampling on write
 *          l_int32          pixSetChromaSampling()
 *
 *    Static system helpers
 *          static void      jpeg_error_catch_all_1()
 *          static void      jpeg_error_catch_all_2()
 *          static l_uint8   jpeg_getc()
 *          static l_int32   jpeg_comment_callback()
 *
 *    Documentation: libjpeg.doc can be found, along with all
 *    source code, at ftp://ftp.uu.net/graphics/jpeg
 *    Download and untar the file:  jpegsrc.v6b.tar.gz
 *    A good paper on jpeg can also be found there: wallace.ps.gz
 *
 *    The functions in libjpeg make it very simple to compress
 *    and decompress images.  On input (decompression from file),
 *    3 component color images can be read into either an 8 bpp Pix
 *    with a colormap or a 32 bpp Pix with RGB components.  For output
 *    (compression to file), all color Pix, whether 8 bpp with a
 *    colormap or 32 bpp, are written compressed as a set of three
 *    8 bpp (rgb) images.
 *
 *    Low-level error handling
 *    ------------------------
 *    The default behavior of the jpeg library is to call exit.
 *    This is often undesirable, and the caller should make the
 *    decision when to abort a process.  To prevent the jpeg library
 *    from calling exit(), setjmp() has been inserted into all
 *    readers and writers, and the cinfo struct has been set up so that
 *    the low-level jpeg library will call a special error handler
 *    that doesn't exit, instead of the default function error_exit().
 *
 *    To avoid race conditions and make these functions thread-safe in
 *    the rare situation where calls to two threads are simultaneously
 *    failing on bad jpegs, we insert a local copy of the jmp_buf struct
 *    into the cinfo.client_data field, and use this on longjmp.
 *    For extracting the jpeg comment, we have the added complication
 *    that the client_data field must also return the jpeg comment,
 *    and we use a different error handler.
 *
 *    How to avoid subsampling the chroma channels
 *    --------------------------------------------
 *    By default, the U,V (chroma) channels use 2x2 subsampling (aka 4.2.0).
 *    Higher quality for color, using full resolution (4.4.4) for the chroma,
 *    is obtained by setting a field in the pix before writing:
 *        pixSetChromaSampling(pix, L_NO_CHROMA_SAMPLING_JPEG);
 *    The field can be reset for default 4.2.0 subsampling with
 *        pixSetChromaSampling(pix, 0);
 *
 *    How to extract just the luminance channel in reading RGB
 *    --------------------------------------------------------
 *    For higher resolution and faster decoding of an RGB image, you
 *    can extract just the 8 bpp luminance channel, using pixReadJpeg(),
 *    where you use L_JPEG_READ_LUMINANCE for the %hint arg.
 *
 *    How to continue to read if the data is corrupted
 *    ------------------------------------------------
 *    By default, if data is corrupted we make every effort to fail
 *    to return a pix.  (Failure is not always possible with bad
 *    data, because in some situations, such as during arithmetic
 *    decoding, the low-level jpeg library will not abort or raise
 *    a warning.)  To attempt to ignore warnings and get a pix when data
 *    is corrupted, use L_JPEG_CONTINUE_WITH_BAD_DATA in the %hint arg.
 *
 *    Compressing to memory and decompressing from memory
 *    ---------------------------------------------------
 *    On systems like Windows without fmemopen() and open_memstream(),
 *    we write data to a temp file and read it back for operations
 *    between pix and compressed-data, such as pixReadMemJpeg() and
 *    pixWriteMemJpeg().
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* --------------------------------------------*/ #if HAVE_LIBJPEG /* defined in environ.h */ /* --------------------------------------------*/ #include /* jconfig.h makes the error of setting * #define HAVE_STDLIB_H * which conflicts with config_auto.h (where it is set to 1) and results * for some gcc compiler versions in a warning. The conflict is harmless * but we suppress it by undefining the variable. */ #undef HAVE_STDLIB_H #include "jpeglib.h" static void jpeg_error_catch_all_1(j_common_ptr cinfo); static void jpeg_error_catch_all_2(j_common_ptr cinfo); static l_uint8 jpeg_getc(j_decompress_ptr cinfo); /* Note: 'boolean' is defined in jmorecfg.h. We use it explicitly * here because for Windows where __MINGW32__ is defined, * the prototype for jpeg_comment_callback() is given as * returning a boolean. */ static boolean jpeg_comment_callback(j_decompress_ptr cinfo); /* This is saved in the client_data field of cinfo, and used both * to retrieve the comment from its callback and to handle * exceptions with a longjmp. */ struct callback_data { jmp_buf jmpbuf; l_uint8 *comment; }; #ifndef NO_CONSOLE_IO #define DEBUG_INFO 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Read jpeg from file (special function) * *---------------------------------------------------------------------*/ /*! * \brief pixReadJpeg() * * \param[in] filename * \param[in] cmapflag 0 for no colormap in returned pix; * 1 to return an 8 bpp cmapped pix if spp = 3 or 4 * \param[in] reduction scaling factor: 1, 2, 4 or 8 * \param[out] pnwarn [optional] number of warnings about * corrupted data * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default * \return pix, or NULL on error * *
 * Notes:
 *      (1) This is a special function for reading jpeg files.
 *      (2) Use this if you want the jpeg library to create
 *          an 8 bpp colormapped image.
 *      (3) Images reduced by factors of 2, 4 or 8 can be returned
 *          significantly faster than full resolution images.
 *      (4) If the jpeg data is bad, depending on the severity of the
 *          data corruption one of two things will happen:
 *          (a) 0 or more warnings are generated, or
 *          (b) the library will immediately attempt to exit. This is
 *              caught by our error handler and no pix will be returned.
 *          If data corruption causes a warning, the default action
 *          is to abort the read. The reason is that malformed jpeg
 *          data sequences exist that prevent termination of the read.
 *          To allow the decoding to continue after corrupted data is
 *          encountered, include L_JPEG_CONTINUE_WITH_BAD_DATA in %hint.
 *      (5) The possible hint values are given in the enum in imageio.h:
 *            * L_JPEG_READ_LUMINANCE
 *            * L_JPEG_CONTINUE_WITH_BAD_DATA
 *          Default (0) is to do neither, and to fail on warning of data
 *          corruption.
 * 
*/ PIX * pixReadJpeg(const char *filename, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { l_int32 ret; l_uint8 *comment; FILE *fp; PIX *pix; if (pnwarn) *pnwarn = 0; if (!filename) return (PIX *)ERROR_PTR("filename not defined", __func__, NULL); if (cmapflag != 0 && cmapflag != 1) cmapflag = 0; /* default */ if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR_1("image file not found", filename, __func__, NULL); pix = pixReadStreamJpeg(fp, cmapflag, reduction, pnwarn, hint); if (pix) { ret = fgetJpegComment(fp, &comment); if (!ret && comment) pixSetText(pix, (char *)comment); LEPT_FREE(comment); } fclose(fp); if (!pix) return (PIX *)ERROR_PTR_1("image not returned", filename, __func__, NULL); return pix; } /*! * \brief pixReadStreamJpeg() * * \param[in] fp file stream * \param[in] cmapflag 0 for no colormap in returned pix; * 1 to return an 8 bpp cmapped pix if spp = 3 or 4 * \param[in] reduction scaling factor: 1, 2, 4 or 8 * \param[out] pnwarn [optional] number of warnings * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default * \return pix, or NULL on error * *
 * Notes:
 *      (1) For usage, see pixReadJpeg().
 *      (2) The jpeg comment, if it exists, is not stored in the pix.
 * 
*/ PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { l_int32 cyan, yellow, magenta, black, nwarn; l_int32 i, j, k, rval, gval, bval; l_int32 nlinesread, abort_on_warning; l_int32 w, h, wpl, spp, ncolors, cindex, ycck, cmyk; l_uint32 *data; l_uint32 *line, *ppixel; JSAMPROW rowbuffer; PIX *pix; PIXCMAP *cmap; struct jpeg_decompress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr = { 0 }; jmp_buf jmpbuf; /* must be local to the function */ if (pnwarn) *pnwarn = 0; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); if (cmapflag != 0 && cmapflag != 1) cmapflag = 0; /* default */ if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", __func__, NULL); if (BITS_IN_JSAMPLE != 8) /* set in jmorecfg.h */ return (PIX *)ERROR_PTR("BITS_IN_JSAMPLE != 8", __func__, NULL); rewind(fp); pix = NULL; rowbuffer = NULL; /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); jerr.error_exit = jpeg_error_catch_all_1; cinfo.client_data = (void *)&jmpbuf; if (setjmp(jmpbuf)) { jpeg_destroy_decompress(&cinfo); pixDestroy(&pix); LEPT_FREE(rowbuffer); return (PIX *)ERROR_PTR("internal jpeg error", __func__, NULL); } /* Initialize jpeg structs for decompression */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); cinfo.scale_denom = reduction; cinfo.scale_num = 1; jpeg_calc_output_dimensions(&cinfo); if (hint & L_JPEG_READ_LUMINANCE) { cinfo.out_color_space = JCS_GRAYSCALE; spp = 1; L_INFO("reading luminance channel only\n", __func__); } else { spp = cinfo.out_color_components; } /* Allocate the image and a row buffer */ w = cinfo.output_width; h = cinfo.output_height; ycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4 && cmapflag == 0); cmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4 && cmapflag == 0); if (spp != 1 && spp != 3 && !ycck && !cmyk) { jpeg_destroy_decompress(&cinfo); return (PIX *)ERROR_PTR("spp must be 1 or 3, or YCCK or CMYK", __func__, NULL); } if ((spp == 3 && cmapflag == 0) || ycck || cmyk) { /* rgb or 4 bpp color */ rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), (size_t)spp * w); pix = pixCreate(w, h, 32); } else { /* 8 bpp gray or colormapped */ rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), w); pix = pixCreate(w, h, 8); } if (!rowbuffer || !pix) { LEPT_FREE(rowbuffer); rowbuffer = NULL; pixDestroy(&pix); jpeg_destroy_decompress(&cinfo); return (PIX *)ERROR_PTR("rowbuffer or pix not made", __func__, NULL); } pixSetInputFormat(pix, IFF_JFIF_JPEG); /* Initialize decompression. * Set up a colormap for color quantization if requested. * Arithmetic coding is rarely used on the jpeg data, but if it * is, jpeg_start_decompress() handles the decoding. * With corrupted encoded data, this can take an arbitrarily * long time, and fuzzers are finding examples. Unfortunately, * there is no way to get a callback from an error in this phase. */ if (spp == 1) { /* Grayscale or colormapped */ jpeg_start_decompress(&cinfo); } else { /* Color; spp == 3 or YCCK or CMYK */ if (cmapflag == 0) { /* 24 bit color in 32 bit pix or YCCK/CMYK */ cinfo.quantize_colors = FALSE; jpeg_start_decompress(&cinfo); } else { /* Color quantize to 8 bits */ cinfo.quantize_colors = TRUE; cinfo.desired_number_of_colors = 256; jpeg_start_decompress(&cinfo); /* Construct a pix cmap */ cmap = pixcmapCreate(8); ncolors = cinfo.actual_number_of_colors; for (cindex = 0; cindex < ncolors; cindex++) { rval = cinfo.colormap[0][cindex]; gval = cinfo.colormap[1][cindex]; bval = cinfo.colormap[2][cindex]; pixcmapAddColor(cmap, rval, gval, bval); } pixSetColormap(pix, cmap); } } wpl = pixGetWpl(pix); data = pixGetData(pix); /* Decompress. It appears that jpeg_read_scanlines() always * returns 1 when you ask for one scanline, but we test anyway. * During decoding of scanlines, warnings are issued if corrupted * data is found. The default behavior is to abort reading * when a warning is encountered. By setting the hint to have * the same bit set as in L_JPEG_CONTINUE_WITH_BAD_DATA, e.g., * hint = hint | L_JPEG_CONTINUE_WITH_BAD_DATA * reading will continue after warnings, in an attempt to return * the (possibly corrupted) image. */ abort_on_warning = (hint & L_JPEG_CONTINUE_WITH_BAD_DATA) ? 0 : 1; for (i = 0; i < h; i++) { nlinesread = jpeg_read_scanlines(&cinfo, &rowbuffer, (JDIMENSION)1); nwarn = cinfo.err->num_warnings; if (nlinesread == 0 || (abort_on_warning && nwarn > 0)) { L_ERROR("read error at scanline %d; nwarn = %d\n", __func__, i, nwarn); pixDestroy(&pix); jpeg_destroy_decompress(&cinfo); LEPT_FREE(rowbuffer); rowbuffer = NULL; if (pnwarn) *pnwarn = nwarn; return (PIX *)ERROR_PTR("bad data", __func__, NULL); } /* -- 24 bit color -- */ if ((spp == 3 && cmapflag == 0) || ycck || cmyk) { ppixel = data + i * wpl; if (spp == 3) { for (j = k = 0; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, rowbuffer[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowbuffer[k++]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowbuffer[k++]); ppixel++; } } else { /* This is a conversion from CMYK -> RGB that ignores color profiles, and is invoked when the image header claims to be in CMYK or YCCK colorspace. If in YCCK, libjpeg may be doing YCCK -> CMYK under the hood. To understand why the colors need to be inverted on read-in for the Adobe marker, see the "Special color spaces" section of "Using the IJG JPEG Library" by Thomas G. Lane: http://www.jpegcameras.com/libjpeg/libjpeg-3.html#ss3.1 The non-Adobe conversion is equivalent to: rval = black - black * cyan / 255 ... The Adobe conversion is equivalent to: rval = black - black * (255 - cyan) / 255 ... Note that cyan is the complement to red, and we are subtracting the complement color (weighted by black) from black. For Adobe conversions, where they've already inverted the CMY but not the K, we have to invert again. The results must be clipped to [0 ... 255]. */ for (j = k = 0; j < w; j++) { cyan = rowbuffer[k++]; magenta = rowbuffer[k++]; yellow = rowbuffer[k++]; black = rowbuffer[k++]; if (cinfo.saw_Adobe_marker) { rval = (black * cyan) / 255; gval = (black * magenta) / 255; bval = (black * yellow) / 255; } else { rval = black * (255 - cyan) / 255; gval = black * (255 - magenta) / 255; bval = black * (255 - yellow) / 255; } rval = L_MIN(L_MAX(rval, 0), 255); gval = L_MIN(L_MAX(gval, 0), 255); bval = L_MIN(L_MAX(bval, 0), 255); composeRGBPixel(rval, gval, bval, ppixel); ppixel++; } } } else { /* 8 bpp grayscale or colormapped pix */ line = data + i * wpl; for (j = 0; j < w; j++) SET_DATA_BYTE(line, j, rowbuffer[j]); } } /* If the pixel density is neither 1 nor 2, it may not be defined. * In that case, don't set the resolution. */ if (cinfo.density_unit == 1) { /* pixels per inch */ pixSetXRes(pix, cinfo.X_density); pixSetYRes(pix, cinfo.Y_density); } else if (cinfo.density_unit == 2) { /* pixels per centimeter */ pixSetXRes(pix, (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5)); pixSetYRes(pix, (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5)); } if (cinfo.output_components != spp) lept_stderr("output spp = %d, spp = %d\n", cinfo.output_components, spp); jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); LEPT_FREE(rowbuffer); rowbuffer = NULL; if (pnwarn) *pnwarn = nwarn; if (nwarn > 0) L_WARNING("%d warning(s) of bad data\n", __func__, nwarn); return pix; } /*---------------------------------------------------------------------* * Read jpeg metadata from file * *---------------------------------------------------------------------*/ /*! * \brief readHeaderJpeg() * * \param[in] filename * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pspp [optional] samples/pixel * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise * \return 0 if OK, 1 on error */ l_ok readHeaderJpeg(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 ret; FILE *fp; if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); fclose(fp); return ret; } /*! * \brief freadHeaderJpeg() * * \param[in] fp file stream * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pspp [optional] samples/pixel * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise * \return 0 if OK, 1 on error */ l_ok freadHeaderJpeg(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 spp, w, h; struct jpeg_decompress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr = { 0 }; jmp_buf jmpbuf; /* must be local to the function */ if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", __func__, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) return ERROR_INT("internal jpeg error", __func__, 1); /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); jpeg_calc_output_dimensions(&cinfo); spp = cinfo.out_color_components; w = cinfo.output_width; h = cinfo.output_height; if (w < 1 || h < 1 || spp < 1 || spp > 4) { jpeg_destroy_decompress(&cinfo); rewind(fp); return ERROR_INT("bad jpeg image parameters", __func__, 1); } if (pspp) *pspp = spp; if (pw) *pw = cinfo.output_width; if (ph) *ph = cinfo.output_height; if (pycck) *pycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4); if (pcmyk) *pcmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4); jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /* * \brief fgetJpegResolution() * * \param[in] fp file stream * \param[out] pxres, pyres resolutions * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If neither resolution field is set, this is not an error;
 *          the returned resolution values are 0 (designating 'unknown').
 *      (2) Side-effect: this rewinds the stream.
 * 
*/ l_int32 fgetJpegResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { struct jpeg_decompress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr = { 0 }; jmp_buf jmpbuf; /* must be local to the function */ if (pxres) *pxres = 0; if (pyres) *pyres = 0; if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", __func__, 1); if (!fp) return ERROR_INT("stream not opened", __func__, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) return ERROR_INT("internal jpeg error", __func__, 1); /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); /* It is common for the input resolution to be omitted from the * jpeg file. If density_unit is not 1 or 2, simply return 0. */ if (cinfo.density_unit == 1) { /* pixels/inch */ *pxres = cinfo.X_density; *pyres = cinfo.Y_density; } else if (cinfo.density_unit == 2) { /* pixels/cm */ *pxres = (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5); *pyres = (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5); } jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /* * \brief fgetJpegComment() * * \param[in] fp file stream opened for read * \param[out] pcomment comment * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Side-effect: this rewinds the stream.
 * 
*/ l_int32 fgetJpegComment(FILE *fp, l_uint8 **pcomment) { struct jpeg_decompress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr = { 0 }; struct callback_data cb_data = { 0 }; /* contains local jmp_buf */ if (!pcomment) return ERROR_INT("&comment not defined", __func__, 1); *pcomment = NULL; if (!fp) return ERROR_INT("stream not opened", __func__, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); jerr.error_exit = jpeg_error_catch_all_2; cb_data.comment = NULL; cinfo.client_data = (void *)&cb_data; if (setjmp(cb_data.jmpbuf)) { LEPT_FREE(cb_data.comment); return ERROR_INT("internal jpeg error", __func__, 1); } /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_set_marker_processor(&cinfo, JPEG_COM, jpeg_comment_callback); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); /* Save the result */ *pcomment = cb_data.comment; jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /*---------------------------------------------------------------------* * Writing Jpeg * *---------------------------------------------------------------------*/ /*! * \brief pixWriteJpeg() * * \param[in] filename * \param[in] pix any depth; cmap is OK * \param[in] quality 1 - 100; 75 is default * \param[in] progressive 0 for baseline sequential; 1 for progressive * \return 0 if OK; 1 on error */ l_ok pixWriteJpeg(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { FILE *fp; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (pixWriteStreamJpeg(fp, pix, quality, progressive)) { fclose(fp); return ERROR_INT_1("pix not written to stream", filename, __func__, 1); } fclose(fp); return 0; } /*! * \brief pixWriteStreamJpeg() * * \param[in] fp file stream * \param[in] pixs any depth; cmap is OK * \param[in] quality 1 - 100; 75 is default value; 0 is also default * \param[in] progressive 0 for baseline sequential; 1 for progressive * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Progressive encoding gives better compression, at the
 *          expense of slower encoding and decoding.
 *      (2) Standard chroma subsampling is 2x2 on both the U and V
 *          channels.  For highest quality, use no subsampling; this
 *          option is set by pixSetChromaSampling(pix, 0).
 *      (3) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
 *          and 32 bpp.  However, it is possible, and in some cases desirable,
 *          to write out a jpeg file using an rgb pix that has 24 bpp.
 *          This can be created by appending the raster data for a 24 bpp
 *          image (with proper scanline padding) directly to a 24 bpp
 *          pix that was created without a data array.
 *      (4) There are two compression paths in this function:
 *          * Grayscale image, no colormap: compress as 8 bpp image.
 *          * rgb full color image: copy each line into the color
 *            line buffer, and compress as three 8 bpp images.
 *      (5) Under the covers, the jpeg library transforms rgb to a
 *          luminance-chromaticity triple, each component of which is
 *          also 8 bits, and compresses that.  It uses 2 Huffman tables,
 *          a higher resolution one (with more quantization levels)
 *          for luminosity and a lower resolution one for the chromas.
 * 
*/ l_ok pixWriteStreamJpeg(FILE *fp, PIX *pixs, l_int32 quality, l_int32 progressive) { l_int32 xres, yres; l_int32 i, j, k; l_int32 w, h, d, wpl, spp, colorflag, rowsamples; l_uint32 *ppixel, *line, *data; JSAMPROW rowbuffer; PIX *pix; struct jpeg_compress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr = { 0 }; char *text; jmp_buf jmpbuf; /* must be local to the function */ if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (quality <= 0) quality = 75; /* default */ if (quality > 100) { L_ERROR("invalid jpeg quality; setting to 75\n", __func__); quality = 75; } /* If necessary, convert the pix so that it can be jpeg compressed. * The colormap is removed based on the source, so if the colormap * has only gray colors, the image will be compressed with spp = 1. */ pixGetDimensions(pixs, &w, &h, &d); pix = NULL; if (pixGetColormap(pixs) != NULL) { L_INFO("removing colormap; may be better to compress losslessly\n", __func__); pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); } else if (d >= 8 && d != 16) { /* normal case; no rewrite */ pix = pixClone(pixs); } else if (d < 8 || d == 16) { L_INFO("converting from %d to 8 bpp\n", __func__, d); pix = pixConvertTo8(pixs, 0); /* 8 bpp, no cmap */ } else { L_ERROR("unknown pix type with d = %d and no cmap\n", __func__, d); return 1; } if (!pix) return ERROR_INT("pix not made", __func__, 1); pixSetPadBits(pix, 0); rewind(fp); rowbuffer = NULL; /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) { LEPT_FREE(rowbuffer); pixDestroy(&pix); return ERROR_INT("internal jpeg error", __func__, 1); } /* Initialize the jpeg structs for compression */ jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, fp); cinfo.image_width = w; cinfo.image_height = h; /* Set the color space and number of components */ d = pixGetDepth(pix); if (d == 8) { colorflag = 0; /* 8 bpp grayscale; no cmap */ cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; } else { /* d == 32 || d == 24 */ colorflag = 1; /* rgb */ cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; } jpeg_set_defaults(&cinfo); /* Setting optimize_coding to TRUE seems to improve compression * by approx 2-4 percent, and increases comp time by approx 20%. */ cinfo.optimize_coding = FALSE; /* Set resolution in pixels/in (density_unit: 1 = in, 2 = cm) */ xres = pixGetXRes(pix); yres = pixGetYRes(pix); if ((xres != 0) && (yres != 0)) { cinfo.density_unit = 1; /* designates pixels per inch */ cinfo.X_density = xres; cinfo.Y_density = yres; } /* Set the quality and progressive parameters */ jpeg_set_quality(&cinfo, quality, TRUE); if (progressive) jpeg_simple_progression(&cinfo); /* Set the chroma subsampling parameters. This is done in * YUV color space. The Y (intensity) channel is never subsampled. * The standard subsampling is 2x2 on both the U and V channels. * Notation on this is confusing. For a nice illustrations, see * http://en.wikipedia.org/wiki/Chroma_subsampling * The standard subsampling is written as 4:2:0. * We allow high quality where there is no subsampling on the * chroma channels: denoted as 4:4:4. */ if (pixs->special == L_NO_CHROMA_SAMPLING_JPEG) { cinfo.comp_info[0].h_samp_factor = 1; cinfo.comp_info[0].v_samp_factor = 1; cinfo.comp_info[1].h_samp_factor = 1; cinfo.comp_info[1].v_samp_factor = 1; cinfo.comp_info[2].h_samp_factor = 1; cinfo.comp_info[2].v_samp_factor = 1; } jpeg_start_compress(&cinfo, TRUE); /* Cap the text the length limit, 65533, for JPEG_COM payload. * Just to be safe, subtract 100 to cover the Adobe name space. */ if ((text = pixGetText(pix)) != NULL) { if (strlen(text) > 65433) { L_WARNING("text is %zu bytes; clipping to 65433\n", __func__, strlen(text)); text[65433] = '\0'; } jpeg_write_marker(&cinfo, JPEG_COM, (const JOCTET *)text, strlen(text)); } /* Allocate row buffer */ spp = cinfo.input_components; rowsamples = spp * w; if ((rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), rowsamples)) == NULL) { pixDestroy(&pix); return ERROR_INT("calloc fail for rowbuffer", __func__, 1); } data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + i * wpl; if (colorflag == 0) { /* 8 bpp gray */ for (j = 0; j < w; j++) rowbuffer[j] = GET_DATA_BYTE(line, j); } else { /* colorflag == 1 */ if (d == 24) { /* See note 3 above; special case of 24 bpp rgb */ jpeg_write_scanlines(&cinfo, (JSAMPROW *)&line, 1); } else { /* standard 32 bpp rgb */ ppixel = line; for (j = k = 0; j < w; j++) { rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); ppixel++; } } } if (d != 24) jpeg_write_scanlines(&cinfo, &rowbuffer, 1); } jpeg_finish_compress(&cinfo); pixDestroy(&pix); LEPT_FREE(rowbuffer); rowbuffer = NULL; jpeg_destroy_compress(&cinfo); return 0; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ /*! * \brief pixReadMemJpeg() * * \param[in] data const; jpeg-encoded * \param[in] size of data * \param[in] cmflag colormap flag 0 means return RGB image if color; * 1 means create a colormap and return * an 8 bpp colormapped image if color * \param[in] reduction scaling factor: 1, 2, 4 or 8 * \param[out] pnwarn [optional] number of warnings * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default * \return pix, or NULL on error * *
 * Notes:
 *      (1) The %size byte of %data must be a null character.
 *      (2) The only hint flag so far is L_JPEG_READ_LUMINANCE,
 *          given in the enum in imageio.h.
 *      (3) See pixReadJpeg() for usage.
 * 
*/ PIX * pixReadMemJpeg(const l_uint8 *data, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { l_int32 ret; l_uint8 *comment; FILE *fp; PIX *pix; if (pnwarn) *pnwarn = 0; if (!data) return (PIX *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIX *)ERROR_PTR("stream not opened", __func__, NULL); pix = pixReadStreamJpeg(fp, cmflag, reduction, pnwarn, hint); if (pix) { ret = fgetJpegComment(fp, &comment); if (!ret && comment) { pixSetText(pix, (char *)comment); LEPT_FREE(comment); } } fclose(fp); if (!pix) L_ERROR("pix not read\n", __func__); return pix; } /*! * \brief readHeaderMemJpeg() * * \param[in] data const; jpeg-encoded * \param[in] size of data * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pspp [optional] samples/pixel * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise * \return 0 if OK, 1 on error */ l_ok readHeaderMemJpeg(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 ret; FILE *fp; if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!data) return ERROR_INT("data not defined", __func__, 1); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", __func__, 1); if ((fp = fopenReadFromMemory(data, size)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); fclose(fp); return ret; } /*! * \brief readResolutionMemJpeg() * * \param[in] data const; jpeg-encoded * \param[in] size of data * \param[out] pxres [optional] * \param[out] pyres [optional] * \return 0 if OK, 1 on error */ l_ok readResolutionMemJpeg(const l_uint8 *data, size_t size, l_int32 *pxres, l_int32 *pyres) { l_int32 ret; FILE *fp; if (pxres) *pxres = 0; if (pyres) *pyres = 0; if (!data) return ERROR_INT("data not defined", __func__, 1); if (!pxres && !pyres) return ERROR_INT("no results requested", __func__, 1); if ((fp = fopenReadFromMemory(data, size)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = fgetJpegResolution(fp, pxres, pyres); fclose(fp); return ret; } /*! * \brief pixWriteMemJpeg() * * \param[out] pdata data of jpeg compressed image * \param[out] psize size of returned data * \param[in] pix any depth; cmap is OK * \param[in] quality 1 - 100; 75 is default value; 0 is also default * \param[in] progressive 0 for baseline sequential; 1 for progressive * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteStreamJpeg() for usage.  This version writes to
 *          memory instead of to a file stream.
 * 
*/ l_ok pixWriteMemJpeg(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixWriteStreamJpeg(fp, pix, quality, progressive); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixWriteStreamJpeg(fp, pix, quality, progressive); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*---------------------------------------------------------------------* * Setting special flag for chroma sampling on write * *---------------------------------------------------------------------*/ /*! * \brief pixSetChromaSampling() * * \param[in] pix * \param[in] sampling 1 for subsampling; 0 for no subsampling * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The default is for 2x2 chroma subsampling because the files are
 *          considerably smaller and the appearance is typically satisfactory.
 *          To get full resolution output in the chroma channels for
 *          jpeg writing, call this with %sampling == 0.
 * 
*/ l_ok pixSetChromaSampling(PIX *pix, l_int32 sampling) { if (!pix) return ERROR_INT("pix not defined", __func__, 1 ); if (sampling) pixSetSpecial(pix, 0); /* default */ else pixSetSpecial(pix, L_NO_CHROMA_SAMPLING_JPEG); return 0; } /*---------------------------------------------------------------------* * Static system helpers * *---------------------------------------------------------------------*/ /*! * \brief jpeg_error_catch_all_1() * * Notes: * (1) The default jpeg error_exit() kills the process, but we * never want a call to leptonica to kill a process. If you * do want this behavior, remove the calls to these error handlers. * (2) This is used where cinfo->client_data holds only jmpbuf. */ static void jpeg_error_catch_all_1(j_common_ptr cinfo) { jmp_buf *pjmpbuf = (jmp_buf *)cinfo->client_data; (*cinfo->err->output_message) (cinfo); jpeg_destroy(cinfo); longjmp(*pjmpbuf, 1); } /*! * \brief jpeg_error_catch_all_2() * * Notes: * (1) This is used where cinfo->client_data needs to hold both * the jmpbuf and the jpeg comment data. * (2) On error, the comment data will be freed by the caller. */ static void jpeg_error_catch_all_2(j_common_ptr cinfo) { struct callback_data *pcb_data; pcb_data = (struct callback_data *)cinfo->client_data; (*cinfo->err->output_message) (cinfo); jpeg_destroy(cinfo); longjmp(pcb_data->jmpbuf, 1); } /* This function was borrowed from libjpeg */ static l_uint8 jpeg_getc(j_decompress_ptr cinfo) { struct jpeg_source_mgr *datasrc; datasrc = cinfo->src; if (datasrc->bytes_in_buffer == 0) { if (! (*datasrc->fill_input_buffer) (cinfo)) { return 0; } } datasrc->bytes_in_buffer--; return GETJOCTET(*datasrc->next_input_byte++); } /*! * \brief jpeg_comment_callback() * * Notes: * (1) This is used to read the jpeg comment (JPEG_COM). * See the note above the declaration for why it returns * a "boolean". */ static boolean jpeg_comment_callback(j_decompress_ptr cinfo) { l_int32 length, i; l_uint8 *comment; struct callback_data *pcb_data; /* Get the size of the comment */ length = jpeg_getc(cinfo) << 8; length += jpeg_getc(cinfo); length -= 2; if (length <= 0) return 1; /* Extract the comment from the file */ if ((comment = (l_uint8 *)LEPT_CALLOC(length + 1, sizeof(l_uint8))) == NULL) return 0; for (i = 0; i < length; i++) comment[i] = jpeg_getc(cinfo); /* Save the comment and return */ pcb_data = (struct callback_data *)cinfo->client_data; if (pcb_data->comment) { /* clear before overwriting previous comment */ LEPT_FREE(pcb_data->comment); pcb_data->comment = NULL; } pcb_data->comment = comment; return 1; } /* --------------------------------------------*/ #endif /* HAVE_LIBJPEG */ /* --------------------------------------------*/ leptonica-1.86.0/src/jpegiostub.c000066400000000000000000000124101506303110300166600ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file jpegiostub.c *
 *
 *     Stubs for jpegio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !HAVE_LIBJPEG /* defined in environ.h */ /* --------------------------------------------*/ /* ----------------------------------------------------------------------*/ PIX * pixReadJpeg(const char *filename, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderJpeg(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok freadHeaderJpeg(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetJpegResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetJpegComment(FILE *fp, l_uint8 **pcomment) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteJpeg(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamJpeg(FILE *fp, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemJpeg(const l_uint8 *cdata, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemJpeg(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readResolutionMemJpeg(const l_uint8 *data, size_t size, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemJpeg(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixSetChromaSampling(PIX *pix, l_int32 sampling) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ /* --------------------------------------------*/ #endif /* !HAVE_LIBJPEG */ /* --------------------------------------------*/ leptonica-1.86.0/src/kernel.c000066400000000000000000001115761506303110300160020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file kernel.c *
 *
 *      Basic operations on kernels for image convolution
 *
 *         Create/destroy/copy
 *            L_KERNEL   *kernelCreate()
 *            void        kernelDestroy()
 *            L_KERNEL   *kernelCopy()
 *
 *         Accessors:
 *            l_int32     kernelGetElement()
 *            l_int32     kernelSetElement()
 *            l_int32     kernelGetParameters()
 *            l_int32     kernelSetOrigin()
 *            l_int32     kernelGetSum()
 *            l_int32     kernelGetMinMax()
 *
 *         Normalize/invert
 *            L_KERNEL   *kernelNormalize()
 *            L_KERNEL   *kernelInvert()
 *
 *         Helper function
 *            l_float32 **create2dFloatArray()
 *
 *         Serialized I/O
 *            L_KERNEL   *kernelRead()
 *            L_KERNEL   *kernelReadStream()
 *            l_int32     kernelWrite()
 *            l_int32     kernelWriteStream()
 *
 *         Making a kernel from a compiled string
 *            L_KERNEL   *kernelCreateFromString()
 *
 *         Making a kernel from a simple file format
 *            L_KERNEL   *kernelCreateFromFile()
 *
 *         Making a kernel from a Pix
 *            L_KERNEL   *kernelCreateFromPix()
 *
 *         Display a kernel in a pix
 *            PIX        *kernelDisplayInPix()
 *
 *         Parse string to extract numbers
 *            NUMA       *parseStringForNumbers()
 *
 *      Simple parametric kernels
 *            L_KERNEL   *makeFlatKernel()
 *            L_KERNEL   *makeGaussianKernel()
 *            L_KERNEL   *makeGaussianKernelSep()
 *            L_KERNEL   *makeDoGKernel()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Array size must be > 0 and not larger than this */ static const l_uint32 MaxArraySize = 100000; /*------------------------------------------------------------------------* * Create / Destroy * *------------------------------------------------------------------------*/ /*! * \brief kernelCreate() * * \param[in] height, width * \return kernel, or NULL on error * *
 * Notes:
 *      (1) kernelCreate() initializes all values to 0.
 *      (2) After this call, (cy,cx) and nonzero data values must be
 *          assigned.
 *      (2) The number of kernel elements must be less than 2^29.
 * 
*/ L_KERNEL * kernelCreate(l_int32 height, l_int32 width) { l_uint64 size64; L_KERNEL *kel; if (width <= 0) return (L_KERNEL *)ERROR_PTR("width must be > 0", __func__, NULL); if (height <= 0) return (L_KERNEL *)ERROR_PTR("height must be > 0", __func__, NULL); /* Avoid overflow in malloc arg */ size64 = (l_uint64)width * (l_uint64)height; if (size64 >= (1LL << 29)) { L_ERROR("requested width = %d, height = %d\n", __func__, width, height); return (L_KERNEL *)ERROR_PTR("size >= 2^29", __func__, NULL); } kel = (L_KERNEL *)LEPT_CALLOC(1, sizeof(L_KERNEL)); kel->sy = height; kel->sx = width; if ((kel->data = create2dFloatArray(height, width)) == NULL) { LEPT_FREE(kel); return (L_KERNEL *)ERROR_PTR("data not allocated", __func__, NULL); } return kel; } /*! * \brief kernelDestroy() * * \param[in,out] pkel will be set to null before returning * \return void */ void kernelDestroy(L_KERNEL **pkel) { l_int32 i; L_KERNEL *kel; if (pkel == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((kel = *pkel) == NULL) return; for (i = 0; i < kel->sy; i++) LEPT_FREE(kel->data[i]); LEPT_FREE(kel->data); LEPT_FREE(kel); *pkel = NULL; } /*! * \brief kernelCopy() * * \param[in] kels source kernel * \return keld copy of kels, or NULL on error */ L_KERNEL * kernelCopy(L_KERNEL *kels) { l_int32 i, j, sx, sy, cx, cy; L_KERNEL *keld; if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", __func__, NULL); kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", __func__, NULL); keld->cy = cy; keld->cx = cx; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = kels->data[i][j]; return keld; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * \brief kernelGetElement() * * \param[in] kel * \param[in] row * \param[in] col * \param[out] pval * \return 0 if OK; 1 on error */ l_ok kernelGetElement(L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 *pval) { if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!kel) return ERROR_INT("kernel not defined", __func__, 1); if (row < 0 || row >= kel->sy) return ERROR_INT("kernel row out of bounds", __func__, 1); if (col < 0 || col >= kel->sx) return ERROR_INT("kernel col out of bounds", __func__, 1); *pval = kel->data[row][col]; return 0; } /*! * \brief kernelSetElement() * * \param[in] kel kernel * \param[in] row * \param[in] col * \param[in] val * \return 0 if OK; 1 on error */ l_ok kernelSetElement(L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 val) { if (!kel) return ERROR_INT("kel not defined", __func__, 1); if (row < 0 || row >= kel->sy) return ERROR_INT("kernel row out of bounds", __func__, 1); if (col < 0 || col >= kel->sx) return ERROR_INT("kernel col out of bounds", __func__, 1); kel->data[row][col] = val; return 0; } /*! * \brief kernelGetParameters() * * \param[in] kel kernel * \param[out] psy, psx, pcy, pcx [optional] each can be null * \return 0 if OK, 1 on error */ l_ok kernelGetParameters(L_KERNEL *kel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx) { if (psy) *psy = 0; if (psx) *psx = 0; if (pcy) *pcy = 0; if (pcx) *pcx = 0; if (!kel) return ERROR_INT("kernel not defined", __func__, 1); if (psy) *psy = kel->sy; if (psx) *psx = kel->sx; if (pcy) *pcy = kel->cy; if (pcx) *pcx = kel->cx; return 0; } /*! * \brief kernelSetOrigin() * * \param[in] kel kernel * \param[in] cy, cx * \return 0 if OK; 1 on error */ l_ok kernelSetOrigin(L_KERNEL *kel, l_int32 cy, l_int32 cx) { if (!kel) return ERROR_INT("kel not defined", __func__, 1); kel->cy = cy; kel->cx = cx; return 0; } /*! * \brief kernelGetSum() * * \param[in] kel kernel * \param[out] psum sum of all kernel values * \return 0 if OK, 1 on error */ l_ok kernelGetSum(L_KERNEL *kel, l_float32 *psum) { l_int32 sx, sy, i, j; if (!psum) return ERROR_INT("&sum not defined", __func__, 1); *psum = 0.0; if (!kel) return ERROR_INT("kernel not defined", __func__, 1); kernelGetParameters(kel, &sy, &sx, NULL, NULL); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { *psum += kel->data[i][j]; } } return 0; } /*! * \brief kernelGetMinMax() * * \param[in] kel kernel * \param[out] pmin [optional] minimum value * \param[out] pmax [optional] maximum value * \return 0 if OK, 1 on error */ l_ok kernelGetMinMax(L_KERNEL *kel, l_float32 *pmin, l_float32 *pmax) { l_int32 sx, sy, i, j; l_float32 val, minval, maxval; if (!pmin && !pmax) return ERROR_INT("neither &min nor &max defined", __func__, 1); if (pmin) *pmin = 0.0; if (pmax) *pmax = 0.0; if (!kel) return ERROR_INT("kernel not defined", __func__, 1); kernelGetParameters(kel, &sy, &sx, NULL, NULL); minval = 10000000.0; maxval = -10000000.0; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { val = kel->data[i][j]; if (val < minval) minval = val; if (val > maxval) maxval = val; } } if (pmin) *pmin = minval; if (pmax) *pmax = maxval; return 0; } /*----------------------------------------------------------------------* * Normalize/Invert * *----------------------------------------------------------------------*/ /*! * \brief kernelNormalize() * * \param[in] kels source kel, to be normalized * \param[in] normsum desired sum of elements in keld * \return keld normalized version of kels, or NULL on error * or if sum of elements is very close to 0) * *
 * Notes:
 *      (1) If the sum of kernel elements is close to 0, do not
 *          try to calculate the normalized kernel.  Instead,
 *          return a copy of the input kernel, with a warning.
 * 
*/ L_KERNEL * kernelNormalize(L_KERNEL *kels, l_float32 normsum) { l_int32 i, j, sx, sy, cx, cy; l_float32 sum, factor; L_KERNEL *keld; if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", __func__, NULL); kernelGetSum(kels, &sum); if (L_ABS(sum) < 0.00001) { L_WARNING("null sum; not normalizing; returning a copy\n", __func__); return kernelCopy(kels); } kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", __func__, NULL); keld->cy = cy; keld->cx = cx; factor = normsum / sum; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = factor * kels->data[i][j]; return keld; } /*! * \brief kernelInvert() * * \param[in] kels source kel, to be inverted * \return keld spatially inverted, about the origin, or NULL on error * *
 * Notes:
 *      (1) For convolution, the kernel is spatially inverted before
 *          a "correlation" operation is done between the kernel and the image.
 * 
*/ L_KERNEL * kernelInvert(L_KERNEL *kels) { l_int32 i, j, sx, sy, cx, cy; L_KERNEL *keld; if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", __func__, NULL); kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", __func__, NULL); keld->cy = sy - 1 - cy; keld->cx = sx - 1 - cx; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = kels->data[sy - 1 - i][sx - 1 - j]; return keld; } /*----------------------------------------------------------------------* * Helper function * *----------------------------------------------------------------------*/ /*! * \brief create2dFloatArray() * * \param[in] sy rows == height * \param[in] sx columns == width * \return doubly indexed array i.e., an array of sy row pointers, * each of which points to an array of sx floats * *
 * Notes:
 *      (1) The array[%sy][%sx] is indexed in standard "matrix notation",
 *          with the row index first.
 *      (2) The caller kernelCreate() limits the size to < 2^29 pixels.
 * 
*/ l_float32 ** create2dFloatArray(l_int32 sy, l_int32 sx) { l_int32 i; l_float32 **array; if (sx <= 0 || sx > MaxArraySize) return (l_float32 **)ERROR_PTR("sx out of bounds", __func__, NULL); if (sy <= 0 || sy > MaxArraySize) return (l_float32 **)ERROR_PTR("sy out of bounds", __func__, NULL); array = (l_float32 **)LEPT_CALLOC(sy, sizeof(l_float32 *)); for (i = 0; i < sy; i++) array[i] = (l_float32 *)LEPT_CALLOC(sx, sizeof(l_float32)); return array; } /*----------------------------------------------------------------------* * Kernel serialized I/O * *----------------------------------------------------------------------*/ /*! * \brief kernelRead() * * \param[in] fname filename * \return kernel, or NULL on error */ L_KERNEL * kernelRead(const char *fname) { FILE *fp; L_KERNEL *kel; if (!fname) return (L_KERNEL *)ERROR_PTR("fname not defined", __func__, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (L_KERNEL *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); if ((kel = kernelReadStream(fp)) == NULL) { fclose(fp); return (L_KERNEL *)ERROR_PTR_1("kel not returned", fname, __func__, NULL); } fclose(fp); return kel; } /*! * \brief kernelReadStream() * * \param[in] fp file stream * \return kernel, or NULL on error */ L_KERNEL * kernelReadStream(FILE *fp) { l_int32 sy, sx, cy, cx, i, j, ret, version, ignore; L_KERNEL *kel; if (!fp) return (L_KERNEL *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, " Kernel Version %d\n", &version); if (ret != 1) return (L_KERNEL *)ERROR_PTR("not a kernel file", __func__, NULL); if (version != KERNEL_VERSION_NUMBER) return (L_KERNEL *)ERROR_PTR("invalid kernel version", __func__, NULL); if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", &sy, &sx, &cy, &cx) != 4) return (L_KERNEL *)ERROR_PTR("dimensions not read", __func__, NULL); if (sx > MaxArraySize || sy > MaxArraySize) { L_ERROR("sx = %d or sy = %d > %d\n", __func__, sx, sy, MaxArraySize); return NULL; } if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", __func__, NULL); kernelSetOrigin(kel, cy, cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) ignore = fscanf(fp, "%15f", &kel->data[i][j]); ignore = fscanf(fp, "\n"); } ignore = fscanf(fp, "\n"); return kel; } /*! * \brief kernelWrite() * * \param[in] fname output file * \param[in] kel kernel * \return 0 if OK, 1 on error */ l_ok kernelWrite(const char *fname, L_KERNEL *kel) { FILE *fp; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (!kel) return ERROR_INT("kel not defined", __func__, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT_1("stream not opened", fname, __func__, 1); kernelWriteStream(fp, kel); fclose(fp); return 0; } /*! * \brief kernelWriteStream() * * \param[in] fp file stream * \param[in] kel * \return 0 if OK, 1 on error */ l_ok kernelWriteStream(FILE *fp, L_KERNEL *kel) { l_int32 sx, sy, cx, cy, i, j; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!kel) return ERROR_INT("kel not defined", __func__, 1); kernelGetParameters(kel, &sy, &sx, &cy, &cx); fprintf(fp, " Kernel Version %d\n", KERNEL_VERSION_NUMBER); fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) fprintf(fp, "%15.4f", kel->data[i][j]); fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } /*----------------------------------------------------------------------* * Making a kernel from a compiled string * *----------------------------------------------------------------------*/ /*! * \brief kernelCreateFromString() * * \param[in] h, w height, width * \param[in] cy, cx origin * \param[in] kdata * \return kernel of the given size, or NULL on error * *
 * Notes:
 *      (1) The data is an array of chars, in row-major order, giving
 *          space separated integers in the range [-255 ... 255].
 *      (2) The only other formatting limitation is that you must
 *          leave space between the last number in each row and
 *          the double-quote.  If possible, it's also nice to have each
 *          line in the string represent a line in the kernel; e.g.,
 *              static const char *kdata =
 *                  " 20   50   20 "
 *                  " 70  140   70 "
 *                  " 20   50   20 ";
 * 
*/ L_KERNEL * kernelCreateFromString(l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, const char *kdata) { l_int32 n, i, j, index; l_float32 val; L_KERNEL *kel; NUMA *na; if (h < 1) return (L_KERNEL *)ERROR_PTR("height must be > 0", __func__, NULL); if (w < 1) return (L_KERNEL *)ERROR_PTR("width must be > 0", __func__, NULL); if (cy < 0 || cy >= h) return (L_KERNEL *)ERROR_PTR("cy invalid", __func__, NULL); if (cx < 0 || cx >= w) return (L_KERNEL *)ERROR_PTR("cx invalid", __func__, NULL); kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); na = parseStringForNumbers(kdata, " \t\n"); n = numaGetCount(na); if (n != w * h) { kernelDestroy(&kel); numaDestroy(&na); lept_stderr("w = %d, h = %d, num ints = %d\n", w, h, n); return (L_KERNEL *)ERROR_PTR("invalid integer data", __func__, NULL); } index = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { numaGetFValue(na, index, &val); kernelSetElement(kel, i, j, val); index++; } } numaDestroy(&na); return kel; } /*----------------------------------------------------------------------* * Making a kernel from a simple file format * *----------------------------------------------------------------------*/ /*! * \brief kernelCreateFromFile() * * \param[in] filename * \return kernel, or NULL on error * *
 * Notes:
 *      (1) The file contains, in the following order:
 *           ~ Any number of comment lines starting with '#' are ignored
 *           ~ The height and width of the kernel
 *           ~ The y and x values of the kernel origin
 *           ~ The kernel data, formatted as lines of numbers (integers
 *             or floats) for the kernel values in row-major order,
 *             and with no other punctuation.
 *             (Note: this differs from kernelCreateFromString(),
 *             where each line must begin and end with a double-quote
 *             to tell the compiler it's part of a string.)
 *           ~ The kernel specification ends when a blank line,
 *             a comment line, or the end of file is reached.
 *      (2) All lines must be left-justified.
 *      (3) See kernelCreateFromString() for a description of the string
 *          format for the kernel data.  As an example, here are the lines
 *          of a valid kernel description file  In the file, all lines
 *          are left-justified:
 * \code
 *                    # small 3x3 kernel
 *                    3 3
 *                    1 1
 *                    25.5   51    24.3
 *                    70.2  146.3  73.4
 *                    20     50.9  18.4
 * \endcode
 * 
*/ L_KERNEL * kernelCreateFromFile(const char *filename) { char *filestr, *line; l_int32 nlines, i, j, first, index, w, h, cx, cy, n; l_float32 val; size_t size; NUMA *na, *nat; SARRAY *sa; L_KERNEL *kel; if (!filename) return (L_KERNEL *)ERROR_PTR("filename not defined", __func__, NULL); if ((filestr = (char *)l_binaryRead(filename, &size)) == NULL) return (L_KERNEL *)ERROR_PTR_1("file not found", filename, __func__, NULL); if (size == 0) { LEPT_FREE(filestr); return (L_KERNEL *)ERROR_PTR_1("file is empty", filename, __func__, NULL); } sa = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); nlines = sarrayGetCount(sa); /* Find the first data line. */ for (i = 0, first = 0; i < nlines; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (line[0] != '#') { first = i; break; } } /* Find the kernel dimensions and origin location. */ line = sarrayGetString(sa, first, L_NOCOPY); if (sscanf(line, "%d %d", &h, &w) != 2) { sarrayDestroy(&sa); return (L_KERNEL *)ERROR_PTR("error reading h,w", __func__, NULL); } if (h > MaxArraySize || w > MaxArraySize) { L_ERROR("h = %d or w = %d > %d\n", __func__, h, w, MaxArraySize); sarrayDestroy(&sa); return NULL; } line = sarrayGetString(sa, first + 1, L_NOCOPY); if (sscanf(line, "%d %d", &cy, &cx) != 2) { sarrayDestroy(&sa); return (L_KERNEL *)ERROR_PTR("error reading cy,cx", __func__, NULL); } /* Extract the data. This ends when we reach eof, or when we * encounter a line of data that is either a null string or * contains just a newline. */ na = numaCreate(0); for (i = first + 2; i < nlines; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (line[0] == '\0' || line[0] == '\n' || line[0] == '#') break; nat = parseStringForNumbers(line, " \t\n"); numaJoin(na, nat, 0, -1); numaDestroy(&nat); } sarrayDestroy(&sa); n = numaGetCount(na); if (n != w * h) { numaDestroy(&na); lept_stderr("w = %d, h = %d, num ints = %d\n", w, h, n); return (L_KERNEL *)ERROR_PTR("invalid integer data", __func__, NULL); } kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); index = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { numaGetFValue(na, index, &val); kernelSetElement(kel, i, j, val); index++; } } numaDestroy(&na); return kel; } /*----------------------------------------------------------------------* * Making a kernel from a Pix * *----------------------------------------------------------------------*/ /*! * \brief kernelCreateFromPix() * * \param[in] pix * \param[in] cy, cx origin of kernel * \return kernel, or NULL on error * *
 * Notes:
 *      (1) The origin must be positive and within the dimensions of the pix.
 * 
*/ L_KERNEL * kernelCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx) { l_int32 i, j, w, h, d; l_uint32 val; L_KERNEL *kel; if (!pix) return (L_KERNEL *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8) return (L_KERNEL *)ERROR_PTR("pix not 8 bpp", __func__, NULL); if (cy < 0 || cx < 0 || cy >= h || cx >= w) return (L_KERNEL *)ERROR_PTR("(cy, cx) invalid", __func__, NULL); kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix, j, i, &val); kernelSetElement(kel, i, j, (l_float32)val); } } return kel; } /*----------------------------------------------------------------------* * Display a kernel in a pix * *----------------------------------------------------------------------*/ /*! * \brief kernelDisplayInPix() * * \param[in] kel kernel * \param[in] size of grid interiors; odd; either 1 or a minimum size * of 17 is enforced * \param[in] gthick grid thickness; either 0 or a minimum size of 2 * is enforced * \return pix display of kernel, or NULL on error * *
 * Notes:
 *      (1) This gives a visual representation of a kernel.
 *      (2) There are two modes of display:
 *          (a) Grid lines of minimum width 2, surrounding regions
 *              representing kernel elements of minimum size 17,
 *              with a "plus" mark at the kernel origin, or
 *          (b) A pix without grid lines and using 1 pixel per kernel element.
 *      (3) For both cases, the kernel absolute value is displayed,
 *          normalized such that the maximum absolute value is 255.
 *      (4) Large 2D separable kernels should be used for convolution
 *          with two 1D kernels.  However, for the bilateral filter,
 *          the computation time is independent of the size of the
 *          2D content kernel.
 * 
*/ PIX * kernelDisplayInPix(L_KERNEL *kel, l_int32 size, l_int32 gthick) { l_int32 i, j, w, h, sx, sy, cx, cy, width, x0, y0; l_int32 normval; l_float32 minval, maxval, max, val, norm; PIX *pixd, *pixt0, *pixt1; if (!kel) return (PIX *)ERROR_PTR("kernel not defined", __func__, NULL); /* Normalize the max value to be 255 for display */ kernelGetParameters(kel, &sy, &sx, &cy, &cx); kernelGetMinMax(kel, &minval, &maxval); max = L_MAX(maxval, -minval); if (max == 0.0) return (PIX *)ERROR_PTR("kernel elements all 0.0", __func__, NULL); norm = 255.f / (l_float32)max; /* Handle the 1 element/pixel case; typically with large kernels */ if (size == 1 && gthick == 0) { pixd = pixCreate(sx, sy, 8); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { kernelGetElement(kel, i, j, &val); normval = (l_int32)(norm * L_ABS(val)); pixSetPixel(pixd, j, i, normval); } } return pixd; } /* Enforce the constraints for the grid line version */ if (size < 17) { L_WARNING("size < 17; setting to 17\n", __func__); size = 17; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", __func__); gthick = 2; } w = size * sx + gthick * (sx + 1); h = size * sy + gthick * (sy + 1); pixd = pixCreate(w, h, 8); /* Generate grid lines */ for (i = 0; i <= sy; i++) pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), w - 1, gthick / 2 + i * (size + gthick), gthick, L_SET_PIXELS); for (j = 0; j <= sx; j++) pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, gthick / 2 + j * (size + gthick), h - 1, gthick, L_SET_PIXELS); /* Generate mask for each element */ pixt0 = pixCreate(size, size, 1); pixSetAll(pixt0); /* Generate crossed lines for origin pattern */ pixt1 = pixCreate(size, size, 1); width = size / 8; pixRenderLine(pixt1, size / 2, (l_int32)(0.12 * size), size / 2, (l_int32)(0.88 * size), width, L_SET_PIXELS); pixRenderLine(pixt1, (l_int32)(0.15 * size), size / 2, (l_int32)(0.85 * size), size / 2, width, L_FLIP_PIXELS); pixRasterop(pixt1, size / 2 - width, size / 2 - width, 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); /* Paste the patterns in */ y0 = gthick; for (i = 0; i < sy; i++) { x0 = gthick; for (j = 0; j < sx; j++) { kernelGetElement(kel, i, j, &val); normval = (l_int32)(norm * L_ABS(val)); pixSetMaskedGeneral(pixd, pixt0, normval, x0, y0); if (i == cy && j == cx) pixPaintThroughMask(pixd, pixt1, x0, y0, 255 - normval); x0 += size + gthick; } y0 += size + gthick; } pixDestroy(&pixt0); pixDestroy(&pixt1); return pixd; } /*------------------------------------------------------------------------* * Parse string to extract numbers * *------------------------------------------------------------------------*/ /*! * \brief parseStringForNumbers() * * \param[in] str string containing numbers; not changed * \param[in] seps string of characters that can be used between ints * \return numa of numbers found, or NULL on error * *
 * Notes:
 *     (1) The numbers can be ints or floats.
 * 
*/ NUMA * parseStringForNumbers(const char *str, const char *seps) { char *newstr, *head; char *tail = NULL; l_float32 val; NUMA *na; if (!str) return (NUMA *)ERROR_PTR("str not defined", __func__, NULL); newstr = stringNew(str); /* to enforce const-ness of str */ na = numaCreate(0); head = strtokSafe(newstr, seps, &tail); val = atof(head); numaAddNumber(na, val); LEPT_FREE(head); while ((head = strtokSafe(NULL, seps, &tail)) != NULL) { val = atof(head); numaAddNumber(na, val); LEPT_FREE(head); } LEPT_FREE(newstr); return na; } /*------------------------------------------------------------------------* * Simple parametric kernels * *------------------------------------------------------------------------*/ /*! * \brief makeFlatKernel() * * \param[in] height, width * \param[in] cy, cx origin of kernel * \return kernel, or NULL on error * *
 * Notes:
 *      (1) This is the same low-pass filtering kernel that is used
 *          in the block convolution functions.
 *      (2) The kernel origin (%cy, %cx) is typically placed as near
 *          the center of the kernel as possible.  If height and
 *          width are odd, then using %cy = height / 2 and
 *          %cx = width / 2 places the origin at the exact center.
 *      (3) This returns a normalized kernel.
 * 
*/ L_KERNEL * makeFlatKernel(l_int32 height, l_int32 width, l_int32 cy, l_int32 cx) { l_int32 i, j; l_float32 normval; L_KERNEL *kel; if ((kel = kernelCreate(height, width)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", __func__, NULL); kernelSetOrigin(kel, cy, cx); normval = 1.0f / (l_float32)(height * width); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { kernelSetElement(kel, i, j, normval); } } return kel; } /*! * \brief makeGaussianKernel() * * \param[in] halfh sy = 2 * halfh + 1 * \param[in] halfw sx = 2 * halfw + 1 * \param[in] stdev standard deviation * \param[in] max value at (cx,cy) * \return kernel, or NULL on error * *
 * Notes:
 *      (1) The kernel size (sx, sy) = (2 * %halfw + 1, 2 * %halfh + 1)
 *      (2) The kernel center (cx, cy) = (%halfw, %halfh).
 *      (3) %halfw and %halfh are typically equal, and
 *          are typically several times larger than the standard deviation.
 *      (4) If pixConvolve() is invoked with normalization (the sum of
 *          kernel elements = 1.0), use 1.0 for max (or any number that's
 *          not too small or too large).
 * 
*/ L_KERNEL * makeGaussianKernel(l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max) { l_int32 sx, sy, i, j; l_float32 val; L_KERNEL *kel; sx = 2 * halfw + 1; sy = 2 * halfh + 1; if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", __func__, NULL); kernelSetOrigin(kel, halfh, halfw); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { val = expf(-(l_float32)((i - halfh) * (i - halfh) + (j - halfw) * (j - halfw)) / (2. * stdev * stdev)); kernelSetElement(kel, i, j, max * val); } } return kel; } /*! * \brief makeGaussianKernelSep() * * \param[in] halfh sy = 2 * halfh + 1 * \param[in] halfw sx = 2 * halfw + 1 * \param[in] stdev standard deviation * \param[in] max value at (cx,cy) * \param[out] pkelx x part of kernel * \param[out] pkely y part of kernel * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See makeGaussianKernel() for description of input parameters.
 *      (2) These kernels are constructed so that the result of both
 *          normalized and un-normalized convolution will be the same
 *          as when convolving with pixConvolve() using the full kernel.
 *      (3) The trick for the un-normalized convolution is to have the
 *          product of the two kernel elements at (cx,cy) be equal to %max,
 *          not max**2.  That's why %max for kely is 1.0.  If instead
 *          we use sqrt(%max) for both, the results are slightly less
 *          accurate, when compared to using the full kernel in
 *          makeGaussianKernel().
 * 
*/ l_ok makeGaussianKernelSep(l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max, L_KERNEL **pkelx, L_KERNEL **pkely) { if (!pkelx || !pkely) return ERROR_INT("&kelx and &kely not defined", __func__, 1); *pkelx = makeGaussianKernel(0, halfw, stdev, max); *pkely = makeGaussianKernel(halfh, 0, stdev, 1.0); return 0; } /*! * \brief makeDoGKernel() * * \param[in] halfh sy = 2 * halfh + 1 * \param[in] halfw sx = 2 * halfw + 1 * \param[in] stdev standard deviation of narrower gaussian * \param[in] ratio of stdev for wide filter to stdev for narrow one * \return kernel, or NULL on error * *
 * Notes:
 *      (1) The DoG (difference of gaussians) is a wavelet mother
 *          function with null total sum.  By subtracting two blurred
 *          versions of the image, it acts as a bandpass filter for
 *          frequencies passed by the narrow gaussian but stopped
 *          by the wide one.See:
 *               http://en.wikipedia.org/wiki/Difference_of_Gaussians
 *      (2) The kernel size (sx, sy) = (2 * halfw + 1, 2 * halfh + 1).
 *      (3) The kernel center (cx, cy) = (halfw, halfh).
 *      (4) %halfw and %halfh are typically equal, and are typically
 *          several times larger than the standard deviation.
 *      (5) %ratio is the ratio of standard deviations of the wide
 *          to narrow gaussian.  It must be >= 1.0; 1.0 is a no-op.
 *      (6) Because the kernel is a null sum, it must be invoked without
 *          normalization in pixConvolve().
 * 
*/ L_KERNEL * makeDoGKernel(l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 ratio) { l_int32 sx, sy, i, j; l_float32 pi, squaredist, highnorm, lownorm, val; L_KERNEL *kel; sx = 2 * halfw + 1; sy = 2 * halfh + 1; if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", __func__, NULL); kernelSetOrigin(kel, halfh, halfw); pi = 3.1415926535f; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { squaredist = (l_float32)((i - halfh) * (i - halfh) + (j - halfw) * (j - halfw)); highnorm = 1.f / (2 * stdev * stdev); lownorm = highnorm / (ratio * ratio); val = (highnorm / pi) * expf(-(highnorm * squaredist)) - (lownorm / pi) * expf(-(lownorm * squaredist)); kernelSetElement(kel, i, j, val); } } return kel; } leptonica-1.86.0/src/leptonica-license.txt000066400000000000000000000027611506303110300205100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001-2020 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ leptonica-1.86.0/src/leptwin.c000066400000000000000000000262471506303110300162040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file leptwin.c *
 *
 *    This file contains Leptonica routines needed only on Microsoft Windows
 *
 *    Currently it only contains one public function
 *    (based on dibsectn.c by jmh, 03-30-98):
 *
 *      HBITMAP    pixGetWindowsHBITMAP(PIX *pix)
 * 
*/ #ifdef _WIN32 #include #include #include "allheaders.h" #include "leptwin.h" /* Macro to determine the number of bytes per line in the DIB bits. * This accounts for DWORD alignment by adding 31 bits, * then dividing by 32, then rounding up to the next highest * count of 4-bytes. Then, we multiply by 4 to get the total byte count. */ #define BYTESPERLINE(Width, BPP) ((l_int32)((((DWORD)(Width) * (DWORD)(BPP) + 31) >> 5)) << 2) /* ********************************************************************** DWORD DSImageBitsSize(LPBITMAPINFO pbmi) PARAMETERS: LPBITMAPINFO - pointer to a BITMAPINFO describing a DIB RETURNS: DWORD - the size, in bytes, of the DIB's image bits REMARKS: Calculates and returns the size, in bytes, of the image bits for the DIB described by the BITMAPINFO. ********************************************************************** */ static DWORD DSImageBitsSize(LPBITMAPINFO pbmi) { switch(pbmi->bmiHeader.biCompression) { case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or * CreateDIBSection with this pbmi */ case BI_RLE4: return pbmi->bmiHeader.biSizeImage; default: /* should not have to use "default" */ case BI_RGB: case BI_BITFIELDS: return BYTESPERLINE(pbmi->bmiHeader.biWidth, \ pbmi->bmiHeader.biBitCount * pbmi->bmiHeader.biPlanes) * pbmi->bmiHeader.biHeight; } } /* ********************************************************************** DWORD ImageBitsSize(HBITMAP hbitmap) PARAMETERS: HBITMAP - hbitmap RETURNS: DWORD - the size, in bytes, of the HBITMAP's image bits REMARKS: Calculates and returns the size, in bytes, of the image bits for the DIB described by the HBITMAP. ********************************************************************** */ static DWORD ImageBitsSize(HBITMAP hBitmap) { DIBSECTION ds; GetObject(hBitmap, sizeof(DIBSECTION), &ds); switch( ds.dsBmih.biCompression ) { case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or * CreateDIBSection with this pbmi */ case BI_RLE4: return ds.dsBmih.biSizeImage; default: /* should not have to use "default" */ case BI_RGB: case BI_BITFIELDS: return BYTESPERLINE(ds.dsBmih.biWidth, \ ds.dsBmih.biBitCount * ds.dsBmih.biPlanes) * ds.dsBmih.biHeight; } } /*! * \brief setColormap(LPBITMAPINFO pbmi, PIXCMAP *cmap) * * \param[in] pbmi pointer to a BITMAPINFO describing a DIB * \param[in] cmap leptonica colormap * \return number of colors in cmap */ static int setColormap(LPBITMAPINFO pbmi, PIXCMAP *cmap) { l_int32 i, nColors, rval, gval, bval; nColors = pixcmapGetCount(cmap); for (i = 0; i < nColors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); pbmi->bmiColors[i].rgbRed = rval; pbmi->bmiColors[i].rgbGreen = gval; pbmi->bmiColors[i].rgbBlue = bval; pbmi->bmiColors[i].rgbReserved = 0; } pbmi->bmiHeader.biClrUsed = nColors; return nColors; } /* ********************************************************************** HBITMAP DSCreateBitmapInfo(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) PARAMETERS: l_int32 width - Desired width of the DIBSection l_int32 height - Desired height of the DIBSection l_int32 depth - Desired bit-depth of the DIBSection PIXCMAP cmap - leptonica colormap for depths < 16 RETURNS: LPBITMAPINFO - a ptr to BITMAPINFO of the desired size and bit-depth NULL on failure REMARKS: Creates a BITMAPINFO based on the criteria passed in as parameters. ********************************************************************** */ static LPBITMAPINFO DSCreateBitmapInfo(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) { l_int32 nInfoSize; LPBITMAPINFO pbmi; LPDWORD pMasks; nInfoSize = sizeof(BITMAPINFOHEADER); if( depth <= 8 ) nInfoSize += sizeof(RGBQUAD) * (1 << depth); if((depth == 16) || (depth == 32)) nInfoSize += (3 * sizeof(DWORD)); /* Create the header big enough to contain color table and * bitmasks if needed. */ pbmi = (LPBITMAPINFO)malloc(nInfoSize); if (!pbmi) return NULL; ZeroMemory(pbmi, nInfoSize); pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = width; pbmi->bmiHeader.biHeight = height; pbmi->bmiHeader.biPlanes = 1; pbmi->bmiHeader.biBitCount = depth; /* override below for 16 and 32 bpp */ pbmi->bmiHeader.biCompression = BI_RGB; /* ?? not sure if this is right? */ pbmi->bmiHeader.biSizeImage = DSImageBitsSize(pbmi); pbmi->bmiHeader.biXPelsPerMeter = 0; pbmi->bmiHeader.biYPelsPerMeter = 0; pbmi->bmiHeader.biClrUsed = 0; /* override below */ pbmi->bmiHeader.biClrImportant = 0; switch(depth) { case 24: /* 24bpp requires no special handling */ break; case 16: /* if it's 16bpp, fill in the masks and override the * compression. These are the default masks -- you * could change them if needed. */ pMasks = (LPDWORD)(pbmi->bmiColors); pMasks[0] = 0x00007c00; pMasks[1] = 0x000003e0; pMasks[2] = 0x0000001f; pbmi->bmiHeader.biCompression = BI_BITFIELDS; break; case 32: /* if it's 32 bpp, fill in the masks and override * the compression */ pMasks = (LPDWORD)(pbmi->bmiColors); /*pMasks[0] = 0x00ff0000; */ /*pMasks[1] = 0x0000ff00; */ /*pMasks[2] = 0x000000ff; */ pMasks[0] = 0xff000000; pMasks[1] = 0x00ff0000; pMasks[2] = 0x0000ff00; pbmi->bmiHeader.biCompression = BI_BITFIELDS; break; case 8: case 4: case 1: setColormap(pbmi, cmap); break; } return pbmi; } /* ********************************************************************** HBITMAP DSCreateDIBSection(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) PARAMETERS: l_int32 width - Desired width of the DIBSection l_int32 height - Desired height of the DIBSection l_int32 depth - Desired bit-depth of the DIBSection PIXCMAP cmap - leptonica colormap for depths < 16 RETURNS: HBITMAP - a DIBSection HBITMAP of the desired size and bit-depth NULL on failure REMARKS: Creates a DIBSection based on the criteria passed in as parameters. ********************************************************************** */ static HBITMAP DSCreateDIBSection(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) { HBITMAP hBitmap; l_int32 nInfoSize; LPBITMAPINFO pbmi; HDC hRefDC; LPBYTE pBits; pbmi = DSCreateBitmapInfo (width, height, depth, cmap); if (!pbmi) return NULL; hRefDC = GetDC(NULL); hBitmap = CreateDIBSection(hRefDC, pbmi, DIB_RGB_COLORS, (void **) &pBits, NULL, 0); nInfoSize = GetLastError(); ReleaseDC(NULL, hRefDC); free(pbmi); return hBitmap; } /*! * \brief pixGetWindowsHBITMAP() * * \param[in] pix * \return Windows hBitmap, or NULL on error * *
 * Notes:
 *      (1) It's the responsibility of the caller to destroy the
 *          returned hBitmap with a call to DeleteObject (or with
 *          something that eventually calls DeleteObject).
 * 
*/ HBITMAP pixGetWindowsHBITMAP(PIX *pix) { l_int32 width, height, depth; l_uint32 *data; HBITMAP hBitmap = NULL; BITMAP bm; DWORD imageBitsSize; PIX *pixt = NULL; PIXCMAP *cmap; if (!pix) return (HBITMAP)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &width, &height, &depth); cmap = pixGetColormap(pix); if (depth == 24) depth = 32; if (depth == 2) { pixt = pixConvert2To8(pix, 0, 85, 170, 255, TRUE); if (!pixt) return (HBITMAP)ERROR_PTR("unable to convert pix from 2bpp to 8bpp", __func__, NULL); depth = pixGetDepth(pixt); cmap = pixGetColormap(pixt); } if (depth < 16) { if (!cmap) cmap = pixcmapCreateLinear(depth, 1< #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern HBITMAP pixGetWindowsHBITMAP( PIX *pixs ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* LEPTONICA_LEPTWIN_H */ #endif /* _WIN32 */ leptonica-1.86.0/src/libversions.c000066400000000000000000000140331506303110300170470ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file libversions.c *
 *
 *       Image library version number
 *           char      *getImagelibVersions()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #if HAVE_LIBGIF #include "gif_lib.h" #endif #if HAVE_LIBJPEG /* jpeglib.h includes jconfig.h, which makes the error of setting * #define HAVE_STDLIB_H * which conflicts with config_auto.h (where it is set to 1) and results * for some gcc compiler versions in a warning. The conflict is harmless * but we suppress it by undefining the variable. */ #undef HAVE_STDLIB_H #include "jpeglib.h" #include "jerror.h" #endif #if HAVE_LIBPNG #include "png.h" #endif #if HAVE_LIBTIFF #include "tiffio.h" #endif #if HAVE_LIBZ #include "zlib.h" #endif #if HAVE_LIBWEBP #include "webp/encode.h" #endif #if HAVE_LIBJP2K #ifdef LIBJP2K_HEADER #include LIBJP2K_HEADER #else #include #endif #endif /*---------------------------------------------------------------------* * Image Library Version number * *---------------------------------------------------------------------*/ /*! * \brief getImagelibVersions() * *
 * Notes:
 *      (1) This returns a string of version numbers; e.g.,
 *            libgif 5.1.4
 *            libjpeg 8b (libjpeg-turbo 2.0.3)
 *            libpng 1.6.37
 *            libtiff 4.1.0
 *            zlib 1.2.11
 *            libwebp 0.6.1
 *            libopenjp2 2.5.0
 *      (2) The caller must free the memory.
 * 
*/ char * getImagelibVersions(void) { char buf[128]; l_int32 first = TRUE; char *versionNumP; char *nextTokenP; char *versionStrP = NULL; #if HAVE_LIBGIF first = FALSE; stringJoinIP(&versionStrP, "libgif "); #ifdef GIFLIB_MAJOR snprintf(buf, sizeof(buf), "%d.%d.%d", GIFLIB_MAJOR, GIFLIB_MINOR, GIFLIB_RELEASE); #else stringCopy(buf, "4.1.6(?)", sizeof(buf)); #endif stringJoinIP(&versionStrP, buf); #endif /* HAVE_LIBGIF */ #if HAVE_LIBJPEG { struct jpeg_compress_struct cinfo = { 0 }; struct jpeg_error_mgr err = { 0 }; char buffer[JMSG_LENGTH_MAX]; cinfo.err = jpeg_std_error(&err); err.msg_code = JMSG_VERSION; (*err.format_message) ((j_common_ptr ) &cinfo, buffer); if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "libjpeg "); versionNumP = strtokSafe(buffer, " ", &nextTokenP); stringJoinIP(&versionStrP, versionNumP); LEPT_FREE(versionNumP); #if defined(LIBJPEG_TURBO_VERSION) /* To stringify the result of expansion of a macro argument, * you must use two levels of macros. See: * https://gcc.gnu.org/onlinedocs/cpp/Stringification.html */ #define l_xstr(s) l_str(s) #define l_str(s) #s snprintf(buf, sizeof(buf), " (libjpeg-turbo %s)", l_xstr(LIBJPEG_TURBO_VERSION)); stringJoinIP(&versionStrP, buf); #endif /* LIBJPEG_TURBO_VERSION */ } #endif /* HAVE_LIBJPEG */ #if HAVE_LIBPNG if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "libpng "); stringJoinIP(&versionStrP, png_get_libpng_ver(NULL)); #endif /* HAVE_LIBPNG */ #if HAVE_LIBTIFF if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "libtiff "); versionNumP = strtokSafe((char *)TIFFGetVersion(), " \n", &nextTokenP); LEPT_FREE(versionNumP); versionNumP = strtokSafe(NULL, " \n", &nextTokenP); LEPT_FREE(versionNumP); versionNumP = strtokSafe(NULL, " \n", &nextTokenP); stringJoinIP(&versionStrP, versionNumP); LEPT_FREE(versionNumP); #endif /* HAVE_LIBTIFF */ #if HAVE_LIBZ if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "zlib "); stringJoinIP(&versionStrP, ZLIB_VERSION); #endif /* HAVE_LIBZ */ #if HAVE_LIBWEBP { l_int32 val; char buf[32]; if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "libwebp "); val = WebPGetEncoderVersion(); snprintf(buf, sizeof(buf), "%d.%d.%d", val >> 16, (val >> 8) & 0xff, val & 0xff); stringJoinIP(&versionStrP, buf); } #endif /* HAVE_LIBWEBP */ #if HAVE_LIBJP2K { const char *version; if (!first) stringJoinIP(&versionStrP, " : "); first = FALSE; stringJoinIP(&versionStrP, "libopenjp2 "); version = opj_version(); stringJoinIP(&versionStrP, version); } #endif /* HAVE_LIBJP2K */ return versionStrP; } leptonica-1.86.0/src/list.c000066400000000000000000000617121506303110300154710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file list.c *
 *
 *      Inserting and removing elements
 *
 *           void      listDestroy()
 *           DLLIST   *listAddToHead()
 *           l_int32   listAddToTail()
 *           l_int32   listInsertBefore()
 *           l_int32   listInsertAfter()
 *           void     *listRemoveElement()
 *           void     *listRemoveFromHead()
 *           void     *listRemoveFromTail()
 *
 *      Other list operations
 *
 *           DLLIST   *listFindElement()
 *           DLLIST   *listFindTail()
 *           l_int32   listGetCount()
 *           l_int32   listReverse()
 *           DLLIST   *listJoin()
 *
 *      Lists are much harder to handle than arrays.  There is
 *      more overhead for the programmer, both cognitive and
 *      codewise, and more likelihood that an error can be made.
 *      For that reason, lists should only be used when it is
 *      inefficient to use arrays, such as when elements are
 *      routinely inserted or deleted from inside arrays whose
 *      average size is greater than about 10.
 *
 *      A list of data structures can be implemented in a number
 *      of ways.  The two most popular are:
 *
 *         (1) The list can be composed of a linked list of
 *             pointer cells ("cons cells"), where the data structures
 *             are hung off the cells.  This is more difficult
 *             to use because you have to keep track of both
 *             your hanging data and the cell structures.
 *             It requires 3 pointers for every data structure
 *             that is put in a list.  There is no problem
 *             cloning (using reference counts) for structures that
 *             are put in such a list.  We implement lists by this
 *             method here.
 *
 *         (2) The list pointers can be inserted directly into
 *             the data structures.  This is easy to implement
 *             and easier to use, but it adds 2 ptrs of overhead
 *             to every data structure in which the ptrs are embedded.
 *             It also requires special care not to put the ptrs
 *             in any data that is cloned with a reference count;
 *             else your lists will break.
 *
 *      Writing C code that uses list pointers explicitly to make
 *      and alter lists is difficult and prone to error.
 *      Consequently, a generic list utility that handles lists
 *      of arbitrary objects and doesn't force the programmer to
 *      touch the "next" and "prev" pointers, is quite useful.
 *      Such functions are provided here.   However, the usual
 *      situation requires traversing a list and applying some
 *      function to one or more of the list elements.  Macros
 *      for traversing the list are, in general, necessary, to
 *      achieve the goal of invisibly handling all "next" and "prev"
 *      pointers in generic lists.  We provide macros for
 *      traversing a list in both forward and reverse directions.
 *
 *      Because of the typing in C, implementation of a general
 *      list utility requires casting.  If macros are used, the
 *      casting can be done implicitly; otherwise, using functions,
 *      some of the casts must be explicit.  Fortunately, this
 *      can be implemented with void* so the programmer using
 *      the library will not have to make any casts!  (Unless you
 *      compile with g++, in which case the rules on implicit
 *      conversion are more strict.)
 *
 *      For example, to add an arbitrary data structure foo to the
 *      tail of a list, use
 *             listAddToTail(&head, &tail, pfoo);
 *      where head and tail are list cell ptrs and pfoo is
 *      a pointer to the foo object.
 *      And to remove an arbitrary data structure foo from a
 *      list, when you know the list cell element it is hanging from,
 *      use
 *             pfoo = listRemoveElement(&head, elem)
 *      where head and elem are list cell ptrs and pfoo is a pointer
 *      to the foo object.  No casts are required for foo in
 *      either direction in ANSI C.  (However, casts are
 *      required for ANSI C++).
 *
 *      We use lists that are composed of doubly-linked
 *      cells with data structures hanging off the cells.
 *      We use doubly-linked cells to simplify insertion
 *      and deletion, and to allow operations to proceed in either
 *      direction along the list.  With doubly-linked lists,
 *      it is tempting to make them circular, by setting head->prev
 *      to the tail of the list and tail->next to the head.
 *      The circular list costs nothing extra in storage, and
 *      allows operations to proceed from either end of the list
 *      with equal speed.  However, the circular link adds
 *      cognitive overhead for the application programmer in
 *      general, and it greatly complicates list traversal when
 *      arbitrary list elements can be added or removed as you
 *      move through.  It can be done, but in the spirit of
 *      simplicity, we avoid the temptation.  The price to be paid
 *      is the extra cost to find the tail of a list -- a full
 *      traversal -- before the tail can be used.  This is a
 *      cheap price to pay to avoid major headaches and buggy code.
 *
 *      When you are only applying some function to each element
 *      in a list, you can go either forwards or backwards.
 *      To run through a list forwards, use:
 * \code
 *          for (elem = head; elem; elem = nextelem) {
 *              nextelem = elem->next;   (in case we destroy elem)
 *              data>
 *          }
 * \endcode
 *      To run through a list backwards, find the tail and use:
 *
 *          for (elem = tail; elem; elem = prevelem) {
 #              prevelem = elem->prev;  (in case we destroy elem)
 *              data>
 *          }
 *
 *      Even though these patterns are very simple, they are so common
 *      that we've provided macros for them in list.h.  Using the
 *      macros, this becomes:
 * \code
 *          L_BEGIN_LIST_FORWARD(head, elem)
 *              data>
 *          L_END_LIST
 *
 *          L_BEGIN_LIST_REVERSE(tail, elem)
 *              data>
 *          L_END_LIST
 * \endcode
 *      Note again that with macros, the application programmer does
 *      not need to refer explicitly to next and prev fields.  Also,
 *      in the reverse case, note that we do not explicitly
 *      show the head of the list.  However, the head of the list
 *      is always in scope, and functions can be called within the
 *      iterator that change the head.
 *
 *      Some special cases are simpler.  For example, when
 *      removing all items from the head of the list, you can use
 * \code
 *          while (head) {
 *              obj = listRemoveFromHead(&head);
 *              
 *          }
 * \endcode
 *      Removing successive elements from the tail is equally simple:
 * \code
 *          while (tail) {
 *              obj = listRemoveFromTail(&head, &tail);
 *              
 *          }
 * \endcode
 *      When removing an arbitrary element from a list, use
 * \code
 *              obj = listRemoveElement(&head, elem);
 * \endcode
 *      All the listRemove*() functions hand you the object,
 *      destroy the list cell to which it was attached, and
 *      reset the list pointers if necessary.
 *
 *      Several other list operations, that do not involve
 *      inserting or removing objects, are also provided.
 *      The function listFindElement() locates a list pointer
 *      by matching the object hanging on it to a given
 *      object.  The function listFindTail() gets a handle
 *      to the tail list ptr, allowing backwards traversals of
 *      the list.  listGetCount() gives the number of elements
 *      in a list.  Functions that reverse a list and concatenate
 *      two lists are also provided.
 *
 *      These functions can be modified for efficiency in the
 *      situation where there is a large amount of creation and
 *      destruction of list cells.  If millions of cells are
 *      made and destroyed, but a relatively small number are
 *      around at any time, the list cells can be stored for
 *      later re-use in a stack (see the generic stack functions
 *      in stack.c).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*---------------------------------------------------------------------* * Inserting and removing elements * *---------------------------------------------------------------------*/ /*! * \brief listDestroy() * * \param[in,out] phead head of list; will be set to null before returning * \return void * *
 * Notes:
 *      (1) This only destroys the cons cells.  Before destroying
 *          the list, it is necessary to remove all data and set the
 *          data pointers in each cons cell to NULL.
 *      (2) listDestroy() will give a warning message for each data
 *          ptr that is not NULL.
 * 
*/ void listDestroy(DLLIST **phead) { DLLIST *elem, *next, *head; if (phead == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((head = *phead) == NULL) return; for (elem = head; elem; elem = next) { if (elem->data) L_WARNING("list data ptr is not null\n", __func__); next = elem->next; LEPT_FREE(elem); } *phead = NULL; } /*! * \brief listAddToHead() * * \param[in,out] phead [optional] input head * \param[in] data void* ptr, to be added * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This makes a new cell, attaches %data, and adds the
 *          cell to the head of the list.
 *      (2) When consing from NULL, be sure to initialize head to NULL
 *          before calling this function.
 * 
*/ l_ok listAddToHead(DLLIST **phead, void *data) { DLLIST *cell, *head; if (!phead) return ERROR_INT("&head not defined", __func__, 1); head = *phead; if (!data) return ERROR_INT("data not defined", __func__, 1); cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; } else { cell->prev = NULL; cell->next = head; head->prev = cell; } *phead = cell; return 0; } /*! * \brief listAddToTail() * * \param[in,out] phead [may be updated], can be NULL * \param[in,out] ptail [updated], can be NULL * \param[in] data void* ptr, to be hung on tail cons cell * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This makes a new cell, attaches %data, and adds the
 *          cell to the tail of the list.
 *      (2) &head is input to allow the list to be "cons'd" up from NULL.
 *      (3) &tail is input to allow the tail to be updated
 *          for efficient sequential operation with this function.
 *      (4) We assume that if *phead and/or *ptail are not NULL,
 *          then they are valid addresses.  Therefore:
 *           (a) when consing from NULL, be sure to initialize both
 *               head and tail to NULL.
 *           (b) when tail == NULL for an existing list, the tail
 *               will be found and updated.
 * 
*/ l_ok listAddToTail(DLLIST **phead, DLLIST **ptail, void *data) { DLLIST *cell, *head, *tail; if (!phead) return ERROR_INT("&head not defined", __func__, 1); head = *phead; if (!ptail) return ERROR_INT("&tail not defined", __func__, 1); if (!data) return ERROR_INT("data not defined", __func__, 1); cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); cell->data = data; if (!head) { /* Start the list and initialize the ptrs. *ptail * should also have been initialized to NULL */ cell->prev = NULL; cell->next = NULL; *phead = cell; *ptail = cell; } else { if ((tail = *ptail) == NULL) tail = listFindTail(head); cell->prev = tail; cell->next = NULL; tail->next = cell; *ptail = cell; } return 0; } /*! * \brief listInsertBefore() * * \param[in,out] phead [optional] input head * \param[in] elem list element to be inserted in front of; * must be NULL if head is NULL * \param[in] data void* address, to be added * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This can be called on a null list, in which case both
 *          head and elem must be null.
 *      (2) If you are searching through a list, looking for a condition
 *          to add an element, you can do something like this:
 * \code
 *            L_BEGIN_LIST_FORWARD(head, elem)
 *                
 *                listInsertBefore(&head, elem, data);
 *            L_END_LIST
 * \endcode
 * 
*/ l_ok listInsertBefore(DLLIST **phead, DLLIST *elem, void *data) { DLLIST *cell, *head; if (!phead) return ERROR_INT("&head not defined", __func__, 1); head = *phead; if (!data) return ERROR_INT("data not defined", __func__, 1); if ((!head && elem) || (head && !elem)) return ERROR_INT("head and elem not consistent", __func__, 1); /* New cell to insert */ cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; *phead = cell; } else if (head == elem) { /* insert before head of list */ cell->prev = NULL; cell->next = head; head->prev = cell; *phead = cell; } else { /* insert before elem and after head of list */ cell->prev = elem->prev; cell->next = elem; elem->prev->next = cell; elem->prev = cell; } return 0; } /*! * \brief listInsertAfter() * * \param[in,out] phead [optional] input head * \param[in] elem list element to be inserted after; * must be NULL if head is NULL * \param[in] data void* ptr, to be added * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This can be called on a null list, in which case both
 *          head and elem must be null.  The head is included
 *          in the call to allow "consing" up from NULL.
 *      (2) If you are searching through a list, looking for a condition
 *          to add an element, you can do something like this:
 * \code
 *            L_BEGIN_LIST_FORWARD(head, elem)
 *                
 *                listInsertAfter(&head, elem, data);
 *            L_END_LIST
 * \endcode
 * 
*/ l_ok listInsertAfter(DLLIST **phead, DLLIST *elem, void *data) { DLLIST *cell, *head; if (!phead) return ERROR_INT("&head not defined", __func__, 1); head = *phead; if (!data) return ERROR_INT("data not defined", __func__, 1); if ((!head && elem) || (head && !elem)) return ERROR_INT("head and elem not consistent", __func__, 1); /* New cell to insert */ cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; *phead = cell; } else if (elem->next == NULL) { /* insert after last */ cell->prev = elem; cell->next = NULL; elem->next = cell; } else { /* insert after elem and before the end */ cell->prev = elem; cell->next = elem->next; elem->next->prev = cell; elem->next = cell; } return 0; } /*! * \brief listRemoveElement() * * \param[in,out] phead input head; can be changed * \param[in] elem list element to be removed * \return data void* struct on cell * *
 * Notes:
 *      (1) in ANSI C, it is not necessary to cast return to actual type; e.g.,
 *             pix = listRemoveElement(&head, elem);
 *          but in ANSI C++, it is necessary to do the cast:
 *             pix = (Pix *)listRemoveElement(&head, elem);
 * 
*/ void * listRemoveElement(DLLIST **phead, DLLIST *elem) { void *data; DLLIST *head; if (!phead) return (void *)ERROR_PTR("&head not defined", __func__, NULL); head = *phead; if (!head) return (void *)ERROR_PTR("head not defined", __func__, NULL); if (!elem) return (void *)ERROR_PTR("elem not defined", __func__, NULL); data = elem->data; if (head->next == NULL) { /* only one */ if (elem != head) return (void *)ERROR_PTR("elem must be head", __func__, NULL); *phead = NULL; } else if (head == elem) { /* first one */ elem->next->prev = NULL; *phead = elem->next; } else if (elem->next == NULL) { /* last one */ elem->prev->next = NULL; } else { /* neither the first nor the last one */ elem->next->prev = elem->prev; elem->prev->next = elem->next; } LEPT_FREE(elem); return data; } /*! * \brief listRemoveFromHead() * * \param[in,out] phead head of list; updated * \return data void* struct on cell, or NULL on error * *
 * Notes:
 *      (1) in ANSI C, it is not necessary to cast return to actual type; e.g.,
 *            pix = listRemoveFromHead(&head);
 *          but in ANSI C++, it is necessary to do the cast; e.g.,
 *            pix = (Pix *)listRemoveFromHead(&head);
 * 
*/ void * listRemoveFromHead(DLLIST **phead) { DLLIST *head; void *data; if (!phead) return (void *)ERROR_PTR("&head not defined", __func__, NULL); if ((head = *phead) == NULL) return (void *)ERROR_PTR("head not defined", __func__, NULL); if (head->next == NULL) { /* only one */ *phead = NULL; } else { head->next->prev = NULL; *phead = head->next; } data = head->data; LEPT_FREE(head); return data; } /*! * \brief listRemoveFromTail() * * \param[in,out] phead list head must NOT be NULL; may be changed * \param[in,out] ptail list tail may be NULL; always updated * \return data void* struct on cell or NULL on error * *
 * Notes:
 *      (1) We include &head so that it can be set to NULL if
 *          if the only element in the list is removed.
 *      (2) The function is relying on the fact that if tail is
 *          not NULL, then is is a valid address.  You can use
 *          this function with tail == NULL for an existing list, in
 *          which case  the tail is found and updated, and the
 *          removed element is returned.
 *      (3) In ANSI C, it is not necessary to cast return to actual type; e.g.,
 *            pix = listRemoveFromTail(&head, &tail);
 *          but in ANSI C++, it is necessary to do the cast; e.g.,
 *            pix = (Pix *)listRemoveFromTail(&head, &tail);
 * 
*/ void * listRemoveFromTail(DLLIST **phead, DLLIST **ptail) { DLLIST *head, *tail; void *data; if (!phead) return (void *)ERROR_PTR("&head not defined", __func__, NULL); if ((head = *phead) == NULL) return (void *)ERROR_PTR("head not defined", __func__, NULL); if (!ptail) return (void *)ERROR_PTR("&tail not defined", __func__, NULL); if ((tail = *ptail) == NULL) tail = listFindTail(head); if (head->next == NULL) { /* only one */ *phead = NULL; *ptail = NULL; } else { tail->prev->next = NULL; *ptail = tail->prev; } data = tail->data; LEPT_FREE(tail); return data; } /*---------------------------------------------------------------------* * Other list operations * *---------------------------------------------------------------------*/ /*! * \brief listFindElement() * * \param[in] head list head * \param[in] data void* address, to be searched for * \return cell the containing cell, or NULL if not found or on error * *
 * Notes:
 *      (1) This returns a ptr to the cell, which is still embedded in
 *          the list.
 *      (2) This handle and the attached data have not been copied or
 *          reference counted, so they must not be destroyed.  This
 *          violates our basic rule that every handle returned from a
 *          function is owned by that function and must be destroyed,
 *          but if rules aren't there to be broken, why have them?
 * 
*/ DLLIST * listFindElement(DLLIST *head, void *data) { DLLIST *cell; if (!head) return (DLLIST *)ERROR_PTR("head not defined", __func__, NULL); if (!data) return (DLLIST *)ERROR_PTR("data not defined", __func__, NULL); for (cell = head; cell; cell = cell->next) { if (cell->data == data) return cell; } return NULL; } /*! * \brief listFindTail() * * \param[in] head * \return tail, or NULL on error */ DLLIST * listFindTail(DLLIST *head) { DLLIST *cell; if (!head) return (DLLIST *)ERROR_PTR("head not defined", __func__, NULL); for (cell = head; cell; cell = cell->next) { if (cell->next == NULL) return cell; } return (DLLIST *)ERROR_PTR("tail not found !!", __func__, NULL); } /*! * \brief listGetCount() * * \param[in] head of list * \return number of elements; 0 if no list or on error */ l_int32 listGetCount(DLLIST *head) { l_int32 count; DLLIST *elem; if (!head) return ERROR_INT("head not defined", __func__, 0); count = 0; for (elem = head; elem; elem = elem->next) count++; return count; } /*! * \brief listReverse() * * \param[in,out] phead list head; may be changed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This reverses the list in-place.
 * 
*/ l_ok listReverse(DLLIST **phead) { void *obj; /* whatever */ DLLIST *head, *rhead; if (!phead) return ERROR_INT("&head not defined", __func__, 1); if ((head = *phead) == NULL) return ERROR_INT("head not defined", __func__, 1); rhead = NULL; while (head) { obj = listRemoveFromHead(&head); listAddToHead(&rhead, obj); } *phead = rhead; return 0; } /*! * \brief listJoin() * * \param[in,out] phead1 head of first list; may be changed * \param[in,out] phead2 head of second list; to be nulled * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The concatenated list is returned with head1 as the new head.
 *      (2) Both input ptrs must exist, though either can have the value NULL.
 * 
*/ l_ok listJoin(DLLIST **phead1, DLLIST **phead2) { void *obj; DLLIST *head1, *head2, *tail1; if (!phead1) return ERROR_INT("&head1 not defined", __func__, 1); if (!phead2) return ERROR_INT("&head2 not defined", __func__, 1); /* If no list2, just return list1 unchanged */ if ((head2 = *phead2) == NULL) return 0; /* If no list1, just return list2 */ if ((head1 = *phead1) == NULL) { *phead1 = head2; *phead2 = NULL; return 0; } /* General case for concatenation into list 1 */ tail1 = listFindTail(head1); while (head2) { obj = listRemoveFromHead(&head2); listAddToTail(&head1, &tail1, obj); } *phead2 = NULL; return 0; } leptonica-1.86.0/src/list.h000066400000000000000000000067301506303110300154750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_LIST_H #define LEPTONICA_LIST_H /*! * \file list.h * *
 *       Cell for double-linked lists
 *
 *       This allows composition of a list of cells with
 *           prev, next and data pointers.  Generic data
 *           structures hang on the list cell data pointers.
 *
 *       The list is not circular because that would add much
 *           complexity in traversing the list under general
 *           conditions where list cells can be added and removed.
 *           The only disadvantage of not having the head point to
 *           the last cell is that the list must be traversed to
 *           find its tail.  However, this traversal is fast, and
 *           the listRemoveFromTail() function updates the tail
 *           so there is no searching overhead with repeated use.
 *
 *       The list macros are used to run through a list, and their
 *       use is encouraged.  They are invoked, e.g., as
 *
 *             DLLIST  *head, *elem;
 *             ...
 *             L_BEGIN_LIST_FORWARD(head, elem)
 *                 data >
 *             L_END_LIST
 * 
*/ struct DoubleLinkedList { struct DoubleLinkedList *prev; struct DoubleLinkedList *next; void *data; }; typedef struct DoubleLinkedList DLLIST; /*! Simple list traverse macro - forward */ #define L_BEGIN_LIST_FORWARD(head, element) \ { \ DLLIST *_leptvar_nextelem_; \ for ((element) = (head); (element); (element) = _leptvar_nextelem_) { \ _leptvar_nextelem_ = (element)->next; /*! Simple list traverse macro - reverse */ #define L_BEGIN_LIST_REVERSE(tail, element) \ { \ DLLIST *_leptvar_prevelem_; \ for ((element) = (tail); (element); (element) = _leptvar_prevelem_) { \ _leptvar_prevelem_ = (element)->prev; /*! Simple list traverse macro - end of a list traverse */ #define L_END_LIST }} #endif /* LEPTONICA_LIST_H */ leptonica-1.86.0/src/mainpage.txt000066400000000000000000000037041506303110300166710ustar00rootroot00000000000000/*! * \mainpage Leptonica Main Page * * \section intro Introduction * Leptonica is a pedagogically-oriented open source site containing * software that is broadly useful for image processing and image analysis applications. * * \section features Featured operations are * * + Rasterop (a.k.a. bitblt) * + Affine transformations (scaling, translation, rotation, shear) on images of arbitrary pixel depth * + Binary and grayscale morphology, rank order, and convolution * + Seedfill and connected components * + Image transformations combining changes in scale and pixel depth * + Pixelwise masking, blending, enhancement, arithmetic ops, etc. * + Ancillary operations include * * + I/O for standard image formats * + Utilities to handle arrays of image-related data types * + Utilities for generic stacks, queues, heaps and lists; * + and for byte queues and arrays of numbers and strings * * \section examples Example applications include * * + Octcube-based color quantization, with and without dithering * + Modified median-cut color quantization, with and without dithering * + Skew determination of text images * + Segmentation of page images with mixed text and images * + jbig2 unsupervised classifier * + Border representations of 1 bit/pixel images and raster conversion for SVG * + PostScript generation (levels 1, 2, 3) of images for device-independent output * + PDF generation (levels 1, 2) of images for device-independent output * + Dewarping images of text taken with a camera * + Book-adaptive text recognition * + Rendering text on an image * + Connectivity-preserving thinning and thickening of 1 bit/pixel images * + Line removal from a grayscale sketch * + Search for least-cost paths on binary and grayscale images * * \section homepage More information on Leptonica's homepage * * http://www.leptonica.com/ * * \section contact For questions and suggestions contact * * Dan Bloomberg (bloomberg 'at' ieee 'dot' org) */ leptonica-1.86.0/src/makefile.static000066400000000000000000000342001506303110300173300ustar00rootroot00000000000000#/*====================================================================* # - Copyright (C) 2001 Leptonica. 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. # - # - 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 ANY # - 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. # *====================================================================*/ # makefile (for linux) # # Hand-built -- editable -- simple -- makefile # # For a nodebug version: make # For a debug version: make DEBUG=yes debug # For a shared library version: make SHARED=yes shared # For all versions: make all # With nonstandard header directories # make EXTRAINCLUDES="-I" # # To remove all writes to stderr: add -DNO_CONSOLE_IO to compiler line # # To remove object files in src: make clean # To remove object files and executables in prog: make clean # # Customization for I/O with external libraries: # jpeg, png, tiff, webp, jp2k, gif # Set flags in environ.h. The default is to have libjpeg, libpng, # libtiff and libz, but not libwebp, libopenjp or libgif. # # The functions fmemopen() and open_memstream() conform to # IEEE Std 1003.1-2008 ("POSIX.1"). In addition to Linux and BSD, # they are supported on macOS (> 10.12), iOS (>= 11.0) and # android (sdk >= 23). However, they are not supported on Windows. # The code for determining use of these functions on different platforms # is made in environ.h. # # Customization for POSIX-compliant function fstatat(). # The default is not to use, because some systems do not support it. # To use this, #define HAVE_FSTATAT to 1 in environ.h. # # Customization for Cygwin: # (1) Use the appropriate $CC # # Compiling under Microsoft Visual Studio # (1) Download the vs2000 package. # (2) You can also substitute arrayaccess.h.vc for arrayaccess.h, to # use the inline macros rather than function calls which are slower. # # To generate function prototypes, you need a program called # xtractprotos. Build it with this command: # make xtractprotos # Then use it with 'make allheaders' # Tools used by the Makefile RM = rm -f TEST = test MKDIR = mkdir -p LIBRARIAN = ar cq RANLIB = ranlib SED = sed # Libraries are built into a binary tree determined by the environmental # variable BINARY_BASE_DIR ifndef BINARY_BASE_DIR BINARY_BASE_DIR = .. endif BASE_OBJ = $(BINARY_BASE_DIR)/obj OBJ_NODEBUG = $(BINARY_BASE_DIR)/obj/nodebug OBJ_DEBUG = $(BINARY_BASE_DIR)/obj/debug OBJ_SHARED = $(BINARY_BASE_DIR)/obj/shared BASE_LIB = $(BINARY_BASE_DIR)/lib LIB_NODEBUG = $(BINARY_BASE_DIR)/lib/nodebug LIB_DEBUG = $(BINARY_BASE_DIR)/lib/debug LIB_SHARED = $(BINARY_BASE_DIR)/lib/shared # Include files INCLUDES = -I./ $(EXTRAINCLUDES) PROTOTYPE_DIR = . # Which flags to use? # - std=c89 and std=c99 both define __STRICT_ANSI__, which causes # the omission of declarations of a number of functions, such # as mkstemp, fmemopen, open_memstream, fdopen, etc. So if you # use one of these, also use -U__STRICT_ANSI__. e.g., # gcc -std=c89 -U__STRICT_ANSI__ # - std=gnu89 and std=gnu99 do not define __STRICT_ANSI__, so # declaration of these other functions is included. # - On mingw, it is necessary to use -D__USE_MINGW_ANSI_STDIO. # This has no effect on non-mingw systems. # - use -Wunused to identify unused variables # - use -DNO_CONSOLE_IO to remove all L_INFO, L_WARNING, L_ERROR and # ERROR_* logging, and to remove all DEBUG information dependent # on whether or not NO_CONSOLE_IO has been defined. # - remove -fPIC for Cygwin CC = gcc -std=c99 -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO #CC = gcc -std=c89 -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO #CC = gcc -std=c99 -D_POSIX_C_SOURCE=200809L -D__USE_MINGW_ANSI_STDIO -D_BSD_SOURCE -DANSI -fPIC #CC = gcc -std=gnu89 -D__USE_MINGW_ANSI_STDIO #CC = gcc -std=gnu89 -D_BSD_SOURCE -DANSI -Werror -fPIC #CC = gcc -std=c99 -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO -DNO_CONSOLE_IO #CC = g++ -D_BSD_SOURCE -fPIC #CC = g++ -Werror -D_BSD_SOURCE -fPIC #CC = g++ -Wunused -D_BSD_SOURCE -fPIC # Test for processor endianness # This version (using the definition of __BYTE_ORDER in endian.h) # was provided by rofl0r. It has been modified to return L_LITTLE_ENDIAN # if the file endian.h does not exist, which is the situation on mingw. ENDIANNESS = $(shell echo __BYTE_ORDER | $(CC) -include endian.h -E - | grep -q 4321 && echo L_BIG_ENDIAN || echo L_LITTLE_ENDIAN) # Shared library linker options SONAME_OPTION = -Wl,-h, ifdef SHARED OPTIMIZE = -O2 -fPIC else ifdef DEBUG OPTIMIZE = -g else OPTIMIZE = -O2 endif endif OPTIONS = CPPFLAGS = $(INCLUDES) CFLAGS = $(OPTIMIZE) $(OPTIONS) LIBRARIAN_SHARED = gcc -shared # Libraries differing only in their minor revision numbers # are required to have the same interface. By using # "-h" in the ld, the "soname" is .X, where X is # the major revision number. # Links are created among the files .X.Y, # .X, and , where Y is the minor revision number. MAJOR_REV = 1 MINOR_REV = 86 PATCH_REV = 0 ######################################################### # Libraries LEPTLIB = liblept.a LEPTLIB_SHARED = liblept.so ######################################################### LEPTLIB_C = adaptmap.c affine.c \ affinecompose.c arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ bootnumgen1.c bootnumgen2.c \ bootnumgen3.c bootnumgen4.c \ boxbasic.c boxfunc1.c boxfunc2.c \ boxfunc3.c boxfunc4.c boxfunc5.c \ bytearray.c ccbord.c ccthin.c \ checkerboard.c classapp.c \ colorcontent.c colorfill.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c correlscore.c \ dewarp1.c dewarp2.c dewarp3.c dewarp4.c \ dnabasic.c dnafunc1.c dnahash.c \ dwacomb.2.c dwacomblow.2.c \ edge.c encoding.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c \ gifio.c gifiostub.c gplot.c graphics.c \ graymorph.c grayquant.c hashmap.c heap.c jbclass.c \ jp2kheader.c jp2kheaderstub.c jp2kio.c jp2kiostub.c \ jpegio.c jpegiostub.c kernel.c \ libversions.c list.c map.c maze.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partify.c partition.c \ pdfapp.c pdfappstub.c \ pdfio1.c pdfio1stub.c pdfio2.c pdfio2stub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c \ pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c \ pixcomp.c pixconv.c pixlabel.c pixtiling.c \ pngio.c pngiostub.c \ pnmio.c pnmiostub.c \ projective.c \ psio1.c psio1stub.c psio2.c psio2stub.c \ ptabasic.c ptafunc1.c ptafunc2.c \ ptra.c quadtree.c queue.c rank.c rbtree.c \ readbarcode.c readfile.c \ recogbasic.c recogdid.c recogident.c recogtrain.c \ regutils.c renderpdf.c rop.c roplow.c \ rotate.c rotateam.c rotateorth.c rotateshear.c \ runlength.c sarray1.c sarray2.c \ scale1.c scale2.c seedfill.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c stringcode.c \ strokes.c sudoku.c \ textops.c tiffio.c tiffiostub.c \ utils1.c utils2.c warper.c watershed.c \ webpanimio.c webpanimiostub.c \ webpio.c webpiostub.c writefile.c \ zlibmem.c zlibmemstub.c LEPTLIB_H = allheaders.h alltypes.h \ array.h array_internal.h \ arrayaccess.h bbuffer.h \ bmf.h bmfdata.h bmp.h \ ccbord.h ccbord_internal.h \ colorfill.h dewarp.h environ.h gplot.h \ hashmap.h heap.h imageio.h \ jbclass.h list.h morph.h \ pix.h pix_internal.h \ ptra.h queue.h rbtree.h \ readbarcode.h recog.h regutils.h \ stack.h stringcode.h sudoku.h watershed.h ################################################################## # Main targets nodebug: dirs $(LEPTLIB:%=$(LIB_NODEBUG)/%) all: make -f makefile TARGET=$(TARGET) nodebug make -f makefile TARGET=$(TARGET) DEBUG=true debug make -f makefile TARGET=$(TARGET) SHARED=true shared DEBUG_LIBS = $(LEPTLIB:%=$(LIB_DEBUG)/%) SHARED_LIBS = $(LEPTLIB_SHARED:%=$(LIB_SHARED)/%) debug: dirs $(DEBUG_LIBS) shared: dirs $(SHARED_LIBS) ################################################################## # Proto targets # Note that both of the targets below can be generated by xtractprotos # (a) without requiring the existence of leptprotos.h and (b) with # an empty allheaders.h. Both generate a new allheaders.h, and # 'make allprotos' additionally generates leptprotos.h # # In the past we generated leptprotos.h that held the function prototypes, # and included it in allheaders.h. We now insert the function prototypes # directly in allheaders.h, and do not generate a separate prototype # file leptprotos.h. allheaders: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=inline -prestring=LEPT_DLL $(LEPTLIB_C) # You can still generate the file leptprotos.h and have it #included # in allheaders.h. If you do this, be sure to add leptprotos.h to LEPTLIB_H. allprotos: leptprotos leptprotos: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=leptprotos.h -prestring=LEPT_DLL $(LEPTLIB_C) ################################################################## # xtractprotos xtractprotos: dirs leptlib cd ../prog; make xtractprotos; cp xtractprotos ../src xtractprotos.o: xtractprotos.c ################################################################## # Rule to make optimized library $(LIB_NODEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make debuggable library $(LIB_DEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make shared library $(LIB_SHARED)/%.so: $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $< mv $@ $@.$(MAJOR_REV).$(MINOR_REV).$(PATCH_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV).$(PATCH_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ################################################################## # No-debug library dependencies and rules leptlib: $(LIB_NODEBUG)/$(LEPTLIB) $(LIB_NODEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RANLIB) $@ # Debug library dependencies and rules leptlibd: $(LIB_DEBUG)/$(LEPTLIB) $(LIB_DEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RANLIB) $@ # Shared library dependencies, rules and links leptlibs: $(LIB_SHARED)/$(LEPTLIB_SHARED) $(LIB_SHARED)/$(LEPTLIB_SHARED): $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) mv $@ $@.$(MAJOR_REV).$(MINOR_REV).$(PATCH_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV).$(PATCH_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ######################################################### # Rules for compiling source endianness.h: endianness.h.in $(SED) -e 's/@APPLE_UNIVERSAL_BUILD@/defined (__APPLE_CC__)/g' -e 's/@ENDIANNESS@/$(ENDIANNESS)/g' endianness.h.in > endianness.h $(OBJ_NODEBUG)/%.o: %.c $(LEPTLIB_H) endianness.h @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) $(COMPILE.c) -o $@ $< $(OBJ_DEBUG)/%.o: %.c $(LEPTLIB_H) endianness.h @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) $(COMPILE.c) -o $@ $< $(OBJ_SHARED)/%.o: %.c $(LEPTLIB_H) endianness.h @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) $(COMPILE.c) -o $@ $< ########################################################### # Prepare a local environment dirs: @$(TEST) -d $(BASE_OBJ) || $(MKDIR) $(BASE_OBJ) @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) @$(TEST) -d $(BASE_LIB) || $(MKDIR) $(BASE_LIB) @$(TEST) -d $(LIB_NODEBUG) || $(MKDIR) $(LIB_NODEBUG) @$(TEST) -d $(LIB_DEBUG) || $(MKDIR) $(LIB_DEBUG) @$(TEST) -d $(LIB_SHARED) || $(MKDIR) $(LIB_SHARED) ########################################################### clean: $(RM) $(OBJ_NODEBUG)/*.o $(OBJ_DEBUG)/*.o \ $(OBJ_SHARED)/*.o \ $(LIB_NODEBUG)/*.a $(LIB_DEBUG)/*.a \ $(LIB_SHARED)/*.so $(LIB_SHARED)/*.so.? \ $(LIB_SHARED)/*.so.?.* \ xtractprotos.o xtractprotos \ endianness.h ########################################################### depend: /usr/bin/makedepend -DNO_PROTOS $(CPPFLAGS) $(LEPTLIB_C) ########################################################### # DO NOT DELETE THIS LINE -- make depend depends on it. leptonica-1.86.0/src/map.c000066400000000000000000000155621506303110300152750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file map.c *
 *
 *  This is an interface for map and set functions, based on using
 *  red-black binary search trees.  Because these trees are sorted,
 *  they are O(nlogn) to build.  They allow logn insertion, find
 *  and deletion of elements.
 *
 *  Both the map and set are ordered by key value, with unique keys.
 *  For the map, the elements are key/value pairs.
 *  For the set we only store unique, ordered keys, and the value
 *  (set to 0 in the implementation) is ignored.
 *
 *  The keys for the map and set can be any of the three types in the
 *  l_rbtree_keytype enum.  The values stored can be any of the four
 *  types in the rb_type union.
 *
 *  In-order forward and reverse iterators are provided for maps and sets.
 *  To forward iterate over the map for any type of key (in this example,
 *  uint32), extracting integer values:
 *
 *      L_AMAP  *m = l_amapCreate(L_UINT_TYPE);
 *      [add elements to the map ...]
 *      L_AMAP_NODE  *n = l_amapGetFirst(m);
 *      while (n) {
 *          l_int32 val = n->value.itype;
 *          // do something ...
 *          n = l_amapGetNext(n);
 *      }
 *
 *  If the nodes are deleted during the iteration:
 *
 *      L_AMAP  *m = l_amapCreate(L_UINT_TYPE);
 *      [add elements to the map ...]
 *      L_AMAP_NODE  *n = l_amapGetFirst(m);
 *      L_AMAP_NODE  *nn;
 *      while (n) {
 *          nn = l_amapGetNext(n);
 *          l_int32 val = n->value.itype;
 *          l_uint32 key = n->key.utype;
 *          // do something ...
 *          l_amapDelete(m, n->key);
 *          n = nn;
 *      }
 *
 *  See prog/maptest.c and prog/settest.c for more examples of usage.
 *
 *  Interface to (a) map using a general key and storing general values
 *           L_AMAP        *l_amapCreate()
 *           RB_TYPE       *l_amapFind()
 *           void           l_amapInsert()
 *           void           l_amapDelete()
 *           void           l_amapDestroy()
 *           L_AMAP_NODE   *l_amapGetFirst()
 *           L_AMAP_NODE   *l_amapGetNext()
 *           L_AMAP_NODE   *l_amapGetLast()
 *           L_AMAP_NODE   *l_amapGetPrev()
 *           l_int32        l_amapSize()
 *
 *  Interface to (a) set using a general key
 *           L_ASET        *l_asetCreate()
 *           RB_TYPE       *l_asetFind()
 *           void           l_asetInsert()
 *           void           l_asetDelete()
 *           void           l_asetDestroy()
 *           L_ASET_NODE   *l_asetGetFirst()
 *           L_ASET_NODE   *l_asetGetNext()
 *           L_ASET_NODE   *l_asetGetLast()
 *           L_ASET_NODE   *l_asetGetPrev()
 *           l_int32        l_asetSize()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* ------------------------------------------------------------- * * Interface to Map * * ------------------------------------------------------------- */ L_AMAP * l_amapCreate(l_int32 keytype) { L_AMAP *m; if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && keytype != L_FLOAT_TYPE) return (L_AMAP *)ERROR_PTR("invalid keytype", __func__, NULL); m = (L_AMAP *)LEPT_CALLOC(1, sizeof(L_AMAP)); m->keytype = keytype; return m; } RB_TYPE * l_amapFind(L_AMAP *m, RB_TYPE key) { return l_rbtreeLookup(m, key); } void l_amapInsert(L_AMAP *m, RB_TYPE key, RB_TYPE value) { l_rbtreeInsert(m, key, value); } void l_amapDelete(L_AMAP *m, RB_TYPE key) { l_rbtreeDelete(m, key); } void l_amapDestroy(L_AMAP **pm) { l_rbtreeDestroy(pm); } L_AMAP_NODE * l_amapGetFirst(L_AMAP *m) { return l_rbtreeGetFirst(m); } L_AMAP_NODE * l_amapGetNext(L_AMAP_NODE *n) { return l_rbtreeGetNext(n); } L_AMAP_NODE * l_amapGetLast(L_AMAP *m) { return l_rbtreeGetLast(m); } L_AMAP_NODE * l_amapGetPrev(L_AMAP_NODE *n) { return l_rbtreeGetPrev(n); } l_int32 l_amapSize(L_AMAP *m) { return l_rbtreeGetCount(m); } /* ------------------------------------------------------------- * * Interface to Set * * ------------------------------------------------------------- */ L_ASET * l_asetCreate(l_int32 keytype) { L_ASET *s; if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && keytype != L_FLOAT_TYPE) return (L_ASET *)ERROR_PTR("invalid keytype", __func__, NULL); s = (L_ASET *)LEPT_CALLOC(1, sizeof(L_ASET)); s->keytype = keytype; return s; } /* * l_asetFind() * * This returns NULL if not found, non-null if it is. In the latter * case, the value stored in the returned pointer has no significance. */ RB_TYPE * l_asetFind(L_ASET *s, RB_TYPE key) { return l_rbtreeLookup(s, key); } void l_asetInsert(L_ASET *s, RB_TYPE key) { RB_TYPE value; value.itype = 0; /* meaningless */ l_rbtreeInsert(s, key, value); } void l_asetDelete(L_ASET *s, RB_TYPE key) { l_rbtreeDelete(s, key); } void l_asetDestroy(L_ASET **ps) { l_rbtreeDestroy(ps); } L_ASET_NODE * l_asetGetFirst(L_ASET *s) { return l_rbtreeGetFirst(s); } L_ASET_NODE * l_asetGetNext(L_ASET_NODE *n) { return l_rbtreeGetNext(n); } L_ASET_NODE * l_asetGetLast(L_ASET *s) { return l_rbtreeGetLast(s); } L_ASET_NODE * l_asetGetPrev(L_ASET_NODE *n) { return l_rbtreeGetPrev(n); } l_int32 l_asetSize(L_ASET *s) { return l_rbtreeGetCount(s); } leptonica-1.86.0/src/maze.c000066400000000000000000001100531506303110300154430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file maze.c *
 *
 *      This is a game with a pedagogical slant.  A maze is represented
 *      by a binary image.  The ON pixels (fg) are walls.  The goal is
 *      to navigate on OFF pixels (bg), using Manhattan steps
 *      (N, S, E, W), between arbitrary start and end positions.
 *      The problem is thus to find the shortest route between two points
 *      in a binary image that are 4-connected in the bg.  This is done
 *      with a breadth-first search, implemented with a queue.
 *      We also use a queue of pointers to generate the maze (image).
 *
 *          PIX             *generateBinaryMaze()
 *          static MAZEEL   *mazeelCreate()
 *
 *          PIX             *pixSearchBinaryMaze()
 *          static l_int32   localSearchForBackground()
 *
 *      Generalizing a maze to a grayscale image, the search is
 *      now for the "shortest" or least cost path, for some given
 *      cost function.
 *
 *          PIX             *pixSearchGrayMaze()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #ifdef _WIN32 #include #include #endif /* _WIN32 */ #include "allheaders.h" static const l_int32 MinMazeWidth = 50; static const l_int32 MinMazeHeight = 50; static const l_float32 DefaultWallProbability = 0.65f; static const l_float32 DefaultAnisotropyRatio = 0.25f; enum { /* direction from parent to newly created element */ START_LOC = 0, DIR_NORTH = 1, DIR_SOUTH = 2, DIR_WEST = 3, DIR_EAST = 4 }; struct MazeElement { l_float32 distance; l_int32 x; l_int32 y; l_uint32 val; /* value of maze pixel at this location */ l_int32 dir; /* direction from parent to child */ }; typedef struct MazeElement MAZEEL; static MAZEEL *mazeelCreate(l_int32 x, l_int32 y, l_int32 dir); static l_int32 localSearchForBackground(PIX *pix, l_int32 *px, l_int32 *py, l_int32 maxrad); #ifndef NO_CONSOLE_IO #define DEBUG_PATH 0 #define DEBUG_MAZE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Binary maze generation as cellular automaton * *---------------------------------------------------------------------*/ /*! * \brief generateBinaryMaze() * * \param[in] w, h size of maze * \param[in] xi, yi initial location * \param[in] wallps probability that a pixel to the side is ON * \param[in] ranis ratio of prob that pixel in forward direction * is a wall to the probability that pixel in * side directions is a wall * \return pix, or NULL on error * *
 * Notes:
 *      (1) We have two input probability factors that determine the
 *          density of walls and average length of straight passages.
 *          When ranis < 1.0, you are more likely to generate a wall
 *          to the side than going forward.  Enter 0.0 for either if
 *          you want to use the default values.
 *      (2) This is a type of percolation problem, and exhibits
 *          different phases for different parameters wallps and ranis.
 *          For larger values of these parameters, regions in the maze
 *          are not explored because the maze generator walls them
 *          off and cannot get through.  The boundary between the
 *          two phases in this two-dimensional parameter space goes
 *          near these values:
 *                wallps       ranis
 *                0.35         1.00
 *                0.40         0.85
 *                0.45         0.70
 *                0.50         0.50
 *                0.55         0.40
 *                0.60         0.30
 *                0.65         0.25
 *                0.70         0.19
 *                0.75         0.15
 *                0.80         0.11
 *      (3) Because there is a considerable amount of overhead in calling
 *          pixGetPixel() and pixSetPixel(), this function can be sped
 *          up with little effort using raster line pointers and the
 *          GET_DATA* and SET_DATA* macros.
 * 
*/ PIX * generateBinaryMaze(l_int32 w, l_int32 h, l_int32 xi, l_int32 yi, l_float32 wallps, l_float32 ranis) { l_int32 x, y, dir; l_uint32 val; l_float32 frand, wallpf, testp; MAZEEL *el, *elp; PIX *pixd; /* the destination maze */ PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ L_QUEUE *lq; /* On Windows, seeding is apparently necessary to get decent mazes. * Windows rand() returns a value up to 2^15 - 1, whereas unix * rand() returns a value up to 2^31 - 1. Therefore the generated * mazes will differ on the two platforms. */ #ifdef _WIN32 srand(28*333); #endif /* _WIN32 */ if (w < MinMazeWidth) w = MinMazeWidth; if (h < MinMazeHeight) h = MinMazeHeight; if (xi <= 0 || xi >= w) xi = w / 6; if (yi <= 0 || yi >= h) yi = h / 5; if (wallps < 0.05 || wallps > 0.95) wallps = DefaultWallProbability; if (ranis < 0.05 || ranis > 1.0) ranis = DefaultAnisotropyRatio; wallpf = wallps * ranis; #if DEBUG_MAZE lept_stderr("(w, h) = (%d, %d), (xi, yi) = (%d, %d)\n", w, h, xi, yi); lept_stderr("Using: prob(wall) = %7.4f, anisotropy factor = %7.4f\n", wallps, ranis); #endif /* DEBUG_MAZE */ /* These are initialized to OFF */ pixd = pixCreate(w, h, 1); pixm = pixCreate(w, h, 1); lq = lqueueCreate(0); /* Prime the queue with the first pixel; it is OFF */ el = mazeelCreate(xi, yi, START_LOC); pixSetPixel(pixm, xi, yi, 1); /* mark visited */ lqueueAdd(lq, el); /* While we're at it ... */ while (lqueueGetCount(lq) > 0) { elp = (MAZEEL *)lqueueRemove(lq); x = elp->x; y = elp->y; dir = elp->dir; if (x > 0) { /* check west */ pixGetPixel(pixm, x - 1, y, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x - 1, y, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_WEST) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x - 1, y, 1); } else { /* not a wall */ el = mazeelCreate(x - 1, y, DIR_WEST); lqueueAdd(lq, el); } } } if (y > 0) { /* check north */ pixGetPixel(pixm, x, y - 1, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x, y - 1, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_NORTH) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x, y - 1, 1); } else { /* not a wall */ el = mazeelCreate(x, y - 1, DIR_NORTH); lqueueAdd(lq, el); } } } if (x < w - 1) { /* check east */ pixGetPixel(pixm, x + 1, y, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x + 1, y, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_EAST) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x + 1, y, 1); } else { /* not a wall */ el = mazeelCreate(x + 1, y, DIR_EAST); lqueueAdd(lq, el); } } } if (y < h - 1) { /* check south */ pixGetPixel(pixm, x, y + 1, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x, y + 1, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_SOUTH) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x, y + 1, 1); } else { /* not a wall */ el = mazeelCreate(x, y + 1, DIR_SOUTH); lqueueAdd(lq, el); } } } LEPT_FREE(elp); } lqueueDestroy(&lq, TRUE); pixDestroy(&pixm); return pixd; } static MAZEEL * mazeelCreate(l_int32 x, l_int32 y, l_int32 dir) { MAZEEL *el; el = (MAZEEL *)LEPT_CALLOC(1, sizeof(MAZEEL)); el->x = x; el->y = y; el->dir = dir; return el; } /*---------------------------------------------------------------------* * Binary maze search * *---------------------------------------------------------------------*/ /*! * \brief pixSearchBinaryMaze() * * \param[in] pixs 1 bpp, maze * \param[in] xi, yi beginning point; use same initial point * that was used to generate the maze * \param[in] xf, yf end point, or close to it * \param[out] ppixd [optional] maze with path illustrated, or * if no path possible, the part of the maze * that was searched * \return pta shortest path, or NULL if either no path * exists or on error * *
 * Notes:
 *      (1) Because of the overhead in calling pixGetPixel() and
 *          pixSetPixel(), we have used raster line pointers and the
 *          GET_DATA* and SET_DATA* macros for many of the pix accesses.
 *      (2) Commentary:
 *            The goal is to find the shortest path between beginning and
 *          end points, without going through walls, and there are many
 *          ways to solve this problem.
 *            We use a queue to implement a breadth-first search.  Two auxiliary
 *          "image" data structures can be used: one to mark the visited
 *          pixels and one to give the direction to the parent for each
 *          visited pixel.  The first structure is used to avoid putting
 *          pixels on the queue more than once, and the second is used
 *          for retracing back to the origin, like the breadcrumbs in
 *          Hansel and Gretel.  Each pixel taken off the queue is destroyed
 *          after it is used to locate the allowed neighbors.  In fact,
 *          only one distance image is required, if you initialize it
 *          to some value that signifies "not yet visited."  (We use
 *          a binary image for marking visited pixels because it is clearer.)
 *          This method for a simple search of a binary maze is implemented in
 *          pixSearchBinaryMaze().
 *            An alternative method would store the (manhattan) distance
 *          from the start point with each pixel on the queue.  The children
 *          of each pixel get a distance one larger than the parent.  These
 *          values can be stored in an auxiliary distance map image
 *          that is constructed simultaneously with the search.  Once the
 *          end point is reached, the distance map is used to backtrack
 *          along a minimum path.  There may be several equal length
 *          minimum paths, any one of which can be chosen this way.
 * 
*/ PTA * pixSearchBinaryMaze(PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd) { l_int32 i, j, x, y, w, h, d, found; l_uint32 val, rpixel, gpixel, bpixel; void **lines1, **linem1, **linep8, **lined32; MAZEEL *el, *elp; PIX *pixd; /* the shortest path written on the maze image */ PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ PIX *pixp; /* for bookkeeping, to indicate direction to parent */ L_QUEUE *lq; PTA *pta; if (ppixd) *ppixd = NULL; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (xi <= 0 || xi >= w) return (PTA *)ERROR_PTR("xi not valid", __func__, NULL); if (yi <= 0 || yi >= h) return (PTA *)ERROR_PTR("yi not valid", __func__, NULL); pixGetPixel(pixs, xi, yi, &val); if (val != 0) return (PTA *)ERROR_PTR("(xi,yi) not bg pixel", __func__, NULL); pixd = NULL; pta = NULL; /* Find a bg pixel near input point (xf, yf) */ localSearchForBackground(pixs, &xf, &yf, 5); #if DEBUG_MAZE lept_stderr("(xi, yi) = (%d, %d), (xf, yf) = (%d, %d)\n", xi, yi, xf, yf); #endif /* DEBUG_MAZE */ pixm = pixCreate(w, h, 1); /* initialized to OFF */ pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ lines1 = pixGetLinePtrs(pixs, NULL); linem1 = pixGetLinePtrs(pixm, NULL); linep8 = pixGetLinePtrs(pixp, NULL); lq = lqueueCreate(0); /* Prime the queue with the first pixel; it is OFF */ el = mazeelCreate(xi, yi, 0); /* don't need direction here */ pixSetPixel(pixm, xi, yi, 1); /* mark visited */ lqueueAdd(lq, el); /* Fill up the pix storing directions to parents, * stopping when we hit the point (xf, yf) */ found = FALSE; while (lqueueGetCount(lq) > 0) { elp = (MAZEEL *)lqueueRemove(lq); x = elp->x; y = elp->y; if (x == xf && y == yf) { found = TRUE; LEPT_FREE(elp); break; } if (x > 0) { /* check to west */ val = GET_DATA_BIT(linem1[y], x - 1); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y], x - 1); /* mark visited */ val = GET_DATA_BIT(lines1[y], x - 1); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent E */ el = mazeelCreate(x - 1, y, 0); lqueueAdd(lq, el); } } } if (y > 0) { /* check north */ val = GET_DATA_BIT(linem1[y - 1], x); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y - 1], x); /* mark visited */ val = GET_DATA_BIT(lines1[y - 1], x); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent S */ el = mazeelCreate(x, y - 1, 0); lqueueAdd(lq, el); } } } if (x < w - 1) { /* check east */ val = GET_DATA_BIT(linem1[y], x + 1); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y], x + 1); /* mark visited */ val = GET_DATA_BIT(lines1[y], x + 1); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent W */ el = mazeelCreate(x + 1, y, 0); lqueueAdd(lq, el); } } } if (y < h - 1) { /* check south */ val = GET_DATA_BIT(linem1[y + 1], x); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y + 1], x); /* mark visited */ val = GET_DATA_BIT(lines1[y + 1], x); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent N */ el = mazeelCreate(x, y + 1, 0); lqueueAdd(lq, el); } } } LEPT_FREE(elp); } lqueueDestroy(&lq, TRUE); pixDestroy(&pixm); LEPT_FREE(linem1); if (ppixd) { pixd = pixUnpackBinary(pixs, 32, 1); *ppixd = pixd; } composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ if (found) { L_INFO(" Path found\n", __func__); pta = ptaCreate(0); x = xf; y = yf; while (1) { ptaAddPt(pta, x, y); if (x == xi && y == yi) break; if (pixd) /* write 'gpixel' onto the path */ pixSetPixel(pixd, x, y, gpixel); pixGetPixel(pixp, x, y, &val); if (val == DIR_NORTH) y--; else if (val == DIR_SOUTH) y++; else if (val == DIR_EAST) x++; else if (val == DIR_WEST) x--; } } else { L_INFO(" No path found\n", __func__); if (pixd) { /* paint all visited locations */ lined32 = pixGetLinePtrs(pixd, NULL); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (GET_DATA_BYTE(linep8[i], j) != 0) SET_DATA_FOUR_BYTES(lined32[i], j, gpixel); } } LEPT_FREE(lined32); } } if (pixd) { pixSetPixel(pixd, xi, yi, rpixel); pixSetPixel(pixd, xf, yf, bpixel); } pixDestroy(&pixp); LEPT_FREE(lines1); LEPT_FREE(linep8); return pta; } /*! * \brief localSearchForBackground() * * \param[in] pix * \param[out] px, py starting position for search; return found position * \param[in] maxrad max distance to search from starting location * \return 0 if bg pixel found; 1 if not found */ static l_int32 localSearchForBackground(PIX *pix, l_int32 *px, l_int32 *py, l_int32 maxrad) { l_int32 x, y, w, h, r, i, j; l_uint32 val; x = *px; y = *py; pixGetPixel(pix, x, y, &val); if (val == 0) return 0; /* For each value of r, restrict the search to the boundary * pixels in a square centered on (x,y), clipping to the * image boundaries if necessary. */ pixGetDimensions(pix, &w, &h, NULL); for (r = 1; r < maxrad; r++) { for (i = -r; i <= r; i++) { if (y + i < 0 || y + i >= h) continue; for (j = -r; j <= r; j++) { if (x + j < 0 || x + j >= w) continue; if (L_ABS(i) != r && L_ABS(j) != r) /* not on "r ring" */ continue; pixGetPixel(pix, x + j, y + i, &val); if (val == 0) { *px = x + j; *py = y + i; return 0; } } } } return 1; } /*---------------------------------------------------------------------* * Gray maze search * *---------------------------------------------------------------------*/ /*! * \brief pixSearchGrayMaze() * * \param[in] pixs 1 bpp maze; w and h must be >= 50 * \param[in] xi, yi beginning point; use same initial point * that was used to generate the maze * \param[in] xf, yf end point, or close to it * \param[out] ppixd [optional] maze with path illustrated, or * if no path possible, the part of the maze * that was searched * \return pta shortest path, or NULL if either no path exists or on error * *
 *  Commentary:
 *      Consider first a slight generalization of the binary maze
 *      search problem.  Suppose that you can go through walls,
 *      but the cost is higher say, an increment of 3 to go into
 *      a wall pixel rather than 1?  You're still trying to find
 *      the shortest path.  One way to do this is with an ordered
 *      queue, and a simple way to visualize an ordered queue is as
 *      a set of stacks, each stack being marked with the distance
 *      of each pixel in the stack from the start.  We place the
 *      start pixel in stack 0, pop it, and process its 4 children.
 *      Each pixel is given a distance that is incremented from that
 *      of its parent 0 in this case, depending on if it is a wall
 *      pixel or not.  That value may be recorded on a distance map,
 *      according to the algorithm below.  For children of the first
 *      pixel, those not on a wall go in stack 1, and wall
 *      children go in stack 3.  Stack 0 being emptied, the process
 *      then continues with pixels being popped from stack 1.
 *      Here is the algorithm for each child pixel.  The pixel's
 *      distance value, were it to be placed on a stack, is compared
 *      with the value for it that is on the distance map.  There
 *      are three possible cases:
 *         1 If the pixel has not yet been registered, it is pushed
 *             on its stack and the distance is written to the map.
 *         2 If it has previously been registered with a higher distance,
 *             the distance on the map is relaxed to that of the
 *             current pixel, which is then placed on its stack.
 *         3 If it has previously been registered with an equal
 *             or lower value, the pixel is discarded.
 *      The pixels are popped and processed successively from
 *      stack 1, and when stack 1 is empty, popping starts on stack 2.
 *      This continues until the destination pixel is popped off
 *      a stack.   The minimum path is then derived from the distance map,
 *      going back from the end point as before.  This is just Dijkstra's
 *      algorithm for a directed graph; here, the underlying graph
 *      consisting of the pixels and four edges connecting each pixel
 *      to its 4-neighbor is a special case of a directed graph, where
 *      each edge is bi-directional.  The implementation of this generalized
 *      maze search is left as an exercise to the reader.
 *
 *      Let's generalize a bit further.  Suppose the "maze" is just
 *      a grayscale image -- think of it as an elevation map.  The cost
 *      of moving on this surface depends on the height, or the gradient,
 *      or whatever you want.  All that is required is that the cost
 *      is specified and non-negative on each link between adjacent
 *      pixels.  Now the problem becomes: find the least cost path
 *      moving on this surface between two specified end points.
 *      For example, if the cost across an edge between two pixels
 *      depends on the "gradient", you can use:
 *           cost = 1 + L_ABSdeltaV
 *      where deltaV is the difference in value between two adjacent
 *      pixels.  If the costs are all integers, we can still use an array
 *      of stacks to avoid ordering the queue e.g., by using a heap sort.
 *      This is a neat problem, because you don't even have to build a
 *      maze -- you can can use it on any grayscale image!
 *
 *      Rather than using an array of stacks, a more practical
 *      approach is to implement with a priority queue, which is
 *      a queue that is sorted so that the elements with the largest
 *      or smallest key values always come off first.  The
 *      priority queue is efficiently implemented as a heap, and
 *      this is how we do it.  Suppose you run the algorithm
 *      using a priority queue, doing the bookkeeping with an
 *      auxiliary image data structure that saves the distance of
 *      each pixel put on the queue as before, according to the method
 *      described above.  We implement it as a 2-way choice by
 *      initializing the distance array to a large value and putting
 *      a pixel on the queue if its distance is less than the value
 *      found on the array.  When you finally pop the end pixel from
 *      the queue, you're done, and you can trace the path backward,
 *      either always going downhill or using an auxiliary image to
 *      give you the direction to go at each step.  This is implemented
 *      here in searchGrayMaze.
 *
 *      Do we really have to use a sorted queue?  Can we solve this
 *      generalized maze with an unsorted queue of pixels?  Or even
 *      an unsorted stack, doing a depth-first search (DFS)?
 *      Consider a different algorithm for this generalized maze, where
 *      we travel again breadth first, but this time use a single,
 *      unsorted queue.  An auxiliary image is used as before to
 *      store the distances and to determine if pixels get pushed
 *      on the stack or dropped.  As before, we must allow pixels
 *      to be revisited, with relaxation of the distance if a shorter
 *      path arrives later.  As a result, we will in general have
 *      multiple instances of the same pixel on the stack with different
 *      distances.  However, because the queue is not ordered, some of
 *      these pixels will be popped when another instance with a lower
 *      distance is still on the stack.  Here, we're just popping them
 *      in the order they go on, rather than setting up a priority
 *      based on minimum distance.  Thus, unlike the priority queue,
 *      when a pixel is popped we have to check the distance map to
 *      see if a pixel with a lower distance has been put on the queue,
 *      and, if so, we discard the pixel we just popped.  So the
 *      "while" loop looks like this:
 *        ~ pop a pixel from the queue
 *        ~ check its distance against the distance stored in the
 *          distance map; if larger, discard
 *        ~ otherwise, for each of its neighbors:
 *            ~ compute its distance from the start pixel
 *            ~ compare this distance with that on the distance map:
 *                ~ if the distance map value higher, relax the distance
 *                  and push the pixel on the queue
 *                ~ if the distance map value is lower, discard the pixel
 *
 *      How does this loop terminate?  Before, with an ordered queue,
 *      it terminates when you pop the end pixel.  But with an unordered
 *      queue or stack, the first time you hit the end pixel, the
 *      distance is not guaranteed to be correct, because the pixels
 *      along the shortest path may not have yet been visited and relaxed.
 *      Because the shortest path can theoretically go anywhere,
 *      we must keep going.  How do we know when to stop?   Dijkstra
 *      uses an ordered queue to systematically remove nodes from
 *      further consideration.  Each time a pixel is popped, we're
 *      done with it; it's "finalized" in the Dijkstra sense because
 *      we know the shortest path to it.  However, with an unordered
 *      queue, the brute force answer is: stop when the queue
 *      or stack is empty, because then every pixel in the image
 *      has been assigned its minimum "distance" from the start pixel.
 *
 *      This is similar to the situation when you use a stack for the
 *      simpler uniform-step problem: with breadth-first search BFS
 *      the pixels on the queue are automatically ordered, so you are
 *      done when you locate the end pixel as a neighbor of a popped pixel;
 *      whereas depth-first search DFS, using a stack, requires,
 *      in general, a search of every accessible pixel.  Further, if
 *      a pixel is revisited with a smaller distance, that distance is
 *      recorded and the pixel is put on the stack again.
 *
 *      But surely, you ask, can't we stop sooner?  What if the
 *      start and end pixels are very close to each other?
 *      OK, suppose they are, and you have very high walls and a
 *      long snaking level path that is actually the minimum cost.
 *      That long path can wind back and forth across the entire
 *      maze many times before ending up at the end point, which
 *      could be just over a wall from the start.  With the unordered
 *      queue, you very quickly get a high distance for the end
 *      pixel, which will be relaxed to the minimum distance only
 *      after all the pixels of the path have been visited and placed
 *      on the queue, multiple times for many of them.  So that's the
 *      price for not ordering the queue!
 * 
*/ PTA * pixSearchGrayMaze(PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd) { l_int32 x, y, w, h, d; l_uint32 val, valr, vals, rpixel, gpixel, bpixel; void **lines8, **liner32, **linep8; l_int32 cost, dist, distparent, sival, sivals; MAZEEL *el, *elp; PIX *pixd; /* optionally plot the path on this RGB version of pixs */ PIX *pixr; /* for bookkeeping, to indicate the minimum distance */ /* to pixels already visited */ PIX *pixp; /* for bookkeeping, to indicate direction to parent */ L_HEAP *lh; PTA *pta; if (ppixd) *ppixd = NULL; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (w < 50 || h < 50) return (PTA *)ERROR_PTR("too small: w and h not >= 50", __func__, NULL); if (d != 8) return (PTA *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (xi <= 0 || xi >= w) return (PTA *)ERROR_PTR("xi not valid", __func__, NULL); if (yi <= 0 || yi >= h) return (PTA *)ERROR_PTR("yi not valid", __func__, NULL); pixd = NULL; pta = NULL; /* Allocate stuff */ pixr = pixCreate(w, h, 32); pixSetAll(pixr); /* initialize to max value */ pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ lines8 = pixGetLinePtrs(pixs, NULL); linep8 = pixGetLinePtrs(pixp, NULL); liner32 = pixGetLinePtrs(pixr, NULL); lh = lheapCreate(0, L_SORT_INCREASING); /* always remove closest pixels */ /* Prime the heap with the first pixel */ pixGetPixel(pixs, xi, yi, &val); el = mazeelCreate(xi, yi, 0); /* don't need direction here */ el->distance = 0; pixGetPixel(pixs, xi, yi, &val); el->val = val; pixSetPixel(pixr, xi, yi, 0); /* distance is 0 */ lheapAdd(lh, el); /* Breadth-first search with priority queue (implemented by a heap), labeling direction to parents in pixp and minimum distance to visited pixels in pixr. Stop when we pull the destination point (xf, yf) off the queue. */ while (lheapGetCount(lh) > 0) { elp = (MAZEEL *)lheapRemove(lh); if (!elp) { L_ERROR("heap broken!!\n", __func__); goto cleanup_stuff; } x = elp->x; y = elp->y; if (x == xf && y == yf) { /* exit condition */ LEPT_FREE(elp); break; } distparent = (l_int32)elp->distance; val = elp->val; sival = val; if (x > 0) { /* check to west */ vals = GET_DATA_BYTE(lines8[y], x - 1); valr = GET_DATA_FOUR_BYTES(liner32[y], x - 1); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y], x - 1, dist); /* new dist */ SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent to E */ el = mazeelCreate(x - 1, y, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (y > 0) { /* check north */ vals = GET_DATA_BYTE(lines8[y - 1], x); valr = GET_DATA_FOUR_BYTES(liner32[y - 1], x); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y - 1], x, dist); /* new dist */ SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent to S */ el = mazeelCreate(x, y - 1, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (x < w - 1) { /* check east */ vals = GET_DATA_BYTE(lines8[y], x + 1); valr = GET_DATA_FOUR_BYTES(liner32[y], x + 1); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y], x + 1, dist); /* new dist */ SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent to W */ el = mazeelCreate(x + 1, y, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (y < h - 1) { /* check south */ vals = GET_DATA_BYTE(lines8[y + 1], x); valr = GET_DATA_FOUR_BYTES(liner32[y + 1], x); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y + 1], x, dist); /* new dist */ SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent to N */ el = mazeelCreate(x, y + 1, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } LEPT_FREE(elp); } lheapDestroy(&lh, TRUE); if (ppixd) { pixd = pixConvert8To32(pixs); *ppixd = pixd; } composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ x = xf; y = yf; pta = ptaCreate(0); while (1) { /* write path onto pixd */ ptaAddPt(pta, x, y); if (x == xi && y == yi) break; if (pixd) pixSetPixel(pixd, x, y, gpixel); pixGetPixel(pixp, x, y, &val); if (val == DIR_NORTH) y--; else if (val == DIR_SOUTH) y++; else if (val == DIR_EAST) x++; else if (val == DIR_WEST) x--; pixGetPixel(pixr, x, y, &val); #if DEBUG_PATH lept_stderr("(x,y) = (%d, %d); dist = %d\n", x, y, val); #endif /* DEBUG_PATH */ } if (pixd) { pixSetPixel(pixd, xi, yi, rpixel); pixSetPixel(pixd, xf, yf, bpixel); } cleanup_stuff: lheapDestroy(&lh, TRUE); pixDestroy(&pixp); pixDestroy(&pixr); LEPT_FREE(lines8); LEPT_FREE(linep8); LEPT_FREE(liner32); return pta; } leptonica-1.86.0/src/morph.c000066400000000000000000002022421506303110300156360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file morph.c *
 *
 *     Generic binary morphological ops implemented with rasterop
 *         PIX     *pixDilate()
 *         PIX     *pixErode()
 *         PIX     *pixHMT()
 *         PIX     *pixOpen()
 *         PIX     *pixClose()
 *         PIX     *pixCloseSafe()
 *         PIX     *pixOpenGeneralized()
 *         PIX     *pixCloseGeneralized()
 *
 *     Binary morphological (raster) ops with brick Sels
 *         PIX     *pixDilateBrick()
 *         PIX     *pixErodeBrick()
 *         PIX     *pixOpenBrick()
 *         PIX     *pixCloseBrick()
 *         PIX     *pixCloseSafeBrick()
 *
 *     Binary composed morphological (raster) ops with brick Sels
 *         l_int32  selectComposableSels()
 *         l_int32  selectComposableSizes()
 *         PIX     *pixDilateCompBrick()
 *         PIX     *pixErodeCompBrick()
 *         PIX     *pixOpenCompBrick()
 *         PIX     *pixCloseCompBrick()
 *         PIX     *pixCloseSafeCompBrick()
 *
 *     Functions associated with boundary conditions
 *         void     resetMorphBoundaryCondition()
 *         l_int32  getMorphBorderPixelColor()
 *
 *     Static helpers for arg processing
 *         static PIX     *processMorphArgs1()
 *         static PIX     *processMorphArgs2()
 *
 *  You are provided with many simple ways to do binary morphology.
 *  In particular, if you are using brick Sels, there are six
 *  convenient methods, all specially tailored for separable operations
 *  on brick Sels.  A "brick" Sel is a Sel that is a rectangle
 *  of solid SEL_HITs with the origin at or near the center.
 *  Note that a brick Sel can have one dimension of size 1.
 *  This is very common.  All the brick Sel operations are
 *  separable, meaning the operation is done first in the horizontal
 *  direction and then in the vertical direction.  If one of the
 *  dimensions is 1, this is a special case where the operation is
 *  only performed in the other direction.
 *
 *  These six brick Sel methods are enumerated as follows:
 *
 *  (1) Brick Sels: pix*Brick(), where * = {Dilate, Erode, Open, Close}.
 *      These are separable rasterop implementations.  The Sels are
 *      automatically generated, used, and destroyed at the end.
 *      You can get the result as a new Pix, in-place back into the src Pix,
 *      or written to another existing Pix.
 *
 *  (2) Brick Sels: pix*CompBrick(), where * = {Dilate, Erode, Open, Close}.
 *      These are separable, 2-way composite, rasterop implementations.
 *      The Sels are automatically generated, used, and destroyed at the end.
 *      You can get the result as a new Pix, in-place back into the src Pix,
 *      or written to another existing Pix.  For large Sels, these are
 *      considerably faster than the corresponding pix*Brick() functions.
 *      N.B.:  The size of the Sels that are actually used are typically
 *      close to, but not exactly equal to, the size input to the function.
 *
 *  (3) Brick Sels: pix*BrickDwa(), where * = {Dilate, Erode, Open, Close}.
 *      These are separable dwa (destination word accumulation)
 *      implementations.  They use auto-gen'd dwa code.  You can get
 *      the result as a new Pix, in-place back into the src Pix,
 *      or written to another existing Pix.  This is typically
 *      about 3x faster than the analogous rasterop pix*Brick()
 *      function, but it has the limitation that the Sel size must
 *      be less than 63.  This is pre-set to work on a number
 *      of pre-generated Sels.  If you want to use other Sels, the
 *      code can be auto-gen'd for them; see the instructions in morphdwa.c.
 *
 *  (4) Same as (1), but you run it through pixMorphSequence(), with
 *      the sequence string either compiled in or generated using snprintf.
 *      All intermediate images and Sels are created, used and destroyed.
 *      You always get the result as a new Pix.  For example, you can
 *      specify a separable 11 x 17 brick opening as "o11.17",
 *      or you can specify the horizontal and vertical operations
 *      explicitly as "o11.1 + o1.11".  See morphseq.c for details.
 *
 *  (5) Same as (2), but you run it through pixMorphCompSequence(), with
 *      the sequence string either compiled in or generated using snprintf.
 *      All intermediate images and Sels are created, used and destroyed.
 *      You always get the result as a new Pix.  See morphseq.c for details.
 *
 *  (6) Same as (3), but you run it through pixMorphSequenceDwa(), with
 *      the sequence string either compiled in or generated using snprintf.
 *      All intermediate images and Sels are created, used and destroyed.
 *      You always get the result as a new Pix.  See morphseq.c for details.
 *
 *  If you are using Sels that are not bricks, you have two choices:
 *      (a) simplest: use the basic rasterop implementations (pixDilate(), ...)
 *      (b) fastest: generate the destination word accumumlation (dwa)
 *          code for your Sels and compile it with the library.
 *
 *      For an example, see flipdetect.c, which gives implementations
 *      using hit-miss Sels with both the rasterop and dwa versions.
 *      For the latter, the dwa code resides in fliphmtgen.c, and it
 *      was generated by prog/flipselgen.c.  Both the rasterop and dwa
 *      implementations are tested by prog/fliptest.c.
 *
 *  A global constant MORPH_BC is used to set the boundary conditions
 *  for rasterop-based binary morphology.  MORPH_BC, in morph.c,
 *  is set by default to ASYMMETRIC_MORPH_BC for a non-symmetric
 *  convention for boundary pixels in dilation and erosion:
 *      All pixels outside the image are assumed to be OFF
 *      for both dilation and erosion.
 *  To use a symmetric definition, see comments in pixErode()
 *  and reset MORPH_BC to SYMMETRIC_MORPH_BC, using
 *  resetMorphBoundaryCondition().
 *
 *  Boundary artifacts are possible in closing when the non-symmetric
 *  boundary conditions are used, because foreground pixels very close
 *  to the edge can be removed.  This can be avoided by using either
 *  the symmetric boundary conditions or the function pixCloseSafe(),
 *  which adds a border before the operation and removes it afterwards.
 *
 *  The hit-miss transform (HMT) is the bit-and of 2 erosions:
 *     (erosion of the src by the hits)  &  (erosion of the bit-inverted
 *                                           src by the misses)
 *
 *  The 'generalized opening' is an HMT followed by a dilation that uses
 *  only the hits of the hit-miss Sel.
 *  The 'generalized closing' is a dilation (again, with the hits
 *  of a hit-miss Sel), followed by the HMT.
 *  Both of these 'generalized' functions are idempotent.
 *
 *  These functions are extensively tested in prog/binmorph1_reg.c,
 *  prog/binmorph2_reg.c, and prog/binmorph3_reg.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Global constant; initialized here; must be declared extern * in other files to access it directly. However, in most * cases that is not necessary, because it can be reset * using resetMorphBoundaryCondition(). */ LEPT_DLL l_int32 MORPH_BC = ASYMMETRIC_MORPH_BC; /* We accept this cost in extra rasterops for decomposing exactly. */ static const l_int32 ACCEPTABLE_COST = 5; /* Static helpers for arg processing */ static PIX * processMorphArgs1(PIX *pixd, PIX *pixs, SEL *sel, PIX **ppixt); static PIX * processMorphArgs2(PIX *pixd, PIX *pixs, SEL *sel); /*-----------------------------------------------------------------* * Generic binary morphological ops implemented with rasterop * *-----------------------------------------------------------------*/ /*! * \brief pixDilate() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) This dilates src using hits in Sel.
 *      (2) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (3) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixDilate(NULL, pixs, ...);
 *          (b) pixDilate(pixs, pixs, ...);
 *          (c) pixDilate(pixd, pixs, ...);
 *      (4) The size of the result is determined by pixs.
 * 
*/ PIX * pixDilate(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, seldata; PIX *pixt; if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); pixClearAll(pixd); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* src | dst */ pixRasterop(pixd, j - cx, i - cy, w, h, PIX_SRC | PIX_DST, pixt, 0, 0); } } } pixDestroy(&pixt); return pixd; } /*! * \brief pixErode() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) This erodes src using hits in Sel.
 *      (2) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (3) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixErode(NULL, pixs, ...);
 *          (b) pixErode(pixs, pixs, ...);
 *          (c) pixErode(pixd, pixs, ...);
 *      (4) The size of the result is determined by pixs.
 * 
*/ PIX * pixErode(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, seldata; l_int32 xp, yp, xn, yn; PIX *pixt; if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); pixSetAll(pixd); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, pixt, 0, 0); } } } /* Clear near edges. We do this for the asymmetric boundary * condition convention that implements erosion assuming all * pixels surrounding the image are OFF. If you use a * use a symmetric b.c. convention, where the erosion is * implemented assuming pixels surrounding the image * are ON, these operations are omitted. */ if (MORPH_BC == ASYMMETRIC_MORPH_BC) { selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); if (xp > 0) pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); if (xn > 0) pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); if (yp > 0) pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); if (yn > 0) pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); } pixDestroy(&pixt); return pixd; } /*! * \brief pixHMT() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) The hit-miss transform erodes the src, using both hits
 *          and misses in the Sel.  It ANDs the shifted src for hits
 *          and ANDs the inverted shifted src for misses.
 *      (2) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (3) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixHMT(NULL, pixs, ...);
 *          (b) pixHMT(pixs, pixs, ...);
 *          (c) pixHMT(pixd, pixs, ...);
 *      (4) The size of the result is determined by pixs.
 * 
*/ PIX * pixHMT(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, firstrasterop, seldata; l_int32 xp, yp, xn, yn; PIX *pixt; if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); firstrasterop = TRUE; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* hit */ if (firstrasterop == TRUE) { /* src only */ pixClearAll(pixd); pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC, pixt, 0, 0); firstrasterop = FALSE; } else { /* src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, pixt, 0, 0); } } else if (seldata == 2) { /* miss */ if (firstrasterop == TRUE) { /* ~src only */ pixSetAll(pixd); pixRasterop(pixd, cx - j, cy - i, w, h, PIX_NOT(PIX_SRC), pixt, 0, 0); firstrasterop = FALSE; } else { /* ~src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_NOT(PIX_SRC) & PIX_DST, pixt, 0, 0); } } } } /* Clear near edges */ selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); if (xp > 0) pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); if (xn > 0) pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); if (yp > 0) pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); if (yn > 0) pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); pixDestroy(&pixt); return pixd; } /*! * \brief pixOpen() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) Generic morphological opening, using hits in the Sel.
 *      (2) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (3) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpen(NULL, pixs, ...);
 *          (b) pixOpen(pixs, pixs, ...);
 *          (c) pixOpen(pixd, pixs, ...);
 *      (4) The size of the result is determined by pixs.
 * 
*/ PIX * pixOpen(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", __func__, pixd); if ((pixt = pixErode(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); pixDilate(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * \brief pixClose() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) Generic morphological closing, using hits in the Sel.
 *      (2) This implementation is a strict dual of the opening if
 *          symmetric boundary conditions are used (see notes at top
 *          of this file).
 *      (3) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (4) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixClose(NULL, pixs, ...);
 *          (b) pixClose(pixs, pixs, ...);
 *          (c) pixClose(pixd, pixs, ...);
 *      (5) The size of the result is determined by pixs.
 * 
*/ PIX * pixClose(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", __func__, pixd); if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); pixErode(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * \brief pixCloseSafe() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) Generic morphological closing, using hits in the Sel.
 *      (2) If non-symmetric boundary conditions are used, this
 *          function adds a border of OFF pixels that is of
 *          sufficient size to avoid losing pixels from the dilation,
 *          and it removes the border after the operation is finished.
 *          It thus enforces a correct extensive result for closing.
 *      (3) If symmetric b.c. are used, it is not necessary to add
 *          and remove this border.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseSafe(NULL, pixs, ...);
 *          (b) pixCloseSafe(pixs, pixs, ...);
 *          (c) pixCloseSafe(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixCloseSafe(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 xp, yp, xn, yn, xmax, xbord; PIX *pixt1, *pixt2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixClose(pixd, pixs, sel); selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); xmax = L_MAX(xp, xn); xbord = 32 * ((xmax + 31) / 32); /* full 32 bit words */ if ((pixt1 = pixAddBorderGeneral(pixs, xbord, xbord, yp, yn, 0)) == NULL) return (PIX *)ERROR_PTR("pixt1 not made", __func__, pixd); pixClose(pixt1, pixt1, sel); if ((pixt2 = pixRemoveBorderGeneral(pixt1, xbord, xbord, yp, yn)) == NULL) return (PIX *)ERROR_PTR("pixt2 not made", __func__, pixd); pixDestroy(&pixt1); if (!pixd) return pixt2; pixCopy(pixd, pixt2); pixDestroy(&pixt2); return pixd; } /*! * \brief pixOpenGeneralized() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) Generalized morphological opening, using both hits and
 *          misses in the Sel.
 *      (2) This does a hit-miss transform, followed by a dilation
 *          using the hits.
 *      (3) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (4) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpenGeneralized(NULL, pixs, ...);
 *          (b) pixOpenGeneralized(pixs, pixs, ...);
 *          (c) pixOpenGeneralized(pixd, pixs, ...);
 *      (5) The size of the result is determined by pixs.
 * 
*/ PIX * pixOpenGeneralized(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", __func__, pixd); if ((pixt = pixHMT(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); pixDilate(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * \brief pixCloseGeneralized() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \return pixd * *
 * Notes:
 *      (1) Generalized morphological closing, using both hits and
 *          misses in the Sel.
 *      (2) This does a dilation using the hits, followed by a
 *          hit-miss transform.
 *      (3) This operation is a dual of the generalized opening.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseGeneralized(NULL, pixs, ...);
 *          (b) pixCloseGeneralized(pixs, pixs, ...);
 *          (c) pixCloseGeneralized(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixCloseGeneralized(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", __func__, pixd); if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); pixHMT(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*-----------------------------------------------------------------* * Binary morphological (raster) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * \brief pixDilateBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do separably if both hsize and vsize are > 1.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixDilateBrick(NULL, pixs, ...);
 *          (b) pixDilateBrick(pixs, pixs, ...);
 *          (c) pixDilateBrick(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixDilateBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); if (!sel) return (PIX *)ERROR_PTR("sel not made", __func__, pixd); pixd = pixDilate(pixd, pixs, sel); selDestroy(&sel); } else { if ((selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT)) == NULL) return (PIX *)ERROR_PTR("selh not made", __func__, pixd); if ((selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT)) == NULL) { selDestroy(&selh); return (PIX *)ERROR_PTR("selv not made", __func__, pixd); } pixt = pixDilate(NULL, pixs, selh); pixd = pixDilate(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * \brief pixErodeBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do separably if both hsize and vsize are > 1.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixErodeBrick(NULL, pixs, ...);
 *          (b) pixErodeBrick(pixs, pixs, ...);
 *          (c) pixErodeBrick(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixErodeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); if (!sel) return (PIX *)ERROR_PTR("sel not made", __func__, pixd); pixd = pixErode(pixd, pixs, sel); selDestroy(&sel); } else { if ((selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT)) == NULL) return (PIX *)ERROR_PTR("selh not made", __func__, pixd); if ((selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT)) == NULL) { selDestroy(&selh); return (PIX *)ERROR_PTR("selv not made", __func__, pixd); } pixt = pixErode(NULL, pixs, selh); pixd = pixErode(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * \brief pixOpenBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do separably if both hsize and vsize are > 1.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpenBrick(NULL, pixs, ...);
 *          (b) pixOpenBrick(pixs, pixs, ...);
 *          (c) pixOpenBrick(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixOpenBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); if (!sel) return (PIX *)ERROR_PTR("sel not made", __func__, pixd); pixd = pixOpen(pixd, pixs, sel); selDestroy(&sel); } else { /* do separably */ if ((selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT)) == NULL) return (PIX *)ERROR_PTR("selh not made", __func__, pixd); if ((selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT)) == NULL) { selDestroy(&selh); return (PIX *)ERROR_PTR("selv not made", __func__, pixd); } pixt = pixErode(NULL, pixs, selh); pixd = pixErode(pixd, pixt, selv); pixDilate(pixt, pixd, selh); pixDilate(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * \brief pixCloseBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do separably if both hsize and vsize are > 1.
 *      (4) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (5) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseBrick(NULL, pixs, ...);
 *          (b) pixCloseBrick(pixs, pixs, ...);
 *          (c) pixCloseBrick(pixd, pixs, ...);
 *      (6) The size of the result is determined by pixs.
 * 
*/ PIX * pixCloseBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); if (!sel) return (PIX *)ERROR_PTR("sel not made", __func__, pixd); pixd = pixClose(pixd, pixs, sel); selDestroy(&sel); } else { /* do separably */ if ((selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT)) == NULL) return (PIX *)ERROR_PTR("selh not made", __func__, pixd); if ((selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT)) == NULL) { selDestroy(&selh); return (PIX *)ERROR_PTR("selv not made", __func__, pixd); } pixt = pixDilate(NULL, pixs, selh); pixd = pixDilate(pixd, pixt, selv); pixErode(pixt, pixd, selh); pixErode(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * \brief pixCloseSafeBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do separably if both hsize and vsize are > 1.
 *      (4) Safe closing adds a border of 0 pixels, of sufficient size so
 *          that all pixels in input image are processed within
 *          32-bit words in the expanded image.  As a result, there is
 *          no special processing for pixels near the boundary, and there
 *          are no boundary effects.  The border is removed at the end.
 *      (5) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (6) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseBrick(NULL, pixs, ...);
 *          (b) pixCloseBrick(pixs, pixs, ...);
 *          (c) pixCloseBrick(pixd, pixs, ...);
 *      (7) The size of the result is determined by pixs.
 * 
*/ PIX * pixCloseSafeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 maxtrans, bordsize; PIX *pixsb, *pixt, *pixdb; SEL *sel, *selh, *selv; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixCloseBrick(pixd, pixs, hsize, vsize); maxtrans = L_MAX(hsize / 2, vsize / 2); bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ pixsb = pixAddBorder(pixs, bordsize, 0); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); if (!sel) { pixDestroy(&pixsb); return (PIX *)ERROR_PTR("sel not made", __func__, pixd); } pixdb = pixClose(NULL, pixsb, sel); selDestroy(&sel); } else { /* do separably */ selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); if (!selh || !selv) { selDestroy(&selh); selDestroy(&selv); pixDestroy(&pixsb); return (PIX *)ERROR_PTR("selh and selv not both made", __func__, pixd); } pixt = pixDilate(NULL, pixsb, selh); pixdb = pixDilate(NULL, pixt, selv); pixErode(pixt, pixdb, selh); pixErode(pixdb, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } pixt = pixRemoveBorder(pixdb, bordsize); pixDestroy(&pixsb); pixDestroy(&pixdb); if (!pixd) { pixd = pixt; } else { pixCopy(pixd, pixt); pixDestroy(&pixt); } return pixd; } /*-----------------------------------------------------------------* * Binary composed morphological (raster) ops with brick Sels * *-----------------------------------------------------------------*/ /* \brief selectComposableSels() * * \param[in] size of composed sel * \param[in] direction L_HORIZ, L_VERT * \param[out] psel1 [optional] contiguous sel; can be null * \param[out] psel2 [optional] comb sel; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) When using composable Sels, where the original Sel is
 *          decomposed into two, the best you can do in terms
 *          of reducing the computation is by a factor:
 *
 *               2 * sqrt(size) / size
 *
 *          In practice, you get quite close to this.  E.g.,
 *
 *             Sel size     |   Optimum reduction factor
 *             --------         ------------------------
 *                36        |          1/3
 *                64        |          1/4
 *               144        |          1/6
 *               256        |          1/8
 * 
*/ l_int32 selectComposableSels(l_int32 size, l_int32 direction, SEL **psel1, SEL **psel2) { l_int32 factor1, factor2; if (!psel1 && !psel2) return ERROR_INT("neither &sel1 nor &sel2 are defined", __func__, 1); if (psel1) *psel1 = NULL; if (psel2) *psel2 = NULL; if (size < 1 || size > 10000) return ERROR_INT("size < 1 or size > 10000", __func__, 1); if (direction != L_HORIZ && direction != L_VERT) return ERROR_INT("invalid direction", __func__, 1); if (selectComposableSizes(size, &factor1, &factor2)) return ERROR_INT("factors not found", __func__, 1); if (psel1) { if (direction == L_HORIZ) *psel1 = selCreateBrick(1, factor1, 0, factor1 / 2, SEL_HIT); else *psel1 = selCreateBrick(factor1, 1, factor1 / 2 , 0, SEL_HIT); } if (psel2) *psel2 = selCreateComb(factor1, factor2, direction); return 0; } /*! * \brief selectComposableSizes() * * \param[in] size of sel to be decomposed * \param[out] pfactor1 larger factor * \param[out] pfactor2 smaller factor * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This works for Sel sizes up to 10000, which seems sufficient.
 *      (2) The composable sel size is typically within +- 1 of
 *          the requested size.  Up to size = 300, the maximum difference
 *          is +- 2.
 *      (3) We choose an overall cost function where the penalty for
 *          the size difference between input and actual is 4 times
 *          the penalty for additional rasterops.
 *      (4) Returned values: factor1 >= factor2
 *          If size > 1, then factor1 > 1.
 * 
*/ l_ok selectComposableSizes(l_int32 size, l_int32 *pfactor1, l_int32 *pfactor2) { l_int32 i, midval, val1, val2m, val2p; l_int32 index, prodm, prodp; l_int32 mincost, totcost, rastcostm, rastcostp, diffm, diffp; l_int32 lowval[256]; l_int32 hival[256]; l_int32 rastcost[256]; /* excess in sum of sizes (extra rasterops) */ l_int32 diff[256]; /* diff between product (sel size) and input size */ if (size < 1 || size > 10000) return ERROR_INT("size < 1 or size > 10000", __func__, 1); if (!pfactor1 || !pfactor2) return ERROR_INT("&factor1 or &factor2 not defined", __func__, 1); midval = (l_int32)(sqrt((l_float64)size) + 0.001); if (midval * midval == size) { *pfactor1 = *pfactor2 = midval; return 0; } /* Set up arrays. For each val1, optimize for lowest diff, * and save the rastcost, the diff, and the two factors. */ for (val1 = midval + 1, i = 0; val1 > 0; val1--, i++) { val2m = size / val1; val2p = val2m + 1; prodm = val1 * val2m; prodp = val1 * val2p; rastcostm = val1 + val2m - 2 * midval; rastcostp = val1 + val2p - 2 * midval; diffm = L_ABS(size - prodm); diffp = L_ABS(size - prodp); if (diffm <= diffp) { lowval[i] = L_MIN(val1, val2m); hival[i] = L_MAX(val1, val2m); rastcost[i] = rastcostm; diff[i] = diffm; } else { lowval[i] = L_MIN(val1, val2p); hival[i] = L_MAX(val1, val2p); rastcost[i] = rastcostp; diff[i] = diffp; } } /* Choose the optimum factors; use cost ratio 4 on diff */ mincost = 10000; index = 1; /* unimportant initial value */ for (i = 0; i < midval + 1; i++) { if (diff[i] == 0 && rastcost[i] < ACCEPTABLE_COST) { *pfactor1 = hival[i]; *pfactor2 = lowval[i]; return 0; } totcost = 4 * diff[i] + rastcost[i]; if (totcost < mincost) { mincost = totcost; index = i; } } *pfactor1 = hival[index]; *pfactor2 = lowval[index]; return 0; } /*! * \brief pixDilateCompBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do compositely for each dimension > 1.
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (6) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixDilateCompBrick(NULL, pixs, ...);
 *          (b) pixDilateCompBrick(pixs, pixs, ...);
 *          (c) pixDilateCompBrick(pixd, pixs, ...);
 *      (7) The dimensions of the resulting image are determined by pixs.
 *      (8) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *          but not necessarily equal to it.  It attempts to optimize:
 *             (a) for consistency with the input values: the product
 *                 of terms is close to the input size
 *             (b) for efficiency of the operation: the sum of the
 *                 terms is small; ideally about twice the square
 *                 root of the input size.
 *          So, for example, if the input hsize = 37, which is
 *          a prime number, the decomposer will break this into two
 *          terms, 6 and 6, so that the net result is a dilation
 *          with hsize = 36.
 * 
*/ PIX * pixDilateCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pix1, *pix2, *pix3; SEL *selh1 = NULL; SEL *selh2 = NULL; SEL *selv1 = NULL; SEL *selv2 = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) { if (selectComposableSels(hsize, L_HORIZ, &selh1, &selh2)) { selDestroy(&selh1); selDestroy(&selh2); return (PIX *)ERROR_PTR("horiz sels not made", __func__, pixd); } } if (vsize > 1) { if (selectComposableSels(vsize, L_VERT, &selv1, &selv2)) { selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return (PIX *)ERROR_PTR("vert sels not made", __func__, pixd); } } pix1 = pixAddBorder(pixs, 32, 0); if (vsize == 1) { pix2 = pixDilate(NULL, pix1, selh1); pix3 = pixDilate(NULL, pix2, selh2); } else if (hsize == 1) { pix2 = pixDilate(NULL, pix1, selv1); pix3 = pixDilate(NULL, pix2, selv2); } else { pix2 = pixDilate(NULL, pix1, selh1); pix3 = pixDilate(NULL, pix2, selh2); pixDilate(pix2, pix3, selv1); pixDilate(pix3, pix2, selv2); } pixDestroy(&pix1); pixDestroy(&pix2); selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); pix1 = pixRemoveBorder(pix3, 32); pixDestroy(&pix3); if (!pixd) return pix1; pixCopy(pixd, pix1); pixDestroy(&pix1); return pixd; } /*! * \brief pixErodeCompBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do compositely for each dimension > 1.
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (6) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixErodeCompBrick(NULL, pixs, ...);
 *          (b) pixErodeCompBrick(pixs, pixs, ...);
 *          (c) pixErodeCompBrick(pixd, pixs, ...);
 *      (7) The dimensions of the resulting image are determined by pixs.
 *      (8) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *          but not necessarily equal to it.  It attempts to optimize:
 *             (a) for consistency with the input values: the product
 *                 of terms is close to the input size
 *             (b) for efficiency of the operation: the sum of the
 *                 terms is small; ideally about twice the square
 *                 root of the input size.
 *          So, for example, if the input hsize = 37, which is
 *          a prime number, the decomposer will break this into two
 *          terms, 6 and 6, so that the net result is a dilation
 *          with hsize = 36.
 * 
*/ PIX * pixErodeCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1 = NULL; SEL *selh2 = NULL; SEL *selv1 = NULL; SEL *selv2 = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) { if (selectComposableSels(hsize, L_HORIZ, &selh1, &selh2)) { selDestroy(&selh1); selDestroy(&selh2); return (PIX *)ERROR_PTR("horiz sels not made", __func__, pixd); } } if (vsize > 1) { if (selectComposableSels(vsize, L_VERT, &selv1, &selv2)) { selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return (PIX *)ERROR_PTR("vert sels not made", __func__, pixd); } } if (vsize == 1) { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixErode(NULL, pixs, selv1); pixd = pixErode(pixd, pixt, selv2); } else { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } pixDestroy(&pixt); selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return pixd; } /*! * \brief pixOpenCompBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do compositely for each dimension > 1.
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (6) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpenCompBrick(NULL, pixs, ...);
 *          (b) pixOpenCompBrick(pixs, pixs, ...);
 *          (c) pixOpenCompBrick(pixd, pixs, ...);
 *      (7) The dimensions of the resulting image are determined by pixs.
 *      (8) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *          but not necessarily equal to it.  It attempts to optimize:
 *             (a) for consistency with the input values: the product
 *                 of terms is close to the input size
 *             (b) for efficiency of the operation: the sum of the
 *                 terms is small; ideally about twice the square
 *                 root of the input size.
 *          So, for example, if the input hsize = 37, which is
 *          a prime number, the decomposer will break this into two
 *          terms, 6 and 6, so that the net result is a dilation
 *          with hsize = 36.
 * 
*/ PIX * pixOpenCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1 = NULL; SEL *selh2 = NULL; SEL *selv1 = NULL; SEL *selv2 = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) { if (selectComposableSels(hsize, L_HORIZ, &selh1, &selh2)) { selDestroy(&selh1); selDestroy(&selh2); return (PIX *)ERROR_PTR("horiz sels not made", __func__, pixd); } } if (vsize > 1) { if (selectComposableSels(vsize, L_VERT, &selv1, &selv2)) { selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return (PIX *)ERROR_PTR("vert sels not made", __func__, pixd); } } if (vsize == 1) { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixDilate(pixt, pixd, selh1); pixDilate(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixErode(NULL, pixs, selv1); pixd = pixErode(pixd, pixt, selv2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); } else { /* do separably */ pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); pixDilate(pixt, pixd, selh1); pixDilate(pixd, pixt, selh2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); } pixDestroy(&pixt); selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return pixd; } /*! * \brief pixCloseCompBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do compositely for each dimension > 1.
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (6) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseCompBrick(NULL, pixs, ...);
 *          (b) pixCloseCompBrick(pixs, pixs, ...);
 *          (c) pixCloseCompBrick(pixd, pixs, ...);
 *      (7) The dimensions of the resulting image are determined by pixs.
 *      (8) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *          but not necessarily equal to it.  It attempts to optimize:
 *             (a) for consistency with the input values: the product
 *                 of terms is close to the input size
 *             (b) for efficiency of the operation: the sum of the
 *                 terms is small; ideally about twice the square
 *                 root of the input size.
 *          So, for example, if the input hsize = 37, which is
 *          a prime number, the decomposer will break this into two
 *          terms, 6 and 6, so that the net result is a dilation
 *          with hsize = 36.
 * 
*/ PIX * pixCloseCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1 = NULL; SEL *selh2 = NULL; SEL *selv1 = NULL; SEL *selv2 = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) { if (selectComposableSels(hsize, L_HORIZ, &selh1, &selh2)) { selDestroy(&selh1); selDestroy(&selh2); return (PIX *)ERROR_PTR("horiz sels not made", __func__, pixd); } } if (vsize > 1) { if (selectComposableSels(vsize, L_VERT, &selv1, &selv2)) { selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return (PIX *)ERROR_PTR("vert sels not made", __func__, pixd); } } if (vsize == 1) { pixt = pixDilate(NULL, pixs, selh1); pixd = pixDilate(pixd, pixt, selh2); pixErode(pixt, pixd, selh1); pixErode(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixDilate(NULL, pixs, selv1); pixd = pixDilate(pixd, pixt, selv2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } else { /* do separably */ pixt = pixDilate(NULL, pixs, selh1); pixd = pixDilate(pixd, pixt, selh2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); pixErode(pixt, pixd, selh1); pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } pixDestroy(&pixt); selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return pixd; } /*! * \brief pixCloseSafeCompBrick() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
 *      (3) Do compositely for each dimension > 1.
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) Safe closing adds a border of 0 pixels, of sufficient size so
 *          that all pixels in input image are processed within
 *          32-bit words in the expanded image.  As a result, there is
 *          no special processing for pixels near the boundary, and there
 *          are no boundary effects.  The border is removed at the end.
 *      (6) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (7) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseSafeCompBrick(NULL, pixs, ...);
 *          (b) pixCloseSafeCompBrick(pixs, pixs, ...);
 *          (c) pixCloseSafeCompBrick(pixd, pixs, ...);
 *      (8) The dimensions of the resulting image are determined by pixs.
 *      (9) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *          but not necessarily equal to it.  It attempts to optimize:
 *             (a) for consistency with the input values: the product
 *                 of terms is close to the input size
 *             (b) for efficiency of the operation: the sum of the
 *                 terms is small; ideally about twice the square
 *                 root of the input size.
 *          So, for example, if the input hsize = 37, which is
 *          a prime number, the decomposer will break this into two
 *          terms, 6 and 6, so that the net result is a dilation
 *          with hsize = 36.
 * 
*/ PIX * pixCloseSafeCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 maxtrans, bordsize; PIX *pixsb, *pixt, *pixdb; SEL *selh1 = NULL; SEL *selh2 = NULL; SEL *selv1 = NULL; SEL *selv2 = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixCloseCompBrick(pixd, pixs, hsize, vsize); if (hsize > 1) { if (selectComposableSels(hsize, L_HORIZ, &selh1, &selh2)) { selDestroy(&selh1); selDestroy(&selh2); return (PIX *)ERROR_PTR("horiz sels not made", __func__, pixd); } } if (vsize > 1) { if (selectComposableSels(vsize, L_VERT, &selv1, &selv2)) { selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return (PIX *)ERROR_PTR("vert sels not made", __func__, pixd); } } maxtrans = L_MAX(hsize / 2, vsize / 2); bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ pixsb = pixAddBorder(pixs, bordsize, 0); if (vsize == 1) { pixt = pixDilate(NULL, pixsb, selh1); pixdb = pixDilate(NULL, pixt, selh2); pixErode(pixt, pixdb, selh1); pixErode(pixdb, pixt, selh2); } else if (hsize == 1) { pixt = pixDilate(NULL, pixsb, selv1); pixdb = pixDilate(NULL, pixt, selv2); pixErode(pixt, pixdb, selv1); pixErode(pixdb, pixt, selv2); } else { /* do separably */ pixt = pixDilate(NULL, pixsb, selh1); pixdb = pixDilate(NULL, pixt, selh2); pixDilate(pixt, pixdb, selv1); pixDilate(pixdb, pixt, selv2); pixErode(pixt, pixdb, selh1); pixErode(pixdb, pixt, selh2); pixErode(pixt, pixdb, selv1); pixErode(pixdb, pixt, selv2); } pixDestroy(&pixt); pixt = pixRemoveBorder(pixdb, bordsize); pixDestroy(&pixsb); pixDestroy(&pixdb); if (!pixd) { pixd = pixt; } else { pixCopy(pixd, pixt); pixDestroy(&pixt); } selDestroy(&selh1); selDestroy(&selh2); selDestroy(&selv1); selDestroy(&selv2); return pixd; } /*-----------------------------------------------------------------* * Functions associated with boundary conditions * *-----------------------------------------------------------------*/ /*! * \brief resetMorphBoundaryCondition() * * \param[in] bc SYMMETRIC_MORPH_BC, ASYMMETRIC_MORPH_BC * \return void */ void resetMorphBoundaryCondition(l_int32 bc) { if (bc != SYMMETRIC_MORPH_BC && bc != ASYMMETRIC_MORPH_BC) { L_WARNING("invalid bc; using asymmetric\n", __func__); bc = ASYMMETRIC_MORPH_BC; } MORPH_BC = bc; return; } /*! * \brief getMorphBorderPixelColor() * * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE * \param[in] depth of pix * \return color of border pixels for this operation */ l_uint32 getMorphBorderPixelColor(l_int32 type, l_int32 depth) { if (type != L_MORPH_DILATE && type != L_MORPH_ERODE) return ERROR_INT("invalid type", __func__, 0); if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 32) return ERROR_INT("invalid depth", __func__, 0); if (MORPH_BC == ASYMMETRIC_MORPH_BC || type == L_MORPH_DILATE) return 0; /* Symmetric & erosion */ if (depth < 32) return ((1 << depth) - 1); else /* depth == 32 */ return 0xffffff00; } /*-----------------------------------------------------------------* * Static helpers for arg processing * *-----------------------------------------------------------------*/ /*! * \brief processMorphArgs1() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] sel * \param[out] ppixt copy or clone of %pixs * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) This is used for generic erosion, dilation and HMT.
 * 
*/ static PIX * processMorphArgs1(PIX *pixd, PIX *pixs, SEL *sel, PIX **ppixt) { l_int32 sx, sy; if (!ppixt) return (PIX *)ERROR_PTR("&pixt not defined", __func__, pixd); *ppixt = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); selGetParameters(sel, &sx, &sy, NULL, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("sel of size 0", __func__, pixd); /* We require pixd to exist and to be the same size as pixs. * Further, pixt must be a copy (or clone) of pixs. */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); *ppixt = pixClone(pixs); } else { pixResizeImageData(pixd, pixs); if (pixd == pixs) { /* in-place; must make a copy of pixs */ if ((*ppixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); } else { *ppixt = pixClone(pixs); } } return pixd; } /*! * \brief processMorphArgs2() * * This is used for generic openings and closings. */ static PIX * processMorphArgs2(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 sx, sy; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); selGetParameters(sel, &sx, &sy, NULL, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("sel of size 0", __func__, pixd); if (!pixd) return pixCreateTemplate(pixs); pixResizeImageData(pixd, pixs); return pixd; } leptonica-1.86.0/src/morph.h000066400000000000000000000216651506303110300156530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_MORPH_H #define LEPTONICA_MORPH_H /*! * \file morph.h * *
 *  Contains the following structs:
 *      struct Sel
 *      struct Sela
 *      struct Kernel
 *
 *  Contains definitions for:
 *      morphological b.c. flags
 *      structuring element types
 *      runlength flags for granulometry
 *      direction flags for grayscale morphology
 *      morphological operation flags
 *      standard border size
 *      grayscale intensity scaling flags
 *      morphological tophat flags
 *      arithmetic and logical operator flags
 *      grayscale morphology selection flags
 *      distance function b.c. flags
 *      image comparison flags
 * 
*/ /*-------------------------------------------------------------------------* * Sel and Sel array * *-------------------------------------------------------------------------*/ #define SEL_VERSION_NUMBER 1 /*! Selection */ struct Sel { l_int32 sy; /*!< sel height */ l_int32 sx; /*!< sel width */ l_int32 cy; /*!< y location of sel origin */ l_int32 cx; /*!< x location of sel origin */ l_int32 **data; /*!< {0,1,2}; data[i][j] in [row][col] order */ char *name; /*!< used to find sel by name */ }; typedef struct Sel SEL; /*! Array of Sel */ struct Sela { l_int32 n; /*!< number of sel actually stored */ l_int32 nalloc; /*!< size of allocated ptr array */ struct Sel **sel; /*!< sel ptr array */ }; typedef struct Sela SELA; /*-------------------------------------------------------------------------* * Kernel * *-------------------------------------------------------------------------*/ #define KERNEL_VERSION_NUMBER 2 /*! Kernel */ struct L_Kernel { l_int32 sy; /*!< kernel height */ l_int32 sx; /*!< kernel width */ l_int32 cy; /*!< y location of kernel origin */ l_int32 cx; /*!< x location of kernel origin */ l_float32 **data; /*!< data[i][j] in [row][col] order */ }; typedef struct L_Kernel L_KERNEL; /*-------------------------------------------------------------------------* * Morphological boundary condition flags * * * * Two types of boundary condition for erosion. * * The global variable MORPH_BC takes on one of these two values. * * See notes in morph.c for usage. * *-------------------------------------------------------------------------*/ /*! Morph Boundary */ enum { SYMMETRIC_MORPH_BC = 0, ASYMMETRIC_MORPH_BC = 1 }; /*-------------------------------------------------------------------------* * Structuring element vals * *-------------------------------------------------------------------------*/ /*! SEL Vals */ enum { SEL_DONT_CARE = 0, SEL_HIT = 1, SEL_MISS = 2 }; /*-------------------------------------------------------------------------* * Runlength flags for granulometry * *-------------------------------------------------------------------------*/ /*! Runlength Polarity */ enum { L_RUN_OFF = 0, L_RUN_ON = 1 }; /*-------------------------------------------------------------------------* * Direction flags for grayscale morphology, granulometry, * * composable Sels, convolution, etc. * *-------------------------------------------------------------------------*/ /*! Direction Flags */ enum { L_HORIZ = 1, L_VERT = 2, L_BOTH_DIRECTIONS = 3 }; /*-------------------------------------------------------------------------* * Morphological operation flags * *-------------------------------------------------------------------------*/ /*! Morph Operator */ enum { L_MORPH_DILATE = 1, L_MORPH_ERODE = 2, L_MORPH_OPEN = 3, L_MORPH_CLOSE = 4, L_MORPH_HMT = 5 }; /*-------------------------------------------------------------------------* * Grayscale intensity scaling flags * *-------------------------------------------------------------------------*/ /*! Pixel Value Scaling */ enum { L_LINEAR_SCALE = 1, L_LOG_SCALE = 2 }; /*-------------------------------------------------------------------------* * Morphological tophat flags * *-------------------------------------------------------------------------*/ /*! Morph Tophat */ enum { L_TOPHAT_WHITE = 0, L_TOPHAT_BLACK = 1 }; /*-------------------------------------------------------------------------* * Arithmetic and logical operator flags * * (use on grayscale images and Numas) * *-------------------------------------------------------------------------*/ /*! ArithLogical Ops */ enum { L_ARITH_ADD = 1, L_ARITH_SUBTRACT = 2, L_ARITH_MULTIPLY = 3, /* on numas only */ L_ARITH_DIVIDE = 4, /* on numas only */ L_UNION = 5, /* on numas only */ L_INTERSECTION = 6, /* on numas only */ L_SUBTRACTION = 7, /* on numas only */ L_EXCLUSIVE_OR = 8 /* on numas only */ }; /*-------------------------------------------------------------------------* * Min/max selection flags * *-------------------------------------------------------------------------*/ /*! MinMax Selection */ enum { L_CHOOSE_MIN = 1, /* useful in a downscaling "erosion" */ L_CHOOSE_MAX = 2, /* useful in a downscaling "dilation" */ L_CHOOSE_MAXDIFF = 3, /* useful in a downscaling contrast */ L_CHOOSE_MIN_BOOST = 4, /* use a modification of the min value */ L_CHOOSE_MAX_BOOST = 5 /* use a modification of the max value */ }; /*-------------------------------------------------------------------------* * Exterior value b.c. for distance function flags * *-------------------------------------------------------------------------*/ /*! Exterior Value */ enum { L_BOUNDARY_BG = 1, /* assume bg outside image */ L_BOUNDARY_FG = 2 /* assume fg outside image */ }; /*-------------------------------------------------------------------------* * Image comparison flags * *-------------------------------------------------------------------------*/ /*! Image Comparison */ enum { L_COMPARE_XOR = 1, L_COMPARE_SUBTRACT = 2, L_COMPARE_ABS_DIFF = 3 }; /*-------------------------------------------------------------------------* * Standard size of border added around images for special processing * *-------------------------------------------------------------------------*/ static const l_int32 ADDED_BORDER = 32; /*!< pixels, not bits */ #endif /* LEPTONICA_MORPH_H */ leptonica-1.86.0/src/morphapp.c000066400000000000000000001565631506303110300163550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file morphapp.c *
 *
 *      These are some useful and/or interesting composite
 *      image processing operations, of the type that are often
 *      useful in applications.  Most are morphological in
 *      nature.
 *
 *      Extraction of boundary pixels
 *            PIX       *pixExtractBoundary()
 *
 *      Selective morph sequence operation under mask
 *            PIX       *pixMorphSequenceMasked()
 *
 *      Selective morph sequence operation on each component
 *            PIX       *pixMorphSequenceByComponent()
 *            PIXA      *pixaMorphSequenceByComponent()
 *
 *      Selective morph sequence operation on each region
 *            PIX       *pixMorphSequenceByRegion()
 *            PIXA      *pixaMorphSequenceByRegion()
 *
 *      Union and intersection of parallel composite operations
 *            PIX       *pixUnionOfMorphOps()
 *            PIX       *pixIntersectionOfMorphOps()
 *
 *      Selective connected component filling
 *            PIX       *pixSelectiveConnCompFill()
 *
 *      Removal of matched patterns
 *            PIX       *pixRemoveMatchedPattern()
 *
 *      Display of matched patterns
 *            PIX       *pixDisplayMatchedPattern()
 *
 *      Extension of pixa by iterative erosion or dilation (and by scaling)
 *            PIXA      *pixaExtendByMorph()
 *            PIXA      *pixaExtendByScaling()
 *
 *      Iterative morphological seed filling (don't use for real work)
 *            PIX       *pixSeedfillMorph()
 *
 *      Granulometry on binary images
 *            NUMA      *pixRunHistogramMorph()
 *
 *      Composite operations on grayscale images
 *            PIX       *pixTophat()
 *            PIX       *pixHDome()
 *            PIX       *pixFastTophat()
 *            PIX       *pixMorphGradient()
 *
 *      Centroid of component
 *            PTA       *pixaCentroids()
 *            l_int32    pixCentroid()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "array_internal.h" #define SWAP(x, y) {temp = (x); (x) = (y); (y) = temp;} /*-----------------------------------------------------------------* * Extraction of boundary pixels * *-----------------------------------------------------------------*/ /*! * \brief pixExtractBoundary() * * \param[in] pixs 1 bpp * \param[in] type 0 for background pixels; 1 for foreground pixels * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Extracts the fg or bg boundary pixels for each component.
 *          Components are assumed to end at the boundary of pixs.
 * 
*/ PIX * pixExtractBoundary(PIX *pixs, l_int32 type) { PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (type == 0) pixd = pixDilateBrick(NULL, pixs, 3, 3); else pixd = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixd, pixd, pixs); return pixd; } /*-----------------------------------------------------------------* * Selective morph sequence operation under mask * *-----------------------------------------------------------------*/ /*! * \brief pixMorphSequenceMasked() * * \param[in] pixs 1 bpp * \param[in] pixm [optional] 1 bpp mask * \param[in] sequence string specifying sequence of operations * \param[in] dispsep horizontal separation in pixels between * successive displays; use zero to suppress display * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This applies the morph sequence to the image, but only allows
 *          changes in pixs for pixels under the background of pixm.
 *      (5) If pixm is NULL, this is just pixMorphSequence().
 * 
*/ PIX * pixMorphSequenceMasked(PIX *pixs, PIX *pixm, const char *sequence, l_int32 dispsep) { PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); pixd = pixMorphSequence(pixs, sequence, dispsep); pixCombineMasked(pixd, pixs, pixm); /* restore src pixels under mask fg */ return pixd; } /*-----------------------------------------------------------------* * Morph sequence operation on each component * *-----------------------------------------------------------------*/ /*! * \brief pixMorphSequenceByComponent() * * \param[in] pixs 1 bpp * \param[in] sequence string specifying sequence * \param[in] connectivity 4 or 8 * \param[in] minw min width to consider; use 0 or 1 for any width * \param[in] minh min height to consider; use 0 or 1 for any height * \param[out] pboxa [optional] return boxa of c.c. in pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See pixMorphSequence() for composing operation sequences.
 *      (2) This operates separately on each c.c. in the input pix.
 *      (3) The dilation does NOT increase the c.c. size; it is clipped
 *          to the size of the original c.c.   This is necessary to
 *          keep the c.c. independent after the operation.
 *      (4) You can specify that the width and/or height must equal
 *          or exceed a minimum size for the operation to take place.
 *      (5) Use NULL for boxa to avoid returning the boxa.
 * 
*/ PIX * pixMorphSequenceByComponent(PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix, *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; /* Get the c.c. */ if ((boxa = pixConnComp(pixs, &pixas, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", __func__, NULL); /* Operate on each c.c. independently */ pixad = pixaMorphSequenceByComponent(pixas, sequence, minw, minh); pixaDestroy(&pixas); boxaDestroy(&boxa); if (!pixad) return (PIX *)ERROR_PTR("pixad not made", __func__, NULL); /* Display the result out into pixd */ pixd = pixCreateTemplate(pixs); n = pixaGetCount(pixad); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); pix = pixaGetPix(pixad, i, L_CLONE); pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); pixDestroy(&pix); } if (pboxa) *pboxa = pixaGetBoxa(pixad, L_CLONE); pixaDestroy(&pixad); return pixd; } /*! * \brief pixaMorphSequenceByComponent() * * \param[in] pixas of 1 bpp pix * \param[in] sequence string specifying sequence * \param[in] minw min width to consider; use 0 or 1 for any width * \param[in] minh min height to consider; use 0 or 1 for any height * \return pixad, or NULL on error * *
 * Notes:
 *      (1) See pixMorphSequence() for composing operation sequences.
 *      (2) This operates separately on each c.c. in the input pixa.
 *      (3) You can specify that the width and/or height must equal
 *          or exceed a minimum size for the operation to take place.
 *      (4) The input pixa should have a boxa giving the locations
 *          of the pix components.
 * 
*/ PIXA * pixaMorphSequenceByComponent(PIXA *pixas, const char *sequence, l_int32 minw, l_int32 minh) { l_int32 n, i, w, h, d; BOX *box; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no pix in pixas", __func__, NULL); if (n != pixaGetBoxaCount(pixas)) L_WARNING("boxa size != n\n", __func__); pixaGetPixDimensions(pixas, 0, NULL, NULL, &d); if (d != 1) return (PIXA *)ERROR_PTR("depth not 1 bpp", __func__, NULL); if (!sequence) return (PIXA *)ERROR_PTR("sequence not defined", __func__, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); for (i = 0; i < n; i++) { pixaGetPixDimensions(pixas, i, &w, &h, NULL); if (w >= minw && h >= minh) { if ((pix1 = pixaGetPix(pixas, i, L_CLONE)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pix1 not found", __func__, NULL); } if ((pix2 = pixMorphCompSequence(pix1, sequence, 0)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pix2 not made", __func__, NULL); } pixaAddPix(pixad, pix2, L_INSERT); box = pixaGetBox(pixas, i, L_COPY); pixaAddBox(pixad, box, L_INSERT); pixDestroy(&pix1); } } return pixad; } /*-----------------------------------------------------------------* * Morph sequence operation on each region * *-----------------------------------------------------------------*/ /*! * \brief pixMorphSequenceByRegion() * * \param[in] pixs 1 bpp * \param[in] pixm mask specifying regions * \param[in] sequence string specifying sequence * \param[in] connectivity 4 or 8, used on mask * \param[in] minw min width to consider; use 0 or 1 for any width * \param[in] minh min height to consider; use 0 or 1 for any height * \param[out] pboxa [optional] return boxa of c.c. in pixm * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See pixMorphCompSequence() for composing operation sequences.
 *      (2) This operates separately on the region in pixs corresponding
 *          to each c.c. in the mask pixm.  It differs from
 *          pixMorphSequenceByComponent() in that the latter does not have
 *          a pixm (mask), but instead operates independently on each
 *          component in pixs.
 *      (3) Dilation will NOT increase the region size; the result
 *          is clipped to the size of the mask region.  This is necessary
 *          to make regions independent after the operation.
 *      (4) You can specify that the width and/or height of a region must
 *          equal or exceed a minimum size for the operation to take place.
 *      (5) Use NULL for %pboxa to avoid returning the boxa.
 * 
*/ PIX * pixMorphSequenceByRegion(PIX *pixs, PIX *pixm, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix, *pixd; PIXA *pixam, *pixad; if (pboxa) *pboxa = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixm) return (PIX *)ERROR_PTR("pixm not defined", __func__, NULL); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixs and pixm not both 1 bpp", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; /* Get the c.c. of the mask */ if ((boxa = pixConnComp(pixm, &pixam, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", __func__, NULL); /* Operate on each region in pixs independently */ pixad = pixaMorphSequenceByRegion(pixs, pixam, sequence, minw, minh); pixaDestroy(&pixam); boxaDestroy(&boxa); if (!pixad) return (PIX *)ERROR_PTR("pixad not made", __func__, NULL); /* Display the result out into pixd */ pixd = pixCreateTemplate(pixs); n = pixaGetCount(pixad); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); pix = pixaGetPix(pixad, i, L_CLONE); pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); pixDestroy(&pix); } if (pboxa) *pboxa = pixaGetBoxa(pixad, L_CLONE); pixaDestroy(&pixad); return pixd; } /*! * \brief pixaMorphSequenceByRegion() * * \param[in] pixs 1 bpp * \param[in] pixam of 1 bpp mask elements * \param[in] sequence string specifying sequence * \param[in] minw min width to consider; use 0 or 1 for any width * \param[in] minh min height to consider; use 0 or 1 for any height * \return pixad, or NULL on error * *
 * Notes:
 *      (1) See pixMorphSequence() for composing operation sequences.
 *      (2) This operates separately on each region in the input pixs
 *          defined by the components in pixam.
 *      (3) You can specify that the width and/or height of a mask
 *          component must equal or exceed a minimum size for the
 *          operation to take place.
 *      (4) The input pixam should have a boxa giving the locations
 *          of the regions in pixs.
 * 
*/ PIXA * pixaMorphSequenceByRegion(PIX *pixs, PIXA *pixam, const char *sequence, l_int32 minw, l_int32 minh) { l_int32 n, i, w, h, same, maxd, fullpa, fullba; BOX *box; PIX *pix1, *pix2, *pix3; PIXA *pixad; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIXA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (!sequence) return (PIXA *)ERROR_PTR("sequence not defined", __func__, NULL); if (!pixam) return (PIXA *)ERROR_PTR("pixam not defined", __func__, NULL); pixaVerifyDepth(pixam, &same, &maxd); if (maxd != 1) return (PIXA *)ERROR_PTR("mask depth not 1 bpp", __func__, NULL); pixaIsFull(pixam, &fullpa, &fullba); if (!fullpa || !fullba) return (PIXA *)ERROR_PTR("missing comps in pixam", __func__, NULL); n = pixaGetCount(pixam); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); /* Use the rectangle to remove the appropriate part of pixs; * then AND with the mask component to get the actual fg * of pixs that is under the mask component. */ for (i = 0; i < n; i++) { pixaGetPixDimensions(pixam, i, &w, &h, NULL); if (w >= minw && h >= minh) { pix1 = pixaGetPix(pixam, i, L_CLONE); box = pixaGetBox(pixam, i, L_COPY); pix2 = pixClipRectangle(pixs, box, NULL); pixAnd(pix2, pix2, pix1); pix3 = pixMorphCompSequence(pix2, sequence, 0); pixDestroy(&pix1); pixDestroy(&pix2); if (!pix3) { boxDestroy(&box); pixaDestroy(&pixad); L_ERROR("pix3 not made in iter %d; aborting\n", __func__, i); break; } pixaAddPix(pixad, pix3, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*-----------------------------------------------------------------* * Union and intersection of parallel composite operations * *-----------------------------------------------------------------*/ /*! * \brief pixUnionOfMorphOps() * * \param[in] pixs 1 bpp * \param[in] sela * \param[in] type L_MORPH_DILATE, etc. * \return pixd union of the specified morphological operation * on pixs for each Sel in the Sela, or NULL on error */ PIX * pixUnionOfMorphOps(PIX *pixs, SELA *sela, l_int32 type) { l_int32 n, i; PIX *pixt, *pixd; SEL *sel; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", __func__, NULL); n = selaGetCount(sela); if (n == 0) return (PIX *)ERROR_PTR("no sels in sela", __func__, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE && type != L_MORPH_HMT) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixd = pixCreateTemplate(pixs); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); if (type == L_MORPH_DILATE) pixt = pixDilate(NULL, pixs, sel); else if (type == L_MORPH_ERODE) pixt = pixErode(NULL, pixs, sel); else if (type == L_MORPH_OPEN) pixt = pixOpen(NULL, pixs, sel); else if (type == L_MORPH_CLOSE) pixt = pixClose(NULL, pixs, sel); else /* type == L_MORPH_HMT */ pixt = pixHMT(NULL, pixs, sel); pixOr(pixd, pixd, pixt); pixDestroy(&pixt); } return pixd; } /*! * \brief pixIntersectionOfMorphOps() * * \param[in] pixs 1 bpp * \param[in] sela * \param[in] type L_MORPH_DILATE, etc. * \return pixd intersection of the specified morphological operation * on pixs for each Sel in the Sela, or NULL on error */ PIX * pixIntersectionOfMorphOps(PIX *pixs, SELA *sela, l_int32 type) { l_int32 n, i; PIX *pixt, *pixd; SEL *sel; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", __func__, NULL); n = selaGetCount(sela); if (n == 0) return (PIX *)ERROR_PTR("no sels in sela", __func__, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE && type != L_MORPH_HMT) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixd = pixCreateTemplate(pixs); pixSetAll(pixd); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); if (type == L_MORPH_DILATE) pixt = pixDilate(NULL, pixs, sel); else if (type == L_MORPH_ERODE) pixt = pixErode(NULL, pixs, sel); else if (type == L_MORPH_OPEN) pixt = pixOpen(NULL, pixs, sel); else if (type == L_MORPH_CLOSE) pixt = pixClose(NULL, pixs, sel); else /* type == L_MORPH_HMT */ pixt = pixHMT(NULL, pixs, sel); pixAnd(pixd, pixd, pixt); pixDestroy(&pixt); } return pixd; } /*-----------------------------------------------------------------* * Selective connected component filling * *-----------------------------------------------------------------*/ /*! * \brief pixSelectiveConnCompFill() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \param[in] minw min width to consider; use 0 or 1 for any width * \param[in] minh min height to consider; use 0 or 1 for any height * \return pix with holes filled in selected c.c., or NULL on error */ PIX * pixSelectiveConnCompFill(PIX *pixs, l_int32 connectivity, l_int32 minw, l_int32 minh) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((boxa = pixConnComp(pixs, &pixa, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", __func__, NULL); n = boxaGetCount(boxa); pixd = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); if (w >= minw && h >= minh) { pix1 = pixaGetPix(pixa, i, L_CLONE); if ((pix2 = pixHolesByFilling(pix1, 12 - connectivity)) == NULL) { L_ERROR("pix2 not made in iter %d\n", __func__, i); pixDestroy(&pix1); continue; } pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } } pixaDestroy(&pixa); boxaDestroy(&boxa); return pixd; } /*-----------------------------------------------------------------* * Removal of matched patterns * *-----------------------------------------------------------------*/ /*! * \brief pixRemoveMatchedPattern() * * \param[in] pixs input image, 1 bpp * \param[in] pixp pattern to be removed from image, 1 bpp * \param[in] pixe image after erosion by Sel that approximates pixp * \param[in] x0, y0 center of Sel * \param[in] dsize number of pixels on each side by which pixp is * dilated before being subtracted from pixs; * valid values are {0, 1, 2, 3, 4} * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) This is in-place.
 *    (2) You can use various functions in selgen to create a Sel
 *        that is used to generate pixe from pixs.
 *    (3) This function is applied after pixe has been computed.
 *        It finds the centroid of each c.c., and subtracts
 *        (the appropriately dilated version of) pixp, with the center
 *        of the Sel used to align pixp with pixs.
 * 
*/ l_ok pixRemoveMatchedPattern(PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_int32 dsize) { l_int32 i, nc, x, y, w, h, xb, yb; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixa; PTA *pta; SEL *sel; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixp) return ERROR_INT("pixp not defined", __func__, 1); if (!pixe) return ERROR_INT("pixe not defined", __func__, 1); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || pixGetDepth(pixe) != 1) return ERROR_INT("all input pix not 1 bpp", __func__, 1); if (dsize < 0 || dsize > 4) return ERROR_INT("dsize not in {0,1,2,3,4}", __func__, 1); /* Find the connected components and their centroids */ boxa = pixConnComp(pixe, &pixa, 8); if ((nc = boxaGetCount(boxa)) == 0) { L_WARNING("no matched patterns\n", __func__); boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } pta = pixaCentroids(pixa); pixaDestroy(&pixa); /* Optionally dilate the pattern, first adding a border that * is large enough to accommodate the dilated pixels */ sel = NULL; if (dsize > 0) { sel = selCreateBrick(2 * dsize + 1, 2 * dsize + 1, dsize, dsize, SEL_HIT); pix1 = pixAddBorder(pixp, dsize, 0); pix2 = pixDilate(NULL, pix1, sel); selDestroy(&sel); pixDestroy(&pix1); } else { pix2 = pixClone(pixp); } /* Subtract out each dilated pattern. The centroid of each * component is located at: * (box->x + x, box->y + y) * and the 'center' of the pattern used in making pixe is located at * (x0 + dsize, (y0 + dsize) * relative to the UL corner of the pattern. The center of the * pattern is placed at the center of the component. */ pixGetDimensions(pix2, &w, &h, NULL); for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); pixRasterop(pixs, xb + x - x0 - dsize, yb + y - y0 - dsize, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); } boxaDestroy(&boxa); ptaDestroy(&pta); pixDestroy(&pix2); return 0; } /*-----------------------------------------------------------------* * Display of matched patterns * *-----------------------------------------------------------------*/ /*! * \brief pixDisplayMatchedPattern() * * \param[in] pixs input image, 1 bpp * \param[in] pixp pattern to be removed from image, 1 bpp * \param[in] pixe image after erosion by Sel that approximates pixp * \param[in] x0, y0 center of Sel * \param[in] color to paint the matched patterns; 0xrrggbb00 * \param[in] scale reduction factor for output pixd * \param[in] nlevels if scale < 1.0, threshold to this number of levels * \return pixd 8 bpp, colormapped, or NULL on error * *
 * Notes:
 *    (1) A 4 bpp colormapped image is generated.
 *    (2) If scale <= 1.0, do scale to gray for the output, and threshold
 *        to nlevels of gray.
 *    (3) You can use various functions in selgen to create a Sel
 *        that will generate pixe from pixs.
 *    (4) This function is applied after pixe has been computed.
 *        It finds the centroid of each c.c., and colors the output
 *        pixels using pixp (appropriately aligned) as a stencil.
 *        Alignment is done using the origin of the Sel and the
 *        centroid of the eroded image to place the stencil pixp.
 * 
*/ PIX * pixDisplayMatchedPattern(PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_uint32 color, l_float32 scale, l_int32 nlevels) { l_int32 i, nc, xb, yb, x, y, xi, yi, rval, gval, bval; BOXA *boxa; PIX *pixd, *pixt, *pixps; PIXA *pixa; PTA *pta; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", __func__, NULL); if (!pixe) return (PIX *)ERROR_PTR("pixe not defined", __func__, NULL); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || pixGetDepth(pixe) != 1) return (PIX *)ERROR_PTR("all input pix not 1 bpp", __func__, NULL); if (scale > 1.0 || scale <= 0.0) { L_WARNING("scale > 1.0 or < 0.0; setting to 1.0\n", __func__); scale = 1.0; } /* Find the connected components and their centroids */ boxa = pixConnComp(pixe, &pixa, 8); if ((nc = boxaGetCount(boxa)) == 0) { L_WARNING("no matched patterns\n", __func__); boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } pta = pixaCentroids(pixa); extractRGBValues(color, &rval, &gval, &bval); if (scale == 1.0) { /* output 4 bpp at full resolution */ pixd = pixConvert1To4(NULL, pixs, 0, 1); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); /* Paint through pixp for each match location. The centroid of each * component in pixe is located at: * (box->x + x, box->y + y) * and the 'center' of the pattern used in making pixe is located at * (x0, y0) * relative to the UL corner of the pattern. The center of the * pattern is placed at the center of the component. */ for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); pixSetMaskedCmap(pixd, pixp, xb + x - x0, yb + y - y0, rval, gval, bval); } } else { /* output 4 bpp downscaled */ pixt = pixScaleToGray(pixs, scale); pixd = pixThresholdTo4bpp(pixt, nlevels, 1); pixps = pixScaleBySampling(pixp, scale, scale); for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); xi = (l_int32)(scale * (xb + x - x0)); yi = (l_int32)(scale * (yb + y - y0)); pixSetMaskedCmap(pixd, pixps, xi, yi, rval, gval, bval); } pixDestroy(&pixt); pixDestroy(&pixps); } boxaDestroy(&boxa); pixaDestroy(&pixa); ptaDestroy(&pta); return pixd; } /*------------------------------------------------------------------------* * Extension of pixa by iterative erosion or dilation (and by scaling) * *------------------------------------------------------------------------*/ /*! * \brief pixaExtendByMorph() * * \param[in] pixas * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE * \param[in] niters * \param[in] sel used for dilation, erosion; uses 2x2 if null * \param[in] include 1 to include a copy of the input pixas in pixad; * 0 to omit * \return pixad with derived pix, using all iterations, or NULL on error * *
 * Notes:
 *    (1) This dilates or erodes every pix in %pixas, iteratively,
 *        using the input Sel (or, if null, a 2x2 Sel by default),
 *        and puts the results in %pixad.
 *    (2) If %niters <= 0, this is a no-op; it returns a clone of pixas.
 *    (3) If %include == 1, the output %pixad contains all the pix
 *        in %pixas.  Otherwise, it doesn't, but pixaJoin() can be
 *        used later to join pixas with pixad.
 * 
*/ PIXA * pixaExtendByMorph(PIXA *pixas, l_int32 type, l_int32 niters, SEL *sel, l_int32 include) { l_int32 maxdepth, i, j, n; PIX *pix0, *pix1, *pix2; SEL *selt; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas undefined", __func__, NULL); if (niters <= 0) { L_INFO("niters = %d; nothing to do\n", __func__, niters); return pixaCopy(pixas, L_CLONE); } if (type != L_MORPH_DILATE && type != L_MORPH_ERODE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); pixaGetDepthInfo(pixas, &maxdepth, NULL); if (maxdepth > 1) return (PIXA *)ERROR_PTR("some pix have bpp > 1", __func__, NULL); if (!sel) selt = selCreateBrick(2, 2, 0, 0, SEL_HIT); /* default */ else selt = selCopy(sel); n = pixaGetCount(pixas); pixad = pixaCreate(n * niters); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (include) pixaAddPix(pixad, pix1, L_COPY); pix0 = pix1; /* need to keep the handle to destroy the clone */ for (j = 0; j < niters; j++) { if (type == L_MORPH_DILATE) { pix2 = pixDilate(NULL, pix1, selt); } else { /* L_MORPH_ERODE */ pix2 = pixErode(NULL, pix1, selt); } pixaAddPix(pixad, pix2, L_INSERT); pix1 = pix2; /* owned by pixad; do not destroy */ } pixDestroy(&pix0); } selDestroy(&selt); return pixad; } /*! * \brief pixaExtendByScaling() * * \param[in] pixas * \param[in] nasc numa of scaling factors * \param[in] type L_HORIZ, L_VERT, L_BOTH_DIRECTIONS * \param[in] include 1 to include a copy of the input pixas in pixad; * 0 to omit * \return pixad with derived pix, using all scalings, or NULL on error * *
 * Notes:
 *    (1) This scales every pix in %pixas by each factor in %nasc.
 *        and puts the results in %pixad.
 *    (2) If %include == 1, the output %pixad contains all the pix
 *        in %pixas.  Otherwise, it doesn't, but pixaJoin() can be
 *        used later to join pixas with pixad.
 * 
*/ PIXA * pixaExtendByScaling(PIXA *pixas, NUMA *nasc, l_int32 type, l_int32 include) { l_int32 i, j, n, nsc, w, h, scalew, scaleh; l_float32 scalefact; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas undefined", __func__, NULL); if (!nasc || numaGetCount(nasc) == 0) return (PIXA *)ERROR_PTR("nasc undefined or empty", __func__, NULL); if (type != L_HORIZ && type != L_VERT && type != L_BOTH_DIRECTIONS) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); n = pixaGetCount(pixas); nsc = numaGetCount(nasc); if ((pixad = pixaCreate(n * (nsc + 1))) == NULL) { L_ERROR("pixad not made: n = %d, nsc = %d\n", __func__, n, nsc); return NULL; } for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (include) pixaAddPix(pixad, pix1, L_COPY); pixGetDimensions(pix1, &w, &h, NULL); for (j = 0; j < nsc; j++) { numaGetFValue(nasc, j, &scalefact); scalew = w; scaleh = h; if (type == L_HORIZ || type == L_BOTH_DIRECTIONS) scalew = w * scalefact; if (type == L_VERT || type == L_BOTH_DIRECTIONS) scaleh = h * scalefact; pix2 = pixScaleToSize(pix1, scalew, scaleh); pixaAddPix(pixad, pix2, L_INSERT); } pixDestroy(&pix1); } return pixad; } /*-----------------------------------------------------------------* * Iterative morphological seed filling * *-----------------------------------------------------------------*/ /*! * \brief pixSeedfillMorph() * * \param[in] pixs seed * \param[in] pixm mask * \param[in] maxiters use 0 to go to completion * \param[in] connectivity 4 or 8 * \return pixd after filling into the mask or NULL on error * *
 * Notes:
 *    (1) This is in general a very inefficient method for filling
 *        from a seed into a mask.  Use it for a small number of iterations,
 *        but if you expect more than a few iterations, use
 *        pixSeedfillBinary().
 *    (2) We use a 3x3 brick SEL for 8-cc filling and a 3x3 plus SEL for 4-cc.
 * 
*/ PIX * pixSeedfillMorph(PIX *pixs, PIX *pixm, l_int32 maxiters, l_int32 connectivity) { l_int32 same, i; PIX *pixt, *pixd, *temp; SEL *sel_3; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!pixm) return (PIX *)ERROR_PTR("mask pix not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", __func__, NULL); if (maxiters <= 0) maxiters = 1000; if (pixSizesEqual(pixs, pixm) == 0) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, NULL); if ((sel_3 = selCreateBrick(3, 3, 1, 1, SEL_HIT)) == NULL) return (PIX *)ERROR_PTR("sel_3 not made", __func__, NULL); if (connectivity == 4) { /* remove corner hits to make a '+' */ selSetElement(sel_3, 0, 0, SEL_DONT_CARE); selSetElement(sel_3, 2, 2, SEL_DONT_CARE); selSetElement(sel_3, 2, 0, SEL_DONT_CARE); selSetElement(sel_3, 0, 2, SEL_DONT_CARE); } pixt = pixCopy(NULL, pixs); pixd = pixCreateTemplate(pixs); for (i = 1; i <= maxiters; i++) { pixDilate(pixd, pixt, sel_3); pixAnd(pixd, pixd, pixm); pixEqual(pixd, pixt, &same); if (same || i == maxiters) break; else SWAP(pixt, pixd); } lept_stderr(" Num iters in binary reconstruction = %d\n", i); pixDestroy(&pixt); selDestroy(&sel_3); return pixd; } /*-----------------------------------------------------------------* * Granulometry on binary images * *-----------------------------------------------------------------*/ /*! * \brief pixRunHistogramMorph() * * \param[in] pixs 1 bpp * \param[in] runtype L_RUN_OFF, L_RUN_ON * \param[in] direction L_HORIZ, L_VERT * \param[in] maxsize size of largest runlength counted * \return numa of run-lengths */ NUMA * pixRunHistogramMorph(PIX *pixs, l_int32 runtype, l_int32 direction, l_int32 maxsize) { l_int32 count, i, size; l_float32 val; NUMA *na, *nah; PIX *pix1, *pix2, *pix3; SEL *sel_2a; if (!pixs) return (NUMA *)ERROR_PTR("seed pix not defined", __func__, NULL); if (runtype != L_RUN_OFF && runtype != L_RUN_ON) return (NUMA *)ERROR_PTR("invalid run type", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT) return (NUMA *)ERROR_PTR("direction not in {L_HORIZ, L_VERT}", __func__, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs must be binary", __func__, NULL); if (direction == L_HORIZ) sel_2a = selCreateBrick(1, 2, 0, 0, SEL_HIT); else /* direction == L_VERT */ sel_2a = selCreateBrick(2, 1, 0, 0, SEL_HIT); if (!sel_2a) return (NUMA *)ERROR_PTR("sel_2a not made", __func__, NULL); if (runtype == L_RUN_OFF) { if ((pix1 = pixCopy(NULL, pixs)) == NULL) { selDestroy(&sel_2a); return (NUMA *)ERROR_PTR("pix1 not made", __func__, NULL); } pixInvert(pix1, pix1); } else { /* runtype == L_RUN_ON */ pix1 = pixClone(pixs); } /* Get pixel counts at different stages of erosion */ na = numaCreate(0); pix2 = pixCreateTemplate(pixs); pix3 = pixCreateTemplate(pixs); pixCountPixels(pix1, &count, NULL); numaAddNumber(na, count); pixErode(pix2, pix1, sel_2a); pixCountPixels(pix2, &count, NULL); numaAddNumber(na, count); for (i = 0; i < maxsize / 2; i++) { pixErode(pix3, pix2, sel_2a); pixCountPixels(pix3, &count, NULL); numaAddNumber(na, count); pixErode(pix2, pix3, sel_2a); pixCountPixels(pix2, &count, NULL); numaAddNumber(na, count); } /* Compute length histogram */ size = numaGetCount(na); nah = numaCreate(size); numaAddNumber(nah, 0); /* number at length 0 */ for (i = 1; i < size - 1; i++) { val = na->array[i+1] - 2 * na->array[i] + na->array[i-1]; numaAddNumber(nah, val); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); selDestroy(&sel_2a); numaDestroy(&na); return nah; } /*-----------------------------------------------------------------* * Composite operations on grayscale images * *-----------------------------------------------------------------*/ /*! * \brief pixTophat() * * \param[in] pixs 1 bpp * \param[in] hsize of Sel; must be odd; origin implicitly in center * \param[in] vsize ditto * \param[in] type L_TOPHAT_WHITE: image - opening * L_TOPHAT_BLACK: closing - image * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Sel is a brick with all elements being hits
 *      (2) If hsize = vsize = 1, returns an image with all 0 data.
 *      (3) The L_TOPHAT_WHITE flag emphasizes small bright regions,
 *          whereas the L_TOPHAT_BLACK flag emphasizes small dark regions.
 *          The L_TOPHAT_WHITE tophat can be accomplished by doing a
 *          L_TOPHAT_BLACK tophat on the inverse, or v.v.
 * 
*/ PIX * pixTophat(PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 type) { PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", __func__, NULL); if (hsize == 1 && vsize == 1) return pixCreateTemplate(pixs); switch (type) { case L_TOPHAT_WHITE: if ((pixt = pixOpenGray(pixs, hsize, vsize)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixSubtractGray(NULL, pixs, pixt); pixDestroy(&pixt); break; case L_TOPHAT_BLACK: if ((pixd = pixCloseGray(pixs, hsize, vsize)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSubtractGray(pixd, pixd, pixs); break; default: return (PIX *)ERROR_PTR("invalid type", __func__, NULL); } return pixd; } /*! * \brief pixHDome() * * \param[in] pixs 8 bpp, filling mask * \param[in] height of seed below the filling maskhdome; must be >= 0 * \param[in] connectivity 4 or 8 * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) It is more efficient to use a connectivity of 4 for the fill.
 *      (2) This fills bumps to some level, and extracts the unfilled
 *          part of the bump.  To extract the troughs of basins, first
 *          invert pixs and then apply pixHDome().
 *      (3) It is useful to compare the HDome operation with the TopHat.
 *          The latter extracts peaks or valleys that have a width
 *          not exceeding the size of the structuring element used
 *          in the opening or closing, rsp.  The height of the peak is
 *          irrelevant.  By contrast, for the HDome, the gray seedfill
 *          is used to extract all peaks that have a height not exceeding
 *          a given value, regardless of their width!
 *      (4) Slightly more precisely, suppose you set 'height' = 40.
 *          Then all bumps in pixs with a height greater than or equal
 *          to 40 become, in pixd, bumps with a max value of exactly 40.
 *          All shorter bumps have a max value in pixd equal to the height
 *          of the bump.
 *      (5) The method: the filling mask, pixs, is the image whose peaks
 *          are to be extracted.  The height of a peak is the distance
 *          between the top of the peak and the highest "leak" to the
 *          outside -- think of a sombrero, where the leak occurs
 *          at the highest point on the rim.
 *            (a) Generate a seed, pixd, by subtracting some value, p, from
 *                each pixel in the filling mask, pixs.  The value p is
 *                the 'height' input to this function.
 *            (b) Fill in pixd starting with this seed, clipping by pixs,
 *                in the way described in seedfillGrayLow().  The filling
 *                stops before the peaks in pixs are filled.
 *                For peaks that have a height > p, pixd is filled to
 *                the level equal to the (top-of-the-peak - p).
 *                For peaks of height < p, the peak is left unfilled
 *                from its highest saddle point (the leak to the outside).
 *            (c) Subtract the filled seed (pixd) from the filling mask (pixs).
 *          Note that in this procedure, everything is done starting
 *          with the filling mask, pixs.
 *      (6) For segmentation, the resulting image, pixd, can be thresholded
 *          and used as a seed for another filling operation.
 * 
*/ PIX * pixHDome(PIX *pixs, l_int32 height, l_int32 connectivity) { PIX *pixsd, *pixd; if (!pixs) return (PIX *)ERROR_PTR("src pix not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (height < 0) return (PIX *)ERROR_PTR("height not >= 0", __func__, NULL); if (height == 0) return pixCreateTemplate(pixs); if ((pixsd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixsd not made", __func__, NULL); pixAddConstantGray(pixsd, -height); pixSeedfillGray(pixsd, pixs, connectivity); pixd = pixSubtractGray(NULL, pixs, pixsd); pixDestroy(&pixsd); return pixd; } /*! * \brief pixFastTophat() * * \param[in] pixs 8 bpp * \param[in] xsize width of max/min op, smoothing; any integer >= 1 * \param[in] ysize height of max/min op, smoothing; any integer >= 1 * \param[in] type L_TOPHAT_WHITE: image - min * L_TOPHAT_BLACK: max - image * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Don't be fooled. This is NOT a tophat.  It is a tophat-like
 *          operation, where the result is similar to what you'd get
 *          if you used an erosion instead of an opening, or a dilation
 *          instead of a closing.
 *      (2) Instead of opening or closing at full resolution, it does
 *          a fast downscale/minmax operation, then a quick small smoothing
 *          at low res, a replicative expansion of the "background"
 *          to full res, and finally a removal of the background level
 *          from the input image.  The smoothing step may not be important.
 *      (3) It does not remove noise as well as a tophat, but it is
 *          5 to 10 times faster.
 *          If you need the preciseness of the tophat, don't use this.
 *      (4) The L_TOPHAT_WHITE flag emphasizes small bright regions,
 *          whereas the L_TOPHAT_BLACK flag emphasizes small dark regions.
 * 
*/ PIX * pixFastTophat(PIX *pixs, l_int32 xsize, l_int32 ysize, l_int32 type) { PIX *pix1, *pix2, *pix3, *pixd; if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (xsize < 1 || ysize < 1) return (PIX *)ERROR_PTR("size < 1", __func__, NULL); if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", __func__, NULL); if (xsize == 1 && ysize == 1) return pixCreateTemplate(pixs); switch (type) { case L_TOPHAT_WHITE: if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MIN)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ pix3 = pixScaleBySampling(pix2, xsize, ysize); pixd = pixSubtractGray(NULL, pixs, pix3); pixDestroy(&pix3); break; case L_TOPHAT_BLACK: if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MAX)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ pixd = pixScaleBySampling(pix2, xsize, ysize); pixSubtractGray(pixd, pixd, pixs); break; default: return (PIX *)ERROR_PTR("invalid type", __func__, NULL); } pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * \brief pixMorphGradient() * * \param[in] pixs 8 bpp * \param[in] hsize sel width; must be odd; origin implicitly in center * \param[in] vsize sel height * \param[in] smoothing half-width of convolution smoothing filter. * The width is (2 * smoothing + 1, so 0 is no-op. * \return pixd, or NULL on error */ PIX * pixMorphGradient(PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 smoothing) { PIX *pixg, *pixd; if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", __func__, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", __func__); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", __func__); vsize++; } /* Optionally smooth first to remove noise. * If smoothing is 0, just get a copy */ pixg = pixBlockconvGray(pixs, NULL, smoothing, smoothing); /* This gives approximately the gradient of a transition */ pixd = pixDilateGray(pixg, hsize, vsize); pixSubtractGray(pixd, pixd, pixg); pixDestroy(&pixg); return pixd; } /*-----------------------------------------------------------------* * Centroid of component * *-----------------------------------------------------------------*/ /*! * \brief pixaCentroids() * * \param[in] pixa of components; 1 or 8 bpp * \return pta of centroids relative to the UL corner of * each pix, or NULL on error * *
 * Notes:
 *      (1) An error message is returned if any pix has something other
 *          than 1 bpp or 8 bpp depth, and the centroid from that pix
 *          is saved as (0, 0).
 * 
*/ PTA * pixaCentroids(PIXA *pixa) { l_int32 i, n; l_int32 *centtab = NULL; l_int32 *sumtab = NULL; l_float32 x, y; PIX *pix; PTA *pta; if (!pixa) return (PTA *)ERROR_PTR("pixa not defined", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PTA *)ERROR_PTR("no pix in pixa", __func__, NULL); if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not defined", __func__, NULL); centtab = makePixelCentroidTab8(); sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (pixCentroid(pix, centtab, sumtab, &x, &y) == 1) L_ERROR("centroid failure for pix %d\n", __func__, i); pixDestroy(&pix); ptaAddPt(pta, x, y); } LEPT_FREE(centtab); LEPT_FREE(sumtab); return pta; } /*! * \brief pixCentroid() * * \param[in] pix 1 or 8 bpp * \param[in] centtab [optional] table for finding centroids; can be null * \param[in] sumtab [optional] table for finding pixel sums; can be null * \param[out] pxave x coordinate of centroid, relative to the UL corner * of the pix * \param[out] pyave y coordinate of centroid, relative to the UL corner * of the pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The sum and centroid tables are only used for 1 bpp.
 *      (2) Any table not passed in will be made internally and destroyed
 *          after use.
 * 
*/ l_ok pixCentroid(PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave) { l_int32 w, h, d, i, j, wpl, pixsum, rowsum, val; l_float32 xsum, ysum; l_uint32 *data, *line; l_uint32 word; l_uint8 byte; l_int32 *ctab, *stab; if (!pxave || !pyave) return ERROR_INT("&pxave and &pyave not defined", __func__, 1); *pxave = *pyave = 0.0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 8) return ERROR_INT("pix not 1 or 8 bpp", __func__, 1); ctab = centtab; stab = sumtab; if (d == 1) { pixSetPadBits(pix, 0); if (!centtab) ctab = makePixelCentroidTab8(); if (!sumtab) stab = makePixelSumTab8(); } data = pixGetData(pix); wpl = pixGetWpl(pix); xsum = ysum = 0.0; pixsum = 0; if (d == 1) { for (i = 0; i < h; i++) { /* The body of this loop computes the sum of the set * (1) bits on this row, weighted by their distance * from the left edge of pix, and accumulates that into * xsum; it accumulates their distance from the top * edge of pix into ysum, and their total count into * pixsum. It's equivalent to * for (j = 0; j < w; j++) { * if (GET_DATA_BIT(line, j)) { * xsum += j; * ysum += i; * pixsum++; * } * } */ line = data + wpl * i; rowsum = 0; for (j = 0; j < wpl; j++) { word = line[j]; if (word) { byte = word & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 24) * stab[byte]; byte = (word >> 8) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 16) * stab[byte]; byte = (word >> 16) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 8) * stab[byte]; byte = (word >> 24) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + j * 32 * stab[byte]; } } pixsum += rowsum; ysum += rowsum * i; } if (pixsum == 0) { L_WARNING("no ON pixels in pix\n", __func__); } else { *pxave = xsum / (l_float32)pixsum; *pyave = ysum / (l_float32)pixsum; } } else { /* d == 8 */ for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); xsum += val * j; ysum += val * i; pixsum += val; } } if (pixsum == 0) { L_WARNING("all pixels are 0\n", __func__); } else { *pxave = xsum / (l_float32)pixsum; *pyave = ysum / (l_float32)pixsum; } } if (d == 1) { if (!centtab) LEPT_FREE(ctab); if (!sumtab) LEPT_FREE(stab); } return 0; } leptonica-1.86.0/src/morphdwa.c000066400000000000000000001727521506303110300163460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file morphdwa.c *
 *
 *    Binary morphological (dwa) ops with brick Sels
 *         PIX     *pixDilateBrickDwa()
 *         PIX     *pixErodeBrickDwa()
 *         PIX     *pixOpenBrickDwa()
 *         PIX     *pixCloseBrickDwa()
 *
 *    Binary composite morphological (dwa) ops with brick Sels
 *         PIX     *pixDilateCompBrickDwa()
 *         PIX     *pixErodeCompBrickDwa()
 *         PIX     *pixOpenCompBrickDwa()
 *         PIX     *pixCloseCompBrickDwa()
 *
 *    Binary extended composite morphological (dwa) ops with brick Sels
 *         PIX     *pixDilateCompBrickExtendDwa()
 *         PIX     *pixErodeCompBrickExtendDwa()
 *         PIX     *pixOpenCompBrickExtendDwa()
 *         PIX     *pixCloseCompBrickExtendDwa()
 *         l_int32  getExtendedCompositeParameters()
 *
 *    These are higher-level interfaces for dwa morphology with brick Sels.
 *    Because many morphological operations are performed using
 *    separable brick Sels, it is useful to have a simple interface
 *    for this.
 *
 *    We have included all 58 of the brick Sels that are generated
 *    by selaAddBasic().  These are sufficient for all the decomposable
 *    bricks up to size 63, which is the limit for dwa Sels with
 *    origins at the center of the Sel.
 *
 *    All three sets can be used as the basic interface for general
 *    brick operations.  Here are the internal calling sequences:
 *
 *      (1) If you try to apply a non-decomposable operation, such as
 *          pixErodeBrickDwa(), with a Sel size that doesn't exist,
 *          this calls a decomposable operation, pixErodeCompBrickDwa(),
 *          instead.  This can differ in linear Sel size by up to
 *          2 pixels from the request.
 *
 *      (2) If either Sel brick dimension is greater than 63, the extended
 *          composite function is called.
 *
 *      (3) The extended composite function calls the composite function
 *          a number of times with size 63, and once with size < 63.
 *          Because each operation with a size of 63 is done compositely
 *          with 7 x 9 (exactly 63), the net result is correct in
 *          length to within 2 pixels.
 *
 *    For composite operations, both using a comb and extended (beyond 63),
 *    horizontal and vertical operations are composed separately
 *    and sequentially.
 *
 *    We have also included use of all the 76 comb Sels that are generated
 *    by selaAddDwaCombs().  The generated code is in dwacomb.2.c
 *    and dwacomblow.2.c.  These are used for the composite dwa
 *    brick operations.
 *
 *    The non-composite brick operations, such as pixDilateBrickDwa(),
 *    will call the associated composite operation in situations where
 *    the requisite brick Sel has not been compiled into fmorphgen*.1.c.
 *
 *    If you want to use brick Sels that are not represented in the
 *    basic set of 58, you must generate the dwa code to implement them.
 *    You have three choices for how to use these:
 *
 *    (1) Add both the new Sels and the dwa code to the library:
 *        ~ For simplicity, add your new brick Sels to those defined
 *          in selaAddBasic().
 *        ~ Recompile the library.
 *        ~ Make prog/fmorphautogen.
 *        ~ Run prog/fmorphautogen, to generate new versions of the
 *          dwa code in fmorphgen.1.c and fmorphgenlow.1.c.
 *        ~ Copy these two files to src.
 *        ~ Recompile the library again.
 *        ~ Use the new brick Sels in your program and compile it.
 *
 *    (2) Make both the new Sels and dwa code outside the library,
 *        and link it directly to an executable:
 *        ~ Write a function to generate the new Sels in a Sela, and call
 *          fmorphautogen(sela, , filename) to generate the code.
 *        ~ Compile your program that uses the newly generated function
 *          pixMorphDwa_(), and link to the two new C files.
 *
 *    (3) Make the new Sels in the library and use the dwa code outside it:
 *        ~ Add code in the library to generate your new brick Sels.
 *          (It is suggested that you NOT add these Sels to the
 *          selaAddBasic() function; write a new function that generates
 *          a new Sela.)
 *        ~ Recompile the library.
 *        ~ Write a small program that generates the Sela and calls
 *          fmorphautogen(sela, , filename) to generate the code.
 *        ~ Compile your program that uses the newly generated function
 *          pixMorphDwa_(), and link to the two new C files.
 *       As an example of this approach, see prog/dwamorph*_reg.c:
 *        ~ added selaAddDwaLinear() to sel2.c
 *        ~ wrote dwamorph1_reg.c, to generate the dwa code.
 *        ~ compiled and linked the generated code with the application,
 *          dwamorph2_reg.c.  (Note: because this was a regression test,
 *          dwamorph1_reg also builds and runs the application program.)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_SEL_LOOKUP 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------* * Binary morphological (dwa) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * \brief pixDilateBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement 2D brick Sels, using linear Sels generated
 *          with selaAddBasic().
 *      (2) A brick Sel has hits for all elements.
 *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (6) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (7) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixDilateBrickDwa(NULL, pixs, ...);
 *          (b) pixDilateBrickDwa(pixs, pixs, ...);
 *          (c) pixDilateBrickDwa(pixd, pixs, ...);
 *      (8) The size of pixd is determined by pixs.
 *      (9) If either linear Sel is not found, this calls
 *          the appropriate decomposible function.
 * 
*/ PIX * pixDilateBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", __func__); if (selnameh) LEPT_FREE(selnameh); if (selnamev) LEPT_FREE(selnamev); return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); } if (vsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); LEPT_FREE(selnameh); } else if (hsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnamev); LEPT_FREE(selnamev); } else { pixt1 = pixAddBorder(pixs, 32, 0); pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pixt1, pixt3, L_MORPH_DILATE, selnamev); pixt2 = pixRemoveBorder(pixt1, 32); pixDestroy(&pixt1); pixDestroy(&pixt3); LEPT_FREE(selnameh); LEPT_FREE(selnamev); } if (!pixd) return pixt2; pixTransferAllData(pixd, &pixt2, 0, 0); return pixd; } /*! * \brief pixErodeBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement 2D brick Sels, using linear Sels generated
 *          with selaAddBasic().
 *      (2) A brick Sel has hits for all elements.
 *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (6) Note that we must always set or clear the border pixels
 *          before each operation, depending on the the b.c.
 *          (symmetric or asymmetric).
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixErodeBrickDwa(NULL, pixs, ...);
 *          (b) pixErodeBrickDwa(pixs, pixs, ...);
 *          (c) pixErodeBrickDwa(pixd, pixs, ...);
 *      (9) The size of the result is determined by pixs.
 *      (10) If either linear Sel is not found, this calls
 *           the appropriate decomposible function.
 * 
*/ PIX * pixErodeBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", __func__); if (selnameh) LEPT_FREE(selnameh); if (selnamev) LEPT_FREE(selnamev); return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); } if (vsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); LEPT_FREE(selnameh); } else if (hsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnamev); LEPT_FREE(selnamev); } else { pixt1 = pixAddBorder(pixs, 32, 0); pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt1, pixt3, L_MORPH_ERODE, selnamev); pixt2 = pixRemoveBorder(pixt1, 32); pixDestroy(&pixt1); pixDestroy(&pixt3); LEPT_FREE(selnameh); LEPT_FREE(selnamev); } if (!pixd) return pixt2; pixTransferAllData(pixd, &pixt2, 0, 0); return pixd; } /*! * \brief pixOpenBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement 2D brick Sels, using linear Sels generated
 *          with selaAddBasic().
 *      (2) A brick Sel has hits for all elements.
 *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (4) Do separably if both hsize and vsize are > 1.
 *      (5) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (6) Note that we must always set or clear the border pixels
 *          before each operation, depending on the the b.c.
 *          (symmetric or asymmetric).
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpenBrickDwa(NULL, pixs, ...);
 *          (b) pixOpenBrickDwa(pixs, pixs, ...);
 *          (c) pixOpenBrickDwa(pixd, pixs, ...);
 *      (9) The size of the result is determined by pixs.
 *      (10) If either linear Sel is not found, this calls
 *           the appropriate decomposible function.
 * 
*/ PIX * pixOpenBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", __func__); if (selnameh) LEPT_FREE(selnameh); if (selnamev) LEPT_FREE(selnamev); return pixOpenCompBrickDwa(pixd, pixs, hsize, vsize); } pixt1 = pixAddBorder(pixs, 32, 0); if (vsize == 1) { /* horizontal only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnameh); LEPT_FREE(selnameh); } else if (hsize == 1) { /* vertical only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnamev); LEPT_FREE(selnamev); } else { /* do separable */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev); LEPT_FREE(selnameh); LEPT_FREE(selnamev); pixDestroy(&pixt3); } pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * \brief pixCloseBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) This is a 'safe' closing; we add an extra border of 32 OFF
 *          pixels for the standard asymmetric b.c.
 *      (2) These implement 2D brick Sels, using linear Sels generated
 *          with selaAddBasic().
 *      (3) A brick Sel has hits for all elements.
 *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (5) Do separably if both hsize and vsize are > 1.
 *      (6) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (7) Note that we must always set or clear the border pixels
 *          before each operation, depending on the the b.c.
 *          (symmetric or asymmetric).
 *      (8) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (9) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseBrickDwa(NULL, pixs, ...);
 *          (b) pixCloseBrickDwa(pixs, pixs, ...);
 *          (c) pixCloseBrickDwa(pixd, pixs, ...);
 *      (10) The size of the result is determined by pixs.
 *      (11) If either linear Sel is not found, this calls
 *           the appropriate decomposible function.
 * 
*/ PIX * pixCloseBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 bordercolor, bordersize, found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", __func__); if (selnameh) LEPT_FREE(selnameh); if (selnamev) LEPT_FREE(selnamev); return pixCloseCompBrickDwa(pixd, pixs, hsize, vsize); } /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need * an extra 32 OFF pixels around the image (in addition to * the 32 added pixels for all dwa operations), whereas with * SYMMETRIC_MORPH_BC this is not necessary. */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) /* asymmetric b.c. */ bordersize = 64; else /* symmetric b.c. */ bordersize = 32; pixt1 = pixAddBorder(pixs, bordersize, 0); if (vsize == 1) { /* horizontal only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh); LEPT_FREE(selnameh); } else if (hsize == 1) { /* vertical only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev); LEPT_FREE(selnamev); } else { /* do separable */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev); LEPT_FREE(selnameh); LEPT_FREE(selnamev); pixDestroy(&pixt3); } pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*-----------------------------------------------------------------* * Binary composite morphological (dwa) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * \brief pixDilateCompBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement a separable composite dilation with 2D brick Sels.
 *      (2) For efficiency, it may decompose each linear morphological
 *          operation into two (brick + comb).
 *      (3) A brick Sel has hits for all elements.
 *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (5) Do separably if both hsize and vsize are > 1.
 *      (6) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixDilateCompBrickDwa(NULL, pixs, ...);
 *          (b) pixDilateCompBrickDwa(pixs, pixs, ...);
 *          (c) pixDilateCompBrickDwa(pixd, pixs, ...);
 *      (9) The size of pixd is determined by pixs.
 *      (10) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *           but not necessarily equal to it.  It attempts to optimize:
 *              (a) for consistency with the input values: the product
 *                  of terms is close to the input size
 *              (b) for efficiency of the operation: the sum of the
 *                  terms is small; ideally about twice the square
 *                   root of the input size.
 *           So, for example, if the input hsize = 37, which is
 *           a prime number, the decomposer will break this into two
 *           terms, 6 and 6, so that the net result is a dilation
 *           with hsize = 36.
 * 
*/ PIX * pixDilateCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize > 63 || vsize > 63) return pixDilateCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); #if DEBUG_SEL_LOOKUP lept_stderr("nameh1=%s, nameh2=%s, namev1=%s, namev2=%s\n", selnameh1, selnameh2, selnamev1, selnamev2); lept_stderr("hsize1=%d, hsize2=%d, vsize1=%d, vsize2=%d\n", hsize1, hsize2, vsize1, vsize2); #endif /* DEBUG_SEL_LOOKUP */ pixt1 = pixAddBorder(pixs, 64, 0); if (vsize == 1) { if (hsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixDestroy(&pixt3); } } else if (hsize == 1) { if (vsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); pixDestroy(&pixt3); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); } else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_DILATE, selnameh2); pixDestroy(&pixt2); } if (vsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); } else { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt2, L_MORPH_DILATE, selnamev2); } pixDestroy(&pixt3); } pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) LEPT_FREE(selnameh1); if (selnameh2) LEPT_FREE(selnameh2); if (selnamev1) LEPT_FREE(selnamev1); if (selnamev2) LEPT_FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * \brief pixErodeCompBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement a separable composite erosion with 2D brick Sels.
 *      (2) For efficiency, it may decompose each linear morphological
 *          operation into two (brick + comb).
 *      (3) A brick Sel has hits for all elements.
 *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (5) Do separably if both hsize and vsize are > 1.
 *      (6) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixErodeCompBrickDwa(NULL, pixs, ...);
 *          (b) pixErodeCompBrickDwa(pixs, pixs, ...);
 *          (c) pixErodeCompBrickDwa(pixd, pixs, ...);
 *      (9) The size of pixd is determined by pixs.
 *      (10) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *           but not necessarily equal to it.  It attempts to optimize:
 *              (a) for consistency with the input values: the product
 *                  of terms is close to the input size
 *              (b) for efficiency of the operation: the sum of the
 *                  terms is small; ideally about twice the square
 *                   root of the input size.
 *           So, for example, if the input hsize = 37, which is
 *           a prime number, the decomposer will break this into two
 *           terms, 6 and 6, so that the net result is a dilation
 *           with hsize = 36.
 * 
*/ PIX * pixErodeCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize > 63 || vsize > 63) return pixErodeCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); /* For symmetric b.c., bordercolor == 1 for erosion */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, bordercolor); if (vsize == 1) { if (hsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixDestroy(&pixt3); } } else if (hsize == 1) { if (vsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); pixDestroy(&pixt3); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); } else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_ERODE, selnameh2); pixDestroy(&pixt2); } if (vsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); } else { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt2, L_MORPH_ERODE, selnamev2); } pixDestroy(&pixt3); } pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) LEPT_FREE(selnameh1); if (selnameh2) LEPT_FREE(selnameh2); if (selnamev1) LEPT_FREE(selnamev1); if (selnamev2) LEPT_FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * \brief pixOpenCompBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) These implement a separable composite opening with 2D brick Sels.
 *      (2) For efficiency, it may decompose each linear morphological
 *          operation into two (brick + comb).
 *      (3) A brick Sel has hits for all elements.
 *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (5) Do separably if both hsize and vsize are > 1.
 *      (6) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixOpenCompBrickDwa(NULL, pixs, ...);
 *          (b) pixOpenCompBrickDwa(pixs, pixs, ...);
 *          (c) pixOpenCompBrickDwa(pixd, pixs, ...);
 *      (9) The size of pixd is determined by pixs.
 *      (10) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *           but not necessarily equal to it.  It attempts to optimize:
 *              (a) for consistency with the input values: the product
 *                  of terms is close to the input size
 *              (b) for efficiency of the operation: the sum of the
 *                  terms is small; ideally about twice the square
 *                   root of the input size.
 *           So, for example, if the input hsize = 37, which is
 *           a prime number, the decomposer will break this into two
 *           terms, 6 and 6, so that the net result is a dilation
 *           with hsize = 36.
 * 
*/ PIX * pixOpenCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize > 63 || vsize > 63) return pixOpenCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); /* For symmetric b.c., initialize erosion with bordercolor == 1 */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, bordercolor); if (vsize == 1) { if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnameh1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); } } else if (hsize == 1) { if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1 && vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); } else if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); } else if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } else { /* both directions are combed */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } } pixDestroy(&pixt3); pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) LEPT_FREE(selnameh1); if (selnameh2) LEPT_FREE(selnameh2); if (selnamev1) LEPT_FREE(selnamev1); if (selnamev2) LEPT_FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * \brief pixCloseCompBrickDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) This implements a separable composite safe closing with 2D
 *          brick Sels.
 *      (2) For efficiency, it may decompose each linear morphological
 *          operation into two (brick + comb).
 *      (3) A brick Sel has hits for all elements.
 *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
 *      (5) Do separably if both hsize and vsize are > 1.
 *      (6) It is necessary that both horizontal and vertical Sels
 *          of the input size are defined in the basic sela.
 *      (7) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (8) For clarity, if the case is known, use these patterns:
 *          (a) pixd = pixCloseCompBrickDwa(NULL, pixs, ...);
 *          (b) pixCloseCompBrickDwa(pixs, pixs, ...);
 *          (c) pixCloseCompBrickDwa(pixd, pixs, ...);
 *      (9) The size of pixd is determined by pixs.
 *      (10) CAUTION: both hsize and vsize are being decomposed.
 *          The decomposer chooses a product of sizes (call them
 *          'terms') for each that is close to the input size,
 *           but not necessarily equal to it.  It attempts to optimize:
 *              (a) for consistency with the input values: the product
 *                  of terms is close to the input size
 *              (b) for efficiency of the operation: the sum of the
 *                  terms is small; ideally about twice the square
 *                   root of the input size.
 *           So, for example, if the input hsize = 37, which is
 *           a prime number, the decomposer will break this into two
 *           terms, 6 and 6, so that the net result is a dilation
 *           with hsize = 36.
 * 
*/ PIX * pixCloseCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, setborder; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize > 63 || vsize > 63) return pixCloseCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); pixt3 = NULL; /* For symmetric b.c., PIX_SET border for erosions */ setborder = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, 0); if (vsize == 1) { if (hsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); } } else if (hsize == 1) { if (vsize2 == 1) { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1 && vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); } else if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); if (setborder == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); } else if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } else { /* both directions are combed */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } } pixDestroy(&pixt3); pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) LEPT_FREE(selnameh1); if (selnameh2) LEPT_FREE(selnameh2); if (selnamev1) LEPT_FREE(selnamev1); if (selnamev2) LEPT_FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*--------------------------------------------------------------------------* * Binary expanded composite morphological (dwa) ops with brick Sels * *--------------------------------------------------------------------------*/ /*! * \brief pixDilateCompBrickExtendDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) Ankur Jain suggested and implemented extending the composite
 *          DWA operations beyond the 63 pixel limit.  This is a
 *          simplified and approximate implementation of the extension.
 *          This allows arbitrary Dwa morph operations using brick Sels,
 *          by decomposing the horizontal and vertical dilations into
 *          a sequence of 63-element dilations plus a dilation of size
 *          between 3 and 62.
 *      (2) The 63-element dilations are exact, whereas the extra dilation
 *          is approximate, because the underlying decomposition is
 *          in pixDilateCompBrickDwa().  See there for further details.
 *      (3) There are three cases:
 *          (a) pixd == null   (result into new pixd)
 *          (b) pixd == pixs   (in-place; writes result back to pixs)
 *          (c) pixd != pixs   (puts result into existing pixd)
 *      (4) There is no need to call this directly:  pixDilateCompBrickDwa()
 *          calls this function if either brick dimension exceeds 63.
 * 
*/ PIX * pixDilateCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 i, nops, nh, extrah, nv, extrav; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize < 64 && vsize < 64) return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); if (hsize > 63) getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); if (vsize > 63) getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); /* Horizontal dilation first: pixs --> pixt2. Do not alter pixs. */ pixt1 = pixCreateTemplate(pixs); /* temp image */ if (hsize == 1) { pixt2 = pixClone(pixs); } else if (hsize < 64) { pixt2 = pixDilateCompBrickDwa(NULL, pixs, hsize, 1); } else if (hsize == 64) { /* approximate */ pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); } else { nops = (extrah < 3) ? nh : nh + 1; if (nops & 1) { /* odd */ if (extrah > 2) pixt2 = pixDilateCompBrickDwa(NULL, pixs, extrah, 1); else pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); for (i = 0; i < nops / 2; i++) { pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); } } else { /* nops even */ if (extrah > 2) { pixDilateCompBrickDwa(pixt1, pixs, extrah, 1); pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); } else { /* they're all 63s */ pixDilateCompBrickDwa(pixt1, pixs, 63, 1); pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); } for (i = 0; i < nops / 2 - 1; i++) { pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); } } } /* Vertical dilation: pixt2 --> pixt3. */ if (vsize == 1) { pixt3 = pixClone(pixt2); } else if (vsize < 64) { pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, vsize); } else if (vsize == 64) { /* approximate */ pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); } else { nops = (extrav < 3) ? nv : nv + 1; if (nops & 1) { /* odd */ if (extrav > 2) pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, extrav); else pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); for (i = 0; i < nops / 2; i++) { pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); } } else { /* nops even */ if (extrav > 2) { pixDilateCompBrickDwa(pixt1, pixt2, 1, extrav); pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); } else { /* they're all 63s */ pixDilateCompBrickDwa(pixt1, pixt2, 1, 63); pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); } for (i = 0; i < nops / 2 - 1; i++) { pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); } } } pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * \brief pixErodeCompBrickExtendDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      (1) See pixDilateCompBrickExtendDwa() for usage.
 *      (2) There is no need to call this directly:  pixErodeCompBrickDwa()
 *          calls this function if either brick dimension exceeds 63.
 * 
*/ PIX * pixErodeCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 i, nops, nh, extrah, nv, extrav; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); if (hsize < 64 && vsize < 64) return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); if (hsize > 63) getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); if (vsize > 63) getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); /* Horizontal erosion first: pixs --> pixt2. Do not alter pixs. */ pixt1 = pixCreateTemplate(pixs); /* temp image */ if (hsize == 1) { pixt2 = pixClone(pixs); } else if (hsize < 64) { pixt2 = pixErodeCompBrickDwa(NULL, pixs, hsize, 1); } else if (hsize == 64) { /* approximate */ pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); } else { nops = (extrah < 3) ? nh : nh + 1; if (nops & 1) { /* odd */ if (extrah > 2) pixt2 = pixErodeCompBrickDwa(NULL, pixs, extrah, 1); else pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); for (i = 0; i < nops / 2; i++) { pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); } } else { /* nops even */ if (extrah > 2) { pixErodeCompBrickDwa(pixt1, pixs, extrah, 1); pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); } else { /* they're all 63s */ pixErodeCompBrickDwa(pixt1, pixs, 63, 1); pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); } for (i = 0; i < nops / 2 - 1; i++) { pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); } } } /* Vertical erosion: pixt2 --> pixt3. */ if (vsize == 1) { pixt3 = pixClone(pixt2); } else if (vsize < 64) { pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, vsize); } else if (vsize == 64) { /* approximate */ pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); } else { nops = (extrav < 3) ? nv : nv + 1; if (nops & 1) { /* odd */ if (extrav > 2) pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, extrav); else pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); for (i = 0; i < nops / 2; i++) { pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); } } else { /* nops even */ if (extrav > 2) { pixErodeCompBrickDwa(pixt1, pixt2, 1, extrav); pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); } else { /* they're all 63s */ pixErodeCompBrickDwa(pixt1, pixt2, 1, 63); pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); } for (i = 0; i < nops / 2 - 1; i++) { pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); } } } pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * \brief pixOpenCompBrickExtendDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      1) There are three cases:
 *          a) pixd == null   (result into new pixd
 *          b) pixd == pixs   (in-place; writes result back to pixs
 *          c) pixd != pixs   (puts result into existing pixd
 *      2) There is no need to call this directly:  pixOpenCompBrickDwa(
 *          calls this function if either brick dimension exceeds 63.
 * 
*/ PIX * pixOpenCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); pixt = pixErodeCompBrickExtendDwa(NULL, pixs, hsize, vsize); pixd = pixDilateCompBrickExtendDwa(pixd, pixt, hsize, vsize); pixDestroy(&pixt); return pixd; } /*! * \brief pixCloseCompBrickExtendDwa() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs 1 bpp * \param[in] hsize width of brick Sel * \param[in] vsize height of brick Sel * \return pixd * *
 * Notes:
 *      1) There are three cases:
 *          a) pixd == null   (result into new pixd
 *          b) pixd == pixs   (in-place; writes result back to pixs
 *          c) pixd != pixs   (puts result into existing pixd
 *      2) There is no need to call this directly:  pixCloseCompBrickDwa(
 *          calls this function if either brick dimension exceeds 63.
 * 
*/ PIX * pixCloseCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 bordercolor, borderx, bordery; PIX *pixt1, *pixt2, *pixt3; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", __func__, pixd); /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need * an extra 32 OFF pixels around the image (in addition to * the 32 added pixels for all dwa operations), whereas with * SYMMETRIC_MORPH_BC this is not necessary. */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) { /* asymmetric b.c. */ borderx = 32 + (hsize / 64) * 32; bordery = 32 + (vsize / 64) * 32; } else { /* symmetric b.c. */ borderx = bordery = 32; } pixt1 = pixAddBorderGeneral(pixs, borderx, borderx, bordery, bordery, 0); pixt2 = pixDilateCompBrickExtendDwa(NULL, pixt1, hsize, vsize); pixErodeCompBrickExtendDwa(pixt1, pixt2, hsize, vsize); pixt3 = pixRemoveBorderGeneral(pixt1, borderx, borderx, bordery, bordery); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * \brief getExtendedCompositeParameters() * * \param[in] size of linear Sel * \param[out] pn number of 63 wide convolutions * \param[out] pextra size of extra Sel * \param[out] pactualsize [optional] actual size used in operation * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The DWA implementation allows Sels to be used with hits
 *          up to 31 pixels from the origin, either horizontally or
 *          vertically.  Larger Sels can be used if decomposed into
 *          a set of operations with Sels not exceeding 63 pixels
 *          in either width or height (and with the origin as close
 *          to the center of the Sel as possible).
 *      (2) This returns the decomposition of a linear Sel of length
 *          %size into a set of %n Sels of length 63 plus an extra
 *          Sel of length %extra.
 *      (3) For notation, let w == %size, n == %n, and e == %extra.
 *          We have 1 < e < 63.
 *
 *          Then if w < 64, we have n = 0 and e = w.
 *          The general formula for w > 63 is:
 *             w = 63 + (n - 1) * 62 + (e - 1)
 *
 *          Where did this come from?  Each successive convolution with
 *          a Sel of length L adds a total length (L - 1) to w.
 *          This accounts for using 62 for each additional Sel of size 63,
 *          and using (e - 1) for the additional Sel of size e.
 *
 *          Solving for n and e for w > 63:
 *             n = 1 + Int((w - 63) / 62)
 *             e = w - 63 - (n - 1) * 62 + 1
 *
 *          The extra part is decomposed into two factors f1 and f2,
 *          and the actual size of the extra part is
 *             e' = f1 * f2
 *          Then the actual width is:
 *             w' = 63 + (n - 1) * 62 + f1 * f2 - 1
 * 
*/ l_ok getExtendedCompositeParameters(l_int32 size, l_int32 *pn, l_int32 *pextra, l_int32 *pactualsize) { l_int32 n, extra, fact1, fact2; if (!pn || !pextra) return ERROR_INT("&n and &extra not both defined", __func__, 1); if (size <= 63) { n = 0; extra = L_MIN(1, size); } else { /* size > 63 */ n = 1 + (l_int32)((size - 63) / 62); extra = size - 63 - (n - 1) * 62 + 1; } if (pactualsize) { selectComposableSizes(extra, &fact1, &fact2); *pactualsize = 63 + (n - 1) * 62 + fact1 * fact2 - 1; } *pn = n; *pextra = extra; return 0; } leptonica-1.86.0/src/morphseq.c000066400000000000000000001230551506303110300163530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file morphseq.c *
 *
 *      Run a sequence of binary rasterop morphological operations
 *            PIX     *pixMorphSequence()
 *
 *      Run a sequence of binary composite rasterop morphological operations
 *            PIX     *pixMorphCompSequence()
 *
 *      Run a sequence of binary dwa morphological operations
 *            PIX     *pixMorphSequenceDwa()
 *
 *      Run a sequence of binary composite dwa morphological operations
 *            PIX     *pixMorphCompSequenceDwa()
 *
 *      Parser verifier for binary morphological operations
 *            l_int32  morphSequenceVerify()
 *
 *      Run a sequence of grayscale morphological operations
 *            PIX     *pixGrayMorphSequence()
 *
 *      Run a sequence of color morphological operations
 *            PIX     *pixColorMorphSequence()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*-------------------------------------------------------------------------* * Run a sequence of binary rasterop morphological operations * *-------------------------------------------------------------------------*/ /*! * \brief pixMorphSequence() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does rasterop morphology on binary images.
 *      (2) This runs a pipeline of operations; no branching is allowed.
 *      (3) This only uses brick Sels, which are created on the fly.
 *          In the future this will be generalized to extract Sels from
 *          a Sela by name.
 *      (4) A new image is always produced; the input image is not changed.
 *      (5) This contains an interpreter, allowing sequences to be
 *          generated and run.
 *      (6) The format of the sequence string is defined below.
 *      (7) In addition to morphological operations, rank order reduction
 *          and replicated expansion allow operations to take place
 *          downscaled by a power of 2.
 *      (8) Intermediate results can optionally be displayed.
 *      (9) Thanks to Dar-Shyang Lee, who had the idea for this and
 *          built the first implementation.
 *      (10) The sequence string is formatted as follows:
 *            ~ An arbitrary number of operations,  each separated
 *              by a '+' character.  White space is ignored.
 *            ~ Each operation begins with a case-independent character
 *              specifying the operation:
 *                 d or D  (dilation)
 *                 e or E  (erosion)
 *                 o or O  (opening)
 *                 c or C  (closing)
 *                 r or R  (rank binary reduction)
 *                 x or X  (replicative binary expansion)
 *                 b or B  (add a border of 0 pixels of this size)
 *            ~ The args to the morphological operations are bricks of hits,
 *              and are formatted as a.b, where a and b are horizontal and
 *              vertical dimensions, rsp.
 *            ~ The args to the reduction are a sequence of up to 4 integers,
 *              each from 1 to 4.
 *            ~ The arg to the expansion is a power of two, in the set
 *              {2, 4, 8, 16}.
 *      (11) An example valid sequence is:
 *               "b32 + o1.3 + C3.1 + r23 + e2.2 + D3.2 + X4"
 *           In this example, the following operation sequence is carried out:
 *             * b32: Add a 32 pixel border around the input image
 *             * o1.3: Opening with vert sel of length 3 (e.g., 1 x 3)
 *             * C3.1: Closing with horiz sel of length 3  (e.g., 3 x 1)
 *             * r23: Two successive 2x2 reductions with rank 2 in the first
 *                    and rank 3 in the second.  The result is a 4x reduced pix.
 *             * e2.2: Erosion with a 2x2 sel (origin will be at x,y: 0,0)
 *             * d3.2: Dilation with a 3x2 sel (origin will be at x,y: 1,0)
 *             * X4: 4x replicative expansion, back to original resolution
 *      (12) The safe closing is used.  However, if you implement a
 *           closing as separable dilations followed by separable erosions,
 *           it will not be safe.  For that situation, you need to add
 *           a sufficiently large border as the first operation in
 *           the sequence.  This will be removed automatically at the
 *           end.  There are two cautions:
 *              ~ When computing what is sufficient, remember that if
 *                reductions are carried out, the border is also reduced.
 *              ~ The border is removed at the end, so if a border is
 *                added at the beginning, the result must be at the
 *                same resolution as the input!
 * 
*/ PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op; char fname[256]; l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; l_int32 level[4]; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } border = 0; pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixDilateBrick(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixErodeBrick(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenBrick(pix1, pix1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseSafeBrick(pix1, pix1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pix1, &pix2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pix2 = pixExpandReplicate(pix1, fact); pixSwapAndDestroy(&pix1, &pix2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pix2 = pixAddBorder(pix1, border, 0); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, 0); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (border > 0) { pix2 = pixRemoveBorder(pix1, border); pixSwapAndDestroy(&pix1, &pix2); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } /*-------------------------------------------------------------------------* * Run a sequence of binary composite rasterop morphological operations * *-------------------------------------------------------------------------*/ /*! * \brief pixMorphCompSequence() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display of results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does rasterop morphology on binary images, using composite
 *          operations for extra speed on large Sels.
 *      (2) Safe closing is used atomically.  However, if you implement a
 *          closing as a sequence with a dilation followed by an
 *          erosion, it will not be safe, and to ensure that you have
 *          no boundary effects you must add a border in advance and
 *          remove it at the end.
 *      (3) For other usage details, see the notes for pixMorphSequence().
 *      (4) The sequence string is formatted as follows:
 *            ~ An arbitrary number of operations,  each separated
 *              by a '+' character.  White space is ignored.
 *            ~ Each operation begins with a case-independent character
 *              specifying the operation:
 *                 d or D  (dilation)
 *                 e or E  (erosion)
 *                 o or O  (opening)
 *                 c or C  (closing)
 *                 r or R  (rank binary reduction)
 *                 x or X  (replicative binary expansion)
 *                 b or B  (add a border of 0 pixels of this size)
 *            ~ The args to the morphological operations are bricks of hits,
 *              and are formatted as a.b, where a and b are horizontal and
 *              vertical dimensions, rsp.
 *            ~ The args to the reduction are a sequence of up to 4 integers,
 *              each from 1 to 4.
 *            ~ The arg to the expansion is a power of two, in the set
 *              {2, 4, 8, 16}.
 * 
*/ PIX * pixMorphCompSequence(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op; char fname[256]; l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; l_int32 level[4]; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } border = 0; pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixDilateCompBrick(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixErodeCompBrick(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenCompBrick(pix1, pix1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseSafeCompBrick(pix1, pix1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pix1, &pix2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pix2 = pixExpandReplicate(pix1, fact); pixSwapAndDestroy(&pix1, &pix2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pix2 = pixAddBorder(pix1, border, 0); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, 0); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (border > 0) { pix2 = pixRemoveBorder(pix1, border); pixSwapAndDestroy(&pix1, &pix2); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } /*-------------------------------------------------------------------------* * Run a sequence of binary dwa morphological operations * *-------------------------------------------------------------------------*/ /*! * \brief pixMorphSequenceDwa() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display of results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does dwa morphology on binary images.
 *      (2) This runs a pipeline of operations; no branching is allowed.
 *      (3) This only uses brick Sels that have been pre-compiled with
 *          dwa code.
 *      (4) A new image is always produced; the input image is not changed.
 *      (5) This contains an interpreter, allowing sequences to be
 *          generated and run.
 *      (6) See pixMorphSequence() for further information about usage.
 * 
*/ PIX * pixMorphSequenceDwa(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op; char fname[256]; l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; l_int32 level[4]; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } border = 0; pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixDilateBrickDwa(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixErodeBrickDwa(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenBrickDwa(pix1, pix1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseBrickDwa(pix1, pix1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pix1, &pix2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pix2 = pixExpandReplicate(pix1, fact); pixSwapAndDestroy(&pix1, &pix2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pix2 = pixAddBorder(pix1, border, 0); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, 0); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (border > 0) { pix2 = pixRemoveBorder(pix1, border); pixSwapAndDestroy(&pix1, &pix2); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } /*-------------------------------------------------------------------------* * Run a sequence of binary composite dwa morphological operations * *-------------------------------------------------------------------------*/ /*! * \brief pixMorphCompSequenceDwa() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display of results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does dwa morphology on binary images, using brick Sels.
 *      (2) This runs a pipeline of operations; no branching is allowed.
 *      (3) It implements all brick Sels that have dimensions up to 63
 *          on each side, using a composite (linear + comb) when useful.
 *      (4) A new image is always produced; the input image is not changed.
 *      (5) This contains an interpreter, allowing sequences to be
 *          generated and run.
 *      (6) See pixMorphSequence() for further information about usage.
 * 
*/ PIX * pixMorphCompSequenceDwa(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op; char fname[256]; l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; l_int32 level[4]; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } border = 0; pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixDilateCompBrickDwa(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixErodeCompBrickDwa(NULL, pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenCompBrickDwa(pix1, pix1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseCompBrickDwa(pix1, pix1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pix1, &pix2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pix2 = pixExpandReplicate(pix1, fact); pixSwapAndDestroy(&pix1, &pix2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pix2 = pixAddBorder(pix1, border, 0); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, 0); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (border > 0) { pix2 = pixRemoveBorder(pix1, border); pixSwapAndDestroy(&pix1, &pix2); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } /*-------------------------------------------------------------------------* * Parser verifier for binary morphological operations * *-------------------------------------------------------------------------*/ /*! * \brief morphSequenceVerify() * * \param[in] sa string array of operation sequence * \return TRUE if valid; FALSE otherwise or on error * *
 * Notes:
 *      (1) This does verification of valid binary morphological
 *          operation sequences.
 *      (2) See pixMorphSequence() for notes on valid operations
 *          in the sequence.
 * 
*/ l_int32 morphSequenceVerify(SARRAY *sa) { char *rawop, *op = NULL; l_int32 nops, i, j, nred, fact, valid, w, h, netred, border; l_int32 level[4]; l_int32 intlogbase2[5] = {1, 2, 3, 0, 4}; /* of arg/4 */ if (!sa) return ERROR_INT("sa not defined", __func__, FALSE); nops = sarrayGetCount(sa); valid = TRUE; netred = 0; border = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { lept_stderr("*** op: %s invalid\n", op); valid = FALSE; break; } if (w <= 0 || h <= 0) { lept_stderr("*** op: %s; w = %d, h = %d; must both be > 0\n", op, w, h); valid = FALSE; break; } /* lept_stderr("op = %s; w = %d, h = %d\n", op, w, h); */ break; case 'r': case 'R': nred = strlen(op) - 1; netred += nred; if (nred < 1 || nred > 4) { lept_stderr( "*** op = %s; num reduct = %d; must be in {1,2,3,4}\n", op, nred); valid = FALSE; break; } for (j = 0; j < nred; j++) { level[j] = op[j + 1] - '0'; if (level[j] < 1 || level[j] > 4) { lept_stderr("*** op = %s; level[%d] = %d is invalid\n", op, j, level[j]); valid = FALSE; break; } } if (!valid) break; /* lept_stderr("op = %s", op); */ for (j = 0; j < nred; j++) { level[j] = op[j + 1] - '0'; /* lept_stderr(", level[%d] = %d", j, level[j]); */ } /* lept_stderr("\n"); */ break; case 'x': case 'X': if (sscanf(&op[1], "%d", &fact) != 1) { lept_stderr("*** op: %s; fact invalid\n", op); valid = FALSE; break; } if (fact != 2 && fact != 4 && fact != 8 && fact != 16) { lept_stderr("*** op = %s; invalid fact = %d\n", op, fact); valid = FALSE; break; } netred -= intlogbase2[fact / 4]; /* lept_stderr("op = %s; fact = %d\n", op, fact); */ break; case 'b': case 'B': if (sscanf(&op[1], "%d", &fact) != 1) { lept_stderr("*** op: %s; fact invalid\n", op); valid = FALSE; break; } if (i > 0) { lept_stderr("*** op = %s; must be first op\n", op); valid = FALSE; break; } if (fact < 1) { lept_stderr("*** op = %s; invalid fact = %d\n", op, fact); valid = FALSE; break; } border = fact; /* lept_stderr("op = %s; fact = %d\n", op, fact); */ break; default: lept_stderr("*** nonexistent op = %s\n", op); valid = FALSE; } LEPT_FREE(op); } if (border != 0 && netred != 0) { lept_stderr("*** op = %s; border added but net reduction not 0\n", op); valid = FALSE; } return valid; } /*-----------------------------------------------------------------* * Run a sequence of grayscale morphological operations * *-----------------------------------------------------------------*/ /*! * \brief pixGrayMorphSequence() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display of results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \param[in] dispy if dispsep > 0, this gives the y-value of the * UL corner for display; otherwise it is ignored * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This works on 8 bpp grayscale images.
 *      (2) This runs a pipeline of operations; no branching is allowed.
 *      (3) This only uses brick SELs.
 *      (4) A new image is always produced; the input image is not changed.
 *      (5) This contains an interpreter, allowing sequences to be
 *          generated and run.
 *      (6) The format of the sequence string is defined below.
 *      (7) In addition to morphological operations, the composite
 *          morph/subtract tophat can be performed.
 *      (8) Sel sizes (width, height) must each be odd numbers.
 *      (9) Intermediate results can optionally be displayed
 *      (10) The sequence string is formatted as follows:
 *            ~ An arbitrary number of operations,  each separated
 *              by a '+' character.  White space is ignored.
 *            ~ Each operation begins with a case-independent character
 *              specifying the operation:
 *                 d or D  (dilation)
 *                 e or E  (erosion)
 *                 o or O  (opening)
 *                 c or C  (closing)
 *                 t or T  (tophat)
 *            ~ The args to the morphological operations are bricks of hits,
 *              and are formatted as a.b, where a and b are horizontal and
 *              vertical dimensions, rsp. (each must be an odd number)
 *            ~ The args to the tophat are w or W (for white tophat)
 *              or b or B (for black tophat), followed by a.b as for
 *              the dilation, erosion, opening and closing.
 *           Example valid sequences are:
 *             "c5.3 + o7.5"
 *             "c9.9 + tw9.9"
 * 
*/ PIX * pixGrayMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy) { char *rawop, *op; char fname[256]; l_int32 nops, i, valid, w, h, x, pdfout; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; /* Verify that the operation sequence is valid */ valid = TRUE; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { lept_stderr("*** op: %s invalid\n", op); valid = FALSE; break; } if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { lept_stderr("*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* lept_stderr("op = %s; w = %d, h = %d\n", op, w, h); */ break; case 't': case 'T': if (op[1] != 'w' && op[1] != 'W' && op[1] != 'b' && op[1] != 'B') { lept_stderr( "*** op = %s; arg %c must be 'w' or 'b'\n", op, op[1]); valid = FALSE; break; } sscanf(&op[2], "%d.%d", &w, &h); if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { lept_stderr("*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* lept_stderr("op = %s", op); */ break; default: lept_stderr("*** nonexistent op = %s\n", op); valid = FALSE; } LEPT_FREE(op); } if (!valid) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence invalid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixDilateGray(pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixErodeGray(pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixOpenGray(pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixCloseGray(pix1, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 't': case 'T': sscanf(&op[2], "%d.%d", &w, &h); if (op[1] == 'w' || op[1] == 'W') pix2 = pixTophat(pix1, w, h, L_TOPHAT_WHITE); else /* 'b' or 'B' */ pix2 = pixTophat(pix1, w, h, L_TOPHAT_BLACK); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, dispy); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } /*-----------------------------------------------------------------* * Run a sequence of color morphological operations * *-----------------------------------------------------------------*/ /*! * \brief pixColorMorphSequence() * * \param[in] pixs * \param[in] sequence string specifying sequence * \param[in] dispsep controls debug display of results in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming * \param[in] dispy if dispsep > 0, this gives the y-value of the * UL corner for display; otherwise it is ignored * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This works on 32 bpp rgb images.
 *      (2) Each component is processed separately.
 *      (3) This runs a pipeline of operations; no branching is allowed.
 *      (4) This only uses brick SELs.
 *      (5) A new image is always produced; the input image is not changed.
 *      (6) This contains an interpreter, allowing sequences to be
 *          generated and run.
 *      (7) Sel sizes (width, height) must each be odd numbers.
 *      (8) The format of the sequence string is defined below.
 *      (9) Intermediate results can optionally be displayed.
 *      (10) The sequence string is formatted as follows:
 *            ~ An arbitrary number of operations,  each separated
 *              by a '+' character.  White space is ignored.
 *            ~ Each operation begins with a case-independent character
 *              specifying the operation:
 *                 d or D  (dilation)
 *                 e or E  (erosion)
 *                 o or O  (opening)
 *                 c or C  (closing)
 *            ~ The args to the morphological operations are bricks of hits,
 *              and are formatted as a.b, where a and b are horizontal and
 *              vertical dimensions, rsp. (each must be an odd number)
 *           Example valid sequences are:
 *             "c5.3 + o7.5"
 *             "D9.1"
 * 
*/ PIX * pixColorMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy) { char *rawop, *op; char fname[256]; l_int32 nops, i, valid, w, h, x, pdfout; PIX *pix1, *pix2; PIXA *pixa; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", __func__, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; /* Verify that the operation sequence is valid */ valid = TRUE; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { lept_stderr("*** op: %s invalid\n", op); valid = FALSE; break; } if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { lept_stderr("*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* lept_stderr("op = %s; w = %d, h = %d\n", op, w, h); */ break; default: lept_stderr("*** nonexistent op = %s\n", op); valid = FALSE; } LEPT_FREE(op); } if (!valid) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence invalid", __func__, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); } pix1 = pixCopy(NULL, pixs); pix2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, L_NOCOPY); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixColorMorph(pix1, L_MORPH_DILATE, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixColorMorph(pix1, L_MORPH_ERODE, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixColorMorph(pix1, L_MORPH_OPEN, w, h); pixSwapAndDestroy(&pix1, &pix2); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pix2 = pixColorMorph(pix1, L_MORPH_CLOSE, w, h); pixSwapAndDestroy(&pix1, &pix2); break; default: /* All invalid ops are caught in the first pass */ break; } LEPT_FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pix1, x, dispy); x += dispsep; } if (pdfout) pixaAddPix(pixa, pix1, L_COPY); } if (pdfout) { snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", L_ABS(dispsep)); pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pix1; } leptonica-1.86.0/src/morphtemplate1.txt000066400000000000000000000202031506303110300200430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * --- * PIX *pixMorphDwa_*() --- * PIX *pixFMorphopGen_*() */ #include #include "allheaders.h" --- This file is: morphtemplate1.txt --- --- We need to include these prototypes: --- PIX *pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- PIX *pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- l_int32 fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * \brief pixMorphDwa_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This simply adds a border, calls the appropriate
 *          pixFMorphopGen_*(), and removes the border.
 *          See the notes for that function.
 *      (2) The size of the border depends on the operation
 *          and the boundary conditions.
 * 
*/ PIX * --- pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixMorpDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); --- pixt2 = pixFMorphopGen_*(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * \brief pixFMorphopGen_*() * * \param[in] pixd usual 3 choices: null, == pixs, != pixs * \param[in] pixs 1 bpp * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE * \param[in] sel name * \return pixd * *
 * Notes:
 *      (1) This is a dwa operation, and the Sels must be limited in
 *          size to not more than 31 pixels about the origin.
 *      (2) A border of appropriate size (32 pixels, or 64 pixels
 *          for safe closing with asymmetric b.c.) must be added before
 *          this function is called.
 *      (3) This handles all required setting of the border pixels
 *          before erosion and dilation.
 *      (4) The closing operation is safe; no pixels can be removed
 *          near the boundary.
 * 
*/ PIX * --- pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFMorphopGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", __func__, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index + 1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index + 1); } pixDestroy(&pixt); } return pixd; } leptonica-1.86.0/src/morphtemplate2.txt000066400000000000000000000072201506303110300200500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: --- * l_int32 fmorphopgen_low_*() * * Static Low-level: --- * void fdilate_*_*() --- * void ferode_*_*() */ #include "allheaders.h" --- This file is: morphtemplate2.txt --- --- insert static protos here ... /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! --- * fmorphopgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fdilate* and ferode* routines ... } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fdilate_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; l_int32 j, pwpls; l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ... pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.86.0/src/numabasic.c000066400000000000000000001465511506303110300164650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file numabasic.c *
 *
 *      Numa creation, destruction, copy, clone, etc.
 *          NUMA        *numaCreate()
 *          NUMA        *numaCreateFromIArray()
 *          NUMA        *numaCreateFromFArray()
 *          NUMA        *numaCreateFromString()
 *          void        *numaDestroy()
 *          NUMA        *numaCopy()
 *          NUMA        *numaClone()
 *          l_int32      numaEmpty()
 *
 *      Add/remove number (float or integer)
 *          l_int32      numaAddNumber()
 *          static l_int32  numaExtendArray()
 *          l_int32      numaInsertNumber()
 *          l_int32      numaRemoveNumber()
 *          l_int32      numaReplaceNumber()
 *
 *      Numa accessors
 *          l_int32      numaGetCount()
 *          l_int32      numaSetCount()
 *          l_int32      numaGetIValue()
 *          l_int32      numaGetFValue()
 *          l_int32      numaSetValue()
 *          l_int32      numaShiftValue()
 *          l_int32     *numaGetIArray()
 *          l_float32   *numaGetFArray()
 *          l_int32      numaGetParameters()
 *          l_int32      numaSetParameters()
 *          l_int32      numaCopyParameters()
 *
 *      Convert to string array
 *          SARRAY      *numaConvertToSarray()
 *
 *      Serialize numa for I/O
 *          NUMA        *numaRead()
 *          NUMA        *numaReadStream()
 *          NUMA        *numaReadMem()
 *          l_int32      numaWriteDebug()
 *          l_int32      numaWrite()
 *          l_int32      numaWriteStream()
 *          l_int32      numaWriteStderr()
 *          l_int32      numaWriteMem()
 *
 *      Numaa creation, destruction, truncation
 *          NUMAA       *numaaCreate()
 *          NUMAA       *numaaCreateFull()
 *          NUMAA       *numaaTruncate()
 *          void        *numaaDestroy()
 *
 *      Add Numa to Numaa
 *          l_int32      numaaAddNuma()
 *          static l_int32   numaaExtendArray()
 *
 *      Numaa accessors
 *          l_int32      numaaGetCount()
 *          l_int32      numaaGetNumaCount()
 *          l_int32      numaaGetNumberCount()
 *          NUMA       **numaaGetPtrArray()
 *          NUMA        *numaaGetNuma()
 *          NUMA        *numaaReplaceNuma()
 *          l_int32      numaaGetValue()
 *          l_int32      numaaAddNumber()
 *
 *      Serialize numaa for I/O
 *          NUMAA       *numaaRead()
 *          NUMAA       *numaaReadStream()
 *          NUMAA       *numaaReadMem()
 *          l_int32      numaaWrite()
 *          l_int32      numaaWriteStream()
 *          l_int32      numaaWriteMem()
 *
 *    (1) The Numa is a struct holding an array of floats.  It can also
 *        be used to store l_int32 values, with some loss of precision
 *        for floats larger than about 10 million.  Use the L_Dna instead
 *        if integers larger than a few million need to be stored.
 *
 *    (2) Always use the accessors in this file, never the fields directly.
 *
 *    (3) Storing and retrieving numbers:
 *
 *       * to append a new number to the array, use numaAddNumber().  If
 *         the number is an int, it will will automatically be converted
 *         to l_float32 and stored.
 *
 *       * to reset a value stored in the array, use numaSetValue().
 *
 *       * to increment or decrement a value stored in the array,
 *         use numaShiftValue().
 *
 *       * to obtain a value from the array, use either numaGetIValue()
 *         or numaGetFValue(), depending on whether you are retrieving
 *         an integer or a float.  This avoids doing an explicit cast,
 *         such as
 *           (a) return a l_float32 and cast it to an l_int32
 *           (b) cast the return directly to (l_float32 *) to
 *               satisfy the function prototype, as in
 *                 numaGetFValue(na, index, (l_float32 *)&ival);   [ugly!]
 *
 *    (4) int <--> float conversions:
 *
 *        Tradition dictates that type conversions go automatically from
 *        l_int32 --> l_float32, even though it is possible to lose
 *        precision for large integers, whereas you must cast (l_int32)
 *        to go from l_float32 --> l_int32 because you're truncating
 *        to the integer value.
 *
 *    (5) As with other arrays in leptonica, the numa has both an allocated
 *        size and a count of the stored numbers.  When you add a number, it
 *        goes on the end of the array, and causes a realloc if the array
 *        is already filled.  However, in situations where you want to
 *        add numbers randomly into an array, such as when you build a
 *        histogram, you must set the count of stored numbers in advance.
 *        This is done with numaSetCount().  If you set a count larger
 *        than the allocated array, it does a realloc to the size requested.
 *
 *    (6) In situations where the data in a numa correspond to a function
 *        y(x), the values can be either at equal spacings in x or at
 *        arbitrary spacings.  For the former, we can represent all x values
 *        by two parameters: startx (corresponding to y[0]) and delx
 *        for the change in x for adjacent values y[i] and y[i+1].
 *        startx and delx are initialized to 0.0 and 1.0, rsp.
 *        For arbitrary spacings, we use a second numa, and the two
 *        numas are typically denoted nay and nax.
 *
 *    (7) The numa is also the basic struct used for histograms.  Every numa
 *        has startx and delx fields, initialized to 0.0 and 1.0, that can
 *        be used to represent the "x" value for the location of the
 *        first bin and the bin width, respectively.  Accessors are the
 *        numa*Parameters() functions.  All functions that make numa
 *        histograms must set these fields properly, and many functions
 *        that use numa histograms rely on the correctness of these values.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #include "array_internal.h" /* Bounds on initial array size */ static const l_uint32 MaxFloatArraySize = 100000000; /* for numa */ static const l_uint32 MaxPtrArraySize = 1000000; /* for numaa */ static const l_int32 InitialArraySize = 50; /*!< n'importe quoi */ /* Static functions */ static l_int32 numaExtendArray(NUMA *na); static l_int32 numaaExtendArray(NUMAA *naa); /*--------------------------------------------------------------------------* * Numa creation, destruction, copy, clone, etc. * *--------------------------------------------------------------------------*/ /*! * \brief numaCreate() * * \param[in] n size of number array to be alloc'd 0 for default * \return na, or NULL on error */ NUMA * numaCreate(l_int32 n) { NUMA *na; if (n <= 0 || n > MaxFloatArraySize) n = InitialArraySize; na = (NUMA *)LEPT_CALLOC(1, sizeof(NUMA)); if ((na->array = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) { numaDestroy(&na); return (NUMA *)ERROR_PTR("number array not made", __func__, NULL); } na->nalloc = n; na->n = 0; na->refcount = 1; na->startx = 0.0; na->delx = 1.0; return na; } /*! * \brief numaCreateFromIArray() * * \param[in] iarray integer array * \param[in] size of the array * \return na, or NULL on error * *
 * Notes:
 *      (1) We can't insert this int array into the numa, because a numa
 *          takes a float array.  So this just copies the data from the
 *          input array into the numa.  The input array continues to be
 *          owned by the caller.
 * 
*/ NUMA * numaCreateFromIArray(l_int32 *iarray, l_int32 size) { l_int32 i; NUMA *na; if (!iarray) return (NUMA *)ERROR_PTR("iarray not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); na = numaCreate(size); for (i = 0; i < size; i++) numaAddNumber(na, iarray[i]); return na; } /*! * \brief numaCreateFromFArray() * * \param[in] farray float array * \param[in] size of the array * \param[in] copyflag L_INSERT or L_COPY * \return na, or NULL on error * *
 * Notes:
 *      (1) With L_INSERT, ownership of the input array is transferred
 *          to the returned numa, and all %size elements are considered
 *          to be valid.
 * 
*/ NUMA * numaCreateFromFArray(l_float32 *farray, l_int32 size, l_int32 copyflag) { l_int32 i; NUMA *na; if (!farray) return (NUMA *)ERROR_PTR("farray not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (NUMA *)ERROR_PTR("invalid copyflag", __func__, NULL); na = numaCreate(size); if (copyflag == L_INSERT) { if (na->array) LEPT_FREE(na->array); na->array = farray; na->n = size; } else { /* just copy the contents */ for (i = 0; i < size; i++) numaAddNumber(na, farray[i]); } return na; } /*! * \brief numaCreateFromString() * * \param[in] str string of comma-separated numbers * \return na, or NULL on error * *
 * Notes:
 *      (1) The numbers can be ints or floats; they will be interpreted
 *          and stored as floats.  To use them as integers (e.g., for
 *          indexing into arrays), use numaGetIValue(...).
 * 
*/ NUMA * numaCreateFromString(const char *str) { char *substr; l_int32 i, n, nerrors; l_float32 val; NUMA *na; SARRAY *sa; if (!str || (strlen(str) == 0)) return (NUMA *)ERROR_PTR("str not defined or empty", __func__, NULL); sa = sarrayCreate(0); sarraySplitString(sa, str, ","); n = sarrayGetCount(sa); na = numaCreate(n); nerrors = 0; for (i = 0; i < n; i++) { substr = sarrayGetString(sa, i, L_NOCOPY); if (sscanf(substr, "%f", &val) != 1) { L_ERROR("substr %d not float\n", __func__, i); nerrors++; } else { numaAddNumber(na, val); } } sarrayDestroy(&sa); if (nerrors > 0) { numaDestroy(&na); return (NUMA *)ERROR_PTR("non-floats in string", __func__, NULL); } return na; } /*! * \brief numaDestroy() * * \param[in,out] pna numa to be destroyed and nulled if it exists * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the numa.
 *      (2) Always nulls the input ptr.
 * 
*/ void numaDestroy(NUMA **pna) { NUMA *na; if (pna == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((na = *pna) == NULL) return; /* Decrement the ref count. If it is 0, destroy the numa. */ if (--na->refcount == 0) { if (na->array) LEPT_FREE(na->array); LEPT_FREE(na); } *pna = NULL; } /*! * \brief numaCopy() * * \param[in] na * \return copy of numa, or NULL on error */ NUMA * numaCopy(NUMA *na) { l_int32 i; NUMA *cna; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); if ((cna = numaCreate(na->nalloc)) == NULL) return (NUMA *)ERROR_PTR("cna not made", __func__, NULL); cna->startx = na->startx; cna->delx = na->delx; for (i = 0; i < na->n; i++) numaAddNumber(cna, na->array[i]); return cna; } /*! * \brief numaClone() * * \param[in] na * \return ptr to same numa, or NULL on error */ NUMA * numaClone(NUMA *na) { if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); ++na->refcount; return na; } /*! * \brief numaEmpty() * * \param[in] na * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This does not change the allocation of the array.
 *          It just clears the number of stored numbers, so that
 *          the array appears to be empty.
 * 
*/ l_ok numaEmpty(NUMA *na) { if (!na) return ERROR_INT("na not defined", __func__, 1); na->n = 0; return 0; } /*--------------------------------------------------------------------------* * Number array: add number and extend array * *--------------------------------------------------------------------------*/ /*! * \brief numaAddNumber() * * \param[in] na * \param[in] val float or int to be added; stored as a float * \return 0 if OK, 1 on error */ l_ok numaAddNumber(NUMA *na, l_float32 val) { l_int32 n; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (n >= na->nalloc) { if (numaExtendArray(na)) return ERROR_INT("extension failed", __func__, 1); } na->array[n] = val; na->n++; return 0; } /*! * \brief numaExtendArray() * * \param[in] na * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The max number of floats is 100M.
 * 
*/ static l_int32 numaExtendArray(NUMA *na) { size_t oldsize, newsize; if (!na) return ERROR_INT("na not defined", __func__, 1); if (na->nalloc > MaxFloatArraySize) /* belt & suspenders */ return ERROR_INT("na has too many ptrs", __func__, 1); oldsize = na->nalloc * sizeof(l_float32); newsize = 2 * oldsize; if (newsize > 4 * MaxFloatArraySize) return ERROR_INT("newsize > 400 MB; too large", __func__, 1); if ((na->array = (l_float32 *)reallocNew((void **)&na->array, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); na->nalloc *= 2; return 0; } /*! * \brief numaInsertNumber() * * \param[in] na * \param[in] index location in na to insert new value * \param[in] val float32 or integer to be added * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts na[i] --> na[i + 1] for all i >= index,
 *          and then inserts val as na[index].
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 *
 * 
*/ l_ok numaInsertNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 i, n; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (n >= na->nalloc) { if (numaExtendArray(na)) return ERROR_INT("extension failed", __func__, 1); } for (i = n; i > index; i--) na->array[i] = na->array[i - 1]; na->array[index] = val; na->n++; return 0; } /*! * \brief numaRemoveNumber() * * \param[in] na * \param[in] index element to be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts na[i] --> na[i - 1] for all i > index.
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 * 
*/ l_ok numaRemoveNumber(NUMA *na, l_int32 index) { l_int32 i, n; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } for (i = index + 1; i < n; i++) na->array[i - 1] = na->array[i]; na->n--; return 0; } /*! * \brief numaReplaceNumber() * * \param[in] na * \param[in] index element to be replaced * \param[in] val new value to replace old one * \return 0 if OK, 1 on error */ l_ok numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 n; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } na->array[index] = val; return 0; } /*----------------------------------------------------------------------* * Numa accessors * *----------------------------------------------------------------------*/ /*! * \brief numaGetCount() * * \param[in] na * \return count, or 0 if no numbers or on error */ l_int32 numaGetCount(NUMA *na) { if (!na) return ERROR_INT("na not defined", __func__, 0); return na->n; } /*! * \brief numaSetCount() * * \param[in] na * \param[in] newcount * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If newcount <= na->nalloc, this resets na->n.
 *          Using newcount = 0 is equivalent to numaEmpty().
 *      (2) If newcount > na->nalloc, this causes a realloc
 *          to a size na->nalloc = newcount.
 *      (3) All the previously unused values in na are set to 0.0.
 * 
*/ l_ok numaSetCount(NUMA *na, l_int32 newcount) { if (!na) return ERROR_INT("na not defined", __func__, 1); if (newcount > na->nalloc) { if ((na->array = (l_float32 *)reallocNew((void **)&na->array, sizeof(l_float32) * na->nalloc, sizeof(l_float32) * newcount)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); na->nalloc = newcount; } na->n = newcount; return 0; } /*! * \brief numaGetFValue() * * \param[in] na * \param[in] index into numa * \param[out] pval float value; set to 0.0 on error * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caller may need to check the function return value to
 *          decide if a 0.0 in the returned ival is valid.
 * 
*/ l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval) { if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", __func__, 1); *pval = na->array[index]; return 0; } /*! * \brief numaGetIValue() * * \param[in] na * \param[in] index into numa * \param[out] pival integer value; set to 0 on error * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caller may need to check the function return value to
 *          decide if a 0 in the returned ival is valid.
 * 
*/ l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival) { l_float32 val; if (!pival) return ERROR_INT("&ival not defined", __func__, 1); *pival = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", __func__, 1); val = na->array[index]; *pival = (l_int32)(val + L_SIGN(val) * 0.5); return 0; } /*! * \brief numaSetValue() * * \param[in] na * \param[in] index to element to be set * \param[in] val to set * \return 0 if OK; 1 on error */ l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val) { if (!na) return ERROR_INT("na not defined", __func__, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", __func__, 1); na->array[index] = val; return 0; } /*! * \brief numaShiftValue() * * \param[in] na * \param[in] index to element to change relative to the current value * \param[in] diff increment if diff > 0 or decrement if diff < 0 * \return 0 if OK; 1 on error */ l_ok numaShiftValue(NUMA *na, l_int32 index, l_float32 diff) { if (!na) return ERROR_INT("na not defined", __func__, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", __func__, 1); na->array[index] += diff; return 0; } /*! * \brief numaGetIArray() * * \param[in] na * \return a copy of the bare internal array, integerized * by rounding, or NULL on error *
 * Notes:
 *      (1) A copy of the array is always made, because we need to
 *          generate an integer array from the bare float array.
 *          The caller is responsible for freeing the array.
 *      (2) The array size is determined by the number of stored numbers,
 *          not by the size of the allocated array in the Numa.
 *      (3) This function is provided to simplify calculations
 *          using the bare internal array, rather than continually
 *          calling accessors on the numa.  It is typically used
 *          on an array of size 256.
 * 
*/ l_int32 * numaGetIArray(NUMA *na) { l_int32 i, n, ival; l_int32 *array; if (!na) return (l_int32 *)ERROR_PTR("na not defined", __func__, NULL); if ((n = numaGetCount(na)) == 0) return (l_int32 *)ERROR_PTR("na is empty", __func__, NULL); if ((array = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("array not made", __func__, NULL); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); array[i] = ival; } return array; } /*! * \brief numaGetFArray() * * \param[in] na * \param[in] copyflag L_NOCOPY or L_COPY * \return either the bare internal array or a copy of it, * or NULL on error * *
 * Notes:
 *      (1) If copyflag == L_COPY, it makes a copy which the caller
 *          is responsible for freeing.  Otherwise, it operates
 *          directly on the bare array of the numa.
 *      (2) Very important: for L_NOCOPY, any writes to the array
 *          will be in the numa.  Do not write beyond the size of
 *          the count field, because it will not be accessible
 *          from the numa!  If necessary, be sure to set the count
 *          field to a larger number (such as the alloc size)
 *          BEFORE calling this function.  Creating with numaMakeConstant()
 *          is another way to insure full initialization.
 * 
*/ l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag) { l_int32 i, n; l_float32 *array; if (!na) return (l_float32 *)ERROR_PTR("na not defined", __func__, NULL); if (copyflag == L_NOCOPY) { array = na->array; } else { /* copyflag == L_COPY */ if ((n = numaGetCount(na)) == 0) return (l_float32 *)ERROR_PTR("na is empty", __func__, NULL); if ((array = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("array not made", __func__, NULL); for (i = 0; i < n; i++) array[i] = na->array[i]; } return array; } /*! * \brief numaGetParameters() * * \param[in] na * \param[out] pstartx [optional] startx * \param[out] pdelx [optional] delx * \return 0 if OK, 1 on error */ l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx) { if (!pdelx && !pstartx) return ERROR_INT("no return val requested", __func__, 1); if (pstartx) *pstartx = 0.0; if (pdelx) *pdelx = 1.0; if (!na) return ERROR_INT("na not defined", __func__, 1); if (pstartx) *pstartx = na->startx; if (pdelx) *pdelx = na->delx; return 0; } /*! * \brief numaSetParameters() * * \param[in] na * \param[in] startx x value corresponding to na[0] * \param[in] delx difference in x values for the situation where the * elements of na correspond to the evaluation of a * function at equal intervals of size %delx * \return 0 if OK, 1 on error */ l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx) { if (!na) return ERROR_INT("na not defined", __func__, 1); na->startx = startx; na->delx = delx; return 0; } /*! * \brief numaCopyParameters() * * \param[in] nad destination Numa * \param[in] nas source Numa * \return 0 if OK, 1 on error */ l_ok numaCopyParameters(NUMA *nad, NUMA *nas) { l_float32 start, binsize; if (!nas || !nad) return ERROR_INT("nas and nad not both defined", __func__, 1); numaGetParameters(nas, &start, &binsize); numaSetParameters(nad, start, binsize); return 0; } /*----------------------------------------------------------------------* * Convert to string array * *----------------------------------------------------------------------*/ /*! * \brief numaConvertToSarray() * * \param[in] na * \param[in] size1 size of conversion field * \param[in] size2 for float conversion: size of field to the right * of the decimal point * \param[in] addzeros for integer conversion: to add lead zeros * \param[in] type L_INTEGER_VALUE, L_FLOAT_VALUE * \return a sarray of the float values converted to strings * representing either integer or float values; or NULL on error. * *
 * Notes:
 *      (1) For integer conversion, size2 is ignored.
 *          For float conversion, addzeroes is ignored.
 * 
*/ SARRAY * numaConvertToSarray(NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type) { char fmt[32], strbuf[64]; l_int32 i, n, ival; l_float32 fval; SARRAY *sa; if (!na) return (SARRAY *)ERROR_PTR("na not defined", __func__, NULL); if (type != L_INTEGER_VALUE && type != L_FLOAT_VALUE) return (SARRAY *)ERROR_PTR("invalid type", __func__, NULL); if (type == L_INTEGER_VALUE) { if (addzeros) snprintf(fmt, sizeof(fmt), "%%0%dd", size1); else snprintf(fmt, sizeof(fmt), "%%%dd", size1); } else { /* L_FLOAT_VALUE */ snprintf(fmt, sizeof(fmt), "%%%d.%df", size1, size2); } n = numaGetCount(na); if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); for (i = 0; i < n; i++) { if (type == L_INTEGER_VALUE) { numaGetIValue(na, i, &ival); snprintf(strbuf, sizeof(strbuf), fmt, ival); } else { /* L_FLOAT_VALUE */ numaGetFValue(na, i, &fval); snprintf(strbuf, sizeof(strbuf), fmt, fval); } sarrayAddString(sa, strbuf, L_COPY); } return sa; } /*----------------------------------------------------------------------* * Serialize numa for I/O * *----------------------------------------------------------------------*/ /*! * \brief numaRead() * * \param[in] filename * \return na, or NULL on error */ NUMA * numaRead(const char *filename) { FILE *fp; NUMA *na; if (!filename) return (NUMA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (NUMA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); na = numaReadStream(fp); fclose(fp); if (!na) return (NUMA *)ERROR_PTR_1("na not read", filename, __func__, NULL); return na; } /*! * \brief numaReadStream() * * \param[in] fp file stream * \return numa, or NULL on error */ NUMA * numaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; l_float32 val, startx, delx; NUMA *na; if (!fp) return (NUMA *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, "\nNuma Version %d\n", &version); if (ret != 1) return (NUMA *)ERROR_PTR("not a numa file", __func__, NULL); if (version != NUMA_VERSION_NUMBER) return (NUMA *)ERROR_PTR("invalid numa version", __func__, NULL); if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) return (NUMA *)ERROR_PTR("invalid number of numbers", __func__, NULL); if (n > MaxFloatArraySize) { L_ERROR("n = %d > %d\n", __func__, n, MaxFloatArraySize); return NULL; } if ((na = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " [%d] = %f\n", &index, &val) != 2) { numaDestroy(&na); return (NUMA *)ERROR_PTR("bad input data", __func__, NULL); } numaAddNumber(na, val); } /* Optional data */ if (fscanf(fp, "startx = %f, delx = %f\n", &startx, &delx) == 2) numaSetParameters(na, startx, delx); return na; } /*! * \brief numaReadMem() * * \param[in] data numa serialization; in ascii * \param[in] size of data; can use strlen to get it * \return na, or NULL on error */ NUMA * numaReadMem(const l_uint8 *data, size_t size) { FILE *fp; NUMA *na; if (!data) return (NUMA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (NUMA *)ERROR_PTR("stream not opened", __func__, NULL); na = numaReadStream(fp); fclose(fp); if (!na) L_ERROR("numa not read\n", __func__); return na; } /*! * \brief numaWriteDebug() * * \param[in] filename * \param[in] na * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of numaWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok numaWriteDebug(const char *filename, NUMA *na) { if (LeptDebugOK) { return numaWrite(filename, na); } else { L_INFO("write to named temp file %s is disabled\n", __func__, filename); return 0; } } /*! * \brief numaWrite() * * \param[in] filename * \param[in] na * \return 0 if OK, 1 on error */ l_ok numaWrite(const char *filename, NUMA *na) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = numaWriteStream(fp, na); fclose(fp); if (ret) return ERROR_INT_1("na not written to stream", filename, __func__, 1); return 0; } /*! * \brief numaWriteStream() * * \param[in] fp file stream; use NULL to write to stderr * \param[in] na * \return 0 if OK, 1 on error */ l_ok numaWriteStream(FILE *fp, NUMA *na) { l_int32 i, n; l_float32 startx, delx; if (!na) return ERROR_INT("na not defined", __func__, 1); if (!fp) return numaWriteStderr(na); n = numaGetCount(na); fprintf(fp, "\nNuma Version %d\n", NUMA_VERSION_NUMBER); fprintf(fp, "Number of numbers = %d\n", n); for (i = 0; i < n; i++) fprintf(fp, " [%d] = %f\n", i, na->array[i]); fprintf(fp, "\n"); /* Optional data */ numaGetParameters(na, &startx, &delx); if (startx != 0.0 || delx != 1.0) fprintf(fp, "startx = %f, delx = %f\n", startx, delx); return 0; } /*! * \brief numaWriteStderr() * * \param[in] na * \return 0 if OK, 1 on error */ l_ok numaWriteStderr(NUMA *na) { l_int32 i, n; l_float32 startx, delx; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); lept_stderr("\nNuma Version %d\n", NUMA_VERSION_NUMBER); lept_stderr("Number of numbers = %d\n", n); for (i = 0; i < n; i++) lept_stderr(" [%d] = %f\n", i, na->array[i]); lept_stderr("\n"); /* Optional data */ numaGetParameters(na, &startx, &delx); if (startx != 0.0 || delx != 1.0) lept_stderr("startx = %f, delx = %f\n", startx, delx); return 0; } /*! * \brief numaWriteMem() * * \param[out] pdata data of serialized numa; ascii * \param[out] psize size of returned data * \param[in] na * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a numa in memory and puts the result in a buffer.
 * 
*/ l_ok numaWriteMem(l_uint8 **pdata, size_t *psize, NUMA *na) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = numaWriteStream(fp, na); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = numaWriteStream(fp, na); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*--------------------------------------------------------------------------* * Numaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * \brief numaaCreate() * * \param[in] n size of numa ptr array to be alloc'd 0 for default * \return naa, or NULL on error * */ NUMAA * numaaCreate(l_int32 n) { NUMAA *naa; if (n <= 0 || n > MaxPtrArraySize) n = InitialArraySize; naa = (NUMAA *)LEPT_CALLOC(1, sizeof(NUMAA)); if ((naa->numa = (NUMA **)LEPT_CALLOC(n, sizeof(NUMA *))) == NULL) { numaaDestroy(&naa); return (NUMAA *)ERROR_PTR("numa ptr array not made", __func__, NULL); } naa->nalloc = n; naa->n = 0; return naa; } /*! * \brief numaaCreateFull() * * \param[in] nptr size of numa ptr array to be alloc'd * \param[in] n size of individual numa arrays to be allocated * to 0 for default * \return naa, or NULL on error * *
 * Notes:
 *      (1) This allocates numaa and fills the array with allocated numas.
 *          In use, after calling this function, use
 *              numaaAddNumber(naa, index, val);
 *          to add val to the index-th numa in naa.
 * 
*/ NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n) { l_int32 i; NUMAA *naa; NUMA *na; naa = numaaCreate(nptr); for (i = 0; i < nptr; i++) { na = numaCreate(n); numaaAddNuma(naa, na, L_INSERT); } return naa; } /*! * \brief numaaTruncate() * * \param[in] naa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This identifies the largest index containing a numa that
 *          has any numbers within it, destroys all numa beyond that
 *          index, and resets the count.
 * 
*/ l_ok numaaTruncate(NUMAA *naa) { l_int32 i, n, nn; NUMA *na; if (!naa) return ERROR_INT("naa not defined", __func__, 1); n = numaaGetCount(naa); for (i = n - 1; i >= 0; i--) { na = numaaGetNuma(naa, i, L_CLONE); if (!na) continue; nn = numaGetCount(na); numaDestroy(&na); if (nn == 0) numaDestroy(&naa->numa[i]); else break; } naa->n = i + 1; return 0; } /*! * \brief numaaDestroy() * * \param[in,out] pnaa to be destroyed and nulled, if it exists * \return void */ void numaaDestroy(NUMAA **pnaa) { l_int32 i; NUMAA *naa; if (pnaa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((naa = *pnaa) == NULL) return; for (i = 0; i < naa->n; i++) numaDestroy(&naa->numa[i]); LEPT_FREE(naa->numa); LEPT_FREE(naa); *pnaa = NULL; } /*--------------------------------------------------------------------------* * Add Numa to Numaa * *--------------------------------------------------------------------------*/ /*! * \brief numaaAddNuma() * * \param[in] naa * \param[in] na to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag) { l_int32 n; NUMA *nac; if (!naa) return ERROR_INT("naa not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); if (copyflag == L_INSERT) { nac = na; } else if (copyflag == L_COPY) { if ((nac = numaCopy(na)) == NULL) return ERROR_INT("nac not made", __func__, 1); } else if (copyflag == L_CLONE) { nac = numaClone(na); } else { return ERROR_INT("invalid copyflag", __func__, 1); } n = numaaGetCount(naa); if (n >= naa->nalloc) { if (numaaExtendArray(naa)) { if (copyflag != L_INSERT) numaDestroy(&nac); return ERROR_INT("extension failed", __func__, 1); } } naa->numa[n] = nac; naa->n++; return 0; } /*! * \brief numaaExtendArray() * * \param[in] naa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The max number of numa ptrs is 1M.
 * 
*/ static l_int32 numaaExtendArray(NUMAA *naa) { size_t oldsize, newsize; if (!naa) return ERROR_INT("naa not defined", __func__, 1); if (naa->nalloc > MaxPtrArraySize) /* belt & suspenders */ return ERROR_INT("naa has too many ptrs", __func__, 1); oldsize = naa->nalloc * sizeof(NUMA *); newsize = 2 * oldsize; if (newsize > 8 * MaxPtrArraySize) return ERROR_INT("newsize > 8 MB; too large", __func__, 1); if ((naa->numa = (NUMA **)reallocNew((void **)&naa->numa, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); naa->nalloc *= 2; return 0; } /*----------------------------------------------------------------------* * Numaa accessors * *----------------------------------------------------------------------*/ /*! * \brief numaaGetCount() * * \param[in] naa * \return count number of numa, or 0 if no numa or on error */ l_int32 numaaGetCount(NUMAA *naa) { if (!naa) return ERROR_INT("naa not defined", __func__, 0); return naa->n; } /*! * \brief numaaGetNumaCount() * * \param[in] naa * \param[in] index of numa in naa * \return count of numbers in the referenced numa, or 0 on error. */ l_int32 numaaGetNumaCount(NUMAA *naa, l_int32 index) { if (!naa) return ERROR_INT("naa not defined", __func__, 0); if (index < 0 || index >= naa->n) return ERROR_INT("invalid index into naa", __func__, 0); return numaGetCount(naa->numa[index]); } /*! * \brief numaaGetNumberCount() * * \param[in] naa * \return count total number of numbers in the numaa, * or 0 if no numbers or on error */ l_int32 numaaGetNumberCount(NUMAA *naa) { NUMA *na; l_int32 n, sum, i; if (!naa) return ERROR_INT("naa not defined", __func__, 0); n = numaaGetCount(naa); for (sum = 0, i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); sum += numaGetCount(na); numaDestroy(&na); } return sum; } /*! * \brief numaaGetPtrArray() * * \param[in] naa * \return the internal array of ptrs to Numa, or NULL on error * *
 * Notes:
 *      (1) This function is convenient for doing direct manipulation on
 *          a fixed size array of Numas.  To do this, it sets the count
 *          to the full size of the allocated array of Numa ptrs.
 *          The originating Numaa owns this array: DO NOT free it!
 *      (2) Intended usage:
 *            Numaa *naa = numaaCreate(n);
 *            Numa **array = numaaGetPtrArray(naa);
 *             ...  [manipulate Numas directly on the array]
 *            numaaDestroy(&naa);
 *      (3) Cautions:
 *           ~ Do not free this array; it is owned by tne Numaa.
 *           ~ Do not call any functions on the Numaa, other than
 *             numaaDestroy() when you're finished with the array.
 *             Adding a Numa will force a resize, destroying the ptr array.
 *           ~ Do not address the array outside its allocated size.
 *             With the bare array, there are no protections.  If the
 *             allocated size is n, array[n] is an error.
 * 
*/ NUMA ** numaaGetPtrArray(NUMAA *naa) { if (!naa) return (NUMA **)ERROR_PTR("naa not defined", __func__, NULL); naa->n = naa->nalloc; return naa->numa; } /*! * \brief numaaGetNuma() * * \param[in] naa * \param[in] index to the index-th numa * \param[in] accessflag L_COPY or L_CLONE * \return numa, or NULL on error */ NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag) { if (!naa) return (NUMA *)ERROR_PTR("naa not defined", __func__, NULL); if (index < 0 || index >= naa->n) return (NUMA *)ERROR_PTR("index not valid", __func__, NULL); if (accessflag == L_COPY) return numaCopy(naa->numa[index]); else if (accessflag == L_CLONE) return numaClone(naa->numa[index]); else return (NUMA *)ERROR_PTR("invalid accessflag", __func__, NULL); } /*! * \brief numaaReplaceNuma() * * \param[in] naa * \param[in] index to the index-th numa * \param[in] na insert and replace any existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Any existing numa is destroyed, and the input one
 *          is inserted in its place.
 *      (2) If the index is invalid, return 1 (error)
 * 
*/ l_ok numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na) { l_int32 n; if (!naa) return ERROR_INT("naa not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaaGetCount(naa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); numaDestroy(&naa->numa[index]); naa->numa[index] = na; return 0; } /*! * \brief numaaGetValue() * * \param[in] naa * \param[in] i index of numa within numaa * \param[in] j index into numa * \param[out] pfval [optional] float value * \param[out] pival [optional] int value * \return 0 if OK, 1 on error */ l_ok numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival) { l_int32 n; NUMA *na; if (!pfval && !pival) return ERROR_INT("no return val requested", __func__, 1); if (pfval) *pfval = 0.0; if (pival) *pival = 0; if (!naa) return ERROR_INT("naa not defined", __func__, 1); n = numaaGetCount(naa); if (i < 0 || i >= n) return ERROR_INT("invalid index into naa", __func__, 1); na = naa->numa[i]; if (j < 0 || j >= na->n) return ERROR_INT("invalid index into na", __func__, 1); if (pfval) *pfval = na->array[j]; if (pival) *pival = (l_int32)(na->array[j]); return 0; } /*! * \brief numaaAddNumber() * * \param[in] naa * \param[in] index of numa within numaa * \param[in] val float or int to be added; stored as a float * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Adds to an existing numa only.
 * 
*/ l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val) { l_int32 n; NUMA *na; if (!naa) return ERROR_INT("naa not defined", __func__, 1); n = numaaGetCount(naa); if (index < 0 || index >= n) return ERROR_INT("invalid index in naa", __func__, 1); na = numaaGetNuma(naa, index, L_CLONE); numaAddNumber(na, val); numaDestroy(&na); return 0; } /*----------------------------------------------------------------------* * Serialize numaa for I/O * *----------------------------------------------------------------------*/ /*! * \brief numaaRead() * * \param[in] filename * \return naa, or NULL on error */ NUMAA * numaaRead(const char *filename) { FILE *fp; NUMAA *naa; if (!filename) return (NUMAA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (NUMAA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); naa = numaaReadStream(fp); fclose(fp); if (!naa) return (NUMAA *)ERROR_PTR_1("naa not read", filename, __func__, NULL); return naa; } /*! * \brief numaaReadStream() * * \param[in] fp file stream * \return naa, or NULL on error */ NUMAA * numaaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; NUMA *na; NUMAA *naa; if (!fp) return (NUMAA *)ERROR_PTR("stream not defined", __func__, NULL); ret = fscanf(fp, "\nNumaa Version %d\n", &version); if (ret != 1) return (NUMAA *)ERROR_PTR("not a numa file", __func__, NULL); if (version != NUMA_VERSION_NUMBER) return (NUMAA *)ERROR_PTR("invalid numaa version", __func__, NULL); if (fscanf(fp, "Number of numa = %d\n\n", &n) != 1) return (NUMAA *)ERROR_PTR("invalid number of numa", __func__, NULL); if (n > MaxPtrArraySize) { L_ERROR("n = %d > %d\n", __func__, n, MaxPtrArraySize); return NULL; } if ((naa = numaaCreate(n)) == NULL) return (NUMAA *)ERROR_PTR("naa not made", __func__, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "Numa[%d]:", &index) != 1) { numaaDestroy(&naa); return (NUMAA *)ERROR_PTR("invalid numa header", __func__, NULL); } if ((na = numaReadStream(fp)) == NULL) { numaaDestroy(&naa); return (NUMAA *)ERROR_PTR("na not made", __func__, NULL); } numaaAddNuma(naa, na, L_INSERT); } return naa; } /*! * \brief numaaReadMem() * * \param[in] data numaa serialization; in ascii * \param[in] size of data; can use strlen to get it * \return naa, or NULL on error */ NUMAA * numaaReadMem(const l_uint8 *data, size_t size) { FILE *fp; NUMAA *naa; if (!data) return (NUMAA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (NUMAA *)ERROR_PTR("stream not opened", __func__, NULL); naa = numaaReadStream(fp); fclose(fp); if (!naa) L_ERROR("naa not read\n", __func__); return naa; } /*! * \brief numaaWrite() * * \param[in] filename * \param[in] naa * \return 0 if OK, 1 on error */ l_ok numaaWrite(const char *filename, NUMAA *naa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!naa) return ERROR_INT("naa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = numaaWriteStream(fp, naa); fclose(fp); if (ret) return ERROR_INT_1("naa not written to stream", filename, __func__, 1); return 0; } /*! * \brief numaaWriteStream() * * \param[in] fp file stream * \param[in] naa * \return 0 if OK, 1 on error */ l_ok numaaWriteStream(FILE *fp, NUMAA *naa) { l_int32 i, n; NUMA *na; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!naa) return ERROR_INT("naa not defined", __func__, 1); n = numaaGetCount(naa); fprintf(fp, "\nNumaa Version %d\n", NUMA_VERSION_NUMBER); fprintf(fp, "Number of numa = %d\n\n", n); for (i = 0; i < n; i++) { if ((na = numaaGetNuma(naa, i, L_CLONE)) == NULL) return ERROR_INT("na not found", __func__, 1); fprintf(fp, "Numa[%d]:", i); numaWriteStream(fp, na); numaDestroy(&na); } return 0; } /*! * \brief numaaWriteMem() * * \param[out] pdata data of serialized numaa; ascii * \param[out] psize size of returned data * \param[in] naa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a numaa in memory and puts the result in a buffer.
 * 
*/ l_ok numaaWriteMem(l_uint8 **pdata, size_t *psize, NUMAA *naa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!naa) return ERROR_INT("naa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = numaaWriteStream(fp, naa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = numaaWriteStream(fp, naa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } leptonica-1.86.0/src/numafunc1.c000066400000000000000000003242151506303110300164130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file numafunc1.c *
 *
 *      --------------------------------------
 *      This file has these Numa utilities:
 *         - arithmetic operations
 *         - simple data analysis
 *         - generation of special sequences
 *         - permutations
 *         - interpolation
 *         - sorting
 *         - data analysis requiring sorting
 *         - joins and rearrangements
 *      --------------------------------------
 *
 *      Arithmetic and logic
 *          NUMA        *numaArithOp()
 *          NUMA        *numaLogicalOp()
 *          NUMA        *numaInvert()
 *          l_int32      numaSimilar()
 *          l_int32      numaAddToNumber()
 *
 *      Simple extractions
 *          l_int32      numaGetMin()
 *          l_int32      numaGetMax()
 *          l_int32      numaGetSum()
 *          NUMA        *numaGetPartialSums()
 *          l_int32      numaGetSumOnInterval()
 *          l_int32      numaHasOnlyIntegers()
 *          l_int32      numaGetMean()
 *          l_int32      numaGetMeanAbsval()
 *          NUMA        *numaSubsample()
 *          NUMA        *numaMakeDelta()
 *          NUMA        *numaMakeSequence()
 *          NUMA        *numaMakeConstant()
 *          NUMA        *numaMakeAbsval()
 *          NUMA        *numaAddBorder()
 *          NUMA        *numaAddSpecifiedBorder()
 *          NUMA        *numaRemoveBorder()
 *          l_int32      numaCountNonzeroRuns()
 *          l_int32      numaGetNonzeroRange()
 *          l_int32      numaGetCountRelativeToZero()
 *          NUMA        *numaClipToInterval()
 *          NUMA        *numaMakeThresholdIndicator()
 *          NUMA        *numaUniformSampling()
 *          NUMA        *numaReverse()
 *
 *      Signal feature extraction
 *          NUMA        *numaLowPassIntervals()
 *          NUMA        *numaThresholdEdges()
 *          NUMA        *numaGetSpanValues()
 *          NUMA        *numaGetEdgeValues()
 *
 *      Interpolation
 *          l_int32      numaInterpolateEqxVal()
 *          l_int32      numaInterpolateEqxInterval()
 *          l_int32      numaInterpolateArbxVal()
 *          l_int32      numaInterpolateArbxInterval()
 *
 *      Functions requiring interpolation
 *          l_int32      numaFitMax()
 *          l_int32      numaDifferentiateInterval()
 *          l_int32      numaIntegrateInterval()
 *
 *      Sorting
 *          NUMA        *numaSortGeneral()
 *          NUMA        *numaSortAutoSelect()
 *          NUMA        *numaSortIndexAutoSelect()
 *          l_int32      numaChooseSortType()
 *          NUMA        *numaSort()
 *          NUMA        *numaBinSort()
 *          NUMA        *numaGetSortIndex()
 *          NUMA        *numaGetBinSortIndex()
 *          NUMA        *numaSortByIndex()
 *          l_int32      numaIsSorted()
 *          l_int32      numaSortPair()
 *          NUMA        *numaInvertMap()
 *          l_int32      numaAddSorted()
 *          l_int32      numaFindSortedLoc()
 *
 *      Random permutation
 *          NUMA        *numaPseudorandomSequence()
 *          NUMA        *numaRandomPermutation()
 *
 *      Functions requiring sorting
 *          l_int32      numaGetRankValue()
 *          l_int32      numaGetMedian()
 *          l_int32      numaGetBinnedMedian()
 *          l_int32      numaGetMeanDevFromMedian()
 *          l_int32      numaGetMedianDevFromMedian()
 *          l_int32      numaGetMode()
 *
 *      Rearrangements
 *          l_int32      numaJoin()
 *          l_int32      numaaJoin()
 *          NUMA        *numaaFlattenToNuma()
 *
 *    Things to remember when using the Numa:
 *
 *    (1) The numa is a struct, not an array.  Always use accessors
 *        (see numabasic.c), never the fields directly.
 *
 *    (2) The number array holds l_float32 values.  It can also
 *        be used to store l_int32 values.  See numabasic.c for
 *        details on using the accessors.
 *
 *    (3) If you use numaCreate(), no numbers are stored and the size is 0.
 *        You have to add numbers to increase the size.
 *        If you want to start with a numa of a fixed size, with each
 *        entry initialized to the same value, use numaMakeConstant().
 *
 *    (4) Occasionally, in the comments we denote the i-th element of a
 *        numa by na[i].  This is conceptual only -- the numa is not an array!
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" /*----------------------------------------------------------------------* * Arithmetic and logical ops on Numas * *----------------------------------------------------------------------*/ /*! * \brief numaArithOp() * * \param[in] nad [optional] can be null or equal to na1 (in-place * \param[in] na1 * \param[in] na2 * \param[in] op L_ARITH_ADD, L_ARITH_SUBTRACT, * L_ARITH_MULTIPLY, L_ARITH_DIVIDE * \return nad always: operation applied to na1 and na2 * *
 * Notes:
 *      (1) The sizes of na1 and na2 must be equal.
 *      (2) nad can only null or equal to na1.
 *      (3) To add a constant to a numa, or to multiply a numa by
 *          a constant, use numaTransform().
 * 
*/ NUMA * numaArithOp(NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op) { l_int32 i, n; l_float32 val1, val2; if (!na1 || !na2) return (NUMA *)ERROR_PTR("na1, na2 not both defined", __func__, nad); n = numaGetCount(na1); if (n != numaGetCount(na2)) return (NUMA *)ERROR_PTR("na1, na2 sizes differ", __func__, nad); if (nad && nad != na1) return (NUMA *)ERROR_PTR("nad defined but not in-place", __func__, nad); if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT && op != L_ARITH_MULTIPLY && op != L_ARITH_DIVIDE) return (NUMA *)ERROR_PTR("invalid op", __func__, nad); if (op == L_ARITH_DIVIDE) { for (i = 0; i < n; i++) { numaGetFValue(na2, i, &val2); if (val2 == 0.0) return (NUMA *)ERROR_PTR("na2 has 0 element", __func__, nad); } } /* If nad is not identical to na1, make it an identical copy */ if (!nad) nad = numaCopy(na1); for (i = 0; i < n; i++) { numaGetFValue(nad, i, &val1); numaGetFValue(na2, i, &val2); switch (op) { case L_ARITH_ADD: numaSetValue(nad, i, val1 + val2); break; case L_ARITH_SUBTRACT: numaSetValue(nad, i, val1 - val2); break; case L_ARITH_MULTIPLY: numaSetValue(nad, i, val1 * val2); break; case L_ARITH_DIVIDE: numaSetValue(nad, i, val1 / val2); break; default: lept_stderr(" Unknown arith op: %d\n", op); return nad; } } return nad; } /*! * \brief numaLogicalOp() * * \param[in] nad [optional] can be null or equal to na1 (in-place * \param[in] na1 * \param[in] na2 * \param[in] op L_UNION, L_INTERSECTION, L_SUBTRACTION, L_EXCLUSIVE_OR * \return nad always: operation applied to na1 and na2 * *
 * Notes:
 *      (1) The sizes of na1 and na2 must be equal.
 *      (2) nad can only be null or equal to na1.
 *      (3) This is intended for use with indicator arrays (0s and 1s).
 *          Input data is extracted as integers (0 == false, anything
 *          else == true); output results are 0 and 1.
 *      (4) L_SUBTRACTION is subtraction of val2 from val1.  For bit logical
 *          arithmetic this is (val1 & ~val2), but because these values
 *          are integers, we use (val1 && !val2).
 * 
*/ NUMA * numaLogicalOp(NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op) { l_int32 i, n, val1, val2, val; if (!na1 || !na2) return (NUMA *)ERROR_PTR("na1, na2 not both defined", __func__, nad); n = numaGetCount(na1); if (n != numaGetCount(na2)) return (NUMA *)ERROR_PTR("na1, na2 sizes differ", __func__, nad); if (nad && nad != na1) return (NUMA *)ERROR_PTR("nad defined; not in-place", __func__, nad); if (op != L_UNION && op != L_INTERSECTION && op != L_SUBTRACTION && op != L_EXCLUSIVE_OR) return (NUMA *)ERROR_PTR("invalid op", __func__, nad); /* If nad is not identical to na1, make it an identical copy */ if (!nad) nad = numaCopy(na1); for (i = 0; i < n; i++) { numaGetIValue(nad, i, &val1); numaGetIValue(na2, i, &val2); val1 = (val1 == 0) ? 0 : 1; val2 = (val2 == 0) ? 0 : 1; switch (op) { case L_UNION: val = (val1 || val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_INTERSECTION: val = (val1 && val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_SUBTRACTION: val = (val1 && !val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_EXCLUSIVE_OR: val = (val1 != val2) ? 1 : 0; numaSetValue(nad, i, val); break; default: lept_stderr(" Unknown logical op: %d\n", op); return nad; } } return nad; } /*! * \brief numaInvert() * * \param[in] nad [optional] can be null or equal to nas (in-place * \param[in] nas * \return nad always: 'inverts' nas * *
 * Notes:
 *      (1) This is intended for use with indicator arrays (0s and 1s).
 *          It gives a boolean-type output, taking the input as
 *          an integer and inverting it:
 *              0              -->  1
 *              anything else  -->   0
 * 
*/ NUMA * numaInvert(NUMA *nad, NUMA *nas) { l_int32 i, n, val; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, nad); if (nad && nad != nas) return (NUMA *)ERROR_PTR("nad defined; not in-place", __func__, nad); if (!nad) nad = numaCopy(nas); n = numaGetCount(nad); for (i = 0; i < n; i++) { numaGetIValue(nad, i, &val); if (!val) val = 1; else val = 0; numaSetValue(nad, i, val); } return nad; } /*! * \brief numaSimilar() * * \param[in] na1 * \param[in] na2 * \param[in] maxdiff use 0.0 for exact equality * \param[out] psimilar 1 if similar; 0 if different * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Float values can differ slightly due to roundoff and
 *          accumulated errors.  Using %maxdiff > 0.0 allows similar
 *          arrays to be identified.
 * 
*/ l_int32 numaSimilar(NUMA *na1, NUMA *na2, l_float32 maxdiff, l_int32 *psimilar) { l_int32 i, n; l_float32 val1, val2; if (!psimilar) return ERROR_INT("&similar not defined", __func__, 1); *psimilar = 0; if (!na1 || !na2) return ERROR_INT("na1 and na2 not both defined", __func__, 1); maxdiff = L_ABS(maxdiff); n = numaGetCount(na1); if (n != numaGetCount(na2)) return 0; for (i = 0; i < n; i++) { numaGetFValue(na1, i, &val1); numaGetFValue(na2, i, &val2); if (L_ABS(val1 - val2) > maxdiff) return 0; } *psimilar = 1; return 0; } /*! * \brief numaAddToNumber() * * \param[in] na source numa * \param[in] index element to be changed * \param[in] val new value to be added * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is useful for accumulating sums, regardless of the index
 *          order in which the values are made available.
 *      (2) Before use, the numa has to be filled up to %index.  This would
 *          typically be used by creating the numa with the full sized
 *          array, initialized to 0.0, using numaMakeConstant().
 * 
*/ l_ok numaAddToNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 n; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } na->array[index] += val; return 0; } /*----------------------------------------------------------------------* * Simple extractions * *----------------------------------------------------------------------*/ /*! * \brief numaGetMin() * * \param[in] na source numa * \param[out] pminval [optional] min value * \param[out] piminloc [optional] index of min location * \return 0 if OK; 1 on error */ l_ok numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc) { l_int32 i, n, iminloc; l_float32 val, minval; if (!pminval && !piminloc) return ERROR_INT("nothing to do", __func__, 1); if (pminval) *pminval = 0.0; if (piminloc) *piminloc = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); minval = +1000000000.; iminloc = 0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val < minval) { minval = val; iminloc = i; } } if (pminval) *pminval = minval; if (piminloc) *piminloc = iminloc; return 0; } /*! * \brief numaGetMax() * * \param[in] na source numa * \param[out] pmaxval [optional] max value * \param[out] pimaxloc [optional] index of max location * \return 0 if OK; 1 on error */ l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc) { l_int32 i, n, imaxloc; l_float32 val, maxval; if (!pmaxval && !pimaxloc) return ERROR_INT("nothing to do", __func__, 1); if (pmaxval) *pmaxval = 0.0; if (pimaxloc) *pimaxloc = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); maxval = -1000000000.; imaxloc = 0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val > maxval) { maxval = val; imaxloc = i; } } if (pmaxval) *pmaxval = maxval; if (pimaxloc) *pimaxloc = imaxloc; return 0; } /*! * \brief numaGetSum() * * \param[in] na source numa * \param[out] psum sum of values * \return 0 if OK, 1 on error */ l_ok numaGetSum(NUMA *na, l_float32 *psum) { l_int32 i, n; l_float32 val, sum; if (!psum) return ERROR_INT("&sum not defined", __func__, 1); *psum = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); sum += val; } *psum = sum; return 0; } /*! * \brief numaGetPartialSums() * * \param[in] na source numa * \return nasum, or NULL on error * *
 * Notes:
 *      (1) nasum[i] is the sum for all j <= i of na[j].
 *          So nasum[0] = na[0].
 *      (2) If you want to generate a rank function, where rank[0] - 0.0,
 *          insert a 0.0 at the beginning of the nasum array.
 * 
*/ NUMA * numaGetPartialSums(NUMA *na) { l_int32 i, n; l_float32 val, sum; NUMA *nasum; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); if ((n = numaGetCount(na)) == 0) L_WARNING("na is empty\n", __func__); nasum = numaCreate(n); sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); sum += val; numaAddNumber(nasum, sum); } return nasum; } /*! * \brief numaGetSumOnInterval() * * \param[in] na source numa * \param[in] first beginning index * \param[in] last final index; use -1 to go to the end * \param[out] psum sum of values in the index interval range * \return 0 if OK, 1 on error */ l_ok numaGetSumOnInterval(NUMA *na, l_int32 first, l_int32 last, l_float32 *psum) { l_int32 i, n; l_float32 val, sum; if (!psum) return ERROR_INT("&sum not defined", __func__, 1); *psum = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); sum = 0.0; if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if (first < 0) first = 0; if (first >= n || last < -1) /* not an error */ return 0; if (last == -1) last = n - 1; last = L_MIN(last, n - 1); for (i = first; i <= last; i++) { numaGetFValue(na, i, &val); sum += val; } *psum = sum; return 0; } /*! * \brief numaHasOnlyIntegers() * * \param[in] na source numa * \param[out] pallints 1 if all sampled values are ints; else 0 * \return 0 if OK, 1 on error */ l_ok numaHasOnlyIntegers(NUMA *na, l_int32 *pallints) { l_int32 i, n; l_float32 val; if (!pallints) return ERROR_INT("&allints not defined", __func__, 1); *pallints = TRUE; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); for (i = 0; i < n; i ++) { numaGetFValue(na, i, &val); if (val != (l_int32)val) { *pallints = FALSE; return 0; } } return 0; } /*! * \brief numaGetMean() * * \param[in] na source numa * \param[out] pave average of values * \return 0 if OK, 1 on error */ l_ok numaGetMean(NUMA *na, l_float32 *pave) { l_int32 n; l_float32 sum; if (!pave) return ERROR_INT("&ave not defined", __func__, 1); *pave = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); numaGetSum(na, &sum); *pave = sum / n; return 0; } /*! * \brief numaGetMeanAbsval() * * \param[in] na source numa * \param[out] paveabs average of absolute values * \return 0 if OK, 1 on error */ l_ok numaGetMeanAbsval(NUMA *na, l_float32 *paveabs) { l_int32 n; NUMA *na1; if (!paveabs) return ERROR_INT("&aveabs not defined", __func__, 1); *paveabs = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); na1 = numaMakeAbsval(NULL, na); numaGetMean(na1, paveabs); numaDestroy(&na1); return 0; } /*! * \brief numaSubsample() * * \param[in] nas * \param[in] subfactor subsample factor, >= 1 * \return nad evenly sampled values from nas, or NULL on error */ NUMA * numaSubsample(NUMA *nas, l_int32 subfactor) { l_int32 i, n; l_float32 val; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (subfactor < 1) return (NUMA *)ERROR_PTR("subfactor < 1", __func__, NULL); nad = numaCreate(0); if ((n = numaGetCount(nas)) == 0) L_WARNING("nas is empty\n", __func__); for (i = 0; i < n; i++) { if (i % subfactor != 0) continue; numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } return nad; } /*! * \brief numaMakeDelta() * * \param[in] nas input numa * \return numa of difference values val[i+1] - val[i], * or NULL on error */ NUMA * numaMakeDelta(NUMA *nas) { l_int32 i, n; l_float32 prev, cur; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) < 2) { L_WARNING("n < 2; returning empty numa\n", __func__); return numaCreate(1); } nad = numaCreate(n - 1); numaGetFValue(nas, 0, &prev); for (i = 1; i < n; i++) { numaGetFValue(nas, i, &cur); numaAddNumber(nad, cur - prev); prev = cur; } return nad; } /*! * \brief numaMakeSequence() * * \param[in] startval * \param[in] increment * \param[in] size of sequence * \return numa of sequence of evenly spaced values, or NULL on error */ NUMA * numaMakeSequence(l_float32 startval, l_float32 increment, l_int32 size) { l_int32 i; l_float32 val; NUMA *na; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < size; i++) { val = startval + i * increment; numaAddNumber(na, val); } return na; } /*! * \brief numaMakeConstant() * * \param[in] val * \param[in] size of numa * \return numa of given size with all entries equal to 'val', * or NULL on error */ NUMA * numaMakeConstant(l_float32 val, l_int32 size) { return numaMakeSequence(val, 0.0, size); } /*! * \brief numaMakeAbsval() * * \param[in] nad can be null for new array, or the same as nas for inplace * \param[in] nas input numa * \return nad with all numbers being the absval of the input, * or NULL on error */ NUMA * numaMakeAbsval(NUMA *nad, NUMA *nas) { l_int32 i, n; l_float32 val; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (nad && nad != nas) return (NUMA *)ERROR_PTR("nad and not in-place", __func__, NULL); if (!nad) nad = numaCopy(nas); n = numaGetCount(nad); for (i = 0; i < n; i++) { val = nad->array[i]; nad->array[i] = L_ABS(val); } return nad; } /*! * \brief numaAddBorder() * * \param[in] nas * \param[in] left number of elements to add before the start * \param[in] right number of elements to add after the end * \param[in] val initialize border elements * \return nad with added elements at left and right, or NULL on error */ NUMA * numaAddBorder(NUMA *nas, l_int32 left, l_int32 right, l_float32 val) { l_int32 i, n, len; l_float32 startx, delx; l_float32 *fas, *fad; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); n = numaGetCount(nas); len = n + left + right; nad = numaMakeConstant(val, len); numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx - delx * left, delx); fas = numaGetFArray(nas, L_NOCOPY); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) fad[left + i] = fas[i]; return nad; } /*! * \brief numaAddSpecifiedBorder() * * \param[in] nas * \param[in] left number of elements to add before the start * \param[in] right number of elements to add after the end * \param[in] type L_CONTINUED_BORDER, L_MIRRORED_BORDER * \return nad with added elements at left and right, or NULL on error */ NUMA * numaAddSpecifiedBorder(NUMA *nas, l_int32 left, l_int32 right, l_int32 type) { l_int32 i, n; l_float32 *fa; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); if (type != L_CONTINUED_BORDER && type != L_MIRRORED_BORDER) return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); n = numaGetCount(nas); if (type == L_MIRRORED_BORDER && (left > n || right > n)) return (NUMA *)ERROR_PTR("border too large", __func__, NULL); nad = numaAddBorder(nas, left, right, 0); n = numaGetCount(nad); fa = numaGetFArray(nad, L_NOCOPY); if (type == L_CONTINUED_BORDER) { for (i = 0; i < left; i++) fa[i] = fa[left]; for (i = n - right; i < n; i++) fa[i] = fa[n - right - 1]; } else { /* type == L_MIRRORED_BORDER */ for (i = 0; i < left; i++) fa[i] = fa[2 * left - 1 - i]; for (i = 0; i < right; i++) fa[n - right + i] = fa[n - right - i - 1]; } return nad; } /*! * \brief numaRemoveBorder() * * \param[in] nas * \param[in] left number of elements to remove from the start * \param[in] right number of elements to remove up to the end * \return nad with removed elements at left and right, or NULL on error */ NUMA * numaRemoveBorder(NUMA *nas, l_int32 left, l_int32 right) { l_int32 i, n, len; l_float32 startx, delx; l_float32 *fas, *fad; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); n = numaGetCount(nas); if ((len = n - left - right) < 0) return (NUMA *)ERROR_PTR("len < 0 after removal", __func__, NULL); nad = numaMakeConstant(0, len); numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx + delx * left, delx); fas = numaGetFArray(nas, L_NOCOPY); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < len; i++) fad[i] = fas[left + i]; return nad; } /*! * \brief numaCountNonzeroRuns() * * \param[in] na e.g., of pixel counts in rows or columns * \param[out] pcount number of nonzero runs * \return 0 if OK, 1 on error */ l_ok numaCountNonzeroRuns(NUMA *na, l_int32 *pcount) { l_int32 n, i, val, count, inrun; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); count = 0; inrun = FALSE; for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); if (!inrun && val > 0) { count++; inrun = TRUE; } else if (inrun && val == 0) { inrun = FALSE; } } *pcount = count; return 0; } /*! * \brief numaGetNonzeroRange() * * \param[in] na source numa * \param[in] eps largest value considered to be zero * \param[out] pfirst, plast interval of array indices * where values are nonzero * \return 0 if OK, 1 on error or if no nonzero range is found. */ l_ok numaGetNonzeroRange(NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast) { l_int32 n, i, found; l_float32 val; if (pfirst) *pfirst = 0; if (plast) *plast = 0; if (!pfirst || !plast) return ERROR_INT("pfirst and plast not both defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); found = FALSE; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val > eps) { found = TRUE; break; } } if (!found) { *pfirst = n - 1; *plast = 0; return 1; } *pfirst = i; for (i = n - 1; i >= 0; i--) { numaGetFValue(na, i, &val); if (val > eps) break; } *plast = i; return 0; } /*! * \brief numaGetCountRelativeToZero() * * \param[in] na source numa * \param[in] type L_LESS_THAN_ZERO, L_EQUAL_TO_ZERO, L_GREATER_THAN_ZERO * \param[out] pcount count of values of given type * \return 0 if OK, 1 on error */ l_ok numaGetCountRelativeToZero(NUMA *na, l_int32 type, l_int32 *pcount) { l_int32 n, i, count; l_float32 val; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); for (i = 0, count = 0; i < n; i++) { numaGetFValue(na, i, &val); if (type == L_LESS_THAN_ZERO && val < 0.0) count++; else if (type == L_EQUAL_TO_ZERO && val == 0.0) count++; else if (type == L_GREATER_THAN_ZERO && val > 0.0) count++; } *pcount = count; return 0; } /*! * \brief numaClipToInterval() * * \param[in] nas * \param[in] first >= 0; <= last * \param[in] last * \return numa with the same values as the input, but clipped * to the specified interval * *
 * Notes:
 *        If you want the indices of the array values to be unchanged,
 *        use first = 0.
 *  Usage:
 *        This is useful to clip a histogram that has a few nonzero
 *        values to its nonzero range.
 * 
*/ NUMA * numaClipToInterval(NUMA *nas, l_int32 first, l_int32 last) { l_int32 n, i; l_float32 val, startx, delx; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("nas is empty", __func__, NULL); if (first < 0 || first > last) return (NUMA *)ERROR_PTR("range not valid", __func__, NULL); if (first >= n) return (NUMA *)ERROR_PTR("no elements in range", __func__, NULL); last = L_MIN(last, n - 1); if ((nad = numaCreate(last - first + 1)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); for (i = first; i <= last; i++) { numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx + first * delx, delx); return nad; } /*! * \brief numaMakeThresholdIndicator() * * \param[in] nas input numa * \param[in] thresh threshold value * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return nad : indicator array: values are 0 and 1 * *
 * Notes:
 *      (1) For each element in nas, if the constraint given by 'type'
 *          correctly specifies its relation to thresh, a value of 1
 *          is recorded in nad.
 * 
*/ NUMA * numaMakeThresholdIndicator(NUMA *nas, l_float32 thresh, l_int32 type) { l_int32 n, i, ival; l_float32 fval; NUMA *nai; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("nas is empty", __func__, NULL); nai = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(nas, i, &fval); ival = 0; switch (type) { case L_SELECT_IF_LT: if (fval < thresh) ival = 1; break; case L_SELECT_IF_GT: if (fval > thresh) ival = 1; break; case L_SELECT_IF_LTE: if (fval <= thresh) ival = 1; break; case L_SELECT_IF_GTE: if (fval >= thresh) ival = 1; break; default: numaDestroy(&nai); return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); } numaAddNumber(nai, ival); } return nai; } /*! * \brief numaUniformSampling() * * \param[in] nas input numa * \param[in] nsamp number of samples * \return nad : resampled array, or NULL on error * *
 * Notes:
 *      (1) This resamples the values in the array, using %nsamp
 *          equal divisions.
 * 
*/ NUMA * numaUniformSampling(NUMA *nas, l_int32 nsamp) { l_int32 n, i, j, ileft, iright; l_float32 left, right, binsize, lfract, rfract, sum, startx, delx; l_float32 *array; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("nas is empty", __func__, NULL); if (nsamp <= 0) return (NUMA *)ERROR_PTR("nsamp must be > 0", __func__, NULL); nad = numaCreate(nsamp); array = numaGetFArray(nas, L_NOCOPY); binsize = (l_float32)n / (l_float32)nsamp; numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx, binsize * delx); left = 0.0; for (i = 0; i < nsamp; i++) { sum = 0.0; right = left + binsize; ileft = (l_int32)left; lfract = 1.0f - left + ileft; if (lfract >= 1.0) /* on left bin boundary */ lfract = 0.0; iright = (l_int32)right; rfract = right - iright; iright = L_MIN(iright, n - 1); if (ileft == iright) { /* both are within the same original sample */ sum += (lfract + rfract - 1.0f) * array[ileft]; } else { if (lfract > 0.0001) /* left fraction */ sum += lfract * array[ileft]; if (rfract > 0.0001) /* right fraction */ sum += rfract * array[iright]; for (j = ileft + 1; j < iright; j++) /* entire pixels */ sum += array[j]; } numaAddNumber(nad, sum); left = right; } return nad; } /*! * \brief numaReverse() * * \param[in] nad [optional] can be null or equal to nas * \param[in] nas input numa * \return nad : reversed, or NULL on error * *
 * Notes:
 *      (1) Usage:
 *            numaReverse(nas, nas);   // in-place
 *            nad = numaReverse(NULL, nas);  // makes a new one
 * 
*/ NUMA * numaReverse(NUMA *nad, NUMA *nas) { l_int32 n, i; l_float32 val1, val2; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (nad && nas != nad) return (NUMA *)ERROR_PTR("nad defined but != nas", __func__, NULL); n = numaGetCount(nas); if (nad) { /* in-place */ for (i = 0; i < n / 2; i++) { numaGetFValue(nad, i, &val1); numaGetFValue(nad, n - i - 1, &val2); numaSetValue(nad, i, val2); numaSetValue(nad, n - i - 1, val1); } } else { nad = numaCreate(n); for (i = n - 1; i >= 0; i--) { numaGetFValue(nas, i, &val1); numaAddNumber(nad, val1); } } /* Reverse the startx and delx fields */ nad->startx = nas->startx + (n - 1) * nas->delx; nad->delx = -nas->delx; return nad; } /*----------------------------------------------------------------------* * Signal feature extraction * *----------------------------------------------------------------------*/ /*! * \brief numaLowPassIntervals() * * \param[in] nas input numa * \param[in] thresh threshold fraction of max; in [0.0 ... 1.0] * \param[in] maxn for normalizing; set maxn = 0.0 to use the max in nas * \return nad : interval abscissa pairs, or NULL on error * *
 * Notes:
 *      (1) For each interval where the value is less than a specified
 *          fraction of the maximum, this records the left and right "x"
 *          value.
 * 
*/ NUMA * numaLowPassIntervals(NUMA *nas, l_float32 thresh, l_float32 maxn) { l_int32 n, i, inrun; l_float32 maxval, threshval, fval, startx, delx, x0, x1; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("nas is empty", __func__, NULL); if (thresh < 0.0 || thresh > 1.0) return (NUMA *)ERROR_PTR("invalid thresh", __func__, NULL); /* The input threshold is a fraction of the max. * The first entry in nad is the value of the max. */ if (maxn == 0.0) numaGetMax(nas, &maxval, NULL); else maxval = maxn; numaGetParameters(nas, &startx, &delx); threshval = thresh * maxval; nad = numaCreate(0); numaAddNumber(nad, maxval); /* Write pairs of pts (x0, x1) for the intervals */ inrun = FALSE; for (i = 0; i < n; i++) { numaGetFValue(nas, i, &fval); if (fval < threshval && inrun == FALSE) { /* start a new run */ inrun = TRUE; x0 = startx + i * delx; } else if (fval > threshval && inrun == TRUE) { /* end the run */ inrun = FALSE; x1 = startx + i * delx; numaAddNumber(nad, x0); numaAddNumber(nad, x1); } } if (inrun == TRUE) { /* must end the last run */ x1 = startx + (n - 1) * delx; numaAddNumber(nad, x0); numaAddNumber(nad, x1); } return nad; } /*! * \brief numaThresholdEdges() * * \param[in] nas input numa * \param[in] thresh1 low threshold as fraction of max; in [0.0 ... 1.0] * \param[in] thresh2 high threshold as fraction of max; in [0.0 ... 1.0] * \param[in] maxn for normalizing; set maxn = 0.0 to use the max in nas * \return nad edge interval triplets, or NULL on error * *
 * Notes:
 *      (1) For each edge interval, where the value is less
 *          than %thresh1 on one side, greater than %thresh2 on
 *          the other, and between these thresholds throughout the
 *          interval, this records a triplet of values: the
 *          'left' and 'right' edges, and either +1 or -1, depending
 *          on whether the edge is rising or falling.
 *      (2) No assumption is made about the value outside the array,
 *          so if the value at the array edge is between the threshold
 *          values, it is not considered part of an edge.  We start
 *          looking for edge intervals only after leaving the thresholded
 *          band.
 * 
*/ NUMA * numaThresholdEdges(NUMA *nas, l_float32 thresh1, l_float32 thresh2, l_float32 maxn) { l_int32 n, i, istart, inband, output, sign; l_int32 startbelow, below, above, belowlast, abovelast; l_float32 maxval, threshval1, threshval2, fval, startx, delx, x0, x1; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("nas is empty", __func__, NULL); if (thresh1 < 0.0 || thresh1 > 1.0 || thresh2 < 0.0 || thresh2 > 1.0) return (NUMA *)ERROR_PTR("invalid thresholds", __func__, NULL); if (thresh2 < thresh1) return (NUMA *)ERROR_PTR("thresh2 < thresh1", __func__, NULL); /* The input thresholds are fractions of the max. * The first entry in nad is the value of the max used * here for normalization. */ if (maxn == 0.0) numaGetMax(nas, &maxval, NULL); else maxval = maxn; numaGetMax(nas, &maxval, NULL); numaGetParameters(nas, &startx, &delx); threshval1 = thresh1 * maxval; threshval2 = thresh2 * maxval; nad = numaCreate(0); numaAddNumber(nad, maxval); /* Write triplets of pts (x0, x1, sign) for the edges. * First make sure we start search from outside the band. * Only one of {belowlast, abovelast} is true. */ for (i = 0; i < n; i++) { istart = i; numaGetFValue(nas, i, &fval); belowlast = (fval < threshval1) ? TRUE : FALSE; abovelast = (fval > threshval2) ? TRUE : FALSE; if (belowlast == TRUE || abovelast == TRUE) break; } if (istart == n) /* no intervals found */ return nad; /* x0 and x1 can only be set from outside the edge. * They are the values just before entering the band, * and just after entering the band. We can jump through * the band, in which case they differ by one index in nas. */ inband = FALSE; startbelow = belowlast; /* one of these is true */ output = FALSE; x0 = startx + istart * delx; for (i = istart + 1; i < n; i++) { numaGetFValue(nas, i, &fval); below = (fval < threshval1) ? TRUE : FALSE; above = (fval > threshval2) ? TRUE : FALSE; if (!inband && belowlast && above) { /* full jump up */ x1 = startx + i * delx; sign = 1; startbelow = FALSE; /* for the next transition */ output = TRUE; } else if (!inband && abovelast && below) { /* full jump down */ x1 = startx + i * delx; sign = -1; startbelow = TRUE; /* for the next transition */ output = TRUE; } else if (inband && startbelow && above) { /* exit rising; success */ x1 = startx + i * delx; sign = 1; inband = FALSE; startbelow = FALSE; /* for the next transition */ output = TRUE; } else if (inband && !startbelow && below) { /* exit falling; success */ x1 = startx + i * delx; sign = -1; inband = FALSE; startbelow = TRUE; /* for the next transition */ output = TRUE; } else if (inband && !startbelow && above) { /* exit rising; failure */ x0 = startx + i * delx; inband = FALSE; } else if (inband && startbelow && below) { /* exit falling; failure */ x0 = startx + i * delx; inband = FALSE; } else if (!inband && !above && !below) { /* enter */ inband = TRUE; startbelow = belowlast; } else if (!inband && (above || below)) { /* outside and remaining */ x0 = startx + i * delx; /* update position */ } belowlast = below; abovelast = above; if (output) { /* we have exited; save new x0 */ numaAddNumber(nad, x0); numaAddNumber(nad, x1); numaAddNumber(nad, sign); output = FALSE; x0 = startx + i * delx; } } return nad; } /*! * \brief numaGetSpanValues() * * \param[in] na numa that is output of numaLowPassIntervals() * \param[in] span span number, zero-based * \param[out] pstart [optional] location of start of transition * \param[out] pend [optional] location of end of transition * \return 0 if OK, 1 on error */ l_int32 numaGetSpanValues(NUMA *na, l_int32 span, l_int32 *pstart, l_int32 *pend) { l_int32 n, nspans; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if (n % 2 != 1) return ERROR_INT("n is not odd", __func__, 1); nspans = n / 2; if (nspans < 0 || span >= nspans) return ERROR_INT("invalid span", __func__, 1); if (pstart) numaGetIValue(na, 2 * span + 1, pstart); if (pend) numaGetIValue(na, 2 * span + 2, pend); return 0; } /*! * \brief numaGetEdgeValues() * * \param[in] na numa that is output of numaThresholdEdges() * \param[in] edge edge number, zero-based * \param[out] pstart [optional] location of start of transition * \param[out] pend [optional] location of end of transition * \param[out] psign [optional] transition sign: +1 is rising, * -1 is falling * \return 0 if OK, 1 on error */ l_int32 numaGetEdgeValues(NUMA *na, l_int32 edge, l_int32 *pstart, l_int32 *pend, l_int32 *psign) { l_int32 n, nedges; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if (n % 3 != 1) return ERROR_INT("n % 3 is not 1", __func__, 1); nedges = (n - 1) / 3; if (edge < 0 || edge >= nedges) return ERROR_INT("invalid edge", __func__, 1); if (pstart) numaGetIValue(na, 3 * edge + 1, pstart); if (pend) numaGetIValue(na, 3 * edge + 2, pend); if (psign) numaGetIValue(na, 3 * edge + 3, psign); return 0; } /*----------------------------------------------------------------------* * Interpolation * *----------------------------------------------------------------------*/ /*! * \brief numaInterpolateEqxVal() * * \param[in] startx xval corresponding to first element in array * \param[in] deltax x increment between array elements * \param[in] nay numa of ordinate values, assumed equally spaced * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP * \param[in] xval * \param[out] pyval interpolated value * \return 0 if OK, 1 on error e.g., if xval is outside range * *
 * Notes:
 *      (1) Considering nay as a function of x, the x values
 *          are equally spaced
 *      (2) Caller should check for valid return.
 *
 *  For linear Lagrangian interpolation (through 2 data pts):
 *         y(x) = y1(x-x2)/(x1-x2) + y2(x-x1)/(x2-x1)
 *
 *  For quadratic Lagrangian interpolation (through 3 data pts):
 *         y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) +
 *                y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) +
 *                y3(x-x1)(x-x2)/((x3-x1)(x3-x2))
 *
 * 
*/ l_ok numaInterpolateEqxVal(l_float32 startx, l_float32 deltax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval) { l_int32 i, n, i1, i2, i3; l_float32 x1, x2, x3, fy1, fy2, fy3, d1, d2, d3, del, fi, maxx; l_float32 *fa; if (!pyval) return ERROR_INT("&yval not defined", __func__, 1); *pyval = 0.0; if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (deltax <= 0.0) return ERROR_INT("deltax not > 0", __func__, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", __func__, 1); if ((n = numaGetCount(nay)) < 2) return ERROR_INT("not enough points", __func__, 1); if (type == L_QUADRATIC_INTERP && n == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", __func__); } maxx = startx + deltax * (n - 1); if (xval < startx || xval > maxx) return ERROR_INT("xval is out of bounds", __func__, 1); fa = numaGetFArray(nay, L_NOCOPY); fi = (xval - startx) / deltax; i = (l_int32)fi; del = fi - i; if (del == 0.0) { /* no interpolation required */ *pyval = fa[i]; return 0; } if (type == L_LINEAR_INTERP) { *pyval = fa[i] + del * (fa[i + 1] - fa[i]); return 0; } /* Quadratic interpolation */ d1 = d3 = 0.5f / (deltax * deltax); d2 = -2.f * d1; if (i == 0) { i1 = i; i2 = i + 1; i3 = i + 2; } else { i1 = i - 1; i2 = i; i3 = i + 1; } x1 = startx + i1 * deltax; x2 = startx + i2 * deltax; x3 = startx + i3 * deltax; fy1 = d1 * fa[i1]; fy2 = d2 * fa[i2]; fy3 = d3 * fa[i3]; *pyval = fy1 * (xval - x2) * (xval - x3) + fy2 * (xval - x1) * (xval - x3) + fy3 * (xval - x1) * (xval - x2); return 0; } /*! * \brief numaInterpolateArbxVal() * * \param[in] nax numa of abscissa values * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP * \param[in] xval * \param[out] pyval interpolated value * \return 0 if OK, 1 on error e.g., if xval is outside range * *
 * Notes:
 *      (1) The values in nax must be sorted in increasing order.
 *          If, additionally, they are equally spaced, you can use
 *          numaInterpolateEqxVal().
 *      (2) Caller should check for valid return.
 *      (3) Uses lagrangian interpolation.  See numaInterpolateEqxVal()
 *          for formulas.
 * 
*/ l_ok numaInterpolateArbxVal(NUMA *nax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval) { l_int32 i, im, nx, ny, i1, i2, i3; l_float32 delu, dell, fract, d1, d2, d3; l_float32 minx, maxx; l_float32 *fax, *fay; if (!pyval) return ERROR_INT("&yval not defined", __func__, 1); *pyval = 0.0; if (!nax) return ERROR_INT("nax not defined", __func__, 1); if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", __func__, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", __func__, 1); if (ny < 2) return ERROR_INT("not enough points", __func__, 1); if (type == L_QUADRATIC_INTERP && ny == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", __func__); } numaGetFValue(nax, 0, &minx); numaGetFValue(nax, nx - 1, &maxx); if (xval < minx || xval > maxx) return ERROR_INT("xval is out of bounds", __func__, 1); fax = numaGetFArray(nax, L_NOCOPY); fay = numaGetFArray(nay, L_NOCOPY); /* Linear search for interval. We are guaranteed * to either return or break out of the loop. * In addition, we are assured that fax[i] - fax[im] > 0.0 */ if (xval == fax[0]) { *pyval = fay[0]; return 0; } im = 0; dell = 0.0; for (i = 1; i < nx; i++) { delu = fax[i] - xval; if (delu >= 0.0) { /* we've passed it */ if (delu == 0.0) { *pyval = fay[i]; return 0; } im = i - 1; dell = xval - fax[im]; /* >= 0 */ break; } } fract = dell / (fax[i] - fax[im]); if (type == L_LINEAR_INTERP) { *pyval = fay[i] + fract * (fay[i + 1] - fay[i]); return 0; } /* Quadratic interpolation */ if (im == 0) { i1 = im; i2 = im + 1; i3 = im + 2; } else { i1 = im - 1; i2 = im; i3 = im + 1; } d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); *pyval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; return 0; } /*! * \brief numaInterpolateEqxInterval() * * \param[in] startx xval corresponding to first element in nas * \param[in] deltax x increment between array elements in nas * \param[in] nasy numa of ordinate values, assumed equally spaced * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP * \param[in] x0 start value of interval * \param[in] x1 end value of interval * \param[in] npts number of points to evaluate function in interval * \param[out] pnax [optional] array of x values in interval * \param[out] pnay array of y values in interval * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Considering nasy as a function of x, the x values
 *          are equally spaced.
 *      (2) This creates nay (and optionally nax) of interpolated
 *          values over the specified interval (x0, x1).
 *      (3) If the interval (x0, x1) lies partially outside the array
 *          nasy (as interpreted by startx and deltax), it is an
 *          error and returns 1.
 *      (4) Note that deltax is the intrinsic x-increment for the input
 *          array nasy, whereas delx is the intrinsic x-increment for the
 *          output interpolated array nay.
 * 
*/ l_ok numaInterpolateEqxInterval(l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnax, NUMA **pnay) { l_int32 i, n; l_float32 x, yval, maxx, delx; NUMA *nax = NULL, *nay; if (pnax) *pnax = NULL; if (!pnay) return ERROR_INT("&nay not defined", __func__, 1); *pnay = NULL; if (!nasy) return ERROR_INT("nasy not defined", __func__, 1); if ((n = numaGetCount(nasy)) < 2) return ERROR_INT("n < 2", __func__, 1); if (deltax <= 0.0) return ERROR_INT("deltax not > 0", __func__, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", __func__, 1); if (type == L_QUADRATIC_INTERP && n == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", __func__); } maxx = startx + deltax * (n - 1); if (x0 < startx || x1 > maxx || x1 <= x0) return ERROR_INT("[x0 ... x1] is not valid", __func__, 1); if (npts < 3) return ERROR_INT("npts < 3", __func__, 1); delx = (x1 - x0) / (l_float32)(npts - 1); /* delx is for output nay */ if ((nay = numaCreate(npts)) == NULL) return ERROR_INT("nay not made", __func__, 1); numaSetParameters(nay, x0, delx); *pnay = nay; if (pnax) { nax = numaCreate(npts); *pnax = nax; } for (i = 0; i < npts; i++) { x = x0 + i * delx; if (pnax) numaAddNumber(nax, x); numaInterpolateEqxVal(startx, deltax, nasy, type, x, &yval); numaAddNumber(nay, yval); } return 0; } /*! * \brief numaInterpolateArbxInterval() * * \param[in] nax numa of abscissa values * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP * \param[in] x0 start value of interval * \param[in] x1 end value of interval * \param[in] npts number of points to evaluate function in interval * \param[out] pnadx [optional] array of x values in interval * \param[out] pnady array of y values in interval * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range * *
 * Notes:
 *      (1) The values in nax must be sorted in increasing order.
 *          If they are not sorted, we do it here, and complain.
 *      (2) If the values in nax are equally spaced, you can use
 *          numaInterpolateEqxInterval().
 *      (3) Caller should check for valid return.
 *      (4) We don't call numaInterpolateArbxVal() for each output
 *          point, because that requires an O(n) search for
 *          each point.  Instead, we do a single O(n) pass through
 *          nax, saving the indices to be used for each output yval.
 *      (5) Uses lagrangian interpolation.  See numaInterpolateEqxVal()
 *          for formulas.
 * 
*/ l_ok numaInterpolateArbxInterval(NUMA *nax, NUMA *nay, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady) { l_int32 i, im, j, nx, ny, i1, i2, i3, sorted; l_int32 *index; l_float32 del, xval, yval, excess, fract, minx, maxx, d1, d2, d3; l_float32 *fax, *fay; NUMA *nasx, *nasy, *nadx = NULL, *nady; if (pnadx) *pnadx = NULL; if (!pnady) return ERROR_INT("&nady not defined", __func__, 1); *pnady = NULL; if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (!nax) return ERROR_INT("nax not defined", __func__, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", __func__, 1); if (x0 > x1) return ERROR_INT("x0 > x1", __func__, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", __func__, 1); if (ny < 2) return ERROR_INT("not enough points", __func__, 1); if (type == L_QUADRATIC_INTERP && ny == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", __func__); } numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", __func__, 1); /* Make sure that nax is sorted in increasing order */ numaIsSorted(nax, L_SORT_INCREASING, &sorted); if (!sorted) { L_WARNING("we are sorting nax in increasing order\n", __func__); numaSortPair(nax, nay, L_SORT_INCREASING, &nasx, &nasy); } else { nasx = numaClone(nax); nasy = numaClone(nay); } fax = numaGetFArray(nasx, L_NOCOPY); fay = numaGetFArray(nasy, L_NOCOPY); /* Get array of indices into fax for interpolated locations */ if ((index = (l_int32 *)LEPT_CALLOC(npts, sizeof(l_int32))) == NULL) { numaDestroy(&nasx); numaDestroy(&nasy); return ERROR_INT("ind not made", __func__, 1); } del = (x1 - x0) / (npts - 1.0f); for (i = 0, j = 0; j < nx && i < npts; i++) { xval = x0 + i * del; while (j < nx - 1 && xval > fax[j]) j++; if (xval == fax[j]) index[i] = L_MIN(j, nx - 1); else /* the index of fax[] is just below xval */ index[i] = L_MAX(j - 1, 0); } /* For each point to be interpolated, get the y value */ nady = numaCreate(npts); *pnady = nady; if (pnadx) { nadx = numaCreate(npts); *pnadx = nadx; } for (i = 0; i < npts; i++) { xval = x0 + i * del; if (pnadx) numaAddNumber(nadx, xval); im = index[i]; excess = xval - fax[im]; if (excess == 0.0) { numaAddNumber(nady, fay[im]); continue; } fract = excess / (fax[im + 1] - fax[im]); if (type == L_LINEAR_INTERP) { yval = fay[im] + fract * (fay[im + 1] - fay[im]); numaAddNumber(nady, yval); continue; } /* Quadratic interpolation */ if (im == 0) { i1 = im; i2 = im + 1; i3 = im + 2; } else { i1 = im - 1; i2 = im; i3 = im + 1; } d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); yval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; numaAddNumber(nady, yval); } LEPT_FREE(index); numaDestroy(&nasx); numaDestroy(&nasy); return 0; } /*----------------------------------------------------------------------* * Functions requiring interpolation * *----------------------------------------------------------------------*/ /*! * \brief numaFitMax() * * \param[in] na numa of ordinate values, to fit a max to * \param[out] pmaxval max value * \param[in] naloc [optional] associated numa of abscissa values * \param[out] pmaxloc abscissa value that gives max value in na; * if naloc == null, this is given as an interpolated * index value * \return 0 if OK; 1 on error * *
 * Notes:
 *        If %naloc is given, there is no requirement that the
 *        data points are evenly spaced.  Lagrangian interpolation
 *        handles that.  The only requirement is that the
 *        data points are ordered so that the values in naloc
 *        are either increasing or decreasing.  We test to make
 *        sure that the sizes of na and naloc are equal, and it
 *        is assumed that the correspondences %na[i] as a function
 *        of %naloc[i] are properly arranged for all i.
 *
 *  The formula for Lagrangian interpolation through 3 data pts is:
 *       y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) +
 *              y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) +
 *              y3(x-x1)(x-x2)/((x3-x1)(x3-x2))
 *
 *  Then the derivative, using the constants (c1,c2,c3) defined below,
 *  is set to 0:
 *       y'(x) = 2x(c1+c2+c3) - c1(x2+x3) - c2(x1+x3) - c3(x1+x2) = 0
 * 
*/ l_ok numaFitMax(NUMA *na, l_float32 *pmaxval, NUMA *naloc, l_float32 *pmaxloc) { l_float32 val; l_float32 smaxval; /* start value of maximum sample, before interpolating */ l_int32 n, imaxloc; l_float32 x1, x2, x3, y1, y2, y3, c1, c2, c3, a, b, xmax, ymax; if (pmaxval) *pmaxval = 0.0; if (pmaxloc) *pmaxloc = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if (!pmaxval) return ERROR_INT("&maxval not defined", __func__, 1); if (!pmaxloc) return ERROR_INT("&maxloc not defined", __func__, 1); if (naloc) { if (n != numaGetCount(naloc)) return ERROR_INT("na and naloc of unequal size", __func__, 1); } numaGetMax(na, &smaxval, &imaxloc); /* Simple case: max is at end point */ if (imaxloc == 0 || imaxloc == n - 1) { *pmaxval = smaxval; if (naloc) { numaGetFValue(naloc, imaxloc, &val); *pmaxloc = val; } else { *pmaxloc = imaxloc; } return 0; } /* Interior point; use quadratic interpolation */ y2 = smaxval; numaGetFValue(na, imaxloc - 1, &val); y1 = val; numaGetFValue(na, imaxloc + 1, &val); y3 = val; if (naloc) { numaGetFValue(naloc, imaxloc - 1, &val); x1 = val; numaGetFValue(naloc, imaxloc, &val); x2 = val; numaGetFValue(naloc, imaxloc + 1, &val); x3 = val; } else { x1 = imaxloc - 1; x2 = imaxloc; x3 = imaxloc + 1; } /* Can't interpolate; just use the max val in na * and the corresponding one in naloc */ if (x1 == x2 || x1 == x3 || x2 == x3) { *pmaxval = y2; *pmaxloc = x2; return 0; } /* Use lagrangian interpolation; set dy/dx = 0 */ c1 = y1 / ((x1 - x2) * (x1 - x3)); c2 = y2 / ((x2 - x1) * (x2 - x3)); c3 = y3 / ((x3 - x1) * (x3 - x2)); a = c1 + c2 + c3; b = c1 * (x2 + x3) + c2 * (x1 + x3) + c3 * (x1 + x2); xmax = b / (2 * a); ymax = c1 * (xmax - x2) * (xmax - x3) + c2 * (xmax - x1) * (xmax - x3) + c3 * (xmax - x1) * (xmax - x2); *pmaxval = ymax; *pmaxloc = xmax; return 0; } /*! * \brief numaDifferentiateInterval() * * \param[in] nax numa of abscissa values * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] x0 start value of interval * \param[in] x1 end value of interval * \param[in] npts number of points to evaluate function in interval * \param[out] pnadx [optional] array of x values in interval * \param[out] pnady array of derivatives in interval * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range * *
 * Notes:
 *      (1) The values in nax must be sorted in increasing order.
 *          If they are not sorted, it is done in the interpolation
 *          step, and a warning is issued.
 *      (2) Caller should check for valid return.
 * 
*/ l_ok numaDifferentiateInterval(NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady) { l_int32 i, nx, ny; l_float32 minx, maxx, der, invdel; l_float32 *fay; NUMA *nady, *naiy; if (pnadx) *pnadx = NULL; if (!pnady) return ERROR_INT("&nady not defined", __func__, 1); *pnady = NULL; if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (!nax) return ERROR_INT("nax not defined", __func__, 1); if (x0 > x1) return ERROR_INT("x0 > x1", __func__, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", __func__, 1); if (ny < 2) return ERROR_INT("not enough points", __func__, 1); numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", __func__, 1); if (npts < 2) return ERROR_INT("npts < 2", __func__, 1); /* Generate interpolated array over specified interval */ if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, npts, pnadx, &naiy)) return ERROR_INT("interpolation failed", __func__, 1); nady = numaCreate(npts); *pnady = nady; invdel = 0.5f * ((l_float32)npts - 1.0f) / (x1 - x0); fay = numaGetFArray(naiy, L_NOCOPY); /* Compute and save derivatives */ der = 0.5f * invdel * (fay[1] - fay[0]); numaAddNumber(nady, der); for (i = 1; i < npts - 1; i++) { der = invdel * (fay[i + 1] - fay[i - 1]); numaAddNumber(nady, der); } der = 0.5f * invdel * (fay[npts - 1] - fay[npts - 2]); numaAddNumber(nady, der); numaDestroy(&naiy); return 0; } /*! * \brief numaIntegrateInterval() * * \param[in] nax numa of abscissa values * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] x0 start value of interval * \param[in] x1 end value of interval * \param[in] npts number of points to evaluate function in interval * \param[out] psum integral of function over interval * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range * *
 * Notes:
 *      (1) The values in nax must be sorted in increasing order.
 *          If they are not sorted, it is done in the interpolation
 *          step, and a warning is issued.
 *      (2) Caller should check for valid return.
 * 
*/ l_ok numaIntegrateInterval(NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, l_float32 *psum) { l_int32 i, nx, ny; l_float32 minx, maxx, sum, del; l_float32 *fay; NUMA *naiy; if (!psum) return ERROR_INT("&sum not defined", __func__, 1); *psum = 0.0; if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (!nax) return ERROR_INT("nax not defined", __func__, 1); if (x0 > x1) return ERROR_INT("x0 > x1", __func__, 1); if (npts < 2) return ERROR_INT("npts < 2", __func__, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", __func__, 1); if (ny < 2) return ERROR_INT("not enough points", __func__, 1); numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", __func__, 1); /* Generate interpolated array over specified interval */ if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, npts, NULL, &naiy)) return ERROR_INT("interpolation failed", __func__, 1); del = (x1 - x0) / ((l_float32)npts - 1.0f); fay = numaGetFArray(naiy, L_NOCOPY); /* Compute integral (simple trapezoid) */ sum = 0.5f * (fay[0] + fay[npts - 1]); for (i = 1; i < npts - 1; i++) sum += fay[i]; *psum = del * sum; numaDestroy(&naiy); return 0; } /*----------------------------------------------------------------------* * Sorting * *----------------------------------------------------------------------*/ /*! * \brief numaSortGeneral() * * \param[in] na source numa * \param[out] pnasort [optional] sorted numa * \param[out] pnaindex [optional] index of elements in na associated * with each element of nasort * \param[out] pnainvert [optional] index of elements in nasort associated * with each element of na * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \param[in] sorttype L_SHELL_SORT or L_BIN_SORT * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Sorting can be confusing.  Here's an array of five values with
 *          the results shown for the 3 output arrays.
 *
 *          na      nasort   naindex   nainvert
 *          -----------------------------------
 *          3         9         2         3
 *          4         6         3         2
 *          9         4         1         0
 *          6         3         0         1
 *          1         1         4         4
 *
 *          Note that naindex is a LUT into na for the sorted array values,
 *          and nainvert directly gives the sorted index values for the
 *          input array.  It is useful to view naindex is as a map:
 *                 0  -->  2
 *                 1  -->  3
 *                 2  -->  1
 *                 3  -->  0
 *                 4  -->  4
 *          and nainvert, the inverse of this map:
 *                 0  -->  3
 *                 1  -->  2
 *                 2  -->  0
 *                 3  -->  1
 *                 4  -->  4
 *
 *          We can write these relations symbolically as:
 *              nasort[i] = na[naindex[i]]
 *              na[i] = nasort[nainvert[i]]
 * 
*/ l_ok numaSortGeneral(NUMA *na, NUMA **pnasort, NUMA **pnaindex, NUMA **pnainvert, l_int32 sortorder, l_int32 sorttype) { l_int32 isize; l_float32 size; NUMA *naindex = NULL; if (pnasort) *pnasort = NULL; if (pnaindex) *pnaindex = NULL; if (pnainvert) *pnainvert = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sort order", __func__, 1); if (sorttype != L_SHELL_SORT && sorttype != L_BIN_SORT) return ERROR_INT("invalid sort type", __func__, 1); if (!pnasort && !pnaindex && !pnainvert) return ERROR_INT("nothing to do", __func__, 1); if (sorttype == L_BIN_SORT) { numaGetMax(na, &size, NULL); isize = (l_int32)size; if (isize > MaxInitPtraSize - 1) { L_WARNING("array too large; using shell sort\n", __func__); sorttype = L_SHELL_SORT; } else { naindex = numaGetBinSortIndex(na, sortorder); } } if (sorttype == L_SHELL_SORT) naindex = numaGetSortIndex(na, sortorder); if (pnasort) *pnasort = numaSortByIndex(na, naindex); if (pnainvert) *pnainvert = numaInvertMap(naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return 0; } /*! * \brief numaSortAutoSelect() * * \param[in] nas * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return naout output sorted numa, or NULL on error * *
 * Notes:
 *      (1) This does either a shell sort or a bin sort, depending on
 *          the number of elements in nas and the dynamic range.
 * 
*/ NUMA * numaSortAutoSelect(NUMA *nas, l_int32 sortorder) { l_int32 type; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (numaGetCount(nas) == 0) { L_WARNING("nas is empty; returning copy\n", __func__); return numaCopy(nas); } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", __func__, NULL); type = numaChooseSortType(nas); if (type != L_SHELL_SORT && type != L_BIN_SORT) return (NUMA *)ERROR_PTR("invalid sort type", __func__, NULL); if (type == L_BIN_SORT) return numaBinSort(nas, sortorder); else /* shell sort */ return numaSort(NULL, nas, sortorder); } /*! * \brief numaSortIndexAutoSelect() * * \param[in] nas * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return nad indices of nas, sorted by value in nas, or NULL on error * *
 * Notes:
 *      (1) This does either a shell sort or a bin sort, depending on
 *          the number of elements in nas and the dynamic range.
 * 
*/ NUMA * numaSortIndexAutoSelect(NUMA *nas, l_int32 sortorder) { l_int32 type; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (numaGetCount(nas) == 0) { L_WARNING("nas is empty; returning copy\n", __func__); return numaCopy(nas); } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", __func__, NULL); type = numaChooseSortType(nas); if (type != L_SHELL_SORT && type != L_BIN_SORT) return (NUMA *)ERROR_PTR("invalid sort type", __func__, NULL); if (type == L_BIN_SORT) return numaGetBinSortIndex(nas, sortorder); else /* shell sort */ return numaGetSortIndex(nas, sortorder); } /*! * \brief numaChooseSortType() * * \param[in] nas to be sorted * \return sorttype L_SHELL_SORT or L_BIN_SORT, or UNDEF on error. * *
 * Notes:
 *      (1) This selects either a shell sort or a bin sort, depending on
 *          the number of elements in nas and the dynamic range.
 *      (2) If there are negative values in nas, it selects shell sort.
 * 
*/ l_int32 numaChooseSortType(NUMA *nas) { l_int32 n; l_float32 minval, maxval; if (!nas) return ERROR_INT("nas not defined", __func__, UNDEF); /* If small histogram or negative values; use shell sort */ numaGetMin(nas, &minval, NULL); n = numaGetCount(nas); if (minval < 0.0 || n < 200) return L_SHELL_SORT; /* If large maxval, use shell sort */ numaGetMax(nas, &maxval, NULL); if (maxval > MaxInitPtraSize - 1) return L_SHELL_SORT; /* Otherwise, need to compare nlog(n) with maxval. * The factor of 0.003 was determined by comparing times for * different histogram sizes and maxval. It is very small * because binsort is fast and shell sort gets slow for large n. */ if (n * log((l_float32)n) < 0.003 * maxval) return L_SHELL_SORT; else return L_BIN_SORT; } /*! * \brief numaSort() * * \param[in] naout output numa; can be NULL or equal to nain * \param[in] nain input numa * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return naout output sorted numa, or NULL on error * *
 * Notes:
 *      (1) Set naout = nain for in-place; otherwise, set naout = NULL.
 *      (2) Source: Shell sort, modified from K&R, 2nd edition, p.62.
 *          Slow but simple O(n logn) sort.
 * 
*/ NUMA * numaSort(NUMA *naout, NUMA *nain, l_int32 sortorder) { l_int32 i, n, gap, j; l_float32 tmp; l_float32 *array; if (!nain) return (NUMA *)ERROR_PTR("nain not defined", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", __func__, NULL); /* Make naout if necessary; otherwise do in-place */ if (!naout) naout = numaCopy(nain); else if (nain != naout) return (NUMA *)ERROR_PTR("invalid: not in-place", __func__, NULL); if ((n = numaGetCount(naout)) == 0) { L_WARNING("naout is empty\n", __func__); return naout; } array = naout->array; /* operate directly on the array */ n = numaGetCount(naout); /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && array[j] > array[j + gap]) || (sortorder == L_SORT_DECREASING && array[j] < array[j + gap])) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; } } } } return naout; } /*! * \brief numaBinSort() * * \param[in] nas of non-negative integers with a max that can * not exceed (MaxInitPtraSize - 1) * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return na sorted, or NULL on error * *
 * Notes:
 *      (1) Because this uses a bin sort with buckets of size 1, it
 *          is not appropriate for sorting either small arrays or
 *          arrays containing very large integer values.  For such
 *          arrays, use a standard general sort function like
 *          numaSort().
 *      (2) You can use numaSortAutoSelect() to decide which sorting
 *          method to use.
 * 
*/ NUMA * numaBinSort(NUMA *nas, l_int32 sortorder) { NUMA *nat, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (numaGetCount(nas) == 0) { L_WARNING("nas is empty; returning copy\n", __func__); return numaCopy(nas); } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", __func__, NULL); if ((nat = numaGetBinSortIndex(nas, sortorder)) == NULL) return (NUMA *)ERROR_PTR("bin sort failed", __func__, NULL); nad = numaSortByIndex(nas, nat); numaDestroy(&nat); return nad; } /*! * \brief numaGetSortIndex() * * \param[in] na source numa * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return na giving an array of indices that would sort * the input array, or NULL on error */ NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder) { l_int32 i, n, gap, j; l_float32 tmp; l_float32 *array; /* copy of input array */ l_float32 *iarray; /* array of indices */ NUMA *naisort; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); if (numaGetCount(na) == 0) { L_WARNING("na is empty\n", __func__); return numaCreate(1); } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sortorder", __func__, NULL); n = numaGetCount(na); if ((array = numaGetFArray(na, L_COPY)) == NULL) return (NUMA *)ERROR_PTR("array not made", __func__, NULL); if ((iarray = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) { LEPT_FREE(array); return (NUMA *)ERROR_PTR("iarray not made", __func__, NULL); } for (i = 0; i < n; i++) iarray[i] = i; /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && array[j] > array[j + gap]) || (sortorder == L_SORT_DECREASING && array[j] < array[j + gap])) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; tmp = iarray[j]; iarray[j] = iarray[j + gap]; iarray[j + gap] = tmp; } } } } naisort = numaCreate(n); for (i = 0; i < n; i++) numaAddNumber(naisort, iarray[i]); LEPT_FREE(array); LEPT_FREE(iarray); return naisort; } /*! * \brief numaGetBinSortIndex() * * \param[in] nas of non-negative integers with a max that can * not exceed (MaxInitPtraSize - 1) * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return na sorted, or NULL on error * *
 * Notes:
 *      (1) This creates an array (or lookup table) that contains
 *          the sorted position of the elements in the input Numa.
 *      (2) Because it uses a bin sort with buckets of size 1, it
 *          is not appropriate for sorting either small arrays or
 *          arrays containing very large integer values.  For such
 *          arrays, use a standard general sort function like
 *          numaGetSortIndex().
 *      (3) You can use numaSortIndexAutoSelect() to decide which
 *          sorting method to use.
 * 
*/ NUMA * numaGetBinSortIndex(NUMA *nas, l_int32 sortorder) { l_int32 i, n, isize, ival, imax; l_float32 minsize, size; NUMA *na, *nai, *nad; L_PTRA *paindex; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (numaGetCount(nas) == 0) { L_WARNING("nas is empty\n", __func__); return numaCreate(1); } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", __func__, NULL); numaGetMin(nas, &minsize, NULL); if (minsize < 0) return (NUMA *)ERROR_PTR("nas has negative numbers", __func__, NULL); numaGetMax(nas, &size, NULL); isize = (l_int32)size; if (isize > MaxInitPtraSize - 1) { L_ERROR("array too large: %d elements > max size = %d\n", __func__, isize, MaxInitPtraSize - 1); return NULL; } /* Set up a ptra holding numa at indices for which there * are values in nas. Suppose nas has the value 230 at index * 7355. A numa holding the index 7355 is created and stored * at the ptra index 230. If there is another value of 230 * in nas, its index is added to the same numa (at index 230 * in the ptra). When finished, the ptra can be scanned for numa, * and the original indices in the nas can be read out. In this * way, the ptra effectively sorts the input numbers in the nas. */ paindex = ptraCreate(isize + 1); n = numaGetCount(nas); for (i = 0; i < n; i++) { numaGetIValue(nas, i, &ival); nai = (NUMA *)ptraGetPtrToItem(paindex, ival); if (!nai) { /* make it; no shifting will occur */ nai = numaCreate(1); ptraInsert(paindex, ival, nai, L_MIN_DOWNSHIFT); } numaAddNumber(nai, i); } /* Sort by scanning the ptra, extracting numas and pulling * the (index into nas) numbers out of each numa, taken * successively in requested order. */ ptraGetMaxIndex(paindex, &imax); nad = numaCreate(0); if (sortorder == L_SORT_INCREASING) { for (i = 0; i <= imax; i++) { na = (NUMA *)ptraRemove(paindex, i, L_NO_COMPACTION); if (!na) continue; numaJoin(nad, na, 0, -1); numaDestroy(&na); } } else { /* L_SORT_DECREASING */ for (i = imax; i >= 0; i--) { na = (NUMA *)ptraRemoveLast(paindex); if (!na) break; /* they've all been removed */ numaJoin(nad, na, 0, -1); numaDestroy(&na); } } ptraDestroy(&paindex, FALSE, FALSE); return nad; } /*! * \brief numaSortByIndex() * * \param[in] nas * \param[in] naindex na that maps from the new numa to the input numa * \return nad sorted, or NULL on error */ NUMA * numaSortByIndex(NUMA *nas, NUMA *naindex) { l_int32 i, n, ni, index; l_float32 val; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (!naindex) return (NUMA *)ERROR_PTR("naindex not defined", __func__, NULL); n = numaGetCount(nas); ni = numaGetCount(naindex); if (n != ni) return (NUMA *)ERROR_PTR("numa sizes differ", __func__, NULL); if (n == 0) { L_WARNING("nas is empty\n", __func__); return numaCopy(nas); } nad = numaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); numaGetFValue(nas, index, &val); numaAddNumber(nad, val); } return nad; } /*! * \brief numaIsSorted() * * \param[in] nas * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \param[out] psorted 1 if sorted; 0 if not * \return 1 if OK; 0 on error * *
 * Notes:
 *      (1) This is a quick O(n) test if nas is sorted.  It is useful
 *          in situations where the array is likely to be already
 *          sorted, and a sort operation can be avoided.
 * 
*/ l_int32 numaIsSorted(NUMA *nas, l_int32 sortorder, l_int32 *psorted) { l_int32 i, n; l_float32 prevval, val; if (!psorted) return ERROR_INT("&sorted not defined", __func__, 1); *psorted = FALSE; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if ((n = numaGetCount(nas))== 0) { L_WARNING("nas is empty\n", __func__); *psorted = TRUE; return 0; } if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sortorder", __func__, 1); n = numaGetCount(nas); numaGetFValue(nas, 0, &prevval); for (i = 1; i < n; i++) { numaGetFValue(nas, i, &val); if ((sortorder == L_SORT_INCREASING && val < prevval) || (sortorder == L_SORT_DECREASING && val > prevval)) return 0; } *psorted = TRUE; return 0; } /*! * \brief numaSortPair() * * \param[in] nax, nay input arrays * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \param[out] pnasx sorted * \param[out] pnasy sorted exactly in order of nasx * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function sorts the two input arrays, nax and nay,
 *          together, using nax as the key for sorting.
 * 
*/ l_ok numaSortPair(NUMA *nax, NUMA *nay, l_int32 sortorder, NUMA **pnasx, NUMA **pnasy) { l_int32 sorted; NUMA *naindex; if (pnasx) *pnasx = NULL; if (pnasy) *pnasy = NULL; if (!pnasx || !pnasy) return ERROR_INT("&nasx and/or &nasy not defined", __func__, 1); if (!nax) return ERROR_INT("nax not defined", __func__, 1); if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sortorder", __func__, 1); numaIsSorted(nax, sortorder, &sorted); if (sorted == TRUE) { *pnasx = numaCopy(nax); *pnasy = numaCopy(nay); } else { naindex = numaGetSortIndex(nax, sortorder); *pnasx = numaSortByIndex(nax, naindex); *pnasy = numaSortByIndex(nay, naindex); numaDestroy(&naindex); } return 0; } /*! * \brief numaInvertMap() * * \param[in] nas * \return nad the inverted map, or NULL on error or if not invertible * *
 * Notes:
 *      (1) This requires that nas contain each integer from 0 to n-1.
 *          The array is typically an index array into a sort or permutation
 *          of another array.
 * 
*/ NUMA * numaInvertMap(NUMA *nas) { l_int32 i, n, val, error; l_int32 *test; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) == 0) { L_WARNING("nas is empty\n", __func__); return numaCopy(nas); } nad = numaMakeConstant(0.0, n); test = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); error = 0; for (i = 0; i < n; i++) { numaGetIValue(nas, i, &val); if (val >= n) { error = 1; break; } numaReplaceNumber(nad, val, i); if (test[val] == 0) { test[val] = 1; } else { error = 1; break; } } LEPT_FREE(test); if (error) { numaDestroy(&nad); return (NUMA *)ERROR_PTR("nas not invertible", __func__, NULL); } return nad; } /*! * \brief numaAddSorted() * * \param[in] na sorted input * \param[in] val value to be inserted in sorted order * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input %na is sorted.  This function determines the
 *          sort order of %na and inserts %val into the array.
 * 
*/ l_ok numaAddSorted(NUMA *na, l_float32 val) { l_int32 index; if (!na) return ERROR_INT("na not defined", __func__, 1); if (numaFindSortedLoc(na, val, &index) == 1) return ERROR_INT("insert failure", __func__, 1); numaInsertNumber(na, index, val); return 0; } /*! * \brief numaFindSortedLoc() * * \param[in] na sorted input * \param[in] val value to be inserted in sorted order * \param[out] *ploc index location to insert @val * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input %na is sorted.  This determines the sort order of @na,
 *          either increasing or decreasing, and does a binary search for the
 *          location to insert %val into the array.  The search is O(log n).
 *      (2) The index returned is the location to insert into the array.
 *          The value at the index, and all values to the right, are
 *          moved to the right (increasing their index location by 1).
 *      (3) If n is the size of %na, *ploc can be anything in [0 ... n].
 *          if *ploc == 0, the value is inserted at the beginning of the
 *          array; if *ploc == n, it is inserted at the end.
 *      (4) If the size of %na is 1, insert with an increasing sort.
 * 
*/ l_ok numaFindSortedLoc(NUMA *na, l_float32 val, l_int32 *pindex) { l_int32 n, increasing, lindex, rindex, midindex; l_float32 val0, valn, valmid; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (n == 0) return 0; numaGetFValue(na, 0, &val0); if (n == 1) { /* use increasing sort order */ if (val >= val0) *pindex = 1; return 0; } /* ----------------- n >= 2 ----------------- */ numaGetFValue(na, n - 1, &valn); increasing = (valn >= val0) ? 1 : 0; /* sort order */ /* Check if outside bounds of existing array */ if (increasing) { if (val < val0) { *pindex = 0; return 0; } else if (val > valn) { *pindex = n; return 0; } } else { /* decreasing */ if (val > val0) { *pindex = 0; return 0; } else if (val < valn) { *pindex = n; return 0; } } /* Within bounds of existing array; search */ lindex = 0; rindex = n - 1; while (1) { midindex = (lindex + rindex) / 2; if (midindex == lindex || midindex == rindex) break; numaGetFValue(na, midindex, &valmid); if (increasing) { if (val > valmid) lindex = midindex; else rindex = midindex; } else { /* decreasing */ if (val > valmid) rindex = midindex; else lindex = midindex; } } *pindex = rindex; return 0; } /*----------------------------------------------------------------------* * Random permutation * *----------------------------------------------------------------------*/ /*! * \brief numaPseudorandomSequence() * * \param[in] size of sequence * \param[in] seed for random number generation * \return na pseudorandom on [0,...,size - 1], or NULL on error * *
 * Notes:
 *      (1) This uses the Durstenfeld shuffle.
 *          See: http://en.wikipedia.org/wiki/Fisher–Yates_shuffle.
 *          Result is a pseudorandom permutation of the sequence of integers
 *          from 0 to size - 1.
 * 
*/ NUMA * numaPseudorandomSequence(l_int32 size, l_int32 seed) { l_int32 i, index, temp; l_int32 *array; NUMA *na; if (size <= 0) return (NUMA *)ERROR_PTR("size <= 0", __func__, NULL); if ((array = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) return (NUMA *)ERROR_PTR("array not made", __func__, NULL); for (i = 0; i < size; i++) array[i] = i; srand(seed); for (i = size - 1; i > 0; i--) { index = (l_int32)((i + 1) * ((l_float64)rand() / (l_float64)RAND_MAX)); index = L_MIN(index, i); temp = array[i]; array[i] = array[index]; array[index] = temp; } na = numaCreateFromIArray(array, size); LEPT_FREE(array); return na; } /*! * \brief numaRandomPermutation() * * \param[in] nas input array * \param[in] seed for random number generation * \return nas randomly shuffled array, or NULL on error */ NUMA * numaRandomPermutation(NUMA *nas, l_int32 seed) { l_int32 i, index, size; l_float32 val; NUMA *naindex, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((size = numaGetCount(nas)) == 0) { L_WARNING("nas is empty\n", __func__); return numaCopy(nas); } naindex = numaPseudorandomSequence(size, seed); nad = numaCreate(size); for (i = 0; i < size; i++) { numaGetIValue(naindex, i, &index); numaGetFValue(nas, index, &val); numaAddNumber(nad, val); } numaDestroy(&naindex); return nad; } /*----------------------------------------------------------------------* * Functions requiring sorting * *----------------------------------------------------------------------*/ /*! * \brief numaGetRankValue() * * \param[in] na source numa * \param[in] fract use 0.0 for smallest, 1.0 for largest * \param[in] nasort [optional] increasing sorted version of na * \param[in] usebins 0 for general sort; 1 for bin sort * \param[out] pval rank val * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Computes the rank value of a number in the %na, which is
 *          the number that is a fraction %fract from the small
 *          end of the sorted version of %na.
 *      (2) If you do this multiple times for different rank values,
 *          sort the array in advance and use that for %nasort;
 *          if you're only calling this once, input %nasort == NULL.
 *      (3) If %usebins == 1, this uses a bin sorting method.
 *          Use this only where:
 *           * the numbers are non-negative integers
 *           * there are over 100 numbers
 *           * the maximum value is less than about 50,000
 *      (4) The advantage of using a bin sort is that it is O(n),
 *          instead of O(nlogn) for general sort routines.
 * 
*/ l_ok numaGetRankValue(NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval) { l_int32 n, index; NUMA *nas; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na empty", __func__, 1); if (fract < 0.0 || fract > 1.0) return ERROR_INT("fract not in [0.0 ... 1.0]", __func__, 1); if (nasort) { nas = nasort; } else { if (usebins == 0) nas = numaSort(NULL, na, L_SORT_INCREASING); else nas = numaBinSort(na, L_SORT_INCREASING); if (!nas) return ERROR_INT("nas not made", __func__, 1); } index = (l_int32)(fract * (l_float32)(n - 1) + 0.5); numaGetFValue(nas, index, pval); if (!nasort) numaDestroy(&nas); return 0; } /*! * \brief numaGetMedian() * * \param[in] na source numa * \param[out] pval median value * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Computes the median value of the numbers in the numa, by
 *          sorting and finding the middle value in the sorted array.
 * 
*/ l_ok numaGetMedian(NUMA *na, l_float32 *pval) { if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; /* init */ if (!na || numaGetCount(na) == 0) return ERROR_INT("na not defined or empty", __func__, 1); return numaGetRankValue(na, 0.5, NULL, 0, pval); } /*! * \brief numaGetBinnedMedian() * * \param[in] na source numa * \param[out] pval integer median value * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Computes the median value of the numbers in the numa,
 *          using bin sort and finding the middle value in the sorted array.
 *      (2) See numaGetRankValue() for conditions on na for which
 *          this should be used.  Otherwise, use numaGetMedian().
 * 
*/ l_ok numaGetBinnedMedian(NUMA *na, l_int32 *pval) { l_int32 ret; l_float32 fval; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; /* init */ if (!na || numaGetCount(na) == 0) return ERROR_INT("na not defined or empty", __func__, 1); ret = numaGetRankValue(na, 0.5, NULL, 1, &fval); *pval = lept_roundftoi(fval); return ret; } /*! * \brief numaGetMeanDevFromMedian() * * \param[in] na source numa * \param[in] med median value * \param[out] pdev average absolute value deviation from median value * \return 0 if OK; 1 on error */ l_ok numaGetMeanDevFromMedian(NUMA *na, l_float32 med, l_float32 *pdev) { l_int32 i, n; l_float32 val, dev; if (!pdev) return ERROR_INT("&dev not defined", __func__, 1); *pdev = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); dev = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); dev += L_ABS(val - med); } *pdev = dev / (l_float32)n; return 0; } /*! * \brief numaGetMedianDevFromMedian() * * \param[in] na source numa * \param[out] pmed [optional] median value * \param[out] pdev median deviation from median val * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Finds the median of the absolute value of the deviation from
 *          the median value in the array.  Why take the absolute value?
 *          Consider the case where you have values equally distributed
 *          about both sides of a median value.  Without taking the absolute
 *          value of the differences, you will get 0 for the deviation,
 *          and this is not useful.
 * 
*/ l_ok numaGetMedianDevFromMedian(NUMA *na, l_float32 *pmed, l_float32 *pdev) { l_int32 n, i; l_float32 val, med; NUMA *nadev; if (pmed) *pmed = 0.0; if (!pdev) return ERROR_INT("&dev not defined", __func__, 1); *pdev = 0.0; if (!na || numaGetCount(na) == 0) return ERROR_INT("na not defined or empty", __func__, 1); numaGetMedian(na, &med); if (pmed) *pmed = med; n = numaGetCount(na); nadev = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); numaAddNumber(nadev, L_ABS(val - med)); } numaGetMedian(nadev, pdev); numaDestroy(&nadev); return 0; } /*! * \brief numaGetMode() * * \param[in] na source numa * \param[out] pval mode val * \param[out] pcount [optional] mode count * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Computes the mode value of the numbers in the numa, by
 *          sorting and finding the value of the number with the
 *          largest count.
 *      (2) Optionally, also returns that count.
 * 
*/ l_ok numaGetMode(NUMA *na, l_float32 *pval, l_int32 *pcount) { l_int32 i, n, maxcount, prevcount; l_float32 val, maxval, prevval; l_float32 *array; NUMA *nasort; if (pcount) *pcount = 0; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); if ((nasort = numaSort(NULL, na, L_SORT_DECREASING)) == NULL) return ERROR_INT("nas not made", __func__, 1); array = numaGetFArray(nasort, L_NOCOPY); /* Initialize with array[0] */ prevval = array[0]; prevcount = 1; maxval = prevval; maxcount = prevcount; /* Scan the sorted array, aggregating duplicates */ for (i = 1; i < n; i++) { val = array[i]; if (val == prevval) { prevcount++; } else { /* new value */ if (prevcount > maxcount) { /* new max */ maxcount = prevcount; maxval = prevval; } prevval = val; prevcount = 1; } } /* Was the mode the last run of elements? */ if (prevcount > maxcount) { maxcount = prevcount; maxval = prevval; } *pval = maxval; if (pcount) *pcount = maxcount; numaDestroy(&nasort); return 0; } /*----------------------------------------------------------------------* * Rearrangements * *----------------------------------------------------------------------*/ /*! * \brief numaJoin() * * \param[in] nad dest numa; add to this one * \param[in] nas [optional] source numa; add from this one * \param[in] istart starting index in nas * \param[in] iend ending index in nas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (2) iend < 0 means 'read to the end'
 *      (3) if nas == NULL, this is a no-op
 * 
*/ l_ok numaJoin(NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend) { l_int32 n, i; l_float32 val; if (!nad) return ERROR_INT("nad not defined", __func__, 1); if (!nas) return 0; if (istart < 0) istart = 0; n = numaGetCount(nas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } return 0; } /*! * \brief numaaJoin() * * \param[in] naad dest naa; add to this one * \param[in] naas [optional] source naa; add from this one * \param[in] istart starting index in nas * \param[in] iend ending index in naas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (2) iend < 0 means 'read to the end'
 *      (3) if naas == NULL, this is a no-op
 * 
*/ l_ok numaaJoin(NUMAA *naad, NUMAA *naas, l_int32 istart, l_int32 iend) { l_int32 n, i; NUMA *na; if (!naad) return ERROR_INT("naad not defined", __func__, 1); if (!naas) return 0; if (istart < 0) istart = 0; n = numaaGetCount(naas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { na = numaaGetNuma(naas, i, L_CLONE); numaaAddNuma(naad, na, L_INSERT); } return 0; } /*! * \brief numaaFlattenToNuma() * * \param[in] naa * \return numa, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the Numaa to a Numa, by joining successively
 *          each Numa in the Numaa.
 *      (2) It doesn't make any assumptions about the location of the
 *          Numas in the Numaa array, unlike most Numaa functions.
 *      (3) It leaves the input Numaa unchanged.
 * 
*/ NUMA * numaaFlattenToNuma(NUMAA *naa) { l_int32 i, nalloc; NUMA *na, *nad; NUMA **array; if (!naa) return (NUMA *)ERROR_PTR("naa not defined", __func__, NULL); nalloc = naa->nalloc; array = numaaGetPtrArray(naa); nad = numaCreate(0); for (i = 0; i < nalloc; i++) { na = array[i]; if (!na) continue; numaJoin(nad, na, 0, -1); } return nad; } leptonica-1.86.0/src/numafunc2.c000066400000000000000000003275241506303110300164220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file numafunc2.c *
 *
 *      --------------------------------------
 *      This file has these Numa utilities:
 *         - morphological operations
 *         - arithmetic transforms
 *         - windowed statistical operations
 *         - histogram extraction
 *         - histogram comparison
 *         - extrema finding
 *         - frequency and crossing analysis
 *      --------------------------------------

 *      Morphological (min/max) operations
 *          NUMA        *numaErode()
 *          NUMA        *numaDilate()
 *          NUMA        *numaOpen()
 *          NUMA        *numaClose()
 *
 *      Other transforms
 *          NUMA        *numaTransform()
 *          l_int32      numaSimpleStats()
 *          l_int32      numaWindowedStats()
 *          NUMA        *numaWindowedMean()
 *          NUMA        *numaWindowedMeanSquare()
 *          l_int32      numaWindowedVariance()
 *          NUMA        *numaWindowedMedian()
 *          NUMA        *numaConvertToInt()
 *
 *      Histogram generation and statistics
 *          NUMA        *numaMakeHistogram()
 *          NUMA        *numaMakeHistogramAuto()
 *          NUMA        *numaMakeHistogramClipped()
 *          NUMA        *numaRebinHistogram()
 *          NUMA        *numaNormalizeHistogram()
 *          l_int32      numaGetStatsUsingHistogram()
 *          l_int32      numaGetHistogramStats()
 *          l_int32      numaGetHistogramStatsOnInterval()
 *          l_int32      numaMakeRankFromHistogram()
 *          l_int32      numaHistogramGetRankFromVal()
 *          l_int32      numaHistogramGetValFromRank()
 *          l_int32      numaDiscretizeSortedInBins()
 *          l_int32      numaDiscretizeHistoInBins()
 *          l_int32      numaGetRankBinValues()
 *          NUMA        *numaGetUniformBinSizes()
 *
 *      Splitting a distribution
 *          l_int32      numaSplitDistribution()
 *
 *      Comparing histograms
 *          l_int32      grayHistogramsToEMD()
 *          l_int32      numaEarthMoverDistance()
 *          l_int32      grayInterHistogramStats()
 *
 *      Extrema finding
 *          NUMA        *numaFindPeaks()
 *          NUMA        *numaFindExtrema()
 *          NUMA        *numaFindLocForThreshold()
 *          l_int32     *numaCountReversals()
 *
 *      Threshold crossings and frequency analysis
 *          l_int32      numaSelectCrossingThreshold()
 *          NUMA        *numaCrossingsByThreshold()
 *          NUMA        *numaCrossingsByPeaks()
 *          NUMA        *numaEvalBestHaarParameters()
 *          l_int32      numaEvalHaarSum()
 *
 *      Generating numbers in a range under constraints
 *          NUMA        *genConstrainedNumaInRange()
 *
 *    Things to remember when using the Numa:
 *
 *    (1) The numa is a struct, not an array.  Always use accessors
 *        (see numabasic.c), never the fields directly.
 *
 *    (2) The number array holds l_float32 values.  It can also
 *        be used to store l_int32 values.  See numabasic.c for
 *        details on using the accessors.  Integers larger than
 *        about 10M will lose accuracy due on retrieval due to round-off.
 *        For large integers, use the dna (array of l_float64) instead.
 *
 *    (3) Occasionally, in the comments we denote the i-th element of a
 *        numa by na[i].  This is conceptual only -- the numa is not an array!
 *
 *    Some general comments on histograms:
 *
 *    (1) Histograms are the generic statistical representation of
 *        the data about some attribute.  Typically they're not
 *        normalized -- they simply give the number of occurrences
 *        within each range of values of the attribute.  This range
 *        of values is referred to as a 'bucket'.  For example,
 *        the histogram could specify how many connected components
 *        are found for each value of their width; in that case,
 *        the bucket size is 1.
 *
 *    (2) In leptonica, all buckets have the same size.  Histograms
 *        are therefore specified by a numa of occurrences, along
 *        with two other numbers: the 'value' associated with the
 *        occupants of the first bucket and the size (i.e., 'width')
 *        of each bucket.  These two numbers then allow us to calculate
 *        the value associated with the occupants of each bucket.
 *        These numbers are fields in the numa, initialized to
 *        a startx value of 0.0 and a binsize of 1.0.  Accessors for
 *        these fields are functions numa*Parameters().  All histograms
 *        must have these two numbers properly set.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* bin sizes in numaMakeHistogram() */ static const l_int32 BinSizeArray[] = {2, 5, 10, 20, 50, 100, 200, 500, 1000,\ 2000, 5000, 10000, 20000, 50000, 100000, 200000,\ 500000, 1000000, 2000000, 5000000, 10000000,\ 200000000, 50000000, 100000000}; static const l_int32 NBinSizes = 24; #ifndef NO_CONSOLE_IO #define DEBUG_HISTO 0 #define DEBUG_CROSSINGS 0 #define DEBUG_FREQUENCY 0 #endif /* ~NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Morphological operations * *----------------------------------------------------------------------*/ /*! * \brief numaErode() * * \param[in] nas * \param[in] size of sel; greater than 0, odd. The origin * is implicitly in the center. * \return nad eroded, or NULL on error * *
 * Notes:
 *      (1) The structuring element (sel) is linear, all "hits"
 *      (2) If size == 1, this returns a copy
 *      (3) General comment.  The morphological operations are equivalent
 *          to those that would be performed on a 1-dimensional fpix.
 *          However, because we have not implemented morphological
 *          operations on fpix, we do this here.  Because it is only
 *          1 dimensional, there is no reason to use the more
 *          complicated van Herk/Gil-Werman algorithm, and we do it
 *          by brute force.
 * 
*/ NUMA * numaErode(NUMA *nas, l_int32 size) { l_int32 i, j, n, hsize, len; l_float32 minval; l_float32 *fa, *fas, *fad; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", __func__); size++; } if (size == 1) return numaCopy(nas); /* Make a source fa (fas) that has an added (size / 2) boundary * on left and right, contains a copy of nas in the interior region * (between 'size' and 'size + n', and has large values * inserted in the boundary (because it is an erosion). */ n = numaGetCount(nas); hsize = size / 2; len = n + 2 * hsize; if ((fas = (l_float32 *)LEPT_CALLOC(len, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("fas not made", __func__, NULL); for (i = 0; i < hsize; i++) fas[i] = 1.0e37f; for (i = hsize + n; i < len; i++) fas[i] = 1.0e37f; fa = numaGetFArray(nas, L_NOCOPY); for (i = 0; i < n; i++) fas[hsize + i] = fa[i]; nad = numaMakeConstant(0, n); numaCopyParameters(nad, nas); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) { minval = 1.0e37f; /* start big */ for (j = 0; j < size; j++) minval = L_MIN(minval, fas[i + j]); fad[i] = minval; } LEPT_FREE(fas); return nad; } /*! * \brief numaDilate() * * \param[in] nas * \param[in] size of sel; greater than 0, odd. The origin * is implicitly in the center. * \return nad dilated, or NULL on error * *
 * Notes:
 *      (1) The structuring element (sel) is linear, all "hits"
 *      (2) If size == 1, this returns a copy
 * 
*/ NUMA * numaDilate(NUMA *nas, l_int32 size) { l_int32 i, j, n, hsize, len; l_float32 maxval; l_float32 *fa, *fas, *fad; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", __func__); size++; } if (size == 1) return numaCopy(nas); /* Make a source fa (fas) that has an added (size / 2) boundary * on left and right, contains a copy of nas in the interior region * (between 'size' and 'size + n', and has small values * inserted in the boundary (because it is a dilation). */ n = numaGetCount(nas); hsize = size / 2; len = n + 2 * hsize; if ((fas = (l_float32 *)LEPT_CALLOC(len, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("fas not made", __func__, NULL); for (i = 0; i < hsize; i++) fas[i] = -1.0e37f; for (i = hsize + n; i < len; i++) fas[i] = -1.0e37f; fa = numaGetFArray(nas, L_NOCOPY); for (i = 0; i < n; i++) fas[hsize + i] = fa[i]; nad = numaMakeConstant(0, n); numaCopyParameters(nad, nas); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) { maxval = -1.0e37f; /* start small */ for (j = 0; j < size; j++) maxval = L_MAX(maxval, fas[i + j]); fad[i] = maxval; } LEPT_FREE(fas); return nad; } /*! * \brief numaOpen() * * \param[in] nas * \param[in] size of sel; greater than 0, odd. The origin * is implicitly in the center. * \return nad opened, or NULL on error * *
 * Notes:
 *      (1) The structuring element (sel) is linear, all "hits"
 *      (2) If size == 1, this returns a copy
 * 
*/ NUMA * numaOpen(NUMA *nas, l_int32 size) { NUMA *nat, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", __func__); size++; } if (size == 1) return numaCopy(nas); nat = numaErode(nas, size); nad = numaDilate(nat, size); numaDestroy(&nat); return nad; } /*! * \brief numaClose() * * \param[in] nas * \param[in] size of sel; greater than 0, odd. The origin * is implicitly in the center. * \return nad closed, or NULL on error * *
 * Notes:
 *      (1) The structuring element (sel) is linear, all "hits"
 *      (2) If size == 1, this returns a copy
 *      (3) We add a border before doing this operation, for the same
 *          reason that we add a border to a pix before doing a safe closing.
 *          Without the border, a small component near the border gets
 *          clipped at the border on dilation, and can be entirely removed
 *          by the following erosion, violating the basic extensivity
 *          property of closing.
 * 
*/ NUMA * numaClose(NUMA *nas, l_int32 size) { NUMA *nab, *nat1, *nat2, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", __func__, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", __func__); size++; } if (size == 1) return numaCopy(nas); nab = numaAddBorder(nas, size, size, 0); /* to preserve extensivity */ nat1 = numaDilate(nab, size); nat2 = numaErode(nat1, size); nad = numaRemoveBorder(nat2, size, size); numaDestroy(&nab); numaDestroy(&nat1); numaDestroy(&nat2); return nad; } /*----------------------------------------------------------------------* * Other transforms * *----------------------------------------------------------------------*/ /*! * \brief numaTransform() * * \param[in] nas * \param[in] shift add this to each number * \param[in] scale multiply each number by this * \return nad with all values shifted and scaled, or NULL on error * *
 * Notes:
 *      (1) Each number is shifted before scaling.
 * 
*/ NUMA * numaTransform(NUMA *nas, l_float32 shift, l_float32 scale) { l_int32 i, n; l_float32 val; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); if ((nad = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); numaCopyParameters(nad, nas); for (i = 0; i < n; i++) { numaGetFValue(nas, i, &val); val = scale * (val + shift); numaAddNumber(nad, val); } return nad; } /*! * \brief numaSimpleStats() * * \param[in] na input numa * \param[in] first first element to use * \param[in] last last element to use; -1 to go to the end * \param[out] pmean [optional] mean value * \param[out] pvar [optional] variance * \param[out] prvar [optional] rms deviation from the mean * \return 0 if OK, 1 on error */ l_ok numaSimpleStats(NUMA *na, l_int32 first, l_int32 last, l_float32 *pmean, l_float32 *pvar, l_float32 *prvar) { l_int32 i, n, ni; l_float32 sum, sumsq, val, mean, var; if (pmean) *pmean = 0.0; if (pvar) *pvar = 0.0; if (prvar) *prvar = 0.0; if (!pmean && !pvar && !prvar) return ERROR_INT("nothing requested", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na is empty", __func__, 1); first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return ERROR_INT("invalid first", __func__, 1); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return ERROR_INT("first > last\n", __func__, 1); ni = last - first + 1; sum = sumsq = 0.0; for (i = first; i <= last; i++) { numaGetFValue(na, i, &val); sum += val; sumsq += val * val; } mean = sum / ni; if (pmean) *pmean = mean; if (pvar || prvar) { var = sumsq / ni - mean * mean; if (pvar) *pvar = var; if (prvar) *prvar = sqrtf(var); } return 0; } /*! * \brief numaWindowedStats() * * \param[in] nas input numa * \param[in] wc half width of the window * \param[out] pnam [optional] mean value in window * \param[out] pnams [optional] mean square value in window * \param[out] pnav [optional] variance in window * \param[out] pnarv [optional] rms deviation from the mean * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a high-level convenience function for calculating
 *          any or all of these derived arrays.
 *      (2) These statistical measures over the values in the
 *          rectangular window are:
 *            ~ average value: [x]  (nam)
 *            ~ average squared value: [x*x] (nams)
 *            ~ variance: [(x - [x])*(x - [x])] = [x*x] - [x]*[x]  (nav)
 *            ~ square-root of variance: (narv)
 *          where the brackets [ .. ] indicate that the average value is
 *          to be taken over the window.
 *      (3) Note that the variance is just the mean square difference from
 *          the mean value; and the square root of the variance is the
 *          root mean square difference from the mean, sometimes also
 *          called the 'standard deviation'.
 *      (4) Internally, use mirrored borders to handle values near the
 *          end of each array.
 * 
*/ l_ok numaWindowedStats(NUMA *nas, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv) { NUMA *nam, *nams; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if (2 * wc + 1 > numaGetCount(nas)) L_WARNING("filter wider than input array!\n", __func__); if (!pnav && !pnarv) { if (pnam) *pnam = numaWindowedMean(nas, wc); if (pnams) *pnams = numaWindowedMeanSquare(nas, wc); return 0; } nam = numaWindowedMean(nas, wc); nams = numaWindowedMeanSquare(nas, wc); numaWindowedVariance(nam, nams, pnav, pnarv); if (pnam) *pnam = nam; else numaDestroy(&nam); if (pnams) *pnams = nams; else numaDestroy(&nams); return 0; } /*! * \brief numaWindowedMean() * * \param[in] nas * \param[in] wc half width of the convolution window * \return nad after low-pass filtering, or NULL on error * *
 * Notes:
 *      (1) This is a convolution.  The window has width = 2 * %wc + 1.
 *      (2) We add a mirrored border of size %wc to each end of the array.
 * 
*/ NUMA * numaWindowedMean(NUMA *nas, l_int32 wc) { l_int32 i, n, n1, width; l_float32 sum, norm; l_float32 *fa1, *fad, *suma; NUMA *na1, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); width = 2 * wc + 1; /* filter width */ if (width > n) L_WARNING("filter wider than input array!\n", __func__); na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); n1 = n + 2 * wc; fa1 = numaGetFArray(na1, L_NOCOPY); nad = numaMakeConstant(0, n); fad = numaGetFArray(nad, L_NOCOPY); /* Make sum array; note the indexing */ if ((suma = (l_float32 *)LEPT_CALLOC(n1 + 1, sizeof(l_float32))) == NULL) { numaDestroy(&na1); numaDestroy(&nad); return (NUMA *)ERROR_PTR("suma not made", __func__, NULL); } sum = 0.0; suma[0] = 0.0; for (i = 0; i < n1; i++) { sum += fa1[i]; suma[i + 1] = sum; } norm = 1.f / (2 * wc + 1); for (i = 0; i < n; i++) fad[i] = norm * (suma[width + i] - suma[i]); LEPT_FREE(suma); numaDestroy(&na1); return nad; } /*! * \brief numaWindowedMeanSquare() * * \param[in] nas * \param[in] wc half width of the window * \return nad containing windowed mean square values, or NULL on error * *
 * Notes:
 *      (1) The window has width = 2 * %wc + 1.
 *      (2) We add a mirrored border of size %wc to each end of the array.
 * 
*/ NUMA * numaWindowedMeanSquare(NUMA *nas, l_int32 wc) { l_int32 i, n, n1, width; l_float32 sum, norm; l_float32 *fa1, *fad, *suma; NUMA *na1, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); width = 2 * wc + 1; /* filter width */ if (width > n) L_WARNING("filter wider than input array!\n", __func__); na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); n1 = n + 2 * wc; fa1 = numaGetFArray(na1, L_NOCOPY); nad = numaMakeConstant(0, n); fad = numaGetFArray(nad, L_NOCOPY); /* Make sum array; note the indexing */ if ((suma = (l_float32 *)LEPT_CALLOC(n1 + 1, sizeof(l_float32))) == NULL) { numaDestroy(&na1); numaDestroy(&nad); return (NUMA *)ERROR_PTR("suma not made", __func__, NULL); } sum = 0.0; suma[0] = 0.0; for (i = 0; i < n1; i++) { sum += fa1[i] * fa1[i]; suma[i + 1] = sum; } norm = 1.f / (2 * wc + 1); for (i = 0; i < n; i++) fad[i] = norm * (suma[width + i] - suma[i]); LEPT_FREE(suma); numaDestroy(&na1); return nad; } /*! * \brief numaWindowedVariance() * * \param[in] nam windowed mean values * \param[in] nams windowed mean square values * \param[out] pnav [optional] numa of variance -- the ms deviation * from the mean * \param[out] pnarv [optional] numa of rms deviation from the mean * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The numas of windowed mean and mean square are precomputed,
 *          using numaWindowedMean() and numaWindowedMeanSquare().
 *      (2) Either or both of the variance and square-root of variance
 *          are returned, where the variance is the average over the
 *          window of the mean square difference of the pixel value
 *          from the mean:
 *                [(x - [x])*(x - [x])] = [x*x] - [x]*[x]
 * 
*/ l_ok numaWindowedVariance(NUMA *nam, NUMA *nams, NUMA **pnav, NUMA **pnarv) { l_int32 i, nm, nms; l_float32 var; l_float32 *fam, *fams, *fav = NULL, *farv = NULL; NUMA *nav, *narv; /* variance and square root of variance */ if (pnav) *pnav = NULL; if (pnarv) *pnarv = NULL; if (!pnav && !pnarv) return ERROR_INT("neither &nav nor &narv are defined", __func__, 1); if (!nam) return ERROR_INT("nam not defined", __func__, 1); if (!nams) return ERROR_INT("nams not defined", __func__, 1); nm = numaGetCount(nam); nms = numaGetCount(nams); if (nm != nms) return ERROR_INT("sizes of nam and nams differ", __func__, 1); if (pnav) { nav = numaMakeConstant(0, nm); *pnav = nav; fav = numaGetFArray(nav, L_NOCOPY); } if (pnarv) { narv = numaMakeConstant(0, nm); *pnarv = narv; farv = numaGetFArray(narv, L_NOCOPY); } fam = numaGetFArray(nam, L_NOCOPY); fams = numaGetFArray(nams, L_NOCOPY); for (i = 0; i < nm; i++) { var = fams[i] - fam[i] * fam[i]; if (pnav) fav[i] = var; if (pnarv) farv[i] = sqrtf(var); } return 0; } /*! * \brief numaWindowedMedian() * * \param[in] nas * \param[in] halfwin half width of window over which the median is found * \return nad after windowed median filtering, or NULL on error * *
 * Notes:
 *      (1) The requested window has width = 2 * %halfwin + 1.
 *      (2) If the input nas has less then 3 elements, return a copy.
 *      (3) If the filter is too small (%halfwin <= 0), return a copy.
 *      (4) If the filter is too large, it is reduced in size.
 *      (5) We add a mirrored border of size %halfwin to each end of
 *          the array to simplify the calculation by avoiding end-effects.
 * 
*/ NUMA * numaWindowedMedian(NUMA *nas, l_int32 halfwin) { l_int32 i, n; l_float32 medval; NUMA *na1, *na2, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if ((n = numaGetCount(nas)) < 3) return numaCopy(nas); if (halfwin <= 0) { L_ERROR("filter too small; returning a copy\n", __func__); return numaCopy(nas); } if (halfwin > (n - 1) / 2) { halfwin = (n - 1) / 2; L_INFO("reducing filter to halfwin = %d\n", __func__, halfwin); } /* Add a border to both ends */ na1 = numaAddSpecifiedBorder(nas, halfwin, halfwin, L_MIRRORED_BORDER); /* Get the median value at the center of each window, corresponding * to locations in the input nas. */ nad = numaCreate(n); for (i = 0; i < n; i++) { na2 = numaClipToInterval(na1, i, i + 2 * halfwin); numaGetMedian(na2, &medval); numaAddNumber(nad, medval); numaDestroy(&na2); } numaDestroy(&na1); return nad; } /*! * \brief numaConvertToInt() * * \param[in] nas source numa * \return na with all values rounded to nearest integer, or * NULL on error */ NUMA * numaConvertToInt(NUMA *nas) { l_int32 i, n, ival; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); if ((nad = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); numaCopyParameters(nad, nas); for (i = 0; i < n; i++) { numaGetIValue(nas, i, &ival); numaAddNumber(nad, ival); } return nad; } /*----------------------------------------------------------------------* * Histogram generation and statistics * *----------------------------------------------------------------------*/ /*! * \brief numaMakeHistogram() * * \param[in] na * \param[in] maxbins max number of histogram bins * \param[out] pbinsize [optional] size of histogram bins * \param[out] pbinstart [optional] start val of minimum bin; * input NULL to force start at 0 * \return na consisiting of histogram of integerized values, * or NULL on error. * *
 * Notes:
 *      (1) This simple interface is designed for integer data.
 *          The bins are of integer width and start on integer boundaries,
 *          so the results on float data will not have high precision.
 *      (2) Specify the max number of input bins.   Then %binsize,
 *          the size of bins necessary to accommodate the input data,
 *          is returned.  It is optionally returned and one of the sequence:
 *                {1, 2, 5, 10, 20, 50, ...}.
 *      (3) If &binstart is given, all values are accommodated,
 *          and the min value of the starting bin is returned.
 *          Otherwise, all negative values are discarded and
 *          the histogram bins start at 0.
 * 
*/ NUMA * numaMakeHistogram(NUMA *na, l_int32 maxbins, l_int32 *pbinsize, l_int32 *pbinstart) { l_int32 i, n, ival, hval; l_int32 iminval, imaxval, range, binsize, nbins, ibin; l_float32 val, ratio; NUMA *nai, *nahist; if (pbinsize) *pbinsize = 0; if (pbinstart) *pbinstart = 0; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); if (maxbins < 1) return (NUMA *)ERROR_PTR("maxbins < 1", __func__, NULL); /* Determine input range */ numaGetMin(na, &val, NULL); iminval = (l_int32)(val + 0.5); numaGetMax(na, &val, NULL); imaxval = (l_int32)(val + 0.5); if (pbinstart == NULL) { /* clip negative vals; start from 0 */ iminval = 0; if (imaxval < 0) return (NUMA *)ERROR_PTR("all values < 0", __func__, NULL); } /* Determine binsize */ range = imaxval - iminval + 1; if (range > maxbins - 1) { ratio = (l_float32)range / (l_float32)maxbins; binsize = 0; for (i = 0; i < NBinSizes; i++) { if (ratio < BinSizeArray[i]) { binsize = BinSizeArray[i]; break; } } if (binsize == 0) return (NUMA *)ERROR_PTR("numbers too large", __func__, NULL); } else { binsize = 1; } if (pbinsize) *pbinsize = binsize; nbins = 1 + range / binsize; /* +1 seems to be sufficient */ /* Redetermine iminval */ if (pbinstart && binsize > 1) { if (iminval >= 0) iminval = binsize * (iminval / binsize); else iminval = binsize * ((iminval - binsize + 1) / binsize); } if (pbinstart) *pbinstart = iminval; #if DEBUG_HISTO lept_stderr(" imaxval = %d, range = %d, nbins = %d\n", imaxval, range, nbins); #endif /* DEBUG_HISTO */ /* Use integerized data for input */ if ((nai = numaConvertToInt(na)) == NULL) return (NUMA *)ERROR_PTR("nai not made", __func__, NULL); n = numaGetCount(nai); /* Make histogram, converting value in input array * into a bin number for this histogram array. */ if ((nahist = numaCreate(nbins)) == NULL) { numaDestroy(&nai); return (NUMA *)ERROR_PTR("nahist not made", __func__, NULL); } numaSetCount(nahist, nbins); numaSetParameters(nahist, iminval, binsize); for (i = 0; i < n; i++) { numaGetIValue(nai, i, &ival); ibin = (ival - iminval) / binsize; if (ibin >= 0 && ibin < nbins) { numaGetIValue(nahist, ibin, &hval); numaSetValue(nahist, ibin, hval + 1.0f); } } numaDestroy(&nai); return nahist; } /*! * \brief numaMakeHistogramAuto() * * \param[in] na numa of floats; these may be integers * \param[in] maxbins max number of histogram bins; >= 1 * \return na consisiting of histogram of quantized float values, * or NULL on error. * *
 * Notes:
 *      (1) This simple interface is designed for accurate binning
 *          of both integer and float data.
 *      (2) If the array data is integers, and the range of integers
 *          is smaller than %maxbins, they are binned as they fall,
 *          with binsize = 1.
 *      (3) If the range of data, (maxval - minval), is larger than
 *          %maxbins, or if the data is floats, they are binned into
 *          exactly %maxbins bins.
 *      (4) Unlike numaMakeHistogram(), these bins in general have
 *          non-integer location and width, even for integer data.
 * 
*/ NUMA * numaMakeHistogramAuto(NUMA *na, l_int32 maxbins) { l_int32 i, n, imin, imax, irange, ibin, ival, allints; l_float32 minval, maxval, range, binsize, fval; NUMA *nah; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); maxbins = L_MAX(1, maxbins); /* Determine input range */ numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); /* Determine if values are all integers */ n = numaGetCount(na); numaHasOnlyIntegers(na, &allints); /* Do simple integer binning if possible */ if (allints && (maxval - minval < maxbins)) { imin = (l_int32)minval; imax = (l_int32)maxval; irange = imax - imin + 1; nah = numaCreate(irange); numaSetCount(nah, irange); /* init */ numaSetParameters(nah, minval, 1.0); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); ibin = ival - imin; numaGetIValue(nah, ibin, &ival); numaSetValue(nah, ibin, ival + 1.0f); } return nah; } /* Do float binning, even if the data is integers. */ range = maxval - minval; binsize = range / (l_float32)maxbins; if (range == 0.0) { nah = numaCreate(1); numaSetParameters(nah, minval, binsize); numaAddNumber(nah, n); return nah; } nah = numaCreate(maxbins); numaSetCount(nah, maxbins); numaSetParameters(nah, minval, binsize); for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); ibin = (l_int32)((fval - minval) / binsize); ibin = L_MIN(ibin, maxbins - 1); /* "edge" case; stay in bounds */ numaGetIValue(nah, ibin, &ival); numaSetValue(nah, ibin, ival + 1.0f); } return nah; } /*! * \brief numaMakeHistogramClipped() * * \param[in] na * \param[in] binsize typically 1.0 * \param[in] maxsize of histogram ordinate * \return na histogram of bins of size %binsize, starting with * the na[0] (x = 0.0 and going up to a maximum of * x = %maxsize, by increments of %binsize), or NULL on error * *
 * Notes:
 *      (1) This simple function generates a histogram of values
 *          from na, discarding all values < 0.0 or greater than
 *          min(%maxsize, maxval), where maxval is the maximum value in na.
 *          The histogram data is put in bins of size delx = %binsize,
 *          starting at x = 0.0.  We use as many bins as are
 *          needed to hold the data.
 * 
*/ NUMA * numaMakeHistogramClipped(NUMA *na, l_float32 binsize, l_float32 maxsize) { l_int32 i, n, nbins, ival, ibin; l_float32 val, maxval; NUMA *nad; if (!na) return (NUMA *)ERROR_PTR("na not defined", __func__, NULL); if (binsize <= 0.0) return (NUMA *)ERROR_PTR("binsize must be > 0.0", __func__, NULL); if (binsize > maxsize) binsize = maxsize; /* just one bin */ numaGetMax(na, &maxval, NULL); n = numaGetCount(na); maxsize = L_MIN(maxsize, maxval); nbins = (l_int32)(maxsize / binsize) + 1; /* lept_stderr("maxsize = %7.3f, nbins = %d\n", maxsize, nbins); */ if ((nad = numaCreate(nbins)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); numaSetParameters(nad, 0.0, binsize); numaSetCount(nad, nbins); /* interpret zeroes in bins as data */ for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); ibin = (l_int32)(val / binsize); if (ibin >= 0 && ibin < nbins) { numaGetIValue(nad, ibin, &ival); numaSetValue(nad, ibin, ival + 1.0f); } } return nad; } /*! * \brief numaRebinHistogram() * * \param[in] nas input histogram * \param[in] newsize number of old bins contained in each new bin * \return nad more coarsely re-binned histogram, or NULL on error */ NUMA * numaRebinHistogram(NUMA *nas, l_int32 newsize) { l_int32 i, j, ns, nd, index, count, val; l_float32 start, oldsize; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (newsize <= 1) return (NUMA *)ERROR_PTR("newsize must be > 1", __func__, NULL); if ((ns = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("no bins in nas", __func__, NULL); nd = (ns + newsize - 1) / newsize; if ((nad = numaCreate(nd)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); numaGetParameters(nad, &start, &oldsize); numaSetParameters(nad, start, oldsize * newsize); for (i = 0; i < nd; i++) { /* new bins */ count = 0; index = i * newsize; for (j = 0; j < newsize; j++) { if (index < ns) { numaGetIValue(nas, index, &val); count += val; index++; } } numaAddNumber(nad, count); } return nad; } /*! * \brief numaNormalizeHistogram() * * \param[in] nas input histogram * \param[in] tsum target sum of all numbers in dest histogram; e.g., use * %tsum= 1.0 if this represents a probability distribution * \return nad normalized histogram, or NULL on error */ NUMA * numaNormalizeHistogram(NUMA *nas, l_float32 tsum) { l_int32 i, ns; l_float32 sum, factor, fval; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (tsum <= 0.0) return (NUMA *)ERROR_PTR("tsum must be > 0.0", __func__, NULL); if ((ns = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("no bins in nas", __func__, NULL); numaGetSum(nas, &sum); factor = tsum / sum; if ((nad = numaCreate(ns)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); numaCopyParameters(nad, nas); for (i = 0; i < ns; i++) { numaGetFValue(nas, i, &fval); fval *= factor; numaAddNumber(nad, fval); } return nad; } /*! * \brief numaGetStatsUsingHistogram() * * \param[in] na an arbitrary set of numbers; not ordered and not * a histogram * \param[in] maxbins the maximum number of bins to be allowed in * the histogram; use an integer larger than the * largest number in %na for consecutive integer bins * \param[out] pmin [optional] min value of set * \param[out] pmax [optional] max value of set * \param[out] pmean [optional] mean value of set * \param[out] pvariance [optional] variance * \param[out] pmedian [optional] median value of set * \param[in] rank in [0.0 ... 1.0]; median has a rank 0.5; * ignored if &rval == NULL * \param[out] prval [optional] value in na corresponding to %rank * \param[out] phisto [optional] Numa histogram; use NULL to prevent * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a simple interface for gathering statistics
 *          from a numa, where a histogram is used 'under the covers'
 *          to avoid sorting if a rank value is requested.  In that case,
 *          by using a histogram we are trading speed for accuracy, because
 *          the values in %na are quantized to the center of a set of bins.
 *      (2) If the median, other rank value, or histogram are not requested,
 *          the calculation is all performed on the input Numa.
 *      (3) The variance is the average of the square of the
 *          difference from the mean.  The median is the value in na
 *          with rank 0.5.
 *      (4) There are two situations where this gives rank results with
 *          accuracy comparable to computing stastics directly on the input
 *          data, without binning into a histogram:
 *           (a) the data is integers and the range of data is less than
 *               %maxbins, and
 *           (b) the data is floats and the range is small compared to
 *               %maxbins, so that the binsize is much less than 1.
 *      (5) If a histogram is used and the numbers in the Numa extend
 *          over a large range, you can limit the required storage by
 *          specifying the maximum number of bins in the histogram.
 *          Use %maxbins == 0 to force the bin size to be 1.
 *      (6) This optionally returns the median and one arbitrary rank value.
 *          If you need several rank values, return the histogram and use
 *               numaHistogramGetValFromRank(nah, rank, &rval)
 *          multiple times.
 * 
*/ l_ok numaGetStatsUsingHistogram(NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto) { l_int32 i, n; l_float32 minval, maxval, fval, mean, sum; NUMA *nah; if (pmin) *pmin = 0.0; if (pmax) *pmax = 0.0; if (pmean) *pmean = 0.0; if (pvariance) *pvariance = 0.0; if (pmedian) *pmedian = 0.0; if (prval) *prval = 0.0; if (phisto) *phisto = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("numa is empty", __func__, 1); numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); if (pmin) *pmin = minval; if (pmax) *pmax = maxval; if (pmean || pvariance) { sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); sum += fval; } mean = sum / (l_float32)n; if (pmean) *pmean = mean; } if (pvariance) { sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); sum += fval * fval; } *pvariance = sum / (l_float32)n - mean * mean; } if (!pmedian && !prval && !phisto) return 0; nah = numaMakeHistogramAuto(na, maxbins); if (pmedian) numaHistogramGetValFromRank(nah, 0.5, pmedian); if (prval) numaHistogramGetValFromRank(nah, rank, prval); if (phisto) *phisto = nah; else numaDestroy(&nah); return 0; } /*! * \brief numaGetHistogramStats() * * \param[in] nahisto histogram: y(x(i)), i = 0 ... nbins - 1 * \param[in] startx x value of first bin: x(0) * \param[in] deltax x increment between bins; the bin size; x(1) - x(0) * \param[out] pxmean [optional] mean value of histogram * \param[out] pxmedian [optional] median value of histogram * \param[out] pxmode [optional] mode value of histogram: * xmode = x(imode), where y(xmode) >= y(x(i)) for * all i != imode * \param[out] pxvariance [optional] variance of x * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the histogram represents the relation y(x), the
 *          computed values that are returned are the x values.
 *          These are NOT the bucket indices i; they are related to the
 *          bucket indices by
 *                x(i) = startx + i * deltax
 * 
*/ l_ok numaGetHistogramStats(NUMA *nahisto, l_float32 startx, l_float32 deltax, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance) { if (pxmean) *pxmean = 0.0; if (pxmedian) *pxmedian = 0.0; if (pxmode) *pxmode = 0.0; if (pxvariance) *pxvariance = 0.0; if (!nahisto) return ERROR_INT("nahisto not defined", __func__, 1); return numaGetHistogramStatsOnInterval(nahisto, startx, deltax, 0, -1, pxmean, pxmedian, pxmode, pxvariance); } /*! * \brief numaGetHistogramStatsOnInterval() * * \param[in] nahisto histogram: y(x(i)), i = 0 ... nbins - 1 * \param[in] startx x value of first bin: x(0) * \param[in] deltax x increment between bins; the bin size; x(1) - x(0) * \param[in] ifirst first bin to use for collecting stats * \param[in] ilast last bin for collecting stats; -1 to go to the end * \param[out] pxmean [optional] mean value of histogram * \param[out] pxmedian [optional] median value of histogram * \param[out] pxmode [optional] mode value of histogram: * xmode = x(imode), where y(xmode) >= y(x(i)) for * all i != imode * \param[out] pxvariance [optional] variance of x * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the histogram represents the relation y(x), the
 *          computed values that are returned are the x values.
 *          These are NOT the bucket indices i; they are related to the
 *          bucket indices by
 *                x(i) = startx + i * deltax
 * 
*/ l_ok numaGetHistogramStatsOnInterval(NUMA *nahisto, l_float32 startx, l_float32 deltax, l_int32 ifirst, l_int32 ilast, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance) { l_int32 i, n, imax; l_float32 sum, sumval, halfsum, moment, var, x, y, ymax; if (pxmean) *pxmean = 0.0; if (pxmedian) *pxmedian = 0.0; if (pxmode) *pxmode = 0.0; if (pxvariance) *pxvariance = 0.0; if (!nahisto) return ERROR_INT("nahisto not defined", __func__, 1); if (!pxmean && !pxmedian && !pxmode && !pxvariance) return ERROR_INT("nothing to compute", __func__, 1); n = numaGetCount(nahisto); ifirst = L_MAX(0, ifirst); if (ilast < 0) ilast = n - 1; if (ifirst >= n) return ERROR_INT("invalid ifirst", __func__, 1); if (ilast >= n) { L_WARNING("ilast = %d is beyond max index = %d; adjusting\n", __func__, ilast, n - 1); ilast = n - 1; } if (ifirst > ilast) return ERROR_INT("ifirst > ilast", __func__, 1); for (sum = 0.0, moment = 0.0, var = 0.0, i = ifirst; i <= ilast ; i++) { x = startx + i * deltax; numaGetFValue(nahisto, i, &y); sum += y; moment += x * y; var += x * x * y; } if (sum == 0.0) { L_INFO("sum is 0\n", __func__); return 0; } if (pxmean) *pxmean = moment / sum; if (pxvariance) *pxvariance = var / sum - moment * moment / (sum * sum); if (pxmedian) { halfsum = sum / 2.0f; for (sumval = 0.0, i = ifirst; i <= ilast; i++) { numaGetFValue(nahisto, i, &y); sumval += y; if (sumval >= halfsum) { *pxmedian = startx + i * deltax; break; } } } if (pxmode) { imax = -1; ymax = -1.0e10; for (i = ifirst; i <= ilast; i++) { numaGetFValue(nahisto, i, &y); if (y > ymax) { ymax = y; imax = i; } } *pxmode = startx + imax * deltax; } return 0; } /*! * \brief numaMakeRankFromHistogram() * * \param[in] startx xval corresponding to first element in nay * \param[in] deltax x increment between array elements in nay * \param[in] nasy input histogram, assumed equally spaced * \param[in] npts number of points to evaluate rank function * \param[out] pnax [optional] array of x values in range * \param[out] pnay rank array of specified npts * \return 0 if OK, 1 on error */ l_ok numaMakeRankFromHistogram(l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 npts, NUMA **pnax, NUMA **pnay) { l_int32 i, n; l_float32 sum, fval; NUMA *nan, *nar; if (pnax) *pnax = NULL; if (!pnay) return ERROR_INT("&nay not defined", __func__, 1); *pnay = NULL; if (!nasy) return ERROR_INT("nasy not defined", __func__, 1); if ((n = numaGetCount(nasy)) == 0) return ERROR_INT("no bins in nas", __func__, 1); /* Normalize and generate the rank array corresponding to * the binned histogram. */ nan = numaNormalizeHistogram(nasy, 1.0); nar = numaCreate(n + 1); /* rank numa corresponding to nan */ sum = 0.0; numaAddNumber(nar, sum); /* first element is 0.0 */ for (i = 0; i < n; i++) { numaGetFValue(nan, i, &fval); sum += fval; numaAddNumber(nar, sum); } /* Compute rank array on full range with specified * number of points and correspondence to x-values. */ numaInterpolateEqxInterval(startx, deltax, nar, L_LINEAR_INTERP, startx, startx + n * deltax, npts, pnax, pnay); numaDestroy(&nan); numaDestroy(&nar); return 0; } /*! * \brief numaHistogramGetRankFromVal() * * \param[in] na histogram * \param[in] rval value of input sample for which we want the rank * \param[out] prank fraction of total samples below rval * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If we think of the histogram as a function y(x), normalized
 *          to 1, for a given input value of x, this computes the
 *          rank of x, which is the integral of y(x) from the start
 *          value of x to the input value.
 *      (2) This function only makes sense when applied to a Numa that
 *          is a histogram.  The values in the histogram can be ints and
 *          floats, and are computed as floats.  The rank is returned
 *          as a float between 0.0 and 1.0.
 *      (3) The numa parameters startx and binsize are used to
 *          compute x from the Numa index i.
 * 
*/ l_ok numaHistogramGetRankFromVal(NUMA *na, l_float32 rval, l_float32 *prank) { l_int32 i, ibinval, n; l_float32 startval, binsize, binval, maxval, fractval, total, sum, val; if (!prank) return ERROR_INT("prank not defined", __func__, 1); *prank = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); numaGetParameters(na, &startval, &binsize); n = numaGetCount(na); if (rval < startval) return 0; maxval = startval + n * binsize; if (rval > maxval) { *prank = 1.0; return 0; } binval = (rval - startval) / binsize; ibinval = (l_int32)binval; if (ibinval >= n) { *prank = 1.0; return 0; } fractval = binval - (l_float32)ibinval; sum = 0.0; for (i = 0; i < ibinval; i++) { numaGetFValue(na, i, &val); sum += val; } numaGetFValue(na, ibinval, &val); sum += fractval * val; numaGetSum(na, &total); *prank = sum / total; /* lept_stderr("binval = %7.3f, rank = %7.3f\n", binval, *prank); */ return 0; } /*! * \brief numaHistogramGetValFromRank() * * \param[in] na histogram * \param[in] rank fraction of total samples * \param[out] prval approx. to the bin value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If we think of the histogram as a function y(x), this returns
 *          the value x such that the integral of y(x) from the start
 *          value to x gives the fraction 'rank' of the integral
 *          of y(x) over all bins.
 *      (2) This function only makes sense when applied to a Numa that
 *          is a histogram.  The values in the histogram can be ints and
 *          floats, and are computed as floats.  The val is returned
 *          as a float, even though the buckets are of integer width.
 *      (3) The numa parameters startx and binsize are used to
 *          compute x from the Numa index i.
 * 
*/ l_ok numaHistogramGetValFromRank(NUMA *na, l_float32 rank, l_float32 *prval) { l_int32 i, n; l_float32 startval, binsize, rankcount, total, sum, fract, val; if (!prval) return ERROR_INT("prval not defined", __func__, 1); *prval = 0.0; if (!na) return ERROR_INT("na not defined", __func__, 1); if (rank < 0.0) { L_WARNING("rank < 0; setting to 0.0\n", __func__); rank = 0.0; } if (rank > 1.0) { L_WARNING("rank > 1.0; setting to 1.0\n", __func__); rank = 1.0; } n = numaGetCount(na); numaGetParameters(na, &startval, &binsize); numaGetSum(na, &total); rankcount = rank * total; /* count that corresponds to rank */ sum = 0.0; val = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (sum + val >= rankcount) break; sum += val; } if (val <= 0.0) /* can == 0 if rank == 0.0 */ fract = 0.0; else /* sum + fract * val = rankcount */ fract = (rankcount - sum) / val; /* The use of the fraction of a bin allows a simple calculation * for the histogram value at the given rank. */ *prval = startval + binsize * ((l_float32)i + fract); /* lept_stderr("rank = %7.3f, val = %7.3f\n", rank, *prval); */ return 0; } /*! * \brief numaDiscretizeSortedInBins() * * \param[in] na sorted * \param[in] nbins number of equal population bins (> 1) * \param[out] pnabinval average "gray" values in each bin * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input %na is sorted in increasing value.
 *      (2) The output array has the following mapping:
 *             bin number  -->  average array value in bin (nabinval)
 *      (3) With %nbins == 100, nabinval is the average gray value in
 *          each of the 100 equally populated bins.  It is the function
 *                gray[100 * rank].
 *          Thus it is the inverse of
 *                rank[gray]
 *      (4) Contast with numaDiscretizeHistoInBins(), where the input %na
 *          is a histogram.
 * 
*/ l_ok numaDiscretizeSortedInBins(NUMA *na, l_int32 nbins, NUMA **pnabinval) { NUMA *nabinval; /* average gray value in the bins */ NUMA *naeach; l_int32 i, ntot, bincount, binindex, binsize; l_float32 sum, val, ave; if (!pnabinval) return ERROR_INT("&nabinval not defined", __func__, 1); *pnabinval = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if (nbins < 2) return ERROR_INT("nbins must be > 1", __func__, 1); /* Get the number of items in each bin */ ntot = numaGetCount(na); if ((naeach = numaGetUniformBinSizes(ntot, nbins)) == NULL) return ERROR_INT("naeach not made", __func__, 1); /* Get the average value in each bin */ sum = 0.0; bincount = 0; binindex = 0; numaGetIValue(naeach, 0, &binsize); nabinval = numaCreate(nbins); for (i = 0; i < ntot; i++) { numaGetFValue(na, i, &val); bincount++; sum += val; if (bincount == binsize) { /* add bin entry */ ave = sum / binsize; numaAddNumber(nabinval, ave); sum = 0.0; bincount = 0; binindex++; if (binindex == nbins) break; numaGetIValue(naeach, binindex, &binsize); } } *pnabinval = nabinval; numaDestroy(&naeach); return 0; } /*! * \brief numaDiscretizeHistoInBins() * * \param[in] na histogram * \param[in] nbins number of equal population bins (> 1) * \param[out] pnabinval average "gray" values in each bin * \param[out] pnarank [optional] rank value of input histogram; * this is a cumulative norm histogram. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) With %nbins == 100, nabinval is the average gray value in
 *          each of the 100 equally populated bins.  It is the function
 *                gray[100 * rank].
 *          Thus it is the inverse of
 *                rank[gray]
 *          which is optionally returned in narank.
 *      (2) The "gray value" is the index into the input histogram.
 *      (3) The two output arrays give the following mappings, where the
 *          input is an un-normalized histogram of array values:
 *             bin number  -->  average array value in bin (nabinval)
 *             array values     -->  cumulative normalized histogram (narank)
 * 
*/ l_ok numaDiscretizeHistoInBins(NUMA *na, l_int32 nbins, NUMA **pnabinval, NUMA **pnarank) { NUMA *nabinval; /* average gray value in the bins */ NUMA *naeach, *nan; l_int32 i, j, nxvals, occup, count, bincount, binindex, binsize; l_float32 sum, ave, ntot; if (pnarank) *pnarank = NULL; if (!pnabinval) return ERROR_INT("&nabinval not defined", __func__, 1); *pnabinval = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if (nbins < 2) return ERROR_INT("nbins must be > 1", __func__, 1); nxvals = numaGetCount(na); numaGetSum(na, &ntot); occup = ntot / nxvals; if (occup < 1) L_INFO("average occupancy %d < 1\n", __func__, occup); /* Get the number of items in each bin */ if ((naeach = numaGetUniformBinSizes(ntot, nbins)) == NULL) return ERROR_INT("naeach not made", __func__, 1); /* Get the average value in each bin */ sum = 0.0; bincount = 0; binindex = 0; numaGetIValue(naeach, 0, &binsize); nabinval = numaCreate(nbins); for (i = 0; i < nxvals; i++) { numaGetIValue(na, i, &count); for (j = 0; j < count; j++) { bincount++; sum += i; if (bincount == binsize) { /* add bin entry */ ave = sum / binsize; numaAddNumber(nabinval, ave); sum = 0.0; bincount = 0; binindex++; if (binindex == nbins) break; numaGetIValue(naeach, binindex, &binsize); } } if (binindex == nbins) break; } *pnabinval = nabinval; if (binindex != nbins) L_ERROR("binindex = %d != nbins = %d\n", __func__, binindex, nbins); /* Get cumulative normalized histogram (rank[gray value]). * This is the partial sum operating on the normalized histogram. */ if (pnarank) { nan = numaNormalizeHistogram(na, 1.0); *pnarank = numaGetPartialSums(nan); numaDestroy(&nan); } numaDestroy(&naeach); return 0; } /*! * \brief numaGetRankBinValues() * * \param[in] na an array of values * \param[in] nbins number of bins at which the rank is divided * \param[out] pnam mean intensity in a bin vs rank bin value, * with %nbins of discretized rank values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Simple interface for getting a binned rank representation
 *          of an input array of values.  This returns:
 *             rank bin number -->  average array value in each rank bin (nam)
 *      (2) Uses bins either a sorted array or a histogram, depending on
 *          the values in the array and the size of the array.
 * 
*/ l_ok numaGetRankBinValues(NUMA *na, l_int32 nbins, NUMA **pnam) { NUMA *na1; l_int32 maxbins, type; l_float32 maxval, delx; if (!pnam) return ERROR_INT("&pnam not defined", __func__, 1); *pnam = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); if (numaGetCount(na) == 0) return ERROR_INT("na is empty", __func__, 1); if (nbins < 2) return ERROR_INT("nbins must be > 1", __func__, 1); /* Choose between sorted array and a histogram. * If the input array is has a small number of numbers with * a large maximum, we will sort it. At the other extreme, if * the array has many numbers with a small maximum, such as the * values of pixels in an 8 bpp grayscale image, generate a histogram. * If type comes back as L_BIN_SORT, use a histogram. */ type = numaChooseSortType(na); if (type == L_SHELL_SORT) { /* sort the array */ L_INFO("sort the array: input size = %d\n", __func__, numaGetCount(na)); na1 = numaSort(NULL, na, L_SORT_INCREASING); numaDiscretizeSortedInBins(na1, nbins, pnam); numaDestroy(&na1); return 0; } /* Make the histogram. Assuming there are no negative values * in the array, if the max value in the array does not exceed * about 100000, the bin size for generating the histogram will * be 1; maxbins refers to the number of entries in the histogram. */ L_INFO("use a histogram: input size = %d\n", __func__, numaGetCount(na)); numaGetMax(na, &maxval, NULL); maxbins = L_MIN(100002, (l_int32)maxval + 2); na1 = numaMakeHistogram(na, maxbins, NULL, NULL); /* Warn if there is a scale change. This shouldn't happen * unless the max value is above 100000. */ numaGetParameters(na1, NULL, &delx); if (delx > 1.0) L_WARNING("scale change: delx = %6.2f\n", __func__, delx); /* Rank bin the results */ numaDiscretizeHistoInBins(na1, nbins, pnam, NULL); numaDestroy(&na1); return 0; } /*! * \brief numaGetUniformBinSizes() * * \param[in] ntotal number of values to be split up * \param[in] nbins number of bins * \return naeach number of values to go in each bin, or NULL on error * *
 * Notes:
 *      (1) The numbers in the bins can differ by 1.  The sum of
 *          bin numbers in %naeach is %ntotal.
 * 
*/ NUMA * numaGetUniformBinSizes(l_int32 ntotal, l_int32 nbins) { l_int32 i, start, end; NUMA *naeach; if (ntotal <= 0) return (NUMA *)ERROR_PTR("ntotal <= 0", __func__, NULL); if (nbins <= 0) return (NUMA *)ERROR_PTR("nbins <= 0", __func__, NULL); if ((naeach = numaCreate(nbins)) == NULL) return (NUMA *)ERROR_PTR("naeach not made", __func__, NULL); if (ntotal < nbins) { /* put 1 in each of %ntotal bins */ for (i = 0; i < ntotal; i++) numaAddNumber(naeach, 1); return naeach; } start = 0; for (i = 0; i < nbins; i++) { end = ntotal * (i + 1) / nbins; numaAddNumber(naeach, end - start); start = end; } return naeach; } /*----------------------------------------------------------------------* * Splitting a distribution * *----------------------------------------------------------------------*/ /*! * \brief numaSplitDistribution() * * \param[in] na histogram * \param[in] scorefract fraction of the max score, used to determine * range over which the histogram min is searched * \param[out] psplitindex [optional] index for splitting * \param[out] pave1 [optional] average of lower distribution * \param[out] pave2 [optional] average of upper distribution * \param[out] pnum1 [optional] population of lower distribution * \param[out] pnum2 [optional] population of upper distribution * \param[out] pnascore [optional] for debugging; otherwise use NULL * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function is intended to be used on a distribution of
 *          values that represent two sets, such as a histogram of
 *          pixel values for an image with a fg and bg, and the goal
 *          is to determine the averages of the two sets and the
 *          best splitting point.
 *      (2) The Otsu method finds a split point that divides the distribution
 *          into two parts by maximizing a score function that is the
 *          product of two terms:
 *            (a) the square of the difference of centroids, (ave1 - ave2)^2
 *            (b) fract1 * (1 - fract1)
 *          where fract1 is the fraction in the lower distribution.
 *      (3) This works well for images where the fg and bg are
 *          each relatively homogeneous and well-separated in color.
 *          However, if the actual fg and bg sets are very different
 *          in size, and the bg is highly varied, as can occur in some
 *          scanned document images, this will bias the split point
 *          into the larger "bump" (i.e., toward the point where the
 *          (b) term reaches its maximum of 0.25 at fract1 = 0.5.
 *          To avoid this, we define a range of values near the
 *          maximum of the score function, and choose the value within
 *          this range such that the histogram itself has a minimum value.
 *          The range is determined by scorefract: we include all abscissa
 *          values to the left and right of the value that maximizes the
 *          score, such that the score stays above (1 - scorefract) * maxscore.
 *          The intuition behind this modification is to try to find
 *          a split point that both has a high variance score and is
 *          at or near a minimum in the histogram, so that the histogram
 *          slope is small at the split point.
 *      (4) We normalize the score so that if the two distributions
 *          were of equal size and at opposite ends of the numa, the
 *          score would be 1.0.
 * 
*/ l_ok numaSplitDistribution(NUMA *na, l_float32 scorefract, l_int32 *psplitindex, l_float32 *pave1, l_float32 *pave2, l_float32 *pnum1, l_float32 *pnum2, NUMA **pnascore) { l_int32 i, n, bestsplit, minrange, maxrange, maxindex; l_float32 ave1, ave2, ave1prev, ave2prev; l_float32 num1, num2, num1prev, num2prev; l_float32 val, minval, sum, fract1; l_float32 norm, score, minscore, maxscore; NUMA *nascore, *naave1, *naave2, *nanum1, *nanum2; if (psplitindex) *psplitindex = 0; if (pave1) *pave1 = 0.0; if (pave2) *pave2 = 0.0; if (pnum1) *pnum1 = 0.0; if (pnum2) *pnum2 = 0.0; if (pnascore) *pnascore = NULL; if (!na) return ERROR_INT("na not defined", __func__, 1); n = numaGetCount(na); if (n <= 1) return ERROR_INT("n = 1 in histogram", __func__, 1); numaGetSum(na, &sum); if (sum <= 0.0) return ERROR_INT("sum <= 0.0", __func__, 1); norm = 4.0f / ((l_float32)(n - 1) * (n - 1)); ave1prev = 0.0; numaGetHistogramStats(na, 0.0, 1.0, &ave2prev, NULL, NULL, NULL); num1prev = 0.0; num2prev = sum; maxindex = n / 2; /* initialize with something */ /* Split the histogram with [0 ... i] in the lower part * and [i+1 ... n-1] in upper part. First, compute an otsu * score for each possible splitting. */ if ((nascore = numaCreate(n)) == NULL) return ERROR_INT("nascore not made", __func__, 1); naave1 = (pave1) ? numaCreate(n) : NULL; naave2 = (pave2) ? numaCreate(n) : NULL; nanum1 = (pnum1) ? numaCreate(n) : NULL; nanum2 = (pnum2) ? numaCreate(n) : NULL; maxscore = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); num1 = num1prev + val; if (num1 == 0) ave1 = ave1prev; else ave1 = (num1prev * ave1prev + i * val) / num1; num2 = num2prev - val; if (num2 == 0) ave2 = ave2prev; else ave2 = (num2prev * ave2prev - i * val) / num2; fract1 = num1 / sum; score = norm * (fract1 * (1 - fract1)) * (ave2 - ave1) * (ave2 - ave1); numaAddNumber(nascore, score); if (pave1) numaAddNumber(naave1, ave1); if (pave2) numaAddNumber(naave2, ave2); if (pnum1) numaAddNumber(nanum1, num1); if (pnum2) numaAddNumber(nanum2, num2); if (score > maxscore) { maxscore = score; maxindex = i; } num1prev = num1; num2prev = num2; ave1prev = ave1; ave2prev = ave2; } /* Next, for all contiguous scores within a specified fraction * of the max, choose the split point as the value with the * minimum in the histogram. */ minscore = (1.f - scorefract) * maxscore; for (i = maxindex - 1; i >= 0; i--) { numaGetFValue(nascore, i, &val); if (val < minscore) break; } minrange = i + 1; for (i = maxindex + 1; i < n; i++) { numaGetFValue(nascore, i, &val); if (val < minscore) break; } maxrange = i - 1; numaGetFValue(na, minrange, &minval); bestsplit = minrange; for (i = minrange + 1; i <= maxrange; i++) { numaGetFValue(na, i, &val); if (val < minval) { minval = val; bestsplit = i; } } /* Add one to the bestsplit value to get the threshold value, * because when we take a threshold, as in pixThresholdToBinary(), * we always choose the set with values below the threshold. */ bestsplit = L_MIN(255, bestsplit + 1); if (psplitindex) *psplitindex = bestsplit; if (pave1) numaGetFValue(naave1, bestsplit, pave1); if (pave2) numaGetFValue(naave2, bestsplit, pave2); if (pnum1) numaGetFValue(nanum1, bestsplit, pnum1); if (pnum2) numaGetFValue(nanum2, bestsplit, pnum2); if (pnascore) { /* debug mode */ lept_stderr("minrange = %d, maxrange = %d\n", minrange, maxrange); lept_stderr("minval = %10.0f\n", minval); gplotSimple1(nascore, GPLOT_PNG, "/tmp/lept/nascore", "Score for split distribution"); *pnascore = nascore; } else { numaDestroy(&nascore); } if (pave1) numaDestroy(&naave1); if (pave2) numaDestroy(&naave2); if (pnum1) numaDestroy(&nanum1); if (pnum2) numaDestroy(&nanum2); return 0; } /*----------------------------------------------------------------------* * Comparing histograms * *----------------------------------------------------------------------*/ /*! * \brief grayHistogramsToEMD() * * \param[in] naa1, naa2 two numaa, each with one or more 256-element * histograms * \param[out] pnad nad of EM distances for each histogram * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) The two numaas must be the same size and have corresponding
 *         256-element histograms.  Pairs do not need to be normalized
 *         to the same sum.
 *     (2) This is typically used on two sets of histograms from
 *         corresponding tiles of two images.  The similarity of two
 *         images can be found with the scoring function used in
 *         pixCompareGrayByHisto():
 *             score S = 1.0 - k * D, where
 *                 k is a constant, say in the range 5-10
 *                 D = EMD
 *             for each tile; for multiple tiles, take the Min(S) over
 *             the set of tiles to be the final score.
 * 
*/ l_ok grayHistogramsToEMD(NUMAA *naa1, NUMAA *naa2, NUMA **pnad) { l_int32 i, n, nt; l_float32 dist; NUMA *na1, *na2, *nad; if (!pnad) return ERROR_INT("&nad not defined", __func__, 1); *pnad = NULL; if (!naa1 || !naa2) return ERROR_INT("na1 and na2 not both defined", __func__, 1); n = numaaGetCount(naa1); if (n != numaaGetCount(naa2)) return ERROR_INT("naa1 and naa2 numa counts differ", __func__, 1); nt = numaaGetNumberCount(naa1); if (nt != numaaGetNumberCount(naa2)) return ERROR_INT("naa1 and naa2 number counts differ", __func__, 1); if (256 * n != nt) /* good enough check */ return ERROR_INT("na sizes must be 256", __func__, 1); nad = numaCreate(n); *pnad = nad; for (i = 0; i < n; i++) { na1 = numaaGetNuma(naa1, i, L_CLONE); na2 = numaaGetNuma(naa2, i, L_CLONE); numaEarthMoverDistance(na1, na2, &dist); numaAddNumber(nad, dist / 255.f); /* normalize to [0.0 - 1.0] */ numaDestroy(&na1); numaDestroy(&na2); } return 0; } /*! * \brief numaEarthMoverDistance() * * \param[in] na1, na2 two numas of the same size, typically histograms * \param[out] pdist earthmover distance * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) The two numas must have the same size.  They do not need to be
 *         normalized to the same sum before applying the function.
 *     (2) For a 1D discrete function, the implementation of the EMD
 *         is trivial.  Just keep filling or emptying buckets in one numa
 *         to match the amount in the other, moving sequentially along
 *         both arrays.
 *     (3) We divide the sum of the absolute value of everything moved
 *         (by 1 unit at a time) by the sum of the numa (amount of "earth")
 *         to get the average distance that the "earth" was moved.
 *         This is the value returned here.
 *     (4) The caller can do a further normalization, by the number of
 *         buckets (minus 1), to get the EM distance as a fraction of
 *         the maximum possible distance, which is n-1.  This fraction
 *         is 1.0 for the situation where all the 'earth' in the first
 *         array is at one end, and all in the second array is at the
 *         other end.
 * 
*/ l_ok numaEarthMoverDistance(NUMA *na1, NUMA *na2, l_float32 *pdist) { l_int32 n, norm, i; l_float32 sum1, sum2, diff, total; l_float32 *array1, *array3; NUMA *na3; if (!pdist) return ERROR_INT("&dist not defined", __func__, 1); *pdist = 0.0; if (!na1 || !na2) return ERROR_INT("na1 and na2 not both defined", __func__, 1); n = numaGetCount(na1); if (n != numaGetCount(na2)) return ERROR_INT("na1 and na2 have different size", __func__, 1); /* Generate na3; normalize to na1 if necessary */ numaGetSum(na1, &sum1); numaGetSum(na2, &sum2); norm = (L_ABS(sum1 - sum2) < 0.00001 * L_ABS(sum1)) ? 1 : 0; if (!norm) na3 = numaTransform(na2, 0, sum1 / sum2); else na3 = numaCopy(na2); array1 = numaGetFArray(na1, L_NOCOPY); array3 = numaGetFArray(na3, L_NOCOPY); /* Move earth in n3 from array elements, to match n1 */ total = 0; for (i = 1; i < n; i++) { diff = array1[i - 1] - array3[i - 1]; array3[i] -= diff; total += L_ABS(diff); } *pdist = total / sum1; numaDestroy(&na3); return 0; } /*! * \brief grayInterHistogramStats() * * \param[in] naa numaa with two or more 256-element histograms * \param[in] wc half-width of the smoothing window * \param[out] pnam [optional] mean values * \param[out] pnams [optional] mean square values * \param[out] pnav [optional] variances * \param[out] pnarv [optional] rms deviations from the mean * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) The %naa has two or more 256-element numa histograms, which
 *         are to be compared value-wise at each of the 256 gray levels.
 *         The result are stats (mean, mean square, variance, root variance)
 *         aggregated across the set of histograms, and each is output
 *         as a 256 entry numa.  Think of these histograms as a matrix,
 *         where each histogram is one row of the array.  The stats are
 *         then aggregated column-wise, between the histograms.
 *     (2) These stats are:
 *            ~ average value:   (nam)
 *            ~ average squared value:  (nams)
 *            ~ variance: <(v - )*(v - )> =  - *  (nav)
 *            ~ square-root of variance: (narv)
 *         where the brackets < .. > indicate that the average value is
 *         to be taken over each column of the array.
 *     (3) The input histograms are optionally smoothed before these
 *         statistical operations.
 *     (4) The input histograms are normalized to a sum of 10000.  By
 *         doing this, the resulting numbers are independent of the
 *         number of samples used in building the individual histograms.
 *     (5) A typical application is on a set of histograms from tiles
 *         of an image, to distinguish between text/tables and photo
 *         regions.  If the tiles are much larger than the text line
 *         spacing, text/table regions typically have smaller variance
 *         across tiles than photo regions.  For this application, it
 *         may be useful to ignore values near white, which are large for
 *         text and would magnify the variance due to variations in
 *         illumination.  However, because the variance of a drawing or
 *         a light photo can be similar to that of grayscale text, this
 *         function is only a discriminator between darker photos/drawings
 *         and light photos/text/line-graphics.
 * 
*/ l_ok grayInterHistogramStats(NUMAA *naa, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv) { l_int32 i, j, n, nn; l_float32 **arrays; l_float32 mean, var, rvar; NUMA *na1, *na2, *na3, *na4; if (pnam) *pnam = NULL; if (pnams) *pnams = NULL; if (pnav) *pnav = NULL; if (pnarv) *pnarv = NULL; if (!pnam && !pnams && !pnav && !pnarv) return ERROR_INT("nothing requested", __func__, 1); if (!naa) return ERROR_INT("naa not defined", __func__, 1); n = numaaGetCount(naa); for (i = 0; i < n; i++) { nn = numaaGetNumaCount(naa, i); if (nn != 256) { L_ERROR("%d numbers in numa[%d]\n", __func__, nn, i); return 1; } } if (pnam) *pnam = numaCreate(256); if (pnams) *pnams = numaCreate(256); if (pnav) *pnav = numaCreate(256); if (pnarv) *pnarv = numaCreate(256); /* First, use mean smoothing, normalize each histogram, * and save all results in a 2D matrix. */ arrays = (l_float32 **)LEPT_CALLOC(n, sizeof(l_float32 *)); for (i = 0; i < n; i++) { na1 = numaaGetNuma(naa, i, L_CLONE); na2 = numaWindowedMean(na1, wc); na3 = numaNormalizeHistogram(na2, 10000.); arrays[i] = numaGetFArray(na3, L_COPY); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); } /* Get stats between histograms */ for (j = 0; j < 256; j++) { na4 = numaCreate(n); for (i = 0; i < n; i++) { numaAddNumber(na4, arrays[i][j]); } numaSimpleStats(na4, 0, -1, &mean, &var, &rvar); if (pnam) numaAddNumber(*pnam, mean); if (pnams) numaAddNumber(*pnams, mean * mean); if (pnav) numaAddNumber(*pnav, var); if (pnarv) numaAddNumber(*pnarv, rvar); numaDestroy(&na4); } for (i = 0; i < n; i++) LEPT_FREE(arrays[i]); LEPT_FREE(arrays); return 0; } /*----------------------------------------------------------------------* * Extrema finding * *----------------------------------------------------------------------*/ /*! * \brief numaFindPeaks() * * \param[in] nas source numa * \param[in] nmax max number of peaks to be found * \param[in] fract1 min fraction of peak value * \param[in] fract2 min slope * \return peak na, or NULL on error. * *
 * Notes:
 *     (1) The returned na consists of sets of four numbers representing
 *         the peak, in the following order:
 *            left edge; peak center; right edge; normalized peak area
 * 
*/ NUMA * numaFindPeaks(NUMA *nas, l_int32 nmax, l_float32 fract1, l_float32 fract2) { l_int32 i, k, n, maxloc, lloc, rloc; l_float32 fmaxval, sum, total, newtotal, val, lastval; l_float32 peakfract; NUMA *na, *napeak; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); numaGetSum(nas, &total); /* We munge this copy */ if ((na = numaCopy(nas)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); if ((napeak = numaCreate(4 * nmax)) == NULL) { numaDestroy(&na); return (NUMA *)ERROR_PTR("napeak not made", __func__, NULL); } for (k = 0; k < nmax; k++) { numaGetSum(na, &newtotal); if (newtotal == 0.0) /* sanity check */ break; numaGetMax(na, &fmaxval, &maxloc); sum = fmaxval; lastval = fmaxval; lloc = 0; for (i = maxloc - 1; i >= 0; --i) { numaGetFValue(na, i, &val); if (val == 0.0) { lloc = i + 1; break; } if (val > fract1 * fmaxval) { sum += val; lastval = val; continue; } if (lastval - val > fract2 * lastval) { sum += val; lastval = val; continue; } lloc = i; break; } lastval = fmaxval; rloc = n - 1; for (i = maxloc + 1; i < n; ++i) { numaGetFValue(na, i, &val); if (val == 0.0) { rloc = i - 1; break; } if (val > fract1 * fmaxval) { sum += val; lastval = val; continue; } if (lastval - val > fract2 * lastval) { sum += val; lastval = val; continue; } rloc = i; break; } peakfract = sum / total; numaAddNumber(napeak, lloc); numaAddNumber(napeak, maxloc); numaAddNumber(napeak, rloc); numaAddNumber(napeak, peakfract); for (i = lloc; i <= rloc; i++) numaSetValue(na, i, 0.0); } numaDestroy(&na); return napeak; } /*! * \brief numaFindExtrema() * * \param[in] nas input values * \param[in] delta relative amount to resolve peaks and valleys * \param[out] pnav [optional] values of extrema * \return nad (locations of extrema, or NULL on error * *
 * Notes:
 *      (1) This returns a sequence of extrema (peaks and valleys).
 *      (2) The algorithm is analogous to that for determining
 *          mountain peaks.  Suppose we have a local peak, with
 *          bumps on the side.  Under what conditions can we consider
 *          those 'bumps' to be actual peaks?  The answer: if the
 *          bump is separated from the peak by a saddle that is at
 *          least 500 feet below the bump.
 *      (3) Operationally, suppose we are trying to identify a peak.
 *          We have a previous valley, and also the largest value that
 *          we have seen since that valley.  We can identify this as
 *          a peak if we find a value that is delta BELOW it.  When
 *          we find such a value, label the peak, use the current
 *          value to label the starting point for the search for
 *          a valley, and do the same operation in reverse.  Namely,
 *          keep track of the lowest point seen, and look for a value
 *          that is delta ABOVE it.  Once found, the lowest point is
 *          labeled the valley, and continue, looking for the next peak.
 * 
*/ NUMA * numaFindExtrema(NUMA *nas, l_float32 delta, NUMA **pnav) { l_int32 i, n, found, loc, direction; l_float32 startval, val, maxval, minval; NUMA *nav, *nad; if (pnav) *pnav = NULL; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (delta < 0.0) return (NUMA *)ERROR_PTR("delta < 0", __func__, NULL); n = numaGetCount(nas); nad = numaCreate(0); nav = NULL; if (pnav) { nav = numaCreate(0); *pnav = nav; } /* We don't know if we'll find a peak or valley first, * but use the first element of nas as the reference point. * Break when we deviate by 'delta' from the first point. */ numaGetFValue(nas, 0, &startval); found = FALSE; for (i = 1; i < n; i++) { numaGetFValue(nas, i, &val); if (L_ABS(val - startval) >= delta) { found = TRUE; break; } } if (!found) return nad; /* it's empty */ /* Are we looking for a peak or a valley? */ if (val > startval) { /* peak */ direction = 1; maxval = val; } else { direction = -1; minval = val; } loc = i; /* Sweep through the rest of the array, recording alternating * peak/valley extrema. */ for (i = i + 1; i < n; i++) { numaGetFValue(nas, i, &val); if (direction == 1 && val > maxval ) { /* new local max */ maxval = val; loc = i; } else if (direction == -1 && val < minval ) { /* new local min */ minval = val; loc = i; } else if (direction == 1 && (maxval - val >= delta)) { numaAddNumber(nad, loc); /* save the current max location */ if (nav) numaAddNumber(nav, maxval); direction = -1; /* reverse: start looking for a min */ minval = val; loc = i; /* current min location */ } else if (direction == -1 && (val - minval >= delta)) { numaAddNumber(nad, loc); /* save the current min location */ if (nav) numaAddNumber(nav, minval); direction = 1; /* reverse: start looking for a max */ maxval = val; loc = i; /* current max location */ } } /* Save the final extremum */ /* numaAddNumber(nad, loc); */ return nad; } /*! * \brief numaFindLocForThreshold() * * \param[in] nas input histogram * \param[in] skip look-ahead distance to avoid false mininma; * use 0 for default * \param[out] pthresh threshold value * \param[out] pfract [optional] fraction below or at threshold * \return 0 if OK, 1 on error or if no threshold can be found * *
 * Notes:
 *      (1) This finds a good place to set a threshold for a histogram
 *          of values that has two peaks.  The peaks can differ greatly
 *          in area underneath them.  The number of buckets in the
 *          histogram is expected to be 256 (e.g, from an 8 bpp gray image).
 *      (2) The input histogram should have been smoothed with a window
 *          to avoid false peak and valley detection due to noise.  For
 *          example, see pixThresholdByHisto().
 *      (3) A skip value can be input to determine the look-ahead distance
 *          to ignore a false peak on the rise or descent from the first peak.
 *          Input 0 to use the default value (it assumes a histo size of 256).
 *      (4) Optionally, the fractional area under the first peak can
 *          be returned.
 * 
*/ l_ok numaFindLocForThreshold(NUMA *na, l_int32 skip, l_int32 *pthresh, l_float32 *pfract) { l_int32 i, n, start, index, minloc, found; l_float32 val, pval, jval, minval, maxval, sum, partsum; l_float32 *fa; if (pfract) *pfract = 0.0; if (!pthresh) return ERROR_INT("&thresh not defined", __func__, 1); *pthresh = 0; if (!na) return ERROR_INT("na not defined", __func__, 1); if (skip <= 0) skip = 20; /* Test for constant value */ numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); if (minval == maxval) return ERROR_INT("all array values are the same", __func__, 1); /* Look for the top of the first peak */ n = numaGetCount(na); if (n < 256) L_WARNING("array size %d < 256\n", __func__, n); fa = numaGetFArray(na, L_NOCOPY); pval = fa[0]; for (i = 1; i < n; i++) { val = fa[i]; index = L_MIN(i + skip, n - 1); jval = fa[index]; if (val < pval && jval < pval) /* near the top if not there */ break; pval = val; } if (i > n - 5) /* just an increasing function */ return ERROR_INT("top of first peak not found", __func__, 1); /* Look for the low point in the valley */ found = FALSE; start = i; pval = fa[start]; for (i = start + 1; i < n; i++) { val = fa[i]; if (val <= pval) { /* appears to be going down */ pval = val; } else { /* appears to be going up */ index = L_MIN(i + skip, n - 1); jval = fa[index]; /* junp ahead by 'skip' */ if (val > jval) { /* still going down; jump ahead */ pval = jval; i = index; } else { /* really going up; passed the min */ found = TRUE; break; } } } if (!found) return ERROR_INT("no minimum found", __func__, 1); /* Find the location of the minimum in the interval */ minloc = index; /* likely passed the min; look backward */ minval = fa[index]; for (i = index - 1; i > index - skip; i--) { if (fa[i] < minval) { minval = fa[i]; minloc = i; } } /* Is the minimum very near the end of the array? */ if (minloc > n - 10) return ERROR_INT("minimum at end of array; invalid", __func__, 1); *pthresh = minloc; /* Find the fraction under the first peak */ if (pfract) { numaGetSumOnInterval(na, 0, minloc, &partsum); numaGetSum(na, &sum); if (sum > 0.0) *pfract = partsum / sum; } return 0; } /*! * \brief numaCountReversals() * * \param[in] nas input values * \param[in] minreversal relative amount to resolve peaks and valleys * \param[out] pnr [optional] number of reversals * \param[out] prd [optional] reversal density: reversals/length * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input numa is can be generated from pixExtractAlongLine().
 *          If so, the x parameters can be used to find the reversal
 *          frequency along a line.
 *      (2) If the input numa was generated from a 1 bpp pix, the
 *          values will be 0 and 1.  Use %minreversal == 1 to get
 *          the number of pixel flips.  If the only values are 0 and 1,
 *          but %minreversal > 1, set the reversal count to 0 and
 *          issue a warning.
 * 
*/ l_ok numaCountReversals(NUMA *nas, l_float32 minreversal, l_int32 *pnr, l_float32 *prd) { l_int32 i, n, nr, ival, binvals; l_int32 *ia; l_float32 fval, delx, len; NUMA *nat; if (pnr) *pnr = 0; if (prd) *prd = 0.0; if (!pnr && !prd) return ERROR_INT("neither &nr nor &rd are defined", __func__, 1); if (!nas) return ERROR_INT("nas not defined", __func__, 1); if ((n = numaGetCount(nas)) == 0) { L_INFO("nas is empty\n", __func__); return 0; } if (minreversal < 0.0) return ERROR_INT("minreversal < 0", __func__, 1); /* Decide if the only values are 0 and 1 */ binvals = TRUE; for (i = 0; i < n; i++) { numaGetFValue(nas, i, &fval); if (fval != 0.0 && fval != 1.0) { binvals = FALSE; break; } } nr = 0; if (binvals) { if (minreversal > 1.0) { L_WARNING("binary values but minreversal > 1\n", __func__); } else { ia = numaGetIArray(nas); ival = ia[0]; for (i = 1; i < n; i++) { if (ia[i] != ival) { nr++; ival = ia[i]; } } LEPT_FREE(ia); } } else { nat = numaFindExtrema(nas, minreversal, NULL); nr = numaGetCount(nat); numaDestroy(&nat); } if (pnr) *pnr = nr; if (prd) { numaGetParameters(nas, NULL, &delx); len = delx * n; *prd = (l_float32)nr / len; } return 0; } /*----------------------------------------------------------------------* * Threshold crossings and frequency analysis * *----------------------------------------------------------------------*/ /*! * \brief numaSelectCrossingThreshold() * * \param[in] nax [optional] numa of abscissa values; can be NULL * \param[in] nay signal * \param[in] estthresh estimated pixel threshold for crossing: * e.g., for images, white <--> black; typ. ~120 * \param[out] pbestthresh robust estimate of threshold to use * \return 0 if OK, 1 on error or warning * *
 * Notes:
 *     (1) When a valid threshold is used, the number of crossings is
 *         a maximum, because none are missed.  If no threshold intersects
 *         all the crossings, the crossings must be determined with
 *         numaCrossingsByPeaks().
 *     (2) %estthresh is an input estimate of the threshold that should
 *         be used.  We compute the crossings with 41 thresholds
 *         (20 below and 20 above).  There is a range in which the
 *         number of crossings is a maximum.  Return a threshold
 *         in the center of this stable plateau of crossings.
 *         This can then be used with numaCrossingsByThreshold()
 *         to get a good estimate of crossing locations.
 *     (3) If the count of nay is less than 2, a warning is issued.
 * 
*/ l_ok numaSelectCrossingThreshold(NUMA *nax, NUMA *nay, l_float32 estthresh, l_float32 *pbestthresh) { l_int32 i, inrun, istart, iend, maxstart, maxend, runlen, maxrunlen; l_int32 val, maxval, nmax, count; l_float32 thresh, fmaxval, fmodeval; NUMA *nat, *nac; if (!pbestthresh) return ERROR_INT("&bestthresh not defined", __func__, 1); *pbestthresh = 0.0; if (!nay) return ERROR_INT("nay not defined", __func__, 1); if (numaGetCount(nay) < 2) { L_WARNING("nay count < 2; no threshold crossing\n", __func__); return 1; } /* Compute the number of crossings for different thresholds */ nat = numaCreate(41); for (i = 0; i < 41; i++) { thresh = estthresh - 80.0f + 4.0f * i; nac = numaCrossingsByThreshold(nax, nay, thresh); numaAddNumber(nat, numaGetCount(nac)); numaDestroy(&nac); } /* Find the center of the plateau of max crossings, which * extends from thresh[istart] to thresh[iend]. */ numaGetMax(nat, &fmaxval, NULL); maxval = (l_int32)fmaxval; nmax = 0; for (i = 0; i < 41; i++) { numaGetIValue(nat, i, &val); if (val == maxval) nmax++; } if (nmax < 3) { /* likely accidental max; try the mode */ numaGetMode(nat, &fmodeval, &count); if (count > nmax && fmodeval > 0.5 * fmaxval) maxval = (l_int32)fmodeval; /* use the mode */ } inrun = FALSE; iend = 40; maxrunlen = 0, maxstart = 0, maxend = 0; for (i = 0; i < 41; i++) { numaGetIValue(nat, i, &val); if (val == maxval) { if (!inrun) { istart = i; inrun = TRUE; } continue; } if (inrun && (val != maxval)) { iend = i - 1; runlen = iend - istart + 1; inrun = FALSE; if (runlen > maxrunlen) { maxstart = istart; maxend = iend; maxrunlen = runlen; } } } if (inrun) { runlen = i - istart; if (runlen > maxrunlen) { maxstart = istart; maxend = i - 1; maxrunlen = runlen; } } *pbestthresh = estthresh - 80.0f + 2.0f * (l_float32)(maxstart + maxend); #if DEBUG_CROSSINGS lept_stderr("\nCrossings attain a maximum at %d thresholds, between:\n" " thresh[%d] = %5.1f and thresh[%d] = %5.1f\n", nmax, maxstart, estthresh - 80.0 + 4.0 * maxstart, maxend, estthresh - 80.0 + 4.0 * maxend); lept_stderr("The best choice: %5.1f\n", *pbestthresh); lept_stderr("Number of crossings at the 41 thresholds:"); numaWriteStderr(nat); #endif /* DEBUG_CROSSINGS */ numaDestroy(&nat); return 0; } /*! * \brief numaCrossingsByThreshold() * * \param[in] nax [optional] numa of abscissa values; can be NULL * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] thresh threshold value for nay * \return nad abscissa pts at threshold, or NULL on error * *
 * Notes:
 *      (1) If nax == NULL, we use startx and delx from nay to compute
 *          the crossing values in nad.
 * 
*/ NUMA * numaCrossingsByThreshold(NUMA *nax, NUMA *nay, l_float32 thresh) { l_int32 i, n; l_float32 startx, delx; l_float32 xval1, xval2, yval1, yval2, delta1, delta2, crossval, fract; NUMA *nad; if (!nay) return (NUMA *)ERROR_PTR("nay not defined", __func__, NULL); n = numaGetCount(nay); if (nax && (numaGetCount(nax) != n)) return (NUMA *)ERROR_PTR("nax and nay sizes differ", __func__, NULL); nad = numaCreate(0); if (n < 2) return nad; numaGetFValue(nay, 0, &yval1); numaGetParameters(nay, &startx, &delx); if (nax) numaGetFValue(nax, 0, &xval1); else xval1 = startx; for (i = 1; i < n; i++) { numaGetFValue(nay, i, &yval2); if (nax) numaGetFValue(nax, i, &xval2); else xval2 = startx + i * delx; delta1 = yval1 - thresh; delta2 = yval2 - thresh; if (delta1 == 0.0) { numaAddNumber(nad, xval1); } else if (delta2 == 0.0) { numaAddNumber(nad, xval2); } else if (delta1 * delta2 < 0.0) { /* crossing */ fract = L_ABS(delta1) / L_ABS(yval1 - yval2); crossval = xval1 + fract * (xval2 - xval1); numaAddNumber(nad, crossval); } xval1 = xval2; yval1 = yval2; } return nad; } /*! * \brief numaCrossingsByPeaks() * * \param[in] nax [optional] numa of abscissa values * \param[in] nay numa of ordinate values, corresponding to nax * \param[in] delta parameter used to identify when a new peak can be found * \return nad abscissa pts at threshold, or NULL on error * *
 * Notes:
 *      (1) If nax == NULL, we use startx and delx from nay to compute
 *          the crossing values in nad.
 * 
*/ NUMA * numaCrossingsByPeaks(NUMA *nax, NUMA *nay, l_float32 delta) { l_int32 i, j, n, np, previndex, curindex; l_float32 startx, delx; l_float32 xval1, xval2, yval1, yval2, delta1, delta2; l_float32 prevval, curval, thresh, crossval, fract; NUMA *nap, *nad; if (!nay) return (NUMA *)ERROR_PTR("nay not defined", __func__, NULL); n = numaGetCount(nay); if (nax && (numaGetCount(nax) != n)) return (NUMA *)ERROR_PTR("nax and nay sizes differ", __func__, NULL); /* Find the extrema. Also add last point in nay to get * the last transition (from the last peak to the end). * The number of crossings is 1 more than the number of extrema. */ nap = numaFindExtrema(nay, delta, NULL); numaAddNumber(nap, n - 1); np = numaGetCount(nap); L_INFO("Number of crossings: %d\n", __func__, np); /* Do all computation in index units of nax or the delx of nay */ nad = numaCreate(np); /* output crossing locations, in nax units */ previndex = 0; /* prime the search with 1st point */ numaGetFValue(nay, 0, &prevval); /* prime the search with 1st point */ numaGetParameters(nay, &startx, &delx); for (i = 0; i < np; i++) { numaGetIValue(nap, i, &curindex); numaGetFValue(nay, curindex, &curval); thresh = (prevval + curval) / 2.0f; if (nax) numaGetFValue(nax, previndex, &xval1); else xval1 = startx + previndex * delx; numaGetFValue(nay, previndex, &yval1); for (j = previndex + 1; j <= curindex; j++) { if (nax) numaGetFValue(nax, j, &xval2); else xval2 = startx + j * delx; numaGetFValue(nay, j, &yval2); delta1 = yval1 - thresh; delta2 = yval2 - thresh; if (delta1 == 0.0) { numaAddNumber(nad, xval1); break; } else if (delta2 == 0.0) { numaAddNumber(nad, xval2); break; } else if (delta1 * delta2 < 0.0) { /* crossing */ fract = L_ABS(delta1) / L_ABS(yval1 - yval2); crossval = xval1 + fract * (xval2 - xval1); numaAddNumber(nad, crossval); break; } xval1 = xval2; yval1 = yval2; } previndex = curindex; prevval = curval; } numaDestroy(&nap); return nad; } /*! * \brief numaEvalBestHaarParameters() * * \param[in] nas numa of non-negative signal values * \param[in] relweight relative weight of (-1 comb) / (+1 comb) * contributions to the 'convolution'. In effect, * the convolution kernel is a comb consisting of * alternating +1 and -weight. * \param[in] nwidth number of widths to consider * \param[in] nshift number of shifts to consider for each width * \param[in] minwidth smallest width to consider * \param[in] maxwidth largest width to consider * \param[out] pbestwidth width giving largest score * \param[out] pbestshift shift giving largest score * \param[out] pbestscore [optional] convolution with "Haar"-like comb * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a linear sweep of widths, evaluating at %nshift
 *          shifts for each width, computing the score from a convolution
 *          with a long comb, and finding the (width, shift) pair that
 *          gives the maximum score.  The best width is the "half-wavelength"
 *          of the signal.
 *      (2) The convolving function is a comb of alternating values
 *          +1 and -1 * relweight, separated by the width and phased by
 *          the shift.  This is similar to a Haar transform, except
 *          there the convolution is performed with a square wave.
 *      (3) The function is useful for finding the line spacing
 *          and strength of line signal from pixel sum projections.
 *      (4) The score is normalized to the size of nas divided by
 *          the number of half-widths.  For image applications, the input is
 *          typically an array of pixel projections, so one should
 *          normalize by dividing the score by the image width in the
 *          pixel projection direction.
 * 
*/ l_ok numaEvalBestHaarParameters(NUMA *nas, l_float32 relweight, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore) { l_int32 i, j; l_float32 delwidth, delshift, width, shift, score; l_float32 bestwidth, bestshift, bestscore; if (pbestscore) *pbestscore = 0.0; if (pbestwidth) *pbestwidth = 0.0; if (pbestshift) *pbestshift = 0.0; if (!pbestwidth || !pbestshift) return ERROR_INT("&bestwidth and &bestshift not defined", __func__, 1); if (!nas) return ERROR_INT("nas not defined", __func__, 1); bestscore = bestwidth = bestshift = 0.0; delwidth = (maxwidth - minwidth) / (nwidth - 1.0f); for (i = 0; i < nwidth; i++) { width = minwidth + delwidth * i; delshift = width / (l_float32)(nshift); for (j = 0; j < nshift; j++) { shift = j * delshift; numaEvalHaarSum(nas, width, shift, relweight, &score); if (score > bestscore) { bestscore = score; bestwidth = width; bestshift = shift; #if DEBUG_FREQUENCY lept_stderr("width = %7.3f, shift = %7.3f, score = %7.3f\n", width, shift, score); #endif /* DEBUG_FREQUENCY */ } } } *pbestwidth = bestwidth; *pbestshift = bestshift; if (pbestscore) *pbestscore = bestscore; return 0; } /*! * \brief numaEvalHaarSum() * * \param[in] nas numa of non-negative signal values * \param[in] width distance between +1 and -1 in convolution comb * \param[in] shift phase of the comb: location of first +1 * \param[in] relweight relative weight of (-1 comb) / (+1 comb) * contributions to the 'convolution'. In effect, * the convolution kernel is a comb consisting of * alternating +1 and -weight. * \param[out] pscore convolution with "Haar"-like comb * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a convolution with a comb of alternating values
 *          +1 and -relweight, separated by the width and phased by the shift.
 *          This is similar to a Haar transform, except that for Haar,
 *            (1) the convolution kernel is symmetric about 0, so the
 *                relweight is 1.0, and
 *            (2) the convolution is performed with a square wave.
 *      (2) The score is normalized to the size of nas divided by
 *          twice the "width".  For image applications, the input is
 *          typically an array of pixel projections, so one should
 *          normalize by dividing the score by the image width in the
 *          pixel projection direction.
 *      (3) To get a Haar-like result, use relweight = 1.0.  For detecting
 *          signals where you expect every other sample to be close to
 *          zero, as with barcodes or filtered text lines, you can
 *          use relweight > 1.0.
 * 
*/ l_ok numaEvalHaarSum(NUMA *nas, l_float32 width, l_float32 shift, l_float32 relweight, l_float32 *pscore) { l_int32 i, n, nsamp, index; l_float32 score, weight, val; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = 0.0; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if ((n = numaGetCount(nas)) < 2 * width) return ERROR_INT("nas size too small", __func__, 1); score = 0.0; nsamp = (l_int32)((n - shift) / width); for (i = 0; i < nsamp; i++) { index = (l_int32)(shift + i * width); weight = (i % 2) ? 1.0f : -1.0f * relweight; numaGetFValue(nas, index, &val); score += weight * val; } *pscore = 2.0f * width * score / (l_float32)n; return 0; } /*----------------------------------------------------------------------* * Generating numbers in a range under constraints * *----------------------------------------------------------------------*/ /*! * \brief genConstrainedNumaInRange() * * \param[in] first first number to choose; >= 0 * \param[in] last biggest possible number to reach; >= first * \param[in] nmax maximum number of numbers to select; > 0 * \param[in] use_pairs 1 = select pairs of adjacent numbers; * 0 = select individual numbers * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) Selection is made uniformly in the range.  This can be used
 *         to select pages distributed as uniformly as possible
 *         through a book, where you are constrained to:
 *          ~ choose between [first, ... biggest],
 *          ~ choose no more than nmax numbers, and
 *         and you have the option of requiring pairs of adjacent numbers.
 * 
*/ NUMA * genConstrainedNumaInRange(l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs) { l_int32 i, nsets, val; l_float32 delta; NUMA *na; first = L_MAX(0, first); if (last < first) return (NUMA *)ERROR_PTR("last < first!", __func__, NULL); if (nmax < 1) return (NUMA *)ERROR_PTR("nmax < 1!", __func__, NULL); nsets = L_MIN(nmax, last - first + 1); if (use_pairs == 1) nsets = nsets / 2; if (nsets == 0) return (NUMA *)ERROR_PTR("nsets == 0", __func__, NULL); /* Select delta so that selection covers the full range if possible */ if (nsets == 1) { delta = 0.0; } else { if (use_pairs == 0) delta = (l_float32)(last - first) / (nsets - 1); else delta = (l_float32)(last - first - 1) / (nsets - 1); } na = numaCreate(nsets); for (i = 0; i < nsets; i++) { val = (l_int32)(first + i * delta + 0.5); numaAddNumber(na, val); if (use_pairs == 1) numaAddNumber(na, val + 1); } return na; } leptonica-1.86.0/src/pageseg.c000066400000000000000000003363071506303110300161360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pageseg.c *
 *
 *      Top level page segmentation
 *          l_int32   pixGetRegionsBinary()
 *
 *      Halftone region extraction
 *          PIX      *pixGenHalftoneMask()    **Deprecated wrapper**
 *          PIX      *pixGenerateHalftoneMask()
 *
 *      Textline extraction
 *          PIX      *pixGenTextlineMask()
 *
 *      Textblock extraction
 *          PIX      *pixGenTextblockMask()
 *
 *      Location and extraction of page foreground; cleaning pages
 *          PIX            *pixCropImage()
 *          static l_int32  pixMaxCompAfterVClosing()
 *          static l_int32  pixFindPageInsideBlackBorder()
 *          static PIX     *pixRescaleForCropping()
 *          PIX            *pixCleanImage()
 *          BOX            *pixFindPageForeground()
 *
 *      Extraction of characters from image with only text
 *          l_int32   pixSplitIntoCharacters()
 *          BOXA     *pixSplitComponentWithProfile()
 *
 *      Extraction of lines of text
 *          PIXA     *pixExtractTextlines()
 *          PIXA     *pixExtractRawTextlines()
 *
 *      How many text columns
 *          l_int32   pixCountTextColumns()
 *
 *      Decision: text vs photo
 *          l_int32   pixDecideIfText()
 *          l_int32   pixFindThreshFgExtent()
 *
 *      Decision: table vs text
 *          l_int32   pixDecideIfTable()
 *          Pix      *pixPrepare1bpp()
 *
 *      Estimate the grayscale background value
 *          l_int32   pixEstimateBackground()
 *
 *      Largest white or black rectangles in an image
 *          l_int32   pixFindLargeRectangles()
 *          l_int32   pixFindLargestRectangle()
 *
 *      Generate rectangle inside connected component
 *          BOX      *pixFindRectangleInCC()
 *
 *      Automatic photoinvert for OCR
 *          PIX      *pixAutoPhotoinvert()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* These functions are not intended to work on very low-res images */ static const l_int32 MinWidth = 100; static const l_int32 MinHeight = 100; static l_ok pixMaxCompAfterVClosing(PIX *pixs, BOX **pbox); static l_ok pixFindPageInsideBlackBorder(PIX *pixs, BOX **pbox); static PIX *pixRescaleForCropping(PIX *pixs, l_int32 w, l_int32 h, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, PIX **ppixsc); /*------------------------------------------------------------------* * Top level page segmentation * *------------------------------------------------------------------*/ /*! * \brief pixGetRegionsBinary() * * \param[in] pixs 1 bpp, assumed to be 300 to 400 ppi * \param[out] ppixhm [optional] halftone mask * \param[out] ppixtm [optional] textline mask * \param[out] ppixtb [optional] textblock mask * \param[in] pixadb input for collecting debug pix; use NULL to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is best to deskew the image before segmenting.
 *      (2) Passing in %pixadb enables debug output.
 * 
*/ l_ok pixGetRegionsBinary(PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, PIXA *pixadb) { l_int32 w, h, htfound, tlfound; PIX *pixr, *pix1, *pix2; PIX *pixtext; /* text pixels only */ PIX *pixhm2; /* halftone mask; 2x reduction */ PIX *pixhm; /* halftone mask; */ PIX *pixtm2; /* textline mask; 2x reduction */ PIX *pixtm; /* textline mask */ PIX *pixvws; /* vertical white space mask */ PIX *pixtb2; /* textblock mask; 2x reduction */ PIX *pixtbf2; /* textblock mask; 2x reduction; small comps filtered */ PIX *pixtb; /* textblock mask */ if (ppixhm) *ppixhm = NULL; if (ppixtm) *ppixtm = NULL; if (ppixtb) *ppixtb = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return 1; } /* 2x reduce, to 150 -200 ppi */ pixr = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); if (pixadb) pixaAddPix(pixadb, pixr, L_COPY); /* Get the halftone mask */ pixhm2 = pixGenerateHalftoneMask(pixr, &pixtext, &htfound, pixadb); /* Get the textline mask from the text pixels */ pixtm2 = pixGenTextlineMask(pixtext, &pixvws, &tlfound, pixadb); /* Get the textblock mask from the textline mask */ pixtb2 = pixGenTextblockMask(pixtm2, pixvws, pixadb); pixDestroy(&pixr); pixDestroy(&pixtext); pixDestroy(&pixvws); /* Remove small components from the mask, where a small * component is defined as one with both width and height < 60 */ pixtbf2 = NULL; if (pixtb2) { pixtbf2 = pixSelectBySize(pixtb2, 60, 60, 4, L_SELECT_IF_EITHER, L_SELECT_IF_GTE, NULL); pixDestroy(&pixtb2); if (pixadb) pixaAddPix(pixadb, pixtbf2, L_COPY); } /* Expand all masks to full resolution, and do filling or * small dilations for better coverage. */ pixhm = pixExpandReplicate(pixhm2, 2); pix1 = pixSeedfillBinary(NULL, pixhm, pixs, 8); pixOr(pixhm, pixhm, pix1); pixDestroy(&pixhm2); pixDestroy(&pix1); if (pixadb) pixaAddPix(pixadb, pixhm, L_COPY); pix1 = pixExpandReplicate(pixtm2, 2); pixtm = pixDilateBrick(NULL, pix1, 3, 3); pixDestroy(&pixtm2); pixDestroy(&pix1); if (pixadb) pixaAddPix(pixadb, pixtm, L_COPY); if (pixtbf2) { pix1 = pixExpandReplicate(pixtbf2, 2); pixtb = pixDilateBrick(NULL, pix1, 3, 3); pixDestroy(&pixtbf2); pixDestroy(&pix1); if (pixadb) pixaAddPix(pixadb, pixtb, L_COPY); } else { pixtb = pixCreateTemplate(pixs); /* empty mask */ } /* Debug: identify objects that are neither text nor halftone image */ if (pixadb) { pix1 = pixSubtract(NULL, pixs, pixtm); /* remove text pixels */ pix2 = pixSubtract(NULL, pix1, pixhm); /* remove halftone pixels */ pixaAddPix(pixadb, pix2, L_INSERT); pixDestroy(&pix1); } /* Debug: display textline components with random colors */ if (pixadb) { l_int32 w, h; BOXA *boxa; PIXA *pixa; boxa = pixConnComp(pixtm, &pixa, 8); pixGetDimensions(pixtm, &w, &h, NULL); pix1 = pixaDisplayRandomCmap(pixa, w, h); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); pixaDestroy(&pixa); boxaDestroy(&boxa); } /* Debug: identify the outlines of each textblock */ if (pixadb) { PIXCMAP *cmap; PTAA *ptaa; ptaa = pixGetOuterBordersPtaa(pixtb); lept_mkdir("lept/pageseg"); ptaaWriteDebug("/tmp/lept/pageseg/tb_outlines.ptaa", ptaa, 1); pix1 = pixRenderRandomCmapPtaa(pixtb, ptaa, 1, 16, 1); cmap = pixGetColormap(pix1); pixcmapResetColor(cmap, 0, 130, 130, 130); pixaAddPix(pixadb, pix1, L_INSERT); ptaaDestroy(&ptaa); } /* Debug: get b.b. for all mask components */ if (pixadb) { BOXA *bahm, *batm, *batb; bahm = pixConnComp(pixhm, NULL, 4); batm = pixConnComp(pixtm, NULL, 4); batb = pixConnComp(pixtb, NULL, 4); boxaWriteDebug("/tmp/lept/pageseg/htmask.boxa", bahm); boxaWriteDebug("/tmp/lept/pageseg/textmask.boxa", batm); boxaWriteDebug("/tmp/lept/pageseg/textblock.boxa", batb); boxaDestroy(&bahm); boxaDestroy(&batm); boxaDestroy(&batb); } if (pixadb) { pixaConvertToPdf(pixadb, 0, 1.0, 0, 0, "Debug page segmentation", "/tmp/lept/pageseg/debug.pdf"); L_INFO("Writing debug pdf to /tmp/lept/pageseg/debug.pdf\n", __func__); } if (ppixhm) *ppixhm = pixhm; else pixDestroy(&pixhm); if (ppixtm) *ppixtm = pixtm; else pixDestroy(&pixtm); if (ppixtb) *ppixtb = pixtb; else pixDestroy(&pixtb); return 0; } /*------------------------------------------------------------------* * Halftone region extraction * *------------------------------------------------------------------*/ /*! * \brief pixGenHalftoneMask() * *
 * Deprecated:
 *   This wrapper avoids an ABI change with tesseract 3.0.4.
 *   It should be removed when we no longer need to support 3.0.4.
 *   The debug parameter is ignored (assumed 0).
 * 
*/ PIX * pixGenHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug) { return pixGenerateHalftoneMask(pixs, ppixtext, phtfound, NULL); } /*! * \brief pixGenerateHalftoneMask() * * \param[in] pixs 1 bpp, assumed to be 150 to 200 ppi * \param[out] ppixtext [optional] text part of pixs * \param[out] phtfound [optional] 1 if the mask is not empty * \param[in] pixadb input for collecting debug pix; use NULL to skip * \return pixd halftone mask, or NULL on error * *
 * Notes:
 *      (1) This is not intended to work on small thumbnails.  The
 *          dimensions of pixs must be at least MinWidth x MinHeight.
 * 
*/ PIX * pixGenerateHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, PIXA *pixadb) { l_int32 w, h, empty; PIX *pix1, *pix2, *pixhs, *pixhm, *pixd; if (ppixtext) *ppixtext = NULL; if (phtfound) *phtfound = 0; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return NULL; } /* Compute seed for halftone parts at 8x reduction */ pix1 = pixReduceRankBinaryCascade(pixs, 4, 4, 0, 0); pix2 = pixOpenBrick(NULL, pix1, 5, 5); pixhs = pixExpandReplicate(pix2, 4); /* back to 2x reduction */ pixDestroy(&pix1); pixDestroy(&pix2); if (pixadb) pixaAddPix(pixadb, pixhs, L_COPY); /* Compute mask for connected regions */ pixhm = pixCloseSafeBrick(NULL, pixs, 4, 4); if (pixadb) pixaAddPix(pixadb, pixhm, L_COPY); /* Fill seed into mask to get halftone mask */ pixd = pixSeedfillBinary(NULL, pixhs, pixhm, 4); if (pixadb) pixaAddPix(pixadb, pixd, L_COPY); #if 0 pixOpenBrick(pixd, pixd, 9, 9); #endif /* Check if mask is empty */ pixZero(pixd, &empty); if (phtfound && !empty) *phtfound = 1; /* Optionally, get all pixels that are not under the halftone mask */ if (ppixtext) { if (empty) *ppixtext = pixCopy(NULL, pixs); else *ppixtext = pixSubtract(NULL, pixs, pixd); if (pixadb) pixaAddPix(pixadb, *ppixtext, L_COPY); } pixDestroy(&pixhs); pixDestroy(&pixhm); return pixd; } /*------------------------------------------------------------------* * Textline extraction * *------------------------------------------------------------------*/ /*! * \brief pixGenTextlineMask() * * \param[in] pixs 1 bpp, assumed to be 150 to 200 ppi * \param[out] ppixvws vertical whitespace mask * \param[out] ptlfound [optional] 1 if the mask is not empty * \param[in] pixadb input for collecting debug pix; use NULL to skip * \return pixd textline mask, or NULL on error * *
 * Notes:
 *      (1) The input pixs should be deskewed.
 *      (2) pixs should have no halftone pixels.
 *      (3) This is not intended to work on small thumbnails.  The
 *          dimensions of pixs must be at least MinWidth x MinHeight.
 *      (4) Both the input image and the returned textline mask
 *          are at the same resolution.
 * 
*/ PIX * pixGenTextlineMask(PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, PIXA *pixadb) { l_int32 w, h, empty; PIX *pix1, *pix2, *pixvws, *pixd; if (ptlfound) *ptlfound = 0; if (!ppixvws) return (PIX *)ERROR_PTR("&pixvws not defined", __func__, NULL); *ppixvws = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return NULL; } /* First we need a vertical whitespace mask. Invert the image. */ pix1 = pixInvert(NULL, pixs); /* The whitespace mask will break textlines where there * is a large amount of white space below or above. * This can be prevented by identifying regions of the * inverted image that have large horizontal extent (bigger than * the separation between columns) and significant * vertical extent (bigger than the separation between * textlines), and subtracting this from the bg. */ pix2 = pixMorphCompSequence(pix1, "o80.60", 0); pixSubtract(pix1, pix1, pix2); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); pixDestroy(&pix2); /* Identify vertical whitespace by opening the remaining bg. * o5.1 removes thin vertical bg lines and o1.200 extracts * long vertical bg lines. */ pixvws = pixMorphCompSequence(pix1, "o5.1 + o1.200", 0); *ppixvws = pixvws; if (pixadb) pixaAddPix(pixadb, pixvws, L_COPY); pixDestroy(&pix1); /* Three steps to getting text line mask: * (1) close the characters and words in the textlines * (2) open the vertical whitespace corridors back up * (3) small opening to remove noise */ pix1 = pixMorphSequence(pixs, "c30.1", 0); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); pixd = pixSubtract(NULL, pix1, pixvws); pixOpenBrick(pixd, pixd, 3, 3); if (pixadb) pixaAddPix(pixadb, pixd, L_COPY); pixDestroy(&pix1); /* Check if text line mask is empty */ if (ptlfound) { pixZero(pixd, &empty); if (!empty) *ptlfound = 1; } return pixd; } /*------------------------------------------------------------------* * Textblock extraction * *------------------------------------------------------------------*/ /*! * \brief pixGenTextblockMask() * * \param[in] pixs 1 bpp, textline mask, assumed to be 150 to 200 ppi * \param[in] pixvws vertical white space mask * \param[in] pixadb input for collecting debug pix; use NULL to skip * \return pixd textblock mask, or NULL if empty or on error * *
 * Notes:
 *      (1) Both the input masks (textline and vertical white space) and
 *          the returned textblock mask are at the same resolution.
 *      (2) This is not intended to work on small thumbnails.  The
 *          dimensions of pixs must be at least MinWidth x MinHeight.
 *      (3) The result is somewhat noisy, in that small "blocks" of
 *          text may be included.  These can be removed by post-processing,
 *          using, e.g.,
 *             pixSelectBySize(pix, 60, 60, 4, L_SELECT_IF_EITHER,
 *                             L_SELECT_IF_GTE, NULL);
 * 
*/ PIX * pixGenTextblockMask(PIX *pixs, PIX *pixvws, PIXA *pixadb) { l_int32 w, h, empty; PIX *pix1, *pix2, *pix3, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return NULL; } if (!pixvws) return (PIX *)ERROR_PTR("pixvws not defined", __func__, NULL); /* Join pixels vertically to make a textblock mask */ pix1 = pixMorphSequence(pixs, "c1.10 + o4.1", 0); pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); L_INFO("no fg pixels in textblock mask\n", __func__); return NULL; } if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Solidify the textblock mask and remove noise: * (1) For each cc, close the blocks and dilate slightly * to form a solid mask. * (2) Small horizontal closing between components. * (3) Open the white space between columns, again. * (4) Remove small components. */ pix2 = pixMorphSequenceByComponent(pix1, "c30.30 + d3.3", 8, 0, 0, NULL); pixCloseSafeBrick(pix2, pix2, 10, 1); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); pix3 = pixSubtract(NULL, pix2, pixvws); if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); pixd = pixSelectBySize(pix3, 25, 5, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); if (pixadb) pixaAddPix(pixadb, pixd, L_COPY); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pixd; } /*------------------------------------------------------------------* * Location and extraction of page foreground; cleaning pages * *------------------------------------------------------------------*/ /*! * \brief pixCropImage() * * \param[in] pixs full resolution (any type or depth) * \param[in] lr_clear full res pixels cleared at left and right sides * \param[in] tb_clear full res pixels cleared at top and bottom sides * \param[in] edgeclean parameter for removing edge noise (-1 to 15) * default = 0 (no removal); * 15 is maximally aggressive for random noise * -1 for aggressively removing side noise * -2 to extract page embedded in black background * \param[in] lr_border full res final "added" pixels on left and right * \param[in] tb_border full res final "added" pixels on top and bottom * \param[in] maxwiden max fractional horizontal stretch allowed * \param[in] printwiden 0 to skip, 1 for 8.5x11, 2 for A4 * \param[in] *debugfile [optional] usually is NULL * \param[out] *pcropbox [optional] crop box at full resolution * \return cropped pix, or NULL on error * *
 * Notes:
 *      (1) This binarizes and crops a page image.
 *          (a) Binarizes if necessary and does 2x reduction.
 *          (b) Clears near the border by %lr_clear and %tb_clear full
 *              resolution pixels.  (This is done at 2x reduction.)
 *          (c) If %edgeclean > 0, it removes isolated sets of pixels,
 *              using a close/open operation of size %edgeclean + 1.
 *              If %edgeclean == -1, it uses a large vertical morphological
 *              close/open and the extraction of either the largest
 *              resulting connected component (or the largest two components
 *              if the page has 2 columns), to eliminate noise on left
 *              and right sides.
 *              If %edgeclean == -2, it extracts the page region from a
 *              possible exterior black surround.
 *          (d) Find the bounding box of remaining fg pixels and scales
 *              the box up 2x back to full resolution.
 *          (e) Crops the binarized image to the bounding box.
 *          (f) Slightly thickens long horizontal lines.
 *          (g) Rescales this image to fit within the original image,
 *              less lr_border on the sides and tb_border above and below.
 *              The rescaling is done isomorphically with a (possible)
 *              optional additional widening.  Suggest the additional
 *              widening factor not exceed 1.15.
 *          (h) Optionally do additional horizontal stretch if needed to
 *              better fill a printed page.  Default is 0 to skip; 1 to
 *              widen for 8.5x11 page, 2 for A4 page.
 *          Note that (b) - (d) are done at 2x reduction for efficiency.
 *      (2) Side clearing must not exceed 1/6 of the dimension on that side.
 *      (3) The clear and border pixel parameters must be >= 0.
 *      (4) The "clear" parameters act on the input image, whereas the
 *          "border" parameters act to give a white border to the final
 *          image.  They are not literally added, because the input and final
 *          images are the same size.  If the resulting images are to be
 *          printed, it is useful to have border pixel parameters of at
 *          least 60 at 300 ppi, to avoid losing content at the edges.
 *      (5) This is not intended to work on small thumbnails.  The
 *          dimensions of pixs must be at least MinWidth x MinHeight.
 *      (6) Step (f) above helps with orthographically-produced music notation,
 *          where the horizontal staff lines can be very thin and thus
 *          subject to printer alias.
 *      (7) With orthographically-produced (as opposed to scanned) images,
 *          there is no scan noise, so you should skip noise removal
 *          by setting %edgeclean = 0.
 *      (8) If you are not concerned with printing on paper, use the
 *          default value 0 for %printwiden.  Widening only takes place
 *          if the ratio h/w exceeds the specified paper size by 3%,
 *          and the horizontal scaling factor will not exceed 1.25.
 * 
*/ PIX * pixCropImage(PIX *pixs, l_int32 lr_clear, l_int32 tb_clear, l_int32 edgeclean, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, l_int32 printwiden, const char *debugfile, BOX **pcropbox) { char cmd[64]; l_int32 w, h, val, ret; l_float32 r1, r2; BOX *box1, *box2; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1; if (pcropbox) *pcropbox = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (edgeclean > 15) { L_WARNING("edgeclean > 15; setting to 15\n", __func__); edgeclean = 15; } if (edgeclean < -1) { lept_stderr("Using edgeclean = -2\n"); edgeclean = -2; } pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return NULL; } if (lr_clear < 0) lr_clear = 0; if (tb_clear < 0) tb_clear = 0; if (lr_border < 0) lr_border = 0; if (tb_border < 0) tb_border = 0; if (lr_clear > w / 6 || tb_clear > h / 6) { L_ERROR("lr_clear or tb_clear too large; must be <= %d and %d\n", __func__, w / 6, h / 6); return NULL; } if (maxwiden > 1.15) L_WARNING("maxwiden = %f > 1.15; suggest between 1.0 and 1.15\n", __func__, maxwiden); if (printwiden < 0 || printwiden > 2) printwiden = 0; pixa1 = (debugfile) ? pixaCreate(5) : NULL; if (pixa1) pixaAddPix(pixa1, pixs, L_COPY); /* Binarize if necessary and 2x reduction */ pix1 = pixBackgroundNormTo1MinMax(pixs, 1, 1); pix2 = pixReduceRankBinary2(pix1, 2, NULL); /* Clear out pixels near the image edges */ pixSetOrClearBorder(pix2, lr_clear / 2, lr_clear / 2, tb_clear / 2, tb_clear / 2, PIX_CLR); if (pixa1) pixaAddPix(pixa1, pixScale(pix2, 2.0, 2.0), L_INSERT); /* Choose one of three methods for extracting foreground pixels: * (1) Include all foreground pixels * (2) Do a morphological close/open to remove noise throughout * the image before finding a b.b. for remaining f.g. pixels * (3) Do a large vertical closing and choose the largest (by area) * component to avoid foreground noise on left and right sides */ if (edgeclean == 0) { ret = pixClipToForeground(pix2, NULL, &box1); } else if (edgeclean > 0) { val = edgeclean + 1; snprintf(cmd, 64, "c%d.%d + o%d.%d", val, val, val, val); pix3 = pixMorphSequence(pix2, cmd, 0); ret = pixClipToForeground(pix3, NULL, &box1); pixDestroy(&pix3); } else if (edgeclean == -1) { ret = pixMaxCompAfterVClosing(pix2, &box1); } else { /* edgeclean == -2 */ ret = pixFindPageInsideBlackBorder(pix2, &box1); } pixDestroy(&pix2); if (ret) { L_ERROR("no returned b.b. for foreground\n", __func__); boxDestroy(&box1); pixDestroy(&pix1); pixaDestroy(&pixa1); return NULL; } /* Transform to full resolution */ box2 = boxTransform(box1, 0, 0, 2.0, 2.0); /* full res */ boxDestroy(&box1); if (pixa1) { pix2 = pixCopy(NULL, pix1); pixRenderBoxArb(pix2, box2, 5, 255, 0, 0); pixaAddPix(pixa1, pix2, L_INSERT); } /* Grab the foreground region */ pix2 = pixClipRectangle(pix1, box2, NULL); pixDestroy(&pix1); /* Slightly thicken long horizontal lines. This prevents loss of * printed thin music staff lines due to aliasing. */ pix3 = pixMorphSequence(pix2, "o80.1 + d1.2", 0); pixOr(pix2, pix2, pix3); pixDestroy(&pix3); /* Rescale the fg and paste into the input-sized image */ pix3 = pixRescaleForCropping(pix2, w, h, lr_border, tb_border, maxwiden, NULL); pixDestroy(&pix2); if (pixa1) { pix2 = pixCopy(NULL, pix3); pixaAddPix(pixa1, pix2, L_INSERT); } /* Optionally widen image if possible, for printing on 8.5 x 11 inch * or A4 paper. Specifically, widen the image if the h/w asperity * ratio of the input image exceeds that of the selected paper by * more than 3%. Do not widen by more than 20%. */ r1 = (l_float32)h / (l_float32)w; r2 = 0.0; /* for default case */ if (printwiden == 1) /* standard */ r2 = r1 / 1.294; else if (printwiden == 2) /* A4 */ r2 = r1 / 1.414; if (r2 > 1.03) { r2 = L_MIN(r2, 1.20); lept_stderr("oversize h/w ratio by factor %6.3f\n", r2); pix4 = pixScale(pix3, r2, 1.0); } else { pix4 = pixClone(pix3); } pixDestroy(&pix3); if (pcropbox) *pcropbox = box2; else boxDestroy(&box2); if (pixa1) { pixaAddPix(pixa1, pix4, L_COPY); lept_stderr("Writing debug file: %s\n", debugfile); pixaConvertToPdf(pixa1, 0, 1.0, L_DEFAULT_ENCODE, 0, NULL, debugfile); pixaDestroy(&pixa1); } return pix4; } /*! * \brief pixMaxCompAfterVClosing() * * \param[in] pixs 1 bpp (input at 2x reduction) * \param[out] **pbox main region at input resolution (2x reduction) * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes foreground noise along left and right edges,
 *          returning a bounding box for the remaining foreground pixels
 *          at the input resolution.
 *      (2) The input %pixs should be at a resolution 100 - 150 ppi.
 *      (3) It does two 2x level1 rank binary reductions, followed
 *          by a large vertical close/open, with a very small horizontal
 *          close/oopen, and then a 4x expansion back to the input resolution.
 *      (4) To work properly with 2-column layout, if the largest and
 *          second-largest regions are comparable in size, both are included.
 *      (5) This is used as an option to pixCropImage(), when given
 *          an %edgecrop parameter of -1.
 * 
*/ static l_ok pixMaxCompAfterVClosing(PIX *pixs, BOX **pbox) { l_int32 w1, h1, w2, h2, n, empty; BOX *box1, *box2; BOXA *boxa1, *boxa2; PIX *pix1; if (!pbox) return ERROR_INT("pbox not defined", __func__, 1); *pbox = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); /* Strong vertical closing */ pix1 = pixMorphSequence(pixs, "r11 + c3.80 + o3.80 + x4", 0); pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); return ERROR_INT("pix1 is empty", __func__, 1); } /* Find the two c.c. with largest area. If they are not comparable * in area, return the bounding box of the largest; otherwise, * return the bounding box of both regions. */ boxa1 = pixConnCompBB(pix1, 8); pixDestroy(&pix1); boxa2 = boxaSort(boxa1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); if ((n = boxaGetCount(boxa2)) == 1) { *pbox = boxaGetBox(boxa2, 0, L_COPY); } else { /* 2 or more */ box1 = boxaGetBox(boxa2, 0, L_COPY); box2 = boxaGetBox(boxa2, 1, L_COPY); boxGetGeometry(box1, NULL, NULL, &w1, &h1); boxGetGeometry(box2, NULL, NULL, &w2, &h2); if (((l_float32)(w2 * h2) / (l_float32)(w1 * h1)) > 0.7) { *pbox = boxBoundingRegion(box1, box2); boxDestroy(&box1); } else { *pbox = box1; } boxDestroy(&box2); } boxaDestroy(&boxa1); boxaDestroy(&boxa2); return 0; } /*! * \brief pixFindPageInsideBlackBorder() * * \param[in] pixs 1 bpp (input at 2x reduction) * \param[out] **pbox page region at input resolution (2x reduction) * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This extracts the page region from the image, returning a
 *          bounding box for the remaining foreground pixels.  It is designed
 *          to work when the page is within a fairly solid black border.
 *      (2) It returns a bounding box for the page region at the input res.
 *      (3) The input %pixs is expected to be at a resolution 100 - 150 ppi.
 *      (4) This is used as an option to pixCropImage(), when given an
 *          %edgecrop parameter of -2.
 * 
*/ static l_ok pixFindPageInsideBlackBorder(PIX *pixs, BOX **pbox) { l_int32 empty, x, y; BOX *box1, *box2, *box3; BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pix3; if (!pbox) return ERROR_INT("pbox not defined", __func__, 1); *pbox = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); /* Reduce 4x and remove some remaining small foreground */ pix1 = pixMorphSequence(pixs, "r22 + c5.5 + o7.7", 0); pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); return ERROR_INT("pix1 is empty", __func__, 1); } /* Photoinvert image and Find the c.c. with largest area. */ pixInvert(pix1, pix1); pix2 = pixMorphSequence(pix1, "c11.11 + o11.11", 0); pixDestroy(&pix1); boxa1 = pixConnCompBB(pix2, 8); pixDestroy(&pix2); boxa2 = boxaSort(boxa1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); box1 = boxaGetBox(boxa2, 0, L_COPY); /* largest by area */ boxAdjustSides(box1, box1, 5, -5, 5, -5); box2 = boxTransform(box1, 0, 0, 4.0, 4.0); /* Crop this page from the original image and find the foreground */ pix3 = pixClipRectangle(pixs, box2, NULL); pixClipToForeground(pix3, NULL, &box3); pixDestroy(&pix3); boxGetGeometry(box2, &x, &y, NULL, NULL); *pbox = boxTransform(box3, x, y, 1.0, 1.0); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); return 0; } /*! * \brief pixRescaleForCropping() * * \param[in] pixs 1 bpp * \param[in] w width of output lmage * \param[in] h height of output lmage * \param[in] lr_border cleared final border pixels on left and right * \param[in] tb_border cleared final border pixels on top and bottom * \param[in] maxwiden max fractional horizontal stretch allowed; >= 1.0 * \param[out] *ppixsc [optional] rescaled foreground region * \return pixd output image, or NULL on error * *
 * Notes:
 *      (1) This rescales %pixs to fit maximally within an image of
 *          size (w x h), under two conditions:
 *          (a) the final image has cleared border regions given by the
 *              input parameters %lr_border and %tb_border, and
 *          (b) the input image is first isotropically scaled to fit
 *              maximally within the allowed final region, and then further
 *              maxiximally widened, subject to the constraints of the
 *              cleared border and the %maxwiden parameter.
 *      (2) The cleared border pixel parameters must be >= 0.
 *      (3) If there is extra horizontal stretching by a factor
 *          %maxwiden larger than about 1.15, the appearance may be
 *          unpleasingly distorted; hence the suggestion not to exceed it.
 * 
*/ static PIX * pixRescaleForCropping(PIX *pixs, l_int32 w, l_int32 h, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, PIX **ppixsc) { static l_int32 first_time = TRUE; l_int32 wi, hi, wmax, hmax, wn, wf, hf, xf; l_float32 ratio, scaleh, scalew, scalewid; PIX *pix1, *pixd; if (ppixsc) *ppixsc = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (lr_border < 0) lr_border = 0; if (tb_border < 0) tb_border = 0; maxwiden = L_MAX(1.0, maxwiden); if (maxwiden > 1.15) L_WARNING("maxwiden = %f > 1.15; suggest between 1.0 and 1.15\n", __func__, maxwiden); /* Rescale the foreground region. * First, decide if scaling is to full width or full height. * If scaling to full height, determine how much additional * width widening is possible, given the maxwiden constraint. * If scaling to full width, both width and height are * scaled isotropically. Scaling is done so that the resulting * foreground is maximally widened, so it can be horizontally * centered in an image of size (w x h), less %lr_border * on each side. */ pixGetDimensions(pixs, &wi, &hi, NULL); wmax = w - 2 * lr_border; hmax = h - 2 * tb_border; ratio = (l_float32)(wmax * hi) / (l_float32)(hmax * wi); if (ratio >= 1.0) { /* width can be widened after isotropic scaling */ scaleh = (l_float32)hmax / (l_float32)hi; wn = scaleh * wi; /* scaled but not widened */ scalewid = L_MIN(maxwiden, (l_float32)wmax / (l_float32)wn); scalew = scaleh * scalewid; wf = scalew * wi; hf = hmax; /* scale to full height */ pix1 = pixScale(pixs, scalew, scaleh); if (first_time == TRUE) { lept_stderr("Width stretched by factor %5.3f\n", scalewid); first_time = FALSE; } xf = (w - wf) / 2.0; } else { /* width cannot be widened after isotropic scaling */ scalew = (l_float32)wmax / (l_float32)wi; pix1 = pixScale(pixs, scalew, scalew); wf = wmax; /* scale to full width */ hf = scalew * hi; /* no extra vertical stretching allowed */ xf = lr_border; } /* Paste it, horizontally centered and vertically placed as * high as allowed (by %tb_border) into the final page image. */ pixd = pixCreate(w, h, 1); pixRasterop(pixd, xf, tb_border, wf, hf, PIX_SRC, pix1, 0, 0); if (ppixsc) *ppixsc = pix1; else pixDestroy(&pix1); return pixd; } /*! * \brief pixCleanImage() * * \param[in] pixs full resolution (any type or depth) * \param[in] contrast vary contrast: 1 = lightest; 10 = darkest; * suggest 1 unless light features are being lost * \param[in] rotation cw by 90 degrees: {0,1,2,3} represent * 0, 90, 180 and 270 degree cw rotations * \param[in] scale 1 (no scaling) or 2 (2x upscaling) * \param[in] opensize opening size of structuring element for noise * removal: {0 or 1 to skip; 2, 3 for opening} * \return cleaned pix, or NULL on error * *
 * Notes:
 *    (1) This deskews, optionally rotates and darkens, cleans background
 *        to white, binarizes and optionally removes small noise.
 *    (2) For color and grayscale input, local background normalization is
 *        done to 200, and a threshold of 180 sets the maximum foreground
 *        value in the normalized image.
 *    (3) The %contrast parameter adjusts the binarization to avoid losing
 *        lighter input pixels.  Contrast is increased as %contrast increases
 *        from 1 to 10.
 *    (4) The %scale parameter controls the thresholding to 1 bpp. Two values:
 *            1 = threshold
 *            2 = linear interpolated 2x upscaling before threshold.
 *    (5) The #opensize parameter is the size of a square SEL used with
 *        opening to remove small speckle noise.  Allowed open sizes are 2,3.
 *        If this is to be used, try 2 before 3.
 *    (6) This does the image processing for cleanTo1bppFilesToPdf() and
 *        prog/cleanpdf.c.
 * 
*/ PIX * pixCleanImage(PIX *pixs, l_int32 contrast, l_int32 rotation, l_int32 scale, l_int32 opensize) { char sequence[32]; PIX *pix1, *pix2, *pix3, *pix4, *pix5; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (rotation < 0 || rotation > 3) { L_ERROR("invalid rotation = %d; rotation must be in {0,1,2,3}\n", __func__, rotation); return NULL; } if (contrast < 1 || contrast > 10) { L_ERROR("invalid contrast = %d; contrast must be in [1...10]\n", __func__, contrast); return NULL; } if (scale != 1 && scale != 2) { L_ERROR("invalid scale = %d; scale must be 1 or 2\n", __func__, opensize); return NULL; } if (opensize > 3) { L_ERROR("invalid opensize = %d; opensize must be <= 3\n", __func__, opensize); return NULL; } if (pixGetDepth(pixs) == 1) { if (rotation > 0) pix1 = pixRotateOrth(pixs, rotation); else pix1 = pixClone(pixs); pix2 = pixFindSkewAndDeskew(pix1, 2, NULL, NULL); if (scale == 2) pix4 = pixExpandBinaryReplicate(pix2, 2, 2); else /* scale == 1 */ pix4 = pixClone(pix2); } else { pix1 = pixConvertTo8MinMax(pixs); if (rotation > 0) pix2 = pixRotateOrth(pix1, rotation); else pix2 = pixClone(pix1); pix3 = pixFindSkewAndDeskew(pix2, 2, NULL, NULL); pix4 = pixBackgroundNormTo1MinMax(pix3, contrast, scale); pixDestroy(&pix3); } if (opensize == 2 || opensize == 3) { snprintf(sequence, sizeof(sequence), "o%d.%d", opensize, opensize); pix5 = pixMorphSequence(pix4, sequence, 0); } else { pix5 = pixClone(pix4); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix4); return pix5; } /*! * \brief pixFindPageForeground() * * \param[in] pixs full resolution (any type or depth) * \param[in] threshold for binarization; typically about 128 * \param[in] mindist min distance of text from border to allow * cleaning near border; at 2x reduction, this * should be larger than 50; typically about 70 * \param[in] erasedist when conditions are satisfied, erase anything * within this distance of the edge; * typically 20-30 at 2x reduction * \param[in] showmorph debug: set to a negative integer to show steps * in generating masks; this is typically used * for debugging region extraction * \param[in] pixac debug: allocate outside and pass this in to * accumulate results of each call to this function, * which can be displayed in a mosaic or a pdf. * \return box region including foreground, with some pixel noise * removed, or NULL if not found * *
 * Notes:
 *      (1) This doesn't simply crop to the fg.  It attempts to remove
 *          pixel noise and junk at the edge of the image before cropping.
 *          The input %threshold is used if pixs is not 1 bpp.
 *      (2) This is not intended to work on small thumbnails.  The
 *          dimensions of pixs must be at least MinWidth x MinHeight.
 *      (3) Debug: set showmorph to display the intermediate image in
 *          the morphological operations on this page.
 *      (4) Debug: to get pdf output of results when called repeatedly,
 *          call with an existing pixac, which will add an image of this page,
 *          with the fg outlined.  If no foreground is found, there is
 *          no output for this page image.
 * 
*/ BOX * pixFindPageForeground(PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 showmorph, PIXAC *pixac) { l_int32 flag, nbox, intersects; l_int32 w, h, bx, by, bw, bh, left, right, top, bottom; PIX *pixb, *pixb2, *pixseed, *pixsf, *pixm, *pix1, *pixg2; BOX *box, *boxfg, *boxin, *boxd; BOXA *ba1, *ba2; if (!pixs) return (BOX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < MinWidth || h < MinHeight) { L_ERROR("pix too small: w = %d, h = %d\n", __func__, w, h); return NULL; } /* Binarize, downscale by 0.5, remove the noise to generate a seed, * and do a seedfill back from the seed into those 8-connected * components of the binarized image for which there was at least * one seed pixel. */ flag = (showmorph) ? 100 : 0; pixb = pixConvertTo1(pixs, threshold); pixb2 = pixScale(pixb, 0.5, 0.5); pixseed = pixMorphSequence(pixb2, "o1.2 + c9.9 + o3.3", flag); pix1 = pixMorphSequence(pixb2, "o50.1", 0); pixOr(pixseed, pixseed, pix1); pixDestroy(&pix1); pix1 = pixMorphSequence(pixb2, "o1.50", 0); pixOr(pixseed, pixseed, pix1); pixDestroy(&pix1); pixsf = pixSeedfillBinary(NULL, pixseed, pixb2, 8); pixm = pixRemoveBorderConnComps(pixsf, 8); /* Now, where is the main block of text? We want to remove noise near * the edge of the image, but to do that, we have to be convinced that * (1) there is noise and (2) it is far enough from the text block * and close enough to the edge. For each edge, if the block * is more than mindist from that edge, then clean 'erasedist' * pixels from the edge. */ pix1 = pixMorphSequence(pixm, "c50.50", flag); ba1 = pixConnComp(pix1, NULL, 8); ba2 = boxaSort(ba1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); pixGetDimensions(pix1, &w, &h, NULL); nbox = boxaGetCount(ba2); if (nbox > 1) { box = boxaGetBox(ba2, 0, L_CLONE); boxGetGeometry(box, &bx, &by, &bw, &bh); left = (bx > mindist) ? erasedist : 0; right = (w - bx - bw > mindist) ? erasedist : 0; top = (by > mindist) ? erasedist : 0; bottom = (h - by - bh > mindist) ? erasedist : 0; pixSetOrClearBorder(pixm, left, right, top, bottom, PIX_CLR); boxDestroy(&box); } pixDestroy(&pix1); boxaDestroy(&ba1); boxaDestroy(&ba2); /* Locate the foreground region; don't bother cropping */ pixClipToForeground(pixm, NULL, &boxfg); /* Sanity check the fg region. Make sure it's not confined * to a thin boundary on the left and right sides of the image, * in which case it is likely to be noise. */ if (boxfg) { boxin = boxCreate(0.1 * w, 0, 0.8 * w, h); boxIntersects(boxfg, boxin, &intersects); boxDestroy(&boxin); if (!intersects) boxDestroy(&boxfg); } boxd = NULL; if (boxfg) { boxAdjustSides(boxfg, boxfg, -2, 2, -2, 2); /* tiny expansion */ boxd = boxTransform(boxfg, 0, 0, 2.0, 2.0); /* Save the debug image showing the box for this page */ if (pixac) { pixg2 = pixConvert1To4Cmap(pixb); pixRenderBoxArb(pixg2, boxd, 3, 255, 0, 0); pixacompAddPix(pixac, pixg2, IFF_DEFAULT); pixDestroy(&pixg2); } } pixDestroy(&pixb); pixDestroy(&pixb2); pixDestroy(&pixseed); pixDestroy(&pixsf); pixDestroy(&pixm); boxDestroy(&boxfg); return boxd; } /*------------------------------------------------------------------* * Extraction of characters from image with only text * *------------------------------------------------------------------*/ /*! * \brief pixSplitIntoCharacters() * * \param[in] pixs 1 bpp, contains only deskewed text * \param[in] minw min component width for initial filtering; typ. 4 * \param[in] minh min component height for initial filtering; typ. 4 * \param[out] pboxa [optional] character bounding boxes * \param[out] ppixa [optional] character images * \param[out] ppixdebug [optional] showing splittings * * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a simple function that attempts to find split points
 *          based on vertical pixel profiles.
 *      (2) It should be given an image that has an arbitrary number
 *          of text characters.
 *      (3) The returned pixa includes the boxes from which the
 *          (possibly split) components are extracted.
 * 
*/ l_ok pixSplitIntoCharacters(PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug) { l_int32 ncomp, i, xoff, yoff; BOXA *boxa1, *boxa2, *boxat1, *boxat2, *boxad; BOXAA *baa; PIX *pix, *pix1, *pix2, *pixdb; PIXA *pixa1, *pixadb; if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (ppixdebug) *ppixdebug = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); /* Remove the small stuff */ pix1 = pixSelectBySize(pixs, minw, minh, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); /* Small vertical close for consolidation */ pix2 = pixMorphSequence(pix1, "c1.10", 0); pixDestroy(&pix1); /* Get the 8-connected components */ boxa1 = pixConnComp(pix2, &pixa1, 8); pixDestroy(&pix2); boxaDestroy(&boxa1); /* Split the components if obvious */ ncomp = pixaGetCount(pixa1); boxa2 = boxaCreate(ncomp); pixadb = (ppixdebug) ? pixaCreate(ncomp) : NULL; for (i = 0; i < ncomp; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); if (ppixdebug) { boxat1 = pixSplitComponentWithProfile(pix, 10, 7, &pixdb); if (pixdb) pixaAddPix(pixadb, pixdb, L_INSERT); } else { boxat1 = pixSplitComponentWithProfile(pix, 10, 7, NULL); } pixaGetBoxGeometry(pixa1, i, &xoff, &yoff, NULL, NULL); boxat2 = boxaTransform(boxat1, xoff, yoff, 1.0, 1.0); boxaJoin(boxa2, boxat2, 0, -1); pixDestroy(&pix); boxaDestroy(&boxat1); boxaDestroy(&boxat2); } pixaDestroy(&pixa1); /* Generate the debug image */ if (ppixdebug) { if (pixaGetCount(pixadb) > 0) { *ppixdebug = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 20, 1); } pixaDestroy(&pixadb); } /* Do a 2D sort on the bounding boxes, and flatten the result to 1D */ baa = boxaSort2d(boxa2, NULL, 0, 0, 5); boxad = boxaaFlattenToBoxa(baa, NULL, L_CLONE); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Optionally extract the pieces from the input image */ if (ppixa) *ppixa = pixClipRectangles(pixs, boxad); if (pboxa) *pboxa = boxad; else boxaDestroy(&boxad); return 0; } /*! * \brief pixSplitComponentWithProfile() * * \param[in] pixs 1 bpp, exactly one connected component * \param[in] delta distance used in extrema finding in a numa; typ. 10 * \param[in] mindel minimum required difference between profile * minimum and profile values +2 and -2 away; typ. 7 * \param[out] ppixdebug [optional] debug image of splitting * \return boxa of c.c. after splitting, or NULL on error * *
 * Notes:
 *      (1) This will split the most obvious cases of touching characters.
 *          The split points it is searching for are narrow and deep
 *          minimima in the vertical pixel projection profile, after a
 *          large vertical closing has been applied to the component.
 * 
*/ BOXA * pixSplitComponentWithProfile(PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug) { l_int32 w, h, n2, i, firstmin, xmin, xshift; l_int32 nmin, nleft, nright, nsplit, isplit, ncomp; l_int32 *array1, *array2; BOX *box; BOXA *boxad; NUMA *na1, *na2, *nasplit; PIX *pix1, *pixdb; if (ppixdebug) *ppixdebug = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixa undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); /* Closing to consolidate characters vertically */ pix1 = pixCloseSafeBrick(NULL, pixs, 1, 100); /* Get extrema of column projections */ boxad = boxaCreate(2); na1 = pixCountPixelsByColumn(pix1); /* w elements */ pixDestroy(&pix1); na2 = numaFindExtrema(na1, delta, NULL); n2 = numaGetCount(na2); if (n2 < 3) { /* no split possible */ box = boxCreate(0, 0, w, h); boxaAddBox(boxad, box, L_INSERT); numaDestroy(&na1); numaDestroy(&na2); return boxad; } /* Look for sufficiently deep and narrow minima. * All minima of of interest must be surrounded by max on each * side. firstmin is the index of first possible minimum. */ array1 = numaGetIArray(na1); array2 = numaGetIArray(na2); if (ppixdebug) numaWriteStderr(na2); firstmin = (array1[array2[0]] > array1[array2[1]]) ? 1 : 2; nasplit = numaCreate(n2); /* will hold split locations */ for (i = firstmin; i < n2 - 1; i+= 2) { xmin = array2[i]; nmin = array1[xmin]; if (xmin + 2 >= w) break; /* no more splits possible */ nleft = array1[xmin - 2]; nright = array1[xmin + 2]; if (ppixdebug) { lept_stderr( "Splitting: xmin = %d, w = %d; nl = %d, nmin = %d, nr = %d\n", xmin, w, nleft, nmin, nright); } if (nleft - nmin >= mindel && nright - nmin >= mindel) /* split */ numaAddNumber(nasplit, xmin); } nsplit = numaGetCount(nasplit); #if 0 if (ppixdebug && nsplit > 0) { lept_mkdir("lept/split"); gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/split/split", NULL); } #endif numaDestroy(&na1); numaDestroy(&na2); LEPT_FREE(array1); LEPT_FREE(array2); if (nsplit == 0) { /* no splitting */ numaDestroy(&nasplit); box = boxCreate(0, 0, w, h); boxaAddBox(boxad, box, L_INSERT); return boxad; } /* Use split points to generate b.b. after splitting */ for (i = 0, xshift = 0; i < nsplit; i++) { numaGetIValue(nasplit, i, &isplit); box = boxCreate(xshift, 0, isplit - xshift, h); boxaAddBox(boxad, box, L_INSERT); xshift = isplit + 1; } box = boxCreate(xshift, 0, w - xshift, h); boxaAddBox(boxad, box, L_INSERT); numaDestroy(&nasplit); if (ppixdebug) { pixdb = pixConvertTo32(pixs); ncomp = boxaGetCount(boxad); for (i = 0; i < ncomp; i++) { box = boxaGetBox(boxad, i, L_CLONE); pixRenderBoxBlend(pixdb, box, 1, 255, 0, 0, 0.5); boxDestroy(&box); } *ppixdebug = pixdb; } return boxad; } /*------------------------------------------------------------------* * Extraction of lines of text * *------------------------------------------------------------------*/ /*! * \brief pixExtractTextlines() * * \param[in] pixs any depth, assumed to have nearly horizontal text * \param[in] maxw, maxh initial filtering: remove any components in pixs * with components larger than maxw or maxh * \param[in] minw, minh final filtering: remove extracted 'lines' * with sizes smaller than minw or minh; use * 0 for default. * \param[in] adjw, adjh final adjustment of boxes representing each * text line. If > 0, these increase the box * size at each edge by this amount. * \param[in] pixadb pixa for saving intermediate steps; NULL to omit * \return pixa of textline images, including bounding boxes, or * NULL on error * *
 * Notes:
 *      (1) This function assumes that textline fragments have sufficient
 *          vertical separation and small enough skew so that a
 *          horizontal dilation sufficient to join words will not join
 *          textlines.  It does not guarantee that horizontally adjacent
 *          textline fragments on the same line will be joined.
 *      (2) For images with multiple columns, it attempts to avoid joining
 *          textlines across the space between columns.  If that is not
 *          a concern, you can also use pixExtractRawTextlines(),
 *          which will join them with alacrity.
 *      (3) This first removes components from pixs that are either
 *          wide (> %maxw) or tall (> %maxh).
 *      (4) A final filtering operation removes small components, such
 *          that width < %minw or height < %minh.
 *      (5) For reasonable accuracy, the resolution of pixs should be
 *          at least 100 ppi.  For reasonable efficiency, the resolution
 *          should not exceed 600 ppi.
 *      (6) This can be used to determine if some region of a scanned
 *          image is horizontal text.
 *      (7) As an example, for a pix with resolution 300 ppi, a reasonable
 *          set of parameters is:
 *             pixExtractTextlines(pix, 150, 150, 36, 20, 5, 5, NULL);
 *          The defaults minw and minh for 300 ppi are about 36 and 20,
 *          so the same result is obtained with:
 *             pixExtractTextlines(pix, 150, 150, 0, 0, 5, 5, NULL);
 *      (8) The output pixa is composed of subimages, one for each textline,
 *          and the boxa in the pixa tells where in %pixs each textline goes.
 * 
*/ PIXA * pixExtractTextlines(PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 minw, l_int32 minh, l_int32 adjw, l_int32 adjh, PIXA *pixadb) { char buf[64]; l_int32 res, csize, empty; BOXA *boxa1, *boxa2, *boxa3; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2, *pixa3; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Binarize carefully, if necessary */ if (pixGetDepth(pixs) > 1) { pix2 = pixConvertTo8(pixs, FALSE); pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 190); pix1 = pixThresholdToBinary(pix3, 150); pixDestroy(&pix2); pixDestroy(&pix3); } else { pix1 = pixClone(pixs); } pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); L_INFO("no fg pixels in input image\n", __func__); return NULL; } if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Remove any very tall or very wide connected components */ pix2 = pixSelectBySize(pix1, maxw, maxh, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); pixDestroy(&pix1); /* Filter to solidify the text lines within the x-height region. * The closing (csize) bridges gaps between words. The opening * removes isolated bridges between textlines. */ if ((res = pixGetXRes(pixs)) == 0) { L_INFO("Resolution is not set: setting to 300 ppi\n", __func__); res = 300; } csize = L_MIN(120., 60.0 * res / 300.0); snprintf(buf, sizeof(buf), "c%d.1 + o%d.1", csize, csize / 3); pix3 = pixMorphCompSequence(pix2, buf, 0); if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); /* Extract the connected components. These should be dilated lines */ boxa1 = pixConnComp(pix3, &pixa1, 4); if (pixadb) { pix1 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); } /* Set minw, minh if default is requested */ minw = (minw != 0) ? minw : (l_int32)(0.12 * res); minh = (minh != 0) ? minh : (l_int32)(0.07 * res); /* Remove line components that are too small */ pixa2 = pixaSelectBySize(pixa1, minw, minh, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); if (pixadb) { pix1 = pixaDisplayRandomCmap(pixa2, 0, 0); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); pix1 = pixConvertTo32(pix2); pixRenderBoxaArb(pix1, pixa2->boxa, 2, 255, 0, 0); pixaAddPix(pixadb, pix1, L_INSERT); } /* Selectively AND with the version before dilation, and save */ boxa2 = pixaGetBoxa(pixa2, L_CLONE); boxa3 = boxaAdjustSides(boxa2, -adjw, adjw, -adjh, adjh); pixa3 = pixClipRectangles(pix2, boxa3); if (pixadb) { pix1 = pixaDisplayRandomCmap(pixa3, 0, 0); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); } pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa1); pixaDestroy(&pixa2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); return pixa3; } /*! * \brief pixExtractRawTextlines() * * \param[in] pixs any depth, assumed to have nearly horizontal text * \param[in] maxw, maxh initial filtering: remove any components in pixs * with components larger than maxw or maxh; * use 0 for default values. * \param[in] adjw, adjh final adjustment of boxes representing each * text line. If > 0, these increase the box * size at each edge by this amount. * \param[in] pixadb pixa for saving intermediate steps; NULL to omit * \return pixa of textline images, including bounding boxes, or * NULL on error * *
 * Notes:
 *      (1) This function assumes that textlines have sufficient
 *          vertical separation and small enough skew so that a
 *          horizontal dilation sufficient to join words will not join
 *          textlines.  It aggressively joins textlines across multiple
 *          columns, so if that is not desired, you must either (a) make
 *          sure that %pixs is a single column of text or (b) use instead
 *          pixExtractTextlines(), which is more conservative
 *          about joining text fragments that have vertical overlap.
 *      (2) This first removes components from pixs that are either
 *          very wide (> %maxw) or very tall (> %maxh).
 *      (3) For reasonable accuracy, the resolution of pixs should be
 *          at least 100 ppi.  For reasonable efficiency, the resolution
 *          should not exceed 600 ppi.
 *      (4) This can be used to determine if some region of a scanned
 *          image is horizontal text.
 *      (5) As an example, for a pix with resolution 300 ppi, a reasonable
 *          set of parameters is:
 *             pixExtractRawTextlines(pix, 150, 150, 0, 0, NULL);
 *      (6) The output pixa is composed of subimages, one for each textline,
 *          and the boxa in the pixa tells where in %pixs each textline goes.
 * 
*/ PIXA * pixExtractRawTextlines(PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 adjw, l_int32 adjh, PIXA *pixadb) { char buf[64]; l_int32 res, csize, empty; BOXA *boxa1, *boxa2, *boxa3; BOXAA *baa1; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Set maxw, maxh if default is requested */ if ((res = pixGetXRes(pixs)) == 0) { L_INFO("Resolution is not set: setting to 300 ppi\n", __func__); res = 300; } maxw = (maxw != 0) ? maxw : (l_int32)(0.5 * res); maxh = (maxh != 0) ? maxh : (l_int32)(0.5 * res); /* Binarize carefully, if necessary */ if (pixGetDepth(pixs) > 1) { pix2 = pixConvertTo8(pixs, FALSE); pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 190); pix1 = pixThresholdToBinary(pix3, 150); pixDestroy(&pix2); pixDestroy(&pix3); } else { pix1 = pixClone(pixs); } pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); L_INFO("no fg pixels in input image\n", __func__); return NULL; } if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Remove any very tall or very wide connected components */ pix2 = pixSelectBySize(pix1, maxw, maxh, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); pixDestroy(&pix1); /* Filter to solidify the text lines within the x-height region. * The closing (csize) bridges gaps between words. */ csize = L_MIN(120., 60.0 * res / 300.0); snprintf(buf, sizeof(buf), "c%d.1", csize); pix3 = pixMorphCompSequence(pix2, buf, 0); if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); /* Extract the connected components. These should be dilated lines */ boxa1 = pixConnComp(pix3, &pixa1, 4); if (pixadb) { pix1 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); } /* Do a 2-d sort, and generate a bounding box for each set of text * line segments that is aligned horizontally (i.e., has vertical * overlap) into a box representing a single text line. */ baa1 = boxaSort2d(boxa1, NULL, -1, -1, 5); boxaaGetExtent(baa1, NULL, NULL, NULL, &boxa2); if (pixadb) { pix1 = pixConvertTo32(pix2); pixRenderBoxaArb(pix1, boxa2, 2, 255, 0, 0); pixaAddPix(pixadb, pix1, L_INSERT); } /* Optionally adjust the sides of each text line box, and then * use the boxes to generate a pixa of the text lines. */ boxa3 = boxaAdjustSides(boxa2, -adjw, adjw, -adjh, adjh); pixa2 = pixClipRectangles(pix2, boxa3); if (pixadb) { pix1 = pixaDisplayRandomCmap(pixa2, 0, 0); pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); pixaAddPix(pixadb, pix1, L_INSERT); } pixDestroy(&pix2); pixDestroy(&pix3); pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaaDestroy(&baa1); return pixa2; } /*------------------------------------------------------------------* * How many text columns * *------------------------------------------------------------------*/ /*! * \brief pixCountTextColumns() * * \param[in] pixs 1 bpp * \param[in] deltafract fraction of (max - min) to be used in the delta * for extrema finding; typ 0.3 * \param[in] peakfract fraction of (max - min) to be used to threshold * the peak value; typ. 0.5 * \param[in] clipfract fraction of image dimension removed on each side; * typ. 0.1, which leaves w and h reduced by 0.8 * \param[out] pncols number of columns; -1 if not determined * \param[in] pixadb [optional] pre-allocated, for showing * intermediate computation; use null to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is assumed that pixs has the correct resolution set.
 *          If the resolution is 0, we set to 300 and issue a warning.
 *      (2) If necessary, the image is scaled to between 37 and 75 ppi;
 *          most of the processing is done at this resolution.
 *      (3) If no text is found (essentially a blank page),
 *          this returns ncols = 0.
 *      (4) For debug output, input a pre-allocated pixa.
 * 
*/ l_ok pixCountTextColumns(PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb) { l_int32 w, h, res, i, n, npeak; l_float32 scalefact, redfact, minval, maxval, val4, val5, fract; BOX *box; NUMA *na1, *na2, *na3, *na4, *na5; PIX *pix1, *pix2, *pix3, *pix4, *pix5; if (!pncols) return ERROR_INT("&ncols not defined", __func__, 1); *pncols = -1; /* init */ if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (deltafract < 0.15 || deltafract > 0.75) L_WARNING("deltafract not in [0.15 ... 0.75]\n", __func__); if (peakfract < 0.25 || peakfract > 0.9) L_WARNING("peakfract not in [0.25 ... 0.9]\n", __func__); if (clipfract < 0.0 || clipfract >= 0.5) return ERROR_INT("clipfract not in [0.0 ... 0.5)\n", __func__, 1); if (pixadb) pixaAddPix(pixadb, pixs, L_COPY); /* Scale to between 37.5 and 75 ppi */ if ((res = pixGetXRes(pixs)) == 0) { L_WARNING("resolution undefined; set to 300\n", __func__); pixSetResolution(pixs, 300, 300); res = 300; } if (res < 37) { L_WARNING("resolution %d very low\n", __func__, res); scalefact = 37.5 / res; pix1 = pixScale(pixs, scalefact, scalefact); } else { redfact = (l_float32)res / 37.5; if (redfact < 2.0) pix1 = pixClone(pixs); else if (redfact < 4.0) pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); else if (redfact < 8.0) pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 0, 0); else if (redfact < 16.0) pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 2, 0); else pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 2, 2); } if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Crop inner 80% of image */ pixGetDimensions(pix1, &w, &h, NULL); box = boxCreate(clipfract * w, clipfract * h, (1.0 - 2 * clipfract) * w, (1.0 - 2 * clipfract) * h); pix2 = pixClipRectangle(pix1, box, NULL); pixGetDimensions(pix2, &w, &h, NULL); boxDestroy(&box); if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); /* Deskew */ pix3 = pixDeskew(pix2, 0); if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); /* Close to increase column counts for text */ pix4 = pixCloseSafeBrick(NULL, pix3, 5, 21); if (pixadb) pixaAddPix(pixadb, pix4, L_COPY); pixInvert(pix4, pix4); na1 = pixCountByColumn(pix4, NULL); if (pixadb) { gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot", NULL); pix5 = pixRead("/tmp/lept/plot.png"); pixaAddPix(pixadb, pix5, L_INSERT); } /* Analyze the column counts. na4 gives the locations of * the extrema in normalized units (0.0 to 1.0) across the * cropped image. na5 gives the magnitude of the * extrema, normalized to the dynamic range. The peaks * are values that are at least peakfract of (max - min). */ numaGetMax(na1, &maxval, NULL); numaGetMin(na1, &minval, NULL); fract = (l_float32)(maxval - minval) / h; /* is there much at all? */ if (fract < 0.05) { L_INFO("very little content on page; 0 text columns\n", __func__); *pncols = 0; } else { na2 = numaFindExtrema(na1, deltafract * (maxval - minval), &na3); na4 = numaTransform(na2, 0, 1.0 / w); na5 = numaTransform(na3, -minval, 1.0 / (maxval - minval)); n = numaGetCount(na4); for (i = 0, npeak = 0; i < n; i++) { numaGetFValue(na4, i, &val4); numaGetFValue(na5, i, &val5); if (val4 > 0.3 && val4 < 0.7 && val5 >= peakfract) { npeak++; L_INFO("Peak(loc,val) = (%5.3f,%5.3f)\n", __func__, val4, val5); } } *pncols = npeak + 1; numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); numaDestroy(&na1); return 0; } /*------------------------------------------------------------------* * Decision text vs photo * *------------------------------------------------------------------*/ /*! * \brief pixDecideIfText() * * \param[in] pixs any depth * \param[in] box [optional] if null, use entire pixs * \param[out] pistext 1 if text; 0 if photo; -1 if not determined or empty * \param[in] pixadb [optional] pre-allocated, for showing intermediate * computation; use NULL to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is assumed that pixs has the correct resolution set.
 *          If the resolution is 0, we set to 300 and issue a warning.
 *      (2) If necessary, the image is scaled to 300 ppi; most of the
 *          processing is done at this resolution.
 *      (3) Text is assumed to be in horizontal lines.
 *      (4) Because thin vertical lines are removed before filtering for
 *          text lines, this should identify tables as text.
 *      (5) If %box is null and pixs contains both text lines and line art,
 *          this function might return %istext == true.
 *      (6) If the input pixs is empty, or for some other reason the
 *          result can not be determined, return -1.
 *      (7) For debug output, input a pre-allocated pixa.
 * 
*/ l_ok pixDecideIfText(PIX *pixs, BOX *box, l_int32 *pistext, PIXA *pixadb) { l_int32 i, empty, maxw, w, h, n1, n2, n3, minlines, big_comp; l_float32 ratio1, ratio2; L_BMF *bmf; BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxa5; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa1; SEL *sel1; if (!pistext) return ERROR_INT("&istext not defined", __func__, 1); *pistext = -1; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Crop, convert to 1 bpp, 300 ppi */ if ((pix1 = pixPrepare1bpp(pixs, box, 0.1, 300)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); pixZero(pix1, &empty); if (empty) { pixDestroy(&pix1); L_INFO("pix is empty\n", __func__); return 0; } w = pixGetWidth(pix1); /* Identify and remove tall, thin vertical lines (as found in tables) * that are up to 9 pixels wide. Make a hit-miss sel with an * 81 pixel vertical set of hits and with 3 pairs of misses that * are 10 pixels apart horizontally. It is necessary to use a * hit-miss transform; if we only opened with a vertical line of * hits, we would remove solid regions of pixels that are not * text or vertical lines. */ pix2 = pixCreate(11, 81, 1); for (i = 0; i < 81; i++) pixSetPixel(pix2, 5, i, 1); sel1 = selCreateFromPix(pix2, 40, 5, NULL); selSetElement(sel1, 20, 0, SEL_MISS); selSetElement(sel1, 20, 10, SEL_MISS); selSetElement(sel1, 40, 0, SEL_MISS); selSetElement(sel1, 40, 10, SEL_MISS); selSetElement(sel1, 60, 0, SEL_MISS); selSetElement(sel1, 60, 10, SEL_MISS); pix3 = pixHMT(NULL, pix1, sel1); pix4 = pixSeedfillBinaryRestricted(NULL, pix3, pix1, 8, 5, 1000); pix5 = pixXor(NULL, pix1, pix4); pixDestroy(&pix2); selDestroy(&sel1); /* Convert the text lines to separate long horizontal components */ pix6 = pixMorphCompSequence(pix5, "c30.1 + o15.1 + c60.1 + o2.2", 0); /* Estimate the distance to the bottom of the significant region */ if (box) { /* use full height */ pixGetDimensions(pix6, NULL, &h, NULL); } else { /* use height of region that has text lines */ pixFindThreshFgExtent(pix6, 400, NULL, &h); } if (pixadb) { bmf = bmfCreate(NULL, 6); pixaAddPixWithText(pixadb, pix1, 1, bmf, "threshold/crop to binary", 0x0000ff00, L_ADD_BELOW); pixaAddPixWithText(pixadb, pix3, 2, bmf, "hit-miss for vertical line", 0x0000ff00, L_ADD_BELOW); pixaAddPixWithText(pixadb, pix4, 2, bmf, "restricted seed-fill", 0x0000ff00, L_ADD_BELOW); pixaAddPixWithText(pixadb, pix5, 2, bmf, "remove using xor", 0x0000ff00, L_ADD_BELOW); pixaAddPixWithText(pixadb, pix6, 2, bmf, "make long horiz components", 0x0000ff00, L_ADD_BELOW); } /* Extract the connected components */ if (pixadb) { boxa1 = pixConnComp(pix6, &pixa1, 8); pix7 = pixaDisplayRandomCmap(pixa1, 0, 0); pixcmapResetColor(pixGetColormap(pix7), 0, 255, 255, 255); pixaAddPixWithText(pixadb, pix7, 2, bmf, "show connected components", 0x0000ff00, L_ADD_BELOW); pixDestroy(&pix7); pixaDestroy(&pixa1); bmfDestroy(&bmf); } else { boxa1 = pixConnComp(pix6, NULL, 8); } /* Analyze the connected components. The following conditions * at 300 ppi must be satisfied if the image is text: * (1) There are no components that are wider than 400 pixels and * taller than 175 pixels. * (2) The second longest component is at least 60% of the * (possibly cropped) image width. This catches images * that don't have any significant content. * (3) Of the components that are at least 40% of the length * of the longest (n2), at least 80% of them must not exceed * 60 pixels in height. * (4) The number of those long, thin components (n3) must * equal or exceed a minimum that scales linearly with the * image height. * Most images that are not text fail more than one of these * conditions. */ boxa2 = boxaSort(boxa1, L_SORT_BY_WIDTH, L_SORT_DECREASING, NULL); boxaGetBoxGeometry(boxa2, 1, NULL, NULL, &maxw, NULL); /* 2nd longest */ boxa3 = boxaSelectBySize(boxa1, 0.4 * maxw, 0, L_SELECT_WIDTH, L_SELECT_IF_GTE, NULL); boxa4 = boxaSelectBySize(boxa3, 0, 60, L_SELECT_HEIGHT, L_SELECT_IF_LTE, NULL); boxa5 = boxaSelectBySize(boxa1, 400, 175, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); big_comp = (boxaGetCount(boxa5) == 0) ? 0 : 1; n1 = boxaGetCount(boxa1); n2 = boxaGetCount(boxa3); n3 = boxaGetCount(boxa4); ratio1 = (l_float32)maxw / (l_float32)w; ratio2 = (l_float32)n3 / (l_float32)n2; minlines = L_MAX(2, h / 125); if (big_comp || ratio1 < 0.6 || ratio2 < 0.8 || n3 < minlines) *pistext = 0; else *pistext = 1; if (pixadb) { if (*pistext == 1) { L_INFO("This is text: \n n1 = %d, n2 = %d, n3 = %d, " "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " "big_comp = %d\n", __func__, n1, n2, n3, minlines, maxw, ratio1, h, big_comp); } else { L_INFO("This is not text: \n n1 = %d, n2 = %d, n3 = %d, " "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " "big_comp = %d\n", __func__, n1, n2, n3, minlines, maxw, ratio1, h, big_comp); } } boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); boxaDestroy(&boxa5); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); return 0; } /*! * \brief pixFindThreshFgExtent() * * \param[in] pixs 1 bpp * \param[in] thresh threshold number of pixels in row * \param[out] ptop [optional] location of top of region * \param[out] pbot [optional] location of bottom of region * \return 0 if OK, 1 on error */ l_ok pixFindThreshFgExtent(PIX *pixs, l_int32 thresh, l_int32 *ptop, l_int32 *pbot) { l_int32 i, n; l_int32 *array; NUMA *na; if (ptop) *ptop = 0; if (pbot) *pbot = 0; if (!ptop && !pbot) return ERROR_INT("nothing to determine", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); na = pixCountPixelsByRow(pixs, NULL); n = numaGetCount(na); array = numaGetIArray(na); if (ptop) { for (i = 0; i < n; i++) { if (array[i] >= thresh) { *ptop = i; break; } } } if (pbot) { for (i = n - 1; i >= 0; i--) { if (array[i] >= thresh) { *pbot = i; break; } } } LEPT_FREE(array); numaDestroy(&na); return 0; } /*------------------------------------------------------------------* * Decision: table vs text * *------------------------------------------------------------------*/ /*! * \brief pixDecideIfTable() * * \param[in] pixs any depth, any resolution >= 75 ppi * \param[in] box [optional] if null, use entire pixs * \param[in] orient L_PORTRAIT_MODE, L_LANDSCAPE_MODE * \param[out] pscore 0 - 4; -1 if not determined * \param[in] pixadb [optional] pre-allocated, for showing intermediate * computation; use NULL to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is assumed that pixs has the correct resolution set.
 *          If the resolution is 0, we assume it is 300 ppi and issue a warning.
 *      (2) If %orient == L_LANDSCAPE_MODE, the image is rotated 90 degrees
 *          clockwise before being analyzed.
 *      (3) The interpretation of the returned score:
 *            -1     undetermined
 *             0     no table
 *             1     unlikely to have a table
 *             2     likely to have a table
 *             3     even more likely to have a table
 *             4     extremely likely to have a table
 *          * Setting the condition for finding a table at score >= 2 works
 *            well, except for false positives on kanji and landscape text.
 *          * These false positives can be removed by setting the condition
 *            at score >= 3, but recall is lowered because it will not find
 *            tables without either horizontal or vertical lines.
 *      (4) Most of the processing takes place at 75 ppi.
 *      (5) Internally, three numbers are determined, for horizontal and
 *          vertical fg lines, and for vertical bg lines.  From these,
 *          four tests are made to decide if there is a table occupying
 *          a significant part of the image.
 *      (6) Images have arbitrary content and would be likely to trigger
 *          this detector, so they are checked for first, and if found,
 *          return with a 0 (no table) score.
 *      (7) Musical scores (tablature) are likely to trigger the detector.
 *      (8) Tables of content with more than 2 columns are likely to
 *          trigger the detector.
 *      (9) For debug output, input a pre-allocated pixa.
 * 
*/ l_ok pixDecideIfTable(PIX *pixs, BOX *box, l_int32 orient, l_int32 *pscore, PIXA *pixadb) { l_int32 empty, nhb, nvb, nvw, score, htfound; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; if (!pscore) return ERROR_INT("&score not defined", __func__, 1); *pscore = -1; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Check if there is an image region. First convert to 1 bpp * at 175 ppi. If an image is found, assume there is no table. */ pix1 = pixPrepare1bpp(pixs, box, 0.1, 175); pix2 = pixGenerateHalftoneMask(pix1, NULL, &htfound, NULL); if (htfound && pixadb) pixaAddPix(pixadb, pix2, L_COPY); pixDestroy(&pix1); pixDestroy(&pix2); if (htfound) { *pscore = 0; L_INFO("pix has an image region\n", __func__); return 0; } /* Crop, convert to 1 bpp, 75 ppi */ if ((pix1 = pixPrepare1bpp(pixs, box, 0.05, 75)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); pixZero(pix1, &empty); if (empty) { *pscore = 0; pixDestroy(&pix1); L_INFO("pix is empty\n", __func__); return 0; } /* The 2x2 dilation on 75 ppi makes these two approaches very similar: * (1) pix1 = pixPrepare1bpp(..., 300); // 300 ppi resolution * pix2 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); * (2) pix1 = pixPrepare1bpp(..., 75); // 75 ppi resolution * pix2 = pixDilateBrick(NULL, pix1, 2, 2); * But (2) is more efficient if the input image to pixPrepare1bpp() * is not at 300 ppi. */ pix2 = pixDilateBrick(NULL, pix1, 2, 2); /* Deskew both horizontally and vertically; rotate by 90 * degrees if in landscape mode. */ pix3 = pixDeskewBoth(pix2, 1); if (pixadb) { pixaAddPix(pixadb, pix2, L_COPY); pixaAddPix(pixadb, pix3, L_COPY); } if (orient == L_LANDSCAPE_MODE) pix4 = pixRotate90(pix3, 1); else pix4 = pixClone(pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix1 = pixClone(pix4); pixDestroy(&pix4); /* Look for horizontal and vertical lines */ pix2 = pixMorphSequence(pix1, "o100.1 + c1.4", 0); pix3 = pixSeedfillBinary(NULL, pix2, pix1, 8); pix4 = pixMorphSequence(pix1, "o1.100 + c4.1", 0); pix5 = pixSeedfillBinary(NULL, pix4, pix1, 8); pix6 = pixOr(NULL, pix3, pix5); if (pixadb) { pixaAddPix(pixadb, pix2, L_COPY); pixaAddPix(pixadb, pix4, L_COPY); pixaAddPix(pixadb, pix3, L_COPY); pixaAddPix(pixadb, pix5, L_COPY); pixaAddPix(pixadb, pix6, L_COPY); } pixCountConnComp(pix2, 8, &nhb); /* number of horizontal black lines */ pixCountConnComp(pix4, 8, &nvb); /* number of vertical black lines */ /* Remove the lines */ pixSubtract(pix1, pix1, pix6); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Remove noise pixels */ pix7 = pixMorphSequence(pix1, "c4.1 + o8.1", 0); if (pixadb) pixaAddPix(pixadb, pix7, L_COPY); /* Look for vertical white space. Invert to convert white bg * to fg. Use a single rank-1 2x reduction, which closes small * fg holes, for the final processing at 37.5 ppi. * The vertical opening is then about 3 inches on a 300 ppi image. * We also remove vertical whitespace that is less than 5 pixels * wide at this resolution (about 0.1 inches) */ pixInvert(pix7, pix7); pix8 = pixMorphSequence(pix7, "r1 + o1.100", 0); pix9 = pixSelectBySize(pix8, 5, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_GTE, NULL); pixCountConnComp(pix9, 8, &nvw); /* number of vertical white lines */ if (pixadb) { pixaAddPix(pixadb, pixScale(pix8, 2.0, 2.0), L_INSERT); pixaAddPix(pixadb, pixScale(pix9, 2.0, 2.0), L_INSERT); } /* Require at least 2 of the following 4 conditions for a table. * Some tables do not have black (fg) lines, and for those we * require more than 6 long vertical whitespace (bg) lines. */ score = 0; if (nhb > 1) score++; if (nvb > 2) score++; if (nvw > 3) score++; if (nvw > 6) score++; *pscore = score; pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); return 0; } /*! * \brief pixPrepare1bpp() * * \param[in] pixs any depth * \param[in] box [optional] if null, use entire pixs * \param[in] cropfract fraction to be removed from the boundary; * use 0.0 to retain the entire image * \param[in] outres desired resolution of output image; if the * input image resolution is not set, assume * 300 ppi; use 0 to skip scaling. * \return pixd if OK, NULL on error * *
 * Notes:
 *      (1) This handles some common pre-processing operations,
 *          where the page segmentation algorithm takes a 1 bpp image.
 * 
*/ PIX * pixPrepare1bpp(PIX *pixs, BOX *box, l_float32 cropfract, l_int32 outres) { l_int32 w, h, res; l_float32 factor; BOX *box1; PIX *pix1, *pix2, *pix3, *pix4, *pix5; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Crop the image. If no box is given, use %cropfract to remove * pixels near the image boundary; this helps avoid false * negatives from noise that is often found there. */ if (box) { pix1 = pixClipRectangle(pixs, box, NULL); } else { pixGetDimensions(pixs, &w, &h, NULL); box1 = boxCreate((l_int32)(cropfract * w), (l_int32)(cropfract * h), (l_int32)((1.0 - 2 * cropfract) * w), (l_int32)((1.0 - 2 * cropfract) * h)); pix1 = pixClipRectangle(pixs, box1, NULL); boxDestroy(&box1); } /* Convert to 1 bpp with adaptive background cleaning */ if (pixGetDepth(pixs) > 1) { pix2 = pixConvertTo8(pix1, 0); pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 160); pixDestroy(&pix1); pixDestroy(&pix2); if (!pix3) { L_INFO("pix cleaning failed\n", __func__); return NULL; } pix4 = pixThresholdToBinary(pix3, 200); pixDestroy(&pix3); } else { pix4 = pixClone(pix1); pixDestroy(&pix1); } /* Scale the image to the requested output resolution; do not scale if %outres <= 0 */ if (outres <= 0) return pix4; if ((res = pixGetXRes(pixs)) == 0) { L_WARNING("Resolution is not set: using 300 ppi\n", __func__); res = 300; } if (res != outres) { factor = (l_float32)outres / (l_float32)res; pix5 = pixScale(pix4, factor, factor); } else { pix5 = pixClone(pix4); } pixDestroy(&pix4); return pix5; } /*------------------------------------------------------------------* * Estimate the grayscale background value * *------------------------------------------------------------------*/ /*! * \brief pixEstimateBackground() * * \param[in] pixs 8 bpp, with or without colormap * \param[in] darkthresh pixels below this value are never considered * part of the background; typ. 70; use 0 to skip * \param[in] edgecrop fraction of half-width on each side, and of * half-height at top and bottom, that are cropped * \param[out] pbg estimated background, or 0 on error * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Caller should check that return bg value is > 0.
 * 
*/ l_ok pixEstimateBackground(PIX *pixs, l_int32 darkthresh, l_float32 edgecrop, l_int32 *pbg) { l_int32 w, h, sampling; l_float32 fbg; BOX *box; PIX *pix1, *pix2, *pixm; if (!pbg) return ERROR_INT("&bg not defined", __func__, 1); *pbg = 0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (darkthresh > 128) L_WARNING("darkthresh unusually large\n", __func__); if (edgecrop < 0.0 || edgecrop >= 1.0) return ERROR_INT("edgecrop not in [0.0 ... 1.0)", __func__, 1); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixGetDimensions(pix1, &w, &h, NULL); /* Optionally crop inner part of image */ if (edgecrop > 0.0) { box = boxCreate(0.5 * edgecrop * w, 0.5 * edgecrop * h, (1.0 - edgecrop) * w, (1.0 - edgecrop) * h); pix2 = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); } else { pix2 = pixClone(pix1); } /* We will use no more than 50K samples */ sampling = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5)); /* Optionally make a mask over all pixels lighter than %darkthresh */ pixm = NULL; if (darkthresh > 0) { pixm = pixThresholdToBinary(pix2, darkthresh); pixInvert(pixm, pixm); } pixGetRankValueMasked(pix2, pixm, 0, 0, sampling, 0.5, &fbg, NULL); *pbg = (l_int32)(fbg + 0.5); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixm); return 0; } /*---------------------------------------------------------------------* * Largest white or black rectangles in an image * *---------------------------------------------------------------------*/ /*! * \brief pixFindLargeRectangles() * * \param[in] pixs 1 bpp * \param[in] polarity 0 within background, 1 within foreground * \param[in] nrect number of rectangles to be found * \param[out] pboxa largest rectangles, sorted by decreasing area * \param[in,out] ppixdb optional return output with rectangles drawn on it * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a greedy search to find the largest rectangles,
 *          either black or white and without overlaps, in %pix.
 *      (2) See pixFindLargestRectangle(), which is called multiple
 *          times, for details.  On each call, the largest rectangle
 *          found is painted, so that none of its pixels can be
 *          used later, before calling it again.
 *      (3) This function is surprisingly fast.  Although
 *          pixFindLargestRectangle() runs at about 50 MPix/sec, when it
 *          is run multiple times by pixFindLargeRectangles(), it processes
 *          at 150 - 250 MPix/sec, and the time is approximately linear
 *          in %nrect.  For example, for a 1 MPix image, searching for
 *          the largest 50 boxes takes about 0.2 seconds.
 * 
*/ l_ok pixFindLargeRectangles(PIX *pixs, l_int32 polarity, l_int32 nrect, BOXA **pboxa, PIX **ppixdb) { l_int32 i, op, bx, by, bw, bh; BOX *box; BOXA *boxa; PIX *pix; if (ppixdb) *ppixdb = NULL; if (!pboxa) return ERROR_INT("&boxa not defined", __func__, 1); *pboxa = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (polarity != 0 && polarity != 1) return ERROR_INT("invalid polarity", __func__, 1); if (nrect > 1000) { L_WARNING("large num rectangles = %d requested; using 1000\n", __func__, nrect); nrect = 1000; } pix = pixCopy(NULL, pixs); boxa = boxaCreate(nrect); *pboxa = boxa; /* Sequentially find largest rectangle and fill with opposite color */ for (i = 0; i < nrect; i++) { if (pixFindLargestRectangle(pix, polarity, &box, NULL) == 1) { boxDestroy(&box); L_ERROR("failure in pixFindLargestRectangle\n", __func__); break; } boxaAddBox(boxa, box, L_INSERT); op = (polarity == 0) ? PIX_SET : PIX_CLR; boxGetGeometry(box, &bx, &by, &bw, &bh); pixRasterop(pix, bx, by, bw, bh, op, NULL, 0, 0); } if (ppixdb) *ppixdb = pixDrawBoxaRandom(pixs, boxa, 3); pixDestroy(&pix); return 0; } /*! * \brief pixFindLargestRectangle() * * \param[in] pixs 1 bpp * \param[in] polarity 0 within background, 1 within foreground * \param[out] pbox largest area rectangle * \param[in,out] ppixdb optional return output with rectangle drawn on it * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a simple and elegant solution to a problem in
 *          computational geometry that at first appears to be quite
 *          difficult: what is the largest rectangle that can be
 *          placed in the image, covering only pixels of one polarity
 *          (bg or fg)?  The solution is O(n), where n is the number
 *          of pixels in the image, and it requires nothing more than
 *          using a simple recursion relation in a single sweep of the image.
 *      (2) In a sweep from UL to LR with left-to-right being the fast
 *          direction, calculate the largest white rectangle at (x, y),
 *          using previously calculated values at pixels #1 and #2:
 *             #1:    (x, y - 1)
 *             #2:    (x - 1, y)
 *          We also need the most recent "black" pixels that were seen
 *          in the current row and column.
 *          Consider the largest area.  There are only two possibilities:
 *             (a)  Min(w(1), horizdist) * (h(1) + 1)
 *             (b)  Min(h(2), vertdist) * (w(2) + 1)
 *          where
 *             horizdist: the distance from the rightmost "black" pixel seen
 *                        in the current row across to the current pixel
 *             vertdist: the distance from the lowest "black" pixel seen
 *                       in the current column down to the current pixel
 *          and we choose the Max of (a) and (b).
 *      (3) To convince yourself that these recursion relations are correct,
 *          it helps to draw the maximum rectangles at #1 and #2.
 *          Then for #1, you try to extend the rectangle down one line,
 *          so that the height is h(1) + 1.  Do you get the full
 *          width of #1, w(1)?  It depends on where the black pixels are
 *          in the current row.  You know the final width is bounded by w(1)
 *          and w(2) + 1, but the actual value depends on the distribution
 *          of black pixels in the current row that are at a distance
 *          from the current pixel that is between these limits.
 *          We call that value "horizdist", and the area is then given
 *          by the expression (a) above.  Using similar reasoning for #2,
 *          where you attempt to extend the rectangle to the right
 *          by 1 pixel, you arrive at (b).  The largest rectangle is
 *          then found by taking the Max.
 * 
*/ l_ok pixFindLargestRectangle(PIX *pixs, l_int32 polarity, BOX **pbox, PIX **ppixdb) { l_int32 i, j, w, h, d, wpls, val; l_int32 wp, hp, w1, w2, h1, h2, wmin, hmin, area1, area2; l_int32 xmax, ymax; /* LR corner of the largest rectangle */ l_int32 maxarea, wmax, hmax, vertdist, horizdist, prevfg; l_int32 *lowestfg; l_uint32 *datas, *lines; l_uint32 **linew, **lineh; BOX *box; PIX *pixw, *pixh; /* keeps the width and height for the largest */ /* rectangles whose LR corner is located there. */ if (ppixdb) *ppixdb = NULL; if (!pbox) return ERROR_INT("&box not defined", __func__, 1); *pbox = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return ERROR_INT("pixs not 1 bpp", __func__, 1); if (polarity != 0 && polarity != 1) return ERROR_INT("invalid polarity", __func__, 1); /* Initialize lowest "fg" seen so far for each column */ lowestfg = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); for (i = 0; i < w; i++) lowestfg[i] = -1; /* The combination (val ^ polarity) is the color for which we * are searching for the maximum rectangle. For polarity == 0, * we search in the bg (white). */ pixw = pixCreate(w, h, 32); /* stores width */ pixh = pixCreate(w, h, 32); /* stores height */ linew = (l_uint32 **)pixGetLinePtrs(pixw, NULL); lineh = (l_uint32 **)pixGetLinePtrs(pixh, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); maxarea = xmax = ymax = wmax = hmax = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; prevfg = -1; for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if ((val ^ polarity) == 0) { /* bg (0) if polarity == 0, etc. */ if (i == 0 && j == 0) { wp = hp = 1; } else if (i == 0) { wp = linew[i][j - 1] + 1; hp = 1; } else if (j == 0) { wp = 1; hp = lineh[i - 1][j] + 1; } else { /* Expand #1 prev rectangle down */ w1 = linew[i - 1][j]; h1 = lineh[i - 1][j]; horizdist = j - prevfg; wmin = L_MIN(w1, horizdist); /* width of new rectangle */ area1 = wmin * (h1 + 1); /* Expand #2 prev rectangle to right */ w2 = linew[i][j - 1]; h2 = lineh[i][j - 1]; vertdist = i - lowestfg[j]; hmin = L_MIN(h2, vertdist); /* height of new rectangle */ area2 = hmin * (w2 + 1); if (area1 > area2) { wp = wmin; hp = h1 + 1; } else { wp = w2 + 1; hp = hmin; } } } else { /* fg (1) if polarity == 0; bg (0) if polarity == 1 */ prevfg = j; lowestfg[j] = i; wp = hp = 0; } linew[i][j] = wp; lineh[i][j] = hp; if (wp * hp > maxarea) { maxarea = wp * hp; xmax = j; ymax = i; wmax = wp; hmax = hp; } } } /* Translate from LR corner to Box coords (UL corner, w, h) */ box = boxCreate(xmax - wmax + 1, ymax - hmax + 1, wmax, hmax); *pbox = box; if (ppixdb) { *ppixdb = pixConvertTo8(pixs, TRUE); pixRenderHashBoxArb(*ppixdb, box, 6, 2, L_NEG_SLOPE_LINE, 1, 255, 0, 0); } LEPT_FREE(linew); LEPT_FREE(lineh); LEPT_FREE(lowestfg); pixDestroy(&pixw); pixDestroy(&pixh); return 0; } /*---------------------------------------------------------------------* * Generate rectangle inside connected component * *---------------------------------------------------------------------*/ /*! * \brief pixFindRectangleInCC() * * \param[in] pixs 1 bpp, with sufficient closings to make the fg be * a single c.c. that is a convex hull * \param[in] boxs [optional] if NULL, %pixs should be a minimum * container of a single c.c. * \param[in] fract first and all consecutive lines found must be at * least this fraction of the fast scan dimension * \param[in] dir L_SCAN_HORIZONTAL, L_SCAN_VERTICAL; direction of * fast scan * \param[in] select L_GEOMETRIC_UNION, L_GEOMETRIC_INTERSECTION, * L_LARGEST_AREA, L_SMALEST_AREA * \param[in] debug if 1, generates output pdf showing intermediate * computation and final result * \return box of included rectangle, or NULL on error * *
 * Notes:
 *      (1) Computation is similar to pixFindLargestRectangle(), but allows
 *          a different set of results to choose from.
 *      (2) Select the fast scan direction.  Then, scanning in the slow
 *          direction, find the longest run of ON pixels in the fast
 *          scan direction and look for the first run that is longer
 *          than %fract of the dimension.  Continue until a shorter run
 *          is found.  This generates a box of ON pixels fitting into the c.c.
 *      (3) Do this from both slow scan directions and use %select to get
 *          a resulting box from these two.
 *      (4) The extracted rectangle is not necessarily the largest that
 *          can fit in the c.c.  To get that, use pixFindLargestRectangle().
 */
BOX *
pixFindRectangleInCC(PIX       *pixs,
                     BOX       *boxs,
                     l_float32  fract,
                     l_int32    dir,
                     l_int32    select,
                     l_int32    debug)
{
l_int32  x, y, i, w, h, w1, h1, w2, h2, found, res;
l_int32  xfirst, xlast, xstart, yfirst, ylast, length;
BOX     *box1, *box2, *box3, *box4, *box5;
PIX     *pix1, *pix2, *pixdb1, *pixdb2;
PIXA    *pixadb;

    if (!pixs || pixGetDepth(pixs) != 1)
        return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL);
    if (fract <= 0.0 || fract > 1.0)
        return (BOX *)ERROR_PTR("invalid fraction", __func__, NULL);
    if (dir != L_SCAN_VERTICAL && dir != L_SCAN_HORIZONTAL)
        return (BOX *)ERROR_PTR("invalid scan direction", __func__, NULL);
    if (select != L_GEOMETRIC_UNION && select != L_GEOMETRIC_INTERSECTION &&
        select != L_LARGEST_AREA && select != L_SMALLEST_AREA)
        return (BOX *)ERROR_PTR("invalid select", __func__, NULL);

        /* Extract the c.c. if necessary */
    x = y = 0;
    if (boxs) {
        pix1 = pixClipRectangle(pixs, boxs, NULL);
        boxGetGeometry(boxs, &x, &y, NULL, NULL);
    } else {
        pix1 = pixClone(pixs);
    }

        /* All fast scans are horizontal; rotate 90 deg cw if necessary */
    if (dir == L_SCAN_VERTICAL)
        pix2 = pixRotate90(pix1, 1);
    else  /* L_SCAN_HORIZONTAL */
        pix2 = pixClone(pix1);
    pixGetDimensions(pix2, &w, &h, NULL);

    pixadb = (debug) ? pixaCreate(0) : NULL;
    pixdb1 = NULL;
    if (pixadb) {
        lept_mkdir("lept/rect");
        pixaAddPix(pixadb, pix1, L_CLONE);
        pixdb1 = pixConvertTo32(pix2);
    }
    pixDestroy(&pix1);

        /* Scanning down, find the first scanline with a long enough run.
         * That run goes from (xfirst, yfirst) to (xlast, yfirst).  */
    found = FALSE;
    for (i = 0; i < h; i++) {
        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
        if (length >= (l_int32)(fract * w + 0.5)) {
            yfirst = i;
            xfirst = xstart;
            xlast = xfirst + length - 1;
            found = TRUE;
            break;
        }
    }
    if (!found) {
        L_WARNING("no run of sufficient size was found\n", __func__);
        pixDestroy(&pix2);
        pixDestroy(&pixdb1);
        pixaDestroy(&pixadb);
        return NULL;
    }

         /* Continue down until the condition fails */
    w1 = xlast - xfirst + 1;
    h1 = h - yfirst;  /* init */
    ylast = h - 1;  /* init */
    for (i = yfirst + 1; i < h; i++) {
        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
        if (xstart > xfirst || (xstart + length - 1 < xlast) ||
            i == h - 1) {
            ylast = i - 1;
            h1 = ylast - yfirst + 1;
            break;
        }
    }
    box1 = boxCreate(xfirst, yfirst, w1, h1);

        /* Scanning up, find the first scanline with a long enough run.
         * That run goes from (xfirst, ylast) to (xlast, ylast).  */
    for (i = h - 1; i >= 0; i--) {
        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
        if (length >= (l_int32)(fract * w + 0.5)) {
            ylast = i;
            xfirst = xstart;
            xlast = xfirst + length - 1;
            break;
        }
    }

         /* Continue up until the condition fails */
    w2 = xlast - xfirst + 1;
    h2 = ylast + 1;  /* initialize */
    for (i = ylast - 1; i >= 0; i--) {
        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
        if (xstart > xfirst || (xstart + length - 1 < xlast) ||
            i == 0) {
            yfirst = i + 1;
            h2 = ylast - yfirst + 1;
            break;
        }
    }
    box2 = boxCreate(xfirst, yfirst, w2, h2);
    pixDestroy(&pix2);

    if (pixadb) {
        pixRenderBoxArb(pixdb1, box1, 2, 255, 0, 0);
        pixRenderBoxArb(pixdb1, box2, 2, 0, 255, 0);
        pixaAddPix(pixadb, pixdb1, L_INSERT);
    }

        /* Select the final result from the two boxes */
    if (select == L_GEOMETRIC_UNION)
        box3 = boxBoundingRegion(box1, box2);
    else if (select == L_GEOMETRIC_INTERSECTION)
        box3 = boxOverlapRegion(box1, box2);
    else if (select == L_LARGEST_AREA)
        box3 = (w1 * h1 >= w2 * h2) ? boxCopy(box1) : boxCopy(box2);
    else  /* select == L_SMALLEST_AREA) */
        box3 = (w1 * h1 <= w2 * h2) ? boxCopy(box1) : boxCopy(box2);
    boxDestroy(&box1);
    boxDestroy(&box2);

        /* Rotate the box 90 degrees ccw if necessary */
    box4 = NULL;
    if (box3) {
        if (dir == L_SCAN_VERTICAL)
            box4 = boxRotateOrth(box3, w, h, 3);
        else
            box4 = boxCopy(box3);
    }

        /* Transform back to global coordinates if %boxs exists */
    box5 = (box4) ? boxTransform(box4, x, y, 1.0, 1.0) : NULL;
    boxDestroy(&box3);
    boxDestroy(&box4);

        /* Debug output */
    if (pixadb) {
        pixdb1 = pixConvertTo8(pixs, 0);
        pixAddConstantGray(pixdb1, 190);
        pixdb2 = pixConvertTo32(pixdb1);
        if (box5) pixRenderBoxArb(pixdb2, box5, 4, 0, 0, 255);
        pixaAddPix(pixadb, pixdb2, L_INSERT);
        res = pixGetXRes(pixs);
        L_INFO("Writing debug files to /tmp/lept/rect/\n", __func__);
        pixaConvertToPdf(pixadb, res, 1.0, L_DEFAULT_ENCODE, 75, NULL,
                        "/tmp/lept/rect/fitrect.pdf");
        pix1 = pixaDisplayTiledAndScaled(pixadb, 32, 800, 1, 0, 40, 2);
        pixWrite("/tmp/lept/rect/fitrect.png", pix1, IFF_PNG);
        pixDestroy(&pix1);
        pixDestroy(&pixdb1);
        pixaDestroy(&pixadb);
    }

    return box5;
}

/*------------------------------------------------------------------*
 *                    Automatic photoinvert for OCR                 *
 *------------------------------------------------------------------*/
/*!
 * \brief   pixAutoPhotoinvert()
 *
 * \param[in]    pixs       any depth, colormap ok
 * \param[in]    thresh     binarization threshold; use 0 for default
 * \param[out]   ppixm      [optional] image regions to be inverted
 * \param[out]   pixadb     [optional] debug; input NULL to skip
 * \return  pixd   1 bpp image to be sent to OCR, or NULL on error
 *
 * 
 * Notes:
 *      (1) A 1 bpp image is returned, where pixels in image regions are
 *          photo-inverted.
 *      (2) If there is light text with a dark background, this will
 *          identify the region and photoinvert the pixels there if
 *          there are at least 60% fg pixels in the region.
 *      (3) For debug output, input a (typically empty) %pixadb.
 * 
*/ PIX * pixAutoPhotoinvert(PIX *pixs, l_int32 thresh, PIX **ppixm, PIXA *pixadb) { l_int32 i, n, empty, x, y, w, h; l_float32 fgfract; BOX *box1; BOXA *boxa1; PIX *pix1, *pix2, *pix3, *pix4, *pix5; if (ppixm) *ppixm = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (thresh == 0) thresh = 128; if ((pix1 = pixConvertTo1(pixs, thresh)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); /* Identify regions for photo-inversion: * (1) Start with the halftone mask. * (2) Eliminate ordinary text and halftones in the mask. * (3) Some regions of inverted text may have been removed in * steps (1) and (2). Conditionally fill holes in the mask, * but do not fill out to the bounding rect. */ pix2 = pixGenerateHalftoneMask(pix1, NULL, NULL, pixadb); pix3 = pixMorphSequence(pix2, "o15.15 + c25.25", 0); /* remove noise */ pix4 = pixFillHolesToBoundingRect(pix3, 1, 0.5, 1.0); if (pixadb) { pixaAddPix(pixadb, pix2, L_CLONE); pixaAddPix(pixadb, pix3, L_CLONE); pixaAddPix(pixadb, pix4, L_COPY); } pixDestroy(&pix2); pixDestroy(&pix3); pixZero(pix4, &empty); if (empty) { pixDestroy(&pix4); return pix1; } /* Examine each component and validate the inversion. * Require at least 60% of pixels under each component to be FG. */ boxa1 = pixConnCompBB(pix4, 8); n = boxaGetCount(boxa1); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa1, i, L_COPY); pix5 = pixClipRectangle(pix1, box1, NULL); pixForegroundFraction(pix5, &fgfract); if (pixadb) lept_stderr("fg fraction: %5.3f\n", fgfract); boxGetGeometry(box1, &x, &y, &w, &h); if (fgfract < 0.6) /* erase from the mask */ pixRasterop(pix4, x, y, w, h, PIX_CLR, NULL, 0, 0); pixDestroy(&pix5); boxDestroy(&box1); } boxaDestroy(&boxa1); pixZero(pix4, &empty); if (empty) { pixDestroy(&pix4); return pix1; } /* Combine pixels of the photo-inverted pix with the binarized input */ pix5 = pixInvert(NULL, pix1); pixCombineMasked(pix1, pix5, pix4); if (pixadb) { pixaAddPix(pixadb, pix5, L_CLONE); pixaAddPix(pixadb, pix1, L_COPY); } pixDestroy(&pix5); if (ppixm) *ppixm = pix4; else pixDestroy(&pix4); return pix1; } leptonica-1.86.0/src/paintcmap.c000066400000000000000000000656721506303110300165030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file paintcmap.c *
 *
 *      These in-place functions paint onto colormap images.
 *
 *      Repaint selected pixels in region
 *           l_int32     pixSetSelectCmap()
 *
 *      Repaint non-white pixels in region
 *           l_int32     pixColorGrayRegionsCmap()
 *           l_int32     pixColorGrayCmap()
 *           l_int32     pixColorGrayMaskedCmap()
 *           l_int32     addColorizedGrayToCmap()
 *
 *      Repaint selected pixels through mask
 *           l_int32     pixSetSelectMaskedCmap()
 *
 *      Repaint all pixels through mask
 *           l_int32     pixSetMaskedCmap()
 *
 *
 *  The 'set select' functions condition the setting on a specific
 *  pixel value (i.e., index into the colormap) of the underlying
 *  Pix that is being modified.  The same conditioning is used in
 *  pixBlendCmap().
 *
 *  The pixColorGrayCmap() function sets all truly gray (r = g = b) pixels,
 *  with the exception of either black or white pixels, to a new color.
 *
 *  The pixSetSelectMaskedCmap() function conditions pixel painting
 *  on both a specific pixel value and location within the fg mask.
 *  By contrast, pixSetMaskedCmap() sets all pixels under the
 *  mask foreground, without considering the initial pixel values.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /*-------------------------------------------------------------* * Repaint selected pixels in region * *-------------------------------------------------------------*/ /*! * \brief pixSetSelectCmap() * * \param[in] pixs 1, 2, 4 or 8 bpp, with colormap * \param[in] box [optional] region to set color; can be NULL * \param[in] sindex colormap index of pixels to be changed * \param[in] rval, gval, bval new color to paint * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) It sets all pixels in region that have the color specified
 *          by the colormap index %sindex to the new color.
 *      (3) %sindex must be in the existing colormap; otherwise an
 *          error is returned.
 *      (4) If the new color exists in the colormap, it is used;
 *          otherwise, it is added to the colormap.  If it cannot be
 *          added because the colormap is full, an error is returned.
 *      (5) If %box is NULL, applies function to the entire image; otherwise,
 *          clips the operation to the intersection of the box and pix.
 *      (6) An example of use would be to set to a specific color all
 *          the light (background) pixels within a certain region of
 *          a 3-level 2 bpp image, while leaving light pixels outside
 *          this region unchanged.
 * 
*/ l_ok pixSetSelectCmap(PIX *pixs, BOX *box, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, n, x1, y1, x2, y2, bw, bh, val, wpls; l_int32 index; /* of new color to be set */ l_uint32 *lines, *datas; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", __func__, 1); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {1,2,4,8}", __func__, 1); /* Add new color if necessary; get index of this color in cmap */ n = pixcmapGetCount(cmap); if (sindex >= n) return ERROR_INT("sindex too large; no cmap entry", __func__, 1); if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("error adding cmap entry", __func__, 1); else index = n; /* we've added one color */ } /* Determine the region of substitution */ pixGetDimensions(pixs, &w, &h, NULL); if (!box) { x1 = y1 = 0; x2 = w; y2 = h; } else { boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; } /* Replace pixel value sindex by index in the region */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) /* clip */ continue; lines = datas + i * wpls; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) /* clip */ continue; switch (d) { case 1: val = GET_DATA_BIT(lines, j); if (val == sindex) { if (index == 0) CLEAR_DATA_BIT(lines, j); else SET_DATA_BIT(lines, j); } break; case 2: val = GET_DATA_DIBIT(lines, j); if (val == sindex) SET_DATA_DIBIT(lines, j, index); break; case 4: val = GET_DATA_QBIT(lines, j); if (val == sindex) SET_DATA_QBIT(lines, j, index); break; case 8: val = GET_DATA_BYTE(lines, j); if (val == sindex) SET_DATA_BYTE(lines, j, index); break; default: return ERROR_INT("depth not in {1,2,4,8}", __func__, 1); } } } return 0; } /*-------------------------------------------------------------* * Repaint gray pixels in region * *-------------------------------------------------------------*/ /*! * \brief pixColorGrayRegionsCmap() * * \param[in] pixs 8 bpp, with colormap * \param[in] boxa of regions in which to apply color * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] rval, gval, bval target color * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
 *          preserving antialiasing.
 *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
 *          preserving antialiasing.  See pixColorGrayCmap() for details.
 *      (3) This can also be called through pixColorGrayRegions().
 *      (4) This increases the colormap size by the number of
 *          different gray (non-black or non-white) colors in the
 *          selected regions of pixs.  If there is not enough room in
 *          the colormap for this expansion, it returns 1 (error),
 *          and the caller should check the return value.
 *      (5) Because two boxes in %boxa can overlap, pixels that
 *          are colorized in the first box must be excluded in the
 *          second because their value exceeds the size of the map.
 * 
*/ l_ok pixColorGrayRegionsCmap(PIX *pixs, BOXA *boxa, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, k, w, h, n, nc, x1, y1, x2, y2, bw, bh, wpl; l_int32 val, nval; l_int32 *map; l_uint32 *line, *data; BOX *box; NUMA *na; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", __func__, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("depth not 8 bpp", __func__, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", __func__, 1); nc = pixcmapGetCount(cmap); if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) return ERROR_INT("no room; cmap full", __func__, 1); map = numaGetIArray(na); numaDestroy(&na); if (!map) return ERROR_INT("map not made", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); n = boxaGetCount(boxa); for (k = 0; k < n; k++) { box = boxaGetBox(boxa, k, L_CLONE); boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; /* Remap gray pixels in the region */ for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) /* clip */ continue; line = data + i * wpl; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) /* clip */ continue; val = GET_DATA_BYTE(line, j); if (val >= nc) continue; /* from overlapping b.b. */ nval = map[val]; if (nval != 256) SET_DATA_BYTE(line, j, nval); } } boxDestroy(&box); } LEPT_FREE(map); return 0; } /*! * \brief pixColorGrayCmap() * * \param[in] pixs 2, 4 or 8 bpp, with colormap * \param[in] box [optional] region to set color; can be NULL * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] rval, gval, bval target color * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
 *          preserving antialiasing.
 *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
 *          preserving antialiasing.
 *      (3) %box gives the region to apply color; if NULL, this
 *          colorizes the entire image.
 *      (4) If the cmap is only 2 or 4 bpp, pixs is converted in-place
 *          to an 8 bpp cmap.  A 1 bpp cmap is not a valid input pix.
 *      (5) This can also be called through pixColorGray().
 *      (6) This operation increases the colormap size by the number of
 *          different gray (non-black or non-white) colors in the
 *          input colormap.  If there is not enough room in the colormap
 *          for this expansion, it returns 1 (error), and the caller
 *          should check the return value.
 *      (7) Using the darkness of each original pixel in the rect,
 *          it generates a new color (based on the input rgb values).
 *          If %type == L_PAINT_LIGHT, the new color is a (generally)
 *          darken-to-black version of the input rgb color, where the
 *          amount of darkening increases with the darkness of the
 *          original pixel color.
 *          If %type == L_PAINT_DARK, the new color is a (generally)
 *          faded-to-white version of the input rgb color, where the
 *          amount of fading increases with the brightness of the
 *          original pixel color.
 * 
*/ l_ok pixColorGrayCmap(PIX *pixs, BOX *box, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, ret; PIX *pixt; BOXA *boxa; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2, 4, 8}", __func__, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", __func__, 1); /* If 2 bpp or 4 bpp, convert in-place to 8 bpp. */ if (d == 2 || d == 4) { pixt = pixConvertTo8(pixs, 1); pixTransferAllData(pixs, &pixt, 0, 0); } /* If box == NULL, color the entire image */ boxa = boxaCreate(1); if (box) { boxaAddBox(boxa, box, L_COPY); } else { box = boxCreate(0, 0, w, h); boxaAddBox(boxa, box, L_INSERT); } ret = pixColorGrayRegionsCmap(pixs, boxa, type, rval, gval, bval); boxaDestroy(&boxa); return ret; } /*! * \brief pixColorGrayMaskedCmap() * * \param[in] pixs 8 bpp, with colormap * \param[in] pixm 1 bpp mask, through which to apply color * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] rval, gval, bval target color * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
 *          preserving antialiasing.
 *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
 *          preserving antialiasing.  See pixColorGrayCmap() for details.
 *      (3) This increases the colormap size by the number of
 *          different gray (non-black or non-white) colors in the
 *          input colormap.  If there is not enough room in the colormap
 *          for this expansion, it returns 1 (error).
 * 
*/ l_ok pixColorGrayMaskedCmap(PIX *pixs, PIX *pixm, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, wm, hm, wmin, hmin, wpl, wplm; l_int32 val, nval; l_int32 *map; l_uint32 *line, *data, *linem, *datam; NUMA *na; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm undefined or not 1 bpp", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", __func__, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("depth not 8 bpp", __func__, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", __func__, 1); if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) return ERROR_INT("no room; cmap full", __func__, 1); map = numaGetIArray(na); numaDestroy(&na); if (!map) return ERROR_INT("map not made", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixm, &wm, &hm, NULL); if (wm != w) L_WARNING("wm = %d differs from w = %d\n", __func__, wm, w); if (hm != h) L_WARNING("hm = %d differs from h = %d\n", __func__, hm, h); wmin = L_MIN(w, wm); hmin = L_MIN(h, hm); data = pixGetData(pixs); wpl = pixGetWpl(pixs); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); /* Remap gray pixels in the region */ for (i = 0; i < hmin; i++) { line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j) == 0) continue; val = GET_DATA_BYTE(line, j); nval = map[val]; if (nval != 256) SET_DATA_BYTE(line, j, nval); } } LEPT_FREE(map); return 0; } /*! * \brief addColorizedGrayToCmap() * * \param[in] cmap from 2 or 4 bpp pix * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK * \param[in] rval, gval, bval target color * \param[out] pna [optional] table for mapping new cmap entries * \return 0 if OK; 1 on error; 2 if new colors will not fit in cmap. * *
 * Notes:
 *      (1) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
 *          preserving antialiasing.
 *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
 *          preserving antialiasing.
 *      (2) This increases the colormap size by the number of
 *          different gray (non-black or non-white) colors in the
 *          input colormap.  If there is not enough room in the colormap
 *          for this expansion, it returns 1 (treated as a warning);
 *          the caller should check the return value.
 *      (3) This can be used to determine if the new colors will fit in
 *          the cmap, using null for &na.  Returns 0 if they fit; 2 if
 *          they don't fit.
 *      (4) The mapping table contains, for each gray color found, the
 *          index of the corresponding colorized pixel.  Non-gray
 *          pixels are assigned the invalid index 256.
 *      (5) See pixColorGrayCmap() for usage.
 * 
*/ l_ok addColorizedGrayToCmap(PIXCMAP *cmap, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval, NUMA **pna) { l_int32 i, n, erval, egval, ebval, nrval, ngval, nbval, newindex; NUMA *na; if (pna) *pna = NULL; if (!cmap) return ERROR_INT("cmap not defined", __func__, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", __func__, 1); n = pixcmapGetCount(cmap); na = numaCreate(n); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &erval, &egval, &ebval); if (type == L_PAINT_LIGHT) { if (erval == egval && erval == ebval && erval != 0) { nrval = (l_int32)(rval * (l_float32)erval / 255.); ngval = (l_int32)(gval * (l_float32)egval / 255.); nbval = (l_int32)(bval * (l_float32)ebval / 255.); if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { numaDestroy(&na); L_WARNING("no room; colormap full\n", __func__); return 2; } numaAddNumber(na, newindex); } else { numaAddNumber(na, 256); /* invalid number; not gray */ } } else { /* L_PAINT_DARK */ if (erval == egval && erval == ebval && erval != 255) { nrval = rval + (l_int32)((255. - rval) * (l_float32)erval / 255.); ngval = gval + (l_int32)((255. - gval) * (l_float32)egval / 255.); nbval = bval + (l_int32)((255. - bval) * (l_float32)ebval / 255.); if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { numaDestroy(&na); L_WARNING("no room; colormap full\n", __func__); return 2; } numaAddNumber(na, newindex); } else { numaAddNumber(na, 256); /* invalid number; not gray */ } } } if (pna) *pna = na; else numaDestroy(&na); return 0; } /*-------------------------------------------------------------* * Repaint selected pixels through mask * *-------------------------------------------------------------*/ /*! * \brief pixSetSelectMaskedCmap() * * \param[in] pixs 2, 4 or 8 bpp, with colormap * \param[in] pixm [optional] 1 bpp mask; no-op if NULL * \param[in] x, y UL corner of mask relative to pixs * \param[in] sindex cmap index of pixels in pixs to be changed * \param[in] rval, gval, bval new color to substitute * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) This paints through the fg of pixm and replaces all pixels
 *          in pixs that have the value %sindex with the new color.
 *      (3) If pixm == NULL, a warning is given.
 *      (4) %sindex must be in the existing colormap; otherwise an
 *          error is returned.
 *      (5) If the new color exists in the colormap, it is used;
 *          otherwise, it is added to the colormap.  If the colormap
 *          is full, an error is returned.
 * 
*/ l_ok pixSetSelectMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, n, wm, hm, wpls, wplm, val; l_int32 index; /* of new color to be set */ l_uint32 *lines, *linem, *datas, *datam; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", __func__, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", __func__); return 0; } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2, 4, 8}", __func__, 1); /* add new color if necessary; get index of this color in cmap */ n = pixcmapGetCount(cmap); if (sindex >= n) return ERROR_INT("sindex too large; no cmap entry", __func__, 1); if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("error adding cmap entry", __func__, 1); else index = n; /* we've added one color */ } /* replace pixel value sindex by index when fg pixel in pixmc * overlays it */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wm = pixGetWidth(pixm); hm = pixGetHeight(pixm); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i++) { if (i + y < 0 || i + y >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (j + x < 0 || j + x >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 2: val = GET_DATA_DIBIT(lines, x + j); if (val == sindex) SET_DATA_DIBIT(lines, x + j, index); break; case 4: val = GET_DATA_QBIT(lines, x + j); if (val == sindex) SET_DATA_QBIT(lines, x + j, index); break; case 8: val = GET_DATA_BYTE(lines, x + j); if (val == sindex) SET_DATA_BYTE(lines, x + j, index); break; default: return ERROR_INT("depth not in {1,2,4,8}", __func__, 1); } } } } return 0; } /*-------------------------------------------------------------* * Repaint all pixels through mask * *-------------------------------------------------------------*/ /*! * \brief pixSetMaskedCmap() * * \param[in] pixs 2, 4 or 8 bpp, colormapped * \param[in] pixm [optional] 1 bpp mask; no-op if NULL * \param[in] x, y origin of pixm relative to pixs; * can be negative * \param[in] rval, gval, bval new color to set at each masked pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) It paints a single color through the mask (as a stencil).
 *      (3) The mask origin is placed at (%x,%y) on %pixs, and the
 *          operation is clipped to the intersection of the mask and pixs.
 *      (4) If %pixm == NULL, a warning is given.
 *      (5) Typically, %pixm is a small binary mask located somewhere
 *          on the larger %pixs.
 *      (6) If the color is in the colormap, it is used.  Otherwise,
 *          it is added if possible; an error is returned if the
 *          colormap is already full.
 * 
*/ l_ok pixSetMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, wpl, wm, hm, wplm; l_int32 i, j, index; l_uint32 *data, *datam, *line, *linem; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap in pixs", __func__, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", __func__); return 0; } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2,4,8}", __func__, 1); if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); /* Add new color if necessary; store in 'index' */ if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("no room in cmap", __func__, 1); index = pixcmapGetCount(cmap) - 1; } pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); pixGetDimensions(pixm, &wm, &hm, NULL); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hm; i++) { if (i + y < 0 || i + y >= h) continue; line = data + (i + y) * wpl; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (j + x < 0 || j + x >= w) continue; if (GET_DATA_BIT(linem, j)) { /* paint color */ switch (d) { case 2: SET_DATA_DIBIT(line, j + x, index); break; case 4: SET_DATA_QBIT(line, j + x, index); break; case 8: SET_DATA_BYTE(line, j + x, index); break; default: return ERROR_INT("depth not in {2,4,8}", __func__, 1); } } } } return 0; } leptonica-1.86.0/src/parseprotos.c000066400000000000000000001025101506303110300170670ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * \file parseprotos.c *
 *
 *       char             *parseForProtos()
 *
 *    Static helpers
 *       static l_int32    getNextNonCommentLine()
 *       static l_int32    getNextNonBlankLine()
 *       static l_int32    getNextNonDoubleSlashLine()
 *       static l_int32    searchForProtoSignature()
 *       static char      *captureProtoSignature()
 *       static char      *cleanProtoSignature()
 *       static l_int32    skipToEndOfFunction()
 *       static l_int32    skipToMatchingBrace()
 *       static l_int32    skipToSemicolon()
 *       static l_int32    getOffsetForCharacter()
 *       static l_int32    getOffsetForMatchingRP()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define L_BUF_SIZE 2048 /* max token size */ static l_int32 getNextNonCommentLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 getNextNonBlankLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 getNextNonDoubleSlashLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 searchForProtoSignature(SARRAY *sa, l_int32 begin, l_int32 *pstart, l_int32 *pstop, l_int32 *pcharindex, l_int32 *pfound); static char * captureProtoSignature(SARRAY *sa, l_int32 start, l_int32 stop, l_int32 charindex); static char * cleanProtoSignature(char *str); static l_int32 skipToEndOfFunction(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext); static l_int32 skipToMatchingBrace(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *prbline, l_int32 *prbindex); static l_int32 skipToSemicolon(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext); static l_int32 getOffsetForCharacter(SARRAY *sa, l_int32 start, char tchar, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); static l_int32 getOffsetForMatchingRP(SARRAY *sa, l_int32 start, l_int32 soffsetlp, l_int32 boffsetlp, l_int32 toffsetlp, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); /* * \brief parseForProtos() * * \param[in] filein output of cpp * \param[in] prestring [optional] string that prefaces each decl; * use NULL to omit * \return parsestr string of function prototypes, or NULL on error * *
 * Notes:
 *      (1) We parse the output of cpp:
 *              cpp -ansi 
 *          Three plans were attempted, with success on the third.
 *      (2) Plan 1.  A cursory examination of the cpp output indicated that
 *          every function was preceded by a cpp comment statement.
 *          So we just need to look at statements beginning after comments.
 *          Unfortunately, this is NOT the case.  Some functions start
 *          without cpp comment lines, typically when there are no
 *          comments in the source that immediately precede the function.
 *      (3) Plan 2.  Consider the keywords in the language that start
 *          parts of the cpp file.  Some, like 'enum', 'union' and
 *          'struct', are followed after a while by '{', and eventually
 *          end with '}, plus an optional token and a final ';'.
 *          Others, like 'extern', 'static' and 'typedef', are never
 *          the beginnings of global function definitions.   Function
 *          prototypes have one or more sets of '(' followed eventually
 *          by a ')', and end with ';'.  But function definitions have
 *          tokens, followed by '(', more tokens, ')' and then
 *          immediately a '{'.  We would generate a prototype from this
 *          by adding a ';' to all tokens up to the ')'.  So we use
 *          these special tokens to decide what we are parsing.  And
 *          whenever a function definition is found and the prototype
 *          extracted, we skip through the rest of the function
 *          past the corresponding '}'.  This token ends a line, and
 *          is often on a line of its own.  But as it turns out,
 *          the only keyword we need to consider is 'static'.
 *      (4) Plan 3.  Consider the parentheses and braces for various
 *          declarations.  A struct, enum, or union has a pair of
 *          braces followed by a semicolon.  With the exception of an
 *          __attribute__ declaration for a struct, they cannot have parentheses
 *          before the left brace, but a struct can have lots of parentheses
 *          within the brace set.  A function prototype has no braces.
 *          A function declaration can have sets of left and right
 *          parentheses, but these are followed by a left brace.
 *          So plan 3 looks at the way parentheses and braces are
 *          organized.  Once the beginning of a function definition
 *          is found, the prototype is extracted and we search for
 *          the ending right brace.
 *      (5) To find the ending right brace, it is necessary to do some
 *          careful parsing.  For example, in this file, we have
 *          left and right braces as characters, and these must not
 *          be counted.  Somewhat more tricky, the file fhmtauto.c
 *          generates code, and includes a right brace in a string.
 *          So we must not include braces that are in strings.  But how
 *          do we know if something is inside a string?  Keep state,
 *          starting with not-inside, and every time you hit a double quote
 *          that is not escaped, toggle the condition.  Any brace
 *          found in the state of being within a string is ignored.
 *      (6) When a prototype is extracted, it is put in a canonical
 *          form (i.e., cleaned up).  Finally, we check that it is
 *          not static and save it.  (If static, it is ignored).
 *      (7) The %prestring for unix is NULL; it is included here so that
 *          you can use Microsoft's declaration for importing or
 *          exporting to a dll.  See environ.h for examples of use.
 *          Here, we set: %prestring = "LEPT_DLL ".  Note in particular
 *          the space character that will separate 'LEPT_DLL' from
 *          the standard unix prototype that follows.
 * 
*/ char * parseForProtos(const char *filein, const char *prestring) { char *strdata, *str, *newstr, *parsestr, *secondword; l_int32 start, next, stop, charindex, found; size_t nbytes; SARRAY *sa, *saout, *satest; if (!filein) return (char *)ERROR_PTR("filein not defined", __func__, NULL); /* Read in the cpp output into memory, one string for each * line in the file, omitting blank lines. */ strdata = (char *)l_binaryRead(filein, &nbytes); sa = sarrayCreateLinesFromString(strdata, 0); saout = sarrayCreate(0); next = 0; while (1) { /* repeat after each non-static prototype is extracted */ searchForProtoSignature(sa, next, &start, &stop, &charindex, &found); if (!found) break; /* lept_stderr(" start = %d, stop = %d, charindex = %d\n", start, stop, charindex); */ str = captureProtoSignature(sa, start, stop, charindex); /* Make sure that the signature found by cpp does not begin with * static, extern or typedef. We get 'extern' declarations * from header files, and with some versions of cpp running on * #include we get something of the form: * extern ... (( ... )) ... ( ... ) { ... * For this, the 1st '(' is the lp, the 2nd ')' is the rp, * and there is a lot of garbage between the rp and the lp. * It is easiest to simply reject any signature that starts * with 'extern'. Note also that an 'extern' token has been * prepended to each prototype, so the 'static' or * 'extern' keywords we are looking for, if they exist, * would be the second word. We also have a typedef in * bmpio.c that has the form: * typedef struct __attribute__((....)) { ...} ... ; * This is avoided by blacklisting 'typedef' along with 'extern' * and 'static'. */ satest = sarrayCreateWordsFromString(str); secondword = sarrayGetString(satest, 1, L_NOCOPY); if (strcmp(secondword, "static") && /* not static */ strcmp(secondword, "extern") && /* not extern */ strcmp(secondword, "typedef")) { /* not typedef */ if (prestring) { /* prepend it to the prototype */ newstr = stringJoin(prestring, str); sarrayAddString(saout, newstr, L_INSERT); LEPT_FREE(str); } else { sarrayAddString(saout, str, L_INSERT); } } else { LEPT_FREE(str); } sarrayDestroy(&satest); skipToEndOfFunction(sa, stop, charindex, &next); if (next == -1) break; } /* Flatten into a string with newlines between prototypes */ parsestr = sarrayToString(saout, 1); LEPT_FREE(strdata); sarrayDestroy(&sa); sarrayDestroy(&saout); return parsestr; } /* * \brief getNextNonCommentLine() * * \param[in] sa output from cpp, by line) * \param[in] start starting index to search) * \param[out] pnext index of first uncommented line after the start line * \return 0 if OK, o on error * *
 * Notes:
 *      (1) Skips over all consecutive comment lines, beginning at 'start'
 *      (2) If all lines to the end are '#' comments, return next = -1
 * 
*/ static l_int32 getNextNonCommentLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, n; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pnext) return ERROR_INT("&pnext not defined", __func__, 1); /* Init for situation where this line and all following are comments */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return ERROR_INT("str not returned; shouldn't happen", __func__, 1); if (str[0] != '#') { *pnext = i; return 0; } } return 0; } /* * \brief getNextNonBlankLine() * * \param[in] sa output from cpp, by line * \param[in] start starting index to search * \param[out] pnext index of first nonblank line after the start line * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Skips over all consecutive blank lines, beginning at 'start'
 *      (2) A blank line has only whitespace characters (' ', '\t', '\n', '\r')
 *      (3) If all lines to the end are blank, return next = -1
 * 
*/ static l_int32 getNextNonBlankLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, j, n, len; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pnext) return ERROR_INT("&pnext not defined", __func__, 1); /* Init for situation where this line and all following are blank */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return ERROR_INT("str not returned; shouldn't happen", __func__, 1); len = strlen(str); for (j = 0; j < len; j++) { if (str[j] != ' ' && str[j] != '\t' && str[j] != '\n' && str[j] != '\r') { /* non-blank */ *pnext = i; return 0; } } } return 0; } /* * \brief getNextNonDoubleSlashLine() * * \param[in] sa output from cpp, by line * \param[in] start starting index to search * \param[out] pnext index of first uncommented line after the start line * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Skips over all consecutive '//' lines, beginning at 'start'
 *      (2) If all lines to the end start with '//', return next = -1
 * 
*/ static l_int32 getNextNonDoubleSlashLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, n, len; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pnext) return ERROR_INT("&pnext not defined", __func__, 1); /* Init for situation where this line and all following * start with '//' */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return ERROR_INT("str not returned; shouldn't happen", __func__, 1); len = strlen(str); if (len < 2 || str[0] != '/' || str[1] != '/') { *pnext = i; return 0; } } return 0; } /* * \brief searchForProtoSignature() * * \param[in] sa output from cpp, by line * \param[in] begin beginning index to search * \param[out] pstart starting index for function definition * \param[out] pstop index of line on which proto is completed * \param[out] pcharindex char index of completing ')' character * \param[out] pfound 1 if valid signature is found; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If this returns found == 0, it means that there are no
 *          more function definitions in the file.  Caller must check
 *          this value and exit the loop over the entire cpp file.
 *      (2) This follows plan 3 (see above).  We skip comment and blank
 *          lines at the beginning.  Then we don't check for keywords.
 *          Instead, find the relative locations of the first occurrences
 *          of these four tokens: left parenthesis (lp), right
 *          parenthesis (rp), left brace (lb) and semicolon (sc).
 *      (3) The signature of a function definition looks like this:
 *               .... '(' .... ')' '{'
 *          where the lp and rp must both precede the lb, with only
 *          whitespace between the rp and the lb.  The '....'
 *          are sets of tokens that have no braces.
 *      (4) If a function definition is found, this returns found = 1,
 *          with 'start' being the first line of the definition and
 *          'charindex' being the position of the ')' in line 'stop'
 *          at the end of the arg list.
 * 
*/ static l_int32 searchForProtoSignature(SARRAY *sa, l_int32 begin, l_int32 *pstart, l_int32 *pstop, l_int32 *pcharindex, l_int32 *pfound) { l_int32 next, rbline, rbindex, scline; l_int32 soffsetlp, soffsetrp, soffsetlb, soffsetsc; l_int32 boffsetlp, boffsetrp, boffsetlb, boffsetsc; l_int32 toffsetlp, toffsetrp, toffsetlb, toffsetsc; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pstart) return ERROR_INT("&start not defined", __func__, 1); if (!pstop) return ERROR_INT("&stop not defined", __func__, 1); if (!pcharindex) return ERROR_INT("&charindex not defined", __func__, 1); if (!pfound) return ERROR_INT("&found not defined", __func__, 1); *pfound = FALSE; while (1) { /* Skip over sequential '#' comment lines */ getNextNonCommentLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Skip over sequential blank lines */ getNextNonBlankLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Skip over sequential lines starting with '//' */ getNextNonDoubleSlashLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Search for specific character sequence patterns; namely * a lp, a matching rp, a lb and a semicolon. * Abort the search if no lp is found. */ getOffsetForCharacter(sa, next, '(', &soffsetlp, &boffsetlp, &toffsetlp); if (soffsetlp == -1) break; getOffsetForMatchingRP(sa, next, soffsetlp, boffsetlp, toffsetlp, &soffsetrp, &boffsetrp, &toffsetrp); getOffsetForCharacter(sa, next, '{', &soffsetlb, &boffsetlb, &toffsetlb); getOffsetForCharacter(sa, next, ';', &soffsetsc, &boffsetsc, &toffsetsc); /* We've found a lp. Now weed out the case where a matching * rp and a lb are not both found. */ if (soffsetrp == -1 || soffsetlb == -1) break; /* Check if a left brace occurs before a left parenthesis; * if so, skip it */ if (toffsetlb < toffsetlp) { skipToMatchingBrace(sa, next + soffsetlb, boffsetlb, &rbline, &rbindex); skipToSemicolon(sa, rbline, rbindex, &scline); begin = scline + 1; continue; } /* Check if a semicolon occurs before a left brace or * a left parenthesis; if so, skip it */ if ((soffsetsc != -1) && (toffsetsc < toffsetlb || toffsetsc < toffsetlp)) { skipToSemicolon(sa, next, 0, &scline); begin = scline + 1; continue; } /* OK, it should be a function definition. We haven't * checked that there is only white space between the * rp and lb, but we've only seen problems with two * extern inlines in sys/stat.h, and this is handled * later by eliminating any prototype beginning with 'extern'. */ *pstart = next; *pstop = next + soffsetrp; *pcharindex = boffsetrp; *pfound = TRUE; break; } return 0; } /* * \brief captureProtoSignature() * * \param[in] sa output from cpp, by line * \param[in] start starting index to search; never a comment line * \param[in] stop index of line on which pattern is completed * \param[in] charindex char index of completing ')' character * \return cleanstr prototype string, or NULL on error * *
 * Notes:
 *      (1) Return all characters, ending with a ';' after the ')'
 * 
*/ static char * captureProtoSignature(SARRAY *sa, l_int32 start, l_int32 stop, l_int32 charindex) { char *str, *newstr, *protostr, *cleanstr; SARRAY *sap; l_int32 i; if (!sa) return (char *)ERROR_PTR("sa not defined", __func__, NULL); sap = sarrayCreate(0); for (i = start; i < stop; i++) { str = sarrayGetString(sa, i, L_COPY); sarrayAddString(sap, str, L_INSERT); } str = sarrayGetString(sa, stop, L_COPY); str[charindex + 1] = '\0'; newstr = stringJoin(str, ";"); sarrayAddString(sap, newstr, L_INSERT); LEPT_FREE(str); protostr = sarrayToString(sap, 2); sarrayDestroy(&sap); cleanstr = cleanProtoSignature(protostr); LEPT_FREE(protostr); return cleanstr; } /* * \brief cleanProtoSignature() * * \param[in] instr input prototype string * \return cleanstr clean prototype string, or NULL on error * *
 * Notes:
 *      (1) Adds 'extern' at beginning and regularizes spaces
 *          between tokens.
 * 
*/ static char * cleanProtoSignature(char *instr) { char *str, *cleanstr; char buf[L_BUF_SIZE]; char externstring[] = "extern"; l_int32 i, j, nwords, nchars, index, len; SARRAY *sa, *saout; if (!instr) return (char *)ERROR_PTR("instr not defined", __func__, NULL); sa = sarrayCreateWordsFromString(instr); nwords = sarrayGetCount(sa); saout = sarrayCreate(0); sarrayAddString(saout, externstring, L_COPY); for (i = 0; i < nwords; i++) { str = sarrayGetString(sa, i, L_NOCOPY); nchars = strlen(str); index = 0; for (j = 0; j < nchars; j++) { if (index > L_BUF_SIZE - 6) { sarrayDestroy(&sa); sarrayDestroy(&saout); return (char *)ERROR_PTR("token too large", __func__, NULL); } if (str[j] == '(') { buf[index++] = ' '; buf[index++] = '('; buf[index++] = ' '; } else if (str[j] == ')') { buf[index++] = ' '; buf[index++] = ')'; } else { buf[index++] = str[j]; } } buf[index] = '\0'; sarrayAddString(saout, buf, L_COPY); } /* Flatten to a prototype string with spaces added after * each word, and remove the last space */ cleanstr = sarrayToString(saout, 2); len = strlen(cleanstr); cleanstr[len - 1] = '\0'; sarrayDestroy(&sa); sarrayDestroy(&saout); return cleanstr; } /* * \brief skipToEndOfFunction() * * \param[in] sa output from cpp, by line * \param[in] start index of starting line with left bracket to search * \param[in] lbindex starting char index for left bracket * \param[out] pnext index of line following the ending '}' for function * \return 0 if OK, 1 on error */ static l_int32 skipToEndOfFunction(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *pnext) { l_int32 end, rbindex; l_int32 soffsetlb, boffsetlb, toffsetlb; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pnext) return ERROR_INT("&next not defined", __func__, 1); getOffsetForCharacter(sa, start, '{', &soffsetlb, &boffsetlb, &toffsetlb); skipToMatchingBrace(sa, start + soffsetlb, boffsetlb, &end, &rbindex); if (end == -1) { /* shouldn't happen! */ *pnext = -1; return 1; } *pnext = end + 1; return 0; } /* * \brief skipToMatchingBrace() * * \param[in] sa output from cpp, by line * \param[in] start index of starting line with left bracket to search * \param[in] lbindex starting char index for left bracket * \param[out] pstop index of line with the matching right bracket * \param[out] prbindex char index of matching right bracket * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the matching right brace is not found, returns
 *          stop = -1.  This shouldn't happen.
 * 
*/ static l_int32 skipToMatchingBrace(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *pstop, l_int32 *prbindex) { char *str; l_int32 i, j, jstart, n, sumbrace, found, instring, nchars; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pstop) return ERROR_INT("&stop not defined", __func__, 1); if (!prbindex) return ERROR_INT("&rbindex not defined", __func__, 1); instring = 0; /* init to FALSE; toggle on double quotes */ *pstop = -1; n = sarrayGetCount(sa); sumbrace = 1; found = FALSE; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); jstart = 0; if (i == start) jstart = lbindex + 1; nchars = strlen(str); for (j = jstart; j < nchars; j++) { /* Toggle the instring state every time you encounter * a double quote that is NOT escaped. */ if (j == jstart && str[j] == '\"') instring = 1 - instring; if (j > jstart && str[j] == '\"' && str[j-1] != '\\') instring = 1 - instring; /* Record the braces if they are neither a literal character * nor within a string. */ if (str[j] == '{' && str[j+1] != '\'' && !instring) { sumbrace++; } else if (str[j] == '}' && str[j+1] != '\'' && !instring) { sumbrace--; if (sumbrace == 0) { found = TRUE; *prbindex = j; break; } } } if (found) { *pstop = i; return 0; } } return ERROR_INT("matching right brace not found", __func__, 1); } /* * \brief skipToSemicolon() * * \param[in] sa output from cpp, by line * \param[in] start index of starting line to search * \param[in] charindex starting char index for search * \param[out] pnext index of line containing the next ';' * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the semicolon isn't found, returns next = -1.
 *          This shouldn't happen.
 *      (2) This is only used in contexts where the semicolon is
 *          not within a string.
 * 
*/ static l_int32 skipToSemicolon(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext) { char *str; l_int32 i, j, n, jstart, nchars, found; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pnext) return ERROR_INT("&next not defined", __func__, 1); *pnext = -1; n = sarrayGetCount(sa); found = FALSE; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); jstart = 0; if (i == start) jstart = charindex + 1; nchars = strlen(str); for (j = jstart; j < nchars; j++) { if (str[j] == ';') { found = TRUE;; break; } } if (found) { *pnext = i; return 0; } } return ERROR_INT("semicolon not found", __func__, 1); } /* * \brief getOffsetForCharacter() * * \param[in] sa output from cpp, by line * \param[in] start starting index in sa to search; * never a comment line * \param[in] tchar we are searching for the first instance of this * \param[out] psoffset offset in strings from start index * \param[out] pboffset offset in bytes within string in which * the character is first found * \param[out] ptoffset offset in total bytes from beginning of string * indexed by 'start' to the location where * the character is first found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We are searching for the first instance of 'tchar', starting
 *          at the beginning of the string indexed by start.
 *      (2) If the character is not found, soffset is returned as -1,
 *          and the other offsets are set to very large numbers.  The
 *          caller must check the value of soffset.
 *      (3) This is only used in contexts where it is not necessary to
 *          consider if the character is inside a string.
 * 
*/ static l_int32 getOffsetForCharacter(SARRAY *sa, l_int32 start, char tchar, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset) { char *str; l_int32 i, j, n, nchars, totchars, found; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!psoffset) return ERROR_INT("&soffset not defined", __func__, 1); if (!pboffset) return ERROR_INT("&boffset not defined", __func__, 1); if (!ptoffset) return ERROR_INT("&toffset not defined", __func__, 1); *psoffset = -1; /* init to not found */ *pboffset = 100000000; *ptoffset = 100000000; n = sarrayGetCount(sa); found = FALSE; totchars = 0; for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return ERROR_INT("str not returned; shouldn't happen", __func__, 1); nchars = strlen(str); for (j = 0; j < nchars; j++) { if (str[j] == tchar) { found = TRUE; break; } } if (found) break; totchars += nchars; } if (found) { *psoffset = i - start; *pboffset = j; *ptoffset = totchars + j; } return 0; } /* * \brief getOffsetForMatchingRP() * * \param[in] sa output from cpp, by line * \param[in] start starting index in sa to search; * never a comment line * \param[in] soffsetlp string offset to first LP * \param[in] boffsetlp byte offset within string to first LP * \param[in] toffsetlp total byte offset to first LP * \param[out] psoffset offset in strings from start index * \param[out] pboffset offset in bytes within string in which * the matching RP is found * \param[out] ptoffset offset in total bytes from beginning of string * indexed by 'start' to the location where * the matching RP is found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We are searching for the matching right parenthesis (RP) that
 *          corresponds to the first LP found beginning at the string
 *          indexed by start.
 *      (2) If the matching RP is not found, soffset is returned as -1,
 *          and the other offsets are set to very large numbers.  The
 *          caller must check the value of soffset.
 *      (3) This is only used in contexts where it is not necessary to
 *          consider if the character is inside a string.
 *      (4) We must do this because although most arg lists have a single
 *          left and right parenthesis, it is possible to construct
 *          more complicated prototype declarations, such as those
 *          where functions are passed in.  The C++ rules for prototypes
 *          are strict, and require that for functions passed in as args,
 *          the function name arg be placed in parenthesis, as well
 *          as its arg list, thus incurring two extra levels of parentheses.
 * 
*/ static l_int32 getOffsetForMatchingRP(SARRAY *sa, l_int32 start, l_int32 soffsetlp, l_int32 boffsetlp, l_int32 toffsetlp, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset) { char *str; l_int32 i, j, n, nchars, totchars, leftmatch, firstline, jstart, found; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!psoffset) return ERROR_INT("&soffset not defined", __func__, 1); if (!pboffset) return ERROR_INT("&boffset not defined", __func__, 1); if (!ptoffset) return ERROR_INT("&toffset not defined", __func__, 1); *psoffset = -1; /* init to not found */ *pboffset = 100000000; *ptoffset = 100000000; n = sarrayGetCount(sa); found = FALSE; totchars = toffsetlp; leftmatch = 1; /* count of (LP - RP); we're finished when it goes to 0. */ firstline = start + soffsetlp; for (i = firstline; i < n; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return ERROR_INT("str not returned; shouldn't happen", __func__, 1); nchars = strlen(str); jstart = 0; if (i == firstline) jstart = boffsetlp + 1; for (j = jstart; j < nchars; j++) { if (str[j] == '(') leftmatch++; else if (str[j] == ')') leftmatch--; if (leftmatch == 0) { found = TRUE; break; } } if (found) break; if (i == firstline) totchars += nchars - boffsetlp; else totchars += nchars; } if (found) { *psoffset = i - start; *pboffset = j; *ptoffset = totchars + j; } return 0; } leptonica-1.86.0/src/partify.c000066400000000000000000000262561506303110300162000ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file partify.c *
 *
 *     Top level
 *         l_int32          partifyFiles()
 *         l_int32          partifyPixac()
 *
 *     Helpers
 *         static BOXA     *pixLocateStaveSets()
 *         static l_int32   boxaRemoveVGaps()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Static helplers */ static BOXA *pixLocateStaveSets(PIX *pixs, l_int32 pageno, PIXA *pixadb); static l_ok boxaRemoveVGaps(BOXA *boxa); /*---------------------------------------------------------------------* * Top level * *---------------------------------------------------------------------*/ /*! * \brief partifyFiles() * * \param[in] dirname directory of files * \param[in] substr required filename substring; use NULL for all files * \param[in] nparts number of parts to generate (counting from top) * \param[in] outroot root name of output pdf files * \param[in] debugfile [optional] set to NULL for no debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) All page images are compressed in png format into a pixacomp.
 *      (2) Each page image is deskewed, binarized at 300 ppi,
 *          partified into %nparts, and saved in a set of pixacomps
 *          in tiff-g4 format.
 *      (3) Each partified pixacomp is rendered into a set of page images,
 *          and output as a pdf.
 * 
*/ l_ok partifyFiles(const char *dirname, const char *substr, l_int32 nparts, const char *outroot, const char *debugfile) { PIXA *pixadb; PIXAC *pixac; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if (nparts < 0 || nparts > 10) return ERROR_INT("nparts not in [1 ... 10]", __func__, 1); if (!outroot || outroot[0] == '\n') return ERROR_INT("outroot undefined or empty", __func__, 1); pixadb = (debugfile) ? pixaCreate(0) : NULL; pixac = pixacompCreateFromFiles(dirname, substr, IFF_PNG); partifyPixac(pixac, nparts, outroot, pixadb); if (pixadb) { L_INFO("writing debug output to %s\n", __func__, debugfile); pixaConvertToPdf(pixadb, 300, 1.0, L_FLATE_ENCODE, 0, "Partify Debug", debugfile); } pixacompDestroy(&pixac); pixaDestroy(&pixadb); return 0; } /*! * \brief partifyPixac() * * \param[in] pixac with at least one image * \param[in] nparts number of parts to generate (counting from top) * \param[in] outroot root name of output pdf files * \param[in] pixadb [optional] debug pixa; can be NULL * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See partifyPixac().
 *      (2) If the image files do not have a resolution, 300 ppi is assumed.
 * 
*/ l_ok partifyPixac(PIXAC *pixac, l_int32 nparts, const char *outroot, PIXA *pixadb) { char buf[512]; l_int32 i, j, pageno, res, npage, nbox, icount, line; l_float32 factor; L_BMF *bmf; BOX *box1, *box2; BOXA *boxa1, *boxa2, *boxa3; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXAC **pixaca; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if ((npage = pixacompGetCount(pixac)) == 0) return ERROR_INT("pixac is empty", __func__, 1); if (nparts < 1 || nparts > 10) return ERROR_INT("nparts not in [1 ... 10]", __func__, 1); if (!outroot || outroot[0] == '\n') return ERROR_INT("outroot undefined or empty", __func__, 1); /* Initialize the output array for each of the nparts */ pixaca = (PIXAC **)LEPT_CALLOC(nparts, sizeof(PIXAC *)); for (i = 0; i < nparts; i++) pixaca[i] = pixacompCreate(0); /* Process each page */ line = 1; bmf = bmfCreate(NULL, 10); for (pageno = 0; pageno < npage; pageno++) { if ((pix1 = pixacompGetPix(pixac, pageno)) == NULL) { L_ERROR("pix for page %d not found\n", __func__, pageno); continue; } /* Scale, binarize and deskew */ res = pixGetXRes(pix1); if (res == 0 || res == 300 || res > 600) { pix2 = pixClone(pix1); } else { factor = 300.0f / (l_float32)res; if (factor > 3) L_WARNING("resolution is very low\n", __func__); pix2 = pixScale(pix1, factor, factor); } pix3 = pixConvertTo1Adaptive(pix2); pix4 = pixDeskew(pix3, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); if (!pix4) { L_ERROR("pix for page %d not deskewed\n", __func__, pageno); continue; } pix1 = pixClone(pix4); /* rename */ pixDestroy(&pix4); /* Find the stave sets at 4x reduction */ boxa1 = pixLocateStaveSets(pix1, pageno, pixadb); /* Break each stave set into the separate staves (parts). * A typical set will have more than one part, but if one of * the parts is a keyboard, it will usually have two staves * (also called a Grand Staff), composed of treble and * bass staves. For example, a classical violin sonata * could have a staff for the violin and two staves for * the piano. We would set nparts == 2, and extract both * of the piano staves as the piano part. */ nbox = boxaGetCount(boxa1); lept_stderr("number of boxes in page %d: %d\n", pageno, nbox); for (i = 0; i < nbox; i++, line++) { snprintf(buf, sizeof(buf), "%d", line); box1 = boxaGetBox(boxa1, i, L_COPY); pix2 = pixClipRectangle(pix1, box1, NULL); pix3 = pixMorphSequence(pix2, "d1.20 + o50.1 + o1.30", 0); boxa2 = pixConnCompBB(pix3, 8); boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); boxaRemoveVGaps(boxa3); icount = boxaGetCount(boxa3); if (icount < nparts) L_WARNING("nparts requested = %d, but only found %d\n", __func__, nparts, icount); for (j = 0; j < icount && j < nparts; j++) { box2 = boxaGetBox(boxa3, j, L_COPY); if (j == nparts - 1) /* extend the box to the bottom */ boxSetSideLocations(box2, -1, -1, -1, pixGetHeight(pix1) - 1); pix4 = pixClipRectangle(pix2, box2, NULL); pix5 = pixAddTextlines(pix4, bmf, buf, 1, L_ADD_LEFT); pixacompAddPix(pixaca[j], pix5, IFF_TIFF_G4); boxDestroy(&box2); pixDestroy(&pix4); pixDestroy(&pix5); } boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxDestroy(&box1); pixDestroy(&pix2); pixDestroy(&pix3); } boxaDestroy(&boxa1); pixDestroy(&pix1); } /* Output separate pdfs for each part */ for (i = 0; i < nparts; i++) { snprintf(buf, sizeof(buf), "%s-%d.pdf", outroot, i); L_INFO("writing part %d: %s\n", __func__, i, buf); pixacompConvertToPdf(pixaca[i], 300, 1.0, L_G4_ENCODE, 0, NULL, buf); pixacompDestroy(&pixaca[i]); } LEPT_FREE(pixaca); bmfDestroy(&bmf); return 0; } /* * \brief pixLocateStaveSets() * * \param[in] pixs 1 bpp, 300 ppi, deskewed * \param[in] pageno page number; used for debug output * \param[in] pixadb [optional] debug pixa; can be NULL * \return boxa containing the stave sets at full resolution */ static BOXA * pixLocateStaveSets(PIX *pixs, l_int32 pageno, PIXA *pixadb) { BOXA *boxa1, *boxa2, *boxa3, *boxa4; PIX *pix1, *pix2; if (!pixs) return (BOXA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Find the stave sets at 4x reduction */ pix1 = pixMorphSequence(pixs, "r11", 0); boxa1 = pixConnCompBB(pix1, 8); boxa2 = boxaSelectByArea(boxa1, 15000, L_SELECT_IF_GT, NULL); boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); if (pixadb) { pix2 = pixConvertTo32(pix1); pixRenderBoxaArb(pix2, boxa3, 2, 255, 0, 0); pixaAddPix(pixadb, pix2, L_INSERT); pixDisplay(pix2, 100 * pageno, 100); } boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaRemoveVGaps(boxa3); if (pixadb) { pix2 = pixConvertTo32(pix1); pixRenderBoxaArb(pix2, boxa3, 2, 0, 255, 0); pixaAddPix(pixadb, pix2, L_INSERT); pixDisplay(pix2, 100 * pageno, 600); } boxa4 = boxaTransform(boxa3, 0, 0, 4.0, 4.0); /* back to full res */ boxaDestroy(&boxa3); pixDestroy(&pix1); return boxa4; } /* * \brief boxaRemoveVGaps() * * \param[in] boxa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The boxes in %boxa are aligned vertically.  Move the horizontal
 *          edges vertically to remove the gaps between boxes.
 * 
*/ static l_ok boxaRemoveVGaps(BOXA *boxa) { l_int32 nbox, i, y1, h1, y2, h2, delta; if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if ((nbox = boxaGetCount(boxa)) == 0) return ERROR_INT("boxa is empty", __func__, 1); for (i = 0; i < nbox - 1; i++) { boxaGetBoxGeometry(boxa, i, NULL, &y1, NULL, &h1); boxaGetBoxGeometry(boxa, i + 1, NULL, &y2, NULL, &h2); delta = (y2 - y1 - h1) / 2; boxaAdjustBoxSides(boxa, i, 0, 0, 0, delta); boxaAdjustBoxSides(boxa, i + 1, 0, 0, -delta, 0); } boxaAdjustBoxSides(boxa, nbox - 1, 0, 0, 0, delta); /* bot of last */ return 0; } leptonica-1.86.0/src/partition.c000066400000000000000000000574531506303110300165360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file partition.c *
 *
 *      Whitespace block extraction
 *          BOXA            *boxaGetWhiteblocks()
 *
 *      Helpers
 *          static PARTEL   *partelCreate()
 *          static void      partelDestroy()
 *          static l_int32   partelSetSize()
 *          static BOXA     *boxaGenerateSubboxes()
 *          static BOX      *boxaSelectPivotBox()
 *          static l_int32   boxaCheckIfOverlapIsSmall()
 *          BOXA            *boxaPruneSortedOnOverlap()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*! Partition element */ struct PartitionElement { l_float32 size; /* sorting key */ BOX *box; /* region of the element */ BOXA *boxa; /* set of intersecting boxes */ }; typedef struct PartitionElement PARTEL; static PARTEL * partelCreate(BOX *box); static void partelDestroy(PARTEL **ppartel); static l_int32 partelSetSize(PARTEL *partel, l_int32 sortflag); static BOXA * boxaGenerateSubboxes(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract); static BOX * boxaSelectPivotBox(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract); static l_int32 boxCheckIfOverlapIsBig(BOX *box, BOXA *boxa, l_float32 maxoverlap); static const l_int32 DefaultMaxPops = 20000; #ifndef NO_CONSOLE_IO #define OUTPUT_HEAP_STATS 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Whitespace block extraction * *------------------------------------------------------------------*/ /*! * \brief boxaGetWhiteblocks() * * \param[in] boxas typ. a set of bounding boxes of fg components * \param[in] box initial region; typically including all boxes * in boxas; if null, it computes the region to * include all boxes in boxas * \param[in] sortflag L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA * \param[in] maxboxes max number of output whitespace boxes; e.g., 100 * \param[in] maxoverlap maximum fractional overlap of a box by any * of the larger boxes; e.g., 0.2 * \param[in] maxperim maximum half-perimeter, in pixels, for which * pivot is selected by proximity to box centroid; * e.g., 200 * \param[in] fract fraction of box diagonal that is an acceptable * distance from the box centroid to select * the pivot; e.g., 0.2 * \param[in] maxpops max number of pops from the heap; use 0 as default * \return boxa of sorted whitespace boxes, or NULL on error * *
 * Notes:
 *      (1) This uses the elegant Breuel algorithm, found in "Two
 *          Geometric Algorithms for Layout Analysis", 2002,
 *          url: "citeseer.ist.psu.edu/breuel02two.html".
 *          It starts with the bounding boxes (b.b.) of the connected
 *          components (c.c.) in a region, along with the rectangle
 *          representing that region.  It repeatedly divides the
 *          rectangle into four maximal rectangles that exclude a
 *          pivot rectangle, sorting them in a priority queue
 *          according to one of the six sort flags.  It returns a boxa
 *          of the "largest" set that have no intersection with boxes
 *          from the input boxas.
 *      (2) If box == NULL, the initial region is the minimal region
 *          that includes the origin and every box in boxas.
 *      (3) maxboxes is the maximum number of whitespace boxes that will
 *          be returned.  The actual number will depend on the image
 *          and the values chosen for maxoverlap and maxpops.  In many
 *          cases, the actual number will be 'maxboxes'.
 *      (4) maxoverlap allows pruning of whitespace boxes depending on
 *          the overlap.  To avoid all pruning, use maxoverlap = 1.0.
 *          To select only boxes that have no overlap with each other
 *          (maximal pruning), choose maxoverlap = 0.0.
 *          Otherwise, no box can have more than the 'maxoverlap' fraction
 *          of its area overlapped by any larger (in the sense of the
 *          sortflag) box.
 *      (5) Choose maxperim (actually, maximum half-perimeter) to
 *          represent a c.c. that is small enough so that you don't care
 *          about the white space that could be inside of it.  For all such
 *          c.c., the pivot for 'quadfurcation' of a rectangle is selected
 *          as having a reasonable proximity to the rectangle centroid.
 *      (6) Use fract in the range [0.0 ... 1.0].  Set fract = 0.0
 *          to choose the small box nearest the centroid as the pivot.
 *          If you choose fract > 0.0, it is suggested that you call
 *          boxaPermuteRandom() first, to permute the boxes (see usage below).
 *          This should reduce the search time for each of the pivot boxes.
 *      (7) Choose maxpops to be the maximum number of rectangles that
 *          are popped from the heap.  This is an indirect way to limit the
 *          execution time.  Use 0 for default (a fairly large number).
 *          At any time, you can expect the heap to contain about
 *          2.5 times as many boxes as have been popped off.
 *      (8) The output result is a sorted set of overlapping
 *          boxes, constrained by 'maxboxes', 'maxoverlap' and 'maxpops'.
 *      (9) The main defect of the method is that it abstracts out the
 *          actual components, retaining only the b.b. for analysis.
 *          Consider a component with a large b.b.  If this is chosen
 *          as a pivot, all white space inside is immediately taken
 *          out of consideration.  Furthermore, even if it is never chosen
 *          as a pivot, as the partitioning continues, at no time will
 *          any of the whitespace inside this component be part of a
 *          rectangle with zero overlapping boxes.  Thus, the interiors
 *          of all boxes are necessarily excluded from the union of
 *          the returned whitespace boxes.
 *     (10) It should be noted that the algorithm puts a large number
 *          of partels on the queue.  Setting a limit of X partels to
 *          remove from the queue, one typically finds that there will be
 *          several times that number (say, 2X - 3X) left on the queue.
 *          For an efficient algorithm to find the largest white or
 *          or black rectangles, without permitting them to overlap,
 *          see pixFindLargeRectangles().
 *     (11) USAGE: One way to accommodate to this weakness is to remove such
 *          large b.b. before starting the computation.  For example,
 *          if 'box' is an input image region containing 'boxa' b.b. of c.c.:
 *
 *                   // Faster pivot choosing
 *               boxaPermuteRandom(boxa, boxa);
 *
 *                   // Remove anything either large width or height
 *               boxat = boxaSelectBySize(boxa, maxwidth, maxheight,
 *                                        L_SELECT_IF_BOTH, L_SELECT_IF_LT,
 *                                        NULL);
 *
 *               boxad = boxaGetWhiteblocks(boxat, box, type, maxboxes,
 *                                          maxoverlap, maxperim, fract,
 *                                          maxpops);
 *
 *          The result will be rectangular regions of "white space" that
 *          extend into (and often through) the excluded components.
 *     (11) As a simple example, suppose you wish to find the columns on a page.
 *          First exclude large c.c. that may block the columns, and then call:
 *
 *               boxad = boxaGetWhiteblocks(boxa, box, L_SORT_BY_HEIGHT,
 *                                          20, 0.15, 200, 0.2, 2000);
 *
 *          to get the 20 tallest boxes with no more than 0.15 overlap
 *          between a box and any of the taller ones, and avoiding the
 *          use of any c.c. with a b.b. half perimeter greater than 200
 *          as a pivot.
 * 
*/ BOXA * boxaGetWhiteblocks(BOXA *boxas, BOX *box, l_int32 sortflag, l_int32 maxboxes, l_float32 maxoverlap, l_int32 maxperim, l_float32 fract, l_int32 maxpops) { l_int32 i, w, h, n, nsub, npush, npop; BOX *boxsub; BOXA *boxa, *boxa4, *boxasub, *boxad; PARTEL *partel; L_HEAP *lh; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (sortflag != L_SORT_BY_WIDTH && sortflag != L_SORT_BY_HEIGHT && sortflag != L_SORT_BY_MIN_DIMENSION && sortflag != L_SORT_BY_MAX_DIMENSION && sortflag != L_SORT_BY_PERIMETER && sortflag != L_SORT_BY_AREA) return (BOXA *)ERROR_PTR("invalid sort flag", __func__, NULL); if (maxboxes < 1) { maxboxes = 1; L_WARNING("setting maxboxes = 1\n", __func__); } if (maxoverlap < 0.0 || maxoverlap > 1.0) return (BOXA *)ERROR_PTR("invalid maxoverlap", __func__, NULL); if (maxpops == 0) maxpops = DefaultMaxPops; if (!box) { boxaGetExtent(boxas, &w, &h, NULL); box = boxCreate(0, 0, w, h); } /* Prime the heap */ lh = lheapCreate(20, L_SORT_DECREASING); partel = partelCreate(box); partel->boxa = boxaCopy(boxas, L_CLONE); partelSetSize(partel, sortflag); lheapAdd(lh, partel); npush = 1; npop = 0; boxad = boxaCreate(0); while (1) { if ((partel = (PARTEL *)lheapRemove(lh)) == NULL) /* we're done */ break; npop++; /* How many boxes have we retrieved from the queue? */ if (npop > maxpops) { partelDestroy(&partel); break; } /* Extract the contents */ boxa = boxaCopy(partel->boxa, L_CLONE); box = boxClone(partel->box); partelDestroy(&partel); /* Can we output this one? */ n = boxaGetCount(boxa); if (n == 0) { if (boxCheckIfOverlapIsBig(box, boxad, maxoverlap) == 0) boxaAddBox(boxad, box, L_INSERT); else boxDestroy(&box); boxaDestroy(&boxa); if (boxaGetCount(boxad) >= maxboxes) /* we're done */ break; continue; } /* Generate up to 4 subboxes and put them on the heap */ boxa4 = boxaGenerateSubboxes(box, boxa, maxperim, fract); boxDestroy(&box); nsub = boxaGetCount(boxa4); for (i = 0; i < nsub; i++) { boxsub = boxaGetBox(boxa4, i, L_CLONE); boxasub = boxaIntersectsBox(boxa, boxsub); partel = partelCreate(boxsub); partel->boxa = boxasub; partelSetSize(partel, sortflag); lheapAdd(lh, partel); boxDestroy(&boxsub); } npush += nsub; /* How many boxes have we put on the queue? */ /* boxaWriteStderr(boxa4); */ boxaDestroy(&boxa4); boxaDestroy(&boxa); } #if OUTPUT_HEAP_STATS lept_stderr("Heap statistics:\n"); lept_stderr(" Number of boxes pushed: %d\n", npush); lept_stderr(" Number of boxes popped: %d\n", npop); lept_stderr(" Number of boxes on heap: %d\n", lheapGetCount(lh)); #endif /* OUTPUT_HEAP_STATS */ /* Clean up the heap */ while ((partel = (PARTEL *)lheapRemove(lh)) != NULL) partelDestroy(&partel); lheapDestroy(&lh, FALSE); return boxad; } /*------------------------------------------------------------------* * Helpers * *------------------------------------------------------------------*/ /*! * \brief partelCreate() * * \param[in] box region; inserts a copy * \return partel, or NULL on error */ static PARTEL * partelCreate(BOX *box) { PARTEL *partel; partel = (PARTEL *)LEPT_CALLOC(1, sizeof(PARTEL)); partel->box = boxCopy(box); return partel; } /*! * \brief partelDestroy() * * \param[in,out] ppartel contents will be set to null before returning * \return void */ static void partelDestroy(PARTEL **ppartel) { PARTEL *partel; if (ppartel == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((partel = *ppartel) == NULL) return; boxDestroy(&partel->box); boxaDestroy(&partel->boxa); LEPT_FREE(partel); *ppartel = NULL; return; } /*! * \brief partelSetSize() * * \param[in] partel * \param[in] sortflag L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA * \return 0 if OK, 1 on error */ static l_int32 partelSetSize(PARTEL *partel, l_int32 sortflag) { l_int32 w, h; if (!partel) return ERROR_INT("partel not defined", __func__, 1); boxGetGeometry(partel->box, NULL, NULL, &w, &h); if (sortflag == L_SORT_BY_WIDTH) partel->size = (l_float32)w; else if (sortflag == L_SORT_BY_HEIGHT) partel->size = (l_float32)h; else if (sortflag == L_SORT_BY_MIN_DIMENSION) partel->size = (l_float32)L_MIN(w, h); else if (sortflag == L_SORT_BY_MAX_DIMENSION) partel->size = (l_float32)L_MAX(w, h); else if (sortflag == L_SORT_BY_PERIMETER) partel->size = (l_float32)(w + h); else if (sortflag == L_SORT_BY_AREA) partel->size = (l_float32)(w * h); else return ERROR_INT("invalid sortflag", __func__, 1); return 0; } /*! * \brief boxaGenerateSubboxes() * * \param[in] box region to be split into up to four overlapping * subregions * \param[in] boxa boxes of rectangles intersecting the box * \param[in] maxperim maximum half-perimeter for which pivot * is selected by proximity to box centroid * \param[in] fract fraction of box diagonal that is an acceptable * distance from the box centroid to select the pivot * \return boxa of four or less overlapping subrectangles of * the box, or NULL on error */ static BOXA * boxaGenerateSubboxes(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract) { l_int32 x, y, w, h, xp, yp, wp, hp; BOX *boxp; /* pivot box */ BOX *boxsub; BOXA *boxa4; if (!box) return (BOXA *)ERROR_PTR("box not defined", __func__, NULL); if (!boxa) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); boxa4 = boxaCreate(4); boxp = boxaSelectPivotBox(box, boxa, maxperim, fract); boxGetGeometry(box, &x, &y, &w, &h); boxGetGeometry(boxp, &xp, &yp, &wp, &hp); boxDestroy(&boxp); if (xp > x) { /* left sub-box */ boxsub = boxCreate(x, y, xp - x, h); boxaAddBox(boxa4, boxsub, L_INSERT); } if (yp > y) { /* top sub-box */ boxsub = boxCreate(x, y, w, yp - y); boxaAddBox(boxa4, boxsub, L_INSERT); } if (xp + wp < x + w) { /* right sub-box */ boxsub = boxCreate(xp + wp, y, x + w - xp - wp, h); boxaAddBox(boxa4, boxsub, L_INSERT); } if (yp + hp < y + h) { /* bottom sub-box */ boxsub = boxCreate(x, yp + hp, w, y + h - yp - hp); boxaAddBox(boxa4, boxsub, L_INSERT); } return boxa4; } /*! * \brief boxaSelectPivotBox() * * \param[in] box containing box; to be split by the pivot box * \param[in] boxa boxes of rectangles, from which 1 is to be chosen * \param[in] maxperim maximum half-perimeter for which pivot * is selected by proximity to box centroid * \param[in] fract fraction of box diagonal that is an acceptable * distance from the box centroid to select the pivot * \return box pivot box for subdivision into 4 rectangles, * or NULL on error * *
 * Notes:
 *      (1) This is a tricky piece that wasn't discussed in the
 *          Breuel's 2002 paper.
 *      (2) Selects a box from boxa whose centroid is reasonably close to
 *          the centroid of the containing box (xc, yc) and whose
 *          half-perimeter does not exceed the maxperim value.
 *      (3) If there are no boxes in the boxa that are small enough,
 *          then it selects the smallest of the larger boxes,
 *          without reference to its location in the containing box.
 *      (4) If a small box has a centroid at a distance from the
 *          centroid of the containing box that is not more than
 *          the fraction 'fract' of the diagonal of the containing
 *          box, that box is chosen as the pivot, terminating the
 *          search for the nearest small box.
 *      (5) Use fract in the range [0.0 ... 1.0].  Set fract = 0.0
 *          to choose the small box nearest the centroid.
 *      (6) Choose maxperim to represent a connected component that is
 *          small enough so that you don't care about the white space
 *          that could be inside of it.
 * 
*/ static BOX * boxaSelectPivotBox(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract) { l_int32 i, n, bw, bh, w, h; l_int32 smallfound, minindex, perim, minsize; l_float32 delx, dely, mindist, threshdist, dist, x, y, cx, cy; BOX *boxt; if (!box) return (BOX *)ERROR_PTR("box not defined", __func__, NULL); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); n = boxaGetCount(boxa); if (n == 0) return (BOX *)ERROR_PTR("no boxes in boxa", __func__, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract out of bounds; using 0.0\n", __func__); fract = 0.0; } boxGetGeometry(box, NULL, NULL, &w, &h); boxGetCenter(box, &x, &y); threshdist = fract * (w * w + h * h); mindist = 1000000000.; minindex = 0; smallfound = FALSE; for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(boxt, NULL, NULL, &bw, &bh); boxGetCenter(boxt, &cx, &cy); boxDestroy(&boxt); if (bw + bh > maxperim) continue; smallfound = TRUE; delx = cx - x; dely = cy - y; dist = delx * delx + dely * dely; if (dist <= threshdist) return boxaGetBox(boxa, i, L_COPY); if (dist < mindist) { minindex = i; mindist = dist; } } /* If there are small boxes but none are within 'fract' of the * centroid, return the nearest one. */ if (smallfound == TRUE) return boxaGetBox(boxa, minindex, L_COPY); /* No small boxes; return the smallest of the large boxes */ minsize = 1000000000; minindex = 0; for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &bw, &bh); perim = bw + bh; if (perim < minsize) { minsize = perim; minindex = i; } } return boxaGetBox(boxa, minindex, L_COPY); } /*! * \brief boxCheckIfOverlapIsBig() * * \param[in] box to be tested * \param[in] boxa of boxes already stored * \param[in] maxoverlap maximum fractional overlap of the input box * by any of the boxes in boxa * \return 0 if box has small overlap with every box in boxa; * 1 otherwise or on error */ static l_int32 boxCheckIfOverlapIsBig(BOX *box, BOXA *boxa, l_float32 maxoverlap) { l_int32 i, n, bigoverlap; l_float32 fract; BOX *boxt; if (!box) return ERROR_INT("box not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (maxoverlap < 0.0 || maxoverlap > 1.0) return ERROR_INT("invalid maxoverlap", __func__, 1); n = boxaGetCount(boxa); if (n == 0 || maxoverlap == 1.0) return 0; bigoverlap = 0; for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); boxOverlapFraction(boxt, box, &fract); boxDestroy(&boxt); if (fract > maxoverlap) { bigoverlap = 1; break; } } return bigoverlap; } /*! * \brief boxaPruneSortedOnOverlap() * * \param[in] boxas sorted by size in decreasing order * \param[in] maxoverlap maximum fractional overlap of a box by any * of the larger boxes * \return boxad pruned, or NULL on error * *
 * Notes:
 *      (1) This selectively removes smaller boxes when they are overlapped
 *          by any larger box by more than the input 'maxoverlap' fraction.
 *      (2) To avoid all pruning, use maxoverlap = 1.0.  To select only
 *          boxes that have no overlap with each other (maximal pruning),
 *          set maxoverlap = 0.0.
 *      (3) If there are no boxes in boxas, returns an empty boxa.
 * 
*/ BOXA * boxaPruneSortedOnOverlap(BOXA *boxas, l_float32 maxoverlap) { l_int32 i, j, n, remove; l_float32 fract; BOX *box1, *box2; BOXA *boxad; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", __func__, NULL); if (maxoverlap < 0.0 || maxoverlap > 1.0) return (BOXA *)ERROR_PTR("invalid maxoverlap", __func__, NULL); n = boxaGetCount(boxas); if (n == 0 || maxoverlap == 1.0) return boxaCopy(boxas, L_COPY); boxad = boxaCreate(0); box2 = boxaGetBox(boxas, 0, L_COPY); boxaAddBox(boxad, box2, L_INSERT); for (j = 1; j < n; j++) { /* prune on j */ box2 = boxaGetBox(boxas, j, L_COPY); remove = FALSE; for (i = 0; i < j; i++) { /* test on i */ box1 = boxaGetBox(boxas, i, L_CLONE); boxOverlapFraction(box1, box2, &fract); boxDestroy(&box1); if (fract > maxoverlap) { remove = TRUE; break; } } if (remove == TRUE) boxDestroy(&box2); else boxaAddBox(boxad, box2, L_INSERT); } return boxad; } leptonica-1.86.0/src/pdfapp.c000066400000000000000000000503111506303110300157610ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfapp.c *
 *
 *    Image processing operations on multiple images followed by wrapping
 *    them into a pdf.
 *
 *    There are two possible ways to specify the set of images:
 *    (1) an array of pathnames
 *    (2) a directory, typically with an additional pattern for selection.
 *    We use (1) because it is both simpler and more general.
 *
 *    Corresponding to each function here is:
 *    (1) the image processing function that is carried out on each image
 *    (2) a program in prog that extracts images from a pdf and calls this
 *        function with an array of their pathnames.
 *
 *    |=============================================================|
 *    |                        Important notes                      |
 *    |=============================================================|
 *    | Some of these functions require I/O libraries such as       |
 *    | libtiff, libjpeg, libpng and libz.  If you do not have      |
 *    | these libraries, some calls will fail.  For example,        |
 *    | if you do not have libtiff, you cannot write a pdf that     |
 *    | uses libtiff to encode bilevel images in tiffg4.            |
 *    |                                                             |
 *    | You can manually deactivate all pdf writing by setting      |
 *    | this in environ.h:                                          |
 *    | \code                                                       |
 *    |      #define  USE_PDFIO     0                               |
 *    | \endcode                                                    |
 *    | This will link the stub file pdfappstub.c.                  |
 *    |=============================================================|
 *
 *     The images in the pdf file can be rendered using a pdf viewer,
 *     such as evince, gv, xpdf or acroread.
 *
 *     Compression of images for prog/compresspdf
 *          l_int32          compressFilesToPdf()
 *
 *     Crop images for prog/croppdf
 *          l_int32          cropFilesToPdf()
 *
 *     Cleanup and binarization of images for prog/cleanpdf
 *          l_int32          cleanTo1bppFilesToPdf()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /*---------------------------------------------------------------------* * Compression of images for prog/compresspdf * *---------------------------------------------------------------------*/ /*! * \brief compressFilesToPdf() * * \param[in] sa sorted full pathnames of images * \param[in] onebit set to 1 to enforce 1 bpp tiffg4 encoding * \param[in] savecolor if %onebit == 1, set to 1 to save color * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] quality for jpeg: 0 for default (50; otherwise 25 - 95. * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) This function is designed to optionally scale and compress a set of
 *        images, wrapping them in a pdf in the order given in the input %sa.
 *    (2) It does the image processing for prog/compresspdf.c.
 *    (3) Images in the output pdf are encoded with either tiffg4 or jpeg (DCT),
 *        or a mixture of them depending on parameters %onebit and %savecolor.
 *        If the resulting image is 1 bpp, it is encoded with tiffg4;
 *        otherwise, DCT (jpeg) encoding is used.
 *    (4) Parameters %onebit and %savecolor work as follows:
 *        %onebit = 0: no depth conversion, default encoding depends on depth
 *        %onebit = 1, %savecolor = 0: all images converted to 1 bpp
 *        %onebit = 1, %savecolor = 1: images without color are converted
 *           to 1 bpp; images with color have the color preserved.
 *    (5) In use, if most of the pages are 1 bpp but some have color that needs
 *        to be preserved, %onebit and %savecolor should both be 1.  This
 *        causes DCT compression of color images and tiffg4 compression
 *        of monochrome images.
 *    (6) The images will be concatenated in the order given in %sa.
 *    (7) Typically, %scalefactor <= 1.0.  It is applied to each image
 *        before encoding.  If you enter a value <= 0.0, it will be set to 1.0.
 *        The maximum allowed value is 2.0.  If the pdf is a set of low-res
 *        (say, 100 ppi) 8 bpp images, set onebit = 1 and use scalefactor = 2.0
 *        to upscale before binarizing.
 *    (8) Default jpeg %quality is 50; otherwise, quality factors between
 *        25 and 95 are enforced.
 *    (9) Page images at 300 ppi are about 8 Mpixels.  RGB(A) rasters are
 *        then about 32 MB (1 bpp images are about 1 MB).  If there are
 *        more than 25 images, store the images after processing as an
 *        array of compressed images (a Pixac); otherwise, use a Pixa.
 * 
*/ l_ok compressFilesToPdf(SARRAY *sa, l_int32 onebit, l_int32 savecolor, l_float32 scalefactor, l_int32 quality, const char *title, const char *fileout) { char *fname; l_int32 n, i, res, processcolor; l_int32 maxsmallset = 25; /* max num images kept uncompressed in array */ l_float32 colorfract; PIX *pixs, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1 = NULL; PIXAC *pixac1 = NULL; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (scalefactor <= 0) scalefactor = 1.0; if (scalefactor > 2.0) { L_WARNING("scalefactor %f too big; setting to 2.0\n", __func__, scalefactor); scalefactor = 2.0; } if (quality <= 0) quality = 50; /* default value */ if (quality < 25) { L_WARNING("quality %d too low; setting to 25\n", __func__, quality); quality = 25; } if (quality > 95) { L_WARNING("quality %d too high; setting to 95\n", __func__, quality); quality = 95; } if ((n = sarrayGetCount(sa)) == 0) return ERROR_INT("sa is empty", __func__, 1); if (n <= maxsmallset) pixa1 = pixaCreate(n); else pixac1 = pixacompCreate(n); for (i = 0; i < n; i++) { if (i == 0) lept_stderr("page: "); else if (i % 10 == 0) lept_stderr("%d . ", i); fname = sarrayGetString(sa, i, L_NOCOPY); processcolor = FALSE; pixs = pixRead(fname); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); if (!onebit) { /* scale and save the input image */ pix2 = pixScale(pix1, scalefactor, scalefactor); processcolor = TRUE; } else if (onebit && savecolor) { pixColorFraction(pix1, 40, 224, 60, 4, NULL, &colorfract); if (colorfract > 0.01) { /* save the color; use DCT encoding */ processcolor = TRUE; pix2 = pixScale(pix1, scalefactor, scalefactor); } } if (!processcolor) { /* scale, binarize and use tiffg4 encoding */ if (pixGetDepth(pix1) != 1) { pix3 = pixConvertTo8(pix1, FALSE); if (scalefactor < 1.0 || (scalefactor > 1.0 && scalefactor < 2.0)) { pix4 = pixScale(pix3, scalefactor, scalefactor); pix2 = pixConvertTo1(pix4, 180); pixDestroy(&pix4); } else if (scalefactor == 1.0) { pix2 = pixConvertTo1(pix3, 180); } else { /* scalefactor == 2.0 */ pix2 = pixScaleGray2xLIThresh(pix3, 180); } pixDestroy(&pix3); } else { /* pix1 is 1 bpp */ pix2 = pixScale(pix1, scalefactor, scalefactor); } } if (n <= maxsmallset) { pixaAddPix(pixa1, pix2, L_INSERT); } else { pixacompAddPix(pixac1, pix2, IFF_DEFAULT); pixDestroy(&pix2); } pixDestroy(&pixs); pixDestroy(&pix1); } /* Generate the pdf. Compute the actual input resolution from * the pixel dimensions of the first image. This will cause each * page to be printed to cover an 8.5 x 11 inch sheet of paper. */ lept_stderr("\nWrite output to %s\n", fileout); if (n <= maxsmallset) pix1 = pixaGetPix(pixa1, 0, L_CLONE); else pix1 = pixacompGetPix(pixac1, 0); pixInferResolution(pix1, 11.0, &res); pixDestroy(&pix1); if (strcmp(title, "none") == 0) title = NULL; if (n <= maxsmallset) { pixaConvertToPdf(pixa1, res, 1.0, L_DEFAULT_ENCODE, quality, title, fileout); pixaDestroy(&pixa1); } else { pixacompConvertToPdf(pixac1, res, 1.0, L_DEFAULT_ENCODE, quality, title, fileout); pixacompDestroy(&pixac1); } return 0; } /*---------------------------------------------------------------------* * Crop images for prog/croppdf * *---------------------------------------------------------------------*/ /*! * \brief cropFilesToPdf() * * \param[in] sa sorted full pathnames of images * \param[in] lr_clear full res pixels cleared at left and right sides * \param[in] tb_clear full res pixels cleared at top and bottom sides * \param[in] edgeclean parameter for removing edge noise (-1 to 15) * default = 0 (no removal); * 15 is maximally aggressive for random noise * -1 for aggressively removing side noise * -2 to extract page embedded in black background * \param[in] lr_border full res final "added" pixels on left and right * \param[in] tb_border full res final "added" pixels on top and bottom * \param[in] maxwiden max fractional horizontal stretch allowed * \param[in] printwiden 0 to skip, 1 for 8.5x11, 2 for A4 * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) This function is designed to optionally remove white space from
 *        around the page images, and generate a pdf that prints with
 *        foreground occupying much of the full page.
 *    (2) It does the image processing for prog/croppdf.c.
 *    (3) Images in the output pdf are 1 bpp and encoded with tiffg4.
 *    (4) See documentation in pixCropImage() for details on the processing.
 *    (5) The images will be concatenated in the order given in %safiles.
 *    (6) Output page images are at 300 ppi and are stored in memory.
 *        They are about 1 Mpixel when uncompressed.  For up to 200 pages,
 *        the images are stored uncompressed; otherwise, the stored
 *        images are compressed with tiffg4.
 * 
*/ l_ok cropFilesToPdf(SARRAY *sa, l_int32 lr_clear, l_int32 tb_clear, l_int32 edgeclean, l_int32 lr_border, l_int32 tb_border, l_float32 maxwiden, l_int32 printwiden, const char *title, const char *fileout) { char *fname; l_int32 n, i, res; l_int32 maxsmallset = 200; /* max num images kept uncompressed in array */ PIX *pixs, *pix1; PIXA *pixa1 = NULL; PIXAC *pixac1 = NULL; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((n = sarrayGetCount(sa)) == 0) return ERROR_INT("sa is empty", __func__, 1); if (n <= maxsmallset) pixa1 = pixaCreate(n); else pixac1 = pixacompCreate(n); for (i = 0; i < n; i++) { if (i == 0) lept_stderr("page: "); else if (i % 10 == 0) lept_stderr("%d . ", i); fname = sarrayGetString(sa, i, L_NOCOPY); pixs = pixRead(fname); pix1 = pixCropImage(pixs, lr_clear, tb_clear, edgeclean, lr_border, tb_border, maxwiden, printwiden, NULL, NULL); pixDestroy(&pixs); if (!pix1) { L_ERROR("pix1 not made for i = %d\n", __func__, i); continue; } if (n <= maxsmallset) pixaAddPix(pixa1, pix1, L_INSERT); else pixacompAddPix(pixac1, pix1, IFF_TIFF_G4); } /* Generate the pdf. Compute the actual input resolution from * the pixel dimensions of the first image. This will cause each * page to be printed to cover an 8.5 x 11 inch sheet of paper. */ lept_stderr("\nWrite output to %s\n", fileout); if (n <= maxsmallset) pix1 = pixaGetPix(pixa1, 0, L_CLONE); else pix1 = pixacompGetPix(pixac1, 0); pixInferResolution(pix1, 11.0, &res); pixDestroy(&pix1); if (strcmp(title, "none") == 0) title = NULL; if (n <= maxsmallset) { pixaConvertToPdf(pixa1, res, 1.0, L_G4_ENCODE, 0, title, fileout); pixaDestroy(&pixa1); } else { pixacompConvertToPdf(pixac1, res, 1.0, L_G4_ENCODE, 0, title, fileout); pixacompDestroy(&pixac1); } return 0; } /*---------------------------------------------------------------------* * Cleanup and binarization of images for prog/cleanpdf * *---------------------------------------------------------------------*/ /*! * \brief cleanTo1bppFilesToPdf() * * \param[in] sa sorted full pathnames of images * \param[in] res either 300 or 600 ppi for output * \param[in] contrast vary contrast: 1 = lightest; 10 = darkest; * suggest 1 unless light features are being lost * \param[in] rotation cw by 90 degrees: {0,1,2,3} represent * 0, 90, 180 and 270 degree cw rotations * \param[in] opensize opening size of structuring element for noise * removal: {0 or 1to skip; 2, 3 for opening} * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *    (1) This deskews, optionally rotates and darkens, cleans background
 *        to white, binarizes and optionally removes small noise, and
 *        put the images into the pdf in the order given in %sa.
 *    (2) All images in the pdf are tiffg4 encoded.
 *    (3) For color and grayscale input, local background normalization is
 *        done to 200, and a threshold of 180 sets the maximum foreground
 *        value in the normalized image.
 *    (4) The %res parameter can be either 300 or 600 ppi.  If the input
 *        is gray or color and %res = 600, this does an interpolated 2x
 *        expansion before binarizing.
 *    (5) The %contrast parameter adjusts the binarization to avoid losing
 *        lighter input pixels.  Contrast is increased as %contrast increases
 *        from 1 to 10.
 *    (6) The #opensize parameter is the size of a square SEL used with
 *        opening to remove small speckle noise.  Allowed open sizes are 2,3.
 *        If this is to be used, try 2 before 3.
 *    (7) If there are more than 200 images, store the images after processing
 *        as an array of compressed images (a Pixac); otherwise, use a Pixa.
 * 
*/ l_ok cleanTo1bppFilesToPdf(SARRAY *sa, l_int32 res, l_int32 contrast, l_int32 rotation, l_int32 opensize, const char *title, const char *fileout) { char *fname; l_int32 n, i, scale; l_int32 maxsmallset = 200; /* max num images kept uncompressed in array */ PIX *pixs, *pix1; PIXA *pixa1 = NULL; PIXAC *pixac1 = NULL; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (res == 0) res = 300; if (res != 300 && res != 600) { L_ERROR("invalid res = %d; res must be in {0, 300, 600}\n", __func__, res); return 1; } if (contrast < 1 || contrast > 10) { L_ERROR("invalid contrast = %d; contrast must be in [1...10]\n", __func__, contrast); return 1; } if (rotation < 0 || rotation > 3) { L_ERROR("invalid rotation = %d; rotation must be in {0,1,2,3}\n", __func__, rotation); return 1; } if (opensize > 3) { L_ERROR("invalid opensize = %d; opensize must be <= 3\n", __func__, opensize); return 1; } scale = (res == 300) ? 1 : 2; if ((n = sarrayGetCount(sa)) == 0) return ERROR_INT("sa is empty", __func__, 1); if (n <= maxsmallset) pixa1 = pixaCreate(n); else pixac1 = pixacompCreate(n); for (i = 0; i < n; i++) { if (i == 0) lept_stderr("page: "); else if (i % 10 == 0) lept_stderr("%d . ", i); fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_ERROR("pixs not read from %s\n", __func__, fname); continue; } pix1 = pixCleanImage(pixs, contrast, rotation, scale, opensize); if (n <= maxsmallset) { pixaAddPix(pixa1, pix1, L_INSERT); } else { pixacompAddPix(pixac1, pix1, IFF_TIFF_G4); pixDestroy(&pix1); } pixDestroy(&pixs); } /* Generate the pdf. Compute the actual input resolution from * the pixel dimensions of the first image. This will cause each * page to be printed to cover an 8.5 x 11 inch sheet of paper. */ lept_stderr("Write output to %s\n", fileout); if (n <= maxsmallset) pix1 = pixaGetPix(pixa1, 0, L_CLONE); else pix1 = pixacompGetPix(pixac1, 0); pixInferResolution(pix1, 11.0, &res); pixDestroy(&pix1); if (strcmp(title, "none") == 0) title = NULL; if (n <= maxsmallset) { pixaConvertToPdf(pixa1, res, 1.0, L_G4_ENCODE, 0, title, fileout); pixaDestroy(&pixa1); } else { pixacompConvertToPdf(pixac1, res, 1.0, L_G4_ENCODE, 0, title, fileout); pixacompDestroy(&pixac1); } return 0; } /* --------------------------------------------*/ #endif /* USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pdfappstub.c000066400000000000000000000056621506303110300166700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfappstub.c *
 *     Stubs for pdfapp.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* ----------------------------------------------------------------------*/ l_ok compressFilesToPdf(SARRAY *sa, l_int32 onebit, l_int32 savecolor, l_float32 scalefactor, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok cropFilesToPdf(SARRAY *sa, l_int32 lr_clear, l_int32 tb_clear, l_int32 edgeclean, l_int32 lr_add, l_int32 tb_add, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok cleanTo1bppFilesToPdf(SARRAY *sa, l_int32 res, l_int32 contrast, l_int32 rotation, l_int32 opensize, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pdfio1.c000066400000000000000000002422461506303110300157030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfio1.c *
 *
 *    Higher-level operations for generating pdf from images.
 *    Use poppler's pdftoppm or pdfimages to invert the process,
 *    extracting raster images from pdf.
 *
 *    |=============================================================|
 *    |                        Important notes                      |
 *    |=============================================================|
 *    | Some of these functions require I/O libraries such as       |
 *    | libtiff, libjpeg, libpng, libz and libopenjp2.  If you do   |
 *    | not have these libraries, some calls will fail.  For        |
 *    | example, if you do not have libopenjp2, you cannot write a  |
 *    | pdf where transcoding is required to incorporate a          |
 *    | jp2k image.                                                 |
 *    |                                                             |
 *    | You can manually deactivate all pdf writing by setting      |
 *    | this in environ.h:                                          |
 *    | \code                                                       |
 *    |      #define  USE_PDFIO     0                               |
 *    | \endcode                                                    |
 *    | This will link the stub file pdfiostub.c.                   |
 *    |=============================================================|
 *
 *     Set 1. These functions convert a set of image files
 *     to a multi-page pdf file, with one image on each page.
 *     All images are rendered at the same (input) resolution.
 *     The images can be specified as being in a directory, or they
 *     can be in an sarray.  The output pdf can be either a file
 *     or an array of bytes in memory.
 *
 *     Set 2. These functions are a special case of set 1, where
 *     no scaling or change in quality is required.  For jpeg, jp2k and
 *     tiffg4 images, the bytes in each file can be directly incorporated
 *     into the output pdf, and the wrapping up of multiple image
 *     files is very fast.  For non-interlaced png, the data bytes
 *     including the predictors can also be written directly into the
 *     flate pdf data.  For other image formats transcoding is required,
 *     where the image data is first decompressed and then flate (gzip),
 *     DCT (jpeg) or tiffg4 (1 bpp) encodings are generated.
 *
 *     Set 3. These functions convert a set of images in memory
 *     to a multi-page pdf, with one image on each page.  The pdf
 *     output can be either a file or an array of bytes in memory.
 *
 *     Set 4. These functions implement a pdf output "device driver"
 *     for wrapping (encoding) any number of images on a single page
 *     in pdf.  The input can be either an image file or a Pix;
 *     the pdf output can be either a file or an array of bytes in memory.
 *
 *     Set 5. These "segmented" functions take a set of image
 *     files, along with optional segmentation information, and
 *     generate a multi-page pdf file, where each page consists
 *     in general of a mixed raster pdf of image and non-image regions.
 *     The segmentation information for each page can be input as
 *     either a mask over the image parts, or as a Boxa of those
 *     regions.
 *
 *     Set 6. These "segmented" functions convert an image and
 *     an optional Boxa of image regions into a mixed raster pdf file
 *     for the page.  The input image can be either a file or a Pix.
 *
 *     Set 7. These functions take a set of single-page pdf files
 *     and concatenates it into a multi-page pdf.  The input can be
 *     a set of either single page pdf files or pdf 'strings' in memory.
 *     The output can be either a file or an array of bytes in memory.
 *
 *     The images in the pdf file can be rendered using a pdf viewer,
 *     such as evince, gv, xpdf or acroread.
 *
 *     Reference on the pdf file format:
 *         http://www.adobe.com/devnet/pdf/pdf_reference_archive.html
 *
 *     1. Convert specified image files to pdf (one image file per page)
 *          l_int32             convertFilesToPdf()
 *          l_int32             saConvertFilesToPdf()
 *          l_int32             saConvertFilesToPdfData()
 *          l_int32             selectDefaultPdfEncoding()
 *
 *     2. Convert specified image files to pdf without scaling
 *          l_int32             convertUnscaledFilesToPdf()
 *          l_int32             saConvertUnscaledFilesToPdf()
 *          l_int32             saConvertUnscaledFilesToPdfData()
 *          l_int32             convertUnscaledToPdfData()
 *
 *     3. Convert multiple images to pdf (one image per page)
 *          l_int32             pixaConvertToPdf()
 *          l_int32             pixaConvertToPdfData()
 *
 *     4. Single page, multi-image converters
 *          l_int32             convertToPdf()
 *          l_int32             convertImageDataToPdf()
 *          l_int32             convertToPdfData()
 *          l_int32             convertImageDataToPdfData()
 *          l_int32             pixConvertToPdf()
 *          l_int32             pixWriteStreamPdf()
 *          l_int32             pixWriteMemPdf()
 *
 *     5. Segmented multi-page, multi-image converter
 *          l_int32             convertSegmentedFilesToPdf()
 *          BOXAA              *convertNumberedMasksToBoxaa()
 *
 *     6. Segmented single page, multi-image converters
 *          l_int32             convertToPdfSegmented()
 *          l_int32             pixConvertToPdfSegmented()
 *          l_int32             convertToPdfDataSegmented()
 *          l_int32             pixConvertToPdfDataSegmented()
 *
 *     7. Multipage concatenation
 *          l_int32             concatenatePdf()
 *          l_int32             saConcatenatePdf()
 *          l_int32             ptraConcatenatePdf()
 *          l_int32             concatenatePdfToData()
 *          l_int32             saConcatenatePdfToData()
 *
 *     The top-level multi-image functions can be visualized as follows:
 *          Output pdf data to file:
 *             convertToPdf()  and  convertImageDataToPdf()
 *                     --> pixConvertToPdf()
 *                           --> pixConvertToPdfData()
 *
 *          Output pdf data to array in memory:
 *             convertToPdfData()  and  convertImageDataToPdfData()
 *                     --> pixConvertToPdfData()
 *
 *     The top-level segmented image functions can be visualized as follows:
 *          Output pdf data to file:
 *             convertToPdfSegmented()
 *                     --> pixConvertToPdfSegmented()
 *                           --> pixConvertToPdfDataSegmented()
 *
 *          Output pdf data to array in memory:
 *             convertToPdfDataSegmented()
 *                     --> pixConvertToPdfDataSegmented()
 *
 *     For multi-page concatenation, there are three different types of input
 *        (1) directory and optional filename filter
 *        (2) sarray of filenames
 *        (3) ptra of byte arrays of pdf data
 *     and two types of output for the concatenated pdf data
 *        (1) filename
 *        (2) data array and size
 *     High-level interfaces are given for each of the six combinations.
 *
 *     Note: When wrapping small images into pdf, it is useful to give
 *     them a relatively low resolution value, to avoid rounding errors
 *     when rendering the images.  For example, if you want an image
 *     of width w pixels to be 5 inches wide on a screen, choose a
 *     resolution w/5.
 *
 *     The very fast functions in section (2) require neither transcoding
 *     nor parsing of the compressed jpeg file.  With three types of image
 *     compression, the compressed strings can be incorporated into
 *     the pdf data without decompression and re-encoding: jpeg, jp2k
 *     and png.  The DCTDecode and JPXDecode filters can handle the
 *     entire jpeg and jp2k encoded string as a byte array in the pdf file.
 *     The FlateDecode filter can handle the png compressed image data,
 *     including predictors that occur as the first byte in each
 *     raster line, but it is necessary to store only the png IDAT chunk
 *     data in the pdf array.  The alternative for wrapping png images
 *     is to transcode them: uncompress into a raster (a pix) and then
 *     gzip the raster data.  This typically results in a larger pdf file
 *     because it doesn't use the two-dimensional png predictor.
 *     Colormaps, which are found in png PLTE chunks, must always be
 *     pulled out and included separately in the pdf.  For CCITT-G4
 *     compression, you can not simply include a tiff G4 file -- you must
 *     either parse it and extract the G4 compressed data within it,
 *     or uncompress to a raster and G4 compress again.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* Typical scan resolution in ppi (pixels/inch) */ static const l_int32 DefaultInputRes = 300; /*---------------------------------------------------------------------* * Convert specified image files to pdf (one image file per page) * *---------------------------------------------------------------------*/ /*! * \brief convertFilesToPdf() * * \param[in] dirname directory name containing images * \param[in] substr [optional] substring filter on filenames; * can be null * \param[in] res input resolution of all images * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE or * L_DEFAULT_ENCODE for default) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %substr is not NULL, only image filenames that contain
 *          the substring can be used.  If %substr == NULL, all files
 *          in the directory are used.
 *      (2) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order
 *          before concatenation.
 *      (3) The scalefactor is applied to each image before encoding.
 *          If you enter a value <= 0.0, it will be set to 1.0.
 *      (4) Specifying one of the four encoding types for %type forces
 *          all images to be compressed with that type.  Use 0 to have
 *          the type determined for each image based on depth and whether
 *          or not it has a colormap.
 * 
*/ l_ok convertFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_int32 ret; SARRAY *sa; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", __func__, 1); ret = saConvertFilesToPdf(sa, res, scalefactor, type, quality, title, fileout); sarrayDestroy(&sa); return ret; } /*! * \brief saConvertFilesToPdf() * * \param[in] sa string array of pathnames for images * \param[in] res input resolution of all images * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE or * L_DEFAULT_ENCODE for default) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertFilesToPdf().
 * 
*/ l_ok saConvertFilesToPdf(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!sa) return ERROR_INT("sa not defined", __func__, 1); ret = saConvertFilesToPdfData(sa, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { if (data) LEPT_FREE(data); return ERROR_INT("pdf data not made", __func__, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) L_ERROR("pdf data not written to file\n", __func__); return ret; } /*! * \brief saConvertFilesToPdfData() * * \param[in] sa string array of pathnames for images * \param[in] res input resolution of all images * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE or * L_DEFAULT_ENCODE for default) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] title [optional] pdf title; can be null * \param[out] pdata output pdf data (of all images * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertFilesToPdf().
 * 
*/ l_ok saConvertFilesToPdfData(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { char *fname; l_uint8 *imdata; l_int32 i, n, ret, pagetype, npages, scaledres; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { type = L_DEFAULT_ENCODE; } /* Generate all the encoded pdf strings */ n = sarrayGetCount(sa); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if (i && (i % 10 == 0)) lept_stderr(".. %d ", i); fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_ERROR("image not readable from file %s\n", __func__, fname); continue; } if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); pixDestroy(&pixs); scaledres = (l_int32)(res * scalefactor); /* Select the encoding type */ if (type != L_DEFAULT_ENCODE) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { pixDestroy(&pix); L_ERROR("encoding type selection failed for file %s\n", __func__, fname); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, title, NULL, 0); pixDestroy(&pix); if (ret) { LEPT_FREE(imdata); L_ERROR("pdf encoding failed for %s\n", __func__, fname); continue; } ba = l_byteaInitFromMem(imdata, imbytes); LEPT_FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ lept_stderr("\nconcatenating ... "); ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); lept_stderr("done\n"); ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * \brief selectDefaultPdfEncoding() * * \param[in] pix * \param[out] ptype L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This attempts to choose an encoding for the pix that results
 *          in the smallest file, assuming that if jpeg encoded, it will
 *          use quality = 75.  The decision is approximate, in that
 *          (a) all colormapped images will be losslessly encoded with
 *          gzip (flate), and (b) an image with less than about 20 colors
 *          is likely to be smaller if flate encoded than if encoded
 *          as a jpeg (dct).  For example, an image made by pixScaleToGray3()
 *          will have 10 colors, and flate encoding will give about
 *          twice the compression as jpeg with quality = 75.
 *      (2) We could have used L_JP2K_ENCODE instead of L_JPEG_ENCODE.
 *          However, the jp2k compression is not much better than jpeg, and
 *          the jpeg library is more commonly available than the jp2k library.
 * 
*/ l_ok selectDefaultPdfEncoding(PIX *pix, l_int32 *ptype) { l_int32 w, h, d, factor, ncolors; PIXCMAP *cmap; if (!ptype) return ERROR_INT("&type not defined", __func__, 1); *ptype = L_FLATE_ENCODE; /* default universal encoding */ if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); cmap = pixGetColormap(pix); if (d == 8 && !cmap) { factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 20000.)); pixNumColors(pix, factor, &ncolors); if (ncolors < 20) *ptype = L_FLATE_ENCODE; else *ptype = L_JPEG_ENCODE; } else if (d == 1) { *ptype = L_G4_ENCODE; } else if (cmap || d == 2 || d == 4) { *ptype = L_FLATE_ENCODE; } else if (d == 8 || d == 32) { *ptype = L_JPEG_ENCODE; } else if (d == 16) { *ptype = L_FLATE_ENCODE; } else { return ERROR_INT("type selection failure", __func__, 1); } return 0; } /*---------------------------------------------------------------------* * Convert specified image files to pdf without scaling * *---------------------------------------------------------------------*/ /*! * \brief convertUnscaledFilesToPdf() * * \param[in] dirname directory name containing images * \param[in] substr [optional] substring filter on filenames; * can be null * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %substr is not NULL, only image filenames that contain
 *          the substring can be used.  If %substr == NULL, all files
 *          in the directory are used.
 *      (2) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order
 *          before concatenation.
 *      (3) This is very fast for jpeg, jp2k and some png files,
 *          because the compressed data is wrapped up and concatenated.
 *          For other types of png, the images must be read and recompressed.
 * 
*/ l_ok convertUnscaledFilesToPdf(const char *dirname, const char *substr, const char *title, const char *fileout) { l_int32 ret; SARRAY *sa; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", __func__, 1); ret = saConvertUnscaledFilesToPdf(sa, title, fileout); sarrayDestroy(&sa); return ret; } /*! * \brief saConvertUnscaledFilesToPdf() * * \param[in] sa string array of pathnames for images * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertUnscaledFilesToPdf().
 * 
*/ l_ok saConvertUnscaledFilesToPdf(SARRAY *sa, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!sa) return ERROR_INT("sa not defined", __func__, 1); ret = saConvertUnscaledFilesToPdfData(sa, title, &data, &nbytes); if (ret) { if (data) LEPT_FREE(data); return ERROR_INT("pdf data not made", __func__, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) L_ERROR("pdf data not written to file\n", __func__); return ret; } /*! * \brief saConvertUnscaledFilesToPdfData() * * \param[in] sa string array of pathnames for image files * \param[in] title [optional] pdf title; can be null * \param[out] pdata output pdf data (of all images) * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is very fast for jpeg, jp2k and some png files,
 *          because the compressed data is wrapped up and concatenated.
 *          For other types of png, the images must be read and recompressed.
 * 
*/ l_ok saConvertUnscaledFilesToPdfData(SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes) { char *fname; l_uint8 *imdata; l_int32 i, n, ret, npages; size_t imbytes; L_BYTEA *ba; L_PTRA *pa_data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", __func__, 1); /* Generate all the encoded pdf strings */ n = sarrayGetCount(sa); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if (i && (i % 10 == 0)) lept_stderr(".. %d ", i); fname = sarrayGetString(sa, i, L_NOCOPY); /* Generate the pdf data */ if (convertUnscaledToPdfData(fname, title, &imdata, &imbytes)) continue; /* ... and add it to the array of single page data */ ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) LEPT_FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate to generate a multipage pdf */ lept_stderr("\nconcatenating ... "); ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); lept_stderr("done\n"); /* Clean up */ ptraGetActualCount(pa_data, &npages); /* maybe failed to read some files */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * \brief convertUnscaledToPdfData() * * \param[in] fname of image file in all formats * \param[in] title [optional] pdf title; can be null * \param[out] pdata output pdf data for image * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is very fast for jpeg, jp2k and some png files,
 *          because the compressed data is wrapped up and concatenated.
 *          For other types of png, the images must be read and recompressed.
 * 
*/ l_ok convertUnscaledToPdfData(const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 format; L_COMP_DATA *cid; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!fname) return ERROR_INT("fname not defined", __func__, 1); findFileFormat(fname, &format); if (format == IFF_UNKNOWN) { L_WARNING("file %s format is unknown; skip\n", __func__, fname); return 1; } if (format == IFF_PS || format == IFF_LPDF) { L_WARNING("file %s format is %d; skip\n", __func__, fname, format); return 1; } /* Generate the image data required for pdf generation, always * in binary (not ascii85) coding. Note that jpeg, jp2k and some * png files are not transcoded. */ l_generateCIDataForPdf(fname, NULL, 0, &cid); if (!cid) { L_ERROR("file %s format is %d; unreadable\n", __func__, fname, format); return 1; } /* Generate the pdf string for this page (image). This destroys * the cid by attaching it to an lpd and destroying the lpd. */ cidConvertToPdfData(cid, title, pdata, pnbytes); return 0; } /*---------------------------------------------------------------------* * Convert multiple images to pdf (one image per page) * *---------------------------------------------------------------------*/ /*! * \brief pixaConvertToPdf() * * \param[in] pixa containing images all at the same resolution * \param[in] res override the resolution of each input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE, or * L_DEFAULT_ENCODE for default) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
 *          colormap and many colors, or 32 bpp; FLATE for anything else.
 *      (2) The scalefactor must be > 0.0; otherwise it is set to 1.0.
 *      (3) Specifying one of the three encoding types for %type forces
 *          all images to be compressed with that type.  Use 0 to have
 *          the type determined for each image based on depth and whether
 *          or not it has a colormap.
 * 
*/ l_ok pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); ret = pixaConvertToPdfData(pixa, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { LEPT_FREE(data); return ERROR_INT("conversion to pdf failed", __func__, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) L_ERROR("pdf data not written to file\n", __func__); return ret; } /*! * \brief pixaConvertToPdfData() * * \param[in] pixa containing images all at the same resolution * \param[in] res input resolution of all images * \param[in] scalefactor scaling factor applied to each image; > 0.0; <50 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE, or * L_DEFAULT_ENCODE for default) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] title [optional] pdf title; can be null * \param[out] pdata output pdf data of all images * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixaConvertToPdf().
 * 
*/ l_ok pixaConvertToPdfData(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *imdata; l_int32 i, n, ret, scaledres, pagetype; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (scalefactor >= 50.0) return ERROR_INT("scalefactor too large", __func__, 1); if (type != L_DEFAULT_ENCODE && type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { L_WARNING("invalid compression type; using per-page default\n", __func__); type = L_DEFAULT_ENCODE; } if (quality < 0 || quality > 100) return ERROR_INT("invalid quality", __func__, 1); /* Generate all the encoded pdf strings */ n = pixaGetCount(pixa); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if ((pixs = pixaGetPix(pixa, i, L_CLONE)) == NULL) { L_ERROR("pixs[%d] not retrieved\n", __func__, i); continue; } if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); pixDestroy(&pixs); if (!pix) { L_ERROR("pix[%d] not made\n", __func__, i); continue; } scaledres = (l_int32)(res * scalefactor); /* Select the encoding type */ if (type != L_DEFAULT_ENCODE) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { L_ERROR("encoding type selection failed for pix[%d]\n", __func__, i); pixDestroy(&pix); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, title, NULL, 0); pixDestroy(&pix); if (ret) { LEPT_FREE(imdata); L_ERROR("pdf encoding failed for pix[%d]\n", __func__, i); continue; } ba = l_byteaInitFromMem(imdata, imbytes); LEPT_FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &n); if (n == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ for (i = 0; i < n; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*---------------------------------------------------------------------* * Single page, multi-image converters * *---------------------------------------------------------------------*/ /*! * \brief convertToPdf() * * \param[in] filein input image file -- any format * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or L_JP2K_ENCODE) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] fileout output pdf file; only required on last * image on page * \param[in] x, y location of lower-left corner of image, * in pixels, relative to the PostScript origin * (0,0) at the lower-left corner of the page * \param[in] res override the resolution of the input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] title [optional] pdf title; can be null * \param[in,out] plpd ptr to lpd, which is created on the first * invocation and returned until last image is * processed, at which time it is destroyed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) To wrap only one image in pdf, input %plpd = NULL, and
 *          the value of %position will be ignored:
 *            convertToPdf(...  type, quality, x, y, res, NULL, 0);
 *      (2) To wrap multiple images on a single pdf page, this is called
 *          once for each successive image.  Do it this way:
 *            L_PDF_DATA   *lpd;
 *            convertToPdf(...  type, quality, x, y, res, &lpd, L_FIRST_IMAGE);
 *            convertToPdf(...  type, quality, x, y, res, &lpd, L_NEXT_IMAGE);
 *            ...
 *            convertToPdf(...  type, quality, x, y, res, &lpd, L_LAST_IMAGE);
 *          This will write the result to the value of %fileout specified
 *          in the first call; succeeding values of %fileout are ignored.
 *          On the last call: the pdf data bytes are computed and written
 *          to %fileout, lpd is destroyed internally, and the returned
 *          value of lpd is null.  So the client has nothing to clean up.
 *      (3) (a) Set %res == 0 to respect the resolution embedded in the
 *              image file.  If no resolution is embedded, it will be set
 *              to the default value.
 *          (b) Set %res to some other value to override the file resolution.
 *      (4) (a) If the input %res and the resolution of the output device
 *              are equal, the image will be "displayed" at the same size
 *              as the original.
 *          (b) If the input %res is 72, the output device will render
 *              the image at 1 pt/pixel.
 *          (c) Some possible choices for the default input pix resolution are:
 *                 72 ppi     Render pix on any output device at one pt/pixel
 *                 96 ppi     Windows default for generated display images
 *                300 ppi     Typical default for scanned images.
 *              We choose 300, which is sensible for rendering page images.
 *              However,  images come from a variety of sources, and
 *              some are explicitly created for viewing on a display.
 * 
*/ l_ok convertToPdf(const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); } if (convertToPdfData(filein, type, quality, &data, &nbytes, x, y, res, title, plpd, position)) return ERROR_INT("pdf data not made", __func__, 1); if (!plpd || (position == L_LAST_IMAGE)) { ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) return ERROR_INT("pdf data not written to file", __func__, 1); } return 0; } /*! * \brief convertImageDataToPdf() * * \param[in] imdata array of formatted image data; e.g., png, jpeg * \param[in] size size of image data * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or L_JP2K_ENCODE) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] fileout output pdf file; only required on last * image on page * \param[in] x, y location of lower-left corner of image, * in pixels, relative to the PostScript origin * (0,0) at the lower-left corner of the page * \param[in] res override the resolution of the input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] title [optional] pdf title; can be null * \param[in,out] plpd ptr to lpd, which is created on the first * invocation and returned until last image is * processed, at which time it is destroyed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %res == 0 and the input resolution field is 0,
 *          this will use DefaultInputRes.
 *      (2) See comments in convertToPdf().
 * 
*/ l_ok convertImageDataToPdf(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 ret; PIX *pix; if (!imdata) return ERROR_INT("image data not defined", __func__, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); } if ((pix = pixReadMem(imdata, size)) == NULL) return ERROR_INT("pix not read", __func__, 1); if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { selectDefaultPdfEncoding(pix, &type); } ret = pixConvertToPdf(pix, type, quality, fileout, x, y, res, title, plpd, position); pixDestroy(&pix); return ret; } /*! * \brief convertToPdfData() * * \param[in] filein input image file -- any format * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or L_JP2K_ENCODE) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[out] pdata pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \param[in] x, y location of lower-left corner of image, * in pixels, relative to the PostScript origin * (0,0) at the lower-left corner of the page * \param[in] res override the resolution of the input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] title [optional] pdf title; can be null * \param[in,out] plpd ptr to lpd, which is created on the first * invocation and returned until last image is * processed, at which time it is destroyed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %res == 0 and the input resolution field is 0,
 *          this will use DefaultInputRes.
 *      (2) See comments in convertToPdf().
 * 
*/ l_ok convertToPdfData(const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { PIX *pix; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("pix not made", __func__, 1); pixConvertToPdfData(pix, type, quality, pdata, pnbytes, x, y, res, title, plpd, position); pixDestroy(&pix); return 0; } /*! * \brief convertImageDataToPdfData() * * \param[in] imdata array of formatted image data; e.g., png, jpeg * \param[in] size size of image data * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or L_JP2K_ENCODE) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[out] pdata pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \param[in] x, y location of lower-left corner of image, * in pixels, relative to the PostScript origin * (0,0) at the lower-left corner of the page * \param[in] res override the resolution of the input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] title [optional] pdf title; can be null * \param[out] plpd ptr to lpd, which is created on the first * invocation and returned until last image is * processed, at which time it is destroyed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %res == 0 and the input resolution field is 0,
 *          this will use DefaultInputRes.
 *      (2) See comments in convertToPdf().
 * 
*/ l_ok convertImageDataToPdfData(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 ret; PIX *pix; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!imdata) return ERROR_INT("image data not defined", __func__, 1); if (plpd) { /* part of multi-page invocation */ if (position == L_FIRST_IMAGE) *plpd = NULL; } if ((pix = pixReadMem(imdata, size)) == NULL) return ERROR_INT("pix not read", __func__, 1); if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { selectDefaultPdfEncoding(pix, &type); } ret = pixConvertToPdfData(pix, type, quality, pdata, pnbytes, x, y, res, title, plpd, position); pixDestroy(&pix); return ret; } /*! * \brief pixConvertToPdf() * * \param[in] pix * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE) * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[in] fileout output pdf file; only required on last * image on page * \param[in] x, y location of lower-left corner of image, * in pixels, relative to the PostScript origin * (0,0) at the lower-left corner of the page * \param[in] res override the resolution of the input image, * in ppi; use 0 to respect the resolution * embedded in the input images * \param[in] title [optional] pdf title; can be null * \param[in,out] plpd ptr to lpd, which is created on the first * invocation and returned until last image is * processed, at which time it is destroyed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %res == 0 and the input resolution field is 0,
 *          this will use DefaultInputRes.
 *      (2) This only writes data to fileout if it is the last
 *          image to be written on the page.
 *      (3) See comments in convertToPdf().
 * 
*/ l_ok pixConvertToPdf(PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); } if (pixConvertToPdfData(pix, type, quality, &data, &nbytes, x, y, res, title, plpd, position)) { LEPT_FREE(data); return ERROR_INT("pdf data not made", __func__, 1); } if (!plpd || (position == L_LAST_IMAGE)) { ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) return ERROR_INT("pdf data not written to file", __func__, 1); } return 0; } /*! * \brief pixWriteStreamPdf() * * \param[in] fp file stream opened for writing * \param[in] pix all depths, cmap OK * \param[in] res override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input * \param[in] title [optional] pdf title; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is the simplest interface for writing a single image
 *          with pdf encoding to a stream.  It uses G4 encoding for 1 bpp,
 *          JPEG encoding for 8 bpp (no cmap) and 32 bpp, and FLATE
 *          encoding for everything else.
 * 
*/ l_ok pixWriteStreamPdf(FILE *fp, PIX *pix, l_int32 res, const char *title) { l_uint8 *data; size_t nbytes, nbytes_written; if (!fp) return ERROR_INT("stream not opened", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pixWriteMemPdf(&data, &nbytes, pix, res, title) != 0) { LEPT_FREE(data); return ERROR_INT("pdf data not made", __func__, 1); } nbytes_written = fwrite(data, 1, nbytes, fp); LEPT_FREE(data); if (nbytes != nbytes_written) return ERROR_INT("failure writing pdf data to stream", __func__, 1); return 0; } /*! * \brief pixWriteMemPdf() * * \param[out] pdata pdf as byte array * \param[out] pnbytes number of bytes in pdf array * \param[in] pix all depths, cmap OK * \param[in] res override the resolution of the input image, in ppi; * use 0 to respect the res embedded in the input * \param[in] title [optional] pdf title; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is the simplest interface for writing a single image
 *          with pdf encoding to memory.  It uses G4 encoding for 1 bpp,
 *          and makes a guess whether to use JPEG or FLATE encoding for
 *          everything else.
 * 
*/ l_ok pixWriteMemPdf(l_uint8 **pdata, size_t *pnbytes, PIX *pix, l_int32 res, const char *title) { l_int32 ret, type; if (pdata) *pdata = NULL; if (pnbytes) *pnbytes = 0; if (!pdata || !pnbytes) return ERROR_INT("&data or &nbytes not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); selectDefaultPdfEncoding(pix, &type); ret = pixConvertToPdfData(pix, type, 75, pdata, pnbytes, 0, 0, res, title, NULL, 0); if (ret) return ERROR_INT("pdf data not made", __func__, 1); return 0; } /*---------------------------------------------------------------------* * Segmented multi-page, multi-image converter * *---------------------------------------------------------------------*/ /*! * \brief convertSegmentedFilesToPdf() * * \param[in] dirname directory name containing images * \param[in] substr [optional] substring filter on filenames; * can be null * \param[in] res input resolution of all images * \param[in] type compression type for non-image regions; the * image regions are always compressed with * L_JPEG_ENCODE * \param[in] thresh used for converting gray --> 1 bpp with * L_G4_ENCODE * \param[in] baa [optional] boxaa of image regions * \param[in] quality used for JPEG only; 0 for default (75) * \param[in] scalefactor scaling factor applied to each image region * \param[in] title [optional] pdf title; can be null * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %substr is not NULL, only image filenames that contain
 *          the substring can be used.  If %substr == NULL, all files
 *          in the directory are used.
 *      (2) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order
 *          before concatenation.
 *      (3) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
 *          colormap and many colors, or 32 bpp; FLATE for anything else.
 *      (4) The boxaa, if it exists, contains one boxa of "image regions"
 *          for each image file.  The boxa must be aligned with the
 *          sorted set of images.
 *      (5) The scalefactor is applied to each image region.  It is
 *          typically < 1.0, to save bytes in the final pdf, because
 *          the resolution is often not critical in non-text regions.
 *      (6) If the non-image regions have pixel depth > 1 and the encoding
 *          type is G4, they are automatically scaled up by 2x and
 *          thresholded.  Otherwise, no scaling is performed on them.
 *      (7) Note that this function can be used to generate multipage
 *          G4 compressed pdf from any input, by using %boxaa == NULL
 *          and %type == L_G4_ENCODE.
 * 
*/ l_ok convertSegmentedFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { char *fname; l_uint8 *imdata, *data; l_int32 i, npages, nboxa, nboxes, ret; size_t imbytes, databytes; BOXA *boxa; L_BYTEA *ba; L_PTRA *pa_data; SARRAY *sa; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((sa = getNumberedPathnamesInDirectory(dirname, substr, 0, 0, 10000)) == NULL) return ERROR_INT("sa not made", __func__, 1); npages = sarrayGetCount(sa); /* If necessary, extend the boxaa, which is page-aligned with * the image files, to be as large as the set of images. */ if (baa) { nboxa = boxaaGetCount(baa); if (nboxa < npages) { boxa = boxaCreate(1); boxaaExtendWithInit(baa, npages, boxa); boxaDestroy(&boxa); } } /* Generate and save all the encoded pdf strings */ pa_data = ptraCreate(npages); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if (!strcmp(fname, "")) continue; boxa = NULL; if (baa) { boxa = boxaaGetBoxa(baa, i, L_CLONE); nboxes = boxaGetCount(boxa); if (nboxes == 0) boxaDestroy(&boxa); } ret = convertToPdfDataSegmented(fname, res, type, thresh, boxa, quality, scalefactor, title, &imdata, &imbytes); boxaDestroy(&boxa); /* safe; in case nboxes > 0 */ if (ret) { L_ERROR("pdf encoding failed for %s\n", __func__, fname); continue; } ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) LEPT_FREE(imdata); ptraAdd(pa_data, ba); } sarrayDestroy(&sa); ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate */ ret = ptraConcatenatePdfToData(pa_data, NULL, &data, &databytes); /* Clean up */ ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); if (ret) { if (data) LEPT_FREE(data); return ERROR_INT("pdf data not made", __func__, 1); } ret = l_binaryWrite(fileout, "w", data, databytes); LEPT_FREE(data); if (ret) L_ERROR("pdf data not written to file\n", __func__); return ret; } /*! * \brief convertNumberedMasksToBoxaa() * * \param[in] dirname directory name containing mask images * \param[in] substr [optional] substring filter on filenames; * can be null * \param[in] numpre number of characters in name before number * \param[in] numpost number of characters in name after number, * up to a dot before an extension * \return boxaa of mask regions, or NULL on error * *
 * Notes:
 *      (1) This is conveniently used to generate the input boxaa
 *          for convertSegmentedFilesToPdf().  It guarantees that the
 *          boxa will be aligned with the page images, even if some
 *          of the boxa are empty.
 * 
*/ BOXAA * convertNumberedMasksToBoxaa(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost) { char *fname; l_int32 i, n; BOXA *boxa; BOXAA *baa; PIX *pix; SARRAY *sa; if (!dirname) return (BOXAA *)ERROR_PTR("dirname not defined", __func__, NULL); if ((sa = getNumberedPathnamesInDirectory(dirname, substr, numpre, numpost, 10000)) == NULL) return (BOXAA *)ERROR_PTR("sa not made", __func__, NULL); /* Generate and save all the encoded pdf strings */ n = sarrayGetCount(sa); baa = boxaaCreate(n); boxa = boxaCreate(1); boxaaInitFull(baa, boxa); boxaDestroy(&boxa); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if (!strcmp(fname, "")) continue; if ((pix = pixRead(fname)) == NULL) { L_WARNING("invalid image on page %d\n", __func__, i); continue; } boxa = pixConnComp(pix, NULL, 8); boxaaReplaceBoxa(baa, i, boxa); pixDestroy(&pix); } sarrayDestroy(&sa); return baa; } /*---------------------------------------------------------------------* * Segmented single page, multi-image converters * *---------------------------------------------------------------------*/ /*! * \brief convertToPdfSegmented() * * \param[in] filein input image file -- any format * \param[in] res input image resolution; typ. 300 ppi; * use 0 for default * \param[in] type compression type for non-image regions; image * regions are always compressed with L_JPEG_ENCODE * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE * \param[in] boxa [optional] of image regions; can be null * \param[in] quality used for jpeg image regions; 0 for default * \param[in] scalefactor used for jpeg regions; must be <= 1.0 * \param[in] title [optional] pdf title; can be null * \param[in] fileout output pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there are no image regions, set %boxa == NULL;
 *          %quality and %scalefactor are ignored.
 *      (2) Typically, %scalefactor is < 1.0, because the image regions
 *          can be rendered at a lower resolution (for better compression)
 *          than the text regions.  If %scalefactor == 0, we use 1.0.
 *          If the input image is 1 bpp and scalefactor < 1.0, we
 *          use scaleToGray() to downsample the image regions to gray
 *          before compressing them.
 *      (3) If the compression type for non-image regions is L_G4_ENCODE
 *          and bpp > 1, the image is upscaled 2x and thresholded
 *          to 1 bpp.  That is the only situation where %thresh is used.
 *      (4) The parameter %quality is only used for image regions.
 *          If %type == L_JPEG_ENCODE, default jpeg quality (75) is
 *          used for the non-image regions.
 *      (5) Processing matrix for non-image regions.
 *
 *          Input           G4              JPEG                FLATE
 *          ----------|---------------------------------------------------
 *          1 bpp     |  1x, 1 bpp       1x flate, 1 bpp     1x, 1 bpp
 *                    |
 *          cmap      |  2x, 1 bpp       1x flate, cmap      1x, cmap
 *                    |
 *          2,4 bpp   |  2x, 1 bpp       1x flate            1x, 2,4 bpp
 *          no cmap   |                  2,4 bpp
 *                    |
 *          8,32 bpp  |  2x, 1 bpp       1x (jpeg)           1x, 8,32 bpp
 *          no cmap   |                  8,32 bpp
 *
 *          Summary:
 *          (a) if G4 is requested, G4 is used, with 2x upscaling
 *              for all cases except 1 bpp.
 *          (b) if JPEG is requested, use flate encoding for all cases
 *              except 8 bpp without cmap and 32 bpp (rgb).
 *          (c) if FLATE is requested, use flate with no transformation
 *              of the raster data.
 *      (6) Calling options/sequence for these functions:
 *              file  -->  file      (convertToPdfSegmented)
 *                  pix  -->  file      (pixConvertToPdfSegmented)
 *                      pix  -->  data      (pixConvertToPdfDataSegmented)
 *              file  -->  data      (convertToPdfDataSegmented)
 *                      pix  -->  data      (pixConvertToPdfDataSegmented)
 * 
*/ l_ok convertToPdfSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { l_int32 ret; PIX *pixs; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", __func__, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", __func__); scalefactor = 1.0; } if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); ret = pixConvertToPdfSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, title, fileout); pixDestroy(&pixs); return ret; } /*! * \brief pixConvertToPdfSegmented() * * \param[in] pixs any depth, cmap OK * \param[in] res input image resolution; typ. 300 ppi; * use 0 for default * \param[in] type compression type for non-image regions; image * regions are always compressed with L_JPEG_ENCODE * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE * \param[in] boxa [optional] of image regions; can be null * \param[in] quality used for jpeg image regions; 0 for default * \param[in] scalefactor used for jpeg regions; must be <= 1.0 * \param[in] title [optional] pdf title; can be null * \param[in] fileout output pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertToPdfSegmented() for details.
 * 
*/ l_ok pixConvertToPdfSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", __func__, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", __func__); scalefactor = 1.0; } ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, title, &data, &nbytes); if (ret) return ERROR_INT("pdf generation failure", __func__, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); if (data) LEPT_FREE(data); return ret; } /*! * \brief convertToPdfDataSegmented() * * \param[in] filein input image file -- any format * \param[in] res input image resolution; typ. 300 ppi; * use 0 for default * \param[in] type compression type for non-image regions; image * regions are always compressed with L_JPEG_ENCODE * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE * \param[in] boxa [optional] image regions; can be null * \param[in] quality used for jpeg image regions; 0 for default * \param[in] scalefactor used for jpeg regions; must be <= 1.0 * \param[in] title [optional] pdf title; can be null * \param[out] pdata pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there are no image regions, set %boxa == NULL;
 *          %quality and %scalefactor are ignored.
 *      (2) Typically, %scalefactor is < 1.0.  The image regions are
 * 
*/ l_ok convertToPdfDataSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 ret; PIX *pixs; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", __func__, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", __func__); scalefactor = 1.0; } if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", __func__, 1); ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, title, pdata, pnbytes); pixDestroy(&pixs); return ret; } /*! * \brief pixConvertToPdfDataSegmented() * * \param[in] pixs any depth, cmap OK * \param[in] res input image resolution; typ. 300 ppi; * use 0 for default * \param[in] type compression type for non-image regions; image * regions are always compressed with L_JPEG_ENCODE * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE * \param[in] boxa [optional] of image regions; can be null * \param[in] quality used for jpeg image regions; 0 for default * \param[in] scalefactor used for jpeg regions; must be <= 1.0 * \param[in] title [optional] pdf title; can be null * \param[out] pdata pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See convertToPdfSegmented() for details.
 * 
*/ l_ok pixConvertToPdfDataSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 i, nbox, seq, bx, by, bw, bh, upscale; l_float32 scale; BOX *box, *boxc, *box2; PIX *pix, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; PIXCMAP *cmap; L_PDF_DATA *lpd; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", __func__, 1); if (boxa && (scalefactor <= 0.0 || scalefactor > 1.0)) { L_WARNING("setting scalefactor to 1.0\n", __func__); scalefactor = 1.0; } /* Adjust scalefactor so that the product with res gives an integer */ if (res <= 0) res = DefaultInputRes; scale = (l_float32)((l_int32)(scalefactor * res + 0.5)) / (l_float32)res; cmap = pixGetColormap(pixs); /* Simple case: single image to be encoded */ if (!boxa || boxaGetCount(boxa) == 0) { if (pixGetDepth(pixs) > 1 && type == L_G4_ENCODE) { if (cmap) pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt1 = pixConvertTo8(pixs, FALSE); pixt2 = pixScaleGray2xLIThresh(pixt1, thresh); pixConvertToPdfData(pixt2, type, quality, pdata, pnbytes, 0, 0, 2 * res, title, NULL, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); } else { pixConvertToPdfData(pixs, type, quality, pdata, pnbytes, 0, 0, res, title, NULL, 0); } return 0; } /* Multiple images to be encoded. If %type == L_G4_ENCODE, * jpeg encode a version of pixs that is blanked in the non-image * regions, and paint the scaled non-image part onto it through a mask. * Otherwise, we must put the non-image part down first and * then render all the image regions separately on top of it, * at their own resolution. */ pixt1 = pixSetBlackOrWhiteBoxa(pixs, boxa, L_SET_WHITE); /* non-image */ nbox = boxaGetCount(boxa); if (type == L_G4_ENCODE) { pixt2 = pixCreateTemplate(pixs); /* only image regions */ pixSetBlackOrWhite(pixt2, L_SET_WHITE); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixClipRectangle(pixs, box, &boxc); boxGetGeometry(boxc, &bx, &by, &bw, &bh); pixRasterop(pixt2, bx, by, bw, bh, PIX_SRC, pix, 0, 0); pixDestroy(&pix); boxDestroy(&box); boxDestroy(&boxc); } pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pixt3) == 1) pixt4 = pixScaleToGray(pixt3, scale); else pixt4 = pixScale(pixt3, scale, scale); pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, 0, 0, (l_int32)(scale * res), title, &lpd, L_FIRST_IMAGE); if (pixGetDepth(pixt1) == 1) { pixt5 = pixClone(pixt1); upscale = 1; } else { pixt6 = pixConvertTo8(pixt1, 0); pixt5 = pixScaleGray2xLIThresh(pixt6, thresh); pixDestroy(&pixt6); upscale = 2; } pixConvertToPdfData(pixt5, L_G4_ENCODE, quality, pdata, pnbytes, 0, 0, upscale * res, title, &lpd, L_LAST_IMAGE); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); } else { /* Put the non-image part down first. This is the full size of the page, so we can use it to find the page height in pixels, which is required for determining the LL corner of the image relative to the LL corner of the page. */ pixConvertToPdfData(pixt1, type, quality, pdata, pnbytes, 0, 0, res, title, &lpd, L_FIRST_IMAGE); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixt2 = pixClipRectangle(pixs, box, &boxc); pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pixt3) == 1) pixt4 = pixScaleToGray(pixt3, scale); else pixt4 = pixScale(pixt3, scale, scale); box2 = boxTransform(boxc, 0, 0, scale, scale); boxGetGeometry(box2, &bx, &by, NULL, &bh); seq = (i == nbox - 1) ? L_LAST_IMAGE : L_NEXT_IMAGE; pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, bx, by, (l_int32)(scale * res), title, &lpd, seq); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); boxDestroy(&box); boxDestroy(&boxc); boxDestroy(&box2); } } pixDestroy(&pixt1); return 0; } /*---------------------------------------------------------------------* * Multi-page concatenation * *---------------------------------------------------------------------*/ /*! * \brief concatenatePdf() * * \param[in] dirname directory name containing single-page pdf files * \param[in] substr [optional] substring filter on filenames; * can be null * \param[in] fileout concatenated pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 *      (2) If %substr is not NULL, only filenames that contain
 *          the substring can be returned.  If %substr == NULL,
 *          none of the filenames are filtered out.
 *      (3) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order
 *          before concatenation.
 * 
*/ l_ok concatenatePdf(const char *dirname, const char *substr, const char *fileout) { l_int32 ret; SARRAY *sa; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", __func__, 1); ret = saConcatenatePdf(sa, fileout); sarrayDestroy(&sa); return ret; } /*! * \brief saConcatenatePdf() * * \param[in] sa string array of pathnames for single-page pdf files * \param[in] fileout concatenated pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 * 
*/ l_ok saConcatenatePdf(SARRAY *sa, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); ret = saConcatenatePdfToData(sa, &data, &nbytes); if (ret) return ERROR_INT("pdf data not made", __func__, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); return ret; } /*! * \brief ptraConcatenatePdf() * * \param[in] pa array of pdf strings, each for a single-page pdf file * \param[in] fileout concatenated pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 * 
*/ l_ok ptraConcatenatePdf(L_PTRA *pa, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); ret = ptraConcatenatePdfToData(pa, NULL, &data, &nbytes); if (ret) return ERROR_INT("pdf data not made", __func__, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); return ret; } /*! * \brief concatenatePdfToData() * * \param[in] dirname directory name containing single-page pdf files * \param[in] substr [optional] substring filter on filenames; * can be null * \param[out] pdata concatenated pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 *      (2) If %substr is not NULL, only filenames that contain
 *          the substring can be returned.  If %substr == NULL,
 *          none of the filenames are filtered out.
 *      (3) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order
 *          before concatenation.
 * 
*/ l_ok concatenatePdfToData(const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes) { l_int32 ret; SARRAY *sa; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!dirname) return ERROR_INT("dirname not defined", __func__, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", __func__, 1); ret = saConcatenatePdfToData(sa, pdata, pnbytes); sarrayDestroy(&sa); return ret; } /*! * \brief saConcatenatePdfToData() * * \param[in] sa string array of pathnames for single-page pdf files * \param[out] pdata concatenated pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 * 
*/ l_ok saConcatenatePdfToData(SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { char *fname; l_int32 i, npages, ret; L_BYTEA *bas; L_PTRA *pa_data; /* input pdf data for each page */ if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", __func__, 1); /* Read the pdf files into memory */ if ((npages = sarrayGetCount(sa)) == 0) return ERROR_INT("no filenames found", __func__, 1); pa_data = ptraCreate(npages); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); bas = l_byteaInitFromFile(fname); ptraAdd(pa_data, bas); } ret = ptraConcatenatePdfToData(pa_data, sa, pdata, pnbytes); /* Cleanup: some pages could have been removed */ ptraGetActualCount(pa_data, &npages); for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&bas); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /* --------------------------------------------*/ #endif /* USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pdfio1stub.c000066400000000000000000000263541506303110300166010ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfio1stub.c *
 *
 *     Stubs for pdfio1.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* ----------------------------------------------------------------------*/ l_ok convertFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConvertFilesToPdf(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConvertFilesToPdfData(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok selectDefaultPdfEncoding(PIX *pix, l_int32 *ptype) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertUnscaledFilesToPdf(const char *dirname, const char *substr, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConvertUnscaledFilesToPdf(SARRAY *sa, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConvertUnscaledFilesToPdfData(SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertUnscaledToPdfData(const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixaConvertToPdfData(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertToPdf(const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertImageDataToPdf(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertToPdfData(const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertImageDataToPdfData(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixConvertToPdf(PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamPdf(FILE *fp, PIX *pix, l_int32 res, const char *title) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemPdf(l_uint8 **pdata, size_t *pnbytes, PIX *pix, l_int32 res, const char *title) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertSegmentedFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ BOXAA * convertNumberedMasksToBoxaa(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost) { return (BOXAA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok convertToPdfSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixConvertToPdfSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertToPdfDataSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixConvertToPdfDataSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok concatenatePdf(const char *dirname, const char *substr, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConcatenatePdf(SARRAY *sa, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok ptraConcatenatePdf(L_PTRA *pa, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok concatenatePdfToData(const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok saConcatenatePdfToData(SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ /* --------------------------------------------*/ #endif /* !USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pdfio2.c000066400000000000000000003171151506303110300157020ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfio2.c *
 *
 *    Lower-level operations for generating pdf.
 *
 *     Intermediate function for single page, multi-image conversion
 *          l_int32              pixConvertToPdfData()
 *
 *     Intermediate function for generating multipage pdf output
 *          l_int32              ptraConcatenatePdfToData()
 *
 *     Convert tiff multipage to pdf file
 *          l_int32              convertTiffMultipageToPdf()
 *
 *     Generates the CID, transcoding under some conditions
 *          l_int32              l_generateCIDataForPdf()
 *          l_int32              l_generateCIData()
 *
 *       Lower-level CID generation without transcoding
 *          L_COMP_DATA         *l_generateFlateDataPdf()
 *          L_COMP_DATA         *l_generateJpegData()
 *          L_COMP_DATA         *l_generateJpegDataMem()
 *          static L_COMP_DATA  *l_generateJp2kData()
 *          L_COMP_DATA         *l_generateG4Data()
 *
 *       Lower-level CID generation with transcoding
 *          l_int32              pixGenerateCIData()
 *          L_COMP_DATA         *l_generateFlateData()
 *          static L_COMP_DATA  *pixGenerateFlateData()
 *          static L_COMP_DATA  *pixGenerateJpegData()
 *          static L_COMP_DATA  *pixGenerateJp2kData()
 *          static L_COMP_DATA  *pixGenerateG4Data()
 *
 *       Other CID operations
 *          l_int32              cidConvertToPdfData()
 *          void                 l_CIDataDestroy()
 *
 *     Helper functions for generating the output pdf string
 *          static l_int32       l_generatePdf()
 *          static void          generateFixedStringsPdf()
 *          static char         *generateEscapeString()
 *          static void          generateMediaboxPdf()
 *          static l_int32       generatePageStringPdf()
 *          static l_int32       generateContentStringPdf()
 *          static l_int32       generatePreXStringsPdf()
 *          static l_int32       generateColormapStringsPdf()
 *          static void          generateTrailerPdf()
 *          static l_int32       makeTrailerStringPdf()
 *          static l_int32       generateOutputDataPdf()
 *
 *     Helper functions for generating multipage pdf output
 *          static l_int32       parseTrailerPdf()
 *          static char         *generatePagesObjStringPdf()
 *          static L_BYTEA      *substituteObjectNumbers()
 *
 *     Create/destroy/access pdf data
 *          static L_PDF_DATA   *pdfdataCreate()
 *          static void          pdfdataDestroy()
 *          static L_COMP_DATA  *pdfdataGetCid()
 *
 *     Find number of pages in a pdf
 *          l_int32              getPdfPageCount()
 *
 *     Find widths and heights of pages and media boxes in a pdf
 *          l_int32              getPdfPageSizes()
 *          l_int32              getPdfMediaBoxSizes()
 *
 *     Find effective resolution of images rendered from a pdf
 *          l_int32              getPdfRendererResolution()
 *
 *     Set flags for special modes
 *          void                 l_pdfSetG4ImageMask()
 *          void                 l_pdfSetDateAndVersion()
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* Typical scan resolution in ppi (pixels/inch) */ static const l_int32 DefaultInputRes = 300; /* Static helpers */ static L_COMP_DATA *l_generateJp2kData(const char *fname); static L_COMP_DATA *pixGenerateFlateData(PIX *pixs, l_int32 ascii85flag); static L_COMP_DATA *pixGenerateJpegData(PIX *pixs, l_int32 ascii85flag, l_int32 quality); static L_COMP_DATA *pixGenerateJp2kData(PIX *pixs, l_int32 quality); static L_COMP_DATA *pixGenerateG4Data(PIX *pixs, l_int32 ascii85flag); static l_int32 l_generatePdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd); static void generateFixedStringsPdf(L_PDF_DATA *lpd); static char *generateEscapeString(const char *str); static void generateMediaboxPdf(L_PDF_DATA *lpd); static l_int32 generatePageStringPdf(L_PDF_DATA *lpd); static l_int32 generateContentStringPdf(L_PDF_DATA *lpd); static l_int32 generatePreXStringsPdf(L_PDF_DATA *lpd); static l_int32 generateColormapStringsPdf(L_PDF_DATA *lpd); static void generateTrailerPdf(L_PDF_DATA *lpd); static char *makeTrailerStringPdf(L_DNA *daloc); static l_int32 generateOutputDataPdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd); static l_int32 parseTrailerPdf(L_BYTEA *bas, L_DNA **pda); static char *generatePagesObjStringPdf(NUMA *napage); static L_BYTEA *substituteObjectNumbers(L_BYTEA *bas, NUMA *na_objs); static L_PDF_DATA *pdfdataCreate(const char *title); static void pdfdataDestroy(L_PDF_DATA **plpd); static L_COMP_DATA *pdfdataGetCid(L_PDF_DATA *lpd, l_int32 index); /* ---------------- Defaults for rendering options ----------------- */ /* Output G4 as writing through image mask; this is the default */ static l_int32 var_WRITE_G4_IMAGE_MASK = 1; /* Write date/time and lib version into pdf; this is the default */ static l_int32 var_WRITE_DATE_AND_VERSION = 1; #define L_SMALLBUF 256 #define L_BIGBUF 2048 /* must be able to hold hex colormap */ #ifndef NO_CONSOLE_IO #define DEBUG_MULTIPAGE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Intermediate function for generating multipage pdf output * *---------------------------------------------------------------------*/ /*! * \brief pixConvertToPdfData() * * \param[in] pix all depths; cmap OK * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE, * L_JP2K_ENCODE * \param[in] quality for jpeg: 1-100; 0 for default (75) * for jp2k: 27-45; 0 for default (34) * \param[out] pdata pdf array * \param[out] pnbytes number of bytes in pdf array * \param[in] x, y location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * \param[in] res override the resolution of the input image, in ppi; * use 0 to respect resolution embedded in the input * \param[in] title [optional] pdf title; can be null * \param[in,out] plpd ptr to lpd; created on the first invocation and * returned until last image is processed * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %res == 0 and the input resolution field from the pix is 0,
 *          this will use DefaultInputRes.
 *      (2) This only writes %data if it is the last image to be
 *          written on the page.
 *      (3) See comments in convertToPdf().
 * 
*/ l_ok pixConvertToPdfData(PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 pixres, w, h, ret; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid = NULL; L_PDF_DATA *lpd = NULL; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { selectDefaultPdfEncoding(pix, &type); } if (quality < 0 || quality > 100) return ERROR_INT("invalid quality", __func__, 1); if (plpd) { /* part of multi-page invocation */ if (position == L_FIRST_IMAGE) *plpd = NULL; } /* Generate the compressed image data. It must NOT * be ascii85 encoded. */ pixGenerateCIData(pix, type, quality, 0, &cid); if (!cid) return ERROR_INT("cid not made", __func__, 1); /* Get media box in pts. Guess the input image resolution * based on the input parameter %res, the resolution data in * the pix, and the size of the image. */ pixres = cid->res; w = cid->w; h = cid->h; if (res <= 0.0) res = (pixres > 0) ? pixres : DefaultInputRes; xpt = x * 72.f / res; ypt = y * 72.f / res; wpt = w * 72.f / res; hpt = h * 72.f / res; /* Set up lpd */ if (!plpd) { /* single image */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", __func__, 1); } else if (position == L_FIRST_IMAGE) { /* first of multiple images */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", __func__, 1); *plpd = lpd; } else { /* not the first of multiple images */ lpd = *plpd; } /* Add the data to the lpd */ ptraAdd(lpd->cida, cid); lpd->n++; ptaAddPt(lpd->xy, xpt, ypt); ptaAddPt(lpd->wh, wpt, hpt); /* If a single image or the last of multiple images, * generate the pdf and destroy the lpd */ if (!plpd || (position == L_LAST_IMAGE)) { ret = l_generatePdf(pdata, pnbytes, lpd); pdfdataDestroy(&lpd); if (plpd) *plpd = NULL; if (ret) return ERROR_INT("pdf output not made", __func__, 1); } return 0; } /*---------------------------------------------------------------------* * Intermediate function for generating multipage pdf output * *---------------------------------------------------------------------*/ /*! * \brief ptraConcatenatePdfToData() * * \param[in] pa_data ptra array of pdf strings, each for a * single-page pdf file * \param[in] sa [optional] string array of pathnames for * input pdf files; can be null * \param[out] pdata concatenated pdf data in memory * \param[out] pnbytes number of bytes in pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This only works with leptonica-formatted single-page pdf files.
 *          pdf files generated by other programs will have unpredictable
 *          (and usually bad) results.  The requirements for each pdf file:
 *            (a) The Catalog and Info objects are the first two.
 *            (b) Object 3 is Pages
 *            (c) Object 4 is Page
 *            (d) The remaining objects are Contents, XObjects, and ColorSpace
 *      (2) We remove trailers from each page, and append the full trailer
 *          for all pages at the end.
 *      (3) For all but the first file, remove the ID and the first 3
 *          objects (catalog, info, pages), so that each subsequent
 *          file has only objects of these classes:
 *              Page, Contents, XObject, ColorSpace (Indexed RGB).
 *          For those objects, we substitute these refs to objects
 *          in the local file:
 *              Page:  Parent(object 3), Contents, XObject(typically multiple)
 *              XObject:  [ColorSpace if indexed]
 *          The Pages object on the first page (object 3) has a Kids array
 *          of references to all the Page objects, with a Count equal
 *          to the number of pages.  Each Page object refers back to
 *          this parent.
 * 
*/ l_ok ptraConcatenatePdfToData(L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { char *fname, *str_pages, *str_trailer; l_uint8 *pdfdata, *data; l_int32 i, j, index, nobj, npages; l_int32 *sizes, *locs; size_t size; L_BYTEA *bas, *bad, *bat1, *bat2; L_DNA *da_locs, *da_sizes, *da_outlocs, *da; L_DNAA *daa_locs; /* object locations on each page */ NUMA *na_objs, *napage; NUMAA *naa_objs; /* object mapping numbers to new values */ if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pa_data) return ERROR_INT("pa_data not defined", __func__, 1); /* Parse the files and find the object locations. * Remove file data that cannot be parsed. */ ptraGetActualCount(pa_data, &npages); daa_locs = l_dnaaCreate(npages); for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); if (parseTrailerPdf(bas, &da_locs) != 0) { bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&bas); if (sa) { fname = sarrayGetString(sa, i, L_NOCOPY); L_ERROR("can't parse file %s; skipping\n", __func__, fname); } else { L_ERROR("can't parse file %d; skipping\n", __func__, i); } } else { l_dnaaAddDna(daa_locs, da_locs, L_INSERT); } } /* Recompute npages in case some of the files were not pdf */ ptraCompactArray(pa_data); ptraGetActualCount(pa_data, &npages); if (npages == 0) { l_dnaaDestroy(&daa_locs); return ERROR_INT("no parsable pdf files found", __func__, 1); } /* Find the mapping from initial to final object numbers */ naa_objs = numaaCreate(npages); /* stores final object numbers */ napage = numaCreate(npages); /* stores "Page" object numbers */ index = 0; for (i = 0; i < npages; i++) { da = l_dnaaGetDna(daa_locs, i, L_CLONE); nobj = l_dnaGetCount(da); if (i == 0) { numaAddNumber(napage, 4); /* object 4 on first page */ na_objs = numaMakeSequence(0.0, 1.0, nobj - 1); index = nobj - 1; } else { /* skip the first 3 objects in each file */ numaAddNumber(napage, index); /* Page object is first we add */ na_objs = numaMakeConstant(0.0, nobj - 1); numaReplaceNumber(na_objs, 3, 3); /* refers to parent of all */ for (j = 4; j < nobj - 1; j++) numaSetValue(na_objs, j, index++); } numaaAddNuma(naa_objs, na_objs, L_INSERT); l_dnaDestroy(&da); } /* Make the Pages object (#3) */ str_pages = generatePagesObjStringPdf(napage); /* Build the output */ bad = l_byteaCreate(5000); da_outlocs = l_dnaCreate(0); /* locations of all output objects */ for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); pdfdata = l_byteaGetData(bas, &size); da_locs = l_dnaaGetDna(daa_locs, i, L_CLONE); /* locs on this page */ na_objs = numaaGetNuma(naa_objs, i, L_CLONE); /* obj # on this page */ nobj = l_dnaGetCount(da_locs) - 1; da_sizes = l_dnaDiffAdjValues(da_locs); /* object sizes on this page */ sizes = l_dnaGetIArray(da_sizes); locs = l_dnaGetIArray(da_locs); if (i == 0) { l_byteaAppendData(bad, pdfdata, sizes[0]); l_byteaAppendData(bad, pdfdata + locs[1], sizes[1]); l_byteaAppendData(bad, pdfdata + locs[2], sizes[2]); l_byteaAppendString(bad, str_pages); for (j = 0; j < 4; j++) l_dnaAddNumber(da_outlocs, locs[j]); } for (j = 4; j < nobj; j++) { l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); bat1 = l_byteaInitFromMem(pdfdata + locs[j], sizes[j]); bat2 = substituteObjectNumbers(bat1, na_objs); data = l_byteaGetData(bat2, &size); l_byteaAppendData(bad, data, size); l_byteaDestroy(&bat1); l_byteaDestroy(&bat2); } if (i == npages - 1) /* last one */ l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); LEPT_FREE(sizes); LEPT_FREE(locs); l_dnaDestroy(&da_locs); numaDestroy(&na_objs); l_dnaDestroy(&da_sizes); } /* Add the trailer */ str_trailer = makeTrailerStringPdf(da_outlocs); l_byteaAppendString(bad, str_trailer); /* Transfer the output data */ *pdata = l_byteaCopyData(bad, pnbytes); l_byteaDestroy(&bad); #if DEBUG_MULTIPAGE lept_stderr("******** object mapper **********"); numaaWriteStream(stderr, naa_objs); lept_stderr("******** Page object numbers ***********"); numaWriteStderr(napage); lept_stderr("******** Pages object ***********\n"); lept_stderr("%s\n", str_pages); #endif /* DEBUG_MULTIPAGE */ numaDestroy(&napage); numaaDestroy(&naa_objs); l_dnaDestroy(&da_outlocs); l_dnaaDestroy(&daa_locs); LEPT_FREE(str_pages); LEPT_FREE(str_trailer); return 0; } /*---------------------------------------------------------------------* * Convert tiff multipage to pdf file * *---------------------------------------------------------------------*/ /*! * \brief convertTiffMultipageToPdf() * * \param[in] filein (tiff) * \param[in] fileout (pdf) * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) A multipage tiff file can also be converted to PS, using
 *          convertTiffMultipageToPS()
 * 
*/ l_ok convertTiffMultipageToPdf(const char *filein, const char *fileout) { l_int32 istiff; PIXA *pixa; FILE *fp; if ((fp = fopenReadStream(filein)) == NULL) return ERROR_INT_1("file not found", filein, __func__, 1); istiff = fileFormatIsTiff(fp); fclose(fp); if (!istiff) return ERROR_INT_1("file not tiff format", filein, __func__, 1); pixa = pixaReadMultipageTiff(filein); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "weasel2", fileout); pixaDestroy(&pixa); return 0; } /*---------------------------------------------------------------------* * CID-based operations * *---------------------------------------------------------------------*/ /*! * \brief l_generateCIDataForPdf() * * \param[in] fname [optional] can be null * \param[in] pix [optional] can be null * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) * for jp2k if transcoded: 27-45; 0 for default (34) * \param[out] pcid compressed data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) You must set either filename or pix.
 *      (2) Given an image file and optionally a pix raster of that data,
 *          this provides a CID that is compatible with PDF, preferably
 *          without transcoding.
 *      (3) The pix is included for efficiency, in case transcoding
 *          is required and the pix is available to the caller.
 *      (4) We don't try to open files named "stdin" or "-" for Tesseract
 *          compatibility reasons. We may remove this restriction
 *          in the future.
 *      (5) Note that tiff-g4 must be transcoded to properly handle byte
 *          order and perhaps photometry (e.g., min-is-black).  For a
 *          multipage tiff file, data will only be extracted from the
 *          first page, so this should not be invoked.
 * 
*/ l_ok l_generateCIDataForPdf(const char *fname, PIX *pix, l_int32 quality, L_COMP_DATA **pcid) { l_int32 format, type; L_COMP_DATA *cid; PIX *pixt; if (!pcid) return ERROR_INT("&cid not defined", __func__, 1); *pcid = cid = NULL; if (!fname && !pix) return ERROR_INT("neither fname nor pix are defined", __func__, 1); /* If a compressed file is given that is not 'stdin', see if we * can generate the pdf output without transcoding. */ if (fname && strcmp(fname, "-") != 0 && strcmp(fname, "stdin") != 0) { findFileFormat(fname, &format); if (format == IFF_UNKNOWN) L_WARNING("file %s format is unknown\n", __func__, fname); if (format == IFF_PS || format == IFF_LPDF) { L_ERROR("file %s is unsupported format %d\n", __func__, fname, format); return 1; } if (format == IFF_JFIF_JPEG) { cid = l_generateJpegData(fname, 0); } else if (format == IFF_JP2) { cid = l_generateJp2kData(fname); } else if (format == IFF_PNG) { cid = l_generateFlateDataPdf(fname, pix); } } /* Otherwise, use the pix to generate the pdf output */ if (!cid) { if (!pix) pixt = pixRead(fname); else pixt = pixClone(pix); if (!pixt) return ERROR_INT("pixt not made", __func__, 1); if (selectDefaultPdfEncoding(pixt, &type)) { pixDestroy(&pixt); return 1; } pixGenerateCIData(pixt, type, quality, 0, &cid); pixDestroy(&pixt); if (!cid) return ERROR_INT("cid not made from pix", __func__, 1); } *pcid = cid; return 0; } /*! * \brief l_generateCIData() * * \param[in] fname * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE, * L_JP2K_ENCODE * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) * for jp2k if transcoded: 27-45; 0 for default (34) * \param[in] ascii85 0 for binary; 1 for ascii85-encoded * \param[out] pcid compressed data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can be used for both PostScript and pdf.
 *      (1) Set ascii85:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (2) This attempts to compress according to the requested type.
 *          If this can't be done, it falls back to ordinary flate encoding.
 *      (3) This differs from l_generateCIDataForPdf(), which determines
 *          the file format and only works for pdf.
 * 
*/ l_ok l_generateCIData(const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { l_int32 format, d, bps, spp, iscmap; L_COMP_DATA *cid; PIX *pix; if (!pcid) return ERROR_INT("&cid not defined", __func__, 1); *pcid = NULL; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) return ERROR_INT("invalid conversion type", __func__, 1); if (ascii85 != 0 && ascii85 != 1) return ERROR_INT("invalid ascii85", __func__, 1); /* Sanity check on requested encoding */ pixReadHeader(fname, &format, NULL, NULL, &bps, &spp, &iscmap); d = bps * spp; if (d == 24) d = 32; if (iscmap && type != L_FLATE_ENCODE) { L_WARNING("pixs has cmap; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } else if (d < 8 && type == L_JPEG_ENCODE) { L_WARNING("pixs has < 8 bpp; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } else if (d < 8 && type == L_JP2K_ENCODE) { L_WARNING("pixs has < 8 bpp; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } else if (d > 1 && type == L_G4_ENCODE) { L_WARNING("pixs has > 1 bpp; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } if (type == L_JPEG_ENCODE) { if (format == IFF_JFIF_JPEG) { /* do not transcode */ cid = l_generateJpegData(fname, ascii85); } else { if ((pix = pixRead(fname)) == NULL) return ERROR_INT("pix not returned for JPEG", __func__, 1); cid = pixGenerateJpegData(pix, ascii85, quality); pixDestroy(&pix); } if (!cid) return ERROR_INT("jpeg data not made", __func__, 1); } else if (type == L_JP2K_ENCODE) { if (format == IFF_JP2) { /* do not transcode */ cid = l_generateJp2kData(fname); } else { if ((pix = pixRead(fname)) == NULL) return ERROR_INT("pix not returned for JP2K", __func__, 1); cid = pixGenerateJp2kData(pix, quality); pixDestroy(&pix); } if (!cid) return ERROR_INT("jp2k data not made", __func__, 1); } else if (type == L_G4_ENCODE) { if ((pix = pixRead(fname)) == NULL) return ERROR_INT("pix not returned for G4", __func__, 1); cid = pixGenerateG4Data(pix, ascii85); pixDestroy(&pix); if (!cid) return ERROR_INT("g4 data not made", __func__, 1); } else if (type == L_FLATE_ENCODE) { if ((cid = l_generateFlateData(fname, ascii85)) == NULL) return ERROR_INT("flate data not made", __func__, 1); } else { return ERROR_INT("invalid conversion type", __func__, 1); } *pcid = cid; return 0; } /*---------------------------------------------------------------------* * Low-level CID-based operations * *---------------------------------------------------------------------*/ /*! * \brief l_generateFlateDataPdf() * * \param[in] fname preferably png * \param[in] pixs [optional] can be null * \return cid containing png data, or NULL on error * *
 * Notes:
 *      (1) If you hand this a png file, you are going to get
 *          png predictors embedded in the flate data. So it has
 *          come to this. http://xkcd.com/1022/
 *      (2) Exception: if the png is interlaced or if it is RGBA,
 *          it will be transcoded.
 *      (3) If transcoding is required, this will not have to read from
 *          file if a pix is input.
 * 
*/ L_COMP_DATA * l_generateFlateDataPdf(const char *fname, PIX *pixs) { l_uint8 *pngcomp = NULL; /* entire PNG compressed file */ l_uint8 *datacomp = NULL; /* gzipped raster data */ l_uint8 *cmapdata = NULL; /* uncompressed colormap */ char *cmapdatahex = NULL; /* hex ascii uncompressed colormap */ l_uint32 i, j, n; l_int32 format, interlaced; l_int32 ncolors; /* in colormap */ l_int32 bps; /* bits/sample: usually 8 */ l_int32 spp; /* samples/pixel: 1-grayscale/cmap); 3-rgb; 4-rgba */ l_int32 w, h, cmapflag; l_int32 xres, yres; size_t nbytescomp = 0, nbytespng = 0; FILE *fp; L_COMP_DATA *cid; PIX *pix; PIXCMAP *cmap = NULL; if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", __func__, NULL); findFileFormat(fname, &format); spp = 0; /* init to spp != 4 if not png */ interlaced = 0; /* initialize to no interlacing */ bps = 0; /* initialize to a nonsense value */ if (format == IFF_PNG) { isPngInterlaced(fname, &interlaced); if (readHeaderPng(fname, NULL, NULL, &bps, &spp, NULL)) return (L_COMP_DATA *)ERROR_PTR("bad png input", __func__, NULL); } /* PDF is capable of inlining some types of PNG files, but not all of them. We need to transcode anything with interlacing, an alpha channel, or 1 bpp (which would otherwise be photo-inverted). Note: any PNG image file with an alpha channel is converted on reading to RGBA (spp == 4). This includes the (gray + alpha) format with spp == 2. Because of the conversion, readHeaderPng() gives spp = 2, whereas pixGetSpp() gives spp = 4 on the converted pix. */ if (format != IFF_PNG || (format == IFF_PNG && (interlaced || bps == 1 || spp == 4 || spp == 2))) { /* lgtm+ analyzer needed the logic expanded */ if (!pixs) pix = pixRead(fname); else pix = pixClone(pixs); if (!pix) return (L_COMP_DATA *)ERROR_PTR("pix not made", __func__, NULL); cid = pixGenerateFlateData(pix, 0); pixDestroy(&pix); return cid; } /* It's png. Generate the pdf data without transcoding. * Implementation by Jeff Breidenbach. * First, read the metadata */ if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); freadHeaderPng(fp, &w, &h, &bps, &spp, &cmapflag); fgetPngResolution(fp, &xres, &yres); fclose(fp); /* We get pdf corruption when inlining the data from 16 bpp png. */ if (bps == 16) return l_generateFlateData(fname, 0); /* Read the entire png file */ if ((pngcomp = l_binaryRead(fname, &nbytespng)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("unable to read file", fname, __func__, NULL); /* Extract flate data, copying portions of it to memory, including * the predictor information in a byte at the beginning of each * raster line. The flate data makes up the vast majority of * the png file, so after extraction we expect datacomp to * be nearly full (i.e., nbytescomp will be only slightly less * than nbytespng). Also extract the colormap if present. */ if ((datacomp = (l_uint8 *)LEPT_CALLOC(1, nbytespng)) == NULL) { LEPT_FREE(pngcomp); return (L_COMP_DATA *)ERROR_PTR("unable to allocate memory", __func__, NULL); } /* Parse the png file. Each chunk consists of: * length: 4 bytes * name: 4 bytes (e.g., "IDAT") * data: n bytes * CRC: 4 bytes * Start at the beginning of the data section of the first chunk, * byte 16, because the png file begins with 8 bytes of header, * followed by the first 8 bytes of the first chunk * (length and name). On each loop, increment by 12 bytes to * skip over the CRC, length and name of the next chunk. */ for (i = 16; i < nbytespng; i += 12) { /* do each successive chunk */ /* Get the chunk length */ n = pngcomp[i - 8] << 24; n += pngcomp[i - 7] << 16; n += pngcomp[i - 6] << 8; n += pngcomp[i - 5] << 0; if (n >= nbytespng - i) { /* "n + i" can overflow */ LEPT_FREE(pngcomp); LEPT_FREE(datacomp); pixcmapDestroy(&cmap); L_ERROR("invalid png: i = %d, n = %d, nbytes = %zu\n", __func__, i, n, nbytespng); return NULL; } /* Is it a data chunk? */ if (memcmp(pngcomp + i - 4, "IDAT", 4) == 0) { memcpy(datacomp + nbytescomp, pngcomp + i, n); nbytescomp += n; } /* Is it a palette chunk? */ if (cmapflag && !cmap && memcmp(pngcomp + i - 4, "PLTE", 4) == 0) { if ((n / 3) > (1 << bps)) { LEPT_FREE(pngcomp); LEPT_FREE(datacomp); pixcmapDestroy(&cmap); L_ERROR("invalid png: i = %d, n = %d, cmapsize = %d\n", __func__, i, n, (1 << bps)); return NULL; } cmap = pixcmapCreate(bps); for (j = i; j < i + n; j += 3) { pixcmapAddColor(cmap, pngcomp[j], pngcomp[j + 1], pngcomp[j + 2]); } } i += n; /* move to the end of the data chunk */ } LEPT_FREE(pngcomp); if (nbytescomp == 0) { LEPT_FREE(datacomp); pixcmapDestroy(&cmap); return (L_COMP_DATA *)ERROR_PTR("invalid PNG file", __func__, NULL); } /* Extract and encode the colormap data as hexascii */ ncolors = 0; if (cmap) { pixcmapSerializeToMemory(cmap, 3, &ncolors, &cmapdata); pixcmapDestroy(&cmap); if (!cmapdata) { LEPT_FREE(datacomp); return (L_COMP_DATA *)ERROR_PTR("cmapdata not made", __func__, NULL); } cmapdatahex = pixcmapConvertToHex(cmapdata, ncolors); LEPT_FREE(cmapdata); } /* Note that this is the only situation where the predictor * field of the CID is set to 1. Adobe's predictor values on * p. 76 of pdf_reference_1-7.pdf give 1 for no predictor and * 10-14 for inline predictors, the specifics of which are * ignored by the pdf interpreter, which just needs to know that * the first byte on each compressed scanline is some predictor * whose type can be inferred from the byte itself. */ cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); cid->datacomp = datacomp; cid->type = L_FLATE_ENCODE; cid->cmapdatahex = cmapdatahex; cid->nbytescomp = nbytescomp; cid->ncolors = ncolors; cid->predictor = TRUE; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = xres; return cid; } /*! * \brief l_generateJpegData() * * \param[in] fname of jpeg file * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg * \return cid containing jpeg data, or NULL on error * *
 * Notes:
 *      (1) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (2) Most of this function is repeated in l_generateJpegMemData(),
 *          which is required in pixacompFastConvertToPdfData().
 * 
*/ L_COMP_DATA * l_generateJpegData(const char *fname, l_int32 ascii85flag) { char *data85 = NULL; /* ascii85 encoded jpeg compressed file */ l_uint8 *data = NULL; l_int32 w, h, xres, yres, bps, spp; size_t nbytes, nbytes85; L_COMP_DATA *cid; FILE *fp; if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", __func__, NULL); if (ascii85flag != 0 && ascii85flag != 1) return (L_COMP_DATA *)ERROR_PTR("wrong ascii85flags", __func__, NULL); /* Read the metadata */ if (readHeaderJpeg(fname, &w, &h, &spp, NULL, NULL)) return (L_COMP_DATA *)ERROR_PTR("bad jpeg metadata", __func__, NULL); bps = 8; if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); fgetJpegResolution(fp, &xres, &yres); fclose(fp); /* Read the entire jpeg file. The returned jpeg data in memory * starts with ffd8 and ends with ffd9 */ if ((data = l_binaryRead(fname, &nbytes)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("data not extracted", fname, __func__, NULL); /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(data, nbytes, &nbytes85); LEPT_FREE(data); if (!data85) return (L_COMP_DATA *)ERROR_PTR_1("data85 not made", fname, __func__, NULL); else data85[nbytes85 - 1] = '\0'; /* remove the newline */ } cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); if (ascii85flag == 0) { cid->datacomp = data; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_JPEG_ENCODE; cid->nbytescomp = nbytes; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = xres; return cid; } /*! * \brief l_generateJpegDataMem() * * \param[in] data of jpeg-encoded file * \param[in] nbytes size of jpeg-encoded file * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg * \return cid containing jpeg data, or NULL on error * *
 * Notes:
 *      (1) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 * 
*/ L_COMP_DATA * l_generateJpegDataMem(l_uint8 *data, size_t nbytes, l_int32 ascii85flag) { char *data85 = NULL; /* ascii85 encoded jpeg compressed file */ l_int32 w, h, xres, yres, bps, spp; size_t nbytes85; L_COMP_DATA *cid; if (!data) return (L_COMP_DATA *)ERROR_PTR("data not defined", __func__, NULL); /* Read the metadata */ if (readHeaderMemJpeg(data, nbytes, &w, &h, &spp, NULL, NULL)) { LEPT_FREE(data); return (L_COMP_DATA *)ERROR_PTR("bad jpeg metadata", __func__, NULL); } bps = 8; readResolutionMemJpeg(data, nbytes, &xres, &yres); /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(data, nbytes, &nbytes85); LEPT_FREE(data); if (!data85) return (L_COMP_DATA *)ERROR_PTR("data85 not made", __func__, NULL); else data85[nbytes85 - 1] = '\0'; /* remove the newline */ } cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); if (ascii85flag == 0) { cid->datacomp = data; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_JPEG_ENCODE; cid->nbytescomp = nbytes; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = xres; return cid; } /*! * \brief l_generateJp2kData() * * \param[in] fname of jp2k file * \return cid containing jp2k data, or NULL on error * *
 * Notes:
 *      (1) This is only called after the file is verified to be jp2k.
 * 
*/ static L_COMP_DATA * l_generateJp2kData(const char *fname) { l_int32 w, h, bps, spp, xres, yres; size_t nbytes; L_COMP_DATA *cid; FILE *fp; if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", __func__, NULL); if (readHeaderJp2k(fname, &w, &h, &bps, &spp, NULL)) return (L_COMP_DATA *)ERROR_PTR("bad jp2k metadata", __func__, NULL); /* The returned jp2k data in memory is the entire jp2k file */ cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); if ((cid->datacomp = l_binaryRead(fname, &nbytes)) == NULL) { l_CIDataDestroy(&cid); return (L_COMP_DATA *)ERROR_PTR("data not extracted", __func__, NULL); } xres = yres = 0; if ((fp = fopenReadStream(fname)) != NULL) { fgetJp2kResolution(fp, &xres, &yres); fclose(fp); } cid->type = L_JP2K_ENCODE; cid->nbytescomp = nbytes; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = xres; return cid; } /*! * \brief l_generateG4Data() * * \param[in] fname of g4 compressed file * \param[in] ascii85flag 0 for g4 compressed; 1 for ascii85-encoded g4 * \return cid g4 compressed image data, or NULL on error * *
 * Notes:
 *      (1) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (2) This does not work for multipage tiff files.
 * 
*/ L_COMP_DATA * l_generateG4Data(const char *fname, l_int32 ascii85flag) { l_uint8 *datacomp = NULL; /* g4 compressed raster data */ char *data85 = NULL; /* ascii85 encoded g4 compressed data */ l_int32 w, h, xres, yres, npages; l_int32 minisblack; /* TRUE or FALSE */ size_t nbytes85, nbytescomp; L_COMP_DATA *cid; FILE *fp; if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", __func__, NULL); /* Make sure this is a single page tiff file */ if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); tiffGetCount(fp, &npages); fclose(fp); if (npages != 1) { L_ERROR(" %d page tiff; only works with 1 page (file: %s)\n", __func__, npages, fname); return NULL; } /* Read the resolution */ if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); getTiffResolution(fp, &xres, &yres); fclose(fp); /* The returned ccitt g4 data in memory is the block of * bytes in the tiff file, starting after 8 bytes and * ending before the directory. */ if (extractG4DataFromFile(fname, &datacomp, &nbytescomp, &w, &h, &minisblack)) { return (L_COMP_DATA *)ERROR_PTR_1("datacomp not extracted", fname, __func__, NULL); } /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); LEPT_FREE(datacomp); if (!data85) return (L_COMP_DATA *)ERROR_PTR_1("data85 not made", fname, __func__, NULL); else data85[nbytes85 - 1] = '\0'; /* remove the newline */ } cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); if (ascii85flag == 0) { cid->datacomp = datacomp; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_G4_ENCODE; cid->nbytescomp = nbytescomp; cid->w = w; cid->h = h; cid->bps = 1; cid->spp = 1; cid->minisblack = minisblack; cid->res = xres; return cid; } /*! * \brief pixGenerateCIData() * * \param[in] pixs 8 or 32 bpp, no colormap * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE or * L_JP2K_ENCODE * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) * for jp2k if transcoded: 27-45; 0 for default (34) * \param[in] ascii85 0 for binary; 1 for ascii85-encoded * \param[out] pcid compressed data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Set ascii85:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (2) Do not accept images with an asperity ratio greater than 10.
 * 
*/ l_ok pixGenerateCIData(PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { l_int32 w, h, d, maxAsp; PIXCMAP *cmap; if (!pcid) return ERROR_INT("&cid not defined", __func__, 1); *pcid = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { selectDefaultPdfEncoding(pixs, &type); } if (ascii85 != 0 && ascii85 != 1) return ERROR_INT("invalid ascii85", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w == 0 || h == 0) return ERROR_INT("invalid w or h", __func__, 1); maxAsp = L_MAX(w / h, h / w); if (maxAsp > 10) return ERROR_INT("max asperity > 10", __func__, 1); /* Conditionally modify the encoding type if libz is * available and the requested library is missing. */ #if defined(HAVE_LIBZ) # if !defined(HAVE_LIBJPEG) if (type == L_JPEG_ENCODE) { L_WARNING("no libjpeg; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } # endif /* !defined(HAVE_LIBJPEG) */ # if !defined(HAVE_LIBJP2K) if (type == L_JP2K_ENCODE) { L_WARNING("no libjp2k; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } # endif /* !defined(HAVE_LIBJP2K) */ # if !defined(HAVE_LIBTIFF) if (type == L_G4_ENCODE) { L_WARNING("no libtiff; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } # endif /* !defined(HAVE_LIBTIFF) */ #endif /* defined(HAVE_LIBZ) */ /* Sanity check on requested encoding */ d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (cmap && type != L_FLATE_ENCODE) { L_WARNING("pixs has cmap; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } else if (d < 8 && (type == L_JPEG_ENCODE || type == L_JP2K_ENCODE)) { L_WARNING("pixs has < 8 bpp; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } else if (d > 1 && type == L_G4_ENCODE) { L_WARNING("pixs has > 1 bpp; using flate encoding\n", __func__); type = L_FLATE_ENCODE; } if (type == L_JPEG_ENCODE) { if ((*pcid = pixGenerateJpegData(pixs, ascii85, quality)) == NULL) return ERROR_INT("jpeg data not made", __func__, 1); } else if (type == L_JP2K_ENCODE) { if ((*pcid = pixGenerateJp2kData(pixs, quality)) == NULL) return ERROR_INT("jp2k data not made", __func__, 1); } else if (type == L_G4_ENCODE) { if ((*pcid = pixGenerateG4Data(pixs, ascii85)) == NULL) return ERROR_INT("g4 data not made", __func__, 1); } else { /* type == L_FLATE_ENCODE */ if ((*pcid = pixGenerateFlateData(pixs, ascii85)) == NULL) return ERROR_INT("flate data not made", __func__, 1); } return 0; } /*! * \brief l_generateFlateData() * * \param[in] fname * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped * \return cid flate compressed image data, or NULL on error * *
 * Notes:
 *      (1) The input image is converted to one of these 4 types:
 *           ~ 1 bpp
 *           ~ 8 bpp, no colormap
 *           ~ 8 bpp, colormap
 *           ~ 32 bpp rgb
 *      (2) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (3) Always transcodes (i.e., first decodes the png file)
 * 
*/ L_COMP_DATA * l_generateFlateData(const char *fname, l_int32 ascii85flag) { L_COMP_DATA *cid; PIX *pixs; if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", __func__, NULL); if ((pixs = pixRead(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR("pixs not made", __func__, NULL); cid = pixGenerateFlateData(pixs, ascii85flag); pixDestroy(&pixs); return cid; } /*! * \brief pixGenerateFlateData() * * \param[in] pixs * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped * \return cid flate compressed image data, or NULL on error * *
 * Notes:
 *     (1) If called with an RGBA pix (spp == 4), the alpha channel
 *         will be removed, projecting a white backgrouond through
 *         any transparency.
 *     (2) If called with a colormapped pix, any transparency in the
 *         alpha component in the colormap will be ignored, as it is
 *         for all leptonica operations on colormapped pix.
 * 
*/ static L_COMP_DATA * pixGenerateFlateData(PIX *pixs, l_int32 ascii85flag) { l_uint8 *data = NULL; /* uncompressed raster data in required format */ l_uint8 *datacomp = NULL; /* gzipped raster data */ char *data85 = NULL; /* ascii85 encoded gzipped raster data */ l_uint8 *cmapdata = NULL; /* uncompressed colormap */ char *cmapdata85 = NULL; /* ascii85 encoded uncompressed colormap */ char *cmapdatahex = NULL; /* hex ascii uncompressed colormap */ l_int32 ncolors; /* in colormap; not used if cmapdata85 is null */ l_int32 bps; /* bits/sample: usually 8 */ l_int32 spp; /* samples/pixel: 1-grayscale/cmap); 3-rgb */ l_int32 w, h, d, cmapflag; size_t ncmapbytes85 = 0; size_t nbytes85 = 0; size_t nbytes, nbytescomp; L_COMP_DATA *cid; PIX *pixt; PIXCMAP *cmap; if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Convert the image to one of these 4 types: * 1 bpp * 8 bpp, no colormap * 8 bpp, colormap * 32 bpp rgb */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); cmapflag = (cmap) ? 1 : 0; if (d == 2 || d == 4 || d == 16) { pixt = pixConvertTo8(pixs, cmapflag); cmap = pixGetColormap(pixt); d = pixGetDepth(pixt); } else if (d == 32 && pixGetSpp(pixs) == 4) { /* remove alpha */ pixt = pixAlphaBlendUniform(pixs, 0xffffff00); } else { pixt = pixClone(pixs); } if (!pixt) return (L_COMP_DATA *)ERROR_PTR("pixt not made", __func__, NULL); spp = (d == 32) ? 3 : 1; bps = (d == 32) ? 8 : d; /* Extract and encode the colormap data as both ascii85 and hexascii */ ncolors = 0; if (cmap) { pixcmapSerializeToMemory(cmap, 3, &ncolors, &cmapdata); if (!cmapdata) { pixDestroy(&pixt); return (L_COMP_DATA *)ERROR_PTR("cmapdata not made", __func__, NULL); } cmapdata85 = encodeAscii85(cmapdata, 3 * ncolors, &ncmapbytes85); cmapdatahex = pixcmapConvertToHex(cmapdata, ncolors); LEPT_FREE(cmapdata); } /* Extract and compress the raster data */ pixGetRasterData(pixt, &data, &nbytes); pixDestroy(&pixt); if (!data) { LEPT_FREE(cmapdata85); LEPT_FREE(cmapdatahex); return (L_COMP_DATA *)ERROR_PTR("data not returned", __func__, NULL); } datacomp = zlibCompress(data, nbytes, &nbytescomp); LEPT_FREE(data); if (!datacomp) { LEPT_FREE(cmapdata85); LEPT_FREE(cmapdatahex); return (L_COMP_DATA *)ERROR_PTR("datacomp not made", __func__, NULL); } /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); LEPT_FREE(datacomp); if (!data85) { LEPT_FREE(cmapdata85); LEPT_FREE(cmapdatahex); return (L_COMP_DATA *)ERROR_PTR("data85 not made", __func__, NULL); } else { data85[nbytes85 - 1] = '\0'; /* remove the newline */ } } cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); if (ascii85flag == 0) { cid->datacomp = datacomp; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_FLATE_ENCODE; cid->cmapdatahex = cmapdatahex; cid->cmapdata85 = cmapdata85; cid->nbytescomp = nbytescomp; cid->ncolors = ncolors; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = pixGetXRes(pixs); cid->nbytes = nbytes; /* only for debugging */ return cid; } /*! * \brief pixGenerateJpegData() * * \param[in] pixs 8, 16 or 32 bpp, no colormap * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg * \param[in] quality 0 for default, which is 75 * \return cid jpeg compressed data, or NULL on error * *
 * Notes:
 *      (1) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 *      (2) If 16 bpp, convert first to 8 bpp, using the MSB
 * 
*/ static L_COMP_DATA * pixGenerateJpegData(PIX *pixs, l_int32 ascii85flag, l_int32 quality) { l_int32 d; char *fname; L_COMP_DATA *cid; if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 16 && d != 32) return (L_COMP_DATA *)ERROR_PTR("pixs not 8, 16 or 32 bpp", __func__, NULL); /* Compress to a temp jpeg file */ fname = l_makeTempFilename(); if (pixWriteJpeg(fname, pixs, quality, 0)) { LEPT_FREE(fname); return NULL; } /* Generate the data */ cid = l_generateJpegData(fname, ascii85flag); if (lept_rmfile(fname) != 0) L_ERROR("temp file %s was not deleted\n", __func__, fname); LEPT_FREE(fname); return cid; } /*! * \brief pixGenerateJp2kData() * * \param[in] pixs 8 or 32 bpp, no colormap * \param[in] quality 0 for default, which is 34 * \return cid jp2k compressed data, or NULL on error * *
 * Notes:
 *      (1) The quality can be set between 27 (very poor) and 45
 *          (nearly perfect).  Use 0 for default (34). Use 100 for lossless,
 *          but this is very expensive and not recommended.
 * 
*/ static L_COMP_DATA * pixGenerateJp2kData(PIX *pixs, l_int32 quality) { l_int32 d; char *fname; L_COMP_DATA *cid; if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (L_COMP_DATA *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); /* Compress to a temp jp2k file */ fname = l_makeTempFilename(); if (pixWriteJp2k(fname, pixs, quality, 5, 0, 0)) { LEPT_FREE(fname); return NULL; } /* Generate the data */ cid = l_generateJp2kData(fname); if (lept_rmfile(fname) != 0) L_ERROR("temp file %s was not deleted\n", __func__, fname); LEPT_FREE(fname); return cid; } /*! * \brief pixGenerateG4Data() * * \param[in] pixs 1 bpp, no colormap * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped * \return cid g4 compressed image data, or NULL on error * *
 * Notes:
 *      (1) Set ascii85flag:
 *           ~ 0 for binary data (PDF only)
 *           ~ 1 for ascii85 (5 for 4) encoded binary data (PostScript only)
 * 
*/ static L_COMP_DATA * pixGenerateG4Data(PIX *pixs, l_int32 ascii85flag) { char *fname; L_COMP_DATA *cid; if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (L_COMP_DATA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", __func__, NULL); /* Compress to a temp tiff g4 file */ fname = l_makeTempFilename(); if (pixWrite(fname, pixs, IFF_TIFF_G4)) { LEPT_FREE(fname); return NULL; } cid = l_generateG4Data(fname, ascii85flag); if (lept_rmfile(fname) != 0) L_ERROR("temp file %s was not deleted\n", __func__, fname); LEPT_FREE(fname); return cid; } /*! * \brief cidConvertToPdfData() * * \param[in] cid compressed image data * \param[in] title [optional] pdf title; can be null * \param[out] pdata output pdf data for image * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Caller must not destroy the cid.  It is absorbed in the
 *          lpd and destroyed by this function.
 * 
*/ l_ok cidConvertToPdfData(L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 res, ret; l_float32 wpt, hpt; L_PDF_DATA *lpd = NULL; if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", __func__, 1); *pdata = NULL; *pnbytes = 0; if (!cid) return ERROR_INT("cid not defined", __func__, 1); /* Get media box parameters, in pts */ res = cid->res; if (res <= 0) res = DefaultInputRes; wpt = cid->w * 72.f / res; hpt = cid->h * 72.f / res; /* Set up the pdf data struct (lpd) */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", __func__, 1); ptraAdd(lpd->cida, cid); lpd->n++; ptaAddPt(lpd->xy, 0, 0); /* xpt = ypt = 0 */ ptaAddPt(lpd->wh, wpt, hpt); /* Generate the pdf string and destroy the lpd */ ret = l_generatePdf(pdata, pnbytes, lpd); pdfdataDestroy(&lpd); if (ret) return ERROR_INT("pdf output not made", __func__, 1); return 0; } /*! * \brief l_CIDataDestroy() * * \param[in,out] pcid will be set to null before returning * \return void */ void l_CIDataDestroy(L_COMP_DATA **pcid) { L_COMP_DATA *cid; if (pcid == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((cid = *pcid) == NULL) return; if (cid->datacomp) LEPT_FREE(cid->datacomp); if (cid->data85) LEPT_FREE(cid->data85); if (cid->cmapdata85) LEPT_FREE(cid->cmapdata85); if (cid->cmapdatahex) LEPT_FREE(cid->cmapdatahex); LEPT_FREE(cid); *pcid = NULL; } /*---------------------------------------------------------------------* * Helper functions for generating the output pdf string * *---------------------------------------------------------------------*/ /*! * \brief l_generatePdf() * * \param[out] pdata pdf array * \param[out] pnbytes number of bytes in pdf array * \param[in] lpd all the required input image data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) On error, no data is returned.
 *      (2) The objects are:
 *            1: Catalog
 *            2: Info
 *            3: Pages
 *            4: Page
 *            5: Contents  (rendering command)
 *            6 to 6+n-1: n XObjects
 *            6+n to 6+n+m-1: m colormaps
 * 
*/ static l_int32 l_generatePdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd) { if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!lpd) return ERROR_INT("lpd not defined", __func__, 1); generateFixedStringsPdf(lpd); generateMediaboxPdf(lpd); generatePageStringPdf(lpd); generateContentStringPdf(lpd); generatePreXStringsPdf(lpd); generateColormapStringsPdf(lpd); generateTrailerPdf(lpd); return generateOutputDataPdf(pdata, pnbytes, lpd); } static void generateFixedStringsPdf(L_PDF_DATA *lpd) { char buf[L_SMALLBUF]; char *version, *datestr; SARRAY *sa; /* Accumulate data for the header and objects 1-3 */ lpd->id = stringNew("%PDF-1.5\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->id)); lpd->obj1 = stringNew("1 0 obj\n" "<<\n" "/Type /Catalog\n" "/Pages 3 0 R\n" ">>\n" "endobj\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj1)); sa = sarrayCreate(0); sarrayAddString(sa, "2 0 obj\n" "<<\n", L_COPY); if (var_WRITE_DATE_AND_VERSION) { datestr = l_getFormattedDate(); snprintf(buf, sizeof(buf), "/CreationDate (D:%s)\n", datestr); sarrayAddString(sa, buf, L_COPY); LEPT_FREE(datestr); version = getLeptonicaVersion(); snprintf(buf, sizeof(buf), "/Producer (leptonica: %s)\n", version); LEPT_FREE(version); } else { snprintf(buf, sizeof(buf), "/Producer (leptonica)\n"); } sarrayAddString(sa, buf, L_COPY); if (lpd->title) { char *hexstr; if ((hexstr = generateEscapeString(lpd->title)) != NULL) { snprintf(buf, sizeof(buf), "/Title %s\n", hexstr); sarrayAddString(sa, buf, L_COPY); } else { L_ERROR("title string is not ascii\n", __func__); } LEPT_FREE(hexstr); } sarrayAddString(sa, ">>\n" "endobj\n", L_COPY); lpd->obj2 = sarrayToString(sa, 0); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj2)); sarrayDestroy(&sa); lpd->obj3 = stringNew("3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [ 4 0 R ]\n" "/Count 1\n" ">>\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj3)); /* Do the post-datastream string */ lpd->poststream = stringNew("\n" "endstream\n" "endobj\n"); } /*! * \brief generateEscapeString() * * \param[in] str input string * \return hex escape string, or null on error * *
 * Notes:
 *      (1) If the input string is not ascii, returns null.
 *      (2) This takes an input ascii string and generates a hex
 *          ascii output string with 4 bytes out for each byte in.
 *          The feff code at the beginning tells the pdf interpreter
 *          that the data is to be interpreted as big-endian, 4 bytes
 *          at a time.  For ascii, the first two bytes are 0 and the
 *          last two bytes are less than 0x80.
 * 
*/ static char * generateEscapeString(const char *str) { char smallbuf[8]; char *buffer; l_int32 i, nchar, buflen; if (!str) return (char *)ERROR_PTR("str not defined", __func__, NULL); nchar = strlen(str); for (i = 0; i < nchar; i++) { if (str[i] < 0) return (char *)ERROR_PTR("str not all ascii", __func__, NULL); } buflen = 4 * nchar + 10; buffer = (char *)LEPT_CALLOC(buflen, sizeof(char)); stringCat(buffer, buflen, ""); return buffer; } static void generateMediaboxPdf(L_PDF_DATA *lpd) { l_int32 i; l_float32 xpt, ypt, wpt, hpt, maxx, maxy; /* First get the full extent of all the images. * This is the mediabox, in pts. */ maxx = maxy = 0; for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); maxx = L_MAX(maxx, xpt + wpt); maxy = L_MAX(maxy, ypt + hpt); } lpd->mediabox = boxCreate(0, 0, (l_int32)(maxx + 0.5), (l_int32)(maxy + 0.5)); /* ypt is in standard image coordinates: the location of * the UL image corner with respect to the UL media box corner. * Rewrite each ypt for PostScript coordinates: the location of * the LL image corner with respect to the LL media box corner. */ for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); ptaSetPt(lpd->xy, i, xpt, maxy - ypt - hpt); } } static l_int32 generatePageStringPdf(L_PDF_DATA *lpd) { char *buf; char *xstr; l_int32 bufsize, i, wpt, hpt; SARRAY *sa; /* Allocate 1000 bytes for the boilerplate text, and * 50 bytes for each reference to an image in the * ProcSet array. */ bufsize = 1000 + 50 * lpd->n; if ((buf = (char *)LEPT_CALLOC(bufsize, sizeof(char))) == NULL) return ERROR_INT("calloc fail for buf", __func__, 1); boxGetGeometry(lpd->mediabox, NULL, NULL, &wpt, &hpt); sa = sarrayCreate(lpd->n); for (i = 0; i < lpd->n; i++) { snprintf(buf, bufsize, "/Im%d %d 0 R ", i + 1, 6 + i); sarrayAddString(sa, buf, L_COPY); } xstr = sarrayToString(sa, 0); sarrayDestroy(&sa); if (!xstr) { LEPT_FREE(buf); return ERROR_INT("xstr not made", __func__, 1); } snprintf(buf, bufsize, "4 0 obj\n" "<<\n" "/Type /Page\n" "/Parent 3 0 R\n" "/MediaBox [%d %d %d %d]\n" "/Contents 5 0 R\n" "/Resources\n" "<<\n" "/XObject << %s >>\n" "/ProcSet [ /ImageB /ImageI /ImageC ]\n" ">>\n" ">>\n" "endobj\n", 0, 0, wpt, hpt, xstr); lpd->obj4 = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj4)); sarrayDestroy(&sa); LEPT_FREE(buf); LEPT_FREE(xstr); return 0; } static l_int32 generateContentStringPdf(L_PDF_DATA *lpd) { char *buf; char *cstr; l_int32 i, bufsize; l_float32 xpt, ypt, wpt, hpt; SARRAY *sa; bufsize = 1000 + 200 * lpd->n; if ((buf = (char *)LEPT_CALLOC(bufsize, sizeof(char))) == NULL) return ERROR_INT("calloc fail for buf", __func__, 1); sa = sarrayCreate(lpd->n); for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); snprintf(buf, bufsize, "q %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d Do Q\n", wpt, 0.0, 0.0, hpt, xpt, ypt, i + 1); sarrayAddString(sa, buf, L_COPY); } cstr = sarrayToString(sa, 0); sarrayDestroy(&sa); if (!cstr) { LEPT_FREE(buf); return ERROR_INT("cstr not made", __func__, 1); } snprintf(buf, bufsize, "5 0 obj\n" "<< /Length %d >>\n" "stream\n" "%s" "endstream\n" "endobj\n", (l_int32)strlen(cstr), cstr); lpd->obj5 = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj5)); sarrayDestroy(&sa); LEPT_FREE(buf); LEPT_FREE(cstr); return 0; } static l_int32 generatePreXStringsPdf(L_PDF_DATA *lpd) { char buff[256]; char buf[L_BIGBUF]; char *cstr, *bstr, *fstr, *pstr, *xstr, *photometry; l_int32 i, cmindex; L_COMP_DATA *cid; SARRAY *sa; sa = lpd->saprex; cmindex = 6 + lpd->n; /* starting value */ for (i = 0; i < lpd->n; i++) { pstr = cstr = NULL; if ((cid = pdfdataGetCid(lpd, i)) == NULL) return ERROR_INT("cid not found", __func__, 1); if (cid->type == L_G4_ENCODE) { if (var_WRITE_G4_IMAGE_MASK) { cstr = stringNew("/ImageMask true\n" "/ColorSpace /DeviceGray"); } else { cstr = stringNew("/ColorSpace /DeviceGray"); } bstr = stringNew("/BitsPerComponent 1\n" "/Interpolate true"); /* Note: the reversal is deliberate. The BlackIs1 flag * is misleadingly named: it says whether to invert the * image on decoding because the black pixels are 0, * not whether the black pixels are 1! The default for * BlackIs1 is "false", which means "don't invert because * black is 1." Yikes. */ photometry = (cid->minisblack) ? stringNew("true") : stringNew("false"); snprintf(buff, sizeof(buff), "/Filter /CCITTFaxDecode\n" "/DecodeParms\n" "<<\n" "/BlackIs1 %s\n" "/K -1\n" "/Columns %d\n" ">>", photometry, cid->w); fstr = stringNew(buff); LEPT_FREE(photometry); } else if (cid->type == L_JPEG_ENCODE) { if (cid->spp == 1) cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else if (cid->spp == 4) /* pdf supports cmyk */ cstr = stringNew("/ColorSpace /DeviceCMYK"); else L_ERROR("in jpeg: spp != 1, 3 or 4\n", __func__); bstr = stringNew("/BitsPerComponent 8"); fstr = stringNew("/Filter /DCTDecode"); } else if (cid->type == L_JP2K_ENCODE) { if (cid->spp == 1) cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else L_ERROR("in jp2k: spp != 1 && spp != 3\n", __func__); bstr = stringNew("/BitsPerComponent 8"); fstr = stringNew("/Filter /JPXDecode"); } else { /* type == L_FLATE_ENCODE */ if (cid->ncolors > 0) { /* cmapped */ snprintf(buff, sizeof(buff), "/ColorSpace %d 0 R", cmindex++); cstr = stringNew(buff); } else { if (cid->spp == 1 && cid->bps == 1) cstr = stringNew("/ColorSpace /DeviceGray\n" "/Decode [1 0]"); else if (cid->spp == 1) /* 8 bpp */ cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else L_ERROR("unknown colorspace: spp = %d\n", __func__, cid->spp); } snprintf(buff, sizeof(buff), "/BitsPerComponent %d", cid->bps); bstr = stringNew(buff); fstr = stringNew("/Filter /FlateDecode"); if (cid->predictor == TRUE) { snprintf(buff, sizeof(buff), "/DecodeParms\n" "<<\n" " /Columns %d\n" " /Predictor 14\n" " /Colors %d\n" " /BitsPerComponent %d\n" ">>\n", cid->w, cid->spp, cid->bps); pstr = stringNew(buff); } } if (!pstr) /* no decode parameters */ pstr = stringNew(""); snprintf(buf, sizeof(buf), "%d 0 obj\n" "<<\n" "/Length %zu\n" "/Subtype /Image\n" "%s\n" /* colorspace */ "/Width %d\n" "/Height %d\n" "%s\n" /* bits/component */ "%s\n" /* filter */ "%s" /* decode parms; can be empty */ ">>\n" "stream\n", 6 + i, cid->nbytescomp, cstr, cid->w, cid->h, bstr, fstr, pstr); xstr = stringNew(buf); sarrayAddString(sa, xstr, L_INSERT); l_dnaAddNumber(lpd->objsize, strlen(xstr) + cid->nbytescomp + strlen(lpd->poststream)); LEPT_FREE(cstr); LEPT_FREE(bstr); LEPT_FREE(fstr); LEPT_FREE(pstr); } return 0; } static l_int32 generateColormapStringsPdf(L_PDF_DATA *lpd) { char buf[L_BIGBUF]; char *cmstr; l_int32 i, cmindex, ncmap; L_COMP_DATA *cid; SARRAY *sa; /* In our canonical format, we have 5 objects, followed * by n XObjects, followed by m colormaps, so the index of * the first colormap object is 6 + n. */ sa = lpd->sacmap; cmindex = 6 + lpd->n; /* starting value */ ncmap = 0; for (i = 0; i < lpd->n; i++) { if ((cid = pdfdataGetCid(lpd, i)) == NULL) return ERROR_INT("cid not found", __func__, 1); if (cid->ncolors == 0) continue; ncmap++; snprintf(buf, sizeof(buf), "%d 0 obj\n" "[ /Indexed /DeviceRGB\n" "%d\n" "%s\n" "]\n" "endobj\n", cmindex, cid->ncolors - 1, cid->cmapdatahex); cmindex++; cmstr = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(cmstr)); sarrayAddString(sa, cmstr, L_INSERT); } lpd->ncmap = ncmap; return 0; } static void generateTrailerPdf(L_PDF_DATA *lpd) { l_int32 i, n, size, linestart; L_DNA *daloc, *dasize; /* Let nobj be the number of numbered objects. These numbered * objects are indexed by their pdf number in arrays naloc[] * and nasize[]. The 0th object is the 9 byte header. Then * the number of objects in nasize, which includes the header, * is n = nobj + 1. The array naloc[] has n + 1 elements, * because it includes as the last element the starting * location of xref. The indexing of these objects, their * starting locations and sizes are: * * Object number Starting location Size * ------------- ----------------- -------------- * 0 daloc[0] = 0 dasize[0] = 9 * 1 daloc[1] = 9 dasize[1] = 49 * n daloc[n] dasize[n] * xref daloc[n+1] * * We first generate daloc. */ dasize = lpd->objsize; daloc = lpd->objloc; linestart = 0; l_dnaAddNumber(daloc, linestart); /* header */ n = l_dnaGetCount(dasize); for (i = 0; i < n; i++) { l_dnaGetIValue(dasize, i, &size); linestart += size; l_dnaAddNumber(daloc, linestart); } l_dnaGetIValue(daloc, n, &lpd->xrefloc); /* save it */ /* Now make the actual trailer string */ lpd->trailer = makeTrailerStringPdf(daloc); } static char * makeTrailerStringPdf(L_DNA *daloc) { char *outstr; char buf[L_BIGBUF]; l_int32 i, n, linestart, xrefloc; SARRAY *sa; if (!daloc) return (char *)ERROR_PTR("daloc not defined", __func__, NULL); n = l_dnaGetCount(daloc) - 1; /* numbered objects + 1 (yes, +1) */ sa = sarrayCreate(0); snprintf(buf, sizeof(buf), "xref\n" "0 %d\n" "0000000000 65535 f \n", n); sarrayAddString(sa, buf, L_COPY); for (i = 1; i < n; i++) { l_dnaGetIValue(daloc, i, &linestart); snprintf(buf, sizeof(buf), "%010d 00000 n \n", linestart); sarrayAddString(sa, buf, L_COPY); } l_dnaGetIValue(daloc, n, &xrefloc); snprintf(buf, sizeof(buf), "trailer\n" "<<\n" "/Size %d\n" "/Root 1 0 R\n" "/Info 2 0 R\n" ">>\n" "startxref\n" "%d\n" "%%%%EOF\n", n, xrefloc); sarrayAddString(sa, buf, L_COPY); outstr = sarrayToString(sa, 0); sarrayDestroy(&sa); return outstr; } /*! * \brief generateOutputDataPdf() * * \param[out] pdata pdf data array * \param[out] pnbytes size of pdf data array * \param[in] lpd input data used to make pdf * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Only called from l_generatePdf().  On error, no data is returned.
 * 
*/ static l_int32 generateOutputDataPdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd) { char *str; l_uint8 *data; l_int32 nimages, i, len; l_int32 *sizes, *locs; size_t nbytes; L_COMP_DATA *cid; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); nbytes = lpd->xrefloc + strlen(lpd->trailer); *pnbytes = nbytes; if ((data = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) return ERROR_INT("calloc fail for data", __func__, 1); *pdata = data; sizes = l_dnaGetIArray(lpd->objsize); locs = l_dnaGetIArray(lpd->objloc); memcpy(data, lpd->id, sizes[0]); memcpy(data + locs[1], lpd->obj1, sizes[1]); memcpy(data + locs[2], lpd->obj2, sizes[2]); memcpy(data + locs[3], lpd->obj3, sizes[3]); memcpy(data + locs[4], lpd->obj4, sizes[4]); memcpy(data + locs[5], lpd->obj5, sizes[5]); /* Each image has 3 parts: variable preamble, the compressed * data stream, and the fixed poststream. */ nimages = lpd->n; for (i = 0; i < nimages; i++) { if ((cid = pdfdataGetCid(lpd, i)) == NULL) { /* should not happen */ LEPT_FREE(sizes); LEPT_FREE(locs); return ERROR_INT("cid not found", __func__, 1); } str = sarrayGetString(lpd->saprex, i, L_NOCOPY); len = strlen(str); memcpy(data + locs[6 + i], str, len); memcpy(data + locs[6 + i] + len, cid->datacomp, cid->nbytescomp); memcpy(data + locs[6 + i] + len + cid->nbytescomp, lpd->poststream, strlen(lpd->poststream)); } /* Each colormap is simply a stored string */ for (i = 0; i < lpd->ncmap; i++) { str = sarrayGetString(lpd->sacmap, i, L_NOCOPY); memcpy(data + locs[6 + nimages + i], str, strlen(str)); } /* And finally the trailer */ memcpy(data + lpd->xrefloc, lpd->trailer, strlen(lpd->trailer)); LEPT_FREE(sizes); LEPT_FREE(locs); return 0; } /*---------------------------------------------------------------------* * Helper functions for generating multipage pdf output * *---------------------------------------------------------------------*/ /*! * \brief parseTrailerPdf() * * \param[in] bas lba of a pdf file * \param[out] pda byte locations of the beginning of each object * \return 0 if OK, 1 on error */ static l_int32 parseTrailerPdf(L_BYTEA *bas, L_DNA **pda) { char *str; l_uint8 nl = '\n'; l_uint8 *data; l_int32 i, j, start, startloc, xrefloc, found, loc, nobj, objno, trailer_ok; size_t size; L_DNA *da, *daobj, *daxref; SARRAY *sa; if (!pda) return ERROR_INT("&da not defined", __func__, 1); *pda = NULL; if (!bas) return ERROR_INT("bas not defined", __func__, 1); data = l_byteaGetData(bas, &size); if (memcmp(data, "%PDF-1.", 7) != 0) return ERROR_INT("PDF header signature not found", __func__, 1); /* Search for "startxref" starting 50 bytes from the EOF */ start = 0; if (size > 50) start = size - 50; arrayFindSequence(data + start, size - start, (l_uint8 *)"startxref\n", 10, &loc, &found); if (!found) return ERROR_INT("startxref not found!", __func__, 1); if (sscanf((char *)(data + start + loc + 10), "%d\n", &xrefloc) != 1) return ERROR_INT("xrefloc not found!", __func__, 1); if (xrefloc < 0 || xrefloc >= size) return ERROR_INT("invalid xrefloc!", __func__, 1); sa = sarrayCreateLinesFromString((char *)(data + xrefloc), 0); str = sarrayGetString(sa, 1, L_NOCOPY); if ((sscanf(str, "0 %d", &nobj)) != 1) { sarrayDestroy(&sa); return ERROR_INT("nobj not found", __func__, 1); } /* Get starting locations. The numa index is the * object number. loc[0] is the ID; loc[nobj + 1] is xrefloc. */ da = l_dnaCreate(nobj + 1); *pda = da; for (i = 0; i < nobj; i++) { str = sarrayGetString(sa, i + 2, L_NOCOPY); sscanf(str, "%d", &startloc); l_dnaAddNumber(da, startloc); } l_dnaAddNumber(da, xrefloc); #if DEBUG_MULTIPAGE lept_stderr("************** Trailer string ************\n"); lept_stderr("xrefloc = %d", xrefloc); sarrayWriteStderr(sa); lept_stderr("************** Object locations ************"); l_dnaWriteStderr(da); #endif /* DEBUG_MULTIPAGE */ sarrayDestroy(&sa); /* Verify correct parsing */ trailer_ok = TRUE; for (i = 1; i < nobj; i++) { l_dnaGetIValue(da, i, &startloc); if ((sscanf((char *)(data + startloc), "%d 0 obj", &objno)) != 1) { L_ERROR("bad trailer for object %d\n", __func__, i); trailer_ok = FALSE; break; } } /* If the trailer is broken, reconstruct the correct obj locations */ if (!trailer_ok) { L_INFO("rebuilding pdf trailer\n", __func__); l_dnaEmpty(da); l_dnaAddNumber(da, 0); l_byteaFindEachSequence(bas, (l_uint8 *)" 0 obj\n", 7, &daobj); nobj = l_dnaGetCount(daobj); for (i = 0; i < nobj; i++) { l_dnaGetIValue(daobj, i, &loc); for (j = loc - 1; j > 0; j--) { if (data[j] == nl) break; } l_dnaAddNumber(da, j + 1); } l_byteaFindEachSequence(bas, (l_uint8 *)"xref", 4, &daxref); l_dnaGetIValue(daxref, 0, &loc); l_dnaAddNumber(da, loc); l_dnaDestroy(&daobj); l_dnaDestroy(&daxref); } return 0; } static char * generatePagesObjStringPdf(NUMA *napage) { char *str; char *buf; l_int32 i, n, index, bufsize; SARRAY *sa; if (!napage) return (char *)ERROR_PTR("napage not defined", __func__, NULL); n = numaGetCount(napage); bufsize = 100 + 16 * n; /* large enough to hold the output string */ buf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); sa = sarrayCreate(n); for (i = 0; i < n; i++) { numaGetIValue(napage, i, &index); snprintf(buf, bufsize, " %d 0 R ", index); sarrayAddString(sa, buf, L_COPY); } str = sarrayToString(sa, 0); snprintf(buf, bufsize - 1, "3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [%s]\n" "/Count %d\n" ">>\n" "endobj\n", str, n); sarrayDestroy(&sa); LEPT_FREE(str); return buf; } /*! * \brief substituteObjectNumbers() * * \param[in] bas lba of a pdf object * \param[in] na_objs object number mapping array * \return bad lba of rewritten pdf for the object * *
 * Notes:
 *      (1) Interpret the first set of bytes as the object number,
 *          map to the new number, and write it out.
 *      (2) Find all occurrences of this 4-byte sequence: " 0 R"
 *      (3) Find the location and value of the integer preceding this,
 *          and map it to the new value.
 *      (4) Rewrite the object with new object numbers.
 * 
*/ static L_BYTEA * substituteObjectNumbers(L_BYTEA *bas, NUMA *na_objs) { l_uint8 space = ' '; l_uint8 *datas; l_uint8 buf[32]; /* only needs to hold one integer in ascii format */ l_int32 start, nrepl, i, j, nobjs, objin, objout, found; l_int32 *objs, *matches; size_t size; L_BYTEA *bad; L_DNA *da_match; if (!bas) return (L_BYTEA *)ERROR_PTR("bas not defined", __func__, NULL); if (!na_objs) return (L_BYTEA *)ERROR_PTR("na_objs not defined", __func__, NULL); datas = l_byteaGetData(bas, &size); bad = l_byteaCreate(100); objs = numaGetIArray(na_objs); /* object number mapper */ nobjs = numaGetCount(na_objs); /* use for sanity checking */ /* Substitute the object number on the first line */ sscanf((char *)datas, "%d", &objin); if (objin < 0 || objin >= nobjs) { L_ERROR("index %d into array of size %d\n", __func__, objin, nobjs); LEPT_FREE(objs); return bad; } objout = objs[objin]; snprintf((char *)buf, 32, "%d", objout); l_byteaAppendString(bad, (char *)buf); /* Find the set of matching locations for object references */ arrayFindSequence(datas, size, &space, 1, &start, &found); da_match = arrayFindEachSequence(datas, size, (l_uint8 *)" 0 R", 4); if (!da_match) { l_byteaAppendData(bad, datas + start, size - start); LEPT_FREE(objs); return bad; } /* Substitute all the object reference numbers */ nrepl = l_dnaGetCount(da_match); matches = l_dnaGetIArray(da_match); for (i = 0; i < nrepl; i++) { /* Find the first space before the object number */ for (j = matches[i] - 1; j > 0; j--) { if (datas[j] == space) break; } /* Copy bytes from 'start' up to the object number */ l_byteaAppendData(bad, datas + start, j - start + 1); sscanf((char *)(datas + j + 1), "%d", &objin); if (objin < 0 || objin >= nobjs) { L_ERROR("index %d into array of size %d\n", __func__, objin, nobjs); LEPT_FREE(objs); LEPT_FREE(matches); l_dnaDestroy(&da_match); return bad; } objout = objs[objin]; snprintf((char *)buf, 32, "%d", objout); l_byteaAppendString(bad, (char *)buf); start = matches[i]; } l_byteaAppendData(bad, datas + start, size - start); LEPT_FREE(objs); LEPT_FREE(matches); l_dnaDestroy(&da_match); return bad; } /*---------------------------------------------------------------------* * Create/destroy/access pdf data * *---------------------------------------------------------------------*/ static L_PDF_DATA * pdfdataCreate(const char *title) { L_PDF_DATA *lpd; lpd = (L_PDF_DATA *)LEPT_CALLOC(1, sizeof(L_PDF_DATA)); if (title) lpd->title = stringNew(title); lpd->cida = ptraCreate(10); lpd->xy = ptaCreate(10); lpd->wh = ptaCreate(10); lpd->saprex = sarrayCreate(10); lpd->sacmap = sarrayCreate(10); lpd->objsize = l_dnaCreate(20); lpd->objloc = l_dnaCreate(20); return lpd; } static void pdfdataDestroy(L_PDF_DATA **plpd) { l_int32 i; L_COMP_DATA *cid; L_PDF_DATA *lpd; if (plpd== NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((lpd = *plpd) == NULL) return; if (lpd->title) LEPT_FREE(lpd->title); for (i = 0; i < lpd->n; i++) { cid = (L_COMP_DATA *)ptraRemove(lpd->cida, i, L_NO_COMPACTION); l_CIDataDestroy(&cid); } ptraDestroy(&lpd->cida, 0, 0); if (lpd->id) LEPT_FREE(lpd->id); if (lpd->obj1) LEPT_FREE(lpd->obj1); if (lpd->obj2) LEPT_FREE(lpd->obj2); if (lpd->obj3) LEPT_FREE(lpd->obj3); if (lpd->obj4) LEPT_FREE(lpd->obj4); if (lpd->obj5) LEPT_FREE(lpd->obj5); if (lpd->poststream) LEPT_FREE(lpd->poststream); if (lpd->trailer) LEPT_FREE(lpd->trailer); if (lpd->xy) ptaDestroy(&lpd->xy); if (lpd->wh) ptaDestroy(&lpd->wh); if (lpd->mediabox) boxDestroy(&lpd->mediabox); if (lpd->saprex) sarrayDestroy(&lpd->saprex); if (lpd->sacmap) sarrayDestroy(&lpd->sacmap); if (lpd->objsize) l_dnaDestroy(&lpd->objsize); if (lpd->objloc) l_dnaDestroy(&lpd->objloc); LEPT_FREE(lpd); *plpd = NULL; } static L_COMP_DATA * pdfdataGetCid(L_PDF_DATA *lpd, l_int32 index) { if (!lpd) return (L_COMP_DATA *)ERROR_PTR("lpd not defined", __func__, NULL); if (index < 0 || index >= lpd->n) return (L_COMP_DATA *)ERROR_PTR("invalid image index", __func__, NULL); return (L_COMP_DATA *)ptraGetPtrToItem(lpd->cida, index); } /*---------------------------------------------------------------------* * Find number of pages in a pdf * *---------------------------------------------------------------------*/ /*! * \brief getPdfPageCount() * * \param[in] fname filename * \param[out] pnpages number of pages * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Looks for the argument of the first instance of /Count in the file.
 *      (2) This first reads 10000 bytes from the beginning of the file.
 *          If "/Count" is not in that string, it reads the entire file
 *          and looks for "/Count".
 *      (3) This will not work on encrypted pdf files or on files where
 *          the "/Count" field is binary compressed.  Not finding the
 *          "/Count" field is not an error, but a warning is given.
 * 
*/ l_ok getPdfPageCount(const char *fname, l_int32 *pnpages) { l_uint8 *data; l_int32 format, loc, ret, npages, found; size_t nread; if (!pnpages) return ERROR_INT("&npages not defined", __func__, 1); *pnpages = 0; if (!fname) return ERROR_INT("fname not defined", __func__, 1); /* Make sure this a pdf file */ findFileFormat(fname, &format); if (format != IFF_LPDF) return ERROR_INT("file is not pdf", __func__, 1); /* Read 10000 bytes from the beginning of the file */ if ((data = l_binaryReadSelect(fname, 0, 10000, &nread)) == NULL) return ERROR_INT("partial data not read", __func__, 1); /* Find the location of the first instance of "/Count". * If it is not found, try reading the entire file and * looking again. */ arrayFindSequence(data, nread, (const l_uint8 *)"/Count", strlen("/Count"), &loc, &found); if (!found) { lept_stderr("Reading entire file looking for '/Count'\n"); LEPT_FREE(data); if ((data = l_binaryRead(fname, &nread)) == NULL) return ERROR_INT("full data not read", __func__, 1); arrayFindSequence(data, nread, (const l_uint8 *)"/Count", strlen("/Count"), &loc, &found); if (!found) { LEPT_FREE(data); L_WARNING("/Count not found\n", __func__); return 0; } } /* Unlikely: make sure we can read the count field */ if (nread - loc < 12) { /* haven't read enough to capture page count */ LEPT_FREE(data); return ERROR_INT("data may not include page count field", __func__, 1); } /* Read the page count; if not found, puts garbage in npages */ ret = sscanf((char *)&data[loc], "/Count %d", &npages); LEPT_FREE(data); if (ret != 1) return ERROR_INT("npages not found", __func__, 1); *pnpages = npages; /* lept_stderr("bytes read = %d, loc = %d, npages = %d\n", nread, loc, *pnpages); */ return 0; } /*---------------------------------------------------------------------* * Find widths and heights of pages and media boxes in a pdf * *---------------------------------------------------------------------*/ /*! * \brief getPdfPageSizes() * * \param[in] fname filename * \param[out] pnaw [optional] array of page widths * \param[out] pnah [optional] array of page heights * \param[out] pmedw [optional] median page width * \param[out] pmedh [optional] median page height * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Finds the arguments of each instance of '/Width' and '/Height'
 *          in the file.
 *      (2) This will not work on encrypted pdf files or on files where
 *          the "/Width" and "/Height" fields are binary compressed.
 *          Not finding the "/Width" and /Height" fields is not an error,
 *          but a warning is given.
 * 
*/ l_ok getPdfPageSizes(const char *fname, NUMA **pnaw, NUMA **pnah, l_int32 *pmedw, l_int32 *pmedh) { l_uint8 *data; l_int32 i, nw, nh, format, ret, loc, width, height; l_float32 fval; size_t nread; L_DNA *dnaw; /* width locations */ L_DNA *dnah; /* height locations */ NUMA *naw; /* widths */ NUMA *nah; /* heights */ if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (pmedw) *pmedw = 0; if (pmedh) *pmedh = 0; if (!pnaw && !pnah && !pmedw && !pmedh) return ERROR_INT("no output requested", __func__, 1); if (!fname) return ERROR_INT("fname not defined", __func__, 1); /* Make sure this a pdf file */ findFileFormat(fname, &format); if (format != IFF_LPDF) return ERROR_INT("file is not pdf", __func__, 1); /* Read the file into memory and find all locations of * '/Width' and '/Height' */ if ((data = l_binaryRead(fname, &nread)) == NULL) return ERROR_INT("full data not read", __func__, 1); dnaw = arrayFindEachSequence(data, nread, (const l_uint8 *)"/Width", strlen("/Width")); dnah = arrayFindEachSequence(data, nread, (const l_uint8 *)"/Height", strlen("/Height")); if (!dnaw) L_WARNING("unable to find widths\n", __func__); if (!dnah) L_WARNING("unable to find heights\n", __func__); if (!dnaw && !dnah) { LEPT_FREE(data); L_WARNING("no fields found\n", __func__); return 0; } /* Find the page widths and heights */ nw = l_dnaGetCount(dnaw); naw = numaCreate(nw); for (i = 0; i < nw; i++) { l_dnaGetIValue(dnaw, i, &loc); ret = sscanf((char *)&data[loc], "/Width %d", &width); if (ret != 1) { L_ERROR("width not found for item %d at loc %d\n", __func__, i, loc); continue; } numaAddNumber(naw, width); } nh = l_dnaGetCount(dnah); nah = numaCreate(nh); for (i = 0; i < nh; i++) { l_dnaGetIValue(dnah, i, &loc); ret = sscanf((char *)&data[loc], "/Height %d", &height); if (ret != 1) { L_ERROR("height not found for item %d at loc %d\n", __func__, i, loc); continue; } numaAddNumber(nah, height); } LEPT_FREE(data); l_dnaDestroy(&dnaw); l_dnaDestroy(&dnah); if (pmedw) { numaGetMedian(naw, &fval); *pmedw = lept_roundftoi(fval); } if (pnaw) *pnaw = naw; else numaDestroy(&naw); if (pmedh) { numaGetMedian(nah, &fval); *pmedh = lept_roundftoi(fval); } if (pnah) *pnah = nah; else numaDestroy(&nah); return 0; } /*! * \brief getPdfMediaBoxSizes() * * \param[in] fname filename * \param[out] pnaw [optional] array of mediabox widths * \param[out] pnah [optional] array of mediabox heights * \param[out] pmedw [optional] median mediabox width * \param[out] pmedh [optional] median mediabox height * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Finds the arguments of each instance of '/MediaBox' in the file.
 *      (2) This will not work on encrypted pdf files or on files where
 *          the "/MediaBoxes" field is binary compressed.  Not finding
 *          the "/MediaBoxes" field is not an error, but a warning is given.
 *      (3) This is useful for determining if the media boxes are
 *          incorrectly assigned, such as assuming the resolution is 72 ppi.
 *          If that happens and the input the the renderer assumes the
 *          resolution is 300 ppi, the rendered images will be over 4x too
 *          large in each dimension.
 *      (4) An image dimension of 11 inches corresponds to a MediaBox
 *          parameter of 792.  We consider a value > 850 to be oversized
 *          and not to be taken literally.
 * 
*/ l_ok getPdfMediaBoxSizes(const char *fname, NUMA **pnaw, NUMA **pnah, l_int32 *pmedw, l_int32 *pmedh) { l_uint8 *data; l_int32 i, n, format, ret, loc; l_float32 fval, ignore1, ignore2, w, h; size_t nread; L_DNA *dna; /* mediabox locations */ NUMA *naw; /* mediabox widths */ NUMA *nah; /* mediabox heights */ if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (pmedw) *pmedw = 0; if (pmedh) *pmedh = 0; if (!pnaw && !pnah && !pmedw && !pmedh) return ERROR_INT("no output requested", __func__, 1); if (!fname) return ERROR_INT("fname not defined", __func__, 1); /* Make sure this a pdf file */ findFileFormat(fname, &format); if (format != IFF_LPDF) return ERROR_INT("file is not pdf", __func__, 1); /* Read the file into memory and find all locations of '/MediaBox' */ if ((data = l_binaryRead(fname, &nread)) == NULL) return ERROR_INT("full data not read", __func__, 1); dna = arrayFindEachSequence(data, nread, (const l_uint8 *)"/MediaBox", strlen("/MediaBox")); if (!dna) { LEPT_FREE(data); L_WARNING("no mediaboxes found\n", __func__); return 1; } /* Find the mediabox widths and heights */ n = l_dnaGetCount(dna); naw = numaCreate(n); nah = numaCreate(n); for (i = 0; i < n; i++) { l_dnaGetIValue(dna, i, &loc); ret = sscanf((char *)&data[loc], "/MediaBox [ %f %f %f %f", &ignore1, &ignore2, &w, &h); if (ret != 4) { L_ERROR("mediabox sizes not found for item %d at loc %d\n", __func__, i, loc); continue; } numaAddNumber(naw, w); numaAddNumber(nah, h); } LEPT_FREE(data); l_dnaDestroy(&dna); if (pmedw) { numaGetMedian(naw, &fval); *pmedw = lept_roundftoi(fval); if (*pmedw > 850) lept_stderr("oversize width: %d\n", *pmedw); } if (pnaw) *pnaw = naw; else numaDestroy(&naw); if (pmedh) { numaGetMedian(nah, &fval); *pmedh = lept_roundftoi(fval); if (*pmedh > 850) lept_stderr("oversize height: %d\n", *pmedh); } if (pnah) *pnah = nah; else numaDestroy(&nah); return 0; } /*---------------------------------------------------------------------* * Find effective resolution of images rendered from a pdf * *---------------------------------------------------------------------*/ /*! * \brief getPdfRendererResolution() * * \param[in] infile filename of input pdf file * \param[in] outdir directory of rendered output images * \param[out] pres desired resolution to use with renderer * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Finds the input resolution to pdftoppm that will generate
 *          images with a maximum dimension of about 3300 pixels,
 *          representing a full page at 300 ppi.
 *      (2) It is most important is to make sure the renderer does
 *          not make huge images because of an error in /MediaBox.
 *          An image dimension of 11 inches corresponds to a MediaBox
 *          parameter of 792.  We consider a value > 850 to be oversized
 *          and not to be taken literally.  If the mediaboxes are
 *          oversized, choose an appropriate lower resolution.
 *      (3) If the mediaboxes are not accessible, render an image at
 *          a low known resolution (say, 72 ppi) and based on the image
 *          size, determine the resolution necessary to make an image
 *          with 3300 pixels in the largest dimension.
 *      (4) Requires pdftoppm, so this is disabled on windows for now.
 *      (5) Requires the ability to call an external program, so it is
 *          necessary to call setLeptDebugOK(1) before this function.
 * 
*/ l_ok getPdfRendererResolution(const char *infile, const char *outdir, l_int32 *pres) { char buf[256]; char *tail, *basename, *fname; l_int32 ret, res, medw, medh, medmax, npages, pageno, w, h; SARRAY *sa; if (!pres) return ERROR_INT("&res not defined", __func__, 1); *pres = 300; /* default */ #ifdef _WIN32 L_INFO("Requires pdftoppm, so this is disabled on windows.\n" "Returns default resolution 300 ppi", __func__); return 0; #endif /* _WIN32 */ if (!LeptDebugOK) { L_INFO("Running pdftoppm is disabled; " "use setLeptDebugOK(1) to enable\n" "returns default resolution 300 ppi\n", __func__); return 1; } if (!infile) return ERROR_INT("infile not defined", __func__, 1); if (!outdir) return ERROR_INT("outdir not defined", __func__, 1); res = 300; /* default value */ ret = getPdfMediaBoxSizes(infile, NULL, NULL, &medw, &medh); if (ret == 0) { /* Check for oversize mediaboxes */ lept_stderr("Media Box medians: medw = %d, medh = %d\n", medw, medh); medmax = L_MAX(medw, medh); if (medmax > 850) { res = 300 * ((l_float32)792 / (l_float32)medmax); lept_stderr(" Oversize media box; use resolution = %d\n", res); *pres = res; } return 0; } /* No mediaboxes; render one page and measure the max dimension */ lept_stderr("Media Box dimensions not found\n"); getPdfPageCount(infile, &npages); pageno = (npages > 0) ? (npages + 1) / 2 : 1; splitPathAtDirectory(infile, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); snprintf(buf, sizeof(buf), "pdftoppm -f %d -l %d -r 72 %s %s/%s", pageno, pageno, infile, outdir, basename); LEPT_FREE(tail); LEPT_FREE(basename); callSystemDebug(buf); /* pdftoppm */ /* Get the page size */ sa = getSortedPathnamesInDirectory(outdir, NULL, 0, 0); fname = sarrayGetString(sa, 0, L_NOCOPY); pixReadHeader(fname, NULL, &w, &h, NULL, NULL, NULL); sarrayDestroy(&sa); if (w > 0 && h > 0) { res = L_MIN((72 * 3300 / L_MAX(w, h)), 600); *pres = res; lept_stderr("Use resolution = %d\n", res); } else { L_ERROR("page size not found; assuming res = 300\n", __func__); } return 0; } /*---------------------------------------------------------------------* * Set flags for special modes * *---------------------------------------------------------------------*/ /*! * \brief l_pdfSetG4ImageMask() * * \param[in] flag 1 for writing g4 data as fg only through a mask; * 0 for writing fg and bg * \return void * *
 * Notes:
 *      (1) The default is for writing only the fg (through the mask).
 *          That way when you write a 1 bpp image, the bg is transparent,
 *          so any previously written image remains visible behind it.
 * 
*/ void l_pdfSetG4ImageMask(l_int32 flag) { var_WRITE_G4_IMAGE_MASK = flag; } /*! * \brief l_pdfSetDateAndVersion() * * \param[in] flag 1 for writing date/time and leptonica version; * 0 for omitting this from the metadata * \return void * *
 * Notes:
 *      (1) The default is for writing this data.  For regression tests
 *          that compare output against golden files, it is useful to omit.
 * 
*/ void l_pdfSetDateAndVersion(l_int32 flag) { var_WRITE_DATE_AND_VERSION = flag; } /* --------------------------------------------*/ #endif /* USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pdfio2stub.c000066400000000000000000000132231506303110300165710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pdfio2stub.c *
 *
 *     Stubs for pdfio2.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* ----------------------------------------------------------------------*/ l_ok pixConvertToPdfData(PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok ptraConcatenatePdfToData(L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertTiffMultipageToPdf(const char *filein, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok l_generateCIDataForPdf(const char *fname, PIX *pix, l_int32 quality, L_COMP_DATA **pcid) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateFlateDataPdf(const char *fname, PIX *pix) { return (L_COMP_DATA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateJpegData(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateJpegDataMem(l_uint8 *data, size_t nbytes, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok l_generateCIData(const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixGenerateCIData(PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateFlateData(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateG4Data(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok cidConvertToPdfData(L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ void l_CIDataDestroy(L_COMP_DATA **pcid) { L_ERROR("function not present\n", __func__); return; } /* ----------------------------------------------------------------------*/ void l_pdfSetG4ImageMask(l_int32 flag) { L_ERROR("function not present\n", __func__); return; } /* ----------------------------------------------------------------------*/ void l_pdfSetDateAndVersion(l_int32 flag) { L_ERROR("function not present\n", __func__); return; } /* ----------------------------------------------------------------------*/ /* --------------------------------------------*/ #endif /* !USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pix.h000066400000000000000000001506411506303110300153230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_PIX_H #define LEPTONICA_PIX_H /*! * \file pix.h * *
 *   Valid image types in leptonica:
 *       Pix: 1 bpp, with and without colormap
 *       Pix: 2 bpp, with and without colormap
 *       Pix: 4 bpp, with and without colormap
 *       Pix: 8 bpp, with and without colormap
 *       Pix: 16 bpp (1 spp)
 *       Pix: 32 bpp (rgb, 3 spp)
 *       Pix: 32 bpp (rgba, 4 spp)
 *       FPix: 32 bpp float
 *       DPix: 64 bpp double
 *       Notes:
 *          (1) The only valid Pix image type with alpha is rgba.
 *              In particular, the alpha component is not used in
 *              cmapped images.
 *          (2) PixComp can hold any Pix with IFF_PNG encoding.
 *
 *   Contents:
 *
 *   (1) This file has typedefs for most of the image-related structs
 *       used in leptonica:
 *         struct Pix
 *         struct PixColormap
 *         struct RGBA_Quad
 *         struct Pixa
 *         struct Pixaa
 *         struct Box
 *         struct Boxa
 *         struct Boxaa
 *         struct Pta
 *         struct Ptaa
 *         struct Pixacc
 *         struct PixTiling
 *         struct FPix
 *         struct FPixa
 *         struct DPix
 *         struct PixComp
 *         struct PixaComp
 *
 *   (2) This file has definitions for:
 *         Colors for RGBA
 *         Colors for drawing boxes
 *         Perceptual color weights
 *         Colormap conversion flags
 *         Rasterop bit flags
 *         Structure access flags (for insert, copy, clone, copy-clone)
 *         Sorting flags (by type and direction)
 *         Blending flags
 *         Graphics pixel setting flags
 *         Size and location filter flags
 *         Color component selection flags
 *         Color content flags
 *         16-bit conversion flags
 *         Rotation and shear flags
 *         Affine transform order flags
 *         Grayscale filling flags
 *         Flags for setting to white or black
 *         Flags for getting white or black pixel value
 *         Flags for 8 and 16 bit pixel sums
 *         Dithering flags
 *         Distance flags
 *         Value flags
 *         Statistical measures
 *         Set selection flags
 *         Text orientation flags
 *         Edge orientation flags
 *         Line orientation flags
 *         Image orientation flags
 *         Scan direction flags
 *         Box size adjustment flags
 *         Flags for modifying box boundaries using a second box
 *         Handling overlapping bounding boxes in boxa
 *         Selecting or making a box from two (intersecting) boxes
 *         Flags for replacing invalid boxes
 *         Flags for box corners and center
 *         Horizontal warp
 *         Pixel selection for resampling
 *         Thinning flags
 *         Runlength flags
 *         Edge filter flags
 *         Subpixel color component ordering in LCD display
 *         HSV histogram flags
 *         Region flags (inclusion, exclusion)
 *         Flags for adding text to a pix
 *         Flags for plotting on a pix
 *         Flags for making simple masks
 *         Flags for selecting display program
 *         Flags in the 'special' pix field for non-default operations
 *         Handling negative values in conversion to unsigned int
 *         Relative to zero flags
 *         Flags for adding or removing trailing slash from string
 *
 *   (3) This file has typedefs for the pix allocator and deallocator functions
 *         alloc_fn()
 *         dealloc_fn().
 *
 *   -------------------------------------------------------------------
 *   Notes on the pixels in the raster image.  This information can also
 *   be found in pix_internal.h.
 *
 *       (1) The image data is stored in a single contiguous
 *           array of l_uint32, into which the pixels are packed.
 *           By "packed" we mean that there are no unused bits
 *           between pixels, except for end-of-line padding to
 *           satisfy item (2) below.
 *
 *       (2) Every image raster line begins on a 32-bit word
 *           boundary within this array.
 *
 *       (3) Pix image data is stored in 32-bit units, with the
 *           pixels ordered from left to right in the image being
 *           stored in order from the MSB to LSB within the word,
 *           for both big-endian and little-endian machines.
 *           This is the natural ordering for big-endian machines,
 *           as successive bytes are stored and fetched progressively
 *           to the right.  However, for little-endians, when storing
 *           we re-order the bytes from this byte stream order, and
 *           reshuffle again for byte access on 32-bit entities.
 *           So if the bytes come in sequence from left to right, we
 *           store them on little-endians in byte order:
 *                3 2 1 0 7 6 5 4 ...
 *           This MSB to LSB ordering allows left and right shift
 *           operations on 32 bit words to move the pixels properly.
 *
 *       (4) We use 32 bit pixels for both RGB and RGBA color images.
 *           The A (alpha) byte is ignored in most leptonica functions
 *           operating on color images.  Within each 4 byte pixel, the
 *           color samples are ordered from MSB to LSB, as follows:
 *
 *                |  MSB  |  2nd MSB  |  3rd MSB  |  LSB  |
 *                   red      green       blue      alpha
 *                    0         1           2         3   (big-endian)
 *                    3         2           1         0   (little-endian)
 *
 *           Because we use MSB to LSB ordering within the 32-bit word,
 *           the individual 8-bit samples can be accessed with
 *           GET_DATA_BYTE and SET_DATA_BYTE macros, using the
 *           (implicitly big-ending) ordering
 *                 red:    byte 0  (MSB)
 *                 green:  byte 1  (2nd MSB)
 *                 blue:   byte 2  (3rd MSB)
 *                 alpha:  byte 3  (LSB)
 *
 *           The specific color assignment is made in this file,
 *           through the definitions of COLOR_RED, etc.  Then the R, G
 *           B and A sample values can be retrieved using
 *                 redval = GET_DATA_BYTE(&pixel, COLOR_RED);
 *                 greenval = GET_DATA_BYTE(&pixel, COLOR_GREEN);
 *                 blueval = GET_DATA_BYTE(&pixel, COLOR_BLUE);
 *                 alphaval = GET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL);
 *           and they can be set with
 *                 SET_DATA_BYTE(&pixel, COLOR_RED, redval);
 *                 SET_DATA_BYTE(&pixel, COLOR_GREEN, greenval);
 *                 SET_DATA_BYTE(&pixel, COLOR_BLUE, blueval);
 *                 SET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL, alphaval);
 *
 *           More efficiently, these components can be extracted directly
 *           by shifting and masking, explicitly using the values in
 *           L_RED_SHIFT, etc.:
 *                 (pixel32 >> L_RED_SHIFT) & 0xff;         (red)
 *                 (pixel32 >> L_GREEN_SHIFT) & 0xff;       (green)
 *                 (pixel32 >> L_BLUE_SHIFT) & 0xff;        (blue)
 *                 (pixel32 >> L_ALPHA_SHIFT) & 0xff;       (alpha)
 *           The functions extractRGBValues() and extractRGBAValues() are
 *           provided to do this.  Likewise, the pixels can be set
 *           directly by shifting, using composeRGBPixel() and
 *           composeRGBAPixel().
 *
 *           All these operations work properly on both big- and little-endians.
 *
 *       (5) A reference count is held within each pix, giving the
 *           number of ptrs to the pix.  When a pixClone() call
 *           is made, the ref count is increased by 1, and
 *           when a pixDestroy() call is made, the reference count
 *           of the pix is decremented.  The pix is only destroyed
 *           when the reference count goes to zero.
 *
 *       (6) Version numbers are used in the serialization of image-related
 *           data structures.  They are placed in the files, and rarely
 *           (if ever) change.
 *
 *       (7) The serialization dependencies are as follows:
 *               pixaa  :  pixa  :  boxa
 *               boxaa  :  boxa
 *           So, for example, pixaa and boxaa can be changed without
 *           forcing a change in pixa or boxa.  However, if pixa is
 *           changed, it forces a change in pixaa, and if boxa is
 *           changed, if forces a change in the other three.
 * 
*/ /*-------------------------------------------------------------------------* * Basic Pix * *-------------------------------------------------------------------------*/ /*! Basic Pix */ typedef struct Pix PIX; /*! Colormap of a Pix */ typedef struct PixColormap PIXCMAP; /*! Colormap table entry (after the BMP version). * Note that the BMP format stores the colormap table exactly * as it appears here, with color samples being stored sequentially, * in the order (b,g,r,a). */ typedef struct RGBA_Quad RGBA_QUAD; /*-------------------------------------------------------------------------* * Pix arrays * *-------------------------------------------------------------------------*/ /*! Array of pix */ typedef struct Pixa PIXA; /*! Array of arrays of pix */ typedef struct Pixaa PIXAA; /*-------------------------------------------------------------------------* * Basic rectangle and rectangle arrays * *-------------------------------------------------------------------------*/ /*! Basic rectangle */ typedef struct Box BOX; /*! Array of Box */ typedef struct Boxa BOXA; /*! Array of Boxa */ typedef struct Boxaa BOXAA; /*-------------------------------------------------------------------------* * Arrays of points * *-------------------------------------------------------------------------*/ /*! Array of points */ typedef struct Pta PTA; /*! Array of Pta */ typedef struct Ptaa PTAA; /*-------------------------------------------------------------------------* * Pix accumulator container * *-------------------------------------------------------------------------*/ /*! Pix accumulator container */ typedef struct Pixacc PIXACC; /*-------------------------------------------------------------------------* * Pix tiling * *-------------------------------------------------------------------------*/ /*! Pix tiling */ typedef struct PixTiling PIXTILING; /*-------------------------------------------------------------------------* * FPix: pix with float array * *-------------------------------------------------------------------------*/ /*! Pix with float array */ typedef struct FPix FPIX; /*! Array of FPix */ typedef struct FPixa FPIXA; /*-------------------------------------------------------------------------* * DPix: pix with double array * *-------------------------------------------------------------------------*/ /*! Pix with double array */ typedef struct DPix DPIX; /*-------------------------------------------------------------------------* * Compressed pix and arrays * *-------------------------------------------------------------------------*/ /*! Compressed Pix */ typedef struct PixComp PIXC; /*! Array of compressed pix */ typedef struct PixaComp PIXAC; /*-------------------------------------------------------------------------* * Colors for 32 RGBA * *-------------------------------------------------------------------------*/ /*
 *  Notes:
 *      (1) These are the byte indices for colors in 32 bpp images.
 *          They are used through the GET/SET_DATA_BYTE accessors.
 *          The 4th byte, typically known as the "alpha channel" and used
 *          for blending, is used to a small extent in leptonica.
 *      (2) Do not change these values!  If you redefine them, functions
 *          that have the shifts hardcoded for efficiency and conciseness
 *          (instead of using the constants below) will break.  These
 *          functions are labelled with "***"  next to their names at
 *          the top of the files in which they are defined.
 *      (3) The shifts to extract the red, green, blue and alpha components
 *          from a 32 bit pixel are defined here.
 * 
*/ /*! RGBA Color */ enum { COLOR_RED = 0, /*!< red color index in RGBA_QUAD */ COLOR_GREEN = 1, /*!< green color index in RGBA_QUAD */ COLOR_BLUE = 2, /*!< blue color index in RGBA_QUAD */ L_ALPHA_CHANNEL = 3 /*!< alpha value index in RGBA_QUAD */ }; static const l_int32 L_RED_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_RED); /* 24 */ static const l_int32 L_GREEN_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_GREEN); /* 16 */ static const l_int32 L_BLUE_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_BLUE); /* 8 */ static const l_int32 L_ALPHA_SHIFT = 8 * (sizeof(l_uint32) - 1 - L_ALPHA_CHANNEL); /* 0 */ /*-------------------------------------------------------------------------* * Colors for drawing boxes * *-------------------------------------------------------------------------*/ /*! Box Color */ enum { L_DRAW_RED = 0, /*!< draw in red */ L_DRAW_GREEN = 1, /*!< draw in green */ L_DRAW_BLUE = 2, /*!< draw in blue */ L_DRAW_SPECIFIED = 3, /*!< draw specified color */ L_DRAW_RGB = 4, /*!< draw as sequence of r,g,b */ L_DRAW_RANDOM = 5 /*!< draw randomly chosen colors */ }; /*-------------------------------------------------------------------------* * Perceptual color weights * *-------------------------------------------------------------------------*/ /*
 *  Notes:
 *      (1) These perceptual weighting factors are ad-hoc, but they do
 *          add up to 1.  Unlike, for example, the weighting factors for
 *          converting RGB to luminance, or more specifically to Y in the
 *          YUV colorspace.  Those numbers come from the
 *          International Telecommunications Union, via ITU-R.
 * 
*/ static const l_float32 L_RED_WEIGHT = 0.3f; /*!< Percept. weight for red */ static const l_float32 L_GREEN_WEIGHT = 0.5f; /*!< Percept. weight for green */ static const l_float32 L_BLUE_WEIGHT = 0.2f; /*!< Percept. weight for blue */ /*-------------------------------------------------------------------------* * Flags for colormap conversion * *-------------------------------------------------------------------------*/ /*! Cmap Conversion */ enum { REMOVE_CMAP_TO_BINARY = 0, /*!< remove colormap for conv to 1 bpp */ REMOVE_CMAP_TO_GRAYSCALE = 1, /*!< remove colormap for conv to 8 bpp */ REMOVE_CMAP_TO_FULL_COLOR = 2, /*!< remove colormap for conv to 32 bpp */ REMOVE_CMAP_WITH_ALPHA = 3, /*!< remove colormap and alpha */ REMOVE_CMAP_BASED_ON_SRC = 4 /*!< remove depending on src format */ }; /*------------------------------------------------------------------------* *! *
 * The following operation bit flags have been modified from Sun's
 * original "bitblt" (bit block transfer) operations (from the 1980s).
 *
 * The 'op' in 'rasterop' is represented by an integer
 * composed with Boolean functions using the set of five integers
 * given below.  The integers, and the op codes resulting from
 * boolean expressions on them, need only be in the range from 0 to 15.
 * The function is applied on a per-pixel basis.
 *
 * Examples: the op code representing ORing the src and dest
 * is computed using the bit OR, as PIX_SRC | PIX_DST;  the op
 * code representing XORing src and dest is found from
 * PIX_SRC ^ PIX_DST;  the op code representing ANDing src and dest
 * is found from PIX_SRC & PIX_DST.  Note that
 * PIX_NOT(PIX_CLR) = PIX_SET, and v.v., as they must be.
 *
 * We use the following set of definitions:
 *
 *      #define   PIX_SRC      0xc
 *      #define   PIX_DST      0xa
 *      #define   PIX_NOT(op)  (op) ^ 0xf
 *      #define   PIX_CLR      0x0
 *      #define   PIX_SET      0xf
 *
 * [These definitions differ from Sun's, in that Sun left-shifted
 * each value by 1 pixel, and used the least significant bit as a
 * flag for the "pseudo-operation" of clipping.  We don't need
 * this bit, because it is both efficient and safe ALWAYS to clip
 * the rectangles to the src and dest images, which is what we do.
 * See the notes in rop.h on the general choice of these bit flags.]
 *
 * Here are the 16 unique op flags:
 *
 *      PIX_CLR                           0000             0x0
 *      PIX_SET                           1111             0xf
 *      PIX_SRC                           1100             0xc
 *      PIX_DST                           1010             0xa
 *      PIX_NOT(PIX_SRC)                  0011             0x3
 *      PIX_NOT(PIX_DST)                  0101             0x5
 *      PIX_SRC | PIX_DST                 1110             0xe
 *      PIX_SRC & PIX_DST                 1000             0x8
 *      PIX_SRC ^ PIX_DST                 0110             0x6
 *      PIX_NOT(PIX_SRC) | PIX_DST        1011             0xb
 *      PIX_NOT(PIX_SRC) & PIX_DST        0010             0x2
 *      PIX_SRC | PIX_NOT(PIX_DST)        1101             0xd
 *      PIX_SRC & PIX_NOT(PIX_DST)        0100             0x4
 *      PIX_NOT(PIX_SRC | PIX_DST)        0001             0x1
 *      PIX_NOT(PIX_SRC & PIX_DST)        0111             0x7
 *      PIX_NOT(PIX_SRC ^ PIX_DST)        1001             0x9
 *
 * 
*-------------------------------------------------------------------------*/ #define PIX_SRC (0xc) /*!< use source pixels */ #define PIX_DST (0xa) /*!< use destination pixels */ #define PIX_NOT(op) ((op) ^ 0x0f) /*!< invert operation %op */ #define PIX_CLR (0x0) /*!< clear pixels */ #define PIX_SET (0xf) /*!< set pixels */ #define PIX_PAINT (PIX_SRC | PIX_DST) /*!< paint = src | dst */ #define PIX_MASK (PIX_SRC & PIX_DST) /*!< mask = src & dst */ #define PIX_SUBTRACT (PIX_DST & PIX_NOT(PIX_SRC)) /*!< subtract = */ /*!< src & !dst */ #define PIX_XOR (PIX_SRC ^ PIX_DST) /*!< xor = src ^ dst */ /*-------------------------------------------------------------------------* * Access and storage flags * *-------------------------------------------------------------------------*/ /* *
 *  For Pix, Box, Pta and Numa, there are 3 standard methods for handling
 *  the retrieval or insertion of a struct:
 *     (1) direct insertion (Don't do this if there is another handle
 *                           somewhere to this same struct!)
 *     (2) copy (Always safe, sets up a refcount of 1 on the new object.
 *               Can be undesirable if very large, such as an image or
 *               an array of images.)
 *     (3) clone (Makes another handle to the same struct, and bumps the
 *                refcount up by 1.  OK to use except in two situations:
 *                (a) You change data through one of the handles but don't
 *                    want those changes to be seen by the other handle.
 *                (b) The application is multi-threaded.  Because the clone
 *                    operation is not atomic (e.g., locked with a mutex),
 *                    it is possible to end up with an incorrect ref count,
 *                    causing either a memory leak or a crash.
 *
 *  For Pixa and Boxa, which are structs that hold an array of clonable
 *  structs, there is an additional method:
 *     (4) copy-clone (Makes a new higher-level struct with a refcount
 *                     of 1, but clones all the structs in the array.)
 *
 *  Unlike the other structs, when retrieving a string from an Sarray,
 *  you are allowed to get a handle without a copy or clone (i.e., the
 *  string is not owned by the handle).  You must not either free the string
 *  or insert it in some other struct that would own it.  Specifically,
 *  for an Sarray, the copyflag for retrieval is either:
 *         L_COPY or L_NOCOPY
 *  and for insertion, the copyflag is either:
 *         L_COPY or one of {L_INSERT , L_NOCOPY} (the latter are equivalent
 *                                                 for insertion))
 *  Typical patterns are:
 *  (1) Reference a string in an Sarray with L_NOCOPY and insert a copy
 *      of it in another Sarray with L_COPY.
 *  (2) Copy a string from an Sarray with L_COPY and insert it in
 *      another Sarray with L_INSERT (or L_NOCOPY).
 *  In both cases, a copy is made and both Sarrays own their instance
 *  of that string.
 * 
*/ /*! Object Access */ enum { L_NOCOPY = 0, /*!< do not copy the object; do not delete the ptr */ L_INSERT = L_NOCOPY, /*!< stuff it in; do not copy or clone */ L_COPY = 1, /*!< make/use a copy of the object */ L_CLONE = 2, /*!< make/use clone (ref count) of the object */ L_COPY_CLONE = 3 /*!< make a new array object (e.g., pixa) and fill */ /*!< the array with clones (e.g., pix) */ }; /*----------------------------------------------------------------------------* * Sort flags * *----------------------------------------------------------------------------*/ /*! Sort Mode */ enum { L_SHELL_SORT = 1, /*!< use shell sort */ L_BIN_SORT = 2 /*!< use bin sort */ }; /*! Sort Order */ enum { L_SORT_INCREASING = 1, /*!< sort in increasing order */ L_SORT_DECREASING = 2 /*!< sort in decreasing order */ }; /*! Sort Type */ enum { L_SORT_BY_X = 1, /*!< sort box or c.c. by left edge location */ L_SORT_BY_Y = 2, /*!< sort box or c.c. by top edge location */ L_SORT_BY_RIGHT = 3, /*!< sort box or c.c. by right edge location */ L_SORT_BY_BOT = 4, /*!< sort box or c.c. by bot edge location */ L_SORT_BY_WIDTH = 5, /*!< sort box or c.c. by width */ L_SORT_BY_HEIGHT = 6, /*!< sort box or c.c. by height */ L_SORT_BY_MIN_DIMENSION = 7, /*!< sort box or c.c. by min dimension */ L_SORT_BY_MAX_DIMENSION = 8, /*!< sort box or c.c. by max dimension */ L_SORT_BY_PERIMETER = 9, /*!< sort box or c.c. by perimeter */ L_SORT_BY_AREA = 10, /*!< sort box or c.c. by area */ L_SORT_BY_ASPECT_RATIO = 11 /*!< sort box or c.c. by width/height ratio */ }; /*---------------------------------------------------------------------------* * Blend flags * *---------------------------------------------------------------------------*/ /*! Blend Types */ enum { L_BLEND_WITH_INVERSE = 1, /*!< add some of src inverse to itself */ L_BLEND_TO_WHITE = 2, /*!< shift src colors towards white */ L_BLEND_TO_BLACK = 3, /*!< shift src colors towards black */ L_BLEND_GRAY = 4, /*!< blend src directly with blender */ L_BLEND_GRAY_WITH_INVERSE = 5 /*!< add amount of src inverse to itself, */ /*!< based on blender pix value */ }; /*! Paint Selection */ enum { L_PAINT_LIGHT = 1, /*!< colorize non-black pixels */ L_PAINT_DARK = 2 /*!< colorize non-white pixels */ }; /*-------------------------------------------------------------------------* * Graphics pixel setting * *-------------------------------------------------------------------------*/ /*! Pixel Setting */ enum { L_SET_PIXELS = 1, /*!< set all bits in each pixel to 1 */ L_CLEAR_PIXELS = 2, /*!< set all bits in each pixel to 0 */ L_FLIP_PIXELS = 3 /*!< flip all bits in each pixel */ }; /*-------------------------------------------------------------------------* * Size and location filter flags * *-------------------------------------------------------------------------*/ /*! Size Comparison */ enum { L_SELECT_IF_LT = 1, /*!< save if value is less than threshold */ L_SELECT_IF_GT = 2, /*!< save if value is more than threshold */ L_SELECT_IF_LTE = 3, /*!< save if value is <= to the threshold */ L_SELECT_IF_GTE = 4 /*!< save if value is >= to the threshold */ }; /*! Size Selection */ enum { L_SELECT_BY_WIDTH = 1, /*!< select by width; 1 bpp */ L_SELECT_BY_HEIGHT = 2, /*!< select by height; 1 bpp */ L_SELECT_BY_MAX_DIMENSION = 3, /*!< select by max of width and */ /*!< height; 1 bpp */ L_SELECT_BY_AREA = 4, /*!< select by foreground area; 1 bpp */ L_SELECT_BY_PERIMETER = 5 /*!< select by perimeter; 1 bpp */ }; /*! Location Filter */ enum { L_SELECT_WIDTH = 1, /*!< width must satisfy constraint */ L_SELECT_HEIGHT = 2, /*!< height must satisfy constraint */ L_SELECT_XVAL = 3, /*!< x value must satisfy constraint */ L_SELECT_YVAL = 4, /*!< y value must satisfy constraint */ L_SELECT_IF_EITHER = 5, /*!< either width or height (or xval */ /*!< or yval) can satisfy constraint */ L_SELECT_IF_BOTH = 6 /*!< both width and height (or xval */ /*!< and yval must satisfy constraint */ }; /*! Boxa Check */ enum { L_CHECK_WIDTH = 1, /*!< check and possibly modify width */ L_CHECK_HEIGHT = 2, /*!< check and possibly modify height */ L_CHECK_BOTH = 3 /*!< check and possibly modify both */ }; /*-------------------------------------------------------------------------* * Color component selection flags * *-------------------------------------------------------------------------*/ /*! Color Selection */ enum { L_SELECT_RED = 1, /*!< use red component */ L_SELECT_GREEN = 2, /*!< use green component */ L_SELECT_BLUE = 3, /*!< use blue component */ L_SELECT_MIN = 4, /*!< use min color component */ L_SELECT_MAX = 5, /*!< use max color component */ L_SELECT_AVERAGE = 6, /*!< use average of color components */ L_SELECT_HUE = 7, /*!< use hue value (in HSV color space) */ L_SELECT_SATURATION = 8, /*!< use saturation value (in HSV space) */ L_SELECT_WEIGHTED = 9 /*!< use weighted average of color comps */ }; /*-------------------------------------------------------------------------* * Color content flags * *-------------------------------------------------------------------------*/ /*! Color Content */ enum { L_INTERMED_DIFF = 1, /*!< intermediate of diff component values */ L_AVE_MAX_DIFF_2 = 2, /*!< diff average closest comps to third */ L_MAX_DIFF = 3 /*!< maximum diff of component values */ }; /*-------------------------------------------------------------------------* * 16-bit conversion flags * *-------------------------------------------------------------------------*/ /*! 16-bit Conversion */ enum { L_LS_BYTE = 1, /*!< use LSB */ L_MS_BYTE = 2, /*!< use MSB */ L_AUTO_BYTE = 3, /*!< use LSB if max(val) < 256; else MSB */ L_CLIP_TO_FF = 4, /*!< use max(val, 255) */ L_LS_TWO_BYTES = 5, /*!< use two LSB */ L_MS_TWO_BYTES = 6, /*!< use two MSB */ L_CLIP_TO_FFFF = 7 /*!< use max(val, 65535) */ }; /*-------------------------------------------------------------------------* * Rotate and shear flags * *-------------------------------------------------------------------------*/ /*! Rotation Type */ enum { L_ROTATE_AREA_MAP = 1, /*!< use area map rotation, if possible */ L_ROTATE_SHEAR = 2, /*!< use shear rotation */ L_ROTATE_SAMPLING = 3 /*!< use sampling */ }; /*! Background Color */ enum { L_BRING_IN_WHITE = 1, /*!< bring in white pixels from the outside */ L_BRING_IN_BLACK = 2 /*!< bring in black pixels from the outside */ }; /*! Shear Point */ enum { L_SHEAR_ABOUT_CORNER = 1, /*!< shear image about UL corner */ L_SHEAR_ABOUT_CENTER = 2 /*!< shear image about center */ }; /*-------------------------------------------------------------------------* * Affine transform order flags * *-------------------------------------------------------------------------*/ /*! Affine Transform Order */ enum { L_TR_SC_RO = 1, /*!< translate, scale, rotate */ L_SC_RO_TR = 2, /*!< scale, rotate, translate */ L_RO_TR_SC = 3, /*!< rotate, translate, scale */ L_TR_RO_SC = 4, /*!< translate, rotate, scale */ L_RO_SC_TR = 5, /*!< rotate, scale, translate */ L_SC_TR_RO = 6 /*!< scale, translate, rotate */ }; /*-------------------------------------------------------------------------* * Grayscale filling flags * *-------------------------------------------------------------------------*/ /*! Grayscale Fill */ enum { L_FILL_WHITE = 1, /*!< fill white pixels (e.g, in fg map) */ L_FILL_BLACK = 2 /*!< fill black pixels (e.g., in bg map) */ }; /*-------------------------------------------------------------------------* * Flags for setting to white or black * *-------------------------------------------------------------------------*/ /*! BlackWhite Set */ enum { L_SET_WHITE = 1, /*!< set pixels to white */ L_SET_BLACK = 2 /*!< set pixels to black */ }; /*-------------------------------------------------------------------------* * Flags for getting white or black value * *-------------------------------------------------------------------------*/ /*! BlackWhite Get */ enum { L_GET_WHITE_VAL = 1, /*!< get white pixel value */ L_GET_BLACK_VAL = 2 /*!< get black pixel value */ }; /*-------------------------------------------------------------------------* * Flags for 8 bit and 16 bit pixel sums * *-------------------------------------------------------------------------*/ /*! BlackWhite Sum */ enum { L_WHITE_IS_MAX = 1, /*!< white pixels are 0xff or 0xffff; black are 0 */ L_BLACK_IS_MAX = 2 /*!< black pixels are 0xff or 0xffff; white are 0 */ }; /*-------------------------------------------------------------------------* * Dither parameters * * If within this grayscale distance from black or white, * * do not propagate excess or deficit to neighboring pixels. * *-------------------------------------------------------------------------*/ /*! Dither Distance */ enum { DEFAULT_CLIP_LOWER_1 = 10, /*!< dist to black with no prop; 1 bpp */ DEFAULT_CLIP_UPPER_1 = 10, /*!< dist to black with no prop; 1 bpp */ DEFAULT_CLIP_LOWER_2 = 5, /*!< dist to black with no prop; 2 bpp */ DEFAULT_CLIP_UPPER_2 = 5 /*!< dist to black with no prop; 2 bpp */ }; /*-------------------------------------------------------------------------* * Distance type flags * *-------------------------------------------------------------------------*/ /*! Distance Type */ enum { L_MANHATTAN_DISTANCE = 1, /*!< L1 distance (e.g., in color space) */ L_EUCLIDEAN_DISTANCE = 2 /*!< L2 distance */ }; /*-------------------------------------------------------------------------* * Distance Value flags * *-------------------------------------------------------------------------*/ /*! Distance Value */ enum { L_NEGATIVE = 1, /*!< values < 0 */ L_NON_NEGATIVE = 2, /*!< values >= 0 */ L_POSITIVE = 3, /*!< values > 0 */ L_NON_POSITIVE = 4, /*!< values <= 0 */ L_ZERO = 5, /*!< values = 0 */ L_ALL = 6 /*!< all values */ }; /*-------------------------------------------------------------------------* * Statistical measures * *-------------------------------------------------------------------------*/ /*! Stats Type */ enum { L_MEAN_ABSVAL = 1, /*!< average of abs values */ L_MEDIAN_VAL = 2, /*!< median value of set */ L_MODE_VAL = 3, /*!< mode value of set */ L_MODE_COUNT = 4, /*!< mode count of set */ L_ROOT_MEAN_SQUARE = 5, /*!< rms of values */ L_STANDARD_DEVIATION = 6, /*!< standard deviation from mean */ L_VARIANCE = 7 /*!< variance of values */ }; /*-------------------------------------------------------------------------* * Set index selection flags * *-------------------------------------------------------------------------*/ /*! Index Selection */ enum { L_CHOOSE_CONSECUTIVE = 1, /*!< select 'n' consecutive */ L_CHOOSE_SKIP_BY = 2 /*!< select at intervals of 'n' */ }; /*-------------------------------------------------------------------------* * Text orientation flags * *-------------------------------------------------------------------------*/ /*! Text Orientation */ enum { L_TEXT_ORIENT_UNKNOWN = 0, /*!< low confidence on text orientation */ L_TEXT_ORIENT_UP = 1, /*!< portrait, text rightside-up */ L_TEXT_ORIENT_LEFT = 2, /*!< landscape, text up to left */ L_TEXT_ORIENT_DOWN = 3, /*!< portrait, text upside-down */ L_TEXT_ORIENT_RIGHT = 4 /*!< landscape, text up to right */ }; /*-------------------------------------------------------------------------* * Edge orientation flags * *-------------------------------------------------------------------------*/ /*! Edge Orientation */ enum { L_HORIZONTAL_EDGES = 0, /*!< filters for horizontal edges */ L_VERTICAL_EDGES = 1, /*!< filters for vertical edges */ L_ALL_EDGES = 2 /*!< filters for all edges */ }; /*-------------------------------------------------------------------------* * Line orientation flags * *-------------------------------------------------------------------------*/ /*! Line Orientation */ enum { L_HORIZONTAL_LINE = 0, /*!< horizontal line */ L_POS_SLOPE_LINE = 1, /*!< 45 degree line with positive slope */ L_VERTICAL_LINE = 2, /*!< vertical line */ L_NEG_SLOPE_LINE = 3, /*!< 45 degree line with negative slope */ L_OBLIQUE_LINE = 4 /*!< neither horizontal nor vertical */ }; /*-------------------------------------------------------------------------* * Image orientation flags * *-------------------------------------------------------------------------*/ /*! Image Orientation */ enum { L_PORTRAIT_MODE = 0, /*!< typical: page is viewed with height > width */ L_LANDSCAPE_MODE = 1 /*!< page is viewed at 90 deg to portrait mode */ }; /*-------------------------------------------------------------------------* * Scan direction flags * *-------------------------------------------------------------------------*/ /*! Scan Direction */ enum { L_FROM_LEFT = 0, /*!< scan from left */ L_FROM_RIGHT = 1, /*!< scan from right */ L_FROM_TOP = 2, /*!< scan from top */ L_FROM_BOT = 3, /*!< scan from bottom */ L_SCAN_NEGATIVE = 4, /*!< scan in negative direction */ L_SCAN_POSITIVE = 5, /*!< scan in positive direction */ L_SCAN_BOTH = 6, /*!< scan in both directions */ L_SCAN_HORIZONTAL = 7, /*!< horizontal scan (direction unimportant) */ L_SCAN_VERTICAL = 8 /*!< vertical scan (direction unimportant) */ }; /*-------------------------------------------------------------------------* * Box size adjustment and location flags * *-------------------------------------------------------------------------*/ /*! Box Adjustment */ enum { L_ADJUST_SKIP = 0, /*!< do not adjust */ L_ADJUST_LEFT = 1, /*!< adjust left edge */ L_ADJUST_RIGHT = 2, /*!< adjust right edge */ L_ADJUST_LEFT_AND_RIGHT = 3, /*!< adjust both left and right edges */ L_ADJUST_TOP = 4, /*!< adjust top edge */ L_ADJUST_BOT = 5, /*!< adjust bottom edge */ L_ADJUST_TOP_AND_BOT = 6, /*!< adjust both top and bottom edges */ L_ADJUST_CHOOSE_MIN = 7, /*!< choose the min median value */ L_ADJUST_CHOOSE_MAX = 8, /*!< choose the max median value */ L_SET_LEFT = 9, /*!< set left side to a given value */ L_SET_RIGHT = 10, /*!< set right side to a given value */ L_SET_TOP = 11, /*!< set top side to a given value */ L_SET_BOT = 12, /*!< set bottom side to a given value */ L_GET_LEFT = 13, /*!< get left side location */ L_GET_RIGHT = 14, /*!< get right side location */ L_GET_TOP = 15, /*!< get top side location */ L_GET_BOT = 16 /*!< get bottom side location */ }; /*-------------------------------------------------------------------------* * Flags for modifying box boundaries using a second box * *-------------------------------------------------------------------------*/ /*! Box Boundary Mod */ enum { L_USE_MINSIZE = 1, /*!< use boundaries giving min size */ L_USE_MAXSIZE = 2, /*!< use boundaries giving max size */ L_SUB_ON_LOC_DIFF = 3, /*!< modify boundary if big location diff */ L_SUB_ON_SIZE_DIFF = 4, /*!< modify boundary if big size diff */ L_USE_CAPPED_MIN = 5, /*!< modify boundary with capped min */ L_USE_CAPPED_MAX = 6 /*!< modify boundary with capped max */ }; /*-------------------------------------------------------------------------* * Handling overlapping bounding boxes in boxa * *-------------------------------------------------------------------------*/ /*! Box Overlap Mod */ enum { L_COMBINE = 1, /*!< resize to bounding region; remove smaller */ L_REMOVE_SMALL = 2 /*!< only remove smaller */ }; /*-------------------------------------------------------------------------* * Selecting or making a box from two (intersecting) boxes * *-------------------------------------------------------------------------*/ /*! Box Combine or Select */ enum { L_GEOMETRIC_UNION = 1, /*!< use union of two boxes */ L_GEOMETRIC_INTERSECTION = 2, /*!< use intersection of two boxes */ L_LARGEST_AREA = 3, /*!< use box with largest area */ L_SMALLEST_AREA = 4 /*!< use box with smallest area */ }; /*-------------------------------------------------------------------------* * Flags for replacing invalid boxes * *-------------------------------------------------------------------------*/ /*! Box Replacement */ enum { L_USE_ALL_BOXES = 1, /*!< consider all boxes in the sequence */ L_USE_SAME_PARITY_BOXES = 2 /*!< consider boxes with the same parity */ }; /*-------------------------------------------------------------------------* * Flags for box corners and center * *-------------------------------------------------------------------------*/ /*! Box Corners and Center */ enum { L_UPPER_LEFT = 1, /*!< UL corner */ L_UPPER_RIGHT = 2, /*!< UR corner */ L_LOWER_LEFT = 3, /*!< LL corner */ L_LOWER_RIGHT = 4, /*!< LR corner */ L_BOX_CENTER = 5 /*!< center */ }; /*-------------------------------------------------------------------------* * Horizontal warp * *-------------------------------------------------------------------------*/ /*! Horiz Warp Stretch */ enum { L_WARP_TO_LEFT = 1, /*!< increasing stretch or contraction to left */ L_WARP_TO_RIGHT = 2 /*!< increasing stretch or contraction to right */ }; /*! Horiz Warp Mode */ enum { L_LINEAR_WARP = 1, /*!< stretch or contraction grows linearly */ L_QUADRATIC_WARP = 2 /*!< stretch or contraction grows quadratically */ }; /*-------------------------------------------------------------------------* * Pixel selection for resampling * *-------------------------------------------------------------------------*/ /*! Pixel Selection */ enum { L_INTERPOLATED = 1, /*!< linear interpolation from src pixels */ L_SAMPLED = 2 /*!< nearest src pixel sampling only */ }; /*-------------------------------------------------------------------------* * Thinning flags * *-------------------------------------------------------------------------*/ /*! Thinning Polarity */ enum { L_THIN_FG = 1, /*!< thin foreground of 1 bpp image */ L_THIN_BG = 2 /*!< thin background of 1 bpp image */ }; /*-------------------------------------------------------------------------* * Runlength flags * *-------------------------------------------------------------------------*/ /*! Runlength Direction */ enum { L_HORIZONTAL_RUNS = 0, /*!< determine runlengths of horizontal runs */ L_VERTICAL_RUNS = 1 /*!< determine runlengths of vertical runs */ }; /*-------------------------------------------------------------------------* * Edge filter flags * *-------------------------------------------------------------------------*/ /*! Edge Filter */ enum { L_SOBEL_EDGE = 1, /*!< Sobel edge filter */ L_TWO_SIDED_EDGE = 2 /*!< Two-sided edge filter */ }; /*-------------------------------------------------------------------------* * Subpixel color component ordering in LCD display * *-------------------------------------------------------------------------*/ /*! Subpixel Color Order */ enum { L_SUBPIXEL_ORDER_RGB = 1, /*!< sensor order left-to-right RGB */ L_SUBPIXEL_ORDER_BGR = 2, /*!< sensor order left-to-right BGR */ L_SUBPIXEL_ORDER_VRGB = 3, /*!< sensor order top-to-bottom RGB */ L_SUBPIXEL_ORDER_VBGR = 4 /*!< sensor order top-to-bottom BGR */ }; /*-------------------------------------------------------------------------* * HSV histogram flags * *-------------------------------------------------------------------------*/ /*! HSV Histogram */ enum { L_HS_HISTO = 1, /*!< Use hue-saturation histogram */ L_HV_HISTO = 2, /*!< Use hue-value histogram */ L_SV_HISTO = 3 /*!< Use saturation-value histogram */ }; /*-------------------------------------------------------------------------* * HSV Region flags (inclusion, exclusion) * *-------------------------------------------------------------------------*/ /*! HSV Region */ enum { L_INCLUDE_REGION = 1, /*!< Use pixels with specified HSV region */ L_EXCLUDE_REGION = 2 /*!< Use pixels outside HSV region */ }; /*-------------------------------------------------------------------------* * Location flags for adding text to a pix * *-------------------------------------------------------------------------*/ /*! Add Text Location */ enum { L_ADD_ABOVE = 1, /*!< Add text above the image */ L_ADD_BELOW = 2, /*!< Add text below the image */ L_ADD_LEFT = 3, /*!< Add text to the left of the image */ L_ADD_RIGHT = 4, /*!< Add text to the right of the image */ L_ADD_AT_TOP = 5, /*!< Add text over the top of the image */ L_ADD_AT_BOT = 6, /*!< Add text over the bottom of the image */ L_ADD_AT_LEFT = 7, /*!< Add text over left side of the image */ L_ADD_AT_RIGHT = 8 /*!< Add text over right side of the image */ }; /*-------------------------------------------------------------------------* * Flags for plotting on a pix * *-------------------------------------------------------------------------*/ /*! Pix Plot */ enum { L_PLOT_AT_TOP = 1, /*!< Plot horizontally at top */ L_PLOT_AT_MID_HORIZ = 2, /*!< Plot horizontally at middle */ L_PLOT_AT_BOT = 3, /*!< Plot horizontally at bottom */ L_PLOT_AT_LEFT = 4, /*!< Plot vertically at left */ L_PLOT_AT_MID_VERT = 5, /*!< Plot vertically at middle */ L_PLOT_AT_RIGHT = 6 /*!< Plot vertically at right */ }; /*-------------------------------------------------------------------------* * Flags for making simple masks * *-------------------------------------------------------------------------*/ /*! Mask Generation */ enum { L_USE_INNER = 1, /*!< Select the interior part */ L_USE_OUTER = 2 /*!< Select the outer part (e.g., a frame) */ }; /*-------------------------------------------------------------------------* * Flags for selecting display program * *-------------------------------------------------------------------------*/ /*! Display Program */ enum { L_DISPLAY_WITH_NONE = 0, /*!< Disable pixDisplay() */ L_DISPLAY_WITH_XZGV = 1, /*!< Use xzgv with pixDisplay() */ L_DISPLAY_WITH_XLI = 2, /*!< Use xli with pixDisplay() */ L_DISPLAY_WITH_XV = 3, /*!< Use xv with pixDisplay() */ L_DISPLAY_WITH_IV = 4, /*!< Use irfanview (win) with pixDisplay() */ L_DISPLAY_WITH_OPEN = 5 /*!< Use open (apple/win) with pixDisplay() */ }; /*-------------------------------------------------------------------------* * Flag(s) used in the 'special' pix field for non-default operations * * - 0 is default for chroma sampling in jpeg * * - 10-19 are used for zlib compression in png write * * - 4 and 8 are used for specifying connectivity in labelling * *-------------------------------------------------------------------------*/ /*! Flags used in Pix::special */ enum { L_NO_CHROMA_SAMPLING_JPEG = 1 /*!< Write full resolution chroma */ }; /*-------------------------------------------------------------------------* * Handling negative values in conversion to unsigned int * *-------------------------------------------------------------------------*/ /*! Negative Value */ enum { L_CLIP_TO_ZERO = 1, /*!< Clip negative values to 0 */ L_TAKE_ABSVAL = 2 /*!< Convert to positive using L_ABS() */ }; /*-------------------------------------------------------------------------* * Relative to zero flags * *-------------------------------------------------------------------------*/ /*! Relative To Zero */ enum { L_LESS_THAN_ZERO = 1, /*!< Choose values less than zero */ L_EQUAL_TO_ZERO = 2, /*!< Choose values equal to zero */ L_GREATER_THAN_ZERO = 3 /*!< Choose values greater than zero */ }; /*-------------------------------------------------------------------------* * Flags for adding or removing trailing slash from string * *-------------------------------------------------------------------------*/ /*! Trailing Slash */ enum { L_ADD_TRAIL_SLASH = 1, /*!< Add trailing slash to string */ L_REMOVE_TRAIL_SLASH = 2 /*!< Remove trailing slash from string */ }; /*-------------------------------------------------------------------------* * Pix allocator and deallocator function types * *-------------------------------------------------------------------------*/ /*! Allocator function type */ typedef void *(*alloc_fn)(size_t); /*! Deallocator function type */ typedef void (*dealloc_fn)(void *); #endif /* LEPTONICA_PIX_H */ leptonica-1.86.0/src/pix1.c000066400000000000000000001621541506303110300154010ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pix1.c *
 *
 *    The pixN.c {N = 1,2,3,4,5} files are sorted by the type of operation.
 *    The primary functions in these files are:
 *
 *        pix1.c: constructors, destructors and field accessors
 *        pix2.c: pixel poking of image, pad and border pixels
 *        pix3.c: masking and logical ops, counting, mirrored tiling
 *        pix4.c: histograms, statistics, fg/bg estimation
 *        pix5.c: property measurements, rectangle extraction
 *
 *
 *    This file has the basic constructors, destructors and field accessors
 *
 *    Pix memory management (allows custom allocator and deallocator)
 *          static void  *pixdata_malloc()
 *          static void   pixdata_free()
 *          void          setPixMemoryManager()
 *
 *    Pix creation
 *          PIX          *pixCreate()
 *          PIX          *pixCreateNoInit()
 *          PIX          *pixCreateTemplate()
 *          PIX          *pixCreateTemplateNoInit()
 *          PIX          *pixCreateWithCmap()
 *          PIX          *pixCreateHeader()
 *          PIX          *pixClone()
 *
 *    Pix destruction
 *          void          pixDestroy()
 *          static void   pixFree()
 *
 *    Pix copy
 *          PIX          *pixCopy()
 *          l_int32       pixResizeImageData()
 *          l_int32       pixCopyColormap()
 *          l_int32       pixTransferAllData()
 *          l_int32       pixSwapAndDestroy()
 *
 *    Pix accessors
 *          l_int32       pixGetWidth()
 *          l_int32       pixSetWidth()
 *          l_int32       pixGetHeight()
 *          l_int32       pixSetHeight()
 *          l_int32       pixGetDepth()
 *          l_int32       pixSetDepth()
 *          l_int32       pixGetDimensions()
 *          l_int32       pixSetDimensions()
 *          l_int32       pixCopyDimensions()
 *          l_int32       pixGetSpp()
 *          l_int32       pixSetSpp()
 *          l_int32       pixCopySpp()
 *          l_int32       pixGetWpl()
 *          l_int32       pixSetWpl()
 *          l_uint32      pixGetXRes()
 *          l_int32       pixSetXRes()
 *          l_uint32      pixGetYRes()
 *          l_int32       pixSetYRes()
 *          l_int32       pixGetResolution()
 *          l_int32       pixSetResolution()
 *          l_int32       pixCopyResolution()
 *          l_int32       pixScaleResolution()
 *          l_int32       pixGetInputFormat()
 *          l_int32       pixSetInputFormat()
 *          l_int32       pixCopyInputFormat()
 *          l_int32       pixSetSpecial()
 *          char         *pixGetText()
 *          l_int32       pixSetText()
 *          l_int32       pixAddText()
 *          l_int32       pixCopyText()
 *          l_uint8      *pixGetTextCompNew()
 *          l_int32      *pixSetTextCompNew()
 *          PIXCMAP      *pixGetColormap()
 *          l_int32       pixSetColormap()
 *          l_int32       pixDestroyColormap()
 *          l_uint32     *pixGetData()
 *          l_int32       pixFreeAndSetData()
 *          l_int32       pixSetData()
 *          l_int32       pixFreeData()
 *          l_uint32     *pixExtractData()
 *
 *    Pix line ptrs
 *          void        **pixGetLinePtrs()
 *
 *    Pix size comparisons
 *          l_int32       pixSizesEqual()
 *          l_int32       pixMaxAspectRatio()
 *
 *    Pix debug
 *          l_int32       pixPrintStreamInfo()
 *
 *
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 *      Important notes on direct management of pix image data
 *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 *
 *  Custom allocator and deallocator
 *  --------------------------------
 *
 *  At the lowest level, you can specify the function that does the
 *  allocation and deallocation of the data field in the pix.
 *  By default, this is malloc and free.  However, by calling
 *  setPixMemoryManager(), custom functions can be substituted.
 *  When using this, keep two things in mind:
 *
 *   (1) Call setPixMemoryManager() before any pix have been allocated
 *   (2) Destroy all pix as usual, in order to prevent leaks.
 *
 *  In pixalloc.c, we provide an example custom allocator and deallocator.
 *  To use it, you must call pmsCreate() before any pix have been allocated
 *  and pmsDestroy() at the end after all pix have been destroyed.
 *
 *
 *  Direct manipulation of the pix data field
 *  -----------------------------------------
 *
 *  Memory management of the (image) data field in the pix is
 *  handled differently from that in the colormap and text fields.
 *  For colormap and text, the functions pixSetColormap() and
 *  pixSetText() remove the existing heap data and insert the
 *  new data.  For the image data, pixSetData() just reassigns the
 *  data field; any existing data will be lost if there isn't
 *  another handle for it.
 *
 *  Why is pixSetData() limited in this way?  Because the image
 *  data can be very large, we need flexible ways to handle it,
 *  particularly when you want to re-use the data in a different
 *  context without making a copy.  Here are some different
 *  things you might want to do:
 *
 *  (1) Use pixCopy(pixd, pixs) where pixd is not the same size
 *      as pixs.  This will remove the data in pixd, allocate a
 *      new data field in pixd, and copy the data from pixs, leaving
 *      pixs unchanged.
 *
 *  (2) Use pixTransferAllData(pixd, &pixs, ...) to transfer the
 *      data from pixs to pixd without making a copy of it.  If
 *      pixs is not cloned, this will do the transfer and destroy pixs.
 *      But if the refcount of pixs is greater than 1, it just copies
 *      the data and decrements the ref count.
 *
 *  (3) Use pixSwapAndDestroy(pixd, &pixs) to replace pixs by an
 *      existing pixd.  This is similar to pixTransferAllData(), but
 *      simpler, in that it never makes any copies and if pixs is
 *      cloned, the other references are not changed by this operation.
 *
 *  (4) Use pixExtractData() to extract the image data from the pix
 *      without copying if possible.  This could be used, for example,
 *      to convert from a pix to some other data structure with minimal
 *      heap allocation.  After the data is extracated, the pixels can
 *      be munged and used in another context.  However, the danger
 *      here is that the pix might have a refcount > 1, in which case
 *      a copy of the data must be made and the input pix left unchanged.
 *      If there are no clones, the image data can be extracted without
 *      a copy, and the data ptr in the pix must be nulled before
 *      destroying it because the pix will no longer 'own' the data.
 *
 *  We have provided accessors and functions here that should be
 *  sufficient so that you can do anything you want without
 *  explicitly referencing any of the pix member fields.
 *
 *  However, to avoid memory smashes and leaks when doing special operations
 *  on the pix data field, look carefully at the behavior of the image
 *  data accessors and keep in mind that when you invoke pixDestroy(),
 *  the pix considers itself the owner of all its heap data.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" static void pixFree(PIX *pix); /*-------------------------------------------------------------------------* * Pix Memory Management * * * * These functions give you the freedom to specify at compile or run * * time the allocator and deallocator to be used for the pix raster * * image data. They have no effect on any other heap allocation, * * including the pix struct itself, which is controlled by the * * #defines in environ.h. * * * * The default functions for allocating pix raster data are malloc and * * free (or leptonica_* custom allocators if LEPTONICA_INTERCEPT_ALLOC * * is defined). Use setPixMemoryManager() to specify other functions * * to use specifically for pix raster image data. * *-------------------------------------------------------------------------*/ /*! Pix memory manager */ /* *
     * Notes:
     *      (1) The allocator and deallocator function types,
     *          alloc_fn and dealloc_fn, are defined in pix.h.
     * 
*/ struct PixMemoryManager { alloc_fn allocator; dealloc_fn deallocator; }; /*! Default Pix memory manager */ static struct PixMemoryManager pix_mem_manager = { #ifdef LEPTONICA_INTERCEPT_ALLOC &leptonica_malloc, &leptonica_free #else &malloc, &free #endif /* LEPTONICA_INTERCEPT_ALLOC */ }; static void * pixdata_malloc(size_t size) { #ifndef _MSC_VER return (*pix_mem_manager.allocator)(size); #else /* _MSC_VER */ /* Under MSVC++, pix_mem_manager is initialized after a call to * pixdata_malloc. Just ignore the custom allocator feature. */ return LEPT_MALLOC(size); #endif /* _MSC_VER */ } static void pixdata_free(void *ptr) { #ifndef _MSC_VER (*pix_mem_manager.deallocator)(ptr); #else /* _MSC_VER */ /* Under MSVC++, pix_mem_manager is initialized after a call to * pixdata_malloc. Just ignore the custom allocator feature. */ LEPT_FREE(ptr); #endif /* _MSC_VER */ } /*! * \brief setPixMemoryManager() * * \param[in] allocator [optional] use NULL to skip * \param[in] deallocator [optional] use NULL to skip * \return void * *
 * Notes:
 *      (1) Use this to change the alloc and/or dealloc functions;
 *          e.g., setPixMemoryManager(my_malloc, my_free).
 *      (2) The C99 standard (section 6.7.5.3, par. 8) says:
 *            A declaration of a parameter as "function returning type"
 *            shall be adjusted to "pointer to function returning type"
 *          so that it can be in either of these two forms:
 *            (a) type (function-ptr(type, ...))
 *            (b) type ((*function-ptr)(type, ...))
 *          because form (a) is implicitly converted to form (b), as in the
 *          definition of struct PixMemoryManager above.  So, for example,
 *          we should be able to declare either of these:
 *            (a) void *(allocator(size_t))
 *            (b) void *((*allocator)(size_t))
 *          However, MSVC++ only accepts the second version.
 * 
*/ void setPixMemoryManager(alloc_fn allocator, dealloc_fn deallocator) { if (allocator) pix_mem_manager.allocator = allocator; if (deallocator) pix_mem_manager.deallocator = deallocator; } /*--------------------------------------------------------------------* * Pix Creation * *--------------------------------------------------------------------*/ /*! * \brief pixCreate() * * \param[in] width, height, depth * \return pixd with data allocated and initialized to 0, * or NULL on error */ PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth) { PIX *pixd; if ((pixd = pixCreateNoInit(width, height, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); memset(pixd->data, 0, 4LL * pixd->wpl * pixd->h); return pixd; } /*! * \brief pixCreateNoInit() * * \param[in] width, height, depth * \return pixd with data allocated but not initialized, * or NULL on error * *
 * Notes:
 *      (1) Pad bits are set to avoid reading uninitialized data, because
 *          some optimized routines read from pad bits.
 *      (2) Initializing memory is very fast, so this optimization is
 *          not used in the library.
 * 
*/ PIX * pixCreateNoInit(l_int32 width, l_int32 height, l_int32 depth) { l_int32 wpl; PIX *pixd; l_uint32 *data; if ((pixd = pixCreateHeader(width, height, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); wpl = pixGetWpl(pixd); if ((data = (l_uint32 *)pixdata_malloc(4LL * wpl * height)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pixdata_malloc fail for data", __func__, NULL); } pixSetData(pixd, data); pixSetPadBits(pixd, 0); return pixd; } /*! * \brief pixCreateTemplate() * * \param[in] pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Makes a Pix of the same size as the input Pix, with the
 *          data array allocated and initialized to 0.
 *      (2) Copies the other fields, including colormap if it exists.
 * 
*/ PIX * pixCreateTemplate(const PIX *pixs) { PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); memset(pixd->data, 0, 4LL * pixd->wpl * pixd->h); return pixd; } /*! * \brief pixCreateTemplateNoInit() * * \param[in] pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Makes a Pix of the same size as the input Pix, with
 *          the data array allocated but not initialized to 0.
 *      (2) Copies the other fields, including colormap if it exists.
 *      (3) Pad bits are set to avoid reading uninitialized data, because
 *          some optimized routines read from pad bits.
 *      (4) Initializing memory is very fast, so this optimization is
 *          not used in the library.
 * 
*/ PIX * pixCreateTemplateNoInit(const PIX *pixs) { l_int32 w, h, d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if ((pixd = pixCreateNoInit(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixSetPadBits(pixd, 0); return pixd; } /*! * \brief pixCreateWithCmap() * * \param[in] width * \param[in] height * \param[in] depth 2, 4 or 8 bpp * \param[in] initcolor L_SET_BLACK, L_SET_WHITE * \return pixd with the initialization color assigned to all pixels, * or NULL on error. * *
 * Notes:
 *      (1) Creates a pix with a cmap, initialized to value 0.
 *      (2) Initializes the pix black or white by adding that color
 *          to the cmap at index 0.
 * 
*/ PIX * pixCreateWithCmap(l_int32 width, l_int32 height, l_int32 depth, l_int32 initcolor) { PIX *pix; PIXCMAP *cmap; if (depth != 2 && depth != 4 && depth != 8) return (PIX *)ERROR_PTR("depth not 2, 4 or 8 bpp", __func__, NULL); if ((pix = pixCreate(width, height, depth)) == NULL) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); cmap = pixcmapCreate(depth); pixSetColormap(pix, cmap); if (initcolor == L_SET_BLACK) pixcmapAddColor(cmap, 0, 0, 0); else /* L_SET_WHITE */ pixcmapAddColor(cmap, 255, 255, 255); return pix; } /*! * \brief pixCreateHeader() * * \param[in] width, height, depth * \return pixd with no data allocated, or NULL on error * *
 * Notes:
 *      (1) It is assumed that all 32 bit pix have 3 spp.  If there is
 *          a valid alpha channel, this will be set to 4 spp later.
 *      (2) All pixCreate*() functions call pixCreateHeader().
            If the number of bytes to be allocated is larger than the
 *          maximum value in an int32, we can get overflow, resulting
 *          in a smaller amount of memory actually being allocated.
 *          Later, an attempt to access memory that wasn't allocated will
 *          cause a crash.  So to avoid crashing a program (or worse)
 *          with bad (or malicious) input, we limit the requested
 *          allocation of image data in a typesafe way.
 * 
*/ PIX * pixCreateHeader(l_int32 width, l_int32 height, l_int32 depth) { l_int32 wpl; l_uint64 wpl64, bignum; PIX *pixd; if ((depth != 1) && (depth != 2) && (depth != 4) && (depth != 8) && (depth != 16) && (depth != 24) && (depth != 32)) return (PIX *)ERROR_PTR("depth must be {1, 2, 4, 8, 16, 24, 32}", __func__, NULL); if (width <= 0) return (PIX *)ERROR_PTR("width must be > 0", __func__, NULL); if (height <= 0) return (PIX *)ERROR_PTR("height must be > 0", __func__, NULL); /* Avoid overflow in malloc, malicious or otherwise */ wpl64 = ((l_uint64)width * (l_uint64)depth + 31) / 32; if (wpl64 > ((1LL << 24) - 1)) { L_ERROR("requested w = %d, h = %d, d = %d\n", __func__, width, height, depth); return (PIX *)ERROR_PTR("wpl >= 2^24", __func__, NULL); } wpl = (l_int32)wpl64; bignum = 4LL * wpl * height; /* number of bytes to be requested */ if (bignum > ((1LL << 31) - 1)) { L_ERROR("requested w = %d, h = %d, d = %d\n", __func__, width, height, depth); return (PIX *)ERROR_PTR("requested bytes >= 2^31", __func__, NULL); } #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION if (bignum > (1LL << 26)) { L_ERROR("fuzzer requested > 64 MB; refused\n", __func__); return NULL; } if (width > 20000) { L_ERROR("fuzzer requested width > 20K; refused\n", __func__); return NULL; } if (height > 20000) { L_ERROR("fuzzer requested height > 20K; refused\n", __func__); return NULL; } #endif /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */ if ((pixd = (PIX *)LEPT_CALLOC(1, sizeof(PIX))) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetWidth(pixd, width); pixSetHeight(pixd, height); pixSetDepth(pixd, depth); pixSetWpl(pixd, wpl); if (depth == 24 || depth == 32) pixSetSpp(pixd, 3); else pixSetSpp(pixd, 1); pixd->refcount = 1; pixd->informat = IFF_UNKNOWN; return pixd; } /*! * \brief pixClone() * * \param[in] pixs * \return same pix ptr, or NULL on error * *
 * Notes:
 *      (1) A "clone" is simply a handle (ptr) to an existing pix.
 *          It is implemented because (a) images can be large and
 *          hence expensive to copy, and (b) extra handles to a data
 *          structure need to be made with a simple policy to avoid
 *          both double frees and memory leaks.  Pix are reference
 *          counted.  The side effect of pixClone() is an increase
 *          by 1 in the ref count.
 *      (2) The protocol to be used is:
 *          (a) Whenever you want a new handle to an existing image,
 *              call pixClone(), which just bumps a ref count.
 *          (b) Always call pixDestroy() on all handles.  This
 *              decrements the ref count, nulls the handle, and
 *              only destroys the pix when pixDestroy() has been
 *              called on all handles.
 * 
*/ PIX * pixClone(PIX *pixs) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); ++pixs->refcount; return pixs; } /*--------------------------------------------------------------------* * Pix Destruction * *--------------------------------------------------------------------*/ /*! * \brief pixDestroy() * * \param[in,out] ppix will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the pix.
 *      (2) Always nulls the input ptr.
 * 
*/ void pixDestroy(PIX **ppix) { PIX *pix; if (!ppix) { L_WARNING("ptr address is null!\n", __func__); return; } if ((pix = *ppix) == NULL) return; pixFree(pix); *ppix = NULL; } /*! * \brief pixFree() * * \param[in] pix * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the pix.
 * 
*/ static void pixFree(PIX *pix) { l_uint32 *data; char *text; if (!pix) return; if (--pix->refcount == 0) { if ((data = pixGetData(pix)) != NULL) pixdata_free(data); if ((text = pixGetText(pix)) != NULL) LEPT_FREE(text); pixDestroyColormap(pix); LEPT_FREE(pix); } return; } /*-------------------------------------------------------------------------* * Pix Copy * *-------------------------------------------------------------------------*/ /*! * \brief pixCopy() * * \param[in] pixd [optional] can be null, equal to pixs, * different from pixs * \param[in] pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) There are three cases:
 *            (a) pixd == null  (makes a new pix; refcount = 1)
 *            (b) pixd == pixs  (no-op)
 *            (c) pixd != pixs  (data copy; no change in refcount)
 *          If the refcount of pixd > 1, case (c) will side-effect
 *          these handles.
 *      (2) The general pattern of use is:
 *             pixd = pixCopy(pixd, pixs);
 *          This will work for all three cases.
 *          For clarity when the case is known, you can use:
 *            (a) pixd = pixCopy(NULL, pixs);
 *            (c) pixCopy(pixd, pixs);
 *      (3) For case (c), we check if pixs and pixd are the same
 *          size (w,h,d).  If so, the data is copied directly.
 *          Otherwise, the data is reallocated to the correct size
 *          and the copy proceeds.  The refcount of pixd is unchanged.
 *      (4) This operation, like all others that may involve a pre-existing
 *          pixd, will side-effect any existing clones of pixd.
 * 
*/ PIX * pixCopy(PIX *pixd, /* can be null */ const PIX *pixs) { l_int32 bytes; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixs == pixd) return pixd; /* Total bytes in image data */ bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); /* If we're making a new pix ... */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); memcpy(pixd->data, pixs->data, bytes); return pixd; } /* Reallocate image data if sizes are different. If this fails, * pixd hasn't been changed. But we want to signal that the copy * failed, so return NULL. This will cause a memory leak if the * return ptr is assigned to pixd, but that is preferred to proceeding * with an incorrect pixd, and in any event this use case of * pixCopy() -- reallocating into an existing pix -- is infrequent. */ if (pixResizeImageData(pixd, pixs) == 1) return (PIX *)ERROR_PTR("reallocation of data failed", __func__, NULL); /* Copy non-image data fields */ pixCopyColormap(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopyText(pixd, pixs); /* Copy image data */ memcpy(pixd->data, pixs->data, bytes); return pixd; } /*! * \brief pixResizeImageData() * * \param[in] pixd gets new uninitialized buffer for image data * \param[in] pixs determines the size of the buffer; not changed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the sizes of data in pixs and pixd are unequal, this
 *          frees the existing image data in pixd and allocates
 *          an uninitialized buffer that will hold the required amount
 *          of image data in pixs.  The image data from pixs is not
 *          copied into the new buffer.
 *      (2) On failure to allocate, pixd is unchanged.
 * 
*/ l_ok pixResizeImageData(PIX *pixd, const PIX *pixs) { l_int32 w, h, d, wpl, bytes; l_uint32 *data; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixSizesEqual(pixs, pixd)) /* nothing to do */ return 0; /* Make sure we can copy the data */ pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); bytes = 4 * wpl * h; if ((data = (l_uint32 *)pixdata_malloc(bytes)) == NULL) return ERROR_INT("pixdata_malloc fail for data", __func__, 1); /* OK, do it */ pixSetWidth(pixd, w); pixSetHeight(pixd, h); pixSetDepth(pixd, d); pixSetWpl(pixd, wpl); pixFreeAndSetData(pixd, data); /* free old data and assign new data */ pixCopyResolution(pixd, pixs); return 0; } /*! * \brief pixCopyColormap() * * \param[in] pixd * \param[in] pixs copies the colormap to %pixd * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys the colormap in pixd, unless the operation is a no-op
 * 
*/ l_ok pixCopyColormap(PIX *pixd, const PIX *pixs) { l_int32 valid; const PIXCMAP *cmaps; PIXCMAP *cmapd; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ if (pixGetDepth(pixs) != pixGetDepth(pixd)) return ERROR_INT("depths of pixs and pixd differ", __func__, 1); pixDestroyColormap(pixd); if ((cmaps = pixs->colormap) == NULL) /* not an error */ return 0; pixcmapIsValid(cmaps, NULL, &valid); if (!valid) return ERROR_INT("cmap not valid", __func__, 1); if ((cmapd = pixcmapCopy(cmaps)) == NULL) return ERROR_INT("cmapd not made", __func__, 1); pixSetColormap(pixd, cmapd); return 0; } /*! * \brief pixTransferAllData() * * \param[in] pixd must be different from pixs * \param[in,out] ppixs will be nulled if refcount goes to 0 * \param[in] copytext 1 to copy the text field; 0 to skip * \param[in] copyformat 1 to copy the informat field; 0 to skip * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a complete data transfer from pixs to pixd,
 *          followed by the destruction of pixs (refcount permitting).
 *      (2) If the refcount of pixs is 1, pixs is destroyed.  Otherwise,
 *          the data in pixs is copied (rather than transferred) to pixd.
 *      (3) This operation, like all others with a pre-existing pixd,
 *          will side-effect any existing clones of pixd.  The pixd
 *          refcount does not change.
 *      (4) When might you use this?  Suppose you have an in-place Pix
 *          function (returning void) with the typical signature:
 *              void function-inplace(PIX *pix, ...)
 *          where "..." are non-pointer input parameters, and suppose
 *          further that you sometimes want to return an arbitrary Pix
 *          in place of the input Pix.  There are two ways you can do this:
 *          (a) The straightforward way is to change the function
 *              signature to take the address of the Pix ptr:
 * \code
 *                  void function-inplace(PIX **ppix, ...) {
 *                      PIX *pixt = function-makenew(*ppix);
 *                      pixDestroy(ppix);
 *                      *ppix = pixt;
 *                      return;
 *                  }
 * \endcode
 *              Here, the input and returned pix are different, as viewed
 *              by the calling function, and the inplace function is
 *              expected to destroy the input pix to avoid a memory leak.
 *          (b) Keep the signature the same and use pixTransferAllData()
 *              to return the new Pix in the input Pix struct:
 * \code
 *                  void function-inplace(PIX *pix, ...) {
 *                      PIX *pixt = function-makenew(pix);
 *                      pixTransferAllData(pix, &pixt, 0, 0);
 *                               // pixDestroy() is called on pixt
 *                      return;
 *                  }
 * \endcode
 *              Here, the input and returned pix are the same, as viewed
 *              by the calling function, and the inplace function must
 *              never destroy the input pix, because the calling function
 *              maintains an unchanged handle to it.
 * 
*/ l_ok pixTransferAllData(PIX *pixd, PIX **ppixs, l_int32 copytext, l_int32 copyformat) { l_int32 nbytes; PIX *pixs; if (!ppixs) return ERROR_INT("&pixs not defined", __func__, 1); if ((pixs = *ppixs) == NULL) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixs == pixd) /* no-op */ return ERROR_INT("pixd == pixs", __func__, 1); if (pixs->refcount == 1) { /* transfer the data, cmap, text */ pixFreeData(pixd); /* dealloc any existing data */ pixSetData(pixd, pixGetData(pixs)); /* transfer new data from pixs */ pixs->data = NULL; /* pixs no longer owns data */ pixDestroyColormap(pixd); /* free the old one, if it exists */ pixd->colormap = pixGetColormap(pixs); /* transfer to pixd */ pixs->colormap = NULL; /* pixs no longer owns colormap */ if (copytext) { pixSetText(pixd, pixGetText(pixs)); pixSetText(pixs, NULL); } } else { /* preserve pixs by making a copy of the data, cmap, text */ pixResizeImageData(pixd, pixs); nbytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); memcpy(pixGetData(pixd), pixGetData(pixs), nbytes); pixCopyColormap(pixd, pixs); if (copytext) pixCopyText(pixd, pixs); } pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyDimensions(pixd, pixs); if (copyformat) pixCopyInputFormat(pixd, pixs); /* This will destroy pixs if data was transferred; * otherwise, it just decrements its refcount. */ pixDestroy(ppixs); return 0; } /*! * \brief pixSwapAndDestroy() * * \param[out] ppixd [optional] input pixd can be null, * and it must be different from pixs * \param[in,out] ppixs will be nulled after the swap * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Simple operation to change the handle name safely.
 *          After this operation, the original image in pixd has
 *          been destroyed, pixd points to what was pixs, and
 *          the input pixs ptr has been nulled.
 *      (2) This works safely whether or not pixs and pixd are cloned.
 *          If pixs is cloned, the other handles still point to
 *          the original image, with the ref count reduced by 1.
 *      (3) Usage example:
 * \code
 *            Pix *pix1 = pixRead("...");
 *            Pix *pix2 = function(pix1, ...);
 *            pixSwapAndDestroy(&pix1, &pix2);
 *            pixDestroy(&pix1);  // holds what was in pix2
 * \endcode
 *          Example with clones ([] shows ref count of image generated
 *                               by the function):
 * \code
 *            Pix *pixs = pixRead("...");
 *            Pix *pix1 = pixClone(pixs);
 *            Pix *pix2 = function(pix1, ...);   [1]
 *            Pix *pix3 = pixClone(pix2);   [1] --> [2]
 *            pixSwapAndDestroy(&pix1, &pix2);
 *            pixDestroy(&pixs);  // still holds read image
 *            pixDestroy(&pix1);  // holds what was in pix2  [2] --> [1]
 *            pixDestroy(&pix3);  // holds what was in pix2  [1] --> [0]
 * \endcode
 * 
*/ l_ok pixSwapAndDestroy(PIX **ppixd, PIX **ppixs) { if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); if (!ppixs) return ERROR_INT("&pixs not defined", __func__, 1); if (*ppixs == NULL) return ERROR_INT("pixs not defined", __func__, 1); if (ppixs == ppixd) /* no-op */ return ERROR_INT("&pixd == &pixs", __func__, 1); pixDestroy(ppixd); *ppixd = pixClone(*ppixs); pixDestroy(ppixs); return 0; } /*--------------------------------------------------------------------* * Pix Accessors * *--------------------------------------------------------------------*/ l_int32 pixGetWidth(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->w; } l_int32 pixSetWidth(PIX *pix, l_int32 width) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (width < 0) { pix->w = 0; return ERROR_INT("width must be >= 0", __func__, 1); } pix->w = width; return 0; } l_int32 pixGetHeight(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->h; } l_int32 pixSetHeight(PIX *pix, l_int32 height) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (height < 0) { pix->h = 0; return ERROR_INT("h must be >= 0", __func__, 1); } pix->h = height; return 0; } l_int32 pixGetDepth(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->d; } l_int32 pixSetDepth(PIX *pix, l_int32 depth) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (depth < 1) return ERROR_INT("d must be >= 1", __func__, 1); pix->d = depth; return 0; } /*! * \brief pixGetDimensions() * * \param[in] pix * \param[out] pw, ph, pd [optional] each can be null * \return 0 if OK, 1 on error */ l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd) { if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pw) *pw = pix->w; if (ph) *ph = pix->h; if (pd) *pd = pix->d; return 0; } /*! * \brief pixSetDimensions() * * \param[in] pix * \param[in] w, h, d use 0 to skip the setting for any of these * \return 0 if OK, 1 on error */ l_ok pixSetDimensions(PIX *pix, l_int32 w, l_int32 h, l_int32 d) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (w > 0) pixSetWidth(pix, w); if (h > 0) pixSetHeight(pix, h); if (d > 0) pixSetDepth(pix, d); return 0; } /*! * \brief pixCopyDimensions() * * \param[in] pixd * \param[in] pixs * \return 0 if OK, 1 on error */ l_ok pixCopyDimensions(PIX *pixd, const PIX *pixs) { if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ pixSetWidth(pixd, pixGetWidth(pixs)); pixSetHeight(pixd, pixGetHeight(pixs)); pixSetDepth(pixd, pixGetDepth(pixs)); pixSetWpl(pixd, pixGetWpl(pixs)); return 0; } l_int32 pixGetSpp(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->spp; } /* * \brief pixSetSpp() * * \param[in] pix * \param[in] spp 1, 3 or 4 samples * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For a 32 bpp pix, this can be used to ignore the
 *          alpha sample (spp == 3) or to use it (spp == 4).
 *          For example, to write a spp == 4 image without the alpha
 *          sample (as an rgb pix), call pixSetSpp(pix, 3) and
 *          then write it out as a png.
 * 
*/ l_int32 pixSetSpp(PIX *pix, l_int32 spp) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (spp < 1) return ERROR_INT("spp must be >= 1", __func__, 1); pix->spp = spp; return 0; } /*! * \brief pixCopySpp() * * \param[in] pixd * \param[in] pixs * \return 0 if OK, 1 on error */ l_ok pixCopySpp(PIX *pixd, const PIX *pixs) { if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ pixSetSpp(pixd, pixGetSpp(pixs)); return 0; } l_int32 pixGetWpl(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->wpl; } l_int32 pixSetWpl(PIX *pix, l_int32 wpl) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->wpl = wpl; return 0; } l_int32 pixGetXRes(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->xres; } l_int32 pixSetXRes(PIX *pix, l_int32 res) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->xres = res; return 0; } l_int32 pixGetYRes(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->yres; } l_int32 pixSetYRes(PIX *pix, l_int32 res) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->yres = res; return 0; } /*! * \brief pixGetResolution() * * \param[in] pix * \param[out] pxres, pyres [optional] each can be null * \return 0 if OK, 1 on error */ l_ok pixGetResolution(const PIX *pix, l_int32 *pxres, l_int32 *pyres) { if (pxres) *pxres = 0; if (pyres) *pyres = 0; if (!pxres && !pyres) return ERROR_INT("no output requested", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pxres) *pxres = pix->xres; if (pyres) *pyres = pix->yres; return 0; } /*! * \brief pixSetResolution() * * \param[in] pix * \param[in] xres, yres use 0 to skip setting a value for either of these * \return 0 if OK, 1 on error */ l_ok pixSetResolution(PIX *pix, l_int32 xres, l_int32 yres) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (xres > 0) pix->xres = xres; if (yres > 0) pix->yres = yres; return 0; } l_int32 pixCopyResolution(PIX *pixd, const PIX *pixs) { if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ pixSetXRes(pixd, pixGetXRes(pixs)); pixSetYRes(pixd, pixGetYRes(pixs)); return 0; } l_int32 pixScaleResolution(PIX *pix, l_float32 xscale, l_float32 yscale) { l_float64 xres, yres; l_float64 maxres = 100000000.0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (xscale <= 0 || yscale <= 0) return ERROR_INT("invalid scaling ratio", __func__, 1); xres = (l_float64)xscale * (l_float32)(pix->xres) + 0.5; yres = (l_float64)yscale * (l_float32)(pix->yres) + 0.5; pix->xres = (l_uint32)L_MIN(xres, maxres); pix->yres = (l_uint32)L_MIN(yres, maxres); return 0; } l_int32 pixGetInputFormat(const PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 0); return pix->informat; } l_int32 pixSetInputFormat(PIX *pix, l_int32 informat) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->informat = informat; return 0; } l_int32 pixCopyInputFormat(PIX *pixd, const PIX *pixs) { if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ pixSetInputFormat(pixd, pixGetInputFormat(pixs)); return 0; } l_int32 pixSetSpecial(PIX *pix, l_int32 special) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->special = special; return 0; } /*! * \brief pixGetText() * * \param[in] pix * \return ptr to existing text string * *
 * Notes:
 *      (1) The text string belongs to the pix:
 *          * the caller must NOT free it
 *          * it must not be used after the pix is destroyed
 * 
*/ char * pixGetText(PIX *pix) { if (!pix) return (char *)ERROR_PTR("pix not defined", __func__, NULL); return pix->text; } /*! * \brief pixSetText() * * \param[in] pix * \param[in] textstring can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This removes any existing textstring and puts a copy of
 *          the input textstring there.
 * 
*/ l_ok pixSetText(PIX *pix, const char *textstring) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); stringReplace(&pix->text, textstring); return 0; } /*! * \brief pixAddText() * * \param[in] pix * \param[in] textstring can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This adds the new textstring to any existing text.
 *      (2) Either or both the existing text and the new text
 *          string can be null.
 * 
*/ l_ok pixAddText(PIX *pix, const char *textstring) { char *newstring; if (!pix) return ERROR_INT("pix not defined", __func__, 1); newstring = stringJoin(pixGetText(pix), textstring); stringReplace(&pix->text, newstring); LEPT_FREE(newstring); return 0; } l_int32 pixCopyText(PIX *pixd, const PIX *pixs) { if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixs == pixd) return 0; /* no-op */ pixSetText(pixd, pixs->text); return 0; } /*! * \brief pixGetTextCompNew() * * \param[in] pix * \param[out] psize this number of bytes of returned binary data * \return ptr to binary data derived from the text string in the pix, * after decoding and uncompressing * *
 * Notes:
 *      (1) The ascii string in the text field of the input pix was
 *          previously stored there using pixSetTextCompNew().
 *      (2) This retrieves the string and performs ascii85 decoding
 *          followed by decompression on it.  The returned binary data
 *          is owned by the caller and must be freed.
 * 
*/ l_uint8 * pixGetTextCompNew(PIX *pix, size_t *psize) { char *str; if (!pix) return (l_uint8 *)ERROR_PTR("pix not defined", __func__, NULL); str = pixGetText(pix); return decodeAscii85WithComp(str, strlen(str), psize); } /*! * \brief pixSetTextCompNew() * * \param[in] pix * \param[in] data binary data * \param[in] size number of bytes of binary data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This receives binary data and performs compression and ascii85
 *          encoding on it.  The ascii result is stored in the input pix,
 *          replacing any string that may be there.
 *      (2) The input %data can be reconstructed using pixGetTextCompNew().
 * 
*/ l_ok pixSetTextCompNew(PIX *pix, const l_uint8 *data, size_t size) { size_t encodesize; /* ignored */ if (!pix) return ERROR_INT("pix not defined", __func__, 1); LEPT_FREE(pix->text); pix->text = encodeAscii85WithComp(data, size, &encodesize); return 0; } PIXCMAP * pixGetColormap(PIX *pix) { if (!pix) return (PIXCMAP *)ERROR_PTR("pix not defined", __func__, NULL); return pix->colormap; } /*! * \brief pixSetColormap() * * \param[in] pix * \param[in] colormap optional; can be null. * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) If %colormap is not defined, this is a no-op.
 *      (2) This destroys any existing colormap before assigning the
 *          new %colormap to %pix.
 *      (3) If the colormap is not valid, this returns 1.  The caller
 *          should check if there is a possibility that the pix and
 *          colormap depths differ.
 *      (4) This does not do the work of checking pixs for a pixel value
 *          that is out of bounds for the colormap -- that only needs to
 *          be done when reading and writing with an I/O library like
 *          png and gif.
 *      (5) Because colormaps are not ref counted, the new colormap
 *          must not belong to any other pix.
 * 
*/ l_ok pixSetColormap(PIX *pix, PIXCMAP *colormap) { l_int32 valid; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!colormap) return 0; /* Make sure the colormap doesn't get lost */ pixDestroyColormap(pix); pix->colormap = colormap; pixcmapIsValid(colormap, NULL, &valid); if (!valid) return ERROR_INT("colormap is not valid", __func__, 1); return 0; } /*! * \brief pixDestroyColormap() * * \param[in] pix * \return 0 if OK, 1 on error */ l_ok pixDestroyColormap(PIX *pix) { PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((cmap = pix->colormap) != NULL) { pixcmapDestroy(&cmap); pix->colormap = NULL; } return 0; } /*! * \brief pixGetData() * * \param[in] pix * \return ptr to image data * *
 * Notes:
 *      (1) This gives a new handle for the data.  The data is still
 *          owned by the pix, so do not call LEPT_FREE() on it.
 *      (2) This cannot guarantee that the pix data returned will not
 *          be changed, so %pix cannot be declared const.  And because
 *          most imaging operations call this for access to the data,
 *          this prevents them from declaring %pix to be const, even if
 *          they only use the data for inspection.
 * 
*/ l_uint32 * pixGetData(PIX *pix) { if (!pix) return (l_uint32 *)ERROR_PTR("pix not defined", __func__, NULL); return pix->data; } /*! * \brief pixFreeAndSetData() * * \param[in] pix * \param[in] data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This frees the existing raster data in the pix and assigns %data.
 * 
*/ l_int32 pixFreeAndSetData(PIX *pix, l_uint32 *data) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixFreeData(pix); pix->data = data; return 0; } /*! * \brief pixSetData() * * \param[in] pix * \param[in] data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does not free any existing data.  To free existing
 *          data, use pixFreeAndSetData() instead.
 * 
*/ l_int32 pixSetData(PIX *pix, l_uint32 *data) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); pix->data = data; return 0; } /*! * \brief pixFreeData() * * \param[in] pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This frees the data and sets the pix data ptr to null.
 *          It should be used before pixSetData() in the situation where
 *          you want to free any existing data before doing
 *          a subsequent assignment with pixSetData().
 * 
*/ l_int32 pixFreeData(PIX *pix) { l_uint32 *data; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((data = pixGetData(pix)) != NULL) { pixdata_free(data); pix->data = NULL; } return 0; } /*! * \brief pixExtractData() * * \param[in] pix * \return ptr to data, or null on error * *
 * Notes:
 *      (1) This extracts the pix image data for use in another context.
 *          The caller still needs to use pixDestroy() on the input pix.
 *      (2) If refcount == 1, the data is extracted and the
 *          pix->data ptr is set to NULL.
 *      (3) If refcount > 1, this simply returns a copy of the data,
 *          using the pix allocator, and leaving the input pix unchanged.
 * 
*/ l_uint32 * pixExtractData(PIX *pixs) { l_int32 bytes; l_uint32 *data, *datas; if (!pixs) return (l_uint32 *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixs->refcount == 1) { /* extract */ data = pixGetData(pixs); pixSetData(pixs, NULL); } else { /* refcount > 1; copy */ bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); datas = pixGetData(pixs); if ((data = (l_uint32 *)pixdata_malloc(bytes)) == NULL) return (l_uint32 *)ERROR_PTR("data not made", __func__, NULL); memcpy(data, datas, bytes); } return data; } /*--------------------------------------------------------------------* * Pix line ptrs * *--------------------------------------------------------------------*/ /*! * \brief pixGetLinePtrs() * * \param[in] pix * \param[out] psize [optional] array size, which is the pix height * \return array of line ptrs, or NULL on error * *
 * Notes:
 *      (1) This is intended to be used for fast random pixel access.
 *          For example, for an 8 bpp image,
 *              val = GET_DATA_BYTE(lines8[i], j);
 *          is equivalent to, but much faster than,
 *              pixGetPixel(pix, j, i, &val);
 *      (2) How much faster?  For 1 bpp, it's from 6 to 10x faster.
 *          For 8 bpp, it's an amazing 30x faster.  So if you are
 *          doing random access over a substantial part of the image,
 *          use this line ptr array.
 *      (3) When random access is used in conjunction with a stack,
 *          queue or heap, the overall computation time depends on
 *          the operations performed on each struct that is popped
 *          or pushed, and whether we are using a priority queue (O(logn))
 *          or a queue or stack (O(1)).  For example, for maze search,
 *          the overall ratio of time for line ptrs vs. pixGet/Set* is
 *             Maze type     Type                   Time ratio
 *               binary      queue                     0.4
 *               gray        heap (priority queue)     0.6
 *      (4) Because this returns a void** and the accessors take void*,
 *          the compiler cannot check the pointer types.  It is
 *          strongly recommended that you adopt a naming scheme for
 *          the returned ptr arrays that indicates the pixel depth.
 *          (This follows the original intent of Simonyi's "Hungarian"
 *          application notation, where naming is used proactively
 *          to make errors visibly obvious.)  By doing this, you can
 *          tell by inspection if the correct accessor is used.
 *          For example, for an 8 bpp pixg:
 *              void **lineg8 = pixGetLinePtrs(pixg, NULL);
 *              val = GET_DATA_BYTE(lineg8[i], j);  // fast access; BYTE, 8
 *              ...
 *              LEPT_FREE(lineg8);  // don't forget this
 *      (5) These are convenient for accessing bytes sequentially in an
 *          8 bpp grayscale image.  People who write image processing code
 *          on 8 bpp images are accustomed to grabbing pixels directly out
 *          of the raster array.  Note that for little endians, you first
 *          need to reverse the byte order in each 32-bit word.
 *          Here's a typical usage pattern:
 *              pixEndianByteSwap(pix);   // always safe; no-op on big-endians
 *              l_uint8 **lineptrs = (l_uint8 **)pixGetLinePtrs(pix, NULL);
 *              pixGetDimensions(pix, &w, &h, NULL);
 *              for (i = 0; i < h; i++) {
 *                  l_uint8 *line = lineptrs[i];
 *                  for (j = 0; j < w; j++) {
 *                      val = line[j];
 *                      ...
 *                  }
 *              }
 *              pixEndianByteSwap(pix);  // restore big-endian order
 *              LEPT_FREE(lineptrs);
 *          This can be done even more simply as follows:
 *              l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h);
 *              for (i = 0; i < h; i++) {
 *                  l_uint8 *line = lineptrs[i];
 *                  for (j = 0; j < w; j++) {
 *                      val = line[j];
 *                      ...
 *                  }
 *              }
 *              pixCleanupByteProcessing(pix, lineptrs);
 * 
*/ void ** pixGetLinePtrs(PIX *pix, l_int32 *psize) { l_int32 i, h, wpl; l_uint32 *data; void **lines; if (psize) *psize = 0; if (!pix) return (void **)ERROR_PTR("pix not defined", __func__, NULL); h = pixGetHeight(pix); if (psize) *psize = h; if ((lines = (void **)LEPT_CALLOC(h, sizeof(void *))) == NULL) return (void **)ERROR_PTR("lines not made", __func__, NULL); wpl = pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < h; i++) lines[i] = (void *)(data + i * wpl); return lines; } /*--------------------------------------------------------------------* * Pix Size Comparisons * *--------------------------------------------------------------------*/ /*! * \brief pixSizesEqual() * * \param[in] pix1, pix2 * \return 1 if the two pix have same {h, w, d}; 0 otherwise. */ l_int32 pixSizesEqual(const PIX *pix1, const PIX *pix2) { if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", __func__, 0); if (pix1 == pix2) return 1; if ((pixGetWidth(pix1) != pixGetWidth(pix2)) || (pixGetHeight(pix1) != pixGetHeight(pix2)) || (pixGetDepth(pix1) != pixGetDepth(pix2))) return 0; else return 1; } /*! * \brief pixMaxAspectRatio() * * \param[in] pixs 32 bpp rgb * \param[out] pratio max aspect ratio, >= 1.0; -1.0 on error * \return 0 if OK, 1 on error */ l_ok pixMaxAspectRatio(PIX *pixs, l_float32 *pratio) { l_int32 w, h; if (!pratio) return ERROR_INT("&ratio not defined", __func__, 1); *pratio = -1.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w == 0 || h == 0) { L_ERROR("invalid size: w = %d, h = %d\n", __func__, w, h); return 1; } *pratio = L_MAX((l_float32)h / (l_float32)w, (l_float32)w / (l_float32)h); return 0; } /*--------------------------------------------------------------------* * Print output for debugging * *--------------------------------------------------------------------*/ extern const char *ImageFileFormatExtensions[]; /*! * \brief pixPrintStreamInfo() * * \param[in] fp file stream * \param[in] pix * \param[in] text [optional] identifying string; can be null * \return 0 if OK, 1 on error */ l_ok pixPrintStreamInfo(FILE *fp, const PIX *pix, const char *text) { l_int32 informat; const PIXCMAP *cmap; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (text) fprintf(fp, " Pix Info for %s:\n", text); fprintf(fp, " width = %d, height = %d, depth = %d, spp = %d\n", pixGetWidth(pix), pixGetHeight(pix), pixGetDepth(pix), pixGetSpp(pix)); fprintf(fp, " wpl = %d, data = %p, refcount = %d\n", pixGetWpl(pix), pix->data, pix->refcount); fprintf(fp, " xres = %d, yres = %d\n", pixGetXRes(pix), pixGetYRes(pix)); if ((cmap = pix->colormap) != NULL) pixcmapWriteStream(fp, cmap); else fprintf(fp, " no colormap\n"); informat = pixGetInputFormat(pix); fprintf(fp, " input format: %d (%s)\n", informat, ImageFileFormatExtensions[informat]); if (pix->text != NULL) fprintf(fp, " text: %s\n", pix->text); return 0; } leptonica-1.86.0/src/pix2.c000066400000000000000000003266311506303110300154040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pix2.c *
 *
 *    This file has these basic operations:
 *
 *      (1) Get and set: individual pixels, full image, rectangular region,
 *          pad pixels, border pixels, and color components for RGB
 *      (2) Add and remove border pixels
 *      (3) Endian byte swaps
 *      (4) Simple method for byte-processing images (instead of words)
 *
 *      Pixel poking
 *           l_int32     pixGetPixel()
 *           l_int32     pixSetPixel()
 *           l_int32     pixGetRGBPixel()
 *           l_int32     pixSetRGBPixel()
 *           l_int32     pixSetCmapPixel()
 *           l_int32     pixGetRandomPixel()
 *           l_int32     pixClearPixel()
 *           l_int32     pixFlipPixel()
 *           void        setPixelLow()
 *
 *      Find black or white value
 *           l_int32     pixGetBlackOrWhiteVal()
 *
 *      Full image clear/set/set-to-arbitrary-value
 *           l_int32     pixClearAll()
 *           l_int32     pixSetAll()
 *           l_int32     pixSetAllGray()
 *           l_int32     pixSetAllArbitrary()
 *           l_int32     pixSetBlackOrWhite()
 *           l_int32     pixSetComponentArbitrary()
 *
 *      Rectangular region clear/set/set-to-arbitrary-value/blend
 *           l_int32     pixClearInRect()
 *           l_int32     pixSetInRect()
 *           l_int32     pixSetInRectArbitrary()
 *           l_int32     pixBlendInRect()
 *
 *      Set pad bits
 *           l_int32     pixSetPadBits()
 *           l_int32     pixSetPadBitsBand()
 *
 *      Assign border pixels
 *           l_int32     pixSetOrClearBorder()
 *           l_int32     pixSetBorderVal()
 *           l_int32     pixSetBorderRingVal()
 *           l_int32     pixSetMirroredBorder()
 *           PIX        *pixCopyBorder()
 *
 *      Add and remove border
 *           PIX        *pixAddBorder()
 *           PIX        *pixAddBlackOrWhiteBorder()
 *           PIX        *pixAddBorderGeneral()
 *           PIX        *pixAddMultipleBlackWhiteBorders()
 *           PIX        *pixRemoveBorder()
 *           PIX        *pixRemoveBorderGeneral()
 *           PIX        *pixRemoveBorderToSize()
 *           PIX        *pixAddMirroredBorder()
 *           PIX        *pixAddRepeatedBorder()
 *           PIX        *pixAddMixedBorder()
 *           PIX        *pixAddContinuedBorder()
 *
 *      Helper functions using alpha
 *           l_int32     pixShiftAndTransferAlpha()
 *           PIX        *pixDisplayLayersRGBA()
 *
 *      Color sample setting and extraction
 *           PIX        *pixCreateRGBImage()
 *           PIX        *pixGetRGBComponent()
 *           l_int32     pixSetRGBComponent()
 *           PIX        *pixGetRGBComponentCmap()
 *           l_int32     pixCopyRGBComponent()
 *           l_int32     composeRGBPixel()
 *           l_int32     composeRGBAPixel()
 *           void        extractRGBValues()
 *           void        extractRGBAValues()
 *           l_int32     extractMinMaxComponent()
 *           l_int32     pixGetRGBLine()
 *
 *      Raster line pixel setter
 *           l_int32     setLineDataVal()
 *
 *      Conversion between big and little endians
 *           PIX        *pixEndianByteSwapNew()
 *           l_int32     pixEndianByteSwap()
 *           l_int32     lineEndianByteSwap()
 *           PIX        *pixEndianTwoByteSwapNew()
 *           l_int32     pixEndianTwoByteSwap()
 *
 *      Extract raster data as binary string
 *           l_int32     pixGetRasterData()
 *
 *      Test alpha component opaqueness
 *           l_int32     pixAlphaIsOpaque()
 *
 *      Infer resolution from image size
 *           l_int32     pixInferResolution()
 *
 *      Setup helpers for 8 bpp byte processing
 *           l_uint8   **pixSetupByteProcessing()
 *           l_int32     pixCleanupByteProcessing()
 *
 *      Setting parameters for antialias masking with alpha transforms
 *           void        l_setAlphaMaskBorder()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /* This is a global that determines the default 8 bpp alpha mask values * for rings at distance 1 and 2 from the border. Declare extern * to use. To change the values, use l_setAlphaMaskBorder(). */ LEPT_DLL l_float32 AlphaMaskBorderVals[2] = {0.0, 0.5}; #ifndef NO_CONSOLE_IO #define DEBUG_SERIALIZE 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Pixel poking * *-------------------------------------------------------------*/ /*! * \brief pixGetPixel() * * \param[in] pix * \param[in] x,y pixel coords * \param[out] pval pixel value * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) This returns the value in the data array.  If the pix is
 *          colormapped, it returns the colormap index, not the rgb value.
 *      (2) Because of the function overhead and the parameter checking,
 *          this is much slower than using the GET_DATA_*() macros directly.
 *          Speed on a 1 Mpixel RGB image, using a 3 GHz machine:
 *            * pixGet/pixSet: ~25 Mpix/sec
 *            * GET_DATA/SET_DATA: ~350 MPix/sec
 *          If speed is important and you're doing random access into
 *          the pix, use pixGetLinePtrs() and the array access macros.
 *      (3) If the point is outside the image, this returns an error (2),
 *          with 0 in %pval.  To avoid spamming output, it fails silently.
 * 
*/ l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval) { l_int32 w, h, d, wpl, val; l_uint32 *line, *data; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w || y < 0 || y >= h) return 2; wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; switch (d) { case 1: val = GET_DATA_BIT(line, x); break; case 2: val = GET_DATA_DIBIT(line, x); break; case 4: val = GET_DATA_QBIT(line, x); break; case 8: val = GET_DATA_BYTE(line, x); break; case 16: val = GET_DATA_TWO_BYTES(line, x); break; case 32: val = line[x]; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", __func__, 1); } *pval = val; return 0; } /*! * \brief pixSetPixel() * * \param[in] pix * \param[in] x,y pixel coords * \param[in] val value to be inserted * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) Warning: the input value is not checked for overflow with respect
 *          the the depth of %pix, and the sign bit (if any) is ignored.
 *          * For d == 1, %val > 0 sets the bit on.
 *          * For d == 2, 4, 8 and 16, %val is masked to the maximum allowable
 *            pixel value, and any (invalid) higher order bits are discarded.
 *      (2) See pixGetPixel() for information on performance.
 *      (3) If the point is outside the image, this returns an error (2),
 *          with 0 in %pval.  To avoid spamming output, it fails silently.
 * 
*/ l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val) { l_int32 w, h, d, wpl; l_uint32 *line, *data; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w || y < 0 || y >= h) return 2; data = pixGetData(pix); wpl = pixGetWpl(pix); line = data + y * wpl; switch (d) { case 1: if (val) SET_DATA_BIT(line, x); else CLEAR_DATA_BIT(line, x); break; case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", __func__, 1); } return 0; } /*! * \brief pixGetRGBPixel() * * \param[in] pix 32 bpp rgb, not colormapped * \param[in] x,y pixel coords * \param[out] prval [optional] red component * \param[out] pgval [optional] green component * \param[out] pbval [optional] blue component * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) If the point is outside the image, this returns an error (2),
 *          with 0 in %pval.  To avoid spamming output, it fails silently.
 * 
*/ l_ok pixGetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 w, h, d, wpl; l_uint32 *data, *ppixel; if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval && !pgval && !pbval) return ERROR_INT("no output requested", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", __func__, 1); if (x < 0 || x >= w || y < 0 || y >= h) return 2; wpl = pixGetWpl(pix); data = pixGetData(pix); ppixel = data + y * wpl + x; if (prval) *prval = GET_DATA_BYTE(ppixel, COLOR_RED); if (pgval) *pgval = GET_DATA_BYTE(ppixel, COLOR_GREEN); if (pbval) *pbval = GET_DATA_BYTE(ppixel, COLOR_BLUE); return 0; } /*! * \brief pixSetRGBPixel() * * \param[in] pix 32 bpp rgb * \param[in] x,y pixel coords * \param[in] rval red component * \param[in] gval green component * \param[in] bval blue component * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) If the point is outside the image, this returns an error (2),
 *          and to avoid spamming output, it fails silently.
 * 
*/ l_ok pixSetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, wpl; l_uint32 pixel; l_uint32 *data, *line; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", __func__, 1); if (x < 0 || x >= w || y < 0 || y >= h) return 2; wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; composeRGBPixel(rval, gval, bval, &pixel); *(line + x) = pixel; return 0; } /*! * \brief pixSetCmapPixel() * * \param[in] pix 2, 4 or 8 bpp, colormapped * \param[in] x,y pixel coords * \param[in] rval red component * \param[in] gval green component * \param[in] bval blue component * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) If the point is outside the image, this returns an error (2),
 *          and to avoid spamming output, it fails silently.
 *      (2) - If the color already exists, use it.
 *          - If the color does not exist in the colormap, it is added
 *            if possible.
 *          - If there is not room in the colormap for the new color:
 *            * if d < 8, return 2 with a warning.
 *            * if d == 8, find and use the nearest color.
 *      (3) Note that this operation scales with the number of colors
 *          in the colormap, and therefore can be very expensive if an
 *          attempt is made to set many pixels.  (In that case, it should
 *          be implemented with a map:rgb-->index for efficiency.)
 *          This is best used with very small images.
 * 
*/ l_ok pixSetCmapPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, index; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((cmap = pixGetColormap(pix)) == NULL) return ERROR_INT("pix is not colormapped", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return ERROR_INT("pix depth not 2, 4 or 8", __func__, 1); if (x < 0 || x >= w || y < 0 || y >= h) return 2; if (d == 8) { /* always add */ pixcmapAddNearestColor(cmap, rval, gval, bval, &index); } else { /* d < 8 */ if (pixcmapAddNewColor(cmap, rval, gval, bval, &index) == 2) return ERROR_INT("colormap is full", __func__, 2); } pixSetPixel(pix, x, y, index); return 0; } /*! * \brief pixGetRandomPixel() * * \param[in] pix any depth; can be colormapped * \param[out] pval [optional] pixel value * \param[out] px [optional] x coordinate chosen; can be null * \param[out] py [optional] y coordinate chosen; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If the pix is colormapped, it returns the rgb value.
 * 
*/ l_ok pixGetRandomPixel(PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py) { l_int32 w, h, x, y, rval, gval, bval; l_uint32 val; PIXCMAP *cmap; if (pval) *pval = 0; if (px) *px = 0; if (py) *py = 0; if (!pval && !px && !py) return ERROR_INT("no output requested", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); x = rand() % w; y = rand() % h; if (px) *px = x; if (py) *py = y; if (pval) { pixGetPixel(pix, x, y, &val); if ((cmap = pixGetColormap(pix)) != NULL) { pixcmapGetColor(cmap, val, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, pval); } else { *pval = val; } } return 0; } /*! * \brief pixClearPixel() * * \param[in] pix any depth; warning if colormapped * \param[in] x,y pixel coords * \return 0 if OK; 1 or 2 on error. * *
 * Notes:
 *      (1) If the point is outside the image, this returns an error (2),
 *          with 0 in %pval.  To avoid spamming output, it fails silently.
 * 
*/ l_ok pixClearPixel(PIX *pix, l_int32 x, l_int32 y) { l_int32 w, h, d, wpl; l_uint32 *line, *data; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pixGetColormap(pix)) L_WARNING("cmapped: setting to 0 may not be intended\n", __func__); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w || y < 0 || y >= h) return 2; wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; switch (d) { case 1: CLEAR_DATA_BIT(line, x); break; case 2: CLEAR_DATA_DIBIT(line, x); break; case 4: CLEAR_DATA_QBIT(line, x); break; case 8: SET_DATA_BYTE(line, x, 0); break; case 16: SET_DATA_TWO_BYTES(line, x, 0); break; case 32: line[x] = 0; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", __func__, 1); } return 0; } /*! * \brief pixFlipPixel() * * \param[in] pix any depth, warning if colormapped * \param[in] x,y pixel coords * \return 0 if OK; 1 or 2 on error * *
 * Notes:
 *      (1) If the point is outside the image, this returns an error (2),
 *          with 0 in %pval.  To avoid spamming output, it fails silently.
 * 
*/ l_ok pixFlipPixel(PIX *pix, l_int32 x, l_int32 y) { l_int32 w, h, d, wpl; l_uint32 val; l_uint32 *line, *data; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pixGetColormap(pix)) L_WARNING("cmapped: setting to 0 may not be intended\n", __func__); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w || y < 0 || y >= h) return 2; data = pixGetData(pix); wpl = pixGetWpl(pix); line = data + y * wpl; switch (d) { case 1: val = GET_DATA_BIT(line, x); if (val) CLEAR_DATA_BIT(line, x); else SET_DATA_BIT(line, x); break; case 2: val = GET_DATA_DIBIT(line, x); val ^= 0x3; SET_DATA_DIBIT(line, x, val); break; case 4: val = GET_DATA_QBIT(line, x); val ^= 0xf; SET_DATA_QBIT(line, x, val); break; case 8: val = GET_DATA_BYTE(line, x); val ^= 0xff; SET_DATA_BYTE(line, x, val); break; case 16: val = GET_DATA_TWO_BYTES(line, x); val ^= 0xffff; SET_DATA_TWO_BYTES(line, x, val); break; case 32: val = line[x] ^ 0xffffffff; line[x] = val; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", __func__, 1); } return 0; } /*! * \brief setPixelLow() * * \param[in] line ptr to beginning of line, * \param[in] x pixel location in line * \param[in] depth bpp * \param[in] val to be inserted * \return void * *
 * Notes:
 *      (1) Caution: input variables are not checked!
 * 
*/ void setPixelLow(l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val) { switch (depth) { case 1: if (val) SET_DATA_BIT(line, x); else CLEAR_DATA_BIT(line, x); break; case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: lept_stderr("illegal depth in setPixelLow()\n"); } } /*-------------------------------------------------------------* * Find black or white value * *-------------------------------------------------------------*/ /*! * \brief pixGetBlackOrWhiteVal() * * \param[in] pixs all depths; cmap ok * \param[in] op L_GET_BLACK_VAL, L_GET_WHITE_VAL * \param[out] pval pixel value * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Side effect.  For a colormapped image, if the requested
 *          color is not present and there is room to add it in the cmap,
 *          it is added and the new index is returned.  If there is no room,
 *          the index of the closest color in intensity is returned.
 * 
*/ l_ok pixGetBlackOrWhiteVal(PIX *pixs, l_int32 op, l_uint32 *pval) { l_int32 d, index; PIXCMAP *cmap; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) return ERROR_INT("invalid op", __func__, 1); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap) { if ((d == 1 && op == L_GET_WHITE_VAL) || (d > 1 && op == L_GET_BLACK_VAL)) { /* min val */ *pval = 0; } else { /* max val */ *pval = (d == 32) ? 0xffffff00 : (1 << d) - 1; } } else { /* handle colormap */ if (op == L_GET_BLACK_VAL) pixcmapAddBlackOrWhite(cmap, 0, &index); else /* L_GET_WHITE_VAL */ pixcmapAddBlackOrWhite(cmap, 1, &index); *pval = index; } return 0; } /*-------------------------------------------------------------* * Full image clear/set/set-to-arbitrary-value/invert * *-------------------------------------------------------------*/ /*! * \brief pixClearAll() * * \param[in] pix all depths; use cmapped with caution * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Clears all data to 0.  For 1 bpp, this is white; for grayscale
 *          or color, this is black.
 *      (2) Caution: for colormapped pix, this sets the color to the first
 *          one in the colormap.  Be sure that this is the intended color!
 * 
*/ l_ok pixClearAll(PIX *pix) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); memset(pix->data, 0, 4LL * pix->wpl * pix->h); return 0; } /*! * \brief pixSetAll() * * \param[in] pix all depths; use cmapped with caution * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Sets all data to 1.  For 1 bpp, this is black; for grayscale
 *          or color, this is white.
 *      (2) Caution: for colormapped pix, this sets the pixel value to the
 *          maximum value supported by the colormap: 2^d - 1.  However, this
 *          color may not be defined, because the colormap may not be full.
 * 
*/ l_ok pixSetAll(PIX *pix) { l_int32 n; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (n < cmap->nalloc) /* cmap is not full */ return ERROR_INT("cmap entry does not exist", __func__, 1); } memset(pix->data, 0xff, 4LL * pix->wpl * pix->h); return 0; } /*! * \brief pixSetAllGray() * * \param[in] pix all depths, cmap ok * \param[in] grayval in range 0 ... 255 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) N.B.  For all images, %grayval == 0 represents black and
 *          %grayval == 255 represents white.
 *      (2) For depth < 8, we do our best to approximate the gray level.
 *          For 1 bpp images, any %grayval < 128 is black; >= 128 is white.
 *          For 32 bpp images, each r,g,b component is set to %grayval,
 *          and the alpha component is preserved.
 *      (3) If pix is colormapped, it adds the gray value, replicated in
 *          all components, to the colormap if it's not there and there
 *          is room.  If the colormap is full, it finds the closest color in
 *          L2 distance of components.  This index is written to all pixels.
 * 
*/ l_ok pixSetAllGray(PIX *pix, l_int32 grayval) { l_int32 d, spp, index; l_uint32 val32; PIX *alpha; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (grayval < 0) { L_WARNING("grayval < 0; setting to 0\n", __func__); grayval = 0; } else if (grayval > 255) { L_WARNING("grayval > 255; setting to 255\n", __func__); grayval = 255; } /* Handle the colormap case */ cmap = pixGetColormap(pix); if (cmap) { pixcmapAddNearestColor(cmap, grayval, grayval, grayval, &index); pixSetAllArbitrary(pix, index); return 0; } /* Non-cmapped */ d = pixGetDepth(pix); spp = pixGetSpp(pix); if (d == 1) { if (grayval < 128) /* black */ pixSetAll(pix); else pixClearAll(pix); /* white */ } else if (d < 8) { grayval >>= 8 - d; pixSetAllArbitrary(pix, grayval); } else if (d == 8) { pixSetAllArbitrary(pix, grayval); } else if (d == 16) { grayval |= (grayval << 8); pixSetAllArbitrary(pix, grayval); } else if (d == 32 && spp == 3) { composeRGBPixel(grayval, grayval, grayval, &val32); pixSetAllArbitrary(pix, val32); } else if (d == 32 && spp == 4) { alpha = pixGetRGBComponent(pix, L_ALPHA_CHANNEL); composeRGBPixel(grayval, grayval, grayval, &val32); pixSetAllArbitrary(pix, val32); pixSetRGBComponent(pix, alpha, L_ALPHA_CHANNEL); pixDestroy(&alpha); } else { L_ERROR("invalid depth: %d\n", __func__, d); return 1; } return 0; } /*! * \brief pixSetAllArbitrary() * * \param[in] pix all depths; use cmapped with caution * \param[in] val value to set all pixels * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caution 1!  For colormapped pix, %val is used as an index
 *          into a colormap.  Be sure that index refers to the intended color.
 *          If the color is not in the colormap, you should first add it
 *          and then call this function.
 *      (2) Caution 2!  For 32 bpp pix, the interpretation of the LSB
 *          of %val depends on whether spp == 3 (RGB) or spp == 4 (RGBA).
 *          For RGB, the LSB is ignored in image transformations.
 *          For RGBA, the LSB is interpreted as the alpha (transparency)
 *          component; full transparency has alpha == 0x0, whereas
 *          full opacity has alpha = 0xff.  An RGBA image with full
 *          opacity behaves like an RGB image.
 *      (3) As an example of (2), suppose you want to initialize a 32 bpp
 *          pix with partial opacity, say 0xee337788.  If the pix is 3 spp,
 *          the 0x88 alpha component will be ignored and may be changed
 *          in subsequent processing.  However, if the pix is 4 spp, the
 *          alpha component will be retained and used. The function
 *          pixCreate(w, h, 32) makes an RGB image by default, and
 *          pixSetSpp(pix, 4) can be used to promote an RGB image to RGBA.
 * 
*/ l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val) { l_int32 n, i, j, w, h, d, wpl, npix; l_uint32 maxval, wordval; l_uint32 *data, *line; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); /* If colormapped, make sure that val is less than the size * of the cmap array. */ if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (val >= n) { L_WARNING("index not in colormap; using last color\n", __func__); val = n - 1; } } /* Make sure val isn't too large for the pixel depth. * If it is too large, set the pixel color to white. */ pixGetDimensions(pix, &w, &h, &d); if (d < 32) { maxval = (1 << d) - 1; if (val > maxval) { L_WARNING("val = %d too large for depth; using maxval = %d\n", __func__, val, maxval); val = maxval; } } /* Set up word to tile with */ wordval = 0; npix = 32 / d; /* number of pixels per 32 bit word */ for (j = 0; j < npix; j++) wordval |= (val << (j * d)); wpl = pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { *(line + j) = wordval; } } return 0; } /*! * \brief pixSetBlackOrWhite() * * \param[in] pixs all depths; cmap ok * \param[in] op L_SET_BLACK, L_SET_WHITE * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Function for setting all pixels in an image to either black
 *          or white.
 *      (2) If pixs is colormapped, it adds black or white to the
 *          colormap if it's not there and there is room.  If the colormap
 *          is full, it finds the closest color in intensity.
 *          This index is written to all pixels.
 * 
*/ l_ok pixSetBlackOrWhite(PIX *pixs, l_int32 op) { l_int32 d, index; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pix not defined", __func__, 1); if (op != L_SET_BLACK && op != L_SET_WHITE) return ERROR_INT("invalid op", __func__, 1); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap) { if ((d == 1 && op == L_SET_BLACK) || (d > 1 && op == L_SET_WHITE)) pixSetAll(pixs); else pixClearAll(pixs); } else { /* handle colormap */ if (op == L_SET_BLACK) pixcmapAddBlackOrWhite(cmap, 0, &index); else /* L_SET_WHITE */ pixcmapAddBlackOrWhite(cmap, 1, &index); pixSetAllArbitrary(pixs, index); } return 0; } /*! * \brief pixSetComponentArbitrary() * * \param[in] pix 32 bpp * \param[in] comp COLOR_RED, COLOR_GREEN, COLOR_BLUE, L_ALPHA_CHANNEL * \param[in] val value to set this component * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) For example, this can be used to set the alpha component to opaque:
 *              pixSetComponentArbitrary(pix, L_ALPHA_CHANNEL, 255)
 * 
*/ l_ok pixSetComponentArbitrary(PIX *pix, l_int32 comp, l_int32 val) { l_int32 i, nwords; l_uint32 mask1, mask2; l_uint32 *data; if (!pix || pixGetDepth(pix) != 32) return ERROR_INT("pix not defined or not 32 bpp", __func__, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid component", __func__, 1); if (val < 0 || val > 255) return ERROR_INT("val not in [0 ... 255]", __func__, 1); mask1 = ~(255 << (8 * (3 - comp))); mask2 = val << (8 * (3 - comp)); nwords = pixGetHeight(pix) * pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < nwords; i++) { data[i] &= mask1; /* clear out the component */ data[i] |= mask2; /* insert the new component value */ } return 0; } /*-------------------------------------------------------------* * Rectangular region clear/set/set-to-arbitrary-value * *-------------------------------------------------------------*/ /*! * \brief pixClearInRect() * * \param[in] pix all depths; can be cmapped * \param[in] box in which all pixels will be cleared * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Clears all data in rect to 0.  For 1 bpp, this is white;
 *          for grayscale or color, this is black.
 *      (2) Caution: for colormapped pix, this sets the color to the first
 *          one in the colormap.  Be sure that this is the intended color!
 * 
*/ l_ok pixClearInRect(PIX *pix, BOX *box) { l_int32 x, y, w, h; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pix, x, y, w, h, PIX_CLR, NULL, 0, 0); return 0; } /*! * \brief pixSetInRect() * * \param[in] pix all depths, can be cmapped * \param[in] box in which all pixels will be set * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Sets all data in rect to 1.  For 1 bpp, this is black;
 *          for grayscale or color, this is white.
 *      (2) Caution: for colormapped pix, this sets the pixel value to the
 *          maximum value supported by the colormap: 2^d - 1.  However, this
 *          color may not be defined, because the colormap may not be full.
 * 
*/ l_ok pixSetInRect(PIX *pix, BOX *box) { l_int32 n, x, y, w, h; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (n < cmap->nalloc) /* cmap is not full */ return ERROR_INT("cmap entry does not exist", __func__, 1); } boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pix, x, y, w, h, PIX_SET, NULL, 0, 0); return 0; } /*! * \brief pixSetInRectArbitrary() * * \param[in] pix all depths; can be cmapped * \param[in] box in which all pixels will be set to val * \param[in] val value to set all pixels * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) For colormapped pix, be sure the value is the intended
 *          one in the colormap.
 *      (2) Caution: for colormapped pix, this sets each pixel in the
 *          rect to the color at the index equal to val.  Be sure that
 *          this index exists in the colormap and that it is the intended one!
 * 
*/ l_ok pixSetInRectArbitrary(PIX *pix, BOX *box, l_uint32 val) { l_int32 n, x, y, xstart, xend, ystart, yend, bw, bh, w, h, d, wpl; l_uint32 maxval; l_uint32 *data, *line; BOX *boxc; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d !=8 && d != 16 && d != 32) return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", __func__, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (val >= n) { L_WARNING("index not in colormap; using last color\n", __func__); val = n - 1; } } maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; if (val > maxval) val = maxval; /* Handle the simple cases: the min and max values */ if (val == 0) { pixClearInRect(pix, box); return 0; } if (d == 1 || (d == 2 && val == 3) || (d == 4 && val == 0xf) || (d == 8 && val == 0xff) || (d == 16 && val == 0xffff) || (d == 32 && ((val ^ 0xffffff00) >> 8 == 0))) { pixSetInRect(pix, box); return 0; } /* Find the overlap of box with the input pix */ if ((boxc = boxClipToRectangle(box, w, h)) == NULL) return ERROR_INT("no overlap of box with image", __func__, 1); boxGetGeometry(boxc, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; boxDestroy(&boxc); wpl = pixGetWpl(pix); data = pixGetData(pix); for (y = ystart; y <= yend; y++) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { switch(d) { case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: return ERROR_INT("depth not 2|4|8|16|32 bpp", __func__, 1); } } } return 0; } /*! * \brief pixBlendInRect() * * \param[in] pixs 32 bpp rgb * \param[in] box [optional] in which all pixels will be blended * \param[in] val blend value; 0xrrggbb00 * \param[in] fract fraction of color to be blended with each pixel in pixs * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place function.  It blends the input color %val
 *          with the pixels in pixs in the specified rectangle.
 *          If no rectangle is specified, it blends over the entire image.
 * 
*/ l_ok pixBlendInRect(PIX *pixs, BOX *box, l_uint32 val, l_float32 fract) { l_int32 i, j, bx, by, bw, bh, w, h, wpls; l_int32 prval, pgval, pbval, rval, gval, bval; l_uint32 val32; l_uint32 *datas, *lines; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); extractRGBValues(val, &rval, &gval, &bval); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (!box) { for (i = 0; i < h; i++) { /* scan over box */ lines = datas + i * wpls; for (j = 0; j < w; j++) { val32 = *(lines + j); extractRGBValues(val32, &prval, &pgval, &pbval); prval = (l_int32)((1. - fract) * prval + fract * rval); pgval = (l_int32)((1. - fract) * pgval + fract * gval); pbval = (l_int32)((1. - fract) * pbval + fract * bval); composeRGBPixel(prval, pgval, pbval, &val32); *(lines + j) = val32; } } return 0; } boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i++) { /* scan over box */ if (by + i < 0 || by + i >= h) continue; lines = datas + (by + i) * wpls; for (j = 0; j < bw; j++) { if (bx + j < 0 || bx + j >= w) continue; val32 = *(lines + bx + j); extractRGBValues(val32, &prval, &pgval, &pbval); prval = (l_int32)((1. - fract) * prval + fract * rval); pgval = (l_int32)((1. - fract) * pgval + fract * gval); pbval = (l_int32)((1. - fract) * pbval + fract * bval); composeRGBPixel(prval, pgval, pbval, &val32); *(lines + bx + j) = val32; } } return 0; } /*-------------------------------------------------------------* * Set pad bits * *-------------------------------------------------------------*/ /*! * \brief pixSetPadBits() * * \param[in] pix 1, 2, 4, 8, 16, 32 bpp * \param[in] val 0 or 1 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The pad bits are the bits that expand each scanline to a
 *          multiple of 32 bits.  They are usually not used in
 *          image processing operations.  When boundary conditions
 *          are important, as in seedfill, they must be set properly.
 *      (2) This sets the value of the pad bits (if any) in the last
 *          32-bit word in each scanline.
 *      (3) For 32 bpp pix, there are no pad bits, so this is a no-op.
 *      (4) For 24 bpp pix (which are not generally supported in leptonica),
 *          this operation would affect image components because the pixels
 *          are not aligned with 32-bit word boundaries.
 *      (5) When writing formatted output, such as tiff, png or jpeg,
 *          the pad bits have no effect on the raster image that is
 *          generated by reading back from the file.  However, in some
 *          cases, the compressed file itself will depend on the pad
 *          bits.  This is seen, for example, in Windows with 2 and 4 bpp
 *          tiff-compressed images that have pad bits on each scanline.
 *          It is sometimes convenient to use a golden file with a
 *          byte-by-byte check to verify invariance.  Consequently,
 *          and because setting the pad bits is cheap, the pad bits are
 *          set to 0 before writing these compressed files.
 * 
*/ l_ok pixSetPadBits(PIX *pix, l_int32 val) { l_int32 i, w, h, d, wpl, endbits, fullwords; l_uint32 mask; l_uint32 *data, *pword; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d == 32) /* no padding exists for 32 bpp */ return 0; if (d == 24) { /* pixels not aligned with 32-bit words */ L_INFO("pix is 24 bpp\n", __func__); return 1; } data = pixGetData(pix); wpl = pixGetWpl(pix); endbits = 32 - (((l_int64)w * d) % 32); if (endbits == 32) /* no partial word */ return 0; fullwords = (1LL * w * d) / 32; mask = rmask32[endbits]; if (val == 0) mask = ~mask; for (i = 0; i < h; i++) { pword = data + i * wpl + fullwords; if (val == 0) /* clear */ *pword = *pword & mask; else /* set */ *pword = *pword | mask; } return 0; } /*! * \brief pixSetPadBitsBand() * * \param[in] pix 1, 2, 4, 8, 16, 32 bpp * \param[in] by starting y value of band * \param[in] bh height of band * \param[in] val 0 or 1 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The pad bits are the bits that expand each scanline to a
 *          multiple of 32 bits.  They are usually not used in
 *          image processing operations.  When boundary conditions
 *          are important, as in seedfill, they must be set properly.
 *      (2) This sets the value of the pad bits (if any) in the last
 *          32-bit word in each scanline, within the specified
 *          band of raster lines.
 *      (3) For 32 bpp pix, there are no pad bits, so this is a no-op.
 *          For 24 bpp pix, this function would change image components.
 * 
*/ l_ok pixSetPadBitsBand(PIX *pix, l_int32 by, l_int32 bh, l_int32 val) { l_int32 i, w, h, d, wpl, endbits, fullwords; l_uint32 mask; l_uint32 *data, *pword; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d == 32) /* no padding exists for 32 bpp */ return 0; if (d == 24) { /* pixels not aligned with 32-bit words */ L_INFO("pix is 24 bpp\n", __func__); return 1; } if (by < 0) by = 0; if (by >= h) return ERROR_INT("start y not in image", __func__, 1); if (by + bh > h) bh = h - by; data = pixGetData(pix); wpl = pixGetWpl(pix); endbits = 32 - (((l_int64)w * d) % 32); if (endbits == 32) /* no partial word */ return 0; fullwords = (l_int64)w * d / 32; mask = rmask32[endbits]; if (val == 0) mask = ~mask; for (i = by; i < by + bh; i++) { pword = data + i * wpl + fullwords; if (val == 0) /* clear */ *pword = *pword & mask; else /* set */ *pword = *pword | mask; } return 0; } /*-------------------------------------------------------------* * Set border pixels * *-------------------------------------------------------------*/ /*! * \brief pixSetOrClearBorder() * * \param[in] pixs all depths * \param[in] left, right, top, bot border region amount to set or clear: these distances are from outside * \param[in] op operation PIX_SET or PIX_CLR * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The border region is defined to be the region in the
 *          image within a specific distance of each edge.  Here, we
 *          allow the pixels within a specified distance of each
 *          edge to be set independently.  This either sets or
 *          clears all pixels in the border region.
 *      (2) For binary images, use PIX_SET for black and PIX_CLR for white.
 *      (3) For grayscale or color images, use PIX_SET for white
 *          and PIX_CLR for black.
 * 
*/ l_ok pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op) { l_int32 w, h; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (op != PIX_SET && op != PIX_CLR) return ERROR_INT("op must be PIX_SET or PIX_CLR", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pixs, 0, 0, left, h, op, NULL, 0, 0); pixRasterop(pixs, w - right, 0, right, h, op, NULL, 0, 0); pixRasterop(pixs, 0, 0, w, top, op, NULL, 0, 0); pixRasterop(pixs, 0, h - bot, w, bot, op, NULL, 0, 0); return 0; } /*! * \brief pixSetBorderVal() * * \param[in] pixs 8, 16 or 32 bpp * \param[in] left, right, top, bot border region amount to set: these distances are from outside * \param[in] val value to set at each border pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The border region is defined to be the region in the
 *          image within a specific distance of each edge.  Here, we
 *          allow the pixels within a specified distance of each
 *          edge to be set independently.  This sets the pixels
 *          in the border region to the given input value.
 *      (2) For efficiency, use pixSetOrClearBorder() if
 *          you're setting the border to either black or white.
 *      (3) If d != 32, the input value should be masked off
 *          to the appropriate number of least significant bits.
 *      (4) The code is easily generalized for 2 or 4 bpp.
 * 
*/ l_ok pixSetBorderVal(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 w, h, d, wpls, i, j, bstart, rstart; l_uint32 *datas, *lines; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("depth must be 8, 16 or 32 bpp", __func__, 1); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (d == 8) { val &= 0xff; for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_BYTE(lines, j, val); } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) SET_DATA_BYTE(lines, j, val); for (j = rstart; j < w; j++) SET_DATA_BYTE(lines, j, val); } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_BYTE(lines, j, val); } } else if (d == 16) { val &= 0xffff; for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) SET_DATA_TWO_BYTES(lines, j, val); for (j = rstart; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } } else { /* d == 32 */ for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) *(lines + j) = val; } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) *(lines + j) = val; for (j = rstart; j < w; j++) *(lines + j) = val; } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) *(lines + j) = val; } } return 0; } /*! * \brief pixSetBorderRingVal() * * \param[in] pixs any depth; cmap OK * \param[in] dist distance from outside; must be > 0; first ring is 1 * \param[in] val value to set at each border pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The rings are single-pixel-wide rectangular sets of
 *          pixels at a given distance from the edge of the pix.
 *          This sets all pixels in a given ring to a value.
 * 
*/ l_ok pixSetBorderRingVal(PIX *pixs, l_int32 dist, l_uint32 val) { l_int32 w, h, d, i, j, xend, yend; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (dist < 1) return ERROR_INT("dist must be > 0", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (w < 2 * dist + 1 || h < 2 * dist + 1) return ERROR_INT("ring doesn't exist", __func__, 1); if (d < 32 && (val >= (1 << d))) return ERROR_INT("invalid pixel value", __func__, 1); xend = w - dist; yend = h - dist; for (j = dist - 1; j <= xend; j++) pixSetPixel(pixs, j, dist - 1, val); for (j = dist - 1; j <= xend; j++) pixSetPixel(pixs, j, yend, val); for (i = dist - 1; i <= yend; i++) pixSetPixel(pixs, dist - 1, i, val); for (i = dist - 1; i <= yend; i++) pixSetPixel(pixs, xend, i, val); return 0; } /*! * \brief pixSetMirroredBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels to set * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This applies what is effectively mirror boundary conditions
 *          to a border region in the image.  It is in-place.
 *      (2) This is useful for setting pixels near the border to a
 *          value representative of the near pixels to the interior.
 *      (3) The general pixRasterop() is used for an in-place operation here
 *          because there is no overlap between the src and dest rectangles.
 * 
*/ l_ok pixSetMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); for (j = 0; j < left; j++) pixRasterop(pixs, left - 1 - j, top, 1, h - top - bot, PIX_SRC, pixs, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixs, w - right + j, top, 1, h - top - bot, PIX_SRC, pixs, w - right - 1 - j, top); for (i = 0; i < top; i++) pixRasterop(pixs, 0, top - 1 - i, w, 1, PIX_SRC, pixs, 0, top + i); for (i = 0; i < bot; i++) pixRasterop(pixs, 0, h - bot + i, w, 1, PIX_SRC, pixs, 0, h - bot - 1 - i); return 0; } /*! * \brief pixCopyBorder() * * \param[in] pixd all depths; colormap ok; can be NULL * \param[in] pixs same depth and size as pixd * \param[in] left, right, top, bot number of pixels to copy * \return pixd, or NULL on error if pixd is not defined * *
 * Notes:
 *      (1) pixd can be null, but otherwise it must be the same size
 *          and depth as pixs.  Always returns pixd.
 *      (2) This is useful in situations where by setting a few border
 *          pixels we can avoid having to copy all pixels in pixs into
 *          pixd as an initialization step for some operation.
 *          Nevertheless, for safety, if making a new pixd, all the
 *          non-border pixels are initialized to 0.
 * 
*/ PIX * pixCopyBorder(PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 w, h; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixd) { if (pixd == pixs) { L_WARNING("same: nothing to do\n", __func__); return pixd; } else if (!pixSizesEqual(pixs, pixd)) { return (PIX *)ERROR_PTR("pixs and pixd sizes differ", __func__, pixd); } } else { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, pixd); } pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pixd, 0, 0, left, h, PIX_SRC, pixs, 0, 0); pixRasterop(pixd, w - right, 0, right, h, PIX_SRC, pixs, w - right, 0); pixRasterop(pixd, 0, 0, w, top, PIX_SRC, pixs, 0, 0); pixRasterop(pixd, 0, h - bot, w, bot, PIX_SRC, pixs, 0, h - bot); return pixd; } /*-------------------------------------------------------------* * Add and remove border * *-------------------------------------------------------------*/ /*! * \brief pixAddBorder() * * \param[in] pixs all depths; colormap ok * \param[in] npix number of pixels to be added to each side * \param[in] val value of added border pixels * \return pixd with the added exterior pixels, or NULL on error * *
 * Notes:
 *      (1) See pixGetBlackOrWhiteVal() for values of black and white pixels.
 * 
*/ PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (npix == 0) return pixClone(pixs); return pixAddBorderGeneral(pixs, npix, npix, npix, npix, val); } /*! * \brief pixAddBlackOrWhiteBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \param[in] op L_GET_BLACK_VAL, L_GET_WHITE_VAL * \return pixd with the added exterior pixels, or NULL on error * *
 * Notes:
 *      (1) See pixGetBlackOrWhiteVal() for possible side effect (adding
 *          a color to a colormap).
 *      (2) The only complication is that pixs may have a colormap.
 *          There are two ways to add the black or white border:
 *          (a) As done here (simplest, most efficient)
 *          (b) l_int32 ws, hs, d;
 *              pixGetDimensions(pixs, &ws, &hs, &d);
 *              Pix *pixd = pixCreate(ws + left + right, hs + top + bot, d);
 *              PixColormap *cmap = pixGetColormap(pixs);
 *              if (cmap != NULL)
 *                  pixSetColormap(pixd, pixcmapCopy(cmap));
 *              pixSetBlackOrWhite(pixd, L_SET_WHITE);  // uses cmap
 *              pixRasterop(pixd, left, top, ws, hs, PIX_SET, pixs, 0, 0);
 * 
*/ PIX * pixAddBlackOrWhiteBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op) { l_uint32 val; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) return (PIX *)ERROR_PTR("invalid op", __func__, NULL); pixGetBlackOrWhiteVal(pixs, op, &val); return pixAddBorderGeneral(pixs, left, right, top, bot, val); } /*! * \brief pixAddBorderGeneral() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \param[in] val value of added border pixels * \return pixd with the added exterior pixels, or NULL on error * *
 * Notes:
 *      (1) For binary images:
 *             white:  val = 0
 *             black:  val = 1
 *          For grayscale images:
 *             white:  val = 2 ** d - 1
 *             black:  val = 0
 *          For rgb color images:
 *             white:  val = 0xffffff00
 *             black:  val = 0
 *          For colormapped images, set val to the appropriate colormap index.
 *      (2) If the added border is either black or white, you can use
 *             pixAddBlackOrWhiteBorder()
 *          The black and white values for all images can be found with
 *             pixGetBlackOrWhiteVal()
 *          which, if pixs is cmapped, may add an entry to the colormap.
 *          Alternatively, if pixs has a colormap, you can find the index
 *          of the pixel whose intensity is closest to white or black:
 *             white: pixcmapGetRankIntensity(cmap, 1.0, &index);
 *             black: pixcmapGetRankIntensity(cmap, 0.0, &index);
 *          and use that for val.
 * 
*/ PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 ws, hs, wd, hd, d, op; l_uint32 maxval; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIX *)ERROR_PTR("negative border added!", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); wd = ws + left + right; hd = hs + top + bot; if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); /* Set the new border pixels */ maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; op = UNDEF; if (val == 0) op = PIX_CLR; else if (val >= maxval) op = PIX_SET; if (op == UNDEF) { pixSetAllArbitrary(pixd, val); } else { /* just set or clear the border pixels */ pixRasterop(pixd, 0, 0, left, hd, op, NULL, 0, 0); pixRasterop(pixd, wd - right, 0, right, hd, op, NULL, 0, 0); pixRasterop(pixd, 0, 0, wd, top, op, NULL, 0, 0); pixRasterop(pixd, 0, hd - bot, wd, bot, op, NULL, 0, 0); } /* Copy pixs into the interior */ pixRasterop(pixd, left, top, ws, hs, PIX_SRC, pixs, 0, 0); return pixd; } /*! * \brief pixAddMultipleBlackWhiteBorders() * * \param[in] pixs all depths; colormap ok * \param[in] nblack1 width of first black border * \param[in] nwhite1 width of first white border * \param[in] nblack2 width of second black border * \param[in] nwhite2 width of second white border * \param[in] nblack3 width of third black border * \param[in] nwhite3 width of third white border * \return pixd with the added borders, or NULL on error * *
 * Notes:
 *      (1) This is a convenience function for adding up to 3 black and
 *          3 white borders, alternating black and white.
 *      (2) Each of the 6 args gives the width of the next border, starting
 *          with a black border.  Any of the args can be 0, skipping
 *          the addition of that border.
 *      (3) Maximum allowed border width is 500 for any border.
 * 
*/ PIX * pixAddMultipleBlackWhiteBorders(PIX *pixs, l_int32 nblack1, l_int32 nwhite1, l_int32 nblack2, l_int32 nwhite2, l_int32 nblack3, l_int32 nwhite3) { l_int32 i, color; l_int32 w[6]; PIX *pix1, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); w[0] = nblack1; w[1] = nwhite1; w[2] = nblack2; w[3] = nwhite2; w[4] = nblack3; w[5] = nwhite3; pixd = pixClone(pixs); for (i = 0; i < 6; i++) { if (w[i] > 500) L_WARNING("w = %d > 500; skipping\n", __func__, w[i]); if (w[i] > 0 && w[i] <= 500) { color = (i % 2 == 0) ? L_GET_BLACK_VAL : L_GET_WHITE_VAL; pix1 = pixAddBlackOrWhiteBorder(pixd, w[i], w[i], w[i], w[i], color); pixDestroy(&pixd); pixd = pix1; } } return pixd; } /*! * \brief pixRemoveBorder() * * \param[in] pixs all depths; colormap ok * \param[in] npix number to be removed from each of the 4 sides * \return pixd with pixels removed around border, or NULL on error */ PIX * pixRemoveBorder(PIX *pixs, l_int32 npix) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (npix == 0) return pixClone(pixs); return pixRemoveBorderGeneral(pixs, npix, npix, npix, npix); } /*! * \brief pixRemoveBorderGeneral() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels removed * \return pixd with pixels removed around border, or NULL on error */ PIX * pixRemoveBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd, d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIX *)ERROR_PTR("negative border removed!", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); wd = ws - left - right; hd = hs - top - bot; if (wd <= 0) return (PIX *)ERROR_PTR("width must be > 0", __func__, NULL); if (hd <= 0) return (PIX *)ERROR_PTR("height must be > 0", __func__, NULL); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyColormap(pixd, pixs); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, left, top); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) pixShiftAndTransferAlpha(pixd, pixs, -left, -top); return pixd; } /*! * \brief pixRemoveBorderToSize() * * \param[in] pixs all depths; colormap ok * \param[in] wd target width; use 0 if only removing from height * \param[in] hd target height; use 0 if only removing from width * \return pixd with pixels removed around border, or NULL on error * *
 * Notes:
 *      (1) Removes pixels as evenly as possible from the sides of the
 *          image, leaving the central part.
 *      (2) Returns clone if no pixels requested removed, or the target
 *          sizes are larger than the image.
 * 
*/ PIX * pixRemoveBorderToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h, top, bot, left, right, delta; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((wd <= 0 || wd >= w) && (hd <= 0 || hd >= h)) return pixClone(pixs); left = right = (w - wd) / 2; delta = w - 2 * left - wd; right += delta; top = bot = (h - hd) / 2; delta = h - hd - 2 * top; bot += delta; if (wd <= 0 || wd > w) left = right = 0; else if (hd <= 0 || hd > h) top = bot = 0; return pixRemoveBorderGeneral(pixs, left, right, top, bot); } /*! * \brief pixAddMirroredBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This applies what is effectively mirror boundary conditions.
 *          For the added border pixels in pixd, the pixels in pixs
 *          near the border are mirror-copied into the border region.
 *      (2) This is useful for avoiding special operations near
 *          boundaries when doing image processing operations
 *          such as rank filters and convolution.  In use, one first
 *          adds mirrored pixels to each side of the image.  The number
 *          of pixels added on each side is half the filter dimension.
 *          Then the image processing operations proceed over a
 *          region equal to the size of the original image, and
 *          write directly into a dest pix of the same size as pixs.
 *      (3) The general pixRasterop() is used for an in-place operation here
 *          because there is no overlap between the src and dest rectangles.
 * 
*/ PIX * pixAddMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", __func__, NULL); /* Set pixels on left, right, top and bottom, in that order */ pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); for (j = 0; j < left; j++) pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, pixd, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1 - j, top); for (i = 0; i < top; i++) pixRasterop(pixd, 0, top - 1 - i, left + w + right, 1, PIX_SRC, pixd, 0, top + i); for (i = 0; i < bot; i++) pixRasterop(pixd, 0, top + h + i, left + w + right, 1, PIX_SRC, pixd, 0, top + h - 1 - i); return pixd; } /*! * \brief pixAddRepeatedBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This applies a repeated border, as if the central part of
 *          the image is tiled over the plane.  So, for example, the
 *          pixels in the left border come from the right side of the image.
 *      (2) The general pixRasterop() is used for an in-place operation here
 *          because there is no overlap between the src and dest rectangles.
 * 
*/ PIX * pixAddRepeatedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 w, h; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", __func__, NULL); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); /* Set pixels on left, right, top and bottom, in that order */ pixRasterop(pixd, 0, top, left, h, PIX_SRC, pixd, w, top); pixRasterop(pixd, left + w, top, right, h, PIX_SRC, pixd, left, top); pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); return pixd; } /*! * \brief pixAddMixedBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This applies mirrored boundary conditions (b.c.) horizontally
 *          and repeated b.c. vertically.
 *      (2) It is specifically used for avoiding special operations
 *          near boundaries when convolving a hue-saturation histogram
 *          with a given window size.  The repeated b.c. are used
 *          vertically for hue, and the mirrored b.c. are used
 *          horizontally for saturation.  The number of pixels added
 *          on each side is approximately (but not quite) half the
 *          filter dimension.  The image processing operations can
 *          then proceed over a region equal to the size of the original
 *          image, and write directly into a dest pix of the same
 *          size as pixs.
 *      (3) The general pixRasterop() can be used for an in-place
 *          operation here because there is no overlap between the
 *          src and dest rectangles.
 * 
*/ PIX * pixAddMixedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 j, w, h; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", __func__, NULL); /* Set mirrored pixels on left and right; * then set repeated pixels on top and bottom. */ pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); for (j = 0; j < left; j++) pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, pixd, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1 - j, top); pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); return pixd; } /*! * \brief pixAddContinuedBorder() * * \param[in] pixs all depths; colormap ok * \param[in] left, right, top, bot pixels on each side to be added * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This adds pixels on each side whose values are equal to
 *          the value on the closest boundary pixel.
 * 
*/ PIX * pixAddContinuedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); pixGetDimensions(pixs, &w, &h, NULL); for (j = 0; j < left; j++) pixRasterop(pixd, j, top, 1, h, PIX_SRC, pixd, left, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1, top); for (i = 0; i < top; i++) pixRasterop(pixd, 0, i, left + w + right, 1, PIX_SRC, pixd, 0, top); for (i = 0; i < bot; i++) pixRasterop(pixd, 0, top + h + i, left + w + right, 1, PIX_SRC, pixd, 0, top + h - 1); return pixd; } /*-------------------------------------------------------------------* * Helper functions using alpha * *-------------------------------------------------------------------*/ /*! * \brief pixShiftAndTransferAlpha() * * \param[in] pixd 32 bpp * \param[in] pixs 32 bpp * \param[in] shiftx, shifty * \return 0 if OK; 1 on error */ l_ok pixShiftAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty) { l_int32 w, h; PIX *pix1, *pix2; if (!pixs || !pixd) return ERROR_INT("pixs and pixd not both defined", __func__, 1); if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) return ERROR_INT("pixs not 32 bpp and 4 spp", __func__, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", __func__, 1); if (shiftx == 0 && shifty == 0) { pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return 0; } pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pixGetDimensions(pixd, &w, &h, NULL); pix2 = pixCreate(w, h, 8); pixRasterop(pix2, 0, 0, w, h, PIX_SRC, pix1, -shiftx, -shifty); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } /*! * \brief pixDisplayLayersRGBA() * * \param[in] pixs cmap or 32 bpp rgba * \param[in] val 32 bit unsigned color to use as background * \param[in] maxw max output image width; 0 for no scaling * \return pixd showing various image views, or NULL on error * *
 * Notes:
 *      (1) Use %val == 0xffffff00 for white background.
 *      (2) Three views are given:
 *           ~ the image with a fully opaque alpha
 *           ~ the alpha layer
 *           ~ the image as it would appear with a white background.
 * 
*/ PIX * pixDisplayLayersRGBA(PIX *pixs, l_uint32 val, l_int32 maxw) { l_int32 w, width; l_float32 scalefact; PIX *pix1, *pix2, *pixd; PIXA *pixa; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); cmap = pixGetColormap(pixs); if (!cmap && !(pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4)) return (PIX *)ERROR_PTR("pixs not cmap and not 32 bpp rgba", __func__, NULL); if ((w = pixGetWidth(pixs)) == 0) return (PIX *)ERROR_PTR("pixs width 0 !!", __func__, NULL); if (cmap) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); else pix1 = pixCopy(NULL, pixs); /* Scale if necessary so the output width is not larger than maxw */ scalefact = (maxw == 0) ? 1.0f : L_MIN(1.0f, (l_float32)(maxw) / w); width = (l_int32)(scalefact * w); pixa = pixaCreate(3); pixSetSpp(pix1, 3); pixaAddPix(pixa, pix1, L_INSERT); /* show the rgb values */ pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixConvertTo32(pix1); pixaAddPix(pixa, pix2, L_INSERT); /* show the alpha channel */ pixDestroy(&pix1); pix1 = pixAlphaBlendUniform(pixs, (val & 0xffffff00)); pixaAddPix(pixa, pix1, L_INSERT); /* with %val color bg showing */ pixd = pixaDisplayTiledInRows(pixa, 32, width, scalefact, 0, 25, 2); pixaDestroy(&pixa); return pixd; } /*-------------------------------------------------------------* * Color sample setting and extraction * *-------------------------------------------------------------*/ /*! * \brief pixCreateRGBImage() * * \param[in] pixr 8 bpp red pix * \param[in] pixg 8 bpp green pix * \param[in] pixb 8 bpp blue pix * \return 32 bpp pix, interleaved with 4 samples/pixel, * or NULL on error * *
 * Notes:
 *      (1) the 4th byte, sometimes called the "alpha channel",
 *          and which is often used for blending between different
 *          images, is left with 0 value (fully opaque).
 *      (2) see Note (4) in pix.h for details on storage of
 *          8-bit samples within each 32-bit word.
 *      (3) This implementation, setting the r, g and b components
 *          sequentially, is much faster than setting them in parallel
 *          by constructing an RGB dest pixel and writing it to dest.
 *          The reason is there are many more cache misses when reading
 *          from 3 input images simultaneously.
 * 
*/ PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb) { l_int32 wr, wg, wb, hr, hg, hb, dr, dg, db; PIX *pixd; if (!pixr) return (PIX *)ERROR_PTR("pixr not defined", __func__, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", __func__, NULL); if (!pixb) return (PIX *)ERROR_PTR("pixb not defined", __func__, NULL); pixGetDimensions(pixr, &wr, &hr, &dr); pixGetDimensions(pixg, &wg, &hg, &dg); pixGetDimensions(pixb, &wb, &hb, &db); if (dr != 8 || dg != 8 || db != 8) return (PIX *)ERROR_PTR("input pix not all 8 bpp", __func__, NULL); if (wr != wg || wr != wb) return (PIX *)ERROR_PTR("widths not the same", __func__, NULL); if (hr != hg || hr != hb) return (PIX *)ERROR_PTR("heights not the same", __func__, NULL); if ((pixd = pixCreate(wr, hr, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixr); pixSetRGBComponent(pixd, pixr, COLOR_RED); pixSetRGBComponent(pixd, pixg, COLOR_GREEN); pixSetRGBComponent(pixd, pixb, COLOR_BLUE); return pixd; } /*! * \brief pixGetRGBComponent() * * \param[in] pixs 32 bpp, or colormapped * \param[in] comp one of {COLOR_RED, COLOR_GREEN, COLOR_BLUE, * L_ALPHA_CHANNEL} * \return pixd the selected 8 bpp component image of the * input 32 bpp image or NULL on error * *
 * Notes:
 *      (1) Three calls to this function generate the r, g and b 8 bpp
 *          component images.  This is much faster than generating the
 *          three images in parallel, by extracting a src pixel and setting
 *          the pixels of each component image from it.  The reason is
 *          there are many more cache misses when writing to three
 *          output images simultaneously.
 * 
*/ PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *lines, *lined; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return pixGetRGBComponentCmap(pixs, comp); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return (PIX *)ERROR_PTR("invalid comp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines + j, comp); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * \brief pixSetRGBComponent() * * \param[in] pixd 32 bpp * \param[in] pixs 8 bpp * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, * COLOR_BLUE, L_ALPHA_CHANNEL} * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This places the 8 bpp pixel in pixs into the
 *          specified component (properly interleaved) in pixd,
 *      (2) The two images are registered to the UL corner; the sizes
 *          need not be the same, but a warning is issued if they differ.
 * 
*/ l_ok pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp) { l_uint8 srcbyte; l_int32 i, j, w, h, ws, hs, wd, hd; l_int32 wpls, wpld; l_uint32 *lines, *lined; l_uint32 *datas, *datad; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", __func__, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", __func__, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid comp", __func__, 1); pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (ws != wd || hs != hd) L_WARNING("images sizes not equal\n", __func__); w = L_MIN(ws, wd); h = L_MIN(hs, hd); if (comp == L_ALPHA_CHANNEL) pixSetSpp(pixd, 4); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { srcbyte = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined + j, comp, srcbyte); } } return 0; } /*! * \brief pixGetRGBComponentCmap() * * \param[in] pixs colormapped * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, COLOR_BLUE} * \return pixd the selected 8 bpp component image of the * input cmapped image, or NULL on error * *
 * Notes:
 *      (1) In leptonica, we do not support alpha in colormaps.
 * 
*/ PIX * pixGetRGBComponentCmap(PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, val, index, valid; l_int32 wplc, wpld; l_uint32 *linec, *lined; l_uint32 *datac, *datad; PIX *pixc, *pixd; PIXCMAP *cmap; RGBA_QUAD *cta; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if ((cmap = pixGetColormap(pixs)) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped", __func__, NULL); if (comp == L_ALPHA_CHANNEL) return (PIX *)ERROR_PTR("alpha in cmaps not supported", __func__, NULL); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE) return (PIX *)ERROR_PTR("invalid comp", __func__, NULL); /* If not 8 bpp, make a cmapped 8 bpp pix */ if (pixGetDepth(pixs) == 8) pixc = pixClone(pixs); else pixc = pixConvertTo8(pixs, TRUE); pixcmapIsValid(cmap, pixc, &valid); if (!valid) { pixDestroy(&pixc); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) { pixDestroy(&pixc); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); wplc = pixGetWpl(pixc); wpld = pixGetWpl(pixd); datac = pixGetData(pixc); datad = pixGetData(pixd); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < h; i++) { linec = datac + i * wplc; lined = datad + i * wpld; if (comp == COLOR_RED) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].red; SET_DATA_BYTE(lined, j, val); } } else if (comp == COLOR_GREEN) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].green; SET_DATA_BYTE(lined, j, val); } } else if (comp == COLOR_BLUE) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].blue; SET_DATA_BYTE(lined, j, val); } } } pixDestroy(&pixc); return pixd; } /*! * \brief pixCopyRGBComponent() * * \param[in] pixd 32 bpp * \param[in] pixs 32 bpp * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, * COLOR_BLUE, L_ALPHA_CHANNEL} * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The two images are registered to the UL corner.  The sizes
 *          are usually the same, and a warning is issued if they differ.
 * 
*/ l_ok pixCopyRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, ws, hs, wd, hd, val; l_int32 wpls, wpld; l_uint32 *lines, *lined; l_uint32 *datas, *datad; if (!pixd && pixGetDepth(pixd) != 32) return ERROR_INT("pixd not defined or not 32 bpp", __func__, 1); if (!pixs && pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid component", __func__, 1); pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (ws != wd || hs != hd) L_WARNING("images sizes not equal\n", __func__); w = L_MIN(ws, wd); h = L_MIN(hs, hd); if (comp == L_ALPHA_CHANNEL) pixSetSpp(pixd, 4); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines + j, comp); SET_DATA_BYTE(lined + j, comp, val); } } return 0; } /*! * \brief composeRGBPixel() * * \param[in] rval, gval, bval * \param[out] ppixel 32-bit pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) All channels are 8 bits: the input values must be between
 *          0 and 255.  For speed, this is not enforced by masking
 *          with 0xff before shifting.
 *      (2) A slower implementation uses macros:
 *            SET_DATA_BYTE(ppixel, COLOR_RED, rval);
 *            SET_DATA_BYTE(ppixel, COLOR_GREEN, gval);
 *            SET_DATA_BYTE(ppixel, COLOR_BLUE, bval);
 * 
*/ l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel) { if (!ppixel) return ERROR_INT("&pixel not defined", __func__, 1); *ppixel = ((l_uint32)rval << L_RED_SHIFT) | ((l_uint32)gval << L_GREEN_SHIFT) | ((l_uint32)bval << L_BLUE_SHIFT); return 0; } /*! * \brief composeRGBAPixel() * * \param[in] rval, gval, bval, aval * \param[out] ppixel 32-bit pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) All channels are 8 bits: the input values must be between
 *          0 and 255.  For speed, this is not enforced by masking
 *          with 0xff before shifting.
 * 
*/ l_ok composeRGBAPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel) { if (!ppixel) return ERROR_INT("&pixel not defined", __func__, 1); *ppixel = ((l_uint32)rval << L_RED_SHIFT) | ((l_uint32)gval << L_GREEN_SHIFT) | ((l_uint32)bval << L_BLUE_SHIFT) | aval; return 0; } /*! * \brief extractRGBValues() * * \param[in] pixel 32 bit * \param[out] prval [optional] red component * \param[out] pgval [optional] green component * \param[out] pbval [optional] blue component * \return void * *
 * Notes:
 *      (1) A slower implementation uses macros:
 *             *prval = GET_DATA_BYTE(&pixel, COLOR_RED);
 *             *pgval = GET_DATA_BYTE(&pixel, COLOR_GREEN);
 *             *pbval = GET_DATA_BYTE(&pixel, COLOR_BLUE);
 * 
*/ void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; } /*! * \brief extractRGBAValues() * * \param[in] pixel 32 bit * \param[out] prval [optional] red component * \param[out] pgval [optional] green component * \param[out] pbval [optional] blue component * \param[out] paval [optional] alpha component * \return void */ void extractRGBAValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval) { if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; if (paval) *paval = (pixel >> L_ALPHA_SHIFT) & 0xff; } /*! * \brief extractMinMaxComponent() * * \param[in] pixel 32 bpp RGB * \param[in] type L_CHOOSE_MIN or L_CHOOSE_MAX * \return component in range [0 ... 255], or NULL on error */ l_int32 extractMinMaxComponent(l_uint32 pixel, l_int32 type) { l_int32 rval, gval, bval, val; extractRGBValues(pixel, &rval, &gval, &bval); if (type == L_CHOOSE_MIN) { val = L_MIN(rval, gval); val = L_MIN(val, bval); } else { /* type == L_CHOOSE_MAX */ val = L_MAX(rval, gval); val = L_MAX(val, bval); } return val; } /*! * \brief pixGetRGBLine() * * \param[in] pixs 32 bpp * \param[in] row * \param[in] bufr array of red samples; size w bytes * \param[in] bufg array of green samples; size w bytes * \param[in] bufb array of blue samples; size w bytes * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This puts rgb components from the input line in pixs
 *          into the given buffers.
 * 
*/ l_ok pixGetRGBLine(PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb) { l_uint32 *lines; l_int32 j, w, h; l_int32 wpls; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (!bufr || !bufg || !bufb) return ERROR_INT("buffer not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (row < 0 || row >= h) return ERROR_INT("row out of bounds", __func__, 1); wpls = pixGetWpl(pixs); lines = pixGetData(pixs) + row * wpls; for (j = 0; j < w; j++) { bufr[j] = GET_DATA_BYTE(lines + j, COLOR_RED); bufg[j] = GET_DATA_BYTE(lines + j, COLOR_GREEN); bufb[j] = GET_DATA_BYTE(lines + j, COLOR_BLUE); } return 0; } /*-------------------------------------------------------------* * Raster line pixel setter * *-------------------------------------------------------------*/ /*! * \brief setLineDataVal() * * \param[in] line ptr to first word in raster line data * \param[in] j index of pixels into the raster line * \param[in] d depth of the pixel * \param[in] val pixel value to be set * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a convenience function to set a pixel value in a
 *          raster line where the depth of the image can have different
 *          values (1, 2, 4, 8, 16 or 32).
 * 
*/ l_ok setLineDataVal(l_uint32 *line, l_int32 j, l_int32 d, l_uint32 val) { if (!line) return ERROR_INT("line not defined", __func__, 1); if (j < 0) return ERROR_INT("j must be >= 0", __func__, 1); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return ERROR_INT("invalid d", __func__, 1); if (d == 1) SET_DATA_BIT_VAL(line, j, val); else if (d == 2) SET_DATA_DIBIT(line, j, val); else if (d == 4) SET_DATA_QBIT(line, j, val); else if (d == 8) SET_DATA_BYTE(line, j, val); else if (d == 16) SET_DATA_TWO_BYTES(line, j, val); else /* d == 32 */ *(line + j) = val; return 0; } /*-------------------------------------------------------------* * Pixel endian conversion * *-------------------------------------------------------------*/ /*! * \brief pixEndianByteSwapNew() * * \param[in] pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is used to convert the data in a pix to a
 *          serialized byte buffer in raster order, and, for RGB,
 *          in order RGBA.  This requires flipping bytes within
 *          each 32-bit word for little-endian platforms, because the
 *          words have a MSB-to-the-left rule, whereas byte raster-order
 *          requires the left-most byte in each word to be byte 0.
 *          For big-endians, no swap is necessary, so this returns a clone.
 *      (2) Unlike pixEndianByteSwap(), which swaps the bytes in-place,
 *          this returns a new pix (or a clone).  We provide this
 *          because often when serialization is done, the source
 *          pix needs to be restored to canonical little-endian order,
 *          and this requires a second byte swap.  In such a situation,
 *          it is twice as fast to make a new pix in big-endian order,
 *          use it, and destroy it.
 * 
*/ PIX * pixEndianByteSwapNew(PIX *pixs) { l_uint32 *datas, *datad; l_int32 i, j, h, wpl; l_uint32 word; PIX *pixd; #ifdef L_BIG_ENDIAN return pixClone(pixs); #else /* L_LITTLE_ENDIAN */ if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); datas = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return pixd; #endif /* L_BIG_ENDIAN */ } /*! * \brief pixEndianByteSwap() * * \param[in] pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used on little-endian platforms to swap
 *          the bytes within a word; bytes 0 and 3 are swapped,
 *          and bytes 1 and 2 are swapped.
 *      (2) This is required for little-endians in situations
 *          where we convert from a serialized byte order that is
 *          in raster order, as one typically has in file formats,
 *          to one with MSB-to-the-left in each 32-bit word, or v.v.
 *          See pix.h for a description of the canonical format
 *          (MSB-to-the left) that is used for both little-endian
 *          and big-endian platforms.   For big-endians, the
 *          MSB-to-the-left word order has the bytes in raster
 *          order when serialized, so no byte flipping is required.
 * 
*/ l_ok pixEndianByteSwap(PIX *pixs) { l_uint32 *data; l_int32 i, j, h, wpl; l_uint32 word; #ifdef L_BIG_ENDIAN return 0; #else /* L_LITTLE_ENDIAN */ if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return 0; #endif /* L_BIG_ENDIAN */ } /*! * \brief lineEndianByteSwap() * * \param[in] datad dest byte array data, reordered on little-endians * \param[in] datas a src line of pix data) * \param[in] wpl number of 32 bit words in the line * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used on little-endian platforms to swap
 *          the bytes within each word in the line of image data.
 *          Bytes 0 <==> 3 and 1 <==> 2 are swapped in the dest
 *          byte array data8d, relative to the pix data in datas.
 *      (2) The bytes represent 8 bit pixel values.  They are swapped
 *          for little endians so that when the dest array datad
 *          is addressed by bytes, the pixels are chosen sequentially
 *          from left to right in the image.
 * 
*/ l_int32 lineEndianByteSwap(l_uint32 *datad, l_uint32 *datas, l_int32 wpl) { l_int32 j; l_uint32 word; if (!datad || !datas) return ERROR_INT("datad and datas not both defined", __func__, 1); #ifdef L_BIG_ENDIAN memcpy(datad, datas, 4 * wpl); return 0; #else /* L_LITTLE_ENDIAN */ for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } return 0; #endif /* L_BIG_ENDIAN */ } /*! * \brief pixEndianTwoByteSwapNew() * * \param[in] pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used on little-endian platforms to swap the
 *          2-byte entities within a 32-bit word.
 *      (2) This is equivalent to a full byte swap, as performed
 *          by pixEndianByteSwap(), followed by byte swaps in
 *          each of the 16-bit entities separately.
 *      (3) Unlike pixEndianTwoByteSwap(), which swaps the shorts in-place,
 *          this returns a new pix (or a clone).  We provide this
 *          to avoid having to swap twice in situations where the input
 *          pix must be restored to canonical little-endian order.
 * 
*/ PIX * pixEndianTwoByteSwapNew(PIX *pixs) { l_uint32 *datas, *datad; l_int32 i, j, h, wpl; l_uint32 word; PIX *pixd; #ifdef L_BIG_ENDIAN return pixClone(pixs); #else /* L_LITTLE_ENDIAN */ if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); datas = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word << 16) | (word >> 16); } } return pixd; #endif /* L_BIG_ENDIAN */ } /*! * \brief pixEndianTwoByteSwap() * * \param[in] pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used on little-endian platforms to swap the
 *          2-byte entities within a 32-bit word.
 *      (2) This is equivalent to a full byte swap, as performed
 *          by pixEndianByteSwap(), followed by byte swaps in
 *          each of the 16-bit entities separately.
 * 
*/ l_ok pixEndianTwoByteSwap(PIX *pixs) { l_uint32 *data; l_int32 i, j, h, wpl; l_uint32 word; #ifdef L_BIG_ENDIAN return 0; #else /* L_LITTLE_ENDIAN */ if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, data++) { word = *data; *data = (word << 16) | (word >> 16); } } return 0; #endif /* L_BIG_ENDIAN */ } /*-------------------------------------------------------------* * Extract raster data as binary string * *-------------------------------------------------------------*/ /*! * \brief pixGetRasterData() * * \param[in] pixs 1, 8, 32 bpp * \param[out] pdata raster data in memory * \param[out] pnbytes number of bytes in data string * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns the raster data as a byte string, padded to the
 *          byte.  For 1 bpp, the first pixel is the MSbit in the first byte.
 *          For rgb, the bytes are in (rgb) order.  This is the format
 *          required for flate encoding of pixels in a PostScript file.
 * 
*/ l_ok pixGetRasterData(PIX *pixs, l_uint8 **pdata, size_t *pnbytes) { l_int32 w, h, d, wpl, i, j, rval, gval, bval; l_int32 databpl; /* bytes for each raster line in returned data */ l_uint8 *line, *data; /* packed data in returned array */ l_uint32 *rline, *rdata; /* data in pix raster */ if (pdata) *pdata = NULL; if (pnbytes) *pnbytes = 0; if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return ERROR_INT("depth not in {1,2,4,8,16,32}", __func__, 1); pixSetPadBits(pixs, 0); rdata = pixGetData(pixs); wpl = pixGetWpl(pixs); if (d == 1) databpl = (w + 7) / 8; else if (d == 2) databpl = (w + 3) / 4; else if (d == 4) databpl = (w + 1) / 2; else if (d == 8 || d == 16) databpl = w * (d / 8); else /* d == 32 bpp rgb */ databpl = 3 * w; if ((data = (l_uint8 *)LEPT_CALLOC((size_t)databpl * h, sizeof(l_uint8))) == NULL) return ERROR_INT("data not allocated", __func__, 1); *pdata = data; *pnbytes = (size_t)databpl * h; for (i = 0; i < h; i++) { rline = rdata + i * wpl; line = data + i * databpl; if (d <= 8) { for (j = 0; j < databpl; j++) line[j] = GET_DATA_BYTE(rline, j); } else if (d == 16) { for (j = 0; j < w; j++) line[2 * j] = GET_DATA_TWO_BYTES(rline, j); } else { /* d == 32 bpp rgb */ for (j = 0; j < w; j++) { extractRGBValues(rline[j], &rval, &gval, &bval); *(line + 3 * j) = rval; *(line + 3 * j + 1) = gval; *(line + 3 * j + 2) = bval; } } } return 0; } /*-------------------------------------------------------------* * Infer resolution from image size * *-------------------------------------------------------------*/ /*! * \brief pixInferResolution() * * \param[in] pix * \param[in] longside assumed max dimension, in inches * \param[out] pres resolution (ppi) * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the resolution, assuming that the longest side
 *          of the image is %longside.  On error, returns 300 ppi.
 *      (2) This is useful for computing resolution for generating pdfs,
 *          when the images are scanned from pages of known size.
 *          There, %longside is typically about 11.0.
 * 
*/ l_ok pixInferResolution(PIX *pix, l_float32 longside, l_int32 *pres) { l_int32 w, h, maxdim, res; if (!pres) return ERROR_INT("&res not defined", __func__, 1); *pres = 300; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (longside <= 0.0) return ERROR_INT("longside not > 0", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); maxdim = L_MAX(w, h); res = (l_int32)(maxdim / longside + 0.5); res = L_MAX(res, 1); /* don't let it be 0 */ if (res < 10) L_WARNING("low inferred resolution: %d ppi\n", __func__, res); if (res > 10000) L_WARNING("high inferred resolution: %d ppi\n", __func__, res); *pres = res; return 0; } /*-------------------------------------------------------------* * Test alpha component opaqueness * *-------------------------------------------------------------*/ /*! * \brief pixAlphaIsOpaque() * * \param[in] pix 32 bpp, spp == 4 * \param[out] popaque 1 if spp == 4 and all alpha component * values are 255 (opaque); 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      1) On error, opaque is returned as 0 (FALSE).
 * 
*/ l_ok pixAlphaIsOpaque(PIX *pix, l_int32 *popaque) { l_int32 w, h, wpl, i, j, alpha; l_uint32 *data, *line; if (!popaque) return ERROR_INT("&opaque not defined", __func__, 1); *popaque = FALSE; if (!pix) return ERROR_INT("&pix not defined", __func__, 1); if (pixGetDepth(pix) != 32) return ERROR_INT("&pix not 32 bpp", __func__, 1); if (pixGetSpp(pix) != 4) return ERROR_INT("&pix not 4 spp", __func__, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); pixGetDimensions(pix, &w, &h, NULL); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { alpha = GET_DATA_BYTE(line + j, L_ALPHA_CHANNEL); if (alpha ^ 0xff) /* not opaque */ return 0; } } *popaque = TRUE; return 0; } /*-------------------------------------------------------------* * Setup helpers for 8 bpp byte processing * *-------------------------------------------------------------*/ /*! * \brief pixSetupByteProcessing() * * \param[in] pix 8 bpp, no colormap * \param[out] pw [optional] width * \param[out] ph [optional] height * \return line ptr array, or NULL on error * *
 * Notes:
 *      (1) This is a simple helper for processing 8 bpp images with
 *          direct byte access.  It can swap byte order within each word.
 *      (2) After processing, you must call pixCleanupByteProcessing(),
 *          which frees the lineptr array and restores byte order.
 *      (3) Usage:
 *              l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h);
 *              for (i = 0; i < h; i++) {
 *                  l_uint8 *line = lineptrs[i];
 *                  for (j = 0; j < w; j++) {
 *                      val = line[j];
 *                      ...
 *                  }
 *              }
 *              pixCleanupByteProcessing(pix, lineptrs);
 * 
*/ l_uint8 ** pixSetupByteProcessing(PIX *pix, l_int32 *pw, l_int32 *ph) { l_int32 w, h; if (pw) *pw = 0; if (ph) *ph = 0; if (!pix || pixGetDepth(pix) != 8) return (l_uint8 **)ERROR_PTR("pix not defined or not 8 bpp", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); if (pw) *pw = w; if (ph) *ph = h; if (pixGetColormap(pix)) return (l_uint8 **)ERROR_PTR("pix has colormap", __func__, NULL); pixEndianByteSwap(pix); return (l_uint8 **)pixGetLinePtrs(pix, NULL); } /*! * \brief pixCleanupByteProcessing() * * \param[in] pix 8 bpp, no colormap * \param[in] lineptrs ptrs to the beginning of each raster line of data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This must be called after processing that was initiated
 *          by pixSetupByteProcessing() has finished.
 * 
*/ l_ok pixCleanupByteProcessing(PIX *pix, l_uint8 **lineptrs) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!lineptrs) return ERROR_INT("lineptrs not defined", __func__, 1); pixEndianByteSwap(pix); LEPT_FREE(lineptrs); return 0; } /*------------------------------------------------------------------------* * Setting parameters for antialias masking with alpha transforms * *------------------------------------------------------------------------*/ /*! * \brief l_setAlphaMaskBorder() * * \param[in] val1, val2 in [0.0 ... 1.0] * \return void * *
 * Notes:
 *      (1) This sets the opacity values used to generate the two outer
 *          boundary rings in the alpha mask associated with geometric
 *          transforms such as pixRotateWithAlpha().
 *      (2) The default values are val1 = 0.0 (completely transparent
 *          in the outermost ring) and val2 = 0.5 (half transparent
 *          in the second ring).  When the image is blended, this
 *          completely removes the outer ring (shrinking the image by
 *          2 in each direction), and alpha-blends with 0.5 the second ring.
 *          Using val1 = 0.25 and val2 = 0.75 gives a slightly more
 *          blurred border, with no perceptual difference at screen resolution.
 *      (3) The actual mask values are found by multiplying these
 *          normalized opacity values by 255.
 * 
*/ void l_setAlphaMaskBorder(l_float32 val1, l_float32 val2) { val1 = L_MAX(0.0f, L_MIN(1.0f, val1)); val2 = L_MAX(0.0f, L_MIN(1.0f, val2)); AlphaMaskBorderVals[0] = val1; AlphaMaskBorderVals[1] = val2; } leptonica-1.86.0/src/pix3.c000066400000000000000000003653761506303110300154160ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pix3.c *
 *
 *    This file has these operations:
 *
 *      (1) Mask-directed operations
 *      (2) Full-image bit-logical operations
 *      (3) Foreground pixel counting operations on 1 bpp images
 *      (4) Average and variance of pixel values
 *      (5) Mirrored tiling of a smaller image
 *
 *
 *    Masked operations
 *           l_int32     pixSetMasked()
 *           l_int32     pixSetMaskedGeneral()
 *           l_int32     pixCombineMasked()
 *           l_int32     pixCombineMaskedGeneral()
 *           l_int32     pixPaintThroughMask()
 *           l_int32     pixCopyWithBoxa()  -- this is boxa-directed
 *           PIX        *pixPaintSelfThroughMask()
 *           PIX        *pixMakeMaskFromVal()
 *           PIX        *pixMakeMaskFromLUT()
 *           PIX        *pixMakeArbMaskFromRGB()
 *           PIX        *pixSetUnderTransparency()
 *           PIX        *pixMakeAlphaFromMask()
 *           l_int32     pixGetColorNearMaskBoundary()
 *           PIX        *pixDisplaySelectedPixels()  -- for debugging
 *
 *    One and two-image boolean operations on arbitrary depth images
 *           PIX        *pixInvert()
 *           PIX        *pixOr()
 *           PIX        *pixAnd()
 *           PIX        *pixXor()
 *           PIX        *pixSubtract()
 *
 *    Foreground pixel counting in 1 bpp images
 *           l_int32     pixZero()
 *           l_int32     pixForegroundFraction()
 *           NUMA       *pixaCountPixels()
 *           l_int32     pixCountPixels()
 *           l_int32     pixCountPixelsInRect()
 *           NUMA       *pixCountByRow()
 *           NUMA       *pixCountByColumn()
 *           NUMA       *pixCountPixelsByRow()
 *           NUMA       *pixCountPixelsByColumn()
 *           l_int32     pixCountPixelsInRow()
 *           NUMA       *pixGetMomentByColumn()
 *           l_int32     pixThresholdPixelSum()
 *           l_int32    *makePixelSumTab8()
 *           l_int32    *makePixelCentroidTab8()
 *
 *    Average of pixel values in gray images
 *           NUMA       *pixAverageByRow()
 *           NUMA       *pixAverageByColumn()
 *           l_int32     pixAverageInRect()
 *
 *    Average of pixel values in RGB images
 *           l_int32     pixAverageInRectRGB()
 *
 *    Variance of pixel values in gray images
 *           NUMA       *pixVarianceByRow()
 *           NUMA       *pixVarianceByColumn()
 *           l_int32     pixVarianceInRect()
 *
 *    Average of absolute value of pixel differences in gray images
 *           NUMA       *pixAbsDiffByRow()
 *           NUMA       *pixAbsDiffByColumn()
 *           l_int32     pixAbsDiffInRect()
 *           l_int32     pixAbsDiffOnLine()
 *
 *    Count of pixels with specific value
 *           l_int32     pixCountArbInRect()
 *
 *    Mirrored tiling
 *           PIX        *pixMirroredTiling()
 *
 *    Representative tile near but outside region
 *           l_int32     pixFindRepCloseTile()
 *
 *    Static helper function
 *           static BOXA    *findTileRegionsForSearch()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" static BOXA *findTileRegionsForSearch(BOX *box, l_int32 w, l_int32 h, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles); #ifndef NO_CONSOLE_IO #define EQUAL_SIZE_WARNING 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Masked operations * *-------------------------------------------------------------*/ /*! * \brief pixSetMasked() * * \param[in] pixd 1, 2, 4, 8, 16 or 32 bpp; or colormapped * \param[in] pixm [optional] 1 bpp mask; no operation if NULL * \param[in] val value to set at each masked pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) In-place operation.
 *      (2) NOTE: For cmapped images, this calls pixSetMaskedCmap().
 *          %val must be the 32-bit color representation of the RGB pixel.
 *          It is not the index into the colormap!
 *      (2) If pixm == NULL, a warning is given.
 *      (3) This is an implicitly aligned operation, where the UL
 *          corners of pixd and pixm coincide.  A warning is
 *          issued if the two image sizes differ significantly,
 *          but the operation proceeds.
 *      (4) Each pixel in pixd that co-locates with an ON pixel
 *          in pixm is set to the specified input value.
 *          Other pixels in pixd are not changed.
 *      (5) You can visualize this as painting the color through
 *          the mask, as a stencil.
 *      (6) If you do not want to have the UL corners aligned,
 *          use the function pixSetMaskedGeneral(), which requires
 *          you to input the UL corner of pixm relative to pixd.
 *      (7) Implementation details: see comments in pixPaintThroughMask()
 *          for when we use rasterop to do the painting.
 * 
*/ l_ok pixSetMasked(PIX *pixd, PIX *pixm, l_uint32 val) { l_int32 wd, hd, wm, hm, w, h, d, wpld, wplm; l_int32 i, j, rval, gval, bval; l_uint32 *datad, *datam, *lined, *linem; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", __func__); return 0; } if (pixGetColormap(pixd)) { extractRGBValues(val, &rval, &gval, &bval); return pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); d = pixGetDepth(pixd); if (d == 1) val &= 1; else if (d == 2) val &= 3; else if (d == 4) val &= 0x0f; else if (d == 8) val &= 0xff; else if (d == 16) val &= 0xffff; else if (d != 32) return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", __func__, 1); pixGetDimensions(pixm, &wm, &hm, NULL); /* If d == 1, use rasterop; it's about 25x faster */ if (d == 1) { if (val == 0) { PIX *pixmi = pixInvert(NULL, pixm); pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmi, 0, 0); pixDestroy(&pixmi); } else { /* val == 1 */ pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixm, 0, 0); } return 0; } /* For d < 32, use rasterop for val == 0 (black); ~3x faster. */ if (d < 32 && val == 0) { PIX *pixmd = pixUnpackBinary(pixm, d, 1); pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* For d < 32, use rasterop for val == maxval (white); ~3x faster. */ if (d < 32 && val == ((1 << d) - 1)) { PIX *pixmd = pixUnpackBinary(pixm, d, 0); pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } pixGetDimensions(pixd, &wd, &hd, &d); w = L_MIN(wd, wm); h = L_MIN(hd, hm); if (L_ABS(wd - wm) > 7 || L_ABS(hd - hm) > 7) /* allow a small tolerance */ L_WARNING("pixd and pixm sizes differ\n", __func__); datad = pixGetData(pixd); datam = pixGetData(pixm); wpld = pixGetWpl(pixd); wplm = pixGetWpl(pixm); for (i = 0; i < h; i++) { lined = datad + i * wpld; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (GET_DATA_BIT(linem, j)) { switch(d) { case 2: SET_DATA_DIBIT(lined, j, val); break; case 4: SET_DATA_QBIT(lined, j, val); break; case 8: SET_DATA_BYTE(lined, j, val); break; case 16: SET_DATA_TWO_BYTES(lined, j, val); break; case 32: *(lined + j) = val; break; default: return ERROR_INT("shouldn't get here", __func__, 1); } } } } return 0; } /*! * \brief pixSetMaskedGeneral() * * \param[in] pixd 8, 16 or 32 bpp * \param[in] pixm [optional] 1 bpp mask; no operation if null * \param[in] val value to set at each masked pixel * \param[in] x, y location of UL corner of pixm relative to pixd; * can be negative * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place operation.
 *      (2) Alignment is explicit.  If you want the UL corners of
 *          the two images to be aligned, use pixSetMasked().
 *      (3) A typical use would be painting through the foreground
 *          of a small binary mask pixm, located somewhere on a
 *          larger pixd.  Other pixels in pixd are not changed.
 *      (4) You can visualize this as painting the color through
 *          the mask, as a stencil.
 *      (5) This uses rasterop to handle clipping and different depths of pixd.
 *      (6) If pixd has a colormap, you should call pixPaintThroughMask().
 *      (7) Why is this function here, if pixPaintThroughMask() does the
 *          same thing, and does it more generally?  I've retained it here
 *          to show how one can paint through a mask using only full
 *          image rasterops, rather than pixel peeking in pixm and poking
 *          in pixd.  It's somewhat baroque, but I found it amusing.
 * 
*/ l_ok pixSetMaskedGeneral(PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y) { l_int32 wm, hm, d; PIX *pixmu, *pixc; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixm) /* nothing to do */ return 0; d = pixGetDepth(pixd); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixd not 8, 16 or 32 bpp", __func__, 1); if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); /* Unpack binary to depth d, with inversion: 1 --> 0, 0 --> 0xff... */ if ((pixmu = pixUnpackBinary(pixm, d, 1)) == NULL) return ERROR_INT("pixmu not made", __func__, 1); /* Clear stenciled pixels in pixd */ pixGetDimensions(pixm, &wm, &hm, NULL); pixRasterop(pixd, x, y, wm, hm, PIX_SRC & PIX_DST, pixmu, 0, 0); /* Generate image with requisite color */ if ((pixc = pixCreateTemplate(pixmu)) == NULL) { pixDestroy(&pixmu); return ERROR_INT("pixc not made", __func__, 1); } pixSetAllArbitrary(pixc, val); /* Invert stencil mask, and paint color color into stencil */ pixInvert(pixmu, pixmu); pixAnd(pixmu, pixmu, pixc); /* Finally, repaint stenciled pixels, with val, in pixd */ pixRasterop(pixd, x, y, wm, hm, PIX_SRC | PIX_DST, pixmu, 0, 0); pixDestroy(&pixmu); pixDestroy(&pixc); return 0; } /*! * \brief pixCombineMasked() * * \param[in] pixd 1 bpp, 8 bpp gray or 32 bpp rgb; no cmap * \param[in] pixs 1 bpp, 8 bpp gray or 32 bpp rgb; no cmap * \param[in] pixm [optional] 1 bpp mask; no operation if NULL * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) In-place operation; pixd is changed.
 *      (2) This sets each pixel in pixd that co-locates with an ON
 *          pixel in pixm to the corresponding value of pixs.
 *      (3) pixs and pixd must be the same depth and not colormapped.
 *      (4) All three input pix are aligned at the UL corner, and the
 *          operation is clipped to the intersection of all three images.
 *      (5) If pixm == NULL, it's a no-op.
 *      (6) Implementation: see notes in pixCombineMaskedGeneral().
 *          For 8 bpp selective masking, you might guess that it
 *          would be faster to generate an 8 bpp version of pixm,
 *          using pixConvert1To8(pixm, 0, 255), and then use a
 *          general combine operation
 *               d = (d & ~m) | (s & m)
 *          on a word-by-word basis.  Not always.  The word-by-word
 *          combine takes a time that is independent of the mask data.
 *          If the mask is relatively sparse, the byte-check method
 *          is actually faster!
 * 
*/ l_ok pixCombineMasked(PIX *pixd, PIX *pixs, PIX *pixm) { l_int32 w, h, d, ws, hs, ds, wm, hm, dm, wmin, hmin; l_int32 wpl, wpls, wplm, i, j, val; l_uint32 *data, *datas, *datam, *line, *lines, *linem; PIX *pixt; if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixd, &w, &h, &d); pixGetDimensions(pixs, &ws, &hs, &ds); pixGetDimensions(pixm, &wm, &hm, &dm); if (d != ds) return ERROR_INT("pixs and pixd depths differ", __func__, 1); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (d != 1 && d != 8 && d != 32) return ERROR_INT("pixd not 1, 8 or 32 bpp", __func__, 1); if (pixGetColormap(pixd) || pixGetColormap(pixs)) return ERROR_INT("pixs and/or pixd is cmapped", __func__, 1); /* For d = 1, use rasterop. pixt is the part from pixs, under * the fg of pixm, that is to be combined with pixd. We also * use pixt to remove all fg of pixd that is under the fg of pixm. * Then pixt and pixd are combined by ORing. */ wmin = L_MIN(w, L_MIN(ws, wm)); hmin = L_MIN(h, L_MIN(hs, hm)); if (d == 1) { pixt = pixAnd(NULL, pixs, pixm); pixRasterop(pixd, 0, 0, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), pixm, 0, 0); pixRasterop(pixd, 0, 0, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); pixDestroy(&pixt); return 0; } data = pixGetData(pixd); datas = pixGetData(pixs); datam = pixGetData(pixm); wpl = pixGetWpl(pixd); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); if (d == 8) { for (i = 0; i < hmin; i++) { line = data + i * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j)) { val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(line, j, val); } } } } else { /* d == 32 */ for (i = 0; i < hmin; i++) { line = data + i * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j)) line[j] = lines[j]; } } } return 0; } /*! * \brief pixCombineMaskedGeneral() * * \param[in] pixd 1 bpp, 8 bpp gray or 32 bpp rgb * \param[in] pixs 1 bpp, 8 bpp gray or 32 bpp rgb * \param[in] pixm [optional] 1 bpp mask * \param[in] x, y origin of pixs and pixm relative to pixd; can be negative * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) In-place operation; pixd is changed.
 *      (2) This is a generalized version of pixCombinedMasked(), where
 *          the source and mask can be placed at the same (arbitrary)
 *          location relative to pixd.
 *      (3) pixs and pixd must be the same depth and not colormapped.
 *      (4) The UL corners of both pixs and pixm are aligned with
 *          the point (x, y) of pixd, and the operation is clipped to
 *          the intersection of all three images.
 *      (5) If pixm == NULL, it's a no-op.
 *      (6) Implementation.  There are two ways to do these.  In the first,
 *          we use rasterop, ORing the part of pixs under the mask
 *          with pixd (which has been appropriately cleared there first).
 *          In the second, the mask is used one pixel at a time to
 *          selectively replace pixels of pixd with those of pixs.
 *          Here, we use rasterop for 1 bpp and pixel-wise replacement
 *          for 8 and 32 bpp.  To use rasterop for 8 bpp, for example,
 *          we must first generate an 8 bpp version of the mask.
 *          The code is simple:
 *
 *             Pix *pixm8 = pixConvert1To8(NULL, pixm, 0, 255);
 *             Pix *pixt = pixAnd(NULL, pixs, pixm8);
 *             pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC),
 *                         pixm8, 0, 0);
 *             pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST,
 *                         pixt, 0, 0);
 *             pixDestroy(&pixt);
 *             pixDestroy(&pixm8);
 * 
*/ l_ok pixCombineMaskedGeneral(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y) { l_int32 d, w, h, ws, hs, ds, wm, hm, dm, wmin, hmin; l_int32 wpl, wpls, wplm, i, j, val; l_uint32 *data, *datas, *datam, *line, *lines, *linem; PIX *pixt; if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixd, &w, &h, &d); pixGetDimensions(pixs, &ws, &hs, &ds); pixGetDimensions(pixm, &wm, &hm, &dm); if (d != ds) return ERROR_INT("pixs and pixd depths differ", __func__, 1); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (d != 1 && d != 8 && d != 32) return ERROR_INT("pixd not 1, 8 or 32 bpp", __func__, 1); if (pixGetColormap(pixd) || pixGetColormap(pixs)) return ERROR_INT("pixs and/or pixd is cmapped", __func__, 1); /* For d = 1, use rasterop. pixt is the part from pixs, under * the fg of pixm, that is to be combined with pixd. We also * use pixt to remove all fg of pixd that is under the fg of pixm. * Then pixt and pixd are combined by ORing. */ wmin = L_MIN(ws, wm); hmin = L_MIN(hs, hm); if (d == 1) { pixt = pixAnd(NULL, pixs, pixm); pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), pixm, 0, 0); pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); pixDestroy(&pixt); return 0; } wpl = pixGetWpl(pixd); data = pixGetData(pixd); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hmin; i++) { if (y + i < 0 || y + i >= h) continue; line = data + (y + i) * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 8: val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(line, x + j, val); break; case 32: *(line + x + j) = *(lines + j); break; default: return ERROR_INT("shouldn't get here", __func__, 1); } } } } return 0; } /*! * \brief pixPaintThroughMask() * * \param[in] pixd 1, 2, 4, 8, 16 or 32 bpp; or colormapped * \param[in] pixm [optional] 1 bpp mask * \param[in] x, y origin of pixm relative to pixd; can be negative * \param[in] val pixel value to set at each masked pixel * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) In-place operation.  Calls pixSetMaskedCmap() for colormapped
 *          images.
 *      (2) For 1, 2, 4, 8 and 16 bpp gray, we take the appropriate
 *          number of least significant bits of val.
 *      (3) If pixm == NULL, it's a no-op.
 *      (4) The mask origin is placed at (x,y) on pixd, and the
 *          operation is clipped to the intersection of rectangles.
 *      (5) For rgb, the components in val are in the canonical locations,
 *          with red in location COLOR_RED, etc.
 *      (6) Implementation detail 1:
 *          For painting with val == 0 or val == maxval, you can use rasterop.
 *          If val == 0, invert the mask so that it's 0 over the region
 *          into which you want to write, and use PIX_SRC & PIX_DST to
 *          clear those pixels.  To write with val = maxval (all 1's),
 *          use PIX_SRC | PIX_DST to set all bits under the mask.
 *      (7) Implementation detail 2:
 *          The rasterop trick can be used for depth > 1 as well.
 *          For val == 0, generate the mask for depth d from the binary
 *          mask using
 *              pixmd = pixUnpackBinary(pixm, d, 1);
 *          and use pixRasterop() with PIX_MASK.  For val == maxval,
 *              pixmd = pixUnpackBinary(pixm, d, 0);
 *          and use pixRasterop() with PIX_PAINT.
 *          But note that if d == 32 bpp, it is about 3x faster to use
 *          the general implementation (not pixRasterop()).
 *      (8) Implementation detail 3:
 *          It might be expected that the switch in the inner loop will
 *          cause large branching delays and should be avoided.
 *          This is not the case, because the entrance is always the
 *          same and the compiler can correctly predict the jump.
 * 
*/ l_ok pixPaintThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val) { l_int32 d, w, h, wm, hm, wpl, wplm, i, j, rval, gval, bval; l_uint32 *data, *datam, *line, *linem; if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixGetColormap(pixd)) { extractRGBValues(val, &rval, &gval, &bval); return pixSetMaskedCmap(pixd, pixm, x, y, rval, gval, bval); } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); d = pixGetDepth(pixd); if (d == 1) val &= 1; else if (d == 2) val &= 3; else if (d == 4) val &= 0x0f; else if (d == 8) val &= 0xff; else if (d == 16) val &= 0xffff; else if (d != 32) return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", __func__, 1); pixGetDimensions(pixm, &wm, &hm, NULL); /* If d == 1, use rasterop; it's about 25x faster. */ if (d == 1) { if (val == 0) { PIX *pixmi = pixInvert(NULL, pixm); pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmi, 0, 0); pixDestroy(&pixmi); } else { /* val == 1 */ pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixm, 0, 0); } return 0; } /* For d < 32, use rasterop if val == 0 (black); ~3x faster. */ if (d < 32 && val == 0) { PIX *pixmd = pixUnpackBinary(pixm, d, 1); pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* For d < 32, use rasterop if val == maxval (white); ~3x faster. */ if (d < 32 && val == ((1 << d) - 1)) { PIX *pixmd = pixUnpackBinary(pixm, d, 0); pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* All other cases */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hm; i++) { if (y + i < 0 || y + i >= h) continue; line = data + (y + i) * wpl; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 2: SET_DATA_DIBIT(line, x + j, val); break; case 4: SET_DATA_QBIT(line, x + j, val); break; case 8: SET_DATA_BYTE(line, x + j, val); break; case 16: SET_DATA_TWO_BYTES(line, x + j, val); break; case 32: *(line + x + j) = val; break; default: return ERROR_INT("shouldn't get here", __func__, 1); } } } } return 0; } /*! * \brief pixCopyWithBoxa() * * \param[in] pixs all depths; cmap ok * \param[in] boxa e.g., from components of a photomask * \param[in] background L_SET_WHITE or L_SET_BLACK * \return pixd or NULL on error * *
 * Notes:
 *      (1) Pixels from pixs are copied ("blitted") through each box into pixd.
 *      (2) Pixels not copied are preset to either white or black.
 *      (3) This fast and simple implementation can use rasterop because
 *          each region to be copied is rectangular.
 *      (4) A much slower implementation that doesn't use rasterop would make
 *          a 1 bpp mask from the boxa and then copy, pixel by pixel,
 *          through the mask:
 *             pixGetDimensions(pixs, &w, &h, NULL);
 *             pixm = pixCreate(w, h, 1);
 *             pixm = pixMaskBoxa(pixm, pixm, boxa);
 *             pixd = pixCreateTemplate(pixs);
 *             pixSetBlackOrWhite(pixd, background);
 *             pixCombineMasked(pixd, pixs, pixm);
 *             pixDestroy(&pixm);
 * 
*/ PIX * pixCopyWithBoxa(PIX *pixs, BOXA *boxa, l_int32 background) { l_int32 i, n, x, y, w, h; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if (background != L_SET_WHITE && background != L_SET_BLACK) return (PIX *)ERROR_PTR("invalid background", __func__, NULL); pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, background); n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); pixRasterop(pixd, x, y, w, h, PIX_SRC, pixs, x, y); } return pixd; } /*! * \brief pixPaintSelfThroughMask() * * \param[in] pixd 8 bpp gray or 32 bpp rgb; not colormapped * \param[in] pixm 1 bpp mask * \param[in] x, y origin of pixm relative to pixd; must not be negative * \param[in] searchdir L_HORIZ, L_VERT or L_BOTH_DIRECTIONS * \param[in] mindist min distance of nearest tile edge to box; >= 0 * \param[in] tilesize requested size for tiling; may be reduced * \param[in] ntiles number of tiles tested in each row/column * \param[in] distblend distance outside the fg used for blending with pixs * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) In-place operation; pixd is changed.
 *      (2) If pixm == NULL, it's a no-op.
 *      (3) The mask origin is placed at (x,y) on pixd, and the
 *          operation is clipped to the intersection of pixd and the
 *          fg of the mask.
 *      (4) %tsize is the the requested size for tiling.  The actual
 *          actual size for each c.c. will be bounded by the minimum
 *          dimension of the c.c.
 *      (5) For %mindist, %searchdir and %ntiles, see pixFindRepCloseTile().
 *          They determine the set of possible tiles that can be used
 *          to build a larger mirrored tile to paint onto pixd through
 *          the c.c. of pixm.
 *      (6) %distblend is used for alpha blending.  It is only applied
 *          if there is exactly one c.c. in the mask.  Use distblend == 0
 *          to skip blending and just paint through the 1 bpp mask.
 *      (7) To apply blending to more than 1 component, call this function
 *          repeatedly with %pixm, %x and %y representing one component of
 *          the mask each time.  This would be done as follows, for an
 *          underlying image pixs and mask pixm of components to fill:
 *              Boxa *boxa = pixConnComp(pixm, &pixa, 8);
 *              n = boxaGetCount(boxa);
 *              for (i = 0; i < n; i++) {
 *                  Pix *pix = pixaGetPix(pixa, i, L_CLONE);
 *                  Box *box = pixaGetBox(pixa, i, L_CLONE);
 *                  boxGetGeometry(box, &bx, &by, &bw, &bh);
 *                  pixPaintSelfThroughMask(pixs, pix, bx, by, searchdir,
 *                                     mindist, tilesize, ntiles, distblend);
 *                  pixDestroy(&pix);
 *                  boxDestroy(&box);
 *              }
 *              pixaDestroy(&pixa);
 *              boxaDestroy(&boxa);
 *      (8) If no tiles can be found, this falls back to estimating the
 *          color near the boundary of the region to be textured.
 *      (9) This can be used to replace the pixels in some regions of
 *          an image by selected neighboring pixels.  The mask represents
 *          the pixels to be replaced.  For each connected component in
 *          the mask, this function selects up to two tiles of neighboring
 *          pixels to be used for replacement of pixels represented by
 *          the component (i.e., under the FG of that component in the mask).
 *          After selection, mirror replication is used to generate an
 *          image that is large enough to cover the component.  Alpha
 *          blending can also be used outside of the component, but near the
 *          edge, to blur the transition between painted and original pixels.
 * 
*/ l_ok pixPaintSelfThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 searchdir, l_int32 mindist, l_int32 tilesize, l_int32 ntiles, l_int32 distblend) { l_int32 w, h, d, wm, hm, dm, i, n, bx, by, bw, bh, edgeblend, retval, minside; l_uint32 pixval; BOX *box, *boxv, *boxh; BOXA *boxa; PIX *pixf, *pixv, *pixh, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (pixGetColormap(pixd) != NULL) return ERROR_INT("pixd has colormap", __func__, 1); pixGetDimensions(pixd, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixd not 8 or 32 bpp", __func__, 1); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (x < 0 || y < 0) return ERROR_INT("x and y must be non-negative", __func__, 1); if (searchdir != L_HORIZ && searchdir != L_VERT && searchdir != L_BOTH_DIRECTIONS) return ERROR_INT("invalid searchdir", __func__, 1); if (tilesize < 2) return ERROR_INT("tilesize must be >= 2", __func__, 1); if (distblend < 0) return ERROR_INT("distblend must be >= 0", __func__, 1); /* Embed mask in full sized mask */ if (wm < w || hm < h) { pixf = pixCreate(w, h, 1); pixRasterop(pixf, x, y, wm, hm, PIX_SRC, pixm, 0, 0); } else { pixf = pixCopy(NULL, pixm); } /* Get connected components of mask */ boxa = pixConnComp(pixf, &pixa, 8); if ((n = pixaGetCount(pixa)) == 0) { L_WARNING("no fg in mask\n", __func__); pixDestroy(&pixf); pixaDestroy(&pixa); boxaDestroy(&boxa); return 1; } boxaDestroy(&boxa); /* For each c.c., generate one or two representative tiles for * texturizing and apply through the mask. The input 'tilesize' * is the requested value. Note that if there is exactly one * component, and blending at the edge is requested, an alpha mask * is generated, which is larger than the bounding box of the c.c. */ edgeblend = (n == 1 && distblend > 0) ? 1 : 0; if (distblend > 0 && n > 1) L_WARNING("%d components; can not blend at edges\n", __func__, n); retval = 0; for (i = 0; i < n; i++) { if (edgeblend) { pix1 = pixMakeAlphaFromMask(pixf, distblend, &box); } else { pix1 = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); } boxGetGeometry(box, &bx, &by, &bw, &bh); minside = L_MIN(bw, bh); boxh = boxv = NULL; if (searchdir == L_HORIZ || searchdir == L_BOTH_DIRECTIONS) { pixFindRepCloseTile(pixd, box, L_HORIZ, mindist, L_MIN(minside, tilesize), ntiles, &boxh, 0); } if (searchdir == L_VERT || searchdir == L_BOTH_DIRECTIONS) { pixFindRepCloseTile(pixd, box, L_VERT, mindist, L_MIN(minside, tilesize), ntiles, &boxv, 0); } if (!boxh && !boxv) { L_WARNING("tile region not selected; paint color near boundary\n", __func__); pixDestroy(&pix1); pix1 = pixaGetPix(pixa, i, L_CLONE); pixaGetBoxGeometry(pixa, i, &bx, &by, NULL, NULL); retval = pixGetColorNearMaskBoundary(pixd, pixm, box, distblend, &pixval, 0); pixSetMaskedGeneral(pixd, pix1, pixval, bx, by); pixDestroy(&pix1); boxDestroy(&box); continue; } /* Extract the selected squares from pixd */ pixh = (boxh) ? pixClipRectangle(pixd, boxh, NULL) : NULL; pixv = (boxv) ? pixClipRectangle(pixd, boxv, NULL) : NULL; if (pixh && pixv) pix2 = pixBlend(pixh, pixv, 0, 0, 0.5); else if (pixh) pix2 = pixClone(pixh); else /* pixv */ pix2 = pixClone(pixv); pixDestroy(&pixh); pixDestroy(&pixv); boxDestroy(&boxh); boxDestroy(&boxv); /* Generate an image the size of the b.b. of the c.c., * possibly extended by the blending distance, which * is then either painted through the c.c. mask or * blended using the alpha mask for that c.c. */ pix3 = pixMirroredTiling(pix2, bw, bh); if (edgeblend) { pix4 = pixClipRectangle(pixd, box, NULL); pix5 = pixBlendWithGrayMask(pix4, pix3, pix1, 0, 0); pixRasterop(pixd, bx, by, bw, bh, PIX_SRC, pix5, 0, 0); pixDestroy(&pix4); pixDestroy(&pix5); } else { pixCombineMaskedGeneral(pixd, pix3, pix1, bx, by); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxDestroy(&box); } pixaDestroy(&pixa); pixDestroy(&pixf); return retval; } /*! * \brief pixMakeMaskFromVal() * * \param[in] pixs 2, 4 or 8 bpp; can be colormapped * \param[in] val pixel value * \return pixd 1 bpp mask, or NULL on error * *
 * Notes:
 *      (1) This generates a 1 bpp mask image, where a 1 is written in
 *          the mask for each pixel in pixs that has a value %val.
 *      (2) If no pixels have the value, an empty mask is generated.
 * 
*/ PIX * pixMakeMaskFromVal(PIX *pixs, l_int32 val) { l_int32 w, h, d, i, j, sval, wpls, wpld; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pix not 2, 4 or 8 bpp", __func__, NULL); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 2) sval = GET_DATA_DIBIT(lines, j); else if (d == 4) sval = GET_DATA_QBIT(lines, j); else /* d == 8 */ sval = GET_DATA_BYTE(lines, j); if (sval == val) SET_DATA_BIT(lined, j); } } return pixd; } /*! * \brief pixMakeMaskFromLUT() * * \param[in] pixs 2, 4 or 8 bpp; can be colormapped * \param[in] tab 256-entry LUT; 1 means to write to mask * \return pixd 1 bpp mask, or NULL on error * *
 * Notes:
 *      (1) This generates a 1 bpp mask image, where a 1 is written in
 *          the mask for each pixel in pixs that has a value corresponding
 *          to a 1 in the LUT.
 *      (2) The LUT should be of size 256.
 * 
*/ PIX * pixMakeMaskFromLUT(PIX *pixs, l_int32 *tab) { l_int32 w, h, d, i, j, val, wpls, wpld; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!tab) return (PIX *)ERROR_PTR("tab not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pix not 2, 4 or 8 bpp", __func__, NULL); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 2) val = GET_DATA_DIBIT(lines, j); else if (d == 4) val = GET_DATA_QBIT(lines, j); else /* d == 8 */ val = GET_DATA_BYTE(lines, j); if (tab[val] == 1) SET_DATA_BIT(lined, j); } } return pixd; } /*! * \brief pixMakeArbMaskFromRGB() * * \param[in] pixs 32 bpp RGB * \param[in] rc, gc, bc arithmetic factors; can be negative * \param[in] thresh lower threshold on weighted sum of components * \return pixd 1 bpp mask, or NULL on error * *
 * Notes:
 *      (1) This generates a 1 bpp mask image, where a 1 is written in
 *          the mask for each pixel in pixs that satisfies
 *               rc * rval + gc * gval + bc * bval > thresh
 *          where rval is the red component, etc.
 *      (2) Unlike with pixConvertToGray(), there are no constraints
 *          on the color coefficients, which can be negative.  For
 *          example, a mask that discriminates against red and in favor
 *          of blue will have rc < 0.0 and bc > 0.0.
 *      (3) To make the result independent of intensity (the 'V' in HSV),
 *          select coefficients so that %thresh = 0.  Then the result
 *          is not changed when all components are multiplied by the
 *          same constant (as long as nothing saturates).  This can be
 *          useful if, for example, the illumination is not uniform.
 * 
*/ PIX * pixMakeArbMaskFromRGB(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_float32 thresh) { PIX *pix1, *pix2; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (thresh >= 255.0) thresh = 254.0; /* avoid 8 bit overflow */ if ((pix1 = pixConvertRGBToGrayArb(pixs, rc, gc, bc)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); pix2 = pixThresholdToBinary(pix1, thresh + 1); pixInvert(pix2, pix2); pixDestroy(&pix1); return pix2; } /*! * \brief pixSetUnderTransparency() * * \param[in] pixs 32 bpp rgba * \param[in] val 32 bit unsigned color to use where alpha == 0 * \param[in] debug displays layers of pixs * \return pixd 32 bpp rgba, or NULL on error * *
 * Notes:
 *      (1) This sets the r, g and b components under every fully
 *          transparent alpha component to %val.  The alpha components
 *          are unchanged.
 *      (2) Full transparency is denoted by alpha == 0.  Setting
 *          all pixels to a constant %val where alpha is transparent
 *          can improve compressibility by reducing the entropy.
 *      (3) The visual result depends on how the image is displayed.
 *          (a) For display devices that respect the use of the alpha
 *              layer, this will not affect the appearance.
 *          (b) For typical leptonica operations, alpha is ignored,
 *              so there will be a change in appearance because this
 *              resets the rgb values in the fully transparent region.
 *      (4) pixRead() and pixWrite() will, by default, read and write
 *          4-component (rgba) pix in png format.  To ignore the alpha
 *          component after reading, or omit it on writing, pixSetSpp(..., 3).
 *      (5) Here are some examples:
 *          * To convert all fully transparent pixels in a 4 component
 *            (rgba) png file to white:
 *              pixs = pixRead();
 *              pixd = pixSetUnderTransparency(pixs, 0xffffff00, 0);
 *          * To write pixd with the alpha component:
 *              pixWrite(, pixd, IFF_PNG);
 *          * To write and rgba image without the alpha component, first do:
 *              pixSetSpp(pixd, 3);
 *            If you later want to use the alpha, spp must be reset to 4.
 *          * (fancier) To remove the alpha by blending the image over
 *            a white background:
 *              pixRemoveAlpha()
 *            This changes all pixel values where the alpha component is
 *            not opaque (255).
 *      (6) Caution.  rgb images in leptonica typically have value 0 in
 *          the alpha channel, which is fully transparent.  If spp for
 *          such an image were changed from 3 to 4, the image becomes
 *          fully transparent, and this function will set each pixel to %val.
 *          If you really want to set every pixel to the same value,
 *          use pixSetAllArbitrary().
 *      (7) This is useful for compressing an RGBA image where the part
 *          of the image that is fully transparent is random junk; compression
 *          is typically improved by setting that region to a constant.
 *          For rendering as a 3 component RGB image over a uniform
 *          background of arbitrary color, use pixAlphaBlendUniform().
 * 
*/ PIX * pixSetUnderTransparency(PIX *pixs, l_uint32 val, l_int32 debug) { PIX *pixg, *pixm, *pixt, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not defined or not 32 bpp", __func__, NULL); if (pixGetSpp(pixs) != 4) { L_WARNING("no alpha channel; returning a copy\n", __func__); return pixCopy(NULL, pixs); } /* Make a mask from the alpha component with ON pixels * wherever the alpha component is fully transparent (0). * The hard way: * l_int32 *lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); * lut[0] = 1; * pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); * pixm = pixMakeMaskFromLUT(pixg, lut); * LEPT_FREE(lut); * But there's an easier way to set pixels in a mask where * the alpha component is 0 ... */ pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pixm = pixThresholdToBinary(pixg, 1); if (debug) { pixt = pixDisplayLayersRGBA(pixs, 0xffffff00, 600); pixDisplay(pixt, 0, 0); pixDestroy(&pixt); } pixd = pixCopy(NULL, pixs); pixSetMasked(pixd, pixm, (val & 0xffffff00)); pixDestroy(&pixg); pixDestroy(&pixm); return pixd; } /*! * \brief pixMakeAlphaFromMask() * * \param[in] pixs 1 bpp * \param[in] dist blending distance; typically 10 - 30 * \param[out] pbox [optional] use NULL to get the full size * \return pixd (8 bpp gray, or NULL on error * *
 * Notes:
 *      (1) This generates a 8 bpp alpha layer that is opaque (256)
 *          over the FG of pixs, and goes transparent linearly away
 *          from the FG pixels, decaying to 0 (transparent) is an
 *          8-connected distance given by %dist.  If %dist == 0,
 *          this does a simple conversion from 1 to 8 bpp.
 *      (2) If &box == NULL, this returns an alpha mask that is the
 *          full size of pixs.  Otherwise, the returned mask pixd covers
 *          just the FG pixels of pixs, expanded by %dist in each
 *          direction (if possible), and the returned box gives the
 *          location of the returned mask relative to pixs.
 *      (3) This is useful for painting through a mask and allowing
 *          blending of the painted image with an underlying image
 *          in the mask background for pixels near foreground mask pixels.
 *          For example, with an underlying rgb image pix1, an overlaying
 *          image rgb pix2, binary mask pixm, and dist > 0, this
 *          blending is achieved with:
 *              pix3 = pixMakeAlphaFromMask(pixm, dist, &box);
 *              boxGetGeometry(box, &x, &y, NULL, NULL);
 *              pix4 = pixBlendWithGrayMask(pix1, pix2, pix3, x, y);
 * 
*/ PIX * pixMakeAlphaFromMask(PIX *pixs, l_int32 dist, BOX **pbox) { l_int32 w, h; BOX *box1, *box2; PIX *pix1, *pixd; if (pbox) *pbox = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (dist < 0) return (PIX *)ERROR_PTR("dist must be >= 0", __func__, NULL); /* If requested, extract just the region to be affected by the mask */ if (pbox) { pixClipToForeground(pixs, NULL, &box1); if (!box1) { L_WARNING("no ON pixels in mask\n", __func__); return pixCreateTemplate(pixs); /* all background (0) */ } boxAdjustSides(box1, box1, -dist, dist, -dist, dist); pixGetDimensions(pixs, &w, &h, NULL); box2 = boxClipToRectangle(box1, w, h); *pbox = box2; pix1 = pixClipRectangle(pixs, box2, NULL); boxDestroy(&box1); } else { pix1 = pixCopy(NULL, pixs); } if (dist == 0) { pixd = pixConvert1To8(NULL, pix1, 0, 255); pixDestroy(&pix1); return pixd; } /* Blur the boundary of the input mask */ pixInvert(pix1, pix1); pixd = pixDistanceFunction(pix1, 8, 8, L_BOUNDARY_FG); pixMultConstantGray(pixd, 256.0f / dist); pixInvert(pixd, pixd); pixDestroy(&pix1); return pixd; } /*! * \brief pixGetColorNearMaskBoundary() * * \param[in] pixs 32 bpp rgb * \param[in] pixm 1 bpp mask, full image * \param[in] box region of mask; typically b.b. of a component * \param[in] dist distance into BG from mask boundary to use * \param[out] pval average pixel value * \param[in] debug 1 to output mask images * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This finds the average color in a set of pixels that are
 *          roughly a distance %dist from the c.c. boundary and in the
 *          background of the mask image.
 * 
*/ l_ok pixGetColorNearMaskBoundary(PIX *pixs, PIX *pixm, BOX *box, l_int32 dist, l_uint32 *pval, l_int32 debug) { char op[64]; l_int32 empty, bx, by; l_float32 rval, gval, bval; BOX *box1, *box2; PIX *pix1, *pix2, *pix3; if (!pval) return ERROR_INT("&pval not defined", __func__, 1); *pval = 0xffffff00; /* white */ if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm undefined or not 1 bpp", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (dist < 0) return ERROR_INT("dist must be >= 0", __func__, 1); /* Clip mask piece, expanded beyond %box by (%dist + 5) on each side. * box1 is the region requested; box2 is the actual region retrieved, * which is clipped to %pixm */ box1 = boxAdjustSides(NULL, box, -dist - 5, dist + 5, -dist - 5, dist + 5); pix1 = pixClipRectangle(pixm, box1, &box2); /* Expand FG by %dist into the BG */ if (dist == 0) { pix2 = pixCopy(NULL, pix1); } else { snprintf(op, sizeof(op), "d%d.%d", 2 * dist, 2 * dist); pix2 = pixMorphSequence(pix1, op, 0); } /* Expand again by 5 pixels on all sides (dilate 11x11) and XOR, * getting the annulus of FG pixels between %dist and %dist + 5 */ pix3 = pixCopy(NULL, pix2); pixDilateBrick(pix3, pix3, 11, 11); pixXor(pix3, pix3, pix2); pixZero(pix3, &empty); if (!empty) { /* Scan the same region in %pixs, to get average under FG in pix3 */ boxGetGeometry(box2, &bx, &by, NULL, NULL); pixGetAverageMaskedRGB(pixs, pix3, bx, by, 1, L_MEAN_ABSVAL, &rval, &gval, &bval); composeRGBPixel((l_int32)(rval + 0.5), (l_int32)(gval + 0.5), (l_int32)(bval + 0.5), pval); } else { L_WARNING("no pixels found\n", __func__); } if (debug) { lept_rmdir("masknear"); /* erase previous images */ lept_mkdir("masknear"); pixWriteDebug("/tmp/masknear/input.png", pix1, IFF_PNG); pixWriteDebug("/tmp/masknear/adjusted.png", pix2, IFF_PNG); pixWriteDebug("/tmp/masknear/outerfive.png", pix3, IFF_PNG); lept_stderr("Input box; with adjusted sides; clipped\n"); boxPrintStreamInfo(stderr, box); boxPrintStreamInfo(stderr, box1); boxPrintStreamInfo(stderr, box2); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxDestroy(&box1); boxDestroy(&box2); return 0; } /*! * \brief pixDisplaySelectedPixels() * * \param[in] pixs [optional] any depth * \param[in] pixm 1 bpp mask, aligned UL corner with %pixs * \param[in] sel [optional] pattern to paint at each pixel in pixm * \param[in] val rgb rendering of pattern * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For every fg pixel in %pixm, this paints the pattern in %sel
 *          in color %val on a copy of %pixs.
 *      (2) The implementation is to dilate %pixm by %sel, and then
 *          paint through the dilated mask onto %pixs.
 *      (3) If %pixs == NULL, it paints on a white image.
 *      (4) If %sel == NULL, it paints only the pixels in the input %pixm.
 *      (5) This visualization would typically be used in debugging.
 * 
*/ PIX * pixDisplaySelectedPixels(PIX *pixs, PIX *pixm, SEL *sel, l_uint32 val) { l_int32 w, h; PIX *pix1, *pix2; if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, NULL); if (pixs) { pix1 = pixConvertTo32(pixs); } else { pixGetDimensions(pixm, &w, &h, NULL); pix1 = pixCreate(w, h, 32); pixSetAll(pix1); } if (sel) pix2 = pixDilate(NULL, pixm, sel); else pix2 = pixClone(pixm); pixSetMasked(pix1, pix2, val); pixDestroy(&pix2); return pix1; } /*-------------------------------------------------------------* * One and two-image boolean ops on arbitrary depth images * *-------------------------------------------------------------*/ /*! * \brief pixInvert() * * \param[in] pixd [optional]; this can be null, equal to pixs, * or different from pixs * \param[in] pixs * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This inverts pixs, for all pixel depths.
 *      (2) There are 3 cases:
 *           (a) pixd == null,   ~src --> new pixd
 *           (b) pixd == pixs,   ~src --> src  (in-place)
 *           (c) pixd != pixs,   ~src --> input pixd
 *      (3) For clarity, if the case is known, use these patterns:
 *           (a) pixd = pixInvert(NULL, pixs);
 *           (b) pixInvert(pixs, pixs);
 *           (c) pixInvert(pixd, pixs);
 * 
*/ PIX * pixInvert(PIX *pixd, PIX *pixs) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_NOT(PIX_DST), NULL, 0, 0); /* invert pixd */ return pixd; } /*! * \brief pixOr() * * \param[in] pixd [optional]; this can be null, equal to pixs1, * different from pixs1 * \param[in] pixs1 can be == pixd * \param[in] pixs2 must be != pixd * \return pixd always * *
 * Notes:
 *      (1) This gives the union of two images with equal depth,
 *          aligning them to the UL corner.  pixs1 and pixs2
 *          need not have the same width and height.
 *      (2) There are 3 cases:
 *            (a) pixd == null,   (src1 | src2) --> new pixd
 *            (b) pixd == pixs1,  (src1 | src2) --> src1  (in-place)
 *            (c) pixd != pixs1,  (src1 | src2) --> input pixd
 *      (3) For clarity, if the case is known, use these patterns:
 *            (a) pixd = pixOr(NULL, pixs1, pixs2);
 *            (b) pixOr(pixs1, pixs1, pixs2);
 *            (c) pixOr(pixd, pixs1, pixs2);
 *      (4) The size of the result is determined by pixs1.
 *      (5) The depths of pixs1 and pixs2 must be equal.
 *      (6) Note carefully that the order of pixs1 and pixs2 only matters
 *          for the in-place case.  For in-place, you must have
 *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
 *          result: the copy puts pixs1 image data in pixs2, and
 *          the rasterop is then between pixs2 and pixs2 (a no-op).
 * 
*/ PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2) { if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", __func__, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", __func__, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", __func__); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, pixd); /* src1 | src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC | PIX_DST, pixs2, 0, 0); return pixd; } /*! * \brief pixAnd() * * \param[in] pixd [optional]; this can be null, equal to pixs1, * different from pixs1 * \param[in] pixs1 can be == pixd * \param[in] pixs2 must be != pixd * \return pixd always * *
 * Notes:
 *      (1) This gives the intersection of two images with equal depth,
 *          aligning them to the the UL corner.  pixs1 and pixs2
 *          need not have the same width and height.
 *      (2) There are 3 cases:
 *            (a) pixd == null,   (src1 & src2) --> new pixd
 *            (b) pixd == pixs1,  (src1 & src2) --> src1  (in-place)
 *            (c) pixd != pixs1,  (src1 & src2) --> input pixd
 *      (3) For clarity, if the case is known, use these patterns:
 *            (a) pixd = pixAnd(NULL, pixs1, pixs2);
 *            (b) pixAnd(pixs1, pixs1, pixs2);
 *            (c) pixAnd(pixd, pixs1, pixs2);
 *      (4) The size of the result is determined by pixs1.
 *      (5) The depths of pixs1 and pixs2 must be equal.
 *      (6) Note carefully that the order of pixs1 and pixs2 only matters
 *          for the in-place case.  For in-place, you must have
 *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
 *          result: the copy puts pixs1 image data in pixs2, and
 *          the rasterop is then between pixs2 and pixs2 (a no-op).
 * 
*/ PIX * pixAnd(PIX *pixd, PIX *pixs1, PIX *pixs2) { if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", __func__, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", __func__, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", __func__); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, pixd); /* src1 & src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC & PIX_DST, pixs2, 0, 0); return pixd; } /*! * \brief pixXor() * * \param[in] pixd [optional]; this can be null, equal to pixs1, * different from pixs1 * \param[in] pixs1 can be == pixd * \param[in] pixs2 must be != pixd * \return pixd always * *
 * Notes:
 *      (1) This gives the XOR of two images with equal depth,
 *          aligning them to the the UL corner.  pixs1 and pixs2
 *          need not have the same width and height.
 *      (2) There are 3 cases:
 *            (a) pixd == null,   (src1 ^ src2) --> new pixd
 *            (b) pixd == pixs1,  (src1 ^ src2) --> src1  (in-place)
 *            (c) pixd != pixs1,  (src1 ^ src2) --> input pixd
 *      (3) For clarity, if the case is known, use these patterns:
 *            (a) pixd = pixXor(NULL, pixs1, pixs2);
 *            (b) pixXor(pixs1, pixs1, pixs2);
 *            (c) pixXor(pixd, pixs1, pixs2);
 *      (4) The size of the result is determined by pixs1.
 *      (5) The depths of pixs1 and pixs2 must be equal.
 *      (6) Note carefully that the order of pixs1 and pixs2 only matters
 *          for the in-place case.  For in-place, you must have
 *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
 *          result: the copy puts pixs1 image data in pixs2, and
 *          the rasterop is then between pixs2 and pixs2 (a no-op).
 * 
*/ PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2) { if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", __func__, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", __func__, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", __func__); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, pixd); /* src1 ^ src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC ^ PIX_DST, pixs2, 0, 0); return pixd; } /*! * \brief pixSubtract() * * \param[in] pixd [optional]; this can be null, equal to pixs1, * equal to pixs2, or different from both pixs1 and pixs2 * \param[in] pixs1 can be == pixd * \param[in] pixs2 can be == pixd * \return pixd always * *
 * Notes:
 *      (1) This gives the set subtraction of two images with equal depth,
 *          aligning them to the the UL corner.  pixs1 and pixs2
 *          need not have the same width and height.
 *      (2) Source pixs2 is always subtracted from source pixs1.
 *          The result is
 *                  pixs1 \ pixs2 = pixs1 & (~pixs2)
 *      (3) There are 4 cases:
 *            (a) pixd == null,   (src1 - src2) --> new pixd
 *            (b) pixd == pixs1,  (src1 - src2) --> src1  (in-place)
 *            (c) pixd == pixs2,  (src1 - src2) --> src2  (in-place)
 *            (d) pixd != pixs1 && pixd != pixs2),
 *                                 (src1 - src2) --> input pixd
 *      (4) For clarity, if the case is known, use these patterns:
 *            (a) pixd = pixSubtract(NULL, pixs1, pixs2);
 *            (b) pixSubtract(pixs1, pixs1, pixs2);
 *            (c) pixSubtract(pixs2, pixs1, pixs2);
 *            (d) pixSubtract(pixd, pixs1, pixs2);
 *      (5) The size of the result is determined by pixs1.
 *      (6) The depths of pixs1 and pixs2 must be equal.
 * 
*/ PIX * pixSubtract(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 w, h; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", __func__, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", __func__); #endif /* EQUAL_SIZE_WARNING */ pixGetDimensions(pixs1, &w, &h, NULL); if (!pixd) { pixd = pixCopy(NULL, pixs1); pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } else if (pixd == pixs1) { pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } else if (pixd == pixs2) { pixRasterop(pixd, 0, 0, w, h, PIX_NOT(PIX_DST) & PIX_SRC, pixs1, 0, 0); /* src1 & (~src2) */ } else { /* pixd != pixs1 && pixd != pixs2 */ pixCopy(pixd, pixs1); /* sizes pixd to pixs1 if unequal */ pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } return pixd; } /*-------------------------------------------------------------* * Pixel counting * *-------------------------------------------------------------*/ /*! * \brief pixZero() * * \param[in] pix all depths; colormap OK * \param[out] pempty 1 if all bits in image data field are 0; 0 otherwise * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) For a binary image, if there are no fg (black) pixels, empty = 1.
 *      (2) For a grayscale image, if all pixels are black (0), empty = 1.
 *      (3) For an RGB image, if all 4 components in every pixel is 0
 *          (i.e. opaque black), empty = 1.
 *      (4) For a colormapped image, pixel values are 0.  The colormap
 *          is ignored.
 * 
*/ l_ok pixZero(PIX *pix, l_int32 *pempty) { l_int32 w, h, wpl, i, j, fullwords, endbits; l_uint32 endmask; l_uint32 *data, *line; if (!pempty) return ERROR_INT("&empty not defined", __func__, 1); *pempty = 1; if (!pix) return ERROR_INT("pix not defined", __func__, 1); w = pixGetWidth(pix) * pixGetDepth(pix); /* in bits */ h = pixGetHeight(pix); wpl = pixGetWpl(pix); data = pixGetData(pix); fullwords = w / 32; endbits = w & 31; endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < fullwords; j++) if (*line++) { *pempty = 0; return 0; } if (endbits) { if (*line & endmask) { *pempty = 0; return 0; } } } return 0; } /*! * \brief pixForegroundFraction() * * \param[in] pix 1 bpp * \param[out] pfract fraction of ON pixels * \return 0 if OK; 1 on error */ l_ok pixForegroundFraction(PIX *pix, l_float32 *pfract) { l_int32 w, h, count; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", __func__, 1); pixCountPixels(pix, &count, NULL); pixGetDimensions(pix, &w, &h, NULL); *pfract = (l_float32)count / (l_float32)(w * h); return 0; } /*! * \brief pixaCountPixels() * * \param[in] pixa array of 1 bpp pix * \return na of ON pixels in each pix, or NULL on error */ NUMA * pixaCountPixels(PIXA *pixa) { l_int32 d, i, n, count; l_int32 *tab; NUMA *na; PIX *pix; if (!pixa) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return numaCreate(1); pix = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix); pixDestroy(&pix); if (d != 1) return (NUMA *)ERROR_PTR("pixa not 1 bpp", __func__, NULL); if ((na = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixCountPixels(pix, &count, tab); numaAddNumber(na, count); pixDestroy(&pix); } LEPT_FREE(tab); return na; } /*! * \brief pixCountPixels() * * \param[in] pixs 1 bpp * \param[out] pcount count of ON pixels * \param[in] tab8 [optional] 8-bit pixel lookup table * \return 0 if OK; 1 on error */ l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8) { l_uint32 endmask; l_int32 w, h, wpl, i, j; l_int32 fullwords, endbits, sum; l_int32 *tab; l_uint32 *data; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); tab = (tab8) ? tab8 : makePixelSumTab8(); pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); fullwords = w >> 5; endbits = w & 31; endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); sum = 0; for (i = 0; i < h; i++, data += wpl) { for (j = 0; j < fullwords; j++) { l_uint32 word = data[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { l_uint32 word = data[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } } *pcount = sum; if (!tab8) LEPT_FREE(tab); return 0; } /*! * \brief pixCountPixelsInRect() * * \param[in] pixs 1 bpp * \param[in] box (can be null) * \param[out] pcount count of ON pixels * \param[in] tab8 [optional] 8-bit pixel lookup table * \return 0 if OK; 1 on error */ l_ok pixCountPixelsInRect(PIX *pixs, BOX *box, l_int32 *pcount, l_int32 *tab8) { l_int32 w, h, bx, by, bw, bh; BOX *box1; PIX *pix1; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (box) { pixGetDimensions(pixs, &w, &h, NULL); if ((box1 = boxClipToRectangle(box, w, h)) == NULL) return ERROR_INT("box1 not made", __func__, 1); boxGetGeometry(box1, &bx, &by, &bw, &bh); pix1 = pixCreate(bw, bh, 1); pixRasterop(pix1, 0, 0, bw, bh, PIX_SRC, pixs, bx, by); pixCountPixels(pix1, pcount, tab8); pixDestroy(&pix1); boxDestroy(&box1); } else { pixCountPixels(pixs, pcount, tab8); } return 0; } /*! * \brief pixCountByRow() * * \param[in] pix 1 bpp * \param[in] box [optional] clipping box for count; can be null * \return na of number of ON pixels by row, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 * 
*/ NUMA * pixCountByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; NUMA *na; if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); if (!box) return pixCountPixelsByRow(pix, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { count = 0; line = data + i * wpl; for (j = xstart; j < xend; j++) { if (GET_DATA_BIT(line, j)) count++; } numaAddNumber(na, count); } return na; } /*! * \brief pixCountByColumn() * * \param[in] pix 1 bpp * \param[in] box [optional] clipping box for count; can be null * \return na of number of ON pixels by column, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 * 
*/ NUMA * pixCountByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; NUMA *na; if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); if (!box) return pixCountPixelsByColumn(pix); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, xstart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { count = 0; for (i = ystart; i < yend; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) count++; } numaAddNumber(na, count); } return na; } /*! * \brief pixCountPixelsByRow() * * \param[in] pix 1 bpp * \param[in] tab8 [optional] 8-bit pixel lookup table * \return na of counts, or NULL on error */ NUMA * pixCountPixelsByRow(PIX *pix, l_int32 *tab8) { l_int32 h, i, count; l_int32 *tab; NUMA *na; if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); h = pixGetHeight(pix); if ((na = numaCreate(h)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); tab = (tab8) ? tab8 : makePixelSumTab8(); for (i = 0; i < h; i++) { pixCountPixelsInRow(pix, i, &count, tab); numaAddNumber(na, count); } if (!tab8) LEPT_FREE(tab); return na; } /*! * \brief pixCountPixelsByColumn() * * \param[in] pix 1 bpp * \return na of counts in each column, or NULL on error */ NUMA * pixCountPixelsByColumn(PIX *pix) { l_int32 i, j, w, h, wpl; l_uint32 *line, *data; l_float32 *array; NUMA *na; if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); if ((na = numaCreate(w)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, w); array = numaGetFArray(na, L_NOCOPY); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { if (GET_DATA_BIT(line, j)) array[j] += 1.0; } } return na; } /*! * \brief pixCountPixelsInRow() * * \param[in] pix 1 bpp * \param[in] row number * \param[out] pcount sum of ON pixels in raster line * \param[in] tab8 [optional] 8-bit pixel lookup table * \return 0 if OK; 1 on error */ l_ok pixCountPixelsInRow(PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8) { l_uint32 word, endmask; l_int32 j, w, h, wpl; l_int32 fullwords, endbits, sum; l_int32 *tab; l_uint32 *line; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (row < 0 || row >= h) return ERROR_INT("row out of bounds", __func__, 1); wpl = pixGetWpl(pix); line = pixGetData(pix) + row * wpl; fullwords = w >> 5; endbits = w & 31; endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); tab = (tab8) ? tab8 : makePixelSumTab8(); sum = 0; for (j = 0; j < fullwords; j++) { word = line[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { word = line[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } *pcount = sum; if (!tab8) LEPT_FREE(tab); return 0; } /*! * \brief pixGetMomentByColumn() * * \param[in] pix 1 bpp * \param[in] order of moment, either 1 or 2 * \return na of first moment of fg pixels, by column, or NULL on error */ NUMA * pixGetMomentByColumn(PIX *pix, l_int32 order) { l_int32 i, j, w, h, wpl; l_uint32 *line, *data; l_float32 *array; NUMA *na; if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); if (order != 1 && order != 2) return (NUMA *)ERROR_PTR("order of moment not 1 or 2", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); if ((na = numaCreate(w)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, w); array = numaGetFArray(na, L_NOCOPY); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { if (GET_DATA_BIT(line, j)) { if (order == 1) array[j] += i; else /* order == 2 */ array[j] += i * i; } } } return na; } /*! * \brief pixThresholdPixelSum() * * \param[in] pix 1 bpp * \param[in] thresh threshold * \param[out] pabove 1 if above threshold; * 0 if equal to or less than threshold * \param[in] tab8 [optional] 8-bit pixel lookup table * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This sums the ON pixels and returns immediately if the count
 *          goes above threshold.  It is therefore more efficient
 *          for matching images (by running this function on the xor of
 *          the 2 images) than using pixCountPixels(), which counts all
 *          pixels before returning.
 * 
*/ l_ok pixThresholdPixelSum(PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8) { l_uint32 word, endmask; l_int32 *tab; l_int32 w, h, wpl, i, j; l_int32 fullwords, endbits, sum; l_uint32 *line, *data; if (!pabove) return ERROR_INT("&above not defined", __func__, 1); *pabove = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", __func__, 1); tab = (tab8) ? tab8 : makePixelSumTab8(); pixGetDimensions(pix, &w, &h, NULL); wpl = pixGetWpl(pix); data = pixGetData(pix); fullwords = w >> 5; endbits = w & 31; endmask = 0xffffffff << (32 - endbits); sum = 0; for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < fullwords; j++) { word = line[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { word = line[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (sum > thresh) { *pabove = 1; if (!tab8) LEPT_FREE(tab); return 0; } } if (!tab8) LEPT_FREE(tab); return 0; } /*! * \brief makePixelSumTab8() * * \return table of 256 l_int32. * *
 * Notes:
 *      (1) This table of integers gives the number of 1 bits
 *          in the 8 bit index.
 * 
*/ l_int32 * makePixelSumTab8(void) { l_uint8 byte; l_int32 i; l_int32 *tab; tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { byte = (l_uint8)i; tab[i] = (byte & 0x1) + ((byte >> 1) & 0x1) + ((byte >> 2) & 0x1) + ((byte >> 3) & 0x1) + ((byte >> 4) & 0x1) + ((byte >> 5) & 0x1) + ((byte >> 6) & 0x1) + ((byte >> 7) & 0x1); } return tab; } /*! * \brief makePixelCentroidTab8() * * \return table of 256 l_int32. * *
 * Notes:
 *      (1) This table of integers gives the centroid weight of the 1 bits
 *          in the 8 bit index.  In other words, if sumtab is obtained by
 *          makePixelSumTab8, and centroidtab is obtained by
 *          makePixelCentroidTab8, then, for 1 <= i <= 255,
 *          centroidtab[i] / (float)sumtab[i]
 *          is the centroid of the 1 bits in the 8-bit index i, where the
 *          MSB is considered to have position 0 and the LSB is considered
 *          to have position 7.
 * 
*/ l_int32 * makePixelCentroidTab8(void) { l_int32 i; l_int32 *tab; tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); tab[0] = 0; tab[1] = 7; for (i = 2; i < 4; i++) { tab[i] = tab[i - 2] + 6; } for (i = 4; i < 8; i++) { tab[i] = tab[i - 4] + 5; } for (i = 8; i < 16; i++) { tab[i] = tab[i - 8] + 4; } for (i = 16; i < 32; i++) { tab[i] = tab[i - 16] + 3; } for (i = 32; i < 64; i++) { tab[i] = tab[i - 32] + 2; } for (i = 64; i < 128; i++) { tab[i] = tab[i - 64] + 1; } for (i = 128; i < 256; i++) { tab[i] = tab[i - 128]; } return tab; } /*-------------------------------------------------------------* * Average of pixel values in gray images * *-------------------------------------------------------------*/ /*! * \brief pixAverageByRow() * * \param[in] pix 8 or 16 bpp; no colormap * \param[in] box [optional] clipping box for sum; can be null * \param[in] type L_WHITE_IS_MAX, L_BLACK_IS_MAX * \return na of pixel averages by row, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 *      (2) If type == L_BLACK_IS_MAX, black pixels get the maximum
 *          value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0.
 * 
*/ NUMA * pixAverageByRow(PIX *pix, BOX *box, l_int32 type) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; if (!pix) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", __func__, NULL); if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); norm = 1. / (l_float32)bw; if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum = 0.0; line = data + i * wpl; if (d == 8) { for (j = xstart; j < xend; j++) sum += GET_DATA_BYTE(line, j); if (type == L_BLACK_IS_MAX) sum = bw * 255 - sum; } else { /* d == 16 */ for (j = xstart; j < xend; j++) sum += GET_DATA_TWO_BYTES(line, j); if (type == L_BLACK_IS_MAX) sum = bw * 0xffff - sum; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * \brief pixAverageByColumn() * * \param[in] pix 8 or 16 bpp; no colormap * \param[in] box [optional] clipping box for sum; can be null * \param[in] type L_WHITE_IS_MAX, L_BLACK_IS_MAX * \return na of pixel averages by column, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 *      (2) If type == L_BLACK_IS_MAX, black pixels get the maximum
 *          value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0.
 * 
*/ NUMA * pixAverageByColumn(PIX *pix, BOX *box, l_int32 type) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; l_float32 norm, sum; NUMA *na; if (!pix) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", __func__, NULL); if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, xstart, 1); norm = 1.f / (l_float32)bh; data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum = 0.0; if (d == 8) { for (i = ystart; i < yend; i++) { line = data + i * wpl; sum += GET_DATA_BYTE(line, j); } if (type == L_BLACK_IS_MAX) sum = bh * 255 - sum; } else { /* d == 16 */ for (i = ystart; i < yend; i++) { line = data + i * wpl; sum += GET_DATA_TWO_BYTES(line, j); } if (type == L_BLACK_IS_MAX) sum = bh * 0xffff - sum; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * \brief pixAverageInRect() * * \param[in] pixs 1, 2, 4, 8 bpp; not cmapped * \param[in] pixm [optional] 1 bpp mask; if null, use all pixels * \param[in] box [optional] if null, use entire image * \param[in] minval ignore values less than this * \param[in] maxval ignore values greater than this * \param[in] subsamp subsample factor: integer; use 1 for all pixels * \param[out] pave average of pixel values under consideration * \return 0 if OK; 1 on error; 2 if all pixels are filtered out * *
 * Notes:
 *      (1) The average is computed with 4 optional filters: a rectangle,
 *          a mask, a contiguous set of range values, and subsampling.
 *          In practice you might use only one or two of these.
 *      (2) The mask %pixm is a blocking mask: only count pixels in the bg.
 *          If it exists, alignment is assumed at UL corner and computation
 *          is over the minimum intersection of %pixs and %pixm.
 *          If you want the average of pixels under the mask fg, invert it.
 *      (3) Set the range limits %minval = 0 and %maxval = 255 to use
 *          all non-masked pixels (regardless of value) in the average.
 *      (4) If no pixels are used in the averaging, the returned average
 *          value is 0 and the function returns 2.  This is not an error,
 *          but it says to disregard the returned average value.
 *      (5) For example, to average all pixels in a given clipping rect %box,
 *              pixAverageInRect(pixs, NULL, box, 0, 255, 1, &aveval);
 * 
*/ l_ok pixAverageInRect(PIX *pixs, PIX *pixm, BOX *box, l_int32 minval, l_int32 maxval, l_int32 subsamp, l_float32 *pave) { l_int32 w, h, d, wpls, wm, hm, dm, wplm, val, count; l_int32 i, j, xstart, xend, ystart, yend; l_uint32 *datas, *datam = NULL, *lines, *linem = NULL; l_float64 sum; if (!pave) return ERROR_INT("&ave not defined", __func__, 1); *pave = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs is colormapped", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("pixs not 1, 2, 4 or 8 bpp", __func__, 1); if (pixm) { pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); w = L_MIN(w, wm); h = L_MIN(h, hm); } if (subsamp < 1) return ERROR_INT("subsamp must be >= 1", __func__, 1); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, NULL, NULL) == 1) return ERROR_INT("invalid clipping box", __func__, 1); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pixm) { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); } sum = 0.0; count = 0; for (i = ystart; i < yend; i += subsamp) { lines = datas + i * wpls; if (pixm) linem = datam + i * wplm; for (j = xstart; j < xend; j += subsamp) { if (pixm && (GET_DATA_BIT(linem, j) == 1)) continue; if (d == 1) val = GET_DATA_BIT(lines, j); else if (d == 2) val = GET_DATA_DIBIT(lines, j); else if (d == 4) val = GET_DATA_QBIT(lines, j); else /* d == 8 */ val = GET_DATA_BYTE(lines, j); if (val >= minval && val <= maxval) { sum += val; count++; } } } if (count == 0) return 2; /* not an error; don't use the average value (0.0) */ *pave = sum / (l_float32)count; return 0; } /*-------------------------------------------------------------* * Average of pixel values in RGB images * *-------------------------------------------------------------*/ /*! * \brief pixAverageInRectRGB() * * \param[in] pixs rgb; not cmapped * \param[in] pixm [optional] 1 bpp mask; if null, use all pixels * \param[in] box [optional] if null, use entire image * \param[in] subsamp subsample factor: integer; use 1 for all pixels * \param[out] pave average color of pixel values under consideration, * in format 0xrrggbb00. * \return 0 if OK; 1 on error; 2 if all pixels are filtered out * *
 * Notes:
 *      (1) The average is computed with 3 optional filters: a rectangle,
 *          a mask, and subsampling.
 *          In practice you might use only one or two of these.
 *      (2) The mask %pixm is a blocking mask: only count pixels in the bg.
 *          If it exists, alignment is assumed at UL corner and computation
 *          is over the minimum intersection of %pixs and %pixm.
 *          If you want the average of pixels under the mask fg, invert it.
 *      (3) If no pixels are used in the averaging, the returned average
 *          value is 0 and the function returns 2.  This is not an error,
 *          but it says to disregard the returned average value.
 *      (4) For example, to average all pixels in a given clipping rect %box,
 *              pixAverageInRectRGB(pixs, NULL, box, 1, &aveval);
 * 
*/ l_ok pixAverageInRectRGB(PIX *pixs, PIX *pixm, BOX *box, l_int32 subsamp, l_uint32 *pave) { l_int32 w, h, wpls, wm, hm, dm, wplm, i, j, xstart, xend, ystart, yend; l_int32 rval, gval, bval, rave, gave, bave, count; l_uint32 *datas, *datam = NULL, *lines, *linem = NULL; l_uint32 pixel; l_float64 rsum, gsum, bsum; if (!pave) return ERROR_INT("&ave not defined", __func__, 1); *pave = 0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (pixm) { pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); w = L_MIN(w, wm); h = L_MIN(h, hm); } if (subsamp < 1) return ERROR_INT("subsamp must be >= 1", __func__, 1); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, NULL, NULL) == 1) return ERROR_INT("invalid clipping box", __func__, 1); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pixm) { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); } rsum = gsum = bsum = 0.0; count = 0; for (i = ystart; i < yend; i += subsamp) { lines = datas + i * wpls; if (pixm) linem = datam + i * wplm; for (j = xstart; j < xend; j += subsamp) { if (pixm && (GET_DATA_BIT(linem, j) == 1)) continue; pixel = *(lines + j); extractRGBValues(pixel, &rval, &gval, &bval); rsum += rval; gsum += gval; bsum += bval; count++; } } if (count == 0) return 2; /* not an error */ rave = (l_uint32)(rsum / (l_float64)count); gave = (l_uint32)(gsum / (l_float64)count); bave = (l_uint32)(bsum / (l_float64)count); composeRGBPixel(rave, gave, bave, pave); return 0; } /*------------------------------------------------------------------* * Variance of pixel values in gray images * *------------------------------------------------------------------*/ /*! * \brief pixVarianceByRow() * * \param[in] pix 8 or 16 bpp; no colormap * \param[in] box [optional] clipping box for variance; can be null * \return na of rmsdev by row, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 *      (2) We are actually computing the RMS deviation in each row.
 *          This is the square root of the variance.
 * 
*/ NUMA * pixVarianceByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *line, *data; l_float64 sum1, sum2, norm, ave, var, rootvar; NUMA *na; if (!pix) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, ystart, 1); norm = 1. / (l_float32)bw; data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum1 = sum2 = 0.0; line = data + i * wpl; for (j = xstart; j < xend; j++) { if (d == 8) val = GET_DATA_BYTE(line, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; rootvar = sqrt(var); numaAddNumber(na, (l_float32)rootvar); } return na; } /*! * \brief pixVarianceByColumn() * * \param[in] pix 8 or 16 bpp; no colormap * \param[in] box [optional] clipping box for variance; can be null * \return na of rmsdev by column, or NULL on error * *
 * Notes:
 *      (1) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 *      (2) We are actually computing the RMS deviation in each row.
 *          This is the square root of the variance.
 * 
*/ NUMA * pixVarianceByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *line, *data; l_float64 sum1, sum2, norm, ave, var, rootvar; NUMA *na; if (!pix) return (NUMA *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, xstart, 1); norm = 1. / (l_float32)bh; data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum1 = sum2 = 0.0; for (i = ystart; i < yend; i++) { line = data + wpl * i; if (d == 8) val = GET_DATA_BYTE(line, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; rootvar = sqrt(var); numaAddNumber(na, (l_float32)rootvar); } return na; } /*! * \brief pixVarianceInRect() * * \param[in] pix 1, 2, 4, 8 bpp; not cmapped * \param[in] box [optional] if null, use entire image * \param[out] prootvar sqrt variance of pixel values in region * \return 0 if OK; 1 on error */ l_ok pixVarianceInRect(PIX *pix, BOX *box, l_float32 *prootvar) { l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *data, *line; l_float64 sum1, sum2, norm, ave, var; if (!prootvar) return ERROR_INT("&rootvar not defined", __func__, 1); *prootvar = 0.0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("pix not 1, 2, 4 or 8 bpp", __func__, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", __func__, 1); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", __func__, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); sum1 = sum2 = 0.0; for (i = ystart; i < yend; i++) { line = data + i * wpl; for (j = xstart; j < xend; j++) { if (d == 1) { val = GET_DATA_BIT(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } else if (d == 2) { val = GET_DATA_DIBIT(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } else if (d == 4) { val = GET_DATA_QBIT(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } else { /* d == 8 */ val = GET_DATA_BYTE(line, j); sum1 += val; sum2 += (l_float64)(val) * val; } } } norm = 1.0 / ((l_float64)(bw) * bh); ave = norm * sum1; var = norm * sum2 - ave * ave; *prootvar = (l_float32)sqrt(var); return 0; } /*---------------------------------------------------------------------* * Average of absolute value of pixel differences in gray images * *---------------------------------------------------------------------*/ /*! * \brief pixAbsDiffByRow() * * \param[in] pix 8 bpp; no colormap * \param[in] box [optional] clipping box for region; can be null * \return na of abs val pixel difference averages by row, or NULL on error * *
 * Notes:
 *      (1) This is an average over differences of adjacent pixels along
 *          each row.
 *      (2) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 * 
*/ NUMA * pixAbsDiffByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; if (!pix || pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if (bw < 2) return (NUMA *)ERROR_PTR("row width must be >= 2", __func__, NULL); norm = 1. / (l_float32)(bw - 1); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum = 0.0; line = data + i * wpl; val0 = GET_DATA_BYTE(line, xstart); for (j = xstart + 1; j < xend; j++) { val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * \brief pixAbsDiffByColumn() * * \param[in] pix 8 bpp; no colormap * \param[in] box [optional] clipping box for region; can be null * \return na of abs val pixel difference averages by column, * or NULL on error * *
 * Notes:
 *      (1) This is an average over differences of adjacent pixels along
 *          each column.
 *      (2) To resample for a bin size different from 1, use
 *          numaUniformSampling() on the result of this function.
 * 
*/ NUMA * pixAbsDiffByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; if (!pix || pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", __func__, NULL); if (bh < 2) return (NUMA *)ERROR_PTR("column height must be >= 2", __func__, NULL); norm = 1. / (l_float32)(bh - 1); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetParameters(na, xstart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum = 0.0; line = data + ystart * wpl; val0 = GET_DATA_BYTE(line, j); for (i = ystart + 1; i < yend; i++) { line = data + i * wpl; val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * \brief pixAbsDiffInRect() * * \param[in] pix 8 bpp; not cmapped * \param[in] box [optional] if null, use entire image * \param[in] dir differences along L_HORIZONTAL_LINE or L_VERTICAL_LINE * \param[out] pabsdiff average of abs diff pixel values in region * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This gives the average over the abs val of differences of
 *          adjacent pixels values, along either each
 *             row:     dir == L_HORIZONTAL_LINE
 *             column:  dir == L_VERTICAL_LINE
 * 
*/ l_ok pixAbsDiffInRect(PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff) { l_int32 w, h, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *data, *line; l_float64 norm, sum; if (!pabsdiff) return ERROR_INT("&absdiff not defined", __func__, 1); *pabsdiff = 0.0; if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix undefined or not 8 bpp", __func__, 1); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return ERROR_INT("invalid direction", __func__, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", __func__, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); if (dir == L_HORIZONTAL_LINE) { norm = 1. / (l_float32)(bh * (bw - 1)); sum = 0.0; for (i = ystart; i < yend; i++) { line = data + i * wpl; val0 = GET_DATA_BYTE(line, xstart); for (j = xstart + 1; j < xend; j++) { val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } } } else { /* vertical line */ norm = 1. / (l_float32)(bw * (bh - 1)); sum = 0.0; for (j = xstart; j < xend; j++) { line = data + ystart * wpl; val0 = GET_DATA_BYTE(line, j); for (i = ystart + 1; i < yend; i++) { line = data + i * wpl; val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } } } *pabsdiff = (l_float32)(norm * sum); return 0; } /*! * \brief pixAbsDiffOnLine() * * \param[in] pix 8 bpp; not cmapped * \param[in] x1, y1 first point; x1 <= x2, y1 <= y2 * \param[in] x2, y2 first point * \param[out] pabsdiff average of abs diff pixel values on line * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This gives the average over the abs val of differences of
 *          adjacent pixels values, along a line that is either horizontal
 *          or vertical.
 *      (2) If horizontal, require x1 < x2; if vertical, require y1 < y2.
 * 
*/ l_ok pixAbsDiffOnLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff) { l_int32 w, h, i, j, dir, size, sum; l_uint32 val0, val1; if (!pabsdiff) return ERROR_INT("&absdiff not defined", __func__, 1); *pabsdiff = 0.0; if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix undefined or not 8 bpp", __func__, 1); if (y1 == y2) { dir = L_HORIZONTAL_LINE; } else if (x1 == x2) { dir = L_VERTICAL_LINE; } else { return ERROR_INT("line is neither horiz nor vert", __func__, 1); } if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); sum = 0; if (dir == L_HORIZONTAL_LINE) { x1 = L_MAX(x1, 0); x2 = L_MIN(x2, w - 1); if (x1 >= x2) return ERROR_INT("x1 >= x2", __func__, 1); size = x2 - x1; pixGetPixel(pix, x1, y1, &val0); for (j = x1 + 1; j <= x2; j++) { pixGetPixel(pix, j, y1, &val1); sum += L_ABS((l_int32)val1 - (l_int32)val0); val0 = val1; } } else { /* vertical */ y1 = L_MAX(y1, 0); y2 = L_MIN(y2, h - 1); if (y1 >= y2) return ERROR_INT("y1 >= y2", __func__, 1); size = y2 - y1; pixGetPixel(pix, x1, y1, &val0); for (i = y1 + 1; i <= y2; i++) { pixGetPixel(pix, x1, i, &val1); sum += L_ABS((l_int32)val1 - (l_int32)val0); val0 = val1; } } *pabsdiff = (l_float32)sum / (l_float32)size; return 0; } /*-------------------------------------------------------------* * Count of pixels with specific value * *-------------------------------------------------------------*/ /*! * \brief pixCountArbInRect() * * \param[in] pixs 1,2,4,8 bpp; can be colormapped * \param[in] box [optional] over which count is made; * use entire image if NULL * \param[in] val pixel value to count * \param[in] factor subsampling factor; integer >= 1 * \param[out] pcount count; estimate it if factor > 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) If pixs is cmapped, %val is compared to the colormap index;
 *          otherwise, %val is compared to the grayscale value.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 *          If %factor > 1, multiply the count by %factor * %factor.
 * 
*/ l_int32 pixCountArbInRect(PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount) { l_int32 i, j, bx, by, bw, bh, w, h, d, wpl, pixval; l_uint32 *data, *line; if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("pixs not 1, 2, 4 or 8 bpp", __func__, 1); if (val < 0) return ERROR_INT("val < 0", __func__, 1); if (val > (1 << d) - 1) { L_ERROR("invalid val = %d for depth %d\n", __func__, val, d); return 1; } if (factor < 1) return ERROR_INT("sampling factor < 1", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (!box) { for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) { pixval = GET_DATA_BYTE(line, j); } else if (d == 1) { pixval = GET_DATA_BIT(line, j); } else if (d == 2) { pixval = GET_DATA_DIBIT(line, j); } else /* d == 4 */ { pixval = GET_DATA_QBIT(line, j); } if (pixval == val) (*pcount)++; } } } else { boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; line = data + (by + i) * wpl; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; if (d == 8) { pixval = GET_DATA_BYTE(line, bx + j); } else if (d == 1) { pixval = GET_DATA_BIT(line, bx + j); } else if (d == 2) { pixval = GET_DATA_DIBIT(line, bx + j); } else /* d == 4 */ { pixval = GET_DATA_QBIT(line, bx + j); } if (pixval == val) (*pcount)++; } } } if (factor > 1) /* assume pixel color is randomly distributed */ *pcount = *pcount * factor * factor; return 0; } /*-------------------------------------------------------------* * Mirrored tiling of a smaller image * *-------------------------------------------------------------*/ /*! * \brief pixMirroredTiling() * * \param[in] pixs 8 or 32 bpp, small tile; to be replicated * \param[in] w, h dimensions of output pix * \return pixd usually larger pix, mirror-tiled with pixs, * or NULL on error * *
 * Notes:
 *      (1) This uses mirrored tiling, where each row alternates
 *          with LR flips and every column alternates with TB
 *          flips, such that the result is a tiling with identical
 *          2 x 2 tiles, each of which is composed of these transforms:
 *                  -----------------
 *                  | 1    |  LR    |
 *                  -----------------
 *                  | TB   |  LR/TB |
 *                  -----------------
 * 
*/ PIX * pixMirroredTiling(PIX *pixs, l_int32 w, l_int32 h) { l_int32 wt, ht, d, i, j, nx, ny; PIX *pixd, *pixsfx, *pixsfy, *pixsfxy, *pix; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &wt, &ht, &d); if (wt <= 0 || ht <= 0) return (PIX *)ERROR_PTR("pixs size illegal", __func__, NULL); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", __func__, NULL); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopySpp(pixd, pixs); nx = (w + wt - 1) / wt; ny = (h + ht - 1) / ht; pixsfx = pixFlipLR(NULL, pixs); pixsfy = pixFlipTB(NULL, pixs); pixsfxy = pixFlipTB(NULL, pixsfx); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pix = pixs; if ((i & 1) && !(j & 1)) pix = pixsfy; else if (!(i & 1) && (j & 1)) pix = pixsfx; else if ((i & 1) && (j & 1)) pix = pixsfxy; pixRasterop(pixd, j * wt, i * ht, wt, ht, PIX_SRC, pix, 0, 0); } } pixDestroy(&pixsfx); pixDestroy(&pixsfy); pixDestroy(&pixsfxy); return pixd; } /*! * \brief pixFindRepCloseTile() * * \param[in] pixs 32 bpp rgb * \param[in] box region of pixs to search around * \param[in] searchdir L_HORIZ or L_VERT; direction to search * \param[in] mindist min distance of selected tile edge from box; >= 0 * \param[in] tsize tile size; > 1; even; typically ~50 * \param[in] ntiles number of tiles tested in each row/column * \param[out] pboxtile region of best tile * \param[in] debug 1 for debug output * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This looks for one or two square tiles with conforming median
 *          intensity and low variance, that is outside but near the input box.
 *      (2) %mindist specifies the gap between the box and the
 *          potential tiles.  The tiles are given an overlap of 50%.
 *          %ntiles specifies the number of tiles that are tested
 *          beyond %mindist for each row or column.
 *      (3) For example, if %mindist = 20, %tilesize = 50 and %ntiles = 3,
 *          a horizontal search to the right will have 3 tiles in each row,
 *          with left edges at 20, 45 and 70 from the right edge of the
 *          input %box.  The number of rows of tiles is determined by
 *          the height of %box and %tsize, with the 50% overlap..
 * 
*/ l_ok pixFindRepCloseTile(PIX *pixs, BOX *box, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles, BOX **pboxtile, l_int32 debug) { l_int32 w, h, i, n, bestindex; l_float32 var_of_mean, median_of_mean, median_of_stdev, mean_val, stdev_val; l_float32 mindels, bestdelm, delm, dels, mean, stdev; BOXA *boxa; NUMA *namean, *nastdev; PIX *pix, *pixg; PIXA *pixa; if (!pboxtile) return ERROR_INT("&boxtile not defined", __func__, 1); *pboxtile = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (searchdir != L_HORIZ && searchdir != L_VERT) return ERROR_INT("invalid searchdir", __func__, 1); if (mindist < 0) return ERROR_INT("mindist must be >= 0", __func__, 1); if (tsize < 2) return ERROR_INT("tsize must be > 1", __func__, 1); if (ntiles > 7) { L_WARNING("ntiles = %d; larger than suggested max of 7\n", __func__, ntiles); } /* Locate tile regions */ pixGetDimensions(pixs, &w, &h, NULL); boxa = findTileRegionsForSearch(box, w, h, searchdir, mindist, tsize, ntiles); if (!boxa) return ERROR_INT("no tiles found", __func__, 1); /* Generate the tiles and the mean and stdev of intensity */ pixa = pixClipRectangles(pixs, boxa); n = pixaGetCount(pixa); namean = numaCreate(n); nastdev = numaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixg = pixConvertRGBToGray(pix, 0.33f, 0.34f, 0.33f); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_MEAN_ABSVAL, &mean); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_STANDARD_DEVIATION, &stdev); numaAddNumber(namean, mean); numaAddNumber(nastdev, stdev); pixDestroy(&pix); pixDestroy(&pixg); } /* Find the median and variance of the averages. We require * the best tile to have a mean pixel intensity within a standard * deviation of the median of mean intensities, and choose the * tile in that set with the smallest stdev of pixel intensities * (as a proxy for the tile with least visible structure). * The median of the stdev is used, for debugging, as a normalizing * factor for the stdev of intensities within a tile. */ numaGetStatsUsingHistogram(namean, 256, NULL, NULL, NULL, &var_of_mean, &median_of_mean, 0.0, NULL, NULL); numaGetStatsUsingHistogram(nastdev, 256, NULL, NULL, NULL, NULL, &median_of_stdev, 0.0, NULL, NULL); mindels = 1000.0; bestdelm = 1000.0; bestindex = 0; for (i = 0; i < n; i++) { numaGetFValue(namean, i, &mean_val); numaGetFValue(nastdev, i, &stdev_val); if (var_of_mean == 0.0) { /* uniform color; any box will do */ delm = 0.0; /* any value < 1.01 */ dels = 1.0; /* n'importe quoi */ } else { delm = L_ABS(mean_val - median_of_mean) / sqrt(var_of_mean); dels = stdev_val / median_of_stdev; } if (delm < 1.01) { if (dels < mindels) { if (debug) { lept_stderr("i = %d, mean = %7.3f, delm = %7.3f," " stdev = %7.3f, dels = %7.3f\n", i, mean_val, delm, stdev_val, dels); } mindels = dels; bestdelm = delm; bestindex = i; } } } *pboxtile = boxaGetBox(boxa, bestindex, L_COPY); if (debug) { L_INFO("median of mean = %7.3f\n", __func__, median_of_mean); L_INFO("standard dev of mean = %7.3f\n", __func__, sqrt(var_of_mean)); L_INFO("median of stdev = %7.3f\n", __func__, median_of_stdev); L_INFO("best tile: index = %d\n", __func__, bestindex); L_INFO("delta from median in units of stdev = %5.3f\n", __func__, bestdelm); L_INFO("stdev as fraction of median stdev = %5.3f\n", __func__, mindels); } numaDestroy(&namean); numaDestroy(&nastdev); pixaDestroy(&pixa); boxaDestroy(&boxa); return 0; } /*! * \brief findTileRegionsForSearch() * * \param[in] box region of Pix to search around * \param[in] w, h dimensions of Pix * \param[in] searchdir L_HORIZ or L_VERT; direction to search * \param[in] mindist min distance of selected tile edge from box; >= 0 * \param[in] tsize tile size; > 1; even; typically ~50 * \param[in] ntiles number of tiles tested in each row/column * \return boxa if OK, or NULL on error * *
 * Notes:
 *      (1) See calling function pixfindRepCloseTile().
 * 
*/ static BOXA * findTileRegionsForSearch(BOX *box, l_int32 w, l_int32 h, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles) { l_int32 bx, by, bw, bh, left, right, top, bot, i, j, nrows, ncols; l_int32 x0, y0, x, y, w_avail, w_needed, h_avail, h_needed, t_avail; BOX *box1; BOXA *boxa; if (!box) return (BOXA *)ERROR_PTR("box not defined", __func__, NULL); if (ntiles == 0) return (BOXA *)ERROR_PTR("no tiles requested", __func__, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); if (searchdir == L_HORIZ) { /* Find the tile parameters for the search. Note that the * tiles are overlapping by 50% in each direction. */ left = bx; /* distance to left of box */ right = w - bx - bw + 1; /* distance to right of box */ w_avail = L_MAX(left, right) - mindist; if (tsize & 1) tsize++; /* be sure it's even */ if (w_avail < tsize) { L_ERROR("tsize = %d, w_avail = %d\n", __func__, tsize, w_avail); return NULL; } w_needed = tsize + (ntiles - 1) * (tsize / 2); if (w_needed > w_avail) { t_avail = 1 + 2 * (w_avail - tsize) / tsize; L_WARNING("ntiles = %d; room for only %d\n", __func__, ntiles, t_avail); ntiles = t_avail; w_needed = tsize + (ntiles - 1) * (tsize / 2); } nrows = L_MAX(1, 1 + 2 * (bh - tsize) / tsize); /* Generate the tile regions to search */ boxa = boxaCreate(0); if (left > right) /* search to left */ x0 = bx - w_needed; else /* search to right */ x0 = bx + bw + mindist; for (i = 0; i < nrows; i++) { y = by + i * tsize / 2; for (j = 0; j < ntiles; j++) { x = x0 + j * tsize / 2; box1 = boxCreate(x, y, tsize, tsize); boxaAddBox(boxa, box1, L_INSERT); } } } else { /* L_VERT */ /* Find the tile parameters for the search */ top = by; /* distance above box */ bot = h - by - bh + 1; /* distance below box */ h_avail = L_MAX(top, bot) - mindist; if (h_avail < tsize) { L_ERROR("tsize = %d, h_avail = %d\n", __func__, tsize, h_avail); return NULL; } h_needed = tsize + (ntiles - 1) * (tsize / 2); if (h_needed > h_avail) { t_avail = 1 + 2 * (h_avail - tsize) / tsize; L_WARNING("ntiles = %d; room for only %d\n", __func__, ntiles, t_avail); ntiles = t_avail; h_needed = tsize + (ntiles - 1) * (tsize / 2); } ncols = L_MAX(1, 1 + 2 * (bw - tsize) / tsize); /* Generate the tile regions to search */ boxa = boxaCreate(0); if (top > bot) /* search above */ y0 = by - h_needed; else /* search below */ y0 = by + bh + mindist; for (j = 0; j < ncols; j++) { x = bx + j * tsize / 2; for (i = 0; i < ntiles; i++) { y = y0 + i * tsize / 2; box1 = boxCreate(x, y, tsize, tsize); boxaAddBox(boxa, box1, L_INSERT); } } } return boxa; } leptonica-1.86.0/src/pix4.c000066400000000000000000003536011506303110300154030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pix4.c *
 *
 *    This file has these operations:
 *
 *      (1) Pixel histograms
 *      (2) Pixel row/column statistics
 *      (3) Foreground/background estimation
 *
 *    Pixel histogram, rank val, averaging and min/max
 *           NUMA       *pixGetGrayHistogram()
 *           NUMA       *pixGetGrayHistogramMasked()
 *           NUMA       *pixGetGrayHistogramInRect()
 *           NUMAA      *pixGetGrayHistogramTiled()
 *           l_int32     pixGetColorHistogram()
 *           l_int32     pixGetColorHistogramMasked()
 *           NUMA       *pixGetCmapHistogram()
 *           NUMA       *pixGetCmapHistogramMasked()
 *           NUMA       *pixGetCmapHistogramInRect()
 *           l_int32     pixCountRGBColorsByHash()
 *           l_int32     pixCountRGBColors()
 *           L_AMAP     *pixGetColorAmapHistogram()
 *           l_int32     amapGetCountForColor()
 *           l_int32     pixGetRankValue()
 *           l_int32     pixGetRankValueMaskedRGB()
 *           l_int32     pixGetRankValueMasked()
 *           l_int32     pixGetPixelAverage()
 *           l_int32     pixGetPixelStats()
 *           l_int32     pixGetAverageMaskedRGB()
 *           l_int32     pixGetAverageMasked()
 *           l_int32     pixGetAverageTiledRGB()
 *           PIX        *pixGetAverageTiled()
 *           NUMA       *pixRowStats()
 *           NUMA       *pixColumnStats()
 *           l_int32     pixGetRangeValues()
 *           l_int32     pixGetExtremeValue()
 *           l_int32     pixGetMaxValueInRect()
 *           l_int32     pixGetMaxColorIndex()
 *           l_int32     pixGetBinnedComponentRange()
 *           l_int32     pixGetRankColorArray()
 *           l_int32     pixGetBinnedColor()
 *           PIX        *pixDisplayColorArray()
 *           PIX        *pixRankBinByStrip()
 *
 *    Pixelwise aligned statistics
 *           PIX        *pixaGetAlignedStats()
 *           l_int32     pixaExtractColumnFromEachPix()
 *           l_int32     pixGetRowStats()
 *           l_int32     pixGetColumnStats()
 *           l_int32     pixSetPixelColumn()
 *
 *    Foreground/background estimation
 *           l_int32     pixThresholdForFgBg()
 *           l_int32     pixSplitDistributionFgBg()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /*------------------------------------------------------------------* * Pixel histogram and averaging * *------------------------------------------------------------------*/ /*! * \brief pixGetGrayHistogram() * * \param[in] pixs 1, 2, 4, 8, 16 bpp; can be colormapped * \param[in] factor subsampling factor; integer >= 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) If pixs has a colormap, it is converted to 8 bpp gray.
 *          If you want a histogram of the colormap indices, use
 *          pixGetCmapHistogram().
 *      (2) If pixs does not have a colormap, the output histogram is
 *          of size 2^d, where d is the depth of pixs.
 *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
 * 
*/ NUMA * pixGetGrayHistogram(PIX *pixs, l_int32 factor) { l_int32 i, j, w, h, d, wpl, val, size, count; l_uint32 *data, *line; l_float32 *array; NUMA *na; PIX *pixg; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d > 16) return (NUMA *)ERROR_PTR("depth not in {1,2,4,8,16}", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); size = 1 << d; if ((na = numaCreate(size)) == NULL) { pixDestroy(&pixg); return (NUMA *)ERROR_PTR("na not made", __func__, NULL); } numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (d == 1) { /* special case */ pixCountPixels(pixg, &count, NULL); array[0] = w * h - count; array[1] = count; pixDestroy(&pixg); return na; } wpl = pixGetWpl(pixg); data = pixGetData(pixg); for (i = 0; i < h; i += factor) { line = data + i * wpl; if (d == 2) { for (j = 0; j < w; j += factor) { val = GET_DATA_DIBIT(line, j); array[val] += 1.0; } } else if (d == 4) { for (j = 0; j < w; j += factor) { val = GET_DATA_QBIT(line, j); array[val] += 1.0; } } else if (d == 8) { for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); array[val] += 1.0; } } else { /* d == 16 */ for (j = 0; j < w; j += factor) { val = GET_DATA_TWO_BYTES(line, j); array[val] += 1.0; } } } pixDestroy(&pixg); return na; } /*! * \brief pixGetGrayHistogramMasked() * * \param[in] pixs 8 bpp, or colormapped * \param[in] pixm [optional] 1 bpp mask over which histogram is * to be computed; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null * \param[in] factor subsampling factor; integer >= 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
 *          If you want a histogram of the colormap indices, use
 *          pixGetCmapHistogramMasked().
 *      (2) This always returns a 256-value histogram of pixel values.
 *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
 *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
 *      (5) Input x,y are ignored unless pixm exists.
 * 
*/ NUMA * pixGetGrayHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor) { l_int32 i, j, w, h, wm, hm, dm, wplg, wplm, val; l_uint32 *datag, *datam, *lineg, *linem; l_float32 *array; NUMA *na; PIX *pixg; if (!pixm) return pixGetGrayHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", __func__, NULL); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return (NUMA *)ERROR_PTR("pixm not 1 bpp", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); if ((na = numaCreate(256)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, NULL); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); /* Generate the histogram */ for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lineg = datag + (y + i) * wplg; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { val = GET_DATA_BYTE(lineg, x + j); array[val] += 1.0; } } } pixDestroy(&pixg); return na; } /*! * \brief pixGetGrayHistogramInRect() * * \param[in] pixs 8 bpp, or colormapped * \param[in] box [optional] over which histogram is to be computed; * use full image if NULL * \param[in] factor subsampling factor; integer >= 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
 *          If you want a histogram of the colormap indices, use
 *          pixGetCmapHistogramInRect().
 *      (2) This always returns a 256-value histogram of pixel values.
 *      (3) Set the subsampling %factor > 1 to reduce the amount of computation.
 * 
*/ NUMA * pixGetGrayHistogramInRect(PIX *pixs, BOX *box, l_int32 factor) { l_int32 i, j, bx, by, bw, bh, w, h, wplg, val; l_uint32 *datag, *lineg; l_float32 *array; NUMA *na; PIX *pixg; if (!box) return pixGetGrayHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); if ((na = numaCreate(256)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, NULL); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); boxGetGeometry(box, &bx, &by, &bw, &bh); /* Generate the histogram */ for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; lineg = datag + (by + i) * wplg; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; val = GET_DATA_BYTE(lineg, bx + j); array[val] += 1.0; } } pixDestroy(&pixg); return na; } /*! * \brief pixGetGrayHistogramTiled() * * \param[in] pixs any depth, colormap OK * \param[in] factor subsampling factor; integer >= 1 * \param[in] nx, ny tiling; >= 1; typically small * \return naa set of histograms, or NULL on error * *
 * Notes:
 *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
 *      (2) This returns a set of 256-value histograms of pixel values.
 *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
 * 
*/ NUMAA * pixGetGrayHistogramTiled(PIX *pixs, l_int32 factor, l_int32 nx, l_int32 ny) { l_int32 i, n; NUMA *na; NUMAA *naa; PIX *pix1, *pix2; PIXA *pixa; if (!pixs) return (NUMAA *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (NUMAA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); if (nx < 1 || ny < 1) return (NUMAA *)ERROR_PTR("nx and ny must both be > 0", __func__, NULL); n = nx * ny; if ((naa = numaaCreate(n)) == NULL) return (NUMAA *)ERROR_PTR("naa not made", __func__, NULL); pix1 = pixConvertTo8(pixs, FALSE); pixa = pixaSplitPix(pix1, nx, ny, 0, 0); for (i = 0; i < n; i++) { pix2 = pixaGetPix(pixa, i, L_CLONE); na = pixGetGrayHistogram(pix2, factor); numaaAddNuma(naa, na, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); pixaDestroy(&pixa); return naa; } /*! * \brief pixGetColorHistogram() * * \param[in] pixs rgb or colormapped * \param[in] factor subsampling factor; integer >= 1 * \param[out] pnar red histogram * \param[out] pnag green histogram * \param[out] pnab blue histogram * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a set of three 256 entry histograms,
 *          one for each color component (r,g,b).
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 * 
*/ l_ok pixGetColorHistogram(PIX *pixs, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab) { l_int32 i, j, w, h, d, wpl, index, rval, gval, bval; l_uint32 *data, *line; l_float32 *rarray, *garray, *barray; NUMA *nar, *nag, *nab; PIXCMAP *cmap; if (pnar) *pnar = NULL; if (pnag) *pnag = NULL; if (pnab) *pnab = NULL; if (!pnar || !pnag || !pnab) return ERROR_INT("&nar, &nag, &nab not all defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (cmap && (d != 2 && d != 4 && d != 8)) return ERROR_INT("colormap and not 2, 4, or 8 bpp", __func__, 1); if (!cmap && d != 32) return ERROR_INT("no colormap and not rgb", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); /* Set up the histogram arrays */ nar = numaCreate(256); nag = numaCreate(256); nab = numaCreate(256); numaSetCount(nar, 256); numaSetCount(nag, 256); numaSetCount(nab, 256); rarray = numaGetFArray(nar, L_NOCOPY); garray = numaGetFArray(nag, L_NOCOPY); barray = numaGetFArray(nab, L_NOCOPY); *pnar = nar; *pnag = nag; *pnab = nab; /* Generate the color histograms */ data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (cmap) { for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) index = GET_DATA_BYTE(line, j); else if (d == 4) index = GET_DATA_QBIT(line, j); else /* 2 bpp */ index = GET_DATA_DIBIT(line, j); pixcmapGetColor(cmap, index, &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } else { /* 32 bpp rgb */ for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { extractRGBValues(line[j], &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } return 0; } /*! * \brief pixGetColorHistogramMasked() * * \param[in] pixs 32 bpp rgb, or colormapped * \param[in] pixm [optional] 1 bpp mask over which histogram is * to be computed; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null * \param[in] factor subsampling factor; integer >= 1 * \param[out] pnar red histogram * \param[out] pnag green histogram * \param[out] pnab blue histogram * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a set of three 256 entry histograms,
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 *      (3) Clipping of pixm (if it exists) to pixs is done in the inner loop.
 *      (4) Input x,y are ignored unless pixm exists.
 * 
*/ l_ok pixGetColorHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab) { l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, index, rval, gval, bval; l_uint32 *datas, *datam, *lines, *linem; l_float32 *rarray, *garray, *barray; NUMA *nar, *nag, *nab; PIXCMAP *cmap; if (!pixm) return pixGetColorHistogram(pixs, factor, pnar, pnag, pnab); if (pnar) *pnar = NULL; if (pnag) *pnag = NULL; if (pnab) *pnab = NULL; if (!pnar || !pnag || !pnab) return ERROR_INT("&nar, &nag, &nab not all defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (cmap && (d != 2 && d != 4 && d != 8)) return ERROR_INT("colormap and not 2, 4, or 8 bpp", __func__, 1); if (!cmap && d != 32) return ERROR_INT("no colormap and not rgb", __func__, 1); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); /* Set up the histogram arrays */ nar = numaCreate(256); nag = numaCreate(256); nab = numaCreate(256); numaSetCount(nar, 256); numaSetCount(nag, 256); numaSetCount(nab, 256); rarray = numaGetFArray(nar, L_NOCOPY); garray = numaGetFArray(nag, L_NOCOPY); barray = numaGetFArray(nab, L_NOCOPY); *pnar = nar; *pnag = nag; *pnab = nab; /* Generate the color histograms */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); if (cmap) { for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) index = GET_DATA_BYTE(lines, x + j); else if (d == 4) index = GET_DATA_QBIT(lines, x + j); else /* 2 bpp */ index = GET_DATA_DIBIT(lines, x + j); pixcmapGetColor(cmap, index, &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } } else { /* 32 bpp rgb */ for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { extractRGBValues(lines[x + j], &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } } return 0; } /*! * \brief pixGetCmapHistogram() * * \param[in] pixs colormapped: d = 2, 4 or 8 * \param[in] factor subsampling factor; integer >= 1 * \return na histogram of cmap indices, or NULL on error * *
 * Notes:
 *      (1) This generates a histogram of colormap pixel indices,
 *          and is of size 2^d.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 * 
*/ NUMA * pixGetCmapHistogram(PIX *pixs, l_int32 factor) { l_int32 i, j, w, h, d, wpl, val, size; l_uint32 *data, *line; l_float32 *array; NUMA *na; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", __func__, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(line, j); else if (d == 4) val = GET_DATA_QBIT(line, j); else /* d == 2 */ val = GET_DATA_DIBIT(line, j); array[val] += 1.0; } } return na; } /*! * \brief pixGetCmapHistogramMasked() * * \param[in] pixs colormapped: d = 2, 4 or 8 * \param[in] pixm [optional] 1 bpp mask over which histogram is * to be computed; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null * \param[in] factor subsampling factor; integer >= 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) This generates a histogram of colormap pixel indices,
 *          and is of size 2^d.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 *      (3) Clipping of pixm to pixs is done in the inner loop.
 * 
*/ NUMA * pixGetCmapHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor) { l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, val, size; l_uint32 *datas, *datam, *lines, *linem; l_float32 *array; NUMA *na; if (!pixm) return pixGetCmapHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", __func__, NULL); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return (NUMA *)ERROR_PTR("pixm not 1 bpp", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", __func__, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) val = GET_DATA_BYTE(lines, x + j); else if (d == 4) val = GET_DATA_QBIT(lines, x + j); else /* d == 2 */ val = GET_DATA_DIBIT(lines, x + j); array[val] += 1.0; } } } return na; } /*! * \brief pixGetCmapHistogramInRect() * * \param[in] pixs colormapped: d = 2, 4 or 8 * \param[in] box [optional] over which histogram is to be computed; * use full image if NULL * \param[in] factor subsampling factor; integer >= 1 * \return na histogram, or NULL on error * *
 * Notes:
 *      (1) This generates a histogram of colormap pixel indices,
 *          and is of size 2^d.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
 *      (3) Clipping to the box is done in the inner loop.
 * 
*/ NUMA * pixGetCmapHistogramInRect(PIX *pixs, BOX *box, l_int32 factor) { l_int32 i, j, bx, by, bw, bh, w, h, d, wpls, val, size; l_uint32 *datas, *lines; l_float32 *array; NUMA *na; if (!box) return pixGetCmapHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", __func__, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling must be >= 1", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", __func__, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; lines = datas + (by + i) * wpls; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; if (d == 8) val = GET_DATA_BYTE(lines, bx + j); else if (d == 4) val = GET_DATA_QBIT(lines, bx + j); else /* d == 2 */ val = GET_DATA_DIBIT(lines, bx + j); array[val] += 1.0; } } return na; } /*! * \brief pixCountRGBColorsByHash() * * \param[in] pixs rgb or rgba * \param[out] pncolors number of colors found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is about 4x faster than pixCountRGBColors(),
 *          which uses an ordered map.
 * 
*/ l_ok pixCountRGBColorsByHash(PIX *pixs, l_int32 *pncolors) { L_DNA *da1, *da2; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); da1 = pixConvertDataToDna(pixs); l_dnaRemoveDupsByHmap(da1, &da2, NULL); *pncolors = l_dnaGetCount(da2); l_dnaDestroy(&da1); l_dnaDestroy(&da2); return 0; } /*! * \brief pixCountRGBColors() * * \param[in] pixs rgb or rgba * \param[in] factor subsampling factor; integer >= 1 * \param[out] pncolors number of colors found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %factor == 1, this gives the exact number of colors.
 *      (2) This is about 4x slower than pixCountRGBColorsByHash().
 * 
*/ l_ok pixCountRGBColors(PIX *pixs, l_int32 factor, l_int32 *pncolors) { L_AMAP *amap; if (!pncolors) return ERROR_INT("&ncolors not defined", __func__, 1); *pncolors = 0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (factor <= 0) return ERROR_INT("factor must be > 0", __func__, 1); amap = pixGetColorAmapHistogram(pixs, factor); *pncolors = l_amapSize(amap); l_amapDestroy(&amap); return 0; } /*! * \brief pixGetColorAmapHistogram() * * \param[in] pixs rgb or rgba * \param[in] factor subsampling factor; integer >= 1 * \return amap, or NULL on error * *
 * Notes:
 *      (1) This generates an ordered map from pixel value to histogram count.
 *      (2) Use amapGetCountForColor() to use the map to look up a count.
 * 
*/ L_AMAP * pixGetColorAmapHistogram(PIX *pixs, l_int32 factor) { l_int32 i, j, w, h, wpl; l_uint32 *data, *line; L_AMAP *amap; RB_TYPE key, value; RB_TYPE *pval; if (!pixs) return (L_AMAP *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (L_AMAP *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (factor <= 0) return (L_AMAP *)ERROR_PTR("factor must be > 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); amap = l_amapCreate(L_UINT_TYPE); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { key.utype = line[j]; pval = l_amapFind(amap, key); if (!pval) value.itype = 1; else value.itype = 1 + pval->itype; l_amapInsert(amap, key, value); } } return amap; } /*! * \brief amapGetCountForColor() * * \param[in] amap map from pixel value to count * \param[in] val rgb or rgba pixel value * \return count, or -1 on error * *
 * Notes:
 *      (1) The ordered map is made by pixGetColorAmapHistogram().
 * 
*/ l_int32 amapGetCountForColor(L_AMAP *amap, l_uint32 val) { RB_TYPE key; RB_TYPE *pval; if (!amap) return ERROR_INT("amap not defined", __func__, -1); key.utype = val; pval = l_amapFind(amap, key); return (pval) ? pval->itype : 0; } /*! * \brief pixGetRankValue() * * \param[in] pixs 8 bpp, 32 bpp or colormapped * \param[in] factor subsampling factor; integer >= 1 * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest * \param[out] pvalue pixel value corresponding to input rank * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Simple function to get a rank value (color) of an image.
 *          For a color image, the median value (rank = 0.5) can be
 *          used to linearly remap the colors based on the median
 *          of a target image, using pixLinearMapToTargetColor().
 *      (2) For RGB, this treats each color component independently.
 *          It calls pixGetGrayHistogramMasked() on each component, and
 *          uses the returned gray histogram to get the rank value.
 *          It then combines the 3 rank values into a color pixel.
 * 
*/ l_ok pixGetRankValue(PIX *pixs, l_int32 factor, l_float32 rank, l_uint32 *pvalue) { l_int32 d; l_float32 val, rval, gval, bval; PIX *pixt; PIXCMAP *cmap; if (!pvalue) return ERROR_INT("&value not defined", __func__, 1); *pvalue = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", __func__, 1); if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); d = pixGetDepth(pixt); if (d == 8) { pixGetRankValueMasked(pixt, NULL, 0, 0, factor, rank, &val, NULL); *pvalue = lept_roundftoi(val); } else { pixGetRankValueMaskedRGB(pixt, NULL, 0, 0, factor, rank, &rval, &gval, &bval); composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), lept_roundftoi(bval), pvalue); } pixDestroy(&pixt); return 0; } /*! * \brief pixGetRankValueMaskedRGB() * * \param[in] pixs 32 bpp * \param[in] pixm [optional] 1 bpp mask over which rank val is to be taken; * use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null * \param[in] factor subsampling factor; integer >= 1 * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest * \param[out] prval [optional] red component val for input rank * \param[out] pgval [optional] green component val for input rank * \param[out] pbval [optional] blue component val for input rank * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Computes the rank component values of pixels in pixs that
 *          are under the fg of the optional mask.  If the mask is null, it
 *          computes the average of the pixels in pixs.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of
 *          computation.
 *      (4) Input x,y are ignored unless pixm exists.
 *      (5) The rank must be in [0.0 ... 1.0], where the brightest pixel
 *          has rank 1.0.  For the median pixel value, use 0.5.
 * 
*/ l_ok pixGetRankValueMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval) { l_float32 scale; PIX *pixmt, *pixt; if (prval) *prval = 0.0; if (pgval) *pgval = 0.0; if (pbval) *pbval = 0.0; if (!prval && !pgval && !pbval) return ERROR_INT("no results requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (rank < 0.0 || rank > 1.0) return ERROR_INT("rank not in [0.0 ... 1.0]", __func__, 1); pixmt = NULL; if (pixm) { scale = 1.0f / (l_float32)factor; pixmt = pixScale(pixm, scale, scale); } if (prval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_RED); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, prval, NULL); pixDestroy(&pixt); } if (pgval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_GREEN); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, pgval, NULL); pixDestroy(&pixt); } if (pbval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_BLUE); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, pbval, NULL); pixDestroy(&pixt); } pixDestroy(&pixmt); return 0; } /*! * \brief pixGetRankValueMasked() * * \param[in] pixs 8 bpp, or colormapped * \param[in] pixm [optional] 1 bpp mask, over which the rank val * is to be taken; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null * \param[in] factor subsampling factor; integer >= 1 * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest * \param[out] pval pixel value corresponding to input rank * \param[out] pna [optional] of histogram * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Computes the rank value of pixels in pixs that are under
 *          the fg of the optional mask.  If the mask is null, it
 *          computes the average of the pixels in pixs.
 *      (2) Set the subsampling %factor > 1 to reduce the amount of
 *          computation.
 *      (3) Clipping of pixm (if it exists) to pixs is done in the inner loop.
 *      (4) Input x,y are ignored unless pixm exists.
 *      (5) The rank must be in [0.0 ... 1.0], where the brightest pixel
 *          has rank 1.0.  For the median pixel value, use 0.5.
 *      (6) The histogram can optionally be returned, so that other rank
 *          values can be extracted without recomputing the histogram.
 *          In that case, just use
 *              numaHistogramGetValFromRank(na, rank, &val);
 *          on the returned Numa for additional rank values.
 * 
*/ l_ok pixGetRankValueMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna) { NUMA *na; if (pna) *pna = NULL; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return ERROR_INT("pixs neither 8 bpp nor colormapped", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (rank < 0.0 || rank > 1.0) return ERROR_INT("rank not in [0.0 ... 1.0]", __func__, 1); if ((na = pixGetGrayHistogramMasked(pixs, pixm, x, y, factor)) == NULL) return ERROR_INT("na not made", __func__, 1); numaHistogramGetValFromRank(na, rank, pval); if (pna) *pna = na; else numaDestroy(&na); return 0; } /*! * \brief pixGetPixelAverage() * * \param[in] pixs 8 or 32 bpp, or colormapped * \param[in] pixm [optional] 1 bpp mask over which average is * to be taken; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0 * \param[in] factor subsampling factor; >= 1 * \param[out] pval average pixel value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For rgb pix, this is a more direct computation of the
 *          average value of the pixels in %pixs that are under the
 *          mask %pixm. It is faster than pixGetPixelStats(), which
 *          calls pixGetAverageMaskedRGB() and has the overhead of
 *          generating a temporary pix of each of the three components;
 *          this can take most of the time if %factor > 1.
 *      (2) If %pixm is null, this gives the average value of all
 *          pixels in %pixs.  The returned value is an integer.
 *      (3) For color %pixs, the returned pixel value is in the standard
 *          uint32 RGBA packing.
 *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
 *      (5) Input x,y are ignored if %pixm does not exist.
 *      (6) For general averaging of 1, 2, 4 or 8 bpp grayscale, use
 *          pixAverageInRect().
 * 
*/ l_ok pixGetPixelAverage(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_uint32 *pval) { l_int32 i, j, w, h, d, wm, hm, wpl1, wplm, val, rval, gval, bval, count; l_uint32 *data1, *datam, *line1, *linem; l_float64 sum, rsum, gsum, bsum; PIX *pix1; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); if (d != 32 && !pixGetColormap(pixs)) return ERROR_INT("pixs not rgb or colormapped", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (pixGetColormap(pixs)) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix1 = pixClone(pixs); pixGetDimensions(pix1, &w, &h, &d); if (d == 1) { pixDestroy(&pix1); return ERROR_INT("pix1 is just 1 bpp", __func__, 1); } data1 = pixGetData(pix1); wpl1 = pixGetWpl(pix1); sum = rsum = gsum = bsum = 0.0; count = 0; if (!pixm) { for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; for (j = 0; j < w; j += factor) { if (d == 8) { val = GET_DATA_BYTE(line1, j); sum += val; } else { /* rgb */ extractRGBValues(*(line1 + j), &rval, &gval, &bval); rsum += rval; gsum += gval; bsum += bval; } count++; } } } else { /* masked */ pixGetDimensions(pixm, &wm, &hm, NULL); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; line1 = data1 + (y + i) * wpl1; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) { val = GET_DATA_BYTE(line1, x + j); sum += val; } else { /* rgb */ extractRGBValues(*(line1 + x + j), &rval, &gval, &bval); rsum += rval; gsum += gval; bsum += bval; } count++; } } } } pixDestroy(&pix1); if (count == 0) return ERROR_INT("no pixels sampled", __func__, 1); if (d == 8) { *pval = (l_uint32)(sum / (l_float64)count); } else { /* d == 32 */ rval = (l_uint32)(rsum / (l_float64)count); gval = (l_uint32)(gsum / (l_float64)count); bval = (l_uint32)(bsum / (l_float64)count); composeRGBPixel(rval, gval, bval, pval); } return 0; } /*! * \brief pixGetPixelStats() * * \param[in] pixs 8 bpp, 32 bpp or colormapped * \param[in] factor subsampling factor; integer >= 1 * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE * \param[out] pvalue pixel value corresponding to input type * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Simple function to get one of four statistical values of an image.
 *      (2) It does not take a mask: it uses the entire image.
 *      (3) To get the average pixel value of an RGB image, suggest using
 *          pixGetPixelAverage(), which is considerably faster.
 * 
*/ l_ok pixGetPixelStats(PIX *pixs, l_int32 factor, l_int32 type, l_uint32 *pvalue) { l_int32 d; l_float32 val, rval, gval, bval; PIX *pixt; PIXCMAP *cmap; if (!pvalue) return ERROR_INT("&value not defined", __func__, 1); *pvalue = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", __func__, 1); if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); d = pixGetDepth(pixt); if (d == 8) { pixGetAverageMasked(pixt, NULL, 0, 0, factor, type, &val); *pvalue = lept_roundftoi(val); } else { pixGetAverageMaskedRGB(pixt, NULL, 0, 0, factor, type, &rval, &gval, &bval); composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), lept_roundftoi(bval), pvalue); } pixDestroy(&pixt); return 0; } /*! * \brief pixGetAverageMaskedRGB() * * \param[in] pixs 32 bpp, or colormapped * \param[in] pixm [optional] 1 bpp mask over which average is * to be taken; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0 * \param[in] factor subsampling factor; >= 1 * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE * \param[out] prval [optional] measured red value of given 'type' * \param[out] pgval [optional] measured green value of given 'type' * \param[out] pbval [optional] measured blue value of given 'type' * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For usage, see pixGetAverageMasked().
 *      (2) If there is a colormap, it is removed before the 8 bpp
 *          component images are extracted.
 *      (3) A better name for this would be: pixGetPixelStatsRGB()
 * 
*/ l_ok pixGetAverageMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval) { l_int32 empty; PIX *pixt; PIXCMAP *cmap; if (prval) *prval = 0.0; if (pgval) *pgval = 0.0; if (pbval) *pbval = 0.0; if (!prval && !pgval && !pbval) return ERROR_INT("no values requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor colormapped", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION && type != L_VARIANCE) return ERROR_INT("invalid measure type", __func__, 1); if (pixm) { pixZero(pixm, &empty); if (empty) return ERROR_INT("empty mask", __func__, 1); } if (prval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); else pixt = pixGetRGBComponent(pixs, COLOR_RED); pixGetAverageMasked(pixt, pixm, x, y, factor, type, prval); pixDestroy(&pixt); } if (pgval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); else pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixGetAverageMasked(pixt, pixm, x, y, factor, type, pgval); pixDestroy(&pixt); } if (pbval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); else pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixGetAverageMasked(pixt, pixm, x, y, factor, type, pbval); pixDestroy(&pixt); } return 0; } /*! * \brief pixGetAverageMasked() * * \param[in] pixs 8 or 16 bpp, or colormapped * \param[in] pixm [optional] 1 bpp mask over which average is * to be taken; use all pixels if null * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; * can be < 0 * \param[in] factor subsampling factor; >= 1 * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE * \param[out] pval measured value of given 'type' * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Use L_MEAN_ABSVAL to get the average value of pixels in pixs
 *          that are under the fg of the optional mask.  If the mask
 *          is null, it finds the average of the pixels in pixs.
 *      (2) Likewise, use L_ROOT_MEAN_SQUARE to get the rms value of
 *          pixels in pixs, either masked or not; L_STANDARD_DEVIATION
 *          to get the standard deviation from the mean of the pixels;
 *          L_VARIANCE to get the average squared difference from the
 *          expected value.  The variance is the square of the stdev.
 *          For the standard deviation, we use
 *              sqrt([([x] - x)]^2) = sqrt([x^2] - [x]^2)
 *      (3) Set the subsampling %factor > 1 to reduce the amount of
 *          computation.
 *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
 *      (5) Input x,y are ignored unless pixm exists.
 *      (6) A better name for this would be: pixGetPixelStatsGray()
 * 
*/ l_ok pixGetAverageMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval) { l_int32 i, j, w, h, d, wm, hm, wplg, wplm, val, count, empty; l_uint32 *datag, *datam, *lineg, *linem; l_float64 sumave, summs, ave, meansq, var; PIX *pixg; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); if (d != 8 && d != 16 && !pixGetColormap(pixs)) return ERROR_INT("pixs not 8 or 16 bpp or colormapped", __func__, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION && type != L_VARIANCE) return ERROR_INT("invalid measure type", __func__, 1); if (pixm) { pixZero(pixm, &empty); if (empty) return ERROR_INT("empty mask", __func__, 1); } if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); sumave = summs = 0.0; count = 0; if (!pixm) { for (i = 0; i < h; i += factor) { lineg = datag + i * wplg; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(lineg, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(lineg, j); if (type != L_ROOT_MEAN_SQUARE) sumave += val; if (type != L_MEAN_ABSVAL) summs += (l_float64)(val) * val; count++; } } } else { pixGetDimensions(pixm, &wm, &hm, NULL); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lineg = datag + (y + i) * wplg; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) val = GET_DATA_BYTE(lineg, x + j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(lineg, x + j); if (type != L_ROOT_MEAN_SQUARE) sumave += val; if (type != L_MEAN_ABSVAL) summs += (l_float64)(val) * val; count++; } } } } pixDestroy(&pixg); if (count == 0) return ERROR_INT("no pixels sampled", __func__, 1); ave = sumave / (l_float64)count; meansq = summs / (l_float64)count; var = meansq - ave * ave; if (type == L_MEAN_ABSVAL) *pval = (l_float32)ave; else if (type == L_ROOT_MEAN_SQUARE) *pval = (l_float32)sqrt(meansq); else if (type == L_STANDARD_DEVIATION) *pval = (l_float32)sqrt(var); else /* type == L_VARIANCE */ *pval = (l_float32)var; return 0; } /*! * \brief pixGetAverageTiledRGB() * * \param[in] pixs 32 bpp, or colormapped * \param[in] sx, sy tile size; must be at least 2 x 2 * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION * \param[out] ppixr [optional] tiled 'average' of red component * \param[out] ppixg [optional] tiled 'average' of green component * \param[out] ppixb [optional] tiled 'average' of blue component * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For usage, see pixGetAverageTiled().
 *      (2) If there is a colormap, it is removed before the 8 bpp
 *          component images are extracted.
 * 
*/ l_ok pixGetAverageTiledRGB(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixr, PIX **ppixg, PIX **ppixb) { PIX *pixt; PIXCMAP *cmap; if (ppixr) *ppixr = NULL; if (ppixg) *ppixg = NULL; if (ppixb) *ppixb = NULL; if (!ppixr && !ppixg && !ppixb) return ERROR_INT("no data requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor colormapped", __func__, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy not both > 1", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION) return ERROR_INT("invalid measure type", __func__, 1); if (ppixr) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); else pixt = pixGetRGBComponent(pixs, COLOR_RED); *ppixr = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } if (ppixg) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); else pixt = pixGetRGBComponent(pixs, COLOR_GREEN); *ppixg = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } if (ppixb) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); else pixt = pixGetRGBComponent(pixs, COLOR_BLUE); *ppixb = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } return 0; } /*! * \brief pixGetAverageTiled() * * \param[in] pixs 8 bpp, or colormapped * \param[in] sx, sy tile size; must be at least 2 x 2 * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION * \return pixd average values in each tile, or NULL on error * *
 * Notes:
 *      (1) Only computes for tiles that are entirely contained in pixs.
 *      (2) Use L_MEAN_ABSVAL to get the average abs value within the tile;
 *          L_ROOT_MEAN_SQUARE to get the rms value within each tile;
 *          L_STANDARD_DEVIATION to get the standard dev. from the average
 *          within each tile.
 *      (3) If colormapped, converts to 8 bpp gray.
 * 
*/ PIX * pixGetAverageTiled(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type) { l_int32 i, j, k, m, w, h, wd, hd, d, pos, wplt, wpld, valt; l_uint32 *datat, *datad, *linet, *lined, *startt; l_float64 sumave, summs, ave, meansq, normfact; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", __func__, NULL); if (sx < 2 || sy < 2) return (PIX *)ERROR_PTR("sx and sy not both > 1", __func__, NULL); wd = w / sx; hd = h / sy; if (wd < 1 || hd < 1) return (PIX *)ERROR_PTR("wd or hd == 0", __func__, NULL); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION) return (PIX *)ERROR_PTR("invalid measure type", __func__, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixd = pixCreate(wd, hd, 8); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); normfact = 1. / (l_float64)(sx * sy); for (i = 0; i < hd; i++) { lined = datad + i * wpld; linet = datat + i * sy * wplt; for (j = 0; j < wd; j++) { if (type == L_MEAN_ABSVAL || type == L_STANDARD_DEVIATION) { sumave = 0.0; for (k = 0; k < sy; k++) { startt = linet + k * wplt; for (m = 0; m < sx; m++) { pos = j * sx + m; valt = GET_DATA_BYTE(startt, pos); sumave += valt; } } ave = normfact * sumave; } if (type == L_ROOT_MEAN_SQUARE || type == L_STANDARD_DEVIATION) { summs = 0.0; for (k = 0; k < sy; k++) { startt = linet + k * wplt; for (m = 0; m < sx; m++) { pos = j * sx + m; valt = GET_DATA_BYTE(startt, pos); summs += (l_float64)(valt) * valt; } } meansq = normfact * summs; } if (type == L_MEAN_ABSVAL) valt = (l_int32)(ave + 0.5); else if (type == L_ROOT_MEAN_SQUARE) valt = (l_int32)(sqrt(meansq) + 0.5); else /* type == L_STANDARD_DEVIATION */ valt = (l_int32)(sqrt(meansq - ave * ave) + 0.5); SET_DATA_BYTE(lined, j, valt); } } pixDestroy(&pixt); return pixd; } /*! * \brief pixRowStats() * * \param[in] pixs 8 bpp; not cmapped * \param[in] box [optional] clipping box; can be null * \param[out] pnamean [optional] numa of mean values * \param[out] pnamedian [optional] numa of median values * \param[out] pnamode [optional] numa of mode intensity values * \param[out] pnamodecount [optional] numa of mode counts * \param[out] pnavar [optional] numa of variance * \param[out] pnarootvar [optional] numa of square root of variance * \return na numa of requested statistic for each row, or NULL on error * *
 * Notes:
 *      (1) This computes numas that represent column vectors of statistics,
 *          with each of its values derived from the corresponding row of a Pix.
 *      (2) Use NULL on input to prevent computation of any of the 5 numas.
 *      (3) Other functions that compute pixel row statistics are:
 *             pixCountPixelsByRow()
 *             pixAverageByRow()
 *             pixVarianceByRow()
 *             pixGetRowStats()
 * 
*/ l_int32 pixRowStats(PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar) { l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; l_int32 xstart, xend, ystart, yend, bw, bh; l_int32 *histo; l_uint32 *lines, *datas; l_float32 norm; l_float32 *famean, *fameansq, *favar, *farootvar; l_float32 *famedian, *famode, *famodecount; if (pnamean) *pnamean = NULL; if (pnamedian) *pnamedian = NULL; if (pnamode) *pnamode = NULL; if (pnamodecount) *pnamodecount = NULL; if (pnavar) *pnavar = NULL; if (pnarootvar) *pnarootvar = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); famean = fameansq = favar = farootvar = NULL; famedian = famode = famodecount = NULL; pixGetDimensions(pixs, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", __func__, 1); /* We need the mean for variance and root variance */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pnamean || pnavar || pnarootvar) { norm = 1.f / (l_float32)bw; famean = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); fameansq = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); if (pnavar || pnarootvar) { favar = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); if (pnarootvar) farootvar = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); } for (i = ystart; i < yend; i++) { sum = sumsq = 0; lines = datas + i * wpls; for (j = xstart; j < xend; j++) { val = GET_DATA_BYTE(lines, j); sum += val; sumsq += val * val; } famean[i] = norm * sum; fameansq[i] = norm * sumsq; if (pnavar || pnarootvar) { favar[i] = fameansq[i] - famean[i] * famean[i]; if (pnarootvar) farootvar[i] = sqrtf(favar[i]); } } LEPT_FREE(fameansq); if (pnamean) *pnamean = numaCreateFromFArray(famean, bh, L_INSERT); else LEPT_FREE(famean); if (pnavar) *pnavar = numaCreateFromFArray(favar, bh, L_INSERT); else LEPT_FREE(favar); if (pnarootvar) *pnarootvar = numaCreateFromFArray(farootvar, bh, L_INSERT); } /* We need a histogram to find the median and/or mode values */ if (pnamedian || pnamode || pnamodecount) { histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (pnamedian) { *pnamedian = numaMakeConstant(0, bh); famedian = numaGetFArray(*pnamedian, L_NOCOPY); } if (pnamode) { *pnamode = numaMakeConstant(0, bh); famode = numaGetFArray(*pnamode, L_NOCOPY); } if (pnamodecount) { *pnamodecount = numaMakeConstant(0, bh); famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); } for (i = ystart; i < yend; i++) { lines = datas + i * wpls; memset(histo, 0, 1024); for (j = xstart; j < xend; j++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } if (pnamedian) { sum = 0; target = (bw + 1) / 2; for (k = 0; k < 256; k++) { sum += histo[k]; if (sum >= target) { famedian[i] = k; break; } } } if (pnamode || pnamodecount) { max = 0; modeval = 0; for (k = 0; k < 256; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (pnamode) famode[i] = modeval; if (pnamodecount) famodecount[i] = max; } } LEPT_FREE(histo); } return 0; } /*! * \brief pixColumnStats() * * \param[in] pixs 8 bpp; not cmapped * \param[in] box [optional] clipping box; can be null * \param[out] pnamean [optional] numa of mean values * \param[out] pnamedian [optional] numa of median values * \param[out] pnamode [optional] numa of mode intensity values * \param[out] pnamodecount [optional] numa of mode counts * \param[out] pnavar [optional] numa of variance * \param[out] pnarootvar [optional] numa of square root of variance * \return na numa of requested statistic for each column, * or NULL on error * *
 * Notes:
 *      (1) This computes numas that represent row vectors of statistics,
 *          with each of its values derived from the corresponding col of a Pix.
 *      (2) Use NULL on input to prevent computation of any of the 5 numas.
 *      (3) Other functions that compute pixel column statistics are:
 *             pixCountPixelsByColumn()
 *             pixAverageByColumn()
 *             pixVarianceByColumn()
 *             pixGetColumnStats()
 * 
*/ l_int32 pixColumnStats(PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar) { l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; l_int32 xstart, xend, ystart, yend, bw, bh; l_int32 *histo; l_uint32 *lines, *datas; l_float32 norm; l_float32 *famean, *fameansq, *favar, *farootvar; l_float32 *famedian, *famode, *famodecount; if (pnamean) *pnamean = NULL; if (pnamedian) *pnamedian = NULL; if (pnamode) *pnamode = NULL; if (pnamodecount) *pnamodecount = NULL; if (pnavar) *pnavar = NULL; if (pnarootvar) *pnarootvar = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); famean = fameansq = favar = farootvar = NULL; famedian = famode = famodecount = NULL; pixGetDimensions(pixs, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", __func__, 1); /* We need the mean for variance and root variance */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pnamean || pnavar || pnarootvar) { norm = 1.f / (l_float32)bh; famean = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); fameansq = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); if (pnavar || pnarootvar) { favar = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); if (pnarootvar) farootvar = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); } for (j = xstart; j < xend; j++) { sum = sumsq = 0; for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { val = GET_DATA_BYTE(lines, j); sum += val; sumsq += val * val; } famean[j] = norm * sum; fameansq[j] = norm * sumsq; if (pnavar || pnarootvar) { favar[j] = fameansq[j] - famean[j] * famean[j]; if (pnarootvar) farootvar[j] = sqrtf(favar[j]); } } LEPT_FREE(fameansq); if (pnamean) *pnamean = numaCreateFromFArray(famean, bw, L_INSERT); else LEPT_FREE(famean); if (pnavar) *pnavar = numaCreateFromFArray(favar, bw, L_INSERT); else LEPT_FREE(favar); if (pnarootvar) *pnarootvar = numaCreateFromFArray(farootvar, bw, L_INSERT); } /* We need a histogram to find the median and/or mode values */ if (pnamedian || pnamode || pnamodecount) { histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); if (pnamedian) { *pnamedian = numaMakeConstant(0, bw); famedian = numaGetFArray(*pnamedian, L_NOCOPY); } if (pnamode) { *pnamode = numaMakeConstant(0, bw); famode = numaGetFArray(*pnamode, L_NOCOPY); } if (pnamodecount) { *pnamodecount = numaMakeConstant(0, bw); famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); } for (j = xstart; j < xend; j++) { memset(histo, 0, 1024); for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } if (pnamedian) { sum = 0; target = (bh + 1) / 2; for (k = 0; k < 256; k++) { sum += histo[k]; if (sum >= target) { famedian[j] = k; break; } } } if (pnamode || pnamodecount) { max = 0; modeval = 0; for (k = 0; k < 256; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (pnamode) famode[j] = modeval; if (pnamodecount) famodecount[j] = max; } } LEPT_FREE(histo); } return 0; } /*! * \brief pixGetRangeValues() * * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; >= 1; ignored if colormapped * \param[in] color L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE * \param[out] pminval [optional] minimum value of component * \param[out] pmaxval [optional] maximum value of component * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If pixs is 8 bpp grayscale, the color selection type is ignored.
 * 
*/ l_ok pixGetRangeValues(PIX *pixs, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval) { l_int32 d; PIXCMAP *cmap; if (pminval) *pminval = 0; if (pmaxval) *pmaxval = 0; if (!pminval && !pmaxval) return ERROR_INT("no result requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); cmap = pixGetColormap(pixs); if (cmap) return pixcmapGetRangeValues(cmap, color, pminval, pmaxval, NULL, NULL); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", __func__, 1); if (d == 8) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, NULL, NULL, pminval); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, NULL, NULL, pmaxval); } else if (color == L_SELECT_RED) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, pminval, NULL, NULL, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, pmaxval, NULL, NULL, NULL); } else if (color == L_SELECT_GREEN) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, pminval, NULL, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, pmaxval, NULL, NULL); } else if (color == L_SELECT_BLUE) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, NULL, pminval, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, NULL, pmaxval, NULL); } else { return ERROR_INT("invalid color", __func__, 1); } return 0; } /*! * \brief pixGetExtremeValue() * * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped * \param[in] factor subsampling factor; >= 1; ignored if colormapped * \param[in] type L_SELECT_MIN or L_SELECT_MAX * \param[out] prval [optional] red component * \param[out] pgval [optional] green component * \param[out] pbval [optional] blue component * \param[out] pgrayval [optional] min or max gray value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If pixs is grayscale, the result is returned in &grayval.
 *          Otherwise, if there is a colormap or d == 32,
 *          each requested color component is returned.  At least
 *          one color component (address) must be input.
 * 
*/ l_ok pixGetExtremeValue(PIX *pixs, l_int32 factor, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *pgrayval) { l_int32 i, j, w, h, d, wpl; l_int32 val, extval, rval, gval, bval, extrval, extgval, extbval; l_uint32 pixel; l_uint32 *data, *line; PIXCMAP *cmap; if (prval) *prval = -1; if (pgval) *pgval = -1; if (pbval) *pbval = -1; if (pgrayval) *pgrayval = -1; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (type != L_SELECT_MIN && type != L_SELECT_MAX) return ERROR_INT("invalid type", __func__, 1); cmap = pixGetColormap(pixs); if (cmap) { if (type == L_SELECT_MIN) { if (prval) pixcmapGetRangeValues(cmap, L_SELECT_RED, prval, NULL, NULL, NULL); if (pgval) pixcmapGetRangeValues(cmap, L_SELECT_GREEN, pgval, NULL, NULL, NULL); if (pbval) pixcmapGetRangeValues(cmap, L_SELECT_BLUE, pbval, NULL, NULL, NULL); } else { /* type == L_SELECT_MAX */ if (prval) pixcmapGetRangeValues(cmap, L_SELECT_RED, NULL, prval, NULL, NULL); if (pgval) pixcmapGetRangeValues(cmap, L_SELECT_GREEN, NULL, pgval, NULL, NULL); if (pbval) pixcmapGetRangeValues(cmap, L_SELECT_BLUE, NULL, pbval, NULL, NULL); } return 0; } pixGetDimensions(pixs, &w, &h, &d); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", __func__, 1); if (d == 8 && !pgrayval) return ERROR_INT("can't return result in grayval", __func__, 1); if (d == 32 && !prval && !pgval && !pbval) return ERROR_INT("can't return result in r/g/b-val", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (d == 8) { if (type == L_SELECT_MIN) extval = 100000; else /* get max */ extval = -1; for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); if ((type == L_SELECT_MIN && val < extval) || (type == L_SELECT_MAX && val > extval)) extval = val; } } *pgrayval = extval; return 0; } /* 32 bpp rgb */ if (type == L_SELECT_MIN) { extrval = 100000; extgval = 100000; extbval = 100000; } else { extrval = -1; extgval = -1; extbval = -1; } for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { pixel = line[j]; if (prval) { rval = (pixel >> L_RED_SHIFT) & 0xff; if ((type == L_SELECT_MIN && rval < extrval) || (type == L_SELECT_MAX && rval > extrval)) extrval = rval; } if (pgval) { gval = (pixel >> L_GREEN_SHIFT) & 0xff; if ((type == L_SELECT_MIN && gval < extgval) || (type == L_SELECT_MAX && gval > extgval)) extgval = gval; } if (pbval) { bval = (pixel >> L_BLUE_SHIFT) & 0xff; if ((type == L_SELECT_MIN && bval < extbval) || (type == L_SELECT_MAX && bval > extbval)) extbval = bval; } } } if (prval) *prval = extrval; if (pgval) *pgval = extgval; if (pbval) *pbval = extbval; return 0; } /*! * \brief pixGetMaxValueInRect() * * \param[in] pixs 8, 16 or 32 bpp grayscale; no color space components * \param[in] box [optional] region; set box = NULL to use entire pixs * \param[out] pmaxval [optional] max value in region * \param[out] pxmax [optional] x location of max value * \param[out] pymax [optional] y location of max value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can be used to find the maximum and its location
 *          in a 2-dimensional histogram, where the x and y directions
 *          represent two color components (e.g., saturation and hue).
 *      (2) Note that here a 32 bpp pixs has pixel values that are simply
 *          numbers.  They are not 8 bpp components in a colorspace.
 * 
*/ l_ok pixGetMaxValueInRect(PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax) { l_int32 i, j, w, h, d, wpl, bw, bh; l_int32 xstart, ystart, xend, yend, xmax, ymax; l_uint32 val, maxval; l_uint32 *data, *line; if (pmaxval) *pmaxval = 0; if (pxmax) *pxmax = 0; if (pymax) *pymax = 0; if (!pmaxval && !pxmax && !pymax) return ERROR_INT("no data requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs has colormap", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 8, 16 or 32 bpp", __func__, 1); xstart = ystart = 0; xend = w - 1; yend = h - 1; if (box) { boxGetGeometry(box, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); maxval = 0; xmax = ymax = 0; for (i = ystart; i <= yend; i++) { line = data + i * wpl; for (j = xstart; j <= xend; j++) { if (d == 8) val = GET_DATA_BYTE(line, j); else if (d == 16) val = GET_DATA_TWO_BYTES(line, j); else /* d == 32 */ val = line[j]; if (val > maxval) { maxval = val; xmax = j; ymax = i; } } } if (maxval == 0) { /* no counts; pick the center of the rectangle */ xmax = (xstart + xend) / 2; ymax = (ystart + yend) / 2; } if (pmaxval) *pmaxval = maxval; if (pxmax) *pxmax = xmax; if (pymax) *pymax = ymax; return 0; } /*! * \brief pixGetMaxColorIndex() * * \param[in] pixs 1, 2, 4 or 8 bpp colormapped * \param[out] pmaxindex max colormap index value * \return 0 if OK, 1 on error */ l_ok pixGetMaxColorIndex(PIX *pixs, l_int32 *pmaxindex) { l_int32 i, j, w, h, d, wpl, val, max, maxval, empty; l_uint32 *data, *line; if (!pmaxindex) return ERROR_INT("&maxindex not defined", __func__, 1); *pmaxindex = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("invalid pixs depth; not in (1,2,4,8}", __func__, 1); wpl = pixGetWpl(pixs); data = pixGetData(pixs); max = 0; maxval = (1 << d) - 1; if (d == 1) { pixZero(pixs, &empty); if (!empty) max = 1; *pmaxindex = max; return 0; } for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 2) { for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(line, j); if (val > max) max = val; } } else if (d == 4) { for (j = 0; j < w; j++) { val = GET_DATA_QBIT(line, j); if (val > max) max = val; } } else if (d == 8) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); if (val > max) max = val; } } if (max == maxval) break; } *pmaxindex = max; return 0; } /*! * \brief pixGetBinnedComponentRange() * * \param[in] pixs 32 bpp rgb * \param[in] nbins number of equal population bins; must be > 1 * \param[in] factor subsampling factor; >= 1 * \param[in] color L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE * \param[out] pminval [optional] minimum value of component * \param[out] pmaxval [optional] maximum value of component * \param[out] pcarray [optional] color array of bins * \param[in] fontsize [optional] 0 for no debug; for debug, valid set * is {4,6,8,10,12,14,16,18,20}. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns the min and max average values of the
 *          selected color component in the set of rank bins,
 *          where the ranking is done using the specified component.
 * 
*/ l_ok pixGetBinnedComponentRange(PIX *pixs, l_int32 nbins, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval, l_uint32 **pcarray, l_int32 fontsize) { l_int32 i, minval, maxval, rval, gval, bval; l_uint32 *carray; PIX *pixt; if (pminval) *pminval = 0; if (pmaxval) *pmaxval = 0; if (pcarray) *pcarray = NULL; if (!pminval && !pmaxval) return ERROR_INT("no result requested", __func__, 1); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (color != L_SELECT_RED && color != L_SELECT_GREEN && color != L_SELECT_BLUE) return ERROR_INT("invalid color", __func__, 1); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return ERROR_INT("invalid fontsize", __func__, 1); pixGetRankColorArray(pixs, nbins, color, factor, &carray, NULL, 0); if (!carray) return ERROR_INT("carray not made", __func__, 1); if (fontsize > 0) { for (i = 0; i < nbins; i++) L_INFO("c[%d] = %x\n", __func__, i, carray[i]); pixt = pixDisplayColorArray(carray, nbins, 200, 5, fontsize); pixDisplay(pixt, 100, 100); pixDestroy(&pixt); } extractRGBValues(carray[0], &rval, &gval, &bval); minval = rval; if (color == L_SELECT_GREEN) minval = gval; else if (color == L_SELECT_BLUE) minval = bval; extractRGBValues(carray[nbins - 1], &rval, &gval, &bval); maxval = rval; if (color == L_SELECT_GREEN) maxval = gval; else if (color == L_SELECT_BLUE) maxval = bval; if (pminval) *pminval = minval; if (pmaxval) *pmaxval = maxval; if (pcarray) *pcarray = carray; else LEPT_FREE(carray); return 0; } /*! * \brief pixGetRankColorArray() * * \param[in] pixs 32 bpp or cmapped * \param[in] nbins number of equal population bins; must be > 1 * \param[in] type color selection flag * \param[in] factor subsampling factor; integer >= 1 * \param[out] pcarray array of colors, ranked by intensity * \param[in] pixadb [optional] debug: caller passes this in. * Use to display color squares and to * capture plots of color components * \param[in] fontsize [optional] debug: only used if pixadb exists. * Valid set is {4,6,8,10,12,14,16,18,20}. * fontsize == 6 is typical. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN,
 *          L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX, L_SELECT_AVERAGE,
 *          L_SELECT_HUE, L_SELECT_SATURATION.
 *      (2) The pixels are ordered by the value of the selected color
            value, and an equal number are placed in %nbins.  The average
 *          color in each bin is returned in a color array with %nbins colors.
 *      (3) Set the subsampling factor > 1 to reduce the amount of
 *          computation.  Typically you want at least 10,000 pixels
 *          for reasonable statistics.  Must be at least 10 samples/bin.
 *      (4) A crude "rank color" as a function of rank can be found from
 *             rankint = (l_int32)(rank * (nbins - 1) + 0.5);
 *             extractRGBValues(array[rankint], &rval, &gval, &bval);
 *          where the rank is in [0.0 ... 1.0].
 * 
*/ l_ok pixGetRankColorArray(PIX *pixs, l_int32 nbins, l_int32 type, l_int32 factor, l_uint32 **pcarray, PIXA *pixadb, l_int32 fontsize) { l_int32 ret, w, h, samplesperbin; l_uint32 *array; PIX *pix1, *pixc, *pixg, *pixd; PIXCMAP *cmap; if (!pcarray) return ERROR_INT("&carray not defined", __func__, 1); *pcarray = NULL; if (factor < 1) return ERROR_INT("sampling factor must be >= 1", __func__, 1); if (nbins < 2) return ERROR_INT("nbins must be at least 2", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor cmapped", __func__, 1); if (type != L_SELECT_RED && type != L_SELECT_GREEN && type != L_SELECT_BLUE && type != L_SELECT_MIN && type != L_SELECT_MAX && type != L_SELECT_AVERAGE && type != L_SELECT_HUE && type != L_SELECT_SATURATION) return ERROR_INT("invalid type", __func__, 1); if (pixadb) { if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) { L_WARNING("invalid fontsize %d; setting to 6\n", __func__, fontsize); fontsize = 6; } } pixGetDimensions(pixs, &w, &h, NULL); samplesperbin = (w * h) / (factor * factor * nbins); if (samplesperbin < 10) { L_ERROR("samplesperbin = %d < 10\n", __func__, samplesperbin); return 1; } /* Downscale by factor and remove colormap if it exists */ pix1 = pixScaleByIntSampling(pixs, factor); if (cmap) pixc = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pix1); pixDestroy(&pix1); /* Convert to an 8 bit version for ordering the pixels */ pixg = pixConvertRGBToGrayGeneral(pixc, type, 0.0, 0.0, 0.0); /* Get the average color in each bin for pixels whose grayscale * values are in the range for that bin. */ pixGetBinnedColor(pixc, pixg, 1, nbins, pcarray, pixadb); ret = 0; if ((array = *pcarray) == NULL) { L_ERROR("color array not returned\n", __func__); ret = 1; } if (array && pixadb) { pixd = pixDisplayColorArray(array, nbins, 200, 5, fontsize); pixWriteDebug("/tmp/lept/regout/rankhisto.png", pixd, IFF_PNG); pixDestroy(&pixd); } pixDestroy(&pixc); pixDestroy(&pixg); return ret; } /*! * \brief pixGetBinnedColor() * * \param[in] pixs 32 bpp * \param[in] pixg 8 bpp grayscale version of pixs * \param[in] factor sampling factor along pixel counting direction * \param[in] nbins number of bins based on grayscale value {1,...,100} * \param[out] pcarray array of average color values in each bin * \param[in] pixadb [optional] debug: caller passes this in. * Use to display output color squares and plots of * color components. * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This takes a color image, a grayscale version, and the number
 *          of requested bins.  The pixels are ordered by the corresponding
 *          gray value and an equal number of pixels are put in each bin.
 *          The average color for each bin is returned as an array
 *          of l_uint32 colors in our standard RGBA ordering.  We require
 *          at least 5 pixels in each bin.
 *      (2) This is used by pixGetRankColorArray(), which generates the
 *          grayscale image %pixg from the color image %pixs.
 *      (3) Arrays of float64 are used for intermediate storage, without
 *          loss of precision, of the sampled uint32 pixel values.
 * 
*/ l_ok pixGetBinnedColor(PIX *pixs, PIX *pixg, l_int32 factor, l_int32 nbins, l_uint32 **pcarray, PIXA *pixadb) { l_int32 i, j, w, h, wpls, wplg; l_int32 count, bincount, binindex, binsize, npts, avepts, ntot; l_int32 rval, gval, bval, grayval, rave, gave, bave; l_uint32 *datas, *datag, *lines, *lineg, *carray; l_float64 val64, rsum, gsum, bsum; L_DNAA *daa; NUMA *naeach; PIX *pix1; if (!pcarray) return ERROR_INT("&carray not defined", __func__, 1); *pcarray = NULL; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", __func__, 1); if (!pixg || pixGetDepth(pixg) != 8) return ERROR_INT("pixg undefined or not 8 bpp", __func__, 1); if (factor < 1) { L_WARNING("sampling factor less than 1; setting to 1\n", __func__); factor = 1; } if (nbins < 1 || nbins > 100) return ERROR_INT("nbins not in [1,100]", __func__, 1); /* Require that each bin has at least 5 pixels. */ pixGetDimensions(pixs, &w, &h, NULL); npts = (w + factor - 1) * (h + factor - 1) / (factor * factor); avepts = (npts + nbins - 1) / nbins; /* average number of pts in a bin */ if (avepts < 5) { L_ERROR("avepts = %d; must be >= 5\n", __func__, avepts); return 1; } /* ------------------------------------------------------------ * * Find the average color for each bin. The colors are ordered * * by the gray value in the corresponding pixel in %pixg. * * The bins have equal numbers of pixels (within 1). * * ------------------------------------------------------------ */ /* Generate a dnaa, where each dna has the colors corresponding * to the grayscale value given by the index of the dna in the dnaa */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); daa = l_dnaaCreateFull(256, 0); for (i = 0; i < h; i += factor) { lines = datas + i * wpls; lineg = datag + i * wplg; for (j = 0; j < w; j += factor) { grayval = GET_DATA_BYTE(lineg, j); l_dnaaAddNumber(daa, grayval, lines[j]); } } if (pixadb) { NUMA *na, *nabinval, *narank; na = numaCreate(256); /* grayscale histogram */ for (i = 0; i < 256; i++) numaAddNumber(na, l_dnaaGetDnaCount(daa, i)); /* Plot the gray bin value and the rank(gray) values */ numaDiscretizeHistoInBins(na, nbins, &nabinval, &narank); pix1 = gplotSimplePix1(nabinval, "Gray value in each bin"); pixaAddPix(pixadb, pix1, L_INSERT); pix1 = gplotSimplePix1(narank, "rank as function of gray value"); pixaAddPix(pixadb, pix1, L_INSERT); numaDestroy(&na); numaDestroy(&nabinval); numaDestroy(&narank); } /* Get the number of items in each bin */ ntot = l_dnaaGetNumberCount(daa); if ((naeach = numaGetUniformBinSizes(ntot, nbins)) == NULL) { l_dnaaDestroy(&daa); return ERROR_INT("naeach not made", __func__, 1); } /* Get the average color in each bin. This algorithm is * esssentially the same as in numaDiscretizeHistoInBins() */ carray = (l_uint32 *)LEPT_CALLOC(nbins, sizeof(l_uint32)); rsum = gsum = bsum = 0.0; bincount = 0; binindex = 0; numaGetIValue(naeach, 0, &binsize); for (i = 0; i < 256; i++) { count = l_dnaaGetDnaCount(daa, i); for (j = 0; j < count; j++) { bincount++; l_dnaaGetValue(daa, i, j, &val64); extractRGBValues((l_uint32)val64, &rval, &gval, &bval); rsum += rval; gsum += gval; bsum += bval; if (bincount == binsize) { /* add bin entry */ rave = (l_int32)(rsum / binsize + 0.5); gave = (l_int32)(gsum / binsize + 0.5); bave = (l_int32)(bsum / binsize + 0.5); composeRGBPixel(rave, gave, bave, carray + binindex); rsum = gsum = bsum = 0.0; bincount = 0; binindex++; if (binindex == nbins) break; numaGetIValue(naeach, binindex, &binsize); } } if (binindex == nbins) break; } if (binindex != nbins) L_ERROR("binindex = %d != nbins = %d\n", __func__, binindex, nbins); if (pixadb) { NUMA *nared, *nagreen, *nablue; nared = numaCreate(nbins); nagreen = numaCreate(nbins); nablue = numaCreate(nbins); for (i = 0; i < nbins; i++) { extractRGBValues(carray[i], &rval, &gval, &bval); numaAddNumber(nared, rval); numaAddNumber(nagreen, gval); numaAddNumber(nablue, bval); } lept_mkdir("lept/regout"); pix1 = gplotSimplePix1(nared, "Average red val vs. rank bin"); pixaAddPix(pixadb, pix1, L_INSERT); pix1 = gplotSimplePix1(nagreen, "Average green val vs. rank bin"); pixaAddPix(pixadb, pix1, L_INSERT); pix1 = gplotSimplePix1(nablue, "Average blue val vs. rank bin"); pixaAddPix(pixadb, pix1, L_INSERT); numaDestroy(&nared); numaDestroy(&nagreen); numaDestroy(&nablue); } *pcarray = carray; numaDestroy(&naeach); l_dnaaDestroy(&daa); return 0; } /*! * \brief pixDisplayColorArray() * * \param[in] carray array of colors: 0xrrggbb00 * \param[in] ncolors size of array * \param[in] side size of each color square; suggest 200 * \param[in] ncols number of columns in output color matrix * \param[in] fontsize to label each square with text. * Valid set is {4,6,8,10,12,14,16,18,20}. * Suggest 6 for 200x200 square. Use 0 to disable. * \return pixd color array, or NULL on error * *
 * Notes:
 *      (1) This generates an array of labeled color squares from an
 *          array of color values.
 *      (2) To make a single color square, use pixMakeColorSquare().
 * 
*/ PIX * pixDisplayColorArray(l_uint32 *carray, l_int32 ncolors, l_int32 side, l_int32 ncols, l_int32 fontsize) { char textstr[256]; l_int32 i, rval, gval, bval; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; if (!carray) return (PIX *)ERROR_PTR("carray not defined", __func__, NULL); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return (PIX *)ERROR_PTR("invalid fontsize", __func__, NULL); bmf = (fontsize == 0) ? NULL : bmfCreate(NULL, fontsize); pixa = pixaCreate(ncolors); for (i = 0; i < ncolors; i++) { pix1 = pixCreate(side, side, 32); pixSetAllArbitrary(pix1, carray[i]); pix2 = pixAddBorder(pix1, 2, 1); if (bmf) { extractRGBValues(carray[i], &rval, &gval, &bval); snprintf(textstr, sizeof(textstr), "%d: (%d %d %d)", i, rval, gval, bval); pix3 = pixAddSingleTextblock(pix2, bmf, textstr, 0xff000000, L_ADD_BELOW, NULL); } else { pix3 = pixClone(pix2); } pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix4 = pixaDisplayTiledInColumns(pixa, ncols, 1.0, 20, 2); pixaDestroy(&pixa); bmfDestroy(&bmf); return pix4; } /*! * \brief pixRankBinByStrip() * * \param[in] pixs 32 bpp or cmapped * \param[in] direction L_SCAN_HORIZONTAL or L_SCAN_VERTICAL * \param[in] size of strips in scan direction * \param[in] nbins number of equal population bins; must be > 1 * \param[in] type color selection flag * \return pixd result, or NULL on error * *
 * Notes:
 *      (1) This generates a pix of height %nbins, where each column
 *          represents a horizontal or vertical strip of the input image.
 *          If %direction == L_SCAN_HORIZONTAL, the input image is
 *          tiled into vertical strips of width %size, where %size is
 *          chosen as a compromise between getting better spatial
 *          columnwise resolution (small %size) and getting better
 *          columnwise statistical information (larger %size).  Likewise
 *          with rows of the image if %direction == L_SCAN_VERTICAL.
 *      (2) For L_HORIZONTAL_SCAN, the output pix contains rank binned
 *          median colors in each column that correspond to a vertical
 *          strip of width %size in the input image.
 *      (3) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN,
 *          L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX, L_SELECT_AVERAGE,
 *          L_SELECT_HUE, L_SELECT_SATURATION.
 *          It determines how the rank ordering is done.
 *      (4) Typical input values might be %size = 5, %nbins = 10.
 * 
*/ PIX * pixRankBinByStrip(PIX *pixs, l_int32 direction, l_int32 size, l_int32 nbins, l_int32 type) { l_int32 i, j, w, h, mindim, nstrips; l_uint32 *array; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return (PIX *)ERROR_PTR("pixs neither 32 bpp nor cmapped", __func__, NULL); if (direction != L_SCAN_HORIZONTAL && direction != L_SCAN_VERTICAL) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (size < 1) return (PIX *)ERROR_PTR("size < 1", __func__, NULL); if (nbins < 2) return (PIX *)ERROR_PTR("nbins must be at least 2", __func__, NULL); if (type != L_SELECT_RED && type != L_SELECT_GREEN && type != L_SELECT_BLUE && type != L_SELECT_MIN && type != L_SELECT_MAX && type != L_SELECT_AVERAGE && type != L_SELECT_HUE && type != L_SELECT_SATURATION) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); mindim = L_MIN(w, h); if (mindim < 20 || nbins > mindim) return (PIX *)ERROR_PTR("pix too small and/or too many bins", __func__, NULL); /* Remove colormap if it exists */ if (cmap) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pix1 = pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = NULL; boxa = makeMosaicStrips(w, h, direction, size); pixa = pixClipRectangles(pix1, boxa); nstrips = pixaGetCount(pixa); if (direction == L_SCAN_HORIZONTAL) { pixd = pixCreate(nstrips, nbins, 32); for (i = 0; i < nstrips; i++) { pix2 = pixaGetPix(pixa, i, L_CLONE); pixGetRankColorArray(pix2, nbins, type, 1, &array, NULL, 0); if (array) { for (j = 0; j < nbins; j++) pixSetPixel(pixd, i, j, array[j]); LEPT_FREE(array); } pixDestroy(&pix2); } } else { /* L_SCAN_VERTICAL */ pixd = pixCreate(nbins, nstrips, 32); for (i = 0; i < nstrips; i++) { pix2 = pixaGetPix(pixa, i, L_CLONE); pixGetRankColorArray(pix2, nbins, type, 1, &array, NULL, 0); if (array) { for (j = 0; j < nbins; j++) pixSetPixel(pixd, j, i, array[j]); LEPT_FREE(array); } pixDestroy(&pix2); } } pixDestroy(&pix1); boxaDestroy(&boxa); pixaDestroy(&pixa); return pixd; } /*-------------------------------------------------------------* * Pixelwise aligned statistics * *-------------------------------------------------------------*/ /*! * \brief pixaGetAlignedStats() * * \param[in] pixa of identically sized, 8 bpp pix; not cmapped * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT * \param[in] nbins of histogram for median and mode; ignored for mean * \param[in] thresh on histogram for mode val; ignored for all other types * \return pix with pixelwise aligned stats, or NULL on error. * *
 * Notes:
 *      (1) Each pixel in the returned pix represents an average
 *          (or median, or mode) over the corresponding pixels in each
 *          pix in the pixa.
 *      (2) The %thresh parameter works with L_MODE_VAL only, and
 *          sets a minimum occupancy of the mode bin.
 *          If the occupancy of the mode bin is less than %thresh, the
 *          mode value is returned as 0.  To always return the actual
 *          mode value, set %thresh = 0.  See pixGetRowStats().
 * 
*/ PIX * pixaGetAlignedStats(PIXA *pixa, l_int32 type, l_int32 nbins, l_int32 thresh) { l_int32 j, n, w, h, d; l_float32 *colvect; PIX *pixt, *pixd; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); n = pixaGetCount(pixa); if (n == 0) return (PIX *)ERROR_PTR("no pix in pixa", __func__, NULL); pixaGetPixDimensions(pixa, 0, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pix not 8 bpp", __func__, NULL); pixd = pixCreate(w, h, 8); pixt = pixCreate(n, h, 8); colvect = (l_float32 *)LEPT_CALLOC(h, sizeof(l_float32)); for (j = 0; j < w; j++) { pixaExtractColumnFromEachPix(pixa, j, pixt); pixGetRowStats(pixt, type, nbins, thresh, colvect); pixSetPixelColumn(pixd, j, colvect); } LEPT_FREE(colvect); pixDestroy(&pixt); return pixd; } /*! * \brief pixaExtractColumnFromEachPix() * * \param[in] pixa of identically sized, 8 bpp; not cmapped * \param[in] col column index * \param[in] pixd pix into which each column is inserted * \return 0 if OK, 1 on error */ l_ok pixaExtractColumnFromEachPix(PIXA *pixa, l_int32 col, PIX *pixd) { l_int32 i, k, n, w, h, ht, val, wplt, wpld; l_uint32 *datad, *datat; PIX *pixt; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!pixd || pixGetDepth(pixd) != 8) return ERROR_INT("pixd not defined or not 8 bpp", __func__, 1); n = pixaGetCount(pixa); pixGetDimensions(pixd, &w, &h, NULL); if (n != w) return ERROR_INT("pix width != n", __func__, 1); pixt = pixaGetPix(pixa, 0, L_CLONE); wplt = pixGetWpl(pixt); pixGetDimensions(pixt, NULL, &ht, NULL); pixDestroy(&pixt); if (h != ht) return ERROR_INT("pixd height != column height", __func__, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (k = 0; k < n; k++) { pixt = pixaGetPix(pixa, k, L_CLONE); datat = pixGetData(pixt); for (i = 0; i < h; i++) { val = GET_DATA_BYTE(datat, col); SET_DATA_BYTE(datad + i * wpld, k, val); datat += wplt; } pixDestroy(&pixt); } return 0; } /*! * \brief pixGetRowStats() * * \param[in] pixs 8 bpp; not cmapped * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT * \param[in] nbins of histogram for median and mode; ignored for mean * \param[in] thresh on histogram for mode; ignored for mean and median * \param[in] colvect vector of results gathered across the rows of pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes a column vector of statistics using each
 *          row of a Pix.  The result is put in %colvect.
 *      (2) The %thresh parameter works with L_MODE_VAL only, and
 *          sets a minimum occupancy of the mode bin.
 *          If the occupancy of the mode bin is less than %thresh, the
 *          mode value is returned as 0.  To always return the actual
 *          mode value, set %thresh = 0.
 *      (3) What is the meaning of this %thresh parameter?
 *          For each row, the total count in the histogram is w, the
 *          image width.  So %thresh, relative to w, gives a measure
 *          of the ratio of the bin width to the width of the distribution.
 *          The larger %thresh, the narrower the distribution must be
 *          for the mode value to be returned (instead of returning 0).
 *      (4) If the Pix consists of a set of corresponding columns,
 *          one for each Pix in a Pixa, the width of the Pix is the
 *          number of Pix in the Pixa and the column vector can
 *          be stored as a column in a Pix of the same size as
 *          each Pix in the Pixa.
 * 
*/ l_ok pixGetRowStats(PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *colvect) { l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; l_int32 *histo, *gray2bin, *bin2gray; l_uint32 *lines, *datas; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!colvect) return ERROR_INT("colvect not defined", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return ERROR_INT("invalid type", __func__, 1); if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) return ERROR_INT("invalid nbins", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == L_MEAN_ABSVAL) { for (i = 0; i < h; i++) { sum = 0; lines = datas + i * wpls; for (j = 0; j < w; j++) sum += GET_DATA_BYTE(lines, j); colvect[i] = (l_float32)sum / (l_float32)w; } return 0; } /* We need a histogram; binwidth ~ 256 / nbins */ histo = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); gray2bin = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); bin2gray = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); for (i = 0; i < 256; i++) /* gray value --> histo bin */ gray2bin[i] = (i * nbins) / 256; for (i = 0; i < nbins; i++) /* histo bin --> gray value */ bin2gray[i] = (i * 256 + 128) / nbins; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (k = 0; k < nbins; k++) histo[k] = 0; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); histo[gray2bin[val]]++; } if (type == L_MEDIAN_VAL) { sum = 0; target = (w + 1) / 2; for (k = 0; k < nbins; k++) { sum += histo[k]; if (sum >= target) { colvect[i] = bin2gray[k]; break; } } } else if (type == L_MODE_VAL) { max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (max < thresh) colvect[i] = 0; else colvect[i] = bin2gray[modeval]; } else { /* type == L_MODE_COUNT */ max = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) max = histo[k]; } colvect[i] = max; } } LEPT_FREE(histo); LEPT_FREE(gray2bin); LEPT_FREE(bin2gray); return 0; } /*! * \brief pixGetColumnStats() * * \param[in] pixs 8 bpp; not cmapped * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT * \param[in] nbins of histogram for median and mode; ignored for mean * \param[in] thresh on histogram for mode val; ignored for all other types * \param[in] rowvect vector of results gathered down the columns of pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes a row vector of statistics using each
 *          column of a Pix.  The result is put in %rowvect.
 *      (2) The %thresh parameter works with L_MODE_VAL only, and
 *          sets a minimum occupancy of the mode bin.
 *          If the occupancy of the mode bin is less than %thresh, the
 *          mode value is returned as 0.  To always return the actual
 *          mode value, set %thresh = 0.
 *      (3) What is the meaning of this %thresh parameter?
 *          For each column, the total count in the histogram is h, the
 *          image height.  So %thresh, relative to h, gives a measure
 *          of the ratio of the bin width to the width of the distribution.
 *          The larger %thresh, the narrower the distribution must be
 *          for the mode value to be returned (instead of returning 0).
 * 
*/ l_ok pixGetColumnStats(PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *rowvect) { l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; l_int32 *histo, *gray2bin, *bin2gray; l_uint32 *datas; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!rowvect) return ERROR_INT("rowvect not defined", __func__, 1); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return ERROR_INT("invalid type", __func__, 1); if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) return ERROR_INT("invalid nbins", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == L_MEAN_ABSVAL) { for (j = 0; j < w; j++) { sum = 0; for (i = 0; i < h; i++) sum += GET_DATA_BYTE(datas + i * wpls, j); rowvect[j] = (l_float32)sum / (l_float32)h; } return 0; } /* We need a histogram; binwidth ~ 256 / nbins */ histo = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); gray2bin = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); bin2gray = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); for (i = 0; i < 256; i++) /* gray value --> histo bin */ gray2bin[i] = (i * nbins) / 256; for (i = 0; i < nbins; i++) /* histo bin --> gray value */ bin2gray[i] = (i * 256 + 128) / nbins; for (j = 0; j < w; j++) { for (i = 0; i < h; i++) { val = GET_DATA_BYTE(datas + i * wpls, j); histo[gray2bin[val]]++; } if (type == L_MEDIAN_VAL) { sum = 0; target = (h + 1) / 2; for (k = 0; k < nbins; k++) { sum += histo[k]; if (sum >= target) { rowvect[j] = bin2gray[k]; break; } } } else if (type == L_MODE_VAL) { max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (max < thresh) rowvect[j] = 0; else rowvect[j] = bin2gray[modeval]; } else { /* type == L_MODE_COUNT */ max = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) max = histo[k]; } rowvect[j] = max; } for (k = 0; k < nbins; k++) histo[k] = 0; } LEPT_FREE(histo); LEPT_FREE(gray2bin); LEPT_FREE(bin2gray); return 0; } /*! * \brief pixSetPixelColumn() * * \param[in] pix 8 bpp; not cmapped * \param[in] col column index * \param[in] colvect vector of floats * \return 0 if OK, 1 on error */ l_ok pixSetPixelColumn(PIX *pix, l_int32 col, l_float32 *colvect) { l_int32 i, w, h, wpl; l_uint32 *data; if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix not defined or not 8 bpp", __func__, 1); if (!colvect) return ERROR_INT("colvect not defined", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (col < 0 || col > w) return ERROR_INT("invalid col", __func__, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) SET_DATA_BYTE(data + i * wpl, col, (l_int32)colvect[i]); return 0; } /*-------------------------------------------------------------* * Foreground/background estimation * *-------------------------------------------------------------*/ /*! * \brief pixThresholdForFgBg() * * \param[in] pixs any depth; cmapped ok * \param[in] factor subsampling factor; integer >= 1 * \param[in] thresh threshold for generating foreground mask * \param[out] pfgval [optional] average foreground value * \param[out] pbgval [optional] average background value * \return 0 if OK, 1 on error */ l_ok pixThresholdForFgBg(PIX *pixs, l_int32 factor, l_int32 thresh, l_int32 *pfgval, l_int32 *pbgval) { l_float32 fval; PIX *pixg, *pixm; if (pfgval) *pfgval = 0; if (pbgval) *pbgval = 0; if (!pfgval && !pbgval) return ERROR_INT("no data requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Generate a subsampled 8 bpp version and a mask over the fg */ pixg = pixConvertTo8BySampling(pixs, factor, 0); pixm = pixThresholdToBinary(pixg, thresh); if (pfgval) { pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); *pfgval = (l_int32)(fval + 0.5); } if (pbgval) { pixInvert(pixm, pixm); pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); *pbgval = (l_int32)(fval + 0.5); } pixDestroy(&pixg); pixDestroy(&pixm); return 0; } /*! * \brief pixSplitDistributionFgBg() * * \param[in] pixs any depth; cmapped ok * \param[in] scorefract fraction of the max score, used to determine * the range over which the histogram min is searched * \param[in] factor subsampling factor; integer >= 1 * \param[out] pthresh [optional] best threshold for separating * \param[out] pfgval [optional] average foreground value * \param[out] pbgval [optional] average background value * \param[out] ppixdb [optional] plot of distribution and split point * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See numaSplitDistribution() for details on the underlying
 *          method of choosing a threshold.
 * 
*/ l_ok pixSplitDistributionFgBg(PIX *pixs, l_float32 scorefract, l_int32 factor, l_int32 *pthresh, l_int32 *pfgval, l_int32 *pbgval, PIX **ppixdb) { char buf[256]; l_int32 thresh; l_float32 avefg, avebg, maxnum; GPLOT *gplot; NUMA *na, *nascore, *nax, *nay; PIX *pixg; if (pthresh) *pthresh = 0; if (pfgval) *pfgval = 0; if (pbgval) *pbgval = 0; if (ppixdb) *ppixdb = NULL; if (!pthresh && !pfgval && !pbgval) return ERROR_INT("no data requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Generate a subsampled 8 bpp version */ pixg = pixConvertTo8BySampling(pixs, factor, 0); /* Make the fg/bg estimates */ na = pixGetGrayHistogram(pixg, 1); if (ppixdb) { numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, NULL, NULL, &nascore); numaDestroy(&nascore); } else { numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, NULL, NULL, NULL); } if (pthresh) *pthresh = thresh; if (pfgval) *pfgval = (l_int32)(avefg + 0.5); if (pbgval) *pbgval = (l_int32)(avebg + 0.5); if (ppixdb) { lept_mkdir("lept/redout"); gplot = gplotCreate("/tmp/lept/redout/histplot", GPLOT_PNG, "Histogram", "Grayscale value", "Number of pixels"); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, NULL); nax = numaMakeConstant(thresh, 2); numaGetMax(na, &maxnum, NULL); nay = numaMakeConstant(0, 2); numaReplaceNumber(nay, 1, (l_int32)(0.5 * maxnum)); snprintf(buf, sizeof(buf), "score fract = %3.1f", scorefract); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, buf); *ppixdb = gplotMakeOutputPix(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); } pixDestroy(&pixg); numaDestroy(&na); return 0; } leptonica-1.86.0/src/pix5.c000066400000000000000000003130261506303110300154010ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pix5.c *
 *
 *    This file has these operations:
 *
 *      (1) Measurement of 1 bpp image properties
 *      (2) Extract rectangular regions
 *      (3) Clip to foreground
 *      (4) Extract pixel averages, reversals and variance along lines
 *      (5) Rank row and column transforms
 *
 *    Measurement of properties
 *           l_int32     pixaFindDimensions()
 *           l_int32     pixFindAreaPerimRatio()
 *           NUMA       *pixaFindPerimToAreaRatio()
 *           l_int32     pixFindPerimToAreaRatio()
 *           NUMA       *pixaFindPerimSizeRatio()
 *           l_int32     pixFindPerimSizeRatio()
 *           NUMA       *pixaFindAreaFraction()
 *           l_int32     pixFindAreaFraction()
 *           NUMA       *pixaFindAreaFractionMasked()
 *           l_int32     pixFindAreaFractionMasked()
 *           NUMA       *pixaFindWidthHeightRatio()
 *           NUMA       *pixaFindWidthHeightProduct()
 *           l_int32     pixFindOverlapFraction()
 *           BOXA       *pixFindRectangleComps()
 *           l_int32     pixConformsToRectangle()
 *
 *    Extract rectangular regions
 *           PIX        *pixExtractRectangularRegions()
 *           PIXA       *pixClipRectangles()
 *           PIX        *pixClipRectangle()
 *           PIX        *pixClipRectangleWithBorder()
 *           PIX        *pixClipMasked()
 *           l_int32     pixCropToMatch()
 *           PIX        *pixCropToSize()
 *           PIX        *pixResizeToMatch()
 *
 *    Select a connected component by size
 *           PIX        *pixSelectComponentBySize()
 *           PIX        *pixFilterComponentBySize()
 *
 *    Make special masks
 *           PIX        *pixMakeSymmetricMask()
 *           PIX        *pixMakeFrameMask()
 *
 *    Generate a covering of rectangles over connected components
 *           PIX        * pixMakeCoveringOfRectangles()
 *
 *    Fraction of Fg pixels under a mask
 *           l_int32     pixFractionFgInMask()
 *
 *    Clip to foreground
 *           PIX        *pixClipToForeground()
 *           l_int32     pixTestClipToForeground()
 *           l_int32     pixClipBoxToForeground()
 *           l_int32     pixScanForForeground()
 *           l_int32     pixClipBoxToEdges()
 *           l_int32     pixScanForEdge()
 *
 *    Extract pixel averages and reversals along lines
 *           NUMA       *pixExtractOnLine()
 *           l_float32   pixAverageOnLine()
 *           NUMA       *pixAverageIntensityProfile()
 *           NUMA       *pixReversalProfile()
 *
 *    Extract windowed variance along a line
 *           NUMA       *pixWindowedVarianceOnLine()
 *
 *    Extract min/max of pixel values near lines
 *           l_int32     pixMinMaxNearLine()
 *
 *    Rank row and column transforms
 *           PIX        *pixRankRowTransform()
 *           PIX        *pixRankColumnTransform()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; #ifndef NO_CONSOLE_IO #define DEBUG_EDGES 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Measurement of properties * *-------------------------------------------------------------*/ /*! * \brief pixaFindDimensions() * * \param[in] pixa * \param[out] pnaw [optional] numa of pix widths * \param[out] pnah [optional] numa of pix heights * \return 0 if OK, 1 on error */ l_ok pixaFindDimensions(PIXA *pixa, NUMA **pnaw, NUMA **pnah) { l_int32 i, n, w, h; PIX *pixt; if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (!pnaw && !pnah) return ERROR_INT("no output requested", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (pnaw) *pnaw = numaCreate(n); if (pnah) *pnah = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); if (pnaw) numaAddNumber(*pnaw, w); if (pnah) numaAddNumber(*pnah, h); pixDestroy(&pixt); } return 0; } /*! * \brief pixFindAreaPerimRatio() * * \param[in] pixs 1 bpp * \param[in] tab [optional] pixel sum table, can be NULL * \param[out] pfract area/perimeter ratio * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The area is the number of fg pixels that are not on the
 *          boundary (i.e., are not 8-connected to a bg pixel), and the
 *          perimeter is the number of fg boundary pixels.  Returns
 *          0.0 if there are no fg pixels.
 *      (2) This function is retained because clients are using it.
 * 
*/ l_ok pixFindAreaPerimRatio(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 *tab8; l_int32 nfg, nbound; PIX *pixt; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixt = pixErodeBrick(NULL, pixs, 3, 3); pixCountPixels(pixt, &nfg, tab8); if (nfg == 0) { pixDestroy(&pixt); if (!tab) LEPT_FREE(tab8); return 0; } pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); *pfract = (l_float32)nfg / (l_float32)nbound; pixDestroy(&pixt); if (!tab) LEPT_FREE(tab8); return 0; } /*! * \brief pixaFindPerimToAreaRatio() * * \param[in] pixa of 1 bpp pix * \return na of perimeter/arear ratio for each pix, or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components.
 * 
*/ NUMA * pixaFindPerimToAreaRatio(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 fract; NUMA *na; PIX *pixt; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindPerimToAreaRatio(pixt, tab, &fract); numaAddNumber(na, fract); pixDestroy(&pixt); } LEPT_FREE(tab); return na; } /*! * \brief pixFindPerimToAreaRatio() * * \param[in] pixs 1 bpp * \param[in] tab [optional] pixel sum table, can be NULL * \param[out] pfract perimeter/area ratio * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The perimeter is the number of fg boundary pixels, and the
 *          area is the number of fg pixels.  This returns 0.0 if
 *          there are no fg pixels.
 *      (2) Unlike pixFindAreaPerimRatio(), this uses the full set of
 *          fg pixels for the area, and the ratio is taken in the opposite
 *          order.
 *      (3) This is typically used for a single connected component.
 *          This always has a value <= 1.0, and if the average distance
 *          of a fg pixel from the nearest bg pixel is d, this has
 *          a value ~1/d.
 * 
*/ l_ok pixFindPerimToAreaRatio(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 *tab8; l_int32 nfg, nbound; PIX *pixt; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixCountPixels(pixs, &nfg, tab8); if (nfg == 0) { if (!tab) LEPT_FREE(tab8); return 0; } pixt = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); *pfract = (l_float32)nbound / (l_float32)nfg; pixDestroy(&pixt); if (!tab) LEPT_FREE(tab8); return 0; } /*! * \brief pixaFindPerimSizeRatio() * * \param[in] pixa of 1 bpp pix * \return na of fg perimeter/(2*(w+h)) ratio for each pix, * or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components.
 *      (2) This has a minimum value for a circle of pi/4; a value for
 *          a rectangle component of approx. 1.0; and a value much larger
 *          than 1.0 for a component with a highly irregular boundary.
 * 
*/ NUMA * pixaFindPerimSizeRatio(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 ratio; NUMA *na; PIX *pixt; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindPerimSizeRatio(pixt, tab, &ratio); numaAddNumber(na, ratio); pixDestroy(&pixt); } LEPT_FREE(tab); return na; } /*! * \brief pixFindPerimSizeRatio() * * \param[in] pixs 1 bpp * \param[in] tab [optional] pixel sum table, can be NULL * \param[out] pratio perimeter/size ratio * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We take the 'size' as twice the sum of the width and
 *          height of pixs, and the perimeter is the number of fg
 *          boundary pixels.  We use the fg pixels of the boundary
 *          because the pix may be clipped to the boundary, so an
 *          erosion is required to count all boundary pixels.
 *      (2) This has a large value for dendritic, fractal-like components
 *          with highly irregular boundaries.
 *      (3) This is typically used for a single connected component.
 *          It has a value of about 1.0 for rectangular components with
 *          relatively smooth boundaries.
 * 
*/ l_ok pixFindPerimSizeRatio(PIX *pixs, l_int32 *tab, l_float32 *pratio) { l_int32 *tab8; l_int32 w, h, nbound; PIX *pixt; if (!pratio) return ERROR_INT("&ratio not defined", __func__, 1); *pratio = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixt = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); pixGetDimensions(pixs, &w, &h, NULL); *pratio = (0.5f * nbound) / (l_float32)(w + h); pixDestroy(&pixt); if (!tab) LEPT_FREE(tab8); return 0; } /*! * \brief pixaFindAreaFraction() * * \param[in] pixa of 1 bpp pix * \return na of area fractions for each pix, or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components.
 * 
*/ NUMA * pixaFindAreaFraction(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 fract; NUMA *na; PIX *pixt; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindAreaFraction(pixt, tab, &fract); numaAddNumber(na, fract); pixDestroy(&pixt); } LEPT_FREE(tab); return na; } /*! * \brief pixFindAreaFraction() * * \param[in] pixs 1 bpp * \param[in] tab [optional] pixel sum table, can be NULL * \param[out] pfract fg area/size ratio * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the ratio of the number of fg pixels to the
 *          size of the pix (w * h).  It is typically used for a
 *          single connected component.
 * 
*/ l_ok pixFindAreaFraction(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 w, h, sum; l_int32 *tab8; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixGetDimensions(pixs, &w, &h, NULL); pixCountPixels(pixs, &sum, tab8); *pfract = (l_float32)sum / (l_float32)(w * h); if (!tab) LEPT_FREE(tab8); return 0; } /*! * \brief pixaFindAreaFractionMasked() * * \param[in] pixa of 1 bpp pix * \param[in] pixm mask image * \param[in] debug 1 for output, 0 to suppress * \return na of ratio masked/total fractions for each pix, * or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components, which has an associated
 *          boxa giving the location of the components relative
 *          to the mask origin.
 *      (2) The debug flag displays in green and red the masked and
 *          unmasked parts of the image from which pixa was derived.
 * 
*/ NUMA * pixaFindAreaFractionMasked(PIXA *pixa, PIX *pixm, l_int32 debug) { l_int32 i, n, full; l_int32 *tab; l_float32 fract; BOX *box; NUMA *na; PIX *pix; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (NUMA *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); pixaIsFull(pixa, NULL, &full); /* check boxa */ box = NULL; for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (full) box = pixaGetBox(pixa, i, L_CLONE); pixFindAreaFractionMasked(pix, box, pixm, tab, &fract); numaAddNumber(na, fract); boxDestroy(&box); pixDestroy(&pix); } LEPT_FREE(tab); if (debug) { l_int32 w, h; PIX *pix1, *pix2; pixGetDimensions(pixm, &w, &h, NULL); pix1 = pixaDisplay(pixa, w, h); /* recover original image */ pix2 = pixCreate(w, h, 8); /* make an 8 bpp white image ... */ pixSetColormap(pix2, pixcmapCreate(8)); /* that's cmapped ... */ pixSetBlackOrWhite(pix2, L_SET_WHITE); /* and init to white */ pixSetMaskedCmap(pix2, pix1, 0, 0, 255, 0, 0); /* color all fg red */ pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, 0, 0); pixSetMaskedCmap(pix2, pix1, 0, 0, 0, 255, 0); /* turn masked green */ pixDisplay(pix2, 100, 100); pixDestroy(&pix1); pixDestroy(&pix2); } return na; } /*! * \brief pixFindAreaFractionMasked() * * \param[in] pixs 1 bpp, typically a single component * \param[in] box [optional] for pixs relative to pixm * \param[in] pixm 1 bpp mask, typically over the entire image from * which the component pixs was extracted * \param[in] tab [optional] pixel sum table, can be NULL * \param[out] pfract fg area/size ratio * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This finds the ratio of the number of masked fg pixels
 *          in pixs to the total number of fg pixels in pixs.
 *          It is typically used for a single connected component.
 *          If there are no fg pixels, this returns a ratio of 0.0.
 *      (2) The box gives the location of the pix relative to that
 *          of the UL corner of the mask.  Therefore, the rasterop
 *          is performed with the pix translated to its location
 *          (x, y) in the mask before ANDing.
 *          If box == NULL, the UL corners of pixs and pixm are aligned.
 * 
*/ l_ok pixFindAreaFractionMasked(PIX *pixs, BOX *box, PIX *pixm, l_int32 *tab, l_float32 *pfract) { l_int32 x, y, w, h, sum, masksum; l_int32 *tab8; PIX *pix1; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; x = y = 0; if (box) boxGetGeometry(box, &x, &y, NULL, NULL); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixCopy(NULL, pixs); pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, x, y); pixCountPixels(pixs, &sum, tab8); if (sum == 0) { pixDestroy(&pix1); if (!tab) LEPT_FREE(tab8); return 0; } pixCountPixels(pix1, &masksum, tab8); *pfract = (l_float32)masksum / (l_float32)sum; if (!tab) LEPT_FREE(tab8); pixDestroy(&pix1); return 0; } /*! * \brief pixaFindWidthHeightRatio() * * \param[in] pixa of 1 bpp pix * \return na of width/height ratios for each pix, or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components.
 * 
*/ NUMA * pixaFindWidthHeightRatio(PIXA *pixa) { l_int32 i, n, w, h; NUMA *na; PIX *pixt; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); numaAddNumber(na, (l_float32)w / (l_float32)h); pixDestroy(&pixt); } return na; } /*! * \brief pixaFindWidthHeightProduct() * * \param[in] pixa of 1 bpp pix * \return na of width*height products for each pix, or NULL on error * *
 * Notes:
 *      (1) This is typically used for a pixa consisting of
 *          1 bpp connected components.
 * 
*/ NUMA * pixaFindWidthHeightProduct(PIXA *pixa) { l_int32 i, n, w, h; NUMA *na; PIX *pixt; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); numaAddNumber(na, w * h); pixDestroy(&pixt); } return na; } /*! * \brief pixFindOverlapFraction() * * \param[in] pixs1, pixs2 1 bpp * \param[in] x2, y2 location in pixs1 of UL corner of pixs2 * \param[in] tab [optional] pixel sum table, can be null * \param[out] pratio ratio fg intersection to fg union * \param[out] pnoverlap [optional] number of overlapping pixels * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The UL corner of pixs2 is placed at (x2, y2) in pixs1.
 *      (2) This measure is similar to the correlation.
 * 
*/ l_ok pixFindOverlapFraction(PIX *pixs1, PIX *pixs2, l_int32 x2, l_int32 y2, l_int32 *tab, l_float32 *pratio, l_int32 *pnoverlap) { l_int32 *tab8; l_int32 w, h, nintersect, nunion; PIX *pixt; if (pnoverlap) *pnoverlap = 0; if (!pratio) return ERROR_INT("&ratio not defined", __func__, 1); *pratio = 0.0; if (!pixs1 || pixGetDepth(pixs1) != 1) return ERROR_INT("pixs1 not defined or not 1 bpp", __func__, 1); if (!pixs2 || pixGetDepth(pixs2) != 1) return ERROR_INT("pixs2 not defined or not 1 bpp", __func__, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixGetDimensions(pixs2, &w, &h, NULL); pixt = pixCopy(NULL, pixs1); pixRasterop(pixt, x2, y2, w, h, PIX_MASK, pixs2, 0, 0); /* AND */ pixCountPixels(pixt, &nintersect, tab8); if (pnoverlap) *pnoverlap = nintersect; pixCopy(pixt, pixs1); pixRasterop(pixt, x2, y2, w, h, PIX_PAINT, pixs2, 0, 0); /* OR */ pixCountPixels(pixt, &nunion, tab8); if (!tab) LEPT_FREE(tab8); pixDestroy(&pixt); if (nunion > 0) *pratio = (l_float32)nintersect / (l_float32)nunion; return 0; } /*! * \brief pixFindRectangleComps() * * \param[in] pixs 1 bpp * \param[in] dist max distance allowed between bounding box * and nearest foreground pixel within it * \param[in] minw, minh minimum size in each direction as a requirement * for a conforming rectangle * \return boxa of components that conform, or NULL on error * *
 * Notes:
 *      (1) This applies the function pixConformsToRectangle() to
 *          each 8-c.c. in pixs, and returns a boxa containing the
 *          regions of all components that are conforming.
 *      (2) Conforming components must satisfy both the size constraint
 *          given by %minsize and the slop in conforming to a rectangle
 *          determined by %dist.
 * 
*/ BOXA * pixFindRectangleComps(PIX *pixs, l_int32 dist, l_int32 minw, l_int32 minh) { l_int32 w, h, i, n, conforms; BOX *box; BOXA *boxa, *boxad; PIX *pix; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (dist < 0) return (BOXA *)ERROR_PTR("dist must be >= 0", __func__, NULL); if (minw <= 2 * dist && minh <= 2 * dist) return (BOXA *)ERROR_PTR("invalid parameters", __func__, NULL); boxa = pixConnComp(pixs, &pixa, 8); boxad = boxaCreate(0); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (w < minw || h < minh) { pixDestroy(&pix); continue; } pixConformsToRectangle(pix, NULL, dist, &conforms); if (conforms) { box = boxaGetBox(boxa, i, L_COPY); boxaAddBox(boxad, box, L_INSERT); } pixDestroy(&pix); } boxaDestroy(&boxa); pixaDestroy(&pixa); return boxad; } /*! * \brief pixConformsToRectangle() * * \param[in] pixs 1 bpp * \param[in] box [optional] if null, use the entire pixs * \param[in] dist max distance allowed between bounding box and * nearest foreground pixel within it * \param[out] pconforms 0 (false) if not conforming; * 1 (true) if conforming * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) There are several ways to test if a connected component has
 *          an essentially rectangular boundary, such as:
 *           a. Fraction of fill into the bounding box
 *           b. Max-min distance of fg pixel from periphery of bounding box
 *           c. Max depth of bg intrusions into component within bounding box
 *          The weakness of (a) is that it is highly sensitive to holes
 *          within the c.c.  The weakness of (b) is that it can have
 *          arbitrarily large intrusions into the c.c.  Method (c) tests
 *          the integrity of the outer boundary of the c.c., with respect
 *          to the enclosing bounding box, so we use it.
 *      (2) This tests if the connected component within the box conforms
 *          to the box at all points on the periphery within %dist.
 *          Inside, at a distance from the box boundary that is greater
 *          than %dist, we don't care about the pixels in the c.c.
 *      (3) We can think of the conforming condition as follows:
 *          No pixel inside a distance %dist from the boundary
 *          can connect to the boundary through a path through the bg.
 *          To implement this, we need to do a flood fill.  We can go
 *          either from inside toward the boundary, or the other direction.
 *          It's easiest to fill from the boundary, and then verify that
 *          there are no filled pixels farther than %dist from the boundary.
 * 
*/ l_ok pixConformsToRectangle(PIX *pixs, BOX *box, l_int32 dist, l_int32 *pconforms) { l_int32 w, h, empty; PIX *pix1, *pix2; if (!pconforms) return ERROR_INT("&conforms not defined", __func__, 1); *pconforms = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (dist < 0) return ERROR_INT("dist must be >= 0", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w <= 2 * dist || h <= 2 * dist) { L_WARNING("automatic conformation: distance too large\n", __func__); *pconforms = 1; return 0; } /* Extract the region, if necessary */ if (box) pix1 = pixClipRectangle(pixs, box, NULL); else pix1 = pixCopy(NULL, pixs); /* Invert and fill from the boundary into the interior. * Because we're considering the connected component in an * 8-connected sense, we do the background filling as 4 c.c. */ pixInvert(pix1, pix1); pix2 = pixExtractBorderConnComps(pix1, 4); /* Mask out all pixels within a distance %dist from the box * boundary. Any remaining pixels are from filling that goes * more than %dist from the boundary. If no pixels remain, * the component conforms to the bounding rectangle within * a distance %dist. */ pixSetOrClearBorder(pix2, dist, dist, dist, dist, PIX_CLR); pixZero(pix2, &empty); pixDestroy(&pix1); pixDestroy(&pix2); *pconforms = (empty) ? 1 : 0; return 0; } /*-----------------------------------------------------------------------* * Extract rectangular regions * *-----------------------------------------------------------------------*/ /*! * \brief pixExtractRectangularRegions() * * \param[in] pixs * \param[in] boxa regions to extract * \return pix with extracted regions, or NULL on error * *
 * Notes:
 *     (1) The returned pix has the rectangular regions clipped from
 *         the input pixs.
 *     (2) We could equally well do this operation using a mask of 1's over
 *         the regions determined by the boxa:
 *           pix1 = pixCreateTemplate(pixs);
 *           pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS);
 *           pixAnd(pix1, pix1, pixs);
 * 
*/ PIX * pixExtractRectangularRegions(PIX *pixs, BOXA *boxa) { l_int32 w, h; PIX *pix1; PIXA *pixa1; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", __func__, NULL); if ((pixa1 = pixClipRectangles(pixs, boxa)) == NULL) return (PIX *)ERROR_PTR("pixa1 not made", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixaDisplay(pixa1, w, h); pixaDestroy(&pixa1); return pix1; } /*! * \brief pixClipRectangles() * * \param[in] pixs * \param[in] boxa requested clipping regions * \return pixa consisting of requested regions, or NULL on error * *
 * Notes:
 *     (1) The boxa in the returned pixa has the regions clipped from
 *         the input pixs.
 * 
*/ PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa) { l_int32 i, n; BOX *box, *boxc; PIX *pix; PIXA *pixa; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIXA *)ERROR_PTR("boxa not defined", __func__, NULL); n = boxaGetCount(boxa); pixa = pixaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixClipRectangle(pixs, box, &boxc); pixaAddPix(pixa, pix, L_INSERT); pixaAddBox(pixa, boxc, L_INSERT); boxDestroy(&box); } return pixa; } /*! * \brief pixClipRectangle() * * \param[in] pixs * \param[in] box requested clipping region; const * \param[out] pboxc [optional] actual box of clipped region * \return clipped pix, or NULL on error or if rectangle * doesn't intersect pixs * *
 * Notes:
 *
 *  This should be simple, but there are choices to be made.
 *  The box is defined relative to the pix coordinates.  However,
 *  if the box is not contained within the pix, we have two choices:
 *
 *      (1) clip the box to the pix
 *      (2) make a new pix equal to the full box dimensions,
 *          but let rasterop do the clipping and positioning
 *          of the src with respect to the dest
 *
 *  Choice (2) immediately brings up the problem of what pixel values
 *  to use that were not taken from the src.  For example, on a grayscale
 *  image, do you want the pixels not taken from the src to be black
 *  or white or something else?  To implement choice 2, one needs to
 *  specify the color of these extra pixels.
 *
 *  So we adopt (1), and clip the box first, if necessary,
 *  before making the dest pix and doing the rasterop.  But there
 *  is another issue to consider.  If you want to paste the
 *  clipped pix back into pixs, it must be properly aligned, and
 *  it is necessary to use the clipped box for alignment.
 *  Accordingly, this function has a third (optional) argument, which is
 *  the input box clipped to the src pix.
 * 
*/ PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc) { l_int32 w, h, d, bx, by, bw, bh; BOX *boxc; PIX *pixd; if (pboxc) *pboxc = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!box) return (PIX *)ERROR_PTR("box not defined", __func__, NULL); /* Clip the input box to the pix */ pixGetDimensions(pixs, &w, &h, &d); if ((boxc = boxClipToRectangle(box, w, h)) == NULL) { L_WARNING("box doesn't overlap pix\n", __func__); return NULL; } boxGetGeometry(boxc, &bx, &by, &bw, &bh); /* Extract the block */ if ((pixd = pixCreate(bw, bh, d)) == NULL) { boxDestroy(&boxc); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixRasterop(pixd, 0, 0, bw, bh, PIX_SRC, pixs, bx, by); if (pboxc) *pboxc = boxc; else boxDestroy(&boxc); return pixd; } /*! * \brief pixClipRectangleWithBorder() * * \param[in] pixs * \param[in] box requested clipping region; const * \param[in] maxbord maximum amount of border to include * \param[out] pboxn box in coordinates of returned pix * \return under-clipped pix, or NULL on error or if rectangle * doesn't intersect pixs * *
 * Notes:
 *      (1) This underclips by an amount determined by the minimum of
 *          %maxbord and the amount of border that can be included
 *          equally on all 4 sides.
 *      (2) If part of the rectangle lies outside the pix, no border
 *          is included on any side.
 * 
*/ PIX * pixClipRectangleWithBorder(PIX *pixs, BOX *box, l_int32 maxbord, BOX **pboxn) { l_int32 w, h, bx, by, bw, bh, bord; BOX *box1; PIX *pix1; if (!pboxn) return (PIX *)ERROR_PTR("&boxn not defined", __func__, NULL); *pboxn = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!box) return (PIX *)ERROR_PTR("box not defined", __func__, NULL); /* Determine the border width */ pixGetDimensions(pixs, &w, &h, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); bord = L_MIN(bx, by); bord = L_MIN(bord, w - bx - bw); bord = L_MIN(bord, h - by - bh); bord = L_MIN(bord, maxbord); if (bord <= 0) { /* standard clipping */ pix1 = pixClipRectangle(pixs, box, NULL); pixGetDimensions(pix1, &w, &h, NULL); *pboxn = boxCreate(0, 0, w, h); return pix1; } /* There is a positive border */ box1 = boxAdjustSides(NULL, box, -bord, bord, -bord, bord); pix1 = pixClipRectangle(pixs, box1, NULL); boxDestroy(&box1); *pboxn = boxCreate(bord, bord, bw, bh); return pix1; } /*! * \brief pixClipMasked() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp; colormap ok * \param[in] pixm clipping mask, 1 bpp * \param[in] x, y origin of clipping mask relative to pixs * \param[in] outval val to use for pixels that are outside the mask * \return pixd, clipped pix or NULL on error or if pixm doesn't * intersect pixs * *
 * Notes:
 *      (1) If pixs has a colormap, it is preserved in pixd.
 *      (2) The depth of pixd is the same as that of pixs.
 *      (3) If the depth of pixs is 1, use %outval = 0 for white background
 *          and 1 for black; otherwise, use the max value for white
 *          and 0 for black.  If pixs has a colormap, the max value for
 *          %outval is 0xffffffff; otherwise, it is 2^d - 1.
 *      (4) When using 1 bpp pixs, this is a simple clip and
 *          blend operation.  For example, if both pix1 and pix2 are
 *          black text on white background, and you want to OR the
 *          fg on the two images, let pixm be the inverse of pix2.
 *          Then the operation takes all of pix1 that's in the bg of
 *          pix2, and for the remainder (which are the pixels
 *          corresponding to the fg of the pix2), paint them black
 *          (1) in pix1.  The function call looks like
 *             pixClipMasked(pix2, pixInvert(pix1, pix1), x, y, 1);
 * 
*/ PIX * pixClipMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_uint32 outval) { l_int32 wm, hm, index, rval, gval, bval; l_uint32 pixel; BOX *box; PIX *pixmi, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, NULL); /* Clip out the region specified by pixm and (x,y) */ pixGetDimensions(pixm, &wm, &hm, NULL); box = boxCreate(x, y, wm, hm); pixd = pixClipRectangle(pixs, box, NULL); /* Paint 'outval' (or something close to it if cmapped) through * the pixels not masked by pixm */ cmap = pixGetColormap(pixd); pixmi = pixInvert(NULL, pixm); if (cmap) { extractRGBValues(outval, &rval, &gval, &bval); pixcmapGetNearestIndex(cmap, rval, gval, bval, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &pixel); pixPaintThroughMask(pixd, pixmi, 0, 0, pixel); } else { pixPaintThroughMask(pixd, pixmi, 0, 0, outval); } boxDestroy(&box); pixDestroy(&pixmi); return pixd; } /*! * \brief pixCropToMatch() * * \param[in] pixs1 any depth, colormap OK * \param[in] pixs2 any depth, colormap OK * \param[out] ppixd1 may be a clone * \param[out] ppixd2 may be a clone * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This resizes pixs1 and/or pixs2 by cropping at the right
 *          and bottom, so that they're the same size.
 *      (2) If a pix doesn't need to be cropped, a clone is returned.
 *      (3) Note: the images are implicitly aligned to the UL corner.
 * 
*/ l_ok pixCropToMatch(PIX *pixs1, PIX *pixs2, PIX **ppixd1, PIX **ppixd2) { l_int32 w1, h1, w2, h2, w, h; if (!ppixd1 || !ppixd2) return ERROR_INT("&pixd1 and &pixd2 not both defined", __func__, 1); *ppixd1 = *ppixd2 = NULL; if (!pixs1 || !pixs2) return ERROR_INT("pixs1 and pixs2 not defined", __func__, 1); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w1, w2); h = L_MIN(h1, h2); *ppixd1 = pixCropToSize(pixs1, w, h); *ppixd2 = pixCropToSize(pixs2, w, h); if (*ppixd1 == NULL || *ppixd2 == NULL) return ERROR_INT("cropped image failure", __func__, 1); return 0; } /*! * \brief pixCropToSize() * * \param[in] pixs any depth, colormap OK * \param[in] w, h max dimensions of cropped image * \return pixd cropped if necessary or NULL on error. * *
 * Notes:
 *      (1) If either w or h is smaller than the corresponding dimension
 *          of pixs, this returns a cropped image; otherwise it returns
 *          a clone of pixs.
 * 
*/ PIX * pixCropToSize(PIX *pixs, l_int32 w, l_int32 h) { l_int32 ws, hs, wd, hd, d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (ws <= w && hs <= h) /* no cropping necessary */ return pixClone(pixs); wd = L_MIN(ws, w); hd = L_MIN(hs, h); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, 0, 0); return pixd; } /*! * \brief pixResizeToMatch() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp; colormap ok * \param[in] pixt can be null; we use only the size * \param[in] w, h ignored if pixt is defined * \return pixd resized to match or NULL on error * *
 * Notes:
 *      (1) This resizes pixs to make pixd, without scaling, by either
 *          cropping or extending separately in both width and height.
 *          Extension is done by replicating the last row or column.
 *          This is useful in a situation where, due to scaling
 *          operations, two images that are expected to be the
 *          same size can differ slightly in each dimension.
 *      (2) You can use either an existing pixt or specify
 *          both %w and %h.  If pixt is defined, the values
 *          in %w and %h are ignored.
 *      (3) If pixt is larger than pixs (or if w and/or d is larger
 *          than the dimension of pixs, replicate the outer row and
 *          column of pixels in pixs into pixd.
 * 
*/ PIX * pixResizeToMatch(PIX *pixs, PIX *pixt, l_int32 w, l_int32 h) { l_int32 i, j, ws, hs, d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!pixt && (w <= 0 || h <= 0)) return (PIX *)ERROR_PTR("both w and h not > 0", __func__, NULL); if (pixt) /* redefine w, h */ pixGetDimensions(pixt, &w, &h, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (ws == w && hs == h) return pixCopy(NULL, pixs); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixRasterop(pixd, 0, 0, ws, hs, PIX_SRC, pixs, 0, 0); if (ws >= w && hs >= h) return pixd; /* Replicate the last column and then the last row */ if (ws < w) { for (j = ws; j < w; j++) pixRasterop(pixd, j, 0, 1, h, PIX_SRC, pixd, ws - 1, 0); } if (hs < h) { for (i = hs; i < h; i++) pixRasterop(pixd, 0, i, w, 1, PIX_SRC, pixd, 0, hs - 1); } return pixd; } /*---------------------------------------------------------------------* * Select a connected component by size * *---------------------------------------------------------------------*/ /*! * \brief pixSelectComponentBySize() * * \param[in] pixs 1 bpp * \param[in] rankorder in decreasing size: 0 for largest. * \param[in] type L_SELECT_BY_WIDTH, L_SELECT_BY_HEIGHT, * L_SELECT_BY_MAX_DIMENSION, * L_SELECT_BY_AREA, L_SELECT_BY_PERIMETER * \param[in] connectivity 4 or 8 * \param[out] pbox [optional] location of returned component * \return pix of rank order connected component, or NULL on error. * *
 * Notes:
 *      (1) This selects the Nth largest connected component, based on
 *          the selection type and connectivity.
 *      (2) Note that %rankorder is an integer.  Use %rankorder = 0 for
 *          the largest component and %rankorder = -1 for the smallest.
 *          If %rankorder >= number of components, select the smallest.
 */
PIX *
pixSelectComponentBySize(PIX     *pixs,
                         l_int32  rankorder,
                         l_int32  type,
                         l_int32  connectivity,
                         BOX    **pbox)
{
l_int32  n, empty, sorttype, index;
BOXA    *boxa1;
NUMA    *naindex;
PIX     *pixd;
PIXA    *pixa1, *pixa2;

    if (pbox) *pbox = NULL;
    if (!pixs || pixGetDepth(pixs) != 1)
        return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL);
    if (type == L_SELECT_BY_WIDTH)
        sorttype = L_SORT_BY_WIDTH;
    else if (type == L_SELECT_BY_HEIGHT)
        sorttype = L_SORT_BY_HEIGHT;
    else if (type == L_SELECT_BY_MAX_DIMENSION)
        sorttype = L_SORT_BY_MAX_DIMENSION;
    else if (type == L_SELECT_BY_AREA)
        sorttype = L_SORT_BY_AREA;
    else if (type == L_SELECT_BY_PERIMETER)
        sorttype = L_SORT_BY_PERIMETER;
    else
        return (PIX *)ERROR_PTR("invalid selection type", __func__, NULL);
    if (connectivity != 4 && connectivity != 8)
        return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL);
    pixZero(pixs, &empty);
    if (empty)
        return (PIX *)ERROR_PTR("no foreground pixels", __func__, NULL);

    boxa1 = pixConnComp(pixs, &pixa1, connectivity);
    n = boxaGetCount(boxa1);
    if (rankorder < 0 || rankorder >= n)
        rankorder = n - 1;  /* smallest */
    pixa2 = pixaSort(pixa1, sorttype, L_SORT_DECREASING, &naindex, L_CLONE);
    pixd = pixaGetPix(pixa2, rankorder, L_COPY);
    if (pbox) {
        numaGetIValue(naindex, rankorder, &index);
        *pbox = boxaGetBox(boxa1, index, L_COPY);
    }

    numaDestroy(&naindex);
    boxaDestroy(&boxa1);
    pixaDestroy(&pixa1);
    pixaDestroy(&pixa2);
    return pixd;
}


/*!
 * \brief   pixFilterComponentBySize()
 *
 * \param[in]    pixs          1 bpp
 * \param[in]    rankorder     in decreasing size: 0 for largest.
 * \param[in]    type          L_SELECT_BY_WIDTH, L_SELECT_BY_HEIGHT,
 *                             L_SELECT_BY_MAX_DIMENSION,
 *                             L_SELECT_BY_AREA, L_SELECT_BY_PERIMETER
 * \param[in]    connectivity  4 or 8
 * \param[out]   pbox          [optional] location of returned component
 * \return  pix with all other components removed, or NULL on error.
 *
 * 
 * Notes:
 *      (1) See notes in pixSelectComponentBySize().
 *      (2) This returns a copy of %pixs, with all components removed
 *          except for the selected one.
 */
PIX *
pixFilterComponentBySize(PIX     *pixs,
                         l_int32  rankorder,
                         l_int32  type,
                         l_int32  connectivity,
                         BOX    **pbox)
{
l_int32  x, y, w, h;
BOX     *box;
PIX     *pix1, *pix2;

    if (!pixs || pixGetDepth(pixs) != 1)
        return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL);

    pix1 = pixSelectComponentBySize(pixs, rankorder, type, connectivity, &box);
    if (!pix1) {
        boxDestroy(&box);
        return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL);
    }

        /* Put the selected component in a new pix at the same
         * location as it had in %pixs */
    boxGetGeometry(box, &x, &y, &w, &h);
    pix2 = pixCreateTemplate(pixs);
    pixRasterop(pix2, x, y, w, h, PIX_SRC, pix1, 0, 0);
    if (pbox)
        *pbox = box;
    else
        boxDestroy(&box);
    pixDestroy(&pix1);
    return pix2;
}


/*---------------------------------------------------------------------*
 *                         Make special masks                          *
 *---------------------------------------------------------------------*/
/*!
 * \brief   pixMakeSymmetricMask()
 *
 * \param[in]    w, h    dimensions of output 1 bpp pix
 * \param[in]    hf      horizontal fraction of half-width
 * \param[in]    vf      vertical fraction of half-height
 * \param[in]    type    L_USE_INNER, L_USE_OUTER
 * \return  pixd 1 bpp, or NULL on error.
 *
 * 
 * Notes:
 *      (1) This is a convenience function for generating masks with
 *          horizontal and vertical reflection symmetry, over either
 *          the inner or outer parts of an image.
 *      (2) Using L_USE_INNER to generate a mask over the inner part
 *          of the image, the mask is a solid rectangle, and the fractions
 *          describe the distance between the boundary of the image and
 *          the rectangle boundary.  For example, with hf == vf == 0.0,
 *          the mask covers the full image.
 *      (3) Using L_USE_OUTER to generate a mask over an outer frame
 *          of the image, the mask touches the boundary of the image,
 *          and the fractions describe the location of the inner
 *          boundary of the frame.  For example, with hf == vf == 1.0,
 *          the inner boundary is at the center of the image, so the
 *          mask covers the full image.
 *      (4) More examples:
 *           * mask covering the inner 70%: hf = vf = 0.3, type = L_USE_INNER
 *           * frame covering the outer 30%: hf = vf = 0.3, type = L_USE_OUTER
 * 
*/ PIX * pixMakeSymmetricMask(l_int32 w, l_int32 h, l_float32 hf, l_float32 vf, l_int32 type) { if (w <= 0 || h <= 0) return (PIX *)ERROR_PTR("mask size 0", __func__, NULL); if (hf < 0.0 || hf > 1.0) return (PIX *)ERROR_PTR("invalid horiz fractions", __func__, NULL); if (vf < 0.0 || vf > 1.0) return (PIX *)ERROR_PTR("invalid vert fractions", __func__, NULL); if (type == L_USE_INNER) return pixMakeFrameMask(w, h, hf, 1.0, vf, 1.0); else if (type == L_USE_OUTER) return pixMakeFrameMask(w, h, 0.0, hf, 0.0, vf); else return (PIX *)ERROR_PTR("invalid type", __func__, NULL); } /*! * \brief pixMakeFrameMask() * * \param[in] w, h dimensions of output 1 bpp pix * \param[in] hf1 horizontal fraction of half-width at outer frame bdry * \param[in] hf2 horizontal fraction of half-width at inner frame bdry * \param[in] vf1 vertical fraction of half-width at outer frame bdry * \param[in] vf2 vertical fraction of half-width at inner frame bdry * \return pixd 1 bpp, or NULL on error. * *
 * Notes:
 *      (1) This makes an arbitrary 1-component mask with a centered fg
 *          frame, which can have both an inner and an outer boundary.
 *          All input fractional distances are measured from the image
 *          border to the frame boundary, in units of the image half-width
 *          for hf1 and hf2 and the image half-height for vf1 and vf2.
 *          The distances to the outer frame boundary are given by hf1
 *          and vf1; to the inner frame boundary, by hf2 and vf2.
 *          Input fractions are thus in [0.0 ... 1.0], with hf1 <= hf2
 *          and vf1 <= vf2.  Horizontal and vertical frame widths are
 *          thus independently specified.
 *      (2) Special cases:
 *           * full fg mask: hf1 = vf1 = 0.0, hf2 = vf2 = 1.0.
 *           * empty fg (zero width) mask: set  hf1 = hf2  and vf1 = vf2.
 *           * fg rectangle with no hole: set hf2 = vf2 = 1.0.
 *           * frame touching outer boundary: set hf1 = vf1 = 0.0.
 *      (3) The vertical thickness of the horizontal mask parts
 *          is 0.5 * (vf2 - vf1) * h.  The horizontal thickness of the
 *          vertical mask parts is 0.5 * (hf2 - hf1) * w.
 * 
*/ PIX * pixMakeFrameMask(l_int32 w, l_int32 h, l_float32 hf1, l_float32 hf2, l_float32 vf1, l_float32 vf2) { l_int32 h1, h2, v1, v2; PIX *pixd; if (w <= 0 || h <= 0) return (PIX *)ERROR_PTR("mask size 0", __func__, NULL); if (hf1 < 0.0 || hf1 > 1.0 || hf2 < 0.0 || hf2 > 1.0) return (PIX *)ERROR_PTR("invalid horiz fractions", __func__, NULL); if (vf1 < 0.0 || vf1 > 1.0 || vf2 < 0.0 || vf2 > 1.0) return (PIX *)ERROR_PTR("invalid vert fractions", __func__, NULL); if (hf1 > hf2 || vf1 > vf2) return (PIX *)ERROR_PTR("invalid relative sizes", __func__, NULL); pixd = pixCreate(w, h, 1); /* Special cases */ if (hf1 == 0.0 && vf1 == 0.0 && hf2 == 1.0 && vf2 == 1.0) { /* full */ pixSetAll(pixd); return pixd; } if (hf1 == hf2 && vf1 == vf2) { /* empty */ return pixd; } /* General case */ h1 = 0.5f * hf1 * w; h2 = 0.5f * hf2 * w; v1 = 0.5f * vf1 * h; v2 = 0.5f * vf2 * h; pixRasterop(pixd, h1, v1, w - 2 * h1, h - 2 * v1, PIX_SET, NULL, 0, 0); if (hf2 < 1.0 && vf2 < 1.0) pixRasterop(pixd, h2, v2, w - 2 * h2, h - 2 * v2, PIX_CLR, NULL, 0, 0); return pixd; } /*---------------------------------------------------------------------* * Generate a covering of rectangles over connected components * *---------------------------------------------------------------------*/ /*! * \brief pixMakeCoveringOfRectangles() * * \param[in] pixs 1 bpp * \param[in] maxiters max iterations: use 0 to iterate to completion * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This iteratively finds the bounding boxes of the connected
 *          components and generates a mask from them.  Two iterations
 *          should suffice for most situations.
 *      (2) Returns an empty pix if %pixs is empty.
 *      (3) If there are many small components in proximity, it may
 *          be useful to merge them with a morphological closing before
 *          calling this one.
 * 
*/ PIX * pixMakeCoveringOfRectangles(PIX *pixs, l_int32 maxiters) { l_int32 empty, same, niters; BOXA *boxa; PIX *pix1, *pix2; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (maxiters < 0) return (PIX *)ERROR_PTR("maxiters must be >= 0", __func__, NULL); if (maxiters == 0) maxiters = 50; /* ridiculously large number */ pixZero(pixs, &empty); pix1 = pixCreateTemplate(pixs); if (empty) return pix1; /* Do first iteration */ boxa = pixConnCompBB(pixs, 8); pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); boxaDestroy(&boxa); if (maxiters == 1) return pix1; niters = 1; while (niters < maxiters) { /* continue to add pixels to pix1 */ niters++; boxa = pixConnCompBB(pix1, 8); pix2 = pixCopy(NULL, pix1); pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); boxaDestroy(&boxa); pixEqual(pix1, pix2, &same); pixDestroy(&pix2); if (same) { L_INFO("%d iterations\n", __func__, niters - 1); return pix1; } } L_INFO("maxiters = %d reached\n", __func__, niters); return pix1; } /*---------------------------------------------------------------------* * Fraction of Fg pixels under a mask * *---------------------------------------------------------------------*/ /*! * \brief pixFractionFgInMask() * * \param[in] pix1 1 bpp * \param[in] pix2 1 bpp * \param[out] pfract fraction of fg pixels in 1 that are * aligned with the fg of 2 * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This gives the fraction of fg pixels in pix1 that are in
 *          the intersection (i.e., under the fg) of pix2:
 *          |1 & 2|/|1|, where |...| means the number of fg pixels.
 *          Note that this is different from the situation where
 *          pix1 and pix2 are reversed.
 *      (2) Both pix1 and pix2 are registered to the UL corners.  A warning
 *          is issued if pix1 and pix2 have different sizes.
 *      (3) This can also be used to find the fraction of fg pixels in pix1
 *          that are NOT under the fg of pix2: 1.0 - |1 & 2|/|1|
 *      (4) If pix1 or pix2 are empty, this returns %fract = 0.0.
 *      (5) For example, pix2 could be a frame around the outside of the
 *          image, made from pixMakeFrameMask().
 * 
*/ l_ok pixFractionFgInMask(PIX *pix1, PIX *pix2, l_float32 *pfract) { l_int32 w1, h1, w2, h2, empty, count1, count3; PIX *pix3; if (!pfract) return ERROR_INT("&fract not defined", __func__, 1); *pfract = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", __func__, 1); pixGetDimensions(pix1, &w1, &h1, NULL); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 != w2 || h1 != h2) { L_INFO("sizes unequal: (w1,w2) = (%d,%d), (h1,h2) = (%d,%d)\n", __func__, w1, w2, h1, h2); } pixZero(pix1, &empty); if (empty) return 0; pixZero(pix2, &empty); if (empty) return 0; pix3 = pixCopy(NULL, pix1); pixAnd(pix3, pix3, pix2); pixCountPixels(pix1, &count1, NULL); /* |1| */ pixCountPixels(pix3, &count3, NULL); /* |1 & 2| */ *pfract = (l_float32)count3 / (l_float32)count1; pixDestroy(&pix3); return 0; } /*---------------------------------------------------------------------* * Clip to Foreground * *---------------------------------------------------------------------*/ /*! * \brief pixClipToForeground() * * \param[in] pixs 1 bpp * \param[out] ppixd [optional] clipped pix returned * \param[out] pbox [optional] bounding box * \return 0 if OK; 1 on error or if there are no fg pixels * *
 * Notes:
 *      (1) At least one of {&pixd, &box} must be specified.
 *      (2) If there are no fg pixels, the returned ptrs are null.
 * 
*/ l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox) { l_int32 w, h, wpl, nfullwords, extra, i, j; l_int32 minx, miny, maxx, maxy; l_uint32 result, mask; l_uint32 *data, *line; BOX *box; if (ppixd) *ppixd = NULL; if (pbox) *pbox = NULL; if (!ppixd && !pbox) return ERROR_INT("no output requested", __func__, 1); if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); nfullwords = w / 32; extra = w & 31; mask = ~rmask32[32 - extra]; wpl = pixGetWpl(pixs); data = pixGetData(pixs); result = 0; for (i = 0, miny = 0; i < h; i++, miny++) { line = data + i * wpl; for (j = 0; j < nfullwords; j++) result |= line[j]; if (extra) result |= (line[j] & mask); if (result) break; } if (miny == h) /* no ON pixels */ return 1; result = 0; for (i = h - 1, maxy = h - 1; i >= 0; i--, maxy--) { line = data + i * wpl; for (j = 0; j < nfullwords; j++) result |= line[j]; if (extra) result |= (line[j] & mask); if (result) break; } minx = 0; for (j = 0, minx = 0; j < w; j++, minx++) { for (i = 0; i < h; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) goto minx_found; } } minx_found: for (j = w - 1, maxx = w - 1; j >= 0; j--, maxx--) { for (i = 0; i < h; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) goto maxx_found; } } maxx_found: box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, box, NULL); if (pbox) *pbox = box; else boxDestroy(&box); return 0; } /*! * \brief pixTestClipToForeground() * * \param[in] pixs 1 bpp * \param[out] pcanclip 1 if fg does not extend to all four edges * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is a lightweight test to determine if a 1 bpp image
 *          can be further cropped without loss of fg pixels.
 *          If it cannot, canclip is set to 0.
 *      (2) It does not test for the existence of any fg pixels.
 *          If there are no fg pixels, it will return %canclip = 1.
 *          Check the output of the subsequent call to pixClipToForeground().
 * 
*/ l_ok pixTestClipToForeground(PIX *pixs, l_int32 *pcanclip) { l_int32 i, j, w, h, wpl, found; l_uint32 *data, *line; if (!pcanclip) return ERROR_INT("&canclip not defined", __func__, 1); *pcanclip = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); /* Check top and bottom raster lines */ pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); found = FALSE; for (j = 0; found == FALSE && j < w; j++) found = GET_DATA_BIT(data, j); if (!found) { *pcanclip = 1; return 0; } line = data + (h - 1) * wpl; found = FALSE; for (j = 0; found == FALSE && j < w; j++) found = GET_DATA_BIT(data, j); if (!found) { *pcanclip = 1; return 0; } /* Check left and right edges */ found = FALSE; for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) found = GET_DATA_BIT(line, 0); if (!found) { *pcanclip = 1; return 0; } found = FALSE; for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) found = GET_DATA_BIT(line, w - 1); if (!found) *pcanclip = 1; return 0; /* fg pixels found on all edges */ } /*! * \brief pixClipBoxToForeground() * * \param[in] pixs 1 bpp * \param[in] boxs [optional] use full image if null * \param[out] ppixd [optional] clipped pix returned * \param[out] pboxd [optional] bounding box * \return 0 if OK; 1 on error or if there are no fg pixels * *
 * Notes:
 *      (1) At least one of {&pixd, &boxd} must be specified.
 *      (2) If there are no fg pixels, the returned ptrs are null.
 *      (3) Do not use &pixs for the 3rd arg or &boxs for the 4th arg;
 *          this will leak memory.
 * 
*/ l_ok pixClipBoxToForeground(PIX *pixs, BOX *boxs, PIX **ppixd, BOX **pboxd) { l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; BOX *boxt, *boxd; if (ppixd) *ppixd = NULL; if (pboxd) *pboxd = NULL; if (!ppixd && !pboxd) return ERROR_INT("no output requested", __func__, 1); if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!boxs) return pixClipToForeground(pixs, ppixd, pboxd); pixGetDimensions(pixs, &w, &h, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); cbw = L_MIN(bw, w - bx); cbh = L_MIN(bh, h - by); if (cbw < 0 || cbh < 0) return ERROR_INT("box not within image", __func__, 1); boxt = boxCreate(bx, by, cbw, cbh); if (pixScanForForeground(pixs, boxt, L_FROM_LEFT, &left)) { boxDestroy(&boxt); return 1; } pixScanForForeground(pixs, boxt, L_FROM_RIGHT, &right); pixScanForForeground(pixs, boxt, L_FROM_TOP, &top); pixScanForForeground(pixs, boxt, L_FROM_BOT, &bottom); boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, boxd, NULL); if (pboxd) *pboxd = boxd; else boxDestroy(&boxd); boxDestroy(&boxt); return 0; } /*! * \brief pixScanForForeground() * * \param[in] pixs 1 bpp * \param[in] box [optional] within which the search is conducted * \param[in] scanflag direction of scan; e.g., L_FROM_LEFT * \param[out] ploc location in scan direction of first black pixel * \return 0 if OK; 1 on error or if no fg pixels are found * *
 * Notes:
 *      (1) If there are no fg pixels, the position is set to 0.
 *          Caller must check the return value!
 *      (2) Use %box == NULL to scan from edge of pixs
 * 
*/ l_ok pixScanForForeground(PIX *pixs, BOX *box, l_int32 scanflag, l_int32 *ploc) { l_int32 bx, by, bw, bh, x, xstart, xend, y, ystart, yend, wpl; l_uint32 *data, *line; BOX *boxt; if (!ploc) return ERROR_INT("&loc not defined", __func__, 1); *ploc = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); /* Clip box to pixs if it exists */ pixGetDimensions(pixs, &bw, &bh, NULL); if (box) { if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) return ERROR_INT("invalid box", __func__, 1); boxGetGeometry(boxt, &bx, &by, &bw, &bh); boxDestroy(&boxt); } else { bx = by = 0; } xstart = bx; ystart = by; xend = bx + bw - 1; yend = by + bh - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (scanflag == L_FROM_LEFT) { for (x = xstart; x <= xend; x++) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) { *ploc = x; return 0; } } } } else if (scanflag == L_FROM_RIGHT) { for (x = xend; x >= xstart; x--) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) { *ploc = x; return 0; } } } } else if (scanflag == L_FROM_TOP) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { if (GET_DATA_BIT(line, x)) { *ploc = y; return 0; } } } } else if (scanflag == L_FROM_BOT) { for (y = yend; y >= ystart; y--) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { if (GET_DATA_BIT(line, x)) { *ploc = y; return 0; } } } } else { return ERROR_INT("invalid scanflag", __func__, 1); } return 1; /* no fg found */ } /*! * \brief pixClipBoxToEdges() * * \param[in] pixs 1 bpp * \param[in] boxs [optional] ; use full image if null * \param[in] lowthresh threshold to choose clipping location * \param[in] highthresh threshold required to find an edge * \param[in] maxwidth max allowed width between low and high thresh locs * \param[in] factor sampling factor along pixel counting direction * \param[out] ppixd [optional] clipped pix returned * \param[out] pboxd [optional] bounding box * \return 0 if OK; 1 on error or if a fg edge is not found from * all four sides. * *
 * Notes:
 *      (1) At least one of {&pixd, &boxd} must be specified.
 *      (2) If there are no fg pixels, the returned ptrs are null.
 *      (3) This function attempts to locate rectangular "image" regions
 *          of high-density fg pixels, that have well-defined edges
 *          on the four sides.
 *      (4) Edges are searched for on each side, iterating in order
 *          from left, right, top and bottom.  As each new edge is
 *          found, the search box is resized to use that location.
 *          Once an edge is found, it is held.  If no more edges
 *          are found in one iteration, the search fails.
 *      (5) See pixScanForEdge() for usage of the thresholds and %maxwidth.
 *      (6) The thresholds must be at least 1, and the low threshold
 *          cannot be larger than the high threshold.
 *      (7) If the low and high thresholds are both 1, this is equivalent
 *          to pixClipBoxToForeground().
 * 
*/ l_ok pixClipBoxToEdges(PIX *pixs, BOX *boxs, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, PIX **ppixd, BOX **pboxd) { l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; l_int32 lfound, rfound, tfound, bfound, change; BOX *boxt, *boxd; if (ppixd) *ppixd = NULL; if (pboxd) *pboxd = NULL; if (!ppixd && !pboxd) return ERROR_INT("no output requested", __func__, 1); if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (lowthresh < 1 || highthresh < 1 || lowthresh > highthresh || maxwidth < 1) return ERROR_INT("invalid thresholds", __func__, 1); factor = L_MIN(1, factor); if (lowthresh == 1 && highthresh == 1) return pixClipBoxToForeground(pixs, boxs, ppixd, pboxd); pixGetDimensions(pixs, &w, &h, NULL); if (boxs) { boxGetGeometry(boxs, &bx, &by, &bw, &bh); cbw = L_MIN(bw, w - bx); cbh = L_MIN(bh, h - by); if (cbw < 0 || cbh < 0) return ERROR_INT("box not within image", __func__, 1); boxt = boxCreate(bx, by, cbw, cbh); } else { boxt = boxCreate(0, 0, w, h); } lfound = rfound = tfound = bfound = 0; while (!lfound || !rfound || !tfound || !bfound) { change = 0; if (!lfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_LEFT, &left)) { lfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, left, L_FROM_LEFT); } } if (!rfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_RIGHT, &right)) { rfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, right, L_FROM_RIGHT); } } if (!tfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_TOP, &top)) { tfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, top, L_FROM_TOP); } } if (!bfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_BOT, &bottom)) { bfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, bottom, L_FROM_BOT); } } #if DEBUG_EDGES lept_stderr("iter: %d %d %d %d\n", lfound, rfound, tfound, bfound); #endif /* DEBUG_EDGES */ if (change == 0) break; } boxDestroy(&boxt); if (change == 0) return ERROR_INT("not all edges found", __func__, 1); boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, boxd, NULL); if (pboxd) *pboxd = boxd; else boxDestroy(&boxd); return 0; } /*! * \brief pixScanForEdge() * * \param[in] pixs 1 bpp * \param[in] box [optional] within which the search is conducted * \param[in] lowthresh threshold to choose clipping location * \param[in] highthresh threshold required to find an edge * \param[in] maxwidth max allowed width between low and high thresh locs * \param[in] factor sampling factor along pixel counting direction * \param[in] scanflag direction of scan; e.g., L_FROM_LEFT * \param[out] ploc location in scan direction of first black pixel * \return 0 if OK; 1 on error or if the edge is not found * *
 * Notes:
 *      (1) If there are no fg pixels, the position is set to 0.
 *          Caller must check the return value!
 *      (2) Use %box == NULL to scan from edge of pixs
 *      (3) As the scan progresses, the location where the sum of
 *          pixels equals or excees %lowthresh is noted (loc).  The
 *          scan is stopped when the sum of pixels equals or exceeds
 *          %highthresh.  If the scan distance between loc and that
 *          point does not exceed %maxwidth, an edge is found and
 *          its position is taken to be loc.  %maxwidth implicitly
 *          sets a minimum on the required gradient of the edge.
 *      (4) The thresholds must be at least 1, and the low threshold
 *          cannot be larger than the high threshold.
 * 
*/ l_ok pixScanForEdge(PIX *pixs, BOX *box, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, l_int32 scanflag, l_int32 *ploc) { l_int32 bx, by, bw, bh, foundmin, loc, sum, wpl; l_int32 x, xstart, xend, y, ystart, yend; l_uint32 *data, *line; BOX *boxt; if (!ploc) return ERROR_INT("&ploc not defined", __func__, 1); *ploc = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (lowthresh < 1 || highthresh < 1 || lowthresh > highthresh || maxwidth < 1) return ERROR_INT("invalid thresholds", __func__, 1); factor = L_MIN(1, factor); /* Clip box to pixs if it exists */ pixGetDimensions(pixs, &bw, &bh, NULL); if (box) { if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) return ERROR_INT("invalid box", __func__, 1); boxGetGeometry(boxt, &bx, &by, &bw, &bh); boxDestroy(&boxt); } else { bx = by = 0; } xstart = bx; ystart = by; xend = bx + bw - 1; yend = by + bh - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); foundmin = 0; if (scanflag == L_FROM_LEFT) { for (x = xstart; x <= xend; x++) { sum = 0; for (y = ystart; y <= yend; y += factor) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { /* save the loc of the beginning of the edge */ foundmin = 1; loc = x; } if (sum >= highthresh) { #if DEBUG_EDGES lept_stderr("Left: x = %d, loc = %d\n", x, loc); #endif /* DEBUG_EDGES */ if (x - loc < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_RIGHT) { for (x = xend; x >= xstart; x--) { sum = 0; for (y = ystart; y <= yend; y += factor) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = x; } if (sum >= highthresh) { #if DEBUG_EDGES lept_stderr("Right: x = %d, loc = %d\n", x, loc); #endif /* DEBUG_EDGES */ if (loc - x < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_TOP) { for (y = ystart; y <= yend; y++) { sum = 0; line = data + y * wpl; for (x = xstart; x <= xend; x += factor) { if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = y; } if (sum >= highthresh) { #if DEBUG_EDGES lept_stderr("Top: y = %d, loc = %d\n", y, loc); #endif /* DEBUG_EDGES */ if (y - loc < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_BOT) { for (y = yend; y >= ystart; y--) { sum = 0; line = data + y * wpl; for (x = xstart; x <= xend; x += factor) { if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = y; } if (sum >= highthresh) { #if DEBUG_EDGES lept_stderr("Bottom: y = %d, loc = %d\n", y, loc); #endif /* DEBUG_EDGES */ if (loc - y < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else { return ERROR_INT("invalid scanflag", __func__, 1); } return 1; /* edge not found */ } /*---------------------------------------------------------------------* * Extract pixel averages and reversals along lines * *---------------------------------------------------------------------*/ /*! * \brief pixExtractOnLine() * * \param[in] pixs 1 bpp or 8 bpp; no colormap * \param[in] x1, y1 one end point for line * \param[in] x2, y2 another end pt for line * \param[in] factor sampling; >= 1 * \return na of pixel values along line, or NULL on error. * *
 * Notes:
 *      (1) Input end points are clipped to the pix.
 *      (2) If the line is either horizontal, or closer to horizontal
 *          than to vertical, the points will be extracted from left
 *          to right in the pix.  Likewise, if the line is vertical,
 *          or closer to vertical than to horizontal, the points will
 *          be extracted from top to bottom.
 *      (3) Can be used with numaCountReverals(), for example, to
 *          characterize the intensity smoothness along a line.
 * 
*/ NUMA * pixExtractOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor) { l_int32 i, w, h, d, xmin, ymin, xmax, ymax, npts, direction; l_uint32 val; l_float32 x, y; l_float64 slope; NUMA *na; PTA *pta; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8) return (NUMA *)ERROR_PTR("d not 1 or 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs has a colormap", __func__, NULL); if (factor < 1) { L_WARNING("factor must be >= 1; setting to 1\n", __func__); factor = 1; } /* Clip line to the image */ x1 = L_MAX(0, L_MIN(x1, w - 1)); x2 = L_MAX(0, L_MIN(x2, w - 1)); y1 = L_MAX(0, L_MIN(y1, h - 1)); y2 = L_MAX(0, L_MIN(y2, h - 1)); if (x1 == x2 && y1 == y2) { pixGetPixel(pixs, x1, y1, &val); na = numaCreate(1); numaAddNumber(na, val); return na; } if (y1 == y2) direction = L_HORIZONTAL_LINE; else if (x1 == x2) direction = L_VERTICAL_LINE; else direction = L_OBLIQUE_LINE; na = numaCreate(0); if (direction == L_HORIZONTAL_LINE) { /* plot against x */ xmin = L_MIN(x1, x2); xmax = L_MAX(x1, x2); numaSetParameters(na, xmin, factor); for (i = xmin; i <= xmax; i += factor) { pixGetPixel(pixs, i, y1, &val); numaAddNumber(na, val); } } else if (direction == L_VERTICAL_LINE) { /* plot against y */ ymin = L_MIN(y1, y2); ymax = L_MAX(y1, y2); numaSetParameters(na, ymin, factor); for (i = ymin; i <= ymax; i += factor) { pixGetPixel(pixs, x1, i, &val); numaAddNumber(na, val); } } else { /* direction == L_OBLIQUE_LINE */ slope = (l_float64)((y2 - y1) / (x2 - x1)); if (L_ABS(slope) < 1.0) { /* quasi-horizontal */ xmin = L_MIN(x1, x2); xmax = L_MAX(x1, x2); ymin = (xmin == x1) ? y1 : y2; /* pt that goes with xmin */ ymax = (ymin == y1) ? y2 : y1; /* pt that goes with xmax */ pta = generatePtaLine(xmin, ymin, xmax, ymax); numaSetParameters(na, xmin, (l_float32)factor); } else { /* quasi-vertical */ ymin = L_MIN(y1, y2); ymax = L_MAX(y1, y2); xmin = (ymin == y1) ? x1 : x2; /* pt that goes with ymin */ xmax = (xmin == x1) ? x2 : x1; /* pt that goes with ymax */ pta = generatePtaLine(xmin, ymin, xmax, ymax); numaSetParameters(na, ymin, (l_float32)factor); } npts = ptaGetCount(pta); for (i = 0; i < npts; i += factor) { ptaGetPt(pta, i, &x, &y); pixGetPixel(pixs, (l_int32)x, (l_int32)y, &val); numaAddNumber(na, val); } #if 0 /* debugging */ pixPlotAlongPta(pixs, pta, GPLOT_PNG, NULL); #endif ptaDestroy(&pta); } return na; } /*! * \brief pixAverageOnLine() * * \param[in] pixs 1 bpp or 8 bpp; no colormap * \param[in] x1, y1 starting pt for line * \param[in] x2, y2 end pt for line * \param[in] factor sampling; >= 1 * \return average of pixel values along line, or NULL on error. * *
 * Notes:
 *      (1) The line must be either horizontal or vertical, so either
 *          y1 == y2 (horizontal) or x1 == x2 (vertical).
 *      (2) If horizontal, x1 must be <= x2.
 *          If vertical, y1 must be <= y2.
 *          characterize the intensity smoothness along a line.
 *      (3) Input end points are clipped to the pix.
 * 
*/ l_float32 pixAverageOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor) { l_int32 i, j, w, h, d, direction, count, wpl; l_uint32 *data, *line; l_float32 sum; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8) return ERROR_INT("d not 1 or 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs has a colormap", __func__, 1); if (x1 > x2 || y1 > y2) return ERROR_INT("x1 > x2 or y1 > y2", __func__, 1); if (y1 == y2) { x1 = L_MAX(0, x1); x2 = L_MIN(w - 1, x2); y1 = L_MAX(0, L_MIN(y1, h - 1)); direction = L_HORIZONTAL_LINE; } else if (x1 == x2) { y1 = L_MAX(0, y1); y2 = L_MIN(h - 1, y2); x1 = L_MAX(0, L_MIN(x1, w - 1)); direction = L_VERTICAL_LINE; } else { return ERROR_INT("line neither horiz nor vert", __func__, 1); } if (factor < 1) { L_WARNING("factor must be >= 1; setting to 1\n", __func__); factor = 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); sum = 0; count = 0; if (direction == L_HORIZONTAL_LINE) { line = data + y1 * wpl; for (j = x1, count = 0; j <= x2; count++, j += factor) { if (d == 1) sum += GET_DATA_BIT(line, j); else /* d == 8 */ sum += GET_DATA_BYTE(line, j); } } else if (direction == L_VERTICAL_LINE) { for (i = y1, count = 0; i <= y2; count++, i += factor) { line = data + i * wpl; if (d == 1) sum += GET_DATA_BIT(line, x1); else /* d == 8 */ sum += GET_DATA_BYTE(line, x1); } } return sum / (l_float32)count; } /*! * \brief pixAverageIntensityProfile() * * \param[in] pixs any depth; colormap OK * \param[in] fract fraction of image width or height to be used * \param[in] dir averaging direction: L_HORIZONTAL_LINE or * L_VERTICAL_LINE * \param[in] first, last span of rows or columns to measure * \param[in] factor1 sampling along fast scan direction; >= 1 * \param[in] factor2 sampling along slow scan direction; >= 1 * \return na of reversal profile, or NULL on error. * *
 * Notes:
 *      (1) If d != 1 bpp, colormaps are removed and the result
 *          is converted to 8 bpp.
 *      (2) If %dir == L_HORIZONTAL_LINE, the intensity is averaged
 *          along each horizontal raster line (sampled by %factor1),
 *          and the profile is the array of these averages in the
 *          vertical direction between %first and %last raster lines,
 *          and sampled by %factor2.
 *      (3) If %dir == L_VERTICAL_LINE, the intensity is averaged
 *          along each vertical line (sampled by %factor1),
 *          and the profile is the array of these averages in the
 *          horizontal direction between %first and %last columns,
 *          and sampled by %factor2.
 *      (4) The averages are measured over the central %fract of the image.
 *          Use %fract == 1.0 to average across the entire width or height.
 * 
*/ NUMA * pixAverageIntensityProfile(PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 factor1, l_int32 factor2) { l_int32 i, j, w, h, d, start, end; l_float32 ave; NUMA *nad; PIX *pixr, *pixg; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", __func__, NULL); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return (NUMA *)ERROR_PTR("invalid direction", __func__, NULL); if (first < 0) first = 0; if (last < first) return (NUMA *)ERROR_PTR("last must be >= first", __func__, NULL); if (factor1 < 1) { L_WARNING("factor1 must be >= 1; setting to 1\n", __func__); factor1 = 1; } if (factor2 < 1) { L_WARNING("factor2 must be >= 1; setting to 1\n", __func__); factor2 = 1; } /* Use 1 or 8 bpp, without colormap */ if (pixGetColormap(pixs)) pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixr = pixClone(pixs); pixGetDimensions(pixr, &w, &h, &d); if (d == 1) pixg = pixClone(pixr); else pixg = pixConvertTo8(pixr, 0); nad = numaCreate(0); /* output: samples in slow scan direction */ numaSetParameters(nad, 0, factor2); if (dir == L_HORIZONTAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); end = w - start; if (last > h - 1) { L_WARNING("last > h - 1; clipping\n", __func__); last = h - 1; } for (i = first; i <= last; i += factor2) { ave = pixAverageOnLine(pixg, start, i, end, i, factor1); numaAddNumber(nad, ave); } } else if (dir == L_VERTICAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); end = h - start; if (last > w - 1) { L_WARNING("last > w - 1; clipping\n", __func__); last = w - 1; } for (j = first; j <= last; j += factor2) { ave = pixAverageOnLine(pixg, j, start, j, end, factor1); numaAddNumber(nad, ave); } } pixDestroy(&pixr); pixDestroy(&pixg); return nad; } /*! * \brief pixReversalProfile() * * \param[in] pixs any depth; colormap OK * \param[in] fract fraction of image width or height to be used * \param[in] dir profile direction: L_HORIZONTAL_LINE or * L_VERTICAL_LINE * \param[in] first, last span of rows or columns to measure * \param[in] minreversal minimum change in intensity to trigger a reversal * \param[in] factor1 sampling along raster line (fast scan); >= 1 * \param[in] factor2 sampling of raster lines (slow scan); >= 1 * \return na of reversal profile, or NULL on error. * *
 * Notes:
 *      (1) If d != 1 bpp, colormaps are removed and the result
 *          is converted to 8 bpp.
 *      (2) If %dir == L_HORIZONTAL_LINE, the the reversals are counted
 *          along each horizontal raster line (sampled by %factor1),
 *          and the profile is the array of these sums in the
 *          vertical direction between %first and %last raster lines,
 *          and sampled by %factor2.
 *      (3) If %dir == L_VERTICAL_LINE, the the reversals are counted
 *          along each vertical column (sampled by %factor1),
 *          and the profile is the array of these sums in the
 *          horizontal direction between %first and %last columns,
 *          and sampled by %factor2.
 *      (4) For each row or column, the reversals are summed over the
 *          central %fract of the image.  Use %fract == 1.0 to sum
 *          across the entire width (of row) or height (of column).
 *      (5) %minreversal is the relative change in intensity that is
 *          required to resolve peaks and valleys.  A typical number for
 *          locating text in 8 bpp might be 50.  For 1 bpp, minreversal
 *          must be 1.
 *      (6) The reversal profile is simply the number of reversals
 *          in a row or column, vs the row or column index.
 * 
*/ NUMA * pixReversalProfile(PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 minreversal, l_int32 factor1, l_int32 factor2) { l_int32 i, j, w, h, d, start, end, nr; NUMA *naline, *nad; PIX *pixr, *pixg; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", __func__, NULL); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return (NUMA *)ERROR_PTR("invalid direction", __func__, NULL); if (first < 0) first = 0; if (last < first) return (NUMA *)ERROR_PTR("last must be >= first", __func__, NULL); if (factor1 < 1) { L_WARNING("factor1 must be >= 1; setting to 1\n", __func__); factor1 = 1; } if (factor2 < 1) { L_WARNING("factor2 must be >= 1; setting to 1\n", __func__); factor2 = 1; } /* Use 1 or 8 bpp, without colormap */ if (pixGetColormap(pixs)) pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixr = pixClone(pixs); pixGetDimensions(pixr, &w, &h, &d); if (d == 1) { pixg = pixClone(pixr); minreversal = 1; /* enforce this */ } else { pixg = pixConvertTo8(pixr, 0); } nad = numaCreate(0); /* output: samples in slow scan direction */ numaSetParameters(nad, 0, factor2); if (dir == L_HORIZONTAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); end = w - start; if (last > h - 1) { L_WARNING("last > h - 1; clipping\n", __func__); last = h - 1; } for (i = first; i <= last; i += factor2) { naline = pixExtractOnLine(pixg, start, i, end, i, factor1); numaCountReversals(naline, minreversal, &nr, NULL); numaAddNumber(nad, nr); numaDestroy(&naline); } } else if (dir == L_VERTICAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); end = h - start; if (last > w - 1) { L_WARNING("last > w - 1; clipping\n", __func__); last = w - 1; } for (j = first; j <= last; j += factor2) { naline = pixExtractOnLine(pixg, j, start, j, end, factor1); numaCountReversals(naline, minreversal, &nr, NULL); numaAddNumber(nad, nr); numaDestroy(&naline); } } pixDestroy(&pixr); pixDestroy(&pixg); return nad; } /*---------------------------------------------------------------------* * Extract windowed variance along a line * *---------------------------------------------------------------------*/ /*! * \brief pixWindowedVarianceOnLine() * * \param[in] pixs 8 bpp; no colormap * \param[in] dir L_HORIZONTAL_LINE or L_VERTICAL_LINE * \param[in] loc location of the constant coordinate for the line * \param[in] c1, c2 end point coordinates for the line * \param[in] size window size; must be > 1 * \param[out] pnad windowed square root of variance * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The returned variance array traverses the line starting
 *          from the smallest coordinate, min(c1,c2).
 *      (2) Line end points are clipped to pixs.
 *      (3) The reference point for the variance calculation is the center of
 *          the window.  Therefore, the numa start parameter from
 *          pixExtractOnLine() is incremented by %size/2,
 *          to align the variance values with the pixel coordinate.
 *      (4) The square root of the variance is the RMS deviation from the mean.
 * 
*/ l_ok pixWindowedVarianceOnLine(PIX *pixs, l_int32 dir, l_int32 loc, l_int32 c1, l_int32 c2, l_int32 size, NUMA **pnad) { l_int32 i, j, w, h, cmin, cmax, maxloc, n, x, y; l_uint32 val; l_float32 norm, rootvar; l_float32 *array; l_float64 sum1, sum2, ave, var; NUMA *na1, *nad; PTA *pta; if (!pnad) return ERROR_INT("&nad not defined", __func__, 1); *pnad = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8bpp", __func__, 1); if (size < 2) return ERROR_INT("window size must be > 1", __func__, 1); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return ERROR_INT("invalid direction", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); maxloc = (dir == L_HORIZONTAL_LINE) ? h - 1 : w - 1; if (loc < 0 || loc > maxloc) return ERROR_INT("invalid line position", __func__, 1); /* Clip line to the image */ cmin = L_MIN(c1, c2); cmax = L_MAX(c1, c2); maxloc = (dir == L_HORIZONTAL_LINE) ? w - 1 : h - 1; cmin = L_MAX(0, L_MIN(cmin, maxloc)); cmax = L_MAX(0, L_MIN(cmax, maxloc)); n = cmax - cmin + 1; /* Generate pta along the line */ pta = ptaCreate(n); if (dir == L_HORIZONTAL_LINE) { for (i = cmin; i <= cmax; i++) ptaAddPt(pta, i, loc); } else { /* vertical line */ for (i = cmin; i <= cmax; i++) ptaAddPt(pta, loc, i); } /* Get numa of pixel values on the line */ na1 = numaCreate(n); numaSetParameters(na1, cmin, 1); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); pixGetPixel(pixs, x, y, &val); numaAddNumber(na1, val); } array = numaGetFArray(na1, L_NOCOPY); ptaDestroy(&pta); /* Compute root variance on overlapping windows */ nad = numaCreate(n); *pnad = nad; numaSetParameters(nad, cmin + size / 2, 1); norm = 1.0f / (l_float32)size; for (i = 0; i < n - size; i++) { /* along the line */ sum1 = sum2 = 0; for (j = 0; j < size; j++) { /* over the window */ val = array[i + j]; sum1 += val; sum2 += (l_float64)(val) * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; if (var < 0) /* avoid small negative values from rounding effects */ var = 0.0; rootvar = (l_float32)sqrt(var); numaAddNumber(nad, rootvar); } numaDestroy(&na1); return 0; } /*---------------------------------------------------------------------* * Extract min/max of pixel values near lines * *---------------------------------------------------------------------*/ /*! * \brief pixMinMaxNearLine() * * \param[in] pixs 8 bpp; no colormap * \param[in] x1, y1 starting pt for line * \param[in] x2, y2 end pt for line * \param[in] dist distance to search from line in each direction * \param[in] direction L_SCAN_NEGATIVE, L_SCAN_POSITIVE, L_SCAN_BOTH * \param[out] pnamin [optional] minimum values * \param[out] pnamax [optional] maximum values * \param[out] pminave [optional] average of minimum values * \param[out] pmaxave [optional] average of maximum values * \return 0 if OK; 1 on error or if there are no sampled points * within the image. * *
 * Notes:
 *      (1) If the line is more horizontal than vertical, the values
 *          are computed for [x1, x2], and the pixels are taken
 *          below and/or above the local y-value.  Otherwise, the
 *          values are computed for [y1, y2] and the pixels are taken
 *          to the left and/or right of the local x value.
 *      (2) %direction specifies which side (or both sides) of the
 *          line are scanned for min and max values.
 *      (3) There are two ways to tell if the returned values of min
 *          and max averages are valid: the returned values cannot be
 *          negative and the function must return 0.
 *      (4) All accessed pixels are clipped to the pix.
 * 
*/ l_ok pixMinMaxNearLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 dist, l_int32 direction, NUMA **pnamin, NUMA **pnamax, l_float32 *pminave, l_float32 *pmaxave) { l_int32 i, j, w, h, d, x, y, n, dir, found, minval, maxval, negloc, posloc; l_uint32 val; l_float32 sum; NUMA *namin, *namax; PTA *pta; if (pnamin) *pnamin = NULL; if (pnamax) *pnamax = NULL; if (pminave) *pminave = UNDEF; if (pmaxave) *pmaxave = UNDEF; if (!pnamin && !pnamax && !pminave && !pmaxave) return ERROR_INT("no output requested", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs)) return ERROR_INT("pixs not 8 bpp or has colormap", __func__, 1); dist = L_ABS(dist); if (direction != L_SCAN_NEGATIVE && direction != L_SCAN_POSITIVE && direction != L_SCAN_BOTH) return ERROR_INT("invalid direction", __func__, 1); pta = generatePtaLine(x1, y1, x2, y2); n = ptaGetCount(pta); dir = (L_ABS(x1 - x2) == n - 1) ? L_HORIZ : L_VERT; namin = numaCreate(n); namax = numaCreate(n); negloc = -dist; posloc = dist; if (direction == L_SCAN_NEGATIVE) posloc = 0; else if (direction == L_SCAN_POSITIVE) negloc = 0; for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); minval = 255; maxval = 0; found = FALSE; if (dir == L_HORIZ) { if (x < 0 || x >= w) continue; for (j = negloc; j <= posloc; j++) { if (y + j < 0 || y + j >= h) continue; pixGetPixel(pixs, x, y + j, &val); found = TRUE; if (val < minval) minval = val; if (val > maxval) maxval = val; } } else { /* dir == L_VERT */ if (y < 0 || y >= h) continue; for (j = negloc; j <= posloc; j++) { if (x + j < 0 || x + j >= w) continue; pixGetPixel(pixs, x + j, y, &val); found = TRUE; if (val < minval) minval = val; if (val > maxval) maxval = val; } } if (found) { numaAddNumber(namin, minval); numaAddNumber(namax, maxval); } } n = numaGetCount(namin); if (n == 0) { numaDestroy(&namin); numaDestroy(&namax); ptaDestroy(&pta); return ERROR_INT("no output from this line", __func__, 1); } if (pminave) { numaGetSum(namin, &sum); *pminave = sum / n; } if (pmaxave) { numaGetSum(namax, &sum); *pmaxave = sum / n; } if (pnamin) *pnamin = namin; else numaDestroy(&namin); if (pnamax) *pnamax = namax; else numaDestroy(&namax); ptaDestroy(&pta); return 0; } /*---------------------------------------------------------------------* * Rank row and column transforms * *---------------------------------------------------------------------*/ /*! * \brief pixRankRowTransform() * * \param[in] pixs 8 bpp; no colormap * \return pixd with pixels sorted in each row, from * min to max value * *
 * Notes:
 *     (1) The time is O(n) in the number of pixels and runs about
 *         100 Mpixels/sec on a 3 GHz machine.
 * 
*/ PIX * pixRankRowTransform(PIX *pixs) { l_int32 i, j, k, m, w, h, wpl, val; l_int32 histo[256]; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has a colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { memset(histo, 0, 1024); lines = datas + i * wpl; lined = datad + i * wpl; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } for (m = 0, j = 0; m < 256; m++) { for (k = 0; k < histo[m]; k++, j++) SET_DATA_BYTE(lined, j, m); } } return pixd; } /*! * \brief pixRankColumnTransform() * * \param[in] pixs 8 bpp; no colormap * \return pixd with pixels sorted in each column, from * min to max value * *
 * Notes:
 *     (1) The time is O(n) in the number of pixels and runs about
 *         50 Mpixels/sec on a 3 GHz machine.
 * 
*/ PIX * pixRankColumnTransform(PIX *pixs) { l_int32 i, j, k, m, w, h, val; l_int32 histo[256]; void **lines8, **lined8; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has a colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateTemplate(pixs); lines8 = pixGetLinePtrs(pixs, NULL); lined8 = pixGetLinePtrs(pixd, NULL); for (j = 0; j < w; j++) { memset(histo, 0, 1024); for (i = 0; i < h; i++) { val = GET_DATA_BYTE(lines8[i], j); histo[val]++; } for (m = 0, i = 0; m < 256; m++) { for (k = 0; k < histo[m]; k++, i++) SET_DATA_BYTE(lined8[i], j, m); } } LEPT_FREE(lines8); LEPT_FREE(lined8); return pixd; } leptonica-1.86.0/src/pix_internal.h000066400000000000000000000477341506303110300172270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_PIX_INTERNAL_H #define LEPTONICA_PIX_INTERNAL_H /*! * \file pix_internal.h * *
 *  Valid image types in leptonica:
 *       Pix: 1 bpp, with and without colormap
 *       Pix: 2 bpp, with and without colormap
 *       Pix: 4 bpp, with and without colormap
 *       Pix: 8 bpp, with and without colormap
 *       Pix: 16 bpp (1 spp)
 *       Pix: 32 bpp (rgb, 3 spp)
 *       Pix: 32 bpp (rgba, 4 spp)
 *       FPix: 32 bpp float
 *       DPix: 64 bpp double
 *       Notes:
 *          (1) The only valid Pix image type with alpha is rgba.
 *              In particular, the alpha component is not used in
 *              cmapped images.
 *          (2) PixComp can hold any Pix with IFF_PNG encoding.
 *
 *  This file is internal: it is not part of the public interface.
 *  It contains the definitions of most of the image-related structs
 *  used in leptonica:
 *       struct Pix
 *       struct PixColormap
 *       struct RGBA_Quad
 *       struct Pixa
 *       struct Pixaa
 *       struct Box
 *       struct Boxa
 *       struct Boxaa
 *       struct Pta
 *       struct Ptaa
 *       struct Pixacc
 *       struct PixTiling
 *       struct FPix
 *       struct FPixa
 *       struct DPix
 *       struct PixComp
 *       struct PixaComp
 *
 *  This file can be #included after allheaders.h in source files that
 *  require direct access to the internal data fields in these structs.
 *
 *  Notes on the pixels in the raster image.  Most of this information
 *  can also be found in pix.h.
 *
 *       (1) The image data is stored in a single contiguous
 *           array of l_uint32, into which the pixels are packed.
 *           By "packed" we mean that there are no unused bits
 *           between pixels, except for end-of-line padding to
 *           satisfy item (2) below.
 *
 *       (2) Every image raster line begins on a 32-bit word
 *           boundary within this array.
 *
 *       (3) Pix image data is stored in 32-bit units, with the
 *           pixels ordered from left to right in the image being
 *           stored in order from the MSB to LSB within the word,
 *           for both big-endian and little-endian machines.
 *           This is the natural ordering for big-endian machines,
 *           as successive bytes are stored and fetched progressively
 *           to the right.  However, for little-endians, when storing
 *           we re-order the bytes from this byte stream order, and
 *           reshuffle again for byte access on 32-bit entities.
 *           So if the bytes come in sequence from left to right, we
 *           store them on little-endians in byte order:
 *                3 2 1 0 7 6 5 4 ...
 *           This MSB to LSB ordering allows left and right shift
 *           operations on 32 bit words to move the pixels properly.
 *
 *       (4) We use 32 bit pixels for both RGB and RGBA color images.
 *           The A (alpha) byte is ignored in most leptonica functions
 *           operating on color images.  Within each 4 byte pixel, the
 *           color samples are ordered from MSB to LSB, as follows:
 *
 *                |  MSB  |  2nd MSB  |  3rd MSB  |  LSB  |
 *                   red      green       blue      alpha
 *                    0         1           2         3   (big-endian)
 *                    3         2           1         0   (little-endian)
 *
 *           Because we use MSB to LSB ordering within the 32-bit word,
 *           the individual 8-bit samples can be accessed with
 *           GET_DATA_BYTE and SET_DATA_BYTE macros, using the
 *           (implicitly big-ending) ordering
 *                 red:    byte 0  (MSB)
 *                 green:  byte 1  (2nd MSB)
 *                 blue:   byte 2  (3rd MSB)
 *                 alpha:  byte 3  (LSB)
 *
 *           The specific color assignment is made in this file,
 *           through the definitions of COLOR_RED, etc.  Then the R, G
 *           B and A sample values can be retrieved using
 *                 redval = GET_DATA_BYTE(&pixel, COLOR_RED);
 *                 greenval = GET_DATA_BYTE(&pixel, COLOR_GREEN);
 *                 blueval = GET_DATA_BYTE(&pixel, COLOR_BLUE);
 *                 alphaval = GET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL);
 *           and they can be set with
 *                 SET_DATA_BYTE(&pixel, COLOR_RED, redval);
 *                 SET_DATA_BYTE(&pixel, COLOR_GREEN, greenval);
 *                 SET_DATA_BYTE(&pixel, COLOR_BLUE, blueval);
 *                 SET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL, alphaval);
 *
 *           More efficiently, these components can be extracted directly
 *           by shifting and masking, explicitly using the values in
 *           L_RED_SHIFT, etc.:
 *                 (pixel32 >> L_RED_SHIFT) & 0xff;         (red)
 *                 (pixel32 >> L_GREEN_SHIFT) & 0xff;       (green)
 *                 (pixel32 >> L_BLUE_SHIFT) & 0xff;        (blue)
 *                 (pixel32 >> L_ALPHA_SHIFT) & 0xff;       (alpha)
 *           The functions extractRGBValues() and extractRGBAValues() are
 *           provided to do this.  Likewise, the pixels can be set
 *           directly by shifting, using composeRGBPixel() and
 *           composeRGBAPixel().
 *
 *           All these operations work properly on both big- and little-endians.
 *
 *       (5) A reference count is held within each pix, giving the
 *           number of ptrs to the pix.  When a pixClone() call
 *           is made, the ref count is increased by 1, and
 *           when a pixDestroy() call is made, the reference count
 *           of the pix is decremented.  The pix is only destroyed
 *           when the reference count goes to zero.
 *
 *       (6) The version numbers (below) are used in the serialization
 *           of these data structures.  They are placed in the files,
 *           and rarely (if ever) change.
 *
 *       (7) The serialization dependencies are as follows:
 *               pixaa  :  pixa  :  boxa
 *               boxaa  :  boxa
 *           So, for example, pixaa and boxaa can be changed without
 *           forcing a change in pixa or boxa.  However, if pixa is
 *           changed, it forces a change in pixaa, and if boxa is
 *           changed, if forces a change in the other three.
 *           We define four version numbers:
 *               PIXAA_VERSION_NUMBER
 *               PIXA_VERSION_NUMBER
 *               BOXAA_VERSION_NUMBER
 *               BOXA_VERSION_NUMBER
 * 
*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------* * Basic Pix * *-------------------------------------------------------------------------*/ /* The 'special' field is by default 0, but it can hold integers * that direct non-default actions, e.g., in png and jpeg I/O. */ /*! Basic Pix */ struct Pix { l_uint32 w; /*!< width in pixels */ l_uint32 h; /*!< height in pixels */ l_uint32 d; /*!< depth in bits (bpp) */ l_uint32 spp; /*!< number of samples per pixel */ l_uint32 wpl; /*!< 32-bit words/line */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_int32 xres; /*!< image res (ppi) in x direction */ /*!< (use 0 if unknown) */ l_int32 yres; /*!< image res (ppi) in y direction */ /*!< (use 0 if unknown) */ l_int32 informat; /*!< input file format, IFF_* */ l_int32 special; /*!< special instructions for I/O, etc */ char *text; /*!< text string associated with pix */ struct PixColormap *colormap; /*!< colormap (may be null) */ l_uint32 *data; /*!< the image data */ }; /*! Colormap of a Pix */ struct PixColormap { void *array; /*!< colormap table (array of RGBA_QUAD) */ l_int32 depth; /*!< of pix (1, 2, 4 or 8 bpp) */ l_int32 nalloc; /*!< number of color entries allocated */ l_int32 n; /*!< number of color entries used */ }; /*! Colormap table entry (after the BMP version). * Note that the BMP format stores the colormap table exactly * as it appears here, with color samples being stored sequentially, * in the order (b,g,r,a). */ struct RGBA_Quad { l_uint8 blue; /*!< blue value */ l_uint8 green; /*!< green value */ l_uint8 red; /*!< red value */ l_uint8 alpha; /*!< alpha value */ }; /*-------------------------------------------------------------------------* * Array of pix * *-------------------------------------------------------------------------*/ /* Serialization for primary data structures */ #define PIXAA_VERSION_NUMBER 2 /*!< Version for Pixaa serialization */ #define PIXA_VERSION_NUMBER 2 /*!< Version for Pixa serialization */ #define BOXA_VERSION_NUMBER 2 /*!< Version for Boxa serialization */ #define BOXAA_VERSION_NUMBER 3 /*!< Version for Boxaa serialization */ /*! Array of pix */ struct Pixa { l_int32 n; /*!< number of Pix in ptr array */ l_int32 nalloc; /*!< number of Pix ptrs allocated */ l_atomic refcount; /*!< reference count (1 if no clones) */ struct Pix **pix; /*!< the array of ptrs to pix */ struct Boxa *boxa; /*!< array of boxes */ }; /*! Array of arrays of pix */ struct Pixaa { l_int32 n; /*!< number of Pixa in ptr array */ l_int32 nalloc; /*!< number of Pixa ptrs allocated */ struct Pixa **pixa; /*!< array of ptrs to pixa */ struct Boxa *boxa; /*!< array of boxes */ }; /*-------------------------------------------------------------------------* * Basic rectangle and rectangle arrays * *-------------------------------------------------------------------------*/ /*! Basic rectangle */ struct Box { l_int32 x; /*!< left coordinate */ l_int32 y; /*!< top coordinate */ l_int32 w; /*!< box width */ l_int32 h; /*!< box height */ l_atomic refcount; /*!< reference count (1 if no clones) */ }; /*! Array of Box */ struct Boxa { l_int32 n; /*!< number of box in ptr array */ l_int32 nalloc; /*!< number of box ptrs allocated */ l_atomic refcount; /*!< reference count (1 if no clones) */ struct Box **box; /*!< box ptr array */ }; /*! Array of Boxa */ struct Boxaa { l_int32 n; /*!< number of boxa in ptr array */ l_int32 nalloc; /*!< number of boxa ptrs allocated */ struct Boxa **boxa; /*!< boxa ptr array */ }; /*-------------------------------------------------------------------------* * Array of points * *-------------------------------------------------------------------------*/ #define PTA_VERSION_NUMBER 1 /*!< Version for Pta serialization */ /*! Array of points */ struct Pta { l_int32 n; /*!< actual number of pts */ l_int32 nalloc; /*!< size of allocated arrays */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_float32 *x, *y; /*!< arrays of floats */ }; /*-------------------------------------------------------------------------* * Array of Pta * *-------------------------------------------------------------------------*/ /*! Array of Pta */ struct Ptaa { l_int32 n; /*!< number of pta in ptr array */ l_int32 nalloc; /*!< number of pta ptrs allocated */ struct Pta **pta; /*!< pta ptr array */ }; /*-------------------------------------------------------------------------* * Pix accumulator container * *-------------------------------------------------------------------------*/ /*! Pix accumulator container */ struct Pixacc { l_int32 w; /*!< array width */ l_int32 h; /*!< array height */ l_int32 offset; /*!< used to allow negative */ /*!< intermediate results */ struct Pix *pix; /*!< the 32 bit accumulator pix */ }; /*-------------------------------------------------------------------------* * Pix tiling * *-------------------------------------------------------------------------*/ /*! Pix tiling */ struct PixTiling { struct Pix *pix; /*!< input pix (a clone) */ l_int32 nx; /*!< number of tiles horizontally */ l_int32 ny; /*!< number of tiles vertically */ l_int32 w; /*!< tile width */ l_int32 h; /*!< tile height */ l_int32 xoverlap; /*!< overlap on left and right */ l_int32 yoverlap; /*!< overlap on top and bottom */ l_int32 strip; /*!< strip for paint; default is TRUE */ }; /*-------------------------------------------------------------------------* * FPix: pix with float array * *-------------------------------------------------------------------------*/ #define FPIX_VERSION_NUMBER 2 /*!< Version for FPix serialization */ /*! Pix with float array */ struct FPix { l_int32 w; /*!< width in pixels */ l_int32 h; /*!< height in pixels */ l_int32 wpl; /*!< 32-bit words/line */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_int32 xres; /*!< image res (ppi) in x direction */ /*!< (use 0 if unknown) */ l_int32 yres; /*!< image res (ppi) in y direction */ /*!< (use 0 if unknown) */ l_float32 *data; /*!< the float image data */ }; /*! Array of FPix */ struct FPixa { l_int32 n; /*!< number of fpix in ptr array */ l_int32 nalloc; /*!< number of fpix ptrs allocated */ l_atomic refcount; /*!< reference count (1 if no clones) */ struct FPix **fpix; /*!< the array of ptrs to fpix */ }; /*-------------------------------------------------------------------------* * DPix: pix with double array * *-------------------------------------------------------------------------*/ #define DPIX_VERSION_NUMBER 2 /*!< Version for DPix serialization */ /*! Pix with double array */ struct DPix { l_int32 w; /*!< width in pixels */ l_int32 h; /*!< height in pixels */ l_int32 wpl; /*!< 32-bit words/line */ l_atomic refcount; /*!< reference count (1 if no clones) */ l_int32 xres; /*!< image res (ppi) in x direction */ /*!< (use 0 if unknown) */ l_int32 yres; /*!< image res (ppi) in y direction */ /*!< (use 0 if unknown) */ l_float64 *data; /*!< the double image data */ }; /*-------------------------------------------------------------------------* * PixComp: compressed pix * *-------------------------------------------------------------------------*/ /*! Compressed Pix */ struct PixComp { l_int32 w; /*!< width in pixels */ l_int32 h; /*!< height in pixels */ l_int32 d; /*!< depth in bits */ l_int32 xres; /*!< image res (ppi) in x direction */ /*!< (use 0 if unknown) */ l_int32 yres; /*!< image res (ppi) in y direction */ /*!< (use 0 if unknown) */ l_int32 comptype; /*!< compressed format (IFF_TIFF_G4, */ /*!< IFF_PNG, IFF_JFIF_JPEG) */ char *text; /*!< text string associated with pix */ l_int32 cmapflag; /*!< flag (1 for cmap, 0 otherwise) */ l_uint8 *data; /*!< the compressed image data */ size_t size; /*!< size of the data array */ }; /*-------------------------------------------------------------------------* * PixaComp: array of compressed pix * *-------------------------------------------------------------------------*/ #define PIXACOMP_VERSION_NUMBER 2 /*!< Version for PixaComp serialization */ /*! Array of compressed pix */ struct PixaComp { l_int32 n; /*!< number of PixComp in ptr array */ l_int32 nalloc; /*!< number of PixComp ptrs allocated */ l_int32 offset; /*!< indexing offset into ptr array */ struct PixComp **pixc; /*!< the array of ptrs to PixComp */ struct Boxa *boxa; /*!< array of boxes */ }; #endif /* LEPTONICA_PIX_INTERNAL_H */ leptonica-1.86.0/src/pixabasic.c000066400000000000000000002526641506303110300164710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixabasic.c *
 *
 *      Pixa creation, destruction, copying
 *           PIXA     *pixaCreate()
 *           PIXA     *pixaCreateFromPix()
 *           PIXA     *pixaCreateFromBoxa()
 *           PIXA     *pixaSplitPix()
 *           void      pixaDestroy()
 *           PIXA     *pixaCopy()
 *
 *      Pixa addition
 *           l_int32   pixaAddPix()
 *           l_int32   pixaAddBox()
 *           static l_int32   pixaExtendArray()
 *           l_int32   pixaExtendArrayToSize()
 *
 *      Pixa accessors
 *           l_int32   pixaGetCount()
 *           PIX      *pixaGetPix()
 *           l_int32   pixaGetPixDimensions()
 *           BOXA     *pixaGetBoxa()
 *           l_int32   pixaGetBoxaCount()
 *           BOX      *pixaGetBox()
 *           l_int32   pixaGetBoxGeometry()
 *           l_int32   pixaSetBoxa()
 *           PIX     **pixaGetPixArray()
 *           l_int32   pixaVerifyDepth()
 *           l_int32   pixaVerifyDimensions()
 *           l_int32   pixaIsFull()
 *           l_int32   pixaCountText()
 *           l_int32   pixaSetText()
 *           void   ***pixaGetLinePtrs()
 *
 *      Pixa output info
 *           l_int32   pixaWriteStreamInfo()
 *
 *      Pixa array modifiers
 *           l_int32   pixaReplacePix()
 *           l_int32   pixaInsertPix()
 *           l_int32   pixaRemovePix()
 *           l_int32   pixaRemovePixAndSave()
 *           l_int32   pixaRemoveSelected()
 *           l_int32   pixaInitFull()
 *           l_int32   pixaClear()
 *
 *      Pixa and Pixaa combination
 *           l_int32   pixaJoin()
 *           PIXA     *pixaInterleave()
 *           l_int32   pixaaJoin()
 *
 *      Pixaa creation, destruction
 *           PIXAA    *pixaaCreate()
 *           PIXAA    *pixaaCreateFromPixa()
 *           void      pixaaDestroy()
 *
 *      Pixaa addition
 *           l_int32   pixaaAddPixa()
 *           static l_int32   pixaaExtendArray()
 *           l_int32   pixaaAddPix()
 *           l_int32   pixaaAddBox()
 *
 *      Pixaa accessors
 *           l_int32   pixaaGetCount()
 *           PIXA     *pixaaGetPixa()
 *           BOXA     *pixaaGetBoxa()
 *           PIX      *pixaaGetPix()
 *           l_int32   pixaaVerifyDepth()
 *           l_int32   pixaaVerifyDimensions()
 *           l_int32   pixaaIsFull()
 *
 *      Pixaa array modifiers
 *           l_int32   pixaaInitFull()
 *           l_int32   pixaaReplacePixa()
 *           l_int32   pixaaClear()
 *           l_int32   pixaaTruncate()
 *
 *      Pixa serialized I/O  (requires png support)
 *           PIXA     *pixaRead()
 *           PIXA     *pixaReadStream()
 *           PIXA     *pixaReadMem()
 *           l_int32   pixaWriteDebug()
 *           l_int32   pixaWrite()
 *           l_int32   pixaWriteStream()
 *           l_int32   pixaWriteMem()
 *           PIXA     *pixaReadBoth()
 *
 *      Pixaa serialized I/O  (requires png support)
 *           PIXAA    *pixaaReadFromFiles()
 *           PIXAA    *pixaaRead()
 *           PIXAA    *pixaaReadStream()
 *           PIXAA    *pixaaReadMem()
 *           l_int32   pixaaWrite()
 *           l_int32   pixaaWriteStream()
 *           l_int32   pixaaWriteMem()
 *
 *
 *   Important note on reference counting:
 *     Reference counting for the Pixa is analogous to that for the Boxa.
 *     See pix.h for details.   pixaCopy() provides three possible modes
 *     of copy.  The basic rule is that however a Pixa is obtained
 *     (e.g., from pixaCreate*(), pixaCopy(), or a Pixaa accessor),
 *     it is necessary to call pixaDestroy() on it.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* Bounds on array sizes */ static const size_t MaxInitPtrArraySize = 100000; static const size_t MaxPixaPtrArraySize = 5000000; static const size_t MaxPixaaPtrArraySize = 5000000; static const size_t InitialPtrArraySize = 20; /*!< n'importe quoi */ /* Static functions */ static l_int32 pixaExtendArray(PIXA *pixa); static l_int32 pixaaExtendArray(PIXAA *paa); /*---------------------------------------------------------------------* * Pixa creation, destruction, copy * *---------------------------------------------------------------------*/ /*! * \brief pixaCreate() * * \param[in] n initial number of ptrs * \return pixa, or NULL on error * *
 * Notes:
 *      (1) This creates an empty boxa.
 * 
*/ PIXA * pixaCreate(l_int32 n) { PIXA *pixa; if (n <= 0 || n > MaxInitPtrArraySize) n = InitialPtrArraySize; pixa = (PIXA *)LEPT_CALLOC(1, sizeof(PIXA)); pixa->n = 0; pixa->nalloc = n; pixa->refcount = 1; pixa->pix = (PIX **)LEPT_CALLOC(n, sizeof(PIX *)); pixa->boxa = boxaCreate(n); if (!pixa->pix || !pixa->boxa) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("pix or boxa not made", __func__, NULL); } return pixa; } /*! * \brief pixaCreateFromPix() * * \param[in] pixs with individual components on a lattice * \param[in] n number of components * \param[in] cellw width of each cell * \param[in] cellh height of each cell * \return pixa, or NULL on error * *
 * Notes:
 *      (1) For bpp = 1, we truncate each retrieved pix to the ON
 *          pixels, which we assume for now start at (0,0)
 * 
*/ PIXA * pixaCreateFromPix(PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh) { l_int32 w, h, d, nw, nh, i, j, index; PIX *pix1, *pix2; PIXA *pixa; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (n <= 0) return (PIXA *)ERROR_PTR("n must be > 0", __func__, NULL); if ((pixa = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if ((pix1 = pixCreate(cellw, cellh, d)) == NULL) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("pix1 not made", __func__, NULL); } nw = (w + cellw - 1) / cellw; nh = (h + cellh - 1) / cellh; for (i = 0, index = 0; i < nh; i++) { for (j = 0; j < nw && index < n; j++, index++) { pixRasterop(pix1, 0, 0, cellw, cellh, PIX_SRC, pixs, j * cellw, i * cellh); if (d == 1 && !pixClipToForeground(pix1, &pix2, NULL)) pixaAddPix(pixa, pix2, L_INSERT); else pixaAddPix(pixa, pix1, L_COPY); } } pixDestroy(&pix1); return pixa; } /*! * \brief pixaCreateFromBoxa() * * \param[in] pixs * \param[in] boxa * \param[in] start first box to use * \param[in] num number of boxes; use 0 to go to the end * \param[out] pcropwarn [optional] TRUE if the boxa extent * is larger than pixs. * \return pixad, or NULL on error * *
 * Notes:
 *      (1) This simply extracts from pixs the region corresponding to each
 *          box in the boxa.  To extract all the regions, set both %start
 *          and %num to 0.
 *      (2) The 5th arg is optional.  If the extent of the boxa exceeds the
 *          size of the pixa, so that some boxes are either clipped
 *          or entirely outside the pix, a warning is returned as TRUE.
 *      (3) pixad will have only the properly clipped elements, and
 *          the internal boxa will be correct.
 * 
*/ PIXA * pixaCreateFromBoxa(PIX *pixs, BOXA *boxa, l_int32 start, l_int32 num, l_int32 *pcropwarn) { l_int32 i, n, end, w, h, wbox, hbox, cropwarn; BOX *box, *boxc; PIX *pixd; PIXA *pixad; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa) return (PIXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (num < 0) return (PIXA *)ERROR_PTR("num must be >= 0", __func__, NULL); n = boxaGetCount(boxa); end = (num == 0) ? n - 1 : L_MIN(start + num - 1, n - 1); if ((pixad = pixaCreate(end - start + 1)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); boxaGetExtent(boxa, &wbox, &hbox, NULL); pixGetDimensions(pixs, &w, &h, NULL); cropwarn = FALSE; if (wbox > w || hbox > h) cropwarn = TRUE; if (pcropwarn) *pcropwarn = cropwarn; for (i = start; i <= end; i++) { box = boxaGetBox(boxa, i, L_COPY); if (cropwarn) { /* if box is outside pixs, pixd is NULL */ pixd = pixClipRectangle(pixs, box, &boxc); /* may be NULL */ if (pixd) { pixaAddPix(pixad, pixd, L_INSERT); pixaAddBox(pixad, boxc, L_INSERT); } boxDestroy(&box); } else { pixd = pixClipRectangle(pixs, box, NULL); pixaAddPix(pixad, pixd, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*! * \brief pixaSplitPix() * * \param[in] pixs with individual components on a lattice * \param[in] nx number of mosaic cells horizontally * \param[in] ny number of mosaic cells vertically * \param[in] borderwidth of added border on all sides * \param[in] bordercolor in our RGBA format: 0xrrggbbaa * \return pixa, or NULL on error * *
 * Notes:
 *      (1) This is a variant on pixaCreateFromPix(), where we
 *          simply divide the image up into (approximately) equal
 *          subunits.  If you want the subimages to have essentially
 *          the same aspect ratio as the input pix, use nx = ny.
 *      (2) If borderwidth is 0, we ignore the input bordercolor and
 *          redefine it to white.
 *      (3) The bordercolor is always used to initialize each tiled pix,
 *          so that if the src is clipped, the unblitted part will
 *          be this color.  This avoids 1 pixel wide black stripes at the
 *          left and lower edges.
 * 
*/ PIXA * pixaSplitPix(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor) { l_int32 w, h, d, cellw, cellh, i, j; PIX *pix1; PIXA *pixa; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (nx <= 0 || ny <= 0) return (PIXA *)ERROR_PTR("nx and ny must be > 0", __func__, NULL); borderwidth = L_MAX(0, borderwidth); if ((pixa = pixaCreate(nx * ny)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); cellw = (w + nx - 1) / nx; /* round up */ cellh = (h + ny - 1) / ny; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if ((pix1 = pixCreate(cellw + 2 * borderwidth, cellh + 2 * borderwidth, d)) == NULL) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("pix1 not made", __func__, NULL); } pixCopyColormap(pix1, pixs); if (borderwidth == 0) { /* initialize full image to white */ if (d == 1) pixClearAll(pix1); else pixSetAll(pix1); } else { pixSetAllArbitrary(pix1, bordercolor); } pixRasterop(pix1, borderwidth, borderwidth, cellw, cellh, PIX_SRC, pixs, j * cellw, i * cellh); pixaAddPix(pixa, pix1, L_INSERT); } } return pixa; } /*! * \brief pixaDestroy() * * \param[in,out] ppixa use ptr address so it will be nulled * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the pixa.
 *      (2) Always nulls the input ptr.
 * 
*/ void pixaDestroy(PIXA **ppixa) { l_int32 i; PIXA *pixa; if (ppixa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((pixa = *ppixa) == NULL) return; /* Decrement the refcount. If it is 0, destroy the pixa. */ if (--pixa->refcount == 0) { for (i = 0; i < pixa->n; i++) pixDestroy(&pixa->pix[i]); LEPT_FREE(pixa->pix); boxaDestroy(&pixa->boxa); LEPT_FREE(pixa); } *ppixa = NULL; } /*! * \brief pixaCopy() * * \param[in] pixa * \param[in] copyflag see pix.h for details: * L_COPY makes a new pixa and copies each pix and each box; * L_CLONE gives a new ref-counted handle to the input pixa; * L_COPY_CLONE makes a new pixa and inserts clones of * all pix and boxes * \return new pixa, or NULL on error */ PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag) { l_int32 i, nb; BOX *boxc = NULL; PIX *pixc; PIXA *pixac; if (!pixa) return (PIXA *)ERROR_PTR("pixa not defined", __func__, NULL); if (copyflag == L_CLONE) { ++pixa->refcount; return pixa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if ((pixac = pixaCreate(pixa->n)) == NULL) return (PIXA *)ERROR_PTR("pixac not made", __func__, NULL); nb = pixaGetBoxaCount(pixa); for (i = 0; i < pixa->n; i++) { if (copyflag == L_COPY) { pixc = pixaGetPix(pixa, i, L_COPY); if (i < nb) boxc = pixaGetBox(pixa, i, L_COPY); } else { /* copy-clone */ pixc = pixaGetPix(pixa, i, L_CLONE); if (i < nb) boxc = pixaGetBox(pixa, i, L_CLONE); } pixaAddPix(pixac, pixc, L_INSERT); if (i < nb) pixaAddBox(pixac, boxc, L_INSERT); } return pixac; } /*---------------------------------------------------------------------* * Pixa addition * *---------------------------------------------------------------------*/ /*! * \brief pixaAddPix() * * \param[in] pixa * \param[in] pix to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK; 1 on error */ l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag) { l_int32 n; PIX *pixc; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (copyflag == L_INSERT) pixc = pix; else if (copyflag == L_COPY) pixc = pixCopy(NULL, pix); else if (copyflag == L_CLONE) pixc = pixClone(pix); else return ERROR_INT("invalid copyflag", __func__, 1); if (!pixc) return ERROR_INT("pixc not made", __func__, 1); n = pixaGetCount(pixa); if (n >= pixa->nalloc) { if (pixaExtendArray(pixa)) { if (copyflag != L_INSERT) pixDestroy(&pixc); return ERROR_INT("extension failed", __func__, 1); } } pixa->pix[n] = pixc; pixa->n++; return 0; } /*! * \brief pixaAddBox() * * \param[in] pixa * \param[in] box * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok pixaAddBox(PIXA *pixa, BOX *box, l_int32 copyflag) { if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", __func__, 1); boxaAddBox(pixa->boxa, box, copyflag); return 0; } /*! * \brief pixaExtendArray() * * \param[in] pixa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Doubles the size of the pixa and boxa ptr arrays.
 *      (2) The max number of pix in the array is 5 million.
 * 
*/ static l_int32 pixaExtendArray(PIXA *pixa) { if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); return pixaExtendArrayToSize(pixa, 2 * pixa->nalloc); } /*! * \brief pixaExtendArrayToSize() * * \param[in] pixa * \param[in] size number of pix ptrs in new array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If necessary, reallocs new pixa and boxa ptrs arrays to %size.
 *          The pixa and boxa ptr arrays must always be equal in size.
 *      (2) The max number of pix ptrs is 5M.
 * 
*/ l_ok pixaExtendArrayToSize(PIXA *pixa, size_t size) { size_t oldsize, newsize; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (pixa->nalloc > MaxPixaPtrArraySize) /* belt & suspenders */ return ERROR_INT("pixa has too many ptrs", __func__, 1); if (size > MaxPixaPtrArraySize) return ERROR_INT("size > 5M ptrs; too large", __func__, 1); if (size <= pixa->nalloc) { L_INFO("size too small; no extension\n", __func__); return 0; } oldsize = pixa->nalloc * sizeof(PIX *); newsize = size * sizeof(PIX *); if ((pixa->pix = (PIX **)reallocNew((void **)&pixa->pix, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); pixa->nalloc = size; return boxaExtendArrayToSize(pixa->boxa, size); } /*---------------------------------------------------------------------* * Pixa accessors * *---------------------------------------------------------------------*/ /*! * \brief pixaGetCount() * * \param[in] pixa * \return count, or 0 if no pixa */ l_int32 pixaGetCount(PIXA *pixa) { if (!pixa) return ERROR_INT("pixa not defined", __func__, 0); return pixa->n; } /*! * \brief pixaGetPix() * * \param[in] pixa * \param[in] index to the index-th pix * \param[in] accesstype L_COPY or L_CLONE * \return pix, or NULL on error */ PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype) { PIX *pix; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (index < 0 || index >= pixa->n) return (PIX *)ERROR_PTR("index not valid", __func__, NULL); if ((pix = pixa->pix[index]) == NULL) { L_ERROR("no pix at pixa[%d]\n", __func__, index); return (PIX *)ERROR_PTR("pix not found!", __func__, NULL); } if (accesstype == L_COPY) return pixCopy(NULL, pix); else if (accesstype == L_CLONE) return pixClone(pix); else return (PIX *)ERROR_PTR("invalid accesstype", __func__, NULL); } /*! * \brief pixaGetPixDimensions() * * \param[in] pixa * \param[in] index to the index-th box * \param[out] pw, ph, pd [optional] each can be null * \return 0 if OK, 1 on error */ l_ok pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd) { PIX *pix; if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", __func__, 1); if ((pix = pixaGetPix(pixa, index, L_CLONE)) == NULL) return ERROR_INT("pix not found!", __func__, 1); pixGetDimensions(pix, pw, ph, pd); pixDestroy(&pix); return 0; } /*! * \brief pixaGetBoxa() * * \param[in] pixa * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE * \return boxa, or NULL on error */ BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype) { if (!pixa) return (BOXA *)ERROR_PTR("pixa not defined", __func__, NULL); if (!pixa->boxa) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid accesstype", __func__, NULL); return boxaCopy(pixa->boxa, accesstype); } /*! * \brief pixaGetBoxaCount() * * \param[in] pixa * \return count, or 0 on error */ l_int32 pixaGetBoxaCount(PIXA *pixa) { if (!pixa) return ERROR_INT("pixa not defined", __func__, 0); return boxaGetCount(pixa->boxa); } /*! * \brief pixaGetBox() * * \param[in] pixa * \param[in] index to the index-th pix * \param[in] accesstype L_COPY or L_CLONE * \return box if null, not automatically an error, or NULL on error * *
 * Notes:
 *      (1) There is always a boxa with a pixa, and it is initialized so
 *          that each box ptr is NULL.
 *      (2) In general, we expect that there is either a box associated
 *          with each pix, or no boxes at all in the boxa.
 *      (3) Having no boxes is thus not an automatic error.  Whether it
 *          is an actual error is determined by the calling program.
 *          If the caller expects to get a box, it is an error; see, e.g.,
 *          pixaGetBoxGeometry().
 * 
*/ BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype) { BOX *box; if (!pixa) return (BOX *)ERROR_PTR("pixa not defined", __func__, NULL); if (!pixa->boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); if (index < 0 || index >= pixa->boxa->n) return (BOX *)ERROR_PTR("index not valid", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOX *)ERROR_PTR("invalid accesstype", __func__, NULL); box = pixa->boxa->box[index]; if (box) { if (accesstype == L_COPY) return boxCopy(box); else /* accesstype == L_CLONE */ return boxClone(box); } else { return NULL; } } /*! * \brief pixaGetBoxGeometry() * * \param[in] pixa * \param[in] index to the index-th box * \param[out] px, py, pw, ph [optional] each can be null * \return 0 if OK, 1 on error */ l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { BOX *box; if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", __func__, 1); if ((box = pixaGetBox(pixa, index, L_CLONE)) == NULL) return ERROR_INT("box not found!", __func__, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * \brief pixaSetBoxa() * * \param[in] pixa * \param[in] boxa * \param[in] accesstype L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys the existing boxa in the pixa.
 * 
*/ l_ok pixaSetBoxa(PIXA *pixa, BOXA *boxa, l_int32 accesstype) { if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!boxa) return ERROR_INT("boxa not defined", __func__, 1); if (accesstype != L_INSERT && accesstype != L_COPY && accesstype != L_CLONE) return ERROR_INT("invalid access type", __func__, 1); boxaDestroy(&pixa->boxa); if (accesstype == L_INSERT) pixa->boxa = boxa; else pixa->boxa = boxaCopy(boxa, accesstype); return 0; } /*! * \brief pixaGetPixArray() * * \param[in] pixa * \return pix array, or NULL on error * *
 * Notes:
 *      (1) This returns a ptr to the actual array.  The array is
 *          owned by the pixa, so it must not be destroyed.
 *      (2) The caller should always check if the return value is NULL
 *          before accessing any of the pix ptrs in this array!
 * 
*/ PIX ** pixaGetPixArray(PIXA *pixa) { if (!pixa) return (PIX **)ERROR_PTR("pixa not defined", __func__, NULL); return pixa->pix; } /*! * \brief pixaVerifyDepth() * * \param[in] pixa * \param[out] psame 1 if depth is the same for all pix; 0 otherwise * \param[out] pmaxd [optional] max depth of all pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is considered to be an error if there are no pix.
 * 
*/ l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd) { l_int32 i, n, d, maxd, same; if (pmaxd) *pmaxd = 0; if (!psame) return ERROR_INT("psame not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("no pix in pixa", __func__, 1); same = 1; pixaGetPixDimensions(pixa, 0, NULL, NULL, &maxd); for (i = 1; i < n; i++) { if (pixaGetPixDimensions(pixa, i, NULL, NULL, &d)) return ERROR_INT("pix depth not found", __func__, 1); maxd = L_MAX(maxd, d); if (d != maxd) same = 0; } *psame = same; if (pmaxd) *pmaxd = maxd; return 0; } /*! * \brief pixaVerifyDimensions() * * \param[in] pixa * \param[out] psame 1 if dimensions are the same for all pix; 0 otherwise * \param[out] pmaxw [optional] max width of all pix * \param[out] pmaxh [optional] max height of all pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is considered to be an error if there are no pix.
 * 
*/ l_ok pixaVerifyDimensions(PIXA *pixa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 i, n, w, h, maxw, maxh, same; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!psame) return ERROR_INT("psame not defined", __func__, 1); *psame = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("no pix in pixa", __func__, 1); same = 1; pixaGetPixDimensions(pixa, 0, &maxw, &maxh, NULL); for (i = 1; i < n; i++) { if (pixaGetPixDimensions(pixa, i, &w, &h, NULL)) return ERROR_INT("pix dimensions not found", __func__, 1); maxw = L_MAX(maxw, w); maxh = L_MAX(maxh, h); if (w != maxw || h != maxh) same = 0; } *psame = same; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief pixaIsFull() * * \param[in] pixa * \param[out] pfullpa [optional] 1 if pixa is full * \param[out] pfullba [optional] 1 if boxa is full * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) A pixa is "full" if the array of pix is fully
 *          occupied from index 0 to index (pixa->n - 1).
 * 
*/ l_ok pixaIsFull(PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba) { l_int32 i, n, full; BOXA *boxa; PIX *pix; if (pfullpa) *pfullpa = 0; if (pfullba) *pfullba = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (pfullpa) { full = 1; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { full = 0; break; } pixDestroy(&pix); } *pfullpa = full; } if (pfullba) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaIsFull(boxa, pfullba); boxaDestroy(&boxa); } return 0; } /*! * \brief pixaCountText() * * \param[in] pixa * \param[out] pntext number of pix with non-empty text strings * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) All pix have non-empty text strings if the returned value %ntext
 *          equals the pixa count.
 * 
*/ l_ok pixaCountText(PIXA *pixa, l_int32 *pntext) { char *text; l_int32 i, n; PIX *pix; if (!pntext) return ERROR_INT("&ntext not defined", __func__, 1); *pntext = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; text = pixGetText(pix); if (text && strlen(text) > 0) (*pntext)++; pixDestroy(&pix); } return 0; } /*! * \brief pixaSetText() * * \param[in] pixa * \param[in] text [optional] single text string, to insert in each pix * \param[in] sa [optional] array of text strings, to insert in each pix * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) To clear all the text fields, use %sa == NULL and %text == NULL.
 *      (2) Otherwise, this replaces all text fields with a copy of a string,
 *          either the same string or a string from %sa.
 *      (3) To set all the text fields to the same value %text, use %sa = NULL.
 *      (4) If %sa is defined, ignore %text and use the strings in %sa.
 *          %sa must have the same count as %pixa.
 * 
*/ l_ok pixaSetText(PIXA *pixa, const char *text, SARRAY *sa) { char *str; l_int32 i, n; PIX *pix; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (sa && (sarrayGetCount(sa) != n)) return ERROR_INT("pixa and sa sizes differ", __func__, 1); if (!sa) { for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; pixSetText(pix, text); pixDestroy(&pix); } return 0; } for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; str = sarrayGetString(sa, i, L_NOCOPY); pixSetText(pix, str); pixDestroy(&pix); } return 0; } /*! * \brief pixaGetLinePtrs() * * \param[in] pixa of pix that all have the same depth * \param[out] psize [optional] number of pix in the pixa * \return array of array of line ptrs, or NULL on error * *
 * Notes:
 *      (1) See pixGetLinePtrs() for details.
 *      (2) It is best if all pix in the pixa are the same size.
 *          The size of each line ptr array is equal to the height
 *          of the pix that it refers to.
 *      (3) This is an array of arrays.  To destroy it:
 *            for (i = 0; i < size; i++)
 *                LEPT_FREE(lineset[i]);
 *            LEPT_FREE(lineset);
 * 
*/ void *** pixaGetLinePtrs(PIXA *pixa, l_int32 *psize) { l_int32 i, n, same; void **lineptrs; void ***lineset; PIX *pix; if (psize) *psize = 0; if (!pixa) return (void ***)ERROR_PTR("pixa not defined", __func__, NULL); pixaVerifyDepth(pixa, &same, NULL); if (!same) return (void ***)ERROR_PTR("pixa not all same depth", __func__, NULL); n = pixaGetCount(pixa); if (psize) *psize = n; if ((lineset = (void ***)LEPT_CALLOC(n, sizeof(void **))) == NULL) return (void ***)ERROR_PTR("lineset not made", __func__, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); lineptrs = pixGetLinePtrs(pix, NULL); lineset[i] = lineptrs; pixDestroy(&pix); } return lineset; } /*---------------------------------------------------------------------* * Pixa output info * *---------------------------------------------------------------------*/ /*! * \brief pixaWriteStreamInfo() * * \param[in] fp file stream * \param[in] pixa * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) For each pix in the pixa, write out the pix dimensions, spp,
 *          text string (if it exists), and cmap info.
 * 
*/ l_ok pixaWriteStreamInfo(FILE *fp, PIXA *pixa) { char *text; l_int32 i, n, w, h, d, spp, count, hastext; PIX *pix; PIXCMAP *cmap; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { fprintf(fp, "%d: no pix at this index\n", i); continue; } pixGetDimensions(pix, &w, &h, &d); spp = pixGetSpp(pix); text = pixGetText(pix); hastext = (text && strlen(text) > 0); if ((cmap = pixGetColormap(pix)) != NULL) count = pixcmapGetCount(cmap); fprintf(fp, "Pix %d: w = %d, h = %d, d = %d, spp = %d", i, w, h, d, spp); if (cmap) fprintf(fp, ", cmap(%d colors)", count); if (hastext) fprintf(fp, ", text = %s", text); fprintf(fp, "\n"); pixDestroy(&pix); } return 0; } /*---------------------------------------------------------------------* * Pixa array modifiers * *---------------------------------------------------------------------*/ /*! * \brief pixaReplacePix() * * \param[in] pixa * \param[in] index to the index-th pix * \param[in] pix insert to replace existing one * \param[in] box [optional] insert to replace existing * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place replacement of one pix.
 *      (2) The previous pix at that location is destroyed.
 * 
*/ l_ok pixaReplacePix(PIXA *pixa, l_int32 index, PIX *pix, BOX *box) { BOXA *boxa; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixDestroy(&(pixa->pix[index])); pixa->pix[index] = pix; if (box) { boxa = pixa->boxa; if (index > boxa->n) return ERROR_INT("boxa index not valid", __func__, 1); boxaReplaceBox(boxa, index, box); } return 0; } /*! * \brief pixaInsertPix() * * \param[in] pixa * \param[in] index at which pix is to be inserted * \param[in] pixs new pix to be inserted * \param[in] box [optional] new box to be inserted * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts pixa[i] --> pixa[i + 1] for all i >= index,
 *          and then inserts at pixa[index].
 *      (2) To insert at the beginning of the array, set index = 0.
 *      (3) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 *      (4) To append a pix to a pixa, it's easier to use pixaAddPix().
 * 
*/ l_ok pixaInsertPix(PIXA *pixa, l_int32 index, PIX *pixs, BOX *box) { l_int32 i, n; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (n >= pixa->nalloc) { /* extend both ptr arrays */ if (pixaExtendArray(pixa)) return ERROR_INT("extension failed", __func__, 1); if (boxaExtendArray(pixa->boxa)) return ERROR_INT("extension failed", __func__, 1); } pixa->n++; for (i = n; i > index; i--) pixa->pix[i] = pixa->pix[i - 1]; pixa->pix[index] = pixs; /* Optionally, insert the box */ if (box) boxaInsertBox(pixa->boxa, index, box); return 0; } /*! * \brief pixaRemovePix() * * \param[in] pixa * \param[in] index of pix to be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts pixa[i] --> pixa[i - 1] for all i > index.
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 *      (3) The corresponding box is removed as well, if it exists.
 * 
*/ l_ok pixaRemovePix(PIXA *pixa, l_int32 index) { l_int32 i, n, nbox; BOXA *boxa; PIX **array; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } /* Remove the pix */ array = pixa->pix; pixDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; pixa->n--; /* Remove the box if it exists */ boxa = pixa->boxa; nbox = boxaGetCount(boxa); if (index < nbox) boxaRemoveBox(boxa, index); return 0; } /*! * \brief pixaRemovePixAndSave() * * \param[in] pixa * \param[in] index of pix to be removed * \param[out] ppix [optional] removed pix * \param[out] pbox [optional] removed box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts pixa[i] --> pixa[i - 1] for all i > index.
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 *      (3) The corresponding box is removed as well, if it exists.
 *      (4) The removed pix and box can either be retained or destroyed.
 * 
*/ l_ok pixaRemovePixAndSave(PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox) { l_int32 i, n, nbox; BOXA *boxa; PIX **array; if (ppix) *ppix = NULL; if (pbox) *pbox = NULL; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } /* Remove the pix */ array = pixa->pix; if (ppix) *ppix = pixaGetPix(pixa, index, L_CLONE); pixDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; pixa->n--; /* Remove the box if it exists */ boxa = pixa->boxa; nbox = boxaGetCount(boxa); if (index < nbox) boxaRemoveBoxAndSave(boxa, index, pbox); return 0; } /*! * \brief pixaRemoveSelected() * * \param[in] pixa * \param[in] naindex numa of indices of pix to be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This gives error messages for invalid indices
 * 
*/ l_ok pixaRemoveSelected(PIXA *pixa, NUMA *naindex) { l_int32 i, n, index; NUMA *na1; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!naindex) return ERROR_INT("naindex not defined", __func__, 1); if ((n = numaGetCount(naindex)) == 0) return ERROR_INT("naindex is empty", __func__, 1); /* Remove from highest indices first */ na1 = numaSort(NULL, naindex, L_SORT_DECREASING); for (i = 0; i < n; i++) { numaGetIValue(na1, i, &index); pixaRemovePix(pixa, index); } numaDestroy(&na1); return 0; } /*! * \brief pixaInitFull() * * \param[in] pixa typically empty * \param[in] pix [optional] to be replicated to the entire pixa ptr array * \param[in] box [optional] to be replicated to the entire boxa ptr array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This initializes a pixa by filling up the entire pix ptr array
 *          with copies of %pix.  If %pix == NULL, we use a tiny placeholder
 *          pix (w = h = d = 1).  Any existing pix are destroyed.
 *          It also optionally fills the boxa with copies of %box.
 *          After this operation, the numbers of pix and (optionally)
 *          boxes are equal to the number of allocated ptrs.
 *      (2) Note that we use pixaReplacePix() instead of pixaInsertPix().
 *          They both have the same effect when inserting into a NULL ptr
 *          in the pixa ptr array:
 *      (3) If the boxa is not initialized (i.e., filled with boxes),
 *          later insertion of boxes will cause an error, because the
 *          'n' field is 0.
 *      (4) Example usage.  This function is useful to prepare for a
 *          random insertion (or replacement) of pix into a pixa.
 *          To randomly insert pix into a pixa, without boxes, up to
 *          some index "max":
 *             Pixa *pixa = pixaCreate(max);
 *             pixaInitFull(pixa, NULL, NULL);
 *          An existing pixa with a smaller ptr array can also be reused:
 *             pixaExtendArrayToSize(pixa, max);
 *             pixaInitFull(pixa, NULL, NULL);
 *          The initialization allows the pixa to always be properly
 *          filled, even if all pix (and boxes) are not later replaced.
 * 
*/ l_ok pixaInitFull(PIXA *pixa, PIX *pix, BOX *box) { l_int32 i, n; PIX *pix1; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixa->nalloc; pixa->n = n; for (i = 0; i < n; i++) { if (pix) pix1 = pixCopy(NULL, pix); else pix1 = pixCreate(1, 1, 1); pixaReplacePix(pixa, i, pix1, NULL); } if (box) boxaInitFull(pixa->boxa, box); return 0; } /*! * \brief pixaClear() * * \param[in] pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys all pix in the pixa, as well as
 *          all boxes in the boxa.  The ptrs in the pix ptr array
 *          are all null'd.  The number of allocated pix, n, is set to 0.
 * 
*/ l_ok pixaClear(PIXA *pixa) { l_int32 i, n; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) pixDestroy(&pixa->pix[i]); pixa->n = 0; return boxaClear(pixa->boxa); } /*---------------------------------------------------------------------* * Pixa and Pixaa combination * *---------------------------------------------------------------------*/ /*! * \brief pixaJoin() * * \param[in] pixad dest pixa; add to this one * \param[in] pixas [optional] source pixa; add from this one * \param[in] istart starting index in pixas * \param[in] iend ending index in pixas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This appends a clone of each indicated pix in pixas to pixad
 *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (3) iend < 0 means 'read to the end'
 *      (4) If pixas is NULL or contains no pix, this is a no-op.
 * 
*/ l_ok pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend) { l_int32 i, n, nb; BOXA *boxas, *boxad; PIX *pix; if (!pixad) return ERROR_INT("pixad not defined", __func__, 1); if (!pixas || ((n = pixaGetCount(pixas)) == 0)) return 0; if (istart < 0) istart = 0; if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixad, pix, L_INSERT); } boxas = pixaGetBoxa(pixas, L_CLONE); boxad = pixaGetBoxa(pixad, L_CLONE); nb = pixaGetBoxaCount(pixas); iend = L_MIN(iend, nb - 1); boxaJoin(boxad, boxas, istart, iend); boxaDestroy(&boxas); /* just the clones */ boxaDestroy(&boxad); return 0; } /*! * \brief pixaInterleave() * * \param[in] pixa1 first src pixa * \param[in] pixa2 second src pixa * \param[in] copyflag L_CLONE, L_COPY * \return pixa interleaved from sources, or NULL on error. * *
 * Notes:
 *      (1) %copyflag determines if the pix are copied or cloned.
 *          The boxes, if they exist, are copied.
 *      (2) If the two pixa have different sizes, a warning is issued,
 *          and the number of pairs returned is the minimum size.
 * 
*/ PIXA * pixaInterleave(PIXA *pixa1, PIXA *pixa2, l_int32 copyflag) { l_int32 i, n1, n2, n, nb1, nb2; BOX *box; PIX *pix; PIXA *pixad; if (!pixa1) return (PIXA *)ERROR_PTR("pixa1 not defined", __func__, NULL); if (!pixa2) return (PIXA *)ERROR_PTR("pixa2 not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); n1 = pixaGetCount(pixa1); n2 = pixaGetCount(pixa2); n = L_MIN(n1, n2); if (n == 0) return (PIXA *)ERROR_PTR("at least one input pixa is empty", __func__, NULL); if (n1 != n2) L_WARNING("counts differ: %d != %d\n", __func__, n1, n2); pixad = pixaCreate(2 * n); nb1 = pixaGetBoxaCount(pixa1); nb2 = pixaGetBoxaCount(pixa2); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa1, i, copyflag); pixaAddPix(pixad, pix, L_INSERT); if (i < nb1) { box = pixaGetBox(pixa1, i, L_COPY); pixaAddBox(pixad, box, L_INSERT); } pix = pixaGetPix(pixa2, i, copyflag); pixaAddPix(pixad, pix, L_INSERT); if (i < nb2) { box = pixaGetBox(pixa2, i, L_COPY); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*! * \brief pixaaJoin() * * \param[in] paad dest pixaa; add to this one * \param[in] paas [optional] source pixaa; add from this one * \param[in] istart starting index in pixaas * \param[in] iend ending index in pixaas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This appends a clone of each indicated pixa in paas to pixaad
 *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (3) iend < 0 means 'read to the end'
 * 
*/ l_ok pixaaJoin(PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend) { l_int32 i, n; PIXA *pixa; if (!paad) return ERROR_INT("pixaad not defined", __func__, 1); if (!paas) return 0; if (istart < 0) istart = 0; n = pixaaGetCount(paas, NULL); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { pixa = pixaaGetPixa(paas, i, L_CLONE); pixaaAddPixa(paad, pixa, L_INSERT); } return 0; } /*---------------------------------------------------------------------* * Pixaa creation and destruction * *---------------------------------------------------------------------*/ /*! * \brief pixaaCreate() * * \param[in] n initial number of pixa ptrs * \return paa, or NULL on error * *
 * Notes:
 *      (1) A pixaa provides a 2-level hierarchy of images.
 *          A common use is for segmentation masks, which are
 *          inexpensive to store in png format.
 *      (2) For example, suppose you want a mask for each textline
 *          in a two-column page.  The textline masks for each column
 *          can be represented by a pixa, of which there are 2 in the pixaa.
 *          The boxes for the textline mask components within a column
 *          can have their origin referred to the column rather than the page.
 *          Then the boxa field can be used to represent the two box (regions)
 *          for the columns, and the (x,y) components of each box can
 *          be used to get the absolute position of the textlines on
 *          the page.
 * 
*/ PIXAA * pixaaCreate(l_int32 n) { PIXAA *paa; if (n <= 0 || n > MaxInitPtrArraySize) n = InitialPtrArraySize; paa = (PIXAA *)LEPT_CALLOC(1, sizeof(PIXAA)); paa->n = 0; paa->nalloc = n; if ((paa->pixa = (PIXA **)LEPT_CALLOC(n, sizeof(PIXA *))) == NULL) { pixaaDestroy(&paa); return (PIXAA *)ERROR_PTR("pixa ptrs not made", __func__, NULL); } paa->boxa = boxaCreate(n); return paa; } /*! * \brief pixaaCreateFromPixa() * * \param[in] pixa * \param[in] n number specifying subdivision of pixa * \param[in] type L_CHOOSE_CONSECUTIVE, L_CHOOSE_SKIP_BY * \param[in] copyflag L_CLONE, L_COPY * \return paa, or NULL on error * *
 * Notes:
 *      (1) This subdivides a pixa into a set of smaller pixa that
 *          are accumulated into a pixaa.
 *      (2) If type == L_CHOOSE_CONSECUTIVE, the first 'n' pix are
 *          put in a pixa and added to pixaa, then the next 'n', etc.
 *          If type == L_CHOOSE_SKIP_BY, the first pixa is made by
 *          aggregating pix[0], pix[n], pix[2*n], etc.
 *      (3) The copyflag specifies if each new pix is a copy or a clone.
 * 
*/ PIXAA * pixaaCreateFromPixa(PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag) { l_int32 count, i, j, npixa; PIX *pix; PIXA *pixat = NULL; PIXAA *paa; if (!pixa) return (PIXAA *)ERROR_PTR("pixa not defined", __func__, NULL); count = pixaGetCount(pixa); if (count == 0) return (PIXAA *)ERROR_PTR("no pix in pixa", __func__, NULL); if (n <= 0) return (PIXAA *)ERROR_PTR("n must be > 0", __func__, NULL); if (type != L_CHOOSE_CONSECUTIVE && type != L_CHOOSE_SKIP_BY) return (PIXAA *)ERROR_PTR("invalid type", __func__, NULL); if (copyflag != L_CLONE && copyflag != L_COPY) return (PIXAA *)ERROR_PTR("invalid copyflag", __func__, NULL); if (type == L_CHOOSE_CONSECUTIVE) npixa = (count + n - 1) / n; else /* L_CHOOSE_SKIP_BY */ npixa = L_MIN(n, count); paa = pixaaCreate(npixa); if (type == L_CHOOSE_CONSECUTIVE) { for (i = 0; i < count; i++) { if (i % n == 0) pixat = pixaCreate(n); pix = pixaGetPix(pixa, i, copyflag); pixaAddPix(pixat, pix, L_INSERT); if (i % n == n - 1) pixaaAddPixa(paa, pixat, L_INSERT); } if (i % n != 0) pixaaAddPixa(paa, pixat, L_INSERT); } else { /* L_CHOOSE_SKIP_BY */ for (i = 0; i < npixa; i++) { pixat = pixaCreate(count / npixa + 1); for (j = i; j < count; j += n) { pix = pixaGetPix(pixa, j, copyflag); pixaAddPix(pixat, pix, L_INSERT); } pixaaAddPixa(paa, pixat, L_INSERT); } } return paa; } /*! * \brief pixaaDestroy() * * \param[in,out] ppaa use ptr address so it will be nulled * \return void */ void pixaaDestroy(PIXAA **ppaa) { l_int32 i; PIXAA *paa; if (ppaa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((paa = *ppaa) == NULL) return; for (i = 0; i < paa->n; i++) pixaDestroy(&paa->pixa[i]); LEPT_FREE(paa->pixa); boxaDestroy(&paa->boxa); LEPT_FREE(paa); *ppaa = NULL; } /*---------------------------------------------------------------------* * Pixaa addition * *---------------------------------------------------------------------*/ /*! * \brief pixaaAddPixa() * * \param[in] paa * \param[in] pixa to be added * \param[in] copyflag: * L_INSERT inserts the pixa directly; * L_COPY makes a new pixa and copies each pix and each box; * L_CLONE gives a new handle to the input pixa; * L_COPY_CLONE makes a new pixa and inserts clones of * all pix and boxes * \return 0 if OK; 1 on error */ l_ok pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag) { l_int32 n; PIXA *pixac; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE && copyflag != L_COPY_CLONE) return ERROR_INT("invalid copyflag", __func__, 1); if (copyflag == L_INSERT) { pixac = pixa; } else { if ((pixac = pixaCopy(pixa, copyflag)) == NULL) return ERROR_INT("pixac not made", __func__, 1); } n = pixaaGetCount(paa, NULL); if (n >= paa->nalloc) { if (pixaaExtendArray(paa)) { if (copyflag != L_INSERT) pixaDestroy(&pixac); return ERROR_INT("extension failed", __func__, 1); } } paa->pixa[n] = pixac; paa->n++; return 0; } /*! * \brief pixaaExtendArray() * * \param[in] paa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The max number of pixa ptrs is 5M.  The reason it is so large
 *          is that some applications, like jbig2enc, can create a very
 *          large array of Pixa, each representing a character class
 *          that contains one or a few tiny bitmaps.
 * 
*/ static l_int32 pixaaExtendArray(PIXAA *paa) { size_t oldsize, newsize; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (paa->nalloc > MaxPixaaPtrArraySize) /* belt & suspenders */ return ERROR_INT("paa has too many ptrs", __func__, 1); oldsize = paa->nalloc * sizeof(PIXA *); newsize = 2 * oldsize; if (newsize > 8 * MaxPixaaPtrArraySize) { L_ERROR("newsize = %zu > 40 MB; too large\n", __func__, newsize); return 1; } if ((paa->pixa = (PIXA **)reallocNew((void **)&paa->pixa, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); paa->nalloc *= 2; return 0; } /*! * \brief pixaaAddPix() * * \param[in] paa input paa * \param[in] index index of pixa in paa * \param[in] pix to be added * \param[in] box [optional] to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK; 1 on error */ l_ok pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag) { PIXA *pixa; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) return ERROR_INT("pixa not found", __func__, 1); pixaAddPix(pixa, pix, copyflag); if (box) pixaAddBox(pixa, box, copyflag); pixaDestroy(&pixa); return 0; } /*! * \brief pixaaAddBox() * * \param[in] paa * \param[in] box * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The box can be used, for example, to hold the support region
 *          of a pixa that is being added to the pixaa.
 * 
*/ l_ok pixaaAddBox(PIXAA *paa, BOX *box, l_int32 copyflag) { if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", __func__, 1); boxaAddBox(paa->boxa, box, copyflag); return 0; } /*---------------------------------------------------------------------* * Pixaa accessors * *---------------------------------------------------------------------*/ /*! * \brief pixaaGetCount() * * \param[in] paa * \param[out] pna [optional] number of pix in each pixa * \return count, or 0 if no pixaa * *
 * Notes:
 *      (1) If paa is empty, a returned na will also be empty.
 * 
*/ l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna) { l_int32 i, n; NUMA *na; PIXA *pixa; if (pna) *pna = NULL; if (!paa) return ERROR_INT("paa not defined", __func__, 0); n = paa->n; if (pna) { if ((na = numaCreate(n)) == NULL) return ERROR_INT("na not made", __func__, 0); *pna = na; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); numaAddNumber(na, pixaGetCount(pixa)); pixaDestroy(&pixa); } } return n; } /*! * \brief pixaaGetPixa() * * \param[in] paa * \param[in] index to the index-th pixa * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE * \return pixa, or NULL on error * *
 * Notes:
 *      (1) L_COPY makes a new pixa with a copy of every pix
 *      (2) L_CLONE just makes a new reference to the pixa,
 *          and bumps the counter.  You would use this, for example,
 *          when you need to extract some data from a pix within a
 *          pixa within a pixaa.
 *      (3) L_COPY_CLONE makes a new pixa with a clone of every pix
 *          and box
 *      (4) In all cases, you must invoke pixaDestroy() on the returned pixa
 * 
*/ PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype) { PIXA *pixa; if (!paa) return (PIXA *)ERROR_PTR("paa not defined", __func__, NULL); if (index < 0 || index >= paa->n) return (PIXA *)ERROR_PTR("index not valid", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid accesstype", __func__, NULL); if ((pixa = paa->pixa[index]) == NULL) { /* shouldn't happen! */ L_ERROR("missing pixa[%d]\n", __func__, index); return (PIXA *)ERROR_PTR("pixa not found at index", __func__, NULL); } return pixaCopy(pixa, accesstype); } /*! * \brief pixaaGetBoxa() * * \param[in] paa * \param[in] accesstype L_COPY, L_CLONE * \return boxa, or NULL on error * *
 * Notes:
 *      (1) L_COPY returns a copy; L_CLONE returns a new reference to the boxa.
 *      (2) In both cases, invoke boxaDestroy() on the returned boxa.
 * 
*/ BOXA * pixaaGetBoxa(PIXAA *paa, l_int32 accesstype) { if (!paa) return (BOXA *)ERROR_PTR("paa not defined", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOXA *)ERROR_PTR("invalid access type", __func__, NULL); return boxaCopy(paa->boxa, accesstype); } /*! * \brief pixaaGetPix() * * \param[in] paa * \param[in] index index into the pixa array in the pixaa * \param[in] ipix index into the pix array in the pixa * \param[in] accessflag L_COPY or L_CLONE * \return pix, or NULL on error */ PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag) { PIX *pix; PIXA *pixa; if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) return (PIX *)ERROR_PTR("pixa not retrieved", __func__, NULL); if ((pix = pixaGetPix(pixa, ipix, accessflag)) == NULL) L_ERROR("pix not retrieved\n", __func__); pixaDestroy(&pixa); return pix; } /*! * \brief pixaaVerifyDepth() * * \param[in] paa * \param[out] psame 1 if all pix have the same depth; 0 otherwise * \param[out] pmaxd [optional] max depth of all pix in pixaa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) It is considered to be an error if any pixa have no pix.
 * 
*/ l_ok pixaaVerifyDepth(PIXAA *paa, l_int32 *psame, l_int32 *pmaxd) { l_int32 i, n, d, maxd, same, samed; PIXA *pixa; if (pmaxd) *pmaxd = 0; if (!psame) return ERROR_INT("psame not defined", __func__, 1); *psame = 0; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if ((n = pixaaGetCount(paa, NULL)) == 0) return ERROR_INT("no pixa in paa", __func__, 1); pixa = pixaaGetPixa(paa, 0, L_CLONE); pixaVerifyDepth(pixa, &same, &maxd); /* init same, maxd with first pixa */ pixaDestroy(&pixa); for (i = 1; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaVerifyDepth(pixa, &samed, &d); pixaDestroy(&pixa); maxd = L_MAX(maxd, d); if (!samed || maxd != d) same = 0; } *psame = same; if (pmaxd) *pmaxd = maxd; return 0; } /*! * \brief pixaaVerifyDimensions() * * \param[in] paa * \param[out] psame 1 if all pix have the same depth; 0 otherwise * \param[out] pmaxw [optional] max width of all pix in pixaa * \param[out] pmaxh [optional] max height of all pix in pixaa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) It is considered to be an error if any pixa have no pix.
 * 
*/ l_ok pixaaVerifyDimensions(PIXAA *paa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 i, n, w, h, maxw, maxh, same, same2; PIXA *pixa; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!psame) return ERROR_INT("psame not defined", __func__, 1); *psame = 0; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if ((n = pixaaGetCount(paa, NULL)) == 0) return ERROR_INT("no pixa in paa", __func__, 1); /* Init same; init maxw and maxh from first pixa */ pixa = pixaaGetPixa(paa, 0, L_CLONE); pixaVerifyDimensions(pixa, &same, &maxw, &maxh); pixaDestroy(&pixa); for (i = 1; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaVerifyDimensions(pixa, &same2, &w, &h); pixaDestroy(&pixa); maxw = L_MAX(maxw, w); maxh = L_MAX(maxh, h); if (!same2 || maxw != w || maxh != h) same = 0; } *psame = same; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief pixaaIsFull() * * \param[in] paa * \param[out] pfull 1 if all pixa in the paa have full pix arrays * \return return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Does not require boxa associated with each pixa to be full.
 * 
*/ l_int32 pixaaIsFull(PIXAA *paa, l_int32 *pfull) { l_int32 i, n, full; PIXA *pixa; if (!pfull) return ERROR_INT("&full not defined", __func__, 0); *pfull = 0; if (!paa) return ERROR_INT("paa not defined", __func__, 0); n = pixaaGetCount(paa, NULL); full = 1; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaIsFull(pixa, &full, NULL); pixaDestroy(&pixa); if (!full) break; } *pfull = full; return 0; } /*---------------------------------------------------------------------* * Pixaa array modifiers * *---------------------------------------------------------------------*/ /*! * \brief pixaaInitFull() * * \param[in] paa typically empty * \param[in] pixa to be replicated into the entire pixa ptr array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This initializes a pixaa by filling up the entire pixa ptr array
 *          with copies of %pixa.  Any existing pixa are destroyed.
 *      (2) Example usage.  This function is useful to prepare for a
 *          random insertion (or replacement) of pixa into a pixaa.
 *          To randomly insert pixa into a pixaa, up to some index "max":
 *             Pixaa *paa = pixaaCreate(max);
 *             Pixa *pixa = pixaCreate(1);  // if you want little memory
 *             pixaaInitFull(paa, pixa);  // copy it to entire array
 *             pixaDestroy(&pixa);  // no longer needed
 *          The initialization allows the pixaa to always be properly filled.
 * 
*/ l_ok pixaaInitFull(PIXAA *paa, PIXA *pixa) { l_int32 i, n; PIXA *pixat; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = paa->nalloc; paa->n = n; for (i = 0; i < n; i++) { pixat = pixaCopy(pixa, L_COPY); pixaaReplacePixa(paa, i, pixat); } return 0; } /*! * \brief pixaaReplacePixa() * * \param[in] paa * \param[in] index to the index-th pixa * \param[in] pixa insert to replace existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This allows random insertion of a pixa into a pixaa, with
 *          destruction of any existing pixa at that location.
 *          The input pixa is now owned by the pixaa.
 *      (2) No other pixa in the array are affected.
 *      (3) The index must be within the allowed set.
 * 
*/ l_ok pixaaReplacePixa(PIXAA *paa, l_int32 index, PIXA *pixa) { if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (index < 0 || index >= paa->n) return ERROR_INT("index not valid", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); pixaDestroy(&(paa->pixa[index])); paa->pixa[index] = pixa; return 0; } /*! * \brief pixaaClear() * * \param[in] paa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys all pixa in the pixaa, and nulls the ptrs
 *          in the pixa ptr array.
 * 
*/ l_ok pixaaClear(PIXAA *paa) { l_int32 i, n; if (!paa) return ERROR_INT("paa not defined", __func__, 1); n = pixaaGetCount(paa, NULL); for (i = 0; i < n; i++) pixaDestroy(&paa->pixa[i]); paa->n = 0; return 0; } /*! * \brief pixaaTruncate() * * \param[in] paa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This identifies the largest index containing a pixa that
 *          has any pix within it, destroys all pixa above that index,
 *          and resets the count.
 * 
*/ l_ok pixaaTruncate(PIXAA *paa) { l_int32 i, n, np; PIXA *pixa; if (!paa) return ERROR_INT("paa not defined", __func__, 1); n = pixaaGetCount(paa, NULL); for (i = n - 1; i >= 0; i--) { pixa = pixaaGetPixa(paa, i, L_CLONE); if (!pixa) { paa->n--; continue; } np = pixaGetCount(pixa); pixaDestroy(&pixa); if (np == 0) { pixaDestroy(&paa->pixa[i]); paa->n--; } else { break; } } return 0; } /*---------------------------------------------------------------------* * Pixa serialized I/O * *---------------------------------------------------------------------*/ /*! * \brief pixaRead() * * \param[in] filename * \return pixa, or NULL on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ PIXA * pixaRead(const char *filename) { FILE *fp; PIXA *pixa; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXA *)ERROR_PTR("no libpng: can't read data", __func__, NULL); #endif /* !HAVE_LIBPNG */ if (!filename) return (PIXA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); pixa = pixaReadStream(fp); fclose(fp); if (!pixa) return (PIXA *)ERROR_PTR_1("pixa not read", filename, __func__, NULL); return pixa; } /*! * \brief pixaReadStream() * * \param[in] fp file stream * \return pixa, or NULL on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 *      (2) It is OK for the pixa to be empty.
 * 
*/ PIXA * pixaReadStream(FILE *fp) { l_int32 n, i, xres, yres, version; l_int32 ignore; BOXA *boxa; PIX *pix; PIXA *pixa; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXA *)ERROR_PTR("no libpng: can't read data", __func__, NULL); #endif /* !HAVE_LIBPNG */ if (!fp) return (PIXA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nPixa Version %d\n", &version) != 1) return (PIXA *)ERROR_PTR("not a pixa file", __func__, NULL); if (version != PIXA_VERSION_NUMBER) return (PIXA *)ERROR_PTR("invalid pixa version", __func__, NULL); if (fscanf(fp, "Number of pix = %d\n", &n) != 1) return (PIXA *)ERROR_PTR("not a pixa file", __func__, NULL); if (n < 0) return (PIXA *)ERROR_PTR("num pix ptrs < 0", __func__, NULL); if (n > MaxPixaPtrArraySize) return (PIXA *)ERROR_PTR("too many pix ptrs", __func__, NULL); if (n == 0) L_INFO("the pixa is empty\n", __func__); if ((boxa = boxaReadStream(fp)) == NULL) return (PIXA *)ERROR_PTR("boxa not made", __func__, NULL); if ((pixa = pixaCreate(n)) == NULL) { boxaDestroy(&boxa); return (PIXA *)ERROR_PTR("pixa not made", __func__, NULL); } boxaDestroy(&pixa->boxa); pixa->boxa = boxa; for (i = 0; i < n; i++) { if ((fscanf(fp, " pix[%d]: xres = %d, yres = %d\n", &ignore, &xres, &yres)) != 3) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("res reading error", __func__, NULL); } if ((pix = pixReadStreamPng(fp)) == NULL) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("pix not read", __func__, NULL); } pixSetXRes(pix, xres); pixSetYRes(pix, yres); pixaAddPix(pixa, pix, L_INSERT); } return pixa; } /*! * \brief pixaReadMem() * * \param[in] data of serialized pixa * \param[in] size of data in bytes * \return pixa, or NULL on error */ PIXA * pixaReadMem(const l_uint8 *data, size_t size) { FILE *fp; PIXA *pixa; if (!data) return (PIXA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIXA *)ERROR_PTR("stream not opened", __func__, NULL); pixa = pixaReadStream(fp); fclose(fp); if (!pixa) L_ERROR("pixa not read\n", __func__); return pixa; } /*! * \brief pixaWriteDebug() * * \param[in] fname * \param[in] pixa * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of pixaWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok pixaWriteDebug(const char *fname, PIXA *pixa) { if (LeptDebugOK) { return pixaWrite(fname, pixa); } else { L_INFO("write to named temp file %s is disabled\n", __func__, fname); return 0; } } /*! * \brief pixaWrite() * * \param[in] filename * \param[in] pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ l_ok pixaWrite(const char *filename, PIXA *pixa) { l_int32 ret; FILE *fp; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't write data", __func__, 1); #endif /* !HAVE_LIBPNG */ if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixaWriteStream(fp, pixa); fclose(fp); if (ret) return ERROR_INT_1("pixa not written to stream", filename, __func__, 1); return 0; } /*! * \brief pixaWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ l_ok pixaWriteStream(FILE *fp, PIXA *pixa) { l_int32 n, i; PIX *pix; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't write data", __func__, 1); #endif /* !HAVE_LIBPNG */ if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); fprintf(fp, "\nPixa Version %d\n", PIXA_VERSION_NUMBER); fprintf(fp, "Number of pix = %d\n", n); boxaWriteStream(fp, pixa->boxa); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) return ERROR_INT("pix not found", __func__, 1); fprintf(fp, " pix[%d]: xres = %d, yres = %d\n", i, pix->xres, pix->yres); pixWriteStreamPng(fp, pix, 0.0); pixDestroy(&pix); } return 0; } /*! * \brief pixaWriteMem() * * \param[out] pdata data of serialized pixa * \param[out] psize size of returned data * \param[in] pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a pixa in memory and puts the result in a buffer.
 * 
*/ l_ok pixaWriteMem(l_uint8 **pdata, size_t *psize, PIXA *pixa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixaWriteStream(fp, pixa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixaWriteStream(fp, pixa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief pixaReadBoth() * * \param[in] filename * \return pixa, or NULL on error * *
 * Notes:
 *      (1) This reads serialized files of either a pixa or a pixacomp,
 *          and returns a pixa in memory.  It requires png and jpeg libraries.
 * 
*/ PIXA * pixaReadBoth(const char *filename) { char buf[32]; char *sname; PIXA *pixa; PIXAC *pac; if (!filename) return (PIXA *)ERROR_PTR("filename not defined", __func__, NULL); l_getStructStrFromFile(filename, L_STR_NAME, &sname); if (!sname) return (PIXA *)ERROR_PTR("struct name not found", __func__, NULL); snprintf(buf, sizeof(buf), "%s", sname); LEPT_FREE(sname); if (strcmp(buf, "Pixacomp") == 0) { if ((pac = pixacompRead(filename)) == NULL) return (PIXA *)ERROR_PTR("pac not made", __func__, NULL); pixa = pixaCreateFromPixacomp(pac, L_COPY); pixacompDestroy(&pac); } else if (strcmp(buf, "Pixa") == 0) { if ((pixa = pixaRead(filename)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", __func__, NULL); } else { return (PIXA *)ERROR_PTR("invalid file type", __func__, NULL); } return pixa; } /*---------------------------------------------------------------------* * Pixaa serialized I/O * *---------------------------------------------------------------------*/ /*! * \brief pixaaReadFromFiles() * * \param[in] dirname directory * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] first 0-based * \param[in] nfiles use 0 for everything from %first to the end * \return paa, or NULL on error or if no pixa files are found. * *
 * Notes:
 *      (1) The files must be serialized pixa files (e.g., *.pa)
 *          If some files cannot be read, warnings are issued.
 *      (2) Use %substr to filter filenames in the directory.  If
 *          %substr == NULL, this takes all files.
 *      (3) After filtering, use %first and %nfiles to select
 *          a contiguous set of files, that have been lexically
 *          sorted in increasing order.
 * 
*/ PIXAA * pixaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname; l_int32 i, n; PIXA *pixa; PIXAA *paa; SARRAY *sa; if (!dirname) return (PIXAA *)ERROR_PTR("dirname not defined", __func__, NULL); sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); if (!sa || ((n = sarrayGetCount(sa)) == 0)) { sarrayDestroy(&sa); return (PIXAA *)ERROR_PTR("no pixa files found", __func__, NULL); } paa = pixaaCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixa = pixaRead(fname)) == NULL) { L_ERROR("pixa not read for %d-th file", __func__, i); continue; } pixaaAddPixa(paa, pixa, L_INSERT); } sarrayDestroy(&sa); return paa; } /*! * \brief pixaaRead() * * \param[in] filename * \return paa, or NULL on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ PIXAA * pixaaRead(const char *filename) { FILE *fp; PIXAA *paa; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXAA *)ERROR_PTR("no libpng: can't read data", __func__, NULL); #endif /* !HAVE_LIBPNG */ if (!filename) return (PIXAA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXAA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); paa = pixaaReadStream(fp); fclose(fp); if (!paa) return (PIXAA *)ERROR_PTR_1("paa not read", filename, __func__, NULL); return paa; } /*! * \brief pixaaReadStream() * * \param[in] fp file stream * \return paa, or NULL on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 *      (2) It is OK for the pixaa to be empty.
 * 
*/ PIXAA * pixaaReadStream(FILE *fp) { l_int32 n, i, version; l_int32 ignore; BOXA *boxa; PIXA *pixa; PIXAA *paa; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXAA *)ERROR_PTR("no libpng: can't read data", __func__, NULL); #endif /* !HAVE_LIBPNG */ if (!fp) return (PIXAA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nPixaa Version %d\n", &version) != 1) return (PIXAA *)ERROR_PTR("not a pixaa file", __func__, NULL); if (version != PIXAA_VERSION_NUMBER) return (PIXAA *)ERROR_PTR("invalid pixaa version", __func__, NULL); if (fscanf(fp, "Number of pixa = %d\n", &n) != 1) return (PIXAA *)ERROR_PTR("not a pixaa file", __func__, NULL); if (n < 0) return (PIXAA *)ERROR_PTR("num pixa ptrs < 0", __func__, NULL); if (n > MaxPixaaPtrArraySize) return (PIXAA *)ERROR_PTR("too many pixa ptrs", __func__, NULL); if (n == 0) L_INFO("the pixaa is empty\n", __func__); if ((paa = pixaaCreate(n)) == NULL) return (PIXAA *)ERROR_PTR("paa not made", __func__, NULL); if ((boxa = boxaReadStream(fp)) == NULL) { pixaaDestroy(&paa); return (PIXAA *)ERROR_PTR("boxa not made", __func__, NULL); } boxaDestroy(&paa->boxa); paa->boxa = boxa; for (i = 0; i < n; i++) { if ((fscanf(fp, "\n\n --------------- pixa[%d] ---------------\n", &ignore)) != 1) { pixaaDestroy(&paa); return (PIXAA *)ERROR_PTR("text reading", __func__, NULL); } if ((pixa = pixaReadStream(fp)) == NULL) { pixaaDestroy(&paa); return (PIXAA *)ERROR_PTR("pixa not read", __func__, NULL); } pixaaAddPixa(paa, pixa, L_INSERT); } return paa; } /*! * \brief pixaaReadMem() * * \param[in] data of serialized pixaa * \param[in] size of data in bytes * \return paa, or NULL on error */ PIXAA * pixaaReadMem(const l_uint8 *data, size_t size) { FILE *fp; PIXAA *paa; if (!data) return (PIXAA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIXAA *)ERROR_PTR("stream not opened", __func__, NULL); paa = pixaaReadStream(fp); fclose(fp); if (!paa) L_ERROR("paa not read\n", __func__); return paa; } /*! * \brief pixaaWrite() * * \param[in] filename * \param[in] paa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ l_ok pixaaWrite(const char *filename, PIXAA *paa) { l_int32 ret; FILE *fp; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't read data", __func__, 1); #endif /* !HAVE_LIBPNG */ if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!paa) return ERROR_INT("paa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixaaWriteStream(fp, paa); fclose(fp); if (ret) return ERROR_INT_1("paa not written to stream", filename, __func__, 1); return 0; } /*! * \brief pixaaWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] paa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pix are stored in the file as png.
 *          If the png library is not linked, this will fail.
 * 
*/ l_ok pixaaWriteStream(FILE *fp, PIXAA *paa) { l_int32 n, i; PIXA *pixa; #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't read data", __func__, 1); #endif /* !HAVE_LIBPNG */ if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!paa) return ERROR_INT("paa not defined", __func__, 1); n = pixaaGetCount(paa, NULL); fprintf(fp, "\nPixaa Version %d\n", PIXAA_VERSION_NUMBER); fprintf(fp, "Number of pixa = %d\n", n); boxaWriteStream(fp, paa->boxa); for (i = 0; i < n; i++) { if ((pixa = pixaaGetPixa(paa, i, L_CLONE)) == NULL) return ERROR_INT("pixa not found", __func__, 1); fprintf(fp, "\n\n --------------- pixa[%d] ---------------\n", i); pixaWriteStream(fp, pixa); pixaDestroy(&pixa); } return 0; } /*! * \brief pixaaWriteMem() * * \param[out] pdata data of serialized pixaa * \param[out] psize size of returned data * \param[in] paa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a pixaa in memory and puts the result in a buffer.
 * 
*/ l_ok pixaaWriteMem(l_uint8 **pdata, size_t *psize, PIXAA *paa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!paa) return ERROR_INT("paa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixaaWriteStream(fp, paa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixaaWriteStream(fp, paa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } leptonica-1.86.0/src/pixacc.c000066400000000000000000000221011506303110300157520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixacc.c *
 *
 *      Pixacc creation, destruction
 *           PIXACC   *pixaccCreate()
 *           PIXACC   *pixaccCreateFromPix()
 *           void      pixaccDestroy()
 *
 *      Pixacc finalization
 *           PIX      *pixaccFinal()
 *
 *      Pixacc accessors
 *           PIX      *pixaccGetPix()
 *           l_int32   pixaccGetOffset()
 *
 *      Pixacc accumulators
 *           l_int32   pixaccAdd()
 *           l_int32   pixaccSubtract()
 *           l_int32   pixaccMultConst()
 *           l_int32   pixaccMultConstAccumulate()
 *
 *  This is a simple interface for some of the pixel arithmetic operations
 *  in pixarith.c.  These are easy to code up, but not as fast as
 *  hand-coded functions that do arithmetic on corresponding pixels.
 *
 *  Suppose you want to make a linear combination of pix1 and pix2:
 *     pixd = 0.4 * pix1 + 0.6 * pix2
 *  where pix1 and pix2 are the same size and have depth 'd'.  Then:
 *     Pixacc *pacc = pixaccCreateFromPix(pix1, 0);  // first; addition only
 *     pixaccMultConst(pacc, 0.4);
 *     pixaccMultConstAccumulate(pacc, pix2, 0.6);  // Add in 0.6 of the second
 *     pixd = pixaccFinal(pacc, d);  // Get the result
 *     pixaccDestroy(&pacc);
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" /*---------------------------------------------------------------------* * Pixacc creation, destruction * *---------------------------------------------------------------------*/ /*! * \brief pixaccCreate() * * \param[in] w, h of 32 bpp internal Pix * \param[in] negflag 0 if only positive numbers are involved; * 1 if there will be negative numbers * \return pixacc, or NULL on error * *
 * Notes:
 *      (1) Use %negflag = 1 for safety if any negative numbers are going
 *          to be used in the chain of operations.  Negative numbers
 *          arise, e.g., by subtracting a pix, or by adding a pix
 *          that has been pre-multiplied by a negative number.
 *      (2) Initializes the internal 32 bpp pix, similarly to the
 *          initialization in pixInitAccumulate().
 * 
*/ PIXACC * pixaccCreate(l_int32 w, l_int32 h, l_int32 negflag) { PIXACC *pixacc; pixacc = (PIXACC *)LEPT_CALLOC(1, sizeof(PIXACC)); pixacc->w = w; pixacc->h = h; if ((pixacc->pix = pixCreate(w, h, 32)) == NULL) { pixaccDestroy(&pixacc); return (PIXACC *)ERROR_PTR("pix not made", __func__, NULL); } if (negflag) { pixacc->offset = 0x40000000; pixSetAllArbitrary(pixacc->pix, pixacc->offset); } return pixacc; } /*! * \brief pixaccCreateFromPix() * * \param[in] pix * \param[in] negflag 0 if only positive numbers are involved; * 1 if there will be negative numbers * \return pixacc, or NULL on error * *
 * Notes:
 *      (1) See pixaccCreate()
 * 
*/ PIXACC * pixaccCreateFromPix(PIX *pix, l_int32 negflag) { l_int32 w, h; PIXACC *pixacc; if (!pix) return (PIXACC *)ERROR_PTR("pix not defined", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); pixacc = pixaccCreate(w, h, negflag); pixaccAdd(pixacc, pix); return pixacc; } /*! * \brief pixaccDestroy() * * \param[in,out] ppixacc will be set to null before returning * \return void * *
 * Notes:
 *      (1) Always nulls the input ptr.
 * 
*/ void pixaccDestroy(PIXACC **ppixacc) { PIXACC *pixacc; if (ppixacc == NULL) { L_WARNING("ptr address is NULL!", __func__); return; } if ((pixacc = *ppixacc) == NULL) return; pixDestroy(&pixacc->pix); LEPT_FREE(pixacc); *ppixacc = NULL; } /*---------------------------------------------------------------------* * Pixacc finalization * *---------------------------------------------------------------------*/ /*! * \brief pixaccFinal() * * \param[in] pixacc * \param[in] outdepth 8, 16 or 32 bpp * \return pixd 8, 16 or 32 bpp, or NULL on error */ PIX * pixaccFinal(PIXACC *pixacc, l_int32 outdepth) { if (!pixacc) return (PIX *)ERROR_PTR("pixacc not defined", __func__, NULL); return pixFinalAccumulate(pixaccGetPix(pixacc), pixaccGetOffset(pixacc), outdepth); } /*---------------------------------------------------------------------* * Pixacc accessors * *---------------------------------------------------------------------*/ /*! * \brief pixaccGetPix() * * \param[in] pixacc * \return pix, or NULL on error */ PIX * pixaccGetPix(PIXACC *pixacc) { if (!pixacc) return (PIX *)ERROR_PTR("pixacc not defined", __func__, NULL); return pixacc->pix; } /*! * \brief pixaccGetOffset() * * \param[in] pixacc * \return offset, or -1 on error */ l_int32 pixaccGetOffset(PIXACC *pixacc) { if (!pixacc) return ERROR_INT("pixacc not defined", __func__, -1); return pixacc->offset; } /*---------------------------------------------------------------------* * Pixacc accumulators * *---------------------------------------------------------------------*/ /*! * \brief pixaccAdd() * * \param[in] pixacc * \param[in] pix to be added * \return 0 if OK, 1 on error */ l_ok pixaccAdd(PIXACC *pixacc, PIX *pix) { if (!pixacc) return ERROR_INT("pixacc not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_ADD); return 0; } /*! * \brief pixaccSubtract() * * \param[in] pixacc * \param[in] pix to be subtracted * \return 0 if OK, 1 on error */ l_ok pixaccSubtract(PIXACC *pixacc, PIX *pix) { if (!pixacc) return ERROR_INT("pixacc not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_SUBTRACT); return 0; } /*! * \brief pixaccMultConst() * * \param[in] pixacc * \param[in] factor * \return 0 if OK, 1 on error */ l_ok pixaccMultConst(PIXACC *pixacc, l_float32 factor) { if (!pixacc) return ERROR_INT("pixacc not defined", __func__, 1); pixMultConstAccumulate(pixaccGetPix(pixacc), factor, pixaccGetOffset(pixacc)); return 0; } /*! * \brief pixaccMultConstAccumulate() * * \param[in] pixacc * \param[in] pix * \param[in] factor * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This creates a temp pix that is %pix multiplied by the
 *          constant %factor.  It then adds that into %pixacc.
 * 
*/ l_ok pixaccMultConstAccumulate(PIXACC *pixacc, PIX *pix, l_float32 factor) { l_int32 w, h, d, negflag; PIX *pixt; PIXACC *pacct; if (!pixacc) return ERROR_INT("pixacc not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (factor == 0.0) return 0; pixGetDimensions(pix, &w, &h, &d); negflag = (factor > 0.0) ? 0 : 1; pacct = pixaccCreate(w, h, negflag); pixaccAdd(pacct, pix); pixaccMultConst(pacct, factor); pixt = pixaccFinal(pacct, d); pixaccAdd(pixacc, pixt); pixaccDestroy(&pacct); pixDestroy(&pixt); return 0; } leptonica-1.86.0/src/pixafunc1.c000066400000000000000000002763751506303110300164310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixafunc1.c *
 *
 *      Filters
 *           PIX      *pixSelectBySize()
 *           PIXA     *pixaSelectBySize()
 *           NUMA     *pixaMakeSizeIndicator()
 *
 *           PIX      *pixSelectByPerimToAreaRatio()
 *           PIXA     *pixaSelectByPerimToAreaRatio()
 *           PIX      *pixSelectByPerimSizeRatio()
 *           PIXA     *pixaSelectByPerimSizeRatio()
 *           PIX      *pixSelectByAreaFraction()
 *           PIXA     *pixaSelectByAreaFraction()
 *           PIX      *pixSelectByArea()
 *           PIXA     *pixaSelectByArea()
 *           PIX      *pixSelectByWidthHeightRatio()
 *           PIXA     *pixaSelectByWidthHeightRatio()
 *           PIXA     *pixaSelectByNumConnComp()
 *
 *           PIXA     *pixaSelectWithIndicator()
 *           l_int32   pixRemoveWithIndicator()
 *           l_int32   pixAddWithIndicator()
 *           PIXA     *pixaSelectWithString()
 *           PIX      *pixaRenderComponent()
 *
 *      Sort functions
 *           PIXA     *pixaSort()
 *           PIXA     *pixaBinSort()
 *           PIXA     *pixaSortByIndex()
 *           PIXAA    *pixaSort2dByIndex()
 *
 *      Pixa and Pixaa range selection
 *           PIXA     *pixaSelectRange()
 *           PIXAA    *pixaaSelectRange()
 *
 *      Pixa and Pixaa scaling
 *           PIXAA    *pixaaScaleToSize()
 *           PIXAA    *pixaaScaleToSizeVar()
 *           PIXA     *pixaScaleToSize()
 *           PIXA     *pixaScaleToSizeRel()
 *           PIXA     *pixaScale()
 *           PIXA     *pixaScaleBySampling()
 *
 *      Pixa rotation and translation
 *           PIXA     *pixaRotate()
 *           PIXA     *pixaRotateOrth()
 *           PIXA     *pixaTranslate()
 *
 *      Miscellaneous
 *           PIXA     *pixaAddBorderGeneral()
 *           PIXA     *pixaaFlattenToPixa()
 *           l_int32   pixaaSizeRange()
 *           l_int32   pixaSizeRange()
 *           PIXA     *pixaClipToPix()
 *           PIXA     *pixaClipToForeground()
 *           l_int32   pixaGetRenderingDepth()
 *           l_int32   pixaHasColor()
 *           l_int32   pixaAnyColormaps()
 *           l_int32   pixaGetDepthInfo()
 *           PIXA     *pixaConvertToSameDepth()
 *           PIXA     *pixaConvertToGivenDepth()
 *           l_int32   pixaEqual()
 *           l_int32   pixaSetFullSizeBoxa()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* For more than this number of c.c. in a binarized image of * semi-perimeter (w + h) about 5000 or less, the O(n) binsort * is faster than the O(nlogn) shellsort. */ static const l_int32 MinCompsForBinSort = 200; /* Don't rotate any angle smaller than this */ static const l_float32 MinAngleToRotate = 0.001f; /* radians; ~0.06 deg */ /*---------------------------------------------------------------------* * Filters * *---------------------------------------------------------------------*/ /* * These filters work on the connected components of 1 bpp images. * They are typically used on pixa that have been generated from a Pix * using pixConnComp(), so that the corresponding Boxa is available. * * The filters remove or retain c.c. based on these properties: * (a) size [pixaFindDimensions()] * (b) area-to-perimeter ratio [pixaFindAreaPerimRatio()] * (c) foreground area as a fraction of bounding box area (w * h) * [pixaFindForegroundArea()] * (d) number of foreground pixels [pixaCountPixels()] * (e) width/height aspect ratio [pixFindWidthHeightRatio()] * * We provide two different high-level interfaces: * (1) Functions that use one of the filters on either * a pix or the pixa of components. * (2) A general method that generates numas of indicator functions, * logically combines them, and efficiently removes or adds * the selected components. * * For interface (1), the filtering is performed with a single function call. * This is the easiest way to do simple filtering. These functions * are named pixSelectBy*() and pixaSelectBy*(), where the '*' is one of: * Size * PerimToAreaRatio * PerimSizeRatio * Area * AreaFraction * WidthHeightRatio * * For more complicated filtering, use the general method (2). * The numa indicator functions for a pixa are generated by these functions: * pixaFindDimensions() * pixaFindPerimToAreaRatio() * pixaFindPerimSizeRatio() * pixaFindAreaFraction() * pixaCountPixels() * pixaFindWidthHeightRatio() * pixaFindWidthHeightProduct() * * Here is an illustration using the general method. Suppose you want * all 8-connected components that have a height greater than 40 pixels, * a width not more than 30 pixels, between 150 and 300 fg pixels, * and a perimeter-to-size ratio between 1.2 and 2.0. * * // Generate the pixa of 8 cc pieces. * boxa = pixConnComp(pixs, &pixa, 8); * * // Extract the data we need about each component. * pixaFindDimensions(pixa, &naw, &nah); * nas = pixaCountPixels(pixa); * nar = pixaFindPerimSizeRatio(pixa); * * // Build the indicator arrays for the set of components, * // based on thresholds and selection criteria. * na1 = numaMakeThresholdIndicator(nah, 40, L_SELECT_IF_GT); * na2 = numaMakeThresholdIndicator(naw, 30, L_SELECT_IF_LTE); * na3 = numaMakeThresholdIndicator(nas, 150, L_SELECT_IF_GTE); * na4 = numaMakeThresholdIndicator(nas, 300, L_SELECT_IF_LTE); * na5 = numaMakeThresholdIndicator(nar, 1.2, L_SELECT_IF_GTE); * na6 = numaMakeThresholdIndicator(nar, 2.0, L_SELECT_IF_LTE); * * // Combine the indicator arrays logically to find * // the components that will be retained. * nad = numaLogicalOp(NULL, na1, na2, L_INTERSECTION); * numaLogicalOp(nad, nad, na3, L_INTERSECTION); * numaLogicalOp(nad, nad, na4, L_INTERSECTION); * numaLogicalOp(nad, nad, na5, L_INTERSECTION); * numaLogicalOp(nad, nad, na6, L_INTERSECTION); * * // Invert to get the components that will be removed. * numaInvert(nad, nad); * * // Remove the components, in-place. * pixRemoveWithIndicator(pixs, pixa, nad); */ /*! * \brief pixSelectBySize() * * \param[in] pixs 1 bpp * \param[in] width, height threshold dimensions * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 otherwise * \return filtered pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) If the selection type is L_SELECT_WIDTH, the input
 *          height is ignored, and v.v.
 *      (4) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ PIX * pixSelectBySize(PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid relation", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Identify and select the components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectBySize(pixas, width, height, type, relation, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectBySize() * * \param[in] pixas * \param[in] width, height threshold dimensions * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 otherwise * \return pixad, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) If the selection type is L_SELECT_WIDTH, the input
 *          height is ignored, and v.v.
 *      (4) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ PIXA * pixaSelectBySize(PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged) { NUMA *na; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid relation", __func__, NULL); /* Compute the indicator array for saving components */ na = pixaMakeSizeIndicator(pixas, width, height, type, relation); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, na, pchanged); numaDestroy(&na); return pixad; } /*! * \brief pixaMakeSizeIndicator() * * \param[in] pixa * \param[in] width, height threshold dimensions * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return na indicator array, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) If the selection type is L_SELECT_WIDTH, the input
 *          height is ignored, and v.v.
 *      (3) To keep small components, use relation = L_SELECT_IF_LT or
 *          L_SELECT_IF_LTE.
 *          To keep large components, use relation = L_SELECT_IF_GT or
 *          L_SELECT_IF_GTE.
 * 
*/ NUMA * pixaMakeSizeIndicator(PIXA *pixa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (NUMA *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", __func__, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; pixaGetPixDimensions(pixa, i, &w, &h, NULL); switch (type) { case L_SELECT_WIDTH: if ((relation == L_SELECT_IF_LT && w < width) || (relation == L_SELECT_IF_GT && w > width) || (relation == L_SELECT_IF_LTE && w <= width) || (relation == L_SELECT_IF_GTE && w >= width)) ival = 1; break; case L_SELECT_HEIGHT: if ((relation == L_SELECT_IF_LT && h < height) || (relation == L_SELECT_IF_GT && h > height) || (relation == L_SELECT_IF_LTE && h <= height) || (relation == L_SELECT_IF_GTE && h >= height)) ival = 1; break; case L_SELECT_IF_EITHER: if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) ival = 1; break; case L_SELECT_IF_BOTH: if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) ival = 1; break; default: L_WARNING("can't get here!\n", __func__); break; } numaAddNumber(na, ival); } return na; } /*! * \brief pixSelectByPerimToAreaRatio() * * \param[in] pixs 1 bpp * \param[in] thresh threshold ratio of fg boundary to fg pixels * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) This filters "thick" components, where a thick component
 *          is defined to have a ratio of boundary to interior pixels
 *          that is smaller than a given threshold value.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the thicker
 *          components, and L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIX * pixSelectByPerimToAreaRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter thin components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByPerimToAreaRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectByPerimToAreaRatio() * * \param[in] pixas * \param[in] thresh threshold ratio of fg boundary to fg pixels * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) See pixSelectByPerimToAreaRatio().
 * 
*/ PIXA * pixaSelectByPerimToAreaRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); /* Compute component ratios. */ na = pixaFindPerimToAreaRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * \brief pixSelectByPerimSizeRatio() * * \param[in] pixs 1 bpp * \param[in] thresh threshold ratio of fg boundary to fg pixels * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the size of the
 *          components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) This filters components with smooth vs. dendritic shape, using
 *          the ratio of the fg boundary pixels to the circumference of
 *          the bounding box, and comparing it to a threshold value.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the smooth
 *          boundary components, and L_SELECT_IF_GT or L_SELECT_IF_GTE
 *          to remove them.
 * 
*/ PIX * pixSelectByPerimSizeRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter thin components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByPerimSizeRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectByPerimSizeRatio() * * \param[in] pixas * \param[in] thresh threshold ratio of fg boundary to b.b. circumference * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) See pixSelectByPerimSizeRatio().
 * 
*/ PIXA * pixaSelectByPerimSizeRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); /* Compute component ratios. */ na = pixaFindPerimSizeRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * \brief pixSelectByAreaFraction() * * \param[in] pixs 1 bpp * \param[in] thresh threshold ratio of fg pixels to (w * h) * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the amount of foreground
 *          coverage of the components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) This filters components based on the fraction of fg pixels
 *          of the component in its bounding box.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold fraction of foreground, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIX * pixSelectByAreaFraction(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByAreaFraction(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectByAreaFraction() * * \param[in] pixas * \param[in] thresh threshold ratio of fg pixels to (w * h) * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) This filters components based on the fraction of fg pixels
 *          of the component in its bounding box.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold fraction of foreground, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIXA * pixaSelectByAreaFraction(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); /* Compute component ratios. */ na = pixaFindAreaFraction(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * \brief pixSelectByArea() * * \param[in] pixs 1 bpp * \param[in] thresh threshold number of FG pixels * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the number of foreground
 *          pixels in the components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) This filters components based on the number of fg pixels
 *          in each component.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold number of fg pixels, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIX * pixSelectByArea(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByArea(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectByArea() * * \param[in] pixas * \param[in] thresh threshold number of fg pixels * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) This filters components based on the number of fg pixels
 *          in the component.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold number of fg pixels, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIXA * pixaSelectByArea(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); /* Compute area of each component */ na = pixaCountPixels(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * \brief pixSelectByWidthHeightRatio() * * \param[in] pixs 1 bpp * \param[in] thresh threshold ratio of width/height * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The args specify constraints on the width-to-height ratio
 *          for components that are kept.
 *      (2) If unchanged, returns a copy of pixs.  Otherwise,
 *          returns a new pix with the filtered components.
 *      (3) This filters components based on the width-to-height ratios.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold ratio, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIX * pixSelectByWidthHeightRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByWidthHeightRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * \brief pixaSelectByWidthHeightRatio() * * \param[in] pixas * \param[in] thresh threshold ratio of width/height * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) This filters components based on the width-to-height ratio
 *          of each pix.
 *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
 *          with less than the threshold ratio, and
 *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
 * 
*/ PIXA * pixaSelectByWidthHeightRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); /* Compute component ratios. */ na = pixaFindWidthHeightRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * \brief pixaSelectByNumConnComp() * * \param[in] pixas * \param[in] nmin minimum number of components * \param[in] nmax maximum number of components * \param[in] connectivity 4 or 8 * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) This filters by the number of connected components in
 *          a given range.
 * 
*/ PIXA * pixaSelectByNumConnComp(PIXA *pixas, l_int32 nmin, l_int32 nmax, l_int32 connectivity, l_int32 *pchanged) { l_int32 n, i, count; NUMA *na; PIX *pix; PIXA *pixad; if (pchanged) *pchanged = 0; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (nmin > nmax) return (PIXA *)ERROR_PTR("nmin > nmax", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); /* Get indicator array based on number of c.c. */ n = pixaGetCount(pixas); na = numaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pixCountConnComp(pix, connectivity, &count); if (count >= nmin && count <= nmax) numaAddNumber(na, 1); else numaAddNumber(na, 0); pixDestroy(&pix); } /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, na, pchanged); numaDestroy(&na); return pixad; } /*! * \brief pixaSelectWithIndicator() * * \param[in] pixas * \param[in] na indicator numa * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa clone if no components are removed.
 *      (2) Uses pix and box clones in the new pixa.
 *      (3) The indicator numa has values 0 (ignore) and 1 (accept).
 *      (4) If the source boxa is not fully populated, it is left
 *          empty in the dest pixa.
 * 
*/ PIXA * pixaSelectWithIndicator(PIXA *pixas, NUMA *na, l_int32 *pchanged) { l_int32 i, n, nbox, ival, nsave; BOX *box; PIX *pix1; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!na) return (PIXA *)ERROR_PTR("na not defined", __func__, NULL); nsave = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) nsave++; } if (nsave == n) { if (pchanged) *pchanged = FALSE; return pixaCopy(pixas, L_CLONE); } if (pchanged) *pchanged = TRUE; pixad = pixaCreate(nsave); nbox = pixaGetBoxaCount(pixas); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 0) continue; pix1 = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixad, pix1, L_INSERT); if (nbox == n) { /* fully populated boxa */ box = pixaGetBox(pixas, i, L_CLONE); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*! * \brief pixRemoveWithIndicator() * * \param[in] pixs 1 bpp pix from which components are removed; in-place * \param[in] pixa of connected components in pixs * \param[in] na numa indicator: remove components corresponding to 1s * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This complements pixAddWithIndicator().   Here, the selected
 *          components are set subtracted from pixs.
 * 
*/ l_ok pixRemoveWithIndicator(PIX *pixs, PIXA *pixa, NUMA *na) { l_int32 i, n, ival, x, y, w, h; BOX *box; PIX *pix; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); n = pixaGetCount(pixa); if (n != numaGetCount(na)) return ERROR_INT("pixa and na sizes not equal", __func__, 1); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) { pix = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); } } return 0; } /*! * \brief pixAddWithIndicator() * * \param[in] pixs 1 bpp pix from which components are added; in-place * \param[in] pixa of connected components, some of which will be put * into pixs * \param[in] na numa indicator: add components corresponding to 1s * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This complements pixRemoveWithIndicator().   Here, the selected
 *          components are added to pixs.
 * 
*/ l_ok pixAddWithIndicator(PIX *pixs, PIXA *pixa, NUMA *na) { l_int32 i, n, ival, x, y, w, h; BOX *box; PIX *pix; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!na) return ERROR_INT("na not defined", __func__, 1); n = pixaGetCount(pixa); if (n != numaGetCount(na)) return ERROR_INT("pixa and na sizes not equal", __func__, 1); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) { pix = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); } } return 0; } /*! * \brief pixaSelectWithString() * * \param[in] pixas * \param[in] str string of indices into pixa, giving the pix to * be selected * \param[out] perror [optional] 1 if any indices are invalid; * 0 if all indices are valid * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Returns a pixa with copies of selected pix.
 *      (2) Associated boxes are also copied, if fully populated.
 * 
*/ PIXA * pixaSelectWithString(PIXA *pixas, const char *str, l_int32 *perror) { l_int32 i, nval, npix, nbox, val, imaxval; l_float32 maxval; BOX *box; NUMA *na; PIX *pix1; PIXA *pixad; if (perror) *perror = 0; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!str) return (PIXA *)ERROR_PTR("str not defined", __func__, NULL); if ((na = numaCreateFromString(str)) == NULL) return (PIXA *)ERROR_PTR("na not made", __func__, NULL); if ((nval = numaGetCount(na)) == 0) { numaDestroy(&na); return (PIXA *)ERROR_PTR("no indices found", __func__, NULL); } numaGetMax(na, &maxval, NULL); imaxval = (l_int32)(maxval + 0.1); nbox = pixaGetBoxaCount(pixas); npix = pixaGetCount(pixas); if (imaxval >= npix) { if (perror) *perror = 1; L_ERROR("max index = %d, size of pixa = %d\n", __func__, imaxval, npix); } pixad = pixaCreate(nval); for (i = 0; i < nval; i++) { numaGetIValue(na, i, &val); if (val < 0 || val >= npix) { L_ERROR("index %d out of range of pix\n", __func__, val); continue; } pix1 = pixaGetPix(pixas, val, L_COPY); pixaAddPix(pixad, pix1, L_INSERT); if (nbox == npix) { /* fully populated boxa */ box = pixaGetBox(pixas, val, L_COPY); pixaAddBox(pixad, box, L_INSERT); } } numaDestroy(&na); return pixad; } /*! * \brief pixaRenderComponent() * * \param[in] pixs [optional] 1 bpp pix * \param[in] pixa of 1 bpp connected components, one of which will * be rendered in pixs, with its origin determined * by the associated box. * \param[in] index of component to be rendered * \return pixd, or NULL on error * *
 * Notes:
 *      (1) If pixs is null, this generates an empty pix of a size determined
 *          by union of the component bounding boxes, and including the origin.
 *      (2) The selected component is blitted into pixs.
 * 
*/ PIX * pixaRenderComponent(PIX *pixs, PIXA *pixa, l_int32 index) { l_int32 n, x, y, w, h, same, maxd; BOX *box; BOXA *boxa; PIX *pix; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, pixs); n = pixaGetCount(pixa); if (index < 0 || index >= n) return (PIX *)ERROR_PTR("invalid index", __func__, pixs); if (pixs && (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixs); pixaVerifyDepth(pixa, &same, &maxd); if (maxd > 1) return (PIX *)ERROR_PTR("not all pix with d == 1", __func__, pixs); boxa = pixaGetBoxa(pixa, L_CLONE); if (!pixs) { boxaGetExtent(boxa, &w, &h, NULL); pixs = pixCreate(w, h, 1); } pix = pixaGetPix(pixa, index, L_CLONE); box = boxaGetBox(boxa, index, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); boxaDestroy(&boxa); return pixs; } /*---------------------------------------------------------------------* * Sort functions * *---------------------------------------------------------------------*/ /*! * \brief pixaSort() * * \param[in] pixas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_MIN_DIMENSION, * L_SORT_BY_MAX_DIMENSION, L_SORT_BY_PERIMETER, * L_SORT_BY_AREA, L_SORT_BY_ASPECT_RATIO * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex [optional] index of sorted order into * original array * \param[in] copyflag L_COPY, L_CLONE * \return pixad sorted version of pixas, or NULL on error * *
 * Notes:
 *      (1) This sorts based on the data in the boxa.  If the boxa
 *          count is not the same as the pixa count, this returns an error.
 *      (2) If the boxa is empty, it makes one corresponding to the
 *          dimensions of each pix, which allows meaningful sorting on
 *          all types except x and y.
 *      (3) The copyflag refers to the pix and box copies that are
 *          inserted into the sorted pixa.  These are either L_COPY
 *          or L_CLONE.
 * 
*/ PIXA * pixaSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, n, nb, x, y, w, h; BOXA *boxa; NUMA *na, *naindex; PIXA *pixad; if (pnaindex) *pnaindex = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_MIN_DIMENSION && sorttype != L_SORT_BY_MAX_DIMENSION && sorttype != L_SORT_BY_PERIMETER && sorttype != L_SORT_BY_AREA && sorttype != L_SORT_BY_ASPECT_RATIO) return (PIXA *)ERROR_PTR("invalid sort type", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PIXA *)ERROR_PTR("invalid sort order", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copy flag", __func__, NULL); /* Check the pixa and boxa counts. Make a boxa if required. */ if ((n = pixaGetCount(pixas)) == 0) { L_INFO("no pix in pixa\n", __func__); return pixaCopy(pixas, copyflag); } if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ return (PIXA *)ERROR_PTR("boxa not found!", __func__, NULL); nb = boxaGetCount(boxa); if (nb == 0) { pixaSetFullSizeBoxa(pixas); nb = n; boxa = pixas->boxa; /* not owned */ if (sorttype == L_SORT_BY_X || sorttype == L_SORT_BY_Y) L_WARNING("sort by x or y where all values are 0\n", __func__); } if (nb != n) return (PIXA *)ERROR_PTR("boxa and pixa counts differ", __func__, NULL); /* Use O(n) binsort if possible */ if (n > MinCompsForBinSort && ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || (sorttype == L_SORT_BY_PERIMETER))) return pixaBinSort(pixas, sorttype, sortorder, pnaindex, copyflag); /* Build up numa of specific data */ if ((na = numaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_MIN_DIMENSION: numaAddNumber(na, L_MIN(w, h)); break; case L_SORT_BY_MAX_DIMENSION: numaAddNumber(na, L_MAX(w, h)); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; case L_SORT_BY_AREA: numaAddNumber(na, w * h); break; case L_SORT_BY_ASPECT_RATIO: numaAddNumber(na, (l_float32)w / (l_float32)h); break; default: L_WARNING("invalid sort type\n", __func__); } } /* Get the sort index for data array */ naindex = numaGetSortIndex(na, sortorder); numaDestroy(&na); if (!naindex) return (PIXA *)ERROR_PTR("naindex not made", __func__, NULL); /* Build up sorted pixa using sort index */ if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) { numaDestroy(&naindex); return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); } if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return pixad; } /*! * \brief pixaBinSort() * * \param[in] pixas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex [optional] index of sorted order into * original array * \param[in] copyflag L_COPY, L_CLONE * \return pixad sorted version of pixas, or NULL on error * *
 * Notes:
 *      (1) This sorts based on the data in the boxa.  If the boxa
 *          count is not the same as the pixa count, this returns an error.
 *      (2) The copyflag refers to the pix and box copies that are
 *          inserted into the sorted pixa.  These are either L_COPY
 *          or L_CLONE.
 *      (3) For a large number of boxes (say, greater than 1000), this
 *          O(n) binsort is much faster than the O(nlogn) shellsort.
 *          For 5000 components, this is over 20x faster than boxaSort().
 *      (4) Consequently, pixaSort() calls this function if it will
 *          likely go much faster.
 * 
*/ PIXA * pixaBinSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, n, x, y, w, h; BOXA *boxa; NUMA *na, *naindex; PIXA *pixad; if (pnaindex) *pnaindex = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_PERIMETER) return (PIXA *)ERROR_PTR("invalid sort type", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PIXA *)ERROR_PTR("invalid sort order", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copy flag", __func__, NULL); /* Verify that the pixa and its boxa have the same count */ if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ return (PIXA *)ERROR_PTR("boxa not found", __func__, NULL); n = pixaGetCount(pixas); if (boxaGetCount(boxa) != n) return (PIXA *)ERROR_PTR("boxa and pixa counts differ", __func__, NULL); /* Generate Numa of appropriate box dimensions */ if ((na = numaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; default: L_WARNING("invalid sort type\n", __func__); } } /* Get the sort index for data array */ naindex = numaGetBinSortIndex(na, sortorder); numaDestroy(&na); if (!naindex) return (PIXA *)ERROR_PTR("naindex not made", __func__, NULL); /* Build up sorted pixa using sort index */ if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) { numaDestroy(&naindex); return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); } if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return pixad; } /*! * \brief pixaSortByIndex() * * \param[in] pixas * \param[in] naindex na that maps from the new pixa to the input pixa * \param[in] copyflag L_COPY, L_CLONE * \return pixad sorted, or NULL on error */ PIXA * pixaSortByIndex(PIXA *pixas, NUMA *naindex, l_int32 copyflag) { l_int32 i, n, index; BOX *box; PIX *pix; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!naindex) return (PIXA *)ERROR_PTR("naindex not defined", __func__, NULL); if (copyflag != L_CLONE && copyflag != L_COPY) return (PIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); pix = pixaGetPix(pixas, index, copyflag); box = pixaGetBox(pixas, index, copyflag); pixaAddPix(pixad, pix, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } return pixad; } /*! * \brief pixaSort2dByIndex() * * \param[in] pixas * \param[in] naa numaa that maps from the new pixaa to the input pixas * \param[in] copyflag L_CLONE or L_COPY * \return paa sorted, or NULL on error */ PIXAA * pixaSort2dByIndex(PIXA *pixas, NUMAA *naa, l_int32 copyflag) { l_int32 pixtot, ntot, i, j, n, nn, index; BOX *box; NUMA *na; PIX *pix; PIXA *pixa; PIXAA *paa; if (!pixas) return (PIXAA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!naa) return (PIXAA *)ERROR_PTR("naindex not defined", __func__, NULL); /* Check counts */ ntot = numaaGetNumberCount(naa); pixtot = pixaGetCount(pixas); if (ntot != pixtot) return (PIXAA *)ERROR_PTR("element count mismatch", __func__, NULL); n = numaaGetCount(naa); paa = pixaaCreate(n); for (i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); nn = numaGetCount(na); pixa = pixaCreate(nn); for (j = 0; j < nn; j++) { numaGetIValue(na, j, &index); pix = pixaGetPix(pixas, index, copyflag); box = pixaGetBox(pixas, index, copyflag); pixaAddPix(pixa, pix, L_INSERT); pixaAddBox(pixa, box, L_INSERT); } pixaaAddPixa(paa, pixa, L_INSERT); numaDestroy(&na); } return paa; } /*---------------------------------------------------------------------* * Pixa and Pixaa range selection * *---------------------------------------------------------------------*/ /*! * \brief pixaSelectRange() * * \param[in] pixas * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \param[in] copyflag L_COPY, L_CLONE * \return pixad, or NULL on error * *
 * Notes:
 *      (1) The copyflag specifies what we do with each pix from pixas.
 *          Specifically, L_CLONE inserts a clone into pixad of each
 *          selected pix from pixas.
 * 
*/ PIXA * pixaSelectRange(PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, npix, i; PIX *pix; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = pixaGetCount(pixas); first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (PIXA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (PIXA *)ERROR_PTR("first > last", __func__, NULL); npix = last - first + 1; pixad = pixaCreate(npix); for (i = first; i <= last; i++) { pix = pixaGetPix(pixas, i, copyflag); pixaAddPix(pixad, pix, L_INSERT); } return pixad; } /*! * \brief pixaaSelectRange() * * \param[in] paas * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \param[in] copyflag L_COPY, L_CLONE * \return paad, or NULL on error * *
 * Notes:
 *      (1) The copyflag specifies what we do with each pixa from paas.
 *          Specifically, L_CLONE inserts a clone into paad of each
 *          selected pixa from paas.
 * 
*/ PIXAA * pixaaSelectRange(PIXAA *paas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, npixa, i; PIXA *pixa; PIXAA *paad; if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXAA *)ERROR_PTR("invalid copyflag", __func__, NULL); n = pixaaGetCount(paas, NULL); first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (PIXAA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (PIXAA *)ERROR_PTR("first > last", __func__, NULL); npixa = last - first + 1; paad = pixaaCreate(npixa); for (i = first; i <= last; i++) { pixa = pixaaGetPixa(paas, i, copyflag); pixaaAddPixa(paad, pixa, L_INSERT); } return paad; } /*---------------------------------------------------------------------* * Pixa and Pixaa scaling * *---------------------------------------------------------------------*/ /*! * \brief pixaaScaleToSize() * * \param[in] paas * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return paad, or NULL on error * *
 * Notes:
 *      (1) This guarantees that each output scaled image has the
 *          dimension(s) you specify.
 *           ~ To specify the width with isotropic scaling, set %hd = 0.
 *           ~ To specify the height with isotropic scaling, set %wd = 0.
 *           ~ If both %wd and %hd are specified, the image is scaled
 *             (in general, anisotropically) to that size.
 *           ~ It is an error to set both %wd and %hd to 0.
 * 
*/ PIXAA * pixaaScaleToSize(PIXAA *paas, l_int32 wd, l_int32 hd) { l_int32 n, i; PIXA *pixa1, *pixa2; PIXAA *paad; if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", __func__, NULL); if (wd <= 0 && hd <= 0) return (PIXAA *)ERROR_PTR("neither wd nor hd > 0", __func__, NULL); n = pixaaGetCount(paas, NULL); paad = pixaaCreate(n); for (i = 0; i < n; i++) { pixa1 = pixaaGetPixa(paas, i, L_CLONE); pixa2 = pixaScaleToSize(pixa1, wd, hd); pixaaAddPixa(paad, pixa2, L_INSERT); pixaDestroy(&pixa1); } return paad; } /*! * \brief pixaaScaleToSizeVar() * * \param[in] paas * \param[in] nawd [optional] target widths; use NULL if using height * \param[in] nahd [optional] target height; use NULL if using width * \return paad, or NULL on error * *
 * Notes:
 *      (1) This guarantees that the scaled images in each pixa have the
 *          dimension(s) you specify in the numas.
 *           ~ To specify the width with isotropic scaling, set %nahd = NULL.
 *           ~ To specify the height with isotropic scaling, set %nawd = NULL.
 *           ~ If both %nawd and %nahd are specified, the image is scaled
 *             (in general, anisotropically) to that size.
 *           ~ It is an error to set both %nawd and %nahd to NULL.
 *      (2) If either nawd and/or nahd is defined, it must have the same
 *          count as the number of pixa in paas.
 * 
*/ PIXAA * pixaaScaleToSizeVar(PIXAA *paas, NUMA *nawd, NUMA *nahd) { l_int32 n, i, wd, hd; PIXA *pixa1, *pixa2; PIXAA *paad; if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", __func__, NULL); if (!nawd && !nahd) return (PIXAA *)ERROR_PTR("!nawd && !nahd", __func__, NULL); n = pixaaGetCount(paas, NULL); if (nawd && (n != numaGetCount(nawd))) return (PIXAA *)ERROR_PTR("nawd wrong size", __func__, NULL); if (nahd && (n != numaGetCount(nahd))) return (PIXAA *)ERROR_PTR("nahd wrong size", __func__, NULL); paad = pixaaCreate(n); for (i = 0; i < n; i++) { wd = hd = 0; if (nawd) numaGetIValue(nawd, i, &wd); if (nahd) numaGetIValue(nahd, i, &hd); pixa1 = pixaaGetPixa(paas, i, L_CLONE); pixa2 = pixaScaleToSize(pixa1, wd, hd); pixaaAddPixa(paad, pixa2, L_INSERT); pixaDestroy(&pixa1); } return paad; } /*! * \brief pixaScaleToSize() * * \param[in] pixas * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return pixad, or NULL on error * *
 * Notes:
 *      (1) See pixaaScaleToSize()
 * 
*/ PIXA * pixaScaleToSize(PIXA *pixas, l_int32 wd, l_int32 hd) { l_int32 n, i; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (wd <= 0 && hd <= 0) /* no scaling requested */ return pixaCopy(pixas, L_CLONE); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixScaleToSize(pix1, wd, hd); pixCopyText(pix2, pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*! * \brief pixaScaleToSizeRel() * * \param[in] pixas * \param[in] delw change in width, in pixels; 0 means no change * \param[in] delh change in height, in pixels; 0 means no change * return pixad, or NULL on error * *
 * Notes:
 *      (1) If a requested change in a pix is not possible because
 *          either the requested width or height is <= 0, issue a
 *          warning and return a copy.
 * 
*/ PIXA * pixaScaleToSizeRel(PIXA *pixas, l_int32 delw, l_int32 delh) { l_int32 n, i; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixScaleToSizeRel(pix1, delw, delh); if (pix2) { pixaAddPix(pixad, pix2, L_INSERT); } else { L_WARNING("relative scale to size failed; use a copy\n", __func__); pixaAddPix(pixad, pix1, L_COPY); } pixDestroy(&pix1); } return pixad; } /*! * \brief pixaScale() * * \param[in] pixas * \param[in] scalex * \param[in] scaley * \return pixad, or NULL on error * *
 * Notes:
 *      (1) If pixas has a full boxes, it is scaled as well.
 * 
*/ PIXA * pixaScale(PIXA *pixas, l_float32 scalex, l_float32 scaley) { l_int32 i, n, nb; BOXA *boxa1, *boxa2; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIXA *)ERROR_PTR("invalid scaling parameters", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixScale(pix1, scalex, scaley); pixCopyText(pix2, pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa1 = pixaGetBoxa(pixas, L_CLONE); nb = boxaGetCount(boxa1); if (nb == n) { boxa2 = boxaTransform(boxa1, 0, 0, scalex, scaley); pixaSetBoxa(pixad, boxa2, L_INSERT); } boxaDestroy(&boxa1); return pixad; } /*! * \brief pixaScaleBySampling() * * \param[in] pixas * \param[in] scalex * \param[in] scaley * \return pixad, or NULL on error * *
 * Notes:
 *      (1) If pixas has a full boxes, it is scaled as well.
 * 
*/ PIXA * pixaScaleBySampling(PIXA *pixas, l_float32 scalex, l_float32 scaley) { l_int32 i, n, nb; BOXA *boxa1, *boxa2; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIXA *)ERROR_PTR("invalid scaling parameters", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixScaleBySampling(pix1, scalex, scaley); pixCopyText(pix2, pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa1 = pixaGetBoxa(pixas, L_CLONE); nb = boxaGetCount(boxa1); if (nb == n) { boxa2 = boxaTransform(boxa1, 0, 0, scalex, scaley); pixaSetBoxa(pixad, boxa2, L_INSERT); } boxaDestroy(&boxa1); return pixad; } /*---------------------------------------------------------------------* * Pixa rotation and translation * *---------------------------------------------------------------------*/ /*! * \brief pixaRotate() * * \param[in] pixas 1, 2, 4, 8, 32 bpp rgb * \param[in] angle rotation angle in radians; clockwise is positive * \param[in] type L_ROTATE_AREA_MAP, L_ROTATE_SHEAR, L_ROTATE_SAMPLING * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \param[in] width original width; use 0 to avoid embedding * \param[in] height original height; use 0 to avoid embedding * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Each pix is rotated about its center.  See pixRotate() for details.
 *      (2) The boxa array is copied.  Why is it not rotated?
 *          If a boxa exists, the array of boxes is in 1-to-1
 *          correspondence with the array of pix, and each box typically
 *          represents the location of the pix relative to an image from
 *          which it has been extracted.  Like the pix, we could rotate
 *          each box around its center, and then generate a box that
 *          contains all four corners, as is done in boxaRotate(), but
 *          this seems unnecessary.
 * 
*/ PIXA * pixaRotate(PIXA *pixas, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height) { l_int32 i, n; BOXA *boxa; PIX *pixs, *pixd; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (type != L_ROTATE_SHEAR && type != L_ROTATE_AREA_MAP && type != L_ROTATE_SAMPLING) return (PIXA *)ERROR_PTR("invalid type", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIXA *)ERROR_PTR("invalid incolor", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixaCopy(pixas, L_COPY); n = pixaGetCount(pixas); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); boxa = pixaGetBoxa(pixad, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); for (i = 0; i < n; i++) { if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pixs not found", __func__, NULL); } pixd = pixRotate(pixs, angle, type, incolor, width, height); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixs); } return pixad; } /*! * \brief pixaRotateOrth() * * \param[in] pixas * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; * all rotations are clockwise * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Rotates each pix in the pixa.  Rotates and saves the boxes in
 *          the boxa if the boxa is full.
 * 
*/ PIXA * pixaRotateOrth(PIXA *pixas, l_int32 rotation) { l_int32 i, n, nb, w, h; BOX *boxs, *boxd; PIX *pixs, *pixd; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (rotation < 0 || rotation > 3) return (PIXA *)ERROR_PTR("rotation not in {0,1,2,3}", __func__, NULL); if (rotation == 0) return pixaCopy(pixas, L_COPY); n = pixaGetCount(pixas); nb = pixaGetBoxaCount(pixas); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); for (i = 0; i < n; i++) { if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pixs not found", __func__, NULL); } pixd = pixRotateOrth(pixs, rotation); pixaAddPix(pixad, pixd, L_INSERT); if (n == nb) { boxs = pixaGetBox(pixas, i, L_COPY); pixGetDimensions(pixs, &w, &h, NULL); boxd = boxRotateOrth(boxs, w, h, rotation); pixaAddBox(pixad, boxd, L_INSERT); boxDestroy(&boxs); } pixDestroy(&pixs); } return pixad; } /*! * \brief pixaTranslate() * * \param[in] pixas * \param[in] hshift horizontal shift; hshift > 0 is to right * \param[in] vshift vertical shift; vshift > 0 is down * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixad, or NULL on error. */ PIXA * pixaTranslate(PIXA *pixas, l_int32 hshift, l_int32 vshift, l_int32 incolor) { l_int32 i, n, nb; BOXA *boxas, *boxad; PIX *pixs, *pixd; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (hshift == 0 && vshift == 0) return pixaCopy(pixas, L_COPY); n = pixaGetCount(pixas); nb = pixaGetBoxaCount(pixas); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); for (i = 0; i < n; i++) { if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { pixaDestroy(&pixad); return (PIXA *)ERROR_PTR("pixs not found", __func__, NULL); } pixd = pixTranslate(NULL, pixs, hshift, vshift, incolor); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixs); } if (n == nb) { boxas = pixaGetBoxa(pixas, L_CLONE); boxad = boxaTransform(boxas, hshift, vshift, 1.0, 1.0); pixaSetBoxa(pixad, boxad, L_INSERT); boxaDestroy(&boxas); } return pixad; } /*---------------------------------------------------------------------* * Miscellaneous functions * *---------------------------------------------------------------------*/ /*! * \brief pixaAddBorderGeneral() * * \param[in] pixad can be null or equal to pixas * \param[in] pixas containing pix of all depths; colormap ok * \param[in] left, right, top, bot number of pixels added * \param[in] val value of added border pixels * \return pixad with border added to each pix, including on error * *
 * Notes:
 *      (1) For binary images:
 *             white:  val = 0
 *             black:  val = 1
 *          For grayscale images:
 *             white:  val = 2 ** d - 1
 *             black:  val = 0
 *          For rgb color images:
 *             white:  val = 0xffffff00
 *             black:  val = 0
 *          For colormapped images, use 'index' found this way:
 *             white: pixcmapGetRankIntensity(cmap, 1.0, &index);
 *             black: pixcmapGetRankIntensity(cmap, 0.0, &index);
 *      (2) For in-place replacement of each pix with a bordered version,
 *          use %pixad = %pixas.  To make a new pixa, use %pixad = NULL.
 *      (3) In both cases, the boxa has sides adjusted as if it were
 *          expanded by the border.
 * 
*/ PIXA * pixaAddBorderGeneral(PIXA *pixad, PIXA *pixas, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 i, n, nbox; BOX *box; BOXA *boxad; PIX *pixs, *pixd; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, pixad); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIXA *)ERROR_PTR("negative border added!", __func__, pixad); if (pixad && (pixad != pixas)) return (PIXA *)ERROR_PTR("pixad defined but != pixas", __func__, pixad); n = pixaGetCount(pixas); if (!pixad) pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixs = pixaGetPix(pixas, i, L_CLONE); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, val); if (pixad == pixas) /* replace */ pixaReplacePix(pixad, i, pixd, NULL); else pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixs); } nbox = pixaGetBoxaCount(pixas); boxad = pixaGetBoxa(pixad, L_CLONE); for (i = 0; i < nbox; i++) { if ((box = pixaGetBox(pixas, i, L_COPY)) == NULL) { L_WARNING("box %d not found\n", __func__, i); break; } boxAdjustSides(box, box, -left, right, -top, bot); if (pixad == pixas) /* replace */ boxaReplaceBox(boxad, i, box); else boxaAddBox(boxad, box, L_INSERT); } boxaDestroy(&boxad); return pixad; } /*! * \brief pixaaFlattenToPixa() * * \param[in] paa * \param[out] pnaindex [optional] the pixa index in the pixaa * \param[in] copyflag L_COPY or L_CLONE * \return pixa, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the pixaa to a pixa, taking the pix in
 *          order in the first pixa, then the second, etc.
 *      (2) If &naindex is defined, we generate a Numa that gives, for
 *          each pix in the pixaa, the index of the pixa to which it belongs.
 * 
*/ PIXA * pixaaFlattenToPixa(PIXAA *paa, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, j, m, mb, n; BOX *box; NUMA *naindex = NULL; PIX *pix; PIXA *pixa, *pixat; if (pnaindex) *pnaindex = NULL; if (!paa) return (PIXA *)ERROR_PTR("paa not defined", __func__, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", __func__, NULL); if (pnaindex) { naindex = numaCreate(0); *pnaindex = naindex; } n = pixaaGetCount(paa, NULL); pixa = pixaCreate(n); for (i = 0; i < n; i++) { pixat = pixaaGetPixa(paa, i, L_CLONE); m = pixaGetCount(pixat); mb = pixaGetBoxaCount(pixat); for (j = 0; j < m; j++) { pix = pixaGetPix(pixat, j, copyflag); pixaAddPix(pixa, pix, L_INSERT); if (j < mb) { box = pixaGetBox(pixat, j, copyflag); pixaAddBox(pixa, box, L_INSERT); } if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } pixaDestroy(&pixat); } return pixa; } /*! * \brief pixaaSizeRange() * * \param[in] paa * \param[out] pminw, pminh, pmaxw, pmaxh [optional] range of * dimensions of all boxes * \return 0 if OK, 1 on error */ l_ok pixaaSizeRange(PIXAA *paa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, minpw, minph, maxpw, maxph, i, n; PIXA *pixa; if (pminw) *pminw = 0; if (pminh) *pminh = 0; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", __func__, 1); minw = minh = 100000000; maxw = maxh = 0; n = pixaaGetCount(paa, NULL); for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaSizeRange(pixa, &minpw, &minph, &maxpw, &maxph); if (minpw < minw) minw = minpw; if (minph < minh) minh = minph; if (maxpw > maxw) maxw = maxpw; if (maxph > maxh) maxh = maxph; pixaDestroy(&pixa); } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief pixaSizeRange() * * \param[in] pixa * \param[out] pminw, pminh, pmaxw, pmaxh [optional] range of * dimensions of pix in the array * \return 0 if OK, 1 on error */ l_ok pixaSizeRange(PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, i, n, w, h; PIX *pix; if (pminw) *pminw = 0; if (pminh) *pminh = 0; if (pmaxw) *pmaxw = 0; if (pmaxh) *pmaxh = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", __func__, 1); minw = minh = 1000000; maxw = maxh = 0; n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); w = pixGetWidth(pix); h = pixGetHeight(pix); if (w < minw) minw = w; if (h < minh) minh = h; if (w > maxw) maxw = w; if (h > maxh) maxh = h; pixDestroy(&pix); } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * \brief pixaClipToPix() * * \param[in] pixas * \param[in] pixs * \return pixad, or NULL on error * *
 * Notes:
 *      (1) This is intended for use in situations where pixas
 *          was originally generated from the input pixs.
 *      (2) Returns a pixad where each pix in pixas is ANDed
 *          with its associated region of the input pixs.  This
 *          region is specified by the the box that is associated
 *          with the pix.
 *      (3) In a typical application of this function, pixas has
 *          a set of region masks, so this generates a pixa of
 *          the parts of pixs that correspond to each region
 *          mask component, along with the bounding box for
 *          the region.
 * 
*/ PIXA * pixaClipToPix(PIXA *pixas, PIX *pixs) { l_int32 i, n; BOX *box; PIX *pix, *pixc; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); n = pixaGetCount(pixas); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", __func__, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = pixaGetBox(pixas, i, L_COPY); pixc = pixClipRectangle(pixs, box, NULL); pixAnd(pixc, pixc, pix); pixaAddPix(pixad, pixc, L_INSERT); pixaAddBox(pixad, box, L_INSERT); pixDestroy(&pix); } return pixad; } /*! * \brief pixaClipToForeground() * * \param[in] pixas * \param[out] ppixad [optional] pixa of clipped pix returned * \param[out] pboxa [optional] clipping boxes returned * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) At least one of [&pixd, &boxa] must be specified.
 *      (2) Any pix with no fg pixels is skipped.
 *      (3) See pixClipToForeground().
 * 
*/ l_ok pixaClipToForeground(PIXA *pixas, PIXA **ppixad, BOXA **pboxa) { l_int32 i, n; BOX *box1; PIX *pix1, *pix2; if (ppixad) *ppixad = NULL; if (pboxa) *pboxa = NULL; if (!pixas) return ERROR_INT("pixas not defined", __func__, 1); if (!ppixad && !pboxa) return ERROR_INT("no output requested", __func__, 1); n = pixaGetCount(pixas); if (ppixad) *ppixad = pixaCreate(n); if (pboxa) *pboxa = boxaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pixClipToForeground(pix1, &pix2, &box1); pixDestroy(&pix1); if (ppixad) pixaAddPix(*ppixad, pix2, L_INSERT); else pixDestroy(&pix2); if (pboxa) boxaAddBox(*pboxa, box1, L_INSERT); else boxDestroy(&box1); } return 0; } /*! * \brief pixaGetRenderingDepth() * * \param[in] pixa * \param[out] pdepth depth required to render if all colormaps are removed * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Any pix with 16 bpp will be considered as having 8 bpp.
 *          If all pix have bpp = 1, this returns 1.
 *          If any pix has color (either rgb or a colormap with color),
 *          this return 32.
 *          Otherwise, this returns the maximum of 8 and the max depth
 *          of all the pix.
 *      (2) This can be used to allow lossless rendering onto a single pix.
 * 
*/ l_ok pixaGetRenderingDepth(PIXA *pixa, l_int32 *pdepth) { l_int32 hascolor, maxdepth; if (!pdepth) return ERROR_INT("&depth not defined", __func__, 1); *pdepth = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); pixaHasColor(pixa, &hascolor); if (hascolor) { *pdepth = 32; return 0; } pixaGetDepthInfo(pixa, &maxdepth, NULL); if (maxdepth == 1) *pdepth = 1; else /* 2, 4, 8 or 16 */ *pdepth = 8; return 0; } /*! * \brief pixaHasColor() * * \param[in] pixa * \param[out] phascolor 1 if any pix is rgb or has a colormap with color; * 0 otherwise * \return 0 if OK; 1 on error */ l_ok pixaHasColor(PIXA *pixa, l_int32 *phascolor) { l_int32 i, n, hascolor, d; PIX *pix; PIXCMAP *cmap; if (!phascolor) return ERROR_INT("&hascolor not defined", __func__, 1); *phascolor = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); hascolor = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if ((cmap = pixGetColormap(pix)) != NULL) pixcmapHasColor(cmap, &hascolor); d = pixGetDepth(pix); pixDestroy(&pix); if (d == 32 || hascolor == 1) { *phascolor = 1; break; } } return 0; } /*! * \brief pixaAnyColormaps() * * \param[in] pixa * \param[out] phascmap 1 if any pix has a colormap; 0 otherwise * \return 0 if OK; 1 on error */ l_ok pixaAnyColormaps(PIXA *pixa, l_int32 *phascmap) { l_int32 i, n; PIX *pix; PIXCMAP *cmap; if (!phascmap) return ERROR_INT("&hascmap not defined", __func__, 1); *phascmap = 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); cmap = pixGetColormap(pix); pixDestroy(&pix); if (cmap) { *phascmap = 1; return 0; } } return 0; } /*! * \brief pixaGetDepthInfo() * * \param[in] pixa * \param[out] pmaxdepth [optional] max pixel depth of pix in pixa * \param[out] psame [optional] true if all depths are equal * \return 0 if OK; 1 on error */ l_ok pixaGetDepthInfo(PIXA *pixa, l_int32 *pmaxdepth, l_int32 *psame) { l_int32 i, n, d, d0; l_int32 maxd, same; /* depth info */ if (pmaxdepth) *pmaxdepth = 0; if (psame) *psame = TRUE; if (!pmaxdepth && !psame) return 0; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("pixa is empty", __func__, 1); same = TRUE; maxd = 0; for (i = 0; i < n; i++) { pixaGetPixDimensions(pixa, i, NULL, NULL, &d); if (i == 0) d0 = d; else if (d != d0) same = FALSE; if (d > maxd) maxd = d; } if (pmaxdepth) *pmaxdepth = maxd; if (psame) *psame = same; return 0; } /*! * \brief pixaConvertToSameDepth() * * \param[in] pixas * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Any pix with 16 bpp will be converted to 8 bpp.
 *          If all pix have bpp = 1, the output depth will be 1.
 *          If any pix has color (either rgb or a colormap with color),
 *          the output depth will be 32.
 *          Otherwise, the output depth is the maximum of 8 and the
 *          the max depth of all the pix.
 *      (2) This can be used to allow lossless rendering onto
 *          a single pix. (Except: 16 bpp gets converted to 8.)
 * 
*/ PIXA * pixaConvertToSameDepth(PIXA *pixas) { l_int32 i, n, depth, same, hascmap, maxdepth; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixa1, *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no components", __func__, NULL); /* Remove colormaps if necessary */ pixaGetRenderingDepth(pixas, &depth); pixaAnyColormaps(pixas, &hascmap); if (hascmap) { pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (depth == 32) pix2 = pixConvertTo32(pix1); else /* depth = 8 */ pix2 = pixConvertTo8(pix1, 0); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } } else { pixa1 = pixaCopy(pixas, L_CLONE); } pixaGetDepthInfo(pixa1, &maxdepth, &same); if (!same) { /* at least one pix has depth < maxdepth */ pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); if (maxdepth <= 16) pix2 = pixConvertTo8(pix1, 0); else pix2 = pixConvertTo32(pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } } else { pixad = pixaCopy(pixa1, L_CLONE); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); pixaDestroy(&pixa1); return pixad; } /*! * \brief pixaConvertToGivenDepth() * * \param[in] pixas * \param[in] depth specify either 8 or 32 bpp * \return pixad, or NULL on error * *
 * Notes:
 *      (1) Use this to remove any colormaps and convert all pix to either
 *          8 or 32 bpp.
 *      (2) To convert losslessly, get %depth from pixaGetRenderingDepth().
 *      (3) Clone pix may be in the returned pixa if conversion is to 32 bpp.
 * 
*/ PIXA * pixaConvertToGivenDepth(PIXA *pixas, l_int32 depth) { l_int32 i, n, maxd; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no components", __func__, NULL); if (depth != 8 && depth != 32) return (PIXA *)ERROR_PTR("depth not 8 or 32", __func__, NULL); /* Warn with 1 --> {8,32} or lossy conversions */ pixaGetRenderingDepth(pixas, &maxd); if (maxd == 1) L_WARNING("All pix are 1 bpp; converting to %d bpp\n", __func__, depth); if (maxd > depth) L_WARNING("Lossy conversion: max rendering depth %d > input %d\n", __func__, maxd, depth); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (depth == 32) { pix2 = (pixGetDepth(pix1) == 32) ? pixClone(pix1) : pixConvertTo32(pix1); } else { /* depth = 8 */ pix2 = pixConvertTo8(pix1, 0); } pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * \brief pixaEqual() * * \param[in] pixa1 * \param[in] pixa2 * \param[in] maxdist * \param[out] pnaindex [optional] index array of correspondences * \param[out] psame 1 if equal; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The two pixa are the "same" if they contain the same
 *          boxa and the same ordered set of pix.  However, if they
 *          have boxa, the pix in each pixa can differ in ordering
 *          by an amount given by the parameter %maxdist.  If they
 *          don't have a boxa, the %maxdist parameter is ignored,
 *          and the ordering of the pix must be identical.
 *      (2) This applies only to boxa geometry, pixels and ordering;
 *          other fields in the pix are ignored.
 *      (3) naindex[i] gives the position of the box in pixa2 that
 *          corresponds to box i in pixa1.  It is only returned if the
 *          pixa have boxa and the boxa are equal.
 *      (4) In situations where the ordering is very different, so that
 *          a large %maxdist is required for "equality", this should be
 *          implemented with a hash function for efficiency.
 * 
*/ l_ok pixaEqual(PIXA *pixa1, PIXA *pixa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame) { l_int32 i, j, n, empty1, empty2, same, sameboxa; BOXA *boxa1, *boxa2; NUMA *na; PIX *pix1, *pix2; if (pnaindex) *pnaindex = NULL; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; sameboxa = 0; na = NULL; if (!pixa1 || !pixa2) return ERROR_INT("pixa1 and pixa2 not both defined", __func__, 1); n = pixaGetCount(pixa1); if (n != pixaGetCount(pixa2)) return 0; /* If there are no boxes, strict ordering of the pix in each * pixa is required. */ boxa1 = pixaGetBoxa(pixa1, L_CLONE); boxa2 = pixaGetBoxa(pixa2, L_CLONE); empty1 = (boxaGetCount(boxa1) == 0) ? 1 : 0; empty2 = (boxaGetCount(boxa2) == 0) ? 1 : 0; if (!empty1 && !empty2) { boxaEqual(boxa1, boxa2, maxdist, &na, &sameboxa); if (!sameboxa) { boxaDestroy(&boxa1); boxaDestroy(&boxa2); numaDestroy(&na); return 0; } } boxaDestroy(&boxa1); boxaDestroy(&boxa2); if ((!empty1 && empty2) || (empty1 && !empty2)) return 0; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); if (na) numaGetIValue(na, i, &j); else j = i; pix2 = pixaGetPix(pixa2, j, L_CLONE); pixEqual(pix1, pix2, &same); pixDestroy(&pix1); pixDestroy(&pix2); if (!same) { numaDestroy(&na); return 0; } } *psame = 1; if (pnaindex) *pnaindex = na; else numaDestroy(&na); return 0; } /*! * \brief pixaSetFullSizeBoxa() * * \param[in] pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Replaces the existing boxa.  Each box gives the dimensions
 *          of the corresponding pix.  This is needed for functions
 *          like pixaSort() that sort based on the boxes.
 * 
*/ l_ok pixaSetFullSizeBoxa(PIXA *pixa) { l_int32 i, n, w, h; BOX *box; BOXA *boxa; PIX *pix; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((n = pixaGetCount(pixa)) == 0) { L_INFO("pixa contains no pix\n", __func__); return 0; } boxa = boxaCreate(n); pixaSetBoxa(pixa, boxa, L_INSERT); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); box = boxCreate(0, 0, w, h); boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pix); } return 0; } leptonica-1.86.0/src/pixafunc2.c000066400000000000000000002775651506303110300164340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixafunc2.c *
 *
 *      Pixa display (render into a pix)
 *           PIX      *pixaDisplay()
 *           PIX      *pixaDisplayRandomCmap()
 *           PIX      *pixaDisplayLinearly()
 *           PIX      *pixaDisplayOnLattice()
 *           PIX      *pixaDisplayUnsplit()
 *           PIX      *pixaDisplayTiled()
 *           PIX      *pixaDisplayTiledInRows()
 *           PIX      *pixaDisplayTiledInColumns()
 *           PIX      *pixaDisplayTiledAndScaled()
 *           PIX      *pixaDisplayTiledWithText()
 *           PIX      *pixaDisplayTiledByIndex()
 *
 *      Pixa pair display (render into a pix)
 *           PIX      *pixaDisplayPairTiledInColumns()
 *
 *      Pixaa display (render into a pix)
 *           PIX      *pixaaDisplay()
 *           PIX      *pixaaDisplayByPixa()
 *           PIXA     *pixaaDisplayTiledAndScaled()
 *
 *      Conversion of all pix to specified type (e.g., depth)
 *           PIXA     *pixaConvertTo1()
 *           PIXA     *pixaConvertTo8()
 *           PIXA     *pixaConvertTo8Colormap()
 *           PIXA     *pixaConvertTo32()
 *
 *      Pixa constrained selection and pdf generation
 *           PIXA     *pixaConstrainedSelect()
 *           l_int32   pixaSelectToPdf()
 *
 *      Generate pixa from tiled images
 *           PIXA     *pixaMakeFromTiledPixa()
 *           PIXA     *pixaMakeFromTiledPix()
 *           l_int32   pixGetTileCount()
 *
 *      Pixa display into multiple tiles
 *           PIXA     *pixaDisplayMultiTiled()
 *
 *      Split pixa into files
 *           l_int32   pixaSplitIntoFiles()
 *
 *      Tile N-Up
 *           l_int32   convertToNUpFiles()
 *           PIXA     *convertToNUpPixa()
 *           PIXA     *pixaConvertToNUpPixa()
 *
 *      Render two pixa side-by-side for comparison                   *
 *           l_int32   pixaCompareInPdf()
 *
 *  We give twelve pixaDisplay*() methods for tiling a pixa in a pix.
 *  Some work for 1 bpp input; others for any input depth.
 *  Some give an output depth that depends on the input depth;
 *  others give a different output depth or allow you to choose it.
 *  Some use a boxes to determine where each pix goes; others tile
 *  onto a regular lattice; others tile onto an irregular lattice;
 *  one uses an associated index array to determine which column
 *  each pix goes into.
 *
 *  Here is a brief description of what the pixa display functions do.
 *
 *    pixaDisplay()
 *        This uses the boxes in the pixa to lay out each pix.  This
 *        can be used to reconstruct a pix that has been broken into
 *        components, if the boxes represents the positions of the
 *        components in the original image.
 *    pixaDisplayRandomCmap()
 *        This also uses the boxes to lay out each pix.  However, it creates
 *        a colormapped dest, where each 1 bpp pix is given a randomly
 *        generated color (up to 256 are used).
 *    pixaDisplayLinearly()
 *        This puts each pix, sequentially, in a line, either horizontally
 *        or vertically.
 *    pixaDisplayOnLattice()
 *        This puts each pix, sequentially, onto a regular lattice,
 *        omitting any pix that are too big for the lattice size.
 *        This is useful, for example, to store bitmapped fonts,
 *        where all the characters are stored in a single image.
 *    pixaDisplayUnsplit()
 *        This lays out a mosaic of tiles (the pix in the pixa) that
 *        are all of equal size.  (Don't use this for unequal sized pix!)
 *        For example, it can be used to invert the action of
 *        pixaSplitPix().
 *    pixaDisplayTiled()
 *        Like pixaDisplayOnLattice(), this places each pix on a regular
 *        lattice, but here the lattice size is determined by the
 *        largest component, and no components are omitted.  This is
 *        dangerous if there are thousands of small components and
 *        one or more very large one, because the size of the resulting
 *        pix can be huge!
 *    pixaDisplayTiledInRows()
 *        This puts each pix down in a series of rows, where the upper
 *        edges of each pix in a row are aligned and there is a uniform
 *        spacing between the pix.  The height of each row is determined
 *        by the tallest pix that was put in the row.  This function
 *        is a reasonably efficient way to pack the subimages.
 *        A boxa of the locations of each input pix is stored in the output.
 *    pixaDisplayTiledInColumns()
 *        This puts each pix down in a series of rows, each row having
 *        a specified number of pix.  The upper edges of each pix in a
 *        row are aligned and there is a uniform spacing between the pix.
 *        The height of each row is determined by the tallest pix that
 *        was put in the row.  A boxa of the locations of each input
 *        pix is stored in the output.
 *    pixaDisplayTiledAndScaled()
 *        This scales each pix to a given width and output depth, and then
 *        tiles them in rows with a given number placed in each row.
 *        This is useful for presenting a sequence of images that can be
 *        at different resolutions, but which are derived from the same
 *        initial image.
 *    pixaDisplayTiledWithText()
 *        This is a version of pixaDisplayTiledInRows() that prints, below
 *        each pix, the text in the pix text field.  It renders a pixa
 *        to an image with white background that does not exceed a
 *        given value in width.
 *    pixaDisplayTiledByIndex()
 *        This scales each pix to a given width and output depth,
 *        and then tiles them in columns corresponding to the value
 *        in an associated numa.  All pix with the same index value are
 *        rendered in the same column.  Text in the pix text field are
 *        rendered below the pix.
 *
 *  To render mosaics of images in a pixaa, display functions are
 *  provided that handle situations where the images are all scaled to
 *  the same size, or the number of images on each row needs to vary.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include /* for sqrt() */ #include "allheaders.h" /*---------------------------------------------------------------------* * Pixa Display * *---------------------------------------------------------------------*/ /*! * \brief pixaDisplay() * * \param[in] pixa * \param[in] w, h if set to 0, the size is determined from the * bounding box of the components in pixa * \return pix, or NULL on error * *
 * Notes:
 *      (1) This uses the boxes to place each pix in the rendered composite.
 *      (2) Set w = h = 0 to use the b.b. of the components to determine
 *          the size of the returned pix.
 *      (3) Uses the first pix in pixa to determine the depth.
 *      (4) The background is written "white".  On 1 bpp, each successive
 *          pix is "painted" (adding foreground), whereas for grayscale
 *          or color each successive pix is blitted with just the src.
 *      (5) If the pixa is empty, returns an empty 1 bpp pix.
 * 
*/ PIX * pixaDisplay(PIXA *pixa, l_int32 w, l_int32 h) { l_int32 i, n, d, xb, yb, wb, hb, res; BOXA *boxa; PIX *pix1, *pixd; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); n = pixaGetCount(pixa); if (n == 0 && w == 0 && h == 0) return (PIX *)ERROR_PTR("no components; no size", __func__, NULL); if (n == 0) { L_WARNING("no components; returning empty 1 bpp pix\n", __func__); return pixCreate(w, h, 1); } /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ if (w == 0 || h == 0) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); boxaDestroy(&boxa); if (w == 0 || h == 0) return (PIX *)ERROR_PTR("no associated boxa", __func__, NULL); } /* Use the first pix in pixa to determine depth and resolution */ pix1 = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix1); res = pixGetXRes(pix1); pixDestroy(&pix1); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetResolution(pixd, res, res); if (d > 1) pixSetAll(pixd); for (i = 0; i < n; i++) { if (pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb)) { L_WARNING("no box found!\n", __func__); continue; } pix1 = pixaGetPix(pixa, i, L_CLONE); if (d == 1) pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix1, 0, 0); else pixRasterop(pixd, xb, yb, wb, hb, PIX_SRC, pix1, 0, 0); pixDestroy(&pix1); } return pixd; } /*! * \brief pixaDisplayRandomCmap() * * \param[in] pixa 1 bpp regions, with boxa delineating those regions * \param[in] w, h if set to 0, the size is determined from the * bounding box of the components in pixa * \return pix 8 bpp, cmapped, with random colors assigned to each region, * or NULL on error. * *
 * Notes:
 *      (1) This uses the boxes to place each pix in the rendered composite.
 *          The fg of each pix in %pixa, such as a single connected
 *          component or a line of text, is given a random color.
 *      (2) By default, the background color is black (cmap index 0).
 *          This can be changed by pixcmapResetColor()
 * 
*/ PIX * pixaDisplayRandomCmap(PIXA *pixa, l_int32 w, l_int32 h) { l_int32 i, n, same, maxd, index, xb, yb, wb, hb, res; BOXA *boxa; PIX *pixs, *pix1, *pixd; PIXCMAP *cmap; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); pixaVerifyDepth(pixa, &same, &maxd); if (maxd > 1) return (PIX *)ERROR_PTR("not all components are 1 bpp", __func__, NULL); /* If w and h are not input, determine the minimum size required * to contain the origin and all c.c. */ if (w == 0 || h == 0) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); boxaDestroy(&boxa); } /* Set up an 8 bpp dest pix, with a colormap with 254 random colors */ if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pixd, cmap); /* Color each component and blit it in */ for (i = 0; i < n; i++) { index = 1 + (i % 254); pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pixs = pixaGetPix(pixa, i, L_CLONE); if (i == 0) res = pixGetXRes(pixs); pix1 = pixConvert1To8(NULL, pixs, 0, index); pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix1, 0, 0); pixDestroy(&pixs); pixDestroy(&pix1); } pixSetResolution(pixd, res, res); return pixd; } /*! * \brief pixaDisplayLinearly() * * \param[in] pixas * \param[in] direction L_HORIZ or L_VERT * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of black border added to each image; * use 0 for no border * \param[out] pboxa [optional] location of images in output pix * \return pix of composite images, or NULL on error * *
 * Notes:
 *      (1) This puts each pix, sequentially, in a line, either horizontally
 *          or vertically.
 *      (2) If any pix has a colormap, all pix are rendered in rgb.
 *      (3) The boxa gives the location of each image.
 * 
*/ PIX * pixaDisplayLinearly(PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, /* not used */ l_int32 spacing, l_int32 border, BOXA **pboxa) { l_int32 i, n, x, y, w, h, depth, bordval; BOX *box; PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa1, *pixa2; if (pboxa) *pboxa = NULL; if (!pixas) return (PIX *)ERROR_PTR("pixas not defined", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); /* Make sure all pix are at the same depth */ pixa1 = pixaConvertToSameDepth(pixas); pixaGetDepthInfo(pixa1, &depth, NULL); /* Scale and add border if requested */ n = pixaGetCount(pixa1); pixa2 = pixaCreate(n); bordval = (depth == 1) ? 1 : 0; x = y = 0; for (i = 0; i < n; i++) { if ((pix1 = pixaGetPix(pixa1, i, L_CLONE)) == NULL) { L_WARNING("missing pix at index %d\n", __func__, i); continue; } if (scalefactor != 1.0) pix2 = pixScale(pix1, scalefactor, scalefactor); else pix2 = pixClone(pix1); if (border) pix3 = pixAddBorder(pix2, border, bordval); else pix3 = pixClone(pix2); pixGetDimensions(pix3, &w, &h, NULL); box = boxCreate(x, y, w, h); if (direction == L_HORIZ) x += w + spacing; else /* vertical */ y += h + spacing; pixaAddPix(pixa2, pix3, L_INSERT); pixaAddBox(pixa2, box, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplay(pixa2, 0, 0); if (pboxa) *pboxa = pixaGetBoxa(pixa2, L_COPY); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return pixd; } /*! * \brief pixaDisplayOnLattice() * * \param[in] pixa * \param[in] cellw lattice cell width * \param[in] cellh lattice cell height * \param[out] pncols [optional] number of columns in output lattice * \param[out] pboxa [optional] location of images in lattice * \return pix of composite images, or NULL on error * *
 * Notes:
 *      (1) This places each pix on sequentially on a regular lattice
 *          in the rendered composite.  If a pix is too large to fit in the
 *          allocated lattice space, it is not rendered.
 *      (2) If any pix has a colormap, all pix are rendered in rgb.
 *      (3) This is useful when putting bitmaps of components,
 *          such as characters, into a single image.
 *      (4) Save the number of tiled images in the text field of the pix,
 *          in the format: n = %d.  This survives write/read into png files,
 *          for example.
 *      (5) The boxa gives the location of each image.  The UL corner
 *          of each image is on a lattice cell corner.  Omitted images
 *          (due to size) are assigned an invalid width and height of 0.
 * 
*/ PIX * pixaDisplayOnLattice(PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa) { char buf[16]; l_int32 n, nw, nh, w, h, d, wt, ht, res, samedepth; l_int32 index, i, j, hascmap; BOX *box; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa1; if (pncols) *pncols = 0; if (pboxa) *pboxa = NULL; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); /* If any pix have colormaps, or if the depths differ, generate rgb */ if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); pixaAnyColormaps(pixa, &hascmap); pixaVerifyDepth(pixa, &samedepth, NULL); if (hascmap || !samedepth) { pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } } else { pixa1 = pixaCopy(pixa, L_CLONE); } /* Have number of rows and columns approximately equal */ nw = (l_int32)sqrt((l_float64)n); nh = (n + nw - 1) / nw; w = cellw * nw; h = cellh * nh; /* Use the first pix to determine output depth and resolution */ pix1 = pixaGetPix(pixa1, 0, L_CLONE); d = pixGetDepth(pix1); res = pixGetXRes(pix1); pixDestroy(&pix1); if ((pixd = pixCreate(w, h, d)) == NULL) { pixaDestroy(&pixa1); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixSetBlackOrWhite(pixd, L_SET_WHITE); pixSetResolution(pixd, res, res); boxa = boxaCreate(n); /* Tile the output */ index = 0; for (i = 0; i < nh; i++) { for (j = 0; j < nw && index < n; j++, index++) { pix1 = pixaGetPix(pixa1, index, L_CLONE); pixGetDimensions(pix1, &wt, &ht, NULL); if (wt > cellw || ht > cellh) { L_INFO("pix(%d) omitted; size %dx%x\n", __func__, index, wt, ht); box = boxCreate(0, 0, 0, 0); boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pix1); continue; } pixRasterop(pixd, j * cellw, i * cellh, wt, ht, PIX_SRC, pix1, 0, 0); box = boxCreate(j * cellw, i * cellh, wt, ht); boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pix1); } } /* Save the number of tiles in the text field */ snprintf(buf, sizeof(buf), "n = %d", boxaGetCount(boxa)); pixSetText(pixd, buf); if (pncols) *pncols = nw; if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); pixaDestroy(&pixa1); return pixd; } /*! * \brief pixaDisplayUnsplit() * * \param[in] pixa * \param[in] nx number of mosaic cells horizontally * \param[in] ny number of mosaic cells vertically * \param[in] borderwidth of added border on all sides * \param[in] bordercolor in our RGBA format: 0xrrggbbaa * \return pix of tiled images, or NULL on error * *
 * Notes:
 *      (1) This is a logical inverse of pixaSplitPix().  It
 *          constructs a pix from a mosaic of tiles, all of equal size.
 *      (2) For added generality, a border of arbitrary color can
 *          be added to each of the tiles.
 *      (3) In use, pixa will typically have either been generated
 *          from pixaSplitPix() or will derived from a pixa that
 *          was so generated.
 *      (4) All pix in the pixa must be of equal depth, and, if
 *          colormapped, have the same colormap.
 * 
*/ PIX * pixaDisplayUnsplit(PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor) { l_int32 w, h, d, wt, ht; l_int32 i, j, k, x, y, n; PIX *pix1, *pixd; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (nx <= 0 || ny <= 0) return (PIX *)ERROR_PTR("nx and ny must be > 0", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); if (n != nx * ny) return (PIX *)ERROR_PTR("n != nx * ny", __func__, NULL); borderwidth = L_MAX(0, borderwidth); pixaGetPixDimensions(pixa, 0, &wt, &ht, &d); w = nx * (wt + 2 * borderwidth); h = ny * (ht + 2 * borderwidth); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pix1 = pixaGetPix(pixa, 0, L_CLONE); pixCopyColormap(pixd, pix1); pixDestroy(&pix1); if (borderwidth > 0) pixSetAllArbitrary(pixd, bordercolor); y = borderwidth; for (i = 0, k = 0; i < ny; i++) { x = borderwidth; for (j = 0; j < nx; j++, k++) { pix1 = pixaGetPix(pixa, k, L_CLONE); pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pix1, 0, 0); pixDestroy(&pix1); x += wt + 2 * borderwidth; } y += ht + 2 * borderwidth; } return pixd; } /*! * \brief pixaDisplayTiled() * * \param[in] pixa * \param[in] maxwidth of output image * \param[in] background 0 for white, 1 for black * \param[in] spacing * \return pix of tiled images, or NULL on error * *
 * Notes:
 *      (1) This renders a pixa to a single image of width not to
 *          exceed maxwidth, with background color either white or black,
 *          and with each subimage spaced on a regular lattice.
 *      (2) The lattice size is determined from the largest width and height,
 *          separately, of all pix in the pixa.
 *      (3) All pix in the pixa must be of equal depth.
 *      (4) If any pix has a colormap, all pix are rendered in rgb.
 *      (5) Careful: because no components are omitted, this is
 *          dangerous if there are thousands of small components and
 *          one or more very large one, because the size of the
 *          resulting pix can be huge!
 * 
*/ PIX * pixaDisplayTiled(PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing) { l_int32 wmax, hmax, wd, hd, d, hascmap, res, same; l_int32 i, j, n, ni, ncols, nrows; l_int32 ystart, xstart, wt, ht; PIX *pix1, *pix2, *pixd; PIXA *pixa1; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); spacing = L_MAX(spacing, 0); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* If any pix have colormaps, generate rgb */ pixaAnyColormaps(pixa, &hascmap); if (hascmap) { pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } } else { pixa1 = pixaCopy(pixa, L_CLONE); } /* Find the max dimensions and depth subimages */ pixaGetDepthInfo(pixa1, &d, &same); if (!same) { pixaDestroy(&pixa1); return (PIX *)ERROR_PTR("depths not equal", __func__, NULL); } pixaSizeRange(pixa1, NULL, NULL, &wmax, &hmax); /* Get the number of rows and columns and the output image size */ ncols = (l_int32)((l_float32)(maxwidth - spacing) / (l_float32)(wmax + spacing)); ncols = L_MAX(ncols, 1); nrows = (n + ncols - 1) / ncols; wd = wmax * ncols + spacing * (ncols + 1); hd = hmax * nrows + spacing * (nrows + 1); if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixaDestroy(&pixa1); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } /* Reset the background color if necessary */ if ((background == 1 && d == 1) || (background == 0 && d != 1)) pixSetAll(pixd); /* Blit the images to the dest */ for (i = 0, ni = 0; i < nrows; i++) { ystart = spacing + i * (hmax + spacing); for (j = 0; j < ncols && ni < n; j++, ni++) { xstart = spacing + j * (wmax + spacing); pix1 = pixaGetPix(pixa1, ni, L_CLONE); if (ni == 0) res = pixGetXRes(pix1); pixGetDimensions(pix1, &wt, &ht, NULL); pixRasterop(pixd, xstart, ystart, wt, ht, PIX_SRC, pix1, 0, 0); pixDestroy(&pix1); } } pixSetResolution(pixd, res, res); pixaDestroy(&pixa1); return pixd; } /*! * \brief pixaDisplayTiledInRows() * * \param[in] pixa * \param[in] outdepth output depth: 1, 8 or 32 bpp * \param[in] maxwidth of output image * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of black border added to each image; * use 0 for no border * \return pixd of tiled images, or NULL on error * *
 * Notes:
 *      (1) This renders a pixa to a single image of width not to
 *          exceed maxwidth, with background color either white or black,
 *          and with each row tiled such that the top of each pix is
 *          aligned and separated by 'spacing' from the next one.
 *          A black border can be added to each pix.
 *      (2) All pix are converted to outdepth; existing colormaps are removed.
 *      (3) This does a reasonably spacewise-efficient job of laying
 *          out the individual pix images into a tiled composite.
 *      (4) A serialized boxa giving the location in pixd of each input
 *          pix (without added border) is stored in the text string of pixd.
 *          This allows, e.g., regeneration of a pixa from pixd, using
 *          pixaCreateFromBoxa().  If there is no scaling and the depth of
 *          each input pix in the pixa is the same, this tiling operation
 *          can be inverted using the boxa (except for loss of text in
 *          each of the input pix):
 *            pix1 = pixaDisplayTiledInRows(pixa1, 1, 1500, 1.0, 0, 30, 0);
 *            char *boxatxt = pixGetText(pix1);
 *            boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt));
 *            pixa2 = pixaCreateFromBoxa(pix1, boxa1, 0, 0, NULL);
 * 
*/ PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 h; /* cumulative height over all the rows */ l_int32 w; /* cumulative height in the current row */ l_int32 bordval, wtry, wt, ht; l_int32 irow; /* index of current pix in current row */ l_int32 wmaxrow; /* width of the largest row */ l_int32 maxh; /* max height in row */ l_int32 i, j, index, n, x, y, nrows, ninrow, res; size_t size; l_uint8 *data; BOXA *boxa; NUMA *nainrow; /* number of pix in the row */ NUMA *namaxh; /* height of max pix in the row */ PIX *pix, *pixn, *pix1, *pixd; PIXA *pixan; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", __func__, NULL); spacing = L_MAX(spacing, 0); border = L_MAX(border, 0); if (scalefactor <= 0.0) scalefactor = 1.0; if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* Normalize depths, scale, remove colormaps; optionally add border */ pixan = pixaCreate(n); bordval = (outdepth == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; if (outdepth == 1) pixn = pixConvertTo1(pix, 128); else if (outdepth == 8) pixn = pixConvertTo8(pix, FALSE); else /* outdepth == 32 */ pixn = pixConvertTo32(pix); pixDestroy(&pix); if (scalefactor != 1.0) pix1 = pixScale(pixn, scalefactor, scalefactor); else pix1 = pixClone(pixn); if (border) pixd = pixAddBorder(pix1, border, bordval); else pixd = pixClone(pix1); pixDestroy(&pixn); pixDestroy(&pix1); pixaAddPix(pixan, pixd, L_INSERT); } if (pixaGetCount(pixan) != n) { n = pixaGetCount(pixan); L_WARNING("only got %d components\n", __func__, n); if (n == 0) { pixaDestroy(&pixan); return (PIX *)ERROR_PTR("no components", __func__, NULL); } } /* Compute parameters for layout */ nainrow = numaCreate(0); namaxh = numaCreate(0); wmaxrow = 0; w = h = spacing; maxh = 0; /* max height in row */ for (i = 0, irow = 0; i < n; i++, irow++) { pixaGetPixDimensions(pixan, i, &wt, &ht, NULL); wtry = w + wt + spacing; if (wtry > maxwidth) { /* end the current row and start next one */ numaAddNumber(nainrow, irow); numaAddNumber(namaxh, maxh); wmaxrow = L_MAX(wmaxrow, w); h += maxh + spacing; irow = 0; w = wt + 2 * spacing; maxh = ht; } else { w = wtry; maxh = L_MAX(maxh, ht); } } /* Enter the parameters for the last row */ numaAddNumber(nainrow, irow); numaAddNumber(namaxh, maxh); wmaxrow = L_MAX(wmaxrow, w); h += maxh + spacing; if ((pixd = pixCreate(wmaxrow, h, outdepth)) == NULL) { numaDestroy(&nainrow); numaDestroy(&namaxh); pixaDestroy(&pixan); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } /* Reset the background color if necessary */ if ((background == 1 && outdepth == 1) || (background == 0 && outdepth != 1)) pixSetAll(pixd); /* Blit the images to the dest, and save the boxa identifying * the image regions that do not include the borders. */ nrows = numaGetCount(nainrow); y = spacing; boxa = boxaCreate(n); for (i = 0, index = 0; i < nrows; i++) { /* over rows */ numaGetIValue(nainrow, i, &ninrow); numaGetIValue(namaxh, i, &maxh); x = spacing; for (j = 0; j < ninrow; j++, index++) { /* over pix in row */ pix = pixaGetPix(pixan, index, L_CLONE); if (index == 0) { res = pixGetXRes(pix); pixSetResolution(pixd, res, res); } pixGetDimensions(pix, &wt, &ht, NULL); boxaAddBox(boxa, boxCreate(x + border, y + border, wt - 2 * border, ht - 2 *border), L_INSERT); pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pix, 0, 0); pixDestroy(&pix); x += wt + spacing; } y += maxh + spacing; } if (boxaWriteMem(&data, &size, boxa) == 0) pixSetText(pixd, (char *)data); /* data is ascii */ LEPT_FREE(data); boxaDestroy(&boxa); numaDestroy(&nainrow); numaDestroy(&namaxh); pixaDestroy(&pixan); return pixd; } /*! * \brief pixaDisplayTiledInColumns() * * \param[in] pixas * \param[in] nx number of columns in output image * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] spacing between images, and on outside; can be < 0 * \param[in] border width of black border added to each image; * use 0 for no border * \return pixd of tiled images, or NULL on error * *
 * Notes:
 *      (1) This renders a pixa to a single image with &nx columns of
 *          subimages.  The background color is white, and each row
 *          is tiled such that the top of each pix is aligned and
 *          each pix is separated by 'spacing' from the next one.
 *          A black border can be added to each pix.
 *      (2) The output depth is determined by the largest depth
 *          required by the pix in the pixa.  Colormaps are removed.
 *      (3) A serialized boxa giving the location in pixd of each input
 *          pix (without added border) is stored in the text string of pixd.
 *          This allows, e.g., regeneration of a pixa from pixd, using
 *          pixaCreateFromBoxa().  If there is no scaling and the depth of
 *          each input pix in the pixa is the same, this tiling operation
 *          can be inverted using the boxa (except for loss of text in
 *          each of the input pix):
 *            pix1 = pixaDisplayTiledInColumns(pixa1, 3, 1.0, 0, 30, 2);
 *            char *boxatxt = pixGetText(pix1);
 *            boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt));
 *            pixa2 = pixaCreateFromBoxa(pix1, boxa1, NULL);
 * 
*/ PIX * pixaDisplayTiledInColumns(PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border) { l_int32 i, j, index, n, x, y, nrows, wb, hb, w, h, maxd, maxh, bordval, res; size_t size; l_uint8 *data; BOX *box; BOXA *boxa; PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa1, *pixa2; if (!pixas) return (PIX *)ERROR_PTR("pixas not defined", __func__, NULL); border = L_MAX(border, 0); if (scalefactor <= 0.0) scalefactor = 1.0; if ((n = pixaGetCount(pixas)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* Convert to same depth, if necessary */ pixa1 = pixaConvertToSameDepth(pixas); pixaGetDepthInfo(pixa1, &maxd, NULL); /* Scale and optionally add border */ pixa2 = pixaCreate(n); bordval = (maxd == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix1 = pixaGetPix(pixa1, i, L_CLONE)) == NULL) continue; if (scalefactor != 1.0) pix2 = pixScale(pix1, scalefactor, scalefactor); else pix2 = pixClone(pix1); if (border) pix3 = pixAddBorder(pix2, border, bordval); else pix3 = pixClone(pix2); if (i == 0) res = pixGetXRes(pix3); pixaAddPix(pixa2, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa1); if (pixaGetCount(pixa2) != n) { n = pixaGetCount(pixa2); L_WARNING("only got %d components\n", __func__, n); if (n == 0) { pixaDestroy(&pixa2); return (PIX *)ERROR_PTR("no components", __func__, NULL); } } /* Compute layout parameters and save as a boxa */ boxa = boxaCreate(n); nrows = (n + nx - 1) / nx; y = spacing; for (i = 0, index = 0; i < nrows; i++) { x = spacing; maxh = 0; for (j = 0; j < nx && index < n; j++) { pixaGetPixDimensions(pixa2, index, &wb, &hb, NULL); box = boxCreate(x, y, wb, hb); boxaAddBox(boxa, box, L_INSERT); maxh = L_MAX(maxh, hb + spacing); x += wb + spacing; index++; } y += maxh; } pixaSetBoxa(pixa2, boxa, L_INSERT); /* Render the output pix */ boxaGetExtent(boxa, &w, &h, NULL); pixd = pixaDisplay(pixa2, w + spacing, h + spacing); pixSetResolution(pixd, res, res); /* Save the boxa in the text field of the output pix */ if (boxaWriteMem(&data, &size, boxa) == 0) pixSetText(pixd, (char *)data); /* data is ascii */ LEPT_FREE(data); pixaDestroy(&pixa2); return pixd; } /*! * \brief pixaDisplayTiledAndScaled() * * \param[in] pixa * \param[in] outdepth output depth: 1, 8 or 32 bpp * \param[in] tilewidth each pix is scaled to this width * \param[in] ncols number of tiles in each row * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \return pix of tiled images, or NULL on error * *
 * Notes:
 *      (1) This can be used to tile a number of renderings of
 *          an image that are at different scales and depths.
 *      (2) Each image, after scaling and optionally adding the
 *          black border, has width 'tilewidth'.  Thus, the border does
 *          not affect the spacing between the image tiles.  The
 *          maximum allowed border width is tilewidth / 5.
 * 
*/ PIX * pixaDisplayTiledAndScaled(PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 x, y, w, h, wd, hd, d, res; l_int32 i, n, nrows, maxht, ninrow, irow, bordval; l_int32 *rowht; l_float32 scalefact; PIX *pix, *pixn, *pix1, *pixb, *pixd; PIXA *pixan; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", __func__, NULL); if (ncols <= 0) return (PIX *)ERROR_PTR("ncols must be > 0", __func__, NULL); spacing = L_MAX(spacing, 0); if (border < 0 || border > tilewidth / 5) border = 0; if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* Normalize scale and depth for each pix; optionally add border */ pixan = pixaCreate(n); bordval = (outdepth == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; pixGetDimensions(pix, &w, &h, &d); scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w; if (d == 1 && outdepth > 1 && scalefact < 1.0) pix1 = pixScaleToGray(pix, scalefact); else pix1 = pixScale(pix, scalefact, scalefact); if (outdepth == 1) pixn = pixConvertTo1(pix1, 128); else if (outdepth == 8) pixn = pixConvertTo8(pix1, FALSE); else /* outdepth == 32 */ pixn = pixConvertTo32(pix1); pixDestroy(&pix1); if (border) pixb = pixAddBorder(pixn, border, bordval); else pixb = pixClone(pixn); pixaAddPix(pixan, pixb, L_INSERT); pixDestroy(&pix); pixDestroy(&pixn); } if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */ pixaDestroy(&pixan); return (PIX *)ERROR_PTR("no components", __func__, NULL); } /* Determine the size of each row and of pixd */ wd = tilewidth * ncols + spacing * (ncols + 1); nrows = (n + ncols - 1) / ncols; if ((rowht = (l_int32 *)LEPT_CALLOC(nrows, sizeof(l_int32))) == NULL) { pixaDestroy(&pixan); return (PIX *)ERROR_PTR("rowht array not made", __func__, NULL); } maxht = 0; ninrow = 0; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); ninrow++; pixGetDimensions(pix, &w, &h, NULL); maxht = L_MAX(h, maxht); if (ninrow == ncols) { rowht[irow] = maxht; maxht = ninrow = 0; /* reset */ irow++; } pixDestroy(&pix); } if (ninrow > 0) { /* last fencepost */ rowht[irow] = maxht; irow++; /* total number of rows */ } nrows = irow; hd = spacing * (nrows + 1); for (i = 0; i < nrows; i++) hd += rowht[i]; pixd = pixCreate(wd, hd, outdepth); if ((background == 1 && outdepth == 1) || (background == 0 && outdepth != 1)) pixSetAll(pixd); /* Now blit images to pixd */ x = y = spacing; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); if (i == 0) { res = pixGetXRes(pix); pixSetResolution(pixd, res, res); } pixGetDimensions(pix, &w, &h, NULL); if (i && ((i % ncols) == 0)) { /* start new row */ x = spacing; y += spacing + rowht[irow]; irow++; } pixRasterop(pixd, x, y, w, h, PIX_SRC, pix, 0, 0); x += tilewidth + spacing; pixDestroy(&pix); } pixaDestroy(&pixan); LEPT_FREE(rowht); return pixd; } /*! * \brief pixaDisplayTiledWithText() * * \param[in] pixa * \param[in] maxwidth of output image * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] spacing between images, and on outside * \param[in] border width of black border added to each image; * use 0 for no border * \param[in] fontsize 4, 6, ... 20 * \param[in] textcolor 0xrrggbb00 * \return pixd of tiled images, or NULL on error * *
 * Notes:
 *      (1) This is a version of pixaDisplayTiledInRows() that prints, below
 *          each pix, the text in the pix text field.  Up to 127 chars
 *          of text in the pix text field are rendered below each pix.
 *      (2) It renders a pixa to a single image of width not to
 *          exceed %maxwidth, with white background color, with each row
 *          tiled such that the top of each pix is aligned and separated
 *          by %spacing from the next one.
 *      (3) All pix are converted to 32 bpp.
 *      (4) This does a reasonably spacewise-efficient job of laying
 *          out the individual pix images into a tiled composite.
 * 
*/ PIX * pixaDisplayTiledWithText(PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor) { char buf[128]; char *textstr; l_int32 i, n, maxw; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4, *pixd; PIXA *pixad; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); if (maxwidth <= 0) return (PIX *)ERROR_PTR("invalid maxwidth", __func__, NULL); spacing = L_MAX(spacing, 0); border = L_MAX(border, 0); if (scalefactor <= 0.0) scalefactor = 1.0; if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) { l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4); if (fsize & 1) fsize--; L_WARNING("changed fontsize from %d to %d\n", __func__, fontsize, fsize); fontsize = fsize; } /* Be sure the width can accommodate a single column of images */ pixaSizeRange(pixa, NULL, NULL, &maxw, NULL); maxwidth = L_MAX(maxwidth, scalefactor * (maxw + 2 * spacing + 2 * border)); bmf = bmfCreate(NULL, fontsize); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixAddBorderGeneral(pix2, spacing / 2, spacing / 2, spacing / 2, spacing / 2, 0xffffff00); textstr = pixGetText(pix1); if (textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix4 = pixAddSingleTextblock(pix3, bmf, buf, textcolor, L_ADD_BELOW, NULL); } else { pix4 = pixClone(pix3); } pixaAddPix(pixad, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } bmfDestroy(&bmf); pixd = pixaDisplayTiledInRows(pixad, 32, maxwidth, scalefactor, 0, spacing, border); pixaDestroy(&pixad); return pixd; } /*! * \brief pixaDisplayTiledByIndex() * * \param[in] pixa * \param[in] na numa with indices corresponding to the pix in pixa * \param[in] width each pix is scaled to this width * \param[in] spacing between images, and on outside * \param[in] border width of black border added to each image; * use 0 for no border * \param[in] fontsize 4, 6, ... 20 * \param[in] textcolor 0xrrggbb00 * \return pixd of tiled images, or NULL on error * *
 * Notes:
 *      (1) This renders a pixa to a single image with white
 *          background color, where the pix are placed in columns
 *          given by the index value in the numa.  Each pix
 *          is separated by %spacing from the adjacent ones, and
 *          an optional border is placed around them.
 *      (2) Up to 127 chars of text in the pix text field are rendered
 *          below each pix.  Use newlines in the text field to write
 *          the text in multiple lines that fit within the pix width.
 *      (3) To avoid having empty columns, if there are N different
 *          index values, they should be in [0 ... N-1].
 *      (4) All pix are converted to 32 bpp.
 * 
*/ PIX * pixaDisplayTiledByIndex(PIXA *pixa, NUMA *na, l_int32 width, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor) { char buf[128]; char *textstr; l_int32 i, n, x, y, w, h, yval, index; l_float32 maxindex; L_BMF *bmf; BOX *box; NUMA *nay; /* top of the next pix to add in that column */ PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixd; PIXA *pixad; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", __func__, NULL); if (!na) return (PIX *)ERROR_PTR("na not defined", __func__, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no pixa components", __func__, NULL); if (n != numaGetCount(na)) return (PIX *)ERROR_PTR("pixa and na counts differ", __func__, NULL); if (width <= 0) return (PIX *)ERROR_PTR("invalid width", __func__, NULL); if (width < 20) L_WARNING("very small width: %d\n", __func__, width); spacing = L_MAX(spacing, 0); border = L_MAX(border, 0); if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) { l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4); if (fsize & 1) fsize--; L_WARNING("changed fontsize from %d to %d\n", __func__, fontsize, fsize); fontsize = fsize; } /* The pix will be rendered in the order they occupy in pixa. */ bmf = bmfCreate(NULL, fontsize); pixad = pixaCreate(n); numaGetMax(na, &maxindex, NULL); nay = numaMakeConstant(spacing, lept_roundftoi(maxindex) + 1); for (i = 0; i < n; i++) { numaGetIValue(na, i, &index); numaGetIValue(nay, index, &yval); pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixScaleToSize(pix2, width, 0); pix4 = pixAddBorderGeneral(pix3, border, border, border, border, 0); textstr = pixGetText(pix1); if (textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix5 = pixAddTextlines(pix4, bmf, textstr, textcolor, L_ADD_BELOW); } else { pix5 = pixClone(pix4); } pixaAddPix(pixad, pix5, L_INSERT); x = spacing + border + index * (2 * border + width + spacing); y = yval; pixGetDimensions(pix5, &w, &h, NULL); yval += h + spacing; numaSetValue(nay, index, yval); box = boxCreate(x, y, w, h); pixaAddBox(pixad, box, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } numaDestroy(&nay); bmfDestroy(&bmf); pixd = pixaDisplay(pixad, 0, 0); pixaDestroy(&pixad); return pixd; } /*---------------------------------------------------------------------* * Pixa pair display * *---------------------------------------------------------------------*/ /*! * \brief pixaDisplayPairTiledInColumns() * * \param[in] pixas1 * \param[in] pixas2 * \param[in] nx number of columns in output image * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] spacing1 between images within a pair * \param[in] spacing2 between image pairs, and on outside * \param[in] border1 width of black border added to each image; * use 0 for no border * \param[in] border2 width of black border added to each image pair. * use 0 for no border * \param[in] fontsize to print index below each pair. Valid set is * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \param[in] startindex index for the first pair; ignore if %fontsize= 0 * \param[in] sa [optional] array of text strings to display * \return pixd of tiled images, or NULL on error * *
 * Notes:
 *      (1) This renders a pair of pixa in a single image with &nx columns of
 *          tiled pairs.  The background color is white, and each row
 *          is tiled such that the top of each pix is aligned.
 *          The pix are displayed in pairs, taken from the input pixas.
 *          Input %pixas1 and %pixas2 must have the same count of pix.
 *      (2) If %fontsize != 0, text is displayed below each pair, and the
 *          output depth is 32 bpp.  If %sa is defined, the text is taken
 *          sequentially from %sa; otherwise, an integer is displayed with
 *          numbers chosen consecutively starting with %startindex.
 *      (3) If %fontsize == 0, the output depth is determined by the largest
 *          depth required by the pix in the pixa.  Colormaps are removed.
 *      (4) Start with these values and tune for aesthetics:
 *            %nx = 5, %spacing1 = %spacing2 = 15, %border1 = %border2 = 2,
 *            %fontsize = 8.
 * 
*/ PIX * pixaDisplayPairTiledInColumns(PIXA *pixas1, PIXA *pixas2, l_int32 nx, l_float32 scalefactor, l_int32 spacing1, l_int32 spacing2, l_int32 border1, l_int32 border2, l_int32 fontsize, l_int32 startindex, SARRAY *sa) { l_int32 i, n, w, maxd, maxd1, maxd2, text; NUMA *na; PIX *pixs1, *pixs2, *pix1, *pix2, *pix3, *pix4; PIX *pix5, *pix6, *pix7, *pix8, *pix9; PIXA *pixa1, *pixa2; SARRAY *sa1; if (!pixas1) return (PIX *)ERROR_PTR("pixas1 not defined", __func__, NULL); if (!pixas2) return (PIX *)ERROR_PTR("pixas2 not defined", __func__, NULL); spacing1 = L_MAX(spacing1, 0); spacing2 = L_MAX(spacing2, 0); border1 = L_MAX(border1, 0); border2 = L_MAX(border2, 0); if (scalefactor <= 0.0) scalefactor = 1.0; if ((n = pixaGetCount(pixas1)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); if (n != pixaGetCount(pixas2)) return (PIX *)ERROR_PTR("pixa sizes differ", __func__, NULL); text = (fontsize <= 0) ? 0 : 1; if (text && (fontsize < 4 || fontsize > 20 || (fontsize & 1))) { l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4); if (fsize & 1) fsize--; L_WARNING("changed fontsize from %d to %d\n", __func__, fontsize, fsize); fontsize = fsize; } /* Convert to same depth, if necessary */ if (text) { /* adding color text; convert to 32 bpp */ maxd = 32; } else { pixaGetRenderingDepth(pixas1, &maxd1); pixaGetRenderingDepth(pixas2, &maxd2); maxd = L_MAX(maxd1, maxd2); } /* Optionally scale and add borders to each pair; then combine the pairs and add outer border. */ pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pixs1 = pixaGetPix(pixas1, i, L_CLONE); pixs2 = pixaGetPix(pixas2, i, L_CLONE); if (!pixs1 || !pixs2) continue; if (maxd == 1) { pix1 = pixClone(pixs1); pix2 = pixClone(pixs2); } else if (maxd == 8) { pix1 = pixConvertTo8(pixs1, 0); pix2 = pixConvertTo8(pixs2, 0); } else { /* maxd == 32 */ pix1 = pixConvertTo32(pixs1); pix2 = pixConvertTo32(pixs2); } pixDestroy(&pixs1); pixDestroy(&pixs2); if (scalefactor != 1.0) { pix3 = pixScale(pix1, scalefactor, scalefactor); pix4 = pixScale(pix2, scalefactor, scalefactor); } else { pix3 = pixClone(pix1); pix4 = pixClone(pix2); } pixDestroy(&pix1); pixDestroy(&pix2); if (border1) { pix5 = pixAddBlackOrWhiteBorder(pix3, border1, border1, border1, border1, L_GET_BLACK_VAL); pix6 = pixAddBlackOrWhiteBorder(pix4, border1, border1, border1, border1, L_GET_BLACK_VAL); } else { pix5 = pixClone(pix3); pix6 = pixClone(pix4); } pixDestroy(&pix3); pixDestroy(&pix4); if (spacing1) { /* white border */ pix7 = pixAddBlackOrWhiteBorder(pix5, spacing1 / 2, spacing1 / 2, spacing1 / 2, spacing1 / 2, L_GET_WHITE_VAL); pix8 = pixAddBlackOrWhiteBorder(pix6, spacing1 / 2, spacing1 / 2, spacing1 / 2, spacing1 / 2, L_GET_WHITE_VAL); } else { pix7 = pixClone(pix5); pix8 = pixClone(pix6); } pixDestroy(&pix5); pixDestroy(&pix6); pixa2 = pixaCreate(2); pixaAddPix(pixa2, pix7, L_INSERT); pixaAddPix(pixa2, pix8, L_INSERT); pix9 = pixaDisplayTiledInColumns(pixa2, 2, 1.0, 0, 0); pixaAddPix(pixa1, pix9, L_INSERT); pixaDestroy(&pixa2); } if (!text) { pix1 = pixaDisplayTiledInColumns(pixa1, nx, 1.0, spacing2, border2); } else { if (sa) { pixaSetText(pixa1, NULL, sa); } else { n = pixaGetCount(pixa1); na = numaMakeSequence(startindex, 1, n); sa1 = numaConvertToSarray(na, 4, 0, 0, L_INTEGER_VALUE); pixaSetText(pixa1, NULL, sa1); numaDestroy(&na); sarrayDestroy(&sa1); } pixaSizeRange(pixa1, NULL, NULL, &w, NULL); pix1 = pixaDisplayTiledWithText(pixa1, w * (nx + 1), 1.0, spacing2, border2, fontsize, 0xff000000); } pixaDestroy(&pixa1); return pix1; } /*---------------------------------------------------------------------* * Pixaa Display * *---------------------------------------------------------------------*/ /*! * \brief pixaaDisplay() * * \param[in] paa * \param[in] w, h if set to 0, the size is determined from the * bounding box of the components in pixa * \return pix, or NULL on error * *
 * Notes:
 *      (1) Each pix of the paa is displayed at the location given by
 *          its box, translated by the box of the containing pixa
 *          if it exists.
 * 
*/ PIX * pixaaDisplay(PIXAA *paa, l_int32 w, l_int32 h) { l_int32 i, j, n, nbox, na, d, wmax, hmax, x, y, xb, yb, wb, hb; BOXA *boxa1; /* top-level boxa */ BOXA *boxa; PIX *pix1, *pixd; PIXA *pixa; if (!paa) return (PIX *)ERROR_PTR("paa not defined", __func__, NULL); n = pixaaGetCount(paa, NULL); if (n == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ boxa1 = pixaaGetBoxa(paa, L_CLONE); nbox = boxaGetCount(boxa1); if (w == 0 || h == 0) { if (nbox == n) { boxaGetExtent(boxa1, &w, &h, NULL); } else { /* have to use the lower-level boxa for each pixa */ wmax = hmax = 0; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); wmax = L_MAX(wmax, w); hmax = L_MAX(hmax, h); pixaDestroy(&pixa); boxaDestroy(&boxa); } w = wmax; h = hmax; } } /* Get depth from first pix */ pixa = pixaaGetPixa(paa, 0, L_CLONE); pix1 = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix1); pixaDestroy(&pixa); pixDestroy(&pix1); if ((pixd = pixCreate(w, h, d)) == NULL) { boxaDestroy(&boxa1); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } x = y = 0; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); if (nbox == n) boxaGetBoxGeometry(boxa1, i, &x, &y, NULL, NULL); na = pixaGetCount(pixa); for (j = 0; j < na; j++) { pixaGetBoxGeometry(pixa, j, &xb, &yb, &wb, &hb); pix1 = pixaGetPix(pixa, j, L_CLONE); pixRasterop(pixd, x + xb, y + yb, wb, hb, PIX_PAINT, pix1, 0, 0); pixDestroy(&pix1); } pixaDestroy(&pixa); } boxaDestroy(&boxa1); return pixd; } /*! * \brief pixaaDisplayByPixa() * * \param[in] paa * \param[in] maxnx maximum number of columns for rendering each pixa * \param[in] scalefactor applied to every pix; use 1.0 for no scaling * \param[in] hspacing between images on a row (in the pixa) * \param[in] vspacing between tiles rows, each corresponding to a pixa * \param[in] border width of black border added to each image; * use 0 for no border * \return pixd of images in %paa, tiled by pixa in row-major order * *
 * Notes:
 *      (1) This renders a pixaa into a single image.  The pix from each pixa
 *          are rendered on a row.  If the number of pix in the pixa is
 *          larger than %maxnx, the pix will be rendered into more than 1 row.
 *          To insure that each pixa is rendered into one row, use %maxnx
 *          at least as large as the max number of pix in the pixa.
 *      (2) Each row is tiled such that the top of each pix is aligned and
 *          each pix is separated by %hspacing from the next one.
 *          A black border can be added to each pix.
 *      (3) The resulting pix from each row are then rendered vertically,
 *          separated by %vspacing from each other.
 *      (4) The output depth is determined by the largest depth of all
 *          the pix in %paa. Colormaps are removed.
 * 
*/ PIX * pixaaDisplayByPixa(PIXAA *paa, l_int32 maxnx, l_float32 scalefactor, l_int32 hspacing, l_int32 vspacing, l_int32 border) { l_int32 i, n, vs; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; if (!paa) return (PIX *)ERROR_PTR("paa not defined", __func__, NULL); if (scalefactor <= 0.0) scalefactor = 1.0; if (hspacing < 0) hspacing = 0; if (vspacing < 0) vspacing = 0; if (border < 0) border = 0; if ((n = pixaaGetCount(paa, NULL)) == 0) return (PIX *)ERROR_PTR("no components", __func__, NULL); /* Vertical spacing of amount %hspacing is also added at this step */ pixa2 = pixaCreate(0); for (i = 0; i < n; i++) { pixa1 = pixaaGetPixa(paa, i, L_CLONE); pix1 = pixaDisplayTiledInColumns(pixa1, maxnx, scalefactor, hspacing, border); pixaAddPix(pixa2, pix1, L_INSERT); pixaDestroy(&pixa1); } vs = vspacing - 2 * hspacing; pix2 = pixaDisplayTiledInColumns(pixa2, 1, scalefactor, vs, 0); pixaDestroy(&pixa2); return pix2; } /*! * \brief pixaaDisplayTiledAndScaled() * * \param[in] paa * \param[in] outdepth output depth: 1, 8 or 32 bpp * \param[in] tilewidth each pix is scaled to this width * \param[in] ncols number of tiles in each row * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \return pixa of tiled images, one image for each pixa in * the paa, or NULL on error * *
 * Notes:
 *      (1) For each pixa, this generates from all the pix a
 *          tiled/scaled output pix, and puts it in the output pixa.
 *      (2) See comments in pixaDisplayTiledAndScaled().
 * 
*/ PIXA * pixaaDisplayTiledAndScaled(PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 i, n; PIX *pix; PIXA *pixa, *pixad; if (!paa) return (PIXA *)ERROR_PTR("paa not defined", __func__, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIXA *)ERROR_PTR("outdepth not in {1, 8, 32}", __func__, NULL); if (ncols <= 0) return (PIXA *)ERROR_PTR("ncols must be > 0", __func__, NULL); if (border < 0 || border > tilewidth / 5) border = 0; if ((n = pixaaGetCount(paa, NULL)) == 0) return (PIXA *)ERROR_PTR("no components", __func__, NULL); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pix = pixaDisplayTiledAndScaled(pixa, outdepth, tilewidth, ncols, background, spacing, border); pixaAddPix(pixad, pix, L_INSERT); pixaDestroy(&pixa); } return pixad; } /*---------------------------------------------------------------------* * Conversion of all pix to specified type (e.g., depth) * *---------------------------------------------------------------------*/ /*! * \brief pixaConvertTo1() * * \param[in] pixas * \param[in] thresh threshold for final binarization from 8 bpp gray * \return pixad, or NULL on error */ PIXA * pixaConvertTo1(PIXA *pixas, l_int32 thresh) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo1(pix1, thresh); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * \brief pixaConvertTo8() * * \param[in] pixas * \param[in] cmapflag 1 to give pixd a colormap; 0 otherwise * \return pixad each pix is 8 bpp, or NULL on error * *
 * Notes:
 *      (1) See notes for pixConvertTo8(), applied to each pix in pixas.
 * 
*/ PIXA * pixaConvertTo8(PIXA *pixas, l_int32 cmapflag) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo8(pix1, cmapflag); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * \brief pixaConvertTo8Colormap() * * \param[in] pixas * \param[in] dither 1 to dither if necessary; 0 otherwise * \return pixad each pix is 8 bpp, or NULL on error * *
 * Notes:
 *      (1) See notes for pixConvertTo8Colormap(), applied to each pix in pixas.
 * 
*/ PIXA * pixaConvertTo8Colormap(PIXA *pixas, l_int32 dither) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo8Colormap(pix1, dither); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * \brief pixaConvertTo32() * * \param[in] pixas * \return pixad 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) See notes for pixConvertTo32(), applied to each pix in pixas.
 *      (2) This can be used to allow 1 bpp pix in a pixa to be displayed
 *          with color.
 * 
*/ PIXA * pixaConvertTo32(PIXA *pixas) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo32(pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*---------------------------------------------------------------------* * Pixa constrained selection * *---------------------------------------------------------------------*/ /*! * \brief pixaConstrainedSelect() * * \param[in] pixas * \param[in] first first index to choose; >= 0 * \param[in] last biggest possible index to reach; * use -1 to go to the end; otherwise, last >= first * \param[in] nmax maximum number of pix to select; > 0 * \param[in] use_pairs 1 = select pairs of adjacent pix; * 0 = select individual pix * \param[in] copyflag L_COPY, L_CLONE * \return pixad if OK, NULL on error * *
 * Notes:
 *     (1) See notes in genConstrainedNumaInRange() for how selection
 *         is made.
 *     (2) This returns a selection of the pix in the input pixa.
 *     (3) Use copyflag == L_COPY if you don't want changes in the pix
 *         in the returned pixa to affect those in the input pixa.
 * 
*/ PIXA * pixaConstrainedSelect(PIXA *pixas, l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs, l_int32 copyflag) { l_int32 i, n, nselect, index; NUMA *na; PIX *pix1; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); n = pixaGetCount(pixas); first = L_MAX(0, first); last = (last < 0) ? n - 1 : L_MIN(n - 1, last); if (last < first) return (PIXA *)ERROR_PTR("last < first!", __func__, NULL); if (nmax < 1) return (PIXA *)ERROR_PTR("nmax < 1!", __func__, NULL); na = genConstrainedNumaInRange(first, last, nmax, use_pairs); nselect = numaGetCount(na); pixad = pixaCreate(nselect); for (i = 0; i < nselect; i++) { numaGetIValue(na, i, &index); pix1 = pixaGetPix(pixas, index, copyflag); pixaAddPix(pixad, pix1, L_INSERT); } numaDestroy(&na); return pixad; } /*! * \brief pixaSelectToPdf() * * \param[in] pixas * \param[in] first first index to choose; >= 0 * \param[in] last biggest possible index to reach; * use -1 to go to the end; otherwise, last >= first * \param[in] res override the resolution of each input image, in ppi; * use 0 to respect the resolution embedded in the input * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default * \param[in] quality used for JPEG only; 0 for default (75) * \param[in] color of numbers added to each image (e.g., 0xff000000) * \param[in] fontsize to print number below each image. The valid set * is {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This writes a pdf of the selected images from %pixas, one to
 *          a page.  They are optionally scaled and annotated with the
 *          index printed to the left of the image.
 *      (2) If the input images are 1 bpp and you want the numbers to be
 *          in color, first promote each pix to 8 bpp with a colormap:
 *                pixa1 = pixaConvertTo8(pixas, 1);
 *          and then call this function with the specified color
 * 
*/ l_ok pixaSelectToPdf(PIXA *pixas, l_int32 first, l_int32 last, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, l_uint32 color, l_int32 fontsize, const char *fileout) { l_int32 n; L_BMF *bmf; NUMA *na; PIXA *pixa1, *pixa2; if (!pixas) return ERROR_INT("pixas not defined", __func__, 1); if (type < 0 || type > L_FLATE_ENCODE) { L_WARNING("invalid compression type; using default\n", __func__); type = 0; } if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); /* Select from given range */ n = pixaGetCount(pixas); first = L_MAX(0, first); last = (last < 0) ? n - 1 : L_MIN(n - 1, last); if (first > last) { L_ERROR("first = %d > last = %d\n", __func__, first, last); return 1; } pixa1 = pixaSelectRange(pixas, first, last, L_CLONE); /* Optionally add index numbers */ bmf = (fontsize <= 0) ? NULL : bmfCreate(NULL, fontsize); if (bmf) { na = numaMakeSequence(first, 1.0, last - first + 1); pixa2 = pixaAddTextNumber(pixa1, bmf, na, color, L_ADD_LEFT); numaDestroy(&na); } else { pixa2 = pixaCopy(pixa1, L_CLONE); } pixaDestroy(&pixa1); bmfDestroy(&bmf); pixaConvertToPdf(pixa2, res, scalefactor, type, quality, NULL, fileout); pixaDestroy(&pixa2); return 0; } /*---------------------------------------------------------------------* * Generate pixa from tiled images * *---------------------------------------------------------------------*/ /*! * \brief pixaMakeFromTiledPixa() * * \param[in] pixas of mosaiced templates, one for each digit * \param[in] w width of samples (use 0 for default = 20) * \param[in] h height of samples (use 0 for default = 30) * \param[in] nsamp number of requested samples (use 0 for default = 100) * \return pixa of individual, scaled templates, or NULL on error * *
 * Notes:
 *      (1) This converts from a compressed representation of 1 bpp digit
 *          templates to a pixa where each pix has a single labeled template.
 *      (2) The mosaics hold 100 templates each, and the number of templates
 *          %nsamp selected for each digit can be between 1 and 100.
 *      (3) Each mosaic has the number of images written in the text field,
 *          and the i-th pix contains samples of the i-th digit.  That value
 *          is written into the text field of each template in the output.
 * 
*/ PIXA * pixaMakeFromTiledPixa(PIXA *pixas, l_int32 w, l_int32 h, l_int32 nsamp) { char buf[8]; l_int32 ntiles, i; PIX *pix1; PIXA *pixad, *pixa1; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (nsamp > 1000) return (PIXA *)ERROR_PTR("nsamp too large; typ. 100", __func__, NULL); if (w <= 0) w = 20; if (h <= 0) h = 30; if (nsamp <= 0) nsamp = 100; /* pixas has 10 pix of mosaic'd digits. Each of these images * must be extracted into a pixa of templates, where each template * is labeled with the digit value, and then selectively * concatenated into an output pixa. */ pixad = pixaCreate(10 * nsamp); for (i = 0; i < 10; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pixGetTileCount(pix1, &ntiles); if (nsamp > ntiles) L_WARNING("requested %d; only %d tiles\n", __func__, nsamp, ntiles); pixa1 = pixaMakeFromTiledPix(pix1, w, h, 0, nsamp, NULL); snprintf(buf, sizeof(buf), "%d", i); pixaSetText(pixa1, buf, NULL); pixaJoin(pixad, pixa1, 0, -1); pixaDestroy(&pixa1); pixDestroy(&pix1); } return pixad; } /*! * \brief pixaMakeFromTiledPix() * * \param[in] pixs any depth; colormap OK * \param[in] w width of each tile * \param[in] h height of each tile * \param[in] start first tile to use * \param[in] num number of tiles; use 0 to go to the end * \param[in] boxa [optional] location of rectangular regions * to be extracted * \return pixa if OK, NULL on error * *
 * Notes:
 *      (1) Operations that generate a pix by tiling from a pixa, and
 *          the inverse that generate a pixa from tiles of a pix,
 *          are useful.  One such pair is pixaDisplayUnsplit() and
 *          pixaSplitPix().  This function is a very simple one that
 *          generates a pixa from tiles of a pix. There are two cases:
 *            - the tiles can all be the same size (the inverse of
 *              pixaDisplayOnLattice(), or
 *            - the tiles can differ in size, where there is an
 *              associated boxa (the inverse of pixaCreateFromBoxa().
 *      (2) If all tiles are the same size, %w by %h, use %boxa = NULL.
 *          If the tiles differ in size, use %boxa to extract the
 *          individual images (%w and %h are then ignored).
 *      (3) If the pix was made by pixaDisplayOnLattice(), the number
 *          of tiled images is written into the text field, in the format
 *               n = .
 *      (4) Typical usage: a set of character templates all scaled to
 *          the same size can be stored on a lattice of that size in
 *          a pix, and this function can regenerate the pixa.  If the
 *          templates differ in size, a boxa generated when the tiled
 *          pix was made can be used to indicate the location of
 *          the templates.
 * 
*/ PIXA * pixaMakeFromTiledPix(PIX *pixs, l_int32 w, l_int32 h, l_int32 start, l_int32 num, BOXA *boxa) { l_int32 i, j, k, ws, hs, d, nx, ny, n, n_isvalid, ntiles, nmax; PIX *pix1; PIXA *pixa1; PIXCMAP *cmap; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (!boxa && (w <= 0 || h <= 0)) return (PIXA *)ERROR_PTR("w and h must be > 0", __func__, NULL); if (boxa) /* general case */ return pixaCreateFromBoxa(pixs, boxa, start, num, NULL); /* All tiles are the same size */ pixGetDimensions(pixs, &ws, &hs, &d); nx = ws / w; ny = hs / h; if (nx < 1 || ny < 1) return (PIXA *)ERROR_PTR("invalid dimensions", __func__, NULL); if (nx * w != ws || ny * h != hs) L_WARNING("some tiles will be clipped\n", __func__); /* Check the text field of the pix. It may tell how many * tiles hold valid data. If a valid value is not found, * assume all (nx * ny) tiles are valid. */ pixGetTileCount(pixs, &n); n_isvalid = (n <= nx * ny && n > nx * (ny - 1)) ? TRUE : FALSE; ntiles = (n_isvalid) ? n : nx * ny; nmax = ntiles - start; /* max available from start */ num = (num == 0) ? nmax : L_MIN(num, nmax); /* Extract the tiles */ if ((pixa1 = pixaCreate(num)) == NULL) { return (PIXA *)ERROR_PTR("pixa1 not made", __func__, NULL); } cmap = pixGetColormap(pixs); for (i = 0, k = 0; i < ny; i++) { for (j = 0; j < nx; j++, k++) { if (k < start) continue; if (k >= start + num) break; pix1 = pixCreate(w, h, d); if (cmap) pixSetColormap(pix1, pixcmapCopy(cmap)); pixRasterop(pix1, 0, 0, w, h, PIX_SRC, pixs, j * w, i * h); pixaAddPix(pixa1, pix1, L_INSERT); } } return pixa1; } /*! * \brief pixGetTileCount() * * \param[in] pix * \param[out] *pn number embedded in pix text field * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If the pix was made by pixaDisplayOnLattice(), the number
 *          of tiled images is written into the text field, in the format
 *               n = .
 *      (2) This returns 0 if the data is not in the text field, or on error.
 * 
*/ l_ok pixGetTileCount(PIX *pix, l_int32 *pn) { char *text; l_int32 n; if (!pn) return ERROR_INT("&n not defined", __func__, 1); *pn = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); text = pixGetText(pix); if (text && strlen(text) > 4) { if (sscanf(text, "n = %d", &n) == 1) *pn = n; } return 0; } /*---------------------------------------------------------------------* * Pixa display into multiple tiles * *---------------------------------------------------------------------*/ /*! * \brief pixaDisplayMultiTiled() * * \param[in] pixas * \param[in] nx, ny in [1, ... 50], tiling factors in each direction * \param[in] maxw, maxh max sizes to keep * \param[in] scalefactor scale each image by this * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \return pixad if OK, NULL on error * *
 * Notes:
 *      (1) Each set of %nx * %ny images is optionally scaled and saved
 *          into a new pix, and then aggregated.
 *      (2) Set %maxw = %maxh = 0 if you want to include all pix from %pixs.
 *      (3) This is useful for generating a pdf from the output pixa, where
 *          each page is a tile of (%nx * %ny) images from the input pixa.
 * 
*/ PIXA * pixaDisplayMultiTiled(PIXA *pixas, l_int32 nx, l_int32 ny, l_int32 maxw, l_int32 maxh, l_float32 scalefactor, l_int32 spacing, l_int32 border) { l_int32 n, i, j, ntile, nout, index; PIX *pix1, *pix2; PIXA *pixa1, *pixa2, *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return (PIXA *)ERROR_PTR("invalid tiling factor(s)", __func__, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("pixas is empty", __func__, NULL); /* Filter out large ones if requested */ if (maxw == 0 && maxh == 0) { pixa1 = pixaCopy(pixas, L_CLONE); } else { maxw = (maxw == 0) ? 1000000 : maxw; maxh = (maxh == 0) ? 1000000 : maxh; pixa1 = pixaSelectBySize(pixas, maxw, maxh, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); n = pixaGetCount(pixa1); } ntile = nx * ny; nout = L_MAX(1, (n + ntile - 1) / ntile); pixad = pixaCreate(nout); for (i = 0, index = 0; i < nout; i++) { /* over tiles */ pixa2 = pixaCreate(ntile); for (j = 0; j < ntile && index < n; j++, index++) { pix1 = pixaGetPix(pixa1, index, L_COPY); pixaAddPix(pixa2, pix1, L_INSERT); } pix2 = pixaDisplayTiledInColumns(pixa2, nx, scalefactor, spacing, border); pixaAddPix(pixad, pix2, L_INSERT); pixaDestroy(&pixa2); } pixaDestroy(&pixa1); return pixad; } /*---------------------------------------------------------------------* * Split pixa into files * *---------------------------------------------------------------------*/ /*! * \brief pixaSplitIntoFiles() * * \param[in] pixas * \param[in] nsplit split pixas into this number of pixa; >= 2 * \param[in] scale scalefactor applied to each pix * \param[in] outwidth the maxwidth parameter of tiled images * for write_pix * \param[in] write_pixa 1 to write the split pixa as separate files * \param[in] write_pix 1 to write tiled images of the split pixa * \param[in] write_pdf 1 to write pdfs of the split pixa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For each requested output, %nsplit files are written into
 *          directory /tmp/lept/split/.
 *      (2) This is useful when a pixa is so large that the images
 *          are not conveniently displayed as a single tiled image at
 *          full resolution.
 * 
*/ l_ok pixaSplitIntoFiles(PIXA *pixas, l_int32 nsplit, l_float32 scale, l_int32 outwidth, l_int32 write_pixa, l_int32 write_pix, l_int32 write_pdf) { char buf[64]; l_int32 i, j, index, n, nt; PIX *pix1, *pix2; PIXA *pixa1; if (!pixas) return ERROR_INT("pixas not defined", __func__, 1); if (nsplit <= 1) return ERROR_INT("nsplit must be >= 2", __func__, 1); if ((nt = pixaGetCount(pixas)) == 0) return ERROR_INT("pixas is empty", __func__, 1); if (!write_pixa && !write_pix && !write_pdf) return ERROR_INT("no output is requested", __func__, 1); lept_mkdir("lept/split"); n = (nt + nsplit - 1) / nsplit; lept_stderr("nt = %d, n = %d, nsplit = %d\n", nt, n, nsplit); for (i = 0, index = 0; i < nsplit; i++) { pixa1 = pixaCreate(n); for (j = 0; j < n && index < nt; j++, index++) { pix1 = pixaGetPix(pixas, index, L_CLONE); pix2 = pixScale(pix1, scale, scale); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } if (write_pixa) { snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.pa", i + 1); pixaWriteDebug(buf, pixa1); } if (write_pix) { snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.tif", i + 1); pix1 = pixaDisplayTiledInRows(pixa1, 1, outwidth, 1.0, 0, 20, 2); pixWriteDebug(buf, pix1, IFF_TIFF_G4); pixDestroy(&pix1); } if (write_pdf) { snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.pdf", i + 1); pixaConvertToPdf(pixa1, 0, 1.0, L_G4_ENCODE, 0, buf, buf); } pixaDestroy(&pixa1); } return 0; } /*---------------------------------------------------------------------* * Tile N-Up * *---------------------------------------------------------------------*/ /*! * \brief convertToNUpFiles() * * \param[in] dir full path to directory of images * \param[in] substr [optional] can be null * \param[in] nx, ny in [1, ... 50], tiling factors in each direction * \param[in] tw target width, in pixels; must be >= 20 * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \param[in] fontsize to print tail of filename with image. Valid set is * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \param[in] outdir subdirectory of /tmp to put N-up tiled images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Each set of %nx * %ny images is scaled and tiled into a single
 *          image, that is written out to %outdir.
 *      (2) All images in each %nx * %ny set are scaled to the same
 *          width, %tw.  This is typically used when all images are
 *          roughly the same size.
 *      (3) This is useful for generating a pdf from the set of input
 *          files, where each page is a tile of (%nx * %ny) input images.
 *          Typical values for %nx and %ny are in the range [2 ... 5].
 *      (4) If %fontsize != 0, each image has the tail of its filename
 *          rendered below it.
 * 
*/ l_ok convertToNUpFiles(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *outdir) { l_int32 d, format; char rootpath[256]; PIXA *pixa; if (!dir) return ERROR_INT("dir not defined", __func__, 1); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return ERROR_INT("invalid tiling N-factor", __func__, 1); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return ERROR_INT("invalid fontsize", __func__, 1); if (!outdir) return ERROR_INT("outdir not defined", __func__, 1); pixa = convertToNUpPixa(dir, substr, nx, ny, tw, spacing, border, fontsize); if (!pixa) return ERROR_INT("pixa not made", __func__, 1); lept_rmdir(outdir); lept_mkdir(outdir); pixaGetRenderingDepth(pixa, &d); format = (d == 1) ? IFF_TIFF_G4 : IFF_JFIF_JPEG; makeTempDirname(rootpath, 256, outdir); modifyTrailingSlash(rootpath, 256, L_ADD_TRAIL_SLASH); pixaWriteFiles(rootpath, pixa, format); pixaDestroy(&pixa); return 0; } /*! * \brief convertToNUpPixa() * * \param[in] dir full path to directory of images * \param[in] substr [optional] can be null * \param[in] nx, ny in [1, ... 50], tiling factors in each direction * \param[in] tw target width, in pixels; must be >= 20 * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \param[in] fontsize to print tail of filename with image. Valid set is * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \return pixad, or NULL on error * *
 * Notes:
 *      (1) See notes for convertToNUpFiles()
 * 
*/ PIXA * convertToNUpPixa(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize) { l_int32 i, n; char *fname, *tail; PIXA *pixa1, *pixa2; SARRAY *sa1, *sa2; if (!dir) return (PIXA *)ERROR_PTR("dir not defined", __func__, NULL); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return (PIXA *)ERROR_PTR("invalid tiling N-factor", __func__, NULL); if (tw < 20) return (PIXA *)ERROR_PTR("tw must be >= 20", __func__, NULL); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return (PIXA *)ERROR_PTR("invalid fontsize", __func__, NULL); sa1 = getSortedPathnamesInDirectory(dir, substr, 0, 0); pixa1 = pixaReadFilesSA(sa1); n = sarrayGetCount(sa1); sa2 = sarrayCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa1, i, L_NOCOPY); splitPathAtDirectory(fname, NULL, &tail); sarrayAddString(sa2, tail, L_INSERT); } sarrayDestroy(&sa1); pixa2 = pixaConvertToNUpPixa(pixa1, sa2, nx, ny, tw, spacing, border, fontsize); pixaDestroy(&pixa1); sarrayDestroy(&sa2); return pixa2; } /*! * \brief pixaConvertToNUpPixa() * * \param[in] pixas * \param[in] sa [optional] array of strings associated with each pix * \param[in] nx, ny in [1, ... 50], tiling factors in each direction * \param[in] tw target width, in pixels; must be >= 20 * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \param[in] fontsize to print string with each image. Valid set is * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \return pixad, or NULL on error * *
 * Notes:
 *      (1) This takes an input pixa and an optional array of strings, and
 *          generates a pixa of NUp tiles from the input, labeled with
 *          the strings if they exist and %fontsize != 0.
 *      (2) See notes for convertToNUpFiles()
 * 
*/ PIXA * pixaConvertToNUpPixa(PIXA *pixas, SARRAY *sa, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize) { l_int32 i, j, k, nt, n2, nout, d; char *str; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return (PIXA *)ERROR_PTR("invalid tiling N-factor", __func__, NULL); if (tw < 20) return (PIXA *)ERROR_PTR("tw must be >= 20", __func__, NULL); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return (PIXA *)ERROR_PTR("invalid fontsize", __func__, NULL); nt = pixaGetCount(pixas); if (sa && (sarrayGetCount(sa) != nt)) { L_WARNING("pixa size %d not equal to sarray size %d\n", __func__, nt, sarrayGetCount(sa)); } n2 = nx * ny; nout = (nt + n2 - 1) / n2; pixad = pixaCreate(nout); bmf = (fontsize == 0) ? NULL : bmfCreate(NULL, fontsize); for (i = 0, j = 0; i < nout; i++) { pixa1 = pixaCreate(n2); for (k = 0; k < n2 && j < nt; j++, k++) { pix1 = pixaGetPix(pixas, j, L_CLONE); pix2 = pixScaleToSize(pix1, tw, 0); /* all images have width tw */ if (bmf && sa) { str = sarrayGetString(sa, j, L_NOCOPY); pix3 = pixAddTextlines(pix2, bmf, str, 0xff000000, L_ADD_BELOW); } else { pix3 = pixClone(pix2); } pixaAddPix(pixa1, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } if (pixaGetCount(pixa1) == 0) { /* probably won't happen */ pixaDestroy(&pixa1); continue; } /* Add 2 * border to image width to prevent scaling */ pixaGetRenderingDepth(pixa1, &d); pix4 = pixaDisplayTiledAndScaled(pixa1, d, tw + 2 * border, nx, 0, spacing, border); pixaAddPix(pixad, pix4, L_INSERT); pixaDestroy(&pixa1); } bmfDestroy(&bmf); return pixad; } /*---------------------------------------------------------------------* * Render two pixa side-by-side for comparison * *---------------------------------------------------------------------*/ /*! * \brief pixaCompareInPdf() * * \param[in] pixa1 * \param[in] pixa2 * \param[in] nx, ny in [1, ... 20], tiling factors in each direction * \param[in] tw target width, in pixels; must be >= 20 * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image * and on each pair; use 0 for no border * \param[in] fontsize to print index of each pair of images. Valid set * is {4,6,8,10,12,14,16,18,20}. Use 0 to disable. * \param[in] fileout output pdf file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This takes two pixa and renders them interleaved, side-by-side
 *          in a pdf.  A warning is issued if the input pixa arrays
 *          have different lengths.
 *      (2) %nx and %ny specify how many side-by-side pairs are displayed
 *          on each pdf page.  For example, if %nx = 1 and %ny = 2, then
 *          two pairs are shown, one above the other, on each page.
 *      (3) The input pix are scaled to a target width of %tw, and
 *          then paired with optional %spacing between and optional
 *          black border of width %border.
 *      (4) After a pixa is generated of these tiled images, it is
 *          written to %fileout as a pdf.
 *      (5) Typical numbers for the input parameters are:
 *            %nx = small integer (1 - 4)
 *            %ny = 2 * %nx
 *            %tw = 200 - 500 pixels
 *            %spacing = 10
 *            %border = 2
 *            %fontsize = 10
 *      (6) If %fontsize != 0, the index of the pix pair in their pixa
 *          is printed out below each pair.
 * 
*/ l_ok pixaCompareInPdf(PIXA *pixa1, PIXA *pixa2, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *fileout) { l_int32 n1, n2, npairs; PIXA *pixa3, *pixa4, *pixa5; SARRAY *sa; if (!pixa1 || !pixa2) return ERROR_INT("pixa1 and pixa2 not both defined", __func__, 1); if (nx < 1 || ny < 1 || nx > 20 || ny > 20) return ERROR_INT("invalid tiling factors", __func__, 1); if (tw < 20) return ERROR_INT("invalid tw; tw must be >= 20", __func__, 1); if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) return ERROR_INT("invalid fontsize", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); n1 = pixaGetCount(pixa1); n2 = pixaGetCount(pixa2); if (n1 == 0 || n2 == 0) return ERROR_INT("at least one pixa is empty", __func__, 1); if (n1 != n2) L_WARNING("sizes (%d, %d) differ; using the minimum in interleave\n", __func__, n1, n2); /* Interleave the input pixa */ if ((pixa3 = pixaInterleave(pixa1, pixa2, L_CLONE)) == NULL) return ERROR_INT("pixa3 not made", __func__, 1); /* Scale the images if necessary and pair them up side/by/side */ pixa4 = pixaConvertToNUpPixa(pixa3, NULL, 2, 1, tw, spacing, border, 0); pixaDestroy(&pixa3); /* Label the pairs and mosaic into pages without further scaling */ npairs = pixaGetCount(pixa4); sa = (fontsize > 0) ? sarrayGenerateIntegers(npairs) : NULL; pixa5 = pixaConvertToNUpPixa(pixa4, sa, nx, ny, 2 * tw + 4 * border + spacing, spacing, border, fontsize); pixaDestroy(&pixa4); sarrayDestroy(&sa); /* Output as pdf without scaling */ pixaConvertToPdf(pixa5, 0, 1.0, 0, 0, NULL, fileout); pixaDestroy(&pixa5); return 0; } leptonica-1.86.0/src/pixalloc.c000066400000000000000000000432051506303110300163260ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixalloc.c *
 *
 *      Custom memory storage with allocator and deallocator
 *
 *          l_int32       pmsCreate()
 *          void          pmsDestroy()
 *          void         *pmsCustomAlloc()
 *          void          pmsCustomDealloc()
 *          void         *pmsGetAlloc()
 *          l_int32       pmsGetLevelForAlloc()
 *          l_int32       pmsGetLevelForDealloc()
 *          void          pmsLogInfo()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*-------------------------------------------------------------------------* * Pix Memory Storage * * * * This is a simple utility for handling pix memory storage. It is * * enabled by setting the PixMemoryManager allocators to the functions * * that are defined here * * pmsCustomAlloc() * * pmsCustomDealloc() * * Use pmsCreate() at the beginning to do the pre-allocation, and * * pmsDestroy() at the end to clean it up. * *-------------------------------------------------------------------------*/ /* * In the following, the "memory" refers to the image data * field that is used within the pix. The memory store is a * continuous block of memory, that is logically divided into * smaller "chunks" starting with a set at a minimum size, and * followed by sets of increasing size that are a power of 2 larger * than the minimum size. You must specify the number of chunks * of each size. * * A requested data chunk, if it exists, is borrowed from the memory * storage, and returned after use. If the chunk is too small, or * too large, or if all chunks in the appropriate size range are * in use, the memory is allocated dynamically and freed after use. * * There are four parameters that determine the use of pre-allocated memory: * * minsize: any requested chunk smaller than this is allocated * dynamically and destroyed after use. No preallocated * memory is used. * smallest: the size of the smallest pre-allocated memory chunk. * nlevels: the number of different sizes of data chunks, each a * power of 2 larger than 'smallest'. * numalloc: a Numa of size 'nlevels' containing the number of data * chunks for each size that are in the memory store. * * As an example, suppose: * minsize = 0.5MB * smallest = 1.0MB * nlevels = 4 * numalloc = {10, 5, 5, 5} * Then the total amount of allocated memory (in MB) is * 10 * 1 + 5 * 2 + 5 * 4 + 5 * 8 = 80 MB * Any pix requiring less than 0.5 MB or more than 8 MB of memory will * not come from the memory store. Instead, it will be dynamically * allocated and freed after use. * * How is this implemented? * * At setup, the full data block size is computed and allocated. * The addresses of the individual chunks are found, and the pointers * are stored in a set of Ptra (generic pointer arrays), using one Ptra * for each of the sizes of the chunks. When returning a chunk after * use, it is necessary to determine from the address which size level * (ptra) the chunk belongs to. This is done by comparing the address * of the associated chunk. * * In the event that memory chunks need to be dynamically allocated, * either (1) because they are too small or too large for the memory * store or (2) because all the pix of that size (i.e., in the * appropriate level) in the memory store are in use, the * addresses generated will be outside the pre-allocated block. * After use they won't be returned to a ptra; instead the deallocator * will free them. */ /*! Pix memory storage */ struct PixMemoryStore { struct L_Ptraa *paa; /*!< Holds ptrs to allocated memory */ size_t minsize; /*!< Pix smaller than this (in bytes) */ /*!< are allocated dynamically */ size_t smallest; /*!< Smallest mem (in bytes) alloc'd */ size_t largest; /*!< Larest mem (in bytes) alloc'd */ size_t nbytes; /*!< Size of allocated block w/ all chunks */ l_int32 nlevels; /*!< Num of power-of-2 sizes pre-alloc'd */ size_t *sizes; /*!< Mem sizes at each power-of-2 level */ l_int32 *allocarray; /*!< Number of mem alloc'd at each size */ l_uint32 *baseptr; /*!< ptr to allocated array */ l_uint32 *maxptr; /*!< ptr just beyond allocated memory */ l_uint32 **firstptr; /*!< array of ptrs to first chunk in size */ l_int32 *memused; /*!< log: total # of pix used (by level) */ l_int32 *meminuse; /*!< log: # of pix in use (by level) */ l_int32 *memmax; /*!< log: max # of pix in use (by level) */ l_int32 *memempty; /*!< log: # of pix alloc'd because */ /*!< the store was empty (by level) */ char *logfile; /*!< log: set to null if no logging */ }; typedef struct PixMemoryStore L_PIX_MEM_STORE; static L_PIX_MEM_STORE *CustomPMS = NULL; /*! * \brief pmsCreate() * * \param[in] minsize of data chunk that can be supplied by pms * \param[in] smallest bytes of the smallest pre-allocated data chunk. * \param[in] numalloc array with the number of data chunks for each * size that are in the memory store * \param[in] logfile use for debugging; null otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This computes the size of the block of memory required
 *          and allocates it.  Each chunk starts on a 32-bit word boundary.
 *          The chunk sizes are in powers of 2, starting at %smallest,
 *          and the number of levels and chunks at each level is
 *          specified by %numalloc.
 *      (2) This is intended to manage the image data for a small number
 *          of relatively large pix.  The system malloc is expected to
 *          handle very large numbers of small chunks efficiently.
 *      (3) Important: set the allocators and call this function
 *          before any pix have been allocated.  Destroy all the pix
 *          in the normal way before calling pmsDestroy().
 *      (4) The pms struct is stored in a static global, so this function
 *          is not thread-safe.  When used, there must be only one thread
 *          per process.
 * 
*/ l_ok pmsCreate(size_t minsize, size_t smallest, NUMA *numalloc, const char *logfile) { l_int32 nlevels, i, j, nbytes; l_int32 *alloca; l_float32 nchunks; l_uint32 *baseptr, *data; l_uint32 **firstptr; size_t *sizes; L_PIX_MEM_STORE *pms; L_PTRA *pa; L_PTRAA *paa; if (!numalloc) return ERROR_INT("numalloc not defined", __func__, 1); numaGetSum(numalloc, &nchunks); if (nchunks > 1000.0) L_WARNING("There are %.0f chunks\n", __func__, nchunks); pms = (L_PIX_MEM_STORE *)LEPT_CALLOC(1, sizeof(L_PIX_MEM_STORE)); CustomPMS = pms; /* Make sure that minsize and smallest are multiples of 32 bit words */ if (minsize % 4 != 0) minsize -= minsize % 4; pms->minsize = minsize; nlevels = numaGetCount(numalloc); pms->nlevels = nlevels; if ((sizes = (size_t *)LEPT_CALLOC(nlevels, sizeof(size_t))) == NULL) return ERROR_INT("sizes not made", __func__, 1); pms->sizes = sizes; if (smallest % 4 != 0) smallest += 4 - (smallest % 4); pms->smallest = smallest; for (i = 0; i < nlevels; i++) sizes[i] = smallest * ((size_t)1 << i); pms->largest = sizes[nlevels - 1]; alloca = numaGetIArray(numalloc); pms->allocarray = alloca; if ((paa = ptraaCreate(nlevels)) == NULL) return ERROR_INT("paa not made", __func__, 1); pms->paa = paa; for (i = 0, nbytes = 0; i < nlevels; i++) nbytes += alloca[i] * sizes[i]; pms->nbytes = nbytes; if ((baseptr = (l_uint32 *)LEPT_CALLOC(nbytes / 4, sizeof(l_uint32))) == NULL) return ERROR_INT("calloc fail for baseptr", __func__, 1); pms->baseptr = baseptr; pms->maxptr = baseptr + nbytes / 4; /* just beyond the memory store */ if ((firstptr = (l_uint32 **)LEPT_CALLOC(nlevels, sizeof(l_uint32 *))) == NULL) return ERROR_INT("calloc fail for firstptr", __func__, 1); pms->firstptr = firstptr; data = baseptr; for (i = 0; i < nlevels; i++) { if ((pa = ptraCreate(alloca[i])) == NULL) return ERROR_INT("pa not made", __func__, 1); ptraaInsertPtra(paa, i, pa); firstptr[i] = data; for (j = 0; j < alloca[i]; j++) { ptraAdd(pa, data); data += sizes[i] / 4; } } if (logfile) { pms->memused = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); pms->meminuse = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); pms->memmax = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); pms->memempty = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); pms->logfile = stringNew(logfile); } return 0; } /*! * \brief pmsDestroy() * *
 * Notes:
 *      (1) Important: call this function at the end of the program, after
 *          the last pix has been destroyed.
 * 
*/ void pmsDestroy(void) { L_PIX_MEM_STORE *pms; if ((pms = CustomPMS) == NULL) return; ptraaDestroy(&pms->paa, FALSE, FALSE); /* don't touch the ptrs */ LEPT_FREE(pms->baseptr); /* free the memory */ if (pms->logfile) { pmsLogInfo(); LEPT_FREE(pms->logfile); LEPT_FREE(pms->memused); LEPT_FREE(pms->meminuse); LEPT_FREE(pms->memmax); LEPT_FREE(pms->memempty); } LEPT_FREE(pms->sizes); LEPT_FREE(pms->allocarray); LEPT_FREE(pms->firstptr); LEPT_FREE(pms); CustomPMS = NULL; } /*! * \brief pmsCustomAlloc() * * \param[in] nbytes min number of bytes in the chunk to be retrieved * \return data ptr to chunk * *
 * Notes:
 *      (1) This attempts to find a suitable pre-allocated chunk.
 *          If not found, it dynamically allocates the chunk.
 *      (2) If logging is turned on, the allocations that are not taken
 *          from the memory store, and are at least as large as the
 *          minimum size the store can handle, are logged to file.
 * 
*/ void * pmsCustomAlloc(size_t nbytes) { l_int32 level; void *data; L_PIX_MEM_STORE *pms; L_PTRA *pa; if ((pms = CustomPMS) == NULL) return (void *)ERROR_PTR("pms not defined", __func__, NULL); pmsGetLevelForAlloc(nbytes, &level); if (level < 0) { /* size range invalid; must alloc */ if ((data = pmsGetAlloc(nbytes)) == NULL) return (void *)ERROR_PTR("data not made", __func__, NULL); } else { /* get from store */ pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); data = ptraRemoveLast(pa); if (data && pms->logfile) { pms->memused[level]++; pms->meminuse[level]++; if (pms->meminuse[level] > pms->memmax[level]) pms->memmax[level]++; } if (!data) { /* none left at this level */ data = pmsGetAlloc(nbytes); if (pms->logfile) pms->memempty[level]++; } } return data; } /*! * \brief pmsCustomDealloc() * * \param[in] data to be freed or returned to the storage * \return void */ void pmsCustomDealloc(void *data) { l_int32 level; L_PIX_MEM_STORE *pms; L_PTRA *pa; if ((pms = CustomPMS) == NULL) { L_ERROR("pms not defined\n", __func__); return; } if (pmsGetLevelForDealloc(data, &level) == 1) { L_ERROR("level not found\n", __func__); return; } if (level < 0) { /* no logging; just free the data */ LEPT_FREE(data); } else { /* return the data to the store */ pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); ptraAdd(pa, data); if (pms->logfile) pms->meminuse[level]--; } } /*! * \brief pmsGetAlloc() * * \param[in] nbytes * \return data * *
 * Notes:
 *      (1) This is called when a request for pix data cannot be
 *          obtained from the preallocated memory store.  After use it
 *          is freed like normal memory.
 *      (2) If logging is on, only write out allocs that are as large as
 *          the minimum size handled by the memory store.
 *      (3) The C99 platform-independent format specifier for size_t is %zu.
 *          Windows since at least VC-2015 is conforming; we can now use %zu.
 * 
*/ void * pmsGetAlloc(size_t nbytes) { void *data; FILE *fp; L_PIX_MEM_STORE *pms; if ((pms = CustomPMS) == NULL) return (void *)ERROR_PTR("pms not defined", __func__, NULL); if ((data = (void *)LEPT_CALLOC(nbytes, sizeof(char))) == NULL) return (void *)ERROR_PTR("data not made", __func__, NULL); if (pms->logfile && nbytes >= pms->smallest) { if ((fp = fopenWriteStream(pms->logfile, "a")) != NULL) { fprintf(fp, "Alloc %zu bytes at %p\n", nbytes, data); fclose(fp); } else { L_ERROR("failed to open stream for %s\n", __func__, pms->logfile); } } return data; } /*! * \brief pmsGetLevelForAlloc() * * \param[in] nbytes min number of bytes in the chunk to be retrieved * \param[out] plevel -1 if either too small or too large * \return 0 if OK, 1 on error */ l_ok pmsGetLevelForAlloc(size_t nbytes, l_int32 *plevel) { l_int32 i; l_float64 ratio; L_PIX_MEM_STORE *pms; if (!plevel) return ERROR_INT("&level not defined", __func__, 1); *plevel = -1; if ((pms = CustomPMS) == NULL) return ERROR_INT("pms not defined", __func__, 1); if (nbytes < pms->minsize || nbytes > pms->largest) return 0; /* -1 */ ratio = (l_float64)nbytes / (l_float64)(pms->smallest); for (i = 0; i < pms->nlevels; i++) { if (ratio <= 1.0) break; ratio /= 2.0; } *plevel = i; return 0; } /*! * \brief pmsGetLevelForDealloc() * * \param[in] data ptr to memory chunk * \param[out] plevel level in memory store; -1 if allocated * outside the store * \return 0 if OK, 1 on error */ l_ok pmsGetLevelForDealloc(void *data, l_int32 *plevel) { l_int32 i; l_uint32 *first; L_PIX_MEM_STORE *pms; if (!plevel) return ERROR_INT("&level not defined", __func__, 1); *plevel = -1; if (!data) return ERROR_INT("data not defined", __func__, 1); if ((pms = CustomPMS) == NULL) return ERROR_INT("pms not defined", __func__, 1); if (data < (void *)pms->baseptr || data >= (void *)pms->maxptr) return 0; /* -1 */ for (i = 1; i < pms->nlevels; i++) { first = pms->firstptr[i]; if (data < (void *)first) break; } *plevel = i - 1; return 0; } /*! * \brief pmsLogInfo() */ void pmsLogInfo(void) { l_int32 i; L_PIX_MEM_STORE *pms; if ((pms = CustomPMS) == NULL) return; lept_stderr("Total number of pix used at each level\n"); for (i = 0; i < pms->nlevels; i++) lept_stderr(" Level %d (%zu bytes): %d\n", i, pms->sizes[i], pms->memused[i]); lept_stderr("Max number of pix in use at any time in each level\n"); for (i = 0; i < pms->nlevels; i++) lept_stderr(" Level %d (%zu bytes): %d\n", i, pms->sizes[i], pms->memmax[i]); lept_stderr("Number of pix alloc'd because none were available\n"); for (i = 0; i < pms->nlevels; i++) lept_stderr(" Level %d (%zu bytes): %d\n", i, pms->sizes[i], pms->memempty[i]); } leptonica-1.86.0/src/pixarith.c000066400000000000000000001525661506303110300163560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixarith.c *
 *
 *      One-image grayscale arithmetic operations (8, 16, 32 bpp)
 *           l_int32     pixAddConstantGray()
 *           l_int32     pixMultConstantGray()
 *
 *      Two-image grayscale arithmetic operations (8, 16, 32 bpp)
 *           PIX        *pixAddGray()
 *           PIX        *pixSubtractGray()
 *           PIX        *pixMultiplyGray()
 *
 *      Grayscale threshold operation (8, 16, 32 bpp)
 *           PIX        *pixThresholdToValue()
 *
 *      Image accumulator arithmetic operations
 *           PIX        *pixInitAccumulate()
 *           PIX        *pixFinalAccumulate()
 *           PIX        *pixFinalAccumulateThreshold()
 *           l_int32     pixAccumulate()
 *           l_int32     pixMultConstAccumulate()
 *
 *      Absolute value of difference
 *           PIX        *pixAbsDifference()
 *
 *      Sum of color images
 *           PIX        *pixAddRGB()
 *
 *      Two-image min and max operations (8 and 16 bpp)
 *           PIX        *pixMinOrMax()
 *
 *      Scale pix for maximum dynamic range
 *           PIX        *pixMaxDynamicRange()
 *           PIX        *pixMaxDynamicRangeRGB()
 *
 *      RGB pixel value scaling
 *           l_uint32    linearScaleRGBVal()
 *           l_uint32    logScaleRGBVal()
 *
 *      Log base2 lookup
 *           l_float32  *makeLogBase2Tab()
 *           l_float32   getLogBase2()
 *
 *      The image accumulator operations are used when you expect
 *      overflow from 8 bits on intermediate results.  For example,
 *      you might want a tophat contrast operator which is
 *         3*I - opening(I,S) - closing(I,S)
 *      To use these operations, first use the init to generate
 *      a 16 bpp image, use the accumulate to add or subtract 8 bpp
 *      images from that, or the multiply constant to multiply
 *      by a small constant (much less than 256 -- we don't want
 *      overflow from the 16 bit images!), and when you're finished
 *      use final to bring the result back to 8 bpp, clipped
 *      if necessary.  There is also a divide function, which
 *      can be used to divide one image by another, scaling the
 *      result for maximum dynamic range, and giving back the
 *      8 bpp result.
 *
 *      A simpler interface to the arithmetic operations is
 *      provided in pixacc.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /*-------------------------------------------------------------* * One-image grayscale arithmetic operations * *-------------------------------------------------------------*/ /*! * \brief pixAddConstantGray() * * \param[in] pixs 8, 16 or 32 bpp * \param[in] val amount to add to each pixel * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place operation.
 *      (2) No clipping for 32 bpp.
 *      (3) For 8 and 16 bpp, if val > 0 the result is clipped
 *          to 0xff and 0xffff, rsp.
 *      (4) For 8 and 16 bpp, if val < 0 the result is clipped to 0.
 * 
*/ l_ok pixAddConstantGray(PIX *pixs, l_int32 val) { l_int32 i, j, w, h, d, wpl, pval; l_uint32 *data, *line; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 8, 16 or 32 bpp", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 8) { if (val < 0) { for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = L_MAX(0, pval + val); SET_DATA_BYTE(line, j, pval); } } else { /* val >= 0 */ for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = L_MIN(255, pval + val); SET_DATA_BYTE(line, j, pval); } } } else if (d == 16) { if (val < 0) { for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = L_MAX(0, pval + val); SET_DATA_TWO_BYTES(line, j, pval); } } else { /* val >= 0 */ for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = L_MIN(0xffff, pval + val); SET_DATA_TWO_BYTES(line, j, pval); } } } else { /* d == 32; no check for overflow (< 0 or > 0xffffffff) */ for (j = 0; j < w; j++) *(line + j) += val; } } return 0; } /*! * \brief pixMultConstantGray() * * \param[in] pixs 8, 16 or 32 bpp * \param[in] val >= 0.0; amount to multiply by each pixel * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place operation; val must be >= 0.
 *      (2) No clipping for 32 bpp.
 *      (3) For 8 and 16 bpp, the result is clipped to 0xff and 0xffff, rsp.
 * 
*/ l_ok pixMultConstantGray(PIX *pixs, l_float32 val) { l_int32 i, j, w, h, d, wpl, pval; l_uint32 upval; l_uint32 *data, *line; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 8, 16 or 32 bpp", __func__, 1); if (val < 0.0) return ERROR_INT("val < 0.0", __func__, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 8) { for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = (l_int32)(val * pval); pval = L_MIN(255, pval); SET_DATA_BYTE(line, j, pval); } } else if (d == 16) { for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = (l_int32)(val * pval); pval = L_MIN(0xffff, pval); SET_DATA_TWO_BYTES(line, j, pval); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) { upval = *(line + j); upval = (l_uint32)(val * upval); *(line + j) = upval; } } } return 0; } /*-------------------------------------------------------------* * Two-image grayscale arithmetic ops * *-------------------------------------------------------------*/ /*! * \brief pixAddGray() * * \param[in] pixd [optional]; this can be null, equal to pixs1, or * different from pixs1 * \param[in] pixs1 can be equal to pixd * \param[in] pixs2 * \return pixd always * *
 * Notes:
 *      (1) Arithmetic addition of two 8, 16 or 32 bpp images.
 *      (2) For 8 and 16 bpp, we do explicit clipping to 0xff and 0xffff,
 *          respectively.
 *      (3) Alignment is to UL corner.
 *      (4) There are 3 cases.  The result can go to a new dest,
 *          in-place to pixs1, or to an existing input dest:
 *          * pixd == null:   (src1 + src2) --> new pixd
 *          * pixd == pixs1:  (src1 + src2) --> src1  (in-place)
 *          * pixd != pixs1:  (src1 + src2) --> input pixd
 *      (5) pixs2 must be different from both pixd and pixs1.
 * 
*/ PIX * pixAddGray(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 i, j, d, ws, hs, w, h, wpls, wpld, val, sum; l_uint32 *datas, *datad, *lines, *lined; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixs2 == pixs1) return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", __func__, pixd); if (pixs2 == pixd) return (PIX *)ERROR_PTR("pixs2 and pixd must differ", __func__, pixd); d = pixGetDepth(pixs1); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", __func__, pixd); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", __func__, pixd); if (pixd && (pixGetDepth(pixd) != d)) return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", __func__, pixd); if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal in size\n", __func__); if (pixd && !pixSizesEqual(pixs1, pixd)) L_WARNING("pixs1 and pixd not equal in size\n", __func__); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); /* pixd + pixs2 ==> pixd */ datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lined = datad + i * wpld; lines = datas + i * wpls; if (d == 8) { for (j = 0; j < w; j++) { sum = GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lined, j); val = L_MIN(sum, 255); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { sum = GET_DATA_TWO_BYTES(lines, j) + GET_DATA_TWO_BYTES(lined, j); val = L_MIN(sum, 0xffff); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) *(lined + j) += *(lines + j); } } return pixd; } /*! * \brief pixSubtractGray() * * \param[in] pixd [optional]; this can be null, equal to pixs1, or * different from pixs1 * \param[in] pixs1 can be equal to pixd * \param[in] pixs2 * \return pixd always * *
 * Notes:
 *      (1) Arithmetic subtraction of two 8, 16 or 32 bpp images.
 *      (2) Source pixs2 is always subtracted from source pixs1.
 *      (3) Do explicit clipping to 0.
 *      (4) Alignment is to UL corner.
 *      (5) There are 3 cases.  The result can go to a new dest,
 *          in-place to pixs1, or to an existing input dest:
 *          (a) pixd == null   (src1 - src2) --> new pixd
 *          (b) pixd == pixs1  (src1 - src2) --> src1  (in-place)
 *          (d) pixd != pixs1  (src1 - src2) --> input pixd
 *      (6) pixs2 must be different from both pixd and pixs1.
 * 
*/ PIX * pixSubtractGray(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, ws, hs, d, wpls, wpld, val, diff; l_uint32 *datas, *datad, *lines, *lined; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixs2 == pixs1) return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", __func__, pixd); if (pixs2 == pixd) return (PIX *)ERROR_PTR("pixs2 and pixd must differ", __func__, pixd); d = pixGetDepth(pixs1); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", __func__, pixd); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", __func__, pixd); if (pixd && (pixGetDepth(pixd) != d)) return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", __func__, pixd); if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal in size\n", __func__); if (pixd && !pixSizesEqual(pixs1, pixd)) L_WARNING("pixs1 and pixd not equal in size\n", __func__); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); /* pixd - pixs2 ==> pixd */ datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lined = datad + i * wpld; lines = datas + i * wpls; if (d == 8) { for (j = 0; j < w; j++) { diff = GET_DATA_BYTE(lined, j) - GET_DATA_BYTE(lines, j); val = L_MAX(diff, 0); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { diff = GET_DATA_TWO_BYTES(lined, j) - GET_DATA_TWO_BYTES(lines, j); val = L_MAX(diff, 0); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) *(lined + j) -= *(lines + j); } } return pixd; } /*! * \brief pixMultiplyGray() * * \param[in] pixs 32 bpp rgb or 8 bpp gray * \param[in] pixg 8 bpp gray * \param[in] norm multiplicative factor to avoid overflow; 0 for default * \return pixd, or null on error * *
 * Notes:
 *      (1) This function can be used for correcting a scanned image
 *          under non-uniform illumination.  For that application,
 *          %pixs is the scanned image, %pixg is an image whose values
 *          are inversely related to light from a uniform (say, white)
 *          target, and %norm is typically the inverse of the maximum
 *          pixel value in %pixg.
 *      (2) Set norm = 0 to get the default value, which is the inverse
 *          of the max value in %pixg.  This avoids overflow in the product.
 *      (3) For 32 bpp %pixs, all 3 components are multiplied by the
 *          same number.
 *      (4) Alignment is to UL corner.
 * 
*/ PIX * pixMultiplyGray(PIX *pixs, PIX *pixg, l_float32 norm) { l_int32 i, j, w, h, d, ws, hs, ds, wpls, wplg, wpld; l_int32 rval, gval, bval, rval2, gval2, bval2, vals, valg, val, maxgray; l_uint32 val32; l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &ds); if (ds != 8 && ds != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", __func__, NULL); pixGetDimensions(pixg, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixg not 8 bpp", __func__, NULL); if (norm <= 0.0) { pixGetExtremeValue(pixg, 1, L_SELECT_MAX, NULL, NULL, NULL, &maxgray); norm = (maxgray > 0) ? 1.0f / (l_float32)maxgray : 1.0f; } if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datas = pixGetData(pixs); datag = pixGetData(pixg); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wplg = pixGetWpl(pixg); wpld = pixGetWpl(pixd); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lines = datas + i * wpls; lineg = datag + i * wplg; lined = datad + i * wpld; if (ds == 8) { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); val = (l_int32)(vals * valg * norm + 0.5); val = L_MIN(255, val); SET_DATA_BYTE(lined, j, val); } } else { /* ds == 32 */ for (j = 0; j < w; j++) { val32 = *(lines + j); extractRGBValues(val32, &rval, &gval, &bval); valg = GET_DATA_BYTE(lineg, j); rval2 = (l_int32)(rval * valg * norm + 0.5); rval2 = L_MIN(255, rval2); gval2 = (l_int32)(gval * valg * norm + 0.5); gval2 = L_MIN(255, gval2); bval2 = (l_int32)(bval * valg * norm + 0.5); bval2 = L_MIN(255, bval2); composeRGBPixel(rval2, gval2, bval2, lined + j); } } } return pixd; } /*-------------------------------------------------------------* * Grayscale threshold operation * *-------------------------------------------------------------*/ /*! * \brief pixThresholdToValue() * * \param[in] pixd [optional]; if not null, must be equal to pixs * \param[in] pixs 8, 16, 32 bpp * \param[in] threshval * \param[in] setval * \return pixd always * *
 * Notes:
 *    ~ operation can be in-place (pixs == pixd) or to a new pixd
 *    ~ if %setval > %threshval, sets pixels with a value >= threshval to setval
 *    ~ if %setval < %threshval, sets pixels with a value <= threshval to setval
 *    ~ if %setval == %threshval, no-op
 * 
*/ PIX * pixThresholdToValue(PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval) { l_int32 i, j, w, h, d, wpld, setabove; l_uint32 *datad, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16 or 32 bpp", __func__, pixd); if (pixd && (pixs != pixd)) return (PIX *)ERROR_PTR("pixd exists and is not pixs", __func__, pixd); if (threshval < 0 || setval < 0) return (PIX *)ERROR_PTR("threshval & setval not < 0", __func__, pixd); if (d == 8 && setval > 255) return (PIX *)ERROR_PTR("setval > 255 for 8 bpp", __func__, pixd); if (d == 16 && setval > 0xffff) return (PIX *)ERROR_PTR("setval > 0xffff for 16 bpp", __func__, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); if (setval == threshval) { L_WARNING("setval == threshval; no operation\n", __func__); return pixd; } datad = pixGetData(pixd); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); if (setval > threshval) setabove = TRUE; else setabove = FALSE; for (i = 0; i < h; i++) { lined = datad + i * wpld; if (setabove == TRUE) { if (d == 8) { for (j = 0; j < w; j++) { if (GET_DATA_BYTE(lined, j) - threshval >= 0) SET_DATA_BYTE(lined, j, setval); } } else if (d == 16) { for (j = 0; j < w; j++) { if (GET_DATA_TWO_BYTES(lined, j) - threshval >= 0) SET_DATA_TWO_BYTES(lined, j, setval); } } else { /* d == 32 */ for (j = 0; j < w; j++) { if (*(lined + j) >= threshval) *(lined + j) = setval; } } } else { /* set if below or at threshold */ if (d == 8) { for (j = 0; j < w; j++) { if (GET_DATA_BYTE(lined, j) - threshval <= 0) SET_DATA_BYTE(lined, j, setval); } } else if (d == 16) { for (j = 0; j < w; j++) { if (GET_DATA_TWO_BYTES(lined, j) - threshval <= 0) SET_DATA_TWO_BYTES(lined, j, setval); } } else { /* d == 32 */ for (j = 0; j < w; j++) { if (*(lined + j) <= threshval) *(lined + j) = setval; } } } } return pixd; } /*-------------------------------------------------------------* * Image accumulator arithmetic operations * *-------------------------------------------------------------*/ /*! * \brief pixInitAccumulate() * * \param[in] w, h of accumulate array * \param[in] offset initialize the 32 bpp to have this * value; not more than 0x40000000 * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) %offset must be >= 0.
 *      (2) %offset is used so that we can do arithmetic
 *          with negative number results on l_uint32 data; it
 *          prevents the l_uint32 data from going negative.
 *      (3) Because we use l_int32 intermediate data results,
 *          these should never exceed the max of l_int32 (0x7fffffff).
 *          We do not permit the offset to be above 0x40000000,
 *          which is half way between 0 and the max of l_int32.
 *      (4) The same offset should be used for initialization,
 *          multiplication by a constant, and final extraction!
 *      (5) If you're only adding positive values, %offset can be 0.
 * 
*/ PIX * pixInitAccumulate(l_int32 w, l_int32 h, l_uint32 offset) { PIX *pixd; if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); if (offset > 0x40000000) offset = 0x40000000; pixSetAllArbitrary(pixd, offset); return pixd; } /*! * \brief pixFinalAccumulate() * * \param[in] pixs 32 bpp * \param[in] offset same as used for initialization * \param[in] depth 8, 16 or 32 bpp, of destination * \return pixd 8, 16 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) %offset must be >= 0 and should not exceed 0x40000000.
 *      (2) %offset is subtracted from the src 32 bpp image
 *      (3) For 8 bpp dest, the result is clipped to [0, 0xff]
 *      (4) For 16 bpp dest, the result is clipped to [0, 0xffff]
 * 
*/ PIX * pixFinalAccumulate(PIX *pixs, l_uint32 offset, l_int32 depth) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (depth != 8 && depth != 16 && depth != 32) return (PIX *)ERROR_PTR("dest depth not 8, 16, 32 bpp", __func__, NULL); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (depth == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; val = L_MAX(0, val); val = L_MIN(255, val); SET_DATA_BYTE(lined, j, (l_uint8)val); } } } else if (depth == 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; val = L_MAX(0, val); val = L_MIN(0xffff, val); SET_DATA_TWO_BYTES(lined, j, (l_uint16)val); } } } else { /* depth == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = lines[j] - offset; } } return pixd; } /*! * \brief pixFinalAccumulateThreshold() * * \param[in] pixs 32 bpp * \param[in] offset same as used for initialization * \param[in] threshold values less than this are set in the destination * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) %offset must be >= 0 and should not exceed 0x40000000.
 *      (2) %offset is subtracted from the src 32 bpp image
 * 
*/ PIX * pixFinalAccumulateThreshold(PIX *pixs, l_uint32 offset, l_uint32 threshold) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; if (val >= threshold) { SET_DATA_BIT(lined, j); } } } return pixd; } /*! * \brief pixAccumulate() * * \param[in] pixd 32 bpp * \param[in] pixs 1, 8, 16 or 32 bpp * \param[in] op L_ARITH_ADD or L_ARITH_SUBTRACT * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This adds or subtracts each pixs value from pixd.
 *      (2) This clips to the minimum of pixs and pixd, so they
 *          do not need to be the same size.
 *      (3) The alignment is to the origin [UL corner] of pixs & pixd.
 * 
*/ l_ok pixAccumulate(PIX *pixd, PIX *pixs, l_int32 op) { l_int32 i, j, w, h, d, wd, hd, wpls, wpld; l_uint32 *datas, *datad, *lines, *lined; if (!pixd || (pixGetDepth(pixd) != 32)) return ERROR_INT("pixd not defined or not 32 bpp", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); if (d != 1 && d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 1, 8, 16 or 32 bpp", __func__, 1); if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT) return ERROR_INT("op must be in {L_ARITH_ADD, L_ARITH_SUBTRACT}", __func__, 1); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); w = L_MIN(w, wd); h = L_MIN(h, hd); if (d == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_BIT(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_BIT(lines, j); } } } else if (d == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_BYTE(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_BYTE(lines, j); } } } else if (d == 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_TWO_BYTES(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_TWO_BYTES(lines, j); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += lines[j]; } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= lines[j]; } } } return 0; } /*! * \brief pixMultConstAccumulate() * * \param[in] pixs 32 bpp * \param[in] factor * \param[in] offset same as used for initialization * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) %offset must be >= 0 and should not exceed 0x40000000.
 *      (2) This multiplies each pixel, relative to offset, by %factor.
 *      (3) The result is returned with %offset back in place.
 * 
*/ l_ok pixMultConstAccumulate(PIX *pixs, l_float32 factor, l_uint32 offset) { l_int32 i, j, w, h, wpl, val; l_uint32 *data, *line; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", __func__, 1); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = line[j] - offset; val = (l_int32)(val * factor); val += offset; line[j] = (l_uint32)val; } } return 0; } /*-----------------------------------------------------------------------* * Absolute value of difference * *-----------------------------------------------------------------------*/ /*! * \brief pixAbsDifference() * * \param[in] pixs1, pixs2 both either 8 or 16 bpp gray, or 32 bpp RGB * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The depth of pixs1 and pixs2 must be equal.
 *      (2) Clips computation to the min size, aligning the UL corners
 *      (3) For 8 and 16 bpp, assumes one gray component.
 *      (4) For 32 bpp, assumes 3 color components, and ignores the
 *          LSB of each word (the alpha channel)
 *      (5) Computes the absolute value of the difference between
 *          each component value.
 * 
*/ PIX * pixAbsDifference(PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, w2, h2, d, wpls1, wpls2, wpld, val1, val2, diff; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rdiff, gdiff, bdiff; l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; PIX *pixd; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); d = pixGetDepth(pixs1); if (d != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("src1 and src2 depths unequal", __func__, NULL); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depths not in {8, 16, 32}", __func__, NULL); pixGetDimensions(pixs1, &w, &h, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w, w2); h = L_MIN(h, h2); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs1); datas1 = pixGetData(pixs1); datas2 = pixGetData(pixs2); datad = pixGetData(pixd); wpls1 = pixGetWpl(pixs1); wpls2 = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); if (d == 8) { for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(lines1, j); val2 = GET_DATA_BYTE(lines2, j); diff = L_ABS(val1 - val2); SET_DATA_BYTE(lined, j, diff); } } } else if (d == 16) { for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_TWO_BYTES(lines1, j); val2 = GET_DATA_TWO_BYTES(lines2, j); diff = L_ABS(val1 - val2); SET_DATA_TWO_BYTES(lined, j, diff); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines1[j], &rval1, &gval1, &bval1); extractRGBValues(lines2[j], &rval2, &gval2, &bval2); rdiff = L_ABS(rval1 - rval2); gdiff = L_ABS(gval1 - gval2); bdiff = L_ABS(bval1 - bval2); composeRGBPixel(rdiff, gdiff, bdiff, lined + j); } } } return pixd; } /*-----------------------------------------------------------------------* * Sum of color images * *-----------------------------------------------------------------------*/ /*! * \brief pixAddRGB() * * \param[in] pixs1, pixs2 32 bpp RGB, or colormapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Clips computation to the minimum size, aligning the UL corners.
 *      (2) Removes any colormap to RGB, and ignores the LSB of each
 *          pixel word (the alpha channel).
 *      (3) Adds each component value, pixelwise, clipping to 255.
 *      (4) This is useful to combine two images where most of the
 *          pixels are essentially black, such as in pixPerceptualDiff().
 * 
*/ PIX * pixAddRGB(PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, d, w2, h2, d2, wplc1, wplc2, wpld; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; l_uint32 *datac1, *datac2, *datad, *linec1, *linec2, *lined; PIX *pixc1, *pixc2, *pixd; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, NULL); pixGetDimensions(pixs1, &w, &h, &d); pixGetDimensions(pixs2, &w2, &h2, &d2); if (!pixGetColormap(pixs1) && d != 32) return (PIX *)ERROR_PTR("pixs1 not cmapped or rgb", __func__, NULL); if (!pixGetColormap(pixs2) && d2 != 32) return (PIX *)ERROR_PTR("pixs2 not cmapped or rgb", __func__, NULL); if (pixGetColormap(pixs1)) pixc1 = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); else pixc1 = pixClone(pixs1); if (pixGetColormap(pixs2)) pixc2 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_FULL_COLOR); else pixc2 = pixClone(pixs2); w = L_MIN(w, w2); h = L_MIN(h, h2); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs1); datac1 = pixGetData(pixc1); datac2 = pixGetData(pixc2); datad = pixGetData(pixd); wplc1 = pixGetWpl(pixc1); wplc2 = pixGetWpl(pixc2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linec1 = datac1 + i * wplc1; linec2 = datac2 + i * wplc2; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(linec1[j], &rval1, &gval1, &bval1); extractRGBValues(linec2[j], &rval2, &gval2, &bval2); rval = L_MIN(255, rval1 + rval2); gval = L_MIN(255, gval1 + gval2); bval = L_MIN(255, bval1 + bval2); composeRGBPixel(rval, gval, bval, lined + j); } } pixDestroy(&pixc1); pixDestroy(&pixc2); return pixd; } /*-----------------------------------------------------------------------* * Two-image min and max operations (8 and 16 bpp) * *-----------------------------------------------------------------------*/ /*! * \brief pixMinOrMax() * * \param[in] pixd [optional] destination: this can be null, * equal to pixs1, or different from pixs1 * \param[in] pixs1 can be equal to pixd * \param[in] pixs2 * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX * \return pixd always * *
 * Notes:
 *      (1) This gives the min or max of two images, component-wise.
 *      (2) The depth can be 8 or 16 bpp for 1 component, and 32 bpp
 *          for a 3 component image.  For 32 bpp, ignore the LSB
 *          of each word (the alpha channel)
 *      (3) There are 3 cases:
 *          ~  if pixd == null,   MinOrMax(src1, src2) --> new pixd
 *          ~  if pixd == pixs1,  MinOrMax(src1, src2) --> src1  (in-place)
 *          ~  if pixd != pixs1,  MinOrMax(src1, src2) --> input pixd
 * 
*/ PIX * pixMinOrMax(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type) { l_int32 d, ws, hs, w, h, wpls, wpld, i, j, vals, vald, val; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; l_uint32 *datas, *datad, *lines, *lined; if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", __func__, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", __func__, pixd); if (pixs1 == pixs2) return (PIX *)ERROR_PTR("pixs1 and pixs2 must differ", __func__, pixd); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX) return (PIX *)ERROR_PTR("invalid type", __func__, pixd); d = pixGetDepth(pixs1); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths unequal", __func__, pixd); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not 8, 16 or 32 bpp", __func__, pixd); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(w, ws); h = L_MIN(h, hs); datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (d == 8) { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = GET_DATA_BYTE(lined, j); if (type == L_CHOOSE_MIN) val = L_MIN(vals, vald); else /* type == L_CHOOSE_MAX */ val = L_MAX(vals, vald); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { vals = GET_DATA_TWO_BYTES(lines, j); vald = GET_DATA_TWO_BYTES(lined, j); if (type == L_CHOOSE_MIN) val = L_MIN(vals, vald); else /* type == L_CHOOSE_MAX */ val = L_MAX(vals, vald); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32 */ for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval1, &gval1, &bval1); extractRGBValues(lined[j], &rval2, &gval2, &bval2); if (type == L_CHOOSE_MIN) { rval = L_MIN(rval1, rval2); gval = L_MIN(gval1, gval2); bval = L_MIN(bval1, bval2); } else { /* type == L_CHOOSE_MAX */ rval = L_MAX(rval1, rval2); gval = L_MAX(gval1, gval2); bval = L_MAX(bval1, bval2); } composeRGBPixel(rval, gval, bval, lined + j); } } } return pixd; } /*-----------------------------------------------------------------------* * Scale for maximum dynamic range * *-----------------------------------------------------------------------*/ /*! * \brief pixMaxDynamicRange() * * \param[in] pixs 4, 8, 16 or 32 bpp source * \param[in] type L_LINEAR_SCALE or L_LOG_SCALE * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) Scales pixel values to fit maximally within the dest 8 bpp pixd
 *      (2) Assumes the source 'pixels' are a 1-component scalar.  For
 *          a 32 bpp source, each pixel is treated as a single number --
 *          not as a 3-component rgb pixel value.
 *      (3) Uses a LUT for log scaling.
 * 
*/ PIX * pixMaxDynamicRange(PIX *pixs, l_int32 type) { l_uint8 dval; l_int32 i, j, w, h, d, wpls, wpld, max; l_uint32 *datas, *datad; l_uint32 word, sval; l_uint32 *lines, *lined; l_float32 factor; l_float32 *tab; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {4,8,16,32} bpp", __func__, NULL); if (type != L_LINEAR_SCALE && type != L_LOG_SCALE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* Get max */ max = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { word = *(lines + j); if (d == 4) { max = L_MAX(max, word >> 28); max = L_MAX(max, (word >> 24) & 0xf); max = L_MAX(max, (word >> 20) & 0xf); max = L_MAX(max, (word >> 16) & 0xf); max = L_MAX(max, (word >> 12) & 0xf); max = L_MAX(max, (word >> 8) & 0xf); max = L_MAX(max, (word >> 4) & 0xf); max = L_MAX(max, word & 0xf); } else if (d == 8) { max = L_MAX(max, word >> 24); max = L_MAX(max, (word >> 16) & 0xff); max = L_MAX(max, (word >> 8) & 0xff); max = L_MAX(max, word & 0xff); } else if (d == 16) { max = L_MAX(max, word >> 16); max = L_MAX(max, word & 0xffff); } else { /* d == 32 (rgb) */ max = L_MAX(max, word); } } } /* Map to the full dynamic range */ if (d == 4) { if (type == L_LINEAR_SCALE) { factor = 255.f / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_QBIT(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255.f / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } LEPT_FREE(tab); } } else if (d == 8) { if (type == L_LINEAR_SCALE) { factor = 255.f / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255.f / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } LEPT_FREE(tab); } } else if (d == 16) { if (type == L_LINEAR_SCALE) { factor = 255.f / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_TWO_BYTES(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255.f / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_TWO_BYTES(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } LEPT_FREE(tab); } } else { /* d == 32 */ if (type == L_LINEAR_SCALE) { factor = 255.f / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255.f / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } LEPT_FREE(tab); } } return pixd; } /*! * \brief pixMaxDynamicRangeRGB() * * \param[in] pixs 32 bpp rgb source * \param[in] type L_LINEAR_SCALE or L_LOG_SCALE * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) Scales pixel values to fit maximally within a 32 bpp dest pixd
 *      (2) All color components are scaled with the same factor, based
 *          on the maximum r, g or b component in the image.  This should
 *          not be used if the 32-bit value is a single number (e.g., a
 *          count in a histogram generated by pixMakeHistoHS()).
 *      (3) Uses a LUT for log scaling.
 * 
*/ PIX * pixMaxDynamicRangeRGB(PIX *pixs, l_int32 type) { l_int32 i, j, w, h, wpls, wpld, max; l_uint32 sval, dval, word; l_uint32 *datas, *datad; l_uint32 *lines, *lined; l_float32 factor; l_float32 *tab; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (type != L_LINEAR_SCALE && type != L_LOG_SCALE) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); /* Get max */ pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); pixGetDimensions(pixs, &w, &h, NULL); max = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { word = lines[j]; max = L_MAX(max, word >> 24); max = L_MAX(max, (word >> 16) & 0xff); max = L_MAX(max, (word >> 8) & 0xff); } } if (max == 0) { L_WARNING("max = 0; setting to 1\n", __func__); max = 1; } /* Map to the full dynamic range */ if (type == L_LINEAR_SCALE) { factor = 255.f / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = linearScaleRGBVal(sval, factor); lined[j] = dval; } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255.f / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = logScaleRGBVal(sval, tab, factor); lined[j] = dval; } } LEPT_FREE(tab); } return pixd; } /*-----------------------------------------------------------------------* * RGB pixel value scaling * *-----------------------------------------------------------------------*/ /*! * \brief linearScaleRGBVal() * * \param[in] sval 32-bit rgb pixel value * \param[in] factor multiplication factor on each component * \return dval linearly scaled version of %sval * *
 * Notes:
 *      (1) %factor must be chosen to be not greater than (255 / maxcomp),
 *          where maxcomp is the maximum value of the pixel components.
 *          Otherwise, the product will overflow a uint8.  In use, factor
 *          is the same for all pixels in a pix.
 *      (2) No scaling is performed on the transparency ("A") component.
 * 
*/ l_uint32 linearScaleRGBVal(l_uint32 sval, l_float32 factor) { l_uint32 dval; dval = ((l_uint8)(factor * (sval >> 24) + 0.5f) << 24) | ((l_uint8)(factor * ((sval >> 16) & 0xff) + 0.5f) << 16) | ((l_uint8)(factor * ((sval >> 8) & 0xff) + 0.5f) << 8) | (sval & 0xff); return dval; } /*! * \brief logScaleRGBVal() * * \param[in] sval 32-bit rgb pixel value * \param[in] tab 256 entry log-base-2 table * \param[in] factor multiplication factor on each component * \return dval log scaled version of %sval * *
 * Notes:
 *      (1) %tab is made with makeLogBase2Tab().
 *      (2) %factor must be chosen to be not greater than
 *          255.0 / log[base2](maxcomp), where maxcomp is the maximum
 *          value of the pixel components.  Otherwise, the product
 *          will overflow a uint8.  In use, factor is the same for
 *          all pixels in a pix.
 *      (3) No scaling is performed on the transparency ("A") component.
 * 
*/ l_uint32 logScaleRGBVal(l_uint32 sval, l_float32 *tab, l_float32 factor) { l_uint32 dval; dval = ((l_uint8)(factor * getLogBase2(sval >> 24, tab) + 0.5f) << 24) | ((l_uint8)(factor * getLogBase2(((sval >> 16) & 0xff), tab) + 0.5f) << 16) | ((l_uint8)(factor * getLogBase2(((sval >> 8) & 0xff), tab) + 0.5f) << 8) | (sval & 0xff); return dval; } /*-----------------------------------------------------------------------* * Log base2 lookup * *-----------------------------------------------------------------------*/ /* * \brief makeLogBase2Tab() * * \return tab table giving the log[base2] of values from 1 to 255 */ l_float32 * makeLogBase2Tab(void) { l_int32 i; l_float32 log2; l_float32 *tab; if ((tab = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("tab not made", __func__, NULL); log2 = (l_float32)log((l_float32)2); for (i = 0; i < 256; i++) tab[i] = (l_float32)log((l_float32)i) / log2; return tab; } /* * \brief getLogBase2() * * \param[in] val in range [0 ... 255] * \param[in] logtab 256-entry table of logs * \return logval log[base2] of %val, or 0 on error */ l_float32 getLogBase2(l_int32 val, l_float32 *logtab) { if (!logtab) return ERROR_INT("logtab not defined", __func__, 0); if (val < 0x100) return logtab[val]; else if (val < 0x10000) return 8.0f + logtab[val >> 8]; else if (val < 0x1000000) return 16.0f + logtab[val >> 16]; else return 24.0f + logtab[val >> 24]; } leptonica-1.86.0/src/pixcomp.c000066400000000000000000002227261506303110300162010ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixcomp.c *
 *
 *      Pixcomp creation and destruction
 *           PIXC     *pixcompCreateFromPix()
 *           PIXC     *pixcompCreateFromString()
 *           PIXC     *pixcompCreateFromFile()
 *           void      pixcompDestroy()
 *           PIXC     *pixcompCopy()

 *      Pixcomp accessors
 *           l_int32   pixcompGetDimensions()
 *           l_int32   pixcompGetParameters()
 *
 *      Pixcomp compression selection
 *           l_int32   pixcompDetermineFormat()
 *
 *      Pixcomp conversion to Pix
 *           PIX      *pixCreateFromPixcomp()
 *
 *      Pixacomp creation and destruction
 *           PIXAC    *pixacompCreate()
 *           PIXAC    *pixacompCreateWithInit()
 *           PIXAC    *pixacompCreateFromPixa()
 *           PIXAC    *pixacompCreateFromFiles()
 *           PIXAC    *pixacompCreateFromSA()
 *           void      pixacompDestroy()
 *
 *      Pixacomp addition/replacement
 *           l_int32   pixacompAddPix()
 *           l_int32   pixacompAddPixcomp()
 *           static l_int32  pixacompExtendArray()
 *           l_int32   pixacompReplacePix()
 *           l_int32   pixacompReplacePixcomp()
 *           l_int32   pixacompAddBox()
 *
 *      Pixacomp accessors
 *           l_int32   pixacompGetCount()
 *           PIXC     *pixacompGetPixcomp()
 *           PIX      *pixacompGetPix()
 *           l_int32   pixacompGetPixDimensions()
 *           BOXA     *pixacompGetBoxa()
 *           l_int32   pixacompGetBoxaCount()
 *           BOX      *pixacompGetBox()
 *           l_int32   pixacompGetBoxGeometry()
 *           l_int32   pixacompGetOffset()
 *           l_int32   pixacompSetOffset()
 *
 *      Pixacomp conversion to Pixa
 *           PIXA     *pixaCreateFromPixacomp()
 *
 *      Combining pixacomp
 *           l_int32   pixacompJoin()
 *           PIXAC    *pixacompInterleave()
 *
 *      Pixacomp serialized I/O
 *           PIXAC    *pixacompRead()
 *           PIXAC    *pixacompReadStream()
 *           PIXAC    *pixacompReadMem()
 *           l_int32   pixacompWrite()
 *           l_int32   pixacompWriteStream()
 *           l_int32   pixacompWriteMem()
 *
 *      Conversion to pdf
 *           l_int32   pixacompConvertToPdf()
 *           l_int32   pixacompConvertToPdfData()
 *           l_int32   pixacompFastConvertToPdfData()
 *
 *      Output for debugging
 *           l_int32   pixacompWriteStreamInfo()
 *           l_int32   pixcompWriteStreamInfo()
 *           PIX      *pixacompDisplayTiledAndScaled()
 *           l_int32   pixacompWriteFiles()
 *           l_int32   pixcompWriteFile()
 *
 *   The Pixacomp is an array of Pixcomp, where each Pixcomp is a compressed
 *   string of the image.  We don't use reference counting here.
 *   The basic application is to allow a large array of highly
 *   compressible images to reside in memory.  We purposely don't
 *   reuse the Pixa for this, to avoid confusion and programming errors.
 *
 *   Three compression formats are used: g4, png and jpeg.
 *   The compression type can be either specified or defaulted.
 *   If specified and it is not possible to compress (for example,
 *   you specify a jpeg on a 1 bpp image or one with a colormap),
 *   the compression type defaults to png.  The jpeg compression quality
 *   can be specified using l_setJpegQuality(); otherwise the default is 75.
 *
 *   The serialized version of the Pixacomp is similar to that for
 *   a Pixa, except that each Pixcomp can be compressed by one of
 *   tiffg4, png, or jpeg.  Unlike serialization of the Pixa,
 *   serialization of the Pixacomp does not require any imaging
 *   libraries because it simply reads and writes the compressed data.
 *
 *   There are two modes of use in accumulating images:
 *     (1) addition to the end of the array
 *     (2) random insertion (replacement) into the array
 *
 *   In use, we assume that the array is fully populated up to the
 *   index value (n - 1), where n is the value of the pixcomp field n.
 *   Addition can only be made to the end of the fully populated array,
 *   at the index value n.  Insertion can be made randomly, but again
 *   only within the array of pixcomps; i.e., within the set of
 *   indices {0 .... n-1}.  The functions are pixacompReplacePix()
 *   and pixacompReplacePixcomp(), and they destroy the existing pixcomp.
 *
 *   For addition to the end of the array, initialize the pixacomp with
 *   pixacompCreate(), which generates an empty array of pixcomps ptrs.
 *   For random insertion and replacement of pixcomp into a pixacomp,
 *   initialize a fully populated array using pixacompCreateWithInit().
 *
 *   The offset field allows you to use an offset-based index to
 *   access the 0-based ptr array in the pixacomp.  This would typically
 *   be used to map the pixacomp array index to a page number, or v.v.
 *   By default, the offset is 0.  For example, suppose you have 50 images,
 *   corresponding to page numbers 10 - 59.  Then you could use
 *      pixac = pixacompCreateWithInit(50, 10, ...);
 *   This would allocate an array of 50 pixcomps, but if you asked for
 *   the pix at index 10, using pixacompGetPix(pixac, 10), it would
 *   apply the offset internally, returning the pix at index 0 in the array.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* Bounds on pixacomp array size */ static const l_uint32 MaxPtrArraySize = 1000000; static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ /* Bound on size for a compressed data string */ static const size_t MaxDataSize = 1000000000; /* 1 GB */ /* These two globals are defined in writefile.c */ extern l_int32 NumImageFileFormatExtensions; extern const char *ImageFileFormatExtensions[]; /* Static functions */ static l_int32 pixacompExtendArray(PIXAC *pixac); static l_int32 pixcompFastConvertToPdfData(PIXC *pixc, const char *title, l_uint8 **pdata, size_t *pnbytes); /*---------------------------------------------------------------------* * Pixcomp creation and destruction * *---------------------------------------------------------------------*/ /*! * \brief pixcompCreateFromPix() * * \param[in] pix * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return pixc, or NULL on error * *
 * Notes:
 *      (1) Use %comptype == IFF_DEFAULT to have the compression
 *          type automatically determined.
 *      (2) To compress jpeg with a quality other than the default (75), use
 *             l_jpegSetQuality()
 * 
*/ PIXC * pixcompCreateFromPix(PIX *pix, l_int32 comptype) { size_t size; char *text; l_int32 ret, format; l_uint8 *data; PIXC *pixc; if (!pix) return (PIXC *)ERROR_PTR("pix not defined", __func__, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXC *)ERROR_PTR("invalid comptype", __func__, NULL); pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); pixGetDimensions(pix, &pixc->w, &pixc->h, &pixc->d); pixGetResolution(pix, &pixc->xres, &pixc->yres); if (pixGetColormap(pix)) pixc->cmapflag = 1; if ((text = pixGetText(pix)) != NULL) pixc->text = stringNew(text); pixcompDetermineFormat(comptype, pixc->d, pixc->cmapflag, &format); pixc->comptype = format; ret = pixWriteMem(&data, &size, pix, format); if (ret) { L_ERROR("write to memory failed\n", __func__); pixcompDestroy(&pixc); return NULL; } pixc->data = data; pixc->size = size; return pixc; } /*! * \brief pixcompCreateFromString() * * \param[in] data compressed string * \param[in] size number of bytes * \param[in] copyflag L_INSERT or L_COPY * \return pixc, or NULL on error * *
 * Notes:
 *      (1) This works when the compressed string is png, jpeg or tiffg4.
 *      (2) The copyflag determines if the data in the new Pixcomp is
 *          a copy of the input data.
 * 
*/ PIXC * pixcompCreateFromString(l_uint8 *data, size_t size, l_int32 copyflag) { l_int32 format, w, h, d, bps, spp, iscmap; PIXC *pixc; if (!data) return (PIXC *)ERROR_PTR("data not defined", __func__, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (PIXC *)ERROR_PTR("invalid copyflag", __func__, NULL); if (pixReadHeaderMem(data, size, &format, &w, &h, &bps, &spp, &iscmap) == 1) return (PIXC *)ERROR_PTR("header data not read", __func__, NULL); pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); d = (spp == 3) ? 32 : bps * spp; pixc->w = w; pixc->h = h; pixc->d = d; pixc->comptype = format; pixc->cmapflag = iscmap; if (copyflag == L_INSERT) pixc->data = data; else pixc->data = l_binaryCopy(data, size); pixc->size = size; return pixc; } /*! * \brief pixcompCreateFromFile() * * \param[in] filename * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return pixc, or NULL on error * *
 * Notes:
 *      (1) Use %comptype == IFF_DEFAULT to have the compression
 *          type automatically determined.
 *      (2) If the comptype is invalid for this file, the default will
 *          be substituted.
 * 
*/ PIXC * pixcompCreateFromFile(const char *filename, l_int32 comptype) { l_int32 format; size_t nbytes; l_uint8 *data; PIX *pix; PIXC *pixc; if (!filename) return (PIXC *)ERROR_PTR("filename not defined", __func__, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXC *)ERROR_PTR("invalid comptype", __func__, NULL); findFileFormat(filename, &format); if (format == IFF_UNKNOWN) { L_ERROR("unreadable file: %s\n", __func__, filename); return NULL; } /* Can we accept the encoded file directly? Remember that * png is the "universal" compression type, so if requested * it takes precedence. Otherwise, if the file is already * compressed in g4 or jpeg, just accept the string. */ if ((format == IFF_TIFF_G4 && comptype != IFF_PNG) || (format == IFF_JFIF_JPEG && comptype != IFF_PNG)) comptype = format; if (comptype != IFF_DEFAULT && comptype == format) { data = l_binaryRead(filename, &nbytes); if ((pixc = pixcompCreateFromString(data, nbytes, L_INSERT)) == NULL) { LEPT_FREE(data); return (PIXC *)ERROR_PTR("pixc not made (string)", __func__, NULL); } return pixc; } /* Need to recompress in the default format */ if ((pix = pixRead(filename)) == NULL) return (PIXC *)ERROR_PTR("pix not read", __func__, NULL); if ((pixc = pixcompCreateFromPix(pix, comptype)) == NULL) { pixDestroy(&pix); return (PIXC *)ERROR_PTR("pixc not made", __func__, NULL); } pixDestroy(&pix); return pixc; } /*! * \brief pixcompDestroy() * * \param[in,out] ppixc use ptr address so it will be nulled * \return void * *
 * Notes:
 *      (1) Always nulls the input ptr.
 * 
*/ void pixcompDestroy(PIXC **ppixc) { PIXC *pixc; if (!ppixc) { L_WARNING("ptr address is null!\n", __func__); return; } if ((pixc = *ppixc) == NULL) return; LEPT_FREE(pixc->data); if (pixc->text) LEPT_FREE(pixc->text); LEPT_FREE(pixc); *ppixc = NULL; } /*! * \brief pixcompCopy() * * \param[in] pixcs * \return pixcd, or NULL on error * *
 * Notes:
 *      (1) Limit the size of the compressed pix to 500 MB.
 * 
*/ PIXC * pixcompCopy(PIXC *pixcs) { size_t size; l_uint8 *datas, *datad; PIXC *pixcd; if (!pixcs) return (PIXC *)ERROR_PTR("pixcs not defined", __func__, NULL); size = pixcs->size; if (size > MaxDataSize) return (PIXC *)ERROR_PTR("size > 1 GB; too big", __func__, NULL); pixcd = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); pixcd->w = pixcs->w; pixcd->h = pixcs->h; pixcd->d = pixcs->d; pixcd->xres = pixcs->xres; pixcd->yres = pixcs->yres; pixcd->comptype = pixcs->comptype; if (pixcs->text != NULL) pixcd->text = stringNew(pixcs->text); pixcd->cmapflag = pixcs->cmapflag; /* Copy image data */ datas = pixcs->data; if ((datad = (l_uint8 *)LEPT_CALLOC(size, sizeof(l_int8))) == NULL) { pixcompDestroy(&pixcd); return (PIXC *)ERROR_PTR("pixcd not made", __func__, NULL); } memcpy(datad, datas, size); pixcd->data = datad; pixcd->size = size; return pixcd; } /*---------------------------------------------------------------------* * Pixcomp accessors * *---------------------------------------------------------------------*/ /*! * \brief pixcompGetDimensions() * * \param[in] pixc * \param[out] pw, ph, pd [optional] * \return 0 if OK, 1 on error */ l_ok pixcompGetDimensions(PIXC *pixc, l_int32 *pw, l_int32 *ph, l_int32 *pd) { if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); if (pw) *pw = pixc->w; if (ph) *ph = pixc->h; if (pd) *pd = pixc->d; return 0; } /*! * \brief pixcompGetParameters() * * \param[in] pixc * \param[out] pxres, pyres, pcomptype, pcmapflag [optional] * \return 0 if OK, 1 on error */ l_ok pixcompGetParameters(PIXC *pixc, l_int32 *pxres, l_int32 *pyres, l_int32 *pcomptype, l_int32 *pcmapflag) { if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); if (pxres) *pxres = pixc->xres; if (pyres) *pyres = pixc->yres; if (pcomptype) *pcomptype = pixc->comptype; if (pcmapflag) *pcmapflag = pixc->cmapflag; return 0; } /*---------------------------------------------------------------------* * Pixcomp compression selection * *---------------------------------------------------------------------*/ /*! * \brief pixcompDetermineFormat() * * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \param[in] d pix depth * \param[in] cmapflag 1 if pix to be compressed as a colormap; 0 otherwise * \param[out] pformat IFF_TIFF, IFF_PNG or IFF_JFIF_JPEG * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This determines the best format for a pix, given both
 *          the request (%comptype) and the image characteristics.
 *      (2) If %comptype == IFF_DEFAULT, this does not necessarily result
 *          in png encoding.  Instead, it returns one of the three formats
 *          that is both valid and most likely to give best compression.
 *      (3) If %d == 8 with no colormap and:
 *          * you wish to compress with png, use %comptype == IFF_PNG
 *          * you wish to compress with jpeg, use either
 *            %comptype == IFF_JFIF_JPEG or %comptype == IFF_DEFAULT.
 *      (4) If the pix cannot be compressed by the input value of
 *          %comptype, this selects IFF_PNG, which can compress all pix.
 * 
*/ l_ok pixcompDetermineFormat(l_int32 comptype, l_int32 d, l_int32 cmapflag, l_int32 *pformat) { if (!pformat) return ERROR_INT("&format not defined", __func__, 1); *pformat = IFF_PNG; /* init value and default */ if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid comptype", __func__, 1); if (comptype == IFF_DEFAULT) { if (d == 1) *pformat = IFF_TIFF_G4; else if (d == 16) *pformat = IFF_PNG; else if (d >= 8 && !cmapflag) *pformat = IFF_JFIF_JPEG; } else if (comptype == IFF_TIFF_G4 && d == 1) { *pformat = IFF_TIFF_G4; } else if (comptype == IFF_JFIF_JPEG && d >= 8 && !cmapflag) { *pformat = IFF_JFIF_JPEG; } return 0; } /*---------------------------------------------------------------------* * Pixcomp conversion to Pix * *---------------------------------------------------------------------*/ /*! * \brief pixCreateFromPixcomp() * * \param[in] pixc * \return pix, or NULL on error */ PIX * pixCreateFromPixcomp(PIXC *pixc) { l_int32 w, h, d, cmapinpix, format; PIX *pix; if (!pixc) return (PIX *)ERROR_PTR("pixc not defined", __func__, NULL); if ((pix = pixReadMem(pixc->data, pixc->size)) == NULL) return (PIX *)ERROR_PTR("pix not read", __func__, NULL); pixSetResolution(pix, pixc->xres, pixc->yres); if (pixc->text) pixSetText(pix, pixc->text); /* Check fields for consistency */ pixGetDimensions(pix, &w, &h, &d); if (pixc->w != w) { L_INFO("pix width %d != pixc width %d\n", __func__, w, pixc->w); L_ERROR("pix width %d != pixc width\n", __func__, w); } if (pixc->h != h) L_ERROR("pix height %d != pixc height\n", __func__, h); if (pixc->d != d) { if (pixc->d == 16) /* we strip 16 --> 8 bpp by default */ L_WARNING("pix depth %d != pixc depth 16\n", __func__, d); else L_ERROR("pix depth %d != pixc depth\n", __func__, d); } cmapinpix = (pixGetColormap(pix) != NULL); if ((cmapinpix && !pixc->cmapflag) || (!cmapinpix && pixc->cmapflag)) L_ERROR("pix cmap flag inconsistent\n", __func__); format = pixGetInputFormat(pix); if (format != pixc->comptype) { L_ERROR("pix comptype %d not equal to pixc comptype\n", __func__, format); } return pix; } /*---------------------------------------------------------------------* * Pixacomp creation and destruction * *---------------------------------------------------------------------*/ /*! * \brief pixacompCreate() * * \param[in] n initial number of ptrs * \return pixac, or NULL on error */ PIXAC * pixacompCreate(l_int32 n) { PIXAC *pixac; if (n <= 0 || n > (l_int32)MaxPtrArraySize) n = InitialPtrArraySize; pixac = (PIXAC *)LEPT_CALLOC(1, sizeof(PIXAC)); pixac->n = 0; pixac->nalloc = n; pixac->offset = 0; if ((pixac->pixc = (PIXC **)LEPT_CALLOC(n, sizeof(PIXC *))) == NULL) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("pixc ptrs not made", __func__, NULL); } if ((pixac->boxa = boxaCreate(n)) == NULL) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("boxa not made", __func__, NULL); } return pixac; } /*! * \brief pixacompCreateWithInit() * * \param[in] n initial number of ptrs * \param[in] offset difference: accessor index - pixacomp array index * \param[in] pix [optional] initialize each ptr in pixacomp * to this pix; can be NULL * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return pixac, or NULL on error * *
 * Notes:
 *      (1) Initializes a pixacomp to be fully populated with %pix,
 *          compressed using %comptype.  If %pix == NULL, %comptype
 *          is ignored.
 *      (2) Typically, the array is initialized with a tiny pix.
 *          This is most easily done by setting %pix == NULL, causing
 *          initialization of each array element with a tiny placeholder
 *          pix (w = h = d = 1), using comptype = IFF_TIFF_G4 .
 *      (3) Example usage:
 *            // Generate pixacomp for pages 30 - 49.  This has an array
 *            // size of 20 and the page number offset is 30.
 *            PixaComp *pixac = pixacompCreateWithInit(20, 30, NULL,
 *                                                     IFF_TIFF_G4);
 *            // Now insert png-compressed images into the initialized array
 *            for (pageno = 30; pageno < 50; pageno++) {
 *                Pix *pixt = ...   // derived from image[pageno]
 *                if (pixt)
 *                    pixacompReplacePix(pixac, pageno, pixt, IFF_PNG);
 *                pixDestroy(&pixt);
 *            }
 *          The result is a pixac with 20 compressed strings, and with
 *          selected pixt replacing the placeholders.
 *          To extract the image for page 38, which is decompressed
 *          from element 8 in the array, use:
 *            pixt = pixacompGetPix(pixac, 38);
 * 
*/ PIXAC * pixacompCreateWithInit(l_int32 n, l_int32 offset, PIX *pix, l_int32 comptype) { l_int32 i; PIX *pixt; PIXC *pixc; PIXAC *pixac; if (n <= 0 || n > (l_int32)MaxPtrArraySize) return (PIXAC *)ERROR_PTR("n out of valid bounds", __func__, NULL); if (pix) { if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", __func__, NULL); } else { comptype = IFF_TIFF_G4; } if (offset < 0) { L_WARNING("offset < 0; setting to 0\n", __func__); offset = 0; } if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", __func__, NULL); pixacompSetOffset(pixac, offset); if (pix) pixt = pixClone(pix); else pixt = pixCreate(1, 1, 1); for (i = 0; i < n; i++) { pixc = pixcompCreateFromPix(pixt, comptype); pixacompAddPixcomp(pixac, pixc, L_INSERT); } pixDestroy(&pixt); return pixac; } /*! * \brief pixacompCreateFromPixa() * * \param[in] pixa * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If %format == IFF_DEFAULT, the conversion format for each
 *          image is chosen automatically.  Otherwise, we use the
 *          specified format unless it can't be done (e.g., jpeg
 *          for a 1, 2 or 4 bpp pix, or a pix with a colormap),
 *          in which case we use the default (assumed best) compression.
 *      (2) %accesstype is used to extract a boxa from %pixa.
 *      (3) To compress jpeg with a quality other than the default (75), use
 *             l_jpegSetQuality()
 * 
*/ PIXAC * pixacompCreateFromPixa(PIXA *pixa, l_int32 comptype, l_int32 accesstype) { l_int32 i, n; BOXA *boxa; PIX *pix; PIXAC *pixac; if (!pixa) return (PIXAC *)ERROR_PTR("pixa not defined", __func__, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXAC *)ERROR_PTR("invalid accesstype", __func__, NULL); n = pixaGetCount(pixa); if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", __func__, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixacompAddPix(pixac, pix, comptype); pixDestroy(&pix); } if ((boxa = pixaGetBoxa(pixa, accesstype)) != NULL) { boxaDestroy(&pixac->boxa); pixac->boxa = boxa; } return pixac; } /*! * \brief pixacompCreateFromFiles() * * \param[in] dirname * \param[in] substr [optional] substring filter on filenames; can be null * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return pixac, or NULL on error * *
 * Notes:
 *      (1) %dirname is the full path for the directory.
 *      (2) %substr is the part of the file name (excluding
 *          the directory) that is to be matched.  All matching
 *          filenames are read into the Pixa.  If substr is NULL,
 *          all filenames are read into the Pixa.
 *      (3) Use %comptype == IFF_DEFAULT to have the compression
 *          type automatically determined for each file.
 *      (4) If the comptype is invalid for a file, the default will
 *          be substituted.
 * 
*/ PIXAC * pixacompCreateFromFiles(const char *dirname, const char *substr, l_int32 comptype) { PIXAC *pixac; SARRAY *sa; if (!dirname) return (PIXAC *)ERROR_PTR("dirname not defined", __func__, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", __func__, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (PIXAC *)ERROR_PTR("sa not made", __func__, NULL); pixac = pixacompCreateFromSA(sa, comptype); sarrayDestroy(&sa); return pixac; } /*! * \brief pixacompCreateFromSA() * * \param[in] sa full pathnames for all files * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return pixac, or NULL on error * *
 * Notes:
 *      (1) Use %comptype == IFF_DEFAULT to have the compression
 *          type automatically determined for each file.
 *      (2) If the comptype is invalid for a file, the default will
 *          be substituted.
 * 
*/ PIXAC * pixacompCreateFromSA(SARRAY *sa, l_int32 comptype) { char *str; l_int32 i, n; PIXC *pixc; PIXAC *pixac; if (!sa) return (PIXAC *)ERROR_PTR("sarray not defined", __func__, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", __func__, NULL); n = sarrayGetCount(sa); pixac = pixacompCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); if ((pixc = pixcompCreateFromFile(str, comptype)) == NULL) { L_ERROR("pixc not read from file: %s\n", __func__, str); continue; } pixacompAddPixcomp(pixac, pixc, L_INSERT); } return pixac; } /*! * \brief pixacompDestroy() * * \param[in,out] ppixac use ptr address so it will be nulled * \return void * *
 * Notes:
 *      (1) Always nulls the input ptr.
 * 
*/ void pixacompDestroy(PIXAC **ppixac) { l_int32 i; PIXAC *pixac; if (ppixac == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((pixac = *ppixac) == NULL) return; for (i = 0; i < pixac->n; i++) pixcompDestroy(&pixac->pixc[i]); LEPT_FREE(pixac->pixc); boxaDestroy(&pixac->boxa); LEPT_FREE(pixac); *ppixac = NULL; } /*---------------------------------------------------------------------* * Pixacomp addition * *---------------------------------------------------------------------*/ /*! * \brief pixacompAddPix() * * \param[in] pixac * \param[in] pix to be added * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The array is filled up to the (n-1)-th element, and this
 *          converts the input pix to a pixc and adds it at
 *          the n-th position.
 *      (2) The pixc produced from the pix is owned by the pixac.
 *          The input pix is not affected.
 * 
*/ l_ok pixacompAddPix(PIXAC *pixac, PIX *pix, l_int32 comptype) { l_int32 cmapflag, format; PIXC *pixc; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid format", __func__, 1); cmapflag = pixGetColormap(pix) ? 1 : 0; pixcompDetermineFormat(comptype, pixGetDepth(pix), cmapflag, &format); if ((pixc = pixcompCreateFromPix(pix, format)) == NULL) return ERROR_INT("pixc not made", __func__, 1); pixacompAddPixcomp(pixac, pixc, L_INSERT); return 0; } /*! * \brief pixacompAddPixcomp() * * \param[in] pixac * \param[in] pixc to be added by insertion * \param[in] copyflag L_INSERT, L_COPY * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Anything added to a pixac is owned by the pixac.
 *          So do not L_INSERT a pixc that is owned by another pixac,
 *          or destroy a pixc that has been L_INSERTed.
 * 
*/ l_ok pixacompAddPixcomp(PIXAC *pixac, PIXC *pixc, l_int32 copyflag) { l_int32 n; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", __func__, 1); n = pixac->n; if (n >= pixac->nalloc) { if (pixacompExtendArray(pixac)) return ERROR_INT("extension failed", __func__, 1); } if (copyflag == L_INSERT) pixac->pixc[n] = pixc; else /* L_COPY */ pixac->pixc[n] = pixcompCopy(pixc); pixac->n++; return 0; } /*! * \brief pixacompExtendArray() * * \param[in] pixac * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) We extend the boxa array simultaneously.  This is
 *          necessary in case we are NOT adding boxes simultaneously
 *          with adding pixc.  We always want the sizes of the
 *          pixac and boxa ptr arrays to be equal.
 *      (2) The max number of pixcomp ptrs is 1M.
 * 
*/ static l_int32 pixacompExtendArray(PIXAC *pixac) { size_t oldsize, newsize; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (pixac->nalloc > (l_int32)MaxPtrArraySize) /* belt & suspenders */ return ERROR_INT("pixac has too many ptrs", __func__, 1); oldsize = pixac->nalloc * sizeof(PIXC *); newsize = 2 * oldsize; if (newsize > 8 * MaxPtrArraySize) /* ptrs for 1M pixcomp */ return ERROR_INT("newsize > 8 MB; too large", __func__, 1); if ((pixac->pixc = (PIXC **)reallocNew((void **)&pixac->pixc, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); pixac->nalloc *= 2; boxaExtendArray(pixac->boxa); return 0; } /*! * \brief pixacompReplacePix() * * \param[in] pixac * \param[in] index caller's view of index within pixac; includes offset * \param[in] pix owned by the caller * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 *      (2) The input %pix is converted to a pixc, which is then inserted
 *          into the pixac.
 * 
*/ l_ok pixacompReplacePix(PIXAC *pixac, l_int32 index, PIX *pix, l_int32 comptype) { l_int32 n, aindex; PIXC *pixc; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); n = pixacompGetCount(pixac); aindex = index - pixac->offset; if (aindex < 0 || aindex >= n) return ERROR_INT("array index out of bounds", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid format", __func__, 1); pixc = pixcompCreateFromPix(pix, comptype); pixacompReplacePixcomp(pixac, index, pixc); return 0; } /*! * \brief pixacompReplacePixcomp() * * \param[in] pixac * \param[in] index caller's view of index within pixac; includes offset * \param[in] pixc to replace existing one, which is destroyed * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 *      (2) The inserted %pixc is now owned by the pixac.  The caller
 *          must not destroy it.
 * 
*/ l_ok pixacompReplacePixcomp(PIXAC *pixac, l_int32 index, PIXC *pixc) { l_int32 n, aindex; PIXC *pixct; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); n = pixacompGetCount(pixac); aindex = index - pixac->offset; if (aindex < 0 || aindex >= n) return ERROR_INT("array index out of bounds", __func__, 1); if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); pixct = pixacompGetPixcomp(pixac, index, L_NOCOPY); /* use %index */ pixcompDestroy(&pixct); pixac->pixc[aindex] = pixc; /* replace; use array index */ return 0; } /*! * \brief pixacompAddBox() * * \param[in] pixac * \param[in] box * \param[in] copyflag L_INSERT, L_COPY * \return 0 if OK, 1 on error */ l_ok pixacompAddBox(PIXAC *pixac, BOX *box, l_int32 copyflag) { if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", __func__, 1); boxaAddBox(pixac->boxa, box, copyflag); return 0; } /*---------------------------------------------------------------------* * Pixacomp accessors * *---------------------------------------------------------------------*/ /*! * \brief pixacompGetCount() * * \param[in] pixac * \return count, or 0 if no pixa */ l_int32 pixacompGetCount(PIXAC *pixac) { if (!pixac) return ERROR_INT("pixac not defined", __func__, 0); return pixac->n; } /*! * \brief pixacompGetPixcomp() * * \param[in] pixac * \param[in] index caller's view of index within pixac; includes offset * \param[in] copyflag L_NOCOPY, L_COPY * \return pixc, or NULL on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 *      (2) If copyflag == L_NOCOPY, the pixc is owned by %pixac; do
 *          not destroy.
 * 
*/ PIXC * pixacompGetPixcomp(PIXAC *pixac, l_int32 index, l_int32 copyflag) { l_int32 aindex; if (!pixac) return (PIXC *)ERROR_PTR("pixac not defined", __func__, NULL); if (copyflag != L_NOCOPY && copyflag != L_COPY) return (PIXC *)ERROR_PTR("invalid copyflag", __func__, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return (PIXC *)ERROR_PTR("array index not valid", __func__, NULL); if (copyflag == L_NOCOPY) return pixac->pixc[aindex]; else /* L_COPY */ return pixcompCopy(pixac->pixc[aindex]); } /*! * \brief pixacompGetPix() * * \param[in] pixac * \param[in] index caller's view of index within pixac; includes offset * \return pix, or NULL on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 * 
*/ PIX * pixacompGetPix(PIXAC *pixac, l_int32 index) { l_int32 aindex; PIXC *pixc; if (!pixac) return (PIX *)ERROR_PTR("pixac not defined", __func__, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return (PIX *)ERROR_PTR("array index not valid", __func__, NULL); pixc = pixacompGetPixcomp(pixac, index, L_NOCOPY); return pixCreateFromPixcomp(pixc); } /*! * \brief pixacompGetPixDimensions() * * \param[in] pixac * \param[in] index caller's view of index within pixac; * includes offset * \param[out] pw, ph, pd [optional] each can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 * 
*/ l_ok pixacompGetPixDimensions(PIXAC *pixac, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd) { l_int32 aindex; PIXC *pixc; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return ERROR_INT("array index not valid", __func__, 1); if ((pixc = pixac->pixc[aindex]) == NULL) return ERROR_INT("pixc not found!", __func__, 1); pixcompGetDimensions(pixc, pw, ph, pd); return 0; } /*! * \brief pixacompGetBoxa() * * \param[in] pixac * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE * \return boxa, or NULL on error */ BOXA * pixacompGetBoxa(PIXAC *pixac, l_int32 accesstype) { if (!pixac) return (BOXA *)ERROR_PTR("pixac not defined", __func__, NULL); if (!pixac->boxa) return (BOXA *)ERROR_PTR("boxa not defined", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid accesstype", __func__, NULL); return boxaCopy(pixac->boxa, accesstype); } /*! * \brief pixacompGetBoxaCount() * * \param[in] pixac * \return count, or 0 on error */ l_int32 pixacompGetBoxaCount(PIXAC *pixac) { if (!pixac) return ERROR_INT("pixac not defined", __func__, 0); return boxaGetCount(pixac->boxa); } /*! * \brief pixacompGetBox() * * \param[in] pixac * \param[in] index caller's view of index within pixac; * includes offset * \param[in] accesstype L_COPY or L_CLONE * \return box if null, not automatically an error, or NULL on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 *      (2) There is always a boxa with a pixac, and it is initialized so
 *          that each box ptr is NULL.
 *      (3) In general, we expect that there is either a box associated
 *          with each pixc, or no boxes at all in the boxa.
 *      (4) Having no boxes is thus not an automatic error.  Whether it
 *          is an actual error is determined by the calling program.
 *          If the caller expects to get a box, it is an error; see, e.g.,
 *          pixacGetBoxGeometry().
 * 
*/ BOX * pixacompGetBox(PIXAC *pixac, l_int32 index, l_int32 accesstype) { l_int32 aindex; BOX *box; if (!pixac) return (BOX *)ERROR_PTR("pixac not defined", __func__, NULL); if (!pixac->boxa) return (BOX *)ERROR_PTR("boxa not defined", __func__, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->boxa->n) return (BOX *)ERROR_PTR("array index not valid", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOX *)ERROR_PTR("invalid accesstype", __func__, NULL); box = pixac->boxa->box[aindex]; if (box) { if (accesstype == L_COPY) return boxCopy(box); else /* accesstype == L_CLONE */ return boxClone(box); } else { return NULL; } } /*! * \brief pixacompGetBoxGeometry() * * \param[in] pixac * \param[in] index caller's view of index within pixac; * includes offset * \param[out] px, py, pw, ph [optional] each can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The %index includes the offset, which must be subtracted
 *          to get the actual index into the ptr array.
 * 
*/ l_ok pixacompGetBoxGeometry(PIXAC *pixac, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { l_int32 aindex; BOX *box; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return ERROR_INT("array index not valid", __func__, 1); if ((box = pixacompGetBox(pixac, aindex, L_CLONE)) == NULL) return ERROR_INT("box not found!", __func__, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * \brief pixacompGetOffset() * * \param[in] pixac * \return offset, or 0 on error * *
 * Notes:
 *      (1) The offset is the difference between the caller's view of
 *          the index into the array and the actual array index.
 *          By default it is 0.
 * 
*/ l_int32 pixacompGetOffset(PIXAC *pixac) { if (!pixac) return ERROR_INT("pixac not defined", __func__, 0); return pixac->offset; } /*! * \brief pixacompSetOffset() * * \param[in] pixac * \param[in] offset non-negative * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The offset is the difference between the caller's view of
 *          the index into the array and the actual array index.
 *          By default it is 0.
 * 
*/ l_ok pixacompSetOffset(PIXAC *pixac, l_int32 offset) { if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); pixac->offset = L_MAX(0, offset); return 0; } /*---------------------------------------------------------------------* * Pixacomp conversion to Pixa * *---------------------------------------------------------------------*/ /*! * \brief pixaCreateFromPixacomp() * * \param[in] pixac * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE; for boxa * \return pixa if OK, or NULL on error * *
 * Notes:
 *      (1) Because the pixa has no notion of offset, the offset must
 *          be set to 0 before the conversion, so that pixacompGetPix()
 *          fetches all the pixcomps.  It is reset at the end.
 * 
*/ PIXA * pixaCreateFromPixacomp(PIXAC *pixac, l_int32 accesstype) { l_int32 i, n, offset; PIX *pix; PIXA *pixa; if (!pixac) return (PIXA *)ERROR_PTR("pixac not defined", __func__, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid accesstype", __func__, NULL); n = pixacompGetCount(pixac); offset = pixacompGetOffset(pixac); pixacompSetOffset(pixac, 0); if ((pixa = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", __func__, NULL); for (i = 0; i < n; i++) { if ((pix = pixacompGetPix(pixac, i)) == NULL) { L_WARNING("pix %d not made\n", __func__, i); continue; } pixaAddPix(pixa, pix, L_INSERT); } if (pixa->boxa) { boxaDestroy(&pixa->boxa); pixa->boxa = pixacompGetBoxa(pixac, accesstype); } pixacompSetOffset(pixac, offset); return pixa; } /*---------------------------------------------------------------------* * Combining pixacomp *---------------------------------------------------------------------*/ /*! * \brief pixacompJoin() * * \param[in] pixacd dest pixac; add to this one * \param[in] pixacs [optional] source pixac; add from this one * \param[in] istart starting index in pixacs * \param[in] iend ending index in pixacs; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This appends a clone of each indicated pixc in pixcas to pixcad
 *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (3) iend < 0 means 'read to the end'
 *      (4) If pixacs is NULL or contains no pixc, this is a no-op.
 * 
*/ l_ok pixacompJoin(PIXAC *pixacd, PIXAC *pixacs, l_int32 istart, l_int32 iend) { l_int32 i, n, nb; BOXA *boxas, *boxad; PIXC *pixc; if (!pixacd) return ERROR_INT("pixacd not defined", __func__, 1); if (!pixacs || ((n = pixacompGetCount(pixacs)) == 0)) return 0; if (istart < 0) istart = 0; if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", __func__, 1); for (i = istart; i <= iend; i++) { pixc = pixacompGetPixcomp(pixacs, i, L_NOCOPY); pixacompAddPixcomp(pixacd, pixc, L_COPY); } boxas = pixacompGetBoxa(pixacs, L_CLONE); boxad = pixacompGetBoxa(pixacd, L_CLONE); nb = pixacompGetBoxaCount(pixacs); iend = L_MIN(iend, nb - 1); boxaJoin(boxad, boxas, istart, iend); boxaDestroy(&boxas); /* just the clones */ boxaDestroy(&boxad); /* ditto */ return 0; } /*! * \brief pixacompInterleave() * * \param[in] pixac1 first src pixac * \param[in] pixac2 second src pixac * \return pixacd interleaved from sources, or NULL on error. * *
 * Notes:
 *      (1) If the two pixac have different sizes, a warning is issued,
 *          and the number of pairs returned is the minimum size.
 * 
*/ PIXAC * pixacompInterleave(PIXAC *pixac1, PIXAC *pixac2) { l_int32 i, n1, n2, n, nb1, nb2; BOX *box; PIXC *pixc1, *pixc2; PIXAC *pixacd; if (!pixac1) return (PIXAC *)ERROR_PTR("pixac1 not defined", __func__, NULL); if (!pixac2) return (PIXAC *)ERROR_PTR("pixac2 not defined", __func__, NULL); n1 = pixacompGetCount(pixac1); n2 = pixacompGetCount(pixac2); n = L_MIN(n1, n2); if (n == 0) return (PIXAC *)ERROR_PTR("at least one input pixac is empty", __func__, NULL); if (n1 != n2) L_WARNING("counts differ: %d != %d\n", __func__, n1, n2); pixacd = pixacompCreate(2 * n); nb1 = pixacompGetBoxaCount(pixac1); nb2 = pixacompGetBoxaCount(pixac2); for (i = 0; i < n; i++) { pixc1 = pixacompGetPixcomp(pixac1, i, L_COPY); pixacompAddPixcomp(pixacd, pixc1, L_INSERT); if (i < nb1) { box = pixacompGetBox(pixac1, i, L_COPY); pixacompAddBox(pixacd, box, L_INSERT); } pixc2 = pixacompGetPixcomp(pixac2, i, L_COPY); pixacompAddPixcomp(pixacd, pixc2, L_INSERT); if (i < nb2) { box = pixacompGetBox(pixac2, i, L_COPY); pixacompAddBox(pixacd, box, L_INSERT); } } return pixacd; } /*---------------------------------------------------------------------* * Pixacomp serialized I/O * *---------------------------------------------------------------------*/ /*! * \brief pixacompRead() * * \param[in] filename * \return pixac, or NULL on error * *
 * Notes:
 *      (1) Unlike the situation with serialized Pixa, where the image
 *          data is stored in png format, the Pixacomp image data
 *          can be stored in tiffg4, png and jpg formats.
 * 
*/ PIXAC * pixacompRead(const char *filename) { FILE *fp; PIXAC *pixac; if (!filename) return (PIXAC *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXAC *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); pixac = pixacompReadStream(fp); fclose(fp); if (!pixac) return (PIXAC *)ERROR_PTR_1("pixac not read", filename, __func__, NULL); return pixac; } /*! * \brief pixacompReadStream() * * \param[in] fp file stream * \return pixac, or NULL on error * *
 * Notes:
 *      (1) It is OK for the pixacomp to be empty.
 * 
*/ PIXAC * pixacompReadStream(FILE *fp) { char buf[256]; l_uint8 *data; l_int32 n, offset, i, w, h, d, ignore; l_int32 comptype, cmapflag, version, xres, yres; size_t size; BOXA *boxa; PIXC *pixc; PIXAC *pixac; if (!fp) return (PIXAC *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nPixacomp Version %d\n", &version) != 1) return (PIXAC *)ERROR_PTR("not a pixacomp file", __func__, NULL); if (version != PIXACOMP_VERSION_NUMBER) return (PIXAC *)ERROR_PTR("invalid pixacomp version", __func__, NULL); if (fscanf(fp, "Number of pixcomp = %d\n", &n) != 1) return (PIXAC *)ERROR_PTR("not a pixacomp file", __func__, NULL); if (fscanf(fp, "Offset of index into array = %d", &offset) != 1) return (PIXAC *)ERROR_PTR("offset not read", __func__, NULL); if (n < 0) return (PIXAC *)ERROR_PTR("num pixcomp ptrs < 0", __func__, NULL); if (n > (l_int32)MaxPtrArraySize) return (PIXAC *)ERROR_PTR("too many pixcomp ptrs", __func__, NULL); if (n == 0) L_INFO("the pixacomp is empty\n", __func__); if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", __func__, NULL); if ((boxa = boxaReadStream(fp)) == NULL) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("boxa not made", __func__, NULL); } boxaDestroy(&pixac->boxa); /* empty */ pixac->boxa = boxa; pixacompSetOffset(pixac, offset); for (i = 0; i < n; i++) { if (fscanf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", &ignore, &w, &h, &d) != 4) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("dimension reading", __func__, NULL); } if (fscanf(fp, " comptype = %d, size = %zu, cmapflag = %d\n", &comptype, &size, &cmapflag) != 3) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("comptype/size reading", __func__, NULL); } if (size > MaxDataSize) { pixacompDestroy(&pixac); L_ERROR("data size = %zu is too big", __func__, size); return NULL; } /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the binary data. The reason is * that fscanf throws away white space, and if the binary data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("fgets read fail", __func__, NULL); } if (sscanf(buf, " xres = %d, yres = %d\n", &xres, &yres) != 2) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("read fail for res", __func__, NULL); } if ((data = (l_uint8 *)LEPT_CALLOC(1, size)) == NULL) { pixacompDestroy(&pixac); return (PIXAC *)ERROR_PTR("calloc fail for data", __func__, NULL); } if (fread(data, 1, size, fp) != size) { pixacompDestroy(&pixac); LEPT_FREE(data); return (PIXAC *)ERROR_PTR("error reading data", __func__, NULL); } fgetc(fp); /* swallow the ending nl */ pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); pixc->w = w; pixc->h = h; pixc->d = d; pixc->xres = xres; pixc->yres = yres; pixc->comptype = comptype; pixc->cmapflag = cmapflag; pixc->data = data; pixc->size = size; pixacompAddPixcomp(pixac, pixc, L_INSERT); } return pixac; } /*! * \brief pixacompReadMem() * * \param[in] data in pixacomp format * \param[in] size of data * \return pixac, or NULL on error * *
 * Notes:
 *      (1) Deseralizes a buffer of pixacomp data into a pixac in memory.
 * 
*/ PIXAC * pixacompReadMem(const l_uint8 *data, size_t size) { FILE *fp; PIXAC *pixac; if (!data) return (PIXAC *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIXAC *)ERROR_PTR("stream not opened", __func__, NULL); pixac = pixacompReadStream(fp); fclose(fp); if (!pixac) L_ERROR("pixac not read\n", __func__); return pixac; } /*! * \brief pixacompWrite() * * \param[in] filename * \param[in] pixac * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Unlike the situation with serialized Pixa, where the image
 *          data is stored in png format, the Pixacomp image data
 *          can be stored in tiffg4, png and jpg formats.
 * 
*/ l_ok pixacompWrite(const char *filename, PIXAC *pixac) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pixac) return ERROR_INT("pixacomp not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixacompWriteStream(fp, pixac); fclose(fp); if (ret) return ERROR_INT_1("pixacomp not written to stream", filename, __func__, 1); return 0; } /*! * \brief pixacompWriteStream() * * \param[in] fp file stream * \param[in] pixac * \return 0 if OK, 1 on error */ l_ok pixacompWriteStream(FILE *fp, PIXAC *pixac) { l_int32 n, i; PIXC *pixc; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); n = pixacompGetCount(pixac); fprintf(fp, "\nPixacomp Version %d\n", PIXACOMP_VERSION_NUMBER); fprintf(fp, "Number of pixcomp = %d\n", n); fprintf(fp, "Offset of index into array = %d", pixac->offset); boxaWriteStream(fp, pixac->boxa); for (i = 0; i < n; i++) { if ((pixc = pixacompGetPixcomp(pixac, pixac->offset + i, L_NOCOPY)) == NULL) return ERROR_INT("pixc not found", __func__, 1); fprintf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", i, pixc->w, pixc->h, pixc->d); fprintf(fp, " comptype = %d, size = %zu, cmapflag = %d\n", pixc->comptype, pixc->size, pixc->cmapflag); fprintf(fp, " xres = %d, yres = %d\n", pixc->xres, pixc->yres); fwrite(pixc->data, 1, pixc->size, fp); fprintf(fp, "\n"); } return 0; } /*! * \brief pixacompWriteMem() * * \param[out] pdata serialized data of pixac * \param[out] psize size of serialized data * \param[in] pixac * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a pixac in memory and puts the result in a buffer.
 * 
*/ l_ok pixacompWriteMem(l_uint8 **pdata, size_t *psize, PIXAC *pixac) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!pixac) return ERROR_INT("&pixac not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixacompWriteStream(fp, pixac); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixacompWriteStream(fp, pixac); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*--------------------------------------------------------------------* * Conversion to pdf * *--------------------------------------------------------------------*/ /*! * \brief pixacompConvertToPdf() * * \param[in] pixac containing images all at the same resolution * \param[in] res override the resolution of each input image, * in ppi; 0 to respect the resolution embedded * in the input * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE, or * L_DEFAULT_ENCODE for default) * \param[in] quality used for JPEG only; 0 for default (75) * \param[in] title [optional] pdf title * \param[in] fileout pdf file of all images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This follows closely the function pixaConvertToPdf() in pdfio.c.
 *      (2) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
 *          colormap and many colors, or 32 bpp; FLATE for anything else.
 *      (3) The scalefactor must be > 0.0; otherwise it is set to 1.0.
 *      (4) Specifying one of the three encoding types for %type forces
 *          all images to be compressed with that type.  Use 0 to have
 *          the type determined for each image based on depth and whether
 *          or not it has a colormap.
 *      (5) If all images are jpeg compressed, don't require scaling
 *          and have the same resolution, it is much faster to skip
 *          transcoding with pixacompFastConvertToPdfData(), and then
 *          write the data out to file.
 * 
*/ l_ok pixacompConvertToPdf(PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); ret = pixacompConvertToPdfData(pixac, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { LEPT_FREE(data); return ERROR_INT("conversion to pdf failed", __func__, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); LEPT_FREE(data); if (ret) L_ERROR("pdf data not written to file\n", __func__); return ret; } /*! * \brief pixacompConvertToPdfData() * * \param[in] pixac containing images all at the same resolution * \param[in] res input resolution of all images * \param[in] scalefactor scaling factor applied to each image; > 0.0 * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, L_JP2K_ENCODE, or * L_DEFAULT_ENCODE for default) * \param[in] quality used for JPEG only; 0 for default (75) * \param[in] title [optional] pdf title * \param[out] pdata output pdf data (of all images * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixacompConvertToPdf().
 * 
*/ l_ok pixacompConvertToPdfData(PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *imdata; l_int32 i, n, ret, scaledres, pagetype; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (type != L_DEFAULT_ENCODE && type != L_JPEG_ENCODE && type != L_G4_ENCODE && type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { L_WARNING("invalid compression type; using per-page default\n", __func__); type = L_DEFAULT_ENCODE; } /* Generate all the encoded pdf strings */ n = pixacompGetCount(pixac); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if ((pixs = pixacompGetPix(pixac, pixacompGetOffset(pixac) + i)) == NULL) { L_ERROR("pix[%d] not retrieved\n", __func__, i); continue; } if (pixGetWidth(pixs) == 1) { /* used sometimes as placeholders */ L_INFO("placeholder image[%d] has w = 1\n", __func__, i); pixDestroy(&pixs); continue; } if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); pixDestroy(&pixs); scaledres = (l_int32)(res * scalefactor); /* Select the encoding type */ if (type != L_DEFAULT_ENCODE) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { L_ERROR("encoding type selection failed for pix[%d]\n", __func__, i); pixDestroy(&pix); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, title, NULL, 0); pixDestroy(&pix); if (ret) { L_ERROR("pdf encoding failed for pix[%d]\n", __func__, i); continue; } ba = l_byteaInitFromMem(imdata, imbytes); LEPT_FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &n); if (n == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ for (i = 0; i < n; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * \brief pixacompFastConvertToPdfData() * * \param[in] pixac containing images all at the same resolution * \param[in] title [optional] pdf title * \param[out] pdata output pdf data (of all images * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates the pdf without transcoding if all the
 *          images in %pixac are compressed with jpeg.
 *          Images not jpeg compressed are skipped.
 *      (2) It assumes all images have the same resolution, and that
 *          the resolution embedded in each jpeg file is correct.
 * 
*/ l_ok pixacompFastConvertToPdfData(PIXAC *pixac, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *imdata; l_int32 i, n, ret, comptype; size_t imbytes; L_BYTEA *ba; PIXC *pixc; L_PTRA *pa_data; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); /* Generate all the encoded pdf strings */ n = pixacompGetCount(pixac); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if ((pixc = pixacompGetPixcomp(pixac, i, L_NOCOPY)) == NULL) { L_ERROR("pixc[%d] not retrieved\n", __func__, i); continue; } pixcompGetParameters(pixc, NULL, NULL, &comptype, NULL); if (comptype != IFF_JFIF_JPEG) { L_ERROR("pixc[%d] not jpeg compressed\n", __func__, i); continue; } ret = pixcompFastConvertToPdfData(pixc, title, &imdata, &imbytes); if (ret) { L_ERROR("pdf encoding failed for pixc[%d]\n", __func__, i); continue; } ba = l_byteaInitFromMem(imdata, imbytes); LEPT_FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &n); if (n == 0) { L_ERROR("no pdf files made\n", __func__); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); /* Clean up */ ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ for (i = 0; i < n; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * \brief pixcompFastConvertToPdfData() * * \param[in] pixc containing images all at the same resolution * \param[in] title [optional] pdf title * \param[out] pdata output pdf data (of all images * \param[out] pnbytes size of output pdf data * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates the pdf without transcoding.
 *      (2) It assumes all images are jpeg encoded, have the same
 *          resolution, and that the resolution embedded in each
 *          jpeg file is correct.  (It is transferred to the pdf
 *          via the cid.)
 * 
*/ static l_int32 pixcompFastConvertToPdfData(PIXC *pixc, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *data; L_COMP_DATA *cid; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); /* Make a copy of the data */ data = l_binaryCopy(pixc->data, pixc->size); cid = l_generateJpegDataMem(data, pixc->size, 0); /* Note: cid is destroyed, along with data, by this function */ return cidConvertToPdfData(cid, title, pdata, pnbytes); } /*--------------------------------------------------------------------* * Output for debugging * *--------------------------------------------------------------------*/ /*! * \brief pixacompWriteStreamInfo() * * \param[in] fp file stream * \param[in] pixac * \param[in] text [optional] identifying string; can be null * \return 0 if OK, 1 on error */ l_ok pixacompWriteStreamInfo(FILE *fp, PIXAC *pixac, const char *text) { l_int32 i, n, nboxes; PIXC *pixc; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (text) fprintf(fp, "Pixacomp Info for %s:\n", text); else fprintf(fp, "Pixacomp Info:\n"); n = pixacompGetCount(pixac); nboxes = pixacompGetBoxaCount(pixac); fprintf(fp, "Number of pixcomp: %d\n", n); fprintf(fp, "Size of pixcomp array alloc: %d\n", pixac->nalloc); fprintf(fp, "Offset of index into array: %d\n", pixac->offset); if (nboxes > 0) fprintf(fp, "Boxa has %d boxes\n", nboxes); else fprintf(fp, "Boxa is empty\n"); for (i = 0; i < n; i++) { pixc = pixacompGetPixcomp(pixac, pixac->offset + i, L_NOCOPY); pixcompWriteStreamInfo(fp, pixc, NULL); } return 0; } /*! * \brief pixcompWriteStreamInfo() * * \param[in] fp file stream * \param[in] pixc * \param[in] text [optional] identifying string; can be null * \return 0 if OK, 1 on error */ l_ok pixcompWriteStreamInfo(FILE *fp, PIXC *pixc, const char *text) { if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); if (text) fprintf(fp, " Pixcomp Info for %s:", text); else fprintf(fp, " Pixcomp Info:"); fprintf(fp, " width = %d, height = %d, depth = %d\n", pixc->w, pixc->h, pixc->d); fprintf(fp, " xres = %d, yres = %d, size in bytes = %zu\n", pixc->xres, pixc->yres, pixc->size); if (pixc->cmapflag) fprintf(fp, " has colormap\n"); else fprintf(fp, " no colormap\n"); if (pixc->comptype < NumImageFileFormatExtensions) { fprintf(fp, " comptype = %s (%d)\n", ImageFileFormatExtensions[pixc->comptype], pixc->comptype); } else { fprintf(fp, " Error!! Invalid comptype index: %d\n", pixc->comptype); } return 0; } /*! * \brief pixacompDisplayTiledAndScaled() * * \param[in] pixac * \param[in] outdepth output depth: 1, 8 or 32 bpp * \param[in] tilewidth each pix is scaled to this width * \param[in] ncols number of tiles in each row * \param[in] background 0 for white, 1 for black; this is the color * of the spacing between the images * \param[in] spacing between images, and on outside * \param[in] border width of additional black border on each image; * use 0 for no border * \return pix of tiled images, or NULL on error * *
 * Notes:
 *      (1) This is the same function as pixaDisplayTiledAndScaled(),
 *          except it works on a Pixacomp instead of a Pix.  It is particularly
 *          useful for showing the images in a Pixacomp at reduced resolution.
 *      (2) See pixaDisplayTiledAndScaled() for details.
 * 
*/ PIX * pixacompDisplayTiledAndScaled(PIXAC *pixac, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { PIX *pixd; PIXA *pixa; if (!pixac) return (PIX *)ERROR_PTR("pixac not defined", __func__, NULL); if ((pixa = pixaCreateFromPixacomp(pixac, L_COPY)) == NULL) return (PIX *)ERROR_PTR("pixa not made", __func__, NULL); pixd = pixaDisplayTiledAndScaled(pixa, outdepth, tilewidth, ncols, background, spacing, border); pixaDestroy(&pixa); return pixd; } /*! * \brief pixacompWriteFiles() * * \param[in] pixac * \param[in] subdir subdirectory of /tmp * \return 0 if OK, 1 on error */ l_ok pixacompWriteFiles(PIXAC *pixac, const char *subdir) { char buf[128]; l_int32 i, n; PIXC *pixc; if (!pixac) return ERROR_INT("pixac not defined", __func__, 1); if (lept_mkdir(subdir) > 0) return ERROR_INT("invalid subdir", __func__, 1); n = pixacompGetCount(pixac); for (i = 0; i < n; i++) { pixc = pixacompGetPixcomp(pixac, i, L_NOCOPY); snprintf(buf, sizeof(buf), "/tmp/%s/%03d", subdir, i); pixcompWriteFile(buf, pixc); } return 0; } extern const char *ImageFileFormatExtensions[]; /*! * \brief pixcompWriteFile() * * \param[in] rootname * \param[in] pixc * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The compressed data is written to file, and the filename is
 *          generated by appending the format extension to %rootname.
 * 
*/ l_ok pixcompWriteFile(const char *rootname, PIXC *pixc) { char buf[128]; if (!pixc) return ERROR_INT("pixc not defined", __func__, 1); snprintf(buf, sizeof(buf), "%s.%s", rootname, ImageFileFormatExtensions[pixc->comptype]); l_binaryWrite(buf, "w", pixc->data, pixc->size); return 0; } leptonica-1.86.0/src/pixconv.c000066400000000000000000004267041506303110300162120ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixconv.c *
 *
 *      These functions convert between images of different types
 *      without scaling.
 *
 *      Conversion from 8 bpp grayscale to 1, 2, 4 and 8 bpp
 *           PIX        *pixThreshold8()
 *
 *      Conversion from colormap to full color or grayscale
 *           PIX        *pixRemoveColormapGeneral()
 *           PIX        *pixRemoveColormap()
 *
 *      Add colormap losslessly (8 to 8)
 *           l_int32     pixAddGrayColormap8()
 *           PIX        *pixAddMinimalGrayColormap8()
 *
 *      Conversion from RGB color to 8 bit gray
 *           PIX        *pixConvertRGBToLuminance()
 *           PIX        *pixConvertRGBToGrayGeneral()
 *           PIX        *pixConvertRGBToGray()
 *           PIX        *pixConvertRGBToGrayFast()
 *           PIX        *pixConvertRGBToGrayMinMax()
 *           PIX        *pixConvertRGBToGraySatBoost()
 *           PIX        *pixConvertRGBToGrayArb()
 *           PIX        *pixConvertRGBToBinaryArb()
 *
 *      Conversion from grayscale to colormap
 *           PIX        *pixConvertGrayToColormap()  -- 2, 4, 8 bpp
 *           PIX        *pixConvertGrayToColormap8()  -- 8 bpp only
 *
 *      Colorizing conversion from grayscale to color
 *           PIX        *pixColorizeGray()  -- 8 bpp or cmapped
 *
 *      Conversion from RGB color to colormap
 *           PIX        *pixConvertRGBToColormap()
 *
 *      Conversion from colormap to 1 bpp
 *           PIX        *pixConvertCmapTo1()
 *
 *      Quantization for relatively small number of colors in source
 *           l_int32     pixQuantizeIfFewColors()
 *
 *      Conversion from 16 bpp to 8 bpp
 *           PIX        *pixConvert16To8()
 *
 *      Conversion from grayscale to false color
 *           PIX        *pixConvertGrayToFalseColor()
 *
 *      Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp
 *           PIX        *pixUnpackBinary()
 *           PIX        *pixConvert1To16()
 *           PIX        *pixConvert1To32()
 *
 *      Unpacking conversion from 1 bpp to 2 bpp
 *           PIX        *pixConvert1To2Cmap()
 *           PIX        *pixConvert1To2()
 *
 *      Unpacking conversion from 1 bpp to 4 bpp
 *           PIX        *pixConvert1To4Cmap()
 *           PIX        *pixConvert1To4()
 *
 *      Unpacking conversion from 1, 2 and 4 bpp to 8 bpp
 *           PIX        *pixConvert1To8()
 *           PIX        *pixConvert2To8()
 *           PIX        *pixConvert4To8()
 *
 *      Unpacking conversion from 8 bpp to 16 bpp
 *           PIX        *pixConvert8To16()
 *
 *      Top-level conversion to 1 bpp
 *           PIX        *pixConvertTo1Adaptive()
 *           PIX        *pixConvertTo1()
 *           PIX        *pixConvertTo1BySampling()
 *
 *      Top-level conversion to 2 bpp
 *           PIX        *pixConvertTo2()
 *           PIX        *pixConvert8To2()
 *
 *      Top-level conversion to 4 bpp
 *           PIX        *pixConvertTo4()
 *           PIX        *pixConvert8To4()
 *
 *      Top-level conversion to 8 bpp
 *           PIX        *pixConvertTo8()
 *           PIX        *pixConvertTo8BySampling()
 *           PIX        *pixConvertTo8Colormap()
 *
 *      Top-level conversion to 16 bpp
 *           PIX        *pixConvertTo16()
 *
 *      Top-level conversion to 32 bpp (RGB)
 *           PIX        *pixConvertTo32()   ***
 *           PIX        *pixConvertTo32BySampling()   ***
 *           PIX        *pixConvert8To32()  ***
 *
 *      Top-level conversion to 8 or 32 bpp, without colormap
 *           PIX        *pixConvertTo8Or32
 *
 *      Conversion between 24 bpp and 32 bpp rgb
 *           PIX        *pixConvert24To32()
 *           PIX        *pixConvert32To24()
 *
 *      Conversion between 32 bpp (1 spp) and 16 or 8 bpp
 *           PIX        *pixConvert32To16()
 *           PIX        *pixConvert32To8()
 *
 *      Removal of alpha component by blending with white background
 *           PIX        *pixRemoveAlpha()
 *
 *      Addition of alpha component to 1 bpp
 *           PIX        *pixAddAlphaTo1bpp()
 *
 *      Lossless depth conversion (unpacking)
 *           PIX        *pixConvertLossless()
 *
 *      Conversion for printing in PostScript
 *           PIX        *pixConvertForPSWrap()
 *
 *      Scaling conversion to subpixel RGB
 *           PIX        *pixConvertToSubpixelRGB()
 *           PIX        *pixConvertGrayToSubpixelRGB()
 *           PIX        *pixConvertColorToSubpixelRGB()
 *
 *      Setting neutral point for min/max boost conversion to gray
 *          void         l_setNeutralBoostVal()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* ------- Set neutral point for min/max boost conversion to gray ------ */ /* Call l_setNeutralBoostVal() to change this */ static l_int32 var_NEUTRAL_BOOST_VAL = 180; #ifndef NO_CONSOLE_IO #define DEBUG_CONVERT_TO_COLORMAP 0 #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Conversion from 8 bpp grayscale to 1, 2 4 and 8 bpp * *-------------------------------------------------------------*/ /*! * \brief pixThreshold8() * * \param[in] pixs 8 bpp grayscale * \param[in] d destination depth: 1, 2, 4 or 8 * \param[in] nlevels number of levels to be used for colormap * \param[in] cmapflag 1 if makes colormap; 0 otherwise * \return pixd thresholded with standard dest thresholds, * or NULL on error * *
 * Notes:
 *      (1) This uses, by default, equally spaced "target" values
 *          that depend on the number of levels, with thresholds
 *          halfway between.  For N levels, with separation (N-1)/255,
 *          there are N-1 fixed thresholds.
 *      (2) For 1 bpp destination, the number of levels can only be 2
 *          and if a cmap is made, black is (0,0,0) and white
 *          is (255,255,255), which is opposite to the convention
 *          without a colormap.
 *      (3) For 1, 2 and 4 bpp, the nlevels arg is used if a colormap
 *          is made; otherwise, we take the most significant bits
 *          from the src that will fit in the dest.
 *      (4) For 8 bpp, the input pixs is quantized to nlevels.  The
 *          dest quantized with that mapping, either through a colormap
 *          table or directly with 8 bit values.
 *      (5) Typically you should not use make a colormap for 1 bpp dest.
 *      (6) This is not dithering.  Each pixel is treated independently.
 * 
*/ PIX * pixThreshold8(PIX *pixs, l_int32 d, l_int32 nlevels, l_int32 cmapflag) { PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (cmapflag && nlevels < 2) return (PIX *)ERROR_PTR("nlevels must be at least 2", __func__, NULL); switch (d) { case 1: pixd = pixThresholdToBinary(pixs, 128); if (cmapflag) { cmap = pixcmapCreateLinear(1, 2); pixSetColormap(pixd, cmap); } break; case 2: pixd = pixThresholdTo2bpp(pixs, nlevels, cmapflag); break; case 4: pixd = pixThresholdTo4bpp(pixs, nlevels, cmapflag); break; case 8: pixd = pixThresholdOn8bpp(pixs, nlevels, cmapflag); break; default: return (PIX *)ERROR_PTR("d must be in {1,2,4,8}", __func__, NULL); } if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); return pixd; } /*-------------------------------------------------------------* * Conversion from colormapped pix * *-------------------------------------------------------------*/ /*! * \brief pixRemoveColormapGeneral() * * \param[in] pixs any depth, with or without colormap * \param[in] type REMOVE_CMAP_TO_BINARY, * REMOVE_CMAP_TO_GRAYSCALE, * REMOVE_CMAP_TO_FULL_COLOR, * REMOVE_CMAP_WITH_ALPHA, * REMOVE_CMAP_BASED_ON_SRC * \param[in] ifnocmap L_CLONE, L_COPY * \return pixd always a new pix; without colormap, or NULL on error * *
 * Notes:
 *      (1) Convenience function that allows choice between returning
 *          a clone or a copy if pixs does not have a colormap.
 *      (2) See pixRemoveColormap().
 * 
*/ PIX * pixRemoveColormapGeneral(PIX *pixs, l_int32 type, l_int32 ifnocmap) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (ifnocmap != L_CLONE && ifnocmap != L_COPY) return (PIX *)ERROR_PTR("invalid value for ifnocmap", __func__, NULL); if (pixGetColormap(pixs)) return pixRemoveColormap(pixs, type); if (ifnocmap == L_CLONE) return pixClone(pixs); else return pixCopy(NULL, pixs); } /*! * \brief pixRemoveColormap() * * \param[in] pixs see restrictions below * \param[in] type REMOVE_CMAP_TO_BINARY, * REMOVE_CMAP_TO_GRAYSCALE, * REMOVE_CMAP_TO_FULL_COLOR, * REMOVE_CMAP_WITH_ALPHA, * REMOVE_CMAP_BASED_ON_SRC * \return pixd without colormap, or NULL on error * *
 * Notes:
 *      (1) If pixs does not have a colormap, a clone is returned.
 *      (2) Otherwise, the input pixs is restricted to 1, 2, 4 or 8 bpp.
 *      (3) Use REMOVE_CMAP_TO_BINARY only on 1 bpp pix.
 *      (4) For grayscale conversion from RGB, use a weighted average
 *          of RGB values, and always return an 8 bpp pix, regardless
 *          of whether the input pixs depth is 2, 4 or 8 bpp.
 *      (5) REMOVE_CMAP_TO_FULL_COLOR ignores the alpha component and
 *          returns a 32 bpp pix with spp == 3 and the alpha bytes are 0.
 *      (6) For REMOVE_CMAP_BASED_ON_SRC, if there is no color, this
 *          returns either a 1 bpp or 8 bpp grayscale pix.
 *          If there is color, this returns a 32 bpp pix, with either:
 *           * 3 spp, if the alpha values are all 255 (opaque), or
 *           * 4 spp (preserving the alpha), if any alpha values are not 255.
 * 
*/ PIX * pixRemoveColormap(PIX *pixs, l_int32 type) { l_int32 sval, rval, gval, bval, val0, val1; l_int32 i, j, k, w, h, d, wpls, wpld, ncolors, nalloc, count; l_int32 opaque, colorfound, blackwhite; l_int32 *rmap, *gmap, *bmap, *amap; l_uint32 *datas, *lines, *datad, *lined, *lut, *graymap; l_uint32 sword, dword; PIXCMAP *cmap; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if ((cmap = pixGetColormap(pixs)) == NULL) return pixClone(pixs); if (type != REMOVE_CMAP_TO_BINARY && type != REMOVE_CMAP_TO_GRAYSCALE && type != REMOVE_CMAP_TO_FULL_COLOR && type != REMOVE_CMAP_WITH_ALPHA && type != REMOVE_CMAP_BASED_ON_SRC) { L_WARNING("Invalid type; converting based on src\n", __func__); type = REMOVE_CMAP_BASED_ON_SRC; } pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs must be {1,2,4,8} bpp", __func__, NULL); ncolors = pixcmapGetCount(cmap); nalloc = 1 << d; /* allocate for max size in case of pixel corruption */ if (ncolors > nalloc) return (PIX *)ERROR_PTR("too many colors for pixel depth", __func__, NULL); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) return (PIX *)ERROR_PTR("colormap arrays not made", __func__, NULL); if (d != 1 && type == REMOVE_CMAP_TO_BINARY) { L_WARNING("not 1 bpp; can't remove cmap to binary\n", __func__); type = REMOVE_CMAP_BASED_ON_SRC; } /* Select output type depending on colormap content */ if (type == REMOVE_CMAP_BASED_ON_SRC) { pixcmapIsOpaque(cmap, &opaque); pixcmapHasColor(cmap, &colorfound); pixcmapIsBlackAndWhite(cmap, &blackwhite); if (!opaque) { /* save the alpha */ type = REMOVE_CMAP_WITH_ALPHA; } else if (colorfound) { type = REMOVE_CMAP_TO_FULL_COLOR; } else { /* opaque and no color */ if (d == 1 && blackwhite) /* can binarize without loss */ type = REMOVE_CMAP_TO_BINARY; else type = REMOVE_CMAP_TO_GRAYSCALE; } } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == REMOVE_CMAP_TO_BINARY) { if ((pixd = pixCopy(NULL, pixs)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup_arrays; } pixcmapGetColor(cmap, 0, &rval, &gval, &bval); val0 = rval + gval + bval; pixcmapGetColor(cmap, 1, &rval, &gval, &bval); val1 = rval + gval + bval; if (val0 < val1) /* photometrically inverted from standard */ pixInvert(pixd, pixd); pixDestroyColormap(pixd); } else if (type == REMOVE_CMAP_TO_GRAYSCALE) { if ((pixd = pixCreate(w, h, 8)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup_arrays; } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); graymap = (l_uint32 *)LEPT_CALLOC(nalloc, sizeof(l_uint32)); for (i = 0; i < ncolors; i++) { graymap[i] = (l_uint32)(L_RED_WEIGHT * rmap[i] + L_GREEN_WEIGHT * gmap[i] + L_BLUE_WEIGHT * bmap[i] + 0.5); } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; switch (d) /* depth test above; no default permitted */ { case 8: /* Unrolled 4x */ for (j = 0, count = 0; j + 3 < w; j += 4, count++) { sword = lines[count]; dword = (graymap[(sword >> 24) & 0xff] << 24) | (graymap[(sword >> 16) & 0xff] << 16) | (graymap[(sword >> 8) & 0xff] << 8) | graymap[sword & 0xff]; lined[count] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_BYTE(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING #define CHECK_VALUE(a, b, c) if (GET_DATA_BYTE(a, b) != c) { \ lept_stderr("Error: mismatch at %d, %d vs %d\n", \ j, GET_DATA_BYTE(a, b), c); } for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 4: /* Unrolled 8x */ for (j = 0, count = 0; j + 7 < w; j += 8, count++) { sword = lines[count]; dword = (graymap[(sword >> 28) & 0xf] << 24) | (graymap[(sword >> 24) & 0xf] << 16) | (graymap[(sword >> 20) & 0xf] << 8) | graymap[(sword >> 16) & 0xf]; lined[2 * count] = dword; dword = (graymap[(sword >> 12) & 0xf] << 24) | (graymap[(sword >> 8) & 0xf] << 16) | (graymap[(sword >> 4) & 0xf] << 8) | graymap[sword & 0xf]; lined[2 * count + 1] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_QBIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 2: /* Unrolled 16x */ for (j = 0, count = 0; j + 15 < w; j += 16, count++) { sword = lines[count]; dword = (graymap[(sword >> 30) & 0x3] << 24) | (graymap[(sword >> 28) & 0x3] << 16) | (graymap[(sword >> 26) & 0x3] << 8) | graymap[(sword >> 24) & 0x3]; lined[4 * count] = dword; dword = (graymap[(sword >> 22) & 0x3] << 24) | (graymap[(sword >> 20) & 0x3] << 16) | (graymap[(sword >> 18) & 0x3] << 8) | graymap[(sword >> 16) & 0x3]; lined[4 * count + 1] = dword; dword = (graymap[(sword >> 14) & 0x3] << 24) | (graymap[(sword >> 12) & 0x3] << 16) | (graymap[(sword >> 10) & 0x3] << 8) | graymap[(sword >> 8) & 0x3]; lined[4 * count + 2] = dword; dword = (graymap[(sword >> 6) & 0x3] << 24) | (graymap[(sword >> 4) & 0x3] << 16) | (graymap[(sword >> 2) & 0x3] << 8) | graymap[sword & 0x3]; lined[4 * count + 3] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 1: /* Unrolled 8x */ for (j = 0, count = 0; j + 31 < w; j += 32, count++) { sword = lines[count]; for (k = 0; k < 4; k++) { /* The top byte is always the relevant one */ dword = (graymap[(sword >> 31) & 0x1] << 24) | (graymap[(sword >> 30) & 0x1] << 16) | (graymap[(sword >> 29) & 0x1] << 8) | graymap[(sword >> 28) & 0x1]; lined[8 * count + 2 * k] = dword; dword = (graymap[(sword >> 27) & 0x1] << 24) | (graymap[(sword >> 26) & 0x1] << 16) | (graymap[(sword >> 25) & 0x1] << 8) | graymap[(sword >> 24) & 0x1]; lined[8 * count + 2 * k + 1] = dword; sword <<= 8; /* Move up the next byte */ } } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_BIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_BIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #undef CHECK_VALUE #endif break; default: return NULL; } } if (graymap) LEPT_FREE(graymap); } else { /* type == REMOVE_CMAP_TO_FULL_COLOR or REMOVE_CMAP_WITH_ALPHA */ if ((pixd = pixCreate(w, h, 32)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup_arrays; } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); if (type == REMOVE_CMAP_WITH_ALPHA) pixSetSpp(pixd, 4); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); lut = (l_uint32 *)LEPT_CALLOC(nalloc, sizeof(l_uint32)); for (i = 0; i < ncolors; i++) { if (type == REMOVE_CMAP_TO_FULL_COLOR) composeRGBPixel(rmap[i], gmap[i], bmap[i], lut + i); else /* full color plus alpha */ composeRGBAPixel(rmap[i], gmap[i], bmap[i], amap[i], lut + i); } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) sval = GET_DATA_BYTE(lines, j); else if (d == 4) sval = GET_DATA_QBIT(lines, j); else if (d == 2) sval = GET_DATA_DIBIT(lines, j); else /* (d == 1) */ sval = GET_DATA_BIT(lines, j); if (sval >= ncolors) L_WARNING("pixel value out of bounds\n", __func__); else lined[j] = lut[sval]; } } LEPT_FREE(lut); } cleanup_arrays: LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); LEPT_FREE(amap); return pixd; } /*-------------------------------------------------------------* * Add colormap losslessly (8 to 8) * *-------------------------------------------------------------*/ /*! * \brief pixAddGrayColormap8() * * \param[in] pixs 8 bpp * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If pixs has a colormap, this is a no-op.
 * 
*/ l_ok pixAddGrayColormap8(PIX *pixs) { PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (pixGetColormap(pixs)) return 0; cmap = pixcmapCreateLinear(8, 256); pixSetColormap(pixs, cmap); return 0; } /*! * \brief pixAddMinimalGrayColormap8() * * \param[in] pixs 8 bpp * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a colormapped version of the input image
 *          that has the same number of colormap entries as the
 *          input image has unique gray levels.
 * 
*/ PIX * pixAddMinimalGrayColormap8(PIX *pixs) { l_int32 ncolors, w, h, i, j, wpl1, wpld, index, val; l_int32 *inta, *revmap; l_uint32 *data1, *datad, *line1, *lined; PIX *pix1, *pixd; PIXCMAP *cmap; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); /* Eliminate the easy cases */ pixNumColors(pixs, 1, &ncolors); cmap = pixGetColormap(pixs); if (cmap) { if (pixcmapGetCount(cmap) == ncolors) /* irreducible */ return pixCopy(NULL, pixs); else pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); } else { if (ncolors == 256) { pix1 = pixCopy(NULL, pixs); pixAddGrayColormap8(pix1); return pix1; } pix1 = pixClone(pixs); } /* Find the gray levels and make a reverse map */ pixGetDimensions(pix1, &w, &h, NULL); data1 = pixGetData(pix1); wpl1 = pixGetWpl(pix1); inta = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line1, j); inta[val] = 1; } } cmap = pixcmapCreate(8); revmap = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0, index = 0; i < 256; i++) { if (inta[i]) { pixcmapAddColor(cmap, i, i, i); revmap[i] = index++; } } /* Set all pixels in pixd to the colormap index */ pixd = pixCreateTemplate(pix1); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line1, j); SET_DATA_BYTE(lined, j, revmap[val]); } } pixDestroy(&pix1); LEPT_FREE(inta); LEPT_FREE(revmap); return pixd; } /*-------------------------------------------------------------* * Conversion from RGB color to grayscale * *-------------------------------------------------------------*/ /*! * \brief pixConvertRGBToLuminance() * * \param[in] pixs 32 bpp RGB * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) Use a standard luminance conversion.
 * 
*/ PIX * pixConvertRGBToLuminance(PIX *pixs) { return pixConvertRGBToGray(pixs, 0.0, 0.0, 0.0); } /*! * \brief pixConvertRGBToGrayGeneral() * * \param[in] pixs 32 bpp RGB * \param[in] type color selection flag * \param[in] rwt, gwt, bwt ignored if type != L_SELECT_WEIGHTED; * if used, must sum to 1.0. * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN,
 *          L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX, L_SELECT_AVERAGE,
 *          L_SELECT_HUE, L_SELECT_SATURATION, L_SELECT_WEIGHTED.
 *      (2) The weights, if used, must all be non-negative and must sum to 1.0.
 * 
*/ PIX * pixConvertRGBToGrayGeneral(PIX *pixs, l_int32 type, l_float32 rwt, l_float32 gwt, l_float32 bwt) { PIX *pix1; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (type != L_SELECT_RED && type != L_SELECT_GREEN && type != L_SELECT_BLUE && type != L_SELECT_MIN && type != L_SELECT_MAX && type != L_SELECT_AVERAGE && type != L_SELECT_HUE && type != L_SELECT_SATURATION && type != L_SELECT_WEIGHTED) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (type == L_SELECT_RED) { pix1 = pixGetRGBComponent(pixs, COLOR_RED); } else if (type == L_SELECT_GREEN) { pix1 = pixGetRGBComponent(pixs, COLOR_GREEN); } else if (type == L_SELECT_BLUE) { pix1 = pixGetRGBComponent(pixs, COLOR_BLUE); } else if (type == L_SELECT_MIN) { pix1 = pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MIN); } else if (type == L_SELECT_MAX) { pix1 = pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MAX); } else if (type == L_SELECT_AVERAGE) { pix1 = pixConvertRGBToGray(pixs, 0.34f, 0.33f, 0.33f); } else if (type == L_SELECT_HUE) { pix1 = pixConvertRGBToHue(pixs); } else if (type == L_SELECT_SATURATION) { pix1 = pixConvertRGBToSaturation(pixs); } else { /* L_SELECT_WEIGHTED */ if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) return (PIX *)ERROR_PTR("weights not all >= 0.0", __func__, NULL); if (rwt + gwt + bwt != 1.0) return (PIX *)ERROR_PTR("weights don't sum to 1.0", __func__, NULL); pix1 = pixConvertRGBToGray(pixs, rwt, gwt, bwt); } return pix1; } /*! * \brief pixConvertRGBToGray() * * \param[in] pixs 32 bpp RGB * \param[in] rwt, gwt, bwt non-negative; these should add to 1.0, * or use 0.0 for default * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) Use a weighted average of the RGB values.
 * 
*/ PIX * pixConvertRGBToGray(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 word; l_uint32 *datas, *lines, *datad, *lined; l_float32 sum; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) return (PIX *)ERROR_PTR("weights not all >= 0.0", __func__, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { rwt = L_RED_WEIGHT; gwt = L_GREEN_WEIGHT; bwt = L_BLUE_WEIGHT; } sum = rwt + gwt + bwt; if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", __func__); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { word = *(lines + j); val = (l_int32)(rwt * ((word >> L_RED_SHIFT) & 0xff) + gwt * ((word >> L_GREEN_SHIFT) & 0xff) + bwt * ((word >> L_BLUE_SHIFT) & 0xff) + 0.5); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * \brief pixConvertRGBToGrayFast() * * \param[in] pixs 32 bpp RGB * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) This function should be used if speed of conversion
 *          is paramount, and the green channel can be used as
 *          a fair representative of the RGB intensity.  It is
 *          several times faster than pixConvertRGBToGray().
 *      (2) To combine RGB to gray conversion with subsampling,
 *          use pixScaleRGBToGrayFast() instead.
 * 
*/ PIX * pixConvertRGBToGrayFast(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++, lines++) { val = ((*lines) >> L_GREEN_SHIFT) & 0xff; SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * \brief pixConvertRGBToGrayMinMax() * * \param[in] pixs 32 bpp RGB * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF, * L_CHOOSE_MIN_BOOST, L_CHOOSE_MAX_BOOST * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) This chooses various components or combinations of them,
 *          from the three RGB sample values.  In addition to choosing
 *          the min, max, and maxdiff (difference between max and min),
 *          this also allows boosting the min and max about a reference
 *          value.
 *      (2) The default reference value for boosting the min and max
 *          is 200.  This can be changed with l_setNeutralBoostVal()
 *      (3) The result with L_CHOOSE_MAXDIFF is surprisingly sensitive
 *          to a jpeg compression/decompression cycle with quality = 75.
 * 
*/ PIX * pixConvertRGBToGrayMinMax(PIX *pixs, l_int32 type) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, val, minval, maxval; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && type != L_CHOOSE_MAXDIFF && type != L_CHOOSE_MIN_BOOST && type != L_CHOOSE_MAX_BOOST) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); if (type == L_CHOOSE_MIN || type == L_CHOOSE_MIN_BOOST) { val = L_MIN(rval, gval); val = L_MIN(val, bval); if (type == L_CHOOSE_MIN_BOOST) val = L_MIN(255, (val * val) / var_NEUTRAL_BOOST_VAL); } else if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAX_BOOST) { val = L_MAX(rval, gval); val = L_MAX(val, bval); if (type == L_CHOOSE_MAX_BOOST) val = L_MIN(255, (val * val) / var_NEUTRAL_BOOST_VAL); } else { /* L_CHOOSE_MAXDIFF */ minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); val = maxval - minval; } SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * \brief pixConvertRGBToGraySatBoost() * * \param[in] pixs 32 bpp rgb * \param[in] refval between 1 and 255; typ. less than 128 * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) This returns the max component value, boosted by
 *          the saturation. The maximum boost occurs where
 *          the maximum component value is equal to some reference value.
 *          This particular weighting is due to Dany Qumsiyeh.
 *      (2) For gray pixels (zero saturation), this returns
 *          the intensity of any component.
 *      (3) For fully saturated pixels ('fullsat'), this rises linearly
 *          with the max value and has a slope equal to 255 divided
 *          by the reference value; for a max value greater than
 *          the reference value, it is clipped to 255.
 *      (4) For saturation values in between, the output is a linear
 *          combination of (2) and (3), weighted by saturation.
 *          It falls between these two curves, and does not exceed 255.
 *      (5) This can be useful for distinguishing an object that has nonzero
 *          saturation from a gray background.  For this, the refval
 *          should be chosen near the expected value of the background,
 *          to achieve maximum saturation boost there.
 * 
*/ PIX * pixConvertRGBToGraySatBoost(PIX *pixs, l_int32 refval) { l_int32 w, h, d, i, j, wplt, wpld; l_int32 rval, gval, bval, sval, minrg, maxrg, min, max, delta; l_int32 fullsat, newval; l_float32 *invmax, *ratio; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or rgb", __func__, NULL); if (refval < 1 || refval > 255) return (PIX *)ERROR_PTR("refval not in [1 ... 255]", __func__, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); invmax = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); ratio = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); for (i = 1; i < 256; i++) { /* i == 0 --> delta = sval = newval = 0 */ invmax[i] = 1.0f / (l_float32)i; ratio[i] = (l_float32)i / (l_float32)refval; } for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(linet[j], &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) /* gray; no chroma */ sval = 0; else sval = (l_int32)(255. * (l_float32)delta * invmax[max] + 0.5); fullsat = L_MIN(255, 255 * ratio[max]); newval = (sval * fullsat + (255 - sval) * max) / 255; SET_DATA_BYTE(lined, j, newval); } } pixDestroy(&pixt); LEPT_FREE(invmax); LEPT_FREE(ratio); return pixd; } /*! * \brief pixConvertRGBToGrayArb() * * \param[in] pixs 32 bpp RGB * \param[in] rc, gc, bc arithmetic factors; can be negative * \return 8 bpp pix, or NULL on error * *
 * Notes:
 *      (1) This converts to gray using an arbitrary linear combination
 *          of the rgb color components.  It differs from pixConvertToGray(),
 *          which uses only positive coefficients that sum to 1.
 *      (2) The gray output values are clipped to 0 and 255.
 * 
*/ PIX * pixConvertRGBToGrayArb(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, val; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (rc <= 0 && gc <= 0 && bc <= 0) return (PIX *)ERROR_PTR("all coefficients <= 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); val = (l_int32)(rc * rval + gc * gval + bc * bval); val = L_MIN(255, L_MAX(0, val)); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * \brief pixConvertRGBToBinaryArb() * * \param[in] pixs 32 bpp RGB * \param[in] rc, gc, bc arithmetic factors; can be negative * \param[in] thresh binarization threshold * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return 1 bpp pix, or NULL on error * *
 * Notes:
 *      (1) This makes a 1 bpp mask from an RGB image, using an arbitrary
 *          linear combination of the rgb color components, along with
 *          a threshold and a selection choice of the gray value relative
 *          to %thresh.
 * 
*/ PIX * pixConvertRGBToBinaryArb(PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_int32 thresh, l_int32 relation) { l_int32 threshold; PIX *pix1, *pix2; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (rc <= 0 && gc <= 0 && bc <= 0) return (PIX *)ERROR_PTR("all coefficients <= 0", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid relation", __func__, NULL); pix1 = pixConvertRGBToGrayArb(pixs, rc, gc, bc); threshold = (relation == L_SELECT_IF_LTE || relation == L_SELECT_IF_GT) ? thresh : thresh + 1; pix2 = pixThresholdToBinary(pix1, threshold); if (relation == L_SELECT_IF_GT || relation == L_SELECT_IF_GTE) pixInvert(pix2, pix2); pixDestroy(&pix1); return pix2; } /*---------------------------------------------------------------------------* * Conversion from grayscale to colormap * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertGrayToColormap() * * \param[in] pixs 2, 4 or 8 bpp grayscale * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error * *
 * Notes:
 *      (1) This is a simple interface for adding a colormap to a
 *          2, 4 or 8 bpp grayscale image without causing any
 *          quantization.  There is some similarity to operations
 *          in grayquant.c, such as pixThresholdOn8bpp(), where
 *          the emphasis is on quantization with an arbitrary number
 *          of levels, and a colormap is an option.
 *      (2) Returns a copy if pixs already has a colormap.
 *      (3) For 8 bpp src, this is a lossless transformation.
 *      (4) For 2 and 4 bpp src, this generates a colormap that
 *          assumes full coverage of the gray space, with equally spaced
 *          levels: 4 levels for d = 2 and 16 levels for d = 4.
 *      (5) In all cases, the depth of the dest is the same as the src.
 * 
*/ PIX * pixConvertGrayToColormap(PIX *pixs) { l_int32 d; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs not 2, 4 or 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) { L_INFO("pixs already has a colormap\n", __func__); return pixCopy(NULL, pixs); } if (d == 8) /* lossless conversion */ return pixConvertGrayToColormap8(pixs, 2); /* Build a cmap with equally spaced target values over the * full 8 bpp range. */ pixd = pixCopy(NULL, pixs); cmap = pixcmapCreateLinear(d, 1 << d); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvertGrayToColormap8() * * \param[in] pixs 8 bpp grayscale * \param[in] mindepth of pixd; valid values are 2, 4 and 8 * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error * *
 * Notes:
 *      (1) Returns a copy if pixs already has a colormap.
 *      (2) This is a lossless transformation; there is no quantization.
 *          We compute the number of different gray values in pixs,
 *          and construct a colormap that has exactly these values.
 *      (3) 'mindepth' is the minimum depth of pixd.  If mindepth == 8,
 *          pixd will always be 8 bpp.  Let the number of different
 *          gray values in pixs be ngray.  If mindepth == 4, we attempt
 *          to save pixd as a 4 bpp image, but if ngray > 16,
 *          pixd must be 8 bpp.  Likewise, if mindepth == 2,
 *          the depth of pixd will be 2 if ngray <= 4 and 4 if ngray > 4
 *          but <= 16.
 * 
*/ PIX * pixConvertGrayToColormap8(PIX *pixs, l_int32 mindepth) { l_int32 ncolors, w, h, depth, i, j, wpls, wpld; l_int32 index, num, val, newval; l_int32 array[256]; l_uint32 *lines, *lined, *datas, *datad; NUMA *na; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) { L_WARNING("invalid value of mindepth; setting to 8\n", __func__); mindepth = 8; } if (pixGetColormap(pixs)) { L_INFO("pixs already has a colormap\n", __func__); return pixCopy(NULL, pixs); } na = pixGetGrayHistogram(pixs, 1); numaGetCountRelativeToZero(na, L_GREATER_THAN_ZERO, &ncolors); if (mindepth == 8 || ncolors > 16) depth = 8; else if (mindepth == 4 || ncolors > 4) depth = 4; else depth = 2; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, depth); cmap = pixcmapCreate(depth); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); index = 0; for (i = 0; i < 256; i++) { array[i] = 0; /* only to quiet the static checker */ numaGetIValue(na, i, &num); if (num > 0) { pixcmapAddColor(cmap, i, i, i); array[i] = index; index++; } } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); newval = array[val]; if (depth == 2) SET_DATA_DIBIT(lined, j, newval); else if (depth == 4) SET_DATA_QBIT(lined, j, newval); else /* depth == 8 */ SET_DATA_BYTE(lined, j, newval); } } numaDestroy(&na); return pixd; } /*---------------------------------------------------------------------------* * Colorizing conversion from grayscale to color * *---------------------------------------------------------------------------*/ /*! * \brief pixColorizeGray() * * \param[in] pixs 8 bpp gray; 2, 4 or 8 bpp colormapped * \param[in] color 32 bit rgba pixel * \param[in] cmapflag 1 for result to have colormap; 0 for RGB * \return pixd 8 bpp colormapped or 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) This applies the specific color to the grayscale image.
 *      (2) If pixs already has a colormap, it is removed to gray
 *          before colorizing.
 * 
*/ PIX * pixColorizeGray(PIX *pixs, l_uint32 color, l_int32 cmapflag) { l_int32 i, j, w, h, wplt, wpld, val8; l_uint32 *datad, *datat, *lined, *linet, *tab; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", __func__, NULL); if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt = pixClone(pixs); cmap = pixcmapGrayToColor(color); if (cmapflag) { pixd = pixCopy(NULL, pixt); pixSetColormap(pixd, cmap); pixDestroy(&pixt); return pixd; } /* Make an RGB pix */ pixcmapToRGBTable(cmap, &tab, NULL); pixGetDimensions(pixt, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { lined = datad + i * wpld; linet = datat + i * wplt; for (j = 0; j < w; j++) { val8 = GET_DATA_BYTE(linet, j); lined[j] = tab[val8]; } } pixDestroy(&pixt); pixcmapDestroy(&cmap); LEPT_FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from RGB color to colormap * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertRGBToColormap() * * \param[in] pixs 32 bpp rgb * \param[in] ditherflag 1 to dither, 0 otherwise * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error * *
 * Notes:
 *      (1) This function has two relatively simple modes of color
 *          quantization:
 *            (a) If the image is made orthographically and has not more
 *                than 256 'colors' at the level 4 octcube leaves,
 *                it is quantized nearly exactly.  The ditherflag
 *                is ignored.
 *            (b) Most natural images have more than 256 different colors;
 *                in that case we use adaptive octree quantization,
 *                with dithering if requested.
 *      (2) If there are not more than 256 occupied level 4 octcubes,
 *          the color in the colormap that represents all pixels in
 *          one of those octcubes is given by the first pixel that
 *          falls into that octcube.
 *      (3) Dithering gives better visual results on images where
 *          there is a color wash (a slow variation of color), but it
 *          is about twice as slow and results in significantly larger
 *          files when losslessly compressed (e.g., into png).
 * 
*/ PIX * pixConvertRGBToColormap(PIX *pixs, l_int32 ditherflag) { l_int32 ncolors; NUMA *na; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (pixGetSpp(pixs) == 4) L_WARNING("pixs has alpha; removing\n", __func__); /* Get the histogram and count the number of occupied level 4 * leaf octcubes. We don't yet know if this is the number of * actual colors, but if it's not, all pixels falling into * the same leaf octcube will be assigned to the color of the * first pixel that lands there. */ na = pixOctcubeHistogram(pixs, 4, &ncolors); /* If 256 or fewer occupied leaf octcubes, quantize to those octcubes */ if (ncolors <= 256) { pixd = pixFewColorsOctcubeQuant2(pixs, 4, na, ncolors, NULL); pixCopyInputFormat(pixd, pixs); numaDestroy(&na); return pixd; } /* There are too many occupied leaf octcubes to be represented * directly in a colormap. Fall back to octree quantization, * optionally with dithering. */ numaDestroy(&na); if (ditherflag) L_INFO("More than 256 colors; using octree quant with dithering\n", __func__); else L_INFO("More than 256 colors; using octree quant; no dithering\n", __func__); return pixOctreeColorQuant(pixs, 240, ditherflag); } /*---------------------------------------------------------------------------* * Conversion from colormap to 1 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertCmapTo1() * * \param[in] pixs cmapped * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is an extreme color quantizer.  It decides which
 *          colors map to FG (black) and which to BG (white).
 *      (2) This uses two heuristics to make the decision:
 *          (a) colors similar to each other are likely to be in the same class
 *          (b) there is usually much less FG than BG.
 * 
*/ PIX * pixConvertCmapTo1(PIX *pixs) { l_int32 i, j, nc, w, h, imin, imax, factor, wpl1, wpld; l_int32 index, rmin, gmin, bmin, rmax, gmax, bmax, dmin, dmax; l_float32 minfract, ifract; l_int32 *lut; l_uint32 *line1, *lined, *data1, *datad; NUMA *na1, *na2; /* histograms */ PIX *pix1, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if ((cmap = pixGetColormap(pixs)) == NULL) return (PIX *)ERROR_PTR("no colormap", __func__, NULL); /* Select target colors for the two classes. Find the * colors with smallest and largest average component values. * The smallest is class 0 and the largest is class 1. */ pixcmapGetRangeValues(cmap, L_SELECT_AVERAGE, NULL, NULL, &imin, &imax); pixcmapGetColor(cmap, imin, &rmin, &gmin, &bmin); pixcmapGetColor(cmap, imax, &rmax, &gmax, &bmax); nc = pixcmapGetCount(cmap); /* Assign colors to the two classes. The histogram is * initialized to 0, so any colors not found when computing * the sampled histogram will get zero weight in minfract. */ if ((lut = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("calloc fail for lut", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5)); na1 = pixGetCmapHistogram(pixs, factor); na2 = numaNormalizeHistogram(na1, 1.0); minfract = 0.0; for (i = 0; i < nc; i++) { numaGetFValue(na2, i, &ifract); pixcmapGetDistanceToColor(cmap, i, rmin, gmin, bmin, &dmin); pixcmapGetDistanceToColor(cmap, i, rmax, gmax, bmax, &dmax); if (dmin < dmax) { /* closer to dark extreme value */ lut[i] = 1; /* black pixel in 1 bpp image */ minfract += ifract; } } numaDestroy(&na1); numaDestroy(&na2); /* Generate the output binarized image */ pix1 = pixConvertTo8(pixs, 1); pixd = pixCreate(w, h, 1); data1 = pixGetData(pix1); datad = pixGetData(pixd); wpl1 = pixGetWpl(pix1); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; lined = datad + i * wpld; for (j = 0; j < w; j++) { index = GET_DATA_BYTE(line1, j); if (lut[index] == 1) SET_DATA_BIT(lined, j); } } pixDestroy(&pix1); LEPT_FREE(lut); /* We expect minfract (the dark colors) to be less than 0.5. * If that is not the case, invert pixd. */ if (minfract > 0.5) { L_INFO("minfract = %5.3f; inverting\n", __func__, minfract); pixInvert(pixd, pixd); } return pixd; } /*---------------------------------------------------------------------------* * Quantization for relatively small number of colors in source * *---------------------------------------------------------------------------*/ /*! * \brief pixQuantizeIfFewColors() * * \param[in] pixs 8 bpp gray or 32 bpp rgb * \param[in] maxcolors max number of colors allowed to be returned * from pixColorsForQuantization(); * use 0 for default * \param[in] mingraycolors min number of gray levels that a grayscale * image is quantized to; use 0 for default * \param[in] octlevel for octcube quantization: 3 or 4 * \param[out] ppixd 2,4 or 8 bpp quantized; null if too many colors * \return 0 if OK, 1 on error or if pixs can't be quantized into * a small number of colors. * *
 * Notes:
 *      (1) This is a wrapper that tests if the pix can be quantized
 *          with good quality using a small number of colors.  If so,
 *          it does the quantization, defining a colormap and using
 *          pixels whose value is an index into the colormap.
 *      (2) If the image has color, it is quantized with 8 bpp pixels.
 *          If the image is essentially grayscale, the pixels are
 *          either 4 or 8 bpp, depending on the size of the required
 *          colormap.
 *      (3) %octlevel = 4 generates a larger colormap and larger
 *          compressed image than %octlevel = 3.  If image quality is
 *          important, you should use %octlevel = 4.
 *      (4) If the image already has a colormap, it returns a clone.
 * 
*/ l_ok pixQuantizeIfFewColors(PIX *pixs, l_int32 maxcolors, l_int32 mingraycolors, l_int32 octlevel, PIX **ppixd) { l_int32 d, ncolors, iscolor, graycolors; PIX *pixg, *pixd; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetColormap(pixs) != NULL) { *ppixd = pixClone(pixs); return 0; } if (maxcolors <= 0) maxcolors = 15; /* default */ if (maxcolors > 50) L_WARNING("maxcolors > 50; very large!\n", __func__); if (mingraycolors <= 0) mingraycolors = 10; /* default */ if (mingraycolors > 30) L_WARNING("mingraycolors > 30; very large!\n", __func__); if (octlevel != 3 && octlevel != 4) { L_WARNING("invalid octlevel; setting to 3\n", __func__); octlevel = 3; } /* Test the number of colors. For color, the octcube leaves * are at level 4. */ pixColorsForQuantization(pixs, 0, &ncolors, &iscolor, 0); if (ncolors > maxcolors) return ERROR_INT("too many colors", __func__, 1); /* Quantize! * (1) For color: * If octlevel == 4, try to quantize to an octree where * the octcube leaves are at level 4. If that fails, * back off to level 3. * If octlevel == 3, quantize to level 3 directly. * For level 3, the quality is usually good enough and there * is negligible chance of getting more than 256 colors. * (2) For grayscale, multiply ncolors by 1.5 for extra quality, * but use at least mingraycolors and not more than 256. */ if (iscolor) { pixd = pixFewColorsOctcubeQuant1(pixs, octlevel); if (!pixd) { /* backoff */ pixd = pixFewColorsOctcubeQuant1(pixs, octlevel - 1); if (octlevel == 3) /* shouldn't happen */ L_WARNING("quantized at level 2; low quality\n", __func__); } } else { /* image is really grayscale */ if (d == 32) pixg = pixConvertRGBToLuminance(pixs); else pixg = pixClone(pixs); graycolors = L_MAX(mingraycolors, (l_int32)(1.5 * ncolors)); graycolors = L_MIN(graycolors, 256); if (graycolors < 16) pixd = pixThresholdTo4bpp(pixg, graycolors, 1); else pixd = pixThresholdOn8bpp(pixg, graycolors, 1); pixDestroy(&pixg); } *ppixd = pixd; if (!pixd) return ERROR_INT("pixd not made", __func__, 1); pixCopyInputFormat(pixd, pixs); return 0; } /*---------------------------------------------------------------------------* * Conversion from 16 bpp to 8 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert16To8() * * \param[in] pixs 16 bpp * \param[in] type L_LS_BYTE, L_MS_BYTE, L_AUTO_BYTE, L_CLIP_TO_FF * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) With L_AUTO_BYTE, if the max pixel value is greater than 255,
 *          use the MSB; otherwise, use the LSB.
 *      (2) With L_CLIP_TO_FF, use min(pixel-value, 0xff) for each
 *          16-bit src pixel.
 * 
*/ PIX * pixConvert16To8(PIX *pixs, l_int32 type) { l_uint16 dword; l_int32 w, h, wpls, wpld, i, j, val, use_lsb; l_uint32 sword, first, second; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 16) return (PIX *)ERROR_PTR("pixs not 16 bpp", __func__, NULL); if (type != L_LS_BYTE && type != L_MS_BYTE && type != L_AUTO_BYTE && type != L_CLIP_TO_FF) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); if (type == L_AUTO_BYTE) { use_lsb = TRUE; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { val = GET_DATA_TWO_BYTES(lines, j); if (val > 255) { use_lsb = FALSE; break; } } if (!use_lsb) break; } type = (use_lsb) ? L_LS_BYTE : L_MS_BYTE; } /* Convert 2 pixels at a time */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (type == L_LS_BYTE) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dword = ((sword >> 8) & 0xff00) | (sword & 0xff); SET_DATA_TWO_BYTES(lined, j, dword); } } else if (type == L_MS_BYTE) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dword = ((sword >> 16) & 0xff00) | ((sword >> 8) & 0xff); SET_DATA_TWO_BYTES(lined, j, dword); } } else { /* type == L_CLIP_TO_FF */ for (j = 0; j < wpls; j++) { sword = *(lines + j); first = (sword >> 24) ? 255 : ((sword >> 16) & 0xff); second = ((sword >> 8) & 0xff) ? 255 : (sword & 0xff); dword = (first << 8) | second; SET_DATA_TWO_BYTES(lined, j, dword); } } } return pixd; } /*---------------------------------------------------------------------------* * Conversion from grayscale to false color *---------------------------------------------------------------------------*/ /*! * \brief pixConvertGrayToFalseColor() * * \param[in] pixs 8 or 16 bpp grayscale * \param[in] gamma (factor) 0.0 or 1.0 for default; > 1.0 for brighter; * 2.0 is quite nice * \return pixd 8 bpp with colormap, or NULL on error * *
 * Notes:
 *      (1) For 8 bpp input, this simply adds a colormap to the input image.
 *      (2) For 16 bpp input, it first converts to 8 bpp, using the MSB,
 *          and then adds the colormap.
 *      (3) The colormap is modeled after the Matlab "jet" configuration.
 * 
*/ PIX * pixConvertGrayToFalseColor(PIX *pixs, l_float32 gamma) { l_int32 d; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 16) return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", __func__, NULL); if (d == 16) { pixd = pixConvert16To8(pixs, L_MS_BYTE); } else { /* d == 8 */ if (pixGetColormap(pixs)) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixd = pixCopy(NULL, pixs); } if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapGrayToFalseColor(gamma); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*---------------------------------------------------------------------------* * Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixUnpackBinary() * * \param[in] pixs 1 bpp * \param[in] depth of destination: 2, 4, 8, 16 or 32 bpp * \param[in] invert 0: binary 0 --> grayscale 0 * binary 1 --> grayscale 0xff... * 1: binary 0 --> grayscale 0xff... * binary 1 --> grayscale 0 * \return pixd 2, 4, 8, 16 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) This function calls special cases of pixConvert1To*(),
 *          for 2, 4, 8, 16 and 32 bpp destinations.
 * 
*/ PIX * pixUnpackBinary(PIX *pixs, l_int32 depth, l_int32 invert) { PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 32) return (PIX *)ERROR_PTR("depth not 2, 4, 8, 16 or 32 bpp", __func__, NULL); if (depth == 2) { if (invert == 0) pixd = pixConvert1To2(NULL, pixs, 0, 3); else /* invert bits */ pixd = pixConvert1To2(NULL, pixs, 3, 0); } else if (depth == 4) { if (invert == 0) pixd = pixConvert1To4(NULL, pixs, 0, 15); else /* invert bits */ pixd = pixConvert1To4(NULL, pixs, 15, 0); } else if (depth == 8) { if (invert == 0) pixd = pixConvert1To8(NULL, pixs, 0, 255); else /* invert bits */ pixd = pixConvert1To8(NULL, pixs, 255, 0); } else if (depth == 16) { if (invert == 0) pixd = pixConvert1To16(NULL, pixs, 0, 0xffff); else /* invert bits */ pixd = pixConvert1To16(NULL, pixs, 0xffff, 0); } else { if (invert == 0) pixd = pixConvert1To32(NULL, pixs, 0, 0xffffffff); else /* invert bits */ pixd = pixConvert1To32(NULL, pixs, 0xffffffff, 0); } pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvert1To16() * * \param[in] pixd [optional] 16 bpp, can be null * \param[in] pixs 1 bpp * \param[in] val0 16 bit value to be used for 0s in pixs * \param[in] val1 16 bit value to be used for 1s in pixs * \return pixd 16 bpp * *
 * Notes:
 *      (1) If pixd is null, a new pix is made.
 *      (2) If pixd is not null, it must be of equal width and height
 *          as pixs.  It is always returned.
 * 
*/ PIX * pixConvert1To16(PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1) { l_int32 w, h, i, j, dibit, ndibits, wpls, wpld; l_uint16 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, pixd); if (pixGetDepth(pixd) != 16) return (PIX *)ERROR_PTR("pixd not 16 bpp", __func__, pixd); } else { if ((pixd = pixCreate(w, h, 16)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Use a table to convert 2 src bits at a time */ tab = (l_uint32 *)LEPT_CALLOC(4, sizeof(l_uint32)); val[0] = val0; val[1] = val1; for (index = 0; index < 4; index++) { tab[index] = (val[(index >> 1) & 1] << 16) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); ndibits = (w + 1) / 2; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < ndibits; j++) { dibit = GET_DATA_DIBIT(lines, j); lined[j] = tab[dibit]; } } LEPT_FREE(tab); return pixd; } /*! * \brief pixConvert1To32() * * \param[in] pixd [optional] 32 bpp, can be null * \param[in] pixs 1 bpp * \param[in] val0 32 bit value to be used for 0s in pixs * \param[in] val1 32 bit value to be used for 1s in pixs * \return pixd 32 bpp * *
 * Notes:
 *      (1) If pixd is null, a new pix is made.
 *      (2) If pixd is not null, it must be of equal width and height
 *          as pixs.  It is always returned.
 * 
*/ PIX * pixConvert1To32(PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1) { l_int32 w, h, i, j, wpls, wpld, bit; l_uint32 val[2]; l_uint32 *datas, *datad, *lines, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, pixd); if (pixGetDepth(pixd) != 32) return (PIX *)ERROR_PTR("pixd not 32 bpp", __func__, pixd); } else { if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); val[0] = val0; val[1] = val1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j * Notes: * (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0) *
*/ PIX * pixConvert1To2Cmap(PIX *pixs) { PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if ((pixd = pixConvert1To2(NULL, pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(2); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvert1To2() * * \param[in] pixd [optional] 2 bpp, can be null * \param[in] pixs 1 bpp * \param[in] val0 2 bit value to be used for 0s in pixs * \param[in] val1 2 bit value to be used for 1s in pixs * \return pixd 2 bpp * *
 * Notes:
 *      (1) If pixd is null, a new pix is made.
 *      (2) If pixd is not null, it must be of equal width and height
 *          as pixs.  It is always returned.
 *      (3) A simple unpacking might use val0 = 0 and val1 = 3.
 *      (4) If you want a colormapped pixd, use pixConvert1To2Cmap().
 * 
*/ PIX * pixConvert1To2(PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1) { l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint16 *tab; l_uint32 *datas, *datad, *lines, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, pixd); if (pixGetDepth(pixd) != 2) return (PIX *)ERROR_PTR("pixd not 2 bpp", __func__, pixd); } else { if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Use a table to convert 8 src bits to 16 dest bits */ tab = (l_uint16 *)LEPT_CALLOC(256, sizeof(l_uint16)); val[0] = val0; val[1] = val1; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 7) & 1] << 14) | (val[(index >> 6) & 1] << 12) | (val[(index >> 5) & 1] << 10) | (val[(index >> 4) & 1] << 8) | (val[(index >> 3) & 1] << 6) | (val[(index >> 2) & 1] << 4) | (val[(index >> 1) & 1] << 2) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byteval = GET_DATA_BYTE(lines, j); SET_DATA_TWO_BYTES(lined, j, tab[byteval]); } } LEPT_FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from 1 bpp to 4 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert1To4Cmap() * * \param[in] pixs 1 bpp * \return pixd 4 bpp, cmapped * *
 * Notes:
 *      (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0)
 * 
*/ PIX * pixConvert1To4Cmap(PIX *pixs) { PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if ((pixd = pixConvert1To4(NULL, pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvert1To4() * * \param[in] pixd [optional] 4 bpp, can be null * \param[in] pixs 1 bpp * \param[in] val0 4 bit value to be used for 0s in pixs * \param[in] val1 4 bit value to be used for 1s in pixs * \return pixd 4 bpp * *
 * Notes:
 *      (1) If pixd is null, a new pix is made.
 *      (2) If pixd is not null, it must be of equal width and height
 *          as pixs.  It is always returned.
 *      (3) A simple unpacking might use val0 = 0 and val1 = 15, or v.v.
 *      (4) If you want a colormapped pixd, use pixConvert1To4Cmap().
 * 
*/ PIX * pixConvert1To4(PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1) { l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, pixd); if (pixGetDepth(pixd) != 4) return (PIX *)ERROR_PTR("pixd not 4 bpp", __func__, pixd); } else { if ((pixd = pixCreate(w, h, 4)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Use a table to convert 8 src bits to 32 bit dest word */ tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); val[0] = val0; val[1] = val1; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 7) & 1] << 28) | (val[(index >> 6) & 1] << 24) | (val[(index >> 5) & 1] << 20) | (val[(index >> 4) & 1] << 16) | (val[(index >> 3) & 1] << 12) | (val[(index >> 2) & 1] << 8) | (val[(index >> 1) & 1] << 4) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byteval = GET_DATA_BYTE(lines, j); lined[j] = tab[byteval]; } } LEPT_FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from 1, 2 and 4 bpp to 8 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert1To8Cmap() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, cmapped * *
 * Notes:
 *      (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0)
 * 
*/ PIX * pixConvert1To8Cmap(PIX *pixs) { PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if ((pixd = pixConvert1To8(NULL, pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvert1To8() * * \param[in] pixd [optional] 8 bpp, can be null * \param[in] pixs 1 bpp * \param[in] val0 8 bit value to be used for 0s in pixs * \param[in] val1 8 bit value to be used for 1s in pixs * \return pixd 8 bpp * *
 * Notes:
 *      (1) If pixd is null, a new pix is made.
 *      (2) If pixd is not null, it must be of equal width and height
 *          as pixs.  It is always returned.
 *      (3) A simple unpacking might use val0 = 0 and val1 = 255, or v.v.
 *      (4) To have a colormap associated with the 8 bpp pixd,
 *          use pixConvert1To8Cmap().
 * 
*/ PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1) { l_int32 w, h, i, j, qbit, nqbits, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", __func__, pixd); if (pixGetDepth(pixd) != 8) return (PIX *)ERROR_PTR("pixd not 8 bpp", __func__, pixd); } else { if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixSetPadBits(pixs, 0); /* Use a table to convert 4 src bits at a time */ tab = (l_uint32 *)LEPT_CALLOC(16, sizeof(l_uint32)); val[0] = val0; val[1] = val1; for (index = 0; index < 16; index++) { tab[index] = ((l_uint32)val[(index >> 3) & 1] << 24) | (val[(index >> 2) & 1] << 16) | (val[(index >> 1) & 1] << 8) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nqbits = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nqbits; j++) { qbit = GET_DATA_QBIT(lines, j); lined[j] = tab[qbit]; } } LEPT_FREE(tab); return pixd; } /*! * \brief pixConvert2To8() * * \param[in] pixs 2 bpp * \param[in] val0 8 bit value to be used for 00 in pixs * \param[in] val1 8 bit value to be used for 01 in pixs * \param[in] val2 8 bit value to be used for 10 in pixs * \param[in] val3 8 bit value to be used for 11 in pixs * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      ~ A simple unpacking might use val0 = 0,
 *        val1 = 85 (0x55), val2 = 170 (0xaa), val3 = 255.
 *      ~ If cmapflag is TRUE:
 *          ~ The 8 bpp image is made with a colormap.
 *          ~ If pixs has a colormap, the input values are ignored and
 *            the 8 bpp image is made using the colormap
 *          ~ If pixs does not have a colormap, the input values are
 *            used to build the colormap.
 *      ~ If cmapflag is FALSE:
 *          ~ The 8 bpp image is made without a colormap.
 *          ~ If pixs has a colormap, the input values are ignored,
 *            the colormap is removed, and the values stored in the 8 bpp
 *            image are from the colormap.
 *          ~ If pixs does not have a colormap, the input values are
 *            used to populate the 8 bpp image.
 * 
*/ PIX * pixConvert2To8(PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag) { l_int32 w, h, i, j, nbytes, wpls, wpld, dibit, byte; l_uint32 val[4]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmaps, *cmapd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 2) return (PIX *)ERROR_PTR("pixs not 2 bpp", __func__, NULL); cmaps = pixGetColormap(pixs); if (cmaps && cmapflag == FALSE) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetPadBits(pixs, 0); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag == TRUE) { /* pixd will have a colormap */ if (cmaps) { /* use the existing colormap from pixs */ cmapd = pixcmapConvertTo8(cmaps); } else { /* make a colormap from the input values */ cmapd = pixcmapCreate(8); pixcmapAddColor(cmapd, val0, val0, val0); pixcmapAddColor(cmapd, val1, val1, val1); pixcmapAddColor(cmapd, val2, val2, val2); pixcmapAddColor(cmapd, val3, val3, val3); } pixSetColormap(pixd, cmapd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { dibit = GET_DATA_DIBIT(lines, j); SET_DATA_BYTE(lined, j, dibit); } } return pixd; } /* Last case: no colormap in either pixs or pixd. * Use input values and build a table to convert 1 src byte * (4 src pixels) at a time */ tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); val[0] = val0; val[1] = val1; val[2] = val2; val[3] = val3; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 6) & 3] << 24) | (val[(index >> 4) & 3] << 16) | (val[(index >> 2) & 3] << 8) | val[index & 3]; } nbytes = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byte = GET_DATA_BYTE(lines, j); lined[j] = tab[byte]; } } LEPT_FREE(tab); return pixd; } /*! * \brief pixConvert4To8() * * \param[in] pixs 4 bpp * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      ~ If cmapflag is TRUE:
 *          ~ pixd is made with a colormap.
 *          ~ If pixs has a colormap, it is copied and the colormap
 *            index values are placed in pixd.
 *          ~ If pixs does not have a colormap, a colormap with linear
 *            trc is built and the pixel values in pixs are placed in
 *            pixd as colormap index values.
 *      ~ If cmapflag is FALSE:
 *          ~ pixd is made without a colormap.
 *          ~ If pixs has a colormap, it is removed and the values stored
 *            in pixd are from the colormap (converted to gray).
 *          ~ If pixs does not have a colormap, the pixel values in pixs
 *            are used, with shift replication, to populate pixd.
 * 
*/ PIX * pixConvert4To8(PIX *pixs, l_int32 cmapflag) { l_int32 w, h, i, j, wpls, wpld, byte, qbit; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmaps, *cmapd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 4) return (PIX *)ERROR_PTR("pixs not 4 bpp", __func__, NULL); cmaps = pixGetColormap(pixs); if (cmaps && cmapflag == FALSE) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag == TRUE) { /* pixd will have a colormap */ if (cmaps) { /* use the existing colormap from pixs */ cmapd = pixcmapConvertTo8(cmaps); } else { /* make a colormap with a linear trc */ cmapd = pixcmapCreate(8); for (i = 0; i < 16; i++) pixcmapAddColor(cmapd, 17 * i, 17 * i, 17 * i); } pixSetColormap(pixd, cmapd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { qbit = GET_DATA_QBIT(lines, j); SET_DATA_BYTE(lined, j, qbit); } } return pixd; } /* Last case: no colormap in either pixs or pixd. * Replicate the qbit value into 8 bits. */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { qbit = GET_DATA_QBIT(lines, j); byte = (qbit << 4) | qbit; SET_DATA_BYTE(lined, j, byte); } } return pixd; } /*---------------------------------------------------------------------------* * Unpacking conversion from 8 bpp to 16 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert8To16() * * \param[in] pixs 8 bpp; colormap removed to gray * \param[in] leftshift number of bits: 0 is no shift; * 8 replicates in MSB and LSB of dest * \return pixd 16 bpp, or NULL on error * *
 * Notes:
 *      (1) For left shift of 8, the 8 bit value is replicated in both
 *          the MSB and the LSB of the pixels in pixd.  That way, we get
 *          proportional mapping, with a correct map from 8 bpp white
 *          (0xff) to 16 bpp white (0xffff).
 * 
*/ PIX * pixConvert8To16(PIX *pixs, l_int32 leftshift) { l_int32 i, j, w, h, d, wplt, wpld, val; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (leftshift < 0 || leftshift > 8) return (PIX *)ERROR_PTR("leftshift not in [0 ... 8]", __func__, NULL); if (pixGetColormap(pixs) != NULL) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt = pixClone(pixs); pixd = pixCreate(w, h, 16); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); if (leftshift == 8) val = val | (val << leftshift); else val <<= leftshift; SET_DATA_TWO_BYTES(lined, j, val); } } pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 2 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo2() * * \param[in] pixs 1, 2, 4, 8, 24, 32 bpp; colormap OK but will be removed * \return pixd 2 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, with simple default values
 *          used in pixConvertTo8() if unpacking is necessary.
 *      (2) Any existing colormap is removed; the result is always gray.
 *      (3) If the input image has 2 bpp and no colormap, the operation is
 *          lossless and a copy is returned.
 * 
*/ PIX * pixConvertTo2(PIX *pixs) { l_int32 d; PIX *pix1, *pix2, *pix3, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 24 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,24,32}", __func__, NULL); if (pixGetColormap(pixs) != NULL) { pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); d = pixGetDepth(pix1); } else { pix1 = pixCopy(NULL, pixs); } if (d == 24 || d == 32) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixDestroy(&pix1); if (d == 1) { pixd = pixConvert1To2(NULL, pix2, 3, 0); } else if (d == 2) { pixd = pixClone(pix2); } else if (d == 4) { pix3 = pixConvert4To8(pix2, FALSE); /* unpack to 8 */ pixd = pixConvert8To2(pix3); pixDestroy(&pix3); } else { /* d == 8 */ pixd = pixConvert8To2(pix2); } pixDestroy(&pix2); return pixd; } /*! * \brief pixConvert8To2() * * \param[in] pix 8 bpp; colormap OK * \return pixd 2 bpp, or NULL on error * *
 * Notes:
 *      (1) Any existing colormap is removed to gray.
 * 
*/ PIX * pixConvert8To2(PIX *pix) { l_int32 i, j, w, h, wpls, wpld; l_uint32 word; l_uint32 *datas, *lines, *datad, *lined; PIX *pixs, *pixd; if (!pix || pixGetDepth(pix) != 8) return (PIX *)ERROR_PTR("pix undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_TO_GRAYSCALE); else pixs = pixClone(pix); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(w, h, 2); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < wpls; j++) { /* march through 4 pixels at a time */ word = lines[j] & 0xc0c0c0c0; /* top 2 bits of each byte */ word = (word >> 24) | ((word & 0xff0000) >> 18) | ((word & 0xff00) >> 12) | ((word & 0xff) >> 6); SET_DATA_BYTE(lined, j, word); /* only LS byte is filled */ } } pixDestroy(&pixs); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 4 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo4() * * \param[in] pixs 1, 2, 4, 8, 24, 32 bpp; colormap OK but will be removed * \return pixd 4 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, with simple default values
 *          used in pixConvertTo8() if unpacking is necessary.
 *      (2) Any existing colormap is removed; the result is always gray.
 *      (3) If the input image has 4 bpp and no colormap, the operation is
 *          lossless and a copy is returned.
 * 
*/ PIX * pixConvertTo4(PIX *pixs) { l_int32 d; PIX *pix1, *pix2, *pix3, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 24 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,24,32}", __func__, NULL); if (pixGetColormap(pixs) != NULL) { pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); d = pixGetDepth(pix1); } else { pix1 = pixCopy(NULL, pixs); } if (d == 24 || d == 32) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixDestroy(&pix1); if (d == 1) { pixd = pixConvert1To4(NULL, pix2, 15, 0); } else if (d == 2) { pix3 = pixConvert2To8(pix2, 0, 0x55, 0xaa, 0xff, FALSE); pixd = pixConvert8To4(pix3); pixDestroy(&pix3); } else if (d == 4) { pixd = pixClone(pix2); } else { /* d == 8 */ pixd = pixConvert8To4(pix2); } pixDestroy(&pix2); return pixd; } /*! * \brief pixConvert8To4() * * \param[in] pix 8 bpp; colormap OK * \return pixd 4 bpp, or NULL on error * *
 * Notes:
 *      (1) Any existing colormap is removed to gray.
 * 
*/ PIX * pixConvert8To4(PIX *pix) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *lines, *datad, *lined; PIX *pixs, *pixd; if (!pix || pixGetDepth(pix) != 8) return (PIX *)ERROR_PTR("pix undefined or not 8 bpp", __func__, NULL); if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_TO_GRAYSCALE); else pixs = pixClone(pix); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(w, h, 4); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); val = val >> 4; /* take top 4 bits */ SET_DATA_QBIT(lined, j, val); } } pixDestroy(&pixs); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 1 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo1Adaptive() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, that uses default values for
 *          adaptive thresholding, if necessary.  Otherwise, it is the same as
 *          pixConvertTo1(), which uses a global threshold for binarization.
 *      (2) Other high-level adaptive thresholding functions are
 *          pixAdaptThresholdToBinary() and pixCleanImage().
 * 
*/ PIX * pixConvertTo1Adaptive(PIX *pixs) { l_int32 d, color0, color1, rval, gval, bval; PIX *pix1, *pix2, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,24,32}", __func__, NULL); cmap = pixGetColormap(pixs); if (d == 1) { if (!cmap) { return pixCopy(NULL, pixs); } else { /* strip the colormap off, and invert if reasonable for standard binary photometry. */ pixcmapGetColor(cmap, 0, &rval, &gval, &bval); color0 = rval + gval + bval; pixcmapGetColor(cmap, 1, &rval, &gval, &bval); color1 = rval + gval + bval; pixd = pixCopy(NULL, pixs); pixDestroyColormap(pixd); if (color1 > color0) pixInvert(pixd, pixd); return pixd; } } /* For all other depths, use 8 bpp as an intermediary */ pix1 = pixConvertTo8(pixs, FALSE); pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); pixd = pixThresholdToBinary(pix2, 180); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * \brief pixConvertTo1() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \param[in] threshold for final binarization, relative to 8 bpp * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, with simple default values
 *          used in pixConvertTo8() if unpacking is necessary.
 *      (2) Any existing colormap is removed.
 *      (3) If the input image has 1 bpp and no colormap, the operation is
 *          lossless and a copy is returned.
 * 
*/ PIX * pixConvertTo1(PIX *pixs, l_int32 threshold) { l_int32 d, color0, color1, rval, gval, bval; PIX *pixg, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,24,32}", __func__, NULL); cmap = pixGetColormap(pixs); if (d == 1) { if (!cmap) { return pixCopy(NULL, pixs); } else { /* strip the colormap off, and invert if reasonable for standard binary photometry. */ pixcmapGetColor(cmap, 0, &rval, &gval, &bval); color0 = rval + gval + bval; pixcmapGetColor(cmap, 1, &rval, &gval, &bval); color1 = rval + gval + bval; pixd = pixCopy(NULL, pixs); pixDestroyColormap(pixd); if (color1 > color0) pixInvert(pixd, pixd); return pixd; } } /* For all other depths, use 8 bpp as an intermediary */ pixg = pixConvertTo8(pixs, FALSE); pixd = pixThresholdToBinary(pixg, threshold); pixDestroy(&pixg); return pixd; } /*! * \brief pixConvertTo1BySampling() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \param[in] factor subsampling factor; integer >= 1 * \param[in] threshold for final binarization, relative to 8 bpp * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a quick and dirty, top-level converter.
 *      (2) See pixConvertTo1() for default values.
 * 
*/ PIX * pixConvertTo1BySampling(PIX *pixs, l_int32 factor, l_int32 threshold) { l_float32 scalefactor; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); scalefactor = 1.f / (l_float32)factor; pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo1(pixt, threshold); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 8 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo8() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, with simple default values
 *          for unpacking.
 *      (2) The result, pixd, is made with a colormap if specified.
 *          It is always a new image -- never a clone.  For example,
 *          if d == 8, and cmapflag matches the existence of a cmap
 *          in pixs, the operation is lossless and it returns a copy.
 *      (3) The default values used are:
 *          ~ 1 bpp: val0 = 255, val1 = 0
 *          ~ 2 bpp: 4 bpp:  even increments over dynamic range
 *          ~ 8 bpp: lossless if cmap matches cmapflag
 *          ~ 16 bpp: use most significant byte
 *      (4) If 24 bpp or 32 bpp RGB, this is converted to gray.
 *          For color quantization, you must specify the type explicitly,
 *          using the color quantization code.
 * 
*/ PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag) { l_int32 d; PIX *pix1, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,24,32}", __func__, NULL); if (d == 1) { if (cmapflag) return pixConvert1To8Cmap(pixs); else return pixConvert1To8(NULL, pixs, 255, 0); } else if (d == 2) { return pixConvert2To8(pixs, 0, 85, 170, 255, cmapflag); } else if (d == 4) { return pixConvert4To8(pixs, cmapflag); } else if (d == 8) { cmap = pixGetColormap(pixs); if ((cmap && cmapflag) || (!cmap && !cmapflag)) { return pixCopy(NULL, pixs); } else if (cmap) { /* !cmapflag */ return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); } else { /* !cmap && cmapflag; add colormap to pixd */ pixd = pixCopy(NULL, pixs); pixAddGrayColormap8(pixd); return pixd; } } else if (d == 16) { pixd = pixConvert16To8(pixs, L_MS_BYTE); if (cmapflag) pixAddGrayColormap8(pixd); return pixd; } else if (d == 24) { pix1 = pixConvert24To32(pixs); pixd = pixConvertRGBToLuminance(pix1); if (cmapflag) pixAddGrayColormap8(pixd); pixDestroy(&pix1); return pixd; } else { /* d == 32 */ pixd = pixConvertRGBToLuminance(pixs); if (cmapflag) pixAddGrayColormap8(pixd); return pixd; } } /*! * \brief pixConvertTo8BySampling() * * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] factor submsampling factor; integer >= 1 * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a fast, quick/dirty, top-level converter.
 *      (2) See pixConvertTo8() for default values.
 * 
*/ PIX * pixConvertTo8BySampling(PIX *pixs, l_int32 factor, l_int32 cmapflag) { l_float32 scalefactor; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); scalefactor = 1.f / (l_float32)factor; pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo8(pixt, cmapflag); pixDestroy(&pixt); return pixd; } /*! * \brief pixConvertTo8Colormap() * * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] dither 1 to dither if necessary; 0 otherwise * \return pixd 8 bpp, cmapped, or NULL on error * *
 * Notes:
 *      (1) This is a top-level function, with simple default values
 *          for unpacking.
 *      (2) The result, pixd, is always made with a colormap.
 *      (3) If d == 8, the operation is lossless and it returns a copy.
 *      (4) The default values used for increasing depth are:
 *          ~ 1 bpp: val0 = 255, val1 = 0
 *          ~ 2 bpp: 4 bpp:  even increments over dynamic range
 *      (5) For 16 bpp, use the most significant byte.
 *      (6) For 32 bpp RGB, use octcube quantization with optional dithering.
 * 
*/ PIX * pixConvertTo8Colormap(PIX *pixs, l_int32 dither) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", __func__, NULL); if (d != 32) return pixConvertTo8(pixs, 1); return pixConvertRGBToColormap(pixs, dither); } /*---------------------------------------------------------------------------* * Top-level conversion to 16 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo16() * * \param[in] pixs 1, 8 bpp * \return pixd 16 bpp, or NULL on error * * Usage: Top-level function, with simple default values for unpacking. * 1 bpp: val0 = 0xffff, val1 = 0 * 8 bpp: replicates the 8 bit value in both the MSB and LSB * of the 16 bit pixel. */ PIX * pixConvertTo16(PIX *pixs) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d == 1) return pixConvert1To16(NULL, pixs, 0xffff, 0); else if (d == 8) return pixConvert8To16(pixs, 8); else return (PIX *)ERROR_PTR("src depth not 1 or 8 bpp", __func__, NULL); } /*---------------------------------------------------------------------------* * Top-level conversion to 32 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo32() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \return pixd 32 bpp, or NULL on error * * Usage: Top-level function, with simple default values for unpacking. * 1 bpp: val0 = 255, val1 = 0 * and then replication into R, G and B components * 2 bpp: if colormapped, use the colormap values; otherwise, * use val0 = 0, val1 = 0x55, val2 = 0xaa, val3 = 255 * and replicate gray into R, G and B components * 4 bpp: if colormapped, use the colormap values; otherwise, * replicate 2 nybs into a byte, and then into R,G,B components * 8 bpp: if colormapped, use the colormap values; otherwise, * replicate gray values into R, G and B components * 16 bpp: replicate MSB into R, G and B components * 24 bpp: unpack the pixels, maintaining word alignment on each scanline * 32 bpp: makes a copy * *
 * Notes:
 *      (1) Never returns a clone of pixs.
 * 
*/ PIX * pixConvertTo32(PIX *pixs) { l_int32 d; PIX *pix1, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d == 1) { return pixConvert1To32(NULL, pixs, 0xffffffff, 0); } else if (d == 2) { pix1 = pixConvert2To8(pixs, 0, 85, 170, 255, TRUE); pixd = pixConvert8To32(pix1); pixDestroy(&pix1); return pixd; } else if (d == 4) { pix1 = pixConvert4To8(pixs, TRUE); pixd = pixConvert8To32(pix1); pixDestroy(&pix1); return pixd; } else if (d == 8) { return pixConvert8To32(pixs); } else if (d == 16) { pix1 = pixConvert16To8(pixs, L_MS_BYTE); pixd = pixConvert8To32(pix1); pixDestroy(&pix1); return pixd; } else if (d == 24) { return pixConvert24To32(pixs); } else if (d == 32) { return pixCopy(NULL, pixs); } else { return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8, 16, 32 bpp", __func__, NULL); } } /*! * \brief pixConvertTo32BySampling() * * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp * \param[in] factor submsampling factor; integer >= 1 * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a fast, quick/dirty, top-level converter.
 *      (2) See pixConvertTo32() for default values.
 * 
*/ PIX * pixConvertTo32BySampling(PIX *pixs, l_int32 factor) { l_float32 scalefactor; PIX *pix1, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); scalefactor = 1.f / (l_float32)factor; pix1 = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo32(pix1); pixDestroy(&pix1); return pixd; } /*! * \brief pixConvert8To32() * * \param[in] pixs 8 bpp * \return 32 bpp rgb pix, or NULL on error * *
 * Notes:
 *      (1) If there is no colormap, replicates the gray value
 *          into the 3 MSB of the dest pixel.
 * 
*/ PIX * pixConvert8To32(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; l_uint32 *tab; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (pixGetColormap(pixs)) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Replication table gray --> rgb */ tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); for (i = 0; i < 256; i++) tab[i] = ((l_uint32)i << 24) | (i << 16) | (i << 8); /* Replicate 1 --> 4 bytes (alpha byte not set) */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); lined[j] = tab[val]; } } LEPT_FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 8 or 32 bpp, without colormap * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertTo8Or32() * * \param[in] pixs 1, 2, 4, 8, 16, with or without colormap; * or 32 bpp rgb * \param[in] copyflag L_CLONE or L_COPY * \param[in] warnflag 1 to issue warning if colormap is removed; else 0 * \return pixd 8 bpp grayscale or 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) If there is a colormap, the colormap is removed to 8 or 32 bpp,
 *          depending on whether the colors in the colormap are all gray.
 *      (2) If the input is either rgb or 8 bpp without a colormap,
 *          this returns either a clone or a copy, depending on %copyflag.
 *      (3) Otherwise, the pix is converted to 8 bpp grayscale.
 *          In all cases, pixd does not have a colormap.
 * 
*/ PIX * pixConvertTo8Or32(PIX *pixs, l_int32 copyflag, l_int32 warnflag) { l_int32 d; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (copyflag != L_CLONE && copyflag != L_COPY) return (PIX *)ERROR_PTR("invalid copyflag", __func__, NULL); d = pixGetDepth(pixs); if (pixGetColormap(pixs)) { if (warnflag) L_WARNING("pix has colormap; removing\n", __func__); pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); } else if (d == 8 || d == 32) { if (copyflag == L_CLONE) pixd = pixClone(pixs); else /* copyflag == L_COPY */ pixd = pixCopy(NULL, pixs); } else { pixd = pixConvertTo8(pixs, 0); } /* Sanity check on result */ d = pixGetDepth(pixd); if (d != 8 && d != 32) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", __func__, NULL); } return pixd; } /*---------------------------------------------------------------------------* * Conversion between 24 bpp and 32 bpp rgb * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert24To32() * * \param[in] pixs 24 bpp rgb * \return pixd 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) 24 bpp rgb pix are not supported in leptonica, except for a small
 *          number of formatted write operations.  The data is a byte array,
 *          with pixels in order r,g,b, and padded to 32 bit boundaries
 *          in each line.
 *      (2) Because 24 bpp rgb pix are conveniently generated by programs
 *          such as xpdf (which has SplashBitmaps that store the raster
 *          data in consecutive 24-bit rgb pixels), it is useful to provide
 *          24 bpp pix that simply incorporate that data.  The only things
 *          we can do with these are:
 *            (a) write them to file in png, jpeg, tiff and pnm
 *            (b) interconvert between 24 and 32 bpp in memory (for testing).
 * 
*/ PIX * pixConvert24To32(PIX *pixs) { l_uint8 *lines; l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; l_uint32 pixel; l_uint32 *datas, *datad, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 24) return (PIX *)ERROR_PTR("pixs not 24 bpp", __func__, NULL); pixd = pixCreate(w, h, 32); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = (l_uint8 *)(datas + i * wpls); lined = datad + i * wpld; for (j = 0; j < w; j++) { rval = *lines++; gval = *lines++; bval = *lines++; composeRGBPixel(rval, gval, bval, &pixel); lined[j] = pixel; } } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixConvert32To24() * * \param[in] pixs 32 bpp rgb * \return pixd 24 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) See pixconvert24To32().
 * 
*/ PIX * pixConvert32To24(PIX *pixs) { l_uint8 *rgbdata8; l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; l_uint32 *datas, *lines, *rgbdata; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(w, h, 24); rgbdata = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; rgbdata8 = (l_uint8 *)(rgbdata + i * wpld); for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); *rgbdata8++ = rval; *rgbdata8++ = gval; *rgbdata8++ = bval; } } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*---------------------------------------------------------------------------* * Conversion between 32 bpp (1 spp) and 16 or 8 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixConvert32To16() * * \param[in] pixs 32 bpp, single component * \param[in] type L_LS_TWO_BYTES, L_MS_TWO_BYTES, L_CLIP_TO_FFFF * \return pixd 16 bpp , or NULL on error * *
 * Notes:
 *      (1) The data in pixs is typically used for labelling.
 *          It is an array of l_uint32 values, not rgb or rgba.
 * 
*/ PIX * pixConvert32To16(PIX *pixs, l_int32 type) { l_uint16 dword; l_int32 w, h, i, j, wpls, wpld; l_uint32 sword; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (type != L_LS_TWO_BYTES && type != L_MS_TWO_BYTES && type != L_CLIP_TO_FFFF) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 16)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (type == L_LS_TWO_BYTES) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dword = sword & 0xffff; SET_DATA_TWO_BYTES(lined, j, dword); } } else if (type == L_MS_TWO_BYTES) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dword = sword >> 16; SET_DATA_TWO_BYTES(lined, j, dword); } } else { /* type == L_CLIP_TO_FFFF */ for (j = 0; j < wpls; j++) { sword = *(lines + j); dword = (sword >> 16) ? 0xffff : (sword & 0xffff); SET_DATA_TWO_BYTES(lined, j, dword); } } } return pixd; } /*! * \brief pixConvert32To8() * * \param[in] pixs 32 bpp, single component * \param[in] type16 L_LS_TWO_BYTES, L_MS_TWO_BYTES, L_CLIP_TO_FFFF * \param[in] type8 L_LS_BYTE, L_MS_BYTE, L_CLIP_TO_FF * \return pixd 8 bpp, or NULL on error */ PIX * pixConvert32To8(PIX *pixs, l_int32 type16, l_int32 type8) { PIX *pix1, *pixd; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); if (type16 != L_LS_TWO_BYTES && type16 != L_MS_TWO_BYTES && type16 != L_CLIP_TO_FFFF) return (PIX *)ERROR_PTR("invalid type16", __func__, NULL); if (type8 != L_LS_BYTE && type8 != L_MS_BYTE && type8 != L_CLIP_TO_FF) return (PIX *)ERROR_PTR("invalid type8", __func__, NULL); pix1 = pixConvert32To16(pixs, type16); pixd = pixConvert16To8(pix1, type8); pixDestroy(&pix1); return pixd; } /*---------------------------------------------------------------------------* * Removal of alpha component by blending with white background * *---------------------------------------------------------------------------*/ /*! * \brief pixRemoveAlpha() * * \param[in] pixs any depth * \return pixd if 32 bpp rgba, pixs blended over a white background; * a clone of pixs otherwise, and NULL on error * *
 * Notes:
 *      (1) This is a wrapper on pixAlphaBlendUniform()
 * 
*/ PIX * pixRemoveAlpha(PIX *pixs) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) return pixAlphaBlendUniform(pixs, 0xffffff00); else return pixClone(pixs); } /*---------------------------------------------------------------------------* * Addition of alpha component to 1 bpp * *---------------------------------------------------------------------------*/ /*! * \brief pixAddAlphaTo1bpp() * * \param[in] pixd [optional] 1 bpp, can be null or equal to pixs * \param[in] pixs 1 bpp * \return pixd 1 bpp with colormap and non-opaque alpha, * or NULL on error * *
 * Notes:
 *      (1) We don't use 1 bpp colormapped images with alpha in leptonica,
 *          but we support generating them (here), writing to png, and reading
 *          the png.  On reading, they are converted to 32 bpp RGBA.
 *      (2) The background (0) pixels in pixs become fully transparent, and the
 *          foreground (1) pixels are fully opaque.  Thus, pixd is a 1 bpp
 *          representation of a stencil, that can be used to paint over pixels
 *          of a backing image that are masked by the foreground in pixs.
 * 
*/ PIX * pixAddAlphaTo1bpp(PIX *pixd, PIX *pixs) { PIXCMAP *cmap; if (!pixs || (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd defined but != pixs", __func__, NULL); pixd = pixCopy(pixd, pixs); cmap = pixcmapCreate(1); pixSetColormap(pixd, cmap); pixcmapAddRGBA(cmap, 255, 255, 255, 0); /* 0 ==> white + transparent */ pixcmapAddRGBA(cmap, 0, 0, 0, 255); /* 1 ==> black + opaque */ return pixd; } /*---------------------------------------------------------------------------* * Lossless depth conversion (unpacking) * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertLossless() * * \param[in] pixs 1, 2, 4, 8 bpp, not cmapped * \param[in] d destination depth: 2, 4 or 8 * \return pixd 2, 4 or 8 bpp, or NULL on error * *
 * Notes:
 *      (1) This is a lossless unpacking (depth-increasing)
 *          conversion.  If ds is the depth of pixs, then
 *           ~ if d < ds, returns NULL
 *           ~ if d == ds, returns a copy
 *           ~ if d > ds, does the unpacking conversion
 *      (2) If pixs has a colormap, this is an error.
 * 
*/ PIX * pixConvertLossless(PIX *pixs, l_int32 d) { l_int32 w, h, ds, wpls, wpld, i, j, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("invalid dest depth", __func__, NULL); pixGetDimensions(pixs, &w, &h, &ds); if (d < ds) return (PIX *)ERROR_PTR("depth > d", __func__, NULL); else if (d == ds) return pixCopy(NULL, pixs); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Unpack the bits */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; switch (ds) { case 1: for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (d == 8) SET_DATA_BYTE(lined, j, val); else if (d == 4) SET_DATA_QBIT(lined, j, val); else /* d == 2 */ SET_DATA_DIBIT(lined, j, val); } break; case 2: for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(lines, j); if (d == 8) SET_DATA_BYTE(lined, j, val); else /* d == 4 */ SET_DATA_QBIT(lined, j, val); } break; case 4: for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(lines, j); SET_DATA_BYTE(lined, j, val); } break; } } return pixd; } /*---------------------------------------------------------------------------* * Conversion for printing in PostScript * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertForPSWrap() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp * \return pixd 1, 8, or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) For wrapping in PostScript, we convert pixs to
 *          1 bpp, 8 bpp (gray) and 32 bpp (RGB color).
 *      (2) Colormaps are removed.  For pixs with colormaps, the
 *          images are converted to either 8 bpp gray or 32 bpp
 *          RGB, depending on whether the colormap has color content.
 *      (3) Images without colormaps, that are not 1 bpp or 32 bpp,
 *          are converted to 8 bpp gray.
 * 
*/ PIX * pixConvertForPSWrap(PIX *pixs) { l_int32 d; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); switch (d) { case 1: case 32: pixd = pixClone(pixs); break; case 2: if (cmap) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixConvert2To8(pixs, 0, 0x55, 0xaa, 0xff, FALSE); break; case 4: if (cmap) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixConvert4To8(pixs, FALSE); break; case 8: pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); break; case 16: pixd = pixConvert16To8(pixs, L_MS_BYTE); break; default: lept_stderr("depth not in {1, 2, 4, 8, 16, 32}"); return NULL; } return pixd; } /*---------------------------------------------------------------------------* * Scaling conversion to subpixel RGB * *---------------------------------------------------------------------------*/ /*! * \brief pixConvertToSubpixelRGB() * * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped * \param[in] scalex, scaley anisotropic scaling permitted between * source and destination * \param[in] order of subpixel rgb color components in * composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) If pixs has a colormap, it is removed based on its contents
 *          to either 8 bpp gray or rgb.
 *      (2) For horizontal subpixel splitting, the input image
 *          is rescaled by %scaley vertically and by 3.0 times
 *          %scalex horizontally.  Then each horizontal triplet
 *          of pixels is mapped back to a single rgb pixel, with the
 *          r, g and b values being assigned based on the pixel triplet.
 *          For gray triplets, the r, g, and b values are set equal to
 *          the three gray values.  For color triplets, the r, g and b
 *          values are set equal to the components from the appropriate
 *          subpixel.  Vertical subpixel splitting is handled similarly.
 *      (3) See pixConvertGrayToSubpixelRGB() and
 *          pixConvertColorToSubpixelRGB() for further details.
 * 
*/ PIX * pixConvertToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 d; PIX *pix1, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pix not 8 or 32 bpp and not cmapped", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", __func__, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", __func__, NULL); if ((pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); d = pixGetDepth(pix1); pixd = NULL; if (d == 8) pixd = pixConvertGrayToSubpixelRGB(pix1, scalex, scaley, order); else if (d == 32) pixd = pixConvertColorToSubpixelRGB(pix1, scalex, scaley, order); else L_ERROR("invalid depth %d\n", __func__, d); pixDestroy(&pix1); return pixd; } /*! * \brief pixConvertGrayToSubpixelRGB() * * \param[in] pixs 8 bpp or colormapped * \param[in] scalex, scaley * \param[in] order of subpixel rgb color components in * composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) If pixs has a colormap, it is removed to 8 bpp.
 *      (2) For horizontal subpixel splitting, the input gray image
 *          is rescaled by %scaley vertically and by 3.0 times
 *          %scalex horizontally.  Then each horizontal triplet
 *          of pixels is mapped back to a single rgb pixel, with the
 *          r, g and b values being assigned from the triplet of gray values.
 *          Similar operations are used for vertical subpixel splitting.
 *      (3) This is a form of subpixel rendering that tends to give the
 *          resulting text a sharper and somewhat chromatic display.
 *          For horizontal subpixel splitting, the observable difference
 *          between %order=L_SUBPIXEL_ORDER_RGB and
 *          %order=L_SUBPIXEL_ORDER_BGR is reduced by optical diffusers
 *          in the display that make the pixel color appear to emerge
 *          from the entire pixel.
 * 
*/ PIX * pixConvertGrayToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; l_uint32 *datat, *datad, *linet, *lined; PIX *pix1, *pix2, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && !cmap) return (PIX *)ERROR_PTR("pix not 8 bpp & not cmapped", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", __func__, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", __func__, NULL); direction = (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) ? L_HORIZ : L_VERT; pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); if (direction == L_HORIZ) pix2 = pixScale(pix1, 3.0f * scalex, scaley); else /* L_VERT */ pix2 = pixScale(pix1, scalex, 3.0f * scaley); pixGetDimensions(pix2, &w, &h, NULL); wd = (direction == L_HORIZ) ? w / 3 : w; hd = (direction == L_VERT) ? h / 3 : h; pixd = pixCreate(wd, hd, 32); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pix2); wplt = pixGetWpl(pix2); if (direction == L_HORIZ) { for (i = 0; i < hd; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { rval = GET_DATA_BYTE(linet, 3 * j); gval = GET_DATA_BYTE(linet, 3 * j + 1); bval = GET_DATA_BYTE(linet, 3 * j + 2); if (order == L_SUBPIXEL_ORDER_RGB) composeRGBPixel(rval, gval, bval, &lined[j]); else /* order BGR */ composeRGBPixel(bval, gval, rval, &lined[j]); } } } else { /* L_VERT */ for (i = 0; i < hd; i++) { linet = datat + 3 * i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { rval = GET_DATA_BYTE(linet, j); gval = GET_DATA_BYTE(linet + wplt, j); bval = GET_DATA_BYTE(linet + 2 * wplt, j); if (order == L_SUBPIXEL_ORDER_VRGB) composeRGBPixel(rval, gval, bval, &lined[j]); else /* order VBGR */ composeRGBPixel(bval, gval, rval, &lined[j]); } } } pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * \brief pixConvertColorToSubpixelRGB() * * \param[in] pixs 32 bpp or colormapped * \param[in] scalex, scaley * \param[in] order of subpixel rgb color components in * composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) If pixs has a colormap, it is removed to 32 bpp rgb.
 *          If the colormap has no color, pixConvertGrayToSubpixelRGB()
 *          should be called instead, because it will give the same result
 *          more efficiently.  The function pixConvertToSubpixelRGB()
 *          will do the best thing for all cases.
 *      (2) For horizontal subpixel splitting, the input rgb image
 *          is rescaled by %scaley vertically and by 3.0 times
 *          %scalex horizontally.  Then for each horizontal triplet
 *          of pixels, the r component of the final pixel is selected
 *          from the r component of the appropriate pixel in the triplet,
 *          and likewise for g and b.  Vertical subpixel splitting is
 *          handled similarly.
 * 
*/ PIX * pixConvertColorToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; l_uint32 *datat, *datad, *linet, *lined; PIX *pix1, *pix2, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 32 && !cmap) return (PIX *)ERROR_PTR("pix not 32 bpp & not cmapped", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", __func__, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", __func__, NULL); direction = (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) ? L_HORIZ : L_VERT; pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); if (direction == L_HORIZ) pix2 = pixScale(pix1, 3.0f * scalex, scaley); else /* L_VERT */ pix2 = pixScale(pix1, scalex, 3.0f * scaley); pixGetDimensions(pix2, &w, &h, NULL); wd = (direction == L_HORIZ) ? w / 3 : w; hd = (direction == L_VERT) ? h / 3 : h; pixd = pixCreate(wd, hd, 32); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pix2); wplt = pixGetWpl(pix2); if (direction == L_HORIZ) { for (i = 0; i < hd; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (order == L_SUBPIXEL_ORDER_RGB) { extractRGBValues(linet[3 * j], &rval, NULL, NULL); extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); extractRGBValues(linet[3 * j + 2], NULL, NULL, &bval); } else { /* order BGR */ extractRGBValues(linet[3 * j], NULL, NULL, &bval); extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); extractRGBValues(linet[3 * j + 2], &rval, NULL, NULL); } composeRGBPixel(rval, gval, bval, &lined[j]); } } } else { /* L_VERT */ for (i = 0; i < hd; i++) { linet = datat + 3 * i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (order == L_SUBPIXEL_ORDER_VRGB) { extractRGBValues(linet[j], &rval, NULL, NULL); extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); extractRGBValues((linet + 2 * wplt)[j], NULL, NULL, &bval); } else { /* order VBGR */ extractRGBValues(linet[j], NULL, NULL, &bval); extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); extractRGBValues((linet + 2 * wplt)[j], &rval, NULL, NULL); } composeRGBPixel(rval, gval, bval, &lined[j]); } } } if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*---------------------------------------------------------------------* * Setting neutral point for min/max boost conversion to gray * *---------------------------------------------------------------------*/ /*! * \brief l_setNeutralBoostVal() * * \param[in] val between 1 and 255; typical value is 180 * \return void * *
 * Notes:
 *      (1) This raises or lowers the selected min or max RGB component value,
 *          depending on if that component is above or below this value.
 * 
*/ void l_setNeutralBoostVal(l_int32 val) { if (val <= 0) { L_ERROR("invalid reference value for neutral boost\n", __func__); return; } var_NEUTRAL_BOOST_VAL = val; } leptonica-1.86.0/src/pixlabel.c000066400000000000000000000560651506303110300163230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixlabel.c *
 *
 *     Label pixels by an index for connected component membership
 *           PIX         *pixConnCompTransform()
 *
 *     Label pixels by the area of their connected component
 *           PIX         *pixConnCompAreaTransform()
 *
 *     Label pixels to allow incremental computation of connected components
 *           l_int32      pixConnCompIncrInit()
 *           l_int32      pixConnCompIncrAdd()
 *           l_int32      pixGetSortedNeighborValues()
 *
 *     Label pixels with spatially-dependent color coding
 *           PIX         *pixLocToColorTransform()
 *
 *  Pixels get labelled in various ways throughout the leptonica library,
 *  but most of the labelling is implicit, where the new value isn't
 *  even considered to be a label -- it is just a transformed pixel value
 *  that may be transformed again by another operation.  Quantization
 *  by thresholding, and dilation by a structuring element, are examples
 *  of these typical image processing operations.
 *
 *  However, there are some explicit labelling procedures that are useful
 *  as end-points of analysis, where it typically would not make sense
 *  to do further image processing on the result.  Assigning false color
 *  based on pixel properties is an example of such labelling operations.
 *  Such operations typically have 1 bpp input images, and result
 *  in grayscale or color images.
 *
 *  The procedures in this file are concerned with such explicit labelling.
 *  Some of these labelling procedures are also in other places in leptonica:
 *
 *    runlength.c:
 *       This file has two labelling transforms based on runlengths:
 *       pixStrokeWidthTransform() and pixvRunlengthTransform().
 *       The pixels are labelled based on the width of the "stroke" to
 *       which they belong, or on the length of the horizontal or
 *       vertical run in which they are a member.  Runlengths can easily
 *       be filtered using a threshold.
 *
 *    pixafunc2.c:
 *       This file has an operation, pixaDisplayRandomCmap(), that
 *       randomly labels pix in a pixa (that are typically found using
 *       pixConnComp) with up to 256 values, and assigns each value to
 *       a random colormap color.
 *
 *    seedfill.c:
 *       This file has pixDistanceFunction(), that labels each pixel with
 *       its distance from either the foreground or the background.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" #include "pix_internal.h" /*-----------------------------------------------------------------------* * Label pixels by an index for connected component membership * *-----------------------------------------------------------------------*/ /*! * \brief pixConnCompTransform() * * \param[in] pixs 1 bpp * \param[in] connect connectivity: 4 or 8 * \param[in] depth of pixd: 8 or 16 bpp; use 0 for auto determination * \return pixd 8, 16 or 32 bpp, or NULL on error * *
 * Notes:
 *      (1) pixd is 8, 16 or 32 bpp, and the pixel values label the
 *          fg component, starting with 1.  Pixels in the bg are labelled 0.
 *      (2) If %depth = 0, the depth of pixd is 8 if the number of c.c.
 *          is less than 254, 16 if the number of c.c is less than 0xfffe,
 *          and 32 otherwise.
 *      (3) If %depth = 8, the assigned label for the n-th component is
 *          1 + n % 254.  We use mod 254 because 0 is uniquely assigned
 *          to black: e.g., see pixcmapCreateRandom().  Likewise,
 *          if %depth = 16, the assigned label uses mod(2^16 - 2), and
 *          if %depth = 32, no mod is taken.
 * 
*/ PIX * pixConnCompTransform(PIX *pixs, l_int32 connect, l_int32 depth) { l_int32 i, n, index, w, h, xb, yb, wb, hb; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connect != 4 && connect != 8) return (PIX *)ERROR_PTR("connectivity must be 4 or 8", __func__, NULL); if (depth != 0 && depth != 8 && depth != 16 && depth != 32) return (PIX *)ERROR_PTR("depth must be 0, 8, 16 or 32", __func__, NULL); boxa = pixConnComp(pixs, &pixa, connect); n = pixaGetCount(pixa); boxaDestroy(&boxa); pixGetDimensions(pixs, &w, &h, NULL); if (depth == 0) { if (n < 254) depth = 8; else if (n < 0xfffe) depth = 16; else depth = 32; } pixd = pixCreate(w, h, depth); pixSetSpp(pixd, 1); if (n == 0) { /* no fg */ pixaDestroy(&pixa); return pixd; } /* Label each component and blit it in */ for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pix1 = pixaGetPix(pixa, i, L_CLONE); if (depth == 8) { index = 1 + (i % 254); pix2 = pixConvert1To8(NULL, pix1, 0, index); } else if (depth == 16) { index = 1 + (i % 0xfffe); pix2 = pixConvert1To16(NULL, pix1, 0, index); } else { /* depth == 32 */ index = 1 + i; pix2 = pixConvert1To32(NULL, pix1, 0, index); } pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa); return pixd; } /*-----------------------------------------------------------------------* * Label pixels by the area of their connected component * *-----------------------------------------------------------------------*/ /*! * \brief pixConnCompAreaTransform() * * \param[in] pixs 1 bpp * \param[in] connect connectivity: 4 or 8 * \return pixd 32 bpp, 1 spp, or NULL on error * *
 * Notes:
 *      (1) The pixel values in pixd label the area of the fg component
 *          to which the pixel belongs.  Pixels in the bg are labelled 0.
 *      (2) For purposes of visualization, the output can be converted
 *          to 8 bpp, using pixConvert32To8() or pixMaxDynamicRange().
 * 
*/ PIX * pixConnCompAreaTransform(PIX *pixs, l_int32 connect) { l_int32 i, n, npix, w, h, xb, yb, wb, hb; l_int32 *tab8; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connect != 4 && connect != 8) return (PIX *)ERROR_PTR("connectivity must be 4 or 8", __func__, NULL); boxa = pixConnComp(pixs, &pixa, connect); n = pixaGetCount(pixa); boxaDestroy(&boxa); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixSetSpp(pixd, 1); if (n == 0) { /* no fg */ pixaDestroy(&pixa); return pixd; } /* Label each component and blit it in */ tab8 = makePixelSumTab8(); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pix1 = pixaGetPix(pixa, i, L_CLONE); pixCountPixels(pix1, &npix, tab8); pix2 = pixConvert1To32(NULL, pix1, 0, npix); pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa); LEPT_FREE(tab8); return pixd; } /*-------------------------------------------------------------------------* * Label pixels to allow incremental computation of connected components * *-------------------------------------------------------------------------*/ /*! * \brief pixConnCompIncrInit() * * \param[in] pixs 1 bpp * \param[in] conn connectivity: 4 or 8 * \param[out] ppixd 32 bpp, with c.c. labelled * \param[out] pptaa with pixel locations indexed by c.c. * \param[out] pncc initial number of c.c. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This labels the connected components in a 1 bpp pix, and
 *          additionally sets up a ptaa that lists the locations of pixels
 *          in each of the components.
 *      (2) It can be used to initialize the output image and arrays for
 *          an application that maintains information about connected
 *          components incrementally as pixels are added.
 *      (3) pixs can be empty or have some foreground pixels.
 *      (4) The connectivity is stored in pixd->special.
 *      (5) Always initialize with the first pta in ptaa being empty
 *          and representing the background value (index 0) in the pix.
 * 
*/ l_ok pixConnCompIncrInit(PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc) { l_int32 empty, w, h, ncc; PIX *pixd; PTA *pta; PTAA *ptaa; if (ppixd) *ppixd = NULL; if (pptaa) *pptaa = NULL; if (pncc) *pncc = 0; if (!ppixd || !pptaa || !pncc) return ERROR_INT("&pixd, &ptaa, &ncc not all defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", __func__, 1); if (conn != 4 && conn != 8) return ERROR_INT("connectivity must be 4 or 8", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); pixZero(pixs, &empty); if (empty) { *ppixd = pixCreate(w, h, 32); pixSetSpp(*ppixd, 1); pixSetSpecial(*ppixd, conn); *pptaa = ptaaCreate(0); pta = ptaCreate(1); ptaaAddPta(*pptaa, pta, L_INSERT); /* reserve index 0 for background */ return 0; } /* Set up the initial labeled image and indexed pixel arrays */ if ((pixd = pixConnCompTransform(pixs, conn, 32)) == NULL) return ERROR_INT("pixd not made", __func__, 1); pixSetSpecial(pixd, conn); *ppixd = pixd; if ((ptaa = ptaaIndexLabeledPixels(pixd, &ncc)) == NULL) return ERROR_INT("ptaa not made", __func__, 1); *pptaa = ptaa; *pncc = ncc; return 0; } /*! * \brief pixConnCompIncrAdd() * * \param[in] pixs 32 bpp, with pixels labeled by c.c. * \param[in] ptaa with each pta of pixel locations indexed by c.c. * \param[out] pncc number of c.c * \param[in] x,y location of added pixel * \param[in] debug 0 for no output; otherwise output whenever * debug <= nvals, up to debug == 3 * \return -1 if nothing happens; 0 if a pixel is added; 1 on error * *
 * Notes:
 *      (1) This adds a pixel and updates the labeled connected components.
 *          Before calling this function, initialize the process using
 *          pixConnCompIncrInit().
 *      (2) As a result of adding a pixel, one of the following can happen,
 *          depending on the number of neighbors with non-zero value:
 *          (a) nothing: the pixel is already a member of a c.c.
 *          (b) no neighbors: a new component is added, increasing the
 *              number of c.c.
 *          (c) one neighbor: the pixel is added to an existing c.c.
 *          (d) more than one neighbor: the added pixel causes joining of
 *              two or more c.c., reducing the number of c.c.  A maximum
 *              of 4 c.c. can be joined.
 *      (3) When two c.c. are joined, the pixels in the larger index are
 *          relabeled to those of the smaller in pixs, and their locations
 *          are transferred to the pta with the smaller index in the ptaa.
 *          The pta corresponding to the larger index is then deleted.
 *      (4) This is an efficient implementation of a "union-find" operation,
 *          which supports the generation and merging of disjoint sets
 *          of pixels.  This function can be called about 1.3 million times
 *          per second.
 * 
*/ l_int32 pixConnCompIncrAdd(PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug) { l_int32 conn, i, j, w, h, count, nvals, ns, firstindex; l_uint32 val; l_int32 *neigh; PTA *ptas, *ptad; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", __func__, 1); if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (!pncc) return ERROR_INT("&ncc not defined", __func__, 1); conn = pixs->special; if (conn != 4 && conn != 8) return ERROR_INT("connectivity must be 4 or 8", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (x < 0 || x >= w) return ERROR_INT("invalid x pixel location", __func__, 1); if (y < 0 || y >= h) return ERROR_INT("invalid y pixel location", __func__, 1); pixGetPixel(pixs, x, y, &val); if (val > 0) /* already belongs to a set */ return -1; /* Find unique neighbor pixel values in increasing order of value. * If %nvals > 0, these are returned in the %neigh array, which * is of size %nvals. Note that the pixel values in each * connected component are used as the index into the pta * array of the ptaa, giving the pixel locations. */ pixGetSortedNeighborValues(pixs, x, y, conn, &neigh, &nvals); /* If there are no neighbors, just add a new component */ if (nvals == 0) { count = ptaaGetCount(ptaa); pixSetPixel(pixs, x, y, count); ptas = ptaCreate(1); ptaAddPt(ptas, x, y); ptaaAddPta(ptaa, ptas, L_INSERT); *pncc += 1; LEPT_FREE(neigh); return 0; } /* Otherwise, there is at least one neighbor. Add the pixel * to the first neighbor c.c. */ firstindex = neigh[0]; pixSetPixel(pixs, x, y, firstindex); ptaaAddPt(ptaa, neigh[0], x, y); if (nvals == 1) { if (debug == 1) lept_stderr("nvals = %d: neigh = (%d)\n", nvals, neigh[0]); LEPT_FREE(neigh); return 0; } /* If nvals > 1, there are at least 2 neighbors, so this pixel * joins at least one pair of existing c.c. Join each component * to the first component in the list, which is the one with * the smallest integer label. This is done in two steps: * (a) re-label the pixels in the component to the label of the * first component, and * (b) save the pixel locations in the pta for the first component. */ if (nvals == 2) { if (debug >= 1 && debug <= 2) { lept_stderr("nvals = %d: neigh = (%d,%d)\n", nvals, neigh[0], neigh[1]); } } else if (nvals == 3) { if (debug >= 1 && debug <= 3) { lept_stderr("nvals = %d: neigh = (%d,%d,%d)\n", nvals, neigh[0], neigh[1], neigh[2]); } } else { /* nvals == 4 */ if (debug >= 1 && debug <= 4) { lept_stderr("nvals = %d: neigh = (%d,%d,%d,%d)\n", nvals, neigh[0], neigh[1], neigh[2], neigh[3]); } } ptad = ptaaGetPta(ptaa, firstindex, L_CLONE); for (i = 1; i < nvals; i++) { ptas = ptaaGetPta(ptaa, neigh[i], L_CLONE); ns = ptaGetCount(ptas); for (j = 0; j < ns; j++) { /* relabel pixels */ ptaGetPt(ptas, j, &x, &y); pixSetPixel(pixs, x, y, firstindex); } ptaJoin(ptad, ptas, 0, -1); /* add relabeled pixel locations */ *pncc -= 1; ptaDestroy(&ptaa->pta[neigh[i]]); ptaDestroy(&ptas); /* the clone */ } ptaDestroy(&ptad); /* the clone */ LEPT_FREE(neigh); return 0; } /*! * \brief pixGetSortedNeighborValues() * * \param[in] pixs 8, 16 or 32 bpp, with pixels labeled by c.c. * \param[in] x, y location of pixel * \param[in] conn 4 or 8 connected neighbors * \param[out] pneigh array of integers, to be filled with * the values of the neighbors, if any * \param[out] pnvals the number of unique neighbor values found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned %neigh array is the unique set of neighboring
 *          pixel values, of size nvals, sorted from smallest to largest.
 *          The value 0, which represents background pixels that do
 *          not belong to any set of connected components, is discarded.
 *      (2) If there are no neighbors, this returns %neigh = NULL; otherwise,
 *          the caller must free the array.
 *      (3) For either 4 or 8 connectivity, the maximum number of unique
 *          neighbor values is 4.
 * 
*/ l_ok pixGetSortedNeighborValues(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals) { l_int32 i, npt, index; l_int32 neigh[4]; l_uint32 val; l_float32 fx, fy; L_ASET *aset; L_ASET_NODE *node; PTA *pta; RB_TYPE key; if (pneigh) *pneigh = NULL; if (pnvals) *pnvals = 0; if (!pneigh || !pnvals) return ERROR_INT("&neigh and &nvals not both defined", __func__, 1); if (!pixs || pixGetDepth(pixs) < 8) return ERROR_INT("pixs not defined or depth < 8", __func__, 1); /* Identify the locations of nearest neighbor pixels */ if ((pta = ptaGetNeighborPixLocs(pixs, x, y, conn)) == NULL) return ERROR_INT("pta of neighbors not made", __func__, 1); /* Find the pixel values and insert into a set as keys */ aset = l_asetCreate(L_UINT_TYPE); npt = ptaGetCount(pta); for (i = 0; i < npt; i++) { ptaGetPt(pta, i, &fx, &fy); pixGetPixel(pixs, (l_int32)fx, (l_int32)fy, &val); key.utype = val; l_asetInsert(aset, key); } /* Extract the set keys and put them into the %neigh array. * Omit the value 0, which indicates the pixel doesn't * belong to one of the sets of connected components. */ node = l_asetGetFirst(aset); index = 0; while (node) { val = node->key.utype; if (val > 0) neigh[index++] = (l_int32)val; node = l_asetGetNext(node); } *pnvals = index; if (index > 0) { *pneigh = (l_int32 *)LEPT_CALLOC(index, sizeof(l_int32)); for (i = 0; i < index; i++) (*pneigh)[i] = neigh[i]; } ptaDestroy(&pta); l_asetDestroy(&aset); return 0; } /*-----------------------------------------------------------------------* * Label pixels with spatially-dependent color coding * *-----------------------------------------------------------------------*/ /*! * \brief pixLocToColorTransform() * * \param[in] pixs 1 bpp * \return pixd 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) This generates an RGB image where each component value
 *          is coded depending on the (x.y) location and the size
 *          of the fg connected component that the pixel in pixs belongs to.
 *          It is independent of the 4-fold orthogonal orientation, and
 *          only weakly depends on translations and small angle rotations.
 *          Background pixels are black.
 *      (2) Such encodings can be compared between two 1 bpp images
 *          by performing this transform and calculating the
 *          "earth-mover" distance on the resulting R,G,B histograms.
 * 
*/ PIX * pixLocToColorTransform(PIX *pixs) { l_int32 w, h, w2, h2, wpls, wplr, wplg, wplb, wplcc, i, j, rval, gval, bval; l_float32 invw2, invh2; l_uint32 *datas, *datar, *datag, *datab, *datacc; l_uint32 *lines, *liner, *lineg, *lineb, *linecc; PIX *pix1, *pixcc, *pixr, *pixg, *pixb, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); /* Label each pixel with the area of the c.c. to which it belongs. * Clip the result to 255 in an 8 bpp pix. This is used for * the blue component of pixd. */ pixGetDimensions(pixs, &w, &h, NULL); w2 = w / 2; h2 = h / 2; invw2 = 255.0f / (l_float32)w2; invh2 = 255.0f / (l_float32)h2; pix1 = pixConnCompAreaTransform(pixs, 8); pixcc = pixConvert32To8(pix1, L_LS_TWO_BYTES, L_CLIP_TO_FF); pixDestroy(&pix1); /* Label the red and green components depending on the location * of the fg pixels, in a way that is 4-fold rotationally invariant. */ pixr = pixCreate(w, h, 8); pixg = pixCreate(w, h, 8); pixb = pixCreate(w, h, 8); wpls = pixGetWpl(pixs); wplr = pixGetWpl(pixr); wplg = pixGetWpl(pixg); wplb = pixGetWpl(pixb); wplcc = pixGetWpl(pixcc); datas = pixGetData(pixs); datar = pixGetData(pixr); datag = pixGetData(pixg); datab = pixGetData(pixb); datacc = pixGetData(pixcc); for (i = 0; i < h; i++) { lines = datas + i * wpls; liner = datar + i * wplr; lineg = datag + i * wplg; lineb = datab + i * wplb; linecc = datacc+ i * wplcc; for (j = 0; j < w; j++) { if (GET_DATA_BIT(lines, j) == 0) continue; if (w < h) { rval = invh2 * L_ABS((l_float32)(i - h2)); gval = invw2 * L_ABS((l_float32)(j - w2)); } else { rval = invw2 * L_ABS((l_float32)(j - w2)); gval = invh2 * L_ABS((l_float32)(i - h2)); } bval = GET_DATA_BYTE(linecc, j); SET_DATA_BYTE(liner, j, rval); SET_DATA_BYTE(lineg, j, gval); SET_DATA_BYTE(lineb, j, bval); } } pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixcc); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } leptonica-1.86.0/src/pixtiling.c000066400000000000000000000337161506303110300165300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pixtiling.c *
 *
 *        PIXTILING       *pixTilingCreate()
 *        void            *pixTilingDestroy()
 *        l_int32          pixTilingGetCount()
 *        l_int32          pixTilingGetSize()
 *        PIX             *pixTilingGetTile()
 *        l_int32          pixTilingNoStripOnPaint()
 *        l_int32          pixTilingPaintTile()
 *
 *   This provides a simple way to split an image into tiles
 *   and to perform operations independently on each tile.
 *
 *   The tile created with pixTilingGetTile() can have pixels in
 *   adjacent tiles for computation.  The number of extra pixels
 *   on each side of the tile is given by an 'overlap' parameter
 *   to pixTilingCreate().  For tiles at the boundary of
 *   the input image, quasi-overlap pixels are created by reflection
 *   symmetry into the tile.
 *
 *   Here's a typical intended usage.  Suppose you want to parallelize
 *   the operation on an image, by operating on tiles.  For each
 *   tile, you want to generate an in-place image result at the same
 *   resolution.  Suppose you choose a one-dimensional vertical tiling,
 *   where the desired tile width is 256 pixels and the overlap is
 *   30 pixels on left and right sides:
 *
 *     PIX *pixd = pixCreateTemplate(pixs);  // output
 *     PIXTILING  *pt = pixTilingCreate(pixs, 0, 1, 256, 30, 0);
 *     pixTilingGetCount(pt, &nx, NULL);
 *     for (j = 0; j < nx; j++) {
 *         PIX *pixt = pixTilingGetTile(pt, 0, j);
 *         SomeInPlaceOperation(pixt, 30, 0, ...);
 *         pixTilingPaintTile(pixd, 0, j, pixt, pt);
 *         pixDestroy(&pixt);
 *     }
 *
 *   In this example, note the following:
 *    ~ The unspecfified in-place operation could instead generate
 *      a new pix.  If this is done, the resulting pix must be the
 *      same size as pixt, because pixTilingPaintTile() makes that
 *      assumption, removing the overlap pixels before painting
 *      into the destination.
 *    ~ The 'overlap' parameters have been included in your function,
 *      to indicate which pixels are not in the exterior overlap region.
 *      You will need to change only pixels that are not in the overlap
 *      region, because those are the pixels that will be painted
 *      into the destination.
 *    ~ For tiles on the outside of the image, mirrored pixels are
 *      added to substitute for the overlap that is added to interior
 *      tiles.  This allows you to implement your function without
 *      reference to which tile it is; no special coding is necessary
 *      for pixels that are near the image boundary.
 *    ~ The tiles are labeled by (i, j) = (row, column),
 *      and in this example there is one row and nx columns.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #include "pix_internal.h" /*! * \brief pixTilingCreate() * * \param[in] pixs pix to be tiled; any depth; colormap OK * \param[in] nx number of tiles across image * \param[in] ny number of tiles down image * \param[in] w desired width of each tile * \param[in] h desired height of each tile * \param[in] xoverlap overlap into neighboring tiles on each side * \param[in] yoverlap overlap into neighboring tiles above and below * \return pixtiling, or NULL on error * *
 * Notes:
 *      (1) We put a clone of pixs in the PixTiling.
 *      (2) The input to pixTilingCreate() for horizontal tiling can be
 *          either the number of tiles across the image or the approximate
 *          width of the tiles.  If the latter, the actual width will be
 *          determined by making all tiles but the last of equal width, and
 *          making the last as close to the others as possible.  The same
 *          consideration is applied independently to the vertical tiling.
 *          To specify tile width, set nx = 0; to specify the number of
 *          tiles horizontally across the image, set w = 0.
 *      (3) If pixs is to be tiled in one-dimensional strips, use ny = 1 for
 *          vertical strips and nx = 1 for horizontal strips.
 *      (4) The overlap must not be larger than the width or height of
 *          the leftmost or topmost tile(s).
 * 
*/ PIXTILING * pixTilingCreate(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap) { l_int32 width, height; PIXTILING *pt; if (!pixs) return (PIXTILING *)ERROR_PTR("pixs not defined", __func__, NULL); if (nx < 1 && w < 1) return (PIXTILING *)ERROR_PTR("invalid width spec", __func__, NULL); if (ny < 1 && h < 1) return (PIXTILING *)ERROR_PTR("invalid height spec", __func__, NULL); /* Find the tile width and number of tiles. All tiles except the * rightmost ones have the same width. The width of the * rightmost ones are at least the width of the others and * less than twice that width. Ditto for tile height. */ pixGetDimensions(pixs, &width, &height, NULL); if (nx == 0) nx = L_MAX(1, width / w); w = width / nx; /* possibly reset */ if (ny == 0) ny = L_MAX(1, height / h); h = height / ny; /* possibly reset */ if (xoverlap > w || yoverlap > h) { L_INFO("tile width = %d, tile height = %d\n", __func__, w, h); return (PIXTILING *)ERROR_PTR("overlap too large", __func__, NULL); } pt = (PIXTILING *)LEPT_CALLOC(1, sizeof(PIXTILING)); pt->pix = pixClone(pixs); pt->xoverlap = xoverlap; pt->yoverlap = yoverlap; pt->nx = nx; pt->ny = ny; pt->w = w; pt->h = h; pt->strip = TRUE; return pt; } /*! * \brief pixTilingDestroy() * * \param[in,out] ppt will be set to null before returning * \return void */ void pixTilingDestroy(PIXTILING **ppt) { PIXTILING *pt; if (ppt == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((pt = *ppt) == NULL) return; pixDestroy(&pt->pix); LEPT_FREE(pt); *ppt = NULL; } /*! * \brief pixTilingGetCount() * * \param[in] pt pixtiling * \param[out] pnx [optional] nx; can be null * \param[out] pny [optional] ny; can be null * \return 0 if OK, 1 on error */ l_ok pixTilingGetCount(PIXTILING *pt, l_int32 *pnx, l_int32 *pny) { if (!pt) return ERROR_INT("pt not defined", __func__, 1); if (pnx) *pnx = pt->nx; if (pny) *pny = pt->ny; return 0; } /*! * \brief pixTilingGetSize() * * \param[in] pt pixtiling * \param[out] pw [optional] tile width; can be null * \param[out] ph [optional] tile height; can be null * \return 0 if OK, 1 on error */ l_ok pixTilingGetSize(PIXTILING *pt, l_int32 *pw, l_int32 *ph) { if (!pt) return ERROR_INT("pt not defined", __func__, 1); if (pw) *pw = pt->w; if (ph) *ph = pt->h; return 0; } /*! * \brief pixTilingGetTile() * * \param[in] pt pixtiling * \param[in] i tile row index * \param[in] j tile column index * \return pixd tile with appropriate boundary (overlap) pixels added, * or NULL on error */ PIX * pixTilingGetTile(PIXTILING *pt, l_int32 i, l_int32 j) { l_int32 wpix, hpix, wt, ht, nx, ny; l_int32 xoverlap, yoverlap, wtlast, htlast; l_int32 left, top, xtraleft, xtraright, xtratop, xtrabot, width, height; BOX *box; PIX *pixs, *pixt, *pixd; if (!pt) return (PIX *)ERROR_PTR("pt not defined", __func__, NULL); if ((pixs = pt->pix) == NULL) return (PIX *)ERROR_PTR("pix not found", __func__, NULL); pixTilingGetCount(pt, &nx, &ny); if (i < 0 || i >= ny) return (PIX *)ERROR_PTR("invalid row index i", __func__, NULL); if (j < 0 || j >= nx) return (PIX *)ERROR_PTR("invalid column index j", __func__, NULL); /* Grab the tile with as much overlap as exists within the * input pix. First, compute the (left, top) coordinates. */ pixGetDimensions(pixs, &wpix, &hpix, NULL); pixTilingGetSize(pt, &wt, &ht); xoverlap = pt->xoverlap; yoverlap = pt->yoverlap; wtlast = wpix - wt * (nx - 1); htlast = hpix - ht * (ny - 1); left = L_MAX(0, j * wt - xoverlap); top = L_MAX(0, i * ht - yoverlap); /* Get the width and height of the tile, including whatever * overlap is available. */ if (nx == 1) width = wpix; else if (j == 0) width = wt + xoverlap; else if (j == nx - 1) width = wtlast + xoverlap; else width = wt + 2 * xoverlap; if (ny == 1) height = hpix; else if (i == 0) height = ht + yoverlap; else if (i == ny - 1) height = htlast + yoverlap; else height = ht + 2 * yoverlap; box = boxCreate(left, top, width, height); pixt = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); /* If no overlap, do not add any special case borders */ if (xoverlap == 0 && yoverlap == 0) return pixt; /* Add overlap as a mirrored border, in the 8 special cases where * the tile touches the border of the input pix. The xtratop (etc) * parameters are required where the tile is either full width * or full height. */ xtratop = xtrabot = xtraleft = xtraright = 0; if (nx == 1) xtraleft = xtraright = xoverlap; if (ny == 1) xtratop = xtrabot = yoverlap; if (i == 0 && j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, yoverlap, xtrabot); else if (i == 0 && j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, yoverlap, xtrabot); else if (i == ny - 1 && j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, xtratop, yoverlap); else if (i == ny - 1 && j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, xtratop, yoverlap); else if (i == 0) pixd = pixAddMirroredBorder(pixt, 0, 0, yoverlap, xtrabot); else if (i == ny - 1) pixd = pixAddMirroredBorder(pixt, 0, 0, xtratop, yoverlap); else if (j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, 0, 0); else if (j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, 0, 0); else pixd = pixClone(pixt); pixDestroy(&pixt); return pixd; } /*! * \brief pixTilingNoStripOnPaint() * * \param[in] pt pixtiling * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The default for paint is to strip out the overlap pixels
 *          that are added by pixTilingGetTile().  However, some
 *          operations will generate an image with these pixels
 *          stripped off.  This tells the paint operation not
 *          to strip the added boundary pixels when painting.
 * 
*/ l_ok pixTilingNoStripOnPaint(PIXTILING *pt) { if (!pt) return ERROR_INT("pt not defined", __func__, 1); pt->strip = FALSE; return 0; } /*! * \brief pixTilingPaintTile() * * \param[in] pixd dest: paint tile onto this, without overlap * \param[in] i tile row index * \param[in] j tile column index * \param[in] pixs source: tile to be painted from * \param[in] pt pixtiling struct * \return 0 if OK, 1 on error */ l_ok pixTilingPaintTile(PIX *pixd, l_int32 i, l_int32 j, PIX *pixs, PIXTILING *pt) { l_int32 w, h; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pt) return ERROR_INT("pt not defined", __func__, 1); if (i < 0 || i >= pt->ny) return ERROR_INT("invalid row index i", __func__, 1); if (j < 0 || j >= pt->nx) return ERROR_INT("invalid column index j", __func__, 1); /* Strip added border pixels off if requested */ pixGetDimensions(pixs, &w, &h, NULL); if (pt->strip == TRUE) { pixRasterop(pixd, j * pt->w, i * pt->h, w - 2 * pt->xoverlap, h - 2 * pt->yoverlap, PIX_SRC, pixs, pt->xoverlap, pt->yoverlap); } else { pixRasterop(pixd, j * pt->w, i * pt->h, w, h, PIX_SRC, pixs, 0, 0); } return 0; } leptonica-1.86.0/src/pngio.c000066400000000000000000002415701506303110300156340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - Copyright (C) 2017 Milner Technologies, Inc. - - 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pngio.c *
 *
 *    Reading png through stream
 *          PIX        *pixReadStreamPng()
 *
 *    Reading png header
 *          l_int32     readHeaderPng()
 *          l_int32     freadHeaderPng()
 *          l_int32     readHeaderMemPng()
 *
 *    Reading png metadata
 *          l_int32     fgetPngResolution()
 *          l_int32     isPngInterlaced()
 *          l_int32     fgetPngColormapInfo()
 *
 *    Writing png through stream
 *          l_int32     pixWritePng()  [ special top level ]
 *          l_int32     pixWriteStreamPng()
 *          l_int32     pixSetZlibCompression()
 *
 *    Set flag for special read mode
 *          void        l_pngSetReadStrip16To8()
 *
 *    Low-level memio utility (thanks to T. D. Hintz)
 *          static void memio_png_write_data()
 *          static void memio_png_flush()
 *          static void memio_png_read_data()
 *          static void memio_free()
 *
 *    Reading png from memory
 *          PIX        *pixReadMemPng()
 *
 *    Writing png to memory
 *          l_int32     pixWriteMemPng()
 *
 *    Documentation: libpng.txt and example.c
 *
 *    On input (decompression from file), palette color images
 *    are read into an 8 bpp Pix with a colormap, and 24 bpp
 *    3 component color images are read into a 32 bpp Pix with
 *    rgb samples.  On output (compression to file), palette color
 *    images are written as 8 bpp with the colormap, and 32 bpp
 *    full color images are written compressed as a 24 bpp,
 *    3 component color image.
 *
 *    In the following, we use these abbreviations:
 *       bps == bit/sample
 *       spp == samples/pixel
 *       bpp == bits/pixel of image in Pix (memory)
 *    where each component is referred to as a "sample".
 *
 *    For reading and writing rgb and rgba images, we read and write
 *    alpha if it exists (spp == 4) and do not read or write if
 *    it doesn't (spp == 3).  The alpha component can be 'removed'
 *    simply by setting spp to 3.  In leptonica, we make relatively
 *    little explicit use of the alpha sample.  Note that the alpha
 *    sample in the image is also called "alpha transparency",
 *    "alpha component" and "alpha layer."
 *
 *    To change the zlib compression level, use pixSetZlibCompression()
 *    before writing the file.  The default is for standard png compression.
 *    The zlib compression value can be set [0 ... 9], with
 *         0     no compression (huge files)
 *         1     fastest compression
 *         -1    default compression  (equivalent to 6 in latest version)
 *         9     best compression
 *    Note that if you are using the defined constants in zlib instead
 *    of the compression integers given above, you must include zlib.h.
 *
 *    There is global for determining the size of retained samples:
 *             var_PNG_STRIP_16_to_8
 *    and a function l_pngSetReadStrip16To8() for setting it.
 *    The default is TRUE, which causes pixRead() to strip each 16 bit
 *    sample down to 8 bps:
 *     ~ For 16 bps rgb (16 bps, 3 spp) --> 32 bpp rgb Pix
 *     ~ For 16 bps gray (16 bps, 1 spp) --> 8 bpp grayscale Pix
 *    If the variable is set to FALSE, the 16 bit gray samples
 *    are saved when read; the 16 bit rgb samples return an error.
 *    Note: results can be non-deterministic if used with
 *    multi-threaded applications.
 *
 *    Thanks to a memory buffering utility contributed by T. D. Hintz,
 *    encoding png directly into memory (and decoding from memory)
 *    is now enabled without the use of any temp files.  Unlike with webp,
 *    it is necessary to preserve the stream interface to enable writing
 *    pixa to memory.  So there are two independent but very similar
 *    implementations of png reading and writing.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* --------------------------------------------*/ #if HAVE_LIBPNG /* defined in environ.h */ /* --------------------------------------------*/ #include "png.h" #if HAVE_LIBZ #include "zlib.h" #else #define Z_DEFAULT_COMPRESSION (-1) #endif /* HAVE_LIBZ */ /* ------------------ Set default for read option -------------------- */ /* Strip 16 bpp --> 8 bpp on reading png; default is for stripping. * If you don't strip, you can't read the gray-alpha spp = 2 images. */ static l_int32 var_PNG_STRIP_16_TO_8 = 1; #ifndef NO_CONSOLE_IO #define DEBUG_READ 0 #define DEBUG_WRITE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Reading png through stream * *---------------------------------------------------------------------*/ /*! * \brief pixReadStreamPng() * * \param[in] fp file stream * \return pix, or NULL on error * *
 * Notes:
 *      (1) If called from pixReadStream(), the stream is positioned
 *          at the beginning of the file.
 *      (2) To do sequential reads of png format images from a stream,
 *          use pixReadStreamPng()
 *      (3) All images with alpha is converted to RGBA (spp = 4, with
 *          equal red, green and blue channels) on reading.
 *          There are three cases with alpha:
 *          (a) RGBA: spp = 4.  The alpha value is the fourth byte
 *              (aka "channel, "component") in each 4-byte pixel.
 *          (b) grayscale-with-alpha (spp = 2), where bpp = 8, and each
 *              pixel has an associated alpha (transparency) value
 *              in the second component of the image data.
 *          (c) colormap (spp = 1) with alpha in the trans palette.
 *              d = 1, 2, 4, 8.  The trans palette in writing is derived
 *              from the alpha components in the cmap.  Transparency is
 *              often associated with a white background.
 *      (4) We use the high level png interface, where the transforms are set
 *          up in advance and the header and image are read with a single
 *          call.  The more complicated interface, where the header is
 *          read first and the buffers for the raster image are user-
 *          allocated before reading the image, works for single images,
 *          but I could not get it to work properly for the successive
 *          png reads that are required by pixaReadStream().
 * 
*/ PIX * pixReadStreamPng(FILE *fp) { l_uint8 byte; l_int32 i, j, k, index, ncolors, rval, gval, bval, valid; l_int32 wpl, d, spp, cindex, bitval, bival, quadval, tRNS; l_uint32 png_transforms; l_uint32 *data, *line, *ppixel; int num_palette, num_text, num_trans; png_byte bit_depth, color_type, channels; png_uint_32 w, h, rowbytes, xres, yres; png_bytep rowptr, trans; png_bytep *row_pointers; png_structp png_ptr; png_infop info_ptr, end_info; png_colorp palette; png_textp text_ptr; /* ptr to text_chunk */ PIX *pix, *pix1; PIXCMAP *cmap; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); pix = NULL; /* Allocate the 3 data structures */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return (PIX *)ERROR_PTR("png_ptr not made", __func__, NULL); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (PIX *)ERROR_PTR("info_ptr not made", __func__, NULL); } if ((end_info = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (PIX *)ERROR_PTR("end_info not made", __func__, NULL); } /* Set up png setjmp error handling */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("internal png error", __func__, NULL); } png_init_io(png_ptr, fp); /* ---------------------------------------------------------- * * - Set the transforms flags. Whatever happens here, * NEVER invert 1 bpp using PNG_TRANSFORM_INVERT_MONO. * - Do not use PNG_TRANSFORM_EXPAND, which would * expand all images with bpp < 8 to 8 bpp. * - Strip 16 --> 8 if reading 16-bit gray+alpha * ---------------------------------------------------------- */ /* To strip 16 --> 8 bit depth, use PNG_TRANSFORM_STRIP_16 */ if (var_PNG_STRIP_16_TO_8 == 1) { /* our default */ png_transforms = PNG_TRANSFORM_STRIP_16; } else { png_transforms = PNG_TRANSFORM_IDENTITY; L_INFO("not stripping 16 --> 8 in png reading\n", __func__); } /* Read it */ png_read_png(png_ptr, info_ptr, png_transforms, NULL); row_pointers = png_get_rows(png_ptr, info_ptr); w = png_get_image_width(png_ptr, info_ptr); h = png_get_image_height(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); rowbytes = png_get_rowbytes(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); channels = png_get_channels(png_ptr, info_ptr); spp = channels; tRNS = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ? 1 : 0; if (spp == 1) { d = bit_depth; } else { /* spp == 2 (gray + alpha), spp == 3 (rgb), spp == 4 (rgba) */ d = 4 * bit_depth; } /* Remove if/when this is implemented for all bit_depths */ if (spp != 1 && bit_depth != 8) { L_ERROR("spp = %d and bps = %d != 8\n" "turn on 16 --> 8 stripping\n", __func__, spp, bit_depth); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("not implemented for this image", __func__, NULL); } cmap = NULL; if (color_type == PNG_COLOR_TYPE_PALETTE || color_type == PNG_COLOR_MASK_PALETTE) { /* generate a colormap */ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); cmap = pixcmapCreate(d); /* spp == 1 */ for (cindex = 0; cindex < num_palette; cindex++) { rval = palette[cindex].red; gval = palette[cindex].green; bval = palette[cindex].blue; pixcmapAddColor(cmap, rval, gval, bval); } } if ((pix = pixCreate(w, h, d)) == NULL) { pixcmapDestroy(&cmap); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("pix not made", __func__, NULL); } pixSetInputFormat(pix, IFF_PNG); wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetSpp(pix, spp); if (pixSetColormap(pix, cmap)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } if (spp == 1 && !tRNS) { /* copy straight from buffer to pix */ for (i = 0; i < h; i++) { line = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < rowbytes; j++) { SET_DATA_BYTE(line, j, rowptr[j]); } } } else if (spp == 2) { /* grayscale + alpha; convert to RGBA */ L_INFO("converting (gray + alpha) ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { /* Copy gray value into r, g and b */ SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } pixSetSpp(pix, 4); /* we do not support 2 spp pix */ } else if (spp == 3 || spp == 4) { for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); if (spp == 3) /* set to opaque; some readers are buggy */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, 255); else /* spp == 4 */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } } /* Special spp == 1 cases with transparency: * (1) 8 bpp without colormap; assume full transparency * (2) 1 bpp with colormap + trans array (for alpha) * (3) 2 bpp with colormap + trans array (for alpha) * (4) 4 bpp with colormap + trans array (for alpha) * (5) 8 bpp with colormap + trans array (for alpha) * These all require converting to RGBA */ if (spp == 1 && tRNS) { if (!cmap) { /* Case 1: make fully transparent RGBA image */ L_INFO("transparency, 1 spp, no colormap, no transparency array: " "convention is fully transparent image\n", __func__); L_INFO("converting (fully transparent 1 spp) ==> RGBA\n", __func__); pixDestroy(&pix); pix = pixCreate(w, h, 32); /* init to alpha = 0 (transparent) */ pixSetSpp(pix, 4); } else { L_INFO("converting (cmap + alpha) ==> RGBA\n", __func__); /* Grab the transparency array */ png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); if (!trans) { /* invalid png file */ pixDestroy(&pix); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("cmap, tRNS, but no transparency array", __func__, NULL); } /* Save the cmap and destroy the pix */ cmap = pixcmapCopy(pixGetColormap(pix)); ncolors = pixcmapGetCount(cmap); pixDestroy(&pix); /* Start over with 32 bit RGBA */ pix = pixCreate(w, h, 32); wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetSpp(pix, 4); #if DEBUG_READ lept_stderr("ncolors = %d, num_trans = %d\n", ncolors, num_trans); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (i < num_trans) { lept_stderr("(r,g,b,a) = (%d,%d,%d,%d)\n", rval, gval, bval, trans[i]); } else { lept_stderr("(r,g,b,a) = (%d,%d,%d,<<255>>)\n", rval, gval, bval); } } #endif /* DEBUG_READ */ /* Extract the data and convert to RGBA */ if (d == 1) { /* Case 2: 1 bpp with transparency (usually) behind white */ L_INFO("converting 1 bpp cmap with alpha ==> RGBA\n", __func__); if (num_trans == 1) L_INFO("num_trans = 1; second color opaque by default\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 8 && index < w; k++, index++) { bitval = (byte >> (7 - k)) & 1; pixcmapGetColor(cmap, bitval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, bitval < num_trans ? trans[bitval] : 255); ppixel++; } } } } else if (d == 2) { /* Case 3: 2 bpp with cmap and associated transparency */ L_INFO("converting 2 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 4 && index < w; k++, index++) { bival = (byte >> 2 * (3 - k)) & 3; pixcmapGetColor(cmap, bival, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) * according to the spec: * http://www.w3.org/TR/PNG/#11tRNS */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, bival < num_trans ? trans[bival] : 255); ppixel++; } } } } else if (d == 4) { /* Case 4: 4 bpp with cmap and associated transparency */ L_INFO("converting 4 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 2 && index < w; k++, index++) { quadval = (byte >> 4 * (1 - k)) & 0xf; pixcmapGetColor(cmap, quadval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, quadval < num_trans ? trans[quadval] : 255); ppixel++; } } } } else if (d == 8) { /* Case 5: 8 bpp with cmap and associated transparency */ L_INFO("converting 8 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < w; j++) { index = rowptr[j]; pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, index < num_trans ? trans[index] : 255); ppixel++; } } } else { L_ERROR("spp == 1, cmap, trans array, invalid depth: %d\n", __func__, d); } pixcmapDestroy(&cmap); } } #if DEBUG_READ if (cmap) { for (i = 0; i < 16; i++) { lept_stderr("[%d] = %d\n", i, ((l_uint8 *)(cmap->array))[i]); } } #endif /* DEBUG_READ */ /* Final adjustments for bpp = 1. * + If there is no colormap, the image must be inverted because * png stores black pixels as 0. * + We have already handled the case of cmapped, 1 bpp pix * with transparency, where the output pix is 32 bpp RGBA. * If there is no transparency but the pix has a colormap, * we remove the colormap, because functions operating on * 1 bpp images in leptonica assume no colormap. * + The colormap must be removed in such a way that the pixel * values are not changed. If the values are only black and * white, we return a 1 bpp image; if gray, return an 8 bpp pix; * otherwise, return a 32 bpp rgb pix. * * Note that we cannot use the PNG_TRANSFORM_INVERT_MONO flag * to do the inversion, because that flag (since version 1.0.9) * inverts 8 bpp grayscale as well, which we don't want to do. * (It also doesn't work if there is a colormap.) * * Note that if the input png is a 1-bit with colormap and * transparency, it has already been rendered as a 32 bpp, * spp = 4 rgba pix. */ if (pixGetDepth(pix) == 1) { if (!cmap) { pixInvert(pix, pix); } else { L_INFO("removing opaque cmap from 1 bpp\n", __func__); pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pix); pix = pix1; } } xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ /* Get the text if there is any */ png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); if (num_text && text_ptr) pixSetText(pix, text_ptr->text); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); /* Final validity check on the colormap */ if ((cmap = pixGetColormap(pix)) != NULL) { pixcmapIsValid(cmap, pix, &valid); if (!valid) { pixDestroy(&pix); return (PIX *)ERROR_PTR("colormap is not valid", __func__, NULL); } } pixSetPadBits(pix, 0); return pix; } /*---------------------------------------------------------------------* * Reading png header * *---------------------------------------------------------------------*/ /*! * \brief readHeaderPng() * * \param[in] filename * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] piscmap [optional] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, iscmap is returned as 1; else 0.
 *      (2) For gray+alpha, although the png records bps = 16, we
 *          consider this as two 8 bpp samples (gray and alpha).
 *          When a gray+alpha is read, it is converted to 32 bpp RGBA.
 * 
*/ l_ok readHeaderPng(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 ret; FILE *fp; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderPng(fp, pw, ph, pbps, pspp, piscmap); fclose(fp); return ret; } /*! * \brief freadHeaderPng() * * \param[in] fp file stream * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] piscmap [optional] * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See readHeaderPng().  We only need the first 40 bytes in the file.
 * 
*/ l_ok freadHeaderPng(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 nbytes, ret; l_uint8 data[40]; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (!fp) return ERROR_INT("stream not defined", __func__, 1); nbytes = fnbytesInFile(fp); if (nbytes < 40) return ERROR_INT("file too small to be png", __func__, 1); if (fread(data, 1, 40, fp) != 40) return ERROR_INT("error reading data", __func__, 1); ret = readHeaderMemPng(data, 40, pw, ph, pbps, pspp, piscmap); return ret; } /*! * \brief readHeaderMemPng() * * \param[in] data * \param[in] size 40 bytes is sufficient * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \param[out] piscmap [optional] input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See readHeaderPng().
 *      (2) png colortypes (see png.h: PNG_COLOR_TYPE_*):
 *          0:  gray; fully transparent (with tRNS) (1 spp)
 *          2:  RGB (3 spp)
 *          3:  colormap; colormap+alpha (with tRNS) (1 spp)
 *          4:  gray + alpha (2 spp)
 *          6:  RGBA (4 spp)
 *          Note:
 *            0 and 3 have the alpha information in a tRNS chunk
 *            4 and 6 have separate alpha samples with each pixel.
 * 
*/ l_ok readHeaderMemPng(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_uint16 twobytes; l_uint16 *pshort; l_int32 colortype, w, h, bps, spp; l_uint32 *pword; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (!data) return ERROR_INT("data not defined", __func__, 1); if (size < 40) return ERROR_INT("size < 40", __func__, 1); /* Check password */ if (data[0] != 137 || data[1] != 80 || data[2] != 78 || data[3] != 71 || data[4] != 13 || data[5] != 10 || data[6] != 26 || data[7] != 10) return ERROR_INT("not a valid png file", __func__, 1); pword = (l_uint32 *)data; pshort = (l_uint16 *)data; w = convertOnLittleEnd32(pword[4]); h = convertOnLittleEnd32(pword[5]); if (w < 1 || h < 1) return ERROR_INT("invalid w or h", __func__, 1); twobytes = convertOnLittleEnd16(pshort[12]); /* contains depth/sample */ /* and the color type */ colortype = twobytes & 0xff; /* color type */ bps = twobytes >> 8; /* bits/sample */ /* Special case with alpha that is extracted as RGBA. * Note that the cmap+alpha is also extracted as RGBA, * but only if the tRNS chunk exists, which we can't tell * by this simple parser.*/ if (colortype == 4) L_INFO("gray + alpha: will extract as RGBA (spp = 4)\n", __func__); if (colortype == 2) { /* RGB */ spp = 3; } else if (colortype == 6) { /* RGBA */ spp = 4; } else if (colortype == 4) { /* gray + alpha */ spp = 2; bps = 8; /* both the gray and alpha are 8-bit samples */ } else { /* gray (0) or cmap (3) or cmap+alpha (3) */ spp = 1; } if (bps < 1 || bps > 16) { L_ERROR("invalid bps = %d\n", __func__, bps); return 1; } if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) { if (colortype & 1) /* palette */ *piscmap = 1; else *piscmap = 0; } return 0; } /*---------------------------------------------------------------------* * Reading png metadata * *---------------------------------------------------------------------*/ /* * fgetPngResolution() * * Input: fp (file stream opened for read) * &xres, &yres ( resolution in ppi) * Return: 0 if OK; 1 on error * * Notes: * (1) If neither resolution field is set, this is not an error; * the returned resolution values are 0 (designating 'unknown'). * (2) Side-effect: this rewinds the stream. */ l_int32 fgetPngResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { png_uint_32 xres, yres; png_structp png_ptr; png_infop info_ptr; if (pxres) *pxres = 0; if (pyres) *pyres = 0; if (!fp) return ERROR_INT("stream not opened", __func__, 1); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", __func__, 1); /* Make the two required structs */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", __func__, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return ERROR_INT("info_ptr not made", __func__, 1); } /* Set up png setjmp error handling. * Without this, an error calls exit. */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return ERROR_INT("internal png error", __func__, 1); } /* Read the metadata */ rewind(fp); png_init_io(png_ptr, fp); png_read_info(png_ptr, info_ptr); xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); *pxres = (l_int32)((l_float32)xres / 39.37 + 0.5); /* to ppi */ *pyres = (l_int32)((l_float32)yres / 39.37 + 0.5); png_destroy_read_struct(&png_ptr, &info_ptr, NULL); rewind(fp); return 0; } /*! * \brief isPngInterlaced() * * \param[in] filename * \param[out] pinterlaced 1 if interlaced png; 0 otherwise * \return 0 if OK, 1 on error */ l_ok isPngInterlaced(const char *filename, l_int32 *pinterlaced) { l_uint8 buf[32]; FILE *fp; if (!pinterlaced) return ERROR_INT("&interlaced not defined", __func__, 1); *pinterlaced = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (fread(buf, 1, 32, fp) != 32) { fclose(fp); return ERROR_INT_1("data not read", filename, __func__, 1); } fclose(fp); *pinterlaced = (buf[28] == 0) ? 0 : 1; return 0; } /* * \brief fgetPngColormapInfo() * * \param[in] fp file stream opened for read * \param[out] pcmap optional; use NULL to skip * \param[out] ptransparency optional; 1 if colormapped with * transparency, 0 otherwise; use NULL to skip * \return 0 if OK, 1 on error * * Notes: * (1) The transparency information in a png is in the tRNA array, * which is separate from the colormap. If this array exists * and if any element is less than 255, there exists some * transparency. * (2) Side-effect: this rewinds the stream. */ l_ok fgetPngColormapInfo(FILE *fp, PIXCMAP **pcmap, l_int32 *ptransparency) { l_int32 i, cindex, rval, gval, bval, num_palette, num_trans; png_byte bit_depth, color_type; png_bytep trans; png_colorp palette; png_structp png_ptr; png_infop info_ptr; if (pcmap) *pcmap = NULL; if (ptransparency) *ptransparency = 0; if (!pcmap && !ptransparency) return ERROR_INT("no output defined", __func__, 1); if (!fp) return ERROR_INT("stream not opened", __func__, 1); /* Make the two required structs */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", __func__, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return ERROR_INT("info_ptr not made", __func__, 1); } /* Set up png setjmp error handling. * Without this, an error calls exit. */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, NULL); if (pcmap && *pcmap) pixcmapDestroy(pcmap); return ERROR_INT("internal png error", __func__, 1); } /* Read the metadata and check if there is a colormap */ rewind(fp); png_init_io(png_ptr, fp); png_read_info(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); if (color_type != PNG_COLOR_TYPE_PALETTE && color_type != PNG_COLOR_MASK_PALETTE) { png_destroy_read_struct(&png_ptr, &info_ptr, NULL); return 0; } /* Optionally, read the colormap */ if (pcmap) { bit_depth = png_get_bit_depth(png_ptr, info_ptr); png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); *pcmap = pixcmapCreate(bit_depth); /* spp == 1 */ for (cindex = 0; cindex < num_palette; cindex++) { rval = palette[cindex].red; gval = palette[cindex].green; bval = palette[cindex].blue; pixcmapAddColor(*pcmap, rval, gval, bval); } } /* Optionally, look for transparency. Note that the colormap * has been initialized to fully opaque. */ if (ptransparency && png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); if (trans) { for (i = 0; i < num_trans; i++) { if (trans[i] < 255) { /* not fully opaque */ *ptransparency = 1; if (pcmap) pixcmapSetAlpha(*pcmap, i, trans[i]); } } } else { L_ERROR("transparency array not returned\n", __func__); } } png_destroy_read_struct(&png_ptr, &info_ptr, NULL); rewind(fp); return 0; } /*---------------------------------------------------------------------* * Writing png through stream * *---------------------------------------------------------------------*/ /*! * \brief pixWritePng() * * \param[in] filename * \param[in] pix * \param[in] gamma * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Special version for writing png with a specified gamma.
 *          When using pixWrite(), no field is given for gamma.
 * 
*/ l_ok pixWritePng(const char *filename, PIX *pix, l_float32 gamma) { FILE *fp; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (pixWriteStreamPng(fp, pix, gamma)) { fclose(fp); return ERROR_INT_1("pix not written to stream", filename, __func__, 1); } fclose(fp); return 0; } /*! * \brief pixWriteStreamPng() * * \param[in] fp file stream * \param[in] pix * \param[in] gamma use 0.0 if gamma is not defined * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If called from pixWriteStream(), the stream is positioned
 *          at the beginning of the file.
 *      (2) To do sequential writes of png format images to a stream,
 *          use pixWriteStreamPng() directly.
 *      (3) gamma is an optional png chunk.  If no gamma value is to be
 *          placed into the file, use gamma = 0.0.  Otherwise, if
 *          gamma > 0.0, its value is written into the header.
 *      (4) The use of gamma in png is highly problematic.  For an illuminating
 *          discussion, see:  http://hsivonen.iki.fi/png-gamma/
 *      (5) What is the effect/meaning of gamma in the png file?  This
 *          gamma, which we can call the 'source' gamma, is the
 *          inverse of the gamma that was used in enhance.c to brighten
 *          or darken images.  The 'source' gamma is supposed to indicate
 *          the intensity mapping that was done at the time the
 *          image was captured.  Display programs typically apply a
 *          'display' gamma of 2.2 to the output, which is intended
 *          to linearize the intensity based on the response of
 *          thermionic tubes (CRTs).  Flat panel LCDs have typically
 *          been designed to give a similar response as CRTs (call it
 *          "backward compatibility").  The 'display' gamma is
 *          in some sense the inverse of the 'source' gamma.
 *          jpeg encoders attached to scanners and cameras will lighten
 *          the pixels, applying a gamma corresponding to approximately
 *          a square-root relation of output vs input:
 *                output = input^(gamma)
 *          where gamma is often set near 0.4545  (1/gamma is 2.2).
 *          This is stored in the image file.  Then if the display
 *          program reads the gamma, it will apply a display gamma,
 *          typically about 2.2; the product is 1.0, and the
 *          display program produces a linear output.  This works because
 *          the dark colors were appropriately boosted by the scanner,
 *          as described by the 'source' gamma, so they should not
 *          be further boosted by the display program.
 *      (6) As an example, with xv and display, if no gamma is stored,
 *          the program acts as if gamma were 0.4545, multiplies this by 2.2,
 *          and does a linear rendering.  Taking this as a baseline
 *          brightness, if the stored gamma is:
 *              > 0.4545, the image is rendered lighter than baseline
 *              < 0.4545, the image is rendered darker than baseline
 *          In contrast, gqview seems to ignore the gamma chunk in png.
 *      (7) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
 *          and 32.  However, it is possible, and in some cases desirable,
 *          to write out a png file using an rgb pix that has 24 bpp.
 *          For example, the open source xpdf SplashBitmap class generates
 *          24 bpp rgb images.  Consequently, we enable writing 24 bpp pix
 *          without converting it to 32 bpp first.  Caution: do not call
 *          pixSetPadBits(), because the alignment is wrong and you may
 *          erase part of the last pixel on each line.
 *      (8) If the pix has a colormap, it is written to file.  In most
 *          situations, the alpha component is 255 for each colormap entry,
 *          which is opaque and indicates that it should be ignored.
 *          However, if any alpha component is not 255, it is assumed that
 *          the alpha values are valid, and they are written to the png
 *          file in a tRNS segment.  On readback, the tRNS segment is
 *          identified, and the colormapped image with alpha is converted
 *          to a 4 spp rgba image.
 * 
*/ l_ok pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma) { char commentstring[] = "Comment"; l_int32 i, j, k, wpl, d, spp, compval, valid; l_int32 cmflag, opaque, max_trans, ncolors; l_int32 *rmap, *gmap, *bmap, *amap; l_uint32 *data, *ppixel; png_byte bit_depth, color_type; png_byte alpha[256]; png_uint_32 w, h; png_uint_32 xres, yres; png_bytep *row_pointers; png_bytep rowbuffer; png_structp png_ptr; png_infop info_ptr; png_colorp palette; PIX *pix1; PIXCMAP *cmap; char *text; if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); w = pixGetWidth(pix); h = pixGetHeight(pix); d = pixGetDepth(pix); spp = pixGetSpp(pix); /* A cmap validity check should prevent low-level colormap errors. */ if ((cmap = pixGetColormap(pix))) { cmflag = 1; pixcmapIsValid(cmap, pix, &valid); if (!valid) return ERROR_INT("colormap is not valid", __func__, 1); } else { cmflag = 0; } /* Do not set pad bits for d = 24 ! */ if (d != 24) pixSetPadBits(pix, 0); /* Set the color type and bit depth. */ if (d == 32 && spp == 4) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGBA; /* 6 */ cmflag = 0; /* ignore if it exists */ } else if (d == 24 || d == 32) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGB; /* 2 */ cmflag = 0; /* ignore if it exists */ } else { bit_depth = d; color_type = PNG_COLOR_TYPE_GRAY; /* 0 */ } if (cmflag) color_type = PNG_COLOR_TYPE_PALETTE; /* 3 */ #if DEBUG_WRITE lept_stderr("cmflag = %d, bit_depth = %d, color_type = %d\n", cmflag, bit_depth, color_type); #endif /* DEBUG_WRITE */ /* Allocate the 2 png data structures */ if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", __func__, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return ERROR_INT("info_ptr not made", __func__, 1); } /* Set up png setjmp error handling */ pix1 = NULL; row_pointers = NULL; if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); LEPT_FREE(row_pointers); pixDestroy(&pix1); return ERROR_INT("internal png error", __func__, 1); } png_init_io(png_ptr, fp); /* With best zlib compression (9), get between 1 and 10% improvement * over default (6), but the compression is 3 to 10 times slower. * Use the zlib default (6) as our default compression unless * pix->special falls in the range [10 ... 19]; then subtract 10 * to get the compression value. */ compval = Z_DEFAULT_COMPRESSION; if (pix->special >= 10 && pix->special < 20) compval = pix->special - 10; png_set_compression_level(png_ptr, compval); png_set_IHDR(png_ptr, info_ptr, w, h, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); /* Store resolution in ppm, if known */ xres = (png_uint_32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); yres = (png_uint_32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); if ((xres == 0) || (yres == 0)) png_set_pHYs(png_ptr, info_ptr, 0, 0, PNG_RESOLUTION_UNKNOWN); else png_set_pHYs(png_ptr, info_ptr, xres, yres, PNG_RESOLUTION_METER); if (cmflag) { /* Make and save the palette */ ncolors = pixcmapGetCount(cmap); palette = (png_colorp)LEPT_CALLOC(ncolors, sizeof(png_color)); pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap); for (i = 0; i < ncolors; i++) { palette[i].red = (png_byte)rmap[i]; palette[i].green = (png_byte)gmap[i]; palette[i].blue = (png_byte)bmap[i]; alpha[i] = (png_byte)amap[i]; } LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); LEPT_FREE(amap); png_set_PLTE(png_ptr, info_ptr, palette, (int)ncolors); LEPT_FREE(palette); /* Add the tRNS chunk. If the non-opaque colors are listed * first in the colormap, as in the spec, we can use that in * the 4th arg of png_set_tRNS. Otherwise, transparency will * be lost for some colors. To prevent that, see the comments * in pixcmapNonOpaqueColorsInfo(). */ pixcmapIsOpaque(cmap, &opaque); if (!opaque) { /* alpha channel has some transparency; assume valid */ pixcmapNonOpaqueColorsInfo(cmap, NULL, &max_trans, NULL); png_set_tRNS(png_ptr, info_ptr, (png_bytep)alpha, max_trans + 1, NULL); } } /* 0.4545 is treated as the default by some image * display programs (not gqview). A value > 0.4545 will * lighten an image as displayed by xv, display, etc. */ if (gamma > 0.0) png_set_gAMA(png_ptr, info_ptr, (l_float64)gamma); if ((text = pixGetText(pix))) { png_text text_chunk; text_chunk.compression = PNG_TEXT_COMPRESSION_NONE; text_chunk.key = commentstring; text_chunk.text = text; text_chunk.text_length = strlen(text); #ifdef PNG_ITXT_SUPPORTED text_chunk.itxt_length = 0; text_chunk.lang = NULL; text_chunk.lang_key = NULL; #endif png_set_text(png_ptr, info_ptr, &text_chunk, 1); } /* Write header and palette info */ png_write_info(png_ptr, info_ptr); if ((d != 32) && (d != 24)) { /* not rgb color */ /* Generate a temporary pix with bytes swapped. * For writing a 1 bpp image as png: * ~ if no colormap, invert the data, because png writes * black as 0 * ~ if colormapped, do not invert the data; the two RGBA * colors can have any value. */ if (d == 1 && !cmap) { pix1 = pixInvert(NULL, pix); pixEndianByteSwap(pix1); } else { pix1 = pixEndianByteSwapNew(pix); } if (!pix1) { png_destroy_write_struct(&png_ptr, &info_ptr); return ERROR_INT("pix1 not made", __func__, 1); } /* Make and assign array of image row pointers */ row_pointers = (png_bytep *)LEPT_CALLOC(h, sizeof(png_bytep)); wpl = pixGetWpl(pix1); data = pixGetData(pix1); for (i = 0; i < h; i++) row_pointers[i] = (png_bytep)(data + i * wpl); png_set_rows(png_ptr, info_ptr, row_pointers); /* Transfer the data */ png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); LEPT_FREE(row_pointers); pixDestroy(&pix1); png_destroy_write_struct(&png_ptr, &info_ptr); return 0; } /* For rgb and rgba, compose and write a row at a time */ data = pixGetData(pix); wpl = pixGetWpl(pix); if (d == 24) { /* See note 7 above */ for (i = 0; i < h; i++) { ppixel = data + i * wpl; png_write_rows(png_ptr, (png_bytepp)&ppixel, 1); } } else { /* 32 bpp rgb and rgba. If spp = 4, write the alpha channel */ rowbuffer = (png_bytep)LEPT_CALLOC(w, 4); for (i = 0; i < h; i++) { ppixel = data + i * wpl; for (j = k = 0; j < w; j++) { rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); if (spp == 4) rowbuffer[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); ppixel++; } png_write_rows(png_ptr, &rowbuffer, 1); } LEPT_FREE(rowbuffer); } png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); return 0; } /*! * \brief pixSetZlibCompression() * * \param[in] pix * \param[in] compval zlib compression value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Valid zlib compression values are in the interval [0 ... 9],
 *          where, as defined in zlib.h:
 *            0         Z_NO_COMPRESSION
 *            1         Z_BEST_SPEED    (poorest compression)
 *            9         Z_BEST_COMPRESSION
 *          For the default value, use either of these:
 *            6         Z_DEFAULT_COMPRESSION
 *           -1         (resolves to Z_DEFAULT_COMPRESSION)
 *      (2) If you use the defined constants in zlib.h instead of the
 *          compression integers given above, you must include zlib.h.
 * 
*/ l_ok pixSetZlibCompression(PIX *pix, l_int32 compval) { if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (compval < 0 || compval > 9) { L_ERROR("Invalid zlib comp val; using default\n", __func__); compval = Z_DEFAULT_COMPRESSION; } pixSetSpecial(pix, 10 + compval); /* valid range [10 ... 19] */ return 0; } /*---------------------------------------------------------------------* * Set flag for stripping 16 bits on reading * *---------------------------------------------------------------------*/ /*! * \brief l_pngSetReadStrip16To8() * * \param[in] flag 1 for stripping 16 bpp to 8 bpp on reading; * 0 for leaving 16 bpp * \return void */ void l_pngSetReadStrip16To8(l_int32 flag) { var_PNG_STRIP_16_TO_8 = flag; } /*-------------------------------------------------------------------------* * Memio utility * * libpng read/write callback replacements for performing memory I/O * * * * Copyright (C) 2017 Milner Technologies, Inc. This content is a * * component of leptonica and is provided under the terms of the * * Leptonica license. * *-------------------------------------------------------------------------*/ /*! A node in a linked list of memory buffers that hold I/O content */ struct MemIOData { char* m_Buffer; /*!< pointer to this node's I/O content */ l_int32 m_Count; /*!< number of I/O content bytes read or written */ l_int32 m_Size; /*!< allocated size of m_buffer */ struct MemIOData *m_Next; /*!< pointer to the next node in the list; */ /*!< zero if this is the last node */ struct MemIOData *m_Last; /*!< pointer to the last node in the linked */ /*!< list. The last node is where new */ /*!< content is written. */ }; typedef struct MemIOData MEMIODATA; static void memio_png_write_data(png_structp png_ptr, png_bytep data, png_size_t length); static void memio_png_flush(MEMIODATA* pthing); static void memio_png_read_data(png_structp png_ptr, png_bytep outBytes, png_size_t byteCountToRead); static void memio_free(MEMIODATA* pthing); static const l_int32 MEMIO_BUFFER_SIZE = 8192; /*! buffer alloc size */ /* * \brief memio_png_write_data() * * \param[in] png_ptr * \param[in] data * \param[in] len size of array data in bytes * *
 * Notes:
 *      (1) This is a libpng callback for writing an image into a
 *          linked list of memory buffers.
 * 
*/ static void memio_png_write_data(png_structp png_ptr, png_bytep data, png_size_t len) { MEMIODATA *thing, *last; l_int32 written = 0; l_int32 remainingSpace, remainingToWrite; thing = (struct MemIOData*)png_get_io_ptr(png_ptr); last = (struct MemIOData*)thing->m_Last; if (last->m_Buffer == NULL) { if (len > MEMIO_BUFFER_SIZE) { last->m_Buffer = (char *)LEPT_MALLOC(len); memcpy(last->m_Buffer, data, len); last->m_Size = last->m_Count = len; return; } last->m_Buffer = (char *)LEPT_MALLOC(MEMIO_BUFFER_SIZE); last->m_Size = MEMIO_BUFFER_SIZE; } while (written < len) { if (last->m_Count == last->m_Size) { MEMIODATA* next = (MEMIODATA *)LEPT_MALLOC(sizeof(MEMIODATA)); next->m_Next = NULL; next->m_Count = 0; next->m_Last = next; last->m_Next = next; last = thing->m_Last = next; last->m_Buffer = (char *)LEPT_MALLOC(MEMIO_BUFFER_SIZE); last->m_Size = MEMIO_BUFFER_SIZE; } remainingSpace = last->m_Size - last->m_Count; remainingToWrite = len - written; if (remainingSpace < remainingToWrite) { memcpy(last->m_Buffer + last->m_Count, data + written, remainingSpace); written += remainingSpace; last->m_Count += remainingSpace; } else { memcpy(last->m_Buffer + last->m_Count, data + written, remainingToWrite); written += remainingToWrite; last->m_Count += remainingToWrite; } } } /* * \brief memio_png_flush() * * \param[in] pthing * *
 * Notes:
 *      (1) This consolidates write buffers into a single buffer at the
 *          haed of the link list of buffers.
 * 
*/ static void memio_png_flush(MEMIODATA *pthing) { l_int32 amount = 0; l_int32 copied = 0; MEMIODATA *buffer = 0; char *data = 0; /* If the data is in one buffer, give the buffer to the user. */ if (pthing->m_Next == NULL) return; /* Consolidate multiple buffers into one new one; add the buffer * sizes together. */ amount = pthing->m_Count; buffer = pthing->m_Next; while (buffer != NULL) { amount += buffer->m_Count; buffer = buffer->m_Next; } /* Copy data to a new buffer. */ data = (char *)LEPT_MALLOC(amount); memcpy(data, pthing->m_Buffer, pthing->m_Count); copied = pthing->m_Count; LEPT_FREE(pthing->m_Buffer); pthing->m_Buffer = NULL; /* Don't delete original "thing" because we don't control it. */ buffer = pthing->m_Next; pthing->m_Next = NULL; while (buffer != NULL && copied < amount) { MEMIODATA* old; memcpy(data + copied, buffer->m_Buffer, buffer->m_Count); copied += buffer->m_Count; old = buffer; buffer = buffer->m_Next; LEPT_FREE(old->m_Buffer); LEPT_FREE(old); } pthing->m_Buffer = data; pthing->m_Count = copied; pthing->m_Size = amount; return; } /* * \brief memio_png_read_data() * * \param[in] png_ptr * \param[in] outBytes * \param[in] byteCountToRead * *
 * Notes:
 *      (1) This is a libpng callback that reads an image from a single
 *          memory buffer.
 * 
*/ static void memio_png_read_data(png_structp png_ptr, png_bytep outBytes, png_size_t byteCountToRead) { MEMIODATA *thing; thing = (MEMIODATA *)png_get_io_ptr(png_ptr); if (byteCountToRead > (thing->m_Size - thing->m_Count)) { png_error(png_ptr, "read error in memio_png_read_data"); } memcpy(outBytes, thing->m_Buffer + thing->m_Count, byteCountToRead); thing->m_Count += byteCountToRead; } /* * \brief memio_free() * * \param[in] pthing * *
 * Notes:
 *      (1) This frees all the write buffers in the linked list.  It must
 *          be done before exiting the pixWriteMemPng().
 * 
*/ static void memio_free(MEMIODATA* pthing) { MEMIODATA *buffer, *old; if (pthing->m_Buffer != NULL) LEPT_FREE(pthing->m_Buffer); pthing->m_Buffer = NULL; buffer = pthing->m_Next; while (buffer != NULL) { old = buffer; buffer = buffer->m_Next; if (old->m_Buffer != NULL) LEPT_FREE(old->m_Buffer); LEPT_FREE(old); } } /*---------------------------------------------------------------------* * Reading png from memory * *---------------------------------------------------------------------*/ /*! * \brief pixReadMemPng() * * \param[in] filedata png compressed data in memory * \param[in] filesize number of bytes in data * \return pix, or NULL on error * *
 * Notes:
 *      (1) See pixReastreamPng().
 * 
*/ PIX * pixReadMemPng(const l_uint8 *filedata, size_t filesize) { l_uint8 byte; l_int32 i, j, k, index, ncolors, rval, gval, bval, valid; l_int32 wpl, d, spp, cindex, bitval, bival, quadval, tRNS; l_uint32 png_transforms; l_uint32 *data, *line, *ppixel; int num_palette, num_text, num_trans; png_byte bit_depth, color_type, channels; png_uint_32 w, h, rowbytes, xres, yres; png_bytep rowptr, trans; png_bytep *row_pointers; png_structp png_ptr; png_infop info_ptr, end_info; png_colorp palette; png_textp text_ptr; /* ptr to text_chunk */ MEMIODATA state; PIX *pix, *pix1; PIXCMAP *cmap; if (!filedata) return (PIX *)ERROR_PTR("filedata not defined", __func__, NULL); if (filesize < 1) return (PIX *)ERROR_PTR("invalid filesize", __func__, NULL); state.m_Next = 0; state.m_Count = 0; state.m_Last = &state; state.m_Buffer = (char*)filedata; state.m_Size = filesize; pix = NULL; /* Allocate the 3 data structures */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return (PIX *)ERROR_PTR("png_ptr not made", __func__, NULL); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (PIX *)ERROR_PTR("info_ptr not made", __func__, NULL); } if ((end_info = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (PIX *)ERROR_PTR("end_info not made", __func__, NULL); } /* Set up png setjmp error handling */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("internal png error", __func__, NULL); } png_set_read_fn(png_ptr, &state, memio_png_read_data); /* ---------------------------------------------------------- * * Set the transforms flags. Whatever happens here, * NEVER invert 1 bpp using PNG_TRANSFORM_INVERT_MONO. * Also, do not use PNG_TRANSFORM_EXPAND, which would * expand all images with bpp < 8 to 8 bpp. * ---------------------------------------------------------- */ /* To strip 16 --> 8 bit depth, use PNG_TRANSFORM_STRIP_16 */ if (var_PNG_STRIP_16_TO_8 == 1) { /* our default */ png_transforms = PNG_TRANSFORM_STRIP_16; } else { png_transforms = PNG_TRANSFORM_IDENTITY; L_INFO("not stripping 16 --> 8 in png reading\n", __func__); } /* Read it */ png_read_png(png_ptr, info_ptr, png_transforms, NULL); row_pointers = png_get_rows(png_ptr, info_ptr); w = png_get_image_width(png_ptr, info_ptr); h = png_get_image_height(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); rowbytes = png_get_rowbytes(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); channels = png_get_channels(png_ptr, info_ptr); spp = channels; tRNS = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ? 1 : 0; if (spp == 1) { d = bit_depth; } else { /* spp == 2 (gray + alpha), spp == 3 (rgb), spp == 4 (rgba) */ d = 4 * bit_depth; } /* Remove if/when this is implemented for all bit_depths */ if (spp == 3 && bit_depth != 8) { lept_stderr("Help: spp = 3 and depth = %d != 8\n!!", bit_depth); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("not implemented for this depth", __func__, NULL); } cmap = NULL; if (color_type == PNG_COLOR_TYPE_PALETTE || color_type == PNG_COLOR_MASK_PALETTE) { /* generate a colormap */ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); cmap = pixcmapCreate(d); /* spp == 1 */ for (cindex = 0; cindex < num_palette; cindex++) { rval = palette[cindex].red; gval = palette[cindex].green; bval = palette[cindex].blue; pixcmapAddColor(cmap, rval, gval, bval); } } if ((pix = pixCreate(w, h, d)) == NULL) { pixcmapDestroy(&cmap); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("pix not made", __func__, NULL); } pixSetInputFormat(pix, IFF_PNG); wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetSpp(pix, spp); if (pixSetColormap(pix, cmap)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } if (spp == 1 && !tRNS) { /* copy straight from buffer to pix */ for (i = 0; i < h; i++) { line = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < rowbytes; j++) { SET_DATA_BYTE(line, j, rowptr[j]); } } } else if (spp == 2) { /* grayscale + alpha; convert to RGBA */ L_INFO("converting (gray + alpha) ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { /* Copy gray value into r, g and b */ SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } pixSetSpp(pix, 4); /* we do not support 2 spp pix */ } else if (spp == 3 || spp == 4) { for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); if (spp == 4) SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } } /* Special spp == 1 cases with transparency: * (1) 8 bpp without colormap; assume full transparency * (2) 1 bpp with colormap + trans array (for alpha) * (3) 2 bpp with colormap + trans array (for alpha) * (4) 4 bpp with colormap + trans array (for alpha) * (5) 8 bpp with colormap + trans array (for alpha) * These all require converting to RGBA */ if (spp == 1 && tRNS) { if (!cmap) { /* Case 1: make fully transparent RGBA image */ L_INFO("transparency, 1 spp, no colormap, no transparency array: " "convention is fully transparent image\n", __func__); L_INFO("converting (fully transparent 1 spp) ==> RGBA\n", __func__); pixDestroy(&pix); pix = pixCreate(w, h, 32); /* init to alpha = 0 (transparent) */ pixSetSpp(pix, 4); } else { L_INFO("converting (cmap + alpha) ==> RGBA\n", __func__); /* Grab the transparency array */ png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); if (!trans) { /* invalid png file */ pixDestroy(&pix); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("cmap, tRNS, but no transparency array", __func__, NULL); } /* Save the cmap and destroy the pix */ cmap = pixcmapCopy(pixGetColormap(pix)); ncolors = pixcmapGetCount(cmap); pixDestroy(&pix); /* Start over with 32 bit RGBA */ pix = pixCreate(w, h, 32); wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetSpp(pix, 4); #if DEBUG_READ lept_stderr("ncolors = %d, num_trans = %d\n", ncolors, num_trans); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (i < num_trans) { lept_stderr("(r,g,b,a) = (%d,%d,%d,%d)\n", rval, gval, bval, trans[i]); } else { lept_stderr("(r,g,b,a) = (%d,%d,%d,<<255>>)\n", rval, gval, bval); } } #endif /* DEBUG_READ */ /* Extract the data and convert to RGBA */ if (d == 1) { /* Case 2: 1 bpp with transparency (usually) behind white */ L_INFO("converting 1 bpp cmap with alpha ==> RGBA\n", __func__); if (num_trans == 1) L_INFO("num_trans = 1; second color opaque by default\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 8 && index < w; k++, index++) { bitval = (byte >> (7 - k)) & 1; pixcmapGetColor(cmap, bitval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, bitval < num_trans ? trans[bitval] : 255); ppixel++; } } } } else if (d == 2) { /* Case 3: 2 bpp with cmap and associated transparency */ L_INFO("converting 2 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 4 && index < w; k++, index++) { bival = (byte >> 2 * (3 - k)) & 3; pixcmapGetColor(cmap, bival, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) * according to the spec: * http://www.w3.org/TR/PNG/#11tRNS */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, bival < num_trans ? trans[bival] : 255); ppixel++; } } } } else if (d == 4) { /* Case 4: 4 bpp with cmap and associated transparency */ L_INFO("converting 4 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0, index = 0; j < rowbytes; j++) { byte = rowptr[j]; for (k = 0; k < 2 && index < w; k++, index++) { quadval = (byte >> 4 * (1 - k)) & 0xf; pixcmapGetColor(cmap, quadval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, quadval < num_trans ? trans[quadval] : 255); ppixel++; } } } } else if (d == 8) { /* Case 5: 8 bpp with cmap and associated transparency */ L_INFO("converting 8 bpp cmap with alpha ==> RGBA\n", __func__); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < w; j++) { index = rowptr[j]; pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) * according to the spec: * http://www.w3.org/TR/PNG/#11tRNS */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, index < num_trans ? trans[index] : 255); ppixel++; } } } else { L_ERROR("spp == 1, cmap, trans array, invalid depth: %d\n", __func__, d); } pixcmapDestroy(&cmap); } } #if DEBUG_READ if (cmap) { for (i = 0; i < 16; i++) { lept_stderr("[%d] = %d\n", i, ((l_uint8 *)(cmap->array))[i]); } } #endif /* DEBUG_READ */ /* Final adjustments for bpp = 1. * + If there is no colormap, the image must be inverted because * png stores black pixels as 0. * + We have already handled the case of cmapped, 1 bpp pix * with transparency, where the output pix is 32 bpp RGBA. * If there is no transparency but the pix has a colormap, * we remove the colormap, because functions operating on * 1 bpp images in leptonica assume no colormap. * + The colormap must be removed in such a way that the pixel * values are not changed. If the values are only black and * white, we return a 1 bpp image; if gray, return an 8 bpp pix; * otherwise, return a 32 bpp rgb pix. * * Note that we cannot use the PNG_TRANSFORM_INVERT_MONO flag * to do the inversion, because that flag (since version 1.0.9) * inverts 8 bpp grayscale as well, which we don't want to do. * (It also doesn't work if there is a colormap.) * * Note that if the input png is a 1-bit with colormap and * transparency, it has already been rendered as a 32 bpp, * spp = 4 rgba pix. */ if (pixGetDepth(pix) == 1) { if (!cmap) { pixInvert(pix, pix); } else { pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pix); pix = pix1; } } xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ /* Get the text if there is any */ png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); if (num_text && text_ptr) pixSetText(pix, text_ptr->text); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); /* Final validity check on the colormap */ if ((cmap = pixGetColormap(pix)) != NULL) { pixcmapIsValid(cmap, pix, &valid); if (!valid) { pixDestroy(&pix); return (PIX *)ERROR_PTR("colormap is not valid", __func__, NULL); } } pixSetPadBits(pix, 0); return pix; } /*---------------------------------------------------------------------* * Writing png to memory * *---------------------------------------------------------------------*/ /*! * \brief pixWriteMemPng() * * \param[out] pfiledata png encoded data of pix * \param[out] pfilesize size of png encoded data * \param[in] pix * \param[in] gamma use 0.0 if gamma is not defined * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See pixWriteStreamPng()
 * 
*/ l_ok pixWriteMemPng(l_uint8 **pfiledata, size_t *pfilesize, PIX *pix, l_float32 gamma) { char commentstring[] = "Comment"; l_int32 i, j, k, wpl, d, spp, cmflag, opaque, ncolors, compval, valid; l_int32 *rmap, *gmap, *bmap, *amap; l_uint32 *data, *ppixel; png_byte bit_depth, color_type; png_byte alpha[256]; png_uint_32 w, h, xres, yres; png_bytep rowbuffer; png_structp png_ptr; png_infop info_ptr; png_colorp palette; PIX *pix1; PIXCMAP *cmap; char *text; MEMIODATA state; if (pfiledata) *pfiledata = NULL; if (pfilesize) *pfilesize = 0; if (!pfiledata) return ERROR_INT("&filedata not defined", __func__, 1); if (!pfilesize) return ERROR_INT("&filesize not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); state.m_Buffer = 0; state.m_Size = 0; state.m_Next = 0; state.m_Count = 0; state.m_Last = &state; w = pixGetWidth(pix); h = pixGetHeight(pix); d = pixGetDepth(pix); spp = pixGetSpp(pix); /* A cmap validity check should prevent low-level colormap errors. */ if ((cmap = pixGetColormap(pix))) { cmflag = 1; pixcmapIsValid(cmap, pix, &valid); if (!valid) return ERROR_INT("colormap is not valid", __func__, 1); } else { cmflag = 0; } /* Do not set pad bits for d = 24 ! */ if (d != 24) pixSetPadBits(pix, 0); /* Set the color type and bit depth. */ if (d == 32 && spp == 4) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGBA; /* 6 */ cmflag = 0; /* ignore if it exists */ } else if (d == 24 || d == 32) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGB; /* 2 */ cmflag = 0; /* ignore if it exists */ } else { bit_depth = d; color_type = PNG_COLOR_TYPE_GRAY; /* 0 */ } if (cmflag) color_type = PNG_COLOR_TYPE_PALETTE; /* 3 */ #if DEBUG_WRITE lept_stderr("cmflag = %d, bit_depth = %d, color_type = %d\n", cmflag, bit_depth, color_type); #endif /* DEBUG_WRITE */ /* Allocate the 2 data structures */ if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", __func__, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return ERROR_INT("info_ptr not made", __func__, 1); } /* Set up png setjmp error handling */ pix1 = NULL; if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); pixDestroy(&pix1); return ERROR_INT("internal png error", __func__, 1); } png_set_write_fn(png_ptr, &state, memio_png_write_data, (png_flush_ptr)NULL); /* With best zlib compression (9), get between 1 and 10% improvement * over default (6), but the compression is 3 to 10 times slower. * Use the zlib default (6) as our default compression unless * pix->special falls in the range [10 ... 19]; then subtract 10 * to get the compression value. */ compval = Z_DEFAULT_COMPRESSION; if (pix->special >= 10 && pix->special < 20) compval = pix->special - 10; png_set_compression_level(png_ptr, compval); png_set_IHDR(png_ptr, info_ptr, w, h, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); /* Store resolution in ppm, if known */ xres = (png_uint_32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); yres = (png_uint_32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); if ((xres == 0) || (yres == 0)) png_set_pHYs(png_ptr, info_ptr, 0, 0, PNG_RESOLUTION_UNKNOWN); else png_set_pHYs(png_ptr, info_ptr, xres, yres, PNG_RESOLUTION_METER); if (cmflag) { /* Make and save the palette */ ncolors = pixcmapGetCount(cmap); palette = (png_colorp)LEPT_CALLOC(ncolors, sizeof(png_color)); pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap); for (i = 0; i < ncolors; i++) { palette[i].red = (png_byte)rmap[i]; palette[i].green = (png_byte)gmap[i]; palette[i].blue = (png_byte)bmap[i]; alpha[i] = (png_byte)amap[i]; } LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); LEPT_FREE(amap); png_set_PLTE(png_ptr, info_ptr, palette, (int)ncolors); LEPT_FREE(palette); pixcmapIsOpaque(cmap, &opaque); if (!opaque) /* alpha channel has some transparency; assume valid */ png_set_tRNS(png_ptr, info_ptr, (png_bytep)alpha, (int)ncolors, NULL); } /* 0.4545 is treated as the default by some image * display programs (not gqview). A value > 0.4545 will * lighten an image as displayed by xv, display, etc. */ if (gamma > 0.0) png_set_gAMA(png_ptr, info_ptr, (l_float64)gamma); if ((text = pixGetText(pix))) { png_text text_chunk; text_chunk.compression = PNG_TEXT_COMPRESSION_NONE; text_chunk.key = commentstring; text_chunk.text = text; text_chunk.text_length = strlen(text); #ifdef PNG_ITXT_SUPPORTED text_chunk.itxt_length = 0; text_chunk.lang = NULL; text_chunk.lang_key = NULL; #endif png_set_text(png_ptr, info_ptr, &text_chunk, 1); } /* Write header and palette info */ png_write_info(png_ptr, info_ptr); if ((d != 32) && (d != 24)) { /* not rgb color */ /* Generate a temporary pix with bytes swapped. * For writing a 1 bpp image as png: * ~ if no colormap, invert the data, because png writes * black as 0 * ~ if colormapped, do not invert the data; the two RGBA * colors can have any value. */ if (d == 1 && !cmap) { pix1 = pixInvert(NULL, pix); pixEndianByteSwap(pix1); } else { pix1 = pixEndianByteSwapNew(pix); } if (!pix1) { png_destroy_write_struct(&png_ptr, &info_ptr); memio_free(&state); return ERROR_INT("pix1 not made", __func__, 1); } /* Transfer the data */ wpl = pixGetWpl(pix1); data = pixGetData(pix1); for (i = 0; i < h; i++) png_write_row(png_ptr, (png_bytep)(data + i * wpl)); png_write_end(png_ptr, info_ptr); pixDestroy(&pix1); png_destroy_write_struct(&png_ptr, &info_ptr); memio_png_flush(&state); *pfiledata = (l_uint8 *)state.m_Buffer; state.m_Buffer = 0; *pfilesize = state.m_Count; memio_free(&state); return 0; } /* For rgb and rgba, compose and write a row at a time */ data = pixGetData(pix); wpl = pixGetWpl(pix); if (d == 24) { /* See note 7 in pixWriteStreamPng() */ for (i = 0; i < h; i++) { ppixel = data + i * wpl; png_write_rows(png_ptr, (png_bytepp)&ppixel, 1); } } else { /* 32 bpp rgb and rgba. If spp = 4, write the alpha channel */ rowbuffer = (png_bytep)LEPT_CALLOC(w, 4); for (i = 0; i < h; i++) { ppixel = data + i * wpl; for (j = k = 0; j < w; j++) { rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); if (spp == 4) rowbuffer[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); ppixel++; } png_write_rows(png_ptr, &rowbuffer, 1); } LEPT_FREE(rowbuffer); } png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); memio_png_flush(&state); *pfiledata = (l_uint8 *)state.m_Buffer; state.m_Buffer = 0; *pfilesize = state.m_Count; memio_free(&state); return 0; } /* --------------------------------------------*/ #endif /* HAVE_LIBPNG */ /* --------------------------------------------*/ leptonica-1.86.0/src/pngiostub.c000066400000000000000000000113631506303110300165250ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pngiostub.c *
 *
 *     Stubs for pngio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !HAVE_LIBPNG /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamPng(FILE *fp) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderPng(const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok freadHeaderPng(FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemPng(const l_uint8 *data, size_t size, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetPngResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok isPngInterlaced(const char *filename, l_int32 *pinterlaced) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok fgetPngColormapInfo(FILE *fp, PIXCMAP **pcmap, l_int32 *ptransparency) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWritePng(const char *filename, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixSetZlibCompression(PIX *pix, l_int32 compval) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ void l_pngSetReadStrip16To8(l_int32 flag) { L_ERROR("function not present\n", __func__); return; } /* ----------------------------------------------------------------------*/ PIX * pixReadMemPng(const l_uint8 *filedata, size_t filesize) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemPng(l_uint8 **pfiledata, size_t *pfilesize, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBPNG */ /* --------------------------------------------*/ leptonica-1.86.0/src/pnmio.c000066400000000000000000001436631506303110300156460ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pnmio.c *
 *
 *      Stream interface
 *          PIX             *pixReadStreamPnm()
 *          l_int32          readHeaderPnm()
 *          l_int32          freadHeaderPnm()
 *          l_int32          pixWriteStreamPnm()
 *          l_int32          pixWriteStreamAsciiPnm()
 *          l_int32          pixWriteStreamPam()
 *
 *      Read/write to memory
 *          PIX             *pixReadMemPnm()
 *          l_int32          readHeaderMemPnm()
 *          l_int32          pixWriteMemPnm()
 *          l_int32          pixWriteMemPam()
 *
 *      Local helpers
 *          static l_int32   pnmReadNextAsciiValue();
 *          static l_int32   pnmReadNextNumber();
 *          static l_int32   pnmReadNextString();
 *          static l_int32   pnmSkipCommentLines();
 *
 *      These are here by popular demand, with the help of Mattias
 *      Kregert (mattias@kregert.se), who provided the first implementation.
 *
 *      The pnm formats are exceedingly simple, because they have
 *      no compression and no colormaps.  They support images that
 *      are 1 bpp; 2, 4, 8 and 16 bpp grayscale; and rgb.
 *
 *      The original pnm formats ("ASCII") are included for completeness,
 *      but their use is deprecated for all but tiny iconic images.
 *      They are extremely wasteful of memory; for example, the P1 binary
 *      ASCII format is 16 times as big as the packed uncompressed
 *      format, because 2 characters are used to represent every bit
 *      (pixel) in the image.  Reading is slow because we check for extra
 *      white space and EOL at every sample value.
 *
 *      The packed pnm formats ("raw") give file sizes similar to
 *      bmp files, which are uncompressed packed.  However, bmp
 *      are more flexible, because they can support colormaps.
 *
 *      We don't differentiate between the different types ("pbm",
 *      "pgm", "ppm") at the interface level, because this is really a
 *      "distinction without a difference."  You read a file, you get
 *      the appropriate Pix.  You write a file from a Pix, you get the
 *      appropriate type of file.  If there is a colormap on the Pix,
 *      and the Pix is more than 1 bpp, you get either an 8 bpp pgm
 *      or a 24 bpp RGB pnm, depending on whether the colormap colors
 *      are gray or rgb, respectively.
 *
 *      This follows the general policy that the I/O routines don't
 *      make decisions about the content of the image -- you do that
 *      with image processing before you write it out to file.
 *      The I/O routines just try to make the closest connection
 *      possible between the file and the Pix in memory.
 *
 *      On systems like Windows without fmemopen() and open_memstream(),
 *      we write data to a temp file and read it back for operations
 *      between pix and compressed-data, such as pixReadMemPnm() and
 *      pixWriteMemPnm().
 *
 *      The P7 format is new. It introduced a header with multiple
 *      lines containing distinct tags for the various fields.
 *      See: http://netpbm.sourceforge.net/doc/pam.html
 *
 *        WIDTH          ; mandatory, exactly once
 *        HEIGHT         ; mandatory, exactly once
 *        DEPTH          ; mandatory, exactly once,
 *                            ; its meaning is equivalent to spp
 *        MAXVAL         ; mandatory, one of 1, 3, 15, 255 or 65535
 *        TUPLTYPE    ; optional; BLACKANDWHITE, GRAYSCALE, RGB
 *                            ; and optional suffix _ALPHA, e.g. RGB_ALPHA
 *        ENDHDR              ; mandatory, last header line
 *
 *      Reading BLACKANDWHITE_ALPHA and GRAYSCALE_ALPHA, which have a DEPTH
 *      value of 2, is supported. The original image is converted to a Pix
 *      with 32-bpp and alpha channel (spp == 4).
 *
 *      Writing P7 format is currently selected for 32-bpp with alpha
 *      channel, i.e. for Pix which have spp == 4, using pixWriteStreamPam().
 *
 *      JÃŧrgen BuchmÃŧller provided the implementation for the P7 (pam) format.
 *
 *      Giulio Lunati made an elegant reimplementation of the static helper
 *      functions using fscanf() instead of fseek(), so that it works with
 *      pnm data from stdin.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PNMIO /* defined in environ.h */ /* --------------------------------------------*/ static l_int32 pnmReadNextAsciiValue(FILE *fp, l_int32 *pval); static l_int32 pnmReadNextNumber(FILE *fp, l_int32 *pval); static l_int32 pnmReadNextString(FILE *fp, char *buff, l_int32 size); static l_int32 pnmSkipCommentLines(FILE *fp); /* a sanity check on the size read from file */ static const l_int32 MAX_PNM_WIDTH = 100000; static const l_int32 MAX_PNM_HEIGHT = 100000; /*--------------------------------------------------------------------* * Stream interface * *--------------------------------------------------------------------*/ /*! * \brief pixReadStreamPnm() * * \param[in] fp file stream opened for read * \return pix, or NULL on error */ PIX * pixReadStreamPnm(FILE *fp) { l_uint8 val8, rval8, gval8, bval8, aval8, mask8; l_uint16 val16, rval16, gval16, bval16, aval16; l_int32 w, h, d, bps, spp, bpl, wpl, i, j, type; l_int32 val, rval, gval, bval; l_uint32 rgbval; l_uint32 *line, *data; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); if (freadHeaderPnm(fp, &w, &h, &d, &type, &bps, &spp)) return (PIX *)ERROR_PTR("header read failed", __func__, NULL); if (bps < 1 || bps > 16) return (PIX *)ERROR_PTR("invalid bps", __func__, NULL); if (spp < 1 || spp > 4) return (PIX *)ERROR_PTR("invalid spp", __func__, NULL); if ((pix = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); pixSetInputFormat(pix, IFF_PNM); data = pixGetData(pix); wpl = pixGetWpl(pix); /* If type == 6 and bps == 16, we use the code in type 7 * to read 6 bytes/pixel from the input file. */ if (type == 6 && bps == 16) type = 7; switch (type) { case 1: case 2: /* Old "ASCII" binary or gray format */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (pnmReadNextAsciiValue(fp, &val)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read abend", __func__, NULL); } pixSetPixel(pix, j, i, val); } } break; case 3: /* Old "ASCII" rgb format */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (pnmReadNextAsciiValue(fp, &rval)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read abend", __func__, NULL); } if (pnmReadNextAsciiValue(fp, &gval)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read abend", __func__, NULL); } if (pnmReadNextAsciiValue(fp, &bval)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read abend", __func__, NULL); } composeRGBPixel(rval, gval, bval, &rgbval); pixSetPixel(pix, j, i, rgbval); } } break; case 4: /* "raw" format for 1 bpp */ bpl = (d * w + 7) / 8; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < bpl; j++) { if (fread(&val8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error in 4", __func__, NULL); } SET_DATA_BYTE(line, j, val8); } } break; case 5: /* "raw" format for grayscale */ for (i = 0; i < h; i++) { line = data + i * wpl; if (d != 16) { for (j = 0; j < w; j++) { if (fread(&val8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("error in 5", __func__, NULL); } if (d == 2) SET_DATA_DIBIT(line, j, val8); else if (d == 4) SET_DATA_QBIT(line, j, val8); else /* d == 8 */ SET_DATA_BYTE(line, j, val8); } } else { /* d == 16 */ for (j = 0; j < w; j++) { if (fread(&val16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("16 bpp error", __func__, NULL); } SET_DATA_TWO_BYTES(line, j, val16); } } } break; case 6: /* "raw" format, type == 6; 8 bps, rgb */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 6", __func__, NULL); } if (fread(&gval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 6", __func__, NULL); } if (fread(&bval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 6", __func__, NULL); } composeRGBPixel(rval8, gval8, bval8, &rgbval); line[j] = rgbval; } } break; case 7: /* "arbitrary" format; type == 7; */ if (bps != 16) { mask8 = (1 << bps) - 1; switch (spp) { case 1: /* 1, 2, 4, 8 bpp grayscale */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (fread(&val8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } val8 = val8 & mask8; if (bps == 1) val8 ^= 1; /* white-is-1 photometry */ pixSetPixel(pix, j, i, val8); } } break; case 2: /* 1, 2, 4, 8 bpp grayscale + alpha */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (fread(&val8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&aval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } val8 = val8 & mask8; aval8 = aval8 & mask8; composeRGBAPixel(val8, val8, val8, aval8, &rgbval); pixSetPixel(pix, j, i, rgbval); } } pixSetSpp(pix, 4); break; case 3: /* rgb */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&gval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&bval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } rval8 = rval8 & mask8; gval8 = gval8 & mask8; bval8 = bval8 & mask8; composeRGBPixel(rval8, gval8, bval8, &rgbval); line[j] = rgbval; } } break; case 4: /* rgba */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&gval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&bval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&aval8, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } rval8 = rval8 & mask8; gval8 = gval8 & mask8; bval8 = bval8 & mask8; aval8 = aval8 & mask8; composeRGBAPixel(rval8, gval8, bval8, aval8, &rgbval); line[j] = rgbval; } } pixSetSpp(pix, 4); break; } } else { /* bps == 16 */ /* I have only seen one example that is type 6, 16 bps. * It was 3 spp (rgb), and the 8 bps of real data was stored * in the second byte. In the following, I make the wild * assumption that for all 16 bpp pnm/pam files, we can * take the second byte. */ switch (spp) { case 1: /* 16 bps grayscale */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (fread(&val16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } val8 = val16 & 0xff; pixSetPixel(pix, j, i, val8); } } break; case 2: /* 16 bps grayscale + alpha */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (fread(&val16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&aval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } val8 = val16 & 0xff; aval8 = aval16 & 0xff; composeRGBAPixel(val8, val8, val8, aval8, &rgbval); pixSetPixel(pix, j, i, rgbval); } } pixSetSpp(pix, 4); break; case 3: /* 16bps rgb */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&gval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&bval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } rval8 = rval16 & 0xff; gval8 = gval16 & 0xff; bval8 = bval16 & 0xff; composeRGBPixel(rval8, gval8, bval8, &rgbval); line[j] = rgbval; } } break; case 4: /* 16bps rgba */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&gval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&bval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } if (fread(&aval16, 2, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("read error type 7", __func__, NULL); } rval8 = rval16 & 0xff; gval8 = gval16 & 0xff; bval8 = bval16 & 0xff; aval8 = aval16 & 0xff; composeRGBAPixel(rval8, gval8, bval8, aval8, &rgbval); line[j] = rgbval; } } pixSetSpp(pix, 4); break; } } break; } return pix; } /*! * \brief readHeaderPnm() * * \param[in] filename * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pd [optional] * \param[out] ptype [optional] pnm type * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \return 0 if OK, 1 on error */ l_ok readHeaderPnm(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { l_int32 ret; FILE *fp; if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (ptype) *ptype = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); fclose(fp); return ret; } /*! * \brief freadHeaderPnm() * * \param[in] fp file stream opened for read * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pd [optional] * \param[out] ptype [optional] pnm type * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \return 0 if OK, 1 on error */ l_ok freadHeaderPnm(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { char tag[16], tupltype[32]; l_int32 i, w, h, d, bps, spp, type; l_int32 maxval; l_int32 ch; if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (ptype) *ptype = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (fscanf(fp, "P%d\n", &type) != 1) return ERROR_INT("invalid read for type", __func__, 1); if (type < 1 || type > 7) return ERROR_INT("invalid pnm file", __func__, 1); if (pnmSkipCommentLines(fp)) return ERROR_INT("no data in file", __func__, 1); if (type == 7) { w = h = d = bps = spp = maxval = 0; for (i = 0; i < 10; i++) { /* limit to 10 lines of this header */ if (pnmReadNextString(fp, tag, sizeof(tag))) return ERROR_INT("found no next tag", __func__, 1); if (!strcmp(tag, "WIDTH")) { if (pnmReadNextNumber(fp, &w)) return ERROR_INT("failed reading width", __func__, 1); continue; } if (!strcmp(tag, "HEIGHT")) { if (pnmReadNextNumber(fp, &h)) return ERROR_INT("failed reading height", __func__, 1); continue; } if (!strcmp(tag, "DEPTH")) { if (pnmReadNextNumber(fp, &spp)) return ERROR_INT("failed reading depth", __func__, 1); continue; } if (!strcmp(tag, "MAXVAL")) { if (pnmReadNextNumber(fp, &maxval)) return ERROR_INT("failed reading maxval", __func__, 1); continue; } if (!strcmp(tag, "TUPLTYPE")) { if (pnmReadNextString(fp, tupltype, sizeof(tupltype))) return ERROR_INT("failed reading tuple type", __func__, 1); continue; } if (!strcmp(tag, "ENDHDR")) { if ('\n' != (ch = fgetc(fp))) return ERROR_INT("missing LF after ENDHDR", __func__, 1); break; } } if (w <= 0 || h <= 0 || w > MAX_PNM_WIDTH || h > MAX_PNM_HEIGHT) { L_INFO("invalid size: w = %d, h = %d\n", __func__, w, h); return 1; } if (maxval == 1) { d = bps = 1; } else if (maxval == 3) { d = bps = 2; } else if (maxval == 15) { d = bps = 4; } else if (maxval == 255) { d = bps = 8; } else if (maxval == 0xffff) { d = bps = 16; } else { L_INFO("invalid maxval = %d\n", __func__, maxval); return 1; } switch (spp) { case 1: /* d and bps are already set */ break; case 2: case 3: case 4: /* create a 32 bpp Pix */ d = 32; break; default: L_INFO("invalid depth = %d\n", __func__, spp); return 1; } } else { if (fscanf(fp, "%d %d\n", &w, &h) != 2) return ERROR_INT("invalid read for w,h", __func__, 1); if (w <= 0 || h <= 0 || w > MAX_PNM_WIDTH || h > MAX_PNM_HEIGHT) { L_INFO("invalid size: w = %d, h = %d\n", __func__, w, h); return 1; } /* Get depth of pix. For types 2 and 5, we use the maxval. * Important implementation note: * - You can't use fscanf(), which throws away whitespace, * and will discard binary data if it starts with whitespace(s). * - You can't use fgets(), which stops at newlines, but this * dumb format doesn't require a newline after the maxval * number -- it just requires one whitespace character. * - Which leaves repeated calls to fgetc, including swallowing * the single whitespace character. */ if (type == 1 || type == 4) { d = 1; spp = 1; bps = 1; } else if (type == 2 || type == 5) { if (pnmReadNextNumber(fp, &maxval)) return ERROR_INT("invalid read for maxval (2,5)", __func__, 1); if (maxval == 3) { d = 2; } else if (maxval == 15) { d = 4; } else if (maxval == 255) { d = 8; } else if (maxval == 0xffff) { d = 16; } else { lept_stderr("maxval = %d\n", maxval); return ERROR_INT("invalid maxval", __func__, 1); } bps = d; spp = 1; } else { /* type == 3 || type == 6; this is rgb */ if (pnmReadNextNumber(fp, &maxval)) return ERROR_INT("invalid read for maxval (3,6)", __func__, 1); if (maxval != 255 && maxval != 0xffff) { L_ERROR("unexpected maxval = %d\n", __func__, maxval); return 1; } bps = (maxval == 255) ? 8 : 16; d = 32; spp = 3; } } if (pw) *pw = w; if (ph) *ph = h; if (pd) *pd = d; if (ptype) *ptype = type; if (pbps) *pbps = bps; if (pspp) *pspp = spp; return 0; } /*! * \brief pixWriteStreamPnm() * * \param[in] fp file stream opened for write * \param[in] pix * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This writes "raw" packed format only:
 *          1 bpp --> pbm (P4)
 *          2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P5)
 *          2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P6)
 *      (2) 24 bpp rgb are not supported in leptonica, but this will
 *          write them out as a packed array of bytes (3 to a pixel).
 * 
*/ l_ok pixWriteStreamPnm(FILE *fp, PIX *pix) { l_uint8 val8; l_uint8 pel[4]; l_uint16 val16; l_int32 h, w, d, ds, i, j, wpls, bpl, filebpl, writeerror, maxval; l_uint32 *pword, *datas, *lines; PIX *pixs; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return ERROR_INT("d not in {1,2,4,8,16,24,32}", __func__, 1); if (d == 32 && pixGetSpp(pix) == 4) return pixWriteStreamPam(fp, pix); /* If a colormap exists, remove and convert to grayscale or rgb */ if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); else pixs = pixClone(pix); ds = pixGetDepth(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); writeerror = 0; if (ds == 1) { /* binary */ fprintf(fp, "P4\n# Raw PBM file written by leptonica " "(www.leptonica.com)\n%d %d\n", w, h); bpl = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < bpl; j++) { val8 = GET_DATA_BYTE(lines, j); fwrite(&val8, 1, 1, fp); } } } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ maxval = (1 << ds) - 1; fprintf(fp, "P5\n# Raw PGM file written by leptonica " "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); if (ds != 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { if (ds == 2) val8 = GET_DATA_DIBIT(lines, j); else if (ds == 4) val8 = GET_DATA_QBIT(lines, j); else /* ds == 8 */ val8 = GET_DATA_BYTE(lines, j); fwrite(&val8, 1, 1, fp); } } } else { /* ds == 16 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val16 = GET_DATA_TWO_BYTES(lines, j); fwrite(&val16, 2, 1, fp); } } } } else { /* rgb color */ fprintf(fp, "P6\n# Raw PPM file written by leptonica " "(www.leptonica.com)\n%d %d\n255\n", w, h); if (d == 24) { /* packed, 3 bytes to a pixel */ filebpl = 3 * w; for (i = 0; i < h; i++) { /* write out each raster line */ lines = datas + i * wpls; if (fwrite(lines, 1, filebpl, fp) != filebpl) writeerror = 1; } } else { /* 32 bpp rgb */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { pword = lines + j; pel[0] = GET_DATA_BYTE(pword, COLOR_RED); pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); if (fwrite(pel, 1, 3, fp) != 3) writeerror = 1; } } } } pixDestroy(&pixs); if (writeerror) return ERROR_INT("image write fail", __func__, 1); return 0; } /*! * \brief pixWriteStreamAsciiPnm() * * \param[in] fp file stream opened for write * \param[in] pix * \return 0 if OK; 1 on error * * Writes "ASCII" format only: * 1 bpp --> pbm P1 * 2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm P2 * 2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm P3 */ l_ok pixWriteStreamAsciiPnm(FILE *fp, PIX *pix) { char buffer[256]; l_uint8 cval[3]; l_int32 h, w, d, ds, i, j, k, maxval, count; l_uint32 val; PIX *pixs; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return ERROR_INT("d not in {1,2,4,8,16,32}", __func__, 1); /* If a colormap exists, remove and convert to grayscale or rgb */ if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); else pixs = pixClone(pix); ds = pixGetDepth(pixs); if (ds == 1) { /* binary */ fprintf(fp, "P1\n# Ascii PBM file written by leptonica " "(www.leptonica.com)\n%d %d\n", w, h); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (val == 0) fputc('0', fp); else /* val == 1 */ fputc('1', fp); fputc(' ', fp); count += 2; if (count >= 70) { fputc('\n', fp); count = 0; } } } } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ maxval = (1 << ds) - 1; fprintf(fp, "P2\n# Ascii PGM file written by leptonica " "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (ds == 2) { snprintf(buffer, sizeof(buffer), "%1d ", val); fwrite(buffer, 1, 2, fp); count += 2; } else if (ds == 4) { snprintf(buffer, sizeof(buffer), "%2d ", val); fwrite(buffer, 1, 3, fp); count += 3; } else if (ds == 8) { snprintf(buffer, sizeof(buffer), "%3d ", val); fwrite(buffer, 1, 4, fp); count += 4; } else { /* ds == 16 */ snprintf(buffer, sizeof(buffer), "%5d ", val); fwrite(buffer, 1, 6, fp); count += 6; } if (count >= 60) { fputc('\n', fp); count = 0; } } } } else { /* rgb color */ fprintf(fp, "P3\n# Ascii PPM file written by leptonica " "(www.leptonica.com)\n%d %d\n255\n", w, h); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); cval[0] = GET_DATA_BYTE(&val, COLOR_RED); cval[1] = GET_DATA_BYTE(&val, COLOR_GREEN); cval[2] = GET_DATA_BYTE(&val, COLOR_BLUE); for (k = 0; k < 3; k++) { snprintf(buffer, sizeof(buffer), "%3d ", cval[k]); fwrite(buffer, 1, 4, fp); count += 4; if (count >= 60) { fputc('\n', fp); count = 0; } } } } } pixDestroy(&pixs); return 0; } /*! * \brief pixWriteStreamPam() * * \param[in] fp file stream opened for write * \param[in] pix * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This writes arbitrary PAM (P7) packed format.
 *      (2) 24 bpp rgb are not supported in leptonica, but this will
 *          write them out as a packed array of bytes (3 to a pixel).
 * 
*/ l_ok pixWriteStreamPam(FILE *fp, PIX *pix) { l_uint8 val8; l_uint8 pel[8]; l_uint16 val16; l_int32 h, w, d, ds, i, j; l_int32 wpls, spps, filebpl, writeerror, maxval; l_uint32 *pword, *datas, *lines; PIX *pixs; if (!fp) return ERROR_INT("fp not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return ERROR_INT("d not in {1,2,4,8,16,24,32}", __func__, 1); /* If a colormap exists, remove and convert to grayscale or rgb */ if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); else pixs = pixClone(pix); ds = pixGetDepth(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); spps = pixGetSpp(pixs); if (ds < 24) maxval = (1 << ds) - 1; else maxval = 255; writeerror = 0; fprintf(fp, "P7\n# Arbitrary PAM file written by leptonica " "(www.leptonica.com)\n"); fprintf(fp, "WIDTH %d\n", w); fprintf(fp, "HEIGHT %d\n", h); fprintf(fp, "DEPTH %d\n", spps); fprintf(fp, "MAXVAL %d\n", maxval); if (spps == 1 && ds == 1) fprintf(fp, "TUPLTYPE BLACKANDWHITE\n"); else if (spps == 1) fprintf(fp, "TUPLTYPE GRAYSCALE\n"); else if (spps == 3) fprintf(fp, "TUPLTYPE RGB\n"); else if (spps == 4) fprintf(fp, "TUPLTYPE RGB_ALPHA\n"); fprintf(fp, "ENDHDR\n"); switch (d) { case 1: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val8 = GET_DATA_BIT(lines, j); val8 ^= 1; /* pam apparently uses white-is-1 photometry */ if (fwrite(&val8, 1, 1, fp) != 1) writeerror = 1; } } break; case 2: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val8 = GET_DATA_DIBIT(lines, j); if (fwrite(&val8, 1, 1, fp) != 1) writeerror = 1; } } break; case 4: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val8 = GET_DATA_QBIT(lines, j); if (fwrite(&val8, 1, 1, fp) != 1) writeerror = 1; } } break; case 8: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val8 = GET_DATA_BYTE(lines, j); if (fwrite(&val8, 1, 1, fp) != 1) writeerror = 1; } } break; case 16: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val16 = GET_DATA_TWO_BYTES(lines, j); if (fwrite(&val16, 2, 1, fp) != 1) writeerror = 1; } } break; case 24: filebpl = 3 * w; for (i = 0; i < h; i++) { lines = datas + i * wpls; if (fwrite(lines, 1, filebpl, fp) != filebpl) writeerror = 1; } break; case 32: switch (spps) { case 3: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { pword = lines + j; pel[0] = GET_DATA_BYTE(pword, COLOR_RED); pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); if (fwrite(pel, 1, 3, fp) != 3) writeerror = 1; } } break; case 4: for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { pword = lines + j; pel[0] = GET_DATA_BYTE(pword, COLOR_RED); pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); pel[3] = GET_DATA_BYTE(pword, L_ALPHA_CHANNEL); if (fwrite(pel, 1, 4, fp) != 4) writeerror = 1; } } break; } break; } pixDestroy(&pixs); if (writeerror) return ERROR_INT("image write fail", __func__, 1); return 0; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ /*! * \brief pixReadMemPnm() * * \param[in] data const; pnm-encoded * \param[in] size of data * \return pix, or NULL on error * *
 * Notes:
 *      (1) The %size byte of %data must be a null character.
 * 
*/ PIX * pixReadMemPnm(const l_uint8 *data, size_t size) { FILE *fp; PIX *pix; if (!data) return (PIX *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PIX *)ERROR_PTR("stream not opened", __func__, NULL); pix = pixReadStreamPnm(fp); fclose(fp); if (!pix) L_ERROR("pix not read\n", __func__); return pix; } /*! * \brief readHeaderMemPnm() * * \param[in] data const; pnm-encoded * \param[in] size of data * \param[out] pw [optional] * \param[out] ph [optional] * \param[out] pd [optional] * \param[out] ptype [optional] pnm type * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel * \return 0 if OK, 1 on error */ l_ok readHeaderMemPnm(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { l_int32 ret; FILE *fp; if (!data) return ERROR_INT("data not defined", __func__, 1); if ((fp = fopenReadFromMemory(data, size)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); fclose(fp); if (ret) return ERROR_INT("header data read failed", __func__, 1); return 0; } /*! * \brief pixWriteMemPnm() * * \param[out] pdata data of PNM image * \param[out] psize size of returned data * \param[in] pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteStreamPnm() for usage.  This version writes to
 *          memory instead of to a file stream.
 * 
*/ l_ok pixWriteMemPnm(l_uint8 **pdata, size_t *psize, PIX *pix) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixWriteStreamPnm(fp, pix); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixWriteStreamPnm(fp, pix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief pixWriteMemPam() * * \param[out] pdata data of PAM image * \param[out] psize size of returned data * \param[in] pix * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteStreamPnm() for usage.  This version writes to
 *          memory instead of to a file stream.
 * 
*/ l_ok pixWriteMemPam(l_uint8 **pdata, size_t *psize, PIX *pix) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = pixWriteStreamPam(fp, pix); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = pixWriteStreamPam(fp, pix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*--------------------------------------------------------------------* * Static helpers * *--------------------------------------------------------------------*/ /*! * \brief pnmReadNextAsciiValue() * * Return: 0 if OK, 1 on error or EOF. * * Notes: * (1) This reads the next sample value in ASCII from the file. */ static l_int32 pnmReadNextAsciiValue(FILE *fp, l_int32 *pval) { l_int32 ignore; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!fp) return ERROR_INT("stream not open", __func__, 1); if (EOF == fscanf(fp, " ")) return 1; if (1 != fscanf(fp, "%d", pval)) return 1; return 0; } /*! * \brief pnmReadNextNumber() * * \param[in] fp file stream * \param[out] pval value as an integer * \return 0 if OK, 1 on error or EOF. * *
 * Notes:
 *      (1) This reads the next set of numeric chars, returning
 *          the value and swallowing initial whitespaces and ONE
 *          trailing whitespace character.  This is needed to read
 *          the maxval in the header, which precedes the binary data.
 * 
*/ static l_int32 pnmReadNextNumber(FILE *fp, l_int32 *pval) { char buf[8]; l_int32 i, c, foundws; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!fp) return ERROR_INT("stream not open", __func__, 1); /* Swallow whitespace */ if (fscanf(fp, " ") == EOF) return ERROR_INT("end of file reached", __func__, 1); /* The ASCII characters for the number are followed by exactly * one whitespace character. */ foundws = FALSE; for (i = 0; i < 8; i++) buf[i] = '\0'; for (i = 0; i < 8; i++) { if ((c = fgetc(fp)) == EOF) return ERROR_INT("end of file reached", __func__, 1); if (c == ' ' || c == '\t' || c == '\n' || c == '\r') { foundws = TRUE; buf[i] = '\n'; break; } if (!isdigit(c)) return ERROR_INT("char read is not a digit", __func__, 1); buf[i] = c; } if (!foundws) return ERROR_INT("no whitespace found", __func__, 1); if (sscanf(buf, "%d", pval) != 1) return ERROR_INT("invalid read", __func__, 1); return 0; } /*! * \brief pnmReadNextString() * * \param[in] fp file stream * \param[out] buff pointer to the string buffer * \param[in] size max. number of characters in buffer * \return 0 if OK, 1 on error or EOF. * *
 * Notes:
 *      (1) This reads the next set of alphanumeric chars, returning the string.
 *          This is needed to read header lines, which precede the P7
 *          format binary data.
 * 
*/ static l_int32 pnmReadNextString(FILE *fp, char *buff, l_int32 size) { char fmtString[7]; /* must contain "%9999s" [*] */ if (!buff) return ERROR_INT("buff not defined", __func__, 1); *buff = '\0'; if (size > 10000) /* size - 1 has > 4 digits [*] */ return ERROR_INT("size is too big", __func__, 1); if (size <= 0) return ERROR_INT("size is too small", __func__, 1); if (!fp) return ERROR_INT("stream not open", __func__, 1); /* Skip whitespace */ if (fscanf(fp, " ") == EOF) return 1; /* Comment lines are allowed to appear anywhere in the header lines */ if (pnmSkipCommentLines(fp)) return ERROR_INT("end of file reached", __func__, 1); snprintf(fmtString, 7, "%%%ds", size - 1); if (fscanf(fp, fmtString, buff) == EOF) return 1; return 0; } /*! * \brief pnmSkipCommentLines() * * Return: 0 if OK, 1 on error or EOF * * Notes: * (1) Comment lines begin with '#' * (2) Usage: caller should check return value for EOF * (3) The previous implementation used fseek(fp, -1L, SEEK_CUR) * to back up one character, which doesn't work with stdin. */ static l_int32 pnmSkipCommentLines(FILE *fp) { l_int32 i; char c; if (!fp) return ERROR_INT("stream not open", __func__, 1); while ((i = fscanf(fp, "#%c", &c))) { if (i == EOF) return 1; while (c != '\n') { if (fscanf(fp, "%c", &c) == EOF) return 1; } } return 0; } /* --------------------------------------------*/ #endif /* USE_PNMIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/pnmiostub.c000066400000000000000000000101001506303110300165170ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file pnmiostub.c *
 *
 *     Stubs for pnmio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PNMIO /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamPnm(FILE *fp) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderPnm(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok freadHeaderPnm(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamPnm(FILE *fp, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamAsciiPnm(FILE *fp, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamPam(FILE *fp, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemPnm(const l_uint8 *cdata, size_t size) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemPnm(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemPnm(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemPam(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !USE_PNMIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/projective.c000066400000000000000000000754331506303110300166750ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file projective.c *
 *
 *      Projective (4 pt) image transformation using a sampled
 *      (to nearest integer) transform on each dest point
 *           PIX      *pixProjectiveSampledPta()
 *           PIX      *pixProjectiveSampled()
 *
 *      Projective (4 pt) image transformation using interpolation
 *      (or area mapping) for anti-aliasing images that are
 *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
 *           PIX      *pixProjectivePta()
 *           PIX      *pixProjective()
 *           PIX      *pixProjectivePtaColor()
 *           PIX      *pixProjectiveColor()
 *           PIX      *pixProjectivePtaGray()
 *           PIX      *pixProjectiveGray()
 *
 *      Projective transform including alpha (blend) component
 *           PIX      *pixProjectivePtaWithAlpha()
 *
 *      Projective coordinate transformation
 *           l_int32   getProjectiveXformCoeffs()
 *           l_int32   projectiveXformSampledPt()
 *           l_int32   projectiveXformPt()
 *
 *      A projective transform can be specified as a specific functional
 *      mapping between 4 points in the source and 4 points in the dest.
 *      It preserves straight lines, but is less stable than a bilinear
 *      transform, because it contains a division by a quantity that
 *      can get arbitrarily small.)
 *
 *      We give both a projective coordinate transformation and
 *      two projective image transformations.
 *
 *      For the former, we ask for the coordinate value (x',y')
 *      in the transformed space for any point (x,y) in the original
 *      space.  The coefficients of the transformation are found by
 *      solving 8 simultaneous equations for the 8 coordinates of
 *      the 4 points in src and dest.  The transformation can then
 *      be used to compute the associated image transform, by
 *      computing, for each dest pixel, the relevant pixel(s) in
 *      the source.  This can be done either by taking the closest
 *      src pixel to each transformed dest pixel ("sampling") or
 *      by doing an interpolation and averaging over 4 source
 *      pixels with appropriate weightings ("interpolated").
 *
 *      A typical application would be to remove keystoning
 *      due to a projective transform in the imaging system.
 *
 *      The projective transform is given by specifying two equations:
 *
 *          x' = (ax + by + c) / (gx + hy + 1)
 *          y' = (dx + ey + f) / (gx + hy + 1)
 *
 *      where the eight coefficients have been computed from four
 *      sets of these equations, each for two corresponding data pts.
 *      In practice, once the coefficients are known, we use the
 *      equations "backwards": for each point (x,y) in the dest image,
 *      these two equations are used to compute the corresponding point
 *      (x',y') in the src.  That computed point in the src is then used
 *      to determine the corresponding dest pixel value in one of two ways:
 *
 *       ~ sampling: simply take the value of the src pixel in which this
 *                   point falls
 *       ~ interpolation: take appropriate linear combinations of the
 *                        four src pixels that this dest pixel would
 *                        overlap, with the coefficients proportional
 *                        to the amount of overlap
 *
 *      For small warp where there is little scale change, (e.g.,
 *      for rotation) area mapping is nearly equivalent to interpolation.
 *
 *      Typical relative timing of pointwise transforms (sampled = 1.0):
 *      8 bpp:   sampled        1.0
 *               interpolated   1.5
 *      32 bpp:  sampled        1.0
 *               interpolated   1.6
 *      Additionally, the computation time/pixel is nearly the same
 *      for 8 bpp and 32 bpp, for both sampled and interpolated.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; /*------------------------------------------------------------n * Sampled projective image transformation * *-------------------------------------------------------------*/ /*! * \brief pixProjectiveSampledPta() * * \param[in] pixs all depths * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) No 3 of the 4 points may be collinear.
 *      (4) For 8 and 32 bpp pix, better quality is obtained by the
 *          somewhat slower pixProjectivePta().  See that
 *          function for relative timings between sampled and interpolated.
 * 
*/ PIX * pixProjectiveSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveSampled(pixs, vc, incolor); LEPT_FREE(vc); return pixd; } /*! * \brief pixProjectiveSampled() * * \param[in] pixs all depths * \param[in] vc vector of 8 coefficients for projective transform * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary.
 *      (2) Retains colormap, which you can do for a sampled transform..
 *      (3) For 8 or 32 bpp, much better quality is obtained by the
 *          somewhat slower pixProjective().  See that function
 *          for relative timings between sampled and interpolated.
 * 
*/ PIX * pixProjectiveSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", __func__, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { projectiveXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated projective image transformation * *---------------------------------------------------------------------*/ /*! * \brief pixProjectivePta() * * \param[in] pixs all depths; colormap ok * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixProjectivePta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixProjectiveSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixProjectivePtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixProjectivePtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixProjective() * * \param[in] pixs all depths; colormap ok * \param[in] vc vector of 8 coefficients for projective transform * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Brings in either black or white pixels from the boundary
 *      (2) Removes any existing colormap, if necessary, before transforming
 * 
*/ PIX * pixProjective(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); if (pixGetDepth(pixs) == 1) return pixProjectiveSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixProjectiveGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixProjectiveColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixProjectivePtaColor() * * \param[in] pixs 32 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixProjectivePtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveColor(pixs, vc, colorval); LEPT_FREE(vc); return pixd; } /*! * \brief pixProjectiveColor() * * \param[in] pixs 32 bpp * \param[in] vc vector of 8 coefficients for projective transform * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error */ PIX * pixProjectiveColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixProjectiveGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixProjectivePtaGray() * * \param[in] pixs 8 bpp * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] grayval 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixProjectivePtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", __func__, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", __func__, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveGray(pixs, vc, grayval); LEPT_FREE(vc); return pixd; } /*! * \brief pixProjectiveGray() * * \param[in] pixs 8 bpp * \param[in] vc vector of 8 coefficients for projective transform * \param[in] grayval 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error */ PIX * pixProjectiveGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", __func__, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*---------------------------------------------------------------------------* * Projective transform including alpha (blend) component * *---------------------------------------------------------------------------*/ /*! * \brief pixProjectivePtaWithAlpha() * * \param[in] pixs 32 bpp rgb * \param[in] ptad 4 pts of final coordinate space * \param[in] ptas 4 pts of initial coordinate space * \param[in] pixg [optional] 8 bpp, for alpha channel, can be null * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque * \param[in] border of pixels added to capture transformed source pixels * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The alpha channel is transformed separately from pixs,
 *          and aligns with it, being fully transparent outside the
 *          boundary of the transformed pixs.  For pixels that are fully
 *          transparent, a blending function like pixBlendWithGrayMask()
 *          will give zero weight to corresponding pixels in pixs.
 *      (2) If pixg is NULL, it is generated as an alpha layer that is
 *          partially opaque, using %fract.  Otherwise, it is cropped
 *          to pixs if required and %fract is ignored.  The alpha channel
 *          in pixs is never used.
 *      (3) Colormaps are removed.
 *      (4) When pixs is transformed, it doesn't matter what color is brought
 *          in because the alpha channel will be transparent (0) there.
 *      (5) To avoid losing source pixels in the destination, it may be
 *          necessary to add a border to the source pix before doing
 *          the projective transformation.  This can be any non-negative
 *          number.
 *      (6) The input %ptad and %ptas are in a coordinate space before
 *          the border is added.  Internally, we compensate for this
 *          before doing the projective transform on the image after
 *          the border is added.
 *      (7) The default setting for the border values in the alpha channel
 *          is 0 (transparent) for the outermost ring of pixels and
 *          (0.5 * fract * 255) for the second ring.  When blended over
 *          a second image, this
 *          (a) shrinks the visible image to make a clean overlap edge
 *              with an image below, and
 *          (b) softens the edges by weakening the aliasing there.
 *          Use l_setAlphaMaskBorder() to change these values.
 * 
*/ PIX * pixProjectivePtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", __func__); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", __func__); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image will not be blended\n", __func__); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", __func__, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", __func__, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate projective transform of rgb channels of pixs * and of pixg */ pixd = pixProjectivePtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixProjectivePtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Projective coordinate transformation * *-------------------------------------------------------------*/ /*! * \brief getProjectiveXformCoeffs() * * \param[in] ptas source 4 points; unprimed * \param[in] ptad transformed 4 points; primed * \param[out] pvc vector of coefficients of transform * \return 0 if OK; 1 on error * * We have a set of 8 equations, describing the projective * transformation that takes 4 points ptas into 4 other * points ptad. These equations are: * * x1' = c[0]*x1 + c[1]*y1 + c[2]) / (c[6]*x1 + c[7]*y1 + 1 * y1' = c[3]*x1 + c[4]*y1 + c[5]) / (c[6]*x1 + c[7]*y1 + 1 * x2' = c[0]*x2 + c[1]*y2 + c[2]) / (c[6]*x2 + c[7]*y2 + 1 * y2' = c[3]*x2 + c[4]*y2 + c[5]) / (c[6]*x2 + c[7]*y2 + 1 * x3' = c[0]*x3 + c[1]*y3 + c[2]) / (c[6]*x3 + c[7]*y3 + 1 * y3' = c[3]*x3 + c[4]*y3 + c[5]) / (c[6]*x3 + c[7]*y3 + 1 * x4' = c[0]*x4 + c[1]*y4 + c[2]) / (c[6]*x4 + c[7]*y4 + 1 * y4' = c[3]*x4 + c[4]*y4 + c[5]) / (c[6]*x4 + c[7]*y4 + 1 * * Multiplying both sides of each eqn by the denominator, we get * * AC = B * * where B and C are column vectors * * B = [ x1' y1' x2' y2' x3' y3' x4' y4' ] * C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ] * * and A is the 8x8 matrix * * x1 y1 1 0 0 0 -x1*x1' -y1*x1' * 0 0 0 x1 y1 1 -x1*y1' -y1*y1' * x2 y2 1 0 0 0 -x2*x2' -y2*x2' * 0 0 0 x2 y2 1 -x2*y2' -y2*y2' * x3 y3 1 0 0 0 -x3*x3' -y3*x3' * 0 0 0 x3 y3 1 -x3*y3' -y3*y3' * x4 y4 1 0 0 0 -x4*x4' -y4*x4' * 0 0 0 x4 y4 1 -x4*y4' -y4*y4' * * These eight equations are solved here for the coefficients C. * * These eight coefficients can then be used to find the mapping * x,y) --> (x',y': * * x' = c[0]x + c[1]y + c[2]) / (c[6]x + c[7]y + 1 * y' = c[3]x + c[4]y + c[5]) / (c[6]x + c[7]y + 1 * * that is implemented in projectiveXformSampled and * projectiveXFormInterpolated. */ l_ok getProjectiveXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3, x4, y4; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[8]; /* 8x8 matrix A */ if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); if (!pvc) return ERROR_INT("&vc not defined", __func__, 1); b = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptas, 3, &x4, &y4); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); ptaGetPt(ptad, 3, &b[6], &b[7]); for (i = 0; i < 8; i++) a[i] = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); a[0][0] = x1; a[0][1] = y1; a[0][2] = 1.; a[0][6] = -x1 * b[0]; a[0][7] = -y1 * b[0]; a[1][3] = x1; a[1][4] = y1; a[1][5] = 1; a[1][6] = -x1 * b[1]; a[1][7] = -y1 * b[1]; a[2][0] = x2; a[2][1] = y2; a[2][2] = 1.; a[2][6] = -x2 * b[2]; a[2][7] = -y2 * b[2]; a[3][3] = x2; a[3][4] = y2; a[3][5] = 1; a[3][6] = -x2 * b[3]; a[3][7] = -y2 * b[3]; a[4][0] = x3; a[4][1] = y3; a[4][2] = 1.; a[4][6] = -x3 * b[4]; a[4][7] = -y3 * b[4]; a[5][3] = x3; a[5][4] = y3; a[5][5] = 1; a[5][6] = -x3 * b[5]; a[5][7] = -y3 * b[5]; a[6][0] = x4; a[6][1] = y4; a[6][2] = 1.; a[6][6] = -x4 * b[6]; a[6][7] = -y4 * b[6]; a[7][3] = x4; a[7][4] = y4; a[7][5] = 1; a[7][6] = -x4 * b[7]; a[7][7] = -y4 * b[7]; gaussjordan(a, b, 8); for (i = 0; i < 8; i++) LEPT_FREE(a[i]); return 0; } /*! * \brief projectiveXformSampledPt() * * \param[in] vc vector of 8 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds the nearest pixel coordinates of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok projectiveXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { l_float32 factor; l_float64 denom; if (!vc) return ERROR_INT("vc not defined", __func__, 1); if ((denom = vc[6] * x + vc[7] * y + 1.0f) == 0.0f) return ERROR_INT("denom = 0.0", __func__, 1); factor = 1.0f / denom; *pxp = (l_int32)(factor * (vc[0] * x + vc[1] * y + vc[2]) + 0.5f); *pyp = (l_int32)(factor * (vc[3] * x + vc[4] * y + vc[5]) + 0.5f); return 0; } /*! * \brief projectiveXformPt() * * \param[in] vc vector of 8 coefficients * \param[in] x, y initial point * \param[out] pxp, pyp transformed point * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This computes the floating point location of the transformed point.
 *      (2) It does not check ptrs for returned data!
 * 
*/ l_ok projectiveXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { l_float32 factor; l_float64 denom; if (!vc) return ERROR_INT("vc not defined", __func__, 1); if ((denom = vc[6] * x + vc[7] * y + 1.0f) == 0.0f) return ERROR_INT("denom = 0.0", __func__, 1); factor = 1.0f / denom; *pxp = factor * (vc[0] * x + vc[1] * y + vc[2]); *pyp = factor * (vc[3] * x + vc[4] * y + vc[5]); return 0; } leptonica-1.86.0/src/psio1.c000066400000000000000000001211421506303110300155430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file psio1.c *
 *
 *    |=============================================================|
 *    |                         Important note                      |
 *    |=============================================================|
 *    | Some of these functions require I/O libraries such as       |
 *    | libtiff, libjpeg, and libz.  If you do not have these       |
 *    | libraries, some calls will fail.                            |
 *    |                                                             |
 *    | You can manually deactivate all PostScript writing by       |
 *    | setting this in environ.h:                                  |
 *    | \code                                                       |
 *    |     #define  USE_PSIO     0                                 |
 *    | \endcode                                                    |
 *    | in environ.h.  This will link psio1stub.c                   |
 *    |=============================================================|
 *
 *     This is a PostScript "device driver" for wrapping images
 *     in PostScript.  The images can be rendered by a PostScript
 *     interpreter for viewing, using evince or gv.  They can also be
 *     rasterized for printing, using gs or an embedded interpreter
 *     in a PostScript printer.  And they can be converted to a pdf
 *     using gs (ps2pdf).
 *
 *     Convert specified files to PS
 *          l_int32          convertFilesToPS()
 *          l_int32          sarrayConvertFilesToPS()
 *          l_int32          convertFilesFittedToPS()
 *          l_int32          sarrayConvertFilesFittedToPS()
 *          l_int32          writeImageCompressedToPSFile()
 *
 *     Convert mixed text/image files to PS
 *          l_int32          convertSegmentedPagesToPS()
 *          l_int32          pixWriteSegmentedPageToPS()
 *          l_int32          pixWriteMixedToPS()
 *
 *     Convert any image file to PS for embedding
 *          l_int32          convertToPSEmbed()
 *
 *     Write all images in a pixa out to PS
 *          l_int32          pixaWriteCompressedToPS()
 *          l_int32          pixWriteCompressedToPS()
 *
 *  These PostScript converters are used in three different ways.
 *
 *  (1) For embedding a PS file in a program like TeX.
 *      convertToPSEmbed() handles this for levels 1, 2 and 3 output,
 *      and prog/converttops wraps this in an executable.
 *      converttops is a generalization of Thomas Merz's jpeg2ps wrapper,
 *      in that it works for all types (formats, depth, colormap)
 *      of input images and gives PS output in one of these formats
 *        * level 1 (uncompressed)
 *        * level 2 (compressed ccittg4 or dct)
 *        * level 3 (compressed flate)
 *
 *  (2) For composing a set of pages with any number of images
 *      painted on them, in either level 2 or level 3 formats.
 *
 *  (3) For printing a page image or a set of page images, at a
 *      resolution that optimally fills the page, using
 *      convertFilesFittedToPS().
 *
 *  The top-level calls of utilities in category 2, which can compose
 *  multiple images on a page, and which generate a PostScript file for
 *  printing or display (e.g., conversion to pdf), are:
 *      convertFilesToPS()
 *      convertFilesFittedToPS()
 *      convertSegmentedPagesToPS()
 *
 *  All images are output with page numbers.  Bounding box hints are
 *  more subtle.  They must be included for embeding images in
 *  TeX, for example, and the low-level writers include bounding
 *  box hints by default.  However, these hints should not be included for
 *  multi-page PostScript that is composed of a sequence of images;
 *  consequently, they are not written when calling higher level
 *  functions such as convertFilesToPS(), convertFilesFittedToPS()
 *  and convertSegmentedPagesToPS().  The function l_psWriteBoundingBox()
 *  sets a flag to give low-level control over this.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ /*-------------------------------------------------------------* * Convert files in a directory to PS * *-------------------------------------------------------------*/ /* * \brief convertFilesToPS() * * \param[in] dirin input directory * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] res typ. 300 or 600 ppi * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a PS file for all image files in a specified
 *          directory that contain the substr pattern to be matched.
 *      (2) Each image is written to a separate page in the output PS file.
 *      (3) All images are written compressed:
 *              * if tiffg4  -->  use ccittg4
 *              * if jpeg    -->  use dct
 *              * all others -->  use flate
 *          If the image is jpeg or tiffg4, we use the existing compressed
 *          strings for the encoding; otherwise, we read the image into
 *          a pix and flate-encode the pieces.
 *      (4) The resolution is often confusing.  It is interpreted
 *          as the resolution of the output display device:  "If the
 *          input image were digitized at 300 ppi, what would it
 *          look like when displayed at res ppi."  So, for example,
 *          if res = 100 ppi, then the display pixels are 3x larger
 *          than the 300 ppi pixels, and the image will be rendered
 *          3x larger.
 *      (5) The size of the PostScript file is independent of the resolution,
 *          because the entire file is encoded.  The res parameter just
 *          tells the PS decomposer how to render the page.  Therefore,
 *          for minimum file size without loss of visual information,
 *          if the output res is less than 300, you should downscale
 *          the image to the output resolution before wrapping in PS.
 *      (6) The "canvas" on which the image is rendered, at the given
 *          output resolution, is a standard page size (8.5 x 11 in).
 * 
*/ l_ok convertFilesToPS(const char *dirin, const char *substr, l_int32 res, const char *fileout) { SARRAY *sa; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (res <= 0) { L_INFO("setting res to 300 ppi\n", __func__); res = 300; } if (res < 10 || res > 4000) L_WARNING("res is typically in the range 300-600 ppi\n", __func__); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); sarrayConvertFilesToPS(sa, res, fileout); l_psWriteBoundingBox(TRUE); sarrayDestroy(&sa); return 0; } /* * \brief sarrayConvertFilesToPS() * * \param[in] sarray of full path names * \param[in] res typ. 300 or 600 ppi * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) See convertFilesToPS()
 * 
*/ l_ok sarrayConvertFilesToPS(SARRAY *sa, l_int32 res, const char *fileout) { char *fname; l_int32 i, nfiles, index, ret, format; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (res <= 0) { L_INFO("setting res to 300 ppi\n", __func__); res = 300; } if (res < 10 || res > 4000) L_WARNING("res is typically in the range 300-600 ppi\n", __func__); nfiles = sarrayGetCount(sa); for (i = 0, index = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); ret = pixReadHeader(fname, &format, NULL, NULL, NULL, NULL, NULL); if (ret) continue; if (format == IFF_UNKNOWN) continue; writeImageCompressedToPSFile(fname, fileout, res, &index); } return 0; } /* * \brief convertFilesFittedToPS() * * \param[in] dirin input directory * \param[in] substr [optional] substring filter on filenames; can be NULL) * \param[in] xpts desired size in printer points; use 0 for default * \param[in] ypts desired size in printer points; use 0 for default * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a PS file for all files in a specified directory
 *          that contain the substr pattern to be matched.
 *      (2) Each image is written to a separate page in the output PS file.
 *      (3) All images are written compressed:
 *              * if tiffg4  -->  use ccittg4
 *              * if jpeg    -->  use dct
 *              * all others -->  use flate
 *          If the image is jpeg or tiffg4, we use the existing compressed
 *          strings for the encoding; otherwise, we read the image into
 *          a pix and flate-encode the pieces.
 *      (4) The resolution is internally determined such that the images
 *          are rendered, in at least one direction, at 100% of the given
 *          size in printer points.  Use 0.0 for xpts or ypts to get
 *          the default value, which is 612.0 or 792.0, rsp.
 *      (5) The size of the PostScript file is independent of the resolution,
 *          because the entire file is encoded.  The %xpts and %ypts
 *          parameter tells the PS decomposer how to render the page.
 * 
*/ l_ok convertFilesFittedToPS(const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout) { SARRAY *sa; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (xpts <= 0.0) { L_INFO("setting xpts to 612.0 ppi\n", __func__); xpts = 612.0; } if (ypts <= 0.0) { L_INFO("setting ypts to 792.0 ppi\n", __func__); ypts = 792.0; } if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) L_WARNING("xpts,ypts are typically in the range 500-800\n", __func__); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); sarrayConvertFilesFittedToPS(sa, xpts, ypts, fileout); l_psWriteBoundingBox(TRUE); sarrayDestroy(&sa); return 0; } /* * \brief sarrayConvertFilesFittedToPS() * * \param[in] sarray of full path names * \param[in] xpts desired size in printer points; use 0 for default * \param[in] ypts desired size in printer points; use 0 for default * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) See convertFilesFittedToPS()
 * 
*/ l_ok sarrayConvertFilesFittedToPS(SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout) { char *fname; l_int32 ret, i, w, h, nfiles, index, format, res; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (xpts <= 0.0) { L_INFO("setting xpts to 612.0\n", __func__); xpts = 612.0; } if (ypts <= 0.0) { L_INFO("setting ypts to 792.0\n", __func__); ypts = 792.0; } if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) L_WARNING("xpts,ypts are typically in the range 500-800\n", __func__); nfiles = sarrayGetCount(sa); for (i = 0, index = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); ret = pixReadHeader(fname, &format, &w, &h, NULL, NULL, NULL); if (ret) continue; if (format == IFF_UNKNOWN) continue; /* Be sure the entire image is wrapped */ if (xpts * h < ypts * w) res = (l_int32)((l_float32)w * 72.0 / xpts); else res = (l_int32)((l_float32)h * 72.0 / ypts); writeImageCompressedToPSFile(fname, fileout, res, &index); } return 0; } /* * \brief writeImageCompressedToPSFile() * * \param[in] filein input image file * \param[in] fileout output ps file * \param[in] res output printer resolution * \param[in,out] pindex index of image in output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This wraps a single page image in PS.
 *      (2) The input file can be in any format.  It is compressed as follows:
 *             * if in tiffg4  -->  use ccittg4
 *             * if in jpeg    -->  use dct
 *             * all others    -->  use flate
 *      (3) Before the first call, set %index = 0.  %index is incremented
 *          if the page is successfully written.  It is used to decide
 *          whether to write (index == 0) or append (index > 0) to the file.
 * 
*/ l_ok writeImageCompressedToPSFile(const char *filein, const char *fileout, l_int32 res, l_int32 *pindex) { const char *op; l_int32 format, retval; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); findFileFormat(filein, &format); if (format == IFF_UNKNOWN) { L_ERROR("format of %s not known\n", __func__, filein); return 1; } op = (*pindex == 0) ? "w" : "a"; if (format == IFF_JFIF_JPEG) { retval = convertJpegToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, TRUE); } else if (format == IFF_TIFF_G4) { retval = convertG4ToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, FALSE, TRUE); } else { /* all other image formats */ retval = convertFlateToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, TRUE); } if (retval == 0) (*pindex)++; return retval; } /*-------------------------------------------------------------* * Convert mixed text/image files to PS * *-------------------------------------------------------------*/ /* * \brief convertSegmentedPagesToPS() * * \param[in] pagedir input page image directory * \param[in] pagestr [optional] substring filter on page filenames; * can be NULL * \param[in] page_numpre number of characters in page name before number * \param[in] maskdir input mask image directory * \param[in] maskstr [optional] substring filter on mask filenames; * can be NULL * \param[in] mask_numpre number of characters in mask name before number * \param[in] numpost number of characters in names after number * \param[in] maxnum only consider page numbers up to this value * \param[in] textscale scale of text output relative to pixs * \param[in] imagescale scale of image output relative to pixs * \param[in] threshold for binarization; typ. about 190; 0 for default * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a PS file for all page image and mask files in two
 *          specified directories and that contain the page numbers as
 *          specified below.  The two directories can be the same, in which
 *          case the page and mask files are differentiated by the two
 *          substrings for string matches.
 *      (2) The page images are taken in lexicographic order.
 *          Mask images whose numbers match the page images are used to
 *          segment the page images.  Page images without a matching
 *          mask image are scaled, thresholded and rendered entirely as text.
 *      (3) Each PS page is generated as a compressed representation of
 *          the page image, where the part of the image under the mask
 *          is suitably scaled and compressed as DCT (i.e., jpeg), and
 *          the remaining part of the page is suitably scaled, thresholded,
 *          compressed as G4 (i.e., tiff g4), and rendered by painting
 *          black through the resulting text mask.
 *      (4) The scaling is typically 2x down for the DCT component
 *          (%imagescale = 0.5) and 2x up for the G4 component
 *          (%textscale = 2.0).
 *      (5) The resolution is automatically set to fit to a
 *          letter-size (8.5 x 11 inch) page.
 *      (6) Both the DCT and the G4 encoding are PostScript level 2.
 *      (7) It is assumed that the page number is contained within
 *          the basename (the filename without directory or extension).
 *          %page_numpre is the number of characters in the page basename
 *          preceding the actual page number; %mask_numpre is likewise for
 *          the mask basename; %numpost is the number of characters
 *          following the page number.  For example, for mask name
 *          mask_006.tif, mask_numpre = 5 ("mask_).
 *      (8) To render a page as is -- that is, with no thresholding
 *          of any pixels -- use a mask in the mask directory that is
 *          full size with all pixels set to 1.  If the page is 1 bpp,
 *          it is not necessary to have a mask.
 * 
*/ l_ok convertSegmentedPagesToPS(const char *pagedir, const char *pagestr, l_int32 page_numpre, const char *maskdir, const char *maskstr, l_int32 mask_numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout) { l_int32 pageno, i, npages; PIX *pixs, *pixm; SARRAY *sapage, *samask; if (!pagedir) return ERROR_INT("pagedir not defined", __func__, 1); if (!maskdir) return ERROR_INT("maskdir not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (threshold <= 0) { L_INFO("setting threshold to 190\n", __func__); threshold = 190; } /* Get numbered full pathnames; max size of sarray is maxnum */ sapage = getNumberedPathnamesInDirectory(pagedir, pagestr, page_numpre, numpost, maxnum); samask = getNumberedPathnamesInDirectory(maskdir, maskstr, mask_numpre, numpost, maxnum); sarrayPadToSameSize(sapage, samask, ""); if ((npages = sarrayGetCount(sapage)) == 0) { sarrayDestroy(&sapage); sarrayDestroy(&samask); return ERROR_INT("no matching pages found", __func__, 1); } /* Generate the PS file */ pageno = 1; for (i = 0; i < npages; i++) { if ((pixs = pixReadIndexed(sapage, i)) == NULL) continue; pixm = pixReadIndexed(samask, i); pixWriteSegmentedPageToPS(pixs, pixm, textscale, imagescale, threshold, pageno, fileout); pixDestroy(&pixs); pixDestroy(&pixm); pageno++; } sarrayDestroy(&sapage); sarrayDestroy(&samask); return 0; } /* * \brief pixWriteSegmentedPageToPS() * * \param[in] pixs all depths; colormap ok * \param[in] pixm [optional] 1 bpp segmentation mask over image region * \param[in] textscale scale of text output relative to pixs * \param[in] imagescale scale of image output relative to pixs * \param[in] threshold for binarization; typ. about 190; 0 for default * \param[in] pageno page number in set; use 1 for new output file * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates the PS string for a mixed text/image page,
 *          and adds it to an existing file if %pageno > 1.
 *          The PS output is determined by fitting the result to
 *          a letter-size (8.5 x 11 inch) page.
 *      (2) The two images (pixs and pixm) are at the same resolution
 *          (typically 300 ppi).  They are used to generate two compressed
 *          images, pixb and pixc, that are put directly into the output
 *          PS file.
 *      (3) pixb is the text component.  In the PostScript world, we think of
 *          it as a mask through which we paint black.  It is produced by
 *          scaling pixs by %textscale, and thresholding to 1 bpp.
 *      (4) pixc is the image component, which is that part of pixs under
 *          the mask pixm.  It is scaled from pixs by %imagescale.
 *      (5) Typical values are textscale = 2.0 and imagescale = 0.5.
 *      (6) If pixm == NULL, the page has only text.  If it is all black,
 *          the page is all image and has no text.
 *      (7) This can be used to write a multi-page PS file, by using
 *          sequential page numbers with the same output file.  It can
 *          also be used to write separate PS files for each page,
 *          by using different output files with %pageno = 0 or 1.
 * 
*/ l_ok pixWriteSegmentedPageToPS(PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout) { l_int32 alltext, notext, d, ret; l_uint32 val; l_float32 scaleratio; PIX *pixmi, *pixmis, *pixt, *pixg, *pixsc, *pixb, *pixc; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (imagescale <= 0.0 || textscale <= 0.0) return ERROR_INT("relative scales must be > 0.0", __func__, 1); /* Analyze the page. Determine the ratio by which the * binary text mask is scaled relative to the image part. * If there is no image region (alltext == TRUE), the * text mask will be rendered directly to fit the page, * and scaleratio = 1.0. */ alltext = TRUE; notext = FALSE; scaleratio = 1.0; if (pixm) { pixZero(pixm, &alltext); /* pixm empty: all text */ if (alltext) { pixm = NULL; /* treat it as not existing here */ } else { pixmi = pixInvert(NULL, pixm); pixZero(pixmi, ¬ext); /* pixm full; no text */ pixDestroy(&pixmi); scaleratio = textscale / imagescale; } } if (pixGetDepth(pixs) == 1) { /* render tiff g4 */ pixb = pixClone(pixs); pixc = NULL; } else { pixt = pixConvertTo8Or32(pixs, L_CLONE, 0); /* clone if possible */ /* Get the binary text mask. Note that pixg cannot be a * clone of pixs, because it may be altered by pixSetMasked(). */ pixb = NULL; if (notext == FALSE) { d = pixGetDepth(pixt); if (d == 8) pixg = pixCopy(NULL, pixt); else /* d == 32 */ pixg = pixConvertRGBToLuminance(pixt); if (pixm) /* clear out the image parts */ pixSetMasked(pixg, pixm, 255); if (textscale == 1.0) pixsc = pixClone(pixg); else if (textscale >= 0.7) pixsc = pixScaleGrayLI(pixg, textscale, textscale); else pixsc = pixScaleAreaMap(pixg, textscale, textscale); pixb = pixThresholdToBinary(pixsc, threshold); pixDestroy(&pixg); pixDestroy(&pixsc); } /* Get the scaled image region */ pixc = NULL; if (pixm) { if (imagescale == 1.0) pixsc = pixClone(pixt); /* can possibly be a clone of pixs */ else pixsc = pixScale(pixt, imagescale, imagescale); /* If pixm is not full, clear the pixels in pixsc * corresponding to bg in pixm, where there can be text * that is written through the mask pixb. Note that * we could skip this and use pixsc directly in * pixWriteMixedToPS(); however, clearing these * non-image regions to a white background will reduce * the size of pixc (relative to pixsc), and hence * reduce the size of the PS file that is generated. * Use a copy so that we don't accidentally alter pixs. */ if (notext == FALSE) { pixmis = pixScale(pixm, imagescale, imagescale); pixmi = pixInvert(NULL, pixmis); val = (d == 8) ? 0xff : 0xffffff00; pixc = pixCopy(NULL, pixsc); pixSetMasked(pixc, pixmi, val); /* clear non-image part */ pixDestroy(&pixmis); pixDestroy(&pixmi); } else { pixc = pixClone(pixsc); } pixDestroy(&pixsc); } pixDestroy(&pixt); } /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); ret = pixWriteMixedToPS(pixb, pixc, scaleratio, pageno, fileout); l_psWriteBoundingBox(TRUE); pixDestroy(&pixb); pixDestroy(&pixc); return ret; } /* * \brief pixWriteMixedToPS() * * \param[in] pixb [optional] 1 bpp mask; typically for text * \param[in] pixc [optional] 8 or 32 bpp image regions * \param[in] scale scale factor for rendering pixb, relative to pixc; * typ. 4.0 * \param[in] pageno page number in set; use 1 for new output file * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This low level function generates the PS string for a mixed
 *          text/image page, and adds it to an existing file if
 *          %pageno > 1.
 *      (2) The two images (pixb and pixc) are typically generated at the
 *          resolution that they will be rendered in the PS file.
 *      (3) pixb is the text component.  In the PostScript world, we think of
 *          it as a mask through which we paint black.
 *      (4) pixc is the (typically halftone) image component.  It is
 *          white in the rest of the page.  To minimize the size of the
 *          PS file, it should be rendered at a resolution that is at
 *          least equal to its actual resolution.
 *      (5) %scale gives the ratio of resolution of pixb to pixc.
 *          Typical resolutions are: 600 ppi for pixb, 150 ppi for pixc;
 *          so %scale = 4.0.  If one of the images is not defined,
 *          the value of %scale is ignored.
 *      (6) We write pixc with DCT compression (jpeg).  This is followed
 *          by painting the text as black through the mask pixb.  If
 *          pixc doesn't exist (alltext), we write the text with the
 *          PS "image" operator instead of the "imagemask" operator,
 *          because ghostscript's ps2pdf is flaky when the latter is used.
 *      (7) The actual output resolution is determined by fitting the
 *          result to a letter-size (8.5 x 11 inch) page.
 * 
 */
l_ok
pixWriteMixedToPS(PIX         *pixb,
                  PIX         *pixc,
                  l_float32    scale,
                  l_int32      pageno,
                  const char  *fileout)
{
char        *tname;
const char  *op;
l_int32      resb, resc, endpage, maskop, ret;

    if (!pixb && !pixc)
        return ERROR_INT("pixb and pixc both undefined", __func__, 1);
    if (!fileout)
        return ERROR_INT("fileout not defined", __func__, 1);

        /* Compute the resolution that fills a letter-size page. */
    if (!pixc) {
       resb = getResLetterPage(pixGetWidth(pixb), pixGetHeight(pixb), 0);
    } else {
       resc = getResLetterPage(pixGetWidth(pixc), pixGetHeight(pixc), 0);
       if (pixb)
           resb = (l_int32)(scale * resc);
    }

        /* Write the jpeg image first */
    if (pixc) {
        tname = l_makeTempFilename();
        pixWrite(tname, pixc, IFF_JFIF_JPEG);
        endpage = (pixb) ? FALSE : TRUE;
        op = (pageno <= 1) ? "w" : "a";
        ret = convertJpegToPS(tname, fileout, op, 0, 0, resc, 1.0,
                              pageno, endpage);
        lept_rmfile(tname);
        LEPT_FREE(tname);
        if (ret)
            return ERROR_INT("jpeg data not written", __func__, 1);
    }

        /* Write the binary data, either directly or, if there is
         * a jpeg image on the page, through the mask. */
    if (pixb) {
        tname = l_makeTempFilename();
        pixWrite(tname, pixb, IFF_TIFF_G4);
        op = (pageno <= 1 && !pixc) ? "w" : "a";
        maskop = (pixc) ? 1 : 0;
        ret = convertG4ToPS(tname, fileout, op, 0, 0, resb, 1.0,
                            pageno, maskop, 1);
        lept_rmfile(tname);
        LEPT_FREE(tname);
        if (ret)
            return ERROR_INT("tiff data not written", __func__, 1);
    }

    return 0;
}


/*-------------------------------------------------------------*
 *            Convert any image file to PS for embedding       *
 *-------------------------------------------------------------*/
/*
 * \brief  convertToPSEmbed()
 *
 * \param[in]     filein    input image file, any format
 * \param[in]     fileout   output ps file
 * \param[in]     level     PostScript compression: 1 (uncompressed), 2 or 3
 * \return  0 if OK, 1 on error
 *
 * 
 * Notes:
 *      (1) This is a wrapper function that generates a PS file with
 *          a bounding box, from any input image file.
 *      (2) Do the best job of compression given the specified level.
 *          %level=3 does flate compression on anything that is not
 *          tiffg4 (1 bpp), jpeg (8 bpp or rgb), or webp.
 *      (3) If %level=2 and the file is not tiffg4 or jpeg, it will
 *          first be written to file as jpeg with quality = 75.
 *          This will remove the colormap and cause some degradation
 *          in the image.
 *      (4) The bounding box is required when a program such as TeX
 *          (through epsf) places and rescales the image.  It is
 *          sized for fitting the image to an 8.5 x 11.0 inch page.
 * 
*/ l_ok convertToPSEmbed(const char *filein, const char *fileout, l_int32 level) { char *tname, *tmpfile, *basename; l_int32 d, format; PIX *pix, *pixs; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (level != 1 && level != 2 && level != 3) { L_ERROR("invalid level specified; using level 2\n", __func__); level = 2; } if (level == 1) { /* no compression */ pixWritePSEmbed(filein, fileout); return 0; } /* Find the format and write out directly if in jpeg or tiff g4 */ findFileFormat(filein, &format); if (format == IFF_JFIF_JPEG) { convertJpegToPSEmbed(filein, fileout); return 0; } else if (format == IFF_TIFF_G4) { convertG4ToPSEmbed(filein, fileout); return 0; } else if (format == IFF_UNKNOWN) { L_ERROR("format of %s not known\n", __func__, filein); return 1; } /* If level 3 and in webp format, convert to jpeg * and use dct encoding */ if (level == 3 && format == IFF_WEBP) { pix = pixRead(filein); splitPathAtExtension(filein, &basename, NULL); tmpfile = stringJoin(basename, ".tmpjpg"); pixWrite(tmpfile, pix, IFF_JFIF_JPEG); convertJpegToPSEmbed(tmpfile, fileout); pixDestroy(&pix); lept_rmfile(tmpfile); LEPT_FREE(tmpfile); LEPT_FREE(basename); return 0; } /* If level 3, flate encode. */ if (level == 3) { convertFlateToPSEmbed(filein, fileout); return 0; } /* OK, it's level 2, so we must convert to jpeg or tiff g4 */ if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("image not read from file", __func__, 1); d = pixGetDepth(pixs); if ((d == 2 || d == 4) && !pixGetColormap(pixs)) pix = pixConvertTo8(pixs, 0); else if (d == 16) pix = pixConvert16To8(pixs, L_MS_BYTE); else pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pixs); if (!pix) return ERROR_INT("converted pix not made", __func__, 1); d = pixGetDepth(pix); tname = l_makeTempFilename(); if (d == 1) { if (pixWrite(tname, pix, IFF_TIFF_G4)) { LEPT_FREE(tname); pixDestroy(&pix); return ERROR_INT("g4 tiff not written", __func__, 1); } convertG4ToPSEmbed(tname, fileout); } else { if (pixWrite(tname, pix, IFF_JFIF_JPEG)) { LEPT_FREE(tname); pixDestroy(&pix); return ERROR_INT("jpeg not written", __func__, 1); } convertJpegToPSEmbed(tname, fileout); } lept_rmfile(tname); LEPT_FREE(tname); pixDestroy(&pix); return 0; } /*-------------------------------------------------------------* * Write all images in a pixa out to PS * *-------------------------------------------------------------*/ /* * \brief pixaWriteCompressedToPS() * * \param[in] pixa any set of images * \param[in] fileout output ps file * \param[in] res resolution for the set of input images * \param[in] level PostScript compression capability: 2 or 3 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a PostScript file of multiple page images,
 *          all with bounding boxes.
 *      (2) See pixWriteCompressedToPS() for details.
 *      (3) To generate a pdf from %fileout, use:
 *             ps2pdf  
 * 
*/ l_ok pixaWriteCompressedToPS(PIXA *pixa, const char *fileout, l_int32 res, l_int32 level) { l_int32 i, n, index, ret; PIX *pix; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (level != 2 && level != 3) { L_ERROR("only levels 2 and 3 permitted; using level 2\n", __func__); level = 2; } index = 0; n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); ret = pixWriteCompressedToPS(pix, fileout, res, level, &index); if (ret) L_ERROR("PS string not written for image %d\n", __func__, i); pixDestroy(&pix); } return 0; } /* * \brief pixWriteCompressedToPS() * * \param[in] pix any depth; colormap OK * \param[in] fileout output ps file * \param[in] res of input image * \param[in] level PostScript compression capability: 2 or 3 * \param[in,out] pindex index of image in output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates a PostScript string for %pix, and writes it
 *          to a file, with a bounding box.
 *      (2) *pindex keeps track of the number of images that have been
 *          written to %fileout.  If this is the first image to be
 *          converted, set *pindex == 0 before passing it in.  If the
 *          PostScript string is successfully generated, this will increment
 *          *pindex.  If *pindex > 0, the PostScript string will be
 *          appended to %fileout.
 *      (3) PostScript level 2 enables lossless tiffg4 and lossy jpeg
 *          compression.  Level 3 adds lossless flate (essentially gzip)
 *          compression.
 *          * For images with a colormap, lossless flate is often better in
 *            both quality and size than jpeg.
 *          * The decision for images without a colormap affects compression
 *            efficiency: %level2 (jpeg) is usually better than %level3 (flate)
 *          * Because jpeg does not handle 16 bpp, if %level == 2, the image
 *            is converted to 8 bpp (using MSB) and compressed with jpeg,
 *              cmap + level2:        jpeg
 *              cmap + level3:        flate
 *              1 bpp:                tiffg4
 *              2 or 4 bpp + level2:  jpeg
 *              2 or 4 bpp + level3:  flate
 *              8 bpp + level2:       jpeg
 *              8 bpp + level3:       flate
 *              16 bpp + level2:      jpeg   [converted to 8 bpp, with warning]
 *              16 bpp + level3:      flate
 *              32 bpp + level2:      jpeg
 *              32 bpp + level3:      flate
 * 
*/ l_ok pixWriteCompressedToPS(PIX *pix, const char *fileout, l_int32 res, l_int32 level, l_int32 *pindex) { char *tname; l_int32 writeout, d; PIX *pixt; PIXCMAP *cmap; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (level != 2 && level != 3) { L_ERROR("only levels 2 and 3 permitted; using level 2\n", __func__); level = 2; } if (!pindex) return ERROR_INT("&index not defined", __func__, 1); tname = l_makeTempFilename(); writeout = TRUE; d = pixGetDepth(pix); cmap = pixGetColormap(pix); if (d == 1) { if (pixWrite(tname, pix, IFF_TIFF_G4)) writeout = FALSE; } else if (level == 3) { if (pixWrite(tname, pix, IFF_PNG)) writeout = FALSE; } else { /* level == 2 */ if (cmap) { pixt = pixConvertForPSWrap(pix); if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) writeout = FALSE; pixDestroy(&pixt); } else if (d == 16) { L_WARNING("d = 16; converting to 8 bpp for jpeg\n", __func__); pixt = pixConvert16To8(pix, L_MS_BYTE); if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) writeout = FALSE; pixDestroy(&pixt); } else if (d == 2 || d == 4) { pixt = pixConvertTo8(pix, 0); if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) writeout = FALSE; pixDestroy(&pixt); } else if (d == 8 || d == 32) { if (pixWrite(tname, pix, IFF_JFIF_JPEG)) writeout = FALSE; } else { /* shouldn't happen */ L_ERROR("invalid depth with level 2: %d\n", __func__, d); writeout = FALSE; } } if (writeout) writeImageCompressedToPSFile(tname, fileout, res, pindex); if (lept_rmfile(tname) != 0) L_ERROR("temp file %s was not deleted\n", __func__, tname); LEPT_FREE(tname); return (writeout) ? 0 : 1; } /* --------------------------------------------*/ #endif /* USE_PSIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/psio1stub.c000066400000000000000000000120721506303110300164420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file psio1stub.c *
 *
 *     Stubs for psio1.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ l_ok convertFilesToPS(const char *dirin, const char *substr, l_int32 res, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok sarrayConvertFilesToPS(SARRAY *sa, l_int32 res, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertFilesFittedToPS(const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok sarrayConvertFilesFittedToPS(SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok writeImageCompressedToPSFile(const char *filein, const char *fileout, l_int32 res, l_int32 *pindex) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertSegmentedPagesToPS(const char *pagedir, const char *pagestr, l_int32 page_numpre, const char *maskdir, const char *maskstr, l_int32 mask_numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteSegmentedPageToPS(PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMixedToPS(PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertToPSEmbed(const char *filein, const char *fileout, l_int32 level) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixaWriteCompressedToPS(PIXA *pixa, const char *fileout, l_int32 res, l_int32 level) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteCompressedToPS(PIX *pix, const char *fileout, l_int32 res, l_int32 level, l_int32 *pindex) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !USE_PSIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/psio2.c000066400000000000000000002234631506303110300155550ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file psio2.c *
 *
 *    |=============================================================|
 *    |                         Important note                      |
 *    |=============================================================|
 *    | Some of these functions require I/O libraries such as       |
 *    | libtiff, libjpeg, and libz.  If you do not have these       |
 *    | libraries, some calls will fail.                            |
 *    |                                                             |
 *    | You can manually deactivate all PostScript writing by       |
 *    | setting this in environ.h:                                  |
 *    | \code                                                       |
 *    |     #define  USE_PSIO     0                                 |
 *    | \endcode                                                    |
 *    | in environ.h.  This will link psio2stub.c                   |
 *    |=============================================================|
 *
 *     These are lower-level functions that implement a PostScript
 *     "device driver" for wrapping images in PostScript.  The images
 *     can be rendered by a PostScript interpreter for viewing,
 *     using evince or gv.  They can also be rasterized for printing,
 *     using gs or an embedded interpreter in a PostScript printer.
 *     And they can be converted to a pdf using gs (ps2pdf).
 *
 *     For uncompressed images
 *          l_int32              pixWritePSEmbed()
 *          l_int32              pixWriteStreamPS()
 *          char                *pixWriteStringPS()
 *          char                *generateUncompressedPS()
 *          static void          getScaledParametersPS()
 *          static l_int32       convertByteToHexAscii()
 *
 *     For jpeg compressed images (use dct compression)
 *          l_int32              convertJpegToPSEmbed()
 *          l_int32              convertJpegToPS()
 *          static l_int32       convertJpegToPSString()
 *          static char         *generateJpegPS()
 *
 *     For g4 fax compressed images (use ccitt g4 compression)
 *          l_int32              convertG4ToPSEmbed()
 *          l_int32              convertG4ToPS()
 *          static l_int32       convertG4ToPSString()
 *          static char         *generateG4PS()
 *
 *     For multipage tiff images
 *          l_int32              convertTiffMultipageToPS()
 *
 *     For flate (gzip) compressed images (e.g., png)
 *          l_int32              convertFlateToPSEmbed()
 *          l_int32              convertFlateToPS()
 *          static l_int32       convertFlateToPSString()
 *          static char         *generateFlatePS()
 *
 *     Write to memory
 *          l_int32              pixWriteMemPS()
 *
 *     Converting resolution
 *          l_int32              getResLetterPage()
 *          static l_int32       getResA4Page()
 *
 *     Setting flag for writing bounding box hint
 *          void                 l_psWriteBoundingBox()
 *
 *  See psio1.c for higher-level functions and their usage.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ /* Set default for writing bounding box hint */ static l_int32 var_PS_WRITE_BOUNDING_BOX = 1; #define Bufsize 512 static const l_int32 DefaultInputRes = 300; /* typical scan res, ppi */ static const l_int32 MinRes = 5; static const l_int32 MaxRes = 3000; /* For computing resolution that fills page to desired amount */ static const l_int32 LetterWidth = 612; /* points */ static const l_int32 LetterHeight = 792; /* points */ static const l_int32 A4Width = 595; /* points */ static const l_int32 A4Height = 842; /* points */ static const l_float32 DefaultFillFraction = 0.95f; #ifndef NO_CONSOLE_IO #define DEBUG_JPEG 0 #define DEBUG_G4 0 #define DEBUG_FLATE 0 #endif /* ~NO_CONSOLE_IO */ /* Note that the bounding box hint at the top of the generated PostScript * file is required for the "*Embed" functions. These generate a * PostScript file for an individual image that can be translated and * scaled by an application that embeds the image in its output * (e.g., in the PS output from a TeX file). * However, bounding box hints should not be embedded in any * PostScript image that will be composited with other images, * where more than one image may be placed in an arbitrary location * on a page. */ /* Static helper functions */ static void getScaledParametersPS(BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt); static void convertByteToHexAscii(l_uint8 byteval, char *pnib1, char *pnib2); static l_ok convertJpegToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage); static char *generateJpegPS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage); static l_ok convertG4ToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage); static char *generateG4PS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage); static l_ok convertFlateToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage); static char *generateFlatePS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage); /*-------------------------------------------------------------* * For uncompressed images * *-------------------------------------------------------------*/ /*! * \brief pixWritePSEmbed() * * \param[in] filein input file, all depths, colormap OK * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a simple wrapper function that generates an
 *          uncompressed PS file, with a bounding box.
 *      (2) The bounding box is required when a program such as TeX
 *          (through epsf) places and rescales the image.
 *      (3) The bounding box is sized for fitting the image to an
 *          8.5 x 11.0 inch page.
 * 
*/ l_ok pixWritePSEmbed(const char *filein, const char *fileout) { l_int32 w, h, ret; l_float32 scale; FILE *fp; PIX *pix; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("image not read from file", __func__, 1); w = pixGetWidth(pix); h = pixGetHeight(pix); if (w * 11.0 > h * 8.5) scale = 8.5f * 300.f / (l_float32)w; else scale = 11.0f * 300.f / (l_float32)h; if ((fp = fopenWriteStream(fileout, "wb")) == NULL) return ERROR_INT_1("file not opened for write", fileout, __func__, 1); ret = pixWriteStreamPS(fp, pix, NULL, 0, scale); fclose(fp); pixDestroy(&pix); return ret; } /*! * \brief pixWriteStreamPS() * * \param[in] fp file stream * \param[in] pix * \param[in] box [optional] * \param[in] res can use 0 for default of 300 ppi * \param[in] scale to prevent scaling, use either 1.0 or 0.0 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This writes image in PS format, optionally scaled,
 *          adjusted for the printer resolution, and with
 *          a bounding box.
 *      (2) For details on use of parameters, see pixWriteStringPS().
 * 
*/ l_ok pixWriteStreamPS(FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { char *outstr; l_int32 length; PIX *pixc; if (!fp) return (l_int32)ERROR_INT("stream not open", __func__, 1); if (!pix) return (l_int32)ERROR_INT("pix not defined", __func__, 1); if ((pixc = pixConvertForPSWrap(pix)) == NULL) return (l_int32)ERROR_INT("pixc not made", __func__, 1); if ((outstr = pixWriteStringPS(pixc, box, res, scale)) == NULL) { pixDestroy(&pixc); return (l_int32)ERROR_INT("outstr not made", __func__, 1); } length = strlen(outstr); fwrite(outstr, 1, length, fp); LEPT_FREE(outstr); pixDestroy(&pixc); return 0; } /*! * \brief pixWriteStringPS() * * \param[in] pixs all depths, colormap OK * \param[in] box bounding box; can be NULL * \param[in] res resolution, in printer ppi. Use 0 for default 300 ppi. * \param[in] scale scale factor. If no scaling is desired, use * either 1.0 or 0.0. Scaling just resets the resolution * parameter; the actual scaling is done in the * interpreter at rendering time. This is important: * it allows you to scale the image up without * increasing the file size. * \return ps string if OK, or NULL on error * *
 * a) If %box == NULL, image is placed, optionally scaled,
 *      in a standard b.b. at the center of the page.
 *      This is to be used when another program like
 *      TeX through epsf places the image.
 * b) If %box != NULL, image is placed without a
 *      b.b. at the specified page location and with
 *      optional scaling.  This is to be used when
 *      you want to specify exactly where and optionally
 *      how big you want the image to be.
 *      Note that all coordinates are in PS convention,
 *      with 0,0 at LL corner of the page:
 *          x,y    location of LL corner of image, in mils.
 *          w,h    scaled size, in mils.  Use 0 to
 *                 scale with "scale" and "res" input.
 *
 * %scale: If no scaling is desired, use either 1.0 or 0.0.
 * Scaling just resets the resolution parameter; the actual
 * scaling is done in the interpreter at rendering time.
 * This is important: * it allows you to scale the image up
 * without increasing the file size.
 *
 * Notes:
 *      (1) OK, this seems a bit complicated, because there are various
 *          ways to scale and not to scale.  Here's a summary:
 *      (2) If you don't want any scaling at all:
 *           * if you are using a box:
 *               set w = 0, h = 0, and use scale = 1.0; it will print
 *               each pixel unscaled at printer resolution
 *           * if you are not using a box:
 *               set scale = 1.0; it will print at printer resolution
 *      (3) If you want the image to be a certain size in inches:
 *           * you must use a box and set the box (w,h) in mils
 *      (4) If you want the image to be scaled by a scale factor != 1.0:
 *           * if you are using a box:
 *               set w = 0, h = 0, and use the desired scale factor;
 *               the higher the printer resolution, the smaller the
 *               image will actually appear.
 *           * if you are not using a box:
 *               set the desired scale factor; the higher the printer
 *               resolution, the smaller the image will actually appear.
 *      (5) Another complication is the proliferation of distance units:
 *           * The interface distances are in milli-inches.
 *           * Three different units are used internally:
 *              ~ pixels  (units of 1/res inch)
 *              ~ printer pts (units of 1/72 inch)
 *              ~ inches
 *           * Here is a quiz on volume units from a reviewer:
 *             How many UK milli-cups in a US kilo-teaspoon?
 *               (Hint: 1.0 US cup = 0.75 UK cup + 0.2 US gill;
 *                      1.0 US gill = 24.0 US teaspoons)
 * 
*/ char * pixWriteStringPS(PIX *pixs, BOX *box, l_int32 res, l_float32 scale) { char nib1, nib2; char *hexdata, *outstr; l_uint8 byteval; l_int32 i, j, k, w, h, d; l_float32 wpt, hpt, xpt, ypt; l_int32 wpl, psbpl, hexbytes, boxflag, bps; l_uint32 *line, *data; PIX *pix; if (!pixs) return (char *)ERROR_PTR("pixs not defined", __func__, NULL); if ((pix = pixConvertForPSWrap(pixs)) == NULL) return (char *)ERROR_PTR("pix not made", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); /* Get the factors by which PS scales and translates, in pts */ if (!box) boxflag = 0; /* no scaling; b.b. at center */ else boxflag = 1; /* no b.b., specify placement and optional scaling */ getScaledParametersPS(box, w, h, res, scale, &xpt, &ypt, &wpt, &hpt); if (d == 1) bps = 1; /* bits/sample */ else /* d == 8 || d == 32 */ bps = 8; /* Convert image data to hex string. psbpl is the number of * bytes in each raster line when it is packed to the byte * boundary (not the 32 bit word boundary, as with the pix). * When converted to hex, the hex string has 2 bytes for * every byte of raster data. */ wpl = pixGetWpl(pix); if (d == 1 || d == 8) psbpl = (w * d + 7) / 8; else /* d == 32 */ psbpl = 3 * w; data = pixGetData(pix); hexbytes = 2 * psbpl * h; /* size of ps hex array */ if ((hexdata = (char *)LEPT_CALLOC(hexbytes + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("hexdata not made", __func__, NULL); if (d == 1 || d == 8) { for (i = 0, k = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < psbpl; j++) { byteval = GET_DATA_BYTE(line, j); convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; } } } else { /* d == 32; hexdata bytes packed RGBRGB..., 2 per sample */ for (i = 0, k = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { byteval = GET_DATA_BYTE(line + j, 0); /* red */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; byteval = GET_DATA_BYTE(line + j, 1); /* green */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; byteval = GET_DATA_BYTE(line + j, 2); /* blue */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; } } } hexdata[k] = '\0'; outstr = generateUncompressedPS(hexdata, w, h, d, psbpl, bps, xpt, ypt, wpt, hpt, boxflag); pixDestroy(&pix); if (!outstr) return (char *)ERROR_PTR("outstr not made", __func__, NULL); return outstr; } /*! * \brief generateUncompressedPS() * * \param[in] hexdata * \param[in] w, h raster image size in pixels * \param[in] d image depth in bpp; rgb is 32 * \param[in] psbpl raster bytes/line, when packed to the byte boundary * \param[in] bps bits/sample: either 1 or 8 * \param[in] xpt, ypt location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] wpt, hpt rendered image size in pts * \param[in] boxflag 1 to print out bounding box hint; 0 to skip * \return PS string, or NULL on error * *
 * Notes:
 *      (1) Low-level function.
 * 
*/ char * generateUncompressedPS(char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag) { char *outstr; char bigbuf[Bufsize]; SARRAY *sa; if (!hexdata) return (char *)ERROR_PTR("hexdata not defined", __func__, NULL); sa = sarrayCreate(0); sarrayAddString(sa, "%!Adobe-PS", L_COPY); if (boxflag == 0) { snprintf(bigbuf, sizeof(bigbuf), "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } else { /* boxflag == 1 */ sarrayAddString(sa, "gsave", L_COPY); } if (d == 1) sarrayAddString(sa, "{1 exch sub} settransfer %invert binary", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "/bpl %d string def %%bpl as a string", psbpl); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%d %d %d %%image dimensions in pixels", w, h, bps); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "[%d %d %d %d %d %d] %%mapping matrix: [w 0 0 -h 0 h]", w, 0, 0, -h, 0, h); sarrayAddString(sa, bigbuf, L_COPY); if (boxflag == 0) { if (d == 1 || d == 8) sarrayAddString(sa, "{currentfile bpl readhexstring pop} image", L_COPY); else /* d == 32 */ sarrayAddString(sa, "{currentfile bpl readhexstring pop} false 3 colorimage", L_COPY); } else { /* boxflag == 1 */ if (d == 1 || d == 8) sarrayAddString(sa, "{currentfile bpl readhexstring pop} bind image", L_COPY); else /* d == 32 */ sarrayAddString(sa, "{currentfile bpl readhexstring pop} bind false 3 colorimage", L_COPY); } sarrayAddString(sa, hexdata, L_INSERT); if (boxflag == 0) sarrayAddString(sa, "\nshowpage", L_COPY); else /* boxflag == 1 */ sarrayAddString(sa, "\ngrestore", L_COPY); outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); if (!outstr) L_ERROR("outstr not made\n", __func__); return outstr; } /*! * \brief getScaledParametersPS() * * \param[in] box [optional] location of image in mils; x,y is LL corner * \param[in] wpix pix width in pixels * \param[in] hpix pix height in pixels * \param[in] res of printer; use 0 for default * \param[in] scale use 1.0 or 0.0 for no scaling * \param[out] pxpt location of llx in pts * \param[out] pypt location of lly in pts * \param[out] pwpt image width in pts * \param[out] phpt image height in pts * \return void no arg checking * *
 * Notes:
 *      (1) The image is always scaled, depending on res and scale.
 *      (2) If no box, the image is centered on the page.
 *      (3) If there is a box, the image is placed within it.
 * 
*/ static void getScaledParametersPS(BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt) { l_int32 bx, by, bw, bh; l_float32 winch, hinch, xinch, yinch, fres; if (res == 0) res = DefaultInputRes; fres = (l_float32)res; /* Allow the PS interpreter to scale the resolution */ if (scale == 0.0) scale = 1.0; if (scale != 1.0) { fres = (l_float32)res / scale; res = (l_int32)fres; } /* Limit valid resolution interval */ if (res < MinRes || res > MaxRes) { L_WARNING("res %d out of bounds; using default res; no scaling\n", __func__, res); res = DefaultInputRes; fres = (l_float32)res; } if (!box) { /* center on page */ winch = (l_float32)wpix / fres; hinch = (l_float32)hpix / fres; xinch = (8.5f - winch) / 2.f; yinch = (11.0f - hinch) / 2.f; } else { boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw == 0) winch = (l_float32)wpix / fres; else winch = (l_float32)bw / 1000.f; if (bh == 0) hinch = (l_float32)hpix / fres; else hinch = (l_float32)bh / 1000.f; xinch = (l_float32)bx / 1000.f; yinch = (l_float32)by / 1000.f; } if (xinch < 0) L_WARNING("left edge < 0.0 inch\n", __func__); if (xinch + winch > 8.5) L_WARNING("right edge > 8.5 inch\n", __func__); if (yinch < 0.0) L_WARNING("bottom edge < 0.0 inch\n", __func__); if (yinch + hinch > 11.0) L_WARNING("top edge > 11.0 inch\n", __func__); *pwpt = 72.f * winch; *phpt = 72.f * hinch; *pxpt = 72.f * xinch; *pypt = 72.f * yinch; return; } /*! * \brief convertByteToHexAscii() * * \param[in] byteval input byte * \param[out] pnib1, pnib2 two hex ascii characters * \return void */ static void convertByteToHexAscii(l_uint8 byteval, char *pnib1, char *pnib2) { l_uint8 nib; nib = byteval >> 4; if (nib < 10) *pnib1 = '0' + nib; else *pnib1 = 'a' + (nib - 10); nib = byteval & 0xf; if (nib < 10) *pnib2 = '0' + nib; else *pnib2 = 'a' + (nib - 10); return; } /*-------------------------------------------------------------* * For jpeg compressed images * *-------------------------------------------------------------*/ /*! * \brief convertJpegToPSEmbed() * * \param[in] filein input jpeg file * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function takes a jpeg file as input and generates a DCT
 *          compressed, ascii85 encoded PS file, with a bounding box.
 *      (2) The bounding box is required when a program such as TeX
 *          (through epsf) places and rescales the image.
 *      (3) The bounding box is sized for fitting the image to an
 *          8.5 x 11.0 inch page.
 * 
*/ l_ok convertJpegToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes, ret; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); /* Generate the ascii encoded jpeg data */ if ((cid = l_generateJpegData(filein, 1)) == NULL) return ERROR_INT("jpeg data not made", __func__, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS. * The bounding box information should be inserted (default). */ outstr = generateJpegPS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); nbytes = strlen(outstr); ret = l_binaryWrite(fileout, "w", outstr, nbytes); LEPT_FREE(outstr); if (ret) L_ERROR("ps string not written to file\n", __func__); return ret; } /*! * \brief convertJpegToPS() * * \param[in] filein input jpeg file * \param[in] fileout output ps file * \param[in] operation "w" for write; "a" for append * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; * use 0 for default * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is simpler to use than pixWriteStringPS(), and
 *          it outputs in level 2 PS as compressed DCT (overlaid
 *          with ascii85 encoding).
 *      (2) An output file can contain multiple pages, each with
 *          multiple images.  The arguments to convertJpegToPS()
 *          allow you to control placement of jpeg images on multiple
 *          pages within a PostScript file.
 *      (3) For the first image written to a file, use "w", which
 *          opens for write and clears the file.  For all subsequent
 *          images written to that file, use "a".
 *      (4) The (x, y) parameters give the LL corner of the image
 *          relative to the LL corner of the page.  They are in
 *          units of pixels if scale = 1.0.  If you use (e.g.)
 *          scale = 2.0, the image is placed at (2x, 2y) on the page,
 *          and the image dimensions are also doubled.
 *      (5) Display vs printed resolution:
 *           * If your display is 75 ppi and your image was created
 *             at a resolution of 300 ppi, you can get the image
 *             to print at the same size as it appears on your display
 *             by either setting scale = 4.0 or by setting  res = 75.
 *             Both tell the printer to make a 4x enlarged image.
 *           * If your image is generated at 150 ppi and you use scale = 1,
 *             it will be rendered such that 150 pixels correspond
 *             to 72 pts (1 inch on the printer).  This function does
 *             the conversion from pixels (with or without scaling) to
 *             pts, which are the units that the printer uses.
 *           * The printer will choose its own resolution to use
 *             in rendering the image, which will not affect the size
 *             of the rendered image.  That is because the output
 *             PostScript file describes the geometry in terms of pts,
 *             which are defined to be 1/72 inch.  The printer will
 *             only see the size of the image in pts, through the
 *             scale and translate parameters and the affine
 *             transform (the ImageMatrix) of the image.
 *      (6) To render multiple images on the same page, set
 *          endpage = FALSE for each image until you get to the
 *          last, for which you set endpage = TRUE.  This causes the
 *          "showpage" command to be invoked.  Showpage outputs
 *          the entire page and clears the raster buffer for the
 *          next page to be added.  Without a "showpage",
 *          subsequent images from the next page will overlay those
 *          previously put down.
 *      (7) For multiple pages, increment the page number, starting
 *          with page 1.  This allows PostScript (and PDF) to build
 *          a page directory, which viewers use for navigation.
 * 
*/ l_ok convertJpegToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_int32 nbytes; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", __func__, 1); if (convertJpegToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, endpage)) return ERROR_INT("ps string not made", __func__, 1); if (l_binaryWrite(fileout, operation, outstr, nbytes)) { LEPT_FREE(outstr); return ERROR_INT("ps string not written to file", __func__, 1); } LEPT_FREE(outstr); return 0; } /*! * \brief convertJpegToPSString() * * Generates PS string in jpeg format from jpeg file * * \param[in] filein input jpeg file * \param[out] poutstr PS string * \param[out] pnbytes number of bytes in PS string * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; * use 0 for default * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For usage, see convertJpegToPS()
 * 
*/ static l_ok convertJpegToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!poutstr) return ERROR_INT("&outstr not defined", __func__, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *poutstr = NULL; *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", __func__, 1); /* Generate the ascii encoded jpeg data */ if ((cid = l_generateJpegData(filein, 1)) == NULL) return ERROR_INT("jpeg data not made", __func__, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter %res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) res = cid->res; else res = DefaultInputRes; } /* Get scaled location in pts */ if (scale == 0.0) scale = 1.0; xpt = scale * x * 72.f / res; ypt = scale * y * 72.f / res; wpt = scale * cid->w * 72.f / res; hpt = scale * cid->h * 72.f / res; if (pageno == 0) pageno = 1; #if DEBUG_JPEG lept_stderr("w = %d, h = %d, bps = %d, spp = %d\n", cid->w, cid->h, cid->bps, cid->spp); lept_stderr("comp bytes = %ld, nbytes85 = %ld, ratio = %5.3f\n", (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85, (l_float32)cid->nbytes85 / (l_float32)cid->nbytescomp); lept_stderr("xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_JPEG */ /* Generate the PS */ outstr = generateJpegPS(NULL, cid, xpt, ypt, wpt, hpt, pageno, endpage); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); *poutstr = outstr; *pnbytes = strlen(outstr); return 0; } /*! * \brief generateJpegPS() * * \param[in] filein [optional] input jpeg filename; can be null * \param[in] cid jpeg compressed image data * \param[in] xpt, ypt location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] wpt, hpt rendered image size in pts * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return PS string, or NULL on error * *
 * Notes:
 *      (1) Low-level function.
 * 
*/ static char * generateJpegPS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { l_int32 w, h, bps, spp; char *outstr; char bigbuf[Bufsize]; SARRAY *sa; if (!cid) return (char *)ERROR_PTR("jpeg data not defined", __func__, NULL); w = cid->w; h = cid->h; bps = cid->bps; spp = cid->spp; sa = sarrayCreate(50); sarrayAddString(sa, "%!PS-Adobe-3.0", L_COPY); sarrayAddString(sa, "%%Creator: leptonica", L_COPY); if (filein) snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); else snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: Jpeg compressed PS"); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { snprintf(bigbuf, sizeof(bigbuf), "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, "%%LanguageLevel: 2", L_COPY); sarrayAddString(sa, "%%EndComments", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "save", L_COPY); sarrayAddString(sa, "/RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, "/Data RawData << >> /DCTDecode filter def", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); if (spp == 1) sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); else if (spp == 3) sarrayAddString(sa, "/DeviceRGB setcolorspace", L_COPY); else /*spp == 4 */ sarrayAddString(sa, "/DeviceCMYK setcolorspace", L_COPY); sarrayAddString(sa, "{ << /ImageType 1", L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, " /DataSource Data", L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /BitsPerComponent %d", bps); sarrayAddString(sa, bigbuf, L_COPY); if (spp == 1) sarrayAddString(sa, " /Decode [0 1]", L_COPY); else if (spp == 3) sarrayAddString(sa, " /Decode [0 1 0 1 0 1]", L_COPY); else /* spp == 4 */ sarrayAddString(sa, " /Decode [0 1 0 1 0 1 0 1]", L_COPY); sarrayAddString(sa, " >> image", L_COPY); sarrayAddString(sa, " Data closefile", L_COPY); sarrayAddString(sa, " RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, " showpage", L_COPY); sarrayAddString(sa, " restore", L_COPY); sarrayAddString(sa, "} exec", L_COPY); /* Insert the ascii85 jpeg data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); cid->data85 = NULL; /* it has been transferred and destroyed */ /* Generate and return the output string */ outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); return outstr; } /*-------------------------------------------------------------* * For ccitt g4 compressed images * *-------------------------------------------------------------*/ /*! * \brief convertG4ToPSEmbed() * * \param[in] filein input tiff file * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function takes a g4 compressed tif file as input and
 *          generates a g4 compressed, ascii85 encoded PS file, with
 *          a bounding box.
 *      (2) The bounding box is required when a program such as TeX
 *          (through epsf) places and rescales the image.
 *      (3) The bounding box is sized for fitting the image to an
 *          8.5 x 11.0 inch page.
 *      (4) We paint this through a mask, over whatever is below.
 * 
*/ l_ok convertG4ToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes, ret; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((cid = l_generateG4Data(filein, 1)) == NULL) return ERROR_INT("g4 data not made", __func__, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS, painting through the image mask. * The bounding box information should be inserted (default). */ outstr = generateG4PS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1, 1); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); nbytes = strlen(outstr); ret = l_binaryWrite(fileout, "w", outstr, nbytes); LEPT_FREE(outstr); if (ret) L_ERROR("ps string not written to file\n", __func__); return ret; } /*! * \brief convertG4ToPS() * * \param[in] filein input tiff g4 file * \param[in] fileout output ps file * \param[in] operation "w" for write; "a" for append * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; typ. values * are 300 and 600; use 0 for automatic determination * based on image size * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] maskflag boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See the usage comments in convertJpegToPS(), some of
 *          which are repeated here.
 *      (2) This is a wrapper for tiff g4.  The PostScript that
 *          is generated is expanded by about 5/4 (due to the
 *          ascii85 encoding.  If you convert to pdf (ps2pdf), the
 *          ascii85 decoder is automatically invoked, so that the
 *          pdf wrapped g4 file is essentially the same size as
 *          the original g4 file.  It's useful to have the PS
 *          file ascii85 encoded, because many printers will not
 *          print binary PS files.
 *      (3) For the first image written to a file, use "w", which
 *          opens for write and clears the file.  For all subsequent
 *          images written to that file, use "a".
 *      (4) To render multiple images on the same page, set
 *          endpage = FALSE for each image until you get to the
 *          last, for which you set endpage = TRUE.  This causes the
 *          "showpage" command to be invoked.  Showpage outputs
 *          the entire page and clears the raster buffer for the
 *          next page to be added.  Without a "showpage",
 *          subsequent images from the next page will overlay those
 *          previously put down.
 *      (5) For multiple images to the same page, where you are writing
 *          both jpeg and tiff-g4, you have two options:
 *           (a) write the g4 first, as either image (maskflag == FALSE)
 *               or imagemask (maskflag == TRUE), and then write the
 *               jpeg over it.
 *           (b) write the jpeg first and as the last item, write
 *               the g4 as an imagemask (maskflag == TRUE), to paint
 *               through the foreground only.
 *          We have this flexibility with the tiff-g4 because it is 1 bpp.
 *      (6) For multiple pages, increment the page number, starting
 *          with page 1.  This allows PostScript (and PDF) to build
 *          a page directory, which viewers use for navigation.
 * 
*/ l_ok convertG4ToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { char *outstr; l_int32 nbytes, ret; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", __func__, 1); if (convertG4ToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, maskflag, endpage)) return ERROR_INT("ps string not made", __func__, 1); ret = l_binaryWrite(fileout, operation, outstr, nbytes); LEPT_FREE(outstr); if (ret) return ERROR_INT("ps string not written to file", __func__, 1); return 0; } /*! * \brief convertG4ToPSString() * * \param[in] filein input tiff g4 file * \param[out] poutstr PS string * \param[out] pnbytes number of bytes in PS string * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; typ. values * are 300 and 600; use 0 for automatic determination * based on image size * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] maskflag boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates PS string in G4 compressed tiff format from G4 tiff file.
 *      (2) For usage, see convertG4ToPS().
 * 
*/ static l_ok convertG4ToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!poutstr) return ERROR_INT("&outstr not defined", __func__, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *poutstr = NULL; *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if ((cid = l_generateG4Data(filein, 1)) == NULL) return ERROR_INT("g4 data not made", __func__, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter %res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) { res = cid->res; } else { if (cid->h <= 3509) /* A4 height at 300 ppi */ res = 300; else res = 600; } } xpt = scale * x * 72.f / res; ypt = scale * y * 72.f / res; wpt = scale * cid->w * 72.f / res; hpt = scale * cid->h * 72.f / res; if (pageno == 0) pageno = 1; #if DEBUG_G4 lept_stderr("w = %d, h = %d, minisblack = %d\n", cid->w, cid->h, cid->minisblack); lept_stderr("comp bytes = %ld, nbytes85 = %ld\n", (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85); lept_stderr("xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_G4 */ /* Generate the PS */ outstr = generateG4PS(NULL, cid, xpt, ypt, wpt, hpt, maskflag, pageno, endpage); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); *poutstr = outstr; *pnbytes = strlen(outstr); return 0; } /*! * \brief generateG4PS() * * \param[in] filein [optional] input tiff g4 file; can be null * \param[in] cid g4 compressed image data * \param[in] xpt, ypt location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] wpt, hpt rendered image size in pts * \param[in] maskflag boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return PS string, or NULL on error * *
 * Notes:
 *      (1) Low-level function.
 * 
*/ static char * generateG4PS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage) { l_int32 w, h; char *outstr; char bigbuf[Bufsize]; SARRAY *sa; if (!cid) return (char *)ERROR_PTR("g4 data not defined", __func__, NULL); w = cid->w; h = cid->h; sa = sarrayCreate(50); sarrayAddString(sa, "%!PS-Adobe-3.0", L_COPY); sarrayAddString(sa, "%%Creator: leptonica", L_COPY); if (filein) snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); else snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: G4 compressed PS"); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { snprintf(bigbuf, sizeof(bigbuf), "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, "%%LanguageLevel: 2", L_COPY); sarrayAddString(sa, "%%EndComments", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "save", L_COPY); sarrayAddString(sa, "100 dict begin", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); sarrayAddString(sa, "{", L_COPY); sarrayAddString(sa, " /RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, " << ", L_COPY); sarrayAddString(sa, " /ImageType 1", L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, " /BitsPerComponent 1", L_COPY); sarrayAddString(sa, " /Interpolate true", L_COPY); if (cid->minisblack) sarrayAddString(sa, " /Decode [1 0]", L_COPY); else /* miniswhite; typical for 1 bpp */ sarrayAddString(sa, " /Decode [0 1]", L_COPY); sarrayAddString(sa, " /DataSource RawData", L_COPY); sarrayAddString(sa, " <<", L_COPY); sarrayAddString(sa, " /K -1", L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Columns %d", w); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Rows %d", h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, " >> /CCITTFaxDecode filter", L_COPY); if (maskflag == TRUE) /* just paint through the fg */ sarrayAddString(sa, " >> imagemask", L_COPY); else /* Paint full image */ sarrayAddString(sa, " >> image", L_COPY); sarrayAddString(sa, " RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, " showpage", L_COPY); sarrayAddString(sa, "}", L_COPY); sarrayAddString(sa, "%%BeginData:", L_COPY); sarrayAddString(sa, "exec", L_COPY); /* Insert the ascii85 ccittg4 data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); /* Concat the trailing data */ sarrayAddString(sa, "%%EndData", L_COPY); sarrayAddString(sa, "end", L_COPY); sarrayAddString(sa, "restore", L_COPY); outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); cid->data85 = NULL; /* it has been transferred and destroyed */ return outstr; } /*-------------------------------------------------------------* * For tiff multipage files * *-------------------------------------------------------------*/ /*! * \brief convertTiffMultipageToPS() * * \param[in] filein input tiff multipage file * \param[in] fileout output ps file * \param[in] fillfract factor for filling 8.5 x 11 inch page; * use 0.0 for DefaultFillFraction * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This converts a multipage tiff file of binary page images
 *          into a ccitt g4 compressed PS file.
 *      (2) If the images are generated from a standard resolution fax,
 *          the vertical resolution is doubled to give a normal-looking
 *          aspect ratio.
 * 
*/ l_ok convertTiffMultipageToPS(const char *filein, const char *fileout, l_float32 fillfract) { char *tempfile; l_int32 i, npages, w, h, istiff; l_float32 scale; PIX *pix, *pixs; FILE *fp; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((fp = fopenReadStream(filein)) == NULL) return ERROR_INT_1("file not found", filein, __func__, 1); istiff = fileFormatIsTiff(fp); if (!istiff) { fclose(fp); return ERROR_INT_1("file not tiff format", filein, __func__, 1); } tiffGetCount(fp, &npages); fclose(fp); if (fillfract == 0.0) fillfract = DefaultFillFraction; for (i = 0; i < npages; i++) { if ((pix = pixReadTiff(filein, i)) == NULL) return ERROR_INT_1("pix not made", filein, __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (w == 1728 && h < w) /* it's a std res fax */ pixs = pixScale(pix, 1.0, 2.0); else pixs = pixClone(pix); tempfile = l_makeTempFilename(); pixWrite(tempfile, pixs, IFF_TIFF_G4); scale = L_MIN(fillfract * 2550 / w, fillfract * 3300 / h); if (i == 0) convertG4ToPS(tempfile, fileout, "w", 0, 0, 300, scale, i + 1, FALSE, TRUE); else convertG4ToPS(tempfile, fileout, "a", 0, 0, 300, scale, i + 1, FALSE, TRUE); lept_rmfile(tempfile); LEPT_FREE(tempfile); pixDestroy(&pix); pixDestroy(&pixs); } return 0; } /*---------------------------------------------------------------------* * For flate (gzip) compressed images (e.g., png) * *---------------------------------------------------------------------*/ /*! * \brief convertFlateToPSEmbed() * * \param[in] filein input file -- any format * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function takes any image file as input and generates a
 *          flate-compressed, ascii85 encoded PS file, with a bounding box.
 *      (2) The bounding box is required when a program such as TeX
 *          (through epsf) places and rescales the image.
 *      (3) The bounding box is sized for fitting the image to an
 *          8.5 x 11.0 inch page.
 * 
*/ l_ok convertFlateToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes, ret; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if ((cid = l_generateFlateData(filein, 1)) == NULL) return ERROR_INT("flate data not made", __func__, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS. * The bounding box information should be inserted (default). */ outstr = generateFlatePS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); nbytes = strlen(outstr); ret = l_binaryWrite(fileout, "w", outstr, nbytes); LEPT_FREE(outstr); if (ret) L_ERROR("ps string not written to file\n", __func__); return ret; } /*! * \brief convertFlateToPS() * * \param[in] filein input file -- any format * \param[in] fileout output ps file * \param[in] operation "w" for write; "a" for append * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; * use 0 for default * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This outputs level 3 PS as flate compressed (overlaid
 *          with ascii85 encoding).
 *      (2) An output file can contain multiple pages, each with
 *          multiple images.  The arguments to convertFlateToPS()
 *          allow you to control placement of png images on multiple
 *          pages within a PostScript file.
 *      (3) For the first image written to a file, use "w", which
 *          opens for write and clears the file.  For all subsequent
 *          images written to that file, use "a".
 *      (4) The (x, y) parameters give the LL corner of the image
 *          relative to the LL corner of the page.  They are in
 *          units of pixels if scale = 1.0.  If you use (e.g.)
 *          scale = 2.0, the image is placed at (2x, 2y) on the page,
 *          and the image dimensions are also doubled.
 *      (5) Display vs printed resolution:
 *           * If your display is 75 ppi and your image was created
 *             at a resolution of 300 ppi, you can get the image
 *             to print at the same size as it appears on your display
 *             by either setting scale = 4.0 or by setting  res = 75.
 *             Both tell the printer to make a 4x enlarged image.
 *           * If your image is generated at 150 ppi and you use scale = 1,
 *             it will be rendered such that 150 pixels correspond
 *             to 72 pts (1 inch on the printer).  This function does
 *             the conversion from pixels (with or without scaling) to
 *             pts, which are the units that the printer uses.
 *           * The printer will choose its own resolution to use
 *             in rendering the image, which will not affect the size
 *             of the rendered image.  That is because the output
 *             PostScript file describes the geometry in terms of pts,
 *             which are defined to be 1/72 inch.  The printer will
 *             only see the size of the image in pts, through the
 *             scale and translate parameters and the affine
 *             transform (the ImageMatrix) of the image.
 *      (6) To render multiple images on the same page, set
 *          endpage = FALSE for each image until you get to the
 *          last, for which you set endpage = TRUE.  This causes the
 *          "showpage" command to be invoked.  Showpage outputs
 *          the entire page and clears the raster buffer for the
 *          next page to be added.  Without a "showpage",
 *          subsequent images from the next page will overlay those
 *          previously put down.
 *      (7) For multiple pages, increment the page number, starting
 *          with page 1.  This allows PostScript (and PDF) to build
 *          a page directory, which viewers use for navigation.
 * 
*/ l_ok convertFlateToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_int32 nbytes, ret; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", __func__, 1); if (convertFlateToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, endpage)) return ERROR_INT("ps string not made", __func__, 1); ret = l_binaryWrite(fileout, operation, outstr, nbytes); LEPT_FREE(outstr); if (ret) L_ERROR("ps string not written to file\n", __func__); return ret; } /*! * \brief convertFlateToPSString() * * Generates level 3 PS string in flate compressed format. * * \param[in] filein input image file * \param[out] poutstr PS string * \param[out] pnbytes number of bytes in PS string * \param[in] x, y location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] res resolution of the input image, in ppi; * use 0 for default * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page. * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned PS character array is a null-terminated
 *          ascii string.  All the raster data is ascii85 encoded, so
 *          there are no null bytes embedded in it.
 *      (2) The raster encoding is made with gzip, the same as that
 *          in a png file that is compressed without prediction.
 *          The raster data itself is 25% larger than that in the
 *          binary form, due to the ascii85 encoding.
 *
 *  Usage:  See convertFlateToPS()
 * 
*/ static l_ok convertFlateToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; if (!poutstr) return ERROR_INT("&outstr not defined", __func__, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); *pnbytes = 0; *poutstr = NULL; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if ((cid = l_generateFlateData(filein, 1)) == NULL) return ERROR_INT("flate data not made", __func__, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter %res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) res = cid->res; else res = DefaultInputRes; } xpt = scale * x * 72.f / res; ypt = scale * y * 72.f / res; wpt = scale * cid->w * 72.f / res; hpt = scale * cid->h * 72.f / res; if (pageno == 0) pageno = 1; #if DEBUG_FLATE lept_stderr("w = %d, h = %d, bps = %d, spp = %d\n", cid->w, cid->h, cid->bps, cid->spp); lept_stderr("uncomp bytes = %ld, comp bytes = %ld, nbytes85 = %ld\n", (unsigned long)cid->nbytes, (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85); lept_stderr("xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_FLATE */ /* Generate the PS */ outstr = generateFlatePS(NULL, cid, xpt, ypt, wpt, hpt, pageno, endpage); l_CIDataDestroy(&cid); if (!outstr) return ERROR_INT("outstr not made", __func__, 1); *poutstr = outstr; *pnbytes = strlen(outstr); return 0; } /*! * \brief generateFlatePS() * * \param[in] filein [optional] input filename; can be null * \param[in] cid flate compressed image data * \param[in] xpt, ypt location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page * \param[in] wpt, hpt rendered image size in pts * \param[in] pageno page number; must start with 1; you can use 0 * if there is only one page * \param[in] endpage boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise * \return PS string, or NULL on error */ static char * generateFlatePS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { l_int32 w, h, bps, spp; char *outstr; char bigbuf[Bufsize]; SARRAY *sa; if (!cid) return (char *)ERROR_PTR("flate data not defined", __func__, NULL); w = cid->w; h = cid->h; bps = cid->bps; spp = cid->spp; sa = sarrayCreate(50); sarrayAddString(sa, "%!PS-Adobe-3.0 EPSF-3.0", L_COPY); sarrayAddString(sa, "%%Creator: leptonica", L_COPY); if (filein) snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); else snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: Flate compressed PS"); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { snprintf(bigbuf, sizeof(bigbuf), "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, "%%LanguageLevel: 3", L_COPY); sarrayAddString(sa, "%%EndComments", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, "save", L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); /* If there is a colormap, add the data; it is now owned by sa */ if (cid->cmapdata85) { snprintf(bigbuf, sizeof(bigbuf), "[ /Indexed /DeviceRGB %d %%set colormap type/size", cid->ncolors - 1); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, " <~", L_COPY); sarrayAddString(sa, cid->cmapdata85, L_INSERT); sarrayAddString(sa, " ] setcolorspace", L_COPY); } else if (spp == 1) { sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); } else { /* spp == 3 */ sarrayAddString(sa, "/DeviceRGB setcolorspace", L_COPY); } sarrayAddString(sa, "/RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, "/Data RawData << >> /FlateDecode filter def", L_COPY); sarrayAddString(sa, "{ << /ImageType 1", L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /BitsPerComponent %d", bps); sarrayAddString(sa, bigbuf, L_COPY); snprintf(bigbuf, sizeof(bigbuf), " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); if (cid->cmapdata85) { sarrayAddString(sa, " /Decode [0 255]", L_COPY); } else if (spp == 1) { if (bps == 1) /* miniswhite photometry */ sarrayAddString(sa, " /Decode [1 0]", L_COPY); else /* bps > 1 */ sarrayAddString(sa, " /Decode [0 1]", L_COPY); } else { /* spp == 3 */ sarrayAddString(sa, " /Decode [0 1 0 1 0 1]", L_COPY); } sarrayAddString(sa, " /DataSource Data", L_COPY); sarrayAddString(sa, " >> image", L_COPY); sarrayAddString(sa, " Data closefile", L_COPY); sarrayAddString(sa, " RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, " showpage", L_COPY); sarrayAddString(sa, " restore", L_COPY); sarrayAddString(sa, "} exec", L_COPY); /* Insert the ascii85 gzipped data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); /* Generate and return the output string */ outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); cid->cmapdata85 = NULL; /* it has been transferred to sa and destroyed */ cid->data85 = NULL; /* it has been transferred to sa and destroyed */ return outstr; } /*---------------------------------------------------------------------* * Write to memory * *---------------------------------------------------------------------*/ /*! * \brief pixWriteMemPS() * * \param[out] pdata data of tiff compressed image * \param[out] psize size of returned data * \param[in] pix * \param[in] box [optional] * \param[in] res can use 0 for default of 300 ppi * \param[in] scale to prevent scaling, use either 1.0 or 0.0 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteStringPS() for usage.
 *      (2) This is just a wrapper for pixWriteStringPS(), which
 *          writes uncompressed image data to memory.
 * 
*/ l_ok pixWriteMemPS(l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); *pdata = (l_uint8 *)pixWriteStringPS(pix, box, res, scale); *psize = strlen((char *)(*pdata)); return 0; } /*-------------------------------------------------------------* * Converting resolution * *-------------------------------------------------------------*/ /*! * \brief getResLetterPage() * * \param[in] w image width, pixels * \param[in] h image height, pixels * \param[in] fillfract fraction in linear dimension of full page, * not to be exceeded; use 0 for default * \return resolution */ l_int32 getResLetterPage(l_int32 w, l_int32 h, l_float32 fillfract) { l_int32 resw, resh, res; if (fillfract == 0.0) fillfract = DefaultFillFraction; resw = (l_int32)((w * 72.) / (LetterWidth * fillfract)); resh = (l_int32)((h * 72.) / (LetterHeight * fillfract)); res = L_MAX(resw, resh); return res; } /*! * \brief getResA4Page() * * \param[in] w image width, pixels * \param[in] h image height, pixels * \param[in] fillfract fraction in linear dimension of full page, * not to be exceeded; use 0 for default * \return resolution */ l_int32 getResA4Page(l_int32 w, l_int32 h, l_float32 fillfract) { l_int32 resw, resh, res; if (fillfract == 0.0) fillfract = DefaultFillFraction; resw = (l_int32)((w * 72.) / (A4Width * fillfract)); resh = (l_int32)((h * 72.) / (A4Height * fillfract)); res = L_MAX(resw, resh); return res; } /*-------------------------------------------------------------* * Setting flag for writing bounding box hint * *-------------------------------------------------------------*/ void l_psWriteBoundingBox(l_int32 flag) { var_PS_WRITE_BOUNDING_BOX = flag; } /* --------------------------------------------*/ #endif /* USE_PSIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/psio2stub.c000066400000000000000000000130511506303110300164410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file psio2stub.c *
 *
 *     Stubs for psio2.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ l_ok pixWritePSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamPS(FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ char * pixWriteStringPS(PIX *pixs, BOX *box, l_int32 res, l_float32 scale) { return (char *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ char * generateUncompressedPS(char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag) { return (char *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok convertJpegToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertJpegToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertG4ToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertG4ToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertTiffMultipageToPS(const char *filein, const char *fileout, l_float32 fillfract) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertFlateToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok convertFlateToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemPS(l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_int32 getResLetterPage(l_int32 w, l_int32 h, l_float32 fillfract) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ void l_psWriteBoundingBox(l_int32 flag) { L_ERROR("function not present\n", __func__); return; } /* --------------------------------------------*/ #endif /* !USE_PSIO */ /* --------------------------------------------*/ leptonica-1.86.0/src/ptabasic.c000066400000000000000000001131741506303110300163040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ptabasic.c *
 *
 *      Pta creation, destruction, copy, clone, empty
 *           PTA            *ptaCreate()
 *           PTA            *ptaCreateFromNuma()
 *           void            ptaDestroy()
 *           PTA            *ptaCopy()
 *           PTA            *ptaCopyRange()
 *           PTA            *ptaClone()
 *           l_int32         ptaEmpty()
 *
 *      Pta array extension
 *           l_int32         ptaAddPt()
 *           static l_int32  ptaExtendArrays()
 *
 *      Pta insertion and removal
 *           l_int32         ptaInsertPt()
 *           l_int32         ptaRemovePt()
 *
 *      Pta accessors
 *           l_int32         ptaGetCount()
 *           l_int32         ptaGetPt()
 *           l_int32         ptaGetIPt()
 *           l_int32         ptaSetPt()
 *           l_int32         ptaGetArrays()
 *
 *      Pta serialized for I/O
 *           PTA            *ptaRead()
 *           PTA            *ptaReadStream()
 *           PTA            *ptaReadMem()
 *           l_int32         ptaWriteDebug()
 *           l_int32         ptaWrite()
 *           l_int32         ptaWriteStream()
 *           l_int32         ptaWriteMem()
 *
 *      Ptaa creation, destruction
 *           PTAA           *ptaaCreate()
 *           void            ptaaDestroy()
 *
 *      Ptaa array extension
 *           l_int32         ptaaAddPta()
 *           static l_int32  ptaaExtendArray()
 *
 *      Ptaa accessors
 *           l_int32         ptaaGetCount()
 *           l_int32         ptaaGetPta()
 *           l_int32         ptaaGetPt()
 *
 *      Ptaa array modifiers
 *           l_int32         ptaaInitFull()
 *           l_int32         ptaaReplacePta()
 *           l_int32         ptaaAddPt()
 *           l_int32         ptaaTruncate()
 *
 *      Ptaa serialized for I/O
 *           PTAA           *ptaaRead()
 *           PTAA           *ptaaReadStream()
 *           PTAA           *ptaaReadMem()
 *           l_int32         ptaaWrite()
 *           l_int32         ptaaWriteStream()
 *           l_int32         ptaaWriteMem()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" #include "pix_internal.h" static const l_uint32 MaxArraySize = 100000000; /* 100 million */ static const l_uint32 MaxPtrArraySize = 10000000; /* 10 million */ static const l_int32 InitialArraySize = 50; /*!< n'importe quoi */ /* Static functions */ static l_int32 ptaExtendArrays(PTA *pta); static l_int32 ptaaExtendArray(PTAA *ptaa); /*---------------------------------------------------------------------* * Pta creation, destruction, copy, clone * *---------------------------------------------------------------------*/ /*! * \brief ptaCreate() * * \param[in] n initial array sizes * \return pta, or NULL on error. */ PTA * ptaCreate(l_int32 n) { PTA *pta; if (n <= 0 || n > (l_int32)MaxArraySize) n = InitialArraySize; pta = (PTA *)LEPT_CALLOC(1, sizeof(PTA)); pta->n = 0; pta->nalloc = n; pta->refcount = 1; pta->x = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32)); pta->y = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32)); if (!pta->x || !pta->y) { ptaDestroy(&pta); return (PTA *)ERROR_PTR("x and y arrays not both made", __func__, NULL); } return pta; } /*! * \brief ptaCreateFromNuma() * * \param[in] nax [optional] can be null * \param[in] nay * \return pta, or NULL on error. */ PTA * ptaCreateFromNuma(NUMA *nax, NUMA *nay) { l_int32 i, n; l_float32 startx, delx, xval, yval; PTA *pta; if (!nay) return (PTA *)ERROR_PTR("nay not defined", __func__, NULL); n = numaGetCount(nay); if (nax && numaGetCount(nax) != n) return (PTA *)ERROR_PTR("nax and nay sizes differ", __func__, NULL); pta = ptaCreate(n); numaGetParameters(nay, &startx, &delx); for (i = 0; i < n; i++) { if (nax) numaGetFValue(nax, i, &xval); else /* use implicit x values from nay */ xval = startx + i * delx; numaGetFValue(nay, i, &yval); ptaAddPt(pta, xval, yval); } return pta; } /*! * \brief ptaDestroy() * * \param[in,out] ppta will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the pta.
 *      (2) Always nulls the input ptr.
 * 
*/ void ptaDestroy(PTA **ppta) { PTA *pta; if (ppta == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((pta = *ppta) == NULL) return; if (--pta->refcount == 0) { LEPT_FREE(pta->x); LEPT_FREE(pta->y); LEPT_FREE(pta); } *ppta = NULL; } /*! * \brief ptaCopy() * * \param[in] pta * \return copy of pta, or NULL on error */ PTA * ptaCopy(PTA *pta) { l_int32 i; l_float32 x, y; PTA *npta; if (!pta) return (PTA *)ERROR_PTR("pta not defined", __func__, NULL); if ((npta = ptaCreate(pta->nalloc)) == NULL) return (PTA *)ERROR_PTR("npta not made", __func__, NULL); for (i = 0; i < pta->n; i++) { ptaGetPt(pta, i, &x, &y); ptaAddPt(npta, x, y); } return npta; } /*! * \brief ptaCopyRange() * * \param[in] ptas * \param[in] istart starting index in ptas * \param[in] iend ending index in ptas; use 0 to copy to end * \return 0 if OK, 1 on error */ PTA * ptaCopyRange(PTA *ptas, l_int32 istart, l_int32 iend) { l_int32 n, i, x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); if (istart < 0) istart = 0; if (istart >= n) return (PTA *)ERROR_PTR("istart out of bounds", __func__, NULL); if (iend <= 0 || iend >= n) iend = n - 1; if (istart > iend) return (PTA *)ERROR_PTR("istart > iend; no pts", __func__, NULL); if ((ptad = ptaCreate(iend - istart + 1)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = istart; i <= iend; i++) { ptaGetIPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * \brief ptaClone() * * \param[in] pta * \return ptr to same pta, or NULL on error */ PTA * ptaClone(PTA *pta) { if (!pta) return (PTA *)ERROR_PTR("pta not defined", __func__, NULL); ++pta->refcount; return pta; } /*! * \brief ptaEmpty() * * \param[in] pta * \return 0 if OK, 1 on error * *
 * Notes:
 *      This only resets the Pta::n field, for reuse
 * 
*/ l_ok ptaEmpty(PTA *pta) { if (!pta) return ERROR_INT("ptad not defined", __func__, 1); pta->n = 0; return 0; } /*---------------------------------------------------------------------* * Pta array extension * *---------------------------------------------------------------------*/ /*! * \brief ptaAddPt() * * \param[in] pta * \param[in] x, y * \return 0 if OK, 1 on error */ l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y) { l_int32 n; if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = pta->n; if (n >= pta->nalloc) { if (ptaExtendArrays(pta)) return ERROR_INT("extension failed", __func__, 1); } pta->x[n] = x; pta->y[n] = y; pta->n++; return 0; } /*! * \brief ptaExtendArrays() * * \param[in] pta * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Doubles the size of the array.
 *      (2) The max number of points is 100M.
 * 
*/ static l_int32 ptaExtendArrays(PTA *pta) { size_t oldsize, newsize; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (pta->nalloc > (l_int32)MaxArraySize) /* belt & suspenders */ return ERROR_INT("pta at maximum size; can't extend", __func__, 1); oldsize = 4 * pta->nalloc; if (pta->nalloc > MaxArraySize / 2) { newsize = 4 * MaxArraySize; pta->nalloc = MaxArraySize; } else { newsize = 2 * oldsize; pta->nalloc *= 2; } if ((pta->x = (l_float32 *)reallocNew((void **)&pta->x, oldsize, newsize)) == NULL) return ERROR_INT("new x array not returned", __func__, 1); if ((pta->y = (l_float32 *)reallocNew((void **)&pta->y, oldsize, newsize)) == NULL) return ERROR_INT("new y array not returned", __func__, 1); return 0; } /*---------------------------------------------------------------------* * Pta insertion and removal * *---------------------------------------------------------------------*/ /*! * \brief ptaInsertPt() * * \param[in] pta * \param[in] index at which pt is to be inserted * \param[in] x, y point values * \return 0 if OK; 1 on error */ l_ok ptaInsertPt(PTA *pta, l_int32 index, l_int32 x, l_int32 y) { l_int32 i, n; if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaGetCount(pta); if (index < 0 || index > n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n); return 1; } if (n > pta->nalloc) { if (ptaExtendArrays(pta)) return ERROR_INT("extension failed", __func__, 1); } pta->n++; for (i = n; i > index; i--) { pta->x[i] = pta->x[i - 1]; pta->y[i] = pta->y[i - 1]; } pta->x[index] = x; pta->y[index] = y; return 0; } /*! * \brief ptaRemovePt() * * \param[in] pta * \param[in] index of point to be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This shifts pta[i] --> pta[i - 1] for all i > index.
 *      (2) It should not be used repeatedly on large arrays,
 *          because the function is O(n).
 * 
*/ l_ok ptaRemovePt(PTA *pta, l_int32 index) { l_int32 i, n; if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaGetCount(pta); if (index < 0 || index >= n) { L_ERROR("index %d not in [0,...,%d]\n", __func__, index, n - 1); return 1; } /* Remove the point */ for (i = index + 1; i < n; i++) { pta->x[i - 1] = pta->x[i]; pta->y[i - 1] = pta->y[i]; } pta->n--; return 0; } /*---------------------------------------------------------------------* * Pta accessors * *---------------------------------------------------------------------*/ /*! * \brief ptaGetCount() * * \param[in] pta * \return count, or 0 if no pta */ l_int32 ptaGetCount(PTA *pta) { if (!pta) return ERROR_INT("pta not defined", __func__, 0); return pta->n; } /*! * \brief ptaGetPt() * * \param[in] pta * \param[in] index into arrays * \param[out] px [optional] float x value * \param[out] py [optional] float y value * \return 0 if OK; 1 on error */ l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py) { if (px) *px = 0; if (py) *py = 0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", __func__, 1); if (px) *px = pta->x[index]; if (py) *py = pta->y[index]; return 0; } /*! * \brief ptaGetIPt() * * \param[in] pta * \param[in] index into arrays * \param[out] px [optional] integer x value * \param[out] py [optional] integer y value * \return 0 if OK; 1 on error */ l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py) { if (px) *px = 0; if (py) *py = 0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", __func__, 1); if (px) *px = (l_int32)(pta->x[index] + 0.5); if (py) *py = (l_int32)(pta->y[index] + 0.5); return 0; } /*! * \brief ptaSetPt() * * \param[in] pta * \param[in] index into arrays * \param[in] x, y * \return 0 if OK; 1 on error */ l_ok ptaSetPt(PTA *pta, l_int32 index, l_float32 x, l_float32 y) { if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", __func__, 1); pta->x[index] = x; pta->y[index] = y; return 0; } /*! * \brief ptaGetArrays() * * \param[in] pta * \param[out] pnax [optional] numa of x array * \param[out] pnay [optional] numa of y array * \return 0 if OK; 1 on error or if pta is empty * *
 * Notes:
 *      (1) This copies the internal arrays into new Numas.
 * 
*/ l_ok ptaGetArrays(PTA *pta, NUMA **pnax, NUMA **pnay) { l_int32 i, n; NUMA *nax, *nay; if (!pnax && !pnay) return ERROR_INT("no output requested", __func__, 1); if (pnax) *pnax = NULL; if (pnay) *pnay = NULL; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) == 0) return ERROR_INT("pta is empty", __func__, 1); if (pnax) { if ((nax = numaCreate(n)) == NULL) return ERROR_INT("nax not made", __func__, 1); *pnax = nax; for (i = 0; i < n; i++) nax->array[i] = pta->x[i]; nax->n = n; } if (pnay) { if ((nay = numaCreate(n)) == NULL) return ERROR_INT("nay not made", __func__, 1); *pnay = nay; for (i = 0; i < n; i++) nay->array[i] = pta->y[i]; nay->n = n; } return 0; } /*---------------------------------------------------------------------* * Pta serialized for I/O * *---------------------------------------------------------------------*/ /*! * \brief ptaRead() * * \param[in] filename * \return pta, or NULL on error */ PTA * ptaRead(const char *filename) { FILE *fp; PTA *pta; if (!filename) return (PTA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PTA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); pta = ptaReadStream(fp); fclose(fp); if (!pta) return (PTA *)ERROR_PTR_1("pta not read", filename, __func__, NULL); return pta; } /*! * \brief ptaReadStream() * * \param[in] fp file stream * \return pta, or NULL on error * *
 * Notes:
 *      (1) It is OK for the pta to be empty (n == 0).
 * 
*/ PTA * ptaReadStream(FILE *fp) { char typestr[128]; /* hardcoded below in fscanf */ l_int32 i, n, ix, iy, type, version; l_float32 x, y; PTA *pta; if (!fp) return (PTA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\n Pta Version %d\n", &version) != 1) return (PTA *)ERROR_PTR("not a pta file", __func__, NULL); if (version != PTA_VERSION_NUMBER) return (PTA *)ERROR_PTR("invalid pta version", __func__, NULL); if (fscanf(fp, " Number of pts = %d; format = %127s\n", &n, typestr) != 2) return (PTA *)ERROR_PTR("not a pta file", __func__, NULL); if (n < 0) return (PTA *)ERROR_PTR("num pts <= 0", __func__, NULL); if (n > (l_int32)MaxArraySize) return (PTA *)ERROR_PTR("too many pts", __func__, NULL); if (n == 0) L_INFO("the pta is empty\n", __func__); if (!strcmp(typestr, "float")) type = 0; else /* typestr is "integer" */ type = 1; if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); for (i = 0; i < n; i++) { if (type == 0) { /* data is float */ if (fscanf(fp, " (%f, %f)\n", &x, &y) != 2) { ptaDestroy(&pta); return (PTA *)ERROR_PTR("error reading floats", __func__, NULL); } ptaAddPt(pta, x, y); } else { /* data is integer */ if (fscanf(fp, " (%d, %d)\n", &ix, &iy) != 2) { ptaDestroy(&pta); return (PTA *)ERROR_PTR("error reading ints", __func__, NULL); } ptaAddPt(pta, ix, iy); } } return pta; } /*! * \brief ptaReadMem() * * \param[in] data serialization in ascii * \param[in] size of data in bytes; can use strlen to get it * \return pta, or NULL on error */ PTA * ptaReadMem(const l_uint8 *data, size_t size) { FILE *fp; PTA *pta; if (!data) return (PTA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PTA *)ERROR_PTR("stream not opened", __func__, NULL); pta = ptaReadStream(fp); fclose(fp); if (!pta) L_ERROR("pta not read\n", __func__); return pta; } /*! * \brief ptaWriteDebug() * * \param[in] filename * \param[in] pta * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of ptaWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok ptaWriteDebug(const char *filename, PTA *pta, l_int32 type) { if (LeptDebugOK) { return ptaWrite(filename, pta, type); } else { L_INFO("write to named temp file %s is disabled\n", __func__, filename); return 0; } } /*! * \brief ptaWrite() * * \param[in] filename * \param[in] pta * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error */ l_ok ptaWrite(const char *filename, PTA *pta, l_int32 type) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = ptaWriteStream(fp, pta, type); fclose(fp); if (ret) return ERROR_INT_1("pta not written to stream", filename, __func__, 1); return 0; } /*! * \brief ptaWriteStream() * * \param[in] fp file stream * \param[in] pta * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK; 1 on error */ l_ok ptaWriteStream(FILE *fp, PTA *pta, l_int32 type) { l_int32 i, n, ix, iy; l_float32 x, y; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaGetCount(pta); fprintf(fp, "\n Pta Version %d\n", PTA_VERSION_NUMBER); if (type == 0) fprintf(fp, " Number of pts = %d; format = float\n", n); else /* type == 1 */ fprintf(fp, " Number of pts = %d; format = integer\n", n); for (i = 0; i < n; i++) { if (type == 0) { /* data is float */ ptaGetPt(pta, i, &x, &y); fprintf(fp, " (%f, %f)\n", x, y); } else { /* data is integer */ ptaGetIPt(pta, i, &ix, &iy); fprintf(fp, " (%d, %d)\n", ix, iy); } } return 0; } /*! * \brief ptaWriteMem() * * \param[out] pdata data of serialized pta; ascii * \param[out] psize size of returned data * \param[in] pta * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a pta in memory and puts the result in a buffer.
 * 
*/ l_ok ptaWriteMem(l_uint8 **pdata, size_t *psize, PTA *pta, l_int32 type) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = ptaWriteStream(fp, pta, type); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = ptaWriteStream(fp, pta, type); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*---------------------------------------------------------------------* * PTAA creation, destruction * *---------------------------------------------------------------------*/ /*! * \brief ptaaCreate() * * \param[in] n initial number of ptrs * \return ptaa, or NULL on error */ PTAA * ptaaCreate(l_int32 n) { PTAA *ptaa; if (n <= 0 || n > (l_int32)MaxPtrArraySize) n = InitialArraySize; ptaa = (PTAA *)LEPT_CALLOC(1, sizeof(PTAA)); ptaa->n = 0; ptaa->nalloc = n; if ((ptaa->pta = (PTA **)LEPT_CALLOC(n, sizeof(PTA *))) == NULL) { ptaaDestroy(&ptaa); return (PTAA *)ERROR_PTR("pta ptrs not made", __func__, NULL); } return ptaa; } /*! * \brief ptaaDestroy() * * \param[in,out] pptaa will be set to null before returning * \return void */ void ptaaDestroy(PTAA **pptaa) { l_int32 i; PTAA *ptaa; if (pptaa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((ptaa = *pptaa) == NULL) return; for (i = 0; i < ptaa->n; i++) ptaDestroy(&ptaa->pta[i]); LEPT_FREE(ptaa->pta); LEPT_FREE(ptaa); *pptaa = NULL; } /*---------------------------------------------------------------------* * PTAA array extension * *---------------------------------------------------------------------*/ /*! * \brief ptaaAddPta() * * \param[in] ptaa * \param[in] pta to be added * \param[in] copyflag L_INSERT, L_COPY, L_CLONE * \return 0 if OK, 1 on error */ l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag) { l_int32 n; PTA *ptac; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (copyflag == L_INSERT) { ptac = pta; } else if (copyflag == L_COPY) { if ((ptac = ptaCopy(pta)) == NULL) return ERROR_INT("ptac not made", __func__, 1); } else if (copyflag == L_CLONE) { if ((ptac = ptaClone(pta)) == NULL) return ERROR_INT("pta clone not made", __func__, 1); } else { return ERROR_INT("invalid copyflag", __func__, 1); } n = ptaaGetCount(ptaa); if (n >= ptaa->nalloc) { if (ptaaExtendArray(ptaa)) { if (copyflag != L_INSERT) ptaDestroy(&ptac); return ERROR_INT("extension failed", __func__, 1); } } ptaa->pta[n] = ptac; ptaa->n++; return 0; } /*! * \brief ptaaExtendArray() * * \param[in] ptaa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This doubles the pta ptr array size.
 *      (2) The max number of pta ptrs is 10M.
 * 
* */ static l_int32 ptaaExtendArray(PTAA *ptaa) { size_t oldsize, newsize; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); oldsize = ptaa->nalloc * sizeof(PTA *); newsize = 2 * oldsize; if (newsize > 8 * MaxPtrArraySize) return ERROR_INT("newsize > 80 MB; too large", __func__, 1); if ((ptaa->pta = (PTA **)reallocNew((void **)&ptaa->pta, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); ptaa->nalloc *= 2; return 0; } /*---------------------------------------------------------------------* * Ptaa accessors * *---------------------------------------------------------------------*/ /*! * \brief ptaaGetCount() * * \param[in] ptaa * \return count, or 0 if no ptaa */ l_int32 ptaaGetCount(PTAA *ptaa) { if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 0); return ptaa->n; } /*! * \brief ptaaGetPta() * * \param[in] ptaa * \param[in] index to the i-th pta * \param[in] accessflag L_COPY or L_CLONE * \return pta, or NULL on error */ PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag) { if (!ptaa) return (PTA *)ERROR_PTR("ptaa not defined", __func__, NULL); if (index < 0 || index >= ptaa->n) return (PTA *)ERROR_PTR("index not valid", __func__, NULL); if (accessflag == L_COPY) return ptaCopy(ptaa->pta[index]); else if (accessflag == L_CLONE) return ptaClone(ptaa->pta[index]); else return (PTA *)ERROR_PTR("invalid accessflag", __func__, NULL); } /*! * \brief ptaaGetPt() * * \param[in] ptaa * \param[in] ipta to the i-th pta * \param[in] jpt index to the j-th pt in the pta * \param[out] px [optional] float x value * \param[out] py [optional] float y value * \return 0 if OK; 1 on error */ l_ok ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py) { PTA *pta; if (px) *px = 0; if (py) *py = 0; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (ipta < 0 || ipta >= ptaa->n) return ERROR_INT("index ipta not valid", __func__, 1); pta = ptaaGetPta(ptaa, ipta, L_CLONE); if (jpt < 0 || jpt >= pta->n) { ptaDestroy(&pta); return ERROR_INT("index jpt not valid", __func__, 1); } ptaGetPt(pta, jpt, px, py); ptaDestroy(&pta); return 0; } /*---------------------------------------------------------------------* * Ptaa array modifiers * *---------------------------------------------------------------------*/ /*! * \brief ptaaInitFull() * * \param[in] ptaa can have non-null ptrs in the ptr array * \param[in] pta to be replicated into the entire ptr array * \return 0 if OK; 1 on error */ l_ok ptaaInitFull(PTAA *ptaa, PTA *pta) { l_int32 n, i; PTA *ptat; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaa->nalloc; ptaa->n = n; for (i = 0; i < n; i++) { ptat = ptaCopy(pta); ptaaReplacePta(ptaa, i, ptat); } return 0; } /*! * \brief ptaaReplacePta() * * \param[in] ptaa * \param[in] index to the index-th pta * \param[in] pta insert and replace any existing one * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Any existing pta is destroyed, and the input one
 *          is inserted in its place.
 *      (2) If %index is invalid, return 1 (error)
 * 
*/ l_ok ptaaReplacePta(PTAA *ptaa, l_int32 index, PTA *pta) { l_int32 n; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaaGetCount(ptaa); if (index < 0 || index >= n) return ERROR_INT("index not valid", __func__, 1); ptaDestroy(&ptaa->pta[index]); ptaa->pta[index] = pta; return 0; } /*! * \brief ptaaAddPt() * * \param[in] ptaa * \param[in] ipta to the i-th pta * \param[in] x,y point coordinates * \return 0 if OK; 1 on error */ l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y) { PTA *pta; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if (ipta < 0 || ipta >= ptaa->n) return ERROR_INT("index ipta not valid", __func__, 1); pta = ptaaGetPta(ptaa, ipta, L_CLONE); ptaAddPt(pta, x, y); ptaDestroy(&pta); return 0; } /*! * \brief ptaaTruncate() * * \param[in] ptaa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This identifies the largest index containing a pta that
 *          has any points within it, destroys all pta above that index,
 *          and resets the count.
 * 
*/ l_ok ptaaTruncate(PTAA *ptaa) { l_int32 i, n, np; PTA *pta; if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); n = ptaaGetCount(ptaa); for (i = n - 1; i >= 0; i--) { pta = ptaaGetPta(ptaa, i, L_CLONE); if (!pta) { ptaa->n--; continue; } np = ptaGetCount(pta); ptaDestroy(&pta); if (np == 0) { ptaDestroy(&ptaa->pta[i]); ptaa->n--; } else { break; } } return 0; } /*---------------------------------------------------------------------* * Ptaa serialized for I/O * *---------------------------------------------------------------------*/ /*! * \brief ptaaRead() * * \param[in] filename * \return ptaa, or NULL on error */ PTAA * ptaaRead(const char *filename) { FILE *fp; PTAA *ptaa; if (!filename) return (PTAA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PTAA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); ptaa = ptaaReadStream(fp); fclose(fp); if (!ptaa) return (PTAA *)ERROR_PTR_1("ptaa not read", filename, __func__, NULL); return ptaa; } /*! * \brief ptaaReadStream() * * \param[in] fp file stream * \return ptaa, or NULL on error * *
 * Notes:
 *      (1) It is OK for the ptaa to be empty (n == 0).
 * 
*/ PTAA * ptaaReadStream(FILE *fp) { l_int32 i, n, version; PTA *pta; PTAA *ptaa; if (!fp) return (PTAA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nPtaa Version %d\n", &version) != 1) return (PTAA *)ERROR_PTR("not a ptaa file", __func__, NULL); if (version != PTA_VERSION_NUMBER) return (PTAA *)ERROR_PTR("invalid ptaa version", __func__, NULL); if (fscanf(fp, "Number of Pta = %d\n", &n) != 1) return (PTAA *)ERROR_PTR("not a ptaa file", __func__, NULL); if (n < 0) return (PTAA *)ERROR_PTR("num pta ptrs <= 0", __func__, NULL); if (n > (l_int32)MaxPtrArraySize) return (PTAA *)ERROR_PTR("too many pta ptrs", __func__, NULL); if (n == 0) L_INFO("the ptaa is empty\n", __func__); if ((ptaa = ptaaCreate(n)) == NULL) return (PTAA *)ERROR_PTR("ptaa not made", __func__, NULL); for (i = 0; i < n; i++) { if ((pta = ptaReadStream(fp)) == NULL) { ptaaDestroy(&ptaa); return (PTAA *)ERROR_PTR("error reading pta", __func__, NULL); } ptaaAddPta(ptaa, pta, L_INSERT); } return ptaa; } /*! * \brief ptaaReadMem() * * \param[in] data serialization in ascii * \param[in] size of data in bytes; can use strlen to get it * \return ptaa, or NULL on error */ PTAA * ptaaReadMem(const l_uint8 *data, size_t size) { FILE *fp; PTAA *ptaa; if (!data) return (PTAA *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (PTAA *)ERROR_PTR("stream not opened", __func__, NULL); ptaa = ptaaReadStream(fp); fclose(fp); if (!ptaa) L_ERROR("ptaa not read\n", __func__); return ptaa; } /*! * \brief ptaaWriteDebug() * * \param[in] filename * \param[in] ptaa * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of ptaaWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok ptaaWriteDebug(const char *filename, PTAA *ptaa, l_int32 type) { if (LeptDebugOK) { return ptaaWrite(filename, ptaa, type); } else { L_INFO("write to named temp file %s is disabled\n", __func__, filename); return 0; } } /*! * \brief ptaaWrite() * * \param[in] filename * \param[in] ptaa * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error */ l_ok ptaaWrite(const char *filename, PTAA *ptaa, l_int32 type) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = ptaaWriteStream(fp, ptaa, type); fclose(fp); if (ret) return ERROR_INT_1("ptaa not written to stream", filename, __func__, 1); return 0; } /*! * \brief ptaaWriteStream() * * \param[in] fp file stream * \param[in] ptaa * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK; 1 on error */ l_ok ptaaWriteStream(FILE *fp, PTAA *ptaa, l_int32 type) { l_int32 i, n; PTA *pta; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); n = ptaaGetCount(ptaa); fprintf(fp, "\nPtaa Version %d\n", PTA_VERSION_NUMBER); fprintf(fp, "Number of Pta = %d\n", n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaWriteStream(fp, pta, type); ptaDestroy(&pta); } return 0; } /*! * \brief ptaaWriteMem() * * \param[out] pdata data of serialized ptaa; ascii * \param[out] psize size of returned data * \param[in] ptaa * \param[in] type 0 for float values; 1 for integer values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes %ptaa in memory and puts the result in a buffer.
 * 
*/ l_ok ptaaWriteMem(l_uint8 **pdata, size_t *psize, PTAA *ptaa, l_int32 type) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!ptaa) return ERROR_INT("ptaa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = ptaaWriteStream(fp, ptaa, type); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = ptaaWriteStream(fp, ptaa, type); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } leptonica-1.86.0/src/ptafunc1.c000066400000000000000000002270131506303110300162350ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ptafunc1.c *
 *
 *      --------------------------------------
 *      This file has these Pta utilities:
 *         - simple rearrangements
 *         - geometric analysis
 *         - min/max and filtering
 *         - least squares fitting
 *         - interconversions with Pix and Numa
 *         - display into a pix
 *      --------------------------------------
 *
 *      Simple rearrangements
 *           PTA      *ptaSubsample()
 *           l_int32   ptaJoin()
 *           l_int32   ptaaJoin()
 *           PTA      *ptaReverse()
 *           PTA      *ptaTranspose()
 *           PTA      *ptaCyclicPerm()
 *           PTA      *ptaSelectRange()
 *
 *      Geometric
 *           BOX      *ptaGetBoundingRegion()
 *           l_int32  *ptaGetRange()
 *           PTA      *ptaGetInsideBox()
 *           PTA      *pixFindCornerPixels()
 *           l_int32   ptaContainsPt()
 *           l_int32   ptaTestIntersection()
 *           PTA      *ptaTransform()
 *           l_int32   ptaPtInsidePolygon()
 *           l_float32 l_angleBetweenVectors()
 *           l_int32   ptaPolygonIsConvex()
 *
 *      Min/max and filtering
 *           l_int32   ptaGetMinMax()
 *           PTA      *ptaSelectByValue()
 *           PTA      *ptaCropToMask()
 *
 *      Least Squares Fit
 *           l_int32   ptaGetLinearLSF()
 *           l_int32   ptaGetQuadraticLSF()
 *           l_int32   ptaGetCubicLSF()
 *           l_int32   ptaGetQuarticLSF()
 *           l_int32   ptaNoisyLinearLSF()
 *           l_int32   ptaNoisyQuadraticLSF()
 *           l_int32   applyLinearFit()
 *           l_int32   applyQuadraticFit()
 *           l_int32   applyCubicFit()
 *           l_int32   applyQuarticFit()
 *
 *      Interconversions with Pix
 *           l_int32   pixPlotAlongPta()
 *           PTA      *ptaGetPixelsFromPix()
 *           PIX      *pixGenerateFromPta()
 *           PTA      *ptaGetBoundaryPixels()
 *           PTAA     *ptaaGetBoundaryPixels()
 *           PTAA     *ptaaIndexLabeledPixels()
 *           PTA      *ptaGetNeighborPixLocs()
 *
 *      Interconversion with Numa
 *           PTA      *numaConvertToPta1()
 *           PTA      *numaConvertToPta2()
 *           l_int32   ptaConvertToNuma()
 *
 *      Display Pta and Ptaa
 *           PIX      *pixDisplayPta()
 *           PIX      *pixDisplayPtaaPattern()
 *           PIX      *pixDisplayPtaPattern()
 *           PTA      *ptaReplicatePattern()
 *           PIX      *pixDisplayPtaa()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* M_PI */ /*---------------------------------------------------------------------* * Simple rearrangements * *---------------------------------------------------------------------*/ /*! * \brief ptaSubsample() * * \param[in] ptas * \param[in] subfactor subsample factor, >= 1 * \return ptad evenly sampled pt values from ptas, or NULL on error */ PTA * ptaSubsample(PTA *ptas, l_int32 subfactor) { l_int32 n, i; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (subfactor < 1) return (PTA *)ERROR_PTR("subfactor < 1", __func__, NULL); ptad = ptaCreate(0); n = ptaGetCount(ptas); for (i = 0; i < n; i++) { if (i % subfactor != 0) continue; ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * \brief ptaJoin() * * \param[in] ptad dest pta; add to this one * \param[in] ptas source pta; add from this one * \param[in] istart starting index in ptas * \param[in] iend ending index in ptas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (2) iend < 0 means 'read to the end'
 *      (3) if ptas == NULL, this is a no-op
 * 
*/ l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend) { l_int32 n, i, x, y; if (!ptad) return ERROR_INT("ptad not defined", __func__, 1); if (!ptas) return 0; if (istart < 0) istart = 0; n = ptaGetCount(ptas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; no pts", __func__, 1); for (i = istart; i <= iend; i++) { ptaGetIPt(ptas, i, &x, &y); if (ptaAddPt(ptad, x, y) == 1) { L_ERROR("failed to add pt at i = %d\n", __func__, i); return 1; } } return 0; } /*! * \brief ptaaJoin() * * \param[in] ptaad dest ptaa; add to this one * \param[in] ptaas source ptaa; add from this one * \param[in] istart starting index in ptaas * \param[in] iend ending index in ptaas; use -1 to cat all * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
 *      (2) iend < 0 means 'read to the end'
 *      (3) if ptas == NULL, this is a no-op
 * 
*/ l_ok ptaaJoin(PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend) { l_int32 n, i; PTA *pta; if (!ptaad) return ERROR_INT("ptaad not defined", __func__, 1); if (!ptaas) return 0; if (istart < 0) istart = 0; n = ptaaGetCount(ptaas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; no pts", __func__, 1); for (i = istart; i <= iend; i++) { pta = ptaaGetPta(ptaas, i, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); } return 0; } /*! * \brief ptaReverse() * * \param[in] ptas * \param[in] type 0 for float values; 1 for integer values * \return ptad reversed pta, or NULL on error */ PTA * ptaReverse(PTA *ptas, l_int32 type) { l_int32 n, i, ix, iy; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = n - 1; i >= 0; i--) { if (type == 0) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } else { /* type == 1 */ ptaGetIPt(ptas, i, &ix, &iy); ptaAddPt(ptad, ix, iy); } } return ptad; } /*! * \brief ptaTranspose() * * \param[in] ptas * \return ptad with x and y values swapped, or NULL on error */ PTA * ptaTranspose(PTA *ptas) { l_int32 n, i; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, y, x); } return ptad; } /*! * \brief ptaCyclicPerm() * * \param[in] ptas * \param[in] xs, ys start point; must be in ptas * \return ptad cyclic permutation, starting and ending at (xs, ys, * or NULL on error * *
 * Notes:
 *      (1) Check to insure that (a) ptas is a closed path where
 *          the first and last points are identical, and (b) the
 *          resulting pta also starts and ends on the same point
 *          (which in this case is (xs, ys).
 * 
*/ PTA * ptaCyclicPerm(PTA *ptas, l_int32 xs, l_int32 ys) { l_int32 n, i, x, y, j, index, state; l_int32 x1, y1, x2, y2; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); /* Verify input data */ ptaGetIPt(ptas, 0, &x1, &y1); ptaGetIPt(ptas, n - 1, &x2, &y2); if (x1 != x2 || y1 != y2) return (PTA *)ERROR_PTR("start and end pts not same", __func__, NULL); state = L_NOT_FOUND; for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); if (x == xs && y == ys) { state = L_FOUND; break; } } if (state == L_NOT_FOUND) return (PTA *)ERROR_PTR("start pt not in ptas", __func__, NULL); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (j = 0; j < n - 1; j++) { if (i + j < n - 1) index = i + j; else index = (i + j + 1) % n; ptaGetIPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); } ptaAddPt(ptad, xs, ys); return ptad; } /*! * \brief ptaSelectRange() * * \param[in] ptas * \param[in] first use 0 to select from the beginning * \param[in] last use -1 to select to the end * \return ptad, or NULL on error */ PTA * ptaSelectRange(PTA *ptas, l_int32 first, l_int32 last) { l_int32 n, npt, i; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if ((n = ptaGetCount(ptas)) == 0) { L_WARNING("ptas is empty\n", __func__); return ptaCopy(ptas); } first = L_MAX(0, first); if (last < 0) last = n - 1; if (first >= n) return (PTA *)ERROR_PTR("invalid first", __func__, NULL); if (last >= n) { L_WARNING("last = %d is beyond max index = %d; adjusting\n", __func__, last, n - 1); last = n - 1; } if (first > last) return (PTA *)ERROR_PTR("first > last", __func__, NULL); npt = last - first + 1; ptad = ptaCreate(npt); for (i = first; i <= last; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*---------------------------------------------------------------------* * Geometric * *---------------------------------------------------------------------*/ /*! * \brief ptaGetBoundingRegion() * * \param[in] pta * \return box, or NULL on error * *
 * Notes:
 *      (1) This is used when the pta represents a set of points in
 *          a two-dimensional image.  It returns the box of minimum
 *          size containing the pts in the pta.
 * 
*/ BOX * ptaGetBoundingRegion(PTA *pta) { l_int32 n, i, x, y, minx, maxx, miny, maxy; if (!pta) return (BOX *)ERROR_PTR("pta not defined", __func__, NULL); minx = 10000000; miny = 10000000; maxx = -10000000; maxy = -10000000; n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < minx) minx = x; if (x > maxx) maxx = x; if (y < miny) miny = y; if (y > maxy) maxy = y; } return boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); } /*! * \brief ptaGetRange() * * \param[in] pta * \param[out] pminx [optional] min value of x * \param[out] pmaxx [optional] max value of x * \param[out] pminy [optional] min value of y * \param[out] pmaxy [optional] max value of y * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) We can use pts to represent pairs of floating values, that
 *          are not necessarily tied to a two-dimension region.  For
 *          example, the pts can represent a general function y(x).
 * 
*/ l_ok ptaGetRange(PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy) { l_int32 n, i; l_float32 x, y, minx, maxx, miny, maxy; if (!pminx && !pmaxx && !pminy && !pmaxy) return ERROR_INT("no output requested", __func__, 1); if (pminx) *pminx = 0; if (pmaxx) *pmaxx = 0; if (pminy) *pminy = 0; if (pmaxy) *pmaxy = 0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) == 0) return ERROR_INT("no points in pta", __func__, 1); ptaGetPt(pta, 0, &x, &y); minx = x; maxx = x; miny = y; maxy = y; for (i = 1; i < n; i++) { ptaGetPt(pta, i, &x, &y); if (x < minx) minx = x; if (x > maxx) maxx = x; if (y < miny) miny = y; if (y > maxy) maxy = y; } if (pminx) *pminx = minx; if (pmaxx) *pmaxx = maxx; if (pminy) *pminy = miny; if (pmaxy) *pmaxy = maxy; return 0; } /*! * \brief ptaGetInsideBox() * * \param[in] ptas input pts * \param[in] box * \return ptad of pts in ptas that are inside the box, or NULL on error */ PTA * ptaGetInsideBox(PTA *ptas, BOX *box) { PTA *ptad; l_int32 n, i, contains; l_float32 x, y; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (!box) return (PTA *)ERROR_PTR("box not defined", __func__, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(0); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); boxContainsPt(box, x, y, &contains); if (contains) ptaAddPt(ptad, x, y); } return ptad; } /*! * \brief pixFindCornerPixels() * * \param[in] pixs 1 bpp * \return pta, or NULL on error * *
 * Notes:
 *      (1) Finds the 4 corner-most pixels, as defined by a search
 *          inward from each corner, using a 45 degree line.
 * 
*/ PTA * pixFindCornerPixels(PIX *pixs) { l_int32 i, j, x, y, w, h, wpl, mindim, found; l_uint32 *data, *line; PTA *pta; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); mindim = L_MIN(w, h); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if ((pta = ptaCreate(4)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = i - j; line = data + y * wpl; if (GET_DATA_BIT(line, j)) { ptaAddPt(pta, j, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = i - j; line = data + y * wpl; x = w - 1 - j; if (GET_DATA_BIT(line, x)) { ptaAddPt(pta, x, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = h - 1 - i + j; line = data + y * wpl; if (GET_DATA_BIT(line, j)) { ptaAddPt(pta, j, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = h - 1 - i + j; line = data + y * wpl; x = w - 1 - j; if (GET_DATA_BIT(line, x)) { ptaAddPt(pta, x, y); found = TRUE; break; } } if (found == TRUE) break; } return pta; } /*! * \brief ptaContainsPt() * * \param[in] pta * \param[in] x, y point * \return 1 if contained, 0 otherwise or on error */ l_int32 ptaContainsPt(PTA *pta, l_int32 x, l_int32 y) { l_int32 i, n, ix, iy; if (!pta) return ERROR_INT("pta not defined", __func__, 0); n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &ix, &iy); if (x == ix && y == iy) return 1; } return 0; } /*! * \brief ptaTestIntersection() * * \param[in] pta1, pta2 * \return bval which is 1 if they have any elements in common; * 0 otherwise or on error. */ l_int32 ptaTestIntersection(PTA *pta1, PTA *pta2) { l_int32 i, j, n1, n2, x1, y1, x2, y2; if (!pta1) return ERROR_INT("pta1 not defined", __func__, 0); if (!pta2) return ERROR_INT("pta2 not defined", __func__, 0); n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); for (i = 0; i < n1; i++) { ptaGetIPt(pta1, i, &x1, &y1); for (j = 0; j < n2; j++) { ptaGetIPt(pta2, i, &x2, &y2); if (x1 == x2 && y1 == y2) return 1; } } return 0; } /*! * \brief ptaTransform() * * \param[in] ptas * \param[in] shiftx, shifty * \param[in] scalex, scaley * \return pta, or NULL on error * *
 * Notes:
 *      (1) Shift first, then scale.
 * 
*/ PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { l_int32 n, i, x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); x = (l_int32)(scalex * (x + shiftx) + 0.5); y = (l_int32)(scaley * (y + shifty) + 0.5); ptaAddPt(ptad, x, y); } return ptad; } /*! * \brief ptaPtInsidePolygon() * * \param[in] pta vertices of a polygon * \param[in] x, y point to be tested * \param[out] pinside 1 if inside; 0 if outside or on boundary * \return 1 if OK, 0 on error * * The abs value of the sum of the angles subtended from a point by * the sides of a polygon, when taken in order traversing the polygon, * is 0 if the point is outside the polygon and 2*pi if inside. * The sign will be positive if traversed cw and negative if ccw. */ l_int32 ptaPtInsidePolygon(PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside) { l_int32 i, n; l_float32 sum, x1, y1, x2, y2, xp1, yp1, xp2, yp2; if (!pinside) return ERROR_INT("&inside not defined", __func__, 1); *pinside = 0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); /* Think of (x1,y1) as the end point of a vector that starts * from the origin (0,0), and ditto for (x2,y2). */ n = ptaGetCount(pta); sum = 0.0; for (i = 0; i < n; i++) { ptaGetPt(pta, i, &xp1, &yp1); ptaGetPt(pta, (i + 1) % n, &xp2, &yp2); x1 = xp1 - x; y1 = yp1 - y; x2 = xp2 - x; y2 = yp2 - y; sum += l_angleBetweenVectors(x1, y1, x2, y2); } if (L_ABS(sum) > M_PI) *pinside = 1; return 0; } /*! * \brief l_angleBetweenVectors() * * \param[in] x1, y1 end point of first vector * \param[in] x2, y2 end point of second vector * \return angle radians, or 0.0 on error * *
 * Notes:
 *      (1) This gives the angle between two vectors, going between
 *          vector1 (x1,y1) and vector2 (x2,y2).  The angle is swept
 *          out from 1 --> 2.  If this is clockwise, the angle is
 *          positive, but the result is folded into the interval [-pi, pi].
 * 
*/ l_float32 l_angleBetweenVectors(l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2) { l_float64 ang; ang = atan2(y2, x2) - atan2(y1, x1); if (ang > M_PI) ang -= 2.0 * M_PI; if (ang < -M_PI) ang += 2.0 * M_PI; return ang; } /*! * \brief ptaPolygonIsConvex() * * \param[in] pta corners of polygon * \param[out] pisconvex 1 if convex; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) A Pta of size n describes a polygon with n sides, where
 *          the n-th side goes from point[n - 1] to point[0].
 *      (2) The pta must describe a CLOCKWISE traversal of the boundary
 *          of the polygon.
 *      (3) Algorithm: traversing the boundary in a cw direction, the
 *          polygon interior is always on the right.  If the polygon is
 *          convex, for each set of 3 points, the third point is either
 *          on the ray extending from the first point and going through
 *          the second point, or to the right of it.
 * 
*/ l_int32 ptaPolygonIsConvex(PTA *pta, l_int32 *pisconvex) { l_int32 i, n; l_float32 x0, y0, x1, y1, x2, y2; l_float64 cprod; if (!pisconvex) return ERROR_INT("&isconvex not defined", __func__, 1); *pisconvex = 0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("pta has < 3 pts", __func__, 1); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x0, &y0); ptaGetPt(pta, (i + 1) % n, &x1, &y1); ptaGetPt(pta, (i + 2) % n, &x2, &y2); /* The vector v02 from p0 to p2 must be to the right of the vector v01 from p0 to p1. This is true if the cross product v02 x v01 > 0. In coordinates: v02x * v01y - v01x * v02y, where v01x = x1 - x0, v01y = y1 - y0, v02x = x2 - x0, v02y = y2 - y0 */ cprod = (x2 - x0) * (y1 - y0) - (x1 - x0) * (y2 - y0); if (cprod < -0.0001) /* small delta for float accuracy; test fails */ return 0; } *pisconvex = 1; return 0; } /*---------------------------------------------------------------------* * Min/max and filtering * *---------------------------------------------------------------------*/ /*! * \brief ptaGetMinMax() * * \param[in] pta * \param[out] pxmin [optional] min of x * \param[out] pymin [optional] min of y * \param[out] pxmax [optional] max of x * \param[out] pymax [optional] max of y * \return 0 if OK, 1 on error. If pta is empty, requested * values are returned as -1.0. */ l_ok ptaGetMinMax(PTA *pta, l_float32 *pxmin, l_float32 *pymin, l_float32 *pxmax, l_float32 *pymax) { l_int32 i, n; l_float32 x, y, xmin, ymin, xmax, ymax; if (pxmin) *pxmin = -1.0; if (pymin) *pymin = -1.0; if (pxmax) *pxmax = -1.0; if (pymax) *pymax = -1.0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (!pxmin && !pxmax && !pymin && !pymax) return ERROR_INT("no output requested", __func__, 1); if ((n = ptaGetCount(pta)) == 0) { L_WARNING("pta is empty\n", __func__); return 0; } xmin = ymin = 1.0e20f; xmax = ymax = -1.0e20f; for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); if (x < xmin) xmin = x; if (y < ymin) ymin = y; if (x > xmax) xmax = x; if (y > ymax) ymax = y; } if (pxmin) *pxmin = xmin; if (pymin) *pymin = ymin; if (pxmax) *pxmax = xmax; if (pymax) *pymax = ymax; return 0; } /*! * \brief ptaSelectByValue() * * \param[in] ptas * \param[in] xth, yth threshold values * \param[in] type L_SELECT_XVAL, L_SELECT_YVAL, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \return ptad filtered set, or NULL on error */ PTA * ptaSelectByValue(PTA *ptas, l_float32 xth, l_float32 yth, l_int32 type, l_int32 relation) { l_int32 i, n; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (ptaGetCount(ptas) == 0) { L_WARNING("ptas is empty\n", __func__); return ptaCopy(ptas); } if (type != L_SELECT_XVAL && type != L_SELECT_YVAL && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (PTA *)ERROR_PTR("invalid type", __func__, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PTA *)ERROR_PTR("invalid relation", __func__, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); if (type == L_SELECT_XVAL) { if ((relation == L_SELECT_IF_LT && x < xth) || (relation == L_SELECT_IF_GT && x > xth) || (relation == L_SELECT_IF_LTE && x <= xth) || (relation == L_SELECT_IF_GTE && x >= xth)) ptaAddPt(ptad, x, y); } else if (type == L_SELECT_YVAL) { if ((relation == L_SELECT_IF_LT && y < yth) || (relation == L_SELECT_IF_GT && y > yth) || (relation == L_SELECT_IF_LTE && y <= yth) || (relation == L_SELECT_IF_GTE && y >= yth)) ptaAddPt(ptad, x, y); } else if (type == L_SELECT_IF_EITHER) { if (((relation == L_SELECT_IF_LT) && (x < xth || y < yth)) || ((relation == L_SELECT_IF_GT) && (x > xth || y > yth)) || ((relation == L_SELECT_IF_LTE) && (x <= xth || y <= yth)) || ((relation == L_SELECT_IF_GTE) && (x >= xth || y >= yth))) ptaAddPt(ptad, x, y); } else { /* L_SELECT_IF_BOTH */ if (((relation == L_SELECT_IF_LT) && (x < xth && y < yth)) || ((relation == L_SELECT_IF_GT) && (x > xth && y > yth)) || ((relation == L_SELECT_IF_LTE) && (x <= xth && y <= yth)) || ((relation == L_SELECT_IF_GTE) && (x >= xth && y >= yth))) ptaAddPt(ptad, x, y); } } return ptad; } /*! * \brief ptaCropToMask() * * \param[in] ptas input pta * \param[in] pixm 1 bpp mask * \return ptad with only pts under the mask fg, or NULL on error */ PTA * ptaCropToMask(PTA *ptas, PIX *pixm) { l_int32 i, n, x, y; l_uint32 val; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (PTA *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, NULL); if (ptaGetCount(ptas) == 0) { L_INFO("ptas is empty\n", __func__); return ptaCopy(ptas); } n = ptaGetCount(ptas); ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); pixGetPixel(pixm, x, y, &val); if (val == 1) ptaAddPt(ptad, x, y); } return ptad; } /*---------------------------------------------------------------------* * Least Squares Fit * *---------------------------------------------------------------------*/ /*! * \brief ptaGetLinearLSF() * * \param[in] pta * \param[out] pa [optional] slope a of least square fit: y = ax + b * \param[out] pb [optional] intercept b of least square fit * \param[out] pnafit [optional] numa of least square fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Either or both &a and &b must be input.  They determine the
 *          type of line that is fit.
 *      (2) If both &a and &b are defined, this returns a and b that minimize:
 *
 *              sum (yi - axi -b)^2
 *               i
 *
 *          The method is simple: differentiate this expression w/rt a and b,
 *          and solve the resulting two equations for a and b in terms of
 *          various sums over the input data (xi, yi).
 *      (3) We also allow two special cases, where either a = 0 or b = 0:
 *           (a) If &a is given and &b = null, find the linear LSF that
 *               goes through the origin (b = 0).
 *           (b) If &b is given and &a = null, find the linear LSF with
 *               zero slope (a = 0).
 *      (4) If &nafit is defined, this returns an array of fitted values,
 *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
 *          Thus, just as you can plot the data in pta as nay vs. nax,
 *          you can plot the linear least square fit as nafit vs. nax.
 *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
 * 
*/ l_ok ptaGetLinearLSF(PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit) { l_int32 n, i; l_float32 a, b, factor, sx, sy, sxx, sxy, val; l_float32 *xa, *ya; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pnafit) *pnafit = NULL; if (!pa && !pb && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 2) return ERROR_INT("less than 2 pts found", __func__, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sxx = sxy = 0.; if (pa && pb) { /* general line */ for (i = 0; i < n; i++) { sx += xa[i]; sy += ya[i]; sxx += xa[i] * xa[i]; sxy += xa[i] * ya[i]; } factor = n * sxx - sx * sx; if (factor == 0.0) return ERROR_INT("no solution found", __func__, 1); factor = 1.f / factor; a = factor * ((l_float32)n * sxy - sx * sy); b = factor * (sxx * sy - sx * sxy); } else if (pa) { /* b = 0; line through origin */ for (i = 0; i < n; i++) { sxx += xa[i] * xa[i]; sxy += xa[i] * ya[i]; } if (sxx == 0.0) return ERROR_INT("no solution found", __func__, 1); a = sxy / sxx; b = 0.0; } else { /* a = 0; horizontal line */ for (i = 0; i < n; i++) sy += ya[i]; a = 0.0; b = sy / (l_float32)n; } if (pnafit) { *pnafit = numaCreate(n); for (i = 0; i < n; i++) { val = a * xa[i] + b; numaAddNumber(*pnafit, val); } } if (pa) *pa = a; if (pb) *pb = b; return 0; } /*! * \brief ptaGetQuadraticLSF() * * \param[in] pta * \param[out] pa [optional] coeff a of LSF: y = ax^2 + bx + c * \param[out] pb [optional] coeff b of LSF: y = ax^2 + bx + c * \param[out] pc [optional] coeff c of LSF: y = ax^2 + bx + c * \param[out] pnafit [optional] numa of least square fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a quadratic least square fit to the set of points
 *          in %pta.  That is, it finds coefficients a, b and c that minimize:
 *
 *              sum (yi - a*xi*xi -b*xi -c)^2
 *               i
 *
 *          The method is simple: differentiate this expression w/rt
 *          a, b and c, and solve the resulting three equations for these
 *          coefficients in terms of various sums over the input data (xi, yi).
 *          The three equations are in the form:
 *             f[0][0]a + f[0][1]b + f[0][2]c = g[0]
 *             f[1][0]a + f[1][1]b + f[1][2]c = g[1]
 *             f[2][0]a + f[2][1]b + f[2][2]c = g[2]
 *      (2) If &nafit is defined, this returns an array of fitted values,
 *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
 *          Thus, just as you can plot the data in pta as nay vs. nax,
 *          you can plot the linear least square fit as nafit vs. nax.
 *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
 * 
*/ l_ok ptaGetQuadraticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sxy, sx2y; l_float32 *xa, *ya; l_float32 *f[3]; l_float32 g[3]; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pnafit) *pnafit = NULL; if (!pa && !pb && !pc && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 3 pts found", __func__, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sxy = sx2y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sxy += x * y; sx2y += x * x * y; } for (i = 0; i < 3; i++) f[i] = (l_float32 *)LEPT_CALLOC(3, sizeof(l_float32)); f[0][0] = sx4; f[0][1] = sx3; f[0][2] = sx2; f[1][0] = sx3; f[1][1] = sx2; f[1][2] = sx; f[2][0] = sx2; f[2][1] = sx; f[2][2] = n; g[0] = sx2y; g[1] = sxy; g[2] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 3); for (i = 0; i < 3; i++) LEPT_FREE(f[i]); if (ret) return ERROR_INT("quadratic solution failed", __func__, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pnafit) { *pnafit = numaCreate(n); for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x + g[1] * x + g[2]; numaAddNumber(*pnafit, y); } } return 0; } /*! * \brief ptaGetCubicLSF() * * \param[in] pta * \param[out] pa [optional] coeff a of LSF: y = ax^3 + bx^2 + cx + d * \param[out] pb [optional] coeff b of LSF * \param[out] pc [optional] coeff c of LSF * \param[out] pd [optional] coeff d of LSF * \param[out] pnafit [optional] numa of least square fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a cubic least square fit to the set of points
 *          in %pta.  That is, it finds coefficients a, b, c and d
 *          that minimize:
 *
 *              sum (yi - a*xi*xi*xi -b*xi*xi -c*xi - d)^2
 *               i
 *
 *          Differentiate this expression w/rt a, b, c and d, and solve
 *          the resulting four equations for these coefficients in
 *          terms of various sums over the input data (xi, yi).
 *          The four equations are in the form:
 *             f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] = g[0]
 *             f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] = g[1]
 *             f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] = g[2]
 *             f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] = g[3]
 *      (2) If &nafit is defined, this returns an array of fitted values,
 *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
 *          Thus, just as you can plot the data in pta as nay vs. nax,
 *          you can plot the linear least square fit as nafit vs. nax.
 *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
 * 
*/ l_ok ptaGetCubicLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sxy, sx2y, sx3y; l_float32 *xa, *ya; l_float32 *f[4]; l_float32 g[4]; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pd) *pd = 0.0; if (pnafit) *pnafit = NULL; if (!pa && !pb && !pc && !pd && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 4) return ERROR_INT("less than 4 pts found", __func__, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sxy = sx2y = sx3y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sx5 += x * x * x * x * x; sx6 += x * x * x * x * x * x; sxy += x * y; sx2y += x * x * y; sx3y += x * x * x * y; } for (i = 0; i < 4; i++) f[i] = (l_float32 *)LEPT_CALLOC(4, sizeof(l_float32)); f[0][0] = sx6; f[0][1] = sx5; f[0][2] = sx4; f[0][3] = sx3; f[1][0] = sx5; f[1][1] = sx4; f[1][2] = sx3; f[1][3] = sx2; f[2][0] = sx4; f[2][1] = sx3; f[2][2] = sx2; f[2][3] = sx; f[3][0] = sx3; f[3][1] = sx2; f[3][2] = sx; f[3][3] = n; g[0] = sx3y; g[1] = sx2y; g[2] = sxy; g[3] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 4); for (i = 0; i < 4; i++) LEPT_FREE(f[i]); if (ret) return ERROR_INT("cubic solution failed", __func__, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pd) *pd = g[3]; if (pnafit) { *pnafit = numaCreate(n); for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x * x + g[1] * x * x + g[2] * x + g[3]; numaAddNumber(*pnafit, y); } } return 0; } /*! * \brief ptaGetQuarticLSF() * * \param[in] pta * \param[out] pa [optional] coeff a of LSF: * y = ax^4 + bx^3 + cx^2 + dx + e * \param[out] pb [optional] coeff b of LSF * \param[out] pc [optional] coeff c of LSF * \param[out] pd [optional] coeff d of LSF * \param[out] pe [optional] coeff e of LSF * \param[out] pnafit [optional] numa of least square fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a quartic least square fit to the set of points
 *          in %pta.  That is, it finds coefficients a, b, c, d and 3
 *          that minimize:
 *
 *              sum (yi - a*xi*xi*xi*xi -b*xi*xi*xi -c*xi*xi - d*xi - e)^2
 *               i
 *
 *          Differentiate this expression w/rt a, b, c, d and e, and solve
 *          the resulting five equations for these coefficients in
 *          terms of various sums over the input data (xi, yi).
 *          The five equations are in the form:
 *             f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] + f[0][4] = g[0]
 *             f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] + f[1][4] = g[1]
 *             f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] + f[2][4] = g[2]
 *             f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] + f[3][4] = g[3]
 *             f[4][0]a + f[4][1]b + f[4][2]c + f[4][3] + f[4][4] = g[4]
 *      (2) If &nafit is defined, this returns an array of fitted values,
 *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
 *          Thus, just as you can plot the data in pta as nay vs. nax,
 *          you can plot the linear least square fit as nafit vs. nax.
 *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
 * 
*/ l_ok ptaGetQuarticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sx7, sx8; l_float32 sxy, sx2y, sx3y, sx4y; l_float32 *xa, *ya; l_float32 *f[5]; l_float32 g[5]; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pd) *pd = 0.0; if (pe) *pe = 0.0; if (pnafit) *pnafit = NULL; if (!pa && !pb && !pc && !pd && !pe && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 5) return ERROR_INT("less than 5 pts found", __func__, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sx7 = sx8 = 0; sxy = sx2y = sx3y = sx4y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sx5 += x * x * x * x * x; sx6 += x * x * x * x * x * x; sx7 += x * x * x * x * x * x * x; sx8 += x * x * x * x * x * x * x * x; sxy += x * y; sx2y += x * x * y; sx3y += x * x * x * y; sx4y += x * x * x * x * y; } for (i = 0; i < 5; i++) f[i] = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); f[0][0] = sx8; f[0][1] = sx7; f[0][2] = sx6; f[0][3] = sx5; f[0][4] = sx4; f[1][0] = sx7; f[1][1] = sx6; f[1][2] = sx5; f[1][3] = sx4; f[1][4] = sx3; f[2][0] = sx6; f[2][1] = sx5; f[2][2] = sx4; f[2][3] = sx3; f[2][4] = sx2; f[3][0] = sx5; f[3][1] = sx4; f[3][2] = sx3; f[3][3] = sx2; f[3][4] = sx; f[4][0] = sx4; f[4][1] = sx3; f[4][2] = sx2; f[4][3] = sx; f[4][4] = n; g[0] = sx4y; g[1] = sx3y; g[2] = sx2y; g[3] = sxy; g[4] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 5); for (i = 0; i < 5; i++) LEPT_FREE(f[i]); if (ret) return ERROR_INT("quartic solution failed", __func__, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pd) *pd = g[3]; if (pe) *pe = g[4]; if (pnafit) { *pnafit = numaCreate(n); for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x * x * x + g[1] * x * x * x + g[2] * x * x + g[3] * x + g[4]; numaAddNumber(*pnafit, y); } } return 0; } /*! * \brief ptaNoisyLinearLSF() * * \param[in] pta * \param[in] factor reject outliers with error greater than this * number of medians; typically ~ 3 * \param[out] pptad [optional] with outliers removed * \param[out] pa [optional] slope a of least square fit: y = ax + b * \param[out] pb [optional] intercept b of least square fit * \param[out] pmederr [optional] median error * \param[out] pnafit [optional] numa of least square fit to ptad * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a linear least square fit to the set of points
 *          in %pta.  It then evaluates the errors and removes points
 *          whose error is >= factor * median_error.  It then re-runs
 *          the linear LSF on the resulting points.
 *      (2) Either or both &a and &b must be input.  They determine the
 *          type of line that is fit.
 *      (3) The median error can give an indication of how good the fit
 *          is likely to be.
 * 
*/ l_ok ptaNoisyLinearLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, yf, val, mederr; NUMA *nafit, *naerror; PTA *ptad; if (pptad) *pptad = NULL; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pmederr) *pmederr = 0.0; if (pnafit) *pnafit = NULL; if (!pptad && !pa && !pb && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (factor <= 0.0) return ERROR_INT("factor must be > 0.0", __func__, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 2 pts found", __func__, 1); if (ptaGetLinearLSF(pta, pa, pb, &nafit) != 0) return ERROR_INT("error in linear LSF", __func__, 1); /* Get the median error */ naerror = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(nafit, i, &yf); numaAddNumber(naerror, L_ABS(y - yf)); } numaGetMedian(naerror, &mederr); if (pmederr) *pmederr = mederr; numaDestroy(&nafit); /* Remove outliers */ ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(naerror, i, &val); if (val <= factor * mederr) /* <= in case mederr = 0 */ ptaAddPt(ptad, x, y); } numaDestroy(&naerror); /* Do LSF again */ ret = ptaGetLinearLSF(ptad, pa, pb, pnafit); if (pptad) *pptad = ptad; else ptaDestroy(&ptad); return ret; } /*! * \brief ptaNoisyQuadraticLSF() * * \param[in] pta * \param[in] factor reject outliers with error greater than this * number of medians; typically ~ 3 * \param[out] pptad [optional] with outliers removed * \param[out] pa [optional] coeff a of LSF: y = ax^2 + bx + c * \param[out] pb [optional] coeff b of LSF: y = ax^2 + bx + c * \param[out] pc [optional] coeff c of LSF: y = ax^2 + bx + c * \param[out] pmederr [optional] median error * \param[out] pnafit [optional] numa of least square fit to ptad * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a quadratic least square fit to the set of points
 *          in %pta.  It then evaluates the errors and removes points
 *          whose error is >= factor * median_error.  It then re-runs
 *          a quadratic LSF on the resulting points.
 * 
*/ l_ok ptaNoisyQuadraticLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, yf, val, mederr; NUMA *nafit, *naerror; PTA *ptad; if (pptad) *pptad = NULL; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pmederr) *pmederr = 0.0; if (pnafit) *pnafit = NULL; if (!pptad && !pa && !pb && !pc && !pnafit) return ERROR_INT("no output requested", __func__, 1); if (factor <= 0.0) return ERROR_INT("factor must be > 0.0", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 3 pts found", __func__, 1); if (ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit) != 0) return ERROR_INT("error in quadratic LSF", __func__, 1); /* Get the median error */ naerror = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(nafit, i, &yf); numaAddNumber(naerror, L_ABS(y - yf)); } numaGetMedian(naerror, &mederr); if (pmederr) *pmederr = mederr; numaDestroy(&nafit); /* Remove outliers */ ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(naerror, i, &val); if (val <= factor * mederr) /* <= in case mederr = 0 */ ptaAddPt(ptad, x, y); } numaDestroy(&naerror); n = ptaGetCount(ptad); if ((n = ptaGetCount(ptad)) < 3) { ptaDestroy(&ptad); return ERROR_INT("less than 3 pts found", __func__, 1); } /* Do LSF again */ ret = ptaGetQuadraticLSF(ptad, pa, pb, pc, pnafit); if (pptad) *pptad = ptad; else ptaDestroy(&ptad); return ret; } /*! * \brief applyLinearFit() * * \param[in] a, b linear fit coefficients * \param[in] x * \param[out] py y = a * x + b * \return 0 if OK, 1 on error */ l_ok applyLinearFit(l_float32 a, l_float32 b, l_float32 x, l_float32 *py) { if (!py) return ERROR_INT("&y not defined", __func__, 1); *py = a * x + b; return 0; } /*! * \brief applyQuadraticFit() * * \param[in] a, b, c quadratic fit coefficients * \param[in] x * \param[out] py y = a * x^2 + b * x + c * \return 0 if OK, 1 on error */ l_ok applyQuadraticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py) { if (!py) return ERROR_INT("&y not defined", __func__, 1); *py = a * x * x + b * x + c; return 0; } /*! * \brief applyCubicFit() * * \param[in] a, b, c, d cubic fit coefficients * \param[in] x * \param[out] py y = a * x^3 + b * x^2 + c * x + d * \return 0 if OK, 1 on error */ l_ok applyCubicFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py) { if (!py) return ERROR_INT("&y not defined", __func__, 1); *py = a * x * x * x + b * x * x + c * x + d; return 0; } /*! * \brief applyQuarticFit() * * \param[in] a, b, c, d, e quartic fit coefficients * \param[in] x * \param[out] py y = a * x^4 + b * x^3 + c * x^2 + d * x + e * \return 0 if OK, 1 on error */ l_ok applyQuarticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py) { l_float32 x2; if (!py) return ERROR_INT("&y not defined", __func__, 1); x2 = x * x; *py = a * x2 * x2 + b * x2 * x + c * x2 + d * x + e; return 0; } /*---------------------------------------------------------------------* * Interconversions with Pix * *---------------------------------------------------------------------*/ /*! * \brief pixPlotAlongPta() * * \param[in] pixs any depth * \param[in] pta set of points on which to plot * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX * \param[in] title [optional] for plot; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a debugging function.
 *      (2) Removes existing colormaps and clips the pta to the input %pixs.
 *      (3) If the image is RGB, three separate plots are generated.
 * 
*/ l_ok pixPlotAlongPta(PIX *pixs, PTA *pta, l_int32 outformat, const char *title) { char buffer[128]; char *rtitle, *gtitle, *btitle; static l_int32 count = 0; /* require separate temp files for each call */ l_int32 i, x, y, d, w, h, npts, rval, gval, bval; l_uint32 val; NUMA *na, *nar, *nag, *nab; PIX *pixt; lept_mkdir("lept/plot"); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_LATEX) { L_WARNING("outformat invalid; using GPLOT_PNG\n", __func__); outformat = GPLOT_PNG; } pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt); w = pixGetWidth(pixt); h = pixGetHeight(pixt); npts = ptaGetCount(pta); if (d == 32) { nar = numaCreate(npts); nag = numaCreate(npts); nab = numaCreate(npts); for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pixt, x, y, &val); rval = GET_DATA_BYTE(&val, COLOR_RED); gval = GET_DATA_BYTE(&val, COLOR_GREEN); bval = GET_DATA_BYTE(&val, COLOR_BLUE); numaAddNumber(nar, rval); numaAddNumber(nag, gval); numaAddNumber(nab, bval); } snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); rtitle = stringJoin("Red: ", title); gplotSimple1(nar, outformat, buffer, rtitle); snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); gtitle = stringJoin("Green: ", title); gplotSimple1(nag, outformat, buffer, gtitle); snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); btitle = stringJoin("Blue: ", title); gplotSimple1(nab, outformat, buffer, btitle); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); LEPT_FREE(rtitle); LEPT_FREE(gtitle); LEPT_FREE(btitle); } else { na = numaCreate(npts); for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pixt, x, y, &val); numaAddNumber(na, (l_float32)val); } snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); gplotSimple1(na, outformat, buffer, title); numaDestroy(&na); } pixDestroy(&pixt); return 0; } /*! * \brief ptaGetPixelsFromPix() * * \param[in] pixs 1 bpp * \param[in] box [optional] can be null * \return pta, or NULL on error * *
 * Notes:
 *      (1) Generates a pta of fg pixels in the pix, within the box.
 *          If box == NULL, it uses the entire pix.
 * 
*/ PTA * ptaGetPixelsFromPix(PIX *pixs, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *data, *line; PTA *pta; if (!pixs || (pixGetDepth(pixs) != 1)) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); xstart = ystart = 0; xend = w - 1; yend = h - 1; if (box) { boxGetGeometry(box, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; } if ((pta = ptaCreate(0)) == NULL) return (PTA *)ERROR_PTR("pta not made", __func__, NULL); for (i = ystart; i <= yend; i++) { line = data + i * wpl; for (j = xstart; j <= xend; j++) { if (GET_DATA_BIT(line, j)) ptaAddPt(pta, j, i); } } return pta; } /*! * \brief pixGenerateFromPta() * * \param[in] pta * \param[in] w, h of pix * \return pix 1 bpp, or NULL on error * *
 * Notes:
 *      (1) Points are rounded to nearest ints.
 *      (2) Any points outside (w,h) are silently discarded.
 *      (3) Output 1 bpp pix has values 1 for each point in the pta.
 * 
*/ PIX * pixGenerateFromPta(PTA *pta, l_int32 w, l_int32 h) { l_int32 n, i, x, y; PIX *pix; if (!pta) return (PIX *)ERROR_PTR("pta not defined", __func__, NULL); if ((pix = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pix, x, y, 1); } return pix; } /*! * \brief ptaGetBoundaryPixels() * * \param[in] pixs 1 bpp * \param[in] type L_BOUNDARY_FG, L_BOUNDARY_BG * \return pta, or NULL on error * *
 * Notes:
 *      (1) This generates a pta of either fg or bg boundary pixels.
 *      (2) See also pixGeneratePtaBoundary() for rendering of
 *          fg boundary pixels.
 * 
*/ PTA * ptaGetBoundaryPixels(PIX *pixs, l_int32 type) { PIX *pixt; PTA *pta; if (!pixs || (pixGetDepth(pixs) != 1)) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) return (PTA *)ERROR_PTR("invalid type", __func__, NULL); if (type == L_BOUNDARY_FG) pixt = pixMorphSequence(pixs, "e3.3", 0); else pixt = pixMorphSequence(pixs, "d3.3", 0); pixXor(pixt, pixt, pixs); pta = ptaGetPixelsFromPix(pixt, NULL); pixDestroy(&pixt); return pta; } /*! * \brief ptaaGetBoundaryPixels() * * \param[in] pixs 1 bpp * \param[in] type L_BOUNDARY_FG, L_BOUNDARY_BG * \param[in] connectivity 4 or 8 * \param[out] pboxa [optional] bounding boxes of the c.c. * \param[out] ppixa [optional] pixa of the c.c. * \return ptaa, or NULL on error * *
 * Notes:
 *      (1) This generates a ptaa of either fg or bg boundary pixels,
 *          where each pta has the boundary pixels for a connected
 *          component.
 *      (2) We can't simply find all the boundary pixels and then select
 *          those within the bounding box of each component, because
 *          bounding boxes can overlap.  It is necessary to extract and
 *          dilate or erode each component separately.  Note also that
 *          special handling is required for bg pixels when the
 *          component touches the pix boundary.
 * 
*/ PTAA * ptaaGetBoundaryPixels(PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa) { l_int32 i, n, w, h, x, y, bw, bh, left, right, top, bot; BOXA *boxa; PIX *pixt1, *pixt2; PIXA *pixa; PTA *pta1, *pta2; PTAA *ptaa; if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (!pixs || (pixGetDepth(pixs) != 1)) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) return (PTAA *)ERROR_PTR("invalid type", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PTAA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); boxa = pixConnComp(pixs, &pixa, connectivity); n = boxaGetCount(boxa); ptaa = ptaaCreate(0); for (i = 0; i < n; i++) { pixt1 = pixaGetPix(pixa, i, L_CLONE); boxaGetBoxGeometry(boxa, i, &x, &y, &bw, &bh); left = right = top = bot = 0; if (type == L_BOUNDARY_BG) { if (x > 0) left = 1; if (y > 0) top = 1; if (x + bw < w) right = 1; if (y + bh < h) bot = 1; pixt2 = pixAddBorderGeneral(pixt1, left, right, top, bot, 0); } else { pixt2 = pixClone(pixt1); } pta1 = ptaGetBoundaryPixels(pixt2, type); pta2 = ptaTransform(pta1, x - left, y - top, 1.0, 1.0); ptaaAddPta(ptaa, pta2, L_INSERT); ptaDestroy(&pta1); pixDestroy(&pixt1); pixDestroy(&pixt2); } if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); if (ppixa) *ppixa = pixa; else pixaDestroy(&pixa); return ptaa; } /*! * \brief ptaaIndexLabeledPixels() * * \param[in] pixs 32 bpp, of indices of c.c. * \param[out] pncc [optional] number of connected components * \return ptaa, or NULL on error * *
 * Notes:
 *      (1) The pixel values in %pixs are the index of the connected component
 *          to which the pixel belongs; %pixs is typically generated from
 *          a 1 bpp pix by pixConnCompTransform().  Background pixels in
 *          the generating 1 bpp pix are represented in %pixs by 0.
 *          We do not check that the pixel values are correctly labelled.
 *      (2) Each pta in the returned ptaa gives the pixel locations
 *          corresponding to a connected component, with the label of each
 *          given by the index of the pta into the ptaa.
 *      (3) Initialize with the first pta in ptaa being empty and
 *          representing the background value (index 0) in the pix.
 * 
*/ PTAA * ptaaIndexLabeledPixels(PIX *pixs, l_int32 *pncc) { l_int32 wpl, index, i, j, w, h; l_uint32 maxval; l_uint32 *data, *line; PTA *pta; PTAA *ptaa; if (pncc) *pncc = 0; if (!pixs || (pixGetDepth(pixs) != 32)) return (PTAA *)ERROR_PTR("pixs undef or not 32 bpp", __func__, NULL); /* The number of c.c. is the maximum pixel value. Use this to * initialize ptaa with sufficient pta arrays */ pixGetMaxValueInRect(pixs, NULL, &maxval, NULL, NULL); if (pncc) *pncc = maxval; pta = ptaCreate(1); ptaa = ptaaCreate(maxval + 1); ptaaInitFull(ptaa, pta); ptaDestroy(&pta); /* Sweep over %pixs, saving the pixel coordinates of each pixel * with nonzero value in the appropriate pta, indexed by that value. */ pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { index = line[j]; if (index > 0) ptaaAddPt(ptaa, index, j, i); } } return ptaa; } /*! * \brief ptaGetNeighborPixLocs() * * \param[in] pixs any depth * \param[in] x, y pixel from which we search for nearest neighbors * \param[in] conn 4 or 8 connectivity * \return pta, or NULL on error * *
 * Notes:
 *      (1) Generates a pta of all valid neighbor pixel locations,
 *          or NULL on error.
 * 
*/ PTA * ptaGetNeighborPixLocs(PIX *pixs, l_int32 x, l_int32 y, l_int32 conn) { l_int32 w, h; PTA *pta; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (x < 0 || x >= w || y < 0 || y >= h) return (PTA *)ERROR_PTR("(x,y) not in pixs", __func__, NULL); if (conn != 4 && conn != 8) return (PTA *)ERROR_PTR("conn not 4 or 8", __func__, NULL); pta = ptaCreate(conn); if (x > 0) ptaAddPt(pta, x - 1, y); if (x < w - 1) ptaAddPt(pta, x + 1, y); if (y > 0) ptaAddPt(pta, x, y - 1); if (y < h - 1) ptaAddPt(pta, x, y + 1); if (conn == 8) { if (x > 0) { if (y > 0) ptaAddPt(pta, x - 1, y - 1); if (y < h - 1) ptaAddPt(pta, x - 1, y + 1); } if (x < w - 1) { if (y > 0) ptaAddPt(pta, x + 1, y - 1); if (y < h - 1) ptaAddPt(pta, x + 1, y + 1); } } return pta; } /*---------------------------------------------------------------------* * Interconversion with Numa * *---------------------------------------------------------------------*/ /*! * \brief numaConvertToPta1() * * \param[in] na numa with implicit y(x) * \return pta if OK; null on error */ PTA * numaConvertToPta1(NUMA *na) { l_int32 i, n; l_float32 startx, delx, val; PTA *pta; if (!na) return (PTA *)ERROR_PTR("na not defined", __func__, NULL); n = numaGetCount(na); pta = ptaCreate(n); numaGetParameters(na, &startx, &delx); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); ptaAddPt(pta, startx + i * delx, val); } return pta; } /*! * \brief numaConvertToPta2() * * \param[in] nax * \param[in] nay * \return pta if OK; null on error */ PTA * numaConvertToPta2(NUMA *nax, NUMA *nay) { l_int32 i, n, nx, ny; l_float32 valx, valy; PTA *pta; if (!nax || !nay) return (PTA *)ERROR_PTR("nax and nay not both defined", __func__, NULL); nx = numaGetCount(nax); ny = numaGetCount(nay); n = L_MIN(nx, ny); if (nx != ny) L_WARNING("nx = %d does not equal ny = %d\n", __func__, nx, ny); pta = ptaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(nax, i, &valx); numaGetFValue(nay, i, &valy); ptaAddPt(pta, valx, valy); } return pta; } /*! * \brief ptaConvertToNuma() * * \param[in] pta * \param[out] pnax addr of nax * \param[out] pnay addr of nay * \return 0 if OK, 1 on error */ l_ok ptaConvertToNuma(PTA *pta, NUMA **pnax, NUMA **pnay) { l_int32 i, n; l_float32 valx, valy; if (pnax) *pnax = NULL; if (pnay) *pnay = NULL; if (!pnax || !pnay) return ERROR_INT("&nax and &nay not both defined", __func__, 1); if (!pta) return ERROR_INT("pta not defined", __func__, 1); n = ptaGetCount(pta); *pnax = numaCreate(n); *pnay = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &valx, &valy); numaAddNumber(*pnax, valx); numaAddNumber(*pnay, valy); } return 0; } /*---------------------------------------------------------------------* * Display Pta and Ptaa * *---------------------------------------------------------------------*/ /*! * \brief pixDisplayPta() * * \param[in] pixd can be same as pixs or NULL; 32 bpp if in-place * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] pta of path to be plotted * \return pixd 32 bpp RGB version of pixs, with path in green. * *
 * Notes:
 *      (1) To write on an existing pixs, pixs must be 32 bpp and
 *          call with pixd == pixs:
 *             pixDisplayPta(pixs, pixs, pta);
 *          To write to a new pix, use pixd == NULL and call:
 *             pixd = pixDisplayPta(NULL, pixs, pta);
 *      (2) On error, returns pixd to avoid losing pixs if called as
 *             pixs = pixDisplayPta(pixs, pixs, pta);
 * 
*/ PIX * pixDisplayPta(PIX *pixd, PIX *pixs, PTA *pta) { l_int32 i, n, w, h, x, y; l_uint32 rpixel, gpixel, bpixel; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!pta) return (PIX *)ERROR_PTR("pta not defined", __func__, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", __func__, pixd); if (!pixd) pixd = pixConvertTo32(pixs); pixGetDimensions(pixd, &w, &h, NULL); composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; if (i == 0) pixSetPixel(pixd, x, y, rpixel); else if (i < n - 1) pixSetPixel(pixd, x, y, gpixel); else pixSetPixel(pixd, x, y, bpixel); } return pixd; } /*! * \brief pixDisplayPtaaPattern() * * \param[in] pixd 32 bpp * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp; 32 bpp if in place * \param[in] ptaa giving locations at which the pattern is displayed * \param[in] pixp 1 bpp pattern to be placed such that its reference * point co-locates with each point in pta * \param[in] cx, cy reference point in pattern * \return pixd 32 bpp RGB version of pixs. * *
 * Notes:
 *      (1) To write on an existing pixs, pixs must be 32 bpp and
 *          call with pixd == pixs:
 *             pixDisplayPtaPattern(pixs, pixs, pta, ...);
 *          To write to a new pix, use pixd == NULL and call:
 *             pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...);
 *      (2) Puts a random color on each pattern associated with a pta.
 *      (3) On error, returns pixd to avoid losing pixs if called as
 *             pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...);
 *      (4) A typical pattern to be used is a circle, generated with
 *             generatePtaFilledCircle()
 * 
*/ PIX * pixDisplayPtaaPattern(PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy) { l_int32 i, n; l_uint32 color; PIXCMAP *cmap; PTA *pta; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", __func__, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", __func__, pixd); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", __func__, pixd); if (!pixd) pixd = pixConvertTo32(pixs); /* Use 256 random colors */ cmap = pixcmapCreateRandom(8, 0, 0); n = ptaaGetCount(ptaa); for (i = 0; i < n; i++) { pixcmapGetColor32(cmap, i % 256, &color); pta = ptaaGetPta(ptaa, i, L_CLONE); pixDisplayPtaPattern(pixd, pixd, pta, pixp, cx, cy, color); ptaDestroy(&pta); } pixcmapDestroy(&cmap); return pixd; } /*! * \brief pixDisplayPtaPattern() * * \param[in] pixd can be same as pixs or NULL; 32 bpp if in-place * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] pta giving locations at which the pattern is displayed * \param[in] pixp 1 bpp pattern to be placed such that its reference * point co-locates with each point in pta * \param[in] cx, cy reference point in pattern * \param[in] color in 0xrrggbb00 format * \return pixd 32 bpp RGB version of pixs. * *
 * Notes:
 *      (1) To write on an existing pixs, pixs must be 32 bpp and
 *          call with pixd == pixs:
 *             pixDisplayPtaPattern(pixs, pixs, pta, ...);
 *          To write to a new pix, use pixd == NULL and call:
 *             pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...);
 *      (2) On error, returns pixd to avoid losing pixs if called as
 *             pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...);
 *      (3) A typical pattern to be used is a circle, generated with
 *             generatePtaFilledCircle()
 * 
*/ PIX * pixDisplayPtaPattern(PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color) { l_int32 i, n, w, h, x, y; PTA *ptat; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (!pta) return (PIX *)ERROR_PTR("pta not defined", __func__, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", __func__, pixd); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", __func__, pixd); if (!pixd) pixd = pixConvertTo32(pixs); pixGetDimensions(pixs, &w, &h, NULL); ptat = ptaReplicatePattern(pta, pixp, NULL, cx, cy, w, h); n = ptaGetCount(ptat); for (i = 0; i < n; i++) { ptaGetIPt(ptat, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pixd, x, y, color); } ptaDestroy(&ptat); return pixd; } /*! * \brief ptaReplicatePattern() * * \param[in] ptas "sparse" input pta * \param[in] pixp [optional] 1 bpp pattern, to be replicated * in output pta * \param[in] ptap [optional] set of pts, to be replicated in output pta * \param[in] cx, cy reference point in pattern * \param[in] w, h clipping sizes for output pta * \return ptad with all points of replicated pattern, or NULL on error * *
 * Notes:
 *      (1) You can use either the image %pixp or the set of pts %ptap.
 *      (2) The pattern is placed with its reference point at each point
 *          in ptas, and all the fg pixels are colleced into ptad.
 *          For %pixp, this is equivalent to blitting pixp at each point
 *          in ptas, and then converting the resulting pix to a pta.
 * 
*/ PTA * ptaReplicatePattern(PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h) { l_int32 i, j, n, np, x, y, xp, yp, xf, yf; PTA *ptat, *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (!pixp && !ptap) return (PTA *)ERROR_PTR("no pattern is defined", __func__, NULL); if (pixp && ptap) L_WARNING("pixp and ptap defined; using ptap\n", __func__); n = ptaGetCount(ptas); ptad = ptaCreate(n); if (ptap) ptat = ptaClone(ptap); else ptat = ptaGetPixelsFromPix(pixp, NULL); np = ptaGetCount(ptat); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); for (j = 0; j < np; j++) { ptaGetIPt(ptat, j, &xp, &yp); xf = x - cx + xp; yf = y - cy + yp; if (xf >= 0 && xf < w && yf >= 0 && yf < h) ptaAddPt(ptad, xf, yf); } } ptaDestroy(&ptat); return ptad; } /*! * \brief pixDisplayPtaa() * * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp * \param[in] ptaa array of paths to be plotted * \return pixd 32 bpp RGB version of pixs, with paths plotted * in different colors, or NULL on error */ PIX * pixDisplayPtaa(PIX *pixs, PTAA *ptaa) { l_int32 i, j, w, h, npta, npt, x, y, rv, gv, bv; l_uint32 *pixela; NUMA *na1, *na2, *na3; PIX *pixd; PTA *pta; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", __func__, NULL); npta = ptaaGetCount(ptaa); if (npta == 0) return (PIX *)ERROR_PTR("no pta", __func__, NULL); if ((pixd = pixConvertTo32(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixGetDimensions(pixd, &w, &h, NULL); /* Make a colormap for the paths */ if ((pixela = (l_uint32 *)LEPT_CALLOC(npta, sizeof(l_uint32))) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("calloc fail for pixela", __func__, NULL); } na1 = numaPseudorandomSequence(256, 14657); na2 = numaPseudorandomSequence(256, 34631); na3 = numaPseudorandomSequence(256, 54617); for (i = 0; i < npta; i++) { numaGetIValue(na1, i % 256, &rv); numaGetIValue(na2, i % 256, &gv); numaGetIValue(na3, i % 256, &bv); composeRGBPixel(rv, gv, bv, &pixela[i]); } numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); npt = ptaGetCount(pta); for (j = 0; j < npt; j++) { ptaGetIPt(pta, j, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pixd, x, y, pixela[i]); } ptaDestroy(&pta); } LEPT_FREE(pixela); return pixd; } leptonica-1.86.0/src/ptafunc2.c000066400000000000000000000551261506303110300162420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ptafunc2.c *
 *
 *      --------------------------------------
 *      This file has these Pta utilities:
 *         - sorting
 *         - ordered set operations
 *         - hash map operations
 *      --------------------------------------
 *
 *      Sorting
 *           PTA        *ptaSort()
 *           l_int32     ptaGetSortIndex()
 *           PTA        *ptaSortByIndex()
 *           PTAA       *ptaaSortByIndex()
 *           l_int32     ptaGetRankValue()
 *           PTA        *ptaSort2d()
 *           l_int32     ptaEqual()
 *
 *      Set operations using aset (rbtree)
 *           L_ASET     *l_asetCreateFromPta()
 *           PTA        *ptaRemoveDupsByAset()
 *           PTA        *ptaUnionByAset()
 *           PTA        *ptaIntersectionByAset()
 *
 *      Hashmap operations
 *          L_HASHMAP   *l_hmapCreateFromPta()
 *          l_int32      ptaRemoveDupsByHmap()
 *          l_int32      ptaUnionByHmap()
 *          l_int32      ptaIntersectionByHmap()
 *
 * We have two implementations of set operations on an array of points:
 *
 *   (1) Using an underlying tree (rbtree)
 *       This uses a good 64 bit hashing function for the key,
 *       that is not expected to have hash collisions (and we do
 *       not test for them).  The tree is built up of the keys,
 *       values, and is traversed looking for the key in O(log n).
 *
 *   (2) Building a hashmap from the keys (hashmap)
 *       This uses a fast 64 bit hashing function for the key, which
 *       is then hashed into a hashtable.  Collisions of hashkeys are
 *       very rare, but the hashtable is designed to allow more than one
 *       hashitem in a table entry.  The hashitems are put in a list at
 *       each hashtable entry, which is traversed looking for the key.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*---------------------------------------------------------------------* * Sorting * *---------------------------------------------------------------------*/ /*! * \brief ptaSort() * * \param[in] ptas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex [optional] index of sorted order into * original array * \return ptad sorted version of ptas, or NULL on error */ PTA * ptaSort(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { PTA *ptad; NUMA *naindex; if (pnaindex) *pnaindex = NULL; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) return (PTA *)ERROR_PTR("invalid sort type", __func__, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PTA *)ERROR_PTR("invalid sort order", __func__, NULL); if (ptaGetSortIndex(ptas, sorttype, sortorder, &naindex) != 0) return (PTA *)ERROR_PTR("naindex not made", __func__, NULL); ptad = ptaSortByIndex(ptas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); if (!ptad) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); return ptad; } /*! * \brief ptaGetSortIndex() * * \param[in] ptas * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING * \param[out] pnaindex index of sorted order into original array * \return 0 if OK, 1 on error */ l_ok ptaGetSortIndex(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n; l_float32 x, y; NUMA *na, *nai; if (!pnaindex) return ERROR_INT("&naindex not defined", __func__, 1); *pnaindex = NULL; if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) return ERROR_INT("invalid sort type", __func__, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sort order", __func__, 1); /* Build up numa of specific data */ n = ptaGetCount(ptas); if ((na = numaCreate(n)) == NULL) return ERROR_INT("na not made", __func__, 1); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); if (sorttype == L_SORT_BY_X) numaAddNumber(na, x); else numaAddNumber(na, y); } /* Get the sort index for data array */ nai = numaGetSortIndex(na, sortorder); numaDestroy(&na); if (!nai) return ERROR_INT("naindex not made", __func__, 1); *pnaindex = nai; return 0; } /*! * \brief ptaSortByIndex() * * \param[in] ptas * \param[in] naindex na that maps from the new pta to the input pta * \return ptad sorted, or NULL on error */ PTA * ptaSortByIndex(PTA *ptas, NUMA *naindex) { l_int32 i, index, n; l_float32 x, y; PTA *ptad; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", __func__, NULL); if (!naindex) return (PTA *)ERROR_PTR("naindex not defined", __func__, NULL); /* Build up sorted pta using sort index */ n = numaGetCount(naindex); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", __func__, NULL); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); ptaGetPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * \brief ptaaSortByIndex() * * \param[in] ptaas * \param[in] naindex na that maps from the new ptaa to the input ptaa * \return ptaad sorted, or NULL on error */ PTAA * ptaaSortByIndex(PTAA *ptaas, NUMA *naindex) { l_int32 i, n, index; PTA *pta; PTAA *ptaad; if (!ptaas) return (PTAA *)ERROR_PTR("ptaas not defined", __func__, NULL); if (!naindex) return (PTAA *)ERROR_PTR("naindex not defined", __func__, NULL); n = ptaaGetCount(ptaas); if (numaGetCount(naindex) != n) return (PTAA *)ERROR_PTR("numa and ptaa sizes differ", __func__, NULL); ptaad = ptaaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); pta = ptaaGetPta(ptaas, index, L_COPY); ptaaAddPta(ptaad, pta, L_INSERT); } return ptaad; } /*! * \brief ptaGetRankValue() * * \param[in] pta * \param[in] fract use 0.0 for smallest, 1.0 for largest * \param[in] ptasort [optional] version of %pta sorted by %sorttype * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y * \param[out] pval rankval: the x or y value at %fract * \return 0 if OK, 1 on error */ l_ok ptaGetRankValue(PTA *pta, l_float32 fract, PTA *ptasort, l_int32 sorttype, l_float32 *pval) { l_int32 index, n; PTA *ptas; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!pta) return ERROR_INT("pta not defined", __func__, 1); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) return ERROR_INT("invalid sort type", __func__, 1); if (fract < 0.0 || fract > 1.0) return ERROR_INT("fract not in [0.0 ... 1.0]", __func__, 1); if ((n = ptaGetCount(pta)) == 0) return ERROR_INT("pta empty", __func__, 1); if (ptasort) ptas = ptasort; else ptas = ptaSort(pta, sorttype, L_SORT_INCREASING, NULL); index = (l_int32)(fract * (l_float32)(n - 1) + 0.5); if (sorttype == L_SORT_BY_X) ptaGetPt(ptas, index, pval, NULL); else /* sort by y */ ptaGetPt(ptas, index, NULL, pval); if (!ptasort) ptaDestroy(&ptas); return 0; } /*! * \brief ptaSort2d() * * \param[in] ptas * \return ptad, or NULL on error * *
 * Notes:
 *      (1) Sort increasing by row-major, scanning down from the UL corner,
 *          where for each value of y, order the pts from left to right.
 * 
*/ PTA * ptaSort2d(PTA *pta) { l_int32 index, i, j, n, nx, ny, start, end; l_float32 x, y, yp, val; NUMA *na1, *na2, *nas, *nax; PTA *pta1, *ptad; if (!pta) return (PTA *)ERROR_PTR("pta not defined", __func__, NULL); /* Sort by row-major (y first, then x). After sort by y, * the x values at the same y are not sorted. */ pta1 = ptaSort(pta, L_SORT_BY_Y, L_SORT_INCREASING, NULL); /* Find start and ending indices with the same y value */ n = ptaGetCount(pta1); na1 = numaCreate(0); /* holds start index of sequence with same y */ na2 = numaCreate(0); /* holds end index of sequence with same y */ numaAddNumber(na1, 0); ptaGetPt(pta1, 0, &x, &yp); for (i = 1; i < n; i++) { ptaGetPt(pta1, i, &x, &y); if (y != yp) { numaAddNumber(na1, i); numaAddNumber(na2, i - 1); } yp = y; } numaAddNumber(na2, n - 1); /* Sort by increasing x each set with the same y value */ ptad = ptaCreate(n); ny = numaGetCount(na1); /* number of distinct y values */ for (i = 0, index = 0; i < ny; i++) { numaGetIValue(na1, i, &start); numaGetIValue(na2, i, &end); nx = end - start + 1; /* number of points with current y value */ if (nx == 1) { ptaGetPt(pta1, index++, &x, &y); ptaAddPt(ptad, x, y); } else { /* More than 1 point; extract and sort the x values */ nax = numaCreate(nx); for (j = 0; j < nx; j++) { ptaGetPt(pta1, index + j, &x, &y); numaAddNumber(nax, x); } nas = numaSort(NULL, nax, L_SORT_INCREASING); /* Add the points with x sorted */ for (j = 0; j < nx; j++) { numaGetFValue(nas, j, &val); ptaAddPt(ptad, val, y); } index += nx; numaDestroy(&nax); numaDestroy(&nas); } } numaDestroy(&na1); numaDestroy(&na2); ptaDestroy(&pta1); return ptad; } /*! * \brief ptaEqual() * * \param[in] pta1 * \param[in] pta2 * \param[out] psame 1 if same; 0 if different * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Equality is defined as having the same set of points,
 *          independent of the order in which they are presented.
 * 
*/ l_ok ptaEqual(PTA *pta1, PTA *pta2, l_int32 *psame) { l_int32 i, n1, n2; l_float32 x1, y1, x2, y2; PTA *ptas1, *ptas2; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0.0f; if (!pta1 || !pta2) return ERROR_INT("pta1 and pta2 not both defined", __func__, 1); n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); if (n1 != n2) return 0; /* 2d sort each and compare */ ptas1 = ptaSort2d(pta1); ptas2 = ptaSort2d(pta2); for (i = 0; i < n1; i++) { ptaGetPt(ptas1, i, &x1, &y1); ptaGetPt(ptas2, i, &x2, &y2); if (x1 != x2 || y1 != y2) { ptaDestroy(&ptas1); ptaDestroy(&ptas2); return 0; } } *psame = 1; ptaDestroy(&ptas1); ptaDestroy(&ptas2); return 0; } /*---------------------------------------------------------------------* * Set operations using aset (rbtree) * *---------------------------------------------------------------------*/ /*! * \brief l_asetCreateFromPta() * * \param[in] pta * \return set using a 64-bit hash of (x,y) as the key */ L_ASET * l_asetCreateFromPta(PTA *pta) { l_int32 i, n, x, y; l_uint64 hash; L_ASET *set; RB_TYPE key; if (!pta) return (L_ASET *)ERROR_PTR("pta not defined", __func__, NULL); set = l_asetCreate(L_UINT_TYPE); n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); l_hashPtToUint64(x, y, &hash); key.utype = hash; l_asetInsert(set, key); } return set; } /*! * \brief ptaRemoveDupsByAset() * * \param[in] ptas assumed to be integer values * \param[out] pptad assumed to be integer values * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is slower than ptaRemoveDupsByHmap(), mostly because
 *          of the nlogn sort to build up the rbtree.  Do not use for
 *          large numbers of points (say, > 100K).
 * 
*/ l_ok ptaRemoveDupsByAset(PTA *ptas, PTA **pptad) { l_int32 i, n, x, y; PTA *ptad; l_uint64 hash; L_ASET *set; RB_TYPE key; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); set = l_asetCreate(L_UINT_TYPE); n = ptaGetCount(ptas); ptad = ptaCreate(n); *pptad = ptad; for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); l_hashPtToUint64(x, y, &hash); key.utype = hash; if (!l_asetFind(set, key)) { ptaAddPt(ptad, x, y); l_asetInsert(set, key); } } l_asetDestroy(&set); return 0; } /*! * \brief ptaUnionByAset() * * \param[in] pta1 * \param[in] pta2 * \param[out] pptad union of the two point arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See sarrayRemoveDupsByAset() for the approach.
 *      (2) The key is a 64-bit hash from the (x,y) pair.
 *      (3) This is slower than ptaUnionByHmap(), mostly because of the
 *          nlogn sort to build up the rbtree.  Do not use for large
 *          numbers of points (say, > 100K).
 *      (4) The *Aset() functions use the sorted l_Aset, which is just
 *          an rbtree in disguise.
 * 
*/ l_ok ptaUnionByAset(PTA *pta1, PTA *pta2, PTA **pptad) { PTA *pta3; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!pta1) return ERROR_INT("pta1 not defined", __func__, 1); if (!pta2) return ERROR_INT("pta2 not defined", __func__, 1); /* Join */ pta3 = ptaCopy(pta1); ptaJoin(pta3, pta2, 0, -1); /* Eliminate duplicates */ ptaRemoveDupsByAset(pta3, pptad); ptaDestroy(&pta3); return 0; } /*! * \brief ptaIntersectionByAset() * * \param[in] pta1 * \param[in] pta2 * \param[out] pptad intersection of the two point arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See sarrayIntersectionByAset() for the approach.
 *      (2) The key is a 64-bit hash from the (x,y) pair.
 *      (3) This is slower than ptaIntersectionByHmap(), mostly because
 *          of the nlogn sort to build up the rbtree.  Do not use for
 *          large numbers of points (say, > 100K).
 * 
*/ l_ok ptaIntersectionByAset(PTA *pta1, PTA *pta2, PTA **pptad) { l_int32 n1, n2, i, n, x, y; l_uint64 hash; L_ASET *set1, *set2; RB_TYPE key; PTA *pta_small, *pta_big, *ptad; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!pta1) return ERROR_INT("pta1 not defined", __func__, 1); if (!pta2) return ERROR_INT("pta2 not defined", __func__, 1); /* Put the elements of the biggest array into a set */ n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); pta_small = (n1 < n2) ? pta1 : pta2; /* do not destroy pta_small */ pta_big = (n1 < n2) ? pta2 : pta1; /* do not destroy pta_big */ set1 = l_asetCreateFromPta(pta_big); /* Build up the intersection of points */ ptad = ptaCreate(0); *pptad = ptad; n = ptaGetCount(pta_small); set2 = l_asetCreate(L_UINT_TYPE); for (i = 0; i < n; i++) { ptaGetIPt(pta_small, i, &x, &y); l_hashPtToUint64(x, y, &hash); key.utype = hash; if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { ptaAddPt(ptad, x, y); l_asetInsert(set2, key); } } l_asetDestroy(&set1); l_asetDestroy(&set2); return 0; } /*--------------------------------------------------------------------------* * Hashmap operations * *--------------------------------------------------------------------------*/ /*! * \brief l_hmapCreateFromPta() * * \param[in] pta input pta * \return hmap hashmap, or NULL on error * *
 *  Notes:
 *       (1) The indices into %pta are stored in the val field of the hashitems.
 *           This is necessary so that %hmap and %pta can be used together.
 * 
*/ L_HASHMAP * l_hmapCreateFromPta(PTA *pta) { l_int32 i, n, x, y; l_uint64 key; L_HASHMAP *hmap; if (!pta) return (L_HASHMAP *)ERROR_PTR("pta not defined", __func__, NULL); n = ptaGetCount(pta); if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL) return (L_HASHMAP *)ERROR_PTR("hmap not made", __func__, NULL); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); l_hashPtToUint64(x, y, &key); l_hmapLookup(hmap, key, i, L_HMAP_CREATE); } return hmap; } /*! * \brief ptaRemoveDupsByHmap() * * \param[in] ptas * \param[out] pptad set of unique values * \param[out] phmap [optional] hashmap used for lookup * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Generates a set of (unique) points from %ptas.
 * 
*/ l_ok ptaRemoveDupsByHmap(PTA *ptas, PTA **pptad, L_HASHMAP **phmap) { l_int32 i, x, y, tabsize; PTA *ptad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (phmap) *phmap = NULL; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!ptas) return ERROR_INT("ptas not defined", __func__, 1); /* Traverse the hashtable lists */ if ((hmap = l_hmapCreateFromPta(ptas)) == NULL) return ERROR_INT("hmap not made", __func__, 1); ptad = ptaCreate(0); *pptad = ptad; tabsize = hmap->tabsize; for (i = 0; i < tabsize; i++) { hitem = hmap->hashtab[i]; while (hitem) { ptaGetIPt(ptas, hitem->val, &x, &y); ptaAddPt(ptad, x, y); hitem = hitem->next; } } if (phmap) *phmap = hmap; else l_hmapDestroy(&hmap); return 0; } /*! * \brief ptaUnionByHmap() * * \param[in] pta1 * \param[in] pta2 * \param[out] pptad union of the two point arrays * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Make pta with points found in either of the input arrays.
 * 
*/ l_ok ptaUnionByHmap(PTA *pta1, PTA *pta2, PTA **pptad) { PTA *pta3; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!pta1) return ERROR_INT("pta1 not defined", __func__, 1); if (!pta2) return ERROR_INT("pta2 not defined", __func__, 1); pta3 = ptaCopy(pta1); if (ptaJoin(pta3, pta2, 0, -1) == 1) { ptaDestroy(&pta3); return ERROR_INT("pta join failed", __func__, 1); } ptaRemoveDupsByHmap(pta3, pptad, NULL); ptaDestroy(&pta3); return 0; } /*! * \brief ptaIntersectionByHmap() * * \param[in] pta1 * \param[in] pta2 * \param[out] pptad intersection of the two point arrays * \return 0 if OK; 1 on error * *
 *  Notes:
 *       (1) Make pta with pts common to both input arrays.
 * 
*/ l_ok ptaIntersectionByHmap(PTA *pta1, PTA *pta2, PTA **pptad) { l_int32 i, n1, n2, n, x, y; l_uint64 key; PTA *pta_small, *pta_big, *ptad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (!pptad) return ERROR_INT("&ptad not defined", __func__, 1); *pptad = NULL; if (!pta1) return ERROR_INT("pta1 not defined", __func__, 1); if (!pta2) return ERROR_INT("pta2 not defined", __func__, 1); /* Make a hashmap for the elements of the biggest array */ n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); pta_small = (n1 < n2) ? pta1 : pta2; /* do not destroy pta_small */ pta_big = (n1 < n2) ? pta2 : pta1; /* do not destroy pta_big */ if ((hmap = l_hmapCreateFromPta(pta_big)) == NULL) return ERROR_INT("hmap not made", __func__, 1); /* Go through the smallest array, doing a lookup of its (x,y) into * the big array hashmap. If an hitem is returned, check the count. * If the count is 0, ignore; otherwise, add the point to the * output ptad and set the count in the hitem to 0, indicating * that the point has already been added. */ ptad = ptaCreate(0); *pptad = ptad; n = ptaGetCount(pta_small); for (i = 0; i < n; i++) { ptaGetIPt(pta_small, i, &x, &y); l_hashPtToUint64(x, y, &key); hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK); if (!hitem || hitem->count == 0) continue; ptaAddPt(ptad, x, y); hitem->count = 0; } l_hmapDestroy(&hmap); return 0; } leptonica-1.86.0/src/ptra.c000066400000000000000000000736721506303110300154740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file ptra.c *
 *
 *      Ptra creation and destruction
 *          L_PTRA      *ptraCreate()
 *          void        *ptraDestroy()
 *
 *      Add/insert/remove/replace generic ptr object
 *          l_int32      ptraAdd()
 *          static l_int32  ptraExtendArray()
 *          l_int32      ptraInsert()
 *          void        *ptraRemove()
 *          void        *ptraRemoveLast()
 *          void        *ptraReplace()
 *          l_int32      ptraSwap()
 *          l_int32      ptraCompactArray()
 *
 *      Other array operations
 *          l_int32      ptraReverse()
 *          l_int32      ptraJoin()
 *
 *      Simple Ptra accessors
 *          l_int32      ptraGetMaxIndex()
 *          l_int32      ptraGetActualCount()
 *          void        *ptraGetPtrToItem()
 *
 *      Ptraa creation and destruction
 *          L_PTRAA     *ptraaCreate()
 *          void        *ptraaDestroy()
 *
 *      Ptraa accessors
 *          l_int32      ptraaGetSize()
 *          l_int32      ptraaInsertPtra()
 *          L_PTRA      *ptraaGetPtra()
 *
 *      Ptraa conversion
 *          L_PTRA      *ptraaFlattenToPtra()
 *
 *    Notes on the Ptra:
 *
 *    (1) The Ptra is a struct, not an array.  Always use the accessors
 *        in this file, never the fields directly.
 *    (2) Items can be placed anywhere in the allocated ptr array,
 *        including one index beyond the last ptr (in which case the
 *        ptr array is realloc'd).
 *    (3) Thus, the items on the ptr array need not be compacted.  In
 *        general there will be null pointers in the ptr array.
 *    (4) A compacted array will remain compacted on removal if
 *        arbitrary items are removed with compaction, or if items
 *        are removed from the end of the array.
 *    (5) For addition to and removal from the end of the array, this
 *        functions exactly like a stack, and with the same O(1) cost.
 *    (6) This differs from the generic stack in that we allow
 *        random access for insertion, removal and replacement.
 *        Removal can be done without compacting the array.
 *        Insertion into a null ptr in the array has no effect on
 *        the other pointers, but insertion into a location already
 *        occupied by an item has a cost proportional to the
 *        distance to the next null ptr in the array.
 *    (7) Null ptrs are valid input args for both insertion and
 *        replacement; this allows arbitrary swapping.
 *    (8) The item in the array with the largest index is at pa->imax.
 *        This can be any value from -1 (initialized; all array ptrs
 *        are null) up to pa->nalloc - 1 (the last ptr in the array).
 *    (9) In referring to the array: the first ptr is the "top" or
 *        "beginning"; the last pointer is the "bottom" or "end";
 *        items are shifted "up" towards the top when compaction occurs;
 *        and items are shifted "down" towards the bottom when forced to
 *        move due to an insertion.
 *   (10) It should be emphasized that insertion, removal and replacement
 *        are general:
 *         * You can insert an item into any ptr location in the
 *           allocated ptr array, as well as into the next ptr address
 *           beyond the allocated array (in which case a realloc will occur).
 *         * You can remove or replace an item from any ptr location
 *           in the allocated ptr array.
 *         * When inserting into an occupied location, you have
 *           three options for downshifting.
 *         * When removing, you can either leave the ptr null or
 *           compact the array.
 *
 *    Notes on the Ptraa:
 *
 *    (1) The Ptraa is a fixed size ptr array for holding Ptra.
 *        In that respect, it is different from other pointer arrays, which
 *        are extensible and grow using the *Add*() functions.
 *    (2) In general, the Ptra ptrs in the Ptraa can be randomly occupied.
 *        A typical usage is to allow an O(n) horizontal sort of Pix,
 *        where the size of the Ptra array is the width of the image,
 *        and each Ptra is an array of all the Pix at a specific x location.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Bounds on initial array size */ LEPT_DLL const l_uint32 MaxInitPtraSize = 1000001; static const l_int32 DefaultInitPtraSize = 20; /*!< n'importe quoi */ /* Static function */ static l_int32 ptraExtendArray(L_PTRA *pa); /*--------------------------------------------------------------------------* * Ptra creation and destruction * *--------------------------------------------------------------------------*/ /*! * \brief ptraCreate() * * \param[in] n size of ptr array to be alloc'd; use 0 for default * \return pa, or NULL on error */ L_PTRA * ptraCreate(l_int32 n) { L_PTRA *pa; if (n > (l_int32)MaxInitPtraSize) { L_ERROR("n = %d > maxsize = %d\n", __func__, n, MaxInitPtraSize); return NULL; } if (n <= 0) n = DefaultInitPtraSize; pa = (L_PTRA *)LEPT_CALLOC(1, sizeof(L_PTRA)); if ((pa->array = (void **)LEPT_CALLOC(n, sizeof(void *))) == NULL) { ptraDestroy(&pa, 0, 0); return (L_PTRA *)ERROR_PTR("ptr array not made", __func__, NULL); } pa->nalloc = n; pa->imax = -1; pa->nactual = 0; return pa; } /*! * \brief ptraDestroy() * * \param[in,out] ppa will be set to null before returning * \param[in] freeflag TRUE to free each remaining item in the array * \param[in] warnflag TRUE to warn if any remaining items * are not destroyed * \return void * *
 * Notes:
 *      (1) If %freeflag == TRUE, frees each item in the array.
 *      (2) If %freeflag == FALSE and %warnflag == TRUE, and there are
 *          items on the array, this gives a warning and destroys the array.
 *          If these items are not owned elsewhere, this will cause
 *          a memory leak of all the items that were on the array.
 *          So if the items are not owned elsewhere and require their
 *          own destroy function, they must be destroyed before the ptra.
 *      (3) If %warnflag == FALSE, no warnings will be issued.  This is
 *          useful if the items are owned elsewhere, such as a
 *          PixMemoryStore().
 *      (4) To destroy the ptra, we destroy the ptr array, then
 *          the ptra, and then null the contents of the input ptr.
 * 
*/ void ptraDestroy(L_PTRA **ppa, l_int32 freeflag, l_int32 warnflag) { l_int32 i, nactual; void *item; L_PTRA *pa; if (ppa == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((pa = *ppa) == NULL) return; ptraGetActualCount(pa, &nactual); if (nactual > 0) { if (freeflag) { for (i = 0; i <= pa->imax; i++) { if ((item = ptraRemove(pa, i, L_NO_COMPACTION)) != NULL) LEPT_FREE(item); } } else if (warnflag) { L_WARNING("potential memory leak of %d items in ptra\n", __func__, nactual); } } LEPT_FREE(pa->array); LEPT_FREE(pa); *ppa = NULL; } /*--------------------------------------------------------------------------* * Add/insert/remove/replace generic ptr object * *--------------------------------------------------------------------------*/ /*! * \brief ptraAdd() * * \param[in] pa ptra * \param[in] item generic ptr to a struct * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This adds the element to the next location beyond imax,
 *          which is the largest occupied ptr in the array.  This is
 *          what you expect from a stack, where all ptrs up to and
 *          including imax are occupied, but here the occuption of
 *          items in the array is entirely arbitrary.
 * 
*/ l_ok ptraAdd(L_PTRA *pa, void *item) { l_int32 imax; if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (!item) return ERROR_INT("item not defined", __func__, 1); ptraGetMaxIndex(pa, &imax); if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) return ERROR_INT("extension failure", __func__, 1); pa->array[imax + 1] = (void *)item; pa->imax++; pa->nactual++; return 0; } /*! * \brief ptraExtendArray() * * \param[in] pa * \return 0 if OK, 1 on error */ static l_int32 ptraExtendArray(L_PTRA *pa) { if (!pa) return ERROR_INT("pa not defined", __func__, 1); if ((pa->array = (void **)reallocNew((void **)&pa->array, sizeof(void *) * pa->nalloc, 2 * sizeof(void *) * pa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); pa->nalloc *= 2; return 0; } /*! * \brief ptraInsert() * * \param[in] pa ptra * \param[in] index location in ptra to insert new value * \param[in] item generic ptr to a struct; can be null * \param[in] shiftflag L_AUTO_DOWNSHIFT, L_MIN_DOWNSHIFT, L_FULL_DOWNSHIFT * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This checks first to see if the location is valid, and
 *          then if there is presently an item there.  If there is not,
 *          it is simply inserted into that location.
 *      (2) If there is an item at the insert location, items must be
 *          moved down to make room for the insert.  In the downward
 *          shift there are three options, given by %shiftflag.
 *            ~ If %shiftflag == L_AUTO_DOWNSHIFT, a decision is made
 *              whether, in a cascade of items, to downshift a minimum
 *              amount or for all items above %index.  The decision is
 *              based on the expectation of finding holes (null ptrs)
 *              between %index and the bottom of the array.
 *              Assuming the holes are distributed uniformly, if 2 or more
 *              holes are expected, we do a minimum shift.
 *            ~ If %shiftflag == L_MIN_DOWNSHIFT, the downward shifting
 *              cascade of items progresses a minimum amount, until
 *              the first empty slot is reached.  This mode requires
 *              some computation before the actual shifting is done.
 *            ~ If %shiftflag == L_FULL_DOWNSHIFT, a shifting cascade is
 *              performed where pa[i] --> pa[i + 1] for all i >= index.
 *              Then, the item is inserted at pa[index].
 *      (3) If you are not using L_AUTO_DOWNSHIFT, the rule of thumb is
 *          to use L_FULL_DOWNSHIFT if the array is compacted (each
 *          element points to an item), and to use L_MIN_DOWNSHIFT
 *          if there are a significant number of null pointers.
 *          There is no penalty to using L_MIN_DOWNSHIFT for a
 *          compacted array, however, because the full shift is required
 *          and we don't do the O(n) computation to look for holes.
 *      (4) This should not be used repeatedly on large arrays,
 *          because the function is generally O(n).
 *      (5) However, it can be used repeatedly if we start with an empty
 *          ptr array and insert only once at each location.  For example,
 *          you can support an array of Numa, where at each ptr location
 *          you store either 0 or 1 Numa, and the Numa can be added
 *          randomly to the ptr array.
 * 
*/ l_ok ptraInsert(L_PTRA *pa, l_int32 index, void *item, l_int32 shiftflag) { l_int32 i, ihole, imax; l_float32 nexpected; if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (index < 0 || index > pa->nalloc) return ERROR_INT("index not in [0 ... nalloc]", __func__, 1); if (shiftflag != L_AUTO_DOWNSHIFT && shiftflag != L_MIN_DOWNSHIFT && shiftflag != L_FULL_DOWNSHIFT) return ERROR_INT("invalid shiftflag", __func__, 1); if (item) pa->nactual++; if (index == pa->nalloc) { /* can happen when index == n */ if (ptraExtendArray(pa)) return ERROR_INT("extension failure", __func__, 1); } /* We are inserting into a hole or adding to the end of the array. * No existing items are moved. */ ptraGetMaxIndex(pa, &imax); if (pa->array[index] == NULL) { pa->array[index] = item; if (item && index > imax) /* new item put beyond max so far */ pa->imax = index; return 0; } /* We are inserting at the location of an existing item, * forcing the existing item and those below to shift down. * First, extend the array automatically if the last element * (nalloc - 1) is occupied (imax). This may not be necessary * in every situation, but only an anomalous sequence of insertions * into the array would cause extra ptr allocation. */ if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) return ERROR_INT("extension failure", __func__, 1); /* If there are no holes, do a full downshift. * Otherwise, if L_AUTO_DOWNSHIFT, use the expected number * of holes between index and n to determine the shift mode */ if (imax + 1 == pa->nactual) { shiftflag = L_FULL_DOWNSHIFT; } else if (shiftflag == L_AUTO_DOWNSHIFT) { if (imax < 10) { shiftflag = L_FULL_DOWNSHIFT; /* no big deal */ } else { nexpected = (l_float32)(imax - pa->nactual) * (l_float32)((imax - index) / imax); shiftflag = (nexpected > 2.0) ? L_MIN_DOWNSHIFT : L_FULL_DOWNSHIFT; } } if (shiftflag == L_MIN_DOWNSHIFT) { /* run down looking for a hole */ for (ihole = index + 1; ihole <= imax; ihole++) { if (pa->array[ihole] == NULL) break; } } else { /* L_FULL_DOWNSHIFT */ ihole = imax + 1; } for (i = ihole; i > index; i--) pa->array[i] = pa->array[i - 1]; pa->array[index] = (void *)item; if (ihole == imax + 1) /* the last item was shifted down */ pa->imax++; return 0; } /*! * \brief ptraRemove() * * \param[in] pa ptra * \param[in] index element to be removed * \param[in] flag L_NO_COMPACTION, L_COMPACTION * \return item, or NULL on error * *
 * Notes:
 *      (1) If flag == L_NO_COMPACTION, this removes the item and
 *          nulls the ptr on the array.  If it takes the last item
 *          in the array, pa->n is reduced to the next item.
 *      (2) If flag == L_COMPACTION, this compacts the array for
 *          for all i >= index.  It should not be used repeatedly on
 *          large arrays, because compaction is O(n).
 *      (3) The ability to remove without automatic compaction allows
 *          removal with cost O(1).
 * 
*/ void * ptraRemove(L_PTRA *pa, l_int32 index, l_int32 flag) { l_int32 i, imax, fromend, icurrent; void *item; if (!pa) return (void *)ERROR_PTR("pa not defined", __func__, NULL); ptraGetMaxIndex(pa, &imax); if (index < 0 || index > imax) return (void *)ERROR_PTR("index not in [0 ... imax]", __func__, NULL); item = pa->array[index]; if (item) pa->nactual--; pa->array[index] = NULL; /* If we took the last item, need to reduce pa->n */ fromend = (index == imax); if (fromend) { for (i = index - 1; i >= 0; i--) { if (pa->array[i]) break; } pa->imax = i; } /* Compact from index to the end of the array */ if (!fromend && flag == L_COMPACTION) { for (icurrent = index, i = index + 1; i <= imax; i++) { if (pa->array[i]) pa->array[icurrent++] = pa->array[i]; } pa->imax = icurrent - 1; } return item; } /*! * \brief ptraRemoveLast() * * \param[in] pa ptra * \return item, or NULL on error or if the array is empty */ void * ptraRemoveLast(L_PTRA *pa) { l_int32 imax; if (!pa) return (void *)ERROR_PTR("pa not defined", __func__, NULL); /* Remove the last item in the array. No compaction is required. */ ptraGetMaxIndex(pa, &imax); if (imax >= 0) return ptraRemove(pa, imax, L_NO_COMPACTION); else /* empty */ return NULL; } /*! * \brief ptraReplace() * * \param[in] pa ptra * \param[in] index element to be replaced * \param[in] item new generic ptr to a struct; can be null * \param[in] freeflag TRUE to free old item; FALSE to return it * \return item old item, if it exists and is not freed, * or NULL on error */ void * ptraReplace(L_PTRA *pa, l_int32 index, void *item, l_int32 freeflag) { l_int32 imax; void *olditem; if (!pa) return (void *)ERROR_PTR("pa not defined", __func__, NULL); ptraGetMaxIndex(pa, &imax); if (index < 0 || index > imax) return (void *)ERROR_PTR("index not in [0 ... imax]", __func__, NULL); olditem = pa->array[index]; pa->array[index] = item; if (!item && olditem) pa->nactual--; else if (item && !olditem) pa->nactual++; if (freeflag == FALSE) return olditem; if (olditem) LEPT_FREE(olditem); return NULL; } /*! * \brief ptraSwap() * * \param[in] pa ptra * \param[in] index1 * \param[in] index2 * \return 0 if OK, 1 on error */ l_ok ptraSwap(L_PTRA *pa, l_int32 index1, l_int32 index2) { l_int32 imax; void *item; if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (index1 == index2) return 0; ptraGetMaxIndex(pa, &imax); if (index1 < 0 || index1 > imax || index2 < 0 || index2 > imax) return ERROR_INT("invalid index: not in [0 ... imax]", __func__, 1); item = ptraRemove(pa, index1, L_NO_COMPACTION); item = ptraReplace(pa, index2, item, FALSE); ptraInsert(pa, index1, item, L_MIN_DOWNSHIFT); return 0; } /*! * \brief ptraCompactArray() * * \param[in] pa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This compacts the items on the array, filling any empty ptrs.
 *      (2) This does not change the size of the array of ptrs.
 * 
*/ l_ok ptraCompactArray(L_PTRA *pa) { l_int32 i, imax, nactual, index; if (!pa) return ERROR_INT("pa not defined", __func__, 1); ptraGetMaxIndex(pa, &imax); ptraGetActualCount(pa, &nactual); if (imax + 1 == nactual) return 0; /* Compact the array */ for (i = 0, index = 0; i <= imax; i++) { if (pa->array[i]) pa->array[index++] = pa->array[i]; } pa->imax = index - 1; if (nactual != index) L_ERROR("index = %d; != nactual\n", __func__, index); return 0; } /*----------------------------------------------------------------------* * Other array operations * *----------------------------------------------------------------------*/ /*! * \brief ptraReverse() * * \param[in] pa ptra * \return 0 if OK, 1 on error */ l_ok ptraReverse(L_PTRA *pa) { l_int32 i, imax; if (!pa) return ERROR_INT("pa not defined", __func__, 1); ptraGetMaxIndex(pa, &imax); for (i = 0; i < (imax + 1) / 2; i++) ptraSwap(pa, i, imax - i); return 0; } /*! * \brief ptraJoin() * * \param[in] pa1 add to this one * \param[in] pa2 appended to pa1, and emptied of items; can be null * \return 0 if OK, 1 on error */ l_ok ptraJoin(L_PTRA *pa1, L_PTRA *pa2) { l_int32 i, imax; void *item; if (!pa1) return ERROR_INT("pa1 not defined", __func__, 1); if (!pa2) return 0; ptraGetMaxIndex(pa2, &imax); for (i = 0; i <= imax; i++) { item = ptraRemove(pa2, i, L_NO_COMPACTION); ptraAdd(pa1, item); } return 0; } /*----------------------------------------------------------------------* * Simple ptra accessors * *----------------------------------------------------------------------*/ /*! * \brief ptraGetMaxIndex() * * \param[in] pa ptra * \param[out] pmaxindex index of last item in the array; * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The largest index to an item in the array is %maxindex.
 *          %maxindex is one less than the number of items that would be
 *          in the array if there were no null pointers between 0
 *          and %maxindex - 1.  However, because the internal ptr array
 *          need not be compacted, there may be NULL pointers at
 *          indices below %maxindex; for example, if items have
 *          been removed.
 *      (2) When an item is added to the end of the array, it goes
 *          into pa->array[maxindex + 1], and maxindex is then
 *          incremented by 1.
 *      (3) If there are no items in the array, this returns %maxindex = -1.
 * 
*/ l_ok ptraGetMaxIndex(L_PTRA *pa, l_int32 *pmaxindex) { if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (!pmaxindex) return ERROR_INT("&maxindex not defined", __func__, 1); *pmaxindex = pa->imax; return 0; } /*! * \brief ptraGetActualCount() * * \param[in] pa ptra * \param[out] pcount actual number of items on the ptr array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) The actual number of items on the ptr array, pa->nactual,
 *          will be smaller than pa->n if the array is not compacted.
 * 
*/ l_ok ptraGetActualCount(L_PTRA *pa, l_int32 *pcount) { if (!pa) return ERROR_INT("pa not defined", __func__, 1); if (!pcount) return ERROR_INT("&count not defined", __func__, 1); *pcount = pa->nactual; return 0; } /*! * \brief ptraGetPtrToItem() * * \param[in] pa ptra * \param[in] index of element to be retrieved * \return a ptr to the element, or NULL on error * *
 * Notes:
 *      (1) This returns a ptr to the item.  You must cast it to
 *          the type of item.  Do not destroy it; the item belongs
 *          to the Ptra.
 *      (2) This can access all possible items on the ptr array.
 *          If an item doesn't exist, it returns null.
 * 
*/ void * ptraGetPtrToItem(L_PTRA *pa, l_int32 index) { if (!pa) return (void *)ERROR_PTR("pa not defined", __func__, NULL); if (index < 0 || index >= pa->nalloc) return (void *)ERROR_PTR("index not in [0 ... nalloc-1]", __func__, NULL); return pa->array[index]; } /*--------------------------------------------------------------------------* * Ptraa creation and destruction * *--------------------------------------------------------------------------*/ /*! * \brief ptraaCreate() * * \param[in] n size of ptr array to be alloc'd * \return paa, or NULL on error * *
 * Notes:
 *      (1) The ptraa is generated with a fixed size, that can not change.
 *          The ptra can be generated and inserted randomly into this array.
 * 
*/ L_PTRAA * ptraaCreate(l_int32 n) { L_PTRAA *paa; if (n <= 0) return (L_PTRAA *)ERROR_PTR("n must be > 0", __func__, NULL); paa = (L_PTRAA *)LEPT_CALLOC(1, sizeof(L_PTRAA)); if ((paa->ptra = (L_PTRA **)LEPT_CALLOC(n, sizeof(L_PTRA *))) == NULL) { ptraaDestroy(&paa, 0, 0); return (L_PTRAA *)ERROR_PTR("ptr array not made", __func__, NULL); } paa->nalloc = n; return paa; } /*! * \brief ptraaDestroy() * * \param[in,out] ppaa will be set to null before returning * \param[in] freeflag TRUE to free each remaining item in each ptra * \param[in] warnflag TRUE to warn if any remaining items * are not destroyed * \return void * *
 * Notes:
 *      (1) See ptraDestroy() for use of %freeflag and %warnflag.
 *      (2) To destroy the ptraa, we destroy each ptra, then the ptr array,
 *          then the ptraa, and then null the contents of the input ptr.
 * 
*/ void ptraaDestroy(L_PTRAA **ppaa, l_int32 freeflag, l_int32 warnflag) { l_int32 i, n; L_PTRA *pa; L_PTRAA *paa; if (ppaa == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((paa = *ppaa) == NULL) return; ptraaGetSize(paa, &n); for (i = 0; i < n; i++) { pa = ptraaGetPtra(paa, i, L_REMOVE); ptraDestroy(&pa, freeflag, warnflag); } LEPT_FREE(paa->ptra); LEPT_FREE(paa); *ppaa = NULL; } /*--------------------------------------------------------------------------* * Ptraa accessors * *--------------------------------------------------------------------------*/ /*! * \brief ptraaGetSize() * * \param[in] paa * \param[out] psize size of ptr array * \return 0 if OK; 1 on error */ l_ok ptraaGetSize(L_PTRAA *paa, l_int32 *psize) { if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); *psize = paa->nalloc; return 0; } /*! * \brief ptraaInsertPtra() * * \param[in] paa ptraa * \param[in] index location in array for insertion * \param[in] pa to be inserted * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Caller should check return value.  On success, the Ptra
 *          is inserted in the Ptraa and is owned by it.  However,
 *          on error, the Ptra remains owned by the caller.
 * 
*/ l_ok ptraaInsertPtra(L_PTRAA *paa, l_int32 index, L_PTRA *pa) { l_int32 n; if (!paa) return ERROR_INT("paa not defined", __func__, 1); if (!pa) return ERROR_INT("pa not defined", __func__, 1); ptraaGetSize(paa, &n); if (index < 0 || index >= n) return ERROR_INT("invalid index", __func__, 1); if (paa->ptra[index] != NULL) return ERROR_INT("ptra already stored at index", __func__, 1); paa->ptra[index] = pa; return 0; } /*! * \brief ptraaGetPtra() * * \param[in] paa ptraa * \param[in] index location in array * \param[in] accessflag L_HANDLE_ONLY, L_REMOVE * \return ptra at index location, or NULL on error or if there * is no ptra there. * *
 * Notes:
 *      (1) This returns the ptra ptr.  If %accessflag == L_HANDLE_ONLY,
 *          the ptra is left on the ptraa.  If %accessflag == L_REMOVE,
 *          the ptr in the ptraa is set to NULL, and the caller
 *          is responsible for disposing of the ptra (either putting it
 *          back on the ptraa, or destroying it).
 *      (2) This returns NULL if there is no Ptra at the index location.
 * 
*/ L_PTRA * ptraaGetPtra(L_PTRAA *paa, l_int32 index, l_int32 accessflag) { l_int32 n; L_PTRA *pa; if (!paa) return (L_PTRA *)ERROR_PTR("paa not defined", __func__, NULL); ptraaGetSize(paa, &n); if (index < 0 || index >= n) return (L_PTRA *)ERROR_PTR("invalid index", __func__, NULL); if (accessflag != L_HANDLE_ONLY && accessflag != L_REMOVE) return (L_PTRA *)ERROR_PTR("invalid accessflag", __func__, NULL); pa = paa->ptra[index]; if (accessflag == L_REMOVE) paa->ptra[index] = NULL; return pa; } /*--------------------------------------------------------------------------* * Ptraa conversion * *--------------------------------------------------------------------------*/ /*! * \brief ptraaFlattenToPtra() * * \param[in] paa ptraa * \return ptra, or NULL on error * *
 * Notes:
 *      (1) This 'flattens' the ptraa to a ptra, taking the items in
 *          each ptra, in order, starting with the first ptra, etc.
 *      (2) As a side-effect, the ptra are all removed from the ptraa
 *          and destroyed, leaving an empty ptraa.
 * 
*/ L_PTRA * ptraaFlattenToPtra(L_PTRAA *paa) { l_int32 i, n; L_PTRA *pat, *pad; if (!paa) return (L_PTRA *)ERROR_PTR("paa not defined", __func__, NULL); pad = ptraCreate(0); ptraaGetSize(paa, &n); for (i = 0; i < n; i++) { pat = ptraaGetPtra(paa, i, L_REMOVE); if (!pat) continue; ptraJoin(pad, pat); ptraDestroy(&pat, FALSE, FALSE); /* they're all empty */ } return pad; } leptonica-1.86.0/src/ptra.h000066400000000000000000000071711506303110300154700ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_PTRA_H #define LEPTONICA_PTRA_H /*! * \file ptra.h * *
 *  Contains the following structs:
 *      struct L_Ptra
 *      struct L_Ptraa
 *
 *  Contains definitions for:
 *      L_Ptra compaction flags for removal
 *      L_Ptra shifting flags for insert
 *      L_Ptraa accessor flags
 * 
*/ /* Bound on max initial ptra size */ LEPT_DLL extern const l_uint32 MaxInitPtraSize; /*------------------------------------------------------------------------* * Generic Ptr Array Structs * *------------------------------------------------------------------------*/ /*! Generic pointer array */ struct L_Ptra { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 imax; /*!< greatest valid index */ l_int32 nactual; /*!< actual number of stored elements */ void **array; /*!< ptr array */ }; typedef struct L_Ptra L_PTRA; /*! Array of generic pointer arrays */ struct L_Ptraa { l_int32 nalloc; /*!< size of allocated ptr array */ struct L_Ptra **ptra; /*!< array of ptra */ }; typedef struct L_Ptraa L_PTRAA; /*------------------------------------------------------------------------* * Accessor and modifier flags for L_Ptra and L_Ptraa * *------------------------------------------------------------------------*/ /*! Ptra Removal */ enum { L_NO_COMPACTION = 1, /*!< null the pointer only */ L_COMPACTION = 2 /*!< compact the array */ }; /*! Ptra Insertion */ enum { L_AUTO_DOWNSHIFT = 0, /*!< choose based on number of holes */ L_MIN_DOWNSHIFT = 1, /*!< downshifts min # of ptrs below insert */ L_FULL_DOWNSHIFT = 2 /*!< downshifts all ptrs below insert */ }; /*! Ptraa Accessor */ enum { L_HANDLE_ONLY = 0, /*!< ptr to L_Ptra; caller can inspect only */ L_REMOVE = 1 /*!< caller owns; destroy or save in L_Ptraa */ }; #endif /* LEPTONICA_PTRA_H */ leptonica-1.86.0/src/quadtree.c000066400000000000000000000564011506303110300163270ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file quadtree.c *
 *
 *      Top level quadtree linear statistics
 *          l_int32   pixQuadtreeMean()
 *          l_int32   pixQuadtreeVariance()
 *
 *      Statistics in an arbitrary rectangle
 *          l_int32   pixMeanInRectangle()
 *          l_int32   pixVarianceInRectangle()
 *
 *      Quadtree regions
 *          BOXAA    *boxaaQuadtreeRegions()
 *
 *      Quadtree access
 *          l_int32   quadtreeGetParent()
 *          l_int32   quadtreeGetChildren()
 *          l_int32   quadtreeMaxLevels()
 *
 *      Display quadtree
 *          PIX      *fpixaDisplayQuadtree()
 *
 *
 *  There are many other statistical quantities that can be computed
 *  in a quadtree, such as rank values, and these can be added as
 *  the need arises.
 *
 *  Similar results that can approximate a single level of the quadtree
 *  can be generated by pixGetAverageTiled().  There we specify the
 *  tile size over which the mean, mean square, and root variance
 *  are generated; the results are saved in a (reduced size) pix.
 *  Because the tile dimensions are integers, it is usually not possible
 *  to obtain tilings that are a power of 2, as required for quadtrees.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_BOXES 0 #endif /* !NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Top-level quadtree linear statistics * *----------------------------------------------------------------------*/ /*! * \brief pixQuadtreeMean() * * \param[in] pixs 8 bpp, no colormap * \param[in] nlevels in quadtree; max allowed depends on image size * \param[in] pix_ma input mean accumulator; can be null * \param[out] pfpixa mean values in quadtree * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned fpixa has %nlevels of fpix, each containing
 *          the mean values at its level.  Level 0 has a
 *          single value; level 1 has 4 values; level 2 has 16; etc.
 * 
*/ l_ok pixQuadtreeMean(PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa) { l_int32 i, j, w, h, size, n; l_float32 val; BOX *box; BOXA *boxa; BOXAA *baa; FPIX *fpix; PIX *pix_mac; if (!pfpixa) return ERROR_INT("&fpixa not defined", __func__, 1); *pfpixa = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (nlevels > quadtreeMaxLevels(w, h)) return ERROR_INT("nlevels too large for image", __func__, 1); if (!pix_ma) pix_mac = pixBlockconvAccum(pixs); else pix_mac = pixClone(pix_ma); if (!pix_mac) return ERROR_INT("pix_mac not made", __func__, 1); if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { pixDestroy(&pix_mac); return ERROR_INT("baa not made", __func__, 1); } *pfpixa = fpixaCreate(nlevels); for (i = 0; i < nlevels; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); size = 1 << i; n = boxaGetCount(boxa); /* n == size * size */ fpix = fpixCreate(size, size); for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixMeanInRectangle(pixs, box, pix_mac, &val); fpixSetPixel(fpix, j % size, j / size, val); boxDestroy(&box); } fpixaAddFPix(*pfpixa, fpix, L_INSERT); boxaDestroy(&boxa); } pixDestroy(&pix_mac); boxaaDestroy(&baa); return 0; } /*! * \brief pixQuadtreeVariance() * * \param[in] pixs 8 bpp, no colormap * \param[in] nlevels in quadtree * \param[in] pix_ma input mean accumulator; can be null * \param[in] dpix_msa input mean square accumulator; can be null * \param[out] pfpixa_v [optional] variance values in quadtree * \param[out] pfpixa_rv [optional] root variance values in quadtree * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned fpixav and fpixarv have %nlevels of fpix,
 *          each containing at the respective levels the variance
 *          and root variance values.
 * 
*/ l_ok pixQuadtreeVariance(PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv) { l_int32 i, j, w, h, size, n; l_float32 var, rvar; BOX *box; BOXA *boxa; BOXAA *baa; FPIX *fpixv = NULL, *fpixrv = NULL; PIX *pix_mac; /* copy of mean accumulator */ DPIX *dpix_msac; /* msa clone */ if (!pfpixa_v && !pfpixa_rv) return ERROR_INT("neither &fpixav nor &fpixarv defined", __func__, 1); if (pfpixa_v) *pfpixa_v = NULL; if (pfpixa_rv) *pfpixa_rv = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); if (nlevels > quadtreeMaxLevels(w, h)) return ERROR_INT("nlevels too large for image", __func__, 1); if (!pix_ma) pix_mac = pixBlockconvAccum(pixs); else pix_mac = pixClone(pix_ma); if (!pix_mac) return ERROR_INT("pix_mac not made", __func__, 1); if (!dpix_msa) dpix_msac = pixMeanSquareAccum(pixs); else dpix_msac = dpixClone(dpix_msa); if (!dpix_msac) { pixDestroy(&pix_mac); return ERROR_INT("dpix_msac not made", __func__, 1); } if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { pixDestroy(&pix_mac); dpixDestroy(&dpix_msac); return ERROR_INT("baa not made", __func__, 1); } if (pfpixa_v) *pfpixa_v = fpixaCreate(nlevels); if (pfpixa_rv) *pfpixa_rv = fpixaCreate(nlevels); for (i = 0; i < nlevels; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); size = 1 << i; n = boxaGetCount(boxa); /* n == size * size */ if (pfpixa_v) fpixv = fpixCreate(size, size); if (pfpixa_rv) fpixrv = fpixCreate(size, size); for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixVarianceInRectangle(pixs, box, pix_mac, dpix_msac, &var, &rvar); if (pfpixa_v) fpixSetPixel(fpixv, j % size, j / size, var); if (pfpixa_rv) fpixSetPixel(fpixrv, j % size, j / size, rvar); boxDestroy(&box); } if (pfpixa_v) fpixaAddFPix(*pfpixa_v, fpixv, L_INSERT); if (pfpixa_rv) fpixaAddFPix(*pfpixa_rv, fpixrv, L_INSERT); boxaDestroy(&boxa); } pixDestroy(&pix_mac); dpixDestroy(&dpix_msac); boxaaDestroy(&baa); return 0; } /*----------------------------------------------------------------------* * Statistics in an arbitrary rectangle * *----------------------------------------------------------------------*/ /*! * \brief pixMeanInRectangle() * * \param[in] pixs 8 bpp * \param[in] box region to compute mean value * \param[in] pixma mean accumulator * \param[out] pval mean value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function is intended to be used for many rectangles
 *          on the same image.  It can find the mean within a
 *          rectangle in O(1), independent of the size of the rectangle.
 * 
*/ l_ok pixMeanInRectangle(PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval) { l_int32 w, h, bx, by, bw, bh; l_uint32 val00, val01, val10, val11; l_float32 norm; BOX *boxc; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (!pixma) return ERROR_INT("pixma not defined", __func__, 1); /* Clip rectangle to image */ pixGetDimensions(pixs, &w, &h, NULL); boxc = boxClipToRectangle(box, w, h); boxGetGeometry(boxc, &bx, &by, &bw, &bh); boxDestroy(&boxc); if (bw == 0 || bh == 0) return ERROR_INT("no pixels in box", __func__, 1); /* Use up to 4 points in the accumulator */ norm = 1.0f / ((l_float32)(bw) * bh); if (bx > 0 && by > 0) { pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11); pixGetPixel(pixma, bx + bw - 1, by - 1, &val10); pixGetPixel(pixma, bx - 1, by + bh - 1, &val01); pixGetPixel(pixma, bx - 1, by - 1, &val00); *pval = norm * (val11 - val01 + val00 - val10); } else if (by > 0) { /* bx == 0 */ pixGetPixel(pixma, bw - 1, by + bh - 1, &val11); pixGetPixel(pixma, bw - 1, by - 1, &val10); *pval = norm * (val11 - val10); } else if (bx > 0) { /* by == 0 */ pixGetPixel(pixma, bx + bw - 1, bh - 1, &val11); pixGetPixel(pixma, bx - 1, bh - 1, &val01); *pval = norm * (val11 - val01); } else { /* bx == 0 && by == 0 */ pixGetPixel(pixma, bw - 1, bh - 1, &val11); *pval = norm * val11; } return 0; } /*! * \brief pixVarianceInRectangle() * * \param[in] pixs 8 bpp * \param[in] box region to compute variance and/or root variance * \param[in] pix_ma mean accumulator * \param[in] dpix_msa mean square accumulator * \param[out] pvar [optional] variance * \param[out] prvar [optional] root variance * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function is intended to be used for many rectangles
 *          on the same image.  It can find the variance and/or the
 *          square root of the variance within a rectangle in O(1),
 *          independent of the size of the rectangle.
 * 
*/ l_ok pixVarianceInRectangle(PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar) { l_int32 w, h, bx, by, bw, bh; l_uint32 val00, val01, val10, val11; l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm; BOX *boxc; if (!pvar && !prvar) return ERROR_INT("neither &var nor &rvar defined", __func__, 1); if (pvar) *pvar = 0.0; if (prvar) *prvar = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined", __func__, 1); if (!box) return ERROR_INT("box not defined", __func__, 1); if (!pix_ma) return ERROR_INT("pix_ma not defined", __func__, 1); if (!dpix_msa) return ERROR_INT("dpix_msa not defined", __func__, 1); /* Clip rectangle to image */ pixGetDimensions(pixs, &w, &h, NULL); boxc = boxClipToRectangle(box, w, h); boxGetGeometry(boxc, &bx, &by, &bw, &bh); boxDestroy(&boxc); if (bw == 0 || bh == 0) return ERROR_INT("no pixels in box", __func__, 1); /* Use up to 4 points in the accumulators */ norm = 1.0 / ((l_float32)(bw) * bh); if (bx > 0 && by > 0) { pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11); pixGetPixel(pix_ma, bx + bw - 1, by - 1, &val10); pixGetPixel(pix_ma, bx - 1, by + bh - 1, &val01); pixGetPixel(pix_ma, bx - 1, by - 1, &val00); dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11); dpixGetPixel(dpix_msa, bx + bw - 1, by - 1, &dval10); dpixGetPixel(dpix_msa, bx - 1, by + bh - 1, &dval01); dpixGetPixel(dpix_msa, bx - 1, by - 1, &dval00); mval = norm * (val11 - val01 + val00 - val10); msval = norm * (dval11 - dval01 + dval00 - dval10); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else if (by > 0) { /* bx == 0 */ pixGetPixel(pix_ma, bw - 1, by + bh - 1, &val11); pixGetPixel(pix_ma, bw - 1, by - 1, &val10); dpixGetPixel(dpix_msa, bw - 1, by + bh - 1, &dval11); dpixGetPixel(dpix_msa, bw - 1, by - 1, &dval10); mval = norm * (val11 - val10); msval = norm * (dval11 - dval10); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else if (bx > 0) { /* by == 0 */ pixGetPixel(pix_ma, bx + bw - 1, bh - 1, &val11); pixGetPixel(pix_ma, bx - 1, bh - 1, &val01); dpixGetPixel(dpix_msa, bx + bw - 1, bh - 1, &dval11); dpixGetPixel(dpix_msa, bx - 1, bh - 1, &dval01); mval = norm * (val11 - val01); msval = norm * (dval11 - dval01); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else { /* bx == 0 && by == 0 */ pixGetPixel(pix_ma, bw - 1, bh - 1, &val11); dpixGetPixel(dpix_msa, bw - 1, bh - 1, &dval11); mval = norm * val11; msval = norm * dval11; var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } return 0; } /*----------------------------------------------------------------------* * Quadtree regions * *----------------------------------------------------------------------*/ /*! * \brief boxaaQuadtreeRegions() * * \param[in] w, h size of pix that is being quadtree-ized * \param[in] nlevels number of levels in quadtree * \return baa for quadtree regions at each level, or NULL on error * *
 * Notes:
 *      (1) The returned boxaa has %nlevels of boxa, each containing
 *          the set of rectangles at that level.  The rectangle at
 *          level 0 is the entire region; at level 1 the region is
 *          divided into 4 rectangles, and at level n there are n^4
 *          rectangles.
 *      (2) At each level, the rectangles in the boxa are in "raster"
 *          order, with LR (fast scan) and TB (slow scan).
 * 
*/ BOXAA * boxaaQuadtreeRegions(l_int32 w, l_int32 h, l_int32 nlevels) { l_int32 i, j, k, maxpts, nside, nbox, bw, bh; l_int32 *xstart, *xend, *ystart, *yend; BOX *box; BOXA *boxa; BOXAA *baa; if (nlevels < 1) return (BOXAA *)ERROR_PTR("nlevels must be >= 1", __func__, NULL); if (w < (1 << (nlevels - 1))) return (BOXAA *)ERROR_PTR("w doesn't support nlevels", __func__, NULL); if (h < (1 << (nlevels - 1))) return (BOXAA *)ERROR_PTR("h doesn't support nlevels", __func__, NULL); baa = boxaaCreate(nlevels); maxpts = 1 << (nlevels - 1); xstart = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); xend = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); ystart = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); yend = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); for (k = 0; k < nlevels; k++) { nside = 1 << k; /* number of boxes in each direction */ for (i = 0; i < nside; i++) { xstart[i] = (w - 1) * i / nside; if (i > 0) xstart[i]++; xend[i] = (w - 1) * (i + 1) / nside; ystart[i] = (h - 1) * i / nside; if (i > 0) ystart[i]++; yend[i] = (h - 1) * (i + 1) / nside; #if DEBUG_BOXES lept_stderr( "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n", k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]); #endif /* DEBUG_BOXES */ } nbox = 1 << (2 * k); boxa = boxaCreate(nbox); for (i = 0; i < nside; i++) { bh = yend[i] - ystart[i] + 1; for (j = 0; j < nside; j++) { bw = xend[j] - xstart[j] + 1; box = boxCreate(xstart[j], ystart[i], bw, bh); boxaAddBox(boxa, box, L_INSERT); } } boxaaAddBoxa(baa, boxa, L_INSERT); } LEPT_FREE(xstart); LEPT_FREE(xend); LEPT_FREE(ystart); LEPT_FREE(yend); return baa; } /*----------------------------------------------------------------------* * Quadtree access * *----------------------------------------------------------------------*/ /*! * \brief quadtreeGetParent() * * \param[in] fpixa mean, variance or root variance * \param[in] level, x, y of current pixel * \param[out] pval parent pixel value, or 0.0 on error * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Check return value for error.  On error, val is returned as 0.0.
 *      (2) The parent is located at:
 *             level - 1
 *             (x/2, y/2)
 * 
*/ l_ok quadtreeGetParent(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 n; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); n = fpixaGetCount(fpixa); if (level < 1 || level >= n) return ERROR_INT("invalid level", __func__, 1); if (fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0) return ERROR_INT("invalid coordinates", __func__, 1); return 0; } /*! * \brief quadtreeGetChildren() * * \param[in] fpixa mean, variance or root variance * \param[in] level, x, y of current pixel * \param[out] pval00, pval01, * pval10, pval11 four child pixel values * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Check return value for error.  On error, all return vals are 0.0.
 *      (2) The returned child pixels are located at:
 *             level + 1
 *             (2x, 2y), (2x+1, 2y), (2x, 2y+1), (2x+1, 2y+1)
 * 
*/ l_ok quadtreeGetChildren(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11) { l_int32 n; if (!pval00 || !pval01 || !pval10 || !pval11) return ERROR_INT("&val* not all defined", __func__, 1); *pval00 = *pval10 = *pval01 = *pval11 = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", __func__, 1); n = fpixaGetCount(fpixa); if (level < 0 || level >= n - 1) return ERROR_INT("invalid level", __func__, 1); if (fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0) return ERROR_INT("invalid coordinates", __func__, 1); fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y, pval10); fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y + 1, pval01); fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11); return 0; } /*! * \brief quadtreeMaxLevels() * * \param[in] w, h dimensions of image * \return maxlevels maximum number of levels allowed, or -1 on error * *
 * Notes:
 *      (1) The criterion for maxlevels is that the subdivision not
 *          go down below the single pixel level.  The 1.5 factor
 *          is intended to keep any rectangle from accidentally
 *          having zero dimension due to integer truncation.
 * 
*/ l_int32 quadtreeMaxLevels(l_int32 w, l_int32 h) { l_int32 i, minside; minside = L_MIN(w, h); for (i = 0; i < 20; i++) { /* 2^10 = one million */ if (minside < (1.5 * (1 << i))) return i - 1; } return -1; /* fail if the image has over a trillion pixels! */ } /*----------------------------------------------------------------------* * Display quadtree * *----------------------------------------------------------------------*/ /*! * \brief fpixaDisplayQuadtree() * * \param[in] fpixa mean, variance or root variance * \param[in] factor replication factor at lowest level * \param[in] fontsize 4, ... 20 * \return pixd 8 bpp, mosaic of quadtree images, or NULL on error * *
 * Notes:
 *      (1) The mean and root variance fall naturally in the 8 bpp range,
 *          but the variance is typically outside the range.  This
 *          function displays 8 bpp pix clipped to 255, so the image
 *          pixels will mostly be 255 (white).
 * 
*/ PIX * fpixaDisplayQuadtree(FPIXA *fpixa, l_int32 factor, l_int32 fontsize) { char buf[256]; l_int32 nlevels, i, mag, w; L_BMF *bmf; FPIX *fpix; PIX *pixt1, *pixt2, *pixt3, *pixt4 = NULL, *pixd; PIXA *pixat; if (!fpixa) return (PIX *)ERROR_PTR("fpixa not defined", __func__, NULL); if ((nlevels = fpixaGetCount(fpixa)) == 0) return (PIX *)ERROR_PTR("pixas empty", __func__, NULL); if ((bmf = bmfCreate(NULL, fontsize)) == NULL) L_ERROR("bmf not made; text will not be added", __func__); pixat = pixaCreate(nlevels); for (i = 0; i < nlevels; i++) { fpix = fpixaGetFPix(fpixa, i, L_CLONE); pixt1 = fpixConvertToPix(fpix, 8, L_CLIP_TO_ZERO, 0); mag = factor * (1 << (nlevels - i - 1)); pixt2 = pixExpandReplicate(pixt1, mag); pixt3 = pixConvertTo32(pixt2); snprintf(buf, sizeof(buf), "Level %d\n", i); pixt4 = pixAddSingleTextblock(pixt3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixat, pixt4, L_INSERT); fpixDestroy(&fpix); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); } w = pixGetWidth(pixt4); pixd = pixaDisplayTiledInRows(pixat, 32, nlevels * (w + 80), 1.0, 0, 30, 2); pixaDestroy(&pixat); bmfDestroy(&bmf); return pixd; } leptonica-1.86.0/src/queue.c000066400000000000000000000227771506303110300156520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file queue.c *
 *
 *      Create/Destroy L_Queue
 *          L_QUEUE        *lqueueCreate()
 *          void           *lqueueDestroy()
 *
 *      Operations to add/remove to/from a L_Queue
 *          l_int32         lqueueAdd()
 *          static l_int32  lqueueExtendArray()
 *          void           *lqueueRemove()
 *
 *      Accessors
 *          l_int32         lqueueGetCount()
 *
 *      Debug output
 *          l_int32         lqueuePrint()
 *
 *    The lqueue is a fifo that implements a queue of void* pointers.
 *    It can be used to hold a queue of any type of struct.
 *    Internally, it maintains two counters:
 *        nhead:  location of head (in ptrs) from the beginning
 *                of the buffer
 *        nelem:  number of ptr elements stored in the queue
 *    As items are added to the queue, nelem increases.
 *    As items are removed, nhead increases and nelem decreases.
 *    Any time the tail reaches the end of the allocated buffer,
 *      all the pointers are shifted to the left, so that the head
 *      is at the beginning of the array.
 *    If the buffer becomes more than 3/4 full, it doubles in size.
 *
 *    [A circular queue would allow us to skip the shifting and
 *    to resize only when the buffer is full.  For most applications,
 *    the extra work we do for a linear queue is not significant.]
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const l_int32 MIN_BUFFER_SIZE = 20; /* n'importe quoi */ static const l_int32 INITIAL_BUFFER_ARRAYSIZE = 1024; /* n'importe quoi */ /* Static function */ static l_int32 lqueueExtendArray(L_QUEUE *lq); /*--------------------------------------------------------------------------* * L_Queue create/destroy * *--------------------------------------------------------------------------*/ /*! * \brief lqueueCreate() * * \param[in] nalloc size of ptr array to be alloc'd; 0 for default * \return lqueue, or NULL on error * *
 * Notes:
 *      (1) Allocates a ptr array of given size, and initializes counters.
 * 
*/ L_QUEUE * lqueueCreate(l_int32 nalloc) { L_QUEUE *lq; if (nalloc < MIN_BUFFER_SIZE) nalloc = INITIAL_BUFFER_ARRAYSIZE; lq = (L_QUEUE *)LEPT_CALLOC(1, sizeof(L_QUEUE)); if ((lq->array = (void **)LEPT_CALLOC(nalloc, sizeof(void *))) == NULL) { lqueueDestroy(&lq, 0); return (L_QUEUE *)ERROR_PTR("ptr array not made", __func__, NULL); } lq->nalloc = nalloc; lq->nhead = lq->nelem = 0; return lq; } /*! * \brief lqueueDestroy() * * \param[in,out] plq will be set to null before returning * \param[in] freeflag TRUE to free each remaining struct in the array * \return void * *
 * Notes:
 *      (1) If freeflag is TRUE, frees each struct in the array.
 *      (2) If freeflag is FALSE but there are elements on the array,
 *          gives a warning and destroys the array.  This will
 *          cause a memory leak of all the items that were on the queue.
 *          So if the items require their own destroy function, they
 *          must be destroyed before the queue.  The same applies to the
 *          auxiliary stack, if it is used.
 *      (3) To destroy the L_Queue, we destroy the ptr array, then
 *          the lqueue, and then null the contents of the input ptr.
 * 
*/ void lqueueDestroy(L_QUEUE **plq, l_int32 freeflag) { void *item; L_QUEUE *lq; if (plq == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((lq = *plq) == NULL) return; if (freeflag) { while(lq->nelem > 0) { item = lqueueRemove(lq); LEPT_FREE(item); } } else if (lq->nelem > 0) { L_WARNING("memory leak of %d items in lqueue!\n", __func__, lq->nelem); } if (lq->array) LEPT_FREE(lq->array); if (lq->stack) lstackDestroy(&lq->stack, freeflag); LEPT_FREE(lq); *plq = NULL; } /*--------------------------------------------------------------------------* * Accessors * *--------------------------------------------------------------------------*/ /*! * \brief lqueueAdd() * * \param[in] lq lqueue * \param[in] item to be added to the tail of the queue * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The algorithm is as follows.  If the queue is populated
 *          to the end of the allocated array, shift all ptrs toward
 *          the beginning of the array, so that the head of the queue
 *          is at the beginning of the array.  Then, if the array is
 *          more than 0.75 full, realloc with double the array size.
 *          Finally, add the item to the tail of the queue.
 * 
*/ l_ok lqueueAdd(L_QUEUE *lq, void *item) { if (!lq) return ERROR_INT("lq not defined", __func__, 1); if (!item) return ERROR_INT("item not defined", __func__, 1); /* If filled to the end and the ptrs can be shifted to the left, * shift them. */ if ((lq->nhead + lq->nelem >= lq->nalloc) && (lq->nhead != 0)) { memmove(lq->array, lq->array + lq->nhead, sizeof(void *) * lq->nelem); lq->nhead = 0; } /* If necessary, expand the allocated array by a factor of 2 */ if (lq->nelem > 0.75 * lq->nalloc) { if (lqueueExtendArray(lq)) return ERROR_INT("extension failed", __func__, 1); } /* Now add the item */ lq->array[lq->nhead + lq->nelem] = (void *)item; lq->nelem++; return 0; } /*! * \brief lqueueExtendArray() * * \param[in] lq lqueue * \return 0 if OK, 1 on error */ static l_int32 lqueueExtendArray(L_QUEUE *lq) { if (!lq) return ERROR_INT("lq not defined", __func__, 1); if ((lq->array = (void **)reallocNew((void **)&lq->array, sizeof(void *) * lq->nalloc, 2 * sizeof(void *) * lq->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); lq->nalloc = 2 * lq->nalloc; return 0; } /*! * \brief lqueueRemove() * * \param[in] lq lqueue * \return ptr to item popped from the head of the queue, * or NULL if the queue is empty or on error * *
 * Notes:
 *      (1) If this is the last item on the queue, so that the queue
 *          becomes empty, nhead is reset to the beginning of the array.
 * 
*/ void * lqueueRemove(L_QUEUE *lq) { void *item; if (!lq) return (void *)ERROR_PTR("lq not defined", __func__, NULL); if (lq->nelem == 0) return NULL; item = lq->array[lq->nhead]; lq->array[lq->nhead] = NULL; if (lq->nelem == 1) lq->nhead = 0; /* reset head ptr */ else (lq->nhead)++; /* can't go off end of array because nelem > 1 */ lq->nelem--; return item; } /*! * \brief lqueueGetCount() * * \param[in] lq lqueue * \return count, or 0 on error */ l_int32 lqueueGetCount(L_QUEUE *lq) { if (!lq) return ERROR_INT("lq not defined", __func__, 0); return lq->nelem; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * \brief lqueuePrint() * * \param[in] fp file stream * \param[in] lq lqueue * \return 0 if OK; 1 on error */ l_ok lqueuePrint(FILE *fp, L_QUEUE *lq) { l_int32 i; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!lq) return ERROR_INT("lq not defined", __func__, 1); fprintf(fp, "\n L_Queue: nalloc = %d, nhead = %d, nelem = %d, array = %p\n", lq->nalloc, lq->nhead, lq->nelem, lq->array); for (i = lq->nhead; i < lq->nhead + lq->nelem; i++) fprintf(fp, "array[%d] = %p\n", i, lq->array[i]); return 0; } leptonica-1.86.0/src/queue.h000066400000000000000000000065531506303110300156510ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_QUEUE_H #define LEPTONICA_QUEUE_H /*! * \file queue.h * *
 *      Expandable pointer queue for arbitrary void* data.
 *
 *      The L_Queue is a fifo that implements a queue of void* pointers.
 *      It can be used to hold a queue of any type of struct.
 *
 *      Internally, it maintains two counters:
 *          nhead:  location of head (in ptrs) from the beginning
 *                  of the array.
 *          nelem:  number of ptr elements stored in the queue.
 *
 *      The element at the head of the queue, which is the next to
 *      be removed, is array[nhead].  The location at the tail of the
 *      queue to which the next element will be added is
 *      array[nhead + nelem].
 *
 *      As items are added to the queue, nelem increases.
 *      As items are removed, nhead increases and nelem decreases.
 *      Any time the tail reaches the end of the allocated array,
 *      all the pointers are shifted to the left, so that the head
 *      is at the beginning of the array.
 *      If the array becomes more than 3/4 full, it doubles in size.
 *
 *      The auxiliary stack can be used in a wrapper for re-using
 *      items popped from the queue.  It is not made by default.
 *
 *      For further implementation details, see queue.c.
 * 
*/ /*! Expandable pointer queue for arbitrary void* data */ struct L_Queue { l_int32 nalloc; /*!< size of allocated ptr array */ l_int32 nhead; /*!< location of head (in ptrs) from the */ /*!< beginning of the array */ l_int32 nelem; /*!< number of elements stored in the queue */ void **array; /*!< ptr array */ struct L_Stack *stack; /*!< auxiliary stack */ }; typedef struct L_Queue L_QUEUE; #endif /* LEPTONICA_QUEUE_H */ leptonica-1.86.0/src/rank.c000066400000000000000000000525671506303110300154610ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rank.c *
 *
 *      Rank filter (gray and rgb)
 *          PIX      *pixRankFilter()
 *          PIX      *pixRankFilterRGB()
 *          PIX      *pixRankFilterGray()
 *
 *      Median filter
 *          PIX      *pixMedianFilter()
 *
 *      Rank filter (accelerated with downscaling)
 *          PIX      *pixRankFilterWithScaling()
 *
 *  What is a brick rank filter?
 *
 *    A brick rank order filter evaluates, for every pixel in the image,
 *    a rectangular set of n = wf x hf pixels in its neighborhood (where the
 *    pixel in question is at the "center" of the rectangle and is
 *    included in the evaluation).  It determines the value of the
 *    neighboring pixel that is the r-th smallest in the set,
 *    where r is some integer between 1 and n.  The input rank parameter
 *    is a fraction between 0.0 and 1.0, where 0.0 represents the
 *    smallest value (r = 1) and 1.0 represents the largest value (r = n).
 *    A median filter is a rank filter where rank = 0.5.
 *
 *    It is important to note that grayscale erosion is equivalent
 *    to rank = 0.0, and grayscale dilation is equivalent to rank = 1.0.
 *    These are much easier to calculate than the general rank value,
 *    thanks to the van Herk/Gil-Werman algorithm:
 *       http://www.leptonica.com/grayscale-morphology.html
 *    so you should use pixErodeGray() and pixDilateGray() for
 *    rank 0.0 and 1.0, rsp.  See notes below in the function header.
 *
 *  How is a rank filter implemented efficiently on an image?
 *
 *    Sorting will not work.
 *
 *      * The best sort algorithms are O(n*logn), where n is the number
 *        of values to be sorted (the area of the filter).  For large
 *        filters this is an impractically large number.
 *
 *      * Selection of the rank value is O(n).  (To understand why it's not
 *        O(n*logn), see Numerical Recipes in C, 2nd edition, 1992,  p. 355ff).
 *        This also still far too much computation for large filters.
 *
 *      * Suppose we get clever.  We really only need to do an incremental
 *        selection or sorting, because, for example, moving the filter
 *        down by one pixel causes one filter width of pixels to be added
 *        and another to be removed.  Can we do this incrementally in
 *        an efficient way?  Unfortunately, no.  The sorted values will be
 *        in an array.  Even if the filter width is 1, we can expect to
 *        have to move O(n) pixels, because insertion and deletion can happen
 *        anywhere in the array.  By comparison, heapsort is excellent for
 *        incremental sorting, where the cost for insertion or deletion
 *        is O(logn), because the array itself doesn't need to
 *        be sorted into strictly increasing order.  However, heapsort
 *        only gives the max (or min) value, not the general rank value.
 *
 *    This leaves histograms.
 *
 *      * Represented as an array.  The problem with an array of 256
 *        bins is that, in general, a significant fraction of the
 *        entire histogram must be summed to find the rank value bin.
 *        Suppose the filter size is 5x5.  You spend most of your time
 *        adding zeroes.  Ouch!
 *
 *      * Represented as a linked list.  This would overcome the
 *        summing-over-empty-bin problem, but you lose random access
 *        for insertions and deletions.  No way.
 *
 *      * Two histogram solution.  Maintain two histograms with
 *        bin sizes of 1 and 16.  Proceed from coarse to fine.
 *        First locate the coarse bin for the given rank, of which
 *        there are only 16.  Then, in the 256 entry (fine) histogram,
 *        you need look at a maximum of 16 bins.  For each output
 *        pixel, the average number of bins summed over, both in the
 *        coarse and fine histograms, is thus 16.
 *
 *  If someone has a better method, please let me know!
 *
 *  The rank filtering operation is relatively expensive, compared to most
 *  of the other imaging operations.  The speed is only weakly dependent
 *  on the size of the rank filter.  On standard hardware, it runs at
 *  about 10 Mpix/sec for a 50 x 50 filter, and 25 Mpix/sec for
 *  a 5 x 5 filter.   For applications where the rank filter can be
 *  performed on a downscaled image, significant speedup can be
 *  achieved because the time goes as the square of the scaling factor.
 *  We provide an interface that handles the details, and only
 *  requires the amount of downscaling to be input.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*----------------------------------------------------------------------* * Rank order filter * *----------------------------------------------------------------------*/ /*! * \brief pixRankFilter() * * \param[in] pixs 8 or 32 bpp; no colormap * \param[in] wf, hf width and height of filter; each is >= 1 * \param[in] rank in [0.0 ... 1.0] * \return pixd of rank values, or NULL on error * *
 * Notes:
 *      (1) This defines, for each pixel in pixs, a neighborhood of
 *          pixels given by a rectangle "centered" on the pixel.
 *          This set of wf*hf pixels has a distribution of values.
 *          For each component, if the values are sorted in increasing
 *          order, we choose the component such that rank*(wf*hf-1)
 *          pixels have a lower or equal value and
 *          (1-rank)*(wf*hf-1) pixels have an equal or greater value.
 *      (2) See notes in pixRankFilterGray() for further details.
 * 
*/ PIX * pixRankFilter(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", __func__, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); if (d == 8) return pixRankFilterGray(pixs, wf, hf, rank); else /* d == 32 */ return pixRankFilterRGB(pixs, wf, hf, rank); } /*! * \brief pixRankFilterRGB() * * \param[in] pixs 32 bpp * \param[in] wf, hf width and height of filter; each is >= 1 * \param[in] rank in [0.0 ... 1.0] * \return pixd of rank values, or NULL on error * *
 * Notes:
 *      (1) This defines, for each pixel in pixs, a neighborhood of
 *          pixels given by a rectangle "centered" on the pixel.
 *          This set of wf*hf pixels has a distribution of values.
 *          For each component, if the values are sorted in increasing
 *          order, we choose the component such that rank*(wf*hf-1)
 *          pixels have a lower or equal value and
 *          (1-rank)*(wf*hf-1) pixels have an equal or greater value.
 *      (2) Apply gray rank filtering to each component independently.
 *      (3) See notes in pixRankFilterGray() for further details.
 * 
*/ PIX * pixRankFilterRGB(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { PIX *pixr, *pixg, *pixb, *pixrf, *pixgf, *pixbf, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", __func__, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixrf = pixRankFilterGray(pixr, wf, hf, rank); pixgf = pixRankFilterGray(pixg, wf, hf, rank); pixbf = pixRankFilterGray(pixb, wf, hf, rank); pixd = pixCreateRGBImage(pixrf, pixgf, pixbf); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixrf); pixDestroy(&pixgf); pixDestroy(&pixbf); return pixd; } /*! * \brief pixRankFilterGray() * * \param[in] pixs 8 bpp; no colormap * \param[in] wf, hf width and height of filter; each is >= 1 * \param[in] rank in [0.0 ... 1.0] * \return pixd of rank values, or NULL on error * *
 * Notes:
 *      (1) This defines, for each pixel in pixs, a neighborhood of
 *          pixels given by a rectangle "centered" on the pixel.
 *          This set of wf*hf pixels has a distribution of values,
 *          and if they are sorted in increasing order, we choose
 *          the pixel such that rank*(wf*hf-1) pixels have a lower
 *          or equal value and (1-rank)*(wf*hf-1) pixels have an equal
 *          or greater value.
 *      (2) By this definition, the rank = 0.0 pixel has the lowest
 *          value, and the rank = 1.0 pixel has the highest value.
 *      (3) We add mirrored boundary pixels to avoid boundary effects,
 *          and put the filter center at (0, 0).
 *      (4) This dispatches to grayscale erosion or dilation if the
 *          filter dimensions are odd and the rank is 0.0 or 1.0, rsp.
 *      (5) Returns a copy if both wf and hf are 1.
 *      (6) Uses row-major or column-major incremental updates to the
 *          histograms depending on whether hf > wf or hv <= wf, rsp.
 * 
*/ PIX * pixRankFilterGray(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { l_int32 w, h, d, i, j, k, m, n, rankloc, wplt, wpld, val, sum; l_int32 *histo, *histo16; l_uint32 *datat, *linet, *datad, *lined; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", __func__, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); /* For rank = 0.0, this is a grayscale erosion, and for rank = 1.0, * a dilation. Grayscale morphology operations are implemented * for filters of odd dimension, so we dispatch to grayscale * morphology if both wf and hf are odd. Otherwise, we * slightly adjust the rank (to get the correct behavior) and * use the slower rank filter here. */ if (wf % 2 && hf % 2) { if (rank == 0.0) return pixErodeGray(pixs, wf, hf); else if (rank == 1.0) return pixDilateGray(pixs, wf, hf); } if (rank == 0.0) rank = 0.0001f; if (rank == 1.0) rank = 0.9999f; /* Add wf/2 to each side, and hf/2 to top and bottom of the * image, mirroring for accuracy and to avoid special-casing * the boundary. */ if ((pixt = pixAddMirroredBorder(pixs, wf / 2, wf / 2, hf / 2, hf / 2)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); /* Set up the two histogram arrays. */ histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); histo16 = (l_int32 *)LEPT_CALLOC(16, sizeof(l_int32)); rankloc = (l_int32)(rank * wf * hf); /* Place the filter center at (0, 0). This is just a * convenient location, because it allows us to perform * the rank filter over x:(0 ... w - 1) and y:(0 ... h - 1). */ pixd = pixCreateTemplate(pixs); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If hf > wf, it's more efficient to use row-major scanning. * Otherwise, traverse the image in use column-major order. */ if (hf > wf) { for (j = 0; j < w; j++) { /* row-major */ /* Start each column with clean histogram arrays. */ for (n = 0; n < 256; n++) histo[n] = 0; for (n = 0; n < 16; n++) histo16[n] = 0; for (i = 0; i < h; i++) { /* fast scan on columns */ /* Update the histos for the new location */ lined = datad + i * wpld; if (i == 0) { /* do full histo */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < wf; m++) { val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } } else { /* incremental update */ linet = datat + (i - 1) * wplt; for (m = 0; m < wf; m++) { /* remove top line */ val = GET_DATA_BYTE(linet, j + m); histo[val]--; histo16[val >> 4]--; } linet = datat + (i + hf - 1) * wplt; for (m = 0; m < wf; m++) { /* add bottom line */ val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } /* Find the rank value */ sum = 0; for (n = 0; n < 16; n++) { /* search over coarse histo */ sum += histo16[n]; if (sum > rankloc) { sum -= histo16[n]; break; } } if (n == 16) { /* avoid accessing out of bounds */ L_WARNING("n = 16; reducing\n", __func__); n = 15; sum -= histo16[n]; } k = 16 * n; /* starting value in fine histo */ for (m = 0; m < 16; m++) { sum += histo[k]; if (sum > rankloc) { SET_DATA_BYTE(lined, j, k); break; } k++; } } } } else { /* wf >= hf */ for (i = 0; i < h; i++) { /* column-major */ /* Start each row with clean histogram arrays. */ for (n = 0; n < 256; n++) histo[n] = 0; for (n = 0; n < 16; n++) histo16[n] = 0; lined = datad + i * wpld; for (j = 0; j < w; j++) { /* fast scan on rows */ /* Update the histos for the new location */ if (j == 0) { /* do full histo */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < wf; m++) { val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } } else { /* incremental update at left and right sides */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; val = GET_DATA_BYTE(linet, j - 1); histo[val]--; histo16[val >> 4]--; val = GET_DATA_BYTE(linet, j + wf - 1); histo[val]++; histo16[val >> 4]++; } } /* Find the rank value */ sum = 0; for (n = 0; n < 16; n++) { /* search over coarse histo */ sum += histo16[n]; if (sum > rankloc) { sum -= histo16[n]; break; } } if (n == 16) { /* avoid accessing out of bounds */ L_WARNING("n = 16; reducing\n", __func__); n = 15; sum -= histo16[n]; } k = 16 * n; /* starting value in fine histo */ for (m = 0; m < 16; m++) { sum += histo[k]; if (sum > rankloc) { SET_DATA_BYTE(lined, j, k); break; } k++; } } } } pixDestroy(&pixt); LEPT_FREE(histo); LEPT_FREE(histo16); return pixd; } /*----------------------------------------------------------------------* * Median filter * *----------------------------------------------------------------------*/ /*! * \brief pixMedianFilter() * * \param[in] pixs 8 or 32 bpp; no colormap * \param[in] wf, hf width and height of filter; each is >= 1 * \return pixd of median values, or NULL on error */ PIX * pixMedianFilter(PIX *pixs, l_int32 wf, l_int32 hf) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); return pixRankFilter(pixs, wf, hf, 0.5); } /*----------------------------------------------------------------------* * Rank filter (accelerated with downscaling) * *----------------------------------------------------------------------*/ /*! * \brief pixRankFilterWithScaling() * * \param[in] pixs 8 or 32 bpp; no colormap * \param[in] wf, hf width and height of filter; each is >= 1 * \param[in] rank in [0.0 ... 1.0] * \param[in] scalefactor scale factor; must be >= 0.2 and <= 0.7 * \return pixd of rank values, or NULL on error * *
 * Notes:
 *      (1) This is a convenience function that downscales, does
 *          the rank filtering, and upscales.  Because the down-
 *          and up-scaling functions are very fast compared to
 *          rank filtering, the time it takes is reduced from that
 *          for the simple rank filtering operation by approximately
 *          the square of the scaling factor.
 * 
*/ PIX * pixRankFilterWithScaling(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor) { l_int32 w, h, d, wfs, hfs; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", __func__, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", __func__, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", __func__, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); if (scalefactor < 0.2 || scalefactor > 0.7) { L_ERROR("invalid scale factor; no scaling used\n", __func__); return pixRankFilter(pixs, wf, hf, rank); } pix1 = pixScaleAreaMap(pixs, scalefactor, scalefactor); wfs = L_MAX(1, (l_int32)(scalefactor * wf + 0.5)); hfs = L_MAX(1, (l_int32)(scalefactor * hf + 0.5)); pix2 = pixRankFilter(pix1, wfs, hfs, rank); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixScaleToSize(pix2, w, h); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } leptonica-1.86.0/src/rbtree.c000066400000000000000000000614301506303110300157760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * Modified from the excellent code here: * http://en.literateprograms.org/Red-black_tree_(C)?oldid=19567 * which has been placed in the public domain under the Creative Commons * CC0 1.0 waiver (http://creativecommons.org/publicdomain/zero/1.0/). */ /*! * \file rbtree.c *
 *
 *  Basic functions for using red-black trees.  These are "nearly" balanced
 *  sorted trees with ordering by key that allows insertion, lookup and
 *  deletion of key/value pairs in log(n) time.
 *
 *  We use red-black trees to implement our version of:
 *    * a map: a function that maps keys to values (e.g., int64 --> int64).
 *    * a set: a collection that is sorted by unique keys (without
 *      associated values)
 *
 *  There are 5 invariant properties of RB trees:
 *  (1) Each node is either red or black.
 *  (2) The root node is black.
 *  (3) All leaves are black and contain no data (null).
 *  (4) Every red node has two children and both are black.  This is
 *      equivalent to requiring the parent of every red node to be black.
 *  (5) All paths from any given node to its leaf nodes contain the
 *      same number of black nodes.
 *
 *  Interface to red-black tree
 *           L_RBTREE       *l_rbtreeCreate()
 *           RB_TYPE        *l_rbtreeLookup()
 *           void            l_rbtreeInsert()
 *           void            l_rbtreeDelete()
 *           void            l_rbtreeDestroy()
 *           L_RBTREE_NODE  *l_rbtreeGetFirst()
 *           L_RBTREE_NODE  *l_rbtreeGetNext()
 *           L_RBTREE_NODE  *l_rbtreeGetLast()
 *           L_RBTREE_NODE  *l_rbtreeGetPrev()
 *           l_int32         l_rbtreeGetCount()
 *           void            l_rbtreePrint()
 *
 *  General comparison function
 *           static l_int32  compareKeys()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* The node color enum is only needed in the rbtree implementation */ enum { L_RED_NODE = 1, L_BLACK_NODE = 2 }; /* This makes it simpler to read the code */ typedef L_RBTREE_NODE node; /* Lots of static helper functions */ static void destroy_helper(node *n); static void count_helper(node *n, l_int32 *pcount); static void print_tree_helper(FILE *fp, node *n, l_int32 keytype, l_int32 indent); static l_int32 compareKeys(l_int32 keytype, RB_TYPE left, RB_TYPE right); static node *grandparent(node *n); static node *sibling(node *n); static node *uncle(node *n); static l_int32 node_color(node *n); static node *new_node(RB_TYPE key, RB_TYPE value, l_int32 node_color, node *left, node *right); static node *lookup_node(L_RBTREE *t, RB_TYPE key); static void rotate_left(L_RBTREE *t, node *n); static void rotate_right(L_RBTREE *t, node *n); static void replace_node(L_RBTREE *t, node *oldn, node *newn); static void insert_case1(L_RBTREE *t, node *n); static void insert_case2(L_RBTREE *t, node *n); static void insert_case3(L_RBTREE *t, node *n); static void insert_case4(L_RBTREE *t, node *n); static void insert_case5(L_RBTREE *t, node *n); static node *maximum_node(node *root); static void delete_case1(L_RBTREE *t, node *n); static void delete_case2(L_RBTREE *t, node *n); static void delete_case3(L_RBTREE *t, node *n); static void delete_case4(L_RBTREE *t, node *n); static void delete_case5(L_RBTREE *t, node *n); static void delete_case6(L_RBTREE *t, node *n); static void verify_properties(L_RBTREE *t); #ifndef NO_CONSOLE_IO #define VERIFY_RBTREE 0 /* only for debugging */ #endif /* ~NO_CONSOLE_IO */ /* ------------------------------------------------------------- * * Interface to Red-black Tree * * ------------------------------------------------------------- */ /*! * \brief l_rbtreeCreate() * * \param[in] keytype defined by an enum for an RB_TYPE union * \return rbtree container with empty ptr to the root */ L_RBTREE * l_rbtreeCreate(l_int32 keytype) { L_RBTREE *t; if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && keytype != L_FLOAT_TYPE && keytype) return (L_RBTREE *)ERROR_PTR("invalid keytype", __func__, NULL); t = (L_RBTREE *)LEPT_CALLOC(1, sizeof(L_RBTREE)); t->keytype = keytype; verify_properties(t); return t; } /*! * \brief l_rbtreeLookup() * * \param[in] t rbtree, including root node * \param[in] key find a node with this key * \return &value a pointer to a union, if the node exists; else NULL */ RB_TYPE * l_rbtreeLookup(L_RBTREE *t, RB_TYPE key) { node *n; if (!t) return (RB_TYPE *)ERROR_PTR("tree is null\n", __func__, NULL); n = lookup_node(t, key); return n == NULL ? NULL : &n->value; } /*! * \brief l_rbtreeInsert() * * \param[in] t rbtree, including root node * \param[in] key insert a node with this key, if the key does not * already exist in the tree * \param[in] value typically an int, used for an index * \return void * *
 * Notes:
 *      (1) If a node with the key already exists, this just updates the value.
 * 
*/ void l_rbtreeInsert(L_RBTREE *t, RB_TYPE key, RB_TYPE value) { node *n, *inserted_node; if (!t) { L_ERROR("tree is null\n", __func__); return; } inserted_node = new_node(key, value, L_RED_NODE, NULL, NULL); if (t->root == NULL) { t->root = inserted_node; } else { n = t->root; while (1) { int comp_result = compareKeys(t->keytype, key, n->key); if (comp_result == 0) { n->value = value; LEPT_FREE(inserted_node); return; } else if (comp_result < 0) { if (n->left == NULL) { n->left = inserted_node; break; } else { n = n->left; } } else { /* comp_result > 0 */ if (n->right == NULL) { n->right = inserted_node; break; } else { n = n->right; } } } inserted_node->parent = n; } insert_case1(t, inserted_node); verify_properties(t); } /*! * \brief l_rbtreeDelete() * * \param[in] t rbtree, including root node * \param[in] key delete the node with this key * \return void */ void l_rbtreeDelete(L_RBTREE *t, RB_TYPE key) { node *n, *child; if (!t) { L_ERROR("tree is null\n", __func__); return; } n = lookup_node(t, key); if (n == NULL) return; /* Key not found, do nothing */ if (n->left != NULL && n->right != NULL) { /* Copy key/value from predecessor and then delete it instead */ node *pred = maximum_node(n->left); n->key = pred->key; n->value = pred->value; n = pred; } /* n->left == NULL || n->right == NULL */ child = n->right == NULL ? n->left : n->right; if (node_color(n) == L_BLACK_NODE) { n->color = node_color(child); delete_case1(t, n); } replace_node(t, n, child); if (n->parent == NULL && child != NULL) /* root should be black */ child->color = L_BLACK_NODE; LEPT_FREE(n); verify_properties(t); } /*! * \brief l_rbtreeDestroy() * * \param[in] pt pointer to tree; will be wet to null before returning * \return void * *
 * Notes:
 *      (1) Destroys the tree and nulls the input tree ptr.
 * 
*/ void l_rbtreeDestroy(L_RBTREE **pt) { node *n; if (!pt) return; if (*pt == NULL) return; n = (*pt)->root; destroy_helper(n); LEPT_FREE(*pt); *pt = NULL; } /* postorder DFS */ static void destroy_helper(node *n) { if (!n) return; destroy_helper(n->left); destroy_helper(n->right); LEPT_FREE(n); } /*! * \brief l_rbtreeGetFirst() * * \param[in] t rbtree, including root node * \return first node, or NULL on error or if the tree is empty * *
 * Notes:
 *      (1) This is the first node in an in-order traversal.
 * 
*/ L_RBTREE_NODE * l_rbtreeGetFirst(L_RBTREE *t) { node *n; if (!t) return (L_RBTREE_NODE *)ERROR_PTR("tree is null", __func__, NULL); if (t->root == NULL) { L_INFO("tree is empty\n", __func__); return NULL; } /* Just go down the left side as far as possible */ n = t->root; while (n && n->left) n = n->left; return n; } /*! * \brief l_rbtreeGetNext() * * \param[in] n current node * \return next node, or NULL if it's the last node * *
 * Notes:
 *      (1) This finds the next node, in an in-order traversal, from
 *          the current node.
 *      (2) It is useful as an iterator for a map.
 *      (3) Call l_rbtreeGetFirst() to get the first node.
 * 
*/ L_RBTREE_NODE * l_rbtreeGetNext(L_RBTREE_NODE *n) { if (!n) return (L_RBTREE_NODE *)ERROR_PTR("n not defined", __func__, NULL); /* If there is a right child, go to it, and then go left all the * way to the end. Otherwise go up to the parent; continue upward * as long as you're on the right branch, but stop at the parent * when you hit it from the left branch. */ if (n->right) { n = n->right; while (n->left) n = n->left; return n; } else { while (n->parent && n->parent->right == n) n = n->parent; return n->parent; } } /*! * \brief l_rbtreeGetLast() * * \param[in] t rbtree, including root node * \return last node, or NULL on error or if the tree is empty * *
 * Notes:
 *      (1) This is the last node in an in-order traversal.
 * 
*/ L_RBTREE_NODE * l_rbtreeGetLast(L_RBTREE *t) { node *n; if (!t) return (L_RBTREE_NODE *)ERROR_PTR("tree is null", __func__, NULL); if (t->root == NULL) { L_INFO("tree is empty\n", __func__); return NULL; } /* Just go down the right side as far as possible */ n = t->root; while (n && n->right) n = n->right; return n; } /*! * \brief l_rbtreeGetPrev() * * \param[in] n current node * \return next node, or NULL if it's the first node * *
 * Notes:
 *      (1) This finds the previous node, in an in-order traversal, from
 *          the current node.
 *      (2) It is useful as an iterator for a map.
 *      (3) Call l_rbtreeGetLast() to get the last node.
 * 
*/ L_RBTREE_NODE * l_rbtreeGetPrev(L_RBTREE_NODE *n) { if (!n) return (L_RBTREE_NODE *)ERROR_PTR("n not defined", __func__, NULL); /* If there is a left child, go to it, and then go right all the * way to the end. Otherwise go up to the parent; continue upward * as long as you're on the left branch, but stop at the parent * when you hit it from the right branch. */ if (n->left) { n = n->left; while (n->right) n = n->right; return n; } else { while (n->parent && n->parent->left == n) n = n->parent; return n->parent; } } /*! * \brief l_rbtreeGetCount() * * \param[in] t rbtree * \return count the number of nodes in the tree, or 0 on error */ l_int32 l_rbtreeGetCount(L_RBTREE *t) { l_int32 count = 0; node *n; if (!t) return 0; n = t->root; count_helper(n, &count); return count; } /* preorder DFS */ static void count_helper(node *n, l_int32 *pcount) { if (n) (*pcount)++; else return; count_helper(n->left, pcount); count_helper(n->right, pcount); } /*! * \brief l_rbtreePrint() * * \param[in] fp file stream * \param[in] t rbtree * \return void */ void l_rbtreePrint(FILE *fp, L_RBTREE *t) { if (!fp) { L_ERROR("stream not defined\n", __func__); return; } if (!t) { L_ERROR("tree not defined\n", __func__); return; } print_tree_helper(fp, t->root, t->keytype, 0); fprintf(fp, "\n"); } #define INDENT_STEP 4 static void print_tree_helper(FILE *fp, node *n, l_int32 keytype, l_int32 indent) { l_int32 i; if (n == NULL) { fprintf(fp, ""); return; } if (n->right != NULL) { print_tree_helper(fp, n->right, keytype, indent + INDENT_STEP); } for (i = 0; i < indent; i++) fprintf(fp, " "); if (n->color == L_BLACK_NODE) { if (keytype == L_INT_TYPE) fprintf(fp, "%lld\n", n->key.itype); else if (keytype == L_UINT_TYPE) fprintf(fp, "%llx\n", n->key.utype); else if (keytype == L_FLOAT_TYPE) fprintf(fp, "%f\n", n->key.ftype); } else { if (keytype == L_INT_TYPE) fprintf(fp, "<%lld>\n", n->key.itype); else if (keytype == L_UINT_TYPE) fprintf(fp, "<%llx>\n", n->key.utype); else if (keytype == L_FLOAT_TYPE) fprintf(fp, "<%f>\n", n->key.ftype); } if (n->left != NULL) { print_tree_helper(fp, n->left, keytype, indent + INDENT_STEP); } } /* ------------------------------------------------------------- * * Static key comparison function * * ------------------------------------------------------------- */ static l_int32 compareKeys(l_int32 keytype, RB_TYPE left, RB_TYPE right) { if (keytype == L_INT_TYPE) { if (left.itype < right.itype) return -1; else if (left.itype > right.itype) return 1; else { /* equality */ return 0; } } else if (keytype == L_UINT_TYPE) { if (left.utype < right.utype) return -1; else if (left.utype > right.utype) return 1; else { /* equality */ return 0; } } else if (keytype == L_FLOAT_TYPE) { if (left.ftype < right.ftype) return -1; else if (left.ftype > right.ftype) return 1; else { /* equality */ return 0; } } else { L_ERROR("unknown keytype %d\n", __func__, keytype); return 0; } } /* ------------------------------------------------------------- * * Static red-black tree helpers * * ------------------------------------------------------------- */ static node *grandparent(node *n) { if (!n || !n->parent || !n->parent->parent) { L_ERROR("root and child of root have no grandparent\n", "grandparent"); return NULL; } return n->parent->parent; } static node *sibling(node *n) { if (!n || !n->parent) { L_ERROR("root has no sibling\n", "sibling"); return NULL; } if (n == n->parent->left) return n->parent->right; else return n->parent->left; } static node *uncle(node *n) { if (!n || !n->parent || !n->parent->parent) { L_ERROR("root and child of root have no uncle\n", "uncle"); return NULL; } return sibling(n->parent); } static l_int32 node_color(node *n) { return n == NULL ? L_BLACK_NODE : n->color; } static node *new_node(RB_TYPE key, RB_TYPE value, l_int32 node_color, node *left, node *right) { node *result = (node *)LEPT_CALLOC(1, sizeof(node)); result->key = key; result->value = value; result->color = node_color; result->left = left; result->right = right; if (left != NULL) left->parent = result; if (right != NULL) right->parent = result; result->parent = NULL; return result; } static node *lookup_node(L_RBTREE *t, RB_TYPE key) { node *n = t->root; while (n != NULL) { int comp_result = compareKeys(t->keytype, key, n->key); if (comp_result == 0) { return n; } else if (comp_result < 0) { n = n->left; } else { /* comp_result > 0 */ n = n->right; } } return n; } static void rotate_left(L_RBTREE *t, node *n) { node *r = n->right; replace_node(t, n, r); n->right = r->left; if (r->left != NULL) { r->left->parent = n; } r->left = n; n->parent = r; } static void rotate_right(L_RBTREE *t, node *n) { node *L = n->left; replace_node(t, n, L); n->left = L->right; if (L->right != NULL) { L->right->parent = n; } L->right = n; n->parent = L; } static void replace_node(L_RBTREE *t, node *oldn, node *newn) { if (oldn->parent == NULL) { t->root = newn; } else { if (oldn == oldn->parent->left) oldn->parent->left = newn; else oldn->parent->right = newn; } if (newn != NULL) { newn->parent = oldn->parent; } } static void insert_case1(L_RBTREE *t, node *n) { if (n->parent == NULL) n->color = L_BLACK_NODE; else insert_case2(t, n); } static void insert_case2(L_RBTREE *t, node *n) { if (node_color(n->parent) == L_BLACK_NODE) return; /* Tree is still valid */ else insert_case3(t, n); } static void insert_case3(L_RBTREE *t, node *n) { if (node_color(uncle(n)) == L_RED_NODE) { n->parent->color = L_BLACK_NODE; uncle(n)->color = L_BLACK_NODE; grandparent(n)->color = L_RED_NODE; insert_case1(t, grandparent(n)); } else { insert_case4(t, n); } } static void insert_case4(L_RBTREE *t, node *n) { if (n == n->parent->right && n->parent == grandparent(n)->left) { rotate_left(t, n->parent); n = n->left; } else if (n == n->parent->left && n->parent == grandparent(n)->right) { rotate_right(t, n->parent); n = n->right; } insert_case5(t, n); } static void insert_case5(L_RBTREE *t, node *n) { n->parent->color = L_BLACK_NODE; grandparent(n)->color = L_RED_NODE; if (n == n->parent->left && n->parent == grandparent(n)->left) { rotate_right(t, grandparent(n)); } else if (n == n->parent->right && n->parent == grandparent(n)->right) { rotate_left(t, grandparent(n)); } else { L_ERROR("identity confusion\n", "insert_case5"); } } static node *maximum_node(node *n) { if (!n) { L_ERROR("n not defined\n", "maximum_node"); return NULL; } while (n->right != NULL) { n = n->right; } return n; } static void delete_case1(L_RBTREE *t, node *n) { if (n->parent == NULL) return; else delete_case2(t, n); } static void delete_case2(L_RBTREE *t, node *n) { if (node_color(sibling(n)) == L_RED_NODE) { n->parent->color = L_RED_NODE; sibling(n)->color = L_BLACK_NODE; if (n == n->parent->left) rotate_left(t, n->parent); else rotate_right(t, n->parent); } delete_case3(t, n); } static void delete_case3(L_RBTREE *t, node *n) { if (node_color(n->parent) == L_BLACK_NODE && node_color(sibling(n)) == L_BLACK_NODE && node_color(sibling(n)->left) == L_BLACK_NODE && node_color(sibling(n)->right) == L_BLACK_NODE) { sibling(n)->color = L_RED_NODE; delete_case1(t, n->parent); } else { delete_case4(t, n); } } static void delete_case4(L_RBTREE *t, node *n) { if (node_color(n->parent) == L_RED_NODE && node_color(sibling(n)) == L_BLACK_NODE && node_color(sibling(n)->left) == L_BLACK_NODE && node_color(sibling(n)->right) == L_BLACK_NODE) { sibling(n)->color = L_RED_NODE; n->parent->color = L_BLACK_NODE; } else { delete_case5(t, n); } } static void delete_case5(L_RBTREE *t, node *n) { if (n == n->parent->left && node_color(sibling(n)) == L_BLACK_NODE && node_color(sibling(n)->left) == L_RED_NODE && node_color(sibling(n)->right) == L_BLACK_NODE) { sibling(n)->color = L_RED_NODE; sibling(n)->left->color = L_BLACK_NODE; rotate_right(t, sibling(n)); } else if (n == n->parent->right && node_color(sibling(n)) == L_BLACK_NODE && node_color(sibling(n)->right) == L_RED_NODE && node_color(sibling(n)->left) == L_BLACK_NODE) { sibling(n)->color = L_RED_NODE; sibling(n)->right->color = L_BLACK_NODE; rotate_left(t, sibling(n)); } delete_case6(t, n); } static void delete_case6(L_RBTREE *t, node *n) { sibling(n)->color = node_color(n->parent); n->parent->color = L_BLACK_NODE; if (n == n->parent->left) { if (node_color(sibling(n)->right) != L_RED_NODE) { L_ERROR("right sibling is not RED", "delete_case6"); return; } sibling(n)->right->color = L_BLACK_NODE; rotate_left(t, n->parent); } else { if (node_color(sibling(n)->left) != L_RED_NODE) { L_ERROR("left sibling is not RED", "delete_case6"); return; } sibling(n)->left->color = L_BLACK_NODE; rotate_right(t, n->parent); } } /* ------------------------------------------------------------- * * Debugging: verify if tree is valid * * ------------------------------------------------------------- */ #if VERIFY_RBTREE static void verify_property_1(node *root); static void verify_property_2(node *root); static void verify_property_4(node *root); static void verify_property_5(node *root); static void verify_property_5_helper(node *n, int black_count, int* black_count_path); #endif static void verify_properties(L_RBTREE *t) { #if VERIFY_RBTREE verify_property_1(t->root); verify_property_2(t->root); /* Property 3 is implicit */ verify_property_4(t->root); verify_property_5(t->root); #endif } #if VERIFY_RBTREE static void verify_property_1(node *n) { if (node_color(n) != L_RED_NODE && node_color(n) != L_BLACK_NODE) { L_ERROR("color neither RED nor BLACK\n", "verify_property_1"); return; } if (n == NULL) return; verify_property_1(n->left); verify_property_1(n->right); } static void verify_property_2(node *root) { if (node_color(root) != L_BLACK_NODE) L_ERROR("root is not black!\n", "verify_property_2"); } static void verify_property_4(node *n) { if (node_color(n) == L_RED_NODE) { if (node_color(n->left) != L_BLACK_NODE || node_color(n->right) != L_BLACK_NODE || node_color(n->parent) != L_BLACK_NODE) { L_ERROR("children & parent not all BLACK", "verify_property_4"); return; } } if (n == NULL) return; verify_property_4(n->left); verify_property_4(n->right); } static void verify_property_5(node *root) { int black_count_path = -1; verify_property_5_helper(root, 0, &black_count_path); } static void verify_property_5_helper(node *n, int black_count, int* path_black_count) { if (node_color(n) == L_BLACK_NODE) { black_count++; } if (n == NULL) { if (*path_black_count == -1) { *path_black_count = black_count; } else if (*path_black_count != black_count) { L_ERROR("incorrect black count", "verify_property_5_helper"); } return; } verify_property_5_helper(n->left, black_count, path_black_count); verify_property_5_helper(n->right, black_count, path_black_count); } #endif leptonica-1.86.0/src/rbtree.h000066400000000000000000000071601506303110300160030ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * Modified from the excellent code here: * http://en.literateprograms.org/Red-black_tree_(C)?oldid=19567 * which has been placed in the public domain under the Creative Commons * CC0 1.0 waiver (http://creativecommons.org/publicdomain/zero/1.0/). * * When the key is generated from a hash (e.g., string --> uint64), * there is always the possibility of having collisions, but to make * the collision probability very low requires using a large hash. * For that reason, the key types are 64 bit quantities, which will result * in a negligible probabililty of collisions for millions of hashed values. * Using 8 byte keys instead of 4 byte keys requires a little more * storage, but the simplification in being able to ignore collisions * with the red-black trees for most applications is worth it. */ #ifndef LEPTONICA_RBTREE_H #define LEPTONICA_RBTREE_H /*! The three valid key types for red-black trees, maps and sets. */ /*! RBTree Key Type */ enum { L_INT_TYPE = 1, L_UINT_TYPE = 2, L_FLOAT_TYPE = 3 }; /*! * Storage for keys and values for red-black trees, maps and sets. *
     * Note:
     *   (1) Keys and values of the valid key types are all 64-bit
     *   (2) (void *) can be used for values but not for keys.
     * 
*/ union Rb_Type { l_int64 itype; l_uint64 utype; l_float64 ftype; void *ptype; }; typedef union Rb_Type RB_TYPE; struct L_Rbtree { struct L_Rbtree_Node *root; l_int32 keytype; }; typedef struct L_Rbtree L_RBTREE; typedef struct L_Rbtree L_AMAP; /* hide underlying implementation for map */ typedef struct L_Rbtree L_ASET; /* hide underlying implementation for set */ struct L_Rbtree_Node { union Rb_Type key; union Rb_Type value; struct L_Rbtree_Node *left; struct L_Rbtree_Node *right; struct L_Rbtree_Node *parent; l_int32 color; }; typedef struct L_Rbtree_Node L_RBTREE_NODE; typedef struct L_Rbtree_Node L_AMAP_NODE; /* hide tree implementation */ typedef struct L_Rbtree_Node L_ASET_NODE; /* hide tree implementation */ #endif /* LEPTONICA_RBTREE_H */ leptonica-1.86.0/src/readbarcode.c000066400000000000000000001521341506303110300167500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file readbarcode.c *
 *
 *      Basic operations to locate and identify the line widths
 *      in 1D barcodes.
 *
 *      Top level
 *          SARRAY          *pixProcessBarcodes()
 *
 *      Next levels
 *          PIXA            *pixExtractBarcodes()
 *          SARRAY          *pixReadBarcodes()
 *          l_int32          pixReadBarcodeWidths()
 *
 *      Location
 *          BOXA            *pixLocateBarcodes()
 *          static PIX      *pixGenerateBarcodeMask()
 *
 *      Extraction and deskew
 *          PIXA            *pixDeskewBarcodes()
 *
 *      Process to get line widths
 *          NUMA            *pixExtractBarcodeWidths1()
 *          NUMA            *pixExtractBarcodeWidths2()
 *          NUMA            *pixExtractBarcodeCrossings()
 *
 *      Average adjacent rasters
 *          static NUMA     *pixAverageRasterScans()
 *
 *      Signal processing for barcode widths
 *          NUMA            *numaQuantizeCrossingsByWidth()
 *          static l_int32   numaGetCrossingDistances()
 *          static NUMA     *numaLocatePeakRanges()
 *          static NUMA     *numaGetPeakCentroids()
 *          static NUMA     *numaGetPeakWidthLUT()
 *          NUMA            *numaQuantizeCrossingsByWindow()
 *          static l_int32   numaEvalBestWidthAndShift()
 *          static l_int32   numaEvalSyncError()
 *
 *
 *  NOTE CAREFULLY: This is "early beta" code.  It has not been tuned
 *  to work robustly on a large database of barcode images.  I'm putting
 *  it out so that people can play with it, find out how it breaks, and
 *  contribute decoders for other barcode formats.  Both the functional
 *  interfaces and ABI will almost certainly change in the coming
 *  few months.  The actual decoder, in bardecode.c, at present only
 *  works on the following codes: Code I2of5, Code 2of5, Code 39, Code 93
 *  Codabar and UPCA.  To add another barcode format, it is necessary
 *  to make changes in readbarcode.h and bardecode.c.
 *  The program prog/barcodetest shows how to run from the top level
 *  (image --> decoded data).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "readbarcode.h" /* Parameters for pixGenerateBarcodeMask() */ static const l_int32 MAX_SPACE_WIDTH = 19; /* was 15 */ static const l_int32 MAX_NOISE_WIDTH = 50; /* smaller than barcode width */ static const l_int32 MAX_NOISE_HEIGHT = 30; /* smaller than barcode height */ /* Minimum barcode image size */ static const l_int32 MIN_BC_WIDTH = 50; static const l_int32 MIN_BC_HEIGHT = 50; /* Static functions */ static PIX *pixGenerateBarcodeMask(PIX *pixs, l_int32 maxspace, l_int32 nwidth, l_int32 nheight); static NUMA *pixAverageRasterScans(PIX *pixs, l_int32 nscans); static l_int32 numaGetCrossingDistances(NUMA *nas, NUMA **pnaedist, NUMA **pnaodist, l_float32 *pmindist, l_float32 *pmaxdist); static NUMA *numaLocatePeakRanges(NUMA *nas, l_float32 minfirst, l_float32 minsep, l_float32 maxmin); static NUMA *numaGetPeakCentroids(NUMA *nahist, NUMA *narange); static NUMA *numaGetPeakWidthLUT(NUMA *narange, NUMA *nacent); static l_int32 numaEvalBestWidthAndShift(NUMA *nas, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore); static l_int32 numaEvalSyncError(NUMA *nas, l_int32 ifirst, l_int32 ilast, l_float32 width, l_float32 shift, l_float32 *pscore, NUMA **pnad); #ifndef NO_CONSOLE_IO #define DEBUG_DESKEW 0 #define DEBUG_WIDTHS 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * Top level * *------------------------------------------------------------------------*/ /*! * \brief pixProcessBarcodes() * * \param[in] pixs any depth * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS * \param[out] psaw [optional] sarray of bar widths * \param[in] debugflag use 1 to generate debug output * \return sarray text of barcodes, or NULL if none found or on error */ SARRAY * pixProcessBarcodes(PIX *pixs, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag) { PIX *pixg; PIXA *pixa; SARRAY *sad; if (psaw) *psaw = NULL; if (!pixs) return (SARRAY *)ERROR_PTR("pixs not defined", __func__, NULL); if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) return (SARRAY *)ERROR_PTR("unsupported format", __func__, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (SARRAY *)ERROR_PTR("invalid method", __func__, NULL); /* Get an 8 bpp image, no cmap */ if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) pixg = pixClone(pixs); else pixg = pixConvertTo8(pixs, 0); pixa = pixExtractBarcodes(pixg, debugflag); pixDestroy(&pixg); if (!pixa) return (SARRAY *)ERROR_PTR("no barcode(s) found", __func__, NULL); sad = pixReadBarcodes(pixa, format, method, psaw, debugflag); pixaDestroy(&pixa); return sad; } /*! * \brief pixExtractBarcodes() * * \param[in] pixs 8 bpp, no colormap * \param[in] debugflag use 1 to generate debug output * \return pixa deskewed and cropped barcodes, or NULL if none found * or on error */ PIXA * pixExtractBarcodes(PIX *pixs, l_int32 debugflag) { l_int32 i, n; l_float32 angle, conf; BOX *box; BOXA *boxa; PIX *pix1, *pix2, *pix3; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIXA *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); /* Locate them; use small threshold for edges. */ boxa = pixLocateBarcodes(pixs, 20, &pix2, &pix1); n = boxaGetCount(boxa); L_INFO("%d possible barcode(s) found\n", __func__, n); if (n == 0) { boxaDestroy(&boxa); pixDestroy(&pix2); pixDestroy(&pix1); return NULL; } if (debugflag) { boxaWriteStderr(boxa); pixDisplay(pix2, 100, 100); pixDisplay(pix1, 800, 100); } pixDestroy(&pix1); /* Deskew each barcode individually */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix3 = pixDeskewBarcode(pixs, pix2, box, 15, 20, &angle, &conf); if (!pix3) conf = 0.0; /* don't use */ L_INFO("angle = %6.2f, conf = %6.2f\n", __func__, angle, conf); if (conf > 5.0) { pixaAddPix(pixa, pix3, L_INSERT); pixaAddBox(pixa, box, L_INSERT); } else { pixDestroy(&pix3); boxDestroy(&box); } } pixDestroy(&pix2); boxaDestroy(&boxa); #if DEBUG_DESKEW pix3 = pixaDisplayTiledInRows(pixa, 8, 1000, 1.0, 0, 30, 2); pixWrite("/tmp/lept/pix3.png", pix3, IFF_PNG); pixDestroy(&pix3); #endif /* DEBUG_DESKEW */ return pixa; } /*! * \brief pixReadBarcodes() * * \param[in] pixa of 8 bpp deskewed and cropped barcodes * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS; * \param[out] psaw [optional] sarray of bar widths * \param[in] debugflag use 1 to generate debug output * \return sa sarray of widths, one string for each barcode found, * or NULL on error */ SARRAY * pixReadBarcodes(PIXA *pixa, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag) { char *barstr, *data; char emptystring[] = ""; l_int32 w, h, i, j, n, nbars, ival; NUMA *na; PIX *pix1; SARRAY *saw, *sad; if (psaw) *psaw = NULL; if (!pixa) return (SARRAY *)ERROR_PTR("pixa not defined", __func__, NULL); if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) return (SARRAY *)ERROR_PTR("unsupported format", __func__, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (SARRAY *)ERROR_PTR("invalid method", __func__, NULL); n = pixaGetCount(pixa); saw = sarrayCreate(n); sad = sarrayCreate(n); for (i = 0; i < n; i++) { /* Extract the widths of the lines in each barcode */ pix1 = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pix1, &w, &h, NULL); if (w < MIN_BC_WIDTH || h < MIN_BC_HEIGHT) { L_ERROR("pix is too small: w = %d, h = %d\n", __func__, w, h); pixDestroy(&pix1); continue; } na = pixReadBarcodeWidths(pix1, method, debugflag); pixDestroy(&pix1); if (!na) { ERROR_INT("valid barcode widths not returned", __func__, 1); continue; } /* Save the widths as a string */ nbars = numaGetCount(na); barstr = (char *)LEPT_CALLOC(nbars + 1, sizeof(char)); for (j = 0; j < nbars; j++) { numaGetIValue(na, j, &ival); barstr[j] = 0x30 + ival; } sarrayAddString(saw, barstr, L_INSERT); numaDestroy(&na); /* Decode the width strings */ data = barcodeDispatchDecoder(barstr, format, debugflag); if (!data) { ERROR_INT("barcode not decoded", __func__, 1); sarrayAddString(sad, emptystring, L_COPY); continue; } sarrayAddString(sad, data, L_INSERT); } /* If nothing found, clean up */ if (sarrayGetCount(saw) == 0) { sarrayDestroy(&saw); sarrayDestroy(&sad); return (SARRAY *)ERROR_PTR("no valid barcode data", __func__, NULL); } if (psaw) *psaw = saw; else sarrayDestroy(&saw); return sad; } /*! * \brief pixReadBarcodeWidths() * * \param[in] pixs of 8 bpp deskewed and cropped barcode * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS; * \param[in] debugflag use 1 to generate debug output * \return na numa of widths (each in set {1,2,3,4}, or NULL on error */ NUMA * pixReadBarcodeWidths(PIX *pixs, l_int32 method, l_int32 debugflag) { l_float32 winwidth; NUMA *na; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (NUMA *)ERROR_PTR("invalid method", __func__, NULL); /* Extract the widths of the lines in each barcode */ if (method == L_USE_WIDTHS) na = pixExtractBarcodeWidths1(pixs, 120, 0.25, NULL, NULL, debugflag); else /* method == L_USE_WINDOWS */ na = pixExtractBarcodeWidths2(pixs, 120, &winwidth, NULL, debugflag); #if DEBUG_WIDTHS if (method == L_USE_WINDOWS) lept_stderr("Window width for barcode: %7.3f\n", winwidth); numaWriteStderr(na); #endif /* DEBUG_WIDTHS */ if (!na) return (NUMA *)ERROR_PTR("barcode widths invalid", __func__, NULL); return na; } /*------------------------------------------------------------------------* * Locate barcode in image * *------------------------------------------------------------------------*/ /*! * \brief pixLocateBarcodes() * * \param[in] pixs any depth * \param[in] thresh for binarization of edge filter output; typ. 20 * \param[out] ppixb [optional] binarized edge filtered input image * \param[out] ppixm [optional] mask over barcodes * \return boxa location of barcodes, or NULL if none found or on error */ BOXA * pixLocateBarcodes(PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm) { BOXA *boxa; PIX *pix8, *pixe, *pixb, *pixm; if (!pixs) return (BOXA *)ERROR_PTR("pixs not defined", __func__, NULL); /* Get an 8 bpp image, no cmap */ if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) pix8 = pixClone(pixs); else pix8 = pixConvertTo8(pixs, 0); /* Get a 1 bpp image of the edges */ pixe = pixSobelEdgeFilter(pix8, L_ALL_EDGES); pixb = pixThresholdToBinary(pixe, thresh); pixInvert(pixb, pixb); pixDestroy(&pix8); pixDestroy(&pixe); pixm = pixGenerateBarcodeMask(pixb, MAX_SPACE_WIDTH, MAX_NOISE_WIDTH, MAX_NOISE_HEIGHT); boxa = pixConnComp(pixm, NULL, 8); if (ppixb) *ppixb = pixb; else pixDestroy(&pixb); if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); return boxa; } /*! * \brief pixGenerateBarcodeMask() * * \param[in] pixs 1 bpp * \param[in] maxspace largest space in the barcode, in pixels * \param[in] nwidth opening 'width' to remove noise * \param[in] nheight opening 'height' to remove noise * \return pixm mask over barcodes, or NULL if none found or on error * *
 * Notes:
 *      (1) For noise removal, 'width' and 'height' are referred to the
 *          barcode orientation.
 *      (2) If there is skew, the mask will not cover the barcode corners.
 * 
*/ static PIX * pixGenerateBarcodeMask(PIX *pixs, l_int32 maxspace, l_int32 nwidth, l_int32 nheight) { PIX *pixt1, *pixt2, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Identify horizontal barcodes */ pixt1 = pixCloseBrick(NULL, pixs, maxspace + 1, 1); pixt2 = pixOpenBrick(NULL, pixs, maxspace + 1, 1); pixXor(pixt2, pixt2, pixt1); pixOpenBrick(pixt2, pixt2, nwidth, nheight); pixDestroy(&pixt1); /* Identify vertical barcodes */ pixt1 = pixCloseBrick(NULL, pixs, 1, maxspace + 1); pixd = pixOpenBrick(NULL, pixs, 1, maxspace + 1); pixXor(pixd, pixd, pixt1); pixOpenBrick(pixd, pixd, nheight, nwidth); pixDestroy(&pixt1); /* Combine to get all barcodes */ pixOr(pixd, pixd, pixt2); pixDestroy(&pixt2); return pixd; } /*------------------------------------------------------------------------* * Extract and deskew barcode * *------------------------------------------------------------------------*/ /*! * \brief pixDeskewBarcode() * * \param[in] pixs input image; 8 bpp * \param[in] pixb binarized edge-filtered input image * \param[in] box identified region containing barcode * \param[in] margin of extra pixels around box to extract * \param[in] threshold for binarization; ~20 * \param[out] pangle [optional] in degrees, clockwise is positive * \param[out] pconf [optional] confidence * \return pixd deskewed barcode, or NULL on error * *
 * Notes:
 *     (1) The (optional) angle returned is the angle in degrees (cw positive)
 *         necessary to rotate the image so that it is deskewed.
 * 
*/ PIX * pixDeskewBarcode(PIX *pixs, PIX *pixb, BOX *box, l_int32 margin, l_int32 threshold, l_float32 *pangle, l_float32 *pconf) { l_int32 x, y, w, h, n; l_float32 angle, angle1, angle2, conf, conf1, conf2, score1, score2, deg2rad; BOX *box1, *box2; BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pixd; if (pangle) *pangle = 0.0; if (pconf) *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); if (!pixb || pixGetDepth(pixb) != 1) return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", __func__, NULL); if (!box) return (PIX *)ERROR_PTR("box not defined or 1 bpp", __func__, NULL); /* Clip out */ deg2rad = 3.1415926535f / 180.f; boxGetGeometry(box, &x, &y, &w, &h); box2 = boxCreate(x - 25, y - 25, w + 51, h + 51); pix1 = pixClipRectangle(pixb, box2, NULL); pix2 = pixClipRectangle(pixs, box2, NULL); boxDestroy(&box2); /* Deskew, looking at all possible orientations over 180 degrees */ pix3 = pixRotateOrth(pix1, 1); /* look for vertical bar lines */ pix4 = pixClone(pix1); /* look for horizontal bar lines */ pixFindSkewSweepAndSearchScore(pix3, &angle1, &conf1, &score1, 1, 1, 0.0f, 45.0f, 2.5f, 0.01f); pixFindSkewSweepAndSearchScore(pix4, &angle2, &conf2, &score2, 1, 1, 0.0f, 45.0f, 2.5f, 0.01f); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); /* Because we're using the boundary pixels of the barcodes, * the peak can be sharper (and the confidence ratio higher) * from the signal across the top and bottom of the barcode. * However, the max score, which is the magnitude of the signal * at the optimum skew angle, will be smaller, so we use the * max score as the primary indicator of orientation. */ if (score1 >= score2) { conf = conf1; if (conf1 > 6.0 && L_ABS(angle1) > 0.1) { angle = angle1; pix5 = pixRotate(pix2, deg2rad * angle1, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); } else { angle = 0.0; pix5 = pixClone(pix2); } } else { /* score2 > score1 */ conf = conf2; pix6 = pixRotateOrth(pix2, 1); if (conf2 > 6.0 && L_ABS(angle2) > 0.1) { angle = 90.0 + angle2; pix5 = pixRotate(pix6, deg2rad * angle2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); } else { angle = 90.0; pix5 = pixClone(pix6); } pixDestroy(&pix6); } pixDestroy(&pix2); /* Extract barcode plus a margin around it */ boxa1 = pixLocateBarcodes(pix5, threshold, 0, 0); if ((n = boxaGetCount(boxa1)) != 1) { L_WARNING("barcode mask in %d components\n", __func__, n); boxa2 = boxaSort(boxa1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); } else { boxa2 = boxaCopy(boxa1, L_CLONE); } box1 = boxaGetBox(boxa2, 0, L_CLONE); boxGetGeometry(box1, &x, &y, &w, &h); box2 = boxCreate(x - margin, y - margin, w + 2 * margin, h + 2 * margin); pixd = pixClipRectangle(pix5, box2, NULL); boxDestroy(&box1); boxDestroy(&box2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pix5); if (pangle) *pangle = angle; if (pconf) *pconf = conf; if (!pixd) L_ERROR("pixd not made\n", __func__); return pixd; } /*------------------------------------------------------------------------* * Process to get line widths * *------------------------------------------------------------------------*/ /*! * \brief pixExtractBarcodeWidths1() * * \param[in] pixs input image; 8 bpp * \param[in] thresh estimated pixel threshold for crossing * white <--> black; typ. ~120 * \param[in] binfract histo binsize as a fraction of minsize; e.g., 0.25 * \param[out] pnaehist [optional] histogram of black widths; NULL ok * \param[out] pnaohist [optional] histogram of white widths; NULL ok * \param[in] debugflag use 1 to generate debug output * \return nad numa of barcode widths in encoded integer units, * or NULL on error * *
 * Notes:
 *     (1) The widths are alternating black/white, starting with black
 *         and ending with black.
 *     (2) This method uses the widths of the bars directly, in terms
 *         of the (float) number of pixels between transitions.
 *         The histograms of these widths for black and white bars is
 *         generated and interpreted.
 * 
*/ NUMA * pixExtractBarcodeWidths1(PIX *pixs, l_float32 thresh, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag) { NUMA *nac, *nad; if (pnaehist) *pnaehist = NULL; if (pnaohist) *pnaohist = NULL; if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); /* Get the best estimate of the crossings, in pixel units */ if ((nac = pixExtractBarcodeCrossings(pixs, thresh, debugflag)) == NULL) return (NUMA *)ERROR_PTR("nac not made", __func__, NULL); /* Get the array of bar widths, starting with a black bar */ nad = numaQuantizeCrossingsByWidth(nac, binfract, pnaehist, pnaohist, debugflag); numaDestroy(&nac); return nad; } /*! * \brief pixExtractBarcodeWidths2() * * \param[in] pixs input image; 8 bpp * \param[in] thresh estimated pixel threshold for crossing * white <--> black; typ. ~120 * \param[out] pwidth [optional] best decoding window width, in pixels * \param[out] pnac [optional] number of transitions in each window * \param[in] debugflag use 1 to generate debug output * \return nad numa of barcode widths in encoded integer units, * or NULL on error * *
 * Notes:
 *      (1) The widths are alternating black/white, starting with black
 *          and ending with black.
 *      (2) The optional best decoding window width is the width of the window
 *          that is used to make a decision about whether a transition occurs.
 *          It is approximately the average width in pixels of the narrowest
 *          white and black bars (i.e., those corresponding to unit width).
 *      (3) The optional return signal %nac is a sequence of 0s, 1s,
 *          and perhaps a few 2s, giving the number of crossings in each window.
 *          On the occasion where there is a '2', it is interpreted as
 *          as ending two runs: the previous one and another one that has length 1.
 * 
*/ NUMA * pixExtractBarcodeWidths2(PIX *pixs, l_float32 thresh, l_float32 *pwidth, NUMA **pnac, l_int32 debugflag) { NUMA *nacp, *nad; if (pwidth) *pwidth = 0; if (pnac) *pnac = NULL; if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); /* Get the best estimate of the crossings, in pixel units */ if ((nacp = pixExtractBarcodeCrossings(pixs, thresh, debugflag)) == NULL) return (NUMA *)ERROR_PTR("nacp not made", __func__, NULL); /* Quantize the crossings to get actual windowed data */ nad = numaQuantizeCrossingsByWindow(nacp, 2.0, pwidth, NULL, pnac, debugflag); numaDestroy(&nacp); return nad; } /*! * \brief pixExtractBarcodeCrossings() * * \param[in] pixs input image; 8 bpp * \param[in] thresh estimated pixel threshold for crossing * white <--> black; typ. ~120 * \param[in] debugflag use 1 to generate debug output * \return numa of crossings, in pixel units, or NULL on error * *
 * Notes:
 *      (1) Require at least 10 crossings.
 * 
*/ NUMA * pixExtractBarcodeCrossings(PIX *pixs, l_float32 thresh, l_int32 debugflag) { l_int32 w; l_float32 bestthresh; GPLOT *gplot; NUMA *nas, *nax, *nay, *nad; if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); /* Scan pixels horizontally and average results */ if ((nas = pixAverageRasterScans(pixs, 50)) == NULL) return (NUMA *)ERROR_PTR("nas not made", __func__, NULL); /* Interpolate to get 4x the number of values */ w = pixGetWidth(pixs); numaInterpolateEqxInterval(0.0, 1.0, nas, L_QUADRATIC_INTERP, 0.0, (l_float32)(w - 1), 4 * w + 1, &nax, &nay); if (debugflag) { lept_mkdir("lept/barcode"); gplot = gplotCreate("/tmp/lept/barcode/signal", GPLOT_PNG, "Pixel values", "dist in pixels", "value"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } /* Locate the crossings. Run multiple times with different * thresholds, and choose a threshold in the center of the * run of thresholds that all give the maximum number of crossings. */ numaSelectCrossingThreshold(nax, nay, thresh, &bestthresh); /* Get the crossings with the best threshold. */ nad = numaCrossingsByThreshold(nax, nay, bestthresh); numaDestroy(&nas); numaDestroy(&nax); numaDestroy(&nay); if (numaGetCount(nad) < 10) { L_ERROR("Only %d crossings; failure\n", __func__, numaGetCount(nad)); numaDestroy(&nad); } return nad; } /*------------------------------------------------------------------------* * Average adjacent rasters * *------------------------------------------------------------------------*/ /*! * \brief pixAverageRasterScans() * * \param[in] pixs input image; 8 bpp * \param[in] nscans number of adjacent scans, about the center vertically * \return numa of average pixel values across image, or NULL on error */ static NUMA * pixAverageRasterScans(PIX *pixs, l_int32 nscans) { l_int32 w, h, first, last, i, j, wpl, val; l_uint32 *line, *data; l_float32 *array; NUMA *nad; if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (nscans > h) { first = 0; last = h - 1; nscans = h; } else { first = (h - nscans) / 2; last = first + nscans - 1; } nad = numaCreate(w); numaSetCount(nad, w); array = numaGetFArray(nad, L_NOCOPY); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (j = 0; j < w; j++) { for (i = first; i <= last; i++) { line = data + i * wpl; val = GET_DATA_BYTE(line, j); array[j] += val; } array[j] = array[j] / (l_float32)nscans; } return nad; } /*------------------------------------------------------------------------* * Signal processing for barcode widths * *------------------------------------------------------------------------*/ /*! * \brief numaQuantizeCrossingsByWidth() * * \param[in] nas numa of crossing locations, in pixel units * \param[in] binfract histo binsize as a fraction of minsize; e.g., 0.25 * \param[out] pnaehist [optional] histo of even (black) bar widths * \param[out] pnaohist [optional] histo of odd (white) bar widths * \param[in] debugflag 1 to generate plots of histograms of bar widths * \return nad sequence of widths, in unit sizes, or NULL on error * *
 * Notes:
 *      (1) This first computes the histogram of black and white bar widths,
 *          binned in appropriate units.  There should be well-defined
 *          peaks, each corresponding to a specific width.  The sequence
 *          of barcode widths (namely, the integers from the set {1,2,3,4})
 *          is returned.
 *      (2) The optional returned histograms are binned in width units
 *          that are inversely proportional to %binfract.  For example,
 *          if %binfract = 0.25, there are 4.0 bins in the distance of
 *          the width of the narrowest bar.
 * 
*/ NUMA * numaQuantizeCrossingsByWidth(NUMA *nas, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag) { l_int32 i, n, ret, ned, nod, iw, width; l_float32 val, minsize, maxsize, factor; GPLOT *gplot; NUMA *naedist, *naodist, *naehist, *naohist, *naecent, *naocent; NUMA *naerange, *naorange, *naelut, *naolut, *nad; if (pnaehist) *pnaehist = NULL; if (pnaohist) *pnaohist = NULL; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); if (n < 10) return (NUMA *)ERROR_PTR("n < 10", __func__, NULL); if (binfract <= 0.0) return (NUMA *)ERROR_PTR("binfract <= 0.0", __func__, NULL); /* Get even and odd crossing distances, and determine the rank * widths for rank 0.1 (minsize) and 0.9 (maxsize). */ ret = numaGetCrossingDistances(nas, &naedist, &naodist, &minsize, &maxsize); if (ret || minsize < 1.0 || maxsize / minsize > 8.0) { L_ERROR("bad data, or minsize = %5.2f < 1.0 or max/min = %f > 4.0\n", __func__, minsize, maxsize / minsize); numaDestroy(&naedist); numaDestroy(&naodist); return NULL; } /* Bin the spans in units of binfract * minsize. These * units are convenient because they scale to make at least * 1/binfract bins in the smallest span (width). We want this * number to be large enough to clearly separate the * widths, but small enough so that the histogram peaks * have very few if any holes (zeroes) within them. */ naehist = numaMakeHistogramClipped(naedist, binfract * minsize, (1.25 / binfract) * maxsize); naohist = numaMakeHistogramClipped(naodist, binfract * minsize, (1.25 / binfract) * maxsize); if (debugflag) { lept_mkdir("lept/barcode"); gplot = gplotCreate("/tmp/lept/barcode/histw", GPLOT_PNG, "Raw width histogram", "Width", "Number"); gplotAddPlot(gplot, NULL, naehist, GPLOT_LINES, "plot black"); gplotAddPlot(gplot, NULL, naohist, GPLOT_LINES, "plot white"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } /* Compute the peak ranges, still in units of binfract * minsize. */ naerange = numaLocatePeakRanges(naehist, 1.0 / binfract, 1.0 / binfract, 0.0); naorange = numaLocatePeakRanges(naohist, 1.0 / binfract, 1.0 / binfract, 0.0); /* Find the centroid values of each peak */ naecent = numaGetPeakCentroids(naehist, naerange); naocent = numaGetPeakCentroids(naohist, naorange); /* Generate the lookup tables that map from the bar width, in * units of (binfract * minsize), to the integerized barcode * units (1, 2, 3, 4), which are the output integer widths * between transitions. */ naelut = numaGetPeakWidthLUT(naerange, naecent); naolut = numaGetPeakWidthLUT(naorange, naocent); /* Get the widths. Because the LUT accepts our funny units, * we first must convert the pixel widths to these units, * which is what 'factor' does. */ nad = numaCreate(0); ned = numaGetCount(naedist); nod = numaGetCount(naodist); if (nod != ned - 1) L_WARNING("ned != nod + 1\n", __func__); factor = 1.0 / (binfract * minsize); /* for converting units */ for (i = 0; i < ned - 1; i++) { numaGetFValue(naedist, i, &val); width = (l_int32)(factor * val); numaGetIValue(naelut, width, &iw); numaAddNumber(nad, iw); /* lept_stderr("even: val = %7.3f, width = %d, iw = %d\n", val, width, iw); */ numaGetFValue(naodist, i, &val); width = (l_int32)(factor * val); numaGetIValue(naolut, width, &iw); numaAddNumber(nad, iw); /* lept_stderr("odd: val = %7.3f, width = %d, iw = %d\n", val, width, iw); */ } numaGetFValue(naedist, ned - 1, &val); width = (l_int32)(factor * val); numaGetIValue(naelut, width, &iw); numaAddNumber(nad, iw); if (debugflag) { lept_stderr(" ---- Black bar widths (pixels) ------ \n"); numaWriteStderr(naedist); lept_stderr(" ---- Histogram of black bar widths ------ \n"); numaWriteStderr(naehist); lept_stderr(" ---- Peak ranges in black bar histogram bins --- \n"); numaWriteStderr(naerange); lept_stderr(" ---- Peak black bar centroid width values ------ \n"); numaWriteStderr(naecent); lept_stderr(" ---- Black bar lookup table ------ \n"); numaWriteStderr(naelut); lept_stderr(" ---- White bar widths (pixels) ------ \n"); numaWriteStderr(naodist); lept_stderr(" ---- Histogram of white bar widths ------ \n"); numaWriteStderr(naohist); lept_stderr(" ---- Peak ranges in white bar histogram bins --- \n"); numaWriteStderr(naorange); lept_stderr(" ---- Peak white bar centroid width values ------ \n"); numaWriteStderr(naocent); lept_stderr(" ---- White bar lookup table ------ \n"); numaWriteStderr(naolut); } numaDestroy(&naedist); numaDestroy(&naodist); numaDestroy(&naerange); numaDestroy(&naorange); numaDestroy(&naecent); numaDestroy(&naocent); numaDestroy(&naelut); numaDestroy(&naolut); if (pnaehist) *pnaehist = naehist; else numaDestroy(&naehist); if (pnaohist) *pnaohist = naohist; else numaDestroy(&naohist); return nad; } /*! * \brief numaGetCrossingDistances() * * \param[in] nas numa of crossing locations * \param[out] pnaedist [optional] even distances between crossings * \param[out] pnaodist [optional] odd distances between crossings * \param[out] pmindist [optional] min distance between crossings * \param[out] pmaxdist [optional] max distance between crossings * \return 0 if OK, 1 on error */ static l_int32 numaGetCrossingDistances(NUMA *nas, NUMA **pnaedist, NUMA **pnaodist, l_float32 *pmindist, l_float32 *pmaxdist) { l_int32 i, n; l_float32 val, newval, mindist, maxdist; NUMA *na1, *na2, *naedist, *naodist; if (pnaedist) *pnaedist = NULL; if (pnaodist) *pnaodist = NULL; if (pmindist) *pmindist = 0.0; if (pmaxdist) *pmaxdist = 0.0; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if ((n = numaGetCount(nas)) < 2) return ERROR_INT("n < 2", __func__, 1); /* Get numas of distances between crossings. Separate these * into even (e.g., black) and odd (e.g., white) spans. * For barcodes, the black spans are 0, 2, etc. These * distances are in pixel units. */ naedist = numaCreate(n / 2 + 1); naodist = numaCreate(n / 2); numaGetFValue(nas, 0, &val); for (i = 1; i < n; i++) { numaGetFValue(nas, i, &newval); if (i % 2) numaAddNumber(naedist, newval - val); else numaAddNumber(naodist, newval - val); val = newval; } /* The min and max rank distances of the spans are in pixel units. */ na1 = numaCopy(naedist); numaJoin(na1, naodist, 0, -1); /* use both bars and spaces */ na2 = numaMakeHistogram(na1, 100, NULL, NULL); numaHistogramGetValFromRank(na2, 0.1f, &mindist); numaHistogramGetValFromRank(na2, 0.9f, &maxdist); numaDestroy(&na1); numaDestroy(&na2); L_INFO("mindist = %7.3f, maxdist = %7.3f\n", __func__, mindist, maxdist); if (pnaedist) *pnaedist = naedist; else numaDestroy(&naedist); if (pnaodist) *pnaodist = naodist; else numaDestroy(&naodist); if (pmindist) *pmindist = mindist; if (pmaxdist) *pmaxdist = maxdist; return 0; } /*! * \brief numaLocatePeakRanges() * * \param[in] nas numa of histogram of crossing widths * \param[in] minfirst min location of center of first peak * \param[in] minsep min separation between peak range centers * \param[in] maxmin max allowed value for min histo value between peaks * \return nad ranges for each peak found, in pairs, or NULL on error * *
 * Notes:
 *      (1) Units of %minsep are the index into nas.
 *          This puts useful constraints on peak-finding.
 *      (2) If maxmin == 0.0, the value of nas[i] must go to 0.0 (or less)
 *          between peaks.
 *      (3) All calculations are done in units of the index into nas.
 *          The resulting ranges are therefore integers.
 *      (4) The output nad gives pairs of range values for successive peaks.
 *          Any location [i] for which maxmin = nas[i] = 0.0 will NOT be
 *          included in a peak range.  This works fine for histograms where
 *          if nas[i] == 0.0, it means that there are no samples at [i].
 *      (5) For barcodes, when this is used on a histogram of barcode
 *          widths, use maxmin = 0.0.  This requires that there is at
 *          least one histogram bin corresponding to a width value between
 *          adjacent peak ranges that is unpopulated, making the separation
 *          of the histogram peaks unambiguous.
 * 
*/ static NUMA * numaLocatePeakRanges(NUMA *nas, l_float32 minfirst, l_float32 minsep, l_float32 maxmin) { l_int32 i, n, inpeak, left; l_float32 center, prevcenter, val; NUMA *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); n = numaGetCount(nas); nad = numaCreate(0); inpeak = FALSE; prevcenter = minfirst - minsep - 1.0; for (i = 0; i < n; i++) { numaGetFValue(nas, i, &val); if (inpeak == FALSE && val > maxmin) { inpeak = TRUE; left = i; } else if (inpeak == TRUE && val <= maxmin) { /* end peak */ center = (left + i - 1.0) / 2.0; if (center - prevcenter >= minsep) { /* save new peak */ inpeak = FALSE; numaAddNumber(nad, left); numaAddNumber(nad, i - 1); prevcenter = center; } else { /* attach to previous peak; revise the right edge */ numaSetValue(nad, numaGetCount(nad) - 1, i - 1); } } } if (inpeak == TRUE) { /* save the last peak */ numaAddNumber(nad, left); numaAddNumber(nad, n - 1); } return nad; } /*! * \brief numaGetPeakCentroids() * * \param[in] nahist numa of histogram of crossing widths * \param[in] narange numa of ranges of x-values for the peaks in %nahist * \return nad centroids for each peak found; max of 4, corresponding * to 4 different barcode line widths, or NULL on error */ static NUMA * numaGetPeakCentroids(NUMA *nahist, NUMA *narange) { l_int32 i, j, nr, low, high; l_float32 cent, sum, val; NUMA *nad; if (!nahist) return (NUMA *)ERROR_PTR("nahist not defined", __func__, NULL); if (!narange) return (NUMA *)ERROR_PTR("narange not defined", __func__, NULL); nr = numaGetCount(narange) / 2; nad = numaCreate(4); for (i = 0; i < nr; i++) { numaGetIValue(narange, 2 * i, &low); numaGetIValue(narange, 2 * i + 1, &high); cent = 0.0; sum = 0.0; for (j = low; j <= high; j++) { numaGetFValue(nahist, j, &val); cent += j * val; sum += val; } if (sum > 0) numaAddNumber(nad, cent / sum); } return nad; } /*! * \brief numaGetPeakWidthLUT() * * \param[in] narange numa of x-val ranges for the histogram width peaks * \param[in] nacent numa of centroids of each peak -- up to 4 * \return nalut lookup table from the width of a bar to one of the four * integerized barcode units, or NULL on error * *
 * Notes:
 *      (1) This generates the lookup table that maps from a sequence of widths
 *          (in some units) to the integerized barcode units (1, 2, 3, 4),
 *          which are the output integer widths between transitions.
 *      (2) The smallest width can be lost in float roundoff.  To avoid
 *          losing it, we expand the peak range of the smallest width.
 * 
*/ static NUMA * numaGetPeakWidthLUT(NUMA *narange, NUMA *nacent) { l_int32 i, j, nc, low, high, imax; l_int32 assign[4]; l_float32 *warray; l_float32 max, rat21, rat32, rat42; NUMA *nalut; if (!narange) return (NUMA *)ERROR_PTR("narange not defined", __func__, NULL); if (!nacent) return (NUMA *)ERROR_PTR("nacent not defined", __func__, NULL); nc = numaGetCount(nacent); /* half the size of narange */ if (nc < 1 || nc > 4) return (NUMA *)ERROR_PTR("nc must be 1, 2, 3, or 4", __func__, NULL); /* Check the peak centroids for consistency with bar widths. * The third peak can correspond to a width of either 3 or 4. * Use ratios 3/2 and 4/2 instead of 3/1 and 4/1 because the * former are more stable and closer to the expected ratio. */ if (nc > 1) { warray = numaGetFArray(nacent, L_NOCOPY); if (warray[0] == 0) return (NUMA *)ERROR_PTR("first peak has width 0.0", __func__, NULL); rat21 = warray[1] / warray[0]; if (rat21 < 1.5 || rat21 > 2.6) L_WARNING("width ratio 2/1 = %f\n", __func__, rat21); if (nc > 2) { rat32 = warray[2] / warray[1]; if (rat32 < 1.3 || rat32 > 2.25) L_WARNING("width ratio 3/2 = %f\n", __func__, rat32); } if (nc == 4) { rat42 = warray[3] / warray[1]; if (rat42 < 1.7 || rat42 > 2.3) L_WARNING("width ratio 4/2 = %f\n", __func__, rat42); } } /* Set width assignments. * The only possible ambiguity is with nc = 3 */ for (i = 0; i < 4; i++) assign[i] = i + 1; if (nc == 3) { if (rat32 > 1.75) assign[2] = 4; } /* Put widths into the LUT */ numaGetMax(narange, &max, NULL); imax = (l_int32)max; nalut = numaCreate(imax + 1); numaSetCount(nalut, imax + 1); /* fill the array with zeroes */ for (i = 0; i < nc; i++) { numaGetIValue(narange, 2 * i, &low); if (i == 0) low--; /* catch smallest width */ numaGetIValue(narange, 2 * i + 1, &high); for (j = low; j <= high; j++) numaSetValue(nalut, j, assign[i]); } return nalut; } /*! * \brief numaQuantizeCrossingsByWindow() * * \param[in] nas numa of crossing locations * \param[in] ratio of max window size over min window size in search; * typ. 2.0 * \param[out] pwidth [optional] best window width * \param[out] pfirstloc [optional] center of window for first xing * \param[out] pnac [optional] array of window crossings (0, 1, 2) * \param[in] debugflag 1 to generate various plots of intermediate results * \return nad sequence of widths, in unit sizes, or NULL on error * *
 * Notes:
 *      (1) The minimum size of the window is set by the minimum
 *          distance between zero crossings.
 *      (2) The optional return signal %nac is a sequence of 0s, 1s,
 *          and perhaps a few 2s, giving the number of crossings in each window.
 *          On the occasion where there is a '2', it is interpreted as
 *          ending two runs: the previous one and another one that has length 1.
 * 
*/ NUMA * numaQuantizeCrossingsByWindow(NUMA *nas, l_float32 ratio, l_float32 *pwidth, l_float32 *pfirstloc, NUMA **pnac, l_int32 debugflag) { l_int32 i, nw, started, count, trans; l_float32 minsize, minwidth, minshift, xfirst; NUMA *nac, *nad; if (!nas) return (NUMA *)ERROR_PTR("nas not defined", __func__, NULL); if (numaGetCount(nas) < 2) return (NUMA *)ERROR_PTR("nas size < 2", __func__, NULL); /* Get the minsize, which is needed for the search for * the window width (ultimately found as 'minwidth') */ numaGetCrossingDistances(nas, NULL, NULL, &minsize, NULL); /* Compute the width and shift increments; start at minsize * and go up to ratio * minsize */ numaEvalBestWidthAndShift(nas, 100, 10, minsize, ratio * minsize, &minwidth, &minshift, NULL); /* Refine width and shift calculation */ numaEvalBestWidthAndShift(nas, 100, 10, 0.98 * minwidth, 1.02 * minwidth, &minwidth, &minshift, NULL); L_INFO("best width = %7.3f, best shift = %7.3f\n", __func__, minwidth, minshift); /* Get the crossing array (0,1,2) for the best window width and shift */ numaEvalSyncError(nas, 0, 0, minwidth, minshift, NULL, &nac); if (pwidth) *pwidth = minwidth; if (pfirstloc) { numaGetFValue(nas, 0, &xfirst); *pfirstloc = xfirst + minshift; } /* Get the array of bar widths, starting with a black bar */ nad = numaCreate(0); nw = numaGetCount(nac); /* number of window measurements */ started = FALSE; count = 0; /* unnecessary init */ for (i = 0; i < nw; i++) { numaGetIValue(nac, i, &trans); if (trans > 2) L_WARNING("trans = %d > 2 !!!\n", __func__, trans); if (started) { if (trans > 1) { /* i.e., when trans == 2 */ numaAddNumber(nad, count); trans--; count = 1; } if (trans == 1) { numaAddNumber(nad, count); count = 1; } else { count++; } } if (!started && trans) { started = TRUE; if (trans == 2) /* a whole bar in this window */ numaAddNumber(nad, 1); count = 1; } } if (pnac) *pnac = nac; else numaDestroy(&nac); return nad; } /*! * \brief numaEvalBestWidthAndShift() * * \param[in] nas numa of crossing locations * \param[in] nwidth number of widths to consider * \param[in] nshift number of shifts to consider for each width * \param[in] minwidth smallest width to consider * \param[in] maxwidth largest width to consider * \param[out] pbestwidth best size of window * \param[out] pbestshift best shift for the window * \param[out] pbestscore [optional] average squared error of dist * of crossing signal from the center of the window * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a linear sweep of widths, evaluating at %nshift
 *          shifts for each width, finding the (width, shift) pair that
 *          gives the minimum score.
 * 
*/ static l_int32 numaEvalBestWidthAndShift(NUMA *nas, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore) { l_int32 i, j; l_float32 delwidth, delshift, width, shift, score; l_float32 bestwidth, bestshift, bestscore; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if (!pbestwidth || !pbestshift) return ERROR_INT("&bestwidth and &bestshift not defined", __func__, 1); bestwidth = 0.0f; bestshift = 0.0f; bestscore = 1.0; delwidth = (maxwidth - minwidth) / (nwidth - 1.0); for (i = 0; i < nwidth; i++) { width = minwidth + delwidth * i; delshift = width / (l_float32)(nshift); for (j = 0; j < nshift; j++) { shift = -0.5 * (width - delshift) + j * delshift; numaEvalSyncError(nas, 0, 0, width, shift, &score, NULL); if (score < bestscore) { bestscore = score; bestwidth = width; bestshift = shift; #if DEBUG_FREQUENCY lept_stderr("width = %7.3f, shift = %7.3f, score = %7.3f\n", width, shift, score); #endif /* DEBUG_FREQUENCY */ } } } *pbestwidth = bestwidth; *pbestshift = bestshift; if (pbestscore) *pbestscore = bestscore; return 0; } /*! * \brief numaEvalSyncError() * * \param[in] nas numa of crossing locations * \param[in] ifirst first crossing to use * \param[in] ilast last crossing to use; use 0 for all crossings * \param[in] width size of window * \param[in] shift of center of window w/rt first crossing * \param[out] pscore [optional] average squared error of dist * of crossing signal from the center of the window * \param[out] pnad [optional] numa of 1s and 0s for crossings * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The score is computed only on the part of the signal from the
 *          %ifirst to %ilast crossings.  Use 0 for both of these to
 *          use all the crossings.  The score is normalized for
 *          the number of crossings and with half-width of the window.
 *      (2) The optional return %nad is a sequence of 0s and 1s, where a '1'
 *          indicates a crossing in the window.
 * 
*/ static l_int32 numaEvalSyncError(NUMA *nas, l_int32 ifirst, l_int32 ilast, l_float32 width, l_float32 shift, l_float32 *pscore, NUMA **pnad) { l_int32 i, n, nc, nw, ival; l_int32 iw; /* cell in which transition occurs */ l_float32 score, xfirst, xlast, xleft, xc, xwc; NUMA *nad; if (!nas) return ERROR_INT("nas not defined", __func__, 1); if ((n = numaGetCount(nas)) < 2) return ERROR_INT("nas size < 2", __func__, 1); if (ifirst < 0) ifirst = 0; if (ilast <= 0) ilast = n - 1; if (ifirst >= ilast) return ERROR_INT("ifirst not < ilast", __func__, 1); nc = ilast - ifirst + 1; /* Set up an array corresponding to the (shifted) windows, * and fill in the crossings. */ score = 0.0; numaGetFValue(nas, ifirst, &xfirst); numaGetFValue(nas, ilast, &xlast); nw = (l_int32) ((xlast - xfirst + 2.0 * width) / width); nad = numaCreate(nw); numaSetCount(nad, nw); /* init to all 0.0 */ xleft = xfirst - width / 2.0 + shift; /* left edge of first window */ for (i = ifirst; i <= ilast; i++) { numaGetFValue(nas, i, &xc); iw = (l_int32)((xc - xleft) / width); xwc = xleft + (iw + 0.5) * width; /* center of cell iw */ score += (xwc - xc) * (xwc - xc); numaGetIValue(nad, iw, &ival); numaSetValue(nad, iw, ival + 1); } if (pscore) *pscore = 4.0 * score / (width * width * (l_float32)nc); if (pnad) *pnad = nad; else numaDestroy(&nad); return 0; } leptonica-1.86.0/src/readbarcode.h000066400000000000000000000266621506303110300167630ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_READBARCODE_H #define LEPTONICA_READBARCODE_H /* ----------------------------------------------------------------- * * Flags for method of extracting barcode widths * * ----------------------------------------------------------------- */ /*! Barcode Method */ enum { L_USE_WIDTHS = 1, /*!< use histogram of barcode widths */ L_USE_WINDOWS = 2 /*!< find best window for decoding transitions */ }; /* ----------------------------------------------------------------- * * Flags for barcode formats * * These are used both to identify a barcode format and to identify * * the decoding method to use on a barcode. * * ----------------------------------------------------------------- */ /*! Barcode Format */ enum { L_BF_UNKNOWN = 0, /*!< unknown format */ L_BF_ANY = 1, /*!< try decoding with all known formats */ L_BF_CODE128 = 2, /*!< decode with Code128 format */ L_BF_EAN8 = 3, /*!< decode with EAN8 format */ L_BF_EAN13 = 4, /*!< decode with EAN13 format */ L_BF_CODE2OF5 = 5, /*!< decode with Code 2 of 5 format */ L_BF_CODEI2OF5 = 6, /*!< decode with Interleaved 2 of 5 format */ L_BF_CODE39 = 7, /*!< decode with Code39 format */ L_BF_CODE93 = 8, /*!< decode with Code93 format */ L_BF_CODABAR = 9, /*!< decode with Code93 format */ L_BF_UPCA = 10 /*!< decode with UPC A format */ }; /* ----------------------------------------------------------------- * * Currently supported formats * * Update these arrays as new formats are added. * * ----------------------------------------------------------------- */ /*! Currently supported formats */ static const l_int32 SupportedBarcodeFormat[] = { L_BF_CODE2OF5, L_BF_CODEI2OF5, L_BF_CODE93, L_BF_CODE39, L_BF_CODABAR, L_BF_UPCA, L_BF_EAN13 }; /*! Currently supported format names */ static const char *SupportedBarcodeFormatName[] = { "Code2of5", "CodeI2of5", "Code93", "Code39", "Codabar", "Upca", "Ean13" }; static const l_int32 NumSupportedBarcodeFormats = 7; /*!< Number of formats */ /* ----------------------------------------------------------------- * * Code 2 of 5 symbology * * ----------------------------------------------------------------- */ static const char *Code2of5[] = { "111121211", "211111112", "112111112", "212111111", /* 0 - 3 */ "111121112", "211121111", "112121111", "111111212", /* 4 - 7 */ "211111211", "112111211", /* 8 - 9 */ "21211", "21112" /* Start, Stop */ }; static const l_int32 C25_START = 10; static const l_int32 C25_STOP = 11; /* ----------------------------------------------------------------- * * Code Interleaved 2 of 5 symbology * * ----------------------------------------------------------------- */ static const char *CodeI2of5[] = { "11221", "21112", "12112", "22111", "11212", /* 0 - 4 */ "21211", "12211", "11122", "21121", "12121", /* 5 - 9 */ "1111", "211" /* start, stop */ }; static const l_int32 CI25_START = 10; static const l_int32 CI25_STOP = 11; /* ----------------------------------------------------------------- * * Code 93 symbology * * ----------------------------------------------------------------- */ static const char *Code93[] = { "131112", "111213", "111312", "111411", "121113", /* 0: 0 - 4 */ "121212", "121311", "111114", "131211", "141111", /* 5: 5 - 9 */ "211113", "211212", "211311", "221112", "221211", /* 10: A - E */ "231111", "112113", "112212", "112311", "122112", /* 15: F - J */ "132111", "111123", "111222", "111321", "121122", /* 20: K - O */ "131121", "212112", "212211", "211122", "211221", /* 25: P - T */ "221121", "222111", "112122", "112221", "122121", /* 30: U - Y */ "123111", "121131", "311112", "311211", "321111", /* 35: Z,-,.,SP,$ */ "112131", "113121", "211131", "131221", "312111", /* 40: /,+,%,($),(%) */ "311121", "122211", "111141" /* 45: (/),(+), Start */ }; /* Use "[]{}#" to represent special codes 43-47 */ static const char Code93Val[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%[]{}#"; static const l_int32 C93_START = 47; static const l_int32 C93_STOP = 47; /* ----------------------------------------------------------------- * * Code 39 symbology * * ----------------------------------------------------------------- */ static const char *Code39[] = { "111221211", "211211112", "112211112", "212211111", /* 0: 0 - 3 */ "111221112", "211221111", "112221111", "111211212", /* 4: 4 - 7 */ "211211211", "112211211", "211112112", "112112112", /* 8: 8 - B */ "212112111", "111122112", "211122111", "112122111", /* 12: C - F */ "111112212", "211112211", "112112211", "111122211", /* 16: G - J */ "211111122", "112111122", "212111121", "111121122", /* 20: K - N */ "211121121", "112121121", "111111222", "211111221", /* 24: O - R */ "112111221", "111121221", "221111112", "122111112", /* 28: S - V */ "222111111", "121121112", "221121111", "122121111", /* 32: W - Z */ "121111212", "221111211", "122111211", "121212111", /* 36: -,.,SP,$ */ "121211121", "121112121", "111212121", "121121211" /* 40: /,+,%,* */ }; /* Use "*" to represent the Start and Stop codes (43) */ static const char Code39Val[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; static const l_int32 C39_START = 43; static const l_int32 C39_STOP = 43; /* ----------------------------------------------------------------- * * Codabar symbology * * ----------------------------------------------------------------- */ static const char *Codabar[] = { "1111122", "1111221", "1112112", "2211111", "1121121", /* 0: 0 - 4 */ "2111121", "1211112", "1211211", "1221111", "2112111", /* 5: 5 - 9 */ "1112211", "1122111", "2111212", "2121112", "2121211", /* 10: -,$,:,/,. */ "1121212", "1122121", "1212112", "1112122", "1112221" /* 15: +,A,B,C,D */ }; /* Ascii representations for codes 16-19: (A or T), (B or N), (C or *), * (D or E). These are used in pairs for the Start and Stop codes. */ static const char CodabarVal[] = "0123456789-$:/.+ABCD"; /* ----------------------------------------------------------------- * * UPC-A symbology * * ----------------------------------------------------------------- */ static const char *Upca[] = { "3211", "2221", "2122", "1411", "1132", /* 0: 0 - 4 */ "1231", "1114", "1312", "1213", "3112", /* 5: 5 - 9 */ "111", "111", "11111" /* 10: Start, Stop, Mid */ }; static const l_int32 UPCA_START = 10; static const l_int32 UPCA_STOP = 11; static const l_int32 UPCA_MID = 12; /* ----------------------------------------------------------------- * * Code128 symbology * * ----------------------------------------------------------------- */ static const char *Code128[] = { "212222", "222122", "222221", "121223", "121322", /* 0 - 4 */ "131222", "122213", "122312", "132212", "221213", /* 5 - 9 */ "221312", "231212", "112232", "122132", "122231", /* 10 - 14 */ "113222", "123122", "123221", "223211", "221132", /* 15 - 19 */ "221231", "213212", "223112", "312131", "311222", /* 20 - 24 */ "321122", "321221", "312212", "322112", "322211", /* 25 - 29 */ "212123", "212321", "232121", "111323", "131123", /* 30 - 34 */ "131321", "112313", "132113", "132311", "211313", /* 35 - 39 */ "231113", "231311", "112133", "112331", "132131", /* 40 - 44 */ "113123", "113321", "133121", "313121", "211331", /* 45 - 49 */ "231131", "213113", "213311", "213131", "311123", /* 50 - 54 */ "311321", "331121", "312113", "312311", "332111", /* 55 - 59 */ "314111", "221411", "431111", "111224", "111422", /* 60 - 64 */ "121124", "121421", "141122", "141221", "112214", /* 65 - 69 */ "112412", "122114", "122411", "142112", "142211", /* 70 - 74 */ "241211", "221114", "413111", "241112", "134111", /* 75 - 79 */ "111242", "121142", "121241", "114212", "124112", /* 80 - 84 */ "124211", "411212", "421112", "421211", "212141", /* 85 - 89 */ "214121", "412121", "111143", "111341", "131141", /* 90 - 94 */ "114113", "114311", "411113", "411311", "113141", /* 95 - 99 */ "114131", "311141", "411131", "211412", "211214", /* 100 - 104 */ "211232", "2331112" /* 105 - 106 */ }; static const l_int32 C128_FUN_3 = 96; /* in A or B only; in C it is 96 */ static const l_int32 C128_FUNC_2 = 97; /* in A or B only; in C it is 97 */ static const l_int32 C128_SHIFT = 98; /* in A or B only; in C it is 98 */ static const l_int32 C128_GOTO_C = 99; /* in A or B only; in C it is 99 */ static const l_int32 C128_GOTO_B = 100; static const l_int32 C128_GOTO_A = 101; static const l_int32 C128_FUNC_1 = 102; static const l_int32 C128_START_A = 103; static const l_int32 C128_START_B = 104; static const l_int32 C128_START_C = 105; static const l_int32 C128_STOP = 106; /* code 128 symbols are 11 units */ static const l_int32 C128_SYMBOL_WIDTH = 11; #endif /* LEPTONICA_READBARCODE_H */ leptonica-1.86.0/src/readfile.c000066400000000000000000001464071506303110300162760ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file readfile.c: reads image on file into memory *
 *
 *      Top-level functions for reading images from file
 *           PIXA      *pixaReadFiles()
 *           PIXA      *pixaReadFilesSA()
 *           PIX       *pixRead()
 *           PIX       *pixReadWithHint()
 *           PIX       *pixReadIndexed()
 *           PIX       *pixReadStream()
 *
 *      Read header information from file
 *           l_int32    pixReadHeader()
 *
 *      Format finders
 *           l_int32    findFileFormat()
 *           l_int32    findFileFormatStream()
 *           l_int32    findFileFormatBuffer()
 *           l_int32    fileFormatIsTiff()
 *
 *      Read from memory
 *           PIX       *pixReadMem()
 *           l_int32    pixReadHeaderMem()
 *
 *      Output image file information
 *           void       writeImageFileInfo()
 *
 *      Test function for I/O with different formats
 *           l_int32    ioFormatTest()
 *
 *  Supported file formats:
 *  (1) Reading is supported without any external libraries:
 *          bmp
 *          pnm   (including pbm, pgm, etc)
 *          spix  (raw serialized)
 *  (2) Reading is supported with installation of external libraries:
 *          png
 *          jpg   (standard jfif version)
 *          tiff  (including most varieties of compression)
 *          gif
 *          webp
 *          jp2 (jpeg 2000)
 *  (3) Other file types will get an "unknown format" error.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Output files for ioFormatTest(). */ static const char *FILE_BMP = "/tmp/lept/format/file.bmp"; static const char *FILE_PNG = "/tmp/lept/format/file.png"; static const char *FILE_PNM = "/tmp/lept/format/file.pnm"; static const char *FILE_G3 = "/tmp/lept/format/file_g3.tif"; static const char *FILE_G4 = "/tmp/lept/format/file_g4.tif"; static const char *FILE_RLE = "/tmp/lept/format/file_rle.tif"; static const char *FILE_PB = "/tmp/lept/format/file_packbits.tif"; static const char *FILE_LZW = "/tmp/lept/format/file_lzw.tif"; static const char *FILE_ZIP = "/tmp/lept/format/file_zip.tif"; static const char *FILE_TIFF_JPEG = "/tmp/lept/format/file_jpeg.tif"; static const char *FILE_TIFF = "/tmp/lept/format/file.tif"; static const char *FILE_JPG = "/tmp/lept/format/file.jpg"; static const char *FILE_GIF = "/tmp/lept/format/file.gif"; static const char *FILE_WEBP = "/tmp/lept/format/file.webp"; static const char *FILE_JP2K = "/tmp/lept/format/file.jp2"; /* There are two jp2 formats, and two codecs associated with them: * OPJ_CODEC_J2K (L_J2K_CODEC) is associated with JP2K_CODESTREAM * OPJ_CODEC_JP2 (L_JP2_CODEC) is associated with JP2K_IMAGE_DATA */ static const unsigned char JP2K_CODESTREAM[4] = { 0xff, 0x4f, 0xff, 0x51 }; static const unsigned char JP2K_IMAGE_DATA[12] = { 0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a }; /*---------------------------------------------------------------------* * Top-level functions for reading images from file * *---------------------------------------------------------------------*/ /*! * \brief pixaReadFiles() * * \param[in] dirname * \param[in] substr [optional] substring filter on filenames; can be null * \return pixa, or NULL on error * *
 * Notes:
 *      (1) %dirname is the full path for the directory.
 *      (2) %substr is the part of the file name (excluding
 *          the directory) that is to be matched.  All matching
 *          filenames are read into the Pixa.  If substr is NULL,
 *          all filenames are read into the Pixa.
 * 
*/ PIXA * pixaReadFiles(const char *dirname, const char *substr) { PIXA *pixa; SARRAY *sa; if (!dirname) return (PIXA *)ERROR_PTR("dirname not defined", __func__, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (PIXA *)ERROR_PTR("sa not made", __func__, NULL); pixa = pixaReadFilesSA(sa); sarrayDestroy(&sa); return pixa; } /*! * \brief pixaReadFilesSA() * * \param[in] sa full pathnames for all files * \return pixa, or NULL on error */ PIXA * pixaReadFilesSA(SARRAY *sa) { char *str; l_int32 i, n; PIX *pix; PIXA *pixa; if (!sa) return (PIXA *)ERROR_PTR("sa not defined", __func__, NULL); n = sarrayGetCount(sa); pixa = pixaCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); if ((pix = pixRead(str)) == NULL) { L_WARNING("pix not read from file %s\n", __func__, str); continue; } pixaAddPix(pixa, pix, L_INSERT); } return pixa; } /*! * \brief pixRead() * * \param[in] filename with full pathname or in local directory * \return pix if OK; NULL on error * *
 * Notes:
 *      (1) See at top of file for supported formats.
 * 
*/ PIX * pixRead(const char *filename) { FILE *fp; PIX *pix; if (!filename) return (PIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX*)ERROR_PTR_1("image file not found", filename, __func__, NULL); pix = pixReadStream(fp, 0); fclose(fp); if (!pix) return (PIX *)ERROR_PTR_1("pix not read", filename, __func__, NULL); return pix; } /*! * \brief pixReadWithHint() * * \param[in] filename with full pathname or in local directory * \param[in] hint bitwise OR of L_HINT_* values for jpeg; * use 0 for no hint * \return pix if OK; NULL on error * *
 * Notes:
 *      (1) The hint is not binding, but may be used to optimize jpeg decoding.
 *          Use 0 for no hinting.
 * 
*/ PIX * pixReadWithHint(const char *filename, l_int32 hint) { FILE *fp; PIX *pix; if (!filename) return (PIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR_1("image file not found", filename, __func__, NULL); pix = pixReadStream(fp, hint); fclose(fp); if (!pix) return (PIX *)ERROR_PTR_1("image not returned", filename, __func__, NULL); return pix; } /*! * \brief pixReadIndexed() * * \param[in] sa string array of full pathnames * \param[in] index into pathname array * \return pix if OK; null if not found * *
 * Notes:
 *      (1) This function is useful for selecting image files from a
 *          directory, where the integer %index is embedded into
 *          the file name.
 *      (2) This is typically done by generating the sarray using
 *          getNumberedPathnamesInDirectory(), so that the %index
 *          pathname would have the number %index in it.  The size
 *          of the sarray should be the largest number (plus 1) appearing
 *          in the file names, respecting the constraints in the
 *          call to getNumberedPathnamesInDirectory().
 *      (3) Consequently, for some indices into the sarray, there may
 *          be no pathnames in the directory containing that number.
 *          By convention, we place empty C strings ("") in those
 *          locations in the sarray, and it is not an error if such
 *          a string is encountered and no pix is returned.
 *          Therefore, the caller must verify that a pix is returned.
 *      (4) See convertSegmentedPagesToPS() in src/psio1.c for an
 *          example of usage.
 * 
*/ PIX * pixReadIndexed(SARRAY *sa, l_int32 index) { char *fname; l_int32 n; PIX *pix; if (!sa) return (PIX *)ERROR_PTR("sa not defined", __func__, NULL); n = sarrayGetCount(sa); if (index < 0 || index >= n) return (PIX *)ERROR_PTR("index out of bounds", __func__, NULL); fname = sarrayGetString(sa, index, L_NOCOPY); if (fname[0] == '\0') return NULL; if ((pix = pixRead(fname)) == NULL) { L_ERROR("pix not read from file %s\n", __func__, fname); return NULL; } return pix; } /*! * \brief pixReadStream() * * \param[in] fp file stream * \param[in] hint bitwise OR of L_HINT_* values for jpeg; 0 for no hint * \return pix if OK; NULL on error * *
 * Notes:
 *      (1) The hint only applies to jpeg.
 * 
*/ PIX * pixReadStream(FILE *fp, l_int32 hint) { l_int32 format, ret, valid; l_uint8 *comment; PIX *pix; PIXCMAP *cmap; if (!fp) return (PIX *)ERROR_PTR("stream not defined", __func__, NULL); pix = NULL; findFileFormatStream(fp, &format); switch (format) { case IFF_BMP: if ((pix = pixReadStreamBmp(fp)) == NULL ) return (PIX *)ERROR_PTR( "bmp: no pix returned", __func__, NULL); break; case IFF_JFIF_JPEG: if ((pix = pixReadStreamJpeg(fp, 0, 1, NULL, hint)) == NULL) return (PIX *)ERROR_PTR( "jpeg: no pix returned", __func__, NULL); ret = fgetJpegComment(fp, &comment); if (!ret && comment) pixSetText(pix, (char *)comment); LEPT_FREE(comment); break; case IFF_PNG: if ((pix = pixReadStreamPng(fp)) == NULL) return (PIX *)ERROR_PTR("png: no pix returned", __func__, NULL); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: case IFF_TIFF_JPEG: if ((pix = pixReadStreamTiff(fp, 0)) == NULL) /* page 0 by default */ return (PIX *)ERROR_PTR("tiff: no pix returned", __func__, NULL); break; case IFF_PNM: if ((pix = pixReadStreamPnm(fp)) == NULL) return (PIX *)ERROR_PTR("pnm: no pix returned", __func__, NULL); break; case IFF_GIF: if ((pix = pixReadStreamGif(fp)) == NULL) return (PIX *)ERROR_PTR("gif: no pix returned", __func__, NULL); break; case IFF_JP2: if ((pix = pixReadStreamJp2k(fp, 1, NULL, 0, 0)) == NULL) return (PIX *)ERROR_PTR("jp2: no pix returned", __func__, NULL); break; case IFF_WEBP: if ((pix = pixReadStreamWebP(fp)) == NULL) return (PIX *)ERROR_PTR("webp: no pix returned", __func__, NULL); break; case IFF_PS: L_ERROR("PostScript reading is not supported\n", __func__); return NULL; case IFF_LPDF: L_ERROR("Pdf reading is not supported\n", __func__); return NULL; case IFF_SPIX: if ((pix = pixReadStreamSpix(fp)) == NULL) return (PIX *)ERROR_PTR("spix: no pix returned", __func__, NULL); break; case IFF_UNKNOWN: return (PIX *)ERROR_PTR( "Unknown format: no pix returned", __func__, NULL); } if (pix) { pixSetInputFormat(pix, format); if ((cmap = pixGetColormap(pix))) { pixcmapIsValid(cmap, pix, &valid); if (!valid) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } } } return pix; } /*---------------------------------------------------------------------* * Read header information from file * *---------------------------------------------------------------------*/ /*! * \brief pixReadHeader() * * \param[in] filename with full pathname or in local directory * \param[out] pformat [optional] file format * \param[out] pw, ph [optional] width and height * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel 1, 3 or 4 * \param[out] piscmap [optional] 1 if cmap exists; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This reads the actual headers for jpeg, png, tiff and pnm.
 *          For bmp and gif, we cheat and read the entire file into a pix,
 *          from which we extract the "header" information.
 * 
*/ l_ok pixReadHeader(const char *filename, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 format, ret, w, h, d, bps, spp, iscmap; l_int32 type; /* ignored */ FILE *fp; PIX *pix; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (pformat) *pformat = 0; iscmap = 0; /* init to false */ if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); findFileFormatStream(fp, &format); fclose(fp); switch (format) { case IFF_BMP: /* cheating: reading the entire file */ if ((pix = pixRead(filename)) == NULL) return ERROR_INT_1( "bmp: pix not read", filename, __func__, 1); pixGetDimensions(pix, &w, &h, &d); bps = (d == 32) ? 8 : d; spp = pixGetSpp(pix); iscmap = (pixGetColormap(pix)) ? 1 : 0; pixDestroy(&pix); break; case IFF_JFIF_JPEG: ret = readHeaderJpeg(filename, &w, &h, &spp, NULL, NULL); bps = 8; if (ret) return ERROR_INT_1("jpeg: no header info returned", filename, __func__, 1); break; case IFF_PNG: ret = readHeaderPng(filename, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT_1("png: no header info returned", filename, __func__, 1); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: case IFF_TIFF_JPEG: /* Reading page 0 by default; possibly redefine format */ ret = readHeaderTiff(filename, 0, &w, &h, &bps, &spp, NULL, &iscmap, &format); if (ret) return ERROR_INT_1("tiff: no header info returned", filename, __func__, 1); break; case IFF_PNM: ret = readHeaderPnm(filename, &w, &h, &d, &type, &bps, &spp); if (ret) return ERROR_INT_1("pnm: no header info returned", filename, __func__, 1); break; case IFF_GIF: /* cheating: reading the entire file */ if ((pix = pixRead(filename)) == NULL) return ERROR_INT_1( "gif: pix not read", filename, __func__, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); iscmap = 1; /* always colormapped; max 256 colors */ spp = 1; bps = d; break; case IFF_JP2: ret = readHeaderJp2k(filename, &w, &h, &bps, &spp, NULL); break; case IFF_WEBP: if (readHeaderWebP(filename, &w, &h, &spp)) return ERROR_INT_1("webp: no header info returned", filename, __func__, 1); bps = 8; break; case IFF_PS: if (pformat) *pformat = format; return ERROR_INT("PostScript reading is not supported\n", __func__, 1); case IFF_LPDF: if (pformat) *pformat = format; return ERROR_INT("Pdf reading is not supported\n", __func__, 1); case IFF_SPIX: ret = readHeaderSpix(filename, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT_1("spix: no header info returned", filename, __func__, 1); break; case IFF_UNKNOWN: return ERROR_INT_1("unknown format in file", filename, __func__, 1); } if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) *piscmap = iscmap; if (pformat) *pformat = format; return 0; } /*---------------------------------------------------------------------* * Format finders * *---------------------------------------------------------------------*/ /*! * \brief findFileFormat() * * \param[in] filename * \param[out] pformat found format * \return 0 if OK, 1 on error or if format is not recognized */ l_ok findFileFormat(const char *filename, l_int32 *pformat) { l_int32 ret; FILE *fp; if (!pformat) return ERROR_INT("&format not defined", __func__, 1); *pformat = IFF_UNKNOWN; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = findFileFormatStream(fp, pformat); fclose(fp); return ret; } /*! * \brief findFileFormatStream() * * \param[in] fp file stream * \param[out] pformat found format * \return 0 if OK, 1 on error or if format is not recognized * *
 * Notes:
 *      (1) Important: Side effect -- this resets fp to BOF.
 * 
*/ l_ok findFileFormatStream(FILE *fp, l_int32 *pformat) { l_uint8 firstbytes[13]; l_int32 format; if (!pformat) return ERROR_INT("&format not defined", __func__, 1); *pformat = IFF_UNKNOWN; if (!fp) return ERROR_INT("stream not defined", __func__, 1); rewind(fp); if (fnbytesInFile(fp) < 12) return ERROR_INT("truncated file", __func__, 1); if (fread(&firstbytes, 1, 12, fp) != 12) return ERROR_INT("failed to read first 12 bytes of file", __func__, 1); firstbytes[12] = 0; rewind(fp); findFileFormatBuffer(firstbytes, &format); if (format == IFF_TIFF) { findTiffCompression(fp, &format); rewind(fp); } *pformat = format; if (format == IFF_UNKNOWN) return 1; else return 0; } /*! * \brief findFileFormatBuffer() * * \param[in] buf byte buffer at least 12 bytes in size; we can't check * \param[out] pformat found format * \return 0 if OK, 1 on error or if format is not recognized * *
 * Notes:
 *      (1) This determines the file format from the first 12 bytes in
 *          the compressed data stream, which are stored in memory.
 *      (2) For tiff files, this returns IFF_TIFF.  The specific tiff
 *          compression is then determined using findTiffCompression().
 * 
*/ l_ok findFileFormatBuffer(const l_uint8 *buf, l_int32 *pformat) { l_uint16 twobytepw; if (!pformat) return ERROR_INT("&format not defined", __func__, 1); *pformat = IFF_UNKNOWN; if (!buf) return ERROR_INT("byte buffer not defined", __func__, 0); /* Check the bmp and tiff 2-byte header ids */ ((char *)(&twobytepw))[0] = buf[0]; ((char *)(&twobytepw))[1] = buf[1]; if (convertOnBigEnd16(twobytepw) == BMP_ID) { *pformat = IFF_BMP; return 0; } if (twobytepw == TIFF_BIGEND_ID || twobytepw == TIFF_LITTLEEND_ID) { *pformat = IFF_TIFF; return 0; } /* Check for the p*m 2-byte header ids */ if ((buf[0] == 'P' && buf[1] == '4') || /* newer packed */ (buf[0] == 'P' && buf[1] == '1')) { /* old ASCII format */ *pformat = IFF_PNM; return 0; } if ((buf[0] == 'P' && buf[1] == '5') || /* newer */ (buf[0] == 'P' && buf[1] == '2')) { /* old */ *pformat = IFF_PNM; return 0; } if ((buf[0] == 'P' && buf[1] == '6') || /* newer */ (buf[0] == 'P' && buf[1] == '3')) { /* old */ *pformat = IFF_PNM; return 0; } if (buf[0] == 'P' && buf[1] == '7') { /* new arbitrary (PAM) */ *pformat = IFF_PNM; return 0; } /* Consider the first 11 bytes of the standard JFIF JPEG header: * - The first two bytes are the most important: 0xffd8. * - The next two bytes are the jfif marker: 0xffe0. * Not all jpeg files have this marker. * - The next two bytes are the header length. * - The next 5 bytes are a null-terminated string. * For JFIF, the string is "JFIF", naturally. For others it * can be "Exif" or just about anything else. * - Because of all this variability, we only check the first * two byte marker. All jpeg files are identified as * IFF_JFIF_JPEG. */ if (buf[0] == 0xff && buf[1] == 0xd8) { *pformat = IFF_JFIF_JPEG; return 0; } /* Check for the 8 byte PNG signature (png_signature in png.c): * {137, 80, 78, 71, 13, 10, 26, 10} */ if (buf[0] == 137 && buf[1] == 80 && buf[2] == 78 && buf[3] == 71 && buf[4] == 13 && buf[5] == 10 && buf[6] == 26 && buf[7] == 10) { *pformat = IFF_PNG; return 0; } /* Look for "GIF87a" or "GIF89a" */ if (buf[0] == 'G' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == '8' && (buf[4] == '7' || buf[4] == '9') && buf[5] == 'a') { *pformat = IFF_GIF; return 0; } /* Check for both types of jp2k file */ if (memcmp(buf, JP2K_CODESTREAM, 4) == 0 || memcmp(buf, JP2K_IMAGE_DATA, 12) == 0) { *pformat = IFF_JP2; return 0; } /* Check for webp */ if (buf[0] == 'R' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == 'F' && buf[8] == 'W' && buf[9] == 'E' && buf[10] == 'B' && buf[11] == 'P') { *pformat = IFF_WEBP; return 0; } /* Check for ps */ if (buf[0] == '%' && buf[1] == '!' && buf[2] == 'P' && buf[3] == 'S' && buf[4] == '-' && buf[5] == 'A' && buf[6] == 'd' && buf[7] == 'o' && buf[8] == 'b' && buf[9] == 'e') { *pformat = IFF_PS; return 0; } /* Check for pdf */ if (buf[0] == '%' && buf[1] == 'P' && buf[2] == 'D' && buf[3] == 'F' && buf[4] == '-' && buf[5] == '1') { *pformat = IFF_LPDF; return 0; } /* Check for "spix" serialized pix */ if (buf[0] == 's' && buf[1] == 'p' && buf[2] == 'i' && buf[3] == 'x') { *pformat = IFF_SPIX; return 0; } /* File format identifier not found; unknown */ return 1; } /*! * \brief fileFormatIsTiff() * * \param[in] fp file stream * \return 1 if file is tiff; 0 otherwise or on error */ l_int32 fileFormatIsTiff(FILE *fp) { l_int32 format; if (!fp) return ERROR_INT("stream not defined", __func__, 0); findFileFormatStream(fp, &format); if (format == IFF_TIFF || format == IFF_TIFF_PACKBITS || format == IFF_TIFF_RLE || format == IFF_TIFF_G3 || format == IFF_TIFF_G4 || format == IFF_TIFF_LZW || format == IFF_TIFF_ZIP || format == IFF_TIFF_JPEG) return 1; else return 0; } /*---------------------------------------------------------------------* * Read from memory * *---------------------------------------------------------------------*/ /*! * \brief pixReadMem() * * \param[in] data const; encoded * \param[in] size size of data * \return pix, or NULL on error * *
 * Notes:
 *      (1) This is a variation of pixReadStream(), where the data is read
 *          from a memory buffer rather than a file.
 *      (2) On Windows, this only reads tiff formatted files directly from
 *          memory.  For other formats, it writes to a temp file and
 *          decompresses from file.
 *      (3) findFileFormatBuffer() requires up to 12 bytes to decide on
 *          the format.  That determines the constraint here.  But in
 *          fact the data must contain the entire compressed string for
 *          the image.
 * 
*/ PIX * pixReadMem(const l_uint8 *data, size_t size) { l_int32 format, valid; PIX *pix; PIXCMAP *cmap; if (!data) return (PIX *)ERROR_PTR("data not defined", __func__, NULL); if (size < 12) return (PIX *)ERROR_PTR("size < 12", __func__, NULL); pix = NULL; findFileFormatBuffer(data, &format); switch (format) { case IFF_BMP: if ((pix = pixReadMemBmp(data, size)) == NULL ) return (PIX *)ERROR_PTR( "bmp: no pix returned", __func__, NULL); break; case IFF_JFIF_JPEG: if ((pix = pixReadMemJpeg(data, size, 0, 1, NULL, 0)) == NULL) return (PIX *)ERROR_PTR( "jpeg: no pix returned", __func__, NULL); break; case IFF_PNG: if ((pix = pixReadMemPng(data, size)) == NULL) return (PIX *)ERROR_PTR("png: no pix returned", __func__, NULL); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: /* Reading page 0 by default */ if ((pix = pixReadMemTiff(data, size, 0)) == NULL) return (PIX *)ERROR_PTR("tiff: no pix returned", __func__, NULL); break; case IFF_PNM: if ((pix = pixReadMemPnm(data, size)) == NULL) return (PIX *)ERROR_PTR("pnm: no pix returned", __func__, NULL); break; case IFF_GIF: if ((pix = pixReadMemGif(data, size)) == NULL) return (PIX *)ERROR_PTR("gif: no pix returned", __func__, NULL); break; case IFF_JP2: if ((pix = pixReadMemJp2k(data, size, 1, NULL, 0, 0)) == NULL) return (PIX *)ERROR_PTR("jp2k: no pix returned", __func__, NULL); break; case IFF_WEBP: if ((pix = pixReadMemWebP(data, size)) == NULL) return (PIX *)ERROR_PTR("webp: no pix returned", __func__, NULL); break; case IFF_PS: L_ERROR("PostScript reading is not supported\n", __func__); return NULL; case IFF_LPDF: L_ERROR("Pdf reading is not supported\n", __func__); return NULL; case IFF_SPIX: if ((pix = pixReadMemSpix(data, size)) == NULL) return (PIX *)ERROR_PTR("spix: no pix returned", __func__, NULL); break; case IFF_UNKNOWN: return (PIX *)ERROR_PTR("Unknown format: no pix returned", __func__, NULL); } /* Set the input format. For tiff reading from memory we lose * the actual input format; for 1 bpp, default to G4. Also * verify that the colormap is valid. */ if (pix) { if (format == IFF_TIFF && pixGetDepth(pix) == 1) format = IFF_TIFF_G4; pixSetInputFormat(pix, format); if ((cmap = pixGetColormap(pix))) { pixcmapIsValid(cmap, pix, &valid); if (!valid) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } } pixSetPadBits(pix, 0); } return pix; } /*! * \brief pixReadHeaderMem() * * \param[in] data const; encoded * \param[in] size size of data * \param[out] pformat [optional] image format * \param[out] pw, ph [optional] width and height * \param[out] pbps [optional] bits/sample * \param[out] pspp [optional] samples/pixel 1, 3 or 4 * \param[out] piscmap [optional] 1 if cmap exists; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This reads the actual headers for jpeg, png, tiff, jp2k and pnm.
 *          For bmp and gif, we cheat and read all the data into a pix,
 *          from which we extract the "header" information.
 *      (2) The amount of data required depends on the format.  For
 *          png, it requires less than 30 bytes, but for jpeg it can
 *          require most of the compressed file.  In practice, the data
 *          is typically the entire compressed file in memory.
 *      (3) findFileFormatBuffer() requires up to 12 bytes to decide on
 *          the format, which we require.
 * 
*/ l_ok pixReadHeaderMem(const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 format, ret, w, h, d, bps, spp, iscmap; l_int32 type; /* not used */ PIX *pix; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (pformat) *pformat = 0; iscmap = 0; /* init to false */ if (!data) return ERROR_INT("data not defined", __func__, 1); if (size < 12) return ERROR_INT("size < 12", __func__, 1); findFileFormatBuffer(data, &format); switch (format) { case IFF_BMP: /* cheating: read the pix */ if ((pix = pixReadMemBmp(data, size)) == NULL) return ERROR_INT( "bmp: pix not read", __func__, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); bps = (d == 32) ? 8 : d; spp = (d == 32) ? 3 : 1; break; case IFF_JFIF_JPEG: ret = readHeaderMemJpeg(data, size, &w, &h, &spp, NULL, NULL); bps = 8; if (ret) return ERROR_INT( "jpeg: no header info returned", __func__, 1); break; case IFF_PNG: ret = readHeaderMemPng(data, size, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "png: no header info returned", __func__, 1); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: case IFF_TIFF_JPEG: /* Reading page 0 by default; possibly redefine format */ ret = readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, &iscmap, &format); if (ret) return ERROR_INT( "tiff: no header info returned", __func__, 1); break; case IFF_PNM: ret = readHeaderMemPnm(data, size, &w, &h, &d, &type, &bps, &spp); if (ret) return ERROR_INT( "pnm: no header info returned", __func__, 1); break; case IFF_GIF: /* cheating: read the pix */ if ((pix = pixReadMemGif(data, size)) == NULL) return ERROR_INT( "gif: pix not read", __func__, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); iscmap = 1; /* always colormapped; max 256 colors */ spp = 1; bps = d; break; case IFF_JP2: ret = readHeaderMemJp2k(data, size, &w, &h, &bps, &spp, NULL); break; case IFF_WEBP: bps = 8; ret = readHeaderMemWebP(data, size, &w, &h, &spp); break; case IFF_PS: if (pformat) *pformat = format; return ERROR_INT("PostScript reading is not supported\n", __func__, 1); case IFF_LPDF: if (pformat) *pformat = format; return ERROR_INT("Pdf reading is not supported\n", __func__, 1); case IFF_SPIX: ret = sreadHeaderSpix((l_uint32 *)data, size, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "pnm: no header info returned", __func__, 1); break; case IFF_UNKNOWN: return ERROR_INT("unknown format; no data returned", __func__, 1); } if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) *piscmap = iscmap; if (pformat) *pformat = format; return 0; } /*---------------------------------------------------------------------* * Output image file information * *---------------------------------------------------------------------*/ extern const char *ImageFileFormatExtensions[]; /*! * \brief writeImageFileInfo() * * \param[in] filename input file * \param[in] fpout output file stream * \param[in] headeronly 1 to read only the header; 0 to read both * the header and the input file * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If headeronly == 0 and the image has spp == 4,this will
 *          also call pixDisplayLayersRGBA() to display the image
 *          in three views.
 *      (2) This is a debug function that changes the value of
 *          var_PNG_STRIP_16_TO_8 to 1 (the default).
 * 
*/ l_ok writeImageFileInfo(const char *filename, FILE *fpout, l_int32 headeronly) { char *text; l_int32 w, h, d, wpl, count, npages, color; l_int32 format, bps, spp, iscmap, xres, yres, transparency; FILE *fpin; PIX *pix, *pixt; PIXCMAP *cmap; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!fpout) return ERROR_INT("stream not defined", __func__, 1); /* Read the header */ if (pixReadHeader(filename, &format, &w, &h, &bps, &spp, &iscmap)) { L_ERROR("failure to read header of %s\n", __func__, filename); return 1; } fprintf(fpout, "===============================================\n" "Reading the header:\n"); fprintf(fpout, " input image format type: %s\n", ImageFileFormatExtensions[format]); fprintf(fpout, " w = %d, h = %d, bps = %d, spp = %d, iscmap = %d\n", w, h, bps, spp, iscmap); findFileFormat(filename, &format); if (format == IFF_JP2) { fpin = fopenReadStream(filename); fgetJp2kResolution(fpin, &xres, &yres); if (fpin) fclose(fpin); fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); } else if (format == IFF_PNG) { fpin = fopenReadStream(filename); fgetPngResolution(fpin, &xres, &yres); if (fpin) fclose(fpin); fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); if (iscmap) { fpin = fopenReadStream(filename); fgetPngColormapInfo(fpin, &cmap, &transparency); if (fpin) fclose(fpin); if (transparency) fprintf(fpout, " colormap has transparency\n"); else fprintf(fpout, " colormap does not have transparency\n"); pixcmapWriteStream(fpout, cmap); pixcmapDestroy(&cmap); } } else if (format == IFF_JFIF_JPEG) { fpin = fopenReadStream(filename); fgetJpegResolution(fpin, &xres, &yres); if (fpin) fclose(fpin); fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); } if (headeronly) return 0; /* Read the full image. Note that when we read an image that * has transparency in a colormap, we convert it to RGBA. */ fprintf(fpout, "===============================================\n" "Reading the full image:\n"); /* Preserve 16 bpp if the format is png */ if (format == IFF_PNG && bps == 16) l_pngSetReadStrip16To8(0); if ((pix = pixRead(filename)) == NULL) { L_ERROR("failure to read full image of %s\n", __func__, filename); return 1; } format = pixGetInputFormat(pix); pixGetDimensions(pix, &w, &h, &d); wpl = pixGetWpl(pix); spp = pixGetSpp(pix); fprintf(fpout, " input image format type: %s\n", ImageFileFormatExtensions[format]); fprintf(fpout, " w = %d, h = %d, d = %d, spp = %d, wpl = %d\n", w, h, d, spp, wpl); fprintf(fpout, " xres = %d, yres = %d\n", pixGetXRes(pix), pixGetYRes(pix)); text = pixGetText(pix); if (text) /* not null */ fprintf(fpout, " text: %s\n", text); cmap = pixGetColormap(pix); if (cmap) { pixcmapHasColor(cmap, &color); if (color) fprintf(fpout, " colormap exists and has color values:"); else fprintf(fpout, " colormap exists and has only gray values:"); pixcmapWriteStream(fpout, pixGetColormap(pix)); } else fprintf(fpout, " colormap does not exist\n"); if (format == IFF_TIFF || format == IFF_TIFF_G4 || format == IFF_TIFF_G3 || format == IFF_TIFF_PACKBITS) { fprintf(fpout, " Tiff header information:\n"); fpin = fopenReadStream(filename); tiffGetCount(fpin, &npages); if (fpin) fclose(fpin); if (npages == 1) fprintf(fpout, " One page in file\n"); else fprintf(fpout, " %d pages in file\n", npages); fprintTiffInfo(fpout, filename); } if (d == 1) { pixCountPixels(pix, &count, NULL); pixGetDimensions(pix, &w, &h, NULL); fprintf(fpout, " 1 bpp: foreground pixel fraction ON/Total = %g\n", (l_float32)count / (l_float32)(w * h)); } fprintf(fpout, "===============================================\n"); /* If there is an alpha component, visualize it. Note that when * alpha == 0, the rgb layer is transparent. We visualize the * result when a white background is visible through the * transparency layer. */ if (pixGetSpp(pix) == 4) { pixt = pixDisplayLayersRGBA(pix, 0xffffff00, 600); pixDisplay(pixt, 100, 100); pixDestroy(&pixt); } if (format == IFF_PNG && bps == 16) l_pngSetReadStrip16To8(1); /* return to default if format is png */ pixDestroy(&pix); return 0; } /*---------------------------------------------------------------------* * Test function for I/O with different formats * *---------------------------------------------------------------------*/ /*! * \brief ioFormatTest() * * \param[in] filename input image file * \return 0 if OK; 1 on error or if the test fails * *
 * Notes:
 *      (1) This writes and reads a set of output files losslessly
 *          in different formats to /tmp/format/, and tests that the
 *          result before and after is unchanged.
 *      (2) This should work properly on input images of any depth,
 *          with and without colormaps.
 *      (3) All supported formats are tested for bmp, png, tiff and
 *          non-ascii pnm.  Ascii pnm also works (but who'd ever want
 *          to use it?)   We allow 2 bpp bmp, although it's not
 *          supported elsewhere.  And we don't support reading
 *          16 bpp png, although this can be turned on in pngio.c.
 *      (4) This silently skips png or tiff testing if HAVE_LIBPNG
 *          or HAVE_LIBTIFF are 0, respectively.
 * 
*/ l_ok ioFormatTest(const char *filename) { l_int32 w, h, d, depth, equal, problems; l_float32 diff; BOX *box; PIX *pixs, *pixc, *pix1, *pix2; PIXCMAP *cmap; if (!filename) return ERROR_INT("filename not defined", __func__, 1); /* Read the input file and limit the size */ if ((pix1 = pixRead(filename)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); pixGetDimensions(pix1, &w, &h, NULL); if (w > 250 && h > 250) { /* take the central 250 x 250 region */ box = boxCreate(w / 2 - 125, h / 2 - 125, 250, 250); pixs = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); } else { pixs = pixClone(pix1); } pixDestroy(&pix1); lept_mkdir("lept/format"); /* Note that the reader automatically removes colormaps * from 1 bpp BMP images, but not from 8 bpp BMP images. * Therefore, if our 8 bpp image initially doesn't have a * colormap, we are going to need to remove it from any * pix read from a BMP file. */ pixc = pixClone(pixs); /* laziness */ /* This does not test the alpha layer pixels, because most * formats don't support it. Remove any alpha. */ if (pixGetSpp(pixc) == 4) pixSetSpp(pixc, 3); cmap = pixGetColormap(pixc); /* colormap; can be NULL */ d = pixGetDepth(pixc); problems = FALSE; /* ----------------------- BMP -------------------------- */ /* BMP works for 1, 2, 4, 8 and 32 bpp images. * It always writes colormaps for 1 and 8 bpp, so we must * remove it after readback if the input image doesn't have * a colormap. Although we can write/read 2 bpp BMP, nobody * else can read them! */ if (d == 1 || d == 8) { L_INFO("write/read bmp\n", __func__); pixWrite(FILE_BMP, pixc, IFF_BMP); pix1 = pixRead(FILE_BMP); if (!cmap) pix2 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); else pix2 = pixClone(pix1); pixEqual(pixc, pix2, &equal); if (!equal) { L_INFO(" **** bad bmp image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); } if (d == 2 || d == 4 || d == 32) { L_INFO("write/read bmp\n", __func__); pixWrite(FILE_BMP, pixc, IFF_BMP); pix1 = pixRead(FILE_BMP); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad bmp image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); } /* ----------------------- PNG -------------------------- */ #if HAVE_LIBPNG /* PNG works for all depths, but here, because we strip * 16 --> 8 bpp on reading, we don't test png for 16 bpp. */ if (d != 16) { L_INFO("write/read png\n", __func__); pixWrite(FILE_PNG, pixc, IFF_PNG); pix1 = pixRead(FILE_PNG); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad png image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); } #endif /* HAVE_LIBPNG */ /* ----------------------- TIFF -------------------------- */ #if HAVE_LIBTIFF && HAVE_LIBJPEG /* TIFF works for 1, 2, 4, 8, 16 and 32 bpp images. * Because 8 bpp tiff always writes 256 entry colormaps, the * colormap sizes may be different for 8 bpp images with * colormap; we are testing if the image content is the same. * Likewise, the 2 and 4 bpp tiff images with colormaps * have colormap sizes 4 and 16, rsp. This test should * work properly on the content, regardless of the number * of color entries in pixc. */ /* tiff uncompressed works for all pixel depths */ L_INFO("write/read uncompressed tiff\n", __func__); pixWrite(FILE_TIFF, pixc, IFF_TIFF); pix1 = pixRead(FILE_TIFF); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff uncompressed image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); /* tiff lzw works for all pixel depths */ L_INFO("write/read lzw compressed tiff\n", __func__); pixWrite(FILE_LZW, pixc, IFF_TIFF_LZW); pix1 = pixRead(FILE_LZW); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff lzw compressed image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); /* tiff adobe deflate (zip) works for all pixel depths */ L_INFO("write/read zip compressed tiff\n", __func__); pixWrite(FILE_ZIP, pixc, IFF_TIFF_ZIP); pix1 = pixRead(FILE_ZIP); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff zip compressed image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); /* tiff jpeg encoding works for grayscale and rgb */ if (d == 8 || d == 32) { PIX *pixc1; L_INFO("write/read jpeg compressed tiff\n", __func__); if (d == 8 && pixGetColormap(pixc)) { pixc1 = pixRemoveColormap(pixc, REMOVE_CMAP_BASED_ON_SRC); pixWrite(FILE_TIFF_JPEG, pixc1, IFF_TIFF_JPEG); if ((pix1 = pixRead(FILE_TIFF_JPEG)) == NULL) { L_INFO(" did not read FILE_TIFF_JPEG\n", __func__); problems = TRUE; } pixDestroy(&pixc1); } else { pixWrite(FILE_TIFF_JPEG, pixc, IFF_TIFF_JPEG); pix1 = pixRead(FILE_TIFF_JPEG); if (d == 8) { pixCompareGray(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } else { pixCompareRGB(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } if (diff > 8.0) { L_INFO(" **** bad tiff jpeg compressed image: " "d = %d, diff = %5.2f ****\n", __func__, d, diff); problems = TRUE; } } pixDestroy(&pix1); } /* tiff g4, g3, rle and packbits work for 1 bpp */ if (d == 1) { L_INFO("write/read g4 compressed tiff\n", __func__); pixWrite(FILE_G4, pixc, IFF_TIFF_G4); pix1 = pixRead(FILE_G4); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff g4 image ****\n", __func__); problems = TRUE; } pixDestroy(&pix1); L_INFO("write/read g3 compressed tiff\n", __func__); pixWrite(FILE_G3, pixc, IFF_TIFF_G3); pix1 = pixRead(FILE_G3); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff g3 image ****\n", __func__); problems = TRUE; } pixDestroy(&pix1); L_INFO("write/read rle compressed tiff\n", __func__); pixWrite(FILE_RLE, pixc, IFF_TIFF_RLE); pix1 = pixRead(FILE_RLE); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff rle image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); L_INFO("write/read packbits compressed tiff\n", __func__); pixWrite(FILE_PB, pixc, IFF_TIFF_PACKBITS); pix1 = pixRead(FILE_PB); pixEqual(pixc, pix1, &equal); if (!equal) { L_INFO(" **** bad tiff packbits image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); } #endif /* HAVE_LIBTIFF && HAVE_LIBJPEG */ /* ----------------------- PNM -------------------------- */ /* pnm works for 1, 2, 4, 8, 16 and 32 bpp. * pnm doesn't have colormaps, so when we write colormapped * pix out as pnm, the colormap is removed. Thus for the test, * we must remove the colormap from pixc before testing. */ L_INFO("write/read pnm\n", __func__); pixWrite(FILE_PNM, pixc, IFF_PNM); pix1 = pixRead(FILE_PNM); if (cmap) pix2 = pixRemoveColormap(pixc, REMOVE_CMAP_BASED_ON_SRC); else pix2 = pixClone(pixc); pixEqual(pix1, pix2, &equal); if (!equal) { L_INFO(" **** bad pnm image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); /* ----------------------- GIF -------------------------- */ #if HAVE_LIBGIF /* GIF works for only 1 and 8 bpp, colormapped */ if (d != 8 || !cmap) pix1 = pixConvertTo8(pixc, 1); else pix1 = pixClone(pixc); L_INFO("write/read gif\n", __func__); pixWrite(FILE_GIF, pix1, IFF_GIF); pix2 = pixRead(FILE_GIF); pixEqual(pix1, pix2, &equal); if (!equal) { L_INFO(" **** bad gif image: d = %d ****\n", __func__, d); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); #endif /* HAVE_LIBGIF */ /* ----------------------- JPEG ------------------------- */ #if HAVE_LIBJPEG /* JPEG works for only 8 bpp gray and rgb */ if (cmap || d > 8) pix1 = pixConvertTo32(pixc); else pix1 = pixConvertTo8(pixc, 0); depth = pixGetDepth(pix1); L_INFO("write/read jpeg\n", __func__); pixWrite(FILE_JPG, pix1, IFF_JFIF_JPEG); pix2 = pixRead(FILE_JPG); if (depth == 8) { pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } else { pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } if (diff > 8.0) { L_INFO(" **** bad jpeg image: d = %d, diff = %5.2f ****\n", __func__, depth, diff); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); #endif /* HAVE_LIBJPEG */ /* ----------------------- WEBP ------------------------- */ #if HAVE_LIBWEBP /* WEBP works for rgb and rgba */ if (cmap || d <= 16) pix1 = pixConvertTo32(pixc); else pix1 = pixClone(pixc); depth = pixGetDepth(pix1); L_INFO("write/read webp\n", __func__); pixWrite(FILE_WEBP, pix1, IFF_WEBP); pix2 = pixRead(FILE_WEBP); pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); if (diff > 5.0) { L_INFO(" **** bad webp image: d = %d, diff = %5.2f ****\n", __func__, depth, diff); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); #endif /* HAVE_LIBWEBP */ /* ----------------------- JP2K ------------------------- */ #if HAVE_LIBJP2K /* JP2K works for only 8 bpp gray, rgb and rgba */ if (cmap || d > 8) pix1 = pixConvertTo32(pixc); else pix1 = pixConvertTo8(pixc, 0); depth = pixGetDepth(pix1); L_INFO("write/read jp2k\n", __func__); pixWrite(FILE_JP2K, pix1, IFF_JP2); pix2 = pixRead(FILE_JP2K); if (depth == 8) { pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } else { pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); } lept_stderr("diff = %7.3f\n", diff); if (diff > 7.0) { L_INFO(" **** bad jp2k image: d = %d, diff = %5.2f ****\n", __func__, depth, diff); problems = TRUE; } pixDestroy(&pix1); pixDestroy(&pix2); #endif /* HAVE_LIBJP2K */ if (problems == FALSE) L_INFO("All formats read and written OK!\n", __func__); pixDestroy(&pixc); pixDestroy(&pixs); return problems; } leptonica-1.86.0/src/recog.h000066400000000000000000000361761506303110300156300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_RECOG_H #define LEPTONICA_RECOG_H /*! * \file recog.h * *
 *     This is a simple utility for training and recognizing individual
 *     machine-printed text characters.  It is designed to be adapted
 *     to a particular set of character images; e.g., from a book.
 *
 *     There are two methods of training the recognizer.  In the most
 *     simple, a set of bitmaps has been labeled by some means, such
 *     a generic OCR program.  This is input either one template at a time
 *     or as a pixa of templates, to a function that creates a recog.
 *     If in a pixa, the text string label must be embedded in the
 *     text field of each pix.
 *
 *     If labeled data is not available, we start with a bootstrap
 *     recognizer (BSR) that has labeled data from a variety of sources.
 *     These images are scaled, typically to a fixed height, and then
 *     fed similarly scaled unlabeled images from the source (e.g., book),
 *     and the BSR attempts to identify them.  All images that have
 *     a high enough correlation score with one of the templates in the
 *     BSR are emitted in a pixa, which now holds unscaled and labeled
 *     templates from the source.  This is the generator for a book adapted
 *     recognizer (BAR).
 *
 *     The pixa should always be thought of as the primary structure.
 *     It is the generator for the recog, because a recog is built
 *     from a pixa of unscaled images.
 *
 *     New image templates can be added to a recog as long as it is
 *     in training mode.  Once training is finished, to add templates
 *     it is necessary to extract the generating pixa, add templates
 *     to that pixa, and make a new recog.  Similarly, we do not
 *     join two recog; instead, we simply join their generating pixa,
 *     and make a recog from that.
 *
 *     To remove outliers from a pixa of labeled pix, make a recog,
 *     determine the outliers, and generate a new pixa with the
 *     outliers removed.  The outliers are determined by building
 *     special templates for each character set that are scaled averages
 *     of the individual templates.  Then a correlation score is found
 *     between each template and the averaged templates.  There are
 *     two implementations; outliers are determined as either:
 *      (1) a template having a correlation score with its class average
 *          that is below a threshold, or
 *      (2) a template having a correlation score with its class average
 *          that is smaller than the correlation score with the average
 *          of another class.
 *     Outliers are removed from the generating pixa.  Scaled averaging
 *     is only performed for determining outliers and for splitting
 *     characters; it is never used in a trained recognizer for identifying
 *     unlabeled samples.
 *
 *     Two methods using averaged templates are provided for splitting
 *     touching characters:
 *      (1) greedy matching
 *      (2) document image decoding (DID)
 *     The DID method is the default.  It is about 5x faster and
 *     possibly more accurate.
 *
 *     Once a BAR has been made, unlabeled sample images are identified
 *     by finding the individual template in the BAR with highest
 *     correlation.  The input images and images in the BAR can be
 *     represented in two ways:
 *      (1) as scanned, binarized to 1 bpp
 *      (2) as a width-normalized outline formed by thinning to a
 *          skeleton and then dilating by a fixed amount.
 *
 *     The recog can be serialized to file and read back.  The serialized
 *     version holds the templates used for correlation (which may have
 *     been modified by scaling and turning into lines from the unscaled
 *     templates), plus, for arbitrary character sets, the UTF8
 *     representation and the lookup table mapping from the character
 *     representation to index.
 *
 *     Why do we not use averaged templates for recognition?
 *     Letterforms can take on significantly different shapes (eg.,
 *     the letters 'a' and 'g'), and it makes no sense to average these.
 *     The previous version of this utility allowed multiple recognizers
 *     to exist, but this is an unnecessary complication if recognition
 *     is done on all samples instead of on averages.
 * 
*/ #define RECOG_VERSION_NUMBER 2 struct L_Recog { l_int32 scalew; /*!< scale all examples to this width; */ /*!< use 0 prevent horizontal scaling */ l_int32 scaleh; /*!< scale all examples to this height; */ /*!< use 0 prevent vertical scaling */ l_int32 linew; /*!< use a value > 0 to convert the bitmap */ /*!< to lines of fixed width; 0 to skip */ l_int32 templ_use; /*!< template use: use either the average */ /*!< or all temmplates (L_USE_AVERAGE or */ /*!< L_USE_ALL) */ l_int32 maxarraysize; /*!< initialize container arrays to this */ l_int32 setsize; /*!< size of character set */ l_int32 threshold; /*!< for binarizing if depth > 1 */ l_int32 maxyshift; /*!< vertical jiggle on nominal centroid */ /*!< alignment; typically 0 or 1 */ l_int32 charset_type; /*!< one of L_ARABIC_NUMERALS, etc. */ l_int32 charset_size; /*!< expected number of classes in charset */ l_int32 min_nopad; /*!< min number of samples without padding */ l_int32 num_samples; /*!< number of training samples */ l_int32 minwidth_u; /*!< min width averaged unscaled templates */ l_int32 maxwidth_u; /*!< max width averaged unscaled templates */ l_int32 minheight_u; /*!< min height averaged unscaled templates */ l_int32 maxheight_u; /*!< max height averaged unscaled templates */ l_int32 minwidth; /*!< min width averaged scaled templates */ l_int32 maxwidth; /*!< max width averaged scaled templates */ l_int32 ave_done; /*!< set to 1 when averaged bitmaps are made */ l_int32 train_done; /*!< set to 1 when training is complete or */ /*!< identification has started */ l_float32 max_wh_ratio; /*!< max width/height ratio to split */ l_float32 max_ht_ratio; /*!< max of max/min template height ratio */ l_int32 min_splitw; /*!< min component width kept in splitting */ l_int32 max_splith; /*!< max component height kept in splitting */ struct Sarray *sa_text; /*!< text array for arbitrary char set */ struct L_Dna *dna_tochar; /*!< index-to-char lut for arbitrary charset */ l_int32 *centtab; /*!< table for finding centroids */ l_int32 *sumtab; /*!< table for finding pixel sums */ struct Pixaa *pixaa_u; /*!< all unscaled templates for each class */ struct Ptaa *ptaa_u; /*!< centroids of all unscaled templates */ struct Numaa *naasum_u; /*!< area of all unscaled templates */ struct Pixaa *pixaa; /*!< all (scaled) templates for each class */ struct Ptaa *ptaa; /*!< centroids of all (scaledl) templates */ struct Numaa *naasum; /*!< area of all (scaled) templates */ struct Pixa *pixa_u; /*!< averaged unscaled templates per class */ struct Pta *pta_u; /*!< centroids of unscaled ave. templates */ struct Numa *nasum_u; /*!< area of unscaled averaged templates */ struct Pixa *pixa; /*!< averaged (scaled) templates per class */ struct Pta *pta; /*!< centroids of (scaled) ave. templates */ struct Numa *nasum; /*!< area of (scaled) averaged templates */ struct Pixa *pixa_tr; /*!< all input training images */ struct Pixa *pixadb_ave; /*!< unscaled and scaled averaged bitmaps */ struct Pixa *pixa_id; /*!< input images for identifying */ struct Pix *pixdb_ave; /*!< debug: best match of input against ave. */ struct Pix *pixdb_range; /*!< debug: best matches within range */ struct Pixa *pixadb_boot; /*!< debug: bootstrap training results */ struct Pixa *pixadb_split; /*!< debug: splitting results */ struct L_Bmf *bmf; /*!< bmf fonts */ l_int32 bmf_size; /*!< font size of bmf; default is 6 pt */ struct L_Rdid *did; /*!< temp data used for image decoding */ struct L_Rch *rch; /*!< temp data used for holding best char */ struct L_Rcha *rcha; /*!< temp data used for array of best chars */ }; typedef struct L_Recog L_RECOG; /*! * Data returned from correlation matching on a single character */ struct L_Rch { l_int32 index; /*!< index of best template */ l_float32 score; /*!< correlation score of best template */ char *text; /*!< character string of best template */ l_int32 sample; /*!< index of best sample (within the best */ /*!< template class, if all samples are used) */ l_int32 xloc; /*!< x-location of template (delx + shiftx) */ l_int32 yloc; /*!< y-location of template (dely + shifty) */ l_int32 width; /*!< width of best template */ }; typedef struct L_Rch L_RCH; /*! * Data returned from correlation matching on an array of characters */ struct L_Rcha { struct Numa *naindex; /*!< indices of best templates */ struct Numa *nascore; /*!< correlation scores of best templates */ struct Sarray *satext; /*!< character strings of best templates */ struct Numa *nasample; /*!< indices of best samples */ struct Numa *naxloc; /*!< x-locations of templates (delx + shiftx) */ struct Numa *nayloc; /*!< y-locations of templates (dely + shifty) */ struct Numa *nawidth; /*!< widths of best templates */ }; typedef struct L_Rcha L_RCHA; /*! * Data used for decoding a line of characters. */ struct L_Rdid { struct Pix *pixs; /*!< clone of pix to be decoded */ l_int32 **counta; /*!< count array for each averaged template */ l_int32 **delya; /*!< best y-shift array per average template */ l_int32 narray; /*!< number of averaged templates */ l_int32 size; /*!< size of count array (width of pixs) */ l_int32 *setwidth; /*!< setwidths for each template */ struct Numa *nasum; /*!< pixel count in pixs by column */ struct Numa *namoment; /*!< first moment of pixels in pixs by cols */ l_int32 fullarrays; /*!< 1 if full arrays are made; 0 otherwise */ l_float32 *beta; /*!< channel coeffs for template fg term */ l_float32 *gamma; /*!< channel coeffs for bit-and term */ l_float32 *trellisscore; /*!< score on trellis */ l_int32 *trellistempl; /*!< template on trellis (for backtrack) */ struct Numa *natempl; /*!< indices of best path templates */ struct Numa *naxloc; /*!< x locations of best path templates */ struct Numa *nadely; /*!< y locations of best path templates */ struct Numa *nawidth; /*!< widths of best path templates */ struct Boxa *boxa; /*!< Viterbi result for splitting input pixs */ struct Numa *nascore; /*!< correlation scores: best path templates */ struct Numa *natempl_r; /*!< indices of best rescored templates */ struct Numa *nasample_r; /*!< samples of best scored templates */ struct Numa *naxloc_r; /*!< x locations of best rescoredtemplates */ struct Numa *nadely_r; /*!< y locations of best rescoredtemplates */ struct Numa *nawidth_r; /*!< widths of best rescoredtemplates */ struct Numa *nascore_r; /*!< correlation scores: rescored templates */ }; typedef struct L_Rdid L_RDID; /*-------------------------------------------------------------------------* * Flags for describing limited character sets * *-------------------------------------------------------------------------*/ /*! Character Set */ enum { L_UNKNOWN = 0, /*!< character set type is not specified */ L_ARABIC_NUMERALS = 1, /*!< 10 digits */ L_LC_ROMAN_NUMERALS = 2, /*!< 7 lower-case letters (i,v,x,l,c,d,m) */ L_UC_ROMAN_NUMERALS = 3, /*!< 7 upper-case letters (I,V,X,L,C,D,M) */ L_LC_ALPHA = 4, /*!< 26 lower-case letters */ L_UC_ALPHA = 5 /*!< 26 upper-case letters */ }; /*-------------------------------------------------------------------------* * Flags for selecting between using average and all templates: * * recog->templ_use * *-------------------------------------------------------------------------*/ /*! Template Select */ enum { L_USE_ALL_TEMPLATES = 0, /*!< use all templates; default */ L_USE_AVERAGE_TEMPLATES = 1 /*!< use average templates; special cases */ }; #endif /* LEPTONICA_RECOG_H */ leptonica-1.86.0/src/recogbasic.c000066400000000000000000001225561506303110300166230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file recogbasic.c *
 *
 *      Recog creation, destruction and access
 *         L_RECOG            *recogCreateFromRecog()
 *         L_RECOG            *recogCreateFromPixa()
 *         L_RECOG            *recogCreateFromPixaNoFinish()
 *         L_RECOG            *recogCreate()
 *         void                recogDestroy()
 *
 *      Recog accessors
 *         l_int32             recogGetCount()
 *         l_int32             recogSetParams()
 *         static l_int32      recogGetCharsetSize()
 *
 *      Character/index lookup
 *         l_int32             recogGetClassIndex()
 *         l_int32             recogStringToIndex()
 *         l_int32             recogGetClassString()
 *         l_int32             l_convertCharstrToInt()
 *
 *      Serialization
 *         L_RECOG            *recogRead()
 *         L_RECOG            *recogReadStream()
 *         L_RECOG            *recogReadMem()
 *         l_int32             recogWrite()
 *         l_int32             recogWriteStream()
 *         l_int32             recogWriteMem()
 *         PIXA               *recogExtractPixa()
 *         static l_int32      recogAddCharstrLabels()
 *         static l_int32      recogAddAllSamples()
 *
 *  The recognizer functionality is split into four files:
 *    recogbasic.c: create, destroy, access, serialize
 *    recogtrain.c: training on labeled and unlabeled data
 *    recogident.c: running the recognizer(s) on input
 *    recogdid.c:   running the recognizer(s) on input using a
 *                  document image decoding (DID) hidden markov model
 *
 *  This is a content-adapted (or book-adapted) recognizer (BAR) application.
 *  The recognizers here are typically assembled from data that has
 *  been labeled by a generic recognition system, such as Tesseract.
 *  The general procedure to create a recognizer (recog) from labeled data is
 *  to add the labeled character bitmaps, either one at a time or
 *  all together from a pixa with labeled pix.
 *
 *  The suggested use for a BAR that consists of labeled templates drawn
 *  from a single source (e.g., a book) is to identify unlabeled samples
 *  by using unscaled character templates in the BAR, picking the
 *  template closest to the unlabeled sample.
 *
 *  Outliers can be removed from a pixa of labeled pix.  This is one of
 *  two methods that use averaged templates (the other is greedy splitting
 *  of characters).  See recogtrain.c for a discussion and the implementation.
 *
 *  A special bootstrap recognizer (BSR) can be used to make a BAR from
 *  unlabeled book data.  This is done by comparing character images
 *  from the book with labeled templates in the BSR, where all images
 *  are scaled to h = 40.  The templates can be either the scanned images
 *  or images consisting of width-normalized strokes derived from
 *  the skeleton of the character bitmaps.
 *
 *  Two BARs of labeled character data, that have been made by
 *  different recognizers, can be joined by extracting a pixa of the
 *  labeled templates from each, joining the two pixa, and then
 *  and regenerating a BAR from the joined set of templates.
 *  If all the labeled character data is from a single source (e.g, a book),
 *  identification can proceed using unscaled templates (either the input
 *  image or width-normalized lines).  But if the labeled data comes from
 *  more than one source, (a "hybrid" recognizer), the templates should
 *  be scaled, and we recommend scaling to a fixed height.
 *
 *  Suppose it is not possible to generate a BAR with a sufficient number
 *  of templates of each class taken from a single source.  In that case,
 *  templates from the BSR itself can be added.  This is the condition
 *  described above, where the labeled templates come from multiple
 *  sources, and it is necessary to do all character matches using
 *  templates that have been scaled to a fixed height (e.g., 40).
 *  Likewise, the samples to be identified using this hybrid recognizer
 *  must be modified in the same way.  See prog/recogtest3.c for an
 *  example of the steps that can be taken in the construction of a BAR
 *  using a BSR.
 *
 *  For training numeric input, an example set of calls that scales
 *  each training input to fixed h and will use the line templates of
 *  width linew for identifying unknown characters is:
 *         L_Recog  *rec = recogCreate(0, h, linew, 128, 1);
 *         for (i = 0; i < n; i++) {  // read in n training digits
 *             Pix *pix = ...
 *             recogTrainLabeled(rec, pix, NULL, text[i], 0);
 *         }
 *         recogTrainingFinished(&rec, 1, -1, -1.0);  // required
 *
 *  It is an error if any function that computes averages, removes
 *  outliers or requests identification of an unlabeled character,
 *  such as:
 *     (1) computing the sample averages: recogAverageSamples()
 *     (2) removing outliers: recogRemoveOutliers1() or recogRemoveOutliers2()
 *     (3) requesting identification of an unlabeled character:
 *         recogIdentifyPix()
 *  is called before an explicit call to finish training.  Note that
 *  to do further training on a "finished" recognizer, you can set
 *         recog->train_done = FALSE;
 *  add the new training samples, and again call
 *         recogTrainingFinished(&rec, 1, -1, -1.0);  // required
 *
 *  If not scaling, using the images directly for identification, and
 *  removing outliers, do something like this:
 *      L_Recog  *rec = recogCreate(0, 0, 0, 128, 1);
 *      for (i = 0; i < n; i++) {  // read in n training characters
 *          Pix *pix = ...
 *          recogTrainLabeled(rec, pix, NULL, text[i], 0);
 *      }
 *      recogTrainingFinished(&rec, 1, -1, -1.0);
 *      if (!rec) ... [return]
 *      // remove outliers
 *      recogRemoveOutliers1(&rec, 0.7, 2, NULL, NULL);
 *
 *  You can generate a recognizer from a pixa where the text field in
 *  each pix is the character string label for the pix.  For example,
 *  the following recognizer will store unscaled line images:
 *      L_Recog  *rec = recogCreateFromPixa(pixa, 0, 0, linew, 128, 1);
 *  and in use, it is fed unscaled line images to identify.
 *
 *  For the following, assume that you have a pixa of labeled templates.
 *  If it is likely that some of the input templates are mislabeled,
 *  there are several things that can be done to remove them.
 *  The first is to put a size and quantity filter on them; e.g.
 *       Pixa *pixa2 = recogFilterPixaBySize(pixa1, 10, 15, 2.6);
 *  Then you can remove outliers; e.g.,
 *       Pixa *pixa3 = pixaRemoveOutliers2(pixa2, -1.0, -1, NULL, NULL);
 *
 *  To this point, all templates are from a single source, so you
 *  can make a recognizer that uses the unscaled templates and optionally
 *  attempts to split touching characters:
 *       L_Recog *recog1 = recogCreateFromPixa(pixa3, ...);
 *  Alternatively, if you need more templates for some of the classes,
 *  you can pad with templates from a "bootstrap" recognizer (BSR).
 *  If you pad, it is necessary to scale the templates and input
 *  samples to a fixed height, and no attempt will be made to split
 *  the input sample connected components:
 *       L_Recog *recog1 = recogCreateFromPixa(pixa3, 0, 40, 0, 128, 0);
 *       recogPadDigitTrainingSet(&recog1, 40, 0);
 *
 *  A special case is a pure BSR, that contains images scaled to a fixed
 *  height (we use 40 in these examples).
 *  For this,use either the scanned bitmap:
 *      L_Recog  *recboot = recogCreateFromPixa(pixa, 0, 40, 0, 128, 1);
 *  or width-normalized lines (use width of 5 here):
 *      L_Recog  *recboot = recogCreateFromPixa(pixa, 0, 40, 5, 128, 1);
 *
 *  This can be used to train a new book adapted recognizer (BAC), on
 *  unlabeled data from, e.g., a book.  To do this, the following is required:
 *   (1) the input images from the book must be scaled in the same
 *       way as those in the BSR, and
 *   (2) both the BSR and the input images must be set up to be either
 *       input scanned images or width-normalized lines.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static const l_int32 MaxExamplesInClass = 256; /* Default recog parameters that can be changed */ static const l_int32 DefaultCharsetType = L_ARABIC_NUMERALS; static const l_int32 DefaultMinNopad = 1; static const l_float32 DefaultMaxWHRatio = 3.0f; /* max allowed w/h ratio for a component to be split */ static const l_float32 DefaultMaxHTRatio = 2.6f; /* max allowed ratio of max/min unscaled averaged template heights */ static const l_int32 DefaultThreshold = 150; /* for binarization */ static const l_int32 DefaultMaxYShift = 1; /* for identification */ /* Static functions */ static l_int32 recogGetCharsetSize(l_int32 type); static l_int32 recogAddCharstrLabels(L_RECOG *recog); static l_int32 recogAddAllSamples(L_RECOG **precog, PIXAA *paa, l_int32 debug); /*------------------------------------------------------------------------* * Recog: initialization and destruction * *------------------------------------------------------------------------*/ /*! * \brief recogCreateFromRecog() * * \param[in] recs source recog with arbitrary input parameters * \param[in] scalew scale all widths to this; use 0 otherwise * \param[in] scaleh scale all heights to this; use 0 otherwise * \param[in] linew width of normalized strokes; use 0 to skip * \param[in] threshold for binarization; typically ~128 * \param[in] maxyshift from nominal centroid alignment; default is 1 * \return recd, or NULL on error * *
 * Notes:
 *      (1) This is a convenience function that generates a recog using
 *          the unscaled training data in an existing recog.
 *      (2) It is recommended to use %maxyshift = 1 (the default value)
 *      (3) See recogCreate() for use of %scalew, %scaleh and %linew.
 * 
*/ L_RECOG * recogCreateFromRecog(L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift) { L_RECOG *recd; PIXA *pixa; if (!recs) return (L_RECOG *)ERROR_PTR("recs not defined", __func__, NULL); pixa = recogExtractPixa(recs); recd = recogCreateFromPixa(pixa, scalew, scaleh, linew, threshold, maxyshift); pixaDestroy(&pixa); return recd; } /*! * \brief recogCreateFromPixa() * * \param[in] pixa of labeled, 1 bpp images * \param[in] scalew scale all widths to this; use 0 otherwise * \param[in] scaleh scale all heights to this; use 0 otherwise * \param[in] linew width of normalized strokes; use 0 to skip * \param[in] threshold for binarization; typically ~150 * \param[in] maxyshift from nominal centroid alignment; default is 1 * \return recog, or NULL on error * *
 * Notes:
 *      (1) This is a convenience function for training from labeled data.
 *          The pixa can be read from file.
 *      (2) The pixa should contain the unscaled bitmaps used for training.
 *      (3) See recogCreate() for use of %scalew, %scaleh and %linew.
 *      (4) It is recommended to use %maxyshift = 1 (the default value)
 *      (5) All examples in the same class (i.e., with the same character
 *          label) should be similar.  They can be made similar by invoking
 *          recogRemoveOutliers[1,2]() on %pixa before calling this function.
 * 
*/ L_RECOG * recogCreateFromPixa(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift) { L_RECOG *recog; if (!pixa) return (L_RECOG *)ERROR_PTR("pixa not defined", __func__, NULL); recog = recogCreateFromPixaNoFinish(pixa, scalew, scaleh, linew, threshold, maxyshift); if (!recog) return (L_RECOG *)ERROR_PTR("recog not made", __func__, NULL); recogTrainingFinished(&recog, 1, -1, -1.0); if (!recog) return (L_RECOG *)ERROR_PTR("bad templates", __func__, NULL); return recog; } /*! * \brief recogCreateFromPixaNoFinish() * * \param[in] pixa of labeled, 1 bpp images * \param[in] scalew scale all widths to this; use 0 otherwise * \param[in] scaleh scale all heights to this; use 0 otherwise * \param[in] linew width of normalized strokes; use 0 to skip * \param[in] threshold for binarization; typically ~150 * \param[in] maxyshift from nominal centroid alignment; default is 1 * \return recog, or NULL on error * *
 * Notes:
 *      (1) See recogCreateFromPixa() for details.
 *      (2) This is also used to generate a pixaa with templates
 *          in each class within a pixa.  For that, all args except for
 *          %pixa are ignored.
 * 
*/ L_RECOG * recogCreateFromPixaNoFinish(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift) { char *text; l_int32 full, n, i, ntext, same, maxd; PIX *pix; L_RECOG *recog; if (!pixa) return (L_RECOG *)ERROR_PTR("pixa not defined", __func__, NULL); pixaVerifyDepth(pixa, &same, &maxd); if (maxd > 1) return (L_RECOG *)ERROR_PTR("not all pix are 1 bpp", __func__, NULL); pixaIsFull(pixa, &full, NULL); if (!full) return (L_RECOG *)ERROR_PTR("not all pix are present", __func__, NULL); n = pixaGetCount(pixa); pixaCountText(pixa, &ntext); if (ntext == 0) return (L_RECOG *)ERROR_PTR("no pix have text strings", __func__, NULL); if (ntext < n) L_ERROR("%d text strings < %d pix\n", __func__, ntext, n); recog = recogCreate(scalew, scaleh, linew, threshold, maxyshift); if (!recog) return (L_RECOG *)ERROR_PTR("recog not made", __func__, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); text = pixGetText(pix); if (!text || strlen(text) == 0) { L_ERROR("pix[%d] has no text\n", __func__, i); pixDestroy(&pix); continue; } recogTrainLabeled(recog, pix, NULL, text, 0); pixDestroy(&pix); } return recog; } /*! * \brief recogCreate() * * \param[in] scalew scale all widths to this; use 0 otherwise * \param[in] scaleh scale all heights to this; use 0 otherwise * \param[in] linew width of normalized strokes; use 0 to skip * \param[in] threshold for binarization; typically ~128; 0 for default * \param[in] maxyshift from nominal centroid alignment; default is 1 * \return recog, or NULL on error * *
 * Notes:
 *      (1) If %scalew == 0 and %scaleh == 0, no scaling is done.
 *          If one of these is 0 and the other is > 0, scaling is isotropic
 *          to the requested size.  We typically do not set both > 0.
 *      (2) Use linew > 0 to convert the templates to images with fixed
 *          width strokes.  linew == 0 skips the conversion.
 *      (3) The only valid values for %maxyshift are 0, 1 and 2.
 *          It is recommended to use %maxyshift == 1 (default value).
 *          Using %maxyshift == 0 is much faster than %maxyshift == 1, but
 *          it is much less likely to find the template with the best
 *          correlation.  Use of anything but 1 results in a warning.
 *      (4) Scaling is used for finding outliers and for training a
 *          book-adapted recognizer (BAR) from a bootstrap recognizer (BSR).
 *          Scaling the height to a fixed value and scaling the width
 *          accordingly (e.g., %scaleh = 40, %scalew = 0) is recommended.
 *      (5) The storage for most of the arrays is allocated when training
 *          is finished.
 * 
*/ L_RECOG * recogCreate(l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift) { L_RECOG *recog; if (scalew < 0 || scaleh < 0) return (L_RECOG *)ERROR_PTR("invalid scalew or scaleh", __func__, NULL); if (linew > 10) return (L_RECOG *)ERROR_PTR("invalid linew > 10", __func__, NULL); if (threshold == 0) threshold = DefaultThreshold; if (threshold < 0 || threshold > 255) { L_WARNING("invalid threshold; using default\n", __func__); threshold = DefaultThreshold; } if (maxyshift < 0 || maxyshift > 2) { L_WARNING("invalid maxyshift; using default value\n", __func__); maxyshift = DefaultMaxYShift; } else if (maxyshift == 0) { L_WARNING("Using maxyshift = 0; faster, worse correlation results\n", __func__); } else if (maxyshift == 2) { L_WARNING("Using maxyshift = 2; slower\n", __func__); } recog = (L_RECOG *)LEPT_CALLOC(1, sizeof(L_RECOG)); recog->templ_use = L_USE_ALL_TEMPLATES; /* default */ recog->threshold = threshold; recog->scalew = scalew; recog->scaleh = scaleh; recog->linew = linew; recog->maxyshift = maxyshift; recogSetParams(recog, 1, -1, -1.0, -1.0); recog->bmf = bmfCreate(NULL, 6); recog->bmf_size = 6; recog->maxarraysize = MaxExamplesInClass; /* Generate the LUTs */ recog->centtab = makePixelCentroidTab8(); recog->sumtab = makePixelSumTab8(); recog->sa_text = sarrayCreate(0); recog->dna_tochar = l_dnaCreate(0); /* Input default values for min component size for splitting. * These are overwritten when pixTrainingFinished() is called. */ recog->min_splitw = 6; recog->max_splith = 60; /* Allocate the paa for the unscaled training bitmaps */ recog->pixaa_u = pixaaCreate(recog->maxarraysize); /* Generate the storage for debugging */ recog->pixadb_boot = pixaCreate(2); recog->pixadb_split = pixaCreate(2); return recog; } /*! * \brief recogDestroy() * * \param[in,out] precog will be set to null before returning * \return void */ void recogDestroy(L_RECOG **precog) { L_RECOG *recog; if (!precog) { L_WARNING("ptr address is null\n", __func__); return; } if ((recog = *precog) == NULL) return; LEPT_FREE(recog->centtab); LEPT_FREE(recog->sumtab); sarrayDestroy(&recog->sa_text); l_dnaDestroy(&recog->dna_tochar); pixaaDestroy(&recog->pixaa_u); pixaDestroy(&recog->pixa_u); ptaaDestroy(&recog->ptaa_u); ptaDestroy(&recog->pta_u); numaDestroy(&recog->nasum_u); numaaDestroy(&recog->naasum_u); pixaaDestroy(&recog->pixaa); pixaDestroy(&recog->pixa); ptaaDestroy(&recog->ptaa); ptaDestroy(&recog->pta); numaDestroy(&recog->nasum); numaaDestroy(&recog->naasum); pixaDestroy(&recog->pixa_tr); pixaDestroy(&recog->pixadb_ave); pixaDestroy(&recog->pixa_id); pixDestroy(&recog->pixdb_ave); pixDestroy(&recog->pixdb_range); pixaDestroy(&recog->pixadb_boot); pixaDestroy(&recog->pixadb_split); bmfDestroy(&recog->bmf); rchDestroy(&recog->rch); rchaDestroy(&recog->rcha); recogDestroyDid(recog); LEPT_FREE(recog); *precog = NULL; } /*------------------------------------------------------------------------* * Recog accessors * *------------------------------------------------------------------------*/ /*! * \brief recogGetCount() * * \param[in] recog * \return count of classes in recog; 0 if no recog or on error */ l_int32 recogGetCount(L_RECOG *recog) { if (!recog) return ERROR_INT("recog not defined", __func__, 0); return recog->setsize; } /*! * \brief recogSetParams() * * \param[in] recog to be padded, if necessary * \param[in] type type of char set; -1 for default; * see enum in recog.h * \param[in] min_nopad min number in a class without padding; * use -1 for default * \param[in] max_wh_ratio max width/height ratio allowed for splitting; * use -1.0 for default * \param[in] max_ht_ratio max of max/min averaged template height ratio; * use -1.0 for default * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is called when a recog is created.
 *      (2) Default %min_nopad value allows for some padding.
 *          To disable padding, set %min_nopad = 0.  To pad only when
 *          no samples are available for the class, set %min_nopad = 1.
 *      (3) The %max_wh_ratio limits the width/height ratio for components
 *          that we attempt to split.  Splitting long components is expensive.
 *      (4) The %max_ht_ratio is a quality requirement on the training data.
 *          The recognizer will not run if the averages are computed and
 *          the templates do not satisfy it.
 * 
*/ l_ok recogSetParams(L_RECOG *recog, l_int32 type, l_int32 min_nopad, l_float32 max_wh_ratio, l_float32 max_ht_ratio) { if (!recog) return ERROR_INT("recog not defined", __func__, 1); recog->charset_type = (type >= 0) ? type : DefaultCharsetType; recog->charset_size = recogGetCharsetSize(recog->charset_type); recog->min_nopad = (min_nopad >= 0) ? min_nopad : DefaultMinNopad; recog->max_wh_ratio = (max_wh_ratio > 0.0) ? max_wh_ratio : DefaultMaxWHRatio; recog->max_ht_ratio = (max_ht_ratio > 1.0) ? max_ht_ratio : DefaultMaxHTRatio; return 0; } /*! * \brief recogGetCharsetSize() * * \param[in] type of charset * \return size of charset, or 0 if unknown or on error */ static l_int32 recogGetCharsetSize(l_int32 type) { switch (type) { case L_UNKNOWN: return 0; case L_ARABIC_NUMERALS: return 10; case L_LC_ROMAN_NUMERALS: return 7; case L_UC_ROMAN_NUMERALS: return 7; case L_LC_ALPHA: return 26; case L_UC_ALPHA: return 26; default: L_ERROR("invalid charset_type %d\n", __func__, type); } return 0; } /*------------------------------------------------------------------------* * Character/index lookup * *------------------------------------------------------------------------*/ /*! * \brief recogGetClassIndex() * * \param[in] recog with LUT's pre-computed * \param[in] val integer value; can be up to 4 bytes for UTF-8 * \param[in] text text from which %val was derived; used if not found * \param[out] pindex index into dna_tochar * \return 0 if found; 1 if not found and added; 2 on error. * *
 * Notes:
 *      (1) This is used during training.  There is one entry in
 *          recog->dna_tochar (integer value, e.g., ascii) and
 *          one in recog->sa_text (e.g, ascii letter in a string)
 *          for each character class.
 *      (2) This searches the dna character array for %val.  If it is
 *          not found, the template represents a character class not
 *          already seen: it increments setsize (the number of character
 *          classes) by 1, and augments both the index (dna_tochar)
 *          and text (sa_text) arrays.
 *      (3) Returns the index in &index, except on error.
 *      (4) Caller must check the function return value.
 * 
*/ l_int32 recogGetClassIndex(L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex) { l_int32 i, n, ival; if (!pindex) return ERROR_INT("&index not defined", __func__, 2); *pindex = -1; if (!recog) return ERROR_INT("recog not defined", __func__, 2); if (!text) return ERROR_INT("text not defined", __func__, 2); /* Search existing characters */ n = l_dnaGetCount(recog->dna_tochar); for (i = 0; i < n; i++) { l_dnaGetIValue(recog->dna_tochar, i, &ival); if (val == ival) { /* found */ *pindex = i; return 0; } } /* If not found... */ l_dnaAddNumber(recog->dna_tochar, val); sarrayAddString(recog->sa_text, text, L_COPY); recog->setsize++; *pindex = n; return 1; } /*! * \brief recogStringToIndex() * * \param[in] recog * \param[in] text text string for some class * \param[out] pindex index for that class; -1 if not found * \return 0 if OK, 1 on error not finding the string is an error */ l_ok recogStringToIndex(L_RECOG *recog, char *text, l_int32 *pindex) { char *charstr; l_int32 i, n, diff; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = -1; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!text) return ERROR_INT("text not defined", __func__, 1); /* Search existing characters */ n = recog->setsize; for (i = 0; i < n; i++) { recogGetClassString(recog, i, &charstr); if (!charstr) { L_ERROR("string not found for index %d\n", __func__, i); continue; } diff = strcmp(text, charstr); LEPT_FREE(charstr); if (diff) continue; *pindex = i; return 0; } return 1; /* not found */ } /*! * \brief recogGetClassString() * * \param[in] recog * \param[in] index into array of char types * \param[out] pcharstr string representation; * returns an empty string on error * \return 0 if found, 1 on error * *
 * Notes:
 *      (1) Extracts a copy of the string from sa_text, which
 *          the caller must free.
 *      (2) Caller must check the function return value.
 * 
*/ l_int32 recogGetClassString(L_RECOG *recog, l_int32 index, char **pcharstr) { if (!pcharstr) return ERROR_INT("&charstr not defined", __func__, 1); *pcharstr = stringNew(""); if (!recog) return ERROR_INT("recog not defined", __func__, 2); if (index < 0 || index >= recog->setsize) return ERROR_INT("invalid index", __func__, 1); LEPT_FREE(*pcharstr); *pcharstr = sarrayGetString(recog->sa_text, index, L_COPY); return 0; } /*! * \brief l_convertCharstrToInt() * * \param[in] str input string representing one UTF-8 character; * not more than 4 bytes * \param[out] pval integer value for the input. Think of it * as a 1-to-1 hash code. * \return 0 if OK, 1 on error */ l_ok l_convertCharstrToInt(const char *str, l_int32 *pval) { l_int32 size; l_uint32 val; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (!str) return ERROR_INT("str not defined", __func__, 1); size = strlen(str); if (size == 0) return ERROR_INT("empty string", __func__, 1); if (size > 4) return ERROR_INT("invalid string: > 4 bytes", __func__, 1); val = (l_uint8)str[0]; if (size > 1) val = (val << 8) + (l_uint8)str[1]; if (size > 2) val = (val << 8) + (l_uint8)str[2]; if (size > 3) val = (val << 8) + (l_uint8)str[3]; *pval = (l_int32)(val & 0x7fffffff); return 0; } /*------------------------------------------------------------------------* * Serialization * *------------------------------------------------------------------------*/ /*! * \brief recogRead() * * \param[in] filename * \return recog, or NULL on error * *
 * Notes:
 *      (1) When a recog is serialized, a pixaa of the templates that are
 *          actually used for correlation is saved in the pixaa_u array
 *          of the recog.  These can be different from the templates that
 *          were used to generate the recog, because those original templates
 *          can be scaled and turned into normalized lines.  When recog1
 *          is deserialized to recog2, these templates are put in both the
 *          unscaled array (pixaa_u) and the modified array (pixaa) in recog2.
 *          Why not put it in only the unscaled array and let
 *          recogTrainingFinalized() regenerate the modified templates?
 *          The reason is that with normalized lines, the operation of
 *          thinning to a skeleton and dilating back to a fixed width
 *          is not idempotent.  Thinning to a skeleton saves pixels at
 *          the end of a line segment, and thickening the skeleton puts
 *          additional pixels at the end of the lines.  This tends to
 *          close gaps.
 * 
*/ L_RECOG * recogRead(const char *filename) { FILE *fp; L_RECOG *recog; if (!filename) return (L_RECOG *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_RECOG *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); if ((recog = recogReadStream(fp)) == NULL) { fclose(fp); return (L_RECOG *)ERROR_PTR_1("recog not read", filename, __func__, NULL); } fclose(fp); return recog; } /*! * \brief recogReadStream() * * \param[in] fp file stream * \return recog, or NULL on error */ L_RECOG * recogReadStream(FILE *fp) { l_int32 version, setsize, threshold, scalew, scaleh, linew; l_int32 maxyshift, nc; L_DNA *dna_tochar; PIXAA *paa; L_RECOG *recog; SARRAY *sa_text; if (!fp) return (L_RECOG *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nRecog Version %d\n", &version) != 1) return (L_RECOG *)ERROR_PTR("not a recog file", __func__, NULL); if (version != RECOG_VERSION_NUMBER) return (L_RECOG *)ERROR_PTR("invalid recog version", __func__, NULL); if (fscanf(fp, "Size of character set = %d\n", &setsize) != 1) return (L_RECOG *)ERROR_PTR("setsize not read", __func__, NULL); if (fscanf(fp, "Binarization threshold = %d\n", &threshold) != 1) return (L_RECOG *)ERROR_PTR("binary thresh not read", __func__, NULL); if (fscanf(fp, "Maxyshift = %d\n", &maxyshift) != 1) return (L_RECOG *)ERROR_PTR("maxyshift not read", __func__, NULL); if (fscanf(fp, "Scale to width = %d\n", &scalew) != 1) return (L_RECOG *)ERROR_PTR("width not read", __func__, NULL); if (fscanf(fp, "Scale to height = %d\n", &scaleh) != 1) return (L_RECOG *)ERROR_PTR("height not read", __func__, NULL); if (fscanf(fp, "Normalized line width = %d\n", &linew) != 1) return (L_RECOG *)ERROR_PTR("line width not read", __func__, NULL); if ((recog = recogCreate(scalew, scaleh, linew, threshold, maxyshift)) == NULL) return (L_RECOG *)ERROR_PTR("recog not made", __func__, NULL); if (fscanf(fp, "\nLabels for character set:\n") == -1) { recogDestroy(&recog); return (L_RECOG *)ERROR_PTR("label intro not read", __func__, NULL); } l_dnaDestroy(&recog->dna_tochar); if ((dna_tochar = l_dnaReadStream(fp)) == NULL) { recogDestroy(&recog); return (L_RECOG *)ERROR_PTR("dna_tochar not read", __func__, NULL); } recog->dna_tochar = dna_tochar; sarrayDestroy(&recog->sa_text); if ((sa_text = sarrayReadStream(fp)) == NULL) { recogDestroy(&recog); return (L_RECOG *)ERROR_PTR("sa_text not read", __func__, NULL); } recog->sa_text = sa_text; if (fscanf(fp, "\nPixaa of all samples in the training set:\n") == -1) { recogDestroy(&recog); return (L_RECOG *)ERROR_PTR("pixaa intro not read", __func__, NULL); } if ((paa = pixaaReadStream(fp)) == NULL) { recogDestroy(&recog); return (L_RECOG *)ERROR_PTR("pixaa not read", __func__, NULL); } recog->setsize = setsize; nc = pixaaGetCount(paa, NULL); if (nc != setsize) { recogDestroy(&recog); pixaaDestroy(&paa); L_ERROR("(setsize = %d) != (paa count = %d)\n", __func__, setsize, nc); return NULL; } recogAddAllSamples(&recog, paa, 0); /* this finishes */ pixaaDestroy(&paa); if (!recog) return (L_RECOG *)ERROR_PTR("bad templates", __func__, NULL); return recog; } /*! * \brief recogReadMem() * * \param[in] data serialization of recog (not ascii) * \param[in] size of data in bytes * \return recog, or NULL on error */ L_RECOG * recogReadMem(const l_uint8 *data, size_t size) { FILE *fp; L_RECOG *recog; if (!data) return (L_RECOG *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (L_RECOG *)ERROR_PTR("stream not opened", __func__, NULL); recog = recogReadStream(fp); fclose(fp); if (!recog) L_ERROR("recog not read\n", __func__); return recog; } /*! * \brief recogWrite() * * \param[in] filename * \param[in] recog * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pixaa of templates that is written is the modified one
 *          in the pixaa field. It is the pixaa that is actually used
 *          for correlation. This is not the unscaled array of labeled
 *          bitmaps, in pixaa_u, that was used to generate the recog in the
 *          first place.  See the notes in recogRead() for the rationale.
 * 
*/ l_ok recogWrite(const char *filename, L_RECOG *recog) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = recogWriteStream(fp, recog); fclose(fp); if (ret) return ERROR_INT_1("recog not written to stream", filename, __func__, 1); return 0; } /*! * \brief recogWriteStream() * * \param[in] fp file stream opened for "wb" * \param[in] recog * \return 0 if OK, 1 on error */ l_ok recogWriteStream(FILE *fp, L_RECOG *recog) { if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); fprintf(fp, "\nRecog Version %d\n", RECOG_VERSION_NUMBER); fprintf(fp, "Size of character set = %d\n", recog->setsize); fprintf(fp, "Binarization threshold = %d\n", recog->threshold); fprintf(fp, "Maxyshift = %d\n", recog->maxyshift); fprintf(fp, "Scale to width = %d\n", recog->scalew); fprintf(fp, "Scale to height = %d\n", recog->scaleh); fprintf(fp, "Normalized line width = %d\n", recog->linew); fprintf(fp, "\nLabels for character set:\n"); l_dnaWriteStream(fp, recog->dna_tochar); sarrayWriteStream(fp, recog->sa_text); fprintf(fp, "\nPixaa of all samples in the training set:\n"); pixaaWriteStream(fp, recog->pixaa); return 0; } /*! * \brief recogWriteMem() * * \param[out] pdata data of serialized recog (not ascii) * \param[out] psize size of returned data * \param[in] recog * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a recog in memory and puts the result in a buffer.
 * 
*/ l_ok recogWriteMem(l_uint8 **pdata, size_t *psize, L_RECOG *recog) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = recogWriteStream(fp, recog); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = recogWriteStream(fp, recog); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief recogExtractPixa() * * \param[in] recog * \return pixa if OK, NULL on error * *
 * Notes:
 *      (1) This generates a pixa of all the unscaled images in the
 *          recognizer, where each one has its character class label in
 *          the pix text field, by flattening pixaa_u to a pixa.
 * 
*/ PIXA * recogExtractPixa(L_RECOG *recog) { if (!recog) return (PIXA *)ERROR_PTR("recog not defined", __func__, NULL); recogAddCharstrLabels(recog); return pixaaFlattenToPixa(recog->pixaa_u, NULL, L_CLONE); } /*! * \brief recogAddCharstrLabels() * * \param[in] recog * \return 0 if OK, 1 on error */ static l_int32 recogAddCharstrLabels(L_RECOG *recog) { char *text; l_int32 i, j, n1, n2; PIX *pix; PIXA *pixa; PIXAA *paa; if (!recog) return ERROR_INT("recog not defined", __func__, 1); /* Add the labels to each unscaled pix */ paa = recog->pixaa_u; n1 = pixaaGetCount(paa, NULL); for (i = 0; i < n1; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); text = sarrayGetString(recog->sa_text, i, L_NOCOPY); n2 = pixaGetCount(pixa); for (j = 0; j < n2; j++) { pix = pixaGetPix(pixa, j, L_CLONE); pixSetText(pix, text); pixDestroy(&pix); } pixaDestroy(&pixa); } return 0; } /*! * \brief recogAddAllSamples() * * \param[in] precog addr of recog * \param[in] paa pixaa from previously trained recog * \param[in] debug * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) On error, the input recog is destroyed.
 *      (2) This is used with the serialization routine recogRead(),
 *          where each pixa in the pixaa represents a set of characters
 *          in a different class.  Before calling this function, we have
 *          verified that the number of character classes, given by the
 *          setsize field in %recog, equals the number of pixa in the paa.
 *          The character labels for each set are in the sa_text field.
 * 
*/ static l_int32 recogAddAllSamples(L_RECOG **precog, PIXAA *paa, l_int32 debug) { char *text; l_int32 i, j, nc, ns; PIX *pix; PIXA *pixa, *pixa1; L_RECOG *recog; if (!precog) return ERROR_INT("&recog not defined", __func__, 1); if ((recog = *precog) == NULL) return ERROR_INT("recog not defined", __func__, 1); if (!paa) { recogDestroy(&recog); *precog = NULL; return ERROR_INT("paa not defined", __func__, 1); } nc = pixaaGetCount(paa, NULL); for (i = 0; i < nc; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); ns = pixaGetCount(pixa); text = sarrayGetString(recog->sa_text, i, L_NOCOPY); pixa1 = pixaCreate(ns); pixaaAddPixa(recog->pixaa_u, pixa1, L_INSERT); for (j = 0; j < ns; j++) { pix = pixaGetPix(pixa, j, L_CLONE); if (debug) lept_stderr("pix[%d,%d]: text = %s\n", i, j, text); pixaaAddPix(recog->pixaa_u, i, pix, NULL, L_INSERT); } pixaDestroy(&pixa); } recogTrainingFinished(&recog, 0, -1, -1.0); /* For second parameter, see comment in recogRead() */ if (!recog) return ERROR_INT("bad templates; recog destroyed", __func__, 1); return 0; } leptonica-1.86.0/src/recogdid.c000066400000000000000000001150071506303110300162730ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file recogdid.c *
 *
 *      Top-level identification
 *         BOXA             *recogDecode()
 *
 *      Generate decoding arrays
 *         static l_int32    recogPrepareForDecoding()
 *         static l_int32    recogMakeDecodingArray()
 *
 *      Dynamic programming for best path
 *         static l_int32    recogRunViterbi()
 *         static l_int32    recogRescoreDidResult()
 *         static PIX       *recogShowPath()
 *
 *      Create/destroy temporary DID data
 *         l_int32           recogCreateDid()
 *         l_int32           recogDestroyDid()
 *
 *      Various helpers
 *         l_int32           recogDidExists()
 *         L_RDID           *recogGetDid()
 *         static l_int32    recogGetWindowedArea()
 *         l_int32           recogSetChannelParams()
 *         static l_int32    recogTransferRchToDid()
 *
 *  See recogbasic.c for examples of training a recognizer, which is
 *  required before it can be used for document image decoding.
 *
 *  Gary Kopec pioneered this hidden markov approach to "Document Image
 *  Decoding" (DID) in the early 1990s.  It is based on estimation
 *  using a generative model of the image generation process, and
 *  provides the most likely decoding of an image if the model is correct.
 *  Given the model, it finds the maximum a posteriori (MAP) "message"
 *  given the observed image.  The model describes how to generate
 *  an image from a message, and the MAP message is derived from the
 *  observed image using Bayes' theorem.  This approach can also be used
 *  to build the model, using the iterative expectation/maximization
 *  method from labeled but errorful data.
 *
 *  In a little more detail: The model comprises three things: the ideal
 *  printed character templates, the independent bit-flip noise model, and
 *  the character setwidths.  When a character is printed, the setwidth
 *  is the distance in pixels that you move forward before being able
 *  to print the next character.  It is typically slightly less than the
 *  width of the character template: if too small, an extra character can be
 *  hallucinated; if too large, it will not be able to match the next
 *  character template on the line.  The model assumes that the probabilities
 *  of bit flip depend only on the assignment of the pixel to background
 *  or template foreground.  The multilevel templates have different
 *  bit flip probabilities for each level.  Because a character image
 *  is composed of many pixels, each of which can be independently flipped,
 *  the actual probability of seeing any rendering is exceedingly small,
 *  being composed of the product of the probabilities for each pixel.
 *  The log likelihood is used both to avoid numeric underflow and,
 *  more importantly, because it results in a summation of independent
 *  pixel probabilities.  That summation can be shown, in Kopec's
 *  original paper, to consist of a sum of two terms: (a) the number of
 *  fg pixels in the bit-and of the observed image with the ideal
 *  template and (b) the number of fg pixels in the template.  Each
 *  has a coefficient that depends only on the bit-flip probabilities
 *  for the fg and bg.  A beautiful result, and computationally simple!
 *  One nice feature of this approach is that the result of the decoding
 *  is not very sensitive to the values  used for the bit flip probabilities.
 *
 *  The procedure for finding the best decoding (MAP) for a given image goes
 *  under several names: Viterbi, dynamic programming, hidden markov model.
 *  It is called a "hidden markov model" because the templates are assumed
 *  to be printed serially and we don't know what they are -- the identity
 *  of the templates must be inferred from the observed image.
 *  The possible decodings form a dense trellis over the pixel positions,
 *  where at each pixel position you have the possibility of having any
 *  of the characters printed there (with some reference point) or having
 *  a single pixel wide space inserted there.  Thus, before the trellis
 *  can be traversed, we must do the work of finding the log probability,
 *  at each pixel location, that each of the templates was printed there.
 *  Armed with those arrays of data, the dynamic programming procedure
 *  moves from left to right, one pixel at a time, recursively finding
 *  the path with the highest log probability that gets to that pixel
 *  position (and noting which template was printed to arrive there).
 *  After reaching the right side of the image, we can simply backtrack
 *  along the path, jumping over each template that lies on the highest
 *  scoring path.  This best path thus only goes through a few of the
 *  pixel positions.
 *
 *  There are two refinements to the original Kopec paper.  In the first,
 *  one uses multiple, non-overlapping fg templates, each with its own
 *  bit flip probability.  This makes sense, because the probability
 *  that a fg boundary pixel flips to bg is greater than that of a fg
 *  pixel not on the boundary.  And the flip probability of a fg boundary
 *  pixel is smaller than that of a bg boundary pixel, which in turn
 *  is greater than that of a bg pixel not on a boundary (the latter
 *  is taken to be the true background).  Then the simplest realistic
 *  multiple template model has three templates that are not background.
 *
 *  In the second refinement, a heuristic (strict upper bound) is used
 *  iteratively in the Viterbi process to compute the log probabilities.
 *  Using the heuristic, you find the best path, and then score all nodes
 *  on that path with the actual probability, which is guaranteed to
 *  be a smaller number.  You run this iteratively, rescoring just the best
 *  found path each time.  After each rescoring, the path may change because
 *  the local scores have been reduced.  However, the process converges
 *  rapidly, and when it doesn't change, it must be the best path because
 *  it is properly scored (even if neighboring paths are heuristically
 *  scored).  The heuristic score is found column-wise by assuming
 *  that all the fg pixels in the template are on fg pixels in the image --
 *  we just take the minimum of the number of pixels in the template
 *  and image column.  This can easily give a 10-fold reduction in
 *  computation because the heuristic score can be computed much faster
 *  than the exact score.
 *
 *  For reference, the classic paper on the approach by Kopec is:
 *  * "Document Image Decoding Using Markov Source Models", IEEE Trans.
 *    PAMI, Vol 16, No. 6, June 1994, pp 602-617.
 *  A refinement of the method for multilevel templates by Kopec is:
 *  * "Multilevel Character Templates for Document Image Decoding",
 *    Proc. SPIE 3027, Document Recognition IV, p. 168ff, 1997.
 *  Further refinements for more efficient decoding are given in these
 *  two papers, which are both stored on leptonica.org:
 *  * "Document Image Decoding using Iterated Complete Path Search", Minka,
 *    Bloomberg and Popat, Proc. SPIE Vol 4307, p. 250-258, Document
 *    Recognition and Retrieval VIII, San Jose, CA 2001.
 *  * "Document Image Decoding using Iterated Complete Path Search with
 *    Subsampled Heuristic Scoring", Bloomberg, Minka and Popat, ICDAR 2001,
 *    p. 344-349, Sept. 2001, Seattle.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" static l_int32 recogPrepareForDecoding(L_RECOG *recog, PIX *pixs, l_int32 debug); static l_int32 recogMakeDecodingArray(L_RECOG *recog, l_int32 index, l_int32 debug); static l_int32 recogRunViterbi(L_RECOG *recog, PIX **ppixdb); static l_int32 recogRescoreDidResult(L_RECOG *recog, PIX **ppixdb); static PIX *recogShowPath(L_RECOG *recog, l_int32 select); static l_int32 recogGetWindowedArea(L_RECOG *recog, l_int32 index, l_int32 x, l_int32 *pdely, l_int32 *pwsum); static l_int32 recogTransferRchToDid(L_RECOG *recog, l_int32 x, l_int32 y); /* Parameters for modeling the decoding */ static const l_float32 SetwidthFraction = 0.95f; static const l_int32 MaxYShift = 1; /* Channel parameters. alpha[0] is the probability that a bg pixel * is OFF. alpha[1] is the probability that level 1 fg is ON. * The actual values are not too critical, but they must be larger * than 0.5 and smaller than 1.0. For more accuracy in template * matching, use a 4-level template, where levels 2 and 3 are * boundary pixels in the fg and bg, respectively. */ static const l_float32 DefaultAlpha2[] = {0.95f, 0.9f}; static const l_float32 DefaultAlpha4[] = {0.95f, 0.9f, 0.75f, 0.25f}; /*------------------------------------------------------------------------* * Top-level identification * *------------------------------------------------------------------------*/ /*! * \brief recogDecode() * * \param[in] recog with LUT's pre-computed * \param[in] pixs typically of multiple touching characters, 1 bpp * \param[in] nlevels of templates; 2 for now * \param[out] ppixdb [optional] debug result; can be null * \return boxa segmentation of pixs into characters, or NULL on error * *
 * Notes:
 *      (1) The input pixs has been filtered so that it is likely to be
 *          composed of more than one touching character.  Specifically,
 *          its height can only slightly exceed that of the tallest
 *          unscaled template, the width is somewhat larger than the
 *          width of the widest unscaled template, and the w/h aspect ratio
 *          is bounded by max_wh_ratio.
 *      (2) This uses the DID mechanism with labeled templates to
 *          segment the input %pixs.  The resulting segmentation is
 *          returned.  (It is given by did->boxa).
 *      (3) In debug mode, the Viterbi path is rescored based on all
 *          the templates.  In non-debug mode, the same procedure is
 *          carried out by recogIdentifyPix() on the result of the
 *          segmentation.
 * 
*/ BOXA * recogDecode(L_RECOG *recog, PIX *pixs, l_int32 nlevels, PIX **ppixdb) { l_int32 debug; PIX *pix1; PIXA *pixa; if (ppixdb) *ppixdb = NULL; if (!recog) return (BOXA *)ERROR_PTR("recog not defined", __func__, NULL); if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (!recog->train_done) return (BOXA *)ERROR_PTR("training not finished", __func__, NULL); if (nlevels != 2) return (BOXA *)ERROR_PTR("nlevels != 2 (for now)", __func__, NULL); debug = (ppixdb) ? 1 : 0; if (recogPrepareForDecoding(recog, pixs, debug)) return (BOXA *)ERROR_PTR("error making arrays", __func__, NULL); recogSetChannelParams(recog, nlevels); /* Normal path; just run Viterbi */ if (!debug) { if (recogRunViterbi(recog, NULL) == 0) return boxaCopy(recog->did->boxa, L_COPY); else return (BOXA *)ERROR_PTR("error in Viterbi", __func__, NULL); } /* Debug path */ if (recogRunViterbi(recog, &pix1)) return (BOXA *)ERROR_PTR("error in viterbi", __func__, NULL); pixa = pixaCreate(2); pixaAddPix(pixa, pix1, L_INSERT); if (recogRescoreDidResult(recog, &pix1)) { pixaDestroy(&pixa); return (BOXA *)ERROR_PTR("error in rescoring", __func__, NULL); } pixaAddPix(pixa, pix1, L_INSERT); *ppixdb = pixaDisplayTiledInRows(pixa, 32, 2 * pixGetWidth(pix1) + 100, 1.0, 0, 30, 2); pixaDestroy(&pixa); return boxaCopy(recog->did->boxa, L_COPY); } /*------------------------------------------------------------------------* * Generate decoding arrays * *------------------------------------------------------------------------*/ /*! * \brief recogPrepareForDecoding() * * \param[in] recog with LUT's pre-computed * \param[in] pixs typically of multiple touching characters, 1 bpp * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Binarizes and crops input %pixs.
 *      (2) Removes previous L_RDID struct and makes a new one.
 *      (3) Generates the bit-and sum arrays for each character template
 *          at each pixel position in %pixs.  These are used in the
 *          Viterbi dynamic programming step.
 *      (4) The values are saved in the scoring arrays at the left edge
 *          of the template.  They are used in the Viterbi process
 *          at the setwidth position (which is near the RHS of the template
 *          as it is positioned on pixs) in the generated trellis.
 * 
*/ static l_int32 recogPrepareForDecoding(L_RECOG *recog, PIX *pixs, l_int32 debug) { l_int32 i, ret; PIX *pix1; L_RDID *did; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!recog->train_done) return ERROR_INT("training not finished", __func__, 1); if (!recog->ave_done) { ret = recogAverageSamples(recog, 0); if (!ret) return ERROR_INT("averaging of samples failed", __func__, 1); } /* Binarize and crop to foreground if necessary */ if ((pix1 = recogProcessToIdentify(recog, pixs, 0)) == NULL) return ERROR_INT("pix1 not made", __func__, 1); /* Remove any existing RecogDID and set up a new one */ recogDestroyDid(recog); if (recogCreateDid(recog, pix1)) { pixDestroy(&pix1); return ERROR_INT("decoder not made", __func__, 1); } /* Compute vertical sum and first moment arrays */ did = recogGetDid(recog); /* owned by recog */ did->nasum = pixCountPixelsByColumn(pix1); did->namoment = pixGetMomentByColumn(pix1, 1); /* Generate the arrays */ for (i = 0; i < recog->did->narray; i++) recogMakeDecodingArray(recog, i, debug); pixDestroy(&pix1); return 0; } /*! * \brief recogMakeDecodingArray() * * \param[in] recog * \param[in] index of averaged template * \param[in] debug 1 for debug output; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates the bit-and sum array for a character template along pixs.
 *      (2) The values are saved in the scoring arrays at the left edge
 *          of the template as it is positioned on pixs.
 * 
*/ static l_int32 recogMakeDecodingArray(L_RECOG *recog, l_int32 index, l_int32 debug) { l_int32 i, j, w1, h1, w2, h2, nx, ycent2, count, maxcount, maxdely; l_int32 sum, moment, dely, shifty; l_int32 *counta, *delya, *ycent1, *arraysum, *arraymoment, *sumtab; NUMA *nasum, *namoment; PIX *pix1, *pix2, *pix3; L_RDID *did; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if (index < 0 || index >= did->narray) return ERROR_INT("invalid index", __func__, 1); /* Check that pix1 is large enough for this template. */ pix1 = did->pixs; /* owned by did; do not destroy */ pixGetDimensions(pix1, &w1, &h1, NULL); pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { L_INFO("w1 = %d < w2 = %d for index %d\n", __func__, w1, w2, index); pixDestroy(&pix2); return 0; } nasum = did->nasum; namoment = did->namoment; ptaGetIPt(recog->pta_u, index, NULL, &ycent2); sumtab = recog->sumtab; counta = did->counta[index]; delya = did->delya[index]; /* Set up the array for ycent1. This gives the y-centroid location * for a window of width w2, starting at location i. */ nx = w1 - w2 + 1; /* number of positions w2 can be placed in w1 */ ycent1 = (l_int32 *)LEPT_CALLOC(nx, sizeof(l_int32)); arraysum = numaGetIArray(nasum); arraymoment = numaGetIArray(namoment); for (i = 0, sum = 0, moment = 0; i < w2; i++) { sum += arraysum[i]; moment += arraymoment[i]; } for (i = 0; i < nx - 1; i++) { ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; sum += arraysum[w2 + i] - arraysum[i]; moment += arraymoment[w2 + i] - arraymoment[i]; } ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; /* Compute the bit-and sum between the template pix2 and pix1, at * locations where the left side of pix2 goes from 0 to nx - 1 * in pix1. Do this around the vertical alignment of the pix2 * centroid and the windowed pix1 centroid. * (1) Start with pix3 cleared and approximately equal in size to pix1. * (2) Blit the y-shifted pix2 onto pix3. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pix3. */ pix3 = pixCreate(w2, h1, 1); for (i = 0; i < nx; i++) { shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); maxcount = 0; maxdely = 0; for (j = -MaxYShift; j <= MaxYShift; j++) { pixClearAll(pix3); dely = shifty + j; /* amount pix2 is shifted relative to pix1 */ pixRasterop(pix3, 0, dely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pix3, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); pixCountPixels(pix3, &count, sumtab); if (count > maxcount) { maxcount = count; maxdely = dely; } } counta[i] = maxcount; delya[i] = maxdely; } did->fullarrays = TRUE; pixDestroy(&pix2); pixDestroy(&pix3); LEPT_FREE(ycent1); LEPT_FREE(arraysum); LEPT_FREE(arraymoment); return 0; } /*------------------------------------------------------------------------* * Dynamic programming for best path *------------------------------------------------------------------------*/ /*! * \brief recogRunViterbi() * * \param[in] recog with LUT's pre-computed * \param[out] ppixdb [optional] debug result; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can be used when the templates are unscaled.  It works by
 *          matching the average, unscaled templates of each class to
 *          all positions.
 *      (2) It is recursive, in that
 *          (a) we compute the score successively at all pixel positions x,
 *          (b) to compute the score at x in the trellis, for each
 *              template we look backwards to (x - setwidth) to get the
 *              score if that template were to be printed with its
 *              setwidth location at x.  We save at x the template and
 *              score that maximizes the sum of the score at (x - setwidth)
 *              and the log-likelihood for the template to be printed with
 *              its LHS there.
 *      (3) The primary output is a boxa of the locations for splitting
 *          the input image.  These locations are used later to split the
 *          image and send the pieces individually for recognition.
 *          This can be done in either recogIdentifyMultiple(), or
 *          for debugging in recogRescoreDidResult().
 * 
*/ static l_int32 recogRunViterbi(L_RECOG *recog, PIX **ppixdb) { l_int32 i, w1, w2, h1, xnz, x, narray, minsetw; l_int32 first, templ, xloc, dely, counts, area1; l_int32 besttempl, spacetempl; l_int32 *setw, *didtempl; l_int32 *area2; /* must be freed */ l_float32 prevscore, matchscore, maxscore, correl; l_float32 *didscore; BOX *box; PIX *pix1; L_RDID *did; if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if (did->fullarrays == 0) return ERROR_INT("did full arrays not made", __func__, 1); /* Compute the minimum setwidth. Bad templates with very small * width can cause havoc because the setwidth is too small. */ w1 = did->size; narray = did->narray; spacetempl = narray; setw = did->setwidth; minsetw = 100000; for (i = 0; i < narray; i++) { if (setw[i] < minsetw) minsetw = setw[i]; } if (minsetw <= 2) return ERROR_INT("minsetw <= 2; bad templates", __func__, 1); /* The score array is initialized to 0.0. As we proceed to * the left, the log likelihood for the partial paths goes * negative, and we prune for the max (least negative) path. * No matches will be computed until we reach x = min(setwidth); * until then first == TRUE after looping over templates. */ didscore = did->trellisscore; didtempl = did->trellistempl; area2 = numaGetIArray(recog->nasum_u); besttempl = 0; /* just tells compiler it is initialized */ maxscore = 0.0; /* ditto */ for (x = minsetw; x < w1; x++) { /* will always get a score */ first = TRUE; for (i = 0; i < narray; i++) { if (x - setw[i] < 0) continue; matchscore = didscore[x - setw[i]] + did->gamma[1] * did->counta[i][x - setw[i]] + did->beta[1] * area2[i]; if (first) { maxscore = matchscore; besttempl = i; first = FALSE; } else { if (matchscore > maxscore) { maxscore = matchscore; besttempl = i; } } } /* We can also put down a single pixel space, with no cost * because all pixels are bg. */ prevscore = didscore[x - 1]; if (prevscore > maxscore) { /* 1 pixel space is best */ maxscore = prevscore; besttempl = spacetempl; } didscore[x] = maxscore; didtempl[x] = besttempl; } /* Backtrack to get the best path. * Skip over (i.e., ignore) all single pixel spaces. */ for (x = w1 - 1; x >= 0; x--) { if (didtempl[x] != spacetempl) break; } h1 = pixGetHeight(did->pixs); while (x > 0) { if (didtempl[x] == spacetempl) { /* skip over spaces */ x--; continue; } templ = didtempl[x]; xloc = x - setw[templ]; if (xloc < 0) break; counts = did->counta[templ][xloc]; /* bit-and counts */ recogGetWindowedArea(recog, templ, xloc, &dely, &area1); correl = ((l_float32)(counts) * counts) / (l_float32)(area2[templ] * area1); pix1 = pixaGetPix(recog->pixa_u, templ, L_CLONE); w2 = pixGetWidth(pix1); numaAddNumber(did->natempl, templ); numaAddNumber(did->naxloc, xloc); numaAddNumber(did->nadely, dely); numaAddNumber(did->nawidth, pixGetWidth(pix1)); numaAddNumber(did->nascore, correl); xnz = L_MAX(xloc, 0); box = boxCreate(xnz, dely, w2, h1); boxaAddBox(did->boxa, box, L_INSERT); pixDestroy(&pix1); x = xloc; } if (ppixdb) { numaWriteStderr(did->natempl); numaWriteStderr(did->naxloc); numaWriteStderr(did->nadely); numaWriteStderr(did->nawidth); numaWriteStderr(did->nascore); boxaWriteStderr(did->boxa); *ppixdb = recogShowPath(recog, 0); } LEPT_FREE(area2); return 0; } /*! * \brief recogRescoreDidResult() * * \param[in] recog with LUT's pre-computed * \param[out] ppixdb [optional] debug result; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does correlation matching with all unscaled templates,
 *          using the character segmentation determined by the Viterbi path.
 * 
*/ static l_int32 recogRescoreDidResult(L_RECOG *recog, PIX **ppixdb) { l_int32 i, n, sample, x, dely, index; char *text = NULL; l_float32 score; BOX *box1; PIX *pixs, *pix1; L_RDID *did; if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if (did->fullarrays == 0) return ERROR_INT("did full arrays not made", __func__, 1); if ((n = numaGetCount(did->naxloc)) == 0) return ERROR_INT("no elements in path", __func__, 1); pixs = did->pixs; for (i = 0; i < n; i++) { box1 = boxaGetBox(did->boxa, i, L_COPY); boxGetGeometry(box1, &x, &dely, NULL, NULL); pix1 = pixClipRectangle(pixs, box1, NULL); recogIdentifyPix(recog, pix1, NULL); recogTransferRchToDid(recog, x, dely); if (ppixdb) { rchExtract(recog->rch, &index, &score, &text, &sample, NULL, NULL, NULL); lept_stderr("text = %s, index = %d, sample = %d," " score = %5.3f\n", text, index, sample, score); } pixDestroy(&pix1); boxDestroy(&box1); LEPT_FREE(text); } if (ppixdb) *ppixdb = recogShowPath(recog, 1); return 0; } /*! * \brief recogShowPath() * * \param[in] recog with LUT's pre-computed * \param[in] select 0 for Viterbi; 1 for rescored * \return pix debug output), or NULL on error */ static PIX * recogShowPath(L_RECOG *recog, l_int32 select) { char textstr[16]; l_int32 i, j, n, index, xloc, dely; l_float32 score; L_BMF *bmf; NUMA *natempl_s, *nasample_s = NULL, *nascore_s, *naxloc_s, *nadely_s; PIX *pixs, *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; L_RDID *did; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); if ((did = recogGetDid(recog)) == NULL) return (PIX *)ERROR_PTR("did not defined", __func__, NULL); bmf = bmfCreate(NULL, 8); pixs = pixScale(did->pixs, 4.0, 4.0); pix0 = pixAddBorderGeneral(pixs, 0, 0, 0, 40, 0); pix1 = pixConvertTo32(pix0); if (select == 0) { /* Viterbi */ natempl_s = did->natempl; nascore_s = did->nascore; naxloc_s = did->naxloc; nadely_s = did->nadely; } else { /* rescored */ natempl_s = did->natempl_r; nasample_s = did->nasample_r; nascore_s = did->nascore_r; naxloc_s = did->naxloc_r; nadely_s = did->nadely_r; } n = numaGetCount(natempl_s); for (i = 0; i < n; i++) { numaGetIValue(natempl_s, i, &index); if (select == 0) { pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); } else { numaGetIValue(nasample_s, i, &j); pix2 = pixaaGetPix(recog->pixaa_u, index, j, L_CLONE); } pix3 = pixScale(pix2, 4.0, 4.0); pix4 = pixErodeBrick(NULL, pix3, 5, 5); pixXor(pix4, pix4, pix3); numaGetFValue(nascore_s, i, &score); snprintf(textstr, sizeof(textstr), "%5.3f", score); pix5 = pixAddTextlines(pix4, bmf, textstr, 1, L_ADD_BELOW); numaGetIValue(naxloc_s, i, &xloc); numaGetIValue(nadely_s, i, &dely); pixPaintThroughMask(pix1, pix5, 4 * xloc, 4 * dely, 0xff000000); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } pixDestroy(&pixs); pixDestroy(&pix0); bmfDestroy(&bmf); return pix1; } /*------------------------------------------------------------------------* * Create/destroy temporary DID data * *------------------------------------------------------------------------*/ /*! * \brief recogCreateDid() * * \param[in] recog * \param[in] pixs of 1 bpp image to match * \return 0 if OK, 1 on error */ l_ok recogCreateDid(L_RECOG *recog, PIX *pixs) { l_int32 i; PIX *pix1; L_RDID *did; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); recogDestroyDid(recog); did = (L_RDID *)LEPT_CALLOC(1, sizeof(L_RDID)); recog->did = did; did->pixs = pixClone(pixs); did->narray = recog->setsize; did->size = pixGetWidth(pixs); did->natempl = numaCreate(5); did->naxloc = numaCreate(5); did->nadely = numaCreate(5); did->nawidth = numaCreate(5); did->boxa = boxaCreate(5); did->nascore = numaCreate(5); did->natempl_r = numaCreate(5); did->nasample_r = numaCreate(5); did->naxloc_r = numaCreate(5); did->nadely_r = numaCreate(5); did->nawidth_r = numaCreate(5); did->nascore_r = numaCreate(5); /* Make the arrays */ did->setwidth = (l_int32 *)LEPT_CALLOC(did->narray, sizeof(l_int32)); did->counta = (l_int32 **)LEPT_CALLOC(did->narray, sizeof(l_int32 *)); did->delya = (l_int32 **)LEPT_CALLOC(did->narray, sizeof(l_int32 *)); did->beta = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); did->gamma = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); did->trellisscore = (l_float32 *)LEPT_CALLOC(did->size, sizeof(l_float32)); did->trellistempl = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); for (i = 0; i < did->narray; i++) { did->counta[i] = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); did->delya[i] = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); } /* Populate the setwidth array */ for (i = 0; i < did->narray; i++) { pix1 = pixaGetPix(recog->pixa_u, i, L_CLONE); did->setwidth[i] = (l_int32)(SetwidthFraction * pixGetWidth(pix1)); pixDestroy(&pix1); } return 0; } /*! * \brief recogDestroyDid() * * \param[in] recog * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) As the signature indicates, this is owned by the recog, and can
 *          only be destroyed using this function.
 * 
*/ l_ok recogDestroyDid(L_RECOG *recog) { l_int32 i; L_RDID *did; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recog->did) == NULL) return 0; if (!did->counta || !did->delya) return ERROR_INT("ptr array is null; shouldn't happen!", __func__, 1); for (i = 0; i < did->narray; i++) { LEPT_FREE(did->counta[i]); LEPT_FREE(did->delya[i]); } LEPT_FREE(did->setwidth); LEPT_FREE(did->counta); LEPT_FREE(did->delya); LEPT_FREE(did->beta); LEPT_FREE(did->gamma); LEPT_FREE(did->trellisscore); LEPT_FREE(did->trellistempl); pixDestroy(&did->pixs); numaDestroy(&did->nasum); numaDestroy(&did->namoment); numaDestroy(&did->natempl); numaDestroy(&did->naxloc); numaDestroy(&did->nadely); numaDestroy(&did->nawidth); boxaDestroy(&did->boxa); numaDestroy(&did->nascore); numaDestroy(&did->natempl_r); numaDestroy(&did->nasample_r); numaDestroy(&did->naxloc_r); numaDestroy(&did->nadely_r); numaDestroy(&did->nawidth_r); numaDestroy(&did->nascore_r); LEPT_FREE(did); recog->did = NULL; return 0; } /*------------------------------------------------------------------------* * Various helpers * *------------------------------------------------------------------------*/ /*! * \brief recogDidExists() * * \param[in] recog * \return 1 if recog->did exists; 0 if not or on error. */ l_int32 recogDidExists(L_RECOG *recog) { if (!recog) return ERROR_INT("recog not defined", __func__, 0); return (recog->did) ? 1 : 0; } /*! * \brief recogGetDid() * * \param[in] recog * \return did still owned by the recog, or NULL on error * *
 * Notes:
 *      (1) This also makes sure the arrays are defined.
 * 
*/ L_RDID * recogGetDid(L_RECOG *recog) { l_int32 i; L_RDID *did; if (!recog) return (L_RDID *)ERROR_PTR("recog not defined", __func__, NULL); if ((did = recog->did) == NULL) return (L_RDID *)ERROR_PTR("did not defined", __func__, NULL); if (!did->counta || !did->delya) return (L_RDID *)ERROR_PTR("did array ptrs not defined", __func__, NULL); for (i = 0; i < did->narray; i++) { if (!did->counta[i] || !did->delya[i]) return (L_RDID *)ERROR_PTR("did arrays not defined", __func__, NULL); } return did; } /*! * \brief recogGetWindowedArea() * * \param[in] recog * \param[in] index of template * \param[in] x pixel position of left hand edge of template * \param[out] pdely y shift of template relative to pix1 * \param[out] pwsum number of fg pixels in window of pixs * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is called after the best path has been found through
 *          the trellis, in order to produce a correlation that can be used
 *          to evaluate the confidence we have in the identification.
 *          The correlation is |1 & 2|^2 / (|1| * |2|).
 *          |1 & 2| is given by the count array, |2| is found from
 *          nasum_u[], and |1| is wsum returned from this function.
 * 
*/ static l_int32 recogGetWindowedArea(L_RECOG *recog, l_int32 index, l_int32 x, l_int32 *pdely, l_int32 *pwsum) { l_int32 w1, h1, w2, h2; PIX *pix1, *pix2, *pixt; L_RDID *did; if (pdely) *pdely = 0; if (pwsum) *pwsum = 0; if (!pdely || !pwsum) return ERROR_INT("&dely and &wsum not both defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if (index < 0 || index >= did->narray) return ERROR_INT("invalid index", __func__, 1); pix1 = did->pixs; pixGetDimensions(pix1, &w1, &h1, NULL); if (x >= w1) return ERROR_INT("invalid x position", __func__, 1); pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { L_INFO("template %d too small\n", __func__, index); pixDestroy(&pix2); return 0; } *pdely = did->delya[index][x]; pixt = pixCreate(w2, h1, 1); pixRasterop(pixt, 0, *pdely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, x, 0); pixCountPixels(pixt, pwsum, recog->sumtab); pixDestroy(&pix2); pixDestroy(&pixt); return 0; } /*! * \brief recogSetChannelParams() * * \param[in] recog * \param[in] nlevels * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This converts the independent bit-flip probabilities in the
 *          "channel" into log-likelihood coefficients on image sums.
 *          These coefficients are only defined for the non-background
 *          template levels.  Thus for nlevels = 2 (one fg, one bg),
 *          only beta[1] and gamma[1] are used.  For nlevels = 4 (three
 *          fg templates), we use beta[1-3] and gamma[1-3].
 * 
*/ l_ok recogSetChannelParams(L_RECOG *recog, l_int32 nlevels) { l_int32 i; const l_float32 *da; L_RDID *did; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if (nlevels == 2) da = DefaultAlpha2; else if (nlevels == 4) da = DefaultAlpha4; else return ERROR_INT("nlevels not 2 or 4", __func__, 1); for (i = 1; i < nlevels; i++) { did->beta[i] = log((1.0 - da[i]) / da[0]); did->gamma[i] = log(da[0] * da[i] / ((1.0 - da[0]) * (1.0 - da[i]))); /* lept_stderr("beta[%d] = %7.3f, gamma[%d] = %7.3f\n", i, did->beta[i], i, did->gamma[i]); */ } return 0; } /*! * \brief recogTransferRchToDid() * * \param[in] recog with rch and did defined * \param[in] x left edge of extracted region, relative to decoded line * \param[in] y top edge of extracted region, relative to input image * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used to transfer the results for a single character match
 *          to the rescored did arrays.
 * 
*/ static l_int32 recogTransferRchToDid(L_RECOG *recog, l_int32 x, l_int32 y) { L_RDID *did; L_RCH *rch; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", __func__, 1); if ((rch = recog->rch) == NULL) return ERROR_INT("rch not defined", __func__, 1); numaAddNumber(did->natempl_r, rch->index); numaAddNumber(did->nasample_r, rch->sample); numaAddNumber(did->naxloc_r, rch->xloc + x); numaAddNumber(did->nadely_r, rch->yloc + y); numaAddNumber(did->nawidth_r, rch->width); numaAddNumber(did->nascore_r, rch->score); return 0; } leptonica-1.86.0/src/recogident.c000066400000000000000000002041461506303110300166410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file recogident.c *
 *
 *      Top-level identification
 *         l_int32             recogIdentifyMultiple()
 *
 *      Segmentation and noise removal
 *         l_int32             recogSplitIntoCharacters()
 *
 *      Greedy character splitting
 *         l_int32             recogCorrelationBestRow()
 *         l_int32             recogCorrelationBestChar()
 *         static l_int32      pixCorrelationBestShift()
 *
 *      Low-level identification of single characters
 *         l_int32             recogIdentifyPixa()
 *         l_int32             recogIdentifyPix()
 *         l_int32             recogSkipIdentify()
 *
 *      Operations for handling identification results
 *         static L_RCHA      *rchaCreate()
 *         void                rchaDestroy()
 *         static L_RCH       *rchCreate()
 *         void                rchDestroy()
 *         l_int32             rchaExtract()
 *         l_int32             rchExtract()
 *         static l_int32      transferRchToRcha()
 *
 *      Preprocessing and filtering
 *         l_int32             recogProcessToIdentify()
 *         static PIX         *recogPreSplittingFilter()
 *         static PIX         *recogSplittingFilter()
 *
 *      Postprocessing
 *         SARRAY             *recogExtractNumbers()
 *         PIX                *showExtractNumbers()
 *
 *      Static debug helper
 *         static void         l_showIndicatorSplitValues()
 *
 *  See recogbasic.c for examples of training a recognizer, which is
 *  required before it can be used for identification.
 *
 *  The character splitter repeatedly does a greedy correlation with each
 *  averaged unscaled template, at all pixel locations along the text to
 *  be identified.  The vertical alignment is between the template
 *  centroid and the (moving) windowed centroid, including a delta of
 *  1 pixel above and below.  The best match then removes part of the
 *  input image, leaving 1 or 2 pieces, which, after filtering,
 *  are put in a queue.  The process ends when the queue is empty.
 *  The filtering is based on the size and aspect ratio of the
 *  remaining pieces; the intent is to remove anything that is
 *  unlikely to be text, such as small pieces and line graphics.
 *
 *  After splitting, the selected segments are identified using
 *  the input parameters that were initially specified for the
 *  recognizer.  Unlike the splitter, which uses the averaged
 *  templates from the unscaled input, the recognizer can use
 *  either all training examples or averaged templates, and these
 *  can be either scaled or unscaled.  These choices are specified
 *  when the recognizer is constructed.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" /* There are two methods for splitting characters: DID and greedy. * The default method is DID. */ #define SPLIT_WITH_DID 1 /* Padding on pix1: added before correlations and removed from result */ static const l_int32 LeftRightPadding = 32; /* Parameters for filtering and sorting connected components in splitter */ static const l_float32 MinFillFactor = 0.10f; static const l_int32 DefaultMinHeight = 15; /* min unscaled height */ static const l_int32 MinOverlap1 = 6; /* in pass 1 of boxaSort2d() */ static const l_int32 MinOverlap2 = 6; /* in pass 2 of boxaSort2d() */ static const l_int32 MinHeightPass1 = 5; /* min height to start pass 1 */ static l_int32 pixCorrelationBestShift(PIX *pix1, PIX *pix2, NUMA *nasum1, NUMA *namoment1, l_int32 area2, l_int32 ycent2, l_int32 maxyshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); static L_RCH *rchCreate(l_int32 index, l_float32 score, char *text, l_int32 sample, l_int32 xloc, l_int32 yloc, l_int32 width); static L_RCHA *rchaCreate(); static l_int32 transferRchToRcha(L_RCH *rch, L_RCHA *rcha); static PIX *recogPreSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 minh, l_float32 minaf, l_int32 debug); static l_int32 recogSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 min, l_float32 minaf, l_int32 *premove, l_int32 debug); static void l_showIndicatorSplitValues(NUMA *na1, NUMA *na2, NUMA *na3, NUMA *na4, NUMA *na5, NUMA *na6); /*------------------------------------------------------------------------* * Identification *------------------------------------------------------------------------*/ /*! * \brief recogIdentifyMultiple() * * \param[in] recog with training finished * \param[in] pixs containing typically a small number of characters * \param[in] minh remove shorter components; use 0 for default * \param[in] skipsplit 1 to skip the splitting step * \param[out] pboxa [optional] locations of identified components * \param[out] ppixa [optional] images of identified components * \param[out] ppixdb [optional] debug pix: inputs and best fits * \param[in] debugsplit 1 returns pix split debugging images * \return 0 if OK; 1 if nothing is found; 2 for other errors. * *
 * Notes:
 *      (1) This filters the input pixa and calls recogIdentifyPixa()
 *      (2) Splitting is relatively slow, because it tries to match all
 *          character templates to all locations.  This step can be skipped.
 *      (3) An attempt is made to order the (optionally) returned images
 *          and boxes in 2-dimensional sorted order.  These can then
 *          be used to aggregate identified characters into numbers or words.
 *          One typically wants the pixa, which contains a boxa of the
 *          extracted subimages.
 * 
*/ l_ok recogIdentifyMultiple(L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit) { l_int32 n; BOXA *boxa; PIX *pixb; PIXA *pixa; if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 2); if (!recog->train_done) return ERROR_INT("training not finished", __func__, 2); if (!pixs) return ERROR_INT("pixs not defined", __func__, 2); /* Binarize if necessary */ if (pixGetDepth(pixs) > 1) pixb = pixConvertTo1(pixs, recog->threshold); else pixb = pixClone(pixs); /* Noise removal and splitting of touching characters */ recogSplitIntoCharacters(recog, pixb, minh, skipsplit, &boxa, &pixa, debugsplit); pixDestroy(&pixb); if (!pixa || (n = pixaGetCount(pixa)) == 0) { pixaDestroy(&pixa); boxaDestroy(&boxa); L_WARNING("nothing found\n", __func__); return 1; } recogIdentifyPixa(recog, pixa, ppixdb); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); if (ppixa) *ppixa = pixa; else pixaDestroy(&pixa); return 0; } /*------------------------------------------------------------------------* * Segmentation and noise removal * *------------------------------------------------------------------------*/ /*! * \brief recogSplitIntoCharacters() * * \param[in] recog * \param[in] pixs 1 bpp, contains only mostly deskewed text * \param[in] minh remove shorter components; use 0 for default * \param[in] skipsplit 1 to skip the splitting step * \param[out] pboxa character bounding boxes * \param[out] ppixa character images * \param[in] debug 1 for results written to pixadb_split * \return 0 if OK, 1 on error or if no components are returned * *
 * Notes:
 *      (1) This can be given an image that has an arbitrary number
 *          of text characters.  It optionally splits connected
 *          components based on document image decoding in recogDecode().
 *          The returned pixa includes the boxes from which the
 *          (possibly split) components are extracted.
 *      (2) After noise filtering, the resulting components are put in
 *          row-major (2D) order, and the smaller of overlapping
 *          components are removed if they satisfy conditions of
 *          relative size and fractional overlap.
 *      (3) Note that the splitting function uses unscaled templates
 *          and does not bother returning the class results and scores.
 *          These are more accurately found later using the scaled templates.
 * 
*/ l_ok recogSplitIntoCharacters(L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, l_int32 debug) { static l_int32 ind = 0; char buf[32]; l_int32 i, xoff, yoff, empty, maxw, bw, ncomp, scaling; BOX *box; BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxad; BOXAA *baa; PIX *pix, *pix1, *pix2, *pix3; PIXA *pixa; lept_mkdir("lept/recog"); if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (!pboxa || !ppixa) return ERROR_INT("&boxa and &pixa not defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!recog->train_done) return ERROR_INT("training not finished", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (minh <= 0) minh = DefaultMinHeight; pixZero(pixs, &empty); if (empty) return 1; /* Small vertical close for consolidation. Don't do a horizontal * closing, because it might join separate characters. */ pix1 = pixMorphSequence(pixs, "c1.3", 0); /* Carefully filter out noise */ pix2 = recogPreSplittingFilter(recog, pix1, minh, MinFillFactor, debug); pixDestroy(&pix1); /* Get the 8-connected components to be split/identified */ boxa1 = pixConnComp(pix2, NULL, 8); pixDestroy(&pix2); ncomp = boxaGetCount(boxa1); if (ncomp == 0) { boxaDestroy(&boxa1); L_WARNING("all components removed\n", __func__); return 1; } /* Save everything and split the large components */ boxa2 = boxaCreate(ncomp); maxw = recog->maxwidth_u + 5; scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; pixa = (debug) ? pixaCreate(ncomp) : NULL; for (i = 0; i < ncomp; i++) { box = boxaGetBox(boxa1, i, L_CLONE); boxGetGeometry(box, &xoff, &yoff, &bw, NULL); /* Treat as one character if it is small, if the images * have been scaled, or if splitting is not to be run. */ if (bw <= maxw || scaling || skipsplit) { boxaAddBox(boxa2, box, L_INSERT); } else { pix = pixClipRectangle(pixs, box, NULL); #if SPLIT_WITH_DID if (!debug) { boxa3 = recogDecode(recog, pix, 2, NULL); } else { boxa3 = recogDecode(recog, pix, 2, &pix2); pixaAddPix(pixa, pix2, L_INSERT); } #else /* use greedy splitting */ recogCorrelationBestRow(recog, pix, &boxa3, NULL, NULL, NULL, debug); if (debug) { pix2 = pixConvertTo32(pix); pixRenderBoxaArb(pix2, boxa3, 2, 255, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); } #endif /* SPLIT_WITH_DID */ pixDestroy(&pix); boxDestroy(&box); if (!boxa3) { L_ERROR("boxa3 not found for component %d\n", __func__, i); } else { boxa4 = boxaTransform(boxa3, xoff, yoff, 1.0, 1.0); boxaJoin(boxa2, boxa4, 0, -1); boxaDestroy(&boxa3); boxaDestroy(&boxa4); } } } boxaDestroy(&boxa1); if (pixa) { /* debug */ pix3 = pixaDisplayTiledInColumns(pixa, 1, 1.0, 20, 2); snprintf(buf, sizeof(buf), "/tmp/lept/recog/decode-%d.png", ind++); pixWrite(buf, pix3, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pix3); } /* Do a 2D sort on the bounding boxes, and flatten the result to 1D. * For the 2D sort, to add a box to an existing boxa, we require * specified minimum vertical overlaps for the first two passes * of the 2D sort. In pass 1, only components with sufficient * height can start a new boxa. */ baa = boxaSort2d(boxa2, NULL, MinOverlap1, MinOverlap2, MinHeightPass1); boxa3 = boxaaFlattenToBoxa(baa, NULL, L_CLONE); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Remove smaller components of overlapping pairs. * We only remove the small component if the overlap is * at least half its area and if its area is no more * than 30% of the area of the large component. Because the * components are in a flattened 2D sort, we don't need to * look far ahead in the array to find all overlapping boxes; * 10 boxes is plenty. */ boxad = boxaHandleOverlaps(boxa3, L_COMBINE, 10, 0.5f, 0.3f, NULL); boxaDestroy(&boxa3); /* Extract and save the image pieces from the input image. */ *ppixa = pixClipRectangles(pixs, boxad); *pboxa = boxad; return 0; } /*------------------------------------------------------------------------* * Greedy character splitting * *------------------------------------------------------------------------*/ /*! * \brief recogCorrelationBestRow() * * \param[in] recog with LUT's pre-computed * \param[in] pixs typically of multiple touching characters, 1 bpp * \param[out] pboxa bounding boxs of best fit character * \param[out] pnascore [optional] correlation scores * \param[out] pnaindex [optional] indices of classes * \param[out] psachar [optional] array of character strings * \param[in] debug 1 for results written to pixadb_split * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Supervises character matching for (in general) a c.c with
 *          multiple touching characters.  Finds the best match greedily.
 *          Rejects small parts that are left over after splitting.
 *      (2) Matching is to the average, and without character scaling.
 * 
*/ l_ok recogCorrelationBestRow(L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug) { char *charstr; l_int32 index, remove, w, h, bx, bw, bxc, bwc, w1, w2, w3; l_float32 score; BOX *box, *boxc, *boxtrans, *boxl, *boxr, *boxlt, *boxrt; BOXA *boxat; NUMA *nascoret, *naindext, *nasort; PIX *pixb, *pixc, *pixl, *pixr, *pixdb, *pixd; PIXA *pixar, *pixadb; SARRAY *sachart; l_int32 iter; if (pnascore) *pnascore = NULL; if (pnaindex) *pnaindex = NULL; if (psachar) *psachar = NULL; if (!pboxa) return ERROR_INT("&boxa not defined", __func__, 1); *pboxa = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (pixGetWidth(pixs) < recog->minwidth_u - 4) return ERROR_INT("pixs too narrow", __func__, 1); if (!recog->train_done) return ERROR_INT("training not finished", __func__, 1); /* Binarize and crop to foreground if necessary */ pixb = recogProcessToIdentify(recog, pixs, 0); /* Initialize the arrays */ boxat = boxaCreate(4); nascoret = numaCreate(4); naindext = numaCreate(4); sachart = sarrayCreate(4); pixadb = (debug) ? pixaCreate(4) : NULL; /* Initialize the images remaining to be processed with the input. * These are stored in pixar, which is used here as a queue, * on which we only put image fragments that are large enough to * contain at least one character. */ pixar = pixaCreate(1); pixGetDimensions(pixb, &w, &h, NULL); box = boxCreate(0, 0, w, h); pixaAddPix(pixar, pixb, L_INSERT); pixaAddBox(pixar, box, L_INSERT); /* Successively split on the best match until nothing is left. * To be safe, we limit the search to 10 characters. */ for (iter = 0; iter < 11; iter++) { if (pixaGetCount(pixar) == 0) break; if (iter == 10) { L_WARNING("more than 10 chars; ending search\n", __func__); break; } /* Pop one from the queue */ pixaRemovePixAndSave(pixar, 0, &pixc, &boxc); boxGetGeometry(boxc, &bxc, NULL, &bwc, NULL); /* This is a single component; if noise, remove it */ recogSplittingFilter(recog, pixc, 0, MinFillFactor, &remove, debug); if (debug) lept_stderr("iter = %d, removed = %d\n", iter, remove); if (remove) { pixDestroy(&pixc); boxDestroy(&boxc); continue; } /* Find the best character match */ if (debug) { recogCorrelationBestChar(recog, pixc, &box, &score, &index, &charstr, &pixdb); pixaAddPix(pixadb, pixdb, L_INSERT); } else { recogCorrelationBestChar(recog, pixc, &box, &score, &index, &charstr, NULL); } /* Find the box in original coordinates, and append * the results to the arrays. */ boxtrans = boxTransform(box, bxc, 0, 1.0, 1.0); boxaAddBox(boxat, boxtrans, L_INSERT); numaAddNumber(nascoret, score); numaAddNumber(naindext, index); sarrayAddString(sachart, charstr, L_INSERT); /* Split the current pixc into three regions and save * each region if it is large enough. */ boxGetGeometry(box, &bx, NULL, &bw, NULL); w1 = bx; w2 = bw; w3 = bwc - bx - bw; if (debug) lept_stderr(" w1 = %d, w2 = %d, w3 = %d\n", w1, w2, w3); if (w1 < recog->minwidth_u - 4) { if (debug) L_INFO("discarding width %d on left\n", __func__, w1); } else { /* extract and save left region */ boxl = boxCreate(0, 0, bx + 1, h); pixl = pixClipRectangle(pixc, boxl, NULL); boxlt = boxTransform(boxl, bxc, 0, 1.0, 1.0); pixaAddPix(pixar, pixl, L_INSERT); pixaAddBox(pixar, boxlt, L_INSERT); boxDestroy(&boxl); } if (w3 < recog->minwidth_u - 4) { if (debug) L_INFO("discarding width %d on right\n", __func__, w3); } else { /* extract and save left region */ boxr = boxCreate(bx + bw - 1, 0, w3 + 1, h); pixr = pixClipRectangle(pixc, boxr, NULL); boxrt = boxTransform(boxr, bxc, 0, 1.0, 1.0); pixaAddPix(pixar, pixr, L_INSERT); pixaAddBox(pixar, boxrt, L_INSERT); boxDestroy(&boxr); } pixDestroy(&pixc); boxDestroy(&box); boxDestroy(&boxc); } pixaDestroy(&pixar); /* Sort the output results by left-to-right in the boxa */ *pboxa = boxaSort(boxat, L_SORT_BY_X, L_SORT_INCREASING, &nasort); if (pnascore) *pnascore = numaSortByIndex(nascoret, nasort); if (pnaindex) *pnaindex = numaSortByIndex(naindext, nasort); if (psachar) *psachar = sarraySortByIndex(sachart, nasort); numaDestroy(&nasort); boxaDestroy(&boxat); numaDestroy(&nascoret); numaDestroy(&naindext); sarrayDestroy(&sachart); /* Final debug output */ if (debug) { pixd = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 15, 2); pixDisplay(pixd, 400, 400); pixaAddPix(recog->pixadb_split, pixd, L_INSERT); pixaDestroy(&pixadb); } return 0; } /*! * \brief recogCorrelationBestChar() * * \param[in] recog with LUT's pre-computed * \param[in] pixs can be of multiple touching characters, 1 bpp * \param[out] pbox bounding box of best fit character * \param[out] pscore correlation score * \param[out] pindex [optional] index of class * \param[out] pcharstr [optional] character string of class * \param[out] ppixdb [optional] debug pix showing input and best fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Basic matching character splitter.  Finds the best match among
 *          all templates to some region of the image.  This can result
 *          in splitting the image into two parts.  This is "image decoding"
 *          without dynamic programming, because we don't use a setwidth
 *          and compute the best matching score for the entire image.
 *      (2) Matching is to the average templates, without character scaling.
 * 
*/ l_ok recogCorrelationBestChar(L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb) { l_int32 i, n, w1, h1, w2, area2, ycent2, delx, dely; l_int32 bestdelx, bestdely, bestindex; l_float32 score, bestscore; BOX *box; BOXA *boxa; NUMA *nasum, *namoment; PIX *pix1, *pix2; if (pindex) *pindex = 0; if (pcharstr) *pcharstr = NULL; if (ppixdb) *ppixdb = NULL; if (pbox) *pbox = NULL; if (pscore) *pscore = 0.0; if (!pbox || !pscore) return ERROR_INT("&box and &score not both defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (!recog->train_done) return ERROR_INT("training not finished", __func__, 1); /* Binarize and crop to foreground if necessary. Add padding * to both the left and right side; this is compensated for * when reporting the bounding box of the best matched character. */ pix1 = recogProcessToIdentify(recog, pixs, LeftRightPadding); pixGetDimensions(pix1, &w1, &h1, NULL); /* Compute vertical sum and moment arrays */ nasum = pixCountPixelsByColumn(pix1); namoment = pixGetMomentByColumn(pix1, 1); /* Do shifted correlation against all averaged templates. */ n = recog->setsize; boxa = boxaCreate(n); /* location of best fits for each character */ bestscore = 0.0; bestindex = bestdelx = bestdely = 0; for (i = 0; i < n; i++) { pix2 = pixaGetPix(recog->pixa_u, i, L_CLONE); w2 = pixGetWidth(pix2); /* Note that the slightly expended w1 is typically larger * than w2 (the template). */ if (w1 >= w2) { numaGetIValue(recog->nasum_u, i, &area2); ptaGetIPt(recog->pta_u, i, NULL, &ycent2); pixCorrelationBestShift(pix1, pix2, nasum, namoment, area2, ycent2, recog->maxyshift, recog->sumtab, &delx, &dely, &score, 1); if (ppixdb) { lept_stderr( "Best match template %d: (x,y) = (%d,%d), score = %5.3f\n", i, delx, dely, score); } /* Compensate for padding */ box = boxCreate(delx - LeftRightPadding, 0, w2, h1); if (score > bestscore) { bestscore = score; bestdelx = delx - LeftRightPadding; bestdely = dely; bestindex = i; } } else { box = boxCreate(0, 0, 1, 1); /* placeholder */ if (ppixdb) lept_stderr("Component too thin: w1 = %d, w2 = %d\n", w1, w2); } boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pix2); } *pscore = bestscore; *pbox = boxaGetBox(boxa, bestindex, L_COPY); if (pindex) *pindex = bestindex; if (pcharstr) recogGetClassString(recog, bestindex, pcharstr); if (ppixdb) { L_INFO("Best match: class %d; shifts (%d, %d)\n", __func__, bestindex, bestdelx, bestdely); pix2 = pixaGetPix(recog->pixa_u, bestindex, L_CLONE); *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); pixDestroy(&pix2); } pixDestroy(&pix1); boxaDestroy(&boxa); numaDestroy(&nasum); numaDestroy(&namoment); return 0; } /*! * \brief pixCorrelationBestShift() * * \param[in] pix1 1 bpp, the unknown image; typically larger * \param[in] pix2 1 bpp, the matching template image) * \param[in] nasum1 vertical column pixel sums for pix1 * \param[in] namoment1 vertical column first moment of pixels for pix1 * \param[in] area2 number of on pixels in pix2 * \param[in] ycent2 y component of centroid of pix2 * \param[in] maxyshift max y shift of pix2 around the location where * the centroids of pix2 and a windowed part of pix1 * are vertically aligned * \param[in] tab8 [optional] sum tab for ON pixels in byte; * can be NULL * \param[out] pdelx [optional] best x shift of pix2 relative to pix1 * \param[out] pdely [optional] best y shift of pix2 relative to pix1 * \param[out] pscore [optional] maximum score found; can be NULL * \param[in] debugflag <= 0 to skip; positive to generate output; * the integer is used to label the debug image. * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This maximizes the correlation score between two 1 bpp images,
 *          one of which is typically wider.  In a typical example,
 *          pix1 is a bitmap of 2 or more touching characters and pix2 is
 *          a single character template.  This finds the location of pix2
 *          that gives the largest correlation.
 *      (2) The windowed area of fg pixels and windowed first moment
 *          in the y direction are computed from the input sum and moment
 *          column arrays, %nasum1 and %namoment1
 *      (3) This is a brute force operation.  We compute the correlation
 *          at every x shift for which pix2 fits entirely within pix1,
 *          and where the centroid of pix2 is aligned, within +-maxyshift,
 *          with the centroid of a window of pix1 of the same width.
 *          The correlation is taken over the full height of pix1.
 *          This can be made more efficient.
 * 
*/ static l_int32 pixCorrelationBestShift(PIX *pix1, PIX *pix2, NUMA *nasum1, NUMA *namoment1, l_int32 area2, l_int32 ycent2, l_int32 maxyshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_int32 w1, w2, h1, h2, i, j, nx, shifty, delx, dely; l_int32 sum, moment, count; l_int32 *tab, *area1, *arraysum, *arraymoment; l_float32 maxscore, score; l_float32 *ycent1; FPIX *fpix = NULL; PIX *pixt, *pixt1, *pixt2; if (pdelx) *pdelx = 0; if (pdely) *pdely = 0; if (pscore) *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", __func__, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", __func__, 1); if (!nasum1 || !namoment1) return ERROR_INT("nasum1 and namoment1 not both defined", __func__, 1); if (area2 <= 0 || ycent2 <= 0) return ERROR_INT("area2 and ycent2 must be > 0", __func__, 1); /* If pix1 (the unknown image) is narrower than pix2, * don't bother to try the match. pix1 is already padded with * 2 pixels on each side. */ pixGetDimensions(pix1, &w1, &h1, NULL); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { if (debugflag > 0) { L_INFO("skipping match with w1 = %d and w2 = %d\n", __func__, w1, w2); } return 0; } nx = w1 - w2 + 1; if (debugflag > 0) fpix = fpixCreate(nx, 2 * maxyshift + 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; /* Set up the arrays for area1 and ycent1. We have to do this * for each template (pix2) because the window width is w2. */ area1 = (l_int32 *)LEPT_CALLOC(nx, sizeof(l_int32)); ycent1 = (l_float32 *)LEPT_CALLOC(nx, sizeof(l_int32)); arraysum = numaGetIArray(nasum1); arraymoment = numaGetIArray(namoment1); for (i = 0, sum = 0, moment = 0; i < w2; i++) { sum += arraysum[i]; moment += arraymoment[i]; } for (i = 0; i < nx - 1; i++) { area1[i] = sum; ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; sum += arraysum[w2 + i] - arraysum[i]; moment += arraymoment[w2 + i] - arraymoment[i]; } area1[nx - 1] = sum; ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; /* Find the best match location for pix2. At each location, * to insure that pixels are ON only within the intersection of * pix and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreate(w2, h1, 1); maxscore = 0; delx = 0; dely = 0; /* amount to shift pix2 relative to pix1 to get alignment */ for (i = 0; i < nx; i++) { shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); for (j = -maxyshift; j <= maxyshift; j++) { pixClearAll(pixt); pixRasterop(pixt, 0, shifty + j, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); pixCountPixels(pixt, &count, tab); score = (l_float32)count * (l_float32)count / ((l_float32)area1[i] * (l_float32)area2); if (score > maxscore) { maxscore = score; delx = i; dely = shifty + j; } if (debugflag > 0) fpixSetPixel(fpix, i, maxyshift + j, 1000.0 * score); } } if (debugflag > 0) { char buf[128]; lept_mkdir("lept/recog"); pixt1 = fpixDisplayMaxDynamicRange(fpix); pixt2 = pixExpandReplicate(pixt1, 5); snprintf(buf, sizeof(buf), "/tmp/lept/recog/junkbs_%d.png", debugflag); pixWrite(buf, pixt2, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); fpixDestroy(&fpix); } if (pdelx) *pdelx = delx; if (pdely) *pdely = dely; if (pscore) *pscore = maxscore; if (!tab8) LEPT_FREE(tab); LEPT_FREE(area1); LEPT_FREE(ycent1); LEPT_FREE(arraysum); LEPT_FREE(arraymoment); pixDestroy(&pixt); return 0; } /*------------------------------------------------------------------------* * Low-level identification * *------------------------------------------------------------------------*/ /*! * \brief recogIdentifyPixa() * * \param[in] recog * \param[in] pixa of 1 bpp images to match * \param[out] ppixdb [optional] pix showing inputs and best fits * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This should be called by recogIdentifyMuliple(), which
 *          binarizes and splits characters before sending %pixa here.
 *      (2) This calls recogIdentifyPix(), which does the same operation
 *          on each pix in %pixa, and optionally returns the arrays
 *          of results (scores, class index and character string)
 *          for the best correlation match.
 * 
*/ l_ok recogIdentifyPixa(L_RECOG *recog, PIXA *pixa, PIX **ppixdb) { char *text; l_int32 i, n, fail, index, depth; l_float32 score; PIX *pix1, *pix2, *pix3; PIXA *pixa1; L_RCH *rch; if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); /* Run the recognizer on the set of images. This writes * the text string into each pix in pixa. */ n = pixaGetCount(pixa); rchaDestroy(&recog->rcha); recog->rcha = rchaCreate(); pixa1 = (ppixdb) ? pixaCreate(n) : NULL; depth = 1; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = NULL; fail = FALSE; if (!ppixdb) fail = recogIdentifyPix(recog, pix1, NULL); else fail = recogIdentifyPix(recog, pix1, &pix2); if (fail) recogSkipIdentify(recog); if ((rch = recog->rch) == NULL) { L_ERROR("rch not found for char %d\n", __func__, i); pixDestroy(&pix1); pixDestroy(&pix2); continue; } rchExtract(rch, NULL, NULL, &text, NULL, NULL, NULL, NULL); pixSetText(pix1, text); LEPT_FREE(text); if (ppixdb) { rchExtract(rch, &index, &score, NULL, NULL, NULL, NULL, NULL); pix3 = recogShowMatch(recog, pix2, NULL, NULL, index, score); if (i == 0) depth = pixGetDepth(pix3); pixaAddPix(pixa1, pix3, L_INSERT); pixDestroy(&pix2); } transferRchToRcha(rch, recog->rcha); pixDestroy(&pix1); } /* Package the images for debug */ if (ppixdb) { *ppixdb = pixaDisplayTiledInRows(pixa1, depth, 2500, 1.0, 0, 20, 1); pixaDestroy(&pixa1); } return 0; } /*! * \brief recogIdentifyPix() * * \param[in] recog with LUT's pre-computed * \param[in] pixs of a single character, 1 bpp * \param[out] ppixdb [optional] debug pix showing input and best fit * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Basic recognition function for a single character.
 *      (2) If templ_use == L_USE_ALL_TEMPLATES, which is the default
 *          situation, matching is attempted to every bitmap in the recog,
 *          and the identify of the best match is returned.
 *      (3) For finding outliers, templ_use == L_USE_AVERAGE_TEMPLATES, and
 *          matching is only attemplted to the averaged bitmaps.  For this
 *          case, the index of the bestsample is meaningless (0 is returned
 *          if requested).
 *      (4) The score is related to the confidence (probability of correct
 *          identification), in that a higher score is correlated with
 *          a higher probability.  However, the actual relation between
 *          the correlation (score) and the probability is not known;
 *          we call this a "score" because "confidence" can be misinterpreted
 *          as an actual probability.
 * 
*/ l_ok recogIdentifyPix(L_RECOG *recog, PIX *pixs, PIX **ppixdb) { char *text; l_int32 i, j, n, bestindex, bestsample, area1, area2, ret; l_int32 shiftx, shifty, bestdelx, bestdely, bestwidth, maxyshift; l_float32 x1, y1, x2, y2, delx, dely, score, maxscore; NUMA *numa; PIX *pix0, *pix1, *pix2; PIXA *pixa; PTA *pta; if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); /* Do the averaging if required and not yet done. */ if (recog->templ_use == L_USE_AVERAGE_TEMPLATES && !recog->ave_done) { ret = recogAverageSamples(recog, 0); if (ret) return ERROR_INT("averaging failed", __func__, 1); } /* Binarize and crop to foreground if necessary */ if ((pix0 = recogProcessToIdentify(recog, pixs, 0)) == NULL) return ERROR_INT("no fg pixels in pix0", __func__, 1); /* Optionally scale and/or convert to fixed stroke width */ pix1 = recogModifyTemplate(recog, pix0); pixDestroy(&pix0); if (!pix1) return ERROR_INT("no fg pixels in pix1", __func__, 1); /* Do correlation at all positions within +-maxyshift of * the nominal centroid alignment. */ pixCountPixels(pix1, &area1, recog->sumtab); pixCentroid(pix1, recog->centtab, recog->sumtab, &x1, &y1); bestindex = bestsample = bestdelx = bestdely = bestwidth = 0; maxscore = 0.0; maxyshift = recog->maxyshift; if (recog->templ_use == L_USE_AVERAGE_TEMPLATES) { for (i = 0; i < recog->setsize; i++) { numaGetIValue(recog->nasum, i, &area2); if (area2 == 0) continue; /* no template available */ pix2 = pixaGetPix(recog->pixa, i, L_CLONE); ptaGetPt(recog->pta, i, &x2, &y2); delx = x1 - x2; dely = y1 - y2; for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { pixCorrelationScoreSimple(pix1, pix2, area1, area2, delx + shiftx, dely + shifty, 5, 5, recog->sumtab, &score); if (score > maxscore) { bestindex = i; bestdelx = delx + shiftx; bestdely = dely + shifty; maxscore = score; } } } pixDestroy(&pix2); } } else { /* use all the samples */ for (i = 0; i < recog->setsize; i++) { pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); n = pixaGetCount(pixa); if (n == 0) { pixaDestroy(&pixa); continue; } numa = numaaGetNuma(recog->naasum, i, L_CLONE); pta = ptaaGetPta(recog->ptaa, i, L_CLONE); for (j = 0; j < n; j++) { pix2 = pixaGetPix(pixa, j, L_CLONE); numaGetIValue(numa, j, &area2); ptaGetPt(pta, j, &x2, &y2); delx = x1 - x2; dely = y1 - y2; for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { pixCorrelationScoreSimple(pix1, pix2, area1, area2, delx + shiftx, dely + shifty, 5, 5, recog->sumtab, &score); if (score > maxscore) { bestindex = i; bestsample = j; bestdelx = delx + shiftx; bestdely = dely + shifty; maxscore = score; bestwidth = pixGetWidth(pix2); } } } pixDestroy(&pix2); } pixaDestroy(&pixa); numaDestroy(&numa); ptaDestroy(&pta); } } /* Package up the results */ recogGetClassString(recog, bestindex, &text); rchDestroy(&recog->rch); recog->rch = rchCreate(bestindex, maxscore, text, bestsample, bestdelx, bestdely, bestwidth); if (ppixdb) { if (recog->templ_use == L_USE_AVERAGE_TEMPLATES) { L_INFO("Best match: str %s; class %d; sh (%d, %d); score %5.3f\n", __func__, text, bestindex, bestdelx, bestdely, maxscore); pix2 = pixaGetPix(recog->pixa, bestindex, L_CLONE); } else { /* L_USE_ALL_TEMPLATES */ L_INFO("Best match: str %s; sample %d in class %d; score %5.3f\n", __func__, text, bestsample, bestindex, maxscore); if (maxyshift > 0 && (L_ABS(bestdelx) > 0 || L_ABS(bestdely) > 0)) { L_INFO(" Best shift: (%d, %d)\n", __func__, bestdelx, bestdely); } pix2 = pixaaGetPix(recog->pixaa, bestindex, bestsample, L_CLONE); } *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); pixDestroy(&pix2); } pixDestroy(&pix1); return 0; } /*! * \brief recogSkipIdentify() * * \param[in] recog * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This just writes a "dummy" result with 0 score and empty
 *          string id into the rch.
 * 
*/ l_ok recogSkipIdentify(L_RECOG *recog) { if (!recog) return ERROR_INT("recog not defined", __func__, 1); /* Package up placeholder results */ rchDestroy(&recog->rch); recog->rch = rchCreate(0, 0.0, stringNew(""), 0, 0, 0, 0); return 0; } /*------------------------------------------------------------------------* * Operations for handling identification results * *------------------------------------------------------------------------*/ /*! * \brief rchaCreate() * * Return: 0 if OK, 1 on error * * Notes: * (1) Be sure to destroy any existing rcha before assigning this. */ static L_RCHA * rchaCreate() { L_RCHA *rcha; rcha = (L_RCHA *)LEPT_CALLOC(1, sizeof(L_RCHA)); rcha->naindex = numaCreate(0); rcha->nascore = numaCreate(0); rcha->satext = sarrayCreate(0); rcha->nasample = numaCreate(0); rcha->naxloc = numaCreate(0); rcha->nayloc = numaCreate(0); rcha->nawidth = numaCreate(0); return rcha; } /*! * \brief rchaDestroy() * * \param[in,out] prcha to be nulled */ void rchaDestroy(L_RCHA **prcha) { L_RCHA *rcha; if (prcha == NULL) { L_WARNING("&rcha is null!\n", __func__); return; } if ((rcha = *prcha) == NULL) return; numaDestroy(&rcha->naindex); numaDestroy(&rcha->nascore); sarrayDestroy(&rcha->satext); numaDestroy(&rcha->nasample); numaDestroy(&rcha->naxloc); numaDestroy(&rcha->nayloc); numaDestroy(&rcha->nawidth); LEPT_FREE(rcha); *prcha = NULL; } /*! * \brief rchCreate() * * \param[in] index index of best template * \param[in] score correlation score of best template * \param[in] text character string of best template * \param[in] sample index of best sample; -1 if averages are used * \param[in] xloc x-location of template: delx + shiftx * \param[in] yloc y-location of template: dely + shifty * \param[in] width width of best template * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Be sure to destroy any existing rch before assigning this.
 *      (2) This stores the text string, not a copy of it, so the
 *          caller must not destroy the string.
 * 
*/ static L_RCH * rchCreate(l_int32 index, l_float32 score, char *text, l_int32 sample, l_int32 xloc, l_int32 yloc, l_int32 width) { L_RCH *rch; rch = (L_RCH *)LEPT_CALLOC(1, sizeof(L_RCH)); rch->index = index; rch->score = score; rch->text = text; rch->sample = sample; rch->xloc = xloc; rch->yloc = yloc; rch->width = width; return rch; } /*! * \brief rchDestroy() * * \param[in,out] prch to be nulled */ void rchDestroy(L_RCH **prch) { L_RCH *rch; if (prch == NULL) { L_WARNING("&rch is null!\n", __func__); return; } if ((rch = *prch) == NULL) return; LEPT_FREE(rch->text); LEPT_FREE(rch); *prch = NULL; } /*! * \brief rchaExtract() * * \param[in] rcha * \param[out] pnaindex [optional] indices of best templates * \param[out] pnascore [optional] correl scores of best templates * \param[out] psatext [optional] character strings of best templates * \param[out] pnasample [optional] indices of best samples * \param[out] pnaxloc [optional] x-locations of templates * \param[out] pnayloc [optional] y-locations of templates * \param[out] pnawidth [optional] widths of best templates * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This returns clones of the number and string arrays.  They must
 *          be destroyed by the caller.
 * 
*/ l_ok rchaExtract(L_RCHA *rcha, NUMA **pnaindex, NUMA **pnascore, SARRAY **psatext, NUMA **pnasample, NUMA **pnaxloc, NUMA **pnayloc, NUMA **pnawidth) { if (pnaindex) *pnaindex = NULL; if (pnascore) *pnascore = NULL; if (psatext) *psatext = NULL; if (pnasample) *pnasample = NULL; if (pnaxloc) *pnaxloc = NULL; if (pnayloc) *pnayloc = NULL; if (pnawidth) *pnawidth = NULL; if (!rcha) return ERROR_INT("rcha not defined", __func__, 1); if (pnaindex) *pnaindex = numaClone(rcha->naindex); if (pnascore) *pnascore = numaClone(rcha->nascore); if (psatext) *psatext = sarrayClone(rcha->satext); if (pnasample) *pnasample = numaClone(rcha->nasample); if (pnaxloc) *pnaxloc = numaClone(rcha->naxloc); if (pnayloc) *pnayloc = numaClone(rcha->nayloc); if (pnawidth) *pnawidth = numaClone(rcha->nawidth); return 0; } /*! * \brief rchExtract() * * \param[in] rch * \param[out] pindex [optional] index of best template * \param[out] pscore [optional] correlation score of best template * \param[out] ptext [optional] character string of best template * \param[out] psample [optional] index of best sample * \param[out] pxloc [optional] x-location of template * \param[out] pyloc [optional] y-location of template * \param[out] pwidth [optional] width of best template * \return 0 if OK, 1 on error */ l_ok rchExtract(L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth) { if (pindex) *pindex = 0; if (pscore) *pscore = 0.0; if (ptext) *ptext = NULL; if (psample) *psample = 0; if (pxloc) *pxloc = 0; if (pyloc) *pyloc = 0; if (pwidth) *pwidth = 0; if (!rch) return ERROR_INT("rch not defined", __func__, 1); if (pindex) *pindex = rch->index; if (pscore) *pscore = rch->score; if (ptext) *ptext = stringNew(rch->text); /* new string: owned by caller */ if (psample) *psample = rch->sample; if (pxloc) *pxloc = rch->xloc; if (pyloc) *pyloc = rch->yloc; if (pwidth) *pwidth = rch->width; return 0; } /*! * \brief transferRchToRcha() * * \param[in] rch source of data * \param[in] rcha append to arrays in this destination * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is used to transfer the results of a single character
 *          identification to an rcha array for the array of characters.
 * 
*/ static l_int32 transferRchToRcha(L_RCH *rch, L_RCHA *rcha) { if (!rch) return ERROR_INT("rch not defined", __func__, 1); if (!rcha) return ERROR_INT("rcha not defined", __func__, 1); numaAddNumber(rcha->naindex, rch->index); numaAddNumber(rcha->nascore, rch->score); sarrayAddString(rcha->satext, rch->text, L_COPY); numaAddNumber(rcha->nasample, rch->sample); numaAddNumber(rcha->naxloc, rch->xloc); numaAddNumber(rcha->nayloc, rch->yloc); numaAddNumber(rcha->nawidth, rch->width); return 0; } /*------------------------------------------------------------------------* * Preprocessing and filtering * *------------------------------------------------------------------------*/ /*! * \brief recogProcessToIdentify() * * \param[in] recog with LUT's pre-computed * \param[in] pixs typ. single character, possibly d > 1 and uncropped * \param[in] pad extra pixels added to left and right sides * \return pixd 1 bpp, clipped to foreground, or NULL if there * are no fg pixels or on error. * *
 * Notes:
 *      (1) This is a lightweight operation to insure that the input
 *          image is 1 bpp, properly cropped, and padded on each side.
 *          If bpp > 1, the image is thresholded.
 * 
*/ PIX * recogProcessToIdentify(L_RECOG *recog, PIX *pixs, l_int32 pad) { l_int32 canclip; PIX *pix1, *pix2, *pixd; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) pix1 = pixThresholdToBinary(pixs, recog->threshold); else pix1 = pixClone(pixs); pixTestClipToForeground(pix1, &canclip); if (canclip) pixClipToForeground(pix1, &pix2, NULL); else pix2 = pixClone(pix1); pixDestroy(&pix1); if (!pix2) return (PIX *)ERROR_PTR("no foreground pixels", __func__, NULL); pixd = pixAddBorderGeneral(pix2, pad, pad, 0, 0, 0); pixDestroy(&pix2); return pixd; } /*! * \brief recogPreSplittingFilter() * * \param[in] recog * \param[in] pixs 1 bpp, many connected components * \param[in] minh minimum height of components to be retained * \param[in] minaf minimum area fraction (|fg|/(w*h)) to be retained * \param[in] debug 1 to output indicator arrays * \return pixd with filtered components removed or NULL on error */ static PIX * recogPreSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 minh, l_float32 minaf, l_int32 debug) { l_int32 scaling, minsplitw, maxsplith, maxasp; BOXA *boxas; NUMA *naw, *nah, *na1, *na1c, *na2, *na3, *na4, *na5, *na6, *na7; PIX *pixd; PIXA *pixas; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* If there is scaling, do not remove components based on the * values of min_splitw and max_splith. */ scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; minsplitw = (scaling) ? 1 : recog->min_splitw - 3; maxsplith = (scaling) ? 150 : recog->max_splith; maxasp = recog->max_wh_ratio; /* Generate an indicator array of connected components to remove: * short stuff * tall stuff * components with large width/height ratio * components with small area fill fraction */ boxas = pixConnComp(pixs, &pixas, 8); pixaFindDimensions(pixas, &naw, &nah); na1 = numaMakeThresholdIndicator(naw, minsplitw, L_SELECT_IF_LT); na1c = numaCopy(na1); na2 = numaMakeThresholdIndicator(nah, minh, L_SELECT_IF_LT); na3 = numaMakeThresholdIndicator(nah, maxsplith, L_SELECT_IF_GT); na4 = pixaFindWidthHeightRatio(pixas); na5 = numaMakeThresholdIndicator(na4, maxasp, L_SELECT_IF_GT); na6 = pixaFindAreaFraction(pixas); na7 = numaMakeThresholdIndicator(na6, minaf, L_SELECT_IF_LT); numaLogicalOp(na1, na1, na2, L_UNION); numaLogicalOp(na1, na1, na3, L_UNION); numaLogicalOp(na1, na1, na5, L_UNION); numaLogicalOp(na1, na1, na7, L_UNION); pixd = pixCopy(NULL, pixs); pixRemoveWithIndicator(pixd, pixas, na1); if (debug) l_showIndicatorSplitValues(na1c, na2, na3, na5, na7, na1); numaDestroy(&naw); numaDestroy(&nah); numaDestroy(&na1); numaDestroy(&na1c); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); numaDestroy(&na7); boxaDestroy(&boxas); pixaDestroy(&pixas); return pixd; } /*! * \brief recogSplittingFilter() * * \param[in] recog * \param[in] pixs 1 bpp, single connected component * \param[in] minh minimum height of component; 0 for default * \param[in] minaf minimum area fraction (|fg|/(w*h)) to be retained * \param[out] premove 0 to save, 1 to remove * \param[in] debug 1 to output indicator arrays * \return 0 if OK, 1 on error */ static l_int32 recogSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 minh, l_float32 minaf, l_int32 *premove, l_int32 debug) { l_int32 w, h; l_float32 aspratio, fract; if (!premove) return ERROR_INT("&remove not defined", __func__, 1); *premove = 0; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (minh <= 0) minh = DefaultMinHeight; /* Remove from further consideration: * small stuff * components with large width/height ratio * components with small area fill fraction */ pixGetDimensions(pixs, &w, &h, NULL); if (w < recog->min_splitw) { if (debug) L_INFO("w = %d < %d\n", __func__, w, recog->min_splitw); *premove = 1; return 0; } if (h < minh) { if (debug) L_INFO("h = %d < %d\n", __func__, h, minh); *premove = 1; return 0; } aspratio = (l_float32)w / (l_float32)h; if (aspratio > recog->max_wh_ratio) { if (debug) L_INFO("w/h = %5.3f too large\n", __func__, aspratio); *premove = 1; return 0; } pixFindAreaFraction(pixs, recog->sumtab, &fract); if (fract < minaf) { if (debug) L_INFO("area fill fract %5.3f < %5.3f\n", __func__, fract, minaf); *premove = 1; return 0; } return 0; } /*------------------------------------------------------------------------* * Postprocessing * *------------------------------------------------------------------------*/ /*! * \brief recogExtractNumbers() * * \param[in] recog * \param[in] boxas location of components * \param[in] scorethresh min score for which we accept a component * \param[in] spacethresh max horizontal distance allowed between digits; * use -1 for default * \param[out] pbaa [optional] bounding boxes of identified numbers * \param[out] pnaa [optional] scores of identified digits * \return sa of identified numbers, or NULL on error * *
 * Notes:
 *      (1) This extracts digit data after recogaIdentifyMultiple() or
 *          lower-level identification has taken place.
 *      (2) Each string in the returned sa contains a sequence of ascii
 *          digits in a number.
 *      (3) The horizontal distance between boxes (limited by %spacethresh)
 *          is the negative of the horizontal overlap.
 *      (4) Components with a score less than %scorethresh, which may
 *          be hyphens or other small characters, will signal the
 *          end of the current sequence of digits in the number.  A typical
 *          value for %scorethresh is 0.60.
 *      (5) We allow two digits to be combined if these conditions apply:
 *            (a) the first is to the left of the second
 *            (b) the second has a horizontal separation less than %spacethresh
 *            (c) the vertical overlap >= 0 (vertical separation < 0)
 *            (d) both have a score that exceeds %scorethresh
 *      (6) Each numa in the optionally returned naa contains the digit
 *          scores of a number.  Each boxa in the optionally returned baa
 *          contains the bounding boxes of the digits in the number.
 * 
*/ SARRAY * recogExtractNumbers(L_RECOG *recog, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa) { char *str, *text; l_int32 i, n, x1, x2, h_ovl, v_ovl, h_sep, v_sep; l_float32 score; BOX *box, *prebox; BOXA *ba = NULL; BOXAA *baa; NUMA *nascore, *na = NULL; NUMAA *naa; SARRAY *satext, *sa = NULL, *saout; if (pbaa) *pbaa = NULL; if (pnaa) *pnaa = NULL; if (!recog || !recog->rcha) return (SARRAY *)ERROR_PTR("recog and rcha not both defined", __func__, NULL); if (!boxas) return (SARRAY *)ERROR_PTR("boxas not defined", __func__, NULL); if (spacethresh < 0) spacethresh = L_MAX(recog->maxheight_u, 20); rchaExtract(recog->rcha, NULL, &nascore, &satext, NULL, NULL, NULL, NULL); if (!nascore || !satext) { numaDestroy(&nascore); sarrayDestroy(&satext); return (SARRAY *)ERROR_PTR("nascore and satext not both returned", __func__, NULL); } saout = sarrayCreate(0); naa = numaaCreate(0); baa = boxaaCreate(0); prebox = NULL; n = numaGetCount(nascore); for (i = 0; i < n; i++) { numaGetFValue(nascore, i, &score); text = sarrayGetString(satext, i, L_NOCOPY); if (prebox == NULL) { /* no current run */ if (score < scorethresh) { continue; } else { /* start a number run */ sa = sarrayCreate(0); ba = boxaCreate(0); na = numaCreate(0); sarrayAddString(sa, text, L_COPY); prebox = boxaGetBox(boxas, i, L_CLONE); boxaAddBox(ba, prebox, L_COPY); numaAddNumber(na, score); } } else { /* in a current number run */ box = boxaGetBox(boxas, i, L_CLONE); boxGetGeometry(prebox, &x1, NULL, NULL, NULL); boxGetGeometry(box, &x2, NULL, NULL, NULL); boxOverlapDistance(box, prebox, &h_ovl, &v_ovl); h_sep = -h_ovl; v_sep = -v_ovl; boxDestroy(&prebox); if (x1 < x2 && h_sep <= spacethresh && v_sep < 0 && score >= scorethresh) { /* add to number */ sarrayAddString(sa, text, L_COPY); boxaAddBox(ba, box, L_COPY); numaAddNumber(na, score); prebox = box; } else { /* save the completed number */ str = sarrayToString(sa, 0); sarrayAddString(saout, str, L_INSERT); sarrayDestroy(&sa); boxaaAddBoxa(baa, ba, L_INSERT); numaaAddNuma(naa, na, L_INSERT); boxDestroy(&box); if (score >= scorethresh) { /* start a new number */ i--; continue; } } } } if (prebox) { /* save the last number */ str = sarrayToString(sa, 0); sarrayAddString(saout, str, L_INSERT); boxaaAddBoxa(baa, ba, L_INSERT); numaaAddNuma(naa, na, L_INSERT); sarrayDestroy(&sa); boxDestroy(&prebox); } numaDestroy(&nascore); sarrayDestroy(&satext); if (sarrayGetCount(saout) == 0) { sarrayDestroy(&saout); boxaaDestroy(&baa); numaaDestroy(&naa); L_INFO("saout has no identified text\n", __func__); return NULL; } if (pbaa) *pbaa = baa; else boxaaDestroy(&baa); if (pnaa) *pnaa = naa; else numaaDestroy(&naa); return saout; } /*! * \brief showExtractNumbers() * * \param[in] pixs input 1 bpp image * \param[in] sa recognized text strings * \param[in] baa boxa array for location of characters in each string * \param[in] naa numa array for scores of characters in each string * \param[out] ppixdb [optional] input pixs with identified chars outlined * \return pixa of identified strings with text and scores, or NULL on error * *
 * Notes:
 *      (1) This is a debugging routine on digit identification; e.g.:
 *            recogIdentifyMultiple(recog, pixs, 0, 1, &boxa, NULL, NULL, 0);
 *            sa = recogExtractNumbers(recog, boxa, 0.8, -1, &baa, &naa);
 *            pixa = showExtractNumbers(pixs, sa, baa, naa, NULL);
 * 
*/ PIXA * showExtractNumbers(PIX *pixs, SARRAY *sa, BOXAA *baa, NUMAA *naa, PIX **ppixdb) { char buf[128]; char *textstr, *scorestr; l_int32 i, j, n, nchar, len; l_float32 score; L_BMF *bmf; BOX *box1, *box2; BOXA *ba; NUMA *na; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; if (ppixdb) *ppixdb = NULL; if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", __func__, NULL); if (!sa) return (PIXA *)ERROR_PTR("sa not defined", __func__, NULL); if (!baa) return (PIXA *)ERROR_PTR("baa not defined", __func__, NULL); if (!naa) return (PIXA *)ERROR_PTR("naa not defined", __func__, NULL); n = sarrayGetCount(sa); pixa = pixaCreate(n); bmf = bmfCreate(NULL, 6); if (ppixdb) *ppixdb = pixConvertTo8(pixs, 1); for (i = 0; i < n; i++) { textstr = sarrayGetString(sa, i, L_NOCOPY); ba = boxaaGetBoxa(baa, i, L_CLONE); na = numaaGetNuma(naa, i, L_CLONE); boxaGetExtent(ba, NULL, NULL, &box1); box2 = boxAdjustSides(NULL, box1, -5, 5, -5, 5); if (ppixdb) pixRenderBoxArb(*ppixdb, box2, 3, 255, 0, 0); pix1 = pixClipRectangle(pixs, box1, NULL); len = strlen(textstr) + 1; pix2 = pixAddBlackOrWhiteBorder(pix1, 14 * len, 14 * len, 5, 3, L_SET_WHITE); pix3 = pixConvertTo8(pix2, 1); nchar = numaGetCount(na); scorestr = NULL; for (j = 0; j < nchar; j++) { numaGetFValue(na, j, &score); snprintf(buf, sizeof(buf), "%d", (l_int32)(100 * score)); stringJoinIP(&scorestr, buf); if (j < nchar - 1) stringJoinIP(&scorestr, ","); } snprintf(buf, sizeof(buf), "%s: %s\n", textstr, scorestr); pix4 = pixAddTextlines(pix3, bmf, buf, 0xff000000, L_ADD_BELOW); pixaAddPix(pixa, pix4, L_INSERT); boxDestroy(&box1); boxDestroy(&box2); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&ba); numaDestroy(&na); LEPT_FREE(scorestr); } bmfDestroy(&bmf); return pixa; } /*------------------------------------------------------------------------* * Static debug helper * *------------------------------------------------------------------------*/ /*! * \brief l_showIndicatorSplitValues() * * \param[in] na1, na2, na3, na4, na5, na6 6 indicator array * *
 * Notes:
 *      (1) The values indicate that specific criteria has been met
 *          for component removal by pre-splitting filter..
 *          The 'result' line shows which components have been removed.
 * 
*/ static void l_showIndicatorSplitValues(NUMA *na1, NUMA *na2, NUMA *na3, NUMA *na4, NUMA *na5, NUMA *na6) { l_int32 i, n; n = numaGetCount(na1); lept_stderr("================================================\n"); lept_stderr("lt minw: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na1->array[i]); lept_stderr("\nlt minh: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na2->array[i]); lept_stderr("\ngt maxh: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na3->array[i]); lept_stderr("\ngt maxasp: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na4->array[i]); lept_stderr("\nlt minaf: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na5->array[i]); lept_stderr("\n------------------------------------------------"); lept_stderr("\nresult: "); for (i = 0; i < n; i++) lept_stderr("%4d ", (l_int32)na6->array[i]); lept_stderr("\n================================================\n"); } leptonica-1.86.0/src/recogtrain.c000066400000000000000000002505231506303110300166530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file recogtrain.c *
 *
 *      Training on labeled data
 *         l_int32             recogTrainLabeled()
 *         PIX                *recogProcessLabeled()
 *         l_int32             recogAddSample()
 *         PIX                *recogModifyTemplate()
 *         l_int32             recogAverageSamples()
 *         l_int32             pixaAccumulateSamples()
 *         l_int32             recogTrainingFinished()
 *         static l_int32      recogTemplatesAreOK()
 *         PIXA               *recogFilterPixaBySize()
 *         PIXAA              *recogSortPixaByClass()
 *         l_int32             recogRemoveOutliers1()
 *         PIXA               *pixaRemoveOutliers1()
 *         l_int32             recogRemoveOutliers2()
 *         PIXA               *pixaRemoveOutliers2()
 *
 *      Training on unlabeled data
 *         L_RECOG             recogTrainFromBoot()
 *
 *      Padding the digit training set
 *         l_int32             recogPadDigitTrainingSet()
 *         l_int32             recogIsPaddingNeeded()
 *         static SARRAY      *recogAddMissingClassStrings()
 *         PIXA               *recogAddDigitPadTemplates()
 *         static l_int32      recogCharsetAvailable()
 *
 *      Making a boot digit recognizer
 *         L_RECOG            *recogMakeBootDigitRecog()
 *         PIXA               *recogMakeBootDigitTemplates()
 *
 *      Debugging
 *         l_int32             recogShowContent()
 *         l_int32             recogDebugAverages()
 *         l_int32             recogShowAverageTemplates()
 *         static PIX         *pixDisplayOutliers()
 *         PIX                *recogDisplayOutlier()
 *         PIX                *recogShowMatchesInRange()
 *         PIX                *recogShowMatch()
 *
 *  These abbreviations are for the type of template to be used:
 *    * SI (for the scanned images)
 *    * WNL (for width-normalized lines, formed by first skeletonizing
 *           the scanned images, and then dilating to a fixed width)
 *  These abbreviations are for the type of recognizer:
 *    * BAR (book-adapted recognizer; the best type; can do identification
 *           with unscaled images and separation of touching characters.
 *    * BSR (bootstrap recognizer; used if more labeled templates are
 *           required for a BAR, either for finding more templates from
 *           the book, or making a hybrid BAR/BSR.
 *
 *  The recog struct typically holds two versions of the input templates
 *  (e.g. from a pixa) that were used to generate it.  One version is
 *  the unscaled input templates.  The other version is the one that
 *  will be used by the recog to identify unlabeled data.  That version
 *  depends on the input parameters when the recog is created.  The choices
 *  for the latter version, and their suggested use, are:
 *  (1) unscaled SI -- typical for BAR, generated from book images
 *  (2) unscaled WNL -- ditto
 *  (3) scaled SI -- typical for recognizers containing template
 *      images from sources other than the book to be recognized
 *  (4) scaled WNL -- ditto
 *  For cases (3) and (4), we recommend scaling to fixed height; e.g.,
 *  scalew = 0, scaleh = 40.
 *  When using WNL, we recommend using a width of 5 in the template
 *  and 4 in the unlabeled data.
 *  It appears that better results for a BAR are usually obtained using
 *  SI than WNL, but more experimentation is needed.
 *
 *  This utility is designed to build recognizers that are specifically
 *  adapted from a large amount of material, such as a book.  These
 *  use labeled templates taken from the material, and not scaled.
 *  In addition, two special recognizers are useful:
 *  (1) Bootstrap recognizer (BSR).  This uses height-scaled templates,
 *      that have been extended with several repetitions in one of two ways:
 *      (a) aniotropic width scaling (for either SI or WNL)
 *      (b) iterative erosions/dilations (for SI).
 *  (2) Outlier removal.  This uses height scaled templates.  It can be
 *      implemented without using templates that are aligned averages of all
 *      templates in a class.
 *
 *  Recognizers are inexpensive to generate, for example, from a pixa
 *  of labeled templates.  The general process of building a BAR is
 *  to start with labeled templates, e.g., in a pixa, make a BAR, and
 *  analyze new samples from the book to augment the BAR until it has
 *  enough samples for each character class.  Along the way, samples
 *  from a BSR may be added for help in training.  If not enough samples
 *  are available for the BAR, it can finally be augmented with BSR
 *  samples, in which case the resulting hybrid BAR/BSR recognizer
 *  must work on scaled images.
 *
 *  Here are the steps in doing recog training:
 *  A. Generate a BAR from any existing labeled templates
 *    (1) Create a recog and add the templates, using recogAddSample().
 *        This stores the unscaled templates.
 *        [Note: this can be done in one step if the labeled templates are put
 *         into a pixa:
 *           L_Recog *rec = recogCreateFromPixa(pixa, ...);  ]
 *    (2) Call recogTrainingFinished() to generate the (sometimes modified)
 *        templates to be used for correlation.
 *    (3) Optionally, remove outliers.
 *    If there are sufficient samples in the classes, we're done. Otherwise,
 *  B. Try to get more samples from the book to pad the BAR.
 *     (1) Save the unscaled, labeled templates from the BAR.
 *     (2) Supplement the BAR with bootstrap templates to make a hybrid BAR/BSR.
 *     (3) Do recognition on more unlabeled images, scaled to a fixed height
 *     (4) Add the unscaled, labeled images to the saved set.
 *     (5) Optionally, remove outliers.
 *     If there are sufficient samples in the classes, we're done. Otherwise,
 *  C. For classes without a sufficient number of templates, we can
 *     supplement the BAR with templates from a BSR (a hybrid RAR/BSR),
 *     and do recognition scaled to a fixed height.
 *
 *  Here are several methods that can be used for identifying outliers:
 *  (1) Compute average templates for each class and remove a candidate
 *      that is poorly correlated with the average.  This is the most
 *      simple method.  recogRemoveOutliers1() uses this, supplemented with
 *      a second threshold and a target number of templates to be saved.
 *  (2) Compute average templates for each class and remove a candidate
 *      that is more highly correlated with the average of some other class.
 *      This does not require setting a threshold for the correlation.
 *      recogRemoveOutliers2() uses this method, supplemented with a minimum
 *      correlation score.
 *  (3) For each candidate, find the average correlation with other
 *      members of its class, and remove those that have a relatively
 *      low average correlation.  This is similar to (1), gives comparable
 *      results and because it does not use average templates, it requires
 *      a bit more computation.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "pix_internal.h" /* Static functions */ static l_int32 recogTemplatesAreOK(L_RECOG *recog, l_int32 minsize, l_float32 minfract, l_int32 *pok); static SARRAY *recogAddMissingClassStrings(L_RECOG *recog); static l_int32 recogCharsetAvailable(l_int32 type); static PIX *pixDisplayOutliers(PIXA *pixas, NUMA *nas); static PIX *recogDisplayOutlier(L_RECOG *recog, l_int32 iclass, l_int32 jsamp, l_int32 maxclass, l_float32 maxscore); /* Default parameters that are used in recogTemplatesAreOK() and * in outlier removal functions, and that use template set size * to decide if the set of templates (before outliers are removed) * is valid. Values are set to accept most sets of sample templates. */ static const l_int32 DefaultMinSetSize = 1; /* minimum number of samples for a valid class */ static const l_float32 DefaultMinSetFract = 0.4f; /* minimum fraction of classes required for a valid recog */ /* Defaults in pixaRemoveOutliers1() and pixaRemoveOutliers2() */ static const l_float32 DefaultMinScore = 0.75; /* keep everything above */ static const l_int32 DefaultMinTarget = 3; /* to be kept if possible */ static const l_float32 LowerScoreThreshold = 0.5; /* templates can be * kept down to this score to if needed to retain the * desired minimum number of templates */ /*------------------------------------------------------------------------* * Training * *------------------------------------------------------------------------*/ /*! * \brief recogTrainLabeled() * * \param[in] recog in training mode * \param[in] pixs if depth > 1, will be thresholded to 1 bpp * \param[in] box [optional] cropping box * \param[in] text [optional] if null, use text field in pix * \param[in] debug 1 to display images of samples not captured * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Training is restricted to the addition of a single
 *          character in an arbitrary (e.g., UTF8) charset
 *      (2) If box != null, it should represent the location in %pixs
 *          of the character image.
 * 
*/ l_ok recogTrainLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 debug) { l_int32 ret; PIX *pix; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Prepare the sample to be added. This step also acts * as a filter, and can invalidate pixs as a template. */ ret = recogProcessLabeled(recog, pixs, box, text, &pix); if (ret) { pixDestroy(&pix); L_WARNING("failure to get sample '%s' for training\n", __func__, text); return 1; } recogAddSample(recog, pix, debug); pixDestroy(&pix); return 0; } /*! * \brief recogProcessLabeled() * * \param[in] recog in training mode * \param[in] pixs if depth > 1, will be thresholded to 1 bpp * \param[in] box [optional] cropping box * \param[in] text [optional] if null, use text field in pix * \param[out] ppix addr of pix, 1 bpp, labeled * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This crops and binarizes the input image, generating a pix
 *          of one character where the charval is inserted into the pix.
 * 
*/ l_ok recogProcessLabeled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIX **ppix) { char *textdata; l_int32 textinpix, textin, nsets; NUMA *na; PIX *pix1, *pix2, *pix3, *pix4; if (!ppix) return ERROR_INT("&pix not defined", __func__, 1); *ppix = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Find the text; this will be stored with the output images */ textin = text && (text[0] != '\0'); textinpix = (pixs->text && (pixs->text[0] != '\0')); if (!textin && !textinpix) { L_ERROR("no text: %d\n", __func__, recog->num_samples); return 1; } textdata = (textin) ? text : pixs->text; /* do not free */ /* Crop and binarize if necessary */ if (box) pix1 = pixClipRectangle(pixs, box, NULL); else pix1 = pixClone(pixs); if (pixGetDepth(pix1) > 1) pix2 = pixConvertTo1(pix1, recog->threshold); else pix2 = pixClone(pix1); pixDestroy(&pix1); /* Remove isolated noise, using as a criterion all components * that are removed by a vertical opening of size 5. */ pix3 = pixMorphSequence(pix2, "o1.5", 0); /* seed */ pixSeedfillBinary(pix3, pix3, pix2, 8); /* fill from seed; clip to pix2 */ pixDestroy(&pix2); /* Clip to foreground */ pixClipToForeground(pix3, &pix4, NULL); pixDestroy(&pix3); if (!pix4) return ERROR_INT("pix4 is empty", __func__, 1); /* Verify that if there is more than 1 c.c., they all have * horizontal overlap */ na = pixCountByColumn(pix4, NULL); numaCountNonzeroRuns(na, &nsets); numaDestroy(&na); if (nsets > 1) { L_WARNING("found %d sets of horiz separated c.c.; skipping\n", __func__, nsets); pixDestroy(&pix4); return 1; } pixSetText(pix4, textdata); *ppix = pix4; return 0; } /*! * \brief recogAddSample() * * \param[in] recog * \param[in] pix a single character, 1 bpp * \param[in] debug * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The pix is 1 bpp, with the character string label embedded.
 *      (2) The pixaa_u array of the recog is initialized to accept
 *          up to 256 different classes.  When training is finished,
 *          the arrays are truncated to the actual number of classes.
 *          To pad an existing recog from the boot recognizers, training
 *          is started again; if samples from a new class are added,
 *          the pixaa_u array is extended by adding a pixa to hold them.
 * 
*/ l_ok recogAddSample(L_RECOG *recog, PIX *pix, l_int32 debug) { char *text; l_int32 npa, charint, index; PIXA *pixa1; PIXAA *paa; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp\n", __func__, 1); if (recog->train_done) return ERROR_INT("not added: training has been completed", __func__, 1); paa = recog->pixaa_u; /* Make sure the character is in the set */ text = pixGetText(pix); if (l_convertCharstrToInt(text, &charint) == 1) { L_ERROR("invalid text: %s\n", __func__, text); return 1; } /* Determine the class array index. Check if the class * already exists, and if not, add it. */ if (recogGetClassIndex(recog, charint, text, &index) == 1) { /* New class must be added */ npa = pixaaGetCount(paa, NULL); if (index > npa) { L_ERROR("oops: bad index %d > npa %d!!\n", __func__, index, npa); return 1; } if (index == npa) { /* paa needs to be extended */ L_INFO("Adding new class and pixa: index = %d, text = %s\n", __func__, index, text); pixa1 = pixaCreate(10); pixaaAddPixa(paa, pixa1, L_INSERT); } } if (debug) { L_INFO("Identified text label: %s\n", __func__, text); L_INFO("Identified: charint = %d, index = %d\n", __func__, charint, index); } /* Insert the unscaled character image into the right pixa. * (Unscaled images are required to split touching characters.) */ recog->num_samples++; pixaaAddPix(paa, index, pix, NULL, L_COPY); return 0; } /*! * \brief recogModifyTemplate() * * \param[in] recog * \param[in] pixs 1 bpp, to be optionally scaled and turned into * strokes of fixed width * \return pixd modified pix if OK, NULL on error */ PIX * recogModifyTemplate(L_RECOG *recog, PIX *pixs) { l_int32 w, h, empty; PIX *pix1, *pix2; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Scale first */ pixGetDimensions(pixs, &w, &h, NULL); if ((recog->scalew == 0 || recog->scalew == w) && (recog->scaleh == 0 || recog->scaleh == h)) { /* no scaling */ pix1 = pixCopy(NULL, pixs); } else { pix1 = pixScaleToSize(pixs, recog->scalew, recog->scaleh); } if (!pix1) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); /* Then optionally convert to lines */ if (recog->linew <= 0) { pix2 = pixClone(pix1); } else { pix2 = pixSetStrokeWidth(pix1, recog->linew, 1, 8); } pixDestroy(&pix1); if (!pix2) return (PIX *)ERROR_PTR("pix2 not made", __func__, NULL); /* Make sure we still have some pixels */ pixZero(pix2, &empty); if (empty) { pixDestroy(&pix2); return (PIX *)ERROR_PTR("modified template has no pixels", __func__, NULL); } return pix2; } /*! * \brief recogAverageSamples() * * \param[in] recog addr of existing recog * \param[in] debug * \return 0 on success, 1 on failure * *
 * Notes:
 *      (1) This is only called in two situations:
 *          (a) When splitting characters using either the DID method
 *              recogDecode() or the the greedy splitter
 *              recogCorrelationBestRow()
 *          (b) By a special recognizer that is used to remove outliers.
 *          Both unscaled and scaled inputs are averaged.
 *      (2) If the data in any class is nonexistent (no samples), or
 *          very bad (no fg pixels in the average), or if the ratio
 *          of max/min average unscaled class template heights is
 *          greater than max_ht_ratio, this function fails.  The caller
 *          must check the return value of the recog, and destroy the
 *          recog on failure.
 *      (3) Set debug = 1 to view the resulting templates and their centroids.
 * 
*/ l_int32 recogAverageSamples(L_RECOG *recog, l_int32 debug) { l_int32 i, nsamp, size, area, bx, by, badclass; l_float32 x, y, hratio; BOX *box; PIXA *pixa1; PIX *pix1, *pix2, *pix3; PTA *pta1; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (recog->ave_done) { if (debug) /* always do this if requested */ recogShowAverageTemplates(recog); return 0; } /* Remove any previous averaging data */ size = recog->setsize; pixaDestroy(&recog->pixa_u); ptaDestroy(&recog->pta_u); numaDestroy(&recog->nasum_u); recog->pixa_u = pixaCreate(size); recog->pta_u = ptaCreate(size); recog->nasum_u = numaCreate(size); pixaDestroy(&recog->pixa); ptaDestroy(&recog->pta); numaDestroy(&recog->nasum); recog->pixa = pixaCreate(size); recog->pta = ptaCreate(size); recog->nasum = numaCreate(size); /* Unscaled bitmaps: compute averaged bitmap, centroid, and fg area. * Note that when we threshold to 1 bpp the 8 bpp averaged template * that is returned from the accumulator, it will not be cropped * to the foreground. We must crop it, because the correlator * makes that assumption and will return a zero value if the * width or height of the two images differs by several pixels. * But cropping to fg can cause the value of the centroid to * change, if bx > 0 or by > 0. */ badclass = FALSE; for (i = 0; i < size; i++) { pixa1 = pixaaGetPixa(recog->pixaa_u, i, L_CLONE); pta1 = ptaaGetPta(recog->ptaa_u, i, L_CLONE); nsamp = pixaGetCount(pixa1); nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ if (nsamp == 0) { /* no information for this class */ L_ERROR("no samples in class %d\n", __func__, i); badclass = TRUE; pixaDestroy(&pixa1); ptaDestroy(&pta1); break; } else { pixaAccumulateSamples(pixa1, pta1, &pix1, &x, &y); pix2 = pixThresholdToBinary(pix1, L_MAX(1, nsamp / 2)); pixInvert(pix2, pix2); pixClipToForeground(pix2, &pix3, &box); if (!box) { L_ERROR("no fg pixels in average for uclass %d\n", __func__, i); badclass = TRUE; pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); ptaDestroy(&pta1); break; } else { boxGetGeometry(box, &bx, &by, NULL, NULL); pixaAddPix(recog->pixa_u, pix3, L_INSERT); ptaAddPt(recog->pta_u, x - bx, y - by); /* correct centroid */ pixCountPixels(pix3, &area, recog->sumtab); numaAddNumber(recog->nasum_u, area); /* foreground */ boxDestroy(&box); } pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa1); ptaDestroy(&pta1); } /* Are any classes bad? */ if (badclass) return ERROR_INT("at least 1 bad class", __func__, 1); /* Get the range of sizes of the unscaled average templates. * Reject if the height ratio is too large. */ pixaSizeRange(recog->pixa_u, &recog->minwidth_u, &recog->minheight_u, &recog->maxwidth_u, &recog->maxheight_u); hratio = (l_float32)recog->maxheight_u / (l_float32)recog->minheight_u; if (hratio > recog->max_ht_ratio) { L_ERROR("ratio of max/min height of average templates = %4.1f\n", __func__, hratio); return 1; } /* Scaled bitmaps: compute averaged bitmap, centroid, and fg area */ for (i = 0; i < size; i++) { pixa1 = pixaaGetPixa(recog->pixaa, i, L_CLONE); pta1 = ptaaGetPta(recog->ptaa, i, L_CLONE); nsamp = pixaGetCount(pixa1); nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ pixaAccumulateSamples(pixa1, pta1, &pix1, &x, &y); pix2 = pixThresholdToBinary(pix1, L_MAX(1, nsamp / 2)); pixInvert(pix2, pix2); pixClipToForeground(pix2, &pix3, &box); if (!box) { L_ERROR("no fg pixels in average for class %d\n", __func__, i); badclass = TRUE; pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); ptaDestroy(&pta1); break; } else { boxGetGeometry(box, &bx, &by, NULL, NULL); pixaAddPix(recog->pixa, pix3, L_INSERT); ptaAddPt(recog->pta, x - bx, y - by); /* correct centroid */ pixCountPixels(pix3, &area, recog->sumtab); numaAddNumber(recog->nasum, area); /* foreground */ boxDestroy(&box); } pixDestroy(&pix1); pixDestroy(&pix2); pixaDestroy(&pixa1); ptaDestroy(&pta1); } if (badclass) return ERROR_INT("no fg pixels in at least 1 class", __func__, 1); /* Get the range of widths of the scaled average templates */ pixaSizeRange(recog->pixa, &recog->minwidth, NULL, &recog->maxwidth, NULL); /* Get dimensions useful for splitting */ recog->min_splitw = L_MAX(5, recog->minwidth_u - 5); recog->max_splith = recog->maxheight_u + 12; /* allow for skew */ if (debug) recogShowAverageTemplates(recog); recog->ave_done = TRUE; return 0; } /*! * \brief pixaAccumulateSamples() * * \param[in] pixa of samples from the same class, 1 bpp * \param[in] pta [optional] of centroids of the samples * \param[out] ppixd accumulated samples, 8 bpp * \param[out] px [optional] average x coordinate of centroids * \param[out] py [optional] average y coordinate of centroids * \return 0 on success, 1 on failure * *
 * Notes:
 *      (1) This generates an aligned (by centroid) sum of the input pix.
 *      (2) We use only the first 256 samples; that's plenty.
 *      (3) If pta is not input, we generate two tables, and discard
 *          after use.  If this is called many times, it is better
 *          to precompute the pta.
 * 
*/ l_int32 pixaAccumulateSamples(PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py) { l_int32 i, n, maxw, maxh, xdiff, ydiff; l_int32 *centtab, *sumtab; l_float32 xc, yc, xave, yave; PIX *pix1, *pix2, *pixsum; PTA *ptac; if (px) *px = 0; if (py) *py = 0; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); if (pta && ptaGetCount(pta) != n) return ERROR_INT("pta count differs from pixa count", __func__, 1); n = L_MIN(n, 256); /* take the first 256 only */ if (n == 0) return ERROR_INT("pixa array empty", __func__, 1); /* Find the centroids */ if (pta) { ptac = ptaClone(pta); } else { /* generate them here */ ptac = ptaCreate(n); centtab = makePixelCentroidTab8(); sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pixCentroid(pix1, centtab, sumtab, &xc, &yc); ptaAddPt(ptac, xc, yc); } LEPT_FREE(centtab); LEPT_FREE(sumtab); } /* Find the average value of the centroids */ xave = yave = 0; for (i = 0; i < n; i++) { ptaGetPt(pta, i, &xc, &yc); xave += xc; yave += yc; } xave = xave / (l_float32)n; yave = yave / (l_float32)n; if (px) *px = xave; if (py) *py = yave; /* Place all pix with their centroids located at the average * centroid value, and sum the results. Make the accumulator * image slightly larger than the largest sample to insure * that all pixels are represented in the accumulator. */ pixaSizeRange(pixa, NULL, NULL, &maxw, &maxh); pixsum = pixInitAccumulate(maxw + 5, maxh + 5, 0); pix1 = pixCreate(maxw, maxh, 1); for (i = 0; i < n; i++) { pix2 = pixaGetPix(pixa, i, L_CLONE); ptaGetPt(ptac, i, &xc, &yc); xdiff = (l_int32)(xave - xc); ydiff = (l_int32)(yave - yc); pixClearAll(pix1); pixRasterop(pix1, xdiff, ydiff, maxw, maxh, PIX_SRC, pix2, 0, 0); pixAccumulate(pixsum, pix1, L_ARITH_ADD); pixDestroy(&pix2); } *ppixd = pixFinalAccumulate(pixsum, 0, 8); pixDestroy(&pix1); pixDestroy(&pixsum); ptaDestroy(&ptac); return 0; } /*! * \brief recogTrainingFinished() * * \param[in] precog addr of recog * \param[in] modifyflag 1 to use recogModifyTemplate(); 0 otherwise * \param[in] minsize set to -1 for default * \param[in] minfract set to -1.0 for default * \return 0 if OK, 1 on error (input recog will be destroyed) * *
 * Notes:
 *      (1) This must be called after all training samples have been added.
 *      (2) If the templates are not good enough, the recog input is destroyed.
 *      (3) Usually, %modifyflag == 1, because we want to apply
 *          recogModifyTemplate() to generate the actual templates
 *          that will be used.  The one exception is when reading a
 *          serialized recog: there we want to put the same set of
 *          templates in both the unscaled and modified pixaa.
 *          See recogReadStream() to see why we do this.
 *      (4) See recogTemplatesAreOK() for %minsize and %minfract usage.
 *      (5) The following things are done here:
 *          (a) Allocate (or reallocate) storage for (possibly) modified
 *              bitmaps, centroids, and fg areas.
 *          (b) Generate the (possibly) modified bitmaps.
 *          (c) Compute centroid and fg area data for both unscaled and
 *              modified bitmaps.
 *          (d) Truncate the pixaa, ptaa and numaa arrays down from
 *              256 to the actual size.
 *      (6) Putting these operations here makes it simple to recompute
 *          the recog with different modifications on the bitmaps.
 *      (7) Call recogShowContent() to display the templates, both
 *          unscaled and modified.
 * 
*/ l_ok recogTrainingFinished(L_RECOG **precog, l_int32 modifyflag, l_int32 minsize, l_float32 minfract) { l_int32 ok, i, j, size, nc, ns, area; l_float32 xave, yave; PIX *pix, *pixd; PIXA *pixa; PIXAA *paa; PTA *pta; PTAA *ptaa; L_RECOG *recog; if (!precog) return ERROR_INT("&recog not defined", __func__, 1); if ((recog = *precog) == NULL) return ERROR_INT("recog not defined", __func__, 1); if (recog->train_done) return 0; /* Test the input templates */ recogTemplatesAreOK(recog, minsize, minfract, &ok); if (!ok) { recogDestroy(precog); return ERROR_INT("bad templates", __func__, 1); } /* Generate the storage for the possibly-scaled training bitmaps */ size = recog->maxarraysize; paa = pixaaCreate(size); pixa = pixaCreate(1); pixaaInitFull(paa, pixa); pixaDestroy(&pixa); pixaaDestroy(&recog->pixaa); recog->pixaa = paa; /* Generate the storage for the unscaled centroid training data */ ptaa = ptaaCreate(size); pta = ptaCreate(0); ptaaInitFull(ptaa, pta); ptaaDestroy(&recog->ptaa_u); recog->ptaa_u = ptaa; /* Generate the storage for the possibly-scaled centroid data */ ptaa = ptaaCreate(size); ptaaInitFull(ptaa, pta); ptaDestroy(&pta); ptaaDestroy(&recog->ptaa); recog->ptaa = ptaa; /* Generate the storage for the fg area data */ numaaDestroy(&recog->naasum_u); numaaDestroy(&recog->naasum); recog->naasum_u = numaaCreateFull(size, 0); recog->naasum = numaaCreateFull(size, 0); paa = recog->pixaa_u; nc = recog->setsize; for (i = 0; i < nc; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); ns = pixaGetCount(pixa); for (j = 0; j < ns; j++) { /* Save centroid and area data for the unscaled pix */ pix = pixaGetPix(pixa, j, L_CLONE); pixCentroid(pix, recog->centtab, recog->sumtab, &xave, &yave); ptaaAddPt(recog->ptaa_u, i, xave, yave); pixCountPixels(pix, &area, recog->sumtab); numaaAddNumber(recog->naasum_u, i, area); /* foreground */ /* Insert the (optionally) scaled character image, and * save centroid and area data for it */ if (modifyflag == 1) pixd = recogModifyTemplate(recog, pix); else pixd = pixClone(pix); if (pixd) { pixaaAddPix(recog->pixaa, i, pixd, NULL, L_INSERT); pixCentroid(pixd, recog->centtab, recog->sumtab, &xave, &yave); ptaaAddPt(recog->ptaa, i, xave, yave); pixCountPixels(pixd, &area, recog->sumtab); numaaAddNumber(recog->naasum, i, area); } else { L_ERROR("failed: modified template for class %d, sample %d\n", __func__, i, j); } pixDestroy(&pix); } pixaDestroy(&pixa); } /* Truncate the arrays to those with non-empty containers */ pixaaTruncate(recog->pixaa_u); pixaaTruncate(recog->pixaa); ptaaTruncate(recog->ptaa_u); ptaaTruncate(recog->ptaa); numaaTruncate(recog->naasum_u); numaaTruncate(recog->naasum); recog->train_done = TRUE; return 0; } /*! * \brief recogTemplatesAreOK() * * \param[in] recog * \param[in] minsize set to -1 for default * \param[in] minfract set to -1.0 for default * \param[out] pok set to 1 if template set is valid; 0 otherwise * \return 1 on error; 0 otherwise. An invalid template set is not an error. * *
 * Notes:
 *      (1) This is called by recogTrainingFinished().  A return value of 0
 *          will cause recogTrainingFinished() to destroy the recog.
 *      (2) %minsize is the minimum number of samples required for
 *          the class; -1 uses the default
 *      (3) %minfract is the minimum fraction of classes required for
 *          the recog to be usable; -1.0 uses the default
 * 
*/ static l_int32 recogTemplatesAreOK(L_RECOG *recog, l_int32 minsize, l_float32 minfract, l_int32 *pok) { l_int32 i, n, validsets, nt; l_float32 ratio; NUMA *na; if (!pok) return ERROR_INT("&ok not defined", __func__, 1); *pok = 0; if (!recog) return ERROR_INT("recog not defined", __func__, 1); minsize = (minsize < 0) ? DefaultMinSetSize : minsize; minfract = (minfract < 0) ? DefaultMinSetFract : minfract; n = pixaaGetCount(recog->pixaa_u, &na); validsets = 0; for (i = 0, validsets = 0; i < n; i++) { numaGetIValue(na, i, &nt); if (nt >= minsize) validsets++; } numaDestroy(&na); ratio = (l_float32)validsets / (l_float32)recog->charset_size; *pok = (ratio >= minfract) ? 1 : 0; return 0; } /*! * \brief recogFilterPixaBySize() * * \param[in] pixas labeled templates * \param[in] setsize size of character set (number of classes) * \param[in] maxkeep max number of templates to keep in a class * \param[in] max_ht_ratio max allowed height ratio (see below) * \param[out] pna [optional] debug output, giving the number * in each class after filtering; use NULL to skip * \return pixa filtered templates, or NULL on error * *
 * Notes:
 *      (1) The basic assumption is that the most common and larger
 *          templates in each class are more likely to represent the
 *          characters we are interested in.  For example, larger digits
 *          are more likely to represent page numbers, and smaller digits
 *          could be data in tables.  Therefore, we bias the first
 *          stage of filtering toward the larger characters by removing
 *          very small ones, and select based on proximity of the
 *          remaining characters to median height.
 *      (2) For each of the %setsize classes, order the templates
 *          increasingly by height.  Take the rank 0.9 height.  Eliminate
 *          all templates that are shorter by more than %max_ht_ratio.
 *          Of the remaining ones, select up to %maxkeep that are closest
 *          in rank order height to the median template.
 * 
*/ PIXA * recogFilterPixaBySize(PIXA *pixas, l_int32 setsize, l_int32 maxkeep, l_float32 max_ht_ratio, NUMA **pna) { l_int32 i, j, h90, hj, j1, j2, j90, n, nc; l_float32 ratio; NUMA *na; PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5; PIXAA *paa; if (pna) *pna = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if ((paa = recogSortPixaByClass(pixas, setsize)) == NULL) return (PIXA *)ERROR_PTR("paa not made", __func__, NULL); nc = pixaaGetCount(paa, NULL); na = (pna) ? numaCreate(0) : NULL; if (pna) *pna = na; pixa5 = pixaCreate(0); for (i = 0; i < nc; i++) { pixa1 = pixaaGetPixa(paa, i, L_CLONE); if ((n = pixaGetCount(pixa1)) == 0) { pixaDestroy(&pixa1); continue; } pixa2 = pixaSort(pixa1, L_SORT_BY_HEIGHT, L_SORT_INCREASING, NULL, L_COPY); j90 = (l_int32)(0.9 * n); pixaGetPixDimensions(pixa2, j90, NULL, &h90, NULL); pixa3 = pixaCreate(n); for (j = 0; j < n; j++) { pixaGetPixDimensions(pixa2, j, NULL, &hj, NULL); ratio = (l_float32)h90 / (l_float32)hj; if (ratio <= max_ht_ratio) pixaAddPix(pixa3, pixaGetPix(pixa2, j, L_COPY), L_INSERT); } n = pixaGetCount(pixa3); if (n <= maxkeep) { pixa4 = pixaCopy(pixa3, L_CLONE); } else { j1 = (n - maxkeep) / 2; j2 = j1 + maxkeep - 1; pixa4 = pixaSelectRange(pixa3, j1, j2, L_CLONE); } if (na) numaAddNumber(na, pixaGetCount(pixa4)); pixaJoin(pixa5, pixa4, 0, -1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixaDestroy(&pixa4); } pixaaDestroy(&paa); return pixa5; } /*! * \brief recogSortPixaByClass() * * \param[in] pixa labeled templates * \param[in] setsize size of character set (number of classes) * \return paa pixaa where each pixa has templates for one class, * or null on error */ PIXAA * recogSortPixaByClass(PIXA *pixa, l_int32 setsize) { PIXAA *paa; L_RECOG *recog; if (!pixa) return (PIXAA *)ERROR_PTR("pixa not defined", __func__, NULL); if ((recog = recogCreateFromPixaNoFinish(pixa, 0, 0, 0, 0, 0)) == NULL) return (PIXAA *)ERROR_PTR("recog not made", __func__, NULL); paa = recog->pixaa_u; /* grab the paa of unscaled templates */ recog->pixaa_u = NULL; recogDestroy(&recog); return paa; } /*! * \brief recogRemoveOutliers1() * * \param[in] precog addr of recog with unscaled labeled templates * \param[in] minscore keep everything with at least this score * \param[in] mintarget minimum desired number to retain if possible * \param[in] minsize minimum number of samples required for a class * \param[out] ppixsave [optional debug] saved templates, with scores * \param[out] ppixrem [optional debug] removed templates, with scores * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This is a convenience wrapper when using default parameters
 *          for the recog.  See pixaRemoveOutliers1() for details.
 *      (2) If this succeeds, the new recog replaces the input recog;
 *          if it fails, the input recog is destroyed.
 * 
*/ l_ok recogRemoveOutliers1(L_RECOG **precog, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem) { PIXA *pixa1, *pixa2; L_RECOG *recog; if (!precog) return ERROR_INT("&recog not defined", __func__, 1); if (*precog == NULL) return ERROR_INT("recog not defined", __func__, 1); /* Extract the unscaled templates */ pixa1 = recogExtractPixa(*precog); recogDestroy(precog); pixa2 = pixaRemoveOutliers1(pixa1, minscore, mintarget, minsize, ppixsave, ppixrem); pixaDestroy(&pixa1); if (!pixa2) return ERROR_INT("failure to remove outliers", __func__, 1); recog = recogCreateFromPixa(pixa2, 0, 0, 0, 150, 1); pixaDestroy(&pixa2); if (!recog) return ERROR_INT("failure to make recog from pixa sans outliers", __func__, 1); *precog = recog; return 0; } /*! * \brief pixaRemoveOutliers1() * * \param[in] pixas unscaled labeled templates * \param[in] minscore keep everything with at least this score; * use -1.0 for default. * \param[in] mintarget minimum desired number to retain if possible; * use -1 for default. * \param[in] minsize minimum number of samples required for a class; * use -1 for default. * \param[out] ppixsave [optional debug] saved templates, with scores * \param[out] ppixrem [optional debug] removed templates, with scores * \return pixa of unscaled templates to be kept, or NULL on error * *
 * Notes:
 *      (1) Removing outliers is particularly important when recognition
 *          goes against all the samples in the training set, as opposed
 *          to the averages for each class.  The reason is that we get
 *          an identification error if a mislabeled template is a best
 *          match for an input sample.
 *      (2) Because the score values depend strongly on the quality
 *          of the character images, to avoid losing too many samples
 *          we supplement a minimum score for retention with a score
 *          necessary to acquire the minimum target number of templates.
 *          To do this we are willing to use a lower threshold,
 *          LowerScoreThreshold, on the score.  Consequently, with
 *          poor quality templates, we may keep samples with a score
 *          less than %minscore, but never less than LowerScoreThreshold.
 *          And if the number of samples is less than %minsize, we do
 *          not use any.
 *      (3) This is meant to be used on a BAR, where the templates all
 *          come from the same book; use minscore ~0.75.
 *      (4) Method: make a scaled recog from the input %pixas.  Then,
 *          for each class: generate the averages, match each
 *          scaled template against the average, and save unscaled
 *          templates that had a sufficiently good match.
 * 
*/ PIXA * pixaRemoveOutliers1(PIXA *pixas, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem) { l_int32 i, j, debug, n, area1, area2; l_float32 x1, y1, x2, y2, minfract, score, rankscore, threshscore; NUMA *nasum, *narem, *nasave, *nascore; PIX *pix1, *pix2; PIXA *pixa, *pixarem, *pixad; PTA *pta; L_RECOG *recog; if (ppixsave) *ppixsave = NULL; if (ppixrem) *ppixrem = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); minscore = L_MIN(minscore, 1.0); if (minscore <= 0.0) minscore = DefaultMinScore; mintarget = L_MIN(mintarget, 3); if (mintarget <= 0) mintarget = DefaultMinTarget; if (minsize < 0) minsize = DefaultMinSetSize; /* Make a special height-scaled recognizer with average templates */ debug = (ppixsave || ppixrem) ? 1 : 0; recog = recogCreateFromPixa(pixas, 0, 40, 0, 128, 1); if (!recog) return (PIXA *)ERROR_PTR("bad pixas; recog not made", __func__, NULL); if (recogAverageSamples(recog, debug) != 0) { recogDestroy(&recog); return (PIXA *)ERROR_PTR("bad templates", __func__, NULL); } nasave = (ppixsave) ? numaCreate(0) : NULL; pixarem = (ppixrem) ? pixaCreate(0) : NULL; narem = (ppixrem) ? numaCreate(0) : NULL; pixad = pixaCreate(0); for (i = 0; i < recog->setsize; i++) { /* Access the average template and values for scaled * images in this class */ pix1 = pixaGetPix(recog->pixa, i, L_CLONE); ptaGetPt(recog->pta, i, &x1, &y1); numaGetIValue(recog->nasum, i, &area1); /* Get the scores for each sample in the class */ pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); pta = ptaaGetPta(recog->ptaa, i, L_CLONE); /* centroids */ nasum = numaaGetNuma(recog->naasum, i, L_CLONE); /* fg areas */ n = pixaGetCount(pixa); nascore = numaCreate(n); for (j = 0; j < n; j++) { pix2 = pixaGetPix(pixa, j, L_CLONE); ptaGetPt(pta, j, &x2, &y2); /* centroid average */ numaGetIValue(nasum, j, &area2); /* fg sum average */ pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, 5, 5, recog->sumtab, &score); numaAddNumber(nascore, score); if (debug && score == 0.0) /* typ. large size difference */ lept_stderr("Got 0 score for i = %d, j = %d\n", i, j); pixDestroy(&pix2); } pixDestroy(&pix1); /* Find the rankscore, corresponding to the 1.0 - minfract. * To attempt to maintain the minfract of templates, use as a * cutoff the minimum of minscore and the rank score. However, * no template is saved with an actual score less than * that at least one template is kept. */ minfract = (l_float32)mintarget / (l_float32)n; numaGetRankValue(nascore, 1.0 - minfract, NULL, 0, &rankscore); threshscore = L_MAX(LowerScoreThreshold, L_MIN(minscore, rankscore)); if (debug) { L_INFO("minscore = %4.2f, rankscore = %4.2f, threshscore = %4.2f\n", __func__, minscore, rankscore, threshscore); } /* Save templates that are at or above threshold. * Toss any classes with less than %minsize templates. */ for (j = 0; j < n; j++) { numaGetFValue(nascore, j, &score); pix1 = pixaaGetPix(recog->pixaa_u, i, j, L_COPY); if (score >= threshscore && n >= minsize) { pixaAddPix(pixad, pix1, L_INSERT); if (nasave) numaAddNumber(nasave, score); } else if (debug) { pixaAddPix(pixarem, pix1, L_INSERT); numaAddNumber(narem, score); } else { pixDestroy(&pix1); } } pixaDestroy(&pixa); ptaDestroy(&pta); numaDestroy(&nasum); numaDestroy(&nascore); } if (ppixsave) { *ppixsave = pixDisplayOutliers(pixad, nasave); numaDestroy(&nasave); } if (ppixrem) { *ppixrem = pixDisplayOutliers(pixarem, narem); pixaDestroy(&pixarem); numaDestroy(&narem); } recogDestroy(&recog); return pixad; } /*! * \brief recogRemoveOutliers2() * * \param[in] precog addr of recog with unscaled labeled templates * \param[in] minscore keep everything with at least this score * \param[in] minsize minimum number of samples required for a class * \param[out] ppixsave [optional debug] saved templates, with scores * \param[out] ppixrem [optional debug] removed templates, with scores * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This is a convenience wrapper when using default parameters
 *          for the recog.  See pixaRemoveOutliers2() for details.
 *      (2) If this succeeds, the new recog replaces the input recog;
 *          if it fails, the input recog is destroyed.
 * 
*/ l_ok recogRemoveOutliers2(L_RECOG **precog, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem) { PIXA *pixa1, *pixa2; L_RECOG *recog; if (!precog) return ERROR_INT("&recog not defined", __func__, 1); if (*precog == NULL) return ERROR_INT("recog not defined", __func__, 1); /* Extract the unscaled templates */ pixa1 = recogExtractPixa(*precog); recogDestroy(precog); pixa2 = pixaRemoveOutliers2(pixa1, minscore, minsize, ppixsave, ppixrem); pixaDestroy(&pixa1); if (!pixa2) return ERROR_INT("failure to remove outliers", __func__, 1); recog = recogCreateFromPixa(pixa2, 0, 0, 0, 150, 1); pixaDestroy(&pixa2); if (!recog) return ERROR_INT("failure to make recog from pixa sans outliers", __func__, 1); *precog = recog; return 0; } /*! * \brief pixaRemoveOutliers2() * * \param[in] pixas unscaled labeled templates * \param[in] minscore keep everything with at least this score; * use -1.0 for default. * \param[in] minsize minimum number of samples required for a class; * use -1 for default. * \param[out] ppixsave [optional debug] saved templates, with scores * \param[out] ppixrem [optional debug] removed templates, with scores * \return pixa of unscaled templates to be kept, or NULL on error * *
 * Notes:
 *      (1) Removing outliers is particularly important when recognition
 *          goes against all the samples in the training set, as opposed
 *          to the averages for each class.  The reason is that we get
 *          an identification error if a mislabeled template is a best
 *          match for an input sample.
 *      (2) This method compares each template against the average templates
 *          of each class, and discards any template that has a higher
 *          correlation to a class different from its own.  It also
 *          sets a lower bound on correlation scores with its class average.
 *      (3) This is meant to be used on a BAR, where the templates all
 *          come from the same book; use minscore ~0.75.
 * 
*/ PIXA * pixaRemoveOutliers2(PIXA *pixas, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem) { l_int32 i, j, k, n, area1, area2, maxk, debug; l_float32 x1, y1, x2, y2, score, maxscore; NUMA *nan, *nascore, *nasave; PIX *pix1, *pix2, *pix3; PIXA *pixarem, *pixad; L_RECOG *recog; if (ppixsave) *ppixsave = NULL; if (ppixrem) *ppixrem = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); minscore = L_MIN(minscore, 1.0); if (minscore <= 0.0) minscore = DefaultMinScore; if (minsize < 0) minsize = DefaultMinSetSize; /* Make a special height-scaled recognizer with average templates */ debug = (ppixsave || ppixrem) ? 1 : 0; recog = recogCreateFromPixa(pixas, 0, 40, 0, 128, 1); if (!recog) return (PIXA *)ERROR_PTR("bad pixas; recog not made", __func__, NULL); if (recogAverageSamples(recog, debug) != 0) { recogDestroy(&recog); return (PIXA *)ERROR_PTR("bad templates", __func__, NULL); } nasave = (ppixsave) ? numaCreate(0) : NULL; pixarem = (ppixrem) ? pixaCreate(0) : NULL; pixad = pixaCreate(0); pixaaGetCount(recog->pixaa, &nan); /* number of templates in each class */ for (i = 0; i < recog->setsize; i++) { /* Get the scores for each sample in the class, when comparing * with averages from all the classes. */ numaGetIValue(nan, i, &n); for (j = 0; j < n; j++) { pix1 = pixaaGetPix(recog->pixaa, i, j, L_CLONE); ptaaGetPt(recog->ptaa, i, j, &x1, &y1); /* centroid */ numaaGetValue(recog->naasum, i, j, NULL, &area1); /* fg sum */ nascore = numaCreate(n); for (k = 0; k < recog->setsize; k++) { /* average templates */ pix2 = pixaGetPix(recog->pixa, k, L_CLONE); ptaGetPt(recog->pta, k, &x2, &y2); /* average centroid */ numaGetIValue(recog->nasum, k, &area2); /* average fg sum */ pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, 5, 5, recog->sumtab, &score); numaAddNumber(nascore, score); pixDestroy(&pix2); } /* Save templates that are in the correct class and * at or above threshold. Toss any classes with less * than %minsize templates. */ numaGetMax(nascore, &maxscore, &maxk); if (maxk == i && maxscore >= minscore && n >= minsize) { /* save it */ pix3 = pixaaGetPix(recog->pixaa_u, i, j, L_COPY); pixaAddPix(pixad, pix3, L_INSERT); if (nasave) numaAddNumber(nasave, maxscore); } else if (ppixrem) { /* outlier */ pix3 = recogDisplayOutlier(recog, i, j, maxk, maxscore); pixaAddPix(pixarem, pix3, L_INSERT); } numaDestroy(&nascore); pixDestroy(&pix1); } } if (ppixsave) { *ppixsave = pixDisplayOutliers(pixad, nasave); numaDestroy(&nasave); } if (ppixrem) { *ppixrem = pixaDisplayTiledInRows(pixarem, 32, 1500, 1.0, 0, 20, 2); pixaDestroy(&pixarem); } numaDestroy(&nan); recogDestroy(&recog); return pixad; } /*------------------------------------------------------------------------* * Training on unlabeled data * *------------------------------------------------------------------------*/ /*! * \brief recogTrainFromBoot() * * \param[in] recogboot labeled boot recognizer * \param[in] pixas set of unlabeled input characters * \param[in] minscore min score for accepting the example; e.g., 0.75 * \param[in] threshold for binarization, if needed * \param[in] debug 1 for debug output saved to recogboot; 0 otherwise * \return pixad labeled version of input pixas, trained on a BSR, * or NULL on error * *
 * Notes:
 *      (1) This takes %pixas of unscaled single characters and %recboot,
 *          a bootstrep recognizer (BSR) that has been set up with parameters
 *            * scaleh: scale all templates to this height
 *            * linew: width of normalized strokes, or 0 if using
 *              the input image
 *          It modifies the pix in %pixas accordingly and correlates
 *          with the templates in the BSR.  It returns those input
 *          images in %pixas whose best correlation with the BSR is at
 *          or above %minscore.  The returned pix have added text labels
 *          for the text string of the class to which the best
 *          correlated template belongs.
 *      (2) Identification occurs in scaled mode (typically with h = 40),
 *          optionally using a width-normalized line images derived
 *          from those in %pixas.
 * 
*/ PIXA * recogTrainFromBoot(L_RECOG *recogboot, PIXA *pixas, l_float32 minscore, l_int32 threshold, l_int32 debug) { char *text; l_int32 i, n, same, maxd, scaleh, linew; l_float32 score; PIX *pix1, *pix2, *pixdb = NULL; PIXA *pixa1, *pixa2, *pixa3, *pixad; if (!recogboot) return (PIXA *)ERROR_PTR("recogboot not defined", __func__, NULL); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); /* Make sure all input pix are 1 bpp */ if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no pix in pixa", __func__, NULL); pixaVerifyDepth(pixas, &same, &maxd); if (maxd == 1) { pixa1 = pixaCopy(pixas, L_COPY); } else { pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo1(pix1, threshold); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } } /* Scale the input images to match the BSR */ scaleh = recogboot->scaleh; linew = recogboot->linew; pixa2 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); pix2 = pixScaleToSize(pix1, 0, scaleh); pixaAddPix(pixa2, pix2, L_INSERT); pixDestroy(&pix1); } pixaDestroy(&pixa1); /* Optionally convert to width-normalized line */ if (linew > 0) pixa3 = pixaSetStrokeWidth(pixa2, linew, 4, 8); else pixa3 = pixaCopy(pixa2, L_CLONE); pixaDestroy(&pixa2); /* Identify using recogboot */ n = pixaGetCount(pixa3); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa3, i, L_COPY); pixSetText(pix1, NULL); /* remove any existing text or labelling */ if (!debug) { recogIdentifyPix(recogboot, pix1, NULL); } else { recogIdentifyPix(recogboot, pix1, &pixdb); pixaAddPix(recogboot->pixadb_boot, pixdb, L_INSERT); } rchExtract(recogboot->rch, NULL, &score, &text, NULL, NULL, NULL, NULL); if (score >= minscore) { pix2 = pixaGetPix(pixas, i, L_COPY); pixSetText(pix2, text); pixaAddPix(pixad, pix2, L_INSERT); pixaAddPix(recogboot->pixadb_boot, pixdb, L_COPY); } LEPT_FREE(text); pixDestroy(&pix1); } pixaDestroy(&pixa3); return pixad; } /*------------------------------------------------------------------------* * Padding the digit training set * *------------------------------------------------------------------------*/ /*! * \brief recogPadDigitTrainingSet() * * \param[in,out] precog trained; if padding is needed, it is replaced * by a a new padded recog * \param[in] scaleh must be > 0; suggest ~40. * \param[in] linew use 0 for original scanned images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a no-op if padding is not needed.  However,
 *          if it is, this replaces the input recog with a new recog,
 *          padded appropriately with templates from a boot recognizer,
 *          and set up with correlation templates derived from
 *          %scaleh and %linew.
 * 
*/ l_ok recogPadDigitTrainingSet(L_RECOG **precog, l_int32 scaleh, l_int32 linew) { PIXA *pixa; L_RECOG *recog1, *recog2; SARRAY *sa; if (!precog) return ERROR_INT("&recog not defined", __func__, 1); recog1 = *precog; recogIsPaddingNeeded(recog1, &sa); if (!sa) return 0; /* Get a new pixa with the padding templates added */ pixa = recogAddDigitPadTemplates(recog1, sa); sarrayDestroy(&sa); if (!pixa) return ERROR_INT("pixa not made", __func__, 1); /* Need to use templates that are scaled to a fixed height. */ if (scaleh <= 0) { L_WARNING("templates must be scaled to fixed height; using %d\n", __func__, 40); scaleh = 40; } /* Create a hybrid recog, composed of templates from both * the original and bootstrap sources. */ recog2 = recogCreateFromPixa(pixa, 0, scaleh, linew, recog1->threshold, recog1->maxyshift); pixaDestroy(&pixa); recogDestroy(precog); *precog = recog2; return 0; } /*! * \brief recogIsPaddingNeeded() * * \param[in] recog trained * \param[out] psa addr of returned string containing text value * \return 1 on error; 0 if OK, whether or not additional padding * templates are required. * *
 * Notes:
 *      (1) This returns a string array in &sa containing character values
 *          for which extra templates are needed; this sarray is
 *          used by recogGetPadTemplates().  It returns NULL
 *          if no padding templates are needed.
 * 
*/ l_int32 recogIsPaddingNeeded(L_RECOG *recog, SARRAY **psa) { char *str; l_int32 i, nt, min_nopad, nclass, allclasses; l_float32 minval; NUMA *naclass; SARRAY *sa; if (!psa) return ERROR_INT("&sa not defined", __func__, 1); *psa = NULL; if (!recog) return ERROR_INT("recog not defined", __func__, 1); /* Do we have samples from all classes? */ nclass = pixaaGetCount(recog->pixaa_u, &naclass); /* unscaled bitmaps */ allclasses = (nclass == recog->charset_size) ? 1 : 0; /* Are there enough samples in each class already? */ min_nopad = recog->min_nopad; numaGetMin(naclass, &minval, NULL); if (allclasses && (minval >= min_nopad)) { numaDestroy(&naclass); return 0; } /* Are any classes not represented? */ sa = recogAddMissingClassStrings(recog); *psa = sa; /* Are any other classes under-represented? */ for (i = 0; i < nclass; i++) { numaGetIValue(naclass, i, &nt); if (nt < min_nopad) { str = sarrayGetString(recog->sa_text, i, L_COPY); sarrayAddString(sa, str, L_INSERT); } } numaDestroy(&naclass); return 0; } /*! * \brief recogAddMissingClassStrings() * * \param[in] recog trained * \return sa of class string missing in %recog, or NULL on error * *
 * Notes:
 *      (1) This returns an empty %sa if there is at least one template
 *          in each class in %recog.
 * 
*/ static SARRAY * recogAddMissingClassStrings(L_RECOG *recog) { char *text; char str[4]; l_int32 i, nclass, index, ival; NUMA *na; SARRAY *sa; if (!recog) return (SARRAY *)ERROR_PTR("recog not defined", __func__, NULL); /* Only handling digits */ nclass = pixaaGetCount(recog->pixaa_u, NULL); /* unscaled bitmaps */ if (recog->charset_type != 1 || nclass == 10) return sarrayCreate(0); /* empty */ /* Make an indicator array for missing classes */ na = numaCreate(0); sa = sarrayCreate(0); for (i = 0; i < recog->charset_size; i++) numaAddNumber(na, 1); for (i = 0; i < nclass; i++) { text = sarrayGetString(recog->sa_text, i, L_NOCOPY); index = text[0] - '0'; numaSetValue(na, index, 0); } /* Convert to string and add to output */ for (i = 0; i < nclass; i++) { numaGetIValue(na, i, &ival); if (ival == 1) { str[0] = '0' + i; str[1] = '\0'; sarrayAddString(sa, str, L_COPY); } } numaDestroy(&na); return sa; } /*! * \brief recogAddDigitPadTemplates() * * \param[in] recog trained * \param[in] sa set of text strings that need to be padded * \return pixa of all templates from %recog and the additional pad * templates from a boot recognizer; or NULL on error * *
 * Notes:
 *      (1) Call recogIsPaddingNeeded() first, which returns %sa of
 *          template text strings for classes where more templates
 *          are needed.
 * 
*/ PIXA * recogAddDigitPadTemplates(L_RECOG *recog, SARRAY *sa) { char *str, *text; l_int32 i, j, n, nt; PIX *pix; PIXA *pixa1, *pixa2; if (!recog) return (PIXA *)ERROR_PTR("recog not defined", __func__, NULL); if (!sa) return (PIXA *)ERROR_PTR("sa not defined", __func__, NULL); if (recogCharsetAvailable(recog->charset_type) == FALSE) return (PIXA *)ERROR_PTR("boot charset not available", __func__, NULL); /* Make boot recog templates */ pixa1 = recogMakeBootDigitTemplates(0, 0); n = pixaGetCount(pixa1); /* Extract the unscaled templates from %recog */ pixa2 = recogExtractPixa(recog); /* Add selected boot recog templates based on the text strings in sa */ nt = sarrayGetCount(sa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); text = pixGetText(pix); for (j = 0; j < nt; j++) { str = sarrayGetString(sa, j, L_NOCOPY); if (!strcmp(text, str)) { pixaAddPix(pixa2, pix, L_COPY); break; } } pixDestroy(&pix); } pixaDestroy(&pixa1); return pixa2; } /*! * \brief recogCharsetAvailable() * * \param[in] type of charset for padding * \return 1 if available; 0 if not. */ static l_int32 recogCharsetAvailable(l_int32 type) { l_int32 ret; switch (type) { case L_ARABIC_NUMERALS: ret = TRUE; break; case L_LC_ROMAN_NUMERALS: case L_UC_ROMAN_NUMERALS: case L_LC_ALPHA: case L_UC_ALPHA: L_INFO("charset type %d not available\n", __func__, type); ret = FALSE; break; default: L_INFO("charset type %d is unknown\n", __func__, type); ret = FALSE; break; } return ret; } /*------------------------------------------------------------------------* * Making a boot digit recognizer * *------------------------------------------------------------------------*/ /*! * \brief recogMakeBootDigitRecog() * * \param[in] nsamp number of samples of each digit; or 0 * \param[in] scaleh scale all heights to this; typ. use 40 * \param[in] linew normalized line width; typ. use 5; 0 to skip * \param[in] maxyshift from nominal centroid alignment; typically 0 or 1 * \param[in] debug 1 for showing templates; 0 otherwise * \return recog, or NULL on error * *
 * Notes:
 *     (1) This takes a set of pre-computed, labeled pixa of single
 *         digits, and generates a recognizer from them.
 *         The templates used in the recognizer can be modified by:
 *         - scaling (isotropically to fixed height)
 *         - generating a skeleton and thickening so that all strokes
 *           have the same width.
 *     (2) The resulting templates are scaled versions of either the
 *         input bitmaps or images with fixed line widths.  To use the
 *         input bitmaps, set %linew = 0; otherwise, set %linew to the
 *         desired line width.
 *     (3) If %nsamp == 0, this uses and extends the output from
 *         three boot generators:
 *            l_bootnum_gen1, l_bootnum_gen2, l_bootnum_gen3.
 *         Otherwise, it uses exactly %nsamp templates of each digit,
 *         extracted by l_bootnum_gen4.
 * 
*/ L_RECOG * recogMakeBootDigitRecog(l_int32 nsamp, l_int32 scaleh, l_int32 linew, l_int32 maxyshift, l_int32 debug) { PIXA *pixa; L_RECOG *recog; /* Get the templates, extended by horizontal scaling */ pixa = recogMakeBootDigitTemplates(nsamp, debug); /* Make the boot recog; recogModifyTemplate() will scale the * templates and optionally turn them into strokes of fixed width. */ recog = recogCreateFromPixa(pixa, 0, scaleh, linew, 128, maxyshift); pixaDestroy(&pixa); if (debug) recogShowContent(stderr, recog, 0, 1); return recog; } /*! * \brief recogMakeBootDigitTemplates() * * \param[in] nsamp number of samples of each digit; or 0 * \param[in] debug 1 for display of templates * \return pixa of templates; or NULL on error * *
 * Notes:
 *     (1) See recogMakeBootDigitRecog().
 * 
*/ PIXA * recogMakeBootDigitTemplates(l_int32 nsamp, l_int32 debug) { NUMA *na1; PIX *pix1, *pix2, *pix3; PIXA *pixa1, *pixa2, *pixa3; if (nsamp > 0) { pixa1 = l_bootnum_gen4(nsamp); if (debug) { pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 0, 0); pixDestroy(&pix1); } return pixa1; } /* Else, generate from 3 pixa */ pixa1 = l_bootnum_gen1(); pixa2 = l_bootnum_gen2(); pixa3 = l_bootnum_gen3(); if (debug) { pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); pix2 = pixaDisplayTiledWithText(pixa2, 1500, 1.0, 10, 2, 6, 0xff000000); pix3 = pixaDisplayTiledWithText(pixa3, 1500, 1.0, 10, 2, 6, 0xff000000); pixDisplay(pix1, 0, 0); pixDisplay(pix2, 600, 0); pixDisplay(pix3, 1200, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pixaJoin(pixa1, pixa2, 0, -1); pixaJoin(pixa1, pixa3, 0, -1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); /* Extend by horizontal scaling */ na1 = numaCreate(4); numaAddNumber(na1, 0.9f); numaAddNumber(na1, 1.1f); numaAddNumber(na1, 1.2f); pixa2 = pixaExtendByScaling(pixa1, na1, L_HORIZ, 1); pixaDestroy(&pixa1); numaDestroy(&na1); return pixa2; } /*------------------------------------------------------------------------* * Debugging * *------------------------------------------------------------------------*/ /*! * \brief recogShowContent() * * \param[in] fp file stream * \param[in] recog * \param[in] index for naming of output files of template images * \param[in] display 1 for showing template images; 0 otherwise * \return 0 if OK, 1 on error */ l_ok recogShowContent(FILE *fp, L_RECOG *recog, l_int32 index, l_int32 display) { char buf[128]; l_int32 i, val, count; PIX *pix; NUMA *na; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!recog) return ERROR_INT("recog not defined", __func__, 1); fprintf(fp, "Debug print of recog contents\n"); fprintf(fp, " Setsize: %d\n", recog->setsize); fprintf(fp, " Binarization threshold: %d\n", recog->threshold); fprintf(fp, " Maximum matching y-jiggle: %d\n", recog->maxyshift); if (recog->linew <= 0) fprintf(fp, " Using image templates for matching\n"); else fprintf(fp, " Using templates with fixed line width for matching\n"); if (recog->scalew == 0) fprintf(fp, " No width scaling of templates\n"); else fprintf(fp, " Template width scaled to %d\n", recog->scalew); if (recog->scaleh == 0) fprintf(fp, " No height scaling of templates\n"); else fprintf(fp, " Template height scaled to %d\n", recog->scaleh); fprintf(fp, " Number of samples in each class:\n"); pixaaGetCount(recog->pixaa_u, &na); for (i = 0; i < recog->setsize; i++) { l_dnaGetIValue(recog->dna_tochar, i, &val); numaGetIValue(na, i, &count); if (val < 128) fprintf(fp, " class %d, char %c: %d\n", i, val, count); else fprintf(fp, " class %d, val %d: %d\n", i, val, count); } numaDestroy(&na); if (display) { lept_mkdir("lept/recog"); pix = pixaaDisplayByPixa(recog->pixaa_u, 50, 1.0, 20, 20, 0); snprintf(buf, sizeof(buf), "/tmp/lept/recog/templates_u.%d.png", index); pixWriteDebug(buf, pix, IFF_PNG); pixDisplay(pix, 0, 200 * index); pixDestroy(&pix); if (recog->train_done) { pix = pixaaDisplayByPixa(recog->pixaa, 50, 1.0, 20, 20, 0); snprintf(buf, sizeof(buf), "/tmp/lept/recog/templates.%d.png", index); pixWriteDebug(buf, pix, IFF_PNG); pixDisplay(pix, 800, 200 * index); pixDestroy(&pix); } } return 0; } /*! * \brief recogDebugAverages() * * \param[in] recog addr of recog * \param[in] debug 0 no output; 1 for images; 2 for text; 3 for both * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Generates an image that pairs each of the input images used
 *          in training with the average template that it is best
 *          correlated to.  This is written into the recog.
 *      (2) It also generates pixa_tr of all the input training images,
 *          which can be used, e.g., in recogShowMatchesInRange().
 *      (3) Returns an error if the averaging function finds bad classes.
 * 
*/ l_ok recogDebugAverages(L_RECOG *recog, l_int32 debug) { l_int32 i, j, n, np, index; l_float32 score; PIX *pix1, *pix2, *pix3; PIXA *pixa, *pixat; PIXAA *paa1, *paa2; if (!recog) return ERROR_INT("recog not defined", __func__, 1); /* Mark the training as finished if necessary, and make sure * that the average templates have been built. */ if (recogAverageSamples(recog, 0) != 0) return ERROR_INT("averaging failed", __func__, 1); /* Save a pixa of all the training examples */ paa1 = recog->pixaa; if (!recog->pixa_tr) recog->pixa_tr = pixaaFlattenToPixa(paa1, NULL, L_CLONE); /* Destroy any existing image and make a new one */ if (recog->pixdb_ave) pixDestroy(&recog->pixdb_ave); n = pixaaGetCount(paa1, NULL); paa2 = pixaaCreate(n); for (i = 0; i < n; i++) { pixa = pixaCreate(0); pixat = pixaaGetPixa(paa1, i, L_CLONE); np = pixaGetCount(pixat); for (j = 0; j < np; j++) { pix1 = pixaaGetPix(paa1, i, j, L_CLONE); recogIdentifyPix(recog, pix1, &pix2); rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, NULL, NULL); if (debug >= 2) lept_stderr("index = %d, score = %7.3f\n", index, score); pix3 = pixAddBorder(pix2, 2, 1); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixaaAddPixa(paa2, pixa, L_INSERT); pixaDestroy(&pixat); } recog->pixdb_ave = pixaaDisplayByPixa(paa2, 50, 1.0, 20, 20, 0); if (debug % 2) { lept_mkdir("lept/recog"); pixWriteDebug("/tmp/lept/recog/templ_match.png", recog->pixdb_ave, IFF_PNG); pixDisplay(recog->pixdb_ave, 100, 100); } pixaaDestroy(&paa2); return 0; } /*! * \brief recogShowAverageTemplates() * * \param[in] recog * \return 0 on success, 1 on failure * *
 * Notes:
 *      (1) This debug routine generates a display of the averaged templates,
 *          both scaled and unscaled, with the centroid visible in red.
 * 
*/ l_int32 recogShowAverageTemplates(L_RECOG *recog) { l_int32 i, size; l_float32 x, y; PIX *pix1, *pix2, *pixr; PIXA *pixat, *pixadb; if (!recog) return ERROR_INT("recog not defined", __func__, 1); lept_stderr("min/max width_u = (%d,%d); min/max height_u = (%d,%d)\n", recog->minwidth_u, recog->maxwidth_u, recog->minheight_u, recog->maxheight_u); lept_stderr("min splitw = %d, max splith = %d\n", recog->min_splitw, recog->max_splith); pixaDestroy(&recog->pixadb_ave); pixr = pixCreate(3, 3, 32); /* 3x3 red square for centroid location */ pixSetAllArbitrary(pixr, 0xff000000); pixadb = pixaCreate(2); /* Unscaled bitmaps */ size = recog->setsize; pixat = pixaCreate(size); for (i = 0; i < size; i++) { if ((pix1 = pixaGetPix(recog->pixa_u, i, L_CLONE)) == NULL) continue; pix2 = pixConvertTo32(pix1); ptaGetPt(recog->pta_u, i, &x, &y); pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, PIX_SRC, pixr, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); pixaAddPix(pixadb, pix1, L_INSERT); pixDisplay(pix1, 100, 100); pixaDestroy(&pixat); /* Scaled bitmaps */ pixat = pixaCreate(size); for (i = 0; i < size; i++) { if ((pix1 = pixaGetPix(recog->pixa, i, L_CLONE)) == NULL) continue; pix2 = pixConvertTo32(pix1); ptaGetPt(recog->pta, i, &x, &y); pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, PIX_SRC, pixr, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); pixaAddPix(pixadb, pix1, L_INSERT); pixDisplay(pix1, 100, 100); pixaDestroy(&pixat); pixDestroy(&pixr); recog->pixadb_ave = pixadb; return 0; } /*! * \brief pixDisplayOutliers() * * \param[in] pixas unscaled labeled templates * \param[in] nas scores of templates (against class averages) * \return pix tiled pixa with text and scores, or NULL on failure * *
 * Notes:
 *      (1) This debug routine is called from recogRemoveOutliers2(),
 *          and takes the saved templates and their scores as input.
 * 
*/ static PIX * pixDisplayOutliers(PIXA *pixas, NUMA *nas) { char *text; char buf[16]; l_int32 i, n; l_float32 fval; PIX *pix1, *pix2; PIXA *pixa1; if (!pixas) return (PIX *)ERROR_PTR("pixas not defined", __func__, NULL); if (!nas) return (PIX *)ERROR_PTR("nas not defined", __func__, NULL); n = pixaGetCount(pixas); if (numaGetCount(nas) != n) return (PIX *)ERROR_PTR("pixas and nas sizes differ", __func__, NULL); pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixAddBlackOrWhiteBorder(pix1, 25, 25, 0, 0, L_GET_WHITE_VAL); text = pixGetText(pix1); numaGetFValue(nas, i, &fval); snprintf(buf, sizeof(buf), "'%s': %5.2f", text, fval); pixSetText(pix2, buf); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 20, 2, 6, 0xff000000); pixaDestroy(&pixa1); return pix1; } /*! * \brief recogDisplayOutlier() * * \param[in] recog * \param[in] iclass sample is in this class * \param[in] jsamp index of sample is class i * \param[in] maxclass index of class with closest average to sample * \param[in] maxscore score of sample with average of class %maxclass * \return pix sample and template images, with score, or NULL on error * *
 * Notes:
 *      (1) This shows three templates, side-by-side:
 *          - The outlier sample
 *          - The average template from the same class
 *          - The average class template that best matched the outlier sample
 * 
*/ static PIX * recogDisplayOutlier(L_RECOG *recog, l_int32 iclass, l_int32 jsamp, l_int32 maxclass, l_float32 maxscore) { char buf[64]; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); pix1 = pixaaGetPix(recog->pixaa, iclass, jsamp, L_CLONE); pix2 = pixaGetPix(recog->pixa, iclass, L_CLONE); pix3 = pixaGetPix(recog->pixa, maxclass, L_CLONE); pixa = pixaCreate(3); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixaDisplayTiledInRows(pixa, 32, 400, 2.0, 0, 12, 2); snprintf(buf, sizeof(buf), "C=%d, BAC=%d, S=%4.2f", iclass, maxclass, maxscore); pix5 = pixAddSingleTextblock(pix4, recog->bmf, buf, 0xff000000, L_ADD_BELOW, NULL); pixDestroy(&pix4); pixaDestroy(&pixa); return pix5; } /*! * \brief recogShowMatchesInRange() * * \param[in] recog * \param[in] pixa of 1 bpp images to match * \param[in] minscore min score to include output * \param[in] maxscore max score to include output * \param[in] display 1 to display the result * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This gives a visual output of the best matches for a given
 *          range of scores.  Each pair of images can optionally be
 *          labeled with the index of the best match and the correlation.
 *      (2) To use this, save a set of 1 bpp images (labeled or
 *          unlabeled) that can be given to a recognizer in a pixa.
 *          Then call this function with the pixa and parameters
 *          to filter a range of scores.
 * 
*/ l_ok recogShowMatchesInRange(L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display) { l_int32 i, n, index, depth; l_float32 score; NUMA *nascore, *naindex; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; if (!recog) return ERROR_INT("recog not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); /* Run the recognizer on the set of images */ n = pixaGetCount(pixa); nascore = numaCreate(n); naindex = numaCreate(n); pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); recogIdentifyPix(recog, pix1, &pix2); rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, NULL, NULL); numaAddNumber(nascore, score); numaAddNumber(naindex, index); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } /* Filter the set and optionally add text to each */ pixa2 = pixaCreate(n); depth = 1; for (i = 0; i < n; i++) { numaGetFValue(nascore, i, &score); if (score < minscore || score > maxscore) continue; pix1 = pixaGetPix(pixa1, i, L_CLONE); numaGetIValue(naindex, i, &index); pix2 = recogShowMatch(recog, pix1, NULL, NULL, index, score); if (i == 0) depth = pixGetDepth(pix2); pixaAddPix(pixa2, pix2, L_INSERT); pixDestroy(&pix1); } /* Package it up */ pixDestroy(&recog->pixdb_range); if (pixaGetCount(pixa2) > 0) { recog->pixdb_range = pixaDisplayTiledInRows(pixa2, depth, 2500, 1.0, 0, 20, 1); if (display) pixDisplay(recog->pixdb_range, 300, 100); } else { L_INFO("no character matches in the range of scores\n", __func__); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); numaDestroy(&nascore); numaDestroy(&naindex); return 0; } /*! * \brief recogShowMatch() * * \param[in] recog * \param[in] pix1 input pix; several possibilities * \param[in] pix2 [optional] matching template * \param[in] box [optional] region in pix1 for which pix2 matches * \param[in] index index of matching template; use -1 to disable printing * \param[in] score score of match * \return pixd pair of images, showing input pix and best template, * optionally with matching information, or NULL on error. * *
 * Notes:
 *      (1) pix1 can be one of these:
 *          (a) The input pix alone, which can be either a single character
 *              (box == NULL) or several characters that need to be
 *              segmented.  If more than character is present, the box
 *              region is displayed with an outline.
 *          (b) Both the input pix and the matching template.  In this case,
 *              pix2 and box will both be null.
 *      (2) If the bmf has been made (by a call to recogMakeBmf())
 *          and the index >= 0, the text field, match score and index
 *          will be rendered; otherwise their values will be ignored.
 * 
*/ PIX * recogShowMatch(L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score) { char buf[32]; char *text; L_BMF *bmf; PIX *pix3, *pix4, *pix5, *pixd; PIXA *pixa; if (!recog) return (PIX *)ERROR_PTR("recog not defined", __func__, NULL); if (!pix1) return (PIX *)ERROR_PTR("pix1 not defined", __func__, NULL); bmf = (recog->bmf && index >= 0) ? recog->bmf : NULL; if (!pix2 && !box && !bmf) /* nothing to do */ return pixCopy(NULL, pix1); pix3 = pixConvertTo32(pix1); if (box) pixRenderBoxArb(pix3, box, 1, 255, 0, 0); if (pix2) { pixa = pixaCreate(2); pixaAddPix(pixa, pix3, L_CLONE); pixaAddPix(pixa, pix2, L_CLONE); pix4 = pixaDisplayTiledInRows(pixa, 1, 500, 1.0, 0, 15, 0); pixaDestroy(&pixa); } else { pix4 = pixCopy(NULL, pix3); } pixDestroy(&pix3); if (bmf) { pix5 = pixAddBorderGeneral(pix4, 55, 55, 0, 0, 0xffffff00); recogGetClassString(recog, index, &text); snprintf(buf, sizeof(buf), "C=%s, S=%4.3f, I=%d", text, score, index); pixd = pixAddSingleTextblock(pix5, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); pixDestroy(&pix5); LEPT_FREE(text); } else { pixd = pixClone(pix4); } pixDestroy(&pix4); return pixd; } leptonica-1.86.0/src/regutils.c000066400000000000000000000725141506303110300163560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file regutils.c *
 *
 *       Regression test utilities
 *           l_int32    regTestSetup()
 *           l_int32    regTestCleanup()
 *           l_int32    regTestCompareValues()
 *           l_int32    regTestCompareStrings()
 *           l_int32    regTestComparePix()
 *           l_int32    regTestCompareSimilarPix()
 *           l_int32    regTestCheckFile()
 *           l_int32    regTestCompareFiles()
 *           l_int32    regTestWritePixAndCheck()
 *           l_int32    regTestWriteDataAndCheck()
 *           char      *regTestGenLocalFilename()
 *
 *       Static function
 *           char      *getRootNameFromArgv0()
 *
 *  These functions are for testing and development.  They are not intended
 *  for use with programs that run in a production environment, such as a
 *  cloud service with unrestricted access.
 *
 *  See regutils.h for how to use this.  Here is a minimal setup:
 *
 *  main(int argc, char **argv) {
 *  ...
 *  L_REGPARAMS  *rp;
 *
 *      if (regTestSetup(argc, argv, &rp))
 *          return 1;
 *      ...
 *      regTestWritePixAndCheck(rp, pix, IFF_PNG);  // 0
 *      ...
 *      return regTestCleanup(rp);
 *  }
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" extern l_int32 NumImageFileFormatExtensions; extern const char *ImageFileFormatExtensions[]; static char *getRootNameFromArgv0(const char *argv0); /*--------------------------------------------------------------------* * Regression test utilities * *--------------------------------------------------------------------*/ /*! * \brief regTestSetup() * * \param[in] argc from invocation; can be either 1 or 2 * \param[in] argv to regtest: %argv[1] is one of these: * "generate", "compare", "display" * \param[out] prp all regression params * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Call this function with the args to the reg test.  The first arg
 *          is the name of the reg test.  There are three cases:
 *          Case 1:
 *              There is either only one arg, or the second arg is "compare".
 *              This is the mode in which you run a regression test
 *              (or a set of them), looking for failures and logging
 *              the results to a file.  The output, which includes
 *              logging of all reg test failures plus a SUCCESS or
 *              FAILURE summary for each test, is appended to the file
 *              "/tmp/lept/reg_results.txt.  For this case, as in Case 2,
 *              the display field in rp is set to FALSE, preventing
 *              image display.
 *          Case 2:
 *              The second arg is "generate".  This will cause
 *              generation of new golden files for the reg test.
 *              The results of the reg test are not recorded, and
 *              the display field in rp is set to FALSE.
 *          Case 3:
 *              The second arg is "display".  The test will run and
 *              files will be written.  Comparisons with golden files
 *              will not be carried out, so the only notion of success
 *              or failure is with tests that do not involve golden files.
 *              The display field in rp is TRUE, and this is used by
 *              pixDisplayWithTitle().
 *      (2) See regutils.h for examples of usage.
 * 
*/ l_ok regTestSetup(l_int32 argc, char **argv, L_REGPARAMS **prp) { char *testname, *vers; char errormsg[64]; L_REGPARAMS *rp; if (argc != 1 && argc != 2) { snprintf(errormsg, sizeof(errormsg), "Syntax: %s [ [compare] | generate | display ]", argv[0]); return ERROR_INT(errormsg, __func__, 1); } if ((testname = getRootNameFromArgv0(argv[0])) == NULL) return ERROR_INT("invalid root", __func__, 1); setLeptDebugOK(1); /* required for testing */ rp = (L_REGPARAMS *)LEPT_CALLOC(1, sizeof(L_REGPARAMS)); *prp = rp; rp->testname = testname; rp->index = -1; /* increment before each test */ /* Initialize to true. A failure in any test is registered * as a failure of the regression test. */ rp->success = TRUE; /* Make sure the lept/regout subdirectory exists */ lept_mkdir("lept/regout"); /* Only open a stream to a temp file for the 'compare' case */ if (argc == 1 || !strcmp(argv[1], "compare")) { rp->mode = L_REG_COMPARE; rp->tempfile = stringNew("/tmp/lept/regout/regtest_output.txt"); rp->fp = fopenWriteStream(rp->tempfile, "wb"); if (rp->fp == NULL) { rp->success = FALSE; return ERROR_INT_1("stream not opened for tempfile", rp->tempfile, __func__, 1); } } else if (!strcmp(argv[1], "generate")) { rp->mode = L_REG_GENERATE; lept_mkdir("lept/golden"); } else if (!strcmp(argv[1], "display")) { rp->mode = L_REG_DISPLAY; rp->display = TRUE; } else { LEPT_FREE(rp); snprintf(errormsg, sizeof(errormsg), "Syntax: %s [ [generate] | compare | display ]", argv[0]); return ERROR_INT(errormsg, __func__, 1); } /* Print out test name and both the leptonica and * image library versions */ lept_stderr("\n////////////////////////////////////////////////\n" "//////////////// %s_reg ///////////////\n" "////////////////////////////////////////////////\n", rp->testname); vers = getLeptonicaVersion(); lept_stderr("%s : ", vers); LEPT_FREE(vers); vers = getImagelibVersions(); lept_stderr("%s\n", vers); LEPT_FREE(vers); rp->tstart = startTimerNested(); return 0; } /*! * \brief regTestCleanup() * * \param[in] rp regression test parameters * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This copies anything written to the temporary file to the
 *          output file /tmp/lept/reg_results.txt.
 * 
*/ l_ok regTestCleanup(L_REGPARAMS *rp) { char result[512]; char *results_file; /* success/failure output in 'compare' mode */ char *text, *message; l_int32 retval; size_t nbytes; if (!rp) return ERROR_INT("rp not defined", __func__, 1); lept_stderr("Time: %7.3f sec\n", stopTimerNested(rp->tstart)); /* If generating golden files or running in display mode, release rp */ if (!rp->fp) { LEPT_FREE(rp->testname); LEPT_FREE(rp->tempfile); LEPT_FREE(rp); return 0; } /* Compare mode: read back data from temp file */ fclose(rp->fp); text = (char *)l_binaryRead(rp->tempfile, &nbytes); LEPT_FREE(rp->tempfile); if (!text) { rp->success = FALSE; LEPT_FREE(rp->testname); LEPT_FREE(rp); return ERROR_INT("text not returned", __func__, 1); } /* Prepare result message */ if (rp->success) snprintf(result, sizeof(result), "SUCCESS: %s_reg\n", rp->testname); else snprintf(result, sizeof(result), "FAILURE: %s_reg\n", rp->testname); message = stringJoin(text, result); LEPT_FREE(text); results_file = stringNew("/tmp/lept/reg_results.txt"); fileAppendString(results_file, message); retval = (rp->success) ? 0 : 1; LEPT_FREE(results_file); LEPT_FREE(message); LEPT_FREE(rp->testname); LEPT_FREE(rp); return retval; } /*! * \brief regTestCompareValues() * * \param[in] rp regtest parameters * \param[in] val1 typ. the golden value * \param[in] val2 typ. the value computed * \param[in] delta allowed max absolute difference * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error */ l_ok regTestCompareValues(L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta) { l_float32 diff; if (!rp) return ERROR_INT("rp not defined", __func__, 1); rp->index++; diff = L_ABS(val2 - val1); /* Record on failure */ if (diff > delta) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: value comparison for index %d\n" "difference = %f but allowed delta = %f\n", rp->testname, rp->index, diff, delta); } lept_stderr("Failure in %s_reg: value comparison for index %d\n" "difference = %f but allowed delta = %f\n", rp->testname, rp->index, diff, delta); rp->success = FALSE; } return 0; } /*! * \brief regTestCompareStrings() * * \param[in] rp regtest parameters * \param[in] string1 typ. the expected string * \param[in] bytes1 size of string1 * \param[in] string2 typ. the computed string * \param[in] bytes2 size of string2 * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error */ l_ok regTestCompareStrings(L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2) { l_int32 same; char buf[256]; if (!rp) return ERROR_INT("rp not defined", __func__, 1); rp->index++; l_binaryCompare(string1, bytes1, string2, bytes2, &same); /* Output on failure */ if (!same) { /* Write the two strings to file */ snprintf(buf, sizeof(buf), "/tmp/lept/regout/string1_%d_%zu", rp->index, bytes1); l_binaryWrite(buf, "w", string1, bytes1); snprintf(buf, sizeof(buf), "/tmp/lept/regout/string2_%d_%zu", rp->index, bytes2); l_binaryWrite(buf, "w", string2, bytes2); /* Report comparison failure */ snprintf(buf, sizeof(buf), "/tmp/lept/regout/string*_%d_*", rp->index); if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: string comp for index %d; " "written to %s\n", rp->testname, rp->index, buf); } lept_stderr("Failure in %s_reg: string comp for index %d; " "written to %s\n", rp->testname, rp->index, buf); rp->success = FALSE; } return 0; } /*! * \brief regTestComparePix() * * \param[in] rp regtest parameters * \param[in] pix1, pix2 to be tested for equality * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error * *
 * Notes:
 *      (1) This function compares two pix for equality.  On failure,
 *          this writes to stderr.
 * 
*/ l_ok regTestComparePix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2) { l_int32 same; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (!pix1 || !pix2) { rp->success = FALSE; return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); } rp->index++; pixEqual(pix1, pix2, &same); /* Record on failure */ if (!same) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: pix comparison for index %d\n", rp->testname, rp->index); } lept_stderr("Failure in %s_reg: pix comparison for index %d\n", rp->testname, rp->index); rp->success = FALSE; } return 0; } /*! * \brief regTestCompareSimilarPix() * * \param[in] rp regtest parameters * \param[in] pix1, pix2 to be tested for near equality * \param[in] mindiff minimum pixel difference to be counted; > 0 * \param[in] maxfract maximum fraction of pixels allowed to have * diff greater than or equal to mindiff * \param[in] printstats use 1 to print normalized histogram to stderr * \return 0 if OK, 1 on error * Note: a failure in similarity comparison is not an error * *
 * Notes:
 *      (1) This function compares two pix for near equality.  On failure,
 *          this writes to stderr.
 *      (2) The pix are similar if the fraction of non-conforming pixels
 *          does not exceed %maxfract.  Pixels are non-conforming if
 *          the difference in pixel values equals or exceeds %mindiff.
 *          Typical values might be %mindiff = 15 and %maxfract = 0.01.
 *      (3) The input images must have the same size and depth.  The
 *          pixels for comparison are typically subsampled from the images.
 *      (4) Normally, use %printstats = 0.  In debugging mode, to see
 *          the relation between %mindiff and the minimum value of
 *          %maxfract for success, set this to 1.
 * 
*/ l_ok regTestCompareSimilarPix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats) { l_int32 w, h, factor, similar; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (!pix1 || !pix2) { rp->success = FALSE; return ERROR_INT("pix1 and pix2 not both defined", __func__, 1); } rp->index++; pixGetDimensions(pix1, &w, &h, NULL); factor = L_MAX(w, h) / 400; factor = L_MAX(1, L_MIN(factor, 4)); /* between 1 and 4 */ pixTestForSimilarity(pix1, pix2, factor, mindiff, maxfract, 0.0, &similar, printstats); /* Record on failure */ if (!similar) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: pix similarity comp for index %d\n", rp->testname, rp->index); } lept_stderr("Failure in %s_reg: pix similarity comp for index %d\n", rp->testname, rp->index); rp->success = FALSE; } return 0; } /*! * \brief regTestCheckFile() * * \param[in] rp regtest parameters * \param[in] localname name of output file from reg test * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error * *
 * Notes:
 *      (1) This function does one of three things, depending on the mode:
 *           * "generate": makes a "golden" file as a copy of %localname.
 *           * "compare": compares %localname contents with the golden file
 *           * "display": this does nothing
 *      (2) The canonical format of the golden filenames is:
 *            /tmp/lept/golden/[root of main name]_golden.[index].
 *                                                       [ext of localname]
 *          e.g.,
 *             /tmp/lept/golden/maze_golden.0.png
 *      (3) The local file can be made in any subdirectory of /tmp/lept,
 *          including /tmp/lept/regout/.
 *      (4) It is important to add an extension to the local name, such as
 *             /tmp/lept/maze/file1.png    (extension ".png")
 *          because the extension is added to the name of the golden file.
 * 
*/ l_ok regTestCheckFile(L_REGPARAMS *rp, const char *localname) { char *ext; char namebuf[256]; l_int32 ret, same, format; PIX *pix1, *pix2; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (!localname) { rp->success = FALSE; return ERROR_INT("local name not defined", __func__, 1); } if (rp->mode != L_REG_GENERATE && rp->mode != L_REG_COMPARE && rp->mode != L_REG_DISPLAY) { rp->success = FALSE; return ERROR_INT("invalid mode", __func__, 1); } rp->index++; /* If display mode, no generation and no testing */ if (rp->mode == L_REG_DISPLAY) return 0; /* Generate the golden file name; used in 'generate' and 'compare' */ splitPathAtExtension(localname, NULL, &ext); snprintf(namebuf, sizeof(namebuf), "/tmp/lept/golden/%s_golden.%02d%s", rp->testname, rp->index, ext); LEPT_FREE(ext); /* Generate mode. No testing. */ if (rp->mode == L_REG_GENERATE) { /* Save the file as a golden file */ ret = fileCopy(localname, namebuf); #if 0 /* Enable for details on writing of golden files */ if (!ret) { char *local = genPathname(localname, NULL); char *golden = genPathname(namebuf, NULL); L_INFO("Copy: %s to %s\n", __func__, local, golden); LEPT_FREE(local); LEPT_FREE(golden); } #endif return ret; } /* Compare mode: test and record on failure. This can be used * for all image formats, as well as for all files of serialized * data, such as boxa, pta, etc. In all cases except for * GIF compressed images, we compare the files to see if they * are identical. GIF doesn't support RGB images; to write * a 32 bpp RGB image in GIF, we do a lossy quantization to * 256 colors, so the cycle read-RGB/write-GIF is not idempotent. * And although the read/write cycle for GIF images with bpp <= 8 * is idempotent in the image pixels, it is not idempotent in the * actual file bytes; tests comparing file bytes before and after * a GIF read/write cycle will fail. So for GIF we uncompress * the two images and compare the actual pixels. PNG is both * lossless and idempotent in file bytes on read/write, so it is * not necessary to compare pixels. (Comparing pixels requires * decompression, and thus would increase the regression test * time. JPEG is lossy and not idempotent in the image pixels, * so no tests are constructed that would require it. */ findFileFormat(localname, &format); if (format == IFF_GIF) { same = 0; pix1 = pixRead(localname); pix2 = pixRead(namebuf); pixEqual(pix1, pix2, &same); pixDestroy(&pix1); pixDestroy(&pix2); } else { filesAreIdentical(localname, namebuf, &same); } if (!same) { fprintf(rp->fp, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, localname, namebuf); lept_stderr("Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, localname, namebuf); rp->success = FALSE; } return 0; } /*! * \brief regTestCompareFiles() * * \param[in] rp regtest parameters * \param[in] index1 of one output file from reg test * \param[in] index2 of another output file from reg test * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error * *
 * Notes:
 *      (1) This only does something in "compare" mode.
 *      (2) The canonical format of the golden filenames is:
 *            /tmp/lept/golden/[root of main name]_golden.[index].
 *                                                      [ext of localname]
 *          e.g.,
 *            /tmp/lept/golden/maze_golden.0.png
 * 
*/ l_ok regTestCompareFiles(L_REGPARAMS *rp, l_int32 index1, l_int32 index2) { char *name1, *name2; char namebuf[256]; l_int32 same; SARRAY *sa; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (index1 < 0 || index2 < 0) { rp->success = FALSE; return ERROR_INT("index1 and/or index2 is negative", __func__, 1); } if (index1 == index2) { rp->success = FALSE; return ERROR_INT("index1 must differ from index2", __func__, 1); } rp->index++; if (rp->mode != L_REG_COMPARE) return 0; /* Generate the golden file names */ snprintf(namebuf, sizeof(namebuf), "%s_golden.%02d", rp->testname, index1); sa = getSortedPathnamesInDirectory("/tmp/lept/golden", namebuf, 0, 0); if (sarrayGetCount(sa) != 1) { sarrayDestroy(&sa); rp->success = FALSE; L_ERROR("golden file %s not found\n", __func__, namebuf); return 1; } name1 = sarrayGetString(sa, 0, L_COPY); sarrayDestroy(&sa); snprintf(namebuf, sizeof(namebuf), "%s_golden.%02d", rp->testname, index2); sa = getSortedPathnamesInDirectory("/tmp/lept/golden", namebuf, 0, 0); if (sarrayGetCount(sa) != 1) { sarrayDestroy(&sa); rp->success = FALSE; LEPT_FREE(name1); L_ERROR("golden file %s not found\n", __func__, namebuf); return 1; } name2 = sarrayGetString(sa, 0, L_COPY); sarrayDestroy(&sa); /* Test and record on failure */ filesAreIdentical(name1, name2, &same); if (!same) { fprintf(rp->fp, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, name1, name2); lept_stderr("Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, name1, name2); rp->success = FALSE; } LEPT_FREE(name1); LEPT_FREE(name2); return 0; } /*! * \brief regTestWritePixAndCheck() * * \param[in] rp regtest parameters * \param[in] pix to be written * \param[in] format of output pix * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error * *
 * Notes:
 *      (1) This function makes it easy to write the pix in a numbered
 *          sequence of files, and either to:
 *             (a) write the golden file ("generate" arg to regression test)
 *             (b) make a local file and "compare" with the golden file
 *             (c) make a local file and "display" the results
 *      (2) The canonical format of the local filename is:
 *            /tmp/lept/regout/[root of main name].[count].[format extension]
 *          e.g., for scale_reg,
 *            /tmp/lept/regout/scale.0.png
 *          The golden file name mirrors this in the usual way.
 *      (3) The check is done between the written files, which requires
 *          the files to be identical. The exception is for GIF, which
 *          only requires that all pixels in the decoded pix are identical.
 * 
*/ l_ok regTestWritePixAndCheck(L_REGPARAMS *rp, PIX *pix, l_int32 format) { char namebuf[256]; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (!pix) { rp->success = FALSE; return ERROR_INT("pix not defined", __func__, 1); } if (format < 0 || format >= NumImageFileFormatExtensions) { rp->success = FALSE; return ERROR_INT("invalid format", __func__, 1); } /* Use bmp format for testing if library for requested * format for jpeg, png or tiff is not available */ changeFormatForMissingLib(&format); /* Generate the local file name */ snprintf(namebuf, sizeof(namebuf), "/tmp/lept/regout/%s.%02d.%s", rp->testname, rp->index + 1, ImageFileFormatExtensions[format]); /* Write the local file */ if (pixGetDepth(pix) < 8) pixSetPadBits(pix, 0); pixWrite(namebuf, pix, format); /* Either write the golden file ("generate") or check the local file against an existing golden file ("compare") */ regTestCheckFile(rp, namebuf); return 0; } /*! * \brief regTestWriteDataAndCheck() * * \param[in] rp regtest parameters * \param[in] data to be written * \param[in] nbytes of data to be written * \param[in] ext filename extension (e.g.: "ba", "pta") * \return 0 if OK, 1 on error * Note: a failure in comparison is not an error * *
 * Notes:
 *      (1) This function makes it easy to write data in a numbered
 *          sequence of files, and either to:
 *             (a) write the golden file ("generate" arg to regression test)
 *             (b) make a local file and "compare" with the golden file
 *             (c) make a local file and "display" the results
 *      (2) The canonical format of the local filename is:
 *            /tmp/lept/regout/[root of main name].[count].[ext]
 *          e.g., for the first boxaa in quadtree_reg,
 *            /tmp/lept/regout/quadtree.0.baa
 *          The golden file name mirrors this in the usual way.
 *      (3) The data can be anything.  It is most useful for serialized
 *          output of data, such as boxa, pta, etc.
 *      (4) The file extension is arbitrary.  It is included simply
 *          to make the content type obvious when examining written files.
 *      (5) The check is done between the written files, which requires
 *          the files to be identical.
 * 
*/ l_ok regTestWriteDataAndCheck(L_REGPARAMS *rp, void *data, size_t nbytes, const char *ext) { char namebuf[256]; if (!rp) return ERROR_INT("rp not defined", __func__, 1); if (!data || nbytes == 0) { rp->success = FALSE; return ERROR_INT("data not defined or size == 0", __func__, 1); } /* Generate the local file name */ snprintf(namebuf, sizeof(namebuf), "/tmp/lept/regout/%s.%02d.%s", rp->testname, rp->index + 1, ext); /* Write the local file */ l_binaryWrite(namebuf, "w", data, nbytes); /* Either write the golden file ("generate") or check the local file against an existing golden file ("compare") */ regTestCheckFile(rp, namebuf); return 0; } /*! * \brief regTestGenLocalFilename() * * \param[in] rp regtest parameters * \param[in] index use -1 for current index * \param[in] format of image; e.g., IFF_PNG * \return filename if OK, or NULL on error * *
 * Notes:
 *      (1) This is used to get the name of a file in the regout
 *          subdirectory, that has been made and is used to test against
 *          the golden file.  You can either specify a particular index
 *          value, or with %index == -1, this returns the most recently
 *          written file.  The latter case lets you read a pix from a
 *          file that has just been written with regTestWritePixAndCheck(),
 *          which is useful for testing formatted read/write functions.
 *
 * 
*/ char * regTestGenLocalFilename(L_REGPARAMS *rp, l_int32 index, l_int32 format) { char buf[64]; l_int32 ind; if (!rp) return (char *)ERROR_PTR("rp not defined", __func__, NULL); ind = (index >= 0) ? index : rp->index; snprintf(buf, sizeof(buf), "/tmp/lept/regout/%s.%02d.%s", rp->testname, ind, ImageFileFormatExtensions[format]); return stringNew(buf); } /*! * \brief getRootNameFromArgv0() * * \param[in] argv0 * \return root name without the '_reg', or NULL on error * *
 * Notes:
 *      (1) For example, from psioseg_reg, we want to extract
 *          just 'psioseg' as the root.
 *      (2) In unix with autotools, the executable is not X,
 *          but ./.libs/lt-X.   So in addition to stripping out the
 *          last 4 characters of the tail, we have to check for
 *          the '-' and strip out the "lt-" prefix if we find it.
 * 
*/ static char * getRootNameFromArgv0(const char *argv0) { l_int32 len; char *root; splitPathAtDirectory(argv0, NULL, &root); if ((len = strlen(root)) <= 4) { LEPT_FREE(root); return (char *)ERROR_PTR("invalid argv0; too small", __func__, NULL); } #ifndef _WIN32 { char *newroot; l_int32 loc; if (stringFindSubstr(root, "-", &loc)) { newroot = stringNew(root + loc + 1); /* strip out "lt-" */ LEPT_FREE(root); root = newroot; len = strlen(root); } len -= 4; /* remove the "_reg" suffix */ } #else if (strstr(root, ".exe") != NULL) len -= 4; if (strstr(root, "_reg") == root + len - 4) len -= 4; #endif /* ! _WIN32 */ root[len] = '\0'; /* terminate */ return root; } leptonica-1.86.0/src/regutils.h000066400000000000000000000141631506303110300163570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_REGUTILS_H #define LEPTONICA_REGUTILS_H /*! * \file regutils.h * *
 *   Contains this regression test parameter packaging struct
 *       struct L_RegParams
 *
 *   The regression test utility allows you to write regression tests
 *   that compare results with existing "golden files" and with
 *   compiled in data.
 *
 *   Regression tests can be called in three ways.
 *   For example, for distance_reg:
 *
 *       Case 1: distance_reg [compare]
 *           This runs the test against the set of golden files.  It
 *           appends to 'outfile.txt' either "SUCCESS" or "FAILURE",
 *           as well as the details of any parts of the test that failed.
 *           It writes to a temporary file stream (fp).
 *           Using 'compare' on the command line is optional.
 *
 *       Case 2: distance_reg generate
 *           This generates golden files in /tmp for the reg test.
 *
 *       Case 3: distance_reg display
 *           This runs the test but makes no comparison of the output
 *           against the set of golden files.  In addition, this displays
 *           images and plots that are specified in the test under
 *           control of the display variable.  Display is enabled only
 *           for this case.
 *
 *   Regression tests follow the pattern given below.  Tests are
 *   automatically numbered sequentially, and it is convenient to
 *   comment each with a number to keep track (for comparison tests
 *   and for debugging).  In an actual case, comparisons of pix and
 *   of files can occur in any order.  We give a specific order here
 *   for clarity.
 *
 *       L_REGPARAMS  *rp;  // holds data required by the test functions
 *
 *       // Setup variables; optionally open stream
 *       if (regTestSetup(argc, argv, &rp))
 *           return 1;
 *
 *       // Test pairs of generated pix for identity.  This compares
 *       // two pix; no golden file is generated.
 *       regTestComparePix(rp, pix1, pix2);  // 0
 *
 *       // Test pairs of generated pix for similarity.  This compares
 *       // two pix; no golden file is generated.  The last arg determines
 *       // if stats are to be written to stderr.
 *       regTestCompareSimilarPix(rp, pix1, pix2, 15, 0.001, 0);  // 1
 *
 *       // Generation of  outputs and testing for identity
 *       // These files can be anything, of course.
 *       regTestCheckFile(rp, );  // 2
 *       regTestCheckFile(rp, );  // 3
 *
 *       // Test pairs of output golden files for identity.  Here we
 *       // are comparing golden files 2 and 3.
 *       regTestCompareFiles(rp, 2, 3);  // 4
 *
 *       // "Write and check".  This writes a pix using a canonical
 *       // formulation for the local filename and either:
 *       //     case 1: generates a golden file
 *       //     case 2: compares the local file with a golden file
 *       //     case 3: generates local files and displays
 *       // Here we write the pix compressed with png and jpeg, respectively;
 *       // Then check against the golden file.  The internal %index
 *       // is incremented; it is embedded in the local filename and,
 *       // if generating, in the golden file as well.
 *       regTestWritePixAndCheck(rp, pix1, IFF_PNG);  // 5
 *       regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG);  // 6
 *
 *       // Display if reg test was called in 'display' mode
 *       pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display);
 *
 *       // Clean up and output result
 *       regTestCleanup(rp);
 * 
*/ /*----------------------------------------------------------------------------* * Regression test parameter packer * *----------------------------------------------------------------------------*/ /*! Regression test parameter packer */ struct L_RegParams { FILE *fp; /*!< stream to temporary output file for compare mode */ char *testname; /*!< name of test, without '_reg' */ char *tempfile; /*!< name of temp file for compare mode output */ l_int32 mode; /*!< generate, compare or display */ l_atomic index; /*!< index into saved files for this test; 0-based */ l_int32 success; /*!< overall result of the test */ l_int32 display; /*!< 1 if in display mode; 0 otherwise */ L_TIMER tstart; /*!< marks beginning of the reg test */ }; typedef struct L_RegParams L_REGPARAMS; /*! Running modes for the test */ /*! Regtest Mode */ enum { L_REG_GENERATE = 0, L_REG_COMPARE = 1, L_REG_DISPLAY = 2 }; #endif /* LEPTONICA_REGUTILS_H */ leptonica-1.86.0/src/renderpdf.c000066400000000000000000000262661506303110300164740ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file renderpdf.c *
 *
 *   Rendering pdf files using an external library
 *        l_int32     l_pdfRenderFile()
 *        l_int32     l_pdfRenderFiles()
 *
 *   Utility for rendering a set of pdf files as page images.
 *   The images are rendered for full page images at a specified
 *   resolution between 50 and 300 ppi, in the directory
 *       /tmp/lept/renderpdf/
 *
 *   An application like cleanpdf performs a sequence of:
 *   (1) rendering the pdfs into a set of images,
 *   (2) doing image processing on each image to generate new images, and
 *   (3) wrapping the new images up in a single pdf file.
 *   Typically, the processed images made by step (2) are stored compressed
 *   in memory in a PixaComp, before wrapping them up in step (3).
 *
 *   This requires the Poppler package of pdf utilities, in particular
 *   the program pdftoppm.  For non-unix systems, this requires
 *   installation of the cygwin Poppler package:
 *      https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86/poppler/
 *            poppler-0.26.5-1
 *
 *   For the rasterizer, use pdftoppm:
 *      pdftoppm -r res fname outroot  ('-r res' renders output at res ppi)
 *   This works on all pdf pages, both wrapped images and pages that
 *   were made orthographically.  The default output resolution for
 *   pdftoppm is 150 ppi, but we typically use 300 ppi.  This makes large
 *   uncompressed RGB image files (e.g., a standard size RGB page image
 *   at 300 ppi is 25 MB), but it is very fast.
 *
 *   The size of the resulting images does not depend on the resolution
 *   of the images stored in the input pdf.  We compute the value of the
 *   resolution parameter (render_res) that when input to pdftoppm
 *   will generate a page-size image (612 x 792 pts) at the requested
 *   output resolution.
 *
 *   We do NOT use pdfimages:
 *      pdfimages -j fname outroot   (-j outputs jpeg if input is dct)
 *   pdfimages only works when all pages are pdf wrappers around images.
 *   Further, in some cases, it scrambles the order of the output pages
 *   and inserts extra images.

 *   By default, this function will not run, because it makes a call
 *   to system(1).  To render pdfs as a set of images in a directory,
 *   three things are required:
 *   (1) To have poppler installed.
 *   (2) To enable debug operations using setLeptDebugOK(1).
 *   (3) To link the functions that generate pdf files in the library
 *       (in pdfio1.c, pdfio2.c).
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /*-----------------------------------------------------------------* * Rendering pdf files using an external library * *-----------------------------------------------------------------*/ /*! * \brief l_pdfRenderFile() * * \param[in] filename input pdf file * \param[in] res output resolution (0, [50 ... 300]) ppi * \param[out] psaout sarray of filenames of rasterized images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Wrapper to l_padfRenderFiles() for a single input pdf file.
 * 
*/ l_ok l_pdfRenderFile(const char *filename, l_int32 res, SARRAY **psaout) { l_int32 ret; SARRAY *sain; if (!psaout) return ERROR_INT("&saout not defined", __func__, 1); *psaout = NULL; if (!filename) return ERROR_INT("filename not defined", __func__, 1); sain = sarrayCreate(1); sarrayAddString(sain, filename, L_COPY); ret = l_pdfRenderFiles(NULL, sain, res, psaout); sarrayDestroy(&sain); return ret; } /*! * \brief l_pdfRenderFiles() * * \param[in] dir directory of input pdf files * \param[in] sain sarray of input pdf filenames * \param[in] res output resolution (0, [50 ... 300]) ppi * \param[out] psaout sarray of output filenames of rendered images * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Because this uses the "system" call, it is disabled by default
 *          on all platforms.  It is not supported and therefor3 disabled
 *          on iOS 11.
 *      (2) Input pdf file(s) are specified either by an input directory
 *          or an sarray with the paths.  Use the sarray if it is given;
 *          otherwise, use all files in the directory with extention "pdf",
 *          and name the rendered images in lexical order of the filenames.
 *      (3) The allowed output rendering resolutions are between 50 ppi
 *          and 300 ppi.  Typical resolutions are 150 and 300 ppi.
 *          Default input value of 0 can be used for 300 ppi resolution.
 *      (4) Images are rendered in ppm format in directory /tmp/lept/renderpdf
 *          and named in lexical order of the input filenames.  On invocation,
 *          any existing files in this directory are removed.
 *      (5) This requires pdftoppm from the Poppler package of pdf utilities.
 * 
*/ l_ok l_pdfRenderFiles(const char *dir, SARRAY *sain, l_int32 res, SARRAY **psaout) { char buf[256]; char *imagedir, *firstfile, *fname, *basename, *tail; l_int32 i, nfiles, render_res; SARRAY *sa; if (!LeptDebugOK) { L_INFO("running pdftoppm is disabled; " "use setLeptDebugOK(1) to enable\n", __func__); return 0; } #ifdef OS_IOS /* iOS 11 does not support system() */ return ERROR_INT("iOS 11 does not support system()", __func__, 0); #endif /* OS_IOS */ if (!psaout) return ERROR_INT("&saout not defined", __func__, 1); *psaout = NULL; if (res == 0) res = 300; if (res < 50 || res > 300) return ERROR_INT("res not in range [50 ... 300]", __func__, 1); if (!dir && !sain) return ERROR_INT("neither dir or sain are defined", __func__, 1); if (sain) { sa = sarrayCopy(sain); } else { sa = getSortedPathnamesInDirectory(dir, "pdf", 0, 0); if (!sa) return ERROR_INT("no files found in dir", __func__, 1); } nfiles = sarrayGetCount(sa); /* Set up directory for rendered page images. */ lept_rmdir("lept/renderpdf"); lept_mkdir("lept/renderpdf"); imagedir = genPathname("/tmp/lept/renderpdf", NULL); /* Figure out the resolution to use with the image renderer. This first checks the media box sizes, which give the output image size in printer points (1/72 inch). The largest expected output image has a max dimension of about 11 inches, corresponding to 792 points. At a resolution of 300 ppi, the max image size is then 3300. For robustness, use the median of media box sizes. If the max dimension of this median is significantly larger than 792, reduce the input resolution to the renderer. Specifically: * Calculate the median of the MediaBox widths and heights. * If the max exceeds 850, reduce the resolution so that the max dimension of the rendered image is 3300. The new resolution input to the renderer is reduced from 300 by the factor: (792 / medmax) If the media boxes are not found, render a page using a small given resolution (72) and use the max dimension to find the resolution, render_res, that will produce an out with 3300 pixels in the largest dimension. */ firstfile = sarrayGetString(sa, 0, L_NOCOPY); getPdfRendererResolution(firstfile, imagedir, &render_res); /* The input %res gives the actual resolution at which the page is to be rendered. If this is less than 300 ppi, reduce render_res, the resolution input to pdftoppm, by the factor: (res / 300) */ render_res = (render_res * res) / 300; /* Rasterize: '-r res' renders output at res ppi * pdftoppm -r res fname outroot */ for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); snprintf(buf, sizeof(buf), "pdftoppm -r %d %s %s/%s", render_res, fname, imagedir, basename); LEPT_FREE(tail); LEPT_FREE(basename); lept_stderr("%s\n", buf); callSystemDebug(buf); /* pdftoppm */ } sarrayDestroy(&sa); /* Generate the output array of image file names */ *psaout = getSortedPathnamesInDirectory(imagedir, NULL, 0, 0); LEPT_FREE(imagedir); return 0; } /* --------------------------------------------*/ #endif /* USE_PDFIO */ /* --------------------------------------------*/ /* ------------------------------------------------------------------------- * * Stubs if pdf is not supported * * ------------------------------------------------------------------------- */ /* -----------------------------------------------------------------*/ #if !USE_PDFIO /* -----------------------------------------------------------------*/ l_ok l_pdfRenderFile(const char *filename, l_int32 res, SARRAY **psaout) { return ERROR_INT("function not present", __func__, 1); } /* -----------------------------------------------------------*/ l_ok l_pdfRenderFiles(const char *dir, SARRAY *sain, l_int32 res, SARRAY **psaout) { return ERROR_INT("function not present", __func__, 1); } /* -----------------------------------------------------------------*/ #endif /* !USE_PDFIO */ /* -----------------------------------------------------------------*/ leptonica-1.86.0/src/rop.c000066400000000000000000000466611506303110300153240ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rop.c *
 *      General rasterop
 *           l_int32    pixRasterop()
 *
 *      In-place full band translation
 *           l_int32    pixRasteropVip()
 *           l_int32    pixRasteropHip()
 *
 *      Full image translation (general and in-place)
 *           l_int32    pixTranslate()
 *           l_int32    pixRasteropIP()
 *
 *      Full image rasterop with no translation
 *           l_int32    pixRasteropFullImage()
 *
 *      Checking for invalid crop box
 *           static l_int32   checkRasteropCrop()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 checkRasteropCrop(l_int32 pixw, l_int32 pixh, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh); /*--------------------------------------------------------------------* * General rasterop (basic pix interface) * *--------------------------------------------------------------------*/ /*! * \brief pixRasterop() * * \param[in] pixd dest pix * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \param[in] pixs src pix * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) This has the standard set of 9 args for rasterop.
 *          This function is your friend; it is worth memorizing!
 *      (2) If the operation involves only dest, this calls
 *          rasteropUniLow().  Otherwise, checks depth of the
 *          src and dest, and if they match, calls rasteropLow().
 *      (3) For the two-image operation, where both pixs and pixd
 *          are defined, they are typically different images.  However
 *          there are cases, such as pixSetMirroredBorder(), where
 *          in-place operations can be done, blitting pixels from
 *          one part of pixd to another.  Consequently, we permit
 *          such operations.  If you use them, be sure that there
 *          is no overlap between the source and destination rectangles
 *          in pixd (!)
 *
 *  Background:
 *  -----------
 *
 *  There are 18 operations, described by the op codes in pix.h.
 *
 *  One, PIX_DST, is a no-op.
 *
 *  Three, PIX_CLR, PIX_SET, and PIX_NOT(PIX_DST) operate only on the dest.
 *  These are handled by the low-level rasteropUniLow().
 *
 *  The other 14 involve both the src and the dest, and depend on
 *  the bit values of either just the src or the bit values of both
 *  src and dest.  They are handled by rasteropLow():
 *
 *          PIX_SRC                             s
 *          PIX_NOT(PIX_SRC)                   ~s
 *          PIX_SRC | PIX_DST                   s | d
 *          PIX_SRC & PIX_DST                   s & d
 *          PIX_SRC ^ PIX_DST                   s ^ d
 *          PIX_NOT(PIX_SRC) | PIX_DST         ~s | d
 *          PIX_NOT(PIX_SRC) & PIX_DST         ~s & d
 *          PIX_NOT(PIX_SRC) ^ PIX_DST         ~s ^ d
 *          PIX_SRC | PIX_NOT(PIX_DST)          s | ~d
 *          PIX_SRC & PIX_NOT(PIX_DST)          s & ~d
 *          PIX_SRC ^ PIX_NOT(PIX_DST)          s ^ ~d
 *          PIX_NOT(PIX_SRC | PIX_DST)         ~(s | d)
 *          PIX_NOT(PIX_SRC & PIX_DST)         ~(s & d)
 *          PIX_NOT(PIX_SRC ^ PIX_DST)         ~(s ^ d)
 *
 *  Each of these is implemented with one of three low-level
 *  functions, depending on the alignment of the left edge
 *  of the src and dest rectangles:
 *      * a fastest implementation if both left edges are
 *        (32-bit) word aligned
 *      * a very slightly slower implementation if both left
 *        edges have the same relative (32-bit) word alignment
 *      * the general routine that is invoked when
 *        both left edges have different word alignment
 *
 *  Of the 14 binary rasterops above, only 12 are unique
 *  logical combinations (out of a possible 16) of src
 *  and dst bits:
 *
 *        (sd)         (11)   (10)   (01)   (00)
 *   -----------------------------------------------
 *         s            1      1      0      0
 *        ~s            0      1      0      1
 *       s | d          1      1      1      0
 *       s & d          1      0      0      0
 *       s ^ d          0      1      1      0
 *      ~s | d          1      0      1      1
 *      ~s & d          0      0      1      0
 *      ~s ^ d          1      0      0      1
 *       s | ~d         1      1      0      1
 *       s & ~d         0      1      0      0
 *       s ^ ~d         1      0      0      1
 *      ~(s | d)        0      0      0      1
 *      ~(s & d)        0      1      1      1
 *      ~(s ^ d)        1      0      0      1
 *
 *  Note that the following three operations are equivalent:
 *      ~(s ^ d)
 *      ~s ^ d
 *      s ^ ~d
 *  and in the implementation, we call them out with the first form;
 *  namely, ~(s ^ d).
 *
 *  Of the 16 possible binary combinations of src and dest bits,
 *  the remaining 4 unique ones are independent of the src bit.
 *  They depend on either just the dest bit or on neither
 *  the src nor dest bits:
 *
 *         d            1      0      1      0    (indep. of s)
 *        ~d            0      1      0      1    (indep. of s)
 *        CLR           0      0      0      0    (indep. of both s & d)
 *        SET           1      1      1      1    (indep. of both s & d)
 *
 *  As mentioned above, three of these are implemented by
 *  rasteropUniLow(), and one is a no-op.
 *
 *  How can these operation codes be represented by bits
 *  in such a way that when the basic operations are performed
 *  on the bits the results are unique for unique
 *  operations, and mimic the logic table given above?
 *
 *  The answer is to choose a particular order of the pairings:
 *         (sd)         (11)   (10)   (01)   (00)
 *  (which happens to be the same as in the above table)
 *  and to translate the result into 4-bit representations
 *  of s and d.  For example, the Sun rasterop choice
 *  (omitting the extra bit for clipping) is
 *
 *      PIX_SRC      0xc
 *      PIX_DST      0xa
 *
 *  This corresponds to our pairing order given above:
 *         (sd)         (11)   (10)   (01)   (00)
 *  where for s = 1 we get the bit pattern
 *       PIX_SRC:        1      1      0      0     (0xc)
 *  and for d = 1 we get the pattern
 *       PIX_DST:         1      0      1      0    (0xa)
 *
 *  OK, that's the pairing order that Sun chose.  How many different
 *  ways can we assign bit patterns to PIX_SRC and PIX_DST to get
 *  the boolean ops to work out?  Any of the 4 pairs can be put
 *  in the first position, any of the remaining 3 pairs can go
 *  in the second; and one of the remaining 2 pairs can go the the third.
 *  There is a total of 4*3*2 = 24 ways these pairs can be permuted.
 * 
*/ l_ok pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy) { l_int32 dpw, dph, dpd, spw, sph, spd; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (op == PIX_DST) /* no-op */ return 0; pixGetDimensions(pixd, &dpw, &dph, &dpd); #if 0 if (checkRasteropCrop(dpw, dph, dx, dy, dw, dh)) { L_WARNING("dest crop box out of bounds\n", __func__); return 1; } #endif /* Check if operation is only on dest */ if (op == PIX_CLR || op == PIX_SET || op == PIX_NOT(PIX_DST)) { rasteropUniLow(pixGetData(pixd), dpw, dph, dpd, pixGetWpl(pixd), dx, dy, dw, dh, op); return 0; } /* Two-image rasterop; the depths must match */ if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &spw, &sph, &spd); if (dpd != spd) return ERROR_INT("depths of pixs and pixd differ", __func__, 1); #if 0 if (checkRasteropCrop(spw, sph, sx, sy, dw, dh)) { L_WARNING("source crop box out of bounds\n", __func__); return 1; } #endif rasteropLow(pixGetData(pixd), dpw, dph, dpd, pixGetWpl(pixd), dx, dy, dw, dh, op, pixGetData(pixs), spw, sph, pixGetWpl(pixs), sx, sy); return 0; } /*--------------------------------------------------------------------* * In-place full band translation * *--------------------------------------------------------------------*/ /*! * \brief pixRasteropVip() * * \param[in] pixd in-place * \param[in] bx left edge of vertical band * \param[in] bw width of vertical band * \param[in] vshift vertical shift of band; vshift > 0 is down * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This rasterop translates a vertical band of the
 *          image either up or down, bringing in either white
 *          or black pixels from outside the image.
 *      (2) The vertical band extends the full height of pixd.
 *      (3) If a colormap exists, the nearest color to white or black
 *          is brought in.
 * 
*/ l_ok pixRasteropVip(PIX *pixd, l_int32 bx, l_int32 bw, l_int32 vshift, l_int32 incolor) { l_int32 w, h, d, index, op; PIX *pixt; PIXCMAP *cmap; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", __func__, 1); if (bw <= 0) return ERROR_INT("bw must be > 0", __func__, 1); if (vshift == 0) return 0; pixGetDimensions(pixd, &w, &h, &d); rasteropVipLow(pixGetData(pixd), w, h, d, pixGetWpl(pixd), bx, bw, vshift); cmap = pixGetColormap(pixd); if (!cmap) { if ((d == 1 && incolor == L_BRING_IN_BLACK) || (d > 1 && incolor == L_BRING_IN_WHITE)) op = PIX_SET; else op = PIX_CLR; /* Set the pixels brought in at top or bottom */ if (vshift > 0) pixRasterop(pixd, bx, 0, bw, vshift, op, NULL, 0, 0); else /* vshift < 0 */ pixRasterop(pixd, bx, h + vshift, bw, -vshift, op, NULL, 0, 0); return 0; } /* Get the nearest index and fill with that */ if (incolor == L_BRING_IN_BLACK) pixcmapGetRankIntensity(cmap, 0.0, &index); else /* white */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixt = pixCreate(bw, L_ABS(vshift), d); pixSetAllArbitrary(pixt, index); if (vshift > 0) pixRasterop(pixd, bx, 0, bw, vshift, PIX_SRC, pixt, 0, 0); else /* vshift < 0 */ pixRasterop(pixd, bx, h + vshift, bw, -vshift, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return 0; } /*! * \brief pixRasteropHip() * * \param[in] pixd in-place operation * \param[in] by top of horizontal band * \param[in] bh height of horizontal band * \param[in] hshift horizontal shift of band; hshift > 0 is to right * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This rasterop translates a horizontal band of the
 *          image either left or right, bringing in either white
 *          or black pixels from outside the image.
 *      (2) The horizontal band extends the full width of pixd.
 *      (3) If a colormap exists, the nearest color to white or black
 *          is brought in.
 * 
*/ l_ok pixRasteropHip(PIX *pixd, l_int32 by, l_int32 bh, l_int32 hshift, l_int32 incolor) { l_int32 w, h, d, index, op; PIX *pixt; PIXCMAP *cmap; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", __func__, 1); if (bh <= 0) return ERROR_INT("bh must be > 0", __func__, 1); if (hshift == 0) return 0; pixGetDimensions(pixd, &w, &h, &d); rasteropHipLow(pixGetData(pixd), h, d, pixGetWpl(pixd), by, bh, hshift); cmap = pixGetColormap(pixd); if (!cmap) { if ((d == 1 && incolor == L_BRING_IN_BLACK) || (d > 1 && incolor == L_BRING_IN_WHITE)) op = PIX_SET; else op = PIX_CLR; /* Set the pixels brought in at left or right */ if (hshift > 0) pixRasterop(pixd, 0, by, hshift, bh, op, NULL, 0, 0); else /* hshift < 0 */ pixRasterop(pixd, w + hshift, by, -hshift, bh, op, NULL, 0, 0); return 0; } /* Get the nearest index and fill with that */ if (incolor == L_BRING_IN_BLACK) pixcmapGetRankIntensity(cmap, 0.0, &index); else /* white */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixt = pixCreate(L_ABS(hshift), bh, d); pixSetAllArbitrary(pixt, index); if (hshift > 0) pixRasterop(pixd, 0, by, hshift, bh, PIX_SRC, pixt, 0, 0); else /* hshift < 0 */ pixRasterop(pixd, w + hshift, by, -hshift, bh, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return 0; } /*--------------------------------------------------------------------* * Full image translation (general and in-place) * *--------------------------------------------------------------------*/ /*! * \brief pixTranslate() * * \param[in] pixd [optional] destination: this can be null, * equal to pixs, or different from pixs * \param[in] pixs * \param[in] hshift horizontal shift; hshift > 0 is to right * \param[in] vshift vertical shift; vshift > 0 is down * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) The general pattern is:
 *            pixd = pixTranslate(pixd, pixs, ...);
 *          For clarity, when you know the case, use one of these:
 *            pixd = pixTranslate(NULL, pixs, ...);  // new
 *            pixTranslate(pixs, pixs, ...);         // in-place
 *            pixTranslate(pixd, pixs, ...);         // to existing pixd
 *      (2) If an existing pixd is not the same size as pixs, the
 *          image data will be reallocated.
 * 
*/ PIX * pixTranslate(PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixRasteropIP(pixd, hshift, vshift, incolor); return pixd; } /*! * \brief pixRasteropIP() * * \param[in] pixd in-place translation * \param[in] hshift horizontal shift; hshift > 0 is to right * \param[in] vshift vertical shift; vshift > 0 is down * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return 0 if OK; 1 on error */ l_ok pixRasteropIP(PIX *pixd, l_int32 hshift, l_int32 vshift, l_int32 incolor) { l_int32 w, h; if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); pixGetDimensions(pixd, &w, &h, NULL); pixRasteropHip(pixd, 0, h, hshift, incolor); pixRasteropVip(pixd, 0, w, vshift, incolor); return 0; } /*--------------------------------------------------------------------* * Full image rasterop with no shifts * *--------------------------------------------------------------------*/ /*! * \brief pixRasteropFullImage() * * \param[in] pixd * \param[in] pixs * \param[in] op any of the op-codes * \return 0 if OK; 1 on error * *
 * Notes:
 *      ~ this is a wrapper for a common 2-image raster operation
 *      ~ both pixs and pixd must be defined
 *      ~ the operation is performed with aligned UL corners of pixs and pixd
 *      ~ the operation clips to the smallest pix; if the width or height
 *        of pixd is larger than pixs, some pixels in pixd will be unchanged
 * 
*/ l_ok pixRasteropFullImage(PIX *pixd, PIX *pixs, l_int32 op) { if (!pixd) return ERROR_INT("pixd not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), op, pixs, 0, 0); return 0; } /*--------------------------------------------------------------------* * Checking for invalid crop box * *--------------------------------------------------------------------*/ /*! * \brief checkRasteropCrop() * * \param[in] pixw, pixh pix dimensions * \param[in] x, y, w, h crop box parameters * \return 0 if OK, 1 if the crop box does not intersect with the pix. * *
 * Notes:
 *      (1) The widths and heights must all be positive, but %x and %y
 *          can take on any value.
 *      (2) This works for checking both the source and dest regions.
 *      (3) This has been used to verify rasteropLow() cropping is correct.
 *          It is not needed for pre-filtering in pixRasterop().
 * 
*/ static l_int32 checkRasteropCrop(l_int32 pixw, l_int32 pixh, l_int32 x, l_int32 y, l_int32 w, l_int32 h) { if (pixw < 1 || pixh < 1 || w < 1 || h < 1) return ERROR_INT("dimension is <= 0", __func__, 1); if (x + w <= 0 || y + h <= 0) return ERROR_INT("box to left or above pix", __func__, 1); if (x >= pixw || y >= pixh) return ERROR_INT("box to right or below pix", __func__, 1); return 0; } leptonica-1.86.0/src/roplow.c000066400000000000000000002563741506303110300160520ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file roplow.c *
 *      Low level dest-only
 *           void            rasteropUniLow()
 *           static void     rasteropUniWordAlignedlLow()
 *           static void     rasteropUniGeneralLow()
 *
 *      Low level src and dest
 *           void            rasteropLow()
 *           static void     rasteropWordAlignedLow()
 *           static void     rasteropVAlignedLow()
 *           static void     rasteropGeneralLow()
 *
 *      Low level in-place full height vertical block transfer
 *           void            rasteropVipLow()
 *
 *      Low level in-place full width horizontal block transfer
 *           void            rasteropHipLow()
 *           static void     shiftDataHorizontalLow()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Static helpers */ static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op); static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op); static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static void shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift); #define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) ) static const l_int32 SHIFT_LEFT = 0; static const l_int32 SHIFT_RIGHT = 1; static const l_uint32 lmask32[] = {0x0, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff}; static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /*--------------------------------------------------------------------* * Low-level dest-only rasterops * *--------------------------------------------------------------------*/ /*! * \brief rasteropUniLow() * * \param[in] datad ptr to dest image data * \param[in] dpixw width of dest * \param[in] dpixh height of dest * \param[in] depth depth of src and dest * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \return void * * Action: scales width, performs clipping, checks alignment, and * dispatches for the rasterop. */ void rasteropUniLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 dhangw, dhangh; /* -------------------------------------------------------* * scale horizontal dimensions by depth * -------------------------------------------------------*/ if (depth != 1) { dpixw *= depth; dx *= depth; dw *= depth; } /* -------------------------------------------------------* * clip rectangle to dest image * -------------------------------------------------------*/ /* first, clip horizontally (dx, dw) */ if (dx < 0) { dw += dx; /* reduce dw */ dx = 0; } dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ /* then, clip vertically (dy, dh) */ if (dy < 0) { dh += dy; /* reduce dh */ dy = 0; } dhangh = dy + dh - dpixh; /* rect ovhang dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ /* if clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return; /* -------------------------------------------------------* * dispatch to aligned or non-aligned blitters * -------------------------------------------------------*/ if ((dx & 31) == 0) rasteropUniWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op); else rasteropUniGeneralLow(datad, dwpl, dx, dy, dw, dh, op); } /*--------------------------------------------------------------------* * Static low-level uni rasterop with word alignment * *--------------------------------------------------------------------*/ /*! * \brief rasteropUniWordAlignedLow() * * \param[in] datad ptr to dest image data * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \return void * * This is called when the dest rect is left aligned * on 32-bit word boundaries. That is: dx & 31 == 0. * * We make an optimized implementation of this because * it is a common case: e.g., operating on a full dest image. */ static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 nfullw; /* number of full words */ l_uint32 *pfword; /* ptr to first word */ l_int32 lwbits; /* number of ovrhang bits in last partial word */ l_uint32 lwmask; /* mask for last partial word */ l_uint32 *lined; l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ nfullw = dw >> 5; lwbits = dw & 31; if (lwbits) lwmask = lmask32[lwbits]; pfword = datad + dwpl * dy + (dx >> 5); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_CLR: for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) *lined++ = 0x0; if (lwbits) *lined = COMBINE_PARTIAL(*lined, 0x0, lwmask); } break; case PIX_SET: for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) *lined++ = 0xffffffff; if (lwbits) *lined = COMBINE_PARTIAL(*lined, 0xffffffff, lwmask); } break; case PIX_NOT(PIX_DST): for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lined); lined++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lined), lwmask); } break; default: lept_stderr("Operation %d not permitted here!\n", op); } } /*--------------------------------------------------------------------* * Static low-level uni rasterop without word alignment * *--------------------------------------------------------------------*/ /*! * \brief rasteropUniGeneralLow() * * \param[in] datad ptr to dest image data * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \return void */ static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in ovrhang */ l_uint32 *pdfwpart = NULL; /* ptr to first partial dest word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull = NULL; /* ptr to first full dest word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart = NULL; /* ptr to last partial dest word */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ dfwmask = 0; if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); } /* is the first word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; if (dfwpartb) pdfwfull = pdfwpart + 1; else pdfwfull = datad + dwpl * dy + (dx >> 5); } } /* is the last word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; if (dfwpartb) pdlwpart = pdfwpart + 1 + dnfullw; else pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_CLR: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = 0x0; pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, dlwmask); pdlwpart += dwpl; } } break; case PIX_SET: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0xffffffff, dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = 0xffffffff; pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0xffffffff, dlwmask); pdlwpart += dwpl; } } break; case PIX_NOT(PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*pdfwpart), dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(pdfwfull + j)); pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pdlwpart), dlwmask); pdlwpart += dwpl; } } break; default: lept_stderr("Operation %d not permitted here!\n", op); } } /*--------------------------------------------------------------------* * Low-level src and dest rasterops * *--------------------------------------------------------------------*/ /*! * \brief rasteropLow() * * \param[in] datad ptr to dest image data * \param[in] dpixw width of dest * \param[in] dpixh height of dest * \param[in] depth depth of src and dest * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \param[in] datas ptr to src image data * \param[in] spixw width of src * \param[in] spixh height of src * \param[in] swpl wpl of src * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return void * * Action: Scales width, performs clipping, checks alignment and * dispatches for the rasterop. * * Warning: the two images must have equal depth. This is not checked. */ void rasteropLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dhangw, shangw, dhangh, shangh; /* -------------------------------------------------------* * Scale horizontal dimensions by depth * * -------------------------------------------------------*/ if (depth != 1) { dpixw *= depth; dx *= depth; dw *= depth; spixw *= depth; sx *= depth; } /* -------------------------------------------------------* * Clip to max rectangle within both src and dest * * -------------------------------------------------------*/ /* Clip horizontally (sx, dx, dw) */ if (dx < 0) { sx -= dx; /* increase sx */ dw += dx; /* reduce dw */ dx = 0; } if (sx < 0) { dx -= sx; /* increase dx */ dw += sx; /* reduce dw */ sx = 0; } dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ shangw = sx + dw - spixw; /* rect ovhang src to right */ if (shangw > 0) dw -= shangw; /* reduce dw */ /* Clip vertically (sy, dy, dh) */ if (dy < 0) { sy -= dy; /* increase sy */ dh += dy; /* reduce dh */ dy = 0; } if (sy < 0) { dy -= sy; /* increase dy */ dh += sy; /* reduce dh */ sy = 0; } dhangh = dy + dh - dpixh; /* rect ovhang dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ shangh = sy + dh - spixh; /* rect ovhang src below */ if (shangh > 0) dh -= shangh; /* reduce dh */ /* If clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return; #if 0 lept_stderr("dx = %d, dy = %d, dw = %d, dh = %d, sx = %d, sy = %d\n", dx, dy, dw, dh, sx, sy); #endif /* -------------------------------------------------------* * Dispatch to aligned or non-aligned blitters * * -------------------------------------------------------*/ if (((dx & 31) == 0) && ((sx & 31) == 0)) rasteropWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); else if ((dx & 31) == (sx & 31)) rasteropVAlignedLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); else rasteropGeneralLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); } /*--------------------------------------------------------------------* * Static low-level rasterop with vertical word alignment * *--------------------------------------------------------------------*/ /*! * \brief rasteropWordAlignedLow() * * \param[in] datad ptr to dest image data * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \param[in] datas ptr to src image data * \param[in] swpl wpl of src * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return void * * This is called when both the src and dest rects * are left aligned on 32-bit word boundaries. * That is: dx & 31 == 0 and sx & 31 == 0 * * We make an optimized implementation of this because * it is a common case: e.g., two images are rasterop'd * starting from their UL corners 0,0. */ static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 nfullw; /* number of full words */ l_uint32 *psfword; /* ptr to first src word */ l_uint32 *pdfword; /* ptr to first dest word */ l_int32 lwbits; /* number of ovrhang bits in last partial word */ l_uint32 lwmask; /* mask for last partial word */ l_uint32 *lines, *lined; l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ nfullw = dw >> 5; lwbits = dw & 31; if (lwbits) lwmask = lmask32[lwbits]; psfword = datas + swpl * sy + (sx >> 5); pdfword = datad + dwpl * dy + (dx >> 5); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = *lines; lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, *lines, lwmask); } break; case PIX_NOT(PIX_SRC): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines), lwmask); } break; case (PIX_SRC | PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines | *lined), lwmask); } break; case (PIX_SRC & PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines & *lined), lwmask); } break; case (PIX_SRC ^ PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines ^ *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines ^ *lined), lwmask); } break; case (PIX_NOT(PIX_SRC) | PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (~(*lines) | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (~(*lines) | *lined), lwmask); } break; case (PIX_NOT(PIX_SRC) & PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (~(*lines) & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (~(*lines) & *lined), lwmask); } break; case (PIX_SRC | PIX_NOT(PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines | ~(*lined)); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines | ~(*lined)), lwmask); } break; case (PIX_SRC & PIX_NOT(PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines & ~(*lined)); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines & ~(*lined)), lwmask); } break; case (PIX_NOT(PIX_SRC | PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines | *lined), lwmask); } break; case (PIX_NOT(PIX_SRC & PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines & *lined), lwmask); } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines ^ *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines ^ *lined), lwmask); } break; default: lept_stderr("Operation %d invalid\n", op); } } /*--------------------------------------------------------------------* * Static low-level rasterop with vertical word alignment * *--------------------------------------------------------------------*/ /*! * \brief rasteropVAlignedLow() * * \param[in] datad ptr to dest image data * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \param[in] datas ptr to src image data * \param[in] swpl wpl of src * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return void * * This is called when the left side of the src and dest * rects have the same alignment relative to 32-bit word * boundaries; i.e., dx & 31) == (sx & 31 */ static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in ovrhang */ l_uint32 *pdfwpart = NULL; /* ptr to first partial dest word */ l_uint32 *psfwpart = NULL; /* ptr to first partial src word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull = NULL; /* ptr to first full dest word */ l_uint32 *psfwfull = NULL; /* ptr to first full src word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart = NULL; /* ptr to last partial dest word */ l_uint32 *pslwpart = NULL; /* ptr to last partial src word */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ dfwmask = 0; if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); psfwpart = datas + swpl * sy + (sx >> 5); } /* is the first word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; if (dfwpartb) { pdfwfull = pdfwpart + 1; psfwfull = psfwpart + 1; } else { pdfwfull = datad + dwpl * dy + (dx >> 5); psfwfull = datas + swpl * sy + (sx >> 5); } } } /* is the last word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; if (dfwpartb) { pdlwpart = pdfwpart + 1 + dnfullw; pslwpart = psfwpart + 1 + dnfullw; } else { pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; pslwpart = datas + swpl * sy + (sx >> 5) + dnfullw; } } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case PIX_NOT(PIX_SRC): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) |= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) &= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC ^ PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) ^= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~(*psfwpart) | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) |= ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~(*pslwpart) | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~(*psfwpart) & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) &= ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~(*pslwpart) & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart | ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j) | ~(*(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart | ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart & ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j) & ~(*(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart & ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC | PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) | *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC & PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) & *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) ^ *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; default: lept_stderr("Operation %x invalid\n", op); } } /*--------------------------------------------------------------------* * Static low-level rasterop without vertical word alignment * *--------------------------------------------------------------------*/ /*! * \brief rasteropGeneralLow() * * \param[in] datad ptr to dest image data * \param[in] dwpl wpl of dest * \param[in] dx x val of UL corner of dest rectangle * \param[in] dy y val of UL corner of dest rectangle * \param[in] dw width of dest rectangle * \param[in] dh height of dest rectangle * \param[in] op op code * \param[in] datas ptr to src image data * \param[in] swpl wpl of src * \param[in] sx x val of UL corner of src rectangle * \param[in] sy y val of UL corner of src rectangle * \return void * * This is called when the src and dest rects are * do not have the same 32-bit word alignment. * * The method is a generalization of rasteropVAlignLow. * There, the src image pieces were directly merged * with the dest. Here, we shift the source bits * to fill words that are aligned with the dest, and * then use those "source words" exactly in place * of the source words that were used in rasteropVAlignLow. * * The critical parameter is thus the shift required * for the src. Consider the left edge of the rectangle. * The overhang into the src and dest words are found, * and the difference is exactly this shift. There are * two separate cases, depending on whether the src pixels * are shifted left or right. If the src overhang is * larger than the dest overhang, the src is shifted to * the right, and a number of pixels equal to the shift are * left over for filling the next dest word, if necessary. * * But if the dest overhang is larger than the src overhang, * the src is shifted to the left, and depending on the width of * transferred pixels, it may also be necessary to shift pixels * in from the next src word, in order to fill the dest word. * An interesting case is where the src overhang equals the width, * dw, of the block. Then all the pixels necessary to fill the first * dest word can be taken from the first src word, up to the last * src pixel in the word, and no pixels from the next src word are * required. Consider this simple example, where a single pixel from * the src is transferred to the dest: * pix1 = pixCreate(32, 1, 1); * pix2 = pixCreate(32, 1, 1); * pixRasterop(pix1, 30, 0, 1, 1, PIX_SRC, pix2, 31, 0); * Here, the pixel at the right end of the src image (sx = 31) * is shifted one bit to the left (to dx = 30). The width (1) equals * the src overhang (1), and no pixels from the next word are required. * (This must be true because there is only one src word.) */ static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if 1st dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in overhang; 0-31 */ l_int32 dhang; /* dest overhang in first partial word, */ /* or 0 if dest is word aligned (same as dfwbits) */ l_uint32 *pdfwpart = NULL; /* ptr to first partial dest word */ l_uint32 *psfwpart = NULL; /* ptr to first partial src word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull = NULL; /* ptr to first full dest word */ l_uint32 *psfwfull = NULL; /* ptr to first full src word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart = NULL; /* ptr to last partial dest word */ l_uint32 *pslwpart = NULL; /* ptr to last partial src word */ l_uint32 sword; /* compose src word aligned with the dest words */ l_int32 sfwbits; /* first word src bits in overhang (1-32), */ /* or 32 if src is word aligned */ l_int32 shang; /* source overhang in the first partial word, */ /* or 0 if src is word aligned (not same as sfwbits) */ l_int32 sleftshift; /* bits to shift left for source word to align */ /* with the dest. Also the number of bits that */ /* get shifted to the right to align with the dest. */ l_int32 srightshift; /* bits to shift right for source word to align */ /* with dest. Also, the number of bits that get */ /* shifted left to align with the dest. */ l_int32 srightmask; /* mask for selecting sleftshift bits that have */ /* been shifted right by srightshift bits */ l_int32 sfwshiftdir; /* either SHIFT_LEFT or SHIFT_RIGHT */ l_int32 sfwaddb; /* boolean: do we need an additional sfw right shift? */ l_int32 slwaddb; /* boolean: do we need an additional slw right shift? */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* To get alignment of src with dst (e.g., in the * full words) the src must do a left shift of its * relative overhang in the current src word, * and OR that with a right shift of * (31 - relative overhang) from the next src word. * We find the absolute overhangs, the relative overhangs, * the required shifts and the src mask */ if ((sx & 31) == 0) shang = 0; else shang = 32 - (sx & 31); if ((dx & 31) == 0) dhang = 0; else dhang = 32 - (dx & 31); #if 0 lept_stderr("shang = %d, dhang = %d\n", shang, dhang); #endif if (shang == 0 && dhang == 0) { /* this should be treated by an aligned operation, not by this general rasterop! */ sleftshift = 0; srightshift = 0; srightmask = rmask32[0]; } else { if (dhang > shang) sleftshift = dhang - shang; else sleftshift = 32 - (shang - dhang); srightshift = 32 - sleftshift; srightmask = rmask32[sleftshift]; } #if 0 lept_stderr("sleftshift = %d, srightshift = %d\n", sleftshift, srightshift); #endif /* Is the first dest word partial? */ dfwmask = 0; if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); psfwpart = datas + swpl * sy + (sx >> 5); sfwbits = 32 - (sx & 31); if (dfwbits > sfwbits) { sfwshiftdir = SHIFT_LEFT; /* shift by sleftshift */ /* Do we have enough bits from the current src word? */ if (dw <= shang) sfwaddb = 0; /* yes: we have enough bits */ else sfwaddb = 1; /* no: rshift in next src word by srightshift */ } else { sfwshiftdir = SHIFT_RIGHT; /* shift by srightshift */ } } /* Is the first dest word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* Is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; pdfwfull = datad + dwpl * dy + ((dx + dhang) >> 5); psfwfull = datas + swpl * sy + ((sx + dhang) >> 5); /* yes, dhang */ } } /* Is the last dest word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; pdlwpart = datad + dwpl * dy + ((dx + dhang) >> 5) + dnfullw; pslwpart = datas + swpl * sy + ((sx + dhang) >> 5) + dnfullw; if (dlwbits <= srightshift) /* must be <= here !!! */ slwaddb = 0; /* we got enough bits from current src word */ else slwaddb = 1; /* must rshift in next src word by srightshift */ } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, sword, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, sword, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case PIX_NOT(PIX_SRC): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~sword, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~sword, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) |= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) &= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC ^ PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) ^= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) |= ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) &= ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword | ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword | ~(*(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword | ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword & ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword & ~(*(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword & ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC | PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword | *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC & PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword & *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword ^ *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; default: lept_stderr("Operation %x invalid\n", op); } } /*--------------------------------------------------------------------* * Low level in-place full height vertical block transfer * *--------------------------------------------------------------------*/ /*! * \brief rasteropVipLow() * * \param[in] data ptr to image data * \param[in] pixw width * \param[in] pixh height * \param[in] depth depth * \param[in] wpl wpl * \param[in] x x val of UL corner of rectangle * \param[in] w width of rectangle * \param[in] shift + shifts data downward in vertical column * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) This clears the pixels that are left exposed after the
 *          translation.  You can consider them as pixels that are
 *          shifted in from outside the image.  This can be later
 *          overridden by the incolor parameter in higher-level functions
 *          that call this.  For example, for images with depth > 1,
 *          these pixels are cleared to black; to be white they
 *          must later be SET to white.  See, e.g., pixRasteropVip().
 *      (2) This function scales the width to accommodate any depth,
 *          performs clipping, and then does the in-place rasterop.
 * 
*/ void rasteropVipLow(l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift) { l_int32 fwpartb; /* boolean (1, 0) if first word is partial */ l_int32 fwpart2b; /* boolean (1, 0) if first word is doubly partial */ l_uint32 fwmask; /* mask for first partial word */ l_int32 fwbits; /* first word bits in ovrhang */ l_uint32 *pdfwpart = NULL; /* ptr to first partial dest word */ l_uint32 *psfwpart = NULL; /* ptr to first partial src word */ l_int32 fwfullb; /* boolean (1, 0) if there exists a full word */ l_int32 nfullw; /* number of full words */ l_uint32 *pdfwfull = NULL; /* ptr to first full dest word */ l_uint32 *psfwfull = NULL; /* ptr to first full src word */ l_int32 lwpartb; /* boolean (1, 0) if last word is partial */ l_uint32 lwmask; /* mask for last partial word */ l_int32 lwbits; /* last word bits in ovrhang */ l_uint32 *pdlwpart = NULL; /* ptr to last partial dest word */ l_uint32 *pslwpart = NULL; /* ptr to last partial src word */ l_int32 dirwpl; /* directed wpl (-wpl * sign(shift)) */ l_int32 absshift; /* absolute value of shift; for use in iterator */ l_int32 vlimit; /* vertical limit value for iterations */ l_int32 i, j; /*--------------------------------------------------------* * Scale horizontal dimensions by depth * *--------------------------------------------------------*/ if (depth != 1) { pixw *= depth; x *= depth; w *= depth; } /*--------------------------------------------------------* * Clip horizontally * *--------------------------------------------------------*/ if (x < 0) { w += x; /* reduce w */ x = 0; /* clip to x = 0 */ } if (x >= pixw || w <= 0) /* no part of vertical slice is in the image */ return; if (x + w > pixw) w = pixw - x; /* clip to x + w = pixw */ /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ if ((x & 31) == 0) { /* if not */ fwpartb = 0; fwbits = 0; } else { /* if so */ fwpartb = 1; fwbits = 32 - (x & 31); fwmask = rmask32[fwbits]; if (shift >= 0) { /* go up from bottom */ pdfwpart = data + wpl * (pixh - 1) + (x >> 5); psfwpart = data + wpl * (pixh - 1 - shift) + (x >> 5); } else { /* go down from top */ pdfwpart = data + (x >> 5); psfwpart = data - wpl * shift + (x >> 5); } } /* is the first word doubly partial? */ if (w >= fwbits) { /* if not */ fwpart2b = 0; } else { /* if so */ fwpart2b = 1; fwmask &= lmask32[32 - fwbits + w]; } /* is there a full dest word? */ if (fwpart2b == 1) { /* not */ fwfullb = 0; nfullw = 0; } else { nfullw = (w - fwbits) >> 5; if (nfullw == 0) { /* if not */ fwfullb = 0; } else { /* if so */ fwfullb = 1; if (fwpartb) { pdfwfull = pdfwpart + 1; psfwfull = psfwpart + 1; } else if (shift >= 0) { /* go up from bottom */ pdfwfull = data + wpl * (pixh - 1) + (x >> 5); psfwfull = data + wpl * (pixh - 1 - shift) + (x >> 5); } else { /* go down from top */ pdfwfull = data + (x >> 5); psfwfull = data - wpl * shift + (x >> 5); } } } /* is the last word partial? */ lwbits = (x + w) & 31; if (fwpart2b == 1 || lwbits == 0) { /* if not */ lwpartb = 0; } else { lwpartb = 1; lwmask = lmask32[lwbits]; if (fwpartb) { pdlwpart = pdfwpart + 1 + nfullw; pslwpart = psfwpart + 1 + nfullw; } else if (shift >= 0) { /* go up from bottom */ pdlwpart = data + wpl * (pixh - 1) + (x >> 5) + nfullw; pslwpart = data + wpl * (pixh - 1 - shift) + (x >> 5) + nfullw; } else { /* go down from top */ pdlwpart = data + (x >> 5) + nfullw; pslwpart = data - wpl * shift + (x >> 5) + nfullw; } } /* determine the direction of flow from the shift * If the shift >= 0, data flows downard from src * to dest, starting at the bottom and working up. * If shift < 0, data flows upward from src to * dest, starting at the top and working down. */ dirwpl = (shift >= 0) ? -wpl : wpl; absshift = L_ABS(shift); vlimit = L_MAX(0, pixh - absshift); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ /* Do the first partial word */ if (fwpartb) { for (i = 0; i < vlimit; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, fwmask); pdfwpart += dirwpl; psfwpart += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, fwmask); pdfwpart += dirwpl; } } /* Do the full words */ if (fwfullb) { for (i = 0; i < vlimit; i++) { for (j = 0; j < nfullw; j++) *(pdfwfull + j) = *(psfwfull + j); pdfwfull += dirwpl; psfwfull += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { for (j = 0; j < nfullw; j++) *(pdfwfull + j) = 0x0; pdfwfull += dirwpl; } } /* Do the last partial word */ if (lwpartb) { for (i = 0; i < vlimit; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, lwmask); pdlwpart += dirwpl; pslwpart += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, lwmask); pdlwpart += dirwpl; } } } /*--------------------------------------------------------------------* * Low level in-place full width horizontal block transfer * *--------------------------------------------------------------------*/ /*! * \brief rasteropHipLow() * * \param[in] data ptr to image data * \param[in] pixh height * \param[in] depth depth * \param[in] wpl wpl * \param[in] y y val of UL corner of rectangle * \param[in] h height of rectangle * \param[in] shift + shifts data to the left in a horizontal column * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) This clears the pixels that are left exposed after the rasterop.
 *          Therefore, for Pix with depth > 1, these pixels become black,
 *          and must be subsequently SET if they are to be white.
 *          For example, see pixRasteropHip().
 *      (2) This function performs clipping and calls shiftDataHorizontalLow()
 *          to do the in-place rasterop on each line.
 * 
*/ void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift) { l_int32 i; l_uint32 *line; /* clip band if necessary */ if (y < 0) { h += y; /* reduce h */ y = 0; /* clip to y = 0 */ } if (h <= 0 || y > pixh) /* no part of horizontal slice is in the image */ return; if (y + h > pixh) h = pixh - y; /* clip to y + h = pixh */ for (i = y; i < y + h; i++) { line = data + i * wpl; shiftDataHorizontalLow(line, wpl, line, wpl, shift * depth); } } /*! * \brief shiftDataHorizontalLow() * * \param[in] datad ptr to beginning of dest line * \param[in] wpld wpl of dest * \param[in] datas ptr to beginning of src line * \param[in] wpls wpl of src * \param[in] shift horizontal shift of block; >0 is to right * \return void * *
 * Notes:
 *      (1) This can also be used for in-place operation; see, e.g.,
 *          rasteropHipLow().
 *      (2) We are clearing the pixels that are shifted in from
 *          outside the image.  This can be overridden by the
 *          incolor parameter in higher-level functions that call this.
 * 
*/ static void shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift) { l_int32 j, firstdw, wpl, rshift, lshift; l_uint32 *lined, *lines; lined = datad; lines = datas; if (shift >= 0) { /* src shift to right; data flows to * right, starting at right edge and * progressing leftward. */ firstdw = shift / 32; wpl = L_MIN(wpls, wpld - firstdw); lined += firstdw + wpl - 1; lines += wpl - 1; rshift = shift & 31; if (rshift == 0) { for (j = 0; j < wpl; j++) *lined-- = *lines--; /* clear out the rest to the left edge */ for (j = 0; j < firstdw; j++) *lined-- = 0; } else { lshift = 32 - rshift; for (j = 1; j < wpl; j++) { *lined-- = *(lines - 1) << lshift | *lines >> rshift; lines--; } *lined = *lines >> rshift; /* partial first */ /* clear out the rest to the left edge */ *lined &= ~lmask32[rshift]; lined--; for (j = 0; j < firstdw; j++) *lined-- = 0; } } else { /* src shift to left; data flows to left, starting * at left edge and progressing rightward. */ firstdw = (-shift) / 32; wpl = L_MIN(wpls - firstdw, wpld); lines += firstdw; lshift = (-shift) & 31; if (lshift == 0) { for (j = 0; j < wpl; j++) *lined++ = *lines++; /* clear out the rest to the right edge */ for (j = 0; j < firstdw; j++) *lined++ = 0; } else { rshift = 32 - lshift; for (j = 1; j < wpl; j++) { *lined++ = *lines << lshift | *(lines + 1) >> rshift; lines++; } *lined = *lines << lshift; /* partial last */ /* clear out the rest to the right edge */ /* first clear the lshift pixels of this partial word */ *lined &= ~rmask32[lshift]; lined++; /* then the remaining words to the right edge */ for (j = 0; j < firstdw; j++) *lined++ = 0; } } } leptonica-1.86.0/src/rotate.c000066400000000000000000000557601506303110300160220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rotate.c *
 *
 *     General rotation about image center
 *              PIX     *pixRotate()
 *              PIX     *pixEmbedForRotation()
 *
 *     General rotation by sampling
 *              PIX     *pixRotateBySampling()
 *
 *     Nice (slow) rotation of 1 bpp image
 *              PIX     *pixRotateBinaryNice()
 *
 *     Rotation including alpha (blend) component
 *              PIX     *pixRotateWithAlpha()
 *
 *     Rotations are measured in radians; clockwise is positive.
 *
 *     The general rotation pixRotate() does the best job for
 *     rotating about the image center.  For 1 bpp, it uses shear;
 *     for others, it uses either shear or area mapping.
 *     If requested, it expands the output image so that no pixels are lost
 *     in the rotation, and this can be done on multiple successive shears
 *     without expanding beyond the maximum necessary size.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; static const l_float32 MinAngleToRotate = 0.001f; /* radians; ~0.06 deg */ static const l_float32 Max1BppShearAngle = 0.06f; /* radians; ~3 deg */ static const l_float32 LimitShearAngle = 0.35f; /* radians; ~20 deg */ /*------------------------------------------------------------------* * General rotation about the center * *------------------------------------------------------------------*/ /*! * \brief pixRotate() * * \param[in] pixs 1, 2, 4, 8, 32 bpp rgb * \param[in] angle radians; clockwise is positive * \param[in] type L_ROTATE_AREA_MAP, L_ROTATE_SHEAR, L_ROTATE_SAMPLING * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \param[in] width original width; use 0 to avoid embedding * \param[in] height original height; use 0 to avoid embedding * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a high-level, simple interface for rotating images
 *          about their center.
 *      (2) For very small rotations, just return a clone.
 *      (3) Rotation brings either white or black pixels in
 *          from outside the image.
 *      (4) The rotation type is adjusted if necessary for the image
 *          depth and size of rotation angle.  For 1 bpp images, we
 *          rotate either by shear or sampling.
 *      (5) Colormaps are removed for rotation by area mapping.
 *      (6) The dest can be expanded so that no image pixels
 *          are lost.  To invoke expansion, input the original
 *          width and height.  For repeated rotation, use of the
 *          original width and height allows the expansion to
 *          stop at the maximum required size, which is a square
 *          with side = sqrt(w*w + h*h).
 * 
*/ PIX * pixRotate(PIX *pixs, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height) { l_int32 w, h, d; l_uint32 fillval; PIX *pix1, *pix2, *pix3, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (type != L_ROTATE_SHEAR && type != L_ROTATE_AREA_MAP && type != L_ROTATE_SAMPLING) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); /* Adjust rotation type if necessary: * - If d == 1 bpp and the angle is more than about 6 degrees, * rotate by sampling; otherwise rotate by shear. * - If d > 1, only allow shear rotation up to about 20 degrees; * beyond that, default a shear request to sampling. */ if (pixGetDepth(pixs) == 1) { if (L_ABS(angle) > Max1BppShearAngle) { if (type != L_ROTATE_SAMPLING) L_INFO("1 bpp, large angle; rotate by sampling\n", __func__); type = L_ROTATE_SAMPLING; } else if (type != L_ROTATE_SHEAR) { L_INFO("1 bpp; rotate by shear\n", __func__); type = L_ROTATE_SHEAR; } } else if (L_ABS(angle) > LimitShearAngle && type == L_ROTATE_SHEAR) { L_INFO("large angle; rotate by sampling\n", __func__); type = L_ROTATE_SAMPLING; } /* Remove colormap if we rotate by area mapping. */ cmap = pixGetColormap(pixs); if (cmap && type == L_ROTATE_AREA_MAP) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix1 = pixClone(pixs); cmap = pixGetColormap(pix1); /* Otherwise, if there is a colormap and we're not embedding, * add white color if it doesn't exist. */ if (cmap && width == 0) { /* no embedding; generate %incolor */ if (incolor == L_BRING_IN_BLACK) pixcmapAddBlackOrWhite(cmap, 0, NULL); else /* L_BRING_IN_WHITE */ pixcmapAddBlackOrWhite(cmap, 1, NULL); } /* Request to embed in a larger image; do if necessary */ pix2 = pixEmbedForRotation(pix1, angle, incolor, width, height); /* Area mapping requires 8 or 32 bpp. If less than 8 bpp and * area map rotation is requested, convert to 8 bpp. */ d = pixGetDepth(pix2); if (type == L_ROTATE_AREA_MAP && d < 8) pix3 = pixConvertTo8(pix2, FALSE); else pix3 = pixClone(pix2); /* Do the rotation: shear, sampling or area mapping */ pixGetDimensions(pix3, &w, &h, &d); if (type == L_ROTATE_SHEAR) { pixd = pixRotateShearCenter(pix3, angle, incolor); } else if (type == L_ROTATE_SAMPLING) { pixd = pixRotateBySampling(pix3, w / 2, h / 2, angle, incolor); } else { /* rotate by area mapping */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGray(pix3, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColor(pix3, angle, fillval); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pixd; } /*! * \brief pixEmbedForRotation() * * \param[in] pixs 1, 2, 4, 8, 32 bpp rgb * \param[in] angle radians; clockwise is positive * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \param[in] width original width; use 0 to avoid embedding * \param[in] height original height; use 0 to avoid embedding * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For very small rotations, just return a clone.
 *      (2) Generate larger image to embed pixs if necessary, and
 *          place the center of the input image in the center.
 *      (3) Rotation brings either white or black pixels in
 *          from outside the image.  For colormapped images where
 *          there is no white or black, a new color is added if
 *          possible for these pixels; otherwise, either the
 *          lightest or darkest color is used.  In most cases,
 *          the colormap will be removed prior to rotation.
 *      (4) The dest is to be expanded so that no image pixels
 *          are lost after rotation.  Input of the original width
 *          and height allows the expansion to stop at the maximum
 *          required size, which is a square with side equal to
 *          sqrt(w*w + h*h).
 *      (5) For an arbitrary angle, the expansion can be found by
 *          considering the UL and UR corners.  As the image is
 *          rotated, these move in an arc centered at the center of
 *          the image.  Normalize to a unit circle by dividing by half
 *          the image diagonal.  After a rotation of T radians, the UL
 *          and UR corners are at points T radians along the unit
 *          circle.  Compute the x and y coordinates of both these
 *          points and take the max of absolute values; these represent
 *          the half width and half height of the containing rectangle.
 *          The arithmetic is done using formulas for sin(a+b) and cos(a+b),
 *          where b = T.  For the UR corner, sin(a) = h/d and cos(a) = w/d.
 *          For the UL corner, replace a by (pi - a), and you have
 *          sin(pi - a) = h/d, cos(pi - a) = -w/d.  The equations
 *          given below follow directly.
 * 
*/ PIX * pixEmbedForRotation(PIX *pixs, l_float32 angle, l_int32 incolor, l_int32 width, l_int32 height) { l_int32 w, h, d, w1, h1, w2, h2, maxside, wnew, hnew, xoff, yoff, setcolor; l_float64 sina, cosa, fw, fh; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); /* Test if big enough to hold any rotation of the original image */ pixGetDimensions(pixs, &w, &h, &d); maxside = (l_int32)(sqrt((l_float64)(width * width) + (l_float64)(height * height)) + 0.5); if (w >= maxside && h >= maxside) /* big enough */ return pixClone(pixs); /* Find the new sizes required to hold the image after rotation. * Note that the new dimensions must be at least as large as those * of pixs, because we're rasterop-ing into it before rotation. */ cosa = cos(angle); sina = sin(angle); fw = (l_float64)w; fh = (l_float64)h; w1 = (l_int32)(L_ABS(fw * cosa - fh * sina) + 0.5); w2 = (l_int32)(L_ABS(-fw * cosa - fh * sina) + 0.5); h1 = (l_int32)(L_ABS(fw * sina + fh * cosa) + 0.5); h2 = (l_int32)(L_ABS(-fw * sina + fh * cosa) + 0.5); wnew = L_MAX(w, L_MAX(w1, w2)); hnew = L_MAX(h, L_MAX(h1, h2)); if ((pixd = pixCreate(wnew, hnew, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyText(pixd, pixs); xoff = (wnew - w) / 2; yoff = (hnew - h) / 2; /* Set background to color to be rotated in */ setcolor = (incolor == L_BRING_IN_BLACK) ? L_SET_BLACK : L_SET_WHITE; pixSetBlackOrWhite(pixd, setcolor); /* Rasterop automatically handles all 4 channels for rgba */ pixRasterop(pixd, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); return pixd; } /*------------------------------------------------------------------* * General rotation by sampling * *------------------------------------------------------------------*/ /*! * \brief pixRotateBySampling() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp rgb; can be cmapped * \param[in] xcen x value of center of rotation * \param[in] ycen y value of center of rotation * \param[in] angle radians; clockwise is positive * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For very small rotations, just return a clone.
 *      (2) Rotation brings either white or black pixels in
 *          from outside the image.
 *      (3) Colormaps are retained.
 * 
*/ PIX * pixRotateBySampling(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_int32 w, h, d, i, j, x, y, xdif, ydif, wm1, hm1, wpld; l_uint32 val; l_float32 sina, cosa; l_uint32 *datad, *lined; void **lines; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("invalid depth", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetBlackOrWhite(pixd, incolor); sina = sin(angle); cosa = cos(angle); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); wm1 = w - 1; hm1 = h - 1; lines = pixGetLinePtrs(pixs, NULL); /* Treat 1 bpp case specially */ if (d == 1) { for (i = 0; i < h; i++) { /* scan over pixd */ lined = datad + i * wpld; ydif = ycen - i; for (j = 0; j < w; j++) { xdif = xcen - j; x = xcen + (l_int32)(-xdif * cosa - ydif * sina); if (x < 0 || x > wm1) continue; y = ycen + (l_int32)(-ydif * cosa + xdif * sina); if (y < 0 || y > hm1) continue; if (incolor == L_BRING_IN_WHITE) { if (GET_DATA_BIT(lines[y], x)) SET_DATA_BIT(lined, j); } else { if (!GET_DATA_BIT(lines[y], x)) CLEAR_DATA_BIT(lined, j); } } } LEPT_FREE(lines); return pixd; } for (i = 0; i < h; i++) { /* scan over pixd */ lined = datad + i * wpld; ydif = ycen - i; for (j = 0; j < w; j++) { xdif = xcen - j; x = xcen + (l_int32)(-xdif * cosa - ydif * sina); if (x < 0 || x > wm1) continue; y = ycen + (l_int32)(-ydif * cosa + xdif * sina); if (y < 0 || y > hm1) continue; switch (d) { case 8: val = GET_DATA_BYTE(lines[y], x); SET_DATA_BYTE(lined, j, val); break; case 32: val = GET_DATA_FOUR_BYTES(lines[y], x); SET_DATA_FOUR_BYTES(lined, j, val); break; case 2: val = GET_DATA_DIBIT(lines[y], x); SET_DATA_DIBIT(lined, j, val); break; case 4: val = GET_DATA_QBIT(lines[y], x); SET_DATA_QBIT(lined, j, val); break; case 16: val = GET_DATA_TWO_BYTES(lines[y], x); SET_DATA_TWO_BYTES(lined, j, val); break; default: return (PIX *)ERROR_PTR("invalid depth", __func__, NULL); } } } LEPT_FREE(lines); return pixd; } /*------------------------------------------------------------------* * Nice (slow) rotation of 1 bpp image * *------------------------------------------------------------------*/ /*! * \brief pixRotateBinaryNice() * * \param[in] pixs 1 bpp * \param[in] angle radians; clockwise is positive; about the center * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) For very small rotations, just return a clone.
 *      (2) This does a computationally expensive rotation of 1 bpp images.
 *          The fastest rotators (using shears or subsampling) leave
 *          visible horizontal and vertical shear lines across which
 *          the image shear changes by one pixel.  To ameliorate the
 *          visual effect one can introduce random dithering.  One
 *          way to do this in a not-too-random fashion is given here.
 *          We convert to 8 bpp, do a very small blur, rotate using
 *          linear interpolation (same as area mapping), do a
 *          small amount of sharpening to compensate for the initial
 *          blur, and threshold back to binary.  The shear lines
 *          are magically removed.
 *      (3) This operation is about 5x slower than rotation by sampling.
 * 
*/ PIX * pixRotateBinaryNice(PIX *pixs, l_float32 angle, l_int32 incolor) { PIX *pix1, *pix2, *pix3, *pix4, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pix1 = pixConvertTo8(pixs, 0); pix2 = pixBlockconv(pix1, 1, 1); /* smallest blur allowed */ pix3 = pixRotateAM(pix2, angle, incolor); pix4 = pixUnsharpMasking(pix3, 1, 1.0); /* sharpen a bit */ pixd = pixThresholdToBinary(pix4, 128); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return pixd; } /*------------------------------------------------------------------* * Rotation including alpha (blend) component * *------------------------------------------------------------------*/ /*! * \brief pixRotateWithAlpha() * * \param[in] pixs 32 bpp rgb or cmapped * \param[in] angle radians; clockwise is positive * \param[in] pixg [optional] 8 bpp, can be null * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque * \return pixd 32 bpp rgba, or NULL on error * *
 * Notes:
 *      (1) The alpha channel is transformed separately from pixs,
 *          and aligns with it, being fully transparent outside the
 *          boundary of the transformed pixs.  For pixels that are fully
 *          transparent, a blending function like pixBlendWithGrayMask()
 *          will give zero weight to corresponding pixels in pixs.
 *      (2) Rotation is about the center of the image; for very small
 *          rotations, just return a clone.  The dest is automatically
 *          expanded so that no image pixels are lost.
 *      (3) Rotation is by area mapping.  It doesn't matter what
 *          color is brought in because the alpha channel will
 *          be transparent (black) there.
 *      (4) If pixg is NULL, it is generated as an alpha layer that is
 *          partially opaque, using %fract.  Otherwise, it is cropped
 *          to pixs if required and %fract is ignored.  The alpha
 *          channel in pixs is never used.
 *      (4) Colormaps are removed to 32 bpp.
 *      (5) The default setting for the border values in the alpha channel
 *          is 0 (transparent) for the outermost ring of pixels and
 *          (0.5 * fract * 255) for the second ring.  When blended over
 *          a second image, this
 *          (a) shrinks the visible image to make a clean overlap edge
 *              with an image below, and
 *          (b) softens the edges by weakening the aliasing there.
 *          Use l_setAlphaMaskBorder() to change these values.
 *      (6) A subtle use of gamma correction is to remove gamma correction
 *          before rotation and restore it afterwards.  This is done
 *          by sandwiching this function between a gamma/inverse-gamma
 *          photometric transform:
 *              pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255);
 *              pixd = pixRotateWithAlpha(pixt, angle, NULL, fract);
 *              pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255);
 *              pixDestroy(&pixt);
 *          This has the side-effect of producing artifacts in the very
 *          dark regions.
 * 
*/ PIX * pixRotateWithAlpha(PIX *pixs, l_float32 angle, PIX *pixg, l_float32 fract) { l_int32 ws, hs, d, spp; PIX *pixd, *pix32, *pixg2, *pixgr; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", __func__); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using fully opaque\n", __func__); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("transparent alpha; image will not be blended\n", __func__); /* Make sure input to rotation is 32 bpp rgb, and rotate it */ if (d != 32) pix32 = pixConvertTo32(pixs); else pix32 = pixClone(pixs); spp = pixGetSpp(pix32); pixSetSpp(pix32, 3); /* ignore the alpha channel for the rotation */ pixd = pixRotate(pix32, angle, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, ws, hs); pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ pixDestroy(&pix32); /* Set up alpha layer with a fading border and rotate it */ if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else if (fract > 0.0) pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 8 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixgr = pixRotate(pixg2, angle, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, ws, hs); /* Combine into a 4 spp result */ pixSetRGBComponent(pixd, pixgr, L_ALPHA_CHANNEL); pixDestroy(&pixg2); pixDestroy(&pixgr); return pixd; } leptonica-1.86.0/src/rotateam.c000066400000000000000000001227451506303110300163360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rotateam.c *
 *
 *     Grayscale and color rotation for area mapping (== interpolation)
 *
 *         Rotation about the image center
 *                PIX         *pixRotateAM()
 *                PIX         *pixRotateAMColor()
 *                PIX         *pixRotateAMGray()
 *                static void  rotateAMColorLow()
 *                static void  rotateAMGrayLow()
 *
 *         Rotation about the UL corner of the image
 *                PIX         *pixRotateAMCorner()
 *                PIX         *pixRotateAMColorCorner()
 *                PIX         *pixRotateAMGrayCorner()
 *                static void  rotateAMColorCornerLow()
 *                static void  rotateAMGrayCornerLow()
 *
 *         Faster color rotation about the image center
 *                PIX         *pixRotateAMColorFast()
 *                static void  rotateAMColorFastLow()
 *
 *     Rotations are measured in radians; clockwise is positive.
 *
 *     The basic area mapping grayscale rotation works on 8 bpp images.
 *     For color, the same method is applied to each color separately.
 *     This can be done in two ways: (1) as here, computing each dest
 *     rgb pixel from the appropriate four src rgb pixels, or (2) separating
 *     the color image into three 8 bpp images, rotate each of these,
 *     and then combine the result.  Method (1) is about 2.5x faster.
 *     We have also implemented a fast approximation for color area-mapping
 *     rotation (pixRotateAMColorFast()), which is about 25% faster
 *     than the standard color rotator.  If you need the extra speed,
 *     use it.
 *
 *     Area mapping works as follows.  For each dest
 *     pixel you find the 4 source pixels that it partially
 *     covers.  You then compute the dest pixel value as
 *     the area-weighted average of those 4 source pixels.
 *     We make two simplifying approximations:
 *
 *       ~  For simplicity, compute the areas as if the dest
 *          pixel were translated but not rotated.
 *
 *       ~  Compute area overlaps on a discrete sub-pixel grid.
 *          Because we are using 8 bpp images with 256 levels,
 *          it is convenient to break each pixel into a
 *          16x16 sub-pixel grid, and count the number of
 *          overlapped sub-pixels.
 *
 *     It is interesting to note that the digital filter that
 *     implements the area mapping algorithm for rotation
 *     is identical to the digital filter used for linear
 *     interpolation when arbitrarily scaling grayscale images.
 *
 *     The advantage of area mapping over pixel sampling
 *     in grayscale rotation is that the former naturally
 *     blurs sharp edges ("anti-aliasing"), so that stair-step
 *     artifacts are not introduced.  The disadvantage is that
 *     it is significantly slower.
 *
 *     But it is still pretty fast.  With standard 3 GHz hardware,
 *     the anti-aliased (area-mapped) color rotation speed is
 *     about 15 million pixels/sec.
 *
 *     The function pixRotateAMColorFast() is about 10-20% faster
 *     than pixRotateAMColor().  The quality is slightly worse,
 *     and if you make many successive small rotations, with a
 *     total angle of 360 degrees, it has been noted that the
 *     center wanders -- it seems to be doing a 1 pixel translation
 *     in addition to the rotation.
 *
 *     Consider again the comparison of image quality between sampling
 *     and area mapping.  With sampling, sharp edges such as found in
 *     text images remain sharp.  However, sampling artifacts such as
 *     characters randomly bouncing up and down by one pixel, or
 *     one pixel horizontal shear lines going through a line of text
 *     (causing the characters to look like badly rendered italic),
 *     are highly visible.  It does not help to sample the source pixel
 *     with the largest area covering each dest pixel; the result has
 *     the same ugly sampling artifacts.
 *
 *     With area mapping, these annoying artifacts are avoided, but the
 *     blurring of edges makes small text a bit more difficult to read.
 *     However, if you are willing to do more computation, you can have
 *     the best of both worlds: no sampling artifacts and sharp edges.
 *     Use area mapping to avoid sampling issues, and follow it with
 *     unsharp masking.  Experiment with the sharpening parameters.
 *     I have found that a small amount of sharpening is sufficient to
 *     restore the sharp edges in text; e.g.,
 *         pix2 = pixUnsharpMasking(pix1, 1, 0.3);
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include /* required for sin and tan */ #include "allheaders.h" static void rotateAMColorLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval); static void rotateAMGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval); static void rotateAMColorCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval); static void rotateAMGrayCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval); static void rotateAMColorFastLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval); static const l_float32 MinAngleToRotate = 0.001f; /* radians; ~0.06 deg */ /*------------------------------------------------------------------* * Rotation about the center * *------------------------------------------------------------------*/ /*! * \brief pixRotateAM() * * \param[in] pixs 2, 4, 8 bpp gray or colormapped, or 32 bpp RGB * \param[in] angle radians; clockwise is positive * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates about image center.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Brings in either black or white pixels from the boundary.
 * 
*/ PIX * pixRotateAM(PIX *pixs, l_float32 angle, l_int32 incolor) { l_int32 d; l_uint32 fillval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual incoming color */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGray(pixt2, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColor(pixt2, angle, fillval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixRotateAMColor() * * \param[in] pixs 32 bpp * \param[in] angle radians; clockwise is positive * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates about image center.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Specify the color to be brought in from outside the image.
 * 
*/ PIX * pixRotateAMColor(PIX *pixs, l_float32 angle, l_uint32 colorval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval); if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixRotateAMGray(pix1, angle, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixRotateAMGray() * * \param[in] pixs 8 bpp * \param[in] angle radians; clockwise is positive * \param[in] grayval 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates about image center.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Specify the grayvalue to be brought in from outside the image.
 * 
*/ PIX * pixRotateAMGray(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval); return pixd; } static void rotateAMColorLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 16.f * sin(angle); cosa = 16.f * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 4); yp = ycen + (ypm >> 4); xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input colorval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ word00 = *(lines + xp); word10 = *(lines + xp + 1); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp + 1); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; composeRGBPixel(rval, gval, bval, lined + j); } } } static void rotateAMGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_int32 v00, v01, v10, v11; l_uint8 val; l_uint32 *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 16.f * sin(angle); cosa = 16.f * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 4); yp = ycen + (ypm >> 4); xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { SET_DATA_BYTE(lined, j, grayval); continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * Rotation about the UL corner * *------------------------------------------------------------------*/ /*! * \brief pixRotateAMCorner() * * \param[in] pixs 1, 2, 4, 8 bpp gray or colormapped, or 32 bpp RGB * \param[in] angle radians; clockwise is positive * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates about the UL corner of the image.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Brings in either black or white pixels from the boundary.
 * 
*/ PIX * pixRotateAMCorner(PIX *pixs, l_float32 angle, l_int32 incolor) { l_int32 d; l_uint32 fillval; PIX *pixt1, *pixt2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual incoming color */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGrayCorner(pixt2, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColorCorner(pixt2, angle, fillval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * \brief pixRotateAMColorCorner() * * \param[in] pixs * \param[in] angle radians; clockwise is positive * \param[in] fillval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates the image about the UL corner.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Specify the color to be brought in from outside the image.
 * 
*/ PIX * pixRotateAMColorCorner(PIX *pixs, l_float32 angle, l_uint32 fillval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval); if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixRotateAMGrayCorner(pix1, angle, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixRotateAMGrayCorner() * * \param[in] pixs * \param[in] angle radians; clockwise is positive * \param[in] grayval 0 to bring in BLACK, 255 for WHITE * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Rotates the image about the UL corner.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) Specify the grayvalue to be brought in from outside the image.
 * 
*/ PIX * pixRotateAMGrayCorner(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval); return pixd; } static void rotateAMColorCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm, xp, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines, *lined; l_float32 sina, cosa; wm2 = w - 2; hm2 = h - 2; sina = 16.f * sin(angle); cosa = 16.f * cos(angle); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { xpm = (l_int32)(j * cosa + i * sina); ypm = (l_int32)(i * cosa - j * sina); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input colorval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ word00 = *(lines + xp); word10 = *(lines + xp + 1); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp + 1); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; composeRGBPixel(rval, gval, bval, lined + j); } } } static void rotateAMGrayCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm, xp, yp, xf, yf; l_int32 v00, v01, v10, v11; l_uint8 val; l_uint32 *lines, *lined; l_float32 sina, cosa; wm2 = w - 2; hm2 = h - 2; sina = 16.f * sin(angle); cosa = 16.f * cos(angle); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { xpm = (l_int32)(j * cosa + i * sina); ypm = (l_int32)(i * cosa - j * sina); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { SET_DATA_BYTE(lined, j, grayval); continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * Fast RGB color rotation about center * *------------------------------------------------------------------*/ /*! * \brief pixRotateAMColorFast() * * \param[in] pixs * \param[in] angle radians; clockwise is positive * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This rotates a color image about the image center.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) It uses area mapping, dividing each pixel into
 *          16 subpixels.
 *      (4) It is about 10% to 20% faster than the more accurate linear
 *          interpolation function pixRotateAMColor(),
 *          which uses 256 subpixels.
 *      (5) For some reason it shifts the image center.
 *          No attempt is made to rotate the alpha component.
 * 
*/ PIX * pixRotateAMColorFast(PIX *pixs, l_float32 angle, l_uint32 colorval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", __func__, NULL); if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorFastLow(datad, w, h, wpld, datas, wpls, angle, colorval); return pixd; } /*! * \brief rotateAMColorFastLow() * * This is a special simplification of area mapping with division * of each pixel into 16 sub-pixels. The exact coefficients that * should be used are the same as for the 4x linear interpolation * scaling case, and are given there. I tried to approximate these * as weighted coefficients with a maximum sum of 4, which * allows us to do the arithmetic in parallel for the R, G and B * components in a 32 bit pixel. However, there are three reasons * for not doing that: * (1) the loss of accuracy in the parallel implementation * is visually significant * (2) the parallel implementation (described below) is slower * (3) the parallel implementation requires allocation of * a temporary color image * * There are 16 cases for the choice of the subpixel, and * for each, the mapping to the relevant source * pixels is as follows: * * subpixel src pixel weights * -------- ----------------- * 0 sp1 * 1 (3 * sp1 + sp2) / 4 * 2 (sp1 + sp2) / 2 * 3 (sp1 + 3 * sp2) / 4 * 4 (3 * sp1 + sp3) / 4 * 5 (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16 * 6 (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8 * 7 (3 * sp1 + 9 * sp2 + sp3 + 3 * sp4) / 16 * 8 (sp1 + sp3) / 2 * 9 (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8 * 10 (sp1 + sp2 + sp3 + sp4) / 4 * 11 (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8 * 12 (sp1 + 3 * sp3) / 4 * 13 (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16 * 14 (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8 * 15 (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16 * * Another way to visualize this is to consider the area mapping * (or linear interpolation) coefficients for the pixel sp1. * Expressed in fourths, they can be written as asymmetric matrix: * * 4 3 2 1 * 3 2.25 1.5 0.75 * 2 1.5 1 0.5 * 1 0.75 0.5 0.25 * * The coefficients for the three neighboring pixels can be * similarly written. * * This is implemented here, where, for each color component, * we inline its extraction from each participating word, * construct the linear combination, and combine the results * into the destination 32 bit RGB pixel, using the appropriate shifts. * * It is interesting to note that an alternative method, where * we do the arithmetic on the 32 bit pixels directly (after * shifting the components so they won't overflow into each other) * is significantly inferior. Because we have only 8 bits for * internal overflows, which can be distributed as 2, 3, 3, it * is impossible to add these with the correct linear * interpolation coefficients, which require a sum of up to 16. * Rounding off to a sum of 4 causes appreciable visual artifacts * in the rotated image. The code for the inferior method * can be found in prog/rotatefastalt.c, for reference. */ static void rotateAMColorFastLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_uint32 word1, word2, word3, word4, red, blue, green; l_uint32 *pword, *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 4.f * sin(angle); cosa = 4.f * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 2); yp = ycen + (ypm >> 2); xf = xpm & 0x03; yf = ypm & 0x03; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; pword = lines + xp; switch (xf + 4 * yf) { case 0: *(lined + j) = *pword; break; case 1: word1 = *pword; word2 = *(pword + 1); red = 3 * (word1 >> 24) + (word2 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 2: word1 = *pword; word2 = *(pword + 1); red = (word1 >> 24) + (word2 >> 24); green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff); *(lined + j) = ((red << 23) & 0xff000000) | ((green << 15) & 0x00ff0000) | ((blue << 7) & 0x0000ff00); break; case 3: word1 = *pword; word2 = *(pword + 1); red = (word1 >> 24) + 3 * (word2 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 4: word1 = *pword; word3 = *(pword + wpls); red = 3 * (word1 >> 24) + (word3 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 5: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 9 * (word1 >> 24) + 3 * (word2 >> 24) + 3 * (word3 >> 24) + (word4 >> 24); green = 9 * ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 9 * ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 6: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + 3 * (word2 >> 24) + (word3 >> 24) + (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 7: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + 9 * (word2 >> 24) + (word3 >> 24) + 3 * (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + 9 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + 9 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 8: word1 = *pword; word3 = *(pword + wpls); red = (word1 >> 24) + (word3 >> 24); green = ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff); *(lined + j) = ((red << 23) & 0xff000000) | ((green << 15) & 0x00ff0000) | ((blue << 7) & 0x0000ff00); break; case 9: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + (word2 >> 24) + 3 * (word3 >> 24) + (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 10: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + (word2 >> 24) + (word3 >> 24) + (word4 >> 24); green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 11: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + 3 * (word2 >> 24) + (word3 >> 24) + 3 * (word4 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 12: word1 = *pword; word3 = *(pword + wpls); red = (word1 >> 24) + 3 * (word3 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 13: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + (word2 >> 24) + 9 * (word3 >> 24) + 3 * (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + 9 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = 3 *((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 9 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 14: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + (word2 >> 24) + 3 * (word3 >> 24) + 3 * (word4 >> 24); green = ((word1 >> 16) & 0xff) +((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 15: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + 3 * (word2 >> 24) + 3 * (word3 >> 24) + 9 * (word4 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + 9 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + 9 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; default: lept_stderr("shouldn't get here\n"); break; } } } } leptonica-1.86.0/src/rotateorth.c000066400000000000000000000567101506303110300167130ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rotateorth.c *
 *
 *      Top-level rotation by multiples of 90 degrees
 *            PIX             *pixRotateOrth()
 *
 *      180-degree rotation
 *            PIX             *pixRotate180()
 *
 *      90-degree rotation (both directions)
 *            PIX             *pixRotate90()
 *
 *      Left-right flip
 *            PIX             *pixFlipLR()
 *
 *      Top-bottom flip
 *            PIX             *pixFlipTB()
 *
 *      Byte reverse tables
 *            static l_uint8  *makeReverseByteTab1()
 *            static l_uint8  *makeReverseByteTab2()
 *            static l_uint8  *makeReverseByteTab4()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_uint8 *makeReverseByteTab1(void); static l_uint8 *makeReverseByteTab2(void); static l_uint8 *makeReverseByteTab4(void); /*------------------------------------------------------------------* * Top-level rotation by multiples of 90 degrees * *------------------------------------------------------------------*/ /*! * \brief pixRotateOrth() * * \param[in] pixs all depths * \param[in] quads 0-3; number of 90 degree cw rotations * \return pixd, or NULL on error */ PIX * pixRotateOrth(PIX *pixs, l_int32 quads) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (quads < 0 || quads > 3) return (PIX *)ERROR_PTR("quads not in {0,1,2,3}", __func__, NULL); if (quads == 0) return pixCopy(NULL, pixs); else if (quads == 1) return pixRotate90(pixs, 1); else if (quads == 2) return pixRotate180(NULL, pixs); else /* quads == 3 */ return pixRotate90(pixs, -1); } /*------------------------------------------------------------------* * 180 degree rotation * *------------------------------------------------------------------*/ /*! * \brief pixRotate180() * * \param[in] pixd [optional]; can be null, equal to pixs, * or different from pixs * \param[in] pixs all depths * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does a 180 rotation of the image about the center,
 *          which is equivalent to a left-right flip about a vertical
 *          line through the image center, followed by a top-bottom
 *          flip about a horizontal line through the image center.
 *      (2) There are 3 cases for input:
 *          (a) pixd == null (creates a new pixd)
 *          (b) pixd == pixs (in-place operation)
 *          (c) pixd != pixs (existing pixd)
 *      (3) For clarity, use these three patterns, respectively:
 *          (a) pixd = pixRotate180(NULL, pixs);
 *          (b) pixRotate180(pixs, pixs);
 *          (c) pixRotate180(pixd, pixs);
 * 
*/ PIX * pixRotate180(PIX *pixd, PIX *pixs) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", __func__, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixFlipLR(pixd, pixd); pixFlipTB(pixd, pixd); return pixd; } /*------------------------------------------------------------------* * 90 degree rotation * *------------------------------------------------------------------*/ /*! * \brief pixRotate90() * * \param[in] pixs all depths * \param[in] direction clockwise = 1, counterclockwise = -1 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does a 90 degree rotation of the image about the center,
 *          either cw or ccw, returning a new pix.
 *      (2) The direction must be either 1 (cw) or -1 (ccw).
 * 
*/ PIX * pixRotate90(PIX *pixs, l_int32 direction) { l_int32 wd, hd, d, wpls, wpld; l_int32 i, j, k, m, iend, nswords; l_uint32 val, word; l_uint32 *lines, *datas, *lined, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &hd, &wd, &d); /* note: reversed */ if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", __func__, NULL); if (direction != 1 && direction != -1) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopySpp(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (direction == 1) { /* clockwise */ switch (d) { case 32: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { lined[j] = lines[i]; lines -= wpls; } } break; case 16: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_TWO_BYTES(lines, i))) SET_DATA_TWO_BYTES(lined, j, val); lines -= wpls; } } break; case 8: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_BYTE(lines, i))) SET_DATA_BYTE(lined, j, val); lines -= wpls; } } break; case 4: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_QBIT(lines, i))) SET_DATA_QBIT(lined, j, val); lines -= wpls; } } break; case 2: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_DIBIT(lines, i))) SET_DATA_DIBIT(lined, j, val); lines -= wpls; } } break; case 1: nswords = hd / 32; for (j = 0; j < wd; j++) { lined = datad; lines = datas + (wd - 1 - j) * wpls; for (k = 0; k < nswords; k++) { word = lines[k]; if (!word) { lined += 32 * wpld; continue; } else { iend = 32 * (k + 1); for (m = 0, i = 32 * k; i < iend; i++, m++) { if ((word << m) & 0x80000000) SET_DATA_BIT(lined, j); lined += wpld; } } } for (i = 32 * nswords; i < hd; i++) { if (GET_DATA_BIT(lines, i)) SET_DATA_BIT(lined, j); lined += wpld; } } break; default: pixDestroy(&pixd); L_ERROR("illegal depth: %d\n", __func__, d); break; } } else { /* direction counter-clockwise */ switch (d) { case 32: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { lined[j] = lines[hd - 1 - i]; lines += wpls; } } break; case 16: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_TWO_BYTES(lines, hd - 1 - i))) SET_DATA_TWO_BYTES(lined, j, val); lines += wpls; } } break; case 8: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_BYTE(lines, hd - 1 - i))) SET_DATA_BYTE(lined, j, val); lines += wpls; } } break; case 4: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_QBIT(lines, hd - 1 - i))) SET_DATA_QBIT(lined, j, val); lines += wpls; } } break; case 2: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_DIBIT(lines, hd - 1 - i))) SET_DATA_DIBIT(lined, j, val); lines += wpls; } } break; case 1: nswords = hd / 32; for (j = 0; j < wd; j++) { lined = datad + (hd - 1) * wpld; lines = datas + (wd - 1 - j) * wpls; for (k = 0; k < nswords; k++) { word = lines[k]; if (!word) { lined -= 32 * wpld; continue; } else { iend = 32 * (k + 1); for (m = 0, i = 32 * k; i < iend; i++, m++) { if ((word << m) & 0x80000000) SET_DATA_BIT(lined, wd - 1 - j); lined -= wpld; } } } for (i = 32 * nswords; i < hd; i++) { if (GET_DATA_BIT(lines, i)) SET_DATA_BIT(lined, wd - 1 - j); lined -= wpld; } } break; default: pixDestroy(&pixd); L_ERROR("illegal depth: %d\n", __func__, d); break; } } return pixd; } /*------------------------------------------------------------------* * Left-right flip * *------------------------------------------------------------------*/ /*! * \brief pixFlipLR() * * \param[in] pixd [optional]; can be null, equal to pixs, * or different from pixs * \param[in] pixs all depths * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does a left-right flip of the image, which is
 *          equivalent to a rotation out of the plane about a
 *          vertical line through the image center.
 *      (2) There are 3 cases for input:
 *          (a) pixd == null (creates a new pixd)
 *          (b) pixd == pixs (in-place operation)
 *          (c) pixd != pixs (existing pixd)
 *      (3) For clarity, use these three patterns, respectively:
 *          (a) pixd = pixFlipLR(NULL, pixs);
 *          (b) pixFlipLR(pixs, pixs);
 *          (c) pixFlipLR(pixd, pixs);
 *      (4) If an existing pixd is not the same size as pixs, the
 *          image data will be reallocated.
 *      (5) The pixel access routines allow a trivial implementation.
 *          However, for d < 8, it is more efficient to right-justify
 *          each line to a 32-bit boundary and then extract bytes and
 *          do pixel reversing.   In those cases, as in the 180 degree
 *          rotation, we right-shift the data (if necessary) to
 *          right-justify on the 32 bit boundary, and then read the
 *          bytes off each raster line in reverse order, reversing
 *          the pixels in each byte using a table.  These functions
 *          for 1, 2 and 4 bpp were tested against the "trivial"
 *          version (shown here for 4 bpp):
 *              for (i = 0; i < h; i++) {
 *                  line = data + i * wpl;
 *                  memcpy(buffer, line, bpl);
 *                    for (j = 0; j < w; j++) {
 *                      val = GET_DATA_QBIT(buffer, w - 1 - j);
 *                        SET_DATA_QBIT(line, j, val);
 *                  }
 *              }
 * 
*/ PIX * pixFlipLR(PIX *pixd, PIX *pixs) { l_uint8 *tab; l_int32 w, h, d, wpl; l_int32 extra, shift, databpl, bpl, i, j; l_uint32 val; l_uint32 *line, *data, *buffer; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", __func__, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); switch (d) { case 1: tab = makeReverseByteTab1(); break; case 2: tab = makeReverseByteTab2(); break; case 4: tab = makeReverseByteTab4(); break; default: tab = NULL; break; } /* Possibly inplace assigning return val, so on failure return pixd */ if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl, sizeof(l_uint32))) == NULL) { if (tab) LEPT_FREE(tab); return (PIX *)ERROR_PTR("buffer not made", __func__, pixd); } bpl = 4 * wpl; switch (d) { case 32: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) line[j] = buffer[w - 1 - j]; } break; case 16: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(buffer, w - 1 - j); SET_DATA_TWO_BYTES(line, j, val); } } break; case 8: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) { val = GET_DATA_BYTE(buffer, w - 1 - j); SET_DATA_BYTE(line, j, val); } } break; case 4: extra = (w * d) & 31; if (extra) shift = 8 - extra / 4; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 1) / 2; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; case 2: extra = (w * d) & 31; if (extra) shift = 16 - extra / 2; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 3) / 4; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; case 1: extra = (w * d) & 31; if (extra) shift = 32 - extra; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 7) / 8; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; default: pixDestroy(&pixd); L_ERROR("illegal depth: %d\n", __func__, d); break; } LEPT_FREE(buffer); if (tab) LEPT_FREE(tab); return pixd; } /*------------------------------------------------------------------* * Top-bottom flip * *------------------------------------------------------------------*/ /*! * \brief pixFlipTB() * * \param[in] pixd [optional]; can be null, equal to pixs, * or different from pixs * \param[in] pixs all depths * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This does a top-bottom flip of the image, which is
 *          equivalent to a rotation out of the plane about a
 *          horizontal line through the image center.
 *      (2) There are 3 cases for input:
 *          (a) pixd == null (creates a new pixd)
 *          (b) pixd == pixs (in-place operation)
 *          (c) pixd != pixs (existing pixd)
 *      (3) For clarity, use these three patterns, respectively:
 *          (a) pixd = pixFlipTB(NULL, pixs);
 *          (b) pixFlipTB(pixs, pixs);
 *          (c) pixFlipTB(pixd, pixs);
 *      (4) If an existing pixd is not the same size as pixs, the
 *          image data will be reallocated.
 *      (5) This is simple and fast.  We use the memcpy function
 *          to do all the work on aligned data, regardless of pixel
 *          depth.
 * 
*/ PIX * pixFlipTB(PIX *pixd, PIX *pixs) { l_int32 h, d, wpl, i, k, h2, bpl; l_uint32 *linet, *lineb; l_uint32 *data, *buffer; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, NULL, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", __func__, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("buffer not made", __func__, pixd); h2 = h / 2; bpl = 4 * wpl; for (i = 0, k = h - 1; i < h2; i++, k--) { linet = data + i * wpl; lineb = data + k * wpl; memcpy(buffer, linet, bpl); memcpy(linet, lineb, bpl); memcpy(lineb, buffer, bpl); } LEPT_FREE(buffer); return pixd; } /*------------------------------------------------------------------* * Static byte reverse tables * *------------------------------------------------------------------*/ /*! * \brief makeReverseByteTab1() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of eight 1-bit pixels. */ static l_uint8 * makeReverseByteTab1(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); for (i = 0; i < 256; i++) tab[i] = ((0x80 & i) >> 7) | ((0x40 & i) >> 5) | ((0x20 & i) >> 3) | ((0x10 & i) >> 1) | ((0x08 & i) << 1) | ((0x04 & i) << 3) | ((0x02 & i) << 5) | ((0x01 & i) << 7); return tab; } /*! * \brief makeReverseByteTab2() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of four 2-bit pixels. */ static l_uint8 * makeReverseByteTab2(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); for (i = 0; i < 256; i++) tab[i] = ((0xc0 & i) >> 6) | ((0x30 & i) >> 2) | ((0x0c & i) << 2) | ((0x03 & i) << 6); return tab; } /*! * \brief makeReverseByteTab4() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of two 4-bit pixels. */ static l_uint8 * makeReverseByteTab4(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); for (i = 0; i < 256; i++) tab[i] = ((0xf0 & i) >> 4) | ((0x0f & i) << 4); return tab; } leptonica-1.86.0/src/rotateshear.c000066400000000000000000000474061506303110300170430ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file rotateshear.c *
 *
 *      Shear rotation about arbitrary point using 2 and 3 shears
 *
 *              PIX      *pixRotateShear()
 *              PIX      *pixRotate2Shear()
 *              PIX      *pixRotate3Shear()
 *
 *      Shear rotation in-place about arbitrary point using 3 shears
 *              l_int32   pixRotateShearIP()
 *
 *      Shear rotation around the image center
 *              PIX      *pixRotateShearCenter()    (2 or 3 shears)
 *              l_int32   pixRotateShearCenterIP()  (3 shears)
 *
 *  Rotation is measured in radians; clockwise rotations are positive.
 *
 *  Rotation by shear works on images of any depth,
 *  including 8 bpp color paletted images and 32 bpp
 *  rgb images.  It works by translating each src pixel
 *  value to the appropriate pixel in the rotated dest.
 *  For 8 bpp grayscale images, it is about 10-15x faster
 *  than rotation by area-mapping.
 *
 *  This speed and flexibility comes at the following cost,
 *  relative to area-mapped rotation:
 *
 *    ~  Jaggies are created on edges of straight lines
 *
 *    ~  For large angles, where you must use 3 shears,
 *       there is some extra clipping from the shears.
 *
 *  For small angles, typically less than 0.05 radians,
 *  rotation can be done with 2 orthogonal shears.
 *  Two such continuous shears (as opposed to the discrete
 *  shears on a pixel lattice that we have here) give
 *  a rotated image that has a distortion in the lengths
 *  of the two rotated and still-perpendicular axes.  The
 *  length/width ratio changes by a fraction
 *
 *       0.5 * (angle)**2
 *
 *  For an angle of 0.05 radians, this is about 1 part in
 *  a thousand.  This distortion is absent when you use
 *  3 continuous shears with the correct angles (see below).
 *
 *  Of course, the image is on a discrete pixel lattice.
 *  Rotation by shear gives an approximation to a continuous
 *  rotation, leaving pixel jaggies at sharp boundaries.
 *  For very small rotations, rotating from a corner gives
 *  better sensitivity than rotating from the image center.
 *  Here's why.  Define the shear "center" to be the line such
 *  that the image is sheared in opposite directions on
 *  each side of and parallel to the line.  For small
 *  rotations there is a "dead space" on each side of the
 *  shear center of width equal to half the shear angle,
 *  in radians.  Thus, when the image is sheared about the center,
 *  the dead space width equals the shear angle, but when
 *  the image is sheared from a corner, the dead space
 *  width is only half the shear angle.
 *
 *  All horizontal and vertical shears are implemented by
 *  rasterop.  The in-place rotation uses special in-place
 *  shears that copy rows sideways or columns vertically
 *  without buffering, and then rewrite old pixels that are
 *  no longer covered by sheared pixels.  For that rewriting,
 *  you have the choice of using white or black pixels.
 *  When not in-place, the new pix is initialized with white or black
 *  pixels by pixSetBlackOrWhite(), which also works for cmapped pix.
 *  But for in-place, this initialization is not possible, so
 *  in-place shear operations on cmapped pix are not allowed.
 *
 *  Rotation by shear is fast and depth-independent.  However, it
 *  does not work well for large rotation angles.  In fact, for
 *  rotation angles greater than about 7 degrees, more pixels are
 *  lost at the edges than when using pixRotationBySampling(), which
 *  only loses pixels because they are rotated out of the image.
 *  For larger rotations, use pixRotationBySampling() or, for
 *  more accuracy when d > 1 bpp, pixRotateAM().
 *
 *  For small angles, when comparing the quality of rotation by
 *  sampling and by shear, you can see that rotation by sampling
 *  is slightly more accurate.  However, the difference in
 *  accuracy of rotation by sampling when compared to 3-shear and
 *  (for angles less than 2 degrees, when compared to 2-shear) is
 *  less than 1 pixel at any point.  For very small angles, rotation by
 *  sampling is much slower than rotation by shear.  The speed difference
 *  depends on the pixel depth and the rotation angle.  Rotation
 *  by shear is very fast for small angles and for small depth (esp. 1 bpp).
 *  Rotation by sampling speed is independent of angle and relatively
 *  more efficient for 8 and 32 bpp images.  Here are some timings
 *  for the ratio of rotation times: (time for sampling)/ (time for shear)
  *
 *       depth (bpp)       ratio (2 deg)       ratio (10 deg)
 *       -----------------------------------------------------
 *          1                  25                  6
 *          8                   5                  2.6
 *          32                  1.6                1.0
 *
 *  In summary:
 *    * For d == 1 and small angles, use rotation by shear.  By default
 *      this will use 2-shear rotations, because 3-shears cause more
 *      visible artifacts in straight lines and, for small angles, the
 *      distortion in asperity ratio is small.
 *    * For d > 1, shear is faster than sampling, which is faster than
 *      area mapping.  However, area mapping gives the best results.
 *  These results are used in selecting the rotation methods in
 *  pixRotateShear().
 *
 *  There has been some work on what is called a "quasishear
 *  rotation" ("The Quasi-Shear Rotation, Eric Andres,
 *  DGCI 1996, pp. 307-314).  I believe they use a 3-shear
 *  approximation to the continuous rotation, exactly as
 *  we do here.  The approximation is due to being on
 *  a square pixel lattice.  They also use integers to specify
 *  the rotation angle and center offset, but that makes
 *  little sense on a machine where you have a few GFLOPS
 *  and only a few hundred floating point operations to do (!)
 *  They also allow subpixel specification of the center of
 *  rotation, which I haven't bothered with, and claim that
 *  better results are possible if each of the 4 quadrants is
 *  handled separately.
 *
 *  But the bottom line is that you are going to see shear lines when
 *  you rotate 1 bpp images.  Although the 3-shear rotation is
 *  mathematically exact in the limit of infinitesimal pixels, artifacts
 *  will be evident in real images.  One might imagine using dithering
 *  to break up the horizontal and vertical shear lines, but this
 *  is hard with block shears, where you need to dither on the block
 *  boundaries.  Dithering (by accumulation of 'error') with sampling
 *  makes more sense, but I haven't tried to do this.  There is only
 *  so much you can do with 1 bpp images!
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Angle limits: * angle < MinAngleToRotate ==> clone * angle > MaxTwoShearAngle ==> warning for 2-angle shears * angle > MaxThreeShearAngle ==> warning for 3-angle shears * angle > MaxShearAngle ==> error */ static const l_float32 MinAngleToRotate = 0.001f; /* radians; ~0.06 deg */ static const l_float32 MaxTwoShearAngle = 0.06f; /* radians; ~3 deg */ static const l_float32 MaxThreeShearAngle = 0.35f; /* radians; ~20 deg */ static const l_float32 MaxShearAngle = 0.50f; /* radians; ~29 deg */ /*------------------------------------------------------------------* * Rotations about an arbitrary point * *------------------------------------------------------------------*/ /*! * \brief pixRotateShear() * * \param[in] pixs any depth; cmap ok * \param[in] xcen x value for which there is no horizontal shear * \param[in] ycen y value for which there is no vertical shear * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) This rotates an image about the given point, using
 *          either 2 or 3 shears.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) This brings in 'incolor' pixels from outside the image.
 *      (4) For rotation angles larger than about 0.35 radians, we issue
 *          a warning because you should probably be using another method
 *          (either sampling or area mapping)
 * 
*/ PIX * pixRotateShear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { if (!pixs) return (PIX *)(PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (L_ABS(angle) > MaxShearAngle) { L_ERROR("%6.2f radians; too large for shear rotation\n", __func__, L_ABS(angle)); return NULL; } if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); if (L_ABS(angle) <= MaxTwoShearAngle) return pixRotate2Shear(pixs, xcen, ycen, angle, incolor); else return pixRotate3Shear(pixs, xcen, ycen, angle, incolor); } /*! * \brief pixRotate2Shear() * * \param[in] pixs any depth; cmap ok * \param[in] xcen, ycen center of rotation * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) This rotates the image about the given point, using the 2-shear
 *          method.  It should only be used for angles no larger than
 *          MaxTwoShearAngle.  For larger angles, a warning is issued.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) 2-shear rotation by a specified angle is equivalent
 *          to the sequential transformations
 *             x' = x + tan(angle) * (y - ycen)     for x-shear
 *             y' = y + tan(angle) * (x - xcen)     for y-shear
 *      (4) Computation of tan(angle) is performed within the shear operation.
 *      (5) This brings in 'incolor' pixels from outside the image.
 *      (6) If the image has an alpha layer, it is rotated separately by
 *          two shears.
 * 
*/ PIX * pixRotate2Shear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (L_ABS(angle) > MaxShearAngle) { L_ERROR("%6.2f radians; too large for shear rotation\n", __func__, L_ABS(angle)); return NULL; } if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); if (L_ABS(angle) > MaxTwoShearAngle) L_WARNING("%6.2f radians; large angle for 2-shear rotation\n", __func__, L_ABS(angle)); if ((pix1 = pixHShear(NULL, pixs, ycen, angle, incolor)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); pixd = pixVShear(NULL, pix1, xcen, angle, incolor); pixDestroy(&pix1); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* L_BRING_IN_WHITE brings in opaque for the alpha component */ pix2 = pixRotate2Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * \brief pixRotate3Shear() * * \param[in] pixs any depth; cmap ok * \param[in] xcen, ycen center of rotation * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) This rotates the image about the given point, using the 3-shear
 *          method.  It should only be used for angles smaller than
 *          MaxThreeShearAngle.  For larger angles, a warning is issued.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) 3-shear rotation by a specified angle is equivalent
 *          to the sequential transformations
 *            y' = y + tan(angle/2) * (x - xcen)     for first y-shear
 *            x' = x + sin(angle) * (y - ycen)       for x-shear
 *            y' = y + tan(angle/2) * (x - xcen)     for second y-shear
 *      (4) Computation of tan(angle) is performed in the shear operations.
 *      (5) This brings in 'incolor' pixels from outside the image.
 *      (6) If the image has an alpha layer, it is rotated separately by
 *          two shears.
 *      (7) The algorithm was published by Alan Paeth: "A Fast Algorithm
 *          for General Raster Rotation," Graphics Interface '86,
 *          pp. 77-81, May 1986.  A description of the method, along with
 *          an implementation, can be found in Graphics Gems, p. 179,
 *          edited by Andrew Glassner, published by Academic Press, 1990.
 * 
*/ PIX * pixRotate3Shear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_float32 hangle; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (L_ABS(angle) > MaxShearAngle) { L_ERROR("%6.2f radians; too large for shear rotation\n", __func__, L_ABS(angle)); return NULL; } if (L_ABS(angle) < MinAngleToRotate) return pixClone(pixs); if (L_ABS(angle) > MaxThreeShearAngle) { L_WARNING("%6.2f radians; large angle for 3-shear rotation\n", __func__, L_ABS(angle)); } hangle = atan(sin(angle)); if ((pixd = pixVShear(NULL, pixs, xcen, angle / 2.f, incolor)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); if ((pix1 = pixHShear(NULL, pixd, ycen, hangle, incolor)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); } pixVShear(pixd, pix1, xcen, angle / 2.f, incolor); pixDestroy(&pix1); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* L_BRING_IN_WHITE brings in opaque for the alpha component */ pix2 = pixRotate3Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*------------------------------------------------------------------* * Rotations in-place about an arbitrary point * *------------------------------------------------------------------*/ /*! * \brief pixRotateShearIP() * * \param[in] pixs any depth; no cmap * \param[in] xcen, ycen center of rotation * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This does an in-place rotation of the image about the
 *          specified point, using the 3-shear method.  It should only
 *          be used for angles smaller than MaxThreeShearAngle.
 *          For larger angles, a warning is issued.
 *      (2) A positive angle gives a clockwise rotation.
 *      (3) 3-shear rotation by a specified angle is equivalent
 *          to the sequential transformations
 *            y' = y + tan(angle/2) * (x - xcen)      for first y-shear
 *            x' = x + sin(angle) * (y - ycen)        for x-shear
 *            y' = y + tan(angle/2) * (x - xcen)      for second y-shear
 *      (4) Computation of tan(angle) is performed in the shear operations.
 *      (5) This brings in 'incolor' pixels from outside the image.
 *      (6) The pix cannot be colormapped, because the in-place operation
 *          only blits in 0 or 1 bits, not an arbitrary colormap index.
 * 
*/ l_ok pixRotateShearIP(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_float32 hangle; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", __func__, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs is colormapped", __func__, 1); if (angle == 0.0) return 0; if (L_ABS(angle) > MaxThreeShearAngle) { L_WARNING("%6.2f radians; large angle for in-place 3-shear rotation\n", __func__, L_ABS(angle)); } hangle = atan(sin(angle)); pixHShearIP(pixs, ycen, angle / 2.f, incolor); pixVShearIP(pixs, xcen, hangle, incolor); pixHShearIP(pixs, ycen, angle / 2.f, incolor); return 0; } /*------------------------------------------------------------------* * Rotations about the image center * *------------------------------------------------------------------*/ /*! * \brief pixRotateShearCenter() * * \param[in] pixs any depth; cmap ok * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return pixd, or NULL on error */ PIX * pixRotateShearCenter(PIX *pixs, l_float32 angle, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); return pixRotateShear(pixs, pixGetWidth(pixs) / 2, pixGetHeight(pixs) / 2, angle, incolor); } /*! * \brief pixRotateShearCenterIP() * * \param[in] pixs any depth; no cmap * \param[in] angle radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK * \return 0 if OK, 1 on error */ l_ok pixRotateShearCenterIP(PIX *pixs, l_float32 angle, l_int32 incolor) { if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); return pixRotateShearIP(pixs, pixGetWidth(pixs) / 2, pixGetHeight(pixs) / 2, angle, incolor); } leptonica-1.86.0/src/runlength.c000066400000000000000000000627031506303110300165250ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file runlength.c *
 *
 *     Label pixels by membership in runs
 *           PIX         *pixStrokeWidthTransform()
 *           static PIX  *pixFindMinRunsOrthogonal()
 *           PIX         *pixRunlengthTransform()
 *
 *     Find runs along horizontal and vertical lines
 *           l_int32      pixFindHorizontalRuns()
 *           l_int32      pixFindVerticalRuns()
 *
 *     Find max runs along horizontal and vertical lines
 *           l_int32      pixFindMaxRuns()
 *           l_int32      pixFindMaxHorizontalRunOnLine()
 *           l_int32      pixFindMaxVerticalRunOnLine()
 *
 *     Compute runlength-to-membership transform on a line
 *           l_int32      runlengthMembershipOnLine()
 *
 *     Make byte position LUT
 *           l_int32      makeMSBitLocTab()
 *
 *  Here we're handling runs of either black or white pixels on 1 bpp
 *  images.  The directions of the runs in the stroke width transform
 *  are selectable from given sets of angles.  Most of the other runs
 *  are oriented either horizontally along the raster lines or
 *  vertically along pixel columns.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" static PIX *pixFindMinRunsOrthogonal(PIX *pixs, l_float32 angle, l_int32 depth); /*-----------------------------------------------------------------------* * Label pixels by membership in runs * *-----------------------------------------------------------------------*/ /*! * \brief pixStrokeWidthTransform() * * \param[in] pixs 1 bpp * \param[in] color 0 for white runs, 1 for black runs * \param[in] depth of pixd: 8 or 16 bpp * \param[in] nangles 2, 4, 6 or 8 * \return pixd 8 or 16 bpp, or NULL on error * *
 * Notes:
 *      (1) The dest Pix is 8 or 16 bpp, with the pixel values
 *          equal to the stroke width in which it is a member.
 *          The values are clipped to the max pixel value if necessary.
 *      (2) %color determines if we're labelling white or black strokes.
 *      (3) A pixel that is not a member of the chosen color gets
 *          value 0; it belongs to a width of length 0 of the
 *          chosen color.
 *      (4) This chooses, for each dest pixel, the minimum of sets
 *          of runlengths through each pixel.  Here are the sets:
 *            nangles    increment          set
 *            -------    ---------    --------------------------------
 *               2          90       {0, 90}
 *               4          45       {0, 45, 90, 135}
 *               6          30       {0, 30, 60, 90, 120, 150}
 *               8          22.5     {0, 22.5, 45, 67.5, 90, 112.5, 135, 157.5}
 *      (5) Runtime scales linearly with (%nangles - 2).
 * 
*/ PIX * pixStrokeWidthTransform(PIX *pixs, l_int32 color, l_int32 depth, l_int32 nangles) { l_float32 angle, pi; PIX *pixh, *pixv, *pixt, *pixg1, *pixg2, *pixg3, *pixg4; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (depth != 8 && depth != 16) return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", __func__, NULL); if (nangles != 2 && nangles != 4 && nangles != 6 && nangles != 8) return (PIX *)ERROR_PTR("nangles not in {2,4,6,8}", __func__, NULL); /* Use fg runs for evaluation */ if (color == 0) pixt = pixInvert(NULL, pixs); else pixt = pixClone(pixs); /* Find min length at 0 and 90 degrees */ pixh = pixRunlengthTransform(pixt, 1, L_HORIZONTAL_RUNS, depth); pixv = pixRunlengthTransform(pixt, 1, L_VERTICAL_RUNS, depth); pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); pixDestroy(&pixh); pixDestroy(&pixv); pixg2 = pixg3 = pixg4 = NULL; pi = 3.1415926535f; if (nangles == 4 || nangles == 8) { /* Find min length at +45 and -45 degrees */ angle = pi / 4.0f; pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); } if (nangles == 6) { /* Find min length at +30 and -60 degrees */ angle = pi / 6.0f; pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); /* Find min length at +60 and -30 degrees */ angle = pi / 3.0f; pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); } if (nangles == 8) { /* Find min length at +22.5 and -67.5 degrees */ angle = pi / 8.0f; pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); /* Find min length at +67.5 and -22.5 degrees */ angle = 3.0 * pi / 8.0f; pixg4 = pixFindMinRunsOrthogonal(pixt, angle, depth); } pixDestroy(&pixt); if (nangles > 2) pixMinOrMax(pixg1, pixg1, pixg2, L_CHOOSE_MIN); if (nangles > 4) pixMinOrMax(pixg1, pixg1, pixg3, L_CHOOSE_MIN); if (nangles > 6) pixMinOrMax(pixg1, pixg1, pixg4, L_CHOOSE_MIN); pixDestroy(&pixg2); pixDestroy(&pixg3); pixDestroy(&pixg4); return pixg1; } /*! * \brief pixFindMinRunsOrthogonal() * * \param[in] pixs 1 bpp * \param[in] angle in radians * \param[in] depth of pixd: 8 or 16 bpp * \return pixd 8 or 16 bpp, or NULL on error * *
 * Notes:
 *      (1) This computes, for each fg pixel in pixs, the minimum of
 *          the runlengths going through that pixel in two orthogonal
 *          directions: at %angle and at (90 + %angle).
 *      (2) We use rotation by shear because the forward and backward
 *          rotations by the same angle are exact inverse operations.
 *          As a result, the nonzero pixels in pixd correspond exactly
 *          to the fg pixels in pixs.  This is not the case with
 *          sampled rotation, due to spatial quantization.  Nevertheless,
 *          the result suffers from lack of exact correspondence
 *          between original and rotated pixels, also due to spatial
 *          quantization, causing some boundary pixels to be
 *          shifted from bg to fg or v.v.
 * 
*/ static PIX * pixFindMinRunsOrthogonal(PIX *pixs, l_float32 angle, l_int32 depth) { l_int32 w, h, diag, xoff, yoff; PIX *pixb, *pixr, *pixh, *pixv, *pixg1, *pixg2, *pixd; BOX *box; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); /* Rasterop into the center of a sufficiently large image * so we don't lose pixels for any rotation angle. */ pixGetDimensions(pixs, &w, &h, NULL); diag = (l_int32)(sqrt((l_float64)(w * w + h * h)) + 2.5); xoff = (diag - w) / 2; yoff = (diag - h) / 2; pixb = pixCreate(diag, diag, 1); pixRasterop(pixb, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); /* Rotate about the 'center', get the min of orthogonal transforms, * rotate back, and crop the part corresponding to pixs. */ pixr = pixRotateShear(pixb, diag / 2, diag / 2, angle, L_BRING_IN_WHITE); pixh = pixRunlengthTransform(pixr, 1, L_HORIZONTAL_RUNS, depth); pixv = pixRunlengthTransform(pixr, 1, L_VERTICAL_RUNS, depth); pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); pixg2 = pixRotateShear(pixg1, diag / 2, diag / 2, -angle, L_BRING_IN_WHITE); box = boxCreate(xoff, yoff, w, h); pixd = pixClipRectangle(pixg2, box, NULL); pixDestroy(&pixb); pixDestroy(&pixr); pixDestroy(&pixh); pixDestroy(&pixv); pixDestroy(&pixg1); pixDestroy(&pixg2); boxDestroy(&box); return pixd; } /*! * \brief pixRunlengthTransform() * * \param[in] pixs 1 bpp * \param[in] color 0 for white runs, 1 for black runs * \param[in] direction L_HORIZONTAL_RUNS, L_VERTICAL_RUNS * \param[in] depth 8 or 16 bpp * \return pixd 8 or 16 bpp, or NULL on error * *
 * Notes:
 *      (1) The dest Pix is 8 or 16 bpp, with the pixel values
 *          equal to the runlength in which it is a member.
 *          The length is clipped to the max pixel value if necessary.
 *      (2) %color determines if we're labelling white or black runs.
 *      (3) A pixel that is not a member of the chosen color gets
 *          value 0; it belongs to a run of length 0 of the
 *          chosen color.
 *      (4) To convert for maximum dynamic range, either linear or
 *          log, use pixMaxDynamicRange().
 * 
*/ PIX * pixRunlengthTransform(PIX *pixs, l_int32 color, l_int32 direction, l_int32 depth) { l_int32 i, j, w, h, wpld, bufsize, maxsize, n; l_int32 *start, *end, *buffer; l_uint32 *datad, *lined; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (depth != 8 && depth != 16) return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_HORIZONTAL_RUNS) maxsize = 1 + w / 2; else if (direction == L_VERTICAL_RUNS) maxsize = 1 + h / 2; else return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); bufsize = L_MAX(w, h); if (bufsize > 1000000) { L_ERROR("largest image dimension = %d; too big\n", __func__, bufsize); return NULL; } if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); start = (l_int32 *)LEPT_CALLOC(maxsize, sizeof(l_int32)); end = (l_int32 *)LEPT_CALLOC(maxsize, sizeof(l_int32)); buffer = (l_int32 *)LEPT_CALLOC(bufsize, sizeof(l_int32)); /* Use fg runs for evaluation */ if (color == 0) pixt = pixInvert(NULL, pixs); else pixt = pixClone(pixs); if (direction == L_HORIZONTAL_RUNS) { for (i = 0; i < h; i++) { pixFindHorizontalRuns(pixt, i, start, end, &n); runlengthMembershipOnLine(buffer, w, depth, start, end, n); lined = datad + i * wpld; if (depth == 8) { for (j = 0; j < w; j++) SET_DATA_BYTE(lined, j, buffer[j]); } else { /* depth == 16 */ for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lined, j, buffer[j]); } } } else { /* L_VERTICAL_RUNS */ for (j = 0; j < w; j++) { pixFindVerticalRuns(pixt, j, start, end, &n); runlengthMembershipOnLine(buffer, h, depth, start, end, n); if (depth == 8) { for (i = 0; i < h; i++) { lined = datad + i * wpld; SET_DATA_BYTE(lined, j, buffer[i]); } } else { /* depth == 16 */ for (i = 0; i < h; i++) { lined = datad + i * wpld; SET_DATA_TWO_BYTES(lined, j, buffer[i]); } } } } pixDestroy(&pixt); LEPT_FREE(start); LEPT_FREE(end); LEPT_FREE(buffer); return pixd; } /*-----------------------------------------------------------------------* * Find runs along horizontal and vertical lines * *-----------------------------------------------------------------------*/ /*! * \brief pixFindHorizontalRuns() * * \param[in] pix 1 bpp * \param[in] y line to traverse * \param[in] xstart returns array of start positions for fg runs * \param[in] xend returns array of end positions for fg runs * \param[out] pn the number of runs found * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds foreground horizontal runs on a single scanline.
 *      (2) To find background runs, use pixInvert() before applying
 *          this function.
 *      (3) %xstart and %xend arrays are input.  They should be
 *          of size w/2 + 1 to insure that they can hold
 *          the maximum number of runs in the raster line.
 * 
*/ l_ok pixFindHorizontalRuns(PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn) { l_int32 inrun; /* boolean */ l_int32 index, w, h, d, j, wpl, val; l_uint32 *line; if (!pn) return ERROR_INT("&n not defined", __func__, 1); *pn = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return ERROR_INT("pix not 1 bpp", __func__, 1); if (y < 0 || y >= h) return ERROR_INT("y not in [0 ... h - 1]", __func__, 1); if (!xstart) return ERROR_INT("xstart not defined", __func__, 1); if (!xend) return ERROR_INT("xend not defined", __func__, 1); wpl = pixGetWpl(pix); line = pixGetData(pix) + y * wpl; inrun = FALSE; index = 0; for (j = 0; j < w; j++) { val = GET_DATA_BIT(line, j); if (!inrun) { if (val) { xstart[index] = j; inrun = TRUE; } } else { if (!val) { xend[index++] = j - 1; inrun = FALSE; } } } /* Finish last run if necessary */ if (inrun) xend[index++] = w - 1; *pn = index; return 0; } /*! * \brief pixFindVerticalRuns() * * \param[in] pix 1 bpp * \param[in] x line to traverse * \param[in] ystart returns array of start positions for fg runs * \param[in] yend returns array of end positions for fg runs * \param[out] pn the number of runs found * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds foreground vertical runs on a single scanline.
 *      (2) To find background runs, use pixInvert() before applying
 *          this function.
 *      (3) %ystart and %yend arrays are input.  They should be
 *          of size h/2 + 1 to insure that they can hold
 *          the maximum number of runs in the raster line.
 * 
*/ l_ok pixFindVerticalRuns(PIX *pix, l_int32 x, l_int32 *ystart, l_int32 *yend, l_int32 *pn) { l_int32 inrun; /* boolean */ l_int32 index, w, h, d, i, wpl, val; l_uint32 *data, *line; if (!pn) return ERROR_INT("&n not defined", __func__, 1); *pn = 0; if (!pix) return ERROR_INT("pix not defined", __func__, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return ERROR_INT("pix not 1 bpp", __func__, 1); if (x < 0 || x >= w) return ERROR_INT("x not in [0 ... w - 1]", __func__, 1); if (!ystart) return ERROR_INT("ystart not defined", __func__, 1); if (!yend) return ERROR_INT("yend not defined", __func__, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); inrun = FALSE; index = 0; for (i = 0; i < h; i++) { line = data + i * wpl; val = GET_DATA_BIT(line, x); if (!inrun) { if (val) { ystart[index] = i; inrun = TRUE; } } else { if (!val) { yend[index++] = i - 1; inrun = FALSE; } } } /* Finish last run if necessary */ if (inrun) yend[index++] = h - 1; *pn = index; return 0; } /*-----------------------------------------------------------------------* * Find max runs along horizontal and vertical lines * *-----------------------------------------------------------------------*/ /*! * \brief pixFindMaxRuns() * * \param[in] pix 1 bpp * \param[in] direction L_HORIZONTAL_RUNS or L_VERTICAL_RUNS * \param[out] pnastart [optional] start locations of longest runs * \return na of lengths of runs, or NULL on error * *
 * Notes:
 *      (1) This finds the longest foreground runs by row or column
 *      (2) To find background runs, use pixInvert() before applying
 *          this function.
 * 
*/ NUMA * pixFindMaxRuns(PIX *pix, l_int32 direction, NUMA **pnastart) { l_int32 w, h, i, start, size; NUMA *nasize; if (pnastart) *pnastart = NULL; if (direction != L_HORIZONTAL_RUNS && direction != L_VERTICAL_RUNS) return (NUMA *)ERROR_PTR("direction invalid", __func__, NULL); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", __func__, NULL); pixGetDimensions(pix, &w, &h, NULL); nasize = numaCreate(w); if (pnastart) *pnastart = numaCreate(w); if (direction == L_HORIZONTAL_RUNS) { for (i = 0; i < h; i++) { pixFindMaxHorizontalRunOnLine(pix, i, &start, &size); numaAddNumber(nasize, size); if (pnastart) numaAddNumber(*pnastart, start); } } else { /* vertical scans */ for (i = 0; i < w; i++) { pixFindMaxVerticalRunOnLine(pix, i, &start, &size); numaAddNumber(nasize, size); if (pnastart) numaAddNumber(*pnastart, start); } } return nasize; } /*! * \brief pixFindMaxHorizontalRunOnLine() * * \param[in] pix 1 bpp * \param[in] y line to traverse * \param[out] pxstart [optional] start position * \param[out] psize the size of the run * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds the longest foreground horizontal run on a scanline.
 *      (2) To find background runs, use pixInvert() before applying
 *          this function.
 * 
*/ l_ok pixFindMaxHorizontalRunOnLine(PIX *pix, l_int32 y, l_int32 *pxstart, l_int32 *psize) { l_int32 inrun; /* boolean */ l_int32 w, h, j, wpl, val, maxstart, maxsize, length, start; l_uint32 *line; if (pxstart) *pxstart = 0; if (!psize) return ERROR_INT("&size not defined", __func__, 1); *psize = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (y < 0 || y >= h) return ERROR_INT("y not in [0 ... h - 1]", __func__, 1); wpl = pixGetWpl(pix); line = pixGetData(pix) + y * wpl; inrun = FALSE; start = 0; maxstart = 0; maxsize = 0; for (j = 0; j < w; j++) { val = GET_DATA_BIT(line, j); if (!inrun) { if (val) { start = j; inrun = TRUE; } } else if (!val) { /* run just ended */ length = j - start; if (length > maxsize) { maxsize = length; maxstart = start; } inrun = FALSE; } } if (inrun) { /* a run has continued to the end of the row */ length = j - start; if (length > maxsize) { maxsize = length; maxstart = start; } } if (pxstart) *pxstart = maxstart; *psize = maxsize; return 0; } /*! * \brief pixFindMaxVerticalRunOnLine() * * \param[in] pix 1 bpp * \param[in] x column to traverse * \param[out] pystart [optional] start position * \param[out] psize the size of the run * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This finds the longest foreground vertical run on a scanline.
 *      (2) To find background runs, use pixInvert() before applying
 *          this function.
 * 
*/ l_ok pixFindMaxVerticalRunOnLine(PIX *pix, l_int32 x, l_int32 *pystart, l_int32 *psize) { l_int32 inrun; /* boolean */ l_int32 w, h, i, wpl, val, maxstart, maxsize, length, start; l_uint32 *data, *line; if (pystart) *pystart = 0; if (!psize) return ERROR_INT("&size not defined", __func__, 1); *psize = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", __func__, 1); pixGetDimensions(pix, &w, &h, NULL); if (x < 0 || x >= w) return ERROR_INT("x not in [0 ... w - 1]", __func__, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); inrun = FALSE; start = 0; maxstart = 0; maxsize = 0; for (i = 0; i < h; i++) { line = data + i * wpl; val = GET_DATA_BIT(line, x); if (!inrun) { if (val) { start = i; inrun = TRUE; } } else if (!val) { /* run just ended */ length = i - start; if (length > maxsize) { maxsize = length; maxstart = start; } inrun = FALSE; } } if (inrun) { /* a run has continued to the end of the column */ length = i - start; if (length > maxsize) { maxsize = length; maxstart = start; } } if (pystart) *pystart = maxstart; *psize = maxsize; return 0; } /*-----------------------------------------------------------------------* * Compute runlength-to-membership transform on a line * *-----------------------------------------------------------------------*/ /*! * \brief runlengthMembershipOnLine() * * \param[in] buffer into which full line of data is placed * \param[in] size full size of line; w or h * \param[in] depth 8 or 16 bpp * \param[in] start array of start positions for fg runs * \param[in] end array of end positions for fg runs * \param[in] n the number of runs * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Converts a set of runlengths into a buffer of
 *          runlength membership values.
 *      (2) Initialization of the array gives pixels that are
 *          not within a run the value 0.
 * 
*/ l_ok runlengthMembershipOnLine(l_int32 *buffer, l_int32 size, l_int32 depth, l_int32 *start, l_int32 *end, l_int32 n) { l_int32 i, j, first, last, diff, max; if (!buffer) return ERROR_INT("buffer not defined", __func__, 1); if (!start) return ERROR_INT("start not defined", __func__, 1); if (!end) return ERROR_INT("end not defined", __func__, 1); if (depth == 8) max = 0xff; else /* depth == 16 */ max = 0xffff; memset(buffer, 0, 4 * size); for (i = 0; i < n; i++) { first = start[i]; last = end[i]; diff = last - first + 1; diff = L_MIN(diff, max); for (j = first; j <= last; j++) buffer[j] = diff; } return 0; } /*-----------------------------------------------------------------------* * Make byte position LUT * *-----------------------------------------------------------------------*/ /*! * \brief makeMSBitLocTab() * * \param[in] bitval either 0 or 1 * \return table: for an input byte, the MS bit location, starting at 0 * with the MSBit in the byte, or NULL on error. * *
 * Notes:
 *      (1) If %bitval == 1, it finds the leftmost ON pixel in a byte;
 *          otherwise if %bitval == 0, it finds the leftmost OFF pixel.
 *      (2) If there are no pixels of the indicated color in the byte,
 *          this returns 8.
 * 
*/ l_int32 * makeMSBitLocTab(l_int32 bitval) { l_int32 i, j; l_int32 *tab; l_uint8 byte, mask; tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { byte = (l_uint8)i; if (bitval == 0) byte = ~byte; tab[i] = 8; mask = 0x80; for (j = 0; j < 8; j++) { if (byte & mask) { tab[i] = j; break; } mask >>= 1; } } return tab; } leptonica-1.86.0/src/sarray1.c000066400000000000000000001731741506303110300161060ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file sarray1.c *
 *
 *      Create/Destroy/Copy
 *          SARRAY    *sarrayCreate()
 *          SARRAY    *sarrayCreateInitialized()
 *          SARRAY    *sarrayCreateWordsFromString()
 *          SARRAY    *sarrayCreateLinesFromString()
 *          void      *sarrayDestroy()
 *          SARRAY    *sarrayCopy()
 *          SARRAY    *sarrayClone()
 *
 *      Add/Remove string
 *          l_int32    sarrayAddString()
 *          static l_int32  sarrayExtendArray()
 *          char      *sarrayRemoveString()
 *          l_int32    sarrayReplaceString()
 *          l_int32    sarrayClear()
 *
 *      Accessors
 *          l_int32    sarrayGetCount()
 *          char     **sarrayGetArray()
 *          char      *sarrayGetString()
 *
 *      Conversion back to string
 *          char      *sarrayToString()
 *          char      *sarrayToStringRange()
 *
 *      Concatenate strings uniformly within the sarray
 *          SARRAY    *sarrayConcatUniformly()
 *
 *      Join 2 sarrays
 *          l_int32    sarrayJoin()
 *          l_int32    sarrayAppendRange()
 *
 *      Pad an sarray to be the same size as another sarray
 *          l_int32    sarrayPadToSameSize()
 *
 *      Convert word sarray to (formatted) line sarray
 *          SARRAY    *sarrayConvertWordsToLines()
 *
 *      Split string on separator list
 *          SARRAY    *sarraySplitString()
 *
 *      Filter sarray
 *          SARRAY    *sarraySelectBySubstring()
 *          SARRAY    *sarraySelectRange()
 *          l_int32    sarrayParseRange()
 *
 *      Serialize for I/O
 *          SARRAY    *sarrayRead()
 *          SARRAY    *sarrayReadStream()
 *          SARRAY    *sarrayReadMem()
 *          l_int32    sarrayWrite()
 *          l_int32    sarrayWriteStream()
 *          l_int32    sarrayWriteStderr()
 *          l_int32    sarrayWriteMem()
 *          l_int32    sarrayAppend()
 *
 *      Directory filenames
 *          SARRAY    *getNumberedPathnamesInDirectory()
 *          SARRAY    *getSortedPathnamesInDirectory()
 *          SARRAY    *convertSortedToNumberedPathnames()
 *          SARRAY    *getFilenamesInDirectory()
 *
 *      These functions are important for efficient manipulation
 *      of string data, and they have found widespread use in
 *      leptonica.  For example:
 *         (1) to generate text files: e.g., PostScript and PDF
 *             wrappers around sets of images
 *         (2) to parse text files: e.g., extracting prototypes
 *             from the source to generate allheaders.h
 *         (3) to generate code for compilation: e.g., the fast
 *             dwa code for arbitrary structuring elements.
 *
 *      Comments on usage:
 *
 *          The user is responsible for correctly disposing of strings
 *          that have been extracted from sarrays.  In the following,
 *          "str_not_owned" means the returned handle does not own the string,
 *          and "str_owned" means the returned handle owns the string.
 *            - To extract a string from an Sarray in order to inspect it
 *              or to make a copy of it later, get a handle to it:
 *                  copyflag = L_NOCOPY.
 *              In this case, you must neither free the string nor put it
 *              directly in another array:
 *                 str-not-owned = sarrayGetString(sa, index, L_NOCOPY);
 *            - To extract a copy of a string from an Sarray, use:
 *                 str-owned = sarrayGetString(sa, index, L_COPY);
 *            ~ To insert a string that is in one array into another
 *              array (always leaving the first array intact), there are
 *              two options:
 *                 (1) use copyflag = L_COPY to make an immediate copy,
 *                     which you then add to the second array by insertion:
 *                       str-owned = sarrayGetString(sa, index, L_COPY);
 *                       sarrayAddString(sa, str-owned, L_INSERT);
 *                 (2) use copyflag = L_NOCOPY to get another handle to
 *                     the string; you then add a copy of it to the
 *                     second string array:
 *                       str-not-owned = sarrayGetString(sa, index, L_NOCOPY);
 *                       sarrayAddString(sa, str-not-owned, L_COPY).
 *              sarrayAddString() transfers ownership to the Sarray, so never
 *              use L_INSERT if the string is owned by another array.
 *
 *              In all cases, when you use copyflag = L_COPY to extract
 *              a string from an array, you must either free it
 *              or insert it in an array that will be freed later.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #ifndef _WIN32 #include /* unix only */ #include #include /* needed for realpath() */ #include /* needed for realpath() */ #endif /* ! _WIN32 */ #include "allheaders.h" #include "array_internal.h" static const l_uint32 MaxPtrArraySize = 50000000; /* 50 million */ static const l_int32 InitialPtrArraySize = 50; /*!< n'importe quoi */ /* Static functions */ static l_int32 sarrayExtendArray(SARRAY *sa); /*--------------------------------------------------------------------------* * String array create/destroy/copy/extend * *--------------------------------------------------------------------------*/ /*! * \brief sarrayCreate() * * \param[in] n size of string ptr array to be alloc'd; use 0 for default * \return sarray, or NULL on error */ SARRAY * sarrayCreate(l_int32 n) { SARRAY *sa; if (n <= 0 || n > (l_int32)MaxPtrArraySize) n = InitialPtrArraySize; sa = (SARRAY *)LEPT_CALLOC(1, sizeof(SARRAY)); if ((sa->array = (char **)LEPT_CALLOC(n, sizeof(char *))) == NULL) { sarrayDestroy(&sa); return (SARRAY *)ERROR_PTR("ptr array not made", __func__, NULL); } sa->nalloc = n; sa->n = 0; sa->refcount = 1; return sa; } /*! * \brief sarrayCreateInitialized() * * \param[in] n size of string ptr array to be alloc'd * \param[in] initstr string to be initialized on the full array * \return sarray, or NULL on error */ SARRAY * sarrayCreateInitialized(l_int32 n, const char *initstr) { l_int32 i; SARRAY *sa; if (n <= 0) return (SARRAY *)ERROR_PTR("n must be > 0", __func__, NULL); if (!initstr) return (SARRAY *)ERROR_PTR("initstr not defined", __func__, NULL); sa = sarrayCreate(n); for (i = 0; i < n; i++) sarrayAddString(sa, initstr, L_COPY); return sa; } /*! * \brief sarrayCreateWordsFromString() * * \param[in] string * \return sarray, or NULL on error * *
 * Notes:
 *      (1) This finds the number of word substrings, creates an sarray
 *          of this size, and puts copies of each substring into the sarray.
 * 
*/ SARRAY * sarrayCreateWordsFromString(const char *string) { char separators[] = " \n\t"; l_int32 i, nsub, size, inword; SARRAY *sa; if (!string) return (SARRAY *)ERROR_PTR("textstr not defined", __func__, NULL); /* Find the number of words */ size = strlen(string); nsub = 0; inword = FALSE; for (i = 0; i < size; i++) { if (inword == FALSE && (string[i] != ' ' && string[i] != '\t' && string[i] != '\n')) { inword = TRUE; nsub++; } else if (inword == TRUE && (string[i] == ' ' || string[i] == '\t' || string[i] == '\n')) { inword = FALSE; } } if ((sa = sarrayCreate(nsub)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); sarraySplitString(sa, string, separators); return sa; } /*! * \brief sarrayCreateLinesFromString() * * \param[in] string * \param[in] blankflag 0 to exclude blank lines; 1 to include * \return sarray, or NULL on error * *
 * Notes:
 *      (1) This finds the number of line substrings, each of which
 *          ends with a newline, and puts a copy of each substring
 *          in a new sarray.
 *      (2) The newline characters are removed from each substring.
 * 
*/ SARRAY * sarrayCreateLinesFromString(const char *string, l_int32 blankflag) { l_int32 i, nsub, size, startptr; char *cstring, *substring; SARRAY *sa; if (!string) return (SARRAY *)ERROR_PTR("textstr not defined", __func__, NULL); /* Find the number of lines */ size = strlen(string); nsub = 0; for (i = 0; i < size; i++) { if (string[i] == '\n') nsub++; } if ((sa = sarrayCreate(nsub)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); if (blankflag) { /* keep blank lines as null strings */ /* Make a copy for munging */ if ((cstring = stringNew(string)) == NULL) { sarrayDestroy(&sa); return (SARRAY *)ERROR_PTR("cstring not made", __func__, NULL); } /* We'll insert nulls like strtok */ startptr = 0; for (i = 0; i < size; i++) { if (cstring[i] == '\n') { cstring[i] = '\0'; if (i > 0 && cstring[i - 1] == '\r') cstring[i - 1] = '\0'; /* also remove Windows CR */ if ((substring = stringNew(cstring + startptr)) == NULL) { sarrayDestroy(&sa); LEPT_FREE(cstring); return (SARRAY *)ERROR_PTR("substring not made", __func__, NULL); } sarrayAddString(sa, substring, L_INSERT); /* lept_stderr("substring = %s\n", substring); */ startptr = i + 1; } } if (startptr < size) { /* no newline at end of last line */ if ((substring = stringNew(cstring + startptr)) == NULL) { sarrayDestroy(&sa); LEPT_FREE(cstring); return (SARRAY *)ERROR_PTR("substring not made", __func__, NULL); } sarrayAddString(sa, substring, L_INSERT); /* lept_stderr("substring = %s\n", substring); */ } LEPT_FREE(cstring); } else { /* remove blank lines; use strtok */ sarraySplitString(sa, string, "\r\n"); } return sa; } /*! * \brief sarrayDestroy() * * \param[in,out] psa will be set to null before returning * \return void * *
 * Notes:
 *      (1) Decrements the ref count and, if 0, destroys the sarray.
 *      (2) Always nulls the input ptr.
 * 
*/ void sarrayDestroy(SARRAY **psa) { l_int32 i; SARRAY *sa; if (psa == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((sa = *psa) == NULL) return; if (--sa->refcount == 0) { if (sa->array) { for (i = 0; i < sa->n; i++) { if (sa->array[i]) LEPT_FREE(sa->array[i]); } LEPT_FREE(sa->array); } LEPT_FREE(sa); } *psa = NULL; } /*! * \brief sarrayCopy() * * \param[in] sa string array * \return copy of sarray, or NULL on error */ SARRAY * sarrayCopy(SARRAY *sa) { l_int32 i; SARRAY *csa; if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", __func__, NULL); if ((csa = sarrayCreate(sa->nalloc)) == NULL) return (SARRAY *)ERROR_PTR("csa not made", __func__, NULL); for (i = 0; i < sa->n; i++) sarrayAddString(csa, sa->array[i], L_COPY); return csa; } /*! * \brief sarrayClone() * * \param[in] sa string array * \return ptr to same sarray, or NULL on error */ SARRAY * sarrayClone(SARRAY *sa) { if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", __func__, NULL); ++sa->refcount; return sa; } /*! * \brief sarrayAddString() * * \param[in] sa string array * \param[in] string string to be added * \param[in] copyflag L_INSERT, L_NOCOPY or L_COPY * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See usage comments at the top of this file.  L_INSERT is
 *          equivalent to L_NOCOPY.
 * 
*/ l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag) { l_int32 n; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!string) return ERROR_INT("string not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_NOCOPY && copyflag != L_COPY) return ERROR_INT("invalid copyflag", __func__, 1); n = sarrayGetCount(sa); if (n >= sa->nalloc) { if (sarrayExtendArray(sa)) return ERROR_INT("extension failed", __func__, 1); } if (copyflag == L_COPY) sa->array[n] = stringNew(string); else /* L_INSERT or L_NOCOPY */ sa->array[n] = (char *)string; sa->n++; return 0; } /*! * \brief sarrayExtendArray() * * \param[in] sa string array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Doubles the size of the string ptr array.
 *      (2) The max number of strings is 50M.
 * 
*/ static l_int32 sarrayExtendArray(SARRAY *sa) { size_t oldsize, newsize; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (sa->nalloc >= (l_int32)MaxPtrArraySize) /* belt & suspenders */ return ERROR_INT("sa at maximum ptr size; can't extend", __func__, 1); oldsize = sa->nalloc * sizeof(char *); if (sa->nalloc > (l_int32)(MaxPtrArraySize / 2)) { newsize = MaxPtrArraySize * sizeof(char *); sa->nalloc = (l_int32)MaxPtrArraySize; } else { newsize = 2 * oldsize; sa->nalloc *= 2; } if ((sa->array = (char **)reallocNew((void **)&sa->array, oldsize, newsize)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); return 0; } /*! * \brief sarrayRemoveString() * * \param[in] sa string array * \param[in] index of string within sarray * \return removed string, or NULL on error */ char * sarrayRemoveString(SARRAY *sa, l_int32 index) { char *string; char **array; l_int32 i, n, nalloc; if (!sa) return (char *)ERROR_PTR("sa not defined", __func__, NULL); if ((array = sarrayGetArray(sa, &nalloc, &n)) == NULL) return (char *)ERROR_PTR("array not returned", __func__, NULL); if (index < 0 || index >= n) return (char *)ERROR_PTR("array index out of bounds", __func__, NULL); string = array[index]; /* If removed string is not at end of array, shift * to fill in, maintaining original ordering. * Note: if we didn't care about the order, we could * put the last string array[n - 1] directly into the hole. */ for (i = index; i < n - 1; i++) array[i] = array[i + 1]; sa->n--; return string; } /*! * \brief sarrayReplaceString() * * \param[in] sa string array * \param[in] index of string within sarray to be replaced * \param[in] newstr string to replace existing one * \param[in] copyflag L_INSERT, L_COPY * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This destroys an existing string and replaces it with
 *          the new string or a copy of it.
 *      (2) By design, an sarray is always compacted, so there are
 *          never any holes (null ptrs) in the ptr array up to the
 *          current count.
 * 
*/ l_ok sarrayReplaceString(SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag) { char *str; l_int32 n; if (!sa) return ERROR_INT("sa not defined", __func__, 1); n = sarrayGetCount(sa); if (index < 0 || index >= n) return ERROR_INT("array index out of bounds", __func__, 1); if (!newstr) return ERROR_INT("newstr not defined", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", __func__, 1); LEPT_FREE(sa->array[index]); if (copyflag == L_INSERT) str = newstr; else /* L_COPY */ str = stringNew(newstr); sa->array[index] = str; return 0; } /*! * \brief sarrayClear() * * \param[in] sa string array * \return 0 if OK; 1 on error */ l_ok sarrayClear(SARRAY *sa) { l_int32 i; if (!sa) return ERROR_INT("sa not defined", __func__, 1); for (i = 0; i < sa->n; i++) { /* free strings and null ptrs */ LEPT_FREE(sa->array[i]); sa->array[i] = NULL; } sa->n = 0; return 0; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * \brief sarrayGetCount() * * \param[in] sa string array * \return count, or 0 if no strings or on error */ l_int32 sarrayGetCount(SARRAY *sa) { if (!sa) return ERROR_INT("sa not defined", __func__, 0); return sa->n; } /*! * \brief sarrayGetArray() * * \param[in] sa string array * \param[out] pnalloc [optional] number allocated string ptrs * \param[out] pn [optional] number allocated strings * \return ptr to string array, or NULL on error * *
 * Notes:
 *      (1) Caution: the returned array is not a copy, so caller
 *          must not destroy it!
 * 
*/ char ** sarrayGetArray(SARRAY *sa, l_int32 *pnalloc, l_int32 *pn) { char **array; if (!sa) return (char **)ERROR_PTR("sa not defined", __func__, NULL); array = sa->array; if (pnalloc) *pnalloc = sa->nalloc; if (pn) *pn = sa->n; return array; } /*! * \brief sarrayGetString() * * \param[in] sa string array * \param[in] index to the index-th string * \param[in] copyflag L_NOCOPY or L_COPY * \return string, or NULL on error * *
 * Notes:
 *      (1) See usage comments at the top of this file.
 *      (2) To get a pointer to the string itself, use L_NOCOPY.
 *          To get a copy of the string, use L_COPY.
 * 
*/ char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag) { if (!sa) return (char *)ERROR_PTR("sa not defined", __func__, NULL); if (index < 0 || index >= sa->n) return (char *)ERROR_PTR("index not valid", __func__, NULL); if (copyflag != L_NOCOPY && copyflag != L_COPY) return (char *)ERROR_PTR("invalid copyflag", __func__, NULL); if (copyflag == L_NOCOPY) return sa->array[index]; else /* L_COPY */ return stringNew(sa->array[index]); } /*----------------------------------------------------------------------* * Conversion to string * *----------------------------------------------------------------------*/ /*! * \brief sarrayToString() * * \param[in] sa string array * \param[in] addnlflag flag: 0 adds nothing to each substring * 1 adds '\n' to each substring * 2 adds ' ' to each substring * 3 adds ',' to each substring * \return dest string, or NULL on error * *
 * Notes:
 *      (1) Concatenates all the strings in the sarray, preserving
 *          all white space.
 *      (2) If addnlflag != 0, adds '\n', ' ' or ',' after each substring.
 *      (3) This function was NOT implemented as:
 *            for (i = 0; i < n; i++)
 *                strcat(dest, sarrayGetString(sa, i, L_NOCOPY));
 *          Do you see why?
 * 
*/ char * sarrayToString(SARRAY *sa, l_int32 addnlflag) { if (!sa) return (char *)ERROR_PTR("sa not defined", __func__, NULL); return sarrayToStringRange(sa, 0, 0, addnlflag); } /*! * \brief sarrayToStringRange() * * \param[in] sa string array * \param[in] first index of first string to use; starts with 0 * \param[in] nstrings number of strings to append into the result; use * 0 to append to the end of the sarray * \param[in] addnlflag flag: 0 adds nothing to each substring * 1 adds '\n' to each substring * 2 adds ' ' to each substring * 3 adds ',' to each substring * \return dest string, or NULL on error * *
 * Notes:
 *      (1) Concatenates the specified strings in the sarray, preserving
 *          all white space.
 *      (2) If addnlflag != 0, adds '\n', ' ' or ',' after each substring.
 *      (3) If the sarray is empty, this returns a string with just
 *          the character corresponding to %addnlflag.
 * 
*/ char * sarrayToStringRange(SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag) { char *dest, *src, *str; l_int32 n, i, last, size, index, len; if (!sa) return (char *)ERROR_PTR("sa not defined", __func__, NULL); if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2 && addnlflag != 3) return (char *)ERROR_PTR("invalid addnlflag", __func__, NULL); n = sarrayGetCount(sa); /* Empty sa; return char corresponding to addnlflag only */ if (n == 0) { if (first == 0) { if (addnlflag == 0) return stringNew(""); if (addnlflag == 1) return stringNew("\n"); if (addnlflag == 2) return stringNew(" "); else /* addnlflag == 3) */ return stringNew(","); } else { return (char *)ERROR_PTR("first not valid", __func__, NULL); } } /* Determine the range of string indices to be used */ if (first < 0 || first >= n) return (char *)ERROR_PTR("first not valid", __func__, NULL); if (nstrings == 0 || (nstrings > n - first)) nstrings = n - first; /* no overflow */ last = first + nstrings - 1; /* Determine the size of the output string */ size = 0; for (i = first; i <= last; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return (char *)ERROR_PTR("str not found", __func__, NULL); size += strlen(str) + 2; } if ((dest = (char *)LEPT_CALLOC(size + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", __func__, NULL); /* Construct the output */ index = 0; for (i = first; i <= last; i++) { src = sarrayGetString(sa, i, L_NOCOPY); len = strlen(src); memcpy(dest + index, src, len); index += len; if (addnlflag == 1) { dest[index] = '\n'; index++; } else if (addnlflag == 2) { dest[index] = ' '; index++; } else if (addnlflag == 3) { dest[index] = ','; index++; } } return dest; } /*----------------------------------------------------------------------* * Concatenate strings uniformly within the sarray * *----------------------------------------------------------------------*/ /*! * \brief sarrayConcatUniformly() * * \param[in] sa string array * \param[in] n number of strings in output sarray * \param[in] addnlflag flag: 0 adds nothing to each substring * 1 adds '\n' to each substring * 2 adds ' ' to each substring * 3 adds ',' to each substring * \return dest sarray, or NULL on error * *
 * Notes:
 *      (1) Divides %sa into %n essentially equal sets of strings,
 *          concatenates each set individually, and makes an output
 *          sarray with the %n concatenations.  %n must not exceed the
 *          number of strings in %sa.
 *      (2) If addnlflag != 0, adds '\n', ' ' or ',' after each substring.
 * 
*/ SARRAY * sarrayConcatUniformly(SARRAY *sa, l_int32 n, l_int32 addnlflag) { l_int32 i, first, ntot, nstr; char *str; NUMA *na; SARRAY *saout; if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", __func__, NULL); ntot = sarrayGetCount(sa); if (n < 1) return (SARRAY *)ERROR_PTR("n must be >= 1", __func__, NULL); if (n > ntot) { L_ERROR("n = %d > ntot = %d\n", __func__, n, ntot); return NULL; } if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2 && addnlflag != 3) return (SARRAY *)ERROR_PTR("invalid addnlflag", __func__, NULL); saout = sarrayCreate(0); na = numaGetUniformBinSizes(ntot, n); for (i = 0, first = 0; i < n; i++) { numaGetIValue(na, i, &nstr); str = sarrayToStringRange(sa, first, nstr, addnlflag); sarrayAddString(saout, str, L_INSERT); first += nstr; } numaDestroy(&na); return saout; } /*----------------------------------------------------------------------* * Join 2 sarrays * *----------------------------------------------------------------------*/ /*! * \brief sarrayJoin() * * \param[in] sa1 to be added to * \param[in] sa2 append to sa1 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Copies of the strings in sarray2 are added to sarray1.
 * 
*/ l_ok sarrayJoin(SARRAY *sa1, SARRAY *sa2) { char *str; l_int32 n, i; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); n = sarrayGetCount(sa2); for (i = 0; i < n; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); if (sarrayAddString(sa1, str, L_COPY) == 1) { L_ERROR("failed to add string at i = %d\n", __func__, i); return 1; } } return 0; } /*! * \brief sarrayAppendRange() * * \param[in] sa1 to be added to * \param[in] sa2 append specified range of strings in sa2 to sa1 * \param[in] start index of first string of sa2 to append * \param[in] end index of last string of sa2 to append; * -1 to append to end of array * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Copies of the strings in sarray2 are added to sarray1.
 *      (2) The [start ... end] range is truncated if necessary.
 *      (3) Use end == -1 to append to the end of sa2.
 * 
*/ l_ok sarrayAppendRange(SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end) { char *str; l_int32 n, i; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); if (start < 0) start = 0; n = sarrayGetCount(sa2); if (end < 0 || end >= n) end = n - 1; if (start > end) return ERROR_INT("start > end", __func__, 1); for (i = start; i <= end; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); sarrayAddString(sa1, str, L_COPY); } return 0; } /*----------------------------------------------------------------------* * Pad an sarray to be the same size as another sarray * *----------------------------------------------------------------------*/ /*! * \brief sarrayPadToSameSize() * * \param[in] sa1, sa2 * \param[in] padstring * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If two sarrays have different size, this adds enough
 *          instances of %padstring to the smaller so that they are
 *          the same size.  It is useful when two or more sarrays
 *          are being sequenced in parallel, and it is necessary to
 *          find a valid string at each index.
 * 
*/ l_ok sarrayPadToSameSize(SARRAY *sa1, SARRAY *sa2, const char *padstring) { l_int32 i, n1, n2; if (!sa1 || !sa2) return ERROR_INT("both sa1 and sa2 not defined", __func__, 1); n1 = sarrayGetCount(sa1); n2 = sarrayGetCount(sa2); if (n1 < n2) { for (i = n1; i < n2; i++) sarrayAddString(sa1, padstring, L_COPY); } else if (n1 > n2) { for (i = n2; i < n1; i++) sarrayAddString(sa2, padstring, L_COPY); } return 0; } /*----------------------------------------------------------------------* * Convert word sarray to line sarray * *----------------------------------------------------------------------*/ /*! * \brief sarrayConvertWordsToLines() * * \param[in] sa sa of individual words * \param[in] linesize max num of chars in each line * \return saout sa of formatted lines, or NULL on error * *
 * Notes:
 *      (1) This is useful for re-typesetting text to a specific maximum
 *          line length.  The individual words in the input sarray
 *          are concatenated into textlines.  An input word string of zero
 *          length is taken to be a paragraph separator.  Each time
 *          such a string is found, the current line is ended and
 *          a new line is also produced that contains just the
 *          string of zero length "".  When the output sarray
 *          of lines is eventually converted to a string with newlines
 *          typically appended to each line string, the empty
 *          strings are just converted to newlines, producing the visible
 *          paragraph separation.
 *      (2) What happens when a word is larger than linesize?
 *          We write it out as a single line anyway!  Words preceding
 *          or following this long word are placed on lines preceding
 *          or following the line with the long word.  Why this choice?
 *          Long "words" found in text documents are typically URLs, and
 *          it's often desirable not to put newlines in the middle of a URL.
 *          The text display program e.g., text editor will typically
 *          wrap the long "word" to fit in the window.
 * 
*/ SARRAY * sarrayConvertWordsToLines(SARRAY *sa, l_int32 linesize) { char *wd, *strl; char emptystring[] = ""; l_int32 n, i, len, totlen; SARRAY *sal, *saout; if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", __func__, NULL); saout = sarrayCreate(0); n = sarrayGetCount(sa); totlen = 0; sal = NULL; for (i = 0; i < n; i++) { if (!sal) sal = sarrayCreate(0); wd = sarrayGetString(sa, i, L_NOCOPY); len = strlen(wd); if (len == 0) { /* end of paragraph: end line & insert blank line */ if (totlen > 0) { strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); } sarrayAddString(saout, emptystring, L_COPY); sarrayDestroy(&sal); totlen = 0; } else if (totlen == 0 && len + 1 > linesize) { /* long word! */ sarrayAddString(saout, wd, L_COPY); /* copy to one line */ } else if (totlen + len + 1 > linesize) { /* end line & start new */ strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); sarrayDestroy(&sal); sal = sarrayCreate(0); sarrayAddString(sal, wd, L_COPY); totlen = len + 1; } else { /* add to current line */ sarrayAddString(sal, wd, L_COPY); totlen += len + 1; } } if (totlen > 0) { /* didn't end with blank line; output last line */ strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); sarrayDestroy(&sal); } return saout; } /*----------------------------------------------------------------------* * Split string on separator list * *----------------------------------------------------------------------*/ /* * \brief sarraySplitString() * * \param[in] sa to append to; typically empty initially * \param[in] str string to split; not changed * \param[in] separators characters that split input string * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This uses strtokSafe().  See the notes there in utils.c.
 * 
*/ l_int32 sarraySplitString(SARRAY *sa, const char *str, const char *separators) { char *cstr, *substr, *saveptr; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!str) return ERROR_INT("str not defined", __func__, 1); if (!separators) return ERROR_INT("separators not defined", __func__, 1); cstr = stringNew(str); /* preserves const-ness of input str */ saveptr = NULL; substr = strtokSafe(cstr, separators, &saveptr); if (substr) sarrayAddString(sa, substr, L_INSERT); while ((substr = strtokSafe(NULL, separators, &saveptr))) sarrayAddString(sa, substr, L_INSERT); LEPT_FREE(cstr); return 0; } /*----------------------------------------------------------------------* * Filter sarray * *----------------------------------------------------------------------*/ /*! * \brief sarraySelectBySubstring() * * \param[in] sain input sarray * \param[in] substr [optional] substring for matching; can be NULL * \return saout output sarray, filtered with substring or NULL on error * *
 * Notes:
 *      (1) This selects all strings in sain that have substr as a substring.
 *          Note that we can't use strncmp() because we're looking for
 *          a match to the substring anywhere within each filename.
 *      (2) If substr == NULL, returns a copy of the sarray.
 * 
*/ SARRAY * sarraySelectBySubstring(SARRAY *sain, const char *substr) { char *str; l_int32 n, i, offset, found; SARRAY *saout; if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", __func__, NULL); n = sarrayGetCount(sain); if (!substr || n == 0) return sarrayCopy(sain); saout = sarrayCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sain, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (found) sarrayAddString(saout, str, L_COPY); } return saout; } /*! * \brief sarraySelectRange() * * \param[in] sain input sarray * \param[in] first index of first string to be selected * \param[in] last index of last string to be selected; * use 0 to go to the end of the sarray * \return saout output sarray, or NULL on error * *
 * Notes:
 *      (1) This makes %saout consisting of copies of all strings in %sain
 *          in the index set [first ... last].  Use %last == 0 to get all
 *          strings from %first to the last string in the sarray.
 * 
*/ SARRAY * sarraySelectRange(SARRAY *sain, l_int32 first, l_int32 last) { char *str; l_int32 n, i; SARRAY *saout; if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", __func__, NULL); if (first < 0) first = 0; n = sarrayGetCount(sain); if (last <= 0) last = n - 1; if (last >= n) { L_WARNING("last > n - 1; setting to n - 1\n", __func__); last = n - 1; } if (first > last) return (SARRAY *)ERROR_PTR("first must be >= last", __func__, NULL); saout = sarrayCreate(0); for (i = first; i <= last; i++) { str = sarrayGetString(sain, i, L_COPY); sarrayAddString(saout, str, L_INSERT); } return saout; } /*! * \brief sarrayParseRange() * * \param[in] sa input sarray * \param[in] start index to start range search * \param[out] pactualstart index of actual start; may be > 'start' * \param[out] pend index of end * \param[out] pnewstart index of start of next range * \param[in] substr substring for matching at beginning of string * \param[in] loc byte offset within the string for the pattern; * use -1 if the location does not matter. * \return 0 if valid range found; 1 otherwise * *
 * Notes:
 *      (1) This finds the range of the next set of strings in SA,
 *          beginning the search at 'start', that does NOT have
 *          the substring 'substr' either at the indicated location
 *          in the string or anywhere in the string.  The input
 *          variable 'loc' is the specified offset within the string;
 *          use -1 to indicate 'anywhere in the string'.
 *      (2) Always check the return value to verify that a valid range
 *          was found.
 *      (3) If a valid range is not found, the values of actstart,
 *          end and newstart are all set to the size of sa.
 *      (4) If this is the last valid range, newstart returns the value n.
 *          In use, this should be tested before calling the function.
 *      (5) Usage example.  To find all the valid ranges in a file
 *          where the invalid lines begin with two dashes, copy each
 *          line in the file to a string in an sarray, and do:
 *             start = 0;
 *             while (!sarrayParseRange(sa, start, &actstart, &end, &start,
 *                    "--", 0))
 *                 lept_stderr("start = %d, end = %d\n", actstart, end);
 * 
*/ l_int32 sarrayParseRange(SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc) { char *str; l_int32 n, i, offset, found; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!pactualstart || !pend || !pnewstart) return ERROR_INT("not all range addresses defined", __func__, 1); n = sarrayGetCount(sa); *pactualstart = *pend = *pnewstart = n; if (!substr) return ERROR_INT("substr not defined", __func__, 1); /* Look for the first string without the marker */ if (start < 0 || start >= n) return 1; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (!found) break; } else { if (!found || offset != loc) break; } } start = i; if (i == n) /* couldn't get started */ return 1; /* Look for the last string without the marker */ *pactualstart = start; for (i = start + 1; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (found) break; } else { if (found && offset == loc) break; } } *pend = i - 1; start = i; if (i == n) /* no further range */ return 0; /* Look for the first string after *pend without the marker. * This will start the next run of strings, if it exists. */ for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (!found) break; } else { if (!found || offset != loc) break; } } if (i < n) *pnewstart = i; return 0; } /*----------------------------------------------------------------------* * Serialize for I/O * *----------------------------------------------------------------------*/ /*! * \brief sarrayRead() * * \param[in] filename * \return sarray, or NULL on error */ SARRAY * sarrayRead(const char *filename) { FILE *fp; SARRAY *sa; if (!filename) return (SARRAY *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (SARRAY *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); sa = sarrayReadStream(fp); fclose(fp); if (!sa) return (SARRAY *)ERROR_PTR_1("sa not read", filename, __func__, NULL); return sa; } /*! * \brief sarrayReadStream() * * \param[in] fp file stream * \return sarray, or NULL on error * *
 * Notes:
 *      (1) We store the size of each string along with the string.
 *          The limit on the number of strings is 50M.
 *          The limit on the size of any string is 2^30 bytes.
 *      (2) This allows a string to have embedded newlines.  By reading
 *          the entire string, as determined by its size, we are
 *          not affected by any number of embedded newlines.
 *      (3) It is OK for the sarray to be empty.
 * 
*/ SARRAY * sarrayReadStream(FILE *fp) { char *stringbuf; l_int32 i, n, size, index, bufsize, version, ignore, success; SARRAY *sa; if (!fp) return (SARRAY *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nSarray Version %d\n", &version) != 1) return (SARRAY *)ERROR_PTR("not an sarray file", __func__, NULL); if (version != SARRAY_VERSION_NUMBER) return (SARRAY *)ERROR_PTR("invalid sarray version", __func__, NULL); if (fscanf(fp, "Number of strings = %d\n", &n) != 1) return (SARRAY *)ERROR_PTR("error on # strings", __func__, NULL); if (n < 0) return (SARRAY *)ERROR_PTR("num string ptrs <= 0", __func__, NULL); if (n > (l_int32)MaxPtrArraySize) return (SARRAY *)ERROR_PTR("too many string ptrs", __func__, NULL); if (n == 0) L_INFO("the sarray is empty\n", __func__); success = TRUE; if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); bufsize = 512 + 1; stringbuf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); for (i = 0; i < n; i++) { /* Get the size of the stored string */ if ((fscanf(fp, "%d[%d]:", &index, &size) != 2) || (size > (1 << 30))) { success = FALSE; L_ERROR("error on string size\n", __func__); goto cleanup; } /* Expand the string buffer if necessary */ if (size > bufsize - 5) { LEPT_FREE(stringbuf); bufsize = (l_int32)(1.5 * size); stringbuf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); } /* Read the stored string, plus leading spaces and trailing \n */ if (fread(stringbuf, 1, size + 3, fp) != size + 3) { success = FALSE; L_ERROR("error reading string\n", __func__); goto cleanup; } /* Remove the \n that was added by sarrayWriteStream() */ stringbuf[size + 2] = '\0'; /* Copy it in, skipping the 2 leading spaces */ sarrayAddString(sa, stringbuf + 2, L_COPY); } ignore = fscanf(fp, "\n"); cleanup: LEPT_FREE(stringbuf); if (!success) sarrayDestroy(&sa); return sa; } /*! * \brief sarrayReadMem() * * \param[in] data serialization in ascii * \param[in] size of data; can use strlen to get it * \return sarray, or NULL on error */ SARRAY * sarrayReadMem(const l_uint8 *data, size_t size) { FILE *fp; SARRAY *sa; if (!data) return (SARRAY *)ERROR_PTR("data not defined", __func__, NULL); if ((fp = fopenReadFromMemory(data, size)) == NULL) return (SARRAY *)ERROR_PTR("stream not opened", __func__, NULL); sa = sarrayReadStream(fp); fclose(fp); if (!sa) L_ERROR("sarray not read\n", __func__); return sa; } /*! * \brief sarrayWrite() * * \param[in] filename * \param[in] sa string array * \return 0 if OK; 1 on error */ l_ok sarrayWrite(const char *filename, SARRAY *sa) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!sa) return ERROR_INT("sa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = sarrayWriteStream(fp, sa); fclose(fp); if (ret) return ERROR_INT_1("sa not written to stream", filename, __func__, 1); return 0; } /*! * \brief sarrayWriteStream() * * \param[in] fp file stream; use NULL to write to stderr * \param[in] sa string array * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This appends a '\n' to each string, which is stripped
 *          off by sarrayReadStream().
 * 
*/ l_ok sarrayWriteStream(FILE *fp, SARRAY *sa) { l_int32 i, n, len; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!sa) return sarrayWriteStderr(sa); n = sarrayGetCount(sa); fprintf(fp, "\nSarray Version %d\n", SARRAY_VERSION_NUMBER); fprintf(fp, "Number of strings = %d\n", n); for (i = 0; i < n; i++) { len = strlen(sa->array[i]); fprintf(fp, " %d[%d]: %s\n", i, len, sa->array[i]); } fprintf(fp, "\n"); return 0; } /*! * \brief sarrayWriteStderr() * * \param[in] sa string array * \return 0 if OK; 1 on error */ l_ok sarrayWriteStderr(SARRAY *sa) { l_int32 i, n, len; if (!sa) return ERROR_INT("sa not defined", __func__, 1); n = sarrayGetCount(sa); lept_stderr("\nSarray Version %d\n", SARRAY_VERSION_NUMBER); lept_stderr("Number of strings = %d\n", n); for (i = 0; i < n; i++) { len = strlen(sa->array[i]); lept_stderr(" %d[%d]: %s\n", i, len, sa->array[i]); } lept_stderr("\n"); return 0; } /*! * \brief sarrayWriteMem() * * \param[out] pdata data of serialized sarray; ascii * \param[out] psize size of returned data * \param[in] sa * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Serializes a sarray in memory and puts the result in a buffer.
 * 
*/ l_ok sarrayWriteMem(l_uint8 **pdata, size_t *psize, SARRAY *sa) { l_int32 ret; FILE *fp; if (pdata) *pdata = NULL; if (psize) *psize = 0; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!sa) return ERROR_INT("sa not defined", __func__, 1); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", __func__, 1); ret = sarrayWriteStream(fp, sa); fputc('\0', fp); fclose(fp); if (*psize > 0) *psize = *psize - 1; #else L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ ret = sarrayWriteStream(fp, sa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); #endif /* HAVE_FMEMOPEN */ return ret; } /*! * \brief sarrayAppend() * * \param[in] filename * \param[in] sa * \return 0 if OK; 1 on error */ l_ok sarrayAppend(const char *filename, SARRAY *sa) { FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!sa) return ERROR_INT("sa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "a")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); if (sarrayWriteStream(fp, sa)) { fclose(fp); return ERROR_INT_1("sa not appended to stream", filename, __func__, 1); } fclose(fp); return 0; } /*---------------------------------------------------------------------* * Directory filenames * *---------------------------------------------------------------------*/ /*! * \brief getNumberedPathnamesInDirectory() * * \param[in] dirname directory name * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] numpre number of characters in name before number * \param[in] numpost number of characters in name after the number, * up to a dot before an extension * \param[in] maxnum only consider page numbers up to this value * \return sarray of numbered pathnames, or NULL on error * *
 * Notes:
 *      (1) Returns the full pathnames of the numbered filenames in
 *          the directory.  The number in the filename is the index
 *          into the sarray.  For indices for which there are no filenames,
 *          an empty string ("") is placed into the sarray.
 *          This makes reading numbered files very simple.  For example,
 *          the image whose filename includes number N can be retrieved using
 *               pixReadIndexed(sa, N);
 *      (2) If %substr is not NULL, only filenames that contain
 *          the substring can be included.  If %substr is NULL,
 *          all matching filenames are used.
 *      (3) If no numbered files are found, it returns an empty sarray,
 *          with no initialized strings.
 *      (4) It is assumed that the page number is contained within
 *          the basename (the filename without directory or extension).
 *          %numpre is the number of characters in the basename
 *          preceding the actual page number; %numpost is the number
 *          following the page number, up to either the end of the
 *          basename or a ".", whichever comes first.
 *      (5) This is useful when all filenames contain numbers that are
 *          not necessarily consecutive.  0-padding is not required.
 *      (6) To use a O(n) matching algorithm, the largest page number
 *          is found and two internal arrays of this size are created.
 *          This maximum is constrained not to exceed %maxsum,
 *          to make sure that an unrealistically large number is not
 *          accidentally used to determine the array sizes.
 * 
*/ SARRAY * getNumberedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum) { l_int32 nfiles; SARRAY *sa, *saout; if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", __func__, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); if ((nfiles = sarrayGetCount(sa)) == 0) { sarrayDestroy(&sa); return sarrayCreate(1); } saout = convertSortedToNumberedPathnames(sa, numpre, numpost, maxnum); sarrayDestroy(&sa); return saout; } /*! * \brief getSortedPathnamesInDirectory() * * \param[in] dirname directory name * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] first 0-based * \param[in] nfiles use 0 for all to the end * \return sarray of sorted pathnames, or NULL on error * *
 * Notes:
 *      (1) Use %substr to filter filenames in the directory.  If
 *          %substr == NULL, this takes all files.
 *      (2) The files in the directory, after optional filtering by
 *          the substring, are lexically sorted in increasing order.
 *          Use %first and %nfiles to select a contiguous set of files.
 *      (3) The full pathnames are returned for the requested sequence.
 *          If no files are found after filtering, returns an empty sarray.
 * 
*/ SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname, *fullname; l_int32 i, n, last; SARRAY *sa, *safiles, *saout; if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", __func__, NULL); if ((sa = getFilenamesInDirectory(dirname)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); safiles = sarraySelectBySubstring(sa, substr); sarrayDestroy(&sa); n = sarrayGetCount(safiles); if (n == 0) { L_WARNING("no files found\n", __func__); return safiles; } sarraySort(safiles, safiles, L_SORT_INCREASING); first = L_MIN(L_MAX(first, 0), n - 1); if (nfiles == 0) nfiles = n - first; last = L_MIN(first + nfiles - 1, n - 1); saout = sarrayCreate(last - first + 1); for (i = first; i <= last; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); fullname = pathJoin(dirname, fname); sarrayAddString(saout, fullname, L_INSERT); } sarrayDestroy(&safiles); return saout; } /*! * \brief convertSortedToNumberedPathnames() * * \param[in] sa sorted pathnames including zero-padded integers * \param[in] numpre number of characters in name before number * \param[in] numpost number of characters in name after the number, * up to a dot before an extension * \param[in] maxnum only consider page numbers up to this value * \return sarray of numbered pathnames, or NULL on error * *
 * Notes:
 *      (1) Typically, numpre = numpost = 0; e.g., when the filename
 *          just has a number followed by an optional extension.
 * 
*/ SARRAY * convertSortedToNumberedPathnames(SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum) { char *fname, *str; l_int32 i, nfiles, num, index; SARRAY *saout; if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", __func__, NULL); if ((nfiles = sarrayGetCount(sa)) == 0) return sarrayCreate(1); /* Find the last file in the sorted array that has a number * that (a) matches the count pattern and (b) does not * exceed %maxnum. %maxnum sets an upper limit on the size * of the sarray. */ num = 0; for (i = nfiles - 1; i >= 0; i--) { fname = sarrayGetString(sa, i, L_NOCOPY); num = extractNumberFromFilename(fname, numpre, numpost); if (num < 0) continue; num = L_MIN(num + 1, maxnum); break; } if (num <= 0) /* none found */ return sarrayCreate(1); /* Insert pathnames into the output sarray. * Ignore numbers that are out of the range of sarray. */ saout = sarrayCreateInitialized(num, ""); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); index = extractNumberFromFilename(fname, numpre, numpost); if (index < 0 || index >= num) continue; str = sarrayGetString(saout, index, L_NOCOPY); if (str[0] != '\0') { L_WARNING("\n Multiple files with same number: %d\n", __func__, index); } sarrayReplaceString(saout, index, fname, L_COPY); } return saout; } /*! * \brief getFilenamesInDirectory() * * \param[in] dirname directory name * \return sarray of file names, or NULL on error * *
 * Notes:
 *      (1) The versions compiled under unix and cygwin use the POSIX C
 *          library commands for handling directories.  For Windows,
 *          there is a separate implementation.
 *      (2) It returns an array of filename tails; i.e., only the part of
 *          the path after the last slash.
 *      (3) Use of the d_type field of dirent is not portable:
 *          "According to POSIX, the dirent structure contains a field
 *          char d_name[] of unspecified size, with at most NAME_MAX
 *          characters preceding the terminating null character.  Use
 *          of other fields will harm the portability of your programs."
 *      (4) As a consequence of (3), we note several things:
 *           ~ MINGW doesn't have a d_type member.
 *           ~ Older versions of gcc (e.g., 2.95.3) return DT_UNKNOWN
 *             for d_type from all files.
 *          On these systems, this function will return directories
 *          (except for '.' and '..', which are eliminated using
 *          the d_name field).
 *      (5) For unix, we avoid the bug in earlier versions of realpath()
 *          by requiring either POSIX 2008 or use of glibc.
 *          
 * 
*/ #ifndef _WIN32 SARRAY * getFilenamesInDirectory(const char *dirname) { char *gendir, *realdir, *stat_path; size_t size; SARRAY *safiles; DIR *pdir; struct dirent *pdirentry; int dfd, stat_ret; struct stat st; if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", __func__, NULL); if (dirname[0] == '\0') return (SARRAY *)ERROR_PTR("dirname is empty", __func__, NULL); /* Who would have thought it was this fiddly to open a directory and get the files inside? fstatat() works with relative directory paths, and stat() requires using the absolute path. realpath() works as follows for files and directories: * If the file or directory exists, realpath returns its path; else it returns NULL. * For realpath() we use the POSIX 2008 implementation, where the second arg is NULL and the path is malloc'd and returned if the file or directory exists. All versions of glibc support this. */ gendir = genPathname(dirname, NULL); realdir = realpath(gendir, NULL); LEPT_FREE(gendir); if (realdir == NULL) return (SARRAY *)ERROR_PTR("realdir not made", __func__, NULL); if ((pdir = opendir(realdir)) == NULL) { L_ERROR("directory %s not opened\n", __func__, realdir); LEPT_FREE(realdir); return NULL; } safiles = sarrayCreate(0); while ((pdirentry = readdir(pdir))) { #if HAVE_DIRFD && HAVE_FSTATAT /* Platform issues: although Linux has these POSIX functions, * AIX doesn't have fstatat() and Solaris doesn't have dirfd(). */ dfd = dirfd(pdir); stat_ret = fstatat(dfd, pdirentry->d_name, &st, 0); #else size = strlen(realdir) + strlen(pdirentry->d_name) + 2; stat_path = (char *)LEPT_CALLOC(size, 1); snprintf(stat_path, size, "%s/%s", realdir, pdirentry->d_name); stat_ret = stat(stat_path, &st); LEPT_FREE(stat_path); #endif if (stat_ret == 0 && S_ISDIR(st.st_mode)) continue; sarrayAddString(safiles, pdirentry->d_name, L_COPY); } closedir(pdir); LEPT_FREE(realdir); return safiles; } #else /* _WIN32 */ /* http://msdn2.microsoft.com/en-us/library/aa365200(VS.85).aspx */ #include SARRAY * getFilenamesInDirectory(const char *dirname) { char *pszDir; char *realdir; HANDLE hFind = INVALID_HANDLE_VALUE; SARRAY *safiles; WIN32_FIND_DATAA ffd; if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", __func__, NULL); realdir = genPathname(dirname, NULL); pszDir = stringJoin(realdir, "\\*"); LEPT_FREE(realdir); if (strlen(pszDir) + 1 > MAX_PATH) { LEPT_FREE(pszDir); return (SARRAY *)ERROR_PTR("dirname is too long", __func__, NULL); } if ((safiles = sarrayCreate(0)) == NULL) { LEPT_FREE(pszDir); return (SARRAY *)ERROR_PTR("safiles not made", __func__, NULL); } hFind = FindFirstFileA(pszDir, &ffd); if (INVALID_HANDLE_VALUE == hFind) { sarrayDestroy(&safiles); LEPT_FREE(pszDir); return (SARRAY *)ERROR_PTR("hFind not opened", __func__, NULL); } while (FindNextFileA(hFind, &ffd) != 0) { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) /* skip dirs */ continue; convertSepCharsInPath(ffd.cFileName, UNIX_PATH_SEPCHAR); sarrayAddString(safiles, ffd.cFileName, L_COPY); } FindClose(hFind); LEPT_FREE(pszDir); return safiles; } #endif /* _WIN32 */ leptonica-1.86.0/src/sarray2.c000066400000000000000000000471261506303110300161040ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file sarray2.c *
 *
 *      Sort
 *          SARRAY     *sarraySort()
 *          SARRAY     *sarraySortByIndex()
 *          l_int32     stringCompareLexical()
 *
 *      Set operations using aset (rbtree)
 *          L_ASET     *l_asetCreateFromSarray()
 *          l_int32     sarrayRemoveDupsByAset()
 *          l_int32     sarrayUnionByAset()
 *          l_int32     sarrayIntersectionByAset()
 *
 *      Hashmap operations
 *          L_HASHMAP  *l_hmapCreateFromSarray()
 *          l_int32     sarrayRemoveDupsByHmap()
 *          l_int32     sarrayUnionByHmap()
 *          l_int32     sarrayIntersectionByHmap()
 *
 *      Miscellaneous operations
 *          SARRAY     *sarrayGenerateIntegers()
 *          l_int32     sarrayLookupCSKV()
 *
 *
 * We have two implementations of set operations on an array of strings:
 *
 *   (1) Using an underlying tree (rbtree).
 *       This uses a good 64 bit hashing function for the key,
 *       that is not expected to have hash collisions (and we do
 *       not test for them).  The tree is built up of the hash
 *       values, and if the hash is found in the tree, it is
 *       assumed that the string has already been found.
 *
 *   (2) Building a hashmap from the keys (hashmap).
 *       This uses a fast 64 bit hashing function for the key, which
 *       is then hashed into a hashtable.  Collisions of hashkeys are
 *       very rare, but the hashtable is designed to allow more than one
 *       hashitem in a table entry.  The hashitems are put in a list at
 *       each hashtable entry, which is traversed looking for the key.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "array_internal.h" /*----------------------------------------------------------------------* * Sort * *----------------------------------------------------------------------*/ /*! * \brief sarraySort() * * \param[in] saout output sarray; can be NULL or equal to sain * \param[in] sain input sarray * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING * \return saout output sarray, sorted by ascii value, or NULL on error * *
 * Notes:
 *      (1) Set saout = sain for in-place; otherwise, set naout = NULL.
 *      (2) Shell sort, modified from K&R, 2nd edition, p.62.
 *          Slow but simple O(n logn) sort.
 * 
*/ SARRAY * sarraySort(SARRAY *saout, SARRAY *sain, l_int32 sortorder) { char **array; char *tmp; l_int32 n, i, j, gap; if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", __func__, NULL); /* Make saout if necessary; otherwise do in-place */ if (!saout) saout = sarrayCopy(sain); else if (sain != saout) return (SARRAY *)ERROR_PTR("invalid: not in-place", __func__, NULL); array = saout->array; /* operate directly on the array */ n = sarrayGetCount(saout); /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && stringCompareLexical(array[j], array[j + gap])) || (sortorder == L_SORT_DECREASING && stringCompareLexical(array[j + gap], array[j]))) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; } } } } return saout; } /*! * \brief sarraySortByIndex() * * \param[in] sain * \param[in] naindex na that maps from the new sarray to the input sarray * \return saout sorted, or NULL on error */ SARRAY * sarraySortByIndex(SARRAY *sain, NUMA *naindex) { char *str; l_int32 i, n, index; SARRAY *saout; if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", __func__, NULL); if (!naindex) return (SARRAY *)ERROR_PTR("naindex not defined", __func__, NULL); n = sarrayGetCount(sain); saout = sarrayCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); str = sarrayGetString(sain, index, L_COPY); sarrayAddString(saout, str, L_INSERT); } return saout; } /*! * \brief stringCompareLexical() * * \param[in] str1 * \param[in] str2 * \return 1 if str1 > str2 lexically; 0 otherwise * *
 * Notes:
 *      (1) If the lexical values are identical, return a 0, to
 *          indicate that no swapping is required to sort the strings.
 * 
*/ l_int32 stringCompareLexical(const char *str1, const char *str2) { l_int32 i, len1, len2, len; if (!str1) return ERROR_INT("str1 not defined", __func__, 1); if (!str2) return ERROR_INT("str2 not defined", __func__, 1); len1 = strlen(str1); len2 = strlen(str2); len = L_MIN(len1, len2); for (i = 0; i < len; i++) { if (str1[i] == str2[i]) continue; if (str1[i] > str2[i]) return 1; else return 0; } if (len1 > len2) return 1; else return 0; } /*----------------------------------------------------------------------* * Set operations using aset (rbtree) * *----------------------------------------------------------------------*/ /*! * \brief l_asetCreateFromSarray() * * \param[in] sa * \return set using a string hash into a uint64 as the key */ L_ASET * l_asetCreateFromSarray(SARRAY *sa) { char *str; l_int32 i, n; l_uint64 hash; L_ASET *set; RB_TYPE key; if (!sa) return (L_ASET *)ERROR_PTR("sa not defined", __func__, NULL); set = l_asetCreate(L_UINT_TYPE); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); l_hashStringToUint64Fast(str, &hash); key.utype = hash; l_asetInsert(set, key); } return set; } /*! * \brief sarrayRemoveDupsByAset() * * \param[in] sas * \param[out] psad with duplicates removed * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is O(nlogn), considerably slower than
 *          sarrayRemoveDupsByHmap() for large string arrays.
 *      (2) The key for each string is a 64-bit hash.
 *      (3) Build a set, using hashed strings as keys.  As the set is
 *          built, first do a find; if not found, add the key to the
 *          set and add the string to the output sarray.
 * 
*/ l_ok sarrayRemoveDupsByAset(SARRAY *sas, SARRAY **psad) { char *str; l_int32 i, n; l_uint64 hash; L_ASET *set; RB_TYPE key; SARRAY *sad; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sas) return ERROR_INT("sas not defined", __func__, 1); set = l_asetCreate(L_UINT_TYPE); sad = sarrayCreate(0); *psad = sad; n = sarrayGetCount(sas); for (i = 0; i < n; i++) { str = sarrayGetString(sas, i, L_NOCOPY); l_hashStringToUint64Fast(str, &hash); key.utype = hash; if (!l_asetFind(set, key)) { sarrayAddString(sad, str, L_COPY); l_asetInsert(set, key); } } l_asetDestroy(&set); return 0; } /*! * \brief sarrayUnionByAset() * * \param[in] sa1 * \param[in] sa2 * \param[out] psad union of the two string arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Duplicates are removed from the concatenation of the two arrays.
 *      (2) The key for each string is a 64-bit hash.
 *      (2) Algorithm: Concatenate the two sarrays.  Then build a set,
 *          using hashed strings as keys.  As the set is built, first do
 *          a find; if not found, add the key to the set and add the string
 *          to the output sarray.  This is O(nlogn).
 * 
*/ l_ok sarrayUnionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad) { SARRAY *sa3; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); /* Join */ sa3 = sarrayCopy(sa1); if (sarrayJoin(sa3, sa2) == 1) { sarrayDestroy(&sa3); return ERROR_INT("join failed for sa3", __func__, 1); } /* Eliminate duplicates */ sarrayRemoveDupsByAset(sa3, psad); sarrayDestroy(&sa3); return 0; } /*! * \brief sarrayIntersectionByAset() * * \param[in] sa1 * \param[in] sa2 * \param[out] psad intersection of the two string arrays * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Algorithm: put the larger sarray into a set, using the string
 *          hashes as the key values.  Then run through the smaller sarray,
 *          building an output sarray and a second set from the strings
 *          in the larger array: if a string is in the first set but
 *          not in the second, add the string to the output sarray and hash
 *          it into the second set.  The second set is required to make
 *          sure only one instance of each string is put into the output sarray.
 *          This is O(mlogn), {m,n} = sizes of {smaller,larger} input arrays.
 * 
*/ l_ok sarrayIntersectionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad) { char *str; l_int32 n1, n2, i, n; l_uint64 hash; L_ASET *set1, *set2; RB_TYPE key; SARRAY *sa_small, *sa_big, *sad; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); /* Put the elements of the biggest array into a set */ n1 = sarrayGetCount(sa1); n2 = sarrayGetCount(sa2); sa_small = (n1 < n2) ? sa1 : sa2; /* do not destroy sa_small */ sa_big = (n1 < n2) ? sa2 : sa1; /* do not destroy sa_big */ set1 = l_asetCreateFromSarray(sa_big); /* Build up the intersection of strings */ sad = sarrayCreate(0); *psad = sad; n = sarrayGetCount(sa_small); set2 = l_asetCreate(L_UINT_TYPE); for (i = 0; i < n; i++) { str = sarrayGetString(sa_small, i, L_NOCOPY); l_hashStringToUint64Fast(str, &hash); key.utype = hash; if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { sarrayAddString(sad, str, L_COPY); l_asetInsert(set2, key); } } l_asetDestroy(&set1); l_asetDestroy(&set2); return 0; } /*----------------------------------------------------------------------* * Hashmap operations * *----------------------------------------------------------------------*/ /*! * \brief l_hmapCreateFromSarray() * * \param[in] sa input sarray * \return hmap hashmap, or NULL on error */ L_HASHMAP * l_hmapCreateFromSarray(SARRAY *sa) { l_int32 i, n; l_uint64 key; char *str; L_HASHMAP *hmap; if (!sa) return (L_HASHMAP *)ERROR_PTR("sa not defined", __func__, NULL); n = sarrayGetCount(sa); if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL) return (L_HASHMAP *)ERROR_PTR("hmap not made", __func__, NULL); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); l_hashStringToUint64Fast(str, &key); l_hmapLookup(hmap, key, i, L_HMAP_CREATE); } return hmap; } /*! * \brief sarrayRemoveDupsByHmap() * * \param[in] sas * \param[out] psad hash set of unique values * \param[out] phmap [optional] hashmap used for lookup * \return 0 if OK; 1 on error */ l_ok sarrayRemoveDupsByHmap(SARRAY *sas, SARRAY **psad, L_HASHMAP **phmap) { l_int32 i, tabsize; char *str; SARRAY *sad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (phmap) *phmap = NULL; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sas) return ERROR_INT("sas not defined", __func__, 1); /* Traverse the hashtable lists */ if ((hmap = l_hmapCreateFromSarray(sas)) == NULL) return ERROR_INT("hmap not made", __func__, 1); sad = sarrayCreate(0); *psad = sad; tabsize = hmap->tabsize; for (i = 0; i < tabsize; i++) { hitem = hmap->hashtab[i]; while (hitem) { str = sarrayGetString(sas, hitem->val, L_COPY); sarrayAddString(sad, str, L_INSERT); hitem = hitem->next; } } if (phmap) *phmap = hmap; else l_hmapDestroy(&hmap); return 0; } /*! * \brief sarrayUnionByHmap() * * \param[in] sa1 * \param[in] sa2 * \param[out] *psad union of the array values * \return 0 if OK; 1 on error */ l_ok sarrayUnionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad) { SARRAY *sa3; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); sa3 = sarrayCopy(sa1); if (sarrayJoin(sa3, sa2) == 1) { sarrayDestroy(&sa3); return ERROR_INT("sa3 join failed", __func__, 1); } sarrayRemoveDupsByHmap(sa3, psad, NULL); sarrayDestroy(&sa3); return 0; } /*! * \brief sarrayIntersectionByHmap() * * \param[in] sa1 * \param[in] sa2 * \param[out] *psad intersection of the array values * \return 0 if OK; 1 on error */ l_ok sarrayIntersectionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad) { l_int32 i, n1, n2, n; l_uint64 key; char *str; SARRAY *sa_small, *sa_big, *sa3, *sad; L_HASHITEM *hitem; L_HASHMAP *hmap; if (!psad) return ERROR_INT("&sad not defined", __func__, 1); *psad = NULL; if (!sa1) return ERROR_INT("sa1 not defined", __func__, 1); if (!sa2) return ERROR_INT("sa2 not defined", __func__, 1); /* Make a hashmap for the elements of the biggest array */ n1 = sarrayGetCount(sa1); n2 = sarrayGetCount(sa2); sa_small = (n1 < n2) ? sa1 : sa2; /* do not destroy sa_small */ sa_big = (n1 < n2) ? sa2 : sa1; /* do not destroy sa_big */ if ((hmap = l_hmapCreateFromSarray(sa_big)) == NULL) return ERROR_INT("hmap not made", __func__, 1); /* Remove duplicates from the smallest array. Alternatively, * we can skip this step and avoid counting duplicates in * sa_small by modifying the count fields in the sa_big hashitems; * e.g., see l_hmapIntersectionDna(). */ sarrayRemoveDupsByHmap(sa_small, &sa3, NULL); /* Go through sa3, the set of strings derived from the smallest array, * hashing into the big array table. Any string found belongs to both, * so add it to the output array. */ sad = sarrayCreate(0); *psad = sad; n = sarrayGetCount(sa3); for (i = 0; i < n; i++) { str = sarrayGetString(sa3, i, L_NOCOPY); l_hashStringToUint64Fast(str, &key); hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK); if (hitem) sarrayAddString(sad, str, L_COPY); } l_hmapDestroy(&hmap); sarrayDestroy(&sa3); return 0; } /*----------------------------------------------------------------------* * Miscellaneous operations * *----------------------------------------------------------------------*/ /*! * \brief sarrayGenerateIntegers() * * \param[in] n * \return sa of printed numbers, 1 - n, or NULL on error */ SARRAY * sarrayGenerateIntegers(l_int32 n) { char buf[32]; l_int32 i; SARRAY *sa; if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); for (i = 0; i < n; i++) { snprintf(buf, sizeof(buf), "%d", i); sarrayAddString(sa, buf, L_COPY); } return sa; } /*! * \brief sarrayLookupCSKV() * * \param[in] sa of strings, each being a comma-separated pair * of strings, the first being a key and the * second a value * \param[in] keystring an input string to match with each key in %sa * \param[out] pvalstring the returned value string corresponding to the * input key string, if found; otherwise NULL * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input %sa can have other strings that are not in
 *          comma-separated key-value format.  These will be ignored.
 *      (2) This returns a copy of the first value string in %sa whose
 *          key string matches the input %keystring.
 *      (3) White space is not ignored; all white space before the ','
 *          is used for the keystring in matching.  This allows the
 *          key and val strings to have white space (e.g., multiple words).
 * 
*/ l_ok sarrayLookupCSKV(SARRAY *sa, const char *keystring, char **pvalstring) { char *key, *val, *str; l_int32 i, n; SARRAY *sa1; if (!pvalstring) return ERROR_INT("&valstring not defined", __func__, 1); *pvalstring = NULL; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!keystring) return ERROR_INT("keystring not defined", __func__, 1); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); sa1 = sarrayCreate(2); sarraySplitString(sa1, str, ","); if (sarrayGetCount(sa1) != 2) { sarrayDestroy(&sa1); continue; } key = sarrayGetString(sa1, 0, L_NOCOPY); val = sarrayGetString(sa1, 1, L_NOCOPY); if (!strcmp(key, keystring)) { *pvalstring = stringNew(val); sarrayDestroy(&sa1); return 0; } sarrayDestroy(&sa1); } return 0; } leptonica-1.86.0/src/scale1.c000066400000000000000000004342211506303110300156650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file scale1.c *
 *         Top-level scaling
 *               PIX      *pixScale()
 *               PIX      *pixScaleToSizeRel()
 *               PIX      *pixScaleToSize()
 *               PIX      *pixScaleToResolution()
 *               PIX      *pixScaleGeneral()
 *
 *         Linearly interpreted (usually up-) scaling
 *               PIX      *pixScaleLI()
 *               PIX      *pixScaleColorLI()
 *               PIX      *pixScaleColor2xLI()
 *               PIX      *pixScaleColor4xLI()
 *               PIX      *pixScaleGrayLI()
 *               PIX      *pixScaleGray2xLI()
 *               PIX      *pixScaleGray4xLI()
 *
 *         Upscale 2x followed by binarization
 *               PIX      *pixScaleGray2xLIThresh()
 *               PIX      *pixScaleGray2xLIDither()
 *
 *         Upscale 4x followed by binarization
 *               PIX      *pixScaleGray4xLIThresh()
 *               PIX      *pixScaleGray4xLIDither()
 *
 *         Scaling by closest pixel sampling
 *               PIX      *pixScaleBySampling()
 *               PIX      *pixScaleBySamplingWithShift()
 *               PIX      *pixScaleBySamplingToSize()
 *               PIX      *pixScaleByIntSampling()
 *
 *         Fast integer factor subsampling RGB to gray and to binary
 *               PIX      *pixScaleRGBToGrayFast()
 *               PIX      *pixScaleRGBToBinaryFast()
 *               PIX      *pixScaleGrayToBinaryFast()
 *
 *         Downscaling with (antialias) smoothing
 *               PIX      *pixScaleSmooth()
 *               PIX      *pixScaleSmoothToSize()
 *               PIX      *pixScaleRGBToGray2()   [special 2x reduction to gray]
 *
 *         Downscaling with (antialias) area mapping
 *               PIX      *pixScaleAreaMap()
 *               PIX      *pixScaleAreaMap2()
 *               PIX      *pixScaleAreaMapToSize()
 *
 *         Binary scaling by closest pixel sampling
 *               PIX      *pixScaleBinary()
 *               PIX      *pixScaleBinaryWithShift()
 *
 *     Low-level static functions:
 *
 *         Color (interpolated) scaling: general case
 *               static void       scaleColorLILow()
 *
 *         Grayscale (interpolated) scaling: general case
 *               static void       scaleGrayLILow()
 *
 *         Color (interpolated) scaling: 2x upscaling
 *               static void       scaleColor2xLILow()
 *               static void       scaleColor2xLILineLow()
 *
 *         Grayscale (interpolated) scaling: 2x upscaling
 *               static void       scaleGray2xLILow()
 *               static void       scaleGray2xLILineLow()
 *
 *         Grayscale (interpolated) scaling: 4x upscaling
 *               static void       scaleGray4xLILow()
 *               static void       scaleGray4xLILineLow()
 *
 *         Grayscale and color scaling by closest pixel sampling
 *               static l_int32    scaleBySamplingLow()
 *
 *         Color and grayscale downsampling with (antialias) lowpass filter
 *               static l_int32    scaleSmoothLow()
 *               static void       scaleRGBToGray2Low()
 *
 *         Color and grayscale downsampling with (antialias) area mapping
 *               static l_int32    scaleColorAreaMapLow()
 *               static l_int32    scaleGrayAreaMapLow()
 *               static l_int32    scaleAreaMapLow2()
 *
 *         Binary scaling by closest pixel sampling
 *               static l_int32    scaleBinaryLow()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void scaleColorLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleColor2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleColor2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag); static void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleGray2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag); static void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleGray4xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag); static l_int32 scaleBySamplingLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_float32 shiftx, l_float32 shifty); static l_int32 scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_int32 size); static void scaleRGBToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 rwt, l_float32 gwt, l_float32 bwt); static void scaleColorAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleGrayAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls); static void scaleAreaMapLow2(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls); static l_int32 scaleBinaryLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls, l_float32 shiftx, l_float32 shifty); #ifndef NO_CONSOLE_IO #define DEBUG_OVERFLOW 0 #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Top level scaling dispatcher * *------------------------------------------------------------------*/ /*! * \brief pixScale() * * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp * \param[in] scalex, scaley * \return pixd, or NULL on error * * This function scales 32 bpp RGB; 2, 4 or 8 bpp palette color; * 2, 4, 8 or 16 bpp gray; and binary images. * * When the input has palette color, the colormap is removed and * the result is either 8 bpp gray or 32 bpp RGB, depending on whether * the colormap has color entries. Images with 2, 4 or 16 bpp are * converted to 8 bpp. * * Because pixScale is meant to be a very simple interface to a * number of scaling functions, including the use of unsharp masking, * the type of scaling and the sharpening parameters are chosen * by default. Grayscale and color images are scaled using one * of five methods, depending on the scale factors: * 1. antialiased subsampling (lowpass filtering followed by * subsampling, implemented by convolution, for tiny scale factors: * min(scalex, scaley) < 0.02. * 2. antialiased subsampling (implemented by area mapping, for * small scale factors: * max(scalex, scaley) < 0.2 and min(scalex, scaley) >= 0.02. * 3. antialiased subsampling with sharpening, for scale factors * between 0.2 and 0.7 * 4. linear interpolation with sharpening, for scale factors between * 0.7 and 1.4 * 5. linear interpolation without sharpening, for scale factors >= 1.4. * * One could use subsampling for scale factors very close to 1.0, * because it preserves sharp edges. Linear interpolation blurs * edges because the dest pixels will typically straddle two src edge * pixels. Subsmpling removes entire columns and rows, so the edge is * not blurred. However, there are two reasons for not doing this. * First, it moves edges, so that a straight line at a large angle to * both horizontal and vertical will have noticeable kinks where * horizontal and vertical rasters are removed. Second, although it * is very fast, you get good results on sharp edges by applying * a sharpening filter. * * For images with sharp edges, sharpening substantially improves the * image quality for scale factors between about 0.2 and about 2.0. * pixScale uses a small amount of sharpening by default because * it strengthens edge pixels that are weak due to anti-aliasing. * The default sharpening factors are: * * for scaling factors < 0.7: sharpfract = 0.2 sharpwidth = 1 * * for scaling factors >= 0.7: sharpfract = 0.4 sharpwidth = 2 * The cases where the sharpening halfwidth is 1 or 2 have special * implementations and are about twice as fast as the general case. * * However, sharpening is computationally expensive, and one needs * to consider the speed-quality tradeoff: * * For upscaling of RGB images, linear interpolation plus default * sharpening is about 5 times slower than upscaling alone. * * For downscaling, area mapping plus default sharpening is * about 10 times slower than downscaling alone. * When the scale factor is larger than 1.4, the cost of sharpening, * which is proportional to image area, is very large compared to the * incremental quality improvement, so we cut off the default use of * sharpening at 1.4. Thus, for scale factors greater than 1.4, * pixScale only does linear interpolation. * * In many situations you will get a satisfactory result by scaling * without sharpening: call pixScaleGeneral with %sharpfract = 0.0. * Alternatively, if you wish to sharpen but not use the default * value, first call pixScaleGeneral with %sharpfract = 0.0, and * then sharpen explicitly using pixUnsharpMasking. * * Binary images are scaled to binary by sampling the closest pixel, * without any low-pass filtering averaging of neighboring pixels. * This will introduce aliasing for reductions. Aliasing can be * prevented by using pixScaleToGray instead. */ PIX * pixScale(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 sharpwidth; l_float32 maxscale, sharpfract; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Reduce the default sharpening factors by 2 if maxscale < 0.7 */ maxscale = L_MAX(scalex, scaley); sharpfract = (maxscale < 0.7) ? 0.2f : 0.4f; sharpwidth = (maxscale < 0.7) ? 1 : 2; return pixScaleGeneral(pixs, scalex, scaley, sharpfract, sharpwidth); } /*! * \brief pixScaleToSizeRel() * * \param[in] pixs * \param[in] delw change in width, in pixels; 0 means no change * \param[in] delh change in height, in pixels; 0 means no change * \return pixd, or NULL on error */ PIX * pixScaleToSizeRel(PIX *pixs, l_int32 delw, l_int32 delh) { l_int32 w, h, wd, hd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (delw == 0 && delh == 0) return pixCopy(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); wd = w + delw; hd = h + delh; if (wd <= 0 || hd <= 0) return (PIX *)ERROR_PTR("pix dimension reduced to 0", __func__, NULL); return pixScaleToSize(pixs, wd, hd); } /*! * \brief pixScaleToSize() * * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The output scaled image has the dimension(s) you specify:
 *          * To specify the width with isotropic scaling, set %hd = 0.
 *          * To specify the height with isotropic scaling, set %wd = 0.
 *          * If both %wd and %hd are specified, the image is scaled
 *             (in general, anisotropically) to that size.
 *          * It is an error to set both %wd and %hd to 0.
 * 
*/ PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScale(pixs, scalex, scaley); } /*! * \brief pixScaleToResolution() * * \param[in] pixs * \param[in] target desired resolution * \param[in] assumed assumed resolution if not defined; typ. 300. * \param[out] pscalefact [optional] actual scaling factor used * \return pixd, or NULL on error */ PIX * pixScaleToResolution(PIX *pixs, l_float32 target, l_float32 assumed, l_float32 *pscalefact) { l_int32 xres; l_float32 factor; if (pscalefact) *pscalefact = 1.0; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (target <= 0) return (PIX *)ERROR_PTR("target resolution <= 0", __func__, NULL); xres = pixGetXRes(pixs); if (xres <= 0) { if (assumed == 0) return pixCopy(NULL, pixs); xres = assumed; } factor = target / (l_float32)xres; if (pscalefact) *pscalefact = factor; return pixScale(pixs, factor, factor); } /*! * \brief pixScaleGeneral() * * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \param[in] sharpfract use 0.0 to skip sharpening * \param[in] sharpwidth halfwidth of low-pass filter; typ. 1 or 2 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See pixScale() for usage.
 *      (2) This interface may change in the future, as other special
 *          cases are added.
 *      (3) For tiny scaling factors
 *            minscale < 0.02:        use a simple lowpass filter
 *      (4) The actual sharpening factors used depend on the maximum
 *          of the two scale factors (maxscale):
 *            maxscale <= 0.2:        no sharpening
 *            0.2 < maxscale < 1.4:   uses the input parameters
 *            maxscale >= 1.4:        no sharpening
 *      (5) To avoid sharpening for grayscale and color images with
 *          scaling factors between 0.2 and 1.4, call this function
 *          with %sharpfract == 0.0.
 *      (6) To use arbitrary sharpening in conjunction with scaling,
 *          call this function with %sharpfract = 0.0, and follow this
 *          with a call to pixUnsharpMasking() with your chosen parameters.
 * 
*/ PIX * pixScaleGeneral(PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth) { l_int32 d; l_float32 maxscale, minscale; PIX *pix1, *pix2, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not {1,2,4,8,16,32} bpp", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", __func__, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (d == 1) return pixScaleBinary(pixs, scalex, scaley); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pix1 = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, NULL); /* Scale (up or down) */ d = pixGetDepth(pix1); maxscale = L_MAX(scalex, scaley); minscale = L_MIN(scalex, scaley); if (maxscale < 0.7) { /* use low-pass filter for anti-aliasing */ if (minscale < 0.02) { /* whole-pixel low-pass filter */ pix2 = pixScaleSmooth(pix1, scalex, scaley); } else { /* fractional pixel low-pass filter */ pix2 = pixScaleAreaMap(pix1, scalex, scaley); } if (maxscale > 0.2 && sharpfract > 0.0 && sharpwidth > 0) { pixd = pixUnsharpMasking(pix2, sharpwidth, sharpfract); } else { pixd = pixClone(pix2); } } else { /* use linear interpolation */ if (d == 8) { pix2 = pixScaleGrayLI(pix1, scalex, scaley); } else { /* d == 32 */ pix2 = pixScaleColorLI(pix1, scalex, scaley); } if (maxscale < 1.4 && sharpfract > 0.0 && sharpwidth > 0) { pixd = pixUnsharpMasking(pix2, sharpwidth, sharpfract); } else { pixd = pixClone(pix2); } } pixDestroy(&pix1); pixDestroy(&pix2); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*------------------------------------------------------------------* * Scaling by linear interpolation * *------------------------------------------------------------------*/ /*! * \brief pixScaleLI() * * \param[in] pixs 2, 4, 8 or 32 bpp; with or without colormap * \param[in] scalex must be >= 0.7 * \param[in] scaley must be >= 0.7 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function should only be used when the scale factors are
 *          greater than or equal to 0.7, and typically greater than 1.
 *          If both scale factors are smaller than 0.7, we issue a warning
 *          and call pixScaleGeneral(), which will invoke area mapping
 *          without sharpening.
 *      (2) This works on 2, 4, 8, 16 and 32 bpp images, as well as on
 *          2, 4 and 8 bpp images that have a colormap.  If there is a
 *          colormap, it is removed to either gray or RGB, depending
 *          on the colormap.
 *      (3) This does a linear interpolation on the src image.
 *      (4) It dispatches to much faster implementations for
 *          the special cases of 2x and 4x expansion.
 * 
*/ PIX * pixScaleLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 d; l_float32 maxscale; PIX *pixt, *pixd; if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", __func__, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", __func__); return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not {2,4,8,16,32} bpp", __func__, NULL); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); d = pixGetDepth(pixt); if (d == 8) pixd = pixScaleGrayLI(pixt, scalex, scaley); else /* d == 32 */ pixd = pixScaleColorLI(pixt, scalex, scaley); pixDestroy(&pixt); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixScaleColorLI() * * \param[in] pixs 32 bpp, representing rgb * \param[in] scalex must be >= 0.7 * \param[in] scaley must be >= 0.7 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) If both scale factors are smaller than 0.7, we issue a warning
 *          and call pixScaleGeneral(), which will invoke area mapping
 *          without sharpening.  This is particularly important for
 *          document images with sharp edges.
 *      (2) For the general case, it's about 4x faster to manipulate
 *          the color pixels directly, rather than to make images
 *          out of each of the 3 components, scale each component
 *          using the pixScaleGrayLI(), and combine the results back
 *          into an rgb image.
 * 
*/ PIX * pixScaleColorLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; l_float32 maxscale; PIX *pixd; if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", __func__); return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); } /* Do fast special cases if possible */ if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (scalex == 2.0 && scaley == 2.0) return pixScaleColor2xLI(pixs); if (scalex == 4.0 && scaley == 4.0) return pixScaleColor4xLI(pixs); /* General case */ pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleColorLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixScaleColor2xLI() * * \param[in] pixs 32 bpp, representing rgb * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a special case of linear interpolated scaling,
 *          for 2x upscaling.  It is about 8x faster than using
 *          the generic pixScaleColorLI(), and about 4x faster than
 *          using the special 2x scale function pixScaleGray2xLI()
 *          on each of the three components separately.
 * 
*/ PIX * pixScaleColor2xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(2 * ws, 2 * hs, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleColor2xLILow(datad, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 2.0, 2.0); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixScaleColor4xLI() * * \param[in] pixs 32 bpp, representing rgb * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a special case of color linear interpolated scaling,
 *          for 4x upscaling.  It is about 3x faster than using
 *          the generic pixScaleColorLI().
 *      (2) This scales each component separately, using pixScaleGray4xLI().
 *          It would be about 4x faster to inline the color code properly,
 *          in analogy to scaleColor4xLILow(), and I leave this as
 *          an exercise for someone who really needs it.
 * 
*/ PIX * pixScaleColor4xLI(PIX *pixs) { PIX *pixr, *pixg, *pixb; PIX *pixrs, *pixgs, *pixbs; PIX *pixd; if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", __func__, NULL); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrs = pixScaleGray4xLI(pixr); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgs = pixScaleGray4xLI(pixg); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbs = pixScaleGray4xLI(pixb); pixDestroy(&pixb); if ((pixd = pixCreateRGBImage(pixrs, pixgs, pixbs)) == NULL) { L_ERROR("pixd not made\n", __func__); } else { if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 4.0, 4.0); pixCopyInputFormat(pixd, pixs); } pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); return pixd; } /*! * \brief pixScaleGrayLI() * * \param[in] pixs 8 bpp grayscale, no cmap * \param[in] scalex must be >= 0.7 * \param[in] scaley must be >= 0.7 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function is appropriate for upscaling magnification, where the
 *          scale factor is > 1, as well as for a small amount of downscaling
 *          reduction, with scale factor >= 0.7.  If the scale factor is < 0.7,
 *          the best result is obtained by area mapping.
 *      (2) Here are some details:
 *          - For each pixel in the dest, this does a linear
 *            interpolation of 4 neighboring pixels in the src.
 *            Specifically, consider the UL corner of src and
 *            dest pixels.  The UL corner of the dest falls within
 *            a src pixel, whose four corners are the UL corners
 *            of 4 adjacent src pixels.  The value of the dest
 *            is taken by linear interpolation using the values of
 *            the four src pixels and the distance of the UL corner
 *            of the dest from each corner.
 *          - If the image is expanded so that the dest pixel is
 *            smaller than the src pixel, such interpolation
 *            is a reasonable approach.  This interpolation is
 *            also good for a small image reduction factor that
 *            is not more than a 2x reduction.
 *          - The linear interpolation algorithm for scaling is
 *            identical in form to the area-mapping algorithm
 *            for grayscale rotation.  The latter corresponds to a
 *            translation of each pixel without scaling.
 *          - This function is NOT optimal if the scaling involves
 *            a large reduction.  If the image is significantly
 *            reduced, so that the dest pixel is much larger than
 *            the src pixels, this interpolation, which is over src
 *            pixels only near the UL corner of the dest pixel,
 *            is not going to give a good area-mapping average.
 *            Because area mapping for image scaling is considerably
 *            more computationally intensive than linear interpolation,
 *            we choose not to use it.  For large image reduction,
 *            linear interpolation over adjacent src pixels
 *            degenerates asymptotically to subsampling.  But
 *            subsampling without a low-pass pre-filter causes
 *            aliasing by the nyquist theorem.  To avoid aliasing,
 *            a low-pass filter e.g., an averaging filter of
 *            size roughly equal to the dest pixel i.e., the reduction
 *            factor should be applied to the src before subsampling.
 *          - As an alternative to low-pass filtering and subsampling
 *            for large reduction factors, linear interpolation can
 *            also be done between the widely separated src pixels in
 *            which the corners of the dest pixel lie.  This also is
 *            not optimal, as it samples src pixels only near the
 *            corners of the dest pixel, and it is not implemented.
 * 
*/ PIX * pixScaleGrayLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; l_float32 maxscale; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", __func__, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", __func__); return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); } /* Do fast special cases if possible */ if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (scalex == 2.0 && scaley == 2.0) return pixScaleGray2xLI(pixs); if (scalex == 4.0 && scaley == 4.0) return pixScaleGray4xLI(pixs); /* General case */ pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyText(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGrayLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); return pixd; } /*! * \brief pixScaleGray2xLI() * * \param[in] pixs 8 bpp grayscale, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a special case of gray linear interpolated scaling,
 *          for 2x upscaling.  It is about 6x faster than using
 *          the generic pixScaleGrayLI().
 * 
*/ PIX * pixScaleGray2xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(2 * ws, 2 * hs, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGray2xLILow(datad, wpld, datas, ws, hs, wpls); return pixd; } /*! * \brief pixScaleGray4xLI() * * \param[in] pixs 8 bpp grayscale, not cmapped * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a special case of gray linear interpolated scaling,
 *          for 4x upscaling.  It is about 12x faster than using
 *          the generic pixScaleGrayLI().
 * 
*/ PIX * pixScaleGray4xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(4 * ws, 4 * hs, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGray4xLILow(datad, wpld, datas, ws, hs, wpls); return pixd; } /*------------------------------------------------------------------* * Scale 2x followed by binarization * *------------------------------------------------------------------*/ /*! * \brief pixScaleGray2xLIThresh() * * \param[in] pixs 8 bpp, not cmapped * \param[in] thresh between 0 and 256 * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does 2x upscale on pixs, using linear interpolation,
 *          followed by thresholding to binary.
 *      (2) Buffers are used to avoid making a large grayscale image.
 * 
*/ PIX * pixScaleGray2xLIThresh(PIX *pixs, l_int32 thresh) { l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad, *lines, *lined, *lineb; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); if (thresh < 0 || thresh > 256) return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 2 * ws; hd = 2 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffer for 2 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", __func__, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) { LEPT_FREE(lineb); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Do all but last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; /* do 2 dest lines at a time */ scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 0); thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); } /* Do last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 1); thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); LEPT_FREE(lineb); return pixd; } /*! * \brief pixScaleGray2xLIDither() * * \param[in] pixs 8 bpp, not cmapped * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does 2x upscale on pixs, using linear interpolation,
 *          followed by Floyd-Steinberg dithering to binary.
 *      (2) Buffers are used to avoid making a large grayscale image.
 *          ~ Two line buffers are used for the src, required for the 2x
 *            LI upscale.
 *          ~ Three line buffers are used for the intermediate image.
 *            Two are filled with each 2xLI row operation; the third is
 *            needed because the upscale and dithering ops are out of sync.
 * 
*/ PIX * pixScaleGray2xLIDither(PIX *pixs) { l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad; l_uint32 *lined; l_uint32 *lineb = NULL; /* 2 intermediate buffer lines */ l_uint32 *linebp = NULL; /* 1 intermediate buffer line */ l_uint32 *bufs = NULL; /* 2 source buffer lines */ PIX *pixd = NULL; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 2 * ws; hd = 2 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffers for 2 lines of src image */ if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs not made", __func__, NULL); /* Make line buffer for 2 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) { L_ERROR("lineb not made\n", __func__); goto cleanup; } /* Make line buffer for 1 line of virtual intermediate image */ if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb, sizeof(l_uint32))) == NULL) { L_ERROR("linebp not made\n", __func__); goto cleanup; } /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup; } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Start with the first src and the first dest line */ memcpy(bufs, datas, 4 * wpls); /* first src line */ memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ lined = datad; ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 1st d line */ /* Do all but last src line */ for (i = 1; i < hsm; i++) { memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); memcpy(linebp, lineb + wplb, 4 * wplb); scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ lined = datad + 2 * i * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* odd dest line */ ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* even dest line */ } /* Do the last src line and the last 3 dest lines */ memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ memcpy(linebp, lineb + wplb, 4 * wplb); /* 1 i line */ scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 2 i lines */ ditherToBinaryLineLow(lined + wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* odd dest line */ ditherToBinaryLineLow(lined + 2 * wpld, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* even dest line */ ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + wplb, NULL, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); /* last dest line */ cleanup: LEPT_FREE(bufs); LEPT_FREE(lineb); LEPT_FREE(linebp); return pixd; } /*------------------------------------------------------------------* * Scale 4x followed by binarization * *------------------------------------------------------------------*/ /*! * \brief pixScaleGray4xLIThresh() * * \param[in] pixs 8 bpp * \param[in] thresh between 0 and 256 * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does 4x upscale on pixs, using linear interpolation,
 *          followed by thresholding to binary.
 *      (2) Buffers are used to avoid making a large grayscale image.
 *      (3) If a full 4x expanded grayscale image can be kept in memory,
 *          this function is only about 10% faster than separately doing
 *          a linear interpolation to a large grayscale image, followed
 *          by thresholding to binary.
 * 
*/ PIX * pixScaleGray4xLIThresh(PIX *pixs, l_int32 thresh) { l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad, *lines, *lined, *lineb; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); if (thresh < 0 || thresh > 256) return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 4 * ws; hd = 4 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffer for 4 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", __func__, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) { LEPT_FREE(lineb); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Do all but last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; /* do 4 dest lines at a time */ scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 0); for (j = 0; j < 4; j++) { thresholdToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, 8, thresh); } } /* Do last src line */ lines = datas + hsm * wpls; lined = datad + 4 * hsm * wpld; scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 1); for (j = 0; j < 4; j++) { thresholdToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, 8, thresh); } LEPT_FREE(lineb); return pixd; } /*! * \brief pixScaleGray4xLIDither() * * \param[in] pixs 8 bpp, not cmapped * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does 4x upscale on pixs, using linear interpolation,
 *          followed by Floyd-Steinberg dithering to binary.
 *      (2) Buffers are used to avoid making a large grayscale image.
 *          ~ Two line buffers are used for the src, required for the
 *            4xLI upscale.
 *          ~ Five line buffers are used for the intermediate image.
 *            Four are filled with each 4xLI row operation; the fifth
 *            is needed because the upscale and dithering ops are
 *            out of sync.
 *      (3) If a full 4x expanded grayscale image can be kept in memory,
 *          this function is only about 5% faster than separately doing
 *          a linear interpolation to a large grayscale image, followed
 *          by error-diffusion dithering to binary.
 * 
*/ PIX * pixScaleGray4xLIDither(PIX *pixs) { l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad; l_uint32 *lined; l_uint32 *lineb = NULL; /* 4 intermediate buffer lines */ l_uint32 *linebp = NULL; /* 1 intermediate buffer line */ l_uint32 *bufs = NULL; /* 2 source buffer lines */ PIX *pixd = NULL; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 4 * ws; hd = 4 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffers for 2 lines of src image */ if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs not made", __func__, NULL); /* Make line buffer for 4 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) { L_ERROR("lineb not made\n", __func__); goto cleanup; } /* Make line buffer for 1 line of virtual intermediate image */ if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb, sizeof(l_uint32))) == NULL) { L_ERROR("linebp not made\n", __func__); goto cleanup; } /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) { L_ERROR("pixd not made\n", __func__); goto cleanup; } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Start with the first src and the first 3 dest lines */ memcpy(bufs, datas, 4 * wpls); /* first src line */ memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ lined = datad; for (j = 0; j < 3; j++) { /* first 3 d lines of Q */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } /* Do all but last src line */ for (i = 1; i < hsm; i++) { memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); memcpy(linebp, lineb + 3 * wplb, 4 * wplb); scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ lined = datad + 4 * i * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 4th dest line of Q */ for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } } /* Do the last src line and the last 5 dest lines */ memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ memcpy(linebp, lineb + 3 * wplb, 4 * wplb); /* 1 b line */ scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 4 b lines */ lined = datad + 4 * hsm * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 4th dest line of Q */ for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } /* And finally, the last dest line */ ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + 3 * wplb, NULL, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); cleanup: LEPT_FREE(bufs); LEPT_FREE(lineb); LEPT_FREE(linebp); return pixd; } /*------------------------------------------------------------------* * Scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * \brief pixScaleBySampling() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function samples from the source without
 *          filtering.  As a result, aliasing will occur for
 *          subsampling (%scalex and/or %scaley < 1.0).
 *      (2) If %scalex == 1.0 and %scaley == 1.0, returns a copy.
 *      (3) For upscaling by an integer, use pixExpandReplicate().
 *      (4) By default, indexing for the sampled source pixel is done
 *          by rounding.  This shifts the source pixel sampling down
 *          and to the right by half a pixel, which has the effect of
 *          shifting the destination image up and to the left by a
 *          number of pixels approximately equal to half the scaling
 *          factor.  To avoid this shift in the destination image,
 *          call pixScalebySamplingWithShift() using 0 for both shifts.
 * 
*/ PIX * pixScaleBySampling(PIX *pixs, l_float32 scalex, l_float32 scaley) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); return pixScaleBySamplingWithShift(pixs, scalex, scaley, 0.5, 0.5); } /*! * \brief pixScaleBySamplingWithShift() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \param[in] shiftx 0.5 for default; 0.0 to mihimize edge effects * \param[in] shifty 0.5 for default; 0.0 to mihimize edge effects * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The @shiftx and @shifty parameters are usually unimportant.
 *          Visible artifacts are minimized by using 0.0.
 *          Allowed values are 0.0 and 0.5.
 * 
*/ PIX * pixScaleBySamplingWithShift(PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 shiftx, l_float32 shifty) { l_int32 ws, hs, d, wpls, wd, hd, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", __func__, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (shiftx != 0.0 && shiftx != 0.5) return (PIX *)ERROR_PTR("shiftx != 0.0 or 0.5", __func__, NULL); if (shifty != 0.0 && shifty != 0.5) return (PIX *)ERROR_PTR("shifty != 0.0 or 0.5", __func__, NULL); if ((d = pixGetDepth(pixs)) == 1) return pixScaleBinaryWithShift(pixs, scalex, scaley, shiftx, shifty); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopySpp(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleBySamplingLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls, shiftx, shifty); if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); return pixd; } /*! * \brief pixScaleBySamplingToSize() * * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This guarantees that the output scaled image has the
 *          dimension(s) you specify.
 *          ~ To specify the width with isotropic scaling, set %hd = 0.
 *          ~ To specify the height with isotropic scaling, set %wd = 0.
 *          ~ If both %wd and %hd are specified, the image is scaled
 *            (in general, anisotropically) to that size.
 *          ~ It is an error to set both %wd and %hd to 0.
 * 
*/ PIX * pixScaleBySamplingToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScaleBySampling(pixs, scalex, scaley); } /*! * \brief pixScaleByIntSampling() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp (all depths) * \param[in] factor integer subsampling; >= 1 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) Simple interface to pixScaleBySampling(), for isotropic
 *          integer reduction.  If %factor == 1, returns a copy.
 * 
*/ PIX * pixScaleByIntSampling(PIX *pixs, l_int32 factor) { l_float32 scale; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor <= 1) { if (factor < 1) L_ERROR("factor must be >= 1; returning a copy\n", __func__); return pixCopy(NULL, pixs); } scale = 1.f / (l_float32)factor; return pixScaleBySampling(pixs, scale, scale); } /*------------------------------------------------------------------* * Fast integer factor subsampling RGB to gray * *------------------------------------------------------------------*/ /*! * \brief pixScaleRGBToGrayFast() * * \param[in] pixs 32 bpp rgb * \param[in] factor integer reduction factor >= 1 * \param[in] color one of COLOR_RED, COLOR_GREEN, COLOR_BLUE * \return pixd 8 bpp, or NULL on error * *
 * Notes:
 *      (1) This does simultaneous subsampling by an integer factor and
 *          extraction of the color from the RGB pix.
 *      (2) It is designed for maximum speed, and is used for quickly
 *          generating a downsized grayscale image from a higher resolution
 *          RGB image.  This would typically be used for image analysis.
 *      (3) The standard color byte order (RGBA) is assumed.
 * 
*/ PIX * pixScaleRGBToGrayFast(PIX *pixs, l_int32 factor, l_int32 color) { l_int32 byteval, shift; l_int32 i, j, ws, hs, wd, hd, wpls, wpld; l_uint32 *datas, *words, *datad, *lined; l_float32 scale; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); if (color == COLOR_RED) shift = L_RED_SHIFT; else if (color == COLOR_GREEN) shift = L_GREEN_SHIFT; else if (color == COLOR_BLUE) shift = L_BLUE_SHIFT; else return (PIX *)ERROR_PTR("invalid color", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); scale = 1.f / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { words = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++, words += factor) { byteval = ((*words) >> shift) & 0xff; SET_DATA_BYTE(lined, j, byteval); } } return pixd; } /*! * \brief pixScaleRGBToBinaryFast() * * \param[in] pixs 32 bpp RGB * \param[in] factor integer reduction factor >= 1 * \param[in] thresh binarization threshold * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does simultaneous subsampling by an integer factor and
 *          conversion from RGB to gray to binary.
 *      (2) It is designed for maximum speed, and is used for quickly
 *          generating a downsized binary image from a higher resolution
 *          RGB image.  This would typically be used for image analysis.
 *      (3) It uses the green channel to represent the RGB pixel intensity.
 * 
*/ PIX * pixScaleRGBToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh) { l_int32 byteval; l_int32 i, j, ws, hs, wd, hd, wpls, wpld; l_uint32 *datas, *words, *datad, *lined; l_float32 scale; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); scale = 1. / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { words = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++, words += factor) { byteval = ((*words) >> L_GREEN_SHIFT) & 0xff; if (byteval < thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*! * \brief pixScaleGrayToBinaryFast() * * \param[in] pixs 8 bpp grayscale * \param[in] factor integer reduction factor >= 1 * \param[in] thresh binarization threshold * \return pixd 1 bpp, or NULL on error * *
 * Notes:
 *      (1) This does simultaneous subsampling by an integer factor and
 *          thresholding from gray to binary.
 *      (2) It is designed for maximum speed, and is used for quickly
 *          generating a downsized binary image from a higher resolution
 *          gray image.  This would typically be used for image analysis.
 * 
*/ PIX * pixScaleGrayToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh) { l_int32 byteval; l_int32 i, j, ws, hs, wd, hd, wpls, wpld, sj; l_uint32 *datas, *datad, *lines, *lined; l_float32 scale; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", __func__, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("depth not 8 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); scale = 1.f / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0, sj = 0; j < wd; j++, sj += factor) { byteval = GET_DATA_BYTE(lines, sj); if (byteval < thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*------------------------------------------------------------------* * Downscaling with (antialias) smoothing * *------------------------------------------------------------------*/ /*! * \brief pixScaleSmooth() * * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap * \param[in] scalex must be < 0.7 * \param[in] scaley must be < 0.7 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function should only be used when the scale factors are less
 *          than 0.7.  If either scale factor is >= 0.7, issue a warning
 *          and call pixScaleGeneral(), which will invoke linear interpolation
 *          without sharpening.
 *      (2) This works only on 2, 4, 8 and 32 bpp images, and if there is
 *          a colormap, it is removed by converting to RGB.
 *      (3) It does simple (flat filter) convolution, with a filter size
 *          commensurate with the amount of reduction, to avoid antialiasing.
 *      (4) It does simple subsampling after smoothing, which is appropriate
 *          for this range of scaling.  Linear interpolation gives essentially
 *          the same result with more computation for these scale factors,
 *          so we don't use it.
 *      (5) The result is the same as doing a full block convolution followed by
 *          subsampling, but this is faster because the results of the block
 *          convolution are only computed at the subsampling locations.
 *          In fact, the computation time is approximately independent of
 *          the scale factor, because the convolution kernel is adjusted
 *          so that each source pixel is summed approximately once.
 * 
*/ PIX * pixScaleSmooth(PIX *pix, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, d, wd, hd, wpls, wpld, isize; l_uint32 val; l_uint32 *datas, *datad; l_float32 minscale, size; PIX *pixs, *pixd; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); if (scalex >= 0.7 || scaley >= 0.7) { L_WARNING("scaling factor not < 0.7; do regular scaling\n", __func__); return pixScaleGeneral(pix, scalex, scaley, 0.0, 0); } d = pixGetDepth(pix); if (d != 2 && d != 4 && d !=8 && d != 32) return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", __func__, NULL); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixs = pixConvertTo8Or32(pix, L_CLONE, 0)) == NULL) return (PIX *)ERROR_PTR("pixs not made", __func__, NULL); d = pixGetDepth(pixs); /* If 1.42 < 1/minscale < 2.5, use isize = 2 * If 2.5 =< 1/minscale < 3.5, use isize = 3, etc. * Under no conditions use isize < 2 */ minscale = L_MIN(scalex, scaley); size = 1.0f / minscale; /* ideal filter full width */ isize = L_MIN(10000, L_MAX(2, (l_int32)(size + 0.5))); pixGetDimensions(pixs, &ws, &hs, NULL); if ((ws < isize) || (hs < isize)) { pixd = pixCreate(1, 1, d); pixGetPixel(pixs, ws / 2, hs / 2, &val); pixSetPixel(pixd, 0, 0, val); L_WARNING("ridiculously small scaling factor %f\n", __func__, minscale); pixDestroy(&pixs); return pixd; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = L_MAX(1, (l_int32)(scalex * (l_float32)ws + 0.5)); hd = L_MAX(1, (l_int32)(scaley * (l_float32)hs + 0.5)); if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleSmoothLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls, isize); if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); pixDestroy(&pixs); return pixd; } /*! * \brief pixScaleSmoothToSize() * * \param[in] pixs 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See notes in pixScaleSmooth().
 *      (2) The output scaled image has the dimension(s) you specify:
 *          - To specify the width with isotropic scaling, set %hd = 0.
 *          - To specify the height with isotropic scaling, set %wd = 0.
 *          - If both %wd and %hd are specified, the image is scaled
 *             (in general, anisotropically) to that size.
 *          - It is an error to set both %wd and %hd to 0.
 * 
*/ PIX * pixScaleSmoothToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScaleSmooth(pixs, scalex, scaley); } /*! * \brief pixScaleRGBToGray2() * * \param[in] pixs 32 bpp rgb * \param[in] rwt, gwt, bwt must sum to 1.0 * \return pixd, 8 bpp, 2x reduced, or NULL on error */ PIX * pixScaleRGBToGray2(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 wd, hd, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", __func__, NULL); if (rwt + gwt + bwt < 0.98 || rwt + gwt + bwt > 1.02) return (PIX *)ERROR_PTR("sum of wts should be 1.0", __func__, NULL); wd = pixGetWidth(pixs) / 2; hd = pixGetHeight(pixs) / 2; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); scaleRGBToGray2Low(datad, wd, hd, wpld, datas, wpls, rwt, gwt, bwt); return pixd; } /*------------------------------------------------------------------* * Downscaling with (antialias) area mapping * *------------------------------------------------------------------*/ /*! * \brief pixScaleAreaMap() * * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap * \param[in] scalex must be < 0.7; minimum is 0.02 * \param[in] scaley must be < 0.7; minimum is 0.02 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This is a low-pass filter that averages over fractional pixels.
 *          It should only be used when the scale factors are less than 0.7.
 *          If either scale factor is greater than or equal to 0.7, we
 *          issue a warning and call pixScaleGeneral(), which will invoke
 *          linear interpolation without sharpening.
 *      (2) The minimum scale factor allowed for area mapping reduction
 *          is 0.02.  Various overflows will occur when scale factors are
 *          less than about 1/256.  If a scale factor smaller than 0.02
 *          is given, we use pixScaleSmooth(), which is a low-pass filter
 *          that averages over entire pixels.
 *      (3) This works only on 2, 4, 8 and 32 bpp images.  If there is
 *          a colormap, it is removed by converting to RGB.  In other
 *          cases, we issue a warning and call pixScaleGeneral().
 *      (4) This is faster than pixScale() because it does not do sharpening.
 *      (5) It does a relatively expensive area mapping computation, to
 *          avoid antialiasing.  It is about 2x slower than pixScaleSmooth(),
 *          but the results are much better on fine text.
 *      (6) pixScaleAreaMap2() is typically about 7x faster for the special
 *          case of 2x reduction for color images, and about 9x faster
 *          for grayscale images.  Surprisingly, the improvement in speed
 *          when using a cascade of 2x reductions for small scale factors is
 *          less than one might expect, and in most situations gives
 *          poorer image quality.  But see (6).
 *      (7) For reductions between 0.35 and 0.5, a 2x area map reduction
 *          followed by using pixScaleGeneral() on a 2x larger scalefactor
 *          (which further reduces the image size using bilinear interpolation)
 *          would give a significant speed increase, with little loss of
 *          quality, but this is not enabled as it would break too many tests.
 *          For scaling factors below 0.35, scaling atomically is nearly
 *          as fast as using a cascade of 2x scalings, and gives
 *          better results.
 * 
*/ PIX * pixScaleAreaMap(PIX *pix, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, d, wd, hd, wpls, wpld; l_uint32 *datas, *datad; l_float32 maxscale, minscale; PIX *pixs, *pixd, *pix1, *pix2, *pix3; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); d = pixGetDepth(pix); if (d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", __func__, NULL); minscale = L_MIN(scalex, scaley); if (minscale < 0.02) { /* too small for area mapping */ L_WARNING("tiny scaling factor; using pixScaleSmooth()\n", __func__); return pixScaleSmooth(pix, scalex, scaley); } maxscale = L_MAX(scalex, scaley); if (maxscale >= 0.7) { /* too large for area mapping */ L_WARNING("scaling factor >= 0.7; do regular scaling\n", __func__); return pixScaleGeneral(pix, scalex, scaley, 0.0, 0); } /* Special cases: 2x, 4x, 8x, 16x reduction */ if (scalex == 0.5 && scaley == 0.5) return pixScaleAreaMap2(pix); if (scalex == 0.25 && scaley == 0.25) { pix1 = pixScaleAreaMap2(pix); pixd = pixScaleAreaMap2(pix1); pixDestroy(&pix1); return pixd; } if (scalex == 0.125 && scaley == 0.125) { pix1 = pixScaleAreaMap2(pix); pix2 = pixScaleAreaMap2(pix1); pixd = pixScaleAreaMap2(pix2); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } if (scalex == 0.0625 && scaley == 0.0625) { pix1 = pixScaleAreaMap2(pix); pix2 = pixScaleAreaMap2(pix1); pix3 = pixScaleAreaMap2(pix2); pixd = pixScaleAreaMap2(pix3); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pixd; } #if 0 /* Not enabled because it breaks too many tests that rely on exact * pixel matches. */ /* Special case where it is significantly faster to downscale first * by 2x, with relatively little degradation in image quality. */ if (scalex > 0.35 && scalex < 0.5) { pix1 = pixScaleAreaMap2(pix); pixd = pixScaleAreaMap(pix1, 2.0 * scalex, 2.0 * scaley); pixDestroy(&pix1); return pixd; } #endif /* Remove colormap if necessary. * If 2 bpp or 4 bpp gray, convert to 8 bpp */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", __func__); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else if (d == 2 || d == 4) { pixs = pixConvertTo8(pix, FALSE); d = 8; } else { pixs = pixClone(pix); } pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if (wd < 1 || hd < 1) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd too small", __func__, NULL); } if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (d == 8) { scaleGrayAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); } else { /* RGB, d == 32 */ scaleColorAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); } pixDestroy(&pixs); return pixd; } /*! * \brief pixScaleAreaMap2() * * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function does an area mapping (average) for 2x
 *          reduction.
 *      (2) This works only on 2, 4, 8 and 32 bpp images.  If there is
 *          a colormap, it is removed by converting to RGB.
 *      (3) Compared to the general pixScaleAreaMap(), for this function
 *          gray processing is about 14x faster and color processing
 *          is about 4x faster.  Consequently, pixScaleAreaMap2() is
 *          incorporated into the general area map scaling function,
 *          for the special cases of 2x, 4x, 8x and 16x reduction.
 * 
*/ PIX * pixScaleAreaMap2(PIX *pix) { l_int32 wd, hd, d, wpls, wpld; l_uint32 *datas, *datad; PIX *pixs, *pixd; if (!pix) return (PIX *)ERROR_PTR("pix not defined", __func__, NULL); d = pixGetDepth(pix); if (d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", __func__, NULL); /* Remove colormap if necessary. * If 2 bpp or 4 bpp gray, convert to 8 bpp */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", __func__); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else if (d == 2 || d == 4) { pixs = pixConvertTo8(pix, FALSE); d = 8; } else { pixs = pixClone(pix); } wd = pixGetWidth(pixs) / 2; hd = pixGetHeight(pixs) / 2; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(wd, hd, d); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); scaleAreaMapLow2(datad, wd, hd, wpld, datas, d, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 0.5, 0.5); pixDestroy(&pixs); return pixd; } /*! * \brief pixScaleAreaMapToSize() * * \param[in] pixs 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap * \param[in] wd target width; use 0 if using height as target * \param[in] hd target height; use 0 if using width as target * \return pixd, or NULL on error * *
 * Notes:
 *      (1) See notes in pixScaleAreaMap().
 *      (2) The output scaled image has the dimension(s) you specify:
 *          - To specify the width with isotropic scaling, set %hd = 0.
 *          - To specify the height with isotropic scaling, set %wd = 0.
 *          - If both %wd and %hd are specified, the image is scaled
 *             (in general, anisotropically) to that size.
 *          - It is an error to set both %wd and %hd to 0.
 * 
*/ PIX * pixScaleAreaMapToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScaleAreaMap(pixs, scalex, scaley); } /*------------------------------------------------------------------* * Binary scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * \brief pixScaleBinary() * * \param[in] pixs 1 bpp * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This function samples from the source without
 *          filtering.  As a result, aliasing will occur for
 *          subsampling (scalex and scaley < 1.0).
 *      (2) By default, indexing for the sampled source pixel is done
 *          by rounding.  This shifts the source pixel sampling down
 *          and to the right by half a pixel, which has the effect of
 *          shifting the destination image up and to the left by a
 *          number of pixels approximately equal to half the scaling
 *          factor.  To avoid this shift in the destination image,
 *          call pixScalebySamplingWithShift() using 0 for both shifts.
 * 
*/ PIX * pixScaleBinary(PIX *pixs, l_float32 scalex, l_float32 scaley) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); return pixScaleBinaryWithShift(pixs, scalex, scaley, 0.5, 0.5); } /*! * \brief pixScaleBinaryWithShift() * * \param[in] pixs 1 bpp * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \param[in] shiftx 0.5 for default; 0.0 to mihimize edge effects * \param[in] shifty 0.5 for default; 0.0 to mihimize edge effects * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The @shiftx and @shifty parameters are usually unimportant.
 *          Visible artifacts are minimized by using 0.0.
 *          Allowed values are 0.0 and 0.5.
 * 
*/ PIX * pixScaleBinaryWithShift(PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 shiftx, l_float32 shifty) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", __func__, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (shiftx != 0.0 && shiftx != 0.5) return (PIX *)ERROR_PTR("shiftx != 0.0 or 0.5", __func__, NULL); if (shifty != 0.0 && shifty != 0.5) return (PIX *)ERROR_PTR("shifty != 0.0 or 0.5", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleBinaryLow(datad, wd, hd, wpld, datas, ws, hs, wpls, shiftx, shifty); return pixd; } /* ================================================================ * * Low level static functions * * ================================================================ */ /*------------------------------------------------------------------* * General linear interpolated color scaling * *------------------------------------------------------------------*/ /*! * \brief scaleColorLILow() * *
 * Notes:
 *      (1) We choose to divide each pixel into 16 x 16 sub-pixels.
 *          Linear interpolation is equivalent to finding the
 *          fractional area (i.e., number of sub-pixels divided
 *          by 256) associated with each of the four nearest src pixels,
 *          and weighting each pixel value by this fractional area.
 * 
*/ static void scaleColorLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ l_uint32 v00r, v01r, v10r, v11r, v00g, v01g, v10g, v11g; l_uint32 v00b, v01b, v10b, v11b, area00, area01, area10, area11; l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16.f * (l_float32)ws / (l_float32)wd; scy = 16.f * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { ypm = (l_int32)(scy * (l_float32)i); yp = ypm >> 4; yf = ypm & 0x0f; lined = datad + i * wpld; lines = datas + yp * wpls; for (j = 0; j < wd; j++) { xpm = (l_int32)(scx * (l_float32)j); xp = xpm >> 4; xf = xpm & 0x0f; /* Do bilinear interpolation. This is a simple * generalization of the calculation in scaleGrayLILow(). * Without this, we could simply subsample: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ pixels1 = *(lines + xp); if (xp > wm2 || yp > hm2) { if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ pixels2 = *(lines + xp + 1); pixels3 = pixels1; pixels4 = pixels2; } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ pixels2 = pixels1; pixels3 = *(lines + wpls + xp); pixels4 = pixels3; } else { /* pixels at LR corner */ pixels4 = pixels3 = pixels2 = pixels1; } } else { pixels2 = *(lines + xp + 1); pixels3 = *(lines + wpls + xp); pixels4 = *(lines + wpls + xp + 1); } area00 = (16 - xf) * (16 - yf); area10 = xf * (16 - yf); area01 = (16 - xf) * yf; area11 = xf * yf; v00r = area00 * ((pixels1 >> L_RED_SHIFT) & 0xff); v00g = area00 * ((pixels1 >> L_GREEN_SHIFT) & 0xff); v00b = area00 * ((pixels1 >> L_BLUE_SHIFT) & 0xff); v10r = area10 * ((pixels2 >> L_RED_SHIFT) & 0xff); v10g = area10 * ((pixels2 >> L_GREEN_SHIFT) & 0xff); v10b = area10 * ((pixels2 >> L_BLUE_SHIFT) & 0xff); v01r = area01 * ((pixels3 >> L_RED_SHIFT) & 0xff); v01g = area01 * ((pixels3 >> L_GREEN_SHIFT) & 0xff); v01b = area01 * ((pixels3 >> L_BLUE_SHIFT) & 0xff); v11r = area11 * ((pixels4 >> L_RED_SHIFT) & 0xff); v11g = area11 * ((pixels4 >> L_GREEN_SHIFT) & 0xff); v11b = area11 * ((pixels4 >> L_BLUE_SHIFT) & 0xff); pixel = (((v00r + v10r + v01r + v11r + 128) << 16) & 0xff000000) | (((v00g + v10g + v01g + v11g + 128) << 8) & 0x00ff0000) | ((v00b + v10b + v01b + v11b + 128) & 0x0000ff00); *(lined + j) = pixel; } } } /*------------------------------------------------------------------* * General linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * \brief scaleGrayLILow() * *
 * Notes:
 *      (1) We choose to divide each pixel into 16 x 16 sub-pixels.
 *          Linear interpolation is equivalent to finding the
 *          fractional area (i.e., number of sub-pixels divided
 *          by 256) associated with each of the four nearest src pixels,
 *          and weighting each pixel value by this fractional area.
 * 
*/ static void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ l_int32 v00, v01, v10, v11, v00_val, v01_val, v10_val, v11_val; l_uint8 val; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16.f * (l_float32)ws / (l_float32)wd; scy = 16.f * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { ypm = (l_int32)(scy * (l_float32)i); yp = ypm >> 4; yf = ypm & 0x0f; lined = datad + i * wpld; lines = datas + yp * wpls; for (j = 0; j < wd; j++) { xpm = (l_int32)(scx * (l_float32)j); xp = xpm >> 4; xf = xpm & 0x0f; /* Do bilinear interpolation. Without this, we could * simply subsample: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00_val = GET_DATA_BYTE(lines, xp); if (xp > wm2 || yp > hm2) { if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ v01_val = v00_val; v10_val = GET_DATA_BYTE(lines, xp + 1); v11_val = v10_val; } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ v01_val = GET_DATA_BYTE(lines + wpls, xp); v10_val = v00_val; v11_val = v01_val; } else { /* pixels at LR corner */ v10_val = v01_val = v11_val = v00_val; } } else { v10_val = GET_DATA_BYTE(lines, xp + 1); v01_val = GET_DATA_BYTE(lines + wpls, xp); v11_val = GET_DATA_BYTE(lines + wpls, xp + 1); } v00 = (16 - xf) * (16 - yf) * v00_val; v10 = xf * (16 - yf) * v10_val; v01 = (16 - xf) * yf * v01_val; v11 = xf * yf * v11_val; val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * 2x linear interpolated color scaling * *------------------------------------------------------------------*/ /*! * \brief scaleColor2xLILow() * *
 * Notes:
 *      (1) This is a special case of 2x expansion by linear
 *          interpolation.  Each src pixel contains 4 dest pixels.
 *          The 4 dest pixels in src pixel 1 are numbered at
 *          their UL corners.  The 4 dest pixels in src pixel 1
 *          are related to that src pixel and its 3 neighboring
 *          src pixels as follows:
 *
 *             1-----2-----|-----|-----|
 *             |     |     |     |     |
 *             |     |     |     |     |
 *  src 1 -->  3-----4-----|     |     |  <-- src 2
 *             |     |     |     |     |
 *             |     |     |     |     |
 *             |-----|-----|-----|-----|
 *             |     |     |     |     |
 *             |     |     |     |     |
 *  src 3 -->  |     |     |     |     |  <-- src 4
 *             |     |     |     |     |
 *             |     |     |     |     |
 *             |-----|-----|-----|-----|
 *
 *           dest      src
 *           ----      ---
 *           dp1    =  sp1
 *           dp2    =  (sp1 + sp2) / 2
 *           dp3    =  (sp1 + sp3) / 2
 *           dp4    =  (sp1 + sp2 + sp3 + sp4) / 4
 *
 *      (2) We iterate over the src pixels, and unroll the calculation
 *          for each set of 4 dest pixels corresponding to that src
 *          pixel, caching pixels for the next src pixel whenever possible.
 *          The method is exactly analogous to the one we use for
 *          scaleGray2xLILow() and its line version.
 * 
*/ static void scaleColor2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 2 dest lines at a time, * and for each src line, we're computing 2 dest lines. * Call these 2 dest lines: destline1 and destline2. * The first src line is used for destline 1. * On all but the last src line, both src lines are * used in the linear interpolation for destline2. * On the last src line, both destline1 and destline2 * are computed using only that src line (because there * isn't a lower src line). */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 1); } /*! * \brief scaleColor2xLILineLow() * * \param[in] lined ptr to top destline, to be made from current src line * \param[in] wpld * \param[in] lines ptr to current src line * \param[in] ws * \param[in] wpls * \param[in] lastlineflag 1 if last src line; 0 otherwise * \return void */ static void scaleColor2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm; l_uint32 rval1, rval2, rval3, rval4, gval1, gval2, gval3, gval4; l_uint32 bval1, bval2, bval3, bval4; l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; l_uint32 *linesp, *linedp; wsm = ws - 1; if (lastlineflag == 0) { linesp = lines + wpls; linedp = lined + wpld; pixels1 = *lines; pixels3 = *linesp; /* initialize with v(2) and v(4) */ rval2 = pixels1 >> 24; gval2 = (pixels1 >> 16) & 0xff; bval2 = (pixels1 >> 8) & 0xff; rval4 = pixels3 >> 24; gval4 = (pixels3 >> 16) & 0xff; bval4 = (pixels3 >> 8) & 0xff; for (j = 0, jd = 0; j < wsm; j++, jd += 2) { /* shift in previous src values */ rval1 = rval2; gval1 = gval2; bval1 = bval2; rval3 = rval4; gval3 = gval4; bval3 = bval4; /* get new src values */ pixels2 = *(lines + j + 1); pixels4 = *(linesp + j + 1); rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; rval4 = pixels4 >> 24; gval4 = (pixels4 >> 16) & 0xff; bval4 = (pixels4 >> 8) & 0xff; /* save dest values */ pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + jd) = pixel; /* pix 1 */ pixel = ((((rval1 + rval2) << 23) & 0xff000000) | (((gval1 + gval2) << 15) & 0x00ff0000) | (((bval1 + bval2) << 7) & 0x0000ff00)); *(lined + jd + 1) = pixel; /* pix 2 */ pixel = ((((rval1 + rval3) << 23) & 0xff000000) | (((gval1 + gval3) << 15) & 0x00ff0000) | (((bval1 + bval3) << 7) & 0x0000ff00)); *(linedp + jd) = pixel; /* pix 3 */ pixel = ((((rval1 + rval2 + rval3 + rval4) << 22) & 0xff000000) | (((gval1 + gval2 + gval3 + gval4) << 14) & 0x00ff0000) | (((bval1 + bval2 + bval3 + bval4) << 6) & 0x0000ff00)); *(linedp + jd + 1) = pixel; /* pix 4 */ } /* last src pixel on line */ rval1 = rval2; gval1 = gval2; bval1 = bval2; rval3 = rval4; gval3 = gval4; bval3 = bval4; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + 2 * wsm) = pixel; /* pix 1 */ *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ pixel = ((((rval1 + rval3) << 23) & 0xff000000) | (((gval1 + gval3) << 15) & 0x00ff0000) | (((bval1 + bval3) << 7) & 0x0000ff00)); *(linedp + 2 * wsm) = pixel; /* pix 3 */ *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ } else { /* last row of src pixels: lastlineflag == 1 */ linedp = lined + wpld; pixels2 = *lines; rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; for (j = 0, jd = 0; j < wsm; j++, jd += 2) { rval1 = rval2; gval1 = gval2; bval1 = bval2; pixels2 = *(lines + j + 1); rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + jd) = pixel; /* pix 1 */ *(linedp + jd) = pixel; /* pix 2 */ pixel = ((((rval1 + rval2) << 23) & 0xff000000) | (((gval1 + gval2) << 15) & 0x00ff0000) | (((bval1 + bval2) << 7) & 0x0000ff00)); *(lined + jd + 1) = pixel; /* pix 3 */ *(linedp + jd + 1) = pixel; /* pix 4 */ } rval1 = rval2; gval1 = gval2; bval1 = bval2; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + 2 * wsm) = pixel; /* pix 1 */ *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ *(linedp + 2 * wsm) = pixel; /* pix 3 */ *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ } } /*------------------------------------------------------------------* * 2x linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * \brief scaleGray2xLILow() * *
 * Notes:
 *      (1) This is a special case of 2x expansion by linear
 *          interpolation.  Each src pixel contains 4 dest pixels.
 *          The 4 dest pixels in src pixel 1 are numbered at
 *          their UL corners.  The 4 dest pixels in src pixel 1
 *          are related to that src pixel and its 3 neighboring
 *          src pixels as follows:
 *
 *             1-----2-----|-----|-----|
 *             |     |     |     |     |
 *             |     |     |     |     |
 *  src 1 -->  3-----4-----|     |     |  <-- src 2
 *             |     |     |     |     |
 *             |     |     |     |     |
 *             |-----|-----|-----|-----|
 *             |     |     |     |     |
 *             |     |     |     |     |
 *  src 3 -->  |     |     |     |     |  <-- src 4
 *             |     |     |     |     |
 *             |     |     |     |     |
 *             |-----|-----|-----|-----|
 *
 *           dest      src
 *           ----      ---
 *           dp1    =  sp1
 *           dp2    =  (sp1 + sp2) / 2
 *           dp3    =  (sp1 + sp3) / 2
 *           dp4    =  (sp1 + sp2 + sp3 + sp4) / 4
 *
 *      (2) We iterate over the src pixels, and unroll the calculation
 *          for each set of 4 dest pixels corresponding to that src
 *          pixel, caching pixels for the next src pixel whenever possible.
 * 
*/ static void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 2 dest lines at a time, * and for each src line, we're computing 2 dest lines. * Call these 2 dest lines: destline1 and destline2. * The first src line is used for destline 1. * On all but the last src line, both src lines are * used in the linear interpolation for destline2. * On the last src line, both destline1 and destline2 * are computed using only that src line (because there * isn't a lower src line). */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 1); } /*! * \brief scaleGray2xLILineLow() * * \param[in] lined ptr to top destline, to be made from current src line * \param[in] wpld * \param[in] lines ptr to current src line * \param[in] ws * \param[in] wpls * \param[in] lastlineflag 1 if last src line; 0 otherwise * \return void */ static void scaleGray2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm, w; l_uint32 sval1, sval2, sval3, sval4; l_uint32 *linesp, *linedp; l_uint32 words, wordsp, wordd, worddp; wsm = ws - 1; if (lastlineflag == 0) { linesp = lines + wpls; linedp = lined + wpld; /* Unroll the loop 4x and work on full words */ words = lines[0]; wordsp = linesp[0]; sval2 = (words >> 24) & 0xff; sval4 = (wordsp >> 24) & 0xff; for (j = 0, jd = 0, w = 0; j + 3 < wsm; j += 4, jd += 8, w++) { /* At the top of the loop, * words == lines[w], wordsp == linesp[w] * and the top bytes of those have been loaded into * sval2 and sval4. */ sval1 = sval2; sval2 = (words >> 16) & 0xff; sval3 = sval4; sval4 = (wordsp >> 16) & 0xff; wordd = (sval1 << 24) | (((sval1 + sval2) >> 1) << 16); worddp = (((sval1 + sval3) >> 1) << 24) | (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); sval1 = sval2; sval2 = (words >> 8) & 0xff; sval3 = sval4; sval4 = (wordsp >> 8) & 0xff; wordd |= (sval1 << 8) | ((sval1 + sval2) >> 1); worddp |= (((sval1 + sval3) >> 1) << 8) | ((sval1 + sval2 + sval3 + sval4) >> 2); lined[w * 2] = wordd; linedp[w * 2] = worddp; sval1 = sval2; sval2 = words & 0xff; sval3 = sval4; sval4 = wordsp & 0xff; wordd = (sval1 << 24) | /* pix 1 */ (((sval1 + sval2) >> 1) << 16); /* pix 2 */ worddp = (((sval1 + sval3) >> 1) << 24) | /* pix 3 */ (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); /* pix 4 */ /* Load the next word as we need its first byte */ words = lines[w + 1]; wordsp = linesp[w + 1]; sval1 = sval2; sval2 = (words >> 24) & 0xff; sval3 = sval4; sval4 = (wordsp >> 24) & 0xff; wordd |= (sval1 << 8) | /* pix 1 */ ((sval1 + sval2) >> 1); /* pix 2 */ worddp |= (((sval1 + sval3) >> 1) << 8) | /* pix 3 */ ((sval1 + sval2 + sval3 + sval4) >> 2); /* pix 4 */ lined[w * 2 + 1] = wordd; linedp[w * 2 + 1] = worddp; } /* Finish up the last word */ for (; j < wsm; j++, jd += 2) { sval1 = sval2; sval3 = sval4; sval2 = GET_DATA_BYTE(lines, j + 1); sval4 = GET_DATA_BYTE(linesp, j + 1); SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ SET_DATA_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ SET_DATA_BYTE(linedp, jd + 1, (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ } sval1 = sval2; sval3 = sval4; SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ SET_DATA_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ SET_DATA_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ #if DEBUG_UNROLLING #define CHECK_BYTE(a, b, c) if (GET_DATA_BYTE(a, b) != c) {\ lept_stderr("Error: mismatch at %d, %d vs %d\n", \ j, GET_DATA_BYTE(a, b), c); } sval2 = GET_DATA_BYTE(lines, 0); sval4 = GET_DATA_BYTE(linesp, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 2) { sval1 = sval2; sval3 = sval4; sval2 = GET_DATA_BYTE(lines, j + 1); sval4 = GET_DATA_BYTE(linesp, j + 1); CHECK_BYTE(lined, jd, sval1); /* pix 1 */ CHECK_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ CHECK_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ CHECK_BYTE(linedp, jd + 1, (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ } sval1 = sval2; sval3 = sval4; CHECK_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ CHECK_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ CHECK_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ CHECK_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ #undef CHECK_BYTE #endif } else { /* last row of src pixels: lastlineflag == 1 */ linedp = lined + wpld; sval2 = GET_DATA_BYTE(lines, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 2) { sval1 = sval2; sval2 = GET_DATA_BYTE(lines, j + 1); SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ SET_DATA_BYTE(linedp, jd, sval1); /* pix 3 */ SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ SET_DATA_BYTE(linedp, jd + 1, (sval1 + sval2) / 2); /* pix 4 */ } sval1 = sval2; SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ SET_DATA_BYTE(linedp, 2 * wsm, sval1); /* pix 3 */ SET_DATA_BYTE(linedp, 2 * wsm + 1, sval1); /* pix 4 */ } } /*------------------------------------------------------------------* * 4x linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * \brief scaleGray4xLILow() * *
 * Notes:
 *      (1) This is a special case of 4x expansion by linear
 *          interpolation.  Each src pixel contains 16 dest pixels.
 *          The 16 dest pixels in src pixel 1 are numbered at
 *          their UL corners.  The 16 dest pixels in src pixel 1
 *          are related to that src pixel and its 3 neighboring
 *          src pixels as follows:
 *
 *             1---2---3---4---|---|---|---|---|
 *             |   |   |   |   |   |   |   |   |
 *             5---6---7---8---|---|---|---|---|
 *             |   |   |   |   |   |   |   |   |
 *  src 1 -->  9---a---b---c---|---|---|---|---|  <-- src 2
 *             |   |   |   |   |   |   |   |   |
 *             d---e---f---g---|---|---|---|---|
 *             |   |   |   |   |   |   |   |   |
 *             |===|===|===|===|===|===|===|===|
 *             |   |   |   |   |   |   |   |   |
 *             |---|---|---|---|---|---|---|---|
 *             |   |   |   |   |   |   |   |   |
 *  src 3 -->  |---|---|---|---|---|---|---|---|  <-- src 4
 *             |   |   |   |   |   |   |   |   |
 *             |---|---|---|---|---|---|---|---|
 *             |   |   |   |   |   |   |   |   |
 *             |---|---|---|---|---|---|---|---|
 *
 *           dest      src
 *           ----      ---
 *           dp1    =  sp1
 *           dp2    =  (3 * sp1 + sp2) / 4
 *           dp3    =  (sp1 + sp2) / 2
 *           dp4    =  (sp1 + 3 * sp2) / 4
 *           dp5    =  (3 * sp1 + sp3) / 4
 *           dp6    =  (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16
 *           dp7    =  (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8
 *           dp8    =  (3 * sp1 + 9 * sp2 + 1 * sp3 + 3 * sp4) / 16
 *           dp9    =  (sp1 + sp3) / 2
 *           dp10   =  (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8
 *           dp11   =  (sp1 + sp2 + sp3 + sp4) / 4
 *           dp12   =  (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8
 *           dp13   =  (sp1 + 3 * sp3) / 4
 *           dp14   =  (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16
 *           dp15   =  (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8
 *           dp16   =  (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16
 *
 *      (2) We iterate over the src pixels, and unroll the calculation
 *          for each set of 16 dest pixels corresponding to that src
 *          pixel, caching pixels for the next src pixel whenever possible.
 * 
*/ static void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 4 dest lines at a time, * and for each src line, we're computing 4 dest lines. * Call these 4 dest lines: destline1 - destline4. * The first src line is used for destline 1. * Two src lines are used for all other dest lines, * except for the last 4 dest lines, which are computed * using only the last src line. */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 4 * hsm * wpld; scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 1); } /*! * \brief scaleGray4xLILineLow() * * \param[in] lined ptr to top destline, to be made from current src line * \param[in] wpld * \param[in] lines ptr to current src line * \param[in] ws * \param[in] wpls * \param[in] lastlineflag 1 if last src line; 0 otherwise * \return void */ static void scaleGray4xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm, wsm4; l_int32 s1, s2, s3, s4, s1t, s2t, s3t, s4t; l_uint32 *linesp, *linedp1, *linedp2, *linedp3; wsm = ws - 1; wsm4 = 4 * wsm; if (lastlineflag == 0) { linesp = lines + wpls; linedp1 = lined + wpld; linedp2 = lined + 2 * wpld; linedp3 = lined + 3 * wpld; s2 = GET_DATA_BYTE(lines, 0); s4 = GET_DATA_BYTE(linesp, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 4) { s1 = s2; s3 = s4; s2 = GET_DATA_BYTE(lines, j + 1); s4 = GET_DATA_BYTE(linesp, j + 1); s1t = 3 * s1; s2t = 3 * s2; s3t = 3 * s3; s4t = 3 * s4; SET_DATA_BYTE(lined, jd, s1); /* d1 */ SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4); /* d2 */ SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2); /* d3 */ SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4); /* d4 */ SET_DATA_BYTE(linedp1, jd, (s1t + s3) / 4); /* d5 */ SET_DATA_BYTE(linedp1, jd + 1, (9*s1 + s2t + s3t + s4) / 16); /*d6*/ SET_DATA_BYTE(linedp1, jd + 2, (s1t + s2t + s3 + s4) / 8); /* d7 */ SET_DATA_BYTE(linedp1, jd + 3, (s1t + 9*s2 + s3 + s4t) / 16);/*d8*/ SET_DATA_BYTE(linedp2, jd, (s1 + s3) / 2); /* d9 */ SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2 + s3t + s4) / 8);/* d10 */ SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2 + s3 + s4) / 4); /* d11 */ SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t + s3 + s4t) / 8);/* d12 */ SET_DATA_BYTE(linedp3, jd, (s1 + s3t) / 4); /* d13 */ SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2 + 9*s3 + s4t) / 16);/*d14*/ SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2 + s3t + s4t) / 8); /* d15 */ SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t + s3t + 9*s4) / 16);/*d16*/ } s1 = s2; s3 = s4; s1t = 3 * s1; s3t = 3 * s3; SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ SET_DATA_BYTE(linedp1, wsm4, (s1t + s3) / 4); /* d5 */ SET_DATA_BYTE(linedp1, wsm4 + 1, (s1t + s3) / 4); /* d6 */ SET_DATA_BYTE(linedp1, wsm4 + 2, (s1t + s3) / 4); /* d7 */ SET_DATA_BYTE(linedp1, wsm4 + 3, (s1t + s3) / 4); /* d8 */ SET_DATA_BYTE(linedp2, wsm4, (s1 + s3) / 2); /* d9 */ SET_DATA_BYTE(linedp2, wsm4 + 1, (s1 + s3) / 2); /* d10 */ SET_DATA_BYTE(linedp2, wsm4 + 2, (s1 + s3) / 2); /* d11 */ SET_DATA_BYTE(linedp2, wsm4 + 3, (s1 + s3) / 2); /* d12 */ SET_DATA_BYTE(linedp3, wsm4, (s1 + s3t) / 4); /* d13 */ SET_DATA_BYTE(linedp3, wsm4 + 1, (s1 + s3t) / 4); /* d14 */ SET_DATA_BYTE(linedp3, wsm4 + 2, (s1 + s3t) / 4); /* d15 */ SET_DATA_BYTE(linedp3, wsm4 + 3, (s1 + s3t) / 4); /* d16 */ } else { /* last row of src pixels: lastlineflag == 1 */ linedp1 = lined + wpld; linedp2 = lined + 2 * wpld; linedp3 = lined + 3 * wpld; s2 = GET_DATA_BYTE(lines, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 4) { s1 = s2; s2 = GET_DATA_BYTE(lines, j + 1); s1t = 3 * s1; s2t = 3 * s2; SET_DATA_BYTE(lined, jd, s1); /* d1 */ SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4 ); /* d2 */ SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2 ); /* d3 */ SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4 ); /* d4 */ SET_DATA_BYTE(linedp1, jd, s1); /* d5 */ SET_DATA_BYTE(linedp1, jd + 1, (s1t + s2) / 4 ); /* d6 */ SET_DATA_BYTE(linedp1, jd + 2, (s1 + s2) / 2 ); /* d7 */ SET_DATA_BYTE(linedp1, jd + 3, (s1 + s2t) / 4 ); /* d8 */ SET_DATA_BYTE(linedp2, jd, s1); /* d9 */ SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2) / 4 ); /* d10 */ SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2) / 2 ); /* d11 */ SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t) / 4 ); /* d12 */ SET_DATA_BYTE(linedp3, jd, s1); /* d13 */ SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2) / 4 ); /* d14 */ SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2) / 2 ); /* d15 */ SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t) / 4 ); /* d16 */ } s1 = s2; SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ SET_DATA_BYTE(linedp1, wsm4, s1); /* d5 */ SET_DATA_BYTE(linedp1, wsm4 + 1, s1); /* d6 */ SET_DATA_BYTE(linedp1, wsm4 + 2, s1); /* d7 */ SET_DATA_BYTE(linedp1, wsm4 + 3, s1); /* d8 */ SET_DATA_BYTE(linedp2, wsm4, s1); /* d9 */ SET_DATA_BYTE(linedp2, wsm4 + 1, s1); /* d10 */ SET_DATA_BYTE(linedp2, wsm4 + 2, s1); /* d11 */ SET_DATA_BYTE(linedp2, wsm4 + 3, s1); /* d12 */ SET_DATA_BYTE(linedp3, wsm4, s1); /* d13 */ SET_DATA_BYTE(linedp3, wsm4 + 1, s1); /* d14 */ SET_DATA_BYTE(linedp3, wsm4 + 2, s1); /* d15 */ SET_DATA_BYTE(linedp3, wsm4 + 3, s1); /* d16 */ } } /*------------------------------------------------------------------* * Grayscale and color scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * \brief scaleBySamplingLow() * *
 * Notes:
 *      (1) The dest must be cleared prior to this operation,
 *          and we clear it here in the low-level code.
 *      (2) We reuse dest pixels and dest pixel rows whenever
 *          possible.  This speeds the upscaling; downscaling
 *          is done by strict subsampling and is unaffected.
 *      (3) Because we are sampling and not interpolating, this
 *          routine works directly, without conversion to full
 *          RGB color, for 2, 4 or 8 bpp palette color images.
 * 
*/ static l_int32 scaleBySamplingLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_float32 shiftx, l_float32 shifty) { l_int32 i, j; l_int32 xs, prevxs, sval; l_int32 *srow, *scol; l_uint32 csval; l_uint32 *lines, *prevlines, *lined, *prevlined; l_float32 wratio, hratio; if (d != 2 && d != 4 && d !=8 && d != 16 && d != 32) return ERROR_INT("pixel depth not supported", __func__, 1); /* Clear dest */ memset(datad, 0, 4LL * hd * wpld); /* the source row corresponding to dest row i ==> srow[i] * the source col corresponding to dest col j ==> scol[j] */ if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", __func__, 1); if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { LEPT_FREE(srow); return ERROR_INT("scol not made", __func__, 1); } wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i + shifty), hs - 1); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j + shiftx), ws - 1); prevlines = NULL; for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; if (lines != prevlines) { /* make dest from new source row */ prevxs = -1; sval = 0; csval = 0; if (d == 2) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_DIBIT(lines, xs); SET_DATA_DIBIT(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_DIBIT(lined, j, sval); } } } else if (d == 4) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_QBIT(lines, xs); SET_DATA_QBIT(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_QBIT(lined, j, sval); } } } else if (d == 8) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_BYTE(lines, xs); SET_DATA_BYTE(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_BYTE(lined, j, sval); } } } else if (d == 16) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_TWO_BYTES(lines, xs); SET_DATA_TWO_BYTES(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_TWO_BYTES(lined, j, sval); } } } else { /* d == 32 */ for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ csval = lines[xs]; lined[j] = csval; prevxs = xs; } else { /* copy prev dest pix */ lined[j] = csval; } } } } else { /* lines == prevlines; copy prev dest row */ prevlined = lined - wpld; memcpy(lined, prevlined, 4 * wpld); } prevlines = lines; } LEPT_FREE(srow); LEPT_FREE(scol); return 0; } /*------------------------------------------------------------------* * Color and grayscale downsampling with (antialias) smoothing * *------------------------------------------------------------------*/ /*! * \brief scaleSmoothLow() * *
 * Notes:
 *      (1) This function is called on 8 or 32 bpp src and dest images.
 *      (2) size is the full width of the lowpass smoothing filter.
 *          It is correlated with the reduction ratio, being the
 *          nearest integer such that size is approximately equal to hs / hd.
 * 
*/ static l_int32 scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_int32 size) { l_int32 i, j, m, n, xstart; l_int32 val, rval, gval, bval; l_int32 *srow, *scol; l_uint32 *lines, *lined, *line, *ppixel; l_uint32 pixel; l_float32 wratio, hratio, norm; /* Clear dest */ memset(datad, 0, 4LL * wpld * hd); /* Each dest pixel at (j,i) is computed as the average of size^2 corresponding src pixels. We store the UL corner location of the square of src pixels that correspond to dest pixel (j,i). The are labeled by the arrays srow[i] and scol[j]. */ if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", __func__, 1); if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { LEPT_FREE(srow); return ERROR_INT("scol not made", __func__, 1); } norm = 1.f / (l_float32)(size * size); wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i), hs - size); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j), ws - size); /* For each dest pixel, compute average */ if (d == 8) { for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { xstart = scol[j]; val = 0; for (m = 0; m < size; m++) { line = lines + m * wpls; for (n = 0; n < size; n++) { val += GET_DATA_BYTE(line, xstart + n); } } val = (l_int32)((l_float32)val * norm); SET_DATA_BYTE(lined, j, val); } } } else { /* d == 32 */ for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { xstart = scol[j]; rval = gval = bval = 0; for (m = 0; m < size; m++) { ppixel = lines + m * wpls + xstart; for (n = 0; n < size; n++) { pixel = *(ppixel + n); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; } } rval = (l_int32)((l_float32)rval * norm); gval = (l_int32)((l_float32)gval * norm); bval = (l_int32)((l_float32)bval * norm); composeRGBPixel(rval, gval, bval, lined + j); } } } LEPT_FREE(srow); LEPT_FREE(scol); return 0; } /*! * \brief scaleRGBToGray2Low() * *
 * Notes:
 *      (1) This function is called with 32 bpp RGB src and 8 bpp,
 *          half-resolution dest.  The weights should add to 1.0.
 * 
*/ static void scaleRGBToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, val, rval, gval, bval; l_uint32 *lines, *lined; l_uint32 pixel; rwt *= 0.25; gwt *= 0.25; bwt *= 0.25; for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Sum each of the color components from 4 src pixels */ pixel = *(lines + 2 * j); rval = (pixel >> L_RED_SHIFT) & 0xff; gval = (pixel >> L_GREEN_SHIFT) & 0xff; bval = (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; /* Generate the dest byte as a weighted sum of the averages */ val = (l_int32)(rwt * rval + gwt * gval + bwt * bval); SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * General area mapped gray scaling * *------------------------------------------------------------------*/ /*! * \brief scaleColorAreaMapLow() * *
 * Notes:
 *      (1) This should only be used for downscaling.
 *          We choose to divide each pixel into 16 x 16 sub-pixels.
 *          This is much slower than scaleSmoothLow(), but it gives a
 *          better representation, esp. for downscaling factors between
 *          1.5 and 5.  All src pixels are subdivided into 256 sub-pixels,
 *          and are weighted by the number of sub-pixels covered by
 *          the dest pixel.  This is about 2x slower than scaleSmoothLow(),
 *          but the results are significantly better on small text.
 * 
*/ static void scaleColorAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, k, m, wm2, hm2; l_int32 area00, area10, area01, area11, areal, arear, areat, areab; l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ l_int32 delx, dely, area; l_int32 v00r, v00g, v00b; /* contrib. from UL src pixel */ l_int32 v01r, v01g, v01b; /* contrib. from LL src pixel */ l_int32 v10r, v10g, v10b; /* contrib from UR src pixel */ l_int32 v11r, v11g, v11b; /* contrib from LR src pixel */ l_int32 vinr, ving, vinb; /* contrib from all full interior src pixels */ l_int32 vmidr, vmidg, vmidb; /* contrib from side parts */ l_int32 rval, gval, bval; l_uint32 pixel00, pixel10, pixel01, pixel11, pixel; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16.f * (l_float32)ws / (l_float32)wd; scy = 16.f * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { yu = (l_int32)(scy * i); yl = (l_int32)(scy * (i + 1.0)); yup = yu >> 4; yuf = yu & 0x0f; ylp = yl >> 4; ylf = yl & 0x0f; dely = ylp - yup; lined = datad + i * wpld; lines = datas + yup * wpls; for (j = 0; j < wd; j++) { xu = (l_int32)(scx * j); xl = (l_int32)(scx * (j + 1.0)); xup = xu >> 4; xuf = xu & 0x0f; xlp = xl >> 4; xlf = xl & 0x0f; delx = xlp - xup; /* If near the edge, just use a src pixel value */ if (xlp > wm2 || ylp > hm2) { *(lined + j) = *(lines + xup); continue; } /* Area summed over, in subpixels. This varies * due to the quantization, so we can't simply take * the area to be a constant: area = scx * scy. */ area = ((16 - xuf) + 16 * (delx - 1) + xlf) * ((16 - yuf) + 16 * (dely - 1) + ylf); /* Do area map summation */ pixel00 = *(lines + xup); pixel10 = *(lines + xlp); pixel01 = *(lines + dely * wpls + xup); pixel11 = *(lines + dely * wpls + xlp); area00 = (16 - xuf) * (16 - yuf); area10 = xlf * (16 - yuf); area01 = (16 - xuf) * ylf; area11 = xlf * ylf; v00r = area00 * ((pixel00 >> L_RED_SHIFT) & 0xff); v00g = area00 * ((pixel00 >> L_GREEN_SHIFT) & 0xff); v00b = area00 * ((pixel00 >> L_BLUE_SHIFT) & 0xff); v10r = area10 * ((pixel10 >> L_RED_SHIFT) & 0xff); v10g = area10 * ((pixel10 >> L_GREEN_SHIFT) & 0xff); v10b = area10 * ((pixel10 >> L_BLUE_SHIFT) & 0xff); v01r = area01 * ((pixel01 >> L_RED_SHIFT) & 0xff); v01g = area01 * ((pixel01 >> L_GREEN_SHIFT) & 0xff); v01b = area01 * ((pixel01 >> L_BLUE_SHIFT) & 0xff); v11r = area11 * ((pixel11 >> L_RED_SHIFT) & 0xff); v11g = area11 * ((pixel11 >> L_GREEN_SHIFT) & 0xff); v11b = area11 * ((pixel11 >> L_BLUE_SHIFT) & 0xff); vinr = ving = vinb = 0; for (k = 1; k < dely; k++) { /* for full src pixels */ for (m = 1; m < delx; m++) { pixel = *(lines + k * wpls + xup + m); vinr += 256 * ((pixel >> L_RED_SHIFT) & 0xff); ving += 256 * ((pixel >> L_GREEN_SHIFT) & 0xff); vinb += 256 * ((pixel >> L_BLUE_SHIFT) & 0xff); } } vmidr = vmidg = vmidb = 0; areal = (16 - xuf) * 16; arear = xlf * 16; areat = 16 * (16 - yuf); areab = 16 * ylf; for (k = 1; k < dely; k++) { /* for left side */ pixel = *(lines + k * wpls + xup); vmidr += areal * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areal * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areal * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (k = 1; k < dely; k++) { /* for right side */ pixel = *(lines + k * wpls + xlp); vmidr += arear * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += arear * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += arear * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (m = 1; m < delx; m++) { /* for top side */ pixel = *(lines + xup + m); vmidr += areat * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areat * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areat * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (m = 1; m < delx; m++) { /* for bottom side */ pixel = *(lines + dely * wpls + xup + m); vmidr += areab * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areab * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areab * ((pixel >> L_BLUE_SHIFT) & 0xff); } /* Sum all the contributions */ rval = (v00r + v01r + v10r + v11r + vinr + vmidr + 128) / area; gval = (v00g + v01g + v10g + v11g + ving + vmidg + 128) / area; bval = (v00b + v01b + v10b + v11b + vinb + vmidb + 128) / area; #if DEBUG_OVERFLOW if (rval > 255) lept_stderr("rval ovfl: %d\n", rval); if (gval > 255) lept_stderr("gval ovfl: %d\n", gval); if (bval > 255) lept_stderr("bval ovfl: %d\n", bval); #endif /* DEBUG_OVERFLOW */ composeRGBPixel(rval, gval, bval, lined + j); } } } /*! * \brief scaleGrayAreaMapLow() * *
 * Notes:
 *      (1) This should only be used for downscaling.
 *          We choose to divide each pixel into 16 x 16 sub-pixels.
 *          This is about 2x slower than scaleSmoothLow(), but the results
 *          are significantly better on small text, esp. for downscaling
 *          factors between 1.5 and 5.  All src pixels are subdivided
 *          into 256 sub-pixels, and are weighted by the number of
 *          sub-pixels covered by the dest pixel.
 * 
*/ static void scaleGrayAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, k, m, wm2, hm2; l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ l_int32 delx, dely, area; l_int32 v00; /* contrib. from UL src pixel */ l_int32 v01; /* contrib. from LL src pixel */ l_int32 v10; /* contrib from UR src pixel */ l_int32 v11; /* contrib from LR src pixel */ l_int32 vin; /* contrib from all full interior src pixels */ l_int32 vmid; /* contrib from side parts that are full in 1 direction */ l_int32 val; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16.f * (l_float32)ws / (l_float32)wd; scy = 16.f * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { yu = (l_int32)(scy * i); yl = (l_int32)(scy * (i + 1.0)); yup = yu >> 4; yuf = yu & 0x0f; ylp = yl >> 4; ylf = yl & 0x0f; dely = ylp - yup; lined = datad + i * wpld; lines = datas + yup * wpls; for (j = 0; j < wd; j++) { xu = (l_int32)(scx * j); xl = (l_int32)(scx * (j + 1.0)); xup = xu >> 4; xuf = xu & 0x0f; xlp = xl >> 4; xlf = xl & 0x0f; delx = xlp - xup; /* If near the edge, just use a src pixel value */ if (xlp > wm2 || ylp > hm2) { SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xup)); continue; } /* Area summed over, in subpixels. This varies * due to the quantization, so we can't simply take * the area to be a constant: area = scx * scy. */ area = ((16 - xuf) + 16 * (delx - 1) + xlf) * ((16 - yuf) + 16 * (dely - 1) + ylf); /* Do area map summation */ v00 = (16 - xuf) * (16 - yuf) * GET_DATA_BYTE(lines, xup); v10 = xlf * (16 - yuf) * GET_DATA_BYTE(lines, xlp); v01 = (16 - xuf) * ylf * GET_DATA_BYTE(lines + dely * wpls, xup); v11 = xlf * ylf * GET_DATA_BYTE(lines + dely * wpls, xlp); for (vin = 0, k = 1; k < dely; k++) { /* for full src pixels */ for (m = 1; m < delx; m++) { vin += 256 * GET_DATA_BYTE(lines + k * wpls, xup + m); } } for (vmid = 0, k = 1; k < dely; k++) /* for left side */ vmid += (16 - xuf) * 16 * GET_DATA_BYTE(lines + k * wpls, xup); for (k = 1; k < dely; k++) /* for right side */ vmid += xlf * 16 * GET_DATA_BYTE(lines + k * wpls, xlp); for (m = 1; m < delx; m++) /* for top side */ vmid += 16 * (16 - yuf) * GET_DATA_BYTE(lines, xup + m); for (m = 1; m < delx; m++) /* for bottom side */ vmid += 16 * ylf * GET_DATA_BYTE(lines + dely * wpls, xup + m); val = (v00 + v01 + v10 + v11 + vin + vmid + 128) / area; #if DEBUG_OVERFLOW if (val > 255) lept_stderr("val overflow: %d\n", val); #endif /* DEBUG_OVERFLOW */ SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * 2x area mapped downscaling * *------------------------------------------------------------------*/ /*! * \brief scaleAreaMapLow2() * *
 * Notes:
 *      (1) This function is called with either 8 bpp gray or 32 bpp RGB.
 *          The result is a 2x reduced dest.
 * 
*/ static void scaleAreaMapLow2(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls) { l_int32 i, j, val, rval, gval, bval; l_uint32 *lines, *lined; l_uint32 pixel; if (d == 8) { for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Average each dest pixel using 4 src pixels */ val = GET_DATA_BYTE(lines, 2 * j); val += GET_DATA_BYTE(lines, 2 * j + 1); val += GET_DATA_BYTE(lines + wpls, 2 * j); val += GET_DATA_BYTE(lines + wpls, 2 * j + 1); val >>= 2; SET_DATA_BYTE(lined, j, val); } } } else { /* d == 32 */ for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Average each of the color components from 4 src pixels */ pixel = *(lines + 2 * j); rval = (pixel >> L_RED_SHIFT) & 0xff; gval = (pixel >> L_GREEN_SHIFT) & 0xff; bval = (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; composeRGBPixel(rval >> 2, gval >> 2, bval >> 2, &pixel); *(lined + j) = pixel; } } } } /*------------------------------------------------------------------* * Binary scaling by closest pixel sampling * *------------------------------------------------------------------*/ /* * \brief scaleBinaryLow() * *
 * Notes:
 *      (1) The dest must be cleared prior to this operation,
 *          and we clear it here in the low-level code.
 *      (2) We reuse dest pixels and dest pixel rows whenever
 *          possible for upscaling; downscaling is done by
 *          strict subsampling.
 * 
*/ static l_int32 scaleBinaryLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls, l_float32 shiftx, l_float32 shifty) { l_int32 i, j; l_int32 xs, prevxs, sval; l_int32 *srow, *scol; l_uint32 *lines, *prevlines, *lined, *prevlined; l_float32 wratio, hratio; /* Clear dest */ memset(datad, 0, 4LL * hd * wpld); /* The source row corresponding to dest row i ==> srow[i] * The source col corresponding to dest col j ==> scol[j] */ if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", __func__, 1); if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { LEPT_FREE(srow); return ERROR_INT("scol not made", __func__, 1); } wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i + shifty), hs - 1); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j + shiftx), ws - 1); prevlines = NULL; prevxs = -1; sval = 0; for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; if (lines != prevlines) { /* make dest from new source row */ for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ if ((sval = GET_DATA_BIT(lines, xs))) SET_DATA_BIT(lined, j); prevxs = xs; } else { /* copy prev dest pix, if set */ if (sval) SET_DATA_BIT(lined, j); } } } else { /* lines == prevlines; copy prev dest row */ prevlined = lined - wpld; memcpy(lined, prevlined, 4 * wpld); } prevlines = lines; } LEPT_FREE(srow); LEPT_FREE(scol); return 0; } leptonica-1.86.0/src/scale2.c000066400000000000000000002445041506303110300156710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file scale2.c *
 *         Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling)
 *               PIX      *pixScaleToGray()
 *               PIX      *pixScaleToGrayFast()
 *
 *         Scale-to-gray (1 bpp --> 8 bpp; integer downscaling)
 *               PIX      *pixScaleToGray2()
 *               PIX      *pixScaleToGray3()
 *               PIX      *pixScaleToGray4()
 *               PIX      *pixScaleToGray6()
 *               PIX      *pixScaleToGray8()
 *               PIX      *pixScaleToGray16()
 *
 *         Scale-to-gray by mipmap(1 bpp --> 8 bpp, arbitrary reduction)
 *               PIX      *pixScaleToGrayMipmap()
 *
 *         Grayscale scaling using mipmap
 *               PIX      *pixScaleMipmap()
 *
 *         Replicated (integer) expansion (all depths)
 *               PIX      *pixExpandReplicate()
 *
 *         Grayscale downscaling using min and max
 *               PIX      *pixScaleGrayMinMax()
 *               PIX      *pixScaleGrayMinMax2()
 *
 *         Grayscale downscaling using rank value
 *               PIX      *pixScaleGrayRankCascade()
 *               PIX      *pixScaleGrayRank2()
 *
 *         Helper function for transferring alpha with scaling
 *               l_int32   pixScaleAndTransferAlpha()
 *
 *         RGB scaling including alpha (blend) component
 *               PIX      *pixScaleWithAlpha()
 *
 *     Low-level static functions:
 *
 *         Scale-to-gray 2x
 *                  static void       scaleToGray2Low()
 *                  static l_uint32  *makeSumTabSG2()
 *                  static l_uint8   *makeValTabSG2()
 *
 *         Scale-to-gray 3x
 *                  static void       scaleToGray3Low()
 *                  static l_uint32  *makeSumTabSG3()
 *                  static l_uint8   *makeValTabSG3()
 *
 *         Scale-to-gray 4x
 *                  static void       scaleToGray4Low()
 *                  static l_uint32  *makeSumTabSG4()
 *                  static l_uint8   *makeValTabSG4()
 *
 *         Scale-to-gray 6x
 *                  static void       scaleToGray6Low()
 *                  static l_uint8   *makeValTabSG6()
 *
 *         Scale-to-gray 8x
 *                  static void       scaleToGray8Low()
 *                  static l_uint8   *makeValTabSG8()
 *
 *         Scale-to-gray 16x
 *                  static void       scaleToGray16Low()
 *
 *         Grayscale mipmap
 *                  static l_int32    scaleMipmapLow()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static void scaleToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab); static l_uint32 *makeSumTabSG2(void); static l_uint8 *makeValTabSG2(void); static void scaleToGray3Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab); static l_uint32 *makeSumTabSG3(void); static l_uint8 *makeValTabSG3(void); static void scaleToGray4Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab); static l_uint32 *makeSumTabSG4(void); static l_uint8 *makeValTabSG4(void); static void scaleToGray6Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab); static l_uint8 *makeValTabSG6(void); static void scaleToGray8Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab); static l_uint8 *makeValTabSG8(void); static void scaleToGray16Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8); static l_int32 scaleMipmapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas1, l_int32 wpls1, l_uint32 *datas2, l_int32 wpls2, l_float32 red); extern l_float32 AlphaMaskBorderVals[2]; /*------------------------------------------------------------------* * Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling) * *------------------------------------------------------------------*/ /*! * \brief pixScaleToGray() * * \param[in] pixs 1 bpp * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 * \return pixd 8 bpp, scaled down by scalefactor in each direction, * or NULL on error. * *
 * Notes:
 *
 *  For faster scaling in the range of scalefactors from 0.0625 to 0.5,
 *  with very little difference in quality, use pixScaleToGrayFast().
 *
 *  Binary images have sharp edges, so they intrinsically have very
 *  high frequency content.  To avoid aliasing, they must be low-pass
 *  filtered, which tends to blur the edges.  How can we keep relatively
 *  crisp edges without aliasing?  The trick is to do binary upscaling
 *  followed by a power-of-2 scaleToGray.  For large reductions, where
 *  you don't end up with much detail, some corners can be cut.
 *
 *  The intent here is to get high quality reduced grayscale
 *  images with relatively little computation.  We do binary
 *  pre-scaling followed by scaleToGrayN() for best results,
 *  esp. to avoid excess blur when the scale factor is near
 *  an inverse power of 2.  Where a low-pass filter is required,
 *  we use simple convolution kernels: either the hat filter for
 *  linear interpolation or a flat filter for larger downscaling.
 *  Other choices, such as a perfect bandpass filter with infinite extent
 *  (the sinc) or various approximations to it (e.g., lanczos), are
 *  unnecessarily expensive.
 *
 *  The choices made are as follows:
 *      (1) Do binary upscaling before scaleToGrayN() for scalefactors > 1/8
 *      (2) Do binary downscaling before scaleToGray8() for scalefactors
 *          between 1/16 and 1/8.
 *      (3) Use scaleToGray16() before grayscale downscaling for
 *          scalefactors less than 1/16
 *  Another reasonable choice would be to start binary downscaling
 *  for scalefactors below 1/4, rather than below 1/8 as we do here.
 *
 *  The general scaling rules, not all of which are used here, go as follows:
 *      (1) For grayscale upscaling, use pixScaleGrayLI().  However,
 *          note that edges will be visibly blurred for scalefactors
 *          near (but above) 1.0.  Replication will avoid edge blur,
 *          and should be considered for factors very near 1.0.
 *      (2) For grayscale downscaling with a scale factor larger than
 *          about 0.7, use pixScaleGrayLI().  For scalefactors near
 *          (but below) 1.0, you tread between Scylla and Charybdis.
 *          pixScaleGrayLI() again gives edge blurring, but
 *          pixScaleBySampling() gives visible aliasing.
 *      (3) For grayscale downscaling with a scale factor smaller than
 *          about 0.7, use pixScaleSmooth()
 *      (4) For binary input images, do as much scale to gray as possible
 *          using the special integer functions (2, 3, 4, 8 and 16).
 *      (5) It is better to upscale in binary, followed by scaleToGrayN()
 *          than to do scaleToGrayN() followed by an upscale using either
 *          LI or oversampling.
 *      (6) It may be better to downscale in binary, followed by
 *          scaleToGrayN() than to first use scaleToGrayN() followed by
 *          downscaling.  For downscaling between 8x and 16x, this is
 *          a reasonable option.
 *      (7) For reductions greater than 16x, it's reasonable to use
 *          scaleToGray16() followed by further grayscale downscaling.
 * 
*/ PIX * pixScaleToGray(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 mag, red; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (scalefactor <= 0.0f) return (PIX *)ERROR_PTR("scalefactor <= 0.0", __func__, NULL); if (scalefactor >= 1.0f) return (PIX *)ERROR_PTR("scalefactor >= 1.0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", __func__, NULL); if (scalefactor > 0.5f) { /* see note (5) */ mag = 2.0f * scalefactor; /* will be < 2.0 */ /* lept_stderr("2x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray2(pixt); } else if (scalefactor == 0.5f) { return pixd = pixScaleToGray2(pixs); } else if (scalefactor > 0.33333f) { /* see note (5) */ mag = 3.0f * scalefactor; /* will be < 1.5 */ /* lept_stderr("3x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray3(pixt); } else if (scalefactor > 0.25f) { /* see note (5) */ mag = 4.0f * scalefactor; /* will be < 1.3333 */ /* lept_stderr("4x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray4(pixt); } else if (scalefactor == 0.25f) { return pixd = pixScaleToGray4(pixs); } else if (scalefactor > 0.16667f) { /* see note (5) */ mag = 6.0f * scalefactor; /* will be < 1.5 */ /* lept_stderr("6x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray6(pixt); } else if (scalefactor == 0.16667f) { return pixd = pixScaleToGray6(pixs); } else if (scalefactor > 0.125f) { /* see note (5) */ mag = 8.0f * scalefactor; /* will be < 1.3333 */ /* lept_stderr("8x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray8(pixt); } else if (scalefactor == 0.125f) { return pixd = pixScaleToGray8(pixs); } else if (scalefactor > 0.0625f) { /* see note (6) */ red = 8.0f * scalefactor; /* will be > 0.5 */ /* lept_stderr("8x with red %7.3f\n", red); */ if ((pixt = pixScaleBinary(pixs, red, red)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray8(pixt); } else if (scalefactor == 0.0625f) { return pixd = pixScaleToGray16(pixs); } else { /* see note (7) */ red = 16.0f * scalefactor; /* will be <= 1.0 */ /* lept_stderr("16x with red %7.3f\n", red); */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); if (red < 0.7f) pixd = pixScaleSmooth(pixt, red, red); /* see note (3) */ else pixd = pixScaleGrayLI(pixt, red, red); /* see note (2) */ } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * \brief pixScaleToGrayFast() * * \param[in] pixs 1 bpp * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 * \return pixd 8 bpp, scaled down by scalefactor in each direction, * or NULL on error. * *
 * Notes:
 *      (1) See notes in pixScaleToGray() for the basic approach.
 *      (2) This function is considerably less expensive than pixScaleToGray()
 *          for scalefactor in the range (0.0625 ... 0.5), and the
 *          quality is nearly as good.
 *      (3) Unlike pixScaleToGray(), which does binary upscaling before
 *          downscaling for scale factors >= 0.0625, pixScaleToGrayFast()
 *          first downscales in binary for all scale factors < 0.5, and
 *          then does a 2x scale-to-gray as the final step.  For
 *          scale factors < 0.0625, both do a 16x scale-to-gray, followed
 *          by further grayscale reduction.
 * 
*/ PIX * pixScaleToGrayFast(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 eps, factor; PIX *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (scalefactor <= 0.0f) return (PIX *)ERROR_PTR("scalefactor <= 0.0", __func__, NULL); if (scalefactor >= 1.0f) return (PIX *)ERROR_PTR("scalefactor >= 1.0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", __func__, NULL); eps = 0.0001f; /* Handle the special cases */ if (scalefactor > 0.5f - eps && scalefactor < 0.5f + eps) return pixScaleToGray2(pixs); else if (scalefactor > 0.33333f - eps && scalefactor < 0.33333f + eps) return pixScaleToGray3(pixs); else if (scalefactor > 0.25f - eps && scalefactor < 0.25f + eps) return pixScaleToGray4(pixs); else if (scalefactor > 0.16666f - eps && scalefactor < 0.16666f + eps) return pixScaleToGray6(pixs); else if (scalefactor > 0.125f - eps && scalefactor < 0.125f + eps) return pixScaleToGray8(pixs); else if (scalefactor > 0.0625f - eps && scalefactor < 0.0625f + eps) return pixScaleToGray16(pixs); if (scalefactor > 0.0625f) { /* scale binary first */ factor = 2.0f * scalefactor; if ((pixt = pixScaleBinary(pixs, factor, factor)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); pixd = pixScaleToGray2(pixt); } else { /* scalefactor < 0.0625; scale-to-gray first */ factor = 16.0f * scalefactor; /* will be < 1.0 */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); if (factor < 0.7f) pixd = pixScaleSmooth(pixt, factor, factor); else pixd = pixScaleGrayLI(pixt, factor, factor); } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); return pixd; } /*-----------------------------------------------------------------------* * Scale-to-gray (1 bpp --> 8 bpp; integer downscaling) * *-----------------------------------------------------------------------*/ /*! * \brief pixScaleToGray2() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 2x in each direction, * or NULL on error. */ PIX * pixScaleToGray2(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 2; hd = hs / 2; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetPadBits(pixs, 0); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); sumtab = makeSumTabSG2(); valtab = makeValTabSG2(); scaleToGray2Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); LEPT_FREE(sumtab); LEPT_FREE(valtab); return pixd; } /*! * \brief pixScaleToGray3() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 3x in each direction, * or NULL on error. * *
 * Notes:
 *      (1) Speed is about 100 x 10^6 src-pixels/sec/GHz.
 *          Another way to express this is it processes 1 src pixel
 *          in about 10 cycles.
 *      (2) The width of pixd is truncated is truncated to a factor of 8.
 * 
*/ PIX * pixScaleToGray3(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 3) & 0xfffffff8; /* truncate to factor of 8 */ hd = hs / 3; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.33333f, 0.33333f); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); sumtab = makeSumTabSG3(); valtab = makeValTabSG3(); scaleToGray3Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); LEPT_FREE(sumtab); LEPT_FREE(valtab); return pixd; } /*! * \brief pixScaleToGray4() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 4x in each direction, * or NULL on error. * *
 * Notes:
 *      (1) The width of pixd is truncated is truncated to a factor of 2.
 * 
*/ PIX * pixScaleToGray4(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 4) & 0xfffffffe; /* truncate to factor of 2 */ hd = hs / 4; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.25, 0.25); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); sumtab = makeSumTabSG4(); valtab = makeValTabSG4(); scaleToGray4Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); LEPT_FREE(sumtab); LEPT_FREE(valtab); return pixd; } /*! * \brief pixScaleToGray6() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 6x in each direction, * or NULL on error. * *
 * Notes:
 *      (1) The width of pixd is truncated is truncated to a factor of 8.
 * 
*/ PIX * pixScaleToGray6(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd, wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 6) & 0xfffffff8; /* truncate to factor of 8 */ hd = hs / 6; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.16667f, 0.16667f); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); tab8 = makePixelSumTab8(); valtab = makeValTabSG6(); scaleToGray6Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); LEPT_FREE(tab8); LEPT_FREE(valtab); return pixd; } /*! * \brief pixScaleToGray8() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 8x in each direction, * or NULL on error */ PIX * pixScaleToGray8(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 8; /* truncate to nearest dest byte */ hd = hs / 8; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.125, 0.125); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); tab8 = makePixelSumTab8(); valtab = makeValTabSG8(); scaleToGray8Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); LEPT_FREE(tab8); LEPT_FREE(valtab); return pixd; } /*! * \brief pixScaleToGray16() * * \param[in] pixs 1 bpp * \return pixd 8 bpp, scaled down by 16x in each direction, * or NULL on error. */ PIX * pixScaleToGray16(PIX *pixs) { l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 16; hd = hs / 16; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", __func__, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.0625, 0.0625); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); tab8 = makePixelSumTab8(); scaleToGray16Low(datad, wd, hd, wpld, datas, wpls, tab8); LEPT_FREE(tab8); return pixd; } /*------------------------------------------------------------------* * Scale-to-gray mipmap(1 bpp --> 8 bpp, arbitrary reduction) * *------------------------------------------------------------------*/ /*! * \brief pixScaleToGrayMipmap() * * \param[in] pixs 1 bpp * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 * \return pixd 8 bpp, scaled down by scalefactor in each direction, * or NULL on error. * *
 * Notes:
 *
 *  This function is here mainly for pedagogical reasons.
 *  Mip-mapping is widely used in graphics for texture mapping, because
 *  the texture changes smoothly with scale.  This is accomplished by
 *  constructing a multiresolution pyramid and, for each pixel,
 *  doing a linear interpolation between corresponding pixels in
 *  the two planes of the pyramid that bracket the desired resolution.
 *  The computation is very efficient, and is implemented in hardware
 *  in high-end graphics cards.
 *
 *  We can use mip-mapping for scale-to-gray by using two scale-to-gray
 *  reduced images (we don't need the entire pyramid) selected from
 *  the set {2x, 4x, ... 16x}, and interpolating.  However, we get
 *  severe aliasing, probably because we are subsampling from the
 *  higher resolution image.  The method is very fast, but the result
 *  is very poor.  In fact, the results don't look any better than
 *  either subsampling off the higher-res grayscale image or oversampling
 *  on the lower-res image.  Consequently, this method should NOT be used
 *  for generating reduced images, scale-to-gray or otherwise.
 * 
*/ PIX * pixScaleToGrayMipmap(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 red; PIX *pixs1, *pixs2, *pixt, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (scalefactor <= 0.0f) return (PIX *)ERROR_PTR("scalefactor <= 0.0", __func__, NULL); if (scalefactor >= 1.0f) return (PIX *)ERROR_PTR("scalefactor >= 1.0", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", __func__, NULL); if (scalefactor > 0.5f) { pixs1 = pixConvert1To8(NULL, pixs, 255, 0); pixs2 = pixScaleToGray2(pixs); red = scalefactor; } else if (scalefactor == 0.5f) { return pixScaleToGray2(pixs); } else if (scalefactor > 0.25f) { pixs1 = pixScaleToGray2(pixs); pixs2 = pixScaleToGray4(pixs); red = 2.f * scalefactor; } else if (scalefactor == 0.25f) { return pixScaleToGray4(pixs); } else if (scalefactor > 0.125f) { pixs1 = pixScaleToGray4(pixs); pixs2 = pixScaleToGray8(pixs); red = 4.f * scalefactor; } else if (scalefactor == 0.125f) { return pixScaleToGray8(pixs); } else if (scalefactor > 0.0625f) { pixs1 = pixScaleToGray8(pixs); pixs2 = pixScaleToGray16(pixs); red = 8.f * scalefactor; } else if (scalefactor == 0.0625f) { return pixScaleToGray16(pixs); } else { /* end of the pyramid; just do it */ red = 16.0f * scalefactor; /* will be <= 1.0 */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, NULL); if (red < 0.7f) pixd = pixScaleSmooth(pixt, red, red); else pixd = pixScaleGrayLI(pixt, red, red); pixDestroy(&pixt); return pixd; } pixd = pixScaleMipmap(pixs1, pixs2, red); pixCopyInputFormat(pixd, pixs); pixDestroy(&pixs1); pixDestroy(&pixs2); return pixd; } /*------------------------------------------------------------------* * Grayscale scaling using mipmap * *------------------------------------------------------------------*/ /*! * \brief pixScaleMipmap() * * \param[in] pixs1 high res 8 bpp, no cmap * \param[in] pixs2 low res -- 2x reduced -- 8 bpp, no cmap * \param[in] scale reduction with respect to high res image, > 0.5 * \return 8 bpp pix, scaled down by reduction in each direction, * or NULL on error. * *
 * Notes:
 *      (1) See notes in pixScaleToGrayMipmap().
 *      (2) This function suffers from aliasing effects that are
 *          easily seen in document images.
 * 
*/ PIX * pixScaleMipmap(PIX *pixs1, PIX *pixs2, l_float32 scale) { l_int32 ws1, hs1, ws2, hs2, wd, hd, wpls1, wpls2, wpld; l_uint32 *datas1, *datas2, *datad; PIX *pixd; if (!pixs1 || pixGetDepth(pixs1) != 8 || pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("pixs1 underdefined, not 8 bpp, or cmapped", __func__, NULL); if (!pixs2 || pixGetDepth(pixs2) != 8 || pixGetColormap(pixs2)) return (PIX *)ERROR_PTR("pixs2 underdefined, not 8 bpp, or cmapped", __func__, NULL); pixGetDimensions(pixs1, &ws1, &hs1, NULL); pixGetDimensions(pixs2, &ws2, &hs2, NULL); if (scale > 1.0f || scale < 0.5f) return (PIX *)ERROR_PTR("scale not in [0.5, 1.0]", __func__, NULL); if (ws1 < 2 * ws2) return (PIX *)ERROR_PTR("invalid width ratio", __func__, NULL); if (hs1 < 2 * hs2) return (PIX *)ERROR_PTR("invalid height ratio", __func__, NULL); /* Generate wd and hd from the lower resolution dimensions, * to guarantee staying within both src images */ datas1 = pixGetData(pixs1); wpls1 = pixGetWpl(pixs1); datas2 = pixGetData(pixs2); wpls2 = pixGetWpl(pixs2); wd = (l_int32)(2 * scale * pixGetWidth(pixs2)); hd = (l_int32)(2 * scale * pixGetHeight(pixs2)); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs1); pixCopyResolution(pixd, pixs1); pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleMipmapLow(datad, wd, hd, wpld, datas1, wpls1, datas2, wpls2, scale); return pixd; } /*------------------------------------------------------------------* * Replicated (integer) expansion * *------------------------------------------------------------------*/ /*! * \brief pixExpandReplicate() * * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp * \param[in] factor integer scale factor for replicative expansion * \return pixd scaled up, or NULL on error. */ PIX * pixExpandReplicate(PIX *pixs, l_int32 factor) { l_int32 w, h, d, wd, hd, wpls, wpld, start, i, j, k; l_uint8 sval; l_uint16 sval16; l_uint32 sval32; l_uint32 *lines, *datas, *lined, *datad; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not in {1,2,4,8,16,32}", __func__, NULL); if (factor <= 0) return (PIX *)ERROR_PTR("factor <= 0; invalid", __func__, NULL); if (factor == 1) return pixCopy(NULL, pixs); if (d == 1) return pixExpandBinaryReplicate(pixs, factor, factor); wd = factor * w; hd = factor * h; if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyColormap(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); switch (d) { case 2: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_DIBIT(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 4: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_QBIT(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 8: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_BYTE(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 16: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval16 = GET_DATA_TWO_BYTES(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_TWO_BYTES(lined, start + k, sval16); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 32: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval32 = *(lines + j); start = factor * j; for (k = 0; k < factor; k++) *(lined + start + k) = sval32; } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; default: lept_stderr("invalid depth\n"); } if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, (l_float32)factor, (l_float32)factor); return pixd; } /*-----------------------------------------------------------------------* * Downscaling using min or max * *-----------------------------------------------------------------------*/ /*! * \brief pixScaleGrayMinMax() * * \param[in] pixs 8 bpp, not cmapped * \param[in] xfact x downscaling factor; integer * \param[in] yfact y downscaling factor; integer * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF * \return pixd 8 bpp * *
 * Notes:
 *      (1) The downscaled pixels in pixd are the min, max or (max - min)
 *          of the corresponding set of xfact * yfact pixels in pixs.
 *      (2) Using L_CHOOSE_MIN is equivalent to a grayscale erosion,
 *          using a brick Sel of size (xfact * yfact), followed by
 *          subsampling within each (xfact * yfact) cell.  Using
 *          L_CHOOSE_MAX is equivalent to the corresponding dilation.
 *      (3) Using L_CHOOSE_MAXDIFF finds the difference between max
 *          and min values in each cell.
 *      (4) For the special case of downscaling by 2x in both directions,
 *          pixScaleGrayMinMax2() is about 2x more efficient.
 * 
*/ PIX * pixScaleGrayMinMax(PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; l_int32 minval, maxval, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && type != L_CHOOSE_MAXDIFF) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (xfact < 1 || yfact < 1) return (PIX *)ERROR_PTR("xfact and yfact must be >= 1", __func__, NULL); if (xfact == 2 && yfact == 2) return pixScaleGrayMinMax2(pixs, type); wd = ws / xfact; if (wd == 0) { /* single tile */ wd = 1; xfact = ws; } hd = hs / yfact; if (hd == 0) { /* single tile */ hd = 1; yfact = hs; } if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAXDIFF) { minval = 255; for (k = 0; k < yfact; k++) { lines = datas + (yfact * i + k) * wpls; for (m = 0; m < xfact; m++) { val = GET_DATA_BYTE(lines, xfact * j + m); if (val < minval) minval = val; } } } if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAXDIFF) { maxval = 0; for (k = 0; k < yfact; k++) { lines = datas + (yfact * i + k) * wpls; for (m = 0; m < xfact; m++) { val = GET_DATA_BYTE(lines, xfact * j + m); if (val > maxval) maxval = val; } } } if (type == L_CHOOSE_MIN) SET_DATA_BYTE(lined, j, minval); else if (type == L_CHOOSE_MAX) SET_DATA_BYTE(lined, j, maxval); else /* type == L_CHOOSE_MAXDIFF */ SET_DATA_BYTE(lined, j, maxval - minval); } } return pixd; } /*! * \brief pixScaleGrayMinMax2() * * \param[in] pixs 8 bpp, not cmapped * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF * \return pixd 8 bpp downscaled by 2x * *
 * Notes:
 *      (1) Special version for 2x reduction.  The downscaled pixels
 *          in pixd are the min, max or (max - min) of the corresponding
 *          set of 4 pixels in pixs.
 *      (2) The max and min operations are a special case (for levels 1
 *          and 4) of grayscale analog to the binary rank scaling operation
 *          pixReduceRankBinary2().  Note, however, that because of
 *          the photometric definition that higher gray values are
 *          lighter, the erosion-like L_CHOOSE_MIN will darken
 *          the resulting image, corresponding to a threshold level 1
 *          in the binary case.  Likewise, L_CHOOSE_MAX will lighten
 *          the pixd, corresponding to a threshold level of 4.
 *      (3) To choose any of the four rank levels in a 2x grayscale
 *          reduction, use pixScaleGrayRank2().
 *      (4) This runs at about 70 MPix/sec/GHz of source data for
 *          erosion and dilation.
 * 
*/ PIX * pixScaleGrayMinMax2(PIX *pixs, l_int32 type) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k; l_int32 minval, maxval; l_int32 val[4]; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (ws < 2 || hs < 2) return (PIX *)ERROR_PTR("too small: ws < 2 or hs < 2", __func__, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && type != L_CHOOSE_MAXDIFF) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); wd = ws / 2; hd = hs / 2; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val[0] = GET_DATA_BYTE(lines, 2 * j); val[1] = GET_DATA_BYTE(lines, 2 * j + 1); val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAXDIFF) { minval = 255; for (k = 0; k < 4; k++) { if (val[k] < minval) minval = val[k]; } } if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAXDIFF) { maxval = 0; for (k = 0; k < 4; k++) { if (val[k] > maxval) maxval = val[k]; } } if (type == L_CHOOSE_MIN) SET_DATA_BYTE(lined, j, minval); else if (type == L_CHOOSE_MAX) SET_DATA_BYTE(lined, j, maxval); else /* type == L_CHOOSE_MAXDIFF */ SET_DATA_BYTE(lined, j, maxval - minval); } } return pixd; } /*-----------------------------------------------------------------------* * Grayscale downscaling using rank value * *-----------------------------------------------------------------------*/ /*! * \brief pixScaleGrayRankCascade() * * \param[in] pixs 8 bpp, not cmapped * \param[in] level1, level2 ... * \param[in] level3, level4 rank thresholds, in set {0, 1, 2, 3, 4} * \return pixd 8 bpp, downscaled by up to 16x * *
 * Notes:
 *      (1) This performs up to four cascaded 2x rank reductions.
 *      (2) Use level = 0 to truncate the cascade.
 * 
*/ PIX * pixScaleGrayRankCascade(PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4) { PIX *pixt1, *pixt2, *pixt3, *pixt4; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) return (PIX *)ERROR_PTR("levels must not exceed 4", __func__, NULL); if (level1 <= 0) { L_WARNING("no reduction because level1 not > 0\n", __func__); return pixCopy(NULL, pixs); } pixt1 = pixScaleGrayRank2(pixs, level1); if (level2 <= 0) return pixt1; pixt2 = pixScaleGrayRank2(pixt1, level2); pixDestroy(&pixt1); if (level3 <= 0) return pixt2; pixt3 = pixScaleGrayRank2(pixt2, level3); pixDestroy(&pixt2); if (level4 <= 0) return pixt3; pixt4 = pixScaleGrayRank2(pixt3, level4); pixDestroy(&pixt3); return pixt4; } /*! * \brief pixScaleGrayRank2() * * \param[in] pixs 8 bpp, no cmap * \param[in] rank 1 (darkest), 2, 3, 4 (lightest) * \return pixd 8 bpp, downscaled by 2x * *
 * Notes:
 *      (1) Rank 2x reduction.  If rank == 1(4), the downscaled pixels
 *          in pixd are the min(max) of the corresponding set of
 *          4 pixels in pixs.  Values 2 and 3 are intermediate.
 *      (2) This is the grayscale analog to the binary rank scaling operation
 *          pixReduceRankBinary2().  Here, because of the photometric
 *          definition that higher gray values are lighter, rank 1 gives
 *          the darkest pixel, whereas rank 4 gives the lightest pixel.
 *          This is opposite to the binary rank operation.
 *      (3) For rank = 1 and 4, this calls pixScaleGrayMinMax2(),
 *          which runs at about 70 MPix/sec/GHz of source data.
 *          For rank 2 and 3, this runs 3x slower, at about 25 MPix/sec/GHz.
 * 
*/ PIX * pixScaleGrayRank2(PIX *pixs, l_int32 rank) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; l_int32 minval, maxval, rankval, minindex, maxindex; l_int32 val[4]; l_int32 midval[4]; /* should only use 2 of these */ l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", __func__, NULL); if (rank < 1 || rank > 4) return (PIX *)ERROR_PTR("invalid rank", __func__, NULL); if (rank == 1) return pixScaleGrayMinMax2(pixs, L_CHOOSE_MIN); if (rank == 4) return pixScaleGrayMinMax2(pixs, L_CHOOSE_MAX); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 2; hd = hs / 2; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val[0] = GET_DATA_BYTE(lines, 2 * j); val[1] = GET_DATA_BYTE(lines, 2 * j + 1); val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); minval = maxval = val[0]; minindex = maxindex = 0; for (k = 1; k < 4; k++) { if (val[k] < minval) { minval = val[k]; minindex = k; continue; } if (val[k] > maxval) { maxval = val[k]; maxindex = k; } } for (k = 0, m = 0; k < 4; k++) { if (k == minindex || k == maxindex) continue; midval[m++] = val[k]; } if (m > 2) /* minval == maxval; all val[k] are the same */ rankval = minval; else if (rank == 2) rankval = L_MIN(midval[0], midval[1]); else /* rank == 3 */ rankval = L_MAX(midval[0], midval[1]); SET_DATA_BYTE(lined, j, rankval); } } return pixd; } /*------------------------------------------------------------------------* * Helper function for transferring alpha with scaling * *------------------------------------------------------------------------*/ /*! * \brief pixScaleAndTransferAlpha() * * \param[in] pixd 32 bpp, scaled image * \param[in] pixs 32 bpp, original unscaled image * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This scales the alpha component of pixs and inserts into pixd.
 * 
*/ l_ok pixScaleAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley) { PIX *pix1, *pix2; if (!pixs || !pixd) return ERROR_INT("pixs and pixd not both defined", __func__, 1); if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) return ERROR_INT("pixs not 32 bpp and 4 spp", __func__, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", __func__, 1); if (scalex == 1.0f && scaley == 1.0f) { pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return 0; } pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixScale(pix1, scalex, scaley); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } /*------------------------------------------------------------------------* * RGB scaling including alpha (blend) component and gamma transform * *------------------------------------------------------------------------*/ /*! * \brief pixScaleWithAlpha() * * \param[in] pixs 32 bpp rgb or cmapped * \param[in] scalex must be > 0.0 * \param[in] scaley must be > 0.0 * \param[in] pixg [optional] 8 bpp, can be null * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque * \return pixd 32 bpp rgba, or NULL on error * *
 * Notes:
 *      (1) The alpha channel is transformed separately from pixs,
 *          and aligns with it, being fully transparent outside the
 *          boundary of the transformed pixs.  For pixels that are fully
 *          transparent, a blending function like pixBlendWithGrayMask()
 *          will give zero weight to corresponding pixels in pixs.
 *      (2) Scaling is done with area mapping or linear interpolation,
 *          depending on the scale factors.  Default sharpening is done.
 *      (3) If pixg is NULL, it is generated as an alpha layer that is
 *          partially opaque, using %fract.  Otherwise, it is cropped
 *          to pixs if required, and %fract is ignored.  The alpha
 *          channel in pixs is never used.
 *      (4) Colormaps are removed to 32 bpp.
 *      (5) The default setting for the border values in the alpha channel
 *          is 0 (transparent) for the outermost ring of pixels and
 *          (0.5 * fract * 255) for the second ring.  When blended over
 *          a second image, this
 *          (a) shrinks the visible image to make a clean overlap edge
 *              with an image below, and
 *          (b) softens the edges by weakening the aliasing there.
 *          Use l_setAlphaMaskBorder() to change these values.
 *      (6) A subtle use of gamma correction is to remove gamma correction
 *          before scaling and restore it afterwards.  This is done
 *          by sandwiching this function between a gamma/inverse-gamma
 *          photometric transform:
 *              pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255);
 *              pixd = pixScaleWithAlpha(pixt, scalex, scaley, NULL, fract);
 *              pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255);
 *              pixDestroy(&pixt);
 *          This has the side-effect of producing artifacts in the very
 *          dark regions.
 * 
*/ PIX * pixScaleWithAlpha(PIX *pixs, l_float32 scalex, l_float32 scaley, PIX *pixg, l_float32 fract) { l_int32 ws, hs, d, spp; PIX *pixd, *pix32, *pixg2, *pixgs; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", __func__, NULL); if (scalex <= 0.0f || scaley <= 0.0f) return (PIX *)ERROR_PTR("scale factor <= 0.0", __func__, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", __func__); pixg = NULL; } if (!pixg && (fract < 0.0f || fract > 1.0f)) { L_WARNING("invalid fract; using fully opaque\n", __func__); fract = 1.0; } if (!pixg && fract == 0.0f) L_WARNING("transparent alpha; image will not be blended\n", __func__); /* Make sure input to scaling is 32 bpp rgb, and scale it */ if (d != 32) pix32 = pixConvertTo32(pixs); else pix32 = pixClone(pixs); spp = pixGetSpp(pix32); pixSetSpp(pix32, 3); /* ignore the alpha channel for scaling */ pixd = pixScale(pix32, scalex, scaley); pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ pixDestroy(&pix32); /* Set up alpha layer with a fading border and scale it */ if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0f) pixSetAll(pixg2); else if (fract > 0.0f) pixSetAllArbitrary(pixg2, (l_int32)(255 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 4 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255 * fract * AlphaMaskBorderVals[1])); } pixgs = pixScaleGeneral(pixg2, scalex, scaley, 0.0f, 0); /* Combine into a 4 spp result */ pixSetRGBComponent(pixd, pixgs, L_ALPHA_CHANNEL); pixCopyInputFormat(pixd, pixs); pixDestroy(&pixg2); pixDestroy(&pixgs); return pixd; } /* ================================================================ * * Low level static functions * * ================================================================ */ /*------------------------------------------------------------------* * Scale-to-gray 2x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray2Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] sumtab made from makeSumTabSG2() * \param[in] valtab made from makeValTabSG2() * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) The output is processed in sets of 4 output bytes on a row,
 *          corresponding to 4 2x2 bit-blocks in the input image.
 *          Two lookup tables are used.  The first, sumtab, gets the
 *          sum of ON pixels in 4 sets of two adjacent bits,
 *          storing the result in 4 adjacent bytes.  After sums from
 *          two rows have been added, the second table, valtab,
 *          converts from the sum of ON pixels in the 2x2 block to
 *          an 8 bpp grayscale value between 0 for 4 bits ON
 *          and 255 for 0 bits ON.
 * 
*/ static void scaleToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k, m, wd4, extra; l_uint32 sbyte1, sbyte2, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take two bytes from the source (in 2 lines of 8 pixels * each) and convert them into four 8 bpp bytes of the dest. */ wd4 = wd & 0xfffffffc; extra = wd - wd4; for (i = 0, l = 0; i < hd; i++, l += 2) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd4; j += 4, k++) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2]; SET_DATA_BYTE(lined, j, valtab[sum >> 24]); SET_DATA_BYTE(lined, j + 1, valtab[(sum >> 16) & 0xff]); SET_DATA_BYTE(lined, j + 2, valtab[(sum >> 8) & 0xff]); SET_DATA_BYTE(lined, j + 3, valtab[sum & 0xff]); } if (extra > 0) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2]; for (m = 0; m < extra; m++) { SET_DATA_BYTE(lined, j + m, valtab[((sum >> (24 - 8 * m)) & 0xff)]); } } } } /*! * \brief makeSumTabSG2() * *
 * Notes:
 *      (1) Returns a table of 256 l_uint32s, giving the four output
 *          8-bit grayscale sums corresponding to 8 input bits of a binary
 *          image, for a 2x scale-to-gray op.  The sums from two
 *          adjacent scanlines are then added and transformed to
 *          output four 8 bpp pixel values, using makeValTabSG2().
 * 
*/ static l_uint32 * makeSumTabSG2(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2}; l_uint32 *tab; /* Pack the four sums separately in four bytes */ tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); for (i = 0; i < 256; i++) { tab[i] = (sum[i & 0x3] | sum[(i >> 2) & 0x3] << 8 | sum[(i >> 4) & 0x3] << 16 | sum[(i >> 6) & 0x3] << 24); } return tab; } /*! * \brief makeValTabSG2() * *
 * Notes:
 *      (1) Returns an 8 bit value for the sum of ON pixels
 *          in a 2x2 square, according to
 *               val = 255 - (255 * sum)/4
 *          where sum is in set {0,1,2,3,4}
 * 
*/ static l_uint8 * makeValTabSG2(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(5, sizeof(l_uint8)); for (i = 0; i < 5; i++) tab[i] = 255 - (i * 255) / 4; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 3x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray3Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] sumtab made from makeSumTabSG3() * \param[in] valtab made from makeValTabSG3() * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Each set of 8 3x3 bit-blocks in the source image, which
 *          consist of 72 pixels arranged 24 pixels wide by 3 scanlines,
 *          is converted to a row of 8 8-bit pixels in the dest image.
 *          These 72 pixels of the input image are runs of 24 pixels
 *          in three adjacent scanlines.  Each run of 24 pixels is
 *          stored in the 24 LSbits of a 32-bit word.  We use 2 LUTs.
 *          The first, sumtab, takes 6 of these bits and stores
 *          sum, taken 3 bits at a time, in two bytes.  (See
 *          makeSumTabSG3).  This is done for each of the 3 scanlines,
 *          and the results are added.  We now have the sum of ON pixels
 *          in the first two 3x3 blocks in two bytes.  The valtab LUT
 *          then converts these values (which go from 0 to 9) to
 *          grayscale values between between 255 and 0.  (See makeValTabSG3).
 *          This process is repeated for each of the other 3 sets of
 *          6x3 input pixels, giving 8 output pixels in total.
 *      (2) Note: because the input image is processed in groups of
 *           24 x 3 pixels, the process clips the input height to
 *           (h - h % 3) and the input width to (w - w % 24).
 * 
*/ static void scaleToGray3Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 threebytes1, threebytes2, threebytes3, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take 9 bytes from the source (72 binary pixels * in three lines of 24 pixels each) and convert it * into 8 bytes of the dest (8 8bpp pixels in one line) */ for (i = 0, l = 0; i < hd; i++, l += 3) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 8, k += 3) { threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | (GET_DATA_BYTE(lines, k + 1) << 8) | GET_DATA_BYTE(lines, k + 2); threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | GET_DATA_BYTE(lines + wpls, k + 2); threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 2 * wpls, k + 2); sum = sumtab[(threebytes1 >> 18)] + sumtab[(threebytes2 >> 18)] + sumtab[(threebytes3 >> 18)]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[((threebytes1 >> 12) & 0x3f)] + sumtab[((threebytes2 >> 12) & 0x3f)] + sumtab[((threebytes3 >> 12) & 0x3f)]; SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[((threebytes1 >> 6) & 0x3f)] + sumtab[((threebytes2 >> 6) & 0x3f)] + sumtab[((threebytes3 >> 6) & 0x3f)]; SET_DATA_BYTE(lined, j + 4, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 5, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[(threebytes1 & 0x3f)] + sumtab[(threebytes2 & 0x3f)] + sumtab[(threebytes3 & 0x3f)]; SET_DATA_BYTE(lined, j + 6, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 7, valtab[GET_DATA_BYTE(&sum, 3)]); } } } /*! * \brief makeSumTabSG3() * *
 * Notes:
 *      (1) Returns a table of 64 l_uint32s, giving the two output
 *          8-bit grayscale sums corresponding to 6 input bits of a binary
 *          image, for a 3x scale-to-gray op.  In practice, this would
 *          be used three times (on adjacent scanlines), and the sums would
 *          be added and then transformed to output 8 bpp pixel values,
 *          using makeValTabSG3().
 * 
*/ static l_uint32 * makeSumTabSG3(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3}; l_uint32 *tab; /* Pack the two sums separately in two bytes */ tab = (l_uint32 *)LEPT_CALLOC(64, sizeof(l_uint32)); for (i = 0; i < 64; i++) { tab[i] = (sum[i & 0x07]) | (sum[(i >> 3) & 0x07] << 8); } return tab; } /*! * \brief makeValTabSG3() * *
 * Notes:
 *      (1) Returns an 8 bit value for the sum of ON pixels
 *          in a 3x3 square, according to
 *               val = 255 - (255 * sum)/9
 *          where sum is in [0,...,9]
 * 
*/ static l_uint8 * makeValTabSG3(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(10, sizeof(l_uint8)); for (i = 0; i < 10; i++) tab[i] = 0xff - (i * 255) / 9; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 4x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray4Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] sumtab made from makeSumTabSG4() * \param[in] valtab made from makeValTabSG4() * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) The output is processed in sets of 2 output bytes on a row,
 *          corresponding to 2 4x4 bit-blocks in the input image.
 *          Two lookup tables are used.  The first, sumtab, gets the
 *          sum of ON pixels in two sets of four adjacent bits,
 *          storing the result in 2 adjacent bytes.  After sums from
 *          four rows have been added, the second table, valtab,
 *          converts from the sum of ON pixels in the 4x4 block to
 *          an 8 bpp grayscale value between 0 for 16 bits ON
 *          and 255 for 0 bits ON.
 * 
*/ static void scaleToGray4Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 sbyte1, sbyte2, sbyte3, sbyte4, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take four bytes from the source (in 4 lines of 8 pixels * each) and convert it into two 8 bpp bytes of the dest. */ for (i = 0, l = 0; i < hd; i++, l += 4) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 2, k++) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sbyte3 = GET_DATA_BYTE(lines + 2 * wpls, k); sbyte4 = GET_DATA_BYTE(lines + 3 * wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2] + sumtab[sbyte3] + sumtab[sbyte4]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); } } } /*! * \brief makeSumTabSG4() * *
 * Notes:
 *      (1) Returns a table of 256 l_uint32s, giving the two output
 *          8-bit grayscale sums corresponding to 8 input bits of a
 *          binary image, for a 4x scale-to-gray op.  The sums from
 *          four adjacent scanlines are then added and transformed to
 *          output 8 bpp pixel values, using makeValTabSG4().
 * 
*/ static l_uint32 * makeSumTabSG4(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; l_uint32 *tab; /* Pack the two sums separately in two bytes */ tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); for (i = 0; i < 256; i++) { tab[i] = (sum[i & 0xf]) | (sum[(i >> 4) & 0xf] << 8); } return tab; } /*! * \brief makeValTabSG4() * *
 * Notes:
 *      (1) Returns an 8 bit value for the sum of ON pixels
 *          in a 4x4 square, according to
 *              val = 255 - (255 * sum)/16
 *          where sum is in [0,...,16]
 * 
*/ static l_uint8 * makeValTabSG4(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(17, sizeof(l_uint8)); for (i = 0; i < 17; i++) tab[i] = 0xff - (i * 255) / 16; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 6x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray6Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] tab8 made from makePixelSumTab8() * \param[in] valtab made from makeValTabSG6() * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Each set of 4 6x6 bit-blocks in the source image, which
 *          consist of 144 pixels arranged 24 pixels wide by 6 scanlines,
 *          is converted to a row of 4 8-bit pixels in the dest image.
 *          These 144 pixels of the input image are runs of 24 pixels
 *          in six adjacent scanlines.  Each run of 24 pixels is
 *          stored in the 24 LSbits of a 32-bit word.  We use 2 LUTs.
 *          The first, tab8, takes 6 of these bits and stores
 *          sum in one byte.  This is done for each of the 6 scanlines,
 *          and the results are added.
 *          We now have the sum of ON pixels in the first 6x6 block.  The
 *          valtab LUT then converts these values (which go from 0 to 36) to
 *          grayscale values between between 255 and 0.  (See makeValTabSG6).
 *          This process is repeated for each of the other 3 sets of
 *          6x6 input pixels, giving 4 output pixels in total.
 *      (2) Note: because the input image is processed in groups of
 *          24 x 6 pixels, the process clips the input height to
 *          (h - h % 6) and the input width to (w - w % 24).
 * 
*/ static void scaleToGray6Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 threebytes1, threebytes2, threebytes3; l_uint32 threebytes4, threebytes5, threebytes6, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take 18 bytes from the source (144 binary pixels * in six lines of 24 pixels each) and convert it * into 4 bytes of the dest (four 8 bpp pixels in one line) */ for (i = 0, l = 0; i < hd; i++, l += 6) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 4, k += 3) { /* First grab the 18 bytes, 3 at a time, and put each set * of 3 bytes into the LS bytes of a 32-bit word. */ threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | (GET_DATA_BYTE(lines, k + 1) << 8) | GET_DATA_BYTE(lines, k + 2); threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | GET_DATA_BYTE(lines + wpls, k + 2); threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 2 * wpls, k + 2); threebytes4 = (GET_DATA_BYTE(lines + 3 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 3 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 3 * wpls, k + 2); threebytes5 = (GET_DATA_BYTE(lines + 4 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 4 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 4 * wpls, k + 2); threebytes6 = (GET_DATA_BYTE(lines + 5 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 5 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 5 * wpls, k + 2); /* Sum first set of 36 bits and convert to 0-255 */ sum = tab8[(threebytes1 >> 18)] + tab8[(threebytes2 >> 18)] + tab8[(threebytes3 >> 18)] + tab8[(threebytes4 >> 18)] + tab8[(threebytes5 >> 18)] + tab8[(threebytes6 >> 18)]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 3)]); /* Ditto for second set */ sum = tab8[((threebytes1 >> 12) & 0x3f)] + tab8[((threebytes2 >> 12) & 0x3f)] + tab8[((threebytes3 >> 12) & 0x3f)] + tab8[((threebytes4 >> 12) & 0x3f)] + tab8[((threebytes5 >> 12) & 0x3f)] + tab8[((threebytes6 >> 12) & 0x3f)]; SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); sum = tab8[((threebytes1 >> 6) & 0x3f)] + tab8[((threebytes2 >> 6) & 0x3f)] + tab8[((threebytes3 >> 6) & 0x3f)] + tab8[((threebytes4 >> 6) & 0x3f)] + tab8[((threebytes5 >> 6) & 0x3f)] + tab8[((threebytes6 >> 6) & 0x3f)]; SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 3)]); sum = tab8[(threebytes1 & 0x3f)] + tab8[(threebytes2 & 0x3f)] + tab8[(threebytes3 & 0x3f)] + tab8[(threebytes4 & 0x3f)] + tab8[(threebytes5 & 0x3f)] + tab8[(threebytes6 & 0x3f)]; SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); } } } /*! * \brief makeValTabSG6() * *
 * Notes:
 *      (1) Returns an 8 bit value for the sum of ON pixels
 *          in a 6x6 square, according to
 *              val = 255 - (255 * sum)/36
 *          where sum is in [0,...,36]
 * 
*/ static l_uint8 * makeValTabSG6(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(37, sizeof(l_uint8)); for (i = 0; i < 37; i++) tab[i] = 0xff - (i * 255) / 36; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 8x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray8Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] tab8 made from makePixelSumTab8() * \param[in] valtab made from makeValTabSG8() * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) The output is processed one dest byte at a time,
 *          corresponding to 8 rows of src bytes in the input image.
 *          Two lookup tables are used.  The first, %tab8, gets the
 *          sum of ON pixels in a byte.  After sums from 8 rows have
 *          been added, the second table, %valtab, converts from this
 *          value which is between 0 and 64 to an 8 bpp grayscale
 *          value between 0 and 255: 0 for all 64 bits ON and 255
 *          for all 64 bits OFF.
 * 
*/ static void scaleToGray8Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab) { l_int32 i, j, k; l_int32 sbyte0, sbyte1, sbyte2, sbyte3, sbyte4, sbyte5, sbyte6, sbyte7, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * k indexes the source lines * j indexes the src and dest bytes * We take 8 bytes from the source (in 8 lines of 8 pixels * each) and convert it into one 8 bpp byte of the dest. */ for (i = 0, k = 0; i < hd; i++, k += 8) { lines = datas + k * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { sbyte0 = GET_DATA_BYTE(lines, j); sbyte1 = GET_DATA_BYTE(lines + wpls, j); sbyte2 = GET_DATA_BYTE(lines + 2 * wpls, j); sbyte3 = GET_DATA_BYTE(lines + 3 * wpls, j); sbyte4 = GET_DATA_BYTE(lines + 4 * wpls, j); sbyte5 = GET_DATA_BYTE(lines + 5 * wpls, j); sbyte6 = GET_DATA_BYTE(lines + 6 * wpls, j); sbyte7 = GET_DATA_BYTE(lines + 7 * wpls, j); sum = tab8[sbyte0] + tab8[sbyte1] + tab8[sbyte2] + tab8[sbyte3] + tab8[sbyte4] + tab8[sbyte5] + tab8[sbyte6] + tab8[sbyte7]; SET_DATA_BYTE(lined, j, valtab[sum]); } } } /*! * \brief makeValTabSG8() * *
 * Notes:
 *      (1) Returns an 8 bit value for the sum of ON pixels
 *          in an 8x8 square, according to
 *              val = 255 - (255 * sum)/64
 *          where sum is in [0,...,64]
 * 
*/ static l_uint8 * makeValTabSG8(void) { l_int32 i; l_uint8 *tab; tab = (l_uint8 *)LEPT_CALLOC(65, sizeof(l_uint8)); for (i = 0; i < 65; i++) tab[i] = 0xff - (i * 255) / 64; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 16x * *------------------------------------------------------------------*/ /*! * \brief scaleToGray16Low() * * \param[in] datad dest data * \param[in] wd, hd dest width, height * \param[in] wpld dest words/line * \param[in] datas src data * \param[in] wpls src words/line * \param[in] tab8 made from makePixelSumTab8() * \return 0 if OK; 1 on error. * *
 * Notes:
 *      (1) The output is processed one dest byte at a time, corresponding
 *          to 16 rows consisting each of 2 src bytes in the input image.
 *          This uses one lookup table, tab8, which gives the sum of
 *          ON pixels in a byte.  After summing for all ON pixels in the
 *          32 src bytes, which is between 0 and 256, this is converted
 *          to an 8 bpp grayscale value between 0 for 255 or 256 bits ON
 *          and 255 for 0 bits ON.
 * 
*/ static void scaleToGray16Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8) { l_int32 i, j, k, m; l_int32 sum; l_uint32 *lines, *lined; /* i indexes the dest lines * k indexes the source lines * j indexes the dest bytes * m indexes the src bytes * We take 32 bytes from the source (in 16 lines of 16 pixels * each) and convert it into one 8 bpp byte of the dest. */ for (i = 0, k = 0; i < hd; i++, k += 16) { lines = datas + k * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { m = 2 * j; sum = tab8[GET_DATA_BYTE(lines, m)]; sum += tab8[GET_DATA_BYTE(lines, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m + 1)]; sum = L_MIN(sum, 255); SET_DATA_BYTE(lined, j, 255 - sum); } } } /*------------------------------------------------------------------* * Grayscale mipmap * *------------------------------------------------------------------*/ /*! * \brief scaleMipmapLow() * *
 * Notes:
 *      (1) See notes in scale.c for pixScaleToGrayMipmap().  This function
 *          is here for pedagogical reasons.  It gives poor results on document
 *          images because of aliasing.
 * 
*/ static l_int32 scaleMipmapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas1, l_int32 wpls1, l_uint32 *datas2, l_int32 wpls2, l_float32 red) { l_int32 i, j, val1, val2, val, row2, col2; l_int32 *srow, *scol; l_uint32 *lines1, *lines2, *lined; l_float32 ratio, w1, w2; /* Clear dest */ memset(datad, 0, 4LL * wpld * hd); /* Each dest pixel at (j,i) is computed by interpolating between the two src images at the corresponding location. We store the UL corner locations of the square of src pixels in thelower-resolution image that correspond to dest pixel (j,i). The are labeled by the arrays srow[i], scol[j]. The UL corner locations of the higher resolution src pixels are obtained from these arrays by multiplying by 2. */ if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", __func__, 1); if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { LEPT_FREE(srow); return ERROR_INT("scol not made", __func__, 1); } ratio = 1.f / (2.f * red); /* 0.5 for red = 1, 1 for red = 0.5 */ for (i = 0; i < hd; i++) srow[i] = (l_int32)(ratio * i); for (j = 0; j < wd; j++) scol[j] = (l_int32)(ratio * j); /* Get weights for linear interpolation: these are the * 'distances' of the dest image plane from the two * src image planes. */ w1 = 2.f * red - 1.f; /* w1 --> 1 as red --> 1 */ w2 = 1.f - w1; /* For each dest pixel, compute linear interpolation */ for (i = 0; i < hd; i++) { row2 = srow[i]; lines1 = datas1 + 2 * row2 * wpls1; lines2 = datas2 + row2 * wpls2; lined = datad + i * wpld; for (j = 0; j < wd; j++) { col2 = scol[j]; val1 = GET_DATA_BYTE(lines1, 2 * col2); val2 = GET_DATA_BYTE(lines2, col2); val = (l_int32)(w1 * val1 + w2 * val2); SET_DATA_BYTE(lined, j, val); } } LEPT_FREE(srow); LEPT_FREE(scol); return 0; } leptonica-1.86.0/src/seedfill.c000066400000000000000000004110231506303110300162770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file seedfill.c *
 *
 *      Binary seedfill (source: Luc Vincent)
 *               PIX         *pixSeedfillBinary()
 *               PIX         *pixSeedfillBinaryRestricted()
 *               static void  seedfillBinaryLow()
 *
 *      Applications of binary seedfill to find and fill holes,
 *      remove c.c. touching the border and fill bg from border:
 *               PIX         *pixHolesByFilling()
 *               PIX         *pixFillClosedBorders()
 *               PIX         *pixExtractBorderConnComps()
 *               PIX         *pixRemoveBorderConnComps()
 *               PIX         *pixFillBgFromBorder()
 *
 *      Hole-filling of components to bounding rectangle
 *               PIX         *pixFillHolesToBoundingRect()
 *
 *      Gray seedfill (source: Luc Vincent:fast-hybrid-grayscale-reconstruction)
 *               l_int32      pixSeedfillGray()
 *               l_int32      pixSeedfillGrayInv()
 *               static void  seedfillGrayLow()
 *               static void  seedfillGrayInvLow()

 *
 *      Gray seedfill (source: Luc Vincent: sequential-reconstruction algorithm)
 *               l_int32      pixSeedfillGraySimple()
 *               l_int32      pixSeedfillGrayInvSimple()
 *               static void  seedfillGrayLowSimple()
 *               static void  seedfillGrayInvLowSimple()
 *
 *      Gray seedfill variations
 *               PIX         *pixSeedfillGrayBasin()
 *
 *      Distance function (source: Luc Vincent)
 *               PIX         *pixDistanceFunction()
 *               static void  distanceFunctionLow()
 *
 *      Seed spread (based on distance function)
 *               PIX         *pixSeedspread()
 *               static void  seedspreadLow()
 *
 *      Local extrema:
 *               l_int32      pixLocalExtrema()
 *            static l_int32  pixQualifyLocalMinima()
 *               l_int32      pixSelectedLocalExtrema()
 *               PIX         *pixFindEqualValues()
 *
 *      Selection of minima in mask of connected components
 *               PTA         *pixSelectMinInConnComp()
 *
 *      Removal of seeded connected components from a mask
 *               PIX         *pixRemoveSeededComponents()
 *
 *
 *           ITERATIVE RASTER-ORDER SEEDFILL
 *
 *      The basic method in the Vincent seedfill (aka reconstruction)
 *      algorithm is simple.  We describe here the situation for
 *      binary seedfill.  Pixels are sampled in raster order in
 *      the seed image.  If they are 4-connected to ON pixels
 *      either directly above or to the left, and are not masked
 *      out by the mask image, they are turned on (or remain on).
 *      (Ditto for 8-connected, except you need to check 3 pixels
 *      on the previous line as well as the pixel to the left
 *      on the current line.  This is extra computational work
 *      for relatively little gain, so it is preferable
 *      in most situations to use the 4-connected version.)
 *      The algorithm proceeds from UR to LL of the image, and
 *      then reverses and sweeps up from LL to UR.
 *      These double sweeps are iterated until there is no change.
 *      At this point, the seed has entirely filled the region it
 *      is allowed to, as delimited by the mask image.
 *
 *      The grayscale seedfill is a straightforward generalization
 *      of the binary seedfill, and is described in seedfillLowGray().
 *
 *      For some applications, the filled seed will later be OR'd
 *      with the negative of the mask.   This is used, for example,
 *      when you flood fill into a 4-connected region of OFF pixels
 *      and you want the result after those pixels are turned ON.
 *
 *      Note carefully that the mask we use delineates which pixels
 *      are allowed to be ON as the seed is filled.  We will call this
 *      a "filling mask".  As the seed expands, it is repeatedly
 *      ANDed with the filling mask: s & fm.  The process can equivalently
 *      be formulated using the inverse of the filling mask, which
 *      we will call a "blocking mask": bm = ~fm.   As the seed
 *      expands, the blocking mask is repeatedly used to prevent
 *      the seed from expanding into the blocking mask.  This is done
 *      by set subtracting the blocking mask from the expanded seed:
 *      s - bm.  Set subtraction of the blocking mask is equivalent
 *      to ANDing with the inverse of the blocking mask: s & (~bm).
 *      But from the inverse relation between blocking and filling
 *      masks, this is equal to s & fm, which proves the equivalence.
 *
 *      For efficiency, the pixels can be taken in larger units
 *      for processing, but still in raster order.  It is natural
 *      to take them in 32-bit words.  The outline of the work
 *      to be done for 4-cc (not including special cases for boundary
 *      words, such as the first line or the last word in each line)
 *      is as follows.  Let the filling mask be m.  The
 *      seed is to fill "under" the mask; i.e., limited by an AND
 *      with the mask.  Let the current word be w, the word
 *      in the line above be wa, and the previous word in the
 *      current line be wp.   Let t be a temporary word that
 *      is used in computation.  Note that masking is performed by
 *      w & m.  (If we had instead used a "blocking" mask, we
 *      would perform masking by the set subtraction operation,
 *      w - m, which is defined to be w & ~m.)
 *
 *      The entire operation can be implemented with shifts,
 *      logical operations and tests.  For each word in the seed image
 *      there are two steps.  The first step is to OR the word with
 *      the word above and with the rightmost pixel in wp (call it "x").
 *      Because wp is shifted one pixel to its right, "x" is ORed
 *      to the leftmost pixel of w.  We then clip to the ON pixels in
 *      the mask.  The result is
 *               t  <--  (w | wa | x000... ) & m
 *      We've now finished taking data from above and to the left.
 *      The second step is to allow filling to propagate horizontally
 *      in t, always making sure that it is properly masked at each
 *      step.  So if filling can be done (i.e., t is neither all 0s
 *      nor all 1s), iteratively take:
 *           t  <--  (t | (t >> 1) | (t << 1)) & m
 *      until t stops changing.  Then write t back into w.
 *
 *      Finally, the boundary conditions require we note that in doing
 *      the above steps:
 *          (a) The words in the first row have no wa
 *          (b) The first word in each row has no wp in that row
 *          (c) The last word in each row must be masked so that
 *              pixels don't propagate beyond the right edge of the
 *              actual image.  (This is easily accomplished by
 *              setting the out-of-bound pixels in m to OFF.)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" struct L_Pixel { l_int32 x; l_int32 y; }; typedef struct L_Pixel L_PIXEL; static void seedfillBinaryLow(l_uint32 *datas, l_int32 hs, l_int32 wpls, l_uint32 *datam, l_int32 hm, l_int32 wplm, l_int32 connectivity); static void seedfillGrayLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity); static void seedfillGrayInvLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity); static void seedfillGrayLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity); static void seedfillGrayInvLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity); static void distanceFunctionLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 d, l_int32 wpld, l_int32 connectivity); static void seedspreadLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datat, l_int32 wplt, l_int32 connectivity); static l_int32 pixQualifyLocalMinima(PIX *pixs, PIX *pixm, l_int32 maxval); #ifndef NO_CONSOLE_IO #define DEBUG_PRINT_ITERS 0 #endif /* ~NO_CONSOLE_IO */ /* Two-way (UL --> LR, LR --> UL) sweep iterations; typically need only 4 */ static const l_int32 MaxIters = 40; /*-----------------------------------------------------------------------* * Vincent's Iterative Binary Seedfill method * *-----------------------------------------------------------------------*/ /*! * \brief pixSeedfillBinary() * * \param[in] pixd [optional]; can be null, equal to pixs, * or different from pixs; 1 bpp * \param[in] pixs 1 bpp seed * \param[in] pixm 1 bpp filling mask * \param[in] connectivity 4 or 8 * \return pixd always * *
 * Notes:
 *      (1) This is for binary seedfill (aka "binary reconstruction").
 *      (2) There are 3 cases:
 *            (a) pixd == null (make a new pixd)
 *            (b) pixd == pixs (in-place)
 *            (c) pixd != pixs
 *      (3) If you know the case, use these patterns for clarity:
 *            (a) pixd = pixSeedfillBinary(NULL, pixs, ...);
 *            (b) pixSeedfillBinary(pixs, pixs, ...);
 *            (c) pixSeedfillBinary(pixd, pixs, ...);
 *      (4) The resulting pixd contains the filled seed.  For some
 *          applications you want to OR it with the inverse of
 *          the filling mask.
 *      (5) The input seed and mask images can be different sizes, but
 *          in typical use the difference, if any, would be only
 *          a few pixels in each direction.  If the sizes differ,
 *          the clipping is handled by the low-level function
 *          seedfillBinaryLow().
 * 
*/ PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, boolval; l_int32 hd, hm, wpld, wplm; l_uint32 *datad, *datam; PIX *pixt; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, pixd); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, pixd); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", __func__, pixd); /* Prepare pixd as a copy of pixs if not identical */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetPadBits(pixd, 0); /* be safe: */ pixSetPadBits(pixm, 0); /* avoid using uninitialized memory */ /* pixt is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", __func__, pixd); hd = pixGetHeight(pixd); hm = pixGetHeight(pixm); /* included so seedfillBinaryLow() can clip */ datad = pixGetData(pixd); datam = pixGetData(pixm); wpld = pixGetWpl(pixd); wplm = pixGetWpl(pixm); for (i = 0; i < MaxIters; i++) { pixCopy(pixt, pixd); seedfillBinaryLow(datad, hd, wpld, datam, hm, wplm, connectivity); pixEqual(pixd, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS lept_stderr("Binary seed fill converged: %d iters\n", i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return pixd; } /*! * \brief pixSeedfillBinaryRestricted() * * \param[in] pixd [optional]; can be null, equal to pixs, * or different from pixs; 1 bpp * \param[in] pixs 1 bpp seed * \param[in] pixm 1 bpp filling mask * \param[in] connectivity 4 or 8 * \param[in] xmax max distance in x direction of fill into mask * \param[in] ymax max distance in y direction of fill into mask * \return pixd always * *
 * Notes:
 *      (1) See usage for pixSeedfillBinary(), which has unrestricted fill.
 *          In pixSeedfillBinary(), the filling distance is unrestricted
 *          and can be larger than pixs, depending on the topology of
 *          th mask.
 *      (2) There are occasions where it is useful not to permit the
 *          fill to go more than a certain distance into the mask.
 *          %xmax specifies the maximum horizontal distance allowed
 *          in the fill; %ymax does likewise in the vertical direction.
 *      (3) Operationally, the max "distance" allowed for the fill
 *          is a linear distance from the original seed, independent
 *          of the actual mask topology.
 *      (4) Another formulation of this problem, not implemented,
 *          would use the manhattan distance from the seed, as
 *          determined by a breadth-first search starting at the seed
 *          boundaries and working outward where the mask fg allows.
 *          How this might use the constraints of separate xmax and ymax
 *          is not clear.
 * 
*/ PIX * pixSeedfillBinaryRestricted(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax) { l_int32 w, h; PIX *pix1, *pix2; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, pixd); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, pixd); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", __func__, pixd); if (xmax == 0 && ymax == 0) /* no filling permitted */ return pixClone(pixs); if (xmax < 0 || ymax < 0) { L_ERROR("xmax and ymax must be non-negative", __func__); return pixClone(pixs); } /* Full fill from the seed into the mask. */ if ((pix1 = pixSeedfillBinary(NULL, pixs, pixm, connectivity)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", __func__, pixd); /* Dilate the seed. This gives the maximal region where changes * are permitted. Invert to get the region where pixs is * not allowed to change. */ pix2 = pixDilateCompBrick(NULL, pixs, 2 * xmax + 1, 2 * ymax + 1); pixInvert(pix2, pix2); /* Blank the region of pix1 specified by the fg of pix2. * This is not yet the final result, because it may have fg pixels * that are not accessible from the seed in the restricted distance. * For example, such pixels may be connected to the original seed, * but through a path that goes outside the permitted region. */ pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pix1, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); /* To get the accessible pixels in the restricted region, do * a second seedfill from the original seed, using pix1 as * a mask. The result, in pixd, will not have any bad fg * pixels that were in pix1. */ pixd = pixSeedfillBinary(pixd, pixs, pix1, connectivity); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * \brief seedfillBinaryLow() * * Notes: * (1) This is an in-place fill, where the seed image is * filled, clipping to the filling mask, in one full * cycle of UL -> LR and LR -> UL raster scans. * (2) Assume the mask is a filling mask, not a blocking mask. * (3) Assume that the RHS pad bits of the mask * are properly set to 0. * (4) Clip to the smallest dimensions to avoid invalid reads. */ static void seedfillBinaryLow(l_uint32 *datas, l_int32 hs, l_int32 wpls, l_uint32 *datam, l_int32 hm, l_int32 wplm, l_int32 connectivity) { l_int32 i, j, h, wpl; l_uint32 word, mask; l_uint32 wordabove, wordleft, wordbelow, wordright; l_uint32 wordprev; /* test against this in previous iteration */ l_uint32 *lines, *linem; h = L_MIN(hs, hm); wpl = L_MIN(wpls, wplm); switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wpl; j++) { word = *(lines + j); mask = *(linem + j); /* OR from word above and from word to left; mask */ if (i > 0) { wordabove = *(lines - wpls + j); word |= wordabove; } if (j > 0) { wordleft = *(lines + j - 1); word |= wordleft << 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } /* LR --> UL scan */ for (i = h - 1; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = wpl - 1; j >= 0; j--) { word = *(lines + j); mask = *(linem + j); /* OR from word below and from word to right; mask */ if (i < h - 1) { wordbelow = *(lines + wpls + j); word |= wordbelow; } if (j < wpl - 1) { wordright = *(lines + j + 1); word |= wordright >> 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wpl; j++) { word = *(lines + j); mask = *(linem + j); /* OR from words above and from word to left; mask */ if (i > 0) { wordabove = *(lines - wpls + j); word |= (wordabove | (wordabove << 1) | (wordabove >> 1)); if (j > 0) word |= (*(lines - wpls + j - 1)) << 31; if (j < wpl - 1) word |= (*(lines - wpls + j + 1)) >> 31; } if (j > 0) { wordleft = *(lines + j - 1); word |= wordleft << 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } /* LR --> UL scan */ for (i = h - 1; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = wpl - 1; j >= 0; j--) { word = *(lines + j); mask = *(linem + j); /* OR from words below and from word to right; mask */ if (i < h - 1) { wordbelow = *(lines + wpls + j); word |= (wordbelow | (wordbelow << 1) | (wordbelow >> 1)); if (j > 0) word |= (*(lines + wpls + j - 1)) << 31; if (j < wpl - 1) word |= (*(lines + wpls + j + 1)) >> 31; } if (j < wpl - 1) { wordright = *(lines + j + 1); word |= wordright >> 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", __func__); } } /*! * \brief pixHolesByFilling() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \return pixd inverted image of all holes, or NULL on error * * Action: * 1 Start with 1-pixel black border on otherwise white pixd * 2 Use the inverted pixs as the filling mask to fill in * all the pixels from the border to the pixs foreground * 3 OR the result with pixs to have an image with all * ON pixels except for the holes. * 4 Invert the result to get the holes as foreground * *
 * Notes:
 *     (1) To get 4-c.c. holes of the 8-c.c. as foreground, use
 *         4-connected filling; to get 8-c.c. holes of the 4-c.c.
 *         as foreground, use 8-connected filling.
 * 
*/ PIX * pixHolesByFilling(PIX *pixs, l_int32 connectivity) { PIX *pixsi, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); if ((pixsi = pixInvert(NULL, pixs)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pixsi not made", __func__, NULL); } pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); pixSeedfillBinary(pixd, pixd, pixsi, connectivity); pixOr(pixd, pixd, pixs); pixInvert(pixd, pixd); pixDestroy(&pixsi); return pixd; } /*! * \brief pixFillClosedBorders() * * \param[in] pixs 1 bpp * \param[in] connectivity filling connectivity 4 or 8 * \return pixd all topologically outer closed borders are filled * as connected comonents, or NULL on error * *
 * Notes:
 *      (1) Start with 1-pixel black border on otherwise white pixd
 *      (2) Subtract input pixs to remove border pixels that were
 *          also on the closed border
 *      (3) Use the inverted pixs as the filling mask to fill in
 *          all the pixels from the outer border to the closed border
 *          on pixs
 *      (4) Invert the result to get the filled component, including
 *          the input border
 *      (5) If the borders are 4-c.c., use 8-c.c. filling, and v.v.
 *      (6) Closed borders within c.c. that represent holes, etc., are filled.
 * 
*/ PIX * pixFillClosedBorders(PIX *pixs, l_int32 connectivity) { PIX *pixsi, *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); pixSubtract(pixd, pixd, pixs); if ((pixsi = pixInvert(NULL, pixs)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pixsi not made", __func__, NULL); } pixSeedfillBinary(pixd, pixd, pixsi, connectivity); pixInvert(pixd, pixd); pixDestroy(&pixsi); return pixd; } /*! * \brief pixExtractBorderConnComps() * * \param[in] pixs 1 bpp * \param[in] connectivity filling connectivity 4 or 8 * \return pixd all pixels in the src that are in connected * components touching the border, or NULL on error */ PIX * pixExtractBorderConnComps(PIX *pixs, l_int32 connectivity) { PIX *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); /* Start with 1 pixel wide black border as seed in pixd */ if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); /* Fill in pixd from the seed, using pixs as the filling mask. * This fills all components from pixs that are touching the border. */ pixSeedfillBinary(pixd, pixd, pixs, connectivity); return pixd; } /*! * \brief pixRemoveBorderConnComps() * * \param[in] pixs 1 bpp * \param[in] connectivity filling connectivity 4 or 8 * \return pixd all pixels in the src that are not touching the * border or NULL on error * *
 * Notes:
 *      (1) This removes all fg components touching the border.
 * 
*/ PIX * pixRemoveBorderConnComps(PIX *pixs, l_int32 connectivity) { PIX *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); /* Fill from a 1 pixel wide seed at the border into all components * in pixs (the filling mask) that are touching the border */ pixd = pixExtractBorderConnComps(pixs, connectivity); /* Save in pixd only those components in pixs not touching the border */ pixXor(pixd, pixd, pixs); return pixd; } /*! * \brief pixFillBgFromBorder() * * \param[in] pixs 1 bpp * \param[in] connectivity filling connectivity 4 or 8 * \return pixd with the background c.c. touching the border * filled to foreground, or NULL on error * *
 * Notes:
 *      (1) This fills all bg components touching the border to fg.
 *          It is the photometric inverse of pixRemoveBorderConnComps().
 *      (2) Invert the result to get the "holes" left after this fill.
 *          This can be done multiple times, extracting holes within
 *          holes after each pair of fillings.  Specifically, this code
 *          peels away n successive embeddings of components:
 * \code
 *              pix1 = 
 *              for (i = 0; i < 2 * n; i++) {
 *                   pix2 = pixFillBgFromBorder(pix1, 8);
 *                   pixInvert(pix2, pix2);
 *                   pixDestroy(&pix1);
 *                   pix1 = pix2;
 *              }
 * \endcode
 * 
*/ PIX * pixFillBgFromBorder(PIX *pixs, l_int32 connectivity) { PIX *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); /* Invert to turn bg touching the border to a fg component. * Extract this by filling from a 1 pixel wide seed at the border. */ pixInvert(pixs, pixs); pixd = pixExtractBorderConnComps(pixs, connectivity); pixInvert(pixs, pixs); /* restore pixs */ /* Bit-or the filled bg component with pixs */ pixOr(pixd, pixd, pixs); return pixd; } /*-----------------------------------------------------------------------* * Hole-filling of components to bounding rectangle * *-----------------------------------------------------------------------*/ /*! * \brief pixFillHolesToBoundingRect() * * \param[in] pixs 1 bpp * \param[in] minsize min number of pixels in the hole * \param[in] maxhfract max hole area as fraction of fg pixels in the cc * \param[in] minfgfract min fg area as fraction of bounding rectangle * \return pixd with some holes possibly filled and some c.c. possibly * expanded to their bounding rects, or NULL on error * *
 * Notes:
 *      (1) This does not fill holes that are smaller in area than 'minsize'.
 *          Use %minsize = 0 and %maxhfract = 1.0 to fill all holes.
 *      (2) This does not fill holes with an area larger than
 *          %maxhfract times the fg area of the c.c.
 *          Use 1.0 to fill all holes.
 *      (3) This does not expand the fg of the c.c. to bounding rect if
 *          the fg area is less than %minfgfract times the area of the
 *          bounding rect.  Use 1.0 to skip expanding to the bounding rect.
 *      (4) The decisions are made as follows:
 *           ~ Decide if we are filling the holes; if so, when using
 *             the fg area, include the filled holes.
 *           ~ Decide based on the fg area if we are filling to a bounding rect.
 *             If so, do it.
 *             If not, fill the holes if the condition is satisfied.
 *      (5) The choice of %minsize depends on the resolution.
 *      (6) For solidifying image mask regions on printed materials,
 *          which tend to be rectangular, values for %maxhfract
 *          and %minfgfract around 0.5 are reasonable.
 * 
*/ PIX * pixFillHolesToBoundingRect(PIX *pixs, l_int32 minsize, l_float32 maxhfract, l_float32 minfgfract) { l_int32 i, x, y, w, h, n, nfg, nh, ntot, area; l_int32 *tab; l_float32 hfract; /* measured hole fraction */ l_float32 fgfract; /* measured fg fraction */ BOXA *boxa; PIX *pixd, *pixfg, *pixh; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); maxhfract = L_MIN(L_MAX(maxhfract, 0.0), 1.0); minfgfract = L_MIN(L_MAX(minfgfract, 0.0), 1.0); pixd = pixCopy(NULL, pixs); boxa = pixConnComp(pixd, &pixa, 8); n = boxaGetCount(boxa); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); area = w * h; if (area < minsize) continue; pixfg = pixaGetPix(pixa, i, L_COPY); pixh = pixHolesByFilling(pixfg, 4); /* holes only */ pixCountPixels(pixfg, &nfg, tab); pixCountPixels(pixh, &nh, tab); hfract = (l_float32)nh / (l_float32)nfg; ntot = nfg; if (hfract <= maxhfract) /* we will fill the holes (at least) */ ntot = nfg + nh; fgfract = (l_float32)ntot / (l_float32)area; if (fgfract >= minfgfract) { /* fill to bounding rect */ pixSetAll(pixfg); pixRasterop(pixd, x, y, w, h, PIX_SRC, pixfg, 0, 0); } else if (hfract <= maxhfract) { /* fill just the holes */ pixRasterop(pixd, x, y, w, h, PIX_DST | PIX_SRC , pixh, 0, 0); } pixDestroy(&pixfg); pixDestroy(&pixh); } boxaDestroy(&boxa); pixaDestroy(&pixa); LEPT_FREE(tab); return pixd; } /*-----------------------------------------------------------------------* * Vincent's hybrid Grayscale Seedfill method * *-----------------------------------------------------------------------*/ /*! * \brief pixSeedfillGray() * * \param[in] pixs 8 bpp seed; filled in place * \param[in] pixm 8 bpp filling mask * \param[in] connectivity 4 or 8 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place filling operation on the seed, pixs,
 *          where the clipping mask is always above or at the level
 *          of the seed as it is filled.
 *      (2) For details of the operation, see the description in
 *          seedfillGrayLow() and the code there.
 *      (3) As an example of use, see the description in pixHDome().
 *          There, the seed is an image where each pixel is a fixed
 *          amount smaller than the corresponding mask pixel.
 *      (4) Reference paper :
 *            L. Vincent, Morphological grayscale reconstruction in image
 *            analysis: applications and efficient algorithms, IEEE Transactions
 *            on  Image Processing, vol. 2, no. 2, pp. 176-201, 1993.
 * 
*/ l_ok pixSeedfillGray(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 h, w, wpls, wplm; l_uint32 *datas, *datam; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", __func__, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", __func__, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); seedfillGrayLow(datas, w, h, wpls, datam, wplm, connectivity); return 0; } /*! * \brief pixSeedfillGrayInv() * * \param[in] pixs 8 bpp seed; filled in place * \param[in] pixm 8 bpp filling mask * \param[in] connectivity 4 or 8 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place filling operation on the seed, pixs,
 *          where the clipping mask is always below or at the level
 *          of the seed as it is filled.  Think of filling up a basin
 *          to a particular level, given by the maximum seed value
 *          in the basin.  Outside the filled region, the mask
 *          is above the filling level.
 *      (2) Contrast this with pixSeedfillGray(), where the clipping mask
 *          is always above or at the level of the fill.  An example
 *          of its use is the hdome fill, where the seed is an image
 *          where each pixel is a fixed amount smaller than the
 *          corresponding mask pixel.
 *      (3) The basin fill, pixSeedfillGrayBasin(), is a special case
 *          where the seed pixel values are generated from the mask,
 *          and where the implementation uses pixSeedfillGray() by
 *          inverting both the seed and mask.
 * 
*/ l_ok pixSeedfillGrayInv(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 h, w, wpls, wplm; l_uint32 *datas, *datam; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", __func__, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", __func__, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); seedfillGrayInvLow(datas, w, h, wpls, datam, wplm, connectivity); return 0; } /*! * \brief seedfillGrayLow() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * This is followed by a breadth-first propagation operation to * complete the fill. * During the anti-raster scan, every pixel p whose current value * could still be propagated after the anti-raster scan is put into * the FIFO queue. * The propagation step is a breadth-first fill to completion. * Unlike the simple grayscale seedfill pixSeedfillGraySimple(), * where at least two full raster/anti-raster iterations are required * for completion and verification, the hybrid method uses only a * single raster/anti-raster set of scans. * (2) The filling action can be visualized from the following example. * Suppose the mask, which clips the fill, is a sombrero-shaped * surface, where the highest point is 200 and the low pixels * around the rim are 30. Beyond the rim, the mask goes up a bit. * Suppose the seed, which is filled, consists of a single point * of height 150, located below the max of the mask, with * the rest 0. Then in the raster scan, nothing happens until * the high seed point is encountered, and then this value is * propagated right and down, until it hits the side of the * sombrero. The seed can never exceed the mask, so it fills * to the rim, going lower along the mask surface. When it * passes the rim, the seed continues to fill at the rim * height to the edge of the seed image. Then on the * anti-raster scan, the seed fills flat inside the * sombrero to the upper and left, and then out from the * rim as before. The final result has a seed that is * flat outside the rim, and inside it fills the sombrero * but only up to 150. If the rim height varies, the * filled seed outside the rim will be at the highest * point on the rim, which is a saddle point on the rim. * (3) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ static void seedfillGrayLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 val, maxval, maskval, boolval; l_int32 i, j, imax, jmax, queue_size; l_uint32 *lines, *linem; L_PIXEL *pixel; L_QUEUE *lq_pixel; if (connectivity != 4 && connectivity != 8) { L_ERROR("connectivity must be 4 or 8\n", __func__); return; } imax = h - 1; jmax = w - 1; /* In the worst case, most of the pixels could be pushed * onto the FIFO queue during anti-raster scan. However this * will rarely happen, and we initialize the queue ptr size to * the image perimeter. */ lq_pixel = lqueueCreate(2 * (w + h)); switch (connectivity) { case 4: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in raster order}) * intersection I(p) */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) maxval = GET_DATA_BYTE(lines - wpls, j); if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan (anti-raster order) * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) * intersection I(p) */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) maxval = GET_DATA_BYTE(lines + wpls, j); if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(q) < I(q) then * fifo_add(p) */ if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); if ((val7 < val) && (val7 < GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val5 < GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and I(q) != J(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; LEPT_FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val2 != maskval) { SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val4 != maskval) { SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val7 != maskval) { SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val5 != maskval) { SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; case 8: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in raster order}) * intersection I(p) */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) { if (j > 0) maxval = GET_DATA_BYTE(lines - wpls, j - 1); if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val3); } val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan (anti-raster order) * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) * intersection I(p) */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) { if (j > 0) { maxval = GET_DATA_BYTE(lines + wpls, j - 1); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); /* If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(q) < I(q) then * fifo_add(p) */ if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); if ((val6 < val) && (val6 < GET_DATA_BYTE(linem + wplm, j - 1))) { boolval = TRUE; } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); if (!boolval && (val8 < val) && (val8 < GET_DATA_BYTE(linem + wplm, j + 1))) { boolval = TRUE; } } val7 = GET_DATA_BYTE(lines + wpls, j); if (!boolval && (val7 < val) && (val7 < GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val5 < GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and I(q) != J(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; LEPT_FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maskval = GET_DATA_BYTE(linem - wplm, j - 1); if (val > val1 && val1 != maskval) { SET_DATA_BYTE(lines - wpls, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maskval = GET_DATA_BYTE(linem - wplm, j + 1); if (val > val3 && val3 != maskval) { SET_DATA_BYTE(lines - wpls, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val2 != maskval) { SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val4 != maskval) { SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maskval = GET_DATA_BYTE(linem + wplm, j - 1); if (val > val6 && val6 != maskval) { SET_DATA_BYTE(lines + wpls, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maskval = GET_DATA_BYTE(linem + wplm, j + 1); if (val > val8 && val8 != maskval) { SET_DATA_BYTE(lines + wpls, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val7 != maskval) { SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val5 != maskval) { SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; default: L_ERROR("shouldn't get here!\n", __func__); } lqueueDestroy(&lq_pixel, TRUE); } /*! * \brief seedfillGrayInvLow() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * During the anti-raster scan, every pixel p such that its * current value could still be propagated during the next * raster scanning is put into the FIFO-queue. * Next step is the propagation step where where we update * and propagate the values using FIFO structure created in * anti-raster scan. * (2) The "Inv" signifies the fact that in this case, filling * of the seed only takes place when the seed value is * greater than the mask value. The mask will act to stop * the fill when it is higher than the seed level. (This is * in contrast to conventional grayscale filling where the * seed always fills below the mask.) * (3) An example of use is a basin, described by the mask (pixm), * where within the basin, the seed pix (pixs) gets filled to the * height of the highest seed pixel that is above its * corresponding max pixel. Filling occurs while the * propagating seed pixels in pixs are larger than the * corresponding mask values in pixm. * (4) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ static void seedfillGrayInvLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 val, maxval, maskval, boolval; l_int32 i, j, imax, jmax, queue_size; l_uint32 *lines, *linem; L_PIXEL *pixel; L_QUEUE *lq_pixel; if (connectivity != 4 && connectivity != 8) { L_ERROR("connectivity must be 4 or 8\n", __func__); return; } imax = h - 1; jmax = w - 1; /* In the worst case, most of the pixels could be pushed * onto the FIFO queue during anti-raster scan. However this * will rarely happen, and we initialize the queue ptr size to * the image perimeter. */ lq_pixel = lqueueCreate(2 * (w + h)); switch (connectivity) { case 4: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan (anti-raster order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in anti-raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { val = maxval = GET_DATA_BYTE(lines, j); if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); val = GET_DATA_BYTE(lines, j); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(p) > I(q) then * fifo_add(p) */ if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); if ((val7 < val) && (val > GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val > GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and J(p) > I(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; LEPT_FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val > maskval) { SET_DATA_BYTE(lines - wpls, j, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val > maskval) { SET_DATA_BYTE(lines, j - 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val > maskval) { SET_DATA_BYTE(lines + wpls, j, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val > maskval) { SET_DATA_BYTE(lines, j + 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; case 8: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maxval = L_MAX(maxval, val1); } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val3); } val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan (anti-raster order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in anti-raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maxval = L_MAX(maxval, val6); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); val = GET_DATA_BYTE(lines, j); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(p) > I(q) then * fifo_add(p) */ if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); if ((val6 < val) && (val > GET_DATA_BYTE(linem + wplm, j - 1))) { boolval = TRUE; } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); if (!boolval && (val8 < val) && (val > GET_DATA_BYTE(linem + wplm, j + 1))) { boolval = TRUE; } } val7 = GET_DATA_BYTE(lines + wpls, j); if (!boolval && (val7 < val) && (val > GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val > GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and J(p) > I(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; LEPT_FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maskval = GET_DATA_BYTE(linem - wplm, j - 1); if (val > val1 && val > maskval) { SET_DATA_BYTE(lines - wpls, j - 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maskval = GET_DATA_BYTE(linem - wplm, j + 1); if (val > val3 && val > maskval) { SET_DATA_BYTE(lines - wpls, j + 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val > maskval) { SET_DATA_BYTE(lines - wpls, j, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val > maskval) { SET_DATA_BYTE(lines, j - 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maskval = GET_DATA_BYTE(linem + wplm, j - 1); if (val > val6 && val > maskval) { SET_DATA_BYTE(lines + wpls, j - 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maskval = GET_DATA_BYTE(linem + wplm, j + 1); if (val > val8 && val > maskval) { SET_DATA_BYTE(lines + wpls, j + 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val > maskval) { SET_DATA_BYTE(lines + wpls, j, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val > maskval) { SET_DATA_BYTE(lines, j + 1, val); pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; default: L_ERROR("shouldn't get here!\n", __func__); } lqueueDestroy(&lq_pixel, TRUE); } /*-----------------------------------------------------------------------* * Vincent's Iterative Grayscale Seedfill method * *-----------------------------------------------------------------------*/ /*! * \brief pixSeedfillGraySimple() * * \param[in] pixs 8 bpp seed; filled in place * \param[in] pixm 8 bpp filling mask * \param[in] connectivity 4 or 8 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place filling operation on the seed, pixs,
 *          where the clipping mask is always above or at the level
 *          of the seed as it is filled.
 *      (2) For details of the operation, see the description in
 *          seedfillGrayLowSimple() and the code there.
 *      (3) As an example of use, see the description in pixHDome().
 *          There, the seed is an image where each pixel is a fixed
 *          amount smaller than the corresponding mask pixel.
 *      (4) Reference paper :
 *            L. Vincent, Morphological grayscale reconstruction in image
 *            analysis: applications and efficient algorithms, IEEE Transactions
 *            on  Image Processing, vol. 2, no. 2, pp. 176-201, 1993.
 * 
*/ l_ok pixSeedfillGraySimple(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, h, w, wpls, wplm, boolval; l_uint32 *datas, *datam; PIX *pixt; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", __func__, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", __func__, 1); /* This is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return ERROR_INT("pixt not made", __func__, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < MaxIters; i++) { pixCopy(pixt, pixs); seedfillGrayLowSimple(datas, w, h, wpls, datam, wplm, connectivity); pixEqual(pixs, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS L_INFO("Gray seed fill converged: %d iters\n", __func__, i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return 0; } /*! * \brief pixSeedfillGrayInvSimple() * * \param[in] pixs 8 bpp seed; filled in place * \param[in] pixm 8 bpp filling mask * \param[in] connectivity 4 or 8 * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is an in-place filling operation on the seed, pixs,
 *          where the clipping mask is always below or at the level
 *          of the seed as it is filled.  Think of filling up a basin
 *          to a particular level, given by the maximum seed value
 *          in the basin.  Outside the filled region, the mask
 *          is above the filling level.
 *      (2) Contrast this with pixSeedfillGraySimple(), where the clipping mask
 *          is always above or at the level of the fill.  An example
 *          of its use is the hdome fill, where the seed is an image
 *          where each pixel is a fixed amount smaller than the
 *          corresponding mask pixel.
 * 
*/ l_ok pixSeedfillGrayInvSimple(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, h, w, wpls, wplm, boolval; l_uint32 *datas, *datam; PIX *pixt; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", __func__, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", __func__, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", __func__, 1); /* This is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return ERROR_INT("pixt not made", __func__, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < MaxIters; i++) { pixCopy(pixt, pixs); seedfillGrayInvLowSimple(datas, w, h, wpls, datam, wplm, connectivity); pixEqual(pixs, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS L_INFO("Gray seed fill converged: %d iters\n", __func__, i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return 0; } /*! * \brief seedfillGrayLowSimple() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * The caller typically iterates until the filling is * complete. * (2) The filling action can be visualized from the following example. * Suppose the mask, which clips the fill, is a sombrero-shaped * surface, where the highest point is 200 and the low pixels * around the rim are 30. Beyond the rim, the mask goes up a bit. * Suppose the seed, which is filled, consists of a single point * of height 150, located below the max of the mask, with * the rest 0. Then in the raster scan, nothing happens until * the high seed point is encountered, and then this value is * propagated right and down, until it hits the side of the * sombrero. The seed can never exceed the mask, so it fills * to the rim, going lower along the mask surface. When it * passes the rim, the seed continues to fill at the rim * height to the edge of the seed image. Then on the * anti-raster scan, the seed fills flat inside the * sombrero to the upper and left, and then out from the * rim as before. The final result has a seed that is * flat outside the rim, and inside it fills the sombrero * but only up to 150. If the rim height varies, the * filled seed outside the rim will be at the highest * point on the rim, which is a saddle point on the rim. */ static void seedfillGrayLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val2, val3, val4, val5, val7, val8; l_uint8 val, maxval, maskval; l_int32 i, j, imax, jmax; l_uint32 *lines, *linem; imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) maxval = GET_DATA_BYTE(lines - wpls, j); if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) maxval = GET_DATA_BYTE(lines + wpls, j); if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) { if (j > 0) maxval = GET_DATA_BYTE(lines - wpls, j - 1); if (j < jmax) { val2 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val2); } val3 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val3); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) { if (j > 0) maxval = GET_DATA_BYTE(lines + wpls, j - 1); if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } break; default: L_ERROR("connectivity must be 4 or 8\n", __func__); } } /*! * \brief seedfillGrayInvLowSimple() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * The caller typically iterates until the filling is * complete. * (2) The "Inv" signifies the fact that in this case, filling * of the seed only takes place when the seed value is * greater than the mask value. The mask will act to stop * the fill when it is higher than the seed level. (This is * in contrast to conventional grayscale filling where the * seed always fills below the mask.) * (3) An example of use is a basin, described by the mask (pixm), * where within the basin, the seed pix (pixs) gets filled to the * height of the highest seed pixel that is above its * corresponding max pixel. Filling occurs while the * propagating seed pixels in pixs are larger than the * corresponding mask values in pixm. */ static void seedfillGrayInvLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 maxval, maskval; l_int32 i, j, imax, jmax; l_uint32 *lines, *linem; imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maxval = L_MAX(maxval, val1); } if (j < jmax) { val2 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val2); } val3 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val3); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maxval = L_MAX(maxval, val6); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } break; default: L_ERROR("connectivity must be 4 or 8\n", __func__); } } /*-----------------------------------------------------------------------* * Gray seedfill variations * *-----------------------------------------------------------------------*/ /*! * \brief pixSeedfillGrayBasin() * * \param[in] pixb binary mask giving seed locations * \param[in] pixm 8 bpp basin-type filling mask * \param[in] delta amount of seed value above mask * \param[in] connectivity 4 or 8 * \return pixd filled seed if OK, NULL on error * *
 * Notes:
 *      (1) This fills from a seed within basins defined by a filling mask.
 *          The seed value(s) are greater than the corresponding
 *          filling mask value, and the result has the bottoms of
 *          the basins raised by the initial seed value.
 *      (2) The seed has value 255 except where pixb has fg (1), which
 *          are the seed 'locations'.  At the seed locations, the seed
 *          value is the corresponding value of the mask pixel in pixm
 *          plus %delta.  If %delta == 0, we return a copy of pixm.
 *      (3) The actual filling is done using the standard grayscale filling
 *          operation on the inverse of the mask and using the inverse
 *          of the seed image.  After filling, we return the inverse of
 *          the filled seed.
 *      (4) As an example of use: pixm can describe a grayscale image
 *          of text, where the (dark) text pixels are basins of
 *          low values; pixb can identify the local minima in pixm (say, at
 *          the bottom of the basins); and delta is the amount that we wish
 *          to raise (lighten) the basins.  We construct the seed
 *          (a.k.a marker) image from pixb, pixm and %delta.
 * 
*/ PIX * pixSeedfillGrayBasin(PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity) { PIX *pixbi, *pixmi, *pixsd; if (!pixb || pixGetDepth(pixb) != 1) return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", __func__, NULL); if (!pixm || pixGetDepth(pixm) != 8) return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", __func__, NULL); if (delta <= 0) { L_WARNING("delta <= 0; returning a copy of pixm\n", __func__); return pixCopy(NULL, pixm); } /* Add delta to every pixel in pixm */ pixsd = pixCopy(NULL, pixm); pixAddConstantGray(pixsd, delta); /* Prepare the seed. Write 255 in all pixels of * ([pixm] + delta) where pixb is 0. */ pixbi = pixInvert(NULL, pixb); pixSetMasked(pixsd, pixbi, 255); /* Fill the inverse seed, using the inverse clipping mask */ pixmi = pixInvert(NULL, pixm); pixInvert(pixsd, pixsd); pixSeedfillGray(pixsd, pixmi, connectivity); /* Re-invert the filled seed */ pixInvert(pixsd, pixsd); pixDestroy(&pixbi); pixDestroy(&pixmi); return pixsd; } /*-----------------------------------------------------------------------* * Vincent's Distance Function method * *-----------------------------------------------------------------------*/ /*! * \brief pixDistanceFunction() * * \param[in] pixs 1 bpp * \param[in] connectivity 4 or 8 * \param[in] outdepth 8 or 16 bits for pixd * \param[in] boundcond L_BOUNDARY_BG, L_BOUNDARY_FG * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This computes the distance of each pixel from the nearest
 *          background pixel.  All bg pixels therefore have a distance of 0,
 *          and the fg pixel distances increase linearly from 1 at the
 *          boundary.  It can also be used to compute the distance of
 *          each pixel from the nearest fg pixel, by inverting the input
 *          image before calling this function.  Then all fg pixels have
 *          a distance 0 and the bg pixel distances increase linearly
 *          from 1 at the boundary.
 *      (2) The algorithm, described in Leptonica on the page on seed
 *          filling and connected components, is due to Luc Vincent.
 *          In brief, we generate an 8 or 16 bpp image, initialized
 *          with the fg pixels of the input pix set to 1 and the
 *          1-boundary pixels (i.e., the boundary pixels of width 1 on
 *          the four sides set as either:
 *            * L_BOUNDARY_BG: 0
 *            * L_BOUNDARY_FG:  max
 *          where max = 0xff for 8 bpp and 0xffff for 16 bpp.
 *          Then do raster/anti-raster sweeps over all pixels interior
 *          to the 1-boundary, where the value of each new pixel is
 *          taken to be 1 more than the minimum of the previously-seen
 *          connected pixels (using either 4 or 8 connectivity).
 *          Finally, set the 1-boundary pixels using the mirrored method;
 *          this removes the max values there.
 *      (3) Using L_BOUNDARY_BG clamps the distance to 0 at the
 *          boundary.  Using L_BOUNDARY_FG allows the distance
 *          at the image boundary to "float".
 *      (4) For 4-connected, one could initialize only the left and top
 *          1-boundary pixels, and go all the way to the right
 *          and bottom; then coming back reset left and top.  But we
 *          instead use a method that works for both 4- and 8-connected.
 * 
*/ PIX * pixDistanceFunction(PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond) { l_int32 w, h, wpld; l_uint32 *datad; PIX *pixd; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("!pixs or pixs not 1 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (outdepth != 8 && outdepth != 16) return (PIX *)ERROR_PTR("outdepth not 8 or 16 bpp", __func__, NULL); if (boundcond != L_BOUNDARY_BG && boundcond != L_BOUNDARY_FG) return (PIX *)ERROR_PTR("invalid boundcond", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Initialize the fg pixels to 1 and the bg pixels to 0 */ pixSetMasked(pixd, pixs, 1); if (boundcond == L_BOUNDARY_BG) { distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); } else { /* L_BOUNDARY_FG: set boundary pixels to max val */ pixRasterop(pixd, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ pixRasterop(pixd, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ pixRasterop(pixd, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ pixRasterop(pixd, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); /* Set each boundary pixel equal to the pixel next to it */ pixSetMirroredBorder(pixd, 1, 1, 1, 1); } return pixd; } /*! * \brief distanceFunctionLow() */ static void distanceFunctionLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 d, l_int32 wpld, l_int32 connectivity) { l_int32 val1, val2, val3, val4, val5, val6, val7, val8, minval, val; l_int32 i, j, imax, jmax; l_uint32 *lined; /* One raster scan followed by one anti-raster scan. * This does not re-set the 1-boundary of pixels that * were initialized to either 0 or maxval. */ imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: if (d == 8) { /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val2 = GET_DATA_BYTE(lined - wpld, j); val4 = GET_DATA_BYTE(lined, j - 1); minval = L_MIN(val2, val4); minval = L_MIN(minval, 254); SET_DATA_BYTE(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val7 = GET_DATA_BYTE(lined + wpld, j); val5 = GET_DATA_BYTE(lined, j + 1); minval = L_MIN(val5, val7); minval = L_MIN(minval + 1, val); SET_DATA_BYTE(lined, j, minval); } } } } else { /* d == 16 */ /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val2 = GET_DATA_TWO_BYTES(lined - wpld, j); val4 = GET_DATA_TWO_BYTES(lined, j - 1); minval = L_MIN(val2, val4); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val7 = GET_DATA_TWO_BYTES(lined + wpld, j); val5 = GET_DATA_TWO_BYTES(lined, j + 1); minval = L_MIN(val5, val7); minval = L_MIN(minval + 1, val); SET_DATA_TWO_BYTES(lined, j, minval); } } } } break; case 8: if (d == 8) { /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val1 = GET_DATA_BYTE(lined - wpld, j - 1); val2 = GET_DATA_BYTE(lined - wpld, j); val3 = GET_DATA_BYTE(lined - wpld, j + 1); val4 = GET_DATA_BYTE(lined, j - 1); minval = L_MIN(val1, val2); minval = L_MIN(minval, val3); minval = L_MIN(minval, val4); minval = L_MIN(minval, 254); SET_DATA_BYTE(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val8 = GET_DATA_BYTE(lined + wpld, j + 1); val7 = GET_DATA_BYTE(lined + wpld, j); val6 = GET_DATA_BYTE(lined + wpld, j - 1); val5 = GET_DATA_BYTE(lined, j + 1); minval = L_MIN(val8, val7); minval = L_MIN(minval, val6); minval = L_MIN(minval, val5); minval = L_MIN(minval + 1, val); SET_DATA_BYTE(lined, j, minval); } } } } else { /* d == 16 */ /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val1 = GET_DATA_TWO_BYTES(lined - wpld, j - 1); val2 = GET_DATA_TWO_BYTES(lined - wpld, j); val3 = GET_DATA_TWO_BYTES(lined - wpld, j + 1); val4 = GET_DATA_TWO_BYTES(lined, j - 1); minval = L_MIN(val1, val2); minval = L_MIN(minval, val3); minval = L_MIN(minval, val4); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val8 = GET_DATA_TWO_BYTES(lined + wpld, j + 1); val7 = GET_DATA_TWO_BYTES(lined + wpld, j); val6 = GET_DATA_TWO_BYTES(lined + wpld, j - 1); val5 = GET_DATA_TWO_BYTES(lined, j + 1); minval = L_MIN(val8, val7); minval = L_MIN(minval, val6); minval = L_MIN(minval, val5); minval = L_MIN(minval + 1, val); SET_DATA_TWO_BYTES(lined, j, minval); } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", __func__); } } /*-----------------------------------------------------------------------* * Seed spread (based on distance function) * *-----------------------------------------------------------------------*/ /*! * \brief pixSeedspread() * * \param[in] pixs 8 bpp * \param[in] connectivity 4 or 8 * \return pixd, or NULL on error * *
 * Notes:
 *      (1) The raster/anti-raster method for implementing this filling
 *          operation was suggested by Ray Smith.
 *      (2) This takes an arbitrary set of nonzero pixels in pixs, which
 *          can be sparse, and spreads (extrapolates) the values to
 *          fill all the pixels in pixd with the nonzero value it is
 *          closest to in pixs.  This is similar (though not completely
 *          equivalent) to doing a Voronoi tiling of the image, with a
 *          tile surrounding each pixel that has a nonzero value.
 *          All pixels within a tile are then closer to its "central"
 *          pixel than to any others.  Then assign the value of the
 *          "central" pixel to each pixel in the tile.
 *      (3) This is implemented by computing a distance function in parallel
 *          with the fill.  The distance function uses free boundary
 *          conditions (assumed maxval outside), and it controls the
 *          propagation of the pixels in pixd away from the nonzero
 *          (seed) values.  This is done in 2 traversals (raster/antiraster).
 *          In the raster direction, whenever the distance function
 *          is nonzero, the spread pixel takes on the value of its
 *          predecessor that has the minimum distance value.  In the
 *          antiraster direction, whenever the distance function is nonzero
 *          and its value is replaced by a smaller value, the spread
 *          pixel takes the value of the predecessor with the minimum
 *          distance value.
 *      (4) At boundaries where a pixel is equidistant from two
 *          nearest nonzero (seed) pixels, the decision of which value
 *          to use is arbitrary (greedy in search for minimum distance).
 *          This can give rise to strange-looking results, particularly
 *          for 4-connectivity where the L1 distance is computed from
 *          steps in N,S,E and W directions (no diagonals).
 * 
*/ PIX * pixSeedspread(PIX *pixs, l_int32 connectivity) { l_int32 w, h, wplt, wplg; l_uint32 *datat, *datag; PIX *pixm, *pixt, *pixg, *pixd; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("!pixs or pixs not 8 bpp", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); /* Add a 4 byte border to pixs. This simplifies the computation. */ pixg = pixAddBorder(pixs, 4, 0); pixGetDimensions(pixg, &w, &h, NULL); /* Initialize distance function pixt. Threshold pixs to get * a 0 at the seed points where the pixs pixel is nonzero, and * a 1 at all points that need to be filled. Use this as a * mask to set a 1 in pixt at all non-seed points. Also, set all * pixt pixels in an interior boundary of width 1 to the * maximum value. For debugging, to view the distance function, * use pixConvert16To8(pixt, L_LS_BYTE) on small images. */ pixm = pixThresholdToBinary(pixg, 1); pixt = pixCreate(w, h, 16); pixSetMasked(pixt, pixm, 1); pixRasterop(pixt, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ pixRasterop(pixt, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ pixRasterop(pixt, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ pixRasterop(pixt, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Do the interpolation and remove the border. */ datag = pixGetData(pixg); wplg = pixGetWpl(pixg); seedspreadLow(datag, w, h, wplg, datat, wplt, connectivity); pixd = pixRemoveBorder(pixg, 4); pixDestroy(&pixm); pixDestroy(&pixg); pixDestroy(&pixt); return pixd; } /*! * \brief seedspreadLow() * * See pixSeedspread() for a brief description of the algorithm here. */ static void seedspreadLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datat, l_int32 wplt, l_int32 connectivity) { l_int32 val1t, val2t, val3t, val4t, val5t, val6t, val7t, val8t; l_int32 i, j, imax, jmax, minval, valt, vald; l_uint32 *linet, *lined; /* One raster scan followed by one anti-raster scan. * pixt is initialized to have 0 on pixels where the * input is specified in pixd, and to have 1 on all * other pixels. We only change pixels in pixt and pixd * that are non-zero in pixt. */ imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 1; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val2t = GET_DATA_TWO_BYTES(linet - wplt, j); val4t = GET_DATA_TWO_BYTES(linet, j - 1); minval = L_MIN(val2t, val4t); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(linet, j, minval + 1); if (val2t < val4t) vald = GET_DATA_BYTE(lined - wpld, j); else vald = GET_DATA_BYTE(lined, j - 1); SET_DATA_BYTE(lined, j, vald); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val7t = GET_DATA_TWO_BYTES(linet + wplt, j); val5t = GET_DATA_TWO_BYTES(linet, j + 1); minval = L_MIN(val5t, val7t); minval = L_MIN(minval + 1, valt); if (valt > minval) { /* replace */ SET_DATA_TWO_BYTES(linet, j, minval); if (val5t < val7t) vald = GET_DATA_BYTE(lined, j + 1); else vald = GET_DATA_BYTE(lined + wplt, j); SET_DATA_BYTE(lined, j, vald); } } } } break; case 8: /* UL --> LR scan */ for (i = 1; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val1t = GET_DATA_TWO_BYTES(linet - wplt, j - 1); val2t = GET_DATA_TWO_BYTES(linet - wplt, j); val3t = GET_DATA_TWO_BYTES(linet - wplt, j + 1); val4t = GET_DATA_TWO_BYTES(linet, j - 1); minval = L_MIN(val1t, val2t); minval = L_MIN(minval, val3t); minval = L_MIN(minval, val4t); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(linet, j, minval + 1); if (minval == val1t) vald = GET_DATA_BYTE(lined - wpld, j - 1); else if (minval == val2t) vald = GET_DATA_BYTE(lined - wpld, j); else if (minval == val3t) vald = GET_DATA_BYTE(lined - wpld, j + 1); else /* minval == val4t */ vald = GET_DATA_BYTE(lined, j - 1); SET_DATA_BYTE(lined, j, vald); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val8t = GET_DATA_TWO_BYTES(linet + wplt, j + 1); val7t = GET_DATA_TWO_BYTES(linet + wplt, j); val6t = GET_DATA_TWO_BYTES(linet + wplt, j - 1); val5t = GET_DATA_TWO_BYTES(linet, j + 1); minval = L_MIN(val8t, val7t); minval = L_MIN(minval, val6t); minval = L_MIN(minval, val5t); minval = L_MIN(minval + 1, valt); if (valt > minval) { /* replace */ SET_DATA_TWO_BYTES(linet, j, minval); if (minval == val5t + 1) vald = GET_DATA_BYTE(lined, j + 1); else if (minval == val6t + 1) vald = GET_DATA_BYTE(lined + wpld, j - 1); else if (minval == val7t + 1) vald = GET_DATA_BYTE(lined + wpld, j); else /* minval == val8t + 1 */ vald = GET_DATA_BYTE(lined + wpld, j + 1); SET_DATA_BYTE(lined, j, vald); } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", __func__); break; } } /*-----------------------------------------------------------------------* * Local extrema * *-----------------------------------------------------------------------*/ /*! * \brief pixLocalExtrema() * * \param[in] pixs 8 bpp * \param[in] maxmin max allowed for the min in a 3x3 neighborhood; * use 0 for default which is to have no upper bound * \param[in] minmax min allowed for the max in a 3x3 neighborhood; * use 0 for default which is to have no lower bound * \param[out] ppixmin [optional] mask of local minima * \param[out] ppixmax [optional] mask of local maxima * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This gives the actual local minima and maxima.
 *          A local minimum is a pixel whose surrounding pixels all
 *          have values at least as large, and likewise for a local
 *          maximum.  For the local minima, %maxmin is the upper
 *          bound for the value of pixs.  Likewise, for the local maxima,
 *          %minmax is the lower bound for the value of pixs.
 *      (2) The minima are found by starting with the erosion-and-equality
 *          approach of pixSelectedLocalExtrema().  This is followed
 *          by a qualification step, where each c.c. in the resulting
 *          minimum mask is extracted, the pixels bordering it are
 *          located, and they are queried.  If all of those pixels
 *          are larger than the value of that minimum, it is a true
 *          minimum and its c.c. is saved; otherwise the c.c. is
 *          rejected.  Note that if a bordering pixel has the
 *          same value as the minimum, it must then have a
 *          neighbor that is smaller, so the component is not a
 *          true minimum.
 *      (3) The maxima are found by inverting the image and looking
 *          for the minima there.
 *      (4) The generated masks can be used as markers for
 *          further operations.
 * 
*/ l_ok pixLocalExtrema(PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax) { PIX *pixmin, *pixmax, *pixt1, *pixt2; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!ppixmin && !ppixmax) return ERROR_INT("neither &pixmin, &pixmax are defined", __func__, 1); if (maxmin <= 0) maxmin = 254; if (minmax <= 0) minmax = 1; if (ppixmin) { pixt1 = pixErodeGray(pixs, 3, 3); pixmin = pixFindEqualValues(pixs, pixt1); pixDestroy(&pixt1); pixQualifyLocalMinima(pixs, pixmin, maxmin); *ppixmin = pixmin; } if (ppixmax) { pixt1 = pixInvert(NULL, pixs); pixt2 = pixErodeGray(pixt1, 3, 3); pixmax = pixFindEqualValues(pixt1, pixt2); pixDestroy(&pixt2); pixQualifyLocalMinima(pixt1, pixmax, 255 - minmax); *ppixmax = pixmax; pixDestroy(&pixt1); } return 0; } /*! * \brief pixQualifyLocalMinima() * * \param[in] pixs 8 bpp image from which pixm has been extracted * \param[in] pixm 1 bpp mask of values equal to min in 3x3 neighborhood * \param[in] maxval max allowed for the min in a 3x3 neighborhood; * use 0 for default which is to have no upper bound * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function acts in-place to remove all c.c. in pixm
 *          that are not true local minima in pixs.  As seen in
 *          pixLocalExtrema(), the input pixm are found by selecting those
 *          pixels of pixs whose values do not change with a 3x3
 *          grayscale erosion.  Here, we require that for each c.c.
 *          in pixm, all pixels in pixs that correspond to the exterior
 *          boundary pixels of the c.c. have values that are greater
 *          than the value within the c.c.
 *      (2) The maximum allowed value for each local minimum can be
 *          bounded with %maxval.  Use 0 for default, which is to have
 *          no upper bound (equivalent to maxval == 254).
 * 
*/ static l_int32 pixQualifyLocalMinima(PIX *pixs, PIX *pixm, l_int32 maxval) { l_int32 n, i, j, k, x, y, w, h, xc, yc, wc, hc, xon, yon; l_int32 vals, wpls, wplc, ismin; l_uint32 val; l_uint32 *datas, *datac, *lines, *linec; BOXA *boxa; PIX *pix1, *pix2, *pix3; PIXA *pixa; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm not defined or not 1 bpp", __func__, 1); if (maxval <= 0) maxval = 254; pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); boxa = pixConnComp(pixm, &pixa, 8); n = pixaGetCount(pixa); for (k = 0; k < n; k++) { boxaGetBoxGeometry(boxa, k, &xc, &yc, &wc, &hc); pix1 = pixaGetPix(pixa, k, L_COPY); pix2 = pixAddBorder(pix1, 1, 0); pix3 = pixDilateBrick(NULL, pix2, 3, 3); pixXor(pix3, pix3, pix2); /* exterior boundary pixels */ datac = pixGetData(pix3); wplc = pixGetWpl(pix3); nextOnPixelInRaster(pix1, 0, 0, &xon, &yon); pixGetPixel(pixs, xc + xon, yc + yon, &val); if (val > maxval) { /* too large; erase */ pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pix1, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); continue; } ismin = TRUE; /* Check all values in pixs that correspond to the exterior * boundary pixels of the c.c. in pixm. Verify that the * value in the c.c. is always less. */ for (i = 0, y = yc - 1; i < hc + 2 && y >= 0 && y < h; i++, y++) { lines = datas + y * wpls; linec = datac + i * wplc; for (j = 0, x = xc - 1; j < wc + 2 && x >= 0 && x < w; j++, x++) { if (GET_DATA_BIT(linec, j)) { vals = GET_DATA_BYTE(lines, x); if (vals <= val) { /* not a minimum! */ ismin = FALSE; break; } } } if (!ismin) break; } if (!ismin) /* erase it */ pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pix1, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } /*! * \brief pixSelectedLocalExtrema() * * \param[in] pixs 8 bpp * \param[in] mindist -1 for keeping all pixels; >= 0 specifies distance * \param[out] ppixmin mask of local minima * \param[out] ppixmax mask of local maxima * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This selects those local 3x3 minima that are at least a
 *          specified distance from the nearest local 3x3 maxima, and v.v.
 *          for the selected set of local 3x3 maxima.
 *          The local 3x3 minima is the set of pixels whose value equals
 *          the value after a 3x3 brick erosion, and the local 3x3 maxima
 *          is the set of pixels whose value equals the value after
 *          a 3x3 brick dilation.
 *      (2) mindist is the minimum distance allowed between
 *          local 3x3 minima and local 3x3 maxima, in an 8-connected sense.
 *          mindist == 1 keeps all pixels found in step 1.
 *          mindist == 0 removes all pixels from each mask that are
 *          both a local 3x3 minimum and a local 3x3 maximum.
 *          mindist == 1 removes any local 3x3 minimum pixel that touches a
 *          local 3x3 maximum pixel, and likewise for the local maxima.
 *          To make the decision, visualize each local 3x3 minimum pixel
 *          as being surrounded by a square of size (2 * mindist + 1)
 *          on each side, such that no local 3x3 maximum pixel is within
 *          that square; and v.v.
 *      (3) The generated masks can be used as markers for further operations.
 * 
*/ l_ok pixSelectedLocalExtrema(PIX *pixs, l_int32 mindist, PIX **ppixmin, PIX **ppixmax) { PIX *pixmin, *pixmax, *pixt, *pixtmin, *pixtmax; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", __func__, 1); if (!ppixmin || !ppixmax) return ERROR_INT("&pixmin and &pixmax not both defined", __func__, 1); pixt = pixErodeGray(pixs, 3, 3); pixmin = pixFindEqualValues(pixs, pixt); pixDestroy(&pixt); pixt = pixDilateGray(pixs, 3, 3); pixmax = pixFindEqualValues(pixs, pixt); pixDestroy(&pixt); /* Remove all points that are within the prescribed distance * from each other. */ if (mindist < 0) { /* remove no points */ *ppixmin = pixmin; *ppixmax = pixmax; } else if (mindist == 0) { /* remove points belonging to both sets */ pixt = pixAnd(NULL, pixmin, pixmax); *ppixmin = pixSubtract(pixmin, pixmin, pixt); *ppixmax = pixSubtract(pixmax, pixmax, pixt); pixDestroy(&pixt); } else { pixtmin = pixDilateBrick(NULL, pixmin, 2 * mindist + 1, 2 * mindist + 1); pixtmax = pixDilateBrick(NULL, pixmax, 2 * mindist + 1, 2 * mindist + 1); *ppixmin = pixSubtract(pixmin, pixmin, pixtmax); *ppixmax = pixSubtract(pixmax, pixmax, pixtmin); pixDestroy(&pixtmin); pixDestroy(&pixtmax); } return 0; } /*! * \brief pixFindEqualValues() * * \param[in] pixs1 8 bpp * \param[in] pixs2 8 bpp * \return pixd 1 bpp mask, or NULL on error * *
 * Notes:
 *      (1) The two images are aligned at the UL corner, and the returned
 *          image has ON pixels where the pixels in pixs1 and pixs2
 *          have equal values.
 * 
*/ PIX * pixFindEqualValues(PIX *pixs1, PIX *pixs2) { l_int32 w1, h1, w2, h2, w, h; l_int32 i, j, val1, val2, wpls1, wpls2, wpld; l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; PIX *pixd; if (!pixs1 || pixGetDepth(pixs1) != 8) return (PIX *)ERROR_PTR("pixs1 undefined or not 8 bpp", __func__, NULL); if (!pixs2 || pixGetDepth(pixs2) != 8) return (PIX *)ERROR_PTR("pixs2 undefined or not 8 bpp", __func__, NULL); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w1, w2); h = L_MIN(h1, h2); pixd = pixCreate(w, h, 1); datas1 = pixGetData(pixs1); datas2 = pixGetData(pixs2); datad = pixGetData(pixd); wpls1 = pixGetWpl(pixs1); wpls2 = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(lines1, j); val2 = GET_DATA_BYTE(lines2, j); if (val1 == val2) SET_DATA_BIT(lined, j); } } return pixd; } /*-----------------------------------------------------------------------* * Selection of minima in mask connected components * *-----------------------------------------------------------------------*/ /*! * \brief pixSelectMinInConnComp() * * \param[in] pixs 8 bpp * \param[in] pixm 1 bpp * \param[out] ppta pta of min pixel locations * \param[out] pnav [optional] numa of minima values * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) For each 8 connected component in pixm, this finds
 *          a pixel in pixs that has the lowest value, and saves
 *          it in a Pta.  If several pixels in pixs have the same
 *          minimum value, it picks the first one found.
 *      (2) For a mask pixm of true local minima, all pixels in each
 *          connected component have the same value in pixs, so it is
 *          fastest to select one of them using a special seedfill
 *          operation.  Not yet implemented.
 * 
*/ l_ok pixSelectMinInConnComp(PIX *pixs, PIX *pixm, PTA **ppta, NUMA **pnav) { l_int32 bx, by, bw, bh, i, j, c, n; l_int32 xs, ys, minx, miny, wpls, wplt, val, minval; l_uint32 *datas, *datat, *lines, *linet; BOXA *boxa; NUMA *nav; PIX *pixt, *pixs2, *pixm2; PIXA *pixa; PTA *pta; if (!ppta) return ERROR_INT("&pta not defined", __func__, 1); *ppta = NULL; if (pnav) *pnav = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", __func__, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm undefined or not 1 bpp", __func__, 1); /* Crop to the min size if necessary */ if (pixCropToMatch(pixs, pixm, &pixs2, &pixm2)) { pixDestroy(&pixs2); pixDestroy(&pixm2); return ERROR_INT("cropping failure", __func__, 1); } /* Find value and location of min value pixel in each component */ boxa = pixConnComp(pixm2, &pixa, 8); n = boxaGetCount(boxa); pta = ptaCreate(n); *ppta = pta; nav = numaCreate(n); datas = pixGetData(pixs2); wpls = pixGetWpl(pixs2); for (c = 0; c < n; c++) { pixt = pixaGetPix(pixa, c, L_CLONE); boxaGetBoxGeometry(boxa, c, &bx, &by, &bw, &bh); if (bw == 1 && bh == 1) { ptaAddPt(pta, bx, by); numaAddNumber(nav, GET_DATA_BYTE(datas + by * wpls, bx)); pixDestroy(&pixt); continue; } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); minx = miny = 1000000; minval = 256; for (i = 0; i < bh; i++) { ys = by + i; lines = datas + ys * wpls; linet = datat + i * wplt; for (j = 0; j < bw; j++) { xs = bx + j; if (GET_DATA_BIT(linet, j)) { val = GET_DATA_BYTE(lines, xs); if (val < minval) { minval = val; minx = xs; miny = ys; } } } } ptaAddPt(pta, minx, miny); numaAddNumber(nav, GET_DATA_BYTE(datas + miny * wpls, minx)); pixDestroy(&pixt); } boxaDestroy(&boxa); pixaDestroy(&pixa); if (pnav) *pnav = nav; else numaDestroy(&nav); pixDestroy(&pixs2); pixDestroy(&pixm2); return 0; } /*-----------------------------------------------------------------------* * Removal of seeded connected components from a mask * *-----------------------------------------------------------------------*/ /*! * \brief pixRemoveSeededComponents() * * \param[in] pixd [optional]; can be null or equal to pixm; 1 bpp * \param[in] pixs 1 bpp seed * \param[in] pixm 1 bpp filling mask * \param[in] connectivity 4 or 8 * \param[in] bordersize amount of border clearing * \return pixd, or NULL on error * *
 * Notes:
 *      (1) This removes each component in pixm for which there is
 *          at least one seed in pixs.  If pixd == NULL, this returns
 *          the result in a new pixd.  Otherwise, it is an in-place
 *          operation on pixm.  In no situation is pixs altered,
 *          because we do the filling with a copy of pixs.
 *      (2) If bordersize > 0, it also clears all pixels within a
 *          distance %bordersize of the edge of pixd.  This is here
 *          because pixLocalExtrema() typically finds local minima
 *          at the border.  Use %bordersize >= 2 to remove these.
 * 
*/ PIX * pixRemoveSeededComponents(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 bordersize) { PIX *pixt; if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, pixd); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", __func__, pixd); if (pixd && pixd != pixm) return (PIX *)ERROR_PTR("operation not inplace", __func__, pixd); pixt = pixCopy(NULL, pixs); pixSeedfillBinary(pixt, pixt, pixm, connectivity); pixd = pixXor(pixd, pixm, pixt); if (bordersize > 0) pixSetOrClearBorder(pixd, bordersize, bordersize, bordersize, bordersize, PIX_CLR); pixDestroy(&pixt); return pixd; } leptonica-1.86.0/src/sel1.c000066400000000000000000002120441506303110300153560ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file sel1.c *
 *
 *      Basic ops on Sels and Selas
 *
 *         Create/destroy/copy:
 *            SELA      *selaCreate()
 *            void       selaDestroy()
 *            SEL       *selCreate()
 *            void       selDestroy()
 *            SEL       *selCopy()
 *            SEL       *selCreateBrick()
 *            SEL       *selCreateComb()
 *
 *         Helper proc:
 *            l_int32  **create2dIntArray()
 *
 *         Extension of sela:
 *            SELA      *selaAddSel()
 *            static l_int32  selaExtendArray()
 *
 *         Accessors:
 *            l_int32    selaGetCount()
 *            SEL       *selaGetSel()
 *            char      *selGetName()
 *            l_int32    selSetName()
 *            l_int32    selaFindSelByName()
 *            l_int32    selGetElement()
 *            l_int32    selSetElement()
 *            l_int32    selGetParameters()
 *            l_int32    selSetOrigin()
 *            l_int32    selGetTypeAtOrigin()
 *            char      *selaGetBrickName()
 *            char      *selaGetCombName()
 *     static char      *selaComputeCompositeParameters()
 *            l_int32    getCompositeParameters()
 *            SARRAY    *selaGetSelnames()
 *
 *         Max translations for erosion and hmt
 *            l_int32    selFindMaxTranslations()
 *
 *         Rotation by multiples of 90 degrees
 *            SEL       *selRotateOrth()
 *
 *         Sela and Sel serialized I/O
 *            SELA      *selaRead()
 *            SELA      *selaReadStream()
 *            SEL       *selRead()
 *            SEL       *selReadStream()
 *            l_int32    selaWrite()
 *            l_int32    selaWriteStream()
 *            l_int32    selWrite()
 *            l_int32    selWriteStream()
 *
 *         Building custom hit-miss sels from compiled strings
 *            SEL       *selCreateFromString()
 *            char      *selPrintToString()     [for debugging]
 *
 *         Building custom hit-miss sels from a simple file format
 *            SELA      *selaCreateFromFile()
 *            static SEL *selCreateFromSArray()
 *
 *         Making hit-only sels from Pta and Pix
 *            SEL       *selCreateFromPta()
 *            SEL       *selCreateFromPix()
 *
 *         Making hit-miss sels from Pix and image files
 *            SEL       *selReadFromColorImage()
 *            SEL       *selCreateFromColorPix()
              SELA      *selaCreateFromColorPixa()
 *
 *         Printable display of sel
 *            PIX       *selDisplayInPix()
 *            PIX       *selaDisplayInPix()
 *
 *     Usage notes:
 *        In this file we have seven functions that make sels:
 *          (1)  selCreate(), with input (h, w, [name])
 *               The generic function.  Roll your own, using selSetElement().
 *          (2)  selCreateBrick(), with input (h, w, cy, cx, val)
 *               The most popular function.  Makes a rectangular sel of
 *               all hits, misses or don't-cares.  We have many morphology
 *               operations that create a sel of all hits, use it, and
 *               destroy it.
 *          (3)  selCreateFromString() with input (text, h, w, [name])
 *               Adam Langley's clever function, allows you to make a hit-miss
 *               sel from a string in code that is geometrically laid out
 *               just like the actual sel.
 *          (4)  selaCreateFromFile() with input (filename)
 *               This parses a simple file format to create an array of
 *               hit-miss sels.  The sel data uses the same encoding
 *               as in (3), with geometrical layout enforced.
 *          (5)  selCreateFromPta() with input (pta, cy, cx, [name])
 *               Another way to make a sel with only hits.
 *          (6)  selCreateFromPix() with input (pix, cy, cx, [name])
 *               Yet another way to make a sel from hits.
 *          (7)  selCreateFromColorPix() with input (pix, name).
 *               Another way to make a general hit-miss sel, starting with
 *               an image editor.
 *        In addition, there are three functions in selgen.c that
 *        automatically generate a hit-miss sel from a pix and
 *        a number of parameters.  This is useful for problems like
 *        "find all patterns that look like this one."
 *
 *        Consistency, being the hobgoblin of small minds,
 *        is adhered to here in the dimensioning and accessing of sels.
 *        Everything is done in standard matrix (row, column) order.
 *        When we set specific elements in a sel, we likewise use
 *        (row, col) ordering:
 *             selSetElement(), with input (row, col, type)
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Bounds on sel ptr array size */ static const l_uint32 MaxPtrArraySize = 10000; static const l_int32 InitialPtrArraySize = 50; /*!< n'importe quoi */ /* Bounds on kernel size */ static const l_uint32 MaxKernelSize = 10000; /* Bounds on pix template size */ static const l_uint32 MaxPixTemplateSize = 300; static const l_uint32 MaxPixTemplateHits = 3000; /* Static functions */ static l_int32 selaExtendArray(SELA *sela); static SEL *selCreateFromSArray(SARRAY *sa, l_int32 first, l_int32 last); struct CompParameterMap { l_int32 size; l_int32 size1; l_int32 size2; char selnameh1[20]; char selnameh2[20]; char selnamev1[20]; char selnamev2[20]; }; static const struct CompParameterMap comp_parameter_map[] = { { 2, 2, 1, "sel_2h", "", "sel_2v", "" }, { 3, 3, 1, "sel_3h", "", "sel_3v", "" }, { 4, 2, 2, "sel_2h", "sel_comb_4h", "sel_2v", "sel_comb_4v" }, { 5, 5, 1, "sel_5h", "", "sel_5v", "" }, { 6, 3, 2, "sel_3h", "sel_comb_6h", "sel_3v", "sel_comb_6v" }, { 7, 7, 1, "sel_7h", "", "sel_7v", "" }, { 8, 4, 2, "sel_4h", "sel_comb_8h", "sel_4v", "sel_comb_8v" }, { 9, 3, 3, "sel_3h", "sel_comb_9h", "sel_3v", "sel_comb_9v" }, { 10, 5, 2, "sel_5h", "sel_comb_10h", "sel_5v", "sel_comb_10v" }, { 11, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 12, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 13, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 14, 7, 2, "sel_7h", "sel_comb_14h", "sel_7v", "sel_comb_14v" }, { 15, 5, 3, "sel_5h", "sel_comb_15h", "sel_5v", "sel_comb_15v" }, { 16, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, { 17, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, { 18, 6, 3, "sel_6h", "sel_comb_18h", "sel_6v", "sel_comb_18v" }, { 19, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, { 20, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, { 21, 7, 3, "sel_7h", "sel_comb_21h", "sel_7v", "sel_comb_21v" }, { 22, 11, 2, "sel_11h", "sel_comb_22h", "sel_11v", "sel_comb_22v" }, { 23, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, { 24, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, { 25, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, { 26, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, { 27, 9, 3, "sel_9h", "sel_comb_27h", "sel_9v", "sel_comb_27v" }, { 28, 7, 4, "sel_7h", "sel_comb_28h", "sel_7v", "sel_comb_28v" }, { 29, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 30, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 31, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 32, 8, 4, "sel_8h", "sel_comb_32h", "sel_8v", "sel_comb_32v" }, { 33, 11, 3, "sel_11h", "sel_comb_33h", "sel_11v", "sel_comb_33v" }, { 34, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, { 35, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, { 36, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 37, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 38, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 39, 13, 3, "sel_13h", "sel_comb_39h", "sel_13v", "sel_comb_39v" }, { 40, 8, 5, "sel_8h", "sel_comb_40h", "sel_8v", "sel_comb_40v" }, { 41, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 42, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 43, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 44, 11, 4, "sel_11h", "sel_comb_44h", "sel_11v", "sel_comb_44v" }, { 45, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, { 46, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, { 47, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, { 48, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, { 49, 7, 7, "sel_7h", "sel_comb_49h", "sel_7v", "sel_comb_49v" }, { 50, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, { 51, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, { 52, 13, 4, "sel_13h", "sel_comb_52h", "sel_13v", "sel_comb_52v" }, { 53, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, { 54, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, { 55, 11, 5, "sel_11h", "sel_comb_55h", "sel_11v", "sel_comb_55v" }, { 56, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 57, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 58, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 59, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 60, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 61, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 62, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" }, { 63, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" } }; /*------------------------------------------------------------------------* * Create / Destroy / Copy * *------------------------------------------------------------------------*/ /*! * \brief selaCreate() * * \param[in] n initial number of sel ptrs; use 0 for default * \return sela, or NULL on error */ SELA * selaCreate(l_int32 n) { SELA *sela; if (n <= 0 || n > (l_int32)MaxPtrArraySize) n = InitialPtrArraySize; /* Make array of sel ptrs */ sela = (SELA *)LEPT_CALLOC(1, sizeof(SELA)); sela->nalloc = n; sela->n = 0; sela->sel = (SEL **)LEPT_CALLOC(n, sizeof(SEL *)); return sela; } /*! * \brief selaDestroy() * * \param[in,out] psela will be set to null before returning * \return void */ void selaDestroy(SELA **psela) { SELA *sela; l_int32 i; if (!psela) return; if ((sela = *psela) == NULL) return; for (i = 0; i < sela->n; i++) selDestroy(&sela->sel[i]); LEPT_FREE(sela->sel); LEPT_FREE(sela); *psela = NULL; } /*! * \brief selCreate() * * \param[in] height * \param[in] width * \param[in] name [optional] sel name; can be null * \return sel, or NULL on error * *
 * Notes:
 *      (1) selCreate() initializes all values to 0.
 *      (2) After this call, (cy,cx) and nonzero data values must be
 *          assigned.  If a text name is not assigned here, it will
 *          be needed later when the sel is put into a sela.
 * 
*/ SEL * selCreate(l_int32 height, l_int32 width, const char *name) { SEL *sel; sel = (SEL *)LEPT_CALLOC(1, sizeof(SEL)); if (name) sel->name = stringNew(name); sel->sy = height; sel->sx = width; if ((sel->data = create2dIntArray(height, width)) == NULL) { LEPT_FREE(sel->name); LEPT_FREE(sel); return (SEL *)ERROR_PTR("data not allocated", __func__, NULL); } return sel; } /*! * \brief selDestroy() * * \param[in,out] psel will be set to null before returning * \return void */ void selDestroy(SEL **psel) { l_int32 i; SEL *sel; if (psel == NULL) { L_WARNING("ptr address is NULL!\n", __func__); return; } if ((sel = *psel) == NULL) return; for (i = 0; i < sel->sy; i++) LEPT_FREE(sel->data[i]); LEPT_FREE(sel->data); if (sel->name) LEPT_FREE(sel->name); LEPT_FREE(sel); *psel = NULL; } /*! * \brief selCopy() * * \param[in] sel * \return a copy of the sel, or NULL on error */ SEL * selCopy(SEL *sel) { l_int32 sx, sy, cx, cy, i, j; SEL *csel; if (!sel) return (SEL *)ERROR_PTR("sel not defined", __func__, NULL); csel = (SEL *)LEPT_CALLOC(1, sizeof(SEL)); selGetParameters(sel, &sy, &sx, &cy, &cx); csel->sy = sy; csel->sx = sx; csel->cy = cy; csel->cx = cx; if ((csel->data = create2dIntArray(sy, sx)) == NULL) { LEPT_FREE(csel); return (SEL *)ERROR_PTR("sel data not made", __func__, NULL); } for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) csel->data[i][j] = sel->data[i][j]; if (sel->name) csel->name = stringNew(sel->name); return csel; } /*! * \brief selCreateBrick() * * \param[in] h, w height, width * \param[in] cy, cx origin, relative to UL corner at 0,0 * \param[in] type SEL_HIT, SEL_MISS, or SEL_DONT_CARE * \return sel, or NULL on error * *
 * Notes:
 *      (1) This is a rectangular sel of all hits, misses or don't cares.
 * 
*/ SEL * selCreateBrick(l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type) { l_int32 i, j; SEL *sel; if (h <= 0 || w <= 0) return (SEL *)ERROR_PTR("h and w must both be > 0", __func__, NULL); if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) return (SEL *)ERROR_PTR("invalid sel element type", __func__, NULL); if ((sel = selCreate(h, w, NULL)) == NULL) return (SEL *)ERROR_PTR("sel not made", __func__, NULL); selSetOrigin(sel, cy, cx); for (i = 0; i < h; i++) for (j = 0; j < w; j++) sel->data[i][j] = type; return sel; } /*! * \brief selCreateComb() * * \param[in] factor1 contiguous space between comb tines * \param[in] factor2 number of comb tines * \param[in] direction L_HORIZ, L_VERT * \return sel, or NULL on error * *
 * Notes:
 *      (1) This generates a comb Sel of hits with the origin as
 *          near the center as possible.
 *      (2) In use, this is complemented by a brick sel of size %factor1,
 *          Both brick and comb sels are made by selectComposableSels().
 * 
*/ SEL * selCreateComb(l_int32 factor1, l_int32 factor2, l_int32 direction) { l_int32 i, size, z; SEL *sel; if (factor1 < 1 || factor2 < 1) return (SEL *)ERROR_PTR("factors must be >= 1", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT) return (SEL *)ERROR_PTR("invalid direction", __func__, NULL); size = factor1 * factor2; if (direction == L_HORIZ) { if ((sel = selCreate(1, size, NULL)) == NULL) return (SEL *)ERROR_PTR("horiz sel not made", __func__, NULL); selSetOrigin(sel, 0, size / 2); } else { if ((sel = selCreate(size, 1, NULL)) == NULL) return (SEL *)ERROR_PTR("vert sel not made", __func__, NULL); selSetOrigin(sel, size / 2, 0); } /* Lay down the elements of the comb */ for (i = 0; i < factor2; i++) { z = factor1 / 2 + i * factor1; /* lept_stderr("i = %d, factor1 = %d, factor2 = %d, z = %d\n", i, factor1, factor2, z); */ if (direction == L_HORIZ) selSetElement(sel, 0, z, SEL_HIT); else selSetElement(sel, z, 0, SEL_HIT); } return sel; } /*! * \brief create2dIntArray() * * \param[in] sy rows == height * \param[in] sx columns == width * \return doubly indexed array i.e., an array of sy row pointers, * each of which points to an array of sx ints * *
 * Notes:
 *      (1) The array[sy][sx] is indexed in standard "matrix notation",
 *          with the row index first.
 * 
*/ l_int32 ** create2dIntArray(l_int32 sy, l_int32 sx) { l_int32 i; l_int32 **array; if (sx <= 0 || sx > (l_int32)MaxKernelSize) return (l_int32 **)ERROR_PTR("sx out of bounds", __func__, NULL); if (sy <= 0 || sy > (l_int32)MaxKernelSize) return (l_int32 **)ERROR_PTR("sy out of bounds", __func__, NULL); array = (l_int32 **)LEPT_CALLOC(sy, sizeof(l_int32 *)); for (i = 0; i < sy; i++) array[i] = (l_int32 *)LEPT_CALLOC(sx, sizeof(l_int32)); return array; } /*------------------------------------------------------------------------* * Extension of sela * *------------------------------------------------------------------------*/ /*! * \brief selaAddSel() * * \param[in] sela * \param[in] sel to be added * \param[in] selname ignored if already defined in sel; * req'd in sel when added to a sela * \param[in] copyflag L_INSERT or L_COPY * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This adds a sel, either inserting or making a copy.
 *      (2) Because every sel in a sela must have a name, it copies
 *          the input name if necessary.  You can input NULL for
 *          selname if the sel already has a name.
 * 
*/ l_ok selaAddSel(SELA *sela, SEL *sel, const char *selname, l_int32 copyflag) { l_int32 n; SEL *csel; if (!sela) return ERROR_INT("sela not defined", __func__, 1); if (!sel) return ERROR_INT("sel not defined", __func__, 1); if (!sel->name && !selname) return ERROR_INT("added sel must have name", __func__, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", __func__, 1); if (copyflag == L_COPY) { if ((csel = selCopy(sel)) == NULL) return ERROR_INT("csel not made", __func__, 1); } else { /* copyflag == L_INSERT */ csel = sel; } if (!csel->name) csel->name = stringNew(selname); n = selaGetCount(sela); if (n >= sela->nalloc) { if (selaExtendArray(sela)) { if (copyflag != L_INSERT) selDestroy(&csel); return ERROR_INT("extension failed", __func__, 1); } } sela->sel[n] = csel; sela->n++; return 0; } /*! * \brief selaExtendArray() * * \param[in] sela * \return 0 if OK; 1 on error */ static l_int32 selaExtendArray(SELA *sela) { if (!sela) return ERROR_INT("sela not defined", __func__, 1); if ((sela->sel = (SEL **)reallocNew((void **)&sela->sel, sizeof(SEL *) * sela->nalloc, 2 * sizeof(SEL *) * sela->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", __func__, 1); sela->nalloc = 2 * sela->nalloc; return 0; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * \brief selaGetCount() * * \param[in] sela * \return count, or 0 on error */ l_int32 selaGetCount(SELA *sela) { if (!sela) return ERROR_INT("sela not defined", __func__, 0); return sela->n; } /*! * \brief selaGetSel() * * \param[in] sela * \param[in] i index of sel to be retrieved not copied * \return sel, or NULL on error * *
 * Notes:
 *      (1) This returns a ptr to the sel, not a copy, so the caller
 *          must not destroy it!
 * 
*/ SEL * selaGetSel(SELA *sela, l_int32 i) { if (!sela) return (SEL *)ERROR_PTR("sela not defined", __func__, NULL); if (i < 0 || i >= sela->n) return (SEL *)ERROR_PTR("invalid index", __func__, NULL); return sela->sel[i]; } /*! * \brief selGetName() * * \param[in] sel * \return sel name not copied, or NULL if no name or on error */ char * selGetName(SEL *sel) { if (!sel) return (char *)ERROR_PTR("sel not defined", __func__, NULL); return sel->name; } /*! * \brief selSetName() * * \param[in] sel * \param[in] name [optional]; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Always frees the existing sel name, if defined.
 *      (2) If name is not defined, just clears any existing sel name.
 * 
*/ l_ok selSetName(SEL *sel, const char *name) { if (!sel) return ERROR_INT("sel not defined", __func__, 1); return stringReplace(&sel->name, name); } /*! * \brief selaFindSelByName() * * \param[in] sela * \param[in] name sel name * \param[out] pindex [optional] * \param[in] psel [optional] sel (not a copy) * \return 0 if OK; 1 on error */ l_ok selaFindSelByName(SELA *sela, const char *name, l_int32 *pindex, SEL **psel) { l_int32 i, n; char *sname; SEL *sel; if (pindex) *pindex = -1; if (psel) *psel = NULL; if (!sela) return ERROR_INT("sela not defined", __func__, 1); n = selaGetCount(sela); for (i = 0; i < n; i++) { if ((sel = selaGetSel(sela, i)) == NULL) { L_WARNING("missing sel\n", __func__); continue; } sname = selGetName(sel); if (sname && (!strcmp(name, sname))) { if (pindex) *pindex = i; if (psel) *psel = sel; return 0; } } return 1; } /*! * \brief selGetElement() * * \param[in] sel * \param[in] row * \param[in] col * \param[out] ptype SEL_HIT, SEL_MISS, SEL_DONT_CARE * \return 0 if OK; 1 on error */ l_ok selGetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 *ptype) { if (!ptype) return ERROR_INT("&type not defined", __func__, 1); *ptype = SEL_DONT_CARE; if (!sel) return ERROR_INT("sel not defined", __func__, 1); if (row < 0 || row >= sel->sy) return ERROR_INT("sel row out of bounds", __func__, 1); if (col < 0 || col >= sel->sx) return ERROR_INT("sel col out of bounds", __func__, 1); *ptype = sel->data[row][col]; return 0; } /*! * \brief selSetElement() * * \param[in] sel * \param[in] row * \param[in] col * \param[in] type SEL_HIT, SEL_MISS, SEL_DONT_CARE * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Because we use row and column to index into an array,
 *          they are always non-negative.  The location of the origin
 *          (and the type of operation) determine the actual
 *          direction of the rasterop.
 * 
*/ l_ok selSetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 type) { if (!sel) return ERROR_INT("sel not defined", __func__, 1); if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) return ERROR_INT("invalid sel element type", __func__, 1); if (row < 0 || row >= sel->sy) return ERROR_INT("sel row out of bounds", __func__, 1); if (col < 0 || col >= sel->sx) return ERROR_INT("sel col out of bounds", __func__, 1); sel->data[row][col] = type; return 0; } /*! * \brief selGetParameters() * * \param[in] sel * \param[out] psy, psx, pcy, pcx [optional] each can be null * \return 0 if OK, 1 on error */ l_ok selGetParameters(SEL *sel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx) { if (psy) *psy = 0; if (psx) *psx = 0; if (pcy) *pcy = 0; if (pcx) *pcx = 0; if (!sel) return ERROR_INT("sel not defined", __func__, 1); if (psy) *psy = sel->sy; if (psx) *psx = sel->sx; if (pcy) *pcy = sel->cy; if (pcx) *pcx = sel->cx; return 0; } /*! * \brief selSetOrigin() * * \param[in] sel * \param[in] cy, cx * \return 0 if OK; 1 on error */ l_ok selSetOrigin(SEL *sel, l_int32 cy, l_int32 cx) { if (!sel) return ERROR_INT("sel not defined", __func__, 1); sel->cy = cy; sel->cx = cx; return 0; } /*! * \brief selGetTypeAtOrigin() * * \param[in] sel * \param[out] ptype SEL_HIT, SEL_MISS, SEL_DONT_CARE * \return 0 if OK; 1 on error or if origin is not found */ l_ok selGetTypeAtOrigin(SEL *sel, l_int32 *ptype) { l_int32 sx, sy, cx, cy, i, j; if (!ptype) return ERROR_INT("&type not defined", __func__, 1); *ptype = SEL_DONT_CARE; /* init */ if (!sel) return ERROR_INT("sel not defined", __func__, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { if (i == cy && j == cx) { selGetElement(sel, i, j, ptype); return 0; } } } return ERROR_INT("sel origin not found", __func__, 1); } /*! * \brief selaGetBrickName() * * \param[in] sela * \param[in] hsize, vsize of brick sel * \return sel name new string, or NULL if no name or on error */ char * selaGetBrickName(SELA *sela, l_int32 hsize, l_int32 vsize) { l_int32 i, nsels, sx, sy; SEL *sel; if (!sela) return (char *)ERROR_PTR("sela not defined", __func__, NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selGetParameters(sel, &sy, &sx, NULL, NULL); if (hsize == sx && vsize == sy) return stringNew(selGetName(sel)); } return (char *)ERROR_PTR("sel not found", __func__, NULL); } /*! * \brief selaGetCombName() * * \param[in] sela * \param[in] size the product of sizes of the brick and comb parts * \param[in] direction L_HORIZ, L_VERT * \return sel name new string, or NULL if name not found or on error * *
 * Notes:
 *      (1) Combs are by definition 1-dimensional, either horiz or vert.
 *      (2) Use this with comb Sels; e.g., from selaAddDwaCombs().
 * 
*/ char * selaGetCombName(SELA *sela, l_int32 size, l_int32 direction) { char *selname = NULL; char combname[256]; l_int32 i, nsels, sx, sy, found; SEL *sel; if (!sela) return (char *)ERROR_PTR("sela not defined", __func__, NULL); if (direction != L_HORIZ && direction != L_VERT) return (char *)ERROR_PTR("invalid direction", __func__, NULL); /* Derive the comb name we're looking for */ if (direction == L_HORIZ) snprintf(combname, sizeof(combname), "sel_comb_%dh", size); else /* direction == L_VERT */ snprintf(combname, sizeof(combname), "sel_comb_%dv", size); found = FALSE; nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selGetParameters(sel, &sy, &sx, NULL, NULL); if (sy != 1 && sx != 1) /* 2-D; not a comb */ continue; selname = selGetName(sel); if (!strcmp(selname, combname)) { found = TRUE; break; } } if (found) return stringNew(selname); else return (char *)ERROR_PTR("sel not found", __func__, NULL); } /* --------- Function used to generate code in this file ---------- */ #if 0 static void selaComputeCompositeParameters(const char *fileout); /*! * \brief selaComputeCompParameters() * * \param[in] fileout * \return void * *
 * Notes:
 *      (1) This static function was used to construct the comp_parameter_map[]
 *          array at the top of this file.  It is static because it does
 *          not need to be called again.  It remains here to show how
 *          the composite parameter map was computed.
 *      (2) The output file was pasted directly into comp_parameter_map[].
 *          The composite parameter map is used to quickly determine
 *          the linear decomposition parameters and sel names.
 * 
*/ static void selaComputeCompositeParameters(const char *fileout) { char *str, *nameh1, *nameh2, *namev1, *namev2; char buf[256]; l_int32 size, size1, size2, len; SARRAY *sa; SELA *selabasic, *selacomb; selabasic = selaAddBasic(NULL); selacomb = selaAddDwaCombs(NULL); sa = sarrayCreate(64); for (size = 2; size < 64; size++) { selectComposableSizes(size, &size1, &size2); nameh1 = selaGetBrickName(selabasic, size1, 1); namev1 = selaGetBrickName(selabasic, 1, size1); if (size2 > 1) { nameh2 = selaGetCombName(selacomb, size1 * size2, L_HORIZ); namev2 = selaGetCombName(selacomb, size1 * size2, L_VERT); } else { nameh2 = stringNew(""); namev2 = stringNew(""); } snprintf(buf, sizeof(buf), " { %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\" },", size, size1, size2, nameh1, nameh2, namev1, namev2); sarrayAddString(sa, buf, L_COPY); LEPT_FREE(nameh1); LEPT_FREE(nameh2); LEPT_FREE(namev1); LEPT_FREE(namev2); } str = sarrayToString(sa, 1); len = strlen(str); l_binaryWrite(fileout, "w", str, len + 1); LEPT_FREE(str); sarrayDestroy(&sa); selaDestroy(&selabasic); selaDestroy(&selacomb); } #endif /* -------------------------------------------------------------------- */ /*! * \brief getCompositeParameters() * * \param[in] size * \param[out] psize1 [optional] brick factor size * \param[out] psize2 [optional] comb factor size * \param[out] pnameh1 [optional] name of horiz brick * \param[out] pnameh2 [optional] name of horiz comb * \param[out] pnamev1 [optional] name of vert brick * \param[out] pnamev2 [optional] name of vert comb * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This uses the big lookup table at the top of this file.
 *      (2) All returned strings are copies that must be freed.
 * 
*/ l_ok getCompositeParameters(l_int32 size, l_int32 *psize1, l_int32 *psize2, char **pnameh1, char **pnameh2, char **pnamev1, char **pnamev2) { l_int32 index; if (psize1) *psize1 = 0; if (psize2) *psize2 = 0; if (pnameh1) *pnameh1 = NULL; if (pnameh2) *pnameh2 = NULL; if (pnamev1) *pnamev1 = NULL; if (pnamev2) *pnamev2 = NULL; if (size < 2 || size > 63) return ERROR_INT("valid size range is {2 ... 63}", __func__, 1); index = size - 2; if (psize1) *psize1 = comp_parameter_map[index].size1; if (psize2) *psize2 = comp_parameter_map[index].size2; if (pnameh1) *pnameh1 = stringNew(comp_parameter_map[index].selnameh1); if (pnameh2) *pnameh2 = stringNew(comp_parameter_map[index].selnameh2); if (pnamev1) *pnamev1 = stringNew(comp_parameter_map[index].selnamev1); if (pnamev2) *pnamev2 = stringNew(comp_parameter_map[index].selnamev2); return 0; } /*! * \brief selaGetSelnames() * * \param[in] sela * \return sa of all sel names, or NULL on error */ SARRAY * selaGetSelnames(SELA *sela) { char *selname; l_int32 i, n; SEL *sel; SARRAY *sa; if (!sela) return (SARRAY *)ERROR_PTR("sela not defined", __func__, NULL); if ((n = selaGetCount(sela)) == 0) return (SARRAY *)ERROR_PTR("no sels in sela", __func__, NULL); if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", __func__, NULL); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); sarrayAddString(sa, selname, L_COPY); } return sa; } /*----------------------------------------------------------------------* * Max translations for erosion and hmt * *----------------------------------------------------------------------*/ /*! * \brief selFindMaxTranslations() * * \param[in] sel * \param[out] pxp, pyp, pxn, pyn max shifts * \return 0 if OK; 1 on error * *
 * Notes:
          These are the maximum shifts for the erosion operation.
 *        For example, when j < cx, the shift of the image
 *        is +x to the cx.  This is a positive xp shift.
 * 
*/ l_ok selFindMaxTranslations(SEL *sel, l_int32 *pxp, l_int32 *pyp, l_int32 *pxn, l_int32 *pyn) { l_int32 sx, sy, cx, cy, i, j; l_int32 maxxp, maxyp, maxxn, maxyn; if (!pxp || !pyp || !pxn || !pyn) return ERROR_INT("&xp (etc) defined", __func__, 1); *pxp = *pyp = *pxn = *pyn = 0; if (!sel) return ERROR_INT("sel not defined", __func__, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); maxxp = maxyp = maxxn = maxyn = 0; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { if (sel->data[i][j] == 1) { maxxp = L_MAX(maxxp, cx - j); maxyp = L_MAX(maxyp, cy - i); maxxn = L_MAX(maxxn, j - cx); maxyn = L_MAX(maxyn, i - cy); } } } *pxp = maxxp; *pyp = maxyp; *pxn = maxxn; *pyn = maxyn; return 0; } /*----------------------------------------------------------------------* * Rotation by multiples of 90 degrees * *----------------------------------------------------------------------*/ /*! * \brief selRotateOrth() * * \param[in] sel * \param[in] quads 0 - 4; number of 90 degree cw rotations * \return seld, or NULL on error */ SEL * selRotateOrth(SEL *sel, l_int32 quads) { l_int32 i, j, ni, nj, sx, sy, cx, cy, nsx, nsy, ncx, ncy, type; SEL *seld; if (!sel) return (SEL *)ERROR_PTR("sel not defined", __func__, NULL); if (quads < 0 || quads > 4) return (SEL *)ERROR_PTR("quads not in {0,1,2,3,4}", __func__, NULL); if (quads == 0 || quads == 4) return selCopy(sel); selGetParameters(sel, &sy, &sx, &cy, &cx); if (quads == 1) { /* 90 degrees cw */ nsx = sy; nsy = sx; ncx = sy - cy - 1; ncy = cx; } else if (quads == 2) { /* 180 degrees cw */ nsx = sx; nsy = sy; ncx = sx - cx - 1; ncy = sy - cy - 1; } else { /* 270 degrees cw */ nsx = sy; nsy = sx; ncx = cy; ncy = sx - cx - 1; } seld = selCreateBrick(nsy, nsx, ncy, ncx, SEL_DONT_CARE); if (sel->name) seld->name = stringNew(sel->name); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { selGetElement(sel, i, j, &type); if (quads == 1) { ni = j; nj = sy - i - 1; } else if (quads == 2) { ni = sy - i - 1; nj = sx - j - 1; } else { /* quads == 3 */ ni = sx - j - 1; nj = i; } selSetElement(seld, ni, nj, type); } } return seld; } /*----------------------------------------------------------------------* * Sela and Sel serialized I/O * *----------------------------------------------------------------------*/ /*! * \brief selaRead() * * \param[in] fname filename * \return sela, or NULL on error */ SELA * selaRead(const char *fname) { FILE *fp; SELA *sela; if (!fname) return (SELA *)ERROR_PTR("fname not defined", __func__, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (SELA *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); if ((sela = selaReadStream(fp)) == NULL) { fclose(fp); return (SELA *)ERROR_PTR_1("sela not returned", fname, __func__, NULL); } fclose(fp); return sela; } /*! * \brief selaReadStream() * * \param[in] fp file stream * \return sela, or NULL on error */ SELA * selaReadStream(FILE *fp) { l_int32 i, n, version; SEL *sel; SELA *sela; if (!fp) return (SELA *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, "\nSela Version %d\n", &version) != 1) return (SELA *)ERROR_PTR("not a sela file", __func__, NULL); if (version != SEL_VERSION_NUMBER) return (SELA *)ERROR_PTR("invalid sel version", __func__, NULL); if (fscanf(fp, "Number of Sels = %d\n\n", &n) != 1) return (SELA *)ERROR_PTR("not a sela file", __func__, NULL); if ((sela = selaCreate(n)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); sela->nalloc = n; for (i = 0; i < n; i++) { if ((sel = selReadStream(fp)) == NULL) { selaDestroy(&sela); return (SELA *)ERROR_PTR("sel not read", __func__, NULL); } selaAddSel(sela, sel, NULL, 0); } return sela; } /*! * \brief selRead() * * \param[in] fname filename * \return sel, or NULL on error */ SEL * selRead(const char *fname) { FILE *fp; SEL *sel; if (!fname) return (SEL *)ERROR_PTR("fname not defined", __func__, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (SEL *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); if ((sel = selReadStream(fp)) == NULL) { fclose(fp); return (SEL *)ERROR_PTR_1("sela not returned", fname, __func__, NULL); } fclose(fp); return sel; } /*! * \brief selReadStream() * * \param[in] fp file stream * \return sel, or NULL on error */ SEL * selReadStream(FILE *fp) { char selname[256]; char linebuf[256]; l_int32 sy, sx, cy, cx, i, j, version, ignore; SEL *sel; if (!fp) return (SEL *)ERROR_PTR("stream not defined", __func__, NULL); if (fscanf(fp, " Sel Version %d\n", &version) != 1) return (SEL *)ERROR_PTR("not a sel file", __func__, NULL); if (version != SEL_VERSION_NUMBER) return (SEL *)ERROR_PTR("invalid sel version", __func__, NULL); if (fgets(linebuf, sizeof(linebuf), fp) == NULL) return (SEL *)ERROR_PTR("error reading into linebuf", __func__, NULL); sscanf(linebuf, " ------ %200s ------", selname); if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", &sy, &sx, &cy, &cx) != 4) return (SEL *)ERROR_PTR("dimensions not read", __func__, NULL); if ((sel = selCreate(sy, sx, selname)) == NULL) return (SEL *)ERROR_PTR("sel not made", __func__, NULL); selSetOrigin(sel, cy, cx); for (i = 0; i < sy; i++) { ignore = fscanf(fp, " "); for (j = 0; j < sx; j++) ignore = fscanf(fp, "%1d", &sel->data[i][j]); ignore = fscanf(fp, "\n"); } ignore = fscanf(fp, "\n"); return sel; } /*! * \brief selaWrite() * * \param[in] fname filename * \param[in] sela * \return 0 if OK, 1 on error */ l_ok selaWrite(const char *fname, SELA *sela) { FILE *fp; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (!sela) return ERROR_INT("sela not defined", __func__, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT_1("stream not opened", fname, __func__, 1); selaWriteStream(fp, sela); fclose(fp); return 0; } /*! * \brief selaWriteStream() * * \param[in] fp file stream * \param[in] sela * \return 0 if OK, 1 on error */ l_ok selaWriteStream(FILE *fp, SELA *sela) { l_int32 i, n; SEL *sel; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!sela) return ERROR_INT("sela not defined", __func__, 1); n = selaGetCount(sela); fprintf(fp, "\nSela Version %d\n", SEL_VERSION_NUMBER); fprintf(fp, "Number of Sels = %d\n\n", n); for (i = 0; i < n; i++) { if ((sel = selaGetSel(sela, i)) == NULL) continue; selWriteStream(fp, sel); } return 0; } /*! * \brief selWrite() * * \param[in] fname filename * \param[in] sel * \return 0 if OK, 1 on error */ l_ok selWrite(const char *fname, SEL *sel) { FILE *fp; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (!sel) return ERROR_INT("sel not defined", __func__, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT_1("stream not opened", fname, __func__, 1); selWriteStream(fp, sel); fclose(fp); return 0; } /*! * \brief selWriteStream() * * \param[in] fp file stream * \param[in] sel * \return 0 if OK, 1 on error */ l_ok selWriteStream(FILE *fp, SEL *sel) { l_int32 sx, sy, cx, cy, i, j; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!sel) return ERROR_INT("sel not defined", __func__, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); fprintf(fp, " Sel Version %d\n", SEL_VERSION_NUMBER); fprintf(fp, " ------ %s ------\n", selGetName(sel)); fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); for (i = 0; i < sy; i++) { fprintf(fp, " "); for (j = 0; j < sx; j++) fprintf(fp, "%d", sel->data[i][j]); fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } /*----------------------------------------------------------------------* * Building custom hit-miss sels from compiled strings * *----------------------------------------------------------------------*/ /*! * \brief selCreateFromString() * * \param[in] text * \param[in] h, w height, width * \param[in] name [optional] sel name; can be null * \return sel of the given size, or NULL on error * *
 * Notes:
 *      (1) The text is an array of chars (in row-major order) where
 *          each char can be one of the following:
 *             'x': hit
 *             'o': miss
 *             ' ': don't-care
 *      (2) When the origin falls on a hit or miss, use an upper case
 *          char (e.g., 'X' or 'O') to indicate it.  When the origin
 *          falls on a don't-care, indicate this with a 'C'.
 *          The string must have exactly one origin specified.
 *      (3) The advantage of this method is that the text can be input
 *          in a format that shows the 2D layout of the Sel; e.g.,
 * \code
 *              static const char *seltext = "x    "
 *                                           "x Oo "
 *                                           "x    "
 *                                           "xxxxx";
 * \endcode
 * 
*/ SEL * selCreateFromString(const char *text, l_int32 h, l_int32 w, const char *name) { SEL *sel; l_int32 y, x, norig; char ch; if (!text || text[0] == '\0') return (SEL *)ERROR_PTR("text undefined or empty", __func__, NULL); if (h < 1) return (SEL *)ERROR_PTR("height must be > 0", __func__, NULL); if (w < 1) return (SEL *)ERROR_PTR("width must be > 0", __func__, NULL); if (strlen(text) != (size_t)w * h) return (SEL *)ERROR_PTR("text size != w * h", __func__, NULL); sel = selCreate(h, w, name); norig = 0; for (y = 0; y < h; ++y) { for (x = 0; x < w; ++x) { ch = *(text++); switch (ch) { case 'X': norig++; selSetOrigin(sel, y, x); /* fall through */ case 'x': selSetElement(sel, y, x, SEL_HIT); break; case 'O': norig++; selSetOrigin(sel, y, x); /* fall through */ case 'o': selSetElement(sel, y, x, SEL_MISS); break; case 'C': norig++; selSetOrigin(sel, y, x); /* fall through */ case ' ': selSetElement(sel, y, x, SEL_DONT_CARE); break; case '\n': /* ignored */ continue; default: selDestroy(&sel); return (SEL *)ERROR_PTR("unknown char", __func__, NULL); } } } if (norig != 1) { L_ERROR("Exactly one origin must be specified; this string has %d\n", __func__, norig); selDestroy(&sel); } return sel; } /*! * \brief selPrintToString() * * \param[in] sel * \return str string; caller must free * *
 * Notes:
 *      (1) This is an inverse function of selCreateFromString.
 *          It prints a textual representation of the SEL to a malloc'd
 *          string.  The format is the same as selCreateFromString
 *          except that newlines are inserted into the output
 *          between rows.
 *      (2) This is useful for debugging.  However, if you want to
 *          save some Sels in a file, put them in a Sela and write
 *          them out with selaWrite().  They can then be read in
 *          with selaRead().
 * 
*/ char * selPrintToString(SEL *sel) { char is_center; char *str, *strptr; l_int32 type; l_int32 sx, sy, cx, cy, x, y; if (!sel) return (char *)ERROR_PTR("sel not defined", __func__, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); if ((str = (char *)LEPT_CALLOC(1, sy * (sx + 1) + 1)) == NULL) return (char *)ERROR_PTR("calloc fail for str", __func__, NULL); strptr = str; for (y = 0; y < sy; ++y) { for (x = 0; x < sx; ++x) { selGetElement(sel, y, x, &type); is_center = (x == cx && y == cy); switch (type) { case SEL_HIT: *(strptr++) = is_center ? 'X' : 'x'; break; case SEL_MISS: *(strptr++) = is_center ? 'O' : 'o'; break; case SEL_DONT_CARE: *(strptr++) = is_center ? 'C' : ' '; break; } } *(strptr++) = '\n'; } return str; } /*----------------------------------------------------------------------* * Building custom hit-miss sels from a simple file format * *----------------------------------------------------------------------*/ /*! * \brief selaCreateFromFile() * * \param[in] filename * \return sela, or NULL on error * *
 * Notes:
 *      (1) The file contains a sequence of Sel descriptions.
 *      (2) Each Sel is formatted as follows:
 *           ~ Any number of comment lines starting with '#' are ignored
 *           ~ The next line contains the selname
 *           ~ The next lines contain the Sel data.  They must be
 *             formatted similarly to the string format in
 *             selCreateFromString(), with each line beginning and
 *             ending with a double-quote, and showing the 2D layout.
 *           ~ Each Sel ends when a blank line, a comment line, or
 *             the end of file is reached.
 *      (3) See selCreateFromString() for a description of the string
 *          format for the Sel data.  As an example, here are the lines
 *          of is a valid file for a single Sel.  In the file, all lines
 *          are left-justified:
 *                    # diagonal sel
 *                    sel_5diag
 *                    "x    "
 *                    " x   "
 *                    "  X  "
 *                    "   x "
 *                    "    x"
 * 
*/ SELA * selaCreateFromFile(const char *filename) { char *filestr, *line; l_int32 i, n, first, last, nsel, insel; size_t nbytes; NUMA *nafirst, *nalast; SARRAY *sa; SEL *sel; SELA *sela; if (!filename) return (SELA *)ERROR_PTR("filename not defined", __func__, NULL); filestr = (char *)l_binaryRead(filename, &nbytes); sa = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); n = sarrayGetCount(sa); sela = selaCreate(0); /* Find the start and end lines for each Sel. * We allow the "blank" lines to be null strings or * to have standard whitespace (' ','\t',\'n') or be '#'. */ nafirst = numaCreate(0); nalast = numaCreate(0); insel = FALSE; for (i = 0; i < n; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (!insel && (line[0] != '\0' && line[0] != ' ' && line[0] != '\t' && line[0] != '\n' && line[0] != '#')) { numaAddNumber(nafirst, i); insel = TRUE; continue; } if (insel && (line[0] == '\0' || line[0] == ' ' || line[0] == '\t' || line[0] == '\n' || line[0] == '#')) { numaAddNumber(nalast, i - 1); insel = FALSE; continue; } } if (insel) /* fell off the end of the file */ numaAddNumber(nalast, n - 1); /* Extract sels */ nsel = numaGetCount(nafirst); for (i = 0; i < nsel; i++) { numaGetIValue(nafirst, i, &first); numaGetIValue(nalast, i, &last); if ((sel = selCreateFromSArray(sa, first, last)) == NULL) { lept_stderr("Error reading sel from %d to %d\n", first, last); selaDestroy(&sela); sarrayDestroy(&sa); numaDestroy(&nafirst); numaDestroy(&nalast); return (SELA *)ERROR_PTR("bad sela file", __func__, NULL); } selaAddSel(sela, sel, NULL, 0); } numaDestroy(&nafirst); numaDestroy(&nalast); sarrayDestroy(&sa); return sela; } /*! * \brief selCreateFromSArray() * * \param[in] sa * \param[in] first line of sarray where Sel begins * \param[in] last line of sarray where Sel ends * \return sela, or NULL on error * *
 * Notes:
 *      (1) The Sel contains the following lines:
 *          ~ The first line is the selname
 *          ~ The remaining lines contain the Sel data.  They must
 *            be formatted similarly to the string format in
 *            selCreateFromString(), with each line beginning and
 *            ending with a double-quote, and showing the 2D layout.
 *          ~ 'last' gives the last line in the Sel data.
 *      (2) See selCreateFromString() for a description of the string
 *          format for the Sel data.  As an example, here are the lines
 *          of is a valid file for a single Sel.  In the file, all lines
 *          are left-justified:
 *                    # diagonal sel
 *                    sel_5diag
 *                    "x    "
 *                    " x   "
 *                    "  X  "
 *                    "   x "
 *                    "    x"
 * 
*/ static SEL * selCreateFromSArray(SARRAY *sa, l_int32 first, l_int32 last) { char ch; char *name, *line; l_int32 n, len, i, w, h, y, x; SEL *sel; if (!sa) return (SEL *)ERROR_PTR("sa not defined", __func__, NULL); n = sarrayGetCount(sa); if (first < 0 || first >= n || last <= first || last >= n) return (SEL *)ERROR_PTR("invalid range", __func__, NULL); name = sarrayGetString(sa, first, L_NOCOPY); h = last - first; line = sarrayGetString(sa, first + 1, L_NOCOPY); len = strlen(line); if (line[0] != '"' || line[len - 1] != '"') return (SEL *)ERROR_PTR("invalid format", __func__, NULL); w = len - 2; if ((sel = selCreate(h, w, name)) == NULL) return (SEL *)ERROR_PTR("sel not made", __func__, NULL); for (i = first + 1; i <= last; i++) { line = sarrayGetString(sa, i, L_NOCOPY); y = i - first - 1; for (x = 0; x < w; ++x) { ch = line[x + 1]; /* skip the leading double-quote */ switch (ch) { case 'X': selSetOrigin(sel, y, x); /* set origin and hit */ /* fall through */ case 'x': selSetElement(sel, y, x, SEL_HIT); break; case 'O': selSetOrigin(sel, y, x); /* set origin and miss */ /* fall through */ case 'o': selSetElement(sel, y, x, SEL_MISS); break; case 'C': selSetOrigin(sel, y, x); /* set origin and don't-care */ /* fall through */ case ' ': selSetElement(sel, y, x, SEL_DONT_CARE); break; default: selDestroy(&sel); return (SEL *)ERROR_PTR("unknown char", __func__, NULL); } } } return sel; } /*----------------------------------------------------------------------* * Making hit-only SELs from Pta and Pix * *----------------------------------------------------------------------*/ /*! * \brief selCreateFromPta() * * \param[in] pta * \param[in] cy, cx origin of sel * \param[in] name [optional] sel name; can be null * \return sel of minimum required size, or NULL on error * *
 * Notes:
 *      (1) The origin and all points in the pta must be positive.
 * 
*/ SEL * selCreateFromPta(PTA *pta, l_int32 cy, l_int32 cx, const char *name) { l_int32 i, n, x, y, w, h; BOX *box; SEL *sel; if (!pta) return (SEL *)ERROR_PTR("pta not defined", __func__, NULL); if (cy < 0 || cx < 0) return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", __func__, NULL); n = ptaGetCount(pta); if (n == 0) return (SEL *)ERROR_PTR("no pts in pta", __func__, NULL); box = ptaGetBoundingRegion(pta); boxGetGeometry(box, &x, &y, &w, &h); boxDestroy(&box); if (x < 0 || y < 0) return (SEL *)ERROR_PTR("not all x and y >= 0", __func__, NULL); sel = selCreate(y + h, x + w, name); selSetOrigin(sel, cy, cx); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); selSetElement(sel, y, x, SEL_HIT); } return sel; } /*! * \brief selCreateFromPix() * * \param[in] pix * \param[in] cy, cx origin of sel * \param[in] name [optional] sel name; can be null * \return sel, or NULL on error * *
 * Notes:
 *      (1) The origin must be positive.
 *      (2) The pix must not exceed MaxPixTemplateSize in either dimension.
 *          and the total number of hits must not exceed MaxPixTemplateHits.
 * 
*/ SEL * selCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx, const char *name) { SEL *sel; l_int32 i, j, w, h, d, nhits; l_uint32 val; if (!pix) return (SEL *)ERROR_PTR("pix not defined", __func__, NULL); if (cy < 0 || cx < 0) return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", __func__, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return (SEL *)ERROR_PTR("pix not 1 bpp", __func__, NULL); if (w > MaxPixTemplateSize || h > MaxPixTemplateSize) { L_ERROR("pix template too large (w = %d, h = %d)\n", __func__, w, h); return NULL; } if (w > MaxPixTemplateSize / 5 || h > MaxPixTemplateSize / 5) L_WARNING("large pix template: w = %d, h = %d\n", __func__, w, h); pixCountPixels(pix, &nhits, NULL); if (nhits > MaxPixTemplateHits) { L_ERROR("too many hits (%d) in pix template\n", __func__, nhits); return NULL; } if (nhits > MaxPixTemplateHits / 5) L_WARNING("many hits (%d) in pix template\n", __func__, nhits); sel = selCreate(h, w, name); selSetOrigin(sel, cy, cx); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix, j, i, &val); if (val) selSetElement(sel, i, j, SEL_HIT); } } return sel; } /*----------------------------------------------------------------------* * Making hit-miss sels from color Pix and image files * *----------------------------------------------------------------------*/ /*! * * selReadFromColorImage() * * \param[in] pathname * \return sel if OK; NULL on error * *
 * Notes:
 *      (1) Loads an image from a file and creates a (hit-miss) sel.
 *      (2) The sel name is taken from the pathname without the directory
 *          and extension.
 * 
*/ SEL * selReadFromColorImage(const char *pathname) { PIX *pix; SEL *sel; char *basename, *selname; splitPathAtExtension (pathname, &basename, NULL); splitPathAtDirectory (basename, NULL, &selname); LEPT_FREE(basename); if ((pix = pixRead(pathname)) == NULL) { LEPT_FREE(selname); return (SEL *)ERROR_PTR("pix not returned", __func__, NULL); } if ((sel = selCreateFromColorPix(pix, selname)) == NULL) L_ERROR("sel not made\n", __func__); LEPT_FREE(selname); pixDestroy(&pix); return sel; } /*! * * selCreateFromColorPix() * * \param[in] pixs cmapped or rgb * \param[in] selname [optional] sel name; can be null * \return sel if OK, NULL on error * *
 * Notes:
 *      (1) The sel size is given by the size of pixs.
 *      (2) In pixs, hits are represented by green pixels, misses by red
 *          pixels, and don't-cares by white pixels.
 *      (3) In pixs, there may be no misses, but there must be at least 1 hit.
 *      (4) At most there can be only one origin pixel, which is optionally
 *          specified by using a lower-intensity pixel:
 *            if a hit:  dark green
 *            if a miss: dark red
 *            if a don't care: gray
 *          If there is no such pixel, the origin defaults to the approximate
 *          center of the sel.
 * 
*/ SEL * selCreateFromColorPix(PIX *pixs, const char *selname) { PIXCMAP *cmap; SEL *sel; l_int32 hascolor, num_origins, nohits; l_int32 w, h, d, i, j, red, green, blue; l_uint32 pixval; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", __func__, NULL); hascolor = FALSE; cmap = pixGetColormap(pixs); if (cmap) pixcmapHasColor(cmap, &hascolor); pixGetDimensions(pixs, &w, &h, &d); if (hascolor == FALSE && d != 32) return (SEL *)ERROR_PTR("pixs has no color", __func__, NULL); if ((sel = selCreate (h, w, NULL)) == NULL) return (SEL *)ERROR_PTR ("sel not made", __func__, NULL); selSetOrigin (sel, h / 2, w / 2); /* default */ selSetName(sel, selname); num_origins = 0; nohits = TRUE; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel (pixs, j, i, &pixval); if (cmap) { pixcmapGetColor (cmap, pixval, &red, &green, &blue); } else { red = GET_DATA_BYTE (&pixval, COLOR_RED); green = GET_DATA_BYTE (&pixval, COLOR_GREEN); blue = GET_DATA_BYTE (&pixval, COLOR_BLUE); } if (red < 255 && green < 255 && blue < 255) { num_origins++; if (num_origins == 1) /* first one found */ selSetOrigin (sel, i, j); if (num_origins == 2) L_WARNING("multiple origins in sel image\n", __func__); } if (!red && green && !blue) { nohits = FALSE; selSetElement (sel, i, j, SEL_HIT); } else if (red && !green && !blue) { selSetElement (sel, i, j, SEL_MISS); } else if (red && green && blue) { selSetElement (sel, i, j, SEL_DONT_CARE); } else { selDestroy(&sel); return (SEL *)ERROR_PTR("invalid color", __func__, NULL); } } } if (nohits) { selDestroy(&sel); return (SEL *)ERROR_PTR("no hits in sel", __func__, NULL); } return sel; } /*! * * selaCreateFromColorPixa() * * \param[in] pixa color pixa representing the sels * \param[in] sa sarray of sel names * \return sel if OK, NULL on error * *
 * Notes:
 *      (1) See notes in selCreateFromColorPix()
 *      (2) sa is required because all sels that are put in a sela
 *          must have a name.
 * 
*/ SELA * selaCreateFromColorPixa(PIXA *pixa, SARRAY *sa) { char *str; l_int32 i, n; PIX *pix; SEL *sel; SELA *sela; if (!pixa) return (SELA *)ERROR_PTR("pixa not defined", __func__, NULL); if (!sa) return (SELA *)ERROR_PTR("sa of sel names not defined", __func__, NULL); n = pixaGetCount(pixa); if ((sela = selaCreate(n)) == NULL) return (SELA *)ERROR_PTR("sela not allocated", __func__, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); str = sarrayGetString(sa, i, L_NOCOPY); sel = selCreateFromColorPix(pix, str); selaAddSel(sela, sel, NULL, L_INSERT); pixDestroy(&pix); } return sela; } /*----------------------------------------------------------------------* * Printable display of sel * *----------------------------------------------------------------------*/ /*! * \brief selDisplayInPix() * * \param[in] sel * \param[in] size of grid interiors; odd; minimum size of 13 is enforced * \param[in] gthick grid thickness; minimum size of 2 is enforced * \return pix display of sel, or NULL on error * *
 * Notes:
 *      (1) This gives a visual representation of a general (hit-miss) sel.
 *      (2) The empty sel is represented by a grid of intersecting lines.
 *      (3) Three different patterns are generated for the sel elements:
 *          ~ hit (solid black circle)
 *          ~ miss (black ring; inner radius is radius2)
 *          ~ origin (cross, XORed with whatever is there)
 * 
*/ PIX * selDisplayInPix(SEL *sel, l_int32 size, l_int32 gthick) { l_int32 i, j, w, h, sx, sy, cx, cy, type, width; l_int32 radius1, radius2, shift1, shift2, x0, y0; PIX *pixd, *pix2, *pixh, *pixm, *pixorig; PTA *pta1, *pta2, *pta1t, *pta2t; if (!sel) return (PIX *)ERROR_PTR("sel not defined", __func__, NULL); if (size < 13) { L_WARNING("size < 13; setting to 13\n", __func__); size = 13; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", __func__); gthick = 2; } selGetParameters(sel, &sy, &sx, &cy, &cx); w = size * sx + gthick * (sx + 1); h = size * sy + gthick * (sy + 1); pixd = pixCreate(w, h, 1); /* Generate grid lines */ for (i = 0; i <= sy; i++) pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), w - 1, gthick / 2 + i * (size + gthick), gthick, L_SET_PIXELS); for (j = 0; j <= sx; j++) pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, gthick / 2 + j * (size + gthick), h - 1, gthick, L_SET_PIXELS); /* Generate hit and miss patterns */ radius1 = (l_int32)(0.85 * ((size - 1) / 2.0) + 0.5); /* of hit */ radius2 = (l_int32)(0.65 * ((size - 1) / 2.0) + 0.5); /* of inner miss */ pta1 = generatePtaFilledCircle(radius1); pta2 = generatePtaFilledCircle(radius2); shift1 = (size - 1) / 2 - radius1; /* center circle in square */ shift2 = (size - 1) / 2 - radius2; pta1t = ptaTransform(pta1, shift1, shift1, 1.0, 1.0); pta2t = ptaTransform(pta2, shift2, shift2, 1.0, 1.0); pixh = pixGenerateFromPta(pta1t, size, size); /* hits */ pix2 = pixGenerateFromPta(pta2t, size, size); pixm = pixSubtract(NULL, pixh, pix2); /* Generate crossed lines for origin pattern */ pixorig = pixCreate(size, size, 1); width = size / 8; pixRenderLine(pixorig, size / 2, (l_int32)(0.12 * size), size / 2, (l_int32)(0.88 * size), width, L_SET_PIXELS); pixRenderLine(pixorig, (l_int32)(0.15 * size), size / 2, (l_int32)(0.85 * size), size / 2, width, L_FLIP_PIXELS); pixRasterop(pixorig, size / 2 - width, size / 2 - width, 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); /* Specialize origin pattern for this sel */ selGetTypeAtOrigin(sel, &type); if (type == SEL_HIT) pixXor(pixorig, pixorig, pixh); else if (type == SEL_MISS) pixXor(pixorig, pixorig, pixm); /* Paste the patterns in */ y0 = gthick; for (i = 0; i < sy; i++) { x0 = gthick; for (j = 0; j < sx; j++) { selGetElement(sel, i, j, &type); if (i == cy && j == cx) /* origin */ pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixorig, 0, 0); else if (type == SEL_HIT) pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixh, 0, 0); else if (type == SEL_MISS) pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixm, 0, 0); x0 += size + gthick; } y0 += size + gthick; } pixDestroy(&pix2); pixDestroy(&pixh); pixDestroy(&pixm); pixDestroy(&pixorig); ptaDestroy(&pta1); ptaDestroy(&pta1t); ptaDestroy(&pta2); ptaDestroy(&pta2t); return pixd; } /*! * \brief selaDisplayInPix() * * \param[in] sela * \param[in] size of grid interiors; odd; minimum size of 13 is enforced * \param[in] gthick grid thickness; minimum size of 2 is enforced * \param[in] spacing between sels, both horizontally and vertically * \param[in] ncols number of sels per "line" * \return pix display of all sels in sela, or NULL on error * *
 * Notes:
 *      (1) This gives a visual representation of all the sels in a sela.
 *      (2) See notes in selDisplayInPix() for display params of each sel.
 *      (3) This gives the nicest results when all sels in the sela
 *          are the same size.
 * 
*/ PIX * selaDisplayInPix(SELA *sela, l_int32 size, l_int32 gthick, l_int32 spacing, l_int32 ncols) { l_int32 nsels, i, w, width; PIX *pixt, *pixd; PIXA *pixa; SEL *sel; if (!sela) return (PIX *)ERROR_PTR("sela not defined", __func__, NULL); if (size < 13) { L_WARNING("size < 13; setting to 13\n", __func__); size = 13; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", __func__); gthick = 2; } if (spacing < 5) { L_WARNING("spacing < 5; setting to 5\n", __func__); spacing = 5; } /* Accumulate the pix of each sel */ nsels = selaGetCount(sela); pixa = pixaCreate(nsels); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); pixt = selDisplayInPix(sel, size, gthick); pixaAddPix(pixa, pixt, L_INSERT); } /* Find the tiled output width, using just the first * ncols pix in the pixa. If all pix have the same width, * they will align properly in columns. */ width = 0; ncols = L_MIN(nsels, ncols); for (i = 0; i < ncols; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, NULL, NULL); width += w; pixDestroy(&pixt); } width += (ncols + 1) * spacing; /* add spacing all around as well */ pixd = pixaDisplayTiledInRows(pixa, 1, width, 1.0, 0, spacing, 0); pixaDestroy(&pixa); return pixd; } leptonica-1.86.0/src/sel2.c000066400000000000000000000715501506303110300153640ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file sel2.c *
 *
 *      Contains definitions of simple structuring elements
 *
 *      Basic brick structuring elements
 *          SELA    *selaAddBasic()
 *               Linear horizontal and vertical
 *               Square
 *               Diagonals
 *
 *      Simple hit-miss structuring elements
 *          SELA    *selaAddHitMiss()
 *               Isolated foreground pixel
 *               Horizontal and vertical edges
 *               Slanted edge
 *               Corners
 *
 *      Structuring elements for comparing with DWA operations
 *          SELA    *selaAddDwaLinear()
 *          SELA    *selaAddDwaCombs()
 *
 *      Structuring elements for the intersection of lines
 *          SELA    *selaAddCrossJunctions()
 *          SELA    *selaAddTJunctions()
 *
 *      Structuring elements for connectivity-preserving thinning operations
 *          SELA    *sela4ccThin()
 *          SELA    *sela8ccThin()
 *          SELA    *sela4and8ccThin()
 *
 *      Other structuring elements
 *          SEL    *selMakePlusSign()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #define L_BUF_SIZE 512 /* Linear brick sel sizes, including all those that are required * for decomposable sels up to size 63. */ static const l_int32 num_linear = 25; static const l_int32 basic_linear[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 21, 25, 30, 31, 35, 40, 41, 45, 50, 51}; /* ------------------------------------------------------------------- * * Basic brick structuring elements * * ------------------------------------------------------------------- */ /*! * \brief selaAddBasic() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds the following sels:
 *            ~ all linear (horiz, vert) brick sels that are
 *              necessary for decomposable sels up to size 63
 *            ~ square brick sels up to size 10
 *            ~ 4 diagonal sels
 * 
*/ SELA * selaAddBasic(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i, size; SEL *sel; if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } /*--------------------------------------------------------------* * Linear horizontal and vertical sels * *--------------------------------------------------------------*/ for (i = 0; i < num_linear; i++) { size = basic_linear[i]; sel = selCreateBrick(1, size, 0, size / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%dh", size); selaAddSel(sela, sel, name, 0); } for (i = 0; i < num_linear; i++) { size = basic_linear[i]; sel = selCreateBrick(size, 1, size / 2, 0, 1); snprintf(name, L_BUF_SIZE, "sel_%dv", size); selaAddSel(sela, sel, name, 0); } /*-----------------------------------------------------------* * 2-d Bricks * *-----------------------------------------------------------*/ for (i = 2; i <= 5; i++) { sel = selCreateBrick(i, i, i / 2, i / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%d", i); selaAddSel(sela, sel, name, 0); } /*-----------------------------------------------------------* * Diagonals * *-----------------------------------------------------------*/ /* 0c 1 1 0 */ sel = selCreateBrick(2, 2, 0, 0, 1); selSetElement(sel, 0, 0, 0); selSetElement(sel, 1, 1, 0); selaAddSel(sela, sel, "sel_2dp", 0); /* 1c 0 0 1 */ sel = selCreateBrick(2, 2, 0, 0, 1); selSetElement(sel, 0, 1, 0); selSetElement(sel, 1, 0, 0); selaAddSel(sela, sel, "sel_2dm", 0); /* Diagonal, slope +, size 5 */ sel = selCreate(5, 5, "sel_5dp"); selSetOrigin(sel, 2, 2); selSetElement(sel, 0, 4, 1); selSetElement(sel, 1, 3, 1); selSetElement(sel, 2, 2, 1); selSetElement(sel, 3, 1, 1); selSetElement(sel, 4, 0, 1); selaAddSel(sela, sel, "sel_5dp", 0); /* Diagonal, slope -, size 5 */ sel = selCreate(5, 5, "sel_5dm"); selSetOrigin(sel, 2, 2); selSetElement(sel, 0, 0, 1); selSetElement(sel, 1, 1, 1); selSetElement(sel, 2, 2, 1); selSetElement(sel, 3, 3, 1); selSetElement(sel, 4, 4, 1); selaAddSel(sela, sel, "sel_5dm", 0); return sela; } /* ------------------------------------------------------------------- * * Simple hit-miss structuring elements * * ------------------------------------------------------------------- */ /*! * \brief selaAddHitMiss() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error */ SELA * selaAddHitMiss(SELA *sela) { SEL *sel; if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } #if 0 /* use just for testing */ sel = selCreateBrick(3, 3, 1, 1, 2); selaAddSel(sela, sel, "sel_bad", 0); #endif /*--------------------------------------------------------------* * Isolated foreground pixel * *--------------------------------------------------------------*/ sel = selCreateBrick(3, 3, 1, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_HIT); selaAddSel(sela, sel, "sel_3hm", 0); /*--------------------------------------------------------------* * Horizontal and vertical edges * *--------------------------------------------------------------*/ sel = selCreateBrick(2, 3, 0, 1, SEL_HIT); selSetElement(sel, 1, 0, SEL_MISS); selSetElement(sel, 1, 1, SEL_MISS); selSetElement(sel, 1, 2, SEL_MISS); selaAddSel(sela, sel, "sel_3de", 0); sel = selCreateBrick(2, 3, 1, 1, SEL_HIT); selSetElement(sel, 0, 0, SEL_MISS); selSetElement(sel, 0, 1, SEL_MISS); selSetElement(sel, 0, 2, SEL_MISS); selaAddSel(sela, sel, "sel_3ue", 0); sel = selCreateBrick(3, 2, 1, 0, SEL_HIT); selSetElement(sel, 0, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_MISS); selSetElement(sel, 2, 1, SEL_MISS); selaAddSel(sela, sel, "sel_3re", 0); sel = selCreateBrick(3, 2, 1, 1, SEL_HIT); selSetElement(sel, 0, 0, SEL_MISS); selSetElement(sel, 1, 0, SEL_MISS); selSetElement(sel, 2, 0, SEL_MISS); selaAddSel(sela, sel, "sel_3le", 0); /*--------------------------------------------------------------* * Slanted edge * *--------------------------------------------------------------*/ sel = selCreateBrick(13, 6, 6, 2, SEL_DONT_CARE); selSetElement(sel, 0, 3, SEL_MISS); selSetElement(sel, 0, 5, SEL_HIT); selSetElement(sel, 4, 2, SEL_MISS); selSetElement(sel, 4, 4, SEL_HIT); selSetElement(sel, 8, 1, SEL_MISS); selSetElement(sel, 8, 3, SEL_HIT); selSetElement(sel, 12, 0, SEL_MISS); selSetElement(sel, 12, 2, SEL_HIT); selaAddSel(sela, sel, "sel_sl1", 0); /*--------------------------------------------------------------* * Corners * * This allows for up to 3 missing edge pixels at the corner * *--------------------------------------------------------------*/ sel = selCreateBrick(4, 4, 1, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 1, 3, SEL_HIT); selSetElement(sel, 2, 2, SEL_HIT); selSetElement(sel, 2, 3, SEL_HIT); selSetElement(sel, 3, 1, SEL_HIT); selSetElement(sel, 3, 2, SEL_HIT); selSetElement(sel, 3, 3, SEL_HIT); selaAddSel(sela, sel, "sel_ulc", 0); sel = selCreateBrick(4, 4, 1, 2, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 1, 0, SEL_HIT); selSetElement(sel, 2, 0, SEL_HIT); selSetElement(sel, 2, 1, SEL_HIT); selSetElement(sel, 3, 0, SEL_HIT); selSetElement(sel, 3, 1, SEL_HIT); selSetElement(sel, 3, 2, SEL_HIT); selaAddSel(sela, sel, "sel_urc", 0); sel = selCreateBrick(4, 4, 2, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 0, 1, SEL_HIT); selSetElement(sel, 0, 2, SEL_HIT); selSetElement(sel, 0, 3, SEL_HIT); selSetElement(sel, 1, 2, SEL_HIT); selSetElement(sel, 1, 3, SEL_HIT); selSetElement(sel, 2, 3, SEL_HIT); selaAddSel(sela, sel, "sel_llc", 0); sel = selCreateBrick(4, 4, 2, 2, SEL_MISS); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 0, 0, SEL_HIT); selSetElement(sel, 0, 1, SEL_HIT); selSetElement(sel, 0, 2, SEL_HIT); selSetElement(sel, 1, 0, SEL_HIT); selSetElement(sel, 1, 1, SEL_HIT); selSetElement(sel, 2, 0, SEL_HIT); selaAddSel(sela, sel, "sel_lrc", 0); return sela; } /* ------------------------------------------------------------------- * * Structuring elements for comparing with DWA operations * * ------------------------------------------------------------------- */ /*! * \brief selaAddDwaLinear() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds all linear (horizontal, vertical) sels from
 *          2 to 63 pixels in length, which are the sizes over
 *          which dwa code can be generated.
 * 
*/ SELA * selaAddDwaLinear(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i; SEL *sel; if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } for (i = 2; i < 64; i++) { sel = selCreateBrick(1, i, 0, i / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%dh", i); selaAddSel(sela, sel, name, 0); } for (i = 2; i < 64; i++) { sel = selCreateBrick(i, 1, i / 2, 0, 1); snprintf(name, L_BUF_SIZE, "sel_%dv", i); selaAddSel(sela, sel, name, 0); } return sela; } /*! * \brief selaAddDwaCombs() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds all comb (horizontal, vertical) Sels that are
 *          used in composite linear morphological operations
 *          up to 63 pixels in length, which are the sizes over
 *          which dwa code can be generated.
 * 
*/ SELA * selaAddDwaCombs(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i, f1, f2, prevsize, size; SEL *selh, *selv; if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } prevsize = 0; for (i = 4; i < 64; i++) { selectComposableSizes(i, &f1, &f2); size = f1 * f2; if (size == prevsize) continue; selectComposableSels(i, L_HORIZ, NULL, &selh); if (selh) { snprintf(name, L_BUF_SIZE, "sel_comb_%dh", size); selaAddSel(sela, selh, name, 0); } else { L_ERROR("selh not made for i = %d\n", __func__, i); } selectComposableSels(i, L_VERT, NULL, &selv); if (selv) { snprintf(name, L_BUF_SIZE, "sel_comb_%dv", size); selaAddSel(sela, selv, name, 0); } else { L_ERROR("selv not made for i = %d\n", __func__, i); } prevsize = size; } return sela; } /* ------------------------------------------------------------------- * * Structuring elements for the intersection of lines * * ------------------------------------------------------------------- */ /*! * \brief selaAddCrossJunctions() * * \param[in] sela [optional] * \param[in] hlsize length of each line of hits from origin * \param[in] mdist distance of misses from the origin * \param[in] norient number of orientations; max of 8 * \param[in] debugflag 1 for debug output * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds hitmiss Sels for the intersection of two lines.
 *          If the lines are very thin, they must be nearly orthogonal
 *          to register.
 *      (2) The number of Sels generated is equal to %norient.
 *      (3) If %norient == 2, this generates 2 Sels of crosses, each with
 *          two perpendicular lines of hits.  One Sel has horizontal and
 *          vertical hits; the other has hits along lines at +-45 degrees.
 *          Likewise, if %norient == 3, this generates 3 Sels of crosses
 *          oriented at 30 degrees with each other.
 *      (4) It is suggested that %hlsize be chosen at least 1 greater
 *          than %mdist.  Try values of (%hlsize, %mdist) such as
 *          (6,5), (7,6), (8,7), (9,7), etc.
 * 
*/ SELA * selaAddCrossJunctions(SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag) { char name[L_BUF_SIZE]; l_int32 i, j, w, xc, yc; l_float64 pi, halfpi, radincr, radang; l_float64 angle; PIX *pixc, *pixm, *pixt; PIXA *pixa; PTA *pta1, *pta2, *pta3, *pta4; SEL *sel; if (hlsize <= 0) return (SELA *)ERROR_PTR("hlsize not > 0", __func__, NULL); if (norient < 1 || norient > 8) return (SELA *)ERROR_PTR("norient not in [1, ... 8]", __func__, NULL); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } pi = 3.1415926535; halfpi = 3.1415926535 / 2.0; radincr = halfpi / (l_float64)norient; w = (l_int32)(2.2 * (L_MAX(hlsize, mdist) + 0.5)); if (w % 2 == 0) w++; xc = w / 2; yc = w / 2; pixa = pixaCreate(norient); for (i = 0; i < norient; i++) { /* Set the don't cares */ pixc = pixCreate(w, w, 32); pixSetAll(pixc); /* Add the green lines of hits */ pixm = pixCreate(w, w, 1); radang = (l_float32)i * radincr; pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang); pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + halfpi); pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi); pta4 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi + halfpi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); ptaJoin(pta1, pta4, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); ptaDestroy(&pta4); /* Add red misses between the lines */ for (j = 0; j < 4; j++) { angle = radang + (j - 0.5) * halfpi; pixSetPixel(pixc, xc + (l_int32)(mdist * cos(angle)), yc + (l_int32)(mdist * sin(angle)), 0xff000000); } /* Add dark green for origin */ pixSetPixel(pixc, xc, yc, 0x00550000); /* Generate the sel */ sel = selCreateFromColorPix(pixc, NULL); snprintf(name, sizeof(name), "sel_cross_%d", i); selaAddSel(sela, sel, name, 0); if (debugflag) { pixt = pixScaleBySampling(pixc, 10.0, 10.0); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pixm); pixDestroy(&pixc); } if (debugflag) { l_int32 w; lept_mkdir("lept/sel"); pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 1, 0, 10, 2); pixWriteDebug("/tmp/lept/sel/xsel1.png", pixt, IFF_PNG); pixDisplay(pixt, 0, 100); pixDestroy(&pixt); pixt = selaDisplayInPix(sela, 15, 2, 20, 1); pixWriteDebug("/tmp/lept/sel/xsel2.png", pixt, IFF_PNG); pixDisplay(pixt, 500, 100); pixDestroy(&pixt); selaWriteStream(stderr, sela); } pixaDestroy(&pixa); return sela; } /*! * \brief selaAddTJunctions() * * \param[in] sela [optional] * \param[in] hlsize length of each line of hits from origin * \param[in] mdist distance of misses from the origin * \param[in] norient number of orientations; max of 8 * \param[in] debugflag 1 for debug output * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds hitmiss Sels for the T-junction of two lines.
 *          If the lines are very thin, they must be nearly orthogonal
 *          to register.
 *      (2) The number of Sels generated is 4 * %norient.
 *      (3) It is suggested that %hlsize be chosen at least 1 greater
 *          than %mdist.  Try values of (%hlsize, %mdist) such as
 *          (6,5), (7,6), (8,7), (9,7), etc.
 * 
*/ SELA * selaAddTJunctions(SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag) { char name[L_BUF_SIZE]; l_int32 i, j, k, w, xc, yc; l_float64 pi, halfpi, radincr, jang, radang; l_float64 angle[3], dist[3]; PIX *pixc, *pixm, *pixt; PIXA *pixa; PTA *pta1, *pta2, *pta3; SEL *sel; if (hlsize <= 2) return (SELA *)ERROR_PTR("hlsizel not > 1", __func__, NULL); if (norient < 1 || norient > 8) return (SELA *)ERROR_PTR("norient not in [1, ... 8]", __func__, NULL); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", __func__, NULL); } pi = 3.1415926535; halfpi = 3.1415926535 / 2.0; radincr = halfpi / (l_float32)norient; w = (l_int32)(2.4 * (L_MAX(hlsize, mdist) + 0.5)); if (w % 2 == 0) w++; xc = w / 2; yc = w / 2; pixa = pixaCreate(4 * norient); for (i = 0; i < norient; i++) { for (j = 0; j < 4; j++) { /* 4 orthogonal orientations */ jang = (l_float32)j * halfpi; /* Set the don't cares */ pixc = pixCreate(w, w, 32); pixSetAll(pixc); /* Add the green lines of hits */ pixm = pixCreate(w, w, 1); radang = (l_float32)i * radincr; pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang); pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang + halfpi); pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang + pi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); /* Add red misses between the lines */ angle[0] = radang + jang - halfpi; angle[1] = radang + jang + 0.5 * halfpi; angle[2] = radang + jang + 1.5 * halfpi; dist[0] = 0.8 * mdist; dist[1] = dist[2] = mdist; for (k = 0; k < 3; k++) { pixSetPixel(pixc, xc + (l_int32)(dist[k] * cos(angle[k])), yc + (l_int32)(dist[k] * sin(angle[k])), 0xff000000); } /* Add dark green for origin */ pixSetPixel(pixc, xc, yc, 0x00550000); /* Generate the sel */ sel = selCreateFromColorPix(pixc, NULL); snprintf(name, sizeof(name), "sel_cross_%d", 4 * i + j); selaAddSel(sela, sel, name, 0); if (debugflag) { pixt = pixScaleBySampling(pixc, 10.0, 10.0); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pixm); pixDestroy(&pixc); } } if (debugflag) { l_int32 w; lept_mkdir("lept/sel"); pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 4, 0, 10, 2); pixWriteDebug("/tmp/lept/sel/tsel1.png", pixt, IFF_PNG); pixDisplay(pixt, 0, 100); pixDestroy(&pixt); pixt = selaDisplayInPix(sela, 15, 2, 20, 4); pixWriteDebug("/tmp/lept/sel/tsel2.png", pixt, IFF_PNG); pixDisplay(pixt, 500, 100); pixDestroy(&pixt); selaWriteStream(stderr, sela); } pixaDestroy(&pixa); return sela; } /* -------------------------------------------------------------------------- * * Structuring elements for connectivity-preserving thinning operations * * -------------------------------------------------------------------------- */ /* ------------------------------------------------------------ * These sels (and their rotated counterparts) are the useful * 3x3 Sels for thinning. The notation is based on * "Connectivity-preserving morphological image transformations," * a version of which can be found at * http://www.leptonica.com/papers/conn.pdf * ------------------------------------------------------------ */ /* Sels for 4-connected thinning */ static const char *sel_4_1 = " x" "oCx" " x"; static const char *sel_4_2 = " x" "oCx" " o "; static const char *sel_4_3 = " o " "oCx" " x"; static const char *sel_4_4 = " o " "oCx" " o "; static const char *sel_4_5 = " ox" "oCx" " o "; static const char *sel_4_6 = " o " "oCx" " ox"; static const char *sel_4_7 = " xx" "oCx" " o "; static const char *sel_4_8 = " x" "oCx" "o x"; static const char *sel_4_9 = "o x" "oCx" " x"; /* Sels for 8-connected thinning */ static const char *sel_8_1 = " x " "oCx" " x "; static const char *sel_8_2 = " x " "oCx" "o "; static const char *sel_8_3 = "o " "oCx" " x "; static const char *sel_8_4 = "o " "oCx" "o "; static const char *sel_8_5 = "o x" "oCx" "o "; static const char *sel_8_6 = "o " "oCx" "o x"; static const char *sel_8_7 = " x " "oCx" "oo "; static const char *sel_8_8 = " x " "oCx" "ox "; static const char *sel_8_9 = "ox " "oCx" " x "; /* Sels for both 4 and 8-connected thinning */ static const char *sel_48_1 = " xx" "oCx" "oo "; static const char *sel_48_2 = "o x" "oCx" "o x"; /*! * \brief sela4ccThin() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds the 9 basic sels for 4-cc thinning.
 * 
*/ SELA * sela4ccThin(SELA *sela) { SEL *sel; if (!sela) sela = selaCreate(9); sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_4, 3, 3, "sel_4_4"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_5, 3, 3, "sel_4_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_6, 3, 3, "sel_4_6"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_7, 3, 3, "sel_4_7"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_8, 3, 3, "sel_4_8"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_9, 3, 3, "sel_4_9"); selaAddSel(sela, sel, NULL, 0); return sela; } /*! * \brief sela8ccThin() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds the 9 basic sels for 8-cc thinning.
 * 
*/ SELA * sela8ccThin(SELA *sela) { SEL *sel; if (!sela) sela = selaCreate(9); sel = selCreateFromString(sel_8_1, 3, 3, "sel_8_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_4, 3, 3, "sel_8_4"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_7, 3, 3, "sel_8_7"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_8, 3, 3, "sel_8_8"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_9, 3, 3, "sel_8_9"); selaAddSel(sela, sel, NULL, 0); return sela; } /*! * \brief sela4and8ccThin() * * \param[in] sela [optional] * \return sela with additional sels, or NULL on error * *
 * Notes:
 *      (1) Adds the 2 basic sels for either 4-cc or 8-cc thinning.
 * 
*/ SELA * sela4and8ccThin(SELA *sela) { SEL *sel; if (!sela) sela = selaCreate(2); sel = selCreateFromString(sel_48_1, 3, 3, "sel_48_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2"); selaAddSel(sela, sel, NULL, 0); return sela; } /* -------------------------------------------------------------------------- * * Other structuring elements * * -------------------------------------------------------------------------- */ /*! * \brief selMakePlusSign() * * \param[in] size side of containing square * \param[in] linewidth of lines * \return sel, or NULL on error * *
 * Notes:
 *      (1) Useful for debugging to show location of selected pixels.
 *      (2) See displaySelectedPixels() for an example of use.
 * 
*/ SEL * selMakePlusSign(l_int32 size, l_int32 linewidth) { PIX *pix; SEL *sel; if (size < 3 || linewidth > size) return (SEL *)ERROR_PTR("invalid input", __func__, NULL); pix = pixCreate(size, size, 1); pixRenderLine(pix, size / 2, 0, size / 2, size - 1, linewidth, L_SET_PIXELS); pixRenderLine(pix, 0, size / 2, size, size / 2, linewidth, L_SET_PIXELS); sel = selCreateFromPix(pix, size / 2, size / 2, "plus_sign"); pixDestroy(&pix); return sel; } leptonica-1.86.0/src/selgen.c000066400000000000000000001065401506303110300157720ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file selgen.c *
 *
 *      This file contains functions that generate hit-miss Sels
 *      for doing a loose match to a small bitmap.  The hit-miss
 *      Sel is made from a given bitmap.  Several "knobs"
 *      are available to control the looseness of the match.
 *      In general, a tight match will have fewer false positives
 *      (bad matches) but more false negatives (missed patterns).
 *      The values to be used depend on the quality and variation
 *      of the image in which the pattern is to be searched,
 *      and the relative penalties of false positives and
 *      false negatives.  Default values for the three knobs --
 *      minimum distance to boundary pixels, number of extra pixels
 *      added to selected sides, and minimum acceptable runlength
 *      in eroded version -- are provided.
 *
 *      The generated hit-miss Sels can always be used in the
 *      rasterop implementation of binary morphology (in morph.h).
 *      If they are small enough (not more than 31 pixels extending
 *      in any direction from the Sel origin), they can also be used
 *      to auto-generate dwa code (fmorphauto.c).
 *
 *      In production, use pixGenerateSelBoundary().
 *
 *      Generate a subsampled structuring element
 *            SEL     *pixGenerateSelBoundary()
 *            SEL     *pixGenerateSelWithRuns()
 *            SEL     *pixGenerateSelRandom()
 *
 *      Accumulate data on runs along lines
 *            NUMA    *pixGetRunCentersOnLine()
 *            NUMA    *pixGetRunsOnLine()
 *
 *      Subsample boundary pixels in relatively ordered way
 *            PTA     *pixSubsampleBoundaryPixels()
 *            PTA     *adjacentOnPixelInRaster()
 *
 *      Display generated sel with originating image
 *            PIX     *pixDisplayHitMissSel()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Default minimum distance of a hit-miss pixel element to * a boundary pixel of its color. */ static const l_int32 DefaultDistanceToBoundary = 1; static const l_int32 MaxDistanceToBoundary = 4; /* Default min runlength to accept a hit or miss element located * at its center */ static const l_int32 DefaultMinRunlength = 3; /* Default scalefactor for displaying image and hit-miss sel * that is derived from it */ static const l_int32 DefaultSelScalefactor = 7; static const l_int32 MaxSelScalefactor = 31; /* should be big enough */ #ifndef NO_CONSOLE_IO #define DEBUG_DISPLAY_HM_SEL 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------* * Generate a subsampled structuring element * *-----------------------------------------------------------------*/ /*! * \brief pixGenerateSelBoundary() * * \param[in] pixs 1 bpp, typically small, to be used as a pattern * \param[in] hitdist min distance from fg boundary pixel * \param[in] missdist min distance from bg boundary pixel * \param[in] hitskip number of boundary pixels skipped between hits * \param[in] missskip number of boundary pixels skipped between misses * \param[in] topflag flag for extra pixels of bg added above * \param[in] botflag flag for extra pixels of bg added below * \param[in] leftflag flag for extra pixels of bg added to left * \param[in] rightflag flag for extra pixels of bg added to right * \param[out] ppixe [optional] input pix expanded by extra pixels * \return sel hit-miss for input pattern, or NULL on error * *
 * Notes:
 *    (1) All fg elements selected are exactly hitdist pixels away from
 *        the nearest fg boundary pixel, and ditto for bg elements.
 *        Valid inputs of hitdist and missdist are 0, 1, 2, 3 and 4.
 *        For example, a hitdist of 0 puts the hits at the fg boundary.
 *        Usually, the distances should be > 0 avoid the effect of
 *        noise at the boundary.
 *    (2) Set hitskip < 0 if no hits are to be used.  Ditto for missskip.
 *        If both hitskip and missskip are < 0, the sel would be empty,
 *        and NULL is returned.
 *    (3) The 4 flags determine whether the sel is increased on that side
 *        to allow bg misses to be placed all along that boundary.
 *        The increase in sel size on that side is the minimum necessary
 *        to allow the misses to be placed at mindist.  For text characters,
 *        the topflag and botflag are typically set to 1, and the leftflag
 *        and rightflag to 0.
 *    (4) The input pix, as extended by the extra pixels on selected sides,
 *        can optionally be returned.  For debugging, call
 *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
 *        on the generating bitmap.
 *    (5) This is the best of the three sel generators: it gives the most
 *        flexibility with the smallest number of hits and misses.
 *        The other two generators are presented as examples of other
 *        approaches, but they should not be used in production.
 * 
*/ SEL * pixGenerateSelBoundary(PIX *pixs, l_int32 hitdist, l_int32 missdist, l_int32 hitskip, l_int32 missskip, l_int32 topflag, l_int32 botflag, l_int32 leftflag, l_int32 rightflag, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, ix, iy, i, npt; PIX *pixt1, *pixt2, *pixt3, *pixfg, *pixbg; SEL *selh, *selm, *sel_3, *sel; PTA *ptah = NULL, *ptam = NULL; if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (hitdist < 0 || hitdist > 4 || missdist < 0 || missdist > 4) return (SEL *)ERROR_PTR("dist not in {0 .. 4}", __func__, NULL); if (hitskip < 0 && missskip < 0) return (SEL *)ERROR_PTR("no hits or misses", __func__, NULL); /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", __func__, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (topflag || botflag || leftflag || rightflag) { x = y = 0; if (topflag) { h += missdist + 1; y = missdist + 1; } if (botflag) h += missdist + 1; if (leftflag) { w += missdist + 1; x = missdist + 1; } if (rightflag) w += missdist + 1; pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are exactly hitdist and * missdist (rsp) away from the boundary pixels in their set. * Then get a subsampled set of these points. */ sel_3 = selCreateBrick(3, 3, 1, 1, SEL_HIT); if (hitskip >= 0) { selh = selCreateBrick(2 * hitdist + 1, 2 * hitdist + 1, hitdist, hitdist, SEL_HIT); pixt3 = pixErode(NULL, pixt2, selh); pixfg = pixErode(NULL, pixt3, sel_3); pixXor(pixfg, pixfg, pixt3); ptah = pixSubsampleBoundaryPixels(pixfg, hitskip); pixDestroy(&pixt3); pixDestroy(&pixfg); selDestroy(&selh); } if (missskip >= 0) { selm = selCreateBrick(2 * missdist + 1, 2 * missdist + 1, missdist, missdist, SEL_HIT); pixt3 = pixDilate(NULL, pixt2, selm); pixbg = pixDilate(NULL, pixt3, sel_3); pixXor(pixbg, pixbg, pixt3); ptam = pixSubsampleBoundaryPixels(pixbg, missskip); pixDestroy(&pixt3); pixDestroy(&pixbg); selDestroy(&selm); } selDestroy(&sel_3); pixDestroy(&pixt2); /* Generate the hit-miss sel from these point */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); if (hitskip >= 0) { npt = ptaGetCount(ptah); for (i = 0; i < npt; i++) { ptaGetIPt(ptah, i, &ix, &iy); selSetElement(sel, iy, ix, SEL_HIT); } } if (missskip >= 0) { npt = ptaGetCount(ptam); for (i = 0; i < npt; i++) { ptaGetIPt(ptam, i, &ix, &iy); selSetElement(sel, iy, ix, SEL_MISS); } } ptaDestroy(&ptah); ptaDestroy(&ptam); return sel; } /*! * \brief pixGenerateSelWithRuns() * * \param[in] pixs 1 bpp, typically small, to be used as a pattern * \param[in] nhlines number of hor lines along which elements are found * \param[in] nvlines number of vert lines along which elements are found * \param[in] distance min distance from boundary pixel; use 0 for default * \param[in] minlength min runlength to set hit or miss; use 0 for default * \param[in] toppix number of extra pixels of bg added above * \param[in] botpix number of extra pixels of bg added below * \param[in] leftpix number of extra pixels of bg added to left * \param[in] rightpix number of extra pixels of bg added to right * \param[out] ppixe [optional] input pix expanded by extra pixels * \return sel hit-miss for input pattern, or NULL on error * *
 * Notes:
 *    (1) The horizontal and vertical lines along which elements are
 *        selected are roughly equally spaced.  The actual locations of
 *        the hits and misses are the centers of respective run-lengths.
 *    (2) No elements are selected that are less than 'distance' pixels away
 *        from a boundary pixel of the same color.  This makes the
 *        match much more robust to edge noise.  Valid inputs of
 *        'distance' are 0, 1, 2, 3 and 4.  If distance is either 0 or
 *        greater than 4, we reset it to the default value.
 *    (3) The 4 numbers for adding rectangles of pixels outside the fg
 *        can be use if the pattern is expected to be surrounded by bg
 *        (white) pixels.  On the other hand, if the pattern may be near
 *        other fg (black) components on some sides, use 0 for those sides.
 *    (4) The pixels added to a side allow you to have miss elements there.
 *        There is a constraint between distance, minlength, and
 *        the added pixels for this to work.  We illustrate using the
 *        default values.  If you add 5 pixels to the top, and use a
 *        distance of 1, then you end up with a vertical run of at least
 *        4 bg pixels along the top edge of the image.  If you use a
 *        minimum runlength of 3, each vertical line will always find
 *        a miss near the center of its run.  However, if you use a
 *        minimum runlength of 5, you will not get a miss on every vertical
 *        line.  As another example, if you have 7 added pixels and a
 *        distance of 2, you can use a runlength up to 5 to guarantee
 *        that the miss element is recorded.  We give a warning if the
 *        constraint does not guarantee a miss element outside the
 *        image proper.
 *    (5) The input pix, as extended by the extra pixels on selected sides,
 *        can optionally be returned.  For debugging, call
 *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
 *        on the generating bitmap.
 *    (6) This method is inferior to the boundary method.
 * 
*/ SEL * pixGenerateSelWithRuns(PIX *pixs, l_int32 nhlines, l_int32 nvlines, l_int32 distance, l_int32 minlength, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, xval, yval, i, j, nh, nm; l_float32 delh, delw; NUMA *nah, *nam; PIX *pixt1, *pixt2, *pixfg, *pixbg; PTA *ptah, *ptam; SEL *seld, *sel; if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (nhlines < 1 && nvlines < 1) return (SEL *)ERROR_PTR("nvlines and nhlines both < 1", __func__, NULL); if (distance <= 0) distance = DefaultDistanceToBoundary; if (minlength <= 0) minlength = DefaultMinRunlength; if (distance > MaxDistanceToBoundary) { L_WARNING("distance too large; setting to max value\n", __func__); distance = MaxDistanceToBoundary; } /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", __func__, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (toppix || botpix || leftpix || rightpix) { x = y = 0; if (toppix) { h += toppix; y = toppix; if (toppix < distance + minlength) L_WARNING("no miss elements in added top pixels\n", __func__); } if (botpix) { h += botpix; if (botpix < distance + minlength) L_WARNING("no miss elements in added bot pixels\n", __func__); } if (leftpix) { w += leftpix; x = leftpix; if (leftpix < distance + minlength) L_WARNING("no miss elements in added left pixels\n", __func__); } if (rightpix) { w += rightpix; if (rightpix < distance + minlength) L_WARNING("no miss elements in added right pixels\n", __func__); } pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are at least 'distance' pixels * away from the boundary pixels in their set */ seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, distance, distance, SEL_HIT); pixfg = pixErode(NULL, pixt2, seld); pixbg = pixDilate(NULL, pixt2, seld); pixInvert(pixbg, pixbg); selDestroy(&seld); pixDestroy(&pixt2); /* Accumulate hit and miss points */ ptah = ptaCreate(0); ptam = ptaCreate(0); if (nhlines >= 1) { delh = (l_float32)h / (l_float32)(nhlines + 1); for (i = 0, y = 0; i < nhlines; i++) { y += (l_int32)(delh + 0.5); nah = pixGetRunCentersOnLine(pixfg, -1, y, minlength); nam = pixGetRunCentersOnLine(pixbg, -1, y, minlength); nh = numaGetCount(nah); nm = numaGetCount(nam); for (j = 0; j < nh; j++) { numaGetIValue(nah, j, &xval); ptaAddPt(ptah, xval, y); } for (j = 0; j < nm; j++) { numaGetIValue(nam, j, &xval); ptaAddPt(ptam, xval, y); } numaDestroy(&nah); numaDestroy(&nam); } } if (nvlines >= 1) { delw = (l_float32)w / (l_float32)(nvlines + 1); for (i = 0, x = 0; i < nvlines; i++) { x += (l_int32)(delw + 0.5); nah = pixGetRunCentersOnLine(pixfg, x, -1, minlength); nam = pixGetRunCentersOnLine(pixbg, x, -1, minlength); nh = numaGetCount(nah); nm = numaGetCount(nam); for (j = 0; j < nh; j++) { numaGetIValue(nah, j, &yval); ptaAddPt(ptah, x, yval); } for (j = 0; j < nm; j++) { numaGetIValue(nam, j, &yval); ptaAddPt(ptam, x, yval); } numaDestroy(&nah); numaDestroy(&nam); } } /* Make the Sel with those points */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); nh = ptaGetCount(ptah); for (i = 0; i < nh; i++) { ptaGetIPt(ptah, i, &x, &y); selSetElement(sel, y, x, SEL_HIT); } nm = ptaGetCount(ptam); for (i = 0; i < nm; i++) { ptaGetIPt(ptam, i, &x, &y); selSetElement(sel, y, x, SEL_MISS); } pixDestroy(&pixfg); pixDestroy(&pixbg); ptaDestroy(&ptah); ptaDestroy(&ptam); return sel; } /*! * \brief pixGenerateSelRandom() * * \param[in] pixs 1 bpp, typically small, to be used as a pattern * \param[in] hitfract fraction of allowable fg pixels that are hits * \param[in] missfract fraction of allowable bg pixels that are misses * \param[in] distance min distance from boundary pixel; use 0 for default * \param[in] toppix number of extra pixels of bg added above * \param[in] botpix number of extra pixels of bg added below * \param[in] leftpix number of extra pixels of bg added to left * \param[in] rightpix number of extra pixels of bg added to right * \param[out] ppixe [optional] input pix expanded by extra pixels * \return sel hit-miss for input pattern, or NULL on error * *
 * Notes:
 *    (1) Either of hitfract and missfract can be zero.  If both are zero,
 *        the sel would be empty, and NULL is returned.
 *    (2) No elements are selected that are less than 'distance' pixels away
 *        from a boundary pixel of the same color.  This makes the
 *        match much more robust to edge noise.  Valid inputs of
 *        'distance' are 0, 1, 2, 3 and 4.  If distance is either 0 or
 *        greater than 4, we reset it to the default value.
 *    (3) The 4 numbers for adding rectangles of pixels outside the fg
 *        can be use if the pattern is expected to be surrounded by bg
 *        (white) pixels.  On the other hand, if the pattern may be near
 *        other fg (black) components on some sides, use 0 for those sides.
 *    (4) The input pix, as extended by the extra pixels on selected sides,
 *        can optionally be returned.  For debugging, call
 *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
 *        on the generating bitmap.
 *    (5) This method is inferior to both the boundary and run based methods.
 * 
*/ SEL * pixGenerateSelRandom(PIX *pixs, l_float32 hitfract, l_float32 missfract, l_int32 distance, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, i, j, thresh; l_uint32 val; PIX *pixt1, *pixt2, *pixfg, *pixbg; SEL *seld, *sel; if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (hitfract <= 0.0 && missfract <= 0.0) return (SEL *)ERROR_PTR("no hits or misses", __func__, NULL); if (hitfract > 1.0 || missfract > 1.0) return (SEL *)ERROR_PTR("fraction can't be > 1.0", __func__, NULL); if (distance <= 0) distance = DefaultDistanceToBoundary; if (distance > MaxDistanceToBoundary) { L_WARNING("distance too large; setting to max value\n", __func__); distance = MaxDistanceToBoundary; } /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", __func__, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (toppix || botpix || leftpix || rightpix) { x = y = 0; if (toppix) { h += toppix; y = toppix; } if (botpix) h += botpix; if (leftpix) { w += leftpix; x = leftpix; } if (rightpix) w += rightpix; pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are at least 'distance' pixels * away from the boundary pixels in their set */ seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, distance, distance, SEL_HIT); pixfg = pixErode(NULL, pixt2, seld); pixbg = pixDilate(NULL, pixt2, seld); pixInvert(pixbg, pixbg); selDestroy(&seld); pixDestroy(&pixt2); /* Generate the sel from a random selection of these points */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); if (hitfract > 0.0) { thresh = (l_int32)(hitfract * (l_float64)RAND_MAX); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixfg, j, i, &val); if (val) { if (rand() < thresh) selSetElement(sel, i, j, SEL_HIT); } } } } if (missfract > 0.0) { thresh = (l_int32)(missfract * (l_float64)RAND_MAX); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixbg, j, i, &val); if (val) { if (rand() < thresh) selSetElement(sel, i, j, SEL_MISS); } } } } pixDestroy(&pixfg); pixDestroy(&pixbg); return sel; } /*-----------------------------------------------------------------* * Accumulate data on runs along lines * *-----------------------------------------------------------------*/ /*! * \brief pixGetRunCentersOnLine() * * \param[in] pixs 1 bpp * \param[in] x, y set one of these to -1; see notes * \param[in] minlength minimum length of acceptable run * \return numa of fg runs, or NULL on error * *
 * Notes:
 *      (1) Action: this function computes the fg (black) and bg (white)
 *          pixel runlengths along the specified horizontal or vertical line,
 *          and returns a Numa of the "center" pixels of each fg run
 *          whose length equals or exceeds the minimum length.
 *      (2) This only works on horizontal and vertical lines.
 *      (3) For horizontal runs, set x = -1 and y to the value
 *          for all points along the raster line.  For vertical runs,
 *          set y = -1 and x to the value for all points along the
 *          pixel column.
 *      (4) For horizontal runs, the points in the Numa are the x
 *          values in the center of fg runs that are of length at
 *          least 'minlength'.  For vertical runs, the points in the
 *          Numa are the y values in the center of fg runs, again
 *          of length 'minlength' or greater.
 *      (5) If there are no fg runs along the line that satisfy the
 *          minlength constraint, the returned Numa is empty.  This
 *          is not an error.
 * 
*/ NUMA * pixGetRunCentersOnLine(PIX *pixs, l_int32 x, l_int32 y, l_int32 minlength) { l_int32 w, h, i, r, nruns, len; NUMA *naruns, *nad; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (x != -1 && y != -1) return (NUMA *)ERROR_PTR("x or y must be -1", __func__, NULL); if (x == -1 && y == -1) return (NUMA *)ERROR_PTR("x or y cannot both be -1", __func__, NULL); if ((nad = numaCreate(0)) == NULL) return (NUMA *)ERROR_PTR("nad not made", __func__, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if (x == -1) { /* horizontal run */ if (y < 0 || y >= h) return nad; naruns = pixGetRunsOnLine(pixs, 0, y, w - 1, y); } else { /* vertical run */ if (x < 0 || x >= w) return nad; naruns = pixGetRunsOnLine(pixs, x, 0, x, h - 1); } nruns = numaGetCount(naruns); /* extract run center values; the first run is always bg */ r = 0; /* cumulative distance along line */ for (i = 0; i < nruns; i++) { if (i % 2 == 0) { /* bg run */ numaGetIValue(naruns, i, &len); r += len; continue; } else { numaGetIValue(naruns, i, &len); if (len >= minlength) numaAddNumber(nad, r + len / 2); r += len; } } numaDestroy(&naruns); return nad; } /*! * \brief pixGetRunsOnLine() * * \param[in] pixs 1 bpp * \param[in] x1, y1, x2, y2 * \return numa, or NULL on error * *
 * Notes:
 *      (1) Action: this function uses the bresenham algorithm to compute
 *          the pixels along the specified line.  It returns a Numa of the
 *          runlengths of the fg (black) and bg (white) runs, always
 *          starting with a white run.
 *      (2) If the first pixel on the line is black, the length of the
 *          first returned run (which is white) is 0.
 * 
*/ NUMA * pixGetRunsOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2) { l_int32 w, h, x, y, npts; l_int32 i, runlen, preval; l_uint32 val; NUMA *numa; PTA *pta; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if (x1 < 0 || x1 >= w) return (NUMA *)ERROR_PTR("x1 not valid", __func__, NULL); if (x2 < 0 || x2 >= w) return (NUMA *)ERROR_PTR("x2 not valid", __func__, NULL); if (y1 < 0 || y1 >= h) return (NUMA *)ERROR_PTR("y1 not valid", __func__, NULL); if (y2 < 0 || y2 >= h) return (NUMA *)ERROR_PTR("y2 not valid", __func__, NULL); if ((pta = generatePtaLine(x1, y1, x2, y2)) == NULL) return (NUMA *)ERROR_PTR("pta not made", __func__, NULL); if ((npts = ptaGetCount(pta)) == 0) { ptaDestroy(&pta); return (NUMA *)ERROR_PTR("pta has no pts", __func__, NULL); } if ((numa = numaCreate(0)) == NULL) { ptaDestroy(&pta); return (NUMA *)ERROR_PTR("numa not made", __func__, NULL); } for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); pixGetPixel(pixs, x, y, &val); if (i == 0) { if (val == 1) { /* black pixel; append white run of size 0 */ numaAddNumber(numa, 0); } preval = val; runlen = 1; continue; } if (val == preval) { /* extend current run */ preval = val; runlen++; } else { /* end previous run */ numaAddNumber(numa, runlen); preval = val; runlen = 1; } } numaAddNumber(numa, runlen); /* append last run */ ptaDestroy(&pta); return numa; } /*-----------------------------------------------------------------* * Subsample boundary pixels in relatively ordered way * *-----------------------------------------------------------------*/ /*! * \brief pixSubsampleBoundaryPixels() * * \param[in] pixs 1 bpp, with only boundary pixels in fg * \param[in] skip number to skip between samples as you traverse boundary * \return pta, or NULL on error * *
 * Notes:
 *      (1) If skip = 0, we take all the fg pixels.
 *      (2) We try to traverse the boundaries in a regular way.
 *          Some pixels may be missed, and these are then subsampled
 *          randomly with a fraction determined by 'skip'.
 *      (3) The most natural approach is to use a depth first (stack-based)
 *          method to find the fg pixels.  However, the pixel runs are
 *          4-connected and there are relatively few branches.  So
 *          instead of doing a proper depth-first search, we get nearly
 *          the same result using two nested while loops: the outer
 *          one continues a raster-based search for the next fg pixel,
 *          and the inner one does a reasonable job running along
 *          each 4-connected coutour.
 * 
*/ PTA * pixSubsampleBoundaryPixels(PIX *pixs, l_int32 skip) { l_int32 x, y, xn, yn, xs, ys, xa, ya, count; PIX *pixt; PTA *pta; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (skip < 0) return (PTA *)ERROR_PTR("skip < 0", __func__, NULL); if (skip == 0) return ptaGetPixelsFromPix(pixs, NULL); pta = ptaCreate(0); pixt = pixCopy(NULL, pixs); xs = ys = 0; while (nextOnPixelInRaster(pixt, xs, ys, &xn, &yn)) { /* new series */ xs = xn; ys = yn; /* Add first point in this series */ ptaAddPt(pta, xs, ys); /* Trace out boundary, erasing all and saving every (skip + 1)th */ x = xs; y = ys; pixSetPixel(pixt, x, y, 0); count = 0; while (adjacentOnPixelInRaster(pixt, x, y, &xa, &ya)) { x = xa; y = ya; pixSetPixel(pixt, x, y, 0); if (count == skip) { ptaAddPt(pta, x, y); count = 0; } else { count++; } } } pixDestroy(&pixt); return pta; } /*! * \brief adjacentOnPixelInRaster() * * \param[in] pixs 1 bpp * \param[in] x, y current pixel * \param[out] pxa, pya adjacent ON pixel, found by simple CCW search * \return 1 if a pixel is found; 0 otherwise or on error * *
 * Notes:
 *      (1) Search is in 4-connected directions first; then on diagonals.
 *          This allows traversal along a 4-connected boundary.
 * 
*/ l_int32 adjacentOnPixelInRaster(PIX *pixs, l_int32 x, l_int32 y, l_int32 *pxa, l_int32 *pya) { l_int32 w, h, i, xa, ya, found; l_int32 xdel[] = {-1, 0, 1, 0, -1, 1, 1, -1}; l_int32 ydel[] = {0, 1, 0, -1, 1, 1, -1, -1}; l_uint32 val; if (!pixs) return ERROR_INT("pixs not defined", __func__, 0); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", __func__, 0); w = pixGetWidth(pixs); h = pixGetHeight(pixs); found = 0; for (i = 0; i < 8; i++) { xa = x + xdel[i]; ya = y + ydel[i]; if (xa < 0 || xa >= w || ya < 0 || ya >= h) continue; pixGetPixel(pixs, xa, ya, &val); if (val == 1) { found = 1; *pxa = xa; *pya = ya; break; } } return found; } /*-----------------------------------------------------------------* * Display generated sel with originating image * *-----------------------------------------------------------------*/ /*! * \brief pixDisplayHitMissSel() * * \param[in] pixs 1 bpp * \param[in] sel hit-miss in general * \param[in] scalefactor an integer >= 1; use 0 for default * \param[in] hitcolor RGB0 color for center of hit pixels * \param[in] misscolor RGB0 color for center of miss pixels * \return pixd RGB showing both pixs and sel, or NULL on error *
 * Notes:
 *    (1) We don't allow scalefactor to be larger than MaxSelScalefactor
 *    (2) The colors are conveniently given as 4 bytes in hex format,
 *        such as 0xff008800.  The least significant byte is ignored.
 * 
*/ PIX * pixDisplayHitMissSel(PIX *pixs, SEL *sel, l_int32 scalefactor, l_uint32 hitcolor, l_uint32 misscolor) { l_int32 i, j, type; l_float32 fscale; PIX *pixt, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", __func__, NULL); if (!sel) return (PIX *)ERROR_PTR("sel not defined", __func__, NULL); if (scalefactor <= 0) scalefactor = DefaultSelScalefactor; if (scalefactor > MaxSelScalefactor) { L_WARNING("scalefactor too large; using max value\n", __func__); scalefactor = MaxSelScalefactor; } /* Generate a version of pixs with a colormap */ pixt = pixConvert1To8(NULL, pixs, 0, 1); cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixcmapAddColor(cmap, hitcolor >> 24, (hitcolor >> 16) & 0xff, (hitcolor >> 8) & 0xff); pixcmapAddColor(cmap, misscolor >> 24, (misscolor >> 16) & 0xff, (misscolor >> 8) & 0xff); pixSetColormap(pixt, cmap); /* Color the hits and misses */ for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { selGetElement(sel, i, j, &type); if (type == SEL_DONT_CARE) continue; if (type == SEL_HIT) pixSetPixel(pixt, j, i, 2); else /* type == SEL_MISS */ pixSetPixel(pixt, j, i, 3); } } /* Scale it up */ fscale = (l_float32)scalefactor; pixd = pixScaleBySampling(pixt, fscale, fscale); pixDestroy(&pixt); return pixd; } leptonica-1.86.0/src/shear.c000066400000000000000000000722521506303110300156210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file shear.c *
 *
 *    About arbitrary lines
 *           PIX      *pixHShear()
 *           PIX      *pixVShear()
 *
 *    About special 'points': UL corner and center
 *           PIX      *pixHShearCorner()
 *           PIX      *pixVShearCorner()
 *           PIX      *pixHShearCenter()
 *           PIX      *pixVShearCenter()
 *
 *    In place about arbitrary lines
 *           l_int32   pixHShearIP()
 *           l_int32   pixVShearIP()
 *
 *    Linear interpolated shear about arbitrary lines
 *           PIX      *pixHShearLI()
 *           PIX      *pixVShearLI()
 *
 *    Static helper
 *      static l_float32  normalizeAngleForShear()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include "allheaders.h" /* Shear angle must not get too close to -pi/2 or pi/2 */ static const l_float32 MinDiffFromHalfPi = 0.04f; static l_float32 normalizeAngleForShear(l_float32 radang, l_float32 mindif); #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * About arbitrary lines * *-------------------------------------------------------------*/ /*! * \brief pixHShear() * * \param[in] pixd [optional] this can be null, equal to pixs, * or different from pixs * \param[in] pixs any depth; cmap ok * \param[in] yloc location of horizontal line, measured from origin * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, always * *
 * Notes:
 *      (1) There are 3 cases:
 *            (a) pixd == null (make a new pixd)
 *            (b) pixd == pixs (in-place)
 *            (c) pixd != pixs
 *      (2) For these three cases, use these patterns, respectively:
 *              pixd = pixHShear(NULL, pixs, ...);
 *              pixHShear(pixs, pixs, ...);
 *              pixHShear(pixd, pixs, ...);
 *      (3) This shear leaves the horizontal line of pixels at y = yloc
 *          invariant.  For a positive shear angle, pixels above this
 *          line are shoved to the right, and pixels below this line
 *          move to the left.
 *      (4) With positive shear angle, this can be used, along with
 *          pixVShear(), to perform a cw rotation, either with 2 shears
 *          (for small angles) or in the general case with 3 shears.
 *      (5) Changing the value of yloc is equivalent to translating
 *          the result horizontally.
 *      (6) This brings in %incolor pixels from outside the image.
 *      (7) In-place shears do not work on cmapped pix, because the
 *          in-place operation cannot initialize to the requested %incolor,
 *          so we shear from a copy.
 *      (8) The angle is brought into the range [-pi, -pi].  It is
 *          not permitted to be within MinDiffFromHalfPi radians
 *          from either -pi/2 or pi/2.
 * 
*/ PIX * pixHShear(PIX *pixd, PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 y, yincr, inityincr, hshift; l_float32 tanangle, invangle; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", __func__, pixd); if (pixd == pixs) { /* in place */ if (!pixGetColormap(pixs)) { pixHShearIP(pixd, yloc, radang, incolor); } else { /* can't do in-place with a colormap */ PIX *pix1 = pixCopy(NULL, pixs); pixHShear(pixd, pix1, yloc, radang, incolor); pixDestroy(&pix1); } return pixd; } /* Make sure pixd exists and is same size as pixs */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else { /* pixd != pixs */ pixResizeImageData(pixd, pixs); } /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) return pixCopy(pixd, pixs); /* Initialize to value of incoming pixels */ pixSetBlackOrWhite(pixd, incolor); pixGetDimensions(pixs, &w, &h, NULL); sign = L_SIGN(radang); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); inityincr = (l_int32)(invangle / 2.); yincr = (l_int32)invangle; pixRasterop(pixd, 0, yloc - inityincr, w, 2 * inityincr, PIX_SRC, pixs, 0, yloc - inityincr); for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); if (h - y < yincr) /* reduce for last one if req'd */ yincr = h - y; pixRasterop(pixd, -sign*hshift, y, w, yincr, PIX_SRC, pixs, 0, y); #if DEBUG lept_stderr("y = %d, hshift = %d, yincr = %d\n", y, hshift, yincr); #endif /* DEBUG */ y += yincr; } for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); if (y < yincr) /* reduce for last one if req'd */ yincr = y; pixRasterop(pixd, -sign*hshift, y - yincr, w, yincr, PIX_SRC, pixs, 0, y - yincr); #if DEBUG lept_stderr("y = %d, hshift = %d, yincr = %d\n", y - yincr, hshift, yincr); #endif /* DEBUG */ y -= yincr; } return pixd; } /*! * \brief pixVShear() * * \param[in] pixd [optional], this can be null, equal to pixs, * or different from pixs * \param[in] pixs any depth; cmap ok * \param[in] xloc location of vertical line, measured from origin * \param[in] radang angle in radians; not too close to +-(pi / 2) * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error * *
 * Notes:
 *      (1) There are 3 cases:
 *            (a) pixd == null (make a new pixd)
 *            (b) pixd == pixs (in-place)
 *            (c) pixd != pixs
 *      (2) For these three cases, use these patterns, respectively:
 *              pixd = pixVShear(NULL, pixs, ...);
 *              pixVShear(pixs, pixs, ...);
 *              pixVShear(pixd, pixs, ...);
 *      (3) This shear leaves the vertical line of pixels at x = xloc
 *          invariant.  For a positive shear angle, pixels to the right
 *          of this line are shoved downward, and pixels to the left
 *          of the line move upward.
 *      (4) With positive shear angle, this can be used, along with
 *          pixHShear(), to perform a cw rotation, either with 2 shears
 *          (for small angles) or in the general case with 3 shears.
 *      (5) Changing the value of xloc is equivalent to translating
 *          the result vertically.
 *      (6) This brings in %incolor pixels from outside the image.
 *      (7) In-place shears do not work on cmapped pix, because the
 *          in-place operation cannot initialize to the requested %incolor,
 *          so we shear from a copy.
 *      (8) The angle is brought into the range [-pi, -pi].  It is
 *          not permitted to be within MinDiffFromHalfPi radians
 *          from either -pi/2 or pi/2.
 * 
*/ PIX * pixVShear(PIX *pixd, PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 x, xincr, initxincr, vshift; l_float32 tanangle, invangle; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (pixd == pixs) { /* in place */ if (!pixGetColormap(pixs)) { pixVShearIP(pixd, xloc, radang, incolor); } else { /* can't do in-place with a colormap */ PIX *pix1 = pixCopy(NULL, pixs); pixVShear(pixd, pix1, xloc, radang, incolor); pixDestroy(&pix1); } return pixd; } /* Make sure pixd exists and is same size as pixs */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", __func__, NULL); } else { /* pixd != pixs */ pixResizeImageData(pixd, pixs); } /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) return pixCopy(pixd, pixs); /* Initialize to value of incoming pixels */ pixSetBlackOrWhite(pixd, incolor); pixGetDimensions(pixs, &w, &h, NULL); sign = L_SIGN(radang); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); initxincr = (l_int32)(invangle / 2.); xincr = (l_int32)invangle; pixRasterop(pixd, xloc - initxincr, 0, 2 * initxincr, h, PIX_SRC, pixs, xloc - initxincr, 0); for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); if (w - x < xincr) /* reduce for last one if req'd */ xincr = w - x; pixRasterop(pixd, x, sign*vshift, xincr, h, PIX_SRC, pixs, x, 0); #if DEBUG lept_stderr("x = %d, vshift = %d, xincr = %d\n", x, vshift, xincr); #endif /* DEBUG */ x += xincr; } for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); if (x < xincr) /* reduce for last one if req'd */ xincr = x; pixRasterop(pixd, x - xincr, sign*vshift, xincr, h, PIX_SRC, pixs, x - xincr, 0); #if DEBUG lept_stderr("x = %d, vshift = %d, xincr = %d\n", x - xincr, vshift, xincr); #endif /* DEBUG */ x -= xincr; } return pixd; } /*-------------------------------------------------------------* * Shears about UL corner and center * *-------------------------------------------------------------*/ /*! * \brief pixHShearCorner() * * \param[in] pixd [optional], if not null, must be equal to pixs * \param[in] pixs any depth * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) See pixHShear() for usage.
 *      (2) This does a horizontal shear about the UL corner, with (+) shear
 *          pushing increasingly leftward (-x) with increasing y.
 * 
*/ PIX * pixHShearCorner(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); return pixHShear(pixd, pixs, 0, radang, incolor); } /*! * \brief pixVShearCorner() * * \param[in] pixd [optional], if not null, must be equal to pixs * \param[in] pixs any depth * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) See pixVShear() for usage.
 *      (2) This does a vertical shear about the UL corner, with (+) shear
 *          pushing increasingly downward (+y) with increasing x.
 * 
*/ PIX * pixVShearCorner(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); return pixVShear(pixd, pixs, 0, radang, incolor); } /*! * \brief pixHShearCenter() * * \param[in] pixd [optional] if not null, must be equal to pixs * \param[in] pixs any depth * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) See pixHShear() for usage.
 *      (2) This does a horizontal shear about the center, with (+) shear
 *          pushing increasingly leftward (-x) with increasing y.
 * 
*/ PIX * pixHShearCenter(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); return pixHShear(pixd, pixs, pixGetHeight(pixs) / 2, radang, incolor); } /*! * \brief pixVShearCenter() * * \param[in] pixd [optional] if not null, must be equal to pixs * \param[in] pixs any depth * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd, or NULL on error. * *
 * Notes:
 *      (1) See pixVShear() for usage.
 *      (2) This does a vertical shear about the center, with (+) shear
 *          pushing increasingly downward (+y) with increasing x.
 * 
*/ PIX * pixVShearCenter(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, pixd); return pixVShear(pixd, pixs, pixGetWidth(pixs) / 2, radang, incolor); } /*--------------------------------------------------------------------------* * In place about arbitrary lines * *--------------------------------------------------------------------------*/ /*! * \brief pixHShearIP() * * \param[in] pixs any depth; no cmap * \param[in] yloc location of horizontal line, measured from origin * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place version of pixHShear(); see comments there.
 *      (2) This brings in 'incolor' pixels from outside the image.
 *      (3) pixs cannot be colormapped, because the in-place operation
 *          only blits in 0 or 1 bits, not an arbitrary colormap index.
 *      (4) Does a horizontal full-band shear about the line with (+) shear
 *          pushing increasingly leftward (-x) with increasing y.
 * 
*/ l_ok pixHShearIP(PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 y, yincr, inityincr, hshift; l_float32 tanangle, invangle; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid incolor value", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); /* Normalize angle */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) return 0; sign = L_SIGN(radang); pixGetDimensions(pixs, &w, &h, NULL); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); inityincr = (l_int32)(invangle / 2.); yincr = (l_int32)invangle; if (inityincr > 0) pixRasteropHip(pixs, yloc - inityincr, 2 * inityincr, 0, incolor); for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); if (yincr == 0) continue; if (h - y < yincr) /* reduce for last one if req'd */ yincr = h - y; pixRasteropHip(pixs, y, yincr, -sign*hshift, incolor); y += yincr; } for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); if (yincr == 0) continue; if (y < yincr) /* reduce for last one if req'd */ yincr = y; pixRasteropHip(pixs, y - yincr, yincr, -sign*hshift, incolor); y -= yincr; } return 0; } /*! * \brief pixVShearIP() * * \param[in] pixs any depth; no cmap * \param[in] xloc location of vertical line, measured from origin * \param[in] radang angle in radians * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is an in-place version of pixVShear(); see comments there.
 *      (2) This brings in 'incolor' pixels from outside the image.
 *      (3) pixs cannot be colormapped, because the in-place operation
 *          only blits in 0 or 1 bits, not an arbitrary colormap index.
 *      (4) Does a vertical full-band shear about the line with (+) shear
 *          pushing increasingly downward (+y) with increasing x.
 * 
*/ l_ok pixVShearIP(PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 x, xincr, initxincr, vshift; l_float32 tanangle, invangle; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid incolor value", __func__, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", __func__, 1); /* Normalize angle */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) return 0; sign = L_SIGN(radang); pixGetDimensions(pixs, &w, &h, NULL); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); initxincr = (l_int32)(invangle / 2.); xincr = (l_int32)invangle; if (initxincr > 0) pixRasteropVip(pixs, xloc - initxincr, 2 * initxincr, 0, incolor); for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); if (xincr == 0) continue; if (w - x < xincr) /* reduce for last one if req'd */ xincr = w - x; pixRasteropVip(pixs, x, xincr, sign*vshift, incolor); x += xincr; } for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); if (xincr == 0) continue; if (x < xincr) /* reduce for last one if req'd */ xincr = x; pixRasteropVip(pixs, x - xincr, xincr, sign*vshift, incolor); x -= xincr; } return 0; } /*-------------------------------------------------------------------------* * Linear interpolated shear about arbitrary lines * *-------------------------------------------------------------------------*/ /*! * \brief pixHShearLI() * * \param[in] pixs 8 bpp or 32 bpp, or colormapped * \param[in] yloc location of horizontal line, measured from origin * \param[in] radang angle in radians, in range (-pi/2 ... pi/2) * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd sheared, or NULL on error * *
 * Notes:
 *      (1) This does horizontal shear with linear interpolation for
 *          accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images.
 *          It is relatively slow compared to the sampled version
 *          implemented by rasterop, but the result is much smoother.
 *      (2) This shear leaves the horizontal line of pixels at y = yloc
 *          invariant.  For a positive shear angle, pixels above this
 *          line are shoved to the right, and pixels below this line
 *          move to the left.
 *      (3) Any colormap is removed.
 *      (4) The angle is brought into the range [-pi/2 + del, pi/2 - del],
 *          where del == MinDiffFromHalfPi.
 * 
*/ PIX * pixHShearLI(PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 i, jd, x, xp, xf, w, h, d, wm, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 tanangle, xshift; PIX *pix, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (yloc < 0 || yloc >= h) return (PIX *)ERROR_PTR("yloc not in [0 ... h-1]", __func__, NULL); if (pixGetColormap(pixs)) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) { pixDestroy(&pix); return pixCopy(NULL, pixs); } /* Initialize to value of incoming pixels */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, incolor); /* Standard linear interp: subdivide each pixel into 64 parts */ d = pixGetDepth(pixd); /* 8 or 32 */ datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); tanangle = tan(radang); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; xshift = (yloc - i) * tanangle; for (jd = 0; jd < w; jd++) { x = (l_int32)(64.0 * (-xshift + jd) + 0.5); xp = x / 64; xf = x & 63; wm = w - 1; if (xp < 0 || xp > wm) continue; if (d == 8) { if (xp < wm) { val = ((63 - xf) * GET_DATA_BYTE(lines, xp) + xf * GET_DATA_BYTE(lines, xp + 1) + 31) / 63; } else { /* xp == wm */ val = GET_DATA_BYTE(lines, xp); } SET_DATA_BYTE(lined, jd, val); } else { /* d == 32 */ if (xp < wm) { word0 = *(lines + xp); word1 = *(lines + xp + 1); rval = ((63 - xf) * ((word0 >> L_RED_SHIFT) & 0xff) + xf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - xf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + xf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - xf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + xf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + jd); } else { /* xp == wm */ lined[jd] = lines[xp]; } } } } pixDestroy(&pix); return pixd; } /*! * \brief pixVShearLI() * * \param[in] pixs 8 bpp or 32 bpp, or colormapped * \param[in] xloc location of vertical line, measured from origin * \param[in] radang angle in radians, in range (-pi/2 ... pi/2) * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; * \return pixd sheared, or NULL on error * *
 * Notes:
 *      (1) This does vertical shear with linear interpolation for
 *          accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images.
 *          It is relatively slow compared to the sampled version
 *          implemented by rasterop, but the result is much smoother.
 *      (2) This shear leaves the vertical line of pixels at x = xloc
 *          invariant.  For a positive shear angle, pixels to the right
 *          of this line are shoved downward, and pixels to the left
 *          of the line move upward.
 *      (3) Any colormap is removed.
 *      (4) The angle is brought into the range [-pi/2 + del, pi/2 - del],
 *          where del == MinDiffFromHalfPi.
 * 
*/ PIX * pixVShearLI(PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 id, y, yp, yf, j, w, h, d, hm, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 tanangle, yshift; PIX *pix, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", __func__, NULL); if (xloc < 0 || xloc >= w) return (PIX *)ERROR_PTR("xloc not in [0 ... w-1]", __func__, NULL); if (pixGetColormap(pixs)) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); if (radang == 0.0 || tan(radang) == 0.0) { pixDestroy(&pix); return pixCopy(NULL, pixs); } /* Initialize to value of incoming pixels */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, incolor); /* Standard linear interp: subdivide each pixel into 64 parts */ d = pixGetDepth(pixd); /* 8 or 32 */ datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); tanangle = tan(radang); for (j = 0; j < w; j++) { yshift = (j - xloc) * tanangle; for (id = 0; id < h; id++) { y = (l_int32)(64.0 * (-yshift + id) + 0.5); yp = y / 64; yf = y & 63; hm = h - 1; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (d == 8) { if (yp < hm) { val = ((63 - yf) * GET_DATA_BYTE(lines, j) + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; } else { /* yp == hm */ val = GET_DATA_BYTE(lines, j); } SET_DATA_BYTE(lined, j, val); } else { /* d == 32 */ if (yp < hm) { word0 = *(lines + j); word1 = *(lines + wpls + j); rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + j); } else { /* yp == hm */ lined[j] = lines[j]; } } } } pixDestroy(&pix); return pixd; } /*-------------------------------------------------------------------------* * Angle normalization * *-------------------------------------------------------------------------*/ static l_float32 normalizeAngleForShear(l_float32 radang, l_float32 mindif) { l_float32 pi2; /* Bring angle into range [-pi/2, pi/2] */ pi2 = 3.14159265f / 2.0f; if (radang < -pi2 || radang > pi2) radang = radang - (l_int32)(radang / pi2) * pi2; /* If angle is too close to pi/2 or -pi/2, move it */ if (radang > pi2 - mindif) { L_WARNING("angle close to pi/2; shifting away\n", __func__); radang = pi2 - mindif; } else if (radang < -pi2 + mindif) { L_WARNING("angle close to -pi/2; shifting away\n", __func__); radang = -pi2 + mindif; } return radang; } leptonica-1.86.0/src/skew.c000066400000000000000000001366271506303110300154770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file skew.c *
 *
 *      Top-level deskew interfaces
 *          PIX       *pixDeskewBoth()
 *          PIX       *pixDeskew()
 *          PIX       *pixFindSkewAndDeskew()
 *          PIX       *pixDeskewGeneral()
 *
 *      Top-level angle-finding interface
 *          l_int32    pixFindSkew()
 *
 *      Basic angle-finding functions
 *          l_int32    pixFindSkewSweep()
 *          l_int32    pixFindSkewSweepAndSearch()
 *          l_int32    pixFindSkewSweepAndSearchScore()
 *          l_int32    pixFindSkewSweepAndSearchScorePivot()
 *
 *      Search over arbitrary range of angles in orthogonal directions
 *          l_int32    pixFindSkewOrthogonalRange()
 *
 *      Differential square sum function for scoring
 *          l_int32    pixFindDifferentialSquareSum()
 *
 *      Measures of variance of row sums
 *          l_int32    pixFindNormalizedSquareSum()
 *
 *
 *      ==============================================================
 *      Page skew detection
 *
 *      Skew is determined by pixel profiles, which are computed
 *      as pixel sums along the raster line for each line in the
 *      image.  By vertically shearing the image by a given angle,
 *      the sums can be computed quickly along the raster lines
 *      rather than along lines at that angle.  The score is
 *      computed from these line sums by taking the square of
 *      the DIFFERENCE between adjacent line sums, summed over
 *      all lines.  The skew angle is then found as the angle
 *      that maximizes the score.  The actual computation for
 *      any sheared image is done in the function
 *      pixFindDifferentialSquareSum().
 *
 *      The search for the angle that maximizes this score is
 *      most efficiently performed by first sweeping coarsely
 *      over angles, using a significantly reduced image (say, 4x
 *      reduction), to find the approximate maximum within a half
 *      degree or so, and then doing an interval-halving binary
 *      search at higher resolution to get the skew angle to
 *      within 1/20 degree or better.
 *
 *      The differential signal is used (rather than just using
 *      that variance of line sums) because it rejects the
 *      background noise due to total number of black pixels,
 *      and has maximum contributions from the baselines and
 *      x-height lines of text when the textlines are aligned
 *      with the raster lines.  It also works well in multicolumn
 *      pages where the textlines do not line up across columns.
 *
 *      The method is fast, accurate to within an angle (in radians)
 *      of approximately the inverse width in pixels of the image,
 *      and will work on a surprisingly small amount of text data
 *      (just a couple of text lines).  Consequently, it can
 *      also be used to find local skew if the skew were to vary
 *      significantly over the page.  Local skew determination
 *      is not very important except for locating lines of
 *      handwritten text that may be mixed with printed text.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Default sweep angle parameters for pixFindSkew() */ static const l_float32 DefaultSweepRange = 7.0; /* degrees */ static const l_float32 DefaultSweepDelta = 1.0; /* degrees */ /* Default final angle difference parameter for binary * search in pixFindSkew(). The expected accuracy is * not better than the inverse image width in pixels, * say, 1/2000 radians, or about 0.03 degrees. */ static const l_float32 DefaultMinbsDelta = 0.01f; /* degrees */ /* Default scale factors for pixFindSkew() */ static const l_int32 DefaultSweepReduction = 4; /* sweep part; 4 is good */ static const l_int32 DefaultBsReduction = 2; /* binary search part */ /* Minimum angle for deskewing in pixDeskew() */ static const l_float32 MinDeskewAngle = 0.1f; /* degree */ /* Minimum allowed confidence (ratio) for deskewing in pixDeskew() */ static const l_float32 MinAllowedConfidence = 3.0; /* Minimum allowed maxscore to give nonzero confidence */ static const l_int32 MinValidMaxscore = 10000; /* Constant setting threshold for minimum allowed minscore * to give nonzero confidence; multiply this constant by * (height * width^2) */ static const l_float32 MinscoreThreshFactor = 0.000002f; /* Default binarization threshold value. * This is set deliberately above 130 to capture light foreground * with poor printing or images that are out of focus. */ static const l_int32 DefaultBinaryThreshold = 160; #ifndef NO_CONSOLE_IO #define DEBUG_PRINT_SCORES 0 #define DEBUG_PRINT_SWEEP 0 #define DEBUG_PRINT_BINARY 0 #define DEBUG_PRINT_ORTH 0 #define DEBUG_THRESHOLD 0 #define DEBUG_PLOT_SCORES 0 /* requires the gnuplot executable */ #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Top-level deskew interfaces * *-----------------------------------------------------------------------*/ /*! * \brief pixDeskewBoth() * * \param[in] pixs any depth * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; * use 0 for default * \return pixd deskewed pix, or NULL on error * *
 * Notes:
 *      (1) This binarizes if necessary and does both horizontal
 *          and vertical deskewing, using the default parameters in
 *          the underlying pixDeskew().  See usage there.
 * 
*/ PIX * pixDeskewBoth(PIX *pixs, l_int32 redsearch) { PIX *pix1, *pix2, *pix3, *pix4; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (redsearch == 0) redsearch = DefaultBsReduction; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", __func__, NULL); pix1 = pixDeskew(pixs, redsearch); pix2 = pixRotate90(pix1, 1); pix3 = pixDeskew(pix2, redsearch); pix4 = pixRotate90(pix3, -1); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return pix4; } /*! * \brief pixDeskew() * * \param[in] pixs any depth * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; * use 0 for default * \return pixd deskewed pix, or NULL on error * *
 * Notes:
 *      (1) This binarizes if necessary and finds the skew angle.  If the
 *          angle is large enough and there is sufficient confidence,
 *          it returns a deskewed image; otherwise, it returns a clone.
 *      (2) Typical values at 300 ppi for %redsearch are 2 and 4.
 *          At 75 ppi, one should use %redsearch = 1.
 * 
*/ PIX * pixDeskew(PIX *pixs, l_int32 redsearch) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (redsearch == 0) redsearch = DefaultBsReduction; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", __func__, NULL); return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, NULL, NULL); } /*! * \brief pixFindSkewAndDeskew() * * \param[in] pixs any depth * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; * use 0 for default * \param[out] pangle [optional] angle required to deskew, * in degrees; use NULL to skip * \param[out] pconf [optional] conf value is ratio * of max/min scores; use NULL to skip * \return pixd deskewed pix, or NULL on error * *
 * Notes:
 *      (1) This binarizes if necessary and finds the skew angle.  If the
 *          angle is large enough and there is sufficient confidence,
 *          it returns a deskewed image; otherwise, it returns a clone.
 * 
*/ PIX * pixFindSkewAndDeskew(PIX *pixs, l_int32 redsearch, l_float32 *pangle, l_float32 *pconf) { if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (redsearch == 0) redsearch = DefaultBsReduction; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", __func__, NULL); return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, pangle, pconf); } /*! * \brief pixDeskewGeneral() * * \param[in] pixs any depth * \param[in] redsweep for linear search: reduction factor = 1, 2 or 4; * use 0 for default * \param[in] sweeprange in degrees in each direction from 0; * use 0.0 for default * \param[in] sweepdelta in degrees; use 0.0 for default * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; * use 0 for default; * \param[in] thresh for binarizing the image; use 0 for default * \param[out] pangle [optional] angle required to deskew, * in degrees; use NULL to skip * \param[out] pconf [optional] conf value is ratio * of max/min scores; use NULL to skip * \return pixd deskewed pix, or NULL on error * *
 * Notes:
 *      (1) This binarizes if necessary and finds the skew angle.  If the
 *          angle is large enough and there is sufficient confidence,
 *          it returns a deskewed image; otherwise, it returns a clone.
 * 
*/ PIX * pixDeskewGeneral(PIX *pixs, l_int32 redsweep, l_float32 sweeprange, l_float32 sweepdelta, l_int32 redsearch, l_int32 thresh, l_float32 *pangle, l_float32 *pconf) { l_int32 ret, depth; l_float32 angle, conf, deg2rad; PIX *pixb, *pixd; if (pangle) *pangle = 0.0; if (pconf) *pconf = 0.0; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (redsweep == 0) redsweep = DefaultSweepReduction; else if (redsweep != 1 && redsweep != 2 && redsweep != 4) return (PIX *)ERROR_PTR("redsweep not in {1,2,4}", __func__, NULL); if (sweeprange == 0.0) sweeprange = DefaultSweepRange; if (sweepdelta == 0.0) sweepdelta = DefaultSweepDelta; if (redsearch == 0) redsearch = DefaultBsReduction; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", __func__, NULL); if (thresh == 0) thresh = DefaultBinaryThreshold; deg2rad = 3.1415926535f / 180.f; /* Binarize if necessary */ depth = pixGetDepth(pixs); if (depth == 1) pixb = pixClone(pixs); else pixb = pixConvertTo1(pixs, thresh); /* Use the 1 bpp image to find the skew */ ret = pixFindSkewSweepAndSearch(pixb, &angle, &conf, redsweep, redsearch, sweeprange, sweepdelta, DefaultMinbsDelta); pixDestroy(&pixb); if (pangle) *pangle = angle; if (pconf) *pconf = conf; if (ret) return pixClone(pixs); if (L_ABS(angle) < MinDeskewAngle || conf < MinAllowedConfidence) return pixClone(pixs); if ((pixd = pixRotate(pixs, deg2rad * angle, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0)) == NULL) return pixClone(pixs); else return pixd; } /*-----------------------------------------------------------------------* * Simple top-level angle-finding interface * *-----------------------------------------------------------------------*/ /*! * \brief pixFindSkew() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew, in degrees * \param[out] pconf confidence value is ratio max/min scores * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) This is a simple high-level interface, that uses default
 *          values of the parameters for reasonable speed and accuracy.
 *      (2) The angle returned is the negative of the skew angle of
 *          the image.  It is the angle required for deskew.
 *          Clockwise rotations are positive angles.
 * 
*/ l_ok pixFindSkew(PIX *pixs, l_float32 *pangle, l_float32 *pconf) { if (pangle) *pangle = 0.0; if (pconf) *pconf = 0.0; if (!pangle || !pconf) return ERROR_INT("&angle and/or &conf not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", __func__, 1); return pixFindSkewSweepAndSearch(pixs, pangle, pconf, DefaultSweepReduction, DefaultBsReduction, DefaultSweepRange, DefaultSweepDelta, DefaultMinbsDelta); } /*-----------------------------------------------------------------------* * Basic angle-finding functions * *-----------------------------------------------------------------------*/ /*! * \brief pixFindSkewSweep() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew, in degrees * \param[in] reduction factor = 1, 2, 4 or 8 * \param[in] sweeprange half the full range; assumed about 0; in degrees * \param[in] sweepdelta angle increment of sweep; in degrees * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) This examines the 'score' for skew angles with equal intervals.
 *      (2) Caller must check the return value for validity of the result.
 * 
*/ l_ok pixFindSkewSweep(PIX *pixs, l_float32 *pangle, l_int32 reduction, l_float32 sweeprange, l_float32 sweepdelta) { l_int32 ret, bzero, i, nangles; l_float32 deg2rad, theta; l_float32 sum, maxscore, maxangle; NUMA *natheta, *nascore; PIX *pix, *pixt; if (!pangle) return ERROR_INT("&angle not defined", __func__, 1); *pangle = 0.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", __func__, 1); if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return ERROR_INT("reduction must be in {1,2,4,8}", __func__, 1); deg2rad = 3.1415926535f / 180.f; ret = 0; /* Generate reduced image, if requested */ if (reduction == 1) pix = pixClone(pixs); else if (reduction == 2) pix = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); else if (reduction == 4) pix = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); else /* reduction == 8 */ pix = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); pixZero(pix, &bzero); if (bzero) { pixDestroy(&pix); return 1; } nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); natheta = numaCreate(nangles); nascore = numaCreate(nangles); pixt = pixCreateTemplate(pix); if (!pix || !pixt) { ret = ERROR_INT("pix and pixt not both made", __func__, 1); goto cleanup; } if (!natheta || !nascore) { ret = ERROR_INT("natheta and nascore not both made", __func__, 1); goto cleanup; } for (i = 0; i < nangles; i++) { theta = -sweeprange + i * sweepdelta; /* degrees */ /* Shear pix about the UL corner and put the result in pixt */ pixVShearCorner(pixt, pix, deg2rad * theta, L_BRING_IN_WHITE); /* Get score */ pixFindDifferentialSquareSum(pixt, &sum); #if DEBUG_PRINT_SCORES L_INFO("sum(%7.2f) = %7.0f\n", __func__, theta, sum); #endif /* DEBUG_PRINT_SCORES */ /* Save the result in the output arrays */ numaAddNumber(nascore, sum); numaAddNumber(natheta, theta); } /* Find the location of the maximum (i.e., the skew angle) * by fitting the largest data point and its two neighbors * to a quadratic, using lagrangian interpolation. */ numaFitMax(nascore, &maxscore, natheta, &maxangle); *pangle = maxangle; #if DEBUG_PRINT_SWEEP L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", __func__, maxangle, maxscore); #endif /* DEBUG_PRINT_SWEEP */ #if DEBUG_PLOT_SCORES /* Plot the result -- the scores versus rotation angle -- * using gnuplot with GPLOT_LINES (lines connecting data points). * The GPLOT data structure is first created, with the * appropriate data incorporated from the two input NUMAs, * and then the function gplotMakeOutput() uses gnuplot to * generate the output plot. This can be either a .png file * or a .ps file, depending on whether you use GPLOT_PNG * or GPLOT_PS. */ {GPLOT *gplot; gplot = gplotCreate("sweep_output", GPLOT_PNG, "Sweep. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ cleanup: pixDestroy(&pix); pixDestroy(&pixt); numaDestroy(&nascore); numaDestroy(&natheta); return ret; } /*! * \brief pixFindSkewSweepAndSearch() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew; in degrees * \param[out] pconf confidence given by ratio of max/min score * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep * \param[in] sweeprange half the full range, assumed about 0; in degrees * \param[in] sweepdelta angle increment of sweep; in degrees * \param[in] minbsdelta min binary search increment angle; in degrees * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) This finds the skew angle, doing first a sweep through a set
 *          of equal angles, and then doing a binary search until
 *          convergence.
 *      (2) Caller must check the return value for validity of the result.
 *      (3) In computing the differential line sum variance score, we sum
 *          the result over scanlines, but we always skip:
 *           ~ at least one scanline
 *           ~ not more than 10% of the image height
 *           ~ not more than 5% of the image width
 *      (4) See also notes in pixFindSkewSweepAndSearchScore()
 * 
*/ l_ok pixFindSkewSweepAndSearch(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { return pixFindSkewSweepAndSearchScore(pixs, pangle, pconf, NULL, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta); } /*! * \brief pixFindSkewSweepAndSearchScore() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew; in degrees * \param[out] pconf confidence given by ratio of max/min score * \param[out] pendscore [optional] max score; use NULL to ignore * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep * \param[in] sweepcenter angle about which sweep is performed; in degrees * \param[in] sweeprange half the full range, taken about sweepcenter; * in degrees * \param[in] sweepdelta angle increment of sweep; in degrees * \param[in] minbsdelta min binary search increment angle; in degrees * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) This finds the skew angle, doing first a sweep through a set
 *          of equal angles, and then doing a binary search until convergence.
 *      (2) There are two built-in constants that determine if the
 *          returned confidence is nonzero:
 *            ~ MinValidMaxscore (minimum allowed maxscore)
 *            ~ MinscoreThreshFactor (determines minimum allowed
 *                 minscore, by multiplying by (height * width^2)
 *          If either of these conditions is not satisfied, the returned
 *          confidence value will be zero.  The maxscore is optionally
 *          returned in this function to allow evaluation of the
 *          resulting angle by a method that is independent of the
 *          returned confidence value.
 *      (3) The larger the confidence value, the greater the probability
 *          that the proper alignment is given by the angle that maximizes
 *          variance.  It should be compared to a threshold, which depends
 *          on the application.  Values between 3.0 and 6.0 are common.
 *      (4) By default, the shear is about the UL corner.
 * 
*/ l_ok pixFindSkewSweepAndSearchScore(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { return pixFindSkewSweepAndSearchScorePivot(pixs, pangle, pconf, pendscore, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); } /*! * \brief pixFindSkewSweepAndSearchScorePivot() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew; in degrees * \param[out] pconf confidence given by ratio of max/min score * \param[out] pendscore [optional] max score; use NULL to ignore * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep * \param[in] sweepcenter angle about which sweep is performed; in degrees * \param[in] sweeprange half the full range, taken about sweepcenter; * in degrees * \param[in] sweepdelta angle increment of sweep; in degrees * \param[in] minbsdelta min binary search increment angle; in degrees * \param[in] pivot L_SHEAR_ABOUT_CORNER, L_SHEAR_ABOUT_CENTER * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) See notes in pixFindSkewSweepAndSearchScore().
 *      (2) This allows choice of shear pivoting from either the UL corner
 *          or the center.  For small angles, the ability to discriminate
 *          angles is better with shearing from the UL corner.  However,
 *          for large angles (say, greater than 20 degrees), it is better
 *          to shear about the center because a shear from the UL corner
 *          loses too much of the image.
 * 
*/ l_ok pixFindSkewSweepAndSearchScorePivot(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_int32 pivot) { l_int32 ret, bzero, i, nangles, n, ratio, maxindex, minloc; l_int32 width, height; l_float32 deg2rad, theta, delta; l_float32 sum, maxscore, maxangle; l_float32 centerangle, leftcenterangle, rightcenterangle; l_float32 lefttemp, righttemp; l_float32 bsearchscore[5]; l_float32 minscore, minthresh; l_float32 rangeleft; NUMA *natheta, *nascore; PIX *pixsw, *pixsch, *pixt1, *pixt2; if (pendscore) *pendscore = 0.0; if (pangle) *pangle = 0.0; if (pconf) *pconf = 0.0; if (!pangle || !pconf) return ERROR_INT("&angle and/or &conf not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); if (redsweep != 1 && redsweep != 2 && redsweep != 4 && redsweep != 8) return ERROR_INT("redsweep must be in {1,2,4,8}", __func__, 1); if (redsearch != 1 && redsearch != 2 && redsearch != 4 && redsearch != 8) return ERROR_INT("redsearch must be in {1,2,4,8}", __func__, 1); if (redsearch > redsweep) return ERROR_INT("redsearch must not exceed redsweep", __func__, 1); if (pivot != L_SHEAR_ABOUT_CORNER && pivot != L_SHEAR_ABOUT_CENTER) return ERROR_INT("invalid pivot", __func__, 1); deg2rad = 3.1415926535f / 180.f; ret = 0; /* Generate reduced image for binary search, if requested */ if (redsearch == 1) pixsch = pixClone(pixs); else if (redsearch == 2) pixsch = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); else if (redsearch == 4) pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); else /* redsearch == 8 */ pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); pixZero(pixsch, &bzero); if (bzero) { pixDestroy(&pixsch); return 1; } /* Generate reduced image for sweep, if requested */ ratio = redsweep / redsearch; if (ratio == 1) { pixsw = pixClone(pixsch); } else { /* ratio > 1 */ if (ratio == 2) pixsw = pixReduceRankBinaryCascade(pixsch, 1, 0, 0, 0); else if (ratio == 4) pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 0, 0); else /* ratio == 8 */ pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 2, 0); } pixt1 = pixCreateTemplate(pixsw); if (ratio == 1) pixt2 = pixClone(pixt1); else pixt2 = pixCreateTemplate(pixsch); nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); natheta = numaCreate(nangles); nascore = numaCreate(nangles); if (!pixsch || !pixsw) { ret = ERROR_INT("pixsch and pixsw not both made", __func__, 1); goto cleanup; } if (!pixt1 || !pixt2) { ret = ERROR_INT("pixt1 and pixt2 not both made", __func__, 1); goto cleanup; } if (!natheta || !nascore) { ret = ERROR_INT("natheta and nascore not both made", __func__, 1); goto cleanup; } /* Do sweep */ rangeleft = sweepcenter - sweeprange; for (i = 0; i < nangles; i++) { theta = rangeleft + i * sweepdelta; /* degrees */ /* Shear pix and put the result in pixt1 */ if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); else pixVShearCenter(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); /* Get score */ pixFindDifferentialSquareSum(pixt1, &sum); #if DEBUG_PRINT_SCORES L_INFO("sum(%7.2f) = %7.0f\n", __func__, theta, sum); #endif /* DEBUG_PRINT_SCORES */ /* Save the result in the output arrays */ numaAddNumber(nascore, sum); numaAddNumber(natheta, theta); } /* Find the largest of the set (maxscore at maxangle) */ numaGetMax(nascore, &maxscore, &maxindex); numaGetFValue(natheta, maxindex, &maxangle); #if DEBUG_PRINT_SWEEP L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", __func__, maxangle, maxscore); #endif /* DEBUG_PRINT_SWEEP */ #if DEBUG_PLOT_SCORES /* Plot the sweep result -- the scores versus rotation angle -- * using gnuplot with GPLOT_LINES (lines connecting data points). */ {GPLOT *gplot; gplot = gplotCreate("sweep_output", GPLOT_PNG, "Sweep. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ /* Check if the max is at the end of the sweep. */ n = numaGetCount(natheta); if (maxindex == 0 || maxindex == n - 1) { L_WARNING("max found at sweep edge\n", __func__); goto cleanup; } /* Empty the numas for re-use */ numaEmpty(nascore); numaEmpty(natheta); /* Do binary search to find skew angle. * First, set up initial three points. */ centerangle = maxangle; if (pivot == L_SHEAR_ABOUT_CORNER) { pixVShearCorner(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); } else { pixVShearCenter(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); } numaAddNumber(nascore, bsearchscore[2]); numaAddNumber(natheta, centerangle); numaAddNumber(nascore, bsearchscore[0]); numaAddNumber(natheta, centerangle - sweepdelta); numaAddNumber(nascore, bsearchscore[4]); numaAddNumber(natheta, centerangle + sweepdelta); /* Start the search */ delta = 0.5f * sweepdelta; while (delta >= minbsdelta) { /* Get the left intermediate score */ leftcenterangle = centerangle - delta; if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt2, pixsch, deg2rad * leftcenterangle, L_BRING_IN_WHITE); else pixVShearCenter(pixt2, pixsch, deg2rad * leftcenterangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[1]); numaAddNumber(nascore, bsearchscore[1]); numaAddNumber(natheta, leftcenterangle); /* Get the right intermediate score */ rightcenterangle = centerangle + delta; if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt2, pixsch, deg2rad * rightcenterangle, L_BRING_IN_WHITE); else pixVShearCenter(pixt2, pixsch, deg2rad * rightcenterangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[3]); numaAddNumber(nascore, bsearchscore[3]); numaAddNumber(natheta, rightcenterangle); /* Find the maximum of the five scores and its location. * Note that the maximum must be in the center * three values, not in the end two. */ maxscore = bsearchscore[1]; maxindex = 1; for (i = 2; i < 4; i++) { if (bsearchscore[i] > maxscore) { maxscore = bsearchscore[i]; maxindex = i; } } /* Set up score array to interpolate for the next iteration */ lefttemp = bsearchscore[maxindex - 1]; righttemp = bsearchscore[maxindex + 1]; bsearchscore[2] = maxscore; bsearchscore[0] = lefttemp; bsearchscore[4] = righttemp; /* Get new center angle and delta for next iteration */ centerangle = centerangle + delta * (maxindex - 2); delta = 0.5f * delta; } *pangle = centerangle; #if DEBUG_PRINT_SCORES L_INFO(" Binary search score = %7.3f\n", __func__, bsearchscore[2]); #endif /* DEBUG_PRINT_SCORES */ if (pendscore) /* save if requested */ *pendscore = bsearchscore[2]; /* Return the ratio of Max score over Min score * as a confidence value. Don't trust if the Min score * is too small, which can happen if the image is all black * with only a few white pixels interspersed. In that case, * we get a contribution from the top and bottom edges when * vertically sheared, but this contribution becomes zero when * the shear angle is zero. For zero shear angle, the only * contribution will be from the white pixels. We expect that * the signal goes as the product of the (height * width^2), * so we compute a (hopefully) normalized minimum threshold as * a function of these dimensions. */ numaGetMin(nascore, &minscore, &minloc); width = pixGetWidth(pixsch); height = pixGetHeight(pixsch); minthresh = MinscoreThreshFactor * width * width * height; #if DEBUG_THRESHOLD L_INFO(" minthresh = %10.2f, minscore = %10.2f\n", __func__, minthresh, minscore); L_INFO(" maxscore = %10.2f\n", __func__, maxscore); #endif /* DEBUG_THRESHOLD */ if (minscore > minthresh) *pconf = maxscore / minscore; else *pconf = 0.0; /* Don't trust it if too close to the edge of the sweep * range or if maxscore is small */ if ((centerangle > rangeleft + 2 * sweeprange - sweepdelta) || (centerangle < rangeleft + sweepdelta) || (maxscore < MinValidMaxscore)) *pconf = 0.0; #if DEBUG_PRINT_BINARY lept_stderr("Binary search: angle = %7.3f, score ratio = %6.2f\n", *pangle, *pconf); lept_stderr(" max score = %8.0f\n", maxscore); #endif /* DEBUG_PRINT_BINARY */ #if DEBUG_PLOT_SCORES /* Plot the result -- the scores versus rotation angle -- * using gnuplot with GPLOT_POINTS. Because the data * points are not ordered by theta (increasing or decreasing), * using GPLOT_LINES would be confusing! */ {GPLOT *gplot; gplot = gplotCreate("search_output", GPLOT_PNG, "Binary search. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ cleanup: pixDestroy(&pixsw); pixDestroy(&pixsch); pixDestroy(&pixt1); pixDestroy(&pixt2); numaDestroy(&nascore); numaDestroy(&natheta); return ret; } /*---------------------------------------------------------------------* * Search over arbitrary range of angles in orthogonal directions * *---------------------------------------------------------------------*/ /* * \brief pixFindSkewOrthogonalRange() * * \param[in] pixs 1 bpp * \param[out] pangle angle required to deskew; in degrees cw * \param[out] pconf confidence given by ratio of max/min score * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep * \param[in] sweeprange half the full range in each orthogonal * direction, taken about 0, in degrees * \param[in] sweepdelta angle increment of sweep; in degrees * \param[in] minbsdelta min binary search increment angle; in degrees * \param[in] confprior amount by which confidence of 90 degree rotated * result is reduced when comparing with unrotated * confidence value * \return 0 if OK, 1 on error or if angle measurement not valid * *
 * Notes:
 *      (1) This searches for the skew angle, first in the range
 *          [-sweeprange, sweeprange], and then in
 *          [90 - sweeprange, 90 + sweeprange], with angles measured
 *          clockwise.  For exploring the full range of possibilities,
 *          suggest using sweeprange = 47.0 degrees, giving some overlap
 *          at 45 and 135 degrees.  From these results, and discounting
 *          the the second confidence by %confprior, it selects the
 *          angle for maximal differential variance.  If the angle
 *          is larger than pi/4, the angle found after 90 degree rotation
 *          is selected.
 *      (2) The larger the confidence value, the greater the probability
 *          that the proper alignment is given by the angle that maximizes
 *          variance.  It should be compared to a threshold, which depends
 *          on the application.  Values between 3.0 and 6.0 are common.
 *      (3) Allowing for both portrait and landscape searches is more
 *          difficult, because if the signal from the text lines is weak,
 *          a signal from vertical rules can be larger!
 *          The most difficult documents to deskew have some or all of:
 *            (a) Multiple columns, not aligned
 *            (b) Black lines along the vertical edges
 *            (c) Text from two pages, and at different angles
 *          Rule of thumb for resolution:
 *            (a) If the margins are clean, you can work at 75 ppi,
 *                although 100 ppi is safer.
 *            (b) If there are vertical lines in the margins, do not
 *                work below 150 ppi.  The signal from the text lines must
 *                exceed that from the margin lines.
 *      (4) Choosing the %confprior parameter depends on knowing something
 *          about the source of image.  However, we're not using
 *          real probabilities here, so its use is qualitative.
 *          If landscape and portrait are equally likely, use
 *          %confprior = 0.0.  If the likelihood of portrait (non-rotated)
 *          is 100 times higher than that of landscape, we want to reduce
 *          the chance that we rotate to landscape in a situation where
 *          the landscape signal is accidentally larger than the
 *          portrait signal.  To do this use a positive value of
 *          %confprior; say 1.5.
 * 
*/ l_int32 pixFindSkewOrthogonalRange(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 confprior) { l_float32 angle1, conf1, score1, angle2, conf2, score2; PIX *pixr; if (pangle) *pangle = 0.0; if (pconf) *pconf = 0.0; if (!pangle || !pconf) return ERROR_INT("&angle and/or &conf not defined", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); pixFindSkewSweepAndSearchScorePivot(pixs, &angle1, &conf1, &score1, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); pixr = pixRotateOrth(pixs, 1); pixFindSkewSweepAndSearchScorePivot(pixr, &angle2, &conf2, &score2, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); pixDestroy(&pixr); if (conf1 > conf2 - confprior) { *pangle = angle1; *pconf = conf1; } else { *pangle = -90.0f + angle2; *pconf = conf2; } #if DEBUG_PRINT_ORTH lept_stderr(" About 0: angle1 = %7.3f, conf1 = %7.3f, score1 = %f\n", angle1, conf1, score1); lept_stderr(" About 90: angle2 = %7.3f, conf2 = %7.3f, score2 = %f\n", angle2, conf2, score2); lept_stderr(" Final: angle = %7.3f, conf = %7.3f\n", *pangle, *pconf); #endif /* DEBUG_PRINT_ORTH */ return 0; } /*----------------------------------------------------------------* * Differential square sum function * *----------------------------------------------------------------*/ /*! * \brief pixFindDifferentialSquareSum() * * \param[in] pixs * \param[out] psum result * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) At the top and bottom, we skip:
 *           ~ at least one scanline
 *           ~ not more than 10% of the image height
 *           ~ not more than 5% of the image width
 * 
*/ l_ok pixFindDifferentialSquareSum(PIX *pixs, l_float32 *psum) { l_int32 i, n; l_int32 w, h, skiph, skip, nskip; l_float32 val1, val2, diff, sum; NUMA *na; if (!psum) return ERROR_INT("&sum not defined", __func__, 1); *psum = 0.0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); /* Generate a number array consisting of the sum * of pixels in each row of pixs */ if ((na = pixCountPixelsByRow(pixs, NULL)) == NULL) return ERROR_INT("na not made", __func__, 1); /* Compute the number of rows at top and bottom to omit. * We omit these to avoid getting a spurious signal from * the top and bottom of a (nearly) all black image. */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); skiph = (l_int32)(0.05 * w); /* skip for max shear of 0.025 radians */ skip = L_MIN(h / 10, skiph); /* don't remove more than 10% of image */ nskip = L_MAX(skip / 2, 1); /* at top & bot; skip at least one line */ /* Sum the squares of differential row sums, on the * allowed rows. Note that nskip must be >= 1. */ n = numaGetCount(na); sum = 0.0; for (i = nskip; i < n - nskip; i++) { numaGetFValue(na, i - 1, &val1); numaGetFValue(na, i, &val2); diff = val2 - val1; sum += diff * diff; } numaDestroy(&na); *psum = sum; return 0; } /*----------------------------------------------------------------* * Normalized square sum * *----------------------------------------------------------------*/ /*! * \brief pixFindNormalizedSquareSum() * * \param[in] pixs * \param[out] phratio [optional] ratio of normalized horiz square sum * to result if the pixel distribution were uniform * \param[out] pvratio [optional] ratio of normalized vert square sum * to result if the pixel distribution were uniform * \param[out] pfract [optional] ratio of fg pixels to total pixels * \return 0 if OK, 1 on error or if there are no fg pixels * *
 * Notes:
 *      (1) Let the image have h scanlines and N fg pixels.
 *          If the pixels were uniformly distributed on scanlines,
 *          the sum of squares of fg pixels on each scanline would be
 *          h * (N / h)^2.  However, if the pixels are not uniformly
 *          distributed (e.g., for text), the sum of squares of fg
 *          pixels will be larger.  We return in hratio and vratio the
 *          ratio of these two values.
 *      (2) If there are no fg pixels, hratio and vratio are returned as 0.0.
 * 
*/ l_ok pixFindNormalizedSquareSum(PIX *pixs, l_float32 *phratio, l_float32 *pvratio, l_float32 *pfract) { l_int32 i, w, h, empty; l_float32 sum, sumsq, uniform, val; NUMA *na; PIX *pixt; if (phratio) *phratio = 0.0; if (pvratio) *pvratio = 0.0; if (pfract) *pfract = 0.0; if (!phratio && !pvratio) return ERROR_INT("nothing to do", __func__, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", __func__, 1); pixGetDimensions(pixs, &w, &h, NULL); empty = 0; if (phratio) { na = pixCountPixelsByRow(pixs, NULL); numaGetSum(na, &sum); /* fg pixels */ if (pfract) *pfract = sum / (l_float32)(w * h); if (sum != 0.0) { uniform = sum * sum / h; /* h*(sum / h)^2 */ sumsq = 0.0; for (i = 0; i < h; i++) { numaGetFValue(na, i, &val); sumsq += val * val; } *phratio = sumsq / uniform; } else { empty = 1; } numaDestroy(&na); } if (pvratio) { if (empty == 1) return 1; pixt = pixRotateOrth(pixs, 1); na = pixCountPixelsByRow(pixt, NULL); numaGetSum(na, &sum); if (pfract) *pfract = sum / (l_float32)(w * h); if (sum != 0.0) { uniform = sum * sum / w; sumsq = 0.0; for (i = 0; i < w; i++) { numaGetFValue(na, i, &val); sumsq += val * val; } *pvratio = sumsq / uniform; } else { empty = 1; } pixDestroy(&pixt); numaDestroy(&na); } return empty; } leptonica-1.86.0/src/spixio.c000066400000000000000000000365221506303110300160320ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file spixio.c *
 *
 *    This does fast serialization of a pix in memory to file,
 *    copying the raw data for maximum speed.  The underlying
 *    function serializes it to memory, and it is wrapped to be
 *    callable from standard pixRead() and pixWrite() file functions.
 *
 *      Reading spix from file
 *           PIX        *pixReadStreamSpix()
 *           l_int32     readHeaderSpix()
 *           l_int32     freadHeaderSpix()
 *           l_int32     sreadHeaderSpix()
 *
 *      Writing spix to file
 *           l_int32     pixWriteStreamSpix()
 *
 *      Low-level serialization of pix to/from memory (uncompressed)
 *           PIX        *pixReadMemSpix()
 *           l_int32     pixWriteMemSpix()
 *           l_int32     pixSerializeToMemory()
 *           PIX        *pixDeserializeFromMemory()
 *
 *    Note: these functions have not been extensively tested for fuzzing
 *    (bad input data that can result in, e.g., memory faults).
 *    The spix serialization format is only defined here, in leptonica.
 *    The image data is uncompressed and the serialization is not intended
 *    to be a secure file format from untrusted sources.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Image dimension limits */ static const l_int32 MaxAllowedWidth = 1000000; static const l_int32 MaxAllowedHeight = 1000000; static const l_int64 MaxAllowedArea = 400000000LL; #ifndef NO_CONSOLE_IO #define DEBUG_SERIALIZE 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Reading spix from file * *-----------------------------------------------------------------------*/ /*! * \brief pixReadStreamSpix() * * \param[in] fp file stream * \return pix, or NULL on error. * *
 * Notes:
 *      (1) If called from pixReadStream(), the stream is positioned
 *          at the beginning of the file.
 * 
*/ PIX * pixReadStreamSpix(FILE *fp) { size_t nbytes; l_uint8 *data; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("stream not defined", __func__, NULL); if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) return (PIX *)ERROR_PTR("data not read", __func__, NULL); pix = pixReadMemSpix(data, nbytes); LEPT_FREE(data); if (!pix) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); return pix; } /*! * \brief readHeaderSpix() * * \param[in] filename * \param[out] pwidth width * \param[out] pheight height * \param[out] pbps bits/sample * \param[out] pspp samples/pixel * \param[out] piscmap [optional] input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, iscmap is returned as 1; else 0.
 * 
*/ l_ok readHeaderSpix(const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderSpix(fp, pwidth, pheight, pbps, pspp, piscmap); fclose(fp); return ret; } /*! * \brief freadHeaderSpix() * * \param[in] fp file stream * \param[out] pwidth width * \param[out] pheight height * \param[out] pbps bits/sample * \param[out] pspp samples/pixel * \param[out] piscmap [optional] input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, iscmap is returned as 1; else 0.
 * 
*/ l_ok freadHeaderSpix(FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 nbytes, ret; l_uint32 data[6]; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", __func__, 1); nbytes = fnbytesInFile(fp); if (nbytes < 32) return ERROR_INT("file too small to be spix", __func__, 1); if (fread(data, 4, 6, fp) != 6) return ERROR_INT("error reading data", __func__, 1); ret = sreadHeaderSpix(data, nbytes, pwidth, pheight, pbps, pspp, piscmap); return ret; } /*! * \brief sreadHeaderSpix() * * \param[in] data * \param[in] size of data * \param[out] pwidth width * \param[out] pheight height * \param[out] pbps bits/sample * \param[out] pspp samples/pixel * \param[out] piscmap [optional] input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, iscmap is returned as 1; else 0.
 * 
*/ l_ok sreadHeaderSpix(const l_uint32 *data, size_t size, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { char *id; l_int32 d, ncolors; if (!data) return ERROR_INT("data not defined", __func__, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", __func__, 1); *pwidth = *pheight = *pbps = *pspp = 0; if (piscmap) *piscmap = 0; if (size < 28) return ERROR_INT("size too small", __func__, 1); /* Check file id */ id = (char *)data; if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') return ERROR_INT("not a valid spix file", __func__, 1); *pwidth = data[1]; *pheight = data[2]; d = data[3]; if (d <= 16) { *pbps = d; *pspp = 1; } else { *pbps = 8; *pspp = d / 8; /* if the pix is 32 bpp, call it 4 samples */ } ncolors = data[5]; if (piscmap) *piscmap = (ncolors == 0) ? 0 : 1; return 0; } /*-----------------------------------------------------------------------* * Writing spix to file * *-----------------------------------------------------------------------*/ /*! * \brief pixWriteStreamSpix() * * \param[in] fp file stream * \param[in] pix * \return 0 if OK; 1 on error */ l_ok pixWriteStreamSpix(FILE *fp, PIX *pix) { l_uint8 *data; size_t size; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (pixWriteMemSpix(&data, &size, pix)) return ERROR_INT("failure to write pix to memory", __func__, 1); fwrite(data, 1, size, fp); LEPT_FREE(data); return 0; } /*-----------------------------------------------------------------------* * Low-level serialization of pix to/from memory (uncompressed) * *-----------------------------------------------------------------------*/ /*! * \brief pixReadMemSpix() * * \param[in] data const; uncompressed * \param[in] size bytes of data * \return pix, or NULL on error */ PIX * pixReadMemSpix(const l_uint8 *data, size_t size) { return pixDeserializeFromMemory((l_uint32 *)data, size); } /*! * \brief pixWriteMemSpix() * * \param[out] pdata data of serialized, uncompressed pix * \param[out] psize size of returned data * \param[in] pix all depths; colormap OK * \return 0 if OK, 1 on error */ l_ok pixWriteMemSpix(l_uint8 **pdata, size_t *psize, PIX *pix) { return pixSerializeToMemory(pix, (l_uint32 **)pdata, psize); } /*! * \brief pixSerializeToMemory() * * \param[in] pixs all depths, colormap OK * \param[out] pdata serialized data in memory * \param[out] pnbytes number of bytes in data string * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This does a fast serialization of the principal elements
 *          of the pix, as follows:
 *            "spix"    (4 bytes) -- ID for file type
 *            w         (4 bytes)
 *            h         (4 bytes)
 *            d         (4 bytes)
 *            wpl       (4 bytes)
 *            ncolors   (4 bytes) -- in colormap; 0 if there is no colormap
 *            cdata     (4 * ncolors)  -- size of serialized colormap array
 *            rdatasize (4 bytes) -- size of serialized raster data
 *                                   = 4 * wpl * h
 *            rdata     (rdatasize)
 * 
*/ l_ok pixSerializeToMemory(PIX *pixs, l_uint32 **pdata, size_t *pnbytes) { char *id; l_int32 w, h, d, wpl, rdatasize, ncolors, nbytes, index, valid; l_uint8 *cdata; /* data in colormap array (4 bytes/color table entry) */ l_uint32 *data; l_uint32 *rdata; /* data in pix raster */ PIXCMAP *cmap; if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", __func__, 1); *pdata = NULL; *pnbytes = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); rdata = pixGetData(pixs); rdatasize = 4 * wpl * h; ncolors = 0; cdata = NULL; if ((cmap = pixGetColormap(pixs)) != NULL) { pixcmapIsValid(cmap, pixs, &valid); if (!valid) return ERROR_INT("colormap not valid", __func__, 1); pixcmapSerializeToMemory(cmap, 4, &ncolors, &cdata); } nbytes = 24 + 4 * ncolors + 4 + rdatasize; if ((data = (l_uint32 *)LEPT_CALLOC(nbytes / 4, sizeof(l_uint32))) == NULL) { LEPT_FREE(cdata); return ERROR_INT("data not made", __func__, 1); } *pdata = data; *pnbytes = nbytes; id = (char *)data; id[0] = 's'; id[1] = 'p'; id[2] = 'i'; id[3] = 'x'; data[1] = w; data[2] = h; data[3] = d; data[4] = wpl; data[5] = ncolors; if (ncolors > 0) memcpy(data + 6, cdata, 4 * ncolors); index = 6 + ncolors; data[index] = rdatasize; memcpy(data + index + 1, rdata, rdatasize); #if DEBUG_SERIALIZE lept_stderr("Serialize: " "raster size = %d, ncolors in cmap = %d, total bytes = %d\n", rdatasize, ncolors, nbytes); #endif /* DEBUG_SERIALIZE */ LEPT_FREE(cdata); return 0; } /*! * \brief pixDeserializeFromMemory() * * \param[in] data serialized data in memory * \param[in] nbytes number of bytes in data string * \return pix, or NULL on error * *
 * Notes:
 *      (1) See pixSerializeToMemory() for the binary format.
 *      (2) Note the image size limits.
 * 
*/ PIX * pixDeserializeFromMemory(const l_uint32 *data, size_t nbytes) { char *id; l_int32 w, h, d, pixdata_size, memdata_size, imdata_size, ncolors, valid; l_uint32 *imdata; /* data in pix raster */ PIX *pix1, *pixd; PIXCMAP *cmap = NULL; if (!data) return (PIX *)ERROR_PTR("data not defined", __func__, NULL); if (nbytes < 28 || nbytes > ((1LL << 31) - 1)) { L_ERROR("invalid nbytes = %zu\n", __func__, nbytes); return NULL; } id = (char *)data; if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') return (PIX *)ERROR_PTR("invalid id string", __func__, NULL); w = data[1]; h = data[2]; d = data[3]; ncolors = data[5]; /* Sanity checks on the amount of image data */ if (w < 1 || w > MaxAllowedWidth) return (PIX *)ERROR_PTR("invalid width", __func__, NULL); if (h < 1 || h > MaxAllowedHeight) return (PIX *)ERROR_PTR("invalid height", __func__, NULL); if (1LL * w * h > MaxAllowedArea) return (PIX *)ERROR_PTR("area too large", __func__, NULL); if (ncolors < 0 || ncolors > 256 || ncolors + 7 >= nbytes/sizeof(l_int32)) return (PIX *)ERROR_PTR("invalid ncolors", __func__, NULL); if ((pix1 = pixCreateHeader(w, h, d)) == NULL) /* just make the header */ return (PIX *)ERROR_PTR("failed to make header", __func__, NULL); pixdata_size = 4 * h * pixGetWpl(pix1); memdata_size = nbytes - 24 - 4 * ncolors - 4; imdata_size = data[6 + ncolors]; pixDestroy(&pix1); if (pixdata_size != memdata_size || pixdata_size != imdata_size) { L_ERROR("pixdata_size = %d, memdata_size = %d, imdata_size = %d " "not all equal!\n", __func__, pixdata_size, memdata_size, imdata_size); return NULL; } if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); if (ncolors > 0) { cmap = pixcmapDeserializeFromMemory((l_uint8 *)(&data[6]), 4, ncolors); if (!cmap) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("cmap not made", __func__, NULL); } if (pixSetColormap(pixd, cmap)) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("cmap is not valid", __func__, NULL); } } /* Read the raster data */ imdata = pixGetData(pixd); memcpy(imdata, data + 7 + ncolors, imdata_size); /* Verify that the colormap is valid with the pix */ if (ncolors > 0) { pixcmapIsValid(cmap, pixd, &valid); if (!valid) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("cmap is invalid with pix", __func__, NULL); } } #if DEBUG_SERIALIZE lept_stderr("Deserialize: " "raster size = %d, ncolors in cmap = %d, total bytes = %zu\n", imdata_size, ncolors, nbytes); #endif /* DEBUG_SERIALIZE */ return pixd; } leptonica-1.86.0/src/stack.c000066400000000000000000000177651506303110300156340ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file stack.c *
 *
 *      Generic stack
 *
 *      The lstack is an array of void * ptrs, onto which
 *      objects can be stored.  At any time, the number of
 *      stored objects is lstack->n.  The object at the bottom
 *      of the lstack is at array[0]; the object at the top of
 *      the lstack is at array[n-1].  New objects are added
 *      to the top of the lstack; i.e., the first available
 *      location, which is at array[n].  The lstack is expanded
 *      by doubling, when needed.  Objects are removed
 *      from the top of the lstack.  When an attempt is made
 *      to remove an object from an empty lstack, the result is null.
 *
 *      Create/Destroy
 *           L_STACK        *lstackCreate()
 *           void            lstackDestroy()
 *
 *      Accessors
 *           l_int32         lstackAdd()
 *           void           *lstackRemove()
 *           static l_int32  lstackExtendArray()
 *           l_int32         lstackGetCount()
 *
 *      Text description
 *           l_int32         lstackPrint()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* Bounds on initial array size */ static const l_uint32 MaxPtrArraySize = 100000; static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ /* Static function */ static l_int32 lstackExtendArray(L_STACK *lstack); /*---------------------------------------------------------------------* * Create/Destroy * *---------------------------------------------------------------------*/ /*! * \brief lstackCreate() * * \param[in] n initial ptr array size; use 0 for default * \return lstack, or NULL on error */ L_STACK * lstackCreate(l_int32 n) { L_STACK *lstack; if (n <= 0 || n > (l_int32)MaxPtrArraySize) n = InitialPtrArraySize; lstack = (L_STACK *)LEPT_CALLOC(1, sizeof(L_STACK)); lstack->array = (void **)LEPT_CALLOC(n, sizeof(void *)); if (!lstack->array) { lstackDestroy(&lstack, FALSE); return (L_STACK *)ERROR_PTR("lstack array not made", __func__, NULL); } lstack->nalloc = n; lstack->n = 0; return lstack; } /*! * \brief lstackDestroy() * * \param[in,out] plstack will be set to null before returning * \param[in] freeflag TRUE to free each remaining struct in the array * \return void * *
 * Notes:
 *      (1) If %freeflag is TRUE, frees each struct in the array.
 *      (2) If %freeflag is FALSE but there are elements on the array,
 *          gives a warning and destroys the array.  This will
 *          cause a memory leak of all the items that were on the lstack.
 *          So if the items require their own destroy function, they
 *          must be destroyed before the lstack.
 *      (3) To destroy the lstack, we destroy the ptr array, then
 *          the lstack, and then null the contents of the input ptr.
 * 
*/ void lstackDestroy(L_STACK **plstack, l_int32 freeflag) { void *item; L_STACK *lstack; if (plstack == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((lstack = *plstack) == NULL) return; if (freeflag) { while(lstack->n > 0) { item = lstackRemove(lstack); LEPT_FREE(item); } } else if (lstack->n > 0) { L_WARNING("memory leak of %d items in lstack\n", __func__, lstack->n); } if (lstack->auxstack) lstackDestroy(&lstack->auxstack, freeflag); if (lstack->array) LEPT_FREE(lstack->array); LEPT_FREE(lstack); *plstack = NULL; } /*---------------------------------------------------------------------* * Accessors * *---------------------------------------------------------------------*/ /*! * \brief lstackAdd() * * \param[in] lstack * \param[in] item to be added to the lstack * \return 0 if OK; 1 on error. */ l_ok lstackAdd(L_STACK *lstack, void *item) { if (!lstack) return ERROR_INT("lstack not defined", __func__, 1); if (!item) return ERROR_INT("item not defined", __func__, 1); /* Do we need to extend the array? */ if (lstack->n >= lstack->nalloc) { if (lstackExtendArray(lstack)) return ERROR_INT("extension failed", __func__, 1); } /* Store the new pointer */ lstack->array[lstack->n] = (void *)item; lstack->n++; return 0; } /*! * \brief lstackRemove() * * \param[in] lstack * \return ptr to item popped from the top of the lstack, * or NULL if the lstack is empty or on error */ void * lstackRemove(L_STACK *lstack) { void *item; if (!lstack) return ERROR_PTR("lstack not defined", __func__, NULL); if (lstack->n == 0) return NULL; lstack->n--; item = lstack->array[lstack->n]; return item; } /*! * \brief lstackExtendArray() * * \param[in] lstack * \return 0 if OK; 1 on error */ static l_int32 lstackExtendArray(L_STACK *lstack) { if (!lstack) return ERROR_INT("lstack not defined", __func__, 1); if ((lstack->array = (void **)reallocNew((void **)&lstack->array, sizeof(void *) * lstack->nalloc, 2 * sizeof(void *) * lstack->nalloc)) == NULL) return ERROR_INT("new lstack array not defined", __func__, 1); lstack->nalloc = 2 * lstack->nalloc; return 0; } /*! * \brief lstackGetCount() * * \param[in] lstack * \return count, or 0 on error */ l_int32 lstackGetCount(L_STACK *lstack) { if (!lstack) return ERROR_INT("lstack not defined", __func__, 1); return lstack->n; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * \brief lstackPrint() * * \param[in] fp file stream * \param[in] lstack * \return 0 if OK; 1 on error */ l_ok lstackPrint(FILE *fp, L_STACK *lstack) { l_int32 i; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!lstack) return ERROR_INT("lstack not defined", __func__, 1); fprintf(fp, "\n Stack: nalloc = %d, n = %d, array = %p\n", lstack->nalloc, lstack->n, lstack->array); for (i = 0; i < lstack->n; i++) fprintf(fp, "array[%d] = %p\n", i, lstack->array[i]); return 0; } leptonica-1.86.0/src/stack.h000066400000000000000000000061131506303110300156220ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_STACK_H #define LEPTONICA_STACK_H /*! * \file stack.h * *
 *       Expandable pointer stack for arbitrary void* data.
 *
 *       The L_Stack is an array of void * ptrs, onto which arbitrary
 *       objects can be stored.  At any time, the number of
 *       stored objects is stack->n.  The object at the bottom
 *       of the stack is at array[0]; the object at the top of
 *       the stack is at array[n-1].  New objects are added
 *       to the top of the stack, at the first available location,
 *       which is array[n].  Objects are removed from the top of the
 *       stack.  When an attempt is made to remove an object from an
 *       empty stack, the result is null.   When the stack becomes
 *       filled, so that n = nalloc, the size is doubled.
 *
 *       The auxiliary stack can be used to store and remove
 *       objects for re-use.  It must be created by a separate
 *       call to pstackCreate().  [Just imagine the chaos if
 *       pstackCreate() created the auxiliary stack!]
 *       pstackDestroy() checks for the auxiliary stack and removes it.
 * 
*/ /*! Expandable pointer stack for arbitrary void* data. * Note that array[n] is the first null ptr in the array */ struct L_Stack { l_int32 nalloc; /*!< size of ptr array */ l_int32 n; /*!< number of stored elements */ void **array; /*!< ptr array */ struct L_Stack *auxstack; /*!< auxiliary stack */ }; typedef struct L_Stack L_STACK; #endif /* LEPTONICA_STACK_H */ leptonica-1.86.0/src/stringcode.c000066400000000000000000000647031506303110300166620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file stringcode.c *
 *
 *   Generation of code for storing and extracting serializable
 *   leptonica objects (such as pixa, recog, ...).
 *
 *   The input is a set of files with serialized data.
 *   The output is two files, that must be compiled and linked:
 *     ~ autogen.*.c: code for base64 unencoding the strings and
 *                    deserializing the result.
 *     ~ autogen.*.h: function prototypes and base64 encoded strings
 *                    of the input data
 *
 *   This should work for any data structures in leptonica that have
 *   *Write() and *Read() serialization functions.  An array of 20
 *   of these, including the Pix, is given below.  (The Pix is a special
 *   case, because it is serialized by standardized compression
 *   techniques, instead of a file format determined by leptonica.)
 *
 *   Each time the generator function is invoked, three sets of strings are
 *   produced, which are written into their respective string arrays:
 *     ~ string of serialized, gzipped and base 64 encoded data
 *     ~ case string for base64 decoding, gunzipping and deserialization,
 *       to return the data struct in memory
 *     ~ description string for selecting which struct to return
 *   To create the two output files, a finalize function is invoked.
 *
 *   There are two ways to do this, both shown in prog/autogentest1.c.
 *     ~ Explicitly call strcodeGenerate() for each file with the
 *       serialized data structure, followed by strcodeFinalize().
 *     ~ Put the filenames of the serialized data structures in a file,
 *       and call strcodeCreateFromFile().
 *
 *   The generated code in autogen.X.c and autogen.X.h (where X is an
 *   integer supplied to strcodeCreate()) is then compiled, and the
 *   original data can be regenerated using the function l_autodecode_X().
 *   A test example is found in the two prog files:
 *       prog/autogentest1.c  -- generates autogen.137.c, autogen.137.h
 *       prog/autogentest2.c  -- uses autogen.137.c, autogen.137.h
 *   In general, the generator (e.g., autogentest1) would be compiled and
 *   run before compiling and running the application (e.g., autogentest2).
 *
 *       L_STRCODE       *strcodeCreate()
 *       static void      strcodeDestroy()    (called as part of finalize)
 *       void             strcodeCreateFromFile()
 *       l_int32          strcodeGenerate()
 *       l_int32          strcodeFinalize()
 *       l_int32          l_getStructStrFromFile()   (useful externally)
 *
 *   Static helpers
 *       static l_int32   l_getIndexFromType()
 *       static l_int32   l_getIndexFromStructname()
 *       static l_int32   l_getIndexFromFile()
 *       static char     *l_genDataString()
 *       static char     *l_genCaseString()
 *       static char     *l_genDescrString()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" #include "stringcode.h" #define TEMPLATE1 "stringtemplate1.txt" /* for assembling autogen.*.c */ #define TEMPLATE2 "stringtemplate2.txt" /* for assembling autogen.*.h */ /*! Associations between names and functions */ struct L_GenAssoc { l_int32 index; char type[16]; /* e.g., "PIXA" */ char structname[16]; /* e.g., "Pixa" */ char reader[16]; /* e.g., "pixaRead" */ char memreader[20]; /* e.g., "pixaReadMem" */ }; /*! Number of serializable data types */ static const l_int32 l_ntypes = 19; /*! Serializable data types */ static const struct L_GenAssoc l_assoc[] = { {0, "INVALID", "invalid", "invalid", "invalid" }, {1, "BOXA", "Boxa", "boxaRead", "boxaReadMem" }, {2, "BOXAA", "Boxaa", "boxaaRead", "boxaaReadMem" }, {3, "L_DEWARP", "Dewarp", "dewarpRead", "dewarpReadMem" }, {4, "L_DEWARPA", "Dewarpa", "dewarpaRead", "dewarpaReadMem" }, {5, "L_DNA", "L_Dna", "l_dnaRead", "l_dnaReadMem" }, {6, "L_DNAA", "L_Dnaa", "l_dnaaRead", "l_dnaaReadMem" }, {7, "DPIX", "DPix", "dpixRead", "dpixReadMem" }, {8, "FPIX", "FPix", "fpixRead", "fpixReadMem" }, {9, "NUMA", "Numa", "numaRead", "numaReadMem" }, {10, "NUMAA", "Numaa", "numaaRead", "numaaReadMem" }, {11, "PIX", "Pix", "pixRead", "pixReadMem" }, {12, "PIXA", "Pixa", "pixaRead", "pixaReadMem" }, {13, "PIXAA", "Pixaa", "pixaaRead", "pixaaReadMem" }, {14, "PIXACOMP", "Pixacomp", "pixacompRead", "pixacompReadMem" }, {15, "PIXCMAP", "Pixcmap", "pixcmapRead", "pixcmapReadMem" }, {16, "PTA", "Pta", "ptaRead", "ptaReadMem" }, {17, "PTAA", "Ptaa", "ptaaRead", "ptaaReadMem" }, {18, "RECOG", "Recog", "recogRead", "recogReadMem" }, {19, "SARRAY", "Sarray", "sarrayRead", "sarrayReadMem" } }; static l_int32 l_getIndexFromType(const char *type, l_int32 *pindex); static l_int32 l_getIndexFromStructname(const char *sn, l_int32 *pindex); static l_int32 l_getIndexFromFile(const char *file, l_int32 *pindex); static char *l_genDataString(const char *filein, l_int32 ifunc); static char *l_genCaseString(l_int32 ifunc, l_int32 itype); static char *l_genDescrString(const char *filein, l_int32 ifunc, l_int32 itype); /*---------------------------------------------------------------------*/ /* Stringcode functions */ /*---------------------------------------------------------------------*/ /*! * \brief strcodeCreate() * * \param[in] fileno integer that labels the two output files * \return initialized L_StrCode, or NULL on error * *
 * Notes:
 *      (1) This struct exists to build two files containing code for
 *          any number of data objects.  The two files are named
 *             autogen.[fileno].c
 *             autogen.[fileno].h
 * 
*/ L_STRCODE * strcodeCreate(l_int32 fileno) { L_STRCODE *strcode; lept_mkdir("lept/auto"); if ((strcode = (L_STRCODE *)LEPT_CALLOC(1, sizeof(L_STRCODE))) == NULL) return (L_STRCODE *)ERROR_PTR("strcode not made", __func__, NULL); strcode->fileno = fileno; strcode->function = sarrayCreate(0); strcode->data = sarrayCreate(0); strcode->descr = sarrayCreate(0); return strcode; } /*! * \brief strcodeDestroy() * * \param[out] pstrcode will be set to null after destroying the sarrays * \return void */ static void strcodeDestroy(L_STRCODE **pstrcode) { L_STRCODE *strcode; if (pstrcode == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((strcode = *pstrcode) == NULL) return; sarrayDestroy(&strcode->function); sarrayDestroy(&strcode->data); sarrayDestroy(&strcode->descr); LEPT_FREE(strcode); *pstrcode = NULL; } /*! * \brief strcodeCreateFromFile() * * \param[in] filein containing filenames of serialized data * \param[in] fileno integer that labels the two output files * \param[in] outdir [optional] if null, files are made in /tmp/lept/auto * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The %filein has one filename on each line.
 *          Comment lines begin with "#".
 *      (2) The output is 2 files:
 *             autogen.[fileno].c
 *             autogen.[fileno].h
 * 
*/ l_ok strcodeCreateFromFile(const char *filein, l_int32 fileno, const char *outdir) { char *fname; const char *type; l_uint8 *data; size_t nbytes; l_int32 i, n, index; SARRAY *sa; L_STRCODE *strcode; if (!filein) return ERROR_INT("filein not defined", __func__, 1); if ((data = l_binaryRead(filein, &nbytes)) == NULL) return ERROR_INT("data not read from file", __func__, 1); sa = sarrayCreateLinesFromString((char *)data, 0); LEPT_FREE(data); if (!sa) return ERROR_INT("sa not made", __func__, 1); if ((n = sarrayGetCount(sa)) == 0) { sarrayDestroy(&sa); return ERROR_INT("no filenames in the file", __func__, 1); } strcode = strcodeCreate(fileno); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if (fname[0] == '#') continue; if (l_getIndexFromFile(fname, &index)) { L_ERROR("File %s has no recognizable type\n", __func__, fname); } else { type = l_assoc[index].type; L_INFO("File %s is type %s\n", __func__, fname, type); strcodeGenerate(strcode, fname, type); } } strcodeFinalize(&strcode, outdir); sarrayDestroy(&sa); return 0; } /*! * \brief strcodeGenerate() * * \param[in] strcode for accumulating data * \param[in] filein input file with serialized data * \param[in] type of data; use the typedef string * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) The generated function name is
 *            l_autodecode_[fileno]()
 *          where [fileno] is the index label for the pair of output files.
 *      (2) To deserialize this data, the function is called with the
 *          argument 'ifunc', which increments each time strcodeGenerate()
 *          is called.
 * 
*/ l_ok strcodeGenerate(L_STRCODE *strcode, const char *filein, const char *type) { char *strdata, *strfunc, *strdescr; l_int32 itype; if (!strcode) return ERROR_INT("strcode not defined", __func__, 1); if (!filein) return ERROR_INT("filein not defined", __func__, 1); if (!type) return ERROR_INT("type not defined", __func__, 1); /* Get the index corresponding to type and validate */ if (l_getIndexFromType(type, &itype) == 1) return ERROR_INT("data type unknown", __func__, 1); /* Generate the encoded data string */ if ((strdata = l_genDataString(filein, strcode->ifunc)) == NULL) return ERROR_INT("strdata not made", __func__, 1); sarrayAddString(strcode->data, strdata, L_INSERT); /* Generate the case data for the decoding function */ strfunc = l_genCaseString(strcode->ifunc, itype); sarrayAddString(strcode->function, strfunc, L_INSERT); /* Generate row of table for function type selection */ strdescr = l_genDescrString(filein, strcode->ifunc, itype); sarrayAddString(strcode->descr, strdescr, L_INSERT); strcode->n++; strcode->ifunc++; return 0; } /*! * \brief strcodeFinalize() * * \param[in,out] pstrcode destroys and sets to null after .c and .h files * have been generated * \param[in] outdir [optional] if NULL, make files in /tmp/lept/auto * \return 0 if OK; 1 on error */ l_int32 strcodeFinalize(L_STRCODE **pstrcode, const char *outdir) { char buf[256]; char *filestr, *casestr, *descr, *datastr, *realoutdir; l_int32 actstart, end, newstart, fileno, nbytes; size_t size; L_STRCODE *strcode; SARRAY *sa1, *sa2, *sa3; lept_mkdir("lept/auto"); if (!pstrcode || *pstrcode == NULL) return ERROR_INT("No input data", __func__, 1); strcode = *pstrcode; if (!outdir) { L_INFO("no outdir specified; writing to /tmp/lept/auto\n", __func__); realoutdir = stringNew("/tmp/lept/auto"); } else { realoutdir = stringNew(outdir); } /* ------------------------------------------------------- */ /* Make the output autogen.*.c file */ /* ------------------------------------------------------- */ /* Make array of textlines from TEMPLATE1 */ filestr = (char *)l_binaryRead(TEMPLATE1, &size); sa1 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); sa3 = sarrayCreate(0); /* Copyright notice */ sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* File name comment */ fileno = strcode->fileno; snprintf(buf, sizeof(buf), " * autogen.%d.c", fileno); sarrayAddString(sa3, buf, L_COPY); /* More text */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Description of function types by index */ descr = sarrayToString(strcode->descr, 1); descr[strlen(descr) - 1] = '\0'; sarrayAddString(sa3, descr, L_INSERT); /* Includes */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); snprintf(buf, sizeof(buf), "#include \"autogen.%d.h\"", fileno); sarrayAddString(sa3, buf, L_COPY); /* Header for auto-generated deserializers */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Function name (as comment) */ snprintf(buf, sizeof(buf), " * \\brief l_autodecode_%d()", fileno); sarrayAddString(sa3, buf, L_COPY); /* Input and return values */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Function name */ snprintf(buf, sizeof(buf), "l_autodecode_%d(l_int32 index)", fileno); sarrayAddString(sa3, buf, L_COPY); /* Stack vars */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Declaration of nfunc on stack */ snprintf(buf, sizeof(buf), "l_int32 nfunc = %d;\n", strcode->n); sarrayAddString(sa3, buf, L_COPY); /* Declaration of PROCNAME */ snprintf(buf, sizeof(buf), " PROCNAME(\"l_autodecode_%d\");", fileno); sarrayAddString(sa3, buf, L_COPY); /* Test input variables */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Insert case string */ casestr = sarrayToString(strcode->function, 0); casestr[strlen(casestr) - 1] = '\0'; sarrayAddString(sa3, casestr, L_INSERT); /* End of function */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa1, actstart, end); /* Flatten to string and output to autogen*.c file */ filestr = sarrayToString(sa3, 1); nbytes = strlen(filestr); snprintf(buf, sizeof(buf), "%s/autogen.%d.c", realoutdir, fileno); l_binaryWrite(buf, "w", filestr, nbytes); LEPT_FREE(filestr); sarrayDestroy(&sa1); sarrayDestroy(&sa3); /* ------------------------------------------------------- */ /* Make the output autogen.*.h file */ /* ------------------------------------------------------- */ /* Make array of textlines from TEMPLATE2 */ filestr = (char *)l_binaryRead(TEMPLATE2, &size); sa2 = sarrayCreateLinesFromString(filestr, 1); LEPT_FREE(filestr); sa3 = sarrayCreate(0); /* Copyright notice */ sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* File name comment */ snprintf(buf, sizeof(buf), " * autogen.%d.h", fileno); sarrayAddString(sa3, buf, L_COPY); /* More text */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Beginning header protection */ snprintf(buf, sizeof(buf), "#ifndef LEPTONICA_AUTOGEN_%d_H\n" "#define LEPTONICA_AUTOGEN_%d_H", fileno, fileno); sarrayAddString(sa3, buf, L_COPY); /* Prototype header text */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Prototype declaration */ snprintf(buf, sizeof(buf), "void *l_autodecode_%d(l_int32 index);", fileno); sarrayAddString(sa3, buf, L_COPY); /* Prototype trailer text */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert serialized data strings */ datastr = sarrayToString(strcode->data, 1); datastr[strlen(datastr) - 1] = '\0'; sarrayAddString(sa3, datastr, L_INSERT); /* End header protection */ snprintf(buf, sizeof(buf), "#endif /* LEPTONICA_AUTOGEN_%d_H */", fileno); sarrayAddString(sa3, buf, L_COPY); /* Flatten to string and output to autogen*.h file */ filestr = sarrayToString(sa3, 1); nbytes = strlen(filestr); snprintf(buf, sizeof(buf), "%s/autogen.%d.h", realoutdir, fileno); l_binaryWrite(buf, "w", filestr, nbytes); LEPT_FREE(filestr); LEPT_FREE(realoutdir); sarrayDestroy(&sa2); sarrayDestroy(&sa3); /* Cleanup */ strcodeDestroy(pstrcode); return 0; } /*! * \brief l_getStructStrFromFile() * * \param[in] filename * \param[in] field (L_STR_TYPE, L_STR_NAME, L_STR_READER, L_STR_MEMREADER) * \param[out] pstr struct string for this file * \return 0 if found, 1 on error. * *
 * Notes:
 *      (1) For example, if %field == L_STR_NAME, and the file is a serialized
 *          pixa, this will return "Pixa", the name of the struct.
 *      (2) Caller must free the returned string.
 * 
*/ l_int32 l_getStructStrFromFile(const char *filename, l_int32 field, char **pstr) { l_int32 index; if (!pstr) return ERROR_INT("&str not defined", __func__, 1); *pstr = NULL; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (field != L_STR_TYPE && field != L_STR_NAME && field != L_STR_READER && field != L_STR_MEMREADER) return ERROR_INT("invalid field", __func__, 1); if (l_getIndexFromFile(filename, &index)) return ERROR_INT("index not retrieved", __func__, 1); if (field == L_STR_TYPE) *pstr = stringNew(l_assoc[index].type); else if (field == L_STR_NAME) *pstr = stringNew(l_assoc[index].structname); else if (field == L_STR_READER) *pstr = stringNew(l_assoc[index].reader); else /* field == L_STR_MEMREADER */ *pstr = stringNew(l_assoc[index].memreader); return 0; } /*---------------------------------------------------------------------*/ /* Static helpers */ /*---------------------------------------------------------------------*/ /*! * \brief l_getIndexFromType() * * \param[in] type e.g., "PIXA" * \param[out] pindex found index * \return 0 if found, 1 if not. * *
 * Notes:
 *      (1) For valid type, %found == true and %index > 0.
 * 
*/ static l_int32 l_getIndexFromType(const char *type, l_int32 *pindex) { l_int32 i, found; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!type) return ERROR_INT("type string not defined", __func__, 1); found = 0; for (i = 1; i <= l_ntypes; i++) { if (strcmp(type, l_assoc[i].type) == 0) { found = 1; *pindex = i; break; } } return !found; } /*! * \brief l_getIndexFromStructname() * * \param[in] sn structname e.g., "Pixa" * \param[out] pindex found index * \return 0 if found, 1 if not. * *
 * Notes:
 *      (1) This is used to identify the type of serialized file;
 *          the first word in the file is the structname.
 *      (2) For valid structname, %found == true and %index > 0.
 * 
*/ static l_int32 l_getIndexFromStructname(const char *sn, l_int32 *pindex) { l_int32 i, found; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!sn) return ERROR_INT("sn string not defined", __func__, 1); found = 0; for (i = 1; i <= l_ntypes; i++) { if (strcmp(sn, l_assoc[i].structname) == 0) { found = 1; *pindex = i; break; } } return !found; } /*! * \brief l_getIndexFromFile() * * \param[in] filename * \param[out] pindex found index * \return 0 if found, 1 on error. */ static l_int32 l_getIndexFromFile(const char *filename, l_int32 *pindex) { char buf[256]; char *word; FILE *fp; l_int32 notfound, format; SARRAY *sa; if (!pindex) return ERROR_INT("&index not defined", __func__, 1); *pindex = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); /* Open the stream, read lines until you find one with more * than a newline, and grab the first word. */ if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); do { if ((fgets(buf, sizeof(buf), fp)) == NULL) { fclose(fp); return ERROR_INT_1("fgets read fail", filename, __func__, 1); } } while (buf[0] == '\n'); fclose(fp); sa = sarrayCreateWordsFromString(buf); word = sarrayGetString(sa, 0, L_NOCOPY); /* Find the index associated with the word. If it is not * found, test to see if the file is a compressed pix. */ notfound = l_getIndexFromStructname(word, pindex); sarrayDestroy(&sa); if (notfound) { /* maybe a Pix */ if (findFileFormat(filename, &format) == 0) { l_getIndexFromStructname("Pix", pindex); } else { return ERROR_INT_1("no file type identified", filename, __func__, 1); } } return 0; } /*! * \brief l_genDataString() * * \param[in] filein input file of serialized data * \param[in] ifunc index into set of functions in output file * \return encoded ascii data string, or NULL on error reading from file */ static char * l_genDataString(const char *filein, l_int32 ifunc) { char buf[80]; char *cdata1, *cdata2, *cdata3; l_uint8 *data1, *data2; l_int32 csize1, csize2; size_t size1, size2; SARRAY *sa; if (!filein) return (char *)ERROR_PTR("filein not defined", __func__, NULL); /* Read it in, gzip it, encode, and reformat. We gzip because some * serialized data has a significant amount of ascii content. */ if ((data1 = l_binaryRead(filein, &size1)) == NULL) return (char *)ERROR_PTR("bindata not returned", __func__, NULL); data2 = zlibCompress(data1, size1, &size2); cdata1 = encodeBase64(data2, size2, &csize1); cdata2 = reformatPacked64(cdata1, csize1, 4, 72, 1, &csize2); LEPT_FREE(data1); LEPT_FREE(data2); LEPT_FREE(cdata1); /* Prepend the string declaration signature and put it together */ sa = sarrayCreate(3); snprintf(buf, sizeof(buf), "static const char *l_strdata_%d =\n", ifunc); sarrayAddString(sa, buf, L_COPY); sarrayAddString(sa, cdata2, L_INSERT); sarrayAddString(sa, ";\n", L_COPY); cdata3 = sarrayToString(sa, 0); sarrayDestroy(&sa); return cdata3; } /*! * \brief l_genCaseString() * * \param[in] ifunc index into set of functions in generated file * \param[in] itype index into type of function to be used * \return case string for this decoding function * *
 * Notes:
 *      (1) %ifunc and %itype have been validated, so no error can occur
 * 
*/ static char * l_genCaseString(l_int32 ifunc, l_int32 itype) { char buf[256]; char *code = NULL; snprintf(buf, sizeof(buf), " case %d:\n", ifunc); stringJoinIP(&code, buf); snprintf(buf, sizeof(buf), " data1 = decodeBase64(l_strdata_%d, strlen(l_strdata_%d), " "&size1);\n", ifunc, ifunc); stringJoinIP(&code, buf); stringJoinIP(&code, " data2 = zlibUncompress(data1, size1, &size2);\n"); snprintf(buf, sizeof(buf), " result = (void *)%s(data2, size2);\n", l_assoc[itype].memreader); stringJoinIP(&code, buf); stringJoinIP(&code, " lept_free(data1);\n"); stringJoinIP(&code, " lept_free(data2);\n"); stringJoinIP(&code, " break;\n"); return code; } /*! * \brief l_genDescrString() * * \param[in] filein input file of serialized data * \param[in] ifunc index into set of functions in generated file * \param[in] itype index into type of function to be used * \return description string for this decoding function */ static char * l_genDescrString(const char *filein, l_int32 ifunc, l_int32 itype) { char buf[256]; char *tail; if (!filein) return (char *)ERROR_PTR("filein not defined", __func__, NULL); splitPathAtDirectory(filein, NULL, &tail); snprintf(buf, sizeof(buf), " * %-2d %-10s %-14s %s", ifunc, l_assoc[itype].type, l_assoc[itype].reader, tail); LEPT_FREE(tail); return stringNew(buf); } leptonica-1.86.0/src/stringcode.h000066400000000000000000000054601506303110300166620ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_STRINGCODE_H #define LEPTONICA_STRINGCODE_H /*! * \file stringcode.h * * Data structure to hold accumulating generated code for storing * and extracting serializable leptonica objects (e.g., pixa, recog). * * Also a flag for selecting a string from the L_GenAssoc struct * in stringcode. */ struct L_StrCode { l_int32 fileno; /*!< index for function and output file names */ l_int32 ifunc; /*!< index into struct currently being stored */ SARRAY *function; /*!< store case code for extraction */ SARRAY *data; /*!< store base64 encoded data as strings */ SARRAY *descr; /*!< store line in description table */ l_int32 n; /*!< number of data strings */ }; typedef struct L_StrCode L_STRCODE; /*! Select string in stringcode for a specific serializable data type */ /*! Stringcode Select */ enum { L_STR_TYPE = 0, /*!< typedef for the data type */ L_STR_NAME = 1, /*!< name of the data type */ L_STR_READER = 2, /*!< reader to get the data type from file */ L_STR_MEMREADER = 3 /*!< reader to get the compressed string in memory */ }; #endif /* LEPTONICA_STRINGCODE_H */ leptonica-1.86.0/src/stringtemplate1.txt000066400000000000000000000070321506303110300202310ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* --- * autogen.*.c * * Automatically generated code for deserializing data from * compiled strings. * * Index Type Deserializer Filename * ----- ---- ------------ -------- --- * 0 PIXA pixaRead chars-6.pa --- * 1 PIXA pixaRead chars-10.pa */ #include #include "allheaders.h" --- #include "autogen.*.h" /*---------------------------------------------------------------------*/ /* Auto-generated deserializers */ /*---------------------------------------------------------------------*/ /*! --- * \brief l_autodecode_*() * * \param[in] index into array of functions * \return data struct e.g., pixa, in memory */ void * --- l_autodecode_*(l_int32 index) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; void *result = NULL; --- l_int32 nfunc = 2; --- --- PROCNAME("l_autodecode_*"); if (index < 0 || index >= nfunc) { L_ERROR("invalid index = %d; must be less than %d\n", __func__, index, nfunc); return NULL; } lept_mkdir("lept/auto"); /* Unencode the selected string, uncompress it, and read it */ switch (index) { --- case 0: --- data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); --- data2 = zlibUncompress(data1, size1, &size2); --- l_binaryWrite("/tmp/lept/auto/data.bin", "w", data2, size2); --- result = (void *)pixaRead("/tmp/lept/auto/data.bin"); --- lept_free(data1); --- lept_free(data2); --- break; --- case 1: --- data1 = decodeBase64(l_strdata_1, strlen(l_strdata_1), &size1); --- data2 = zlibUncompress(data1, size1, &size2); --- l_binaryWrite("/tmp/lept/auto/data.bin", "w", data2, size2); --- result = (void *)pixaRead("/tmp/lept/auto/data.bin"); --- lept_free(data1); --- lept_free(data2); --- break; default: L_ERROR("invalid index", __func__); } return result; } leptonica-1.86.0/src/stringtemplate2.txt000066400000000000000000000046451506303110300202410ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* --- * autogen.*.h * * Automatically generated function prototype and associated * encoded serialized strings. */ --- #ifndef LEPTONICA_AUTOGEN_*_H --- #define LEPTONICA_AUTOGEN_*_H /*---------------------------------------------------------------------*/ /* Function prototype */ /*---------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ --- void *l_autodecode_*(l_int32 index); #ifdef __cplusplus } #endif /* __cplusplus */ /*---------------------------------------------------------------------*/ /* Serialized strings */ /*---------------------------------------------------------------------*/ --- static const char *l_strdata_0 = --- "..."; --- static const char *l_strdata_1 = --- "..."; --- [etc] --- ---#endif /* LEPTONICA_AUTOGEN_*_H */ leptonica-1.86.0/src/strokes.c000066400000000000000000000335371506303110300162140ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file strokes.c *
 *
 *      Operations on 1 bpp images to:
 *      (1) measure stroke parameters, such as length and average width
 *      (2) change the average stroke width to a given value by eroding
 *          or dilating the image.
 *
 *      These operations are intended to operate on a single text
 *      character, to regularize the stroke width. It is expected
 *      that character matching by correlation, as used in the recog
 *      application, can often be improved by pre-processing both
 *      template and character images to a fixed stroke width.
 *
 *      Stroke parameter measurement
 *            l_int32      pixFindStrokeLength()
 *            l_int32      pixFindStrokeWidth()
 *            NUMA        *pixaFindStrokeWidth()
 *
 *      Stroke width regulation
 *            PIXA        *pixaModifyStrokeWidth()
 *            PIX         *pixModifyStrokeWidth()
 *            PIXA        *pixaSetStrokeWidth()
 *            PIX         *pixSetStrokeWidth()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /*-----------------------------------------------------------------* * Stroke parameter measurement * *-----------------------------------------------------------------*/ /*! * \brief pixFindStrokeLength() * * \param[in] pixs 1 bpp * \param[in] tab8 [optional] table for counting fg pixels; can be NULL * \param[out] plength estimated length of the strokes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Returns half the number of fg boundary pixels.
 * 
*/ l_ok pixFindStrokeLength(PIX *pixs, l_int32 *tab8, l_int32 *plength) { l_int32 n; l_int32 *tab; PIX *pix1; if (!plength) return ERROR_INT("&length not defined", __func__, 1); *plength = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pix1 = pixExtractBoundary(pixs, 1); tab = (tab8) ? tab8 : makePixelSumTab8(); pixCountPixels(pix1, &n, tab); *plength = n / 2; if (!tab8) LEPT_FREE(tab); pixDestroy(&pix1); return 0; } /*! * \brief pixFindStrokeWidth() * * \param[in] pixs 1 bpp * \param[in] thresh fractional count threshold relative to distance 1 * \param[in] tab8 [optional] table for counting fg pixels; can be NULL * \param[out] pwidth estimated width of the strokes * \param[out] pnahisto [optional] histo of pixel distances from bg * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This uses two methods to estimate the stroke width:
 *          (a) half the fg boundary length
 *          (b) a value derived from the histogram of the fg distance transform
 *      (2) Distance is measured in 8-connected
 *      (3) %thresh is the minimum fraction N(dist=d)/N(dist=1) of pixels
 *          required to determine if the pixels at distance d are above
 *          the noise. It is typically about 0.15.
 * 
*/ l_ok pixFindStrokeWidth(PIX *pixs, l_float32 thresh, l_int32 *tab8, l_float32 *pwidth, NUMA **pnahisto) { l_int32 i, n, count, length, first, last; l_int32 *tab; l_float32 width1, width2, ratio, extra; l_float32 *fa; NUMA *na1, *na2; PIX *pix1; if (!pwidth) return ERROR_INT("&width not defined", __func__, 1); *pwidth = 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); tab = (tab8) ? tab8 : makePixelSumTab8(); /* ------- Method 1: via boundary length ------- */ /* The computed stroke length is a bit larger than that actual * length, because of the addition of the 'caps' at the * stroke ends. Therefore the computed width is a bit * smaller than the average width. */ pixFindStrokeLength(pixs, tab8, &length); pixCountPixels(pixs, &count, tab8); width1 = (l_float32)count / (l_float32)length; /* ------- Method 2: via distance transform ------- */ /* First get the histogram of distances */ pix1 = pixDistanceFunction(pixs, 8, 8, L_BOUNDARY_BG); na1 = pixGetGrayHistogram(pix1, 1); pixDestroy(&pix1); numaGetNonzeroRange(na1, 0.1f, &first, &last); na2 = numaClipToInterval(na1, 0, last); numaWriteStderr(na2); /* Find the bucket with the largest distance whose contents * exceed the threshold. */ fa = numaGetFArray(na2, L_NOCOPY); n = numaGetCount(na2); for (i = n - 1; i > 0; i--) { ratio = fa[i] / fa[1]; if (ratio > thresh) break; } /* Let the last skipped bucket contribute to the stop bucket. * This is the 'extra' term below. The result may be a slight * over-correction, so the computed width may be a bit larger * than the average width. */ extra = (i < n - 1) ? fa[i + 1] / fa[1] : 0; width2 = 2.0f * (i - 1.0f + ratio + extra); lept_stderr("width1 = %5.2f, width2 = %5.2f\n", width1, width2); /* Average the two results */ *pwidth = (width1 + width2) / 2.0f; if (!tab8) LEPT_FREE(tab); numaDestroy(&na1); if (pnahisto) *pnahisto = na2; else numaDestroy(&na2); return 0; } /*! * \brief pixaFindStrokeWidth() * * \param[in] pixa of 1 bpp images * \param[in] thresh fractional count threshold relative to distance 1 * \param[in] tab8 [optional] table for counting fg pixels; can be NULL * \param[in] debug 1 for debug output; 0 to skip * \return na array of stroke widths for each pix in %pixa; NULL on error * *
 * Notes:
 *      (1) See pixFindStrokeWidth() for details.
 * 
*/ NUMA * pixaFindStrokeWidth(PIXA *pixa, l_float32 thresh, l_int32 *tab8, l_int32 debug) { l_int32 i, n, same, maxd; l_int32 *tab; l_float32 width; NUMA *na; PIX *pix; if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", __func__, NULL); pixaVerifyDepth(pixa, &same, &maxd); if (maxd > 1) return (NUMA *)ERROR_PTR("pix not all 1 bpp", __func__, NULL); tab = (tab8) ? tab8 : makePixelSumTab8(); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixFindStrokeWidth(pix, thresh, tab8, &width, NULL); numaAddNumber(na, width); pixDestroy(&pix); } if (!tab8) LEPT_FREE(tab); return na; } /*-----------------------------------------------------------------* * Change stroke width * *-----------------------------------------------------------------*/ /*! * \brief pixaModifyStrokeWidth() * * \param[in] pixas of 1 bpp pix * \param[out] targetw desired width for strokes in each pix * \return pixa with modified stroke widths, or NULL on error */ PIXA * pixaModifyStrokeWidth(PIXA *pixas, l_float32 targetw) { l_int32 i, n, same, maxd; l_float32 width; NUMA *na; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (targetw < 1) return (PIXA *)ERROR_PTR("target width < 1", __func__, NULL); pixaVerifyDepth(pixas, &same, &maxd); if (maxd > 1) return (PIXA *)ERROR_PTR("pix not all 1 bpp", __func__, NULL); na = pixaFindStrokeWidth(pixas, 0.1f, NULL, 0); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); numaGetFValue(na, i, &width); pix2 = pixModifyStrokeWidth(pix1, width, targetw); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } numaDestroy(&na); return pixad; } /*! * \brief pixModifyStrokeWidth() * * \param[in] pixs of 1 bpp pix * \param[in] width measured average stroke width * \param[in] targetw desired stroke width * \return pix with modified stroke width, or NULL on error */ PIX * pixModifyStrokeWidth(PIX *pixs, l_float32 width, l_float32 targetw) { char buf[32]; l_int32 diff, size; if (!pixs || (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (targetw < 1) return (PIX *)ERROR_PTR("target width < 1", __func__, NULL); diff = lept_roundftoi(targetw - width); if (diff == 0) return pixCopy(NULL, pixs); size = L_ABS(diff) + 1; if (diff < 0) /* erode */ snprintf(buf, sizeof(buf), "e%d.%d", size, size); else /* diff > 0; dilate */ snprintf(buf, sizeof(buf), "d%d.%d", size, size); return pixMorphSequence(pixs, buf, 0); } /*! * \brief pixaSetStrokeWidth() * * \param[in] pixas of 1 bpp pix * \param[in] width set stroke width to this value, in [1 ... 100]. * \param[in] thinfirst 1 to thin all pix to a skeleton first; 0 to skip * \param[in] connectivity 4 or 8, to be used if %thinfirst == 1 * \return pixa with all stroke widths being %width, or NULL on error * *
 * Notes:
 *      (1) If %thinfirst == 1, thin to a skeleton using the specified
 *          %connectivity.  Use %thinfirst == 0 if all pix in pixas
 *          have already been thinned as far as possible.
 *      (2) The image is dilated to the required %width.  This dilation
 *          is not connectivity preserving, so this is typically
 *          used in a situation where merging of c.c. in the individual
 *          pix is not a problem; e.g., where each pix is a single c.c.
 * 
*/ PIXA * pixaSetStrokeWidth(PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity) { l_int32 i, n, maxd, same; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (width < 1 || width > 100) return (PIXA *)ERROR_PTR("width not in [1 ... 100]", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIXA *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); pixaVerifyDepth(pixas, &same, &maxd); if (maxd > 1) return (PIXA *)ERROR_PTR("pix are not all 1 bpp", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixSetStrokeWidth(pix1, width, thinfirst, connectivity); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*! * \brief pixSetStrokeWidth() * * \param[in] pixs 1 bpp * \param[in] width set stroke width to this value, in [1 ... 100]. * \param[in] thinfirst 1 to thin all pix to a skeleton first; 0 to skip * \param[in] connectivity 4 or 8, to be used if %thinfirst == 1 * \return pixd with stroke width set to %width, or NULL on error * *
 * Notes:
 *      (1) See notes in pixaSetStrokeWidth().
 *      (2) A white border of sufficient width to avoid boundary
 *          artifacts in the thickening step is added before thinning.
 *      (3) %connectivity == 8 usually gives a slightly smoother result.
 * 
*/ PIX * pixSetStrokeWidth(PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity) { char buf[16]; l_int32 border; PIX *pix1, *pix2, *pixd; if (!pixs || (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", __func__, NULL); if (width < 1 || width > 100) return (PIX *)ERROR_PTR("width not in [1 ... 100]", __func__, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", __func__, NULL); if (!thinfirst && width == 1) /* nothing to do */ return pixCopy(NULL, pixs); /* Add a white border */ border = width / 2; pix1 = pixAddBorder(pixs, border, 0); /* Thin to a skeleton */ if (thinfirst) pix2 = pixThinConnected(pix1, L_THIN_FG, connectivity, 0); else pix2 = pixClone(pix1); pixDestroy(&pix1); /* Dilate */ snprintf(buf, sizeof(buf), "D%d.%d", width, width); pixd = pixMorphSequence(pix2, buf, 0); pixCopyText(pixd, pixs); pixDestroy(&pix2); return pixd; } leptonica-1.86.0/src/sudoku.c000066400000000000000000000663201506303110300160300ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file sudoku.c *
 *
 *      Solve a sudoku by brute force search
 *
 *      Read input data from file or string
 *          l_int32         *sudokuReadFile()
 *          l_int32         *sudokuReadString()
 *
 *      Create/destroy
 *          L_SUDOKU        *sudokuCreate()
 *          void             sudokuDestroy()
 *
 *      Solve the puzzle
 *          l_int32          sudokuSolve()
 *          static l_int32   sudokuValidState()
 *          static l_int32   sudokuNewGuess()
 *          static l_int32   sudokuTestState()
 *
 *      Test for uniqueness
 *          l_int32          sudokuTestUniqueness()
 *          static l_int32   sudokuCompareState()
 *          static l_int32  *sudokuRotateArray()
 *
 *      Generation
 *          L_SUDOKU        *sudokuGenerate()
 *
 *      Output
 *          l_int32          sudokuOutput()
 *
 *  Solving sudokus is a somewhat addictive pastime.  The rules are
 *  simple but it takes just enough concentration to make it rewarding
 *  when you find a number.  And you get 50 to 60 such rewards each time
 *  you complete one.  The downside is that you could have been doing
 *  something more creative, like keying out a new plant, staining
 *  the deck, or even writing a computer program to discourage your
 *  wife from doing sudokus.
 *
 *  My original plan for the sudoku solver was somewhat grandiose.
 *  The program would model the way a person solves the problem.
 *  It would examine each empty position and determine how many possible
 *  numbers could fit.  The empty positions would be entered in a priority
 *  queue keyed on the number of possible numbers that could fit.
 *  If there existed a position where only a single number would work,
 *  it would greedily take it.  Otherwise it would consider a
 *  positions that could accept two and make a guess, with backtracking
 *  if an impossible state were reached.  And so on.
 *
 *  Then one of my colleagues announced she had solved the problem
 *  by brute force and it was fast.  At that point the original plan was
 *  dead in the water, because the two top requirements for a leptonica
 *  algorithm are (1) as simple as possible and (2) fast.  The brute
 *  force approach starts at the UL corner, and in succession at each
 *  blank position it finds the first valid number (testing in
 *  sequence from 1 to 9).  When no number will fit a blank position
 *  it backtracks, choosing the next valid number in the previous
 *  blank position.
 *
 *  This is an inefficient method for pruning the space of solutions
 *  (imagine backtracking from the LR corner back to the UL corner
 *  and starting over with a new guess), but it nevertheless gets
 *  the job done quickly.  I have made no effort to optimize
 *  it, because it is fast: a 5-star (highest difficulty) sudoku might
 *  require a million guesses and take 0.05 sec.  (This BF implementation
 *  does about 20M guesses/sec at 3 GHz.)
 *
 *  Proving uniqueness of a sudoku solution is tricker than finding
 *  a solution (or showing that no solution exists).  A good indication
 *  that a solution is unique is if we get the same result solving
 *  by brute force when the puzzle is also rotated by 90, 180 and 270
 *  degrees.  If there are multiple solutions, it seems unlikely
 *  that you would get the same solution four times in a row, using a
 *  brute force method that increments guesses and scans LR/TB.
 *  The function sudokuTestUniqueness() does this.
 *
 *  And given a function that can determine uniqueness, it is
 *  easy to generate valid sudokus.  We provide sudokuGenerate(),
 *  which starts with some valid initial solution, and randomly
 *  removes numbers, stopping either when a minimum number of non-zero
 *  elements are left, or when it becomes difficult to remove another
 *  element without destroying the uniqueness of the solution.
 *
 *  For further reading, see the Wikipedia articles:
 *     (1) http://en.wikipedia.org/wiki/Algorithmics_of_sudoku
 *     (2) http://en.wikipedia.org/wiki/Sudoku
 *
 *  How many 9x9 sudokus are there?  Here are the numbers.
 *   ~ From ref(1), there are about 6 x 10^27 "latin squares", where
 *     each row and column has all 9 digits.
 *   ~ There are 7.2 x 10^21 actual solutions, having the added
 *     constraint in each of the 9 3x3 squares.  (The constraint
 *     reduced the number by the fraction 1.2 x 10^(-6).)
 *   ~ There are a mere 5.5 billion essentially different solutions (EDS),
 *     when symmetries (rotation, reflection, permutation and relabelling)
 *     are removed.
 *   ~ Thus there are 1.3 x 10^12 solutions that can be derived by
 *     symmetry from each EDS.  Can we account for these?
 *   ~ Sort-of.  From an EDS, you can derive (3!)^8 = 1.7 million solutions
 *     by simply permuting rows and columns.  (Do you see why it is
 *     not (3!)^6 ?)
 *   ~ Also from an EDS, you can derive 9! solutions by relabelling,
 *     and 4 solutions by rotation, for a total of 1.45 million solutions
 *     by relabelling and rotation.  Then taking the product, by symmetry
 *     we can derive 1.7M x 1.45M = 2.45 trillion solutions from each EDS.
 *     (Something is off by about a factor of 2 -- close enough.)
 *
 *  Another interesting fact is that there are apparently 48K EDS sudokus
 *  (with unique solutions) that have only 17 givens.  No sudokus are known
 *  with less than 17, but there exists no proof that this is the minimum.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" static l_int32 sudokuValidState(l_int32 *state); static l_int32 sudokuNewGuess(L_SUDOKU *sud); static l_int32 sudokuTestState(l_int32 *state, l_int32 index); static l_int32 sudokuCompareState(L_SUDOKU *sud1, L_SUDOKU *sud2, l_int32 quads, l_int32 *psame); static l_int32 *sudokuRotateArray(l_int32 *array, l_int32 quads); /* --------------------------------------------------------------- */ /* An example of a valid solution */ /* --------------------------------------------------------------- * static const char valid_solution[] = "3 8 7 2 6 4 1 9 5 " "2 6 5 8 9 1 4 3 7 " "1 4 9 5 3 7 6 8 2 " "5 2 3 7 1 6 8 4 9 " "7 1 6 9 4 8 2 5 3 " "8 9 4 3 5 2 7 1 6 " "9 7 2 1 8 5 3 6 4 " "4 3 1 6 7 9 5 2 8 " "6 5 8 4 2 3 9 7 1 "; */ /*---------------------------------------------------------------------* * Read input data from file or string * *---------------------------------------------------------------------*/ /*! * \brief sudokuReadFile() * * \param[in] filename formatted sudoku file * \return array of 81 numbers, or NULL on error * *
 * Notes:
 *      (1) The file format has:
 *          * any number of comment lines beginning with '#'
 *          * a set of 9 lines, each having 9 digits (0-9) separated
 *            by a space
 * 
*/ l_int32 * sudokuReadFile(const char *filename) { char *str, *strj; l_uint8 *data; l_int32 i, j, nlines, val, index, error; l_int32 *array; size_t size; SARRAY *saline, *sa1, *sa2; if (!filename) return (l_int32 *)ERROR_PTR("filename not defined", __func__, NULL); data = l_binaryRead(filename, &size); sa1 = sarrayCreateLinesFromString((char *)data, 0); sa2 = sarrayCreate(9); /* Filter out the comment lines; verify that there are 9 data lines */ nlines = sarrayGetCount(sa1); for (i = 0; i < nlines; i++) { str = sarrayGetString(sa1, i, L_NOCOPY); if (str[0] != '#') sarrayAddString(sa2, str, L_COPY); } LEPT_FREE(data); sarrayDestroy(&sa1); nlines = sarrayGetCount(sa2); if (nlines != 9) { sarrayDestroy(&sa2); L_ERROR("file has %d lines\n", __func__, nlines); return (l_int32 *)ERROR_PTR("invalid file", __func__, NULL); } /* Read the data into the array, verifying that each data * line has 9 numbers. */ error = FALSE; array = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); for (i = 0, index = 0; i < 9; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); saline = sarrayCreateWordsFromString(str); if (sarrayGetCount(saline) != 9) { error = TRUE; sarrayDestroy(&saline); break; } for (j = 0; j < 9; j++) { strj = sarrayGetString(saline, j, L_NOCOPY); if (sscanf(strj, "%d", &val) != 1) error = TRUE; else array[index++] = val; } sarrayDestroy(&saline); if (error) break; } sarrayDestroy(&sa2); if (error) { LEPT_FREE(array); return (l_int32 *)ERROR_PTR("invalid data", __func__, NULL); } return array; } /*! * \brief sudokuReadString() * * \param[in] str formatted input data * \return array of 81 numbers, or NULL on error * *
 * Notes:
 *      (1) The string is formatted as 81 single digits, each separated
 *          by 81 spaces.
 * 
*/ l_int32 * sudokuReadString(const char *str) { l_int32 i; l_int32 *array; if (!str) return (l_int32 *)ERROR_PTR("str not defined", __func__, NULL); /* Read in the initial solution */ array = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); for (i = 0; i < 81; i++) { if (sscanf(str + 2 * i, "%d ", &array[i]) != 1) { LEPT_FREE(array); return (l_int32 *)ERROR_PTR("invalid format", __func__, NULL); } } return array; } /*---------------------------------------------------------------------* * Create/destroy sudoku * *---------------------------------------------------------------------*/ /*! * \brief sudokuCreate() * * \param[in] array 81 numbers, 9 rows of 9 numbers each * \return l_sudoku, or NULL on error * *
 * Notes:
 *      (1) The input array has 0 for the unknown values, and 1-9
 *          for the known initial values.  It is generated from
 *          a file using sudokuReadInput(), which checks that the file
 *          data has 81 numbers in 9 rows.
 * 
*/ L_SUDOKU * sudokuCreate(l_int32 *array) { l_int32 i, val, locs_index; L_SUDOKU *sud; if (!array) return (L_SUDOKU *)ERROR_PTR("array not defined", __func__, NULL); locs_index = 0; /* into locs array */ sud = (L_SUDOKU *)LEPT_CALLOC(1, sizeof(L_SUDOKU)); sud->locs = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); sud->init = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); sud->state = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); for (i = 0; i < 81; i++) { val = array[i]; sud->init[i] = val; sud->state[i] = val; if (val == 0) sud->locs[locs_index++] = i; } sud->num = locs_index; sud->failure = FALSE; sud->finished = FALSE; return sud; } /*! * \brief sudokuDestroy() * * \param[in,out] psud will be set to null before returning * \return void */ void sudokuDestroy(L_SUDOKU **psud) { L_SUDOKU *sud; if (psud == NULL) { L_WARNING("ptr address is NULL\n", __func__); return; } if ((sud = *psud) == NULL) return; LEPT_FREE(sud->locs); LEPT_FREE(sud->init); LEPT_FREE(sud->state); LEPT_FREE(sud); *psud = NULL; } /*---------------------------------------------------------------------* * Solve the puzzle * *---------------------------------------------------------------------*/ /*! * \brief sudokuSolve() * * \param[in] sud l_sudoku starting in initial state * \return 1 on success, 0 on failure to solve note reversal of * typical unix returns */ l_int32 sudokuSolve(L_SUDOKU *sud) { if (!sud) return ERROR_INT("sud not defined", __func__, 0); if (!sudokuValidState(sud->init)) return ERROR_INT("initial state not valid", __func__, 0); while (1) { if (sudokuNewGuess(sud)) break; if (sud->finished == TRUE) break; } if (sud->failure == TRUE) { lept_stderr("Failure after %d guesses\n", sud->nguess); return 0; } lept_stderr("Solved after %d guesses\n", sud->nguess); return 1; } /*! * \brief sudokuValidState() * * \param[in] state array of size 81 * \return 1 if valid, 0 if invalid * *
 * Notes:
 *      (1) This can be used on either the initial state (init)
 *          or on the current state (state) of the l_soduku.
 *          All values of 0 are ignored.
 * 
*/ static l_int32 sudokuValidState(l_int32 *state) { l_int32 i; if (!state) return ERROR_INT("state not defined", __func__, 0); for (i = 0; i < 81; i++) { if (!sudokuTestState(state, i)) return 0; } return 1; } /*! * \brief sudokuNewGuess() * * \param[in] sud l_sudoku * \return 0 if OK; 1 if no solution is possible * *
 * Notes:
 *      (1) This attempts to increment the number in the current
 *          location.  If it can't, it backtracks (sets the number
 *          in the current location to zero and decrements the
 *          current location).  If it can, it tests that number,
 *          and if the number is valid, moves forward to the next
 *          empty location (increments the current location).
 *      (2) If there is no solution, backtracking will eventually
 *          exhaust possibilities for the first location.
 * 
*/ static l_int32 sudokuNewGuess(L_SUDOKU *sud) { l_int32 index, val, valid; l_int32 *locs, *state; locs = sud->locs; state = sud->state; index = locs[sud->current]; /* 0 to 80 */ val = state[index]; if (val == 9) { /* backtrack or give up */ if (sud->current == 0) { sud->failure = TRUE; return 1; } state[index] = 0; sud->current--; } else { /* increment current value and test */ sud->nguess++; state[index]++; valid = sudokuTestState(state, index); if (valid) { if (sud->current == sud->num - 1) { /* we're done */ sud->finished = TRUE; return 0; } else { /* advance to next position */ sud->current++; } } } return 0; } /*! * \brief sudokuTestState() * * \param[in] state current state: array of 81 values * \param[in] index into state element that we are testing * \return 1 if valid; 0 if invalid no error checking */ static l_int32 sudokuTestState(l_int32 *state, l_int32 index) { l_int32 i, j, val, row, rowstart, rowend, col; l_int32 blockrow, blockcol, blockstart, rowindex, locindex; if ((val = state[index]) == 0) /* automatically valid */ return 1; /* Test row. Test val is at (x, y) = (index % 9, index / 9) */ row = index / 9; rowstart = 9 * row; for (i = rowstart; i < index; i++) { if (state[i] == val) return 0; } rowend = rowstart + 9; for (i = index + 1; i < rowend; i++) { if (state[i] == val) return 0; } /* Test column */ col = index % 9; for (j = col; j < index; j += 9) { if (state[j] == val) return 0; } for (j = index + 9; j < 81; j += 9) { if (state[j] == val) return 0; } /* Test local 3x3 block */ blockrow = 3 * (row / 3); blockcol = 3 * (col / 3); blockstart = 9 * blockrow + blockcol; for (i = 0; i < 3; i++) { rowindex = blockstart + 9 * i; for (j = 0; j < 3; j++) { locindex = rowindex + j; if (index == locindex) continue; if (state[locindex] == val) return 0; } } return 1; } /*---------------------------------------------------------------------* * Test for uniqueness * *---------------------------------------------------------------------*/ /*! * \brief sudokuTestUniqueness() * * \param[in] array of 81 numbers, 9 lines of 9 numbers each * \param[out] punique 1 if unique, 0 if not * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This applies the brute force method to all four 90 degree
 *          rotations.  If there is more than one solution, it is highly
 *          unlikely that all four results will be the same;
 *          consequently, if they are the same, the solution is
 *          most likely to be unique.
 * 
*/ l_ok sudokuTestUniqueness(l_int32 *array, l_int32 *punique) { l_int32 same1, same2, same3; l_int32 *array1, *array2, *array3; L_SUDOKU *sud, *sud1, *sud2, *sud3; if (!punique) return ERROR_INT("&unique not defined", __func__, 1); *punique = 0; if (!array) return ERROR_INT("array not defined", __func__, 1); sud = sudokuCreate(array); sudokuSolve(sud); array1 = sudokuRotateArray(array, 1); sud1 = sudokuCreate(array1); sudokuSolve(sud1); array2 = sudokuRotateArray(array, 2); sud2 = sudokuCreate(array2); sudokuSolve(sud2); array3 = sudokuRotateArray(array, 3); sud3 = sudokuCreate(array3); sudokuSolve(sud3); sudokuCompareState(sud, sud1, 1, &same1); sudokuCompareState(sud, sud2, 2, &same2); sudokuCompareState(sud, sud3, 3, &same3); *punique = (same1 && same2 && same3); sudokuDestroy(&sud); sudokuDestroy(&sud1); sudokuDestroy(&sud2); sudokuDestroy(&sud3); LEPT_FREE(array1); LEPT_FREE(array2); LEPT_FREE(array3); return 0; } /*! * \brief sudokuCompareState() * * \param[in] sud1, sud2 two l_Sudoku states (solutions) * \param[in] quads rotation of sud2 input with respect to sud1, * in units of 90 degrees cw * \param[out] psame 1 if all 4 results are identical; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input to sud2 has been rotated by %quads relative to the
 *          input to sud1.  Therefore, we must rotate the solution to
 *          sud1 by the same amount before comparing it to the
 *          solution to sud2.
 * 
*/ static l_int32 sudokuCompareState(L_SUDOKU *sud1, L_SUDOKU *sud2, l_int32 quads, l_int32 *psame) { l_int32 i, same; l_int32 *array; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!sud1) return ERROR_INT("sud1 not defined", __func__, 1); if (!sud2) return ERROR_INT("sud1 not defined", __func__, 1); if (quads < 1 || quads > 3) return ERROR_INT("valid quads in {1,2,3}", __func__, 1); same = TRUE; if ((array = sudokuRotateArray(sud1->state, quads)) == NULL) return ERROR_INT("array not made", __func__, 1); for (i = 0; i < 81; i++) { if (array[i] != sud2->state[i]) { same = FALSE; break; } } *psame = same; LEPT_FREE(array); return 0; } /*! * \brief sudokuRotateArray() * * \param[in] array 81 numbers; 9 lines of 9 numbers each * \param[in] quads 1-3; number of 90 degree cw rotations * \return rarray rotated array, or NULL on error */ static l_int32 * sudokuRotateArray(l_int32 *array, l_int32 quads) { l_int32 i, j, sindex, dindex; l_int32 *rarray; if (!array) return (l_int32 *)ERROR_PTR("array not defined", __func__, NULL); if (quads < 1 || quads > 3) return (l_int32 *)ERROR_PTR("valid quads in {1,2,3}", __func__, NULL); rarray = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); if (quads == 1) { for (j = 0, dindex = 0; j < 9; j++) { for (i = 8; i >= 0; i--) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } else if (quads == 2) { for (i = 8, dindex = 0; i >= 0; i--) { for (j = 8; j >= 0; j--) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } else { /* quads == 3 */ for (j = 8, dindex = 0; j >= 0; j--) { for (i = 0; i < 9; i++) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } return rarray; } /*---------------------------------------------------------------------* * Generation * *---------------------------------------------------------------------*/ /*! * \brief sudokuGenerate() * * \param[in] array 81 numbers, 9 rows of 9 numbers each * \param[in] seed random number * \param[in] minelems min non-zero elements allowed; <= 80 * \param[in] maxtries max tries to remove a number and get a valid sudoku * \return l_sudoku, or NULL on error * *
 * Notes:
 *      (1) This is a brute force generator.  It starts with a completed
 *          sudoku solution and, by removing elements (setting them to 0),
 *          generates a valid (unique) sudoku initial condition.
 *      (2) The process stops when either %minelems, the minimum
 *          number of non-zero elements, is reached, or when the
 *          number of attempts to remove the next element exceeds %maxtries.
 *      (3) No sudoku is known with less than 17 nonzero elements.
 * 
*/ L_SUDOKU * sudokuGenerate(l_int32 *array, l_int32 seed, l_int32 minelems, l_int32 maxtries) { l_int32 index, sector, nzeros, removefirst, tries, val, oldval, unique; L_SUDOKU *sud, *testsud; if (!array) return (L_SUDOKU *)ERROR_PTR("array not defined", __func__, NULL); if (minelems > 80) return (L_SUDOKU *)ERROR_PTR("minelems must be < 81", __func__, NULL); /* Remove up to 30 numbers at random from the solution. * Test if the solution is valid -- the initial 'solution' may * have been invalid. Then test if the sudoku with 30 zeroes * is unique -- it almost always will be. */ srand(seed); nzeros = 0; sector = 0; removefirst = L_MIN(30, 81 - minelems); while (nzeros < removefirst) { genRandomIntOnInterval(0, 8, 0, &val); index = 27 * (sector / 3) + 3 * (sector % 3) + 9 * (val / 3) + (val % 3); if (array[index] == 0) continue; array[index] = 0; nzeros++; sector++; sector %= 9; } testsud = sudokuCreate(array); sudokuSolve(testsud); if (testsud->failure) { sudokuDestroy(&testsud); L_ERROR("invalid initial solution\n", __func__); return NULL; } sudokuTestUniqueness(testsud->init, &unique); sudokuDestroy(&testsud); if (!unique) { L_ERROR("non-unique result with 30 zeroes\n", __func__); return NULL; } /* Remove more numbers, testing at each removal for uniqueness. */ tries = 0; sector = 0; while (1) { if (tries > maxtries) break; if (81 - nzeros <= minelems) break; if (tries == 0) { lept_stderr("Trying %d zeros\n", nzeros); tries = 1; } /* Choose an element to be zeroed. We choose one * at random in succession from each of the nine sectors. */ genRandomIntOnInterval(0, 8, 0, &val); index = 27 * (sector / 3) + 3 * (sector % 3) + 9 * (val / 3) + (val % 3); sector++; sector %= 9; if (array[index] == 0) continue; /* Save the old value in case we need to revert */ oldval = array[index]; /* Is there a solution? If not, try again. */ array[index] = 0; testsud = sudokuCreate(array); sudokuSolve(testsud); if (testsud->failure == TRUE) { sudokuDestroy(&testsud); array[index] = oldval; /* revert */ tries++; continue; } /* Is the solution unique? If not, try again. */ sudokuTestUniqueness(testsud->init, &unique); sudokuDestroy(&testsud); if (!unique) { /* revert and try again */ array[index] = oldval; tries++; } else { /* accept this */ tries = 0; lept_stderr("Have %d zeros\n", nzeros); nzeros++; } } lept_stderr("Final: nelems = %d\n", 81 - nzeros); /* Show that we can recover the solution */ sud = sudokuCreate(array); sudokuOutput(sud, L_SUDOKU_INIT); sudokuSolve(sud); sudokuOutput(sud, L_SUDOKU_STATE); return sud; } /*---------------------------------------------------------------------* * Output * *---------------------------------------------------------------------*/ /*! * \brief sudokuOutput() * * \param[in] sud l_sudoku at any stage * \param[in] arraytype L_SUDOKU_INIT, L_SUDOKU_STATE * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Prints either the initial array or the current state
 *          of the solution.
 * 
*/ l_int32 sudokuOutput(L_SUDOKU *sud, l_int32 arraytype) { l_int32 i, j; l_int32 *array; if (!sud) return ERROR_INT("sud not defined", __func__, 1); if (arraytype == L_SUDOKU_INIT) array = sud->init; else if (arraytype == L_SUDOKU_STATE) array = sud->state; else return ERROR_INT("invalid arraytype", __func__, 1); for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) lept_stderr("%d ", array[9 * i + j]); lept_stderr("\n"); } return 0; } leptonica-1.86.0/src/sudoku.h000066400000000000000000000064351506303110300160360ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef SUDOKU_H_INCLUDED #define SUDOKU_H_INCLUDED /*! * \file sudoku.h * *
 *    The L_Sudoku holds all the information of the current state.
 *
 *    The input to sudokuCreate() is a file with any number of lines
 *    starting with '#', followed by 9 lines consisting of 9 numbers
 *    in each line.  These have the known values and use 0 for the unknowns.
 *    Blank lines are ignored.
 *
 *    The %locs array holds the indices of the unknowns, numbered
 *    left-to-right and top-to-bottom from 0 to 80.  The array size
 *    is initialized to %num.  %current is the index into the %locs
 *    array of the current guess: locs[current].
 *
 *    The %state array is used to determine the validity of each guess.
 *    It is of size 81, and is initialized by setting the unknowns to 0
 *    and the knowns to their input values.
 * 
*/ struct L_Sudoku { l_int32 num; /*!< number of unknowns */ l_int32 *locs; /*!< location of unknowns */ l_int32 current; /*!< index into %locs of current location */ l_int32 *init; /*!< initial state, with 0 representing */ /*!< the unknowns */ l_int32 *state; /*!< present state, including inits and */ /*!< guesses of unknowns up to %current */ l_int32 nguess; /*!< shows current number of guesses */ l_int32 finished; /*!< set to 1 when solved */ l_int32 failure; /*!< set to 1 if no solution is possible */ }; typedef struct L_Sudoku L_SUDOKU; /*! For printing out array data */ /*! Sudoku Output */ enum { L_SUDOKU_INIT = 0, L_SUDOKU_STATE = 1 }; #endif /* SUDOKU_H_INCLUDED */ leptonica-1.86.0/src/textops.c000066400000000000000000001150071506303110300162210ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file textops.c *
 *
 *    Font layout
 *       PIX             *pixAddSingleTextblock()
 *       PIX             *pixAddTextlines()
 *       l_int32          pixSetTextblock()
 *       l_int32          pixSetTextline()
 *       PIXA            *pixaAddTextNumber()
 *       PIXA            *pixaAddTextlines()
 *       l_int32          pixaAddPixWithText()
 *
 *    Text size estimation and partitioning
 *       SARRAY          *bmfGetLineStrings()
 *       NUMA            *bmfGetWordWidths()
 *       l_int32          bmfGetStringWidth()
 *
 *    Text splitting
 *       SARRAY          *splitStringToParagraphs()
 *       static l_int32   stringAllWhitespace()
 *       static l_int32   stringLeadingWhitespace()
 *
 *    This is a simple utility to put text on images.  One font and style
 *    is provided, with a variety of pt sizes.  For example, to put a
 *    line of green 10 pt text on an image, with the beginning baseline
 *    at (50, 50):
 *        L_Bmf  *bmf = bmfCreate(NULL, 10);
 *        const char *textstr = "This is a funny cat";
 *        pixSetTextline(pixs, bmf, textstr, 0x00ff0000, 50, 50, NULL, NULL);
 *
 *    The simplest interfaces for adding text to an image are
 *    pixAddTextlines() and pixAddSingleTextblock().
 *    For example, to add the same text in red, centered, below the image:
 *        Pix *pixd = pixAddTextlines(pixs, bmf, textstr, 0xff000000,
 *                                    L_ADD_BELOW);  // red text
 *
 *    To add text to all pix in a pixa, generating a new pixa, use
 *    either an sarray to hold the strings for each pix, or use the
 *    strings in the text field of each pix; e.g.,
 *        Pixa *pixa2 = pixaAddTextlines(pixa1, bmf, sa, 0x0000ff00,
 *                                    L_ADD_LEFT);  // blue text
 *        Pixa *pixa2 = pixaAddTextlines(pixa1, bmf, NULL, 0x00ff0000,
 *                                    L_ADD_RIGHT);  // green text
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_int32 stringAllWhitespace(char *textstr, l_int32 *pval); static l_int32 stringLeadingWhitespace(char *textstr, l_int32 *pval); /*---------------------------------------------------------------------* * Font layout * *---------------------------------------------------------------------*/ /*! * \brief pixAddSingleTextblock() * * \param[in] pixs input pix; colormap ok * \param[in] bmf bitmap font data * \param[in] textstr [optional] text string to be added * \param[in] val color to set the text * \param[in] location L_ADD_ABOVE, L_ADD_AT_TOP, * L_ADD_AT_BOT, L_ADD_BELOW * \param[out] poverflow [optional] 1 if text overflows allocated * region and is clipped; 0 otherwise * \return pixd new pix with rendered text, or either a copy, * or NULL on error * *
 * Notes:
 *      (1) This function paints a set of lines of text over an image.
 *          If %location is L_ADD_ABOVE or L_ADD_BELOW, the pix size
 *          is expanded with a border and rendered over the border.
 *      (2) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *      (3) If textstr == NULL, use the text field in the pix.
 *      (4) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 *      (5) Typical usage is for labelling a pix with some text data.
 * 
*/ PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow) { char *linestr; l_int32 w, h, d, i, y, xstart, ystart, extra, spacer, rval, gval, bval; l_int32 nlines, htext, ovf, overflow, offset, index; l_uint32 textcolor; PIX *pixd; PIXCMAP *cmap, *cmapd; SARRAY *salines; if (poverflow) *poverflow = 0; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (location != L_ADD_ABOVE && location != L_ADD_AT_TOP && location != L_ADD_AT_BOT && location != L_ADD_BELOW) return (PIX *)ERROR_PTR("invalid location", __func__, NULL); if (!bmf) { L_ERROR("no bitmap fonts; returning a copy\n", __func__); return pixCopy(NULL, pixs); } if (!textstr) textstr = pixGetText(pixs); if (!textstr) { L_WARNING("no textstring defined; returning a copy\n", __func__); return pixCopy(NULL, pixs); } /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; xstart = (l_int32)(0.1 * w); salines = bmfGetLineStrings(bmf, textstr, w - 2 * xstart, 0, &htext); if (!salines) return (PIX *)ERROR_PTR("line string sa not made", __func__, NULL); nlines = sarrayGetCount(salines); /* Add white border if required */ spacer = 10; /* pixels away from image boundary or added border */ if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { extra = htext + 2 * spacer; pixd = pixCreate(w, h + extra, d); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyText(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_ABOVE) pixRasterop(pixd, 0, extra, w, h, PIX_SRC, pixs, 0, 0); else /* add below */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } else { pixd = pixCopy(NULL, pixs); } cmapd = pixGetColormap(pixd); /* bmf->baselinetab[93] is the approximate distance from * the top of the tallest character to the baseline. 93 was chosen * at random, as all the baselines are essentially equal for * each character in a font. */ offset = bmf->baselinetab[93]; if (location == L_ADD_ABOVE || location == L_ADD_AT_TOP) ystart = offset + spacer; else if (location == L_ADD_AT_BOT) ystart = h - htext - spacer + offset; else /* add below */ ystart = h + offset + spacer; /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ if (cmapd) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); pixcmapGetColor(cmapd, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else { textcolor = val; } /* Keep track of overflow condition on line width */ overflow = 0; for (i = 0, y = ystart; i < nlines; i++) { linestr = sarrayGetString(salines, i, L_NOCOPY); pixSetTextline(pixd, bmf, linestr, textcolor, xstart, y, NULL, &ovf); y += bmf->lineheight + bmf->vertlinesep; if (ovf) overflow = 1; } /* Also consider vertical overflow where there is too much text to * fit inside the image: the cases L_ADD_AT_TOP and L_ADD_AT_BOT. * The text requires a total of htext + 2 * spacer vertical pixels. */ if (location == L_ADD_AT_TOP || location == L_ADD_AT_BOT) { if (h < htext + 2 * spacer) overflow = 1; } if (poverflow) *poverflow = overflow; sarrayDestroy(&salines); return pixd; } /*! * \brief pixAddTextlines() * * \param[in] pixs input pix; colormap ok * \param[in] bmf bitmap font data * \param[in] textstr [optional] text string to be added * \param[in] val color to set the text * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT * \return pixd new pix with rendered text, or either a copy, * or NULL on error * *
 * Notes:
 *      (1) This function expands an image as required to paint one or
 *          more lines of text adjacent to the image.  If %bmf == NULL,
 *          this returns a copy.  If above or below, the lines are
 *          centered with respect to the image; if left or right, they
 *          are left justified.
 *      (2) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *      (3) If textstr == NULL, use the text field in the pix.  The
 *          text field contains one or most "lines" of text, where newlines
 *          are used as line separators.
 *      (4) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 *      (5) Typical usage is for labelling a pix with some text data.
 * 
*/ PIX * pixAddTextlines(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location) { char *str; l_int32 i, w, h, d, rval, gval, bval, index; l_int32 wline, wtext, htext, wadd, hadd, spacer, hbaseline, nlines; l_uint32 textcolor; PIX *pixd; PIXCMAP *cmap, *cmapd; SARRAY *sa; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIX *)ERROR_PTR("invalid location", __func__, NULL); if (!bmf) { L_ERROR("no bitmap fonts; returning a copy\n", __func__); return pixCopy(NULL, pixs); } if (!textstr) { textstr = pixGetText(pixs); if (!textstr) { L_WARNING("no textstring defined; returning a copy\n", __func__); return pixCopy(NULL, pixs); } } /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; /* Get the text in each line */ sa = sarrayCreateLinesFromString(textstr, 0); nlines = sarrayGetCount(sa); /* Get the necessary text size */ wtext = 0; for (i = 0; i < nlines; i++) { str = sarrayGetString(sa, i, L_NOCOPY); bmfGetStringWidth(bmf, str, &wline); if (wline > wtext) wtext = wline; } hbaseline = bmf->baselinetab[93]; htext = 1.5 * hbaseline * nlines; /* Add white border */ spacer = 10; /* pixels away from the added border */ if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { hadd = htext + 2 * spacer; pixd = pixCreate(w, h + hadd, d); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyText(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_ABOVE) pixRasterop(pixd, 0, hadd, w, h, PIX_SRC, pixs, 0, 0); else /* add below */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } else { /* L_ADD_LEFT or L_ADD_RIGHT */ wadd = wtext + 2 * spacer; pixd = pixCreate(w + wadd, h, d); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyText(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_LEFT) pixRasterop(pixd, wadd, 0, w, h, PIX_SRC, pixs, 0, 0); else /* add to right */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ cmapd = pixGetColormap(pixd); if (cmapd) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); pixcmapGetColor(cmapd, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else { textcolor = val; } /* Add the text */ for (i = 0; i < nlines; i++) { str = sarrayGetString(sa, i, L_NOCOPY); bmfGetStringWidth(bmf, str, &wtext); if (location == L_ADD_ABOVE) pixSetTextline(pixd, bmf, str, textcolor, (w - wtext) / 2, spacer + hbaseline * (1 + 1.5 * i), NULL, NULL); else if (location == L_ADD_BELOW) pixSetTextline(pixd, bmf, str, textcolor, (w - wtext) / 2, h + spacer + hbaseline * (1 + 1.5 * i), NULL, NULL); else if (location == L_ADD_LEFT) pixSetTextline(pixd, bmf, str, textcolor, spacer, (h - htext) / 2 + hbaseline * (1 + 1.5 * i), NULL, NULL); else /* location == L_ADD_RIGHT */ pixSetTextline(pixd, bmf, str, textcolor, w + spacer, (h - htext) / 2 + hbaseline * (1 + 1.5 * i), NULL, NULL); } sarrayDestroy(&sa); return pixd; } /*! * \brief pixSetTextblock() * * \param[in] pixs input image * \param[in] bmf bitmap font data * \param[in] textstr block text string to be set * \param[in] val color to set the text * \param[in] x0 left edge for each line of text * \param[in] y0 baseline location for the first text line * \param[in] wtext max width of each line of generated text * \param[in] firstindent indentation of first line, in x-widths * \param[out] poverflow [optional] 0 if text is contained in input pix; * 1 if it is clipped * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function paints a set of lines of text over an image.
 *      (2) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *          The last two hex digits are 00 (byte value 0), assigned to
 *          the A component.  Note that, as usual, RGBA proceeds from
 *          left to right in the order from MSB to LSB (see pix.h
 *          for details).
 *      (3) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 * 
*/ l_ok pixSetTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow) { char *linestr; l_int32 d, h, i, w, x, y, nlines, htext, xwidth, wline, ovf, overflow; SARRAY *salines; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); if (!textstr) return ERROR_INT("textstr not defined", __func__, 1); /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; if (w < x0 + wtext) { L_WARNING("reducing width of textblock\n", __func__); wtext = w - x0 - w / 10; if (wtext <= 0) return ERROR_INT("wtext too small; no room for text", __func__, 1); } salines = bmfGetLineStrings(bmf, textstr, wtext, firstindent, &htext); if (!salines) return ERROR_INT("line string sa not made", __func__, 1); nlines = sarrayGetCount(salines); bmfGetWidth(bmf, 'x', &xwidth); y = y0; overflow = 0; for (i = 0; i < nlines; i++) { if (i == 0) x = x0 + firstindent * xwidth; else x = x0; linestr = sarrayGetString(salines, i, L_NOCOPY); pixSetTextline(pixs, bmf, linestr, val, x, y, &wline, &ovf); y += bmf->lineheight + bmf->vertlinesep; if (ovf) overflow = 1; } /* (y0 - baseline) is the top of the printed text. Character * 93 was chosen at random, as all the baselines are essentially * equal for each character in a font. */ if (h < y0 - bmf->baselinetab[93] + htext) overflow = 1; if (poverflow) *poverflow = overflow; sarrayDestroy(&salines); return 0; } /*! * \brief pixSetTextline() * * \param[in] pixs input image * \param[in] bmf bitmap font data * \param[in] textstr text string to be set on the line * \param[in] val color to set the text * \param[in] x0 left edge for first char * \param[in] y0 baseline location for all text on line * \param[out] pwidth [optional] width of generated text * \param[out] poverflow [optional] 0 if text is contained in input pix; * 1 if it is clipped * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This function paints a line of text over an image.
 *      (2) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *          The last two hex digits are 00 (byte value 0), assigned to
 *          the A component.  Note that, as usual, RGBA proceeds from
 *          left to right in the order from MSB to LSB (see pix.h
 *          for details).
 *      (3) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 * 
*/ l_ok pixSetTextline(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow) { char chr; l_int32 d, i, x, w, nchar, baseline, index, rval, gval, bval; l_uint32 textcolor; PIX *pix; PIXCMAP *cmap; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); if (!textstr) return ERROR_INT("teststr not defined", __func__, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ if (cmap) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmap, rval, gval, bval, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else textcolor = val; nchar = strlen(textstr); x = x0; for (i = 0; i < nchar; i++) { chr = textstr[i]; if ((l_int32)chr == 10) continue; /* NL */ pix = bmfGetPix(bmf, chr); bmfGetBaseline(bmf, chr, &baseline); pixPaintThroughMask(pixs, pix, x, y0 - baseline, textcolor); w = pixGetWidth(pix); x += w + bmf->kernwidth; pixDestroy(&pix); } if (pwidth) *pwidth = x - bmf->kernwidth - x0; if (poverflow) *poverflow = (x > pixGetWidth(pixs) - 1) ? 1 : 0; return 0; } /*! * \brief pixaAddTextNumber() * * \param[in] pixas input pixa; colormap ok * \param[in] bmf bitmap font data * \param[in] na [optional] number array; use 1 ... n if null * \param[in] val color to set the text * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT * \return pixad new pixa with rendered numbers, or NULL on error * *
 * Notes:
 *      (1) Typical usage is for labelling each pix in a pixa with a number.
 *      (2) This function paints numbers external to each pix, in a position
 *          given by %location.  In all cases, the pix is expanded on
 *          on side and the number is painted over white in the added region.
 *      (3) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *      (4) If na == NULL, number each pix sequentially, starting with 1.
 *      (5) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 * 
*/ PIXA * pixaAddTextNumber(PIXA *pixas, L_BMF *bmf, NUMA *na, l_uint32 val, l_int32 location) { char textstr[128]; l_int32 i, n, index; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!bmf) return (PIXA *)ERROR_PTR("bmf not defined", __func__, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIXA *)ERROR_PTR("invalid location", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (na) numaGetIValue(na, i, &index); else index = i + 1; snprintf(textstr, sizeof(textstr), "%d", index); pix2 = pixAddTextlines(pix1, bmf, textstr, val, location); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*! * \brief pixaAddTextlines() * * \param[in] pixas input pixa; colormap ok * \param[in] bmf bitmap font data * \param[in] sa [optional] sarray; use text embedded in * each pix if null * \param[in] val color to set the text * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT * \return pixad new pixa with rendered text, or NULL on error * *
 * Notes:
 *      (1) This function adds one or more lines of text externally to
 *          each pix, in a position given by %location.  In all cases,
 *          the pix is expanded as necessary to accommodate the text.
 *      (2) %val is the pixel value to be painted through the font mask.
 *          It should be chosen to agree with the depth of pixs.
 *          If it is out of bounds, an intermediate value is chosen.
 *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
 *          hex representation of the red intensity, etc.
 *      (3) If sa == NULL, use the text embedded in each pix.  In all
 *          cases, newlines in the text string are used to separate the
 *          lines of text that are added to the pix.
 *      (4) If sa has a smaller count than pixa, issue a warning
 *          and do not use any embedded text.
 *      (5) If there is a colormap, this does the best it can to use
 *          the requested color, or something similar to it.
 * 
*/ PIXA * pixaAddTextlines(PIXA *pixas, L_BMF *bmf, SARRAY *sa, l_uint32 val, l_int32 location) { char *textstr; l_int32 i, n, nstr; PIX *pix1, *pix2; PIXA *pixad; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", __func__, NULL); if (!bmf) return (PIXA *)ERROR_PTR("bmf not defined", __func__, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIXA *)ERROR_PTR("invalid location", __func__, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); nstr = (sa) ? sarrayGetCount(sa) : 0; if (nstr > 0 && nstr < n) L_WARNING("There are %d strings and %d pix\n", __func__, nstr, n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (i < nstr) textstr = sarrayGetString(sa, i, L_NOCOPY); else textstr = pixGetText(pix1); pix2 = pixAddTextlines(pix1, bmf, textstr, val, location); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*! * \brief pixaAddPixWithText() * * \param[in] pixa * \param[in] pixs any depth, colormap ok * \param[in] reduction integer subsampling factor * \param[in] bmf [optional] bitmap font data * \param[in] textstr [optional] text string to be added * \param[in] val color to set the text * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT * \return 0 if OK, 1 on error. * *
 * Notes:
 *      (1) This function generates a new pix with added text, and adds
 *          it by insertion into the pixa.
 *      (2) If the input pixs is not cmapped and not 32 bpp, it is
 *          converted to 32 bpp rgb.  %val is a standard 32 bpp pixel,
 *          expressed as 0xrrggbb00.  If there is a colormap, this does
 *          the best it can to use the requested color, or something close.
 *      (3) if %bmf == NULL, generate an 8 pt font; this takes about 5 msec.
 *      (4) If %textstr == NULL, use the text field in the pix.
 *      (5) In general, the text string can be written in multiple lines;
 *          use newlines as the separators.
 *      (6) Typical usage is for debugging, where the pixa of labeled images
 *          is used to generate a pdf.  Suggest using 1.0 for scalefactor.
 * 
*/ l_ok pixaAddPixWithText(PIXA *pixa, PIX *pixs, l_int32 reduction, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location) { l_int32 d; L_BMF *bmf8; PIX *pix1, *pix2, *pix3; PIXCMAP *cmap; if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return ERROR_INT("invalid location", __func__, 1); if (!textstr) { textstr = pixGetText(pixs); if (!textstr) { L_WARNING("no textstring defined; inserting copy", __func__); pixaAddPix(pixa, pixs, L_COPY); return 0; } } /* Default font size is 8. */ bmf8 = (bmf) ? bmf : bmfCreate(NULL, 8); if (reduction != 1) pix1 = pixScaleByIntSampling(pixs, reduction); else pix1 = pixClone(pixs); /* We want the text to be rendered in color. This works * automatically if pixs is cmapped or 32 bpp rgb; otherwise, * we need to convert to rgb. */ cmap = pixGetColormap(pix1); d = pixGetDepth(pix1); if (!cmap && d != 32) pix2 = pixConvertTo32(pix1); else pix2 = pixClone(pix1); pix3 = pixAddTextlines(pix2, bmf, textstr, val, location); pixDestroy(&pix1); pixDestroy(&pix2); if (!bmf) bmfDestroy(&bmf8); if (!pix3) return ERROR_INT("pix3 not made", __func__, 1); pixaAddPix(pixa, pix3, L_INSERT); return 0; } /*---------------------------------------------------------------------* * Text size estimation and partitioning * *---------------------------------------------------------------------*/ /*! * \brief bmfGetLineStrings() * * \param[in] bmf * \param[in] textstr * \param[in] maxw max width of a text line in pixels * \param[in] firstindent indentation of first line, in x-widths * \param[out] ph height required to hold text bitmap * \return sarray of text strings for each line, or NULL on error * *
 * Notes:
 *      (1) Divides the input text string into an array of text strings,
 *          each of which will fit within maxw bits of width.
 * 
*/ SARRAY * bmfGetLineStrings(L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph) { char *linestr; l_int32 i, ifirst, sumw, newsum, w, nwords, nlines, len, xwidth; NUMA *na; SARRAY *sa, *sawords; if (!bmf) return (SARRAY *)ERROR_PTR("bmf not defined", __func__, NULL); if (!textstr) return (SARRAY *)ERROR_PTR("teststr not defined", __func__, NULL); if ((sawords = sarrayCreateWordsFromString(textstr)) == NULL) return (SARRAY *)ERROR_PTR("sawords not made", __func__, NULL); if ((na = bmfGetWordWidths(bmf, textstr, sawords)) == NULL) { sarrayDestroy(&sawords); return (SARRAY *)ERROR_PTR("na not made", __func__, NULL); } nwords = numaGetCount(na); if (nwords == 0) { sarrayDestroy(&sawords); numaDestroy(&na); return (SARRAY *)ERROR_PTR("no words in textstr", __func__, NULL); } bmfGetWidth(bmf, 'x', &xwidth); sa = sarrayCreate(0); ifirst = 0; numaGetIValue(na, 0, &w); sumw = firstindent * xwidth + w; for (i = 1; i < nwords; i++) { numaGetIValue(na, i, &w); newsum = sumw + bmf->spacewidth + w; if (newsum > maxw) { linestr = sarrayToStringRange(sawords, ifirst, i - ifirst, 2); if (!linestr) continue; len = strlen(linestr); if (len > 0) /* it should always be */ linestr[len - 1] = '\0'; /* remove the last space */ sarrayAddString(sa, linestr, L_INSERT); ifirst = i; sumw = w; } else sumw += bmf->spacewidth + w; } linestr = sarrayToStringRange(sawords, ifirst, nwords - ifirst, 2); if (linestr) sarrayAddString(sa, linestr, L_INSERT); nlines = sarrayGetCount(sa); *ph = nlines * bmf->lineheight + (nlines - 1) * bmf->vertlinesep; sarrayDestroy(&sawords); numaDestroy(&na); return sa; } /*! * \brief bmfGetWordWidths() * * \param[in] bmf * \param[in] textstr * \param[in] sa of individual words * \return numa of word lengths in pixels for the font represented * by the bmf, or NULL on error */ NUMA * bmfGetWordWidths(L_BMF *bmf, const char *textstr, SARRAY *sa) { char *wordstr; l_int32 i, nwords, width; NUMA *na; if (!bmf) return (NUMA *)ERROR_PTR("bmf not defined", __func__, NULL); if (!textstr) return (NUMA *)ERROR_PTR("teststr not defined", __func__, NULL); if (!sa) return (NUMA *)ERROR_PTR("sa not defined", __func__, NULL); nwords = sarrayGetCount(sa); if ((na = numaCreate(nwords)) == NULL) return (NUMA *)ERROR_PTR("na not made", __func__, NULL); for (i = 0; i < nwords; i++) { wordstr = sarrayGetString(sa, i, L_NOCOPY); bmfGetStringWidth(bmf, wordstr, &width); numaAddNumber(na, width); } return na; } /*! * \brief bmfGetStringWidth() * * \param[in] bmf * \param[in] textstr * \param[out] pw width of text string, in pixels for the * font represented by the bmf * \return 0 if OK, 1 on error */ l_ok bmfGetStringWidth(L_BMF *bmf, const char *textstr, l_int32 *pw) { char chr; l_int32 i, w, width, nchar; if (!bmf) return ERROR_INT("bmf not defined", __func__, 1); if (!textstr) return ERROR_INT("teststr not defined", __func__, 1); if (!pw) return ERROR_INT("&w not defined", __func__, 1); nchar = strlen(textstr); w = 0; for (i = 0; i < nchar; i++) { chr = textstr[i]; bmfGetWidth(bmf, chr, &width); if (width != UNDEF) w += width + bmf->kernwidth; } w -= bmf->kernwidth; /* remove last one */ *pw = w; return 0; } /*---------------------------------------------------------------------* * Text splitting * *---------------------------------------------------------------------*/ /*! * \brief splitStringToParagraphs() * * \param[in] textstr text string * \param[in] splitflag see enum in bmf.h; valid values in {1,2,3} * \return sarray where each string is a paragraph of the input, * or NULL on error. */ SARRAY * splitStringToParagraphs(char *textstr, l_int32 splitflag) { char *linestr, *parastring; l_int32 nlines, i, allwhite, leadwhite; SARRAY *salines, *satemp, *saout; if (!textstr) return (SARRAY *)ERROR_PTR("textstr not defined", __func__, NULL); if ((salines = sarrayCreateLinesFromString(textstr, 1)) == NULL) return (SARRAY *)ERROR_PTR("salines not made", __func__, NULL); nlines = sarrayGetCount(salines); saout = sarrayCreate(0); satemp = sarrayCreate(0); linestr = sarrayGetString(salines, 0, L_NOCOPY); sarrayAddString(satemp, linestr, L_COPY); for (i = 1; i < nlines; i++) { linestr = sarrayGetString(salines, i, L_NOCOPY); stringAllWhitespace(linestr, &allwhite); stringLeadingWhitespace(linestr, &leadwhite); if ((splitflag == SPLIT_ON_LEADING_WHITE && leadwhite) || (splitflag == SPLIT_ON_BLANK_LINE && allwhite) || (splitflag == SPLIT_ON_BOTH && (allwhite || leadwhite))) { parastring = sarrayToString(satemp, 1); /* add nl to each line */ sarrayAddString(saout, parastring, L_INSERT); sarrayDestroy(&satemp); satemp = sarrayCreate(0); } sarrayAddString(satemp, linestr, L_COPY); } parastring = sarrayToString(satemp, 1); /* add nl to each line */ sarrayAddString(saout, parastring, L_INSERT); sarrayDestroy(&satemp); sarrayDestroy(&salines); return saout; } /*! * \brief stringAllWhitespace() * * \param[in] textstr text string * \param[out] pval 1 if all whitespace; 0 otherwise * \return 0 if OK, 1 on error */ static l_int32 stringAllWhitespace(char *textstr, l_int32 *pval) { l_int32 len, i; if (!textstr) return ERROR_INT("textstr not defined", __func__, 1); if (!pval) return ERROR_INT("&va not defined", __func__, 1); len = strlen(textstr); *pval = 1; for (i = 0; i < len; i++) { if (textstr[i] != ' ' && textstr[i] != '\t' && textstr[i] != '\n') { *pval = 0; return 0; } } return 0; } /*! * \brief stringLeadingWhitespace() * * \param[in] textstr text string * \param[out] pval 1 if leading char is [space] or [tab]; 0 otherwise * \return 0 if OK, 1 on error */ static l_int32 stringLeadingWhitespace(char *textstr, l_int32 *pval) { if (!textstr) return ERROR_INT("textstr not defined", __func__, 1); if (!pval) return ERROR_INT("&va not defined", __func__, 1); *pval = 0; if (textstr[0] == ' ' || textstr[0] == '\t') *pval = 1; return 0; } leptonica-1.86.0/src/tiffio.c000066400000000000000000003040011506303110300157650ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file tiffio.c *
 *
 *     TIFFClientOpen() wrappers for FILE*:
 *      static tsize_t    lept_read_proc()
 *      static tsize_t    lept_write_proc()
 *      static toff_t     lept_seek_proc()
 *      static int        lept_close_proc()
 *      static toff_t     lept_size_proc()
 *
 *     Reading tiff:
 *             PIX       *pixReadTiff()             [ special top level ]
 *             PIX       *pixReadStreamTiff()
 *      static PIX       *pixReadFromTiffStream()
 *
 *     Writing tiff:
 *             l_int32    pixWriteTiff()            [ special top level ]
 *             l_int32    pixWriteTiffCustom()      [ special top level ]
 *             l_int32    pixWriteStreamTiff()
 *             l_int32    pixWriteStreamTiffWA()
 *      static l_int32    pixWriteToTiffStream()
 *      static l_int32    writeCustomTiffTags()
 *
 *     Reading and writing multipage tiff
 *             PIX       *pixReadFromMultipageTiff()
 *             PIXA      *pixaReadMultipageTiff()   [ special top level ]
 *             l_int32    pixaWriteMultipageTiff()  [ special top level ]
 *             l_int32    writeMultipageTiff()      [ special top level ]
 *             l_int32    writeMultipageTiffSA()
 *
 *     Information about tiff file
 *             l_int32    fprintTiffInfo()
 *             l_int32    tiffGetCount()
 *             l_int32    getTiffResolution()
 *      static l_int32    getTiffStreamResolution()
 *             l_int32    readHeaderTiff()
 *             l_int32    freadHeaderTiff()
 *             l_int32    readHeaderMemTiff()
 *      static l_int32    tiffReadHeaderTiff()
 *             l_int32    findTiffCompression()
 *      static l_int32    getTiffCompressedFormat()
 *
 *     Extraction of tiff g4 data:
 *             l_int32    extractG4DataFromFile()
 *
 *     Open tiff stream from file stream
 *      static TIFF      *fopenTiff()
 *
 *     Wrapper for TIFFOpen:
 *      static TIFF      *openTiff()
 *
 *     Memory I/O: reading memory --> pix and writing pix --> memory
 *        Ten static low-level memstream functions
 *           static L_MEMSTREAM  *memstreamCreateForRead()
 *           static L_MEMSTREAM  *memstreamCreateForWrite()
 *           static tsize_t       tiffReadCallback()
 *           static tsize_t       tiffWriteCallback()
 *           static toff_t        tiffSeekCallback()
 *           static l_int32       tiffCloseCallback()
 *           static toff_t        tiffSizeCallback()
 *           static l_int32       tiffMapCallback()
 *           static void          tiffUnmapCallback()
 *           static TIFF         *fopenTiffMemstream()
 *
 *           PIX       *pixReadMemTiff();
 *           PIX       *pixReadMemFromMultipageTiff();
 *           PIXA      *pixaReadMemMultipageTiff()    [ special top level ]
 *           l_int32    pixaWriteMemMultipageTiff()   [ special top level ]
 *           l_int32    pixWriteMemTiff();
 *           l_int32    pixWriteMemTiffCustom();
 *
 *  Note 1: To include all necessary functions, use libtiff version 3.7.4
 *          (from 2005) or later.
 *  Note 2: What compression methods in tiff are supported?
 *          * We support most methods that are fully implemented in the
 *            tiff library, such as G3, G4, RLE and LZW.
 *          * The exception is the old-style jpeg tiff format (OJPEG), which
 *            is not supported.
 *          * We support two formats requiring external libraries: ZIP and JPEG
 *            All computers should have the zip library.
 *          * At present we do not support WEBP in tiff, which uses
 *            libwebp and was added in tifflib 4.1.0 in 2019.
 *  Note 3: We set the pad bits to 0 before writing in pixWriteToTiffStream().
 *          Although they don't affect the raster image after decompression,
 *          it is sometimes convenient to use a golden file with a
 *          byte-by-byte check to verify invariance.  The issue came up
 *          on Windows for 2 and 4 bpp images.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include /* for isnan */ #include #ifndef _MSC_VER #include #else /* _MSC_VER */ #include #endif /* _MSC_VER */ #include #include "allheaders.h" /* ---------------------------------------------------------*/ #if HAVE_LIBTIFF && HAVE_LIBJPEG /* defined in environ.h */ /* ---------------------------------------------------------*/ #include "tiff.h" #include "tiffio.h" static const l_int32 DefaultResolution = 300; /* ppi */ static const l_int32 ManyPagesInTiffFile = 3000; /* warn if big */ /* Verified that tiflib makes valid g4 files of this size */ static const l_int32 MaxTiffWidth = 1 << 20; /* 1M pixels */ static const l_int32 MaxTiffHeight = 1 << 20; /* 1M pixels */ /* Check g4 data size */ static const size_t MaxNumTiffBytes = (1 << 28) - 1; /* 256 MB */ /* All functions with TIFF interfaces are static. */ static PIX *pixReadFromTiffStream(TIFF *tif); static l_int32 getTiffStreamResolution(TIFF *tif, l_int32 *pxres, l_int32 *pyres); static l_int32 tiffReadHeaderTiff(TIFF *tif, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat); static l_int32 writeCustomTiffTags(TIFF *tif, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes); static l_int32 pixWriteToTiffStream(TIFF *tif, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes); static TIFF *fopenTiff(FILE *fp, const char *modestring); static TIFF *openTiff(const char *filename, const char *modestring); /* Static helper for tiff compression type */ static l_int32 getTiffCompressedFormat(l_uint16 tiffcomp); /* Static function for memory I/O */ static TIFF *fopenTiffMemstream(const char *filename, const char *operation, l_uint8 **pdata, size_t *pdatasize); /* This structure defines a transform to be performed on a TIFF image * (note that the same transformation can be represented in * several different ways using this structure since * vflip + hflip + counterclockwise == clockwise). */ struct tiff_transform { int vflip; /* if non-zero, image needs a vertical fip */ int hflip; /* if non-zero, image needs a horizontal flip */ int rotate; /* -1 -> counterclockwise 90-degree rotation, 0 -> no rotation 1 -> clockwise 90-degree rotation */ }; /* This describes the transformations needed for a given orientation * tag. The tag values start at 1, so you need to subtract 1 to get a * valid index into this array. It is only valid when not using * TIFFReadRGBAImageOriented(). */ static struct tiff_transform tiff_orientation_transforms[] = { {0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0}, {0, 1, -1}, {0, 0, 1}, {0, 1, 1}, {0, 0, -1} }; /* Same as above, except that test transformations are only valid * when using TIFFReadRGBAImageOriented(). Transformations * were determined empirically. See the libtiff mailing list for * more discussion: http://www.asmail.be/msg0054683875.html */ static struct tiff_transform tiff_partial_orientation_transforms[] = { {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 1, -1}, {0, 1, 1}, {1, 0, 1}, {0, 1, -1} }; /*-----------------------------------------------------------------------* * TIFFClientOpen() wrappers for FILE* * * Provided by JÃŧrgen BuchmÃŧller * * * * We previously used TIFFFdOpen(), which used low-level file * * descriptors. It had portability issues with Windows, along * * with other limitations from lack of stream control operations. * * These callbacks to TIFFClientOpen() avoid the problems. * * * * JÃŧrgen made the functions use 64 bit file operations where possible * * or required, namely for seek and size. On Windows there are specific * * _fseeki64() and _ftelli64() functions. On unix it is common to look * * for a macro _LARGEFILE64_SOURCE being defined, which makes available * * the off64_t type, and to use fseeko() and ftello() in this case. * *-----------------------------------------------------------------------*/ static tsize_t lept_read_proc(thandle_t cookie, tdata_t buff, tsize_t size) { FILE* fp = (FILE *)cookie; tsize_t done; if (!buff || !cookie || !fp) return (tsize_t)-1; done = fread(buff, 1, size, fp); return done; } static tsize_t lept_write_proc(thandle_t cookie, tdata_t buff, tsize_t size) { FILE* fp = (FILE *)cookie; tsize_t done; if (!buff || !cookie || !fp) return (tsize_t)-1; done = fwrite(buff, 1, size, fp); return done; } static toff_t lept_seek_proc(thandle_t cookie, toff_t offs, int whence) { FILE* fp = (FILE *)cookie; #if defined(_MSC_VER) __int64 pos = 0; if (!cookie || !fp) return (tsize_t)-1; switch (whence) { case SEEK_SET: pos = 0; break; case SEEK_CUR: pos = ftell(fp); break; case SEEK_END: _fseeki64(fp, 0, SEEK_END); pos = _ftelli64(fp); break; } pos = (__int64)(pos + offs); _fseeki64(fp, pos, SEEK_SET); if (pos == _ftelli64(fp)) return (tsize_t)pos; #elif defined(_LARGEFILE64_SOURCE) off64_t pos = 0; if (!cookie || !fp) return (tsize_t)-1; switch (whence) { case SEEK_SET: pos = 0; break; case SEEK_CUR: pos = ftello(fp); break; case SEEK_END: fseeko(fp, 0, SEEK_END); pos = ftello(fp); break; } pos = (off64_t)(pos + offs); fseeko(fp, pos, SEEK_SET); if (pos == ftello(fp)) return (tsize_t)pos; #else off_t pos = 0; if (!cookie || !fp) return (tsize_t)-1; switch (whence) { case SEEK_SET: pos = 0; break; case SEEK_CUR: pos = ftell(fp); break; case SEEK_END: fseek(fp, 0, SEEK_END); pos = ftell(fp); break; } pos = (off_t)(pos + offs); fseek(fp, pos, SEEK_SET); if (pos == ftell(fp)) return (tsize_t)pos; #endif return (tsize_t)-1; } static int lept_close_proc(thandle_t cookie) { FILE* fp = (FILE *)cookie; if (!cookie || !fp) return 0; fseek(fp, 0, SEEK_SET); return 0; } static toff_t lept_size_proc(thandle_t cookie) { FILE* fp = (FILE *)cookie; #if defined(_MSC_VER) __int64 pos; __int64 size; if (!cookie || !fp) return (tsize_t)-1; pos = _ftelli64(fp); _fseeki64(fp, 0, SEEK_END); size = _ftelli64(fp); _fseeki64(fp, pos, SEEK_SET); #elif defined(_LARGEFILE64_SOURCE) off64_t pos; off64_t size; if (!fp) return (tsize_t)-1; pos = ftello(fp); fseeko(fp, 0, SEEK_END); size = ftello(fp); fseeko(fp, pos, SEEK_SET); #else off_t pos; off_t size; if (!cookie || !fp) return (tsize_t)-1; pos = ftell(fp); fseek(fp, 0, SEEK_END); size = ftell(fp); fseek(fp, pos, SEEK_SET); #endif return (toff_t)size; } /*--------------------------------------------------------------* * Reading from file * *--------------------------------------------------------------*/ /*! * \brief pixReadTiff() * * \param[in] filename * \param[in] n page number 0 based * \return pix, or NULL on error * *
 * Notes:
 *      (1) This is a version of pixRead(), specialized for tiff
 *          files, that allows specification of the page to be returned
 *      (2) No warning messages on failure, because of how multi-page
 *          TIFF reading works. You are supposed to keep trying until
 *          it stops working.
 * 
*/ PIX * pixReadTiff(const char *filename, l_int32 n) { FILE *fp; PIX *pix; if (!filename) return (PIX *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR_1("image file not found", filename, __func__, NULL); pix = pixReadStreamTiff(fp, n); fclose(fp); return pix; } /*--------------------------------------------------------------* * Reading from stream * *--------------------------------------------------------------*/ /*! * \brief pixReadStreamTiff() * * \param[in] fp file stream * \param[in] n page number: 0 based * \return pix, or NULL on error or if there are no more images in the file * *
 * Notes:
 *      (1) No warning messages on failure, because of how multi-page
 *          TIFF reading works. You are supposed to keep trying until
 *          it stops working.
 * 
*/ PIX * pixReadStreamTiff(FILE *fp, l_int32 n) { PIX *pix; TIFF *tif; if (!fp) return (PIX *)ERROR_PTR("stream not defined", __func__, NULL); if ((tif = fopenTiff(fp, "r")) == NULL) return (PIX *)ERROR_PTR("tif not opened", __func__, NULL); if (TIFFSetDirectory(tif, n) == 0) { TIFFCleanup(tif); return NULL; } if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFCleanup(tif); return NULL; } TIFFCleanup(tif); return pix; } /*! * \brief pixReadFromTiffStream() * * \param[in] tif TIFF handle * \return pix, or NULL on error * *
 * Notes:
 *      (1) We can read the following images (up to 32 bits/pixel):
 *          1 spp (grayscale): 1, 2, 4, 8, 16 bps
 *          1 spp (colormapped): 1, 2, 4, 8 bps
 *          2 spp (gray+alpha): 8 bps
 *          3 spp (rgb) and 4 spp (rgba): 8 or 16 bps
 *          Note that 16 bps rgb and rgba are converted to 8 bps in the pix.
 *      (2) In particular, we do not support
 *             16 bps for spp == 2
 *              4 bps for spp == 3 or spp == 4.
 *      (3) We only support uint image data.
 *      (4) We do not support tiled format, old-style jpeg encoding,
 *          or webp encoded tiff.
 *      (5) 2 bpp gray+alpha are rasterized as 32 bit/pixel rgba, with
 *          the gray value replicated in r, g and b.
 *      (6) For colormapped images, we support 8 bits/color in the palette.
 *          Tiff colormaps have 16 bits/color, and we reduce them to 8.
 *      (7) Quoting the libtiff documentation at
 *               http://libtiff.maptools.org/libtiff.html
 *          "libtiff provides a high-level interface for reading image data
 *          from a TIFF file. This interface handles the details of data
 *          organization and format for a wide variety of TIFF files;
 *          at least the large majority of those files that one would
 *          normally encounter. Image data is, by default, returned as
 *          ABGR pixels packed into 32-bit words (8 bits per sample).
 *          Rectangular rasters can be read or data can be intercepted
 *          at an intermediate level and packed into memory in a format
 *          more suitable to the application. The library handles all
 *          the details of the format of data stored on disk and,
 *          in most cases, if any colorspace conversions are required:
 *          bilevel to RGB, greyscale to RGB, CMYK to RGB, YCbCr to RGB,
 *          16-bit samples to 8-bit samples, associated/unassociated alpha,
 *          etc."
 * 
*/ static PIX * pixReadFromTiffStream(TIFF *tif) { char *text; l_uint8 *linebuf, *data, *rowptr; l_uint16 spp, bps, photometry, tiffcomp, orientation, sample_fmt; l_uint16 *redmap, *greenmap, *bluemap; l_int32 d, wpl, bpl, comptype, i, j, k, ncolors, rval, gval, bval, aval; l_int32 xres, yres, tiffbpl, packedbpl, half_size, twothirds_size; l_uint32 w, h, tiffword, read_oriented; l_uint32 *line, *ppixel, *tiffdata, *pixdata; PIX *pix, *pix1; PIXCMAP *cmap; if (!tif) return (PIX *)ERROR_PTR("tif not defined", __func__, NULL); read_oriented = 0; /* Only accept uint image data: * SAMPLEFORMAT_UINT = 1; * SAMPLEFORMAT_INT = 2; * SAMPLEFORMAT_IEEEFP = 3; * SAMPLEFORMAT_VOID = 4; */ TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLEFORMAT, &sample_fmt); if (sample_fmt != SAMPLEFORMAT_UINT) { L_ERROR("sample format = %d is not uint\n", __func__, sample_fmt); return NULL; } /* Can't read tiff in tiled format. For what is involved, see, e.g: * https://www.cs.rochester.edu/~nelson/courses/vision/\ * resources/tiff/libtiff.html#Tiles * A tiled tiff can be converted to a normal (strip) tif: * tiffcp -s */ if (TIFFIsTiled(tif)) { L_ERROR("tiled format is not supported\n", __func__); return NULL; } /* Old style jpeg is not supported. We tried supporting 8 bpp. * TIFFReadScanline() fails on this format, so we used RGBA * reading, which generates a 4 spp image, and pulled out the * red component. However, there were problems with double-frees * in cleanup. For RGB, tiffbpl is exactly half the size that * you would expect for the raster data in a scanline, which * is 3 * w. */ TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); if (tiffcomp == COMPRESSION_OJPEG) { L_ERROR("old style jpeg format is not supported\n", __func__); return NULL; } /* webp in tiff is in 4.1.0 and not yet supported in Adobe registry */ #if defined(COMPRESSION_WEBP) if (tiffcomp == COMPRESSION_WEBP) { L_ERROR("webp in tiff not generally supported yet\n", __func__); return NULL; } #endif /* COMPRESSION_WEBP */ /* Use default fields for bps and spp */ TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); if (bps != 1 && bps != 2 && bps != 4 && bps != 8 && bps != 16) { L_ERROR("invalid bps = %d\n", __func__, bps); return NULL; } if (spp == 2 && bps != 8) { L_ERROR("for 2 spp, only handle 8 bps; this is %d bps\n", __func__, bps); return NULL; } if ((spp == 3 || spp == 4) && bps < 8) { L_ERROR("for 3 and 4 spp, only handle 8 and 16 bps; this is %d bps\n", __func__, bps); return NULL; } if (spp == 1) { d = bps; } else if (spp == 2) { /* gray plus alpha */ d = 32; /* will convert to RGBA */ } else if (spp == 3 || spp == 4) { d = 32; } else { L_ERROR("spp = %d; not in {1,2,3,4}\n", __func__, spp); return NULL; } TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); if (w > MaxTiffWidth) { L_ERROR("width = %d pixels; too large\n", __func__, w); return NULL; } if (h > MaxTiffHeight) { L_ERROR("height = %d pixels; too large\n", __func__, h); return NULL; } /* The relation between the size of a byte buffer required to hold a raster of image pixels (packedbpl) and the size of the tiff buffer (tiffbuf) is either 1:1 or approximately 1.5:1 or 2:1, depending on how the data is stored and subsampled. For security, we test this relation between tiffbuf and the image parameters w, spp and bps. */ tiffbpl = TIFFScanlineSize(tif); packedbpl = (bps * spp * w + 7) / 8; half_size = (L_ABS(2 * tiffbpl - packedbpl) <= 8); twothirds_size = (L_ABS(3 * tiffbpl - 2 * packedbpl) <= 8); #if 0 if (half_size) L_INFO("half_size: packedbpl = %d is approx. twice tiffbpl = %d\n", __func__, packedbpl, tiffbpl); if (twothirds_size) L_INFO("twothirds_size: packedbpl = %d is approx. 1.5 tiffbpl = %d\n", __func__, packedbpl, tiffbpl); lept_stderr("tiffbpl = %d, packedbpl = %d, bps = %d, spp = %d, w = %d\n", tiffbpl, packedbpl, bps, spp, w); #endif if (tiffbpl != packedbpl && !half_size && !twothirds_size) { L_ERROR("invalid tiffbpl: tiffbpl = %d, packedbpl = %d, " "bps = %d, spp = %d, w = %d\n", __func__, tiffbpl, packedbpl, bps, spp, w); return NULL; } /* Use a linebuf that will hold all the pixels generated by tiff when reading (decompressing) a scanline. */ if ((pix = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pix not made", __func__, NULL); pixSetInputFormat(pix, IFF_TIFF); data = (l_uint8 *)pixGetData(pix); wpl = pixGetWpl(pix); bpl = 4 * wpl; if (spp == 1) { linebuf = (l_uint8 *)LEPT_CALLOC(4 * wpl, sizeof(l_uint8)); for (i = 0; i < h; i++) { if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { LEPT_FREE(linebuf); pixDestroy(&pix); L_ERROR("spp = 1, read fail at line %d\n", __func__, i); return NULL; } memcpy(data, linebuf, tiffbpl); data += bpl; } if (bps <= 8) pixEndianByteSwap(pix); else /* bps == 16 */ pixEndianTwoByteSwap(pix); LEPT_FREE(linebuf); } else if (spp == 2 && bps == 8) { /* gray plus alpha */ L_INFO("gray+alpha is not supported; converting to RGBA\n", __func__); pixSetSpp(pix, 4); linebuf = (l_uint8 *)LEPT_CALLOC(4 * wpl, sizeof(l_uint8)); pixdata = pixGetData(pix); for (i = 0; i < h; i++) { if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { LEPT_FREE(linebuf); pixDestroy(&pix); L_ERROR("spp = 2, read fail at line %d\n", __func__, i); return NULL; } rowptr = linebuf; ppixel = pixdata + i * wpl; for (j = k = 0; j < w; j++) { /* Copy gray value into r, g and b */ SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } LEPT_FREE(linebuf); } else { /* rgb and rgba */ if ((tiffdata = (l_uint32 *)LEPT_CALLOC((size_t)w * h, sizeof(l_uint32))) == NULL) { pixDestroy(&pix); return (PIX *)ERROR_PTR("calloc fail for tiffdata", __func__, NULL); } /* TIFFReadRGBAImageOriented() converts to 8 bps */ if (!TIFFReadRGBAImageOriented(tif, w, h, tiffdata, ORIENTATION_TOPLEFT, 0)) { LEPT_FREE(tiffdata); pixDestroy(&pix); return (PIX *)ERROR_PTR("failed to read tiffdata", __func__, NULL); } else { read_oriented = 1; } if (spp == 4) pixSetSpp(pix, 4); line = pixGetData(pix); for (i = 0; i < h; i++, line += wpl) { for (j = 0, ppixel = line; j < w; j++) { /* TIFFGet* are macros */ tiffword = tiffdata[i * w + j]; rval = TIFFGetR(tiffword); gval = TIFFGetG(tiffword); bval = TIFFGetB(tiffword); if (spp == 3) { composeRGBPixel(rval, gval, bval, ppixel); } else { /* spp == 4 */ aval = TIFFGetA(tiffword); composeRGBAPixel(rval, gval, bval, aval, ppixel); } ppixel++; } } LEPT_FREE(tiffdata); } if (getTiffStreamResolution(tif, &xres, &yres) == 0) { pixSetXRes(pix, xres); pixSetYRes(pix, yres); } /* Find and save the compression type */ comptype = getTiffCompressedFormat(tiffcomp); pixSetInputFormat(pix, comptype); if (TIFFGetField(tif, TIFFTAG_COLORMAP, &redmap, &greenmap, &bluemap)) { /* Save the colormap as a pix cmap. Because the * tiff colormap components are 16 bit unsigned, * and go from black (0) to white (0xffff), the * the pix cmap takes the most significant byte. */ if (bps > 8) { pixDestroy(&pix); return (PIX *)ERROR_PTR("colormap size > 256", __func__, NULL); } if ((cmap = pixcmapCreate(bps)) == NULL) { pixDestroy(&pix); return (PIX *)ERROR_PTR("colormap not made", __func__, NULL); } ncolors = 1 << bps; for (i = 0; i < ncolors; i++) pixcmapAddColor(cmap, redmap[i] >> 8, greenmap[i] >> 8, bluemap[i] >> 8); if (pixSetColormap(pix, cmap)) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid colormap", __func__, NULL); } /* Remove the colormap for 1 bpp. */ if (bps == 1) { pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pix); pix = pix1; } } else { /* No colormap: check photometry and invert if necessary */ if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometry)) { /* Guess default photometry setting. Assume min_is_white * if compressed 1 bpp; min_is_black otherwise. */ if (tiffcomp == COMPRESSION_CCITTFAX3 || tiffcomp == COMPRESSION_CCITTFAX4 || tiffcomp == COMPRESSION_CCITTRLE || tiffcomp == COMPRESSION_CCITTRLEW) { photometry = PHOTOMETRIC_MINISWHITE; } else { photometry = PHOTOMETRIC_MINISBLACK; } } if ((d == 1 && photometry == PHOTOMETRIC_MINISBLACK) || (d == 8 && photometry == PHOTOMETRIC_MINISWHITE)) pixInvert(pix, pix); } if (TIFFGetField(tif, TIFFTAG_ORIENTATION, &orientation)) { if (orientation >= 1 && orientation <= 8) { struct tiff_transform *transform = (read_oriented) ? &tiff_partial_orientation_transforms[orientation - 1] : &tiff_orientation_transforms[orientation - 1]; if (transform->vflip) pixFlipTB(pix, pix); if (transform->hflip) pixFlipLR(pix, pix); if (transform->rotate) { PIX *oldpix = pix; pix = pixRotate90(oldpix, transform->rotate); pixDestroy(&oldpix); } } } text = NULL; TIFFGetField(tif, TIFFTAG_IMAGEDESCRIPTION, &text); if (text) pixSetText(pix, text); return pix; } /*--------------------------------------------------------------* * Writing to file * *--------------------------------------------------------------*/ /*! * \brief pixWriteTiff() * * \param[in] filename to write to * \param[in] pix any depth, colormap will be removed * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \param[in] modestr "a" or "w" * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) For multipage tiff, write the first pix with mode "w" and
 *          all subsequent pix with mode "a".
 *      (2) For multipage tiff, there is considerable overhead in the
 *          machinery to append an image and add the directory entry,
 *          and the time required for each image increases linearly
 *          with the number of images in the file.
 * 
*/ l_ok pixWriteTiff(const char *filename, PIX *pix, l_int32 comptype, const char *modestr) { return pixWriteTiffCustom(filename, pix, comptype, modestr, NULL, NULL, NULL, NULL); } /*! * \brief pixWriteTiffCustom() * * \param[in] filename to write to * \param[in] pix * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \param[in] modestr "a" or "w" * \param[in] natags [optional] NUMA of custom tiff tags * \param[in] savals [optional] SARRAY of values * \param[in] satypes [optional] SARRAY of types * \param[in] nasizes [optional] NUMA of sizes * \return 0 if OK, 1 on error * * Usage: * 1 This writes a page image to a tiff file, with optional * extra tags defined in tiff.h * 2 For multipage tiff, write the first pix with mode "w" and * all subsequent pix with mode "a". * 3 For the custom tiff tags: * a The three arrays {natags, savals, satypes} must all be * either NULL or defined and of equal size. * b If they are defined, the tags are an array of integers, * the vals are an array of values in string format, and * the types are an array of types in string format. * c All valid tags are definined in tiff.h. * d The types allowed are the set of strings: * "char*" * "l_uint8*" * "l_uint16" * "l_uint32" * "l_int32" * "l_float64" * "l_uint16-l_uint16" note the dash; use it between the * two l_uint16 vals in the val string * Of these, "char*" and "l_uint16" are the most commonly used. * e The last array, nasizes, is also optional. It is for * tags that take an array of bytes for a value, a number of * elements in the array, and a type that is either "char*" * or "l_uint8*" probably either will work. * Use NULL if there are no such tags. * f VERY IMPORTANT: if there are any tags that require the * extra size value, stored in nasizes, they must be * written first! */ l_ok pixWriteTiffCustom(const char *filename, PIX *pix, l_int32 comptype, const char *modestr, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_int32 ret; TIFF *tif; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if ((tif = openTiff(filename, modestr)) == NULL) return ERROR_INT("tif not opened", __func__, 1); ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, satypes, nasizes); TIFFClose(tif); return ret; } /*--------------------------------------------------------------* * Writing to stream * *--------------------------------------------------------------*/ /*! * \brief pixWriteStreamTiff() * * \param[in] fp file stream * \param[in] pix * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This writes a single image to a file stream opened for writing.
 *      (2) If the pix has a colormap, it is preserved in the output file.
 *      (3) For images with bpp > 1, this resets the comptype, if
 *          necessary, to write uncompressed data.
 *      (4) G3 and G4 are only defined for 1 bpp.
 *      (5) We only allow PACKBITS for bpp = 1, because for bpp > 1
 *          it typically expands images that are not synthetically generated.
 *      (6) G4 compression is typically about twice as good as G3.
 *          G4 is excellent for binary compression of text/line-art,
 *          but terrible for halftones and dithered patterns.  (In
 *          fact, G4 on halftones can give a file that is larger
 *          than uncompressed!)  If a binary image has dithered
 *          regions, it is usually better to compress with png.
 * 
*/ l_ok pixWriteStreamTiff(FILE *fp, PIX *pix, l_int32 comptype) { return pixWriteStreamTiffWA(fp, pix, comptype, "w"); } /*! * \brief pixWriteStreamTiffWA() * * \param[in] fp file stream opened for append or write * \param[in] pix * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \param[in] modestr "w" or "a" * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteStreamTiff()
 * 
*/ l_ok pixWriteStreamTiffWA(FILE *fp, PIX *pix, l_int32 comptype, const char *modestr) { TIFF *tif; if (!fp) return ERROR_INT("stream not defined", __func__, 1 ); if (!pix) return ERROR_INT("pix not defined", __func__, 1 ); if (strcmp(modestr, "w") && strcmp(modestr, "a")) { L_ERROR("modestr = %s; not 'w' or 'a'\n", __func__, modestr); return 1; } if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP && comptype != IFF_TIFF_JPEG) { L_WARNING("invalid compression type %d for bpp > 1; using TIFF_ZIP\n", __func__, comptype); comptype = IFF_TIFF_ZIP; } if ((tif = fopenTiff(fp, modestr)) == NULL) return ERROR_INT("tif not opened", __func__, 1); if (pixWriteToTiffStream(tif, pix, comptype, NULL, NULL, NULL, NULL)) { TIFFCleanup(tif); return ERROR_INT("tif write error", __func__, 1); } TIFFCleanup(tif); return 0; } /*! * \brief pixWriteToTiffStream() * * \param[in] tif data structure, opened to a file * \param[in] pix * \param[in] comptype IFF_TIFF: for any image; no compression * IFF_TIFF_RLE, IFF_TIFF_PACKBITS: for 1 bpp only * IFF_TIFF_G4 and IFF_TIFF_G3: for 1 bpp only * IFF_TIFF_LZW, IFF_TIFF_ZIP: lossless for any image * IFF_TIFF_JPEG: lossy 8 bpp gray or rgb * \param[in] natags [optional] NUMA of custom tiff tags * \param[in] savals [optional] SARRAY of values * \param[in] satypes [optional] SARRAY of types * \param[in] nasizes [optional] NUMA of sizes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This static function should only be called through higher
 *          level functions in this file; namely, pixWriteTiffCustom(),
 *          pixWriteTiff(), pixWriteStreamTiff(), pixWriteMemTiff()
 *          and pixWriteMemTiffCustom().
 *      (2) We only allow PACKBITS for bpp = 1, because for bpp > 1
 *          it typically expands images that are not synthetically generated.
 *      (3) See pixWriteTiffCustom() for details on how to use
 *          the last four parameters for customized tiff tags.
 *      (4) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
 *          and 32.  However, it is possible, and in some cases desirable,
 *          to write out a tiff file using an rgb pix that has 24 bpp.
 *          This can be created by appending the raster data for a 24 bpp
 *          image (with proper scanline padding) directly to a 24 bpp
 *          pix that was created without a data array.  See note in
 *          pixWriteStreamPng() for an example.
 * 
*/ static l_int32 pixWriteToTiffStream(TIFF *tif, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_uint8 *linebuf, *data; l_uint16 redmap[256], greenmap[256], bluemap[256]; l_int32 w, h, d, spp, i, j, k, wpl, bpl, tiffbpl, ncolors, cmapsize; l_int32 *rmap, *gmap, *bmap; l_int32 xres, yres; l_uint32 *line, *ppixel; PIX *pixt; PIXCMAP *cmap; char *text; if (!tif) return ERROR_INT("tif stream not defined", __func__, 1); if (!pix) return ERROR_INT( "pix not defined", __func__, 1 ); pixSetPadBits(pix, 0); pixGetDimensions(pix, &w, &h, &d); spp = pixGetSpp(pix); xres = pixGetXRes(pix); yres = pixGetYRes(pix); if (xres == 0) xres = DefaultResolution; if (yres == 0) yres = DefaultResolution; /* ------------------ Write out the header ------------- */ TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, (l_uint32)RESUNIT_INCH); TIFFSetField(tif, TIFFTAG_XRESOLUTION, (l_float64)xres); TIFFSetField(tif, TIFFTAG_YRESOLUTION, (l_float64)yres); TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (l_uint32)w); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (l_uint32)h); TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); if ((text = pixGetText(pix)) != NULL) TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, text); if (d == 1 && !pixGetColormap(pix)) { /* If d == 1, preserve the colormap. Note that when * d == 1 pix with colormaps are read, the colormaps * are removed. The only pix in leptonica that have * colormaps are made programmatically. */ TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); } else if ((d == 32 && spp == 3) || d == 24) { TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)3); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)8, (l_uint16)8, (l_uint16)8); } else if (d == 32 && spp == 4) { l_uint16 val[1]; val[0] = EXTRASAMPLE_ASSOCALPHA; TIFFSetField(tif, TIFFTAG_EXTRASAMPLES, (l_uint16)1, &val); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)4); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)8, (l_uint16)8, (l_uint16)8, (l_uint16)8); } else if (d == 16) { /* we only support spp = 1, bps = 16 */ TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); } else if ((cmap = pixGetColormap(pix)) == NULL) { TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); } else { /* Save colormap in the tiff; not more than 256 colors */ if (d > 8) { L_ERROR("d = %d > 8 with colormap!; reducing to 8\n", __func__, d); d = 8; } pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); ncolors = pixcmapGetCount(cmap); ncolors = L_MIN(256, ncolors); /* max 256 */ cmapsize = 1 << d; cmapsize = L_MIN(256, cmapsize); /* power of 2; max 256 */ if (ncolors > cmapsize) { L_WARNING("too many colors in cmap for tiff; truncating\n", __func__); ncolors = cmapsize; } for (i = 0; i < ncolors; i++) { redmap[i] = (rmap[i] << 8) | rmap[i]; greenmap[i] = (gmap[i] << 8) | gmap[i]; bluemap[i] = (bmap[i] << 8) | bmap[i]; } for (i = ncolors; i < cmapsize; i++) /* init, even though not used */ redmap[i] = greenmap[i] = bluemap[i] = 0; LEPT_FREE(rmap); LEPT_FREE(gmap); LEPT_FREE(bmap); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); TIFFSetField(tif, TIFFTAG_COLORMAP, redmap, greenmap, bluemap); } if (d <= 16) { TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); } TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); if (comptype == IFF_TIFF) { /* no compression */ TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); } else if (comptype == IFF_TIFF_G4) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4); } else if (comptype == IFF_TIFF_G3) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3); } else if (comptype == IFF_TIFF_RLE) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTRLE); } else if (comptype == IFF_TIFF_PACKBITS) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS); } else if (comptype == IFF_TIFF_LZW) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW); } else if (comptype == IFF_TIFF_ZIP) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_ADOBE_DEFLATE); } else if (comptype == IFF_TIFF_JPEG) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_JPEG); } else { L_WARNING("unknown tiff compression; using none\n", __func__); TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); } /* This is a no-op if arrays are NULL */ writeCustomTiffTags(tif, natags, savals, satypes, nasizes); /* ------------- Write out the image data ------------- */ tiffbpl = TIFFScanlineSize(tif); wpl = pixGetWpl(pix); bpl = 4 * wpl; if (tiffbpl > bpl) lept_stderr("Big trouble: tiffbpl = %d, bpl = %d\n", tiffbpl, bpl); if ((linebuf = (l_uint8 *)LEPT_CALLOC(1, bpl)) == NULL) return ERROR_INT("calloc fail for linebuf", __func__, 1); /* Use single strip for image */ TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, h); if (d != 24 && d != 32) { if (d == 16) pixt = pixEndianTwoByteSwapNew(pix); else pixt = pixEndianByteSwapNew(pix); data = (l_uint8 *)pixGetData(pixt); for (i = 0; i < h; i++, data += bpl) { memcpy(linebuf, data, tiffbpl); if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) break; } pixDestroy(&pixt); } else if (d == 24) { /* See note 4 above: special case of 24 bpp rgb */ for (i = 0; i < h; i++) { line = pixGetData(pix) + i * wpl; if (TIFFWriteScanline(tif, (l_uint8 *)line, i, 0) < 0) break; } } else { /* 32 bpp rgb or rgba */ for (i = 0; i < h; i++) { line = pixGetData(pix) + i * wpl; for (j = 0, k = 0, ppixel = line; j < w; j++) { linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); if (spp == 4) linebuf[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); ppixel++; } if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) break; } } /* TIFFWriteDirectory(tif); */ LEPT_FREE(linebuf); return 0; } /*! * \brief writeCustomTiffTags() * * \param[in] tif * \param[in] natags [optional] NUMA of custom tiff tags * \param[in] savals [optional] SARRAY of values * \param[in] satypes [optional] SARRAY of types * \param[in] nasizes [optional] NUMA of sizes * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This static function should be called indirectly through
 *          higher level functions, such as pixWriteTiffCustom(),
 *          which call pixWriteToTiffStream().  See details in
 *          pixWriteTiffCustom() for using the 4 input arrays.
 *      (2) This is a no-op if the first 3 arrays are all NULL.
 *      (3) Otherwise, the first 3 arrays must be defined and all
 *          of equal size.
 *      (4) The fourth array is always optional.
 *      (5) The most commonly used types are "char*" and "u_int16".
 *          See tiff.h for a full listing of the tiff tags.
 *          Note that many of these tags, in particular the bit tags,
 *          are intended to be private, and cannot be set by this function.
 *          Examples are the STRIPOFFSETS and STRIPBYTECOUNTS tags,
 *          which are bit tags that are automatically set in the header,
 *          and can be extracted using tiffdump.
 * 
*/ static l_int32 writeCustomTiffTags(TIFF *tif, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { char *sval, *type; l_int32 i, n, ns, size, tagval, val; l_float64 dval; l_uint32 uval, uval2; if (!tif) return ERROR_INT("tif stream not defined", __func__, 1); if (!natags && !savals && !satypes) return 0; if (!natags || !savals || !satypes) return ERROR_INT("not all arrays defined", __func__, 1); n = numaGetCount(natags); if ((sarrayGetCount(savals) != n) || (sarrayGetCount(satypes) != n)) return ERROR_INT("not all sa the same size", __func__, 1); /* The sized arrays (4 args to TIFFSetField) are written first */ if (nasizes) { ns = numaGetCount(nasizes); if (ns > n) return ERROR_INT("too many 4-arg tag calls", __func__, 1); for (i = 0; i < ns; i++) { numaGetIValue(natags, i, &tagval); sval = sarrayGetString(savals, i, L_NOCOPY); type = sarrayGetString(satypes, i, L_NOCOPY); numaGetIValue(nasizes, i, &size); if (strcmp(type, "char*") && strcmp(type, "l_uint8*")) L_WARNING("array type not char* or l_uint8*; ignore\n", __func__); TIFFSetField(tif, tagval, size, sval); } } else { ns = 0; } /* The typical tags (3 args to TIFFSetField) are now written */ for (i = ns; i < n; i++) { numaGetIValue(natags, i, &tagval); sval = sarrayGetString(savals, i, L_NOCOPY); type = sarrayGetString(satypes, i, L_NOCOPY); if (!strcmp(type, "char*") || !strcmp(type, "const char*")) { TIFFSetField(tif, tagval, sval); } else if (!strcmp(type, "l_uint16")) { if (sscanf(sval, "%u", &uval) == 1) { TIFFSetField(tif, tagval, (l_uint16)uval); } else { lept_stderr("val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", __func__, 1); } } else if (!strcmp(type, "l_uint32")) { if (sscanf(sval, "%u", &uval) == 1) { TIFFSetField(tif, tagval, uval); } else { lept_stderr("val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", __func__, 1); } } else if (!strcmp(type, "l_int32")) { if (sscanf(sval, "%d", &val) == 1) { TIFFSetField(tif, tagval, val); } else { lept_stderr("val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", __func__, 1); } } else if (!strcmp(type, "l_float64")) { if (sscanf(sval, "%lf", &dval) == 1) { TIFFSetField(tif, tagval, dval); } else { lept_stderr("val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", __func__, 1); } } else if (!strcmp(type, "l_uint16-l_uint16")) { if (sscanf(sval, "%u-%u", &uval, &uval2) == 2) { TIFFSetField(tif, tagval, (l_uint16)uval, (l_uint16)uval2); } else { lept_stderr("val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", __func__, 1); } } else { lept_stderr("unknown type %s\n",type); return ERROR_INT("unknown type; tag(s) not written", __func__, 1); } } return 0; } /*--------------------------------------------------------------* * Reading and writing multipage tiff * *--------------------------------------------------------------*/ /*! * \brief pixReadFromMultipageTiff() * * \param[in] fname filename * \param[in,out] poffset set offset to 0 for first image * \return pix, or NULL on error or if previous call returned the last image * *
 * Notes:
 *      (1) This allows overhead for traversal of a multipage tiff file
 *          to be linear in the number of images.  This will also work
 *          with a singlepage tiff file.
 *      (2) No TIFF internal data structures are exposed to the caller
 *          (thanks to Jeff Breidenbach).
 *      (3) offset is the byte offset of a particular image in a multipage
 *          tiff file. To get the first image in the file, input the
 *          special offset value of 0.
 *      (4) The offset is updated to point to the next image, for a
 *          subsequent call.
 *      (5) On the last image, the offset returned is 0.  Exit the loop
 *          when the returned offset is 0.
 *      (6) For reading a multipage tiff from a memory buffer, see
 *            pixReadMemFromMultipageTiff()
 *      (7) Example usage for reading all the images in the tif file:
 *            size_t offset = 0;
 *            do {
 *                Pix *pix = pixReadFromMultipageTiff(filename, &offset);
 *                // do something with pix
 *            } while (offset != 0);
 * 
*/ PIX * pixReadFromMultipageTiff(const char *fname, size_t *poffset) { l_int32 retval; size_t offset; PIX *pix; TIFF *tif; if (!fname) return (PIX *)ERROR_PTR("fname not defined", __func__, NULL); if (!poffset) return (PIX *)ERROR_PTR("&offset not defined", __func__, NULL); if ((tif = openTiff(fname, "r")) == NULL) { L_ERROR("tif open failed for %s\n", __func__, fname); return NULL; } /* Set ptrs in the TIFF to the beginning of the image */ offset = *poffset; retval = (offset == 0) ? TIFFSetDirectory(tif, 0) : TIFFSetSubDirectory(tif, offset); if (retval == 0) { TIFFClose(tif); return NULL; } if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFClose(tif); return NULL; } /* Advance to the next image and return the new offset */ TIFFReadDirectory(tif); *poffset = TIFFCurrentDirOffset(tif); TIFFClose(tif); return pix; } /*! * \brief pixaReadMultipageTiff() * * \param[in] filename input tiff file * \return pixa of page images, or NULL on error */ PIXA * pixaReadMultipageTiff(const char *filename) { l_int32 i, npages; FILE *fp; PIX *pix; PIXA *pixa; TIFF *tif; if (!filename) return (PIXA *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXA *)ERROR_PTR_1("stream not opened", filename, __func__, NULL); if (fileFormatIsTiff(fp)) { tiffGetCount(fp, &npages); L_INFO(" Tiff: %d pages\n", __func__, npages); } else { return (PIXA *)ERROR_PTR_1("file is not tiff", filename, __func__, NULL); } if ((tif = fopenTiff(fp, "r")) == NULL) return (PIXA *)ERROR_PTR_1("tif not opened", filename, __func__, NULL); pixa = pixaCreate(npages); pix = NULL; for (i = 0; i < npages; i++) { if ((pix = pixReadFromTiffStream(tif)) != NULL) { pixaAddPix(pixa, pix, L_INSERT); } else { L_WARNING("pix not read for page %d\n", __func__, i); } /* Advance to the next directory (i.e., the next image) */ if (TIFFReadDirectory(tif) == 0) break; } fclose(fp); TIFFCleanup(tif); return pixa; } /*! * \brief pixaWriteMultipageTiff() * * \param[in] fname input tiff file * \param[in] pixa any depth; colormap will be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The tiff directory overhead is O(n^2).  I have not been
 *          able to reduce it to O(n).  The overhead for n = 2000 is
 *          about 1 second.
 * 
*/ l_ok pixaWriteMultipageTiff(const char *fname, PIXA *pixa) { const char *modestr; l_int32 i, n; PIX *pix1; if (!fname) return ERROR_INT("fname not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { modestr = (i == 0) ? "w" : "a"; pix1 = pixaGetPix(pixa, i, L_CLONE); if (pixGetDepth(pix1) == 1) pixWriteTiff(fname, pix1, IFF_TIFF_G4, modestr); else pixWriteTiff(fname, pix1, IFF_TIFF_ZIP, modestr); pixDestroy(&pix1); } return 0; } /*! * \brief writeMultipageTiff() * * \param[in] dirin input directory * \param[in] substr [optional] substring filter on filenames; can be NULL * \param[in] fileout output multipage tiff file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This writes a set of image files in a directory out
 *          as a multipage tiff file.  The images can be in any
 *          initial file format.
 *      (2) Images with a colormap have the colormap removed before
 *          re-encoding as tiff.
 *      (3) All images are encoded losslessly.  Those with 1 bpp are
 *          encoded 'g4'.  The rest are encoded as 'zip' (flate encoding).
 *          Because it is lossless, this is an expensive method for
 *          saving most rgb images.
 *      (4) The tiff directory overhead is quadratic in the number of
 *          images.  To avoid this for very large numbers of images to be
 *          written, apply the method used in pixaWriteMultipageTiff().
 * 
*/ l_ok writeMultipageTiff(const char *dirin, const char *substr, const char *fileout) { SARRAY *sa; if (!dirin) return ERROR_INT("dirin not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the tiff file */ writeMultipageTiffSA(sa, fileout); sarrayDestroy(&sa); return 0; } /*! * \brief writeMultipageTiffSA() * * \param[in] sa string array of full path names * \param[in] fileout output ps file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See writeMultipageTiff()
 * 
*/ l_ok writeMultipageTiffSA(SARRAY *sa, const char *fileout) { char *fname; const char *op; l_int32 i, nfiles, firstfile, format; PIX *pix; if (!sa) return ERROR_INT("sa not defined", __func__, 1); if (!fileout) return ERROR_INT("fileout not defined", __func__, 1); nfiles = sarrayGetCount(sa); firstfile = TRUE; for (i = 0; i < nfiles; i++) { op = (firstfile) ? "w" : "a"; fname = sarrayGetString(sa, i, L_NOCOPY); findFileFormat(fname, &format); if (format == IFF_UNKNOWN) { L_INFO("format of %s not known\n", __func__, fname); continue; } if ((pix = pixRead(fname)) == NULL) { L_WARNING("pix not made for file: %s\n", __func__, fname); continue; } if (pixGetDepth(pix) == 1) pixWriteTiff(fileout, pix, IFF_TIFF_G4, op); else pixWriteTiff(fileout, pix, IFF_TIFF_ZIP, op); firstfile = FALSE; pixDestroy(&pix); } return 0; } /*--------------------------------------------------------------* * Print info to stream * *--------------------------------------------------------------*/ /*! * \brief fprintTiffInfo() * * \param[in] fpout stream for output of tag data * \param[in] tiffile input * \return 0 if OK; 1 on error */ l_ok fprintTiffInfo(FILE *fpout, const char *tiffile) { TIFF *tif; if (!tiffile) return ERROR_INT("tiffile not defined", __func__, 1); if (!fpout) return ERROR_INT("stream out not defined", __func__, 1); if ((tif = openTiff(tiffile, "rb")) == NULL) return ERROR_INT("tif not open for read", __func__, 1); TIFFPrintDirectory(tif, fpout, 0); TIFFClose(tif); return 0; } /*--------------------------------------------------------------* * Get page count * *--------------------------------------------------------------*/ /*! * \brief tiffGetCount() * * \param[in] fp file stream opened for read * \param[out] pn number of images * \return 0 if OK; 1 on error */ l_ok tiffGetCount(FILE *fp, l_int32 *pn) { l_int32 i; TIFF *tif; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pn) return ERROR_INT("&n not defined", __func__, 1); *pn = 0; if ((tif = fopenTiff(fp, "r")) == NULL) return ERROR_INT("tif not open for read", __func__, 1); for (i = 1; ; i++) { if (TIFFReadDirectory(tif) == 0) break; if (i == ManyPagesInTiffFile + 1) { L_WARNING("big file: more than %d pages\n", __func__, ManyPagesInTiffFile); } } *pn = i; TIFFCleanup(tif); return 0; } /*--------------------------------------------------------------* * Get resolution from tif * *--------------------------------------------------------------*/ /*! * \brief getTiffResolution() * * \param[in] fp file stream opened for read * \param[out] pxres, pyres resolution in ppi * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If neither resolution field is set, this is not an error;
 *          the returned resolution values are 0 (designating 'unknown').
 * 
*/ l_ok getTiffResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { TIFF *tif; if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", __func__, 1); *pxres = *pyres = 0; if (!fp) return ERROR_INT("stream not opened", __func__, 1); if ((tif = fopenTiff(fp, "r")) == NULL) return ERROR_INT("tif not open for read", __func__, 1); getTiffStreamResolution(tif, pxres, pyres); TIFFCleanup(tif); return 0; } /*! * \brief getTiffStreamResolution() * * \param[in] tif TIFF handle opened for read * \param[out] pxres, pyres resolution in ppi * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) If neither resolution field is set, this is not an error;
 *          the returned resolution values are 0 (designating 'unknown').
 * 
*/ static l_int32 getTiffStreamResolution(TIFF *tif, l_int32 *pxres, l_int32 *pyres) { l_uint16 resunit; l_int32 foundxres, foundyres; l_float32 fxres, fyres; if (!tif) return ERROR_INT("tif not opened", __func__, 1); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", __func__, 1); *pxres = *pyres = 0; TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &resunit); foundxres = TIFFGetField(tif, TIFFTAG_XRESOLUTION, &fxres); foundyres = TIFFGetField(tif, TIFFTAG_YRESOLUTION, &fyres); if (!foundxres && !foundyres) return 1; if (isnan(fxres) || isnan(fyres)) return 1; if (!foundxres && foundyres) fxres = fyres; else if (foundxres && !foundyres) fyres = fxres; /* Avoid overflow into int32; set max fxres and fyres to 5 x 10^8 */ if (fxres < 0 || fxres > (1L << 29) || fyres < 0 || fyres > (1L << 29)) return ERROR_INT("fxres and/or fyres values are invalid", __func__, 1); if (resunit == RESUNIT_CENTIMETER) { /* convert to ppi */ *pxres = (l_int32)(2.54 * fxres + 0.5); *pyres = (l_int32)(2.54 * fyres + 0.5); } else { *pxres = (l_int32)(fxres + 0.5); *pyres = (l_int32)(fyres + 0.5); } return 0; } /*--------------------------------------------------------------* * Get some tiff header information * *--------------------------------------------------------------*/ /*! * \brief readHeaderTiff() * * \param[in] filename * \param[in] n page image number: 0-based * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 * \param[out] pspp [optional] samples per pixel -- 1 or 3 * \param[out] pres [optional] resolution in x dir; NULL to ignore * \param[out] pcmap [optional] colormap exists; input NULL to ignore * \param[out] pformat [optional] tiff format; input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, cmap is returned as 1; else 0.
 *      (2) If %n is equal to or greater than the number of images, returns 1.
 * 
*/ l_ok readHeaderTiff(const char *filename, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_int32 ret; FILE *fp; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if (pformat) *pformat = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) return ERROR_INT("no results requested", __func__, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); ret = freadHeaderTiff(fp, n, pw, ph, pbps, pspp, pres, pcmap, pformat); fclose(fp); return ret; } /*! * \brief freadHeaderTiff() * * \param[in] fp file stream * \param[in] n page image number: 0-based * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 * \param[out] pspp [optional] samples per pixel -- 1 or 3 * \param[out] pres [optional] resolution in x dir; NULL to ignore * \param[out] pcmap [optional] colormap exists; input NULL to ignore * \param[out] pformat [optional] tiff format; input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If there is a colormap, cmap is returned as 1; else 0.
 *      (2) If %n is equal to or greater than the number of images, returns 1.
 * 
*/ l_ok freadHeaderTiff(FILE *fp, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_int32 i, ret, format; TIFF *tif; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if (pformat) *pformat = 0; if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (n < 0) return ERROR_INT("image index must be >= 0", __func__, 1); if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) return ERROR_INT("no results requested", __func__, 1); findFileFormatStream(fp, &format); if (!L_FORMAT_IS_TIFF(format)) return ERROR_INT("file not tiff format", __func__, 1); if ((tif = fopenTiff(fp, "r")) == NULL) return ERROR_INT("tif not open for read", __func__, 1); for (i = 0; i < n; i++) { if (TIFFReadDirectory(tif) == 0) return ERROR_INT("image n not found in file", __func__, 1); } ret = tiffReadHeaderTiff(tif, pw, ph, pbps, pspp, pres, pcmap, pformat); TIFFCleanup(tif); return ret; } /*! * \brief readHeaderMemTiff() * * \param[in] cdata const; tiff-encoded * \param[in] size size of data * \param[in] n page image number: 0-based * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 * \param[out] pspp [optional] samples per pixel -- 1 or 3 * \param[out] pres [optional] resolution in x dir; NULL to ignore * \param[out] pcmap [optional] colormap exists; input NULL to ignore * \param[out] pformat [optional] tiff format; input NULL to ignore * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream.
 *      (2) Returns res = 0 if not set in the file.
 * 
*/ l_ok readHeaderMemTiff(const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_uint8 *data; l_int32 i, ret; TIFF *tif; if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if (pformat) *pformat = 0; if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) return ERROR_INT("no results requested", __func__, 1); if (!cdata) return ERROR_INT("cdata not defined", __func__, 1); /* Open a tiff stream to memory */ data = (l_uint8 *)cdata; /* we're really not going to change this */ if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) return ERROR_INT("tiff stream not opened", __func__, 1); for (i = 0; i < n; i++) { if (TIFFReadDirectory(tif) == 0) { TIFFClose(tif); return ERROR_INT("image n not found in file", __func__, 1); } } ret = tiffReadHeaderTiff(tif, pw, ph, pbps, pspp, pres, pcmap, pformat); TIFFClose(tif); return ret; } /*! * \brief tiffReadHeaderTiff() * * \param[in] tif * \param[out] pw [optional] width * \param[out] ph [optional] height * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 * \param[out] pspp [optional] samples per pixel -- 1 or 3 * \param[out] pres [optional] resolution in x dir; NULL to ignore * \param[out] pcmap [optional] cmap exists; input NULL to ignore * \param[out] pformat [optional] tiff format; input NULL to ignore * \return 0 if OK, 1 on error */ static l_int32 tiffReadHeaderTiff(TIFF *tif, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_uint16 tiffcomp; l_uint16 bps, spp; l_uint16 *rmap, *gmap, *bmap; l_int32 xres, yres; l_uint32 w, h; if (!tif) return ERROR_INT("tif not opened", __func__, 1); TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); if (w < 1 || h < 1) return ERROR_INT("tif w and h not both > 0", __func__, 1); if (bps != 1 && bps != 2 && bps != 4 && bps != 8 && bps != 16) return ERROR_INT("bps not in set {1,2,4,8,16}", __func__, 1); if (spp != 1 && spp != 2 && spp != 3 && spp != 4) return ERROR_INT("spp not in set {1,2,3,4}", __func__, 1); if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (pres) { if (getTiffStreamResolution(tif, &xres, &yres) == 0) *pres = (l_int32)xres; } if (pcmap) { if (TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) *pcmap = 1; } if (pformat) { TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); *pformat = getTiffCompressedFormat(tiffcomp); } return 0; } /*! * \brief findTiffCompression() * * \param[in] fp file stream; must be rewound to BOF * \param[out] pcomptype compression type * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The returned compression type is that defined in
 *          the enum in imageio.h.  It is not the tiff flag value.
 *      (2) The compression type is initialized to IFF_UNKNOWN.
 *          If it is not one of the specified types, the returned
 *          type is IFF_TIFF, which indicates no compression.
 *      (3) When this function is called, the stream must be at BOF.
 *          If the opened stream is to be used again to read the
 *          file, it must be rewound to BOF after calling this function.
 * 
*/ l_ok findTiffCompression(FILE *fp, l_int32 *pcomptype) { l_uint16 tiffcomp; TIFF *tif; if (!pcomptype) return ERROR_INT("&comptype not defined", __func__, 1); *pcomptype = IFF_UNKNOWN; /* init */ if (!fp) return ERROR_INT("stream not defined", __func__, 1); if ((tif = fopenTiff(fp, "r")) == NULL) return ERROR_INT("tif not opened", __func__, 1); TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); *pcomptype = getTiffCompressedFormat(tiffcomp); TIFFCleanup(tif); return 0; } /*! * \brief getTiffCompressedFormat() * * \param[in] tiffcomp defined in tiff.h * \return compression format defined in imageio.h * *
 * Notes:
 *      (1) The input must be the actual tiff compression type
 *          returned by a tiff library call.  It should always be
 *          a valid tiff type.
 *      (2) The return type is defined in the enum in imageio.h.
 * 
*/ static l_int32 getTiffCompressedFormat(l_uint16 tiffcomp) { l_int32 comptype; switch (tiffcomp) { case COMPRESSION_CCITTFAX4: comptype = IFF_TIFF_G4; break; case COMPRESSION_CCITTFAX3: comptype = IFF_TIFF_G3; break; case COMPRESSION_CCITTRLE: comptype = IFF_TIFF_RLE; break; case COMPRESSION_PACKBITS: comptype = IFF_TIFF_PACKBITS; break; case COMPRESSION_LZW: comptype = IFF_TIFF_LZW; break; case COMPRESSION_ADOBE_DEFLATE: comptype = IFF_TIFF_ZIP; break; case COMPRESSION_JPEG: comptype = IFF_TIFF_JPEG; break; default: comptype = IFF_TIFF; break; } return comptype; } /*--------------------------------------------------------------* * Extraction of tiff g4 data * *--------------------------------------------------------------*/ /*! * \brief extractG4DataFromFile() * * \param[in] filein * \param[out] pdata binary data of ccitt g4 encoded stream * \param[out] pnbytes size of binary data * \param[out] pw [optional] image width * \param[out] ph [optional] image height * \param[out] pminisblack [optional] boolean * \return 0 if OK, 1 on error */ l_ok extractG4DataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack) { l_uint8 *inarray, *data; l_uint16 minisblack, comptype; /* accessors require l_uint16 */ l_int32 istiff; l_uint32 w, h, rowsperstrip; /* accessors require l_uint32 */ l_uint32 diroff; size_t fbytes, nbytes; FILE *fpin; TIFF *tif; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", __func__, 1); if (!pw && !ph && !pminisblack) return ERROR_INT("no output data requested", __func__, 1); *pdata = NULL; *pnbytes = 0; if ((fpin = fopenReadStream(filein)) == NULL) return ERROR_INT_1("stream not opened to file", filein, __func__, 1); istiff = fileFormatIsTiff(fpin); fclose(fpin); if (!istiff) return ERROR_INT_1("filein not tiff", filein, __func__, 1); if ((inarray = l_binaryRead(filein, &fbytes)) == NULL) return ERROR_INT_1("inarray not made", filein, __func__, 1); /* Get metadata about the image */ if ((tif = openTiff(filein, "rb")) == NULL) { LEPT_FREE(inarray); return ERROR_INT_1("tif not open for read", filein, __func__, 1); } TIFFGetField(tif, TIFFTAG_COMPRESSION, &comptype); if (comptype != COMPRESSION_CCITTFAX4) { LEPT_FREE(inarray); TIFFClose(tif); return ERROR_INT_1("filein is not g4 compressed", filein, __func__, 1); } TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); if (h != rowsperstrip) L_WARNING("more than 1 strip\n", __func__); /* From the standard: TIFFTAG_PHOTOMETRIC = 0 (false) --> min value is white. TIFFTAG_PHOTOMETRIC = 1 (true) --> min value is black. Most 1 bpp tiffs have the tag value 0 (black is 1), because there are fewer black pixels than white pixels, so it makes sense to encode runs of black pixels. */ TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &minisblack); /* TIFFPrintDirectory(tif, stderr, 0); */ TIFFClose(tif); if (pw) *pw = (l_int32)w; if (ph) *ph = (l_int32)h; if (pminisblack) *pminisblack = (l_int32)minisblack; /* The header has 8 bytes: the first 2 are the magic number, * the next 2 are the version, and the last 4 are the * offset to the first directory. That's what we want here. * We have to test the byte order before decoding 4 bytes! */ if (inarray[0] == 0x4d) { /* big-endian */ diroff = (inarray[4] << 24) | (inarray[5] << 16) | (inarray[6] << 8) | inarray[7]; } else { /* inarray[0] == 0x49 : little-endian */ diroff = (inarray[7] << 24) | (inarray[6] << 16) | (inarray[5] << 8) | inarray[4]; } /* lept_stderr(" diroff = %d, %x\n", diroff, diroff); */ /* Extract the ccittg4 encoded data from the tiff file. * We skip the 8 byte header and take nbytes of data, * up to the beginning of the directory (at diroff) */ nbytes = diroff - 8; if (nbytes > MaxNumTiffBytes) { LEPT_FREE(inarray); L_ERROR("requesting %zu bytes > %zu\n", __func__, nbytes, MaxNumTiffBytes); return 1; } *pnbytes = nbytes; if ((data = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) { LEPT_FREE(inarray); return ERROR_INT("data not allocated", __func__, 1); } *pdata = data; memcpy(data, inarray + 8, nbytes); LEPT_FREE(inarray); return 0; } /*--------------------------------------------------------------* * Open tiff stream from file stream * *--------------------------------------------------------------*/ /*! * \brief fopenTiff() * * \param[in] fp file stream * \param[in] modestring "r", "w", ... * \return tiff data structure, opened for a file descriptor * *
 * Notes:
 *      (1) Why is this here?  Leffler did not provide a function that
 *          takes a stream and gives a TIFF.  He only gave one that
 *          generates a TIFF starting with a file descriptor.  So we
 *          need to make it here, because it is useful to have functions
 *          that take a stream as input.
 *      (2) We use TIFFClientOpen() together with a set of static wrapper
 *          functions which map TIFF read, write, seek, close and size.
 *          to functions expecting a cookie of type stream (i.e. FILE *).
 *          This implementation was contributed by JÃŧrgen BuchmÃŧller.
 * 
*/ static TIFF * fopenTiff(FILE *fp, const char *modestring) { if (!fp) return (TIFF *)ERROR_PTR("stream not opened", __func__, NULL); if (!modestring) return (TIFF *)ERROR_PTR("modestring not defined", __func__, NULL); TIFFSetWarningHandler(NULL); /* disable warnings */ TIFFSetErrorHandler(NULL); /* disable error messages */ fseek(fp, 0, SEEK_SET); return TIFFClientOpen("TIFFstream", modestring, (thandle_t)fp, lept_read_proc, lept_write_proc, lept_seek_proc, lept_close_proc, lept_size_proc, NULL, NULL); } /*--------------------------------------------------------------* * Wrapper for TIFFOpen * *--------------------------------------------------------------*/ /*! * \brief openTiff() * * \param[in] filename * \param[in] modestring "r", "w", ... * \return tiff data structure * *
 * Notes:
 *      (1) This handles multi-platform file naming.
 * 
*/ static TIFF * openTiff(const char *filename, const char *modestring) { char *fname; TIFF *tif; if (!filename) return (TIFF *)ERROR_PTR("filename not defined", __func__, NULL); if (!modestring) return (TIFF *)ERROR_PTR("modestring not defined", __func__, NULL); TIFFSetWarningHandler(NULL); /* disable warnings */ TIFFSetErrorHandler(NULL); /* disable error messages */ fname = genPathname(filename, NULL); tif = TIFFOpen(fname, modestring); LEPT_FREE(fname); return tif; } /*----------------------------------------------------------------------* * Memory I/O: reading memory --> pix and writing pix --> memory * *----------------------------------------------------------------------*/ /* It would be nice to use open_memstream() and fmemopen() * for writing and reading to memory, rsp. These functions manage * memory for writes and reads that use a file streams interface. * Unfortunately, the tiff library only has an interface for reading * and writing to file descriptors, not to file streams. The tiff * library procedure is to open a "tiff stream" and read/write to it. * The library provides a client interface for managing the I/O * from memory, which requires seven callbacks. See the TIFFClientOpen * man page for callback signatures. Adam Langley provided the code * to do this. */ /*! * \brief Memory stream buffer used with TIFFClientOpen() * * The L_Memstram %buffer has different functions in writing and reading. * * * In reading, it is assigned to the data and read from as * the tiff library uncompresses the data and generates the pix. * The %offset points to the current read position in the data, * and the %hw always gives the number of bytes of data. * The %outdata and %outsize ptrs are not used. * When finished, tiffCloseCallback() simply frees the L_Memstream. * * * In writing, it accepts the data that the tiff library * produces when a pix is compressed. the buffer points to a * malloced area of %bufsize bytes. The current writing position * in the buffer is %offset and the most ever written is %hw. * The buffer is expanded as necessary. When finished, * tiffCloseCallback() assigns the %outdata and %outsize ptrs * to the %buffer and %bufsize results, and frees the L_Memstream. */ struct L_Memstream { l_uint8 *buffer; /* expands to hold data when written to; */ /* fixed size when read from. */ size_t bufsize; /* current size allocated when written to; */ /* fixed size of input data when read from. */ size_t offset; /* byte offset from beginning of buffer. */ size_t hw; /* high-water mark; max bytes in buffer. */ l_uint8 **poutdata; /* input param for writing; data goes here. */ size_t *poutsize; /* input param for writing; data size goes here. */ }; typedef struct L_Memstream L_MEMSTREAM; /* These are static functions for memory I/O */ static L_MEMSTREAM *memstreamCreateForRead(l_uint8 *indata, size_t pinsize); static L_MEMSTREAM *memstreamCreateForWrite(l_uint8 **poutdata, size_t *poutsize); static tsize_t tiffReadCallback(thandle_t handle, tdata_t data, tsize_t length); static tsize_t tiffWriteCallback(thandle_t handle, tdata_t data, tsize_t length); static toff_t tiffSeekCallback(thandle_t handle, toff_t offset, l_int32 whence); static l_int32 tiffCloseCallback(thandle_t handle); static toff_t tiffSizeCallback(thandle_t handle); static l_int32 tiffMapCallback(thandle_t handle, tdata_t *data, toff_t *length); static void tiffUnmapCallback(thandle_t handle, tdata_t data, toff_t length); static L_MEMSTREAM * memstreamCreateForRead(l_uint8 *indata, size_t insize) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)LEPT_CALLOC(1, sizeof(L_MEMSTREAM)); mstream->buffer = indata; /* handle to input data array */ mstream->bufsize = insize; /* amount of input data */ mstream->hw = insize; /* high-water mark fixed at input data size */ mstream->offset = 0; /* offset always starts at 0 */ return mstream; } static L_MEMSTREAM * memstreamCreateForWrite(l_uint8 **poutdata, size_t *poutsize) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)LEPT_CALLOC(1, sizeof(L_MEMSTREAM)); mstream->buffer = (l_uint8 *)LEPT_CALLOC(8 * 1024, 1); mstream->bufsize = 8 * 1024; mstream->poutdata = poutdata; /* used only at end of write */ mstream->poutsize = poutsize; /* ditto */ mstream->hw = mstream->offset = 0; return mstream; } static tsize_t tiffReadCallback(thandle_t handle, tdata_t data, tsize_t length) { L_MEMSTREAM *mstream; size_t amount; mstream = (L_MEMSTREAM *)handle; amount = L_MIN((size_t)length, mstream->hw - mstream->offset); /* Fuzzed files can create this condition! */ if (mstream->offset + amount < amount || /* overflow */ mstream->offset + amount > mstream->hw) { lept_stderr("Bad file: amount too big: %zu\n", amount); return 0; } memcpy(data, mstream->buffer + mstream->offset, amount); mstream->offset += amount; return amount; } static tsize_t tiffWriteCallback(thandle_t handle, tdata_t data, tsize_t length) { L_MEMSTREAM *mstream; size_t newsize; /* reallocNew() uses calloc to initialize the array. * If malloc is used instead, for some of the encoding methods, * not all the data in 'bufsize' bytes in the buffer will * have been initialized by the end of the compression. */ mstream = (L_MEMSTREAM *)handle; if (mstream->offset + length > mstream->bufsize) { newsize = 2 * (mstream->offset + length); mstream->buffer = (l_uint8 *)reallocNew((void **)&mstream->buffer, mstream->hw, newsize); mstream->bufsize = newsize; } memcpy(mstream->buffer + mstream->offset, data, length); mstream->offset += length; mstream->hw = L_MAX(mstream->offset, mstream->hw); return length; } static toff_t tiffSeekCallback(thandle_t handle, toff_t offset, l_int32 whence) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; switch (whence) { case SEEK_SET: /* lept_stderr("seek_set: offset = %d\n", offset); */ if((size_t)offset != offset) { /* size_t overflow on uint32 */ return (toff_t)ERROR_INT("too large offset value", __func__, 1); } mstream->offset = offset; break; case SEEK_CUR: /* lept_stderr("seek_cur: offset = %d\n", offset); */ mstream->offset += offset; break; case SEEK_END: /* lept_stderr("seek end: hw = %d, offset = %d\n", mstream->hw, offset); */ mstream->offset = mstream->hw - offset; /* offset >= 0 */ break; default: return (toff_t)ERROR_INT("bad whence value", __func__, mstream->offset); } return mstream->offset; } static l_int32 tiffCloseCallback(thandle_t handle) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; if (mstream->poutdata) { /* writing: save the output data */ *mstream->poutdata = mstream->buffer; *mstream->poutsize = mstream->hw; } LEPT_FREE(mstream); /* never free the buffer! */ return 0; } static toff_t tiffSizeCallback(thandle_t handle) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; return mstream->hw; } static l_int32 tiffMapCallback(thandle_t handle, tdata_t *data, toff_t *length) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; *data = mstream->buffer; *length = mstream->hw; return 0; } static void tiffUnmapCallback(thandle_t handle, tdata_t data, toff_t length) { return; } /*! * \brief fopenTiffMemstream() * * \param[in] filename for error output; can be "" * \param[in] operation "w" for write, "r" for read * \param[out] pdata written data * \param[out] pdatasize size of written data * \return tiff data structure, opened for write to memory * *
 * Notes:
 *      (1) This wraps up a number of callbacks for either:
 *            * reading from tiff in memory buffer --> pix
 *            * writing from pix --> tiff in memory buffer
 *      (2) After use, the memstream is automatically destroyed when
 *          TIFFClose() is called.  TIFFCleanup() doesn't free the memstream.
 *      (3) This does not work in append mode, and in write mode it
 *          does not append.
 * 
*/ static TIFF * fopenTiffMemstream(const char *filename, const char *operation, l_uint8 **pdata, size_t *pdatasize) { L_MEMSTREAM *mstream; TIFF *tif; if (!filename) return (TIFF *)ERROR_PTR("filename not defined", __func__, NULL); if (!operation) return (TIFF *)ERROR_PTR("operation not defined", __func__, NULL); if (!pdata) return (TIFF *)ERROR_PTR("&data not defined", __func__, NULL); if (!pdatasize) return (TIFF *)ERROR_PTR("&datasize not defined", __func__, NULL); if (strcmp(operation, "r") && strcmp(operation, "w")) return (TIFF *)ERROR_PTR("op not 'r' or 'w'", __func__, NULL); if (!strcmp(operation, "r")) mstream = memstreamCreateForRead(*pdata, *pdatasize); else mstream = memstreamCreateForWrite(pdata, pdatasize); if (!mstream) return (TIFF *)ERROR_PTR("mstream not made", __func__, NULL); TIFFSetWarningHandler(NULL); /* disable warnings */ TIFFSetErrorHandler(NULL); /* disable error messages */ tif = TIFFClientOpen(filename, operation, (thandle_t)mstream, tiffReadCallback, tiffWriteCallback, tiffSeekCallback, tiffCloseCallback, tiffSizeCallback, tiffMapCallback, tiffUnmapCallback); if (!tif) LEPT_FREE(mstream); return tif; } /*! * \brief pixReadMemTiff() * * \param[in] cdata const; tiff-encoded * \param[in] size size of cdata * \param[in] n page image number: 0-based * \return pix, or NULL on error * *
 * Notes:
 *      (1) This is a version of pixReadTiff(), where the data is read
 *          from a memory buffer and uncompressed.
 *      (2) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream.
 *      (3) No warning messages on failure, because of how multi-page
 *          TIFF reading works. You are supposed to keep trying until
 *          it stops working.
 *      (4) Tiff directory overhead is linear in the input page number.
 *          If reading many images, use pixReadMemFromMultipageTiff().
 * 
*/ PIX * pixReadMemTiff(const l_uint8 *cdata, size_t size, l_int32 n) { l_uint8 *data; l_int32 i; PIX *pix; TIFF *tif; if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", __func__, NULL); data = (l_uint8 *)cdata; /* we're really not going to change this */ if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) return (PIX *)ERROR_PTR("tiff stream not opened", __func__, NULL); pix = NULL; for (i = 0; ; i++) { if (i == n) { if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFClose(tif); return NULL; } pixSetInputFormat(pix, IFF_TIFF); break; } if (TIFFReadDirectory(tif) == 0) break; if (i == ManyPagesInTiffFile + 1) { L_WARNING("big file: more than %d pages\n", __func__, ManyPagesInTiffFile); } } TIFFClose(tif); return pix; } /*! * \brief pixReadMemFromMultipageTiff() * * \param[in] cdata const; tiff-encoded * \param[in] size size of cdata * \param[in,out] poffset set offset to 0 for first image * \return pix, or NULL on error or if previous call returned the last image * *
 * Notes:
 *      (1) This is a read-from-memory version of pixReadFromMultipageTiff().
 *          See that function for usage.
 *      (2) If reading sequentially from the tiff data, this is more
 *          efficient than pixReadMemTiff(), which has an overhead
 *          proportional to the image index n.
 *      (3) Example usage for reading all the images:
 *            size_t offset = 0;
 *            do {
 *                Pix *pix = pixReadMemFromMultipageTiff(data, size, &offset);
 *                // do something with pix
 *            } while (offset != 0);
 * 
*/ PIX * pixReadMemFromMultipageTiff(const l_uint8 *cdata, size_t size, size_t *poffset) { l_uint8 *data; l_int32 retval; size_t offset; PIX *pix; TIFF *tif; if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", __func__, NULL); if (!poffset) return (PIX *)ERROR_PTR("&offset not defined", __func__, NULL); data = (l_uint8 *)cdata; /* we're really not going to change this */ if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) return (PIX *)ERROR_PTR("tiff stream not opened", __func__, NULL); /* Set ptrs in the TIFF to the beginning of the image */ offset = *poffset; retval = (offset == 0) ? TIFFSetDirectory(tif, 0) : TIFFSetSubDirectory(tif, offset); if (retval == 0) { TIFFClose(tif); return NULL; } if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFClose(tif); return NULL; } /* Advance to the next image and return the new offset */ TIFFReadDirectory(tif); *poffset = TIFFCurrentDirOffset(tif); TIFFClose(tif); return pix; } /*! * \brief pixaReadMemMultipageTiff() * * \param[in] data const; multiple pages; tiff-encoded * \param[in] size size of cdata * \return pixa, or NULL on error * *
 * Notes:
 *      (1) This is an O(n) read-from-memory version of pixaReadMultipageTiff().
 * 
*/ PIXA * pixaReadMemMultipageTiff(const l_uint8 *data, size_t size) { size_t offset; PIX *pix; PIXA *pixa; if (!data) return (PIXA *)ERROR_PTR("data not defined", __func__, NULL); offset = 0; pixa = pixaCreate(0); do { pix = pixReadMemFromMultipageTiff(data, size, &offset); pixaAddPix(pixa, pix, L_INSERT); } while (offset != 0); return pixa; } /*! * \brief pixaWriteMemMultipageTiff() * * \param[out] pdata const; tiff-encoded * \param[out] psize size of data * \param[in] pixa any depth; colormap will be removed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) fopenTiffMemstream() does not work in append mode, so we
 *          must work-around with a temporary file.
 *      (2) Getting a file stream from
 *            open_memstream((char **)pdata, psize)
 *          does not work with the tiff directory.
 * 
*/ l_ok pixaWriteMemMultipageTiff(l_uint8 **pdata, size_t *psize, PIXA *pixa) { const char *modestr; l_int32 i, n; FILE *fp; PIX *pix1; if (pdata) *pdata = NULL; if (!pdata) return ERROR_INT("pdata not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #else if ((fp = tmpfile()) == NULL) return ERROR_INT("tmpfile stream not opened", __func__, 1); #endif /* _WIN32 */ n = pixaGetCount(pixa); for (i = 0; i < n; i++) { modestr = (i == 0) ? "w" : "a"; pix1 = pixaGetPix(pixa, i, L_CLONE); if (pixGetDepth(pix1) == 1) pixWriteStreamTiffWA(fp, pix1, IFF_TIFF_G4, modestr); else pixWriteStreamTiffWA(fp, pix1, IFF_TIFF_ZIP, modestr); pixDestroy(&pix1); } rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); return 0; } /*! * \brief pixWriteMemTiff() * * \param[out] pdata data of tiff compressed image * \param[out] psize size of returned data * \param[in] pix * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \return 0 if OK, 1 on error * * Usage: * 1) See pixWriteTiff(. This version writes to * memory instead of to a file. */ l_ok pixWriteMemTiff(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype) { return pixWriteMemTiffCustom(pdata, psize, pix, comptype, NULL, NULL, NULL, NULL); } /*! * \brief pixWriteMemTiffCustom() * * \param[out] pdata data of tiff compressed image * \param[out] psize size of returned data * \param[in] pix * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG * \param[in] natags [optional] NUMA of custom tiff tags * \param[in] savals [optional] SARRAY of values * \param[in] satypes [optional] SARRAY of types * \param[in] nasizes [optional] NUMA of sizes * \return 0 if OK, 1 on error * * Usage: * 1) See pixWriteTiffCustom(. This version writes to * memory instead of to a file. * 2) Use TIFFClose(); TIFFCleanup( doesn't free internal memstream. */ l_ok pixWriteMemTiffCustom(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_int32 ret; TIFF *tif; if (!pdata) return ERROR_INT("&data not defined", __func__, 1); if (!psize) return ERROR_INT("&size not defined", __func__, 1); if (!pix) return ERROR_INT("&pix not defined", __func__, 1); if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP && comptype != IFF_TIFF_JPEG) { L_WARNING("invalid compression type for bpp > 1\n", __func__); comptype = IFF_TIFF_ZIP; } if ((tif = fopenTiffMemstream("tifferror", "w", pdata, psize)) == NULL) return ERROR_INT("tiff stream not opened", __func__, 1); ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, satypes, nasizes); TIFFClose(tif); return ret; } /* ---------------------------------------*/ #endif /* HAVE_LIBTIFF && HAVE_LIBJPEG */ /* ---------------------------------------*/ leptonica-1.86.0/src/tiffiostub.c000066400000000000000000000177761506303110300167070ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file tiffiostub.c *
 *
 *     Stubs for tiffio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* -----------------------------------------------------------*/ #if !HAVE_LIBTIFF || !HAVE_LIBJPEG /* defined in environ.h */ /* -----------------------------------------------------------*/ PIX * pixReadTiff(const char *filename, l_int32 n) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadStreamTiff(FILE *fp, l_int32 n) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixWriteTiff(const char *filename, PIX *pix, l_int32 comptype, const char *modestring) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteTiffCustom(const char *filename, PIX *pix, l_int32 comptype, const char *modestring, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamTiff(FILE *fp, PIX *pix, l_int32 comptype) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamTiffWA(FILE *fp, PIX *pix, l_int32 comptype, const char *modestr) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadFromMultipageTiff(const char *filename, size_t *poffset) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIXA * pixaReadMultipageTiff(const char *filename) { return (PIXA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixaWriteMultipageTiff(const char *filename, PIXA *pixa) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok writeMultipageTiff(const char *dirin, const char *substr, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok writeMultipageTiffSA(SARRAY *sa, const char *fileout) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok fprintTiffInfo(FILE *fpout, const char *tiffile) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok tiffGetCount(FILE *fp, l_int32 *pn) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok getTiffResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readHeaderTiff(const char *filename, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok freadHeaderTiff(FILE *fp, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemTiff(const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok findTiffCompression(FILE *fp, l_int32 *pcomptype) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok extractG4DataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemTiff(const l_uint8 *cdata, size_t size, l_int32 n) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemFromMultipageTiff(const l_uint8 *cdata, size_t size, size_t *poffset) { return (PIX *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIXA * pixaReadMemMultipageTiff(const l_uint8 *data, size_t size) { return (PIXA *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok pixaWriteMemMultipageTiff(l_uint8 **pdata, size_t *psize, PIXA *pixa) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemTiff(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemTiffCustom(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { return ERROR_INT("function not present", __func__, 1); } /* -----------------------------------------*/ #endif /* !HAVE_LIBTIFF || !HAVE_LIBJPEG */ /* -----------------------------------------*/ leptonica-1.86.0/src/utils1.c000066400000000000000000001226601506303110300157370ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file utils1.c *
 *
 *       ------------------------------------------
 *       This file has these utilities:
 *         - error, warning and info messages
 *         - redirection of stderr
 *         - low-level endian conversions
 *         - file corruption operations
 *         - random and prime number operations
 *         - 64-bit hash functions
 *         - leptonica version number accessor
 *         - timing and date operations
 *       ------------------------------------------
 *
 *       Control of error, warning and info messages
 *           l_int32    setMsgSeverity()
 *
 *       Error return functions, invoked by macros
 *           l_int32    returnErrorInt()
 *           l_float32  returnErrorFloat()
 *           void      *returnErrorPtr()
 *           l_int32    returnErrorInt1()
 *           l_float32  returnErrorFloat1()
 *           void      *returnErrorPtr1()
 *
 *       Runtime redirection of stderr
 *           void leptSetStderrHandler()
 *           void lept_stderr()
 *
 *       Test files for equivalence
 *           l_int32    filesAreIdentical()
 *
 *       Byte-swapping data conversion
 *           l_uint16   convertOnBigEnd16()
 *           l_uint32   convertOnBigEnd32()
 *           l_uint16   convertOnLittleEnd16()
 *           l_uint32   convertOnLittleEnd32()
 *
 *       File corruption and byte replacement operations
 *           l_int32    fileCorruptByDeletion()
 *           l_int32    fileCorruptByMutation()
 *           l_int32    fileReplaceBytes()
 *
 *       Generate random integer in given interval
 *           l_int32    genRandomIntOnInterval()
 *
 *       Simple math functions
 *           l_int32    lept_roundftoi()
 *           l_int32    lept_floor()
 *           l_int32    lept_ceiling()
 *
 *       64-bit hash functions
 *           l_int32    l_hashStringToUint64()
 *           l_int32    l_hashStringToUint64Fast()
 *           l_int32    l_hashPtToUint64()
 *           l_int32    l_hashFloat64ToUint64()
 *
 *       Prime finders
 *           l_int32    findNextLargerPrime()
 *           l_int32    lept_isPrime()
 *
 *       Gray code conversion
 *           l_uint32   convertIntToGrayCode()
 *           l_uint32   convertGrayCodeToInt()
 *
 *       Leptonica version number
 *           char      *getLeptonicaVersion()
 *
 *       Timing
 *           void       startTimer()
 *           l_float32  stopTimer()
 *           L_TIMER    startTimerNested()
 *           l_float32  stopTimerNested()
 *           void       l_getCurrentTime()
 *           L_WALLTIMER  *startWallTimer()
 *           l_float32  stopWallTimer()
 *           void       l_getFormattedDate()
 *
 *  For all issues with cross-platform development, see utils2.c.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #ifdef _WIN32 #include #endif /* _WIN32 */ #include #include "allheaders.h" #include /* Global for controlling message output at runtime */ LEPT_DLL l_int32 LeptMsgSeverity = DEFAULT_SEVERITY; #define DEBUG_SEV 0 /*----------------------------------------------------------------------* * Control of error, warning and info messages * *----------------------------------------------------------------------*/ /*! * \brief setMsgSeverity() * * \param[in] newsev * \return oldsev * *
 * Notes:
 *      (1) setMsgSeverity() allows the user to specify the desired
 *          message severity threshold.  Messages of equal or greater
 *          severity will be output.  The previous message severity is
 *          returned when the new severity is set.
 *      (2) If L_SEVERITY_EXTERNAL is passed, then the severity will be
 *          obtained from the LEPT_MSG_SEVERITY environment variable.
 * 
*/ l_int32 setMsgSeverity(l_int32 newsev) { l_int32 oldsev; char *envsev; oldsev = LeptMsgSeverity; if (newsev == L_SEVERITY_EXTERNAL) { envsev = getenv("LEPT_MSG_SEVERITY"); if (envsev) { LeptMsgSeverity = atoi(envsev); #if DEBUG_SEV L_INFO("message severity set to external\n", "setMsgSeverity"); #endif /* DEBUG_SEV */ } else { #if DEBUG_SEV L_WARNING("environment var LEPT_MSG_SEVERITY not defined\n", "setMsgSeverity"); #endif /* DEBUG_SEV */ } } else { LeptMsgSeverity = newsev; #if DEBUG_SEV L_INFO("message severity set to %d\n", "setMsgSeverity", newsev); #endif /* DEBUG_SEV */ } return oldsev; } /*----------------------------------------------------------------------* * Error return functions, invoked by macros * *----------------------------------------------------------------------* * * * (1) These error functions print messages to stderr and allow * * exit from the function that called them. * * (2) They must be invoked only by the three argument macros * * ERROR_INT, ERROR_FLOAT, ERROR_PTR * * or the four argument macros * * ERROR_INT_1, ERROR_FLOAT_1, ERROR_PTR_1 * * which are in environ.h. * * (3) The print output can be disabled at compile time, either * * by using -DNO_CONSOLE_IO or by setting LeptMsgSeverity. * *----------------------------------------------------------------------*/ /*! * \brief returnErrorInt() * * \param[in] msg error message * \param[in] procname use __func__ * \param[in] ival return error val (typically 1 for an error) * \return ival */ l_int32 returnErrorInt(const char *msg, const char *procname, l_int32 ival) { lept_stderr("Error in %s: %s\n", procname, msg); return ival; } /*! * \brief returnErrorFloat() * * \param[in] msg error message * \param[in] procname use __func__ * \param[in] fval return float error val * \return fval */ l_float32 returnErrorFloat(const char *msg, const char *procname, l_float32 fval) { lept_stderr("Error in %s: %s\n", procname, msg); return fval; } /*! * \brief returnErrorPtr() * * \param[in] msg error message * \param[in] procname use __func__ * \param[in] pval return error val (typically null for an error) * \return pval */ void * returnErrorPtr(const char *msg, const char *procname, void *pval) { lept_stderr("Error in %s: %s\n", procname, msg); return pval; } /*! * \brief returnErrorInt1() * * \param[in] msg error message * \param[in] arg additional error message argument * (will be appended to the error message) * \param[in] procname use __func__ * \param[in] ival return error val; typically 1 for an error return * \return ival typically 1 for an error return */ l_int32 returnErrorInt1(const char *msg, const char *arg, const char *procname, l_int32 ival) { lept_stderr("Leptonica Error in %s: %s: %s\n", procname, msg, arg); return ival; } /*! * \brief returnErrorFloat1() * * \param[in] msg error message * \param[in] arg additional error message argument * (will be appended to the error message) * \param[in] procname use __func__ * \param[in] fval return float error val * \return fval */ l_float32 returnErrorFloat1(const char *msg, const char *arg, const char *procname, l_float32 fval) { lept_stderr("Leptonica Error in %s: %s: %s\n", procname, msg, arg); return fval; } /*! * \brief returnErrorPtr1() * * \param[in] msg error message * \param[in] arg additional error message argument * (will be appended to the error message) * \param[in] procname use __func__ * \param[in] pval return error val (typically null for an error) * \return pval */ void * returnErrorPtr1(const char *msg, const char *arg, const char *procname, void *pval) { lept_stderr("Leptonica Error in %s: %s: %s\n", procname, msg, arg); return pval; } /*------------------------------------------------------------------------* * Runtime redirection of stderr * *------------------------------------------------------------------------* * * * The user can provide a callback function to redirect messages * * that would otherwise go to stderr. Here are two examples: * * (1) to stop all messages: * * void send_to_devnull(const char *msg) {} * * (2) to write to the system logger: * * void send_to_syslog(const char *msg) { * * syslog(1, msg); * * } * * These would then be registered using * * leptSetStderrHandler(send_to_devnull); * * and * * leptSetStderrHandler(send_to_syslog); * *------------------------------------------------------------------------*/ /* By default, all messages go to stderr */ static void lept_default_stderr_handler(const char *formatted_msg) { if (formatted_msg) fputs(formatted_msg, stderr); } /* The stderr callback handler is private to leptonica. * By default it writes to stderr. */ void (*stderr_handler)(const char *) = lept_default_stderr_handler; /*! * \brief leptSetStderrHandler() * * \param[in] handler callback function for lept_stderr output * \return void * *
 * Notes:
 *      (1) This registers a handler for redirection of output to stderr
 *          at runtime.
 *      (2) If called with NULL, the output goes to stderr.
 * 
*/ void leptSetStderrHandler(void (*handler)(const char *)) { if (handler) stderr_handler = handler; else stderr_handler = lept_default_stderr_handler; } #define MAX_DEBUG_MESSAGE 2000 /*! * \brief lept_stderr() * * \param[in] fmt format string * \param[in] ... varargs * \return void * *
 * Notes:
 *      (1) This is a replacement for fprintf(), to allow redirection
 *          of output.  All calls to fprintf(stderr, ...) are replaced
 *          with calls to lept_stderr(...).
 *      (2) The message size is limited to 2K bytes.
        (3) This utility was provided by jbarlow83.
 * 
*/ void lept_stderr(const char *fmt, ...) { va_list args; char msg[MAX_DEBUG_MESSAGE]; l_int32 n; va_start(args, fmt); n = vsnprintf(msg, sizeof(msg), fmt, args); va_end(args); if (n < 0) return; (*stderr_handler)(msg); } /*--------------------------------------------------------------------* * Test files for equivalence * *--------------------------------------------------------------------*/ /*! * \brief filesAreIdentical() * * \param[in] fname1 * \param[in] fname2 * \param[out] psame 1 if identical; 0 if different * \return 0 if OK, 1 on error */ l_ok filesAreIdentical(const char *fname1, const char *fname2, l_int32 *psame) { l_int32 i, same; size_t nbytes1, nbytes2; l_uint8 *array1, *array2; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = 0; if (!fname1 || !fname2) return ERROR_INT("both names not defined", __func__, 1); nbytes1 = nbytesInFile(fname1); nbytes2 = nbytesInFile(fname2); if (nbytes1 != nbytes2) return 0; if ((array1 = l_binaryRead(fname1, &nbytes1)) == NULL) return ERROR_INT("array1 not read", __func__, 1); if ((array2 = l_binaryRead(fname2, &nbytes2)) == NULL) { LEPT_FREE(array1); return ERROR_INT("array2 not read", __func__, 1); } same = 1; for (i = 0; i < nbytes1; i++) { if (array1[i] != array2[i]) { same = 0; break; } } LEPT_FREE(array1); LEPT_FREE(array2); *psame = same; return 0; } /*--------------------------------------------------------------------------* * 16 and 32 bit byte-swapping on big endian and little endian machines * *--------------------------------------------------------------------------* * * * These are typically used for I/O conversions: * * (1) endian conversion for data that was read from a file * * (2) endian conversion on data before it is written to a file * *--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------* * 16-bit byte swapping * *--------------------------------------------------------------------*/ #ifdef L_BIG_ENDIAN l_uint16 convertOnBigEnd16(l_uint16 shortin) { return ((shortin << 8) | (shortin >> 8)); } l_uint16 convertOnLittleEnd16(l_uint16 shortin) { return shortin; } #else /* L_LITTLE_ENDIAN */ l_uint16 convertOnLittleEnd16(l_uint16 shortin) { return ((shortin << 8) | (shortin >> 8)); } l_uint16 convertOnBigEnd16(l_uint16 shortin) { return shortin; } #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------------------------* * 32-bit byte swapping * *--------------------------------------------------------------------*/ #ifdef L_BIG_ENDIAN l_uint32 convertOnBigEnd32(l_uint32 wordin) { return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); } l_uint32 convertOnLittleEnd32(l_uint32 wordin) { return wordin; } #else /* L_LITTLE_ENDIAN */ l_uint32 convertOnLittleEnd32(l_uint32 wordin) { return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); } l_uint32 convertOnBigEnd32(l_uint32 wordin) { return wordin; } #endif /* L_BIG_ENDIAN */ /*---------------------------------------------------------------------* * File corruption and byte replacement operations * *---------------------------------------------------------------------*/ /*! * \brief fileCorruptByDeletion() * * \param[in] filein * \param[in] loc fractional location of start of deletion * \param[in] size fractional size of deletion * \param[in] fileout corrupted file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) %loc and %size are expressed as a fraction of the file size.
 *      (2) This makes a copy of the data in %filein, where bytes in the
 *          specified region have deleted.
 *      (3) If (%loc + %size) >= 1.0, this deletes from the position
 *          represented by %loc to the end of the file.
 *      (4) It is useful for testing robustness of I/O wrappers when the
 *          data is corrupted, by simulating data corruption by deletion.
 * 
*/ l_ok fileCorruptByDeletion(const char *filein, l_float32 loc, l_float32 size, const char *fileout) { l_int32 i, locb, sizeb, rembytes; size_t inbytes, outbytes; l_uint8 *datain, *dataout; if (!filein || !fileout) return ERROR_INT("filein and fileout not both specified", __func__, 1); if (loc < 0.0 || loc >= 1.0) return ERROR_INT("loc must be in [0.0 ... 1.0)", __func__, 1); if (size <= 0.0) return ERROR_INT("size must be > 0.0", __func__, 1); if (loc + size > 1.0) size = 1.0f - loc; datain = l_binaryRead(filein, &inbytes); locb = (l_int32)(loc * inbytes + 0.5); locb = L_MIN(locb, inbytes - 1); sizeb = (l_int32)(size * inbytes + 0.5); sizeb = L_MAX(1, sizeb); sizeb = L_MIN(sizeb, inbytes - locb); /* >= 1 */ L_INFO("Removed %d bytes at location %d\n", __func__, sizeb, locb); rembytes = inbytes - locb - sizeb; /* >= 0; to be copied, after excision */ outbytes = inbytes - sizeb; dataout = (l_uint8 *)LEPT_CALLOC(outbytes, 1); for (i = 0; i < locb; i++) dataout[i] = datain[i]; for (i = 0; i < rembytes; i++) dataout[locb + i] = datain[locb + sizeb + i]; l_binaryWrite(fileout, "w", dataout, outbytes); LEPT_FREE(datain); LEPT_FREE(dataout); return 0; } /*! * \brief fileCorruptByMutation() * * \param[in] filein * \param[in] loc fractional location of start of randomization * \param[in] size fractional size of randomization * \param[in] fileout corrupted file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) %loc and %size are expressed as a fraction of the file size.
 *      (2) This makes a copy of the data in %filein, where bytes in the
 *          specified region have been replaced by random data.
 *      (3) If (%loc + %size) >= 1.0, this modifies data from the position
 *          represented by %loc to the end of the file.
 *      (4) It is useful for testing robustness of I/O wrappers when the
 *          data is corrupted, by simulating data corruption.
 * 
*/ l_ok fileCorruptByMutation(const char *filein, l_float32 loc, l_float32 size, const char *fileout) { l_int32 i, locb, sizeb; size_t bytes; l_uint8 *data; if (!filein || !fileout) return ERROR_INT("filein and fileout not both specified", __func__, 1); if (loc < 0.0 || loc >= 1.0) return ERROR_INT("loc must be in [0.0 ... 1.0)", __func__, 1); if (size <= 0.0) return ERROR_INT("size must be > 0.0", __func__, 1); if (loc + size > 1.0) size = 1.0f - loc; data = l_binaryRead(filein, &bytes); locb = (l_int32)(loc * bytes + 0.5); locb = L_MIN(locb, bytes - 1); sizeb = (l_int32)(size * bytes + 0.5); sizeb = L_MAX(1, sizeb); sizeb = L_MIN(sizeb, bytes - locb); /* >= 1 */ L_INFO("Randomizing %d bytes at location %d\n", __func__, sizeb, locb); /* Make an array of random bytes and do the substitution */ for (i = 0; i < sizeb; i++) { data[locb + i] = (l_uint8)(255.9 * ((l_float64)rand() / (l_float64)RAND_MAX)); } l_binaryWrite(fileout, "w", data, bytes); LEPT_FREE(data); return 0; } /*! * \brief fileReplaceBytes() * * \param[in] filein input file * \param[in] start start location for replacement * \param[in] nbytes number of bytes to be removed * \param[in] newdata replacement bytes * \param[in] newsize size of replacement bytes * \param[in] fileout output file * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) To remove %nbytes without replacement, set %newdata == NULL.
 *      (2) One use is for replacing the date/time in a pdf file by a
 *          string of 12 '0's, effectively removing the date without
 *          invalidating the byte counters in the pdf file:
 *              fileReplaceBytes(filein 86 12 (char *)"000000000000" 12 fileout
 * 
*/ l_ok fileReplaceBytes(const char *filein, l_int32 start, l_int32 nbytes, l_uint8 *newdata, size_t newsize, const char *fileout) { l_int32 i, index; size_t inbytes, outbytes; l_uint8 *datain, *dataout; if (!filein || !fileout) return ERROR_INT("filein and fileout not both specified", __func__, 1); datain = l_binaryRead(filein, &inbytes); if (start + nbytes > inbytes) L_WARNING("start + nbytes > length(filein) = %zu\n", __func__, inbytes); if (!newdata) newsize = 0; outbytes = inbytes - nbytes + newsize; if ((dataout = (l_uint8 *)LEPT_CALLOC(outbytes, 1)) == NULL) { LEPT_FREE(datain); return ERROR_INT("calloc fail for dataout", __func__, 1); } for (i = 0; i < start; i++) dataout[i] = datain[i]; for (i = start; i < start + newsize; i++) dataout[i] = newdata[i - start]; index = start + nbytes; /* for datain */ start += newsize; /* for dataout */ for (i = start; i < outbytes; i++, index++) dataout[i] = datain[index]; l_binaryWrite(fileout, "w", dataout, outbytes); LEPT_FREE(datain); LEPT_FREE(dataout); return 0; } /*---------------------------------------------------------------------* * Generate random integer in given interval * *---------------------------------------------------------------------*/ /*! * \brief genRandomIntOnInterval() * * \param[in] start beginning of interval; can be < 0 * \param[in] end end of interval; must be >= start * \param[in] seed use 0 to skip; otherwise call srand * \param[out] pval random integer in interval [start ... end] * \return 0 if OK, 1 on error */ l_ok genRandomIntOnInterval(l_int32 start, l_int32 end, l_int32 seed, l_int32 *pval) { l_float64 range; if (!pval) return ERROR_INT("&val not defined", __func__, 1); *pval = 0; if (end < start) return ERROR_INT("invalid range", __func__, 1); if (seed > 0) srand(seed); range = (l_float64)(end - start + 1); *pval = start + (l_int32)((l_float64)range * ((l_float64)rand() / (l_float64)RAND_MAX)); return 0; } /*---------------------------------------------------------------------* * Simple math functions * *---------------------------------------------------------------------*/ /*! * \brief lept_roundftoi() * * \param[in] fval * \return value rounded to the nearest integer * *
 * Notes:
 *      (1) For fval >= 0, fval --> round(fval) == floor(fval + 0.5)
 *          For fval < 0, fval --> -round(-fval))
 *          This is symmetric around 0.
 *          e.g., for fval in (-0.5 ... 0.5), fval --> 0
 * 
*/ l_int32 lept_roundftoi(l_float32 fval) { return (fval >= 0.0) ? (l_int32)(fval + 0.5) : (l_int32)(fval - 0.5); } /*! * \brief lept_floor() * * \param[in] fval * \return largest integer that is not greater than %fval */ l_int32 lept_floor(l_float32 fval) { return (fval >= 0.0) ? (l_int32)(fval) : -(l_int32)(-fval); } /*! * \brief lept_ceiling() * * \param[in] fval * \return smallest integer that is not less than %fval * *
 * Notes:
 *      (1) If fval is equal to its interger value, return that.
 *          Otherwise:
 *            For fval > 0, fval --> 1 + floor(fval)
 *            For fval < 0, fval --> -(1 + floor(-fval))
 * 
*/ l_int32 lept_ceiling(l_float32 fval) { return (fval == (l_int32)fval ? (l_int32)fval : fval > 0.0 ? 1 + (l_int32)(fval) : -(1 + (l_int32)(-fval))); } /*---------------------------------------------------------------------* * 64-bit hash functions * *---------------------------------------------------------------------*/ /*! * \brief l_hashStringToUint64() * * \param[in] str * \param[out] phash hash value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The intent of the hash is to avoid collisions by mapping
 *          the string as randomly as possible into 64 bits.
 *      (2) To the extent that the hashes are random, the probability of
 *          a collision can be approximated by the square of the number
 *          of strings divided by 2^64.  For 1 million strings, the
 *          collision probability is about 1 in 16 million.
 *      (3) I expect non-randomness of the distribution to be most evident
 *          for small text strings.  This hash function has been tested
 *          for all 5-character text strings composed of 26 letters,
 *          of which there are 26^5 = 12356630.  There are no hash
 *          collisions for this set.
 * 
*/ l_ok l_hashStringToUint64(const char *str, l_uint64 *phash) { l_uint64 hash, mulp; if (phash) *phash = 0; if (!str || (str[0] == '\0')) return ERROR_INT("str not defined or empty", __func__, 1); if (!phash) return ERROR_INT("&hash not defined", __func__, 1); mulp = 26544357894361247; /* prime, about 1/700 of the max uint64 */ hash = 104395301; while (*str) { hash += (*str++ * mulp) ^ (hash >> 7); /* shift [1...23] are ok */ } *phash = hash ^ (hash << 37); return 0; } /*! * \brief l_hashStringToUint64Fast() * * \param[in] str * \param[out] phash hash value * \return 0 if OK, 1 on error * *
 * Notes:
 *     (1) This very simple hash algorithm is described in "The Practice
 *         of Programming" by Kernighan and Pike, p. 57 (1999).
 *     (2) The returned hash value would then be hashed into an index into
 *         the hashtable, using the mod operator with the hashtable size.
 * 
*/ l_ok l_hashStringToUint64Fast(const char *str, l_uint64 *phash) { l_uint64 h; l_uint8 *p; if (phash) *phash = 0; if (!str || (str[0] == '\0')) return ERROR_INT("str not defined or empty", __func__, 1); if (!phash) return ERROR_INT("&hash not defined", __func__, 1); h = 0; for (p = (l_uint8 *)str; *p != '\0'; p++) h = 37 * h + *p; /* 37 is good prime number for this */ *phash = h; return 0; } /*! * \brief l_hashPtToUint64() * * \param[in] x, y * \param[out] phash hash value * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This simple hash function has no collisions for
 *          any of 400 million points with x and y up to 20000.
 * 
*/ l_ok l_hashPtToUint64(l_int32 x, l_int32 y, l_uint64 *phash) { if (!phash) return ERROR_INT("&hash not defined", __func__, 1); *phash = (l_uint64)(2173249142.3849 * x + 3763193258.6227 * y); return 0; } /*! * \brief l_hashFloat64ToUint64() * * \param[in] val * \param[out] phash hash key * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a simple hash for using hashmaps with 64-bit float data.
 *      (2) The resulting hash is called a "key" in a lookup operation.
 *          The bucket for %val in a hashmap is then found by taking the mod
 *          of the hash key with the number of buckets (which is prime).
 * 
*/ l_ok l_hashFloat64ToUint64(l_float64 val, l_uint64 *phash) { if (!phash) return ERROR_INT("&hash not defined", __func__, 1); val = (val >= 0.0) ? 847019.66701 * val : -217324.91613 * val; *phash = (l_uint64)val; return 0; } /*---------------------------------------------------------------------* * Prime finders * *---------------------------------------------------------------------*/ /*! * \brief findNextLargerPrime() * * \param[in] start * \param[out] pprime first prime larger than %start * \return 0 if OK, 1 on error */ l_ok findNextLargerPrime(l_int32 start, l_uint32 *pprime) { l_int32 i, is_prime; if (!pprime) return ERROR_INT("&prime not defined", __func__, 1); *pprime = 0; if (start <= 0) return ERROR_INT("start must be > 0", __func__, 1); for (i = start + 1; ; i++) { lept_isPrime(i, &is_prime, NULL); if (is_prime) { *pprime = i; return 0; } } return ERROR_INT("prime not found!", __func__, 1); } /*! * \brief lept_isPrime() * * \param[in] n 64-bit unsigned * \param[out] pis_prime 1 if prime, 0 otherwise * \param[out] pfactor [optional] smallest divisor, or 0 on error * or if prime * \return 0 if OK, 1 on error */ l_ok lept_isPrime(l_uint64 n, l_int32 *pis_prime, l_uint32 *pfactor) { l_uint32 div; l_uint64 limit, ratio; if (pis_prime) *pis_prime = 0; if (pfactor) *pfactor = 0; if (!pis_prime) return ERROR_INT("&is_prime not defined", __func__, 1); if (n <= 0) return ERROR_INT("n must be > 0", __func__, 1); if (n % 2 == 0) { if (pfactor) *pfactor = 2; return 0; } limit = (l_uint64)sqrt((l_float64)n); for (div = 3; div < limit; div += 2) { ratio = n / div; if (ratio * div == n) { if (pfactor) *pfactor = div; return 0; } } *pis_prime = 1; return 0; } /*---------------------------------------------------------------------* * Gray code conversion * *---------------------------------------------------------------------*/ /*! * \brief convertIntToGrayCode() * * \param[in] val integer value * \return corresponding gray code value * *
 * Notes:
 *      (1) Gray code values corresponding to integers differ by
 *          only one bit transition between successive integers.
 * 
*/ l_uint32 convertIntToGrayCode(l_uint32 val) { return (val >> 1) ^ val; } /*! * \brief convertGrayCodeToInt() * * \param[in] val gray code value * \return corresponding integer value */ l_uint32 convertGrayCodeToInt(l_uint32 val) { l_uint32 shift; for (shift = 1; shift < 32; shift <<= 1) val ^= val >> shift; return val; } /*---------------------------------------------------------------------* * Leptonica version number * *---------------------------------------------------------------------*/ /*! * \brief getLeptonicaVersion() * * Return: string of version number (e.g., 'leptonica-1.74.2') * * Notes: * (1) The caller has responsibility to free the memory. */ char * getLeptonicaVersion(void) { size_t bufsize = 100; char *version = (char *)LEPT_CALLOC(bufsize, sizeof(char)); #ifdef _MSC_VER #ifdef _USRDLL char dllStr[] = "DLL"; #else char dllStr[] = "LIB"; #endif #ifdef _DEBUG char debugStr[] = "Debug"; #else char debugStr[] = "Release"; #endif #ifdef _M_IX86 char bitStr[] = " x86"; #elif _M_X64 char bitStr[] = " x64"; #else char bitStr[] = ""; #endif snprintf(version, bufsize, "leptonica-%d.%d.%d (%s, %s) [MSC v.%d %s %s%s]", LIBLEPT_MAJOR_VERSION, LIBLEPT_MINOR_VERSION, LIBLEPT_PATCH_VERSION, __DATE__, __TIME__, _MSC_VER, dllStr, debugStr, bitStr); #else snprintf(version, bufsize, "leptonica-%d.%d.%d", LIBLEPT_MAJOR_VERSION, LIBLEPT_MINOR_VERSION, LIBLEPT_PATCH_VERSION); #endif /* _MSC_VER */ return version; } /*---------------------------------------------------------------------* * Timing procs * *---------------------------------------------------------------------*/ #if !defined(_WIN32) && !defined(__Fuchsia__) #include #include static struct rusage rusage_before; static struct rusage rusage_after; /*! * \brief startTimer(), stopTimer() * * Notes: * (1) These measure the cpu time elapsed between the two calls: * startTimer(); * .... * lept_stderr( "Elapsed time = %7.3f sec\n", stopTimer()); */ void startTimer(void) { getrusage(RUSAGE_SELF, &rusage_before); } l_float32 stopTimer(void) { l_int32 tsec, tusec; getrusage(RUSAGE_SELF, &rusage_after); tsec = rusage_after.ru_utime.tv_sec - rusage_before.ru_utime.tv_sec; tusec = rusage_after.ru_utime.tv_usec - rusage_before.ru_utime.tv_usec; return (tsec + ((l_float32)tusec) / 1000000.0); } /*! * \brief startTimerNested(), stopTimerNested() * * Example of usage: * * L_TIMER t1 = startTimerNested(); * .... * L_TIMER t2 = startTimerNested(); * .... * lept_stderr( "Elapsed time 2 = %7.3f sec\n", stopTimerNested(t2)); * .... * lept_stderr( "Elapsed time 1 = %7.3f sec\n", stopTimerNested(t1)); */ L_TIMER startTimerNested(void) { struct rusage *rusage_start; rusage_start = (struct rusage *)LEPT_CALLOC(1, sizeof(struct rusage)); getrusage(RUSAGE_SELF, rusage_start); return rusage_start; } l_float32 stopTimerNested(L_TIMER rusage_start) { l_int32 tsec, tusec; struct rusage rusage_stop; getrusage(RUSAGE_SELF, &rusage_stop); tsec = rusage_stop.ru_utime.tv_sec - ((struct rusage *)rusage_start)->ru_utime.tv_sec; tusec = rusage_stop.ru_utime.tv_usec - ((struct rusage *)rusage_start)->ru_utime.tv_usec; LEPT_FREE(rusage_start); return (tsec + ((l_float32)tusec) / 1000000.0); } /*! * \brief l_getCurrentTime() * * \param[out] sec [optional] in seconds since birth of Unix * \param[out] usec [optional] in microseconds since birth of Unix * \return void */ void l_getCurrentTime(l_int32 *sec, l_int32 *usec) { struct timeval tv; gettimeofday(&tv, NULL); if (sec) *sec = (l_int32)tv.tv_sec; if (usec) *usec = (l_int32)tv.tv_usec; } #elif defined(__Fuchsia__) /* resource.h not implemented on Fuchsia. */ /* Timer functions are used for testing and debugging, and * are stubbed out. If they are needed in the future, they * can be implemented in Fuchsia using the zircon syscall * zx_object_get_info() in ZX_INFOR_THREAD_STATS mode. */ void startTimer(void) { } l_float32 stopTimer(void) { return 0.0; } L_TIMER startTimerNested(void) { return NULL; } l_float32 stopTimerNested(L_TIMER rusage_start) { return 0.0; } void l_getCurrentTime(l_int32 *sec, l_int32 *usec) { } #else /* _WIN32 : resource.h not implemented under Windows */ /* Note: if division by 10^7 seems strange, the time is expressed * as the number of 100-nanosecond intervals that have elapsed * since 12:00 A.M. January 1, 1601. */ static ULARGE_INTEGER utime_before; static ULARGE_INTEGER utime_after; void startTimer(void) { HANDLE this_process; FILETIME start, stop, kernel, user; this_process = GetCurrentProcess(); GetProcessTimes(this_process, &start, &stop, &kernel, &user); utime_before.LowPart = user.dwLowDateTime; utime_before.HighPart = user.dwHighDateTime; } l_float32 stopTimer(void) { HANDLE this_process; FILETIME start, stop, kernel, user; ULONGLONG hnsec; /* in units of hecto-nanosecond (100 ns) intervals */ this_process = GetCurrentProcess(); GetProcessTimes(this_process, &start, &stop, &kernel, &user); utime_after.LowPart = user.dwLowDateTime; utime_after.HighPart = user.dwHighDateTime; hnsec = utime_after.QuadPart - utime_before.QuadPart; return (l_float32)(signed)hnsec / 10000000.0f; } L_TIMER startTimerNested(void) { HANDLE this_process; FILETIME start, stop, kernel, user; ULARGE_INTEGER *utime_start; this_process = GetCurrentProcess(); GetProcessTimes (this_process, &start, &stop, &kernel, &user); utime_start = (ULARGE_INTEGER *)LEPT_CALLOC(1, sizeof(ULARGE_INTEGER)); utime_start->LowPart = user.dwLowDateTime; utime_start->HighPart = user.dwHighDateTime; return utime_start; } l_float32 stopTimerNested(L_TIMER utime_start) { HANDLE this_process; FILETIME start, stop, kernel, user; ULARGE_INTEGER utime_stop; ULONGLONG hnsec; /* in units of 100 ns intervals */ this_process = GetCurrentProcess (); GetProcessTimes (this_process, &start, &stop, &kernel, &user); utime_stop.LowPart = user.dwLowDateTime; utime_stop.HighPart = user.dwHighDateTime; hnsec = utime_stop.QuadPart - ((ULARGE_INTEGER *)utime_start)->QuadPart; LEPT_FREE(utime_start); return (l_float32)(signed)hnsec / 10000000.0f; } void l_getCurrentTime(l_int32 *sec, l_int32 *usec) { ULARGE_INTEGER utime, birthunix; FILETIME systemtime; LONGLONG birthunixhnsec = 116444736000000000; /*in units of 100 ns */ LONGLONG usecs; GetSystemTimeAsFileTime(&systemtime); utime.LowPart = systemtime.dwLowDateTime; utime.HighPart = systemtime.dwHighDateTime; birthunix.LowPart = (DWORD) birthunixhnsec; birthunix.HighPart = birthunixhnsec >> 32; usecs = (LONGLONG) ((utime.QuadPart - birthunix.QuadPart) / 10); if (sec) *sec = (l_int32) (usecs / 1000000); if (usec) *usec = (l_int32) (usecs % 1000000); } #endif /*! * \brief startWallTimer() * * \return walltimer-ptr * *
 * Notes:
 *      (1) These measure the wall clock time  elapsed between the two calls:
 *            L_WALLTIMER *timer = startWallTimer();
 *            ....
 *            lept_stderr( "Elapsed time = %f sec\n", stopWallTimer(&timer);
 *      (2) Note that the timer object is destroyed by stopWallTimer().
 * 
*/ L_WALLTIMER * startWallTimer(void) { L_WALLTIMER *timer; timer = (L_WALLTIMER *)LEPT_CALLOC(1, sizeof(L_WALLTIMER)); l_getCurrentTime(&timer->start_sec, &timer->start_usec); return timer; } /*! * \brief stopWallTimer() * * \param[in,out] ptimer walltimer pointer * \return time wall time elapsed in seconds */ l_float32 stopWallTimer(L_WALLTIMER **ptimer) { l_int32 tsec, tusec; L_WALLTIMER *timer; if (!ptimer) return (l_float32)ERROR_FLOAT("&timer not defined", __func__, 0.0); timer = *ptimer; if (!timer) return (l_float32)ERROR_FLOAT("timer not defined", __func__, 0.0); l_getCurrentTime(&timer->stop_sec, &timer->stop_usec); tsec = timer->stop_sec - timer->start_sec; tusec = timer->stop_usec - timer->start_usec; LEPT_FREE(timer); *ptimer = NULL; return (tsec + ((l_float32)tusec) / 1000000.0f); } /*! * \brief l_getFormattedDate() * * \return formatted date string, or NULL on error * *
 * Notes:
 *      (1) This is used in pdf, in the form specified in section 3.8.2 of
 *          http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf
 *      (2) Contributed by Dave Bryan.  Works on all platforms.
 * 
*/ char * l_getFormattedDate(void) { char buf[128] = "", sep = 'Z'; l_int32 gmt_offset, relh, relm; time_t ut, lt; struct tm Tm; struct tm *tptr = &Tm; ut = time(NULL); /* This generates a second "time_t" value by calling "gmtime" to fill in a "tm" structure expressed as UTC and then calling "mktime", which expects a "tm" structure expressed as the local time. The result is a value that is offset from the value returned by the "time" function by the local UTC offset. "tm_isdst" is set to -1 to tell "mktime" to determine for itself whether DST is in effect. This is necessary because "gmtime" always sets "tm_isdst" to 0, which would tell "mktime" to presume that DST is not in effect. */ #ifdef _WIN32 #ifdef _MSC_VER gmtime_s(tptr, &ut); #else /* mingw */ tptr = gmtime(&ut); #endif #else gmtime_r(&ut, tptr); #endif tptr->tm_isdst = -1; lt = mktime(tptr); /* Calls "difftime" to obtain the resulting difference in seconds, * because "time_t" is an opaque type, per the C standard. */ gmt_offset = (l_int32) difftime(ut, lt); if (gmt_offset > 0) sep = '+'; else if (gmt_offset < 0) sep = '-'; relh = L_ABS(gmt_offset) / 3600; relm = (L_ABS(gmt_offset) % 3600) / 60; #ifdef _WIN32 #ifdef _MSC_VER localtime_s(tptr, &ut); #else /* mingw */ tptr = localtime(&ut); #endif #else localtime_r(&ut, tptr); #endif strftime(buf, sizeof(buf), "%Y%m%d%H%M%S", tptr); sprintf(buf + 14, "%c%02d'%02d'", sep, relh, relm); return stringNew(buf); } leptonica-1.86.0/src/utils2.c000066400000000000000000003206101506303110300157330ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file utils2.c *
 *
 *      ------------------------------------------
 *      This file has these utilities:
 *         - safe string operations
 *         - find/replace operations on strings
 *         - read/write between file and memory
 *         - multi-platform file and directory operations
 *         - file name operations
 *      ------------------------------------------
 *
 *       Safe string procs
 *           char      *stringNew()
 *           l_int32    stringCopy()
 *           l_int32    stringCopySegment()
 *           l_int32    stringReplace()
 *           l_int32    stringLength()
 *           l_int32    stringCat()
 *           char      *stringConcatNew()
 *           char      *stringJoin()
 *           l_int32    stringJoinIP()
 *           char      *stringReverse()
 *           char      *strtokSafe()
 *           l_int32    stringSplitOnToken()
 *
 *       Find and replace string and array procs
 *           l_int32    stringCheckForChars()
 *           char      *stringRemoveChars()
 *           char      *stringReplaceEachSubstr()
 *           char      *stringReplaceSubstr()
 *           L_DNA     *stringFindEachSubstr()
 *           l_int32    stringFindSubstr()
 *           l_uint8   *arrayReplaceEachSequence()
 *           L_DNA     *arrayFindEachSequence()
 *           l_int32    arrayFindSequence()
 *
 *       Safe realloc
 *           void      *reallocNew()
 *
 *       Read and write between file and memory
 *           l_uint8   *l_binaryRead()
 *           l_uint8   *l_binaryReadStream()
 *           l_uint8   *l_binaryReadSelect()
 *           l_uint8   *l_binaryReadSelectStream()
 *           l_int32    l_binaryWrite()
 *           l_int32    nbytesInFile()
 *           l_int32    fnbytesInFile()
 *
 *       Copy and compare in memory
 *           l_uint8   *l_binaryCopy()
 *           l_uint8   *l_binaryCompare()
 *
 *       File copy operations
 *           l_int32    fileCopy()
 *           l_int32    fileConcatenate()
 *           l_int32    fileAppendString()
 *
 *       File split operations
 *           l_int32    fileSplitLinesUniform()
 *
 *       Multi-platform functions for opening file streams
 *           FILE      *fopenReadStream()
 *           FILE      *fopenWriteStream()
 *           FILE      *fopenReadFromMemory()
 *
 *       Opening a Windows tmpfile for writing
 *           FILE      *fopenWriteWinTempfile()
 *
 *       Multi-platform functions that avoid C-runtime boundary crossing
 *       with Windows DLLs  (use in programs only)
 *           FILE      *lept_fopen()
 *           l_int32    lept_fclose()
 *           void      *lept_calloc()
 *           void       lept_free()
 *
 *       Multi-platform file system operations in temp directories
 *           l_int32    lept_mkdir()
 *           l_int32    lept_rmdir()
 *           l_int32    lept_direxists()
 *           l_int32    lept_mv()
 *           l_int32    lept_rm_match()
 *           l_int32    lept_rm()
 *           l_int32    lept_rmfile()
 *           l_int32    lept_cp()
 *
 *       Special debug/test function for calling 'system'
 *           l_int32    callSystemDebug()
 *
 *       General file name operations
 *           l_int32    splitPathAtDirectory()
 *           l_int32    splitPathAtExtension()
 *           char      *pathJoin()
 *           char      *appendSubdirs()
 *
 *       Special file name operations
 *           l_int32    convertSepCharsInPath()
 *           char      *genPathname()
 *           l_int32    makeTempDirname()
 *           l_int32    modifyTrailingSlash()
 *           char      *l_makeTempFilename()
 *           l_int32    extractNumberFromFilename()
 *
 *
 *  Notes on multi-platform development
 *  -----------------------------------
 *  This is important:
 *  (1) With the exception of splitPathAtDirectory(), splitPathAtExtension()
  *     and genPathname(), all input pathnames must have unix separators.
 *  (2) On macOS, iOS and Windows, for read or write to "/tmp/..."
 *      the filename is rewritten to use the OS specific temp directory:
 *         /tmp  ==>   [Temp]/...
 *  (3) This filename rewrite, along with the conversion from unix
 *      to OS specific pathnames, happens in genPathname().
 *  (4) Use fopenReadStream() and fopenWriteStream() to open files,
 *      because these use genPathname() to find the platform-dependent
 *      filenames.  Likewise for l_binaryRead() and l_binaryWrite().
 *  (5) For moving, copying and removing files and directories that are in
 *      subdirectories of /tmp, use the lept_*() file system shell wrappers:
 *         lept_mkdir(), lept_rmdir(), lept_mv(), lept_rm() and lept_cp().
 *  (6) For programs use the lept_fopen(), lept_fclose(), lept_calloc()
 *      and lept_free() C library wrappers.  These work properly on Windows,
 *      where the same DLL must perform complementary operations on
 *      file streams (open/close) and heap memory (malloc/free).
 *  (7) Why read and write files to temp directories?
 *      The library needs the ability to read and write ephemeral
 *      files to default places, both for generating debugging output
 *      and for supporting regression tests.  Applications also need
 *      this ability for debugging.
 *  (8) Why do the pathname rewrite on macOS, iOS and Windows?
 *      The goal is to have the library, and programs using the library,
 *      run on multiple platforms without changes.  The location of
 *      temporary files depends on the platform as well as the user's
 *      configuration.  Temp files on some operating systems are in some
 *      directory not known a priori.  To make everything work seamlessly on
 *      any OS, every time you open a file for reading or writing,
 *      use a special function such as fopenReadStream() or
 *      fopenWriteStream(); these call genPathname() to ensure that
 *      if it is a temp file, the correct path is used.  To indicate
 *      that this is a temp file, the application is written with the
 *      root directory of the path in a canonical form: "/tmp".
 *  (9) Why is it that multi-platform directory functions like lept_mkdir()
 *      and lept_rmdir(), as well as associated file functions like
 *      lept_rm(), lept_mv() and lept_cp(), only work in the temp dir?
 *      These functions were designed to provide easy manipulation of
 *      temp files.  The restriction to temp files is for safety -- to
 *      prevent an accidental deletion of important files.  For example,
 *      lept_rmdir() first deletes all files in a specified subdirectory
 *      of temp, and then removes the directory.
 *
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #ifdef _MSC_VER #include #include #define getcwd _getcwd /* fix MSVC warning */ #else #include #endif /* _MSC_VER */ #ifdef _WIN32 #include #include /* _O_CREAT, ... */ #include /* _open */ #include /* _S_IREAD, _S_IWRITE */ #else #include /* for stat, mkdir(2) */ #include #endif #ifdef __APPLE__ #include #include #endif #include #include #include "allheaders.h" #if defined(__APPLE__) || defined(_WIN32) /* Rewrite paths starting with /tmp for macOS, iOS and Windows. */ #define REWRITE_TMP #endif /*--------------------------------------------------------------------* * Safe string operations * *--------------------------------------------------------------------*/ /*! * \brief stringNew() * * \param[in] src * \return dest copy of %src string, or NULL on error */ char * stringNew(const char *src) { l_int32 len; char *dest; if (!src) { L_WARNING("src not defined\n", __func__); return NULL; } len = strlen(src); if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", __func__, NULL); stringCopy(dest, src, len); return dest; } /*! * \brief stringCopy() * * \param[in] dest existing byte buffer * \param[in] src string [optional] can be null * \param[in] n max number of characters to copy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Relatively safe wrapper for strncpy, that checks the input,
 *          and does not complain if %src is null or %n < 1.
 *          If %n < 1, this is a no-op.
 *      (2) %dest needs to be at least %n bytes in size.
 *      (3) We don't call strncpy() because valgrind complains about
 *          use of uninitialized values.
 * 
*/ l_ok stringCopy(char *dest, const char *src, l_int32 n) { l_int32 i; if (!dest) return ERROR_INT("dest not defined", __func__, 1); if (!src || n < 1) return 0; /* Implementation of strncpy that valgrind doesn't complain about */ for (i = 0; i < n && src[i] != '\0'; i++) dest[i] = src[i]; for (; i < n; i++) dest[i] = '\0'; return 0; } /*! * \brief stringCopySegment() * * * \param[in] src string * \param[in] start byte position at start of segment * \param[in] nbytes number of bytes in the segment; use 0 to go to end * \return copy of segment, or NULL on error * *
 * Notes:
 *      (1) This is a variant of stringNew() that makes a new string
 *          from a segment of the input string.  The segment is specified
 *          by the starting position and the number of bytes.
 *      (2) The start location %start must be within the string %src.
 *      (3) The copy is truncated to the end of the source string.
 *          Use %nbytes = 0 to copy to the end of %src.
 * 
*/ char * stringCopySegment(const char *src, l_int32 start, l_int32 nbytes) { char *dest; l_int32 len; if (!src) return (char *)ERROR_PTR("src not defined", __func__, NULL); len = strlen(src); if (start < 0 || start > len - 1) return (char *)ERROR_PTR("invalid start", __func__, NULL); if (nbytes <= 0) /* copy to the end */ nbytes = len - start; if (start + nbytes > len) /* truncate to the end */ nbytes = len - start; if ((dest = (char *)LEPT_CALLOC(nbytes + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", __func__, NULL); stringCopy(dest, src + start, nbytes); return dest; } /*! * \brief stringReplace() * * \param[out] pdest string copy * \param[in] src [optional] string; can be null * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Frees any existing dest string
 *      (2) Puts a copy of src string in the dest
 *      (3) If either or both strings are null, does something reasonable.
 * 
*/ l_ok stringReplace(char **pdest, const char *src) { if (!pdest) return ERROR_INT("pdest not defined", __func__, 1); if (*pdest) LEPT_FREE(*pdest); if (src) *pdest = stringNew(src); else *pdest = NULL; return 0; } /*! * \brief stringLength() * * \param[in] src string can be null or NULL-terminated string * \param[in] size number of bytes to check; e.g., size of src buffer * \return length of src in bytes; 0 if no bytes are found; * %size on error when NUL byte is not found. * *
 * Notes:
 *      (1) Safe implementation of strlen that only checks %size bytes
 *          for trailing NUL.
 *      (2) Valid returned string lengths are between 0 and size - 1.
 *          If %size bytes are checked without finding a NUL byte, then
 *          an error is indicated by returning %size.
 * 
*/ l_int32 stringLength(const char *src, size_t size) { l_int32 i; if (!src) return 0; if (size < 1) return ERROR_INT("size < 1; too small", __func__, 0); for (i = 0; i < size; i++) { if (src[i] == '\0') return i; } /* Didn't find a NUL byte */ L_ERROR("NUL byte not found in %zu bytes\n", __func__, size); return size; } /*! * \brief stringCat() * * \param[in] dest null-terminated byte buffer * \param[in] size size of dest buffer * \param[in] src string can be null or NULL-terminated string * \return number of bytes added to dest; -1 on error * *
 * Notes:
 *      (1) Alternative implementation of strncat, that checks the input,
 *          is easier to use (since the size of the dest buffer is specified
 *          rather than the number of bytes to copy), and does not complain
 *          if %src is null.
 *      (2) Never writes past end of dest.
 *      (3) If there is not enough room to append the src, which is an error,
 *          it does nothing.
 *      (4) N.B. The order of 2nd and 3rd args is reversed from that in
 *          strncat, as in the Windows function strcat_s().
 * 
*/ l_int32 stringCat(char *dest, size_t size, const char *src) { l_int32 i, n; l_int32 lendest, lensrc; if (!dest) return ERROR_INT("dest not defined", __func__, -1); if (size < 1) return ERROR_INT("size < 1; too small", __func__, -1); if (!src) return 0; lendest = stringLength(dest, size); if (lendest == size) return ERROR_INT("no terminating nul byte", __func__, -1); lensrc = stringLength(src, size); if (lensrc == 0) return 0; /* nothing added to dest */ n = (lendest + lensrc > size - 1) ? 0 : lensrc; if (n == 0) return ERROR_INT("dest too small for append", __func__, -1); for (i = 0; i < n; i++) dest[lendest + i] = src[i]; dest[lendest + n] = '\0'; return n; } /*! * \brief stringConcatNew() * * \param[in] first first string in list * \param[in] ... NULL-terminated list of strings * \return result new string concatenating the input strings, or * NULL if first == NULL * *
 * Notes:
 *      (1) The last arg in the list of strings must be NULL.
 *      (2) Caller must free the returned string.
 * 
*/ char * stringConcatNew(const char *first, ...) { size_t len; char *result, *ptr; const char *arg; va_list args; if (!first) return NULL; /* Find the length of the output string */ va_start(args, first); len = strlen(first); while ((arg = va_arg(args, const char *)) != NULL) len += strlen(arg); va_end(args); result = (char *)LEPT_CALLOC(len + 1, sizeof(char)); /* Concatenate the args */ va_start(args, first); ptr = result; arg = first; while (*arg) *ptr++ = *arg++; while ((arg = va_arg(args, const char *)) != NULL) { while (*arg) *ptr++ = *arg++; } va_end(args); return result; } /*! * \brief stringJoin() * * \param[in] src1 [optional] string; can be null * \param[in] src2 [optional] string; can be null * \return concatenated string, or NULL on error * *
 * Notes:
 *      (1) This is a safe version of strcat; it makes a new string.
 *      (2) It is not an error if either or both of the strings
 *          are empty, or if either or both of the pointers are null.
 * 
*/ char * stringJoin(const char *src1, const char *src2) { char *dest; l_int32 srclen1, srclen2, destlen; srclen1 = (src1) ? strlen(src1) : 0; srclen2 = (src2) ? strlen(src2) : 0; destlen = srclen1 + srclen2 + 3; if ((dest = (char *)LEPT_CALLOC(destlen, sizeof(char))) == NULL) return (char *)ERROR_PTR("calloc fail for dest", __func__, NULL); if (src1) stringCat(dest, destlen, src1); if (src2) stringCat(dest, destlen, src2); return dest; } /*! * \brief stringJoinIP() * * \param[in,out] psrc1 address of string src1; cannot be on the stack * \param[in] src2 [optional] string; can be null * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a safe in-place version of strcat.  The contents of
 *          src1 is replaced by the concatenation of src1 and src2.
 *      (2) It is not an error if either or both of the strings
 *          are empty (""), or if the pointers to the strings (*psrc1, src2)
 *          are null.
 *      (3) src1 should be initialized to null or an empty string
 *          before the first call.  Use one of these:
 *              char *src1 = NULL;
 *              char *src1 = stringNew("");
 *          Then call with:
 *              stringJoinIP(&src1, src2);
 *      (4) This can also be implemented as a macro:
 * \code
 *              #define stringJoinIP(src1, src2) \
 *                  {tmpstr = stringJoin((src1),(src2)); \
 *                  LEPT_FREE(src1); \
 *                  (src1) = tmpstr;}
 * \endcode
 *      (5) Another function to consider for joining many strings is
 *          stringConcatNew().
 * 
*/ l_ok stringJoinIP(char **psrc1, const char *src2) { char *tmpstr; if (!psrc1) return ERROR_INT("&src1 not defined", __func__, 1); tmpstr = stringJoin(*psrc1, src2); LEPT_FREE(*psrc1); *psrc1 = tmpstr; return 0; } /*! * \brief stringReverse() * * \param[in] src string * \return dest newly-allocated reversed string */ char * stringReverse(const char *src) { char *dest; l_int32 i, len; if (!src) return (char *)ERROR_PTR("src not defined", __func__, NULL); len = strlen(src); if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("calloc fail for dest", __func__, NULL); for (i = 0; i < len; i++) dest[i] = src[len - 1 - i]; return dest; } /*! * \brief strtokSafe() * * \param[in] cstr input string to be sequentially parsed; * use NULL after the first call * \param[in] seps a string of character separators * \param[out] psaveptr ptr to the next char after * the last encountered separator * \return substr a new string that is copied from the previous * saveptr up to but not including the next * separator character, or NULL if end of cstr. * *
 * Notes:
 *      (1) This is a thread-safe implementation of strtok.
 *      (2) It has the same interface as strtok_r.
 *      (3) It differs from strtok_r in usage in two respects:
 *          (a) the input string is not altered
 *          (b) each returned substring is newly allocated and must
 *              be freed after use.
 *      (4) Let me repeat that.  This is "safe" because the input
 *          string is not altered and because each returned string
 *          is newly allocated on the heap.
 *      (5) It is here because, surprisingly, some C libraries don't
 *          include strtok_r.
 *      (6) Important usage points:
 *          ~ Input the string to be parsed on the first invocation.
 *          ~ Then input NULL after that; the value returned in saveptr
 *            is used in all subsequent calls.
 *      (7) This is only slightly slower than strtok_r.
 * 
*/ char * strtokSafe(char *cstr, const char *seps, char **psaveptr) { char nextc; char *start, *substr; l_int32 istart, i, j, nchars; if (!seps) return (char *)ERROR_PTR("seps not defined", __func__, NULL); if (!psaveptr) return (char *)ERROR_PTR("&saveptr not defined", __func__, NULL); if (!cstr) { start = *psaveptr; } else { start = cstr; *psaveptr = NULL; } if (!start) /* nothing to do */ return NULL; /* First time, scan for the first non-sep character */ istart = 0; if (cstr) { for (istart = 0;; istart++) { if ((nextc = start[istart]) == '\0') { *psaveptr = NULL; /* in case caller doesn't check ret value */ return NULL; } if (!strchr(seps, nextc)) break; } } /* Scan through, looking for a sep character; if none is * found, 'i' will be at the end of the string. */ for (i = istart;; i++) { if ((nextc = start[i]) == '\0') break; if (strchr(seps, nextc)) break; } /* Save the substring */ nchars = i - istart; substr = (char *)LEPT_CALLOC(nchars + 1, sizeof(char)); stringCopy(substr, start + istart, nchars); /* Look for the next non-sep character. * If this is the last substring, return a null saveptr. */ for (j = i;; j++) { if ((nextc = start[j]) == '\0') { *psaveptr = NULL; /* no more non-sep characters */ break; } if (!strchr(seps, nextc)) { *psaveptr = start + j; /* start here on next call */ break; } } return substr; } /*! * \brief stringSplitOnToken() * * \param[in] cstr input string to be split; not altered * \param[in] seps a string of character separators * \param[out] phead ptr to copy of the input string, up to * the first separator token encountered * \param[out] ptail ptr to copy of the part of the input string * starting with the first non-separator character * that occurs after the first separator is found * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The input string is not altered; all split parts are new strings.
 *      (2) The split occurs around the first consecutive sequence of
 *          tokens encountered.
 *      (3) The head goes from the beginning of the string up to
 *          but not including the first token found.
 *      (4) The tail contains the second part of the string, starting
 *          with the first char in that part that is NOT a token.
 *      (5) If no separator token is found, 'head' contains a copy
 *          of the input string and 'tail' is null.
 * 
*/ l_ok stringSplitOnToken(char *cstr, const char *seps, char **phead, char **ptail) { char *saveptr; if (!phead) return ERROR_INT("&head not defined", __func__, 1); if (!ptail) return ERROR_INT("&tail not defined", __func__, 1); *phead = *ptail = NULL; if (!cstr) return ERROR_INT("cstr not defined", __func__, 1); if (!seps) return ERROR_INT("seps not defined", __func__, 1); *phead = strtokSafe(cstr, seps, &saveptr); if (saveptr) *ptail = stringNew(saveptr); return 0; } /*--------------------------------------------------------------------* * Find and replace procs * *--------------------------------------------------------------------*/ /*! * \brief stringCheckForChars() * * \param[in] src input string; can be of zero length * \param[in] chars string of chars to be searched for in %src * \param[out] pfound 1 if any characters are found; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can be used to sanitize an operation by checking for
 *          special characters that don't belong in a string.
 * 
*/ l_ok stringCheckForChars(const char *src, const char *chars, l_int32 *pfound) { char ch; l_int32 i, n; if (!pfound) return ERROR_INT("&found not defined", __func__, 1); *pfound = FALSE; if (!src || !chars) return ERROR_INT("src and chars not both defined", __func__, 1); n = strlen(src); for (i = 0; i < n; i++) { ch = src[i]; if (strchr(chars, ch)) { *pfound = TRUE; break; } } return 0; } /*! * \brief stringRemoveChars() * * \param[in] src input string; can be of zero length * \param[in] remchars string of chars to be removed from src * \return dest string with specified chars removed, or NULL on error */ char * stringRemoveChars(const char *src, const char *remchars) { char ch; char *dest; l_int32 nsrc, i, k; if (!src) return (char *)ERROR_PTR("src not defined", __func__, NULL); if (!remchars) return stringNew(src); if ((dest = (char *)LEPT_CALLOC(strlen(src) + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", __func__, NULL); nsrc = strlen(src); for (i = 0, k = 0; i < nsrc; i++) { ch = src[i]; if (!strchr(remchars, ch)) dest[k++] = ch; } return dest; } /*! * \brief stringReplaceEachSubstr() * * \param[in] src input string; can be of zero length * \param[in] sub1 substring to be replaced * \param[in] sub2 substring to put in; can be "" * \param[out] pcount [optional] the number of times that sub1 * is found in src; 0 if not found * \return dest string with substring replaced, or NULL if the * substring not found or on error. * *
 * Notes:
 *      (1) This is a wrapper for simple string substitution that uses
 *          the more general function arrayReplaceEachSequence().
 *      (2) This finds every non-overlapping occurrence of %sub1 in
 *          %src, and replaces it with %sub2.  By "non-overlapping"
 *          we mean that after it finds each match, it removes the
 *          matching characters, replaces with the substitution string
 *          (if not empty), and continues.  For example, if you replace
 *          'aa' by 'X' in 'baaabbb', you find one match at position 1
 *          and return 'bXabbb'.
 *      (3) To only remove each instance of sub1, use "" for sub2
 *      (4) Returns a copy of %src if sub1 and sub2 are the same.
 *      (5) If the input %src is binary data that can have null characters,
 *          use arrayReplaceEachSequence() directly.
 * 
*/ char * stringReplaceEachSubstr(const char *src, const char *sub1, const char *sub2, l_int32 *pcount) { size_t datalen; if (pcount) *pcount = 0; if (!src || !sub1 || !sub2) return (char *)ERROR_PTR("src, sub1, sub2 not all defined", __func__, NULL); if (strlen(sub2) > 0) { return (char *)arrayReplaceEachSequence( (const l_uint8 *)src, strlen(src), (const l_uint8 *)sub1, strlen(sub1), (const l_uint8 *)sub2, strlen(sub2), &datalen, pcount); } else { /* empty replacement string; removal only */ return (char *)arrayReplaceEachSequence( (const l_uint8 *)src, strlen(src), (const l_uint8 *)sub1, strlen(sub1), NULL, 0, &datalen, pcount); } } /*! * \brief stringReplaceSubstr() * * \param[in] src input string; can be of zero length * \param[in] sub1 substring to be replaced * \param[in] sub2 substring to put in; can be "" * \param[in,out] ploc [optional] input start location for search; * returns the loc after replacement * \param[out] pfound [optional] 1 if sub1 is found; 0 otherwise * \return dest string with substring replaced, or NULL on error. * *
 * Notes:
 *      (1) Replaces the first instance.
 *      (2) To remove sub1 without replacement, use "" for sub2.
 *      (3) Returns a copy of %src if either no instance of %sub1 is found,
 *          or if %sub1 and %sub2 are the same.
 *      (4) If %ploc == NULL, the search will start at the beginning of %src.
 *          If %ploc != NULL, *ploc must be initialized to the byte offset
 *          within %src from which the search starts.  To search the
 *          string from the beginning, set %loc = 0 and input &loc.
 *          After finding %sub1 and replacing it with %sub2, %loc will be
 *          returned as the next position after %sub2 in the output string.
 *      (5) Note that the output string also includes all the characters
 *          from the input string that occur after the single substitution.
 * 
*/ char * stringReplaceSubstr(const char *src, const char *sub1, const char *sub2, l_int32 *ploc, l_int32 *pfound) { const char *ptr; char *dest; l_int32 nsrc, nsub1, nsub2, len, npre, loc; if (pfound) *pfound = 0; if (!src || !sub1 || !sub2) return (char *)ERROR_PTR("src, sub1, sub2 not all defined", __func__, NULL); if (ploc) loc = *ploc; else loc = 0; if (!strcmp(sub1, sub2)) return stringNew(src); if ((ptr = strstr(src + loc, sub1)) == NULL) return stringNew(src); if (pfound) *pfound = 1; nsrc = strlen(src); nsub1 = strlen(sub1); nsub2 = strlen(sub2); len = nsrc + nsub2 - nsub1; if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", __func__, NULL); npre = ptr - src; memcpy(dest, src, npre); strcpy(dest + npre, sub2); strcpy(dest + npre + nsub2, ptr + nsub1); if (ploc) *ploc = npre + nsub2; return dest; } /*! * \brief stringFindEachSubstr() * * \param[in] src input string; can be of zero length * \param[in] sub substring to be searched for * \return dna of offsets where the sequence is found, or NULL if * none are found or on error * *
 * Notes:
 *      (1) This finds every non-overlapping occurrence in %src of %sub.
 *          After it finds each match, it moves forward in %src by the length
 *          of %sub before continuing the search.  So for example,
 *          if you search for the sequence 'aa' in the data 'baaabbb',
 *          you find one match at position 1.

 * 
*/ L_DNA * stringFindEachSubstr(const char *src, const char *sub) { if (!src || !sub) return (L_DNA *)ERROR_PTR("src, sub not both defined", __func__, NULL); return arrayFindEachSequence((const l_uint8 *)src, strlen(src), (const l_uint8 *)sub, strlen(sub)); } /*! * \brief stringFindSubstr() * * \param[in] src input string; can be of zero length * \param[in] sub substring to be searched for; must not be empty * \param[out] ploc [optional] location of substring in src * \return 1 if found; 0 if not found or on error * *
 * Notes:
 *      (1) This is a wrapper around strstr().  It finds the first
 *          instance of %sub in %src.  If the substring is not found
 *          and the location is returned, it has the value -1.
 *      (2) Both %src and %sub must be defined, and %sub must have
 *          length of at least 1.
 * 
*/ l_int32 stringFindSubstr(const char *src, const char *sub, l_int32 *ploc) { const char *ptr; if (ploc) *ploc = -1; if (!src || !sub) return ERROR_INT("src and sub not both defined", __func__, 0); if (strlen(sub) == 0) return ERROR_INT("substring length 0", __func__, 0); if (strlen(src) == 0) return 0; if ((ptr = strstr(src, sub)) == NULL) /* not found */ return 0; if (ploc) *ploc = ptr - src; return 1; } /*! * \brief arrayReplaceEachSequence() * * \param[in] datas source byte array * \param[in] dataslen length of source data, in bytes * \param[in] seq subarray of bytes to find in source data * \param[in] seqlen length of subarray, in bytes * \param[in] newseq replacement subarray; can be null * \param[in] newseqlen length of replacement subarray, in bytes * \param[out] pdatadlen length of dest byte array, in bytes * \param[out] pcount [optional] the number of times that sub1 * is found in src; 0 if not found * \return datad with all all subarrays replaced (or removed) * *
 * Notes:
 *      (1) The byte arrays %datas, %seq and %newseq are not C strings,
 *          because they can contain null bytes.  Therefore, for each
 *          we must give the length of the array.
 *      (2) If %newseq == NULL, this just removes all instances of %seq.
 *          Otherwise, it replaces every non-overlapping occurrence of
 *          %seq in %datas with %newseq. A new array %datad and its
 *          size are returned.  See arrayFindEachSequence() for more
 *          details on finding non-overlapping occurrences.
 *      (3) If no instances of %seq are found, this returns a copy of %datas.
 *      (4) The returned %datad is null terminated.
 *      (5) Can use stringReplaceEachSubstr() if using C strings.
 * 
*/ l_uint8 * arrayReplaceEachSequence(const l_uint8 *datas, size_t dataslen, const l_uint8 *seq, size_t seqlen, const l_uint8 *newseq, size_t newseqlen, size_t *pdatadlen, l_int32 *pcount) { l_uint8 *datad; size_t newsize; l_int32 n, i, j, di, si, index, incr; L_DNA *da; if (pcount) *pcount = 0; if (!datas || !seq) return (l_uint8 *)ERROR_PTR("datas & seq not both defined", __func__, NULL); if (!pdatadlen) return (l_uint8 *)ERROR_PTR("&datadlen not defined", __func__, NULL); *pdatadlen = 0; /* Identify the locations of the sequence. If there are none, * return a copy of %datas. */ if ((da = arrayFindEachSequence(datas, dataslen, seq, seqlen)) == NULL) { *pdatadlen = dataslen; return l_binaryCopy(datas, dataslen); } /* Allocate the output data; insure null termination */ n = l_dnaGetCount(da); if (pcount) *pcount = n; if (!newseq) newseqlen = 0; newsize = dataslen + n * (newseqlen - seqlen) + 4; if ((datad = (l_uint8 *)LEPT_CALLOC(newsize, sizeof(l_uint8))) == NULL) { l_dnaDestroy(&da); return (l_uint8 *)ERROR_PTR("datad not made", __func__, NULL); } /* Replace each sequence instance with a new sequence */ l_dnaGetIValue(da, 0, &si); for (i = 0, di = 0, index = 0; i < dataslen; i++) { if (i == si) { index++; if (index < n) { l_dnaGetIValue(da, index, &si); incr = L_MIN(seqlen, si - i); /* amount to remove from datas */ } else { incr = seqlen; } i += incr - 1; /* jump over the matched sequence in datas */ if (newseq) { /* add new sequence to datad */ for (j = 0; j < newseqlen; j++) datad[di++] = newseq[j]; } } else { datad[di++] = datas[i]; } } *pdatadlen = di; l_dnaDestroy(&da); return datad; } /*! * \brief arrayFindEachSequence() * * \param[in] data byte array * \param[in] datalen length of data, in bytes * \param[in] sequence subarray of bytes to find in data * \param[in] seqlen length of sequence, in bytes * \return dna of offsets where the sequence is found, or NULL if * none are found or on error * *
 * Notes:
 *      (1) The byte arrays %data and %sequence are not C strings,
 *          because they can contain null bytes.  Therefore, for each
 *          we must give the length of the array.
 *      (2) This finds every non-overlapping occurrence in %data of %sequence.
 *          After it finds each match, it moves forward by the length
 *          of the sequence before continuing the search.  So for example,
 *          if you search for the sequence 'aa' in the data 'baaabbb',
 *          you find one match at position 1.
 * 
*/ L_DNA * arrayFindEachSequence(const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen) { l_int32 start, offset, realoffset, found; L_DNA *da; if (!data || !sequence) return (L_DNA *)ERROR_PTR("data & sequence not both defined", __func__, NULL); da = l_dnaCreate(0); start = 0; while (1) { arrayFindSequence(data + start, datalen - start, sequence, seqlen, &offset, &found); if (found == FALSE) break; realoffset = start + offset; l_dnaAddNumber(da, realoffset); start = realoffset + seqlen; if (start >= datalen) break; } if (l_dnaGetCount(da) == 0) l_dnaDestroy(&da); return da; } /*! * \brief arrayFindSequence() * * \param[in] data byte array * \param[in] datalen length of data, in bytes * \param[in] sequence subarray of bytes to find in data * \param[in] seqlen length of sequence, in bytes * \param[out] poffset offset from beginning of * data where the sequence begins * \param[out] pfound 1 if sequence is found; 0 otherwise * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The byte arrays 'data' and 'sequence' are in general not C strings,
 *          because they can contain null bytes.  Therefore, for each
 *          we must give the length of the array.
 *      (2) This searches for the first occurrence in %data of %sequence,
 *          which consists of %seqlen bytes.  The parameter %seqlen
 *          must not exceed the actual length of the %sequence byte array.
 *      (3) If either byte array is a C string, cast the array to
 *          (const l_uint8 *) and use strlen() on the string for its length.
 *      (4) If the sequence is not found, the offset will be 0, so you
 *          must check %found.
 * 
*/ l_ok arrayFindSequence(const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen, l_int32 *poffset, l_int32 *pfound) { l_int32 i, j, found, lastpos; if (poffset) *poffset = 0; if (pfound) *pfound = FALSE; if (!data || !sequence) return ERROR_INT("data & sequence not both defined", __func__, 1); if (!poffset || !pfound) return ERROR_INT("&offset and &found not defined", __func__, 1); lastpos = datalen - seqlen + 1; found = FALSE; for (i = 0; i < lastpos; i++) { for (j = 0; j < seqlen; j++) { if (data[i + j] != sequence[j]) break; if (j == seqlen - 1) found = TRUE; } if (found == TRUE) break; } if (found == TRUE) { *poffset = i; *pfound = TRUE; } return 0; } /*--------------------------------------------------------------------* * Safe realloc * *--------------------------------------------------------------------*/ /*! * \brief reallocNew() * * \param[in,out] pindata nulls indata before reallocing * \param[in] oldsize size of input data to be copied, in bytes * \param[in] newsize size of buffer to be reallocated in bytes * \return ptr to new data, or NULL on error * * Action: !N.B. 3) and (4! * 1 Allocates memory, initialized to 0 * 2 Copies as much of the input data as possible * to the new block, truncating the copy if necessary * 3 Frees the input data * 4 Zeroes the input data ptr * *
 * Notes:
 *      (1) If newsize == 0, frees input data and nulls ptr
 *      (2) If input data is null, only callocs new memory
 *      (3) This differs from realloc in that it always allocates
 *          new memory (if newsize > 0) and initializes it to 0,
 *          it requires the amount of old data to be copied,
 *          and it takes the address of the input ptr and
 *          nulls the handle.
 * 
*/ void * reallocNew(void **pindata, size_t oldsize, size_t newsize) { size_t minsize; void *indata; void *newdata; if (!pindata) return ERROR_PTR("input data not defined", __func__, NULL); indata = *pindata; if (newsize == 0) { /* nonstandard usage */ if (indata) { LEPT_FREE(indata); *pindata = NULL; } return NULL; } if (!indata) { /* nonstandard usage */ if ((newdata = (void *)LEPT_CALLOC(1, newsize)) == NULL) return ERROR_PTR("newdata not made", __func__, NULL); return newdata; } /* Standard usage */ if ((newdata = (void *)LEPT_CALLOC(1, newsize)) == NULL) return ERROR_PTR("newdata not made", __func__, NULL); minsize = L_MIN(oldsize, newsize); memcpy(newdata, indata, minsize); LEPT_FREE(indata); *pindata = NULL; return newdata; } /*--------------------------------------------------------------------* * Read and write between file and memory * *--------------------------------------------------------------------*/ /*! * \brief l_binaryRead() * * \param[in] filename * \param[out] pnbytes number of bytes read * \return data, or NULL on error */ l_uint8 * l_binaryRead(const char *filename, size_t *pnbytes) { l_uint8 *data; FILE *fp; if (!pnbytes) return (l_uint8 *)ERROR_PTR("pnbytes not defined", __func__, NULL); *pnbytes = 0; if (!filename) return (l_uint8 *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (l_uint8 *)ERROR_PTR_1("file stream not opened", filename, __func__, NULL); data = l_binaryReadStream(fp, pnbytes); fclose(fp); return data; } /*! * \brief l_binaryReadStream() * * \param[in] fp file stream opened to read; can be stdin * \param[out] pnbytes number of bytes read * \return null-terminated array, or NULL on error; reading 0 bytes * is not an error * *
 * Notes:
 *      (1) The returned array is terminated with a null byte so that it can
 *          be used to read ascii data from a file into a proper C string.
 *      (2) This can be used to capture data that is piped in via stdin,
 *          because it does not require seeking within the file.
 *      (3) For example, you can read an image from stdin into memory
 *          using shell redirection, with one of these shell commands:
 * \code
 *             cat  | readprog
 *             readprog < 
 * \endcode
 *          where readprog is:
 * \code
 *             l_uint8 *data = l_binaryReadStream(stdin, &nbytes);
 *             Pix *pix = pixReadMem(data, nbytes);
 * \endcode
 * 
*/ l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes) { l_uint8 *data; l_int32 seekable, navail, nadd, nread; L_BBUFFER *bb; if (!pnbytes) return (l_uint8 *)ERROR_PTR("&nbytes not defined", __func__, NULL); *pnbytes = 0; if (!fp) return (l_uint8 *)ERROR_PTR("fp not defined", __func__, NULL); /* Test if the stream is seekable, by attempting to seek to * the start of data. This is a no-op. If it is seekable, use * l_binaryReadSelectStream() to determine the size of the * data to be read in advance. */ seekable = (ftell(fp) == 0) ? 1 : 0; if (seekable) return l_binaryReadSelectStream(fp, 0, 0, pnbytes); /* If it is not seekable, use the bbuffer to realloc memory * as needed during reading. */ bb = bbufferCreate(NULL, 4096); while (1) { navail = bb->nalloc - bb->n; if (navail < 4096) { nadd = L_MAX(bb->nalloc, 4096); bbufferExtendArray(bb, nadd); } nread = fread((void *)(bb->array + bb->n), 1, 4096, fp); bb->n += nread; if (nread != 4096) break; } /* Copy the data to a new array sized for the data, because * the bbuffer array can be nearly twice the size we need. */ if ((data = (l_uint8 *)LEPT_CALLOC(bb->n + 1, sizeof(l_uint8))) != NULL) { memcpy(data, bb->array, bb->n); *pnbytes = bb->n; } else { L_ERROR("calloc fail for data\n", __func__); } bbufferDestroy(&bb); return data; } /*! * \brief l_binaryReadSelect() * * \param[in] filename * \param[in] start first byte to read * \param[in] nbytes number of bytes to read; use 0 to read to end of file * \param[out] pnread number of bytes actually read * \return data, or NULL on error * *
 * Notes:
 *      (1) The returned array is terminated with a null byte so that it can
 *          be used to read ascii data from a file into a proper C string.
 * 
*/ l_uint8 * l_binaryReadSelect(const char *filename, size_t start, size_t nbytes, size_t *pnread) { l_uint8 *data; FILE *fp; if (!pnread) return (l_uint8 *)ERROR_PTR("pnread not defined", __func__, NULL); *pnread = 0; if (!filename) return (l_uint8 *)ERROR_PTR("filename not defined", __func__, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (l_uint8 *)ERROR_PTR_1("file stream not opened", filename, __func__, NULL); data = l_binaryReadSelectStream(fp, start, nbytes, pnread); fclose(fp); return data; } /*! * \brief l_binaryReadSelectStream() * * \param[in] fp file stream * \param[in] start first byte to read * \param[in] nbytes number of bytes to read; use 0 to read to end of file * \param[out] pnread number of bytes actually read * \return null-terminated array, or NULL on error; reading 0 bytes * is not an error * *
 * Notes:
 *      (1) The returned array is terminated with a null byte so that it can
 *          be used to read ascii data from a file into a proper C string.
 *          If the file to be read is empty and %start == 0, an array
 *          with a single null byte is returned.
 *      (2) Side effect: the stream pointer is re-positioned to the
 *          beginning of the file.
 * 
*/ l_uint8 * l_binaryReadSelectStream(FILE *fp, size_t start, size_t nbytes, size_t *pnread) { l_uint8 *data; size_t bytesleft, bytestoread, nread, filebytes; if (!pnread) return (l_uint8 *)ERROR_PTR("&nread not defined", __func__, NULL); *pnread = 0; if (!fp) return (l_uint8 *)ERROR_PTR("stream not defined", __func__, NULL); /* Verify and adjust the parameters if necessary */ fseek(fp, 0, SEEK_END); /* EOF */ filebytes = ftell(fp); fseek(fp, 0, SEEK_SET); if (start > filebytes) { L_ERROR("start = %zu but filebytes = %zu\n", __func__, start, filebytes); return NULL; } if (filebytes == 0) /* start == 0; nothing to read; return null byte */ return (l_uint8 *)LEPT_CALLOC(1, 1); bytesleft = filebytes - start; /* greater than 0 */ if (nbytes == 0) nbytes = bytesleft; bytestoread = (bytesleft >= nbytes) ? nbytes : bytesleft; /* Read the data */ if ((data = (l_uint8 *)LEPT_CALLOC(1, bytestoread + 1)) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for data", __func__, NULL); fseek(fp, start, SEEK_SET); nread = fread(data, 1, bytestoread, fp); if (nbytes != nread) L_INFO("%zu bytes requested; %zu bytes read\n", __func__, nbytes, nread); *pnread = nread; fseek(fp, 0, SEEK_SET); return data; } /*! * \brief l_binaryWrite() * * \param[in] filename output file * \param[in] operation "w" for write; "a" for append * \param[in] data binary data to be written * \param[in] nbytes size of data array * \return 0 if OK; 1 on error */ l_ok l_binaryWrite(const char *filename, const char *operation, const void *data, size_t nbytes) { char actualOperation[20]; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!operation) return ERROR_INT("operation not defined", __func__, 1); if (!data) return ERROR_INT("data not defined", __func__, 1); if (nbytes <= 0) return ERROR_INT("nbytes must be > 0", __func__, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation not one of {'w','a'}", __func__, 1); /* The 'b' flag to fopen() is ignored for all POSIX * conforming systems. However, Windows needs the 'b' flag. */ stringCopy(actualOperation, operation, 2); stringCat(actualOperation, 20, "b"); if ((fp = fopenWriteStream(filename, actualOperation)) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); fwrite(data, 1, nbytes, fp); fclose(fp); return 0; } /*! * \brief nbytesInFile() * * \param[in] filename * \return nbytes in file; 0 on error */ size_t nbytesInFile(const char *filename) { size_t nbytes; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 0); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 0); nbytes = fnbytesInFile(fp); fclose(fp); return nbytes; } /*! * \brief fnbytesInFile() * * \param[in] fp file stream * \return nbytes in file; 0 on error */ size_t fnbytesInFile(FILE *fp) { l_int64 pos, nbytes; if (!fp) return ERROR_INT("stream not open", __func__, 0); pos = ftell(fp); /* initial position */ if (pos < 0) return ERROR_INT("seek position must be > 0", __func__, 0); fseek(fp, 0, SEEK_END); /* EOF */ nbytes = ftell(fp); if (nbytes < 0) return ERROR_INT("nbytes is < 0", __func__, 0); fseek(fp, pos, SEEK_SET); /* back to initial position */ return nbytes; } /*--------------------------------------------------------------------* * Copy and compare in memory * *--------------------------------------------------------------------*/ /*! * \brief l_binaryCopy() * * \param[in] datas * \param[in] size of data array * \return datad on heap, or NULL on error * *
 * Notes:
 *      (1) We add 4 bytes to the zeroed output because in some cases
 *          (e.g., string handling) it is important to have the data
 *          be null terminated.  This guarantees that after the memcpy,
 *          the result is automatically null terminated.
 * 
*/ l_uint8 * l_binaryCopy(const l_uint8 *datas, size_t size) { l_uint8 *datad; if (!datas) return (l_uint8 *)ERROR_PTR("datas not defined", __func__, NULL); if ((datad = (l_uint8 *)LEPT_CALLOC(size + 4, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("datad not made", __func__, NULL); memcpy(datad, datas, size); return datad; } /*! * \brief l_binaryCompare() * * \param[in] data1 * \param[in] size1 of data1 * \param[in] data2 * \param[in] size2 of data1 * \param[out] psame (1 if the same, 0 if different) * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This can also be used to compare C strings str1 and str2.
 *          If the string lengths are not known, use strlen():
 *            l_binaryCompare((l_uint8 *)str1, strlen(str1),
                              (l_uint8 *)str2, strlen(str2));
 * 
*/ l_ok l_binaryCompare(const l_uint8 *data1, size_t size1, const l_uint8 *data2, size_t size2, l_int32 *psame) { l_int32 i; if (!psame) return ERROR_INT("&same not defined", __func__, 1); *psame = FALSE; if (!data1 || !data2) return ERROR_INT("data1 and data2 not both defined", __func__, 1); if (size1 != size2) return 0; for (i = 0; i < size1; i++) { if (data1[i] != data2[i]) return 0; } *psame = TRUE; return 0; } /*--------------------------------------------------------------------* * File copy operations * *--------------------------------------------------------------------*/ /*! * \brief fileCopy() * * \param[in] srcfile copy from this file * \param[in] newfile copy to this file * \return 0 if OK, 1 on error */ l_ok fileCopy(const char *srcfile, const char *newfile) { l_int32 ret; size_t nbytes; l_uint8 *data; if (!srcfile) return ERROR_INT("srcfile not defined", __func__, 1); if (!newfile) return ERROR_INT("newfile not defined", __func__, 1); if ((data = l_binaryRead(srcfile, &nbytes)) == NULL) return ERROR_INT("data not returned", __func__, 1); ret = l_binaryWrite(newfile, "w", data, nbytes); LEPT_FREE(data); return ret; } /*! * \brief fileConcatenate() * * \param[in] srcfile append data from this file * \param[in] destfile add data to this file * \return 0 if OK, 1 on error */ l_ok fileConcatenate(const char *srcfile, const char *destfile) { size_t nbytes; l_uint8 *data; if (!srcfile) return ERROR_INT("srcfile not defined", __func__, 1); if (!destfile) return ERROR_INT("destfile not defined", __func__, 1); data = l_binaryRead(srcfile, &nbytes); l_binaryWrite(destfile, "a", data, nbytes); LEPT_FREE(data); return 0; } /*! * \brief fileAppendString() * * \param[in] filename * \param[in] str string to append to file * \return 0 if OK, 1 on error */ l_ok fileAppendString(const char *filename, const char *str) { FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!str) return ERROR_INT("str not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "a")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); fprintf(fp, "%s", str); fclose(fp); return 0; } /*--------------------------------------------------------------------* * File split operations * *--------------------------------------------------------------------*/ /*! * \brief fileSplitLinesUniform() * * \param[in] filename input file * \param[in] n number of output files (>= 1) * \param[in] save_empty 1 to save empty lines; 0 to remove them * \param[in] rootpath root pathname of output files * \param[in] ext output extension, including the '.'; can be NULL * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This splits an input text file into %n files with roughly
 *          equal numbers of text lines in each file.
 *      (2) if %save_empty == 1, empty lines are included, and concatention
 *          of the text in the split files will be identical to the original.
 *      (3) The output filenames are in the form:
 *               _N., N = 1, ... n
 *      (4) This handles the temp directory pathname conversion where needed:
 *              /tmp  ==>  [OS specific temp directory]
 *      (5) Files can also be sharded into sets of lines by the program 'split':
 *              split -n l/ 
 *          Using 'split', the resulting files have approximately equal
 *          numbers of bytes, rather than equal numbers of lines.
 * 
*/ l_ok fileSplitLinesUniform(const char *filename, l_int32 n, l_int32 save_empty, const char *rootpath, const char *ext) { l_int32 i, totlines, nlines, index; size_t nbytes; l_uint8 *data; char *str; char outname[512]; NUMA *na; SARRAY *sa; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!rootpath) return ERROR_INT("rootpath not defined", __func__, 1); if (n <= 0) return ERROR_INT("n must be > 0", __func__, 1); if (save_empty != 0 && save_empty != 1) return ERROR_INT("save_empty not 0 or 1", __func__, 1); /* Make sarray of lines; the newlines are stripped off */ if ((data = l_binaryRead(filename, &nbytes)) == NULL) return ERROR_INT("data not read", __func__, 1); sa = sarrayCreateLinesFromString((const char *)data, save_empty); LEPT_FREE(data); if (!sa) return ERROR_INT("sa not made", __func__, 1); totlines = sarrayGetCount(sa); if (n > totlines) { sarrayDestroy(&sa); L_ERROR("num files = %d > num lines = %d\n", __func__, n, totlines); return 1; } /* Write n sets of lines to n files, adding the newlines back */ na = numaGetUniformBinSizes(totlines, n); index = 0; for (i = 0; i < n; i++) { if (ext == NULL) snprintf(outname, sizeof(outname), "%s_%d", rootpath, i); else snprintf(outname, sizeof(outname), "%s_%d%s", rootpath, i, ext); numaGetIValue(na, i, &nlines); str = sarrayToStringRange(sa, index, nlines, 1); /* add newlines */ l_binaryWrite(outname, "w", str, strlen(str)); LEPT_FREE(str); index += nlines; } numaDestroy(&na); sarrayDestroy(&sa); return 0; } /*--------------------------------------------------------------------* * Multi-platform functions for opening file streams * *--------------------------------------------------------------------*/ /*! * \brief fopenReadStream() * * \param[in] filename * \return stream, or NULL on error * *
 * Notes:
 *      (1) This should be used whenever you want to run fopen() to
 *          read from a stream.  Never call fopen() directory.
 *      (2) This handles the temp directory pathname conversion where needed:
 *              /tmp  ==>  [OS specific temp directory]
 * 
*/ FILE * fopenReadStream(const char *filename) { char *fname, *tail; FILE *fp; if (!filename) return (FILE *)ERROR_PTR("filename not defined", __func__, NULL); /* Try input filename */ fname = genPathname(filename, NULL); fp = fopen(fname, "rb"); LEPT_FREE(fname); if (fp) return fp; /* Else, strip directory and try locally */ splitPathAtDirectory(filename, NULL, &tail); if (!tail) return (FILE*)ERROR_PTR_1("tail not found", filename, __func__, NULL); fp = fopen(tail, "rb"); if (!fp) L_ERROR("failed to open locally with tail %s for filename %s\n", __func__, tail, filename); LEPT_FREE(tail); return fp; } /*! * \brief fopenWriteStream() * * \param[in] filename * \param[in] modestring * \return stream, or NULL on error * *
 * Notes:
 *      (1) This should be used whenever you want to run fopen() to
 *          write or append to a stream.  Never call fopen() directory.
 *      (2) This handles the temp directory pathname conversion where needed:
 *              /tmp  ==>  [OS specific temp directory]
 * 
*/ FILE * fopenWriteStream(const char *filename, const char *modestring) { char *fname; FILE *fp; if (!filename) return (FILE *)ERROR_PTR("filename not defined", __func__, NULL); fname = genPathname(filename, NULL); fp = fopen(fname, modestring); if (!fp) fp = (FILE *)ERROR_PTR_1("stream not opened", fname, __func__, NULL); LEPT_FREE(fname); return fp; } /*! * \brief fopenReadFromMemory() * * \param[in] data, size * \return file stream, or NULL on error * *
 * Notes:
 *      (1) Work-around if fmemopen() not available.
 *      (2) Windows tmpfile() writes into the root C:\ directory, which
 *          requires admin privileges.  This also works around that.
 * 
*/ FILE * fopenReadFromMemory(const l_uint8 *data, size_t size) { FILE *fp; if (!data) return (FILE *)ERROR_PTR("data not defined", __func__, NULL); #if HAVE_FMEMOPEN if ((fp = fmemopen((void *)data, size, "rb")) == NULL) return (FILE *)ERROR_PTR("stream not opened", __func__, NULL); #else /* write to tmp file */ L_INFO("no fmemopen API --> work-around: write to temp file\n", __func__); #ifdef _WIN32 if ((fp = fopenWriteWinTempfile()) == NULL) return (FILE *)ERROR_PTR("tmpfile stream not opened", __func__, NULL); #else if ((fp = tmpfile()) == NULL) return (FILE *)ERROR_PTR("tmpfile stream not opened", __func__, NULL); #endif /* _WIN32 */ fwrite(data, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ return fp; } /*--------------------------------------------------------------------* * Opening a Windows tmpfile for writing * *--------------------------------------------------------------------*/ /*! * \brief fopenWriteWinTempfile() * * \return file stream, or NULL on error * *
 * Notes:
 *      (1) The Windows version of tmpfile() writes into the root
 *          C:\ directory, which requires admin privileges.  This
 *          function provides an alternative implementation.
 * 
*/ FILE * fopenWriteWinTempfile(void) { #ifdef _WIN32 l_int32 handle; FILE *fp; char *filename; if ((filename = l_makeTempFilename()) == NULL) { L_ERROR("l_makeTempFilename failed, %s\n", __func__, strerror(errno)); return NULL; } handle = _open(filename, _O_CREAT | _O_RDWR | _O_SHORT_LIVED | _O_TEMPORARY | _O_BINARY, _S_IREAD | _S_IWRITE); lept_free(filename); if (handle == -1) { L_ERROR("_open failed, %s\n", __func__, strerror(errno)); return NULL; } if ((fp = _fdopen(handle, "r+b")) == NULL) { L_ERROR("_fdopen failed, %s\n", __func__, strerror(errno)); return NULL; } return fp; #else return NULL; #endif /* _WIN32 */ } /*--------------------------------------------------------------------* * Multi-platform functions that avoid C-runtime boundary * * crossing for applications with Windows DLLs * *--------------------------------------------------------------------*/ /* * Problems arise when pointers to streams and data are passed * between two Windows DLLs that have been generated with different * C runtimes. To avoid this, leptonica provides wrappers for * several C library calls. */ /*! * \brief lept_fopen() * * \param[in] filename * \param[in] mode same as for fopen(); e.g., "rb" * \return stream or NULL on error * *
 * Notes:
 *      (1) This must be used by any application that passes
 *          a file handle to a leptonica Windows DLL.
 * 
*/ FILE * lept_fopen(const char *filename, const char *mode) { if (!filename) return (FILE *)ERROR_PTR("filename not defined", __func__, NULL); if (!mode) return (FILE *)ERROR_PTR("mode not defined", __func__, NULL); if (stringFindSubstr(mode, "r", NULL)) return fopenReadStream(filename); else return fopenWriteStream(filename, mode); } /*! * \brief lept_fclose() * * \param[in] fp file stream * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This should be used by any application that accepts
 *          a file handle generated by a leptonica Windows DLL.
 * 
*/ l_ok lept_fclose(FILE *fp) { if (!fp) return ERROR_INT("stream not defined", __func__, 1); return fclose(fp); } /*! * \brief lept_calloc() * * \param[in] nmemb number of members * \param[in] size of each member * \return void ptr, or NULL on error * *
 * Notes:
 *      (1) For safety with Windows DLLs, this can be used in conjunction
 *          with lept_free() to avoid C-runtime boundary problems.
 *          Just use these two functions throughout your application.
 * 
*/ void * lept_calloc(size_t nmemb, size_t size) { if (nmemb <= 0 || size <= 0) return NULL; return LEPT_CALLOC(nmemb, size); } /*! * \brief lept_free() * * \param[in] ptr * *
 * Notes:
 *      (1) This should be used by any application that accepts
 *          heap data allocated by a leptonica Windows DLL.
 * 
*/ void lept_free(void *ptr) { if (!ptr) return; LEPT_FREE(ptr); } /*--------------------------------------------------------------------* * Multi-platform file system operations * * [ These only write to /tmp or its subdirectories ] * *--------------------------------------------------------------------*/ /*! * \brief lept_mkdir() * * \param[in] subdir of /tmp or its OS specific equivalent * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) %subdir is a partial path that can consist of one or more
 *          directories.
 *      (2) This makes any subdirectories of /tmp that are required.
 *      (3) The root temp directory is:
 *            /tmp    (unix)  [default]
 *            [Temp]  (Windows)
 * 
*/ l_int32 lept_mkdir(const char *subdir) { char *dir, *tmpdir; l_int32 i, n; l_int32 ret = 0; SARRAY *sa; #ifdef _WIN32 l_uint32 attributes; #endif /* _WIN32 */ if (!LeptDebugOK) { L_INFO("making named temp subdirectory %s is disabled\n", __func__, subdir); return 0; } if (!subdir) return ERROR_INT("subdir not defined", __func__, 1); if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) return ERROR_INT("subdir not an actual subdirectory", __func__, 1); sa = sarrayCreate(0); sarraySplitString(sa, subdir, "/"); n = sarrayGetCount(sa); dir = genPathname("/tmp", NULL); ret = 0; /* don't check ret values with unix because if a directory * exists, mkdir() returns -1 */ /* Make sure the tmp directory exists */ #ifndef _WIN32 mkdir(dir, 0777); #else attributes = GetFileAttributesA(dir); if (attributes == INVALID_FILE_ATTRIBUTES) ret = (CreateDirectoryA(dir, NULL) ? 0 : 1); #endif /* Make all the subdirectories */ for (i = 0; i < n; i++) { tmpdir = pathJoin(dir, sarrayGetString(sa, i, L_NOCOPY)); #ifndef _WIN32 mkdir(tmpdir, 0777); #else if (CreateDirectoryA(tmpdir, NULL) == 0) ret += (GetLastError() != ERROR_ALREADY_EXISTS); #endif LEPT_FREE(dir); dir = tmpdir; } LEPT_FREE(dir); sarrayDestroy(&sa); if (ret > 0) L_ERROR("failure to create %d directories\n", __func__, ret); return ret; } /*! * \brief lept_rmdir() * * \param[in] subdir of /tmp or its OS specific equivalent * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) %subdir is a partial path that can consist of one or more
 *          directories.
 *      (2) This removes all files from the specified subdirectory of
 *          the root temp directory:
 *            /tmp    (unix)
 *            [Temp]  (Windows)
 *          and then removes the subdirectory.
 *      (3) The combination
 *            lept_rmdir(subdir);
 *            lept_mkdir(subdir);
 *          is guaranteed to give you an empty subdirectory.
 * 
*/ l_int32 lept_rmdir(const char *subdir) { char *dir, *fname, *fullname; l_int32 exists, ret, i, nfiles; SARRAY *sa; #ifdef _WIN32 char *newpath; #else char *realdir; #endif /* _WIN32 */ if (!subdir) return ERROR_INT("subdir not defined", __func__, 1); if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) return ERROR_INT("subdir not an actual subdirectory", __func__, 1); /* Find the temp subdirectory */ dir = pathJoin("/tmp", subdir); if (!dir) return ERROR_INT("directory name not made", __func__, 1); lept_direxists(dir, &exists); if (!exists) { /* fail silently */ LEPT_FREE(dir); return 0; } /* List all the files in that directory */ if ((sa = getFilenamesInDirectory(dir)) == NULL) { L_ERROR("directory %s does not exist!\n", __func__, dir); LEPT_FREE(dir); return 1; } nfiles = sarrayGetCount(sa); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); fullname = genPathname(dir, fname); remove(fullname); LEPT_FREE(fullname); } #ifndef _WIN32 realdir = genPathname("/tmp", subdir); ret = rmdir(realdir); LEPT_FREE(realdir); #else newpath = genPathname(dir, NULL); ret = (RemoveDirectoryA(newpath) ? 0 : 1); LEPT_FREE(newpath); #endif /* !_WIN32 */ sarrayDestroy(&sa); LEPT_FREE(dir); return ret; } /*! * \brief lept_direxists() * * \param[in] dir * \param[out] pexists 1 if it exists; 0 otherwise * \return void * *
 * Notes:
 *      (1) Always use unix pathname separators.
 *      (2) By calling genPathname(), if the pathname begins with "/tmp"
 *          this does an automatic directory translation for operating
 *          systems that use a different path for /tmp.
 * 
*/ void lept_direxists(const char *dir, l_int32 *pexists) { char *realdir; if (!pexists) return; *pexists = 0; if (!dir) return; if ((realdir = genPathname(dir, NULL)) == NULL) return; #ifndef _WIN32 { struct stat s; l_int32 err = stat(realdir, &s); if (err != -1 && S_ISDIR(s.st_mode)) *pexists = 1; } #else /* _WIN32 */ { l_uint32 attributes; attributes = GetFileAttributesA(realdir); if (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY)) *pexists = 1; } #endif /* _WIN32 */ LEPT_FREE(realdir); } /*! * \brief lept_rm_match() * * \param[in] subdir [optional] if NULL, the removed files are in /tmp * \param[in] substr [optional] pattern to match in filename * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) This removes the matched files in /tmp or a subdirectory of /tmp.
 *          Use NULL for %subdir if the files are in /tmp.
 *      (2) If %substr == NULL, this removes all files in the directory.
 *          If %substr == "" (empty), this removes no files.
 *          If both %subdir == NULL and %substr == NULL, this removes
 *          all files in /tmp.
 *      (3) Use unix pathname separators.
 *      (4) By calling genPathname(), if the pathname begins with "/tmp"
 *          this does an automatic directory translation for operating
 *          systems that use a different path for /tmp.
 *      (5) Error conditions:
 *            * returns -1 if the directory is not found
 *            * returns the number of files (> 0) that it was unable to remove.
 * 
*/ l_int32 lept_rm_match(const char *subdir, const char *substr) { char *path, *fname; char tempdir[256]; l_int32 i, n, ret; SARRAY *sa; makeTempDirname(tempdir, sizeof(tempdir), subdir); if ((sa = getSortedPathnamesInDirectory(tempdir, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", __func__, -1); n = sarrayGetCount(sa); if (n == 0) { L_WARNING("no matching files found\n", __func__); sarrayDestroy(&sa); return 0; } ret = 0; for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); path = genPathname(fname, NULL); if (lept_rmfile(path) != 0) { L_ERROR("failed to remove %s\n", __func__, path); ret++; } LEPT_FREE(path); } sarrayDestroy(&sa); return ret; } /*! * \brief lept_rm() * * \param[in] subdir [optional] subdir of '/tmp'; can be NULL * \param[in] tail filename without the directory * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) By calling genPathname(), this does an automatic directory
 *          translation on operating systems which use a different path.
 * 
*/ l_int32 lept_rm(const char *subdir, const char *tail) { char *path; char newtemp[256]; l_int32 ret; if (!tail || strlen(tail) == 0) return ERROR_INT("tail undefined or empty", __func__, 1); if (makeTempDirname(newtemp, sizeof(newtemp), subdir)) return ERROR_INT("temp dirname not made", __func__, 1); path = genPathname(newtemp, tail); ret = lept_rmfile(path); LEPT_FREE(path); return ret; } /*! * \brief * * lept_rmfile() * * \param[in] filepath full path to file including the directory * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) This removes the named file.
 *      (2) Use unix pathname separators.
 *      (3) There is no name translation.
 *      (4) Unlike the other lept_* functions in this section, this can remove
 *          any file -- it is not restricted to files that are in /tmp or a
 *          subdirectory of it.
 *      (5) For files in /tmp or a subdirectory of it, this does an automatic
 *          directory translation for operating systems that use a different
 *          path for /tmp.
 * 
*/ l_int32 lept_rmfile(const char *filepath) { l_int32 ret; if (!filepath || strlen(filepath) == 0) return ERROR_INT("filepath undefined or empty", __func__, 1); #ifndef _WIN32 ret = remove(filepath); #else /* Set attributes to allow deletion of read-only files */ SetFileAttributesA(filepath, FILE_ATTRIBUTE_NORMAL); ret = DeleteFileA(filepath) ? 0 : 1; #endif /* !_WIN32 */ return ret; } /*! * \brief lept_mv() * * \param[in] srcfile * \param[in] newdir [optional]; can be NULL * \param[in] newtail [optional]; can be NULL * \param[out] pnewpath [optional] of actual path; can be NULL * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) This moves %srcfile to /tmp or to a subdirectory of /tmp.
 *      (2) %srcfile can either be a full path or relative to the
 *          current directory.
 *      (3) %newdir can either specify an existing subdirectory of /tmp
 *          or can be NULL.  In the latter case, the file will be written
 *          into /tmp.
 *      (4) %newtail can either specify a filename tail or, if NULL,
 *          the filename is taken from src-tail, the tail of %srcfile.
 *      (5) For debugging, the computed newpath can be returned.  It must
 *          be freed by the caller.
 *      (6) Reminders:
 *          (a) specify files using unix pathnames
 *          (b) this does an automatic directory translation on operating
 *              systems that use a different path for /tmp.
 *      (7) Examples:
 *          * newdir = NULL,    newtail = NULL    ==> /tmp/src-tail
 *          * newdir = NULL,    newtail = abc     ==> /tmp/abc
 *          * newdir = def/ghi, newtail = NULL    ==> /tmp/def/ghi/src-tail
 *          * newdir = def/ghi, newtail = abc     ==> /tmp/def/ghi/abc
 * 
*/ l_int32 lept_mv(const char *srcfile, const char *newdir, const char *newtail, char **pnewpath) { char *srcpath, *newpath, *dir, *srctail; char newtemp[256]; l_int32 ret; if (!srcfile) return ERROR_INT("srcfile not defined", __func__, 1); /* Require output pathname to be in /tmp/ or a subdirectory */ if (makeTempDirname(newtemp, sizeof(newtemp), newdir) == 1) return ERROR_INT("newdir not NULL or a subdir of /tmp", __func__, 1); /* Get canonical src pathname */ splitPathAtDirectory(srcfile, &dir, &srctail); #ifndef _WIN32 srcpath = pathJoin(dir, srctail); LEPT_FREE(dir); /* Generate output pathname */ if (!newtail || newtail[0] == '\0') newpath = pathJoin(newtemp, srctail); else newpath = pathJoin(newtemp, newtail); LEPT_FREE(srctail); /* Overwrite any existing file at 'newpath' */ ret = fileCopy(srcpath, newpath); if (!ret) { /* and remove srcfile */ char *realpath = genPathname(srcpath, NULL); remove(realpath); LEPT_FREE(realpath); } #else srcpath = genPathname(dir, srctail); LEPT_FREE(dir); /* Generate output pathname */ if (!newtail || newtail[0] == '\0') newpath = genPathname(newtemp, srctail); else newpath = genPathname(newtemp, newtail); LEPT_FREE(srctail); /* Overwrite any existing file at 'newpath' */ ret = MoveFileExA(srcpath, newpath, MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING) ? 0 : 1; #endif /* ! _WIN32 */ LEPT_FREE(srcpath); if (pnewpath) *pnewpath = newpath; else LEPT_FREE(newpath); return ret; } /*! * \brief lept_cp() * * \param[in] srcfile * \param[in] newdir [optional]; can be NULL * \param[in] newtail [optional]; can be NULL * \param[out] pnewpath [optional] of actual path; can be NULL * \return 0 on success, non-zero on failure * *
 * Notes:
 *      (1) This copies %srcfile to /tmp or to a subdirectory of /tmp.
 *      (2) %srcfile can either be a full path or relative to the
 *          current directory.
 *      (3) %newdir can either specify an existing subdirectory of /tmp,
 *          or can be NULL.  In the latter case, the file will be written
 *          into /tmp.
 *      (4) %newtail can either specify a filename tail or, if NULL,
 *          the filename is taken from src-tail, the tail of %srcfile.
 *      (5) For debugging, the computed newpath can be returned.  It must
 *          be freed by the caller.
 *      (6) Reminders:
 *          (a) specify files using unix pathnames
 *          (b) this does an automatic directory translation for operating
 *              systems that use a different path for /tmp
 *      (7) Examples:
 *          * newdir = NULL,    newtail = NULL    ==> /tmp/src-tail
 *          * newdir = NULL,    newtail = abc     ==> /tmp/abc
 *          * newdir = def/ghi, newtail = NULL    ==> /tmp/def/ghi/src-tail
 *          * newdir = def/ghi, newtail = abc     ==> /tmp/def/ghi/abc
 *
 * 
*/ l_int32 lept_cp(const char *srcfile, const char *newdir, const char *newtail, char **pnewpath) { char *srcpath, *newpath, *dir, *srctail; char newtemp[256]; l_int32 ret; if (!srcfile) return ERROR_INT("srcfile not defined", __func__, 1); /* Require output pathname to be in /tmp or a subdirectory */ if (makeTempDirname(newtemp, sizeof(newtemp), newdir) == 1) return ERROR_INT("newdir not NULL or a subdir of /tmp", __func__, 1); /* Get canonical src pathname */ splitPathAtDirectory(srcfile, &dir, &srctail); #ifndef _WIN32 srcpath = pathJoin(dir, srctail); LEPT_FREE(dir); /* Generate output pathname */ if (!newtail || newtail[0] == '\0') newpath = pathJoin(newtemp, srctail); else newpath = pathJoin(newtemp, newtail); LEPT_FREE(srctail); /* Overwrite any existing file at 'newpath' */ ret = fileCopy(srcpath, newpath); #else srcpath = genPathname(dir, srctail); LEPT_FREE(dir); /* Generate output pathname */ if (!newtail || newtail[0] == '\0') newpath = genPathname(newtemp, srctail); else newpath = genPathname(newtemp, newtail); LEPT_FREE(srctail); /* Overwrite any existing file at 'newpath' */ ret = CopyFileA(srcpath, newpath, FALSE) ? 0 : 1; #endif /* !_WIN32 */ LEPT_FREE(srcpath); if (pnewpath) *pnewpath = newpath; else LEPT_FREE(newpath); return ret; } /*--------------------------------------------------------------------* * Special debug/test function for calling 'system' * *--------------------------------------------------------------------*/ #if defined(__APPLE__) #include "TargetConditionals.h" #endif /* __APPLE__ */ /*! * \brief callSystemDebug() * * \param[in] cmd command to be exec'd * \return 0 on success * *
 * Notes:
 *      (1) The C library 'system' call is only made through this function.
 *          It only works in debug/test mode, where the global variable
 *          LeptDebugOK == TRUE.  This variable is set to FALSE in the
 *          library as distributed, and calling this function will
 *          generate an error message.
 * 
*/ l_int32 callSystemDebug(const char *cmd) { l_int32 ret; if (!cmd) { L_ERROR("cmd not defined\n", __func__); return 1; } if (LeptDebugOK == FALSE) { L_INFO("'system' calls are disabled\n", __func__); return 1; } #if defined(__APPLE__) /* iOS 11 does not support system() */ #if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) /* Mac OS X */ ret = system(cmd); #elif TARGET_OS_IPHONE || defined(OS_IOS) /* iOS */ L_ERROR("iOS 11 does not support system()\n", __func__); #endif /* TARGET_OS_OSX */ #else /* ! __APPLE__ */ ret = system(cmd); #endif /* __APPLE__ */ return ret; } /*--------------------------------------------------------------------* * General file name operations * *--------------------------------------------------------------------*/ /*! * \brief splitPathAtDirectory() * * \param[in] pathname full path; can be a directory * \param[out] pdir [optional] root directory name of * input path, including trailing '/' * \param[out] ptail [optional] path tail, which is either * the file name within the root directory or * the last sub-directory in the path * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If you only want the tail, input null for the root directory ptr.
 *      (2) If you only want the root directory name, input null for the
 *          tail ptr.
 *      (3) This function makes decisions based only on the lexical
 *          structure of the input.  Examples:
 *            /usr/tmp/abc.d  -->  dir: /usr/tmp/       tail: abc.d
 *            /usr/tmp/       -->  dir: /usr/tmp/       tail: [empty string]
 *            /usr/tmp        -->  dir: /usr/           tail: tmp
 *            abc.d           -->  dir: [empty string]  tail: abc.d
 *      (4  Consider the first example above: /usr/tmp/abc.d.
 *          Suppose you want the stem of the file, abc, without either
 *          the directory or the extension.  This can be extracted in two steps:
 *              splitPathAtDirectory("usr/tmp/abc.d", NULL, &tail);
 *                   [sets tail: "abc.d"]
 *              splitPathAtExtension(tail, &basename, NULL);
 *                   [sets basename: "abc"]
 *      (5) The input can have either forward (unix) or backward (win)
 *          slash separators.  The output has unix separators.
 *          Note that Win32 pathname functions generally accept both
 *          slash forms, but the Windows command line interpreter
 *          only accepts backward slashes, because forward slashes are
 *          used to demarcate switches (vs. dashes in unix).
 * 
*/ l_ok splitPathAtDirectory(const char *pathname, char **pdir, char **ptail) { char *cpathname, *lastslash; if (!pdir && !ptail) return ERROR_INT("null input for both strings", __func__, 1); if (pdir) *pdir = NULL; if (ptail) *ptail = NULL; if (!pathname) return ERROR_INT("pathname not defined", __func__, 1); cpathname = stringNew(pathname); convertSepCharsInPath(cpathname, UNIX_PATH_SEPCHAR); lastslash = strrchr(cpathname, '/'); if (lastslash) { if (ptail) *ptail = stringNew(lastslash + 1); if (pdir) { *(lastslash + 1) = '\0'; *pdir = cpathname; } else { LEPT_FREE(cpathname); } } else { /* no directory */ if (pdir) *pdir = stringNew(""); if (ptail) *ptail = cpathname; else LEPT_FREE(cpathname); } return 0; } /*! * \brief splitPathAtExtension() * * \param[in] pathname full path; can be a directory * \param[out] pbasename [optional] pathname not including the * last dot and characters after that * \param[out] pextension [optional] path extension, which is * the last dot and the characters after it. If * there is no extension, it returns the empty string * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) If you only want the extension, input null for the basename ptr.
 *      (2) If you only want the basename without extension, input null
 *          for the extension ptr.
 *      (3) This function makes decisions based only on the lexical
 *          structure of the input.  Examples:
 *            /usr/tmp/abc.jpg  -->  basename: /usr/tmp/abc    ext: .jpg
 *            /usr/tmp/.jpg     -->  basename: /usr/tmp/       ext: .jpg
 *            /usr/tmp.jpg/     -->  basename: /usr/tmp.jpg/   ext: [empty str]
 *            ./.jpg            -->  basename: ./              ext: .jpg
 *      (4) The input can have either forward (unix) or backward (win)
 *          slash separators.  The output has unix separators.
 *      (5) Note that basename, as used here, is different from the result
 *          of the unix program 'basename'.  Here, basename is the entire
 *          pathname up to a final extension and its preceding dot.
 * 
*/ l_ok splitPathAtExtension(const char *pathname, char **pbasename, char **pextension) { char *tail, *dir, *lastdot; char empty[4] = ""; if (!pbasename && !pextension) return ERROR_INT("null input for both strings", __func__, 1); if (pbasename) *pbasename = NULL; if (pextension) *pextension = NULL; if (!pathname) return ERROR_INT("pathname not defined", __func__, 1); /* Split out the directory first */ splitPathAtDirectory(pathname, &dir, &tail); /* Then look for a "." in the tail part. * This way we ignore all "." in the directory. */ if ((lastdot = strrchr(tail, '.'))) { if (pextension) *pextension = stringNew(lastdot); if (pbasename) { *lastdot = '\0'; *pbasename = stringJoin(dir, tail); } } else { if (pextension) *pextension = stringNew(empty); if (pbasename) *pbasename = stringNew(pathname); } LEPT_FREE(dir); LEPT_FREE(tail); return 0; } /*! * \brief pathJoin() * * \param[in] dir [optional] can be null * \param[in] fname [optional] can be null * \return specially concatenated path, or NULL on error * *
 * Notes:
 *      (1) Use unix-style pathname separators ('/').
 *      (2) %fname can be the entire path, or part of the path containing
 *          at least one directory, or a tail without a directory, or NULL.
 *      (3) It produces a path that strips multiple slashes to a single
 *          slash, joins %dir and %fname by a slash, and has no trailing
 *          slashes (except in the cases where %dir == "/" and
 *          %fname == NULL, or v.v.).
 *      (4) If both %dir and %fname are null, produces an empty string.
 *      (5) Neither %dir nor %fname can begin with '..'.
 *      (6) The result is not canonicalized or tested for correctness:
 *          garbage in (e.g., /&%), garbage out.
 *      (7) Examples:
 *             //tmp// + //abc/  -->  /tmp/abc
 *             tmp/ + /abc/      -->  tmp/abc
 *             tmp/ + abc/       -->  tmp/abc
 *             /tmp/ + ///       -->  /tmp
 *             /tmp/ + NULL      -->  /tmp
 *             // + /abc//       -->  /abc
 *             // + NULL         -->  /
 *             NULL + /abc/def/  -->  /abc/def
 *             NULL + abc//      -->  abc
 *             NULL + //         -->  /
 *             NULL + NULL       -->  (empty string)
 *             "" + ""           -->  (empty string)
 *             "" + /            -->  /
 *             ".." + /etc/foo   -->  NULL
 *             /tmp + ".."       -->  NULL
 * 
*/ char * pathJoin(const char *dir, const char *fname) { const char *slash = "/"; char *str, *dest; l_int32 i, n1, n2, emptydir; size_t size; SARRAY *sa1, *sa2; L_BYTEA *ba; if (!dir && !fname) return stringNew(""); if (dir && strlen(dir) >= 2 && dir[0] == '.' && dir[1] == '.') return (char *)ERROR_PTR("dir starts with '..'", __func__, NULL); if (fname && strlen(fname) >= 2 && fname[0] == '.' && fname[1] == '.') return (char *)ERROR_PTR("fname starts with '..'", __func__, NULL); sa1 = sarrayCreate(0); sa2 = sarrayCreate(0); ba = l_byteaCreate(4); /* Process %dir */ if (dir && strlen(dir) > 0) { if (dir[0] == '/') l_byteaAppendString(ba, slash); sarraySplitString(sa1, dir, "/"); /* removes all slashes */ n1 = sarrayGetCount(sa1); for (i = 0; i < n1; i++) { str = sarrayGetString(sa1, i, L_NOCOPY); l_byteaAppendString(ba, str); l_byteaAppendString(ba, slash); } } /* Special case to add leading slash: dir NULL or empty string */ emptydir = dir && strlen(dir) == 0; if ((!dir || emptydir) && fname && strlen(fname) > 0 && fname[0] == '/') l_byteaAppendString(ba, slash); /* Process %fname */ if (fname && strlen(fname) > 0) { sarraySplitString(sa2, fname, "/"); n2 = sarrayGetCount(sa2); for (i = 0; i < n2; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); l_byteaAppendString(ba, str); l_byteaAppendString(ba, slash); } } /* Remove trailing slash */ dest = (char *)l_byteaCopyData(ba, &size); if (size > 1 && dest[size - 1] == '/') dest[size - 1] = '\0'; sarrayDestroy(&sa1); sarrayDestroy(&sa2); l_byteaDestroy(&ba); return dest; } /*! * \brief appendSubdirs() * * \param[in] basedir * \param[in] subdirs * \return concatenated full directory path without trailing slash, * or NULL on error * *
 * Notes:
 *      (1) Use unix pathname separators
 *      (2) Allocates a new string:  [basedir]/[subdirs]
 * 
*/ char * appendSubdirs(const char *basedir, const char *subdirs) { char *newdir; size_t len1, len2, len3, len4; if (!basedir || !subdirs) return (char *)ERROR_PTR("basedir and subdirs not both defined", __func__, NULL); len1 = strlen(basedir); len2 = strlen(subdirs); len3 = len1 + len2 + 8; if ((newdir = (char *)LEPT_CALLOC(len3, 1)) == NULL) return (char *)ERROR_PTR("newdir not made", __func__, NULL); stringCat(newdir, len3, basedir); if (newdir[len1 - 1] != '/') /* add '/' if necessary */ newdir[len1] = '/'; if (subdirs[0] == '/') /* add subdirs, stripping leading '/' */ stringCat(newdir, len3, subdirs + 1); else stringCat(newdir, len3, subdirs); len4 = strlen(newdir); if (newdir[len4 - 1] == '/') /* strip trailing '/' */ newdir[len4 - 1] = '\0'; return newdir; } /*--------------------------------------------------------------------* * Special file name operations * *--------------------------------------------------------------------*/ /*! * \brief convertSepCharsInPath() * * \param[in] path * \param[in] type UNIX_PATH_SEPCHAR, WIN_PATH_SEPCHAR * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) In-place conversion.
 *      (2) Type is the resulting type:
 *            * UNIX_PATH_SEPCHAR:  '\\' ==> '/'
 *            * WIN_PATH_SEPCHAR:   '/' ==> '\\'
 *      (3) Virtually all path operations in leptonica use unix separators.
 *      (4) The backslash is a valid character in unix pathnames and should
 *          not be converted.  Each backslash needs to be escaped with a
 *          preceding backslash for the shell, but the actual filename
 *          does not include these escape characters.
 * 
*/ l_ok convertSepCharsInPath(char *path, l_int32 type) { l_int32 i; size_t len; if (!path) return ERROR_INT("path not defined", __func__, 1); if (type != UNIX_PATH_SEPCHAR && type != WIN_PATH_SEPCHAR) return ERROR_INT("invalid type", __func__, 1); len = strlen(path); if (type == UNIX_PATH_SEPCHAR) { #ifdef _WIN32 /* only convert on Windows */ for (i = 0; i < len; i++) { if (path[i] == '\\') path[i] = '/'; } #endif /* _WIN32 */ } else { /* WIN_PATH_SEPCHAR */ for (i = 0; i < len; i++) { if (path[i] == '/') path[i] = '\\'; } } return 0; } /*! * \brief genPathname() * * \param[in] dir [optional] directory or full path name, * with or without the trailing '/' * \param[in] fname [optional] file name within a directory * \return pathname either a directory or full path, or NULL on error * *
 * Notes:
 *      (1) This function generates actual paths in the following ways:
 *            * from two sub-parts (e.g., a directory and a file name).
 *            * from a single path full path, placed in %dir, with
 *              %fname == NULL.
 *            * from the name of a file in the local directory placed in
 *              %fname, with %dir == NULL.
 *            * if in a "/tmp" directory and on iOS, macOS or Windows,
 *              the OS specific temp directory is used.
 *      (2) This does an automatic directory translation for operating
 *          systems that use a different path for /tmp.
 *          That path is determined
 *             * on Windows: by GetTempPath()
 *             * on macOS, iOS: by confstr() (see man page)
 *      (3) On unix, the TMPDIR variable is ignored.  No rewriting
 *          of temp directories is permitted.
 *      (4) There are four cases for the input:
 *          (a) %dir is a directory and %fname is defined: result is a
 *              full path
 *          (b) %dir is a directory and %fname is null: result is a directory
 *          (c) %dir is a full path and %fname is null: result is a full path
 *          (d) %dir is null or an empty string: start in the current dir;
 *              result is a full path
 *      (5) In all cases, the resulting pathname is not terminated with a slash
 *      (6) The caller is responsible for freeing the returned pathname.
 * 
*/ char * genPathname(const char *dir, const char *fname) { #if defined(REWRITE_TMP) l_int32 rewrite_tmp = TRUE; #else l_int32 rewrite_tmp = FALSE; #endif /* REWRITE_TMP */ char *cdir, *pathout; l_int32 dirlen, namelen; size_t size; if (!dir && !fname) return (char *)ERROR_PTR("no input", __func__, NULL); /* Handle the case where we start from the current directory */ if (!dir || dir[0] == '\0') { if ((cdir = getcwd(NULL, 0)) == NULL) return (char *)ERROR_PTR("no current dir found", __func__, NULL); } else { if ((cdir = stringNew(dir)) == NULL) return (char *)ERROR_PTR("stringNew failed", __func__, NULL); } /* Convert to unix path separators, and remove the trailing * slash in the directory, except when dir == "/" */ convertSepCharsInPath(cdir, UNIX_PATH_SEPCHAR); dirlen = strlen(cdir); if (cdir[dirlen - 1] == '/' && dirlen != 1) { cdir[dirlen - 1] = '\0'; dirlen--; } namelen = (fname) ? strlen(fname) : 0; size = dirlen + namelen + 256; if ((pathout = (char *)LEPT_CALLOC(size, sizeof(char))) == NULL) { LEPT_FREE(cdir); return (char *)ERROR_PTR("pathout not made", __func__, NULL); } /* First handle %dir (which may be a full pathname). * There is no path rewriting on unix, and on win32, we do not * rewrite unless the specified directory is /tmp or * a subdirectory of /tmp */ if (!rewrite_tmp || dirlen < 4 || (dirlen == 4 && strncmp(cdir, "/tmp", 4) != 0) || /* not in "/tmp" */ (dirlen > 4 && strncmp(cdir, "/tmp/", 5) != 0)) { /* not in "/tmp/" */ stringCopy(pathout, cdir, dirlen); } else { /* Rewrite with "/tmp" specified for the directory. */ #if defined(__APPLE__) size_t n = confstr(_CS_DARWIN_USER_TEMP_DIR, pathout, size); if (n == 0 || n > size) { /* Fall back to using /tmp */ stringCopy(pathout, cdir, dirlen); } else { /* Add the rest of cdir */ if (dirlen > 4) stringCat(pathout, size, cdir + 4); } #elif defined(_WIN32) l_int32 tmpdirlen; char tmpdir[MAX_PATH]; GetTempPathA(sizeof(tmpdir), tmpdir); /* get the Windows temp dir */ tmpdirlen = strlen(tmpdir); if (tmpdirlen > 0 && tmpdir[tmpdirlen - 1] == '\\') { tmpdir[tmpdirlen - 1] = '\0'; /* trim the trailing '\' */ } tmpdirlen = strlen(tmpdir); stringCopy(pathout, tmpdir, tmpdirlen); /* Add the rest of cdir */ if (dirlen > 4) stringCat(pathout, size, cdir + 4); #endif /* _WIN32 */ } /* Now handle %fname */ if (fname && strlen(fname) > 0) { dirlen = strlen(pathout); pathout[dirlen] = '/'; stringCat(pathout, size, fname); } LEPT_FREE(cdir); return pathout; } /*! * \brief makeTempDirname() * * \param[in] result preallocated on stack or heap and passed in * \param[in] nbytes size of %result array, in bytes * \param[in] subdir [optional]; can be NULL or an empty string * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This generates the directory path for output temp files,
 *          written into %result with unix separators.
 *      (2) Caller allocates %result, large enough to hold the path,
 *          which is:
 *            /tmp/%subdir       (unix)
 *            [Temp]/%subdir     (Windows, macOS, iOS)
 *          where [Temp] is the OS path
 *          and %subdir is in general a set of nested subdirectories:
 *            dir1/dir2/.../dirN
 *          which in use would not typically exceed 2 levels.
 *      (3) Usage example:
 * \code
 *           char  result[256];
 *           makeTempDirname(result, sizeof(result), "lept/golden");
 * \endcode
 * 
*/ l_ok makeTempDirname(char *result, size_t nbytes, const char *subdir) { char *dir, *path; l_int32 ret = 0; size_t pathlen; if (!result) return ERROR_INT("result not defined", __func__, 1); if (subdir && ((subdir[0] == '.') || (subdir[0] == '/'))) return ERROR_INT("subdir not an actual subdirectory", __func__, 1); memset(result, 0, nbytes); dir = pathJoin("/tmp", subdir); #if defined(REWRITE_TMP) path = genPathname(dir, NULL); #else path = stringNew(dir); #endif /* ~ _WIN32 */ pathlen = strlen(path); if (pathlen < nbytes - 1) { stringCopy(result, path, nbytes); } else { L_ERROR("result array too small for path\n", __func__); ret = 1; } LEPT_FREE(dir); LEPT_FREE(path); return ret; } /*! * \brief modifyTrailingSlash() * * \param[in] path preallocated on stack or heap and passed in * \param[in] nbytes size of %path array, in bytes * \param[in] flag L_ADD_TRAIL_SLASH or L_REMOVE_TRAIL_SLASH * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This carries out the requested action if necessary.
 * 
*/ l_ok modifyTrailingSlash(char *path, size_t nbytes, l_int32 flag) { char lastchar; size_t len; if (!path) return ERROR_INT("path not defined", __func__, 1); if (flag != L_ADD_TRAIL_SLASH && flag != L_REMOVE_TRAIL_SLASH) return ERROR_INT("invalid flag", __func__, 1); len = strlen(path); lastchar = path[len - 1]; if (flag == L_ADD_TRAIL_SLASH && lastchar != '/' && len < nbytes - 2) { path[len] = '/'; path[len + 1] = '\0'; } else if (flag == L_REMOVE_TRAIL_SLASH && lastchar == '/') { path[len - 1] = '\0'; } return 0; } /*! * \brief l_makeTempFilename() * * \return fname : heap allocated filename; returns NULL on failure. * *
 * Notes:
 *      (1) On unix, this makes a filename of the form
 *               "/tmp/lept.XXXXXX",
 *          where each X is a random character.
 *      (2) On Windows, this makes a filename of the form
 *               "/[Temp]/lp.XXXXXX".
 *      (3) On all systems, this fails if the file is not writable.
 *      (4) Safest usage is to write to a subdirectory in debug code.
 *      (5) The returned filename must be freed by the caller, using lept_free.
 *      (6) The tail of the filename has a '.', so that cygwin interprets
 *          the file as having an extension.  Otherwise, cygwin assumes it
 *          is an executable and appends ".exe" to the filename.
 *      (7) On unix, whenever possible use tmpfile() instead.  tmpfile()
 *          hides the file name, returns a stream opened for write,
 *          and deletes the temp file when the stream is closed.
 * 
*/ char * l_makeTempFilename(void) { char dirname[240]; if (makeTempDirname(dirname, sizeof(dirname), NULL) == 1) return (char *)ERROR_PTR("failed to make dirname", __func__, NULL); #ifndef _WIN32 { char *pattern; l_int32 fd; pattern = stringConcatNew(dirname, "/lept.XXXXXX", NULL); fd = mkstemp(pattern); if (fd == -1) { LEPT_FREE(pattern); return (char *)ERROR_PTR("mkstemp failed", __func__, NULL); } close(fd); return pattern; } #else { char fname[MAX_PATH]; FILE *fp; if (GetTempFileNameA(dirname, "lp.", 0, fname) == 0) return (char *)ERROR_PTR("GetTempFileName failed", __func__, NULL); if ((fp = fopen(fname, "wb")) == NULL) return (char *)ERROR_PTR("file cannot be written to", __func__, NULL); fclose(fp); return stringNew(fname); } #endif /* ~ _WIN32 */ } /*! * \brief extractNumberFromFilename() * * \param[in] fname * \param[in] numpre number of characters before the digits to be found * \param[in] numpost number of characters after the digits to be found * \return num number embedded in the filename; -1 on error or if * not found * *
 * Notes:
 *      (1) The number is to be found in the basename, which is the
 *          filename without either the directory or the last extension.
 *      (2) When a number is found, it is non-negative.  If no number
 *          is found, this returns -1, without an error message.  The
 *          caller needs to check.
 * 
*/ l_int32 extractNumberFromFilename(const char *fname, l_int32 numpre, l_int32 numpost) { char *tail, *basename; l_int32 len, nret, num; if (!fname) return ERROR_INT("fname not defined", __func__, -1); splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); LEPT_FREE(tail); len = strlen(basename); if (numpre + numpost > len - 1) { LEPT_FREE(basename); return ERROR_INT("numpre + numpost too big", __func__, -1); } basename[len - numpost] = '\0'; nret = sscanf(basename + numpre, "%d", &num); LEPT_FREE(basename); if (nret == 1) return num; else return -1; /* not found */ } leptonica-1.86.0/src/warper.c000066400000000000000000001466141506303110300160230ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file warper.c *
 *
 *      High-level captcha interface
 *          PIX               *pixSimpleCaptcha()
 *
 *      Random sinusoidal warping
 *          PIX               *pixRandomHarmonicWarp()
 *
 *      Helper functions
 *          static l_float64  *generateRandomNumberArray()
 *          static l_int32     applyWarpTransform()
 *
 *      Version using a LUT for sin
 *          PIX               *pixRandomHarmonicWarpLUT()
 *          static l_int32     applyWarpTransformLUT()
 *          static l_int32     makeSinLUT()
 *          static l_float32   getSinFromLUT()
 *
 *      Stereoscopic warping
 *          PIX               *pixWarpStereoscopic()
 *
 *      Linear and quadratic horizontal stretching
 *          PIX               *pixStretchHorizontal()
 *          PIX               *pixStretchHorizontalSampled()
 *          PIX               *pixStretchHorizontalLI()
 *
 *      Quadratic vertical shear
 *          PIX               *pixQuadraticVShear()
 *          PIX               *pixQuadraticVShearSampled()
 *          PIX               *pixQuadraticVShearLI()
 *
 *      Stereo from a pair of images
 *          PIX               *pixStereoFromPair()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" static l_float64 *generateRandomNumberArray(l_int32 size); static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py); #define USE_SIN_TABLE 0 /* Suggested input to pixStereoFromPair(). These are weighting * factors for input to the red channel from the left image. */ static const l_float32 DefaultRedWeight = 0.0f; static const l_float32 DefaultGreenWeight = 0.7f; static const l_float32 DefaultBlueWeight = 0.3f; /*----------------------------------------------------------------------* * High-level example captcha interface * *----------------------------------------------------------------------*/ /*! * \brief pixSimpleCaptcha() * * \param[in] pixs 8 bpp; no colormap * \param[in] border added white pixels on each side * \param[in] nterms number of x and y harmonic terms * \param[in] seed of random number generator * \param[in] color for colorizing; in 0xrrggbb00 format; use 0 for black * \param[in] cmapflag 1 for colormap output; 0 for rgb * \return pixd 8 bpp cmap or 32 bpp rgb, or NULL on error * *
 * Notes:
 *      (1) This uses typical default values for generating captchas.
 *          The magnitudes of the harmonic warp are typically to be
 *          smaller when more terms are used, even though the phases
 *          are random.  See, for example, prog/warptest.c.
 * 
*/ PIX * pixSimpleCaptcha(PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag) { l_int32 k; l_float32 xmag[] = {7.0f, 5.0f, 4.0f, 3.0f}; l_float32 ymag[] = {10.0f, 8.0f, 6.0f, 5.0f}; l_float32 xfreq[] = {0.12f, 0.10f, 0.10f, 0.11f}; l_float32 yfreq[] = {0.15f, 0.13f, 0.13f, 0.11f}; PIX *pixg, *pixgb, *pixw, *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); if (nterms < 1 || nterms > 4) return (PIX *)ERROR_PTR("nterms must be in {1,2,3,4}", __func__, NULL); k = nterms - 1; pixg = pixConvertTo8(pixs, 0); pixgb = pixAddBorder(pixg, border, 255); pixw = pixRandomHarmonicWarp(pixgb, xmag[k], ymag[k], xfreq[k], yfreq[k], nterms, nterms, seed, 255); pixd = pixColorizeGray(pixw, color, cmapflag); pixDestroy(&pixg); pixDestroy(&pixgb); pixDestroy(&pixw); return pixd; } /*----------------------------------------------------------------------* * Random sinusoidal warping * *----------------------------------------------------------------------*/ /*! * \brief pixRandomHarmonicWarp() * * \param[in] pixs 8 bpp; no colormap * \param[in] xmag, ymag maximum magnitude of x and y distortion * \param[in] xfreq, yfreq maximum magnitude of x and y frequency * \param[in] nx, ny number of x and y harmonic terms * \param[in] seed of random number generator * \param[in] grayval color brought in from the outside; * 0 for black, 255 for white * \return pixd 8 bpp; no colormap, or NULL on error * *
 * Notes:
 *      (1) To generate the warped image p(x',y'), set up the transforms
 *          that are in getWarpTransform().  For each (x',y') in the
 *          dest, the warp function computes the originating location
 *          (x, y) in the src.  The differences (x - x') and (y - y')
 *          are given as a sum of products of sinusoidal terms.  Each
 *          term is multiplied by a maximum amplitude (in pixels), and the
 *          angle is determined by a frequency and phase, and depends
 *          on the (x', y') value of the dest.  Random numbers with
 *          a variable input seed are used to allow the warping to be
 *          unpredictable.  A linear interpolation is used to find
 *          the value for the source at (x, y); this value is written
 *          into the dest.
 *      (2) This can be used to generate 'captcha's, which are somewhat
 *          randomly distorted images of text.  A typical set of parameters
 *          for a captcha are:
 *                    xmag = 4.0     ymag = 6.0
 *                    xfreq = 0.10   yfreq = 0.13
 *                    nx = 3         ny = 3
 *          Other examples can be found in prog/warptest.c.
 * 
*/ PIX * pixRandomHarmonicWarp(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval) { l_int32 w, h, d, i, j, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; l_float64 *randa; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); /* Compute filter output at each location. We iterate over * the destination pixels. For each dest pixel, use the * warp function to compute the four source pixels that * contribute, at the location (x, y). Each source pixel * is divided into 16 x 16 subpixels to get an approximate value. */ srand(seed); randa = generateRandomNumberArray(5 * (nx + ny)); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { applyWarpTransform(xmag, ymag, xfreq, yfreq, randa, nx, ny, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } LEPT_FREE(randa); return pixd; } /*----------------------------------------------------------------------* * Static helper functions * *----------------------------------------------------------------------*/ static l_float64 * generateRandomNumberArray(l_int32 size) { l_int32 i; l_float64 *randa; if ((randa = (l_float64 *)LEPT_CALLOC(size, sizeof(l_float64))) == NULL) return (l_float64 *)ERROR_PTR("calloc fail for randa", __func__, NULL); /* Return random values between 0.5 and 1.0 */ for (i = 0; i < size; i++) randa[i] = 0.5 * (1.0 + (l_float64)rand() / (l_float64)RAND_MAX); return randa; } /*! * \brief applyWarpTransform() * * Notes: * (1) Uses the internal sin function. */ static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py) { l_int32 i; l_float64 twopi, x, y, anglex, angley; twopi = 6.283185; for (i = 0, x = xp; i < nx; i++) { anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; x += xmag * randa[3 * i] * sin(anglex) * sin(angley); } for (i = nx, y = yp; i < nx + ny; i++) { angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; y += ymag * randa[3 * i] * sin(angley) * sin(anglex); } *px = (l_float32)x; *py = (l_float32)y; return 0; } #if USE_SIN_TABLE /*----------------------------------------------------------------------* * Version using a LUT for sin * *----------------------------------------------------------------------*/ static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *lut, l_int32 npts, l_float32 *px, l_float32 *py); static l_int32 makeSinLUT(l_int32 npts, NUMA **pna); static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts, l_float32 radang); /*! * \brief pixRandomHarmonicWarpLUT() * * \param[in] pixs 8 bpp; no colormap * \param[in] xmag, ymag maximum magnitude of x and y distortion * \param[in] xfreq, yfreq maximum magnitude of x and y frequency * \param[in] nx, ny number of x and y harmonic terms * \param[in] seed of random number generator * \param[in] grayval color brought in from the outside; * 0 for black, 255 for white * \return pixd 8 bpp; no colormap, or NULL on error * *
 * Notes:
 *      (1) See notes and inline comments in pixRandomHarmonicWarp().
 *          This version uses a LUT for the sin function.  It is not
 *          appreciably faster than using the built-in sin function,
 *          and is here for comparison only.
 * 
*/ PIX * pixRandomHarmonicWarpLUT(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval) { l_int32 w, h, d, i, j, wpls, wpld, val, npts; l_uint32 *datas, *datad, *lined; l_float32 x, y; l_float32 *lut; l_float64 *randa; NUMA *na; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", __func__, NULL); /* Compute filter output at each location. We iterate over * the destination pixels. For each dest pixel, use the * warp function to compute the four source pixels that * contribute, at the location (x, y). Each source pixel * is divided into 16 x 16 subpixels to get an approximate value. */ srand(seed); randa = generateRandomNumberArray(5 * (nx + ny)); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); npts = 100; makeSinLUT(npts, &na); lut = numaGetFArray(na, L_NOCOPY); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { applyWarpTransformLUT(xmag, ymag, xfreq, yfreq, randa, nx, ny, j, i, lut, npts, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } numaDestroy(&na); LEPT_FREE(randa); return pixd; } /*! * \brief applyWarpTransformLUT() * * Notes: * (1) Uses an LUT for computing sin(theta). There is little speed * advantage to using the LUT. */ static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *lut, l_int32 npts, l_float32 *px, l_float32 *py) { l_int32 i; l_float64 twopi, x, y, anglex, angley, sanglex, sangley; twopi = 6.283185; for (i = 0, x = xp; i < nx; i++) { anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; sanglex = getSinFromLUT(lut, npts, anglex); sangley = getSinFromLUT(lut, npts, angley); x += xmag * randa[3 * i] * sanglex * sangley; } for (i = nx, y = yp; i < nx + ny; i++) { angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; sanglex = getSinFromLUT(lut, npts, anglex); sangley = getSinFromLUT(lut, npts, angley); y += ymag * randa[3 * i] * sangley * sanglex; } *px = (l_float32)x; *py = (l_float32)y; return 0; } static l_int32 makeSinLUT(l_int32 npts, NUMA **pna) { l_int32 i, n; l_float32 delx, fval; NUMA *na; if (!pna) return ERROR_INT("&na not defined", __func__, 1); *pna = NULL; if (npts < 2) return ERROR_INT("npts < 2", __func__, 1); n = 2 * npts + 1; na = numaCreate(n); *pna = na; delx = 3.14159265 / (l_float32)npts; numaSetParameters(na, 0.0, delx); for (i = 0; i < n / 2; i++) numaAddNumber(na, (l_float32)sin((l_float64)i * delx)); for (i = 0; i < n / 2; i++) { numaGetFValue(na, i, &fval); numaAddNumber(na, -fval); } numaAddNumber(na, 0); return 0; } static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts, l_float32 radang) { l_int32 index; l_float32 twopi, invtwopi, findex, diff; /* Restrict radang to [0, 2pi] */ twopi = 6.283185; invtwopi = 0.1591549; if (radang < 0.0) radang += twopi * (1.0 - (l_int32)(-radang * invtwopi)); else if (radang > 0.0) radang -= twopi * (l_int32)(radang * invtwopi); /* Interpolate */ findex = (2.0 * (l_float32)npts) * (radang * invtwopi); index = (l_int32)findex; if (index == 2 * npts) return tab[index]; diff = findex - index; return (1.0 - diff) * tab[index] + diff * tab[index + 1]; } #endif /* USE_SIN_TABLE */ /*---------------------------------------------------------------------------* * Stereoscopic warping * *---------------------------------------------------------------------------*/ /*! * \brief pixWarpStereoscopic() * * \param[in] pixs any depth, colormap ok * \param[in] zbend horizontal separation in pixels of red and cyan * at the left and right sides, that gives rise to * quadratic curvature out of the image plane * \param[in] zshiftt uniform pixel translation difference between * red and cyan, that pushes the top of the image * plane away from the viewer (zshiftt > 0) or * towards the viewer (zshiftt < 0) * \param[in] zshiftb uniform pixel translation difference between * red and cyan, that pushes the bottom of the image * plane away from the viewer (zshiftb > 0) or * towards the viewer (zshiftb < 0) * \param[in] ybendt multiplicative parameter for in-plane vertical * displacement at the left or right edge at the top: * y = ybendt * (2x/w - 1)^2 * \param[in] ybendb same as ybendt, except at the left or right edge * at the bottom * \param[in] redleft 1 if the red filter is on the left; 0 otherwise * \return pixd 32 bpp, or NULL on error * *
 * Notes:
 *      (1) This function splits out the red channel, mucks around with
 *          it, then recombines with the unmolested cyan channel.
 *      (2) By using a quadratically increasing shift of the red
 *          pixels horizontally and away from the vertical centerline,
 *          the image appears to bend quadratically out of the image
 *          plane, symmetrically with respect to the vertical center
 *          line.  A positive value of %zbend causes the plane to be
 *          curved away from the viewer.  We use linearly interpolated
 *          stretching to avoid the appearance of kinks in the curve.
 *      (3) The parameters %zshiftt and %zshiftb tilt the image plane
 *          about a horizontal line through the center, and at the
 *          same time move that line either in toward the viewer or away.
 *          This is implemented by a combination of horizontal shear
 *          about the center line (for the tilt) and horizontal
 *          translation (to move the entire plane in or out).
 *          A positive value of %zshiftt moves the top of the plane
 *          away from the viewer, and a positive value of %zshiftb
 *          moves the bottom of the plane away.  We use linear interpolated
 *          shear to avoid visible vertical steps in the tilted image.
 *      (4) The image can be bent in the plane and about the vertical
 *          centerline.  The centerline does not shift, and the
 *          parameter %ybend gives the relative shift at left and right
 *          edges, with a downward shift for positive values of %ybend.
 *      (6) When writing out a steroscopic (red/cyan) image in jpeg,
 *          first call pixSetChromaSampling(pix, 0) to get sufficient
 *          resolution in the red channel.
 *      (7) Typical values are:
 *             zbend = 20
 *             zshiftt = 15
 *             zshiftb = -15
 *             ybendt = 30
 *             ybendb = 0
 *          If the disparity z-values are too large, it is difficult for
 *          the brain to register the two images.
 *      (8) This function has been cleverly reimplemented by Jeff Breidenbach.
 *          The original implementation used two 32 bpp rgb images,
 *          and merged them at the end.  The result is somewhat faded,
 *          and has a parameter "thresh" that controls the amount of
 *          color in the result.  (The present implementation avoids these
 *          two problems, skipping both the colorization and the alpha
 *          blending at the end, and is about 3x faster)
 *          The basic operations with 32 bpp are as follows:
 *               // Immediate conversion to 32 bpp
 *            Pix *pixt1 = pixConvertTo32(pixs);
 *               // Do vertical shear
 *            Pix *pixr = pixQuadraticVerticalShear(pixt1, L_WARP_TO_RIGHT,
 *                                                  ybendt, ybendb,
 *                                                  L_BRING_IN_WHITE);
 *               // Colorize two versions, toward red and cyan
 *            Pix *pixc = pixCopy(NULL, pixr);
 *            l_int32 thresh = 150;  // if higher, get less original color
 *            pixColorGray(pixr, NULL, L_PAINT_DARK, thresh, 255, 0, 0);
 *            pixColorGray(pixc, NULL, L_PAINT_DARK, thresh, 0, 255, 255);
 *               // Shift the red pixels; e.g., by stretching
 *            Pix *pixrs = pixStretchHorizontal(pixr, L_WARP_TO_RIGHT,
 *                                              L_QUADRATIC_WARP, zbend,
 *                                              L_INTERPOLATED,
 *                                              L_BRING_IN_WHITE);
 *               // Blend the shifted red and unshifted cyan 50:50
 *            Pix *pixg = pixCreate(w, h, 8);
 *            pixSetAllArbitrary(pixg, 128);
 *            pixd = pixBlendWithGrayMask(pixrs, pixc, pixg, 0, 0);
 * 
*/ PIX * pixWarpStereoscopic(PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft) { l_int32 w, h, zshift; l_float32 angle; BOX *boxleft, *boxright; PIX *pix1, *pix2, *pix3, *pix4, *pixr, *pixg, *pixb; PIX *pixv1, *pixv2, *pixv3, *pixv4; PIX *pixrs, *pixrss; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); /* Convert to the output depth, 32 bpp. */ pix1 = pixConvertTo32(pixs); /* If requested, do a quad vertical shearing, pushing pixels up * or down, depending on their distance from the centerline. */ pixGetDimensions(pixs, &w, &h, NULL); boxleft = boxCreate(0, 0, w / 2, h); boxright = boxCreate(w / 2, 0, w - w / 2, h); if (ybendt != 0 || ybendb != 0) { pixv1 = pixClipRectangle(pix1, boxleft, NULL); pixv2 = pixClipRectangle(pix1, boxright, NULL); pixv3 = pixQuadraticVShear(pixv1, L_WARP_TO_LEFT, ybendt, ybendb, L_INTERPOLATED, L_BRING_IN_WHITE); pixv4 = pixQuadraticVShear(pixv2, L_WARP_TO_RIGHT, ybendt, ybendb, L_INTERPOLATED, L_BRING_IN_WHITE); pix2 = pixCreate(w, h, 32); pixRasterop(pix2, 0, 0, w / 2, h, PIX_SRC, pixv3, 0, 0); pixRasterop(pix2, w / 2, 0, w - w / 2, h, PIX_SRC, pixv4, 0, 0); pixDestroy(&pixv1); pixDestroy(&pixv2); pixDestroy(&pixv3); pixDestroy(&pixv4); } else { pix2 = pixClone(pix1); } pixDestroy(&pix1); /* Split out the 3 components */ pixr = pixGetRGBComponent(pix2, COLOR_RED); pixg = pixGetRGBComponent(pix2, COLOR_GREEN); pixb = pixGetRGBComponent(pix2, COLOR_BLUE); pixDestroy(&pix2); /* The direction of the stereo disparity below is set * for the red filter to be over the left eye. If the red * filter is over the right eye, invert the horizontal shifts. */ if (redleft) { zbend = -zbend; zshiftt = -zshiftt; zshiftb = -zshiftb; } /* Shift the red pixels horizontally by an amount that * increases quadratically from the centerline. */ if (zbend == 0) { pixrs = pixClone(pixr); } else { pix1 = pixClipRectangle(pixr, boxleft, NULL); pix2 = pixClipRectangle(pixr, boxright, NULL); pix3 = pixStretchHorizontal(pix1, L_WARP_TO_LEFT, L_QUADRATIC_WARP, zbend, L_INTERPOLATED, L_BRING_IN_WHITE); pix4 = pixStretchHorizontal(pix2, L_WARP_TO_RIGHT, L_QUADRATIC_WARP, zbend, L_INTERPOLATED, L_BRING_IN_WHITE); pixrs = pixCreate(w, h, 8); pixRasterop(pixrs, 0, 0, w / 2, h, PIX_SRC, pix3, 0, 0); pixRasterop(pixrs, w / 2, 0, w - w / 2, h, PIX_SRC, pix4, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } /* Perform a combination of horizontal shift and shear of * red pixels. The causes the plane of the image to tilt and * also move forward or backward. */ if (zshiftt == 0 && zshiftb == 0) { pixrss = pixClone(pixrs); } else if (zshiftt == zshiftb) { pixrss = pixTranslate(NULL, pixrs, zshiftt, 0, L_BRING_IN_WHITE); } else { angle = (l_float32)(zshiftb - zshiftt) / L_MAX(1.0f, (l_float32)pixGetHeight(pixrs)); zshift = (zshiftt + zshiftb) / 2; pix1 = pixTranslate(NULL, pixrs, zshift, 0, L_BRING_IN_WHITE); pixrss = pixHShearLI(pix1, h / 2, angle, L_BRING_IN_WHITE); pixDestroy(&pix1); } /* Combine the unchanged cyan (g,b) image with the shifted red */ pixd = pixCreateRGBImage(pixrss, pixg, pixb); boxDestroy(&boxleft); boxDestroy(&boxright); pixDestroy(&pixrs); pixDestroy(&pixrss); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*----------------------------------------------------------------------* * Linear and quadratic horizontal stretching * *----------------------------------------------------------------------*/ /*! * \brief pixStretchHorizontal() * * \param[in] pixs 1, 8 or 32 bpp * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP * \param[in] hmax horizontal displacement at edge * \param[in] operation L_SAMPLED or L_INTERPOLATED * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched/compressed, or NULL on error * *
 * Notes:
 *      (1) If %hmax > 0, this is an increase in the coordinate value of
 *          pixels in pixd, relative to the same pixel in pixs.
 *      (2) If %dir == L_WARP_TO_LEFT, the pixels on the right edge of
 *          the image are not moved. So, for example, if %hmax > 0
 *          and %dir == L_WARP_TO_LEFT, the pixels in pixd are
 *          contracted toward the right edge of the image, relative
 *          to those in pixs.
 *      (3) If %type == L_LINEAR_WARP, the pixel positions are moved
 *          to the left or right by an amount that varies linearly with
 *          the horizontal location.
 *      (4) If %operation == L_SAMPLED, the dest pixels are taken from
 *          the nearest src pixel.  Otherwise, we use linear interpolation
 *          between pairs of sampled pixels.
 * 
*/ PIX * pixStretchHorizontal(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor) { l_int32 d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (operation != L_SAMPLED && operation != L_INTERPOLATED) return (PIX *)ERROR_PTR("invalid operation", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (d == 1 && operation == L_INTERPOLATED) { L_WARNING("Using sampling for 1 bpp\n", __func__); operation = L_INTERPOLATED; } if (operation == L_SAMPLED) return pixStretchHorizontalSampled(pixs, dir, type, hmax, incolor); else return pixStretchHorizontalLI(pixs, dir, type, hmax, incolor); } /*! * \brief pixStretchHorizontalSampled() * * \param[in] pixs 1, 8 or 32 bpp * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP * \param[in] hmax horizontal displacement at edge * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched/compressed, or NULL on error * *
 * Notes:
 *      (1) See pixStretchHorizontal() for details.
 * 
*/ PIX * pixStretchHorizontalSampled(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor) { l_int32 i, j, jd, w, wm, h, d, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; for (jd = 0; jd < w; jd++) { if (dir == L_WARP_TO_LEFT) { if (type == L_LINEAR_WARP) j = jd - (hmax * (wm - jd)) / wm; else /* L_QUADRATIC_WARP */ j = jd - (hmax * (wm - jd) * (wm - jd)) / (wm * wm); } else if (dir == L_WARP_TO_RIGHT) { if (type == L_LINEAR_WARP) j = jd - (hmax * jd) / wm; else /* L_QUADRATIC_WARP */ j = jd - (hmax * jd * jd) / (wm * wm); } if (j < 0 || j > w - 1) continue; switch (d) { case 1: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BIT(lines, j); if (val) SET_DATA_BIT(lined, jd); } break; case 8: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined, jd, val); } break; case 32: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; lined[jd] = lines[j]; } break; default: L_ERROR("invalid depth: %d\n", __func__, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*! * \brief pixStretchHorizontalLI() * * \param[in] pixs 1, 8 or 32 bpp * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP * \param[in] hmax horizontal displacement at edge * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched/compressed, or NULL on error * *
 * Notes:
 *      (1) See pixStretchHorizontal() for details.
 * 
*/ PIX * pixStretchHorizontalLI(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor) { l_int32 i, j, jd, jp, jf, w, wm, h, d, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); /* Standard linear interpolation, subdividing each pixel into 64 */ pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; for (jd = 0; jd < w; jd++) { if (dir == L_WARP_TO_LEFT) { if (type == L_LINEAR_WARP) j = 64 * jd - 64 * (hmax * (wm - jd)) / wm; else /* L_QUADRATIC_WARP */ j = 64 * jd - 64 * (hmax * (wm - jd) * (wm - jd)) / (wm * wm); } else if (dir == L_WARP_TO_RIGHT) { if (type == L_LINEAR_WARP) j = 64 * jd - 64 * (hmax * jd) / wm; else /* L_QUADRATIC_WARP */ j = 64 * jd - 64 * (hmax * jd * jd) / (wm * wm); } jp = j / 64; jf = j & 0x3f; if (jp < 0 || jp > wm) continue; switch (d) { case 8: if (jp < wm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = ((63 - jf) * GET_DATA_BYTE(lines, jp) + jf * GET_DATA_BYTE(lines, jp + 1) + 31) / 63; SET_DATA_BYTE(lined, jd, val); } } else { /* jp == wm */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BYTE(lines, jp); SET_DATA_BYTE(lined, jd, val); } } break; case 32: if (jp < wm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; word0 = *(lines + jp); word1 = *(lines + jp + 1); rval = ((63 - jf) * ((word0 >> L_RED_SHIFT) & 0xff) + jf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - jf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + jf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - jf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + jf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + jd); } } else { /* jp == wm */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; lined[jd] = lines[jp]; } } break; default: L_ERROR("invalid depth: %d\n", __func__, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*----------------------------------------------------------------------* * Quadratic vertical shear * *----------------------------------------------------------------------*/ /*! * \brief pixQuadraticVShear() * * \param[in] pixs 1, 8 or 32 bpp * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] vmaxt max vertical displacement at edge and at top * \param[in] vmaxb max vertical displacement at edge and at bottom * \param[in] operation L_SAMPLED or L_INTERPOLATED * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched, or NULL on error * *
 * Notes:
 *      (1) This gives a quadratic bending, upward or downward, as you
 *          move to the left or right.
 *      (2) If %dir == L_WARP_TO_LEFT, the right edge is unchanged, and
 *          the left edge pixels are moved maximally up or down.
 *      (3) Parameters %vmaxt and %vmaxb control the maximum amount of
 *          vertical pixel shear at the top and bottom, respectively.
 *          If %vmaxt > 0, the vertical displacement of pixels at the
 *          top is downward.  Likewise, if %vmaxb > 0, the vertical
 *          displacement of pixels at the bottom is downward.
 *      (4) If %operation == L_SAMPLED, the dest pixels are taken from
 *          the nearest src pixel.  Otherwise, we use linear interpolation
 *          between pairs of sampled pixels.
 *      (5) This is for quadratic shear.  For uniform (linear) shear,
 *          use the standard shear operators.
 * 
*/ PIX * pixQuadraticVShear(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor) { l_int32 w, h, d; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (operation != L_SAMPLED && operation != L_INTERPOLATED) return (PIX *)ERROR_PTR("invalid operation", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); if (operation == L_INTERPOLATED && d == 1) { L_WARNING("no interpolation for 1 bpp; using sampling\n", __func__); operation = L_SAMPLED; } if (operation == L_SAMPLED) return pixQuadraticVShearSampled(pixs, dir, vmaxt, vmaxb, incolor); else /* operation == L_INTERPOLATED */ return pixQuadraticVShearLI(pixs, dir, vmaxt, vmaxb, incolor); } /*! * \brief pixQuadraticVShearSampled() * * \param[in] pixs 1, 8 or 32 bpp * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] vmaxt max vertical displacement at edge and at top * \param[in] vmaxb max vertical displacement at edge and at bottom * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched, or NULL on error * *
 * Notes:
 *      (1) See pixQuadraticVShear() for details.
 * 
*/ PIX * pixQuadraticVShearSampled(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor) { l_int32 i, j, id, w, h, d, wm, hm, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; l_float32 delrowt, delrowb, denom1, denom2, dely; PIX *pixd; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; hm = h - 1; denom1 = 1.f / (l_float32)h; denom2 = 1.f / (l_float32)(wm * wm); for (j = 0; j < w; j++) { if (dir == L_WARP_TO_LEFT) { delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; } else if (dir == L_WARP_TO_RIGHT) { delrowt = (l_float32)(vmaxt * j * j) * denom2; delrowb = (l_float32)(vmaxb * j * j) * denom2; } switch (d) { case 1: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; val = GET_DATA_BIT(lines, j); if (val) SET_DATA_BIT(lined, j); } break; case 8: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined, j, val); } break; case 32: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; lined[j] = lines[j]; } break; default: L_ERROR("invalid depth: %d\n", __func__, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*! * \brief pixQuadraticVShearLI() * * \param[in] pixs 8 or 32 bpp, or colormapped * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT * \param[in] vmaxt max vertical displacement at edge and at top * \param[in] vmaxb max vertical displacement at edge and at bottom * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK * \return pixd stretched, or NULL on error * *
 * Notes:
 *      (1) See pixQuadraticVShear() for details.
 * 
*/ PIX * pixQuadraticVShearLI(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor) { l_int32 i, j, id, yp, yf, w, h, d, wm, hm, wpls, wpld; l_int32 val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 delrowt, delrowb, denom1, denom2, dely; PIX *pix, *pixd; PIXCMAP *cmap; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", __func__, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", __func__, NULL); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", __func__, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", __func__, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", __func__, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); /* Remove any existing colormap */ if (cmap) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); d = pixGetDepth(pix); if (d != 8 && d != 32) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid depth", __func__, NULL); } /* Standard linear interp: subdivide each pixel into 64 parts */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); wm = w - 1; hm = h - 1; denom1 = 1.0f / (l_float32)h; denom2 = 1.0f / (l_float32)(wm * wm); for (j = 0; j < w; j++) { if (dir == L_WARP_TO_LEFT) { delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; } else if (dir == L_WARP_TO_RIGHT) { delrowt = (l_float32)(vmaxt * j * j) * denom2; delrowb = (l_float32)(vmaxb * j * j) * denom2; } switch (d) { case 8: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = 64 * id - (l_int32)(64.0 * dely); yp = i / 64; yf = i & 63; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (yp < hm) { val = ((63 - yf) * GET_DATA_BYTE(lines, j) + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; } else { /* yp == hm */ val = GET_DATA_BYTE(lines, j); } SET_DATA_BYTE(lined, j, val); } break; case 32: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = 64 * id - (l_int32)(64.0 * dely); yp = i / 64; yf = i & 63; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (yp < hm) { word0 = *(lines + j); word1 = *(lines + wpls + j); rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + j); } else { /* yp == hm */ lined[j] = lines[j]; } } break; default: L_ERROR("invalid depth: %d\n", __func__, d); pixDestroy(&pix); pixDestroy(&pixd); return NULL; } } pixDestroy(&pix); return pixd; } /*----------------------------------------------------------------------* * Stereo from a pair of images * *----------------------------------------------------------------------*/ /*! * \brief pixStereoFromPair() * * \param[in] pix1 32 bpp rgb * \param[in] pix2 32 bpp rgb * \param[in] rwt, gwt, bwt weighting factors used for each component in pix1 to determine the output red channel * \return pixd stereo enhanced, or NULL on error * *
 * Notes:
 *      (1) pix1 and pix2 are a pair of stereo images, ideally taken
 *          concurrently in the same plane, with some lateral translation.
 *      (2) The output red channel is determined from %pix1.
 *          The output green and blue channels are taken from the green
 *          and blue channels, respectively, of %pix2.
 *      (3) The weights determine how much of each component in %pix1
 *          goes into the output red channel.  The sum of weights
 *          must be 1.0.  If it's not, we scale the weights to
 *          satisfy this criterion.
 *      (4) The most general pixel mapping allowed here is:
 *            rval = rwt * r1 + gwt * g1 + bwt * b1  (from pix1)
 *            gval = g2   (from pix2)
 *            bval = b2   (from pix2)
 *      (5) The simplest method is to use rwt = 1.0, gwt = 0.0, bwt = 0.0,
 *          but this causes unpleasant visual artifacts with red in the image.
 *          Use of green and blue from %pix1 in the red channel,
 *          instead of red, tends to fix that problem.
 * 
*/ PIX * pixStereoFromPair(PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, w, h, wpl1, wpl2, rval, gval, bval; l_uint32 word1, word2; l_uint32 *data1, *data2, *datad, *line1, *line2, *lined; l_float32 sum; PIX *pixd; if (!pix1 || !pix2) return (PIX *)ERROR_PTR("pix1, pix2 not both defined", __func__, NULL); if (pixGetDepth(pix1) != 32 || pixGetDepth(pix2) != 32) return (PIX *)ERROR_PTR("pix1, pix2 not both 32 bpp", __func__, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { rwt = DefaultRedWeight; gwt = DefaultGreenWeight; bwt = DefaultBlueWeight; } sum = rwt + gwt + bwt; if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", __func__); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } pixGetDimensions(pix1, &w, &h, NULL); pixd = pixCreateTemplate(pix1); data1 = pixGetData(pix1); data2 = pixGetData(pix2); datad = pixGetData(pixd); wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; lined = datad + i * wpl1; /* wpl1 works for pixd */ for (j = 0; j < w; j++) { word1 = *(line1 + j); word2 = *(line2 + j); rval = (l_int32)(rwt * ((word1 >> L_RED_SHIFT) & 0xff) + gwt * ((word1 >> L_GREEN_SHIFT) & 0xff) + bwt * ((word1 >> L_BLUE_SHIFT) & 0xff) + 0.5); gval = (word2 >> L_GREEN_SHIFT) & 0xff; bval = (word2 >> L_BLUE_SHIFT) & 0xff; composeRGBPixel(rval, gval, bval, lined + j); } } return pixd; } leptonica-1.86.0/src/watershed.c000066400000000000000000001116211506303110300164770ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file watershed.c *
 *
 *      Top-level
 *            L_WSHED         *wshedCreate()
 *            void             wshedDestroy()
 *            l_int32          wshedApply()
 *
 *      Helpers
 *            static l_int32   identifyWatershedBasin()
 *            static l_int32   mergeLookup()
 *            static l_int32   wshedGetHeight()
 *            static void      pushNewPixel()
 *            static void      popNewPixel()
 *            static void      pushWSPixel()
 *            static void      popWSPixel()
 *            static void      debugPrintLUT()
 *            static void      debugWshedMerge()
 *
 *      Output
 *            l_int32          wshedBasins()
 *            PIX             *wshedRenderFill()
 *            PIX             *wshedRenderColors()
 *
 *  The watershed function identifies the "catch basins" of the input
 *  8 bpp image, with respect to the specified seeds or "markers".
 *  The use is in segmentation, but the selection of the markers is
 *  critical to getting meaningful results.
 *
 *  How are the markers selected?  You can't simply use the local
 *  minima, because a typical image has sufficient noise so that
 *  a useful catch basin can easily have multiple local minima.  However
 *  they are selected, the question for the watershed function is
 *  how to handle local minima that are not markers.  The reason
 *  this is important is because of the algorithm used to find the
 *  watersheds, which is roughly like this:
 *
 *    (1) Identify the markers and the local minima, and enter them
 *        into a priority queue based on the pixel value.  Each marker
 *        is shrunk to a single pixel, if necessary, before the
 *        operation starts.
 *    (2) Feed the priority queue with neighbors of pixels that are
 *        popped off the queue.  Each of these queue pixels is labeled
 *        with the index value of its parent.
 *    (3) Each pixel is also labeled, in a 32-bit image, with the marker
 *        or local minimum index, from which it was originally derived.
 *    (4) There are actually 3 classes of labels: seeds, minima, and
 *        fillers.  The fillers are labels of regions that have already
 *        been identified as watersheds and are continuing to fill, for
 *        the purpose of finding higher watersheds.
 *    (5) When a pixel is popped that has already been labeled in the
 *        32-bit image and that label differs from the label of its
 *        parent (stored in the queue pixel), a boundary has been crossed.
 *        There are several cases:
 *         (a) Both parents are derived from markers but at least one
 *             is not deep enough to become a watershed.  Absorb the
 *             shallower basin into the deeper one, fixing the LUT to
 *             redirect the shallower index to the deeper one.
 *         (b) Both parents are derived from markers and both are deep
 *             enough.  Identify and save the watershed for each marker.
 *         (c) One parent was derived from a marker and the other from
 *             a minima: absorb the minima basin into the marker basin.
 *         (d) One parent was derived from a marker and the other is
 *             a filler: identify and save the watershed for the marker.
 *         (e) Both parents are derived from minima: merge them.
 *         (f) One parent is a filler and the other is derived from a
 *             minima: merge the minima into the filler.
 *    (6) The output of the watershed operation consists of:
 *         ~ a pixa of the basins
 *         ~ a pta of the markers
 *         ~ a numa of the watershed levels
 *
 *  Typical usage:
 *      L_WShed *wshed = wshedCreate(pixs, pixseed, mindepth, 0);
 *      wshedApply(wshed);
 *
 *      wshedBasins(wshed, &pixa, &nalevels);
 *        ... do something with pixa, nalevels ...
 *      pixaDestroy(&pixa);
 *      numaDestroy(&nalevels);
 *
 *      Pix *pixd = wshedRenderFill(wshed);
 *
 *      wshedDestroy(&wshed);
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_WATERSHED 0 #endif /* ~NO_CONSOLE_IO */ static const l_uint32 MAX_LABEL_VALUE = 0x7fffffff; /* largest l_int32 */ /*! New pixel coordinates */ struct L_NewPixel { l_int32 x; /*!< x coordinate */ l_int32 y; /*!< y coordinate */ }; typedef struct L_NewPixel L_NEWPIXEL; /*! Wartshed pixel */ struct L_WSPixel { l_float32 val; /*!< pixel value */ l_int32 x; /*!< x coordinate */ l_int32 y; /*!< y coordinate */ l_int32 index; /*!< label for set to which pixel belongs */ }; typedef struct L_WSPixel L_WSPIXEL; /* Static functions for obtaining bitmap of watersheds */ static void wshedSaveBasin(L_WSHED *wshed, l_int32 index, l_int32 level); static l_int32 identifyWatershedBasin(L_WSHED *wshed, l_int32 index, l_int32 level, BOX **pbox, PIX **ppixd); /* Static function for merging lut and backlink arrays */ static l_int32 mergeLookup(L_WSHED *wshed, l_int32 sindex, l_int32 dindex); /* Static function for finding the height of the current pixel above its seed or minima in the watershed. */ static l_int32 wshedGetHeight(L_WSHED *wshed, l_int32 val, l_int32 label, l_int32 *pheight); /* Static accessors for NewPixel on a queue */ static void pushNewPixel(L_QUEUE *lq, l_int32 x, l_int32 y, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy); static void popNewPixel(L_QUEUE *lq, l_int32 *px, l_int32 *py); /* Static accessors for WSPixel on a heap */ static void pushWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 val, l_int32 x, l_int32 y, l_int32 index); static void popWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 *pval, l_int32 *px, l_int32 *py, l_int32 *pindex); /* Static debug print output */ static void debugPrintLUT(l_int32 *lut, l_int32 size, l_int32 debug); static void debugWshedMerge(L_WSHED *wshed, char *descr, l_int32 x, l_int32 y, l_int32 label, l_int32 index); /*-----------------------------------------------------------------------* * Top-level watershed * *-----------------------------------------------------------------------*/ /*! * \brief wshedCreate() * * \param[in] pixs 8 bpp source * \param[in] pixm 1 bpp 'marker' seed * \param[in] mindepth minimum depth; anything less is not saved * \param[in] debugflag 1 for debug output * \return WShed, or NULL on error * *
 * Notes:
 *      (1) It is not necessary for the fg pixels in the seed image
 *          be at minima, or that they be isolated.  We extract a
 *          single pixel from each connected component, and a seed
 *          anywhere in a watershed will eventually label the watershed
 *          when the filling level reaches it.
 *      (2) Set mindepth to some value to ignore noise in pixs that
 *          can create small local minima.  Any watershed shallower
 *          than mindepth, even if it has a seed, will not be saved;
 *          It will either be incorporated in another watershed or
 *          eliminated.
 * 
*/ L_WSHED * wshedCreate(PIX *pixs, PIX *pixm, l_int32 mindepth, l_int32 debugflag) { l_int32 w, h; L_WSHED *wshed; if (!pixs) return (L_WSHED *)ERROR_PTR("pixs is not defined", __func__, NULL); if (pixGetDepth(pixs) != 8) return (L_WSHED *)ERROR_PTR("pixs is not 8 bpp", __func__, NULL); if (!pixm) return (L_WSHED *)ERROR_PTR("pixm is not defined", __func__, NULL); if (pixGetDepth(pixm) != 1) return (L_WSHED *)ERROR_PTR("pixm is not 1 bpp", __func__, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetWidth(pixm) != w || pixGetHeight(pixm) != h) return (L_WSHED *)ERROR_PTR("pixs/m sizes are unequal", __func__, NULL); if ((wshed = (L_WSHED *)LEPT_CALLOC(1, sizeof(L_WSHED))) == NULL) return (L_WSHED *)ERROR_PTR("wshed not made", __func__, NULL); wshed->pixs = pixClone(pixs); wshed->pixm = pixClone(pixm); wshed->mindepth = L_MAX(1, mindepth); wshed->pixlab = pixCreate(w, h, 32); pixSetAllArbitrary(wshed->pixlab, MAX_LABEL_VALUE); wshed->pixt = pixCreate(w, h, 1); wshed->lines8 = pixGetLinePtrs(pixs, NULL); wshed->linem1 = pixGetLinePtrs(pixm, NULL); wshed->linelab32 = pixGetLinePtrs(wshed->pixlab, NULL); wshed->linet1 = pixGetLinePtrs(wshed->pixt, NULL); wshed->debug = debugflag; return wshed; } /*! * \brief wshedDestroy() * * \param[in,out] pwshed will be set to null before returning * \return void */ void wshedDestroy(L_WSHED **pwshed) { l_int32 i; L_WSHED *wshed; if (pwshed == NULL) { L_WARNING("ptr address is null!\n", __func__); return; } if ((wshed = *pwshed) == NULL) return; pixDestroy(&wshed->pixs); pixDestroy(&wshed->pixm); pixDestroy(&wshed->pixlab); pixDestroy(&wshed->pixt); if (wshed->lines8) LEPT_FREE(wshed->lines8); if (wshed->linem1) LEPT_FREE(wshed->linem1); if (wshed->linelab32) LEPT_FREE(wshed->linelab32); if (wshed->linet1) LEPT_FREE(wshed->linet1); pixaDestroy(&wshed->pixad); ptaDestroy(&wshed->ptas); numaDestroy(&wshed->nash); numaDestroy(&wshed->nasi); numaDestroy(&wshed->namh); numaDestroy(&wshed->nalevels); if (wshed->lut) LEPT_FREE(wshed->lut); if (wshed->links) { for (i = 0; i < wshed->arraysize; i++) numaDestroy(&wshed->links[i]); LEPT_FREE(wshed->links); } LEPT_FREE(wshed); *pwshed = NULL; } /*! * \brief wshedApply() * * \param[in] wshed generated from wshedCreate() * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) N.B. This is buggy!  It seems to locate watersheds that are
 *          duplicates.  The watershed extraction after complete fill
 *          grabs some regions belonging to existing watersheds.
 *          See prog/watershedtest.c for testing.
 * 
*/ l_ok wshedApply(L_WSHED *wshed) { char two_new_watersheds[] = "Two new watersheds"; char seed_absorbed_into_seeded_basin[] = "Seed absorbed into seeded basin"; char one_new_watershed_label[] = "One new watershed (label)"; char one_new_watershed_index[] = "One new watershed (index)"; char minima_absorbed_into_seeded_basin[] = "Minima absorbed into seeded basin"; char minima_absorbed_by_filler_or_another[] = "Minima absorbed by filler or another"; l_int32 nseeds, nother, nboth, arraysize; l_int32 i, j, val, x, y, w, h, index, mindepth; l_int32 imin, imax, jmin, jmax, cindex, clabel, nindex; l_int32 hindex, hlabel, hmin, hmax, minhindex, maxhindex; l_int32 *lut; l_uint32 ulabel, uval; void **lines8, **linelab32; NUMA *nalut, *nalevels, *nash, *namh, *nasi; NUMA **links; L_HEAP *lh; PIX *pixmin, *pixsd; PIXA *pixad; L_STACK *rstack; PTA *ptas, *ptao; if (!wshed) return ERROR_INT("wshed not defined", __func__, 1); /* ------------------------------------------------------------ * * Initialize priority queue and pixlab with seeds and minima * * ------------------------------------------------------------ */ lh = lheapCreate(0, L_SORT_INCREASING); /* remove lowest values first */ rstack = lstackCreate(0); /* for reusing the WSPixels */ pixGetDimensions(wshed->pixs, &w, &h, NULL); lines8 = wshed->lines8; /* wshed owns this */ linelab32 = wshed->linelab32; /* ditto */ /* Identify seed (marker) pixels, 1 for each c.c. in pixm */ pixSelectMinInConnComp(wshed->pixs, wshed->pixm, &ptas, &nash); pixsd = pixGenerateFromPta(ptas, w, h); nseeds = ptaGetCount(ptas); for (i = 0; i < nseeds; i++) { ptaGetIPt(ptas, i, &x, &y); uval = GET_DATA_BYTE(lines8[y], x); pushWSPixel(lh, rstack, (l_int32)uval, x, y, i); } wshed->ptas = ptas; nasi = numaMakeConstant(1, nseeds); /* indicator array */ wshed->nasi = nasi; wshed->nash = nash; wshed->nseeds = nseeds; /* Identify minima that are not seeds. Use these 4 steps: * (1) Get the local minima, which can have components * of arbitrary size. This will be a clipping mask. * (2) Get the image of the actual seeds (pixsd) * (3) Remove all elements of the clipping mask that have a seed. * (4) Shrink each of the remaining elements of the minima mask * to a single pixel. */ pixLocalExtrema(wshed->pixs, 200, 0, &pixmin, NULL); pixRemoveSeededComponents(pixmin, pixsd, pixmin, 8, 2); pixSelectMinInConnComp(wshed->pixs, pixmin, &ptao, &namh); nother = ptaGetCount(ptao); for (i = 0; i < nother; i++) { ptaGetIPt(ptao, i, &x, &y); uval = GET_DATA_BYTE(lines8[y], x); pushWSPixel(lh, rstack, (l_int32)uval, x, y, nseeds + i); } wshed->namh = namh; /* ------------------------------------------------------------ * * Initialize merging lookup tables * * ------------------------------------------------------------ */ /* nalut should always give the current after-merging index. * links are effectively backpointers: they are numas associated with * a dest index of all indices in nalut that point to that index. */ mindepth = wshed->mindepth; nboth = nseeds + nother; arraysize = 2 * nboth; wshed->arraysize = arraysize; nalut = numaMakeSequence(0, 1, arraysize); lut = numaGetIArray(nalut); wshed->lut = lut; /* wshed owns this */ links = (NUMA **)LEPT_CALLOC(arraysize, sizeof(NUMA *)); wshed->links = links; /* wshed owns this */ nindex = nseeds + nother; /* the next unused index value */ /* ------------------------------------------------------------ * * Fill the basins, using the priority queue * * ------------------------------------------------------------ */ pixad = pixaCreate(nseeds); wshed->pixad = pixad; /* wshed owns this */ nalevels = numaCreate(nseeds); wshed->nalevels = nalevels; /* wshed owns this */ L_INFO("nseeds = %d, nother = %d\n", __func__, nseeds, nother); while (lheapGetCount(lh) > 0) { popWSPixel(lh, rstack, &val, &x, &y, &index); /* lept_stderr("x = %d, y = %d, index = %d\n", x, y, index); */ ulabel = GET_DATA_FOUR_BYTES(linelab32[y], x); if (ulabel == MAX_LABEL_VALUE) clabel = ulabel; else clabel = lut[ulabel]; cindex = lut[index]; if (clabel == cindex) continue; /* have already seen this one */ if (clabel == MAX_LABEL_VALUE) { /* new one; assign index and try to * propagate to all neighbors */ SET_DATA_FOUR_BYTES(linelab32[y], x, cindex); imin = L_MAX(0, y - 1); imax = L_MIN(h - 1, y + 1); jmin = L_MAX(0, x - 1); jmax = L_MIN(w - 1, x + 1); for (i = imin; i <= imax; i++) { for (j = jmin; j <= jmax; j++) { if (i == y && j == x) continue; uval = GET_DATA_BYTE(lines8[i], j); pushWSPixel(lh, rstack, (l_int32)uval, j, i, cindex); } } } else { /* pixel is already labeled (differently); must resolve */ /* If both indices are seeds, check if the min height is * greater than mindepth. If so, we have two new watersheds; * locate them and assign to both regions a new index * for further waterfill. If not, absorb the shallower * watershed into the deeper one and continue filling it. */ pixGetPixel(pixsd, x, y, &uval); if (clabel < nseeds && cindex < nseeds) { wshedGetHeight(wshed, val, clabel, &hlabel); wshedGetHeight(wshed, val, cindex, &hindex); hmin = L_MIN(hlabel, hindex); hmax = L_MAX(hlabel, hindex); if (hmin == hmax) { hmin = hlabel; hmax = hindex; } if (wshed->debug) { lept_stderr("clabel,hlabel = %d,%d\n", clabel, hlabel); lept_stderr("hmin = %d, hmax = %d\n", hmin, hmax); lept_stderr("cindex,hindex = %d,%d\n", cindex, hindex); if (hmin < mindepth) lept_stderr("Too shallow!\n"); } if (hmin >= mindepth) { debugWshedMerge(wshed, two_new_watersheds, x, y, clabel, cindex); wshedSaveBasin(wshed, cindex, val - 1); wshedSaveBasin(wshed, clabel, val - 1); numaSetValue(nasi, cindex, 0); numaSetValue(nasi, clabel, 0); if (wshed->debug) lept_stderr("nindex = %d\n", nindex); debugPrintLUT(lut, nindex, wshed->debug); mergeLookup(wshed, clabel, nindex); debugPrintLUT(lut, nindex, wshed->debug); mergeLookup(wshed, cindex, nindex); debugPrintLUT(lut, nindex, wshed->debug); nindex++; } else /* extraneous seed within seeded basin; absorb */ { debugWshedMerge(wshed, seed_absorbed_into_seeded_basin, x, y, clabel, cindex); } maxhindex = clabel; /* TODO: is this part of above 'else'? */ minhindex = cindex; if (hindex > hlabel) { maxhindex = cindex; minhindex = clabel; } mergeLookup(wshed, minhindex, maxhindex); } else if (clabel < nseeds && cindex >= nboth) { /* If one index is a seed and the other is a merge of * 2 watersheds, generate a single watershed. */ debugWshedMerge(wshed, one_new_watershed_label, x, y, clabel, cindex); wshedSaveBasin(wshed, clabel, val - 1); numaSetValue(nasi, clabel, 0); mergeLookup(wshed, clabel, cindex); } else if (cindex < nseeds && clabel >= nboth) { debugWshedMerge(wshed, one_new_watershed_index, x, y, clabel, cindex); wshedSaveBasin(wshed, cindex, val - 1); numaSetValue(nasi, cindex, 0); mergeLookup(wshed, cindex, clabel); } else if (clabel < nseeds) { /* cindex from minima; absorb */ /* If one index is a seed and the other is from a minimum, * merge the minimum wshed into the seed wshed. */ debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, x, y, clabel, cindex); mergeLookup(wshed, cindex, clabel); } else if (cindex < nseeds) { /* clabel from minima; absorb */ debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, x, y, clabel, cindex); mergeLookup(wshed, clabel, cindex); } else { /* If neither index is a seed, just merge */ debugWshedMerge(wshed, minima_absorbed_by_filler_or_another, x, y, clabel, cindex); mergeLookup(wshed, clabel, cindex); } } } #if 0 /* Use the indicator array to save any watersheds that fill * to the maximum value. This seems to screw things up! */ for (i = 0; i < nseeds; i++) { numaGetIValue(nasi, i, &ival); if (ival == 1) { wshedSaveBasin(wshed, lut[i], val - 1); numaSetValue(nasi, i, 0); } } #endif numaDestroy(&nalut); pixDestroy(&pixmin); pixDestroy(&pixsd); ptaDestroy(&ptao); lheapDestroy(&lh, TRUE); lstackDestroy(&rstack, TRUE); return 0; } /*-----------------------------------------------------------------------* * Helpers * *-----------------------------------------------------------------------*/ /*! * \brief wshedSaveBasin() * * \param[in] wshed * \param[in] index index of basin to be located * \param[in] level filling level reached at the time this function * is called * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This identifies a single watershed.  It does not change
 *          the LUT, which must be done subsequently.
 *      (2) The fill level of a basin is taken to be %level - 1.
 * 
*/ static void wshedSaveBasin(L_WSHED *wshed, l_int32 index, l_int32 level) { BOX *box; PIX *pix; if (!wshed) { L_ERROR("wshed not defined\n", __func__); return; } if (identifyWatershedBasin(wshed, index, level, &box, &pix) == 0) { pixaAddPix(wshed->pixad, pix, L_INSERT); pixaAddBox(wshed->pixad, box, L_INSERT); numaAddNumber(wshed->nalevels, level - 1); } } /*! * \brief identifyWatershedBasin() * * \param[in] wshed * \param[in] index index of basin to be located * \param[in] level of basin at point at which the two basins met * \param[out] pbox bounding box of basin * \param[out] ppixd pix of basin, cropped to its bounding box * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) This is a static function, so we assume pixlab, pixs and pixt
 *          exist and are the same size.
 *      (2) It selects all pixels that have the label %index in pixlab
 *          and that have a value in pixs that is less than %level.
 *      (3) It is used whenever two seeded basins meet (typically at a saddle),
 *          or when one seeded basin meets a 'filler'.  All identified
 *          basins are saved as a watershed.
 * 
*/ static l_int32 identifyWatershedBasin(L_WSHED *wshed, l_int32 index, l_int32 level, BOX **pbox, PIX **ppixd) { l_int32 imin, imax, jmin, jmax, minx, miny, maxx, maxy; l_int32 bw, bh, i, j, w, h, x, y; l_int32 *lut; l_uint32 label, bval, lval; void **lines8, **linelab32, **linet1; BOX *box; PIX *pixs, *pixt, *pixd; L_QUEUE *lq; if (!pbox) return ERROR_INT("&box not defined", __func__, 1); *pbox = NULL; if (!ppixd) return ERROR_INT("&pixd not defined", __func__, 1); *ppixd = NULL; if (!wshed) return ERROR_INT("wshed not defined", __func__, 1); /* Make a queue and an auxiliary stack */ lq = lqueueCreate(0); lq->stack = lstackCreate(0); pixs = wshed->pixs; pixt = wshed->pixt; lines8 = wshed->lines8; linelab32 = wshed->linelab32; linet1 = wshed->linet1; lut = wshed->lut; pixGetDimensions(pixs, &w, &h, NULL); /* Prime the queue with the seed pixel for this watershed. */ minx = miny = 1000000; maxx = maxy = 0; ptaGetIPt(wshed->ptas, index, &x, &y); pixSetPixel(pixt, x, y, 1); pushNewPixel(lq, x, y, &minx, &maxx, &miny, &maxy); if (wshed->debug) lept_stderr("prime: (x,y) = (%d, %d)\n", x, y); /* Each pixel in a spreading breadth-first search is inspected. * It is accepted as part of this watershed, and pushed on * the search queue, if: * (1) It has a label value equal to %index * (2) The pixel value is less than %level, the overflow * height at which the two basins join. * (3) It has not yet been seen in this search. */ while (lqueueGetCount(lq) > 0) { popNewPixel(lq, &x, &y); imin = L_MAX(0, y - 1); imax = L_MIN(h - 1, y + 1); jmin = L_MAX(0, x - 1); jmax = L_MIN(w - 1, x + 1); for (i = imin; i <= imax; i++) { for (j = jmin; j <= jmax; j++) { if (j == x && i == y) continue; /* parent */ label = GET_DATA_FOUR_BYTES(linelab32[i], j); if (label == MAX_LABEL_VALUE || lut[label] != index) continue; bval = GET_DATA_BIT(linet1[i], j); if (bval == 1) continue; /* already seen */ lval = GET_DATA_BYTE(lines8[i], j); if (lval >= level) continue; /* too high */ SET_DATA_BIT(linet1[i], j); pushNewPixel(lq, j, i, &minx, &maxx, &miny, &maxy); } } } /* Extract the box and pix, and clear pixt */ bw = maxx - minx + 1; bh = maxy - miny + 1; box = boxCreate(minx, miny, bw, bh); pixd = pixClipRectangle(pixt, box, NULL); pixRasterop(pixt, minx, miny, bw, bh, PIX_SRC ^ PIX_DST, pixd, 0, 0); *pbox = box; *ppixd = pixd; lqueueDestroy(&lq, 1); return 0; } /*! * \brief mergeLookup() * * \param[in] wshed * \param[in] sindex primary index being changed in the merge * \param[in] dindex index that %sindex will point to after the merge * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The links are a sparse array of Numas showing current back-links.
 *          The lut gives the current index (of the seed or the minima
 *          for the wshed  in which it is located.
 *      (2) Think of each entry in the lut.  There are two types:
 *             owner:     lut[index] = index
 *             redirect:  lut[index] != index
 *      (3) This is called each time a merge occurs.  It puts the lut
 *          and backlinks in a canonical form after the merge, where
 *          all entries in the lut point to the current "owner", which
 *          has all backlinks.  That is, every "redirect" in the lut
 *          points to an "owner".  The lut always gives the index of
 *          the current owner.
 * 
*/ static l_int32 mergeLookup(L_WSHED *wshed, l_int32 sindex, l_int32 dindex) { l_int32 i, n, size, index; l_int32 *lut; NUMA *na; NUMA **links; if (!wshed) return ERROR_INT("wshed not defined", __func__, 1); size = wshed->arraysize; if (sindex < 0 || sindex >= size) return ERROR_INT("invalid sindex", __func__, 1); if (dindex < 0 || dindex >= size) return ERROR_INT("invalid dindex", __func__, 1); /* Redirect links in the lut */ n = 0; links = wshed->links; lut = wshed->lut; if ((na = links[sindex]) != NULL) { n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &index); lut[index] = dindex; } } lut[sindex] = dindex; /* Shift the backlink arrays from sindex to dindex. * sindex should have no backlinks because all entries in the * lut that were previously pointing to it have been redirected * to dindex. */ if (!links[dindex]) links[dindex] = numaCreate(n); numaJoin(links[dindex], links[sindex], 0, -1); numaAddNumber(links[dindex], sindex); numaDestroy(&links[sindex]); return 0; } /*! * \brief wshedGetHeight() * * \param[in] wshed array of current indices * \param[in] val value of current pixel popped off queue * \param[in] label of pixel or 32 bpp label image * \param[out] pheight height of current value from seed * or minimum of watershed * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) It is only necessary to find the height for a watershed
 *          that is indexed by a seed or a minima.  This function should
 *          not be called on a finished watershed (that continues to fill).
 * 
*/ static l_int32 wshedGetHeight(L_WSHED *wshed, l_int32 val, l_int32 label, l_int32 *pheight) { l_int32 minval; if (!pheight) return ERROR_INT("&height not defined", __func__, 1); *pheight = 0; if (!wshed) return ERROR_INT("wshed not defined", __func__, 1); if (label < wshed->nseeds) numaGetIValue(wshed->nash, label, &minval); else if (label < wshed->nseeds + wshed->nother) numaGetIValue(wshed->namh, label, &minval); else return ERROR_INT("finished watershed; should not call", __func__, 1); *pheight = val - minval; return 0; } /* * \brief pushNewPixel() * * \param[in] lqueue * \param[in] x, y pixel coordinates * \param[out] pminx, pmaxx, pminy, pmaxy bounding box update * \return void * *
 * Notes:
 *      (1) This is a wrapper for adding a NewPixel to a queue, which
 *          updates the bounding box for all pixels on that queue and
 *          uses the storage stack to retrieve a NewPixel.
 * 
*/ static void pushNewPixel(L_QUEUE *lq, l_int32 x, l_int32 y, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy) { L_NEWPIXEL *np; if (!lq) { L_ERROR("queue not defined\n", __func__); return; } /* Adjust bounding box */ *pminx = L_MIN(*pminx, x); *pmaxx = L_MAX(*pmaxx, x); *pminy = L_MIN(*pminy, y); *pmaxy = L_MAX(*pmaxy, y); /* Get a newpixel to use */ if (lstackGetCount(lq->stack) > 0) np = (L_NEWPIXEL *)lstackRemove(lq->stack); else np = (L_NEWPIXEL *)LEPT_CALLOC(1, sizeof(L_NEWPIXEL)); np->x = x; np->y = y; lqueueAdd(lq, np); } /* * \brief popNewPixel() * * \param[in] lqueue * \param[out] px, py pixel coordinates * \return void * *
 * Notes:
 *      (1) This is a wrapper for removing a NewPixel from a queue,
 *          which returns the pixel coordinates and saves the NewPixel
 *          on the storage stack.
 * 
*/ static void popNewPixel(L_QUEUE *lq, l_int32 *px, l_int32 *py) { L_NEWPIXEL *np; if (!lq) { L_ERROR("lqueue not defined\n", __func__); return; } if ((np = (L_NEWPIXEL *)lqueueRemove(lq)) == NULL) return; *px = np->x; *py = np->y; lstackAdd(lq->stack, np); /* save for re-use */ } /* * \brief pushWSPixel() * * \param[in] lh priority queue * \param[in] stack of reusable WSPixels * \param[in] val pixel value: used for ordering the heap * \param[in] x, y pixel coordinates * \param[in] index label for set to which pixel belongs * \return void * *
 * Notes:
 *      (1) This is a wrapper for adding a WSPixel to a heap.  It
 *          uses the storage stack to retrieve a WSPixel.
 * 
*/ static void pushWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 val, l_int32 x, l_int32 y, l_int32 index) { L_WSPIXEL *wsp; if (!lh) { L_ERROR("heap not defined\n", __func__); return; } if (!stack) { L_ERROR("stack not defined\n", __func__); return; } /* Get a wspixel to use */ if (lstackGetCount(stack) > 0) wsp = (L_WSPIXEL *)lstackRemove(stack); else wsp = (L_WSPIXEL *)LEPT_CALLOC(1, sizeof(L_WSPIXEL)); wsp->val = (l_float32)val; wsp->x = x; wsp->y = y; wsp->index = index; lheapAdd(lh, wsp); } /* * \brief popWSPixel() * * \param[in] lh priority queue * \param[in] stack of reusable WSPixels * \param[out] pval pixel value * \param[out] px, py pixel coordinates * \param[out] pindex label for set to which pixel belongs * \return void * *
 * Notes:
 *      (1) This is a wrapper for removing a WSPixel from a heap,
 *          which returns the WSPixel data and saves the WSPixel
 *          on the storage stack.
 * 
*/ static void popWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 *pval, l_int32 *px, l_int32 *py, l_int32 *pindex) { L_WSPIXEL *wsp; if (!lh) { L_ERROR("lheap not defined\n", __func__); return; } if (!stack) { L_ERROR("stack not defined\n", __func__); return; } if (!pval || !px || !py || !pindex) { L_ERROR("data can't be returned\n", __func__); return; } if ((wsp = (L_WSPIXEL *)lheapRemove(lh)) == NULL) return; *pval = (l_int32)wsp->val; *px = wsp->x; *py = wsp->y; *pindex = wsp->index; lstackAdd(stack, wsp); /* save for re-use */ } static void debugPrintLUT(l_int32 *lut, l_int32 size, l_int32 debug) { l_int32 i; if (!debug) return; lept_stderr("lut: "); for (i = 0; i < size; i++) lept_stderr( "%d ", lut[i]); lept_stderr("\n"); } static void debugWshedMerge(L_WSHED *wshed, char *descr, l_int32 x, l_int32 y, l_int32 label, l_int32 index) { if (!wshed || (wshed->debug == 0)) return; lept_stderr("%s:\n", descr); lept_stderr(" (x, y) = (%d, %d)\n", x, y); lept_stderr(" clabel = %d, cindex = %d\n", label, index); } /*-----------------------------------------------------------------------* * Output * *-----------------------------------------------------------------------*/ /*! * \brief wshedBasins() * * \param[in] wshed * \param[out] ppixa [optional] mask of watershed basins * \param[out] pnalevels [optional] watershed levels * \return 0 if OK, 1 on error */ l_ok wshedBasins(L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels) { if (!wshed) return ERROR_INT("wshed not defined", __func__, 1); if (ppixa) *ppixa = pixaCopy(wshed->pixad, L_CLONE); if (pnalevels) *pnalevels = numaClone(wshed->nalevels); return 0; } /*! * \brief wshedRenderFill() * * \param[in] wshed * \return pixd initial image with all basins filled, or NULL on error */ PIX * wshedRenderFill(L_WSHED *wshed) { l_int32 i, n, level, bx, by; NUMA *na; PIX *pix, *pixd; PIXA *pixa; if (!wshed) return (PIX *)ERROR_PTR("wshed not defined", __func__, NULL); wshedBasins(wshed, &pixa, &na); pixd = pixCopy(NULL, wshed->pixs); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixaGetBoxGeometry(pixa, i, &bx, &by, NULL, NULL); numaGetIValue(na, i, &level); pixPaintThroughMask(pixd, pix, bx, by, level); pixDestroy(&pix); } pixaDestroy(&pixa); numaDestroy(&na); return pixd; } /*! * \brief wshedRenderColors() * * \param[in] wshed * \return pixd initial image with all basins filled, or null on error */ PIX * wshedRenderColors(L_WSHED *wshed) { l_int32 w, h; PIX *pixg, *pixt, *pixc, *pixm, *pixd; PIXA *pixa; if (!wshed) return (PIX *)ERROR_PTR("wshed not defined", __func__, NULL); wshedBasins(wshed, &pixa, NULL); pixg = pixCopy(NULL, wshed->pixs); pixGetDimensions(wshed->pixs, &w, &h, NULL); pixd = pixConvertTo32(pixg); pixt = pixaDisplayRandomCmap(pixa, w, h); pixc = pixConvertTo32(pixt); pixm = pixaDisplay(pixa, w, h); pixCombineMasked(pixd, pixc, pixm); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixc); pixDestroy(&pixm); pixaDestroy(&pixa); return pixd; } leptonica-1.86.0/src/watershed.h000066400000000000000000000067121506303110300165100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ #ifndef LEPTONICA_WATERSHED_H #define LEPTONICA_WATERSHED_H /*! * \file watershed.h * * Simple data structure to hold watershed data. * All data here is owned by the L_WShed and must be freed. */ /*! Simple data structure to hold watershed data. */ struct L_WShed { struct Pix *pixs; /*!< clone of input 8 bpp pixs */ struct Pix *pixm; /*!< clone of input 1 bpp seed (marker) pixm */ l_int32 mindepth; /*!< minimum depth allowed for a watershed */ struct Pix *pixlab; /*!< 16 bpp label pix */ struct Pix *pixt; /*!< scratch pix for computing wshed regions */ void **lines8; /*!< line ptrs for pixs */ void **linem1; /*!< line ptrs for pixm */ void **linelab32; /*!< line ptrs for pixlab */ void **linet1; /*!< line ptrs for pixt */ struct Pixa *pixad; /*!< result: 1 bpp pixa of watersheds */ struct Pta *ptas; /*!< pta of initial seed pixels */ struct Numa *nasi; /*!< numa of seed indicators; 0 if completed */ struct Numa *nash; /*!< numa of initial seed heights */ struct Numa *namh; /*!< numa of initial minima heights */ struct Numa *nalevels; /*!< result: numa of watershed levels */ l_int32 nseeds; /*!< number of seeds (markers) */ l_int32 nother; /*!< number of minima different from seeds */ l_int32 *lut; /*!< lut for pixel indices */ struct Numa **links; /*!< back-links into lut, for updates */ l_int32 arraysize; /*!< size of links array */ l_int32 debug; /*!< set to 1 for debug output */ }; typedef struct L_WShed L_WSHED; #endif /* LEPTONICA_WATERSHED_H */ leptonica-1.86.0/src/webpanimio.c000066400000000000000000000260121506303110300166420ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file webpanimio.c *
 *
 *    Writing animated WebP
 *          l_int32          pixaWriteWebPAnim()
 *          l_int32          pixaWriteStreamWebPAnim()
 *          l_int32          pixaWriteMemWebPAnim()
 *
 * This shim was written in 2013, shortly after Google introduced animated webp.
 * However, even though animated webp is better than gifanim by every
 * technical measure (e.g., flexibility, compression), animated webp
 * is still not well supported, even with Google apps like gmail!
 *
 * To convert from gifanim to animated webp:
 *  (1) use ImageMagick to make a set of png files:
 *      convert infile.gif -coalesce outroot_%03d.png
 *  (2) read these files into a pixa, using
 *      pixaReadFiles()
 *  (3) write out the animated webp, selecting the duration and using
 *      pixaWriteWebPAnim()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* -----------------------------------------------*/ #if HAVE_LIBWEBP_ANIM /* defined in environ.h */ /* -----------------------------------------------*/ #include "webp/encode.h" #include "webp/mux.h" /*---------------------------------------------------------------------* * Writing animated WebP * *---------------------------------------------------------------------*/ /*! * \brief pixaWriteWebPAnim() * * \param[in] filename * \param[in] pixa with images of all depths; cmap OK * \param[in] loopcount [0 for infinite] * \param[in] duration in ms, for each image * \param[in] quality 0 - 100 for lossy; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Special top-level function allowing specification of quality.
 * 
*/ l_ok pixaWriteWebPAnim(const char *filename, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { l_int32 ret; FILE *fp; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixaWriteStreamWebPAnim(fp, pixa, loopcount, duration, quality, lossless); fclose(fp); if (ret) return ERROR_INT_1("pixs not compressed to stream", filename, __func__, 1); return 0; } /*! * \brief pixaWriteStreamWebPAnim() * * \param[in] fp file stream * \param[in] pixa with images of all depths; cmap OK * \param[in] loopcount [0 for infinite] * \param[in] duration in ms, for each image * \param[in] quality 0 - 100 for lossy; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteMemWebP() for details.
 *      (2) Use 'free', and not leptonica's 'LEPT_FREE', for all heap data
 *          that is returned from the WebP library.
 * 
*/ l_ok pixaWriteStreamWebPAnim(FILE *fp, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { l_uint8 *filedata; size_t filebytes, nbytes; if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); filedata = NULL; pixaWriteMemWebPAnim(&filedata, &filebytes, pixa, loopcount, duration, quality, lossless); rewind(fp); if (!filedata) return ERROR_INT("filedata not made", __func__, 1); nbytes = fwrite(filedata, 1, filebytes, fp); free(filedata); if (nbytes != filebytes) return ERROR_INT("Write error", __func__, 1); return 0; } /*! * \brief pixaWriteMemWebPAnim() * * \param[out] pencdata webp encoded data of pixs * \param[out] pencsize size of webp encoded data * \param[in] pixa with images of any depth, cmapped OK * \param[in] loopcount [0 for infinite] * \param[in] duration in ms, for each image * \param[in] quality 0 - 100 for lossy; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteMemWebP() for details of webp encoding of images.
 * 
*/ l_ok pixaWriteMemWebPAnim(l_uint8 **pencdata, size_t *pencsize, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { l_int32 i, n, same, w, h, wpl, ret, ret_webp; l_uint8 *data; PIX *pix1, *pix2; WebPAnimEncoder *enc; WebPAnimEncoderOptions enc_options; WebPConfig config; WebPData webp_data; WebPMux *mux = NULL; WebPMuxAnimParams newparams; WebPPicture frame; if (!pencdata) return ERROR_INT("&encdata not defined", __func__, 1); *pencdata = NULL; if (!pencsize) return ERROR_INT("&encsize not defined", __func__, 1); *pencsize = 0; if (!pixa) return ERROR_INT("&pixa not defined", __func__, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("no images in pixa", __func__, 1); if (loopcount < 0) loopcount = 0; if (lossless == 0 && (quality < 0 || quality > 100)) return ERROR_INT("quality not in [0 ... 100]", __func__, 1); pixaVerifyDimensions(pixa, &same, &w, &h); if (!same) return ERROR_INT("sizes of all pix are not the same", __func__, 1); /* Set up the encoder */ if (!WebPAnimEncoderOptionsInit(&enc_options)) return ERROR_INT("cannot initialize WebP encoder options", __func__, 1); if (!WebPConfigInit(&config)) return ERROR_INT("cannot initialize WebP config", __func__, 1); config.lossless = lossless; config.quality = quality; if ((enc = WebPAnimEncoderNew(w, h, &enc_options)) == NULL) return ERROR_INT("cannot create WebP encoder", __func__, 1); for (i = 0; i < n; i++) { /* Make a frame for each image. Convert the pix to RGBA with * an opaque alpha layer, and put the raster data in the frame. */ if (!WebPPictureInit(&frame)) { WebPAnimEncoderDelete(enc); return ERROR_INT("cannot initialize WebP picture", __func__, 1); } pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pixSetComponentArbitrary(pix2, L_ALPHA_CHANNEL, 255); pixEndianByteSwap(pix2); data = (l_uint8 *)pixGetData(pix2); wpl = pixGetWpl(pix2); frame.width = w; frame.height = h; ret_webp = WebPPictureImportRGBA(&frame, data, 4 * wpl); pixDestroy(&pix1); pixDestroy(&pix2); if (!ret_webp) { WebPAnimEncoderDelete(enc); return ERROR_INT("cannot import RGBA picture", __func__, 1); } /* Add the frame data to the encoder, and clear its memory */ ret_webp = WebPAnimEncoderAdd(enc, &frame, duration * i, &config); WebPPictureFree(&frame); if (!ret_webp) { WebPAnimEncoderDelete(enc); return ERROR_INT("cannot add frame to animation", __func__, 1); } } /* Add a blank frame */ if (!WebPAnimEncoderAdd(enc, NULL, duration * i, NULL)) { WebPAnimEncoderDelete(enc); return ERROR_INT("blank frame not added to animation", __func__, 1); } /* Encode the data */ ret_webp = WebPAnimEncoderAssemble(enc, &webp_data); WebPAnimEncoderDelete(enc); if (!ret_webp) return ERROR_INT("cannot assemble animation", __func__, 1); /* Set the loopcount if requested. Note that when you make a mux, * it imports the webp_data that was previously made, including * the webp encoded images. Before you re-export that data using * WebPMuxAssemble(), free the heap data in webp_data. There is an * example for setting the loop count in the webp distribution; * see gif2webp.c. */ if (loopcount > 0) { mux = WebPMuxCreate(&webp_data, 1); if (!mux) { L_ERROR("could not re-mux to add loop count\n", __func__); } else { ret = WebPMuxGetAnimationParams(mux, &newparams); if (ret != WEBP_MUX_OK) { L_ERROR("failed to get loop count\n", __func__); } else { newparams.loop_count = loopcount; ret = WebPMuxSetAnimationParams(mux, &newparams); if (ret != WEBP_MUX_OK) L_ERROR("failed to set loop count\n", __func__); } WebPDataClear(&webp_data); if (WebPMuxAssemble(mux, &webp_data) != WEBP_MUX_OK) L_ERROR("failed to assemble in the WebP muxer\n", __func__); WebPMuxDelete(mux); } } *pencdata = (l_uint8 *)webp_data.bytes; *pencsize = webp_data.size; L_INFO("data size = %zu\n", __func__, webp_data.size); return 0; } /* --------------------------------------------*/ #endif /* HAVE_LIBWEBP_ANIM */ /* --------------------------------------------*/ leptonica-1.86.0/src/webpanimiostub.c000066400000000000000000000055051506303110300175440ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file webpanimiostub.c *
 *
 *     Stubs for webpanimio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* -----------------------------------------------*/ #if !HAVE_LIBWEBP_ANIM /* defined in environ.h */ /* -----------------------------------------------*/ l_ok pixaWriteWebPAnim(const char *filename, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixaWriteStreamWebPAnim(FILE *fp, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixaWriteMemWebPAnim(l_uint8 **pencdata, size_t *pencsize, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBWEBP_ANIM */ /* --------------------------------------------*/ leptonica-1.86.0/src/webpio.c000066400000000000000000000320211506303110300157720ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file webpio.c *
 *
 *    Reading WebP
 *          PIX             *pixReadStreamWebP()
 *          PIX             *pixReadMemWebP()
 *
 *    Reading WebP header
 *          l_int32          readHeaderWebP()
 *          l_int32          readHeaderMemWebP()
 *
 *    Writing WebP
 *          l_int32          pixWriteWebP()  [ special top level ]
 *          l_int32          pixWriteStreamWebP()
 *          l_int32          pixWriteMemWebP()
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if HAVE_LIBWEBP /* defined in environ.h */ /* --------------------------------------------*/ #include "webp/decode.h" #include "webp/encode.h" /*---------------------------------------------------------------------* * Reading WebP * *---------------------------------------------------------------------*/ /*! * \brief pixReadStreamWebP() * * \param[in] fp file stream corresponding to WebP image * \return pix 32 bpp, or NULL on error */ PIX * pixReadStreamWebP(FILE *fp) { l_uint8 *filedata; size_t filesize; PIX *pix; if (!fp) return (PIX *)ERROR_PTR("fp not defined", __func__, NULL); /* Read data from file and decode into Y,U,V arrays */ rewind(fp); if ((filedata = l_binaryReadStream(fp, &filesize)) == NULL) return (PIX *)ERROR_PTR("filedata not read", __func__, NULL); pix = pixReadMemWebP(filedata, filesize); LEPT_FREE(filedata); return pix; } /*! * \brief pixReadMemWebP() * * \param[in] filedata webp compressed data in memory * \param[in] filesize number of bytes in data * \return pix 32 bpp, or NULL on error * *
 * Notes:
 *      (1) When the encoded data only has 3 channels (no alpha),
 *          WebPDecodeRGBAInto() generates a raster of 32-bit pixels, with
 *          the alpha channel set to opaque (255).
 *      (2) We don't need to use the gnu runtime functions like fmemopen()
 *          for redirecting data from a stream to memory, because
 *          the webp library has been written with memory-to-memory
 *          functions at the lowest level (which is good!).  And, in
 *          any event, fmemopen() doesn't work with l_binaryReadStream().
 * 
*/ PIX * pixReadMemWebP(const l_uint8 *filedata, size_t filesize) { l_uint8 *out = NULL; l_int32 w, h, has_alpha, wpl, stride; l_uint32 *data; size_t size; PIX *pix; WebPBitstreamFeatures features; if (!filedata) return (PIX *)ERROR_PTR("filedata not defined", __func__, NULL); if (WebPGetFeatures(filedata, filesize, &features)) return (PIX *)ERROR_PTR("Invalid WebP file", __func__, NULL); w = features.width; h = features.height; has_alpha = features.has_alpha; /* Write from compressed Y,U,V arrays to pix raster data */ if ((pix = pixCreate(w, h, 32)) == NULL) { lept_stderr("Allocation failure for pix: w = %d, h = %d\n", w, h); return (PIX *)ERROR_PTR("pix not made", __func__, NULL); } pixSetInputFormat(pix, IFF_WEBP); if (has_alpha) pixSetSpp(pix, 4); data = pixGetData(pix); wpl = pixGetWpl(pix); stride = wpl * 4; size = (size_t)stride * h; out = WebPDecodeRGBAInto(filedata, filesize, (uint8_t *)data, size, stride); if (out == NULL) { /* error: out should also point to data */ pixDestroy(&pix); return (PIX *)ERROR_PTR("WebP decode failed", __func__, NULL); } /* The WebP API expects data in RGBA order. The pix stores * in host-dependent order with R as the MSB and A as the LSB. * On little-endian machines, the bytes in the word must * be swapped; e.g., R goes from byte 0 (LSB) to byte 3 (MSB). * No swapping is necessary for big-endians. */ pixEndianByteSwap(pix); return pix; } /*! * \brief readHeaderWebP() * * \param[in] filename * \param[out] pw width * \param[out] ph height * \param[out] pspp spp (3 or 4) * \return 0 if OK, 1 on error */ l_ok readHeaderWebP(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { l_uint8 data[100]; /* expect size info within the first 50 bytes or so */ l_int32 nbytes, bytesread; size_t filesize; FILE *fp; if (!pw || !ph || !pspp) return ERROR_INT("input ptr(s) not defined", __func__, 1); *pw = *ph = *pspp = 0; if (!filename) return ERROR_INT("filename not defined", __func__, 1); /* Read no more than 100 bytes from the file */ if ((filesize = nbytesInFile(filename)) == 0) return ERROR_INT_1("no file size found", filename, __func__, 1); if (filesize < 100) L_WARNING("very small webp file: %s\n", __func__, filename); nbytes = L_MIN(filesize, 100); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT_1("image file not found", filename, __func__, 1); bytesread = fread(data, 1, nbytes, fp); fclose(fp); if (bytesread != nbytes) return ERROR_INT("failed to read requested data", __func__, 1); return readHeaderMemWebP(data, nbytes, pw, ph, pspp); } /*! * \brief readHeaderMemWebP() * * \param[in] data * \param[in] size 100 bytes is sufficient * \param[out] pw width * \param[out] ph height * \param[out] pspp spp (3 or 4) * \return 0 if OK, 1 on error */ l_ok readHeaderMemWebP(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { WebPBitstreamFeatures features; if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (!data) return ERROR_INT("data not defined", __func__, 1); if (!pw || !ph || !pspp) return ERROR_INT("input ptr(s) not defined", __func__, 1); if (WebPGetFeatures(data, (l_int32)size, &features)) return ERROR_INT("invalid WebP file", __func__, 1); *pw = features.width; *ph = features.height; *pspp = (features.has_alpha) ? 4 : 3; return 0; } /*---------------------------------------------------------------------* * Writing WebP * *---------------------------------------------------------------------*/ /*! * \brief pixWriteWebP() * * \param[in] filename * \param[in] pixs * \param[in] quality 0 - 100; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Special top-level function allowing specification of quality.
 * 
*/ l_ok pixWriteWebP(const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless) { l_int32 ret; FILE *fp; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); if (!filename) return ERROR_INT("filename not defined", __func__, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT_1("stream not opened", filename, __func__, 1); ret = pixWriteStreamWebP(fp, pixs, quality, lossless); fclose(fp); if (ret) return ERROR_INT_1("pixs not compressed to stream", filename, __func__, 1); return 0; } /*! * \brief pixWriteStreampWebP() * * \param[in] fp file stream * \param[in] pixs all depths * \param[in] quality 0 - 100; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) See pixWriteMemWebP() for details.
 *      (2) Use 'free', and not leptonica's 'LEPT_FREE', for all heap data
 *          that is returned from the WebP library.
 * 
*/ l_ok pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless) { l_uint8 *filedata; size_t filebytes, nbytes; if (!fp) return ERROR_INT("stream not open", __func__, 1); if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); pixSetPadBits(pixs, 0); pixWriteMemWebP(&filedata, &filebytes, pixs, quality, lossless); rewind(fp); nbytes = fwrite(filedata, 1, filebytes, fp); free(filedata); if (nbytes != filebytes) return ERROR_INT("Write error", __func__, 1); return 0; } /*! * \brief pixWriteMemWebP() * * \param[out] pencdata webp encoded data of pixs * \param[out] pencsize size of webp encoded data * \param[in] pixs any depth, cmapped OK * \param[in] quality 0 - 100; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) Lossless and lossy encoding are entirely different in webp.
 *          %quality applies to lossy, and is ignored for lossless.
 *      (2) The input image is converted to RGB if necessary.  If spp == 3,
 *          we set the alpha channel to fully opaque (255), and
 *          WebPEncodeRGBA() then removes the alpha chunk when encoding,
 *          setting the internal header field has_alpha to 0.
 * 
*/ l_ok pixWriteMemWebP(l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless) { l_int32 w, h, d, wpl, stride; l_uint32 *data; PIX *pix1, *pix2; if (!pencdata) return ERROR_INT("&encdata not defined", __func__, 1); *pencdata = NULL; if (!pencsize) return ERROR_INT("&encsize not defined", __func__, 1); *pencsize = 0; if (!pixs) return ERROR_INT("&pixs not defined", __func__, 1); if (lossless == 0 && (quality < 0 || quality > 100)) return ERROR_INT("quality not in [0 ... 100]", __func__, 1); if ((pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR)) == NULL) return ERROR_INT("failure to remove color map", __func__, 1); /* Convert to rgb if not 32 bpp; pix2 must not be a clone of pixs. */ if (pixGetDepth(pix1) != 32) pix2 = pixConvertTo32(pix1); else pix2 = pixCopy(NULL, pix1); pixDestroy(&pix1); pixGetDimensions(pix2, &w, &h, &d); if (w <= 0 || h <= 0 || d != 32) { pixDestroy(&pix2); return ERROR_INT("pix2 not 32 bpp or of 0 size", __func__, 1); } /* If spp == 3, need to set alpha layer to opaque (all 1s). */ if (pixGetSpp(pix2) == 3) pixSetComponentArbitrary(pix2, L_ALPHA_CHANNEL, 255); /* The WebP API expects data in RGBA order. The pix stores * in host-dependent order with R as the MSB and A as the LSB. * On little-endian machines, the bytes in the word must * be swapped; e.g., R goes from byte 0 (LSB) to byte 3 (MSB). * No swapping is necessary for big-endians. */ pixEndianByteSwap(pix2); wpl = pixGetWpl(pix2); data = pixGetData(pix2); stride = wpl * 4; if (lossless) { *pencsize = WebPEncodeLosslessRGBA((uint8_t *)data, w, h, stride, pencdata); } else { *pencsize = WebPEncodeRGBA((uint8_t *)data, w, h, stride, quality, pencdata); } pixDestroy(&pix2); if (*pencsize == 0) { free(*pencdata); *pencdata = NULL; return ERROR_INT("webp encoding failed", __func__, 1); } return 0; } /* --------------------------------------------*/ #endif /* HAVE_LIBWEBP */ /* --------------------------------------------*/ leptonica-1.86.0/src/webpiostub.c000066400000000000000000000070021506303110300166710ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file webpiostub.c *
 *
 *     Stubs for webpio.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !HAVE_LIBWEBP /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamWebP(FILE *fp) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemWebP(const l_uint8 *filedata, size_t filesize) { return (PIX * )ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_ok readHeaderWebP(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok readHeaderMemWebP(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteWebP(const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* ----------------------------------------------------------------------*/ l_ok pixWriteMemWebP(l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", __func__, 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBWEBP */ /* --------------------------------------------*/ leptonica-1.86.0/src/writefile.c000066400000000000000000001144611506303110300165100ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001-2016 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /* * writefile.c * * Set jpeg quality for pixWrite() and pixWriteMem() * l_int32 l_jpegSetQuality() * * Set global variable LeptDebugOK for writing to named temp files * l_int32 setLeptDebugOK() * * High-level procedures for writing images to file: * l_int32 pixaWriteFiles() * l_int32 pixWriteDebug() * l_int32 pixWrite() * l_int32 pixWriteAutoFormat() * l_int32 pixWriteStream() * l_int32 pixWriteImpliedFormat() * * Selection of output format if default is requested * l_int32 pixChooseOutputFormat() * l_int32 getImpliedFileFormat() * l_int32 getFormatFromExtension() * l_int32 pixGetAutoFormat() * const char *getFormatExtension() * * Write to memory * l_int32 pixWriteMem() * * Image display for debugging * l_int32 l_fileDisplay() * l_int32 pixDisplay() * l_int32 pixDisplayWithTitle() * PIX *pixMakeColorSquare() * void l_chooseDisplayProg() * * Change format for missing library * void changeFormatForMissingLib() * * Nonfunctional stub of pix output for debugging * l_int32 pixDisplayWrite() * * Supported file formats: * (1) Writing is supported without any external libraries: * bmp * pnm (including pbm, pgm, etc) * spix (raw serialized) * (2) Writing is supported with installation of external libraries: * png * jpg (standard jfif version) * tiff (including most varieties of compression) * gif * webp * jp2 (jpeg2000) * (3) Writing is supported through special interfaces: * ps (PostScript, in psio1.c, psio2.c): * level 1 (uncompressed) * level 2 (g4 and dct encoding: requires tiff, jpg) * level 3 (g4, dct and flate encoding: requires tiff, jpg, zlib) * pdf (PDF, in pdfio.c): * level 1 (g4 and dct encoding: requires tiff, jpg) * level 2 (g4, dct and flate encoding: requires tiff, jpg, zlib) */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include "allheaders.h" /* Set defaults for the display program (xv, xli, xzgv, open, irfanview) * that is invoked by pixDisplay() */ #ifdef _WIN32 static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_IV; /* default */ #elif defined(__APPLE__) static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_OPEN; /* default */ #else static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_XZGV; /* default */ #endif /* _WIN32 */ #define Bufsize 512 static const l_int32 MaxDisplayWidth = 1000; static const l_int32 MaxDisplayHeight = 800; static const l_int32 MaxSizeForPng = 200; /* PostScript output for printing */ static const l_float32 DefaultScaling = 1.0; /* Global array of image file format extension names. */ /* This is in 1-1 correspondence with format enum in imageio.h. */ /* The empty string at the end represents the serialized format, */ /* which has no recognizable extension name, but the array must */ /* be padded to agree with the format enum. */ /* (Note on 'const': The size of the array can't be defined 'const' */ /* because that makes it static. The 'const' in the definition of */ /* the array refers to the strings in the array; the ptr to the */ /* array is not const and can be used 'extern' in other files.) */ LEPT_DLL l_int32 NumImageFileFormatExtensions = 20; /* array size */ LEPT_DLL const char *ImageFileFormatExtensions[] = {"unknown", "bmp", "jpg", "png", "tif", "tif", "tif", "tif", "tif", "tif", "tif", "pnm", "ps", "gif", "jp2", "webp", "pdf", "tif", "default", ""}; /* Local map of image file name extension to output format. * Note that the extension string always includes a '.' */ struct ExtensionMap { char extension[16]; l_int32 format; }; static const struct ExtensionMap extension_map[] = { { ".bmp", IFF_BMP }, { ".jpg", IFF_JFIF_JPEG }, { ".jpeg", IFF_JFIF_JPEG }, { ".JPG", IFF_JFIF_JPEG }, { ".png", IFF_PNG }, { ".tif", IFF_TIFF }, { ".tiff", IFF_TIFF }, { ".tiffg4", IFF_TIFF_G4 }, { ".pbm", IFF_PNM }, { ".pgm", IFF_PNM }, { ".pnm", IFF_PNM }, { ".gif", IFF_GIF }, { ".jp2", IFF_JP2 }, { ".j2k", IFF_JP2 }, { ".ps", IFF_PS }, { ".pdf", IFF_LPDF }, { ".webp", IFF_WEBP } }; /*---------------------------------------------------------------------* * Set jpeg quality for pixWrite() and pixWriteMem() * *---------------------------------------------------------------------*/ /* Parameter that controls jpeg quality for high-level calls. */ static l_int32 var_JPEG_QUALITY = 75; /* default */ /*! * \brief l_jpegSetQuality() * * \param[in] new_quality 1 - 100; 75 is default; 0 defaults to 75 * \return prev previous quality * *
 * Notes:
 *      (1) This variable is used in pixWriteStream() and pixWriteMem(),
 *          to control the jpeg quality.  The default is 75.
 *      (2) It returns the previous quality, so for example:
 *           l_int32  prev = l_jpegSetQuality(85);  //sets to 85
 *           pixWriteStream(...);
 *           l_jpegSetQuality(prev);   // resets to previous value
 *      (3) On error, logs a message and does not change the variable.
 */
l_int32
l_jpegSetQuality(l_int32  new_quality)
{
l_int32  prevq, newq;

    prevq = var_JPEG_QUALITY;
    newq = (new_quality == 0) ? 75 : new_quality;
    if (newq < 1 || newq > 100)
        L_ERROR("invalid jpeg quality; unchanged\n", __func__);
    else
        var_JPEG_QUALITY = newq;
    return prevq;
}


/*----------------------------------------------------------------------*
 *    Set global variable LeptDebugOK for writing to named temp files   *
 *----------------------------------------------------------------------*/
LEPT_DLL l_int32 LeptDebugOK = 0;  /* default value */
/*!
 * \brief   setLeptDebugOK()
 *
 * \param[in]    allow     TRUE (1) or FALSE (0)
 * \return       void
 *
 * 
 * Notes:
 *      (1) This sets or clears the global variable LeptDebugOK, to
 *          control writing files in a temp directory with names that
 *          are compiled in.
 *      (2) The default in the library distribution is 0.  Call with
 *          %allow = 1 for development and debugging.
 */
void
setLeptDebugOK(l_int32  allow)
{
    if (allow != 0) allow = 1;
    LeptDebugOK = allow;
}


/*---------------------------------------------------------------------*
 *           Top-level procedures for writing images to file           *
 *---------------------------------------------------------------------*/
/*!
 * \brief   pixaWriteFiles()
 *
 * \param[in]    rootname
 * \param[in]    pixa
 * \param[in]    format  defined in imageio.h; see notes for default
 * \return  0 if OK; 1 on error
 *
 * 
 * Notes:
 *      (1) Use %format = IFF_DEFAULT to decide the output format
 *          individually for each pix.
 * 
*/ l_ok pixaWriteFiles(const char *rootname, PIXA *pixa, l_int32 format) { char bigbuf[Bufsize]; l_int32 i, n, pixformat; PIX *pix; if (!rootname) return ERROR_INT("rootname not defined", __func__, 1); if (!pixa) return ERROR_INT("pixa not defined", __func__, 1); if (format < 0 || format == IFF_UNKNOWN || format >= NumImageFileFormatExtensions) return ERROR_INT("invalid format", __func__, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (format == IFF_DEFAULT) pixformat = pixChooseOutputFormat(pix); else pixformat = format; snprintf(bigbuf, Bufsize, "%s%03d.%s", rootname, i, ImageFileFormatExtensions[pixformat]); pixWrite(bigbuf, pix, pixformat); pixDestroy(&pix); } return 0; } /*! * \brief pixWriteDebug() * * \param[in] fname * \param[in] pix * \param[in] format defined in imageio.h * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Debug version, intended for use in the library when writing
 *          to files in a temp directory with names that are compiled in.
 *          This is used instead of pixWrite() for all such library calls.
 *      (2) The global variable LeptDebugOK defaults to 0, and can be set
 *          or cleared by the function setLeptDebugOK().
 * 
*/ l_ok pixWriteDebug(const char *fname, PIX *pix, l_int32 format) { if (LeptDebugOK) { return pixWrite(fname, pix, format); } else { L_INFO("write to named temp file %s is disabled\n", __func__, fname); return 0; } } /*! * \brief pixWrite() * * \param[in] fname * \param[in] pix * \param[in] format defined in imageio.h * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) Open for write using binary mode (with the "b" flag)
 *          to avoid having Windows automatically translate the NL
 *          into CRLF, which corrupts image files.  On non-Windows
 *          systems this flag should be ignored, per ISO C90.
 *          Thanks to Dave Bryan for pointing this out.
 *      (2) If the default image format IFF_DEFAULT is requested:
 *          use the input format if known; otherwise, use a lossless format.
 *      (3) The default jpeg quality is 75.  For some other value,
 *          Use l_jpegSetQuality().
 * 
*/ l_ok pixWrite(const char *fname, PIX *pix, l_int32 format) { l_int32 ret; FILE *fp; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!fname) return ERROR_INT("fname not defined", __func__, 1); if ((fp = fopenWriteStream(fname, "wb+")) == NULL) return ERROR_INT_1("stream not opened", fname, __func__, 1); ret = pixWriteStream(fp, pix, format); fclose(fp); if (ret) return ERROR_INT_1("pix not written to stream", fname, __func__, 1); return 0; } /*! * \brief pixWriteAutoFormat() * * \param[in] filename * \param[in] pix * \return 0 if OK; 1 on error */ l_ok pixWriteAutoFormat(const char *filename, PIX *pix) { l_int32 format; if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (pixGetAutoFormat(pix, &format)) return ERROR_INT("auto format not returned", __func__, 1); return pixWrite(filename, pix, format); } /*! * \brief pixWriteStream() * * \param[in] fp file stream * \param[in] pix * \param[in] format * \return 0 if OK; 1 on error. */ l_ok pixWriteStream(FILE *fp, PIX *pix, l_int32 format) { if (!fp) return ERROR_INT("stream not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); if (format == IFF_DEFAULT) format = pixChooseOutputFormat(pix); /* Use bmp format for testing if library for requested * format for jpeg, png or tiff is not available */ changeFormatForMissingLib(&format); switch(format) { case IFF_BMP: pixWriteStreamBmp(fp, pix); break; case IFF_JFIF_JPEG: /* default quality; baseline sequential */ return pixWriteStreamJpeg(fp, pix, var_JPEG_QUALITY, 0); case IFF_PNG: /* no gamma value stored */ return pixWriteStreamPng(fp, pix, 0.0); case IFF_TIFF: /* uncompressed */ case IFF_TIFF_PACKBITS: /* compressed, binary only */ case IFF_TIFF_RLE: /* compressed, binary only */ case IFF_TIFF_G3: /* compressed, binary only */ case IFF_TIFF_G4: /* compressed, binary only */ case IFF_TIFF_LZW: /* compressed, all depths */ case IFF_TIFF_ZIP: /* compressed, all depths */ case IFF_TIFF_JPEG: /* compressed, 8 bpp gray and 32 bpp rgb */ return pixWriteStreamTiff(fp, pix, format); case IFF_PNM: return pixWriteStreamPnm(fp, pix); case IFF_PS: return pixWriteStreamPS(fp, pix, NULL, 0, DefaultScaling); case IFF_GIF: return pixWriteStreamGif(fp, pix); case IFF_JP2: return pixWriteStreamJp2k(fp, pix, 34, 0, L_JP2_CODEC, 0, 0); case IFF_WEBP: return pixWriteStreamWebP(fp, pix, 80, 0); case IFF_LPDF: return pixWriteStreamPdf(fp, pix, 0, NULL); case IFF_SPIX: return pixWriteStreamSpix(fp, pix); default: return ERROR_INT("unknown format", __func__, 1); } return 0; } /*! * \brief pixWriteImpliedFormat() * * \param[in] filename * \param[in] pix * \param[in] quality iff JPEG; 1 - 100, 0 for default * \param[in] progressive iff JPEG; 0 for baseline seq., 1 for progressive * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This determines the output format from the filename extension.
 *      (2) The last two args are ignored except for requests for jpeg files.
 *      (3) The jpeg default quality is 75.
 * 
*/ l_ok pixWriteImpliedFormat(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { l_int32 format; if (!filename) return ERROR_INT("filename not defined", __func__, 1); if (!pix) return ERROR_INT("pix not defined", __func__, 1); /* Determine output format */ format = getImpliedFileFormat(filename); if (format == IFF_UNKNOWN) { format = IFF_PNG; } else if (format == IFF_TIFF) { if (pixGetDepth(pix) == 1) format = IFF_TIFF_G4; else #ifdef _WIN32 format = IFF_TIFF_LZW; /* poor compression */ #else format = IFF_TIFF_ZIP; /* native Windows tools can't handle this */ #endif /* _WIN32 */ } if (format == IFF_JFIF_JPEG) { quality = L_MIN(quality, 100); quality = L_MAX(quality, 0); if (progressive != 0 && progressive != 1) { progressive = 0; L_WARNING("invalid progressive; setting to baseline\n", __func__); } if (quality == 0) quality = 75; pixWriteJpeg (filename, pix, quality, progressive); } else { pixWrite(filename, pix, format); } return 0; } /*---------------------------------------------------------------------* * Selection of output format if default is requested * *---------------------------------------------------------------------*/ /*! * \brief pixChooseOutputFormat() * * \param[in] pix * \return output format, or 0 on error * *
 * Notes:
 *      (1) This should only be called if the requested format is IFF_DEFAULT.
 *      (2) If the pix wasn't read from a file, its input format value
 *          will be IFF_UNKNOWN, and in that case it is written out
 *          in a compressed but lossless format.
 * 
*/ l_int32 pixChooseOutputFormat(PIX *pix) { l_int32 d, format; if (!pix) return ERROR_INT("pix not defined", __func__, 0); d = pixGetDepth(pix); format = pixGetInputFormat(pix); if (format == IFF_UNKNOWN) { /* output lossless */ if (d == 1) format = IFF_TIFF_G4; else format = IFF_PNG; } return format; } /*! * \brief getImpliedFileFormat() * * \param[in] filename * \return output format, or IFF_UNKNOWN on error or invalid extension. * *
 * Notes:
 *      (1) This determines the output file format from the extension
 *          of the input filename.
 * 
*/ l_int32 getImpliedFileFormat(const char *filename) { char *extension; l_int32 format = IFF_UNKNOWN; if (!filename) return ERROR_INT("extension not defined", __func__, IFF_UNKNOWN); if (splitPathAtExtension (filename, NULL, &extension)) return IFF_UNKNOWN; format = getFormatFromExtension(extension); LEPT_FREE(extension); return format; } /*! * \brief getFormatFromExtension() * * \param[in] extension * \return output format, or IFF_UNKNOWN on error or invalid extension. * *
 * Notes:
 *      (1) This determines the integer for writing in a format that
 *          corresponds to the image file type extension.  For example,
 *          the integer code corresponding to the extension "jpg" is 2;
 *          it is used to write with jpeg encoding.
 * 
*/ l_int32 getFormatFromExtension(const char *extension) { int i, numext; l_int32 format = IFF_UNKNOWN; if (!extension) return ERROR_INT("extension not defined", __func__, IFF_UNKNOWN); numext = sizeof(extension_map) / sizeof(extension_map[0]); for (i = 0; i < numext; i++) { if (!strcmp(extension, extension_map[i].extension)) { format = extension_map[i].format; break; } } return format; } /*! * \brief pixGetAutoFormat() * * \param[in] pix * \param[in] &format * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) The output formats are restricted to tiff, jpeg and png
 *          because these are the most commonly used image formats and
 *          the ones that are typically installed with leptonica.
 *      (2) This decides what compression to use based on the pix.
 *          It chooses tiff-g4 if 1 bpp without a colormap, jpeg with
 *          quality 75 if grayscale, rgb or rgba (where it loses
 *          the alpha layer), and lossless png for all other situations.
 * 
*/ l_ok pixGetAutoFormat(PIX *pix, l_int32 *pformat) { l_int32 d; PIXCMAP *cmap; if (!pformat) return ERROR_INT("&format not defined", __func__, 0); *pformat = IFF_UNKNOWN; if (!pix) return ERROR_INT("pix not defined", __func__, 0); d = pixGetDepth(pix); cmap = pixGetColormap(pix); if (d == 1 && !cmap) { *pformat = IFF_TIFF_G4; } else if ((d == 8 && !cmap) || d == 24 || d == 32) { *pformat = IFF_JFIF_JPEG; } else { *pformat = IFF_PNG; } return 0; } /*! * \brief getFormatExtension() * * \param[in] format integer * \return extension string, or NULL if format is out of range * *
 * Notes:
 *      (1) This string is NOT owned by the caller; it is just a pointer
 *          to a global string.  Do not free it.
 * 
*/ const char * getFormatExtension(l_int32 format) { if (format < 0 || format >= NumImageFileFormatExtensions) return (const char *)ERROR_PTR("invalid format", __func__, NULL); return ImageFileFormatExtensions[format]; } /*---------------------------------------------------------------------* * Write to memory * *---------------------------------------------------------------------*/ /*! * \brief pixWriteMem() * * \param[out] pdata data of tiff compressed image * \param[out] psize size of returned data * \param[in] pix * \param[in] format defined in imageio.h * \return 0 if OK, 1 on error * *
 * Notes:
 *      (1) On Windows, this will only write tiff and PostScript to memory.
 *          For other formats, it requires open_memstream(3).
 *      (2) PostScript output is uncompressed, in hex ascii.
 *          Most printers support level 2 compression (tiff_g4 for 1 bpp,
 *          jpeg for 8 and 32 bpp).
 *      (3) The default jpeg quality is 75.  For some other value,
 *          Use l_jpegSetQuality().
 * 
*/ l_ok pixWriteMem(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format) { l_int32 ret; if (!pdata) return ERROR_INT("&data not defined", __func__, 1 ); if (!psize) return ERROR_INT("&size not defined", __func__, 1 ); if (!pix) return ERROR_INT("&pix not defined", __func__, 1 ); if (format == IFF_DEFAULT) format = pixChooseOutputFormat(pix); /* Use bmp format for testing if library for requested * format for jpeg, png or tiff is not available */ changeFormatForMissingLib(&format); switch(format) { case IFF_BMP: ret = pixWriteMemBmp(pdata, psize, pix); break; case IFF_JFIF_JPEG: /* default quality; baseline sequential */ ret = pixWriteMemJpeg(pdata, psize, pix, var_JPEG_QUALITY, 0); break; case IFF_PNG: /* no gamma value stored */ ret = pixWriteMemPng(pdata, psize, pix, 0.0); break; case IFF_TIFF: /* uncompressed */ case IFF_TIFF_PACKBITS: /* compressed, binary only */ case IFF_TIFF_RLE: /* compressed, binary only */ case IFF_TIFF_G3: /* compressed, binary only */ case IFF_TIFF_G4: /* compressed, binary only */ case IFF_TIFF_LZW: /* compressed, all depths */ case IFF_TIFF_ZIP: /* compressed, all depths */ case IFF_TIFF_JPEG: /* compressed, 8 bpp gray or 32 bpp rgb */ ret = pixWriteMemTiff(pdata, psize, pix, format); break; case IFF_PNM: ret = pixWriteMemPnm(pdata, psize, pix); break; case IFF_PS: ret = pixWriteMemPS(pdata, psize, pix, NULL, 0, DefaultScaling); break; case IFF_GIF: ret = pixWriteMemGif(pdata, psize, pix); break; case IFF_JP2: ret = pixWriteMemJp2k(pdata, psize, pix, 34, 0, 0, 0); break; case IFF_WEBP: ret = pixWriteMemWebP(pdata, psize, pix, 80, 0); break; case IFF_LPDF: ret = pixWriteMemPdf(pdata, psize, pix, 0, NULL); break; case IFF_SPIX: ret = pixWriteMemSpix(pdata, psize, pix); break; default: return ERROR_INT("unknown format", __func__, 1); } return ret; } /*---------------------------------------------------------------------* * Image display for debugging * *---------------------------------------------------------------------*/ /*! * \brief l_fileDisplay() * * \param[in] fname * \param[in] x, y location of display frame on the screen * \param[in] scale scale factor (use 0 to skip display) * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is a convenient wrapper for displaying image files.
 *      (2) It does nothing unless LeptDebugOK == TRUE.
 *      (2) Set %scale = 0 to disable display.
 *      (3) This downscales 1 bpp to gray.
 * 
*/ l_ok l_fileDisplay(const char *fname, l_int32 x, l_int32 y, l_float32 scale) { PIX *pixs, *pixd; if (!LeptDebugOK) { L_INFO("displaying files is disabled; " "use setLeptDebugOK(1) to enable\n", __func__); return 0; } if (scale == 0.0) return 0; if (scale < 0.0) return ERROR_INT("invalid scale factor", __func__, 1); if ((pixs = pixRead(fname)) == NULL) return ERROR_INT("pixs not read", __func__, 1); if (scale == 1.0) { pixd = pixClone(pixs); } else { if (scale < 1.0 && pixGetDepth(pixs) == 1) pixd = pixScaleToGray(pixs, scale); else pixd = pixScale(pixs, scale, scale); } pixDisplay(pixd, x, y); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } /*! * \brief pixDisplay() * * \param[in] pix 1, 2, 4, 8, 16, 32 bpp * \param[in] x, y location of display frame on the screen * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) This is debugging code that displays an image on the screen.
 *          It uses a static internal variable to number the output files
 *          written by a single process.  Behavior with a shared library
 *          may be unpredictable.
 *      (2) It does nothing unless LeptDebugOK == TRUE.
 *      (3) It uses these programs to display the image:
 *             On Unix: xzgv, xli, xv or (for apple) open
 *             On Windows: i_view or the application currently registered
 *                         as the default viewer (the browser 'open' action
 *                         based on the extension of the image file).
 *          The display program must be on your $PATH variable.  It is
 *          chosen by setting the global var_DISPLAY_PROG, using
 *          l_chooseDisplayProg().  Default on Unix is xzgv.
 *      (4) Images with dimensions larger than MaxDisplayWidth or
 *          MaxDisplayHeight are downscaled to fit those constraints.
 *          This is particularly important for displaying 1 bpp images
 *          with xv, because xv automatically downscales large images
 *          by subsampling, which looks poor.  For 1 bpp, we use
 *          scale-to-gray to get decent-looking anti-aliased images.
 *          In all cases, we write a temporary file to /tmp/lept/disp,
 *          that is read by the display program.
 *      (5) The temporary file is written as png if, after initial
 *          processing for special cases, any of these obtain:
 *            * pix dimensions are smaller than some thresholds
 *            * pix depth is less than 8 bpp
 *            * pix is colormapped
 *      (6) For spp == 4, we call pixDisplayLayersRGBA() to show 3
 *          versions of the image: the image with a fully opaque
 *          alpha, the alpha, and the image as it would appear with
 *          a white background.
 *      (7) pixDisplay() can be inactivated at runtime by calling:
 *               l_chooseDisplayProg(L_DISPLAY_WITH_NONE);
 * 
*/ l_ok pixDisplay(PIX *pixs, l_int32 x, l_int32 y) { return pixDisplayWithTitle(pixs, x, y, NULL, 1); } /*! * \brief pixDisplayWithTitle() * * \param[in] pix 1, 2, 4, 8, 16, 32 bpp * \param[in] x, y location of display frame * \param[in] title [optional] on frame; can be NULL; * \param[in] dispflag 1 to write, else disabled * \return 0 if OK; 1 on error * *
 * Notes:
 *      (1) See notes for pixDisplay().
 *      (2) This displays the image if dispflag == 1 and the global
 *          var_DISPLAY_PROG != L_DISPLAY_WITH_NONE; otherwise it punts.
 * 
*/ l_ok pixDisplayWithTitle(PIX *pixs, l_int32 x, l_int32 y, const char *title, l_int32 dispflag) { char *tempname; char buffer[Bufsize]; static l_atomic index = 0; /* caution: not .so safe */ l_int32 w, h, d, spp, maxheight, opaque, threeviews; l_float32 ratw, rath, ratmin; PIX *pix0, *pix1, *pix2; PIXCMAP *cmap; #ifndef _WIN32 l_int32 wt, ht; #else char *pathname; char fullpath[_MAX_PATH]; #endif /* _WIN32 */ if (!LeptDebugOK) { L_INFO("displaying images is disabled;\n " "use setLeptDebugOK(1) to enable\n", __func__); return 0; } #ifdef OS_IOS /* iOS 11 does not support system() */ return ERROR_INT("iOS 11 does not support system()", __func__, 1); #endif /* OS_IOS */ if (dispflag != 1 || var_DISPLAY_PROG == L_DISPLAY_WITH_NONE) return 0; if (!pixs) return ERROR_INT("pixs not defined", __func__, 1); #ifndef _WIN32 /* unix */ if (var_DISPLAY_PROG != L_DISPLAY_WITH_XZGV && var_DISPLAY_PROG != L_DISPLAY_WITH_XLI && var_DISPLAY_PROG != L_DISPLAY_WITH_XV && var_DISPLAY_PROG != L_DISPLAY_WITH_OPEN) return ERROR_INT("invalid unix program chosen for display", __func__, 1); #else /* _WIN32 */ if (var_DISPLAY_PROG != L_DISPLAY_WITH_IV && var_DISPLAY_PROG != L_DISPLAY_WITH_OPEN) return ERROR_INT("invalid windows program chosen for display", __func__, 1); #endif /* _WIN32 */ /* Display with three views if either spp = 4 or if colormapped * and the alpha component is not fully opaque */ opaque = TRUE; if ((cmap = pixGetColormap(pixs)) != NULL) pixcmapIsOpaque(cmap, &opaque); spp = pixGetSpp(pixs); threeviews = (spp == 4 || !opaque) ? TRUE : FALSE; /* If colormapped and not opaque, remove the colormap to RGBA */ if (!opaque) pix0 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); else pix0 = pixClone(pixs); /* Scale if necessary; this will also remove a colormap */ pixGetDimensions(pix0, &w, &h, &d); maxheight = (threeviews) ? MaxDisplayHeight / 3 : MaxDisplayHeight; if (w <= MaxDisplayWidth && h <= maxheight) { if (d == 16) /* take MSB */ pix1 = pixConvert16To8(pix0, L_MS_BYTE); else pix1 = pixClone(pix0); } else { ratw = (l_float32)MaxDisplayWidth / (l_float32)w; rath = (l_float32)maxheight / (l_float32)h; ratmin = L_MIN(ratw, rath); if (ratmin < 0.125 && d == 1) pix1 = pixScaleToGray8(pix0); else if (ratmin < 0.25 && d == 1) pix1 = pixScaleToGray4(pix0); else if (ratmin < 0.33 && d == 1) pix1 = pixScaleToGray3(pix0); else if (ratmin < 0.5 && d == 1) pix1 = pixScaleToGray2(pix0); else pix1 = pixScale(pix0, ratmin, ratmin); } pixDestroy(&pix0); if (!pix1) return ERROR_INT("pix1 not made", __func__, 1); /* Generate the three views if required */ if (threeviews) pix2 = pixDisplayLayersRGBA(pix1, 0xffffff00, 0); else pix2 = pixClone(pix1); if (index == 0) { /* erase any existing images */ lept_rmdir("lept/disp"); lept_mkdir("lept/disp"); } index++; if (pixGetDepth(pix2) < 8 || pixGetColormap(pix2) || (w < MaxSizeForPng && h < MaxSizeForPng)) { snprintf(buffer, Bufsize, "/tmp/lept/disp/write.%03d.png", index); pixWrite(buffer, pix2, IFF_PNG); } else { snprintf(buffer, Bufsize, "/tmp/lept/disp/write.%03d.jpg", index); pixWrite(buffer, pix2, IFF_JFIF_JPEG); } tempname = genPathname(buffer, NULL); #ifndef _WIN32 /* Unix */ if (var_DISPLAY_PROG == L_DISPLAY_WITH_XZGV) { /* no way to display title */ pixGetDimensions(pix2, &wt, &ht, NULL); snprintf(buffer, Bufsize, "xzgv --geometry %dx%d+%d+%d %s &", wt + 10, ht + 10, x, y, tempname); } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XLI) { if (title) { snprintf(buffer, Bufsize, "xli -dispgamma 1.0 -quiet -geometry +%d+%d -title \"%s\" %s &", x, y, title, tempname); } else { snprintf(buffer, Bufsize, "xli -dispgamma 1.0 -quiet -geometry +%d+%d %s &", x, y, tempname); } } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XV) { if (title) { snprintf(buffer, Bufsize, "xv -quit -geometry +%d+%d -name \"%s\" %s &", x, y, title, tempname); } else { snprintf(buffer, Bufsize, "xv -quit -geometry +%d+%d %s &", x, y, tempname); } } else { /* L_DISPLAY_WITH_OPEN */ snprintf(buffer, Bufsize, "open %s &", tempname); } callSystemDebug(buffer); #else /* _WIN32 */ /* Windows: L_DISPLAY_WITH_IV || L_DISPLAY_WITH_OPEN */ pathname = genPathname(tempname, NULL); _fullpath(fullpath, pathname, sizeof(fullpath)); if (var_DISPLAY_PROG == L_DISPLAY_WITH_IV) { if (title) { snprintf(buffer, Bufsize, "i_view32.exe \"%s\" /pos=(%d,%d) /title=\"%s\"", fullpath, x, y, title); } else { snprintf(buffer, Bufsize, "i_view32.exe \"%s\" /pos=(%d,%d)", fullpath, x, y); } } else { /* L_DISPLAY_WITH_OPEN */ snprintf(buffer, Bufsize, "explorer.exe /open,\"%s\"", fullpath); } callSystemDebug(buffer); LEPT_FREE(pathname); #endif /* _WIN32 */ pixDestroy(&pix1); pixDestroy(&pix2); LEPT_FREE(tempname); return 0; } /*! * \brief pixMakeColorSquare() * * \param[in] color in 0xrrggbb00 format * \param[in] size in pixels; >= 100; use 0 for default (min size) * \param[in] addlabel use 1 to display the color component values * \param[in] location of text: L_ADD_ABOVE, etc; ignored if %addlabel == 0 * \param[in] textcolor of text label; in 0xrrggbb00 format * \return 32 bpp rgb pixd if OK; NULL on error * *
 * Notes:
 *      (1) If %addlabel == 0, %location and %textcolor are ignored.
 *      (2) To make an array of color squares, use pixDisplayColorArray().
 * 
*/ PIX * pixMakeColorSquare(l_uint32 color, l_int32 size, l_int32 addlabel, l_int32 location, l_uint32 textcolor) { char buf[32]; l_int32 w, rval, gval, bval; L_BMF *bmf; PIX *pix1, *pix2; w = (size <= 0) ? 100 : size; if (addlabel && w < 100) { L_WARNING("size too small for label; omitting label\n", __func__); addlabel = 0; } if ((pix1 = pixCreate(w, w, 32)) == NULL) return (PIX *)ERROR_PTR("pix1 not madel", __func__, NULL); pixSetAllArbitrary(pix1, color); if (!addlabel) return pix1; /* Adding text of color component values */ if (location != L_ADD_ABOVE && location != L_ADD_AT_TOP && location != L_ADD_AT_BOT && location != L_ADD_BELOW) { L_ERROR("invalid location: adding below\n", __func__); location = L_ADD_BELOW; } bmf = bmfCreate(NULL, 4); extractRGBValues(color, &rval, &gval, &bval); snprintf(buf, sizeof(buf), "%d,%d,%d", rval, gval, bval); pix2 = pixAddSingleTextblock(pix1, bmf, buf, textcolor, location, NULL); pixDestroy(&pix1); bmfDestroy(&bmf); return pix2; } void l_chooseDisplayProg(l_int32 selection) { if (selection == L_DISPLAY_WITH_XLI || selection == L_DISPLAY_WITH_XZGV || selection == L_DISPLAY_WITH_XV || selection == L_DISPLAY_WITH_IV || selection == L_DISPLAY_WITH_OPEN) { var_DISPLAY_PROG = selection; } else { L_ERROR("invalid display program\n", "l_chooseDisplayProg"); } } /*---------------------------------------------------------------------* * Change format for missing lib * *---------------------------------------------------------------------*/ /*! * \brief changeFormatForMissingLib() * * \param[in,out] pformat addr of requested output image format * \return void * *
 * Notes:
 *      (1) This is useful for testing functionality when the library for
 *          the requested output format (jpeg, png or tiff) is not linked.
 *          In that case, the output format is changed to bmp.
 * 
*/ void changeFormatForMissingLib(l_int32 *pformat) { #if !defined(HAVE_LIBJPEG) if (*pformat == IFF_JFIF_JPEG) { L_WARNING("jpeg library missing; output bmp format\n", __func__); *pformat = IFF_BMP; } #endif /* !defined(HAVE_LIBJPEG) */ #if !defined(HAVE_LIBPNG) if (*pformat == IFF_PNG) { L_WARNING("png library missing; output bmp format\n", __func__); *pformat = IFF_BMP; } #endif /* !defined(HAVE_LIBPNG) */ #if !defined(HAVE_LIBTIFF) if (L_FORMAT_IS_TIFF(*pformat)) { L_WARNING("tiff library missing; output bmp format\n", __func__); *pformat = IFF_BMP; } #endif /* !defined(HAVE_LIBTIFF) */ } /*---------------------------------------------------------------------* * Deprecated pix output for debugging * *---------------------------------------------------------------------*/ /*! * \brief pixDisplayWrite() * * \param[in] pix * \param[in] reduction * \return 1 (error) * *
 * Notes:
 *      As of 1.80, this is a non-functional stub.
 * 
*/ l_ok pixDisplayWrite(PIX *pixs, l_int32 reduction) { lept_stderr("\n########################################################\n" " pixDisplayWrite() was last used in tesseract 3.04," " in Feb 2016. As of 1.80, it is a non-functional stub\n" "########################################################" "\n\n\n"); return 1; } leptonica-1.86.0/src/zlibmem.c000066400000000000000000000211711506303110300161500ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file zlibmem.c *
 *
 *      zlib operations in memory, using bbuffer
 *          l_uint8   *zlibCompress()
 *          l_uint8   *zlibUncompress()
 *
 *
 *    This provides an example use of the byte buffer utility
 *    (see bbuffer.c for details of how the bbuffer works internally).
 *    We use zlib to compress and decompress a byte array from
 *    one memory buffer to another.  The standard method uses streams,
 *    but here we use the bbuffer as an expandable queue of pixels
 *    for both the reading and writing sides of each operation.
 *
 *    With memory mapping, one should be able to compress between
 *    memory buffers by using the file system to buffer everything in
 *    the background, but the bbuffer implementation is more portable.
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if HAVE_LIBZ /* defined in environ.h */ /* --------------------------------------------*/ #include "zlib.h" static const l_int32 L_BUF_SIZE = 32768; static const l_int32 ZLIB_COMPRESSION_LEVEL = 6; #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*! * \brief zlibCompress() * * \param[in] datain byte buffer with input data * \param[in] nin number of bytes of input data * \param[out] pnout number of bytes of output data * \return dataout compressed data, or NULL on error * *
 * Notes:
 *      (1) We repeatedly read in and fill up an input buffer,
 *          compress the data, and read it back out.  zlib
 *          uses two byte buffers internally in the z_stream
 *          data structure.  We use the bbuffers to feed data
 *          into the fixed bufferin, and feed it out of bufferout,
 *          in the same way that a pair of streams would normally
 *          be used if the data were being read from one file
 *          and written to another.  This is done iteratively,
 *          compressing L_BUF_SIZE bytes of input data at a time.
 * 
*/ l_uint8 * zlibCompress(const l_uint8 *datain, size_t nin, size_t *pnout) { l_uint8 *dataout; l_int32 status, success; l_int32 flush; size_t nbytes; l_uint8 *bufferin, *bufferout; L_BBUFFER *bbin, *bbout; z_stream z; if (!datain) return (l_uint8 *)ERROR_PTR("datain not defined", __func__, NULL); /* Set up fixed size buffers used in z_stream */ bufferin = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); bufferout = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); /* Set up bbuffers and load bbin with the data */ bbin = bbufferCreate(datain, nin); bbout = bbufferCreate(NULL, 0); success = TRUE; if (!bufferin || !bufferout || !bbin || !bbout) { L_ERROR("calloc fail for buffer\n", __func__); success = FALSE; goto cleanup_arrays; } z.zalloc = (alloc_func)0; z.zfree = (free_func)0; z.opaque = (voidpf)0; z.next_in = bufferin; z.avail_in = 0; z.next_out = bufferout; z.avail_out = L_BUF_SIZE; status = deflateInit(&z, ZLIB_COMPRESSION_LEVEL); if (status != Z_OK) { L_ERROR("deflateInit failed\n", __func__); success = FALSE; goto cleanup_arrays; } do { if (z.avail_in == 0) { z.next_in = bufferin; bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); #if DEBUG lept_stderr(" wrote %zu bytes to bufferin\n", nbytes); #endif /* DEBUG */ z.avail_in = nbytes; } flush = (bbin->n) ? Z_SYNC_FLUSH : Z_FINISH; status = deflate(&z, flush); #if DEBUG lept_stderr(" status is %d, bytesleft = %u, totalout = %zu\n", status, z.avail_out, z.total_out); #endif /* DEBUG */ nbytes = L_BUF_SIZE - z.avail_out; if (nbytes) { bbufferRead(bbout, bufferout, nbytes); #if DEBUG lept_stderr(" read %zu bytes from bufferout\n", nbytes); #endif /* DEBUG */ } z.next_out = bufferout; z.avail_out = L_BUF_SIZE; } while (flush != Z_FINISH); deflateEnd(&z); cleanup_arrays: if (success) { dataout = bbufferDestroyAndSaveData(&bbout, pnout); } else { dataout = NULL; bbufferDestroy(&bbout); } bbufferDestroy(&bbin); LEPT_FREE(bufferin); LEPT_FREE(bufferout); return dataout; } /*! * \brief zlibUncompress() * * \param[in] datain byte buffer with compressed input data * \param[in] nin number of bytes of input data * \param[out] pnout number of bytes of output data * \return dataout uncompressed data, or NULL on error * *
 * Notes:
 *      (1) See zlibCompress().
 * 
*/ l_uint8 * zlibUncompress(const l_uint8 *datain, size_t nin, size_t *pnout) { l_uint8 *dataout; l_uint8 *bufferin, *bufferout; l_int32 status, success; size_t nbytes; L_BBUFFER *bbin, *bbout; z_stream z; if (!datain) return (l_uint8 *)ERROR_PTR("datain not defined", __func__, NULL); /* Set up fixed size buffers used in z_stream */ bufferin = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); bufferout = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); /* Set up bbuffers and load bbin with the data */ bbin = bbufferCreate(datain, nin); bbout = bbufferCreate(NULL, 0); success = TRUE; if (!bufferin || !bufferout || !bbin || !bbout) { L_ERROR("calloc fail for buffer\n", __func__); success = FALSE; goto cleanup_arrays; } z.zalloc = (alloc_func)0; z.zfree = (free_func)0; z.next_in = bufferin; z.avail_in = 0; z.next_out = bufferout; z.avail_out = L_BUF_SIZE; status = inflateInit(&z); if (status != Z_OK) { L_ERROR("inflateInit fail for buffer\n", __func__); success = FALSE; goto cleanup_arrays; } for ( ; ; ) { if (z.avail_in == 0) { z.next_in = bufferin; bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); #if DEBUG lept_stderr(" wrote %d bytes to bufferin\n", nbytes); #endif /* DEBUG */ z.avail_in = nbytes; } if (z.avail_in == 0) break; status = inflate(&z, Z_SYNC_FLUSH); #if DEBUG lept_stderr(" status is %d, bytesleft = %d, totalout = %d\n", status, z.avail_out, z.total_out); #endif /* DEBUG */ nbytes = L_BUF_SIZE - z.avail_out; if (nbytes) { bbufferRead(bbout, bufferout, nbytes); #if DEBUG lept_stderr(" read %d bytes from bufferout\n", nbytes); #endif /* DEBUG */ } z.next_out = bufferout; z.avail_out = L_BUF_SIZE; } inflateEnd(&z); cleanup_arrays: if (success) { dataout = bbufferDestroyAndSaveData(&bbout, pnout); } else { dataout = NULL; bbufferDestroy(&bbout); } bbufferDestroy(&bbin); LEPT_FREE(bufferin); LEPT_FREE(bufferout); return dataout; } /* --------------------------------------------*/ #endif /* HAVE_LIBZ */ /* --------------------------------------------*/ leptonica-1.86.0/src/zlibmemstub.c000066400000000000000000000044671506303110300170570ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ /*! * \file zlibmemstub.c *
 *
 *     Stubs for zlibmem.c functions
 * 
*/ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include "allheaders.h" /* --------------------------------------------*/ #if !HAVE_LIBZ /* defined in environ.h */ /* --------------------------------------------*/ l_uint8 * zlibCompress(const l_uint8 *datain, size_t nin, size_t *pnout) { return (l_uint8 *)ERROR_PTR("function not present", __func__, NULL); } /* ----------------------------------------------------------------------*/ l_uint8 * zlibUncompress(const l_uint8 *datain, size_t nin, size_t *pnout) { return (l_uint8 *)ERROR_PTR("function not present", __func__, NULL); } /* --------------------------------------------*/ #endif /* !HAVE_LIBZ */ /* --------------------------------------------*/ leptonica-1.86.0/style-guide.txt000066400000000000000000000205061506303110300165530ustar00rootroot00000000000000/*====================================================================* - Copyright (C) 2001 Leptonica. 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. - - 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 ANY - 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. *====================================================================*/ style-guide.txt 10 May 2019 This is not a complete guide to the coding style in leptonica. It covers most of the typographic issues and the most frequent coding patterns, such as how to check input args to functions. In general, you need to look at existing code to verify that your code meets the style guidelines. And if you find any aberrant code, please let me know! The C code in leptonica follows these conventions: (1) ANSI C, with no exceptions (a) C-style comments only: /* */ (b) Variables are declared at the beginning of a function. [This is more strict than ANSI C, which only requires declarations to be at the beginning of a scope delineated by braces.] (c) Use typedefs for structs like Pix; e.g., function(PIX *pixs) Do not do this (omitting the 'struct' keyword); it is valid C++, but not C: function(Pix *pixs) (2) Formatting (a) White space: 4 space indentation. No tabs, ever. No trailing spaces. (b) The code is set up to work with doxygen. Function headers are in this format: /*! * \brief pixSelectByAreaFraction() * * \param[in] pixs 1 bpp * \param[in] thresh threshold ratio of fg pixels to (w * h) * \param[in] connectivity 4 or 8 * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE * \param[out] pchanged [optional] 1 if changed; 0 if clone returned * \return pixd, or NULL on error * *
       * Notes:
       *      (1) The args specify constraints on the amount of foreground
       *          coverage of the components that are kept.
       *   ....
       * 
*/ (c) Function definition has return value on separate line and starting brace on separate line. PIX * function(...) { (d) Function arguments and local variables line up vertically; allow at least 2 spaces between type and variable name (including '*') function(PIX *pixs, l_int32 factor, l_float32 *pave) { char buf[BUF_SIZE]; l_int32 w, h, d; l_float32 *vect; (e) Braces are placed like this for 'if', 'while', 'do': if (...) { ... } else if (...) { ... } The exceptions are for the beginning of a function and for the switch: switch (x) { case 1: ... ... } Braces are required if any of the clauses have more than one statement: if (...) { x = 0; } else { x++; y = 3.0 * x; } (f) Section headers should look like this: /*----------------------------------------------------------------------* * Statistics in an arbitrary rectangle * *----------------------------------------------------------------------*/ (g) Major inline comments (starting a section) should be indented 4 extra spaces and start with a capital. Multiple line comments should be formatted like this: /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ (h) Minor inline comments (e.g., at the end of a line) should have 2 spaces and no leading capital; e.g. if (i && ((i % ncols) == 0)) { /* start new row */ (3) Naming (a) Function names begin with lower case and successive words have the first letter capitalized; e.g., boxIntersects(). (b) The first word in the function name is the name of the primary input data structure (if there is one); otherwise it can name the output data structure (if there is one). (c) Variable names are as short as possible, without causing confusion. (d) Pointers to data structures are typically named by the type of struct, without a leading 'p'; e.g., pixt, boxt. (e) When ptrs are input to a function, in order to return a value, if the local name would be 'ave', the pointer is 'pave'. (f) Preprocessor variables and enums are named all caps, with '_' between parts. (g) Static constants defined in a file should have the first letter of each word capitalized. (There are also some that are formatted like enums, with all caps and '_' between parts.) (h) There are very few globals in the library. Of these, there are just a handful of static globals that can be changed. Const globals are named with each word beginning with a capital; e.g., ImageFileFormatExtensions[] Static globals that can be changed are named like preprocessor variables, except they are prepended by 'var_'; e.g., var_PNG_WRITE_ALPHA Functions that set these static globals are named with a pre-pended 'l_'; e.g., l_pngSetWriteAlpha() (i) Where there may be issues with namespace collisions with other libraries, function names can be prepended with 'l_'; e.g., l_amapInsert() (4) Arg checking Both number values and ptrs can be returned in function arguments. The following applies equally to both types, and happens at the beginning of the function. We distinguish between returned entities that are optional and required. The following sequence of tests and initializations guarantees that no uninitialized arguments are returned: (a) First, all optional values are initialized if possible: if (pboxa) *pboxa = NULL; // Boxa **pboxa is optional (b) Second, if there is more than 1 required value, each is initialized if possible: if (pnar) *pnar = NULL; // Numa **pnar is required if (pnag) *pnag = NULL; // Numa **pnag is required Then all required arguments are tested in arbitrary order. But if there is exactly 1 required value, it can be checked and initialized if possible: if (!ppixd) return ERROR_INT("&pixd not defined, procName, 1); *ppixd = NULL; (5) Miscellaneous (a) Look around at the code after reviewing the guidelines. (b) Return nothing on stdout. (c) Returns to stderr should be blockable by compiler flags, such as NO_CONSOLE_IO, and by setting message severity thresholds both at compile and at run time. Naked fprintf(stderr, ...) should be avoided in the library. (d) Applications (in prog) that hand a FILE ptr to a library function, or accept heap-allocated data from a library function, should use special wrappers. See lept_*() functions in utils.c. (e) Changes to existing data structures and API changes should be avoided if possible. (f) Accessors are typically provided for struct fields that have extensive use. leptonica-1.86.0/sw.cpp000066400000000000000000000424541506303110300147220ustar00rootroot00000000000000void build(Solution &s) { auto add_deps = [](auto &t) { t += "HAVE_LIBGIF"_d; t += "HAVE_LIBJP2K"_d; t += "HAVE_LIBJPEG"_d; t += "HAVE_LIBPNG"_d; t += "HAVE_LIBTIFF"_d; t += "HAVE_LIBWEBP"_d; t += "HAVE_LIBWEBP_ANIM"_d; t += "HAVE_LIBZ"_d; t += "org.sw.demo.gif"_dep; t += "org.sw.demo.jpeg"_dep; t += "org.sw.demo.uclouvain.openjpeg.openjp2"_dep; t += "org.sw.demo.glennrp.png"_dep; t += "org.sw.demo.tiff"_dep; t += "org.sw.demo.webmproject.webp"_dep; }; auto &leptonica = s.addTarget("danbloomberg.leptonica", "1.86.0"); leptonica += Git("https://github.com/DanBloomberg/leptonica"); { leptonica.setChecks("leptonica"); leptonica.ApiName = "LEPT_DLL"; leptonica += "src/.*\\.c"_rr, "src/.*\\.h"_rr, "src/endianness.h.in"; leptonica.Public += "src"_id; add_deps(leptonica); leptonica += "LIBJP2K_HEADER=\"openjpeg.h\""_d; leptonica.Public += "HAVE_CONFIG_H"_d; if (leptonica.Variables["WORDS_BIGENDIAN"] == 1) leptonica.Variables["ENDIANNESS"] = "L_BIG_ENDIAN"; else leptonica.Variables["ENDIANNESS"] = "L_LITTLE_ENDIAN"; leptonica.Variables["APPLE_UNIVERSAL_BUILD"] = "defined (__APPLE_CC__)"; leptonica.configureFile("src/endianness.h.in", "endianness.h"); leptonica.writeFileOnce("config_auto.h"); if (leptonica.getBuildSettings().TargetOS.Type == OSType::Windows || leptonica.getBuildSettings().TargetOS.Type == OSType::Mingw) leptonica += "User32.lib"_slib, "Gdi32.lib"_slib; } auto &progs = leptonica.addDirectory("progs"); { auto add_prog = [&s, &progs, &leptonica, &add_deps](const String &name, const Files &files) -> decltype(auto) { auto &t = progs.addExecutable(name); t.Scope = TargetScope::Test; t.setRootDirectory("prog"); t += files; t += leptonica; add_deps(t); return t; }; StringMap m_progs{ {"adaptmap_reg", {"adaptmap_reg.c"}}, {"adaptnorm_reg", {"adaptnorm_reg.c"}}, {"affine_reg", {"affine_reg.c"}}, {"alltests_reg", {"alltests_reg.c"}}, {"alphaops_reg", {"alphaops_reg.c"}}, {"alphaxform_reg", {"alphaxform_reg.c"}}, {"baseline_reg", {"baseline_reg.c"}}, {"bilateral1_reg", {"bilateral1_reg.c"}}, {"bilateral2_reg", {"bilateral2_reg.c"}}, {"bilinear_reg", {"bilinear_reg.c"}}, {"binarize_reg", {"binarize_reg.c"}}, {"binmorph1_reg", {"binmorph1_reg.c"}}, {"binmorph2_reg", {"binmorph2_reg.c"}}, {"binmorph3_reg", {"binmorph3_reg.c"}}, {"binmorph4_reg", {"binmorph4_reg.c"}}, {"binmorph5_reg", {"binmorph5_reg.c"}}, {"binmorph6_reg", {"binmorph6_reg.c"}}, {"blackwhite_reg", {"blackwhite_reg.c"}}, {"blend1_reg", {"blend1_reg.c"}}, {"blend2_reg", {"blend2_reg.c"}}, {"blend3_reg", {"blend3_reg.c"}}, {"blend4_reg", {"blend4_reg.c"}}, {"blend5_reg", {"blend5_reg.c"}}, {"boxa1_reg", {"boxa1_reg.c"}}, {"boxa2_reg", {"boxa2_reg.c"}}, {"boxa3_reg", {"boxa3_reg.c"}}, {"boxa4_reg", {"boxa4_reg.c"}}, {"bytea_reg", {"bytea_reg.c"}}, {"ccbord_reg", {"ccbord_reg.c"}}, {"ccthin1_reg", {"ccthin1_reg.c"}}, {"ccthin2_reg", {"ccthin2_reg.c"}}, {"checkerboard_reg", {"checkerboard_reg.c"}}, {"circle_reg", {"circle_reg.c"}}, {"cmapquant_reg", {"cmapquant_reg.c"}}, {"colorcontent_reg", {"colorcontent_reg.c"}}, {"colorfill_reg", {"colorfill_reg.c"}}, {"coloring_reg", {"coloring_reg.c"}}, {"colorize_reg", {"colorize_reg.c"}}, {"colormask_reg", {"colormask_reg.c"}}, {"colormorph_reg", {"colormorph_reg.c"}}, {"colorquant_reg", {"colorquant_reg.c"}}, {"colorseg_reg", {"colorseg_reg.c"}}, {"colorspace_reg", {"colorspace_reg.c"}}, {"compare_reg", {"compare_reg.c"}}, {"compfilter_reg", {"compfilter_reg.c"}}, {"conncomp_reg", {"conncomp_reg.c"}}, {"conversion_reg", {"conversion_reg.c"}}, {"convolve_reg", {"convolve_reg.c"}}, {"crop_reg", {"crop_reg.c"}}, {"dewarp_reg", {"dewarp_reg.c"}}, {"distance_reg", {"distance_reg.c"}}, {"dither_reg", {"dither_reg.c"}}, {"dna_reg", {"dna_reg.c"}}, {"dwamorph1_reg", {"dwamorph1_reg.c", "dwalinear.3.c", "dwalinearlow.3.c"}}, {"dwamorph2_reg", {"dwamorph2_reg.c", "dwalinear.3.c", "dwalinearlow.3.c"}}, {"edge_reg", {"edge_reg.c"}}, {"encoding_reg", {"encoding_reg.c"}}, {"enhance_reg", {"enhance_reg.c"}}, {"equal_reg", {"equal_reg.c"}}, {"expand_reg", {"expand_reg.c"}}, {"extrema_reg", {"extrema_reg.c"}}, {"falsecolor_reg", {"falsecolor_reg.c"}}, {"fhmtauto_reg", {"fhmtauto_reg.c"}}, {"files_reg", {"files_reg.c"}}, {"findcorners_reg", {"findcorners_reg.c"}}, {"findpattern1_reg", {"findpattern1_reg.c"}}, {"findpattern2_reg", {"findpattern2_reg.c"}}, {"flipdetect_reg", {"flipdetect_reg.c"}}, {"fmorphauto_reg", {"fmorphauto_reg.c"}}, {"fpix1_reg", {"fpix1_reg.c"}}, {"fpix2_reg", {"fpix2_reg.c"}}, {"genfonts_reg", {"genfonts_reg.c"}}, {"gifio_reg", {"gifio_reg.c"}}, {"grayfill_reg", {"grayfill_reg.c"}}, {"graymorph1_reg", {"graymorph1_reg.c"}}, {"graymorph2_reg", {"graymorph2_reg.c"}}, {"grayquant_reg", {"grayquant_reg.c"}}, {"hardlight_reg", {"hardlight_reg.c"}}, {"hash_reg", {"hash_reg.c"}}, {"heap_reg", {"heap_reg.c"}}, {"insert_reg", {"insert_reg.c"}}, {"ioformats_reg", {"ioformats_reg.c"}}, {"iomisc_reg", {"iomisc_reg.c"}}, {"italic_reg", {"italic_reg.c"}}, {"jbclass_reg", {"jbclass_reg.c"}}, {"jp2kio_reg", {"jp2kio_reg.c"}}, {"jpegio_reg", {"jpegio_reg.c"}}, {"kernel_reg", {"kernel_reg.c"}}, {"label_reg", {"label_reg.c"}}, {"lineremoval_reg", {"lineremoval_reg.c"}}, {"locminmax_reg", {"locminmax_reg.c"}}, {"logicops_reg", {"logicops_reg.c"}}, {"lowaccess_reg", {"lowaccess_reg.c"}}, {"lowsat_reg", {"lowsat_reg.c"}}, {"maze_reg", {"maze_reg.c"}}, {"mtiff_reg", {"mtiff_reg.c"}}, {"multitype_reg", {"multitype_reg.c"}}, {"nearline_reg", {"nearline_reg.c"}}, {"newspaper_reg", {"newspaper_reg.c"}}, {"numa1_reg", {"numa1_reg.c"}}, {"numa2_reg", {"numa2_reg.c"}}, {"numa3_reg", {"numa3_reg.c"}}, {"overlap_reg", {"overlap_reg.c"}}, {"pageseg_reg", {"pageseg_reg.c"}}, {"paintmask_reg", {"paintmask_reg.c"}}, {"paint_reg", {"paint_reg.c"}}, {"partition_reg", {"partition_reg.c"}}, {"pdfio1_reg", {"pdfio1_reg.c"}}, {"pdfio2_reg", {"pdfio2_reg.c"}}, {"pdfseg_reg", {"pdfseg_reg.c"}}, {"pixa1_reg", {"pixa1_reg.c"}}, {"pixa2_reg", {"pixa2_reg.c"}}, {"pixadisp_reg", {"pixadisp_reg.c"}}, {"pixalloc_reg", {"pixalloc_reg.c"}}, {"pixcomp_reg", {"pixcomp_reg.c"}}, {"pixmem_reg", {"pixmem_reg.c"}}, {"pixserial_reg", {"pixserial_reg.c"}}, {"pixtile_reg", {"pixtile_reg.c"}}, {"pngio_reg", {"pngio_reg.c"}}, {"pnmio_reg", {"pnmio_reg.c"}}, {"projection_reg", {"projection_reg.c"}}, {"projective_reg", {"projective_reg.c"}}, {"psioseg_reg", {"psioseg_reg.c"}}, {"psio_reg", {"psio_reg.c"}}, {"pta_reg", {"pta_reg.c"}}, {"ptra1_reg", {"ptra1_reg.c"}}, {"ptra2_reg", {"ptra2_reg.c"}}, {"quadtree_reg", {"quadtree_reg.c"}}, {"rankbin_reg", {"rankbin_reg.c"}}, {"rankhisto_reg", {"rankhisto_reg.c"}}, {"rank_reg", {"rank_reg.c"}}, {"rasteropip_reg", {"rasteropip_reg.c"}}, {"rasterop_reg", {"rasterop_reg.c"}}, {"rectangle_reg", {"rectangle_reg.c"}}, {"rotate1_reg", {"rotate1_reg.c"}}, {"rotate2_reg", {"rotate2_reg.c"}}, {"scale_reg", {"scale_reg.c"}}, {"selio_reg", {"selio_reg.c"}}, {"shear1_reg", {"shear1_reg.c"}}, {"shear2_reg", {"shear2_reg.c"}}, {"skew_reg", {"skew_reg.c"}}, {"smallpix_reg", {"smallpix_reg.c"}}, {"smoothedge_reg", {"smoothedge_reg.c"}}, {"speckle_reg", {"speckle_reg.c"}}, {"splitcomp_reg", {"splitcomp_reg.c"}}, {"string_reg", {"string_reg.c"}}, {"subpixel_reg", {"subpixel_reg.c"}}, {"texturefill_reg", {"texturefill_reg.c"}}, {"threshnorm_reg", {"threshnorm_reg.c"}}, {"translate_reg", {"translate_reg.c"}}, {"warper_reg", {"warper_reg.c"}}, {"watershed_reg", {"watershed_reg.c"}}, {"webpio_reg", {"webpio_reg.c"}}, {"webpanimio_reg", {"webpanimio_reg.c"}}, {"wordboxes_reg", {"wordboxes_reg.c"}}, {"writetext_reg", {"writetext_reg.c"}}, {"xformbox_reg", {"xformbox_reg.c"}}, {"adaptmap_dark", {"adaptmap_dark.c"}}, {"arabic_lines", {"arabic_lines.c"}}, {"arithtest", {"arithtest.c"}}, {"autogentest1", {"autogentest1.c"}}, {"autogentest2", {"autogentest2.c", "autogen.137.c"}}, {"barcodetest", {"barcodetest.c"}}, {"binarize_set", {"binarize_set.c"}}, {"binarizefiles", {"binarizefiles.c"}}, {"bincompare", {"bincompare.c"}}, {"blendcmaptest", {"blendcmaptest.c"}}, {"buffertest", {"buffertest.c"}}, {"ccbordtest", {"ccbordtest.c"}}, {"cctest1", {"cctest1.c"}}, {"cleanpdf", {"cleanpdf.c"}}, {"colorsegtest", {"colorsegtest.c"}}, {"comparepages", {"comparepages.c"}}, {"comparepixa", {"comparepixa.c"}}, {"comparetest", {"comparetest.c"}}, {"compresspdf", {"compresspdf.c"}}, {"contrasttest", {"contrasttest.c"}}, {"convertfilestopdf", {"convertfilestopdf.c"}}, {"convertfilestops", {"convertfilestops.c"}}, {"convertformat", {"convertformat.c"}}, {"convertsegfilestopdf", {"convertsegfilestopdf.c"}}, {"convertsegfilestops", {"convertsegfilestops.c"}}, {"converttogray", {"converttogray.c"}}, {"converttopdf", {"converttopdf.c"}}, {"converttops", {"converttops.c"}}, {"cornertest", {"cornertest.c"}}, {"corrupttest", {"corrupttest.c"}}, {"croppdf", {"croppdf.c"}}, {"croptext", {"croptext.c"}}, {"deskew_it", {"deskew_it.c"}}, {"dewarprules", {"dewarprules.c"}}, {"dewarptest1", {"dewarptest1.c"}}, {"dewarptest2", {"dewarptest2.c"}}, {"dewarptest3", {"dewarptest3.c"}}, {"dewarptest4", {"dewarptest4.c"}}, {"dewarptest5", {"dewarptest5.c"}}, {"digitprep1", {"digitprep1.c"}}, {"displayboxa", {"displayboxa.c"}}, {"displayboxes_on_pixa", {"displayboxes_on_pixa.c"}}, {"displaypix", {"displaypix.c"}}, {"displaypixa", {"displaypixa.c"}}, {"dwalineargen", {"dwalineargen.c"}}, {"fcombautogen", {"fcombautogen.c"}}, {"fhmtautogen", {"fhmtautogen.c"}}, {"fileinfo", {"fileinfo.c"}}, {"findbinding", {"findbinding.c"}}, {"find_colorregions", {"find_colorregions.c"}}, {"findpattern1", {"findpattern1.c"}}, {"findpattern2", {"findpattern2.c"}}, {"findpattern3", {"findpattern3.c"}}, {"fmorphautogen", {"fmorphautogen.c"}}, {"fpixcontours", {"fpixcontours.c"}}, {"gammatest", {"gammatest.c"}}, {"graphicstest", {"graphicstest.c"}}, {"graymorphtest", {"graymorphtest.c"}}, {"hashtest", {"hashtest.c"}}, {"histoduptest", {"histoduptest.c"}}, {"histotest", {"histotest.c"}}, {"htmlviewer", {"htmlviewer.c"}}, {"imagetops", {"imagetops.c"}}, {"jbcorrelation", {"jbcorrelation.c"}}, {"jbrankhaus", {"jbrankhaus.c"}}, {"jbwords", {"jbwords.c"}}, {"lightcolortest", {"lightcolortest.c"}}, {"listtest", {"listtest.c"}}, {"livre_adapt", {"livre_adapt.c"}}, {"livre_hmt", {"livre_hmt.c"}}, {"livre_makefigs", {"livre_makefigs.c"}}, {"livre_orient", {"livre_orient.c"}}, {"livre_pageseg", {"livre_pageseg.c"}}, {"livre_seedgen", {"livre_seedgen.c"}}, {"livre_tophat", {"livre_tophat.c"}}, {"maketile", {"maketile.c"}}, {"maptest", {"maptest.c"}}, {"messagetest", {"messagetest.c"}}, {"misctest1", {"misctest1.c"}}, {"misctest2", {"misctest2.c"}}, {"modifyhuesat", {"modifyhuesat.c"}}, {"morphseq_reg", {"morphseq_reg.c"}}, {"morphtest1", {"morphtest1.c"}}, {"numaranktest", {"numaranktest.c"}}, {"otsutest1", {"otsutest1.c"}}, {"otsutest2", {"otsutest2.c"}}, {"pagesegtest1", {"pagesegtest1.c"}}, {"pagesegtest2", {"pagesegtest2.c"}}, {"partifytest", {"partifytest.c"}}, {"partitiontest", {"partitiontest.c"}}, {"percolatetest", {"percolatetest.c"}}, {"pixaatest", {"pixaatest.c"}}, {"pixafileinfo", {"pixafileinfo.c"}}, {"plottest", {"plottest.c"}}, {"printimage", {"printimage.c"}}, {"printsplitimage", {"printsplitimage.c"}}, {"printtiff", {"printtiff.c"}}, {"rasteroptest", {"rasteroptest.c"}}, {"rbtreetest", {"rbtreetest.c"}}, {"recog_bootnum1", {"recog_bootnum1.c"}}, {"recog_bootnum2", {"recog_bootnum2.c"}}, {"recog_bootnum3", {"recog_bootnum3.c"}}, {"recogsort", {"recogsort.c"}}, {"recogtest1", {"recogtest1.c"}}, {"recogtest2", {"recogtest2.c"}}, {"recogtest3", {"recogtest3.c"}}, {"recogtest4", {"recogtest4.c"}}, {"recogtest5", {"recogtest5.c"}}, {"recogtest6", {"recogtest6.c"}}, {"recogtest7", {"recogtest7.c"}}, {"reducetest", {"reducetest.c"}}, {"removecmap", {"removecmap.c"}}, {"renderfonts", {"renderfonts.c"}}, {"replacebytes", {"replacebytes.c"}}, {"rotatefastalt", {"rotatefastalt.c"}}, {"rotate_it", {"rotate_it.c"}}, {"rotateorthtest1", {"rotateorthtest1.c"}}, {"rotateorth_reg", {"rotateorth_reg.c"}}, {"rotatetest1", {"rotatetest1.c"}}, {"runlengthtest", {"runlengthtest.c"}}, {"scaleandtile", {"scaleandtile.c"}}, {"scaleimages", {"scaleimages.c"}}, {"scale_it", {"scale_it.c"}}, {"scaletest1", {"scaletest1.c"}}, {"scaletest2", {"scaletest2.c"}}, {"seedfilltest", {"seedfilltest.c"}}, {"seedspread_reg", {"seedspread_reg.c"}}, {"settest", {"settest.c"}}, {"sharptest", {"sharptest.c"}}, {"sheartest", {"sheartest.c"}}, {"showedges", {"showedges.c"}}, {"skewtest", {"skewtest.c"}}, {"sorttest", {"sorttest.c"}}, {"splitimage2pdf", {"splitimage2pdf.c"}}, {"splitpdf", {"splitpdf.c"}}, {"sudokutest", {"sudokutest.c"}}, {"textorient", {"textorient.c"}}, {"tiffpdftest", {"tiffpdftest.c"}}, {"trctest", {"trctest.c"}}, {"underlinetest", {"underlinetest.c"}}, {"warpertest", {"warpertest.c"}}, {"wordsinorder", {"wordsinorder.c"}}, {"writemtiff", {"writemtiff.c"}}, {"xtractprotos", {"xtractprotos.c"}}, {"yuvtest", {"yuvtest.c"}}, }; for (auto &[p, files] : m_progs) add_prog(p, files); } } #pragma optimize("", on) void check(Checker &c) { auto &s = c.addSet("leptonica"); s.checkFunctionExists("fmemopen"); s.checkFunctionExists("fstatat"); s.checkFunctionExists("dirfd"); s.checkIncludeExists("dlfcn.h"); s.checkIncludeExists("inttypes.h"); s.checkIncludeExists("memory.h"); s.checkIncludeExists("stdint.h"); s.checkIncludeExists("stdlib.h"); s.checkIncludeExists("strings.h"); s.checkIncludeExists("string.h"); s.checkIncludeExists("sys/stat.h"); s.checkIncludeExists("sys/types.h"); s.checkIncludeExists("unistd.h"); s.checkTypeSize("size_t"); s.checkTypeSize("void *"); } leptonica-1.86.0/version-notes.html000066400000000000000000002721301506303110300172620ustar00rootroot00000000000000
Creative Commons License This work is licensed under a Creative Commons Attribution 2.5 License.
/*====================================================================*
 -  Copyright (C) 2001 Leptonica.  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.
 -
 -  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 ANY
 -  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.
 *====================================================================*/

Version Notes for Leptonica

3 Jan 2024



Note: The following are highlights of the changes in each version. They are not a complete listing of the modifications.


1.86.0  Not released
        * Modify pixFindBaselines() to avoid joining textboxes and to
          ignore bogus textboxes when listing baseline end points.
        * Modify convertToPSEmbed() to efficiently encode webp input images.
        * Modify compressFilesToPdf() to allow upscale interpolation for
          low resolution pdfs.
        * Fix innocuous indexing error in pixFillMapHoles().
        * Source files changed: adaptmap.c, baseline.c, pageseg.c,
          pdfapp.c, psio1.c
        * Prog files changed: baseline_reg.c, binarizefiles.c,
          compresspdf.c, croppdf.c, misctest2.c,
        * Prog files added: baseline1.png, baseline2.png

1.85.0  Oct 16, 2024
        * Use wrapper callSystemDebug() instead of system() in programs.
        * Fixed Issue #730: artifacts and bad compression with pixWriteJp2k.
          Results are now identical with ImageMagick convert (to jp2).
        * With PR732, Anton Tykhyy made pix(Read,Write)MemJp2k work with
          direct memory access using openjpeg opj_stream functions. This
          removes need for temp file on Windows when writing to/from memory.
        * Achieve consistency with fclose() in library and lept_fclose()
          in progs.  Ditto for lept_free, lept_calloc, lept_fopen(), etc.
        * Fix generation of bad colormap indices in
          jbcorrelation and jbrankhaus
        * Fixed coverity scan issues.
        * Added findpattern2_reg.c to show generation of sels and their use.
        * Added misctest2.c to show crop and clean page functions.
        * Added page crop option for removing noise on left and right sides.
        * Added page crop option to allow printing to full width of paper.
        * Added page crop option to extract page within larger black image.
        * Added renderpdf.c to library, to render pdfs as page images with
          a specified resolution.
        * Modified cleanpdf.c to use l_pdfRenderFiles().
        * Issues #750, #752: problems in bmpio.c with taking address of
          packed member.
        * Source files changed: adaptmap.c affinecompose.c,
          bmpio.c, boxbasic.c, colormap.c, compare.c,
          dewarp1.c, dnabasic.c, fpix1.c, gifio.c,
          gplot.c, grayquant.c, jbclass.c, jp2kheader.c,
          jp2kheaderstub.c, jp2kio.c, jpegio.c, libversions.c,
          morphseq.c, numabasic.c, pageseg.c partify.c, pdfapp.c,
          pdfio2.c, pix2.c, pixabasic.c, pixcomp.c, pixconv.c,
          pnmio.c, psio2.c, ptabasic.c,
          readfile.c, recogbasic.c, renderpdf.c,
          sarray1.c, sel1.c, utils2.c, writefile.c,
          allheaders.h, environ.h
        * Prog files changed: alltests_reg.c, binmorph3_reg.c,
          blend2_reg.c, blend4_reg.c cleanpdf.c, compressedpdf.c, croppdf.c,
          findpattern_reg.c, findpattern1_reg.c findpattern2_reg.c,
          htmlviewer.c, jbcorrelation.c, jbrankhaus.c,
          jp2kio_reg.c, libre_makefigs.c, misctest1.c, misctest2.c,
          pdfio2_reg.c, printimage.c, printsplitimage.c,
          printtiff.c, psioseg_reg.c, splitpdf.c,
          string_reg.c, tiffpdftest.c, xtractprotos.c

1.84.1  Jan 3, 2024
        * Remove support for openjpeg versions < 2.1.
        * Improve error handling for stringLength() and stringCat(), and
          add tests in prog/string_reg.
        * Source files changed: blend.c, dnafunc1.c, jp2kio.c, pageseg.c,
          partify.c, pix1.c, ptafunc2.c, sarray2.c, utils2.c
        * Prog files changed: boxa3_reg.c, string_reg.c, writetext_reg.c,
          deskew_it.c

1.84.0  Dec 23, 2023
        * Add getPdfPageCount() to find the number of pages in a pdf file.
        * Add getPdfPageSizes() and getPdfMediaBoxSizes() to find the
          information necessary to render images properly.  Modify cleanpdf.c
          and concatpdf.c to use this information.
        * Add prog/splitpdf.c to split a pdf file into nearly equal page sets.
        * Add ability to read and write rgba in bmp format, and
          test in ioformats_reg.
        * Add regression test prog/partition_reg.c
        * Change the autotools library name from liblept to libleptonica,
          to be consistent with the cmake library name.  (Apologies to Jeff!)
        * Add tests for 24 bit pix reading and writing in bmp and png in
          ioformats_reg.  Test new pixDisplayDiff() for visualizing diffs.
        * Allow prog/concatpdf to output pdf with tiffg4 encoding and with
          mixed tiffg4 and DCT encoding depending on image color content.
        * Rename prog/concatpdf --> prog/compresspdf
        * Put image processing and generation of output pdf from compresspdf
          and cleanpdf into functions in new files: pdfapp.c, pdfappstub.c.
        * Add versatile function for cropping an image and filling to
          page size, along with prog/croppdf to do this on pdf file.

1.83.0  Dec 20, 2022
        * Simplify setting the title of pdf files.
        * Catch tiff failure to open stream in fopenTiffMemStream()
        * Check for POSIX functions fstatat() and dirfd() before use.
        * In prog/cleanpdf: do not allow threshold to exceed 190.  Make all
          parameters required; do not use default values for invalid parameters.
        * In prog/concatpdf: add input param for title; add jpeg quality factor
        * Fix flaky hash_reg test on i686: sets generated from SelectRange()
          can depend slightly on platform.
        * Convenience function for adding multiple black and white borders.
        * Fix oss-fuzz issue 42202: underined shift in l_convertCharstrToInt().
        * Fix oss-fuzz issue 43841: made pixCountPixels() more efficient.
        * Fix oss-fuzz issue 44008: pixCountArbInRect() used wrong depth.
        * Always return tiff resolution of 0 (unknown) if not set.
        * Simplify operations on pix memory to help avoid mem leaks
        * Make bmp non-support of 32-bit bmp (rgba) files explicit.
        * Improve tiff read resolution conversion by rounding.
        * Use stdatomic.h to make cloning string safe.
          Remove all *GetRefcount() and *ChangeRefcount() accessors.
        * Replace procName and mainName strings by __func__.
        * Remove information about fields in many structs from the public
          interface allheaders.h, instead putting them in internal files
          pix_internal.h, array_internal.h and ccbord_internal.h.
        * Increase the .so number from 5.4.0 to 6.0.0.
        * Rename the autotools generated libraries from liblept to libleptonica
        * Fix potential memory leaks from recogAverageSamples() and
          recogDebugAverages() by not destroying a recog.

1.82.0  Sept 22, 2021
        * Fix issue-585: reading tiff rgb with tiffbpl = 1.5 * packedbpl.
        * Fix issue-586: failure to properly wrap tiff-g4 in pdf without
          transcoding.  The fix is to do transcoding for tiff-g4, as was
          done before April 2021.

1.81.1  June 11, 2021
        * Added choice of codec (JP2 or J2K) when writing jp2k files.
        * Fix use of hashmap with key based on dna.

1.81.0  June 6, 2021
        * Fixed problems with tiff pdf wrapping photometry.
        * Fixed scaling issues in prog/cleanpdf for printing.
        * New progs: tiffpdftest, hashtest
        * Fixed uninitialized data error in pixAddBorderGeneral() and
          pixRemoveBorderGeneral()
        * Rewrote Numa functions that discretize into bins.  Have
          binning by both sorting and histogram. 
        * Rewrote and simplified pixGetRankColorArray() and pixGetBinnedColor().
        * Added tests to prog/rankbin_reg.c.
        * Simplified fpixCopy() and dpixCopy(), and functions that use them.
        * Check input for bilateral transforms.
        * Add function for splitting a file evenly by lines. 
        * Check input for getFilenamesInDirectory()
        * Many new fuzzers.
        * Use size_t for all size inputs to ascii85 encoding/decoding
        * New regression tests: encoding_reg.c, binmorph6_reg.c,
          flipdetect_reg.c
        * Reworked concatpdf for generality, using the Poppler package.
        * Removed dwa flipdetection from the library.  All the dwa code
          is now in flipdetectdwa.c.notused.  Likewise prog/flipselgen.c
          is retained for completeness, renamed flipselgen.c.notused,
          and is not compiled.
        * Added hashmap utility (hashmap.c, hashmap.h).
        * Removed functions using dnahash on strings, pts and doubles.
        * Improved the speed of hashing for strings and doubles.
        * Added function for tiling images in pairs for comparison.
        * Added null terminations to serialized strings written to memory,
          preventing buffer overrun by strlen() [fixed by Stefan Weil].
        * No longer use "NoInit" versions of pix creation in leptonica.
          because they risk reading uninitialized data.  These functions
          remain in the library because they are in use in applications.
        * Add two composite binarization functions, from prog/binarize_set.
        * Giulio Lunati fixed pnm reading to work with stdin input.
        * Removed several of the boxa compare and modify functions.
        * Implemented reading jpeg200 data encded in j2k "codestream" format.
          Can now read data in both jp2 and j2k.

1.80.0  28 July 2020
        * Improve bmp handling of 1 bpp images and sanity checking of params.
        * Add function to display all rgb gamut colors
        * in Makefile.am, use option serial-tests to avoid races in testing
        * Make m4 subdirectory and add ax_split_version.m4 there
        * Simple function for hue-invariant mapping (pixMapWithInvariantHue)
        * Fixed bug in limit of ptra size when used for sorting by bins.
        * Use hashmap to count pixel colors in RGB(A) images.
        * Convert hashtest program to regression test hash_reg.
        * Convert croptest program to regression test crop_reg.
        * New color segmentation by region growing (colorfill.c)
        * New regression tests: colorfill_reg, circle_reg, ccbord_reg.
        * Set maxima for all allocations for common leptonica data structures.
        * Don't fail when downscaling 2, 4, 8, and 32 bpp images, even
          to one pixel, invoking pixScaleSmooth().
        * New functions that select 1 bpp components based on their area.
        * Incremental addition to sorted array of numbers.
        * new prog/fuzzing directory for oss-fuzz based fuzzing programs
        * use of pixcmapIsValid() with extra argument to determine validity
          with the pix it is attached to.
        * Use lept_stderr() in all programs in the prog directory.
        * New program rasteroptest() for thorough testing of rasterop functions.
        * Removed the pixSaveTiled*() functions
        * Stubbed pixDisplayWrite().  Last used in tesseract 3.04.01 (2/2016).

1.79.0  1 Jan 2020
        * Clean up auto-generation of files; removed 'register'
        * Some fixes for issues identified by fuzzer
        * New source files: checkerboard.c
        * New programs: replacebytes.c, webpanimio_reg.c, partifytest.c,
          rectangle_reg.c, lowsat_reg.c, rotate_it.c, scale_it.c, dewarp_it.c,
          pdfio1_reg.c, pdfio2_reg.c, checkerboard_reg.c, underlinetest.c.
        * Convert to standard reg test: heap_reg.c, pixa1_reg.c, smallpix_reg.c
        * Improve data checking when reading image file headers
          (pnm, png, jpeg, tiff)
        * Fix some bugs in pnm reading
        * Fix inconsistencies with the encoding type flags in pdf writing
        * Allow tiff to write images with colormaps
        * Fix errors in PS code; made some functions static
        * Add code for animated webp (requires webp mux and demux libraries)
        * Add "partify" application for separating parts in a musical score
        * Enable tif read/write of gray+alpha and rgba; filter out tiff
          pixels that are not uint and compression by tile
        * Apply consistent formatting of static const variables
        * Add programs for scaling, rotation and deskew, named dewkew_it,
          rotate_it and scale_it, for useful operations on arbitrary images.
        * Convert pdfiotest program to two regression tests: pdfio1_reg
          and pdfio2_reg.
        * Remove all use of strncat; use stringCat().
        * New functions from removing outliers in sequences of boxes.
        * Generalize pixAverageInRect(): mask, region and range filters,
          and subsampling.  New pixAverageInRectRGB().
        * Fix int overflow bug in pixMedianCut(); required new heap accessor.
        * New pixMultiplyGray() allows pix to be multiplied by an array (or
          another pix)
        * Better routines for counting color.
        * Lossless conversion for RGB to cmap with not more than 256 colors.
        * New histo based global thresholding: pixThresholdByHisto().
        * Allow most reg tests to run even if external libraries are not
          available.
        * New one-line gplot functions that return a pix.
        * New application to find where corners meet in a checkerboard.
        * Add utility functions for painting through mask in cmap pix,
          creating a hit-miss sela from a color pix, equality of two pta.
        * Proper handling of 1 bpp colormap tiffs: remove when reading,
          preserve when writing.
        * Deprecate three pixSaveTile*() functions; removed all calls to
          these from the library and progs.
        * Include auto_config.h explicitly in all src and prog files.
        * Improve input data checking for bmp files.
        * Added pixAutoPhotoinvert() for tesseract, to automatically photo-
          invert text regions where the background is black and text is white.

1.78.0  21 Mar 19
        * Various improvements in handling boxa sequences and transforms.
        * New regression tests: boxa4_reg, string_reg
        * New function for copying a pix, filtered by a boxa.
        * Modify histogram method for image comparison.
        * More careful attention to invalid boxes in box geometry functions.
        * Better string and array functions for search and replace.
        * Convenience functions for generating simple masks.
        * Allow pdf writing of jp2k images, in full generality.
        * Allow writing compressed ps images for printing.
        * Modified enum comments to include a suggested enum name.
        * New program: imagetops

1.77.0  14 Dec 18
        Here is the current status of CVE issues with leptonica; see
          https://security-tracker.debian.org/tracker/source-package/leptonlib
        * CVE-2018-7442: potential injection attack because '/' is allowed
          in gplot rootdir.
          Functions using this command have been disabled by default in the 
          distribution, starting with 1.76.0.  As for the specific issue, it 
          is impossible to specify a general path without using the standard
          directory subdivider '/'.
        * CVE-2018-7186: number of characters not limited in fscanf or sscanf,
          allowing possible attack with buffer overflow.
          This has been fixed in 1.75.3.
        * CVE-2018-3836: command injection vulnerability in gplotMakeOutput().
          This has been fixed in 1.75.3, using stringCheckForChars() to block
          rootnames containing any of: ;&|>"?*$()/<
        * CVE-2017-18196: duplicated path components.
          This was fixed in 1.75.3.
        * CVE-2018-7441: hardcoded /tmp pathnames.
          These are all wrapped in special debug functions that are not
          enabled by default in the distribution, starting with 1.76.0.
        * CVE-2018-7247: input 'rootname' can overflow a buffer.
          This was fixed in 1.76.0, using snprintf().
        * CVE-2018-7440: command injection in gplotMakeOutput using $(command).
          Fixed in 1.75.3, which blocks '$' as well as 11 other characters.
        Wrapped the few 'system' calls in an extra layer of debug code.
        More coverity scan fixes; defects are about 1 per 10,000 source lines.
        New regression tests: numa1_reg, numa2_reg, lowaccess_reg,
          pixmem_reg.
        New non-regression test programs: histoduptest
        Juergen Buchmueller is working on Lua bindings.  He typedef'd l_ok
          and used it in 1100 functions that return a success/failure status.
          He also helped clean up remaining issues in the doxygen-generated
          documentation.
        Using a packed struct for bmp headers to avoid crash on
          some big-endians.
        Fixed a bug in the prototype parser for xtractprotos that was
          surfaced by a typedef declaration for the bmp headers.
        Cleaned up IOS guards to avoid compiling a system(3) call on IOS.
        Renamed autobuild --> autogen.sh
        Added some basic pixa functions for rotation and translation.
        Added an iterative method to find rectangular coverings for
          arbitrary connected components.
        Converted two tests to reg tests running in alltests_reg:
          ptra1_reg, ptra2_reg
        Enabled read/write for standard jpeg compressed tiff images.
        Enabled reading for the old (deprecated) jpeg-encoded tiffs.
        Fix range selectors for pixa, pixaa, boxa, boxaa, pta:
          Now, last = -1 goes to the end.
        When reading tiff --> pix, insert IMAGEDESCRIPTION into text field.
        Converted iotest to reg test iomisc_reg; added to alltests_reg
        Converted rasterop_reg into a standard regression test; added
          to alltests_reg.
        Converted boxa2_reg and fhmtauto_reg into standard regression tests;
          added to alltests_reg.
        Split boxa sequence functions out of boxfunc4.c, into a new boxfunc5.c.
        Simplified bmp header and made reading more clearly endian
          agnostic (Juergen Buchmueller)
        New boxa3_reg regression test. This tests sequences of boxes
          by two new boxfunctions in boxfunc5.c.
        New bootnumgen4.c for more digit templates.
        Rename prog/recog_bootnum.c --> prog/recog_bootname1.c
        New in prog: recog_bootnum2.c, recog_bootnum3.c, recogtest7.c
        Fixed uninitialized data in pixCentroid() on 1 bpp pix.
        New reg test: bytea_reg.c.  (removed byteatest.c)
        Fixed bug in non-transcoding pdf generation from 1 bpp png.
        Added LGTM to static analyzers that run over the library.

1.76.0  1 May 18
        Modify infrastructure to fix outstanding security issues. By default,
          you can no longer create temp directories and temp files whose
          names are known to the compiler.  Also, prevent "system" calls,
          which were used for image display and gnuplot.
        Replaced remaining sprintf() with snprintf() in prog tests.
        Added non-transcoding functions for generating pdf from jpeg pixacomp
        Add control of jpeg quality from pixWriteMem() and pixWriteStream()
        Fixed getFilenamesInDirectory() to properly identify directories
        Prevent size overflow in calloc for kernel; cleaned it up fpix and dpix
        bmp reading now accepts negative height
        Simplified splitimage2pdf; it no longer uses ps2pdf
        Remove name-mangling WRITE_AS_NAMED compile option.
        Removed 2 deprecated write functions.
        Added these regression tests:
           locminmax_reg, speckle_reg, watershed_reg,

1.75.3  15 Feb 18
        Fixed some coverity scan issues.
        Autotools fix to check for png if enabling gnuplot (James Le Cuirot).

1.75.2  11 Feb 18
        Converted several progs to standard regression tests.
        Added these tests to the alltests_reg suite:
         adaptnorm_reg, binmorph1_reg, binmorph3_reg, equal_reg,
         extrema_reg, grayfill_reg, falsecolor_reg, grayquant_reg.
        Autotools fix for restricting giflib to 5.1+, and allowing
        openjpeg 2.3 (James Le Cuirot).

1.75.1  31 Jan 18
        Simpler and more accurate function for finding word masks from
        text image; better debugging and more thorough testing.
        Added to regression test set: prog/italic_reg
        Fix for potential injection attack using gplot rootdir.
        Bug fix for bmp reading to set opacity.

1.75.0  24 Jan 18
        This is a new version, for major Ubuntu release 18.04.
        $TMPDIR path rewriting turned off on Unix; only used for Windows.
        Added pix conversion to depth 2 and 4.  We now have general
          converters to 1, 2, 4, 8, 16 and 32 bpp. 
        Modified giflib to use read/write from/to memory; no temp files;
          no longer support versions before 5.1.
        Move most low-level code from separate files to their callers;
          about 30 of them became static.
        Improved table detection on scanned page images (tests: pageseg_reg.c)
        Added support for write/compare regression tests for files.
        Modified printimage for more flexibility.
        Enable lookup by key on comma-separated key/value text file.
        Update README.html for building with Visual Studio.
        Improved functions for getting pixel averages in RGB images
        Simplified and speedup of unsharp masking.
        New function for detecting and correcting text orientation. 
        Remove slow sharpening operation when not appropriate during scaling.
        Better handling of gplots with 0 or 1 data point.
        Coverity scan fixes.
        Modified jpeg2000 header to use openjpeg 2.3.
        Improved depth accessors for pixa and pixaa; added size accessors
          for pixa and pixaa.
        Bug fix in webp interface on read error.
        New function that finds the closest boxes in a boxa to any particular
          box, in each of 4 directions.
        New regression tests in automated sequence: blend5_reg, quadtree_reg,
        wordboxes_reg.
        New program: textorient
        Removed programs: snapcolortest

1.74.4  11 Jun 17
        Converted two progs to reg tests
        New version because 1.74.3 had some spurious files (xtractprotos,
        endianness.h)

1.74.3  9 Jun 17
        Coverity scan fixes.
        Several fixes for running on Windows, including subtle one with tiff
        encoding depending on pad bits.
        Utility and test if a page image likely has a table.
        Remove use of pixCreateTemplateNoInit() where it may cause problems.
        Make release 'configure-make ready'

1.74.2  19 May 17
        Many simplifications and improvements to recognizer.
        Cleanup of doxygen comments
        Encoded pdf title in escape 4-byte hex (for safety)
        Fixed several hundered coverity scan possible leaks
        Added about 20 regression tests to the automated set.
        Improved vertical alignment of dewarp.
        Implemented preliminary method for correcting dewarp foreshortening
        due to page curvature.
        Improved multipage tiff reading and writing.
        Added a new version of textline finding.
        Fixed bug in fast 2D sharpening code (used in some scaling ops)
        BMP i/o rewritten to implement memory version directly.
        PNG i/o functions added for encoding and decoding directly to memory.
        Method for finding light color regions on scanned page images.

1.74.1  3 Jan 17
        Configuration changes to support the patch number in the
        version (major.minor.patch).
        Removed all remaining pixDisplayWrite() calls in prog/.
        Cleaned up and/or promoted about 15 programs to full regression
        tests.  There are now 95 tests in the regression set.
        Over half the initial coverity scan warnings have been removed.

1.74.0 10 Dec 16
       Leptonica development was moved to github.  The master is at:
          github.com/danbloomberg/leptonica
       Egor Pugin is the maintainer of the site.
       A very large number of changes have been made.  Some of them follow;
       details can be found in the git commit messages.
       Static makefiles modified to work with gnu*9 and c*9.
       Modify SET macros to work on windows.
       New modes for RGB --> gray conversion.
       New functions added for displaying a pix from a pixa.
       Split out sort/hash/set/map functions for dna, sarray and pta.
       More robust horizontal deskew on multi-column page images.
       Improve webpio_reg test.
       Remove X11 display for gplot; it is no longer supported.
       Remove most sleep calls, which were put in for gplot; no longer needed.
       Removed use of gthumb in library.
       Removed use of pixDisplayWrite() in the library; still in some progs.
       Improved test for endianness in makefile.static; no longer requires
       any local files or building and running a program.
       Modified all files for doxygen output (spearheaded by
          Juergen Buchmueller)
       Improved plotting of the boxes in a boxa.
       Replaced the slow point hash function with a simple fast one.
       Added pam (4 component) format writing to pnmio.c (Juergen Buchmueller)
       Improved rendering of pixa in side/by/sides.
       Better utilities for pixa and pixacomp.
       Add read/write serialization functions from/to memory for all
       the major data structures that do not already have them.
       More serialized boot recognizers stored as self-generating code.
       Cleaned up generating an adapted recognizer from the boot recognizer.
       Simplified temp file naming; removed most instances of named
       temp files from non-debug code; use tmpfile() and a wrapper
       l_makeTempFilename().
       Simplify and streamline multipage tiff reading (Jeff Breidenbach).
       Improvement of Otsu thresholding.
       Recognize outstanding contributors to leptonica over the years.
       New gif mem read/write interface that avoids writing a temp file,
       contributed by Tobias Peirick.
       Use double arrays (dna) instead of float (numa) for set ops.
       Enrolled in coverity scan to find potential bugs (Stefan Weil
       managed it). Fixed about 200 of them, mostly potential memory
       leaks from early function exit.
       Cleanup of gray quantization functions and tests.
       Refactored connectivity-conserving operations, to make them more useful.
       Provided methods for measuring and regularizing the width of strokes.
       Removed viewfiles.c from library; code is now in prog htmlviewer.c.
       Better debugging in page segmentation (pageseg.c)
       Deprecated the pixDisplayWrite*() debugging methods.
       Added about 15 regression tests to the framework in alltests_reg.c
       Final mods for compatibility with tesseract 4.00.
           
1.73   25 Jan 16
       All lept_* functions have been rewritten to avoid path rewrites for
       output to temp files, which were introduced in 1.72.
       Now, (1) files are written to the directory specified and (2) we
       are careful to write to subdirectories of /tmp/lept/ for all test
       programs, starting with the reg tests and prog/dewarp* and
       prog/recog*.  This also required re-writing stringcode.c and
       stringtemplate1.txt to write temp files to subdirectories.
       Goal is to write to the specified path while not spamming the
       /tmp and /tmp/lept directories.  This is particularly important
       on windows because files in the  directory are not cleared
       on reboot.
       Naming changes (to avoid collisions):
         #defines MALLOC --> LEPT_MALLOC, CALLOC --> LEPT_CALLOC, etc.
         ByteBuffer --> L_ByteBuffer
       Added grayscale histogram functions that can be used to compare images.
       Added functions to determine if an image region has horizontal
       text lines.
       Added functions to compare photo regions of images to determine
       if they're essentially the same.
       Added red-black tree utility functions to implement maps and sets.
       The keys for maps and sets can be 64-bit entities (signed and
       unsigned integers and doubles).
       Implemented hashsets and hashmaps, using 64 bit keys.
       Replaced the numaHash by l_dnaHash; removed numa2d
       Improved security of tiff and gif reading, to prevent memory corruption
       when reading bad data.
       Removed src files: bootnumgen.c
       Added src files: rbtree.c, rbtree.h, map.c, bootnumgen1.c, bootnumgen2.c
       Added prog files: rbtreetest.c, maptest.c, settest.c, hashtest.c,
                         recog_bootnum.c, percolatetest.c
       Added files for building using cmake (Egor Pugin)

1.72   5 Apr 15
       Better handling of 1 bpp colormap read/write with png so that
       they are losseless.  The colormap is always removed on read and
       the conversion is to the simplest non-cmapped pix that can fully
       represent the input -- both with and without alpha.
       Fixed overflow bug in pixCorrelationBinary().
       Fixed orientation flags and handling of 16 bit RGB in tiff.
       Also new wrappers to TIFFClientOpen(), so we no longer go through
       the file descriptor for memory operations.
       Improvements in the dewarp functions.
       New box sequence smoothings.
       New antialiased painting through mask; previously it was only
       implemented for connected components in a mask.
       Better error handling and debug output with jpeg2000 read/write.
       Implemented base64 encoding.  This allows binary data to be represented
       as a C string that can be compiled.  Used this in bmf utility.
       Implemented automatic code generation for deserialization from
       compiled strings (stringcode.*)
       Regression tests write to leptonica subdir of  in windows; in
       unix it is optional.  This avoids spamming the  directory.
       Added new colorspace conversions (XYZ, LAB).
       New source files: encoding.c, bmfdata.h, stringcode.c, stringcode.h,
         bootnumgen.c.
       Removed source files: convolvelow.c, graymorphlow.c
       New programs: genfonts_reg, colorize_reg, texturefill_reg,
         autogentest1, autogentest2.
       alltests_reg now has 66 tests.

1.71   18 Jun 14
       This version supports tesseract 3.04.  In particular, 3.04
        has automatic conversion of a set of scanned images, either in a
        directory or coming directly from a scanner, into pdf with injected
        text.  This is something we've wanted to do for several years!
       Improved jp2k header reading, including resolution.
       Removed src files: rotateorthlow.c, pdfio.c, pdfiostub.c
       Renamed jp2kio.c, jp2kiostub.c ==> jp2kheader.c, jp2kheaderstub.c.
        These header reading functions parse the jp2k files, and
        don't require a jpeg2000 library.
       New jp2kio.c, jp2kiostub.c, that uses openjpeg-2.X to read
       and write jp2k.  We now support I/O from these formats:
         png, tiff, jpeg, bmp, pnm, webp, gif and jp2k
        as well as writing to PostScript and pdf.
       New pdfio1.c, pdfio1stub.c, pdfio2.c pdfio2stub.c, where we've
        split functions into high and low level.
       Fixed memory bug in bilateral.c
       Improved reading/write of binary data from file.  For example,
        l_binaryReadStream() can now be used to capture data piped
        in via stdin.
       Font directory now arg passed in everywhere (not hardcoded)
       Don't write temporary files to /tmp; only to a small number of
       subdirectories, to avoid spamming the /tmp directory.  E.g.,
       for regression tests, the current output is now to /tmp/regout/.
       For jpeg reading modify pixReadJpeg() to take as a hint
        a bit flag that allows extraction of only the luminance channel.
       Allow wrapping of pdf objects from png images without transcoding
        (thanks to Jeff Breidenbach)
       Better support for alpha on read/write with png, including
       1 bpp with colormap, alpha (supported in png with transparency array)

1.70   3 Feb 14   (distribution to debian; ubuntu 14-04; 4.1.0)
       New bilateral filtering.
       New simple character recognition utility.
       Improved dewarping functionality, in model building and rendering.
        More flexible use of ref models.
       Better and more consistent handling of alpha layer in RGBA, though
        use of the spp field.  Ability to handle more png files with alpha,
        including palette with alpha.
       New fast converters from jpeg and jpeg2000 to pdf, without transcoding.
       Made bmp reader (and pix reading in general) more robust; avoid
        size overflow errors.
       New text labelling operations; depth conversion of a set of images
       New license (essentially BSD 2-clause), to specify conditions
        for both source and binary distribution.
       Improved auto make: make all progs, install just 11, test 61.
       New src files: bilateral.{c,h}, dewarp1.c, dewarp2.c,
           dewarp3.c, dewarp4.c, jp2kio.c, jp2kiostub.c,
           pixlabel.c, recogbasic.c, recogdid.c, recogident.c,
           recogtrain.c, recog.h
       New prog files: adaptmap_dark.c, alphaxform_ret.c,
           bilateral_reg.c, binarize_reg.c, binarize_set.c,
           blackwhite_reg.c, blend1_reg.c, blend3_reg.c, blend4_reg.c,
           boxa1_reg.c, colorcontent_reg.c, coloring_reg.c,
           colorspace_reg.c, compare_reg.c, converttopdf.c,
           croptest.c, dewarprules.c, dewarptest1.c, dewarptest2.c,
           dewarptest3.c, dewarptest4.c, displayboxa.c, displaypix.c,
           displaypixa.c, findcorners_reg.c, fpix1_reg.c,
           fpix2_reg.c, fpixcontours.c, insert_reg.c, italictest.c,
           jpegio_reg.c, label_reg.c, multitype_reg.c, nearline_reg.c,
           newspaper_reg.c, numa1_reg.c, numa2_reg.c, recogsort.c,
           recogtest1.c, shear1_reg.c, webpio_reg.c, wordboxes_reg.c
       Removed src files: arithlow.c, binexpandlow.c, binreducelow.c,
           dewarp.c
       Removed prog files: blend_reg.c, blendtest1.c,
           dewarptest.c, fpix_reg.c, inserttest.c, numa_reg.c, rotatetest2.c
           shear_reg, xvdisp.c

1.69   16 Jan 12   (distribution to debian; ubuntu 12-04; 3.0.0)
       Fixed bug in pdf generation for large files, using a new
        double array (dnabasic.c).  Added several new modes for pdf
        generation from sets of images.
       Dewarp based on image content now aligns to left and right margins;
        works at book level; is more robust to bad disparity models;
        version 2 serialization.
       Fixed regutils to return the actual number of errors.
       Improved sorting efficiency of numas in cases where binning,
        which is order N, makes sense.
       Fixed fpix serialization (now version 2).
       New version (5) of xtractprotos, allows putting prototypes in-line in
        allheaders.h.  Having them separately in leptprotos.h still an option
       New copyright (BSD, 2 clause) on src files.
       Removed all trailing whitespace in src files.
       New src files: boxfunc4.c coloring.c, dnabasic.c
       New prog files: dna_reg.c, alphaops_reg.c
       Removed prog file: alphaclean_reg.c

1.68   10 Mar 11
       Fixed windows issues with passing pointers across C-runtime boundaries
       when using dlls, by providing special functions (e.g., lept_fopen()).
       Proper version numbers are now set with automake.
       New utility (quadtree.c) for generating quadtree statistics.
       New utility (in colorspace.c) for conversions to and from YUV.
       Refactored functions for assembling image data for generating
       either PS or PDF images using g4, jpeg or flate encoding.
       Better tempfile names, using current time in microseconds.
       Functions for getting resolution from jpeg and png files.
       Use size_t throughout for reading and writing binary data.
       Deprecate arrayRead*() and arrayWrite() functions; replace in
       the library with l_binaryRead*() and l_binaryWrite().
       Better handling of colormap images for in-place rasterop and shear.
       New utility (bytearray.c) for parsing and handling binary data;
       used for generating PDF files.
       New utility (pdfio.c) for generating PDF files.
       Refactored regutils functions to make them simpler to use.
       Top-level deskew now works on any image.
       Added functions in utils.c for cross-platform development, mostly
       for functions that make and remove directories, copy, move
       and delete files, etc.  It should now be straightforward to write
       programs that will compile and run on windows.
       Reg tests have better printout; all give timings.
       New utility program: convertfilestopdf

1.67   9 Nov 10
       Autoconf: now built with James Cuirot's config files that
         build the library and all 200 progs.
       New sudoku solver.  Just a game, but there are interesting aspects.
       Modified parseprotos.c to reject a type of "extern" decl.
       Add faster implementation for very small gray morphology
         operations (3x1, 1x3, 3x3).
       Eliminate warnings on recent gcc if you don't check return values
         from fread, fscanf, fgets, system, etc.
       Convolution: new functions for windowed variance and stdev; allow
         non-square kernel for windowed mean square.
       Put stdio.h and stdlib.h in alltypes.h, so they're not required
         in any .c files.
       Replace numaConvolve(), which is just a windowed mean, by
         windowed statistics functions (mean, mean square, variance).
       Generalize pixExtractOnLine() for arbitrary lines.
       Add pix interface to webp (webpio.c, webpiostub.c).  This is a
         new open source codec, based on the video codec vpx (webm).
       Serialization of FPix and DPix
       Interconversion between FPix and DPix
       Integer scaling of FPix and DPix; includes the last row and column.
       New convertfiles.c: depth conversion on files in a directory.
       Testing programs in prog:
           convolve_reg.c, numa_reg.c: expanded test set
           projection_reg.c (tests pixRowStats(), pixColumnStats())
           dewarptest.c: output ps and pdf files
           writemtiff.c: simple driver to write images to a single file

1.66   3 Aug 10
       More tweaks for including (or not) bounding box hints for
         PS wrapping.  Default is to write b.b., but not in functions
         that wrap images as full pages (psio1.c, psio2.c)
       pix4.c split in two files, and added function to identify c.c.
         that are sufficiently similar in shape to rectangles (pix5.c)
       Modify 2 and 4 bit setters to clip the input value so that it can
         only affect the pixel requested (arrayaccess.c, arrayaccess,h)
       New pseudorandom sequence functions (numafunc1.c)
       Dewarping camera-based images using textlines (dewarp.c, prog/dewarp*)
       Geometrical function for aggregating overlapping bounding boxes.
       Programs to generate figures for book chapter "Document Image
         Applications" in "Mathematical Morphology: theory and applications"
         (see: http:/www.leptonica.org/najman-talbot-book-chapter.html)
         (prog/livre*.c)
       Functions that do affine and other operations in images with
         alpha blending at edges: pix*WithAlpha().  Also do this
         with a gamma/inverse-gamma wrapper to further reduce edge aliasing.
          (rotate.c, scale.c, projective.c, affine.c, bilinear.c,
           prog/alphaxform_reg.c)
       Improved color segmentation (fixed bugs; made faster)
       Higher order least square fits: quadratic, cubic, quartic. (pts.c)
       Various mods for otsu binarization and the *SplitDistribution*()
         functions (numafunc2.c, prog/otsutest2.c)
       Control sampling in convolution output (convolve.c, prog/fpix_reg.c)
       Morphological operations on numas (numafunc1.c, numafunc2.c,
         prog/numa_reg.c)
       Pix serialization wrapped so we can use pixRead(), etc on these
         files (spixio.c, readfile.c, writefile.c)
       Gif read/write to memory fixed (and cheated -- using files) (gifio.c)
       New fpix and dpix accessors; contour rendering on fpix (fpix1.c, fpix2.c)
       Various functions for linearly mapping colors and displaying arrays
         of colors (pix4.c, blend.c, prog/rankhisto_reg.c)
       Functions for getting approximate ranges of colors and color
         components in an image (pix4.c, colormap.c)
       Cleaned up windows platform and compiler defines and macros.

1.65   5 Apr 10
       Added regression test utility functions for standardizing and
         automating construction and running of regression tests.  Makes the
         golden files when the 2nd arg to the reg test is 'generate'.
         (regutils.{c,h})
         Converted 22 reg tests in prog to use this; invoked with alltests_reg.
         Goal is to put all prog/*_reg.c into this format and put a set
         of golden files on the web.
       Small fixes in gifio for handling streams properly.
       New functions for shifting colors, hue invariant transforms, etc
         (blend.c)
       prog/dwamorph*.c: rename *1_reg.c to dwalineargen.c; others
         converted to standard reg tests.
       New rgb convolution functions.
       For PS output, write all images with a bounding box hint and with
         page numbers, which works for both embedded (e.g., in tex) and
         full page generated PS.  Once converted to pdf, this is fine
         in all situation.
       New functions for initialization and random insertion with pixcomp.
       For color quantization, make the lightest color white if sufficiently
         close; ditto for black (colorquant1.c, colorquant2.c).
       Rank binning of 8 bpp and rgb images (numafunc2.c, pix4.c)
       A function to rank colors by the intensity of the minimum comp (pix4.c)
       New pixRotateBinaryNice(), rotates 1 bpp pix in such a way that
         the shear lines aren't visible. (rotate.c)
       New pixSaveTiledWithText(), a convenience function to append text
         to images that are being tiled. (writefile.c)
       Stereoscopic warping functions and stereo pair functions (warper.c)
       Linear interpolated shear -- better than rasterop shear (shear.c)
       Option to use higher quality chroma (U,V) sampling in jpeg (jpegio.c)
       Rename Bmf --> L_Bmf.
       New tests in prog:
         alltests_reg.c alphaclean_reg.c, psio_reg.c, rankbin_reg.c,
         rankhisto_reg.c, warpertest.c

1.64   3 Jan 10
       Easy setup for standard byte processing on 8 bpp pix (pix2.c)
       Evaluation of difference between similar images; test for
       similar images and (compare.c)
       Subpixel scaling, with color input and separate scale factors (pixconv.c)
       Fix tiff header reader to get correct format (tiffio.c)
       Enable pixDisplay() to work with i_view (windows) and with
         xzgv and xli as well as xv; allow application to choose
         which to use (writefile.c).
       Use a mask to specify regions that are changed by a morphological
         operation (morphapp.c).
       Improve the default sharpening for scaling (scale.c)
       Function to test for equivalence of file data (utils.c)
       Select and read image files with embedded index (readfile.c)
       Fix box size calculation in pixEmbedForRotation(); solution
         provided by Brent Sundheimer.
       New pixDisplayMultiple(), instead of calling gthumb directly; this
         is now set up to use i_view for windows.
       Changed criteria for determining if an image is color (colorcontent.c,
         colorquant{1,2}.c.
       Optional mode where the filename extension is automatically written
         to output image files; particularly useful for windows.
       Initialize boxa and pixa as full, with minimal placeholders.
       Get rank valued numbers and boxes in numa and boxa.
       Cute implementation for finding largest solid rectangle (maze.c)
       New median cut quantization for mixed (color/gray) images (colorquant2.c)
       Many changes to allow the library and applications be built easily
         in windows.  There is now a thorough windows readme, written by Tom
         Powers, for doing this.  The windows build information and
         project files are now in a new vs2008 directory.

1.63   8 Nov 09
       Added pixScaleToGrayFast(), a faster version with very similar quality.
       Fixed scaleGrayLILow() to handle edge pixels more accurately
       Text processing:
         new text application (finditalic.c, prog/finditalic.c) for locating
           words in italic type style.
         Easier to add text to a pix using the bitmap font stored in
           the font directory; see, e.g., prog/writetxt_reg.c.
       Blending of 2 images with an alpha channel: pixBlendWithGrayMask()
       Fixed bug in color segmentation; it now (again) works properly.
       New utility (pixcomp.c) for handling compressed pix arrays in
          memory; new PixComp and PixaComp structs.
       Fast serialization of pix without compressing (pixSerializeToMemory
          and pixDeserializeFromMemory); required serialized colormaps
       FileI/O: new functions for reading file headers.
          PostScript generation modernized; split psio.c into psio1.c
            and psio2.c; added level 3 (flate) encoding.
          new functions for reading and writing multipage tiffs, for
            arbitrary input images.  For writing, compression is lossless
            (either g4 or zip)
          update all I/O stub files
       Miscellaneous: new pixaAddBorderGeneral(); new functions in pix3.c
          for counting fg pixels and summing 8 bpp pixels by column and row;
          new numaUniformSampling() for resampling with interpolation;
          subpixel scaling.
       New or improved regression tests in prog:
          extrema_reg, pixalloc_reg, blend2_reg, rotateorth_reg,
          ioformats_reg, colorseg_reg, pixcomp_reg, pixserial_reg,
          writetext_reg, psioseg_reg, subpixel_reg.
       Interface changes:
         findFileFormat() and findFileFormatBuffer(): now returns format
             using input ptr.  The function return value is 0 if OK; 1 on error
         rename: pixThresholdPixels() --> pixThresholdPixelSum()

1.62   26 Jul 09
       Expanded composite Dwa implementation as a sequence of operations,
       so that it now works beyond a size of 63.  It's typically about 2x
       faster than the composite rasterop implementation (with help
       from Ankur Jain).  Also use data transfer instead of data copy
       whenever possible.  Thorough tests with binmorph4_reg and binmorph5_reg.
       New functions in colorseg.c for masking and histogramming in HSV
       color space.
       Treat string constants rigorously as const char*, initializing
       to char[] if to be used as non-const, or in some cases casting
       to char*.  This avoids compiler warnings.
       Improved color quantization using existing colormap for octcubes
       and a new version for grayscale.  This will rigorously map most
       black and most white octcubes (rsp) to black and white
       if they exist in the colormap.
       Fast quantization to an existing colormap for color and grayscale.
       Fixed some bugs; e.g., in pixAffineSampled() for 1 bpp with
       L_BRING_IN_BLACK; reading and writing pnm for 2 and 4 bpp.
       In pngio.c, enable compile time control over these settings:
         converting 16 bpp --> 8 bpp on read
         removing alpha channel on read
         setting zlib compression on write
       For general scaling, allow sharpening to be optional, and provided
       faster sharpening operations.
       Improve support for 16 bpp grayscale.
       For scaleToGray* functions, reduce the width truncation.
       In psio.c, new functions for converting segmented page images
       (text and image) into level 2 PostScript.
       Removed all implicit casting to const char*.
       New custom pix memory allocator, designed for large pix whose
       memory needs to be reused many times.
       In xtractprotos, we now allow prepending an arbitrary string to
       each prototype.
       In environ.h, additions for MSVC to work with VC++6, including
       prototpye strings for dll import and export (thanks to Ray Smith).
       In colorseg.c, new functions for building HSV histograms, finding 
       peaks, and generating masks based on the peaks.
       New or improved regression tests:
         pixalloc_reg, binmorph4_reg, binmorph5_reg, conversion_reg,
         scale_reg, cmapquant_reg, 

1.61   26 Apr 09
       New histo-based grayscale quantization: pixGrayQuantizeFromHisto(),
       that is used in new pixQuanitzeIfFewColorsMixed().
       Made final fix in pixBlockconv().  No underflows; no more overflows!
       More efficient rgb write with pnm.
       Add proto to jpegiostub.c, allowing proper use of the stubber.
       Fix several filter functions to use proper test on filter size; viz.,
         pixMinMaxTiles(), several functions in convolve.c.
       Redo shear implementation to handle arbitrary angles, to handle
         colormapped images, and to avoid the singularity at pi/2.
       Removed both static vars from pixSaveTiled().
       Generalized pixRotate() to handle colormapped images, and to use
         pixRotateBySampling() in place of the removed pixRotateEuclidean().
       New skew finder for full angle range, pixFindSkewOrthogonalRange().
       For skew detection, now allow shear about image center as well as
         about the UL corner.
       New rotation reg tests: rotate1_reg.c and rotate2_reg.c.
       Better serialization format for boxaa; introduce new version numbers
         for boxaa, pixa, and boxa, as required.
       Proper init in boxGetGeometry(), boxaGetBoxGeometry(), and the
         accessors in sel1.c and kernel.c.
       Improved Numa functions in numafunc1.c and numafunc2.c; in
         particular, numaMakeHistogramAuto() and numaGetStatsUsingHistogram().
         With all histo generators, make sure the start and binsize params
         are properly set and are used.
         Interface change: Use these parameters implicitly in
         numaHistogramGetRankFromVal() and numaHistogramGetValFromRank().
       Interface change to ptaGetLinearLSF(): add 1 optional parameter.
       In several pixaDisplay*() functions, handle colormaps properly.
       pixafunc.c split to pixafunc1.c and pixafunc2.c.
         New connected component selections and options in pixaSort.
       Patch from Tony Dovgal for reading tiff rgba files.
       Added new logical operation options for numas.
       New pixConvertRGBToGrayMinMax() that chooses min or max of 3 components.
       Computation of pixelwise aligned stats between multiple images
         of the same size (e.g., video), in pix4.c.
       Very fast binsort implemented for boxa and pixa.
       Cleanup and rename stack, queue, heap and ptra functions:
         all structs and typedefs start with "L_"
         all functions start with "l"
       Sel creation for crosses and T junctions.
       New thresholding operations to binary; split out from adaptmap.c
         into binarize.c.
       Implementation of sauvola binarization, including use of pixtiling.
       Added composite parallel union and intersection morphological operations.
       Small changes to scaling and rotation to improve accuracy; only
         visible on very tiny, symmetric images.
       Implemented DPix (double precision data); useful for the mean
         square accumulator for sauvola binarization.
       New fast hybrid grayscale seedfill, in addition to the interative
         version (contributed by Ankur Jain).
       New or improved regression tests:
         rotate1_reg, rotate2_reg, shear_reg, numa_reg, skew_reg,
         ptra1_reg, ptra2_reg, paint_reg, smallpix_reg, pta_reg,
         pixmem_reg, binarize_reg, grayfill_reg.


1.60   19 Jan 09
       Fixed bug in pixBlockconv(), introduced in 1.59, that causes
       overflow when convolving with an image that has white (255)
       at the edges.  [quickly found by Dave Bryan]
       Include function to display freetype fonts in a pix.
       The files freetype.c and freetype.h are in the distribution, but are not
       yet linked into the library.  This is contributed by Tony Dovgal,
       and this version works only for MSVC.
       Found that the problems with binary compression in giflib are fixed
       with giflib 4.1.6.

1.59   11 Jan 09
       Lots of changes since 1.58.
       New files: affinecompose.c, ptra.c, warper.c, watershed.{h,c}.
          Split: boxfunc.c --> (boxfunc1.c, boxfunc2.c, boxfunc3.c)
       Improved connected component filtering, with logical functions
       applied to indicator arrays (pix4.c, pixafunc.c, numafunc1.c).
       Function to determine if an image can be quantized nicely with
       only a few colors (colorcontent.c, pixconv.c).
       New gray seed-filling functions (seedfill.c, seedfilllow.c).
       Fixed bugs in tophats and hdome, due to misuse of pixSubtractGray()
       (morphapp.c).
       New function for improving contrast (adaptmap.c)
       Watershed transform (still slightly buggy) (watershed.c,h).
       Fast random access into a pix using line pointers (pix1.c, arrayaccess.*)
       Conversions of colormaps from gray to color and v.v. (colormap.c)
       Seedfill function that applies an upper limit to the fill
       distance (seedfill.c)
       New function for warping images with random harmonic distortion
       (with help from Tony Dovgal).
       New generic ptr array utility: all O(1) functions of a stack plus
       random replace, insert and delete (ptra.c).
       Simple functions for colorizing a grayscale image with an arbitrary
       color (pixconv.c, colormap.c)
       Flexible affine transforms (translation, scale, rotation) on pta
       and boxa (affinecompose.c).
       Clipping of foreground (both exact and approximate) starting from
       within a rectangular region of the image (pix4.c)
       Blending a colored rectangle over an image (pix2.c, boxfunc3.c)
       Generation of rectangle covering of mask components (boxfunc3.c).
       Block convolution using tiles (for very large images)  (convolve.c)
       New or improved regression tests in prog:
          locminmax_reg, lowaccess_reg, grayfill_reg, adaptnorm_reg,
          xformbox_reg, warper_reg, cmapquant_reg, compfilter_reg,
          splitcomp_reg, affine_reg, bilinear_reg, projective_reg
       Acknowledgments:
       (1) Big thanks to Tony Dovgal for helping with the warping
           (e.g. for captcha).  Tony also provided an implementation that
           allows rendering truetype fonts into a Pix on windows.
           This is not yet incorporated, because it opens a huge
           "can of worms," which is OK if you're going fishing but
           maybe not if you're trying to support leptonica on many platforms.
           TBD.
       (2) David Shao provided a libtools build system that includes
           building the prog directory!  I believe this will work, but it
           is is not yet included because of problems I continue to have
           with macros in version 2.61 of gnu libtools.
       (3) Steve Rogers is working on a MSVC build for the prog directory.
           I hope to have this available for 1.60.

1.58   27 Sept 08
       Added serialization for numaa.
       New octree quantizer pixOctreeQuantByPopulation(), that uses a
       mixture of level2 and level4 octcubes.  Renamed many functions
       in colorquant1.c, and arranged/documented them more carefully.
       Revised documentation in leptonica.org/papers/colorquant.pdf.
       Simplified customization for I/O libraries and fmemopen() in environ.h.
       Fixed bugs in colormap.c, viewfiles.c, pixarith.c.
       Verified Adam Langley's jbig2enc (encoding jbig2 and generating pdf from
       these encoded files) works properly with the current version -- see
       Section 24 of README.html for usage and build hints.
       New separable convolution; let pixConvolve() take 8, 16 and 32 bpp input.
       New floating pt pix (FPix) utility, which allows convolution and
       arithmetic operations on FPix; also interconversion to Pix.
       Ability to read headers on multipage tiff.
       More robust updown text detection in flipdetect.c.
       Use of sharpening to improve scaling when the scale factor is near 1.0.
       See prog/fpix_reg.c for regression test and usage.
       See prog/blend_reg.c for blending regression test, with new functions.

1.57   13 Jul 08
       New Debian distribution for 1.57 (thanks to Jeff Breidenbach).
       Improved the Otsu-type approach for finding a binarization threshold,
       by choosing the min in the histogram subject to constraints
       (numafunc2.c, adaptmap.c)
       New function pixSeedspread() in seedfill.c, similar to a voronoi tiling,
       that is used for adaptive thresholding in pixThresholdSpreadNorm().
       In the process, fixed a small bug in pixDistanceFunction().
       (The approach was suggested by Ray Smith, and uses the fast
       Vincent distance function method to expand each seed.)
       Generalized the functions in kernel.c to use float weights
       for general convolution (Version 2 for kernel), and added
       gaussian kernel generation.
       Put all jpeg header functions into jpegio.c, where they belong.
       Fixed bugs in pixaInsertPix() and pixaRemovePix().
       Added read/write serialization for Numaa.
       New functions for comparing two images using bounding boxes (classapp.c).

1.56   12 May 08
       Added several new 1d barcode decoders.  The functional interface
       is still in flux.
       Autoconf!   To get this working, it was necessary to: determine and
       set the endian flag; select which libraries are to be linked;
       determine if stream-based memory I/O is enabled.
       This required a major cleanup of the include files, minimizing
       dependencies on external library header files, and getting everything
       to work with both autoconf (HAVE_CONFIG_H) and the old
       customized makefile.  Customization is now all in environ.h.
       pixSaveTiled(): a new way to display tiled images.
       pixtiling.c: interface for splitting an image into a set of
       overlapping tiles, using mirrored borders for tiles touching the
       image boundary.
       pixBlendHardLight(): new blending mode with nice visual effects.
       pixColorFraction(): determines extent of color in image
       Both octree and median-cut color quantization check first if
       image is essentially grayscale; improvements to both algorithms.
       box*TransformOrdered(): general sequence of linear transforms.
       colorquant_reg.c, xformbox_reg.c, hardlight_reg.c: new regr tests.

1.55   16 Mar 08
       New functions for combining two images arbitrarily through a mask,
       including mirrored tiling (pix3.c)
       Modify pixSetMasked*() to work on all images (pix3.c)
       New functions for extracting masked regions such as pixClipMasked()
       (pix3.c) and pixMaskConnComp() and pixMaskBoxa() (boxfunc.c).
       New functions to separate fg from bg (pix3.c), one of which is supported
       by numaSplitDistribution (numafunc.c).
       Modify sobel edge detector to take another parameter (edge.c)
       Support for 4 bpp cmyk color space in jpeg (jpegio.c)
       Modified median cut color quantization (colorquant2.c)
       Renamed colorquant.c (for octree quant) --> colorquant1.c.
       Absorbed conncomp.h and colorquant.h into specific files that
       depend on them (colorquant1.c, conncomp.c, pix.h)
       General convolution with utility for building kernels
       (convolve.c, kernel.c)
       Initial implementation of 1D barcode reader.  So far, we just have the
       signal processing to locate barcodes on a page, deskew them, and
       find the bar widths, along with decoders for two formats.
       (readbarcode.*, prog/barcodetest.c)
       Made the default to stub out read/write for non-tiff image formats
       to memory; it doesn't work on Macs & they were complaining (*io.c)
       Include MSVC project files for building leptonlib under
       windows (leptonlib.*)

1.54   21 Jan 08
       Histogram equalization (enhance.c).
       New functions for pixaa: serialization (r/w), creation
       from pixa, and a tiled/scaled display into a pixa (pixabasic.c,
       pixafunc.c).
       Read/write of tiff to memory (instead of a file, using
       the TIFFClientOpen() callback interface), contributed by Adam
       Langley (tiffio.c, testing in prog/ioformats_reg).
       Improved image statistics functions, both over tiles and
       through a mask over the entire image.  Added standard deviation
       and variance; enable statistics for rgb and colormapped images,
       in addition to 8 bpp grayscale (pix3.c).  New function to
       extract rgb components from a colormapped image (pix2.c).
       Fix pixWriteStringPS() to work with all depths and colormap (psio.c)
       Enable all non-tiff formats to also write and read to/from memory (*io.c)
       Added support for read/write to gif, contributed by Tony Dovgal
       (gifio.c, gifiostub.c, imageio.h).  See Makefile for instructions
       on enabling this.

1.53   29 Dec 07
       Add 4th arg to pixDistanceFunction() to specify b.c.,
       and fixed output to 16 bpp grayscale pix. (seedfill*.c)
       New un-normalized block grayscale convolution (convolve.c)
       Fixed bug in getLogBase2(), so that pixMaxDynamicRange() works
       properly.  This is useful for displaying a 16 bpp pix as
       8 bpp (pixarith.c).  New function for getting rank val for
       rgb over a region specified by a mask (pix3.c).  New function
       for extremem values of rgb colormap (colormap.c).  New
       function pixGlobalNormNoSatRGB(), a variant of pixGlobalNormRGB()
       that prevents saturation for any component above a specified
       rank value (adaptmap.c).  Added mechanism for memory
       management of pix (pix1.c).  Added selective morphology by
       region given by a mask (morphapp.c).  Fixed prototype extracdtion
       to work properly with function prototypes as args; released
       version 1.2 of xtractprotos (parseprotos.c, xtractprotos.c).
       Add a boxa field for pixaa, along with serialization (pixabasic.c),
       and modified display of pixaa to include this (pixafunc.c).
       Coalesced the version numbers for pixa, pixaa, boxa, and boxaa
       serialization (pix.h).
       New progs: modifyhuesat displays modified versions on a grid;
       textlinemask shows simple methods for extracting textline masks.

1.52   25 Nov 07
       Implemented Breuel's whitespace partitioning algorithm (partition.c).
       Generalized pixColorMagnitude() to allow different methods
       for computing the color amount of a pixel (colorcontent.c).
       New methods for computing overlap of boxes (boxfunc.c).
       New methods for painting (solid) and drawing (outline) of boxes,
       replacing boxaDisplay() with pixDrawBoxa*() and pixPaintBoxa*()
       (pix2.c, boxfunc.c).
       Ray Smith fixed bug in the distance function (seedfilllow.c).
       For pixConvertTo1() and pixConvertTo8(), treat input pixs as a
       const and never return a clone or altered cmap (pixconv.c).
       Make pixGlobalNormalRGB() crash-proof (adaptmap.c).
       Tony Dovgal added ability to read jpeg comment (jpegio.c).

1.51   21 Oct 07
       Improved histogramming of gray and color images (pix3.c)
       Histogram statistics (numafunc.c).  Better handling of tiff
       formats, testing rle and packbits output and improving
       level 2 postscript conversion efficiency (readfile.c, psio.c).
       Test program for r/w and display of Sels (prog/seliotest.c).
       Use endiantest to determine automatically which flags to set
       when compiling for big- or little-endians (endiantest.c)
       Compute a color magnitude for each rgb pixel (colorcontent.c).
       Allow separate modification of hue and saturation (enhance.c).
       Global transform of color image for arbitrary white point (adaptmap.c).
   
1.50   07 Oct 07
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: The  image format enum in imageio.h has
       changed.  This is an ABI change, and it requires
       recompilation of the library.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Suggestions by David Bryan again resulted in several changes,
       including improvements to the dwa generating functions and interfaces.
       Major improvements for dwa code generation, including an
       optional filename for the output code, adding function prototypes
       to the code so it can easily be linked outside the library.
       Addition of 2-way composable dwa functions for bricks, with
       code addition to the library, and a new interpreter for dwa
       composable brick sequences  (fmorphauto.c, fhmtauto.c,
       morphtemplate1.c, hmttemplate1.c, morphdwa.c, dwacomb*.2.c, morphseq.c)
       Exhaustively tested in six programs (prog/binmorph*_reg,
       prog/dwamorph*_reg).
       New input modes for Sels, from both color bitmap editors
       and a simple file format (sel1.c).
       Better Sel generation functions in sel2.c, including combs for
       composable brick operations and linear bricks for comparison.
       Removed unnecessary copies for more efficient border add'n & removal. 
       Added RLE basline enc/dec for tiff.
       Binary morphology documentation on the web page updated for these
       changes/additions.
       William Rucklidge unrolled inner loops and added LUTs to
       speed up several more functions, including correlation
       (correlscore.c), centroid calculation (morphapp.c),
       2x linear interp grayscale scanning (scalelow.c),
       thresholding to binary (grayquantlow.c), and removal
       of colormaps to gray (pixconv.c).

1.49   23 Sep 07
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: The  image format enum in imageio.h has
       changed.  This is an ABI change, and it requires
       recompilation of the library.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Suggestions by David Bryan resulted in several changes.
       pixUnpackBinary() unpacks to all depths.
       Can now write and read tiff in LZW and ZIP (gzip) formats.
       These, like uncompressed tiff, work on all bit depths.
       Also enabled pnm 16 bpp r/w, both non-ascii and ascii.
       ioFormatTest() now has better coverage and clarity; this is
       used in prog/ioformats_reg.c.
       Rewrite of morphautogen code to implement opening and closing atomically.
       Cleaner interaction with new text templates (fmorphauto.c,
       fhmtauto.c, sarray.c, *template*.txt,).
       More regression testing (e.g., binmorph1_reg.c, binmorph3_reg.c).

1.48   30 Aug 07
       William Rucklidge sped up pixCorrelationScore() by in-lining
       all bit operations (jbclass.c).
       Generalized rank filtering from 8 bpp to color (rank.c).
       Fixed many functions that take a dest pix so that they don't fail if
       the dimensions or depth are not consistent with the src pix.
       The underlying change for this is to pixCopy() (pix1.c).
       Improved display of Sel as a pix; added selaDisplayInPix() to
       display all Sels in a Sela, orthogonal rotations of Sels (sel1.c).
       New functions for thinning and thickening while preserving connectivity
       and avoiding both free end erosion and dendritic cruft (ccthin.c,
       prog/ccthin1_reg.c, prog/ccthin2_reg.c).
       New function pixaDisplayTiledInRows() for compactly tiling pix
       in a pixa, plus documentation of different existing methods. (pixafunc.c)

1.47   22 Jul 07
       New brick rank order filter (rank.c, prog/ranktest.c, prog/rank_reg.c).
       Use mirror reflection b.c. to avoid special processing at
       boundaries (pix2.c).  Simple sobel edge detector (edge.c).
       Utility for assempling level 2 compressed images in PostScript
       (psio.c, prog/convertfilestops.c).  Enable read/write of 16 bpp,
       grayscale tiff (tiffio.c, pix2.c).
       New function for finding the number of c.c., which is a bit
         faster than finding the b.b. or the component images (conncomp.c)
       New functions for finding local extrema in grayscale image (seedfill.c)

1.46   28 Jun 07
       Added interpreted mode for color morphology (morphseq.c).
       In functions, make effort to consistently do early initialization
       of ptrs to objects returned on the heap.  This is to try to
       avoid letting functions return uninitialized objects, even if
       the return early because of bad input.
       Split pixa.c into 2 files; revised the component filtering
       in both pixafunc.c and boxfunc.c.  Added component filtering
       for "thin" components.
       Added subsampling functions for numa and pta.
       Word segmentation now works at both full and half resolution.
       Better methods for displaying and tiling (for debugging),
       using pixDisplayWrite(), pixaReadFiles() and pixaDisplayTiledAndScaled().

1.45   27 May 07
       Further improvements of orientation and mirror flip detection
       (flipdetect.c).  Added 2x rank downscaling and general integer
       replicative expansion (scale.c).  Simplified interface for
       averaging, and included tiled averaging, which is yet another
       integer reduction scaling function (pix3.c).

1.44   1 May 07
       Split pix2.c into (pix2.c, pix3.c), with basic housekeeping
       functions (e.g., ops on borders, padding) in pix2.c.
       Split numarray.c into (numabasic.c, numafunc.c), with
       constructors and accessors in numabasic.c.  Added a number
       of histogram, rank value and interpolation functions to numafunc.c.
       Add rms and rank difference comparison functions (compare.c).
       Separated orientation and mirror flip detection; fixed the latter
       (flipdetect.c).

1.43   24 Mar 07
       New and fixed functions for handling word boxes (classapp.c)
       More consistent use of L_* flags (e.g., sarray.h, morph.h)
       Morphology on color images (gray ops on each component) (colormorph.c)
       New methods for generating sels; we now have five methods in
       sel1.c and 3 others in selgen.c.  Also a function that
       displays Sels as an image, for use in documentation (sel1.c)
       New high-level converters, such as pixConvertTo8(), pixConvertTo32(),
        pixConvertLossless()   (pixconv.c)
       Identify regression tests, and rename them as prog/*_reg.c.
       Complete revision of plotting package (gplot.c)
       New functions for comparing pix (compare.c)
       New morph application functions, such as the ability to run a
       morph sequence separately on selected c.c. in an image, and
       a fast, quasi-tophat function (morphapp.c)
       Cleanup and new interfaces to border representations of c.c. (ccbord.c)
       Page segmentation application (pageseg.c)
       Better serialization with version control for all major structs.
       Morphological brick operations with 2-way composite sels (morph.c)

1.42   26 Dec 06
       New sorting functions, including 2-d sorting, for boxa and pixa,
       and functions that sort by index (e.g., pixa --> pixa and
       for 2d, pixa --> pixaa; ditto for boxa).  
       New accessors for pix dimensions.  A new strtokSafe() to
       substitute for strtok_r (utils.c).
       Page flip detection, using both rasterop and dwa morphology
       (flipdetect.c), with dwa generation (fliphmtgen.c) and testing
       (prog/fliptest.c).
       Increased basic sels from 42 to 52 (sel2.c).
       Better high-level interfaces for binary morphology with
       brick (separable) sels, both for rasterop (morph.c) and for
       dwa (morphdwa.c); fully tested for both asymmetric and
       symmetric b.c. (prog/morphtest3.c).  Faster area mapping
       reduction for power-of-2 scaling.

1.41   5 Nov 06
       Simplified morph enums, removing all unused ones (morph.h).
       Added new high-level interfaces for adaptive mapping (adaptmap.c).
       New method to extract color content of images (colorcontent.c).
       New method to generate sels from text strings, and to identify
       roman text that is not properly oriented (thanks to Adam Langley).
       Fast grayscale min/max (rank) scale reduction by integer factors.
       New accessors for box and sel, that should be used when possible.
       Thresholding grayscale mask by bandpass (grayquant.c).
       Use of strtok_r() for thread safety.

1.40   15 Oct 06
       Fixed xtractprotos for cygwin.  Minor fixes and improved documentation
       (baseline.c, conncomp.c, pix2.c, morphseq.c, pts.c, numarray.c,
       utils.c, skew.c).  Add ability to quantize an rgb image to a
       specified colormap (colorquant.c); tested in prog/cmapquanttest.c.
       Modifications to allow conditional compilation on MS VC++,
       and to allow I/O calls to be stubbed out (new files: *iostub.c,
       zlibmemstub.c, pstdint.h, arrayaccess.h.ms60)
 
1.39   31 Aug 06
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY:  There has been an interface change to make
       affine, bilinear and projective transforms more general.
       The implementation has been changed to allow them to handle
       all image types and to make them faster (esp. with both sampled
       and interpolated mapping on color images).
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Added prog/Makefile.mingw to build executables.  This is still
       in a relatively raw state.  It is necessary to download
       gnuwin32 packages for 4 libraries (jpeg, png, zlib, tiff)
       to link with leptonlib and the main, and I still have not
       been able to build static executables (they require jpeg2b.dll, etc.).

1.38   8 Aug 06
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: There has been an interface change to both
       simplify and generalize the grayscale morphology operations:
           pixErodeGray(), pixDilateGray(), pixOpenGray(),
	   pixCloseGray(), pixTophat() and pixMorphGradient().
       The prototypes are not changed; old code will compile, but
       it will be wrong!  The old interface had a size and a type
       (horizontal, vertical, square).  The new interface takes
       horizontal and vertical Sel dimensions.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       For cross-compilation to make windows programs, you can use
       src/Makefile.mingw to make a windows version of the library.
       6x scale-to-gray function donated by Alberto Accomazzi.
       Interpreter added for sequence of grayscale morphological
       operations, including the tophat (morphseq.c).
       Pixacc container added to simplify the interface
       for accumulator arithmetic using Pix.
       Removed fmorph.c and fmorphlow.c from the library.  These are
       very limited and were deprecated in favor of fmorphauto(), which
       autogens the code from (nearly) any Sel.
       Fixed some of the gray morphology operations, which had errors
       on the boundary.  All gray morph ops should now be rigorously
       OK (graymorph.c).  For testing of graymorph dualities, the 
       the graymorph interpreter, etc., see prog/morphgraytest.c. 

1.37   10 Jul 06
       [After v.36 was released, Jeff Breidenbach built a Debian
       distribution of Leptonica based on v.36, and you can now get Leptonica
       as a Debian package.  Use "apt-cache search leptonica" to see
       what is available.]  The libraries are now combined into a single
       library (liblept.a, liblept.so) and the function prototypes are
       also in a single file (leptprotos.h).  cextract was found not
       to work on recent versions of linux that support 64 bit data types,
       and it is no longer distributed with leptonica.  Instead, I wrote
       a prototype extractor in leptonica (xtractprotos).  When you
       'make allprotos', it now uses this program.  The shared libraries
       now have major and minor numbers corresponding to the version.

1.36   17 Jun 06
       Line graphics generation (graphics.c) reorganized; separated out pta
       generation from rendering.  Can now render with alpha blending.
       Examples of use are given in prog/graphicstest.c.
       Sort functions for basic geometrical objects now have the option
       of returning a numa giving the sort order on the original array.
       The pixa sort can sort with either clones or copies of the pix.

1.35   21 May 06
       The efficiency of the multipage jbig unsupervised classifier is
       significantly improved due to a NumaHash struture implemented
       by Adam Langley.  Functions for computing runlength in 1 bpp
       images have been added.

1.34   7 May 06
       Completely rewrote the jbig unsupervised classifier.
       It now works on multiple pages, and is more accurate in performing
       visually lossless substitutions.  You can classify by connected
       components, characters, or words.  The old data structures
       and interfaces have been removed.  New unpackers from 1 to 2 and
       1 to 4 bpp, with and without colormaps in the dest.

1.33   18 Mar 06
       Generalized color snap to have different src and target colors,
       and to include colormaps (blend.c).  Distribute into root directory
       that specifies the version number (e.g., 1.33).  Add color
       space conversion between rgb and hsv.  Re-bundle thresholding
       code from (binarize*.c, dibitize*.c) to grayquant*.c.
       pixThreshold8() now also quantizes 8 bpp --> 8 bpp.
       High-level pixRotate() that optionally expands image sufficiently
       so that no pixels are lost in any sequence of rotations (rotate.c).
       Generalize shear to specify color of pixels brought in, including
       for in-place operation (shear.c, rotateshear.c).  Faster version of
       color rotation by area mapping, both about center and about UL corner.
       You can now use the standard color rotator (pixRotateAM) and get
       nearly the same speed as with the "Fast" one.

1.32   4 Feb 06
       Ability to specify a sequence of binary morphological
       (& binary reduction/expansion) operations in a single
       function (morphseq.c).  Fast downscaling combined with conversion
       from rbg to gray and to binary (scale.c).  Utility for
       segmenting images by color (colorseg.c).

1.31   7 Jan 06
       Remove more complicated functions that threshold to 2 bpp, 
       retaining the simplest interface.  Retest all thresholding and
       dithering.  Add "ascii" write of PNM.  Improve graphics writing
       of lines; generalize to colormaps.  New colorization functions
       (paintcmap.c, blend.c).

1.30   22 Dec 05
       Remove most instances of fprintf(stderr, ...), except within
       DEBUG or encapsulated in error, warning or info macros. 
       As a result, there is no output to stderr if NO_CONSOLE_IO is defined. 
       Adaptive mapping to make bg uniform (adaptmap.c).  A few bug fixes.
       New PostScript output functions for embedding PS files
       (prog/converttops).  Generalized some image enhancement functions.
       New functions for generating hit-miss sels.

1.29   12 Nov 05
       More flexible blending of two images, with and without colormaps
       (see blend.c).  Painting colormapped images through masks, etc
       (see paintcmap.c).  More flexible interface for gamma and
       contrast enhancement (see enhance.c).

1.28   8 Oct 05
       Removed all pix colormaps for 1 bpp.  Allow programmatic resetting
       of binary morphology boundary conditions.  Added (yet) another
       simple octcube color quantizer.  New colormap operations.

1.27   24 Sep 05
       Renamed many of the enums and typedefs to avoid namespace
       collisions.  This includes structs and typedefs for BMP.
       Interface change to pixClipRectangle(); apologies to everyone
       whose code is broken by these changes -- I hope it's worth it.
       Removed colormap.h; simplified all colormap usage, hiding details
       from all but a few colormap functions.  Am now saving file format
       in the pix when an image is read, and can by default write
       out in this format.  Resolution info added for jpeg and png.
       Added L_INFO* macros and l_info* fctns for printing
       (e.g., debugging) info.  Suggestions and code kindly
       supplied by Dave Bryan, who helped solve compatibility issues
       with MINGW32 (e.g., in timing and directory functions).
       Added some blending and linear TRC functions.
       Generalized pixEqual() to include all cases with and without
       colormaps.  New regression tests in prog: ioformats, equaltest.

1.26   24 Jul 05
       Generalized affine pointwise to do interpolation as well as
       sampling.  For both projective and bilinear transforms,
       implemented using both sampling and interpolation.
       Added function to remove keystoning by computing the necessary
       projective transform and doing it.  Also find baselines in text images.
       Added downscaling using accurate area-mapping over subpixels.

1.25   25 Jun 05
       Better endian conversion fctns for 2 and 4 byte words.
       Remove colormaps before converting by thresholds.
       Added functions to read header parameters for png and tiff.

1.24   5 Jun 05
       Added image splitting to allow printing in tiles (as several pages).
       Added new octree quantization function to generate 4 and 8 bpp
       colormapped output (not dithered).  Fixed bmp resolution.
       Added new flag for colormap removal (using dest depth based on
       src colormap).  Added I/O tests (prog/ioformats.c)

1.23   10 Apr 05
       Added thresholding from 8 bpp to 2 and 4 bpp, allowing specification
       of both the number of output levels and whether or not a colormap
       is made.

1.22   27 Mar 05
       Add pointer queue facility.  To demonstrate it, you can now
       generate a binary maze using a cellular automaton and find
       the shortest path between two points in the maze.  Add heap
       of pointers (keyed on the first field), which is used to
       implement a priority queue.  This is applied to search for
       a "least cost" path on a grayscale image (a generalization
       of a binary maze).

1.21   28 Feb 05
       Read/write of colormaps to file.  For gplot, add a new
       latex output terminal.  Bring ptrs into 21st century by
       including stdint.h, and using uintptr_t for the ptr address
       arithmetic in arrayaccess.*.  This seems to be OK back to
       RH 7.0, but if you run into trouble with an earlier
       C compiler, let me know.  Also, use enums for global
       constants whenever possible, and qualify named constants
       (e.g., ADD --> ARITH_ADD, HORIZ --> MORPH_HORIZ) to avoid
       possible interactions with other libraries.

1.20   31 Jan 05
       Speed up of tiffio and pngio with byte swap generating new pix.
       In textops.c, ability to split string into paragraphs, 
       in preparation for more general typesetting.
       Automatic hit-miss Sel generation for pattern matching.
       Fast downscaling using a lowpass filter and subsampling.
       Generalization of several grayscale and color operations
       to work on colormapped images.  Improved scale-to-gray and
       scaling reduction operations to be antialiased for best results.

1.19   30 Nov 04
       Additions to fileIO: (1) new jpeg reading options, such as
       returning warnings and scaled raster; (2) ability to write
       custom tiff flags.  Better tiling functions.
       Edge extraction, both with grayscale morphology
       and clipped convolution filters.  More general painting
       through a binary mask: pixSetMaskedGeneral().
       Unpacking from binary to 8, 16 and 32 bpp.  Thresholding
       and dithering from 8 bpp to 2 bpp ("dibitization").  New bitmap
       font facility, using a single rendered font in a variety of
       sizes: allows painting the text on an image (binary, gray, RGB).
       (People have asked for the ability to write text on images).

1.18   25 Aug 04
       Changed typedefs of built-in types to avoid possible conflicts.
       Cleaned up and tested all programs in the prog directory.
       Simplified and fixed the pixSetMasked() and pixCombineMasked()
       functions.

1.17   31 May 04
       Implemented distance function for 16 bpp.  We can now generate
       out 16 bpp PNG.  Simple programs for generating PS from a
       directory of g4tiff or jpeg images.  Changed implementation of
       erosion to allow either asymmetric or symmetric boundary conditions.
       The distinction is described on the binary morphology web page.
       Allow read/write of multipage TIFF files.  Implemented
       read/write of PNM files.

1.16   31 Mar 04
       New depth conversion functions, improved conversion to false color,
       new contour rendering (onto 1 bpp or onto the src grayscale image),
       new orthogonal rotations, better interface for doing arithmetic
       on 2-d arrays using a pix, improved distance function.

1.15   31 Jan 04
       Fast interpolated color rotation with 4x4 subpixels; has
       nearly the accuracy of the slower method using 16x16 subpixels.
       Demonstration of line removal from grayscale sketch in
       prog/lineremoval.c.  Conversion of grayscale to false color.
       Fixed shear and rotation functions to handle angle = 0.0 properly.
       Other small fixes and interface improvements.

1.14   30 Nov 03
       Small implementation changes to list.c.  Better sorting
       routines for number arrays (numa), plus sorting for box
       arrays (boxa) and pix arrays (pixa).  PostScript wrapper
       for jpeg.  Better handling of colormaps, and a simple
       function to convert an RGB pix with not more than 256
       colors to the smallest colormapped pix.  PS output wrappers
       for JFIF JPEG and TIFF G4 files.  Comments compatible
       with doxygen for automatic documentation.

1.13   31 Oct 03
       Cleaned up documentation in src.  Made libraries and test programs
       ANSI C++ compliant.  Added special cases to rasterops for
       alignment to word boundaries.  Fixed pngio.c to work with
       most recent libpng (1.2.5).

1.12   30 Jun 03
       Implemented border chain representation from a binary image,
       writes/reads a compressed version, and renders the original
       image back from the borders.   Also writes outline file out
       in svg format.  Number arrays (numa) and point arrays (pta)
       are also extended to 2nd level arrays (numaa, ptaa).
       Serialized I/O for boxa, pta, and pixa.

1.11   31 May 03
       Implemented generic list handling, for doubly-linked
       list cons cells and arbitrary objects.

1.10   14 Apr 03
       Implemented simple image enhancements in gray and color:
       gamma correction, contrast enhancement, unsharp masking.
       Extended smoothing via block convolution to color.
       Implemented auto-gen'd DWA version of hit-miss transform;
       the code for generating these hmt routines is very similar to
       that for DWA auto-gen'd erosion and dilation.
       
1.9    28 Feb 03
       Implemented a safe, expandable byte queue.  As an example of
       its use, implemented memory-to-memory compression and decompression
       using zlib.  Generalized PS write to include RGB color.
       Implemented a method to find image skew.

1.8    31 Jan 03
       Implemented a simple 1-pass color quantization with dithering,
       and improved the 2-pass octree color quantization.
       Documented with an application page, that includes jbig2.
       Added new general sampling operations and made a table
       that summarizes the available scaling operations.

1.7    31 Dec 02
       Added pixHtmlViewer(), a formatter that allows portable viewing of
       a set of images (like a slide show) in a browser.
       Implemented better octree color quantization, with variable
       number of colors, pruning the octree for good color clusters,
       and fast traversal for pixel assignment to colormap.

1.6    30 Nov 02
       Generalized shear and shear rotation to arbitrary locations
       about which the operation is performed.  Implemented in-place
       translation using pixRasteropIP().  Implemented arbitrary
       affine transform of image two ways: pointwise and sequential.
       Added binarization by error diffusion.  Added simple color
       quantization by octree.

1.5    31 Oct 02
       Put jpeglib.h in local directory.  This, along with the jmorecfg.h
       file there prevents compiler warnings about redefined typedefs.
       Compiled everything with g++ to make strictly ansi C compatible.
       Added interface gplotFromFile() for simple file-based plotting with 
       gnuplot 3.7.2.   Added functions to convert 2, 4 and 8 bpp
       color-mapped (i.e., paletted) images to 24 bpp color or
       8 bpp grayscale.  Added several jbig2 application cores that
       only require a simple wrapper to make into programs.

1.4    30 Sep 02
       Added interface to gnuplot 3.7.2 and to x11 display of images. 
       Added new functions with arrays of images for use in applications
       such as jbig2 encoders, along with a simple jbig2 implementation
       using either hausdorff or correlation scoring.  Added centroid
       finder for images.  For accessing image arrays from arrays of
       image arrays, added a "new reference" (NEW_REF) flag, with a
       ref count attached to the array.  Added power-of-2 binary
       expansion and reduction.

1.3    30 Jun 02
       Extended connected components to 8.  Added morphological
       operations tophat and hdome, along with clipped arithmetic
       operators on grayscale images.  Fixed memory error in
       rasteropGeneralLow() that was found using valgrind.
       Tested most operations with valgrind for memory errors.
       Replaced integer arrays with number arrays, to include floats.
       Added arithmetic functions on grayscale images.

1.2    30 May 02
       Added connected component utility, stack utility, pix arrays,
       line drawing and seed filling.  Binary reconstruction,
       both morphological and raster-oriented, are now supported
       for 4 and 8 connected fills.  Added the distance function
       on binary images, grayscale reconstruction, and grayscale
       morphology using the Gil-Werman method.

1.1    30 Apr 02
       Added orthogonal rotations, binary scaling, PS output,
       binary reconstruction, integer arrays, structuring element
       input/output.

1.0    25 Feb 02
       Initial distribution, with rasterops, binary morphology (two
       implementations: rasterops and dwa), affine transforms
       (translation, shear, scaling, rotation), fast convolution,
       and basic i/o (BMP, PNG and JPEG).